saods9/000755 000765 000000 00000000000 13012655704 012367 5ustar00joyewheel000000 000000 saods9/BUILD.txt000644 000765 000000 00000001252 13001504321 013751 0ustar00joyewheel000000 000000 *************************** Welcome to SAOImage DS9 *************************** Please Note: The build instructions have changed! Quick Instructions for those who hate to read instructions. After installation, ds9 can be located in saods9/bin/ds9. To build DS9, just cut and paste the following commands: *************************** For Linux/X11 MacOSX/Cygwin *************************** cd saods9 unix/configure make *************************** For Aqua MacOSX *************************** requires XCode cd saods9 macosx/configure make *************************** For Windows *************************** requires cygwin with mingw compilers cd saods9 win/configure make saods9/copyright000644 000765 000000 00000001604 12723647024 014327 0ustar00joyewheel000000 000000 Copyright (C) 1999-2016 Smithsonian Astrophysical Observatory, Cambridge, MA, USA 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 3 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, see . Correspondence concerning SAOImage DS9 should be addressed as follows: William Joye Smithsonian Astrophysical Observatory 60 Garden St. Cambridge, MA 02138 USA wjoye@cfa.harvard.edu http://ds9.si.edu/ saods9/ds9/000755 000765 000000 00000000000 13012655542 013066 5ustar00joyewheel000000 000000 saods9/LICENSE.txt000644 000765 000000 00000077330 12061452202 014213 0ustar00joyewheel000000 000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS saods9/make.include000644 000765 000000 00000026453 13001505303 014646 0ustar00joyewheel000000 000000 include ./make.pkgs #-------------------------- dirs DIRS = bin lib include man share dist #-------------------------- cvs stuff CVSFILES = admin \ compilers \ BUILD.txt \ copyright \ ds9 \ macosx \ make.include \ make.pkgs \ mods \ LICENSE.txt \ tests \ tkmacosx \ tksao \ tkwin \ unix \ win #-------------------------- main .NOTPARALLEL : .PHONY : all dirs ds9 tclcheckdns tcliis tclsignal tclxml tclzvfs xpa .PHONY : tkblt tkcon tkhtml1 tkimg tkmpeg tksao tktable .PHONY : ast funtools all : saods9 dirs : @echo "" @echo "*** Cores $(JOBS) ***" @echo "" @echo "*** Install $@ ***" @for d in $(DIRS); do if [ ! -d $$d ]; then mkdir $$d; fi done #-------------------------- ds9 ds9 : scrub ds9/$(OS)/Makefile @echo "" @echo "*** Installing ds9 ***" $(MAKE) -C ds9/$(OS) -j $(JOBS) debug : scrub ds9/$(OS)/Makefile @echo "" @echo "*** Installing ds9 ***" $(MAKE) -C ds9/$(OS) -j $(JOBS) debug ds9/$(OS)/Makefile : @echo "" @echo "*** Configure ds9 ***" cd ds9/$(OS); \ ./configure \ $(WITHTK) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --enable-symbols #-------------------------- tclcheckdns tclcheckdns : tclcheckdns/Makefile @echo "" @echo "*** Install tclcheckdns ***" $(MAKE) -C tclcheckdns -j $(JOBS) install tclcheckdns/Makefile : @echo "" @echo "*** Configure tclcheckdns ***" cd tclcheckdns; \ ./configure \ $(WITHTCL) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ $(CACHE) #-------------------------- tcliis tcliis : tcliis/Makefile @echo "" @echo "*** Install tcliis ***" $(MAKE) -C tcliis -j $(JOBS) install tcliis/Makefile : @echo "" @echo "*** Configure tcliis ***" cd tcliis; \ ./configure \ $(WITHTCL) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ $(CACHE) #-------------------------- tclsignal tclsignal: tclsignal/Makefile @echo "" @echo "*** Install tclsignal ***" $(MAKE) -C tclsignal install tclsignal/Makefile : @echo "" @echo "*** Configure tclsignal ***" cd tclsignal; \ ./configure \ $(WITHTCL) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ $(CACHE) #-------------------------- tclxml # no parallel tclxml : tclxml/Makefile @echo "" @echo "*** Install tclxml ***" $(MAKE) -C tclxml install tclxml/Makefile : @echo "" @echo "*** Configure tclxml ***" cd tclxml; \ ./configure \ $(WITHTCL) \ $(TCLXMLFLAGS) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ $(CACHE) #-------------------------- tclzvfs tclzvfs : tclzvfs/Makefile @echo "" @echo "*** Install tclzvfs ***" $(MAKE) -C tclzvfs install tclzvfs/Makefile : @echo "" @echo "*** Configure tclzvfs ***" cd tclzvfs; \ ./configure \ $(WITHTCL) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ $(CACHE) #-------------------------- xpa # no config.cache xpa : xpa/Makefile @echo "" @echo "*** Install xpa ***" $(MAKE) -C xpa -j $(JOBS) install xpa/Makefile : @echo "" @echo "*** Configure xpa ***" cd xpa; \ ./configure \ $(CONFIGFLAGS) $(TARGET) $(XPAFLAGS) \ $(WITHTCL) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ --with-x=disabled #-------------------------- tkblt tkblt : tkblt/Makefile @echo "" @echo "*** Install tkblt ***" $(MAKE) -C tkblt -j $(JOBS) install tkblt/Makefile : @echo "" @echo "*** Configure tkblt ***" cd tkblt; \ ./configure \ $(WITHTK) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ $(CACHE) #-------------------------- tkcon tkcon : @echo "" @echo "*** Install $@ ***" $(RM) -r lib/tkcon$(TKCONVER) mkdir lib/tkcon$(TKCONVER) cp tkcon/*.tcl lib/tkcon$(TKCONVER) #-------------------------- tkhtml1 # no parallel tkhtml1 : tkhtml1/Makefile @echo "" @echo "*** Install tkhtml1 ***" $(MAKE) -C tkhtml1 install tkhtml1/Makefile : @echo "" @echo "*** Configure tkhtml1 ***" cd tkhtml1; \ ./configure \ $(WITHTK) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ $(CACHE) #-------------------------- tkimg tkimg : tkimg/Makefile @echo "" @echo "*** Install tkimg ***" $(MAKE) -C tkimg -j $(JOBS) install # no config.cache tkimg/Makefile : @echo "" @echo "*** Configure tkimg ***" cd tkimg; \ ./configure \ CFLAGS='-DPNG_NO_WRITE_gAMA' \ $(WITHTK) $(TKIMGFLAGS) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared --enable-symbols #-------------------------- tkmpeg tkmpeg : tkmpeg/Makefile @echo "" @echo "*** Install tkmpeg ***" $(MAKE) -C tkmpeg -j $(JOBS) install tkmpeg/Makefile : @echo "" @echo "*** Configure tkmpeg ***" cd tkmpeg; \ ./configure \ $(WITHTK) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ $(CACHE) #-------------------------- tksao tksao : ast funtools tksao/Makefile @echo "" @echo "*** Install tksao ***" $(MAKE) -C tksao -j $(JOBS) install tksao/Makefile : @echo "" @echo "*** Configure tksao ***" cd tksao; \ ./configure \ $(WITHTK) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ $(CACHE) #-------------------------- ast ast : ast/Makefile ast/ast.h ast/.libs/libast.a ast/.libs/libast_err.a ast/.libs/libast_pal.a ast/Makefile : @echo "" @echo "*** Configure ast ***" cd ast; \ ./configure \ $(ASTFLAGS) \ --without-pthreads --enable-shared=no \ star_cv_cnf_trail_type=long star_cv_cnf_f2c_compatible=no \ $(CONFIGFLAGS) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared ast/ast.h : @echo "" @echo "*** Install ast/ast.h ***" $(MAKE) -C ast -j ast.h $(MAKE) -C ast -j $(JOBS) libast.la $(MAKE) -C ast -j $(JOBS) libast_err.la $(MAKE) -C ast -j $(JOBS) libast_pal.la cp ast/ast.h $(ROOT)/include/. cp ast/grf.h $(ROOT)/include/. cp ast/grf3d.h $(ROOT)/include/. cp ast/.libs/libast.a $(ROOT)/lib/. cp ast/.libs/libast_err.a $(ROOT)/lib/. cp ast/.libs/libast_pal.a $(ROOT)/lib/. ast/.libs/libast.a : @echo "" @echo "*** Install ast/ast.h ***" $(MAKE) -C ast -j ast.h cp ast/ast.h $(ROOT)/include/. cp ast/grf.h $(ROOT)/include/. cp ast/grf3d.h $(ROOT)/include/. ast/.libs/libast_err.a : @echo "" @echo "*** Install ast/libast_err.a ***" $(MAKE) -C ast -j $(JOBS) libast_err.la cp ast/.libs/libast_err.a $(ROOT)/lib/. ast/.libs/libast_pal.a : @echo "" @echo "*** Install ast/libast_pal.a ***" $(MAKE) -C ast -j $(JOBS) libast_pal.la cp ast/.libs/libast_pal.a $(ROOT)/lib/. #-------------------------- funtools funtools : funtools/libfuntools.a # no parallel funtools/libfuntools.a : funtools/Makefile @echo "" @echo "*** Install funtools ***" $(MAKE) -C funtools lib cp funtools/funtools.h $(ROOT)/include/. cp funtools/filter/*.h $(ROOT)/include/. cp funtools/util/*.h $(ROOT)/include/. cp funtools/fitsy/*.h $(ROOT)/include/. cp funtools/libfuntools.a $(ROOT)/lib/. funtools/Makefile : @echo "" @echo "*** Configure funtools ***" cd funtools; \ ./configure \ --with-zlib=../lib --with-wcslib=../lib \ $(CONFIGFLAGS) $(TARGET) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared #-------------------------- tktable # no parallel tktable : tktable/Makefile @echo "" @echo "*** Install tktable ***" $(MAKE) -C tktable install tktable/Makefile : @echo "" @echo "*** Configure tktable ***" cd tktable; \ ./configure \ $(WITHTK) \ --prefix $(ROOT) --exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ $(CACHE) #-------------------------- language .PHONY : language language: cd ds9; \ grep 'msgcat::mc' library/*.tcl | tclsh8.6 util/mergedict.tcl da iso8859-1; \ grep 'msgcat::mc' library/*.tcl | tclsh8.6 util/mergedict.tcl de iso8859-1; \ grep 'msgcat::mc' library/*.tcl | tclsh8.6 util/mergedict.tcl es iso8859-1; \ grep 'msgcat::mc' library/*.tcl | tclsh8.6 util/mergedict.tcl fr iso8859-1; \ grep 'msgcat::mc' library/*.tcl | tclsh8.6 util/mergedict.tcl pt iso8859-1; \ grep 'msgcat::mc' library/*.tcl | tclsh8.6 util/mergedict.tcl cs iso8859-2; \ grep 'msgcat::mc' library/*.tcl | tclsh8.6 util/mergedict.tcl ja euc-jp; \ grep 'msgcat::mc' library/*.tcl | tclsh8.6 util/mergedict.tcl zh big5 #-------------------------- scrub .PHONY : scrub scrub : find . -name "*[~#]" -exec rm {} \; #-------------------------- clean .PHONY : clean .PHONY : dirsclean ds9clean localclean .PHONY : tclclean tclcheckdnsclean tcliisclean tclsignalclean .PHONY : tclxmlclean tclzvfsclean .PHONY : tkclean tkbltclean tkhtml1clean tkimgclean .PHONY : tkmpegclean tksaoclean astclean funtoolsclean tktableclean xpaclean clean : dirsclean tclclean tkclean \ tclcheckdnsclean tcliisclean tclsignalclean \ tclzvfsclean tclxmlclean xpaclean \ tkbltclean tktableclean tkimgclean \ tkmpegclean tkhtml1clean \ tk$(OS)clean \ tksaoclean astclean funtoolsclean ds9clean \ localclean dirsclean : @for d in $(DIRS); do rm -rf $$d; done ds9clean : $(MAKE) -C ds9/$(OS) clean localclean : -rm -f core *~ *# tclclean : $(MAKE) -C tcl$(TCLVER)/$(OS) clean tclcheckdnsclean : $(MAKE) -C tclcheckdns clean tcliisclean : $(MAKE) -C tcliis clean tclsignalclean : $(MAKE) -C tclsignal clean tclxmlclean: $(MAKE) -C tclxml clean tclzvfsclean: $(MAKE) -C tclzvfs clean tkclean : $(MAKE) -C tk$(TCLVER)/$(OS) clean tkbltclean: $(MAKE) -C tkblt clean tkhtml1clean: $(MAKE) -C tkhtml1 clean tkimgclean: rm -fr tkimg/Img/* rm -fr lib/Img1.* $(MAKE) -C tkimg clean tkmpegclean: $(MAKE) -C tkmpeg clean tksaoclean : $(MAKE) -C tksao clean astclean : $(MAKE) -C ast clean funtoolsclean : $(MAKE) -C funtools clean tktableclean: $(MAKE) -C tktable clean xpaclean : $(MAKE) -C xpa clean #-------------------------- distclean .PHONY : dirsdistclean ds9distclean localdistclean .PHONY : tcldistclean tclcheckdnsdistclean tcliisdistclean tclsignaldistclean .PHONY : tclxmldistclean tclzvfsdistclean .PHONY : tkdistclean tkbltdistclean tkhtml1distclean tkimgdistclean .PHONY : tkmpegdistclean .PHONY : tksaodistclean astdistclean funtoolsdistclean .PHONY : tktabledistclean xpadistclean distclean : tcldistclean tkdistclean \ tclcheckdnsdistclean tcliisdistclean tclsignaldistclean \ tclzvfsdistclean tclxmldistclean xpadistclean \ tkbltdistclean tktabledistclean tkimgdistclean \ tkmpegdistclean tkhtml1distclean \ tk$(OS)distclean \ tksaodistclean astdistclean funtoolsdistclean ds9distclean \ dirsdistclean localdistclean dirsdistclean: @for d in $(DIRS); do rm -rf $$d; done ds9distclean : $(MAKE) -C ds9/$(OS) distclean localdistclean : localclean -rm -f config.log config.status config.cache Makefile tcldistclean : $(MAKE) -C tcl$(TCLVER)/$(OS) distclean tclcheckdnsdistclean : $(MAKE) -C tclcheckdns distclean tcliisdistclean : $(MAKE) -C tcliis distclean tclsignaldistclean : $(MAKE) -C tclsignal distclean tclxmldistclean: $(MAKE) -C tclxml distclean tclzvfsdistclean: $(MAKE) -C tclzvfs distclean tkdistclean : $(MAKE) -C tk$(TCLVER)/$(OS) distclean tkbltdistclean: $(MAKE) -C tkblt distclean tkhtml1distclean: $(MAKE) -C tkhtml1 distclean tkimgdistclean: rm -fr tkimg/Img/* rm -fr lib/Img1.* $(MAKE) -C tkimg distclean tkmpegdistclean: $(MAKE) -C tkmpeg distclean tksaodistclean : $(MAKE) -C tksao distclean astdistclean : $(MAKE) -C ast distclean funtoolsdistclean : $(MAKE) -C funtools distclean tktabledistclean: $(MAKE) -C tktable distclean xpadistclean : $(MAKE) -C xpa distclean #-------------------------- cvs .PHONY : commit update commit : scrub cvs commit -m "" $(CVSFILES) update : scrub cvs update $(CVSFILES) saods9/make.pkgs000644 000765 000000 00000001115 13005666665 014202 0ustar00joyewheel000000 000000 #--------------------------basic DS9VERSION=7.5 XPAVERSION=2.1.17 #--------------------------version # tcl 8.6.5 # tk 8.6.5 # tclcheckdns 1.1 # tcliis 1.0 # tclsignal 1.4 # tclzvfs 1.0 # tclxml 3.2 # tcllib 1.15 # xpa 2.1.17 # tkblt 3.2.3 # tktable 2.10 # tkimg 1.4.2 # tkmpeg 1.0.1 # tkhtml1 1.0.3 # tkcon 2.7 # ast 8.0.2 # wcssubs 3.9.0 # funtools 1.4.6 # zlib 1.2.8 TCLVER=8.6 TCLCHECKDNSVER=1.1 TCLIISVER=1.0 TCLSIGNALVER=1.4 TCLXMLVER=3.2 TCLZVFSVER=1.0 TKBLTVER=3.2 TKCONVER=2.7 TKHTMLVER=1.0 TKIMGVER=1.4.2 TKMACOSXVER=1.0 TKMPEGVER=1.0 TKSAOVER=1.0 TKTABLEVER=2.10 TKWINVER=1.0 saods9/tclcheckdns/000755 000765 000000 00000000000 13012655563 014657 5ustar00joyewheel000000 000000 saods9/tcliis/000755 000765 000000 00000000000 13012655563 013661 5ustar00joyewheel000000 000000 saods9/tksao/000755 000765 000000 00000000000 13012655703 013507 5ustar00joyewheel000000 000000 saods9/unix/000755 000765 000000 00000000000 13012655703 013351 5ustar00joyewheel000000 000000 saods9/unix/aclocal.m4000755 000765 000000 00000000223 12562674267 015230 0ustar00joyewheel000000 000000 # # Include the TEA standard macro set # builtin(include,tclconfig/tcl.m4) # # Add here whatever m4 macros you want to define for your package # saods9/unix/configure000755 000765 000000 00000257262 12734310321 015270 0ustar00joyewheel000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for saods9 7.5. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='saods9' PACKAGE_TARNAME='saods9' PACKAGE_VERSION='7.5' PACKAGE_STRING='saods9 7.5' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS CORES TKIMGFLAGS TKFLAGS ROOT ARCH OS PKG_CFLAGS PKG_LIBS PKG_INCLUDES PKG_HEADERS PKG_TCL_SOURCES PKG_STUB_OBJECTS PKG_STUB_SOURCES PKG_STUB_LIB_FILE PKG_LIB_FILE EXEEXT CYGPATH target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_arch ' ac_precious_vars='build_alias host_alias target_alias' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures saods9 7.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/saods9] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of saods9 7.5:";; esac cat <<\_ACEOF Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-arch build name Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF saods9 configure 7.5 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by saods9 $as_me 7.5, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct TEA configuration" >&5 $as_echo_n "checking for correct TEA configuration... " >&6; } if test x"${PACKAGE_NAME}" = x ; then as_fn_error $? " The PACKAGE_NAME variable must be defined by your TEA configure.in" "$LINENO" 5 fi if test x"3.9" = x ; then as_fn_error $? " TEA version not specified." "$LINENO" 5 elif test "3.9" != "${TEA_VERSION}" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&5 $as_echo "warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (TEA ${TEA_VERSION})" >&5 $as_echo "ok (TEA ${TEA_VERSION})" >&6; } fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) # Extract the first word of "cygpath", so it can be a program name with args. set dummy cygpath; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CYGPATH+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CYGPATH"; then ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CYGPATH="cygpath -w" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" fi fi CYGPATH=$ac_cv_prog_CYGPATH if test -n "$CYGPATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 $as_echo "$CYGPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi { $as_echo "$as_me:${as_lineno-$LINENO}: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&5 $as_echo "$as_me: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&6;} # This package name must be replaced statically for AC_SUBST to work # Substitute STUB_LIB_FILE in case package creates a stub library too. # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... ac_aux_dir= for ac_dir in tclconfig "$srcdir"/tclconfig; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in tclconfig \"$srcdir\"/tclconfig" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. #-------------------------------------------------------------------- # Check whether --with-arch was given. if test "${with_arch+set}" = set; then : withval=$with_arch; else with_arch=unknown fi OS="unix" ARCH=$with_arch ROOT=$ac_pwd { $as_echo "$as_me:${as_lineno-$LINENO}: checking system version" >&5 $as_echo_n "checking system version... " >&6; } if ${tcl_cv_sys_version+:} false; then : $as_echo_n "(cached) " >&6 else # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5 $as_echo "$as_me: WARNING: can't find uname command" >&2;} tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5 $as_echo "$tcl_cv_sys_version" >&6; } system=$tcl_cv_sys_version case $system in Darwin* ) TKFLAGS="--disable-corefoundation" CORES=`sysctl -n "hw.ncpu"` ;; CYGWIN* ) CORES=`grep -c ^processor /proc/cpuinfo` ;; Linux* ) TKIMGFLAGS="tcl_cv_cc_visibility_hidden=no" CORES=`grep -c ^processor /proc/cpuinfo` ;; *) CORES=1 ;; esac ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by saods9 $as_me 7.5, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ saods9 config.status 7.5 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi saods9/unix/configure.in000755 000765 000000 00000004042 12734310321 015657 0ustar00joyewheel000000 000000 #!/bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. #----------------------------------------------------------------------- # Sample configure.in for Tcl Extensions. The only places you should # need to modify this file are marked by the string __CHANGE__ #----------------------------------------------------------------------- #----------------------------------------------------------------------- # __CHANGE__ # Set your package name and version numbers here. # # This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION # set as provided. These will also be added as -D defs in your Makefile # so you can encode the package version directly into the source files. # This will also define a special symbol for Windows (BUILD_ # so that we create the export library with the dll. #----------------------------------------------------------------------- AC_INIT([saods9], [7.5]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- TEA_INIT([3.9]) AC_CONFIG_AUX_DIR(tclconfig) #-------------------------------------------------------------------- AC_ARG_WITH([arch],AC_HELP_STRING([--with-arch],[build name]),[],[with_arch=unknown]) OS="unix" AC_SUBST(OS) ARCH=$with_arch AC_SUBST(ARCH) ROOT=$ac_pwd AC_SUBST(ROOT) TEA_CONFIG_SYSTEM case $system in Darwin* ) TKFLAGS="--disable-corefoundation" AC_SUBST(TKFLAGS) CORES=`sysctl -n "hw.ncpu"` ;; CYGWIN* ) CORES=`grep -c ^processor /proc/cpuinfo` ;; Linux* ) TKIMGFLAGS="tcl_cv_cc_visibility_hidden=no" AC_SUBST(TKIMGFLAGS) CORES=`grep -c ^processor /proc/cpuinfo` ;; *) CORES=1 ;; esac AC_SUBST(CORES) AC_OUTPUT([Makefile]) saods9/unix/Makefile.in000644 000765 000000 00000003076 12744214277 015434 0ustar00joyewheel000000 000000 OS = @OS@ ARCH = @ARCH@ ROOT = @ROOT@ TKFLAGS = @TKFLAGS@ TKIMGFLAGS = @TKIMGFLAGS@ JOBS = @CORES@ WITHTCL =--with-tcl=$(ROOT)/tcl$(TCLVER)/unix WITHTK =--with-tk=$(ROOT)/tk$(TCLVER)/unix $(WITHTCL) CACHE =--config-cache --cache-file=../config.cache include ./make.include #--------------------------build .PHONY : saods9 tcl tk saods9 : dirs tcl tk \ tclcheckdns tcliis tclsignal \ tclzvfs tclxml xpa \ tkblt tktable tkimg \ tkmpeg tkhtml1 tkcon \ tksao ds9 tcl : tcl$(TCLVER)/unix/Makefile @echo "" @echo "*** Install tcl$(TCLVER) ***" $(MAKE) -C tcl$(TCLVER)/unix -j $(JOBS) install tcl$(TCLVER)/unix/Makefile : @echo "" @echo "*** Configure tcl$(TCLVER) ***" cd tcl$(TCLVER)/unix; \ ./configure \ --prefix $(ROOT) -exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ --config-cache --cache-file=../../config.cache tk : tk$(TCLVER)/unix/Makefile @echo "" @echo "*** Install tk$(TCLVER) ***" $(MAKE) -C tk$(TCLVER)/unix -j $(JOBS) install tk$(TCLVER)/unix/Makefile : @echo "" @echo "*** Configure tk$(TCLVER) ***" cd tk$(TCLVER)/unix; \ ./configure \ $(TKFLAGS) \ --prefix $(ROOT) -exec-prefix $(ROOT) \ --disable-shared --enable-symbols \ --config-cache --cache-file=../../config.cache #--------------------------clean .PHONY : tkunixclean tkunixclean : #--------------------------distclean .PHONY : tkunixdistclean tkunixdistclean : #--------------------------distribution .PHONY : dist dist : cd bin; tar cvf - ds9* | gzip > ../dist/ds9.$(ARCH).$(DS9VERSION).tar.gz cd bin; tar cvf - xpa* | gzip > ../dist/xpa.$(ARCH).$(XPAVERSION).tar.gz saods9/unix/tclconfig/000755 000765 000000 00000000000 13012655703 015321 5ustar00joyewheel000000 000000 saods9/unix/tclconfig/ChangeLog000644 000765 000000 00000106605 12560425054 017104 0ustar00joyewheel000000 000000 2013-07-04 Jan Nijtmans * unix/tcl.m4: Bug [3324676]: AC_PROG_INSTALL incompat, Bug [3606445]: Unneeded -DHAVE_NO_SEH=1 when not building on Windows 2013-07-02 Jan Nijtmans * unix/tcl.m4: Bug [32afa6e256]: dirent64 check is incorrect in tcl.m4 (thanks to Brian Griffin) 2013-06-20 Jan Nijtmans * unix/tcl.m4: Use X11/Xlib.h for checking where X11 can be found in stead of X11/XIntrinsic.h. Suggested by Pietro Cerutti. 2013-06-04 Jan Nijtmans * unix/tcl.m4: Eliminate NO_VIZ macro as current zlib uses HAVE_HIDDEN in stead. One more last-moment fix for FreeBSD by Pietro Cerutti 2013-05-19 Jan Nijtmans * unix/tcl.m4: Fix for FreeBSD, and remove support for old FreeBSD versions. Patch by Pietro Cerutti 2013-03-12 Jan Nijtmans * unix/tcl.m4: Patch by Andrew Shadura, providing better support for * three architectures they have in Debian. 2012-08-07 Stuart Cassoff * tcl.m4: Added "-DNDEBUG" to CFLAGS_DEFAULT when building with --disable-symbols. 2012-08-07 Stuart Cassoff * tcl.m4: [Bug 3555058]: Checkin [30736d63f0] broke CFLAGS_DEFAULT, LDFLAGS_DEFAULT 2012-08-07 Stuart Cassoff * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS 2012-08-07 Jan Nijtmans * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS 2012-07-25 Jan Nijtmans * tcl.m4: My previous commit (2012-04-03) broke the ActiveTcl build for AMD64, because of the quotes in "C://AMD64/cl.exe". It turns out that the AC_TRY_COMPILE macro cannot handle that. 2012-07-22 Stuart Cassoff * tcl.m4: Tidy: consistency, spelling, phrasing, whitespace. No functional change. 2012-04-03 Jan Nijtmans * tcl.m4: [Bug 3511806] Compiler checks too early This change allows to build the cygwin and mingw32 ports of Tcl/Tk extensions to build out-of-the-box using a native or cross-compiler, e.g. on Cygwin, Linux or Darwin. 2011-04-02 Jan Nijtmans * install-sh: Fix issue with library stripping in install-sh (backported from kevin_walzer's patch from Tcl 8.6 trunk) 2011-04-05 Andreas Kupries * tcl.m4: Applied patch by Jeff Lawson. Nicer error message when tclConfig.sh was not found. 2010-12-15 Stuart Cassoff * install-sh: Upgrade to newer install-sh and use it. * tcl.m4: 2010-12-14 Stuart Cassoff * tcl.m4: Better building on OpenBSD. 2010-12-14 Jan Nijtmans * tcl.m4: when using gcc, don't try to determine Win64 SDK 2010-12-12 Jan Nijtmans * tcl.m4: Determine correctly a cross-compiler-windres 2010-11-23 Jan Nijtmans * tcl.m4: add some cross-compile support, borrowed from Tcl 8.6 2010-09-16 Jeff Hobbs * tcl.m4: correct HP-UX LDFLAGS (only used when building big shell) 2010-09-14 Jeff Hobbs * tcl.m4: add extra if check for .manifest file generation Add notice about package name and version being built. 2010-09-09 Jan Nijtmans * tcl.m4: [FREQ #3058486] TEA_LOAD_CONFIG doesn't set all BUILD_ vars Slightly related: defining BUILD_$1 on all platforms - not only win - allows the -fvisibility feature to be used in extensions as well, at least if you compile against tcl >= 8.5. 2010-08-26 Jeff Hobbs * tcl.m4: ensure safe quoting for autoheader usage 2010-08-19 Jeff Hobbs * tcl.m4: add TEA_ADD_CLEANFILES macro to make adding cleanfiles easier, and add *.exp to CLEANFILES Windows default. (TEA_MAKE_LIB): Enhanced to check for MSVC that requires manifests and auto-embed it into proj DLL via MAKE_SHARED_LIB. Also define VC_MANIFEST_EMBED_DLL and VC_MANIFEST_EMBED_EXE that do the same magic in case it is needed for extended TEA projects. 2010-08-16 Jeff Hobbs *** Bump to TEA_VERSION 3.9 *** If upgrading from TEA_VERSION 3.8, copy over tcl.m4, change TEA_INIT to use 3.9 and reconfigure (ac-2.59+). BUILD_${PACKAGE_NAME} will be auto-defined on Windows for correct setting of TCL_STORAGE_CLASS. TEA_LOAD_CONFIG users should remove the SHLIB_LD_LIBS setting done in configure.in (LIBS will be automagically populated by TEA_LOAD_CONFIG). TEA_EXPORT_CONFIG has been added for ${pkg}Config.sh creators SHLIB_LD_FLAGS was deprecated a while ago, remove it if it is still in your Makefile.in. * tcl.m4: add /usr/lib64 to set of auto-search dirs. [Bug 1230554] Auto-define BUILD_$PACKAGE_NAME so users don't need to. This needs to correspond with $pkg.h define magic for TCL_STORAGE_CLASS. Auto-define CLEANFILES. Users can expand it. (SHLIB_LD_LIBS): define to '${LIBS}' default and change it only if necessary. Platforms not using this may simply not work or have very funky linkers. (TEA_LOAD_CONFIG): When loading config for another extension, auto-add stub libraries found with TEA_ADD_LIBS. Eases configure.in for modules like itk and img::*. (TEA_EXPORT_CONFIG): Add standardized function for exporting a ${pkg}Config.sh. See use by img::* and itcl. 2010-08-12 Jeff Hobbs *** Bump to TEA_VERSION 3.8 *** If upgrading from TEA_VERSION 3.7, copy over tcl.m4, change TEA_INIT to use 3.8 and reconfigure (ac-2.59+). No other changes should be necessary. * tcl.m4: remove more vestigial bits from removed platforms. Add back SCO_SV-3.2*. Remove use of DL_LIBS and DL_OBJS and related baggage - these are only needed by the core to support 'load'. Allow for macosx in TEA_ADD_SOURCES. Correct check for found_xincludes=no in TEA_PATH_UNIX_X. 2010-08-11 Jeff Hobbs * tcl.m4: remove the following old platform configurations: UNIX_SV*|UnixWare-5*, SunOS-4.*, SINIX*5.4*, SCO_SV-3.2*, OSF1-1.*, NEXTSTEP-*, NetBSD-1.*|FreeBSD-[[1-2]].*, MP-RAS-*, IRIX-5.*, HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*, dgux*, BSD/OS-2.1*|BSD/OS-3* (AIX): drop AIX-pre4 support and use of ldAix, use -bexpall/-brtl 2010-07-05 Jan Nijtmans * tcl.m4: [Patch #1055668] removal of exported internals from tclInt.h (EXTERN macro) 2010-04-14 Jan Nijtmans * tcl.m4 - Backport a lot of quoting fixes from tcl8.6/unix/tcl.m4 - Fix determination of CYGPATH for CYGWIN With those fixes, itcl and tdbc compile fine with CYGWIN 2010-04-06 Jan Nijtmans * install-sh [Bug 2982540] configure and install* script files should always have LF 2010-02-19 Stuart Cassoff * tcl.m4: Correct compiler/linker flags for threaded builds on OpenBSD. 2010-01-19 Jan Nijtmans * tcl.m4: Detect CYGWIN variant: win32 or unix 2010-01-03 Donal K. Fellows * unix/tcl.m4 (TEA_CONFIG_CFLAGS): [Tcl Bug 1636685]: Use the configuration for modern FreeBSD suggested by the FreeBSD porter. 2009-10-22 Jan Nijtmans * tcl.m4: [Tcl Patch #2883533] tcl.m4 support for Haiku OS 2009-04-27 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): harden the check to add _r to CC on AIX with threads. 2009-04-10 Daniel Steffen * tcl.m4 (Darwin): check for 64-bit TkAqua. 2009-03-26 Jan Nijtmans * tclconfig/tcl.m4: Adapt LDFLAGS and LD_SEARCH_FLAGS together with SHLIB_LD definition to unbreak building on HPUX. 2009-03-20 Andreas Kupries * tclconfig/tcl.m4: Changed SHLIB_LD definition to unbreak building on HPUX. 2009-03-16 Joe English * tcl.m4(TEA_PUBLIC_TK_HEADERS): Look at ${TK_INCLUDE_SPEC} (found in tkConfig.sh) when trying to guess where tk.h might be [Patch 1960628]. 2009-03-11 Joe English * tcl.m4: Allow ${SHLIB_SUFFIX} to be overridden at configure-time [Patch 1960628]. Also fix some comment typos, and an uninitialized variable bug-waiting-to-happen. 2008-12-21 Jan Nijtmans * tcl.m4: [Bug 2073255] Tcl_GetString(NULL) doesn't crash on HP-UX (this bug report was for Tcl, but holds for TEA as well.) 2008-12-20 Daniel Steffen * tcl.m4: sync with tdbc tcl.m4 changes (SunOS-5.11): Sun cc SHLIB_LD: use LDFLAGS_DEFAULT instead of LDFLAGS 2008-12-02 Jeff Hobbs *** Bump to TEA_VERSION 3.7 *** * tcl.m4: in private header check, check for Port.h instead of Int.h to ensure all private headers are available. 2008-11-04 Daniel Steffen * tcl.m4 (Darwin): sync TEA_PRIVATE_TK_HEADERS handling of Tk.framework PrivateHeaders with TEA_PRIVATE_TCL_HEADERS. 2008-11-04 Jeff Hobbs * tcl.m4 (TEA_PATH_TCLCONFIG, TEA_PATH_TKCONFIG): exit with error when tclConfig.sh cannot be found. [Bug #1997760] (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): allow for finding the headers installed in the public areas, e.g. a result of make install-private-headers. [Bug #1631922] 2008-08-12 Daniel Steffen * tcl.m4 (Darwin): link shlib with current and compatiblity version flags; look for libX11.dylib when searching for X11 libraries. 2008-06-12 Daniel Steffen * tcl.m4 (SunOS-5.11): fix 64bit amd64 support with gcc & Sun cc. 2008-03-27 Daniel Steffen * tcl.m4 (SunOS-5.1x): fix 64bit support for Sun cc. [Bug 1921166] 2008-02-01 Donal K. Fellows * tcl.m4 (TEA_CONFIG_CFLAGS): Updated to work at least in part with more modern VC versions. Currently just made the linker flags more flexible; more work may be needed. 2007-10-26 Daniel Steffen * tcl.m4 (Darwin): add support for 64-bit X11. 2007-10-23 Jeff Hobbs *** Tagged tea-3-branch to start TEA 4 development on HEAD *** 2007-09-17 Joe English * tcl.m4: use '${CC} -shared' instead of 'ld -Bshareable' to build shared libraries on current NetBSDs [Bug 1749251]. 2007-09-15 Daniel Steffen * tcl.m4: replace all direct references to compiler by ${CC} to enable CC overriding at configure & make time. (SunOS-5.1x): replace direct use of '/usr/ccs/bin/ld' in SHLIB_LD by 'cc' compiler driver. 2007-08-08 Jeff Hobbs * tcl.m4: check Ttk dir for Tk private headers (8.5). Add some comments to other bits. 2007-06-25 Jeff Hobbs * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): move where / is added. 2007-06-13 Jeff Hobbs * tcl.m4: fix --with-tkinclude alignment. [Bug 1506111] 2007-06-06 Daniel Steffen * tcl.m4 (Darwin): fix 64bit arch removal in fat 32&64bit builds. 2007-05-18 Donal K. Fellows * tcl.m4: Added quoting so that paths with spaces cause fewer problems. 2007-03-07 Daniel Steffen * tcl.m4 (Darwin): s/CFLAGS/CPPFLAGS/ in -mmacosx-version-min check. 2007-02-15 Jeff Hobbs * tcl.m4: correct private header check to search in generic subdir 2007-02-09 Jeff Hobbs *** Bump to TEA_VERSION 3.6 *** * tcl.m4: correct -d to -f (TEA_CONFIG_CFLAGS): SHLIB_SUFFIX is .so on HP ia64 [Bug 1615058] 2007-02-08 Jeff Hobbs * tcl.m4 (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): check that the dirs actually have private headers. [Bug 1631922] 2007-02-04 Daniel Steffen * tcl.m4: add caching to -pipe check. 2007-01-25 Daniel Steffen * tcl.m4: integrate CPPFLAGS into CFLAGS as late as possible and move (rather than duplicate) -isysroot flags from CFLAGS to CPPFLAGS to avoid errors about multiple -isysroot flags from some older gcc builds. 2006-01-19 Daniel Steffen * tcl.m4: ensure CPPFLAGS env var is used when set. [Bug 1586861] (Darwin): add -isysroot and -mmacosx-version-min flags to CPPFLAGS when present in CFLAGS to avoid discrepancies between what headers configure sees during preprocessing tests and compiling tests. 2006-12-19 Daniel Steffen * tcl.m4 (Darwin): --enable-64bit: verify linking with 64bit -arch flag succeeds before enabling 64bit build. 2006-12-16 Daniel Steffen * tcl.m4 (Linux): fix previous change to use makefile variable LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile are picked up. 2006-11-26 Daniel Steffen * tcl.m4 (Linux): --enable-64bit support. [Patch 1597389], [Bug 1230558] 2006-08-18 Daniel Steffen * tcl.m4 (Darwin): add support for --enable-64bit on x86_64, for universal builds including x86_64 and for use of -mmacosx-version-min instead of MACOSX_DEPLOYMENT_TARGET. For Tk extensions, remove 64-bit arch flags from CFLAGS like in the Tk configure, as neither TkAqua nor TkX11 can be built for 64-bit at present. 2006-03-28 Jeff Hobbs * tcl.m4: []-quote AC_DEFUN functions. (TEA_PATH_TKCONFIG): Fixed Windows-specific check for tkConfig.sh. (TEA_MAKE_LIB): Prepend 'lib' for Windows-gcc configs. 2006-03-07 Joe English * tcl.m4: Set SHLIB_LD_FLAGS='${LIBS}' on NetBSD, as per the other *BSD variants [Bug 1334613]. 2006-01-25 Jeff Hobbs *** Bump to TEA version 3.5 *** * tcl.m4: keep LD_SEARCH_FLAGS and CC_SEARCH_FLAGS synchronous with core tcl.m4 meaning. 2006-01-24 Daniel Steffen * tcl.m4 (Darwin): use makefile variable LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile are picked up. [Bug 1403343] 2006-01-23 Jeff Hobbs * tcl.m4: add C:/Tcl/lib and C:/Progra~1/Tcl/lib dirs to check for *Config.sh on Windows. [Bug 1407544] 2006-01-23 Daniel Steffen * tcl.m4 (Darwin): for Tk extensions, remove -arch ppc64 from CFLAGS like in the Tk configure, as neither TkAqua nor TkX11 can be built for 64bit at present (no 64bit GUI libraries). 2006-01-22 Jeff Hobbs * tcl.m4: restore system=windows on Windows. Remove error if 'ar' isn't found (it may not be on Windows). Do not add -lxnet or define _XOPEN_SOURCE on HP-UX by default. Ensure the C|LDFLAGS_DEFAULT gets the fully sub'd value at configure time. 2006-01-10 Daniel Steffen * tcl.m4: add caching, use AC_CACHE_CHECK instead of AC_CACHE_VAL where possible, consistent message quoting, sync relevant tcl/unix/tcl.m4 HEAD changes and gratuitous formatting differences (notably sunc removal of support for for ancient BSD's, IRIX 4, RISCos and Ultrix by kennykb), Darwin improvements to TEA_LOAD_*CONFIG to make linking work against Tcl/Tk frameworks installed in arbitrary location, change TEA_PROG_* search order (look in *_BIN_DIR parents before *_PREFIX). 2006-01-05 Jeff Hobbs * tcl.m4: add dkf's system config refactor 2006-01-04 Jeff Hobbs * tcl.m4: remove extraneous ' that causes bash 3.1 to choke 2005-12-19 Joe English * tcl.m4 (TEA_PATH_TCLCONFIG &c): Look for tclConfig.sh &c in ${libdir}, where they are installed by default [Patch #1377407]. 2005-12-05 Don Porter * tcl.m4 (TEA_PUBLIC_*_HEADERS): Better support for finding header files for uninstalled Tcl and Tk. 2005-12-02 Jeff Hobbs * tcl.m4: correctly bump TEA_VERSION var to 3.4 2005-12-01 Daniel Steffen * unix/tcl.m4 (Darwin): fixed error when MACOSX_DEPLOYMENT_TARGET unset 2005-11-29 Jeff Hobbs * tcl.m4: *** Bump to TEA version 3.4 *** Add Windows x64 build support. Remove TEA_PATH_NOSPACE and handle the problem with ""s where necessary - the macro relied on TCLSH_PROG which didn't work for cross-compiles. 2005-11-27 Daniel Steffen * tcl.m4 (Darwin): add 64bit support, add CFLAGS to SHLIB_LD to support passing -isysroot in env(CFLAGS) to configure (flag can't be present twice, so can't be in both CFLAGS and LDFLAGS during configure), don't use -prebind when deploying on 10.4. (TEA_ENABLE_LANGINFO, TEA_TIME_HANDLER): add/fix caching. 2005-10-30 Daniel Steffen * tcl.m4: fixed two tests for TEA_WINDOWINGSYSTEM = "aqua" that should have been for `uname -s` = "Darwin" instead; added some missing quoting. (TEA_PROG_TCLSH, TEA_PROG_WISH): fix incorrect assumption that install location of tclConfig.sh/tkConfig.sh allows to determine the tclsh/wish install dir via ../bin. Indeed tcl/tk can be configured with arbitrary --libdir and --bindir (independent of prefix) and such a configuration is in fact standard with Darwin framework builds. At least now also check ${TCL_PREFIX}/bin resp. ${TK_PREFIX}/bin for presence of tclsh resp. wish (if tcl/tk have been configured with arbitrary --bindir, this will still not find them, for a general solution *Config.sh would need to contain the values of bindir/libdir/includedir passed to configure). 2005-10-07 Jeff Hobbs * tcl.m4: Fix Solaris 5.10 check and Solaris AMD64 64-bit builds. 2005-10-04 Jeff Hobbs * tcl.m4 (TEA_PRIVATE_TCL_HEADERS): add / to finish sed macro (TEA_ENABLE_THREADS): don't check for pthread_attr_setstacksize func 2005-09-13 Jeff Hobbs * tcl.m4: *** Update to TEA version 3.3 *** define TEA_WINDOWINGSYSTEM in TEA_LOAD_TKCONFIG. Make --enable-threads the default (users can --disable-threads). Improve AIX ${CC}_r fix to better check existing ${CC} value. Do the appropriate evals to not require the *TOP_DIR_NATIVE vars be set for extensions that use private headers. Make aqua check for Xlib compat headers the same as win32. 2005-07-26 Mo DeJong * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH, TEA_PROG_WISH, TEA_BUILD_WISH): Remove TEA_BUILD_TCLSH and TEA_BUILD_WISH because of complaints that it broke the build when only an installed version of Tcl was available at extension build time. The TEA_PROG_TCLSH and TEA_PROG_WISH macros will no longer search the path at all. The build tclsh or installed tclsh shell will now be found by TEA_PROG_TCLSH. 2005-07-24 Mo DeJong * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH, TEA_PROG_WISH, TEA_BUILD_WISH): Split confused search for tclsh on PATH and build and install locations into two macros. TEA_PROG_TCLSH and TEA_PROG_WISH search the system PATH for an installed tclsh or wish. The TEA_BUILD_TCLSH and TEA_BUILD_WISH macros determine the name of tclsh or wish in the Tcl or Tk build directory even if tclsh or wish has not yet been built. [Tcl bug 1160114] [Tcl patch 1244153] 2005-06-23 Daniel Steffen * tcl.m4 (TEA_PRIVATE_TK_HEADERS): add ${TK_SRC_DIR}/macosx to TK_INCLUDES when building against TkAqua. * tcl.m4 (TEA_PATH_X): fixed missing comma in AC_DEFINE * tcl.m4: changes to better support framework builds of Tcl and Tk out of the box: search framework install locations for *Config.sh, and if in presence of a framework build, use the framework's Headers and PrivateHeaders directories for public and private includes. [FR 947735] 2005-06-18 Daniel Steffen * tcl.m4 (Darwin): add -headerpad_max_install_names to LDFLAGS to ensure we can always relocate binaries with install_name_tool. 2005-06-04 Daniel Steffen * tcl.m4 (TEA_PATH_X): for TEA_WINDOWINGSYSTEM == aqua, check if xlib compat headers are available in tkheaders location, otherwise add xlib sourcedir to TK_XINCLUDES. 2005-04-25 Daniel Steffen * tcl.m4: added AC_DEFINE* descriptions (from core tcl.m4) to allow use with autoheader. (Darwin): added configure checks for recently added linker flags -single_module and -search_paths_first to allow building with older tools (and on Mac OS X 10.1), use -single_module in SHLIB_LD. (TEA_MISSING_POSIX_HEADERS): added caching of dirent.h check. (TEA_BUGGY_STRTOD): added caching (sync with core tcl.m4). 2005-03-24 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): use Tcl header defaults for wide int type only on Windows when __int64 is detected as valid. 2005-03-24 Don Porter * README.txt: Update reference to "SC_* macros" to "TEA_* macros". * tcl.m4: Incorporated recent improvements in SC_PATH_TCLCONFIG and SC_PATH_TKCONFIG into TEA_PATH_TCLCONFIG and TEA_PATH_TKCONFIG. Corrected search path in TEA_PATH_CONFIG and added AC_SUBST($1_BIN_DIR) to TEA_LOAD_CONFIG so that packages that load the configuration of another package can know where they loaded it from. 2005-03-18 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): correct 2005-03-17 change to have variant LD_SEARCH_FLAGS for gcc and cc builds. * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): correct x-compile check. 2005-03-17 Jeff Hobbs * tcl.m4: Correct gcc build and HP-UX-11. 2005-02-08 Jeff Hobbs * tcl.m4 (TEA_ADD_LIBS): don't touch lib args starting with -. (TEA_CONFIG_CFLAGS): only define _DLL for CE in shared build. (TEA_MAKE_LIB): set RANLIB* to : on Windows (it's not needed). 2005-02-01 Jeff Hobbs * tcl.m4: redo of 2005-01-27 changes to correctly handle paths with spaces. Win/CE and Win/64 builds now require a prebuilt tclsh to handle conversion to short pathnames. This is done in the new TEA_PATH_NOSPACE macro. For Win/CE|64, make CC just the compiler and move the necessary includes to CFLAGS. (TEA_CONFIG_CFLAGS): Add Solaris 64-bit gcc build support. (TEA_PROG_TCLSH, TEA_PROG_WISH): Allow TCLSH_PROG and WISH_PROG to be set in the env and prevent resetting. (TEA_ADD_LIBS): On Windows using GCC (mingw), convert foo.lib args to -lfoo, for use with mingw. *** POTENTIAL INCOMPATABILITY *** (TEA_CONFIG_CFLAGS): Fix AIX gcc builds to work out-of-box. Bumped TEA to 3.2. 2005-01-27 Jeff Hobbs * tcl.m4: remove cygpath calls to support msys. Update base CE build assumption to "420,ARMV4,ARM,Pocket PC 2003". Make STLIB_LD use $LINKBIN -lib. 2005-01-25 Daniel Steffen * tcl.m4 (Darwin): fixed bug with static build linking to dynamic library in /usr/lib etc instead of linking to static library earlier in search path. [Tcl Bug 956908] Removed obsolete references to Rhapsody. 2004-12-29 Jeff Hobbs * tcl.m4: Updates for VC7 compatibility, fixing CFLAGS and LDFLAGS options, using better default -O levels. [Bug 1092952, 1091967] 2004-12-29 Joe English * tcl.m4: Do not use ${DBGX} suffix when building shared libraries [patch #1081595, TIP #34] 2004-09-07 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): support eVC4 Win/CE builds 2004-08-10 Jeff Hobbs * tcl.m4 (TEA_INIT, TEA_PREFIX): update handling of exec_prefix to work around subdir configures since autoconf only propagates the prefix (not exec_prefix). 2004-07-23 Daniel Steffen * tcl.m4 (TEA_CONFIG_CFLAGS): Darwin section: brought inline with Tcl 8.5 HEAD config, removed core specific & obsolete settings. 2004-07-22 Jeff Hobbs * tcl.m4 (TEA_PATH_X): check in TK_DEFS for MAC_OSX_TK to see if we are compiling on Aqua. Add TEA_WINDOWINGSYSTEM var that reflects 'tk windowingsystem' value. 2004-07-16 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): force a threaded build when building against a threaded core. (CFLAGS_WARNING): Remove -Wconversion for gcc builds (TEA_CONFIG_CFLAGS): Reorder configure.in for better 64-bit build configuration, replacing EXTRA_CFLAGS with CFLAGS. [Bug #874058] Update to latest Tcl 8.5 head config settings. Call this TEA version 3.1. 2004-04-29 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): replace AC_TRY_RUN test with AC_TRY_COMPILE for the long vs. long long check. (kenny) 2004-04-26 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): update against core tcl.m4 to define TCL_WIDE_INT_IS_LONG if 'using long'. 2004-03-19 Jeff Hobbs * tcl.m4: correct Windows builds getting LDFLAGS info in MAKE_LIB 2004-02-11 Jeff Hobbs * tcl.m4: correct TCL_INCLUDES for private headers on Windows - it doesn't need the eval. 2004-02-10 Jeff Hobbs * tcl.m4: don't require TK_INCLUDES and TCL_INCLUDES to have the DIR_NATIVE vars defined when using private headers on unix. Allow $... to TEA_ADD_SOURCES for constructs like TEA_ADD_SOURCES([\$(WIN_OBJECTS)]), that allow the developer to place more in the Makefile.in. tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and CHECK on limits.h 2003-12-10 Jeff Hobbs * Makefile.in: added TEA_ADD_LIBS, TEA_ADD_INCLUDES and * configure: TEA_ADD_CFLAGS to configurable parameters with * configure.in: PKG_* equivs in the Makefile. This allows the * tclconfig/tcl.m4: user to worry less about actual magic VAR names. Corrected Makefile.in to note that TEA_ADD_TCL_SOURCES requires exact file names. 2003-12-09 Jeff Hobbs * tcl.m4: updated OpenBSD support based on [Patch #775246] (cassoff) 2003-12-05 Jeff Hobbs * configure: * configure.in: * Makefile.in (VPATH): readd $(srcdir) to front of VPATH as the first part of VPATH can get chopped off. Change .c.$(OBJEXT) rule to .c.@OBJEXT@ to support more makes. * tclconfig/tcl.m4: add TEA_ADD_STUB_SOURCES to support libstub generation and TEA_ADD_TCL_SOURCES to replace RUNTIME_SOURCES as the way the user specifies library files. 2003-12-03 Jeff Hobbs * configure: Update of TEA spec to (hopefully) simplify * configure.in: some aspects of TEA by making use of more * Makefile.in: AC 2.5x features. Use PACKAGE_NAME (instead * generic/tclsample.c: of PACKAGE) and PACKAGE_VERSION (instead of * tclconfig/tcl.m4: VERSION) arguments to AC_INIT as the TEA package name and version. Provide a version argument to TEA_INIT - starting with 3.0. Drop all use of interior shell substs that older makefiles didn't like. Use PKG_* naming convention instead. Move specification of source files and public headers into configure.in with TEA_ADD_SOURCES and TEA_ADD_HEADERS. These will be munged during ./configure into the right obj file names (no $(SOURCES:.c=.obj) needed). There is almost nothing that should be touched in Makefile.in now for the developer. May want to add a TEA_ADD_TCL_SOURCES for the RUNTIME_SOURCES that remains. Use SHLID_LD_FLAGS (instead of SHLID_LDFLAGS) as Tcl does. Only specify the user requested LDFLAGS/CFLAGS in the Makefile, don't mention the _OPTIMIZE/_DEBUG variants. 2003-10-15 Jeff Hobbs * tcl.m4: create a TEA_SETUP_COMPILER_CC the precedes the TEA_SETUP_COMPILER macro. They are split so the check for CC occurs before any use of CC. Also add AC_PROG_CPP to the compiler checks. 2003-10-06 Jeff Hobbs * tcl.m4: Updated for autoconf 2.5x prereq. Where TCL_WIDE_INT_TYPE would be __int64, defer to the code checks in tcl.h, which also handles TCL_LL_MODIFIER* properly. 2003-04-22 Jeff Hobbs * tcl.m4: correct default setting of ARCH for WinCE builds. Correct \ escaping for CE sed macros. 2003-04-10 Jeff Hobbs * tcl.m4: replace $(syscal) construct with older `syscall` for systems where sh != bash. 2003-04-09 Jeff Hobbs * tcl.m4 (TEA_WITH_CELIB): add --enable-wince and --with-celib options for Windows/CE compilation support. Requires the Microsoft eMbedded SDK and Keuchel's celib emulation layer. 2003-02-18 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): Make sure -lpthread gets passed on the link line when checking for the pthread_attr_setstacksize symbol. (dejong) * tcl.m4 (TEA_SETUP_COMPILER): added default calls to TEA_TCL_EARLY_FLAGS, TEA_TCL_64BIT_FLAGS, TEA_MISSING_POSIX_HEADERS and TEA_BUGGY_STRTOD. 2003-02-14 Jeff Hobbs * tcl.m4: correct HP-UX ia64 --enable-64bit build flags 2003-01-29 Jeff Hobbs * tcl.m4: check $prefix/lib as well as $exec_prefix/lib when looking for tcl|tkConfig.sh, as this check is done before we would set exec_prefix when the user does not define it. 2003-01-21 Mo DeJong * tcl.m4 (TEA_CONFIG_CFLAGS): Fix build support for mingw, the previous implementation would use VC++ when compiling with mingw gcc. Don't pass -fPIC since gcc always compiles pic code under win32. Change some hard coded cases of gcc to ${CC}. 2002-10-15 Jeff Hobbs * tcl.m4: move the CFLAGS definition from TEA_ENABLE_SHARED to TEA_MAKE_LIB because setting too early confuses other AC_* macros. Correct the HP-11 SHLIB_LD_LIBS setting. * tcl.m4: add the CFLAGS definition into TEA_ENABLE_SHARED and make it pick up the env CFLAGS at configure time. 2002-10-09 Jeff Hobbs * tcl.m4: add --enable-symbols=mem option to enable TCL_MEM_DEBUG. Improved AIX 64-bit build support, allow it on AIX-4 as well. Enable 64-bit HP-11 compilation with gcc. Enable 64-bit IRIX64-6 cc build support. Correct FreeBSD thread library linkage. Add OSF1 static build support. Improve SunOS-5 shared build SHLIB_LD macro. 2002-07-20 Zoran Vasiljevic * tcl.m4: Added MINGW32 to list of systems checked for Windows build. Also, fixes some indentation issues with "--with-XXX" options. 2002-04-23 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): added USE_THREAD_ALLOC define to use new threaded allocatory by default on Unix for Tcl 8.4. (TEA_CONFIG_CFLAGS): corrected LD_SEARCH_FLAGS for FreeBSD-3+. 2002-04-22 Jeff Hobbs * tcl.m4 (TEA_SETUP_COMPILER): removed call to AC_CYGWIN so that we can use autoconf 2.5x as well as 2.13. This prevents us from being able to warn against the use of cygwin gcc at configure time, but allows autoconf 2.5x, which is what is shipped with most newer systems. 2002-04-11 Jeff Hobbs * tcl.m4: Enabled COFF as well as CV style debug info with --enable-symbols to allow Dr. Watson users to see function info. More info on debugging levels can be obtained at: http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp 2002-04-03 Jeff Hobbs * tcl.m4: change all SC_* macros to TEA_*. The SC_ was for Scriptics, which is no more. TEA represents a better, independent prefix that won't need changing. Added preliminary mingw gcc support. [Patch #538772] Added TEA_PREFIX macro that handles defaulting the prefix and exec_prefix vars to those used by Tcl if none were specified. Added TEA_SETUP_COMPILER macro that encompasses the AC_PROG_CC check and several other basic AC_PROG checks needed for making executables. This greatly simplifies user's configure.in files. Collapsed AIX-5 defines into AIX-* with extra checks for doing the ELF stuff on AIX-5-ia64. Updated TEA_ENABLE_THREADS to take an optional arg to allow switching it on by default (for Thread) and add sanity checking to warn the user if configuring threads incompatibly. 2002-03-29 Jeff Hobbs * tcl.m4: made sure that SHLIB_LDFLAGS was set to LDFLAGS_DEFAULT. Removed --enable-64bit support for AIX-4 because it wasn't correct. Added -MT or -MD Windows linker switches to properly support symbols-enabled builds. 2002-03-28 Jeff Hobbs * tcl.m4: called AC_MSG_ERROR when SC_TEA_INIT wasn't called first instead of calling it as that inlines it each time in shell code. Changed Windows CFLAGS_OPTIMIZE to use -O2 instead of -Oti. Noted TCL_LIB_VERSIONS_OK=nodots for Windows builds. A few changes to support itcl (and perhaps others): Added support for making your own stub libraries to SC_MAKE_LIB. New SC_PATH_CONFIG and SC_LOAD_CONFIG that take a package name arg and find that ${pkg}Config.sh file. itk uses this for itcl. 2002-03-27 Jeff Hobbs * tcl.m4: made SC_LOAD_TKCONFIG recognize when working with a Tk build dir setup. Added EXTRA_CFLAGS and SHLIB_LD_LIBS substs to SC_CONFIG_CFLAGS. Added XLIBSW onto LIBS when it is defined. Remove TCL_LIBS from MAKE_LIB and correctly use SHLIB_LD_LIBS instead to not rely as much on tclConfig.sh cached info. Add TK_BIN_DIR to paths to find wish in SC_PROG_WISH. These move towards making TEA much more independent of *Config.sh. 2002-03-19 Jeff Hobbs * tcl.m4: corrected forgotten (UN)SHARED_LIB_SUFFIX and SHLIB_SUFFIX defines for Win. (SC_PATH_X): made this only do the check on unix platforms. 2002-03-12 Jeff Hobbs * README.txt: updated to reflect fewer files 2002-03-06 Jeff Hobbs * config.guess (removed): * config.sub (removed): removed unnecessary files * installFile.tcl (removed): * mkinstalldirs (removed): these aren't really necessary for making TEA work * tcl.m4 (SC_PUBLIC_TCL_HEADERS, SC_PUBLIC_TK_HEADERS): don't check /usr(/local)/include for includes on Windows when not using gcc 2002-03-05 Jeff Hobbs * tcl.m4: added warnings on Windows, removed RELPATH define and added TCL_LIBS to MAKE_LIB macro. This import represents 2.0.0, or a new start at attempting to make TEA much easier for C extension developers. **** moved from tclpro project to core tcl project, **** **** renamed to 'tclconfig' **** 2001-03-15 Karl Lehenbauer * installFile.tcl: Added updating of the modification time of the target file whether we overwrote it or decided that it hadn't changed. This was necessary for us to be able to determine whether or not a module install touched the file. 2001-03-08 Karl Lehenbauer * installFile.tcl: Added support for converting new-style (1.1+) Cygnus drive paths to Tcl-style. 2001-01-15 * tcl.m4: Added FreeBSD clause. 2001-01-03 * tcl.m4: Fixed typo in SC_LIB_SPEC where it is checking for exec-prefix. 2000-12-01 * tcl.m4: Concatenated most of the Ajuba acsite.m4 file so we don't need to modify the autoconf installation. * config.guess: * config.sub: * installFile.tcl: Added files from the itcl config subdirectory, which should go away. 2000-7-29 * Fixed the use of TCL_SRC_DIR and TK_SRC_DIR within TCL_PRIVATE_INCLUDES and TK_PRIVATE_INCLUDES to match their recent change from $(srcdir) to $(srcdir)/.. saods9/unix/tclconfig/install-sh000755 000765 000000 00000033054 12560425055 017334 0ustar00joyewheel000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2011-04-20.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -S $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -S) stripcmd="$stripprog $2" shift;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: saods9/unix/tclconfig/README.txt000644 000765 000000 00000001454 12560425055 017025 0ustar00joyewheel000000 000000 These files comprise the basic building blocks for a Tcl Extension Architecture (TEA) extension. For more information on TEA see: http://www.tcl.tk/doc/tea/ This package is part of the Tcl project at SourceForge, and latest sources should be available there: http://tcl.sourceforge.net/ This package is a freely available open source package. You can do virtually anything you like with it, such as modifying it, redistributing it, and selling it either in whole or in part. CONTENTS ======== The following is a short description of the files you will find in the sample extension. README.txt This file install-sh Program used for copying binaries and script files to their install locations. tcl.m4 Collection of Tcl autoconf macros. Included by a package's aclocal.m4 to define TEA_* macros. saods9/unix/tclconfig/tcl.m4000644 000765 000000 00000404642 12560425055 016361 0ustar00joyewheel000000 000000 # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. AC_PREREQ(2.57) dnl TEA extensions pass us the version of TEA they think they dnl are compatible with (must be set in TEA_INIT below) dnl TEA_VERSION="3.9" # Possible values for key variables defined: # # TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem') # TEA_PLATFORM - windows unix # #------------------------------------------------------------------------ # TEA_PATH_TCLCONFIG -- # # Locate the tclConfig.sh file and perform a sanity check on # the Tcl compile flags # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tcl=... # # Defines the following vars: # TCL_BIN_DIR Full path to the directory containing # the tclConfig.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_TCLCONFIG], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), with_tclconfig="${withval}") AC_MSG_CHECKING([for Tcl configuration]) AC_CACHE_VAL(ac_cv_c_tclconfig,[ # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_PATH_TKCONFIG -- # # Locate the tkConfig.sh file # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tk=... # # Defines the following vars: # TK_BIN_DIR Full path to the directory containing # the tkConfig.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_TKCONFIG], [ # # Ok, lets find the tk configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tk # if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), with_tkconfig="${withval}") AC_MSG_CHECKING([for Tk configuration]) AC_CACHE_VAL(ac_cv_c_tkconfig,[ # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ../tk \ `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tk \ `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_TCLCONFIG -- # # Load the tclConfig.sh file # # Arguments: # # Requires the following vars to be set: # TCL_BIN_DIR # # Results: # # Substitutes the following vars: # TCL_BIN_DIR # TCL_SRC_DIR # TCL_LIB_FILE #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TCLCONFIG], [ AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then AC_MSG_RESULT([loading]) . "${TCL_BIN_DIR}/tclConfig.sh" else AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh]) fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" AC_SUBST(TCL_VERSION) AC_SUBST(TCL_PATCH_LEVEL) AC_SUBST(TCL_BIN_DIR) AC_SUBST(TCL_SRC_DIR) AC_SUBST(TCL_LIB_FILE) AC_SUBST(TCL_LIB_FLAG) AC_SUBST(TCL_LIB_SPEC) AC_SUBST(TCL_STUB_LIB_FILE) AC_SUBST(TCL_STUB_LIB_FLAG) AC_SUBST(TCL_STUB_LIB_SPEC) AC_MSG_CHECKING([platform]) hold_cc=$CC; CC="$TCL_CC" AC_TRY_COMPILE(,[ #ifdef _WIN32 #error win32 #endif ], TEA_PLATFORM="unix", TEA_PLATFORM="windows" ) CC=$hold_cc AC_MSG_RESULT($TEA_PLATFORM) # The BUILD_$pkg is to define the correct extern storage class # handling when making this package AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [], [Building extension source?]) # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: AC_SUBST(CLEANFILES) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_DEFS) AC_SUBST(TCL_EXTRA_CFLAGS) AC_SUBST(TCL_LD_FLAGS) AC_SUBST(TCL_SHLIB_LD_LIBS) ]) #------------------------------------------------------------------------ # TEA_LOAD_TKCONFIG -- # # Load the tkConfig.sh file # # Arguments: # # Requires the following vars to be set: # TK_BIN_DIR # # Results: # # Sets the following vars that should be in tkConfig.sh: # TK_BIN_DIR #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TKCONFIG], [ AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh]) if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then AC_MSG_RESULT([loading]) . "${TK_BIN_DIR}/tkConfig.sh" else AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh]) fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" # TEA specific: Ensure windowingsystem is defined if test "${TEA_PLATFORM}" = "unix" ; then case ${TK_DEFS} in *MAC_OSX_TK*) AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?]) TEA_WINDOWINGSYSTEM="aqua" ;; *) TEA_WINDOWINGSYSTEM="x11" ;; esac elif test "${TEA_PLATFORM}" = "windows" ; then TEA_WINDOWINGSYSTEM="win32" fi AC_SUBST(TK_VERSION) AC_SUBST(TK_BIN_DIR) AC_SUBST(TK_SRC_DIR) AC_SUBST(TK_LIB_FILE) AC_SUBST(TK_LIB_FLAG) AC_SUBST(TK_LIB_SPEC) AC_SUBST(TK_STUB_LIB_FILE) AC_SUBST(TK_STUB_LIB_FLAG) AC_SUBST(TK_STUB_LIB_SPEC) # TEA specific: AC_SUBST(TK_LIBS) AC_SUBST(TK_XINCLUDES) ]) #------------------------------------------------------------------------ # TEA_PROG_TCLSH # Determine the fully qualified path name of the tclsh executable # in the Tcl build directory or the tclsh installed in a bin # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # TCLSH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_TCLSH], [ AC_MSG_CHECKING([for tclsh]) if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="${TCL_BIN_DIR}/tclsh" fi else # tclConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}" fi list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TCL_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${TCLSH_PROG}" ; then REAL_TCL_BIN_DIR="`cd "$i"; pwd`/" break fi done TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}" fi AC_MSG_RESULT([${TCLSH_PROG}]) AC_SUBST(TCLSH_PROG) ]) #------------------------------------------------------------------------ # TEA_PROG_WISH # Determine the fully qualified path name of the wish executable # in the Tk build directory or the wish installed in a bin # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # WISH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_WISH], [ AC_MSG_CHECKING([for wish]) if test -f "${TK_BIN_DIR}/Makefile" ; then # tkConfig.sh is in Tk build directory if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="${TK_BIN_DIR}/wish" fi else # tkConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}" fi list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TK_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${WISH_PROG}" ; then REAL_TK_BIN_DIR="`cd "$i"; pwd`/" break fi done WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}" fi AC_MSG_RESULT([${WISH_PROG}]) AC_SUBST(WISH_PROG) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-shared=yes|no # # Defines the following vars: # STATIC_BUILD Used for building import/export libraries # on Windows. # # Sets the following vars: # SHARED_BUILD Value of 1 or 0 #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SHARED], [ AC_MSG_CHECKING([how to build libraries]) AC_ARG_ENABLE(shared, AC_HELP_STRING([--enable-shared], [build and link with shared libraries (default: on)]), [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_shared+set}" = set; then enableval="$enable_shared" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" ; then AC_MSG_RESULT([shared]) SHARED_BUILD=1 else AC_MSG_RESULT([static]) SHARED_BUILD=0 AC_DEFINE(STATIC_BUILD, 1, [Is this a static build?]) fi AC_SUBST(SHARED_BUILD) ]) #------------------------------------------------------------------------ # TEA_ENABLE_THREADS -- # # Specify if thread support should be enabled. If "yes" is specified # as an arg (optional), threads are enabled by default, "no" means # threads are disabled. "yes" is the default. # # TCL_THREADS is checked so that if you are compiling an extension # against a threaded core, your extension must be compiled threaded # as well. # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-threads # # Sets the following vars: # THREADS_LIBS Thread library(s) # # Defines the following vars: # TCL_THREADS # _REENTRANT # _THREAD_SAFE #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_THREADS], [ AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], [build with threads]), [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_threads+set}" = set; then enableval="$enable_threads" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then TCL_THREADS=1 if test "${TEA_PLATFORM}" != "windows" ; then # We are always OK on Windows, so check what this platform wants: # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention AC_DEFINE(USE_THREAD_ALLOC, 1, [Do we want to use the threaded memory allocator?]) AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) if test "`uname -s`" = "SunOS" ; then AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) fi AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?]) AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no) if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] AC_CHECK_LIB(pthread, __pthread_mutex_init, tcl_ok=yes, tcl_ok=no) fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else AC_CHECK_LIB(pthreads, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else AC_CHECK_LIB(c, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "no"; then AC_CHECK_LIB(c_r, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -pthread" else TCL_THREADS=0 AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled]) fi fi fi fi fi else TCL_THREADS=0 fi # Do checking message here to not mess up interleaved configure output AC_MSG_CHECKING([for building with threads]) if test "${TCL_THREADS}" = 1; then AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?]) AC_MSG_RESULT([yes (default)]) else AC_MSG_RESULT([no]) fi # TCL_THREADS sanity checking. See if our request for building with # threads is the same as the way Tcl was built. If not, warn the user. case ${TCL_DEFS} in *THREADS=1*) if test "${TCL_THREADS}" = "0"; then AC_MSG_WARN([ Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads.]) fi ;; *) if test "${TCL_THREADS}" = "1"; then AC_MSG_WARN([ --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core.]) fi ;; esac AC_SUBST(TCL_THREADS) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SYMBOLS -- # # Specify if debugging symbols should be used. # Memory (TCL_MEM_DEBUG) debugging can also be enabled. # # Arguments: # none # # TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives # the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted. # Requires the following vars to be set in the Makefile: # CFLAGS_DEFAULT # LDFLAGS_DEFAULT # # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true # Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false # LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true # Sets to $(LDFLAGS_OPTIMIZE) if false # DBGX Formerly used as debug library extension; # always blank now. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SYMBOLS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_CONFIG_CFLAGS]) AC_MSG_CHECKING([for build with symbols]) AC_ARG_ENABLE(symbols, AC_HELP_STRING([--enable-symbols], [build with debugging symbols (default: off)]), [tcl_ok=$enableval], [tcl_ok=no]) DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" AC_MSG_RESULT([no]) else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then AC_MSG_RESULT([yes (standard debugging)]) fi fi # TEA specific: if test "${TEA_PLATFORM}" != "windows" ; then LDFLAGS_DEFAULT="${LDFLAGS}" fi AC_SUBST(CFLAGS_DEFAULT) AC_SUBST(LDFLAGS_DEFAULT) AC_SUBST(TCL_DBGX) if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?]) fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then AC_MSG_RESULT([enabled symbols mem debugging]) else AC_MSG_RESULT([enabled $tcl_ok debugging]) fi fi ]) #------------------------------------------------------------------------ # TEA_ENABLE_LANGINFO -- # # Allows use of modern nl_langinfo check for better l10n. # This is only relevant for Unix. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_LANGINFO], [ AC_ARG_ENABLE(langinfo, AC_HELP_STRING([--enable-langinfo], [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]), [langinfo_ok=$enableval], [langinfo_ok=yes]) HAVE_LANGINFO=0 if test "$langinfo_ok" = "yes"; then AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no]) fi AC_MSG_CHECKING([whether to use nl_langinfo]) if test "$langinfo_ok" = "yes"; then AC_CACHE_VAL(tcl_cv_langinfo_h, [ AC_TRY_COMPILE([#include ], [nl_langinfo(CODESET);], [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])]) AC_MSG_RESULT([$tcl_cv_langinfo_h]) if test $tcl_cv_langinfo_h = yes; then AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?]) fi else AC_MSG_RESULT([$langinfo_ok]) fi ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the # "uname" command. # # Arguments: # none # # Results: # Defines the following var: # # system - System/platform/version identification code. #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_SYSTEM], [ AC_CACHE_CHECK([system version], tcl_cv_sys_version, [ # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then AC_MSG_WARN([can't find uname command]) tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi ]) system=$tcl_cv_sys_version ]) #-------------------------------------------------------------------- # TEA_CONFIG_CFLAGS # # Try to determine the proper flags to pass to the compiler # for building shared libraries and other such nonsense. # # Arguments: # none # # Results: # # Defines and substitutes the following vars: # # DL_OBJS, DL_LIBS - removed for TEA, only needed by core. # LDFLAGS - Flags to pass to the compiler when linking object # files into an executable application binary such # as tclsh. # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. Could # be the same as CC_SEARCH_FLAGS if ${CC} is used to link. # CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically # goes at the end of the "ld" commands that build # shared libraries. The value of the symbol defaults to # "${LIBS}" if all of the dependent libraries should # be specified when creating a shared library. If # dependent libraries should not be specified (as on # SunOS 4.x, where they cause the link to fail, or in # general if Tcl and Tk aren't themselves shared # libraries), then this symbol has an empty string # as its value. # SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable # extensions. An empty string means we don't know how # to use shared libraries on this platform. # LIB_SUFFIX - Specifies everything that comes after the "libfoo" # in a static or shared library name, using the $PACKAGE_VERSION variable # to put the version in the right place. This is used # by platforms that need non-standard library names. # Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs # to have a version after the .so, and ${PACKAGE_VERSION}.a # on AIX, since a shared library needs to have # a .a extension whereas shared objects for loadable # extensions have a .so extension. Defaults to # ${PACKAGE_VERSION}${SHLIB_SUFFIX}. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_CFLAGS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # Step 0.a: Enable 64 bit support? AC_MSG_CHECKING([if 64bit support is requested]) AC_ARG_ENABLE(64bit, AC_HELP_STRING([--enable-64bit], [enable 64bit support (default: off)]), [do64bit=$enableval], [do64bit=no]) AC_MSG_RESULT([$do64bit]) # Step 0.b: Enable Solaris 64 bit VIS support? AC_MSG_CHECKING([if 64bit Sparc VIS support is requested]) AC_ARG_ENABLE(64bit-vis, AC_HELP_STRING([--enable-64bit-vis], [enable 64bit Sparc VIS support (default: off)]), [do64bitVIS=$enableval], [do64bitVIS=no]) AC_MSG_RESULT([$do64bitVIS]) # Force 64bit on with VIS AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes]) # Step 0.c: Check if visibility support is available. Do this here so # that platform specific alternatives can be used below if this fails. AC_CACHE_CHECK([if compiler supports visibility "hidden"], tcl_cv_cc_visibility_hidden, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" AC_TRY_LINK([ extern __attribute__((__visibility__("hidden"))) void f(void); void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], [disable rpath support (default: on)]), [doRpath=$enableval], [doRpath=yes]) AC_MSG_RESULT([$doRpath]) # TEA specific: Cross-compiling options for Windows/CE builds? AS_IF([test "${TEA_PLATFORM}" = windows], [ AC_MSG_CHECKING([if Windows/CE build is requested]) AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) # Set the variable "system" to hold the name and version number # for the system. TEA_CONFIG_SYSTEM # Require ranlib early so we can override it in special cases below. AC_REQUIRE([AC_PROG_RANLIB]) # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g AS_IF([test "$GCC" = yes], [ CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" ], [ CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" ]) AC_CHECK_TOOL(AR, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION="1.0"]) case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs # MACHINE is IX86 for LINK, but this is used by the manifest, # which requires x86|amd64|ia64. MACHINE="X86" if test "$do64bit" != "no" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft Platform SDK" fi MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` PATH64="" case "$do64bit" in amd64|x64|yes) MACHINE="AMD64" ; # default to AMD64 64-bit build PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) AC_MSG_WARN([Ensure latest Platform SDK is installed]) do64bit="no" else AC_MSG_RESULT([ Using 64-bit $MACHINE mode]) do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" != "no" ; then AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible]) fi if test "$GCC" = "yes" ; then AC_MSG_ERROR([Windows/CE and GCC builds incompatible]) fi TEA_PATH_CELIB # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \ if ([$]1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \ if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \ if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]]) doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" != "no" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="\"${PATH64}/cl.exe\"" CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" RC="\"${MSSDK}/bin/rc.exe\"" lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" LINKBIN="\"${PATH64}/link.exe\"" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" # Avoid 'unresolved external symbol __security_cookie' # errors, c.f. http://support.microsoft.com/?id=894573 TEA_ADD_LIBS([bufferoverflowU.lib]) elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="\"${CEBINROOT}/cl.exe\"" else CC="\"${CEBINROOT}/cl${ARCH}.exe\"" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" arch=`echo ${ARCH} | awk '{print tolower([$]0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i) done AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version]) AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version]) CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode AC_CHECK_TOOL(RC, windres) CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" AC_CACHE_CHECK(for cross-compile version of gcc, ac_cv_cross, AC_TRY_COMPILE([ #ifdef __WIN32__ #error cross-compiler #endif ], [], ac_cv_cross=yes, ac_cv_cross=no) ) if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # and also # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx # This essentially turns it all on. LDFLAGS_DEBUG="-debug -debugtype:cv" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [ # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'` ;; esac AC_MSG_RESULT([Using $CC for compiling with threads]) ]) LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported with GCC on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" ]) ]) AS_IF([test "`uname -m`" = ia64], [ # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" AS_IF([test "$GCC" = yes], [ CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' ], [ CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' ]) LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ], [ AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared -Wl,-bexpall' ], [ SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" ]) SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"]) ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library AS_IF([test "`uname -m`" = ia64], [ SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi ], [ SHLIB_SUFFIX=".sl" ]) AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) AS_IF([test "$tcl_ok" = yes], [ LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" ]) AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ CFLAGS="$CFLAGS -z" # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" ]) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]) ;; esac ], [ do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" ]) ]) ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [ CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" ], [ case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported by gcc]) ], [ do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" ]) ]) ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) AS_IF([test $do64bit = yes], [ AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -m64" AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_m64 = yes], [ CFLAGS="$CFLAGS -m64" do64bit_ok=yes ]) ]) # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac AS_IF([test "${TCL_THREADS}" = "1"], [ # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" ]) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$[@]" SHLIB_SUFFIX=".so" LDFLAGS="" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS"]) # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1' TCL_LIB_VERSIONS_OK=nodots ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`" CFLAGS="`echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`" AS_IF([test $do64bit = yes], [ case `arch` in ppc) AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag], tcl_cv_cc_arch_ppc64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes, tcl_cv_cc_arch_ppc64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [ CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" do64bit_ok=yes ]);; i386) AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag], tcl_cv_cc_arch_x86_64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch x86_64" AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes, tcl_cv_cc_arch_x86_64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [ CFLAGS="$CFLAGS -arch x86_64" do64bit_ok=yes ]);; *) AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);; esac ], [ # Check for combined 32-bit and 64-bit fat build AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [ fat_32_64=yes]) ]) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [ LDFLAGS="$LDFLAGS -prebind"]) LDFLAGS="$LDFLAGS -headerpad_max_install_names" AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_search_paths_first = yes], [ LDFLAGS="$LDFLAGS -Wl,-search_paths_first" ]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [__private_extern__], [Compiler support for module scope symbols]) tcl_cv_cc_visibility_hidden=yes ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [ AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [ AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" AC_TRY_LINK([#include ], [XrmInitialize();], tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [ AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" AC_TRY_LINK([#include ], [Tk_InitStubs(NULL, "", 0);], tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) # remove 64-bit arch flags from CFLAGS et al. if configuration # does not support 64-bit. AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h [Should OS/390 do the right thing with sockets?]) ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" AS_IF([test "$SHARED_BUILD" = 1], [ SHLIB_LD='ld -shared -expect_unresolved "*"' ], [ SHLIB_LD='ld -non_shared -expect_unresolved "*"' ]) SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [ CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"]) # see pthread_intro(3) for pthread support on osf1, k.furukawa AS_IF([test "${TCL_THREADS}" = 1], [ CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` AS_IF([test "$GCC" = yes], [ LIBS="$LIBS -lpthread -lmach -lexc" ], [ CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ]) ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) AS_IF([test "$GCC" = yes], [ SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" ], [ SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" ]) SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[[0-6]]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ arch=`isainfo` AS_IF([test "$arch" = "sparcv9 sparc"], [ AS_IF([test "$GCC" = yes], [ AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [ AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" ]) ], [ do64bit_ok=yes AS_IF([test "$do64bitVIS" = yes], [ CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS_ARCH="-xarch=v9a" ], [ CFLAGS="$CFLAGS -xarch=v9" LDFLAGS_ARCH="-xarch=v9" ]) # Solaris 64 uses this as well #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" ]) ], [AS_IF([test "$arch" = "amd64 i386"], [ AS_IF([test "$GCC" = yes], [ case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) do64bit_ok=yes CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]);; esac ], [ do64bit_ok=yes case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "$do64bit_ok" = yes], [ AS_IF([test "$arch" = "sparcv9 sparc"], [ # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" ], [AS_IF([test "$arch" = "amd64 i386"], [ # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" ])]) ]) ], [ case $system in SunOS-5.[[1-9]][[0-9]]*) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';; *) SHLIB_LD='/usr/ccs/bin/ld -G -z text';; esac CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_Bexport = yes], [ LDFLAGS="$LDFLAGS -Wl,-Bexport" ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; esac AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [ AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform]) ]) dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. AS_IF([test "$GCC" = yes], [ case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [extern], [No Compiler support for module scope symbols]) ]) AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then AC_CACHE_CHECK(for SEH support in compiler, tcl_cv_seh, AC_TRY_RUN([ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } ], tcl_cv_seh=yes, tcl_cv_seh=no, tcl_cv_seh=no) ) if test "$tcl_cv_seh" = "no" ; then AC_DEFINE(HAVE_NO_SEH, 1, [Defined when mingw does not support SEH]) fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, tcl_cv_eh_disposition, AC_TRY_COMPILE([ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN ],[ EXCEPTION_DISPOSITION x; ], tcl_cv_eh_disposition=yes, tcl_cv_eh_disposition=no) ) if test "$tcl_cv_eh_disposition" = "no" ; then AC_DEFINE(EXCEPTION_DISPOSITION, int, [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. AC_CACHE_CHECK(for winnt.h that ignores VOID define, tcl_cv_winnt_ignore_void, AC_TRY_COMPILE([ #define VOID void #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN ], [ CHAR c; SHORT s; LONG l; ], tcl_cv_winnt_ignore_void=yes, tcl_cv_winnt_ignore_void=no) ) if test "$tcl_cv_winnt_ignore_void" = "yes" ; then AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, [Defined when cygwin/mingw ignores VOID define in winnt.h]) fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. AC_CACHE_CHECK(for cast to union support, tcl_cv_cast_to_union, AC_TRY_COMPILE([], [ union foo { int i; double d; }; union foo f = (union foo) (int) 0; ], tcl_cv_cast_to_union=yes, tcl_cv_cast_to_union=no) ) if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) AC_SUBST(STLIB_LD) AC_SUBST(SHLIB_LD) AC_SUBST(SHLIB_LD_LIBS) AC_SUBST(SHLIB_CFLAGS) AC_SUBST(LD_LIBRARY_PATH_VAR) # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary TEA_TCL_EARLY_FLAGS TEA_TCL_64BIT_FLAGS ]) #-------------------------------------------------------------------- # TEA_SERIAL_PORT # # Determine which interface to use to talk to the serial port. # Note that #include lines must begin in leftmost column for # some compilers to recognize them as preprocessor directives, # and some build environments have stdin not pointing at a # pseudo-terminal (usually /dev/null instead.) # # Arguments: # none # # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY #-------------------------------------------------------------------- AC_DEFUN([TEA_SERIAL_PORT], [ AC_CHECK_HEADERS(sys/modem.h) AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ AC_TRY_RUN([ #include int main() { struct termios t; if (tcgetattr(0, &t) == 0) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include #include int main() { struct termios t; if (tcgetattr(0, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) fi]) case $tcl_cv_api_serial in termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);; termio) AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);; sgtty) AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);; esac ]) #-------------------------------------------------------------------- # TEA_MISSING_POSIX_HEADERS # # Supply substitutes for missing POSIX header files. Special # notes: # - stdlib.h doesn't define strtol, strtoul, or # strtod in some versions of SunOS # - some versions of string.h don't declare procedures such # as strstr # # Arguments: # none # # Results: # # Defines some of the following vars: # NO_DIRENT_H # NO_ERRNO_H # NO_VALUES_H # HAVE_LIMITS_H or NO_LIMITS_H # NO_STDLIB_H # NO_STRING_H # NO_SYS_WAIT_H # NO_DLFCN_H # HAVE_SYS_PARAM_H # # HAVE_STRING_H ? # # tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and # CHECK on limits.h #-------------------------------------------------------------------- AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [ AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [ AC_TRY_LINK([#include #include ], [ #ifndef _POSIX_SOURCE # ifdef __Lynx__ /* * Generate compilation error to make the test fail: Lynx headers * are only valid if really in the POSIX environment. */ missing_procedure(); # endif #endif DIR *d; struct dirent *entryPtr; char *p; d = opendir("foobar"); entryPtr = readdir(d); p = entryPtr->d_name; closedir(d); ], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)]) if test $tcl_cv_dirent_h = no; then AC_DEFINE(NO_DIRENT_H, 1, [Do we have ?]) fi # TEA specific: AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have ?])]) AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have ?])]) AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have ?])]) AC_CHECK_HEADER(limits.h, [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have ?])], [AC_DEFINE(NO_LIMITS_H, 1, [Do we have ?])]) AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0) if test $tcl_ok = 0; then AC_DEFINE(NO_STDLIB_H, 1, [Do we have ?]) fi AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0) AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0) # See also memmove check below for a place where NO_STRING_H can be # set and why. if test $tcl_ok = 0; then AC_DEFINE(NO_STRING_H, 1, [Do we have ?]) fi AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have ?])]) AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have ?])]) # OS/390 lacks sys/param.h (and doesn't need it, by chance). AC_HAVE_HEADERS(sys/param.h) ]) #-------------------------------------------------------------------- # TEA_PATH_X # # Locate the X11 header files and the X11 library archive. Try # the ac_path_x macro first, but if it doesn't find the X stuff # (e.g. because there's no xmkmf program) then check through # a list of possible directories. Under some conditions the # autoconf macro will return an include directory that contains # no include files, so double-check its result just to be safe. # # This should be called after TEA_CONFIG_CFLAGS as setting the # LIBS line can confuse some configure macro magic. # # Arguments: # none # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) #-------------------------------------------------------------------- AC_DEFUN([TEA_PATH_X], [ if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then TEA_PATH_UNIX_X fi ]) AC_DEFUN([TEA_PATH_UNIX_X], [ AC_PATH_X not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then AC_TRY_CPP([#include ], , not_really_there="yes") else if test ! -r $x_includes/X11/Xlib.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then AC_MSG_CHECKING([for X11 header files]) found_xincludes="no" AC_TRY_CPP([#include ], found_xincludes="yes", found_xincludes="no") if test "$found_xincludes" = "no"; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Xlib.h; then AC_MSG_RESULT([$i]) XINCLUDES=" -I$i" found_xincludes="yes" break fi done fi else if test "$x_includes" != ""; then XINCLUDES="-I$x_includes" found_xincludes="yes" fi fi if test "$found_xincludes" = "no"; then AC_MSG_RESULT([couldn't find any!]) fi if test "$no_x" = yes; then AC_MSG_CHECKING([for X11 libraries]) XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" for i in $dirs ; do if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then AC_MSG_RESULT([$i]) XLIBSW="-L$i -lX11" x_libraries="$i" break fi done else if test "$x_libraries" = ""; then XLIBSW=-lX11 else XLIBSW="-L$x_libraries -lX11" fi fi if test "$XLIBSW" = nope ; then AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow) fi if test "$XLIBSW" = nope ; then AC_MSG_RESULT([could not find any! Using -lX11.]) XLIBSW=-lX11 fi # TEA specific: if test x"${XLIBSW}" != x ; then PKG_LIBS="${PKG_LIBS} ${XLIBSW}" fi ]) #-------------------------------------------------------------------- # TEA_BLOCKING_STYLE # # The statements below check for systems where POSIX-style # non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. # On these systems (mostly older ones), use the old BSD-style # FIONBIO approach instead. # # Arguments: # none # # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK #-------------------------------------------------------------------- AC_DEFUN([TEA_BLOCKING_STYLE], [ AC_CHECK_HEADERS(sys/ioctl.h) AC_CHECK_HEADERS(sys/filio.h) TEA_CONFIG_SYSTEM AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) case $system in OSF*) AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) AC_MSG_RESULT([FIONBIO]) ;; *) AC_MSG_RESULT([O_NONBLOCK]) ;; esac ]) #-------------------------------------------------------------------- # TEA_TIME_HANDLER # # Checks how the system deals with time.h, what time structures # are used on the system, and what fields the structures have. # # Arguments: # none # # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR #-------------------------------------------------------------------- AC_DEFUN([TEA_TIME_HANDLER], [ AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE AC_CHECK_FUNCS(gmtime_r localtime_r) AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [ AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_tzadj;], tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)]) if test $tcl_cv_member_tm_tzadj = yes ; then AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?]) fi AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [ AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_gmtoff;], tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)]) if test $tcl_cv_member_tm_gmtoff = yes ; then AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?]) fi # # Its important to include time.h in this check, as some systems # (like convex) have timezone functions, etc. # AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [ AC_TRY_COMPILE([#include ], [extern long timezone; timezone += 1; exit (0);], tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)]) if test $tcl_cv_timezone_long = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) else # # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. # AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [ AC_TRY_COMPILE([#include ], [extern time_t timezone; timezone += 1; exit (0);], tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)]) if test $tcl_cv_timezone_time = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) fi fi ]) #-------------------------------------------------------------------- # TEA_BUGGY_STRTOD # # Under Solaris 2.4, strtod returns the wrong value for the # terminating character under some conditions. Check for this # and if the problem exists use a substitute procedure # "fixstrtod" (provided by Tcl) that corrects the error. # Also, on Compaq's Tru64 Unix 5.0, # strtod(" ") returns 0.0 instead of a failure to convert. # # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) #-------------------------------------------------------------------- AC_DEFUN([TEA_BUGGY_STRTOD], [ AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) if test "$tcl_strtod" = 1; then AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[ AC_TRY_RUN([ extern double strtod(); int main() { char *infString="Inf", *nanString="NaN", *spaceString=" "; char *term; double value; value = strtod(infString, &term); if ((term != infString) && (term[-1] == 0)) { exit(1); } value = strtod(nanString, &term); if ((term != nanString) && (term[-1] == 0)) { exit(1); } value = strtod(spaceString, &term); if (term == (spaceString+1)) { exit(1); } exit(0); }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy, tcl_cv_strtod_buggy=buggy)]) if test "$tcl_cv_strtod_buggy" = buggy; then AC_LIBOBJ([fixstrtod]) USE_COMPAT=1 AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?]) fi fi ]) #-------------------------------------------------------------------- # TEA_TCL_LINK_LIBS # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: # DL_LIBS (not in TEA, only needed in core) # LIBS # MATH_LIBS # # Results: # # Substitutes the following vars: # TCL_LIBS # MATH_LIBS # # Might append to the following vars: # LIBS # # Might define the following vars: # HAVE_NET_ERRNO_H #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_LINK_LIBS], [ #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) #-------------------------------------------------------------------- # Interactive UNIX requires -linet instead of -lsocket, plus it # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) AC_CHECK_HEADER(net/errno.h, [ AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have ?])]) #-------------------------------------------------------------------- # Check for the existence of the -lsocket and -lnsl libraries. # The order here is important, so that they end up in the right # order in the command line generated by make. Here are some # special considerations: # 1. Use "connect" and "accept" to check for -lsocket, and # "gethostbyname" to check for -lnsl. # 2. Use each function name only once: can't redo a check because # autoconf caches the results of the last check and won't redo it. # 3. Use -lnsl and -lsocket only if they supply procedures that # aren't already present in the normal libraries. This is because # IRIX 5.2 has libraries, but they aren't needed and they're # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- tcl_checkBoth=0 AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1) if test "$tcl_checkSocket" = 1; then AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt, LIBS="$LIBS -lsocket", tcl_checkBoth=1)]) fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs]) fi AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname, [LIBS="$LIBS -lnsl"])]) # TEA specific: Don't perform the eval of the libraries here because # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' AC_SUBST(TCL_LIBS) AC_SUBST(MATH_LIBS) ]) #-------------------------------------------------------------------- # TEA_TCL_EARLY_FLAGS # # Check for what flags are needed to be passed so the correct OS # features are available. # # Arguments: # None # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_EARLY_FLAG],[ AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, AC_TRY_COMPILE([[#define ]$1[ 1 ]$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no))) if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then AC_DEFINE($1, 1, [Add the ]$1[ flag when building]) tcl_flags="$tcl_flags $1" fi ]) AC_DEFUN([TEA_TCL_EARLY_FLAGS],[ AC_MSG_CHECKING([for required early compiler flags]) tcl_flags="" TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include ], [char *p = (char *)strtoll; char *q = (char *)strtoull;]) TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include ], [struct stat64 buf; int i = stat64("/", &buf);]) TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include ], [char *p = (char *)open64;]) if test "x${tcl_flags}" = "x" ; then AC_MSG_RESULT([none]) else AC_MSG_RESULT([${tcl_flags}]) fi ]) #-------------------------------------------------------------------- # TEA_TCL_64BIT_FLAGS # # Check for what is defined in the way of 64-bit features. # # Arguments: # None # # Results: # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_64BIT_FLAGS], [ AC_MSG_CHECKING([for 64-bit integer type]) AC_CACHE_VAL(tcl_cv_type_64bit,[ tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], tcl_type_64bit=__int64, tcl_type_64bit="long long") # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... AC_TRY_COMPILE(,[switch (0) { case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; }],tcl_cv_type_64bit=${tcl_type_64bit})]) if test "${tcl_cv_type_64bit}" = none ; then AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?]) AC_MSG_RESULT([using long]) elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* AC_MSG_RESULT([using Tcl header defaults]) else AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}, [What type should be used to define wide integers?]) AC_MSG_RESULT([${tcl_cv_type_64bit}]) # Now check for auxiliary declarations AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ AC_TRY_COMPILE([#include #include ],[struct dirent64 p;], tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in ?]) fi AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include ],[struct stat64 p; ], tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)]) if test "x${tcl_cv_struct_stat64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in ?]) fi AC_CHECK_FUNCS(open64 lseek64) AC_MSG_CHECKING([for off64_t]) AC_CACHE_VAL(tcl_cv_type_off64_t,[ AC_TRY_COMPILE([#include ],[off64_t offset; ], tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)]) dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the dnl functions lseek64 and open64 are defined. if test "x${tcl_cv_type_off64_t}" = "xyes" && \ test "x${ac_cv_func_lseek64}" = "xyes" && \ test "x${ac_cv_func_open64}" = "xyes" ; then AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in ?]) AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi ]) ## ## Here ends the standard Tcl configuration bits and starts the ## TEA specific functions ## #------------------------------------------------------------------------ # TEA_INIT -- # # Init various Tcl Extension Architecture (TEA) variables. # This should be the first called TEA_* macro. # # Arguments: # none # # Results: # # Defines and substs the following vars: # CYGPATH # EXEEXT # Defines only: # TEA_VERSION # TEA_INITED # TEA_PLATFORM (windows or unix) # # "cygpath" is used on windows to generate native path names for include # files. These variables should only be used with the compiler and linker # since they generate native path names. # # EXEEXT # Select the executable extension based on the host type. This # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" AC_MSG_CHECKING([for correct TEA configuration]) if test x"${PACKAGE_NAME}" = x ; then AC_MSG_ERROR([ The PACKAGE_NAME variable must be defined by your TEA configure.in]) fi if test x"$1" = x ; then AC_MSG_ERROR([ TEA version not specified.]) elif test "$1" != "${TEA_VERSION}" ; then AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"]) else AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}]) AC_SUBST(EXEEXT) AC_SUBST(CYGPATH) # This package name must be replaced statically for AC_SUBST to work AC_SUBST(PKG_LIB_FILE) # Substitute STUB_LIB_FILE in case package creates a stub library too. AC_SUBST(PKG_STUB_LIB_FILE) # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) AC_SUBST(PKG_TCL_SOURCES) AC_SUBST(PKG_HEADERS) AC_SUBST(PKG_INCLUDES) AC_SUBST(PKG_LIBS) AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_SOURCES # PKG_OBJECTS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_SOURCES], [ vars="$@" for i in $vars; do case $i in [\$]*) # allow $-var names PKG_SOURCES="$PKG_SOURCES $i" PKG_OBJECTS="$PKG_OBJECTS $i" ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_OBJECTS="$PKG_OBJECTS $j" ;; esac done AC_SUBST(PKG_SOURCES) AC_SUBST(PKG_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_STUB_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_STUB_SOURCES # PKG_STUB_OBJECTS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" done AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_TCL_SOURCES -- # # Specify one or more Tcl source files. These should be platform # independent runtime files. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_TCL_SOURCES #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_TCL_SOURCES], [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i']) fi PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" done AC_SUBST(PKG_TCL_SOURCES) ]) #------------------------------------------------------------------------ # TEA_ADD_HEADERS -- # # Specify one or more source headers. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_HEADERS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_HEADERS], [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find header file '${srcdir}/$i']) fi PKG_HEADERS="$PKG_HEADERS $i" done AC_SUBST(PKG_HEADERS) ]) #------------------------------------------------------------------------ # TEA_ADD_INCLUDES -- # # Specify one or more include dirs. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_INCLUDES], [ vars="$@" for i in $vars; do PKG_INCLUDES="$PKG_INCLUDES $i" done AC_SUBST(PKG_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_ADD_LIBS -- # # Specify one or more libraries. Users should check for # the right platform before adding to their list. For Windows, # libraries provided in "foo.lib" format will be converted to # "-lfoo" when using GCC (mingw). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_LIBS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_LIBS], [ vars="$@" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done AC_SUBST(PKG_LIBS) ]) #------------------------------------------------------------------------ # TEA_ADD_CFLAGS -- # # Specify one or more CFLAGS. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_CLEANFILES -- # # Specify one or more CLEANFILES. # # Arguments: # one or more file names to clean target # # Results: # # Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CLEANFILES], [ CLEANFILES="$CLEANFILES $@" ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: # none # # Results: # # If --prefix or --exec-prefix was not specified, $prefix and # $exec_prefix will be set to the values given to Tcl when it was # configured. #------------------------------------------------------------------------ AC_DEFUN([TEA_PREFIX], [ if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}]) prefix=${TCL_PREFIX} else AC_MSG_NOTICE([--prefix defaulting to /usr/local]) prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}]) exec_prefix=${TCL_EXEC_PREFIX} else AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}]) exec_prefix=$prefix fi fi ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER_CC -- # # Do compiler checks the way we want. This is just a replacement # for AC_PROG_CC in TEA configure.in files to make them cleaner. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. AC_PROG_CC AC_PROG_CPP INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" AC_SUBST(INSTALL) #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- AC_PROG_MAKE_SET #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- AC_CHECK_TOOL(RANLIB, ranlib) #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- AC_OBJEXT AC_EXEEXT ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER -- # # Do compiler checks that use the compiler. This must go after # TEA_SETUP_COMPILER_CC, which does the actual compiler check. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER], [ # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. AC_REQUIRE([TEA_SETUP_COMPILER_CC]) #------------------------------------------------------------------------ # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------ if test -z "$no_pipe" -a -n "$GCC"; then AC_CACHE_CHECK([if the compiler understands -pipe], tcl_cv_cc_pipe, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no) CFLAGS=$hold_cflags]) if test $tcl_cv_cc_pipe = yes; then CFLAGS="$CFLAGS -pipe" fi fi #-------------------------------------------------------------------- # Common compiler flag setup #-------------------------------------------------------------------- AC_C_BIGENDIAN if test "${TEA_PLATFORM}" = "unix" ; then TEA_TCL_LINK_LIBS TEA_MISSING_POSIX_HEADERS # Let the user call this, because if it triggers, they will # need a compat/strtod.c that is correct. Users can also # use Tcl_GetDouble(FromObj) instead. #TEA_BUGGY_STRTOD fi ]) #------------------------------------------------------------------------ # TEA_MAKE_LIB -- # # Generate a line that can be used to build a shared/unshared library # in a platform independent manner. # # Arguments: # none # # Requires: # # Results: # # Defines the following vars: # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library # VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL # VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" AC_EGREP_CPP([manifest needed], [ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif ], [ # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" TEA_ADD_CLEANFILES([*.manifest]) ]) MAKE_STUB_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then MAKE_LIB="${MAKE_SHARED_LIB} " else MAKE_LIB="${MAKE_STATIC_LIB} " fi #-------------------------------------------------------------------- # Shared libraries and static libraries have different names. # Use the double eval to make sure any variables in the suffix is # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) RANLIB=: RANLIB_STUB=: else RANLIB_STUB="${RANLIB}" if test "${SHARED_BUILD}" = "1" ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" fi eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" RANLIB=: else eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" fi # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) AC_SUBST(VC_MANIFEST_EMBED_DLL) AC_SUBST(VC_MANIFEST_EMBED_EXE) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. # # Arguments: # basename The base name of the library without version # numbers, extensions, or "lib" prefixes. # extra_dir Extra directory in which to search for the # library. This location is used first, then # $prefix/$exec-prefix, then some defaults. # # Requires: # TEA_INIT and TEA_PREFIX must be called first. # # Results: # # Defines the following vars: # ${basename}_LIB_NAME The computed library name. # ${basename}_LIB_SPEC The computed linker flags. #------------------------------------------------------------------------ AC_DEFUN([TEA_LIB_SPEC], [ AC_MSG_CHECKING([for $1 library]) # Look in exec-prefix for the library (defined by TEA_PREFIX). tea_lib_name_dir="${exec_prefix}/lib" # Or in a user-specified location. if test x"$2" != x ; then tea_extra_lib_dir=$2 else tea_extra_lib_dir=NONE fi for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break fi done if test "${TEA_PLATFORM}" = "windows"; then $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\" else # Strip off the leading "lib" and trailing ".a" or ".so" tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'` $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}" fi if test "x${$1_LIB_NAME}" = x ; then AC_MSG_ERROR([not found]) else AC_MSG_RESULT([${$1_LIB_SPEC}]) fi ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TCL_HEADERS -- # # Locate the private Tcl include files # # Arguments: # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TCL_TOP_DIR_NATIVE # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [ # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh} AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS]) AC_MSG_CHECKING([for Tcl private include files]) TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}` TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\" # Check to see if tclPort.h isn't already with the public headers # Don't look for tclInt.h because that resides with tcl.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tclh}/tclWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tclh}/tclUnixPort.h"; then result="private headers found with public headers" else TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\" if test "${TEA_PLATFORM}" = "windows"; then TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\" else TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TCL_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -d "${TCL_BIN_DIR}/Headers" -a \ -d "${TCL_BIN_DIR}/PrivateHeaders"; then TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}" else TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TCL_INCLUDES}" else if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}]) fi result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}" fi fi AC_SUBST(TCL_TOP_DIR_NATIVE) AC_SUBST(TCL_INCLUDES) AC_MSG_RESULT([${result}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TCL_HEADERS -- # # Locate the installed public Tcl header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [ AC_MSG_CHECKING([for Tcl public headers]) AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tclh, [ # Use the value from --with-tclinclude, if it was given if test x"${with_tclinclude}" != x ; then if test -f "${with_tclinclude}/tcl.h" ; then ac_cv_c_tclh=${with_tclinclude} else AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h]) fi else list="" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers directory case ${TCL_DEFS} in *TCL_FRAMEWORK*) list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tcl is not installed, # and in that situation, look there before installed locations. if test -f "${TCL_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TCL_INCLUDE_SPEC}" != x ; then d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tcl.h" ; then ac_cv_c_tclh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tclh}" = x ; then AC_MSG_ERROR([tcl.h not found. Please specify its location with --with-tclinclude]) else AC_MSG_RESULT([${ac_cv_c_tclh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TCL_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TK_HEADERS -- # # Locate the private Tk include files # # Arguments: # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [ # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh} AC_REQUIRE([TEA_PUBLIC_TK_HEADERS]) AC_MSG_CHECKING([for Tk private include files]) TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}` TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\" # Check to see if tkPort.h isn't already with the public headers # Don't look for tkInt.h because that resides with tk.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tkh}/tkWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tkh}/tkUnixPort.h"; then result="private headers found with public headers" else TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\" TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\" if test "${TEA_PLATFORM}" = "windows"; then TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\" else TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TK_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}" # Detect and add ttk subdir if test -d "${TK_SRC_DIR}/generic/ttk"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\"" fi if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\"" fi if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\"" fi if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TK_DEFS} in *TK_FRAMEWORK*) if test -d "${TK_BIN_DIR}/Headers" -a \ -d "${TK_BIN_DIR}/PrivateHeaders"; then TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}" else TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TK_INCLUDES}" else if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}]) fi result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}" fi fi AC_SUBST(TK_TOP_DIR_NATIVE) AC_SUBST(TK_XLIB_DIR_NATIVE) AC_SUBST(TK_INCLUDES) AC_MSG_RESULT([${result}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TK_HEADERS -- # # Locate the installed public Tk header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [ AC_MSG_CHECKING([for Tk public headers]) AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files], with_tkinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tkh, [ # Use the value from --with-tkinclude, if it was given if test x"${with_tkinclude}" != x ; then if test -f "${with_tkinclude}/tk.h" ; then ac_cv_c_tkh=${with_tkinclude} else AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h]) fi else list="" if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers directory. case ${TK_DEFS} in *TK_FRAMEWORK*) list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tk is not installed, # and in that situation, look there before installed locations. if test -f "${TK_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tk's --prefix location, # relative to directory of tkConfig.sh, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TK_PREFIX}/include 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TK_INCLUDE_SPEC}" != x ; then d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tk.h" ; then ac_cv_c_tkh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tkh}" = x ; then AC_MSG_ERROR([tk.h not found. Please specify its location with --with-tkinclude]) else AC_MSG_RESULT([${ac_cv_c_tkh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}` TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_INCLUDES) if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then # On Windows and Aqua, we need the X compat headers AC_MSG_CHECKING([for X11 header files]) if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_XINCLUDES) fi AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}]) fi ]) #------------------------------------------------------------------------ # TEA_PATH_CONFIG -- # # Locate the ${1}Config.sh file and perform a sanity check on # the ${1} compile flags. These are used by packages like # [incr Tk] that load *Config.sh files from more than Tcl and Tk. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-$1=... # # Defines the following vars: # $1_BIN_DIR Full path to the directory containing # the $1Config.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_CONFIG], [ # # Ok, lets find the $1 configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-$1 # if test x"${no_$1}" = x ; then # we reset no_$1 in case something fails here no_$1=true AC_ARG_WITH($1, [ --with-$1 directory containing $1 configuration ($1Config.sh)], with_$1config=${withval}) AC_MSG_CHECKING([for $1 configuration]) AC_CACHE_VAL(ac_cv_c_$1config,[ # First check to see if --with-$1 was specified. if test x"${with_$1config}" != x ; then case ${with_$1config} in */$1Config.sh ) if test -f ${with_$1config}; then AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself]) with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'` fi;; esac if test -f "${with_$1config}/$1Config.sh" ; then ac_cv_c_$1config=`(cd ${with_$1config}; pwd)` else AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh]) fi fi # then check for a private $1 installation if test x"${ac_cv_c_$1config}" = x ; then for i in \ ../$1 \ `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../$1 \ `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../../$1 \ `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ${srcdir}/../$1 \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi if test -f "$i/unix/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i/unix; pwd)` break fi done fi # check in a few common install locations if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_$1config}" = x ; then $1_BIN_DIR="# no $1 configs found" AC_MSG_WARN([Cannot find $1 configuration definitions]) exit 0 else no_$1= $1_BIN_DIR=${ac_cv_c_$1config} AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG -- # # Load the $1Config.sh file # # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # # Substitutes the following vars: # $1_SRC_DIR # $1_LIB_FILE # $1_LIB_SPEC #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG], [ AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) if test -f "${$1_BIN_DIR}/$1Config.sh" ; then AC_MSG_RESULT([loading]) . "${$1_BIN_DIR}/$1Config.sh" else AC_MSG_RESULT([file not found]) fi # # If the $1_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable $1_LIB_SPEC will be set to the value # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC # instead of $1_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC} $1_LIBRARY_PATH=${$1_LIBRARY_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) # Allow the caller to prevent this auto-check by specifying any 2nd arg AS_IF([test "x$2" = x], [ # Check both upper and lower-case variants # If a dev wanted non-stubs libs, this function could take an option # to not use _STUB in the paths below AS_IF([test "x${$1_STUB_LIB_SPEC}" = x], [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)], [TEA_LOAD_CONFIG_LIB($1_STUB)]) ]) ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG_LIB -- # # Helper function to load correct library from another extension's # ${PACKAGE}Config.sh. # # Results: # Adds to LIBS the appropriate extension library #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG_LIB], [ AC_MSG_CHECKING([For $1 library for LIBS]) # This simplifies the use of stub libraries by automatically adding # the stub lib to your path. Normally this would add to SHLIB_LD_LIBS, # but this is called before CONFIG_CFLAGS. More importantly, this adds # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD. if test "x${$1_LIB_SPEC}" != "x" ; then if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"]) AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}]) else TEA_ADD_LIBS([${$1_LIB_SPEC}]) AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}]) fi else AC_MSG_RESULT([file not found]) fi ]) #------------------------------------------------------------------------ # TEA_EXPORT_CONFIG -- # # Define the data to insert into the ${PACKAGE}Config.sh file # # Arguments: # # Requires the following vars to be set: # $1 # # Results: # Substitutes the following vars: #------------------------------------------------------------------------ AC_DEFUN([TEA_EXPORT_CONFIG], [ #-------------------------------------------------------------------- # These are for $1Config.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}" else eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" fi $1_BUILD_LIB_SPEC="-L`pwd` ${$1_LIB_FLAG}" $1_LIB_SPEC="-L${pkglibdir} ${$1_LIB_FLAG}" $1_BUILD_STUB_LIB_SPEC="-L`pwd` [$]{$1_STUB_LIB_FLAG}" $1_STUB_LIB_SPEC="-L${pkglibdir} [$]{$1_STUB_LIB_FLAG}" $1_BUILD_STUB_LIB_PATH="`pwd`/[$]{PKG_STUB_LIB_FILE}" $1_STUB_LIB_PATH="${pkglibdir}/[$]{PKG_STUB_LIB_FILE}" AC_SUBST($1_BUILD_LIB_SPEC) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_PATH) AC_SUBST($1_STUB_LIB_PATH) AC_SUBST(MAJOR_VERSION) AC_SUBST(MINOR_VERSION) AC_SUBST(PATCHLEVEL) ]) #------------------------------------------------------------------------ # TEA_PATH_CELIB -- # # Locate Keuchel's celib emulation layer for targeting Win/CE # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-celib=... # # Defines the following vars: # CELIB_DIR Full path to the directory containing # the include and platform lib files #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_CELIB], [ # First, look for one uninstalled. # the alternative search directory is invoked by --with-celib if test x"${no_celib}" = x ; then # we reset no_celib in case something fails here no_celib=true AC_ARG_WITH(celib,[ --with-celib=DIR use Windows/CE support library from DIR], with_celibconfig=${withval}) AC_MSG_CHECKING([for Windows/CE celib directory]) AC_CACHE_VAL(ac_cv_c_celibconfig,[ # First check to see if --with-celibconfig was specified. if test x"${with_celibconfig}" != x ; then if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory]) fi fi # then check for a celib library if test x"${ac_cv_c_celibconfig}" = x ; then for i in \ ../celib-palm-3.0 \ ../celib \ ../../celib-palm-3.0 \ ../../celib \ `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \ ${srcdir}/../celib-palm-3.0 \ ${srcdir}/../celib \ `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \ ; do if test -d "$i/inc" ; then ac_cv_c_celibconfig=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_celibconfig}" = x ; then AC_MSG_ERROR([Cannot find celib support library directory]) else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) # Local Variables: # mode: autoconf # End: saods9/tksao/aclocal.m4000755 000765 000000 00000000223 12643517512 015353 0ustar00joyewheel000000 000000 # # Include the TEA standard macro set # builtin(include,tclconfig/tcl.m4) # # Add here whatever m4 macros you want to define for your package # saods9/tksao/colorbar/000755 000765 000000 00000000000 13012655701 015310 5ustar00joyewheel000000 000000 saods9/tksao/configure000755 000765 000000 00001120420 12760100210 015401 0ustar00joyewheel000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for tksao 1.0. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='tksao' PACKAGE_TARNAME='tksao' PACKAGE_VERSION='1.0' PACKAGE_STRING='tksao 1.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS WISH_PROG TCLSH_PROG VC_MANIFEST_EMBED_EXE VC_MANIFEST_EMBED_DLL RANLIB_STUB MAKE_STUB_LIB MAKE_STATIC_LIB MAKE_SHARED_LIB MAKE_LIB TCL_DBGX LDFLAGS_DEFAULT CFLAGS_DEFAULT LD_LIBRARY_PATH_VAR SHLIB_CFLAGS SHLIB_LD_LIBS SHLIB_LD STLIB_LD CFLAGS_WARNING CFLAGS_OPTIMIZE CFLAGS_DEBUG RC CELIB_DIR AR SHARED_BUILD TCL_THREADS XMKMF TK_XLIB_DIR_NATIVE TK_TOP_DIR_NATIVE TK_INCLUDES TCL_INCLUDES PKG_OBJECTS PKG_SOURCES MATH_LIBS EGREP GREP RANLIB SET_MAKE INSTALL CPP TK_XINCLUDES TK_LIBS TK_STUB_LIB_SPEC TK_STUB_LIB_FLAG TK_STUB_LIB_FILE TK_LIB_SPEC TK_LIB_FLAG TK_LIB_FILE TK_SRC_DIR TK_BIN_DIR TK_VERSION TCL_SHLIB_LD_LIBS TCL_LD_FLAGS TCL_EXTRA_CFLAGS TCL_DEFS TCL_LIBS CLEANFILES OBJEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC TCL_STUB_LIB_SPEC TCL_STUB_LIB_FLAG TCL_STUB_LIB_FILE TCL_LIB_SPEC TCL_LIB_FLAG TCL_LIB_FILE TCL_SRC_DIR TCL_BIN_DIR TCL_PATCH_LEVEL TCL_VERSION PKG_CFLAGS PKG_LIBS PKG_INCLUDES PKG_HEADERS PKG_TCL_SOURCES PKG_STUB_OBJECTS PKG_STUB_SOURCES PKG_STUB_LIB_FILE PKG_LIB_FILE EXEEXT CYGPATH target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_tcl with_tk with_tclinclude with_tkinclude with_x enable_threads enable_shared enable_64bit enable_64bit_vis enable_rpath enable_wince with_celib enable_symbols ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP XMKMF' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures tksao 1.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/tksao] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of tksao 1.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-threads build with threads --enable-shared build and link with shared libraries (default: on) --enable-64bit enable 64bit support (default: off) --enable-64bit-vis enable 64bit Sparc VIS support (default: off) --disable-rpath disable rpath support (default: on) --enable-wince enable Win/CE support (where applicable) --enable-symbols build with debugging symbols (default: off) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-tcl directory containing tcl configuration (tclConfig.sh) --with-tk directory containing tk configuration (tkConfig.sh) --with-tclinclude directory containing the public Tcl header files --with-tkinclude directory containing the public Tk header files --with-x use the X Window System --with-celib=DIR use Windows/CE support library from DIR Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor XMKMF Path to xmkmf, Makefile generator for X Window System Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF tksao configure 1.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by tksao $as_me 1.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct TEA configuration" >&5 $as_echo_n "checking for correct TEA configuration... " >&6; } if test x"${PACKAGE_NAME}" = x ; then as_fn_error $? " The PACKAGE_NAME variable must be defined by your TEA configure.in" "$LINENO" 5 fi if test x"3.9" = x ; then as_fn_error $? " TEA version not specified." "$LINENO" 5 elif test "3.9" != "${TEA_VERSION}" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&5 $as_echo "warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (TEA ${TEA_VERSION})" >&5 $as_echo "ok (TEA ${TEA_VERSION})" >&6; } fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) # Extract the first word of "cygpath", so it can be a program name with args. set dummy cygpath; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CYGPATH+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CYGPATH"; then ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CYGPATH="cygpath -w" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" fi fi CYGPATH=$ac_cv_prog_CYGPATH if test -n "$CYGPATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 $as_echo "$CYGPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi { $as_echo "$as_me:${as_lineno-$LINENO}: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&5 $as_echo "$as_me: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&6;} # This package name must be replaced statically for AC_SUBST to work # Substitute STUB_LIB_FILE in case package creates a stub library too. # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... ac_aux_dir= for ac_dir in tclconfig "$srcdir"/tclconfig; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in tclconfig \"$srcdir\"/tclconfig" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true # Check whether --with-tcl was given. if test "${with_tcl+set}" = set; then : withval=$with_tcl; with_tclconfig="${withval}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl configuration" >&5 $as_echo_n "checking for Tcl configuration... " >&6; } if ${ac_cv_c_tclconfig+:} false; then : $as_echo_n "(cached) " >&6 else # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5 $as_echo "$as_me: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&2;} with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else as_fn_error $? "${with_tclconfig} directory doesn't contain tclConfig.sh" "$LINENO" 5 fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../tcl[8-9].[0-9]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../tcl[8-9].[0-9]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi fi if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" as_fn_error $? "Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" "$LINENO" 5 else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: found ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo "found ${TCL_BIN_DIR}/tclConfig.sh" >&6; } fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo_n "checking for existence of ${TCL_BIN_DIR}/tclConfig.sh... " >&6; } if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 $as_echo "loading" >&6; } . "${TCL_BIN_DIR}/tclConfig.sh" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo "could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6; } fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" { $as_echo "$as_me:${as_lineno-$LINENO}: checking platform" >&5 $as_echo_n "checking platform... " >&6; } hold_cc=$CC; CC="$TCL_CC" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifdef _WIN32 #error win32 #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : TEA_PLATFORM="unix" else TEA_PLATFORM="windows" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CC=$hold_cc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEA_PLATFORM" >&5 $as_echo "$TEA_PLATFORM" >&6; } # The BUILD_$pkg is to define the correct extern storage class # handling when making this package cat >>confdefs.h <<_ACEOF #define BUILD_${PACKAGE_NAME} /**/ _ACEOF # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: #-------------------------------------------------------------------- # Load the tkConfig.sh file if necessary (Tk extension) #-------------------------------------------------------------------- # # Ok, lets find the tk configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tk # if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true # Check whether --with-tk was given. if test "${with_tk+set}" = set; then : withval=$with_tk; with_tkconfig="${withval}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tk configuration" >&5 $as_echo_n "checking for Tk configuration... " >&6; } if ${ac_cv_c_tkconfig+:} false; then : $as_echo_n "(cached) " >&6 else # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&5 $as_echo "$as_me: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&2;} with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else as_fn_error $? "${with_tkconfig} directory doesn't contain tkConfig.sh" "$LINENO" 5 fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ../tk \ `ls -dr ../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ../tk[8-9].[0-9]* 2>/dev/null` \ ../../tk \ `ls -dr ../../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../tk[8-9].[0-9]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../../tk[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi fi if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" as_fn_error $? "Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh" "$LINENO" 5 else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: found ${TK_BIN_DIR}/tkConfig.sh" >&5 $as_echo "found ${TK_BIN_DIR}/tkConfig.sh" >&6; } fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of ${TK_BIN_DIR}/tkConfig.sh" >&5 $as_echo_n "checking for existence of ${TK_BIN_DIR}/tkConfig.sh... " >&6; } if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 $as_echo "loading" >&6; } . "${TK_BIN_DIR}/tkConfig.sh" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find ${TK_BIN_DIR}/tkConfig.sh" >&5 $as_echo "could not find ${TK_BIN_DIR}/tkConfig.sh" >&6; } fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" # TEA specific: Ensure windowingsystem is defined if test "${TEA_PLATFORM}" = "unix" ; then case ${TK_DEFS} in *MAC_OSX_TK*) $as_echo "#define MAC_OSX_TK 1" >>confdefs.h TEA_WINDOWINGSYSTEM="aqua" ;; *) TEA_WINDOWINGSYSTEM="x11" ;; esac elif test "${TEA_PLATFORM}" = "windows" ; then TEA_WINDOWINGSYSTEM="win32" fi # TEA specific: #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&5 $as_echo "$as_me: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&6;} prefix=${TCL_PREFIX} else { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to /usr/local" >&5 $as_echo "$as_me: --prefix defaulting to /usr/local" >&6;} prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&5 $as_echo "$as_me: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&6;} exec_prefix=${TCL_EXEC_PREFIX} else { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to ${prefix}" >&5 $as_echo "$as_me: --exec-prefix defaulting to ${prefix}" >&6;} exec_prefix=$prefix fi fi #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC and a few others to create the basic setup # necessary to compile executables. #----------------------------------------------------------------------- # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. #------------------------------------------------------------------------ # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------ if test -z "$no_pipe" -a -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler understands -pipe" >&5 $as_echo_n "checking if the compiler understands -pipe... " >&6; } if ${tcl_cv_cc_pipe+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_cc_pipe=yes else tcl_cv_cc_pipe=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_pipe" >&5 $as_echo "$tcl_cv_cc_pipe" >&6; } if test $tcl_cv_cc_pipe = yes; then CFLAGS="$CFLAGS -pipe" fi fi #-------------------------------------------------------------------- # Common compiler flag setup #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac if test "${TEA_PLATFORM}" = "unix" ; then #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- ac_fn_c_check_func "$LINENO" "sin" "ac_cv_func_sin" if test "x$ac_cv_func_sin" = xyes; then : MATH_LIBS="" else MATH_LIBS="-lm" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lieee" >&5 $as_echo_n "checking for main in -lieee... " >&6; } if ${ac_cv_lib_ieee_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lieee $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ieee_main=yes else ac_cv_lib_ieee_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee_main" >&5 $as_echo "$ac_cv_lib_ieee_main" >&6; } if test "x$ac_cv_lib_ieee_main" = xyes; then : MATH_LIBS="-lieee $MATH_LIBS" fi #-------------------------------------------------------------------- # Interactive UNIX requires -linet instead of -lsocket, plus it # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5 $as_echo_n "checking for main in -linet... " >&6; } if ${ac_cv_lib_inet_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-linet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_inet_main=yes else ac_cv_lib_inet_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5 $as_echo "$ac_cv_lib_inet_main" >&6; } if test "x$ac_cv_lib_inet_main" = xyes; then : LIBS="$LIBS -linet" fi ac_fn_c_check_header_mongrel "$LINENO" "net/errno.h" "ac_cv_header_net_errno_h" "$ac_includes_default" if test "x$ac_cv_header_net_errno_h" = xyes; then : $as_echo "#define HAVE_NET_ERRNO_H 1" >>confdefs.h fi #-------------------------------------------------------------------- # Check for the existence of the -lsocket and -lnsl libraries. # The order here is important, so that they end up in the right # order in the command line generated by make. Here are some # special considerations: # 1. Use "connect" and "accept" to check for -lsocket, and # "gethostbyname" to check for -lnsl. # 2. Use each function name only once: can't redo a check because # autoconf caches the results of the last check and won't redo it. # 3. Use -lnsl and -lsocket only if they supply procedures that # aren't already present in the normal libraries. This is because # IRIX 5.2 has libraries, but they aren't needed and they're # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- tcl_checkBoth=0 ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : tcl_checkSocket=0 else tcl_checkSocket=1 fi if test "$tcl_checkSocket" = 1; then ac_fn_c_check_func "$LINENO" "setsockopt" "ac_cv_func_setsockopt" if test "x$ac_cv_func_setsockopt" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 $as_echo_n "checking for setsockopt in -lsocket... " >&6; } if ${ac_cv_lib_socket_setsockopt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char setsockopt (); int main () { return setsockopt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_setsockopt=yes else ac_cv_lib_socket_setsockopt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_setsockopt" >&5 $as_echo "$ac_cv_lib_socket_setsockopt" >&6; } if test "x$ac_cv_lib_socket_setsockopt" = xyes; then : LIBS="$LIBS -lsocket" else tcl_checkBoth=1 fi fi fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" ac_fn_c_check_func "$LINENO" "accept" "ac_cv_func_accept" if test "x$ac_cv_func_accept" = xyes; then : tcl_checkNsl=0 else LIBS=$tk_oldLibs fi fi ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : LIBS="$LIBS -lnsl" fi fi # TEA specific: Don't perform the eval of the libraries here because # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking dirent.h" >&5 $as_echo_n "checking dirent.h... " >&6; } if ${tcl_cv_dirent_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #ifndef _POSIX_SOURCE # ifdef __Lynx__ /* * Generate compilation error to make the test fail: Lynx headers * are only valid if really in the POSIX environment. */ missing_procedure(); # endif #endif DIR *d; struct dirent *entryPtr; char *p; d = opendir("foobar"); entryPtr = readdir(d); p = entryPtr->d_name; closedir(d); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_dirent_h=yes else tcl_cv_dirent_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_dirent_h" >&5 $as_echo "$tcl_cv_dirent_h" >&6; } if test $tcl_cv_dirent_h = no; then $as_echo "#define NO_DIRENT_H 1" >>confdefs.h fi # TEA specific: ac_fn_c_check_header_mongrel "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" if test "x$ac_cv_header_errno_h" = xyes; then : else $as_echo "#define NO_ERRNO_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default" if test "x$ac_cv_header_float_h" = xyes; then : else $as_echo "#define NO_FLOAT_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default" if test "x$ac_cv_header_values_h" = xyes; then : else $as_echo "#define NO_VALUES_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" if test "x$ac_cv_header_limits_h" = xyes; then : $as_echo "#define HAVE_LIMITS_H 1" >>confdefs.h else $as_echo "#define NO_LIMITS_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : tcl_ok=1 else tcl_ok=0 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strtol" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strtoul" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strtod" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* if test $tcl_ok = 0; then $as_echo "#define NO_STDLIB_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes; then : tcl_ok=1 else tcl_ok=0 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strstr" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strerror" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* # See also memmove check below for a place where NO_STRING_H can be # set and why. if test $tcl_ok = 0; then $as_echo "#define NO_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" if test "x$ac_cv_header_sys_wait_h" = xyes; then : else $as_echo "#define NO_SYS_WAIT_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" if test "x$ac_cv_header_dlfcn_h" = xyes; then : else $as_echo "#define NO_DLFCN_H 1" >>confdefs.h fi # OS/390 lacks sys/param.h (and doesn't need it, by chance). for ac_header in sys/param.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" if test "x$ac_cv_header_sys_param_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_PARAM_H 1 _ACEOF fi done # Let the user call this, because if it triggers, they will # need a compat/strtod.c that is correct. Users can also # use Tcl_GetDouble(FromObj) instead. #TEA_BUGGY_STRTOD fi #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- vars=" saotk.C colorbar/cbgrid.C colorbar/colorbar.C colorbar/colorbarbase.C colorbar/colorbarrgb.C colorbar/colorbarrgbtruecolor16.C colorbar/colorbarrgbtruecolor24.C colorbar/colorbarrgbtruecolor8.C colorbar/colorbartruecolor16.C colorbar/colorbartruecolor24.C colorbar/colorbartruecolor8.C colorbar/colormap.C colorbar/colortag.C colorbar/default.C colorbar/lex.C colorbar/lut.C colorbar/lutlex.C colorbar/lutparser.C colorbar/parser.C colorbar/sao.C colorbar/saolex.C colorbar/saoparser.C fitsy++/alloc.C fitsy++/allocgz.C fitsy++/analysis.C fitsy++/block.C fitsy++/card.C fitsy++/channel.C fitsy++/column.C fitsy++/compress.C fitsy++/envi.C fitsy++/envilex.C fitsy++/enviparser.C fitsy++/file.C fitsy++/gzip.C fitsy++/hcompress.C fitsy++/hdecompress.c fitsy++/hdu.C fitsy++/head.C fitsy++/hist.C fitsy++/hpx.C fitsy++/iis.C fitsy++/lex.C fitsy++/map.C fitsy++/mapincr.C fitsy++/mmap.C fitsy++/mmapincr.C fitsy++/nrrd.C fitsy++/nrrdgzip.C fitsy++/nrrdlex.C fitsy++/nrrdparser.C fitsy++/order.C fitsy++/outchannel.C fitsy++/outfile.C fitsy++/outfits.C fitsy++/outsocket.C fitsy++/parser.C fitsy++/photo.C fitsy++/plio.C fitsy++/pliocomp.c fitsy++/rice.C fitsy++/ricecomp.c fitsy++/savefits.C fitsy++/share.C fitsy++/smap.C fitsy++/smmap.C fitsy++/socket.C fitsy++/socketgz.C fitsy++/sshare.C fitsy++/strm.C fitsy++/var.C frame/annulus.C frame/base.C frame/basebox.C frame/basecommand.C frame/baseellipse.C frame/baseline.C frame/basemarker.C frame/basepolygon.C frame/box.C frame/boxannulus.C frame/bpanda.C frame/callback.C frame/ciaolex.C frame/ciaoparser.C frame/circle.C frame/colorscale.C frame/colorscalergb.C frame/colorscaletrue16.C frame/colorscaletrue24.C frame/colorscaletrue32.C frame/colorscaletrue8.C frame/compass.C frame/composite.C frame/context.C frame/contour.C frame/contourlex.C frame/contourparser.C frame/coord.C frame/cpanda.C frame/ds9lex.C frame/ds9parser.C frame/ellipse.C frame/ellipseannulus.C frame/epanda.C frame/fitsanalysis.C frame/fitsbin.C frame/fitsblock.C frame/fitscompress.C frame/fitsdata.C frame/fitsenvi.C frame/fitshealpix.C frame/fitsimage.C frame/fitsmap.C frame/fitsmask.C frame/fitsnrrd.C frame/fr3dcommand.C frame/fr3dmap.C frame/frame.C frame/frame3d.C frame/frame3dbase.C frame/frame3dtruecolor16.C frame/frame3dtruecolor24.C frame/frame3dtruecolor8.C frame/framebase.C frame/framergb.C frame/framergbtruecolor16.C frame/framergbtruecolor24.C frame/framergbtruecolor8.C frame/frametruecolor16.C frame/frametruecolor24.C frame/frametruecolor8.C frame/frblt.C frame/frcommand.C frame/frload.C frame/frmap.C frame/frmarker.C frame/frmarkerxml.C frame/frsave.C frame/frscale.C frame/fvcontour.C frame/grid.C frame/grid25d.C frame/grid2d.C frame/grid3d.C frame/inversescale.C frame/lex.C frame/line.C frame/marker.C frame/parser.C frame/point.C frame/polygon.C frame/projection.C frame/proslex.C frame/prosparser.C frame/raytrace.C frame/ruler.C frame/saolex.C frame/saoparser.C frame/segment.C frame/tag.C frame/text.C frame/tnglex.C frame/tngparser.C frame/vect.C frame/xylex.C frame/xyparser.C list/list.C magnifier/lex.C magnifier/magnifier.C magnifier/magnifiertrue.C magnifier/parser.C panner/lex.C panner/panner.C panner/pannertrue.C panner/parser.C util/attribute.C util/grf.C util/grf3d.C util/grid25dbase.C util/grid2dbase.C util/grid3dbase.C util/gridbase.C util/ps.C util/smooth.C util/util.C vector/vector.C vector/vector3d.C wcssubs/cel.c wcssubs/distort.c wcssubs/dsspos.c wcssubs/hget.c wcssubs/hput.c wcssubs/iget.c wcssubs/lin.c wcssubs/platepos.c wcssubs/poly.c wcssubs/proj.c wcssubs/sph.c wcssubs/tnxpos.c wcssubs/wcs.c wcssubs/wcscon.c wcssubs/wcsinit.c wcssubs/wcslib.c wcssubs/wcstrig.c wcssubs/worldpos.c wcssubs/zpxpos.c widget/truecolor16.C widget/truecolor24.C widget/truecolor8.C widget/widget.C " for i in $vars; do case $i in \$*) # allow $-var names PKG_SOURCES="$PKG_SOURCES $i" PKG_OBJECTS="$PKG_OBJECTS $i" ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then as_fn_error $? "could not find source file '$i'" "$LINENO" 5 fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir # i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}" fi PKG_OBJECTS="$PKG_OBJECTS $j" ;; esac done vars="" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then as_fn_error $? "could not find header file '${srcdir}/$i'" "$LINENO" 5 fi PKG_HEADERS="$PKG_HEADERS $i" done vars="-I. -I./colorbar -I./fitsy++ -I./frame -I./list -I./magnifier -I./panner -I./util -I./vector -I./wcssubs -I./widget -I${prefix}/include" for i in $vars; do PKG_INCLUDES="$PKG_INCLUDES $i" done vars="-lstdc++" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done PKG_CFLAGS="$PKG_CFLAGS " vars="" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then as_fn_error $? "could not find stub source file '$i'" "$LINENO" 5 fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}" fi PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" done vars="" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then as_fn_error $? "could not find tcl source file '${srcdir}/$i'" "$LINENO" 5 fi PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" done { $as_echo "$as_me:${as_lineno-$LINENO}: checking system version" >&5 $as_echo_n "checking system version... " >&6; } if ${tcl_cv_sys_version+:} false; then : $as_echo_n "(cached) " >&6 else # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5 $as_echo "$as_me: WARNING: can't find uname command" >&2;} tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5 $as_echo "$tcl_cv_sys_version" >&6; } system=$tcl_cv_sys_version case $system in windows*) $as_echo "#define HAVE_MINGW32 1" >>confdefs.h ;; *) for ac_header in sys/shm.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default" if test "x$ac_cv_header_sys_shm_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SHM_H 1 _ACEOF fi done ;; esac #-------------------------------------------------------------------- # __CHANGE__ # # You can add more files to clean if your extension creates any extra # files by extending CLEANFILES. # Add pkgIndex.tcl if it is generated in the Makefile instead of ./configure # and change Makefile.in to move it from CONFIG_CLEAN_FILES to BINARIES var. # # A few miscellaneous platform-specific items: # TEA_ADD_* any platform specific compiler/build info here. #-------------------------------------------------------------------- #CLEANFILES="$CLEANFILES pkgIndex.tcl" if test "${TEA_PLATFORM}" = "windows" ; then # Ensure no empty if clauses : #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) vars="-I${prefix}/include/libxml2" for i in $vars; do PKG_INCLUDES="$PKG_INCLUDES $i" done else # Ensure no empty else clauses : #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) vars="-I/usr/include/libxml2" for i in $vars; do PKG_INCLUDES="$PKG_INCLUDES $i" done fi #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl public headers" >&5 $as_echo_n "checking for Tcl public headers... " >&6; } # Check whether --with-tclinclude was given. if test "${with_tclinclude+set}" = set; then : withval=$with_tclinclude; with_tclinclude=${withval} fi if ${ac_cv_c_tclh+:} false; then : $as_echo_n "(cached) " >&6 else # Use the value from --with-tclinclude, if it was given if test x"${with_tclinclude}" != x ; then if test -f "${with_tclinclude}/tcl.h" ; then ac_cv_c_tclh=${with_tclinclude} else as_fn_error $? "${with_tclinclude} directory does not contain tcl.h" "$LINENO" 5 fi else list="" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers directory case ${TCL_DEFS} in *TCL_FRAMEWORK*) list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tcl is not installed, # and in that situation, look there before installed locations. if test -f "${TCL_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TCL_INCLUDE_SPEC}" != x ; then d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tcl.h" ; then ac_cv_c_tclh=$i break fi done fi fi # Print a message based on how we determined the include path if test x"${ac_cv_c_tclh}" = x ; then as_fn_error $? "tcl.h not found. Please specify its location with --with-tclinclude" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_tclh}" >&5 $as_echo "${ac_cv_c_tclh}" >&6; } fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" #TEA_PRIVATE_TCL_HEADERS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tk public headers" >&5 $as_echo_n "checking for Tk public headers... " >&6; } # Check whether --with-tkinclude was given. if test "${with_tkinclude+set}" = set; then : withval=$with_tkinclude; with_tkinclude=${withval} fi if ${ac_cv_c_tkh+:} false; then : $as_echo_n "(cached) " >&6 else # Use the value from --with-tkinclude, if it was given if test x"${with_tkinclude}" != x ; then if test -f "${with_tkinclude}/tk.h" ; then ac_cv_c_tkh=${with_tkinclude} else as_fn_error $? "${with_tkinclude} directory does not contain tk.h" "$LINENO" 5 fi else list="" if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers directory. case ${TK_DEFS} in *TK_FRAMEWORK*) list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tk is not installed, # and in that situation, look there before installed locations. if test -f "${TK_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tk's --prefix location, # relative to directory of tkConfig.sh, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TK_PREFIX}/include 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TK_INCLUDE_SPEC}" != x ; then d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tk.h" ; then ac_cv_c_tkh=$i break fi done fi fi # Print a message based on how we determined the include path if test x"${ac_cv_c_tkh}" = x ; then as_fn_error $? "tk.h not found. Please specify its location with --with-tkinclude" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_tkh}" >&5 $as_echo "${ac_cv_c_tkh}" >&6; } fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}` TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then # On Windows and Aqua, we need the X compat headers { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11 header files" >&5 $as_echo_n "checking for X11 header files... " >&6; } if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${INCLUDE_DIR_NATIVE}" >&5 $as_echo "${INCLUDE_DIR_NATIVE}" >&6; } fi # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tk private include files" >&5 $as_echo_n "checking for Tk private include files... " >&6; } TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}` TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\" # Check to see if tkPort.h isn't already with the public headers # Don't look for tkInt.h because that resides with tk.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tkh}/tkWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tkh}/tkUnixPort.h"; then result="private headers found with public headers" else TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\" TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\" if test "${TEA_PLATFORM}" = "windows"; then TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\" else TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TK_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}" # Detect and add ttk subdir if test -d "${TK_SRC_DIR}/generic/ttk"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\"" fi if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\"" fi if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\"" fi if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TK_DEFS} in *TK_FRAMEWORK*) if test -d "${TK_BIN_DIR}/Headers" -a \ -d "${TK_BIN_DIR}/PrivateHeaders"; then TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}" else TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TK_INCLUDES}" else if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then as_fn_error $? "Cannot find private header tkInt.h in ${TK_SRC_DIR}" "$LINENO" 5 fi result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${result}" >&5 $as_echo "${result}" >&6; } if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else not_really_there="yes" fi rm -f conftest.err conftest.i conftest.$ac_ext else if test ! -r $x_includes/X11/Xlib.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11 header files" >&5 $as_echo_n "checking for X11 header files... " >&6; } found_xincludes="no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : found_xincludes="yes" else found_xincludes="no" fi rm -f conftest.err conftest.i conftest.$ac_ext if test "$found_xincludes" = "no"; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Xlib.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $i" >&5 $as_echo "$i" >&6; } XINCLUDES=" -I$i" found_xincludes="yes" break fi done fi else if test "$x_includes" != ""; then XINCLUDES="-I$x_includes" found_xincludes="yes" fi fi if test "$found_xincludes" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: couldn't find any!" >&5 $as_echo "couldn't find any!" >&6; } fi if test "$no_x" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11 libraries" >&5 $as_echo_n "checking for X11 libraries... " >&6; } XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" for i in $dirs ; do if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $i" >&5 $as_echo "$i" >&6; } XLIBSW="-L$i -lX11" x_libraries="$i" break fi done else if test "$x_libraries" = ""; then XLIBSW=-lX11 else XLIBSW="-L$x_libraries -lX11" fi fi if test "$XLIBSW" = nope ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XCreateWindow in -lXwindow" >&5 $as_echo_n "checking for XCreateWindow in -lXwindow... " >&6; } if ${ac_cv_lib_Xwindow_XCreateWindow+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXwindow $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XCreateWindow (); int main () { return XCreateWindow (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xwindow_XCreateWindow=yes else ac_cv_lib_Xwindow_XCreateWindow=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xwindow_XCreateWindow" >&5 $as_echo "$ac_cv_lib_Xwindow_XCreateWindow" >&6; } if test "x$ac_cv_lib_Xwindow_XCreateWindow" = xyes; then : XLIBSW=-lXwindow fi fi if test "$XLIBSW" = nope ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find any! Using -lX11." >&5 $as_echo "could not find any! Using -lX11." >&6; } XLIBSW=-lX11 fi # TEA specific: if test x"${XLIBSW}" != x ; then PKG_LIBS="${PKG_LIBS} ${XLIBSW}" fi fi #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. # This auto-enables if Tcl was compiled threaded. #-------------------------------------------------------------------- # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; tcl_ok=$enableval else tcl_ok=yes fi if test "${enable_threads+set}" = set; then enableval="$enable_threads" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then TCL_THREADS=1 if test "${TEA_PLATFORM}" != "windows" ; then # We are always OK on Windows, so check what this platform wants: # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention $as_echo "#define USE_THREAD_ALLOC 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h if test "`uname -s`" = "SunOS" ; then $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h fi $as_echo "#define _THREAD_SAFE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthread" >&5 $as_echo_n "checking for pthread_mutex_init in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_mutex_init=yes else ac_cv_lib_pthread_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthread_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_pthread_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_mutex_init in -lpthread" >&5 $as_echo_n "checking for __pthread_mutex_init in -lpthread... " >&6; } if ${ac_cv_lib_pthread___pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char __pthread_mutex_init (); int main () { return __pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread___pthread_mutex_init=yes else ac_cv_lib_pthread___pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthread___pthread_mutex_init" >&6; } if test "x$ac_cv_lib_pthread___pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthreads" >&5 $as_echo_n "checking for pthread_mutex_init in -lpthreads... " >&6; } if ${ac_cv_lib_pthreads_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthreads $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthreads_pthread_mutex_init=yes else ac_cv_lib_pthreads_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthreads_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_pthreads_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc" >&5 $as_echo_n "checking for pthread_mutex_init in -lc... " >&6; } if ${ac_cv_lib_c_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_pthread_mutex_init=yes else ac_cv_lib_c_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_c_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_c_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc_r" >&5 $as_echo_n "checking for pthread_mutex_init in -lc_r... " >&6; } if ${ac_cv_lib_c_r_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_r_pthread_mutex_init=yes else ac_cv_lib_c_r_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_c_r_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_c_r_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -pthread" else TCL_THREADS=0 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&5 $as_echo "$as_me: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&2;} fi fi fi fi fi else TCL_THREADS=0 fi # Do checking message here to not mess up interleaved configure output { $as_echo "$as_me:${as_lineno-$LINENO}: checking for building with threads" >&5 $as_echo_n "checking for building with threads... " >&6; } if test "${TCL_THREADS}" = 1; then $as_echo "#define TCL_THREADS 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (default)" >&5 $as_echo "yes (default)" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # TCL_THREADS sanity checking. See if our request for building with # threads is the same as the way Tcl was built. If not, warn the user. case ${TCL_DEFS} in *THREADS=1*) if test "${TCL_THREADS}" = "0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads." >&5 $as_echo "$as_me: WARNING: Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads." >&2;} fi ;; *) if test "${TCL_THREADS}" = "1"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core." >&5 $as_echo "$as_me: WARNING: --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core." >&2;} fi ;; esac #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to build libraries" >&5 $as_echo_n "checking how to build libraries... " >&6; } # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; tcl_ok=$enableval else tcl_ok=yes fi if test "${enable_shared+set}" = set; then enableval="$enable_shared" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: shared" >&5 $as_echo "shared" >&6; } SHARED_BUILD=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 $as_echo "static" >&6; } SHARED_BUILD=0 $as_echo "#define STATIC_BUILD 1" >>confdefs.h fi #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Step 0.a: Enable 64 bit support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit support is requested" >&5 $as_echo_n "checking if 64bit support is requested... " >&6; } # Check whether --enable-64bit was given. if test "${enable_64bit+set}" = set; then : enableval=$enable_64bit; do64bit=$enableval else do64bit=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bit" >&5 $as_echo "$do64bit" >&6; } # Step 0.b: Enable Solaris 64 bit VIS support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit Sparc VIS support is requested" >&5 $as_echo_n "checking if 64bit Sparc VIS support is requested... " >&6; } # Check whether --enable-64bit-vis was given. if test "${enable_64bit_vis+set}" = set; then : enableval=$enable_64bit_vis; do64bitVIS=$enableval else do64bitVIS=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bitVIS" >&5 $as_echo "$do64bitVIS" >&6; } # Force 64bit on with VIS if test "$do64bitVIS" = "yes"; then : do64bit=yes fi # Step 0.c: Check if visibility support is available. Do this here so # that platform specific alternatives can be used below if this fails. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports visibility \"hidden\"" >&5 $as_echo_n "checking if compiler supports visibility \"hidden\"... " >&6; } if ${tcl_cv_cc_visibility_hidden+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) void f(void); void f(void) {} int main () { f(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_visibility_hidden=yes else tcl_cv_cc_visibility_hidden=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_visibility_hidden" >&5 $as_echo "$tcl_cv_cc_visibility_hidden" >&6; } if test $tcl_cv_cc_visibility_hidden = yes; then : $as_echo "#define MODULE_SCOPE extern __attribute__((__visibility__(\"hidden\")))" >>confdefs.h $as_echo "#define HAVE_HIDDEN 1" >>confdefs.h fi # Step 0.d: Disable -rpath support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if rpath support is requested" >&5 $as_echo_n "checking if rpath support is requested... " >&6; } # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; doRpath=$enableval else doRpath=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doRpath" >&5 $as_echo "$doRpath" >&6; } # TEA specific: Cross-compiling options for Windows/CE builds? if test "${TEA_PLATFORM}" = windows; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Windows/CE build is requested" >&5 $as_echo_n "checking if Windows/CE build is requested... " >&6; } # Check whether --enable-wince was given. if test "${enable_wince+set}" = set; then : enableval=$enable_wince; doWince=$enableval else doWince=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doWince" >&5 $as_echo "$doWince" >&6; } fi # Set the variable "system" to hold the name and version number # for the system. { $as_echo "$as_me:${as_lineno-$LINENO}: checking system version" >&5 $as_echo_n "checking system version... " >&6; } if ${tcl_cv_sys_version+:} false; then : $as_echo_n "(cached) " >&6 else # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5 $as_echo "$as_me: WARNING: can't find uname command" >&2;} tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5 $as_echo "$tcl_cv_sys_version" >&6; } system=$tcl_cv_sys_version # Require ranlib early so we can override it in special cases below. # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g if test "$GCC" = yes; then : CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" else CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" if test "x$SHLIB_VERSION" = x; then : SHLIB_VERSION="1.0" fi case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs # MACHINE is IX86 for LINK, but this is used by the manifest, # which requires x86|amd64|ia64. MACHINE="X86" if test "$do64bit" != "no" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft Platform SDK" fi MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` PATH64="" case "$do64bit" in amd64|x64|yes) MACHINE="AMD64" ; # default to AMD64 64-bit build PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&5 $as_echo "$as_me: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ensure latest Platform SDK is installed" >&5 $as_echo "$as_me: WARNING: Ensure latest Platform SDK is installed" >&2;} do64bit="no" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using 64-bit $MACHINE mode" >&5 $as_echo " Using 64-bit $MACHINE mode" >&6; } do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" != "no" ; then as_fn_error $? "Windows/CE and 64-bit builds incompatible" "$LINENO" 5 fi if test "$GCC" = "yes" ; then as_fn_error $? "Windows/CE and GCC builds incompatible" "$LINENO" 5 fi # First, look for one uninstalled. # the alternative search directory is invoked by --with-celib if test x"${no_celib}" = x ; then # we reset no_celib in case something fails here no_celib=true # Check whether --with-celib was given. if test "${with_celib+set}" = set; then : withval=$with_celib; with_celibconfig=${withval} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Windows/CE celib directory" >&5 $as_echo_n "checking for Windows/CE celib directory... " >&6; } if ${ac_cv_c_celibconfig+:} false; then : $as_echo_n "(cached) " >&6 else # First check to see if --with-celibconfig was specified. if test x"${with_celibconfig}" != x ; then if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else as_fn_error $? "${with_celibconfig} directory doesn't contain inc directory" "$LINENO" 5 fi fi # then check for a celib library if test x"${ac_cv_c_celibconfig}" = x ; then for i in \ ../celib-palm-3.0 \ ../celib \ ../../celib-palm-3.0 \ ../../celib \ `ls -dr ../celib-*3.[0-9]* 2>/dev/null` \ ${srcdir}/../celib-palm-3.0 \ ${srcdir}/../celib \ `ls -dr ${srcdir}/../celib-*3.[0-9]* 2>/dev/null` \ ; do if test -d "$i/inc" ; then ac_cv_c_celibconfig=`(cd $i; pwd)` break fi done fi fi if test x"${ac_cv_c_celibconfig}" = x ; then as_fn_error $? "Cannot find celib support library directory" "$LINENO" 5 else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $CELIB_DIR" >&5 $as_echo "found $CELIB_DIR" >&6; } fi fi # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length($1)) { printf "CEVERSION=\"%s\"\n", $1; \ if ($1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length($2)) { printf "TARGETCPU=\"%s\"\n", toupper($2) }; \ if (length($3)) { printf "ARCH=\"%s\"\n", toupper($3) }; \ if (length($4)) { printf "PLATFORM=\"%s\"\n", $4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then as_fn_error $? "could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" "$LINENO" 5 doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" != "no" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="\"${PATH64}/cl.exe\"" CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" RC="\"${MSSDK}/bin/rc.exe\"" lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" LINKBIN="\"${PATH64}/link.exe\"" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" # Avoid 'unresolved external symbol __security_cookie' # errors, c.f. http://support.microsoft.com/?id=894573 vars="bufferoverflowU.lib" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="\"${CEBINROOT}/cl.exe\"" else CC="\"${CEBINROOT}/cl${ARCH}.exe\"" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" arch=`echo ${ARCH} | awk '{print tolower($0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do cat >>confdefs.h <<_ACEOF #define $i 1 _ACEOF done cat >>confdefs.h <<_ACEOF #define _WIN32_WCE $CEVERSION _ACEOF cat >>confdefs.h <<_ACEOF #define UNDER_CE $CEVERSION _ACEOF CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RC"; then ac_cv_prog_RC="$RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RC="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RC=$ac_cv_prog_RC if test -n "$RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 $as_echo "$RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RC"; then ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RC"; then ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RC="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 $as_echo "$ac_ct_RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RC" = x; then RC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RC=$ac_ct_RC fi else RC="$ac_cv_prog_RC" fi CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cross-compile version of gcc" >&5 $as_echo_n "checking for cross-compile version of gcc... " >&6; } if ${ac_cv_cross+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __WIN32__ #error cross-compiler #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cross=yes else ac_cv_cross=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cross" >&5 $as_echo "$ac_cv_cross" >&6; } if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # and also # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx # This essentially turns it all on. LDFLAGS_DEBUG="-debug -debugtype:cv" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"; then : # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([^ ]*\)/\1_r/'` ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using $CC for compiling with threads" >&5 $as_echo "Using $CC for compiling with threads" >&6; } fi LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : if test "$GCC" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} else do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" fi fi if test "`uname -m`" = ia64; then : # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" if test "$GCC" = yes; then : CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' else if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared -Wl,-bexpall' else SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" fi SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} fi ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lbind" >&5 $as_echo_n "checking for inet_ntoa in -lbind... " >&6; } if ${ac_cv_lib_bind_inet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbind $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inet_ntoa (); int main () { return inet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bind_inet_ntoa=yes else ac_cv_lib_bind_inet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bind_inet_ntoa" >&5 $as_echo "$ac_cv_lib_bind_inet_ntoa" >&6; } if test "x$ac_cv_lib_bind_inet_ntoa" = xyes; then : LIBS="$LIBS -lbind -lsocket" fi ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; } if ${ac_cv_lib_network_inet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnetwork $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inet_ntoa (); int main () { return inet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_network_inet_ntoa=yes else ac_cv_lib_network_inet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_network_inet_ntoa" >&5 $as_echo "$ac_cv_lib_network_inet_ntoa" >&6; } if test "x$ac_cv_lib_network_inet_ntoa" = xyes; then : LIBS="$LIBS -lnetwork" fi ;; HP-UX-*.11.*) # Use updated header definitions where possible $as_echo "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library if test "`uname -m`" = ia64; then : SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi else SHLIB_SUFFIX=".sl" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = yes; then : LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" fi if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} else CFLAGS="$CFLAGS -z" # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes"; then : if test "$GCC" = yes; then : case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} ;; esac else do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" fi fi ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi if test "$GCC" = yes; then : CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" else case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" fi ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : if test "$GCC" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported by gcc" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported by gcc" >&2;} else do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" fi fi ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "`uname -m`" = "alpha"; then : CFLAGS="$CFLAGS -mieee" fi if test $do64bit = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -m64 flag" >&5 $as_echo_n "checking if compiler accepts -m64 flag... " >&6; } if ${tcl_cv_cc_m64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -m64" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_m64=yes else tcl_cv_cc_m64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_m64" >&5 $as_echo "$tcl_cv_cc_m64" >&6; } if test $tcl_cv_cc_m64 = yes; then : CFLAGS="$CFLAGS -m64" do64bit_ok=yes fi fi # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. if test x"${USE_COMPAT}" != x; then : CFLAGS="$CFLAGS -fno-inline" fi ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac if test "${TCL_THREADS}" = "1"; then : # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" fi # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "${TCL_THREADS}" = "1"; then : # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$@" SHLIB_SUFFIX=".so" LDFLAGS="" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi if test "${TCL_THREADS}" = "1"; then : # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS" fi # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1' TCL_LIB_VERSIONS_OK=nodots ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if ($i~/^(isysroot|mmacosx-version-min)/) print "-"$i}'`" CFLAGS="`echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if (!($i~/^(isysroot|mmacosx-version-min)/)) print "-"$i}'`" if test $do64bit = yes; then : case `arch` in ppc) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch ppc64 flag" >&5 $as_echo_n "checking if compiler accepts -arch ppc64 flag... " >&6; } if ${tcl_cv_cc_arch_ppc64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_arch_ppc64=yes else tcl_cv_cc_arch_ppc64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_ppc64" >&5 $as_echo "$tcl_cv_cc_arch_ppc64" >&6; } if test $tcl_cv_cc_arch_ppc64 = yes; then : CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" do64bit_ok=yes fi;; i386) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch x86_64 flag" >&5 $as_echo_n "checking if compiler accepts -arch x86_64 flag... " >&6; } if ${tcl_cv_cc_arch_x86_64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch x86_64" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_arch_x86_64=yes else tcl_cv_cc_arch_x86_64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_x86_64" >&5 $as_echo "$tcl_cv_cc_arch_x86_64" >&6; } if test $tcl_cv_cc_arch_x86_64 = yes; then : CFLAGS="$CFLAGS -arch x86_64" do64bit_ok=yes fi;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&5 $as_echo "$as_me: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&2;};; esac else # Check for combined 32-bit and 64-bit fat build if echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '; then : fat_32_64=yes fi fi # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -single_module flag" >&5 $as_echo_n "checking if ld accepts -single_module flag... " >&6; } if ${tcl_cv_ld_single_module+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_single_module=yes else tcl_cv_ld_single_module=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_single_module" >&5 $as_echo "$tcl_cv_ld_single_module" >&6; } if test $tcl_cv_ld_single_module = yes; then : SHLIB_LD="${SHLIB_LD} -Wl,-single_module" fi # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([0-9]\{1,5\}\)\(\(\.[0-9]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: if test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int($2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int($2)}'`" -lt 4; then : LDFLAGS="$LDFLAGS -prebind" fi LDFLAGS="$LDFLAGS -headerpad_max_install_names" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -search_paths_first flag" >&5 $as_echo_n "checking if ld accepts -search_paths_first flag... " >&6; } if ${tcl_cv_ld_search_paths_first+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_search_paths_first=yes else tcl_cv_ld_search_paths_first=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_search_paths_first" >&5 $as_echo "$tcl_cv_ld_search_paths_first" >&6; } if test $tcl_cv_ld_search_paths_first = yes; then : LDFLAGS="$LDFLAGS -Wl,-search_paths_first" fi if test "$tcl_cv_cc_visibility_hidden" != yes; then : $as_echo "#define MODULE_SCOPE __private_extern__" >>confdefs.h tcl_cv_cc_visibility_hidden=yes fi CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. if test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"; then : if test "${TEA_WINDOWINGSYSTEM}" = x11; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit X11" >&5 $as_echo_n "checking for 64-bit X11... " >&6; } if ${tcl_cv_lib_x11_64+:} false; then : $as_echo_n "(cached) " >&6 else for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_lib_x11_64=yes else tcl_cv_lib_x11_64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_x11_64" >&5 $as_echo "$tcl_cv_lib_x11_64" >&6; } fi if test "${TEA_WINDOWINGSYSTEM}" = aqua; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit Tk" >&5 $as_echo_n "checking for 64-bit Tk... " >&6; } if ${tcl_cv_lib_tk_64+:} false; then : $as_echo_n "(cached) " >&6 else for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { Tk_InitStubs(NULL, "", 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_lib_tk_64=yes else tcl_cv_lib_tk_64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_tk_64" >&5 $as_echo "$tcl_cv_lib_tk_64" >&6; } fi # remove 64-bit arch flags from CFLAGS et al. if configuration # does not support 64-bit. if test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Removing 64-bit architectures from compiler & linker flags" >&5 $as_echo "$as_me: Removing 64-bit architectures from compiler & linker flags" >&6;} for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done fi fi ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy $as_echo "#define _OE_SOCKETS 1" >>confdefs.h ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" if test "$SHARED_BUILD" = 1; then : SHLIB_LD='ld -shared -expect_unresolved "*"' else SHLIB_LD='ld -non_shared -expect_unresolved "*"' fi SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi if test "$GCC" = yes; then : CFLAGS="$CFLAGS -mieee" else CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee" fi # see pthread_intro(3) for pthread support on osf1, k.furukawa if test "${TCL_THREADS}" = 1; then : CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` if test "$GCC" = yes; then : LIBS="$LIBS -lpthread -lmach -lexc" else CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi fi ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) if test "$GCC" = yes; then : SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" else SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" fi SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[0-6]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} else SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} fi ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : arch=`isainfo` if test "$arch" = "sparcv9 sparc"; then : if test "$GCC" = yes; then : if test "`${CC} -dumpversion | awk -F. '{print $1}'`" -lt 3; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&2;} else do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" fi else do64bit_ok=yes if test "$do64bitVIS" = yes; then : CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS_ARCH="-xarch=v9a" else CFLAGS="$CFLAGS -xarch=v9" LDFLAGS_ARCH="-xarch=v9" fi # Solaris 64 uses this as well #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" fi else if test "$arch" = "amd64 i386"; then : if test "$GCC" = yes; then : case $system in SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*) do64bit_ok=yes CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;};; esac else do64bit_ok=yes case $system in SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*) CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported for $arch" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported for $arch" >&2;} fi fi fi SHLIB_SUFFIX=".so" if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "$do64bit_ok" = yes; then : if test "$arch" = "sparcv9 sparc"; then : # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" else if test "$arch" = "amd64 i386"; then : # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" fi fi fi else case $system in SunOS-5.[1-9][0-9]*) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';; *) SHLIB_LD='/usr/ccs/bin/ld -G -z text';; esac CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' fi ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld accepts -Bexport flag" >&5 $as_echo_n "checking for ld accepts -Bexport flag... " >&6; } if ${tcl_cv_ld_Bexport+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_Bexport=yes else tcl_cv_ld_Bexport=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_Bexport" >&5 $as_echo "$tcl_cv_ld_Bexport" >&6; } if test $tcl_cv_ld_Bexport = yes; then : LDFLAGS="$LDFLAGS -Wl,-Bexport" fi CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; esac if test "$do64bit" = yes -a "$do64bit_ok" = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit support being disabled -- don't know magic for this platform" >&5 $as_echo "$as_me: WARNING: 64bit support being disabled -- don't know magic for this platform" >&2;} fi # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. if test "$GCC" = yes; then : case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac fi if test "$tcl_cv_cc_visibility_hidden" != yes; then : $as_echo "#define MODULE_SCOPE extern" >>confdefs.h fi if test "$SHARED_LIB_SUFFIX" = ""; then : # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}' fi if test "$UNSHARED_LIB_SUFFIX" = ""; then : # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' fi if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SEH support in compiler" >&5 $as_echo_n "checking for SEH support in compiler... " >&6; } if ${tcl_cv_seh+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : tcl_cv_seh=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : tcl_cv_seh=yes else tcl_cv_seh=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_seh" >&5 $as_echo "$tcl_cv_seh" >&6; } if test "$tcl_cv_seh" = "no" ; then $as_echo "#define HAVE_NO_SEH 1" >>confdefs.h fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EXCEPTION_DISPOSITION support in include files" >&5 $as_echo_n "checking for EXCEPTION_DISPOSITION support in include files... " >&6; } if ${tcl_cv_eh_disposition+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN int main () { EXCEPTION_DISPOSITION x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_eh_disposition=yes else tcl_cv_eh_disposition=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_eh_disposition" >&5 $as_echo "$tcl_cv_eh_disposition" >&6; } if test "$tcl_cv_eh_disposition" = "no" ; then $as_echo "#define EXCEPTION_DISPOSITION int" >>confdefs.h fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winnt.h that ignores VOID define" >&5 $as_echo_n "checking for winnt.h that ignores VOID define... " >&6; } if ${tcl_cv_winnt_ignore_void+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define VOID void #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main () { CHAR c; SHORT s; LONG l; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_winnt_ignore_void=yes else tcl_cv_winnt_ignore_void=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_winnt_ignore_void" >&5 $as_echo "$tcl_cv_winnt_ignore_void" >&6; } if test "$tcl_cv_winnt_ignore_void" = "yes" ; then $as_echo "#define HAVE_WINNT_IGNORE_VOID 1" >>confdefs.h fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cast to union support" >&5 $as_echo_n "checking for cast to union support... " >&6; } if ${tcl_cv_cast_to_union+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { union foo { int i; double d; }; union foo f = (union foo) (int) 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_cast_to_union=yes else tcl_cv_cast_to_union=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cast_to_union" >&5 $as_echo "$tcl_cv_cast_to_union" >&6; } if test "$tcl_cv_cast_to_union" = "yes"; then $as_echo "#define HAVE_CAST_TO_UNION 1" >>confdefs.h fi # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary { $as_echo "$as_me:${as_lineno-$LINENO}: checking for required early compiler flags" >&5 $as_echo_n "checking for required early compiler flags... " >&6; } tcl_flags="" if ${tcl_cv_flag__isoc99_source+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *)strtoll; char *q = (char *)strtoull; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__isoc99_source=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _ISOC99_SOURCE 1 #include int main () { char *p = (char *)strtoll; char *q = (char *)strtoull; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__isoc99_source=yes else tcl_cv_flag__isoc99_source=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__isoc99_source}" = "xyes" ; then $as_echo "#define _ISOC99_SOURCE 1" >>confdefs.h tcl_flags="$tcl_flags _ISOC99_SOURCE" fi if ${tcl_cv_flag__largefile64_source+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct stat64 buf; int i = stat64("/", &buf); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile64_source=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE64_SOURCE 1 #include int main () { struct stat64 buf; int i = stat64("/", &buf); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile64_source=yes else tcl_cv_flag__largefile64_source=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__largefile64_source}" = "xyes" ; then $as_echo "#define _LARGEFILE64_SOURCE 1" >>confdefs.h tcl_flags="$tcl_flags _LARGEFILE64_SOURCE" fi if ${tcl_cv_flag__largefile_source64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *)open64; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile_source64=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE64 1 #include int main () { char *p = (char *)open64; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile_source64=yes else tcl_cv_flag__largefile_source64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__largefile_source64}" = "xyes" ; then $as_echo "#define _LARGEFILE_SOURCE64 1" >>confdefs.h tcl_flags="$tcl_flags _LARGEFILE_SOURCE64" fi if test "x${tcl_flags}" = "x" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_flags}" >&5 $as_echo "${tcl_flags}" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit integer type" >&5 $as_echo_n "checking for 64-bit integer type... " >&6; } if ${tcl_cv_type_64bit+:} false; then : $as_echo_n "(cached) " >&6 else tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { __int64 value = (__int64) 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_type_64bit=__int64 else tcl_type_64bit="long long" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { switch (0) { case 1: case (sizeof(${tcl_type_64bit})==sizeof(long)): ; } ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_type_64bit=${tcl_type_64bit} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "${tcl_cv_type_64bit}" = none ; then $as_echo "#define TCL_WIDE_INT_IS_LONG 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: using long" >&5 $as_echo "using long" >&6; } elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* { $as_echo "$as_me:${as_lineno-$LINENO}: result: using Tcl header defaults" >&5 $as_echo "using Tcl header defaults" >&6; } else cat >>confdefs.h <<_ACEOF #define TCL_WIDE_INT_TYPE ${tcl_cv_type_64bit} _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_cv_type_64bit}" >&5 $as_echo "${tcl_cv_type_64bit}" >&6; } # Now check for auxiliary declarations { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent64" >&5 $as_echo_n "checking for struct dirent64... " >&6; } if ${tcl_cv_struct_dirent64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct dirent64 p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_struct_dirent64=yes else tcl_cv_struct_dirent64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_dirent64" >&5 $as_echo "$tcl_cv_struct_dirent64" >&6; } if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then $as_echo "#define HAVE_STRUCT_DIRENT64 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct stat64" >&5 $as_echo_n "checking for struct stat64... " >&6; } if ${tcl_cv_struct_stat64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct stat64 p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_struct_stat64=yes else tcl_cv_struct_stat64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_stat64" >&5 $as_echo "$tcl_cv_struct_stat64" >&6; } if test "x${tcl_cv_struct_stat64}" = "xyes" ; then $as_echo "#define HAVE_STRUCT_STAT64 1" >>confdefs.h fi for ac_func in open64 lseek64 do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for off64_t" >&5 $as_echo_n "checking for off64_t... " >&6; } if ${tcl_cv_type_off64_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { off64_t offset; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_type_off64_t=yes else tcl_cv_type_off64_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_type_off64_t}" = "xyes" && \ test "x${ac_cv_func_lseek64}" = "xyes" && \ test "x${ac_cv_func_open64}" = "xyes" ; then $as_echo "#define HAVE_TYPE_OFF64_T 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build with symbols" >&5 $as_echo_n "checking for build with symbols... " >&6; } # Check whether --enable-symbols was given. if test "${enable_symbols+set}" = set; then : enableval=$enable_symbols; tcl_ok=$enableval else tcl_ok=no fi DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (standard debugging)" >&5 $as_echo "yes (standard debugging)" >&6; } fi fi # TEA specific: if test "${TEA_PLATFORM}" != "windows" ; then LDFLAGS_DEFAULT="${LDFLAGS}" fi if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then $as_echo "#define TCL_MEM_DEBUG 1" >>confdefs.h fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled symbols mem debugging" >&5 $as_echo "enabled symbols mem debugging" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled $tcl_ok debugging" >&5 $as_echo "enabled $tcl_ok debugging" >&6; } fi fi #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. Add Tk too if necessary. #-------------------------------------------------------------------- $as_echo "#define USE_TCL_STUBS 1" >>confdefs.h #AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\$@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\$@ \$(PKG_OBJECTS)" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "manifest needed" >/dev/null 2>&1; then : # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" CLEANFILES="$CLEANFILES *.manifest" fi rm -f conftest* MAKE_STUB_LIB="\${STLIB_LD} -out:\$@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \$@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \$@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \$@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then MAKE_LIB="${MAKE_SHARED_LIB} " else MAKE_LIB="${MAKE_STATIC_LIB} " fi #-------------------------------------------------------------------- # Shared libraries and static libraries have different names. # Use the double eval to make sure any variables in the suffix is # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) RANLIB=: RANLIB_STUB=: else RANLIB_STUB="${RANLIB}" if test "${SHARED_BUILD}" = "1" ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" fi eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" RANLIB=: else eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" fi # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi #-------------------------------------------------------------------- # Determine the name of the tclsh and/or wish executables in the # Tcl and Tk build directories or the location they were installed # into. These paths are used to support running test cases only, # the Makefile should not be making use of these paths to generate # a pkgIndex.tcl file or anything else at extension build time. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tclsh" >&5 $as_echo_n "checking for tclsh... " >&6; } if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="${TCL_BIN_DIR}/tclsh" fi else # tclConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}" fi list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TCL_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${TCLSH_PROG}" ; then REAL_TCL_BIN_DIR="`cd "$i"; pwd`/" break fi done TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${TCLSH_PROG}" >&5 $as_echo "${TCLSH_PROG}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wish" >&5 $as_echo_n "checking for wish... " >&6; } if test -f "${TK_BIN_DIR}/Makefile" ; then # tkConfig.sh is in Tk build directory if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="${TK_BIN_DIR}/wish" fi else # tkConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}" fi list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TK_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${WISH_PROG}" ; then REAL_TK_BIN_DIR="`cd "$i"; pwd`/" break fi done WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WISH_PROG}" >&5 $as_echo "${WISH_PROG}" >&6; } #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- ac_config_files="$ac_config_files Makefile pkgIndex.tcl" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS="" : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by tksao $as_me 1.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ tksao config.status 1.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "pkgIndex.tcl") CONFIG_FILES="$CONFIG_FILES pkgIndex.tcl" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi saods9/tksao/configure.in000755 000765 000000 00000026557 12760100210 016025 0ustar00joyewheel000000 000000 #!/bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. #----------------------------------------------------------------------- # Sample configure.in for Tcl Extensions. The only places you should # need to modify this file are marked by the string __CHANGE__ #----------------------------------------------------------------------- #----------------------------------------------------------------------- # __CHANGE__ # Set your package name and version numbers here. # # This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION # set as provided. These will also be added as -D defs in your Makefile # so you can encode the package version directly into the source files. # This will also define a special symbol for Windows (BUILD_ # so that we create the export library with the dll. #----------------------------------------------------------------------- AC_INIT([tksao], [1.0]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- TEA_INIT([3.9]) AC_CONFIG_AUX_DIR(tclconfig) #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- TEA_PATH_TCLCONFIG TEA_LOAD_TCLCONFIG #-------------------------------------------------------------------- # Load the tkConfig.sh file if necessary (Tk extension) #-------------------------------------------------------------------- TEA_PATH_TKCONFIG TEA_LOAD_TKCONFIG #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- TEA_PREFIX #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC and a few others to create the basic setup # necessary to compile executables. #----------------------------------------------------------------------- TEA_SETUP_COMPILER #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- TEA_ADD_SOURCES([ saotk.C colorbar/cbgrid.C colorbar/colorbar.C colorbar/colorbarbase.C colorbar/colorbarrgb.C colorbar/colorbarrgbtruecolor16.C colorbar/colorbarrgbtruecolor24.C colorbar/colorbarrgbtruecolor8.C colorbar/colorbartruecolor16.C colorbar/colorbartruecolor24.C colorbar/colorbartruecolor8.C colorbar/colormap.C colorbar/colortag.C colorbar/default.C colorbar/lex.C colorbar/lut.C colorbar/lutlex.C colorbar/lutparser.C colorbar/parser.C colorbar/sao.C colorbar/saolex.C colorbar/saoparser.C fitsy++/alloc.C fitsy++/allocgz.C fitsy++/analysis.C fitsy++/block.C fitsy++/card.C fitsy++/channel.C fitsy++/column.C fitsy++/compress.C fitsy++/envi.C fitsy++/envilex.C fitsy++/enviparser.C fitsy++/file.C fitsy++/gzip.C fitsy++/hcompress.C fitsy++/hdecompress.c fitsy++/hdu.C fitsy++/head.C fitsy++/hist.C fitsy++/hpx.C fitsy++/iis.C fitsy++/lex.C fitsy++/map.C fitsy++/mapincr.C fitsy++/mmap.C fitsy++/mmapincr.C fitsy++/nrrd.C fitsy++/nrrdgzip.C fitsy++/nrrdlex.C fitsy++/nrrdparser.C fitsy++/order.C fitsy++/outchannel.C fitsy++/outfile.C fitsy++/outfits.C fitsy++/outsocket.C fitsy++/parser.C fitsy++/photo.C fitsy++/plio.C fitsy++/pliocomp.c fitsy++/rice.C fitsy++/ricecomp.c fitsy++/savefits.C fitsy++/share.C fitsy++/smap.C fitsy++/smmap.C fitsy++/socket.C fitsy++/socketgz.C fitsy++/sshare.C fitsy++/strm.C fitsy++/var.C frame/annulus.C frame/base.C frame/basebox.C frame/basecommand.C frame/baseellipse.C frame/baseline.C frame/basemarker.C frame/basepolygon.C frame/box.C frame/boxannulus.C frame/bpanda.C frame/callback.C frame/ciaolex.C frame/ciaoparser.C frame/circle.C frame/colorscale.C frame/colorscalergb.C frame/colorscaletrue16.C frame/colorscaletrue24.C frame/colorscaletrue32.C frame/colorscaletrue8.C frame/compass.C frame/composite.C frame/context.C frame/contour.C frame/contourlex.C frame/contourparser.C frame/coord.C frame/cpanda.C frame/ds9lex.C frame/ds9parser.C frame/ellipse.C frame/ellipseannulus.C frame/epanda.C frame/fitsanalysis.C frame/fitsbin.C frame/fitsblock.C frame/fitscompress.C frame/fitsdata.C frame/fitsenvi.C frame/fitshealpix.C frame/fitsimage.C frame/fitsmap.C frame/fitsmask.C frame/fitsnrrd.C frame/fr3dcommand.C frame/fr3dmap.C frame/frame.C frame/frame3d.C frame/frame3dbase.C frame/frame3dtruecolor16.C frame/frame3dtruecolor24.C frame/frame3dtruecolor8.C frame/framebase.C frame/framergb.C frame/framergbtruecolor16.C frame/framergbtruecolor24.C frame/framergbtruecolor8.C frame/frametruecolor16.C frame/frametruecolor24.C frame/frametruecolor8.C frame/frblt.C frame/frcommand.C frame/frload.C frame/frmap.C frame/frmarker.C frame/frmarkerxml.C frame/frsave.C frame/frscale.C frame/fvcontour.C frame/grid.C frame/grid25d.C frame/grid2d.C frame/grid3d.C frame/inversescale.C frame/lex.C frame/line.C frame/marker.C frame/parser.C frame/point.C frame/polygon.C frame/projection.C frame/proslex.C frame/prosparser.C frame/raytrace.C frame/ruler.C frame/saolex.C frame/saoparser.C frame/segment.C frame/tag.C frame/text.C frame/tnglex.C frame/tngparser.C frame/vect.C frame/xylex.C frame/xyparser.C list/list.C magnifier/lex.C magnifier/magnifier.C magnifier/magnifiertrue.C magnifier/parser.C panner/lex.C panner/panner.C panner/pannertrue.C panner/parser.C util/attribute.C util/grf.C util/grf3d.C util/grid25dbase.C util/grid2dbase.C util/grid3dbase.C util/gridbase.C util/ps.C util/smooth.C util/util.C vector/vector.C vector/vector3d.C wcssubs/cel.c wcssubs/distort.c wcssubs/dsspos.c wcssubs/hget.c wcssubs/hput.c wcssubs/iget.c wcssubs/lin.c wcssubs/platepos.c wcssubs/poly.c wcssubs/proj.c wcssubs/sph.c wcssubs/tnxpos.c wcssubs/wcs.c wcssubs/wcscon.c wcssubs/wcsinit.c wcssubs/wcslib.c wcssubs/wcstrig.c wcssubs/worldpos.c wcssubs/zpxpos.c widget/truecolor16.C widget/truecolor24.C widget/truecolor8.C widget/widget.C ]) TEA_ADD_HEADERS([]) TEA_ADD_INCLUDES([-I. -I./colorbar -I./fitsy++ -I./frame -I./list -I./magnifier -I./panner -I./util -I./vector -I./wcssubs -I./widget -I${prefix}/include]) TEA_ADD_LIBS([-lstdc++]) TEA_ADD_CFLAGS([]) TEA_ADD_STUB_SOURCES([]) TEA_ADD_TCL_SOURCES([]) TEA_CONFIG_SYSTEM case $system in windows*) AC_DEFINE(HAVE_MINGW32) ;; *) AC_CHECK_HEADERS(sys/shm.h) ;; esac #-------------------------------------------------------------------- # __CHANGE__ # # You can add more files to clean if your extension creates any extra # files by extending CLEANFILES. # Add pkgIndex.tcl if it is generated in the Makefile instead of ./configure # and change Makefile.in to move it from CONFIG_CLEAN_FILES to BINARIES var. # # A few miscellaneous platform-specific items: # TEA_ADD_* any platform specific compiler/build info here. #-------------------------------------------------------------------- #CLEANFILES="$CLEANFILES pkgIndex.tcl" if test "${TEA_PLATFORM}" = "windows" ; then # Ensure no empty if clauses : #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) TEA_ADD_INCLUDES([-I${prefix}/include/libxml2]) else # Ensure no empty else clauses : #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) TEA_ADD_INCLUDES([-I/usr/include/libxml2]) fi #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- TEA_PUBLIC_TCL_HEADERS #TEA_PRIVATE_TCL_HEADERS TEA_PUBLIC_TK_HEADERS TEA_PRIVATE_TK_HEADERS TEA_PATH_X #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. # This auto-enables if Tcl was compiled threaded. #-------------------------------------------------------------------- TEA_ENABLE_THREADS #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- TEA_ENABLE_SHARED #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- TEA_CONFIG_CFLAGS #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- TEA_ENABLE_SYMBOLS #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. Add Tk too if necessary. #-------------------------------------------------------------------- AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs]) #AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- TEA_MAKE_LIB #-------------------------------------------------------------------- # Determine the name of the tclsh and/or wish executables in the # Tcl and Tk build directories or the location they were installed # into. These paths are used to support running test cases only, # the Makefile should not be making use of these paths to generate # a pkgIndex.tcl file or anything else at extension build time. #-------------------------------------------------------------------- TEA_PROG_TCLSH TEA_PROG_WISH #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- AC_OUTPUT([Makefile pkgIndex.tcl]) saods9/tksao/fitsy++/000755 000765 000000 00000000000 13012655702 014772 5ustar00joyewheel000000 000000 saods9/tksao/frame/000755 000765 000000 00000000000 13012655702 014600 5ustar00joyewheel000000 000000 saods9/tksao/list/000755 000765 000000 00000000000 13012655702 014461 5ustar00joyewheel000000 000000 saods9/tksao/magnifier/000755 000765 000000 00000000000 13012655702 015447 5ustar00joyewheel000000 000000 saods9/tksao/Makefile.in000755 000765 000000 00000044365 12755671064 015606 0ustar00joyewheel000000 000000 # Makefile.in -- # # This file is a Makefile for Sample TEA Extension. If it has the name # "Makefile.in" then it is a template for a Makefile; to generate the # actual Makefile, run "./configure", which is a configuration script # generated by the "autoconf" program (constructs like "@foo@" will get # replaced in the actual Makefile. # # Copyright (c) 1999 Scriptics Corporation. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. #======================================================================== # Add additional lines to handle any additional AC_SUBST cases that # have been added in a customized configure script. #======================================================================== #SAMPLE_NEW_VAR = @SAMPLE_NEW_VAR@ #======================================================================== # Nothing of the variables below this line should need to be changed. # Please check the TARGETS section below to make sure the make targets # are correct. #======================================================================== #======================================================================== # The names of the source files is defined in the configure script. # The object files are used for linking into the final library. # This will be used when a dist target is added to the Makefile. # It is not important to specify the directory, as long as it is the # $(srcdir) or in the generic, win or unix subdirectory. #======================================================================== PKG_SOURCES = @PKG_SOURCES@ PKG_OBJECTS = @PKG_OBJECTS@ PKG_STUB_SOURCES = @PKG_STUB_SOURCES@ PKG_STUB_OBJECTS = @PKG_STUB_OBJECTS@ #======================================================================== # PKG_TCL_SOURCES identifies Tcl runtime files that are associated with # this package that need to be installed, if any. #======================================================================== PKG_TCL_SOURCES = @PKG_TCL_SOURCES@ #======================================================================== # This is a list of public header files to be installed, if any. #======================================================================== PKG_HEADERS = @PKG_HEADERS@ #======================================================================== # "PKG_LIB_FILE" refers to the library (dynamic or static as per # configuration options) composed of the named objects. #======================================================================== PKG_LIB_FILE = @PKG_LIB_FILE@ PKG_STUB_LIB_FILE = @PKG_STUB_LIB_FILE@ lib_BINARIES = $(PKG_LIB_FILE) BINARIES = $(lib_BINARIES) SHELL = @SHELL@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ datarootdir = @datarootdir@ datadir = @datadir@ mandir = @mandir@ DESTDIR = PKG_DIR = $(PACKAGE_NAME)$(PACKAGE_VERSION) pkgdatadir = $(datadir)/$(PKG_DIR) pkglibdir = $(libdir)/$(PKG_DIR) pkgincludedir = $(includedir)/$(PKG_DIR) top_builddir = . INSTALL_OPTIONS = INSTALL = $(SHELL) $(srcdir)/tclconfig/install-sh -c ${INSTALL_OPTIONS} INSTALL_DATA_DIR = ${INSTALL} -d -m 755 INSTALL_PROGRAM = ${INSTALL} -m 555 INSTALL_DATA = ${INSTALL} -m 444 INSTALL_SCRIPT = ${INSTALL_PROGRAM} INSTALL_LIBRARY = ${INSTALL} -m 644 PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ CC = @CC@ CFLAGS_DEFAULT = @CFLAGS_DEFAULT@ CFLAGS_WARNING = @CFLAGS_WARNING@ EXEEXT = @EXEEXT@ LDFLAGS_DEFAULT = @LDFLAGS_DEFAULT@ MAKE_LIB = @MAKE_LIB@ MAKE_SHARED_LIB = @MAKE_SHARED_LIB@ MAKE_STATIC_LIB = @MAKE_STATIC_LIB@ MAKE_STUB_LIB = @MAKE_STUB_LIB@ OBJEXT = @OBJEXT@ RANLIB = @RANLIB@ RANLIB_STUB = @RANLIB_STUB@ SHLIB_CFLAGS = @SHLIB_CFLAGS@ SHLIB_LD = @SHLIB_LD@ SHLIB_LD_LIBS = @SHLIB_LD_LIBS@ STLIB_LD = @STLIB_LD@ #TCL_DEFS = @TCL_DEFS@ TCL_BIN_DIR = @TCL_BIN_DIR@ TCL_SRC_DIR = @TCL_SRC_DIR@ #TK_BIN_DIR = @TK_BIN_DIR@ #TK_SRC_DIR = @TK_SRC_DIR@ # Not used, but retained for reference of what libs Tcl required #TCL_LIBS = @TCL_LIBS@ #======================================================================== # TCLLIBPATH seeds the auto_path in Tcl's init.tcl so we can test our # package without installing. The other environment variables allow us # to test against an uninstalled Tcl. Add special env vars that you # require for testing here (like TCLX_LIBRARY). #======================================================================== EXTRA_PATH = $(top_builddir):$(TCL_BIN_DIR) #EXTRA_PATH = $(top_builddir):$(TCL_BIN_DIR):$(TK_BIN_DIR) TCLLIBPATH = $(top_builddir) TCLSH_ENV = TCL_LIBRARY=`@CYGPATH@ $(TCL_SRC_DIR)/library` PKG_ENV = @LD_LIBRARY_PATH_VAR@="$(EXTRA_PATH):$(@LD_LIBRARY_PATH_VAR@)" \ PATH="$(EXTRA_PATH):$(PATH)" \ TCLLIBPATH="$(TCLLIBPATH)" TCLSH_PROG = @TCLSH_PROG@ TCLSH = $(PKG_ENV) $(TCLSH_ENV) $(TCLSH_PROG) #WISH_ENV = TK_LIBRARY=`@CYGPATH@ $(TK_SRC_DIR)/library` #WISH_PROG = @WISH_PROG@ #WISH = $(PKG_ENV) $(TCLSH_ENV) $(WISH_ENV) $(WISH_PROG) SHARED_BUILD = @SHARED_BUILD@ #INCLUDES = @PKG_INCLUDES@ @TCL_INCLUDES@ INCLUDES = @PKG_INCLUDES@ @TCL_INCLUDES@ @TK_INCLUDES@ @TK_XINCLUDES@ PKG_CFLAGS = @PKG_CFLAGS@ # TCL_DEFS is not strictly need here, but if you remove it, then you # must make sure that configure.in checks for the necessary components # that your library may use. TCL_DEFS can actually be a problem if # you do not compile with a similar machine setup as the Tcl core was # compiled with. #DEFS = $(TCL_DEFS) @DEFS@ $(PKG_CFLAGS) DEFS = @DEFS@ $(PKG_CFLAGS) # Move pkgIndex.tcl to 'BINARIES' var if it is generated in the Makefile CONFIG_CLEAN_FILES = Makefile pkgIndex.tcl CLEANFILES = @CLEANFILES@ CPPFLAGS = @CPPFLAGS@ LIBS = @PKG_LIBS@ @LIBS@ AR = @AR@ CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) .SUFFIXES: .c .C .$(OBJEXT) #======================================================================== # Start of user-definable TARGETS section #======================================================================== #======================================================================== # TEA TARGETS. Please note that the "libraries:" target refers to platform # independent files, and the "binaries:" target includes executable programs and # platform-dependent libraries. Modify these targets so that they install # the various pieces of your package. The make and install rules # for the BINARIES that you specified above have already been done. #======================================================================== all: binaries libraries #doc #======================================================================== # The binaries target builds executable programs, Windows .dll's, unix # shared/static libraries, and any other platform-dependent files. # The list of targets to build for "binaries:" is specified at the top # of the Makefile, in the "BINARIES" variable. #======================================================================== binaries: $(BINARIES) libraries: parsers : cbparsers fitsyparsers frparsers magparser panparser cbparsers : cbparser cblutparser cbsaoparser fitsyparsers : fitsyparser nrrdparser enviparser frparsers : parser ciaoparser ds9parser prosparser saoparser tngparser xyparser contourparser cbparser : bison -d -p cb -o colorbar/parser.C colorbar/parser.Y flex -Pcb -ocolorbar/lex.C colorbar/lex.L cblutparser: bison -d -p rgb -o colorbar/lutparser.C colorbar/lutparser.Y flex -Prgb -ocolorbar/lutlex.C colorbar/lutlex.L cbsaoparser: bison -d -p li -o colorbar/saoparser.C colorbar/saoparser.Y flex -Pli -ocolorbar/saolex.C colorbar/saolex.L fitsyparser : bison -d -p ff -o fitsy++/parser.C fitsy++/parser.Y flex -Pff -ofitsy++/lex.C fitsy++/lex.L nrrdparser : bison -d -p nrrd -o fitsy++/nrrdparser.C fitsy++/nrrdparser.Y flex -Pnrrd -ofitsy++/nrrdlex.C fitsy++/nrrdlex.L enviparser : bison -d -p envi -o fitsy++/enviparser.C fitsy++/enviparser.Y flex -Penvi -ofitsy++/envilex.C fitsy++/envilex.L ciaoparser : bison -d -p ciao -o frame/ciaoparser.C frame/ciaoparser.Y flex -Pciao -oframe/ciaolex.C frame/ciaolex.L ds9parser : bison -d -p mk -o frame/ds9parser.C frame/ds9parser.Y flex -Pmk -oframe/ds9lex.C frame/ds9lex.L parser : bison -d -p fr -o frame/parser.C frame/parser.Y flex -Pfr -oframe/lex.C frame/lex.L prosparser : bison -d -p pros -o frame/prosparser.C frame/prosparser.Y flex -Ppros -oframe/proslex.C frame/proslex.L saoparser : bison -d -p sao -o frame/saoparser.C frame/saoparser.Y flex -Psao -oframe/saolex.C frame/saolex.L tngparser : bison -d -p tng -o frame/tngparser.C frame/tngparser.Y flex -Ptng -oframe/tnglex.C frame/tnglex.L xyparser : bison -d -p xy -o frame/xyparser.C frame/xyparser.Y flex -Pxy -oframe/xylex.C frame/xylex.L contourparser : bison -d -p ct -o frame/contourparser.C frame/contourparser.Y flex -Pct -oframe/contourlex.C frame/contourlex.L magparser : bison -d -p mg -o magnifier/parser.C magnifier/parser.Y flex -Pmg -omagnifier/lex.C magnifier/lex.L panparser : bison -d -p pn -o panner/parser.C panner/parser.Y flex -Ppn -opanner/lex.C panner/lex.L #======================================================================== # Your doc target should differentiate from doc builds (by the developer) # and doc installs (see install-doc), which just install the docs on the # end user machine when building from source. #======================================================================== doc: @echo "If you have documentation to create, place the commands to" @echo "build the docs in the 'doc:' target. For example:" @echo " xml2nroff sample.xml > sample.n" @echo " xml2html sample.xml > sample.html" install: all install-binaries install-libraries #install-doc install-binaries: binaries install-lib-binaries install-bin-binaries #======================================================================== # This rule installs platform-independent files, such as header files. # The list=...; for p in $$list handles the empty list case x-platform. #======================================================================== install-libraries: libraries @$(INSTALL_DATA_DIR) $(DESTDIR)$(includedir) @echo "Installing header files in $(DESTDIR)$(includedir)" @list='$(PKG_HEADERS)'; for i in $$list; do \ echo "Installing $(srcdir)/$$i" ; \ $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir) ; \ done; #======================================================================== # Install documentation. Unix manpages should go in the $(mandir) # directory. #======================================================================== install-doc: doc @$(INSTALL_DATA_DIR) $(DESTDIR)$(mandir)/mann @echo "Installing documentation in $(DESTDIR)$(mandir)" @list='$(srcdir)/doc/*.n'; for i in $$list; do \ echo "Installing $$i"; \ $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/mann ; \ done test: binaries libraries $(TCLSH) `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS) \ -load "package ifneeded ${PACKAGE_NAME} ${PACKAGE_VERSION} \ [list load `@CYGPATH@ $(PKG_LIB_FILE)` $(PACKAGE_NAME)]" shell: binaries libraries @$(TCLSH) $(SCRIPT) gdb: $(TCLSH_ENV) gdb $(TCLSH_PROG) $(SCRIPT) VALGRINDARGS = --tool=memcheck --num-callers=8 --leak-resolution=high \ --leak-check=yes --show-reachable=yes -v valgrind: binaries libraries $(TCLSH_ENV) valgrind $(VALGRINDARGS) $(TCLSH_PROG) \ `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS) valgrindshell: binaries libraries $(TCLSH_ENV) valgrind $(VALGRINDARGS) $(TCLSH_PROG) $(SCRIPT) depend: #======================================================================== # $(PKG_LIB_FILE) should be listed as part of the BINARIES variable # mentioned above. That will ensure that this target is built when you # run "make binaries". # # The $(PKG_OBJECTS) objects are created and linked into the final # library. In most cases these object files will correspond to the # source files above. #======================================================================== $(PKG_LIB_FILE): $(PKG_OBJECTS) -rm -f $(PKG_LIB_FILE) ${MAKE_LIB} $(RANLIB) $(PKG_LIB_FILE) $(PKG_STUB_LIB_FILE): $(PKG_STUB_OBJECTS) -rm -f $(PKG_STUB_LIB_FILE) ${MAKE_STUB_LIB} $(RANLIB_STUB) $(PKG_STUB_LIB_FILE) #======================================================================== # We need to enumerate the list of .c to .o lines here. # # In the following lines, $(srcdir) refers to the toplevel directory # containing your extension. If your sources are in a subdirectory, # you will have to modify the paths to reflect this: # # sample.$(OBJEXT): $(srcdir)/generic/sample.c # $(COMPILE) -c `@CYGPATH@ $(srcdir)/generic/sample.c` -o $@ # # Setting the VPATH variable to a list of paths will cause the makefile # to look into these paths when resolving .c to .obj dependencies. # As necessary, add $(srcdir):$(srcdir)/compat:.... #======================================================================== VPATH = $(srcdir):$(srcdir)/generic:$(srcdir)/unix:$(srcdir)/win:$(srcdir)/macosx .c.@OBJEXT@: $(COMPILE) -c `@CYGPATH@ $<` -o $@ .C.@OBJEXT@: $(COMPILE) -c `@CYGPATH@ $<` -o $@ #======================================================================== # Distribution creation # You may need to tweak this target to make it work correctly. #======================================================================== #COMPRESS = tar cvf $(PKG_DIR).tar $(PKG_DIR); compress $(PKG_DIR).tar COMPRESS = tar zcvf $(PKG_DIR).tar.gz $(PKG_DIR) DIST_ROOT = /tmp/dist DIST_DIR = $(DIST_ROOT)/$(PKG_DIR) dist-clean: rm -rf $(DIST_DIR) $(DIST_ROOT)/$(PKG_DIR).tar.* dist: dist-clean $(INSTALL_DATA_DIR) $(DIST_DIR) cp -p $(srcdir)/ChangeLog $(srcdir)/README* $(srcdir)/license* \ $(srcdir)/aclocal.m4 $(srcdir)/configure $(srcdir)/*.in \ $(DIST_DIR)/ chmod 664 $(DIST_DIR)/Makefile.in $(DIST_DIR)/aclocal.m4 chmod 775 $(DIST_DIR)/configure $(DIST_DIR)/configure.in for i in $(srcdir)/*.[ch]; do \ if [ -f $$i ]; then \ cp -p $$i $(DIST_DIR)/ ; \ fi; \ done; $(INSTALL_DATA_DIR) $(DIST_DIR)/tclconfig cp $(srcdir)/tclconfig/install-sh $(srcdir)/tclconfig/tcl.m4 \ $(DIST_DIR)/tclconfig/ chmod 664 $(DIST_DIR)/tclconfig/tcl.m4 chmod +x $(DIST_DIR)/tclconfig/install-sh list='demos doc generic library mac tests unix win'; \ for p in $$list; do \ if test -d $(srcdir)/$$p ; then \ $(INSTALL_DATA_DIR) $(DIST_DIR)/$$p; \ cp -p $(srcdir)/$$p/*.* $(DIST_DIR)/$$p/; \ fi; \ done (cd $(DIST_ROOT); $(COMPRESS);) #======================================================================== # End of user-definable section #======================================================================== #======================================================================== # Don't modify the file to clean here. Instead, set the "CLEANFILES" # variable in configure.in #======================================================================== clean: -test -z "$(BINARIES)" || rm -f $(BINARIES) -rm -f $(PKG_OBJECTS) *.$(OBJEXT) core *.core -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean: clean -rm -f *.tab.c -rm -f $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log config.status #======================================================================== # Install binary object libraries. On Windows this includes both .dll and # .lib files. Because the .lib files are not explicitly listed anywhere, # we need to deduce their existence from the .dll file of the same name. # Library files go into the lib directory. # In addition, this will generate the pkgIndex.tcl # file in the install location (assuming it can find a usable tclsh shell) # # You should not have to modify this target. #======================================================================== install-lib-binaries: binaries @$(INSTALL_DATA_DIR) $(DESTDIR)$(pkglibdir) @list='$(lib_BINARIES)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_LIBRARY) $$p $(DESTDIR)$(pkglibdir)/$$p"; \ $(INSTALL_LIBRARY) $$p $(DESTDIR)$(pkglibdir)/$$p; \ stub=`echo $$p|sed -e "s/.*\(stub\).*/\1/"`; \ if test "x$$stub" = "xstub"; then \ echo " $(RANLIB_STUB) $(DESTDIR)$(pkglibdir)/$$p"; \ $(RANLIB_STUB) $(DESTDIR)$(pkglibdir)/$$p; \ else \ echo " $(RANLIB) $(DESTDIR)$(pkglibdir)/$$p"; \ $(RANLIB) $(DESTDIR)$(pkglibdir)/$$p; \ fi; \ ext=`echo $$p|sed -e "s/.*\.//"`; \ if test "x$$ext" = "xdll"; then \ lib=`basename $$p|sed -e 's/.[^.]*$$//'`.lib; \ if test -f $$lib; then \ echo " $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib"; \ $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib; \ fi; \ fi; \ fi; \ done @list='$(PKG_TCL_SOURCES)'; for p in $$list; do \ if test -f $(srcdir)/$$p; then \ destp=`basename $$p`; \ echo " Install $$destp $(DESTDIR)$(pkglibdir)/$$destp"; \ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkglibdir)/$$destp; \ fi; \ done @if test "x$(SHARED_BUILD)" = "x1"; then \ echo " Install pkgIndex.tcl $(DESTDIR)$(pkglibdir)"; \ $(INSTALL_DATA) pkgIndex.tcl $(DESTDIR)$(pkglibdir); \ fi #======================================================================== # Install binary executables (e.g. .exe files and dependent .dll files) # This is for files that must go in the bin directory (located next to # wish and tclsh), like dependent .dll files on Windows. # # You should not have to modify this target, except to define bin_BINARIES # above if necessary. #======================================================================== install-bin-binaries: binaries @$(INSTALL_DATA_DIR) $(DESTDIR)$(bindir) @list='$(bin_BINARIES)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \ fi; \ done Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status uninstall-binaries: list='$(lib_BINARIES)'; for p in $$list; do \ rm -f $(DESTDIR)$(pkglibdir)/$$p; \ done list='$(PKG_TCL_SOURCES)'; for p in $$list; do \ p=`basename $$p`; \ rm -f $(DESTDIR)$(pkglibdir)/$$p; \ done list='$(bin_BINARIES)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/$$p; \ done .PHONY: all binaries clean depend distclean doc install libraries test # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: saods9/tksao/panner/000755 000765 000000 00000000000 13012655702 014771 5ustar00joyewheel000000 000000 saods9/tksao/pkgIndex.tcl.in000755 000765 000000 00000000220 12540607755 016377 0ustar00joyewheel000000 000000 # # Tcl package index file # package ifneeded @PACKAGE_NAME@ @PACKAGE_VERSION@ \ [list load [file join $dir @PKG_LIB_FILE@] @PACKAGE_NAME@] saods9/tksao/saotk.C000644 000765 000000 00000006014 12705446336 014745 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include extern int FrameTrueColor8_Init(Tcl_Interp*); extern int FrameTrueColor16_Init(Tcl_Interp*); extern int FrameTrueColor24_Init(Tcl_Interp*); extern int FrameRGBTrueColor8_Init(Tcl_Interp*); extern int FrameRGBTrueColor16_Init(Tcl_Interp*); extern int FrameRGBTrueColor24_Init(Tcl_Interp*); extern int Frame3dTrueColor8_Init(Tcl_Interp*); extern int Frame3dTrueColor16_Init(Tcl_Interp*); extern int Frame3dTrueColor24_Init(Tcl_Interp*); extern int ColorbarTrueColor8_Init(Tcl_Interp*); extern int ColorbarTrueColor16_Init(Tcl_Interp*); extern int ColorbarTrueColor24_Init(Tcl_Interp*); extern int ColorbarRGBTrueColor8_Init(Tcl_Interp*); extern int ColorbarRGBTrueColor16_Init(Tcl_Interp*); extern int ColorbarRGBTrueColor24_Init(Tcl_Interp*); extern int PannerTrueColor_Init(Tcl_Interp*); extern int MagnifierTrueColor_Init(Tcl_Interp*); extern "C" { int Tksao_Init(Tcl_Interp* interp); int SaotkCmd(ClientData data, Tcl_Interp *interp, int argc, const char* argv[]); } int Tksao_Init(Tcl_Interp* interp) { if (Tcl_InitStubs(interp, TCL_PATCH_LEVEL, 0) == NULL) return TCL_ERROR; if (Tk_InitStubs(interp, TK_PATCH_LEVEL, 0) == NULL) return TCL_ERROR; if (FrameTrueColor8_Init(interp) == TCL_ERROR) return TCL_ERROR; if (FrameTrueColor16_Init(interp) == TCL_ERROR) return TCL_ERROR; if (FrameTrueColor24_Init(interp) == TCL_ERROR) return TCL_ERROR; if (FrameRGBTrueColor8_Init(interp) == TCL_ERROR) return TCL_ERROR; if (FrameRGBTrueColor16_Init(interp) == TCL_ERROR) return TCL_ERROR; if (FrameRGBTrueColor24_Init(interp) == TCL_ERROR) return TCL_ERROR; if (Frame3dTrueColor8_Init(interp) == TCL_ERROR) return TCL_ERROR; if (Frame3dTrueColor16_Init(interp) == TCL_ERROR) return TCL_ERROR; if (Frame3dTrueColor24_Init(interp) == TCL_ERROR) return TCL_ERROR; if (ColorbarTrueColor8_Init(interp) == TCL_ERROR) return TCL_ERROR; if (ColorbarTrueColor16_Init(interp) == TCL_ERROR) return TCL_ERROR; if (ColorbarTrueColor24_Init(interp) == TCL_ERROR) return TCL_ERROR; if (PannerTrueColor_Init(interp) == TCL_ERROR) return TCL_ERROR; if (MagnifierTrueColor_Init(interp) == TCL_ERROR) return TCL_ERROR; if (ColorbarRGBTrueColor8_Init(interp) == TCL_ERROR) return TCL_ERROR; if (ColorbarRGBTrueColor16_Init(interp) == TCL_ERROR) return TCL_ERROR; if (ColorbarRGBTrueColor24_Init(interp) == TCL_ERROR) return TCL_ERROR; // dummy command // needed for auto_load, since all of our real work are canvas widgets, // tcl commands Tcl_CreateCommand(interp, "saotk", (Tcl_CmdProc* )SaotkCmd, (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL); if (Tcl_PkgProvide(interp, PACKAGE_NAME, PACKAGE_VERSION) != TCL_OK) return TCL_ERROR; return TCL_OK; } int SaotkCmd(ClientData data, Tcl_Interp *interp, int argc, const char* argv[]) { return TCL_OK; } saods9/tksao/tclconfig/000755 000765 000000 00000000000 13012655703 015457 5ustar00joyewheel000000 000000 saods9/tksao/util/000755 000765 000000 00000000000 13012655703 014464 5ustar00joyewheel000000 000000 saods9/tksao/vector/000755 000765 000000 00000000000 13012655703 015011 5ustar00joyewheel000000 000000 saods9/tksao/widget/000755 000765 000000 00000000000 13012655703 014772 5ustar00joyewheel000000 000000 saods9/tksao/widget/truecolor16.C000644 000765 000000 00000007004 12705446252 017271 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "truecolor16.h" #include "util.h" TrueColor16::TrueColor16(Visual* visual) { #if !(_WIN32) rx_ = visual->red_mask; gx_ = visual->green_mask; bx_ = visual->blue_mask; #endif #if _WIN32 // windows masks are plain wrong rx_ = 0x7C00; gx_ = 0x03E0; bx_ = 0x001F; #endif rm_ = decodeMask((unsigned short)rx_, &rs_); gm_ = decodeMask((unsigned short)gx_, &gs_); bm_ = decodeMask((unsigned short)bx_, &bs_); } unsigned short TrueColor16::decodeMask(unsigned short mask, int* s) { // first calc ffs for mask unsigned short m1 = mask; int m1s; for (m1s=0; m1s<16; m1s++) { if (m1 & 0x1) break; m1 >>= 1; } // then shift mask to mask a char for (int i=0; i<16; i++) { if (mask & 0x8000) break; mask <<= 1; } mask >>= 8; // now calc ffs for new mask unsigned short m2 = mask; int m2s; for (m2s=0; m2s<16; m2s++) { if (m2 & 0x1) break; m2 >>= 1; } *s = m1s-m2s; return mask; } void TrueColor16::encodeTrueColor(XColor* src, char* dest, XImage* ximage) { if (!ximage) return; int msb = ximage->byte_order; unsigned short r = (unsigned char)src->red; unsigned short g = (unsigned char)src->green; unsigned short b = (unsigned char)src->blue; unsigned short v = 0; v |= rs_>0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); v |= gs_>0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); v |= bs_>0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); if ((!msb && lsb()) || (msb && !lsb())) memcpy(dest, &v, 2); else { unsigned char* rr = (unsigned char*)(&v); *(dest) = *(rr+1); *(dest+1) = *(rr); } } void TrueColor16::decodeTrueColor(char* src, XColor* dest, XImage* ximage) { if (!ximage) return; int msb = ximage->byte_order; unsigned short v = 0; if ((!msb && lsb()) || (msb && !lsb())) memcpy(dest, &v, 2); else { unsigned char* rr = (unsigned char*)(&v); *(rr+1) = *(src+0); *(rr+0) = *(src+1); } dest->red = (unsigned short)((v & rx_) >> rs_); dest->green = (unsigned short)((v & gx_) >> gs_); dest->blue = (unsigned short)((v & bx_) >> bs_); } void TrueColor16::encodeTrueColor(unsigned char* src, XImage* ximage) { int& width = ximage->width; int& height = ximage->height; char* data = ximage->data; int msb = ximage->byte_order; const unsigned char* ptr = src; if ((!msb && lsb()) || (msb && !lsb())) { for (int jj=0; jjbytes_per_line; // may be padded at the end for (int ii=0; ii0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); v |= gs_>0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); v |= bs_>0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); memcpy(dest, &v, 2); } } } else { for (int jj=0; jjbytes_per_line; for (int ii=0; ii0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); v |= gs_>0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); v |= bs_>0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); unsigned char* rr = (unsigned char*)(&v); *(dest) = *(rr+1); *(dest+1) = *(rr); } } } } saods9/tksao/widget/truecolor16.h000644 000765 000000 00000001441 12705446252 017335 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __truecolor16_h__ #define __truecolor16_h__ #include #include #include #include using namespace std; #include class TrueColor16 { protected: unsigned long rx_; unsigned long gx_; unsigned long bx_; unsigned short rm_; unsigned short gm_; unsigned short bm_; int rs_; int gs_; int bs_; private: unsigned short decodeMask(unsigned short, int*); protected: void decodeTrueColor(char*, XColor*, XImage*); void encodeTrueColor(XColor*, char*, XImage*); void encodeTrueColor(unsigned char*, XImage*); public: TrueColor16(Visual*); }; #endif saods9/tksao/widget/truecolor24.C000644 000765 000000 00000014433 12705446252 017274 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "truecolor24.h" #include "util.h" TrueColor24::TrueColor24(Visual* visual) { #if !(_WIN32 || MAC_OSX_TK) ax_ = 0; rx_ = visual->red_mask; gx_ = visual->green_mask; bx_ = visual->blue_mask; #endif #if MAC_OSX_TK ax_ = 0xFF000000; rx_ = 0x00FF0000; gx_ = 0x0000FF00; bx_ = 0x000000FF; #endif #if _WIN32 // windows masks are plain wrong ax_ = 0; rx_ = 0x00FF0000; gx_ = 0x0000FF00; bx_ = 0x000000FF; #endif rs_ = decodeMask((unsigned long)rx_); gs_ = decodeMask((unsigned long)gx_); bs_ = decodeMask((unsigned long)bx_); as_ = decodeMask((unsigned long)ax_); } int TrueColor24::decodeMask(unsigned long mask) { switch (mask) { case 0: return 0; case 0xff: return 0; case 0xff00: return 8; case 0xff0000: return 16; case 0xff000000: return 24; } return 0; } void TrueColor24::encodeTrueColor(XColor* src, char* dest, XImage* ximage) { if (!ximage) return; switch (ximage->bits_per_pixel) { case 24: encodeTrueColor24(src, dest, ximage); break; case 32: encodeTrueColor32(src, dest, ximage); break; } } void TrueColor24::decodeTrueColor(char* src, XColor* dest, XImage* ximage) { if (!ximage) return; switch (ximage->bits_per_pixel) { case 24: decodeTrueColor24(src, dest, ximage); break; case 32: decodeTrueColor32(src, dest, ximage); break; } } void TrueColor24::encodeTrueColor24(XColor* src, char* dest, XImage* ximage) { int msb = ximage->byte_order; unsigned int r = (unsigned char)src->red; unsigned int g = (unsigned char)src->green; unsigned int b = (unsigned char)src->blue; unsigned int v = 0; v |= r << rs_; v |= g << gs_; v |= b << bs_; if ((!msb && lsb()) || (msb && !lsb())) memcpy(dest, &v, 3); else { unsigned char* rr = (unsigned char*)(&v); *(dest+0) = *(rr+3); *(dest+1) = *(rr+2); *(dest+2) = *(rr+1); } } void TrueColor24::decodeTrueColor24(char* src, XColor* dest, XImage* ximage) { int msb = ximage->byte_order; unsigned int v = 0; if ((!msb && lsb()) || (msb && !lsb())) memcpy(&v, src, 3); else { unsigned char* rr = (unsigned char*)(&v); *(rr+3) = *(src+0); *(rr+2) = *(src+1); *(rr+1) = *(src+2); } dest->red = (unsigned short)((v & rx_) >> rs_); dest->green = (unsigned short)((v & gx_) >> gs_); dest->blue = (unsigned short)((v & bx_) >> bs_); } void TrueColor24::encodeTrueColor32(XColor* src, char* dest, XImage* ximage) { int msb = ximage->byte_order; unsigned int r = (unsigned char)src->red; unsigned int g = (unsigned char)src->green; unsigned int b = (unsigned char)src->blue; unsigned int v = 0; #ifdef MAC_OSX_TK unsigned int a = 0xff; v |= a << as_; #endif v |= r << rs_; v |= g << gs_; v |= b << bs_; if ((!msb && lsb()) || (msb && !lsb())) memcpy(dest, &v, 4); else { unsigned char* rr = (unsigned char*)(&v); *(dest+0) = *(rr+3); *(dest+1) = *(rr+2); *(dest+2) = *(rr+1); *(dest+3) = *(rr+0); } } void TrueColor24::decodeTrueColor32(char* src, XColor* dest, XImage* ximage) { int msb = ximage->byte_order; unsigned int v = 0; if ((!msb && lsb()) || (msb && !lsb())) memcpy(dest, &v, 4); else { unsigned char* rr = (unsigned char*)(&v); *(rr+3) = *(src); *(rr+2) = *(src+1); *(rr+1) = *(src+2); *(rr+0) = *(src+3); } dest->red = (unsigned short)((v & rx_) >> rs_); dest->green = (unsigned short)((v & gx_) >> gs_); dest->blue = (unsigned short)((v & bx_) >> bs_); } void TrueColor24::encodeTrueColor(unsigned char* src, XImage* ximage) { if (!ximage) return; switch (ximage->bits_per_pixel) { case 24: encodeTrueColor24(src, ximage); break; case 32: encodeTrueColor32(src, ximage); break; } } void TrueColor24::encodeTrueColor24(unsigned char* src, XImage* ximage) { int& width = ximage->width; int& height = ximage->height; char* data = ximage->data; int bytesPerPixel = ximage->bits_per_pixel/8; int msb = ximage->byte_order; const unsigned char* ptr = src; if ((!msb && lsb()) || (msb && !lsb())) { for (int jj=0; jjbytes_per_line; for (int ii=0; iibytes_per_line; for (int ii=0; iiwidth; int& height = ximage->height; char* data = ximage->data; int bytesPerPixel = ximage->bits_per_pixel/8; int msb = ximage->byte_order; const unsigned char* ptr = src; if ((!msb && lsb()) || (msb && !lsb())) { for (int jj=0; jjbytes_per_line; for (int ii=0; iibytes_per_line; for (int ii=0; ii #include #include #include using namespace std; #include class TrueColor24 { protected: unsigned long rx_; unsigned long gx_; unsigned long bx_; unsigned long ax_; int rs_; int gs_; int bs_; int as_; private: int decodeMask(unsigned long); void decodeTrueColor24(char*, XColor*, XImage*); void decodeTrueColor32(char*, XColor*, XImage*); void encodeTrueColor24(XColor*, char*, XImage*); void encodeTrueColor24(unsigned char*, XImage*); void encodeTrueColor32(XColor*, char*, XImage*); void encodeTrueColor32(unsigned char*, XImage*); protected: void decodeTrueColor(char*, XColor*, XImage*); void encodeTrueColor(XColor*, char*, XImage*); void encodeTrueColor(unsigned char*, XImage*); public: TrueColor24(Visual*); }; #endif saods9/tksao/widget/truecolor8.C000644 000765 000000 00000003232 12705446252 017211 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "truecolor8.h" #include "util.h" TrueColor8::TrueColor8(Visual* visual) { #if !(_WIN32) rx_ = visual->red_mask; gx_ = visual->green_mask; bx_ = visual->blue_mask; #endif #if _WIN32 // windows masks are plain wrong rx_ = 0xE0; gx_ = 0x18; bx_ = 0x07; #endif rm_ = decodeMask((unsigned char)rx_, &rs_); gm_ = decodeMask((unsigned char)rx_, &gs_); bm_ = decodeMask((unsigned char)rx_, &bs_); } unsigned char TrueColor8::decodeMask(unsigned char mask, int* s) { *s=0; for (int i=0; i<8; i++, (*s)++) { if (mask & 0x80) break; mask <<= 1; } return mask; } void TrueColor8::encodeTrueColor(XColor* src, char* dest, XImage* ximage) { *dest = ((((unsigned char)src->blue) & bm_) >> bs_) | ((((unsigned char)src->green) & gm_) >> gs_) | ((((unsigned char)src->red) & rm_) >> rs_); } void TrueColor8::decodeTrueColor(char* src, XColor* dest, XImage* ximage) { dest->red = (unsigned short)((*src & rx_) >> rs_); dest->green = (unsigned short)((*src & gx_) >> gs_); dest->blue = (unsigned short)((*src & bx_) >> bs_); } void TrueColor8::encodeTrueColor(unsigned char* src, XImage* ximage) { int& width = ximage->width; int& height = ximage->height; char* data = ximage->data; const unsigned char* ptr = src; for (int j=0; jbytes_per_line; for (int i=0; i> rs_) | ((ptr[1] & gm_) >> gs_) | ((ptr[2] & bm_) >> bs_); } } saods9/tksao/widget/truecolor8.h000644 000765 000000 00000001430 12705446252 017254 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __truecolor8_h__ #define __truecolor8_h__ #include #include #include #include using namespace std; #include class TrueColor8 { protected: unsigned long rx_; unsigned long gx_; unsigned long bx_; unsigned char rm_; unsigned char gm_; unsigned char bm_; int rs_; int gs_; int bs_; private: unsigned char decodeMask(unsigned char, int*); protected: void decodeTrueColor(char*, XColor*, XImage*); void encodeTrueColor(XColor*, char*, XImage*); void encodeTrueColor(unsigned char*, XImage*); public: TrueColor8(Visual*); }; #endif saods9/tksao/widget/widget.C000644 000765 000000 00000046067 12766541474 016414 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "widget.h" #include "util.h" // Tk Canvas Widget Functions Declaration int WidgetConfigProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[], int flags) { return WIDGET(item).configure(argc, (const char**)argv, flags); } int WidgetCoordProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[]) { return WIDGET(item).coordProc(argc, (char**)argv); } void WidgetDeleteProc(Tk_Canvas canvas, Tk_Item* item, Display* display) { delete ((WidgetOptions*)item)->widget; } void WidgetDisplayProc(Tk_Canvas canvas, Tk_Item* item, Display* display, Drawable draw, int x, int y, int width, int height) { WIDGET(item).displayProc(draw, x, y, width, height); } double WidgetPointProc(Tk_Canvas canvas, Tk_Item* item, double* point) { return WIDGET(item).pointProc(point); } int WidgetAreaProc(Tk_Canvas canvas, Tk_Item* item, double* bbox) { return WIDGET(item).areaProc(bbox); } int WidgetPostscriptProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int prepass) { return WIDGET(item).postscriptProc(prepass); } void WidgetScaleProc(Tk_Canvas canvas, Tk_Item* item, double Ox, double Oy , double Sx, double Sy) { WIDGET(item).scaleProc(Ox, Oy, Sx, Sy); } void WidgetTranslateProc(Tk_Canvas canvas, Tk_Item* item, double x, double y) { WIDGET(item).translateProc(x, y); } int WidgetIndexProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, char indexString, int* indexPtr) { WIDGET(item).indexProc(indexString, indexPtr); return 1; } void WidgetICursorProc(Tk_Canvas canvas, Tk_Item* item, int index) { WIDGET(item).icursorProc(index); } int WidgetSelectionProc(Tk_Canvas canvas, Tk_Item* item, int offset, char* buffer, int maxBytes) { WIDGET(item).selectionProc(offset, buffer, maxBytes); return 1; } void WidgetInsertProc(Tk_Canvas canvas, Tk_Item* item, int index, char* string) { WIDGET(item).insertProc(index, string); } void WidgetDCharsProc(Tk_Canvas canvas, Tk_Item* item, int first, int last) { WIDGET(item).dcharsProc(first, last); } int WidgetParse(ClientData widget, Tcl_Interp* interp, int argc, const char** argv) { int result; Tcl_Preserve(widget); if (argc >= 2 && !strncmp(argv[1],"config",6)) result = ((Widget*)widget)->configCmd(argc-2, argv+2); else { istringstream istr(ios::in|ios::out); ostream ostr(istr.rdbuf()); for (int i=1; iparse(istr); } Tcl_Release(widget); return result; } // Member Functions Widget::Widget(Tcl_Interp* interp_, Tk_Canvas canvas_, Tk_Item* item) : interp(interp_), canvas(canvas_) { // initialize item ptr to this. This is the method the canvas widget procs // know how to call member functions. ((WidgetOptions*)item)->widget = this; // init members options = (WidgetOptions*)item; configSpecs = NULL; tkwin = Tk_CanvasTkwin(canvas); display = Tk_Display(tkwin); screenNumber = Tk_ScreenNumber(tkwin); visual = Tk_Visual(tkwin); depth = Tk_Depth(tkwin); pixmap = 0; widgetGC = NULL; visible = True; originX = 0; originY = 0; // this is needed because of a problem with Tk_ConfigureWidget options->cmdName = NULL; options->helvetica = NULL; options->courier = NULL; options->times = NULL; cmd = NULL; result = TCL_OK; // postscript psLevel = 2; psResolution = 300; psColorSpace = RGB; } Widget::~Widget() { // free the options Tk_FreeOptions(configSpecs, (char*)this->options, display, 0); // clean up tcl command if (cmd) { Tcl_DeleteCommand(interp, cmd); delete [] cmd; } // clean up pixmap resources if (pixmap) Tk_FreePixmap(display, pixmap); if (widgetGC) XFreeGC(display, widgetGC); } void Widget::error(const char* m) { Tcl_AppendResult(interp, m, NULL); result = TCL_ERROR; } void Widget::msg(const char* m) { Tcl_AppendResult(interp, m, NULL); } int Widget::configure(int argc, const char** argv, int flags) { if (Tk_ConfigureWidget(interp, tkwin, configSpecs, argc, argv, (char*)this->options, flags) != TCL_OK) return TCL_ERROR; if (flags != TK_CONFIG_ARGV_ONLY) { // create command createCommand(); updateBBox(); invalidPixmap(); } else { // configure command if (configSpecs[CONFIGCOMMAND].specFlags & TK_CONFIG_OPTION_SPECIFIED) createCommand(); if ((configSpecs[CONFIGX].specFlags & TK_CONFIG_OPTION_SPECIFIED) || (configSpecs[CONFIGY].specFlags & TK_CONFIG_OPTION_SPECIFIED) || (configSpecs[CONFIGWIDTH].specFlags & TK_CONFIG_OPTION_SPECIFIED) || (configSpecs[CONFIGHEIGHT].specFlags & TK_CONFIG_OPTION_SPECIFIED) || (configSpecs[CONFIGANCHOR].specFlags & TK_CONFIG_OPTION_SPECIFIED)) updateBBox(); if ((configSpecs[CONFIGWIDTH].specFlags & TK_CONFIG_OPTION_SPECIFIED) || (configSpecs[CONFIGHEIGHT].specFlags & TK_CONFIG_OPTION_SPECIFIED)) invalidPixmap(); if ((configSpecs[CONFIGX].specFlags & TK_CONFIG_OPTION_SPECIFIED) || (configSpecs[CONFIGY].specFlags & TK_CONFIG_OPTION_SPECIFIED) || (configSpecs[CONFIGWIDTH].specFlags & TK_CONFIG_OPTION_SPECIFIED) || (configSpecs[CONFIGHEIGHT].specFlags & TK_CONFIG_OPTION_SPECIFIED) || (configSpecs[CONFIGANCHOR].specFlags & TK_CONFIG_OPTION_SPECIFIED)) redraw(); } return TCL_OK; } // Required Canvas Functions int Widget::coordProc(int argc, char** argv) { char xStr[TCL_DOUBLE_SPACE], yStr[TCL_DOUBLE_SPACE]; switch (argc) { // print the current values case 0: Tcl_PrintDouble(interp, options->x, xStr); Tcl_PrintDouble(interp, options->y, yStr); Tcl_AppendResult(interp, xStr, " ", yStr, NULL); return TCL_OK; // set current x&y to new values case 2: { double x0, y0; if ((Tk_CanvasGetCoord(interp, canvas, argv[0], &x0) != TCL_OK) || (Tk_CanvasGetCoord(interp, canvas, argv[1], &y0) != TCL_OK)) return TCL_ERROR; options->x = (int)x0; options->y = (int)y0; updateBBox(); return TCL_OK; } // else, error message default: Tcl_AppendResult(interp, "wrong # coordinates: expected 0 or 2", NULL); return TCL_ERROR; } } // Widget Display Procedure. It takes the contents of the pixmap and // after clipping, copies it into the drawable. void Widget::displayProc(Drawable draw, int clipX, int clipY, int clipWidth, int clipHeight) { if (visible == False) return; // create bbox BBox bb(clipX, clipY, clipX+clipWidth, clipY+clipHeight); // update the pixmap from ximage/graphics if (updatePixmap(bb) != TCL_OK) return; // something is wrong, bail out // define pixmap clip region // NOTE: it appears that the canvas coord system is 1 to n, width/height = n // with the original of value 1,1 located at upper left corner int pmX, pmY, pmWidth, pmHeight; if (clipX > options->item.x1) { pmX = clipX - options->item.x1; pmWidth = options->item.x2 - clipX; } else { pmX = 0; if ((clipX + clipWidth) < options->item.x2) pmWidth = clipX + clipWidth - options->item.x1; else pmWidth = options->item.x2 - options->item.x1; } if (clipY > options->item.y1) { pmY = clipY - options->item.y1; pmHeight = options->item.y2 - clipY; } else { pmY = 0; if ((clipY + clipHeight) < options->item.y2) pmHeight = clipY + clipHeight - options->item.y1; else pmHeight = options->item.y2 - options->item.y1; } // convert to canvas coords short drawX, drawY; Tk_CanvasDrawableCoords(canvas, (double)(options->item.x1 + pmX), (double)(options->item.y1 + pmY), &drawX, &drawY); // just in case if (!widgetGC) widgetGC = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); // set the clip region and copy the pixmap into the drawable XSetClipOrigin(display, widgetGC, drawX - pmX, drawY - pmY); XCopyArea(display, pixmap, draw, widgetGC, pmX, pmY, (unsigned int) pmWidth, (unsigned int) pmHeight, drawX, drawY); } double Widget::pointProc(double* point) { double xdiff, ydiff; if (point[0] < options->item.x1) xdiff = options->item.x1 - point[0]; else if (point[0] > options->item.x2) xdiff = point[0] - options->item.x2; else xdiff = 0; if (point[1] < options->item.y1) ydiff = options->item.y1 - point[1]; else if (point[1] > options->item.y2) ydiff = point[1] - options->item.y2; else ydiff = 0; return hypot(xdiff, ydiff); } int Widget::areaProc(double* bbox) { if ((bbox[2] <= options->item.x1) || (bbox[0] >= options->item.x2) || (bbox[3] <= options->item.y1) || (bbox[1] >= options->item.y2)) return -1; // item is outside bbox if ((bbox[0] <= options->item.x1) && (bbox[1] <= options->item.y1) && (bbox[2] >= options->item.x2) && (bbox[3] >= options->item.y2)) return 1; // item is inside bbox return 0; // item overlaps bbox } int Widget::postscriptProc(int prepass) { return TCL_OK; } void Widget::scaleProc(double Ox, double Oy, double Sx, double Sy) { // translate to (Ox,Oy), scale by (Sx,Sy), translate back from (Ox,Oy) options->x = (int)(Ox + (Sx * (options->x - Ox))); options->y = (int)(Oy + (Sy * (options->y - Oy))); options->width = (int)(options->width * Sx); options->height = (int)(options->height * Sy); updateBBox(); invalidPixmap(); // width and height have changed } void Widget::translateProc(double deltaX, double deltaY) { options->x += (int)deltaX; options->y += (int)deltaY; updateBBox(); } // Subcommand Functions int Widget::configCmd(int argc, const char** argv) { switch (argc) { case 0: return Tk_ConfigureInfo(interp, tkwin, configSpecs, (char*)this->options, NULL, 0); case 1: return Tk_ConfigureInfo(interp, tkwin, configSpecs, (char*)this->options, argv[0],0); default: return configure(argc, argv, TK_CONFIG_ARGV_ONLY); } } void Widget::getHeightCmd() { ostringstream str; str << options->height << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Widget::getWidthCmd() { ostringstream str; str << options->width << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Widget::hideCmd() { visible = False; redraw(); } void Widget::queryCursorCmd() { Window root, child; int rootx,rooty,winx,winy; unsigned int msk; XQueryPointer(display,Tk_WindowId(tkwin),&root,&child, &rootx,&rooty,&winx,&winy,&msk); #ifdef MAC_OSX_TK // XQueryPointer: Only a partial implementation // only rootx,rooty are valid int xx,yy; Tk_GetRootCoords(tkwin,&xx,&yy); winx = rootx-xx; winy = rooty-yy; #endif #ifdef _WIN32 winx = rootx; winy = rooty; #endif ostringstream str; str << winx << ' ' << winy << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Widget::resetCmd() { reset(); invalidPixmap(); redraw(); } void Widget::showCmd() { visible = True; redraw(); } // Private Member Functions void Widget::createCommand() { if (cmd) { Tcl_DeleteCommand(interp, cmd); if (cmd) delete [] cmd; } cmd = new char[strlen(options->cmdName)+1]; strcpy(cmd, options->cmdName); Tcl_CreateCommand(interp, cmd, WidgetParse, (ClientData)this, NULL); } int Widget::checkArgs(int should, int argc, char** argv) { // if should is negative, don't check if (should >= 0) { if (should != argc) { ostringstream str; str << should << '\0'; Tcl_AppendResult(interp, "wrong # args: requires ", str.str().c_str(), " args.", NULL); return TCL_ERROR; } else return TCL_OK; } return TCL_OK; } double Widget::getDisplayRatio() { #ifdef MAC_OSX_TK return 1.416; #else return 25.4/72 * DisplayWidth(display, screenNumber) / DisplayWidthMM(display, screenNumber); #endif } void Widget::invalidPixmap() { if (pixmap) Tk_FreePixmap(display, pixmap); pixmap = 0; } void Widget::redraw() { Tk_CanvasEventuallyRedraw(canvas, options->item.x1, options->item.y1, options->item.x2, options->item.y2); } void Widget::redraw(BBox bb) { // bb in canvas coords // we need to expand by 1, i don't know why Tk_CanvasEventuallyRedraw(canvas, (int)bb.ll[0], (int)bb.ll[1], (int)bb.ur[0]+1, (int)bb.ur[1]+1); } void Widget::redrawNow() { Tk_CanvasEventuallyRedraw(canvas, options->item.x1, options->item.y1, options->item.x2, options->item.y2); Tcl_DoOneEvent(TCL_IDLE_EVENTS); } void Widget::redrawNow(BBox bb) { // bb in canvas coords // we need to expand by 1, i don't know why Tk_CanvasEventuallyRedraw(canvas, (int)bb.ll[0], (int)bb.ll[1], (int)bb.ur[0]+1, (int)bb.ur[1]+1); Tcl_DoOneEvent(TCL_IDLE_EVENTS); } void Widget::forceUpdate() { Tcl_DoOneEvent(TCL_IDLE_EVENTS); } // Update Bounding Box. For image at (n,n) with size (m,m), // bbox is defined from (n,n) to (n+m,n+m) void Widget::updateBBox() { originX = options->x; originY = options->y; int& ww = options->width; int& hh = options->height; // Modify position point using anchor information. switch (options->anchor) { case TK_ANCHOR_N: originX -= ww/2; break; case TK_ANCHOR_NE: originX -= ww; break; case TK_ANCHOR_E: originX -= ww; originY -= hh/2; break; case TK_ANCHOR_SE: originX -= ww; originY -= hh; break; case TK_ANCHOR_S: originX -= ww/2; originY -= hh; break; case TK_ANCHOR_SW: originY -= hh; break; case TK_ANCHOR_W: originY -= hh/2; break; case TK_ANCHOR_NW: break; case TK_ANCHOR_CENTER: originX -= ww/2; originY -= hh/2; break; } // Update item item options->item.x1 = originX; options->item.y1 = originY; options->item.x2 = originX + options->width; options->item.y2 = originY + options->height; } int Widget::getColor(const char* str) { XColor* cc= NULL; // starting with tk8.6, colors are W3C based, not X11 if (!strncmp(str,"green",5) || !strncmp(str,"GREEN",5)) cc = Tk_GetColor(interp, tkwin, "lime"); else cc = Tk_GetColor(interp, tkwin, str); return cc ? cc->pixel : 0; } XColor* Widget::getXColor(const char* str) { // note: Tk_GetColor can return an XColor without valid red,green,blue // if common colorname is used. (uses XAllocNamedColor). // force an hash string instead (uses XAllocColor). XColor* cc=NULL; if (!strncmp(str,"white",5)) cc = Tk_GetColor(interp, tkwin, "#ffffff"); else if (!strncmp(str,"black",5)) cc = Tk_GetColor(interp, tkwin, "#000000"); else if (!strncmp(str,"red",3)) cc = Tk_GetColor(interp, tkwin, "#ff0000"); else if (!strncmp(str,"green",5)) cc = Tk_GetColor(interp, tkwin, "#00ff00"); else if (!strncmp(str,"blue",4)) cc = Tk_GetColor(interp, tkwin, "#0000ff"); else if (!strncmp(str,"cyan",4)) cc = Tk_GetColor(interp, tkwin, "#00ffff"); else if (!strncmp(str,"magenta",7)) cc = Tk_GetColor(interp, tkwin, "#ff00ff"); else if (!strncmp(str,"yellow",6)) cc = Tk_GetColor(interp, tkwin, "#ffff00"); else cc = Tk_GetColor(interp, tkwin, str); return cc ? cc : Tk_GetColor(interp, tkwin, "white"); } void Widget::warp(Vector& vv) { #if !(_WIN32 || MAC_OSX_TK) XWarpPointer(display, None, None, 0, 0, 0, 0, vv[0], vv[1]); #endif #ifdef MAC_OSX_TK XXWarpPointer(display, None, None, 0, 0, 0, 0, vv[0], vv[1]); #endif #ifdef _WIN32 Window root, child; int rootx,rooty,winx,winy; unsigned int msk; XQueryPointer(display,Tk_WindowId(tkwin),&root,&child, &rootx,&rooty,&winx,&winy,&msk); XWarpPointer(display, None, Tk_WindowId(tkwin), 0, 0, 0, 0, winx+vv[0], winy+vv[1]); #endif } void Widget::warpTo(Vector& vv) { #if !(MAC_OSX_TK) XWarpPointer(display, None, Tk_WindowId(tkwin), 0, 0, 0, 0, vv[0], vv[1]); #endif #ifdef MAC_OSX_TK XXWarpPointer(display, None, Tk_WindowId(tkwin), 0, 0, 0, 0, vv[0], vv[1]); #endif } void Widget::psHead1(ostream& str, int width, int height) { switch (psColorSpace) { case BW: case GRAY: str << "/picstr " << dec << width << " string def" << endl << width << ' ' << height << " 8 matrix" << endl << "{currentfile picstr readhexstring pop}" << endl << "image" << endl; break; case RGB: case CMYK: str << "/picstr " << dec << width*3 << " string def" << endl << width << ' ' << height << " 8 matrix" << endl << "{currentfile picstr readhexstring pop}" << endl << "false 3 colorimage" << endl; break; } } void Widget::psHead2(ostream& str, int width, int height, const char* compress, const char* decode) { switch (psColorSpace) { case BW: case GRAY: str << "/DeviceGray setcolorspace" << endl; break; case RGB: str << "/DeviceRGB setcolorspace" << endl; break; case CMYK: str << "/DeviceCMYK setcolorspace" << endl; break; } str << "<<" << endl << "/ImageType 1" << endl << "/Width " << dec << width << endl << "/Height " << dec << height << endl << "/BitsPerComponent 8" << endl; switch (psColorSpace) { case BW: case GRAY: str << "/Decode [0 1]" << endl; break; case RGB: str << "/Decode [0 1 0 1 0 1]" << endl; break; case CMYK: str << "/Decode [0 1 0 1 0 1 0 1]" << endl; break; } str << "/ImageMatrix matrix" << endl << "/DataSource currentfile" << endl; if (decode) str << "/" << decode << "Decode filter" << endl; if (compress) str << "/" << compress << "Decode filter" << endl; str << ">>" << endl << "image" << endl; } // compute coordinates of lower-left corner of the image // taking into account the anchor position for the image. // this mapping is different than in widget.c, due to postscript origin // (y is flipped) Vector Widget::psOrigin() { double xx = options->x; double yy = Tk_CanvasPsY(canvas, options->y); double ww = options->width; double hh = options->height; switch (options->anchor) { case TK_ANCHOR_N: xx -= ww/2; yy -= hh; break; case TK_ANCHOR_NE: xx -= ww; yy -= hh; break; case TK_ANCHOR_E: xx -= ww; yy -= hh/2; break; case TK_ANCHOR_SE: xx -= ww; break; case TK_ANCHOR_S: xx -= ww/2; break; case TK_ANCHOR_SW: break; case TK_ANCHOR_W: yy -= hh/2; break; case TK_ANCHOR_NW: yy -= hh; break; case TK_ANCHOR_CENTER: xx -= ww/2; yy -= hh/2; break; } return Vector(xx,yy); } // this routine attemps a work around for a problems with level 2 postscript // and other software such as dvips and assemble /* void Widget::psFix(ostringstream& ostr) { string str = ostr.str(); const char* buf = str.c_str(); int size = str.length(); char* a = (char*)buf; while (*a && a #include #include #include #include #include #include #include using namespace std; #include #include #include "vector.h" class Attribute; extern float psScale; // General Defines #define WIDGET(x) (*(((WidgetOptions*)(x))->widget)) // Widget ConfigSpecs Defines #define CONFIGX 1 #define CONFIGY 2 #define CONFIGWIDTH 3 #define CONFIGHEIGHT 4 #define CONFIGANCHOR 5 #define CONFIGCOMMAND 6 #define CONFIGHELVETICA 7 #define CONFIGCOURIER 8 #define CONFIGTIMES 9 // Tk Canvas Widget Function Declarations extern int WidgetConfigProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const [],int); extern int WidgetCoordProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const []); extern void WidgetDeleteProc(Tk_Canvas, Tk_Item*, Display*); extern void WidgetDisplayProc(Tk_Canvas, Tk_Item*, Display*, Drawable, int, int, int, int); extern double WidgetPointProc(Tk_Canvas, Tk_Item*, double*); extern int WidgetAreaProc(Tk_Canvas, Tk_Item*, double*); extern int WidgetPostscriptProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int); extern void WidgetScaleProc(Tk_Canvas, Tk_Item*, double, double, double, double); extern void WidgetTranslateProc(Tk_Canvas, Tk_Item*, double, double); extern int WidgetIndexProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, char, int*); extern void WidgetICursorProc(Tk_Canvas, Tk_Item*, int); extern int WidgetSelectionProc(Tk_Canvas, Tk_Item*, int, char*, int); extern void WidgetInsertProc(Tk_Canvas, Tk_Item*, int, char*); extern void WidgetDCharsProc(Tk_Canvas, Tk_Item*, int, int); extern int WidgetParse(ClientData, Tcl_Interp*, int, char**); class Widget; // this structure is returned by each Canvas Function Proc struct WidgetOptions { Tk_Item item; // required by tk int x, y; // Coordinates of positioning point on canvas int width; // widget width int height; // widget height Tk_Anchor anchor; // Where to anchor widget relative to x,y char* cmdName; // Suggested Tcl command name char* helvetica; // name of X11 font char* courier; // name of X11 font char* times; // name of X11 font Widget* widget; // pointer to widget class }; // Widget Class class Widget { friend class Attribute; public: enum PSColorSpace {BW, GRAY, RGB, CMYK}; Tcl_Interp* interp; // Tcl interp protected: WidgetOptions* options; // Pointer to Tk Options Tk_ConfigSpec* configSpecs; // configure specs Tk_Canvas canvas; // handle to canvas Tk_Window tkwin; // Tk window id Display* display; // display of canvas Visual* visual; // visual of canvas int depth; // depth of canvas int screenNumber; // screen number of canvas Pixmap pixmap; // size of canvas item GC widgetGC; // gc for pixmap XCopyArea int visible; // redraw when true int originX; // widget upper left origin int originY; // widget upper left origin char* cmd; // actual command name used int result; // result of TCL command int psResolution; // postscript resolution int psLevel; // postscript level PSColorSpace psColorSpace; // postscript color space protected: virtual int updatePixmap(const BBox&) =0; // render into pixmap virtual void invalidPixmap(); // pixmap is invalid virtual void reset() {}; // reset widget void createCommand(); // create tcl command void updateBBox(); // update item bounding box int checkArgs(int, int, char**); // check args utility void psHead1(ostream&, int, int); void psHead2(ostream&, int, int, const char*, const char*); Vector psOrigin(); // void psFix(ostringstream& ostr); public: Widget(Tcl_Interp*, Tk_Canvas, Tk_Item*); virtual ~Widget(); Tcl_Interp* getInterp() {return interp;} void redraw(); // ping tk to redraw this widget void redraw(BBox); // ping tk to redraw this bbox void redrawNow(); // force update now this widget void redrawNow(BBox); // force update now this bbox void forceUpdate(); // only force update virtual int parse(istringstream&) =0; // parse subcommands virtual int configure(int, const char**, int); // parse config options void error(const char*); // parse error function void msg(const char*); // parse msg function Tk_Window getTkwin() {return tkwin;} Display* getDisplay() {return display;} double getDisplayRatio(); Visual* getVisual() {return visual;} int getWidth() {return options->width;} int getHeight() {return options->height;} int getDepth() {return depth;} int getScreenNumber() {return screenNumber;} Tk_Canvas getCanvas() {return canvas;} int getColor(const char* str); XColor* getXColor(const char*); void warp(Vector&); void warpTo(Vector&); // Required Canvas Functions int coordProc(int, char**); void displayProc(Drawable, int, int, int, int); double pointProc(double*); int areaProc(double*); virtual int postscriptProc(int); void scaleProc(double, double, double, double); void translateProc(double, double); virtual int indexProc(char indexString, int* indexPtr) {return TCL_OK;} virtual void icursorProc(int index) {} virtual int selectionProc(int offset, char* buffer, int maxBytes) {return maxBytes;} virtual void insertProc(int index, char* string) {} virtual void dcharsProc(int first, int last) {} // Subcommand Functions int configCmd(int, const char**); // configure command void getHeightCmd(); // return height of widget void getWidthCmd(); // return width of widget void hideCmd(); // hide item command void queryCursorCmd(); // get cursor coords void resetCmd(); // reset item command void showCmd(); // show item command // Postscript Commands void psLevelCmd(int l) {psLevel = l;} void psResolutionCmd(int r) {psResolution = r;} void psColorSpaceCmd(PSColorSpace c) {psColorSpace = c;} #ifdef MAC_OSX_TK virtual void macsosxPrintCmd() {} #endif }; #endif saods9/tksao/vector/vector.C000644 000765 000000 00000020745 12775262732 016442 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "vector.h" #include "vector3d.h" #include "fuzzy.h" // Vector::manip int Vector::separator = ios_base::xalloc(); int Vector::unit = ios_base::xalloc(); Vector::Vector(const Vector3d& a) { v[0]=a.v[0]; v[1]=a.v[1]; v[2]=1; } Vector& Vector::operator=(const Vector3d& a) { v[0]=a.v[0]; v[1]=a.v[1]; v[2]=1; return *this; } Vector& Vector::clip(const BBox& bb) { // restrict vector by bbox Vector ll(bb.ll); Vector ur(bb.ur); if (v[0]ur[0]) v[0]=ur[0]; if (v[1]ur[1]) v[1]=ur[1]; return *this; } Vector Vector::TkCanvasPs(void* canvas) { return Vector(v[0], Tk_CanvasPsY((Tk_Canvas)canvas, v[1])); } ostream& operator<<(ostream& os, const Vector& v) { unsigned char sep = (unsigned char)os.iword(Vector::separator); if (!sep) sep = ' '; unsigned char unit = (unsigned char)os.iword(Vector::unit); if (!unit) os << v.v[0] << sep << v.v[1]; else os << v.v[0] << unit << sep << v.v[1] << unit; // reset unit os.iword(Vector::unit) = '\0'; return os; } istream& operator>>(istream& s, Vector& v) { s >> v.v[0] >> v.v[1]; return s; } // Vertex ostream& operator<<(ostream& os, const Vertex& v) { os << v.vector; return os; } // Matrix Matrix& Matrix::operator*=(const Matrix& a) { Matrix r; for (int i=0; i<3; i++) for (int j=0; j<3; j++) r.m[i][j] = m[i][0]*a.m[0][j] + m[i][1]*a.m[1][j] + m[i][2]*a.m[2][j]; return *this=r; } Matrix Matrix::invert() { Matrix cc = this->cofactor(); Matrix aa = cc.adjoint(); double dd = m[0][0]*aa.m[0][0] + m[0][1]*aa.m[1][0] + m[0][2]*aa.m[2][0]; Matrix rr; for (int ii=0; ii<3; ii++ ) for (int jj=0; jj<3; jj++) rr.m[ii][jj] = aa.m[ii][jj]/dd; return rr; } Matrix Matrix::cofactor() { Matrix rr; rr.m[0][0] = +(m[1][1]*m[2][2]-m[1][2]*m[2][1]); rr.m[0][1] = -(m[1][0]*m[2][2]-m[1][2]*m[2][0]); rr.m[0][2] = +(m[1][0]*m[2][1]-m[1][1]*m[2][0]); rr.m[1][0] = -(m[0][1]*m[2][2]-m[0][2]*m[2][1]); rr.m[1][1] = +(m[0][0]*m[2][2]-m[0][2]*m[2][0]); rr.m[1][2] = -(m[0][0]*m[2][1]-m[0][1]*m[2][0]); rr.m[2][0] = +(m[0][1]*m[1][2]-m[0][2]*m[1][1]); rr.m[2][1] = -(m[0][0]*m[1][2]-m[0][2]*m[1][0]); rr.m[2][2] = +(m[0][0]*m[1][1]-m[0][1]*m[1][0]); return rr; } double Matrix::det() { return + m[0][0]*(m[1][1]*m[2][2]-m[1][2]*m[2][1]) - m[0][1]*(m[1][0]*m[2][2]-m[1][2]*m[2][0]) + m[0][2]*(m[1][0]*m[2][1]-m[1][1]*m[2][0]); } Matrix Matrix::adjoint() { Matrix rr; for (int ii=0; ii<3; ii++) for (int jj=0; jj<3; jj++) rr.m[jj][ii] = m[ii][jj]; return rr; } ostream& operator<<(ostream& os, const Matrix& m) { os << ' '; for (int i=0; i<3; i++) for (int j=0; j<2; j++) os << m.m[i][j] << ' '; return os; } istream& operator>>(istream& s, Matrix& m) { for (int i=0; i<3; i++ ) for (int j=0; j<2; j++) s >> m.m[i][j]; return s; } // Translate ostream& operator<<(ostream& os, const Translate& m) { os << ' ' << m.m[2][0] << ' ' << m.m[2][1] << ' '; return os; } istream& operator>>(istream& s, Translate& m) { s >> m.m[2][0] >> m.m[2][1]; return s; } // Scale ostream& operator<<(ostream& os, const Scale& m) { os << ' ' << m.m[0][0] << ' ' << m.m[1][1] << ' '; return os; } istream& operator>>(istream& s, Scale& m) { s >> m.m[0][0] >> m.m[1][1]; return s; } // Rotate Rotate::Rotate(double a) : Matrix() { // note: signs reverse for X-Windows (origin is upper left) m[0][0] = cos(a); m[0][1] = -sin(a); m[1][0] = sin(a); m[1][1] = cos(a); // this fixes a problem with numbers too small and tring to invert the matrix tzero(&m[0][0]); tzero(&m[0][1]); tzero(&m[1][0]); tzero(&m[1][1]); } ostream& operator<<(ostream& os, const Rotate& m) { os << ' ' << m.m[0][0] << ' ' << m.m[0][1] << ' ' << m.m[1][0] << ' ' << m.m[1][1] << ' '; return os; } istream& operator>>(istream& s, Rotate& m) { s >> m.m[0][0] >> m.m[0][1] >> m.m[1][0] >> m.m[1][1]; return s; } // BBox BBox::BBox(double a, double b, double c, double d) { // we want a 'positive' box ll.v[0] = a < c ? a : c; ll.v[1] = b < d ? b : d; ur.v[0] = a < c ? c : a; ur.v[1] = b < d ? d : b; } BBox::BBox(const Vector& l, const Vector& h) { // we want a 'positive' box ll.v[0] = l.v[0] < h.v[0] ? l.v[0] : h.v[0]; ll.v[1] = l.v[1] < h.v[1] ? l.v[1] : h.v[1]; ur.v[0] = l.v[0] < h.v[0] ? h.v[0] : l.v[0]; ur.v[1] = l.v[1] < h.v[1] ? h.v[1] : l.v[1]; } int BBox::isIn(const Vector& v) const { return !(v.v[0] < ll.v[0] || v.v[1] < ll.v[1] || v.v[0] > ur.v[0] || v.v[1] > ur.v[1]); } int BBox::isIn(const BBox& bb) const { // return 0 if outside, > 0 if intersection // = 4 if inside BBox b = bb; return isIn(b.ll) + isIn(b.ur) + isIn(b.ul()) + isIn(b.lr()); } BBox& BBox::bound(const Vector& v) { if (v.v[0] < ll[0]) ll[0] = v.v[0]; if (v.v[1] < ll[1]) ll[1] = v.v[1]; if (v.v[0] > ur[0]) ur[0] = v.v[0]; if (v.v[1] > ur[1]) ur[1] = v.v[1]; return *this; } BBox& BBox::bound(BBox b) { this->bound(b.ll); this->bound(b.lr()); this->bound(b.ur); this->bound(b.ul()); return *this; } BBox intersect(const BBox& a, const BBox& b) { // test for obvious int ab = a.isIn(b); int ba = b.isIn(a); // no intersection? if (ab==0 && ba == 0) { // maybe they are just crossed, check the centers int abc = a.isIn(((BBox&)b).center()); int bac = b.isIn(((BBox&)a).center()); if (abc==0 && bac==0) return BBox(); } if (ab == 4) // b is inside a return b; if (ba == 4) // a is inside b return a; // else, there seems to be some overlap BBox r; r.ll.v[0] = (a.ll.v[0] > b.ll.v[0]) ? a.ll.v[0] : b.ll.v[0]; r.ll.v[1] = (a.ll.v[1] > b.ll.v[1]) ? a.ll.v[1] : b.ll.v[1]; r.ur.v[0] = (a.ur.v[0] < b.ur.v[0]) ? a.ur.v[0] : b.ur.v[0]; r.ur.v[1] = (a.ur.v[1] < b.ur.v[1]) ? a.ur.v[1] : b.ur.v[1]; return r; } ostream& operator<<(ostream& os, const BBox& b) { os << b.ll << ' ' << b.ur; return os; } // Cohen–Sutherland clipping algorithm // bounded diagonally by (0,0), and (width, height) const int INSIDE = 0; // 0000 const int LEFT = 1; // 0001 const int RIGHT = 2; // 0010 const int BOTTOM = 4; // 0100 const int TOP = 8; // 1000 static int calcOutCode(Vector vv, int width, int height) { int code = INSIDE; if (vv[0] < 0) // to the left of clip window code |= LEFT; else if (vv[0] > width) // to the right of clip window code |= RIGHT; if (vv[1] < 0) // below the clip window code |= BOTTOM; else if (vv[1] > height) // above the clip window code |= TOP; return code; } int clip(Vector* v0, Vector* v1, int width, int height) { int outcode0 = calcOutCode(*v0, width, height); int outcode1 = calcOutCode(*v1, width, height); int accept = false; while (true) { if (!(outcode0 | outcode1)) { // Bitwise OR is 0. Trivially accept and get out of loop accept = true; break; } else if (outcode0 & outcode1) { // Bitwise AND is not 0. Trivially reject and get out of loop break; } else { // At least one endpoint is outside the clip rectangle; pick it. int outcodeOut = outcode0 ? outcode0 : outcode1; // Now find the intersection point // y = y0 + slope * (x - x0) // x = x0 + (1 / slope) * (y - y0) double x, y; if (outcodeOut & TOP) { // point is above the clip rectangle x = (*v0)[0] + ((*v1)[0]-(*v0)[0]) * (height-(*v0)[1]) / ((*v1)[1]-(*v0)[1]); y = height; } else if (outcodeOut & BOTTOM) { // point is below the clip rectangle x = (*v0)[0] + ((*v1)[0]-(*v0)[0]) * (0-(*v0)[1]) / ((*v1)[1]-(*v0)[1]); y = 0; } else if (outcodeOut & RIGHT) { // point is to the right of clip rectangle y = (*v0)[1] + ((*v1)[1]-(*v0)[1]) * (width-(*v0)[0]) / ((*v1)[0]-(*v0)[0]); x = width; } else if (outcodeOut & LEFT) { // point is to the left of clip rectangle y = (*v0)[1] + ((*v1)[1]-(*v0)[1]) * (0-(*v0)[0]) / ((*v1)[0]-(*v0)[0]); x = 0; } // Now we move outside point to intersection point to clip // and get ready for next pass. if (outcodeOut == outcode0) { (*v0)[0] = x; (*v0)[1] = y; outcode0 = calcOutCode(*v0, width, height); } else { (*v1)[0] = x; (*v1)[1] = y; outcode1 = calcOutCode(*v1, width, height); } } } return accept; } saods9/tksao/vector/vector.h000644 000765 000000 00000022514 12750457610 016475 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __vector_h__ #define __vector_h__ #include #include #include using namespace std; class Vector3d; class Matrix; class BBox; class Vector { public: static int separator; static int unit; double v[3]; public: Vector() {v[0]=0; v[1]=0; v[2]=1;} Vector(double* f) {v[0]=f[0]; v[1]=f[1]; v[2]=1;} Vector(double x, double y) {v[0]=x; v[1]=y; v[2]=1;} Vector(const Vector& a) {v[0]=a.v[0]; v[1]=a.v[1]; v[2]=a.v[2];} Vector& operator=(const Vector& a) {v[0]=a.v[0]; v[1]=a.v[1]; v[2]=a.v[2]; return *this;} Vector(const Vector3d&); Vector& operator=(const Vector3d&); double& operator[](int i) {return v[i];} // return element double* vv() {return v;} // return vector Vector& origin() {v[0]=0; v[1]=0; v[2]=1; return *this;} Vector& operator+=(const Vector& a) // addition {v[0]+=a.v[0]; v[1]+=a.v[1]; return *this;} Vector& operator-=(const Vector& a) // subtraction {v[0]-=a.v[0]; v[1]-=a.v[1]; return *this;} Vector& operator*=(double f) // scalar multipy {v[0]*=f; v[1]*=f; return *this;} Vector& operator/=(double f) // scalar division {v[0]/=f; v[1]/=f; return *this;} Vector& operator*=(const Matrix& m); // vector multipy Vector abs() {return Vector(fabs(v[0]),fabs(v[1]));} double angle() {return atan2(v[1],v[0]);} Vector ceil() {return Vector(::ceil(v[0]),::ceil(v[1]));} Vector floor() {return Vector(::floor(v[0]),::floor(v[1]));} Vector invert() {return Vector(1/v[0],1/v[1]);} double length() {return sqrt(v[0]*v[0]+v[1]*v[1]);} double area() {return v[0]*v[1];} Vector round() {return Vector((int)(v[0]+.5),(int)(v[1]+.5));} Vector normalize() {double d = sqrt(v[0]*v[0]+v[1]*v[1]); return d ? Vector(v[0]/d,v[1]/d) : Vector();} // restrict vector by bbox Vector& clip(const BBox&); Vector TkCanvasPs(void* canvas); }; // This I/O manipulator flips the number stored in iword between 0 and 1 /* inline ios_base& setfoo(ios_base& os) { os.iword(Vector::foo) = !os.iword(Vector::foo); return os; } */ // Vector separator(int) struct _Setseparator {int _M_n;}; inline _Setseparator setseparator(int __n) { _Setseparator __x; __x._M_n = __n; return __x; } template inline basic_ostream<_CharT,_Traits>& operator<<(basic_ostream<_CharT,_Traits>& __os, _Setseparator __f) { __os.iword(Vector::separator) = __f._M_n; return __os; } // Vector unit(int) struct _Setunit {int _M_n;}; inline _Setunit setunit(int __n) { _Setunit __x; __x._M_n = __n; return __x; } template inline basic_ostream<_CharT,_Traits>& operator<<(basic_ostream<_CharT,_Traits>& __os, _Setunit __f) { __os.iword(Vector::unit) = __f._M_n; return __os; } ostream& operator<<(ostream&, const Vector&); istream& operator>>(istream&, Vector&); inline Vector operator-(const Vector& a) {return Vector(-a.v[0],-a.v[1]);} inline Vector operator+(const Vector& a, const Vector& b) {return Vector(a) +=b;} inline Vector operator-(const Vector& a, const Vector& b) {return Vector(a) -=b;} inline Vector operator*(const Vector& a, double b) {return Vector(a) *=b;} inline Vector operator/(const Vector& a, double b) {return Vector(a) /=b;} inline Vector operator*(const Vector& v, const Matrix& m) {return Vector(v) *=m;} inline double operator*(const Vector& a, const Vector& b) // dot product {double r =0; r+=a.v[0]*b.v[0]; r+=a.v[1]*b.v[1]; return r;} class Vertex { public: Vector vector; private: Vertex* next_; Vertex* previous_; public: Vertex() {next_=NULL; previous_=NULL;} Vertex(double x, double y) {vector=Vector(x,y); next_=NULL; previous_=NULL;} Vertex(const Vector& a) {vector=a; next_=NULL; previous_=NULL;} Vertex(const Vertex& a) {vector=a.vector; next_=a.next_; previous_=a.previous_;} Vertex& operator=(const Vertex& a) {vector=a.vector; next_=a.next_; previous_=a.previous_; return *this;} Vertex* next() {return next_;} Vertex* previous() {return previous_;} void setNext(Vertex* v) {next_=v;} void setPrevious(Vertex* v) {previous_=v;} }; ostream& operator<<(ostream&, const Vertex&); class Matrix { public: double m[3][3]; public: Matrix() { m[0][0]=1; m[0][1]=0; m[0][2]=0; m[1][0]=0; m[1][1]=1; m[1][2]=0; m[2][0]=0; m[2][1]=0; m[2][2]=1;} Matrix(double a, double b, double c, double d, double e, double f) { m[0][0]=a; m[0][1]=b; m[0][2]=0; m[1][0]=c; m[1][1]=d; m[1][2]=0; m[2][0]=e; m[2][1]=f; m[2][2]=1;} Matrix(double a, double b, double c, double d, double e, double f, double g, double h, double i) { m[0][0]=a; m[0][1]=b; m[0][2]=c; m[1][0]=d; m[1][1]=e; m[1][2]=f; m[2][0]=g; m[2][1]=h; m[2][2]=i;} Matrix(const Matrix& a) { m[0][0]=a.m[0][0]; m[0][1]=a.m[0][1]; m[0][2]=a.m[0][2]; m[1][0]=a.m[1][0]; m[1][1]=a.m[1][1]; m[1][2]=a.m[1][2]; m[2][0]=a.m[2][0]; m[2][1]=a.m[2][1]; m[2][2]=a.m[2][2];} Matrix& operator=(const Matrix& a) { m[0][0]=a.m[0][0]; m[0][1]=a.m[0][1]; m[0][2]=a.m[0][2]; m[1][0]=a.m[1][0]; m[1][1]=a.m[1][1]; m[1][2]=a.m[1][2]; m[2][0]=a.m[2][0]; m[2][1]=a.m[2][1]; m[2][2]=a.m[2][2]; return *this;} double matrix(int i, int j) // return element {return m[i][j];} Vector operator[](int i) // return row {return Vector(m[i]);} double* mm() const // return matrix {return (double*)m;} Matrix& identity() { m[0][0]=1; m[0][1]=0; m[0][2]=0; m[1][0]=0; m[1][1]=1; m[1][2]=0; m[2][0]=0; m[2][1]=0; m[2][2]=1; return *this;} Matrix& operator*=(const Matrix&); // matrix multiply Matrix invert(); Matrix cofactor(); Matrix adjoint(); double det(); }; ostream& operator<<(ostream&, const Matrix&); istream& operator>>(istream&, Matrix&); inline Matrix operator*(const Matrix& a, const Matrix& b) {return Matrix(a) *= b;} inline Vector& Vector::operator*=(const Matrix& m) { double vv[3]; double* mm = (double*)(m.m); vv[0] = v[0]*mm[0] + v[1]*mm[3] + v[2]*mm[6]; vv[1] = v[0]*mm[1] + v[1]*mm[4] + v[2]*mm[7]; vv[2] = v[0]*mm[2] + v[1]*mm[5] + v[2]*mm[8]; v[0] = vv[0]; v[1] = vv[1]; v[2] = vv[2]; return *this; } class Translate : public Matrix { public: Translate() {}; Translate(double x, double y) {m[2][0]=x; m[2][1]=y;} Translate(const Vector& v) {m[2][0]=v.v[0]; m[2][1]=v.v[1];} Translate(const Matrix& a) {m[2][0] = a.m[2][0]; m[2][1] = a.m[2][1];} }; ostream& operator<<(ostream&, const Translate&); istream& operator>>(istream&, Translate&); class Scale : public Matrix { public: Scale() {}; Scale(double a) {m[0][0]=a; m[1][1]=a;} Scale(double a, double b) {m[0][0]=a; m[1][1]=b;} Scale(const Vector& v) {m[0][0]=v.v[0]; m[1][1]=v.v[1];} Scale(const Matrix& a) {m[0][0] = a.m[0][0]; m[1][1] = a.m[1][1];} }; ostream& operator<<(ostream&, const Scale&); istream& operator>>(istream&, Scale&); class FlipX : public Matrix { public: FlipX() {m[0][0] = -1;} }; class FlipY : public Matrix { public: FlipY() {m[1][1] = -1;} }; class FlipXY : public Matrix { public: FlipXY() {m[0][0] = -1; m[1][1] = -1;} }; class Rotate : public Matrix { public: Rotate() {}; Rotate(double); Rotate(double a, double b, double c, double d) {m[0][0] = a; m[0][1] = b; m[1][0] = c; m[1][1] = d;} Rotate(const Matrix& a) { m[0][0]=a.m[0][0]; m[0][1]=a.m[0][1]; m[1][0]=a.m[1][0]; m[1][1]=a.m[1][1];} }; ostream& operator<<(ostream&, const Rotate&); istream& operator>>(istream&, Rotate&); class BBox { public: Vector ll; Vector ur; public: BBox() {} BBox(double w, double h) {ll.v[0] = 0; ll.v[1] = 0; ur.v[0] = w; ur.v[1] = h;} BBox(const Vector& v) {ll=v; ur=v;} BBox(double, double, double, double); BBox(const Vector&, const Vector&); BBox(const BBox& a) {ll=a.ll; ur=a.ur;} BBox& operator=(const BBox& a) {ll=a.ll; ur=a.ur; return *this;} Vector lr() {return Vector(ur[0],ll[1]);} Vector ul() {return Vector(ll[0],ur[1]);} BBox& operator+=(const Vector& v) // addition {ll+=v; ur+=v; return *this;} BBox& operator-=(const Vector& a) // subtraction {ll-=a; ur-=a; return *this;} BBox& operator*=(const Matrix& m) // multiply {ll*=m; ur*=m; return *this;} Vector center() {return (ur-ll)/2 + ll;} Vector size() {return ur - ll;} int isEmpty() const {Vector v = ur-ll; return (v[0]==0 && v[1]==0);} int isIn(const Vector&) const; int isIn(const BBox&) const; BBox& expand(double a) {ll-=Vector(a,a); ur+=Vector(a,a); return *this;} BBox& expand(const Vector& v) {ll-=v; ur+=v; return *this;} BBox& shrink(double a) {ll+=Vector(a,a); ur-=Vector(a,a); return *this;} BBox& shrink(const Vector& v) {ll+=v; ur-=v; return *this;} BBox& bound(BBox); BBox& bound(const Vector&); }; ostream& operator<<(ostream&, const BBox&); inline BBox operator+(const BBox& b, const Vector& v) {return BBox(b) += v;} inline BBox operator-(const BBox& b, const Vector& v) {return BBox(b) -= v;} inline BBox operator*(const BBox& b, const Matrix& m) {return BBox(b) *= m;} BBox intersect(const BBox&, const BBox&); // clip line to box from origin to width,height int clip(Vector*, Vector*, int, int); #endif saods9/tksao/vector/vector3d.C000644 000765 000000 00000023315 12775262732 016665 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "vector3d.h" #include "vector.h" #include "fuzzy.h" // Vector3d Vector3d::Vector3d(const Vector& a) { v[0]=a.v[0]; v[1]=a.v[1]; v[2]=0; v[3]=1; } Vector3d::Vector3d(const Vector& a, double z) { v[0]=a.v[0]; v[1]=a.v[1]; v[2]=z; v[3]=1; } Vector3d& Vector3d::operator=(const Vector& a) { v[0]=a.v[0]; v[1]=a.v[1]; v[2]=0; v[3]=1; return *this; } Vector Vector3d::TkCanvasPs(void* canvas) { return Vector(v[0], Tk_CanvasPsY((Tk_Canvas)canvas, v[1])); } ostream& operator<<(ostream& os, const Vector3d& v) { unsigned char sep = (unsigned char)os.iword(Vector::separator); if (!sep) sep = ' '; unsigned char unit = (unsigned char)os.iword(Vector::unit); if (!unit) os << v.v[0] << sep << v.v[1] << sep << v.v[2]; else os << v.v[0] << unit << v.v[1] << unit << v.v[2] << unit; // reset unit os.iword(Vector::unit) = '\0'; return os; } istream& operator>>(istream& s, Vector3d& v) { s >> v.v[0] >> v.v[1] >> v.v[2]; return s; } // Vertex3d ostream& operator<<(ostream& os, const Vertex3d& v) { os << v.vector; return os; } // Matrix3d Matrix3d& Matrix3d::operator*=(const Matrix3d& a) { Matrix3d r; for (int ii=0; ii<4; ii++) for (int jj=0; jj<4; jj++) r.m[ii][jj] = m[ii][0]*a.m[0][jj] + m[ii][1]*a.m[1][jj] + m[ii][2]*a.m[2][jj] + m[ii][3]*a.m[3][jj]; return *this=r; } Matrix3d::Matrix3d(const Matrix& a) { m[0][0]=a.m[0][0]; m[0][1]=a.m[0][1]; m[0][2]=0; m[0][3]=0; m[1][0]=a.m[1][0]; m[1][1]=a.m[1][1]; m[1][2]=0; m[1][3]=0; m[2][0]=0; m[2][1]=0; m[2][2]=1; m[2][3]=0; m[3][0]=a.m[2][0]; m[3][1]=a.m[2][1]; m[3][2]=0; m[3][3]=1; } Matrix3d Matrix3d::invert() { Matrix3d cc = this->cofactor(); Matrix3d aa = cc.adjoint(); double dd = m[0][0]*aa.m[0][0] + m[0][1]*aa.m[1][0] + m[0][2]*aa.m[2][0] + m[0][3]*aa.m[3][0]; Matrix3d rr; for (int ii=0; ii<4; ii++ ) for (int jj=0; jj<4; jj++) rr.m[ii][jj] = aa.m[ii][jj]/dd; return rr; } Matrix3d Matrix3d::cofactor() { Matrix3d rr; rr.m[0][0] = +det2d(m[1][1],m[1][2],m[1][3], m[2][1],m[2][2],m[2][3], m[3][1],m[3][2],m[3][3]); rr.m[0][1] = -det2d(m[1][0],m[1][2],m[1][3], m[2][0],m[2][2],m[2][3], m[3][0],m[3][2],m[3][3]); rr.m[0][2] = +det2d(m[1][0],m[1][1],m[1][3], m[2][0],m[2][1],m[2][3], m[3][0],m[3][1],m[3][3]); rr.m[0][3] = -det2d(m[1][0],m[1][1],m[1][2], m[2][0],m[2][1],m[2][2], m[3][0],m[3][1],m[3][2]); rr.m[1][0] = -det2d(m[0][1],m[0][2],m[0][3], m[2][1],m[2][2],m[2][3], m[3][1],m[3][2],m[3][3]); rr.m[1][1] = +det2d(m[0][0],m[0][2],m[0][3], m[2][0],m[2][2],m[2][3], m[3][0],m[3][2],m[3][3]); rr.m[1][2] = -det2d(m[0][0],m[0][1],m[0][3], m[2][0],m[2][1],m[2][3], m[3][0],m[3][1],m[3][3]); rr.m[1][3] = +det2d(m[0][0],m[0][1],m[0][2], m[2][0],m[2][1],m[2][2], m[3][0],m[3][1],m[3][2]); rr.m[2][0] = +det2d(m[0][1],m[0][2],m[0][3], m[1][1],m[1][2],m[1][3], m[3][1],m[3][2],m[3][3]); rr.m[2][1] = -det2d(m[0][0],m[0][2],m[0][3], m[1][0],m[1][2],m[1][3], m[3][0],m[3][2],m[3][3]); rr.m[2][2] = +det2d(m[0][0],m[0][1],m[0][3], m[1][0],m[1][1],m[1][3], m[3][0],m[3][1],m[3][3]); rr.m[2][3] = -det2d(m[0][0],m[0][1],m[0][2], m[1][0],m[1][1],m[1][2], m[3][0],m[3][1],m[3][2]); rr.m[3][0] = -det2d(m[0][1],m[0][2],m[0][3], m[1][1],m[1][2],m[1][3], m[2][1],m[2][2],m[2][3]); rr.m[3][1] = +det2d(m[0][0],m[0][2],m[0][3], m[1][0],m[1][2],m[1][3], m[2][0],m[2][2],m[2][3]); rr.m[3][2] = -det2d(m[0][0],m[0][1],m[0][3], m[1][0],m[1][1],m[1][3], m[2][0],m[2][1],m[2][3]); rr.m[3][3] = +det2d(m[0][0],m[0][1],m[0][2], m[1][0],m[1][1],m[1][2], m[2][0],m[2][1],m[2][2]); return rr; } Matrix3d Matrix3d::adjoint() { Matrix3d rr; for (int ii=0; ii<4; ii++) for (int jj=0; jj<4; jj++) rr.m[jj][ii] = m[ii][jj]; return rr; } double Matrix3d::det() { Matrix3d cc = this->cofactor(); Matrix3d aa = cc.adjoint(); return m[0][0]*aa.m[0][0] + m[0][1]*aa.m[1][0] + m[0][2]*aa.m[2][0] + m[0][3]*aa.m[3][0]; } void Matrix3d::dump() { for (int ii=0; ii<4; ii++) { for (int jj=0; jj<4; jj++) cerr << m[ii][jj] << ' '; cerr << endl; } cerr << endl; } ostream& operator<<(ostream& os, const Matrix3d& m) { os << ' '; for (int ii=0; ii<4; ii++) for (int jj=0; jj<3; jj++) os << m.m[ii][jj] << ' '; return os; } istream& operator>>(istream& s, Matrix3d& m) { for (int ii=0; ii<4; ii++ ) for (int jj=0; jj<3; jj++) s >> m.m[ii][jj]; return s; } // Translate3d Translate3d::Translate3d(const Vector& v) { m[3][0]=v.v[0]; m[3][1]=v.v[1]; m[3][2]=0; } Translate3d::Translate3d(const Vector& v, double z) { m[3][0]=v.v[0]; m[3][1]=v.v[1]; m[3][2]=z; } ostream& operator<<(ostream& os, const Translate3d& m) { os << ' ' << m.m[3][0] << ' ' << m.m[3][1] << ' ' << m.m[3][2] << ' '; return os; } istream& operator>>(istream& s, Translate3d& m) { s >> m.m[3][0] >> m.m[3][1] >> m.m[3][2]; return s; } // Scale3d Scale3d::Scale3d(const Vector& v) { m[0][0]=v.v[0]; m[1][1]=v.v[1]; m[2][2]=1; } Scale3d::Scale3d(const Vector& v, double c) { m[0][0]=v.v[0]; m[1][1]=v.v[1]; m[2][2]=c; } ostream& operator<<(ostream& os, const Scale3d& m) { os << ' ' << m.m[0][0] << ' ' << m.m[1][1] << ' ' << m.m[2][2] << ' '; return os; } istream& operator>>(istream& s, Scale3d& m) { s >> m.m[0][0] >> m.m[1][1] >> m.m[2][2]; return s; } // RotateX3d RotateX3d::RotateX3d(double a) : Matrix3d() { m[1][1] = cos(a); m[1][2] = sin(a); m[2][1] = -sin(a); m[2][2] = cos(a); // this fixes a problem with numbers too small and tring to invert the matrix tzero(&m[1][1]); tzero(&m[1][2]); tzero(&m[2][1]); tzero(&m[2][2]); } ostream& operator<<(ostream& os, const RotateX3d& m) { os << ' ' << m.m[1][1] << ' ' << m.m[1][2] << ' ' << m.m[2][1] << ' ' << m.m[2][2] << ' '; return os; } istream& operator>>(istream& s, RotateX3d& m) { s >> m.m[1][1] >> m.m[1][2] >> m.m[2][1] >> m.m[2][2]; return s; } // RotateY3d RotateY3d::RotateY3d(double a) : Matrix3d() { m[0][0] = cos(a); m[0][2] = -sin(a); m[2][0] = sin(a); m[2][2] = cos(a); // this fixes a problem with numbers too small and tring to invert the matrix tzero(&m[0][0]); tzero(&m[0][2]); tzero(&m[2][0]); tzero(&m[2][2]); } ostream& operator<<(ostream& os, const RotateY3d& m) { os << ' ' << m.m[0][0] << ' ' << m.m[0][2] << ' ' << m.m[2][0] << ' ' << m.m[2][2] << ' '; return os; } istream& operator>>(istream& s, RotateY3d& m) { s >> m.m[0][0] >> m.m[0][2] >> m.m[2][0] >> m.m[2][2]; return s; } // RotateZ3d RotateZ3d::RotateZ3d(double a) : Matrix3d() { m[0][0] = cos(a); m[0][1] = sin(a); m[1][0] = -sin(a); m[1][1] = cos(a); // this fixes a problem with numbers too small and tring to invert the matrix tzero(&m[0][0]); tzero(&m[0][1]); tzero(&m[1][0]); tzero(&m[1][1]); } ostream& operator<<(ostream& os, const RotateZ3d& m) { os << ' ' << m.m[0][0] << ' ' << m.m[0][1] << ' ' << m.m[1][0] << ' ' << m.m[1][1] << ' '; return os; } istream& operator>>(istream& s, RotateZ3d& m) { s >> m.m[0][0] >> m.m[0][1] >> m.m[1][0] >> m.m[1][1]; return s; } // BBox3d BBox3d::BBox3d(double a, double b, double c, double d, double e, double f) { // we want a 'positive' cube ll.v[0] = a < d ? a : d; ll.v[1] = b < e ? b : e; ll.v[2] = c < f ? c : f; ur.v[0] = a < d ? d : a; ur.v[1] = b < e ? e : b; ur.v[2] = c < f ? f : c; } BBox3d::BBox3d(const Vector3d& l, const Vector3d& h) { // we want a 'positive' cube ll.v[0] = l.v[0] < h.v[0] ? l.v[0] : h.v[0]; ll.v[1] = l.v[1] < h.v[1] ? l.v[1] : h.v[1]; ll.v[2] = l.v[2] < h.v[2] ? l.v[2] : h.v[2]; ur.v[0] = l.v[0] < h.v[0] ? h.v[0] : l.v[0]; ur.v[1] = l.v[1] < h.v[1] ? h.v[1] : l.v[1]; ur.v[2] = l.v[2] < h.v[2] ? h.v[2] : l.v[2]; } int BBox3d::isIn(const Vector3d& v) const { return !(v.v[0] < ll.v[0] || v.v[1] < ll.v[1] || v.v[2] < ll.v[2] || v.v[0] > ur.v[0] || v.v[1] > ur.v[1] || v.v[2] > ur.v[2]); } double BBox3d::volume() { Vector3d aa =ur-ll; return aa[0]*aa[1]*aa[2]; } BBox3d& BBox3d::bound(const Vector3d& vv) { // expand bbox3d to include vector3d if (vv.v[0] < ll[0]) ll[0] = vv.v[0]; if (vv.v[1] < ll[1]) ll[1] = vv.v[1]; if (vv.v[2] < ll[2]) ll[2] = vv.v[2]; if (vv.v[0] > ur[0]) ur[0] = vv.v[0]; if (vv.v[1] > ur[1]) ur[1] = vv.v[1]; if (vv.v[2] > ur[2]) ur[2] = vv.v[2]; return *this; } ostream& operator<<(ostream& os, const BBox3d& b) { os << b.ll << ' ' << b.ur; return os; } // WorldToView Matrix3d WorldToView3d(const Vector3d& cop, const Vector3d& vpn, const Vector3d& vup) { Vector3d zv = ((Vector3d)vpn).normalize(); Vector3d xv = cross(zv,(Vector3d&)vup).normalize(); Vector3d yv = cross(xv,zv).normalize(); return Translate3d(-cop) * Matrix3d(xv[0],yv[0],zv[0], xv[1],yv[1],zv[1], xv[2],yv[2],zv[2], 0, 0, 0); } Matrix3d WorldToView3d(const Vector3d& cop, double head, double pitch, double bank) { return Translate3d(-cop) * RotateY3d(head) * RotateX3d(pitch) * RotateZ3d(bank) * Scale3d(1,1,-1); } Matrix3d WorldToView3d(const Vector3d& cop, const Vector3d& vpn, double bank) { Vector3d zv = -((Vector3d)vpn).normalize(); double l=sqrt(zv[0]*zv[0]+zv[2]*zv[2]); return Translate3d(-cop) * RotateY3d(zv[2]/l,zv[0]/l,-zv[0]/l,zv[2]/l) * RotateX3d(l,zv[1],-zv[1],l) * RotateZ3d(bank) * Scale3d(1,1,-1); } saods9/tksao/vector/vector3d.h000644 000765 000000 00000027234 12710174444 016725 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __vector3d_h__ #define __vector3d_h__ #include #include #include using namespace std; class Vector; class Matrix; class Matrix3d; class Vector3d { public: double v[4]; public: Vector3d() {v[0]=0;v[1]=0;v[2]=0;v[3]=1;} Vector3d(double* f) {v[0]=f[0]; v[1]=f[1]; v[2]=f[2]; v[3]=1;} Vector3d(double x, double y) {v[0]=x;v[1]=y;v[2]=0;v[3]=1;} Vector3d(double x, double y, double z) {v[0]=x;v[1]=y;v[2]=z;v[3]=1;} Vector3d(const Vector&); Vector3d(const Vector&, double); Vector3d& operator=(const Vector&); Vector3d(const Vector3d& a) {v[0]=a.v[0];v[1]=a.v[1];v[2]=a.v[2];v[3]=a.v[3];} Vector3d& operator=(const Vector3d& a) {v[0]=a.v[0];v[1]=a.v[1];v[2]=a.v[2];v[3]=a.v[3]; return *this;} double& operator[](int i) {return v[i];} // return element double* vv() {return v;} // return vector Vector3d& operator+=(const Vector3d& a) // addition {v[0]+=a.v[0]; v[1]+=a.v[1]; v[2]+=a.v[2]; return *this;} Vector3d& operator-=(const Vector3d& a) // subtraction {v[0]-=a.v[0]; v[1]-=a.v[1]; v[2]-=a.v[2]; return *this;} Vector3d& operator*=(double f) // scalar multiply {v[0]*=f; v[1]*=f; v[2]*=f; return *this;} Vector3d& operator/=(double f) // scalar division {v[0]/=f; v[1]/=f; v[2]/=f; return *this;} Vector3d& operator*=(const Matrix3d&); // vector multiply Vector3d abs() {return Vector3d(fabs(v[0]),fabs(v[1]),fabs(v[2]));} double angleX() {return atan2(v[2],v[1]);} double angleY() {return atan2(v[0],v[2]);} double angleZ() {return atan2(v[1],v[0]);} Vector3d ceil() {return Vector3d(::ceil(v[0]),::ceil(v[1]),::ceil(v[2]));} Vector3d floor() {return Vector3d(::floor(v[0]),::floor(v[1]),::floor(v[2]));} Vector3d invert() {return Vector3d(1/v[0],1/v[1],1/v[2]);} double length() {return sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);} Vector3d round() {return Vector3d((int)(v[0]+.5),(int)(v[1]+.5),(int)(v[2]+.5));} Vector3d normalize() {double d = sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); return d ? Vector3d(v[0]/d,v[1]/d,v[2]/d) : Vector3d();} Vector3d project() {return (v[3]!=1) ? Vector3d(v[0]/v[3],v[1]/v[3],v[2]/v[3]) : *this;} Vector TkCanvasPs(void* canvas); }; ostream& operator<<(ostream&, const Vector3d&); istream& operator>>(istream&, Vector3d&); inline Vector3d operator-(const Vector3d& a) {return Vector3d(-a.v[0],-a.v[1],-a.v[2]);} inline Vector3d operator+(const Vector3d& a, const Vector3d& b) {return Vector3d(a) +=b;} inline Vector3d operator-(const Vector3d& a, const Vector3d& b) {return Vector3d(a) -=b;} inline Vector3d operator*(const Vector3d& a, double b) {return Vector3d(a) *=b;} inline Vector3d operator/(const Vector3d& a, double b) {return Vector3d(a) /=b;} inline Vector3d operator*(const Vector3d& v, const Matrix3d& m) {return Vector3d(v) *=m;} inline double operator*(const Vector3d& a, const Vector3d& b) // dot product {double r=0; r+=a.v[0]*b.v[0]; r+=a.v[1]*b.v[1]; r+=a.v[2]*b.v[2]; return r;} inline Vector3d cross(Vector3d& a, Vector3d& b) // cross product {return Vector3d(a[1]*b[2]-b[1]*a[2],a[2]*b[0]-b[2]*a[0],a[0]*b[1]-b[0]*a[1]);} class Vertex3d { public: Vector3d vector; private: Vertex3d* next_; Vertex3d* previous_; public: Vertex3d() {next_=NULL; previous_=NULL;} Vertex3d(double x, double y, double z) {vector=Vector3d(x,y,z); next_=NULL; previous_=NULL;} Vertex3d(const Vector3d& a) {vector=a; next_=NULL; previous_=NULL;} Vertex3d(const Vertex3d& a) {vector=a.vector; next_=a.next_; previous_=a.previous_;} Vertex3d& operator=(const Vertex3d& a) {vector=a.vector; next_=a.next_; previous_=a.previous_; return *this;} Vertex3d* next() {return next_;} Vertex3d* previous() {return previous_;} void setNext(Vertex3d* v) {next_ = v;} void setPrevious(Vertex3d* v) {previous_ = v;} }; ostream& operator<<(ostream&, const Vertex3d&); class Matrix3d { public: double m[4][4]; public: Matrix3d() { m[0][0]=1; m[0][1]=0; m[0][2]=0; m[0][3]=0; m[1][0]=0; m[1][1]=1; m[1][2]=0; m[1][3]=0; m[2][0]=0; m[2][1]=0; m[2][2]=1; m[2][3]=0; m[3][0]=0; m[3][1]=0; m[3][2]=0; m[3][3]=1; } Matrix3d(double a, double b, double c, double d, double e, double f, double g, double h, double i, double j, double k, double l) { m[0][0]=a; m[0][1]=b; m[0][2]=c; m[0][3]=0; m[1][0]=d; m[1][1]=e; m[1][2]=f; m[1][3]=0; m[2][0]=g; m[2][1]=h; m[2][2]=i; m[2][3]=0; m[3][0]=j; m[3][1]=k; m[3][2]=l; m[3][3]=1; } Matrix3d(Vector3d& x, Vector3d& y, Vector3d& z) { m[0][0]=x[0]; m[0][1]=y[0]; m[0][2]=z[0]; m[0][3]=0; m[1][0]=x[1]; m[1][1]=y[1]; m[1][2]=z[1]; m[1][3]=0; m[2][0]=x[2]; m[2][1]=y[2]; m[2][2]=z[2]; m[2][3]=0; m[3][0]=0; m[3][1]=0; m[3][2]=0; m[3][3]=1; } Matrix3d(const Matrix3d& a) { m[0][0]=a.m[0][0];m[0][1]=a.m[0][1];m[0][2]=a.m[0][2];m[0][3]=a.m[0][3]; m[1][0]=a.m[1][0];m[1][1]=a.m[1][1];m[1][2]=a.m[1][2];m[1][3]=a.m[1][3]; m[2][0]=a.m[2][0];m[2][1]=a.m[2][1];m[2][2]=a.m[2][2];m[2][3]=a.m[2][3]; m[3][0]=a.m[3][0];m[3][1]=a.m[3][1];m[3][2]=a.m[3][2];m[3][3]=a.m[3][3]; } Matrix3d& operator=(const Matrix3d& a) { m[0][0]=a.m[0][0];m[0][1]=a.m[0][1];m[0][2]=a.m[0][2];m[0][3]=a.m[0][3]; m[1][0]=a.m[1][0];m[1][1]=a.m[1][1];m[1][2]=a.m[1][2];m[1][3]=a.m[1][3]; m[2][0]=a.m[2][0];m[2][1]=a.m[2][1];m[2][2]=a.m[2][2];m[2][3]=a.m[2][3]; m[3][0]=a.m[3][0];m[3][1]=a.m[3][1];m[3][2]=a.m[3][2];m[3][3]=a.m[3][3]; return *this;} Matrix3d(const Matrix& a); double matrix(int i, int j) {return m[i][j];} // return element Vector3d operator[](int i) {return Vector3d(m[i]);} // return row double* mm() {return (double*)m;} // return matrix Matrix3d& identity() { m[0][0]=1; m[0][1]=0; m[0][2]=0; m[0][3]=0; m[1][0]=0; m[1][1]=1; m[1][2]=0; m[1][3]=0; m[2][0]=0; m[2][1]=0; m[2][2]=1; m[2][3]=0; m[3][0]=0; m[3][1]=0; m[3][2]=0; m[3][3]=1; return *this;} Matrix3d& operator*=(const Matrix3d&); // matrix multiply Matrix3d invert(); Matrix3d cofactor(); Matrix3d adjoint(); double det(); double det2d(double& a, double& b, double& c, double& d, double& e, double& f, double& g, double& h, double& i) {return a*(e*i-f*h) - b*(d*i-f*g) + c*(d*h-e*g);} void dump(); }; ostream& operator<<(ostream&, const Matrix3d&); istream& operator>>(istream&, Matrix3d&); inline Matrix3d operator*(const Matrix3d& a, const Matrix3d& b) {return Matrix3d(a) *= b;} inline Vector3d& Vector3d::operator*=(const Matrix3d& m) { double vv[4]; double* mm = (double*)(m.m); vv[0] = v[0]*mm[0] + v[1]*mm[4] + v[2]*mm[8] + v[3]*mm[12]; vv[1] = v[0]*mm[1] + v[1]*mm[5] + v[2]*mm[9] + v[3]*mm[13]; vv[2] = v[0]*mm[2] + v[1]*mm[6] + v[2]*mm[10] + v[3]*mm[14]; vv[3] = v[0]*mm[3] + v[1]*mm[7] + v[2]*mm[11] + v[3]*mm[15]; v[0] = vv[0]; v[1] = vv[1]; v[2] = vv[2]; v[3] = vv[3]; return *this; } class Translate3d : public Matrix3d { public: Translate3d() {}; Translate3d(double x, double y, double z) {m[3][0]=x; m[3][1]=y; m[3][2]=z;} Translate3d(const Vector3d& v) {m[3][0]=v.v[0]; m[3][1]=v.v[1]; m[3][2]=v.v[2];} Translate3d(const Vector& v); Translate3d(const Vector& v, double z); Translate3d(const Matrix3d& a) {m[3][0] = a.m[3][0]; m[3][1] = a.m[3][1]; m[3][2] = a.m[3][2];} }; ostream& operator<<(ostream&, const Translate3d&); istream& operator>>(istream&, Translate3d&); class Scale3d : public Matrix3d { public: Scale3d() {}; Scale3d(double a) {m[0][0]=a; m[1][1]=a; m[2][2]=a;} Scale3d(double a, double b) {m[0][0]=a; m[1][1]=a; m[2][2]=b;} Scale3d(double a, double b, double c) {m[0][0]=a; m[1][1]=b; m[2][2]=c;} Scale3d(const Vector& v); Scale3d(const Vector& v, double c); Scale3d(const Vector3d& v) {m[0][0]=v.v[0]; m[1][1]=v.v[1]; m[2][2]=v.v[2];} Scale3d(const Matrix3d& a) {m[0][0] = a.m[0][0]; m[1][1] = a.m[1][1]; m[2][2] = a.m[2][2];} }; ostream& operator<<(ostream&, const Scale3d&); istream& operator>>(istream&, Scale3d&); class FlipX3d : public Matrix3d { public: FlipX3d() {m[0][0] = -1;} }; class FlipY3d : public Matrix3d { public: FlipY3d() {m[1][1] = -1;} }; class FlipZ3d : public Matrix3d { public: FlipZ3d() {m[2][2] = -1;} }; class FlipXY3d : public Matrix3d { public: FlipXY3d() {m[0][0] = -1; m[1][1] = -1;} }; class FlipXYZ3d : public Matrix3d { public: FlipXYZ3d() {m[0][0] = -1; m[1][1] = -1; m[2][2] = -1;} }; class RotateX3d : public Matrix3d { public: RotateX3d() {}; RotateX3d(double); RotateX3d(double a, double b, double c, double d) {m[1][1] = a; m[1][2] = b; m[2][1] = c; m[2][2] = d;} }; ostream& operator<<(ostream&, const RotateX3d&); istream& operator>>(istream&, RotateX3d&); class RotateY3d : public Matrix3d { public: RotateY3d() {}; RotateY3d(double); RotateY3d(double a, double b, double c, double d) {m[0][0] = a; m[0][2] = b; m[2][0] = c; m[2][2] = d;} }; ostream& operator<<(ostream&, const RotateY3d&); istream& operator>>(istream&, RotateY3d&); class RotateZ3d : public Matrix3d { public: RotateZ3d() {}; RotateZ3d(double); RotateZ3d(double a, double b, double c, double d) {m[0][0] = a; m[0][1] = b; m[1][0] = c; m[1][1] = d;} }; ostream& operator<<(ostream&, const RotateZ3d&); istream& operator>>(istream&, RotateZ3d&); class Shear3d : public Matrix3d { public: Shear3d(double x, double y, double dist) {m[2][0] = -x/dist; m[2][1] = -y/dist;} }; class Perspective3d : public Matrix3d { public: Perspective3d(double front, double back, double dist) { m[2][2] = back/(back-front); m[2][3] = 1; m[3][2] = -front*back/(dist*(back-front)); m[3][3] = 0;} }; class BBox3d { public: Vector3d ll; Vector3d ur; public: BBox3d() {} BBox3d(double w, double h, double d) {ll.v[0]=0; ll.v[1]=0; ll.v[2]=0; ur.v[0]=w; ur.v[1]=h; ur.v[2]=d;} BBox3d(const Vector3d& v) {ll=v; ur=v;} BBox3d(double, double, double, double, double, double); BBox3d(const Vector3d&, const Vector3d&); BBox3d(const BBox3d& a) {ll=a.ll; ur=a.ur;} BBox3d& operator=(const BBox3d& a) {ll=a.ll; ur=a.ur; return *this;} BBox3d& operator+=(const Vector3d& v) // addition {ll+=v; ur+=v; return *this;} BBox3d& operator-=(const Vector3d& a) // subtraction {ll-=a; ur-=a; return *this;} BBox3d& operator*=(const Matrix3d& m) // multiplication {ll*=m; ur*=m; return *this;} double volume(); Vector3d center() {return (ur-ll)/2 + ll;} Vector3d size() {return ur - ll;} int isEmpty() const {Vector3d v = ur-ll; return (v[0]==0 && v[1]==0 && v[2]==0);} int isIn(const Vector3d&) const; BBox3d& expand(double a) {ll-=Vector3d(a,a,a); ur+=Vector3d(a,a,a); return *this;} BBox3d& expand(const Vector3d& v) {ll-=v; ur+=v; return *this;} BBox3d& shrink(double a) {ll+=Vector3d(a,a,a); ur-=Vector3d(a,a,a); return *this;} BBox3d& shrink(const Vector3d& v) {ll+=v; ur-=v; return *this;} // expand bbox3d to include vector3d BBox3d& bound(const Vector3d&); }; ostream& operator<<(ostream&, const BBox3d&); inline BBox3d operator+(const BBox3d& b, const Vector3d& v) {return BBox3d(b) += v;} inline BBox3d operator-(const BBox3d& b, const Vector3d& v) {return BBox3d(b) -= v;} inline BBox3d operator*(const BBox3d& b, const Matrix3d& m) {return BBox3d(b) *= m;} // WorldToView Matrix3d WorldToView3d(const Vector3d& cop, const Vector3d& vpn, const Vector3d& vup); Matrix3d WorldToView3d(const Vector3d& cop, double head, double pitch, double bank); Matrix3d WorldToView3d(const Vector3d& cop, const Vector3d& vpn, double bank); #endif saods9/tksao/vector/vectorold.C000644 000765 000000 00000033543 12705446252 017133 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "vector.h" // Vector Vector operator-(const Vector& a) { return Vector(-a.v[0], -a.v[1]); } Vector& Vector::operator+=(const Vector& a) { v[0]+=a.v[0]; v[1]+=a.v[1]; return *this; } Vector operator+(const Vector& a, const Vector& b) { Vector r=a; r+=b; return r; } Vector& Vector::operator-=(const Vector& a) { v[0]-=a.v[0]; v[1]-=a.v[1]; return *this; } Vector operator-(const Vector& a, const Vector& b) { Vector r=a; r-=b; return r; } Vector& Vector::operator*=(double f) { v[0]*=f; v[1]*=f; return *this; } Vector operator*(const Vector& a, double b) { Vector r=a; r*=b; return r; } Vector& Vector::operator/=(double f) { v[0]/=f; v[1]/=f; return *this; } Vector operator/(const Vector& a, double b) { Vector r=a; r/=b; return r; } double operator*(const Vector& a, const Vector& b) // 2D dot product { double r = 0; for (int i=0; i<2; i++) r += a.v[i]*b.v[i]; return r; } Vector Vector::normalize() // 2D normalize { Vector r = *this; double d = sqrt(v[0]*v[0]+v[1]*v[1]); if (d) { r[0] /= d; r[1] /= d; } else { r[0] = 0; r[1] = 0; } return r; } Vector Vector::abs() // absolute value { Vector r; r[0] = fabs(v[0]); r[1] = fabs(v[1]); r[2] = 1; return r; } double Vector::length() { return sqrt(v[0]*v[0] + v[1]*v[1]); } double Vector::angle() { return atan2(v[1],v[0]); } double Vector::avg() { return (v[0]+v[1])/2; } double Vector::max() { return v[0]>v[1]?v[0]:v[1]; } double Vector::min() { return v[0]>(istream& s, Vector& v) { s >> v.v[0] >> v.v[1]; return s; } Vector cross(Vector& a, Vector& b) { return Vector(a[1]*b[2]-b[1]*a[2], a[2]*b[0]-b[2]*a[0], a[0]*b[1]-b[0]*a[1]); } // the following are not valid for 2D graphics: Vector& Vector::div(double f) { v[0]/=f; v[1]/=f; v[2]/=f; return *this; } Vector& Vector::minus(const Vector& a) { v[0]-=a.v[0]; v[1]-=a.v[1]; v[2]-=a.v[2]; return *this; } Vector mult(const Vector& a, double f) { Vector r = a; r.v[0]*= f; r.v[1]*= f; r.v[2]*= f; return r; } Vector& Vector::operator*=(const Vector& b) { v[0]*=b.v[0]; v[1]*=b.v[1]; v[2]=1; return *this; } Vector& Vector::operator/=(const Vector& b) { v[0]/=b.v[0]; v[1]/=b.v[1]; v[2]=1; return *this; } // Vertex Vertex::Vertex() { next_ = NULL; previous_ = NULL; } Vertex::Vertex(double x, double y) { vector = Vector(x,y); next_ = NULL; previous_ = NULL; } Vertex::Vertex(const Vector& a) { vector = a; next_ = NULL; previous_ = NULL; } ostream& operator<<(ostream& s, const Vertex& v) { s << v.vector; return s; } // Matrix Matrix::Matrix() { for (int i=0; i<3; i++) for (int j=0; j<3; j++) m[i][j] = (i==j ? 1 : 0); } Matrix::Matrix(const Matrix& a) { for (int i=0; i<3; i++) for (int j=0; j<3; j++) m[i][j] = a.m[i][j]; } Matrix& Matrix::operator=(const Matrix& a) { for (int i=0; i<3; i++) for (int j=0; j<3; j++) m[i][j] = a.m[i][j]; return *this; } Matrix::Matrix(const Vector& v0, const Vector& v1, const Vector& v2) { int i; for (i=0; i<3; i++) m[0][i] = v0.v[i]; for (i=0; i<3; i++) m[1][i] = v1.v[i]; for (i=0; i<3; i++) m[2][i] = v2.v[i]; } Matrix::Matrix(double a, double b, double c, double d, double e, double f) { m[0][0]=a; m[0][1]=b; m[0][2]=0; m[1][0]=c; m[1][1]=d; m[1][2]=0; m[2][0]=e; m[2][1]=f; m[2][2]=1; } Matrix& Matrix::identity() { for (int i=0; i<3; i++) for (int j=0; j<3; j++) m[i][j] = (i==j ? 1 : 0); return *this; } int Matrix::isIdentity() { return ((m[0][0]==1) && (m[0][1]==0) && (m[0][2]==0) && (m[1][0]==0) && (m[1][1]==1) && (m[1][2]==0) && (m[2][0]==0) && (m[2][1]==0) && (m[2][2]==1)); } Matrix Matrix::abs() { Matrix r; r.m[0][0] = fabs(m[0][0]); r.m[1][1] = fabs(m[1][1]); return r; } Matrix& Matrix::operator*=(double a) { for (int i=0; i<3; i++) for (int j=0; j<3; j++) m[i][j] *= a; return *this; } Matrix& Matrix::operator/=(double a) { for (int i=0; i<3; i++) for (int j=0; j<3; j++) m[i][j] /= a; return *this; } Matrix& Matrix::operator*=(const Matrix& a) { Matrix r; for (int i=0; i<3; i++) for (int j=0; j<3; j++) r.m[i][j] = m[i][0]*a.m[0][j] + m[i][1]*a.m[1][j] + m[i][2]*a.m[2][j]; return *this=r; } Matrix Matrix::invert() { // Method of Row Reduction-- Calculus and Analylic Geometry, A-13 Matrix r; // identy matrix Vector m0 = m[0]; Vector m1 = m[1]; Vector m2 = m[2]; Vector r0 = r[0]; Vector r1 = r[1]; Vector r2 = r[2]; // check for 0 in m[0], swap rows 0 and 1 if so. // this seems to be a problem only in the case of rotation of 90/270 degress if ((m0[0]==0) || (m0[0]>0 && m0[0]-DBL_EPSILON)) { Vector tm0 = m0; Vector tr0 = r0; m0 = m1; r0 = r1; m1 = tm0; r1 = tr0; } // scale first row by 1/m0[0] r0.div(m0[0]); m0.div(m0[0]); // zero out m1[0] and m2[0] r1.minus(mult(r0,m1[0])); m1.minus(mult(m0,m1[0])); r2.minus(mult(r0,m2[0])); m2.minus(mult(m0,m2[0])); // scale second row by 1/m1[1] r1.div(m1[1]); m1.div(m1[1]); // zero out m0[1] and m2[1] r0.minus(mult(r1,m0[1])); m0.minus(mult(m1,m0[1])); r2.minus(mult(r1,m2[1])); m2.minus(mult(m1,m2[1])); // scale third row by 1/m[2] r2.div(m2[2]); m2.div(m2[2]); // and zero out m0[2] and m1[2] r0.minus(mult(r2,m0[2])); m0.minus(mult(m2,m0[2])); r1.minus(mult(r2,m1[2])); m2.minus(mult(m2,m1[2])); return Matrix(r0,r1,r2); } Matrix Matrix::invert2() { Matrix cc = this->cofactor(); Matrix aa = cc.adjoint(); double det = m[0][0]*aa.m[0][0] + m[0][1]*aa.m[1][0] + m[0][2]*aa.m[2][0]; Matrix rr; for (int ii=0; ii<3; ii++ ) for (int jj=0; jj<3; jj++) rr.m[ii][jj] = aa.m[ii][jj]/det; return rr; } Matrix Matrix::cofactor() { Matrix rr; rr.m[0][0] = +(m[1][1]*m[2][2]-m[1][2]*m[2][1]); rr.m[0][1] = -(m[1][0]*m[2][2]-m[1][2]*m[2][0]); rr.m[0][2] = +(m[1][0]*m[2][1]-m[1][1]*m[2][0]); rr.m[1][0] = -(m[0][1]*m[2][2]-m[0][2]*m[2][1]); rr.m[1][1] = +(m[0][0]*m[2][2]-m[0][2]*m[2][0]); rr.m[1][2] = -(m[0][0]*m[2][1]-m[0][1]*m[2][0]); rr.m[2][0] = +(m[0][1]*m[1][2]-m[0][2]*m[1][1]); rr.m[2][1] = -(m[0][0]*m[1][2]-m[0][2]*m[1][0]); rr.m[2][2] = +(m[0][0]*m[1][1]-m[0][1]*m[1][0]); return rr; } Matrix Matrix::adjoint() { Matrix rr; for (int ii=0; ii<3; ii++) for (int jj=0; jj<3; jj++) rr.m[jj][ii] = m[ii][jj]; return rr; } Matrix operator*(const Matrix& a, double b) { Matrix r=a; return r*=b; } Matrix operator/(const Matrix& a, double b) { Matrix r=a; return r/=b; } Matrix operator*(const Matrix& a, const Matrix& b) { Matrix r=a; return r*=b; } Vector Matrix::operator[](int i) { return Vector(m[i]); } ostream& operator<<(ostream& s, const Matrix& m) { s << ' '; for (int i=0; i<3; i++) for (int j=0; j<2; j++) s << m.m[i][j] << ' '; return s; } istream& operator>>(istream& s, Matrix& m) { for (int i=0; i<3; i++ ) for (int j=0; j<2; j++) s >> m.m[i][j]; return s; } // Translate Translate::Translate(double x, double y) : Matrix() { m[2][0]=x; m[2][1]=y; } Translate::Translate(const Vector& v) : Matrix() { m[2][0]=v.v[0]; m[2][1]=v.v[1]; } Translate::Translate(const Matrix& a) : Matrix() { m[2][0] = a.m[2][0]; m[2][1] = a.m[2][1]; } Translate& Translate::operator=(const Matrix& a) { m[2][0] = a.m[2][0]; m[2][1] = a.m[2][1]; return *this; } ostream& operator<<(ostream& s, const Translate& m) { s << ' ' << m.m[2][0] << ' ' << m.m[2][1] << ' '; return s; } istream& operator>>(istream& s, Translate& m) { s >> m.m[2][0] >> m.m[2][1]; return s; } // Rotate Rotate::Rotate(double a) : Matrix() { // note: signs reverse for X-Windows (origin is upper left) m[0][0] = cos(a); m[0][1] = -sin(a); m[1][0] = sin(a); m[1][1] = cos(a); // this fixes a problem with numbers too small and tring to invert the matrix if ((m[0][0]>0 && m[0][0]-DBL_EPSILON)) m[0][0] = 0; if ((m[0][1]>0 && m[0][1]-DBL_EPSILON)) m[0][1] = 0; if ((m[1][0]>0 && m[1][0]-DBL_EPSILON)) m[1][0] = 0; if ((m[1][1]>0 && m[1][1]-DBL_EPSILON)) m[1][1] = 0; } Rotate::Rotate(double a, double b, double c, double d) : Matrix() { m[0][0] = a; m[0][1] = b; m[1][0] = c; m[1][1] = d; } Rotate::Rotate(const Matrix& a) : Matrix() { for (int i=0; i<2; i++) for (int j=0; j<2; j++) m[i][j] = a.m[i][j]; } Rotate& Rotate::operator=(const Matrix& a) { for (int i=0; i<2; i++) for (int j=0; j<2; j++) m[i][j] = a.m[i][j]; return *this; } ostream& operator<<(ostream& s, const Rotate& m) { s << ' ' << m.m[0][0] << ' ' << m.m[0][1] << ' ' << m.m[1][0] << ' ' << m.m[1][1] << ' '; return s; } istream& operator>>(istream& s, Rotate& m) { s >> m.m[0][0] >> m.m[0][1] >> m.m[1][0] >> m.m[1][1]; return s; } // Scale Scale::Scale(double a) : Matrix() { m[0][0]=a; m[1][1]=a; } Scale::Scale(double a, double b) : Matrix() { m[0][0]=a; m[1][1]=b; } Scale::Scale(const Vector& v) : Matrix() { m[0][0]=v.v[0]; m[1][1]=v.v[1]; } Scale::Scale(const Matrix& a) : Matrix() { m[0][0] = a.m[0][0]; m[1][1] = a.m[1][1]; } Scale& Scale::operator=(const Matrix& a) { m[0][0] = a.m[0][0]; m[1][1] = a.m[1][1]; return *this; } ostream& operator<<(ostream& s, const Scale& m) { s << ' ' << m.m[0][0] << ' ' << m.m[1][1] << ' '; return s; } istream& operator>>(istream& s, Scale& m) { s >> m.m[0][0] >> m.m[1][1]; return s; } // Flip FlipX::FlipX() : Matrix() { m[0][0] = -1; } FlipY::FlipY() : Matrix() { m[1][1] = -1; } FlipXY::FlipXY() : Matrix() { m[0][0] = -1; m[1][1] = -1; } // BBox BBox::BBox(double a, double b, double c, double d) { // we want a 'positive' box ll.v[0] = a < c ? a : c; ll.v[1] = b < d ? b : d; ur.v[0] = a < c ? c : a; ur.v[1] = b < d ? d : b; } BBox::BBox(double w, double h) { ll.v[0] = 0; ll.v[1] = 0; ur.v[0] = w; ur.v[1] = h; } BBox::BBox(const Vector& l, const Vector& h) { // we want a 'positive' box ll.v[0] = l.v[0] < h.v[0] ? l.v[0] : h.v[0]; ll.v[1] = l.v[1] < h.v[1] ? l.v[1] : h.v[1]; ur.v[0] = l.v[0] < h.v[0] ? h.v[0] : l.v[0]; ur.v[1] = l.v[1] < h.v[1] ? h.v[1] : l.v[1]; } BBox::BBox(const Vector& v) { ll = v; ur = v; } BBox& BBox::operator+=(const Vector& v) { ll+=v; ur+=v; return *this; } BBox operator+(const BBox& b, const Vector& v) { BBox r=b; r+=v; return r; } BBox& BBox::operator-=(const Vector& a) { ll-=a; ur-=a; return *this; } BBox operator-(const BBox& b, const Vector& v) { BBox r=b; r-=v; return r; } int BBox::isIn(const Vector& v) const { if (v.v[0] < ll.v[0] || v.v[1] < ll.v[1] || v.v[0] > ur.v[0] || v.v[1] > ur.v[1]) return 0; else return 1; } int BBox::isIn(const BBox& bb) const { // return 0 if outside, > 0 if intersection // = 4 if inside BBox b = bb; return isIn(b.ll) + isIn(b.ur) + isIn(b.ul()) + isIn(b.lr()); } int BBox::isEmpty() const { Vector v = ur-ll; return (v[0]==0 && v[1]==0); } Vector BBox::center() { return (ur-ll)/2 + ll; } Vector BBox::size() { return ur - ll; } BBox& BBox::operator*=(const Matrix& m) { ll *= m; ur *= m; return *this; } BBox operator*(const BBox& bb, const Matrix& m) { BBox r = bb; r*=m; return r; } BBox& BBox::expand(double a) { ll -= Vector(a,a); ur += Vector(a,a); return *this; } BBox& BBox::expand(const Vector& v) { ll -= v; ur += v; return *this; } BBox& BBox::shrink(double a) { ll += Vector(a,a); ur -= Vector(a,a); return *this; } BBox& BBox::shrink(const Vector& v) { ll += v; ur -= v; return *this; } BBox& BBox::bound(const Vector& v) { if (v.v[0] < ll[0]) ll[0] = v.v[0]; if (v.v[1] < ll[1]) ll[1] = v.v[1]; if (v.v[0] > ur[0]) ur[0] = v.v[0]; if (v.v[1] > ur[1]) ur[1] = v.v[1]; return *this; } BBox& BBox::bound(BBox b) { this->bound(b.ll); this->bound(b.lr()); this->bound(b.ur); this->bound(b.ul()); return *this; } BBox intersect(const BBox& a, const BBox& b) { // test for obvious int ab = a.isIn(b); int ba = b.isIn(a); // we are missing a case here! two bbox's that cross if (ab==0 && ba == 0) // outside each other return BBox(); if (ab == 4) // b is inside a return b; if (ba == 4) // a is inside b return a; // else, there seems to be some overlap BBox r; r.ll.v[0] = (a.ll.v[0] > b.ll.v[0]) ? a.ll.v[0] : b.ll.v[0]; r.ll.v[1] = (a.ll.v[1] > b.ll.v[1]) ? a.ll.v[1] : b.ll.v[1]; r.ur.v[0] = (a.ur.v[0] < b.ur.v[0]) ? a.ur.v[0] : b.ur.v[0]; r.ur.v[1] = (a.ur.v[1] < b.ur.v[1]) ? a.ur.v[1] : b.ur.v[1]; return r; } ostream& operator<<(ostream& s, const BBox& b) { s << b.ll << b.ur; return s; } saods9/tksao/vector/vectorold.h000644 000765 000000 00000015502 12705446252 017173 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __vector_h__ #define __vector_h__ #include #include #include using namespace std; #include class Vector; class Vertex; class Matrix; class Translate; class Rotate; class Scale; class FlipX; class FlipY; class FlipXY; class BBox; class Vector { friend class Matrix; friend class Translate; friend class Scale; friend class BBox; public: double v[3]; public: Vector() {v[0]=0;v[1]=0;v[2]=1;} // constructor Vector(double* f) {v[0]=f[0];v[1]=f[1];v[2]=f[2];} // constructor Vector(double x, double y) {v[0]=x;v[1]=y;v[2]=1;} // constructor Vector(double x, double y, double z) {v[0]=x;v[1]=y;v[2]=z;} // constructor Vector(const Vector& a) {v[0]=a.v[0];v[1]=a.v[1];v[2]=a.v[2];} // copy Vector& operator=(const Vector& a) {v[0]=a.v[0];v[1]=a.v[1];v[2]=a.v[2];return *this;} double& operator[](int i) {return v[i];} Vector abs(); double length(); double angle(); double avg(); double max(); double min(); Vector round(); Vector floor(); Vector ceil(); Vector invert(); Vector normalize(); Vector TkCanvasPs(Tk_Canvas); friend Vector operator-(const Vector&); // unary minus friend Vector operator*(const Vector&, const Matrix&); // vector/matrix mult friend double operator*(const Vector&, const Vector&); // dot product friend ostream& operator<<(ostream&, const Vector&); friend istream& operator>>(istream&, Vector&); Vector& operator+=(const Vector&); // addition Vector& operator-=(const Vector&); // subtraction Vector& operator*=(double); // scalar multipy Vector& operator/=(double); // scalar division Vector& operator*=(const Matrix&); // vector multiply friend BBox intersect(const BBox&, const BBox&); // the following are not valid for 2D graphics: Vector& div(double); Vector& minus(const Vector&); friend Vector mult(const Vector&, double); Vector& operator*=(const Vector&); Vector& operator/=(const Vector&); }; Vector operator+(const Vector&, const Vector&); // addition Vector operator-(const Vector&, const Vector&); // subtration Vector operator*(const Vector&, double); // scalar multiply Vector operator/(const Vector&, double); // scalar division Vector cross(Vector&, Vector&); class Vertex { public: Vector vector; private: Vertex* next_; Vertex* previous_; public: Vertex(); Vertex(double, double); Vertex(const Vector&); Vertex* next() {return next_;} Vertex* previous() {return previous_;} void setNext(Vertex* v) {next_ = v;} void setPrevious(Vertex* v) {previous_ = v;} friend ostream& operator<<(ostream&, const Vertex&); }; class Matrix { friend class Vector; friend class Translate; friend class Rotate; friend class Scale; protected: double m[3][3]; public: Matrix(); // constructor Matrix(const Vector&, const Vector&, const Vector&); // constructor Matrix(double, double, double, double, double, double); Matrix(const Matrix&); // copy constructor Matrix& operator=(const Matrix&); // assignment Vector operator[](int); // return row double matrix(int i, int j) {return m[i][j];} // return element Matrix& operator*=(double); // scalar multiply Matrix& operator/=(double); // scalar division Matrix& operator*=(const Matrix&); // matrix multiply Matrix invert(); // matrix inverse Matrix invert2(); Matrix cofactor(); Matrix adjoint(); Matrix abs(); // returns abs with no translation Matrix& identity(); // sets to identity matrix; int isIdentity(); double* mm() {return (double*)m;} friend Vector operator*(const Vector&, const Matrix&); // vector/matrix mult friend ostream& operator<<(ostream&, const Matrix&); friend istream& operator>>(istream&, Matrix&); }; Matrix operator*(const Matrix&, double); // scalar multiply Matrix operator/(const Matrix&, double); // scalar division Matrix operator*(const Matrix&, const Matrix&); // matrix multiply class Translate : public Matrix { public: Translate() {}; // constructor Translate(double, double); // constructor Translate(const Vector&); // constructor Translate(const Matrix&); // copy constructor Translate& operator=(const Matrix&); // assignment friend ostream& operator<<(ostream&, const Translate&); friend istream& operator>>(istream&, Translate&); }; class Rotate : public Matrix { public: Rotate() {}; // constructor Rotate(double); // constructor Rotate(double, double, double, double); // constructor Rotate(const Matrix&); // copy constructor Rotate& operator=(const Matrix&); // assignment friend ostream& operator<<(ostream&, const Rotate&); friend istream& operator>>(istream&, Rotate&); }; class Scale : public Matrix { public: Scale() {}; // constructor Scale(double); // constructor Scale(double, double); // constructor Scale(const Vector&); // constructor Scale(const Matrix&); // copy constructor Scale& operator=(const Matrix&); // assignment friend ostream& operator<<(ostream&, const Scale&); friend istream& operator>>(istream&, Scale&); }; class FlipX : public Matrix { public: FlipX(); // constructor }; class FlipY : public Matrix { public: FlipY(); // constructor }; class FlipXY : public Matrix { public: FlipXY(); // constructor }; class BBox { public: Vector ll; Vector ur; public: BBox() {} BBox(const Vector&, const Vector&); BBox(const Vector&); BBox(double, double); BBox(double, double, double, double); BBox& operator+=(const Vector&); // addition BBox& operator-=(const Vector&); // subtraction BBox& operator*=(const Matrix&); // multiplication int isIn(const Vector&) const; int isIn(const BBox&) const; int isEmpty() const; Vector center(); Vector size(); Vector lr() {return Vector(ur[0],ll[1]);} Vector ul() {return Vector(ll[0],ur[1]);} BBox& expand(double); BBox& expand(const Vector&); BBox& shrink(double); BBox& shrink(const Vector&); BBox& bound(const Vector&); BBox& bound(BBox); friend ostream& operator<<(ostream&, const BBox&); }; BBox operator+(const BBox&, const Vector&); // addition BBox operator-(const BBox&, const Vector&); // subtraction BBox operator*(const BBox&, const Matrix&); BBox intersect(const BBox&, const BBox&); #endif saods9/tksao/util/attribute.C000644 000765 000000 00000011061 12705446252 016577 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "attribute.h" #include "util.h" #include "widget.h" Attribute::Attribute(Widget* p) : parent(p) { style_ = SOLID; width_ = 1; font_ = 2; // helvetica normal roman size_ = 10; tkfont_ = NULL; psfont_ = NULL; initFonts(); colour_ = 0xffffff; // white colorName_ = dupstr("white"); color_ = parent->getColor("white"); } Attribute::~Attribute() { if (tkfont_) Tk_FreeFont(tkfont_); if (psfont_) Tk_FreeFont(psfont_); if (colorName_) delete [] colorName_; } void Attribute::setStyle(double v) { switch ((int)v) { case SOLID: case DASH: break; default: return; } style_ = (Style)((int)v); } void Attribute::setWidth(double v) { if (v>0) width_ = v; else width_ = 1; } void Attribute::setSize(double v) { if (v >= 1) { #ifdef MAC_OSX_TK size_ = int(v*parent->getDisplayRatio()); #else size_ = (int)v; #endif initFonts(); } } void Attribute::setFont(double v) { font_ = (int)v; initFonts(); } void Attribute::initFonts() { if (tkfont_) Tk_FreeFont(tkfont_); tkfont_ = NULL; if (psfont_) Tk_FreeFont(psfont_); psfont_ = NULL; WidgetOptions* opts = parent->options; ostringstream fstr; ostringstream pstr; switch (font_) { case 0: case 2: case 3: fstr << '{' << opts->helvetica << '}' << ' ' << size_ << " normal roman" << ends; pstr << "helvetica " << size_ << " normal roman" << ends; break; case 1: fstr << '{' << opts->times << '}' << ' ' << size_ << " normal roman" << ends; pstr << "times " << size_ << " normal roman" << ends; break; case 4: fstr << '{' << opts->courier << '}' << ' ' << size_ << " normal roman" << ends; pstr << "courier " << size_ << " normal roman" << ends; break; case 10: case 12: case 13: fstr << '{' << opts->helvetica << '}' << ' ' << size_ << " bold roman" << ends; pstr << "helvetica " << size_ << " bold roman" << ends; break; case 11: fstr << '{' << opts->times << '}' << ' ' << size_ << " bold roman" << ends; pstr << "times " << size_ << " bold roman" << ends; break; case 14: fstr << '{' << opts->courier << '}' << ' ' << size_ << " bold roman" << ends; pstr << "courier " << size_ << " bold roman" << ends; break; case 20: case 22: case 23: fstr << '{' << opts->helvetica << '}' << ' ' << size_ << " normal italic" << ends; pstr << "helvetica " << size_ << " normal italic" << ends; break; case 21: fstr << '{' << opts->times << '}' << ' ' << size_ << " normal italic" << ends; pstr << "times " << size_ << " normal italic" << ends; break; case 24: fstr << '{' << opts->courier << '}' << ' ' << size_ << " normal italic" << ends; pstr << "courier " << size_ << " normal italic" << ends; break; case 30: case 32: case 33: fstr << '{' << opts->helvetica << '}' << ' ' << size_ << " bold italic" << ends; pstr << "helvetica " << size_ << " bold italic" << ends; break; case 31: fstr << '{' << opts->times << '}' << ' ' << size_ << " bold italic" << ends; pstr << "times " << size_ << " bold italic" << ends; break; case 34: fstr << '{' << opts->courier << '}' << ' ' << size_ << " bold italic" << ends; pstr << "courier " << size_ << " bold italic" << ends; break; default: fstr << '{' << opts->helvetica << '}' << ' ' << size_ << " normal roman" << ends; pstr << "helvetica " << size_ << " normal roman" << ends; font_ = 2; break; } tkfont_ = Tk_GetFont(parent->getInterp(), parent->getTkwin(), fstr.str().c_str()); psfont_ = Tk_GetFont(parent->getInterp(), parent->getTkwin(), pstr.str().c_str()); } void Attribute::setColour(double v) { if (v == colour_) return; if (colorName_) delete [] colorName_; colorName_ = NULL; // still provide backward compatibility for old color scheme if (v==1) colour_ = (int)0xffffff; // white else if (v==2) colour_ = (int)0xff0000; // red else if (v==3) colour_ = (int)0x00ff00; // green else if (v==4) colour_ = (int)0x0000ff; // blue else if (v==5) colour_ = (int)0x00ffff; // cyan else if (v==6) colour_ = (int)0xff00ff; // magneta else if (v==7) colour_ = (int)0xffff00; // yellow else colour_ = (int)v; ostringstream str; str << '#' << setw(6) << setfill('0') << hex << colour_ << ends; colorName_ = dupstr(str.str().c_str()); color_ = parent->getColor(str.str().c_str()); } saods9/tksao/util/attribute.h000644 000765 000000 00000002151 12705446252 016644 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __attribute_h__ #define __attribute_h__ #include #include "vector.h" class Widget; class Attribute { public: enum Style {SOLID,DASH}; enum Colour {BLACK,WHITE,RED,GREEN,BLUE,CYAN,MAGENTA,YELLOW}; private: Widget* parent; Style style_; float width_; int font_; int size_; Tk_Font tkfont_; Tk_Font psfont_; unsigned long colour_; char* colorName_; unsigned long color_; private: void initFonts(); public: Attribute(Widget*); ~Attribute(); void setStyle(double); void setWidth(double); void setSize(double); void setFont(double); void setColour(double); Style style() {return style_;} float width() {return width_;} int size() {return size_;} int font() {return font_;} Tk_Font tkfont() {return tkfont_;} Tk_Font psfont() {return psfont_;} unsigned long colour() {return colour_;} char* colorName() {return colorName_;} unsigned long color() {return color_;} }; #endif saods9/tksao/util/fdstream.hpp000644 000765 000000 00000011234 07611565102 017004 0ustar00joyewheel000000 000000 /* The following code declares classes to read from and write to * file descriptore or file handles. * * See * http://www.josuttis.com/cppcode * for details and the latest version. * * - open: * - integrating BUFSIZ on some systems? * - optimized reading of multiple characters * - stream for reading AND writing * - i18n * * (C) Copyright Nicolai M. Josuttis 2001. * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. * * Version: Jul 28, 2002 * History: * Jul 28, 2002: bugfix memcpy() => memmove() * fdinbuf::underflow(): cast for return statements * Aug 05, 2001: first public version */ #ifndef BOOST_FDSTREAM_HPP #define BOOST_FDSTREAM_HPP #include #include #include // for EOF: #include // for memmove(): #include // low-level read and write functions #ifdef _MSC_VER # include #else # include //extern "C" { // int write (int fd, const char* buf, int num); // int read (int fd, char* buf, int num); //} #endif // BEGIN namespace BOOST namespace boost { /************************************************************ * fdostream * - a stream that writes on a file descriptor ************************************************************/ class fdoutbuf : public std::streambuf { protected: int fd; // file descriptor public: // constructor fdoutbuf (int _fd) : fd(_fd) { } protected: // write one character virtual int_type overflow (int_type c) { if (c != EOF) { char z = c; if (write (fd, &z, 1) != 1) { return EOF; } } return c; } // write multiple characters virtual std::streamsize xsputn (const char* s, std::streamsize num) { return write(fd,s,num); } }; class fdostream : public std::ostream { protected: fdoutbuf buf; public: fdostream (int fd) : std::ostream(0), buf(fd) { rdbuf(&buf); } }; /************************************************************ * fdistream * - a stream that reads on a file descriptor ************************************************************/ class fdinbuf : public std::streambuf { protected: int fd; // file descriptor protected: /* data buffer: * - at most, pbSize characters in putback area plus * - at most, bufSize characters in ordinary read buffer */ static const int pbSize = 4; // size of putback area static const int bufSize = 1024; // size of the data buffer char buffer[bufSize+pbSize]; // data buffer public: /* constructor * - initialize file descriptor * - initialize empty data buffer * - no putback area * => force underflow() */ fdinbuf (int _fd) : fd(_fd) { setg (buffer+pbSize, // beginning of putback area buffer+pbSize, // read position buffer+pbSize); // end position } protected: // insert new characters into the buffer virtual int_type underflow () { #ifndef _MSC_VER using std::memmove; #endif // is read position before end of buffer? if (gptr() < egptr()) { return traits_type::to_int_type(*gptr()); } /* process size of putback area * - use number of characters read * - but at most size of putback area */ int numPutback; numPutback = gptr() - eback(); if (numPutback > pbSize) { numPutback = pbSize; } /* copy up to pbSize characters previously read into * the putback area */ memmove (buffer+(pbSize-numPutback), gptr()-numPutback, numPutback); // read at most bufSize new characters int num; num = read (fd, buffer+pbSize, bufSize); if (num <= 0) { // ERROR or EOF return EOF; } // reset buffer pointers setg (buffer+(pbSize-numPutback), // beginning of putback area buffer+pbSize, // read position buffer+pbSize+num); // end of buffer // return next character return traits_type::to_int_type(*gptr()); } }; class fdistream : public std::istream { protected: fdinbuf buf; public: fdistream (int fd) : std::istream(0), buf(fd) { rdbuf(&buf); } }; } // END namespace boost #endif /*BOOST_FDSTREAM_HPP*/ saods9/tksao/util/FlexLexer.h000644 000765 000000 00000014163 12032640000 016521 0ustar00joyewheel000000 000000 // -*-C++-*- // FlexLexer.h -- define interfaces for lexical analyzer classes generated // by flex // Copyright (c) 1993 The Regents of the University of California. // All rights reserved. // // This code is derived from software contributed to Berkeley by // Kent Williams and Tom Epperly. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // 1. Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // Neither the name of the University nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission. // THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR // IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE. // This file defines FlexLexer, an abstract class which specifies the // external interface provided to flex C++ lexer objects, and yyFlexLexer, // which defines a particular lexer class. // // If you want to create multiple lexer classes, you use the -P flag // to rename each yyFlexLexer to some other xxFlexLexer. You then // include in your other sources once per lexer class: // // #undef yyFlexLexer // #define yyFlexLexer xxFlexLexer // #include // // #undef yyFlexLexer // #define yyFlexLexer zzFlexLexer // #include // ... #ifndef __FLEX_LEXER_H // Never included before - need to define base class. #define __FLEX_LEXER_H #include # ifndef FLEX_STD # define FLEX_STD std:: # endif extern "C++" { struct yy_buffer_state; typedef int yy_state_type; class FlexLexer { public: virtual ~FlexLexer() { } const char* YYText() const { return yytext; } size_t YYLeng() const { return yyleng; } virtual void yy_switch_to_buffer( struct yy_buffer_state* new_buffer ) = 0; virtual struct yy_buffer_state* yy_create_buffer( FLEX_STD istream* s, int size ) = 0; virtual void yy_delete_buffer( struct yy_buffer_state* b ) = 0; virtual void yyrestart( FLEX_STD istream* s ) = 0; virtual int yylex() = 0; // Call yylex with new input/output sources. int yylex( FLEX_STD istream* new_in, FLEX_STD ostream* new_out = 0 ) { switch_streams( new_in, new_out ); return yylex(); } // Switch to new input/output streams. A nil stream pointer // indicates "keep the current one". virtual void switch_streams( FLEX_STD istream* new_in = 0, FLEX_STD ostream* new_out = 0 ) = 0; int lineno() const { return yylineno; } int debug() const { return yy_flex_debug; } void set_debug( int flag ) { yy_flex_debug = flag; } protected: char* yytext; size_t yyleng; int yylineno; // only maintained if you use %option yylineno int yy_flex_debug; // only has effect with -d or "%option debug" }; } #endif // FLEXLEXER_H #if defined(yyFlexLexer) || ! defined(yyFlexLexerOnce) // Either this is the first time through (yyFlexLexerOnce not defined), // or this is a repeated include to define a different flavor of // yyFlexLexer, as discussed in the flex manual. #define yyFlexLexerOnce extern "C++" { class yyFlexLexer : public FlexLexer { public: // arg_yyin and arg_yyout default to the cin and cout, but we // only make that assignment when initializing in yylex(). yyFlexLexer( FLEX_STD istream* arg_yyin = 0, FLEX_STD ostream* arg_yyout = 0 ); virtual ~yyFlexLexer(); void yy_switch_to_buffer( struct yy_buffer_state* new_buffer ); struct yy_buffer_state* yy_create_buffer( FLEX_STD istream* s, int size ); void yy_delete_buffer( struct yy_buffer_state* b ); void yyrestart( FLEX_STD istream* s ); void yypush_buffer_state( struct yy_buffer_state* new_buffer ); void yypop_buffer_state(); virtual int yylex(); virtual void switch_streams( FLEX_STD istream* new_in, FLEX_STD ostream* new_out = 0 ); virtual int yywrap(); void begin(int,int); protected: virtual size_t LexerInput( char* buf, size_t max_size ); virtual void LexerOutput( const char* buf, size_t size ); virtual void LexerError( const char* msg ); void yyunput( int c, char* buf_ptr ); int yyinput(); void yy_load_buffer_state(); void yy_init_buffer( struct yy_buffer_state* b, FLEX_STD istream* s ); void yy_flush_buffer( struct yy_buffer_state* b ); int yy_start_stack_ptr; int yy_start_stack_depth; int* yy_start_stack; void yy_push_state( int new_state ); void yy_pop_state(); int yy_top_state(); yy_state_type yy_get_previous_state(); yy_state_type yy_try_NUL_trans( yy_state_type current_state ); int yy_get_next_buffer(); FLEX_STD istream* yyin; // input source for default LexerInput FLEX_STD ostream* yyout; // output sink for default LexerOutput // yy_hold_char holds the character lost when yytext is formed. char yy_hold_char; // Number of characters read into yy_ch_buf. size_t yy_n_chars; // Points to current character in buffer. char* yy_c_buf_p; int yy_init; // whether we need to initialize int yy_start; // start state number // Flag which is used to allow yywrap()'s to do buffer switches // instead of setting up a fresh yyin. A bit of a hack ... int yy_did_buffer_switch_on_eof; size_t yy_buffer_stack_top; /**< index of top of stack. */ size_t yy_buffer_stack_max; /**< capacity of stack. */ struct yy_buffer_state ** yy_buffer_stack; /**< Stack as an array. */ void yyensure_buffer_stack(void); // The following are not always needed, but may be depending // on use of certain flex features (like REJECT or yymore()). yy_state_type yy_last_accepting_state; char* yy_last_accepting_cpos; yy_state_type* yy_state_buf; yy_state_type* yy_state_ptr; char* yy_full_match; int* yy_full_state; int yy_full_lp; int yy_lp; int yy_looking_for_trail_begin; int yy_more_flag; int yy_more_len; int yy_more_offset; int yy_prev_more_offset; }; } #endif // yyFlexLexer || ! yyFlexLexerOnce saods9/tksao/util/fuzzy.h000644 000765 000000 00000002004 12705446252 016025 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fuzzy_h__ #define __fuzzy_h__ #include #include #include using namespace std; #include inline void tzero(double* ff, const double epsilon= DBL_EPSILON) {if (*ff>=-epsilon && *ff<=epsilon) *ff = 0;} inline bool teq(const double f1, const double f2, const double epsilon= DBL_EPSILON) {return f1-f2 >= -epsilon && f1-f2 <= epsilon;} inline bool tlt(const double f1, const double f2, const double epsilon= DBL_EPSILON) {return f1-f2 < -epsilon;} inline bool tle(const double f1, const double f2, const double epsilon= DBL_EPSILON) {return f1-f2 <= -epsilon; } inline bool tgt(const double f1, const double f2, const double epsilon= DBL_EPSILON) {return f1-f2 > epsilon;} inline bool tge(const double f1, const double f2, const double epsilon= DBL_EPSILON) {return f1-f2 >= epsilon;} #endif saods9/tksao/util/grf.C000644 000765 000000 00000052300 12547273626 015362 0ustar00joyewheel000000 000000 extern "C" { #include "grf.h" } #include "grid2dbase.h" #include "grid25dbase.h" extern Grid2dBase* astGrid2dPtr; extern Grid25dBase* astGrid25dPtr; /* * Name: * astGFlush * * Purpose: * Flush all pending graphics to the output device * * Synopsis: * #include "grf.h" * int astGFlush( void ) * * Description: * This function ensures that the display device is up-to-date, * by flushing any pending graphics to the output device. * * Parameters: * None * * Returned Value: * A value of 0 is returned if an error occurrs, and 1 is returned * otherwise */ int astGFlush(void) { if (astGrid2dPtr) return astGrid2dPtr->gFlush(); else if (astGrid25dPtr) return astGrid25dPtr->gFlush(); return 0; } /* * Name: * astGLine * * Purpose: * Draw a polyline (i.e. a set of connected lines) * * Synopsis: * #include "grf.h" * int astGLine( int n, const float *x, const float *y ) * * Description: * This function displays lines joining the given positions * * Parameters: * n * The number of positions to be joined together * x * A pointer to an array holding the "n" x values * y * A pointer to an array holding the "n" y values * * Returned Value: * A value of 0 is returned if an error occurrs, and 1 is returned * otherwise * * Notes: * - Nothing is done if "n" is less than 2, or if a NULL pointer is * given for either "x" or "y" */ int astGLine(int n, const float *x, const float *y) { if (astGrid2dPtr) return astGrid2dPtr->gLine(n, (float*)x, (float*)y); else if (astGrid25dPtr) return astGrid25dPtr->gLine(n, (float*)x, (float*)y); return 0; } /* * Name: * astGQch * * Purpose: * Return the character height in world cooridnates * * Synopsis: * #include "grf.h" * int astGQch( float *chv, float *chh ) * * Description: * This function returns the heights of characters drawn vertically and * horizontally in world coordinates * * Parameters: * chv * A pointer to the double which is to receive the height of * characters drawn vertically. This will be an increment in the X * axis * chh * A pointer to the double which is to receive the height of * characters drawn vertically. This will be an increment in the Y * axis * * Returned Value: * A value of 0 is returned if an error occurrs, and 1 is returned * otherwise */ int astGQch(float *chv, float *chh) { if (astGrid2dPtr) return astGrid2dPtr->gQch(chv, chh); else if (astGrid25dPtr) return astGrid25dPtr->gQch(chv, chh); return 0; } /* * Name: * astGMark * * Purpose: * Draw a set of markers * * Synopsis: * #include "grf.h" * int astGMark( int n, const float *x, const float *y, int type ) * * Description: * This function displays markers at the given positions * * Parameters: * n * The number of markers to draw * x * A pointer to an array holding the "n" x values * y * A pointer to an array holding the "n" y values * type * An integer which can be used to indicate the type of marker symbol * required * * Returned Value: * A value of 0 is returned if an error occurrs, and 1 is returned * otherwise * * Notes: * - Nothing is done if "n" is less than 1, or if a NULL pointer is * given for either "x" or "y" * */ int astGMark(int n, const float *x, const float *y, int type) { if (astGrid2dPtr) return astGrid2dPtr->gMark(n, x, y, type); else if (astGrid25dPtr) return astGrid25dPtr->gMark(n, x, y, type); return 0; } /* * Name: * astGText * * Purpose: * Draw a character string * * Synopsis: * #include "grf.h" * int astGText( const char *text, float x, float y, const char *just, * float upx, float upy ) * * Description: * This function displays a character string at a given position * using a specified justification and up-vector * * Parameters: * text * Pointer to a null-terminated character string to be displayed * x * The reference x coordinate * y * The reference y coordinate * just * A character string which specifies the location within the * text string which is to be placed at the reference position * given by x and y. The first character may be 'T' for "top", * 'C' for "centre", or 'B' for "bottom", and specifies the * vertical location of the reference position. Note, "bottom" * corresponds to the base-line of normal text. Some characters * (eg "y", "g", "p", etc) descend below the base-line. The second * character may be 'L' for "left", 'C' for "centre", or 'R' * for "right", and specifies the horizontal location of the * reference position. If the string has less than 2 characters * then 'C' is used for the missing characters * upx * The x component of the up-vector for the text, in graphics world * coordinates. If necessary the supplied value should be negated * to ensure that positive values always refer to displacements from * left to right on the screen * upy * The y component of the up-vector for the text, in graphics world * coordinates. If necessary the supplied value should be negated * to ensure that positive values always refer to displacements from * bottom to top on the screen * * Returned Value: * A value of 0 is returned if an error occurrs, and 1 is returned * otherwise * * Notes: * - Any graphics within the rotated box enclosing the text are erased * - A NULL value for "just" causes a value of "CC" to be used * - Both "upx" and "upy" being zero causes an error * - Any unrecognised character in "just" causes an error */ int astGText(const char *text, float x, float y, const char *just, float upx, float upy) { if (astGrid2dPtr) return astGrid2dPtr->gText(text, x ,y, just, upx, upy); else if (astGrid25dPtr) return astGrid25dPtr->gText(text, x ,y, just, upx, upy); return 0; } /* * Name: * astGTxExt * * Purpose: * Get the extent of a character string * * Synopsis: * #include "grf.h" * int astGTxExt( const char *text, float x, float y, const char *just, * float upx, float upy, float *xb, float *yb ) * * Description: * This function returns the corners of a box which would enclose the * supplied character string if it were displayed using astGText * * The returned box INCLUDES any leading or trailing spaces * * Parameters: * text * Pointer to a null-terminated character string to be displayed * x * The reference x coordinate * y * The reference y coordinate * just * A character string which specifies the location within the * text string which is to be placed at the reference position * given by x and y. The first character may be 'T' for "top", * 'C' for "centre", or 'B' for "bottom", and specifies the * vertical location of the reference position. Note, "bottom" * corresponds to the base-line of normal text. Some characters * (eg "y", "g", "p", etc) descend below the base-line. The second * character may be 'L' for "left", 'C' for "centre", or 'R' * for "right", and specifies the horizontal location of the * reference position. If the string has less than 2 characters * then 'C' is used for the missing characters * upx * The x component of the up-vector for the text, in graphics world * coordinates. If necessary the supplied value should be negated * to ensure that positive values always refer to displacements from * left to right on the screen * upy * The y component of the up-vector for the text, in graphics world * coordinates. If necessary the supplied value should be negated * to ensure that positive values always refer to displacements from * bottom to top on the screen * xb * An array of 4 elements in which to return the x coordinate of * each corner of the bounding box * yb * An array of 4 elements in which to return the y coordinate of * each corner of the bounding box * * Returned Value: * A value of 0 is returned if an error occurrs, and 1 is returned * otherwise * * Notes: * - The order of the corners is anti-clockwise (in world coordinates) * starting at the bottom left * - A NULL value for "just" causes a value of "CC" to be used * - Both "upx" and "upy" being zero causes an error * - Any unrecognised character in "just" causes an error * - Zero is returned for all bounds of the box if an error occurs */ int astGTxExt(const char *text, float x, float y, const char *just, float upx, float upy, float *xb, float *yb) { if (astGrid2dPtr) return astGrid2dPtr->gTxExt(text, x, y, just, upx, upy, xb, yb); else if (astGrid25dPtr) return astGrid25dPtr->gTxExt(text, x, y, just, upx, upy, xb, yb); return 0; } /* * Name: * astGAttr * * Purpose: * Enquire or set a graphics attribute value * * Synopsis: * #include "grf.h" * int int astGAttr( int attr, double value, double *old_value, int prim ) * * Description: * This function returns the current value of a specified graphics * attribute, and optionally establishes a new value. The supplied * value is converted to an integer value if necessary before use * * Parameters: * attr * An integer value identifying the required attribute. The * following symbolic values are defined in grf.h: * * GRF__STYLE - Line style * GRF__WIDTH - Line width * GRF__SIZE - Character and marker size scale factor * GRF__FONT - Character font * GRF__COLOUR - Colour index * value * A new value to store for the attribute. If this is AST__BAD * no value is stored * old_value * A pointer to a double in which to return the attribute value * If this is NULL, no value is returned * prim * The sort of graphics primative to be drawn with the new attribute * Identified by the following values defined in grf.h: * GRF__LINE * GRF__MARK * GRF__TEXT * * Returned Value: * A value of 0 is returned if an error occurrs, and 1 is returned * otherwise * * Notes: */ int astGAttr(int attr, double value, double *old, int prim) { if (astGrid2dPtr) return astGrid2dPtr->gAttr(attr, value, old, prim); else if (astGrid25dPtr) return astGrid25dPtr->gAttr(attr, value, old, prim); return 0; } /* * Name: * astGScales * * Purpose: * Get the axis scales. * * Synopsis: * #include "grf.h" * int astGScales( float *alpha, float *beta ) * * Description: * This function returns two values (one for each axis) which scale * increments on the corresponding axis into a "normal" coordinate * system in which: * 1 - The axes have equal scale in terms of (for instance) * millimetres per unit distance. * 2 - X values increase from left to right. * 3 - Y values increase from bottom to top. * * Parameters: * alpha * A pointer to the location at which to return the scale for the * X axis (i.e. Xnorm = alpha*Xworld). * beta * A pointer to the location at which to return the scale for the * Y axis (i.e. Ynorm = beta*Yworld). * * Returned Value: * A value of 0 is returned if an error occurs, and 1 is returned * otherwise. */ int astGScales(float *alpha, float *beta) { if (astGrid2dPtr) return astGrid2dPtr->gScales(alpha,beta); else if (astGrid25dPtr) return astGrid25dPtr->gScales(alpha,beta); return 0; } /* * Name: * astGCap * * Purpose: * Indicate if this grf module has a given capability. * * Synopsis: * #include "grf.h" * int astGCap( int cap, int value ) * * Description: * This function is called by the AST Plot class to determine if the * grf module has a given capability, as indicated by the "cap" * argument. * * Parameters: * cap * The capability being inquired about. This will be one of the * following constants defined in grf.h: * * GRF__SCALES: This function should return a non-zero value if * it implements the astGScales function, and zero otherwise. The * supplied "value" argument should be ignored. * * GRF__MJUST: This function should return a non-zero value if * the astGText and astGTxExt functions recognise "M" as a * character in the justification string. If the first character of * a justification string is "M", then the text should be justified * with the given reference point at the bottom of the bounding box. * This is different to "B" justification, which requests that the * reference point be put on the baseline of the text, since some * characters hang down below the baseline. If the astGText or * astGTxExt function cannot differentiate between "M" and "B", * then this function should return zero, in which case "M" * justification will never be requested by Plot. The supplied * "value" argument should be ignored. * * GRF__ESC: This function should return a non-zero value if the * astGText and astGTxExt functions can recognise and interpret * graphics escape sequences within the supplied string. These * escape sequences are described below. Zero should be returned * if escape sequences cannot be interpreted (in which case the * Plot class will interpret them itself if needed). The supplied * "value" argument should be ignored only if escape sequences cannot * be interpreted by astGText and astGTxExt. Otherwise, "value" * indicates whether astGText and astGTxExt should interpret escape * sequences in subsequent calls. If "value" is non-zero then * escape sequences should be interpreted by astGText and * astGTxExt. Otherwise, they should be drawn as literal text. * * Returned Value: * The return value, as described above. Zero should be returned if * the supplied capability is not recognised. * * Escape Sequences: * Escape sequences are introduced into the text string by a percent * "%" character. The following escape sequences are currently recognised * ("..." represents a string of one or more decimal digits): * * %% - Print a literal "%" character (type GRF__ESPER ). * * %^...+ - Draw subsequent characters as super-scripts. The digits * "..." give the distance from the base-line of "normal" * text to the base-line of the super-script text, scaled * so that a value of "100" corresponds to the height of * "normal" text (type GRF__ESSUP ). * %^+ - Draw subsequent characters with the normal base-line. * * %v...+ - Draw subsequent characters as sub-scripts. The digits * "..." give the distance from the base-line of "normal" * text to the base-line of the sub-script text, scaled * so that a value of "100" corresponds to the height of * "normal" text (type GRF__ESSUB ). * * %v+ - Draw subsequent characters with the normal base-line * (equivalent to %^+). * * %>...+ - Leave a gap before drawing subsequent characters. * The digits "..." give the size of the gap, scaled * so that a value of "100" corresponds to the height of * "normal" text (type GRF__ESGAP ). * * %<...+ - Move backwards before drawing subsequent characters. * The digits "..." give the size of the movement, scaled * so that a value of "100" corresponds to the height of * "normal" text (type GRF_ESBAC). * * %s...+ - Change the Size attribute for subsequent characters. The * digits "..." give the new Size as a fraction of the * "normal" Size, scaled so that a value of "100" corresponds * to 1.0 (type GRF__ESSIZ ). * * %s+ - Reset the Size attribute to its "normal" value. * * %w...+ - Change the Width attribute for subsequent characters. The * digits "..." give the new width as a fraction of the * "normal" Width, scaled so that a value of "100" corresponds * to 1.0 (type GRF__ESWID ). * * %w+ - Reset the Size attribute to its "normal" value. * * %f...+ - Change the Font attribute for subsequent characters. The * digits "..." give the new Font value (type GRF__ESFON ). * * %f+ - Reset the Font attribute to its "normal" value. * * %c...+ - Change the Colour attribute for subsequent characters. The * digits "..." give the new Colour value (type GRF__ESCOL ). * * %c+ - Reset the Colour attribute to its "normal" value. * * %t...+ - Change the Style attribute for subsequent characters. The * digits "..." give the new Style value (type GRF__ESSTY ). * * %t+ - Reset the Style attribute to its "normal" value. * * %- - Push the current graphics attribute values onto the top of * the stack - see "%+" (type GRF__ESPSH). * * %+ - Pop attributes values of the top the stack - see "%-". If * the stack is empty, "normal" attribute values are restored * (type GRF__ESPOP). * * The astFindEscape function (in libast.a) can be used to locate escape * sequences within a text string. It has the following signature: * * #include "plot.h" * int astFindEscape( const char *text, int *type, int *value, int *nc ) * * Parameters: * text * Pointer to the string to be checked. * type * Pointer to a location at which to return the type of escape * sequence. Each type is identified by a symbolic constant defined * in grf.h and is indicated in the above section. The returned value * is undefined if the supplied text does not begin with an escape * sequence. * value * Pointer to a lcation at which to return the integer value * associated with the escape sequence. All usable values will be * positive. Zero is returned if the escape sequence has no associated * integer. A value of -1 indicates that the attribute identified by * "type" should be reset to its "normal" value (as established using * the astGAttr function, etc). The returned value is undefined if * the supplied text does not begin with an escape sequence. * nc * Pointer to a location at which to return the number of * characters read by this call. If the text starts with an escape * sequence, the returned value will be the number of characters in * the escape sequence. Otherwise, the returned value will be the * number of characters prior to the first escape sequence, or the * length of the supplied text if no escape sequence is found. * * Returned Value: * A non-zero value is returned if the supplied text starts with a * graphics escape sequence, and zero is returned otherwise. */ int astGCap(int cap, int value) { if (astGrid2dPtr) return astGrid2dPtr->gCap(cap,value); else if (astGrid25dPtr) return astGrid25dPtr->gCap(cap,value); return 0; } /* * Name: * astGBBuf * * Purpose: * Start a new graphics buffering context. * * Synopsis: * #include "grf.h" * int astGBBuf( void ) * * Description: * This function begins saving graphical output commands in an * internal buffer; the commands are held until a matching astGEBuf * call (or until the buffer is emptied by astGFlush). This can * greatly improve the efficiency of some graphics systems. astGBBuf * increments an internal counter, while astGEBuf decrements this * counter and flushes the buffer to the output device when the * counter drops to zero. astGBBuf and astGEBuf calls should always * be paired. * * Parameters: * None. * * Returned Value: * A value of 0 is returned if an error occurs, and 1 is returned * otherwise. * */ int astGBBuf(void) { return 1; } /* * Name: * astGEBuf * * Purpose: * End a graphics buffering context. * * Synopsis: * #include "grf.h" * int astGEBuf( void ) * * Description: * This function marks the end of a batch of graphical output begun * with the last call of astGBBuf. astGBBuf and astGEBUF calls should * always be paired. Each call to astGBBuf increments a counter, while * each call to astGEBuf decrements the counter. When the counter * reaches 0, the batch of output is written on the output device. * * Parameters: * None. * * Returned Value: * A value of 0 is returned if an error occurs, and 1 is returned * otherwise. * */ int astGEBuf(void) { return 1; } saods9/tksao/util/grf3d.C000644 000765 000000 00000043142 12545015743 015605 0ustar00joyewheel000000 000000 extern "C" { #include "grf3d.h" } #include "grid3dbase.h" extern Grid3dBase* astGrid3dPtr; /* * Name: * astG3DCap * * Purpose: * Indicate if this grf3d module has a given capability. * * Synopsis: * #include "grf3d.h" * int astG3DCap( int cap, int value ) * * Description: * This function is called by the AST Plot class to determine if the * grf3d module has a given capability, as indicated by the "cap" * argument. * * Parameters: * cap * The capability being inquired about. This will be one of the * following constants defined in grf3d.h: * * GRF3D__ESC: This function should return a non-zero value if the * astG3DText and astG3DTxExt functions can recognise and interpret * graphics escape sequences within the supplied string. These * escape sequences are described below. Zero should be returned * if escape sequences cannot be interpreted (in which case the * Plot class will interpret them itself if needed). The supplied * "value" argument should be ignored only if escape sequences cannot * be interpreted by astG3DText and astG3DTxExt. Otherwise, "value" * indicates whether astG3DText and astG3DTxExt should interpret escape * sequences in subsequent calls. If "value" is non-zero then * escape sequences should be interpreted by astG3DText and * astG3DTxExt. Otherwise, they should be drawn as literal text. * * Returned Value: * The return value, as described above. Zero should be returned if * the supplied capability is not recognised. * * Escape Sequences: * Escape sequences are introduced into the text string by a percent * "%" character. The following escape sequences are currently recognised * ("..." represents a string of one or more decimal digits): * * %% - Print a literal "%" character (type GRF__ESPER ). * * %^...+ - Draw subsequent characters as super-scripts. The digits * "..." give the distance from the base-line of "normal" * text to the base-line of the super-script text, scaled * so that a value of "100" corresponds to the height of * "normal" text (type GRF__ESSUP ). * %^+ - Draw subsequent characters with the normal base-line. * * %v...+ - Draw subsequent characters as sub-scripts. The digits * "..." give the distance from the base-line of "normal" * text to the base-line of the sub-script text, scaled * so that a value of "100" corresponds to the height of * "normal" text (type GRF__ESSUB ). * * %v+ - Draw subsequent characters with the normal base-line * (equivalent to %^+). * * %>...+ - Leave a gap before drawing subsequent characters. * The digits "..." give the size of the gap, scaled * so that a value of "100" corresponds to the height of * "normal" text (type GRF__ESGAP ). * * %<...+ - Move backwards before drawing subsequent characters. * The digits "..." give the size of the movement, scaled * so that a value of "100" corresponds to the height of * "normal" text (type GRF_ESBAC). * * %s...+ - Change the Size attribute for subsequent characters. The * digits "..." give the new Size as a fraction of the * "normal" Size, scaled so that a value of "100" corresponds * to 1.0 (type GRF__ESSIZ ). * * %s+ - Reset the Size attribute to its "normal" value. * * %w...+ - Change the Width attribute for subsequent characters. The * digits "..." give the new width as a fraction of the * "normal" Width, scaled so that a value of "100" corresponds * to 1.0 (type GRF__ESWID ). * * %w+ - Reset the Size attribute to its "normal" value. * * %f...+ - Change the Font attribute for subsequent characters. The * digits "..." give the new Font value (type GRF__ESFON ). * * %f+ - Reset the Font attribute to its "normal" value. * * %c...+ - Change the Colour attribute for subsequent characters. The * digits "..." give the new Colour value (type GRF__ESCOL ). * * %c+ - Reset the Colour attribute to its "normal" value. * * %t...+ - Change the Style attribute for subsequent characters. The * digits "..." give the new Style value (type GRF__ESSTY ). * * %t+ - Reset the Style attribute to its "normal" value. * * %- - Push the current graphics attribute values onto the top of * the stack - see "%+" (type GRF__ESPSH). * * %+ - Pop attributes values of the top the stack - see "%-". If * the stack is empty, "normal" attribute values are restored * (type GRF__ESPOP). * * The astFindEscape function (in libast.a) can be used to locate escape * sequences within a text string. It has the following signature: * * #include "plot.h" * int astFindEscape( const char *text, int *type, int *value, int *nc ) * * Parameters: * text * Pointer to the string to be checked. * type * Pointer to a location at which to return the type of escape * sequence. Each type is identified by a symbolic constant defined * in grf.h and is indicated in the above section. The returned value * is undefined if the supplied text does not begin with an escape * sequence. * value * Pointer to a lcation at which to return the integer value * associated with the escape sequence. All usable values will be * positive. Zero is returned if the escape sequence has no associated * integer. A value of -1 indicates that the attribute identified by * "type" should be reset to its "normal" value (as established using * the astG3DAttr function, etc). The returned value is undefined if * the supplied text does not begin with an escape sequence. * nc * Pointer to a location at which to return the number of * characters read by this call. If the text starts with an escape * sequence, the returned value will be the number of characters in * the escape sequence. Otherwise, the returned value will be the * number of characters prior to the first escape sequence, or the * length of the supplied text if no escape sequence is found. * * Returned Value: * A non-zero value is returned if the supplied text starts with a * graphics escape sequence, and zero is returned otherwise. * */ int astG3DCap(int cap, int value) { if (astGrid3dPtr) return astGrid3dPtr->gCap(cap, value); return 0; } /* * Name: * astG3DFlush * * Purpose: * Flush all pending graphics to the output device. * * Synopsis: * #include "grf3d.h" * int astG3DFlush( void ) * * Description: * This function ensures that the display device is up-to-date, * by flushing any pending graphics to the output device. * * Parameters: * None. * * Returned Value: * A value of 0 is returned if an error occurs, and 1 is returned * otherwise. * */ int astG3DFlush(void) { if (astGrid3dPtr) return astGrid3dPtr->gFlush(); return 0; } /* * Name: * astG3DLine * * Purpose: * Draw a polyline (i.e. a set of connected lines). * * Synopsis: * #include "grf3d.h" * int astG3DLine( int n, float *x, float *y, float *z ) * * Description: * This function displays lines joining the given positions. * * Parameters: * n * The number of positions to be joined together. * x * A pointer to an array holding the "n" x values. * y * A pointer to an array holding the "n" y values. * z * A pointer to an array holding the "n" z values. * * Returned Value: * A value of 0 is returned if an error occurs, and 1 is returned * otherwise. * * Notes: * - A camera must have been established prior to calling this * function using either astG3DSetCamera or astG3DAutoCamera. * - Nothing is done if "n" is less than 2, or if a NULL pointer is * given for either "x", "y" or "z". * */ int astG3DLine(int n, float *x, float *y, float *z) { if (astGrid3dPtr) return astGrid3dPtr->gLine(n, x, y, z); return 0; } /* * Name: * astG3DQch * * Purpose: * Return the character height in world coordinates. * * Synopsis: * #include "grf3d.h" * int astG3DQch( float *ch ) * * Description: * This function returns the height of characters drawn using astG3DText. * * Parameters: * ch * A pointer to the double which is to receive the height of * characters drawn with astG3DText. * * Returned Value: * A value of 0 is returned if an error occurs, and 1 is returned * otherwise. * * Notes: * - Since the 3D world coordinate axes are assumed to be equally * scaled, the height of text in world coordinate units is independent * of the orientation of the text. Therefore, this function returns * only one height value, unlike the equivalent 2D astGQch function * that returns two heights. */ int astG3DQch(float *ch) { if (astGrid3dPtr) return astGrid3dPtr->gQch(ch); return 0; } /* * Name: * astG3DMark * * Purpose: * Draw a set of markers. * * Synopsis: * #include "grf.h" * int astG3DMark( int n, float *x, float *y, float *z, int type, * float norm[3] ) * * Description: * This function draws markers centred at the given positions, on a * plane with a specified normal vector. * * Parameters: * n * The number of markers to draw. * x * A pointer to an array holding the "n" x values. * y * A pointer to an array holding the "n" y values. * z * A pointer to an array holding the "n" z values. * type * An integer which can be used to indicate the type of marker symbol * required. See the description of routine PGPT in the PGPLOT manual. * norm * The (x,y,z) components of a vector that is normal to the plane * containing the marker. The given vector passes through the marker * from the back to the front. If all components of this vector are * zero, then a normal vector pointing from the position of the * first marker towards the camera eye is used. * * Returned Value: * A value of 0 is returned if an error occurs, and 1 is returned * otherwise. * * Notes: * - Nothing is done if "n" is less than 1, or if a NULL pointer is * given for "x", "y" or "z". * */ int astG3DMark(int n, float *x, float *y, float *z, int type, float norm[3]) { if (astGrid3dPtr) return astGrid3dPtr->gMark(n, x, y, z, type, norm); return 0; } /* * Name: * astG3DText * * Purpose: * Draw a character string. * * Synopsis: * #include "grf3d.h" * int astG3DText( const char *text, float ref[3], const char *just, * float up[3], float norm[3] ) * * Description: * This function displays a character string at a given position * on a given plane in 3D world coords, using a specified * justification and up-vector. * * Parameters: * text * Pointer to a null-terminated character string to be displayed. * ref * The reference (x,y,z) coordinates. * just * A character string which specifies the location within the * text string which is to be placed at the reference position * given by x and y. The first character may be 'T' for "top", * 'C' for "centre", or 'B' for "bottom", and specifies the * vertical location of the reference position. Note, "bottom" * corresponds to the base-line of normal text. Some characters * (eg "y", "g", "p", etc) descend below the base-line. The second * character may be 'L' for "left", 'C' for "centre", or 'R' * for "right", and specifies the horizontal location of the * reference position. If the string has less than 2 characters * then 'C' is used for the missing characters. * up * The (x,y,z) up-vector for the text. The actual up vector used is * the projection of the supplied vector onto the plane specified by * "norm". * norm * The (x,y,z) components of a vector that is normal to the plane * containing the text. The given vector passes through the text * from the back to the front. If all components of this vector are * zero, then a normal vector pointing towards the camera eye is used. * * Returned Value: * A value of 0 is returned if an error occurs, and 1 is returned * otherwise. * * Notes: * - This routine does not recognise PGPLOT escape sequences. * - A NULL value for "just" causes a value of "CC" to be used. */ int astG3DText(const char *text, float ref[3], const char *just, float up[3], float norm[3] ) { if (astGrid3dPtr) return astGrid3dPtr->gText(text, ref, just, up, norm); return 0; } /* * Name: * astG3DTxExt * * Purpose: * Get the extent of a character string. * * Synopsis: * #include "grf3d.h" * int astG3DTxExt( const char *text, float ref[3], const char *just, * float up[3], float norm[3], float *xb, float *yb, * float *zb, float bl[3] ) * * Description: * This function returns the corners of a box which would enclose the * supplied character string if it were displayed using astG3DText. * * The returned box INCLUDES any leading or trailing spaces. * * Parameters: * text * Pointer to a null-terminated character string to be displayed. * ref * The reference (x,y,z) coordinates. * just * A character string which specifies the location within the * text string which is to be placed at the reference position * given by x and y. The first character may be 'T' for "top", * 'C' for "centre", 'B' for "baseline", or "M" for "bottom", and * specifies the vertical location of the reference position. Note, * "baseline" corresponds to the base-line of normal text. Some * characters (eg "y", "g", "p", etc) descend below the base-line, * and so "M" and "B" will produce different effects for such * characters. The second character may be 'L' for "left", 'C' for * "centre", or 'R' for "right", and specifies the horizontal * location of the reference position. If the string has less than * 2 characters then 'C' is used for the missing characters. * up * The (x,y,z) up-vector for the text. The actual up vector used is * the projection of the supplied vector onto the plane specified by * "norm". * norm * The (x,y,z) components of a vector that is normal to the plane * containing the text. The given vector passes through the text * from the back to the front. If all components of this vector are * zero, then a normal vector pointing towards the camera eye is used. * xb * An array of 4 elements in which to return the x coordinate of * each corner of the bounding box. * yb * An array of 4 elements in which to return the y coordinate of * each corner of the bounding box. * zb * An array of 4 elements in which to return the z coordinate of * each corner of the bounding box. * bl * The 3D world coordinates at the left hand end of the text * baseline. * * Returned Value: * A value of 0 is returned if an error occurs, and 1 is returned * otherwise. * * Notes: * - The order of the corners is anti-clockwise starting at the * bottom left when viewing the text normally (i.e. face on). * - This routine does not recognise PGPLOT escape sequences. * - A NULL value for "just" causes a value of "CC" to be used. */ int astG3DTxExt(const char *text, float ref[3], const char *just, float up[3], float norm[3], float *xb, float *yb, float *zb, float bl[3]) { if (astGrid3dPtr) return astGrid3dPtr->gTxExt(text, ref, just, up, norm, xb, yb, zb, bl); return 0; } /* * Name: * astG3DAttr * * Purpose: * Enquire or set a 3D graphics attribute value. * * Synopsis: * #include "grf3d.h" * int int astG3DAttr( int attr, double value, double *old_value, int prim ) * * Description: * This function returns the current value of a specified 3D graphics * attribute, and optionally establishes a new value. The supplied * value is converted to an integer value if necessary before use. * * Parameters: * attr * An integer value identifying the required attribute. The * following symbolic values are defined in grf3d.h: * * GRF__STYLE - Line style. * GRF__WIDTH - Line width. * GRF__SIZE - Character and marker size scale factor. * GRF__FONT - Character font. * GRF__COLOUR - Colour index. * value * A new value to store for the attribute. If this is AST__BAD * no value is stored. * old_value * A pointer to a double in which to return the attribute value. * If this is NULL, no value is returned. * prim * The sort of graphics primitive to be drawn with the new attribute. * Identified by the following values defined in grf.h: * GRF__LINE * GRF__MARK * GRF__TEXT * * Returned Value: * A value of 0 is returned if an error occurs, and 1 is returned * otherwise. * * Notes: * */ int astG3DAttr(int attr, double value, double *old_value, int prim) { if (astGrid3dPtr) return astGrid3dPtr->gAttr(attr, value, old_value, prim); return 0; } saods9/tksao/util/grid25dbase.C000644 000765 000000 00000007000 12705446252 016665 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "grid25dbase.h" #include "attribute.h" #include "widget.h" #include "frame3dbase.h" extern "C" { #include "ast.h" #include "grf.h" } Grid25dBase* astGrid25dPtr = NULL; Grid25dBase::Grid25dBase(Widget* p) : GridBase(p) {} Grid25dBase::Grid25dBase(Widget* p, const char* o) : GridBase(p,o) {} Grid25dBase::~Grid25dBase() {} int Grid25dBase::gLine(int n, float* x, float* y) { Frame3dBase* pp = (Frame3dBase*)parent_; float xx[n]; float yy[n]; for (int ii=0; iimapFromRef(Vector(x[ii],y[ii]),Coord::WIDGET); xx[ii] = vv[0]; yy[ii] = vv[1]; } switch (renderMode_) { case X11: x11Line(n,xx,yy); break; case PS: psLine(n,xx,yy); break; case MACOSX: #ifdef MAC_OSX_TK macosxLine(n,xx,yy); #endif break; case GWIN32: #ifdef __WIN32 win32Line(n,xx,yy); #endif break; } return 1; } int Grid25dBase::gQch(float* chv, float* chh) { Tk_Font font =NULL; switch (renderMode_) { case X11: font = text_->tkfont(); break; case PS: font = text_->psfont(); break; case MACOSX: #ifdef MAC_OSX_TK font = text_->tkfont(); #endif break; case GWIN32: #ifdef __WIN32 font = text_->tkfont(); #endif break; } if (font) { Tk_FontMetrics metrics; Tk_GetFontMetrics(font, &metrics); *chv = (float)metrics.linespace; *chh = (float)metrics.linespace; return 1; } else { *chv = *chh = 0; return 0; } } int Grid25dBase::gText(const char* txt, float x, float y, const char* just, float upx, float upy) { if (!(txt && txt[0] && just && just[0] && just[1])) return 0; Frame3dBase* pp = (Frame3dBase*)parent_; Vector vv = pp->mapFromRef(Vector(x,y),Coord::WIDGET); switch (renderMode_) { case X11: return x11Text(txt,vv[0],vv[1],just,Vector(0,1)); case PS: return psText(txt,vv[0],vv[1],just,Vector(0,1)); case MACOSX: #ifdef MAC_OSX_TK return macosxText(txt,vv[0],vv[1],just,Vector(0,1)); #endif break; case GWIN32: #ifdef __WIN32 return win32Text(txt,vv[0],vv[1],just,Vector(0,1)); #endif break; } return 0; } int Grid25dBase::gTxExt(const char* txt, float x, float y, const char* just, float upx, float upy, float* xb, float* yb) { if (!(txt && txt[0] && just)) { xb[0] = xb[1] = xb[2] = xb[3] = 0; yb[0] = yb[1] = yb[2] = yb[3] = 0; return 0; } Tk_Font font =NULL; switch (renderMode_) { case X11: font = text_->tkfont(); break; case PS: font = text_->psfont(); break; case MACOSX: #ifdef MAC_OSX_TK font = text_->tkfont(); #endif break; case GWIN32: #ifdef __WIN32 font = text_->tkfont(); #endif break; } if (!font) return 0; Frame3dBase* pp = (Frame3dBase*)parent_; Vector vv = pp->mapFromRef(Vector(x,y),Coord::WIDGET); double angle = 0; Vector cc = vv * calcTextPos(vv, angle, txt, just, Vector(0, 1), font); Tk_FontMetrics metrics; Tk_GetFontMetrics(font, &metrics); int width = Tk_TextWidth(font, txt, strlen(txt)); BBox nn = BBox(Vector(0,-metrics.descent), Vector(width,metrics.ascent)); BBox bb = nn * Rotate(angle) * Translate(cc); xb[0] = bb.ll[0]; yb[0] = bb.ll[1]; xb[1] = bb.ur[0]; yb[1] = bb.ll[1]; xb[2] = bb.ur[0]; yb[2] = bb.ur[1]; xb[3] = bb.ll[0]; yb[3] = bb.ur[1]; return 1; } int Grid25dBase::gScales(float* alpha, float* beta) { return 1; } saods9/tksao/util/grid25dbase.h000644 000765 000000 00000001356 12705446252 016742 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __grid25dbase_h__ #define __grid25dbase_h__ #include "gridbase.h" class Grid25dBase : public GridBase { public: Grid25dBase(Widget*); Grid25dBase(Widget*, const char*); virtual ~Grid25dBase(); int gLine(int n, float* x, float* y); int gQch(float*, float*); int gMark(int, const float*, const float*, int) {return 1;} int gText(const char* txt, float x, float y, const char* just, float upx, float upy); int gTxExt(const char*, float, float, const char*, float, float, float*, float*); int gScales(float *alpha, float *beta); }; #endif saods9/tksao/util/grid2dbase.C000644 000765 000000 00000006141 12705446252 016605 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "grid2dbase.h" #include "attribute.h" #include "widget.h" extern "C" { #include "ast.h" #include "grf.h" } Grid2dBase* astGrid2dPtr = NULL; Grid2dBase::Grid2dBase(Widget* p) : GridBase(p) {} Grid2dBase::Grid2dBase(Widget* p, const char* o) : GridBase(p,o) {} Grid2dBase::~Grid2dBase() {} int Grid2dBase::gLine(int n, float* x, float* y) { switch (renderMode_) { case X11: x11Line(n,x,y); break; case PS: psLine(n,x,y); break; case MACOSX: #ifdef MAC_OSX_TK macosxLine(n,x,y); #endif break; case GWIN32: #ifdef __WIN32 win32Line(n,x,y); #endif break; } return 1; } int Grid2dBase::gQch(float* chv, float* chh) { Tk_Font font =NULL; switch (renderMode_) { case X11: font = text_->tkfont(); break; case PS: font = text_->psfont(); break; case MACOSX: #ifdef MAC_OSX_TK font = text_->tkfont(); #endif break; case GWIN32: #ifdef __WIN32 font = text_->tkfont(); #endif break; } if (font) { Tk_FontMetrics metrics; Tk_GetFontMetrics(font, &metrics); *chv = (float)metrics.linespace; *chh = (float)metrics.linespace; return 1; } else { *chv = *chh = 0; return 0; } } int Grid2dBase::gText(const char* txt, float x, float y, const char* just, float upx, float upy) { if (!(txt && txt[0] && just && just[0] && just[1])) return 0; switch (renderMode_) { case X11: return x11Text(txt,x,y,just,Vector(upx,upy)); case PS: return psText(txt,x,y,just,Vector(upx,upy)); case MACOSX: #ifdef MAC_OSX_TK return macosxText(txt,x,y,just,Vector(upx,upy)); #endif break; case GWIN32: #ifdef __WIN32 return win32Text(txt,x,y,just,Vector(upx,upy)); #endif break; } return 0; } int Grid2dBase::gTxExt(const char* txt, float x, float y, const char* just, float upx, float upy, float* xb, float* yb) { if (!(txt && txt[0] && just)) { xb[0] = xb[1] = xb[2] = xb[3] = 0; yb[0] = yb[1] = yb[2] = yb[3] = 0; return 0; } Tk_Font font =NULL; switch (renderMode_) { case X11: font = text_->tkfont(); break; case PS: font = text_->psfont(); break; case MACOSX: #ifdef MAC_OSX_TK font = text_->tkfont(); #endif break; case GWIN32: #ifdef __WIN32 font = text_->tkfont(); #endif break; } if (!font) return 0; Vector vv = Vector(x,y); double angle = calcTextAngle(just, Vector(upx, upy)); Vector cc = vv * calcTextPos(vv, angle, txt, just, Vector(upx, upy), font); Tk_FontMetrics metrics; Tk_GetFontMetrics(font, &metrics); int width = Tk_TextWidth(font, txt, strlen(txt)); BBox nn = BBox(Vector(0,-metrics.descent), Vector(width,metrics.ascent)); BBox bb = nn * Rotate(angle) * Translate(cc); xb[0] = bb.ll[0]; yb[0] = bb.ll[1]; xb[1] = bb.ur[0]; yb[1] = bb.ll[1]; xb[2] = bb.ur[0]; yb[2] = bb.ur[1]; xb[3] = bb.ll[0]; yb[3] = bb.ur[1]; return 1; } int Grid2dBase::gScales(float* alpha, float* beta) { return 1; } saods9/tksao/util/grid2dbase.h000644 000765 000000 00000001346 12705446252 016654 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __grid2dbase_h__ #define __grid2dbase_h__ #include "gridbase.h" class Grid2dBase : public GridBase { public: Grid2dBase(Widget*); Grid2dBase(Widget*, const char*); virtual ~Grid2dBase(); int gLine(int n, float* x, float* y); int gQch(float*, float*); int gMark(int, const float*, const float*, int) {return 1;} int gText(const char* txt, float x, float y, const char* just, float upx, float upy); int gTxExt(const char*, float, float, const char*, float, float, float*, float*); int gScales(float *alpha, float *beta); }; #endif saods9/tksao/util/grid3dbase.C000644 000765 000000 00000011033 12705446252 016602 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "grid3dbase.h" #include "attribute.h" #include "widget.h" extern "C" { #include "ast.h" #include "grf.h" } Grid3dBase* astGrid3dPtr = NULL; Grid3dBase::Grid3dBase(Widget* p) : GridBase(p) {} Grid3dBase::Grid3dBase(Widget* p, const char* o) : GridBase(p,o) {} Grid3dBase::~Grid3dBase() {} int Grid3dBase::gLine(int n, float* x, float* y, float* z) { float xx[n]; float yy[n]; for (int ii=0; iitkfont(); break; case PS: font = text_->psfont(); break; case MACOSX: #ifdef MAC_OSX_TK font = text_->tkfont(); #endif break; case GWIN32: #ifdef __WIN32 font = text_->tkfont(); #endif break; } if (font) { Tk_FontMetrics metrics; Tk_GetFontMetrics(font, &metrics); *ch = (float)metrics.linespace; return 1; } else { *ch = 0; return 0; } } int Grid3dBase::gText(const char* txt, float* ref, const char* just, float* up, float* norm) { if (!(txt && txt[0] && just && just[0] && just[1])) return 0; Vector3d vv = Vector3d(ref[0],ref[1],ref[2])*mx_; switch (renderMode_) { case X11: return x11Text(txt,vv[0],vv[1],just,Vector(0,1)); case PS: return psText(txt,vv[0],vv[1],just,Vector(0,1)); case MACOSX: #ifdef MAC_OSX_TK return macosxText(txt,vv[0],vv[1],just,Vector(0,1)); #endif break; case GWIN32: #ifdef __WIN32 return win32Text(txt,vv[0],vv[1],just,Vector(0,1)); #endif break; } return 0; } int Grid3dBase::gTxExt(const char* txt, float* ref, const char* just, float* up, float* norm, float* xb, float* yb, float* zb, float* bl) { if (!(txt && txt[0] && just)) { xb[0] = xb[1] = xb[2] = xb[3] = 0; yb[0] = yb[1] = yb[2] = yb[3] = 0; zb[0] = zb[1] = zb[2] = zb[3] = 0; return 0; } /* cerr << txt << Vector3d(ref[0],ref[1],ref[2]) << ' ' << just[0] << just[1] << Vector3d(up[0],up[1],up[2]) << Vector3d(norm[0],norm[1],norm[2]) << endl; */ Tk_Font font =NULL; switch (renderMode_) { case X11: font = text_->tkfont(); break; case PS: font = text_->psfont(); break; case MACOSX: #ifdef MAC_OSX_TK font = text_->tkfont(); #endif break; case GWIN32: #ifdef __WIN32 font = text_->tkfont(); #endif break; } if (!font) return 0; Vector3d vv = Vector3d(ref[0],ref[1],ref[2])*mx_; // cerr << " vv: " << vv << endl; Vector3d cc = vv * calcTextPos(vv, txt, just, font); // cerr << " cc: " << cc << endl; Tk_FontMetrics metrics; Tk_GetFontMetrics(font, &metrics); int width = Tk_TextWidth(font, txt, strlen(txt)); BBox3d nn(Vector3d(0,-metrics.descent,0), Vector3d(width,metrics.ascent,0)); // cerr << " nn: " << nn << endl; Matrix3d mm = Translate3d(-nn.center()) * rx_ * Translate3d(nn.center()); // cerr << mm << endl; BBox3d bb = nn * mm * Translate3d(cc); // cerr << " bb: " << bb << endl; Vector3d ll = cc * mm; xb[0] = bb.ll[0]; yb[0] = bb.ll[1]; zb[0] = bb.ll[2]; xb[1] = bb.ur[0]; yb[1] = bb.ll[1]; zb[1] = bb.ll[2]; xb[2] = bb.ur[0]; yb[2] = bb.ur[1]; zb[2] = bb.ll[2]; xb[3] = bb.ll[0]; yb[3] = bb.ur[1]; zb[3] = bb.ll[2]; bl[0] = ll[0]; bl[1] = ll[1]; bl[2] = ll[2]; return 1; } Matrix3d Grid3dBase::calcTextPos(const Vector3d& vv, const char* txt, const char* just, Tk_Font font) { Tk_FontMetrics metrics; Tk_GetFontMetrics(font, &metrics); int width = Tk_TextWidth(font, txt, strlen(txt)); Matrix3d m1,m2; switch (just[0]) { case 'T': break; case 'C': m1 = Translate3d(0,metrics.linespace/2,0); break; case 'B': m1 = Translate3d(0,metrics.ascent,0); break; case 'M': m1 = Translate3d(0,metrics.linespace,0); break; } switch (just[1]) { case 'L': break; case 'C': m2 = Translate3d(-width/2.,0,0); break; case 'R': m2 = Translate3d(-width,0,0); break; } return Translate3d(-vv) * m1 * m2 * Translate3d(vv); } saods9/tksao/util/grid3dbase.h000644 000765 000000 00000001644 12705446252 016656 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __grid3dbase_h__ #define __grid3dbase_h__ #include #include "gridbase.h" #include "vector3d.h" class Grid3dBase : public GridBase { protected: Matrix3d mx_; Matrix3d rx_; Matrix3d calcTextPos(const Vector3d&, const char*, const char*, Tk_Font); public: Grid3dBase(Widget*); Grid3dBase(Widget*, const char*); virtual ~Grid3dBase(); int gLine(int n, float* x, float* y, float* z); int gQch(float* ch); int gMark(int n, float* x, float* y, float* z, int type, float* norm) {return 1;} int gText(const char* txt, float* ref, const char* just, float* up, float* norm); int gTxExt(const char* txt, float* ref, const char* just, float* up, float* norm, float* xb, float* yb, float* zb, float* bl); }; #endif saods9/tksao/util/gridbase.C000644 000765 000000 00000023614 12754670576 016377 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "gridbase.h" #include "attribute.h" #include "widget.h" #include "util.h" EXTERN void TkDrawAngledChars(Display *display, Drawable drawable, GC gc, Tk_Font tkfont, const char *source, int numBytes, double x, double y, double angle); extern "C" { #include "ast.h" #include "grf.h" } GridBase::GridBase(Widget* pp) : parent_(pp) { option_ = NULL; renderMode_ = X11; line_ = new Attribute(parent_); text_ = new Attribute(parent_); gridGC_ = XCreateGC(parent_->getDisplay(), Tk_WindowId(parent_->getTkwin()), 0, NULL); pixmap_ = 0; mode_ = Widget::RGB; } GridBase::GridBase(Widget* pp, const char* op) : parent_(pp) { option_ = dupstr(op); renderMode_ = X11; line_ = new Attribute(parent_); text_ = new Attribute(parent_); gridGC_ = XCreateGC(parent_->getDisplay(), Tk_WindowId(parent_->getTkwin()), 0, NULL); pixmap_ = 0; mode_ = Widget::RGB; } GridBase::~GridBase() { if (option_) delete [] option_; if (gridGC_) XFreeGC(parent_->getDisplay(), gridGC_); if (line_) delete line_; if (text_) delete text_; } int GridBase::gAttr(int which, double value, double* old, int prim) { Attribute* attr; switch (prim) { case GRF__TEXT: attr = text_; switch (which) { case GRF__STYLE: break; case GRF__WIDTH: break; case GRF__SIZE: if (old) *old = attr->size(); if (value != AST__BAD) attr->setSize(value); break; case GRF__FONT: if (old) *old = attr->font(); if (value != AST__BAD) attr->setFont(value); break; case GRF__COLOUR: if (old) *old = attr->colour(); if (value != AST__BAD) attr->setColour(value); break; } break; case GRF__LINE: attr = line_; switch (which) { case GRF__STYLE: if (old) *old = attr->style(); if (value != AST__BAD) attr->setStyle(value); break; case GRF__WIDTH: if (old) *old = attr->width(); if (value != AST__BAD) attr->setWidth(value); break; case GRF__SIZE: break; case GRF__FONT: break; case GRF__COLOUR: if (old) *old = attr->colour(); if (value != AST__BAD) attr->setColour(value); break; } break; } return 1; } int GridBase::gCap(int cap, int value) { switch (cap) { case GRF__SCALES: return 0; case GRF__MJUST: return 1; case GRF__ESC: return 0; } return 0; } // X11 Render functions int GridBase::x11Line(int n, float* x, float* y) { if (n<2 || !x || !y) return 1; XSetForeground(parent_->getDisplay(), gridGC_, line_->color()); int w = (int)line_->width(); if (w<1) w = 1; switch (line_->style()) { case Attribute::SOLID: XSetLineAttributes(parent_->getDisplay(), gridGC_, w, LineSolid, CapButt, JoinMiter); break; case Attribute::DASH: XSetLineAttributes(parent_->getDisplay(), gridGC_, w, LineOnOffDash, CapButt, JoinMiter); char dlist[] = {8,3}; XSetDashes(parent_->getDisplay(), gridGC_, 0, dlist, 2); break; } for (int i=0; igetDisplay(), pixmap_, gridGC_, (int)s[0],(int)s[1],(int)e[0],(int)e[1]); } return 1; } int GridBase::x11Text(const char* txt, float x, float y, const char* just, Vector up) { XSetFont(parent_->getDisplay(), gridGC_, Tk_FontId(text_->tkfont())); XSetForeground(parent_->getDisplay(), gridGC_, text_->color()); Vector vv = Vector(x,y); double angle = calcTextAngle(just, up); Vector cc = vv * calcTextPos(vv, angle, txt, just, up, text_->tkfont()); TkDrawAngledChars(parent_->getDisplay(), pixmap_, gridGC_, text_->tkfont(), txt, strlen(txt), cc[0], cc[1], radToDeg(angle)); return 1; } // PS Render functions int GridBase::psLine(int n, float* x, float* y) { if (n<2 || !x || !y) return 1; psColor(line_); { ostringstream str; str << line_->width() << " setlinewidth" << endl << ends; Tcl_AppendResult(parent_->getInterp(), str.str().c_str(), NULL); } { ostringstream str; switch (line_->style()) { case Attribute::SOLID: str << "[] 0 setdash" << endl << ends; break; case Attribute::DASH: str << "[8 3] 0 setdash" << endl << ends; break; } Tcl_AppendResult(parent_->getInterp(), str.str().c_str(), NULL); } for (int i=0; igetCanvas()) << " moveto" << endl << ends; } else str << v.TkCanvasPs(parent_->getCanvas()) << " lineto" << endl << ends; Tcl_AppendResult(parent_->getInterp(), str.str().c_str(), NULL); } ostringstream str; str << "stroke" << endl << ends; Tcl_AppendResult(parent_->getInterp(), str.str().c_str(), NULL); return 1; } int GridBase::psText(const char* txt, float x, float y, const char* just, Vector up) { Tcl_DString psdstr; Tcl_DStringInit(&psdstr); Vector vv = Vector(x,y) * matrix_; double angle = calcTextAngle(just, up); Vector cc = vv * calcTextPos(vv, angle, txt, just, up, text_->psfont()); ostringstream str; const char* ff = Tk_NameOfFont(text_->psfont()); str << '/' << psFontName(ff) << " findfont " << int(psFontSize(ff)*parent_->getDisplayRatio()) << " scalefont setfont" << endl; psColor(text_); str << "gsave " << cc.TkCanvasPs(parent_->getCanvas()) << " moveto" << endl << radToDeg(angle) << " rotate " << '(' << psQuote(txt) << ')' << " show" << " grestore" << endl << ends; Tcl_AppendResult(parent_->getInterp(), str.str().c_str(), NULL); return 1; } void GridBase::psColor(Attribute* attr) { ostringstream str; switch ((Widget::PSColorSpace)mode_) { case Widget::BW: case Widget::GRAY: psColorGray(parent_->getXColor(attr->colorName()), str); str << " setgray"; break; case Widget::RGB: psColorRGB(parent_->getXColor(attr->colorName()), str); str << " setrgbcolor"; break; case Widget::CMYK: psColorCMYK(parent_->getXColor(attr->colorName()), str); str << " setcmykcolor"; break; } str << endl << ends; Tcl_AppendResult(parent_->getInterp(), str.str().c_str(), NULL); } #ifdef MAC_OSX_TK int GridBase::macosxLine(int n, float* x, float* y) { if (n<2 || !x || !y) return 1; macosxColor(parent_->getXColor(line_->colorName())); macosxWidth(line_->width()); switch (line_->style()) { case Attribute::SOLID: macosxDash(NULL,0); break; case Attribute::DASH: float dlist[] = {8,3}; macosxDash(dlist,2); break; } Vector* v = new Vector[n]; for (int i=0; itkfont(), &psdstr); macosxFont(Tcl_DStringValue(&psdstr),psSize); Tcl_DStringFree(&psdstr); Vector vv = Vector(x,y) * matrix_; double angle = calcTextAngle(just, up); Vector cc = vv * calcTextPos(vv, angle, txt, just, up, text_->tkfont()); macosxColor(parent_->getXColor(text_->colorName())); macosxDrawText(cc, angle, txt); return 1; } #endif #ifdef __WIN32 int GridBase::win32Line(int n, float* x, float* y) { if (n<2 || !x || !y) return 1; win32Color(parent_->getXColor(line_->colorName())); win32Width(line_->width()); switch (line_->style()) { case Attribute::SOLID: win32Dash(NULL,0); break; case Attribute::DASH: float dlist[] = {8,3}; win32Dash(dlist,2); break; } Vector v[n]; for (int i=0; itkfont()); win32Color(parent_->getXColor(text_->colorName())); Vector vv = Vector(x,y) * matrix_; double angle = calcTextAngle(just, up);; Vector cc = vv * calcTextPos(vv, angle, txt, just, up, text_->tkfont()); win32DrawText(cc, angle, txt); return 1; } #endif // Support double GridBase::calcTextAngle(const char* just, Vector up) { double a = up.angle(); // our angle is 90 off from ast's, and the other direction double rr = -(a - M_PI_2); // special case for text rotated exactly 90 if (up[0]==-1 && up[1]==0) rr += M_PI; // normalize if (rr>0) while (rr>M_TWOPI) rr -= M_TWOPI; else while (rr<0) rr += M_TWOPI; return rr; } Matrix GridBase::calcTextPos(const Vector& vv, double angle, const char* txt, const char* just, Vector up, Tk_Font font) { Tk_FontMetrics metrics; Tk_GetFontMetrics(font, &metrics); int width = Tk_TextWidth(font, txt, strlen(txt)); Matrix m1,m2; switch (just[0]) { case 'T': break; case 'C': m1 = Translate(0,metrics.linespace/2); break; case 'B': m1 = Translate(0,metrics.ascent); break; case 'M': m1 = Translate(0,metrics.linespace); break; } switch (just[1]) { case 'L': break; case 'C': m2 = Translate(-width/2.,0); break; case 'R': m2 = Translate(-width,0); break; } Matrix rr = Translate(-vv) * Rotate(-angle) * m1 * m2 * Rotate(angle) * Translate(vv); // special case for text rotated exactly 90 Matrix mm; if (up[0] == -1 && up[1] == 0) { Vector cc = vv*rr; mm = Translate(-cc) * Rotate(-angle) * Translate(-width/2.,metrics.linespace/2.) * FlipY() * Translate(width/2.,-metrics.linespace/2.) * Rotate(angle) * Translate(cc); } return rr*mm; } saods9/tksao/util/gridbase.h000644 000765 000000 00000002653 12754663416 016437 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __gridbase_h__ #define __gridbase_h__ #include #include "vector.h" class Widget; class Attribute; class GridBase { public: enum RenderMode {X11, PS, MACOSX, GWIN32}; protected: Widget* parent_; char* option_; RenderMode renderMode_; Attribute* line_; Attribute* text_; GC gridGC_; Pixmap pixmap_; Matrix matrix_; int mode_; protected: int x11Line(int n, float* x, float* y); int x11Text(const char*, float, float, const char*, Vector); int psLine(int n, float* x, float* y); int psText(const char*, float, float, const char*, Vector); void psColor(Attribute*); #ifdef MAC_OSX_TK int macosxLine(int n, float* x, float* y); int macosxText(const char*, float, float, const char*, Vector); #endif #ifdef __WIN32 int win32Line(int n, float* x, float* y); int win32Text(const char*, float, float, const char*, Vector); #endif double calcTextAngle(const char*, Vector); Matrix calcTextPos(const Vector&, double, const char*, const char*, Vector, Tk_Font); public: GridBase(Widget*); GridBase(Widget*, const char*); virtual ~GridBase(); int gAttr(int attr, double value, double* old, int prim); int gCap(int, int); int gFlush() {return 1;} const char* option() {return option_;} }; #endif saods9/tksao/util/ps.C000644 000765 000000 00000014537 12766334234 015234 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "ps.h" #include "util.h" Filter::Filter() { buf_ = new unsigned char[BUFSIZE]; ptr_ = buf_; } Filter::~Filter() { if (buf_) delete [] buf_; } void Filter::flush(ostream& str) { cflush(); eflush(str); } // Compress void NoCompress::in(unsigned char c) { *ptr_++ = c; } // RLE RLE::RLE() { state = 0; num = 0; } void RLE::in(unsigned char c) { current = c; switch (state) { case 0: // start state if (num == 0) // not enough info yet rle[num++] = current; else { if (current != rle[num-1]) { // looks like non repeating rle[num++] = current; state = 1; } else { // looks like repeating num++; state = 2; } } break; case 1: // non repeat state if (current != rle[num-1]) { rle[num++] = current; if (num >= RLESIZE) { // time to dump the rlefer dumpNonRepeat(); // dump the buffer num = 0; // and reset counter state = 0; } } else { num--; // decr dumpNonRepeat(); // dump the buffer state = 2; // repeat state rle[0] = current; // save repeat char num = 2; // we aready have two now } break; case 2: // repeat state if (current == rle[0]) { if (++num >= RLESIZE) { dumpRepeat(); // dump the repeat count state = 0; num = 0; } } else { dumpRepeat(); // dump the repeat count state = 1; // back to non repeat state rle[0] = current; // save first char num = 1; // we have one now } break; } } void RLE::dumpNonRepeat() { if (num) { *ptr_++ = (unsigned char)(num-1); for (int i=0; inext_in = NULL; stream_->avail_in = 0; stream_->next_out = NULL; stream_->avail_out = 0; stream_->zalloc = NULL; stream_->zfree = NULL; stream_->opaque = NULL; if (deflateInit(stream_, Z_DEFAULT_COMPRESSION) != Z_OK) { if (DebugGZ) cerr << "deflateInit error" << endl; return; } stream_->next_out = gzip_; stream_->avail_out = GZIPSIZE; } GZIP::~GZIP() { if (deflateEnd(stream_) != Z_OK) if (DebugGZ) cerr << "deflateEnd error" << endl; if (gzip_) delete [] gzip_; if (stream_) delete stream_; } void GZIP::in(unsigned char c) { stream_->next_in = &c; stream_->avail_in = 1; while (stream_->avail_in > 0 && deflategz(Z_NO_FLUSH) == Z_OK); } void GZIP::cflush() { // flush any pending output while (deflategz(Z_FINISH) == Z_OK); } int GZIP::deflategz(int flush) { int result = deflate(stream_, flush); switch (result) { case Z_OK: if (DebugGZ) cerr << "deflate OK: avail_in " << stream_->avail_in << " avail_out " << stream_->avail_out << endl; break; case Z_STREAM_END: if (DebugGZ) cerr << "deflate STRM_END: avail_in " << stream_->avail_in << " avail_out " << stream_->avail_out << endl; break; default: if (DebugGZ) cerr << "deflate Error " << result << endl; return result; } if (stream_->avail_out == 0 || result != Z_OK) { int s = GZIPSIZE - stream_->avail_out; unsigned char* d = gzip_; if (s>0) { if (ptr_+s > buf_+BUFSIZE) { cerr << "deflate buffer overflow " << stream_->avail_out << ' ' << result << endl; return result; } memcpy(ptr_,d,s); ptr_ += s; if (DebugGZ) cerr << "deflate send " << s << ' ' << result << endl; } stream_->next_out = gzip_; stream_->avail_out = GZIPSIZE; } return result; } // Encode Encode::Encode(int l) { level = l; lineCount = 0; } // AsciiHex AsciiHex::AsciiHex(int l) : Encode(l) {} void AsciiHex::out(ostream& str) { unsigned char* p = buf_; while (p < ptr_) { unsigned short c = *p++; str << hex << setfill('0') << setw(2) << c; lineCount += 2; if (lineCount >= LINELIMIT) { str << endl; lineCount = 0; } } ptr_ = buf_; // reset buffer } void AsciiHex::eflush(ostream& str) { out(str); switch (level) { case 1: str << endl; break; case 2: case 3: str << endl << '>' << endl; break; } } // Ascii85 Ascii85::Ascii85(int l) : Encode(l) { byteswap = (*(short *)"\001\000" & 0x0001); buf85.c = 0; index = 0; } int32_t Ascii85::swap(uint32_t* p) { int32_t r; swap4((char*)p, (char*)&r); return r; } void Ascii85::out(ostream& str) { unsigned char* p = buf_; while (p < ptr_) { buf85.b[index++] = *p++; if (index==4) { dump(str); } } ptr_ = buf_; // reset buffer } void Ascii85::dump(ostream& str) { // all zeros? if (buf85.c == 0) { str << 'z'; if (++lineCount >= LINELIMIT) { str << endl; lineCount = 0; } } else { uint32_t b; if (!byteswap) b = buf85.c; else b = swap(&buf85.c); for (int ii=4; ii>=0 ; ii--) { uint32_t base = 1; for (int jj=0; jj= LINELIMIT) { str << endl; lineCount = 0; } } } index = 0; buf85.c = 0; } void Ascii85::eflush(ostream& str) { // dump the remainder out(str); // we can't have any z's here // also, only write index+1 chars if (index) { uint32_t b; if (!byteswap) b = buf85.c; else b = swap(&buf85.c); for (int ii=4; ii>=(4-index); ii--) { uint32_t base = 1; for (int jj=0; jj= LINELIMIT) { str << endl; lineCount = 0; } } } index = 0; buf85.c = 0; switch (level) { case 1: str << endl; break; case 2: case 3: str << endl << "~>" << endl; break; } } saods9/tksao/util/ps.h000644 000765 000000 00000006031 12766334234 015267 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __ps_h__ #define __ps_h__ #include #include #include #include using namespace std; #include "zlib.h" extern int DebugGZ; // we need this large for gzip #define GZIPSIZE 8192 #define BUFSIZE GZIPSIZE*8 #define RLESIZE 128 #define LINELIMIT 80 // Filter Base Class class Filter { protected: unsigned char* buf_; unsigned char* ptr_; virtual void cflush() =0; virtual void eflush(ostream&) =0; public: Filter(); virtual ~Filter(); virtual void in(unsigned char) =0; virtual void out(ostream&) =0; void flush(ostream&); friend Filter& operator<<(Filter& f, unsigned char c) {f.in(c); return f;} friend ostream& operator<<(ostream& s, Filter& f) {f.out(s); return s;} }; // Compress Base Class class Compress : public virtual Filter { public: virtual void in(unsigned char) =0; virtual void cflush() =0; }; class NoCompress : public virtual Filter, public Compress { public: void in(unsigned char); void cflush() {} }; // RLE class RLE : public virtual Filter, public Compress { private: int state; unsigned char current; unsigned char rle[RLESIZE]; int num; void dumpNonRepeat(); void dumpRepeat(); public: RLE(); void in(unsigned char); void cflush(); }; // GZIP class GZIP : public virtual Filter, public Compress { private: z_stream* stream_; unsigned char* gzip_; int deflategz(int); public: GZIP(); ~GZIP(); void in(unsigned char); void cflush(); }; // Encode Base Class class Encode : public virtual Filter { protected: int level; int lineCount; public: Encode(int); virtual void out(ostream&) =0; virtual void eflush(ostream&) =0; }; // AsciiHex class AsciiHex : public virtual Filter, public Encode { public: AsciiHex(int); void out(ostream&); void eflush(ostream&); }; // Ascii85 class Ascii85 : public virtual Filter, public Encode { private: int index; int byteswap; union { unsigned char b[4]; uint32_t c; } buf85; void dump(ostream&); int32_t swap(uint32_t* ptr); public: Ascii85(int); void out(ostream&); void eflush(ostream&); }; // PS Filters class NoCompressAsciiHex : public virtual Filter, public NoCompress, public AsciiHex { public: NoCompressAsciiHex(int l) : AsciiHex(l) {}; }; class NoCompressAscii85 : public virtual Filter, public NoCompress, public Ascii85 { public: NoCompressAscii85(int l) : Ascii85(l) {}; }; class RLEAsciiHex : public virtual Filter, public RLE, public AsciiHex { public: RLEAsciiHex(int l) : AsciiHex(l) {}; }; class RLEAscii85 : public virtual Filter, public RLE, public Ascii85 { public: RLEAscii85(int l) : Ascii85(l) {}; }; class GZIPAsciiHex : public virtual Filter, public GZIP, public AsciiHex { public: GZIPAsciiHex(int l) : AsciiHex(l) {}; }; class GZIPAscii85 : public virtual Filter, public GZIP, public Ascii85 { public: GZIPAscii85(int l) : Ascii85(l) {}; }; #endif saods9/tksao/util/smooth.C000644 000765 000000 00000002307 12705446252 016110 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include using namespace std; #include #include "smooth.h" void boxcar(double* kernel, int r) { int rr = 2*r+1; int ksz = rr*rr; double* ptr = kernel; for (int jj=0; jj #include "util.h" // Error in mapping int maperr= 0; static char tobuf[1024]; int sexSign; // used by parser and lex to indicate sign of dms or hms void swap2(char* src, char* dest) { *(dest ) = *(src+1); *(dest+1) = *(src ); } void swap4(char* src, char* dest) { *(dest ) = *(src+3); *(dest+1) = *(src+2); *(dest+2) = *(src+1); *(dest+3) = *(src ); } void swap8(char* src, char* dest) { *(dest ) = *(src+7); *(dest+1) = *(src+6); *(dest+2) = *(src+5); *(dest+3) = *(src+4); *(dest+4) = *(src+3); *(dest+5) = *(src+2); *(dest+6) = *(src+1); *(dest+7) = *(src ); } int lsb() { return (*(short *)"\001\000" & 0x0001); } char* dupstr(const char* str) { char* copy; if (str) { copy=new char[strlen(str)+1]; strcpy(copy,str); } else copy=NULL; return copy; } char* trim(const char* str) { char* rr = dupstr(str); char* ptr = rr; while (ptr && *ptr) ptr++; ptr--; while (ptr && (*ptr == ' ')) ptr--; ptr++; *ptr = '\0'; return rr; } char* toLower(const char* str) { char* rr = dupstr(str); char* ptr = rr; while (*ptr) { *ptr = (char)(tolower(((int)(*ptr)))); ptr++; } return rr; } char* toUpper(const char* str) { char* rr = dupstr(str); char* ptr = rr; while (*ptr) { *ptr = (char)(toupper(((int)(*ptr)))); ptr++; } return rr; } char* toConstLower(const char* str) { strncpy(tobuf,str,1024); char* ptr = tobuf; while (*ptr) { *ptr = (char)(tolower(((int)(*ptr)))); ptr++; } return tobuf; } char* toConstUpper(const char* str) { strncpy(tobuf,str,1024); char* ptr = tobuf; while (*ptr) { *ptr = (char)(toupper(((int)(*ptr)))); ptr++; } return tobuf; } double zeroTWOPI(double aa) { double rr = aa; if (rr>0) while (rr>=M_TWOPI) rr -= M_TWOPI; else while (rr<0) rr += M_TWOPI; return rr; } double zero360(double aa) { double rr = aa; if (rr>=0) while (rr>360) rr -= 360; else while (rr<0) rr += 360; return rr; } double m180To180(double aa) { // incoming 0-360 double rr = aa; if (rr>180) rr -= 360; return rr; } double degToRad(double dd) { double rr = M_PI*dd/180.; return zeroTWOPI(rr); } double radToDeg(double rr) { double dd = 180.*rr/M_PI; return zero360(dd); } double dmsToDegree(int sign, int degree, int min, double sec) { // sign is needed because of -00 vs +00 return double(sign) * (abs(degree) + (min/60.) + (sec/60./60.)); } int parseSection(char* lbuf, Vector* v1, Vector* v2) { double x1, y1, x2, y2; char d1,d2,d3,d4,d5; // dummy char string x(lbuf); istringstream str(x); str >> d1 >> x1 >> d2 >> x2 >> d3 >> y1 >> d4 >> y2 >> d5; // verify input if (!(d1=='[' && d2==':' && d3==',' && d4==':' && d5==']')) return 0; // it looks ok *v1 = Vector(x1,y1); *v2 = Vector(x2,y2); return 1; } double parseSEXStr(const char* d) { char* dms = dupstr(d); // its going to get clobbered char* ptr = dms; int sign = 1; int degree = atoi(strtok(ptr,":")); int minute = atoi(strtok(NULL,":")); float sec = atof(strtok(NULL,":")); // assumes the minus sign is the first char if (degree != 0) sign = degree>0 ? 1 : -1; else sign = d[0] == '-' ? -1 : 1; delete [] dms; return dmsToDegree(sign,abs(degree),minute,sec); } double parseHMSStr(const char* str) { char* hms = dupstr(str); // its going to get clobbered char* ptr = hms; int sign = 1; int hour = atoi(strtok(ptr,"h")); int minute = atoi(strtok(NULL,"m")); float second = atof(strtok(NULL,"s")); // assumes the minus sign is the first char if (hour != 0) sign = hour>0 ? 1 : -1; else sign = str[0] == '-' ? -1 : 1; delete [] hms; return dmsToDegree(sign,abs(hour),minute,second)/24.*360.; } double parseDMSStr(const char* str) { char* dms = dupstr(str); // its going to get clobbered char* ptr = dms; int sign = 1; int degree = atoi(strtok(ptr,"d")); int minute = atoi(strtok(NULL,"m")); float sec = atof(strtok(NULL,"s")); // assumes the minus sign is the first char if (degree != 0) sign = degree>0 ? 1 : -1; else sign = str[0] == '-' ? -1 : 1; delete [] dms; return dmsToDegree(sign,abs(degree),minute,sec); } double RGB2Gray(double red, double green, double blue) { return 0.30*red + 0.59*green + 0.11*blue; } unsigned char RGB2Gray(unsigned char red, unsigned char green, unsigned char blue) { // we have a round off problem here, add FLT_EPSILON to kick it over return (unsigned char)(0.30*red + 0.59*green + 0.11*blue + FLT_EPSILON); } void RGB2CMYK(unsigned char red, unsigned char green, unsigned char blue, unsigned char* cyan, unsigned char* magenta, unsigned char* yellow, unsigned char* black) { // convert To CMY *cyan = UCHAR_MAX-red; *magenta = UCHAR_MAX-green; *yellow = UCHAR_MAX-blue; *black =0; // determine black *black = UCHAR_MAX; if (*cyan < *black) *black = *cyan; if (*magenta < *black) *black = *magenta; if (*yellow < *black) *black = *yellow; // substract out black *cyan -= *black; *magenta -= *black; *yellow -= *black; } void RGB2CMYK(unsigned short red, unsigned short green, unsigned short blue, unsigned short* cyan, unsigned short* magenta, unsigned short* yellow, unsigned short* black) { // convert To CMY *cyan = USHRT_MAX-red; *magenta = USHRT_MAX-green; *yellow = USHRT_MAX-blue; *black =0; // determine black *black = USHRT_MAX; if (*cyan < *black) *black = *cyan; if (*magenta < *black) *black = *magenta; if (*yellow < *black) *black = *yellow; // substract out black *cyan -= *black; *magenta -= *black; *yellow -= *black; } ostream& psColorGray(XColor* clr, ostream& str) { if (clr) { float red = clr->red/float(USHRT_MAX); float green = clr->green/float(USHRT_MAX); float blue = clr->blue/float(USHRT_MAX); str << dec << RGB2Gray(red,green,blue); } return str; } ostream& psColorRGB(XColor* clr, ostream& str) { if (clr) { float red = clr->red/float(USHRT_MAX); float green = clr->green/float(USHRT_MAX); float blue = clr->blue/float(USHRT_MAX); str << dec << red << ' ' << green << ' ' << blue; } return str; } ostream& psColorCMYK(XColor* clr, ostream& str) { if (clr) { unsigned short cyan; unsigned short magenta; unsigned short yellow; unsigned short black; RGB2CMYK(clr->red, clr->green, clr->blue, &cyan, &magenta, &yellow, &black); str << dec << cyan/float(USHRT_MAX) << ' ' << magenta/float(USHRT_MAX) << ' ' << yellow/float(USHRT_MAX) << ' ' << black/float(USHRT_MAX); } return str; } char* psStr = NULL; // psQuote returned string char* psQuote(const char* str) { // we must must quote '(', ')', and '\' if (psStr) delete [] psStr; psStr = new char[strlen(str)*2+1]; // worst case size char* out = psStr; const char* in = str; while (in && *in) { if (*in == '(' || *in == ')' || *in == '\\') *out++ = '\\'; *out++ = *in++; } *out++ = '\0'; // terminating char return psStr; } const char* psFontName(const char* font) { char* str = (char*)font; char* ff = str; while (*str && *str++ != ' '); // char* zz = str; while (*str && *str++ != ' '); char* ww = str; while (*str && *str++ != ' '); char* ss = str; if (ff && ww && ss) return psFontName(ff,ww,ss); else return psFonts[0]; } int psFontSize(const char* font) { char* str = (char*)font; while (*str && *str++ != ' '); return atoi(str); } const char* psFontName(const char* font, const char* weight, const char* slant) { int ptr = 0; if (!strncmp(font,"helvetica",4)) ptr = 0; else if (!strncmp(font,"times",4)) ptr = 4; else if (!strncmp(font,"courier",4)) ptr = 8; if (!strncmp(weight,"normal",4)) ; else if (!strncmp(weight,"bold",4)) ptr +=2; if (!strncmp(slant,"roman",4)) ; else if (!strncmp(slant,"italic",4)) ptr++; return psFonts[ptr]; } int fCompare(const void* a, const void* b) { float* aa = (float*)a; float* bb = (float*)b; if (*aa < *bb) return -1; if (*aa > *bb) return 1; return 0; } int dCompare(const void* a, const void* b) { double* aa = (double*)a; double* bb = (double*)b; if (*aa < *bb) return -1; if (*aa > *bb) return 1; return 0; } Vector mapLen(const Vector& v, const Matrix& mx) { // remove translation Vector t = Vector() * mx; Matrix sr = mx * Translate(-t); // remove rotation Vector r = Vector(1,0) * sr; Matrix s = sr * Rotate(r.angle()); // all that is left is Scaling return (v*s).abs(); } #if defined (MAC_OSX_TK) || (_WIN32) int XSetClipRectangles(Display *d, GC gc, int clip_x_origin, int clip_y_origin, XRectangle* rectangles, int n, int ordering) { TkRegion clipRgn = TkCreateRegion(); while (n--) { XRectangle rect = *rectangles; rect.x += clip_x_origin; rect.y += clip_y_origin; TkUnionRectWithRegion(&rect, clipRgn, clipRgn); rectangles++; } TkSetRegion(d, gc, clipRgn); TkDestroyRegion(clipRgn); return 1; } #endif saods9/tksao/util/util.h000644 000765 000000 00000006263 12705446252 015626 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __util_h__ #define __util_h__ #include #include #include #include #include #include #include #include using namespace std; #include #include #include "fuzzy.h" #include "vector.h" #ifndef PATH_MAX #define PATH_MAX 1024 #endif #ifdef _WIN32 #include #endif #ifdef MAC_OSX_TK #include void XXWarpPointer(Display* display, Window src_w, Window dest_w, int src_x, int src_y, unsigned int src_width, unsigned int src_height, int dest_x, int dest_y); #endif #if defined (MAC_OSX_TK) || (_WIN32) int XSetClipRectangles(Display *d, GC gc, int clip_x_origin, int clip_y_origin, XRectangle* rectangles, int n, int ordering); #endif #define STRCMP(which,str,cnt) (!strncmp(toConstLower(which), str, cnt) && strlen(which)==cnt) static const char psFonts[12][32] = { {"Helvetica"}, {"Helvetica-Oblique"}, {"Helvetica-Bold"}, {"Helvetica-BoldOblique"}, {"Times-Roman"}, {"Times-Italic"}, {"Times-Bold"}, {"Times-BoldItalic"}, {"Courier"}, {"Courier-Oblique"}, {"Courier-Bold"}, {"Courier-BoldOblique"} }; #ifndef __CYGWIN__ static const double M_TWOPI = 2*M_PI; #endif static const double M_THREEPI = 3*M_PI; static const double M_FOURPI = 4*M_PI; extern int maperr; extern int lsb(); extern void swap2(char* src, char* dest); extern void swap4(char* src, char* dest); extern void swap8(char* src, char* dest); // defined in ds9.C extern void internalError(const char*); extern char* dupstr(const char*); extern char* trim(const char*); extern char* toLower(const char*); extern char* toUpper(const char*); extern char* toConstLower(const char*); extern char* toConstUpper(const char*); extern double zeroTWOPI(double); extern double zero360(double); extern double m180To180(double); extern double degToRad(double); extern double radToDeg(double); extern int parseSection(char*, Vector*, Vector*); extern double dmsToDegree(int, int, int, double); extern double parseSEXStr(const char*); extern double parseHMSStr(const char*); extern double parseDMSStr(const char*); extern double RGB2Gray(double, double, double); extern unsigned char RGB2Gray(unsigned char, unsigned char, unsigned char); extern void RGB2CMYK(unsigned char, unsigned char, unsigned char, unsigned char*, unsigned char*, unsigned char*, unsigned char*); extern void RGB2CMYK(unsigned short, unsigned short, unsigned short, unsigned short*, unsigned short*, unsigned short*, unsigned short*); extern ostream& psColorGray(XColor*, ostream&); extern ostream& psColorRGB(XColor*, ostream&); extern ostream& psColorCMYK(XColor*, ostream&); extern char* psQuote(const char*); extern const char* psFontName(const char*); extern int psFontSize(const char*); extern const char* psFontName(const char*, const char*, const char*); extern int fCompare(const void*, const void*); extern int dCompare(const void*, const void*); extern Vector mapLen(const Vector& v, const Matrix& mx); #endif saods9/tksao/tclconfig/ChangeLog000644 000765 000000 00000106605 12540607755 017252 0ustar00joyewheel000000 000000 2013-07-04 Jan Nijtmans * unix/tcl.m4: Bug [3324676]: AC_PROG_INSTALL incompat, Bug [3606445]: Unneeded -DHAVE_NO_SEH=1 when not building on Windows 2013-07-02 Jan Nijtmans * unix/tcl.m4: Bug [32afa6e256]: dirent64 check is incorrect in tcl.m4 (thanks to Brian Griffin) 2013-06-20 Jan Nijtmans * unix/tcl.m4: Use X11/Xlib.h for checking where X11 can be found in stead of X11/XIntrinsic.h. Suggested by Pietro Cerutti. 2013-06-04 Jan Nijtmans * unix/tcl.m4: Eliminate NO_VIZ macro as current zlib uses HAVE_HIDDEN in stead. One more last-moment fix for FreeBSD by Pietro Cerutti 2013-05-19 Jan Nijtmans * unix/tcl.m4: Fix for FreeBSD, and remove support for old FreeBSD versions. Patch by Pietro Cerutti 2013-03-12 Jan Nijtmans * unix/tcl.m4: Patch by Andrew Shadura, providing better support for * three architectures they have in Debian. 2012-08-07 Stuart Cassoff * tcl.m4: Added "-DNDEBUG" to CFLAGS_DEFAULT when building with --disable-symbols. 2012-08-07 Stuart Cassoff * tcl.m4: [Bug 3555058]: Checkin [30736d63f0] broke CFLAGS_DEFAULT, LDFLAGS_DEFAULT 2012-08-07 Stuart Cassoff * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS 2012-08-07 Jan Nijtmans * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS 2012-07-25 Jan Nijtmans * tcl.m4: My previous commit (2012-04-03) broke the ActiveTcl build for AMD64, because of the quotes in "C://AMD64/cl.exe". It turns out that the AC_TRY_COMPILE macro cannot handle that. 2012-07-22 Stuart Cassoff * tcl.m4: Tidy: consistency, spelling, phrasing, whitespace. No functional change. 2012-04-03 Jan Nijtmans * tcl.m4: [Bug 3511806] Compiler checks too early This change allows to build the cygwin and mingw32 ports of Tcl/Tk extensions to build out-of-the-box using a native or cross-compiler, e.g. on Cygwin, Linux or Darwin. 2011-04-02 Jan Nijtmans * install-sh: Fix issue with library stripping in install-sh (backported from kevin_walzer's patch from Tcl 8.6 trunk) 2011-04-05 Andreas Kupries * tcl.m4: Applied patch by Jeff Lawson. Nicer error message when tclConfig.sh was not found. 2010-12-15 Stuart Cassoff * install-sh: Upgrade to newer install-sh and use it. * tcl.m4: 2010-12-14 Stuart Cassoff * tcl.m4: Better building on OpenBSD. 2010-12-14 Jan Nijtmans * tcl.m4: when using gcc, don't try to determine Win64 SDK 2010-12-12 Jan Nijtmans * tcl.m4: Determine correctly a cross-compiler-windres 2010-11-23 Jan Nijtmans * tcl.m4: add some cross-compile support, borrowed from Tcl 8.6 2010-09-16 Jeff Hobbs * tcl.m4: correct HP-UX LDFLAGS (only used when building big shell) 2010-09-14 Jeff Hobbs * tcl.m4: add extra if check for .manifest file generation Add notice about package name and version being built. 2010-09-09 Jan Nijtmans * tcl.m4: [FREQ #3058486] TEA_LOAD_CONFIG doesn't set all BUILD_ vars Slightly related: defining BUILD_$1 on all platforms - not only win - allows the -fvisibility feature to be used in extensions as well, at least if you compile against tcl >= 8.5. 2010-08-26 Jeff Hobbs * tcl.m4: ensure safe quoting for autoheader usage 2010-08-19 Jeff Hobbs * tcl.m4: add TEA_ADD_CLEANFILES macro to make adding cleanfiles easier, and add *.exp to CLEANFILES Windows default. (TEA_MAKE_LIB): Enhanced to check for MSVC that requires manifests and auto-embed it into proj DLL via MAKE_SHARED_LIB. Also define VC_MANIFEST_EMBED_DLL and VC_MANIFEST_EMBED_EXE that do the same magic in case it is needed for extended TEA projects. 2010-08-16 Jeff Hobbs *** Bump to TEA_VERSION 3.9 *** If upgrading from TEA_VERSION 3.8, copy over tcl.m4, change TEA_INIT to use 3.9 and reconfigure (ac-2.59+). BUILD_${PACKAGE_NAME} will be auto-defined on Windows for correct setting of TCL_STORAGE_CLASS. TEA_LOAD_CONFIG users should remove the SHLIB_LD_LIBS setting done in configure.in (LIBS will be automagically populated by TEA_LOAD_CONFIG). TEA_EXPORT_CONFIG has been added for ${pkg}Config.sh creators SHLIB_LD_FLAGS was deprecated a while ago, remove it if it is still in your Makefile.in. * tcl.m4: add /usr/lib64 to set of auto-search dirs. [Bug 1230554] Auto-define BUILD_$PACKAGE_NAME so users don't need to. This needs to correspond with $pkg.h define magic for TCL_STORAGE_CLASS. Auto-define CLEANFILES. Users can expand it. (SHLIB_LD_LIBS): define to '${LIBS}' default and change it only if necessary. Platforms not using this may simply not work or have very funky linkers. (TEA_LOAD_CONFIG): When loading config for another extension, auto-add stub libraries found with TEA_ADD_LIBS. Eases configure.in for modules like itk and img::*. (TEA_EXPORT_CONFIG): Add standardized function for exporting a ${pkg}Config.sh. See use by img::* and itcl. 2010-08-12 Jeff Hobbs *** Bump to TEA_VERSION 3.8 *** If upgrading from TEA_VERSION 3.7, copy over tcl.m4, change TEA_INIT to use 3.8 and reconfigure (ac-2.59+). No other changes should be necessary. * tcl.m4: remove more vestigial bits from removed platforms. Add back SCO_SV-3.2*. Remove use of DL_LIBS and DL_OBJS and related baggage - these are only needed by the core to support 'load'. Allow for macosx in TEA_ADD_SOURCES. Correct check for found_xincludes=no in TEA_PATH_UNIX_X. 2010-08-11 Jeff Hobbs * tcl.m4: remove the following old platform configurations: UNIX_SV*|UnixWare-5*, SunOS-4.*, SINIX*5.4*, SCO_SV-3.2*, OSF1-1.*, NEXTSTEP-*, NetBSD-1.*|FreeBSD-[[1-2]].*, MP-RAS-*, IRIX-5.*, HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*, dgux*, BSD/OS-2.1*|BSD/OS-3* (AIX): drop AIX-pre4 support and use of ldAix, use -bexpall/-brtl 2010-07-05 Jan Nijtmans * tcl.m4: [Patch #1055668] removal of exported internals from tclInt.h (EXTERN macro) 2010-04-14 Jan Nijtmans * tcl.m4 - Backport a lot of quoting fixes from tcl8.6/unix/tcl.m4 - Fix determination of CYGPATH for CYGWIN With those fixes, itcl and tdbc compile fine with CYGWIN 2010-04-06 Jan Nijtmans * install-sh [Bug 2982540] configure and install* script files should always have LF 2010-02-19 Stuart Cassoff * tcl.m4: Correct compiler/linker flags for threaded builds on OpenBSD. 2010-01-19 Jan Nijtmans * tcl.m4: Detect CYGWIN variant: win32 or unix 2010-01-03 Donal K. Fellows * unix/tcl.m4 (TEA_CONFIG_CFLAGS): [Tcl Bug 1636685]: Use the configuration for modern FreeBSD suggested by the FreeBSD porter. 2009-10-22 Jan Nijtmans * tcl.m4: [Tcl Patch #2883533] tcl.m4 support for Haiku OS 2009-04-27 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): harden the check to add _r to CC on AIX with threads. 2009-04-10 Daniel Steffen * tcl.m4 (Darwin): check for 64-bit TkAqua. 2009-03-26 Jan Nijtmans * tclconfig/tcl.m4: Adapt LDFLAGS and LD_SEARCH_FLAGS together with SHLIB_LD definition to unbreak building on HPUX. 2009-03-20 Andreas Kupries * tclconfig/tcl.m4: Changed SHLIB_LD definition to unbreak building on HPUX. 2009-03-16 Joe English * tcl.m4(TEA_PUBLIC_TK_HEADERS): Look at ${TK_INCLUDE_SPEC} (found in tkConfig.sh) when trying to guess where tk.h might be [Patch 1960628]. 2009-03-11 Joe English * tcl.m4: Allow ${SHLIB_SUFFIX} to be overridden at configure-time [Patch 1960628]. Also fix some comment typos, and an uninitialized variable bug-waiting-to-happen. 2008-12-21 Jan Nijtmans * tcl.m4: [Bug 2073255] Tcl_GetString(NULL) doesn't crash on HP-UX (this bug report was for Tcl, but holds for TEA as well.) 2008-12-20 Daniel Steffen * tcl.m4: sync with tdbc tcl.m4 changes (SunOS-5.11): Sun cc SHLIB_LD: use LDFLAGS_DEFAULT instead of LDFLAGS 2008-12-02 Jeff Hobbs *** Bump to TEA_VERSION 3.7 *** * tcl.m4: in private header check, check for Port.h instead of Int.h to ensure all private headers are available. 2008-11-04 Daniel Steffen * tcl.m4 (Darwin): sync TEA_PRIVATE_TK_HEADERS handling of Tk.framework PrivateHeaders with TEA_PRIVATE_TCL_HEADERS. 2008-11-04 Jeff Hobbs * tcl.m4 (TEA_PATH_TCLCONFIG, TEA_PATH_TKCONFIG): exit with error when tclConfig.sh cannot be found. [Bug #1997760] (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): allow for finding the headers installed in the public areas, e.g. a result of make install-private-headers. [Bug #1631922] 2008-08-12 Daniel Steffen * tcl.m4 (Darwin): link shlib with current and compatiblity version flags; look for libX11.dylib when searching for X11 libraries. 2008-06-12 Daniel Steffen * tcl.m4 (SunOS-5.11): fix 64bit amd64 support with gcc & Sun cc. 2008-03-27 Daniel Steffen * tcl.m4 (SunOS-5.1x): fix 64bit support for Sun cc. [Bug 1921166] 2008-02-01 Donal K. Fellows * tcl.m4 (TEA_CONFIG_CFLAGS): Updated to work at least in part with more modern VC versions. Currently just made the linker flags more flexible; more work may be needed. 2007-10-26 Daniel Steffen * tcl.m4 (Darwin): add support for 64-bit X11. 2007-10-23 Jeff Hobbs *** Tagged tea-3-branch to start TEA 4 development on HEAD *** 2007-09-17 Joe English * tcl.m4: use '${CC} -shared' instead of 'ld -Bshareable' to build shared libraries on current NetBSDs [Bug 1749251]. 2007-09-15 Daniel Steffen * tcl.m4: replace all direct references to compiler by ${CC} to enable CC overriding at configure & make time. (SunOS-5.1x): replace direct use of '/usr/ccs/bin/ld' in SHLIB_LD by 'cc' compiler driver. 2007-08-08 Jeff Hobbs * tcl.m4: check Ttk dir for Tk private headers (8.5). Add some comments to other bits. 2007-06-25 Jeff Hobbs * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): move where / is added. 2007-06-13 Jeff Hobbs * tcl.m4: fix --with-tkinclude alignment. [Bug 1506111] 2007-06-06 Daniel Steffen * tcl.m4 (Darwin): fix 64bit arch removal in fat 32&64bit builds. 2007-05-18 Donal K. Fellows * tcl.m4: Added quoting so that paths with spaces cause fewer problems. 2007-03-07 Daniel Steffen * tcl.m4 (Darwin): s/CFLAGS/CPPFLAGS/ in -mmacosx-version-min check. 2007-02-15 Jeff Hobbs * tcl.m4: correct private header check to search in generic subdir 2007-02-09 Jeff Hobbs *** Bump to TEA_VERSION 3.6 *** * tcl.m4: correct -d to -f (TEA_CONFIG_CFLAGS): SHLIB_SUFFIX is .so on HP ia64 [Bug 1615058] 2007-02-08 Jeff Hobbs * tcl.m4 (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): check that the dirs actually have private headers. [Bug 1631922] 2007-02-04 Daniel Steffen * tcl.m4: add caching to -pipe check. 2007-01-25 Daniel Steffen * tcl.m4: integrate CPPFLAGS into CFLAGS as late as possible and move (rather than duplicate) -isysroot flags from CFLAGS to CPPFLAGS to avoid errors about multiple -isysroot flags from some older gcc builds. 2006-01-19 Daniel Steffen * tcl.m4: ensure CPPFLAGS env var is used when set. [Bug 1586861] (Darwin): add -isysroot and -mmacosx-version-min flags to CPPFLAGS when present in CFLAGS to avoid discrepancies between what headers configure sees during preprocessing tests and compiling tests. 2006-12-19 Daniel Steffen * tcl.m4 (Darwin): --enable-64bit: verify linking with 64bit -arch flag succeeds before enabling 64bit build. 2006-12-16 Daniel Steffen * tcl.m4 (Linux): fix previous change to use makefile variable LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile are picked up. 2006-11-26 Daniel Steffen * tcl.m4 (Linux): --enable-64bit support. [Patch 1597389], [Bug 1230558] 2006-08-18 Daniel Steffen * tcl.m4 (Darwin): add support for --enable-64bit on x86_64, for universal builds including x86_64 and for use of -mmacosx-version-min instead of MACOSX_DEPLOYMENT_TARGET. For Tk extensions, remove 64-bit arch flags from CFLAGS like in the Tk configure, as neither TkAqua nor TkX11 can be built for 64-bit at present. 2006-03-28 Jeff Hobbs * tcl.m4: []-quote AC_DEFUN functions. (TEA_PATH_TKCONFIG): Fixed Windows-specific check for tkConfig.sh. (TEA_MAKE_LIB): Prepend 'lib' for Windows-gcc configs. 2006-03-07 Joe English * tcl.m4: Set SHLIB_LD_FLAGS='${LIBS}' on NetBSD, as per the other *BSD variants [Bug 1334613]. 2006-01-25 Jeff Hobbs *** Bump to TEA version 3.5 *** * tcl.m4: keep LD_SEARCH_FLAGS and CC_SEARCH_FLAGS synchronous with core tcl.m4 meaning. 2006-01-24 Daniel Steffen * tcl.m4 (Darwin): use makefile variable LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile are picked up. [Bug 1403343] 2006-01-23 Jeff Hobbs * tcl.m4: add C:/Tcl/lib and C:/Progra~1/Tcl/lib dirs to check for *Config.sh on Windows. [Bug 1407544] 2006-01-23 Daniel Steffen * tcl.m4 (Darwin): for Tk extensions, remove -arch ppc64 from CFLAGS like in the Tk configure, as neither TkAqua nor TkX11 can be built for 64bit at present (no 64bit GUI libraries). 2006-01-22 Jeff Hobbs * tcl.m4: restore system=windows on Windows. Remove error if 'ar' isn't found (it may not be on Windows). Do not add -lxnet or define _XOPEN_SOURCE on HP-UX by default. Ensure the C|LDFLAGS_DEFAULT gets the fully sub'd value at configure time. 2006-01-10 Daniel Steffen * tcl.m4: add caching, use AC_CACHE_CHECK instead of AC_CACHE_VAL where possible, consistent message quoting, sync relevant tcl/unix/tcl.m4 HEAD changes and gratuitous formatting differences (notably sunc removal of support for for ancient BSD's, IRIX 4, RISCos and Ultrix by kennykb), Darwin improvements to TEA_LOAD_*CONFIG to make linking work against Tcl/Tk frameworks installed in arbitrary location, change TEA_PROG_* search order (look in *_BIN_DIR parents before *_PREFIX). 2006-01-05 Jeff Hobbs * tcl.m4: add dkf's system config refactor 2006-01-04 Jeff Hobbs * tcl.m4: remove extraneous ' that causes bash 3.1 to choke 2005-12-19 Joe English * tcl.m4 (TEA_PATH_TCLCONFIG &c): Look for tclConfig.sh &c in ${libdir}, where they are installed by default [Patch #1377407]. 2005-12-05 Don Porter * tcl.m4 (TEA_PUBLIC_*_HEADERS): Better support for finding header files for uninstalled Tcl and Tk. 2005-12-02 Jeff Hobbs * tcl.m4: correctly bump TEA_VERSION var to 3.4 2005-12-01 Daniel Steffen * unix/tcl.m4 (Darwin): fixed error when MACOSX_DEPLOYMENT_TARGET unset 2005-11-29 Jeff Hobbs * tcl.m4: *** Bump to TEA version 3.4 *** Add Windows x64 build support. Remove TEA_PATH_NOSPACE and handle the problem with ""s where necessary - the macro relied on TCLSH_PROG which didn't work for cross-compiles. 2005-11-27 Daniel Steffen * tcl.m4 (Darwin): add 64bit support, add CFLAGS to SHLIB_LD to support passing -isysroot in env(CFLAGS) to configure (flag can't be present twice, so can't be in both CFLAGS and LDFLAGS during configure), don't use -prebind when deploying on 10.4. (TEA_ENABLE_LANGINFO, TEA_TIME_HANDLER): add/fix caching. 2005-10-30 Daniel Steffen * tcl.m4: fixed two tests for TEA_WINDOWINGSYSTEM = "aqua" that should have been for `uname -s` = "Darwin" instead; added some missing quoting. (TEA_PROG_TCLSH, TEA_PROG_WISH): fix incorrect assumption that install location of tclConfig.sh/tkConfig.sh allows to determine the tclsh/wish install dir via ../bin. Indeed tcl/tk can be configured with arbitrary --libdir and --bindir (independent of prefix) and such a configuration is in fact standard with Darwin framework builds. At least now also check ${TCL_PREFIX}/bin resp. ${TK_PREFIX}/bin for presence of tclsh resp. wish (if tcl/tk have been configured with arbitrary --bindir, this will still not find them, for a general solution *Config.sh would need to contain the values of bindir/libdir/includedir passed to configure). 2005-10-07 Jeff Hobbs * tcl.m4: Fix Solaris 5.10 check and Solaris AMD64 64-bit builds. 2005-10-04 Jeff Hobbs * tcl.m4 (TEA_PRIVATE_TCL_HEADERS): add / to finish sed macro (TEA_ENABLE_THREADS): don't check for pthread_attr_setstacksize func 2005-09-13 Jeff Hobbs * tcl.m4: *** Update to TEA version 3.3 *** define TEA_WINDOWINGSYSTEM in TEA_LOAD_TKCONFIG. Make --enable-threads the default (users can --disable-threads). Improve AIX ${CC}_r fix to better check existing ${CC} value. Do the appropriate evals to not require the *TOP_DIR_NATIVE vars be set for extensions that use private headers. Make aqua check for Xlib compat headers the same as win32. 2005-07-26 Mo DeJong * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH, TEA_PROG_WISH, TEA_BUILD_WISH): Remove TEA_BUILD_TCLSH and TEA_BUILD_WISH because of complaints that it broke the build when only an installed version of Tcl was available at extension build time. The TEA_PROG_TCLSH and TEA_PROG_WISH macros will no longer search the path at all. The build tclsh or installed tclsh shell will now be found by TEA_PROG_TCLSH. 2005-07-24 Mo DeJong * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH, TEA_PROG_WISH, TEA_BUILD_WISH): Split confused search for tclsh on PATH and build and install locations into two macros. TEA_PROG_TCLSH and TEA_PROG_WISH search the system PATH for an installed tclsh or wish. The TEA_BUILD_TCLSH and TEA_BUILD_WISH macros determine the name of tclsh or wish in the Tcl or Tk build directory even if tclsh or wish has not yet been built. [Tcl bug 1160114] [Tcl patch 1244153] 2005-06-23 Daniel Steffen * tcl.m4 (TEA_PRIVATE_TK_HEADERS): add ${TK_SRC_DIR}/macosx to TK_INCLUDES when building against TkAqua. * tcl.m4 (TEA_PATH_X): fixed missing comma in AC_DEFINE * tcl.m4: changes to better support framework builds of Tcl and Tk out of the box: search framework install locations for *Config.sh, and if in presence of a framework build, use the framework's Headers and PrivateHeaders directories for public and private includes. [FR 947735] 2005-06-18 Daniel Steffen * tcl.m4 (Darwin): add -headerpad_max_install_names to LDFLAGS to ensure we can always relocate binaries with install_name_tool. 2005-06-04 Daniel Steffen * tcl.m4 (TEA_PATH_X): for TEA_WINDOWINGSYSTEM == aqua, check if xlib compat headers are available in tkheaders location, otherwise add xlib sourcedir to TK_XINCLUDES. 2005-04-25 Daniel Steffen * tcl.m4: added AC_DEFINE* descriptions (from core tcl.m4) to allow use with autoheader. (Darwin): added configure checks for recently added linker flags -single_module and -search_paths_first to allow building with older tools (and on Mac OS X 10.1), use -single_module in SHLIB_LD. (TEA_MISSING_POSIX_HEADERS): added caching of dirent.h check. (TEA_BUGGY_STRTOD): added caching (sync with core tcl.m4). 2005-03-24 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): use Tcl header defaults for wide int type only on Windows when __int64 is detected as valid. 2005-03-24 Don Porter * README.txt: Update reference to "SC_* macros" to "TEA_* macros". * tcl.m4: Incorporated recent improvements in SC_PATH_TCLCONFIG and SC_PATH_TKCONFIG into TEA_PATH_TCLCONFIG and TEA_PATH_TKCONFIG. Corrected search path in TEA_PATH_CONFIG and added AC_SUBST($1_BIN_DIR) to TEA_LOAD_CONFIG so that packages that load the configuration of another package can know where they loaded it from. 2005-03-18 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): correct 2005-03-17 change to have variant LD_SEARCH_FLAGS for gcc and cc builds. * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): correct x-compile check. 2005-03-17 Jeff Hobbs * tcl.m4: Correct gcc build and HP-UX-11. 2005-02-08 Jeff Hobbs * tcl.m4 (TEA_ADD_LIBS): don't touch lib args starting with -. (TEA_CONFIG_CFLAGS): only define _DLL for CE in shared build. (TEA_MAKE_LIB): set RANLIB* to : on Windows (it's not needed). 2005-02-01 Jeff Hobbs * tcl.m4: redo of 2005-01-27 changes to correctly handle paths with spaces. Win/CE and Win/64 builds now require a prebuilt tclsh to handle conversion to short pathnames. This is done in the new TEA_PATH_NOSPACE macro. For Win/CE|64, make CC just the compiler and move the necessary includes to CFLAGS. (TEA_CONFIG_CFLAGS): Add Solaris 64-bit gcc build support. (TEA_PROG_TCLSH, TEA_PROG_WISH): Allow TCLSH_PROG and WISH_PROG to be set in the env and prevent resetting. (TEA_ADD_LIBS): On Windows using GCC (mingw), convert foo.lib args to -lfoo, for use with mingw. *** POTENTIAL INCOMPATABILITY *** (TEA_CONFIG_CFLAGS): Fix AIX gcc builds to work out-of-box. Bumped TEA to 3.2. 2005-01-27 Jeff Hobbs * tcl.m4: remove cygpath calls to support msys. Update base CE build assumption to "420,ARMV4,ARM,Pocket PC 2003". Make STLIB_LD use $LINKBIN -lib. 2005-01-25 Daniel Steffen * tcl.m4 (Darwin): fixed bug with static build linking to dynamic library in /usr/lib etc instead of linking to static library earlier in search path. [Tcl Bug 956908] Removed obsolete references to Rhapsody. 2004-12-29 Jeff Hobbs * tcl.m4: Updates for VC7 compatibility, fixing CFLAGS and LDFLAGS options, using better default -O levels. [Bug 1092952, 1091967] 2004-12-29 Joe English * tcl.m4: Do not use ${DBGX} suffix when building shared libraries [patch #1081595, TIP #34] 2004-09-07 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): support eVC4 Win/CE builds 2004-08-10 Jeff Hobbs * tcl.m4 (TEA_INIT, TEA_PREFIX): update handling of exec_prefix to work around subdir configures since autoconf only propagates the prefix (not exec_prefix). 2004-07-23 Daniel Steffen * tcl.m4 (TEA_CONFIG_CFLAGS): Darwin section: brought inline with Tcl 8.5 HEAD config, removed core specific & obsolete settings. 2004-07-22 Jeff Hobbs * tcl.m4 (TEA_PATH_X): check in TK_DEFS for MAC_OSX_TK to see if we are compiling on Aqua. Add TEA_WINDOWINGSYSTEM var that reflects 'tk windowingsystem' value. 2004-07-16 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): force a threaded build when building against a threaded core. (CFLAGS_WARNING): Remove -Wconversion for gcc builds (TEA_CONFIG_CFLAGS): Reorder configure.in for better 64-bit build configuration, replacing EXTRA_CFLAGS with CFLAGS. [Bug #874058] Update to latest Tcl 8.5 head config settings. Call this TEA version 3.1. 2004-04-29 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): replace AC_TRY_RUN test with AC_TRY_COMPILE for the long vs. long long check. (kenny) 2004-04-26 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): update against core tcl.m4 to define TCL_WIDE_INT_IS_LONG if 'using long'. 2004-03-19 Jeff Hobbs * tcl.m4: correct Windows builds getting LDFLAGS info in MAKE_LIB 2004-02-11 Jeff Hobbs * tcl.m4: correct TCL_INCLUDES for private headers on Windows - it doesn't need the eval. 2004-02-10 Jeff Hobbs * tcl.m4: don't require TK_INCLUDES and TCL_INCLUDES to have the DIR_NATIVE vars defined when using private headers on unix. Allow $... to TEA_ADD_SOURCES for constructs like TEA_ADD_SOURCES([\$(WIN_OBJECTS)]), that allow the developer to place more in the Makefile.in. tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and CHECK on limits.h 2003-12-10 Jeff Hobbs * Makefile.in: added TEA_ADD_LIBS, TEA_ADD_INCLUDES and * configure: TEA_ADD_CFLAGS to configurable parameters with * configure.in: PKG_* equivs in the Makefile. This allows the * tclconfig/tcl.m4: user to worry less about actual magic VAR names. Corrected Makefile.in to note that TEA_ADD_TCL_SOURCES requires exact file names. 2003-12-09 Jeff Hobbs * tcl.m4: updated OpenBSD support based on [Patch #775246] (cassoff) 2003-12-05 Jeff Hobbs * configure: * configure.in: * Makefile.in (VPATH): readd $(srcdir) to front of VPATH as the first part of VPATH can get chopped off. Change .c.$(OBJEXT) rule to .c.@OBJEXT@ to support more makes. * tclconfig/tcl.m4: add TEA_ADD_STUB_SOURCES to support libstub generation and TEA_ADD_TCL_SOURCES to replace RUNTIME_SOURCES as the way the user specifies library files. 2003-12-03 Jeff Hobbs * configure: Update of TEA spec to (hopefully) simplify * configure.in: some aspects of TEA by making use of more * Makefile.in: AC 2.5x features. Use PACKAGE_NAME (instead * generic/tclsample.c: of PACKAGE) and PACKAGE_VERSION (instead of * tclconfig/tcl.m4: VERSION) arguments to AC_INIT as the TEA package name and version. Provide a version argument to TEA_INIT - starting with 3.0. Drop all use of interior shell substs that older makefiles didn't like. Use PKG_* naming convention instead. Move specification of source files and public headers into configure.in with TEA_ADD_SOURCES and TEA_ADD_HEADERS. These will be munged during ./configure into the right obj file names (no $(SOURCES:.c=.obj) needed). There is almost nothing that should be touched in Makefile.in now for the developer. May want to add a TEA_ADD_TCL_SOURCES for the RUNTIME_SOURCES that remains. Use SHLID_LD_FLAGS (instead of SHLID_LDFLAGS) as Tcl does. Only specify the user requested LDFLAGS/CFLAGS in the Makefile, don't mention the _OPTIMIZE/_DEBUG variants. 2003-10-15 Jeff Hobbs * tcl.m4: create a TEA_SETUP_COMPILER_CC the precedes the TEA_SETUP_COMPILER macro. They are split so the check for CC occurs before any use of CC. Also add AC_PROG_CPP to the compiler checks. 2003-10-06 Jeff Hobbs * tcl.m4: Updated for autoconf 2.5x prereq. Where TCL_WIDE_INT_TYPE would be __int64, defer to the code checks in tcl.h, which also handles TCL_LL_MODIFIER* properly. 2003-04-22 Jeff Hobbs * tcl.m4: correct default setting of ARCH for WinCE builds. Correct \ escaping for CE sed macros. 2003-04-10 Jeff Hobbs * tcl.m4: replace $(syscal) construct with older `syscall` for systems where sh != bash. 2003-04-09 Jeff Hobbs * tcl.m4 (TEA_WITH_CELIB): add --enable-wince and --with-celib options for Windows/CE compilation support. Requires the Microsoft eMbedded SDK and Keuchel's celib emulation layer. 2003-02-18 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): Make sure -lpthread gets passed on the link line when checking for the pthread_attr_setstacksize symbol. (dejong) * tcl.m4 (TEA_SETUP_COMPILER): added default calls to TEA_TCL_EARLY_FLAGS, TEA_TCL_64BIT_FLAGS, TEA_MISSING_POSIX_HEADERS and TEA_BUGGY_STRTOD. 2003-02-14 Jeff Hobbs * tcl.m4: correct HP-UX ia64 --enable-64bit build flags 2003-01-29 Jeff Hobbs * tcl.m4: check $prefix/lib as well as $exec_prefix/lib when looking for tcl|tkConfig.sh, as this check is done before we would set exec_prefix when the user does not define it. 2003-01-21 Mo DeJong * tcl.m4 (TEA_CONFIG_CFLAGS): Fix build support for mingw, the previous implementation would use VC++ when compiling with mingw gcc. Don't pass -fPIC since gcc always compiles pic code under win32. Change some hard coded cases of gcc to ${CC}. 2002-10-15 Jeff Hobbs * tcl.m4: move the CFLAGS definition from TEA_ENABLE_SHARED to TEA_MAKE_LIB because setting too early confuses other AC_* macros. Correct the HP-11 SHLIB_LD_LIBS setting. * tcl.m4: add the CFLAGS definition into TEA_ENABLE_SHARED and make it pick up the env CFLAGS at configure time. 2002-10-09 Jeff Hobbs * tcl.m4: add --enable-symbols=mem option to enable TCL_MEM_DEBUG. Improved AIX 64-bit build support, allow it on AIX-4 as well. Enable 64-bit HP-11 compilation with gcc. Enable 64-bit IRIX64-6 cc build support. Correct FreeBSD thread library linkage. Add OSF1 static build support. Improve SunOS-5 shared build SHLIB_LD macro. 2002-07-20 Zoran Vasiljevic * tcl.m4: Added MINGW32 to list of systems checked for Windows build. Also, fixes some indentation issues with "--with-XXX" options. 2002-04-23 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): added USE_THREAD_ALLOC define to use new threaded allocatory by default on Unix for Tcl 8.4. (TEA_CONFIG_CFLAGS): corrected LD_SEARCH_FLAGS for FreeBSD-3+. 2002-04-22 Jeff Hobbs * tcl.m4 (TEA_SETUP_COMPILER): removed call to AC_CYGWIN so that we can use autoconf 2.5x as well as 2.13. This prevents us from being able to warn against the use of cygwin gcc at configure time, but allows autoconf 2.5x, which is what is shipped with most newer systems. 2002-04-11 Jeff Hobbs * tcl.m4: Enabled COFF as well as CV style debug info with --enable-symbols to allow Dr. Watson users to see function info. More info on debugging levels can be obtained at: http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp 2002-04-03 Jeff Hobbs * tcl.m4: change all SC_* macros to TEA_*. The SC_ was for Scriptics, which is no more. TEA represents a better, independent prefix that won't need changing. Added preliminary mingw gcc support. [Patch #538772] Added TEA_PREFIX macro that handles defaulting the prefix and exec_prefix vars to those used by Tcl if none were specified. Added TEA_SETUP_COMPILER macro that encompasses the AC_PROG_CC check and several other basic AC_PROG checks needed for making executables. This greatly simplifies user's configure.in files. Collapsed AIX-5 defines into AIX-* with extra checks for doing the ELF stuff on AIX-5-ia64. Updated TEA_ENABLE_THREADS to take an optional arg to allow switching it on by default (for Thread) and add sanity checking to warn the user if configuring threads incompatibly. 2002-03-29 Jeff Hobbs * tcl.m4: made sure that SHLIB_LDFLAGS was set to LDFLAGS_DEFAULT. Removed --enable-64bit support for AIX-4 because it wasn't correct. Added -MT or -MD Windows linker switches to properly support symbols-enabled builds. 2002-03-28 Jeff Hobbs * tcl.m4: called AC_MSG_ERROR when SC_TEA_INIT wasn't called first instead of calling it as that inlines it each time in shell code. Changed Windows CFLAGS_OPTIMIZE to use -O2 instead of -Oti. Noted TCL_LIB_VERSIONS_OK=nodots for Windows builds. A few changes to support itcl (and perhaps others): Added support for making your own stub libraries to SC_MAKE_LIB. New SC_PATH_CONFIG and SC_LOAD_CONFIG that take a package name arg and find that ${pkg}Config.sh file. itk uses this for itcl. 2002-03-27 Jeff Hobbs * tcl.m4: made SC_LOAD_TKCONFIG recognize when working with a Tk build dir setup. Added EXTRA_CFLAGS and SHLIB_LD_LIBS substs to SC_CONFIG_CFLAGS. Added XLIBSW onto LIBS when it is defined. Remove TCL_LIBS from MAKE_LIB and correctly use SHLIB_LD_LIBS instead to not rely as much on tclConfig.sh cached info. Add TK_BIN_DIR to paths to find wish in SC_PROG_WISH. These move towards making TEA much more independent of *Config.sh. 2002-03-19 Jeff Hobbs * tcl.m4: corrected forgotten (UN)SHARED_LIB_SUFFIX and SHLIB_SUFFIX defines for Win. (SC_PATH_X): made this only do the check on unix platforms. 2002-03-12 Jeff Hobbs * README.txt: updated to reflect fewer files 2002-03-06 Jeff Hobbs * config.guess (removed): * config.sub (removed): removed unnecessary files * installFile.tcl (removed): * mkinstalldirs (removed): these aren't really necessary for making TEA work * tcl.m4 (SC_PUBLIC_TCL_HEADERS, SC_PUBLIC_TK_HEADERS): don't check /usr(/local)/include for includes on Windows when not using gcc 2002-03-05 Jeff Hobbs * tcl.m4: added warnings on Windows, removed RELPATH define and added TCL_LIBS to MAKE_LIB macro. This import represents 2.0.0, or a new start at attempting to make TEA much easier for C extension developers. **** moved from tclpro project to core tcl project, **** **** renamed to 'tclconfig' **** 2001-03-15 Karl Lehenbauer * installFile.tcl: Added updating of the modification time of the target file whether we overwrote it or decided that it hadn't changed. This was necessary for us to be able to determine whether or not a module install touched the file. 2001-03-08 Karl Lehenbauer * installFile.tcl: Added support for converting new-style (1.1+) Cygnus drive paths to Tcl-style. 2001-01-15 * tcl.m4: Added FreeBSD clause. 2001-01-03 * tcl.m4: Fixed typo in SC_LIB_SPEC where it is checking for exec-prefix. 2000-12-01 * tcl.m4: Concatenated most of the Ajuba acsite.m4 file so we don't need to modify the autoconf installation. * config.guess: * config.sub: * installFile.tcl: Added files from the itcl config subdirectory, which should go away. 2000-7-29 * Fixed the use of TCL_SRC_DIR and TK_SRC_DIR within TCL_PRIVATE_INCLUDES and TK_PRIVATE_INCLUDES to match their recent change from $(srcdir) to $(srcdir)/.. saods9/tksao/tclconfig/install-sh000755 000765 000000 00000033054 12540607755 017501 0ustar00joyewheel000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2011-04-20.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -S $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -S) stripcmd="$stripprog $2" shift;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: saods9/tksao/tclconfig/README.txt000644 000765 000000 00000001454 12540607755 017172 0ustar00joyewheel000000 000000 These files comprise the basic building blocks for a Tcl Extension Architecture (TEA) extension. For more information on TEA see: http://www.tcl.tk/doc/tea/ This package is part of the Tcl project at SourceForge, and latest sources should be available there: http://tcl.sourceforge.net/ This package is a freely available open source package. You can do virtually anything you like with it, such as modifying it, redistributing it, and selling it either in whole or in part. CONTENTS ======== The following is a short description of the files you will find in the sample extension. README.txt This file install-sh Program used for copying binaries and script files to their install locations. tcl.m4 Collection of Tcl autoconf macros. Included by a package's aclocal.m4 to define TEA_* macros. saods9/tksao/tclconfig/tcl.m4000644 000765 000000 00000404643 12562732052 016520 0ustar00joyewheel000000 000000 # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. AC_PREREQ(2.57) dnl TEA extensions pass us the version of TEA they think they dnl are compatible with (must be set in TEA_INIT below) dnl TEA_VERSION="3.9" # Possible values for key variables defined: # # TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem') # TEA_PLATFORM - windows unix # #------------------------------------------------------------------------ # TEA_PATH_TCLCONFIG -- # # Locate the tclConfig.sh file and perform a sanity check on # the Tcl compile flags # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tcl=... # # Defines the following vars: # TCL_BIN_DIR Full path to the directory containing # the tclConfig.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_TCLCONFIG], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), with_tclconfig="${withval}") AC_MSG_CHECKING([for Tcl configuration]) AC_CACHE_VAL(ac_cv_c_tclconfig,[ # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_PATH_TKCONFIG -- # # Locate the tkConfig.sh file # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tk=... # # Defines the following vars: # TK_BIN_DIR Full path to the directory containing # the tkConfig.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_TKCONFIG], [ # # Ok, lets find the tk configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tk # if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), with_tkconfig="${withval}") AC_MSG_CHECKING([for Tk configuration]) AC_CACHE_VAL(ac_cv_c_tkconfig,[ # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ../tk \ `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tk \ `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_TCLCONFIG -- # # Load the tclConfig.sh file # # Arguments: # # Requires the following vars to be set: # TCL_BIN_DIR # # Results: # # Substitutes the following vars: # TCL_BIN_DIR # TCL_SRC_DIR # TCL_LIB_FILE #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TCLCONFIG], [ AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then AC_MSG_RESULT([loading]) . "${TCL_BIN_DIR}/tclConfig.sh" else AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh]) fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" AC_SUBST(TCL_VERSION) AC_SUBST(TCL_PATCH_LEVEL) AC_SUBST(TCL_BIN_DIR) AC_SUBST(TCL_SRC_DIR) AC_SUBST(TCL_LIB_FILE) AC_SUBST(TCL_LIB_FLAG) AC_SUBST(TCL_LIB_SPEC) AC_SUBST(TCL_STUB_LIB_FILE) AC_SUBST(TCL_STUB_LIB_FLAG) AC_SUBST(TCL_STUB_LIB_SPEC) AC_MSG_CHECKING([platform]) hold_cc=$CC; CC="$TCL_CC" AC_TRY_COMPILE(,[ #ifdef _WIN32 #error win32 #endif ], TEA_PLATFORM="unix", TEA_PLATFORM="windows" ) CC=$hold_cc AC_MSG_RESULT($TEA_PLATFORM) # The BUILD_$pkg is to define the correct extern storage class # handling when making this package AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [], [Building extension source?]) # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: AC_SUBST(CLEANFILES) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_DEFS) AC_SUBST(TCL_EXTRA_CFLAGS) AC_SUBST(TCL_LD_FLAGS) AC_SUBST(TCL_SHLIB_LD_LIBS) ]) #------------------------------------------------------------------------ # TEA_LOAD_TKCONFIG -- # # Load the tkConfig.sh file # # Arguments: # # Requires the following vars to be set: # TK_BIN_DIR # # Results: # # Sets the following vars that should be in tkConfig.sh: # TK_BIN_DIR #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TKCONFIG], [ AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh]) if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then AC_MSG_RESULT([loading]) . "${TK_BIN_DIR}/tkConfig.sh" else AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh]) fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" # TEA specific: Ensure windowingsystem is defined if test "${TEA_PLATFORM}" = "unix" ; then case ${TK_DEFS} in *MAC_OSX_TK*) AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?]) TEA_WINDOWINGSYSTEM="aqua" ;; *) TEA_WINDOWINGSYSTEM="x11" ;; esac elif test "${TEA_PLATFORM}" = "windows" ; then TEA_WINDOWINGSYSTEM="win32" fi AC_SUBST(TK_VERSION) AC_SUBST(TK_BIN_DIR) AC_SUBST(TK_SRC_DIR) AC_SUBST(TK_LIB_FILE) AC_SUBST(TK_LIB_FLAG) AC_SUBST(TK_LIB_SPEC) AC_SUBST(TK_STUB_LIB_FILE) AC_SUBST(TK_STUB_LIB_FLAG) AC_SUBST(TK_STUB_LIB_SPEC) # TEA specific: AC_SUBST(TK_LIBS) AC_SUBST(TK_XINCLUDES) ]) #------------------------------------------------------------------------ # TEA_PROG_TCLSH # Determine the fully qualified path name of the tclsh executable # in the Tcl build directory or the tclsh installed in a bin # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # TCLSH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_TCLSH], [ AC_MSG_CHECKING([for tclsh]) if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="${TCL_BIN_DIR}/tclsh" fi else # tclConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}" fi list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TCL_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${TCLSH_PROG}" ; then REAL_TCL_BIN_DIR="`cd "$i"; pwd`/" break fi done TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}" fi AC_MSG_RESULT([${TCLSH_PROG}]) AC_SUBST(TCLSH_PROG) ]) #------------------------------------------------------------------------ # TEA_PROG_WISH # Determine the fully qualified path name of the wish executable # in the Tk build directory or the wish installed in a bin # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # WISH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_WISH], [ AC_MSG_CHECKING([for wish]) if test -f "${TK_BIN_DIR}/Makefile" ; then # tkConfig.sh is in Tk build directory if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="${TK_BIN_DIR}/wish" fi else # tkConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}" fi list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TK_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${WISH_PROG}" ; then REAL_TK_BIN_DIR="`cd "$i"; pwd`/" break fi done WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}" fi AC_MSG_RESULT([${WISH_PROG}]) AC_SUBST(WISH_PROG) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-shared=yes|no # # Defines the following vars: # STATIC_BUILD Used for building import/export libraries # on Windows. # # Sets the following vars: # SHARED_BUILD Value of 1 or 0 #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SHARED], [ AC_MSG_CHECKING([how to build libraries]) AC_ARG_ENABLE(shared, AC_HELP_STRING([--enable-shared], [build and link with shared libraries (default: on)]), [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_shared+set}" = set; then enableval="$enable_shared" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" ; then AC_MSG_RESULT([shared]) SHARED_BUILD=1 else AC_MSG_RESULT([static]) SHARED_BUILD=0 AC_DEFINE(STATIC_BUILD, 1, [Is this a static build?]) fi AC_SUBST(SHARED_BUILD) ]) #------------------------------------------------------------------------ # TEA_ENABLE_THREADS -- # # Specify if thread support should be enabled. If "yes" is specified # as an arg (optional), threads are enabled by default, "no" means # threads are disabled. "yes" is the default. # # TCL_THREADS is checked so that if you are compiling an extension # against a threaded core, your extension must be compiled threaded # as well. # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-threads # # Sets the following vars: # THREADS_LIBS Thread library(s) # # Defines the following vars: # TCL_THREADS # _REENTRANT # _THREAD_SAFE #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_THREADS], [ AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], [build with threads]), [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_threads+set}" = set; then enableval="$enable_threads" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then TCL_THREADS=1 if test "${TEA_PLATFORM}" != "windows" ; then # We are always OK on Windows, so check what this platform wants: # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention AC_DEFINE(USE_THREAD_ALLOC, 1, [Do we want to use the threaded memory allocator?]) AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) if test "`uname -s`" = "SunOS" ; then AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) fi AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?]) AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no) if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] AC_CHECK_LIB(pthread, __pthread_mutex_init, tcl_ok=yes, tcl_ok=no) fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else AC_CHECK_LIB(pthreads, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else AC_CHECK_LIB(c, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "no"; then AC_CHECK_LIB(c_r, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -pthread" else TCL_THREADS=0 AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled]) fi fi fi fi fi else TCL_THREADS=0 fi # Do checking message here to not mess up interleaved configure output AC_MSG_CHECKING([for building with threads]) if test "${TCL_THREADS}" = 1; then AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?]) AC_MSG_RESULT([yes (default)]) else AC_MSG_RESULT([no]) fi # TCL_THREADS sanity checking. See if our request for building with # threads is the same as the way Tcl was built. If not, warn the user. case ${TCL_DEFS} in *THREADS=1*) if test "${TCL_THREADS}" = "0"; then AC_MSG_WARN([ Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads.]) fi ;; *) if test "${TCL_THREADS}" = "1"; then AC_MSG_WARN([ --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core.]) fi ;; esac AC_SUBST(TCL_THREADS) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SYMBOLS -- # # Specify if debugging symbols should be used. # Memory (TCL_MEM_DEBUG) debugging can also be enabled. # # Arguments: # none # # TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives # the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted. # Requires the following vars to be set in the Makefile: # CFLAGS_DEFAULT # LDFLAGS_DEFAULT # # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true # Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false # LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true # Sets to $(LDFLAGS_OPTIMIZE) if false # DBGX Formerly used as debug library extension; # always blank now. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SYMBOLS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_CONFIG_CFLAGS]) AC_MSG_CHECKING([for build with symbols]) AC_ARG_ENABLE(symbols, AC_HELP_STRING([--enable-symbols], [build with debugging symbols (default: off)]), [tcl_ok=$enableval], [tcl_ok=no]) DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" AC_MSG_RESULT([no]) else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then AC_MSG_RESULT([yes (standard debugging)]) fi fi # TEA specific: if test "${TEA_PLATFORM}" != "windows" ; then LDFLAGS_DEFAULT="${LDFLAGS}" fi AC_SUBST(CFLAGS_DEFAULT) AC_SUBST(LDFLAGS_DEFAULT) AC_SUBST(TCL_DBGX) if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?]) fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then AC_MSG_RESULT([enabled symbols mem debugging]) else AC_MSG_RESULT([enabled $tcl_ok debugging]) fi fi ]) #------------------------------------------------------------------------ # TEA_ENABLE_LANGINFO -- # # Allows use of modern nl_langinfo check for better l10n. # This is only relevant for Unix. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_LANGINFO], [ AC_ARG_ENABLE(langinfo, AC_HELP_STRING([--enable-langinfo], [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]), [langinfo_ok=$enableval], [langinfo_ok=yes]) HAVE_LANGINFO=0 if test "$langinfo_ok" = "yes"; then AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no]) fi AC_MSG_CHECKING([whether to use nl_langinfo]) if test "$langinfo_ok" = "yes"; then AC_CACHE_VAL(tcl_cv_langinfo_h, [ AC_TRY_COMPILE([#include ], [nl_langinfo(CODESET);], [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])]) AC_MSG_RESULT([$tcl_cv_langinfo_h]) if test $tcl_cv_langinfo_h = yes; then AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?]) fi else AC_MSG_RESULT([$langinfo_ok]) fi ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the # "uname" command. # # Arguments: # none # # Results: # Defines the following var: # # system - System/platform/version identification code. #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_SYSTEM], [ AC_CACHE_CHECK([system version], tcl_cv_sys_version, [ # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then AC_MSG_WARN([can't find uname command]) tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi ]) system=$tcl_cv_sys_version ]) #-------------------------------------------------------------------- # TEA_CONFIG_CFLAGS # # Try to determine the proper flags to pass to the compiler # for building shared libraries and other such nonsense. # # Arguments: # none # # Results: # # Defines and substitutes the following vars: # # DL_OBJS, DL_LIBS - removed for TEA, only needed by core. # LDFLAGS - Flags to pass to the compiler when linking object # files into an executable application binary such # as tclsh. # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. Could # be the same as CC_SEARCH_FLAGS if ${CC} is used to link. # CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically # goes at the end of the "ld" commands that build # shared libraries. The value of the symbol defaults to # "${LIBS}" if all of the dependent libraries should # be specified when creating a shared library. If # dependent libraries should not be specified (as on # SunOS 4.x, where they cause the link to fail, or in # general if Tcl and Tk aren't themselves shared # libraries), then this symbol has an empty string # as its value. # SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable # extensions. An empty string means we don't know how # to use shared libraries on this platform. # LIB_SUFFIX - Specifies everything that comes after the "libfoo" # in a static or shared library name, using the $PACKAGE_VERSION variable # to put the version in the right place. This is used # by platforms that need non-standard library names. # Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs # to have a version after the .so, and ${PACKAGE_VERSION}.a # on AIX, since a shared library needs to have # a .a extension whereas shared objects for loadable # extensions have a .so extension. Defaults to # ${PACKAGE_VERSION}${SHLIB_SUFFIX}. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_CFLAGS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # Step 0.a: Enable 64 bit support? AC_MSG_CHECKING([if 64bit support is requested]) AC_ARG_ENABLE(64bit, AC_HELP_STRING([--enable-64bit], [enable 64bit support (default: off)]), [do64bit=$enableval], [do64bit=no]) AC_MSG_RESULT([$do64bit]) # Step 0.b: Enable Solaris 64 bit VIS support? AC_MSG_CHECKING([if 64bit Sparc VIS support is requested]) AC_ARG_ENABLE(64bit-vis, AC_HELP_STRING([--enable-64bit-vis], [enable 64bit Sparc VIS support (default: off)]), [do64bitVIS=$enableval], [do64bitVIS=no]) AC_MSG_RESULT([$do64bitVIS]) # Force 64bit on with VIS AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes]) # Step 0.c: Check if visibility support is available. Do this here so # that platform specific alternatives can be used below if this fails. AC_CACHE_CHECK([if compiler supports visibility "hidden"], tcl_cv_cc_visibility_hidden, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" AC_TRY_LINK([ extern __attribute__((__visibility__("hidden"))) void f(void); void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], [disable rpath support (default: on)]), [doRpath=$enableval], [doRpath=yes]) AC_MSG_RESULT([$doRpath]) # TEA specific: Cross-compiling options for Windows/CE builds? AS_IF([test "${TEA_PLATFORM}" = windows], [ AC_MSG_CHECKING([if Windows/CE build is requested]) AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) # Set the variable "system" to hold the name and version number # for the system. TEA_CONFIG_SYSTEM # Require ranlib early so we can override it in special cases below. AC_REQUIRE([AC_PROG_RANLIB]) # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g AS_IF([test "$GCC" = yes], [ CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" ], [ CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" ]) AC_CHECK_TOOL(AR, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION="1.0"]) case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs # MACHINE is IX86 for LINK, but this is used by the manifest, # which requires x86|amd64|ia64. MACHINE="X86" if test "$do64bit" != "no" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft Platform SDK" fi MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` PATH64="" case "$do64bit" in amd64|x64|yes) MACHINE="AMD64" ; # default to AMD64 64-bit build PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) AC_MSG_WARN([Ensure latest Platform SDK is installed]) do64bit="no" else AC_MSG_RESULT([ Using 64-bit $MACHINE mode]) do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" != "no" ; then AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible]) fi if test "$GCC" = "yes" ; then AC_MSG_ERROR([Windows/CE and GCC builds incompatible]) fi TEA_PATH_CELIB # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \ if ([$]1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \ if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \ if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]]) doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" != "no" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="\"${PATH64}/cl.exe\"" CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" RC="\"${MSSDK}/bin/rc.exe\"" lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" LINKBIN="\"${PATH64}/link.exe\"" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" # Avoid 'unresolved external symbol __security_cookie' # errors, c.f. http://support.microsoft.com/?id=894573 TEA_ADD_LIBS([bufferoverflowU.lib]) elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="\"${CEBINROOT}/cl.exe\"" else CC="\"${CEBINROOT}/cl${ARCH}.exe\"" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" arch=`echo ${ARCH} | awk '{print tolower([$]0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i) done AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version]) AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version]) CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode AC_CHECK_TOOL(RC, windres) CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" AC_CACHE_CHECK(for cross-compile version of gcc, ac_cv_cross, AC_TRY_COMPILE([ #ifdef __WIN32__ #error cross-compiler #endif ], [], ac_cv_cross=yes, ac_cv_cross=no) ) if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # and also # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx # This essentially turns it all on. LDFLAGS_DEBUG="-debug -debugtype:cv" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [ # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'` ;; esac AC_MSG_RESULT([Using $CC for compiling with threads]) ]) LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported with GCC on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" ]) ]) AS_IF([test "`uname -m`" = ia64], [ # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" AS_IF([test "$GCC" = yes], [ CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' ], [ CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' ]) LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ], [ AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared -Wl,-bexpall' ], [ SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" ]) SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"]) ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library AS_IF([test "`uname -m`" = ia64], [ SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi ], [ SHLIB_SUFFIX=".sl" ]) AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) AS_IF([test "$tcl_ok" = yes], [ LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" ]) AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ CFLAGS="$CFLAGS -z" # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" ]) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]) ;; esac ], [ do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" ]) ]) ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [ CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" ], [ case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported by gcc]) ], [ do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" ]) ]) ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) AS_IF([test $do64bit = yes], [ AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -m64" AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_m64 = yes], [ CFLAGS="$CFLAGS -m64" do64bit_ok=yes ]) ]) # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac AS_IF([test "${TCL_THREADS}" = "1"], [ # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" ]) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$[@]" SHLIB_SUFFIX=".so" LDFLAGS="" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS"]) # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1' TCL_LIB_VERSIONS_OK=nodots ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`" CFLAGS="`echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`" AS_IF([test $do64bit = yes], [ case `arch` in ppc) AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag], tcl_cv_cc_arch_ppc64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes, tcl_cv_cc_arch_ppc64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [ CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" do64bit_ok=yes ]);; i386) AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag], tcl_cv_cc_arch_x86_64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch x86_64" AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes, tcl_cv_cc_arch_x86_64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [ CFLAGS="$CFLAGS -arch x86_64" do64bit_ok=yes ]);; *) AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);; esac ], [ # Check for combined 32-bit and 64-bit fat build AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [ fat_32_64=yes]) ]) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [ LDFLAGS="$LDFLAGS -prebind"]) LDFLAGS="$LDFLAGS -headerpad_max_install_names" AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_search_paths_first = yes], [ LDFLAGS="$LDFLAGS -Wl,-search_paths_first" ]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [__private_extern__], [Compiler support for module scope symbols]) tcl_cv_cc_visibility_hidden=yes ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [ AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [ AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" AC_TRY_LINK([#include ], [XrmInitialize();], tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [ AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" AC_TRY_LINK([#include ], [Tk_InitStubs(NULL, "", 0);], tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) # remove 64-bit arch flags from CFLAGS et al. if configuration # does not support 64-bit. AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h [Should OS/390 do the right thing with sockets?]) ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" AS_IF([test "$SHARED_BUILD" = 1], [ SHLIB_LD='ld -shared -expect_unresolved "*"' ], [ SHLIB_LD='ld -non_shared -expect_unresolved "*"' ]) SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [ CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"]) # see pthread_intro(3) for pthread support on osf1, k.furukawa AS_IF([test "${TCL_THREADS}" = 1], [ CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` AS_IF([test "$GCC" = yes], [ LIBS="$LIBS -lpthread -lmach -lexc" ], [ CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ]) ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) AS_IF([test "$GCC" = yes], [ SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" ], [ SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" ]) SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[[0-6]]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ arch=`isainfo` AS_IF([test "$arch" = "sparcv9 sparc"], [ AS_IF([test "$GCC" = yes], [ AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [ AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" ]) ], [ do64bit_ok=yes AS_IF([test "$do64bitVIS" = yes], [ CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS_ARCH="-xarch=v9a" ], [ CFLAGS="$CFLAGS -xarch=v9" LDFLAGS_ARCH="-xarch=v9" ]) # Solaris 64 uses this as well #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" ]) ], [AS_IF([test "$arch" = "amd64 i386"], [ AS_IF([test "$GCC" = yes], [ case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) do64bit_ok=yes CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]);; esac ], [ do64bit_ok=yes case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "$do64bit_ok" = yes], [ AS_IF([test "$arch" = "sparcv9 sparc"], [ # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" ], [AS_IF([test "$arch" = "amd64 i386"], [ # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" ])]) ]) ], [ case $system in SunOS-5.[[1-9]][[0-9]]*) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';; *) SHLIB_LD='/usr/ccs/bin/ld -G -z text';; esac CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_Bexport = yes], [ LDFLAGS="$LDFLAGS -Wl,-Bexport" ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; esac AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [ AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform]) ]) dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. AS_IF([test "$GCC" = yes], [ case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [extern], [No Compiler support for module scope symbols]) ]) AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then AC_CACHE_CHECK(for SEH support in compiler, tcl_cv_seh, AC_TRY_RUN([ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } ], tcl_cv_seh=yes, tcl_cv_seh=no, tcl_cv_seh=no) ) if test "$tcl_cv_seh" = "no" ; then AC_DEFINE(HAVE_NO_SEH, 1, [Defined when mingw does not support SEH]) fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, tcl_cv_eh_disposition, AC_TRY_COMPILE([ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN ],[ EXCEPTION_DISPOSITION x; ], tcl_cv_eh_disposition=yes, tcl_cv_eh_disposition=no) ) if test "$tcl_cv_eh_disposition" = "no" ; then AC_DEFINE(EXCEPTION_DISPOSITION, int, [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. AC_CACHE_CHECK(for winnt.h that ignores VOID define, tcl_cv_winnt_ignore_void, AC_TRY_COMPILE([ #define VOID void #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN ], [ CHAR c; SHORT s; LONG l; ], tcl_cv_winnt_ignore_void=yes, tcl_cv_winnt_ignore_void=no) ) if test "$tcl_cv_winnt_ignore_void" = "yes" ; then AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, [Defined when cygwin/mingw ignores VOID define in winnt.h]) fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. AC_CACHE_CHECK(for cast to union support, tcl_cv_cast_to_union, AC_TRY_COMPILE([], [ union foo { int i; double d; }; union foo f = (union foo) (int) 0; ], tcl_cv_cast_to_union=yes, tcl_cv_cast_to_union=no) ) if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) AC_SUBST(STLIB_LD) AC_SUBST(SHLIB_LD) AC_SUBST(SHLIB_LD_LIBS) AC_SUBST(SHLIB_CFLAGS) AC_SUBST(LD_LIBRARY_PATH_VAR) # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary TEA_TCL_EARLY_FLAGS TEA_TCL_64BIT_FLAGS ]) #-------------------------------------------------------------------- # TEA_SERIAL_PORT # # Determine which interface to use to talk to the serial port. # Note that #include lines must begin in leftmost column for # some compilers to recognize them as preprocessor directives, # and some build environments have stdin not pointing at a # pseudo-terminal (usually /dev/null instead.) # # Arguments: # none # # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY #-------------------------------------------------------------------- AC_DEFUN([TEA_SERIAL_PORT], [ AC_CHECK_HEADERS(sys/modem.h) AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ AC_TRY_RUN([ #include int main() { struct termios t; if (tcgetattr(0, &t) == 0) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include #include int main() { struct termios t; if (tcgetattr(0, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) fi]) case $tcl_cv_api_serial in termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);; termio) AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);; sgtty) AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);; esac ]) #-------------------------------------------------------------------- # TEA_MISSING_POSIX_HEADERS # # Supply substitutes for missing POSIX header files. Special # notes: # - stdlib.h doesn't define strtol, strtoul, or # strtod in some versions of SunOS # - some versions of string.h don't declare procedures such # as strstr # # Arguments: # none # # Results: # # Defines some of the following vars: # NO_DIRENT_H # NO_ERRNO_H # NO_VALUES_H # HAVE_LIMITS_H or NO_LIMITS_H # NO_STDLIB_H # NO_STRING_H # NO_SYS_WAIT_H # NO_DLFCN_H # HAVE_SYS_PARAM_H # # HAVE_STRING_H ? # # tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and # CHECK on limits.h #-------------------------------------------------------------------- AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [ AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [ AC_TRY_LINK([#include #include ], [ #ifndef _POSIX_SOURCE # ifdef __Lynx__ /* * Generate compilation error to make the test fail: Lynx headers * are only valid if really in the POSIX environment. */ missing_procedure(); # endif #endif DIR *d; struct dirent *entryPtr; char *p; d = opendir("foobar"); entryPtr = readdir(d); p = entryPtr->d_name; closedir(d); ], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)]) if test $tcl_cv_dirent_h = no; then AC_DEFINE(NO_DIRENT_H, 1, [Do we have ?]) fi # TEA specific: AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have ?])]) AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have ?])]) AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have ?])]) AC_CHECK_HEADER(limits.h, [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have ?])], [AC_DEFINE(NO_LIMITS_H, 1, [Do we have ?])]) AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0) if test $tcl_ok = 0; then AC_DEFINE(NO_STDLIB_H, 1, [Do we have ?]) fi AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0) AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0) # See also memmove check below for a place where NO_STRING_H can be # set and why. if test $tcl_ok = 0; then AC_DEFINE(NO_STRING_H, 1, [Do we have ?]) fi AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have ?])]) AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have ?])]) # OS/390 lacks sys/param.h (and doesn't need it, by chance). AC_HAVE_HEADERS(sys/param.h) ]) #-------------------------------------------------------------------- # TEA_PATH_X # # Locate the X11 header files and the X11 library archive. Try # the ac_path_x macro first, but if it doesn't find the X stuff # (e.g. because there's no xmkmf program) then check through # a list of possible directories. Under some conditions the # autoconf macro will return an include directory that contains # no include files, so double-check its result just to be safe. # # This should be called after TEA_CONFIG_CFLAGS as setting the # LIBS line can confuse some configure macro magic. # # Arguments: # none # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) #-------------------------------------------------------------------- AC_DEFUN([TEA_PATH_X], [ if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then TEA_PATH_UNIX_X fi ]) AC_DEFUN([TEA_PATH_UNIX_X], [ AC_PATH_X not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then AC_TRY_CPP([#include ], , not_really_there="yes") else if test ! -r $x_includes/X11/Xlib.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then AC_MSG_CHECKING([for X11 header files]) found_xincludes="no" AC_TRY_CPP([#include ], found_xincludes="yes", found_xincludes="no") if test "$found_xincludes" = "no"; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Xlib.h; then AC_MSG_RESULT([$i]) XINCLUDES=" -I$i" found_xincludes="yes" break fi done fi else if test "$x_includes" != ""; then XINCLUDES="-I$x_includes" found_xincludes="yes" fi fi if test "$found_xincludes" = "no"; then AC_MSG_RESULT([couldn't find any!]) fi if test "$no_x" = yes; then AC_MSG_CHECKING([for X11 libraries]) XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" for i in $dirs ; do if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then AC_MSG_RESULT([$i]) XLIBSW="-L$i -lX11" x_libraries="$i" break fi done else if test "$x_libraries" = ""; then XLIBSW=-lX11 else XLIBSW="-L$x_libraries -lX11" fi fi if test "$XLIBSW" = nope ; then AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow) fi if test "$XLIBSW" = nope ; then AC_MSG_RESULT([could not find any! Using -lX11.]) XLIBSW=-lX11 fi # TEA specific: if test x"${XLIBSW}" != x ; then PKG_LIBS="${PKG_LIBS} ${XLIBSW}" fi ]) #-------------------------------------------------------------------- # TEA_BLOCKING_STYLE # # The statements below check for systems where POSIX-style # non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. # On these systems (mostly older ones), use the old BSD-style # FIONBIO approach instead. # # Arguments: # none # # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK #-------------------------------------------------------------------- AC_DEFUN([TEA_BLOCKING_STYLE], [ AC_CHECK_HEADERS(sys/ioctl.h) AC_CHECK_HEADERS(sys/filio.h) TEA_CONFIG_SYSTEM AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) case $system in OSF*) AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) AC_MSG_RESULT([FIONBIO]) ;; *) AC_MSG_RESULT([O_NONBLOCK]) ;; esac ]) #-------------------------------------------------------------------- # TEA_TIME_HANDLER # # Checks how the system deals with time.h, what time structures # are used on the system, and what fields the structures have. # # Arguments: # none # # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR #-------------------------------------------------------------------- AC_DEFUN([TEA_TIME_HANDLER], [ AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE AC_CHECK_FUNCS(gmtime_r localtime_r) AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [ AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_tzadj;], tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)]) if test $tcl_cv_member_tm_tzadj = yes ; then AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?]) fi AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [ AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_gmtoff;], tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)]) if test $tcl_cv_member_tm_gmtoff = yes ; then AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?]) fi # # Its important to include time.h in this check, as some systems # (like convex) have timezone functions, etc. # AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [ AC_TRY_COMPILE([#include ], [extern long timezone; timezone += 1; exit (0);], tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)]) if test $tcl_cv_timezone_long = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) else # # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. # AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [ AC_TRY_COMPILE([#include ], [extern time_t timezone; timezone += 1; exit (0);], tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)]) if test $tcl_cv_timezone_time = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) fi fi ]) #-------------------------------------------------------------------- # TEA_BUGGY_STRTOD # # Under Solaris 2.4, strtod returns the wrong value for the # terminating character under some conditions. Check for this # and if the problem exists use a substitute procedure # "fixstrtod" (provided by Tcl) that corrects the error. # Also, on Compaq's Tru64 Unix 5.0, # strtod(" ") returns 0.0 instead of a failure to convert. # # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) #-------------------------------------------------------------------- AC_DEFUN([TEA_BUGGY_STRTOD], [ AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) if test "$tcl_strtod" = 1; then AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[ AC_TRY_RUN([ extern double strtod(); int main() { char *infString="Inf", *nanString="NaN", *spaceString=" "; char *term; double value; value = strtod(infString, &term); if ((term != infString) && (term[-1] == 0)) { exit(1); } value = strtod(nanString, &term); if ((term != nanString) && (term[-1] == 0)) { exit(1); } value = strtod(spaceString, &term); if (term == (spaceString+1)) { exit(1); } exit(0); }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy, tcl_cv_strtod_buggy=buggy)]) if test "$tcl_cv_strtod_buggy" = buggy; then AC_LIBOBJ([fixstrtod]) USE_COMPAT=1 AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?]) fi fi ]) #-------------------------------------------------------------------- # TEA_TCL_LINK_LIBS # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: # DL_LIBS (not in TEA, only needed in core) # LIBS # MATH_LIBS # # Results: # # Substitutes the following vars: # TCL_LIBS # MATH_LIBS # # Might append to the following vars: # LIBS # # Might define the following vars: # HAVE_NET_ERRNO_H #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_LINK_LIBS], [ #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) #-------------------------------------------------------------------- # Interactive UNIX requires -linet instead of -lsocket, plus it # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) AC_CHECK_HEADER(net/errno.h, [ AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have ?])]) #-------------------------------------------------------------------- # Check for the existence of the -lsocket and -lnsl libraries. # The order here is important, so that they end up in the right # order in the command line generated by make. Here are some # special considerations: # 1. Use "connect" and "accept" to check for -lsocket, and # "gethostbyname" to check for -lnsl. # 2. Use each function name only once: can't redo a check because # autoconf caches the results of the last check and won't redo it. # 3. Use -lnsl and -lsocket only if they supply procedures that # aren't already present in the normal libraries. This is because # IRIX 5.2 has libraries, but they aren't needed and they're # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- tcl_checkBoth=0 AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1) if test "$tcl_checkSocket" = 1; then AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt, LIBS="$LIBS -lsocket", tcl_checkBoth=1)]) fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs]) fi AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname, [LIBS="$LIBS -lnsl"])]) # TEA specific: Don't perform the eval of the libraries here because # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' AC_SUBST(TCL_LIBS) AC_SUBST(MATH_LIBS) ]) #-------------------------------------------------------------------- # TEA_TCL_EARLY_FLAGS # # Check for what flags are needed to be passed so the correct OS # features are available. # # Arguments: # None # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_EARLY_FLAG],[ AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, AC_TRY_COMPILE([[#define ]$1[ 1 ]$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no))) if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then AC_DEFINE($1, 1, [Add the ]$1[ flag when building]) tcl_flags="$tcl_flags $1" fi ]) AC_DEFUN([TEA_TCL_EARLY_FLAGS],[ AC_MSG_CHECKING([for required early compiler flags]) tcl_flags="" TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include ], [char *p = (char *)strtoll; char *q = (char *)strtoull;]) TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include ], [struct stat64 buf; int i = stat64("/", &buf);]) TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include ], [char *p = (char *)open64;]) if test "x${tcl_flags}" = "x" ; then AC_MSG_RESULT([none]) else AC_MSG_RESULT([${tcl_flags}]) fi ]) #-------------------------------------------------------------------- # TEA_TCL_64BIT_FLAGS # # Check for what is defined in the way of 64-bit features. # # Arguments: # None # # Results: # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_64BIT_FLAGS], [ AC_MSG_CHECKING([for 64-bit integer type]) AC_CACHE_VAL(tcl_cv_type_64bit,[ tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], tcl_type_64bit=__int64, tcl_type_64bit="long long") # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... AC_TRY_COMPILE(,[switch (0) { case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; }],tcl_cv_type_64bit=${tcl_type_64bit})]) if test "${tcl_cv_type_64bit}" = none ; then AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?]) AC_MSG_RESULT([using long]) elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* AC_MSG_RESULT([using Tcl header defaults]) else AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}, [What type should be used to define wide integers?]) AC_MSG_RESULT([${tcl_cv_type_64bit}]) # Now check for auxiliary declarations AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ AC_TRY_COMPILE([#include #include ],[struct dirent64 p;], tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in ?]) fi AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include ],[struct stat64 p; ], tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)]) if test "x${tcl_cv_struct_stat64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in ?]) fi AC_CHECK_FUNCS(open64 lseek64) AC_MSG_CHECKING([for off64_t]) AC_CACHE_VAL(tcl_cv_type_off64_t,[ AC_TRY_COMPILE([#include ],[off64_t offset; ], tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)]) dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the dnl functions lseek64 and open64 are defined. if test "x${tcl_cv_type_off64_t}" = "xyes" && \ test "x${ac_cv_func_lseek64}" = "xyes" && \ test "x${ac_cv_func_open64}" = "xyes" ; then AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in ?]) AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi ]) ## ## Here ends the standard Tcl configuration bits and starts the ## TEA specific functions ## #------------------------------------------------------------------------ # TEA_INIT -- # # Init various Tcl Extension Architecture (TEA) variables. # This should be the first called TEA_* macro. # # Arguments: # none # # Results: # # Defines and substs the following vars: # CYGPATH # EXEEXT # Defines only: # TEA_VERSION # TEA_INITED # TEA_PLATFORM (windows or unix) # # "cygpath" is used on windows to generate native path names for include # files. These variables should only be used with the compiler and linker # since they generate native path names. # # EXEEXT # Select the executable extension based on the host type. This # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" AC_MSG_CHECKING([for correct TEA configuration]) if test x"${PACKAGE_NAME}" = x ; then AC_MSG_ERROR([ The PACKAGE_NAME variable must be defined by your TEA configure.in]) fi if test x"$1" = x ; then AC_MSG_ERROR([ TEA version not specified.]) elif test "$1" != "${TEA_VERSION}" ; then AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"]) else AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}]) AC_SUBST(EXEEXT) AC_SUBST(CYGPATH) # This package name must be replaced statically for AC_SUBST to work AC_SUBST(PKG_LIB_FILE) # Substitute STUB_LIB_FILE in case package creates a stub library too. AC_SUBST(PKG_STUB_LIB_FILE) # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) AC_SUBST(PKG_TCL_SOURCES) AC_SUBST(PKG_HEADERS) AC_SUBST(PKG_INCLUDES) AC_SUBST(PKG_LIBS) AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_SOURCES # PKG_OBJECTS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_SOURCES], [ vars="$@" for i in $vars; do case $i in [\$]*) # allow $-var names PKG_SOURCES="$PKG_SOURCES $i" PKG_OBJECTS="$PKG_OBJECTS $i" ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir # i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_OBJECTS="$PKG_OBJECTS $j" ;; esac done AC_SUBST(PKG_SOURCES) AC_SUBST(PKG_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_STUB_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_STUB_SOURCES # PKG_STUB_OBJECTS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" done AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_TCL_SOURCES -- # # Specify one or more Tcl source files. These should be platform # independent runtime files. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_TCL_SOURCES #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_TCL_SOURCES], [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i']) fi PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" done AC_SUBST(PKG_TCL_SOURCES) ]) #------------------------------------------------------------------------ # TEA_ADD_HEADERS -- # # Specify one or more source headers. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_HEADERS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_HEADERS], [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find header file '${srcdir}/$i']) fi PKG_HEADERS="$PKG_HEADERS $i" done AC_SUBST(PKG_HEADERS) ]) #------------------------------------------------------------------------ # TEA_ADD_INCLUDES -- # # Specify one or more include dirs. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_INCLUDES], [ vars="$@" for i in $vars; do PKG_INCLUDES="$PKG_INCLUDES $i" done AC_SUBST(PKG_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_ADD_LIBS -- # # Specify one or more libraries. Users should check for # the right platform before adding to their list. For Windows, # libraries provided in "foo.lib" format will be converted to # "-lfoo" when using GCC (mingw). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_LIBS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_LIBS], [ vars="$@" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done AC_SUBST(PKG_LIBS) ]) #------------------------------------------------------------------------ # TEA_ADD_CFLAGS -- # # Specify one or more CFLAGS. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_CLEANFILES -- # # Specify one or more CLEANFILES. # # Arguments: # one or more file names to clean target # # Results: # # Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CLEANFILES], [ CLEANFILES="$CLEANFILES $@" ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: # none # # Results: # # If --prefix or --exec-prefix was not specified, $prefix and # $exec_prefix will be set to the values given to Tcl when it was # configured. #------------------------------------------------------------------------ AC_DEFUN([TEA_PREFIX], [ if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}]) prefix=${TCL_PREFIX} else AC_MSG_NOTICE([--prefix defaulting to /usr/local]) prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}]) exec_prefix=${TCL_EXEC_PREFIX} else AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}]) exec_prefix=$prefix fi fi ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER_CC -- # # Do compiler checks the way we want. This is just a replacement # for AC_PROG_CC in TEA configure.in files to make them cleaner. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. AC_PROG_CC AC_PROG_CPP INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" AC_SUBST(INSTALL) #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- AC_PROG_MAKE_SET #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- AC_CHECK_TOOL(RANLIB, ranlib) #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- AC_OBJEXT AC_EXEEXT ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER -- # # Do compiler checks that use the compiler. This must go after # TEA_SETUP_COMPILER_CC, which does the actual compiler check. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER], [ # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. AC_REQUIRE([TEA_SETUP_COMPILER_CC]) #------------------------------------------------------------------------ # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------ if test -z "$no_pipe" -a -n "$GCC"; then AC_CACHE_CHECK([if the compiler understands -pipe], tcl_cv_cc_pipe, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no) CFLAGS=$hold_cflags]) if test $tcl_cv_cc_pipe = yes; then CFLAGS="$CFLAGS -pipe" fi fi #-------------------------------------------------------------------- # Common compiler flag setup #-------------------------------------------------------------------- AC_C_BIGENDIAN if test "${TEA_PLATFORM}" = "unix" ; then TEA_TCL_LINK_LIBS TEA_MISSING_POSIX_HEADERS # Let the user call this, because if it triggers, they will # need a compat/strtod.c that is correct. Users can also # use Tcl_GetDouble(FromObj) instead. #TEA_BUGGY_STRTOD fi ]) #------------------------------------------------------------------------ # TEA_MAKE_LIB -- # # Generate a line that can be used to build a shared/unshared library # in a platform independent manner. # # Arguments: # none # # Requires: # # Results: # # Defines the following vars: # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library # VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL # VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" AC_EGREP_CPP([manifest needed], [ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif ], [ # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" TEA_ADD_CLEANFILES([*.manifest]) ]) MAKE_STUB_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then MAKE_LIB="${MAKE_SHARED_LIB} " else MAKE_LIB="${MAKE_STATIC_LIB} " fi #-------------------------------------------------------------------- # Shared libraries and static libraries have different names. # Use the double eval to make sure any variables in the suffix is # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) RANLIB=: RANLIB_STUB=: else RANLIB_STUB="${RANLIB}" if test "${SHARED_BUILD}" = "1" ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" fi eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" RANLIB=: else eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" fi # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) AC_SUBST(VC_MANIFEST_EMBED_DLL) AC_SUBST(VC_MANIFEST_EMBED_EXE) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. # # Arguments: # basename The base name of the library without version # numbers, extensions, or "lib" prefixes. # extra_dir Extra directory in which to search for the # library. This location is used first, then # $prefix/$exec-prefix, then some defaults. # # Requires: # TEA_INIT and TEA_PREFIX must be called first. # # Results: # # Defines the following vars: # ${basename}_LIB_NAME The computed library name. # ${basename}_LIB_SPEC The computed linker flags. #------------------------------------------------------------------------ AC_DEFUN([TEA_LIB_SPEC], [ AC_MSG_CHECKING([for $1 library]) # Look in exec-prefix for the library (defined by TEA_PREFIX). tea_lib_name_dir="${exec_prefix}/lib" # Or in a user-specified location. if test x"$2" != x ; then tea_extra_lib_dir=$2 else tea_extra_lib_dir=NONE fi for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break fi done if test "${TEA_PLATFORM}" = "windows"; then $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\" else # Strip off the leading "lib" and trailing ".a" or ".so" tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'` $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}" fi if test "x${$1_LIB_NAME}" = x ; then AC_MSG_ERROR([not found]) else AC_MSG_RESULT([${$1_LIB_SPEC}]) fi ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TCL_HEADERS -- # # Locate the private Tcl include files # # Arguments: # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TCL_TOP_DIR_NATIVE # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [ # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh} AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS]) AC_MSG_CHECKING([for Tcl private include files]) TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}` TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\" # Check to see if tclPort.h isn't already with the public headers # Don't look for tclInt.h because that resides with tcl.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tclh}/tclWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tclh}/tclUnixPort.h"; then result="private headers found with public headers" else TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\" if test "${TEA_PLATFORM}" = "windows"; then TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\" else TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TCL_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -d "${TCL_BIN_DIR}/Headers" -a \ -d "${TCL_BIN_DIR}/PrivateHeaders"; then TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}" else TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TCL_INCLUDES}" else if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}]) fi result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}" fi fi AC_SUBST(TCL_TOP_DIR_NATIVE) AC_SUBST(TCL_INCLUDES) AC_MSG_RESULT([${result}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TCL_HEADERS -- # # Locate the installed public Tcl header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [ AC_MSG_CHECKING([for Tcl public headers]) AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tclh, [ # Use the value from --with-tclinclude, if it was given if test x"${with_tclinclude}" != x ; then if test -f "${with_tclinclude}/tcl.h" ; then ac_cv_c_tclh=${with_tclinclude} else AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h]) fi else list="" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers directory case ${TCL_DEFS} in *TCL_FRAMEWORK*) list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tcl is not installed, # and in that situation, look there before installed locations. if test -f "${TCL_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TCL_INCLUDE_SPEC}" != x ; then d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tcl.h" ; then ac_cv_c_tclh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tclh}" = x ; then AC_MSG_ERROR([tcl.h not found. Please specify its location with --with-tclinclude]) else AC_MSG_RESULT([${ac_cv_c_tclh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TCL_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TK_HEADERS -- # # Locate the private Tk include files # # Arguments: # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [ # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh} AC_REQUIRE([TEA_PUBLIC_TK_HEADERS]) AC_MSG_CHECKING([for Tk private include files]) TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}` TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\" # Check to see if tkPort.h isn't already with the public headers # Don't look for tkInt.h because that resides with tk.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tkh}/tkWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tkh}/tkUnixPort.h"; then result="private headers found with public headers" else TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\" TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\" if test "${TEA_PLATFORM}" = "windows"; then TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\" else TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TK_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}" # Detect and add ttk subdir if test -d "${TK_SRC_DIR}/generic/ttk"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\"" fi if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\"" fi if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\"" fi if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TK_DEFS} in *TK_FRAMEWORK*) if test -d "${TK_BIN_DIR}/Headers" -a \ -d "${TK_BIN_DIR}/PrivateHeaders"; then TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}" else TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TK_INCLUDES}" else if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}]) fi result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}" fi fi AC_SUBST(TK_TOP_DIR_NATIVE) AC_SUBST(TK_XLIB_DIR_NATIVE) AC_SUBST(TK_INCLUDES) AC_MSG_RESULT([${result}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TK_HEADERS -- # # Locate the installed public Tk header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [ AC_MSG_CHECKING([for Tk public headers]) AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files], with_tkinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tkh, [ # Use the value from --with-tkinclude, if it was given if test x"${with_tkinclude}" != x ; then if test -f "${with_tkinclude}/tk.h" ; then ac_cv_c_tkh=${with_tkinclude} else AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h]) fi else list="" if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers directory. case ${TK_DEFS} in *TK_FRAMEWORK*) list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tk is not installed, # and in that situation, look there before installed locations. if test -f "${TK_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tk's --prefix location, # relative to directory of tkConfig.sh, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TK_PREFIX}/include 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TK_INCLUDE_SPEC}" != x ; then d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tk.h" ; then ac_cv_c_tkh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tkh}" = x ; then AC_MSG_ERROR([tk.h not found. Please specify its location with --with-tkinclude]) else AC_MSG_RESULT([${ac_cv_c_tkh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}` TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_INCLUDES) if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then # On Windows and Aqua, we need the X compat headers AC_MSG_CHECKING([for X11 header files]) if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_XINCLUDES) fi AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}]) fi ]) #------------------------------------------------------------------------ # TEA_PATH_CONFIG -- # # Locate the ${1}Config.sh file and perform a sanity check on # the ${1} compile flags. These are used by packages like # [incr Tk] that load *Config.sh files from more than Tcl and Tk. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-$1=... # # Defines the following vars: # $1_BIN_DIR Full path to the directory containing # the $1Config.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_CONFIG], [ # # Ok, lets find the $1 configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-$1 # if test x"${no_$1}" = x ; then # we reset no_$1 in case something fails here no_$1=true AC_ARG_WITH($1, [ --with-$1 directory containing $1 configuration ($1Config.sh)], with_$1config=${withval}) AC_MSG_CHECKING([for $1 configuration]) AC_CACHE_VAL(ac_cv_c_$1config,[ # First check to see if --with-$1 was specified. if test x"${with_$1config}" != x ; then case ${with_$1config} in */$1Config.sh ) if test -f ${with_$1config}; then AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself]) with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'` fi;; esac if test -f "${with_$1config}/$1Config.sh" ; then ac_cv_c_$1config=`(cd ${with_$1config}; pwd)` else AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh]) fi fi # then check for a private $1 installation if test x"${ac_cv_c_$1config}" = x ; then for i in \ ../$1 \ `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../$1 \ `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../../$1 \ `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ${srcdir}/../$1 \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi if test -f "$i/unix/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i/unix; pwd)` break fi done fi # check in a few common install locations if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_$1config}" = x ; then $1_BIN_DIR="# no $1 configs found" AC_MSG_WARN([Cannot find $1 configuration definitions]) exit 0 else no_$1= $1_BIN_DIR=${ac_cv_c_$1config} AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG -- # # Load the $1Config.sh file # # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # # Substitutes the following vars: # $1_SRC_DIR # $1_LIB_FILE # $1_LIB_SPEC #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG], [ AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) if test -f "${$1_BIN_DIR}/$1Config.sh" ; then AC_MSG_RESULT([loading]) . "${$1_BIN_DIR}/$1Config.sh" else AC_MSG_RESULT([file not found]) fi # # If the $1_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable $1_LIB_SPEC will be set to the value # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC # instead of $1_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC} $1_LIBRARY_PATH=${$1_LIBRARY_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) # Allow the caller to prevent this auto-check by specifying any 2nd arg AS_IF([test "x$2" = x], [ # Check both upper and lower-case variants # If a dev wanted non-stubs libs, this function could take an option # to not use _STUB in the paths below AS_IF([test "x${$1_STUB_LIB_SPEC}" = x], [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)], [TEA_LOAD_CONFIG_LIB($1_STUB)]) ]) ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG_LIB -- # # Helper function to load correct library from another extension's # ${PACKAGE}Config.sh. # # Results: # Adds to LIBS the appropriate extension library #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG_LIB], [ AC_MSG_CHECKING([For $1 library for LIBS]) # This simplifies the use of stub libraries by automatically adding # the stub lib to your path. Normally this would add to SHLIB_LD_LIBS, # but this is called before CONFIG_CFLAGS. More importantly, this adds # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD. if test "x${$1_LIB_SPEC}" != "x" ; then if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"]) AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}]) else TEA_ADD_LIBS([${$1_LIB_SPEC}]) AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}]) fi else AC_MSG_RESULT([file not found]) fi ]) #------------------------------------------------------------------------ # TEA_EXPORT_CONFIG -- # # Define the data to insert into the ${PACKAGE}Config.sh file # # Arguments: # # Requires the following vars to be set: # $1 # # Results: # Substitutes the following vars: #------------------------------------------------------------------------ AC_DEFUN([TEA_EXPORT_CONFIG], [ #-------------------------------------------------------------------- # These are for $1Config.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}" else eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" fi $1_BUILD_LIB_SPEC="-L`pwd` ${$1_LIB_FLAG}" $1_LIB_SPEC="-L${pkglibdir} ${$1_LIB_FLAG}" $1_BUILD_STUB_LIB_SPEC="-L`pwd` [$]{$1_STUB_LIB_FLAG}" $1_STUB_LIB_SPEC="-L${pkglibdir} [$]{$1_STUB_LIB_FLAG}" $1_BUILD_STUB_LIB_PATH="`pwd`/[$]{PKG_STUB_LIB_FILE}" $1_STUB_LIB_PATH="${pkglibdir}/[$]{PKG_STUB_LIB_FILE}" AC_SUBST($1_BUILD_LIB_SPEC) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_PATH) AC_SUBST($1_STUB_LIB_PATH) AC_SUBST(MAJOR_VERSION) AC_SUBST(MINOR_VERSION) AC_SUBST(PATCHLEVEL) ]) #------------------------------------------------------------------------ # TEA_PATH_CELIB -- # # Locate Keuchel's celib emulation layer for targeting Win/CE # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-celib=... # # Defines the following vars: # CELIB_DIR Full path to the directory containing # the include and platform lib files #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_CELIB], [ # First, look for one uninstalled. # the alternative search directory is invoked by --with-celib if test x"${no_celib}" = x ; then # we reset no_celib in case something fails here no_celib=true AC_ARG_WITH(celib,[ --with-celib=DIR use Windows/CE support library from DIR], with_celibconfig=${withval}) AC_MSG_CHECKING([for Windows/CE celib directory]) AC_CACHE_VAL(ac_cv_c_celibconfig,[ # First check to see if --with-celibconfig was specified. if test x"${with_celibconfig}" != x ; then if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory]) fi fi # then check for a celib library if test x"${ac_cv_c_celibconfig}" = x ; then for i in \ ../celib-palm-3.0 \ ../celib \ ../../celib-palm-3.0 \ ../../celib \ `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \ ${srcdir}/../celib-palm-3.0 \ ${srcdir}/../celib \ `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \ ; do if test -d "$i/inc" ; then ac_cv_c_celibconfig=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_celibconfig}" = x ; then AC_MSG_ERROR([Cannot find celib support library directory]) else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) # Local Variables: # mode: autoconf # End: saods9/tksao/panner/lex.C000644 000765 000000 00000140567 12705446252 015710 0ustar00joyewheel000000 000000 #line 2 "panner/lex.C" #line 4 "panner/lex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer pnFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *pnalloc (yy_size_t ); void *pnrealloc (void *,yy_size_t ); void pnfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 38 #define YY_END_OF_BUFFER 39 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[144] = { 0, 0, 0, 39, 37, 36, 38, 37, 37, 32, 32, 37, 37, 37, 37, 37, 37, 37, 37, 37, 15, 37, 37, 37, 37, 37, 37, 37, 37, 30, 36, 0, 32, 34, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 18, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 35, 0, 0, 0, 0, 0, 6, 0, 8, 0, 0, 0, 0, 0, 0, 17, 19, 0, 0, 0, 0, 0, 0, 0, 28, 0, 31, 0, 34, 1, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 21, 22, 23, 0, 0, 27, 0, 2, 3, 0, 5, 7, 0, 0, 12, 0, 0, 20, 0, 0, 29, 0, 9, 0, 0, 14, 25, 0, 4, 0, 13, 26, 11, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 4, 5, 1, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 1, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 1, 17, 18, 19, 20, 21, 1, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 1, 1, 1, 1, 1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 1, 1, 40, 41, 42, 43, 44, 1, 45, 46, 47, 48, 49, 50, 51, 52, 53, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[54] = { 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int16_t yy_base[145] = { 0, 0, 0, 300, 320, 297, 320, 49, 51, 54, 57, 56, 50, 59, 53, 65, 62, 63, 58, 58, 60, 68, 75, 72, 70, 91, 91, 102, 107, 104, 296, 112, 115, 118, 135, 122, 0, 111, 118, 121, 125, 135, 134, 131, 125, 135, 146, 144, 132, 135, 320, 148, 320, 143, 140, 144, 135, 320, 144, 162, 154, 155, 155, 168, 166, 187, 191, 197, 0, 162, 179, 197, 185, 182, 320, 185, 320, 195, 198, 196, 200, 207, 200, 320, 320, 205, 192, 208, 209, 214, 200, 203, 320, 201, 320, 220, 229, 320, 222, 227, 242, 237, 240, 238, 320, 237, 243, 239, 237, 234, 320, 320, 320, 235, 244, 320, 246, 320, 320, 239, 320, 320, 239, 249, 320, 250, 248, 320, 256, 249, 320, 247, 320, 247, 276, 320, 320, 276, 320, 284, 320, 320, 320, 320, 295 } ; static yyconst flex_int16_t yy_def[145] = { 0, 143, 1, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 0, 143 } ; static yyconst flex_int16_t yy_nxt[374] = { 0, 4, 5, 6, 7, 8, 9, 10, 4, 11, 12, 13, 14, 15, 16, 17, 18, 4, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 4, 29, 4, 4, 11, 12, 13, 14, 15, 16, 17, 18, 4, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 4, 29, 4, 31, 32, 32, 33, 33, 34, 32, 32, 34, 32, 32, 37, 35, 39, 38, 35, 40, 41, 42, 43, 44, 45, 47, 48, 49, 46, 50, 51, 36, 53, 54, 55, 56, 52, 37, 35, 39, 38, 35, 40, 41, 42, 43, 44, 45, 47, 48, 49, 46, 50, 51, 36, 53, 54, 55, 56, 52, 57, 59, 58, 60, 61, 64, 62, 33, 33, 34, 32, 32, 63, 33, 33, 66, 35, 67, 67, 65, 69, 70, 71, 57, 59, 58, 60, 61, 64, 62, 33, 33, 72, 73, 74, 63, 35, 75, 76, 35, 77, 80, 65, 69, 70, 71, 78, 81, 82, 79, 83, 84, 85, 86, 87, 72, 73, 74, 88, 35, 75, 76, 89, 77, 80, 90, 91, 92, 93, 78, 81, 82, 79, 83, 84, 85, 86, 87, 94, 97, 95, 88, 96, 96, 98, 89, 67, 67, 90, 91, 92, 93, 67, 67, 99, 100, 101, 102, 103, 104, 105, 94, 97, 106, 107, 108, 109, 98, 110, 111, 112, 113, 114, 115, 116, 96, 96, 99, 100, 101, 102, 103, 104, 105, 96, 96, 106, 107, 108, 109, 117, 110, 111, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 117, 133, 134, 135, 136, 137, 138, 139, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 140, 133, 134, 135, 136, 137, 138, 139, 141, 142, 68, 30, 30, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 140, 143, 143, 143, 143, 143, 143, 143, 141, 142, 3, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143 } ; static yyconst flex_int16_t yy_chk[374] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 8, 8, 9, 9, 9, 10, 10, 10, 11, 9, 12, 11, 10, 12, 13, 14, 15, 16, 17, 18, 18, 19, 17, 20, 21, 9, 22, 23, 24, 24, 21, 11, 9, 12, 11, 10, 12, 13, 14, 15, 16, 17, 18, 18, 19, 17, 20, 21, 9, 22, 23, 24, 24, 21, 25, 26, 25, 27, 28, 29, 28, 31, 31, 32, 32, 32, 28, 33, 33, 35, 32, 35, 35, 33, 37, 38, 39, 25, 26, 25, 27, 28, 29, 28, 34, 34, 40, 41, 42, 28, 34, 43, 44, 32, 45, 47, 33, 37, 38, 39, 46, 48, 49, 46, 51, 53, 54, 55, 56, 40, 41, 42, 58, 34, 43, 44, 59, 45, 47, 60, 61, 62, 63, 46, 48, 49, 46, 51, 53, 54, 55, 56, 64, 69, 65, 58, 65, 65, 70, 59, 66, 66, 60, 61, 62, 63, 67, 67, 71, 72, 73, 75, 77, 78, 79, 64, 69, 80, 81, 82, 85, 70, 86, 87, 88, 89, 90, 91, 93, 95, 95, 71, 72, 73, 75, 77, 78, 79, 96, 96, 80, 81, 82, 85, 98, 86, 87, 88, 89, 90, 91, 93, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 113, 114, 116, 119, 122, 98, 123, 125, 126, 128, 129, 131, 133, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 113, 114, 116, 119, 122, 134, 123, 125, 126, 128, 129, 131, 133, 137, 139, 144, 30, 5, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 137, 139, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "panner/lex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "panner/lex.L" #include #include #include #include "parser.H" extern YYSTYPE* pnlval; /* rules */ #line 550 "panner/lex.C" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 26 "panner/lex.L" #line 653 "panner/lex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 144 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 143 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 28 "panner/lex.L" {return BBOX_;} YY_BREAK case 2: YY_RULE_SETUP #line 29 "panner/lex.L" {return BEGIN_;} YY_BREAK case 3: YY_RULE_SETUP #line 30 "panner/lex.L" {return CLEAR_;} YY_BREAK case 4: YY_RULE_SETUP #line 31 "panner/lex.L" {return COMPASS_;} YY_BREAK case 5: YY_RULE_SETUP #line 32 "panner/lex.L" {return DEBUG_;} YY_BREAK case 6: YY_RULE_SETUP #line 33 "panner/lex.L" {return END_;} YY_BREAK case 7: YY_RULE_SETUP #line 34 "panner/lex.L" {return FALSE_;} YY_BREAK case 8: YY_RULE_SETUP #line 35 "panner/lex.L" {return GET_;} YY_BREAK case 9: YY_RULE_SETUP #line 36 "panner/lex.L" {return HEIGHT_;} YY_BREAK case 10: YY_RULE_SETUP #line 37 "panner/lex.L" {return HIDE_;} YY_BREAK case 11: YY_RULE_SETUP #line 38 "panner/lex.L" {return HIGHLITE_;} YY_BREAK case 12: YY_RULE_SETUP #line 39 "panner/lex.L" {return IMAGE_;} YY_BREAK case 13: YY_RULE_SETUP #line 40 "panner/lex.L" {return INVALID_;} YY_BREAK case 14: YY_RULE_SETUP #line 41 "panner/lex.L" {return MOTION_;} YY_BREAK case 15: YY_RULE_SETUP #line 42 "panner/lex.L" {return N_;} YY_BREAK case 16: YY_RULE_SETUP #line 43 "panner/lex.L" {return NO_;} YY_BREAK case 17: YY_RULE_SETUP #line 44 "panner/lex.L" {return OFF_;} YY_BREAK case 18: YY_RULE_SETUP #line 45 "panner/lex.L" {return ON_;} YY_BREAK case 19: YY_RULE_SETUP #line 46 "panner/lex.L" {return PAN_;} YY_BREAK case 20: YY_RULE_SETUP #line 47 "panner/lex.L" {return RESET_;} YY_BREAK case 21: YY_RULE_SETUP #line 48 "panner/lex.L" {return SHOW_;} YY_BREAK case 22: YY_RULE_SETUP #line 49 "panner/lex.L" {return SIZE_;} YY_BREAK case 23: YY_RULE_SETUP #line 50 "panner/lex.L" {return TRUE_;} YY_BREAK case 24: YY_RULE_SETUP #line 51 "panner/lex.L" {return TO_;} YY_BREAK case 25: YY_RULE_SETUP #line 52 "panner/lex.L" {return UPDATE_;} YY_BREAK case 26: YY_RULE_SETUP #line 53 "panner/lex.L" {return VERSION_;} YY_BREAK case 27: YY_RULE_SETUP #line 54 "panner/lex.L" {return WARP_;} YY_BREAK case 28: YY_RULE_SETUP #line 55 "panner/lex.L" {return WCS_;} YY_BREAK case 29: YY_RULE_SETUP #line 56 "panner/lex.L" {return WIDTH_;} YY_BREAK case 30: YY_RULE_SETUP #line 57 "panner/lex.L" {return Y_;} YY_BREAK case 31: YY_RULE_SETUP #line 58 "panner/lex.L" {return YES_;} YY_BREAK case 32: YY_RULE_SETUP #line 61 "panner/lex.L" { // Integer pnlval->integer = atoi(yytext); return INT; } YY_BREAK case 33: #line 67 "panner/lex.L" case 34: YY_RULE_SETUP #line 67 "panner/lex.L" { // Real Number pnlval->real = atof(yytext); return REAL; } YY_BREAK case 35: YY_RULE_SETUP #line 72 "panner/lex.L" { // Pointer pnlval->ptr = (void*)strtoul(yytext,NULL,16); return POINTER; } YY_BREAK case 36: YY_RULE_SETUP #line 77 "panner/lex.L" { // White Spaces } YY_BREAK case 37: YY_RULE_SETUP #line 80 "panner/lex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 38: YY_RULE_SETUP #line 84 "panner/lex.L" ECHO; YY_BREAK #line 931 "panner/lex.C" case YY_STATE_EOF(INITIAL): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; pnfree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); pnfree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ pnrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) pnrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 144 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 144 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 143); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) pnalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) pnalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) pnfree((void *) b->yy_ch_buf ); pnfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)pnalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)pnrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) pnalloc(new_size ); else (yy_start_stack) = (int *) pnrealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *pnalloc (yy_size_t size ) { return (void *) malloc( size ); } void *pnrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void pnfree (void * ptr ) { free( (char *) ptr ); /* see pnrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 84 "panner/lex.L" saods9/tksao/panner/lex.L000644 000765 000000 00000002743 12705446252 015712 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "parser.H" extern YYSTYPE* pnlval; %} D [0-9] E [Ee][+-]?{D}+ /* rules */ %% bbox {return BBOX_;} begin {return BEGIN_;} clear {return CLEAR_;} compass {return COMPASS_;} debug {return DEBUG_;} end {return END_;} false {return FALSE_;} get {return GET_;} height {return HEIGHT_;} hide {return HIDE_;} highlite {return HIGHLITE_;} image {return IMAGE_;} invalid {return INVALID_;} motion {return MOTION_;} n {return N_;} no {return NO_;} off {return OFF_;} on {return ON_;} pan {return PAN_;} reset {return RESET_;} show {return SHOW_;} size {return SIZE_;} true {return TRUE_;} to {return TO_;} update {return UPDATE_;} version {return VERSION_;} warp {return WARP_;} wcs {return WCS_;} width {return WIDTH_;} y {return Y_;} yes {return YES_;} [+-]?{D}+ { // Integer pnlval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number pnlval->real = atof(yytext); return REAL; } 0[xX][0-9a-fA-F]+ { // Pointer pnlval->ptr = (void*)strtoul(yytext,NULL,16); return POINTER; } [ \t]+ { // White Spaces } . { // Else, return the char return yytext[0]; } %% saods9/tksao/panner/panner.C000644 000765 000000 00000022373 12754667026 016405 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include "panner.h" #include "util.h" // Parser Stuff #undef yyFlexLexer #define yyFlexLexer pnFlexLexer #include void* pnlval; extern int pnparse(Panner*, pnFlexLexer*); int pnlex(void* vval, pnFlexLexer* ll) { pnlval = vval; return ll ? ll->yylex() : 0; } void pnerror(Panner* pn, pnFlexLexer* ll, const char* m) { pn->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') { pn->error(": "); pn->error(cmd); } } // Public Member Functions Panner::Panner(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Widget(i, c, item) { thumbnail = 0; highLite = 0; panning = 0; needsUpdate = 0; bboxGC = NULL; useBBox = 1; compassGC = NULL; threed = 0; useCompass = 1; validWCSCompass = 0; tkfont_ = NULL; } Panner::~Panner() { if (bboxGC) XFreeGC(display, bboxGC); if (compassGC) XFreeGC(display, compassGC); if (tkfont_) Tk_FreeFont(tkfont_); } int Panner::parse(istringstream& istr) { result = TCL_OK; pnFlexLexer* ll = new pnFlexLexer(&istr); pnparse(this, ll); delete ll; return result; } void Panner::update() { needsUpdate = 1; redraw(); } // Required Virtual Functions // UpdatePixmap. This function is responsable for creating a valid // pixmap the size of the current Panner int Panner::updatePixmap(const BBox& bb) { if (!widgetGC) widgetGC = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); // bb is in canvas coords // create a valid pixmap if needed if (!pixmap) { if (!(pixmap = Tk_GetPixmap(display, Tk_WindowId(tkwin), options->width, options->height, depth))) { internalError("Panner: Unable to Create Pixmap"); return TCL_OK; } updateGCs(); } if (needsUpdate) { if (thumbnail) { XSetClipOrigin(display, widgetGC, 0, 0); XCopyArea(display, thumbnail, pixmap, widgetGC, 0, 0, options->width, options->height, 0, 0); if (useBBox) renderBBox(); if (useCompass) { renderImageCompass(); if (validWCSCompass) renderWCSCompass(); } } else clearPixmap(); needsUpdate = 0; } return TCL_OK; } void Panner::invalidPixmap() { Widget::invalidPixmap(); update(); } // Command Functions void Panner::getBBoxCmd() { Vector v = bbox[0]; for (int i=1; i<4; i++) v += bbox[i]; v /= 4; ostringstream str; str << v << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Panner::getSizeCmd() { ostringstream str; str << options->width << " " << options->height << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Panner::highLiteCmd(int which) { if (highLite != which) { highLite = !highLite; update(); } } void Panner::highLiteCmd(const Vector& v) { if (highLite != isInBBox(v)) { highLite = !highLite; update(); } } void Panner::panToCmd(const Vector& v) { for (int i=0; i<4; i++) bbox[i] = v; update(); } void Panner::panBeginCmd(const Vector& v) { if (useBBox && isInBBox(v)) { panStart = v; panning = 1; } } void Panner::panMotionCmd(const Vector& v) { if (panning && useBBox) { Vector diff = v - panStart; for (int i=0; i<4; i++) bbox[i] += diff; panStart = v; update(); } } void Panner::panEndCmd(const Vector& v) { if (panning && useBBox) { Vector diff = v - panStart; for (int i=0; i<4; i++) bbox[i] += diff; panning = 0; update(); } } void Panner::setCompassCmd(int w) { useCompass = w ? 1 : 0; update(); } void Panner::setBBoxCmd(int w) { useBBox = w ? 1 : 0; update(); } void Panner::updateCmd(void* p) { thumbnail = (Pixmap)p; update(); } void Panner::updateBBoxCmd(const Vector& ll, const Vector& lr, const Vector& ur, const Vector& ul) { bbox[0] = ll; bbox[1] = lr; bbox[2] = ur; bbox[3] = ul; update(); } void Panner::updateImageCompassCmd(Vector xx, Vector yy) { threed =0; imageX = xx; imageY = yy; update(); } void Panner::updateImageCompassCmd(Vector xx, Vector yy, Vector zz) { threed =1; imageX = xx; imageY = yy; imageZ = zz; update(); } void Panner::updateWCSCompassCmd() { validWCSCompass = 0; update(); } void Panner::updateWCSCompassCmd(const Vector& nn, const Vector& ee) { validWCSCompass = 1; wcsNorth = nn; wcsEast = ee; update(); } void Panner::warpCmd(const Vector& vv) { warp((Vector&)vv); } // Private Functions void Panner::updateGCs() { if (!bboxGC) { bboxGC = XCreateGC(display, pixmap, 0, NULL); XSetForeground(display, bboxGC, getColor("cyan")); } if (!tkfont_) { ostringstream fstr; #ifdef MAC_OSX_TK fstr << '{' << options->helvetica << '}' << ' ' << int(9*getDisplayRatio()) << " roman normal" << ends; #else fstr << '{' << options->helvetica << '}' << " 9 roman normal" << ends; #endif tkfont_ = Tk_GetFont(interp, tkwin, fstr.str().c_str()); if (tkfont_) Tk_GetFontMetrics(tkfont_, &metric); } if (!compassGC) { compassGC = XCreateGC(display, pixmap, 0, NULL); XSetLineAttributes(display, compassGC, 1, LineSolid, CapButt, JoinMiter); if (tkfont_) XSetFont(display, compassGC, Tk_FontId(tkfont_)); } } void Panner::renderBBox() { XSetLineAttributes(display, bboxGC, (highLite ? 2 : 1), LineSolid, CapButt,JoinMiter); for (int i=0; i<3; i++) XDrawLine(display, pixmap, bboxGC, (int)(bbox[i])[0], (int)(bbox[i])[1], (int)(bbox[i+1])[0], (int)(bbox[i+1])[1]); XDrawLine(display, pixmap, bboxGC, (int)(bbox[3])[0], (int)(bbox[3])[1], (int)(bbox[0])[0], (int)(bbox[0])[1]); } void Panner::renderImageCompass() { float length = (options->width/2 + options->height/2)/2 * .4; Vector center(options->width/2., options->height/2.); renderArm(int(length*imageX.length()), center, Rotate(-imageX.angle()), "X", getColor("green")); renderArm(int(length*imageY.length()), center, Rotate(-imageY.angle()), "Y", getColor("green")); if (threed) { renderArm(int(length*imageZ.length()), center, Rotate(-imageZ.angle()), "Z", getColor("green")); } } void Panner::renderWCSCompass() { float length = (options->width/2 + options->height/2)/2 * .25; Vector center(options->width/2., options->height/2.); renderArm(int(length*wcsEast.length()), center, Rotate(-wcsEast.angle()), "E", getColor("yellow")); renderArm(int(length*wcsNorth.length()), center, Rotate(-wcsNorth.angle()), "N", getColor("yellow")); } void Panner::renderArm(int length, Vector center, Rotate rot, const char* str, int color) { if (length<=0) return; // set GC XSetForeground(display, compassGC, color); const int textOffset = 15; // Text offset const int tip = 6; // length from end of line to tip of arrow const int tail = 2; // length from end of line to tails of arrow const int wc = 2; // width of arrow at end of line const int wt = 3; // width of arrow at tails // Arrow-- oriented on Y axis Vector arrow[6]; arrow[0] = Vector(0, tip); arrow[1] = Vector(-wc, 0); arrow[2] = Vector(-wt, -tail); arrow[3] = Vector(0, 0); arrow[4] = Vector(wt, -tail); arrow[5] = Vector(wc, 0); // Staff-- oriented on X axis XPoint arrowArray[6]; Matrix arrowMatrix = Rotate(M_PI_2) * Translate(length,0) * rot * Translate(center); for (int i=0; i<6; i++) { Vector r = (arrow[i] * arrowMatrix).round(); arrowArray[i].x = (int)r[0]; arrowArray[i].y = (int)r[1]; } Vector c = ((Vector&)center).round(); Vector end = (Vector(length, 0) * rot * Translate(center)).round(); XDrawLine(display, pixmap, compassGC, (int)c[0], (int)c[1], (int)end[0], (int)end[1]); XFillPolygon(display, pixmap, compassGC, arrowArray, 6, Nonconvex, CoordModeOrigin); if (tkfont_) { Vector et = Vector((length + textOffset), 0) * rot * Translate(center) * Translate(-Tk_TextWidth(tkfont_, str, 1)/2., metric.ascent/2.); Tk_DrawChars(display, pixmap, compassGC, tkfont_, str, 1, (int)et[0], (int)et[1]); } } int Panner::isInBBox(const Vector& v) { /* v[0]-- x value of point being tested v[1]-- y value of point being tested This algorithm is from "An Introduction to Ray Tracing", Academic Press, 1989, edited by Andrew Glassner, pg 53 -- a point lies in a polygon if a line is extended from the point to infinite in any direction and the number of intersections with the polygon is odd. This is valid for both concave and convex polygons. Points on a vertex are considered inside. Points on a edge are considered inside. */ int crossings = 0; // number of crossings Vector v1; Vector v2 = bbox[0] - v; int sign = ((v2[1])>=0) ? 1 : -1; // init sign // for all edges for (int i=1; i<4; i++) { // look at next two vertices v1 = v2; v2 = bbox[i] - v; int nextSign = (v2[1]>=0) ? 1 : -1; // sign holder for p2 if (sign != nextSign) { if (v1[0]>0 && v2[0]>0) crossings++; else if (v1[0]>0 || v2[0]>0) { if (v1[0]-(v1[1]*(v2[0]-v1[0])/(v2[1]-v1[1])) > 0) crossings++; } sign = nextSign; } } return fmod(float(crossings),float(2)) ? 1 : 0; // if odd, point is inside } saods9/tksao/panner/panner.h000644 000765 000000 00000004516 12705446252 016441 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __panner_h__ #define __panner_h__ #include "widget.h" class Panner : public Widget { private: Pixmap thumbnail; // current frame thumbnail pixmap int highLite; // flag to highlite bbox int panning; // flag for panning status Vector panStart; // initial location of panning operation int needsUpdate; // flag to indicate refresh needed GC bboxGC; // bbox gc int useBBox; // flag to use BBox Vector bbox[4]; // current view GC compassGC; // compass gc Vector imageX; Vector imageY; Vector imageZ; int threed; // 2d or 3d compass int useCompass; // flag to use image/wcs compass Vector wcsNorth; Vector wcsEast; int validWCSCompass; // flag to indicate wcs data is valid Tk_Font tkfont_; // Tk font Tk_FontMetrics metric; // Tk font metric private: void update(); // use existing pixmap, just update void invalidPixmap(); // new pixmap, then update protected: virtual void clearPixmap() =0; // clear pixmap private: int updatePixmap(const BBox&); // renders image/graphics into pixmap void renderBBox(); int isInBBox(const Vector&); void renderImageCompass(); void renderWCSCompass(); void renderArm(int, Vector, Rotate, const char*, int); void updateGCs(); public: Panner(Tcl_Interp*, Tk_Canvas, Tk_Item*); virtual ~Panner(); int parse(istringstream&); // parse subcommands // SubCommandFunctions void getBBoxCmd(); void getSizeCmd(); void highLiteCmd(int); void highLiteCmd(const Vector&); void panToCmd(const Vector&); void panBeginCmd(const Vector&); void panMotionCmd(const Vector&); void panEndCmd(const Vector&); void setCompassCmd(int); void setBBoxCmd(int); void updateCmd(void*); void updateBBoxCmd(const Vector&, const Vector&, const Vector&, const Vector&); void updateImageCompassCmd(Vector, Vector); void updateImageCompassCmd(Vector, Vector, Vector); void updateWCSCompassCmd(); void updateWCSCompassCmd(const Vector&, const Vector&); void warpCmd(const Vector&); }; #endif saods9/tksao/panner/pannertrue.C000644 000765 000000 00000007561 12754663341 017303 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "pannertrue.h" #include "util.h" // Tk Canvas Widget Function Declarations int PannerTrueColorCreateProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const []); // PannerTrueColor Specs static Tk_CustomOption tagsOption = { Tk_CanvasTagsParseProc, Tk_CanvasTagsPrintProc, NULL }; static Tk_ConfigSpec pannerTrueColorSpecs[] = { {TK_CONFIG_STRING, (char*)"-command", NULL, NULL, "panner", Tk_Offset(WidgetOptions, cmdName), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-x", NULL, NULL, "1", Tk_Offset(WidgetOptions, x), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-y", NULL, NULL, "1", Tk_Offset(WidgetOptions, y), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-width", NULL, NULL, "256", Tk_Offset(WidgetOptions, width), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-height", NULL, NULL, "256", Tk_Offset(WidgetOptions, height), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_ANCHOR, (char*)"-anchor", NULL, NULL, "nw", Tk_Offset(WidgetOptions, anchor), 0, NULL}, {TK_CONFIG_CUSTOM, (char*)"-tags", NULL, NULL, NULL, 0, TK_CONFIG_NULL_OK, &tagsOption}, {TK_CONFIG_STRING, (char*)"-helvetica", NULL, NULL, "helvetica", Tk_Offset(WidgetOptions, helvetica), 0, NULL}, {TK_CONFIG_STRING, (char*)"-courier", NULL, NULL, "courier", Tk_Offset(WidgetOptions, courier), 0, NULL}, {TK_CONFIG_STRING, (char*)"-times", NULL, NULL, "times", Tk_Offset(WidgetOptions, times), 0, NULL}, {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL}, }; // Tk Static Structure static Tk_ItemType pannerTrueColorType = { (char*)"pannertruecolor", // name sizeof(WidgetOptions), // size PannerTrueColorCreateProc, // configProc pannerTrueColorSpecs, // configSpecs WidgetConfigProc, // configProc WidgetCoordProc, // coordProc WidgetDeleteProc, // deleteProc WidgetDisplayProc, // displayProc 0, // alwaysRedraw WidgetPointProc, // pointProc WidgetAreaProc, // areaProc WidgetPostscriptProc, // postscriptProc WidgetScaleProc, // scaleProc WidgetTranslateProc, // translateProc (Tk_ItemIndexProc*)NULL, // indexProc WidgetICursorProc, // icursorProc (Tk_ItemSelectionProc*)NULL, // selectionProc (Tk_ItemInsertProc*)NULL, // insertProc (Tk_ItemDCharsProc*)NULL, // dCharsProc (Tk_ItemType*)NULL // nextPtr }; // Non-Member Functions int PannerTrueColor_Init(Tcl_Interp* interp) { Tk_CreateItemType(&pannerTrueColorType); return TCL_OK; } int PannerTrueColorCreateProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[]) { PannerTrueColor* panner = new PannerTrueColor(interp, canvas, item); // and set default configuration if (panner->configure(argc, (const char**)argv, 0) != TCL_OK) { delete panner; Tcl_AppendResult(interp, " error occured while creating pannerTrueColor.", NULL); return TCL_ERROR; } return TCL_OK; } PannerTrueColor::PannerTrueColor(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Panner(i, c, item) { configSpecs = pannerTrueColorSpecs; // panner configure options } void PannerTrueColor::clearPixmap() { XImage* xmap = XGetImage(display, pixmap, 0, 0, options->width, options->height, AllPlanes, ZPixmap); if (!xmap) { internalError("Panner: Unable to Create XImage"); return; } memset(xmap->data, 255, xmap->bytes_per_line * xmap->height); TkPutImage(NULL, 0, display, pixmap, widgetGC, xmap, 0, 0, 0, 0, options->width, options->height); XDestroyImage(xmap); } saods9/tksao/panner/pannertrue.h000644 000765 000000 00000000601 12705446252 017330 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __pannertrue_h__ #define __pannertrue_h__ #include "panner.h" class PannerTrueColor : public Panner { private: void clearPixmap(); public: PannerTrueColor(Tcl_Interp*, Tk_Canvas, Tk_Item*); }; #endif saods9/tksao/panner/parser.C000644 000765 000000 00000150025 12553253032 016373 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse pnparse #define yylex pnlex #define yyerror pnerror #define yylval pnlval #define yychar pnchar #define yydebug pndebug #define yynerrs pnnerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, POINTER = 260, BBOX_ = 261, BEGIN_ = 262, CLEAR_ = 263, COMPASS_ = 264, DEBUG_ = 265, END_ = 266, FALSE_ = 267, GET_ = 268, HEIGHT_ = 269, HIDE_ = 270, HIGHLITE_ = 271, IMAGE_ = 272, INVALID_ = 273, MOTION_ = 274, N_ = 275, NO_ = 276, OFF_ = 277, ON_ = 278, PAN_ = 279, RESET_ = 280, SHOW_ = 281, SIZE_ = 282, TRUE_ = 283, TO_ = 284, UPDATE_ = 285, VERSION_ = 286, WARP_ = 287, WCS_ = 288, WIDTH_ = 289, Y_ = 290, YES_ = 291 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define POINTER 260 #define BBOX_ 261 #define BEGIN_ 262 #define CLEAR_ 263 #define COMPASS_ 264 #define DEBUG_ 265 #define END_ 266 #define FALSE_ 267 #define GET_ 268 #define HEIGHT_ 269 #define HIDE_ 270 #define HIGHLITE_ 271 #define IMAGE_ 272 #define INVALID_ 273 #define MOTION_ 274 #define N_ 275 #define NO_ 276 #define OFF_ 277 #define ON_ 278 #define PAN_ 279 #define RESET_ 280 #define SHOW_ 281 #define SIZE_ 282 #define TRUE_ 283 #define TO_ 284 #define UPDATE_ 285 #define VERSION_ 286 #define WARP_ 287 #define WCS_ 288 #define WIDTH_ 289 #define Y_ 290 #define YES_ 291 /* Copy the first part of user declarations. */ #line 10 "panner/parser.Y" #define YYDEBUG 1 #include #include "panner.h" #undef yyFlexLexer #define yyFlexLexer pnFlexLexer #include extern int pnlex(void*, pnFlexLexer*); extern void pnerror(Panner*, pnFlexLexer*, const char*); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 24 "panner/parser.Y" { float real; int integer; void* ptr; char str[1024]; } /* Line 193 of yacc.c. */ #line 197 "panner/parser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 210 "panner/parser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 57 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 118 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 37 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 12 /* YYNRULES -- Number of rules. */ #define YYNRULES 50 /* YYNRULES -- Number of states. */ #define YYNSTATES 93 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 291 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 6, 9, 11, 14, 18, 21, 23, 26, 29, 31, 33, 36, 38, 42, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 87, 89, 91, 95, 99, 103, 107, 109, 119, 123, 127, 132, 139, 144 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 38, 0, -1, 10, 40, -1, 6, 42, -1, 8, -1, 9, 41, -1, 17, 9, 41, -1, 13, 43, -1, 15, -1, 16, 44, -1, 24, 45, -1, 25, -1, 26, -1, 30, 46, -1, 31, -1, 32, 39, 39, -1, 33, 9, 41, -1, 4, -1, 3, -1, 23, -1, 22, -1, 3, -1, 36, -1, 35, -1, 23, -1, 28, -1, 21, -1, 20, -1, 22, -1, 12, -1, 23, -1, 22, -1, 6, -1, 14, -1, 27, -1, 34, -1, 39, 39, -1, 22, -1, 23, -1, 7, 39, 39, -1, 19, 39, 39, -1, 11, 39, 39, -1, 29, 39, 39, -1, 5, -1, 6, 39, 39, 39, 39, 39, 39, 39, 39, -1, 17, 9, 47, -1, 33, 9, 48, -1, 39, 39, 39, 39, -1, 39, 39, 39, 39, 39, 39, -1, 39, 39, 39, 39, -1, 18, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 72, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 89, 90, 93, 94, 97, 99, 100, 101, 102, 104, 105, 106, 107, 110, 111, 114, 115, 116, 117, 120, 121, 122, 125, 126, 127, 128, 131, 132, 136, 137, 140, 142, 147, 149 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "INT", "REAL", "POINTER", "BBOX_", "BEGIN_", "CLEAR_", "COMPASS_", "DEBUG_", "END_", "FALSE_", "GET_", "HEIGHT_", "HIDE_", "HIGHLITE_", "IMAGE_", "INVALID_", "MOTION_", "N_", "NO_", "OFF_", "ON_", "PAN_", "RESET_", "SHOW_", "SIZE_", "TRUE_", "TO_", "UPDATE_", "VERSION_", "WARP_", "WCS_", "WIDTH_", "Y_", "YES_", "$accept", "command", "numeric", "debug", "yesno", "bbox", "get", "highLite", "pan", "update", "updateImageCompass", "updateWCSCompass", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 43, 43, 43, 43, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 48, 48 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 2, 2, 1, 2, 3, 2, 1, 2, 2, 1, 1, 2, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 3, 3, 3, 1, 9, 3, 3, 4, 6, 4, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 11, 12, 0, 14, 0, 0, 0, 31, 30, 3, 21, 29, 27, 26, 28, 24, 25, 23, 22, 5, 20, 19, 2, 32, 33, 34, 35, 7, 18, 17, 37, 38, 0, 9, 0, 0, 0, 0, 0, 10, 43, 0, 0, 0, 13, 0, 0, 1, 36, 6, 0, 0, 0, 0, 0, 0, 0, 15, 16, 39, 41, 40, 42, 0, 0, 45, 50, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47, 49, 0, 0, 0, 48, 44 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 16, 42, 32, 29, 19, 37, 43, 49, 54, 75, 78 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -37 static const yytype_int8 yypact[] = { 85, -12, -37, 61, -7, -5, -37, 1, 17, 6, -37, -37, -3, -37, 15, 18, 12, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, 15, -37, 61, 15, 15, 15, 15, -37, -37, 15, 27, 29, -37, 15, 61, -37, -37, -37, 15, 15, 15, 15, 15, 15, 3, -37, -37, -37, -37, -37, -37, 15, 15, -37, -37, 15, -37, 15, 15, 15, 15, 15, 15, 15, 15, -37, 15, 15, 15, -37, -37 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -37, -37, -14, -37, -36, -37, -37, -37, -37, -37, -37, -37 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 55, 33, 50, 51, 38, 39, 38, 39, 59, 34, 17, 18, 57, 45, 52, 30, 31, 46, 38, 39, 68, 76, 35, 40, 41, 47, 44, 56, 58, 36, 53, 60, 61, 62, 63, 48, 65, 64, 66, 0, 0, 67, 0, 0, 0, 0, 69, 70, 71, 72, 73, 74, 77, 0, 0, 0, 0, 0, 0, 79, 80, 0, 0, 81, 20, 82, 83, 84, 85, 86, 87, 88, 89, 21, 90, 91, 92, 0, 0, 0, 0, 22, 23, 24, 25, 0, 0, 0, 0, 26, 0, 1, 0, 2, 3, 4, 27, 28, 5, 0, 6, 7, 8, 0, 0, 0, 0, 0, 0, 9, 10, 11, 0, 0, 0, 12, 13, 14, 15 }; static const yytype_int8 yycheck[] = { 14, 6, 5, 6, 3, 4, 3, 4, 44, 14, 22, 23, 0, 7, 17, 22, 23, 11, 3, 4, 56, 18, 27, 22, 23, 19, 9, 9, 42, 34, 33, 45, 46, 47, 48, 29, 9, 51, 9, -1, -1, 55, -1, -1, -1, -1, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, 73, 74, -1, -1, 77, 3, 79, 80, 81, 82, 83, 84, 85, 86, 12, 88, 89, 90, -1, -1, -1, -1, 20, 21, 22, 23, -1, -1, -1, -1, 28, -1, 6, -1, 8, 9, 10, 35, 36, 13, -1, 15, 16, 17, -1, -1, -1, -1, -1, -1, 24, 25, 26, -1, -1, -1, 30, 31, 32, 33 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 6, 8, 9, 10, 13, 15, 16, 17, 24, 25, 26, 30, 31, 32, 33, 38, 22, 23, 42, 3, 12, 20, 21, 22, 23, 28, 35, 36, 41, 22, 23, 40, 6, 14, 27, 34, 43, 3, 4, 22, 23, 39, 44, 9, 7, 11, 19, 29, 45, 5, 6, 17, 33, 46, 39, 9, 0, 39, 41, 39, 39, 39, 39, 39, 9, 9, 39, 41, 39, 39, 39, 39, 39, 39, 47, 18, 39, 48, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (pn, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, pn, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Panner* pn, pnFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, pn, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Panner* pn; pnFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (pn); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Panner* pn, pnFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, pn, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Panner* pn; pnFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, pn, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, Panner* pn, pnFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, pn, ll) YYSTYPE *yyvsp; int yyrule; Panner* pn; pnFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , pn, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, pn, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, Panner* pn, pnFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, pn, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; Panner* pn; pnFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (pn); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (Panner* pn, pnFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (Panner* pn, pnFlexLexer* ll) #else int yyparse (pn, ll) Panner* pn; pnFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 4: #line 74 "panner/parser.Y" {pn->updateCmd(0);;} break; case 5: #line 75 "panner/parser.Y" {pn->setCompassCmd((yyvsp[(2) - (2)].integer));;} break; case 6: #line 76 "panner/parser.Y" {pn->setCompassCmd((yyvsp[(3) - (3)].integer));;} break; case 8: #line 78 "panner/parser.Y" {pn->hideCmd();;} break; case 11: #line 81 "panner/parser.Y" {pn->resetCmd();;} break; case 12: #line 82 "panner/parser.Y" {pn->showCmd();;} break; case 14: #line 84 "panner/parser.Y" {pn->msg("Panner 1.0");;} break; case 15: #line 85 "panner/parser.Y" {pn->warpCmd(Vector((yyvsp[(2) - (3)].real), (yyvsp[(3) - (3)].real)));;} break; case 16: #line 86 "panner/parser.Y" {pn->setCompassCmd((yyvsp[(3) - (3)].integer));;} break; case 17: #line 89 "panner/parser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 18: #line 90 "panner/parser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 19: #line 93 "panner/parser.Y" {yydebug=1;;} break; case 20: #line 94 "panner/parser.Y" {yydebug=0;;} break; case 21: #line 97 "panner/parser.Y" {(yyval.integer)=((yyvsp[(1) - (1)].integer) ? 1 : 0);;} break; case 22: #line 99 "panner/parser.Y" {(yyval.integer)=1;;} break; case 23: #line 100 "panner/parser.Y" {(yyval.integer)=1;;} break; case 24: #line 101 "panner/parser.Y" {(yyval.integer)=1;;} break; case 25: #line 102 "panner/parser.Y" {(yyval.integer)=1;;} break; case 26: #line 104 "panner/parser.Y" {(yyval.integer)=0;;} break; case 27: #line 105 "panner/parser.Y" {(yyval.integer)=0;;} break; case 28: #line 106 "panner/parser.Y" {(yyval.integer)=0;;} break; case 29: #line 107 "panner/parser.Y" {(yyval.integer)=0;;} break; case 30: #line 110 "panner/parser.Y" {pn->setBBoxCmd(1);;} break; case 31: #line 111 "panner/parser.Y" {pn->setBBoxCmd(0);;} break; case 32: #line 114 "panner/parser.Y" {pn->getBBoxCmd();;} break; case 33: #line 115 "panner/parser.Y" {pn->getHeightCmd();;} break; case 34: #line 116 "panner/parser.Y" {pn->getSizeCmd();;} break; case 35: #line 117 "panner/parser.Y" {pn->getWidthCmd();;} break; case 36: #line 120 "panner/parser.Y" {pn->highLiteCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 37: #line 121 "panner/parser.Y" {pn->highLiteCmd(0);;} break; case 38: #line 122 "panner/parser.Y" {pn->highLiteCmd(1);;} break; case 39: #line 125 "panner/parser.Y" {pn->panBeginCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 40: #line 126 "panner/parser.Y" {pn->panMotionCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 41: #line 127 "panner/parser.Y" {pn->panEndCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 42: #line 128 "panner/parser.Y" {pn->panToCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 43: #line 131 "panner/parser.Y" {pn->updateCmd((yyvsp[(1) - (1)].ptr));;} break; case 44: #line 134 "panner/parser.Y" {pn->updateBBoxCmd(Vector((yyvsp[(2) - (9)].real),(yyvsp[(3) - (9)].real)),Vector((yyvsp[(4) - (9)].real),(yyvsp[(5) - (9)].real)), Vector((yyvsp[(6) - (9)].real),(yyvsp[(7) - (9)].real)),Vector((yyvsp[(8) - (9)].real),(yyvsp[(9) - (9)].real)));;} break; case 47: #line 141 "panner/parser.Y" {pn->updateImageCompassCmd(Vector((yyvsp[(1) - (4)].real),(yyvsp[(2) - (4)].real)),Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;} break; case 48: #line 143 "panner/parser.Y" {pn->updateImageCompassCmd(Vector((yyvsp[(1) - (6)].real),(yyvsp[(2) - (6)].real)), Vector((yyvsp[(3) - (6)].real),(yyvsp[(4) - (6)].real)), Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;} break; case 49: #line 148 "panner/parser.Y" {pn->updateWCSCompassCmd(Vector((yyvsp[(1) - (4)].real),(yyvsp[(2) - (4)].real)),Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;} break; case 50: #line 149 "panner/parser.Y" {pn->updateWCSCompassCmd();;} break; /* Line 1267 of yacc.c. */ #line 1706 "panner/parser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (pn, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (pn, ll, yymsg); } else { yyerror (pn, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, pn, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, pn, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (pn, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, pn, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, pn, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 152 "panner/parser.Y" saods9/tksao/panner/parser.H000644 000765 000000 00000006553 12553253032 016406 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, POINTER = 260, BBOX_ = 261, BEGIN_ = 262, CLEAR_ = 263, COMPASS_ = 264, DEBUG_ = 265, END_ = 266, FALSE_ = 267, GET_ = 268, HEIGHT_ = 269, HIDE_ = 270, HIGHLITE_ = 271, IMAGE_ = 272, INVALID_ = 273, MOTION_ = 274, N_ = 275, NO_ = 276, OFF_ = 277, ON_ = 278, PAN_ = 279, RESET_ = 280, SHOW_ = 281, SIZE_ = 282, TRUE_ = 283, TO_ = 284, UPDATE_ = 285, VERSION_ = 286, WARP_ = 287, WCS_ = 288, WIDTH_ = 289, Y_ = 290, YES_ = 291 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define POINTER 260 #define BBOX_ 261 #define BEGIN_ 262 #define CLEAR_ 263 #define COMPASS_ 264 #define DEBUG_ 265 #define END_ 266 #define FALSE_ 267 #define GET_ 268 #define HEIGHT_ 269 #define HIDE_ 270 #define HIGHLITE_ 271 #define IMAGE_ 272 #define INVALID_ 273 #define MOTION_ 274 #define N_ 275 #define NO_ 276 #define OFF_ 277 #define ON_ 278 #define PAN_ 279 #define RESET_ 280 #define SHOW_ 281 #define SIZE_ 282 #define TRUE_ 283 #define TO_ 284 #define UPDATE_ 285 #define VERSION_ 286 #define WARP_ 287 #define WCS_ 288 #define WIDTH_ 289 #define Y_ 290 #define YES_ 291 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 24 "panner/parser.Y" { float real; int integer; void* ptr; char str[1024]; } /* Line 1529 of yacc.c. */ #line 128 "panner/parser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/panner/parser.Y000644 000765 000000 00000005755 12705446252 016441 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {Panner* pn} %lex-param {pnFlexLexer* ll} %parse-param {pnFlexLexer* ll} %{ #define YYDEBUG 1 #include #include "panner.h" #undef yyFlexLexer #define yyFlexLexer pnFlexLexer #include extern int pnlex(void*, pnFlexLexer*); extern void pnerror(Panner*, pnFlexLexer*, const char*); %} %union { float real; int integer; void* ptr; char str[1024]; } %type numeric %type yesno %token INT %token REAL %token POINTER %token BBOX_ %token BEGIN_ %token CLEAR_ %token COMPASS_ %token DEBUG_ %token END_ %token FALSE_ %token GET_ %token HEIGHT_ %token HIDE_ %token HIGHLITE_ %token IMAGE_ %token INVALID_ %token MOTION_ %token N_ %token NO_ %token OFF_ %token ON_ %token PAN_ %token RESET_ %token SHOW_ %token SIZE_ %token TRUE_ %token TO_ %token UPDATE_ %token VERSION_ %token WARP_ %token WCS_ %token WIDTH_ %token Y_ %token YES_ %% command : DEBUG_ debug | BBOX_ bbox | CLEAR_ {pn->updateCmd(0);} | COMPASS_ yesno {pn->setCompassCmd($2);} | IMAGE_ COMPASS_ yesno {pn->setCompassCmd($3);} | GET_ get | HIDE_ {pn->hideCmd();} | HIGHLITE_ highLite | PAN_ pan | RESET_ {pn->resetCmd();} | SHOW_ {pn->showCmd();} | UPDATE_ update | VERSION_ {pn->msg("Panner 1.0");} | WARP_ numeric numeric {pn->warpCmd(Vector($2, $3));} | WCS_ COMPASS_ yesno {pn->setCompassCmd($3);} ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; yesno : INT {$$=($1 ? 1 : 0);} | YES_ {$$=1;} | Y_ {$$=1;} | ON_ {$$=1;} | TRUE_ {$$=1;} | NO_ {$$=0;} | N_ {$$=0;} | OFF_ {$$=0;} | FALSE_ {$$=0;} ; bbox : ON_ {pn->setBBoxCmd(1);} | OFF_ {pn->setBBoxCmd(0);} ; get : BBOX_ {pn->getBBoxCmd();} | HEIGHT_ {pn->getHeightCmd();} | SIZE_ {pn->getSizeCmd();} | WIDTH_ {pn->getWidthCmd();} ; highLite: numeric numeric {pn->highLiteCmd(Vector($1,$2));} | OFF_ {pn->highLiteCmd(0);} | ON_ {pn->highLiteCmd(1);} ; pan : BEGIN_ numeric numeric {pn->panBeginCmd(Vector($2,$3));} | MOTION_ numeric numeric {pn->panMotionCmd(Vector($2,$3));} | END_ numeric numeric {pn->panEndCmd(Vector($2,$3));} | TO_ numeric numeric {pn->panToCmd(Vector($2,$3));} ; update : POINTER {pn->updateCmd($1);} | BBOX_ numeric numeric numeric numeric numeric numeric numeric numeric {pn->updateBBoxCmd(Vector($2,$3),Vector($4,$5), Vector($6,$7),Vector($8,$9));} | IMAGE_ COMPASS_ updateImageCompass | WCS_ COMPASS_ updateWCSCompass ; updateImageCompass : numeric numeric numeric numeric {pn->updateImageCompassCmd(Vector($1,$2),Vector($3,$4));} | numeric numeric numeric numeric numeric numeric {pn->updateImageCompassCmd(Vector($1,$2), Vector($3,$4), Vector($5,$6));} ; updateWCSCompass : numeric numeric numeric numeric {pn->updateWCSCompassCmd(Vector($1,$2),Vector($3,$4));} | INVALID_ {pn->updateWCSCompassCmd();} ; %% saods9/tksao/magnifier/lex.C000644 000765 000000 00000130610 12705446252 016352 0ustar00joyewheel000000 000000 #line 2 "magnifier/lex.C" #line 4 "magnifier/lex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer mgFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *mgalloc (yy_size_t ); void *mgrealloc (void *,yy_size_t ); void mgfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 24 #define YY_END_OF_BUFFER 25 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[86] = { 0, 0, 0, 25, 23, 22, 24, 23, 20, 20, 23, 23, 23, 23, 23, 23, 10, 23, 23, 23, 23, 23, 23, 23, 18, 22, 20, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 9, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 7, 0, 13, 14, 0, 0, 0, 2, 3, 4, 0, 12, 0, 0, 17, 6, 15, 0, 16, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 4, 1, 1, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1, 1, 16, 1, 17, 18, 19, 1, 20, 21, 22, 23, 24, 25, 26, 27, 1, 1, 1, 1, 1, 1, 1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 1, 1, 37, 1, 38, 39, 40, 1, 41, 42, 43, 44, 45, 46, 47, 48, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[49] = { 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int16_t yy_base[87] = { 0, 0, 0, 159, 175, 154, 175, 44, 46, 48, 47, 40, 46, 51, 48, 49, 43, 50, 52, 51, 46, 49, 58, 55, 60, 153, 68, 0, 57, 83, 87, 81, 76, 84, 90, 175, 89, 175, 81, 85, 81, 95, 86, 97, 87, 0, 83, 103, 88, 91, 175, 100, 103, 175, 106, 111, 126, 132, 119, 119, 175, 175, 122, 130, 133, 131, 175, 124, 175, 175, 125, 133, 135, 175, 175, 175, 128, 175, 140, 134, 175, 175, 175, 136, 175, 175, 152 } ; static yyconst flex_int16_t yy_def[87] = { 0, 85, 1, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 85 } ; static yyconst flex_int16_t yy_nxt[224] = { 0, 4, 5, 6, 7, 8, 9, 4, 10, 11, 12, 4, 13, 14, 15, 4, 4, 16, 17, 4, 18, 19, 20, 21, 22, 23, 4, 24, 4, 10, 11, 12, 4, 13, 14, 15, 4, 4, 16, 17, 4, 18, 19, 20, 21, 22, 23, 4, 24, 26, 26, 26, 26, 26, 26, 28, 29, 30, 31, 32, 33, 35, 36, 38, 34, 39, 40, 37, 41, 42, 43, 44, 27, 26, 26, 46, 28, 29, 30, 31, 32, 33, 35, 36, 38, 34, 39, 40, 37, 41, 42, 43, 44, 27, 47, 48, 46, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 47, 48, 67, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 45, 25, 25, 68, 69, 85, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 3, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 } ; static yyconst flex_int16_t yy_chk[224] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 8, 8, 9, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 15, 19, 20, 17, 21, 22, 23, 24, 8, 26, 26, 28, 10, 11, 12, 13, 14, 15, 16, 17, 18, 15, 19, 20, 17, 21, 22, 23, 24, 8, 29, 30, 28, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 51, 52, 29, 30, 54, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 51, 52, 55, 56, 54, 57, 58, 59, 62, 63, 64, 65, 67, 70, 71, 72, 76, 78, 79, 83, 86, 25, 5, 55, 56, 3, 57, 58, 59, 62, 63, 64, 65, 67, 70, 71, 72, 76, 78, 79, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "magnifier/lex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "magnifier/lex.L" #include #include #include #include "parser.H" extern YYSTYPE* mglval; /* rules */ #line 496 "magnifier/lex.C" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 26 "magnifier/lex.L" #line 599 "magnifier/lex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 86 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 85 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 28 "magnifier/lex.L" {return BBOX_;} YY_BREAK case 2: YY_RULE_SETUP #line 29 "magnifier/lex.L" {return CLEAR_;} YY_BREAK case 3: YY_RULE_SETUP #line 30 "magnifier/lex.L" {return DEBUG_;} YY_BREAK case 4: YY_RULE_SETUP #line 31 "magnifier/lex.L" {return FALSE_;} YY_BREAK case 5: YY_RULE_SETUP #line 32 "magnifier/lex.L" {return GET_;} YY_BREAK case 6: YY_RULE_SETUP #line 33 "magnifier/lex.L" {return HEIGHT_;} YY_BREAK case 7: YY_RULE_SETUP #line 34 "magnifier/lex.L" {return HIDE_;} YY_BREAK case 8: YY_RULE_SETUP #line 35 "magnifier/lex.L" {return OFF_;} YY_BREAK case 9: YY_RULE_SETUP #line 36 "magnifier/lex.L" {return ON_;} YY_BREAK case 10: YY_RULE_SETUP #line 37 "magnifier/lex.L" {return N_;} YY_BREAK case 11: YY_RULE_SETUP #line 38 "magnifier/lex.L" {return NO_;} YY_BREAK case 12: YY_RULE_SETUP #line 39 "magnifier/lex.L" {return RESET_;} YY_BREAK case 13: YY_RULE_SETUP #line 40 "magnifier/lex.L" {return SHOW_;} YY_BREAK case 14: YY_RULE_SETUP #line 41 "magnifier/lex.L" {return TRUE_;} YY_BREAK case 15: YY_RULE_SETUP #line 42 "magnifier/lex.L" {return UPDATE_;} YY_BREAK case 16: YY_RULE_SETUP #line 43 "magnifier/lex.L" {return VERSION_;} YY_BREAK case 17: YY_RULE_SETUP #line 44 "magnifier/lex.L" {return WIDTH_;} YY_BREAK case 18: YY_RULE_SETUP #line 45 "magnifier/lex.L" {return Y_;} YY_BREAK case 19: YY_RULE_SETUP #line 46 "magnifier/lex.L" {return YES_;} YY_BREAK case 20: YY_RULE_SETUP #line 48 "magnifier/lex.L" { // Integer mglval->integer = atoi(yytext); return INT; } YY_BREAK case 21: YY_RULE_SETUP #line 53 "magnifier/lex.L" { // Pointer mglval->ptr = (void*)strtoul(yytext,NULL,16); return POINTER; } YY_BREAK case 22: YY_RULE_SETUP #line 58 "magnifier/lex.L" { // White Spaces } YY_BREAK case 23: YY_RULE_SETUP #line 61 "magnifier/lex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 24: YY_RULE_SETUP #line 65 "magnifier/lex.L" ECHO; YY_BREAK #line 807 "magnifier/lex.C" case YY_STATE_EOF(INITIAL): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; mgfree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); mgfree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ mgrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) mgrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 86 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 86 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 85); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) mgalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) mgalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) mgfree((void *) b->yy_ch_buf ); mgfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)mgalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)mgrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) mgalloc(new_size ); else (yy_start_stack) = (int *) mgrealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *mgalloc (yy_size_t size ) { return (void *) malloc( size ); } void *mgrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void mgfree (void * ptr ) { free( (char *) ptr ); /* see mgrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 65 "magnifier/lex.L" saods9/tksao/magnifier/lex.L000644 000765 000000 00000002124 12705446252 016361 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "parser.H" extern YYSTYPE* mglval; %} D [0-9] E [Ee][+-]?{D}+ /* rules */ %% bbox {return BBOX_;} clear {return CLEAR_;} debug {return DEBUG_;} false {return FALSE_;} get {return GET_;} height {return HEIGHT_;} hide {return HIDE_;} off {return OFF_;} on {return ON_;} n {return N_;} no {return NO_;} reset {return RESET_;} show {return SHOW_;} true {return TRUE_;} update {return UPDATE_;} version {return VERSION_;} width {return WIDTH_;} y {return Y_;} yes {return YES_;} [+-]?{D}+ { // Integer mglval->integer = atoi(yytext); return INT; } 0[xX][0-9a-fA-F]+ { // Pointer mglval->ptr = (void*)strtoul(yytext,NULL,16); return POINTER; } [ \t]+ { // White Spaces } . { // Else, return the char return yytext[0]; } %% saods9/tksao/magnifier/magnifier.C000644 000765 000000 00000004300 12754667026 017527 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "magnifier.h" #include "util.h" // Parser Stuff #undef yyFlexLexer #define yyFlexLexer mgFlexLexer #include void* mglval; extern int mgparse(Magnifier*, mgFlexLexer*); int mglex(void* vval, mgFlexLexer* ll) { mglval = vval; return ll ? ll->yylex() : 0; } void mgerror(Magnifier* mg, mgFlexLexer* ll, const char* m) { mg->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') { mg->error(": "); mg->error(cmd); } } // Public Member Functions Magnifier::Magnifier(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Widget(i, c, item) { thumbnail = 0; needsUpdate = 0; } int Magnifier::parse(istringstream& istr) { result = TCL_OK; mgFlexLexer* ll = new mgFlexLexer(&istr); mgparse(this, ll); delete ll; return result; } void Magnifier::update() { needsUpdate = 1; redrawNow(); } // Required Virtual Functions // UpdatePixmap. This function is responsable for creating a valid // pixmap the size of the current Magnifier int Magnifier::updatePixmap(const BBox& bb) { if (!widgetGC) widgetGC = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); // create a valid pixmap if needed // bb is in canvas coords if (!pixmap) if (!(pixmap = Tk_GetPixmap(display, Tk_WindowId(tkwin), options->width, options->height, depth))) { internalError("Magnifier: Unable to Create Pixmap"); return TCL_OK; } if (needsUpdate) { if (thumbnail) { XSetClipOrigin(display, widgetGC, 0, 0); XCopyArea(display, thumbnail, pixmap, widgetGC, 0, 0, options->width, options->height, 0, 0); } else clearPixmap(); needsUpdate = 0; } return TCL_OK; } void Magnifier::invalidPixmap() { Widget::invalidPixmap(); update(); } // Command Functions void Magnifier::getBBoxCmd() { ostringstream str; str << options->width << " " << options->height << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Magnifier::updateCmd(void* p) { thumbnail = (Pixmap)p; update(); } saods9/tksao/magnifier/magnifier.h000644 000765 000000 00000001771 12705446252 017575 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __magnifier_h__ #define __magnifier_h__ #include "widget.h" class Magnifier : public Widget { private: Pixmap thumbnail; // current gterm thumbnail pixmap double crosshairSize; // size of crosshair (diameter) double crosshairAngle; // angle of rotation (radians) GC crosshairGC; // gc for crosshairs int useCrosshair; // flag to render crosshair int needsUpdate; // flag to indicate update needed protected: virtual void clearPixmap() =0; private: int updatePixmap(const BBox&); // renders image/graphics into pixmap void update(); void invalidPixmap(); public: Magnifier(Tcl_Interp*, Tk_Canvas, Tk_Item*); int parse(istringstream&); // parse subcommands // SubCommandFunctions void crosshairCmd(int); void getBBoxCmd(); void updateCmd(void*); }; #endif saods9/tksao/magnifier/magnifiertrue.C000644 000765 000000 00000007647 12754663301 020440 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "magnifiertrue.h" #include "util.h" // Tk Canvas Widget Function Declarations int MagnifierTrueColorCreateProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const []); // MagnifierTrueColor Specs static Tk_CustomOption tagsOption = { Tk_CanvasTagsParseProc, Tk_CanvasTagsPrintProc, NULL }; static Tk_ConfigSpec magnifierTrueColorSpecs[] = { {TK_CONFIG_STRING, (char*)"-command", NULL, NULL, "magnifier", Tk_Offset(WidgetOptions, cmdName), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-x", NULL, NULL, "1", Tk_Offset(WidgetOptions, x), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-y", NULL, NULL, "1", Tk_Offset(WidgetOptions, y), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-width", NULL, NULL, "256", Tk_Offset(WidgetOptions, width), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-height", NULL, NULL, "256", Tk_Offset(WidgetOptions, height), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_ANCHOR, (char*)"-anchor", NULL, NULL, "nw", Tk_Offset(WidgetOptions, anchor), 0, NULL}, {TK_CONFIG_CUSTOM, (char*)"-tags", NULL, NULL, NULL, 0, TK_CONFIG_NULL_OK, &tagsOption}, {TK_CONFIG_STRING, (char*)"-helvetica", NULL, NULL, "helvetica", Tk_Offset(WidgetOptions, helvetica), 0, NULL}, {TK_CONFIG_STRING, (char*)"-courier", NULL, NULL, "courier", Tk_Offset(WidgetOptions, courier), 0, NULL}, {TK_CONFIG_STRING, (char*)"-times", NULL, NULL, "times", Tk_Offset(WidgetOptions, times), 0, NULL}, {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL}, }; // Tk Static Structure static Tk_ItemType magnifierTrueColorType = { (char*)"magnifiertruecolor", // name sizeof(WidgetOptions), // size MagnifierTrueColorCreateProc, // configProc magnifierTrueColorSpecs, // configSpecs WidgetConfigProc, // configProc WidgetCoordProc, // coordProc WidgetDeleteProc, // deleteProc WidgetDisplayProc, // displayProc 0, // alwaysRedraw WidgetPointProc, // pointProc WidgetAreaProc, // areaProc WidgetPostscriptProc, // postscriptProc WidgetScaleProc, // scaleProc WidgetTranslateProc, // translateProc (Tk_ItemIndexProc*)NULL, // indexProc (Tk_ItemCursorProc*)NULL, // icursorProc (Tk_ItemSelectionProc*)NULL, // selectionProc (Tk_ItemInsertProc*)NULL, // insertProc (Tk_ItemDCharsProc*)NULL, // dCharsProc (Tk_ItemType*)NULL // nextPtr }; // Non-Member Functions int MagnifierTrueColor_Init(Tcl_Interp* interp) { Tk_CreateItemType(&magnifierTrueColorType); return TCL_OK; } int MagnifierTrueColorCreateProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[]) { MagnifierTrueColor* magnifier = new MagnifierTrueColor(interp, canvas, item); // and set default configuration if (magnifier->configure(argc, (const char**)argv, 0) != TCL_OK) { delete magnifier; Tcl_AppendResult(interp, " error occured while creating magnifier.", NULL); return TCL_ERROR; } return TCL_OK; } MagnifierTrueColor::MagnifierTrueColor(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Magnifier(i, c, item) { configSpecs = magnifierTrueColorSpecs; // magnifier configure options } void MagnifierTrueColor::clearPixmap() { XImage* xmap = XGetImage(display, pixmap, 0, 0, options->width, options->height, AllPlanes, ZPixmap); if (!xmap) { internalError("MagnifierTrueColor: Unable to Create XImage"); return; } memset(xmap->data, 255, xmap->bytes_per_line * xmap->height); TkPutImage(NULL, 0, display, pixmap, widgetGC, xmap, 0, 0, 0, 0, options->width, options->height); XDestroyImage(xmap); } saods9/tksao/magnifier/magnifiertrue.h000644 000765 000000 00000000622 12705446252 020467 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __magnifiertrue_h__ #define __magnifiertrue_h__ #include "magnifier.h" class MagnifierTrueColor : public Magnifier { private: void clearPixmap(); public: MagnifierTrueColor(Tcl_Interp*, Tk_Canvas, Tk_Item*); }; #endif saods9/tksao/magnifier/parser.C000644 000765 000000 00000125667 12553253032 017067 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse mgparse #define yylex mglex #define yyerror mgerror #define yylval mglval #define yychar mgchar #define yydebug mgdebug #define yynerrs mgnerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, POINTER = 259, BBOX_ = 260, CLEAR_ = 261, DEBUG_ = 262, FALSE_ = 263, GET_ = 264, HEIGHT_ = 265, HIDE_ = 266, OFF_ = 267, ON_ = 268, N_ = 269, NO_ = 270, RESET_ = 271, SHOW_ = 272, TRUE_ = 273, UPDATE_ = 274, VERSION_ = 275, WIDTH_ = 276, Y_ = 277, YES_ = 278 }; #endif /* Tokens. */ #define INT 258 #define POINTER 259 #define BBOX_ 260 #define CLEAR_ 261 #define DEBUG_ 262 #define FALSE_ 263 #define GET_ 264 #define HEIGHT_ 265 #define HIDE_ 266 #define OFF_ 267 #define ON_ 268 #define N_ 269 #define NO_ 270 #define RESET_ 271 #define SHOW_ 272 #define TRUE_ 273 #define UPDATE_ 274 #define VERSION_ 275 #define WIDTH_ 276 #define Y_ 277 #define YES_ 278 /* Copy the first part of user declarations. */ #line 10 "magnifier/parser.Y" #define YYDEBUG 1 #include #include "magnifier.h" #undef yyFlexLexer #define yyFlexLexer mgFlexLexer #include extern int mglex(void*, mgFlexLexer*); extern void mgerror(Magnifier*, mgFlexLexer*, const char*); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 24 "magnifier/parser.Y" { float real; int integer; void* ptr; char str[1024]; } /* Line 193 of yacc.c. */ #line 171 "magnifier/parser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 184 "magnifier/parser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 18 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 21 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 24 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 4 /* YYNRULES -- Number of rules. */ #define YYNRULES 14 /* YYNRULES -- Number of states. */ #define YYNSTATES 19 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 278 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 6, 8, 11, 13, 15, 17, 20, 22, 24, 26, 28, 30 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 25, 0, -1, 7, 26, -1, 6, -1, 9, 27, -1, 11, -1, 16, -1, 17, -1, 19, 4, -1, 20, -1, 13, -1, 12, -1, 5, -1, 10, -1, 21, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 56, 56, 57, 58, 59, 60, 61, 62, 63, 66, 67, 70, 71, 72 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "INT", "POINTER", "BBOX_", "CLEAR_", "DEBUG_", "FALSE_", "GET_", "HEIGHT_", "HIDE_", "OFF_", "ON_", "N_", "NO_", "RESET_", "SHOW_", "TRUE_", "UPDATE_", "VERSION_", "WIDTH_", "Y_", "YES_", "$accept", "command", "debug", "get", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 24, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 27, 27, 27 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 3, 0, 0, 5, 6, 7, 0, 9, 0, 11, 10, 2, 12, 13, 14, 4, 8, 1 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 9, 12, 16 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -12 static const yytype_int8 yypact[] = { 1, -12, -11, -5, -12, -12, -12, -1, -12, 4, -12, -12, -12, -12, -12, -12, -12, -12, -12 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -12, -12, -12, -12 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 13, 10, 11, 17, 18, 14, 0, 1, 2, 0, 3, 0, 4, 0, 0, 0, 15, 5, 6, 0, 7, 8 }; static const yytype_int8 yycheck[] = { 5, 12, 13, 4, 0, 10, -1, 6, 7, -1, 9, -1, 11, -1, -1, -1, 21, 16, 17, -1, 19, 20 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 6, 7, 9, 11, 16, 17, 19, 20, 25, 12, 13, 26, 5, 10, 21, 27, 4, 0 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (mg, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, mg, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Magnifier* mg, mgFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, mg, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Magnifier* mg; mgFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (mg); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Magnifier* mg, mgFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, mg, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Magnifier* mg; mgFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, mg, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, Magnifier* mg, mgFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, mg, ll) YYSTYPE *yyvsp; int yyrule; Magnifier* mg; mgFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , mg, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, mg, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, Magnifier* mg, mgFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, mg, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; Magnifier* mg; mgFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (mg); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (Magnifier* mg, mgFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (Magnifier* mg, mgFlexLexer* ll) #else int yyparse (mg, ll) Magnifier* mg; mgFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 3: #line 57 "magnifier/parser.Y" {mg->updateCmd(0);;} break; case 5: #line 59 "magnifier/parser.Y" {mg->hideCmd();;} break; case 6: #line 60 "magnifier/parser.Y" {mg->resetCmd();;} break; case 7: #line 61 "magnifier/parser.Y" {mg->showCmd();;} break; case 8: #line 62 "magnifier/parser.Y" {mg->updateCmd((yyvsp[(2) - (2)].ptr));;} break; case 9: #line 63 "magnifier/parser.Y" {mg->msg("Magnifier 1.0");;} break; case 10: #line 66 "magnifier/parser.Y" {yydebug=1;;} break; case 11: #line 67 "magnifier/parser.Y" {yydebug=0;;} break; case 12: #line 70 "magnifier/parser.Y" {mg->getBBoxCmd();;} break; case 13: #line 71 "magnifier/parser.Y" {mg->getHeightCmd();;} break; case 14: #line 72 "magnifier/parser.Y" {mg->getWidthCmd();;} break; /* Line 1267 of yacc.c. */ #line 1451 "magnifier/parser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (mg, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (mg, ll, yymsg); } else { yyerror (mg, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, mg, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, mg, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (mg, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, mg, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, mg, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 75 "magnifier/parser.Y" saods9/tksao/magnifier/parser.H000644 000765 000000 00000005615 12553253032 017062 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, POINTER = 259, BBOX_ = 260, CLEAR_ = 261, DEBUG_ = 262, FALSE_ = 263, GET_ = 264, HEIGHT_ = 265, HIDE_ = 266, OFF_ = 267, ON_ = 268, N_ = 269, NO_ = 270, RESET_ = 271, SHOW_ = 272, TRUE_ = 273, UPDATE_ = 274, VERSION_ = 275, WIDTH_ = 276, Y_ = 277, YES_ = 278 }; #endif /* Tokens. */ #define INT 258 #define POINTER 259 #define BBOX_ 260 #define CLEAR_ 261 #define DEBUG_ 262 #define FALSE_ 263 #define GET_ 264 #define HEIGHT_ 265 #define HIDE_ 266 #define OFF_ 267 #define ON_ 268 #define N_ 269 #define NO_ 270 #define RESET_ 271 #define SHOW_ 272 #define TRUE_ 273 #define UPDATE_ 274 #define VERSION_ 275 #define WIDTH_ 276 #define Y_ 277 #define YES_ 278 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 24 "magnifier/parser.Y" { float real; int integer; void* ptr; char str[1024]; } /* Line 1529 of yacc.c. */ #line 102 "magnifier/parser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/magnifier/parser.Y000644 000765 000000 00000002363 12705446252 017107 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {Magnifier* mg} %lex-param {mgFlexLexer* ll} %parse-param {mgFlexLexer* ll} %{ #define YYDEBUG 1 #include #include "magnifier.h" #undef yyFlexLexer #define yyFlexLexer mgFlexLexer #include extern int mglex(void*, mgFlexLexer*); extern void mgerror(Magnifier*, mgFlexLexer*, const char*); %} %union { float real; int integer; void* ptr; char str[1024]; } %token INT %token POINTER %token BBOX_ %token CLEAR_ %token DEBUG_ %token FALSE_ %token GET_ %token HEIGHT_ %token HIDE_ %token OFF_ %token ON_ %token N_ %token NO_ %token RESET_ %token SHOW_ %token TRUE_ %token UPDATE_ %token VERSION_ %token WIDTH_ %token Y_ %token YES_ %% command : DEBUG_ debug | CLEAR_ {mg->updateCmd(0);} | GET_ get | HIDE_ {mg->hideCmd();} | RESET_ {mg->resetCmd();} | SHOW_ {mg->showCmd();} | UPDATE_ POINTER {mg->updateCmd($2);} | VERSION_ {mg->msg("Magnifier 1.0");} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; get : BBOX_ {mg->getBBoxCmd();} | HEIGHT_ {mg->getHeightCmd();} | WIDTH_ {mg->getWidthCmd();} ; %% saods9/tksao/list/list.C000644 000765 000000 00000014341 12762060174 015547 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "list.h" #include "vector.h" #include "marker.h" #include "callback.h" #include "contour.h" #include "fitsmask.h" #include "sao.h" #include "lut.h" #include "colormap.h" #include "colortag.h" #include "raytrace.h" template List::List() { head_ = NULL; tail_ = NULL; current_ = NULL; count_ = 0; } template List::List(const List& aa) { head_ = NULL; tail_ = NULL; current_ = NULL; count_ = 0; List& a = (List&)aa; if (a.head()) do append(new T((T)(*(a.current_)))); while (a.next()); } // this is needed because of Marker virtual functions template <> List::List(const List& aa) { head_ = NULL; tail_ = NULL; current_ = NULL; count_ = 0; List& a = (List&)aa; if (a.head()) do append(a.current_->dup()); while (a.next()); } // this is needed because of ColorMapInfo virtual functions template <> List::List(const List& aa) { head_ = NULL; tail_ = NULL; current_ = NULL; count_ = 0; List& a = (List&)aa; if (a.head()) do append(a.current_->dup()); while (a.next()); } template List::~List() { T* ptr = head_; while (ptr) { T* tmp = ptr->next(); delete ptr; ptr = tmp; } } template List& List::operator=(const List& aa) { deleteAll(); List& a = (List&)aa; if (a.head()) do append(new T((T)(*(a.current_)))); while (a.next()); return *this; } // this is needed because of Marker virtual functions template <> List& List::operator=(const List& aa) { deleteAll(); List& a = (List&)aa; if (a.head()) do append(a.current_->dup()); while (a.next()); return *this; } // this is needed because of ColorMapInfo virtual functions template <> List& List::operator=(const List& aa) { deleteAll(); List& a = (List&)aa; if (a.head()) do append(a.current_->dup()); while (a.next()); return *this; } template void List::insertHead(T* t) { if (head_ && t) { t->setNext(head_); t->setPrevious(NULL); head_->setPrevious(t); head_ = t; } else { head_ = t; tail_ = t; } current_ = head_; count_++; } template void List::insert(int which, T* t) { head(); for (int i=0; inext(); t->setPrevious(current_); t->setNext(n); current_->setNext(t); if (n) n->setPrevious(t); else tail_ = t; count_++; } } template void List::insertNext(T* c, T* t) { if (c && t) { T* n = c->next(); t->setPrevious(c); t->setNext(n); c->setNext(t); if (n) n->setPrevious(t); else tail_ = t; count_++; } } template void List::insertPrev(T* c, T* t) { if (c && t) { T* p = c->previous(); t->setPrevious(p); t->setNext(c); c->setPrevious(t); if (p) p->setNext(t); else head_ = t; count_++; } } template void List::append(T* p) { if (tail_) { p->setPrevious(tail_); p->setNext(NULL); tail_->setNext(p); tail_ = p; } else { p->setPrevious(NULL); p->setNext(NULL); head_ = p; tail_ = p; } current_ = tail_; count_++; } template void List::deleteAll() { T* ptr = head_; while (ptr) { T* tmp = ptr->next(); delete ptr; ptr = tmp; } head_ = NULL; tail_ = NULL; current_ = NULL; count_ = 0; } template T* List::pop() { if (tail_) { T* m = tail_; if (tail_ != head_) { T* p = tail_->previous(); p->setNext(NULL); tail_ = p; current_ = p; count_--; } else { head_ = NULL; tail_ = NULL; current_ = NULL; count_ = 0; } return m; } return NULL; } template T* List::fifo() { if (head_) { T* m = head_; if (tail_ != head_) { T* n = head_->next(); n->setPrevious(NULL); head_ = n; current_ = n; count_--; } else { head_ = NULL; tail_ = NULL; current_ = NULL; count_ = 0; } return m; } return NULL; } template T* List::extract() { T* ptr = current_; T* p = ptr->previous(); T* n = ptr->next(); if (p) p->setNext(n); if (n) n->setPrevious(p); if (head_ == ptr) head_ = n; if (tail_ == ptr) tail_ = p; current_ = NULL; count_--; ptr->setNext(NULL); ptr->setPrevious(NULL); return ptr; } template T* List::extractNext(T* ptr) { T* p = ptr->previous(); T* n = ptr->next(); if (p) p->setNext(n); if (n) n->setPrevious(p); if (head_ == ptr) head_ = n; if (tail_ == ptr) tail_ = p; current_ = NULL; count_--; ptr->setNext(NULL); ptr->setPrevious(NULL); return n; } template T* List::extractPrev(T* ptr) { T* p = ptr->previous(); T* n = ptr->next(); if (p) p->setNext(n); if (n) n->setPrevious(p); if (head_ == ptr) head_ = n; if (tail_ == ptr) tail_ = p; current_ = NULL; count_--; ptr->setNext(NULL); ptr->setPrevious(NULL); return p; } template T* List::operator[](int which) { head(); for (int i=0; i int List::index(T* t) { int cnt=0; head(); while (current_) { if (current_ == t) return cnt; cnt++; next(); } return -1; } template void List::transverse(void (*proc)(T*)) { if (head()) do proc(current_); while (next()); } template class List; template class List; template class List; template class List; template class List; template class List; template class List; template class List; template class List; template class List; template class List; template class List; saods9/tksao/list/list.h000644 000765 000000 00000002277 12705446252 015623 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __list_h__ #define __list_h__ #include template class List { private: T* head_; T* tail_; int count_; T* current_; public: List(); List(const List&); ~List(); List& operator=(const List&); void insertHead(T*); void insert(int, T*); void insertNext(T*,T*); void insertPrev(T*,T*); void append(T*); T* pop(); T* fifo(); T* extract(); T* extractNext(T*); T* extractPrev(T*); void deleteAll(); T* begin() {return head_;} T* end() {return tail_;} T* head() {return current_ = head_;} T* tail() {return current_ = tail_;} T* next() {return current_ ? current_ = current_->next() : NULL;} int isNext() {return current_->next() ? 1 : 0;} T* previous() {return current_ ? current_ = current_->previous() : NULL;} int isPrevious() {return current_->previous() ? 1 : 0;} T* current() {return current_;} int count() {return count_;} int isEmpty() {return (count_==0) ? 1 : 0;} T* operator[](int i); int index(T*); void transverse(void (*proc)(T*)); }; #endif saods9/tksao/frame/annulus.C000644 000765 000000 00000024307 12775230632 016405 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "annulus.h" #include "fitsimage.h" Annulus::Annulus(Base* p, const Vector& ctr, double r1, double r2, int rn) : BaseEllipse(p, ctr, 0) { numAnnuli_ = rn+1; annuli_ = new Vector[numAnnuli_]; for (int i=0; i& tg, const List& cb) : BaseEllipse(p, ctr, 0, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = rn+1; annuli_ = new Vector[numAnnuli_]; for (int i=0; i& tg, const List& cb) : BaseEllipse(p, ctr, 0, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = rn; annuli_ = new Vector[numAnnuli_]; for (int i=0; ioptions->cmdName); addCallBack(CallBack::EDITCB, analysisRadialCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITENDCB, analysisRadialCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisRadialCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisRadialCB_[1], parent->options->cmdName); } if (analysisRadial_ && !which) { deleteCallBack(CallBack::MOVECB, analysisRadialCB_[0]); deleteCallBack(CallBack::EDITCB, analysisRadialCB_[0]); deleteCallBack(CallBack::EDITENDCB, analysisRadialCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisRadialCB_[0]); deleteCallBack(CallBack::DELETECB, analysisRadialCB_[1]); } analysisRadial_ = which; break; case STATS: if (!analysisStats_ && which) { addCallBack(CallBack::MOVECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITENDCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisStatsCB_[1], parent->options->cmdName); } if (analysisStats_ && !which) { deleteCallBack(CallBack::MOVECB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITCB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITENDCB, analysisStatsCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::DELETECB, analysisStatsCB_[1]); } analysisStats_ = which; break; default: // na break; } } void Annulus::analysisRadial(char* xname, char* yname, char* ename, Coord::CoordSystem sys) { double* xx; double* yy; double* ee; BBox* bb = new BBox[numAnnuli_]; for (int ii=0; iimarkerAnalysisRadial(this, &xx, &yy, &ee, numAnnuli_-1, annuli_, bb, sys); analysisXYEResult(xname, yname, ename, xx, yy, ee, num); } void Annulus::analysisStats(Coord::CoordSystem sys, Coord::SkyFrame sky) { ostringstream str; BBox* bb = new BBox[numAnnuli_]; for (int ii=0; iimarkerAnalysisStats(this, str, numAnnuli_-1, bb, sys, sky); str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } // list void Annulus::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 0); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << setprecision(3) << fixed; for (int ii=0; iimapLenFromRef(annuli_[ii][0],sys,Coord::ARCSEC); str << ',' << rr << '"'; } str << ')'; str.unsetf(ios_base::floatfield); } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << setprecision(3) << fixed; for (int ii=0; iimapLenFromRef(annuli_[ii][0],sys,Coord::ARCSEC); str << ',' << rr << '"'; } str << ')'; str.unsetf(ios_base::floatfield); break; } } else listNonCel(ptr, str, sys); } listPost(str, conj, strip); } void Annulus::listNonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { Vector vv = ptr->mapFromRef(center,sys); str << type_ << '(' << setprecision(8) << vv; for (int ii=0; iimapLenFromRef(annuli_[ii][0],sys); str << ',' << rr; } str << ')'; } void Annulus::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowCenter(ptr,sys,sky,format); XMLRowRadiusX(ptr,sys,annuli_,numAnnuli_); XMLRowProps(ptr,sys); XMLRowEnd(str); } void Annulus::listCiao(ostream& str, Coord::CoordSystem sys, int strip) { FitsImage* ptr = parent->findFits(); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector vv = ptr->mapFromRef(center,Coord::PHYSICAL); for (int ii=0; iimapLenFromRef(annuli_[ii][0],Coord::PHYSICAL) << ',' << ptr->mapLenFromRef(annuli_[ii+1][0],Coord::PHYSICAL) << ')'; listCiaoPost(str, strip); } } break; default: if (ptr->hasWCSCel(sys)) { listRADEC(ptr,center,sys,Coord::FK5,Coord::SEXAGESIMAL); for (int ii=0; iimapLenFromRef(annuli_[ii][0],sys,Coord::ARCMIN); double r2 = ptr->mapLenFromRef(annuli_[ii+1][0],sys,Coord::ARCMIN); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(5) << fixed << r1 << '\'' << ',' << r2 << '\'' << ')'; str.unsetf(ios_base::floatfield); listCiaoPost(str, strip); } } } } void Annulus::listPros(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); switch (sys) { case Coord::IMAGE: case Coord::DETECTOR: case Coord::AMPLIFIER: sys = Coord::IMAGE; case Coord::PHYSICAL: { Vector vv = ptr->mapFromRef(center,sys); coord.listProsCoordSystem(str,sys,sky); str << "; " << type_ << ' ' << setprecision(8) << vv; for (int ii=0; iimapLenFromRef(annuli_[ii][0],Coord::IMAGE); str << ' ' << rr; } } break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); coord.listProsCoordSystem(str,sys,sky); str << "; " << type_ << ' ' << setprecision(10) << setunit('d') << vv << setprecision(3) << fixed; for (int ii=0; iimapLenFromRef(annuli_[ii][0],sys,Coord::ARCSEC); str << ' ' << rr << '"'; } str.unsetf(ios_base::floatfield); } break; case Coord::SEXAGESIMAL: listRADECPros(ptr,center,sys,sky,format); coord.listProsCoordSystem(str,sys,sky); str << "; " << type_ << ' ' << ra << ' ' << dec << setprecision(3) << fixed; for (int ii=0; iimapLenFromRef(annuli_[ii][0],sys,Coord::ARCSEC); str << ' ' << rr << '"'; } str.unsetf(ios_base::floatfield); break; } } } listProsPost(str, strip); } void Annulus::listSAOimage(ostream& str, int strip) { FitsImage* ptr = parent->findFits(); listSAOimagePre(str); Vector vv = ptr->mapFromRef(center,Coord::IMAGE); str << type_ << '(' << setprecision(8) << vv; for (int ii=0; iimapLenFromRef(annuli_[ii][0],Coord::IMAGE); str << ',' << rr; } str << ')'; listSAOimagePost(str, strip); } // special composite funtionallity void Annulus::setComposite(const Matrix& mx, double aa) { center *= mx; updateBBox(); } saods9/tksao/frame/annulus.h000644 000765 000000 00000003351 12752661141 016444 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __annulus_h__ #define __annulus_h__ #include "baseellipse.h" class Annulus : public BaseEllipse { protected: void listNonCel(FitsImage*, ostream&, Coord::CoordSystem); public: Annulus(Base* p, const Vector& ctr, double inner, double outer, int num); Annulus(Base* p, const Vector& ctr, double inner, double outer, int num, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Annulus(Base* p, const Vector& ctr, int rn, double* r, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Annulus(const Annulus&); Marker* dup() {return new Annulus(*this);} void edit(const Vector&, int); void editEnd(); int addAnnuli(const Vector&); void rotateBegin() {} void rotate(const Vector& v, int h) {} void rotateEnd() {} void analysis(AnalysisTask, int); void analysisRadial(char*, char*, char*, Coord::CoordSystem sys); void analysisStats(Coord::CoordSystem, Coord::SkyFrame sky); void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void listCiao(ostream&, Coord::CoordSystem, int); void listPros(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); void listSAOimage(ostream&, int); // special composite funtionality void setComposite(const Matrix&, double); }; #endif saods9/tksao/frame/base.C000644 000765 000000 00000145112 13011170041 015605 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "base.h" #include "context.h" #include "fitsimage.h" #include "marker.h" #include "ps.h" #include "circle.h" #include "ellipse.h" #include "box.h" #include "annulus.h" #include "point.h" #include "vect.h" // Debug int DebugAST= 0; int DebugBin= 0; int DebugBlock= 0; int DebugCompress= 0; int DebugCrop= 0; int DebugGZ= 0; int DebugMosaic= 0; int DebugPerf= 0; int DebugRGB= 0; int DebugWCS= 0; // Parser Stuff #undef yyFlexLexer #define yyFlexLexer frFlexLexer #include void* frlval; extern int frparse(Base*, frFlexLexer*); int frlex(void* vval, frFlexLexer* ll) { frlval = vval; return ll ? ll->yylex() : 0; } void frerror(Base* fr, frFlexLexer* ll, const char* m) { fr->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') { fr->error(": "); fr->error(cmd); } } // Base Member Functions Base::Base(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Widget(i, c, item) { nthreads_ = 8; byteorder_ = 0; bitsperpixel_ = 0; baseXImage = NULL; basePixmap = 0; needsUpdate = NOUPDATE; syncUpdate = 0; currentContext = NULL; keyContext = NULL; keyContextSet =0; orientation = Coord::NORMAL; zoom_ = Vector(1,1); rotation = 0; rotateRotation = 0; preservePan = 0; panPM = 0; panGCXOR = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); rotateGCXOR = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); pannerPixmap = 0; pannerXImage = NULL; pannerWidth = 0; pannerHeight = 0; pannerName[0] = '\0'; usePanner = 0; pannerGC = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); XSetLineAttributes(display, pannerGC, 1, LineSolid, CapButt, JoinMiter); magnifierPixmap = 0; magnifierXImage = NULL; magnifierWidth = 0; magnifierHeight = 0; magnifierZoom_ = 4; magnifierName[0] = '\0'; useMagnifier = 0; useMagnifierGraphics = 1; useMagnifierCursor = 1; magnifierColorName = dupstr("white"); wcsSystem_ = Coord::WCS; wcsSky_ = Coord::FK5; wcsSkyFormat_ = Coord::DEGREES; wcsAlign_ = 0; xySystem_ = Coord::IMAGE; xySky_ = Coord::FK5; wcsOrientation = Coord::NORMAL; wcsRotation = 0; irafAlign_ =1; irafOrientation_ = (Coord::Orientation)-1; maskColorName = dupstr("red"); maskAlpha = 1; maskMark = 1; invert = 0; useHighlite = 0; highliteGC = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); XSetLineAttributes(display, highliteGC, 2, LineSolid, CapButt, JoinMiter); XSetForeground(display, highliteGC, getColor("blue")); useCrosshair = 0; markerEpsilon = 3; showMarkers = 1; showMarkersText = 1; centroidAuto = 0; centroidIteration = 5; centroidRadius = 10; preserveMarkers = 0; markerGC = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); markerGCXOR = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); XSetForeground(display, markerGCXOR, getColor("white")); selectGCXOR = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); XSetForeground(display, selectGCXOR, getColor("white")); grid = NULL; gridGC = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); contourGC = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); XSetLineAttributes(display, contourGC, 1, LineSolid, CapButt, JoinMiter); bgColorName = dupstr("white"); bgColor = getXColor("white"); memset(bgTrueColor_,255,4); nanColorName = dupstr("white"); nanColor = getXColor("white"); memset(nanTrueColor_,255,4); dlist[0] = 8; dlist[1] = 3; colorbartag =NULL; markers = &userMarkers; undoMarkers = &undoUserMarkers; pasteMarkers = &pasteUserMarkers; undoMarkerType = NONE; editMarker = NULL; rotateMarker = NULL; compositeMarker = NULL; imageToData = Translate(-.5, -.5); dataToImage = Translate( .5, .5); inverseScale = NULL; } Base::~Base() { if (basePixmap) Tk_FreePixmap(display, basePixmap); if (baseXImage) XDestroyImage(baseXImage); if (pannerPixmap) Tk_FreePixmap(display, pannerPixmap); if (pannerXImage) XDestroyImage(pannerXImage); if (panPM) Tk_FreePixmap(display, panPM); if (panGCXOR) XFreeGC(display, panGCXOR); if (rotateGCXOR) XFreeGC(display, rotateGCXOR); if (pannerGC) XFreeGC(display, pannerGC); if (magnifierPixmap) Tk_FreePixmap(display, magnifierPixmap); if (magnifierXImage) XDestroyImage(magnifierXImage); if (highliteGC) XFreeGC(display, highliteGC); if (maskColorName) delete [] maskColorName; if (markerGC) XFreeGC(display, markerGC); if (markerGCXOR) XFreeGC(display, markerGCXOR); if (selectGCXOR) XFreeGC(display, selectGCXOR); if (grid) delete grid; if (gridGC) XFreeGC(display, gridGC); if (contourGC) XFreeGC(display, contourGC); if (bgColorName) delete [] bgColorName; if (nanColorName) delete [] nanColorName; if (colorbartag) delete [] colorbartag; if (magnifierColorName) delete [] magnifierColorName; if (inverseScale) delete inverseScale; } void Base::alignIRAF() { if (irafAlign_) { switch (irafOrientation_) { case Coord::NORMAL: irafMatrix_.identity(); break; case Coord::XX: irafMatrix_ = FlipX(); break; case Coord::YY: irafMatrix_ = FlipY(); break; case Coord::XY: irafMatrix_ = FlipXY(); break; default: irafMatrix_.identity(); } } else irafMatrix_.identity(); } void Base::alignWCS() { if (!wcsAlign_ || !context->cfits || !hasWCS(wcsSystem_)) { wcsOrientation = Coord::NORMAL; wcsOrientationMatrix.identity(); wcsRotation = 0; return; } calcAlignWCS(context->cfits, wcsSystem_, wcsSky_, &wcsOrientation, &wcsOrientationMatrix, &wcsRotation); } void Base::alignWCS(Coord::CoordSystem sys, Coord::SkyFrame sky) { if (!wcsAlign_ || !context->cfits || !hasWCS(sys)) { wcsOrientation = Coord::NORMAL; wcsOrientationMatrix.identity(); wcsRotation = 0; return; } calcAlignWCS(context->cfits, sys, sky, &wcsOrientation, &wcsOrientationMatrix, &wcsRotation); } void Base::alignWCS(FitsImage* ptr, Coord::CoordSystem sys) { if (!wcsAlign_ || !ptr || !context->cfits || !hasWCS(wcsSystem_)) { wcsOrientation = Coord::NORMAL; wcsOrientationMatrix.identity(); wcsRotation = 0; return; } calcAlignWCS(ptr, context->cfits, sys, wcsSystem_, wcsSky_, &wcsOrientation, &wcsOrientationMatrix, &wcsRotation, &zoom_); } void Base::calcAlignWCS(FitsImage* fits1, Coord::CoordSystem sys1, Coord::SkyFrame sky, Coord::Orientation* orientation, Matrix* oo, double* rotation) { // init *orientation = Coord::NORMAL; oo->identity(); *rotation = 0; if (!fits1 || !fits1->hasWCS(sys1)) return; // orientation *orientation = fits1->getWCSOrientation(sys1,sky); switch (*orientation) { case Coord::NORMAL: oo->identity(); break; case Coord::XX: *oo = FlipX(); break; default: // na break; } // rotation switch (*orientation) { case Coord::NORMAL: *rotation = fits1->getWCSRotation(sys1,sky); break; case Coord::XX: *rotation = -fits1->getWCSRotation(sys1,sky); break; default: // na break; } } void Base::calcAlignWCS(FitsImage* fits1, FitsImage* fits2, Coord::CoordSystem sys1, Coord::CoordSystem sys2, Coord::SkyFrame sky, Coord::Orientation* orientation, Matrix* oo, double* rotation, Vector* zoom) { // init *orientation = Coord::NORMAL; oo->identity(); *rotation = 0; if ((!fits1 || !fits2) || (fits1 == fits2) || !(fits1->hasWCS(sys1)) || !(fits2->hasWCS(sys2))) return; Vector org1 = fits1->center(); Vector orval1 = fits1->pix2wcs(org1,sys1,sky); // orientation *orientation = fits2->getWCSOrientation(sys2,sky); switch (*orientation) { case Coord::NORMAL: oo->identity(); break; case Coord::XX: *oo = FlipX(); break; default: // na break; } // rotation Vector orpix = fits2->wcs2pix(orval1, sys2, sky); Vector delta = fits2->getWCScdelt(sys2).abs(); Vector npix = fits2->wcs2pix(Vector(orval1[0],orval1[1]+delta[1]),sys2,sky); Vector north = (npix-orpix).normalize(); Vector epix = fits2->wcs2pix(Vector(orval1[0]+delta[0],orval1[1]),sys2,sky); Vector east = (epix-orpix).normalize(); // sanity check Vector diff = (north-east).abs(); if ((north[0]==0 && north[1]==0) || (east[0]==0 && east[1]==0) || (diff[0]<.01 && diff[1]<.01)) { *rotation = 0; *orientation = Coord::NORMAL; oo->identity(); return; } switch (*orientation) { case Coord::NORMAL: *rotation = -(north.angle()-M_PI_2); break; case Coord::XX: *rotation = (north.angle()-M_PI_2); break; default: // na break; } // zoom Vector cd1 = fits1->getWCScdelt(sys1); Vector cd2 = fits2->getWCScdelt(sys2); *zoom = Vector((*zoom)[0]/fabs(cd1[0]/cd2[0]), (*zoom)[1]/fabs(cd1[1]/cd2[1])); } Matrix Base::calcAlignWCS(FitsImage* fits1, FitsImage* fits2, Coord::CoordSystem sys1, Coord::CoordSystem sys2, Coord::SkyFrame sky) { if ((!fits1 || !fits2) || (fits1 == fits2) || !(fits1->hasWCS(sys1)) || !(fits2->hasWCS(sys2))) return Matrix(); Vector org1 = fits1->center(); Vector orval1 = fits1->pix2wcs(org1,sys1,sky); Vector org2 = fits2->center(); Vector orval2 = fits2->pix2wcs(org2,sys2,sky); // orientation Coord::Orientation orientation =Coord::NORMAL; Coord::Orientation o1 = fits1->getWCSOrientation(sys1,sky); Coord::Orientation o2 = fits2->getWCSOrientation(sys2,sky); { switch (o1) { case Coord::NORMAL: { switch (o2) { case Coord::NORMAL: orientation = Coord::NORMAL; break; case Coord::XX: orientation = Coord::XX; break; default: // na break; } } break; case Coord::XX: { switch (o2) { case Coord::NORMAL: orientation = Coord::XX; break; case Coord::XX: orientation = Coord::NORMAL; break; default: // na break; } } break; default: // na break; } } // zoom Vector zoom =Vector(1,1); { Vector cd1 = fits1->getWCScdelt(sys1); Vector cd2 = fits2->getWCScdelt(sys2); zoom = Vector(cd2[0]/cd1[0], cd2[1]/cd1[1]).abs(); } // rotation double rotation =0; { double rr1=0; { Vector orpix = fits1->wcs2pix(orval1, sys1, sky); Vector delta = fits1->getWCScdelt(sys1).abs(); Vector npix = fits1->wcs2pix(Vector(orval1[0],orval1[1]+delta[1]),sys1,sky); Vector north = (npix-orpix).normalize(); Vector epix = fits1->wcs2pix(Vector(orval1[0]+delta[0],orval1[1]),sys1,sky); Vector east = (epix-orpix).normalize(); // sanity check Vector diff = (north-east).abs(); if ((north[0]==0 && north[1]==0) || (east[0]==0 && east[1]==0) || (diff[0]<.01 && diff[1]<.01)) return Matrix(); switch (o1) { case Coord::NORMAL: rr1 = -(north.angle()-M_PI_2); break; case Coord::XX: rr1 = (north.angle()-M_PI_2); break; default: // na break; } } double rr2 =0; { Vector orpix = fits2->wcs2pix(orval1, sys2, sky); Vector delta = fits2->getWCScdelt(sys2).abs(); Vector npix = fits2->wcs2pix(Vector(orval1[0],orval1[1]+delta[1]),sys2,sky); Vector north = (npix-orpix).normalize(); Vector epix = fits2->wcs2pix(Vector(orval1[0]+delta[0],orval1[1]),sys2,sky); Vector east = (epix-orpix).normalize(); // sanity check Vector diff = (north-east).abs(); if ((north[0]==0 && north[1]==0) || (east[0]==0 && east[1]==0) || (diff[0]<.01 && diff[1]<.01)) return Matrix(); switch (o2) { case Coord::NORMAL: rr2 = -(north.angle()-M_PI_2); break; case Coord::XX: rr2 = north.angle()-M_PI_2; break; default: // na break; } } switch (o1) { case Coord::NORMAL: rotation = rr1-rr2; break; case Coord::XX: rotation = -(rr1-rr2); break; default: // na break; } } // origin Vector origin; { Vector orpix1 = fits1->wcs2pix(orval2,sys1,sky) * imageToData; Vector orpix2 = fits2->wcs2pix(orval2,sys2,sky) * imageToData; origin = orpix1 - orpix2; } // matrix { Matrix flip; switch (orientation) { case Coord::NORMAL: break; case Coord::XX: flip = FlipX(); break; default: // na break; } Vector orpix2 = fits2->wcs2pix(orval2,sys2,sky) * imageToData; return Translate(-orpix2) * flip * Scale(zoom) * Rotate(rotation) * Translate(orpix2) * Translate(origin); } } double Base::calcZoom(Vector src, Vector dest) { // we need to calculate the width and height of the rotated image // so we can derived a zoom factor to shrink it to fit the requested size Vector cc = src/2.; Vector ll; Vector lr(src[0],0); Vector ur(src); Vector ul(0,src[1]); Matrix mm = Translate(-cc) * Rotate(wcsRotation) * Rotate(rotation); BBox bb(ll*mm); bb.bound(lr*mm); bb.bound(ur*mm); bb.bound(ul*mm); Vector bs = bb.size(); double r0 = dest[0]/bs[0]; double r1 = dest[1]/bs[1]; return r0>r1 ? r1:r0; } void Base::centerImage() { if (!keyContext->fits) { cursor = Vector(); return; } // This is here because we need mapToRef to be up-to-date updateMatrices(); updatePannerMatrices(); // imageCenter is in IMAGE coords Vector aa = imageCenter(keyContext->secMode()); // always center to center of pixel, even for even sized image Vector bb = (aa*Translate(.5,.5)).floor(); // cursor is in REF coords cursor = keyContext->fits->mapToRef(bb,Coord::IMAGE,Coord::FK5); } void Base::coordToTclArray(FitsImage* ptr, const Vector3d& vv, Coord::CoordSystem out, const char* var, const char* base) { Vector rr = ptr->mapFromRef(vv, out); doubleToTclArray(rr[0], var, base, "x"); doubleToTclArray(rr[1], var, base, "y"); } void Base::coord3ToTclArray(FitsImage* ptr, const Vector3d& vv, Coord::CoordSystem out, const char* var, const char* base) { double ss = ptr->mapFromRef3axis(((Vector3d&)vv)[2],out,2); doubleToTclArray(ss, var, base, "z"); } int Base::doRender() { return context->cfits ? 1 : 0; } void Base::doubleToTclArray(double d, const char* var, const char* base, const char* mod) { ostringstream str; str << base << "," << mod << ends; ostringstream vstr; vstr << fixed << setw(9) << setprecision(3) << d << ends; Tcl_SetVar2(interp, (char*)var, str.str().c_str(), vstr.str().c_str(), 0); } FitsImage* Base::findFits() { return keyContext->fits; } FitsImage* Base::findFits(Coord::CoordSystem sys, const Vector& vv) { switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: return findFits(vv); default: if (keyContext->fits && keyContext->fits->hasWCSCel(sys)) return keyContext->fits; else return findFits(vv); } } FitsImage* Base::findFits(const Vector& vv) { FitsImage* ptr = keyContext->fits; while (ptr) { Vector img = vv * ptr->refToData; FitsBound* params = ptr->getDataParams(currentContext->secMode()); if (img[0]>=params->xmin && img[0]xmax && img[1]>=params->ymin && img[1]ymax) return ptr; ptr = ptr->nextMosaic(); } return keyContext->fits; } FitsImage* Base::findFits(int which) { FitsImage* ptr = keyContext->fits; for (int ii=1; iinextMosaic(); return (ptr ? ptr : keyContext->fits); } int Base::findFits(FitsImage* p) { FitsImage* ptr = keyContext->fits; int rr = 0; while (ptr) { rr++; if (ptr == p) return rr; ptr = ptr->nextMosaic(); } return rr; } FitsImage* Base::findAllFits(int which) { // modified for medatacube FitsImage* rr = NULL; FitsImage* ptr = currentContext->fits; while (ptr && which) { FitsImage* sptr = ptr; while (sptr && which) { which--; if (!which) { rr = sptr; break; } sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } return rr; } int Base::fitsCount() { return currentContext->fitsCount(); } void Base::getInfoClearName(char* var) { Tcl_SetVar2(interp,var,"filename","",0); Tcl_SetVar2(interp,var,"object","",0); Tcl_SetVar2(interp,var,"min","",0); Tcl_SetVar2(interp,var,"max","",0); Tcl_SetVar2(interp,var,"low","",0); Tcl_SetVar2(interp,var,"high","",0); } void Base::getInfoClearValue(char* var) { Tcl_SetVar2(interp,var,"value","",0); Tcl_SetVar2(interp,var,"value,red","",0); Tcl_SetVar2(interp,var,"value,green","",0); Tcl_SetVar2(interp,var,"value,blue","",0); Tcl_SetVar2(interp,var,"image,x","",0); Tcl_SetVar2(interp,var,"image,y","",0); Tcl_SetVar2(interp,var,"image,z","",0); Tcl_SetVar2(interp,var,"physical,x","",0); Tcl_SetVar2(interp,var,"physical,y","",0); Tcl_SetVar2(interp,var,"physical,z","",0); Tcl_SetVar2(interp,var,"amplifier,x","",0); Tcl_SetVar2(interp,var,"amplifier,y","",0); Tcl_SetVar2(interp,var,"amplifier,z","",0); Tcl_SetVar2(interp,var,"detector,x","",0); Tcl_SetVar2(interp,var,"detector,y","",0); Tcl_SetVar2(interp,var,"detector,z","",0); } void Base::getInfoClearWCS(char* var) { for (int ii=0; iirefToData; for (int ii=0; iipix2wcs(uu, www, wcsSky_, wcsSkyFormat_, buff); int argc; const char** argv; Tcl_SplitList(interp, buff, &argc, &argv); if (argc > 0 && argv && argv[0]) Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",x"),argv[0],0); else Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",x"),"",0); if (argc > 1 && argv && argv[1]) Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",y"),argv[1],0); else Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",y"),"",0); // use first slice coord3ToTclArray(ptr,rr,www,var,"wcs"); char* wcsname = (char*)sptr->getWCSName(www); if (wcsname) Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",sys"),wcsname,0); else if (argc > 2 && argv && argv[2]) Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",sys"),argv[2],0); else Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",sys"),"",0); Tcl_Free((char*)argv); } else { Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",x"),"",0); Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",y"),"",0); Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",z"),"",0); Tcl_SetVar2(interp,var,varcat(buf,(char*)"wcs",ww,(char*)",sys"),"",0); } } } int Base::hasATMV() { return currentContext->cfits && currentContext->cfits->hasATMV(); } int Base::hasContour() { return currentContext->hasContour(); } int Base::hasContourAux() { return currentContext->hasContourAux(); } int Base::hasDTMV() { return currentContext->cfits && currentContext->cfits->hasDTMV(); } int Base::hasLTMV() { return currentContext->cfits && currentContext->cfits->hasLTMV(); } int Base::hasWCS(Coord::CoordSystem sys) { return currentContext->cfits && currentContext->cfits->hasWCS(sys); } int Base::hasWCSEqu(Coord::CoordSystem sys) { return currentContext->cfits && currentContext->cfits->hasWCSEqu(sys); } int Base::hasWCSCel(Coord::CoordSystem sys) { return currentContext->cfits && currentContext->cfits->hasWCSCel(sys); } int Base::hasWCSx(Coord::CoordSystem sys) { return currentContext->cfits && currentContext->cfits->hasWCSx(sys,2); } Vector Base::imageCenter(FrScale::SecMode mode) { return imageBBox(mode).center(); } Vector Base::imageSize(FrScale::SecMode mode) { return imageBBox(mode).size(); } BBox Base::imageBBox(FrScale::SecMode mode) { // returns imageBBox in IMAGE coords // params are in DATA coords and extends edge to edge BBox rr; int first=1; FitsImage* ptr = context->fits; while (ptr) { FitsBound* params = ptr->getDataParams(mode); Matrix mm = ptr->wcsToRef() * dataToImage; Vector aa = Vector(params->xmin,params->ymin) * mm; if (first) { rr = BBox(aa,aa); first = 0; } else rr.bound(aa); rr.bound(Vector(params->xmax,params->ymin) * mm); rr.bound(Vector(params->xmax,params->ymax) * mm); rr.bound(Vector(params->xmin,params->ymax) * mm); ptr = ptr->nextMosaic(); } return rr; } int Base::isIIS() { return 0; } int Base::isCube() { return currentContext->isCube(); } int Base::isBinTable() { return (currentContext->fits && currentContext->fits->isBinTable()) ? 1 : 0; } int Base::isMosaic() { return currentContext->isMosaic(); } FitsImage* Base::isInFits(const Vector& vv, Coord::InternalSystem ref, Vector* rv) { Vector ss = mapToRef(vv,ref); FitsImage* ptr = currentContext->fits; while (ptr) { Vector rr = ss * ptr->refToData; FitsBound* params = ptr->getDataParams(currentContext->secMode()); if (rr[0]>=params->xmin && rr[0]xmax && rr[1]>=params->ymin && rr[1]ymax) { if (rv) *rv = rr; return ptr; } ptr = ptr->nextMosaic(); } return NULL; } FitsImage* Base::isInCFits(const Vector& vv, Coord::InternalSystem ref, Vector* rv) { Vector ss = mapToRef(vv,ref); FitsImage* ptr = currentContext->cfits; while (ptr) { Vector rr = ss * ptr->refToData; FitsBound* params = ptr->getDataParams(currentContext->secMode()); if (rr[0]>=params->xmin && rr[0]xmax && rr[1]>=params->ymin && rr[1]ymax) { if (rv) *rv = rr; return ptr; } ptr = ptr->nextMosaic(); } return NULL; } void Base::invalidPixmap() { Widget::invalidPixmap(); if (basePixmap) Tk_FreePixmap(display, basePixmap); basePixmap = 0; if (baseXImage) XDestroyImage(baseXImage); baseXImage = NULL; needsUpdate = MATRIX; } Coord::Orientation Base::IRAFOrientation(Coord::Orientation oo) { if (irafOrientation_ == (Coord::Orientation)-1) { irafOrientation_ = oo; alignIRAF(); } return irafOrientation_; } int Base::parse(istringstream& istr) { result = TCL_OK; frFlexLexer* ll = new frFlexLexer(&istr); frparse(this, ll); delete ll; return result; } int Base::postscriptProc(int prepass) { if (!visible) return TCL_OK; if (prepass) return TCL_OK; ps(); // Markers & Contours & Grids clip path ostringstream str; str << psOrigin() << ' ' << options->width << ' ' << options->height << " rectclip" << endl << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); switch (psLevel) { case 1: switch (psColorSpace) { case BW: case GRAY: if (grid) grid->ps(GRAY); currentContext->contourPS(GRAY); if (showMarkers) { psMarkers(&catalogMarkers, GRAY); psMarkers(&userMarkers, GRAY); } // psMarkers(&analysisMarkers, GRAY); psCrosshair(GRAY); psGraphics(GRAY); break; case RGB: case CMYK: if (grid) grid->ps(RGB); currentContext->contourPS(RGB); if (showMarkers) { psMarkers(&catalogMarkers, RGB); psMarkers(&userMarkers, RGB); } // psMarkers(&analysisMarkers, RGB); psCrosshair(RGB); psGraphics(RGB); break; } break; case 2: case 3: if (grid) grid->ps(psColorSpace); currentContext->contourPS(psColorSpace); if (showMarkers) { psMarkers(&catalogMarkers, psColorSpace); psMarkers(&userMarkers, psColorSpace); } // psMarkers(&analysisMarkers, psColorSpace); psCrosshair(psColorSpace); psGraphics(psColorSpace); break; } return TCL_OK; } void Base::printCoordSystem(Coord::CoordSystem sys) { Tcl_AppendResult(interp, coord.coordSystemStr(sys), NULL); } void Base::printDouble(double d) { ostringstream str; str << d << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::printInteger(int i) { ostringstream str; str << i << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::printSkyFrame(Coord::SkyFrame sky) { Tcl_AppendResult(interp, coord.skyFrameStr(sky), NULL); } void Base::printSkyFormat(Coord::SkyFormat format) { Tcl_AppendResult(interp, coord.skyFormatStr(format), NULL); } void Base::printSkyDist(Coord::SkyDist dist) { Tcl_AppendResult(interp, coord.skyDistStr(dist), NULL); } void Base::printFromRef(FitsImage* ptr, const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { ostringstream str; ptr->listFromRef(str, vv, sys, sky, format); str << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::printLenFromRef(FitsImage* ptr, double dd, Coord::CoordSystem sys, Coord::SkyDist dist) { ostringstream str; ptr->listLenFromRef(str, dd, sys, dist); str << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::printLenFromRef(FitsImage* ptr, const Vector& vv, Coord::CoordSystem sys, Coord::SkyDist dist) { ostringstream str; ptr->listLenFromRef(str, vv, sys, dist); str << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::printDistFromRef(FitsImage* ptr, const Vector& vv1, const Vector& vv2, Coord::CoordSystem sys, Coord::SkyDist dist) { ostringstream str; ptr->listDistFromRef(str, vv1, vv2, sys, dist); str << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::ps() { if (!currentContext->fits) return; Tcl_AppendResult(interp, "gsave\n", NULL); double ss = psResolution / 96.; int ww = options->width*ss; int hh = options->height*ss; ostringstream str; str << psOrigin() << " translate " << 1/ss << ' ' << 1/ss << " scale" << endl; switch (psLevel) { case 1: { psHead1(str, ww, hh); NoCompressAsciiHex filter(psLevel); psImage(str, filter, ww, hh, ss); } break; case 2: { psHead2(str, ww, hh, "RunLength", "ASCII85"); RLEAscii85 filter(psLevel); psImage(str, filter, ww, hh, ss); } break; case 3: { psHead2(str, ww, hh, "Flate", "ASCII85"); GZIPAscii85 filter(psLevel); psImage(str, filter, ww, hh, ss); } break; } str << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); Tcl_AppendResult(interp, "grestore\n", NULL); } void Base::psCrosshair(PSColorSpace mode) { if (!useCrosshair) return; Vector rr = mapFromRef(crosshair, Coord::WIDGET); Vector aa = Vector(rr[0],1) * widgetToCanvas; Vector bb = Vector(rr[0],options->height) * widgetToCanvas; Vector cc = Vector(1,rr[1]) * widgetToCanvas; Vector dd = Vector(options->width,rr[1]) * widgetToCanvas; { ostringstream str; switch ((PSColorSpace)mode) { case BW: case GRAY: psColorGray(getXColor("green"), str); str << " setgray"; break; case RGB: psColorRGB(getXColor("green"), str); str << " setrgbcolor"; break; case CMYK: psColorCMYK(getXColor("green"), str); str << " setcmykcolor"; break; } str << endl << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } { ostringstream str; str << 1 << " setlinewidth" << endl << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } { ostringstream str; str << "newpath " << aa.TkCanvasPs(canvas) << ' ' << "moveto " << bb.TkCanvasPs(canvas) << ' ' << "lineto stroke" << endl << "newpath " << cc.TkCanvasPs(canvas) << ' ' << "moveto " << dd.TkCanvasPs(canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } } void Base::psImage(ostream& str, Filter& filter, int width, int height, float scale) { pushPSMatrices(scale, width, height); unsigned char* img = fillImage(width, height, Coord::PS); if (!img) return; unsigned char* ptr = img; for (long jj=0; jjfits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updateMatrices(rgbToRef, refToUser, userToWidget, widgetToCanvas, canvasToWindow); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } void Base::pushMagnifierMatrices() { FitsImage* ptr = context->fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updateMagnifierMatrices(refToMagnifier); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } void Base::pushPannerMatrices() { FitsImage* ptr = context->fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updatePannerMatrices(refToPanner); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } void Base::pushPSMatrices(float scale, int width, int height) { Matrix mx = psMatrix(scale, width, height); FitsImage* ptr = context->fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updatePS(mx); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } void Base::reset() { if (!preservePan) centerImage(); crosshair = cursor; invert = 0; orientation = Coord::NORMAL; orientationMatrix.identity(); zoom_ = Vector(1,1); rotation = 0; wcsAlign_ = 0; wcsOrientation = Coord::NORMAL; wcsOrientationMatrix.identity(); wcsRotation = 0; unselectMarkers(&userMarkers); unselectMarkers(&catalogMarkers); // unselectMarkers(&analysisMarkers); update(MATRIX); } FrScale::SecMode Base::secMode() { return currentContext->secMode(); } void Base::resetSecMode() { currentContext->resetSecMode(); } void Base::setSecMode(FrScale::SecMode mode) { currentContext->setSecMode(mode); } void Base::setSlice(int id, int ss) { // real work done in derived classes updateMarkers(&userMarkers); updateMarkers(&catalogMarkers); // updateMarkers(&analysisMarkers); // execute any update callbacks updateCBMarkers(&userMarkers); updateCBMarkers(&catalogMarkers); // updateCBMarkers(&analysisMarkers); } void Base::unloadAllFits() { unloadFits(); } void Base::unloadFits() { if (DebugPerf) cerr << "Base::unloadFits()" << endl; if (!preserveMarkers) { // delete markers userMarkers.deleteAll(); undoUserMarkers.deleteAll(); pasteUserMarkers.deleteAll(); } catalogMarkers.deleteAll(); undoCatalogMarkers.deleteAll(); pasteCatalogMarkers.deleteAll(); // analysisMarkers.deleteAll(); // undoAnalysisMarkers.deleteAll(); // pasteAnalysisMarkers.deleteAll(); if (grid) delete grid; grid = NULL; irafOrientation_ = (Coord::Orientation)-1; irafMatrix_.identity(); updateColorScale(); } void Base::update(UpdateType flag) { if (DebugPerf) cerr << "Base::update(" << flag << ')' << endl; // Be careful, someone may have already set the flag at a lower level // therefor, only change the flag if we need more to be done if (flag < needsUpdate) needsUpdate = flag; redraw(); } void Base::update(UpdateType flag, BBox bb) { if (DebugPerf) cerr << "Base::update(" << flag << ' ' << bb << ')' << endl; // bb is in canvas coords if (flag < needsUpdate) needsUpdate = flag; redraw(bb); } void Base::updateBase() { if (!widgetGC) widgetGC = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); if (DebugPerf) cerr << "Base::updateBase()..."; int& width = options->width; int& height = options->height; if (!basePixmap) { if (!(basePixmap = Tk_GetPixmap(display, Tk_WindowId(tkwin), width, height, depth))){ internalError("Unable to Create Pixmap"); return; } // Geometry has changed, redefine our marker GCs including clip regions updateGCs(); } if (!baseXImage) { if (!(baseXImage = XGetImage(display, basePixmap, 0, 0, width, height, AllPlanes, ZPixmap))) { internalError("Unable to Create XImage"); return; } // we have to wait until now, since the encodings depend on baseXImage encodeTrueColor(baseXImage->byte_order, baseXImage->bits_per_pixel); encodeTrueColor(bgColor, bgTrueColor_); encodeTrueColor(nanColor, nanTrueColor_); // we have a race condition. Some Truecolor ColorScales need to know the // bytes per pixel, RGB masks, and byte order, from XImage struct. // yet, we receive colormap commands well before we render to the // screen and have a valid XImage. // So, we put off creating a colorscale until we are ready to render. if (!validColorScale()) updateColorScale(); } if (doRender()) ximageToPixmap(basePixmap, baseXImage, Coord::WIDGET); else { XSetForeground(display, widgetGC, getColor(bgColorName)); XFillRectangle(display, basePixmap, widgetGC, 0,0,options->width,options->height); } if (DebugPerf) cerr << "end" << endl; } void Base::updateBin(const Matrix& mx) { if (keyContext->fits && (keyContext->fits == currentContext->fits)) { crosshair *= mx; currentContext->updateContours(mx); updateMarkerCoords(&userMarkers, mx); updateMarkerCoords(&catalogMarkers, mx); // updateMarkerCoords(&analysisMarkers, mx); } alignWCS(); updateColorScale(); updateNow(MATRIX); // because we have changed zoom // update markers call backs // wait til matrices have been updated so that any dialogs will print // the correct coords updateMarkerCBs(&userMarkers); updateMarkerCBs(&catalogMarkers); // updateMarkerCBs(&analysisMarkers); } void Base::updateBlock(const Vector& vv) { Scale mx(vv); if (keyContext->fits && (keyContext->fits == currentContext->fits)) { cursor *= mx; crosshair *= mx; currentContext->updateContours(mx); updateMarkerCoords(&userMarkers, mx); updateMarkerCoords(&catalogMarkers, mx); // updateMarkerCoords(&analysisMarkers, mx); } alignWCS(); updateColorScale(); updateNow(MATRIX); // update markers call backs // wait til matrices have been updated so that any dialogs will print // the correct coords updateMarkerCBs(&userMarkers); updateMarkerCBs(&catalogMarkers); // updateMarkerCBs(&analysisMarkers); } void Base::updateGCs() { // widget clip region BBox bbWidget = BBox(0, 0, options->width, options->height); Vector sizeWidget = bbWidget.size(); rectWidget[0].x = (int)bbWidget.ll[0]; rectWidget[0].y = (int)bbWidget.ll[1]; rectWidget[0].width = (int)sizeWidget[0]; rectWidget[0].height = (int)sizeWidget[1]; // window clip region BBox bbWindow = bbWidget * widgetToWindow; Vector sizeWindow = bbWindow.size(); rectWindow[0].x = (int)bbWindow.ll[0]; rectWindow[0].y = (int)bbWindow.ll[1]; rectWindow[0].width = (int)sizeWindow[0]; rectWindow[0].height = (int)sizeWindow[1]; // highliteGC XSetClipRectangles(display, highliteGC, 0, 0, rectWidget, 1, Unsorted); // panGCXOR XSetClipRectangles(display, panGCXOR, 0, 0, rectWindow, 1, Unsorted); // rotateGCXOR XSetClipRectangles(display, rotateGCXOR, 0, 0, rectWindow, 1, Unsorted); // markerGC XSetClipRectangles(display, markerGC, 0, 0, rectWidget, 1, Unsorted); XSetClipRectangles(display, markerGCXOR, 0, 0, rectWindow, 1, Unsorted); // selectGC x11Dash(selectGCXOR,1); XSetClipRectangles(display, selectGCXOR, 0, 0, rectWindow, 1, Unsorted); // gridGC XSetClipRectangles(display, gridGC, 0, 0, rectWidget, 1, Unsorted); // contourGC XSetClipRectangles(display, contourGC, 0, 0, rectWidget, 1, Unsorted); } void Base::updateMagnifier() { updateMagnifier(magnifierCursor); } void Base::updateMagnifier(const Vector& vv) { // vv is in CANVAS coords // save it, we may need it later magnifierCursor = vv; if (!(magnifierXImage && magnifierPixmap)) return; // just in case if (!widgetGC) widgetGC = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); if (useMagnifier) { updateMagnifierMatrices(); if (doRender()) { ximageToPixmapMagnifier(); if (useMagnifierGraphics) { // render markers // markers bounding box is in canvas coords // map the magnifier to a bounding box in canvas coords Matrix mm = magnifierToRef * refToCanvas; Vector ll = Vector(0,0) * mm; Vector ur = Vector(magnifierWidth,magnifierHeight) * mm; BBox bb = BBox(vv,vv); bb.bound(ll); bb.bound(ur); if (showMarkers) { x11MagnifierMarkers(&userMarkers, bb); x11MagnifierMarkers(&catalogMarkers, bb); } // x11MagnifierMarkers(&analysisMarkers, bb); // render crosshair if (useCrosshair) x11Crosshair(magnifierPixmap, Coord::MAGNIFIER, magnifierWidth, magnifierHeight); // render contours currentContext->contourX11(magnifierPixmap, Coord::MAGNIFIER, magnifierWidth, magnifierHeight); } // render cursor if (useMagnifierCursor) x11MagnifierCursor(vv); } else { XSetForeground(display, widgetGC, getColor(bgColorName)); XFillRectangle(display, magnifierPixmap, widgetGC, 0, 0, magnifierXImage->width, magnifierXImage->height); } // notify the magnifier widget ostringstream str; str << magnifierName << " update " << (void*)magnifierPixmap << ends; Tcl_Eval(interp, str.str().c_str()); } } void Base::updateMatrices() { // refToUser // flip y axis for X Windows refToUser = Translate(-cursor) * FlipY() * irafMatrix_; userToRef = refToUser.invert(); // userToWidget userToWidget = wcsOrientationMatrix * // flip x/y axis about center orientationMatrix * // flip x/y axis about cursor position Rotate(wcsRotation) * // rotate about center position Rotate(rotation) * // rotate about cursor position Scale(zoom_) * // scale about cursor position // must be int to align with screen pixels Translate((int)(options->width/2.), (int)(options->height/2.)); widgetToUser = userToWidget.invert(); // widgetToCanvas widgetToCanvas = Translate(originX, originY); canvasToWidget = widgetToCanvas.invert(); // canvasToWindow short xx, yy; Tk_CanvasWindowCoords(canvas, 0, 0, &xx, &yy); canvasToWindow = Translate(xx, yy); windowToCanvas = canvasToWindow.invert(); // These are derived Transformation Matrices refToWidget = refToUser * userToWidget; widgetToRef = refToWidget.invert(); refToCanvas = refToWidget * widgetToCanvas; canvasToRef = refToCanvas.invert(); refToWindow = refToCanvas * canvasToWindow; windowToRef = refToWindow.invert(); userToCanvas = userToWidget * widgetToCanvas; canvasToUser = userToCanvas.invert(); widgetToWindow = widgetToCanvas * canvasToWindow; windowToWidget = widgetToWindow.invert(); // Markers updateMarkers(&userMarkers); updateMarkers(&catalogMarkers); // updateMarkers(&analysisMarkers); pushMatrices(); } void Base::updateMagnifierMatrices() { // magnifierCursor is in CANVAS Vector ww = magnifierCursor*canvasToRef; // refToUser Matrix refToUser; refToUser = Translate(-ww) * FlipY() * irafMatrix_; // userToMagnifier userToMagnifier = wcsOrientationMatrix * // flip x/y axis about center orientationMatrix * // flip x/y axis about cursor position Rotate(wcsRotation) * // rotate about center position Rotate(rotation) * // rotate about cursor position Scale(zoom_) * // scale about cursor position Scale(magnifierZoom_) * // scale // must be int to align with screen pixels Translate((int)(magnifierWidth/2.), (int)(magnifierHeight/2.)); magnifierToUser = userToMagnifier.invert(); refToMagnifier = refToUser * userToMagnifier; magnifierToRef = refToMagnifier.invert(); magnifierToWidget = magnifierToUser * userToWidget; widgetToMagnifier = magnifierToWidget.invert(); pushMagnifierMatrices(); } void Base::updatePannerMatrices() { Vector center = imageCenter(FrScale::IMGSEC) * imageToData; // refToUser Matrix refToUser; refToUser = Translate(-center) * FlipY() * irafMatrix_; userToRef = refToUser.invert(); // userToPanner userToPanner = wcsOrientationMatrix * // flip x/y axis about center orientationMatrix * // flip x/y axis about cursor position Rotate(wcsRotation) * // rotate about center position Rotate(rotation) * // rotate about cursor position Scale(calcZoomPanner()) * // must be int to align with screen pixels Translate((int)(pannerWidth/2.), (int)(pannerHeight/2.)); pannerToUser = userToPanner.invert(); refToPanner = refToUser * userToPanner; pannerToRef = refToPanner.invert(); pannerToWidget = pannerToRef * refToWidget; widgetToPanner = pannerToWidget.invert(); pushPannerMatrices(); } void Base::updateNow(UpdateType flag) { if (DebugPerf) cerr << "Base::updateNow(" << flag << ')' << endl; if (flag < needsUpdate) needsUpdate = flag; redrawNow(); } void Base::updateNow(UpdateType flag, BBox bb) { if (DebugPerf) cerr << "Base::updateNow(" << flag << ',' << bb << ')' << endl; // bb is in canvas coords if (flag < needsUpdate) needsUpdate = flag; redrawNow(bb); } void Base::updatePanner() { if (usePanner) { if (doRender()) ximageToPixmap(pannerPixmap, pannerXImage, Coord::PANNER); else { XSetForeground(display, pannerGC, getColor(bgColorName)); XFillRectangle(display, pannerPixmap, pannerGC, 0, 0, pannerWidth, pannerHeight); } } } int Base::updatePixmap(const BBox& bb) { // bbox is in canvas coords // Note: lack of breaks-- on purpose. // If Matrices are update, both Base and Pixmap // also need to be updated. Same for Base-- ie, pixmap is also updated. switch (needsUpdate) { case NOUPDATE: break; case MATRIX: updateMatrices(); updatePannerMatrices(); case BASE: updatePanner(); case BASEONLY: updateBase(); case PIXMAP: updatePM(bb); break; } needsUpdate = NOUPDATE; return TCL_OK; } void Base::updatePM(const BBox& bbox) { // bbox is in Canvas Coords if (DebugPerf) cerr << "Base::updatePM()..."; int& width = options->width; int& height = options->height; if (!pixmap) { if (!(pixmap = Tk_GetPixmap(display, Tk_WindowId(tkwin), width, height, depth))) { internalError("Unable to Create Pixmap"); return; } } if (!bbox.isEmpty()) { BBox bb = bbox * canvasToWidget; int x0 = (int)bb.ll[0] > 0 ? (int)bb.ll[0] : 0; int y0 = (int)bb.ll[1] > 0 ? (int)bb.ll[1] : 0; int x1 = (int)bb.ur[0] < width ? (int)bb.ur[0] : width; int y1 = (int)bb.ur[1] < height ? (int)bb.ur[1] : height; int sx = x1-x0; int sy = y1-y0; if (DebugPerf) cerr << ' ' << x0 << ' ' << y0 << ' ' << x1 << ' ' << y1 << ' '; XCopyArea(display, basePixmap, pixmap, widgetGC, x0, y0, sx, sy, x0, y0); } // grid if (grid) grid->x11(); // contours currentContext->contourX11(pixmap, Coord::WIDGET, options->width, options->height); // markers if (showMarkers) { x11Markers(&catalogMarkers, bbox); x11Markers(&userMarkers, bbox); } // x11Markers(&analysisMarkers, bbox); // crosshair x11Crosshair(pixmap, Coord::WIDGET, options->width, options->height); // highlite bbox x11Graphics(); if (DebugPerf) cerr << "end" << endl; } char* Base::varcat(char* buf, char* base, char id, char* mod) { int ll = strlen(base); strcpy(buf,base); buf[ll++] = id; buf[ll++] = '\0'; strcat(buf,mod); return buf; } void Base::x11Crosshair(Pixmap pm, Coord::InternalSystem sys, int width, int height) { if (useCrosshair) { Vector rr = mapFromRef(crosshair,sys); XSetForeground(display, widgetGC, getColor("green")); if (rr[0]>=0 && rr[0]=0 && rr[1]width-2, options->height-2); } void Base::ximageToPixmap(Pixmap pixmap, XImage* ximage, Coord::InternalSystem sys) { // we need a colorScale before we can render if (!validColorScale()) return; unsigned char* img = fillImage(ximage->width, ximage->height, sys); if (img) { encodeTrueColor(img, ximage); delete [] img; } TkPutImage(NULL, 0, display, pixmap, widgetGC, ximage, 0, 0, 0, 0, ximage->width, ximage->height); } void Base::ximageToPixmapMagnifier() { ximageToPixmap(magnifierPixmap, magnifierXImage, Coord::MAGNIFIER); } #ifdef MAC_OSX_TK void Base::macosx() { // clip rect XRectangle* rr = rectWidget; Vector v1 = Vector(rr->x, rr->y) * widgetToCanvas; Vector v2 = Vector(rr->x+rr->width, rr->y+rr->height) * widgetToCanvas; macosxClip(v1,v2-v1); if (currentContext->fits) { // scale double scale = 150 / 72.; int width = options->width*scale; int height = options->height*scale; // image macosxImage(scale, width, height, v1, v2-v1); } } void Base::macosxCrosshair() { if (!useCrosshair) return; Vector rr = mapFromRef(crosshair,Coord::WIDGET); Vector aa = Vector(rr[0],1) * widgetToCanvas; Vector bb = Vector(rr[0],options->height) * widgetToCanvas; Vector cc = Vector(1,rr[1]) * widgetToCanvas; Vector dd = Vector(options->width,rr[1]) * widgetToCanvas; macosxColor(getXColor("green")); macosxWidth(1); macosxDrawLine(aa,bb); macosxDrawLine(cc,dd); } void Base::macosxImage(float scale, int width, int height, const Vector& v, const Vector& s) { // we need a colorScale before we can render if (!validColorScale()) return; pushPSMatrices(scale, width, height); // source unsigned char* src = fillImage(width, height, Coord::PS); if (!src) return; // destination unsigned char* dst = new unsigned char[width*height*4]; if (!dst) return; unsigned char* sptr = src; unsigned char* dptr = dst; for (int ii=0; iimacosx(); // contours currentContext->contourMacOSX(); // markers if (showMarkers) { macosxMarkers(&catalogMarkers); macosxMarkers(&userMarkers); } // macosxMarkers(&analysisMarkers); macosxCrosshair(); macosxGraphics(); // cleanup macosxEnd(); } #endif #ifdef __WIN32 void Base::win32() { // clip rect XRectangle* rr = rectWidget; Vector v1 = Vector(rr->x, rr->y) * widgetToCanvas; Vector v2 = Vector(rr->x+rr->width, rr->y+rr->height) * widgetToCanvas; win32Clip(v1,v2-v1); if (currentContext->fits) { // scale double scale = 1.0; int width = options->width*scale; int height = options->height*scale; // image win32Image(scale, width, height, v1, v2-v1); } } void Base::win32Crosshair() { if (!useCrosshair) return; Vector rr = mapFromRef(crosshair,Coord::WIDGET); Vector aa = Vector(rr[0],1) * widgetToCanvas; Vector bb = Vector(rr[0],options->height) * widgetToCanvas; Vector cc = Vector(1,rr[1]) * widgetToCanvas; Vector dd = Vector(options->width,rr[1]) * widgetToCanvas; win32Color(getXColor("green")); win32Width(1); win32Dash(NULL,0); win32DrawLine(aa,bb); win32DrawLine(cc,dd); } void Base::win32Image(float scale, int width, int height, const Vector& v, const Vector& s) { // we need a colorScale before we can render if (!validColorScale()) return; pushPSMatrices(scale, width, height); // source unsigned char* src = fillImage(width, height, Coord::PS); if (!src) return; // destination (width must be aligned on 4-byte DWORD boundary) int jjwidth=(((width+3)/4)*4); // extra alignment padding which we have to skip over for each row int jjpad=(jjwidth-width)*3; unsigned char* dst = new unsigned char[jjwidth*height*3]; if (!dst) return; memset(dst, '\0', jjwidth*height*3); unsigned char* sptr = src; unsigned char* dptr = dst; unsigned char red, green, blue; for (int jj=0; jjwin32(); // contours currentContext->contourWin32(); // markers if (showMarkers) { win32Markers(&userMarkers); win32Markers(&catalogMarkers); } // win32Markers(&analysisMarkers); win32Crosshair(); win32Graphics(); // cleanup win32End(); } #endif saods9/tksao/frame/base.h000644 000765 000000 00000177526 12775514037 015717 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __base_h__ #define __base_h__ #include "widget.h" #include "vector3d.h" #include "callback.h" #include "fvcontour.h" #include "frscale.h" #include "grid2d.h" #include "grid25d.h" #include "grid3d.h" #include "hist.h" #include "inversescale.h" #include "list.h" #include "tag.h" #include "util.h" #include "point.h" extern int DebugAST; extern int DebugMosaic; extern int DebugPerf; extern int DebugWCS; extern int DebugBin; extern int DebugBlock; extern int DebugCompress; extern int DebugCrop; extern int DebugGZ; extern int DebugRGB; #define DEFAULTLOW 0 #define DEFAULTHIGH 100 #define HISTEQUSIZE 16384 #define SCALESIZE 16384 class Attribute; class BaseBox; class BaseEllipse; class BaseMarker; class Composite; class Context; class Contour; class ContourLevel; class Filter; class FitsImage; class FitsMask; class FVContour; class Grid; class Grid2d; class Grid25d; class Grid3d; class Marker; class Annulus; class Box; class BoxAnnulus; class Bpanda; class Circle; class Compass; class Cpanda; class Ellipse; class EllipseAnnulus; class Epanda; class Line; class Point; class Projection; class Polygon; class Ruler; class Segment; class Text; class Vect; class Base : public Widget { friend class Attribute; friend class BaseBox; friend class BaseEllipse; friend class BaseLine; friend class BaseMarker; friend class BasePolygon; friend class Composite; friend class Context; friend class Contour; friend class ContourLevel; friend class FitsImage; friend class FitsMask; friend class FVContour; friend class Grid; friend class Grid2d; friend class Grid25d; friend class Grid3d; friend class Marker; friend class Annulus; friend class Box; friend class BoxAnnulus; friend class Bpanda; friend class Circle; friend class Compass; friend class Cpanda; friend class Ellipse; friend class EllipseAnnulus; friend class Epanda; friend class Line; friend class Point; friend class Projection; friend class Polygon; friend class Ruler; friend class Segment; friend class Text; friend class Vect; public: enum CompressType {NOCOMPRESS, GZ}; enum FileNameType {ROOTBASE, FULLBASE, ROOT, FULL}; enum MarkerFormat {DS9, XML, CIAO, SAOTNG, SAOIMAGE, PROS, RAWXY}; enum MarkerLayer {USER, TEMPLATE, CATALOG, ANALYSIS}; enum ShmType {SHMID,KEY}; enum UndoMarkerType {NONE, MOVE, EDIT, DELETE}; enum UpdateType {MATRIX, BASE, BASEONLY, PIXMAP, NOUPDATE}; enum MemType {ALLOC, ALLOCGZ, CHANNEL, MMAP, SMMAP, MMAPINCR, SHARE, SSHARE, SOCKET, SOCKETGZ, VAR, HIST, POST, PHOTO}; enum MosaicType {NOMOSAIC, IRAF, WCSMOSAIC, WFPC2}; enum LayerType {IMG, MASK}; private: InverseScale* inverseScale; protected: Context* context; int nthreads_; int byteorder_; int bitsperpixel_; List* markers; // pointer to current marker stack List* undoMarkers; // pointer to current marker stack List* pasteMarkers;// pointer to current marker stack List userMarkers; // foreground marker stack List undoUserMarkers; // remember marker to undo List pasteUserMarkers; // cut/copy/paste List catalogMarkers; // background marker stack List undoCatalogMarkers; // remember marker to undo List pasteCatalogMarkers; // cut/copy/paste /* List analysisMarkers; // background marker stack List undoAnalysisMarkers; // remember marker to undo List pasteAnalysisMarkers; // cut/copy/paste */ UndoMarkerType undoMarkerType; // type Vector markerBegin; // marker move begin in image coords Marker* editMarker; // pointer to marker currently being edited Marker* rotateMarker; // pointer to marker currently being rotated Vector regionBegin; // select region begin in canvas coords Vector regionEnd; // select region end in canvas coords Composite* compositeMarker; // pointer to current composite marker Vector cursor; // current cursor position in REF coords Vector crosshair; // crosshair location in REF coords XImage* baseXImage; // ximage of image Pixmap basePixmap; // pixmap of image UpdateType needsUpdate; // updateFlags int syncUpdate; // update 3d syncronously Context* currentContext; Context* keyContext; int keyContextSet; Coord::Orientation orientation; // current image orientation Matrix orientationMatrix; // current image orientation matrix double rotation; // current image rotation angle double rotateRotation; // tmp cursor for interactive rotation int preservePan; // flag to indicate preserve between loads Vector zoom_; // current image zoom value Pixmap panPM; // tmp pixmap for pan motion Vector panCursor; // cursor for interactive panning GC panGCXOR; // GC for interactive panning GC rotateGCXOR; // GC for interactive rotation Pixmap pannerPixmap; // pixmap for panner XImage* pannerXImage; // ximage for panner int pannerWidth; // panner width int pannerHeight; // panner height char pannerName[32]; // panner widget name int usePanner; // panner status GC pannerGC; Pixmap magnifierPixmap; // pixmap for magnifier XImage* magnifierXImage; // ximage for magnifier int magnifierWidth; // magnifier width int magnifierHeight; // magnifier height double magnifierZoom_; // magnifier zoom factor char magnifierName[32]; // magnifer widget name int useMagnifier; // magnifer status int useMagnifierGraphics; // magnifer marker status int useMagnifierCursor; // magnifier cursor status Vector magnifierCursor; // we need to save the last cursor used char* magnifierColorName; Vector cropBegin; Vector cropEnd; Coord::CoordSystem wcsSystem_; Coord::SkyFrame wcsSky_; Coord::SkyFormat wcsSkyFormat_; int wcsAlign_; // flag to indicate wcs alignment Coord::CoordSystem xySystem_; // default marker sys (RAWXY) Coord::SkyFrame xySky_; // default marker sky (RAWXY) Coord::Orientation wcsOrientation; // wcs image orientation Matrix wcsOrientationMatrix; // wcs image orientation matrix double wcsRotation; // wcs image rotation angle int irafAlign_; Coord::Orientation irafOrientation_; // orientation of first iraf segment Matrix irafMatrix_; // orientation matrix for iraf mosaic char* maskColorName; float maskAlpha; int maskMark; int invert; int useHighlite; GC highliteGC; XRectangle rectWidget[1]; XRectangle rectWindow[1]; int useCrosshair; int markerEpsilon; // mouse tolerance for select/edit int showMarkers; int showMarkersText; int centroidAuto; int centroidIteration; float centroidRadius; int preserveMarkers; // flag to indicate preserve between loads GC markerGC; // marker gc GC markerGCXOR; // marker xor gc GC selectGCXOR; // select gc Grid* grid; GC gridGC; GC contourGC; char* bgColorName; XColor* bgColor; char bgTrueColor_[4]; // color encoded char* nanColorName; XColor* nanColor; char nanTrueColor_[4]; // color encoded float dlist[2]; char* colorbartag; Matrix dataToImage; Matrix imageToData; Matrix refToUser; Matrix userToRef; Matrix refToWidget; Matrix widgetToRef; Matrix refToCanvas; Matrix canvasToRef; Matrix refToWindow; Matrix windowToRef; Matrix userToWidget; Matrix widgetToUser; Matrix userToCanvas; Matrix canvasToUser; Matrix widgetToCanvas; Matrix canvasToWidget; Matrix widgetToWindow; Matrix windowToWidget; Matrix canvasToWindow; Matrix windowToCanvas; Matrix refToMagnifier; Matrix magnifierToRef; Matrix userToMagnifier; Matrix magnifierToUser; Matrix widgetToMagnifier; Matrix magnifierToWidget; Matrix refToPanner; Matrix pannerToRef; Matrix userToPanner; Matrix pannerToUser; Matrix widgetToPanner; Matrix pannerToWidget; private: void bltHist(char*, char*); // frblt.C void getInfoClearName(char*); void getInfoClearValue(char*); void getInfoClearWCS(char*); void getInfoWCS(char*, const Vector3d&, FitsImage*, FitsImage*); void invalidPixmap(); int updatePixmap(const BBox&); protected: void alignIRAF(); virtual void alignWCS(); virtual void alignWCS(Coord::CoordSystem, Coord::SkyFrame); virtual void alignWCS(FitsImage*, Coord::CoordSystem); // void analysisMarkersInit(); void bltCut(char*, char*, Coord::Orientation, const Vector&); void bltCutFits(double*, double*, int, Coord::Orientation, const Vector&); double calcZoom(Vector,Vector); virtual double calcZoomPanner() =0; virtual void cancelDetach() =0; virtual void centerImage(); void coordToTclArray(FitsImage*, const Vector3d&, Coord::CoordSystem, const char*, const char*); void coord3ToTclArray(FitsImage*, const Vector3d&, Coord::CoordSystem, const char*, const char*); void createMarker(Marker*); void createTemplate(const Vector&, istream&); void contourCreatePolygon(List&); virtual int doRender(); void doubleToTclArray(double, const char*, const char*, const char*); void encodeTrueColor(int oo, int bb) {byteorder_ = oo; bitsperpixel_ = bb;} virtual void encodeTrueColor(XColor*, char*) =0; virtual void encodeTrueColor(unsigned char*, XImage*) =0; virtual unsigned char* fillImage(int, int, Coord::InternalSystem) =0; Coord::Orientation getOrientation() {return orientation;} double getRotation() {return rotation + wcsRotation;} Coord::Orientation getWCSOrientation() {return wcsOrientation;} int hasATMV(); int hasContour(); int hasContourAux(); int hasDTMV(); int hasLTMV(); int hasWCS(Coord::CoordSystem); int hasWCSEqu(Coord::CoordSystem); int hasWCSCel(Coord::CoordSystem); int hasWCSx(Coord::CoordSystem); virtual BBox imageBBox(FrScale::SecMode); Vector imageCenter(FrScale::SecMode); Vector imageSize(FrScale::SecMode); virtual int isIIS(); FitsImage* isInFits(const Vector&, Coord::InternalSystem, Vector*); FitsImage* isInCFits(const Vector&, Coord::InternalSystem, Vector*); virtual int isAzElZero() {return 1;} virtual int isFrame() {return 0;} virtual int isFrame3d() {return 0;} virtual int isFrameRGB() {return 0;} void loadDone(int, LayerType); void markerAnalysisHistogram(Marker*, double**, double**, const BBox&, int); int markerAnalysisPlot2d(Marker*, double**, double**, double**, double**, Vector&, Vector&, int, Coord::CoordSystem, Coord::SkyFrame, Marker::AnalysisMethod); int markerAnalysisPlot3d(Marker*, double**, double**, const BBox&, Coord::CoordSystem, Marker::AnalysisMethod); int markerAnalysisRadial(Marker*, double**, double**, double**, int, Vector*, BBox*, Coord::CoordSystem); int markerAnalysisPanda(Marker*, double**, double**, double**, int, Vector*, int, double*, BBox*, Coord::CoordSystem); int markerAnalysisStats1(Marker*, FitsImage*, ostream&, Coord::CoordSystem, Coord::SkyFrame); void markerAnalysisStats2(FitsImage*, ostream&, Coord::CoordSystem, int, int, double, int); void markerAnalysisStats3(ostream&); void markerAnalysisStats4(ostream&, int, int, double, double, double, double, double); void markerAnalysisStats(Marker*, ostream&, const BBox&, Coord::CoordSystem, Coord::SkyFrame); void markerAnalysisStats(Marker*, ostream&, int, BBox*, Coord::CoordSystem, Coord::SkyFrame); void markerAnalysisStats(Marker*, ostream&, int, int, BBox*, Coord::CoordSystem, Coord::SkyFrame); double mapDistFromRef(const Vector&, const Vector&, Coord::InternalSystem); double mapLenFromRef(double, Coord::InternalSystem); Vector mapLenFromRef(const Vector&, Coord::InternalSystem); double mapLenToRef(double, Coord::InternalSystem); Vector mapLenToRef(const Vector&, Coord::InternalSystem); void markerListHeader(ostream&); void markerListXMLHeader(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void markerListXMLFooter(ostream&); void markerListSAOtngHeader(ostream&,Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void markerUndo(Marker*, UndoMarkerType); void parseMarker(MarkerFormat,istream&); int postscriptProc(int prepass); void printCoordSystem(Coord::CoordSystem); void printDistFromRef(FitsImage*, const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyDist); void printDouble(double); void printFromRef(FitsImage*, const Vector&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void printLenFromRef(FitsImage*, double, Coord::CoordSystem, Coord::SkyDist); void printLenFromRef(FitsImage*, const Vector&, Coord::CoordSystem, Coord::SkyDist); void printInteger(int); void printSkyFrame(Coord::SkyFrame); void printSkyFormat(Coord::SkyFormat); void printSkyDist(Coord::SkyDist); void ps(); void psCrosshair(PSColorSpace); virtual void psGraphics(PSColorSpace) {} void psImage(ostream&, Filter&, int, int, float); void psMarkers(List*, int); Matrix psMatrix(float scale, int width, int height); virtual void pushMatrices(); virtual void pushMagnifierMatrices(); virtual void pushPannerMatrices(); virtual void pushPSMatrices(float, int, int); virtual void reset(); void resetSecMode(); virtual void setBinCursor() =0; void setClip(); FrScale::SecMode secMode(); void setSecMode(FrScale::SecMode); virtual void setSlice(int,int); void unhighliteMarkers(); void unselectMarkers(List*); void update(UpdateType); void update(UpdateType,BBox); void updateMarkers(List*); void updateMarkerCBs(List*); void updateMarkerCoords(List*, const Matrix&); virtual void unloadFits(); virtual void unloadAllFits(); void updateBase(); virtual void updateBin(const Matrix&); virtual void updateBlock(const Vector&); void updateCBMarkers(List*); virtual void updateColorScale() =0; virtual void updateGCs(); void updateMagnifier(); void updateMagnifier(const Vector&); virtual void updateMatrices(); virtual void updateMagnifierMatrices(); virtual void updatePannerMatrices(); void updateNow(UpdateType); void updateNow(UpdateType,BBox); virtual void updatePanner(); void updatePM(const BBox&); char* varcat(char*, char*, char, char*); virtual int validColorScale() =0; void x11Crosshair(Pixmap, Coord::InternalSystem, int, int); void x11Dash(GC, int); virtual void x11Graphics(); virtual void x11MagnifierCursor(const Vector&) {} void x11MagnifierMarkers(List*, const BBox& bb); void x11Markers(List*, const BBox&); void x11MarkerXOR(Marker*); void xmlParse(istream&); void xmlParseFIELD(void*, int*, char**, char**, char**, char**, int); void xmlParseTR(char**, int*, char**, char**, char**, char**, int); void xmlSetProps(unsigned short*, unsigned short, char*); int xmlCount(const char*); Vector xmlPoint(FitsImage*, const char* x, const char* y, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int which=0); List* xmlVertex(FitsImage*, const char*, const char*, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); double xmlAngle(const char*, int, double, Coord::AngleFormat, Coord::CoordSystem, Coord::SkyFrame); double* xmlAngles(const char*, int, double, int, Coord::AngleFormat, Coord::CoordSystem, Coord::SkyFrame); double* xmlDistance(FitsImage*, const char*, int, Coord::CoordSystem, Coord::SkyDist); Vector* xmlDistance(FitsImage*, const char*, const char*, int, Coord::CoordSystem, Coord::SkyDist); void ximageToPixmap(Pixmap, XImage*, Coord::InternalSystem); virtual void ximageToPixmapMagnifier(); Vector zoom() {return zoom_;} #ifdef MAC_OSX_TK void macosx(); void macosxCrosshair(); virtual void macosxGraphics() {} void macosxImage(float, int, int, const Vector&, const Vector&); void macosxMarkers(List* ml); #endif #ifdef __WIN32 void win32(); void win32Crosshair(); virtual void win32Graphics() {} void win32Image(float, int, int, const Vector&, const Vector&); void win32Markers(List* ml); #endif public: Base(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item); virtual ~Base(); void calcAlignWCS(FitsImage*, Coord::CoordSystem, Coord::SkyFrame, Coord::Orientation*, Matrix*, double*); void calcAlignWCS(FitsImage*, FitsImage*, Coord::CoordSystem, Coord::CoordSystem, Coord::SkyFrame, Coord::Orientation*, Matrix*, double*, Vector*); Matrix calcAlignWCS(FitsImage*, FitsImage*, Coord::CoordSystem, Coord::CoordSystem, Coord::SkyFrame); Vector centroid(const Vector&); FitsImage* findFits(); FitsImage* findFits(Coord::CoordSystem, const Vector&); FitsImage* findFits(const Vector&); FitsImage* findFits(int); int findFits(FitsImage*); FitsImage* findAllFits(int); int fitsCount(); Coord::Orientation IRAFOrientation(Coord::Orientation); int isMosaic(); int isCube(); int isBinTable(); virtual Vector mapFromRef(const Vector&, Coord::InternalSystem) =0; virtual Vector3d mapFromRef3d(const Vector&, Coord::InternalSystem) =0; virtual Vector mapToRef(const Vector&, Coord::InternalSystem) =0; virtual Vector3d mapToRef3d(const Vector&, Coord::InternalSystem) =0; double mapAngleFromRef(double,Coord::CoordSystem,Coord::SkyFrame =Coord::FK5); double mapAngleToRef(double, Coord::CoordSystem, Coord::SkyFrame =Coord::FK5); int parse(istringstream&); void resetCompositeMarker() {compositeMarker = NULL;} Coord::CoordSystem wcsSystem() {return wcsSystem_;} Coord::SkyFrame wcsSky() {return wcsSky_;} Coord::SkyFormat wcsSkyFormat() {return wcsSkyFormat_;} Coord::CoordSystem xySystem() {return xySystem_;} Coord::SkyFrame xySky() {return xySky_;} void matchCmd(const char* xxname1, const char* yyname1, Coord::CoordSystem sys1, Coord::SkyFrame sky1, const char* xxname2, const char* yyname2, Coord::CoordSystem sys2, Coord::SkyFrame sky2, double rad, Coord::CoordSystem sys, Coord::SkyDist dist, const char* rr); // IME Analysis Commands void analysisMarkersResetCmd(); void analysisMarkersSelectCmd(const char*, const Vector&); // Axes Order void axesOrderCmd(int); void getAxesOrderCmd(); // Background Commands void bgColorCmd(const char*); void getBgColorCmd(); // Bin Commands void binCmd(const Vector&, const char*, const char*, const char*); void binCmd(const Vector&, const Vector&, const char*, const char*, const char*); void binCmd(const Vector&, int, const Vector&, const char*, const char*, const char*, const char*); void binCmd(const Vector&, int, const Vector&, const Vector&, const char*, const char*, const char*, const char*); void binAboutCmd(); void binAboutCmd(const Vector&); void binColsCmd(const char*, const char*, const char*); void binDepthCmd(int); void binFactorCmd(const Vector&); void binFactorAboutCmd(const Vector&, const Vector&); void binFactorToCmd(const Vector&); void binFactorToAboutCmd(const Vector&, const Vector&); void binFunctionCmd(FitsHist::Function); void binBufferSizeCmd(int); void binFilterCmd(const char*); virtual void binToFitCmd() =0; void getBinDepthCmd(); void getBinFactorCmd(); void getBinFunctionCmd(); void getBinBufferSizeCmd(); void getBinCursorCmd(); void getBinFilterCmd(); void getBinColsCmd(); void getBinColsMinMaxCmd(const char*); void getBinColsDimCmd(const char*); void getBinListCmd(); void hasBinColCmd(const char*); // Block Commands void blockCmd(const Vector&); void blockToCmd(const Vector&); virtual void blockToFitCmd() =0; void getBlockCmd(); // Clip Commands virtual void clipScopeCmd(FrScale::ClipScope); void clipModeCmd(float); void clipModeCmd(FrScale::ClipMode); void clipMinMaxCmd(FrScale::MinMaxMode, int); // backward compatibilty backup void clipMinMaxModeCmd(FrScale::MinMaxMode); // backward compatibilty backup void clipMinMaxSampleCmd(int); void clipUserCmd(double, double); void clipZScaleCmd(float,int,int); // backward compatibilty backup void clipZScaleContrastCmd(float); // backward compatibilty backup void clipZScaleSampleCmd(int); // backward compatibilty backup void clipZScaleLineCmd(int); void getClipCmd(); void getClipCmd(float); void getClipCmd(FrScale::ClipMode); void getClipMinMaxModeCmd(); void getClipMinMaxSampleCmd(); void getClipModeCmd(); void getClipPreserveCmd(); void getClipScopeCmd(); void getClipUserCmd(); void getClipZScaleContrastCmd(); void getClipZScaleSampleCmd(); void getClipZScaleLineCmd(); void getHistogramCmd(char*, char*, int); void getMinMaxCmd(); void hasDATAMINCmd(); void hasIRAFMINCmd(); // Colormap Commands void colorbarTagCmd(const char*); virtual void colormapCmd(int, float, float, int, unsigned char*, int) {} virtual void colormapCmd(float, float, float, float, float, float, int, unsigned char*, int) {} virtual void colormapBeginCmd() {} virtual void colormapEndCmd() {} virtual void colormapMotionCmd(int, float, float, int, unsigned char*, int) {} virtual void colormapMotionCmd(float, float, float, float, float, float, int, unsigned char*, int) {} virtual void getColorbarCmd() =0; void getColorbarTagCmd(); // Contour Commands void contourAppendCmd(ContourLevel*); void contourCreateCmd(const char*, int, int, FVContour::Method, int, int, FrScale::ColorScaleType, float, float, Vector, const char*); void contourCreatePolygonCmd(); void contourDeleteCmd(); void contourDeleteAuxCmd(); void contourLoadCmd(const char*); void contourLoadCmd(const char*, const char*, int, int); void contourLoadCmd(const char*, Coord::CoordSystem, Coord::SkyFrame, const char*, int, int); void contourPasteCmd(const char*); void contourPasteCmd(const char*, const char*, int, int); void contourSaveCmd(const char*, Coord::CoordSystem, Coord::SkyFrame); void contourSaveAuxCmd(const char*, Coord::CoordSystem, Coord::SkyFrame); void getContourCmd(Coord::CoordSystem sys, Coord::SkyFrame sky); void getContourClipCmd(); void getContourClipModeCmd(); void getContourColorNameCmd(); void getContourDashCmd(); void getContourLevelCmd(); void getContourLineWidthCmd(); void getContourMethodCmd(); void getContourNumLevelCmd(); void getContourScaleCmd(); void getContourScaleLogCmd(); void getContourSmoothCmd(); void hasContourCmd(); void hasContourAuxCmd(); // Coordinate Commands void getWCSCmd(); void wcsCmd(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void getWCSNameCmd(Coord::CoordSystem); void getWCSAlignPointerCmd(); void getCoordCmd(const Vector&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void getCoord3axisCmd(double, Coord::CoordSystem, Coord::CoordSystem, int); virtual void getCursorCmd(Coord::InternalSystem) =0; virtual void getCursorCmd(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat) =0; void hasSystemCmd(Coord::CoordSystem); void hasAmplifierCmd(); void hasDetectorCmd(); void hasPhysicalCmd(); void hasWCSAltCmd(); void hasWCSCmd(Coord::CoordSystem); void hasWCSEquCmd(Coord::CoordSystem); void hasWCSCelCmd(Coord::CoordSystem); void hasWCSxCmd(Coord::CoordSystem); // Crop Commands void cropCmd(); void cropCmd(const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyFrame); void cropCenterCmd(const Vector&, Coord::CoordSystem, Coord::SkyFrame, const Vector&, Coord::CoordSystem, Coord::SkyDist); void cropBeginCmd(const Vector&); void cropMotionCmd(const Vector&); void cropEndCmd(const Vector&); void crop3dCmd(); void crop3dCmd(double, double, Coord::CoordSystem); virtual void crop3dBeginCmd(const Vector&, int) {} virtual void crop3dMotionCmd(const Vector&, int) {} virtual void crop3dEndCmd(const Vector&, int) {} void getCropCmd(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void getCropCenterCmd(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, Coord::CoordSystem, Coord::SkyDist); void getCrop3dCmd(Coord::CoordSystem); void hasCropCmd(); // CrossHair Commands void crosshairCmd(int); void crosshairCmd(const Vector&, Coord::InternalSystem); void crosshairCmd(const Vector&, Coord::CoordSystem, Coord::SkyFrame =Coord::FK5); void crosshairWarpCmd(const Vector&); void getCrosshairCmd(Coord::InternalSystem); void getCrosshairCmd(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void getCrosshairStatusCmd(); // DATASEC Commands void DATASECCmd(int); void getDATASECCmd(); void hasDATASECCmd(); // Data Values void getDataValuesCmd(int, const Vector&, Coord::CoordSystem, Coord::SkyFrame, const Vector&, char*); void getDataValuesCmd(const Vector&, Coord::InternalSystem, const Vector&); // Fits Commands void getBitpixCmd(); void getFitsNAxesCmd(); void getFitsCountCmd(); void getFitsCenterCmd(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void getFitsDepthCmd(int); void getFitsExtCmd(int); void getFitsExtCmd(const Vector&, Coord::InternalSystem); void getFitsFileNameCmd(FileNameType); void getFitsFileNameCmd(int, FileNameType); void getFitsFileNameCmd(const Vector&, Coord::InternalSystem, FileNameType); void getFitsHeaderCmd(int); void getFitsHeaderWCSCmd(int); void getFitsHeaderKeywordCmd(int,const char*); void getFitsObjectNameCmd(); void getFitsSizeCmd(); void getFitsSizeCmd(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyDist); void getFitsSliceCmd(int id); void getFitsSliceCmd(int id, Coord::CoordSystem sys); void hasFitsCmd(); void hasFitsHPXCmd(); void hasFitsBinCmd(); void hasFitsCubeCmd(); void hasFitsMosaicCmd(); void loadFitsAllocCmd(const char*, const char*, LayerType); void loadFitsAllocGZCmd(const char*, const char*, LayerType); void loadFitsChannelCmd(const char*, const char*, LayerType); void loadFitsMMapCmd(const char*, LayerType); void loadFitsSMMapCmd(const char*, const char*, LayerType); void loadFitsMMapIncrCmd(const char*, LayerType); void loadFitsShareCmd(ShmType, int, const char*, LayerType); void loadFitsSShareCmd(ShmType, int, int, const char*, LayerType); void loadFitsSocketCmd(int, const char*, LayerType); void loadFitsSocketGZCmd(int, const char*, LayerType); void loadFitsVarCmd(const char*, const char*, LayerType); void loadArrAllocCmd(const char*, const char*, LayerType); void loadArrAllocGZCmd(const char*, const char*, LayerType); void loadArrChannelCmd(const char*, const char*, LayerType); void loadArrMMapCmd(const char*, LayerType); void loadArrMMapIncrCmd(const char*, LayerType); void loadArrShareCmd(ShmType, int, const char*, LayerType); void loadArrSocketCmd(int, const char*, LayerType); void loadArrSocketGZCmd(int, const char*, LayerType); void loadArrVarCmd(const char*, const char*, LayerType); void loadENVISMMapCmd(const char*, const char*); void loadNRRDAllocCmd(const char*, const char*, LayerType); void loadNRRDChannelCmd(const char*, const char*, LayerType); void loadNRRDMMapCmd(const char*, LayerType); void loadNRRDShareCmd(ShmType, int, const char*, LayerType); void loadNRRDSocketCmd(int, const char*, LayerType); void loadNRRDVarCmd(const char*, const char*, LayerType); virtual void loadPhotoCmd(const char*, const char*); virtual void loadSlicePhotoCmd(const char*, const char*); void loadExtCubeAllocCmd(const char*, const char*); void loadExtCubeAllocGZCmd(const char*, const char*); void loadExtCubeChannelCmd(const char*, const char*); void loadExtCubeMMapCmd(const char*); void loadExtCubeMMapIncrCmd(const char*); void loadExtCubeShareCmd(ShmType, int, const char*); void loadExtCubeSocketCmd(int, const char*); void loadExtCubeSocketGZCmd(int, const char*); void loadExtCubeVarCmd(const char*, const char*); void loadSliceAllocCmd(const char*, const char*); void loadSliceAllocGZCmd(const char*, const char*); void loadSliceChannelCmd(const char*, const char*); void loadSliceMMapCmd(const char*); void loadSliceSMMapCmd(const char*, const char*); void loadSliceMMapIncrCmd(const char*); void loadSliceShareCmd(ShmType, int, const char*); void loadSliceSShareCmd(ShmType, int, int, const char*); void loadSliceSocketCmd(int, const char*); void loadSliceSocketGZCmd(int, const char*); void loadSliceVarCmd(const char*, const char*); void loadMosaicImageAllocCmd(MosaicType, Coord::CoordSystem, const char*, const char*, LayerType); void loadMosaicImageAllocGZCmd(MosaicType, Coord::CoordSystem, const char*, const char*, LayerType); void loadMosaicImageChannelCmd(MosaicType, Coord::CoordSystem, const char*, const char*, LayerType); void loadMosaicImageMMapCmd(MosaicType, Coord::CoordSystem, const char*, LayerType); void loadMosaicImageMMapIncrCmd(MosaicType, Coord::CoordSystem, const char*, LayerType); void loadMosaicImageShareCmd(MosaicType, Coord::CoordSystem, ShmType, int, const char*, LayerType); void loadMosaicImageSocketCmd(MosaicType, Coord::CoordSystem, int, const char*, LayerType); void loadMosaicImageSocketGZCmd(MosaicType, Coord::CoordSystem, int, const char*, LayerType); void loadMosaicImageVarCmd(MosaicType, Coord::CoordSystem, const char*,const char*, LayerType); void loadMosaicAllocCmd(MosaicType, Coord::CoordSystem, const char*, const char*, LayerType); void loadMosaicAllocGZCmd(MosaicType, Coord::CoordSystem, const char*, const char*, LayerType); void loadMosaicChannelCmd(MosaicType, Coord::CoordSystem, const char*, const char*, LayerType); void loadMosaicMMapCmd(MosaicType, Coord::CoordSystem, const char*, LayerType); void loadMosaicSMMapCmd(MosaicType, Coord::CoordSystem, const char*, const char*, LayerType); void loadMosaicMMapIncrCmd(MosaicType, Coord::CoordSystem, const char*, LayerType); void loadMosaicShareCmd(MosaicType, Coord::CoordSystem, ShmType, int, const char*, LayerType); void loadMosaicSShareCmd(MosaicType, Coord::CoordSystem, ShmType, int, int, const char*, LayerType); void loadMosaicSocketCmd(MosaicType, Coord::CoordSystem, int, const char*, LayerType); void loadMosaicSocketGZCmd(MosaicType, Coord::CoordSystem, int, const char*, LayerType); void loadMosaicVarCmd(MosaicType, Coord::CoordSystem, const char*, const char*, LayerType); void loadMosaicImageWFPC2AllocCmd(const char*, const char*); void loadMosaicImageWFPC2AllocGZCmd(const char*, const char*); void loadMosaicImageWFPC2ChannelCmd(const char*, const char*); void loadMosaicImageWFPC2MMapCmd(const char*); void loadMosaicImageWFPC2MMapIncrCmd(const char*); void loadMosaicImageWFPC2ShareCmd(ShmType, int, const char*); void loadMosaicImageWFPC2SocketCmd(int, const char*); void loadMosaicImageWFPC2SocketGZCmd(int, const char*); void loadMosaicImageWFPC2VarCmd(const char*, const char*); // Fits RGB virtual void loadRGBCubeAllocCmd(const char*, const char*) {} virtual void loadRGBCubeAllocGZCmd(const char*, const char*) {} virtual void loadRGBCubeChannelCmd(const char*, const char*) {} virtual void loadRGBCubeMMapCmd(const char*) {} virtual void loadRGBCubeSMMapCmd(const char*, const char*) {} virtual void loadRGBCubeMMapIncrCmd(const char*) {} virtual void loadRGBCubeShareCmd(ShmType, int, const char*) {} virtual void loadRGBCubeSShareCmd(ShmType,int,int,const char*) {} virtual void loadRGBCubeSocketCmd(int, const char*) {} virtual void loadRGBCubeSocketGZCmd(int, const char*) {} virtual void loadRGBCubeVarCmd(const char*, const char*) {} virtual void loadRGBImageAllocCmd(const char*, const char*) {} virtual void loadRGBImageAllocGZCmd(const char*, const char*) {} virtual void loadRGBImageChannelCmd(const char*, const char*) {} virtual void loadRGBImageMMapCmd(const char*) {} virtual void loadRGBImageMMapIncrCmd(const char*) {} virtual void loadRGBImageShareCmd(ShmType, int, const char*) {} virtual void loadRGBImageSocketCmd(int, const char*) {} virtual void loadRGBImageSocketGZCmd(int, const char*) {} virtual void loadRGBImageVarCmd(const char*, const char*) {} virtual void loadArrayRGBCubeAllocCmd(const char*, const char*) {} virtual void loadArrayRGBCubeAllocGZCmd(const char*, const char*) {} virtual void loadArrayRGBCubeChannelCmd(const char*, const char*) {} virtual void loadArrayRGBCubeMMapCmd(const char*) {} virtual void loadArrayRGBCubeMMapIncrCmd(const char*) {} virtual void loadArrayRGBCubeShareCmd(ShmType, int, const char*) {} virtual void loadArrayRGBCubeSocketCmd(int, const char*) {} virtual void loadArrayRGBCubeSocketGZCmd(int, const char*) {} virtual void loadArrayRGBCubeVarCmd(const char*, const char*) {} virtual void savePhotoCmd(const char*) {} void saveFits(OutFitsStream&); void saveFitsFileCmd(const char*); void saveFitsChannelCmd(const char*); void saveFitsSocketCmd(int); void saveFitsTable(OutFitsStream&); void saveFitsTableFileCmd(const char*); void saveFitsTableChannelCmd(const char*); void saveFitsTableSocketCmd(int); void saveFitsSlice(OutFitsStream&); void saveFitsSliceFileCmd(const char*); void saveFitsSliceChannelCmd(const char*); void saveFitsSliceSocketCmd(int); void saveFitsExtCube(OutFitsStream&); void saveFitsExtCubeFileCmd(const char*); void saveFitsExtCubeChannelCmd(const char*); void saveFitsExtCubeSocketCmd(int); void saveFitsMosaic(OutFitsStream&, int); void saveFitsMosaicFileCmd(const char*, int); void saveFitsMosaicChannelCmd(const char*, int); void saveFitsMosaicSocketCmd(int, int); void saveFitsMosaicImage(OutFitsStream&); void saveFitsMosaicImageFileCmd(const char*); void saveFitsMosaicImageChannelCmd(const char*); void saveFitsMosaicImageSocketCmd(int); virtual void saveFitsRGBImage(OutFitsStream&) {} virtual void saveFitsRGBImageFileCmd(const char*) {} virtual void saveFitsRGBImageChannelCmd(const char*) {} virtual void saveFitsRGBImageSocketCmd(int) {} virtual void saveFitsRGBCube(OutFitsStream&) {} virtual void saveFitsRGBCubeFileCmd(const char*) {} virtual void saveFitsRGBCubeChannelCmd(const char*) {} virtual void saveFitsRGBCubeSocketCmd(int) {} virtual void saveFitsResampleFileCmd(const char*) {} virtual void saveFitsResampleChannelCmd(const char*) {} virtual void saveFitsResampleSocketCmd(int) {} void saveArray(OutFitsStream&, FitsFile::ArchType); void saveArrayFileCmd(const char*, FitsFile::ArchType); void saveArrayChannelCmd(const char*, FitsFile::ArchType); void saveArraySocketCmd(int, FitsFile::ArchType); virtual void saveArrayRGBCube(OutFitsStream&, FitsFile::ArchType) {} virtual void saveArrayRGBCubeFileCmd(const char*, FitsFile::ArchType) {} virtual void saveArrayRGBCubeChannelCmd(const char*, FitsFile::ArchType) {} virtual void saveArrayRGBCubeSocketCmd(int, FitsFile::ArchType) {} void saveNRRD(OutFitsStream&, FitsFile::ArchType); void saveNRRDFileCmd(const char*, FitsFile::ArchType); void saveNRRDChannelCmd(const char*, FitsFile::ArchType); void saveNRRDSocketCmd(int, FitsFile::ArchType); void saveENVI(ostream&, OutFitsStream&, FitsFile::ArchType); void saveENVIFileCmd(const char*, const char*, FitsFile::ArchType); void sliceCmd(int, int); void sliceCmd(int, double, Coord::CoordSystem); void updateFitsCmd(int); void updateFitsCmd(int, BBox, int); void unloadFitsCmd(); // Fitsy Commands void fitsyHasExtCmd(const char*); // Frame Commands void clearCmd(); void getFitsHeightCmd(); virtual void getTypeCmd() =0; void getFitsWidthCmd(); void highliteCmd(int); void warpCmd(const Vector&); void warpToCmd(const Vector&); // Graph Commands void getHorzCutCmd(char*, char*, const Vector&, Coord::InternalSystem); void getVertCutCmd(char*, char*, const Vector&, Coord::InternalSystem); // Grid Commands virtual void gridCmd(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, Grid::GridType, const char*, const char*) =0; void gridDeleteCmd(); void getGridCmd(); void getGridOptionCmd(); void getGridVarsCmd(); void hasGridCmd(); // IIS Commands virtual void iisCmd(int, int) {} virtual void iisCursorModeCmd(int) {} virtual void iisEraseCmd() {} virtual void iisGetCmd(char*, int, int, int, int) {} virtual void iisGetCursorCmd() {} virtual void iisGetFileNameCmd() {} virtual void iisGetFileNameCmd(int) {} virtual void iisGetFileNameCmd(const Vector&) {} virtual void iisMessageCmd(const char*) {} virtual void iisSetCmd(const char*, int, int, int, int) {} virtual void iisSetCursorCmd(const Vector&, Coord::InternalSystem) {} virtual void iisSetCursorCmd(const Vector&, Coord::CoordSystem) {} virtual void iisSetFileNameCmd(const char*) {} virtual void iisSetFileNameCmd(const char*,int) {} virtual void iisUpdateCmd() {} virtual void iisWCSCmd(const Matrix&, const Vector&, int) {} void hasIISCmd(); // Info Commands void getInfoCmd(char*); virtual void getInfoCmd(const Vector&, Coord::InternalSystem, char*); void getInfoClipCmd(); void getValueCmd(const Vector&, Coord::InternalSystem); // loadIncr is only used by LICK OBS // maintained for backward compatibility void loadIncrDataCmd(int, int, int, int, int); void loadIncrMinMaxCmd(int, int, int, int, int); void loadIncrEndCmd(); // Magnifier Commands void magnifierCmd(char*, int, int); void magnifierCmd(int); void magnifierGraphicsCmd(int); void magnifierCursorCmd(int); void magnifierZoomCmd(double); void magnifierColorCmd(const char*); void updateMagnifierCmd(const Vector& v); // Marker Commands // Basic Regions void createCircleCmd(const Vector&, double, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createEllipseCmd(const Vector&, const Vector&, double, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createBoxCmd(const Vector&, const Vector&, double, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createPolygonCmd(const Vector&, const Vector&, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createPolygonCmd(const List&, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createSegmentCmd(const Vector&, const Vector&, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createSegmentCmd(const List&, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createLineCmd(const Vector&, const Vector&, int, int, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createVectCmd(const Vector&, const Vector&, int, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createVectCmd(const Vector&, double mag, double ang, int, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createTextCmd(const Vector&, double, int, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createPointCmd(const Vector&, Point::PointShape, int, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); // Measurement Regions void createRulerCmd(const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyFrame, Coord::CoordSystem, Coord::SkyDist, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createCompassCmd(const Vector&, double, const char*, const char*, int, int, Coord::CoordSystem, Coord::SkyFrame, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createProjectionCmd(const Vector&, const Vector&, double, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); // Annulus Regions void createAnnulusCmd(const Vector&, double, double, int, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createAnnulusCmd(const Vector&, int, double*, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createEllipseAnnulusCmd(const Vector&, const Vector&, const Vector&, int, double, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createEllipseAnnulusCmd(const Vector&, int, Vector*, double, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createBoxAnnulusCmd(const Vector&, const Vector&, const Vector&, int, double, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createBoxAnnulusCmd(const Vector&, int, Vector*, double, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); // Panda Regions void createCpandaCmd(const Vector&, double, double, int, double, double, int, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createCpandaCmd(const Vector&, int, double*, int, double*, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createEpandaCmd(const Vector&, double, double, int, const Vector&, const Vector&, int, double, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createEpandaCmd(const Vector&, int, double*, int, Vector*, double, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createBpandaCmd(const Vector&, double, double, int, const Vector&, const Vector&, int, double, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createBpandaCmd(const Vector&, int, double*, int, Vector*, double, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); // Composite Regions void createCompositeCmd(const Vector&, double, int, const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); void createCompositeCmd( const char*, int*, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); // Template Regions void createTemplateCmd(const Vector&, const char*); void createTemplateCmd(const Vector&, Coord::CoordSystem, Coord::SkyFrame, const char*); void createTemplateVarCmd(const Vector&, const char* var); void getMarkerAnalysisHistogramCmd(char*, char*, int); void getMarkerAnalysisHistogramCmd(int, char*, char*, int); void getMarkerAnalysisPlot2dCmd(char*, char*, char*, char*, Coord::CoordSystem, Coord::SkyFrame, Marker::AnalysisMethod); void getMarkerAnalysisPlot2dCmd(int, char*, char*, char*, char*, Coord::CoordSystem, Coord::SkyFrame, Marker::AnalysisMethod); void getMarkerAnalysisPlot3dCmd(char*, char*, Coord::CoordSystem, Marker::AnalysisMethod); void getMarkerAnalysisPlot3dCmd(int, char*, char*, Coord::CoordSystem, Marker::AnalysisMethod); void getMarkerAnalysisPandaCmd(Coord::CoordSystem); void getMarkerAnalysisPandaCmd(int, Coord::CoordSystem); void getMarkerAnalysisRadialCmd(char*, char*, char*, Coord::CoordSystem); void getMarkerAnalysisRadialCmd(int, char*, char*, char*, Coord::CoordSystem); void getMarkerAnalysisStatsCmd(Coord::CoordSystem, Coord::SkyFrame); void getMarkerAnalysisStatsCmd(int, Coord::CoordSystem, Coord::SkyFrame); void getMarkerAngleCmd(int); void getMarkerAngleCmd(int, Coord::CoordSystem, Coord::SkyFrame); void getMarkerAnnulusRadiusCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerBoxAnnulusRadiusCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerBoxRadiusCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerBpandaAnglesCmd(int); void getMarkerBpandaAnglesCmd(int, Coord::CoordSystem, Coord::SkyFrame); void getMarkerBpandaRadiusCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerCenterCmd(int, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void getMarkerCentroidAutoCmd(); void getMarkerCentroidRadiusCmd(); void getMarkerCentroidIterationCmd(); void getMarkerCentroidOptionCmd(); void getMarkerCircleRadiusCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerColorCmd(); void getMarkerColorCmd(const char*); void getMarkerColorCmd(int); void getMarkerCompassArrowCmd(int); void getMarkerCompassLabelCmd(int); void getMarkerCompassRadiusCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerCompassSystemCmd(int); void getMarkerCompositeCmd(int); void getMarkerCpandaAnglesCmd(int); void getMarkerCpandaAnglesCmd(int, Coord::CoordSystem, Coord::SkyFrame); void getMarkerCpandaRadiusCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerEllipseRadiusCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerEllipseAnnulusRadiusCmd(int, Coord::CoordSystem,Coord::SkyDist); void getMarkerEpandaAnglesCmd(int); void getMarkerEpandaAnglesCmd(int, Coord::CoordSystem, Coord::SkyFrame); void getMarkerEpandaRadiusCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerEpsilonCmd(); void getMarkerFontCmd(); void getMarkerFontCmd(const char*); void getMarkerFontCmd(int); void getMarkerIdCmd(const char*); void getMarkerIdCmd(const Vector&); void getMarkerIdAllCmd(); void getMarkerLineCmd(int, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void getMarkerLineArrowCmd(int); void getMarkerLineLengthCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerLineWidthCmd(); void getMarkerLineWidthCmd(int); void getMarkerMapLenFromRefCmd(int, double, Coord::CoordSystem, Coord::SkyDist); void getMarkerNumberCmd(); void getMarkerPointShapeCmd(int); void getMarkerPointSizeCmd(int); void getMarkerPolygonSegmentCmd(const Vector&); void getMarkerPreserveCmd(); void getMarkerProjectionPointsCmd(int, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void getMarkerProjectionLengthCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerProjectionMethodCmd(int); void getMarkerProjectionWidthCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerPropertyCmd(unsigned short); void getMarkerPropertyCmd(const char*, unsigned short); void getMarkerPropertyCmd(int, unsigned short); void getMarkerRulerLengthCmd(int, Coord::CoordSystem, Coord::SkyDist); void getMarkerRulerPointCmd(int, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void getMarkerRulerSystemCmd(int); void getMarkerSegmentSegmentCmd(const Vector&); void getMarkerSelectedCmd(); void getMarkerSelectedCmd(int); void getMarkerSelectedCmd(const Vector&); void getMarkerSelectedNumberCmd(); void getMarkerShowCmd(); void getMarkerShowTextCmd(); void getMarkerHandleCmd(const Vector&); void getMarkerHighlitedCmd(); void getMarkerHighlitedCmd(int); void getMarkerHighlitedCmd(const Vector&); void getMarkerHighlitedNumberCmd(); void getMarkerTagCmd(const char*); void getMarkerTagCmd(int); void getMarkerTagCmd(int,int); void getMarkerTagDefaultNameCmd(); void getMarkerTagNumberCmd(const char*); void getMarkerTagsCmd(); void getMarkerTextCmd(int); void getMarkerTextRotateCmd(int); void getMarkerTypeCmd(int); void getMarkerVectorCmd(int, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void getMarkerVectorArrowCmd(int); void getMarkerVectorLengthCmd(int, Coord::CoordSystem, Coord::SkyDist); void hasMarkerHighlitedCmd(); void hasMarkerPasteCmd(); void hasMarkerSelectedCmd(); void hasMarkerUndoCmd(); void markerLayerCmd(MarkerLayer); void markerAnalysisCmd(int, Marker::AnalysisTask, int); void markerAngleCmd(int, double); void markerAngleCmd(int, double, Coord::CoordSystem, Coord::SkyFrame); void markerAnnulusCreateRadiusCmd(int, const Vector&); void markerAnnulusDeleteRadiusCmd(int, int); void markerAnnulusRadiusCmd(int, double, double, int, Coord::InternalSystem); void markerAnnulusRadiusCmd(int, double, double, int, Coord::CoordSystem, Coord::SkyDist); void markerAnnulusRadiusCmd(int, const char*, Coord::CoordSystem, Coord::SkyDist); void markerBackCmd(); void markerBackCmd(const char*); void markerBackCmd(int); void markerBoxAnnulusRadiusCmd(int, const Vector&, const Vector&, int, Coord::InternalSystem); void markerBoxAnnulusRadiusCmd(int, const Vector&, const Vector&, int, Coord::CoordSystem, Coord::SkyDist); void markerBoxAnnulusRadiusCmd(int, const char*, Coord::CoordSystem, Coord::SkyDist); void markerBoxAnnulusCreateRadiusCmd(int, const Vector&); void markerBoxAnnulusDeleteRadiusCmd(int, int); void markerBoxRadiusCmd(int, const Vector&, Coord::InternalSystem); void markerBoxRadiusCmd(int, const Vector&, Coord::CoordSystem, Coord::SkyDist); void markerBpandaCreateAnglesCmd(int, const Vector&); void markerBpandaCreateRadiusCmd(int, const Vector&); void markerBpandaDeleteCmd(int, int); void markerBpandaEditCmd(int, double, double, int, const Vector&, const Vector&, int); void markerBpandaEditCmd(int, double, double, int, const Vector&, const Vector&, int, Coord::CoordSystem, Coord::SkyFrame); void markerBpandaEditCmd(int, const char*, const char*, Coord::CoordSystem, Coord::SkyFrame, Coord::CoordSystem, Coord::SkyDist); void markerCallBackCmd(int, CallBack::Type, const char*, const char*); void markerCentroidCmd(); void markerCentroidCmd(const char*); void markerCentroidCmd(int); void markerCentroidAutoCmd(int); void markerCentroidRadiusCmd(float); void markerCentroidIterationCmd(int); void markerCircleRadiusCmd(int, double, Coord::InternalSystem); void markerCircleRadiusCmd(int, double, Coord::CoordSystem, Coord::SkyDist); void markerColorCmd(const char*); void markerColorCmd(const char*, const char*); void markerColorCmd(int, const char*); void markerCompassArrowCmd(int, int, int); void markerCompassLabelCmd(int, const char*, const char*); void markerCompassRadiusCmd(int, double, Coord::InternalSystem); void markerCompassRadiusCmd(int, double, Coord::CoordSystem, Coord::SkyDist); void markerCompassSystemCmd(int, Coord::CoordSystem, Coord::SkyFrame); void markerCompositeCmd(int, int); void markerCompositeDeleteCmd(); void markerCommandCmd(MarkerFormat, const char*); void markerCommandVarCmd(MarkerFormat, const char*); void markerCopyCmd(); void markerCopyCmd(const char*); void markerCpandaCreateAnglesCmd(int, const Vector&); void markerCpandaCreateRadiusCmd(int, const Vector&); void markerCpandaDeleteCmd(int, int); void markerCpandaEditCmd(int, double, double, int, double, double, int); void markerCpandaEditCmd(int, double, double, int, double, double, int, Coord::CoordSystem, Coord::SkyFrame); void markerCpandaEditCmd(int, const char*, const char*, Coord::CoordSystem, Coord::SkyFrame,Coord::CoordSystem, Coord::SkyDist); void markerCutCmd(); void markerCutCmd(const char*); void markerDeleteCmd(); void markerDeleteCmd(const char*); void markerDeleteCmd(int); void markerDeleteAllCmd(); void markerDeleteLastCmd(); void markerDeleteCallBackCmd(int, CallBack::Type, const char*); void markerDeleteTagCmd(int); void markerDeleteTagCmd(int, const char*); void markerDeleteTagCmd(int, int); void markerEditBeginCmd(int, int); void markerEditBeginCmd(const Vector&, int); void markerEditMotionCmd(const Vector&, int); void markerEditEndCmd(); void markerEllipseRadiusCmd(int, const Vector&, Coord::InternalSystem); void markerEllipseRadiusCmd(int, const Vector&, Coord::CoordSystem, Coord::SkyDist); void markerEllipseAnnulusRadiusCmd(int, const Vector&, const Vector&, int, Coord::InternalSystem); void markerEllipseAnnulusRadiusCmd(int, const Vector&, const Vector&, int, Coord::CoordSystem, Coord::SkyDist); void markerEllipseAnnulusRadiusCmd(int, const char*, Coord::CoordSystem, Coord::SkyDist); void markerEllipseAnnulusCreateRadiusCmd(int, const Vector&); void markerEllipseAnnulusDeleteRadiusCmd(int, int); void markerEpandaCreateAnglesCmd(int, const Vector&); void markerEpandaCreateRadiusCmd(int, const Vector&); void markerEpandaDeleteCmd(int, int); void markerEpandaEditCmd(int, double, double, int, const Vector&, const Vector&, int); void markerEpandaEditCmd(int, double, double, int, const Vector&, const Vector&, int, Coord::CoordSystem, Coord::SkyFrame); void markerEpandaEditCmd(int, const char*, const char*, Coord::CoordSystem, Coord::SkyFrame, Coord::CoordSystem, Coord::SkyDist); void markerEpsilonCmd(int ee) {markerEpsilon = ee;} void markerFontCmd(const char*); void markerFontCmd(const char*, const char*); void markerFontCmd(int, const char*); void markerFrontCmd(); void markerFrontCmd(const char*); void markerFrontCmd(int); void markerHighliteAllCmd(); // not used void markerHighliteCmd(int); // not used void markerHighliteCmd(const char*); // not used void markerHighliteToggleCmd(const Vector&); void markerHighliteOnlyCmd(int); void markerHighliteOnlyCmd(const char*); // not used void markerHighliteOnlyCmd(const Vector&); // not used void markerKeyCmd(); void markerKeyCmd(const Vector&); void markerLineCmd(int, const Vector&, const Vector&, Coord::InternalSystem); void markerLineCmd(int, const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyFrame); void markerLineArrowCmd(int, int, int); void markerLineWidthCmd(int); void markerLineWidthCmd(int, int); void markerListCmd(MarkerFormat, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int strip, int select, unsigned short, unsigned short, List&); void markerLoadCmd(MarkerFormat,const char*); void markerLoadCmd(MarkerFormat,const char*,Coord::CoordSystem,Coord::SkyFrame); void markerLoadCmd(MarkerFormat,int); void markerLoadCmd(MarkerFormat,int,Coord::CoordSystem,Coord::SkyFrame); void markerLoadFitsCmd(const char*, const char*, int*, int, const char*); void markerMoveCmd(const Vector&); void markerMoveCmd(const char*, const Vector&); void markerMoveCmd(int id, const Vector&); void markerMoveBeginCmd(const Vector&); void markerMoveBeginCmd(int, const Vector&); void markerMoveMotionCmd(const Vector&); void markerMoveMotionCmd(int, const Vector&); void markerMoveEndCmd(); void markerMoveEndCmd(int); void markerMoveToCmd(const Vector&, Coord::InternalSystem); void markerMoveToCmd(const Vector&, Coord::CoordSystem, Coord::SkyFrame); void markerMoveToCmd(const char*, const Vector&, Coord::InternalSystem); void markerMoveToCmd(const char*, const Vector&, Coord::CoordSystem, Coord::SkyFrame); void markerMoveToCmd(int, const Vector&, Coord::InternalSystem); void markerMoveToCmd(int, const Vector&, Coord::CoordSystem, Coord::SkyFrame); void markerPasteCmd(); void markerPasteCmd(Coord::CoordSystem); void markerPointShapeCmd(int, Point::PointShape); void markerPointSizeCmd(int, int); void markerPolygonCreateVertexCmd(int, int, const Vector&); void markerPolygonDeleteVertexCmd(int, int); void markerPolygonResetCmd(int, const Vector&, Coord::InternalSystem); void markerPolygonResetCmd(int, const Vector&, Coord::CoordSystem, Coord::SkyDist); void markerPreserveCmd(int r) {preserveMarkers = r;} void markerPropertyCmd(unsigned short, int); void markerPropertyCmd(const char*, unsigned short, int); void markerPropertyCmd(int, unsigned short, int); void markerPropertyCmd(unsigned short, int, const Vector&); void markerProjectionCmd(int, const Vector&, const Vector&, Coord::InternalSystem, double); void markerProjectionCmd(int, const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyFrame, double, Coord::CoordSystem, Coord::SkyDist); void markerRotateBeginCmd(int); void markerRotateBeginCmd(const Vector&); void markerRotateMotionCmd(const Vector&, int h); void markerRotateEndCmd(); void markerRulerPointCmd(int, const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyFrame); void markerRulerPointCmd(int, const Vector&, const Vector&, Coord::InternalSystem); void markerRulerSystemCmd(int, Coord::CoordSystem, Coord::SkyFrame, Coord::CoordSystem, Coord::SkyDist); void markerSaveCmd(const char*, MarkerFormat, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int strip); void markerSaveTemplateCmd(const char*); void markerSegmentCreateVertexCmd(int, int, const Vector&); void markerSegmentDeleteVertexCmd(int, int); void markerSegmentResetCmd(int, const Vector&, Coord::InternalSystem); void markerSegmentResetCmd(int, const Vector&, Coord::CoordSystem, Coord::SkyDist); void markerSelectAllCmd(); void markerSelectCmd(int); // not used void markerSelectCmd(const char*); void markerSelectToggleCmd(); void markerSelectToggleCmd(const Vector&); void markerSelectOnlyCmd(int); void markerSelectOnlyCmd(const char*); void markerSelectOnlyCmd(const Vector&); void markerShowCmd(int); void markerShowTextCmd(int); void markerTagCmd(const char*); void markerTagCmd(int, const char*); void markerTagEditCmd(const char*, const char*); void markerTagDeleteCmd(const char*); void markerTagDeleteAllCmd(); void markerTagUpdateCmd(const char*); void markerTextCmd(int, const char*); void markerTextRotateCmd(int, int); void markerUndoCmd(); void markerUnhighliteAllCmd(); void markerUnhighliteCmd(int); // not used void markerUnhighliteCmd(const char*); void markerUnselectAllCmd(); void markerUnselectCmd(int); // not used void markerUnselectCmd(const char*); // not used void markerVectorCmd(int, const Vector&, Coord::InternalSystem, double, double); void markerVectorCmd(int, const Vector&, Coord::CoordSystem, Coord::SkyFrame, double, Coord::CoordSystem, Coord::SkyDist, double); void markerVectorArrowCmd(int, int); void regionHighliteBeginCmd(const Vector& v) {regionSelectBeginCmd(v);} void regionHighliteMotionCmd(const Vector& v) {regionSelectMotionCmd(v);} void regionHighliteEndCmd(); void regionHighliteShiftEndCmd(); void regionSelectBeginCmd(const Vector&); void regionSelectMotionCmd(const Vector&); void regionSelectEndCmd(); void regionSelectShiftEndCmd(); // Mask Commands void getMaskColorCmd(); void getMaskMarkCmd(); void getMaskTransparencyCmd(); void maskColorCmd(const char*); void maskClearCmd(); void maskMarkCmd(int m) {maskMark=m;} void maskTransparencyCmd(float); // NaN Commands void getNANColorCmd(); void nanColorCmd(const char*); // Pan Zoom Rotate Orient Commands void centerCmd(); void getOrientCmd(); void getRotateCmd(); void getPanPreserveCmd(); void getZoomCmd(); void orientCmd(Coord::Orientation); virtual void panCmd(const Vector&) =0; virtual void panCmd(const Vector&, const Vector&) =0; virtual void panCmd(const Vector&, Coord::CoordSystem, Coord::SkyFrame) =0; virtual void panToCmd(const Vector&) =0; virtual void panToCmd(const Vector&, Coord::CoordSystem, Coord::SkyFrame) =0; void panBeginCmd(const Vector&); void panMotionCmd(const Vector&); virtual void panEndCmd(const Vector&) =0; virtual void panBBoxCmd(const Vector&) =0; void panPreserveCmd(int r) {preservePan = r;} void rotateCmd(double); virtual void rotateBeginCmd() {} virtual void rotateMotionCmd(double) {} virtual void rotateEndCmd() {} void rotateToCmd(double); void getIRAFAlignCmd(); void irafAlignCmd(int); void getWCSAlignCmd(); void wcsAlignCmd(int); // used by backup void wcsAlignCmd(int, Coord::CoordSystem, Coord::SkyFrame); void wcsAlignCmd(int, FitsImage*, Coord::CoordSystem, Coord::SkyFrame); void zoomCmd(const Vector&); void zoomToCmd(const Vector&); virtual void zoomAboutCmd(const Vector&, const Vector&) =0; virtual void zoomAboutCmd(const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyFrame) =0; virtual void zoomToAboutCmd(const Vector&, const Vector&) =0; virtual void zoomToAboutCmd(const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyFrame) =0; virtual void zoomToFitCmd(double) =0; // Panner Commands void pannerCmd(int); void pannerCmd(char*, int, int); void updatePannerCmd(); // backward compatiblity void pannerCmd(Coord::CoordSystem, Coord::SkyFrame) {} // Pixel Table Commands void getPixelTableCmd(const Vector&, Coord::InternalSystem, int, int, char*); // Print Commands #ifdef MAC_OSX_TK void macosxPrintCmd(); #endif #ifdef __WIN32 void win32PrintCmd(); #endif // Scale Commands void colorScaleCmd(FrScale::ColorScaleType); void colorScaleLogCmd(double); void getColorMapLevelCmd(int); void getColorMapLevelCmd(int, double, double, FrScale::ColorScaleType, float); void getColorMapLevelCmd(int, const Vector&, Coord::InternalSystem); void getColorScaleCmd(); void getColorScaleLevelCmd(int, double, double, FrScale::ColorScaleType, float); void getColorScaleLogCmd(); // Smooth Commands void getSmoothFunctionCmd(); void getSmoothRadiusCmd(); void hasSmoothCmd(); void smoothCmd(int, int); void smoothDeleteCmd(); // Threads Commands void getThreadsCmd(); void threadsCmd(int); // WCS void wcsAppendCmd(int, int); void wcsAppendCmd(int, const char*); void wcsAppendTxtCmd(int, const char*); void wcsReplaceCmd(int, int); void wcsReplaceCmd(int, const char*); void wcsReplaceTxtCmd(int, const char*); void wcsResetCmd(int); // RGB Commands virtual void getRGBChannelCmd() =0; virtual void getRGBViewCmd() =0; virtual void getRGBSystemCmd() =0; virtual void setRGBChannelCmd(const char*) {} virtual void setRGBViewCmd(int, int, int) {} virtual void setRGBSystemCmd(Coord::CoordSystem) {} // 3d virtual void get3dBorderCmd() =0; virtual void get3dBorderColorCmd() =0; virtual void get3dCompassCmd() =0; virtual void get3dCompassColorCmd() =0; virtual void get3dHighliteCmd() =0; virtual void get3dHighliteColorCmd() =0; virtual void get3dScaleCmd() =0; virtual void get3dViewCmd() =0; virtual void get3dViewPointCmd() =0; virtual void get3dRenderMethodCmd() =0; virtual void get3dRenderBackgroundCmd() =0; virtual void set3dBorderCmd(int) {} virtual void set3dBorderColorCmd(const char*) {} virtual void set3dCompassCmd(int) {} virtual void set3dCompassColorCmd(const char*) {} virtual void set3dHighliteCmd(int) {} virtual void set3dHighliteColorCmd(const char*) {} virtual void set3dScaleCmd(double) {} virtual void set3dViewCmd(float, float) {} virtual void set3dViewPointCmd(const Vector3d&, const Vector&) {} virtual void set3dRenderMethodCmd(int) {} virtual void set3dRenderBackgroundCmd(int) {} virtual void set3dPreserveCmd() {} virtual void view3dBeginCmd(float, float) {} virtual void view3dMotionCmd(float, float) {} virtual void view3dEndCmd(float, float) {} }; #endif saods9/tksao/frame/basebox.C000644 000765 000000 00000017171 12765621307 016346 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "basebox.h" #include "fitsimage.h" BaseBox::BaseBox(Base* p, const Vector& ctr, double ang) : BaseMarker(p, ctr, ang) { numPoints_ = 5; vertices_ = NULL; } BaseBox::BaseBox(Base* p, const Vector& ctr, double ang, const char* clr, int* dsh, int w, const char* f, const char* t, unsigned short prop, const char* c, const List& tag, const List& cb) : BaseMarker(p, ctr, ang, clr, dsh, w, f, t, prop, c, tag, cb) { numPoints_ = 5; vertices_ = NULL; } BaseBox::BaseBox(const BaseBox& a) : BaseMarker(a) { numPoints_ = a.numPoints_; vertices_ = NULL; } BaseBox::~BaseBox() { deleteVertices(); } void BaseBox::renderX(Drawable drawable, Coord::InternalSystem sys, RenderMode mode) { GC lgc = renderXGC(mode); newVertices(); for (int ii=0; iimapFromRef(vertices_[ii][jj],sys); pp[jj].x = (short)v[0]; pp[jj].y = (short)v[1]; } XDrawLines(display, drawable, lgc, pp, numPoints_, CoordModeOrigin); delete [] pp; } deleteVertices(); } void BaseBox::renderPS(int mode) { renderPSGC(mode); newVertices(); for (int ii=0; iimapFromRef(vertices_[ii][jj],Coord::CANVAS); if (jj==0) str << "newpath " << v.TkCanvasPs(parent->canvas) << " moveto" << endl; else str << v.TkCanvasPs(parent->canvas) << " lineto" << endl; } str << "stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } deleteVertices(); } #ifdef MAC_OSX_TK void BaseBox::renderMACOSX() { renderMACOSXGC(); newVertices(); for (int ii=0; iimapFromRef(vertices_[ii][jj],Coord::CANVAS); macosxDrawLines(vv, numPoints_); delete [] vv; } deleteVertices(); } #endif #ifdef __WIN32 void BaseBox::renderWIN32() { renderWIN32GC(); newVertices(); for (int ii=0; iimapFromRef(vertices_[ii][jj],Coord::CANVAS); win32DrawLines(vv, numPoints_); delete [] vv; } deleteVertices(); } #endif // Support void BaseBox::updateHandles() { // handles are in canvas coords // we can't garantee that the radii have been sorted yet // also, annuli[i] could be negative if (handle) delete [] handle; handle = new Vector[numHandle]; Vector max; for(int ii=0; ii1) for (int ii=0; ii=ss[0]/2 || pp[1]<=-ss[1]/2 || pp[1]>ss[1]/2) return 0; else return 1; } Vector BaseBox::intersect(Vector rr, double aa) { // special cases if (!rr[0] || !rr[1]) return Vector(); double ang = zeroTWOPI(aa); double phi = rr.angle(); if (ang >= 0 && ang < phi) return Vector(rr[0],-rr[0]*tan(ang)); else if (ang >= phi && ang < M_PI-phi) return Vector(rr[1]/tan(ang),-rr[1]); else if (ang >= M_PI-phi && ang < M_PI+phi) return Vector(-rr[0],rr[0]*tan(ang)); else if (ang >= M_PI+phi && ang < M_TWOPI-phi) return Vector(-rr[1]/tan(ang),rr[1]); else return Vector(rr[0],-rr[0]*tan(ang)); } void BaseBox::newVertices() { if (vertices_) deleteVertices(); if (teq(startAng_,stopAng_-M_TWOPI,FLT_EPSILON)) newVerticesA(); else newVerticesB(); } void BaseBox::newVerticesA() { Matrix mm = fwdMatrix(); numPoints_ = 5; vertices_ = new Vector*[numAnnuli_+1]; for (int i=0; i=b1) && (a1b1) && (a2<=b2)) *s2 =1; if (((*s1) && (!(*s2))) || ((*s1) && (*s2))) vertBPrep(a1,a2,b1,b2,ii,cnt); if (*s1&&*s2) *s1=*s2=0; } void BaseBox::vertBPrep(double a1, double a2, double ll, double ul, int ii, int* cnt) { if (!(a1 >= ll) && (a1 <= ul)) a1 = ll; if (!(a2 >= ll) && (a2 <= ul)) a2 = ul; if (a1 > a2) { vertBSeg(ll,a2,ii,cnt); vertBSeg(a1,ul,ii,cnt); } else vertBSeg(a1,a2,ii,cnt); } void BaseBox::vertBSeg(double ang1, double ang2, int ii, int* cnt) { Vector rr = (annuli_[ii]/2).abs(); Matrix mm = fwdMatrix(); vertices_[ii][(*cnt)++] = intersect(rr,ang1)*mm; vertices_[ii][(*cnt)] = intersect(rr,ang2)*mm; } void BaseBox::deleteVertices() { if (vertices_) { for (int i=0; i& tag, const List& cb); BaseBox(const BaseBox&); virtual ~BaseBox(); virtual Marker* dup() =0; int isIn(const Vector& vv) {return isIn(vv, Coord::CANVAS);} int isIn(const Vector& vv, Coord::InternalSystem sys) {return isIn(vv,sys,numAnnuli_-1);} int isIn(const Vector& vv, Coord::InternalSystem sys, int nn) {return isInRef(bckMap(vv,sys),nn);} virtual int isIn(const Vector& vv, Coord::InternalSystem sys, int nn, int aa) {return isInRef(bckMap(vv,sys),nn);} // valid for non-fixed only int isIn(const Vector& vv, const Matrix& bck) {return isIn(vv,bck,numAnnuli_-1);} int isIn(const Vector& vv, const Matrix& bck, int nn) {return isInRef(vv*bck,nn);} }; #endif saods9/tksao/frame/basecommand.C000644 000765 000000 00000217063 12766070767 017207 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "fdstream.hpp" #include #include "base.h" #include "context.h" #include "fitsimage.h" #include "mmap.h" #include "outfile.h" #include "outchannel.h" #include "outsocket.h" #include "sigbus.h" void Base::axesOrderCmd(int order) { currentContext->setAxesOrder(order); if (currentContext->fits) { if (!preserveMarkers) { // delete markers userMarkers.deleteAll(); undoUserMarkers.deleteAll(); pasteUserMarkers.deleteAll(); } catalogMarkers.deleteAll(); undoCatalogMarkers.deleteAll(); pasteCatalogMarkers.deleteAll(); // analysisMarkers.deleteAll(); // undoAnalysisMarkers.deleteAll(); // pasteAnalysisMarkers.deleteAll(); currentContext->contourDeleteFV(); currentContext->contourDeleteAux(); // don't clear the grid, we can reconstruct a new grid // if (grid) // delete grid; // grid = NULL; loadDone(1,IMG); } } void Base::bgColorCmd(const char* color) { if (bgColorName) delete [] bgColorName; bgColorName = dupstr(color); bgColor = getXColor(bgColorName); update(BASE); } void Base::binCmd(const Vector& b, const Vector& vv, const char* x, const char* y, const char* filter) { currentContext->setBinToFactor(b); currentContext->setBinDepth(1); if (currentContext->fits) { currentContext->fits->setBinX(x); currentContext->fits->setBinY(y); currentContext->fits->setBinFilter(filter); } Matrix mm = currentContext->bin(vv); updateBin(mm); } void Base::binCmd(const Vector& b, const char* x, const char* y, const char* filter) { currentContext->setBinToFactor(b); currentContext->setBinDepth(1); if (currentContext->fits) { currentContext->fits->setBinX(x); currentContext->fits->setBinY(y); currentContext->fits->setBinFilter(filter); } Matrix mm = currentContext->binCenter(); updateBin(mm); } void Base::binCmd(const Vector& b, int d, const Vector& lim, const Vector& vv, const char* x, const char* y, const char* z, const char* filter) { currentContext->setBinToFactor(b); currentContext->setBinDepth(d); if (currentContext->fits) { currentContext->fits->setBinX(x); currentContext->fits->setBinY(y); currentContext->fits->setBinZ(z); currentContext->fits->setBinFilter(filter); currentContext->fits->setBinColMinMax(z,lim); } Matrix mm = currentContext->bin(vv); updateBin(mm); } void Base::binCmd(const Vector& b, int d, const Vector& lim, const char* x, const char* y, const char* z, const char* filter) { currentContext->setBinToFactor(b); currentContext->setBinDepth(d); if (currentContext->fits) { currentContext->fits->setBinX(x); currentContext->fits->setBinY(y); currentContext->fits->setBinZ(z); currentContext->fits->setBinFilter(filter); currentContext->fits->setBinColMinMax(z,lim); } Matrix mm = currentContext->binCenter(); updateBin(mm); } void Base::binAboutCmd() { Matrix mm = currentContext->binCenter(); updateBin(mm); } void Base::binAboutCmd(const Vector& vv) { Matrix mm = currentContext->bin(vv); updateBin(mm); } void Base::binBufferSizeCmd(int size) { currentContext->setBinBufferSize(size); Matrix mm = currentContext->binCursor(); updateBin(mm); } void Base::binColsCmd(const char* x, const char* y, const char* z) { if (currentContext->fits) { currentContext->fits->setBinX(x); currentContext->fits->setBinY(y); currentContext->fits->setBinZ(z); } Matrix mm = currentContext->binCursor(); updateBin(mm); } void Base::binDepthCmd(int d) { currentContext->setBinDepth(d); Matrix mm = currentContext->binCursor(); updateBin(mm); } void Base::binFactorCmd(const Vector& bb) { currentContext->setBinFactor(bb); Matrix mm = currentContext->binCursor(); updateBin(mm); } void Base::binFactorAboutCmd(const Vector& bb, const Vector& vv) { currentContext->setBinFactor(bb); Matrix mm = currentContext->bin(vv); updateBin(mm); } void Base::binFactorToCmd(const Vector& bb) { currentContext->setBinToFactor(bb); Matrix mm = currentContext->binCursor(); updateBin(mm); } void Base::binFactorToAboutCmd(const Vector& bb, const Vector& vv) { currentContext->setBinToFactor(bb); Matrix mm = currentContext->bin(vv); updateBin(mm); } void Base::binFunctionCmd(FitsHist::Function func) { currentContext->setBinFunction(func); Matrix mm = currentContext->binCursor(); updateBin(mm); } void Base::binFilterCmd(const char* filter) { if (currentContext->fits) currentContext->fits->setBinFilter(filter); Matrix mm = currentContext->binCursor(); updateBin(mm); } void Base::blockCmd(const Vector& bb) { Vector vv = currentContext->setBlockFactor(bb); currentContext->block(); currentContext->analysis(); updateBlock(vv); } void Base::blockToCmd(const Vector& bb) { Vector vv = currentContext->setBlockToFactor(bb); currentContext->block(); currentContext->analysis(); updateBlock(vv); } void Base::centerCmd() { centerImage(); update(MATRIX); } void Base::clearCmd() { unloadAllFits(); reset(); } void Base::clipScopeCmd(FrScale::ClipScope ss) { if (currentContext->updateClipScope(ss)) { currentContext->clearHist(); currentContext->updateClip(); updateColorScale(); update(BASE); } } void Base::clipModeCmd(FrScale::ClipMode mm) { if (currentContext->updateClipMode(mm)) { currentContext->updateClip(); updateColorScale(); update(BASE); } } void Base::clipModeCmd(float per) { if (currentContext->updateClipMode(per)) { currentContext->updateClip(); updateColorScale(); update(BASE); } } void Base::clipUserCmd(double ll, double hh) { if (currentContext->updateUser(ll,hh)) { currentContext->updateClip(); updateColorScale(); update(BASE); } } void Base::clipMinMaxCmd(FrScale::MinMaxMode mm, int ss) { if (currentContext->updateMinMax(mm,ss)) { currentContext->clearHist(); currentContext->updateClip(); updateColorScale(); update(BASE); } } // backward compatibility backup void Base::clipMinMaxModeCmd(FrScale::MinMaxMode mm) { if (currentContext->updateMinMaxMode(mm)) { currentContext->clearHist(); currentContext->updateClip(); updateColorScale(); update(BASE); } } // backward compatibility backup void Base::clipMinMaxSampleCmd(int ss) { if (currentContext->updateMinMaxSample(ss)) { currentContext->clearHist(); currentContext->updateClip(); updateColorScale(); update(BASE); } } void Base::clipZScaleCmd(float cc, int ss, int ll) { if (currentContext->updateZscale(cc,ss,ll)) { currentContext->updateClip(); updateColorScale(); update(BASE); } } // backward compatibility backup void Base::clipZScaleContrastCmd(float cc) { if (currentContext->updateZscaleContrast(cc)) { currentContext->updateClip(); updateColorScale(); update(BASE); } } // backward compatibility backup void Base::clipZScaleSampleCmd(int ss) { if (currentContext->updateZscaleSample(ss)) { currentContext->updateClip(); updateColorScale(); update(BASE); } } // backward compatibility backup void Base::clipZScaleLineCmd(int ll) { if (currentContext->updateZscaleLine(ll)) { currentContext->updateClip(); updateColorScale(); update(BASE); } } void Base::colorbarTagCmd(const char* str) { if (colorbartag) delete [] colorbartag; colorbartag = dupstr(str); } void Base::cropCmd() { currentContext->resetSecMode(); FitsImage* sptr = currentContext->fits; while (sptr) { sptr->setCropParams(currentContext->datasec()); sptr = sptr->nextSlice(); } currentContext->updateClip(); currentContext->updateContours(); updateColorScale(); update(MATRIX); updateMarkerCBs(&userMarkers); updateMarkerCBs(&catalogMarkers); // updateMarkerCBs(&analysisMarkers); } // used for Backup void Base::cropCmd(const Vector& aa, const Vector& bb, Coord::CoordSystem sys, Coord::SkyFrame sky) { FitsImage* ptr = currentContext->fits; if (!ptr) return; Vector ss = ptr->mapToRef(aa,sys,sky); Vector tt = ptr->mapToRef(bb,sys,sky); currentContext->setSecMode(FrScale::CROPSEC); FitsImage* sptr = ptr; while (sptr) { sptr->setCropParams(ss*sptr->refToData, tt*sptr->refToData, currentContext->datasec()); sptr = sptr->nextSlice(); } currentContext->updateClip(); currentContext->updateContours(); updateColorScale(); update(MATRIX); updateMarkerCBs(&userMarkers); updateMarkerCBs(&catalogMarkers); // updateMarkerCBs(&analysisMarkers); } void Base::cropCenterCmd(const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky, const Vector& wh, Coord::CoordSystem dsys, Coord::SkyDist dist) { FitsImage* ptr = currentContext->fits; if (!ptr) return; // params are in DATA coords Vector cc = ptr->mapToRef(vv,sys,sky)*ptr->refToData; Vector dd = ptr->mapLenToRef(wh,dsys,dist)*ptr->refToData; Vector ll = (cc-dd/2).round(); Vector ur = (cc+dd/2).round(); currentContext->setSecMode(FrScale::CROPSEC); FitsImage* sptr = ptr; while (sptr) { sptr->setCropParams(ll,ur,currentContext->datasec()); sptr = sptr->nextSlice(); } currentContext->updateClip(); currentContext->updateContours(); updateColorScale(); update(MATRIX); updateMarkerCBs(&userMarkers); updateMarkerCBs(&catalogMarkers); // updateMarkerCBs(&analysisMarkers); } void Base::cropBeginCmd(const Vector& vv) { cropBegin = vv; cropEnd = vv; } void Base::cropMotionCmd(const Vector& vv) { Vector ss = mapToRef(cropBegin, Coord::CANVAS); // erase if (cropBegin[0]!=cropEnd[0] || cropBegin[1]!=cropEnd[1]) { Vector tt = mapToRef(cropEnd, Coord::CANVAS); Vector ll = mapFromRef(ss, Coord::CANVAS); Vector lr = mapFromRef(Vector(tt[0],ss[1]), Coord::CANVAS); Vector ur = mapFromRef(tt, Coord::CANVAS); Vector ul = mapFromRef(Vector(ss[0],tt[1]), Coord::CANVAS); BBox bb(ll); bb.bound(lr); bb.bound(ur); bb.bound(ul); redrawNow(bb.expand(2)); } cropEnd = vv; // and draw to window { Vector tt = mapToRef(cropEnd, Coord::CANVAS); Vector ll = mapFromRef(ss, Coord::WINDOW); Vector lr = mapFromRef(Vector(tt[0],ss[1]), Coord::WINDOW); Vector ur = mapFromRef(tt, Coord::WINDOW); Vector ul = mapFromRef(Vector(ss[0],tt[1]), Coord::WINDOW); XDrawLine(display,Tk_WindowId(tkwin),selectGCXOR,ll[0],ll[1],lr[0],lr[1]); XDrawLine(display,Tk_WindowId(tkwin),selectGCXOR,lr[0],lr[1],ur[0],ur[1]); XDrawLine(display,Tk_WindowId(tkwin),selectGCXOR,ur[0],ur[1],ul[0],ul[1]); XDrawLine(display,Tk_WindowId(tkwin),selectGCXOR,ul[0],ul[1],ll[0],ll[1]); } } void Base::cropEndCmd(const Vector& vv) { Vector ss = mapToRef(cropBegin, Coord::CANVAS); // erase if (cropBegin[0]!=cropEnd[0] || cropBegin[1]!=cropEnd[1]) { Vector tt = mapToRef(cropEnd, Coord::CANVAS); Vector ll = mapFromRef(ss, Coord::CANVAS); Vector lr = mapFromRef(Vector(tt[0],ss[1]), Coord::CANVAS); Vector ur = mapFromRef(tt, Coord::CANVAS); Vector ul = mapFromRef(Vector(ss[0],tt[1]), Coord::CANVAS); BBox bb(ll); bb.bound(lr); bb.bound(ur); bb.bound(ul); redrawNow(bb.expand(2)); } // and crop cropEnd = vv; if (cropBegin[0]!=cropEnd[0] || cropBegin[1]!=cropEnd[1]) { Vector tt = mapToRef(cropEnd, Coord::CANVAS); if (!isMosaic()) { currentContext->setSecMode(FrScale::CROPSEC); FitsImage* sptr = currentContext->fits; while (sptr) { sptr->setCropParams(ss*sptr->refToData, tt*sptr->refToData, currentContext->datasec()); sptr = sptr->nextSlice(); } } else { FitsImage* ptr1 =NULL; FitsImage* ptr2 =NULL; if ((ptr1=isInFits(cropBegin,Coord::CANVAS,NULL)) == (ptr2=isInFits(cropEnd,Coord::CANVAS,NULL))) { currentContext->setSecMode(FrScale::CROPSEC); // clear any previous params FitsImage* ptr = currentContext->fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->setCropParams(currentContext->datasec()); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } FitsImage* sptr = ptr1; while (sptr) { sptr->setCropParams(ss*sptr->refToData, tt*sptr->refToData, currentContext->datasec()); sptr = sptr->nextSlice(); } } } else { currentContext->resetSecMode(); currentContext->setCrop3dParams(); FitsImage* sptr = currentContext->fits; while (sptr) { sptr->setCropParams(currentContext->datasec()); sptr = sptr->nextSlice(); } } currentContext->updateClip(); currentContext->updateContours(); updateColorScale(); update(MATRIX); updateMarkerCBs(&userMarkers); updateMarkerCBs(&catalogMarkers); // updateMarkerCBs(&analysisMarkers); } void Base::crop3dCmd() { currentContext->resetSecMode(); currentContext->setCrop3dParams(); currentContext->updateClip(); currentContext->updateContours(); updateColorScale(); update(MATRIX); updateMarkerCBs(&userMarkers); updateMarkerCBs(&catalogMarkers); // updateMarkerCBs(&analysisMarkers); } void Base::crop3dCmd(double z0, double z1, Coord::CoordSystem sys) { // use first slice FitsImage* ptr = currentContext->fits; if (!ptr) return; // ff/tt ranges 0-n double ff = ptr->mapToRef3axis(z0,sys,2); double tt = ptr->mapToRef3axis(z1,sys,2); // params is a BBOX in DATA coords 0-n currentContext->setCrop3dParams(ff-.5,tt+.5); // set current slice if needed // setSlice() IMAGE (ranges 1-n) // context->slice() IMAGE (ranges 1-n) double sl = currentContext->slice(2)-.5; if (sltt) setSlice(2,tt+.5); currentContext->setSecMode(FrScale::CROPSEC); currentContext->updateClip(); updateColorScale(); update(MATRIX); updateMarkerCBs(&userMarkers); updateMarkerCBs(&catalogMarkers); // updateMarkerCBs(&analysisMarkers); } void Base::crosshairCmd(int which) { useCrosshair = which ? 1 : 0; update(PIXMAP); } void Base::crosshairCmd(const Vector& vv, Coord::InternalSystem sys) { useCrosshair = 1; crosshair = mapToRef(vv, sys); update(PIXMAP); } void Base::crosshairCmd(const Vector& v, Coord::CoordSystem sys, Coord::SkyFrame sky) { useCrosshair = 1; if (currentContext->cfits) crosshair = currentContext->cfits->mapToRef(v, sys, sky); update(PIXMAP); } void Base::crosshairWarpCmd(const Vector& vv) { useCrosshair = 1; // use matrix, not map() for 3d Vector rr = crosshair*refToCanvas; rr += vv; crosshair = rr*canvasToRef; update(PIXMAP); updateMagnifier(); } void Base::colorScaleCmd(FrScale::ColorScaleType s) { if (currentContext->colorScaleType() != s) { currentContext->setColorScaleType(s); updateColorScale(); update(BASE); } } void Base::colorScaleLogCmd(double exp) { if (currentContext->updateExpo(exp)) { updateColorScale(); update(BASE); } } void Base::contourAppendCmd(ContourLevel* cl) { currentContext->contourAppendAux(cl); update(PIXMAP); } void Base::contourCreateCmd(const char* color, int width, int dash, FVContour::Method method, int numlevel, int smooth, FrScale::ColorScaleType colorScaleType, float expo, float clipMode, Vector limits, const char* level) { if (DebugPerf) cerr << "Base::contourCreate()" << endl; currentContext->contourCreateFV(color, width, dash, method, numlevel, smooth, colorScaleType, expo, clipMode, limits, level); update(PIXMAP); } void Base::contourDeleteCmd() { currentContext->contourDeleteFV(); update(PIXMAP); } void Base::contourDeleteAuxCmd() { currentContext->contourDeleteAux(); update(PIXMAP); } void Base::contourLoadCmd(const char* fn) { ifstream str(fn); if (str) currentContext->contourLoadAux(str); update(PIXMAP); } void Base::contourLoadCmd(const char* fn, const char* color, int width, int dash) { ifstream str(fn); if (str) currentContext->contourLoadAux(str, color, width, dash); update(PIXMAP); } void Base::contourLoadCmd(const char* fn, Coord::CoordSystem sys, Coord::SkyFrame sky, const char* color, int width, int dash) { ifstream str(fn); if (str) currentContext->contourLoadAux(str, sys, sky, color, width, dash); update(PIXMAP); } void Base::contourPasteCmd(const char* var) { const char* ccmd = Tcl_GetVar(interp, var, TCL_LEAVE_ERR_MSG); if (!ccmd) { result = TCL_ERROR; return; } // only make command string as long as needed // or the rest will be processed as garbage int len = strlen(ccmd)+2; char* buf = new char[len]; memcpy(buf, ccmd, len); // add terminator to make parser happy buf[len-2] = '\n'; buf[len-1] = '\0'; string x(buf); istringstream str(x); if (str) currentContext->contourLoadAux(str); delete [] buf; update(PIXMAP); } void Base::contourPasteCmd(const char* var, const char* color, int width, int dash) { const char* ccmd = Tcl_GetVar(interp, var, TCL_LEAVE_ERR_MSG); if (!ccmd) { result = TCL_ERROR; return; } // only make command string as long as needed // or the rest will be processed as garbage int len = strlen(ccmd)+2; char* buf = new char[len]; memcpy(buf, ccmd, len); // add terminator to make parser happy buf[len-2] = '\n'; buf[len-1] = '\0'; string x(buf); istringstream str(x); if (str) currentContext->contourLoadAux(str, color, width, dash); delete [] buf; update(PIXMAP); } void Base::contourSaveCmd(const char* fn, Coord::CoordSystem sys, Coord::SkyFrame sky) { ofstream str(fn); if (str) currentContext->contourListFV(str, sys, sky); } void Base::contourSaveAuxCmd(const char* fn, Coord::CoordSystem sys, Coord::SkyFrame sky) { ofstream str(fn); if (str) currentContext->contourListAux(str, sys, sky); } void Base::DATASECCmd(int which) { if (currentContext->updateDataSec(which)) { currentContext->resetSecMode(); currentContext->updateClip(); currentContext->updateContours(); updateColorScale(); update(MATRIX); } } void Base::fitsyHasExtCmd(const char* fn) { // verify that we have an ext specified if (fn && (fn[strlen(fn)-1] != ']')) { Tcl_AppendResult(interp, "0", NULL); return; } FitsFile* ext = new FitsFitsMMap(fn, FitsFile::EXACT); if (ext->isValid()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); delete ext; return; } void Base::getAxesOrderCmd() { printInteger(currentContext->axesOrder()); } void Base::getBgColorCmd() { Tcl_AppendResult(interp, bgColorName, NULL); } void Base::getBinCursorCmd() { if (currentContext->fits) { ostringstream str; str << currentContext->fits->getHistCursor() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } else Tcl_AppendResult(interp, "0 0", NULL); } void Base::getBinColsCmd() { if (currentContext->fits && currentContext->fits->isHist()) { if (currentContext->binDepth()>1) Tcl_AppendResult(interp, currentContext->fits->getHistX(), " ", currentContext->fits->getHistY(), " ", currentContext->fits->getHistZ(), NULL); else Tcl_AppendResult(interp, currentContext->fits->getHistX(), " ", currentContext->fits->getHistY(), NULL); } else Tcl_AppendResult(interp, "", NULL); } void Base::getBinColsMinMaxCmd(const char* col) { if (currentContext->fits && col && *col) { ostringstream str; str << currentContext->fits->getHistColMinMax(col) << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } } void Base::getBinColsDimCmd(const char* col) { if (currentContext->fits && col && *col) { ostringstream str; str << currentContext->fits->getHistColDim(col) << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } else Tcl_AppendResult(interp, "0 0", NULL); } void Base::getBinDepthCmd() { printDouble(currentContext->binDepth()); } void Base::getBinFactorCmd() { ostringstream str; str << currentContext->binFactor() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getBinFunctionCmd() { switch (currentContext->binFunction()) { case FitsHist::AVERAGE: Tcl_AppendResult(interp, "average", NULL); return; case FitsHist::SUM: Tcl_AppendResult(interp, "sum", NULL); return; } } void Base::getBinBufferSizeCmd() { printInteger(currentContext->binBufferSize()); } void Base::getBinFilterCmd() { if (currentContext->fits && currentContext->fits->isHist()) Tcl_AppendResult(interp, currentContext->fits->getHistFilter(), NULL); else Tcl_AppendResult(interp, "", NULL); } void Base::getBinListCmd() { if (currentContext->fits && currentContext->fits->isHist()) { char* cols = currentContext->fits->getHistList(); Tcl_AppendResult(interp, cols, NULL); delete [] cols; } else Tcl_AppendResult(interp, "", NULL); } void Base::getBitpixCmd() { if (currentContext->cfits) printInteger(currentContext->cfits->bitpix()); else Tcl_AppendResult(interp, "32", NULL); } void Base::getBlockCmd() { ostringstream str; str << currentContext->blockFactor() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getClipCmd() { if (DebugPerf) cerr << "getClipCmd()" << endl; ostringstream str; str << currentContext->getClip() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getClipCmd(float per) { if (DebugPerf) cerr << "getClipCmd(float)" << endl; FrScale::ClipMode cm = (per == 100) ? FrScale::MINMAX : FrScale::AUTOCUT; float ac = per; ostringstream str; str << currentContext->getClip(cm, ac) << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getClipCmd(FrScale::ClipMode cm) { if (DebugPerf) cerr << "getClipCmd(FrScale::ClipMode)" << endl; ostringstream str; str << currentContext->getClip(cm, currentContext->autoCutPer()) << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getClipMinMaxModeCmd() { switch (currentContext->minmaxMode()) { case FrScale::SCAN: Tcl_AppendResult(interp, "scan", NULL); return; case FrScale::SAMPLE: Tcl_AppendResult(interp, "sample", NULL); return; case FrScale::DATAMIN: Tcl_AppendResult(interp, "datamin", NULL); return; case FrScale::IRAFMIN: Tcl_AppendResult(interp, "irafmin", NULL); return; } } void Base::getClipMinMaxSampleCmd() { printInteger(currentContext->minmaxSample()); } void Base::getClipModeCmd() { switch (currentContext->clipMode()) { case FrScale::MINMAX: Tcl_AppendResult(interp, "minmax", NULL); break; case FrScale::ZSCALE: Tcl_AppendResult(interp, "zscale", NULL); break; case FrScale::ZMAX: Tcl_AppendResult(interp, "zmax", NULL); break; case FrScale::AUTOCUT: printDouble(currentContext->autoCutPer()); break; case FrScale::USERCLIP: Tcl_AppendResult(interp, "user", NULL); break; } } void Base::getClipPreserveCmd() { // backward compatibility // used by backup Tcl_AppendResult(interp, "0", NULL); } void Base::getClipScopeCmd() { switch (currentContext->clipScope()) { case FrScale::GLOBAL: Tcl_AppendResult(interp, "global", NULL); break; case FrScale::LOCAL: Tcl_AppendResult(interp, "local", NULL); break; } } void Base::getClipUserCmd() { ostringstream str; str << currentContext->clipUser() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getClipZScaleContrastCmd() { ostringstream str; str << currentContext->zContrast() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getClipZScaleSampleCmd() { ostringstream str; str << currentContext->zSample() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getClipZScaleLineCmd() { ostringstream str; str << currentContext->zLine() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getColorbarTagCmd() { if (colorbartag) Tcl_AppendResult(interp, colorbartag, NULL); else Tcl_AppendResult(interp, "", NULL); } void Base::getColorMapLevelCmd(int count) { if (currentContext->cfits) { getColorMapLevelCmd(count, currentContext->cfits->low(), currentContext->cfits->high(), currentContext->colorScaleType(), currentContext->expo()); } else getColorMapLevelCmd(count, currentContext->low(), currentContext->high(), currentContext->colorScaleType(), currentContext->expo()); } void Base::getColorMapLevelCmd(int count, const Vector& vv, Coord::InternalSystem ref) { if (currentContext->cfits) { if (FitsImage* ptr=isInCFits(vv,ref,NULL)) { getColorMapLevelCmd(count, ptr->low(), ptr->high(), currentContext->colorScaleType(), currentContext->expo()); return; } } getColorMapLevelCmd(count, currentContext->low(), currentContext->high(), currentContext->colorScaleType(), currentContext->expo()); } void Base::getColorMapLevelCmd(int count, double ll, double hh, FrScale::ColorScaleType scaleType, float expo) { if (inverseScale) delete inverseScale; inverseScale = NULL; switch (scaleType) { case FrScale::LINEARSCALE: inverseScale = new LinearInverseScale(count, ll, hh); break; case FrScale::LOGSCALE: inverseScale = new LogInverseScale(count, ll, hh, expo); break; case FrScale::POWSCALE: inverseScale = new PowInverseScale(count, ll, hh, expo); break; case FrScale::SQRTSCALE: inverseScale = new SqrtInverseScale(count, ll, hh); break; case FrScale::SQUAREDSCALE: inverseScale = new SquaredInverseScale(count, ll, hh); break; case FrScale::ASINHSCALE: inverseScale = new AsinhInverseScale(count, ll, hh); break; case FrScale::SINHSCALE: inverseScale = new SinhInverseScale(count, ll, hh); break; case FrScale::HISTEQUSCALE: inverseScale = new HistEquInverseScale(count, ll, hh, currentContext->histequ(), HISTEQUSIZE); break; case FrScale::IISSCALE: inverseScale = new IISInverseScale(count, ll, hh, currentContext->fits->iisz()); break; } if (inverseScale) { ostringstream str; str << inverseScale->size() << ' ' << inverseScale->level() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } } void Base::getColorScaleCmd() { switch (currentContext->colorScaleType()) { case FrScale::LINEARSCALE: Tcl_AppendResult(interp, "linear", NULL); break; case FrScale::LOGSCALE: Tcl_AppendResult(interp, "log", NULL); break; case FrScale::POWSCALE: Tcl_AppendResult(interp, "pow", NULL); break; case FrScale::SQRTSCALE: Tcl_AppendResult(interp, "sqrt", NULL); break; case FrScale::SQUAREDSCALE: Tcl_AppendResult(interp, "squared", NULL); break; case FrScale::ASINHSCALE: Tcl_AppendResult(interp, "asinh", NULL); break; case FrScale::SINHSCALE: Tcl_AppendResult(interp, "sinh", NULL); break; case FrScale::HISTEQUSCALE: Tcl_AppendResult(interp, "histequ", NULL); break; case FrScale::IISSCALE: Tcl_AppendResult(interp, "linear", NULL); break; } } void Base::getColorScaleLevelCmd(int count, double ll, double hh, FrScale::ColorScaleType scaleType, float expo) { InverseScale* scale; switch (scaleType) { case FrScale::LINEARSCALE: scale = new LinearInverseScale(count, ll, hh); break; case FrScale::LOGSCALE: scale = new LogInverseScale(count, ll, hh, expo); break; case FrScale::POWSCALE: scale = new PowInverseScale(count, ll, hh, expo); break; case FrScale::SQRTSCALE: scale = new SqrtInverseScale(count, ll, hh); break; case FrScale::SQUAREDSCALE: scale = new SquaredInverseScale(count, ll, hh); break; case FrScale::ASINHSCALE: scale = new AsinhInverseScale(count, ll, hh); break; case FrScale::SINHSCALE: scale = new SinhInverseScale(count, ll, hh); break; case FrScale::HISTEQUSCALE: scale = new HistEquInverseScale(count, ll, hh, currentContext->histequ(), HISTEQUSIZE); break; case FrScale::IISSCALE: scale = new IISInverseScale(count, ll, hh, currentContext->fits->iisz()); break; } ostringstream str; str << *scale << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); delete scale; } void Base::getColorScaleLogCmd() { ostringstream str; str << currentContext->expo() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getContourCmd(Coord::CoordSystem sys, Coord::SkyFrame sky) { ostringstream str; currentContext->contourListFV(str, sys, sky); str << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getContourMethodCmd() { Tcl_AppendResult(interp, currentContext->fvcontour().methodName(), NULL); } void Base::getContourClipCmd() { ostringstream str; str << currentContext->fvcontour().limits() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getContourClipModeCmd() { if (currentContext->fvcontour().clipMode() == FrScale::MINMAX) Tcl_AppendResult(interp, "minmax", NULL); else if (currentContext->fvcontour().clipMode() == FrScale::ZSCALE) Tcl_AppendResult(interp, "zscale", NULL); else if (currentContext->fvcontour().clipMode() == FrScale::ZMAX) Tcl_AppendResult(interp, "zmax", NULL); else if (currentContext->fvcontour().clipMode() == FrScale::USERCLIP) Tcl_AppendResult(interp, "user", NULL); else { ostringstream str; str << currentContext->fvcontour().clipMode() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } } void Base::getContourColorNameCmd() { Tcl_AppendResult(interp, currentContext->fvcontour().getColorName(), NULL); } void Base::getContourDashCmd() { if (currentContext->fvcontour().getDash()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::getContourLevelCmd() { Tcl_AppendResult(interp, currentContext->fvcontour().level(), NULL); } void Base::getContourLineWidthCmd() { ostringstream str; str << currentContext->fvcontour().getLineWidth() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getContourNumLevelCmd() { ostringstream str; str << currentContext->fvcontour().numLevel() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getContourSmoothCmd() { ostringstream str; str << currentContext->fvcontour().smooth() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getContourScaleCmd() { switch (currentContext->fvcontour().colorScaleType()) { case FrScale::LINEARSCALE: Tcl_AppendResult(interp, "linear", NULL); break; case FrScale::LOGSCALE: Tcl_AppendResult(interp, "log", NULL); break; case FrScale::POWSCALE: Tcl_AppendResult(interp, "pow", NULL); break; case FrScale::SQRTSCALE: Tcl_AppendResult(interp, "sqrt", NULL); break; case FrScale::SQUAREDSCALE: Tcl_AppendResult(interp, "squared", NULL); break; case FrScale::ASINHSCALE: Tcl_AppendResult(interp, "asinh", NULL); break; case FrScale::SINHSCALE: Tcl_AppendResult(interp, "sinh", NULL); break; case FrScale::HISTEQUSCALE: Tcl_AppendResult(interp, "histequ", NULL); break; case FrScale::IISSCALE: Tcl_AppendResult(interp, "linear", NULL); break; } } void Base::getContourScaleLogCmd() { ostringstream str; str << currentContext->fvcontour().expo() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getCoordCmd(const Vector& vv, Coord::CoordSystem out, Coord::SkyFrame sky, Coord::SkyFormat format) { if (FitsImage* ptr=isInCFits(vv,Coord::CANVAS,NULL)) printFromRef(ptr, mapToRef(vv,Coord::CANVAS), out, sky, format); else Tcl_AppendResult(interp, "0 0", NULL); } void Base::getCoord3axisCmd(double vv, Coord::CoordSystem in, Coord::CoordSystem out, int ss) { if (currentContext->cfits) { if (in==out) printDouble(vv); else { // use first slice double rr = currentContext->fits->mapToRef3axis(vv,in,ss); double tt = currentContext->fits->mapFromRef3axis(rr,out,ss); printDouble(tt); } } else Tcl_AppendResult(interp, "0", NULL); } // used for Backup void Base::getCropCmd(Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = currentContext->fits; if (!ptr) return; // params are in DATA coords FitsBound* params =ptr->getDataParams(currentContext->secMode()); Vector ll = Vector(params->xmin,params->ymin); Vector ur = Vector(params->xmax,params->ymax); printFromRef(ptr, ll*ptr->dataToRef, sys, sky, format); Tcl_AppendResult(interp, " ", NULL); printFromRef(ptr, ur*ptr->dataToRef, sys, sky, format); } void Base::getCropCenterCmd(Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, Coord::CoordSystem dcoord, Coord::SkyDist dist) { FitsImage* ptr = currentContext->fits; if (!ptr) return; // params are in DATA coords FitsBound* params = ptr->getDataParams(currentContext->secMode()); Vector ll = Vector(params->xmin,params->ymin); Vector ur = Vector(params->xmax,params->ymax); Vector cc = (ur-ll)/2.+ll; Vector dd = ur-ll; printFromRef(ptr, cc*ptr->dataToRef, sys, sky, format); Tcl_AppendResult(interp, " ", NULL); printLenFromRef(ptr, dd*ptr->dataToRef, dcoord, dist); } void Base::getCrop3dCmd(Coord::CoordSystem sys) { // use first slice FitsImage* ptr = currentContext->fits; if (!ptr) return; FitsZBound* zparams = currentContext->getDataParams(currentContext->secMode()); double ff = ptr->mapFromRef3axis(zparams->zmin+.5,sys,2); double tt = ptr->mapFromRef3axis(zparams->zmax-.5,sys,2); ostringstream str; str << ff << ' ' << tt << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getCrosshairCmd(Coord::InternalSystem sys) { ostringstream str; str << mapFromRef(crosshair, sys) << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getCrosshairCmd(Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { if (currentContext->cfits) printFromRef(currentContext->cfits, crosshair, sys, sky, format); else Tcl_AppendResult(interp, "0 0", NULL); } void Base::getCrosshairStatusCmd() { if (useCrosshair) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::getDATASECCmd() { if (currentContext->datasec()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::getDataValuesCmd(const Vector& vv, Coord::InternalSystem ref, const Vector& ss) { Vector rr; FitsImage* ptr = isInCFits(vv, ref, &rr); if (!ptr) return; Vector ll = rr - Vector((((Vector&)ss)[0]-1)/2,(((Vector&)ss)[1]-1)/2); SETSIGBUS for (int jj=0; jj<((Vector&)ss)[1]; jj++) { for (int ii=0; ii<((Vector&)ss)[0]; ii++) { Vector dd = (ll+Vector(ii,jj)) * ptr->refToData; FitsBound* params = ptr->getDataParams(currentContext->secMode()); if (dd[0]>=params->xmin && dd[0]xmax && dd[1]>=params->ymin && dd[1]ymax) Tcl_AppendResult(interp, (char*)ptr->getValue(dd), " ", NULL); } } CLEARSIGBUS } void Base::getDataValuesCmd(int which, const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky, const Vector& dd, char* var) { // clear an previous values Tcl_UnsetVar(interp,var,0); // find anchor point FitsImage* base = currentContext->cfits; for (int ii=1; iinextMosaic(); if (!base) { Tcl_SetVar(interp,var,"",0); result = TCL_ERROR; return; } Vector ll = base->mapLenToRef(dd,sys,Coord::DEGREE); Vector bb = base->mapToRef(vv,sys,sky); SETSIGBUS for (int ii=0; iilistFromRef(str,rr,sys,sky,Coord::DEGREES); int found = 0; FitsImage* ptr = currentContext->fits; while (ptr) { Vector ss = rr * ptr->refToData; FitsBound* params = ptr->getDataParams(currentContext->secMode()); if (ss[0]>=params->xmin && ss[0]xmax && ss[1]>=params->ymin && ss[1]ymax) { Tcl_SetVar2(interp,var,str.str().c_str(),(char*)ptr->getValue(ss),0); found = 1; break; } ptr = ptr->nextMosaic(); } if (!found) Tcl_SetVar2(interp,var,str.str().c_str(),"",0); } } CLEARSIGBUS } void Base::getFitsNAxesCmd() { printInteger(currentContext->naxes()); } void Base::getFitsCenterCmd(Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { if (keyContext && keyContext->fits) printFromRef(keyContext->fits, imageCenter(keyContext->secMode())* keyContext->fits->imageToRef, sys, sky, format); else Tcl_AppendResult(interp, "0 0", NULL); } void Base::getFitsCountCmd() { printInteger(fitsCount()); } void Base::getFitsDepthCmd(int ii) { printInteger(currentContext->naxis(ii)); } void Base::getFitsExtCmd(int which) { which = abs(which); FitsImage* rr = findAllFits(which); if (rr) { ostringstream str; str << rr->ext() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } else Tcl_AppendResult(interp, "", NULL); } void Base::getFitsExtCmd(const Vector& vv, Coord::InternalSystem ref) { if (FitsImage* ptr=isInCFits(vv,ref,NULL)) { ostringstream str; str << ptr->ext() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } else Tcl_AppendResult(interp, "", NULL); } void Base::getFitsHeaderCmd(int which) { int prim = which < 0 ? 1:0; which = abs(which); // modified for medatacube FitsImage* rr = findAllFits(which); if (rr) { char* hh = !prim ? rr->displayHeader() : rr->displayPrimary(); Tcl_AppendResult(interp, hh, NULL); delete [] hh; } else result = TCL_ERROR; } void Base::getFitsHeaderKeywordCmd(int which, const char* key) { which = abs(which); FitsImage* rr = findAllFits(which); if (rr) { char* value = rr->getKeyword(key); if (value) { Tcl_AppendResult(interp, value, NULL); delete [] value; return; } } else Tcl_AppendResult(interp, "", NULL); } void Base::getFitsHeaderWCSCmd(int which) { // no primary FitsImage* rr = findAllFits(which); if (rr) { char* hh = rr->displayWCS(); Tcl_AppendResult(interp, hh, NULL); delete [] hh; } else Tcl_AppendResult(interp, "", NULL); } void Base::getFitsHeightCmd() { if (currentContext->cfits) printInteger(currentContext->cfits->height()); else Tcl_AppendResult(interp, "0", NULL); } void Base::getFitsFileNameCmd(FileNameType type) { if (currentContext->cfits) Tcl_AppendResult(interp, currentContext->cfits->getFileName(type), NULL); else Tcl_AppendResult(interp, "", NULL); } void Base::getFitsFileNameCmd(int which, FileNameType type) { FitsImage* rr = findAllFits(which); if (rr) Tcl_AppendResult(interp, rr->getFileName(type), NULL); else Tcl_AppendResult(interp, "", NULL); } void Base::getFitsFileNameCmd(const Vector& vv, Coord::InternalSystem ref, FileNameType type) { if (FitsImage* ptr=isInCFits(vv,ref,NULL)) Tcl_AppendResult(interp, ptr->getFileName(type), NULL); else Tcl_AppendResult(interp, "", NULL); } void Base::getFitsObjectNameCmd() { if (currentContext->cfits) Tcl_AppendResult(interp, currentContext->cfits->objectKeyword(), NULL); else Tcl_AppendResult(interp, "", NULL); } void Base::getFitsSizeCmd() { ostringstream str; if (keyContext->fits) str << keyContext->fits->size() << ends; else str << Vector() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getFitsSizeCmd(Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyDist dist) { if (keyContext->fits) { if (!keyContext->fits->hasWCSCel(sys)) { Tcl_AppendResult(interp, "0 0", NULL); return; } BBox bb = imageBBox(keyContext->secMode()); Matrix mm = keyContext->fits->imageToRef; Vector ll = bb.ll * mm; Vector lr = bb.lr() * mm; Vector ur = bb.ur * mm; Vector ul = bb.ul() * mm; Vector ww[4]; ww[0] = keyContext->fits->mapFromRef(ll,sys,sky); ww[1] = keyContext->fits->mapFromRef(lr,sys,sky); ww[2] = keyContext->fits->mapFromRef(ur,sys,sky); ww[3] = keyContext->fits->mapFromRef(ul,sys,sky); // we need to check for the case of crossing 0 in ra // since ra is returned as 0 > ra > 360 { float min = 360; float max = 0; for (int ii=0; ii<4; ii++) { if (ww[ii][0]max) max=ww[ii][0]; } // ok, we have a problem if (max-min > 180) for (int ii=0; ii<4; ii++) if (ww[ii][0] > 180) ww[ii][0] -= 360; } BBox wbb(ww[0],ww[0]); for (int ii=1; ii<4; ii++) wbb.bound(ww[ii]); Vector ss(keyContext->fits->wcsdist(wbb.ll,wbb.lr(),sys), keyContext->fits->wcsdist(wbb.ll,wbb.ul(),sys)); ostringstream str; str << fixed; switch (dist) { case Coord::DEGREE: str << setprecision(7); break; case Coord::ARCMIN: str << setprecision(5); ss *= 60; break; case Coord::ARCSEC: str << setprecision(3); ss *= 60*60; break; } str << ss << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } else Tcl_AppendResult(interp, "0 0", NULL); } void Base::getFitsSliceCmd(int id) { int ss = currentContext->slice(id); if (ss>1) printInteger(ss); else Tcl_AppendResult(interp, "1", NULL); } void Base::getFitsSliceCmd(int id, Coord::CoordSystem sys) { if (currentContext->fits) { int ss = currentContext->slice(id); double rr = currentContext->fits->mapFromRef3axis(ss,sys,id); printDouble(rr); } else Tcl_AppendResult(interp, "1", NULL); } void Base::getFitsWidthCmd() { if (currentContext->cfits) printInteger(currentContext->cfits->width()); else Tcl_AppendResult(interp, "0", NULL); } void Base::getGridCmd() { if (grid) { Tcl_AppendElement(interp, coord.coordSystemStr((grid->system()))); Tcl_AppendElement(interp, coord.skyFrameStr((grid->sky()))); Tcl_AppendElement(interp, coord.skyFormatStr(grid->skyFormat())); switch (grid->type()) { case Grid::ANALYSIS: Tcl_AppendElement(interp, "analysis"); break; case Grid::PUBLICATION: Tcl_AppendElement(interp, "publication"); break; } } else Tcl_AppendResult(interp, "", NULL); } void Base::getGridOptionCmd() { if (grid) Tcl_AppendResult(interp, grid->option(), NULL); else Tcl_AppendResult(interp, "", NULL); } void Base::getGridVarsCmd() { if (grid) Tcl_AppendResult(interp, grid->vars(), NULL); else Tcl_AppendResult(interp, "", NULL); } void Base::getHistogramCmd(char* xName, char* yName, int num) { currentContext->bltHist(xName, yName, num); } void Base::getHorzCutCmd(char* xx, char* yy, const Vector& vv, Coord::InternalSystem ref) { Vector rr; if (isInCFits(vv, ref, &rr)) bltCut(xx, yy, Coord::XX, rr); else result = TCL_ERROR; } void Base::getInfoCmd(char* var) { if (currentContext->cfits) { Tcl_SetVar2(interp,var,"filename",(char*)currentContext->cfits->getFileName(ROOTBASE),0); Tcl_SetVar2(interp,var,"object", (char*)currentContext->cfits->objectKeyword(),0); Tcl_SetVar2(interp,var,"min",(char*)currentContext->cfits->getMin(),0); Tcl_SetVar2(interp,var,"min,x",(char*)currentContext->cfits->getMinX(),0); Tcl_SetVar2(interp,var,"min,y",(char*)currentContext->cfits->getMinY(),0); Tcl_SetVar2(interp,var,"max",(char*)currentContext->cfits->getMax(),0); Tcl_SetVar2(interp,var,"max,x",(char*)currentContext->cfits->getMaxX(),0); Tcl_SetVar2(interp,var,"max,y",(char*)currentContext->cfits->getMaxY(),0); Tcl_SetVar2(interp,var,"low",(char*)currentContext->cfits->getLow(),0); Tcl_SetVar2(interp,var,"high",(char*)currentContext->cfits->getHigh(),0); } else getInfoClearName(var); getInfoClearValue(var); getInfoClearWCS(var); } void Base::getInfoCmd(const Vector& vv, Coord::InternalSystem ref, char* var) { FitsBound* params; int mosaic; Vector3d rr = mapToRef3d(vv,ref); // make sure we have an image FitsImage* ptr = currentContext->cfits; FitsImage* sptr = currentContext->cfits; if (!ptr) goto noFits; mosaic = isMosaic(); params = sptr->getDataParams(currentContext->secMode()); if (!mosaic) { Tcl_SetVar2(interp,var,"filename",(char*)sptr->getFileName(ROOTBASE),0); Tcl_SetVar2(interp,var,"object",(char*)sptr->objectKeyword(),0); Tcl_SetVar2(interp,var,"min",(char*)sptr->getMin(),0); Tcl_SetVar2(interp,var,"min,x",(char*)sptr->getMinX(),0); Tcl_SetVar2(interp,var,"min,y",(char*)sptr->getMinY(),0); Tcl_SetVar2(interp,var,"max",(char*)sptr->getMax(),0); Tcl_SetVar2(interp,var,"max,x",(char*)sptr->getMaxX(),0); Tcl_SetVar2(interp,var,"max,y",(char*)sptr->getMaxY(),0); Tcl_SetVar2(interp,var,"low",(char*)sptr->getLow(),0); Tcl_SetVar2(interp,var,"high",(char*)sptr->getHigh(),0); } if (((Vector&)vv)[0]<0 && ((Vector&)vv)[1]<0) goto noImage; // clear values Tcl_SetVar2(interp,var,"value","",0); Tcl_SetVar2(interp,var,"value,red","",0); Tcl_SetVar2(interp,var,"value,green","",0); Tcl_SetVar2(interp,var,"value,blue","",0); do { Vector img = Vector(rr) * sptr->refToData; if (img[0]>=params->xmin && img[0]xmax && img[1]>=params->ymin && img[1]ymax) { if (mosaic) { Tcl_SetVar2(interp,var,"filename",(char*)sptr->getFileName(ROOTBASE),0); Tcl_SetVar2(interp,var,"object",(char*)sptr->objectKeyword(),0); Tcl_SetVar2(interp,var,"min",(char*)sptr->getMin(),0); Tcl_SetVar2(interp,var,"min,x",(char*)sptr->getMinX(),0); Tcl_SetVar2(interp,var,"min,y",(char*)sptr->getMinY(),0); Tcl_SetVar2(interp,var,"max",(char*)sptr->getMax(),0); Tcl_SetVar2(interp,var,"max,x",(char*)sptr->getMaxX(),0); Tcl_SetVar2(interp,var,"max,y",(char*)sptr->getMaxY(),0); Tcl_SetVar2(interp,var,"low",(char*)sptr->getLow(),0); Tcl_SetVar2(interp,var,"high",(char*)sptr->getHigh(),0); } SETSIGBUS Tcl_SetVar2(interp,var,"value",(char*)sptr->getValue(img),0); CLEARSIGBUS coordToTclArray(sptr,rr,Coord::IMAGE,var,"image"); // use first slice coord3ToTclArray(ptr,rr,Coord::IMAGE,var,"image"); coordToTclArray(sptr,rr,Coord::PHYSICAL,var,"physical"); // use first slice coord3ToTclArray(ptr,rr,Coord::PHYSICAL,var,"physical"); if (hasATMV()) { coordToTclArray(sptr,rr,Coord::AMPLIFIER,var,"amplifier"); // use first slice coord3ToTclArray(ptr,rr,Coord::AMPLIFIER,var,"amplifier"); } else { Tcl_SetVar2(interp,var,"amplifier,x","",0); Tcl_SetVar2(interp,var,"amplifier,y","",0); Tcl_SetVar2(interp,var,"amplifier,z","",0); } if (hasDTMV()) { coordToTclArray(sptr,rr,Coord::DETECTOR,var,"detector"); // use first slice coord3ToTclArray(ptr,rr,Coord::DETECTOR,var,"detector"); } else { Tcl_SetVar2(interp,var,"detector,x","",0); Tcl_SetVar2(interp,var,"detector,y","",0); Tcl_SetVar2(interp,var,"detector,z","",0); } getInfoWCS(var,rr,ptr,sptr); return; } else { if (mosaic) { sptr = sptr->nextMosaic(); if (sptr) params = sptr->getDataParams(currentContext->secMode()); } else { getInfoWCS(var,rr,ptr,sptr); goto noImage; } } } while (mosaic && sptr); // mosaic gap getInfoWCS(var,rr,ptr,ptr); // else, return blanks noFits: getInfoClearName(var); noImage: getInfoClearValue(var); } void Base::getInfoClipCmd() { if (currentContext->cfits) { Tcl_AppendElement(interp, (char*)currentContext->cfits->getLow()); Tcl_AppendElement(interp, (char*)currentContext->cfits->getHigh()); } else { Tcl_AppendElement(interp, "0"); Tcl_AppendElement(interp, "0"); } } void Base::getIRAFAlignCmd() { Tcl_AppendResult(interp, (irafAlign_ ? "1" : "0"), NULL); } void Base::getMaskColorCmd() { Tcl_AppendResult(interp, maskColorName, NULL); } void Base::getMaskMarkCmd() { if (maskMark) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::getMaskTransparencyCmd() { printDouble((1-maskAlpha)*100.); } void Base::getMinMaxCmd() { ostringstream str; str << currentContext->getMinMax() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getNANColorCmd() { Tcl_AppendResult(interp, nanColorName, NULL); } void Base::getOrientCmd() { switch (orientation) { case Coord::NORMAL: Tcl_AppendResult(interp, "none", NULL); return; case Coord::XX: Tcl_AppendResult(interp, "x", NULL); return; case Coord::YY: Tcl_AppendResult(interp, "y", NULL); return; case Coord::XY: Tcl_AppendResult(interp, "xy", NULL); return; } } void Base::getPanPreserveCmd() { if (preservePan) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::getPixelTableCmd(const Vector& vv, Coord::InternalSystem ref, int ww, int hh, char* var) { Vector rr; FitsImage* ptr = isInCFits(vv, ref, &rr); if (!ptr) { // else return blank for (int jj=0; jj<=hh; jj++) { for (int ii=0; ii<=ww; ii++) { ostringstream str; str << ii << ',' << jj << ends; Tcl_SetVar2(interp,var,str.str().c_str(),"",0); } } return; } Vector half((ww-1)/2,(hh-1)/2); Vector ur = rr+half; Vector ll = rr-half; int ii,jj; FitsBound* params = ptr->getDataParams(currentContext->secMode()); // x (columns) for (ii=0,jj=0; ii=params->xmin && ll[0]xmax && ur[1]>=params->ymin && ll[1]ymax) { Vector pt = ((ll+Vector(ii,jj)) * dataToImage).round(); if (pt[0]>params->xmin && pt[0]<=params->xmax) { ostringstream lstr; lstr << pt[0] << ends; Tcl_SetVar2(interp,var,str.str().c_str(),lstr.str().c_str(),0); } else Tcl_SetVar2(interp,var,str.str().c_str(),"",0); } else Tcl_SetVar2(interp,var,str.str().c_str(),"",0); } // y (rows) for (ii=0,jj=0; jj=params->xmin && ll[0]xmax && ur[1]>=params->ymin && ll[1]ymax) { Vector pt = ((ll+Vector(ii,jj)) * dataToImage).round(); if (pt[1]>params->ymin && pt[1]<=params->ymax) { ostringstream lstr; lstr << pt[1] << ends; Tcl_SetVar2(interp,var,str.str().c_str(),lstr.str().c_str(),0); } else Tcl_SetVar2(interp,var,str.str().c_str(),"",0); } else Tcl_SetVar2(interp,var,str.str().c_str(),"",0); } // body SETSIGBUS for (jj=0; jj=params->xmin && pt[0]xmax && pt[1]>=params->ymin && pt[1]ymax) Tcl_SetVar2(interp,var,str.str().c_str(),(char*)ptr->getValue(pt),0); else Tcl_SetVar2(interp,var,str.str().c_str(),"",0); } } CLEARSIGBUS } void Base::getRotateCmd() { printDouble(radToDeg(rotation)); } void Base::getSmoothFunctionCmd() { switch (currentContext->smoothFunction()) { case Context::BOXCAR: Tcl_AppendResult(interp, "boxcar", NULL); return; case Context::TOPHAT: Tcl_AppendResult(interp, "tophat", NULL); return; case Context::GAUSSIAN: Tcl_AppendResult(interp, "gaussian", NULL); return; } } void Base::getSmoothRadiusCmd() { printInteger(currentContext->smoothRadius()); } void Base::getThreadsCmd() { ostringstream str; str << nthreads_ << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getValueCmd(const Vector& vv, Coord::InternalSystem sys) { Vector rr; SETSIGBUS if (FitsImage* ptr=isInCFits(vv,sys,&rr)) Tcl_AppendResult(interp, ptr->getValue(rr), NULL); CLEARSIGBUS } void Base::getVertCutCmd(char* xx, char* yy, const Vector& vv, Coord::InternalSystem ref) { Vector rr; if (isInCFits(vv, ref, &rr)) bltCut(xx, yy, Coord::YY, rr); else result = TCL_ERROR; } void Base::getWCSCmd() { Tcl_AppendResult(interp, coord.coordSystemStr(wcsSystem_), " ", coord.skyFrameStr(wcsSky_), " ", coord.skyFormatStr(wcsSkyFormat_), NULL); } void Base::getWCSAlignCmd() { Tcl_AppendResult(interp, (wcsAlign_ ? "1" : "0"), NULL); } void Base::getWCSAlignPointerCmd() { ostringstream str; if (keyContext->fits) str << (unsigned short*)keyContext->fits << ends; else str << (unsigned short*)NULL << ends; Tcl_AppendResult(interp, (wcsAlign_ ? "1" : "0"), " ", str.str().c_str(), " ", coord.coordSystemStr(wcsSystem_), " ", coord.skyFrameStr(wcsSky_), NULL); } void Base::getWCSNameCmd(Coord::CoordSystem sys) { if (currentContext->cfits && currentContext->cfits->hasWCS(sys)) { char* wcsname = (char*)currentContext->cfits->getWCSName(sys); if (wcsname) { Tcl_AppendResult(interp, wcsname, NULL); return; } } else Tcl_AppendResult(interp, "", NULL); } void Base::getZoomCmd() { ostringstream str; str << zoom_ << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::gridDeleteCmd() { if (grid) delete grid; grid = NULL; update(PIXMAP); } void Base::hasAmplifierCmd() { if (hasATMV()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasBinColCmd(const char* str) { if (currentContext->fits) { if (currentContext->fits->hasBinCol(str)) { Tcl_AppendResult(interp, "1", NULL); return; } } Tcl_AppendResult(interp, "0", NULL); } void Base::hasContourCmd() { if (hasContour()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasContourAuxCmd() { if (hasContourAux()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasCropCmd() { switch (currentContext->secMode()) { case FrScale::IMGSEC: case FrScale::DATASEC: Tcl_AppendResult(interp, "0", NULL); break; case FrScale::CROPSEC: Tcl_AppendResult(interp, "1", NULL); break; } } void Base::hasDATAMINCmd() { if (currentContext->cfits && currentContext->cfits->hasDATAMIN()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasDATASECCmd() { if (currentContext->cfits && currentContext->cfits->hasDATASEC()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasDetectorCmd() { if (hasDTMV()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasFitsCmd() { if (currentContext->fits) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasFitsHPXCmd() { if (currentContext->fits && currentContext->fits->isHPX()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasFitsBinCmd() { if (currentContext->fits && currentContext->fits->isHist()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasFitsCubeCmd() { if (isCube()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasFitsMosaicCmd() { if (isMosaic()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasGridCmd() { if (grid) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasIISCmd() { if (isIIS()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasIRAFMINCmd() { if (currentContext->cfits && currentContext->cfits->hasIRAFMIN()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasPhysicalCmd() { if (hasLTMV()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasSmoothCmd() { if (currentContext->hasSmooth()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasSystemCmd(Coord::CoordSystem sys) { switch (sys) { case Coord::IMAGE: Tcl_AppendResult(interp, "1", NULL); return; case Coord::PHYSICAL: hasPhysicalCmd(); return; case Coord::AMPLIFIER: hasAmplifierCmd(); return; case Coord::DETECTOR: hasDetectorCmd(); return; default: hasWCSCmd(sys); return; } } void Base::hasWCSCmd(Coord::CoordSystem sys) { Tcl_AppendResult(interp, (hasWCS(sys) ? "1" : "0"), NULL); } void Base::hasWCSAltCmd() { Tcl_AppendResult(interp, (currentContext->cfits && currentContext->cfits->wcsHeader() ? "1" : "0"), NULL); } void Base::hasWCSEquCmd(Coord::CoordSystem sys) { Tcl_AppendResult(interp, (hasWCSEqu(sys) ? "1" : "0"), NULL); } void Base::hasWCSCelCmd(Coord::CoordSystem sys) { Tcl_AppendResult(interp, (hasWCSCel(sys) ? "1" : "0"), NULL); } void Base::hasWCSxCmd(Coord::CoordSystem sys) { Tcl_AppendResult(interp, (hasWCSx(sys) ? "1" : "0"), NULL); } void Base::irafAlignCmd(int which) { irafAlign_ = which; alignIRAF(); update(MATRIX); } // loadIncr is only used by LICK OBS and MMT // maintained for backward compatibility void Base::loadIncrDataCmd(int which, int x0, int y0, int x1, int y1) { } void Base::loadIncrMinMaxCmd(int which, int x0, int y0, int x1, int y1) { } void Base::loadIncrEndCmd() { currentContext->resetSecMode(); currentContext->updateClip(); currentContext->updateContours(); updateColorScale(); update(MATRIX); } void Base::highliteCmd(int which) { useHighlite = which ? 1 : 0; update(PIXMAP); } void Base::magnifierCmd(int s) { useMagnifier = s; updateMagnifier(); } void Base::magnifierCmd(char* n, int w, int h) { strcpy(magnifierName,n); magnifierWidth = w; magnifierHeight = h; if (magnifierPixmap) Tk_FreePixmap(display, magnifierPixmap); magnifierPixmap = 0; if (magnifierXImage) XDestroyImage(magnifierXImage); magnifierXImage = NULL; if (magnifierWidth > 0 && magnifierHeight > 0) { magnifierPixmap = Tk_GetPixmap(display, Tk_WindowId(tkwin), magnifierWidth, magnifierHeight, depth); if (!magnifierPixmap) { internalError("Unable to Create Magnifier Pixmap"); return; } if (!magnifierXImage) { if (!(magnifierXImage = XGetImage(display, magnifierPixmap, 0, 0, magnifierWidth, magnifierHeight, AllPlanes, ZPixmap))){ internalError("Unable to Create Magnifier XImage"); return; } } } } void Base::magnifierCursorCmd(int which) { useMagnifierCursor = which; updateMagnifier(); } void Base::magnifierColorCmd(const char* color) { if (magnifierColorName) delete [] magnifierColorName; magnifierColorName = dupstr(color); updateMagnifier(); } void Base::magnifierGraphicsCmd(int which) { useMagnifierGraphics = which; updateMagnifier(); } void Base::magnifierZoomCmd(double z) { magnifierZoom_ = fabs(z); updateMagnifier(); } void Base::matchCmd(const char* xxname1, const char* yyname1, Coord::CoordSystem sys1, Coord::SkyFrame sky1, const char* xxname2, const char* yyname2, Coord::CoordSystem sys2, Coord::SkyFrame sky2, double rad, Coord::CoordSystem sys, Coord::SkyDist dist, const char* rrname) { if (keyContext && keyContext->fits) keyContext->fits->match(xxname1, yyname1, sys1, sky1, xxname2, yyname2, sys2, sky2, rad, sys, dist, rrname); } void Base::maskClearCmd() { currentContext->mask.deleteAll(); update(BASE); } void Base::maskColorCmd(const char* color) { if (maskColorName) delete [] maskColorName; maskColorName = dupstr(color); } void Base::maskTransparencyCmd(float t) { maskAlpha = 1-(t/100.); update(BASE); } void Base::nanColorCmd(const char* color) { if (nanColorName) delete [] nanColorName; nanColorName = dupstr(color); nanColor = getXColor(nanColorName); update(BASE); } void Base::orientCmd(Coord::Orientation which) { orientation = which; switch (orientation) { case Coord::NORMAL: orientationMatrix.identity(); break; case Coord::XX: orientationMatrix = FlipX(); break; case Coord::YY: orientationMatrix = FlipY(); break; case Coord::XY: orientationMatrix = FlipXY(); break; } update(MATRIX); } void Base::panBeginCmd(const Vector& vv) { // vv and panCursor are in CANVAS coords panCursor = vv; // copy tmp pixmap panPM = Tk_GetPixmap(display, Tk_WindowId(tkwin), options->width, options->height, depth); if (!panPM) { internalError("Unable to Create Pan Motion Pixmap"); return; } XCopyArea(display, pixmap, panPM, widgetGC, 0, 0, options->width, options->height, 0,0); } void Base::panMotionCmd(const Vector& vv) { // vv and panCursor are in CANVAS coords // Clear Vector diff = (vv*canvasToWidget) - (panCursor*canvasToWidget); BBox hh,ww; if (diff[0]>0 && diff[1]>0) { hh = BBox(Vector(0,0), Vector(options->width, diff[1])); ww = BBox(Vector(0,0), Vector(diff[0], options->height)); } else if (diff[0]>0 && diff[1]<0) { hh = BBox(Vector(options->width,options->height), Vector(0,options->height+diff[1])); ww = BBox(Vector(0,0), Vector(diff[0], options->height)); } else if (diff[0]<0 && diff[1]>0) { hh = BBox(Vector(0,0), Vector(options->width, diff[1])); ww = BBox(Vector(options->width,options->height), Vector(options->width+diff[0], 0)); } else if (diff[0]<0 && diff[1]<0) { hh = BBox(Vector(options->width,options->height), Vector(0,options->height+diff[1])); ww = BBox(Vector(options->width,options->height), Vector(options->width+diff[0], 0)); } hh = hh * widgetToWindow; ww = ww * widgetToWindow; XSetForeground(display, widgetGC, getColor(bgColorName)); Vector hs = hh.size(); XFillRectangle(display, Tk_WindowId(tkwin), widgetGC, (int)hh.ll[0], (int)hh.ll[1], (int)hs[0], (int)hs[1]); Vector ws = ww.size(); XFillRectangle(display, Tk_WindowId(tkwin), widgetGC, (int)ww.ll[0], (int)ww.ll[1], (int)ws[0], (int)ws[1]); // display tmp pixmap at new location Vector dd = ((vv * canvasToWidget) - (panCursor * canvasToWidget)) * widgetToWindow; XCopyArea(display, panPM, Tk_WindowId(tkwin), panGCXOR, 0, 0, options->width, options->height, dd[0], dd[1]); } void Base::pannerCmd(int s) { usePanner = s; updatePanner(); } void Base::pannerCmd(char* n, int w, int h) { strcpy(pannerName,n); pannerWidth = w; pannerHeight = h; if (pannerPixmap) Tk_FreePixmap(display, pannerPixmap); pannerPixmap = 0; if (pannerXImage) XDestroyImage(pannerXImage); pannerXImage = NULL; if (pannerWidth > 0 && pannerHeight > 0) { if (!(pannerPixmap = Tk_GetPixmap(display, Tk_WindowId(tkwin), pannerWidth, pannerHeight, depth))) { internalError("Unable to Create Panner Pixmap"); return; } if (!(pannerXImage = XGetImage(display, pannerPixmap, 0, 0, pannerWidth, pannerHeight, AllPlanes, ZPixmap))){ internalError("Unable to Create Panner XImage"); return; } } // update panner matrices update(MATRIX); } void Base::rotateCmd(double r) { rotation += r; update(MATRIX); } void Base::rotateToCmd(double r) { rotation = r; update(MATRIX); } void Base::saveFitsFileCmd(const char* fn) { OutFitsFile str(fn); saveFits(str); } void Base::saveFitsChannelCmd(const char* ch) { OutFitsChannel str(interp, ch); saveFits(str); } void Base::saveFitsSocketCmd(int ss) { OutFitsSocket str(ss); saveFits(str); } void Base::saveFitsTableFileCmd(const char* fn) { OutFitsFile str(fn); saveFitsTable(str); } void Base::saveFitsTableChannelCmd(const char* ch) { OutFitsChannel str(interp, ch); saveFitsTable(str); } void Base::saveFitsTableSocketCmd(int ss) { OutFitsSocket str(ss); saveFitsTable(str); } void Base::saveFitsSliceFileCmd(const char* fn) { OutFitsFile str(fn); saveFitsSlice(str); } void Base::saveFitsSliceChannelCmd(const char* ch) { OutFitsChannel str(interp, ch); saveFitsSlice(str); } void Base::saveFitsSliceSocketCmd(int ss) { OutFitsSocket str(ss); saveFitsSlice(str); } void Base::saveFitsExtCubeFileCmd(const char* fn) { OutFitsFile str(fn); saveFitsExtCube(str); } void Base::saveFitsExtCubeChannelCmd(const char* ch) { OutFitsChannel str(interp, ch); saveFitsExtCube(str); } void Base::saveFitsExtCubeSocketCmd(int ss) { OutFitsSocket str(ss); saveFitsExtCube(str); } void Base::saveFitsMosaicFileCmd(const char* fn, int which) { OutFitsFile str(fn); saveFitsMosaic(str, which); } void Base::saveFitsMosaicChannelCmd(const char* ch, int which) { OutFitsChannel str(interp, ch); saveFitsMosaic(str, which); } void Base::saveFitsMosaicSocketCmd(int ss, int which) { OutFitsSocket str(ss); saveFitsMosaic(str, which); } void Base::saveFitsMosaicImageFileCmd(const char* fn) { OutFitsFile str(fn); saveFitsMosaicImage(str); } void Base::saveFitsMosaicImageChannelCmd(const char* ch) { OutFitsChannel str(interp, ch); saveFitsMosaicImage(str); } void Base::saveFitsMosaicImageSocketCmd(int ss) { OutFitsSocket str(ss); saveFitsMosaicImage(str); } void Base::saveArrayFileCmd(const char* fn, FitsFile::ArchType endian) { if (currentContext->cfits) { OutFitsFile str(fn); saveArray(str, endian); } } void Base::saveArrayChannelCmd(const char* ch, FitsFile::ArchType endian) { OutFitsChannel str(interp, ch); saveArray(str, endian); } void Base::saveArraySocketCmd(int ss, FitsFile::ArchType endian) { OutFitsSocket str(ss); saveArray(str, endian); } void Base::saveNRRDFileCmd(const char* fn, FitsFile::ArchType endian) { OutFitsFile str(fn); saveNRRD(str, endian); } void Base::saveNRRDChannelCmd(const char* ch, FitsFile::ArchType endian) { OutFitsChannel str(interp, ch); saveNRRD(str, endian); } void Base::saveNRRDSocketCmd(int ss, FitsFile::ArchType endian) { OutFitsSocket str(ss); saveNRRD(str, endian); } void Base::saveENVIFileCmd(const char* hdr, const char* fn, FitsFile::ArchType endian) { ofstream str(hdr); OutFitsFile str2(fn); saveENVI(str, str2, endian); } void Base::sliceCmd(int id, int ss) { // IMAGE (ranges 1-n) setSlice(id,ss); updateMagnifier(); } void Base::sliceCmd(int id, double vv, Coord::CoordSystem sys) { double rr = currentContext->fits->mapToRef3axis(vv,sys,id); int ss = currentContext->fits->mapFromRef3axis(rr,Coord::IMAGE,id); // IMAGE (ranges 1-n) setSlice(id,ss); updateMagnifier(); } void Base::smoothCmd(int function, int radius) { currentContext->setSmooth(1, (Context::SmoothFunction)function, radius); currentContext->analysis(); updateColorScale(); // for 3d, rebuffer update(MATRIX); } void Base::smoothDeleteCmd() { currentContext->setSmooth(0); currentContext->analysis(); updateColorScale(); // for 3d, rebuffer update(MATRIX); } void Base::threadsCmd(int th) { if (th>=1) nthreads_ = th; } // not used // don't know if this is used by anyone else void Base::unloadFitsCmd() { unloadAllFits(); update(MATRIX); } void Base::updateFitsCmd(int now) { // for 3d, rebuffer if (now) { syncUpdate =1; updateNow(MATRIX); syncUpdate =0; } else update(MATRIX); } void Base::updateFitsCmd(int which, BBox bb, int now) { // Note: bb is in IMAGE coords FitsImage* ptr = currentContext->fits; if (which > 0) { for (int ii=0; ii<(which-1); ii++) { if (ptr) ptr = ptr->nextMosaic(); } } if (ptr) { BBox bbb = bb*ptr->imageToRef; Vector ll = mapFromRef(bbb.ll,Coord::CANVAS); Vector lr = mapFromRef(bbb.lr(),Coord::CANVAS); Vector ur = mapFromRef(bbb.ur,Coord::CANVAS); Vector ul = mapFromRef(bbb.ul(),Coord::CANVAS); BBox rr(ll); rr.bound(lr); rr.bound(ur); rr.bound(ul); if (now) { syncUpdate =1; updateNow(BASE, rr); syncUpdate =0; } else update(BASE, rr); } } void Base::updateMagnifierCmd(const Vector& v) { updateMagnifier(v); } void Base::updatePannerCmd() { updatePanner(); } void Base::warpCmd(const Vector& vv) { warp((Vector&)vv); } void Base::warpToCmd(const Vector& vv) { Vector rr = vv*canvasToWindow; warpTo(rr); } void Base::wcsCmd(Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { wcsSystem_ = sys; if (hasWCSEqu(sys)) { wcsSky_ = sky; wcsSkyFormat_ = format; } else if (hasWCSCel(sys)) { wcsSky_ = Coord::GALACTIC; wcsSkyFormat_ = format; } else { wcsSky_ = sky; wcsSkyFormat_ = format; } } void Base::wcsAlignCmd(int which) { wcsAlign_ = which; alignWCS(); update(MATRIX); } // used by backup void Base::wcsAlignCmd(int which, Coord::CoordSystem sys, Coord::SkyFrame sky) { wcsAlign_ = which; alignWCS(sys, sky); update(MATRIX); } void Base::wcsAlignCmd(int which, FitsImage* ptr, Coord::CoordSystem sys, Coord::SkyFrame sky) { wcsAlign_ = which; if (hasWCSEqu(sys)) wcsSky_ = sky; else if (hasWCSCel(sys)) wcsSky_ = Coord::GALACTIC; else wcsSky_ = sky; alignWCS(ptr, sys); update(MATRIX); } void Base::wcsAppendCmd(int which, int fd) { if (!currentContext->cfits) return; boost::fdistream str(fd); if (!str) { Tcl_AppendResult(interp, " unable to read wcs infomation", NULL); result = TCL_ERROR; return; } FitsImage* rr = findAllFits(which); if (rr) { while (rr) { rr->appendWCS(str); rr=rr->nextSlice(); } } else result = TCL_ERROR; } void Base::wcsAppendCmd(int which, const char* fn) { if (!currentContext->cfits) return; ifstream str(fn); if (!str) { Tcl_AppendResult(interp, " unable to load wcs file ", fn, NULL); result = TCL_ERROR; return; } FitsImage* rr = findAllFits(which); if (rr) { while (rr) { rr->appendWCS(str); rr=rr->nextSlice(); } } else result = TCL_ERROR; } void Base::wcsAppendTxtCmd(int which, const char* txt) { if (!currentContext->cfits) return; istringstream str(txt); if (!str) { Tcl_AppendResult(interp, " unable to process text", NULL); result = TCL_ERROR; return; } FitsImage* rr = findAllFits(which); if (rr) { while (rr) { rr->appendWCS(str); rr=rr->nextSlice(); } } else result = TCL_ERROR; } void Base::wcsResetCmd(int which) { if (!currentContext->cfits) return; FitsImage* rr = findAllFits(which); if (rr) while (rr) { rr->resetWCS(); rr=rr->nextSlice(); } else result = TCL_ERROR; } void Base::wcsReplaceCmd(int which, int fd) { if (!currentContext->cfits) return; boost::fdistream str(fd); if (!str) { Tcl_AppendResult(interp, " unable to read wcs infomation", NULL); result = TCL_ERROR; return; } FitsImage* rr = findAllFits(which); if (rr) { while (rr) { rr->replaceWCS(str); rr=rr->nextSlice(); } } else result = TCL_ERROR; } void Base::wcsReplaceCmd(int which, const char* fn) { if (!currentContext->cfits) return; ifstream str(fn); if (!str) { Tcl_AppendResult(interp, " unable to load wcs file ", fn, NULL); result = TCL_ERROR; return; } FitsImage* rr = findAllFits(which); if (rr) { while (rr) { rr->replaceWCS(str); rr=rr->nextSlice(); } } else result = TCL_ERROR; } void Base::wcsReplaceTxtCmd(int which, const char* txt) { if (!currentContext->cfits) return; istringstream str(txt); if (!str) { Tcl_AppendResult(interp, " unable to process text", NULL); result = TCL_ERROR; return; } FitsImage* rr = findAllFits(which); if (rr) { while (rr) { rr->replaceWCS(str); rr=rr->nextSlice(); } } else result = TCL_ERROR; } void Base::zoomCmd(const Vector& z) { Vector az = ((Vector&)z).abs(); zoom_[0] *= az[0]; zoom_[1] *= az[1]; update(MATRIX); } void Base::zoomToCmd(const Vector& z) { zoom_ = ((Vector&)z).abs(); update(MATRIX); } saods9/tksao/frame/baseellipse.C000644 000765 000000 00000043677 12765621307 017225 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "baseellipse.h" #include "fitsimage.h" BaseEllipse::BaseEllipse(Base* p, const Vector& ctr, double ang) : BaseMarker(p, ctr, ang) { } BaseEllipse::BaseEllipse(Base* p, const Vector& ctr, double ang, const char* clr, int* dsh, int w, const char* f, const char* t, unsigned short prop, const char* c, const List& tag, const List& cb) : BaseMarker(p, ctr, ang, clr, dsh, w, f, t, prop, c, tag, cb) { } BaseEllipse::BaseEllipse(const BaseEllipse& a) : BaseMarker(a) {} BaseEllipse::~BaseEllipse() { } void BaseEllipse::renderX(Drawable drawable, Coord::InternalSystem sys, RenderMode mode) { double ang = calcAngle(); Vector r = annuli_[numAnnuli_-1]; Vector z = parent->zoom(); int isOrient = parent->getOrientation() == Coord::NORMAL && parent->getWCSOrientation() == Coord::NORMAL; int isRound = r[0] == r[1]; int isScale = z[0] == z[1]; // int isAngle = teq(ang,0,FLT_EPSILON) || teq(ang,M_PI,FLT_EPSILON); if (isRound && isScale && isOrient && parent->isAzElZero()) renderXCircle(drawable, sys, ang, mode); else renderXEllipseCurve(drawable, sys, mode); } void BaseEllipse::renderXCircle(Drawable drawable, Coord::InternalSystem sys, double ang, RenderMode mode) { GC lgc = renderXGC(mode); // this routine is only valid for circles with equal zoom in x & y Vector cc = parent->mapFromRef(center,sys); for (int i=0; i=b1 && a1b1 && a2<=b2) s2 =1; if ((s1 && !s2) || (s1 && s2)) renderXEllipsePrep(drawable, sys, mode, a1,a2,b1,b2,r); if (s1&&s2) s1=s2=0; } } } void BaseEllipse::renderXEllipsePrep(Drawable drawable, Coord::InternalSystem sys, RenderMode mode, double a1, double a2, double b1, double b2, Vector& r) { if (!(a1 >= b1 && a1 <= b2)) a1 = b1; if (!(a2 >= b1 && a2 <= b2)) a2 = b2; if (a1>a2) { renderXEllipseArc(drawable, sys, mode, b1,a2,r); renderXEllipseArc(drawable, sys, mode, a1,b2,r); } else renderXEllipseArc(drawable, sys, mode, a1,a2,r); } void BaseEllipse::renderXEllipseArc(Drawable drawable, Coord::InternalSystem sys, RenderMode mode, double a1, double a2, Vector& rr) { // don't render if zero angle if (a1==a2) return; // don't render if zero length if (rr[0]==0 || rr[1]==0) return; // bezier curve, valid for arcs of getColor("red")); XDrawLine(display, drawable, lgc, r1[0], r1[1], r2[0], r2[1]); } } void BaseEllipse::renderPS(int mode) { Vector r = annuli_[numAnnuli_-1]; Vector z = parent->zoom(); int isOrient = parent->getOrientation() == Coord::NORMAL && parent->getWCSOrientation() == Coord::NORMAL; int isRound = r[0] == r[1]; int isScale = z[0] == z[1]; if (isRound && isScale && isOrient && parent->isAzElZero()) renderPSCircle(mode); else renderPSEllipseCurve(mode); } void BaseEllipse::renderPSCircle(int mode) { renderPSGC(mode); Vector cc = parent->mapFromRef(center,Coord::CANVAS); double ang = calcAngle(); for (int ii=0; iicanvas) << ' ' << l << ' ' << a1 << ' ' << a2 << ' ' << "arc stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } } void BaseEllipse::renderPSEllipseCurve(int mode) { renderPSGC(mode); double a1 = startAng_; double a2 = stopAng_; if (a2<=a1) a2 += M_TWOPI; for (int ii=0; ii=b1 && a1b1 && a2<=b2) s2 =1; if ((s1 && !s2) || (s1 && s2)) renderPSEllipsePrep(a1,a2,b1,b2,r); if (s1&&s2) s1=s2=0; } } } void BaseEllipse::renderPSEllipsePrep(double a1, double a2, double b1, double b2, Vector& rr) { if (!(a1 >= b1 && a1 <= b2)) a1 = b1; if (!(a2 >= b1 && a2 <= b2)) a2 = b2; if (a1>a2) { renderPSEllipseArc(b1,a2,rr); renderPSEllipseArc(a1,b2,rr); } else renderPSEllipseArc(a1,a2,rr); } void BaseEllipse::renderPSEllipseArc(double a1, double a2, Vector& rr) { // don't render zero length arcs if (a1 == a2) return; if (!rr[0] || !rr[1]) return; // bezier curve, valid for arcs of canvas) << ' ' << "moveto " << xx1.TkCanvasPs(parent->canvas) << ' ' << xx2.TkCanvasPs(parent->canvas) << ' ' << tt1.TkCanvasPs(parent->canvas) << ' ' << "curveto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } void BaseEllipse::renderPSInclude(int mode) { if (!(properties & INCLUDE)) { double theta = degToRad(45); Vector r1 = fwdMap(Vector(annuli_[numAnnuli_-1][0]*cos(theta), annuli_[numAnnuli_-1][1]*sin(theta)), Coord::CANVAS); Vector r2 = fwdMap(Vector(-annuli_[numAnnuli_-1][0]*cos(theta), -annuli_[numAnnuli_-1][1]*sin(theta)), Coord::CANVAS); renderPSColor(mode, parent->getXColor("red")); ostringstream str; str << "newpath " << r1.TkCanvasPs(parent->canvas) << ' ' << "moveto " << r2.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } } #ifdef MAC_OSX_TK void BaseEllipse::renderMACOSX() { Vector r = annuli_[numAnnuli_-1]; Vector z = parent->zoom(); int isOrient = parent->getOrientation() == Coord::NORMAL && parent->getWCSOrientation() == Coord::NORMAL; int isRound = r[0] == r[1]; int isScale = z[0] == z[1]; if (isRound && isScale && isOrient & parent->isAzElZero()) renderMACOSXCircle(); else renderMACOSXEllipseCurve(); } void BaseEllipse::renderMACOSXCircle() { renderMACOSXGC(); Vector cc = parent->mapFromRef(center,Coord::CANVAS); double ang = calcAngle(); for (int ii=0; ii=b1 && a1b1 && a2<=b2) s2 =1; if ((s1 && !s2) || (s1 && s2)) renderMACOSXEllipsePrep(a1,a2,b1,b2,r); if (s1&&s2) s1=s2=0; } } } void BaseEllipse::renderMACOSXEllipsePrep(double a1, double a2, double b1, double b2, Vector& rr) { if (!(a1 >= b1 && a1 <= b2)) a1 = b1; if (!(a2 >= b1 && a2 <= b2)) a2 = b2; if (a1>a2) { renderMACOSXEllipseArc(b1,a2,rr); renderMACOSXEllipseArc(a1,b2,rr); } else renderMACOSXEllipseArc(a1,a2,rr); } void BaseEllipse::renderMACOSXEllipseArc(double a1, double a2, Vector& rr) { // don't render zero length arcs if (a1 == a2) return; if (!rr[0] || !rr[1]) return; // bezier curve, valid for arcs of getXColor("red")); macosxDrawLine(r1,r2); } } #endif #ifdef __WIN32 void BaseEllipse::renderWIN32() { Vector r = annuli_[numAnnuli_-1]; Vector z = parent->zoom(); int isOrient = parent->getOrientation() == Coord::NORMAL && parent->getWCSOrientation() == Coord::NORMAL; int isRound = r[0] == r[1]; int isScale = z[0] == z[1]; if (isRound && isScale && isOrient && parent->isAzElZero()) renderWIN32Circle(); else renderWIN32EllipseCurve(); } void BaseEllipse::renderWIN32Circle() { renderWIN32GC(); Vector cc = parent->mapFromRef(center,Coord::CANVAS); double ang = calcAngle(); for (int i=0; i=b1 && a1b1 && a2<=b2) s2 =1; if ((s1 && !s2) || (s1 && s2)) renderWIN32EllipsePrep(a1,a2,b1,b2,r); if (s1&&s2) s1=s2=0; } } } void BaseEllipse::renderWIN32EllipsePrep(double a1, double a2, double b1, double b2, Vector& rr) { if (!(a1 >= b1 && a1 <= b2)) a1 = b1; if (!(a2 >= b1 && a2 <= b2)) a2 = b2; if (a1>a2) { renderWIN32EllipseArc(b1,a2,rr); renderWIN32EllipseArc(a1,b2,rr); } else renderWIN32EllipseArc(a1,a2,rr); } void BaseEllipse::renderWIN32EllipseArc(double a1, double a2, Vector& rr) { // don't render zero length arcs if (a1 == a2) return; if (!rr[0] || !rr[1]) return; // bezier curve, valid for arcs of getXColor("red")); win32DrawLine(r1,r2); } } #endif // Support void BaseEllipse::updateHandles() { // handles are in canvas coords // we can't garantee that the annuli_ have been sorted yet if (handle) delete [] handle; handle = new Vector[numHandle]; Vector max; for(int ii=0; ii1) for (int ii=0; ii0) ss = rr[0]*rr[1]/sqrt(tt); return Vector(ss*cos(aa),ss*sin(aa)); } void BaseEllipse::XDrawCurve(Drawable drawable, RenderMode mode, Vector& t1, Vector& x1, Vector& x2, Vector& t2) { // if dashed, fake it GC lgc; if ((properties & SOURCE) && !(properties & DASH)) lgc = renderXGC(mode); else { // set width, color, dash switch (mode) { case SRC: XSetForeground(display, gc, color); renderXLineNoDash(gc); lgc = gc; break; case XOR: renderXLineNoDash(gcxor); lgc = gcxor; break; } } float t1x = t1[0]; float t1y = t1[1]; float t2x = t2[0]; float t2y = t2[1]; float x1x = x1[0]; float x1y = x1[1]; float x2x = x2[0]; float x2y = x2[1]; float rx = t1x; float ry = t1y; Vector dd = (t2-t1).abs(); float max = dd[0]>dd[1] ? dd[0] : dd[1]; // calculate incr // this is a crude attempt to limit the number of iterations // we want a min for very small segments, but not that large for // high zoom or elongated curves float aa = int(log(max))*5; float incr = 1./(aa > 2 ? aa : 2); int dash=0; float tt = incr; while (tt<=1+FLT_EPSILON) { float xx = pow(tt,3)*(t2x+3*(x1x-x2x)-t1x) +3*pow(tt,2)*(t1x-2*x1x+x2x) +3*tt*(x1x-t1x)+t1x; float yy = pow(tt,3)*(t2y+3*(x1y-x2y)-t1y) +3*pow(tt,2)*(t1y-2*x1y+x2y) +3*tt*(x1y-t1y)+t1y; // crude attempt to clip unwanted drawlines // only works for SRC if ((properties & SOURCE) && !(properties & DASH)) XDrawLine(display, drawable, lgc, rx, ry, xx, yy); else { if (dash) XDrawLine(display, drawable, lgc, rx, ry, xx, yy); dash = !dash; } rx = xx; ry = yy; tt += incr; } } // this routine maps the desired angle to an angle to be used with XDrawArc double BaseEllipse::xyz(Vector rr, double aa) { // just in case if (!rr[0] || !rr[1]) return aa; int flip=0; while (aa>M_PI) { aa -= M_PI; flip++; } double tt = rr[1]*rr[1]*cos(aa)*cos(aa)+rr[0]*rr[0]*sin(aa)*sin(aa); double ss =0; if (tt>0) ss = 1./sqrt(tt); double bb = rr[1]*ss*cos(aa); return acos(bb)+M_PI*flip; } saods9/tksao/frame/baseellipse.h000644 000765 000000 00000005427 12712445154 017255 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __baseellipse_h__ #define __baseellipse_h__ #include "basemarker.h" class BaseEllipse : public BaseMarker { private: double xyz(Vector rr, double ang); void XDrawCurve(Drawable, RenderMode, Vector&, Vector&, Vector&, Vector&); void renderXCircle(Drawable, Coord::InternalSystem, double, RenderMode); void renderXEllipseCurve(Drawable, Coord::InternalSystem, RenderMode); void renderXEllipsePrep(Drawable, Coord::InternalSystem, RenderMode, double, double, double, double, Vector&); void renderXEllipseArc(Drawable, Coord::InternalSystem, RenderMode, double, double, Vector&); void renderXInclude(Drawable, Coord::InternalSystem, RenderMode); void renderPSCircle(int); void renderPSEllipseCurve(int); void renderPSEllipsePrep(double, double, double, double, Vector&); void renderPSEllipseArc(double, double, Vector&); void renderPSInclude(int); #ifdef MAC_OSX_TK void renderMACOSXCircle(); void renderMACOSXEllipseCurve(); void renderMACOSXEllipsePrep(double, double, double, double, Vector&); void renderMACOSXEllipseArc(double, double, Vector&); void renderMACOSXInclude(); #endif #ifdef __WIN32 void renderWIN32Circle(); void renderWIN32EllipseCurve(); void renderWIN32EllipsePrep(double, double, double, double, Vector&); void renderWIN32EllipseArc(double, double, Vector&); void renderWIN32Include(); #endif protected: void renderX(Drawable, Coord::InternalSystem, RenderMode); void renderPS(int); #ifdef MAC_OSX_TK void renderMACOSX(); #endif #ifdef __WIN32 void renderWIN32(); #endif virtual void updateHandles(); Vector intersect(Vector, double); int isInRef(const Vector& vv, int); public: BaseEllipse(Base* p, const Vector& ctr, double a); BaseEllipse(Base* p, const Vector& ctr, double a, const char* clr, int* dsh, int w, const char* f, const char* t, unsigned short prop, const char* c, const List& tag, const List& cb); BaseEllipse(const BaseEllipse&); virtual ~BaseEllipse(); virtual Marker* dup() =0; int isIn(const Vector& vv) {return isIn(vv, Coord::CANVAS);} int isIn(const Vector& vv, Coord::InternalSystem sys) {return isIn(vv,sys,numAnnuli_-1);} int isIn(const Vector& vv, Coord::InternalSystem sys, int nn) {return isInRef(bckMap(vv,sys),nn);} virtual int isIn(const Vector& vv, Coord::InternalSystem sys, int nn, int aa) {return isInRef(bckMap(vv,sys),nn);} // valid for non-fixed only int isIn(const Vector& vv, const Matrix& bck) {return isIn(vv,bck,numAnnuli_-1);} int isIn(const Vector& vv, const Matrix& bck, int nn) {return isInRef(vv*bck,nn);} }; #endif saods9/tksao/frame/baseline.C000644 000765 000000 00000004546 12752665521 016511 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "baseline.h" #include "fitsimage.h" BaseLine::BaseLine(Base* p, const Vector& ptr1, const Vector& ptr2) : Marker(p, ptr1, 0) { p1 = ptr1; p2 = ptr2; } BaseLine::BaseLine(Base* p, const Vector& ptr1, const Vector& ptr2, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : Marker(p, ptr1, 0, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { p1 = ptr1; p2 = ptr2; } BaseLine::BaseLine(const BaseLine& a) : Marker(a) { p1 = a.p1; p2 = a.p2; } void BaseLine::updateCoords(const Matrix& mx) { p1*=mx; p2*=mx; Marker::updateCoords(mx); } void BaseLine::centroid() { p1 = parent->centroid(p1); p2 = parent->centroid(p2); updateBBox(); doCallBack(CallBack::MOVECB); } void BaseLine::move(const Vector& v) { p1+=v; p2+=v; updateBBox(); doCallBack(CallBack::MOVECB); } void BaseLine::moveTo(const Vector& v) { // v is the new location of the center Vector diff = v - center; p1+=diff; p2+=diff; updateBBox(); doCallBack(CallBack::MOVECB); } int BaseLine::isIn(const Vector& v) { // do this in canvas coords, not ref coords Vector l1 = parent->mapFromRef(p1,Coord::CANVAS); Vector l2 = parent->mapFromRef(p2,Coord::CANVAS); double a = (l2-l1).angle(); Matrix m = Translate(-l1) * Rotate(a); Vector vv = v*m; Vector end = l2*m; return (vv[0]>0 && vv[0]-parent->markerEpsilon && vv[1]markerEpsilon); } void BaseLine::edit(const Vector& v, int h) { switch (h) { case 1: p1 = v; break; case 2: p2 = v; break; } updateBBox(); doCallBack(CallBack::EDITCB); } void BaseLine::setPoints(const Vector& v1, const Vector& v2) { p1 = v1; p2 = v2; updateBBox(); doCallBack(CallBack::EDITCB); } void BaseLine::listNonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { Vector v1 = ptr->mapFromRef(p1,sys); Vector v2 = ptr->mapFromRef(p2,sys); str << type_ << '(' << setprecision(8) << v1 << ',' << v2 << ')'; } // special composite funtionallity void BaseLine::setComposite(const Matrix& mx, double aa) { p1 *= mx; p2 *= mx; updateBBox(); } saods9/tksao/frame/baseline.h000644 000765 000000 00000002655 12752665521 016555 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __baseline_h__ #define __baseline_h__ #include "marker.h" class BaseLine : public Marker { protected: Vector p1; Vector p2; void renderXInclude(Drawable, Coord::InternalSystem, RenderMode) {} void renderPSInclude(int) {} #ifdef MAC_OSX_TK void renderMACOSXInclude() {} #endif #ifdef __WIN32 void renderWIN32Include() {} #endif void updateHandles() {} virtual void listNonCel(FitsImage*, ostream&, Coord::CoordSystem); public: BaseLine(Base* p, const Vector& ptr1, const Vector& ptr2); BaseLine(Base* p, const Vector& ptr1, const Vector& ptr2, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); BaseLine(const BaseLine&); virtual void updateCoords(const Matrix&); virtual int isIn(const Vector&); void centroid(); void move(const Vector&); void moveTo(const Vector&); virtual void edit(const Vector&, int); void rotateBegin() {} void rotate(const Vector& v, int h) {} void rotateEnd() {} const Vector& getP1() {return p1;} const Vector& getP2() {return p2;} void setPoints(const Vector&, const Vector&); // special composite funtionality void setComposite(const Matrix&, double); }; #endif saods9/tksao/frame/basemarker.C000644 000765 000000 00000015455 12752371655 017046 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "basemarker.h" #include "base.h" // Base Markers Public BaseMarker::BaseMarker(Base* p, const Vector& ctr, double ang) : Marker(p, ctr, ang) { startAng_ = 0; stopAng_ = M_TWOPI; numAnnuli_ = 0; annuli_ = NULL; numAngles_ = 0; angles_ = NULL; } BaseMarker::BaseMarker(Base* p, const Vector& ctr, double ang, const char* clr, int* dsh, int w, const char* f, const char* t, unsigned short prop, const char* c, const List& tag, const List& cb) : Marker(p, ctr, ang, clr, dsh, w, f, t, prop, c, tag, cb) { startAng_ = 0; stopAng_ = M_TWOPI; numAnnuli_ = 0; annuli_ = NULL; numAngles_ = 0; angles_ = NULL; } BaseMarker::BaseMarker(const BaseMarker& a) : Marker(a) { startAng_ = a.startAng_; stopAng_ = a.stopAng_; numAnnuli_ = a.numAnnuli_; annuli_ = new Vector[a.numAnnuli_]; for (int i=0; i4) { int hh = h-4-1; if (numAnnuli_>2 && hhannuli_[j][0]) { Vector d = annuli_[i]; annuli_[i] = annuli_[j]; annuli_[j] = d; } } int BaseMarker::isInAngle(Vector& vv, int nn) { double aa = -vv.angle(); while (aa=angles_[nn] && aa1 && angles_[0]==0 && angles_[numAngles_-1]==0) angles_[numAngles_-1] += M_TWOPI; } void BaseMarker::setAngles(double a1, double a2, int an) { numAngles_ = an+1; if (angles_) delete [] angles_; angles_ = new double[numAngles_]; // yes this is really needed // for a2a1 very small if (teq(a2,a1,FLT_EPSILON)) { a1 = zeroTWOPI(a1); a2 = zeroTWOPI(a2); if (teq(a2,a1,FLT_EPSILON)) a2 += M_TWOPI; } for (int ii=0; iirefToCanvas; return Rotate(calcAngle()) * Translate(cc) * parent->canvasToRef; } else return Marker::fwdMatrix(); } Matrix BaseMarker::bckMatrix() { if (properties & FIXED) { Vector cc = center * parent->refToCanvas; return parent->refToCanvas * Translate(-cc) * Rotate(-calcAngle()); } else return Marker::bckMatrix(); } Vector BaseMarker::fwdMap(const Vector& vv, Coord::InternalSystem sys) { if (properties & FIXED) { Vector cc = center * parent->refToCanvas; Vector dd = vv * Rotate(calcAngle()) * Translate(cc); Vector ee = dd*parent->canvasToRef; return parent->mapFromRef(ee,sys); } else return Marker::fwdMap(vv,sys); } Vector BaseMarker::bckMap(const Vector& vv, Coord::InternalSystem sys) { if (properties & FIXED) { Vector aa = parent->mapToRef(vv,sys); Vector bb = aa*parent->refToCanvas; Vector cc = center * parent->refToCanvas; return bb * Translate(-cc) * Rotate(-calcAngle()); } else return Marker::bckMap(vv,sys); } saods9/tksao/frame/basemarker.h000644 000765 000000 00000003100 12752371655 017073 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __basemarker_h__ #define __basemarker_h__ #include "marker.h" #define MAXANNULI 512 #define MAXANGLES 720 class BaseMarker : public Marker { protected: Vector* annuli_; int numAnnuli_; double *angles_; int numAngles_; double startAng_; double stopAng_; protected: void sortAnnuli(); int insertAnnuli(Vector); void sortAngles(); void setAngles(double, double, int); void setAngles(int, const double*); void addAngle(double); void deleteAngle(int); int isInAngle(Vector&, int); Matrix fwdMatrix(); Matrix bckMatrix(); Vector fwdMap(const Vector&, Coord::InternalSystem); Vector bckMap(const Vector&, Coord::InternalSystem); public: BaseMarker(Base*, const Vector&, double); BaseMarker(Base*, const Vector&, double, const char*, int* dsh, int, const char*, const char*, unsigned short, const char*, const List&, const List& cb); BaseMarker(const BaseMarker&); virtual ~BaseMarker(); virtual Marker* dup() =0; void updateCoords(const Matrix&); int numAnnuli() {return numAnnuli_;} Vector annuli(int i) {return annuli_[i];} int numAngles() {return numAngles_;} double angles(int i) {return angles_[i];} void setAnnuli(const Vector&); void setAnnuli(const Vector&, const Vector&, int); void setAnnuli(const Vector*, int); virtual int addAnnuli(const Vector&) {return 0;} void deleteAnnuli(int h); }; #endif saods9/tksao/frame/basepolygon.C000644 000765 000000 00000014544 12775230632 017244 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "basepolygon.h" #include "fitsimage.h" BasePolygon::BasePolygon(Base* p, const Vector& ctr, const Vector& b) : Marker(p, ctr, 0) { } BasePolygon::BasePolygon(Base* p, const Vector& ctr, const Vector& b, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : Marker(p, ctr, 0, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { } BasePolygon::BasePolygon(Base* p, const List& v, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : Marker(p, Vector(0,0), 0, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { // Vertex list is in ref coords angle = 0; vertex = v; // find center center = Vector(0,0); vertex.head(); do center += vertex.current()->vector; while (vertex.next()); center /= vertex.count(); // vertices are relative vertex.head(); do vertex.current()->vector *= Translate(-center) * FlipY(); // no rotation while (vertex.next()); updateBBox(); } BasePolygon::BasePolygon(const BasePolygon& a) : Marker(a) { vertex = a.vertex; } void BasePolygon::createVertex(int which, const Vector& v) { // which segment (1 to n) // v is in ref coords Matrix mm = bckMatrix(); int seg = which-1; if (seg>=0 && seg4) { int hh = h-4-1; if (vertex.count() > 3) { Vertex* v = vertex[hh]; if (v) { vertex.extractNext(v); delete v; recalcCenter(); updateBBox(); doCallBack(CallBack::EDITCB); doCallBack(CallBack::MOVECB); // center can change } } } } void BasePolygon::edit(const Vector& v, int h) { if (h < 5) { Vector s1 = v * bckMatrix(); Vector s2 = bckMap(handle[h-1],Coord::CANVAS); if (s1[0] != 0 && s1[1] != 0 && s2[0] != 0 && s2[1] != 0) { double a = fabs(s1[0]/s2[0]); double b = fabs(s1[1]/s2[1]); double s = a > b ? a : b; vertex.head(); do vertex.current()->vector *= Scale(s); while (vertex.next()); } updateBBox(); doCallBack(CallBack::EDITCB); } else { moveVertex(v,h); updateBBox(); doCallBack(CallBack::EDITCB); doCallBack(CallBack::MOVECB); // center can change } } void BasePolygon::moveVertex(const Vector& v, int h) { Matrix mm = bckMatrix(); if (vertex[h-5]) vertex.current()->vector = v * mm; recalcCenter(); } void BasePolygon::recalcCenter() { // recalculate center Vector nc; vertex.head(); do nc += vertex.current()->vector * Rotate(angle) * FlipY(); while (vertex.next()); nc /= vertex.count(); center += nc; // update all vertices vertex.head(); do vertex.current()->vector -= nc * FlipY() * Rotate(-angle); while (vertex.next()); } void BasePolygon::rotate(const Vector& v, int h) { if (h < 5) Marker::rotate(v,h); else { // we need to check this here, because we are really rotating if (canEdit()) { moveVertex(v,h); updateBBox(); doCallBack(CallBack::EDITCB); doCallBack(CallBack::MOVECB); // center can change } } } void BasePolygon::updateHandles() { // generate handles numHandle = 4 + vertex.count(); if (handle) delete [] handle; handle = new Vector[numHandle]; // the first four are our control handles BBox bb; vertex.head(); do bb.bound(vertex.current()->vector); while (vertex.next()); Vector zz = parent->zoom(); float r = 10/zz.length(); bb.expand(r); // give us more room handle[0] = fwdMap(bb.ll,Coord::CANVAS); handle[1] = fwdMap(bb.lr(),Coord::CANVAS); handle[2] = fwdMap(bb.ur,Coord::CANVAS); handle[3] = fwdMap(bb.ul(),Coord::CANVAS); // and the rest are vertices int i=4; vertex.head(); do handle[i++] = fwdMap(vertex.current()->vector,Coord::CANVAS); while (vertex.next()); } void BasePolygon::updateCoords(const Matrix& mx) { Scale s(mx); vertex.head(); do vertex.current()->vector *= s; while (vertex.next()); Marker::updateCoords(mx); } void BasePolygon::listBase(FitsImage* ptr, ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { Matrix mm = fwdMatrix(); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listBaseNonCel(ptr, str, mm, sys); break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { str << type_ << '('; int first=1; vertex.head(); do { if (!first) str << ','; first=0; Vector vv = ptr->mapFromRef(vertex.current()->vector*mm,sys,sky); str << setprecision(10) << vv; } while (vertex.next()); str << ')'; } break; case Coord::SEXAGESIMAL: { str << type_ << '('; int first=1; vertex.head(); do { if (!first) str << ','; first=0; listRADEC(ptr,vertex.current()->vector*mm,sys,sky,format); str << ra << ',' << dec; } while (vertex.next()); str << ')'; } break; } } else listBaseNonCel(ptr, str, mm, sys); } } void BasePolygon::listBaseNonCel(FitsImage* ptr, ostream& str, Matrix& mm, Coord::CoordSystem sys) { str << type_ << '('; int first=1; vertex.head(); do { if (!first) str << ','; first=0; Vector vv = ptr->mapFromRef(vertex.current()->vector*mm,sys); str << setprecision(8) << vv; } while (vertex.next()); str << ')'; } void BasePolygon::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); Matrix mm = fwdMatrix(); Vector* vv = new Vector[vertex.count()]; XMLRowInit(); XMLRow(XMLSHAPE,type_); vertex.head(); int cnt =0; do vv[cnt++] =vertex.current()->vector*mm; while (vertex.next()); XMLRowPoint(ptr,sys,sky,format,vv,vertex.count()); delete [] vv; XMLRowProps(ptr,sys); XMLRowEnd(str); } saods9/tksao/frame/basepolygon.h000644 000765 000000 00000003272 12752663436 017314 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __basepolygon_h__ #define __basepolygon_h__ #include "marker.h" #include "list.h" class BasePolygon : public Marker { protected: List vertex; protected: void moveVertex(const Vector&, int); void recalcCenter(); virtual void renderX(Drawable, Coord::InternalSystem, RenderMode) =0; virtual void renderPS(int) =0; #ifdef MAC_OSX_TK virtual void renderMACOSX() =0; #endif #ifdef __WIN32 virtual void renderWIN32() =0; #endif void updateHandles(); void listBase(FitsImage*, ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void listBaseNonCel(FitsImage*, ostream&, Matrix&, Coord::CoordSystem); public: BasePolygon(Base* p, const Vector& ctr, const Vector& b); BasePolygon(Base* p, const Vector& ctr, const Vector& b, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); BasePolygon(Base* p, const List& v, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); BasePolygon(const BasePolygon&); void createVertex(int, const Vector&); void deleteVertex(int); void edit(const Vector&, int); virtual int getSegment(const Vector&) =0; virtual void reset(const Vector&) =0; void rotate(const Vector&, int); void updateCoords(const Matrix&); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); }; #endif saods9/tksao/frame/box.C000644 000765 000000 00000026510 12775230632 015506 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "box.h" #include "fitsimage.h" Box::Box(Base* p, const Vector& ctr, const Vector& seg, double ang) : BaseBox(p, ctr, ang) { numAnnuli_ = 1; annuli_ = new Vector[1]; annuli_[0] = seg; strcpy(type_,"box"); numHandle = 4; updateBBox(); } Box::Box(Base* p, const Vector& ctr, const Vector& seg, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseBox(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = 1; annuli_ = new Vector[1]; annuli_[0] = seg; strcpy(type_,"box"); numHandle = 4; updateBBox(); } Box::Box(const Box& a) : BaseBox(a) {} void Box::editBegin(int h) { switch (h) { case 1: return; case 2: annuli_[0] = Vector(-annuli_[0][0],annuli_[0][1]); return; case 3: annuli_[0] = -annuli_[0]; return; case 4: annuli_[0] = Vector(annuli_[0][0],-annuli_[0][1]); return; } doCallBack(CallBack::EDITBEGINCB); } void Box::edit(const Vector& v, int h) { Matrix mm = bckMatrix(); Matrix nn = mm.invert(); // This annuli_s about the opposite node Vector ov = annuli_[0]/2 * nn; annuli_[0] = (annuli_[0]/2) - (v*mm); Vector nv = annuli_[0]/2 * nn; center -= nv-ov; updateBBox(); doCallBack(CallBack::EDITCB); doCallBack(CallBack::MOVECB); } void Box::editEnd() { annuli_[0] = annuli_[0].abs(); updateBBox(); doCallBack(CallBack::EDITENDCB); } void Box::analysis(AnalysisTask mm, int which) { switch (mm) { case HISTOGRAM: if (!analysisHistogram_ && which) { addCallBack(CallBack::MOVECB, analysisHistogramCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisHistogramCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisHistogramCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisHistogramCB_[1], parent->options->cmdName); } if (analysisHistogram_ && !which) { deleteCallBack(CallBack::MOVECB, analysisHistogramCB_[0]); deleteCallBack(CallBack::EDITCB, analysisHistogramCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisHistogramCB_[0]); deleteCallBack(CallBack::DELETECB, analysisHistogramCB_[1]); } analysisHistogram_ = which; break; case PLOT3D: if (!analysisPlot3d_ && which) { addCallBack(CallBack::MOVECB, analysisPlot3dCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisPlot3dCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisPlot3dCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisPlot3dCB_[1], parent->options->cmdName); } if (analysisPlot3d_ && !which) { deleteCallBack(CallBack::MOVECB, analysisPlot3dCB_[0]); deleteCallBack(CallBack::EDITCB, analysisPlot3dCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisPlot3dCB_[0]); deleteCallBack(CallBack::DELETECB, analysisPlot3dCB_[1]); } analysisPlot3d_ = which; break; case STATS: if (!analysisStats_ && which) { addCallBack(CallBack::MOVECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisStatsCB_[1], parent->options->cmdName); } if (analysisStats_ && !which) { deleteCallBack(CallBack::MOVECB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITCB, analysisStatsCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::DELETECB, analysisStatsCB_[1]); } analysisStats_ = which; break; default: // na break; } } void Box::analysisHistogram(char* xname, char* yname, int num) { double* x; double* y; Matrix mm = Rotate(angle) * Translate(center); // during resize, annuli_ can be negative Vector vv = annuli_[0].abs(); BBox bb(-vv * mm); bb.bound( vv * mm); bb.bound(Vector( vv[0],-vv[1]) * mm); bb.bound(Vector(-vv[0], vv[1]) * mm); parent->markerAnalysisHistogram(this, &x, &y, bb, num); analysisXYResult(xname, yname, x, y, num+1); } void Box::analysisPlot3d(char* xname, char* yname, Coord::CoordSystem sys, Marker::AnalysisMethod method) { double* x; double* y; Matrix mm = Rotate(angle) * Translate(center); // during resize, annuli_ can be negative Vector vv = annuli_[0].abs(); BBox bb(-vv * mm); bb.bound( vv * mm); bb.bound(Vector( vv[0],-vv[1]) * mm); bb.bound(Vector(-vv[0], vv[1]) * mm); int num = parent->markerAnalysisPlot3d(this, &x, &y, bb, sys, method); analysisXYResult(xname, yname, x, y, num); } void Box::analysisStats(Coord::CoordSystem sys, Coord::SkyFrame sky) { ostringstream str; Matrix mm = Rotate(angle) * Translate(center); // during resize, annuli_ can be negative Vector vv = annuli_[0].abs(); BBox bb(-vv * mm); bb.bound( vv * mm); bb.bound(Vector( vv[0],-vv[1]) * mm); bb.bound(Vector(-vv[0], vv[1]) * mm); parent->markerAnalysisStats(this, str, bb, sys, sky); str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } // list void Box::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 0); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { Vector rr = ptr->mapLenFromRef(annuli_[0],sys,Coord::ARCSEC); double aa = parent->mapAngleFromRef(angle,sys,sky); switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ',' << setprecision(3) << fixed << setunit('"') << rr << ','; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(aa) << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << setprecision(8) << ra << ',' << dec << ',' << setprecision(3) << fixed << setunit('"') << rr << ','; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(aa) << ')'; break; } } else listNonCel(ptr, str, sys); } listPost(str, conj, strip); } void Box::listNonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { Vector vv = ptr->mapFromRef(center,sys); Vector rr = ptr->mapLenFromRef(annuli_[0],sys); double aa = parent->mapAngleFromRef(angle,sys); str << type_ << '(' << setprecision(8) << vv << ',' << rr << ',' << radToDeg(aa) << ')'; } void Box::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowCenter(ptr,sys,sky,format); XMLRowRadius(ptr,sys,annuli_[0]); XMLRowAng(sys,sky); XMLRowProps(ptr,sys); XMLRowEnd(str); } void Box::listCiao(ostream& str, Coord::CoordSystem sys, int strip) { FitsImage* ptr = parent->findFits(); listCiaoPre(str); // radius is always in image coords switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector vv = ptr->mapFromRef(center,Coord::PHYSICAL); Vector rr = ptr->mapLenFromRef(annuli_[0],Coord::PHYSICAL); str << type_ << '(' << setprecision(8) << vv << ',' << rr << ',' << radToDeg(angle) << ')'; } break; default: if (ptr->hasWCSCel(sys)) { listRADEC(ptr,center,sys,Coord::FK5,Coord::SEXAGESIMAL); Vector rr = ptr->mapLenFromRef(annuli_[0],sys,Coord::ARCMIN); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(5) << fixed << setunit('\'') << rr << ','; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle) << ')'; } } listCiaoPost(str, strip); } void Box::listSAOtng(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); listSAOtngPre(str, strip); // radius is always in image coords switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector vv = ptr->mapFromRef(center,Coord::IMAGE); Vector rr = ptr->mapLenFromRef(annuli_[0],Coord::IMAGE); str << type_ << '(' << setprecision(8) << vv << ',' << rr << ',' << radToDeg(angle) << ')'; } break; default: if (ptr->hasWCSCel(sys)) { Vector rr = ptr->mapLenFromRef(annuli_[0],Coord::IMAGE); switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ',' << setprecision(8) << rr << ',' << setprecision(8) << radToDeg(angle) << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(8) << rr << ',' << setprecision(8) << radToDeg(angle) << ')'; break; } } } listSAOtngPost(str,strip); } void Box::listPros(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); switch (sys) { case Coord::IMAGE: case Coord::DETECTOR: case Coord::AMPLIFIER: sys = Coord::IMAGE; case Coord::PHYSICAL: { Vector vv = ptr->mapFromRef(center,sys); Vector rr = ptr->mapLenFromRef(annuli_[0],Coord::IMAGE); coord.listProsCoordSystem(str,sys,sky); str << "; "<< type_ << ' ' << setprecision(8) << vv << ' ' << rr << ' ' << radToDeg(angle); } break; default: if (ptr->hasWCSCel(sys)) { Vector rr = ptr->mapLenFromRef(annuli_[0],sys,Coord::ARCSEC); switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); coord.listProsCoordSystem(str,sys,sky); str << "; " << type_ << ' ' << setprecision(10) << setunit('d') << vv << ' ' << setprecision(3) << fixed << setunit('"') << rr << ' '; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle); } break; case Coord::SEXAGESIMAL: listRADECPros(ptr,center,sys,sky,format); coord.listProsCoordSystem(str,sys,sky); str << "; " << type_ << ' ' << ra << ' ' << dec << ' ' << setprecision(3) << fixed << setunit('"') << rr << ' '; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle); break; } } } listProsPost(str, strip); } void Box::listSAOimage(ostream& str, int strip) { FitsImage* ptr = parent->findFits(); listSAOimagePre(str); Vector vv = ptr->mapFromRef(center,Coord::IMAGE); str << type_ << '(' << setprecision(8) << vv << ',' << annuli_[0] << ',' << radToDeg(angle) << ')'; listSAOimagePost(str, strip); } saods9/tksao/frame/box.h000644 000765 000000 00000002745 12752657750 015570 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __box_h__ #define __box_h__ #include "basebox.h" class Box : public BaseBox { protected: void listNonCel(FitsImage*, ostream&, Coord::CoordSystem); public: Box(Base* p, const Vector& ctr, const Vector& seg, double ang); Box(Base* p, const Vector& ctr, const Vector& seg, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Box(const Box&); virtual Marker* dup() {return new Box(*this);} void editBegin(int); void edit(const Vector&, int); void editEnd(); void analysis(AnalysisTask, int); void analysisHistogram(char*, char*, int); void analysisPlot3d(char*, char*, Coord::CoordSystem, Marker::AnalysisMethod); void analysisStats(Coord::CoordSystem, Coord::SkyFrame sky); void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); virtual void listCiao(ostream&, Coord::CoordSystem, int); virtual void listSAOtng(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); virtual void listPros(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); virtual void listSAOimage(ostream&, int); }; #endif saods9/tksao/frame/boxannulus.C000644 000765 000000 00000030676 12775230632 017124 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "boxannulus.h" #include "fitsimage.h" BoxAnnulus::BoxAnnulus(Base* p, const Vector& ctr, const Vector& s, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseBox(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = 1; annuli_ = new Vector[1]; annuli_[0] = s; strcpy(type_,"boxannulus"); numHandle = 4; updateBBox(); } BoxAnnulus::BoxAnnulus(Base* p, const Vector& ctr, const Vector& inner, const Vector& outer, int num, double ang) : BaseBox(p, ctr, ang) { numAnnuli_ = num+1; annuli_ = new Vector[numAnnuli_]; for (int i=0; i& tg, const List& cb) : BaseBox(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = num+1; annuli_ = new Vector[numAnnuli_]; for (int i=0; i& tg, const List& cb) : BaseBox(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = an; annuli_ = new Vector[numAnnuli_]; for (int i=0; ioptions->cmdName); addCallBack(CallBack::EDITCB, analysisRadialCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITENDCB, analysisRadialCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisRadialCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisRadialCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisRadialCB_[1], parent->options->cmdName); } if (analysisRadial_ && !which) { deleteCallBack(CallBack::MOVECB, analysisRadialCB_[0]); deleteCallBack(CallBack::EDITCB, analysisRadialCB_[0]); deleteCallBack(CallBack::EDITENDCB, analysisRadialCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisRadialCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisRadialCB_[0]); deleteCallBack(CallBack::DELETECB, analysisRadialCB_[1]); } analysisRadial_ = which; break; case STATS: if (!analysisStats_ && which) { addCallBack(CallBack::MOVECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITENDCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisStatsCB_[1], parent->options->cmdName); } if (analysisStats_ && !which) { deleteCallBack(CallBack::MOVECB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITCB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITENDCB, analysisStatsCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::DELETECB, analysisStatsCB_[1]); } analysisStats_ = which; break; default: // na break; } } void BoxAnnulus::analysisRadial(char* xname, char* yname, char* ename, Coord::CoordSystem sys) { double* xx; double* yy; double* ee; BBox* bb = new BBox[numAnnuli_]; Matrix mm = Rotate(angle) * Translate(center); for (int ii=0; iimarkerAnalysisRadial(this, &xx, &yy, &ee, numAnnuli_-1, annuli_, bb, sys); analysisXYEResult(xname, yname, ename, xx, yy, ee, num); } void BoxAnnulus::analysisStats(Coord::CoordSystem sys, Coord::SkyFrame sky) { ostringstream str; BBox* bb = new BBox[numAnnuli_]; Matrix mm = Rotate(angle) * Translate(center); for (int ii=0; iimarkerAnalysisStats(this, str, numAnnuli_-1, bb, sys, sky); str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } // list void BoxAnnulus::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 0); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { double aa = parent->mapAngleFromRef(angle,sys,sky); switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << "box(" << setprecision(8) << vv << setprecision(3) << fixed; for (int ii=0; iimapLenFromRef(annuli_[ii],sys,Coord::ARCSEC); str << ',' << setunit('"') << rr; } str.unsetf(ios_base::floatfield); str << setprecision(8) << ',' << radToDeg(aa) << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << "box(" << ra << ',' << dec << setprecision(3) << fixed; for (int ii=0; iimapLenFromRef(annuli_[ii],sys,Coord::ARCSEC); str << ',' << setunit('"') << rr; } str.unsetf(ios_base::floatfield); str << setprecision(8) << ',' << radToDeg(aa) << ')'; break; } } else listNonCel(ptr, str, sys); } listPost(str, conj, strip); } void BoxAnnulus::listNonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { Vector vv = ptr->mapFromRef(center,sys); double aa = parent->mapAngleFromRef(angle,sys); str << "box(" << setprecision(8) << vv; for (int ii=0; iimapLenFromRef(annuli_[ii],sys); str << ',' << rr; } str << ',' << radToDeg(aa) << ')'; } void BoxAnnulus::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowCenter(ptr,sys,sky,format); XMLRowRadius(ptr,sys,annuli_,numAnnuli_); XMLRowAng(sys,sky); XMLRowProps(ptr,sys); XMLRowEnd(str); } void BoxAnnulus::listPros(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); switch (sys) { case Coord::IMAGE: case Coord::DETECTOR: case Coord::AMPLIFIER: sys = Coord::IMAGE; case Coord::PHYSICAL: { Vector vv = ptr->mapFromRef(center,sys); for (int ii=0; iimapLenFromRef(annuli_[ii],Coord::IMAGE); str << "box " << setprecision(8) << vv << ' ' << rr << ' ' << radToDeg(angle); if (ii!=0) { Vector r1 = ptr->mapLenFromRef(annuli_[ii-1],Coord::IMAGE); str << " & !box " << setprecision(8) << vv << ' ' << r1 << ' ' << radToDeg(angle); } listProsPost(str, strip); } } break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); for (int ii=0; iimapLenFromRef(annuli_[ii],sys,Coord::ARCSEC); str << "box " << setprecision(10) << setunit('d') << vv << ' ' << setprecision(3) << setunit('"') << fixed << rr << ' '; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle); if (ii!=0) { Vector r1 = ptr->mapLenFromRef(annuli_[ii-1],sys,Coord::ARCSEC); str << " & !box " << setprecision(8) << setunit('d') << vv << ' ' << setprecision(3) << setunit('"') << fixed << r1 << ' '; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle); } listProsPost(str, strip); } } break; case Coord::SEXAGESIMAL: listRADECPros(ptr,center,sys,sky,format); for (int ii=0; iimapLenFromRef(annuli_[ii],sys,Coord::ARCSEC); str << "box " << ra << ' ' << dec << ' ' << setprecision(3) << setunit('"') << fixed << rr << ' '; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle); if (ii!=0) { Vector r1 = ptr->mapLenFromRef(annuli_[ii-1],sys,Coord::ARCSEC); str << " & !box " << ra << ' ' << dec << ' ' << setprecision(3) << setunit('"') << fixed << r1 << ' '; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle); } listProsPost(str, strip); } break; } } } } void BoxAnnulus::listSAOimage(ostream& str, int strip) { FitsImage* ptr = parent->findFits(); listSAOimagePre(str); for (int ii=0; iimapFromRef(center,Coord::IMAGE); str << "box(" << setprecision(8) << vv << ',' << annuli_[ii] << ',' << radToDeg(angle) << ')'; if (ii!=0) str << " & !box(" << setprecision(8) << vv << ',' << annuli_[ii-1] << ',' << radToDeg(angle) << ')'; listSAOimagePost(str, strip); } } saods9/tksao/frame/boxannulus.h000644 000765 000000 00000003654 12752661141 017163 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __boxannulus_h__ #define __boxannulus_h__ #include "basebox.h" class BoxAnnulus : public BaseBox { protected: void listNonCel(FitsImage*, ostream&, Coord::CoordSystem); public: BoxAnnulus(Base* p, const Vector& ctr, const Vector& s, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); BoxAnnulus(Base* p, const Vector& ctr, const Vector& inner, const Vector& outer, int num, double ang); BoxAnnulus(Base* p, const Vector& ctr, const Vector& inner, const Vector& outer, int num, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); BoxAnnulus(Base* p, const Vector& ctr, int an, Vector* s, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); BoxAnnulus(const BoxAnnulus&); Marker* dup() {return new BoxAnnulus(*this);} void editBegin(int); void edit(const Vector&, int); void editEnd(); int addAnnuli(const Vector&); void analysis(AnalysisTask, int); void analysisRadial(char*, char*, char*, Coord::CoordSystem sys); void analysisStats(Coord::CoordSystem, Coord::SkyFrame sky); void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void listPros(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); void listSAOimage(ostream&, int); }; #endif saods9/tksao/frame/bpanda.C000644 000765 000000 00000046750 12775230632 016153 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "bpanda.h" #include "fitsimage.h" Bpanda::Bpanda(Base* p, const Vector& ctr, double a1, double a2, int an, const Vector& r1, const Vector& r2, int rn, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseBox(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = rn+1; annuli_ = new Vector[numAnnuli_]; for (int i=0; i& tg, const List& cb) : BaseBox(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = rn; annuli_ = new Vector[numAnnuli_]; for (int i=0; igetColor("red")); else if (ii == numAngles_-1) XSetForeground(display, gc, parent->getColor("blue")); else XSetForeground(display, gc, color); } else XSetForeground(display, gc, color); } XDrawLine(display, drawable, lgc, rr0[0], rr0[1], rr1[0], rr1[1]); } } void Bpanda::renderPS(int mode) { BaseBox::renderPS(mode); renderPSGC(mode); Vector r0 = annuli_[0]/2; Vector r1 = annuli_[numAnnuli_-1]/2; for (int ii=0; iicanvas) << ' ' << "moveto " << rr1.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } } #ifdef MAC_OSX_TK void Bpanda::renderMACOSX() { BaseBox::renderMACOSX(); renderMACOSXGC(); Vector r0 = annuli_[0]/2; Vector r1 = annuli_[numAnnuli_-1]/2; for (int ii=0; ii4) { int hh = h-4-1; if (numAnnuli_>2 && hh2 && hh<(numAnnuli_+numAngles_)) { hh -= numAnnuli_; deleteAngle(hh); } numHandle = 4 + numAnnuli_ + numAngles_; startAng_ = angles_[0]; stopAng_ = angles_[numAngles_-1]; updateBBox(); doCallBack(CallBack::EDITCB); } } int Bpanda::isIn(const Vector& vv, Coord::InternalSystem sys, int nn, int aa) { Vector pp = bckMap(vv,sys); return BaseBox::isIn(vv,sys,nn) && isInAngle(pp,aa); } void Bpanda::analysis(AnalysisTask mm, int which) { switch (mm) { case PANDA: if (!analysisPanda_ && which) { addCallBack(CallBack::MOVECB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITENDCB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisPandaCB_[1], parent->options->cmdName); } if (analysisPanda_ && !which) { deleteCallBack(CallBack::MOVECB, analysisPandaCB_[0]); deleteCallBack(CallBack::EDITCB, analysisPandaCB_[0]); deleteCallBack(CallBack::EDITENDCB, analysisPandaCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisPandaCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisPandaCB_[0]); deleteCallBack(CallBack::DELETECB, analysisPandaCB_[1]); } analysisPanda_ = which; break; case STATS: if (!analysisStats_ && which) { addCallBack(CallBack::MOVECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITENDCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisStatsCB_[1], parent->options->cmdName); } if (analysisStats_ && !which) { deleteCallBack(CallBack::MOVECB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITCB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITENDCB, analysisStatsCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::DELETECB, analysisStatsCB_[1]); } analysisStats_ = which; break; default: // na break; } } void Bpanda::analysisPanda(Coord::CoordSystem sys) { double* xx; double* yy; double* ee; BBox* bb = new BBox[numAnnuli_]; Matrix mm = Rotate(angle) * Translate(center); for (int ii=0; iimarkerAnalysisPanda(this, &xx, &yy, &ee, numAnnuli_-1, annuli_, numAngles_-1, angles_, bb, sys); analysisXYEResult(xx, yy, ee, num); } void Bpanda::analysisStats(Coord::CoordSystem sys, Coord::SkyFrame sky) { ostringstream str; BBox* bb = new BBox[numAnnuli_]; Matrix mm = Rotate(angle) * Translate(center); for (int ii=0; iimarkerAnalysisStats(this, str, numAnnuli_-1, numAngles_-1, bb, sys, sky); str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } // list void Bpanda::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { int regular = 1; if (numAngles_>2) { double delta; if (angles_[1] > angles_[0]) delta = angles_[1]-angles_[0]; else delta = angles_[1]+M_TWOPI-angles_[0]; for (int ii=2; ii angles_[ii-1]) diff = angles_[ii]-angles_[ii-1]; else diff = angles_[ii]+M_TWOPI-angles_[ii-1]; if (!teq(diff,delta,FLT_EPSILON)) { regular = 0; break; } } } if (numAnnuli_>2) { double delta = annuli_[1][0]-annuli_[0][0]; for (int i=2; ifindFits(sys,center); listPre(str, sys, sky, ptr, strip, 0); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listANonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { Vector r1 = ptr->mapLenFromRef(annuli_[0],sys,Coord::ARCSEC); Vector r2 = ptr->mapLenFromRef(annuli_[numAnnuli_-1],sys,Coord::ARCSEC); double ang1 = radToDeg(parent->mapAngleFromRef(angles_[0],sys,sky)); double ang2 = radToDeg(parent->mapAngleFromRef(angles_[numAngles_-1],sys,sky)); if (ang2<=ang1+FLT_EPSILON) ang2 += 360; switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(8) << vv << ',' << ang1 << ',' << ang2 <<',' << numAngles_-1 << ',' << setunit('"') << r1 << ',' << setunit('"') << r2 << ',' << numAnnuli_-1 << ',' << radToDeg(parent->mapAngleFromRef(angle,sys,sky)) << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(8) << ang1 << ',' << ang2 <<',' << numAngles_-1 << ',' << setunit('"') << r1 << ',' << setunit('"') << r2 << ',' << numAnnuli_-1 << ',' << radToDeg(parent->mapAngleFromRef(angle,sys,sky)) << ')'; break; } } else listANonCel(ptr, str, sys); } listPost(str, conj, strip); } void Bpanda::listANonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { double a1 = radToDeg(parent->mapAngleFromRef(angles_[0],sys)); double a2 = radToDeg(parent->mapAngleFromRef(angles_[numAngles_-1],sys)); if (a2<=a1+FLT_EPSILON) a2 += 360; Vector vv = ptr->mapFromRef(center,sys); Vector r1 = ptr->mapLenFromRef(annuli_[0],sys); Vector r2 = ptr->mapLenFromRef(annuli_[numAnnuli_-1],sys); double aa = parent->mapAngleFromRef(angle,sys); str << type_ << '(' << setprecision(8) << vv << ',' << a1 << ',' << a2 << ',' << numAngles_-1 << ',' << r1 << ',' << r2 << ',' << numAnnuli_-1 << ',' << radToDeg(aa) << ')'; } void Bpanda::listB(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { FitsImage* ptr = parent->findFits(sys,center); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listBNonCel(ptr, str, sys, sky, format, conj, strip); break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); for (int jj=1; jjmapFromRef(center,sys); double aa = parent->mapAngleFromRef(angle,sys); for (int jj=1; jjmapAngleFromRef(angles_[jj-1],sys)); double a2 = radToDeg(parent->mapAngleFromRef(angles_[jj],sys)); if (a2<=a1+FLT_EPSILON) a2 += 360; for (int ii=1; iimapLenFromRef(annuli_[ii-1],sys); Vector r2 = ptr->mapLenFromRef(annuli_[ii],sys); str << type_ << '(' << setprecision(8) << vv << ',' << a1 << ',' << a2 << ",1," << r1 << ',' << r2 << ",1," << radToDeg(aa) << ')'; if (!strip) { if (conj) str << " ||"; str << " # bpanda="; if (ii==1 && jj==1 && !strip) { str << '('; for (int kk=0; kkmapAngleFromRef(angles_[kk],sys); str << radToDeg(ar) << ((kkmapLenFromRef(annuli_[kk],sys); str << rr << ((kkmapAngleFromRef(angles_[jj-1],sys,sky)); double a2 = radToDeg(parent->mapAngleFromRef(angles_[jj],sys,sky)); if (a2<=a1+FLT_EPSILON) a2 += 360; Vector r1 = ptr->mapLenFromRef(annuli_[ii-1],sys,Coord::ARCSEC); Vector r2 = ptr->mapLenFromRef(annuli_[ii],sys,Coord::ARCSEC); double aa = parent->mapAngleFromRef(angle,sys,sky); str << setprecision(10) << a1 << ',' << a2 << ",1," << setprecision(3) << fixed << setunit('"') << r1 << ',' << setunit('"') << r2 << ",1,"; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(aa) << ')'; if (!strip) { if (conj) str << " ||"; str << " # bpanda="; if (ii==1 && jj==1 && !strip) { str << '(' << setprecision(8); for (int kk=0; kkmapAngleFromRef(angles_[kk],sys,sky); str << radToDeg(ar) << ((kkmapLenFromRef(annuli_[kk],sys,Coord::ARCSEC); str << setunit('"') << rr << ((kkfindFits(sys,center); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowCenter(ptr,sys,sky,format); XMLRowRadius(ptr,sys,annuli_,numAnnuli_); XMLRowAng(sys,sky); XMLRowAng(sys,sky,angles_,numAngles_); XMLRowProps(ptr,sys); XMLRowEnd(str); } saods9/tksao/frame/bpanda.h000644 000765 000000 00000004415 12752661141 016206 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __bpanda_h__ #define __bpanda_h__ #include "basebox.h" class Bpanda : public BaseBox { private: void renderX(Drawable, Coord::InternalSystem, RenderMode); void renderPS(int); #ifdef MAC_OSX_TK void renderMACOSX(); #endif #ifdef __WIN32 void renderWIN32(); #endif void updateHandles(); void listA(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listB(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listANonCel(FitsImage*, ostream&, Coord::CoordSystem); void listBNonCel(FitsImage*, ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listBCel(FitsImage*, int, int, ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); public: Bpanda(const Bpanda&); Bpanda(Base* p, const Vector& ctr, double a1, double a2, int an, const Vector& r1, const Vector& r2, int rn, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Bpanda(Base* p, const Vector& ctr, int an, double* a, int rn, Vector* r, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Marker* dup() {return new Bpanda(*this);} int isIn(const Vector& vv, Coord::InternalSystem sys, int nn, int aa); void editBegin(int); void edit(const Vector&, int); void editEnd(); int addAnnuli(const Vector&); int addAngles(const Vector&); void setAnglesAnnuli(double, double, int, Vector, Vector, int); void setAnglesAnnuli(const double*, int, const Vector*, int); void deleteAnglesAnnuli(int h); void analysis(AnalysisTask, int); void analysisPanda(Coord::CoordSystem sys); void analysisStats(Coord::CoordSystem, Coord::SkyFrame sky); void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); }; #endif saods9/tksao/frame/callback.C000644 000765 000000 00000001752 12705446246 016456 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "callback.h" CallBack::CallBack(const CallBack& a) { interp_ = a.interp_; type_ = a.type_; strcpy(proc_, a.proc_); strcpy(arg_, a.arg_); previous_ = NULL; next_ = NULL; } CallBack& CallBack::operator=(const CallBack& a) { interp_ = a.interp_; type_ = a.type_; strcpy(proc_, a.proc_); strcpy(arg_, a.arg_); previous_ = NULL; next_ = NULL; return *this; } CallBack::CallBack(Tcl_Interp* interp, Type type, const char* proc, const char* arg) { interp_ = interp; type_ = type; if (proc) strncpy(proc_, proc, 32); else proc_[0] = '\0'; if (arg) strncpy(arg_, arg, 64); else arg_[0] = '\0'; previous_ = NULL; next_ = NULL; } int CallBack::eval(const char* arg2) { return Tcl_VarEval(interp_, proc_, " ", arg_, " ", arg2, NULL); } saods9/tksao/frame/callback.h000644 000765 000000 00000002154 12705446247 016521 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __callback_h__ #define __callback_h__ #include class CallBack { public: enum Type {SELECTCB, UNSELECTCB, HIGHLITECB, UNHIGHLITECB, EDITBEGINCB, EDITCB, EDITENDCB, MOVEBEGINCB, MOVECB, MOVEENDCB, ROTATEBEGINCB, ROTATECB, ROTATEENDCB, DELETECB, TEXTCB, COLORCB, LINEWIDTHCB, PROPERTYCB, FONTCB, KEYCB, UPDATECB}; private: Tcl_Interp* interp_; Type type_; char proc_[128]; char arg_[256]; CallBack* previous_; CallBack* next_; public: CallBack(const CallBack&); CallBack(Tcl_Interp*, Type, const char*, const char*); CallBack& operator=(const CallBack&); int eval(const char*); Type type() {return type_;} const char* proc() {return proc_;} const char* arg() {return arg_;} CallBack* previous() {return previous_;} void setPrevious(CallBack* cb) {previous_ = cb;} CallBack* next() {return next_;} void setNext(CallBack* cb) {next_ = cb;} }; #endif saods9/tksao/frame/ciaolex.C000644 000765 000000 00000143741 12717403676 016356 0ustar00joyewheel000000 000000 #line 2 "frame/ciaolex.C" #line 4 "frame/ciaolex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer ciaoFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *ciaoalloc (yy_size_t ); void *ciaorealloc (void *,yy_size_t ); void ciaofree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 51 #define YY_END_OF_BUFFER 52 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[150] = { 0, 0, 0, 52, 50, 46, 49, 50, 45, 50, 50, 22, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 46, 48, 45, 0, 22, 24, 31, 27, 23, 22, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 47, 24, 33, 29, 23, 32, 28, 26, 0, 35, 25, 0, 0, 0, 23, 0, 0, 2, 3, 0, 6, 0, 9, 11, 12, 0, 0, 0, 0, 0, 0, 34, 30, 37, 36, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 16, 0, 0, 0, 0, 38, 0, 39, 0, 0, 0, 0, 0, 0, 5, 0, 8, 13, 0, 0, 0, 0, 0, 0, 40, 39, 0, 0, 43, 0, 0, 41, 0, 4, 0, 0, 0, 18, 19, 20, 0, 44, 42, 1, 7, 15, 0, 21, 0, 17, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 5, 6, 1, 1, 1, 7, 1, 1, 1, 8, 1, 8, 9, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 1, 1, 1, 1, 1, 1, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 1, 21, 22, 23, 24, 25, 1, 26, 27, 28, 29, 30, 1, 31, 32, 1, 1, 33, 1, 1, 1, 1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 1, 1, 43, 44, 45, 46, 47, 1, 48, 49, 50, 51, 52, 1, 53, 54, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[55] = { 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int16_t yy_base[151] = { 0, 0, 0, 306, 307, 303, 307, 301, 0, 46, 293, 52, 35, 36, 44, 49, 45, 49, 53, 53, 59, 56, 58, 55, 300, 307, 0, 286, 97, 103, 307, 288, 107, 0, 284, 282, 71, 281, 80, 78, 85, 102, 95, 104, 104, 307, 108, 106, 114, 101, 116, 108, 307, 148, 307, 283, 152, 307, 277, 307, 161, 307, 307, 74, 150, 273, 168, 155, 110, 307, 152, 141, 154, 155, 307, 307, 156, 148, 153, 162, 170, 156, 160, 307, 275, 307, 307, 271, 190, 126, 198, 201, 170, 172, 194, 189, 201, 189, 200, 207, 196, 197, 198, 203, 307, 270, 215, 246, 219, 243, 221, 198, 216, 307, 206, 307, 307, 211, 214, 224, 219, 225, 228, 216, 137, 248, 250, 307, 251, 252, 307, 236, 307, 248, 242, 248, 307, 307, 307, 244, 307, 307, 307, 307, 307, 250, 307, 260, 307, 307, 100 } ; static yyconst flex_int16_t yy_def[151] = { 0, 149, 1, 149, 149, 149, 149, 149, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 149, 11, 149, 149, 149, 149, 11, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 0, 149 } ; static yyconst flex_int16_t yy_nxt[362] = { 0, 4, 5, 6, 7, 4, 8, 4, 9, 10, 11, 4, 12, 13, 14, 15, 16, 17, 4, 4, 4, 4, 4, 4, 18, 19, 20, 21, 4, 4, 22, 4, 4, 23, 12, 13, 14, 15, 16, 17, 4, 4, 4, 4, 4, 4, 18, 19, 20, 21, 4, 4, 22, 4, 4, 27, 28, 30, 38, 31, 39, 32, 33, 34, 40, 41, 42, 35, 36, 43, 44, 37, 50, 46, 51, 48, 45, 47, 52, 65, 38, 66, 39, 49, 63, 89, 40, 41, 42, 35, 36, 43, 44, 37, 50, 46, 51, 48, 45, 47, 52, 26, 54, 68, 55, 49, 56, 28, 57, 69, 58, 70, 30, 29, 31, 71, 72, 29, 59, 60, 73, 74, 62, 36, 75, 68, 76, 77, 78, 80, 81, 69, 79, 70, 82, 105, 106, 71, 72, 92, 59, 60, 73, 74, 62, 36, 75, 123, 76, 77, 78, 80, 81, 83, 79, 84, 82, 54, 53, 55, 64, 92, 53, 59, 60, 67, 93, 62, 36, 87, 94, 88, 90, 54, 95, 55, 96, 91, 66, 97, 98, 99, 100, 101, 102, 59, 60, 103, 93, 62, 36, 111, 94, 112, 90, 83, 95, 84, 96, 91, 88, 97, 98, 99, 100, 101, 102, 107, 108, 103, 109, 110, 113, 111, 114, 112, 115, 116, 117, 118, 119, 120, 121, 122, 124, 106, 123, 131, 126, 108, 129, 110, 132, 133, 113, 134, 114, 135, 115, 116, 117, 118, 119, 120, 121, 122, 127, 136, 130, 131, 137, 138, 139, 128, 132, 133, 125, 134, 125, 135, 125, 128, 128, 142, 143, 144, 145, 146, 127, 136, 130, 147, 137, 138, 139, 140, 148, 127, 141, 130, 123, 88, 104, 66, 86, 142, 143, 144, 145, 146, 85, 67, 64, 147, 63, 61, 53, 140, 148, 127, 141, 130, 24, 29, 25, 24, 149, 3, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149 } ; static yyconst flex_int16_t yy_chk[362] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 11, 12, 11, 13, 11, 11, 11, 14, 15, 16, 11, 11, 17, 18, 11, 21, 19, 22, 20, 18, 19, 23, 36, 12, 36, 13, 20, 63, 63, 14, 15, 16, 11, 11, 17, 18, 11, 21, 19, 22, 20, 18, 19, 23, 150, 28, 38, 28, 20, 28, 28, 29, 39, 29, 40, 32, 29, 32, 41, 42, 32, 29, 29, 43, 44, 32, 32, 46, 38, 47, 47, 48, 49, 50, 39, 48, 40, 51, 89, 89, 41, 42, 68, 29, 29, 43, 44, 32, 32, 46, 124, 47, 47, 48, 49, 50, 53, 48, 53, 51, 56, 53, 56, 64, 68, 56, 53, 53, 67, 70, 56, 56, 60, 71, 60, 64, 66, 72, 66, 73, 67, 66, 76, 77, 78, 79, 80, 81, 53, 53, 82, 70, 56, 56, 92, 71, 93, 64, 88, 72, 88, 73, 67, 88, 76, 77, 78, 79, 80, 81, 90, 90, 82, 91, 91, 94, 92, 95, 93, 96, 97, 98, 99, 100, 101, 102, 103, 106, 106, 123, 111, 108, 108, 110, 110, 112, 114, 94, 117, 95, 118, 96, 97, 98, 99, 100, 101, 102, 103, 108, 119, 110, 111, 120, 121, 122, 109, 112, 114, 107, 117, 125, 118, 126, 128, 129, 131, 133, 134, 135, 139, 108, 119, 110, 145, 120, 121, 122, 125, 147, 126, 128, 129, 105, 87, 84, 65, 58, 131, 133, 134, 135, 139, 55, 37, 35, 145, 34, 31, 27, 125, 147, 126, 128, 129, 24, 10, 7, 5, 3, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "frame/ciaolex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "frame/ciaolex.L" #include #include #include #include "util.h" #include "ciaoparser.H" extern YYSTYPE* ciaolval; /* rules */ #line 549 "frame/ciaolex.C" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 27 "frame/ciaolex.L" #line 652 "frame/ciaolex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 150 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 149 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 29 "frame/ciaolex.L" {return ANNULUS_;} YY_BREAK case 2: YY_RULE_SETUP #line 30 "frame/ciaolex.L" {return BOX_;} YY_BREAK case 3: YY_RULE_SETUP #line 31 "frame/ciaolex.L" {return CIRCLE_;} YY_BREAK case 4: YY_RULE_SETUP #line 32 "frame/ciaolex.L" {return CIRCLE_;} YY_BREAK case 5: YY_RULE_SETUP #line 33 "frame/ciaolex.L" {return DEBUG_;} YY_BREAK case 6: YY_RULE_SETUP #line 34 "frame/ciaolex.L" {return ELLIPSE_;} YY_BREAK case 7: YY_RULE_SETUP #line 35 "frame/ciaolex.L" {return ELLIPSE_;} YY_BREAK case 8: YY_RULE_SETUP #line 36 "frame/ciaolex.L" {return FIELD_;} YY_BREAK case 9: YY_RULE_SETUP #line 37 "frame/ciaolex.L" {return OFF_;} YY_BREAK case 10: YY_RULE_SETUP #line 38 "frame/ciaolex.L" {return ON_;} YY_BREAK case 11: YY_RULE_SETUP #line 39 "frame/ciaolex.L" {return PIE_;} YY_BREAK case 12: YY_RULE_SETUP #line 40 "frame/ciaolex.L" {return POINT_;} YY_BREAK case 13: YY_RULE_SETUP #line 41 "frame/ciaolex.L" {return POINT_;} YY_BREAK case 14: YY_RULE_SETUP #line 42 "frame/ciaolex.L" {return POLYGON_;} YY_BREAK case 15: YY_RULE_SETUP #line 43 "frame/ciaolex.L" {return POLYGON_;} YY_BREAK case 16: YY_RULE_SETUP #line 44 "frame/ciaolex.L" {return RECTANGLE_;} YY_BREAK case 17: YY_RULE_SETUP #line 45 "frame/ciaolex.L" {return RECTANGLE_;} YY_BREAK case 18: YY_RULE_SETUP #line 46 "frame/ciaolex.L" {return REGION_;} YY_BREAK case 19: YY_RULE_SETUP #line 47 "frame/ciaolex.L" {return ROTBOX_;} YY_BREAK case 20: YY_RULE_SETUP #line 48 "frame/ciaolex.L" {return SECTOR_;} YY_BREAK case 21: YY_RULE_SETUP #line 49 "frame/ciaolex.L" {return VERSION_;} YY_BREAK case 22: YY_RULE_SETUP #line 51 "frame/ciaolex.L" { // Integer ciaolval->integer = atoi(yytext); return INT; } YY_BREAK case 23: #line 57 "frame/ciaolex.L" case 24: YY_RULE_SETUP #line 57 "frame/ciaolex.L" { // Real Number ciaolval->real = atof(yytext); return REAL; } YY_BREAK case 25: #line 63 "frame/ciaolex.L" case 26: YY_RULE_SETUP #line 63 "frame/ciaolex.L" { // degrees yytext[yyleng-1] = '\0'; ciaolval->real = atof(yytext); return ANGDEGREE; } YY_BREAK case 27: #line 70 "frame/ciaolex.L" case 28: #line 71 "frame/ciaolex.L" case 29: #line 72 "frame/ciaolex.L" case 30: YY_RULE_SETUP #line 72 "frame/ciaolex.L" { // minutes of arc yytext[yyleng-1] = '\0'; ciaolval->real = atof(yytext); return ARCMINUTE; } YY_BREAK case 31: #line 79 "frame/ciaolex.L" case 32: #line 80 "frame/ciaolex.L" case 33: #line 81 "frame/ciaolex.L" case 34: YY_RULE_SETUP #line 81 "frame/ciaolex.L" { // seconds of arc yytext[yyleng-1] = '\0'; ciaolval->real = atof(yytext); return ARCSECOND; } YY_BREAK case 35: #line 88 "frame/ciaolex.L" case 36: #line 89 "frame/ciaolex.L" case 37: #line 90 "frame/ciaolex.L" case 38: YY_RULE_SETUP #line 90 "frame/ciaolex.L" { // seconds of arc yytext[yyleng-1] = '\0'; ciaolval->real = atof(yytext); return ARCSECOND; } YY_BREAK case 39: #line 97 "frame/ciaolex.L" case 40: YY_RULE_SETUP #line 97 "frame/ciaolex.L" { // Sexagesimal int ll = yyleng <(CIAOBUFSIZE-1) ? yyleng:(CIAOBUFSIZE-1); strncpy(ciaolval->str,yytext,ll); ciaolval->str[ll] = '\0'; return SEXSTR; } YY_BREAK case 41: #line 105 "frame/ciaolex.L" case 42: YY_RULE_SETUP #line 105 "frame/ciaolex.L" { // HMS int ll = yyleng <(CIAOBUFSIZE-1) ? yyleng:(CIAOBUFSIZE-1); strncpy(ciaolval->str,yytext,ll); ciaolval->str[ll] = '\0'; return HMSSTR; } YY_BREAK case 43: #line 113 "frame/ciaolex.L" case 44: YY_RULE_SETUP #line 113 "frame/ciaolex.L" { // DMS int ll = yyleng <(CIAOBUFSIZE-1) ? yyleng:(CIAOBUFSIZE-1); strncpy(ciaolval->str,yytext,ll); ciaolval->str[ll] = '\0'; return DMSSTR; } YY_BREAK case 45: YY_RULE_SETUP #line 120 "frame/ciaolex.L" { // comment, eat it } YY_BREAK case 46: YY_RULE_SETUP #line 123 "frame/ciaolex.L" { // White Spaces } YY_BREAK case 47: YY_RULE_SETUP #line 126 "frame/ciaolex.L" { // fake line feed return '\n'; } YY_BREAK case 48: /* rule 48 can match eol */ YY_RULE_SETUP #line 130 "frame/ciaolex.L" { // windows line feed return '\n'; } YY_BREAK case 49: /* rule 49 can match eol */ YY_RULE_SETUP #line 134 "frame/ciaolex.L" { // linefeed return '\n'; } YY_BREAK case YY_STATE_EOF(INITIAL): #line 138 "frame/ciaolex.L" { // eof return EOF_; } YY_BREAK case 50: YY_RULE_SETUP #line 142 "frame/ciaolex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 51: YY_RULE_SETUP #line 146 "frame/ciaolex.L" ECHO; YY_BREAK #line 999 "frame/ciaolex.C" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; ciaofree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); ciaofree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ ciaorealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) ciaorealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 150 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 150 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 149); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) ciaoalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) ciaoalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) ciaofree((void *) b->yy_ch_buf ); ciaofree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)ciaoalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)ciaorealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) ciaoalloc(new_size ); else (yy_start_stack) = (int *) ciaorealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *ciaoalloc (yy_size_t size ) { return (void *) malloc( size ); } void *ciaorealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void ciaofree (void * ptr ) { free( (char *) ptr ); /* see ciaorealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 146 "frame/ciaolex.L" saods9/tksao/frame/ciaolex.L000644 000765 000000 00000005614 12717403676 016363 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "util.h" #include "ciaoparser.H" extern YYSTYPE* ciaolval; %} D [0-9] E [Ee][+-]?{D}+ /* rules */ %% annulus {return ANNULUS_;} box {return BOX_;} cir {return CIRCLE_;} circle {return CIRCLE_;} debug {return DEBUG_;} ell {return ELLIPSE_;} ellipse {return ELLIPSE_;} field {return FIELD_;} off {return OFF_;} on {return ON_;} pie {return PIE_;} poi {return POINT_;} point {return POINT_;} poly {return POLYGON_;} polygon {return POLYGON_;} rect {return RECTANGLE_;} rectangle {return RECTANGLE_;} region {return REGION_;} rotbox {return ROTBOX_;} sector {return SECTOR_;} version {return VERSION_;} [+-]?{D}+ { // Integer ciaolval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number ciaolval->real = atof(yytext); return REAL; } [+-]?{D}+"."?d | [+-]?{D}*"."{D}+d { // degrees yytext[yyleng-1] = '\0'; ciaolval->real = atof(yytext); return ANGDEGREE; } {D}+"."?' | {D}*"."{D}+' | [+-]?{D}+"."?({E})?' | [+-]?{D}*"."{D}+({E})?' { // minutes of arc yytext[yyleng-1] = '\0'; ciaolval->real = atof(yytext); return ARCMINUTE; } {D}+"."?\" | {D}*"."{D}+\" | [+-]?{D}+"."?({E})?\" | [+-]?{D}*"."{D}+({E})?\" { // seconds of arc yytext[yyleng-1] = '\0'; ciaolval->real = atof(yytext); return ARCSECOND; } {D}+"."?\'\' | {D}*"."{D}+\'\' | [+-]?{D}+"."?({E})?\'\' | [+-]?{D}*"."{D}+({E})?\'\' { // seconds of arc yytext[yyleng-1] = '\0'; ciaolval->real = atof(yytext); return ARCSECOND; } [+-]?{D}+:{D}+:{D}+"."? | [+-]?{D}+:{D}+:{D}*"."{D}+ { // Sexagesimal int ll = yyleng <(CIAOBUFSIZE-1) ? yyleng:(CIAOBUFSIZE-1); strncpy(ciaolval->str,yytext,ll); ciaolval->str[ll] = '\0'; return SEXSTR; } [+-]?{D}+h{D}+m{D}+"."?s | [+-]?{D}+h{D}+m{D}*"."{D}+s { // HMS int ll = yyleng <(CIAOBUFSIZE-1) ? yyleng:(CIAOBUFSIZE-1); strncpy(ciaolval->str,yytext,ll); ciaolval->str[ll] = '\0'; return HMSSTR; } [+-]?{D}+d{D}+m{D}+"."?s | [+-]?{D}+d{D}+m{D}*"."{D}+s { // DMS int ll = yyleng <(CIAOBUFSIZE-1) ? yyleng:(CIAOBUFSIZE-1); strncpy(ciaolval->str,yytext,ll); ciaolval->str[ll] = '\0'; return DMSSTR; } #.* { // comment, eat it } [ \t]+ { // White Spaces } \\n { // fake line feed return '\n'; } \r\n { // windows line feed return '\n'; } \n { // linefeed return '\n'; } <> { // eof return EOF_; } . { // Else, return the char return yytext[0]; } %% saods9/tksao/frame/ciaoparser.C000644 000765 000000 00000162053 12720663264 017052 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse ciaoparse #define yylex ciaolex #define yyerror ciaoerror #define yylval ciaolval #define yychar ciaochar #define yydebug ciaodebug #define yynerrs ciaonerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, ANGDEGREE = 260, ARCMINUTE = 261, ARCSECOND = 262, SEXSTR = 263, HMSSTR = 264, DMSSTR = 265, EOF_ = 266, ANNULUS_ = 267, BOX_ = 268, CIRCLE_ = 269, DEBUG_ = 270, ELLIPSE_ = 271, FIELD_ = 272, OFF_ = 273, ON_ = 274, PIE_ = 275, POINT_ = 276, POLYGON_ = 277, RECTANGLE_ = 278, REGION_ = 279, ROTBOX_ = 280, SECTOR_ = 281, VERSION_ = 282 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define ANGDEGREE 260 #define ARCMINUTE 261 #define ARCSECOND 262 #define SEXSTR 263 #define HMSSTR 264 #define DMSSTR 265 #define EOF_ 266 #define ANNULUS_ 267 #define BOX_ 268 #define CIRCLE_ 269 #define DEBUG_ 270 #define ELLIPSE_ 271 #define FIELD_ 272 #define OFF_ 273 #define ON_ 274 #define PIE_ 275 #define POINT_ 276 #define POLYGON_ 277 #define RECTANGLE_ 278 #define REGION_ 279 #define ROTBOX_ 280 #define SECTOR_ 281 #define VERSION_ 282 /* Copy the first part of user declarations. */ #line 10 "frame/ciaoparser.Y" #define YYDEBUG 1 #define FITSPTR (fr->findFits()) #include #include #include #include "base.h" #include "fitsimage.h" #include "basemarker.h" #undef yyFlexLexer #define yyFlexLexer ciaoFlexLexer #include extern int ciaolex(void*, ciaoFlexLexer*); extern void ciaoerror(Base*, ciaoFlexLexer*, const char*); static const char *color = "green"; static int dash[] = {8,3}; static const char *font = "helvetica 10 normal roman"; static const char *text = ""; static unsigned short props; static List polylist; static List taglist; static List cblist; static void setProps(unsigned short* props, unsigned short prop, int value); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 43 "frame/ciaoparser.Y" { #define CIAOBUFSIZE 2048 double real; int integer; char str[CIAOBUFSIZE]; double vector[3]; } /* Line 193 of yacc.c. */ #line 199 "frame/ciaoparser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 212 "frame/ciaoparser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 9 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 148 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 38 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 23 /* YYNRULES -- Number of rules. */ #define YYNRULES 60 /* YYNRULES -- Number of states. */ #define YYNSTATES 133 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 282 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 28, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 34, 2, 2, 2, 2, 30, 2, 36, 37, 29, 32, 35, 33, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 31, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 7, 10, 11, 14, 16, 20, 22, 24, 26, 27, 29, 31, 33, 35, 37, 40, 42, 44, 46, 48, 50, 52, 54, 56, 57, 59, 61, 63, 65, 67, 71, 75, 79, 83, 85, 87, 89, 93, 97, 101, 105, 113, 119, 122, 128, 136, 139, 151, 155, 156, 161, 167, 170, 173, 181, 188, 192, 194 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 39, 0, -1, 39, 40, 41, -1, 40, 41, -1, -1, 15, 44, -1, 27, -1, 48, 42, 56, -1, 47, -1, 28, -1, 11, -1, -1, 29, -1, 30, -1, 31, -1, 32, -1, 33, -1, 34, 29, -1, 34, -1, 4, -1, 3, -1, 19, -1, 18, -1, 35, -1, 36, -1, 37, -1, -1, 43, -1, 43, -1, 5, -1, 6, -1, 7, -1, 43, 45, 43, -1, 5, 45, 5, -1, 6, 45, 6, -1, 7, 45, 7, -1, 8, -1, 9, -1, 10, -1, 43, 45, 43, -1, 52, 45, 52, -1, 53, 45, 54, -1, 5, 45, 5, -1, 12, 46, 55, 45, 50, 45, 50, -1, 13, 46, 55, 45, 51, -1, 13, 58, -1, 14, 46, 55, 45, 50, -1, 16, 46, 55, 45, 51, 45, 49, -1, 17, 46, -1, 20, 46, 55, 45, 50, 45, 50, 45, 49, 45, 49, -1, 21, 46, 55, -1, -1, 22, 57, 46, 59, -1, 23, 46, 55, 45, 55, -1, 24, 46, -1, 25, 58, -1, 26, 46, 55, 45, 49, 45, 49, -1, 46, 55, 45, 51, 45, 49, -1, 59, 45, 60, -1, 60, -1, 55, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 93, 93, 94, 97, 98, 99, 100, 103, 104, 105, 108, 109, 110, 111, 112, 113, 114, 115, 118, 119, 122, 123, 126, 129, 132, 135, 146, 149, 150, 151, 152, 155, 162, 169, 176, 185, 188, 191, 194, 201, 208, 215, 224, 229, 234, 235, 240, 245, 246, 251, 256, 256, 261, 268, 269, 270, 273, 280, 281, 284 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "INT", "REAL", "ANGDEGREE", "ARCMINUTE", "ARCSECOND", "SEXSTR", "HMSSTR", "DMSSTR", "EOF_", "ANNULUS_", "BOX_", "CIRCLE_", "DEBUG_", "ELLIPSE_", "FIELD_", "OFF_", "ON_", "PIE_", "POINT_", "POLYGON_", "RECTANGLE_", "REGION_", "ROTBOX_", "SECTOR_", "VERSION_", "'\\n'", "'*'", "'&'", "'|'", "'+'", "'-'", "'!'", "','", "'('", "')'", "$accept", "commands", "command", "terminator", "include", "numeric", "debug", "sp", "bp", "ep", "init", "angle", "value", "vvalue", "sexagesimal", "hms", "dms", "coord", "shape", "@1", "rotbox", "polyNodes", "polyNode", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 10, 42, 38, 124, 43, 45, 33, 44, 40, 41 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 38, 39, 39, 40, 40, 40, 40, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 44, 44, 45, 46, 47, 48, 49, 50, 50, 50, 50, 51, 51, 51, 51, 52, 53, 54, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 57, 56, 56, 56, 56, 56, 58, 59, 59, 60 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 3, 2, 0, 2, 1, 3, 1, 1, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 7, 5, 2, 5, 7, 2, 11, 3, 0, 4, 5, 2, 2, 7, 6, 3, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 26, 0, 6, 26, 0, 11, 22, 21, 5, 1, 0, 10, 9, 25, 3, 8, 12, 13, 14, 15, 16, 18, 0, 2, 17, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 7, 24, 0, 0, 45, 0, 0, 48, 0, 0, 0, 0, 54, 0, 55, 0, 20, 19, 0, 36, 37, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 52, 59, 0, 0, 0, 42, 39, 40, 38, 41, 29, 30, 31, 28, 0, 0, 0, 0, 0, 44, 46, 0, 0, 0, 53, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 43, 33, 34, 35, 32, 57, 47, 0, 56, 0, 0, 0, 49 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 3, 4, 14, 22, 58, 8, 115, 39, 15, 5, 109, 96, 101, 59, 60, 91, 81, 37, 47, 41, 82, 83 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -69 static const yytype_int16 yypact[] = { 49, -17, -69, 73, 59, 104, -69, -69, -69, -69, 59, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -13, 106, -69, -69, -24, -24, -24, -24, -24, -24, -24, -69, -24, -24, -24, -24, -69, -69, 31, 31, -69, 31, 31, -69, 31, 31, -24, 31, -69, 31, -69, 31, -69, -69, -16, -69, -69, -16, -16, -16, -16, -16, -16, -16, -16, -69, 31, -16, -16, -16, -69, 19, 18, 15, 16, 136, 141, 136, 141, 136, -69, -16, -69, 31, 141, 18, -69, -69, -69, -69, -69, -69, -69, -69, -69, -16, -16, -16, -16, -16, -16, -69, -16, -16, 31, -69, -16, -69, -16, 136, 28, 40, 44, 18, 18, 18, 136, -69, 18, -69, -69, -69, -69, -69, -69, -69, -16, -69, 18, -16, 18, -69 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -69, -69, 71, 37, -69, -48, -69, -55, 78, -69, -69, -37, -60, -68, 6, -69, -69, 13, -69, -69, 50, -69, -15 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -5 static const yytype_int16 yytable[] = { 72, 6, 7, 73, 74, 75, 76, 77, 78, 79, 80, 103, 38, 84, 85, 86, 24, 107, 102, 71, 104, 53, 54, 56, 87, 88, 90, 105, 95, 100, 95, 100, 95, 121, 53, 54, 55, 100, 108, 56, 57, 110, 111, 112, 113, 114, 122, 23, 116, 117, 120, 123, 61, 62, 119, 63, 64, 127, 65, 66, -4, 68, 95, 69, 1, 70, 124, 108, 108, 95, 11, 108, 129, 9, 10, 131, 2, -4, 125, 126, 89, 108, 128, 108, -4, 51, -4, 12, 1, 0, 118, 0, 130, 0, 132, 0, 13, 106, 0, 0, 2, -4, 0, 0, 40, 42, 43, 44, 45, 46, -4, 48, 49, 50, 52, 0, 0, 0, 25, 26, 27, 0, 28, 29, 0, 67, 30, 31, 32, 33, 34, 35, 36, 16, 17, 18, 19, 20, 21, 53, 54, 92, 93, 94, 53, 54, 97, 98, 99 }; static const yytype_int16 yycheck[] = { 55, 18, 19, 58, 59, 60, 61, 62, 63, 64, 65, 79, 36, 68, 69, 70, 29, 85, 78, 35, 80, 3, 4, 8, 5, 73, 10, 82, 76, 77, 78, 79, 80, 5, 3, 4, 5, 85, 86, 8, 9, 96, 97, 98, 99, 100, 6, 10, 103, 104, 110, 7, 39, 40, 109, 42, 43, 117, 45, 46, 11, 48, 110, 50, 15, 52, 114, 115, 116, 117, 11, 119, 127, 0, 3, 130, 27, 28, 115, 116, 74, 129, 119, 131, 11, 35, 37, 28, 15, -1, 105, -1, 129, -1, 131, -1, 37, 84, -1, -1, 27, 28, -1, -1, 26, 27, 28, 29, 30, 31, 37, 33, 34, 35, 36, -1, -1, -1, 12, 13, 14, -1, 16, 17, -1, 47, 20, 21, 22, 23, 24, 25, 26, 29, 30, 31, 32, 33, 34, 3, 4, 5, 6, 7, 3, 4, 5, 6, 7 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 15, 27, 39, 40, 48, 18, 19, 44, 0, 40, 11, 28, 37, 41, 47, 29, 30, 31, 32, 33, 34, 42, 41, 29, 12, 13, 14, 16, 17, 20, 21, 22, 23, 24, 25, 26, 56, 36, 46, 46, 58, 46, 46, 46, 46, 46, 57, 46, 46, 46, 58, 46, 3, 4, 5, 8, 9, 43, 52, 53, 55, 55, 55, 55, 55, 55, 46, 55, 55, 55, 35, 45, 45, 45, 45, 45, 45, 45, 45, 45, 55, 59, 60, 45, 45, 45, 5, 43, 52, 10, 54, 5, 6, 7, 43, 50, 5, 6, 7, 43, 51, 50, 51, 50, 45, 55, 51, 43, 49, 45, 45, 45, 45, 45, 45, 45, 45, 60, 45, 50, 5, 6, 7, 43, 49, 49, 50, 49, 45, 49, 45, 49 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (fr, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, fr, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, ciaoFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; ciaoFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (fr); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, ciaoFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; ciaoFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, Base* fr, ciaoFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, fr, ll) YYSTYPE *yyvsp; int yyrule; Base* fr; ciaoFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , fr, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, fr, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, Base* fr, ciaoFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, fr, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; Base* fr; ciaoFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (fr); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (Base* fr, ciaoFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (Base* fr, ciaoFlexLexer* ll) #else int yyparse (fr, ll) Base* fr; ciaoFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 6: #line 99 "frame/ciaoparser.Y" {cerr << "CIAO Regions File 1.0" << endl;;} break; case 10: #line 105 "frame/ciaoparser.Y" {YYACCEPT;;} break; case 16: #line 113 "frame/ciaoparser.Y" {setProps(&props, Marker::INCLUDE, 0);;} break; case 17: #line 114 "frame/ciaoparser.Y" {setProps(&props, Marker::INCLUDE, 0);;} break; case 18: #line 115 "frame/ciaoparser.Y" {setProps(&props, Marker::INCLUDE, 0);;} break; case 19: #line 118 "frame/ciaoparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 20: #line 119 "frame/ciaoparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 21: #line 122 "frame/ciaoparser.Y" {yydebug=1;;} break; case 22: #line 123 "frame/ciaoparser.Y" {yydebug=0;;} break; case 26: #line 135 "frame/ciaoparser.Y" { // reset maperr flag maperr =0; props = Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::HIGHLITE | Marker::INCLUDE | Marker::SOURCE; ;} break; case 27: #line 146 "frame/ciaoparser.Y" {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;} break; case 28: #line 149 "frame/ciaoparser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), Coord::PHYSICAL);;} break; case 29: #line 150 "frame/ciaoparser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), Coord::WCS, Coord::DEGREE);;} break; case 30: #line 151 "frame/ciaoparser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), Coord::WCS, Coord::ARCMIN);;} break; case 31: #line 152 "frame/ciaoparser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), Coord::WCS, Coord::ARCSEC);;} break; case 32: #line 156 "frame/ciaoparser.Y" { Vector rr = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::PHYSICAL); (yyval.vector)[0] = rr[0]; (yyval.vector)[1] = rr[1]; (yyval.vector)[2] = rr[2]; ;} break; case 33: #line 163 "frame/ciaoparser.Y" { Vector rr= FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::WCS,Coord::DEGREE); (yyval.vector)[0] = rr[0]; (yyval.vector)[1] = rr[1]; (yyval.vector)[2] = rr[2]; ;} break; case 34: #line 170 "frame/ciaoparser.Y" { Vector rr = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::WCS, Coord::ARCMIN); (yyval.vector)[0] = rr[0]; (yyval.vector)[1] = rr[1]; (yyval.vector)[2] = rr[2]; ;} break; case 35: #line 177 "frame/ciaoparser.Y" { Vector rr = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::WCS, Coord::ARCSEC); (yyval.vector)[0] = rr[0]; (yyval.vector)[1] = rr[1]; (yyval.vector)[2] = rr[2]; ;} break; case 36: #line 185 "frame/ciaoparser.Y" {(yyval.real) = parseSEXStr((yyvsp[(1) - (1)].str));;} break; case 37: #line 188 "frame/ciaoparser.Y" {(yyval.real) = parseHMSStr((yyvsp[(1) - (1)].str));;} break; case 38: #line 191 "frame/ciaoparser.Y" {(yyval.real) = parseDMSStr((yyvsp[(1) - (1)].str));;} break; case 39: #line 195 "frame/ciaoparser.Y" { Vector rr = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::PHYSICAL); (yyval.vector)[0] = rr[0]; (yyval.vector)[1] = rr[1]; (yyval.vector)[2] = rr[2]; ;} break; case 40: #line 202 "frame/ciaoparser.Y" { Vector rr = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real)*360./24.,(yyvsp[(3) - (3)].real)), Coord::WCS,Coord::FK5); (yyval.vector)[0] = rr[0]; (yyval.vector)[1] = rr[1]; (yyval.vector)[2] = rr[2]; ;} break; case 41: #line 209 "frame/ciaoparser.Y" { Vector rr = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::WCS, Coord::FK5); (yyval.vector)[0] = rr[0]; (yyval.vector)[1] = rr[1]; (yyval.vector)[2] = rr[2]; ;} break; case 42: #line 216 "frame/ciaoparser.Y" { Vector rr = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::WCS, Coord::FK5); (yyval.vector)[0] = rr[0]; (yyval.vector)[1] = rr[1]; (yyval.vector)[2] = rr[2]; ;} break; case 43: #line 225 "frame/ciaoparser.Y" { fr->createAnnulusCmd(Vector((yyvsp[(3) - (7)].vector)), (yyvsp[(5) - (7)].real), (yyvsp[(7) - (7)].real), 1, color,dash,1,font,text,props,NULL,taglist,cblist); ;} break; case 44: #line 230 "frame/ciaoparser.Y" { fr->createBoxCmd(Vector((yyvsp[(3) - (5)].vector)), (yyvsp[(5) - (5)].vector), 0, color,dash,1,font,text,props,NULL,taglist,cblist); ;} break; case 46: #line 236 "frame/ciaoparser.Y" { fr->createCircleCmd(Vector((yyvsp[(3) - (5)].vector)), (yyvsp[(5) - (5)].real), color,dash,1,font,text,props,NULL,taglist,cblist); ;} break; case 47: #line 241 "frame/ciaoparser.Y" { fr->createEllipseCmd(Vector((yyvsp[(3) - (7)].vector)), Vector((yyvsp[(5) - (7)].vector)), (yyvsp[(7) - (7)].real), color,dash,1,font,text,props,NULL,taglist,cblist); ;} break; case 48: #line 245 "frame/ciaoparser.Y" {/* not supported */;} break; case 49: #line 247 "frame/ciaoparser.Y" { fr->createCpandaCmd(Vector((yyvsp[(3) - (11)].vector)), (yyvsp[(9) - (11)].real), (yyvsp[(11) - (11)].real), 1, (yyvsp[(5) - (11)].real), (yyvsp[(7) - (11)].real), 1, color,dash,1,font,text,props,NULL,taglist,cblist); ;} break; case 50: #line 252 "frame/ciaoparser.Y" { fr->createPointCmd(Vector((yyvsp[(3) - (3)].vector)), Point::BOXCIRCLE, POINTSIZE, color,dash,1,font,text,props,NULL,taglist,cblist); ;} break; case 51: #line 256 "frame/ciaoparser.Y" {polylist.deleteAll();;} break; case 52: #line 257 "frame/ciaoparser.Y" { fr->createPolygonCmd(polylist, color,dash,1,font,text,props,NULL,taglist,cblist); ;} break; case 53: #line 262 "frame/ciaoparser.Y" { Vector cc = (Vector((yyvsp[(5) - (5)].vector))-Vector((yyvsp[(3) - (5)].vector)))/2.+Vector((yyvsp[(3) - (5)].vector)); Vector wh = Vector((yyvsp[(5) - (5)].vector))-Vector((yyvsp[(3) - (5)].vector)); fr->createBoxCmd(cc, wh, 0, color,dash,1,font,text,props,NULL,taglist,cblist); ;} break; case 54: #line 268 "frame/ciaoparser.Y" {/* not supported */;} break; case 56: #line 270 "frame/ciaoparser.Y" {/* not supported */;} break; case 57: #line 274 "frame/ciaoparser.Y" { fr->createBoxCmd(Vector((yyvsp[(2) - (6)].vector)), Vector((yyvsp[(4) - (6)].vector)), (yyvsp[(6) - (6)].real), color,dash,1,font,text,props,NULL,taglist,cblist); ;} break; case 60: #line 284 "frame/ciaoparser.Y" {polylist.append(new Vertex((yyvsp[(1) - (1)].vector)));;} break; /* Line 1267 of yacc.c. */ #line 1808 "frame/ciaoparser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (fr, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (fr, ll, yymsg); } else { yyerror (fr, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, fr, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, fr, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (fr, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, fr, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, fr, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 287 "frame/ciaoparser.Y" static void setProps(unsigned short* props, unsigned short prop, int value) { if (value) *props |= prop; else *props &= ~prop; } saods9/tksao/frame/ciaoparser.H000644 000765 000000 00000006213 12720663264 017052 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, ANGDEGREE = 260, ARCMINUTE = 261, ARCSECOND = 262, SEXSTR = 263, HMSSTR = 264, DMSSTR = 265, EOF_ = 266, ANNULUS_ = 267, BOX_ = 268, CIRCLE_ = 269, DEBUG_ = 270, ELLIPSE_ = 271, FIELD_ = 272, OFF_ = 273, ON_ = 274, PIE_ = 275, POINT_ = 276, POLYGON_ = 277, RECTANGLE_ = 278, REGION_ = 279, ROTBOX_ = 280, SECTOR_ = 281, VERSION_ = 282 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define ANGDEGREE 260 #define ARCMINUTE 261 #define ARCSECOND 262 #define SEXSTR 263 #define HMSSTR 264 #define DMSSTR 265 #define EOF_ 266 #define ANNULUS_ 267 #define BOX_ 268 #define CIRCLE_ 269 #define DEBUG_ 270 #define ELLIPSE_ 271 #define FIELD_ 272 #define OFF_ 273 #define ON_ 274 #define PIE_ 275 #define POINT_ 276 #define POLYGON_ 277 #define RECTANGLE_ 278 #define REGION_ 279 #define ROTBOX_ 280 #define SECTOR_ 281 #define VERSION_ 282 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 43 "frame/ciaoparser.Y" { #define CIAOBUFSIZE 2048 double real; int integer; char str[CIAOBUFSIZE]; double vector[3]; } /* Line 1529 of yacc.c. */ #line 111 "frame/ciaoparser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/frame/ciaoparser.Y000644 000765 000000 00000013760 12717404622 017075 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {Base* fr} %lex-param {ciaoFlexLexer* ll} %parse-param {ciaoFlexLexer* ll} %{ #define YYDEBUG 1 #define FITSPTR (fr->findFits()) #include #include #include #include "base.h" #include "fitsimage.h" #include "basemarker.h" #undef yyFlexLexer #define yyFlexLexer ciaoFlexLexer #include extern int ciaolex(void*, ciaoFlexLexer*); extern void ciaoerror(Base*, ciaoFlexLexer*, const char*); static const char *color = "green"; static int dash[] = {8,3}; static const char *font = "helvetica 10 normal roman"; static const char *text = ""; static unsigned short props; static List polylist; static List taglist; static List cblist; static void setProps(unsigned short* props, unsigned short prop, int value); %} %union { #define CIAOBUFSIZE 2048 double real; int integer; char str[CIAOBUFSIZE]; double vector[3]; } %type numeric %type angle %type value %type vvalue %type sexagesimal %type hms %type dms %type coord %token INT %token REAL %token ANGDEGREE %token ARCMINUTE %token ARCSECOND %token SEXSTR %token HMSSTR %token DMSSTR %token EOF_ %token ANNULUS_ %token BOX_ %token CIRCLE_ %token DEBUG_ %token ELLIPSE_ %token FIELD_ %token OFF_ %token ON_ %token PIE_ %token POINT_ %token POLYGON_ %token RECTANGLE_ %token REGION_ %token ROTBOX_ %token SECTOR_ %token VERSION_ %% commands: commands command terminator | command terminator ; command : /* empty */ | DEBUG_ debug | VERSION_ {cerr << "CIAO Regions File 1.0" << endl;} | init include shape ; terminator: ep | '\n' | EOF_ {YYACCEPT;} ; include : /* empty */ | '*' /* AND */ | '&' /* AND */ | '|' /* OR */ | '+' /* OR */ | '-' /* NOT */ {setProps(&props, Marker::INCLUDE, 0);} | '!''*' /* NOT */ {setProps(&props, Marker::INCLUDE, 0);} | '!' /* NOT */ {setProps(&props, Marker::INCLUDE, 0);} ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; sp : ',' ; bp : '(' ; ep : ')' ; init: { // reset maperr flag maperr =0; props = Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::HIGHLITE | Marker::INCLUDE | Marker::SOURCE; } ; angle : numeric {$$ = degToRad($1);} ; value : numeric {$$ = FITSPTR->mapLenToRef($1, Coord::PHYSICAL);} | ANGDEGREE {$$ = FITSPTR->mapLenToRef($1, Coord::WCS, Coord::DEGREE);} | ARCMINUTE {$$ = FITSPTR->mapLenToRef($1, Coord::WCS, Coord::ARCMIN);} | ARCSECOND {$$ = FITSPTR->mapLenToRef($1, Coord::WCS, Coord::ARCSEC);} ; vvalue : numeric sp numeric { Vector rr = FITSPTR->mapLenToRef(Vector($1,$3), Coord::PHYSICAL); $$[0] = rr[0]; $$[1] = rr[1]; $$[2] = rr[2]; } | ANGDEGREE sp ANGDEGREE { Vector rr= FITSPTR->mapLenToRef(Vector($1,$3), Coord::WCS,Coord::DEGREE); $$[0] = rr[0]; $$[1] = rr[1]; $$[2] = rr[2]; } | ARCMINUTE sp ARCMINUTE { Vector rr = FITSPTR->mapLenToRef(Vector($1,$3), Coord::WCS, Coord::ARCMIN); $$[0] = rr[0]; $$[1] = rr[1]; $$[2] = rr[2]; } | ARCSECOND sp ARCSECOND { Vector rr = FITSPTR->mapLenToRef(Vector($1,$3), Coord::WCS, Coord::ARCSEC); $$[0] = rr[0]; $$[1] = rr[1]; $$[2] = rr[2]; } ; sexagesimal: SEXSTR {$$ = parseSEXStr($1);} ; hms : HMSSTR {$$ = parseHMSStr($1);} ; dms : DMSSTR {$$ = parseDMSStr($1);} ; coord : numeric sp numeric { Vector rr = FITSPTR->mapToRef(Vector($1,$3), Coord::PHYSICAL); $$[0] = rr[0]; $$[1] = rr[1]; $$[2] = rr[2]; } | sexagesimal sp sexagesimal { Vector rr = FITSPTR->mapToRef(Vector($1*360./24.,$3), Coord::WCS,Coord::FK5); $$[0] = rr[0]; $$[1] = rr[1]; $$[2] = rr[2]; } | hms sp dms { Vector rr = FITSPTR->mapToRef(Vector($1,$3), Coord::WCS, Coord::FK5); $$[0] = rr[0]; $$[1] = rr[1]; $$[2] = rr[2]; } | ANGDEGREE sp ANGDEGREE { Vector rr = FITSPTR->mapToRef(Vector($1,$3), Coord::WCS, Coord::FK5); $$[0] = rr[0]; $$[1] = rr[1]; $$[2] = rr[2]; } ; shape : ANNULUS_ bp coord sp value sp value { fr->createAnnulusCmd(Vector($3), $5, $7, 1, color,dash,1,font,text,props,NULL,taglist,cblist); } | BOX_ bp coord sp vvalue { fr->createBoxCmd(Vector($3), $5, 0, color,dash,1,font,text,props,NULL,taglist,cblist); } | BOX_ rotbox | CIRCLE_ bp coord sp value { fr->createCircleCmd(Vector($3), $5, color,dash,1,font,text,props,NULL,taglist,cblist); } | ELLIPSE_ bp coord sp vvalue sp angle { fr->createEllipseCmd(Vector($3), Vector($5), $7, color,dash,1,font,text,props,NULL,taglist,cblist); } | FIELD_ bp {/* not supported */} | PIE_ bp coord sp value sp value sp angle sp angle { fr->createCpandaCmd(Vector($3), $9, $11, 1, $5, $7, 1, color,dash,1,font,text,props,NULL,taglist,cblist); } | POINT_ bp coord { fr->createPointCmd(Vector($3), Point::BOXCIRCLE, POINTSIZE, color,dash,1,font,text,props,NULL,taglist,cblist); } | POLYGON_ {polylist.deleteAll();} bp polyNodes { fr->createPolygonCmd(polylist, color,dash,1,font,text,props,NULL,taglist,cblist); } | RECTANGLE_ bp coord sp coord { Vector cc = (Vector($5)-Vector($3))/2.+Vector($3); Vector wh = Vector($5)-Vector($3); fr->createBoxCmd(cc, wh, 0, color,dash,1,font,text,props,NULL,taglist,cblist); } | REGION_ bp {/* not supported */} | ROTBOX_ rotbox | SECTOR_ bp coord sp angle sp angle {/* not supported */} ; rotbox : bp coord sp vvalue sp angle { fr->createBoxCmd(Vector($2), Vector($4), $6, color,dash,1,font,text,props,NULL,taglist,cblist); } ; polyNodes : polyNodes sp polyNode | polyNode ; polyNode : coord {polylist.append(new Vertex($1));} ; %% static void setProps(unsigned short* props, unsigned short prop, int value) { if (value) *props |= prop; else *props &= ~prop; } saods9/tksao/frame/circle.C000644 000765 000000 00000022735 12775230632 016164 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "circle.h" #include "fitsimage.h" Circle::Circle(Base* p, const Vector& ctr, double r) : BaseEllipse(p, ctr, 0) { numAnnuli_ = 1; annuli_ = new Vector[1]; annuli_[0] = Vector(r,r); strcpy(type_, "circle"); numHandle = 4; updateBBox(); } Circle::Circle(Base* p, const Vector& ctr, double r, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseEllipse(p, ctr, 0, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = 1; annuli_ = new Vector[numAnnuli_]; annuli_[0] = Vector(r,r); strcpy(type_, "circle"); numHandle = 4; updateBBox(); } Circle::Circle(const Circle& a) : BaseEllipse(a) {} void Circle::edit(const Vector& v, int h) { Matrix mm = bckMatrix(); // calc dist between edge of circle and handle double d = annuli_[0].length() - annuli_[0][0]; double r = (v * mm).length() - d; annuli_[0] = Vector(r,r); updateBBox(); doCallBack(CallBack::EDITCB); } void Circle::analysis(AnalysisTask mm, int which) { switch (mm) { case HISTOGRAM: if (!analysisHistogram_ && which) { addCallBack(CallBack::MOVECB, analysisHistogramCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisHistogramCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisHistogramCB_[1], parent->options->cmdName); } if (analysisHistogram_ && !which) { deleteCallBack(CallBack::MOVECB, analysisHistogramCB_[0]); deleteCallBack(CallBack::EDITCB, analysisHistogramCB_[0]); deleteCallBack(CallBack::DELETECB, analysisHistogramCB_[1]); } analysisHistogram_ = which; break; case PLOT3D: if (!analysisPlot3d_ && which) { addCallBack(CallBack::MOVECB, analysisPlot3dCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisPlot3dCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisPlot3dCB_[1], parent->options->cmdName); } if (analysisPlot3d_ && !which) { deleteCallBack(CallBack::MOVECB, analysisPlot3dCB_[0]); deleteCallBack(CallBack::EDITCB, analysisPlot3dCB_[0]); deleteCallBack(CallBack::DELETECB, analysisPlot3dCB_[1]); } analysisPlot3d_ = which; break; case STATS: if (!analysisStats_ && which) { addCallBack(CallBack::MOVECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisStatsCB_[1], parent->options->cmdName); } if (analysisStats_ && !which) { deleteCallBack(CallBack::MOVECB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITCB, analysisStatsCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::DELETECB, analysisStatsCB_[1]); } analysisStats_ = which; break; default: // na break; } } void Circle::analysisHistogram(char* xname, char* yname, int num) { double* x; double* y; Vector ll = -annuli_[0] * Translate(center); Vector ur = annuli_[0] * Translate(center); BBox bb(ll,ur) ; parent->markerAnalysisHistogram(this, &x, &y, bb, num); analysisXYResult(xname, yname, x, y, num+1); } void Circle::analysisPlot3d(char* xname, char* yname, Coord::CoordSystem sys, Marker::AnalysisMethod method) { double* x; double* y; Vector ll = -annuli_[0] * Translate(center); Vector ur = annuli_[0] * Translate(center); BBox bb(ll,ur) ; int num = parent->markerAnalysisPlot3d(this, &x, &y, bb, sys, method); analysisXYResult(xname, yname, x, y, num); } void Circle::analysisStats(Coord::CoordSystem sys, Coord::SkyFrame sky) { ostringstream str; Vector ll = -annuli_[0] * Translate(center); Vector ur = annuli_[0] * Translate(center); BBox bb(ll,ur) ; parent->markerAnalysisStats(this, str, bb, sys, sky); str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } // list void Circle::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 0); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { double rr = ptr->mapLenFromRef(annuli_[0][0],sys,Coord::ARCSEC); switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ',' << setprecision(3) << fixed << rr << '"' << ')'; str.unsetf(ios_base::floatfield); } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(3) << fixed << rr << '"' << ')'; str.unsetf(ios_base::floatfield); break; } } else listNonCel(ptr, str, sys); } listPost(str, conj, strip); } void Circle::listNonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { Vector vv = ptr->mapFromRef(center,sys); double rr = ptr->mapLenFromRef(annuli_[0][0],sys); str << type_ << '(' << setprecision(8) << vv << ',' << rr << ')'; } void Circle::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowCenter(ptr,sys,sky,format); XMLRowRadiusX(ptr,sys,annuli_[0]); XMLRowProps(ptr,sys); XMLRowEnd(str); } void Circle::listCiao(ostream& str, Coord::CoordSystem sys, int strip) { FitsImage* ptr = parent->findFits(); listCiaoPre(str); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector vv = ptr->mapFromRef(center,Coord::PHYSICAL); double rr = ptr->mapLenFromRef(annuli_[0][0],Coord::PHYSICAL); str << type_ << '(' << setprecision(8) << vv << ',' << rr << ')'; } break; default: if (ptr->hasWCSCel(sys)) { listRADEC(ptr,center,sys,Coord::FK5,Coord::SEXAGESIMAL); double rr = ptr->mapLenFromRef(annuli_[0][0],sys,Coord::ARCMIN); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(5) << fixed << rr << '\'' << ')'; str.unsetf(ios_base::floatfield); } } listCiaoPost(str, strip); } void Circle::listSAOtng(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); listSAOtngPre(str, strip); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector vv = ptr->mapFromRef(center,Coord::IMAGE); double rr = ptr->mapLenFromRef(annuli_[0][0],Coord::IMAGE); str << type_ << '(' << setprecision(8) << vv << ',' << rr << ')'; } break; default: if (ptr->hasWCSCel(sys)) { double rr = ptr->mapLenFromRef(annuli_[0][0],Coord::IMAGE); switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ',' << setprecision(8) << rr << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(8) << rr << ')'; break; } } } listSAOtngPost(str,strip); } void Circle::listPros(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); switch (sys) { case Coord::IMAGE: case Coord::DETECTOR: case Coord::AMPLIFIER: sys = Coord::IMAGE; case Coord::PHYSICAL: { Vector vv = ptr->mapFromRef(center,sys); double rr = ptr->mapLenFromRef(annuli_[0][0],Coord::IMAGE); coord.listProsCoordSystem(str,sys,sky); str << "; " << type_ << ' ' << setprecision(8) << vv << ' ' << rr; } break; default: if (ptr->hasWCSCel(sys)) { double rr = ptr->mapLenFromRef(annuli_[0][0],sys,Coord::ARCSEC); switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); coord.listProsCoordSystem(str,sys,sky); str << "; " << type_ << ' ' << setprecision(10) << setunit('d') << vv << ' ' << setprecision(3) << fixed << rr << '"'; str.unsetf(ios_base::floatfield); } break; case Coord::SEXAGESIMAL: listRADECPros(ptr,center,sys,sky,format); coord.listProsCoordSystem(str,sys,sky); str << "; " << type_ << ' ' << ra << ' ' << dec << ' ' << setprecision(3) << fixed << rr << '"'; str.unsetf(ios_base::floatfield); break; } } } listProsPost(str, strip); } void Circle::listSAOimage(ostream& str, int strip) { FitsImage* ptr = parent->findFits(); listSAOimagePre(str); Vector vv = ptr->mapFromRef(center,Coord::IMAGE); str << type_ << '(' << setprecision(8) << vv << ',' << annuli_[0][0] << ')'; listSAOimagePost(str, strip); } // special composite funtionallity void Circle::setComposite(const Matrix& mx, double aa) { center *= mx; updateBBox(); } saods9/tksao/frame/circle.h000644 000765 000000 00000003100 12752657750 016223 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __circle_h__ #define __circle_h__ #include "baseellipse.h" class Circle : public BaseEllipse { protected: void listNonCel(FitsImage*, ostream&, Coord::CoordSystem); public: Circle(Base* p, const Vector& ctr, double r); Circle(Base* p, const Vector& ctr, double r, const char* clr, int *dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Circle(const Circle&); virtual Marker* dup() {return new Circle(*this);} void edit(const Vector&, int); void rotateBegin() {} void rotate(const Vector& v, int h) {} void rotateEnd() {} void analysis(AnalysisTask, int); void analysisHistogram(char*, char*, int); void analysisPlot3d(char*, char*, Coord::CoordSystem, Marker::AnalysisMethod); void analysisStats(Coord::CoordSystem, Coord::SkyFrame sky); void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); virtual void listCiao(ostream&, Coord::CoordSystem, int); virtual void listSAOtng(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); virtual void listPros(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); virtual void listSAOimage(ostream&, int); // special composite funtionality void setComposite(const Matrix&, double); }; #endif saods9/tksao/frame/colorscale.C000644 000765 000000 00000010470 12705446247 017046 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "colorscale.h" ColorScale::ColorScale(int ss) { size_ = ss; psColors_ = new unsigned char[ss*3]; memset(psColors_, '0', size_*3); } ColorScale::~ColorScale() { if (psColors_) delete [] psColors_; } LinearScale::LinearScale(int ss, unsigned char* colorCells, int count) : ColorScale(ss) { for (int ii=0; ii=count) ll = count-1; memcpy(psColors_+ii*3, colorCells+ll*3, 3); } } PowScale::PowScale(int ss, unsigned char* colorCells, int count, double exp) : ColorScale(ss) { for (int ii=0; ii=count) ll = count-1; memcpy(psColors_+ii*3, colorCells+ll*3, 3); } } SqrtScale::SqrtScale(int ss, unsigned char* colorCells, int count) : ColorScale(ss) { for(int ii=0; ii=count) ll = count-1; memcpy(psColors_+ii*3, colorCells+ll*3,3); } } SinhScale::SinhScale(int ss, unsigned char* colorCells, int count) : ColorScale(ss) { for(int ii=0; ii=count) ll = count-1; memcpy(psColors_+ii*3, colorCells+ll*3,3); } } HistEquScale::HistEquScale(int ss, unsigned char* colorCells, int count, double* hist, int histsize) : ColorScale(ss) { // if no histogram, return linear distribution if (!hist) for (int ii=0; ii=count) ll = count-1; memcpy(psColors_+ii, colorCells+ll*3+jj,1); } } PowScaleRGB::PowScaleRGB(int jj, int ss, unsigned char* colorCells, int count, double exp) : ColorScaleRGB(ss) { for (int ii=0; ii=count) ll = count-1; memcpy(psColors_+ii, colorCells+ll*3+jj,1); } } SqrtScaleRGB::SqrtScaleRGB(int jj, int ss, unsigned char* colorCells, int count) : ColorScaleRGB(ss) { for(int ii=0; ii0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); a |= gs_>0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); a |= bs_>0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); memcpy(colors_+i*2, &a, 2); } } else { for (int i=0; i0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); a |= gs_>0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); a |= bs_>0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); unsigned char* rr = (unsigned char*)(&a); *(colors_+i*2) = *(rr+1); *(colors_+i*2+1) = *(rr); } } } ColorScaleTrueColor16::~ColorScaleTrueColor16() { if (colors_) delete [] colors_; } LinearScaleTrueColor16::LinearScaleTrueColor16(int s, unsigned char* colorCells, int count, Visual* visual, int msb) : ColorScale(s), LinearScale(s, colorCells, count), ColorScaleTrueColor16(s, visual, msb) {} LogScaleTrueColor16::LogScaleTrueColor16(int s, unsigned char* colorCells, int count, double exp, Visual* visual, int msb) : ColorScale(s), LogScale(s, colorCells, count, exp), ColorScaleTrueColor16(s, visual, msb) {} PowScaleTrueColor16::PowScaleTrueColor16(int s, unsigned char* colorCells, int count, double exp, Visual* visual, int msb) : ColorScale(s), PowScale(s, colorCells, count, exp), ColorScaleTrueColor16(s, visual, msb) {} SqrtScaleTrueColor16::SqrtScaleTrueColor16(int s, unsigned char* colorCells, int count, Visual* visual, int msb) : ColorScale(s), SqrtScale(s, colorCells, count), ColorScaleTrueColor16(s, visual, msb) {} SquaredScaleTrueColor16::SquaredScaleTrueColor16(int s, unsigned char* colorCells, int count, Visual* visual, int msb) : ColorScale(s), SquaredScale(s, colorCells, count), ColorScaleTrueColor16(s, visual, msb) {} AsinhScaleTrueColor16::AsinhScaleTrueColor16(int s, unsigned char* colorCells, int count, Visual* visual, int msb) : ColorScale(s), AsinhScale(s, colorCells, count), ColorScaleTrueColor16(s, visual, msb) {} SinhScaleTrueColor16::SinhScaleTrueColor16(int s, unsigned char* colorCells, int count, Visual* visual, int msb) : ColorScale(s), SinhScale(s, colorCells, count), ColorScaleTrueColor16(s, visual, msb) {} IISScaleTrueColor16::IISScaleTrueColor16(unsigned char* colorCells, int count, Visual* visual, int msb) : ColorScale(IISSIZE), IISScale(colorCells, count), ColorScaleTrueColor16(IISSIZE, visual, msb) {} HistEquScaleTrueColor16::HistEquScaleTrueColor16(int s, unsigned char* colorCells, int count, double* hist, int histsize, Visual* visual, int msb) : ColorScale(s), HistEquScale(s, colorCells, count, hist, histsize), ColorScaleTrueColor16(s, visual, msb) {} saods9/tksao/frame/colorscaletrue16.h000644 000765 000000 00000004144 12705446247 020163 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __colorscaletrue16_h__ #define __colorscaletrue16_h__ #include "colorscale.h" #include "truecolor16.h" class ColorScaleTrueColor16 : public virtual ColorScale, public TrueColor16 { public: ColorScaleTrueColor16(int, Visual*, int); virtual ~ColorScaleTrueColor16(); }; class LinearScaleTrueColor16 : public virtual ColorScale, public LinearScale, public ColorScaleTrueColor16 { public: LinearScaleTrueColor16(int, unsigned char*, int, Visual*, int); }; class LogScaleTrueColor16 : public virtual ColorScale, public LogScale, public ColorScaleTrueColor16 { public: LogScaleTrueColor16(int, unsigned char*, int, double, Visual*, int); }; class PowScaleTrueColor16 : public virtual ColorScale, public PowScale, public ColorScaleTrueColor16 { public: PowScaleTrueColor16(int, unsigned char*, int, double, Visual*, int); }; class SqrtScaleTrueColor16 : public virtual ColorScale, public SqrtScale, public ColorScaleTrueColor16 { public: SqrtScaleTrueColor16(int, unsigned char*, int, Visual*, int); }; class SquaredScaleTrueColor16 : public virtual ColorScale, public SquaredScale, public ColorScaleTrueColor16 { public: SquaredScaleTrueColor16(int, unsigned char*, int, Visual*, int); }; class AsinhScaleTrueColor16 : public virtual ColorScale, public AsinhScale, public ColorScaleTrueColor16 { public: AsinhScaleTrueColor16(int, unsigned char*, int, Visual*, int); }; class SinhScaleTrueColor16 : public virtual ColorScale, public SinhScale, public ColorScaleTrueColor16 { public: SinhScaleTrueColor16(int, unsigned char*, int, Visual*, int); }; class IISScaleTrueColor16 : public virtual ColorScale, public IISScale, public ColorScaleTrueColor16 { public: IISScaleTrueColor16(unsigned char*, int, Visual*, int); }; class HistEquScaleTrueColor16 : public virtual ColorScale, public HistEquScale, public ColorScaleTrueColor16 { public: HistEquScaleTrueColor16(int, unsigned char*, int, double*, int, Visual*, int); }; #endif saods9/tksao/frame/colorscaletrue24.C000644 000765 000000 00000006664 12705446247 020126 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "colorscaletrue24.h" ColorScaleTrueColor24::ColorScaleTrueColor24(int s, Visual* visual, int msb) : ColorScale(s), TrueColor24(visual) { colors_ = new unsigned char[s*3]; // we need to check to byteswap when we have cross platforms if ((!msb && lsb()) || (msb && !lsb())) { for (int i=0; i> bs_) | // blue ((psColors_[i*3+1] & gm_) >> gs_) | // green ((psColors_[i*3+2] & rm_) >> rs_); // red } ColorScaleTrueColor8::~ColorScaleTrueColor8() { if (colors_) delete [] colors_; } LinearScaleTrueColor8::LinearScaleTrueColor8(int s, unsigned char* colorCells, int count, Visual* visual) : ColorScale(s), LinearScale(s, colorCells, count), ColorScaleTrueColor8(s, visual) {} LogScaleTrueColor8::LogScaleTrueColor8(int s, unsigned char* colorCells, int count, double exp, Visual* visual) : ColorScale(s), LogScale(s, colorCells, count, exp), ColorScaleTrueColor8(s, visual) {} PowScaleTrueColor8::PowScaleTrueColor8(int s, unsigned char* colorCells, int count, double exp, Visual* visual) : ColorScale(s), PowScale(s, colorCells, count, exp), ColorScaleTrueColor8(s, visual) {} SqrtScaleTrueColor8::SqrtScaleTrueColor8(int s, unsigned char* colorCells, int count, Visual* visual) : ColorScale(s), SqrtScale(s, colorCells, count), ColorScaleTrueColor8(s, visual) {} SquaredScaleTrueColor8::SquaredScaleTrueColor8(int s, unsigned char* colorCells, int count, Visual* visual) : ColorScale(s), SquaredScale(s, colorCells, count), ColorScaleTrueColor8(s, visual) {} AsinhScaleTrueColor8::AsinhScaleTrueColor8(int s, unsigned char* colorCells, int count, Visual* visual) : ColorScale(s), AsinhScale(s, colorCells, count), ColorScaleTrueColor8(s, visual) {} SinhScaleTrueColor8::SinhScaleTrueColor8(int s, unsigned char* colorCells, int count, Visual* visual) : ColorScale(s), SinhScale(s, colorCells, count), ColorScaleTrueColor8(s, visual) {} IISScaleTrueColor8::IISScaleTrueColor8(unsigned char* colorCells, int count, Visual* visual) : ColorScale(IISSIZE), IISScale(colorCells, count), ColorScaleTrueColor8(IISSIZE, visual) {} HistEquScaleTrueColor8::HistEquScaleTrueColor8(int s, unsigned char* colorCells, int count, double* hist, int histsize, Visual* visual) : ColorScale(s), HistEquScale(s, colorCells, count, hist, histsize), ColorScaleTrueColor8(s, visual) {} saods9/tksao/frame/colorscaletrue8.h000644 000765 000000 00000004020 12705446247 020075 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __colorscaletrue8_h__ #define __colorscaletrue8_h__ #include "colorscale.h" #include "truecolor8.h" class ColorScaleTrueColor8 : public virtual ColorScale, public TrueColor8 { public: ColorScaleTrueColor8(int, Visual*); virtual ~ColorScaleTrueColor8(); }; class LinearScaleTrueColor8 : public virtual ColorScale, public LinearScale, public ColorScaleTrueColor8 { public: LinearScaleTrueColor8(int, unsigned char*, int, Visual*); }; class LogScaleTrueColor8 : public virtual ColorScale, public LogScale, public ColorScaleTrueColor8 { public: LogScaleTrueColor8(int, unsigned char*, int, double, Visual*); }; class PowScaleTrueColor8 : public virtual ColorScale, public PowScale, public ColorScaleTrueColor8 { public: PowScaleTrueColor8(int, unsigned char*, int, double, Visual*); }; class SqrtScaleTrueColor8 : public virtual ColorScale, public SqrtScale, public ColorScaleTrueColor8 { public: SqrtScaleTrueColor8(int, unsigned char*, int, Visual*); }; class SquaredScaleTrueColor8 : public virtual ColorScale, public SquaredScale, public ColorScaleTrueColor8 { public: SquaredScaleTrueColor8(int, unsigned char*, int, Visual*); }; class AsinhScaleTrueColor8 : public virtual ColorScale, public AsinhScale, public ColorScaleTrueColor8 { public: AsinhScaleTrueColor8(int, unsigned char*, int, Visual*); }; class SinhScaleTrueColor8 : public virtual ColorScale, public SinhScale, public ColorScaleTrueColor8 { public: SinhScaleTrueColor8(int, unsigned char*, int, Visual*); }; class IISScaleTrueColor8 : public virtual ColorScale, public IISScale, public ColorScaleTrueColor8 { public: IISScaleTrueColor8(unsigned char*, int, Visual*); }; class HistEquScaleTrueColor8 : public virtual ColorScale, public HistEquScale, public ColorScaleTrueColor8 { public: HistEquScaleTrueColor8(int, unsigned char*, int, double*, int, Visual*); }; #endif saods9/tksao/frame/compass.C000644 000765 000000 00000040316 12775517652 016375 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "compass.h" #include "fitsimage.h" Compass::Compass(const Compass& a) : Marker(a) { p1 = a.p1; p2 = a.p2; pp1 = a.pp1; pp2 = a.pp2; radius = a.radius; coordSystem = a.coordSystem; skyFrame = a.skyFrame; northText = dupstr(a.northText); eastText = dupstr(a.eastText); northArrow = a.northArrow; eastArrow = a.eastArrow; } Compass::Compass(Base* p, const Vector& ctr, double r, const char* n, const char* e, int na, int ea, Coord::CoordSystem sys, Coord::SkyFrame sky, const char* clr, int* dsh, int w, const char* f, const char* t, unsigned short prop, const char* c, const List& tag, const List& cb) : Marker(p, ctr, 0, clr, dsh, w, f, t, prop, c, tag, cb) { coordSystem = sys; skyFrame = sky; radius = r; northText = dupstr(n); eastText = dupstr(e); northArrow = na; eastArrow = ea; strcpy(type_,"compass"); handle = new Vector[3]; numHandle = 3; updateBBox(); } Compass::~Compass() { if (northText) delete [] northText; if (eastText) delete [] eastText; } void Compass::renderX(Drawable drawable, Coord::InternalSystem sys, RenderMode mode) { GC lgc = renderXGC(mode); Vector aa = parent->mapFromRef(center,sys); Vector bb = parent->mapFromRef(p1,sys); Vector cc = parent->mapFromRef(p2,sys); Vector dd = parent->mapFromRef(pp1,sys); Vector ee = parent->mapFromRef(pp2,sys); if (northArrow) { bb = modifyArrow(center,p1,sys); renderXArrow(drawable, center, p1, sys, lgc); } if (eastArrow) { cc = modifyArrow(center,p2,sys); renderXArrow(drawable, center, p2, sys, lgc); } XDrawLine(display, drawable, lgc, aa[0], aa[1], bb[0], bb[1]); XDrawLine(display, drawable, lgc, aa[0], aa[1], cc[0], cc[1]); if (tkfont_) { XSetFont(display, lgc, Tk_FontId(tkfont_)); Tk_FontMetrics metrics; Tk_GetFontMetrics(tkfont_, &metrics); if (northText) { float r1 = Tk_TextWidth(tkfont_, northText, strlen(northText))/2.; float r2 = metrics.linespace/2.; double angle = (bb-aa).angle(); Vector ddd = dd * Translate(r1*cos(angle),r2*sin(angle)) * Translate(-r1,(metrics.ascent-metrics.descent)/2.); Tk_DrawChars(display, drawable, lgc, tkfont_, northText, strlen(northText), ddd[0], ddd[1]); } if (eastText) { float r1 = Tk_TextWidth(tkfont_, eastText, strlen(eastText))/2.; float r2 = metrics.linespace/2.; double angle = (cc-aa).angle(); Vector eee = ee * Translate(r1*cos(angle),r2*sin(angle)) * Translate(-r1,(metrics.ascent-metrics.descent)/2.); Tk_DrawChars(display, drawable, lgc, tkfont_, eastText, strlen(eastText), eee[0], eee[1]); } } } GC Compass::renderXGC(RenderMode mode) { switch (mode) { case SRC: XSetForeground(display, gc, color); renderXLineNoDash(gc); return gc; case XOR: renderXLineDash(gcxor); return gcxor; } // so compiler will not complain return gc; } void Compass::renderPS(int mode) { renderPSGC(mode); Vector aa = parent->mapFromRef(center,Coord::CANVAS); Vector bb = parent->mapFromRef(p1,Coord::CANVAS); Vector cc = parent->mapFromRef(p2,Coord::CANVAS); Vector dd = parent->mapFromRef(pp1,Coord::CANVAS); Vector ee = parent->mapFromRef(pp2,Coord::CANVAS); if (northArrow) { bb = modifyArrow(center,p1,Coord::CANVAS); renderPSArrow(center,p1,Coord::CANVAS); } if (eastArrow) { cc = modifyArrow(center,p2,Coord::CANVAS); renderPSArrow(center,p2,Coord::CANVAS); } { ostringstream str; str << "newpath " << aa.TkCanvasPs(parent->canvas) << ' ' << "moveto " << bb.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << "newpath " << aa.TkCanvasPs(parent->canvas) << ' ' << "moveto " << cc.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } if (psfont_) { ostringstream str; const char* ff = Tk_NameOfFont(psfont_); str << '/' << psFontName(ff) << " findfont " << int(psFontSize(ff)*parent->getDisplayRatio()) << " scalefont setfont" << endl; if (northText) { double angle = (bb-aa).angle(); Vector ddd = dd.TkCanvasPs(parent->canvas); str << "gsave" << endl << "newpath " << endl << ddd << " moveto" << endl << '(' << psQuote(northText) << ')' << endl // bbox << "dup true charpath pathbbox " << endl << "closepath " << endl // text llx lly urx ury // dup bbox << "3 index 3 index 3 index 3 index " << endl // text llx lly urx ury llx lly urx ury // Translate(-r1,(metrics.ascent-metrics.descent)/2.) << "3 -1 roll sub 3.6 div neg " << endl << "3 1 roll sub 2 div exch " << endl // text llx lly urx ury Sx Sy // reorder << "6 1 roll 6 1 roll " << endl // text Sx Sy llx lly urx ury // Translate(r1*cos(angle),r2*sin(angle)) << "3 -1 roll sub 2 div neg " << endl << "3 1 roll sub 2 div exch " << endl << radToDeg(angle) << " sin mul exch " << endl << radToDeg(angle) << " cos mul neg exch " << endl // text Sx Sy Tx Ty // add << "3 -1 roll add " << endl << "3 1 roll add exch " << endl // text Fx Fy << ddd << " moveto rmoveto show " << endl << "grestore" << endl; } if (eastText) { double angle = (cc-aa).angle(); Vector eee = ee.TkCanvasPs(parent->canvas); str << "gsave" << endl << "newpath " << endl << eee << " moveto" << endl << '(' << psQuote(eastText) << ')' << endl << "dup true charpath pathbbox " << "closepath " << endl << "3 index 3 index 3 index 3 index " << endl << "3 -1 roll sub 3.6 div neg " << "3 1 roll sub 2 div exch " << endl << "6 1 roll 6 1 roll " << endl << "3 -1 roll sub 2 div neg " << "3 1 roll sub 2 div exch " << endl << radToDeg(angle) << " sin mul exch " << radToDeg(angle) << " cos mul neg exch " << endl << "3 -1 roll add " << "3 1 roll add exch " << endl << eee << " moveto rmoveto show " << endl << "grestore" << endl; } str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } } void Compass::renderPSGC(int mode) { renderPSColor(mode, parent->getXColor(colorName)); renderPSLineNoDash(); } #ifdef MAC_OSX_TK void Compass::renderMACOSX() { renderMACOSXGC(); Vector aa = parent->mapFromRef(center,Coord::CANVAS); Vector bb = parent->mapFromRef(p1,Coord::CANVAS); Vector cc = parent->mapFromRef(p2,Coord::CANVAS); Vector dd = parent->mapFromRef(pp1,Coord::CANVAS); Vector ee = parent->mapFromRef(pp2,Coord::CANVAS); if (northArrow) { bb = modifyArrow(center,p1,Coord::CANVAS); renderMACOSXArrow(center,p1,Coord::CANVAS); } if (eastArrow) { cc = modifyArrow(center,p2,Coord::CANVAS); renderMACOSXArrow(center,p2,Coord::CANVAS); } macosxDrawLine(aa,bb); macosxDrawLine(aa,cc); if (psfont_) { Tcl_DString psdstr; Tcl_DStringInit(&psdstr); int psSize = Tk_PostscriptFontName(psfont_, &psdstr); macosxFont(Tcl_DStringValue(&psdstr), psSize); Tcl_DStringFree(&psdstr); Tk_FontMetrics metrics; Tk_GetFontMetrics(psfont_, &metrics); if (northText) { float r1 = Tk_TextWidth(psfont_, northText, strlen(northText))/2.; float r2 = metrics.linespace/2.; double angle = (bb-aa).angle(); Vector ddd = dd * Translate(r1*cos(angle),r2*sin(angle)) * Translate(-r1,(metrics.ascent-metrics.descent)/2.); macosxDrawText(ddd, 0, northText); } if (eastText) { float r1 = Tk_TextWidth(psfont_, eastText, strlen(eastText))/2.; float r2 = metrics.linespace/2.; double angle = (cc-aa).angle(); Vector eee = ee * Translate(r1*cos(angle),r2*sin(angle)) * Translate(-r1,(metrics.ascent-metrics.descent)/2.); macosxDrawText(eee, 0, eastText); } } } void Compass::renderMACOSXGC() { macosxColor(parent->getXColor(colorName)); renderMACOSXLineNoDash(); } #endif #ifdef __WIN32 void Compass::renderWIN32() { renderWIN32GC(); Vector aa = parent->mapFromRef(center,Coord::CANVAS); Vector bb = parent->mapFromRef(p1,Coord::CANVAS); Vector cc = parent->mapFromRef(p2,Coord::CANVAS); Vector dd = parent->mapFromRef(pp1,Coord::CANVAS); Vector ee = parent->mapFromRef(pp2,Coord::CANVAS); if (northArrow) { bb = modifyArrow(center,p1,Coord::CANVAS); renderWIN32Arrow(center,p1,Coord::CANVAS); } if (eastArrow) { cc = modifyArrow(center,p2,Coord::CANVAS); renderWIN32Arrow(center,p2,Coord::CANVAS); } win32DrawLine(aa,bb); win32DrawLine(aa,cc); if (tkfont_) { win32Font(tkfont_); Tk_FontMetrics metrics; Tk_GetFontMetrics(tkfont_, &metrics); if (northText) { float r1 = Tk_TextWidth(tkfont_, northText, strlen(northText))/2.; float r2 = metrics.linespace/2.; double angle = (bb-aa).angle(); Vector ddd = dd * Translate(r1*cos(angle),r2*sin(angle)) * Translate(-r1,(metrics.ascent-metrics.descent)/2.); win32DrawText(ddd, 0, northText); } if (eastText) { float r1 = Tk_TextWidth(tkfont_, eastText, strlen(eastText))/2.; float r2 = metrics.linespace/2.; double angle = (cc-aa).angle(); Vector eee = ee * Translate(r1*cos(angle),r2*sin(angle)) * Translate(-r1,(metrics.ascent-metrics.descent)/2.); win32DrawText(eee, 0, eastText); } } } void Compass::renderWIN32GC() { win32Color(parent->getXColor(colorName)); renderWIN32LineNoDash(); } #endif void Compass::updateHandles() { // calc p1, p2 FitsImage* ptr = parent->findFits(coordSystem,center); Vector orval = ptr->mapFromRef(center, coordSystem, skyFrame); double delta = ptr->mapLenFromRef(1, coordSystem); Vector npix = ptr->mapToRef(Vector(orval[0],orval[1]+delta), coordSystem, skyFrame); Vector epix = ptr->mapToRef(Vector(orval[0]+delta,orval[1]), coordSystem, skyFrame); Vector north = (npix - center).normalize(); Vector east = (epix - center).normalize(); // calc text points pp1,pp2 Matrix r = Scale(radius)*Scale(parent->zoom()).invert(); Matrix rr = Scale(5)*Scale(parent->zoom()).invert(); p1 = center + north*r; p2 = center + east*r; pp1 = p1 + north*rr; pp2 = p2 + east*rr; // generate handles handle[0] = parent->mapFromRef(center,Coord::CANVAS); handle[1] = parent->mapFromRef(p1,Coord::CANVAS); handle[2] = parent->mapFromRef(p2,Coord::CANVAS); } void Compass::calcAllBBox() { if (tkfont_) { // make room for text Tk_FontMetrics metrics; Tk_GetFontMetrics(tkfont_, &metrics); Vector a = parent->mapFromRef(center,Coord::CANVAS); Vector b = parent->mapFromRef(p1,Coord::CANVAS); Vector c = parent->mapFromRef(p2,Coord::CANVAS); Vector bb = parent->mapFromRef(pp1,Coord::CANVAS); Vector cc = parent->mapFromRef(pp2,Coord::CANVAS); if (northText) { float r1 = Tk_TextWidth(tkfont_, northText, strlen(northText))/2.; float r2 = metrics.linespace/2.; double angle = (b-a).angle(); Vector bbb = bb * Translate(r1*cos(angle),r2*sin(angle)); bbox.bound(bbb * Translate(-r1,(metrics.ascent-metrics.descent)/2.)); bbox.bound(bbb * Translate(-r1,-metrics.ascent/2.-3*metrics.descent/2.)); bbox.bound(bbb * Translate(r1,(metrics.ascent-metrics.descent)/2.)); bbox.bound(bbb * Translate(r1,-metrics.ascent/2.-3*metrics.descent/2.)); } if (eastText) { float r1 = Tk_TextWidth(tkfont_, eastText, strlen(eastText))/2.; float r2 = metrics.linespace/2.; double angle = (c-a).angle(); Vector ccc = cc * Translate(r1*cos(angle),r2*sin(angle)); bbox.bound(ccc * Translate(-r1,(metrics.ascent-metrics.descent)/2.)); bbox.bound(ccc * Translate(-r1,-metrics.ascent/2.-3*metrics.descent/2.)); bbox.bound(ccc * Translate(r1,(metrics.ascent-metrics.descent)/2.)); bbox.bound(ccc * Translate(r1,-metrics.ascent/2.-3*metrics.descent/2.)); } } Marker::calcAllBBox(); } void Compass::edit(const Vector& v, int h) { radius = (v * Translate(-center) * Scale(parent->zoom())).length(); updateBBox(); doCallBack(CallBack::EDITCB); } int Compass::isIn(const Vector& vv) { /* v[0]-- x value of point being tested v[1]-- y value of point being tested This algorithm is from "An Introduction to Ray Tracing", Academic Press, 1989, edited by Andrew Glassner, pg 53 -- a point lies in a polygon if a line is extended from the point to infinite in any direction and the number of intersections with the polygon is odd. This is valid for both concave and convex polygons. Points on a vertex are considered inside. Points on a edge are considered inside. */ Vector v = parent->mapToRef(vv,Coord::CANVAS); int crossings = 0; // number of crossings Vector bb[4]; bb[0] = center - v; bb[1] = p1 - v; bb[2] = p2 - v; bb[3] = bb[0]; Vector v1; Vector v2 = bb[0]; int sign = ((v2[1])>=0) ? 1 : -1; // init sign // for all edges for (int j=1; j<4; j++) { // look at next two vertices v1 = v2; v2 = bb[j]; int nextSign = (v2[1]>=0) ? 1 : -1; // sign holder for p2 if (sign != nextSign) { if (v1[0]>0 && v2[0]>0) crossings++; else if (v1[0]>0 || v2[0]>0) { if (v1[0]-(v1[1]*(v2[0]-v1[0])/(v2[1]-v1[1])) > 0) crossings++; } sign = nextSign; } } return fmod(float(crossings),float(2)) ? 1 : 0; // if odd, point is inside } void Compass::setRadius(double r) { radius = r; updateBBox(); doCallBack(CallBack::EDITCB); } void Compass::setArrows(int n, int e) { northArrow = n; eastArrow = e; updateBBox(); doCallBack(CallBack::EDITCB); } void Compass::setLabels(const char* n, const char* e) { northText = dupstr(n); eastText = dupstr(e); updateBBox(); doCallBack(CallBack::EDITCB); } void Compass::setCoordSystem(Coord::CoordSystem sys, Coord::SkyFrame sky) { coordSystem = sys; skyFrame = sky; updateBBox(); } // list void Compass::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { if (!strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 1); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { double rr = ptr->mapLenFromRef(radius,sys,Coord::ARCSEC); switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ',' << setprecision(3) << fixed << rr << '"' << ')'; str.unsetf(ios_base::floatfield); } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(3) << fixed << rr << '"' << ')'; str.unsetf(ios_base::floatfield); break; } } else listNonCel(ptr, str, sys); } if (conj) str << " ||"; str << " compass="; coord.listCoordSystem(str, coordSystem, skyFrame, ptr); str << " {" << northText << "} {" << eastText << "} " << northArrow << ' ' << eastArrow; listProperties(str, 0); } } void Compass::listNonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { Vector vv = ptr->mapFromRef(center,sys); double rr = ptr->mapLenFromRef(radius,sys); str << type_ << '(' << setprecision(8) << vv << ',' << rr << ')'; } void Compass::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); double rr = ptr->mapLenFromRef(radius,sys,Coord::ARCSEC); ostringstream pstr; coord.listCoordSystem(pstr, coordSystem, skyFrame, ptr); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowCenter(ptr,sys,sky,format); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: XMLRow(XMLR,rr,8); break; default: if (ptr->hasWCS(sys)) { if (ptr->hasWCSCel(sys)) XMLRowARCSEC(XMLR,rr); else XMLRow(XMLR,rr,8); } break; } XMLRow(XMLPARAM,(char*)(pstr.str().c_str())); XMLRow(XMLPARAM2,northText); XMLRow(XMLPARAM3,eastText); XMLRow(XMLPARAM4,northArrow); XMLRow(XMLPARAM5,eastArrow); XMLRowProps(ptr,sys); XMLRowEnd(str); } saods9/tksao/frame/compass.h000644 000765 000000 00000004336 12752664063 016436 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __compass_h__ #define __compass_h__ #include "marker.h" class Compass : public Marker { private: Vector p1; Vector p2; Vector pp1; Vector pp2; double radius; Coord::CoordSystem coordSystem; Coord::SkyFrame skyFrame; char* northText; char* eastText; int northArrow; int eastArrow; private: void renderX(Drawable, Coord::InternalSystem, RenderMode); void renderXInclude(Drawable, Coord::InternalSystem, RenderMode) {} GC renderXGC(RenderMode); void renderPS(int); void renderPSInclude(int) {} void renderPSGC(int); #ifdef MAC_OSX_TK void renderMACOSX(); void renderMACOSXInclude() {} void renderMACOSXGC(); #endif #ifdef __WIN32 void renderWIN32(); void renderWIN32Include() {} void renderWIN32GC(); #endif void updateHandles(); protected: void listNonCel(FitsImage*, ostream&, Coord::CoordSystem); public: Compass(const Compass&); Compass(Base* parent, const Vector& ctr, double r, const char* n, const char* e, int na, int ea, Coord::CoordSystem, Coord::SkyFrame, const char* clr, int* dsh, int w, const char* f, const char* t, unsigned short prop, const char* c, const List& tag, const List& cb); ~Compass(); Marker* dup() {return new Compass(*this);} void calcAllBBox(); void edit(const Vector&, int); void rotateBegin() {} void rotate(const Vector& v, int h) {} void rotateEnd() {} int isIn(const Vector&); double getRadius() {return radius;} void setRadius(double); void setCoordSystem(Coord::CoordSystem, Coord::SkyFrame); void setLabels(const char*, const char*); void setArrows(int,int); Coord::CoordSystem getSystem() {return coordSystem;} Coord::SkyFrame getSkyFrame() {return skyFrame;} const char* getNorthText() {return northText;} const char* getEastText() {return eastText;} int getNorthArrow() {return northArrow;} int getEastArrow() {return eastArrow;} void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); }; #endif saods9/tksao/frame/composite.C000644 000765 000000 00000015146 12775230632 016723 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "composite.h" #include "fitsimage.h" Composite::Composite(const Composite& a) : Marker(a) { members = a.members; global = a.global; } Composite::Composite(Base* p, const Vector& ctr, double ang, int gl, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : Marker(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { strcpy(type_, "composite"); global = gl; handle = new Vector[4]; numHandle = 4; updateBBox(); } void Composite::x11(Drawable drawable, Coord::InternalSystem sys, int tt, RenderMode mode, HandleMode hh) { if (properties & HIDDEN) return; if (hh==HANDLES) renderXHandles(drawable); if (tt) renderXText(drawable, sys, mode); Marker* mk=members.head(); while (mk) { Marker* m = mk->dup(); m->setComposite(fwdMatrix(), angle); if (global) m->setComposite(colorName, lineWidth, highlited); m->x11(drawable, sys, tt, mode, hh); delete m; mk=mk->next(); } } void Composite::ps(int mode, int tt) { if (tt) renderPSText(mode); Marker* mk=members.head(); while (mk) { Marker* m = mk->dup(); m->setComposite(fwdMatrix(), angle); if (global) m->setComposite(colorName, lineWidth, highlited); m->ps(mode,tt); delete m; mk=mk->next(); } } #ifdef MAC_OSX_TK void Composite::macosx(int tt) { if (tt) renderMACOSXText(); Marker* mk=members.head(); while (mk) { Marker* m = mk->dup(); m->setComposite(fwdMatrix(), angle); if (global) m->setComposite(colorName, lineWidth, highlited); m->macosx(tt); delete m; mk=mk->next(); } } #endif #ifdef __WIN32 void Composite::win32(int tt) { if (tt) renderWIN32Text(); Marker* mk=members.head(); while (mk) { Marker* m = mk->dup(); m->setComposite(fwdMatrix(), angle); if (global) m->setComposite(colorName, lineWidth, highlited); m->win32(tt); delete m; mk=mk->next(); } } #endif // Support void Composite::updateHandles() { BBox bb(center * bckMatrix()); Marker* mk=members.head(); while (mk) { Marker* m = mk->dup(); m->setComposite(fwdMatrix(), angle); for(int ii=0; iigetNumHandle(); ii++) bb.bound(bckMap(m->getHandle(ii),Coord::CANVAS)); delete m; mk=mk->next(); } bb.expand(3); // a little more room around the edges handle[0] = fwdMap(bb.ll,Coord::CANVAS); handle[1] = fwdMap(bb.lr(),Coord::CANVAS); handle[2] = fwdMap(bb.ur,Coord::CANVAS); handle[3] = fwdMap(bb.ul(),Coord::CANVAS); } void Composite::updateCoords(const Matrix& mx) { Marker* mk=members.head(); while (mk) { Vector cc = center; mk->setComposite(fwdMatrix(), angle); mk->updateCoords(mx); center = cc*mx; mk->setComposite(bckMatrix(), -angle); center = cc; mk=mk->next(); } Marker::updateCoords(mx); } int Composite::isIn(const Vector& v) { if (!bbox.isIn(v)) return 0; Marker* mk=members.head(); while (mk) { Marker* m = mk->dup(); m->setComposite(fwdMatrix(), angle); if (m->isIn(v)) { delete m; return 1; } delete m; mk=mk->next(); } return 0; } void Composite::append(Marker* m) { m->setComposite(bckMatrix(), -angle); members.append(m); } Marker* Composite::extract() { Marker* mk=members.head(); if (mk) { members.extractNext(mk); mk->setComposite(fwdMatrix(), angle); } return mk; } // list void Composite::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { if (!strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 1); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector vv = ptr->mapFromRef(center,sys); str << type_ << '(' << setprecision(8) << vv<< ',' << radToDeg(parent->mapAngleFromRef(angle,sys)) << ')'; } break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(8) << vv << ',' << radToDeg(parent->mapAngleFromRef(angle,sys,sky)) << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ',' << radToDeg(parent->mapAngleFromRef(angle,sys,sky)) << ')'; break; } } else { Vector vv = ptr->mapFromRef(center,sys); str << type_ << '(' << setprecision(8) << vv << ',' << radToDeg(parent->mapAngleFromRef(angle,sys)) << ')'; } } str << " ||"; str << " composite=" << global; listProperties(str, 0); } Marker* mk=members.head(); while (mk) { Marker* m = mk->dup(); mk=mk->next(); m->setComposite(fwdMatrix(), angle); m->list(str, sys, sky, format, (mk?1:0), strip); delete m; } } void Composite::listCiao(ostream& str, Coord::CoordSystem sys, int strip) { Marker* mk=members.head(); while (mk) { Marker* m = mk->dup(); mk=mk->next(); m->setComposite(fwdMatrix(), angle); m->listCiao(str, sys, strip); delete m; } } void Composite::listPros(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { Marker* mk=members.head(); while (mk) { Marker* m = mk->dup(); m->setComposite(fwdMatrix(), angle); m->listPros(str, sys, sky, format, strip); delete m; mk=mk->next(); } } void Composite::listSAOtng(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { Marker* mk=members.head(); while (mk) { Marker* m = mk->dup(); m->setComposite(fwdMatrix(), angle); m->listSAOtng(str, sys, sky, format, strip); delete m; mk=mk->next(); } } void Composite::listSAOimage(ostream& str, int strip) { Marker* mk=members.head(); while (mk) { Marker* m = mk->dup(); m->setComposite(fwdMatrix(), angle); m->listSAOimage(str, strip); delete m; mk=mk->next(); } } void Composite::listXY(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { Marker* mk=members.head(); while (mk) { Marker* m = mk->dup(); m->setComposite(fwdMatrix(), angle); m->listXY(str, sys, sky, format, strip); delete m; mk=mk->next(); } } saods9/tksao/frame/composite.h000644 000765 000000 00000003411 12705446247 016764 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __composite_h__ #define __composite_h__ #include "marker.h" #include "list.h" class Composite : public Marker { private: List members; int global; void renderX(Drawable, Coord::InternalSystem, RenderMode) {} void renderPS(int mode) {} #ifdef MAC_OSX_TK void renderMACOSX() {} #endif #ifdef __WIN32 void renderWIN32() {} #endif protected: void updateHandles(); public: Composite(const Composite&); Composite(Base* p, const Vector& ctr, double ang, int gl, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Marker* dup() {return new Composite(*this);} void x11(Drawable, Coord::InternalSystem, int, RenderMode, HandleMode); void ps(int,int); #ifdef MAC_OSX_TK void macosx(int); #endif #ifdef __WIN32 void win32(int); #endif void updateCoords(const Matrix&); int isIn(const Vector& v); void append(Marker*); Marker* extract(); void setGlobal(int w) {global = w ? 1 : 0;} int getGlobal() {return global;} void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat) {} void listCiao(ostream&, Coord::CoordSystem, int); void listSAOtng(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); void listSAOimage(ostream&, int); void listPros(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); void listXY(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); }; #endif saods9/tksao/frame/context.C000644 000765 000000 00000200544 12775517652 016415 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "context.h" #include "fitsimage.h" #include "fvcontour.h" #include "alloc.h" #include "allocgz.h" #include "channel.h" #include "colorscale.h" #include "mmap.h" #include "mmapincr.h" #include "share.h" #include "sshare.h" #include "socket.h" #include "socketgz.h" #include "var.h" #include "head.h" extern "C" { #include "tkbltVector.h" } // Contour Parser Stuff #undef yyFlexLexer #define yyFlexLexer ctFlexLexer #include void* ctlval; ctFlexLexer* ctlexx; extern int ctparse(Base*, ctFlexLexer*); int ctlex(void* vval, ctFlexLexer* ll) { ctlval = vval; ctlexx = ll; return ll ? ll->yylex() : 0; } void cterror(Base* ct, ctFlexLexer* ll, const char* m) { ct->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') { ct->error(": "); ct->error(cmd); } } typedef struct { char* dest; char** sjv; int ww; int hh; int dd; int bz; int mm; } t_reorder_arg; ostream& operator<<(ostream& ss, const FitsZBound& bb) { ss << bb.zmin << ' ' << bb.zmax; return ss; } Context::Context() { parent_ = NULL; bfits_ =NULL; fits =NULL; cfits =NULL; shareWCS_ =0; manageAxes_ =0; axesOrder_ =123; loadInit(0, Base::NOMOSAIC, Coord::WCS); binFunction_ = FitsHist::SUM; binFactor_ = Vector(1,1); binBufferSize_ = 1024; binDepth_ = 1; blockFactor_ = Vector(1,1); doSmooth_ =0; smoothFunction_ =GAUSSIAN; smoothRadius_ =3; #ifndef __WIN32 thread_ =NULL; #endif } Context::~Context() { } #ifdef __WIN32 void Context::analysis() { if (DebugPerf) cerr << "Context::analysis()" << endl; FitsImage* ptr = fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->analysis(doSmooth_); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } clearHist(); updateClip(); } #else void Context::analysis() { if (DebugPerf) cerr << "Context::analysis()" << endl; if (thread_) delete [] thread_; thread_ = new pthread_t[parent_->nthreads_]; t_smooth_arg* targ = new t_smooth_arg[parent_->nthreads_]; int cnt =0; FitsImage* ptr = fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->analysis(doSmooth_, &thread_[cnt], &targ[cnt]); cnt++; if (cnt == parent_->nthreads_) { if (doSmooth_) { for (int ii=0; iinextSlice(); } ptr = ptr->nextMosaic(); } if (doSmooth_) { for (int ii=0; iibin(vv); binFinish(); } return mm; } Matrix Context::binCenter() { Matrix mm; if (fits) { mm = fits->binCenter(); binFinish(); } return mm; } Matrix Context::binCursor() { Matrix mm; if (fits) { mm = fits->binCursor(); binFinish(); } return mm; } void Context::binFinish() { if (DebugPerf) cerr << "Context::binFinish()" << endl; if (!fits->isHist()) return; // delete any previous slices { FitsImage* ptr = fits->nextSlice(); fits->setNextSlice(NULL); while (ptr) { FitsImage* tmp = ptr->nextSlice(); delete ptr; ptr = tmp; } } // finish bin loadInit(1, Base::NOMOSAIC,Coord::WCS); cfits = fits; // bin data cube int bd = binDepth_; if (bd > 1) { naxis_[2] =1; // first shareWCS_ =1; FitsImage* ptr = fits; for (int ii=1; iiinterp, fits, ptr->baseFile(), ii+1); if (next->isValid()) { ptr->setNextSlice(next); ptr = next; naxis_[2]++; } else { delete next; break; } } } // fix z params (in data coords) iparams.set(0,naxis_[2]); cparams.set(0,naxis_[2]); resetSecMode(); loadFinish(); } #ifdef __WIN32 int Context::block() { if (DebugPerf) cerr << "Context::block()" << endl; // primary FitsImage* ptr = fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->block(); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } resetSecMode(); int rr =1; switch (mosaicType) { case Base::IRAF: case Base::WCSMOSAIC: rr = processMosaicKeywords(fits); break; default: break; } FitsMask* msk = mask.head(); if (msk) { FitsImage* ptr = msk->mask(); while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->block(); switch (mosaicType) { case Base::IRAF: case Base::WCSMOSAIC: rr &= processMosaicKeywords(ptr); break; default: break; } sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } msk = msk->next(); } return rr & blockMask(); } int Context::blockMask() { int rr =1; FitsMask* msk = mask.head(); if (msk) { FitsImage* ptr = msk->mask(); while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->block(); switch (mosaicType) { case Base::IRAF: case Base::WCSMOSAIC: rr &= processMosaicKeywords(ptr); break; default: break; } sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } msk = msk->next(); } return rr; } #else int Context::block() { if (DebugPerf) cerr << "Context::block()" << endl; int doBlock = (blockFactor_[0] != 1 && blockFactor_[1] != 1) ? 1 : 0; int rr =1; // primary if (thread_) delete [] thread_; thread_ = new pthread_t[parent_->nthreads_]; { int cnt =0; FitsImage* ptr = fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->block(&thread_[cnt]); cnt++; if (cnt == parent_->nthreads_) { if (doBlock) { for (int ii=0; iinextSlice(); } ptr = ptr->nextMosaic(); } if (doBlock) { for (int ii=0; iinthreads_]; { int cnt =0; FitsMask* msk = mask.head(); if (msk) { FitsImage* ptr = msk->mask(); while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->block(&thread_[cnt]); cnt++; if (cnt == parent_->nthreads_) { if (doBlock) { for (int ii=0; iinextSlice(); } ptr = ptr->nextMosaic(); } msk = msk->next(); } if (doBlock) { for (int ii=0; iimask(); while (ptr) { FitsImage* sptr = ptr; while (sptr) { switch (mosaicType) { case Base::IRAF: case Base::WCSMOSAIC: rr &= processMosaicKeywords(ptr); break; default: break; } sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } msk = msk->next(); } } return rr; } #endif void Context::bltHist(char* xname, char* yname, int num) { if (!fits) return; switch (frScale.clipScope()) { case FrScale::GLOBAL: frScale.histogram(fits,num); break; case FrScale::LOCAL: frScale.histogram(cfits,num); break; } int nn = num+1; double* x = frScale.histogramX(); double* y = frScale.histogramY(); Blt_Vector* xx; Blt_GetVector(parent_->interp, xname, &xx); Blt_ResetVector(xx, x, nn, nn*sizeof(double), TCL_VOLATILE); Blt_Vector* yy; Blt_GetVector(parent_->interp, yname, &yy); Blt_ResetVector(yy, y, nn, nn*sizeof(double), TCL_VOLATILE); } int Context::calcSlice() { int cnt =1; for (int jj=3; jjnextMosaic(); while (ptr) { fvcontour_.append(ptr); ptr = ptr->nextMosaic(); } } } } void Context::contourDeleteFV() { fvcontour_.lcontourlevel().deleteAll(); } void Context::contourDeleteAux() { auxcontours_.deleteAll(); } void Context::contourListFV(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky) { if (!cfits) return; contourList(str, sys, sky, fvcontour_.lcontourlevel()); } void Context::contourListAux(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky) { if (!cfits) return; contourList(str, sys, sky, auxcontours_); } void Context::contourList(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, List& cl) { if (cl.head()) { str << "# Contour file format: DS9 version 7.5" << endl; // just in case cl.head(); str << "# levels=( "; do str << cl.current()->level() << ' '; while (cl.next()); str << ')' << endl; // reset cl.head(); str << "global color=green width=1 dash=no dashlist=8 3" << endl; coord.listCoordSystem(str, sys, sky, cfits); str << endl; do cl.current()->list(str, cfits, sys, sky); while (cl.next()); } } void Context::contourLoadAux(istream& str) { if (!cfits) return; ctFlexLexer* ll = new ctFlexLexer(&str); ctparse(parent_, ll); delete ll; } void Context::contourLoadAux(istream& str, const char* color, int width, int dash) { if (!cfits) return; // remember where we are int cnt = auxcontours_.count(); ctFlexLexer* ll = new ctFlexLexer(&str); ctparse(parent_, ll); delete ll; // override line attributes if (auxcontours_.head()) { for (int ii=0; iisetColor(color); auxcontours_.current()->setLineWidth(width); auxcontours_.current()->setDash(dash); } while (auxcontours_.next()); } } void Context::contourLoadAux(istream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, const char* color, int width, int dash) { if (!cfits) return; int dl[2]; dl[0] =8; dl[1] =3; ContourLevel* cl = new ContourLevel(parent_, 0, color, width, dash, dl); Contour* cc = new Contour(cl); while (!str.eof()) { char buf[64]; str.getline(buf,64,'\n'); if (strlen(buf) > 0) { Vector vv; string x(buf); istringstream sstr(x); sstr >> vv[0] >> vv[1]; cc->lvertex().append(new Vertex(fits->mapToRef(vv, sys, sky))); } else { cl->lcontour().append(cc); cc = new Contour(cl); } } auxcontours_.append(cl); } void Context::contourPS(Widget::PSColorSpace cs) { if (!cfits) return; // render back to front // aux contours if (auxcontours_.tail()) do auxcontours_.current()->ps(cs); while (auxcontours_.previous()); List& cc = fvcontour_.lcontourlevel(); if (cc.head()) do cc.current()->ps(cs); while (cc.next()); } void Context::contourX11(Pixmap pm, Coord::InternalSystem sys, int width, int height) { if (!cfits) return; // render back to front // aux contours if (auxcontours_.tail()) do auxcontours_.current()->render(pm, sys, width, height); while (auxcontours_.previous()); List& cc = fvcontour_.lcontourlevel(); if (cc.head()) do cc.current()->render(pm, sys, width, height); while (cc.next()); } #ifdef MAC_OSX_TK void Context::contourMacOSX() { if (!cfits) return; // render back to front // aux contours if (auxcontours_.tail()) do auxcontours_.current()->macosx(); while (auxcontours_.previous()); List& cc = fvcontour_.lcontourlevel(); if (cc.head()) do cc.current()->macosx(); while (cc.next()); } #endif #ifdef __WIN32 void Context::contourWin32() { if (!cfits) return; // render back to front // aux contours if (auxcontours_.tail()) do auxcontours_.current()->win32(); while (auxcontours_.previous()); List& cc = fvcontour_.lcontourlevel(); if (cc.head()) do cc.current()->win32(); while (cc.next()); } #endif int Context::fitsCount() { int cnt =1; for (int ii=2; iinextSlice(); while (sptr) { FitsImage* stmp = sptr->nextSlice(); delete sptr; sptr = stmp; } FitsImage* tmp = ptr->nextMosaic(); delete ptr; ptr = tmp; } } Vector Context::getClip() { return Vector(frScale.low(), frScale.high()); } Vector Context::getClip(FrScale::ClipMode cm, float ac) { if (DebugPerf) cerr << "Context::getClip()" << endl; // we already have the scale? if (frScale.clipMode() == cm && frScale.autoCutPer() == ac) return Vector(frScale.low(),frScale.high()); FrScale cl = frScale; cl.setClipMode(cm); cl.setAutoCutPer(ac); updateClip(&cl); // now reset updateClip(&frScale); return Vector(cl.low(),cl.high()); } FitsZBound* Context::getDataParams(FrScale::SecMode which) { switch (which) { case FrScale::IMGSEC: case FrScale::DATASEC: return &iparams; case FrScale::CROPSEC: return &cparams; } } Vector Context::getMinMax() { return Vector(frScale.min(), frScale.max()); } int Context::load(Base::MemType which, const char* fn, FitsImage* img, Base::LayerType ll) { if (!img || !img->isValid()) { if (img) delete img; switch (ll) { case Base::IMG: unload(); return 0; case Base::MASK: return 0; } } switch (ll) { case Base::IMG: bfits_ = img; loadInit(1, Base::NOMOSAIC,Coord::WCS); for (int ii=2; iinaxis(ii); baxis_[ii] = nn ? nn : 1; } // fix z params (in data coords) // do it here because of fits section iparams.set(0,baxis_[2]); cparams.set(0,baxis_[2]); break; case Base::MASK: mask.append(new FitsMask(parent_, img, parent_->maskColorName, parent_->maskMark)); break; } if (img->isHist()) which = Base::HIST; else if (img->isPost()) which = Base::POST; if (img->nhdu() > 1) shareWCS_ =1; FitsImage* ptr = img; for (int ii=1; iinhdu(); ii++) { FitsImage* next = NULL; switch (which) { case Base::ALLOC: next = new FitsImageFitsNextAlloc(this, parent_->interp, fn, ptr->fitsFile(), ii+1); break; case Base::ALLOCGZ: next = new FitsImageFitsNextAllocGZ(this, parent_->interp, fn, ptr->fitsFile(), ii+1); break; case Base::CHANNEL: next = new FitsImageFitsNextChannel(this, parent_->interp, fn, ptr->fitsFile(), ii+1); break; case Base::MMAP: next = new FitsImageFitsNextMMap(this, parent_->interp, fn, ptr->fitsFile(), ii+1); break; case Base::SMMAP: next = new FitsImageFitsNextSMMap(this, parent_->interp, fn, ptr->fitsFile(), ii+1); break; case Base::MMAPINCR: next = new FitsImageFitsNextMMapIncr(this, parent_->interp, fn, ptr->fitsFile(), ii+1); break; case Base::SHARE: next = new FitsImageFitsNextShare(this, parent_->interp, fn, ptr->fitsFile(), ii+1); break; case Base::SSHARE: next = new FitsImageFitsNextSShare(this, parent_->interp, fn, ptr->fitsFile(), ii+1); break; case Base::SOCKET: next = new FitsImageFitsNextSocket(this, parent_->interp, fn, ptr->fitsFile(), ii+1); break; case Base::SOCKETGZ: next = new FitsImageFitsNextSocketGZ(this, parent_->interp, fn, ptr->fitsFile(), ii+1); break; case Base::VAR: next = new FitsImageFitsNextVar(this, parent_->interp, fn, ptr->fitsFile(), ii+1); break; case Base::POST: next = new FitsImageFitsNextPost(this, parent_->interp, img, ptr->baseFile(), ii+1); break; case Base::PHOTO: next = new FitsImagePhotoCubeNext(this, parent_->interp, fn, ptr->baseFile(), ii+1); break; default: // na break; } if (next->isValid()) { ptr->setNextSlice(next); ptr = next; } else { delete next; break; } } // finish up img->close(); switch (ll) { case Base::IMG: loadFinish(); break; case Base::MASK: loadFinishMask(); break; } return 1; } int Context::loadExtCube(Base::MemType which, const char* fn, FitsImage* img) { if (!img || !img->isValid()) { if (img) delete img; unload(); return 0; } bfits_ = img; loadInit(1, Base::NOMOSAIC,Coord::WCS); // get the rest FitsImage* ptr = img; FitsImage* mptr = ptr; FitsImage* tmp =NULL; while (1) { FitsImage* next = NULL; switch (which) { case Base::ALLOC: next = new FitsImageMosaicNextAlloc(this, parent_->interp, fn, ptr->fitsFile(), FitsFile::NOFLUSH ,1); break; case Base::ALLOCGZ: next = new FitsImageMosaicNextAllocGZ(this, parent_->interp,fn,ptr->fitsFile(), FitsFile::NOFLUSH ,1); break; case Base::CHANNEL: next = new FitsImageMosaicNextChannel(this, parent_->interp,fn,ptr->fitsFile(), FitsFile::NOFLUSH, 1); break; case Base::MMAP: next = new FitsImageMosaicNextMMap(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::MMAPINCR: next = new FitsImageMosaicNextMMapIncr(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::SHARE: next = new FitsImageMosaicNextShare(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::SOCKET: next = new FitsImageMosaicNextSocket(this, parent_->interp, fn,ptr->fitsFile(), FitsFile::FLUSH,1 ); break; case Base::SOCKETGZ: next =new FitsImageMosaicNextSocketGZ(this, parent_->interp,fn,ptr->fitsFile(), FitsFile::FLUSH,1 ); break; case Base::VAR: next = new FitsImageMosaicNextVar(this, parent_->interp, fn, ptr->fitsFile(), 1); break; default: // na break; } // if previous was a unknown table, delete now, we're done with it if (tmp) { delete tmp; tmp =NULL; } // first check if fits_ is a known extension, aka we loaded something if (next->isImage() || next->isTable()) { // now check to see if it resolved into an image, no event tables // since any table can be a valid event table if (next->isValid() && !next->isHist()) { mptr->setNextSlice(next); ptr = next; mptr = ptr; baxis_[2]++; } else { // must be a unknown table, just ignore, and delete next time thru ptr = next; tmp = next; } } else { delete next; break; } } // finish up img->close(); // fix z params (in data coords) // must wait untill all loaded iparams.set(0,baxis_[2]); cparams.set(0,baxis_[2]); loadFinish(); return 1; } void Context::loadInit(int cnt, Base::MosaicType type, Coord::CoordSystem sys) { shareWCS_ =0; mosaicCount_ = cnt; mosaicType = type; mosaicSystem = sys; for (int ii=0; iiisValid()) { if (img) delete img; return 0; } switch (ll) { case Base::IMG: if (bfits_) { FitsImage* ptr = bfits_; while (ptr && ptr->nextMosaic()) ptr = ptr->nextMosaic(); ptr->setNextMosaic(img); mosaicCount_++; } else { bfits_ = img; loadInit(1, type,sys); for (int ii=2; iinaxis(ii); baxis_[ii] = nn ? nn : 1; } // fix z params (in data coords) // do it here because of fits section iparams.set(0,baxis_[2]); cparams.set(0,baxis_[2]); } break; case Base::MASK: FitsMask* msk = mask.tail(); if (msk) { FitsImage* mskimg = msk->mask(); while (mskimg && mskimg->nextMosaic()) mskimg = mskimg->nextMosaic(); mskimg->setNextMosaic(img); } else mask.append(new FitsMask(parent_, img, parent_->maskColorName, parent_->maskMark)); break; } if (img->isPost()) which = Base::POST; // get the rest of slices if (img->nhdu() > 1) shareWCS_ =1; FitsImage* sptr = img; for (int ii=1; iinhdu(); ii++) { FitsImage* next = NULL; switch (which) { case Base::ALLOC: next = new FitsImageFitsNextAlloc(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::ALLOCGZ: next = new FitsImageFitsNextAllocGZ(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::CHANNEL: next = new FitsImageFitsNextChannel(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::MMAP: next = new FitsImageFitsNextMMap(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::SMMAP: next = new FitsImageFitsNextSMMap(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::MMAPINCR: next = new FitsImageFitsNextMMapIncr(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::SHARE: next = new FitsImageFitsNextShare(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::SSHARE: next = new FitsImageFitsNextSShare(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::SOCKET: next = new FitsImageFitsNextSocket(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::SOCKETGZ: next = new FitsImageFitsNextSocketGZ(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::VAR: next = new FitsImageFitsNextVar(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::POST: next = new FitsImageFitsNextPost(this, parent_->interp, img, sptr->baseFile(), ii+1); break; case Base::PHOTO: next = new FitsImagePhotoCubeNext(this, parent_->interp, fn, sptr->baseFile(), ii+1); break; default: // na break; } if (next->isValid()) { sptr->setNextSlice(next); sptr = next; } else { delete next; break; } } // finish up img->close(); switch (ll) { case Base::IMG: loadFinishMosaic(fits); if (!loadFinish()) { unload(); return 0; } break; case Base::MASK: if (!loadFinishMosaicMask()) return 0; break; } return 1; } int Context::loadMosaicImage(Base::MemType which, const char* fn, FitsImage* img, Base::LayerType ll, Base::MosaicType type, Coord::CoordSystem sys) { if (!img || !img->isValid()) { if (img) delete img; switch (ll) { case Base::IMG: unload(); return 0; case Base::MASK: return 0; } } switch (ll) { case Base::IMG: bfits_ = img; loadInit(1, type,sys); for (int ii=2; iinaxis(ii); baxis_[ii] = nn ? nn : 1; } // fix z params (in data coords) // do it here because of fits section iparams.set(0,baxis_[2]); cparams.set(0,baxis_[2]); break; case Base::MASK: mask.append(new FitsMask(parent_, img, parent_->maskColorName, parent_->maskMark)); break; } Base::MemType sav = which; // get the rest of slices FitsImage* sptr = img; if (img->isPost()) which = Base::POST; if (img->nhdu() > 1) shareWCS_ =1; for (int ii=1; iinhdu(); ii++) { FitsImage* next = NULL; switch (which) { case Base::ALLOC: next = new FitsImageFitsNextAlloc(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::ALLOCGZ: next = new FitsImageFitsNextAllocGZ(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::CHANNEL: next = new FitsImageFitsNextChannel(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::MMAP: next = new FitsImageFitsNextMMap(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::SMMAP: next = new FitsImageFitsNextSMMap(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::MMAPINCR: next = new FitsImageFitsNextMMapIncr(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::SHARE: next = new FitsImageFitsNextShare(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::SSHARE: next = new FitsImageFitsNextSShare(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::SOCKET: next = new FitsImageFitsNextSocket(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::SOCKETGZ: next = new FitsImageFitsNextSocketGZ(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::VAR: next = new FitsImageFitsNextVar(this, parent_->interp, fn, sptr->fitsFile(), ii+1); break; case Base::POST: next = new FitsImageFitsNextPost(this, parent_->interp, img, sptr->baseFile(), ii+1); break; default: // na break; } if (next->isValid()) { sptr->setNextSlice(next); sptr = next; } else { delete next; break; } } // get the rest of mosaic FitsImage* ptr = img; FitsImage* tmp =NULL; while (1) { // restore which which = sav; FitsImage* next = NULL; switch (which) { case Base::ALLOC: next = new FitsImageMosaicNextAlloc(this, parent_->interp, fn, ptr->fitsFile(), FitsFile::NOFLUSH, 1); break; case Base::ALLOCGZ: next = new FitsImageMosaicNextAllocGZ(this, parent_->interp,fn,ptr->fitsFile(), FitsFile::NOFLUSH, 1); break; case Base::CHANNEL: next = new FitsImageMosaicNextChannel(this, parent_->interp,fn,ptr->fitsFile(), FitsFile::NOFLUSH, 1); break; case Base::MMAP: next = new FitsImageMosaicNextMMap(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::MMAPINCR: next = new FitsImageMosaicNextMMapIncr(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::SHARE: next = new FitsImageMosaicNextShare(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::SOCKET: next = new FitsImageMosaicNextSocket(this, parent_->interp, fn,ptr->fitsFile(), FitsFile::FLUSH, 1); break; case Base::SOCKETGZ: next = new FitsImageMosaicNextSocketGZ(this, parent_->interp,fn,ptr->fitsFile(), FitsFile::FLUSH, 1); break; case Base::VAR: next = new FitsImageMosaicNextVar(this, parent_->interp, fn, ptr->fitsFile(), 1); break; default: // na break; } // if previous was a unknown table, delete now, we're done with it if (tmp) { delete tmp; tmp =NULL; } // first check if fits_ is a known extension, aka we loaded something if (!next->isImage() && !next->isTable()) { // ok, we're done delete next; break; } // now check to see if it resolved into an image, no event tables // since any table can be a valid event table if (!next->isValid() || next->isHist()) { // must be a unknown table, just ignore, and delete next time thru ptr = next; tmp = next; } else { ptr->setNextMosaic(next); ptr = next; if (ll == Base::IMG) mosaicCount_++; if (img->isPost()) which = Base::POST; // get rest of slices for (int ii=1; iinhdu(); ii++) { FitsImage* snext = NULL; switch (which) { case Base::ALLOC: snext = new FitsImageFitsNextAlloc(this, parent_->interp, fn, next->fitsFile(),ii+1); break; case Base::ALLOCGZ: snext = new FitsImageFitsNextAllocGZ(this, parent_->interp, fn, next->fitsFile(),ii+1); break; case Base::CHANNEL: snext = new FitsImageFitsNextChannel(this, parent_->interp, fn, next->fitsFile(),ii+1); break; case Base::MMAP: snext = new FitsImageFitsNextMMap(this, parent_->interp, fn, next->fitsFile(),ii+1); break; case Base::SMMAP: snext = new FitsImageFitsNextSMMap(this, parent_->interp, fn, next->fitsFile(),ii+1); break; case Base::MMAPINCR: snext = new FitsImageFitsNextMMapIncr(this, parent_->interp, fn, next->fitsFile(),ii+1); break; case Base::SHARE: snext = new FitsImageFitsNextShare(this, parent_->interp, fn, next->fitsFile(),ii+1); break; case Base::SSHARE: snext = new FitsImageFitsNextSShare(this, parent_->interp, fn, next->fitsFile(),ii+1); break; case Base::SOCKET: snext = new FitsImageFitsNextSocket(this, parent_->interp, fn, next->fitsFile(),ii+1); break; case Base::SOCKETGZ: snext = new FitsImageFitsNextSocketGZ(this, parent_->interp, fn, next->fitsFile(),ii+1); break; case Base::VAR: snext = new FitsImageFitsNextVar(this, parent_->interp, fn, next->fitsFile(),ii+1); break; case Base::POST: snext = new FitsImageFitsNextPost(this, parent_->interp, ptr, next->baseFile(),ii+1); break; default: // na break; } if (snext->isValid()) { next->setNextSlice(snext); next = snext; } else { delete snext; break; } } } } // finish up img->close(); switch (ll) { case Base::IMG: loadFinishMosaic(fits); if (!loadFinish()) { unload(); return 0; } break; case Base::MASK: if (!loadFinishMosaicMask()) return 0; break; } return 1; } int Context::loadMosaicWFPC2(Base::MemType which, const char* fn, FitsImage* img) { if (!img || !img->isValid()) { if (img) delete img; unload(); return 0; } // Its legal, save it bfits_ = img; loadInit(1, Base::WFPC2,Coord::WCS); // remember in case of compress Base::MemType sav = which; if (img->isPost()) which = Base::POST; // get the rest { FitsImage* ptr = img; for (int i=1; i<4; i++) { FitsImage* next = NULL; switch (which) { case Base::ALLOC: next = new FitsImageFitsNextAlloc(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::ALLOCGZ: next = new FitsImageFitsNextAllocGZ(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::CHANNEL: next = new FitsImageFitsNextChannel(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::MMAP: next = new FitsImageFitsNextMMap(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::MMAPINCR: next = new FitsImageFitsNextMMapIncr(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::SHARE: next = new FitsImageFitsNextShare(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::SOCKET: next = new FitsImageFitsNextSocket(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::SOCKETGZ: next = new FitsImageFitsNextSocketGZ(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::VAR: next = new FitsImageFitsNextVar(this, parent_->interp, fn, ptr->fitsFile(), 1); break; case Base::POST: next = new FitsImageFitsNextPost(this, parent_->interp, img, ptr->baseFile(), 1); break; default: // na break; } if (next->isValid()) { ptr->setNextMosaic(next); ptr = next; mosaicCount_++; } else { delete next; break; } } } // restore which which = sav; // ok, do we have 4 images? if (mosaicCount_ != 4) { unload(); return 0; } // now, find WCS table FitsFile* table =NULL; switch (which) { case Base::ALLOC: table = new FitsMosaicNextAlloc(img->fitsFile(), FitsFile::NOFLUSH); break; case Base::ALLOCGZ: table = new FitsMosaicNextAllocGZ(img->fitsFile(), FitsFile::NOFLUSH); break; case Base::CHANNEL: table = new FitsMosaicNextChannel(img->fitsFile(), FitsFile::NOFLUSH); break; case Base::MMAP: table = new FitsMosaicNextMMap(img->fitsFile()); break; case Base::MMAPINCR: table = new FitsMosaicNextMMapIncr(img->fitsFile()); break; case Base::SHARE: table = new FitsMosaicNextShare(img->fitsFile()); break; case Base::SOCKET: table = new FitsMosaicNextSocket(img->fitsFile(), FitsFile::FLUSH); break; case Base::SOCKETGZ: table = new FitsMosaicNextSocketGZ(img->fitsFile(), FitsFile::FLUSH); break; case Base::VAR: table = new FitsMosaicNextVar(img->fitsFile()); break; default: // na break; } if (!table || !table->isValid() || !table->isAsciiTable()) { if (table) delete table; unload(); return 0; } // read WCS from table { FitsHead* th = table->head(); if (th->naxes() != 2) { if (table) delete table; unload(); return 0; } FitsTableHDU* thdu = (FitsTableHDU*)th->hdu(); FitsColumn* crval1 = thdu->find("CRVAL1"); FitsColumn* crval2 = thdu->find("CRVAL2"); FitsColumn* crpix1 = thdu->find("CRPIX1"); FitsColumn* crpix2 = thdu->find("CRPIX2"); FitsColumn* cd1_1 = thdu->find("CD1_1"); FitsColumn* cd1_2 = thdu->find("CD1_2"); FitsColumn* cd2_1 = thdu->find("CD2_1"); FitsColumn* cd2_2 = thdu->find("CD2_2"); FitsColumn* ctype1 = thdu->find("CTYPE1"); FitsColumn* ctype2 = thdu->find("CTYPE2"); char* tptr = (char*)table->data(); int rows = thdu->rows(); int rowlen = thdu->width(); if (rows != 4) { unload(); return 0; } FitsImage* ptr = bfits_; // reset count for processKeyWords() mosaicCount_ =0; for (int ii=0; iicancelDetach(); if (manageAxes_) { delete [] naxis_; deleteFits(fits); manageAxes_ =0; } fits = bfits_; naxis_ = baxis_; if (axesOrder_ != 123) reorderAxes(); for (int ii=0; iiprocessKeywordsFitsSection(); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } analysis(); return 1; } void Context::loadFinishMask() { FitsMask* msk = mask.tail(); if (msk) { FitsImage* mskimg = msk->mask(); mskimg->block(); } } void Context::loadFinishMosaic(FitsImage* ptr) { while (ptr && ptr->nextMosaic()) { int jj=0; FitsImage* sptr = ptr; while (sptr) { if (sptr->nextMosaic() == NULL) { // ok, let's figure out next inline FitsImage* mptr = ptr->nextMosaic(); for (int nn=0; nnnextSlice(); sptr->setNextMosaic(mptr); } jj++; sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } int Context::loadFinishMosaicMask() { FitsMask* msk = mask.tail(); if (msk) loadFinishMosaic(msk->mask()); return blockMask(); } int Context::loadSlice(Base::MemType which, const char* fn, FitsImage* img) { if (!img || !img->isValid()) { if (img) delete img; return 0; } if (bfits_) { FitsImage* ptr = bfits_; while (ptr && ptr->nextSlice()) ptr = ptr->nextSlice(); ptr->setNextSlice(img); baxis_[2]++; } else { bfits_ = img; loadInit(1, Base::NOMOSAIC,Coord::WCS); } // finish up img->close(); // fix z params (in data coords) // must wait untill all loaded iparams.set(0,baxis_[2]); cparams.set(0,baxis_[2]); loadFinish(); return 1; } int Context::naxes() { for (int ii=FTY_MAXAXES-1; ii>=2; ii--) { if (naxis_[ii]>1) return ii+1; } return 2; } int Context::nhdu() { int dd =1; for (int ii=2; ii1) dd *= naxis_[ii]; return dd; } int Context::processMosaicKeywords(FitsImage* ptr) { while (ptr) { FitsImage* sptr = ptr; while (sptr) { switch (mosaicType) { case Base::IRAF: if (!sptr->processKeywordsIRAF(fits)) return 0; break; case Base::WCSMOSAIC: { if (!sptr->hasWCS(mosaicSystem)) return 0; Matrix mm = parent_->calcAlignWCS(fits, sptr, mosaicSystem, mosaicSystem, Coord::FK5); sptr->setwcsToRef(mm); } break; default: // na break; } sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } return 1; } void* reorder132(void* tt) { t_reorder_arg* targ = (t_reorder_arg*)tt; char* dest = targ->dest; char** sjv = targ->sjv; int ww = targ->ww; // int hh = targ->hh; int dd = targ->dd; int bz = targ->bz; int jj = targ->mm; for (int kk=0; kkdest; char** sjv = targ->sjv; int ww = targ->ww; int hh = targ->hh; // int dd = targ->dd; int bz = targ->bz; int kk = targ->mm; for (int ii=0; iidest; char** sjv = targ->sjv; int ww = targ->ww; int hh = targ->hh; int dd = targ->dd; int bz = targ->bz; int ii = targ->mm; for (int kk=0; kkdest; char** sjv = targ->sjv; int ww = targ->ww; // int hh = targ->hh; int dd = targ->dd; int bz = targ->bz; int jj = targ->mm; for (int ii=0; iidest; char** sjv = targ->sjv; int ww = targ->ww; int hh = targ->hh; int dd = targ->dd; int bz = targ->bz; int ii = targ->mm; for (int jj=0; jjnthreads_) { for (int pp=0; pp<*cnt; pp++) { if (pthread_join(thread_[pp], NULL)) internalError("Unable to Join Thread"); } *cnt =0; } } } void Context::reorderAxis(char* data, char** sjv, int ww, int hh, int dd, size_t bz) { if (thread_) delete [] thread_; thread_ = new pthread_t[parent_->nthreads_]; t_reorder_arg* targ = new t_reorder_arg[parent_->nthreads_]; for (int ii=0; iinthreads_; ii++) { targ[ii].sjv = sjv; targ[ii].ww = ww; targ[ii].hh = hh; targ[ii].dd = dd; targ[ii].bz = bz; } int cnt =0; switch (axesOrder_) { case 123: return; case 132: naxis_[0] =ww; naxis_[1] =dd; naxis_[2] =hh; reorderThread(targ, data, reorder132, &cnt); break; case 213: naxis_[0] =hh; naxis_[1] =ww; naxis_[2] =dd; reorderThread(targ, data, reorder213, &cnt); break; case 231: naxis_[0] =hh; naxis_[1] =dd; naxis_[2] =ww; reorderThread(targ, data, reorder231, &cnt); break; case 312: naxis_[0] =dd; naxis_[1] =ww; naxis_[2] =hh; reorderThread(targ, data, reorder312, &cnt); break; case 321: naxis_[0] =dd; naxis_[1] =hh; naxis_[2] =ww; reorderThread(targ, data, reorder321, &cnt); break; } for (int pp=0; ppbaseFile()->head()->bitpix(); int bz = abs(bitpix)/8; int ww = bfits_->baseFile()->head()->naxis(0); int hh = bfits_->baseFile()->head()->naxis(1); int dd = baxis_[2]; size_t sz = (size_t)ww*hh*dd*bz; // Data char* data = new char[sz]; if (!data) return; memset(data,sz,0); naxis_ = new int[FTY_MAXAXES]; for (int ii=0; iibasedata(); if (sptr) sptr = sptr->nextSlice(); } reorderAxis(data, sjv, ww, hh, dd, bz); // Header FitsHead* hdr = new FitsHead(*(bfits_->baseFile()->head())); hdr->setInteger("NAXES", 3, ""); hdr->setInteger("NAXIS1", naxis_[0], ""); hdr->setInteger("NAXIS2", naxis_[1], ""); if (hdr->find("NAXIS3")) hdr->setInteger("NAXIS3", naxis_[2], ""); else { char* n2= hdr->find("NAXIS2"); hdr->insertInteger("NAXIS3", naxis_[2], "", n2); } for (int ii=0; iifind("CTYPE1") && hdr->find("CTYPE2")) { char* c2= hdr->find("CTYPE2"); hdr->insertString("CTYPE1", "LINEAR", "", c2); } else if (!hdr->find("CTYPE2") && hdr->find("CTYPE1")) { char* c1= hdr->find("CTYPE1"); hdr->insertString("CTYPE2", "LINEAR", "", c1); } // Load it fits = new FitsImageFitsOrder(this, parent_->interp, bfits_, hdr, data, sz, 1); FitsImage* ptr = fits; for (int ii=1; iiinterp, fits, ptr->fitsFile(), ii+1); if (next->isValid()) { ptr->setNextSlice(next); ptr = next; } else { delete next; break; } } // fix z params (in data coords) iparams.set(0,naxis_[2]); cparams.set(0,naxis_[2]); manageAxes_ =1; } void Context::reorderWCSi(FitsHead* hdr, char* kk, int ii, char ww) { char key[8]; strcpy(key,kk); key[ii+1] = ww; key[ii] = '1'; char* c1 = hdr->find(key); key[ii] = '2'; char* c2 = hdr->find(key); key[ii] = '3'; char* c3 = hdr->find(key); switch (axesOrder_) { case 123: return; case 132: { if (c1) { key[ii] = '1'; FitsCard(c1).setKey(key); } if (c2) { key[ii] = '3'; FitsCard(c2).setKey(key); } if (c3) { key[ii] = '2'; FitsCard(c3).setKey(key); } } break; case 213: { if (c1) { key[ii] = '2'; FitsCard(c1).setKey(key); } if (c2) { key[ii] = '1'; FitsCard(c2).setKey(key); } if (c3) { key[ii] = '3'; FitsCard(c3).setKey(key); } } break; case 231: { if (c1) { key[ii] = '3'; FitsCard(c1).setKey(key); } if (c2) { key[ii] = '1'; FitsCard(c2).setKey(key); } if (c3) { key[ii] = '2'; FitsCard(c3).setKey(key); } } break; case 312: { if (c1) { key[ii] = '2'; FitsCard(c1).setKey(key); } if (c2) { key[ii] = '3'; FitsCard(c2).setKey(key); } if (c3) { key[ii] = '1'; FitsCard(c3).setKey(key); } } break; case 321: { if (c1) { key[ii] = '3'; FitsCard(c1).setKey(key); } if (c2) { key[ii] = '2'; FitsCard(c2).setKey(key); } if (c3) { key[ii] = '1'; FitsCard(c3).setKey(key); } } break; } } void Context::reorderWCSij(FitsHead* hdr, char* kk, int ii, char ww) { char key[8]; strcpy(key,kk); key[ii+3] = ww; key[ii] = '1'; key[ii+2] = '1'; char* c11 = hdr->find(key); key[ii+2] = '2'; char* c12 = hdr->find(key); key[ii+2] = '3'; char* c13 = hdr->find(key); key[ii] = '2'; key[ii+2] = '1'; char* c21 = hdr->find(key); key[ii+2] = '2'; char* c22 = hdr->find(key); key[ii+2] = '3'; char* c23 = hdr->find(key); key[ii] = '3'; key[ii+2] = '1'; char* c31 = hdr->find(key); key[ii+2] = '2'; char* c32 = hdr->find(key); key[ii+2] = '3'; char* c33 = hdr->find(key); switch (axesOrder_) { case 123: return; case 132: { if (c11) { key[ii] = '1'; key[ii+2] = '1'; FitsCard(c11).setKey(key); } if (c12) { key[ii] = '1'; key[ii+2] = '3'; FitsCard(c12).setKey(key); } if (c13) { key[ii] = '1'; key[ii+2] = '2'; FitsCard(c13).setKey(key); } if (c21) { key[ii] = '3'; key[ii+2] = '1'; FitsCard(c21).setKey(key); } if (c22) { key[ii] = '3'; key[ii+2] = '3'; FitsCard(c22).setKey(key); } if (c23) { key[ii] = '3'; key[ii+2] = '2'; FitsCard(c23).setKey(key); } if (c31) { key[ii] = '2'; key[ii+2] = '1'; FitsCard(c31).setKey(key); } if (c32) { key[ii] = '2'; key[ii+2] = '3'; FitsCard(c32).setKey(key); } if (c33) { key[ii] = '2'; key[ii+2] = '2'; FitsCard(c33).setKey(key); } } break; case 213: { if (c11) { key[ii] = '2'; key[ii+2] = '2'; FitsCard(c11).setKey(key); } if (c12) { key[ii] = '2'; key[ii+2] = '1'; FitsCard(c12).setKey(key); } if (c13) { key[ii] = '2'; key[ii+2] = '3'; FitsCard(c13).setKey(key); } if (c21) { key[ii] = '1'; key[ii+2] = '2'; FitsCard(c21).setKey(key); } if (c22) { key[ii] = '1'; key[ii+2] = '1'; FitsCard(c22).setKey(key); } if (c23) { key[ii] = '1'; key[ii+2] = '3'; FitsCard(c23).setKey(key); } if (c31) { key[ii] = '3'; key[ii+2] = '2'; FitsCard(c31).setKey(key); } if (c32) { key[ii] = '3'; key[ii+2] = '1'; FitsCard(c32).setKey(key); } if (c33) { key[ii] = '3'; key[ii+2] = '3'; FitsCard(c33).setKey(key); } } break; case 231: { if (c11) { key[ii] = '3'; key[ii+2] = '3'; FitsCard(c11).setKey(key); } if (c12) { key[ii] = '3'; key[ii+2] = '1'; FitsCard(c12).setKey(key); } if (c13) { key[ii] = '3'; key[ii+2] = '2'; FitsCard(c13).setKey(key); } if (c21) { key[ii] = '1'; key[ii+2] = '3'; FitsCard(c21).setKey(key); } if (c22) { key[ii] = '1'; key[ii+2] = '1'; FitsCard(c22).setKey(key); } if (c23) { key[ii] = '1'; key[ii+2] = '2'; FitsCard(c23).setKey(key); } if (c31) { key[ii] = '2'; key[ii+2] = '3'; FitsCard(c31).setKey(key); } if (c32) { key[ii] = '2'; key[ii+2] = '1'; FitsCard(c32).setKey(key); } if (c33) { key[ii] = '2'; key[ii+2] = '2'; FitsCard(c33).setKey(key); } } break; case 312: { if (c11) { key[ii] = '2'; key[ii+2] = '2'; FitsCard(c11).setKey(key); } if (c12) { key[ii] = '2'; key[ii+2] = '3'; FitsCard(c12).setKey(key); } if (c13) { key[ii] = '2'; key[ii+2] = '1'; FitsCard(c13).setKey(key); } if (c21) { key[ii] = '3'; key[ii+2] = '2'; FitsCard(c21).setKey(key); } if (c22) { key[ii] = '3'; key[ii+2] = '3'; FitsCard(c22).setKey(key); } if (c23) { key[ii] = '3'; key[ii+2] = '1'; FitsCard(c23).setKey(key); } if (c31) { key[ii] = '1'; key[ii+2] = '2'; FitsCard(c31).setKey(key); } if (c32) { key[ii] = '1'; key[ii+2] = '3'; FitsCard(c32).setKey(key); } if (c33) { key[ii] = '1'; key[ii+2] = '1'; FitsCard(c33).setKey(key); } } break; case 321: { if (c11) { key[ii] = '3'; key[ii+2] = '3'; FitsCard(c11).setKey(key); } if (c12) { key[ii] = '3'; key[ii+2] = '2'; FitsCard(c12).setKey(key); } if (c13) { key[ii] = '3'; key[ii+2] = '1'; FitsCard(c13).setKey(key); } if (c21) { key[ii] = '2'; key[ii+2] = '3'; FitsCard(c21).setKey(key); } if (c22) { key[ii] = '2'; key[ii+2] = '2'; FitsCard(c22).setKey(key); } if (c23) { key[ii] = '2'; key[ii+2] = '1'; FitsCard(c23).setKey(key); } if (c31) { key[ii] = '1'; key[ii+2] = '3'; FitsCard(c31).setKey(key); } if (c32) { key[ii] = '1'; key[ii+2] = '2'; FitsCard(c32).setKey(key); } if (c33) { key[ii] = '1'; key[ii+2] = '1'; FitsCard(c33).setKey(key); } } break; } hdr->buildIndex(); } void Context::resetIIS() { frScale.setClipMode(FrScale::MINMAX); frScale.setMinMaxMode(FrScale::SCAN); frScale.setULow(DEFAULTLOW); frScale.setUHigh(DEFAULTHIGH); frScale.setColorScaleType(FrScale::LINEARSCALE); } void Context::resetSecMode() { frScale.resetSecMode(); clearHist(); } void Context::setAxesOrder(int order) { switch (order) { case 123: case 132: case 213: case 231: case 312: case 321: axesOrder_ = order; break; default: axesOrder_ = 123; break; } if (bfits_) loadFinish(); } void Context::setBinFactor(const Vector& b) { Vector bb = b; binFactor_[0] *= bb[0] <= 0 ? 1 : bb[0]; binFactor_[1] *= bb[1] <= 0 ? 1 : bb[1]; } void Context::setBinToFactor(const Vector& b) { Vector bb = b; binFactor_[0] = bb[0] <= 0 ? 1 : bb[0]; binFactor_[1] = bb[1] <= 0 ? 1 : bb[1]; } Vector Context::setBlockFactor(const Vector& b) { Vector bb = b; Vector old = blockFactor_; blockFactor_[0] *= bb[0] <= 0 ? 1 : bb[0]; blockFactor_[1] *= bb[1] <= 0 ? 1 : bb[1]; return Vector(old[0]/blockFactor_[0],old[1]/blockFactor_[1]); } Vector Context::setBlockToFactor(const Vector& b) { Vector bb = b; Vector old = blockFactor_; blockFactor_[0] = bb[0] <= 0 ? 1 : bb[0]; blockFactor_[1] = bb[1] <= 0 ? 1 : bb[1]; return Vector(old[0]/blockFactor_[0],old[1]/blockFactor_[1]); } void Context::setCrop3dParams() { // params is a BBOX in DATA coords 0-n cparams = iparams; } void Context::setCrop3dParams(double z0, double z1) { // params is a BBOX in DATA coords 0-n double zmin = z0; double zmax = z1; // always have at least 1 if (zmin+1>zmax) zmax = z0+1; // round to int cparams.set(int(zmin+.5), int(zmax+.5)); } void Context::setCrop3dParams(int z0, int z1) { // params is a BBOX in DATA coords 0-n if (z0z1) z1=z0+1; } if (z1>iparams.zmax) { z1=iparams.zmax; if (z0+1>z1) z0=z1-1; } cparams.set(z0,z1); } void Context::setIIS() { frScale.setClipMode(FrScale::USERCLIP); frScale.setMinMaxMode(FrScale::SCAN); frScale.setULow(0); frScale.setUHigh(IISSIZE); frScale.setColorScaleType(FrScale::IISSCALE); } void Context::setSecMode(FrScale::SecMode mode) { frScale.setSecMode(mode); clearHist(); } void Context::unload() { if (DebugPerf) cerr << "Context::unload()" << endl; deleteFits(bfits_); if (manageAxes_) { delete [] naxis_; deleteFits(fits); manageAxes_ =0; } bfits_ =NULL; fits =NULL; cfits =NULL; loadInit(0, Base::NOMOSAIC, Coord::WCS); mask.deleteAll(); fvcontour_.lcontourlevel().deleteAll(); auxcontours_.deleteAll(); resetSecMode(); updateClip(); } void Context::updateClip() { if (DebugPerf) cerr << "Context::updateClip()" << endl; updateClip(&frScale); } void Context::updateClip(FrScale* fr) { if (DebugPerf) cerr << "Context::updateClip(FrScale*)" << endl; // no fits if (!fits) { if (fr->clipMode() != FrScale::USERCLIP) { fr->setLow(DEFAULTLOW); fr->setHigh(DEFAULTHIGH); } else { fr->setLow(fr->ulow()); fr->setHigh(fr->uhigh()); } return; } // find min/max fr->setMin(DBL_MAX, Vector()); fr->setMax(-DBL_MAX, Vector()); fr->setLow(DBL_MAX); fr->setHigh(-DBL_MAX); switch (fr->clipScope()) { case FrScale::GLOBAL: updateClipGlobal(fr); break; case FrScale::LOCAL: updateClipLocal(fr); break; } if (DebugPerf) cerr << *fr << endl; } #ifdef __WIN32 void Context::updateClipGlobal(FrScale* fr) { FitsImage* ptr = fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updateClip(fr); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } // set min/max low/high ptr = fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { if (fr->min() > sptr->min()) fr->setMin(sptr->min(), sptr->minXY()); if (fr->max() < sptr->max()) fr->setMax(sptr->max(), sptr->maxXY()); if (fr->low() > sptr->low()) fr->setLow(sptr->low()); if (fr->high() < sptr->high()) fr->setHigh(sptr->high()); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } // sanity check if (fr->min() == DBL_MAX && fr->max() == -DBL_MAX) { fr->setMin(NAN, Vector()); fr->setMax(NAN, Vector()); } if (fr->low() == DBL_MAX && fr->high() == -DBL_MAX) { fr->setLow(NAN); fr->setHigh(NAN); } ptr = fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->setClip(fr->low(), fr->high()); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } void Context::updateClipLocal(FrScale* fr) { FitsImage* ptr = cfits; while (ptr) { ptr->updateClip(fr); ptr = ptr->nextMosaic(); } // set min/max low/high ptr = cfits; while (ptr) { if (fr->min() > ptr->min()) fr->setMin(ptr->min(), ptr->minXY()); if (fr->max() < ptr->max()) fr->setMax(ptr->max(), ptr->maxXY()); if (fr->low() > ptr->low()) fr->setLow(ptr->low()); if (fr->high() < ptr->high()) fr->setHigh(ptr->high()); ptr = ptr->nextMosaic(); } // sanity check if (fr->min() == DBL_MAX && fr->max() == -DBL_MAX) { fr->setMin(NAN, Vector()); fr->setMax(NAN, Vector()); } if (fr->low() == DBL_MAX && fr->high() == -DBL_MAX) { fr->setLow(NAN); fr->setHigh(NAN); } } #else void Context::updateClipGlobal(FrScale* fr) { if (thread_) delete [] thread_; thread_ = new pthread_t[parent_->nthreads_]; t_clip_arg* targ = new t_clip_arg[parent_->nthreads_]; int cnt =0; FitsImage* ptr = fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updateClip(fr, &thread_[cnt], &targ[cnt]); cnt++; if (cnt == parent_->nthreads_) { for (int ii=0; iinextSlice(); } ptr = ptr->nextMosaic(); } for (int ii=0; iimin() > sptr->min()) fr->setMin(sptr->min(), sptr->minXY()); if (fr->max() < sptr->max()) fr->setMax(sptr->max(), sptr->maxXY()); if (fr->low() > sptr->low()) fr->setLow(sptr->low()); if (fr->high() < sptr->high()) fr->setHigh(sptr->high()); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } // sanity check if (fr->min() == DBL_MAX && fr->max() == -DBL_MAX) { fr->setMin(NAN, Vector()); fr->setMax(NAN, Vector()); } if (fr->low() == DBL_MAX && fr->high() == -DBL_MAX) { fr->setLow(NAN); fr->setHigh(NAN); } ptr = fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->setClip(fr->low(), fr->high()); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } void Context::updateClipLocal(FrScale* fr) { if (thread_) delete [] thread_; thread_ = new pthread_t[parent_->nthreads_]; t_clip_arg* targ = new t_clip_arg[parent_->nthreads_]; int cnt =0; FitsImage* ptr = cfits; while (ptr) { ptr->updateClip(fr, &thread_[cnt], &targ[cnt]); cnt++; if (cnt == parent_->nthreads_) { for (int ii=0; iinextMosaic(); } for (int ii=0; iimin() > ptr->min()) fr->setMin(ptr->min(), ptr->minXY()); if (fr->max() < ptr->max()) fr->setMax(ptr->max(), ptr->maxXY()); if (fr->low() > ptr->low()) fr->setLow(ptr->low()); if (fr->high() < ptr->high()) fr->setHigh(ptr->high()); ptr = ptr->nextMosaic(); } // sanity check if (fr->min() == DBL_MAX && fr->max() == -DBL_MAX) { fr->setMin(NAN, Vector()); fr->setMax(NAN, Vector()); } if (fr->low() == DBL_MAX && fr->high() == -DBL_MAX) { fr->setLow(NAN); fr->setHigh(NAN); } } #endif void Context::updateContours() { fvcontour_.update(cfits); } void Context::updateContoursScale() { fvcontour_.update(cfits,&frScale); } void Context::updateContours(const Matrix& mx) { if (!cfits) return; // aux contours if (auxcontours_.head()) do auxcontours_.current()->updateCoords(mx); while (auxcontours_.next()); List& cc = fvcontour_.lcontourlevel(); if (cc.head()) do cc.current()->updateCoords(mx); while (cc.next()); } void Context::updateSlice(int id, int ss) { // ranges 1-n if (!fits) return; // check bounds if (ss<1) ss = 1; else if (ss>naxis_[id]) ss = naxis_[id]; slice_[id] = ss; int cnt =slice_[2]; for (int jj=3; jjnextSlice(); } int Context::updateClipScope(FrScale::ClipScope ss) { if (frScale.clipScope() != ss) { frScale.setClipScope(ss); return 1; } return 0; } int Context::updateClipMode(FrScale::ClipMode mm) { if (frScale.clipMode() != mm) { frScale.setClipMode(mm); return 1; } return 0; } int Context::updateClipMode(float per) { if (per == 100) return updateClipMode(FrScale::MINMAX); else { if (frScale.clipMode() != FrScale::AUTOCUT || frScale.autoCutPer() != per) { frScale.setClipMode(FrScale::AUTOCUT); frScale.setAutoCutPer(per); return 1; } } return 0; } int Context::updateMinMax(FrScale::MinMaxMode mm, int ss) { if (frScale.minmaxMode() != mm || frScale.minmaxSample() != ss) { frScale.setMinMaxMode(mm); frScale.setMinMaxSample(ss); return 1; } return 0; } // backward compatibility backup int Context::updateMinMaxMode(FrScale::MinMaxMode mm) { if (frScale.minmaxMode() != mm) { frScale.setMinMaxMode(mm); return 1; } return 0; } // backward compatibility backup int Context::updateMinMaxSample(int ss) { if (frScale.minmaxSample() != ss) { frScale.setMinMaxSample(ss); return 1; } return 0; } int Context::updateUser(float ll, float hh) { if (frScale.ulow() != ll || frScale.uhigh() != hh) { frScale.setULow(ll); frScale.setUHigh(hh); return 1; } return 0; } int Context::updateZscale(float cc, int ss, int ll) { if (frScale.zContrast() != cc || frScale.zSample() != ss || frScale.zLine() != ll) { frScale.setZContrast(cc); frScale.setZSample(ss); frScale.setZLine(ll); return 1; } return 0; } // backward compatibility backup int Context::updateZscaleContrast(float cc) { if (frScale.zContrast() != cc) { frScale.setZContrast(cc); return 1; } return 0; } // backward compatibility backup int Context::updateZscaleSample(int ss) { if (frScale.zSample() != ss) { frScale.setZSample(ss); return 1; } return 0; } // backward compatibility backup int Context::updateZscaleLine(int ll) { if (frScale.zLine() != ll) { frScale.setZLine(ll); return 1; } return 0; } int Context::updateDataSec(int ii) { if (frScale.datasec() != ii) { frScale.setDataSec(ii); return 1; } return 0; } int Context::updateExpo(double exp) { if (frScale.expo() != exp) { frScale.setExpo(exp); return 1; } return 0; } saods9/tksao/frame/context.h000644 000765 000000 00000017161 12764572005 016452 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __context_h__ #define __context_h__ #ifndef __WIN32 #include #endif #include "base.h" #include "colorscale.h" #include "coord.h" #include "frscale.h" #include "list.h" #include "fitsmask.h" #include "fitsimage.h" #include "head.h" class FVContour; class FitsZBound { public: int zmin; int zmax; public: FitsZBound() {zmin= zmax=0;} FitsZBound(int z0, int z1) {zmin=z0; zmax=z1;} FitsZBound(const FitsZBound &bb) {zmin=bb.zmin; zmax=bb.zmax;} void set(int z0, int z1) {zmin=z0; zmax=z1;} }; ostream& operator<<(ostream&, const FitsZBound&); class Context { public: enum SmoothFunction {BOXCAR, TOPHAT, GAUSSIAN}; protected: Base* parent_; FrScale frScale; int shareWCS_; int manageAxes_; int axesOrder_; int baxis_[FTY_MAXAXES]; // the first two are ignored int* naxis_; // the first two are ignored int slice_[FTY_MAXAXES]; // the first two are ignored int mosaicCount_; Base::MosaicType mosaicType; Coord::CoordSystem mosaicSystem; FitsHist::Function binFunction_; Vector binFactor_; int binBufferSize_; int binDepth_; Vector blockFactor_; int doSmooth_; SmoothFunction smoothFunction_; int smoothRadius_; FitsZBound iparams; // image bbox FitsZBound cparams; // crop bbox FVContour fvcontour_; List auxcontours_; protected: void binFinish(); int blockMask(); int nhdu(); void loadFinishMask(); void loadFinishMosaic(FitsImage*); int loadFinishMosaicMask(); int processMosaicKeywords(FitsImage*); void updateClip(FrScale*); void updateClipGlobal(FrScale*); void updateClipLocal(FrScale*); void contourList(ostream&, Coord::CoordSystem, Coord::SkyFrame, List&); void reorderAxis(char*, char**, int, int, int, size_t); #ifndef __WIN32 void reorderThread(void*, char*, void* (void*), int*); #endif #ifndef __WIN32 pthread_t* thread_; #endif public: FitsImage* bfits_; FitsImage* fits; FitsImage* cfits; List mask; public: Context(); ~Context(); FVContour& fvcontour() {return fvcontour_;} List& auxcontours() {return auxcontours_;} void analysis(); int axesOrder() {return axesOrder_;} Matrix bin(const Vector&); Matrix binCenter(); Matrix binCursor(); int block(); void bltHist(char*, char*, int); int calcSlice(); void contourAppendAux(ContourLevel*); void contourCreateFV(const char* color, int width, int dash, FVContour::Method method, int numlevel, int smooth, FrScale::ColorScaleType colorScaleType, float expo, float clipMode, Vector limits, const char* level); void contourDeleteFV(); void contourDeleteAux(); void contourListFV(ostream&, Coord::CoordSystem, Coord::SkyFrame); void contourListAux(ostream&, Coord::CoordSystem, Coord::SkyFrame); void contourLoadAux(istream&); void contourLoadAux(istream&, const char*, int, int); void contourLoadAux(istream&, Coord::CoordSystem, Coord::SkyFrame, const char*, int, int); void contourPS(Widget::PSColorSpace cs); void contourX11(Pixmap, Coord::InternalSystem, int, int); #ifdef MAC_OSX_TK void contourMacOSX(); #endif #ifdef __WIN32 void contourWin32(); #endif void deleteFits(FitsImage*); int fitsCount(); Vector getClip(FrScale::ClipMode, float); Vector getClip(); FitsZBound* getDataParams(FrScale::SecMode); // return bbox in IMAGE Vector getMinMax(); int hasContour() {return !fvcontour_.isEmpty();} int hasContourAux() {return !auxcontours_.isEmpty();} double* histequ() {return frScale.histequ(fits);} Coord::Orientation IRAFOrientation(Coord::Orientation oo) {return parent_->IRAFOrientation(oo);} int isMosaic() {return mosaicCount_>1 ? 1 : 0;} int isCube() {return nhdu()>1 ? 1 : 0;} int load(Base::MemType, const char*, FitsImage*, Base::LayerType); int loadExtCube(Base::MemType, const char*, FitsImage*); int loadSlice(Base::MemType, const char*, FitsImage*); int loadMosaic(Base::MemType, const char*, FitsImage*, Base::LayerType, Base::MosaicType, Coord::CoordSystem); int loadMosaicImage(Base::MemType, const char*, FitsImage*, Base::LayerType, Base::MosaicType, Coord::CoordSystem); int loadMosaicWFPC2(Base::MemType, const char*, FitsImage*); void loadInit(int, Base::MosaicType, Coord::CoordSystem); int loadFinish(); int naxis(int ii) {return naxis_[ii];} int naxes(); int nthreads() {return parent_->nthreads_;} void parent(Base* pp) {parent_ = pp;} void reorderAxes(); void reorderWCSi(FitsHead*, char*, int, char); void reorderWCSij(FitsHead*, char*, int, char); void resetSecMode(); int slice(int ii) {return slice_[ii];} void setAxesOrder(int); void setBinFunction(FitsHist::Function f) {binFunction_ = f;} void setBinFactor(const Vector&); void setBinToFactor(const Vector&); void setBinBufferSize(int s) {binBufferSize_ = s;} void setBinDepth(int d) {binDepth_ = d < 1 ? 1 : d;} FitsHist::Function binFunction() {return binFunction_;} Vector binFactor() {return binFactor_;} int binBufferSize() {return binBufferSize_;} int binDepth() {return binDepth_;} Vector setBlockFactor(const Vector&); Vector setBlockToFactor(const Vector&); const Vector& blockFactor() {return blockFactor_;} void setCrop3dParams(); void setCrop3dParams(int,int); void setCrop3dParams(double, double); void setIIS(); void resetIIS(); void setSmooth(int ss) {doSmooth_ =ss;} void setSmooth(int ss, SmoothFunction ff, int rr) {doSmooth_=ss; smoothFunction_=ff; smoothRadius_=rr;} int hasSmooth() {return doSmooth_;} SmoothFunction smoothFunction() {return smoothFunction_;} int smoothRadius() {return smoothRadius_;} int shareWCS() {return shareWCS_;} void unload(); void updateBinFileNames(); void clearHist(); void updateClip(); void updateContours(); void updateContours(const Matrix&); void updateContoursScale(); void updateSlice(int, int); int updateClipScope(FrScale::ClipScope); int updateClipMode(FrScale::ClipMode); int updateClipMode(float); int updateMinMax(FrScale::MinMaxMode, int); // backward compatibility backup int updateMinMaxMode(FrScale::MinMaxMode); // backward compatibility backup int updateMinMaxSample(int); int updateUser(float,float); int updateZscale(float, int, int); // backward compatibility backup int updateZscaleContrast(float); // backward compatibility backup int updateZscaleSample(int); // backward compatibility backup int updateZscaleLine(int); int updateDataSec(int); int updateExpo(double); FrScale::ColorScaleType colorScaleType() {return frScale.colorScaleType();} FrScale::ClipScope clipScope() {return frScale.clipScope();} FrScale::ClipMode clipMode() {return frScale.clipMode();} int datasec() {return frScale.datasec();} float expo() {return frScale.expo();} double low() {return frScale.low();} double high() {return frScale.high();} int minmaxSample() {return frScale.minmaxSample();} FrScale::MinMaxMode minmaxMode() {return frScale.minmaxMode();} FrScale::SecMode secMode() {return frScale.secMode();} float autoCutPer() {return frScale.autoCutPer();} float zContrast() {return frScale.zContrast();} int zSample() {return frScale.zSample();} int zLine() {return frScale.zLine();} Vector clipUser() {return Vector(frScale.ulow(), frScale.uhigh());} void setClipScope(FrScale::ClipScope ss) {frScale.setClipScope(ss);} void setColorScaleType(FrScale::ColorScaleType tt) {frScale.setColorScaleType(tt);} void setSecMode(FrScale::SecMode); }; #endif saods9/tksao/frame/contour.C000644 000765 000000 00000014746 12766032036 016415 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "contour.h" #include "base.h" #include "context.h" // ContourLevel ContourLevel::ContourLevel(Base* pp, double lev, const char* cc, int ww, int dd, int* dl) { parent_ = pp; gc_ = parent_->contourGC; level_ = lev; colorName_ = dupstr(cc); color_ = parent_->getColor(colorName_); lineWidth_ = ww; dash_ = dd; dlist_[0] = dl[0]; dlist_[1] = dl[1]; previous_ = NULL; next_ = NULL; } ContourLevel::~ContourLevel() { if (colorName_) delete [] colorName_; } void ContourLevel::list(ostream& str, FitsImage* fits, Coord::CoordSystem sys, Coord::SkyFrame sky) { if (lcontour_.head()) { str << "level=" << level_ << ' '; if (strncmp("green", colorName_, 5) || dash_ != 0 || dlist_[0] != 8 || dlist_[1] != 3 || lineWidth_ != 1) { if (strncmp("green", colorName_, 5)) str << "color=" << colorName_ << ' '; if (lineWidth_ != 1) str << "width=" << lineWidth_ << ' '; if (dash_ != 0) str << "dash=" << dash_ << ' '; if (dlist_[0] != 8 || dlist_[1] != 3) str << "dashlist=" << dlist_[0] << ' ' << dlist_[1] << ' '; } str << endl; do lcontour_.current()->list(str, fits, sys, sky); while (lcontour_.next()); } } void ContourLevel::render(Pixmap pmap, Coord::InternalSystem sys, int width, int height) { if (lcontour_.head()) { do lcontour_.current()->render(pmap, sys, width, height); while (lcontour_.next()); } } void ContourLevel::ps(int mode) { if (lcontour_.head()) { do lcontour_.current()->ps(mode); while (lcontour_.next()); } } void ContourLevel::updateCoords(const Matrix& mx) { if (lcontour_.head()) { do lcontour_.current()->updateCoords(mx); while (lcontour_.next()); } } void ContourLevel::setColor(const char* clr) { if (colorName_) delete [] colorName_; colorName_ = dupstr(clr); color_ = parent_->getColor(colorName_); } #ifdef MAC_OSX_TK void ContourLevel::macosx() { if (lcontour_.head()) { do lcontour_.current()->macosx(); while (lcontour_.next()); } } #endif #ifdef __WIN32 void ContourLevel::win32() { if (lcontour_.head()) { do lcontour_.current()->win32(); while (lcontour_.next()); } } #endif // Contour Contour::Contour(ContourLevel* cc) { parent_ = cc; base_ = cc->parent_; previous_ = NULL; next_ = NULL; } Contour::~Contour() { } void Contour::list(ostream& str, FitsImage* fits, Coord::CoordSystem sys, Coord::SkyFrame sky) { if (lvertex_.head()) str << '(' << endl; do { str << ' '; fits->listFromRef(str, lvertex_.current()->vector, sys, sky, Coord::DEGREES); str << endl; } while (lvertex_.next()); str << ')' << endl; } void Contour::render(Pixmap pmap, Coord::InternalSystem sys, int width, int height) { if (lvertex_.head()) { XSetForeground(base_->display, parent_->gc_, parent_->color_); int ww = parent_->lineWidth_>=1 ? parent_->lineWidth_ : 1; if (!parent_->dash_) XSetLineAttributes(base_->display, parent_->gc_, ww, LineSolid, CapButt, JoinMiter); else { char dl[2]; dl[0] = parent_->dlist_[0]; dl[1] = parent_->dlist_[1]; XSetDashes(base_->display, parent_->gc_, 0, dl, 2); XSetLineAttributes(base_->display, parent_->gc_, ww, LineOnOffDash, CapButt, JoinMiter); } BBox bb = BBox(0, 0, width, height); Vector u1 = lvertex_.current()->vector; while (lvertex_.next()) { Vector u2 = lvertex_.current()->vector; Vector v1 = base_->mapFromRef(u1,sys); Vector v2 = base_->mapFromRef(u2,sys); if (bb.isIn(v1) || bb.isIn(v2)) XDrawLine(base_->display, pmap, parent_->gc_, (int)v1[0], (int)v1[1], (int)v2[0], (int)v2[1]); u1 = u2; } } } void Contour::ps(int mode) { if (!lvertex_.head()) return; ostringstream str; switch ((Widget::PSColorSpace)mode) { case Widget::BW: case Widget::GRAY: psColorGray(base_->getXColor(parent_->colorName_), str); str << " setgray"; break; case Widget::RGB: psColorRGB(base_->getXColor(parent_->colorName_), str); str << " setrgbcolor"; break; case Widget::CMYK: psColorCMYK(base_->getXColor(parent_->colorName_), str); str << " setcmykcolor"; break; } str << endl; if (!parent_->dash_) str << parent_->lineWidth_ << " setlinewidth" << endl << "[] 0 setdash"; else { str << parent_->lineWidth_ << " setlinewidth" << endl << '[' << parent_->dlist_[0] << ' ' << parent_->dlist_[1] << "] 0 setdash"; } str << endl; Vector v1 = base_->mapFromRef(lvertex_.current()->vector,Coord::CANVAS); str << "newpath " << endl << v1.TkCanvasPs(base_->canvas) << " moveto" << endl; while (lvertex_.next()) { Vector vv = base_->mapFromRef(lvertex_.current()->vector,Coord::CANVAS); str << vv.TkCanvasPs(base_->canvas) << " lineto" << endl; } str << "stroke" << endl << ends; Tcl_AppendResult(base_->interp, str.str().c_str(), NULL); } void Contour::updateCoords(const Matrix& mx) { if (lvertex_.head()) { do { Vector& vv = lvertex_.current()->vector; vv *= mx; } while (lvertex_.next()); } } #ifdef MAC_OSX_TK void Contour::macosx() { if (lvertex_.head()) { macosxColor(base_->getXColor(parent_->colorName_)); macosxWidth(parent_->lineWidth_); if (parent_->dash_) { float dl[2]; dl[0] = parent_->dlist_[0]; dl[1] = parent_->dlist_[1]; macosxDash(dl,2); } else macosxDash(NULL,0); Vector u1 = lvertex_.current()->vector; while (lvertex_.next()) { Vector u2 = lvertex_.current()->vector; Vector v1 = base_->mapFromRef(u1,Coord::CANVAS); Vector v2 = base_->mapFromRef(u2,Coord::CANVAS); macosxDrawLine(v1,v2); u1 = u2; } } } #endif #ifdef __WIN32 void Contour::win32() { if (lvertex_.head()) { win32Color(base_->getXColor(parent_->colorName_)); win32Width(parent_->lineWidth_); if (parent_->dash_) { float dl[2]; dl[0] = parent_->dlist_[0]; dl[1] = parent_->dlist_[1]; win32Dash(dl,2); } else win32Dash(NULL,0); Vector u1 = lvertex_.current()->vector; while (lvertex_.next()) { Vector u2 = lvertex_.current()->vector; Vector v1 = base_->mapFromRef(u1,Coord::CANVAS); Vector v2 = base_->mapFromRef(u2,Coord::CANVAS); win32DrawLine(v1,v2); u1 = u2; } } } #endif saods9/tksao/frame/contour.h000644 000765 000000 00000004222 12762077401 016447 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __contour_h__ #define __contour_h__ #include #include #include "vector.h" #include "vector3d.h" #include "list.h" #include "coord.h" class FitsImage; class Base; class Contour; class ContourLevel { friend class Contour; protected: Base* parent_; List lcontour_; double level_; char* colorName_; unsigned long color_; int lineWidth_; int dash_; int dlist_[2]; GC gc_; ContourLevel* previous_; ContourLevel* next_; public: ContourLevel(Base*, double, const char*, int, int, int*); virtual ~ContourLevel(); List& lcontour() {return lcontour_;} void list(ostream& str, FitsImage*, Coord::CoordSystem, Coord::SkyFrame); void render(Pixmap, Coord::InternalSystem, int, int); void ps(int); void updateCoords(const Matrix&); #ifdef MAC_OSX_TK void macosx(); #endif #ifdef __WIN32 void win32(); #endif double level() {return level_;} const char* colorName() {return colorName_;} void setColor(const char*); int dash() {return dash_;} void setDash(int dd) {dash_ =dd;} int lineWidth() {return lineWidth_;} void setLineWidth(int ww) {lineWidth_ =ww;} ContourLevel* previous() {return previous_;} void setPrevious(ContourLevel* m) {previous_ = m;} ContourLevel* next() {return next_;} void setNext(ContourLevel* m) {next_ = m;} }; class Contour { protected: ContourLevel* parent_; Base* base_; List lvertex_; Contour* previous_; Contour* next_; public: Contour(ContourLevel*); ~Contour(); List& lvertex() {return lvertex_;} void list(ostream& str, FitsImage*, Coord::CoordSystem, Coord::SkyFrame); void render(Pixmap, Coord::InternalSystem, int, int); void ps(int); void updateCoords(const Matrix&); #ifdef MAC_OSX_TK void macosx(); #endif #ifdef __WIN32 void win32(); #endif Contour* previous() {return previous_;} void setPrevious(Contour* m) {previous_ = m;} Contour* next() {return next_;} void setNext(Contour* m) {next_ = m;} }; #endif saods9/tksao/frame/contourlex.C000644 000765 000000 00000216712 12762337270 017127 0ustar00joyewheel000000 000000 #line 2 "frame/contourlex.C" #line 4 "frame/contourlex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer ctFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *ctalloc (yy_size_t ); void *ctrealloc (void *,yy_size_t ); void ctfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 89 #define YY_END_OF_BUFFER 90 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[283] = { 0, 0, 0, 2, 2, 90, 88, 84, 87, 88, 88, 88, 88, 88, 88, 62, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 24, 83, 83, 83, 83, 83, 83, 60, 88, 88, 2, 1, 84, 85, 0, 80, 0, 0, 81, 0, 62, 64, 63, 62, 0, 83, 65, 83, 83, 69, 67, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 25, 83, 27, 83, 83, 83, 83, 83, 83, 83, 86, 0, 82, 2, 0, 65, 0, 0, 69, 67, 66, 0, 70, 68, 65, 0, 83, 0, 63, 83, 83, 83, 83, 83, 83, 83, 83, 83, 12, 14, 83, 83, 83, 83, 83, 83, 83, 83, 26, 83, 83, 83, 83, 32, 83, 61, 77, 0, 63, 0, 0, 64, 0, 83, 83, 83, 83, 83, 6, 83, 83, 83, 83, 0, 83, 83, 83, 18, 83, 83, 83, 83, 83, 83, 30, 83, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 83, 0, 0, 0, 0, 71, 0, 83, 0, 83, 83, 4, 5, 83, 8, 83, 83, 11, 0, 83, 83, 83, 19, 20, 21, 83, 83, 83, 83, 59, 0, 0, 0, 72, 71, 0, 0, 75, 0, 0, 73, 83, 83, 83, 83, 0, 83, 16, 83, 22, 23, 83, 83, 83, 78, 75, 73, 76, 74, 83, 83, 83, 83, 0, 83, 83, 83, 83, 31, 0, 83, 7, 9, 10, 13, 15, 83, 28, 83, 0, 3, 83, 83, 0, 83, 83, 0, 83, 83, 0, 83, 83, 79, 17, 29, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 5, 6, 1, 1, 1, 7, 1, 1, 1, 8, 1, 9, 10, 1, 11, 12, 13, 14, 15, 16, 14, 14, 14, 17, 18, 1, 1, 1, 1, 1, 1, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 1, 45, 1, 1, 1, 1, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 1, 73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[74] = { 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1 } ; static yyconst flex_int16_t yy_base[301] = { 0, 0, 0, 330, 327, 323, 1369, 306, 1369, 303, 280, 0, 265, 64, 71, 79, 89, 98, 93, 99, 94, 117, 120, 133, 113, 142, 144, 147, 149, 154, 158, 169, 170, 171, 175, 180, 66, 197, 0, 1369, 266, 1369, 253, 1369, 0, 250, 1369, 203, 226, 277, 328, 380, 250, 181, 302, 434, 353, 182, 194, 216, 214, 241, 237, 287, 292, 318, 268, 343, 236, 369, 311, 263, 370, 391, 395, 285, 414, 314, 394, 401, 400, 443, 418, 336, 449, 1369, 183, 1369, 0, 0, 457, 476, 483, 1369, 1369, 1369, 503, 1369, 1369, 1369, 510, 519, 527, 541, 568, 557, 405, 555, 550, 551, 579, 582, 554, 407, 366, 552, 586, 583, 595, 598, 465, 601, 602, 491, 612, 617, 621, 624, 678, 556, 492, 0, 739, 666, 746, 767, 774, 795, 803, 812, 821, 635, 822, 823, 644, 637, 825, 824, 82, 754, 638, 827, 650, 826, 654, 836, 755, 845, 846, 656, 851, 758, 782, 785, 847, 852, 861, 863, 873, 874, 878, 879, 880, 884, 885, 890, 894, 896, 897, 900, 901, 903, 906, 907, 910, 912, 913, 916, 0, 933, 941, 924, 949, 959, 967, 975, 1022, 990, 983, 984, 988, 985, 987, 989, 999, 88, 1006, 1000, 1003, 1001, 1002, 1033, 1037, 1040, 1038, 1050, 1054, 0, 1064, 1092, 1100, 1107, 1120, 1127, 1074, 1134, 1162, 1075, 1142, 1143, 1148, 1175, 236, 1176, 1077, 1144, 1081, 1145, 1149, 1187, 1172, 0, 1369, 1369, 1369, 1369, 1191, 1200, 1201, 1202, 172, 1203, 1217, 1218, 1222, 1207, 0, 1224, 1235, 1236, 1239, 1369, 1245, 1249, 1248, 1251, 0, 1262, 1267, 1263, 0, 1268, 1272, 0, 1273, 1278, 0, 1294, 1298, 1369, 1284, 1289, 1369, 1346, 1350, 224, 1354, 1356, 1360, 1364, 223, 221, 206, 203, 171, 165, 154, 133, 120, 115, 96 } ; static yyconst flex_int16_t yy_def[301] = { 0, 282, 1, 283, 283, 282, 282, 282, 282, 282, 284, 285, 286, 282, 282, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 282, 288, 289, 282, 282, 282, 284, 282, 290, 286, 282, 282, 282, 282, 282, 287, 282, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 282, 288, 282, 289, 291, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 287, 282, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 282, 287, 287, 292, 282, 282, 282, 282, 282, 282, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 282, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 293, 282, 282, 282, 282, 282, 287, 282, 287, 287, 287, 287, 287, 287, 287, 287, 287, 282, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 294, 282, 282, 282, 282, 282, 282, 287, 282, 282, 287, 287, 287, 287, 287, 282, 287, 287, 287, 287, 287, 287, 287, 287, 295, 282, 282, 282, 282, 287, 287, 287, 287, 282, 287, 287, 287, 287, 287, 296, 287, 287, 287, 287, 282, 287, 287, 287, 287, 297, 287, 287, 287, 298, 287, 287, 299, 287, 287, 300, 287, 287, 282, 287, 287, 0, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282 } ; static yyconst flex_int16_t yy_nxt[1443] = { 0, 6, 7, 8, 9, 10, 11, 12, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 6, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 26, 28, 29, 30, 26, 26, 31, 32, 26, 33, 34, 26, 35, 26, 36, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 26, 28, 29, 30, 26, 26, 31, 32, 26, 33, 34, 26, 35, 26, 37, 6, 47, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 50, 51, 51, 51, 51, 51, 51, 51, 52, 85, 282, 279, 54, 55, 282, 282, 56, 57, 282, 282, 282, 60, 282, 282, 58, 205, 64, 282, 282, 62, 276, 59, 232, 63, 282, 273, 85, 61, 282, 54, 55, 282, 282, 56, 57, 70, 282, 65, 270, 282, 67, 58, 205, 64, 282, 71, 62, 66, 59, 232, 63, 68, 282, 282, 61, 282, 72, 69, 282, 266, 282, 282, 70, 282, 65, 282, 282, 67, 282, 282, 256, 73, 71, 282, 66, 74, 241, 282, 68, 76, 282, 282, 282, 75, 69, 78, 282, 77, 282, 282, 282, 282, 282, 282, 282, 81, 261, 82, 73, 282, 282, 282, 74, 83, 84, 282, 76, 80, 217, 79, 75, 188, 78, 282, 77, 49, 49, 49, 49, 49, 49, 49, 81, 261, 82, 282, 131, 282, 89, 44, 83, 84, 106, 282, 80, 282, 79, 50, 48, 48, 48, 48, 48, 48, 48, 52, 250, 282, 282, 90, 91, 105, 282, 92, 93, 282, 282, 87, 46, 43, 282, 94, 100, 100, 100, 100, 100, 100, 100, 40, 116, 87, 107, 46, 282, 108, 90, 91, 105, 282, 92, 93, 282, 119, 113, 114, 43, 282, 94, 49, 49, 49, 49, 49, 49, 49, 282, 116, 282, 107, 95, 96, 108, 282, 282, 97, 282, 41, 109, 40, 119, 282, 98, 282, 101, 101, 101, 101, 101, 101, 101, 282, 282, 111, 282, 282, 110, 95, 96, 282, 282, 39, 97, 282, 39, 109, 282, 282, 282, 98, 49, 49, 49, 49, 49, 49, 49, 282, 118, 112, 111, 99, 91, 110, 282, 282, 93, 282, 282, 129, 282, 282, 282, 94, 282, 104, 104, 104, 104, 104, 104, 104, 282, 282, 115, 118, 112, 282, 99, 91, 282, 282, 120, 93, 282, 282, 129, 282, 282, 282, 94, 50, 51, 51, 51, 51, 51, 51, 51, 52, 117, 115, 282, 54, 55, 282, 282, 56, 57, 282, 282, 282, 282, 282, 282, 58, 282, 148, 282, 282, 282, 282, 141, 282, 282, 282, 282, 117, 122, 282, 54, 55, 121, 282, 56, 57, 125, 282, 124, 123, 126, 282, 58, 102, 102, 282, 103, 103, 103, 103, 103, 103, 103, 282, 282, 122, 128, 282, 282, 121, 282, 282, 282, 125, 282, 124, 123, 126, 282, 132, 132, 132, 132, 132, 132, 132, 282, 154, 282, 282, 127, 282, 282, 128, 282, 102, 102, 130, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 282, 282, 282, 282, 282, 127, 282, 282, 282, 282, 135, 135, 130, 136, 136, 136, 136, 136, 136, 136, 100, 100, 100, 100, 100, 100, 100, 137, 282, 101, 101, 101, 101, 101, 101, 101, 282, 133, 133, 133, 133, 133, 133, 133, 282, 282, 282, 282, 282, 138, 282, 103, 103, 103, 103, 103, 103, 103, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 149, 282, 282, 282, 282, 143, 138, 282, 104, 104, 104, 104, 104, 104, 104, 282, 140, 142, 282, 144, 147, 282, 282, 187, 282, 282, 282, 149, 139, 282, 282, 145, 143, 282, 282, 150, 282, 282, 146, 151, 282, 282, 282, 140, 142, 282, 144, 147, 282, 282, 187, 282, 153, 155, 156, 139, 282, 282, 145, 282, 282, 152, 150, 282, 282, 146, 151, 282, 282, 158, 282, 282, 282, 159, 282, 198, 282, 282, 157, 153, 155, 156, 282, 282, 282, 282, 207, 202, 152, 282, 160, 282, 282, 282, 210, 282, 158, 282, 201, 282, 159, 282, 282, 282, 282, 157, 133, 133, 133, 133, 133, 133, 133, 207, 202, 282, 282, 160, 53, 53, 53, 53, 53, 53, 53, 201, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 282, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 132, 132, 132, 132, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 282, 282, 282, 282, 282, 282, 189, 282, 282, 282, 212, 206, 282, 190, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 282, 282, 282, 282, 282, 189, 282, 282, 282, 212, 206, 282, 190, 191, 192, 192, 192, 192, 192, 192, 192, 193, 194, 194, 194, 194, 194, 194, 194, 282, 195, 196, 196, 196, 196, 196, 196, 196, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 204, 197, 209, 282, 282, 282, 200, 282, 282, 282, 282, 199, 203, 208, 282, 282, 282, 282, 282, 211, 282, 282, 282, 282, 282, 213, 282, 204, 197, 209, 282, 215, 282, 200, 282, 214, 282, 282, 199, 203, 208, 282, 282, 282, 282, 282, 211, 282, 282, 282, 282, 282, 213, 282, 282, 282, 282, 282, 215, 282, 282, 282, 214, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 220, 220, 220, 220, 220, 220, 220, 216, 193, 218, 218, 218, 218, 218, 218, 218, 195, 219, 219, 219, 219, 219, 219, 219, 221, 192, 192, 192, 192, 192, 192, 192, 282, 282, 216, 222, 222, 222, 222, 222, 222, 222, 223, 194, 194, 194, 194, 194, 194, 194, 282, 225, 225, 225, 225, 225, 225, 225, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 224, 282, 282, 282, 282, 282, 282, 282, 282, 282, 228, 229, 282, 282, 282, 282, 282, 282, 282, 282, 282, 230, 235, 231, 282, 282, 234, 224, 226, 196, 196, 196, 196, 196, 196, 196, 282, 228, 229, 282, 233, 282, 282, 282, 282, 282, 282, 282, 230, 235, 231, 282, 282, 234, 282, 227, 282, 238, 282, 239, 282, 282, 282, 282, 282, 282, 236, 233, 282, 237, 223, 218, 218, 218, 218, 218, 218, 218, 282, 240, 282, 282, 227, 282, 238, 282, 239, 282, 282, 282, 282, 282, 282, 236, 282, 282, 237, 242, 226, 219, 219, 219, 219, 219, 219, 219, 240, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 282, 282, 282, 242, 243, 282, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 225, 225, 225, 225, 225, 225, 225, 282, 282, 282, 282, 243, 244, 282, 282, 282, 282, 282, 282, 242, 252, 282, 282, 253, 246, 282, 245, 282, 225, 225, 225, 225, 225, 225, 225, 247, 248, 282, 282, 244, 282, 282, 282, 282, 282, 282, 242, 252, 282, 282, 253, 246, 282, 245, 243, 282, 282, 249, 251, 255, 282, 254, 247, 248, 282, 282, 282, 282, 282, 257, 282, 282, 282, 282, 282, 282, 282, 282, 260, 262, 282, 243, 282, 282, 249, 251, 255, 282, 254, 282, 282, 282, 259, 258, 282, 282, 257, 282, 282, 282, 282, 282, 263, 264, 282, 260, 262, 265, 282, 282, 282, 282, 282, 282, 282, 267, 282, 282, 282, 259, 258, 282, 282, 282, 282, 269, 282, 282, 282, 263, 264, 268, 282, 282, 265, 282, 282, 282, 282, 272, 282, 282, 267, 282, 282, 282, 282, 282, 282, 282, 282, 282, 269, 282, 282, 277, 271, 282, 268, 282, 278, 274, 282, 282, 282, 275, 272, 282, 282, 282, 280, 282, 282, 282, 281, 282, 282, 282, 282, 282, 282, 282, 277, 271, 282, 282, 282, 278, 274, 282, 282, 282, 275, 282, 282, 282, 282, 280, 282, 282, 282, 281, 38, 38, 38, 38, 42, 282, 42, 42, 45, 282, 45, 45, 53, 53, 86, 282, 86, 86, 88, 282, 88, 88, 5, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282 } ; static yyconst flex_int16_t yy_chk[1443] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 36, 16, 300, 15, 15, 18, 20, 15, 15, 16, 17, 19, 17, 18, 20, 15, 148, 20, 17, 19, 19, 299, 16, 205, 19, 24, 298, 36, 18, 21, 15, 15, 22, 24, 15, 15, 24, 21, 21, 297, 22, 22, 15, 148, 20, 23, 24, 19, 21, 16, 205, 19, 22, 23, 25, 18, 26, 25, 23, 27, 296, 28, 25, 24, 26, 21, 29, 27, 22, 28, 30, 295, 27, 24, 29, 21, 27, 294, 30, 22, 29, 31, 32, 33, 28, 23, 30, 34, 29, 31, 32, 33, 35, 53, 57, 34, 33, 250, 34, 27, 35, 53, 57, 27, 34, 35, 58, 29, 32, 293, 31, 28, 292, 30, 58, 29, 47, 47, 47, 47, 47, 47, 47, 33, 250, 34, 60, 291, 59, 290, 285, 34, 35, 60, 60, 32, 59, 31, 48, 48, 48, 48, 48, 48, 48, 48, 48, 232, 68, 62, 48, 48, 59, 61, 48, 48, 68, 62, 86, 45, 42, 61, 48, 52, 52, 52, 52, 52, 52, 52, 40, 68, 37, 61, 12, 71, 62, 48, 48, 59, 66, 48, 48, 71, 71, 66, 66, 10, 66, 48, 49, 49, 49, 49, 49, 49, 49, 75, 68, 63, 61, 49, 49, 62, 64, 75, 49, 63, 9, 63, 7, 71, 64, 49, 54, 54, 54, 54, 54, 54, 54, 54, 54, 70, 64, 5, 77, 63, 49, 49, 65, 70, 4, 49, 77, 3, 63, 0, 65, 0, 49, 50, 50, 50, 50, 50, 50, 50, 83, 70, 65, 64, 50, 50, 63, 67, 83, 50, 0, 0, 83, 0, 0, 67, 50, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 67, 70, 65, 114, 50, 50, 69, 72, 72, 50, 0, 114, 83, 0, 69, 72, 50, 51, 51, 51, 51, 51, 51, 51, 51, 51, 69, 67, 73, 51, 51, 78, 74, 51, 51, 0, 73, 80, 79, 78, 74, 51, 106, 113, 113, 80, 79, 0, 106, 0, 106, 76, 113, 69, 74, 82, 51, 51, 73, 76, 51, 51, 79, 82, 78, 76, 80, 0, 51, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 81, 74, 82, 0, 0, 73, 84, 0, 81, 79, 0, 78, 76, 80, 84, 90, 90, 90, 90, 90, 90, 90, 120, 120, 0, 0, 81, 0, 0, 82, 120, 91, 91, 84, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 123, 130, 0, 0, 0, 81, 0, 0, 123, 130, 96, 96, 84, 96, 96, 96, 96, 96, 96, 96, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 101, 103, 103, 103, 103, 103, 103, 103, 103, 103, 108, 109, 115, 0, 112, 107, 129, 105, 108, 109, 115, 115, 112, 107, 129, 105, 108, 101, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 107, 110, 109, 112, 111, 117, 129, 0, 116, 110, 115, 104, 111, 117, 110, 108, 116, 118, 116, 0, 119, 111, 117, 121, 122, 118, 105, 107, 119, 109, 112, 121, 122, 129, 124, 119, 121, 122, 104, 125, 0, 110, 124, 126, 118, 116, 127, 125, 111, 117, 0, 126, 125, 0, 127, 0, 126, 141, 141, 145, 150, 124, 119, 121, 122, 141, 144, 145, 150, 150, 145, 118, 152, 127, 144, 0, 154, 154, 159, 125, 152, 144, 0, 126, 154, 0, 159, 0, 124, 133, 133, 133, 133, 133, 133, 133, 150, 145, 0, 0, 127, 128, 128, 128, 128, 128, 128, 128, 144, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 132, 132, 132, 132, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 149, 156, 0, 0, 161, 0, 132, 0, 149, 156, 156, 149, 161, 134, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 162, 0, 0, 163, 0, 132, 0, 0, 162, 156, 149, 163, 134, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 142, 143, 147, 146, 153, 151, 0, 140, 142, 143, 147, 146, 153, 151, 155, 147, 140, 153, 0, 0, 0, 143, 155, 157, 158, 164, 142, 146, 151, 160, 165, 157, 158, 164, 155, 0, 0, 160, 165, 166, 157, 167, 147, 140, 153, 0, 160, 166, 143, 167, 158, 168, 169, 142, 146, 151, 170, 171, 172, 168, 169, 155, 173, 174, 170, 171, 172, 157, 175, 0, 173, 174, 176, 160, 177, 178, 175, 158, 179, 180, 176, 181, 177, 178, 182, 183, 179, 180, 184, 181, 185, 186, 182, 183, 187, 0, 184, 0, 185, 186, 0, 0, 187, 191, 191, 191, 191, 191, 191, 191, 187, 189, 189, 189, 189, 189, 189, 189, 189, 190, 190, 190, 190, 190, 190, 190, 190, 192, 192, 192, 192, 192, 192, 192, 192, 0, 0, 187, 193, 193, 193, 193, 193, 193, 193, 194, 194, 194, 194, 194, 194, 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, 198, 199, 201, 0, 202, 200, 203, 197, 198, 199, 201, 194, 202, 200, 203, 197, 204, 207, 209, 210, 208, 197, 200, 206, 204, 207, 209, 210, 208, 0, 0, 206, 202, 208, 203, 0, 0, 207, 194, 196, 196, 196, 196, 196, 196, 196, 196, 196, 197, 200, 211, 206, 0, 0, 212, 214, 0, 213, 211, 202, 208, 203, 212, 214, 207, 213, 196, 215, 213, 0, 214, 216, 0, 0, 0, 215, 0, 211, 206, 216, 212, 218, 218, 218, 218, 218, 218, 218, 218, 0, 215, 224, 227, 196, 234, 213, 0, 214, 236, 224, 227, 0, 234, 0, 211, 0, 236, 212, 218, 219, 219, 219, 219, 219, 219, 219, 219, 215, 220, 220, 220, 220, 220, 220, 220, 221, 221, 221, 221, 221, 221, 221, 0, 0, 0, 218, 219, 0, 222, 222, 222, 222, 222, 222, 222, 223, 223, 223, 223, 223, 223, 223, 225, 225, 225, 225, 225, 225, 225, 228, 229, 235, 237, 219, 222, 230, 238, 228, 229, 235, 237, 223, 235, 230, 238, 238, 228, 0, 225, 0, 226, 226, 226, 226, 226, 226, 226, 229, 230, 240, 0, 222, 231, 233, 0, 0, 0, 240, 223, 235, 231, 233, 238, 228, 239, 225, 226, 0, 246, 231, 233, 240, 239, 239, 229, 230, 246, 247, 248, 249, 251, 246, 0, 0, 255, 247, 248, 249, 251, 0, 249, 251, 255, 226, 252, 253, 231, 233, 240, 254, 239, 257, 252, 253, 248, 247, 0, 254, 246, 257, 0, 0, 258, 259, 252, 253, 260, 249, 251, 254, 258, 259, 262, 0, 260, 264, 263, 257, 265, 0, 262, 248, 247, 264, 263, 0, 265, 265, 0, 267, 269, 252, 253, 263, 268, 271, 254, 267, 269, 272, 274, 269, 268, 271, 257, 275, 0, 272, 274, 0, 0, 280, 0, 275, 265, 0, 281, 274, 268, 280, 263, 277, 275, 271, 281, 278, 0, 272, 269, 277, 0, 0, 277, 278, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 274, 268, 0, 0, 0, 275, 271, 0, 0, 0, 272, 0, 0, 0, 0, 277, 0, 0, 0, 278, 283, 283, 283, 283, 284, 0, 284, 284, 286, 0, 286, 286, 287, 287, 288, 0, 288, 288, 289, 0, 289, 289, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "frame/contourlex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "frame/contourlex.L" #include #include #include #include "util.h" #include "contourparser.H" extern YYSTYPE* ctlval; extern ctFlexLexer* ctlexx; /* rules */ #line 840 "frame/contourlex.C" #define INITIAL 0 #define DISCARD 1 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 31 "frame/contourlex.L" #line 944 "frame/contourlex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 283 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 282 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 33 "frame/contourlex.L" { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(ctlval->str,""); // feed a blank string return STRING; } YY_BREAK case 2: YY_RULE_SETUP #line 40 "frame/contourlex.L" { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return STRING; } YY_BREAK case 3: YY_RULE_SETUP #line 48 "frame/contourlex.L" {return AMPLIFIER_;} YY_BREAK case 4: YY_RULE_SETUP #line 49 "frame/contourlex.L" {return B1950_;} YY_BREAK case 5: YY_RULE_SETUP #line 50 "frame/contourlex.L" {return COLOR_;} YY_BREAK case 6: YY_RULE_SETUP #line 51 "frame/contourlex.L" {return DASH_;} YY_BREAK case 7: YY_RULE_SETUP #line 52 "frame/contourlex.L" {return DASHLIST_;} YY_BREAK case 8: YY_RULE_SETUP #line 53 "frame/contourlex.L" {return DEBUG_;} YY_BREAK case 9: YY_RULE_SETUP #line 54 "frame/contourlex.L" {return DETECTOR_;} YY_BREAK case 10: YY_RULE_SETUP #line 55 "frame/contourlex.L" {return ECLIPTIC_;} YY_BREAK case 11: YY_RULE_SETUP #line 56 "frame/contourlex.L" {return FALSE_;} YY_BREAK case 12: YY_RULE_SETUP #line 57 "frame/contourlex.L" {return FK4_;} YY_BREAK case 13: YY_RULE_SETUP #line 58 "frame/contourlex.L" {return FK4_NO_E_;} YY_BREAK case 14: YY_RULE_SETUP #line 59 "frame/contourlex.L" {return FK5_;} YY_BREAK case 15: YY_RULE_SETUP #line 60 "frame/contourlex.L" {return GALACTIC_;} YY_BREAK case 16: YY_RULE_SETUP #line 61 "frame/contourlex.L" {return GLOBAL_;} YY_BREAK case 17: YY_RULE_SETUP #line 62 "frame/contourlex.L" {return HELIOECLIPTIC_;} YY_BREAK case 18: YY_RULE_SETUP #line 63 "frame/contourlex.L" {return ICRS_;} YY_BREAK case 19: YY_RULE_SETUP #line 64 "frame/contourlex.L" {return IMAGE_;} YY_BREAK case 20: YY_RULE_SETUP #line 65 "frame/contourlex.L" {return J2000_;} YY_BREAK case 21: YY_RULE_SETUP #line 66 "frame/contourlex.L" {return LEVEL_;} YY_BREAK case 22: YY_RULE_SETUP #line 67 "frame/contourlex.L" {return LEVELS_;} YY_BREAK case 23: YY_RULE_SETUP #line 68 "frame/contourlex.L" {return LINEAR_;} YY_BREAK case 24: YY_RULE_SETUP #line 69 "frame/contourlex.L" {return N_;} YY_BREAK case 25: YY_RULE_SETUP #line 70 "frame/contourlex.L" {return NO_;} YY_BREAK case 26: YY_RULE_SETUP #line 71 "frame/contourlex.L" {return OFF_;} YY_BREAK case 27: YY_RULE_SETUP #line 72 "frame/contourlex.L" {return ON_;} YY_BREAK case 28: YY_RULE_SETUP #line 73 "frame/contourlex.L" {return PHYSICAL_;} YY_BREAK case 29: YY_RULE_SETUP #line 74 "frame/contourlex.L" {return SUPERGALACTIC_;} YY_BREAK case 30: YY_RULE_SETUP #line 75 "frame/contourlex.L" {return TRUE_;} YY_BREAK case 31: YY_RULE_SETUP #line 76 "frame/contourlex.L" {return VERSION_;} YY_BREAK case 32: YY_RULE_SETUP #line 77 "frame/contourlex.L" {return WCS_;} YY_BREAK case 33: YY_RULE_SETUP #line 78 "frame/contourlex.L" {return WCSA_;} YY_BREAK case 34: YY_RULE_SETUP #line 79 "frame/contourlex.L" {return WCSB_;} YY_BREAK case 35: YY_RULE_SETUP #line 80 "frame/contourlex.L" {return WCSC_;} YY_BREAK case 36: YY_RULE_SETUP #line 81 "frame/contourlex.L" {return WCSD_;} YY_BREAK case 37: YY_RULE_SETUP #line 82 "frame/contourlex.L" {return WCSE_;} YY_BREAK case 38: YY_RULE_SETUP #line 83 "frame/contourlex.L" {return WCSF_;} YY_BREAK case 39: YY_RULE_SETUP #line 84 "frame/contourlex.L" {return WCSG_;} YY_BREAK case 40: YY_RULE_SETUP #line 85 "frame/contourlex.L" {return WCSH_;} YY_BREAK case 41: YY_RULE_SETUP #line 86 "frame/contourlex.L" {return WCSI_;} YY_BREAK case 42: YY_RULE_SETUP #line 87 "frame/contourlex.L" {return WCSJ_;} YY_BREAK case 43: YY_RULE_SETUP #line 88 "frame/contourlex.L" {return WCSK_;} YY_BREAK case 44: YY_RULE_SETUP #line 89 "frame/contourlex.L" {return WCSL_;} YY_BREAK case 45: YY_RULE_SETUP #line 90 "frame/contourlex.L" {return WCSM_;} YY_BREAK case 46: YY_RULE_SETUP #line 91 "frame/contourlex.L" {return WCSN_;} YY_BREAK case 47: YY_RULE_SETUP #line 92 "frame/contourlex.L" {return WCSO_;} YY_BREAK case 48: YY_RULE_SETUP #line 93 "frame/contourlex.L" {return WCSP_;} YY_BREAK case 49: YY_RULE_SETUP #line 94 "frame/contourlex.L" {return WCSQ_;} YY_BREAK case 50: YY_RULE_SETUP #line 95 "frame/contourlex.L" {return WCSR_;} YY_BREAK case 51: YY_RULE_SETUP #line 96 "frame/contourlex.L" {return WCSS_;} YY_BREAK case 52: YY_RULE_SETUP #line 97 "frame/contourlex.L" {return WCST_;} YY_BREAK case 53: YY_RULE_SETUP #line 98 "frame/contourlex.L" {return WCSU_;} YY_BREAK case 54: YY_RULE_SETUP #line 99 "frame/contourlex.L" {return WCSV_;} YY_BREAK case 55: YY_RULE_SETUP #line 100 "frame/contourlex.L" {return WCSW_;} YY_BREAK case 56: YY_RULE_SETUP #line 101 "frame/contourlex.L" {return WCSX_;} YY_BREAK case 57: YY_RULE_SETUP #line 102 "frame/contourlex.L" {return WCSY_;} YY_BREAK case 58: YY_RULE_SETUP #line 103 "frame/contourlex.L" {return WCSZ_;} YY_BREAK case 59: YY_RULE_SETUP #line 104 "frame/contourlex.L" {return WIDTH_;} YY_BREAK case 60: YY_RULE_SETUP #line 105 "frame/contourlex.L" {return Y_;} YY_BREAK case 61: YY_RULE_SETUP #line 106 "frame/contourlex.L" {return YES_;} YY_BREAK case 62: YY_RULE_SETUP #line 109 "frame/contourlex.L" { // Integer ctlval->integer = atoi(yytext); return INT; } YY_BREAK case 63: #line 115 "frame/contourlex.L" case 64: YY_RULE_SETUP #line 115 "frame/contourlex.L" { // Real Number ctlval->real = atof(yytext); return REAL; } YY_BREAK case 65: #line 121 "frame/contourlex.L" case 66: YY_RULE_SETUP #line 121 "frame/contourlex.L" { // degrees yytext[yyleng-1] = '\0'; ctlval->real = atof(yytext); return ANGDEGREE; } YY_BREAK case 67: #line 128 "frame/contourlex.L" case 68: YY_RULE_SETUP #line 128 "frame/contourlex.L" { // physical coords yytext[yyleng-1] = '\0'; ctlval->real = atof(yytext); return PHYCOORD; } YY_BREAK case 69: #line 135 "frame/contourlex.L" case 70: YY_RULE_SETUP #line 135 "frame/contourlex.L" { // image coords yytext[yyleng-1] = '\0'; ctlval->real = atof(yytext); return IMGCOORD; } YY_BREAK case 71: #line 142 "frame/contourlex.L" case 72: YY_RULE_SETUP #line 142 "frame/contourlex.L" { // Sexagesimal int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return SEXSTR; } YY_BREAK case 73: #line 150 "frame/contourlex.L" case 74: YY_RULE_SETUP #line 150 "frame/contourlex.L" { // HMS int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return HMSSTR; } YY_BREAK case 75: #line 158 "frame/contourlex.L" case 76: YY_RULE_SETUP #line 158 "frame/contourlex.L" { // DMS int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return DMSSTR; } YY_BREAK case 77: YY_RULE_SETUP #line 165 "frame/contourlex.L" { // 8 bit Hex Color int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return STRING; } YY_BREAK case 78: YY_RULE_SETUP #line 172 "frame/contourlex.L" { // 16 bit Hex Color int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return STRING; } YY_BREAK case 79: YY_RULE_SETUP #line 179 "frame/contourlex.L" { // 32 bit Hex Color int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return STRING; } YY_BREAK case 80: #line 187 "frame/contourlex.L" case 81: YY_RULE_SETUP #line 187 "frame/contourlex.L" { // Quoted String int ll = (yyleng-2)<(CTBUFSIZE-1) ? (yyleng-2):(CTBUFSIZE-1); strncpy(ctlval->str,yytext+1,ll); // skip the " " ctlval->str[ll] = '\0'; // Remove the '"' return STRING; } YY_BREAK case 82: YY_RULE_SETUP #line 194 "frame/contourlex.L" { // Quoted String int ll = (yyleng-2)<(CTBUFSIZE-1) ? (yyleng-2):(CTBUFSIZE-1); strncpy(ctlval->str,yytext+1,ll); // skip the '{' ctlval->str[ll] = '\0'; // Remove the '}' return STRING; } YY_BREAK case 83: YY_RULE_SETUP #line 201 "frame/contourlex.L" { // General String int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return STRING; } YY_BREAK case 84: YY_RULE_SETUP #line 208 "frame/contourlex.L" { // White Spaces } YY_BREAK case 85: /* rule 85 can match eol */ YY_RULE_SETUP #line 211 "frame/contourlex.L" { // windows line feed return '\n'; } YY_BREAK case 86: YY_RULE_SETUP #line 215 "frame/contourlex.L" { // fake line feed return '\n'; } YY_BREAK case 87: /* rule 87 can match eol */ YY_RULE_SETUP #line 219 "frame/contourlex.L" { // linefeed return '\n'; } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(DISCARD): #line 223 "frame/contourlex.L" { // eof return EOF_; } YY_BREAK case 88: YY_RULE_SETUP #line 227 "frame/contourlex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 89: YY_RULE_SETUP #line 231 "frame/contourlex.L" ECHO; YY_BREAK #line 1537 "frame/contourlex.C" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; ctfree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); ctfree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ ctrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) ctrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 283 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 283 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 282); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) ctalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) ctalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) ctfree((void *) b->yy_ch_buf ); ctfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)ctalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)ctrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) ctalloc(new_size ); else (yy_start_stack) = (int *) ctrealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *ctalloc (yy_size_t size ) { return (void *) malloc( size ); } void *ctrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void ctfree (void * ptr ) { free( (char *) ptr ); /* see ctrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 231 "frame/contourlex.L" void ctDiscard(int doit) { if (ctlexx) ctlexx->begin(DISCARD, doit); } void ctFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/frame/contourlex.L000644 000765 000000 00000012277 12762077401 017135 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "util.h" #include "contourparser.H" extern YYSTYPE* ctlval; extern ctFlexLexer* ctlexx; %} %x DISCARD D [0-9] E [Ee][+-]?{D}+ H [0-9a-fA-F] /* rules */ %% [\n] { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(ctlval->str,""); // feed a blank string return STRING; } [^\n]* { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return STRING; } amplifier {return AMPLIFIER_;} b1950 {return B1950_;} color {return COLOR_;} dash {return DASH_;} dashlist {return DASHLIST_;} debug {return DEBUG_;} detector {return DETECTOR_;} ecliptic {return ECLIPTIC_;} false {return FALSE_;} fk4 {return FK4_;} fk4-no-e {return FK4_NO_E_;} fk5 {return FK5_;} galactic {return GALACTIC_;} global {return GLOBAL_;} helioecliptic {return HELIOECLIPTIC_;} icrs {return ICRS_;} image {return IMAGE_;} j2000 {return J2000_;} level {return LEVEL_;} levels {return LEVELS_;} linear {return LINEAR_;} n {return N_;} no {return NO_;} off {return OFF_;} on {return ON_;} physical {return PHYSICAL_;} supergalactic {return SUPERGALACTIC_;} true {return TRUE_;} version {return VERSION_;} wcs {return WCS_;} wcsa {return WCSA_;} wcsb {return WCSB_;} wcsc {return WCSC_;} wcsd {return WCSD_;} wcse {return WCSE_;} wcsf {return WCSF_;} wcsg {return WCSG_;} wcsh {return WCSH_;} wcsi {return WCSI_;} wcsj {return WCSJ_;} wcsk {return WCSK_;} wcsl {return WCSL_;} wcsm {return WCSM_;} wcsn {return WCSN_;} wcso {return WCSO_;} wcsp {return WCSP_;} wcsq {return WCSQ_;} wcsr {return WCSR_;} wcss {return WCSS_;} wcst {return WCST_;} wcsu {return WCSU_;} wcsv {return WCSV_;} wcsw {return WCSW_;} wcsx {return WCSX_;} wcsy {return WCSY_;} wcsz {return WCSZ_;} width {return WIDTH_;} y {return Y_;} yes {return YES_;} [+-]?{D}+ { // Integer ctlval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number ctlval->real = atof(yytext); return REAL; } [+-]?{D}+"."?d | [+-]?{D}*"."{D}+d { // degrees yytext[yyleng-1] = '\0'; ctlval->real = atof(yytext); return ANGDEGREE; } [+-]?{D}+"."?p | [+-]?{D}*"."{D}+p { // physical coords yytext[yyleng-1] = '\0'; ctlval->real = atof(yytext); return PHYCOORD; } [+-]?{D}+"."?i | [+-]?{D}*"."{D}+i { // image coords yytext[yyleng-1] = '\0'; ctlval->real = atof(yytext); return IMGCOORD; } [+-]?{D}+:{D}+:{D}+"."? | [+-]?{D}+:{D}+:{D}*"."{D}+ { // Sexagesimal int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return SEXSTR; } [+-]?{D}+h{D}+m{D}+"."?s | [+-]?{D}+h{D}+m{D}*"."{D}+s { // HMS int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return HMSSTR; } [+-]?{D}+d{D}+m{D}+"."?s | [+-]?{D}+d{D}+m{D}*"."{D}+s { // DMS int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return DMSSTR; } #({H}){3} { // 8 bit Hex Color int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return STRING; } #({H}){6} { // 16 bit Hex Color int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return STRING; } #({H}){12} { // 32 bit Hex Color int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return STRING; } \"[^\"\n]*\" | \'[^\'\n]*\' { // Quoted String int ll = (yyleng-2)<(CTBUFSIZE-1) ? (yyleng-2):(CTBUFSIZE-1); strncpy(ctlval->str,yytext+1,ll); // skip the " " ctlval->str[ll] = '\0'; // Remove the '"' return STRING; } \{[^\}\n]*\} { // Quoted String int ll = (yyleng-2)<(CTBUFSIZE-1) ? (yyleng-2):(CTBUFSIZE-1); strncpy(ctlval->str,yytext+1,ll); // skip the '{' ctlval->str[ll] = '\0'; // Remove the '}' return STRING; } [0-9A-Za-z]+ { // General String int ll = yyleng <(CTBUFSIZE-1) ? yyleng:(CTBUFSIZE-1); strncpy(ctlval->str,yytext,ll); ctlval->str[ll] = '\0'; return STRING; } [ \t]+ { // White Spaces } \r\n { // windows line feed return '\n'; } \\n { // fake line feed return '\n'; } \n { // linefeed return '\n'; } <> { // eof return EOF_; } . { // Else, return the char return yytext[0]; } %% void ctDiscard(int doit) { if (ctlexx) ctlexx->begin(DISCARD, doit); } void ctFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/frame/contourparser.C000644 000765 000000 00000212761 12762337270 017633 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse ctparse #define yylex ctlex #define yyerror cterror #define yylval ctlval #define yychar ctchar #define yydebug ctdebug #define yynerrs ctnerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, STRING = 260, ANGDEGREE = 261, PHYCOORD = 262, IMGCOORD = 263, SEXSTR = 264, HMSSTR = 265, DMSSTR = 266, EOF_ = 267, AMPLIFIER_ = 268, B1950_ = 269, COLOR_ = 270, DASH_ = 271, DASHLIST_ = 272, DEBUG_ = 273, DETECTOR_ = 274, ECLIPTIC_ = 275, FALSE_ = 276, FK4_ = 277, FK4_NO_E_ = 278, FK5_ = 279, GALACTIC_ = 280, GLOBAL_ = 281, HELIOECLIPTIC_ = 282, ICRS_ = 283, IMAGE_ = 284, J2000_ = 285, LEVEL_ = 286, LEVELS_ = 287, LINEAR_ = 288, N_ = 289, NO_ = 290, OFF_ = 291, ON_ = 292, PHYSICAL_ = 293, SUPERGALACTIC_ = 294, TRUE_ = 295, VERSION_ = 296, WCS_ = 297, WCSA_ = 298, WCSB_ = 299, WCSC_ = 300, WCSD_ = 301, WCSE_ = 302, WCSF_ = 303, WCSG_ = 304, WCSH_ = 305, WCSI_ = 306, WCSJ_ = 307, WCSK_ = 308, WCSL_ = 309, WCSM_ = 310, WCSN_ = 311, WCSO_ = 312, WCSP_ = 313, WCSQ_ = 314, WCSR_ = 315, WCSS_ = 316, WCST_ = 317, WCSU_ = 318, WCSV_ = 319, WCSW_ = 320, WCSX_ = 321, WCSY_ = 322, WCSZ_ = 323, WIDTH_ = 324, Y_ = 325, YES_ = 326 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define STRING 260 #define ANGDEGREE 261 #define PHYCOORD 262 #define IMGCOORD 263 #define SEXSTR 264 #define HMSSTR 265 #define DMSSTR 266 #define EOF_ 267 #define AMPLIFIER_ 268 #define B1950_ 269 #define COLOR_ 270 #define DASH_ 271 #define DASHLIST_ 272 #define DEBUG_ 273 #define DETECTOR_ 274 #define ECLIPTIC_ 275 #define FALSE_ 276 #define FK4_ 277 #define FK4_NO_E_ 278 #define FK5_ 279 #define GALACTIC_ 280 #define GLOBAL_ 281 #define HELIOECLIPTIC_ 282 #define ICRS_ 283 #define IMAGE_ 284 #define J2000_ 285 #define LEVEL_ 286 #define LEVELS_ 287 #define LINEAR_ 288 #define N_ 289 #define NO_ 290 #define OFF_ 291 #define ON_ 292 #define PHYSICAL_ 293 #define SUPERGALACTIC_ 294 #define TRUE_ 295 #define VERSION_ 296 #define WCS_ 297 #define WCSA_ 298 #define WCSB_ 299 #define WCSC_ 300 #define WCSD_ 301 #define WCSE_ 302 #define WCSF_ 303 #define WCSG_ 304 #define WCSH_ 305 #define WCSI_ 306 #define WCSJ_ 307 #define WCSK_ 308 #define WCSL_ 309 #define WCSM_ 310 #define WCSN_ 311 #define WCSO_ 312 #define WCSP_ 313 #define WCSQ_ 314 #define WCSR_ 315 #define WCSS_ 316 #define WCST_ 317 #define WCSU_ 318 #define WCSV_ 319 #define WCSW_ 320 #define WCSX_ 321 #define WCSY_ 322 #define WCSZ_ 323 #define WIDTH_ 324 #define Y_ 325 #define YES_ 326 /* Copy the first part of user declarations. */ #line 10 "frame/contourparser.Y" #define YYDEBUG 1 #define FITSPTR (fr->findFits()) #define DISCARD_(x) {yyclearin; ctDiscard(x);} #include #include #include #include "base.h" #include "fitsimage.h" #include "contour.h" #undef yyFlexLexer #define yyFlexLexer ctFlexLexer #include extern int ctlex(void*, ctFlexLexer*); extern void cterror(Base*, ctFlexLexer*, const char*); extern void ctDiscard(int); static Coord::CoordSystem globalWCS; static Coord::CoordSystem globalSystem; static Coord::SkyFrame globalSky; static ContourLevel* cl; static Contour* cc; static double localLevel; static char globalColor[16]; static char localColor[16]; static int globalWidth; static int localWidth; static int globalDash; static int localDash; static int globalDashList[2]; static int localDashList[2]; static Coord::CoordSystem checkWCSSystem(); static Coord::SkyFrame checkWCSSky(); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 54 "frame/contourparser.Y" { #define CTBUFSIZE 2048 double real; int integer; char str[CTBUFSIZE]; double vector[3]; } /* Line 193 of yacc.c. */ #line 298 "frame/contourparser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 311 "frame/contourparser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 292 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 79 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 31 /* YYNRULES -- Number of rules. */ #define YYNRULES 115 /* YYNRULES -- Number of states. */ #define YYNSTATES 175 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 326 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 76, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 75, 2, 2, 2, 2, 73, 74, 2, 2, 78, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 77, 2, 72, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 6, 10, 13, 14, 17, 19, 23, 26, 29, 32, 38, 39, 47, 48, 57, 60, 62, 65, 66, 70, 74, 76, 77, 81, 83, 86, 87, 88, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 125, 127, 129, 131, 133, 134, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 223, 225, 229, 233, 238, 242, 246, 250, 252, 256, 260, 265, 269, 273, 277, 281, 285, 289, 293 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 80, 0, -1, 100, 81, -1, 81, 82, 92, -1, 82, 92, -1, -1, 18, 94, -1, 41, -1, 26, 105, 90, -1, 102, 90, -1, 104, 90, -1, 33, 90, -1, 32, 72, 73, 86, 74, -1, -1, 31, 72, 93, 83, 101, 90, 87, -1, -1, 31, 72, 93, 84, 101, 107, 90, 87, -1, 73, 90, -1, 88, -1, 74, 90, -1, -1, 75, 85, 5, -1, 86, 96, 93, -1, 93, -1, -1, 88, 96, 89, -1, 89, -1, 109, 90, -1, -1, -1, 75, 91, 5, -1, 76, -1, 77, -1, 12, -1, 4, -1, 3, -1, 37, -1, 36, -1, 3, -1, 71, -1, 70, -1, 37, -1, 40, -1, 35, -1, 34, -1, 36, -1, 21, -1, -1, 78, -1, 9, -1, 10, -1, 11, -1, -1, -1, 29, -1, 38, -1, 19, -1, 13, -1, 103, -1, 42, -1, 43, -1, 44, -1, 45, -1, 46, -1, 47, -1, 48, -1, 49, -1, 50, -1, 51, -1, 52, -1, 53, -1, 54, -1, 55, -1, 56, -1, 57, -1, 58, -1, 59, -1, 60, -1, 61, -1, 62, -1, 63, -1, 64, -1, 65, -1, 66, -1, 67, -1, 68, -1, 22, -1, 14, -1, 23, -1, 24, -1, 30, -1, 28, -1, 25, -1, 39, -1, 20, -1, 27, -1, 105, 96, 106, -1, 106, -1, 15, 72, 5, -1, 16, 72, 95, -1, 17, 72, 3, 3, -1, 42, 72, 103, -1, 69, 72, 3, -1, 107, 96, 108, -1, 108, -1, 15, 72, 5, -1, 16, 72, 95, -1, 17, 72, 3, 3, -1, 69, 72, 3, -1, 97, 96, 97, -1, 98, 96, 99, -1, 99, 96, 99, -1, 93, 96, 93, -1, 6, 96, 6, -1, 8, 96, 8, -1, 7, 96, 7, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 148, 148, 151, 152, 155, 156, 157, 159, 160, 164, 169, 173, 174, 174, 175, 175, 176, 181, 182, 187, 187, 190, 191, 195, 202, 203, 206, 213, 214, 214, 217, 218, 219, 227, 228, 231, 232, 235, 237, 238, 239, 240, 242, 243, 244, 245, 248, 249, 252, 255, 258, 261, 275, 284, 285, 286, 287, 288, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 332, 333, 336, 337, 338, 339, 340, 343, 344, 347, 348, 349, 350, 353, 366, 374, 382, 389, 397, 404 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "INT", "REAL", "STRING", "ANGDEGREE", "PHYCOORD", "IMGCOORD", "SEXSTR", "HMSSTR", "DMSSTR", "EOF_", "AMPLIFIER_", "B1950_", "COLOR_", "DASH_", "DASHLIST_", "DEBUG_", "DETECTOR_", "ECLIPTIC_", "FALSE_", "FK4_", "FK4_NO_E_", "FK5_", "GALACTIC_", "GLOBAL_", "HELIOECLIPTIC_", "ICRS_", "IMAGE_", "J2000_", "LEVEL_", "LEVELS_", "LINEAR_", "N_", "NO_", "OFF_", "ON_", "PHYSICAL_", "SUPERGALACTIC_", "TRUE_", "VERSION_", "WCS_", "WCSA_", "WCSB_", "WCSC_", "WCSD_", "WCSE_", "WCSF_", "WCSG_", "WCSH_", "WCSI_", "WCSJ_", "WCSK_", "WCSL_", "WCSM_", "WCSN_", "WCSO_", "WCSP_", "WCSQ_", "WCSR_", "WCSS_", "WCST_", "WCSU_", "WCSV_", "WCSW_", "WCSX_", "WCSY_", "WCSZ_", "WIDTH_", "Y_", "YES_", "'='", "'('", "')'", "'#'", "'\\n'", "';'", "','", "$accept", "start", "commands", "command", "@1", "@2", "@3", "levels", "newcl", "nodes", "node", "comment", "@4", "terminator", "numeric", "debug", "yesno", "sp", "sexagesimal", "hms", "dms", "initGlobal", "initLocal", "coordSystem", "wcsSystem", "skyFrame", "global", "globalProperty", "local", "localProperty", "coord", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 61, 40, 41, 35, 10, 59, 44 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 79, 80, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 83, 82, 84, 82, 82, 82, 82, 85, 82, 86, 86, 87, 88, 88, 89, 90, 91, 90, 92, 92, 92, 93, 93, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 97, 98, 99, 100, 101, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 106, 106, 106, 106, 106, 107, 107, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 2, 3, 2, 0, 2, 1, 3, 2, 2, 2, 5, 0, 7, 0, 8, 2, 1, 2, 0, 3, 3, 1, 0, 3, 1, 2, 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 3, 4, 3, 3, 3, 1, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 52, 0, 5, 1, 35, 34, 47, 47, 47, 49, 50, 51, 57, 87, 0, 56, 94, 86, 88, 89, 92, 0, 95, 91, 54, 90, 0, 0, 28, 55, 93, 7, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 28, 28, 20, 5, 0, 47, 26, 47, 47, 47, 47, 28, 58, 28, 28, 48, 0, 0, 0, 37, 36, 6, 0, 0, 0, 0, 0, 47, 97, 0, 0, 29, 11, 17, 19, 0, 0, 33, 31, 32, 4, 0, 0, 0, 0, 0, 9, 10, 27, 113, 115, 114, 0, 0, 0, 0, 0, 8, 0, 13, 0, 0, 21, 3, 25, 112, 109, 110, 111, 98, 38, 46, 44, 43, 45, 41, 42, 40, 39, 99, 0, 101, 102, 96, 53, 53, 47, 23, 30, 100, 28, 0, 12, 0, 24, 0, 0, 0, 0, 47, 104, 22, 14, 0, 0, 0, 0, 24, 0, 105, 106, 0, 108, 16, 103, 107 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 1, 62, 63, 143, 144, 94, 145, 161, 64, 65, 91, 120, 99, 66, 80, 138, 75, 67, 68, 69, 2, 149, 70, 71, 72, 86, 87, 158, 159, 73 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -93 static const yytype_int16 yypact[] = { -93, 21, 190, -93, -93, -93, -70, -70, -70, -93, -93, -93, -93, -93, -30, -93, -93, -93, -93, -93, -93, 27, -93, -93, -93, -93, -49, -48, -50, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -50, -50, -93, 117, 8, 5, -93, -70, -70, -70, -70, -50, -93, -50, -50, -93, 20, 23, 32, -93, -93, -93, -44, -41, -33, -23, -22, -2, -93, 15, -21, -93, -93, -93, -93, 46, 8, -93, -93, -93, -93, 99, 15, 44, 43, 43, -93, -93, -93, -93, -93, -93, 50, 1, 53, 224, 55, -93, 27, 17, 15, 58, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, 61, -93, -93, -93, -93, -93, -69, -93, -93, -93, -50, 31, -93, 15, -93, -6, -5, -4, 16, -2, -93, -93, -93, 60, 1, 67, 74, -93, 31, -93, -93, 77, -93, -93, -93, -93 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -93, -93, -93, 25, -93, -93, -93, -93, -77, -93, -10, -57, -93, -1, -74, -93, -72, -7, -9, -93, -92, -93, -47, -93, -19, -93, -93, -18, -93, -63, -93 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -29 static const yytype_int16 yytable[] = { 76, 77, 92, 93, 129, 151, 78, 79, 74, 74, -28, 126, 127, 105, 118, 106, 107, -18, 4, 5, 96, 3, 130, 88, 89, 90, 108, 124, 111, 116, 109, 112, -15, -15, -15, 131, 132, 133, 134, 113, 110, 135, 81, 82, 83, 146, 154, 155, 156, 114, 115, 121, 119, 9, 11, 128, 139, 100, 141, 101, 102, 103, 104, 147, 148, 168, 162, 163, 164, 84, 170, 136, 137, 90, -28, -28, 74, 171, 160, 117, 174, -18, -18, 74, 97, 98, -15, 95, 165, 172, 123, 169, 153, 125, 122, 140, 85, 150, 0, 142, 157, 166, 4, 5, 173, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 0, -2, 0, 0, 4, 5, 0, 6, 7, 8, 9, 10, 11, 0, 12, 13, 0, 0, 0, 14, 15, 16, 152, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 167, 0, 0, 0, 29, 30, 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 0, 0, 0, 0, 59, 60, 61, 4, 5, 0, 6, 7, 8, 9, 10, 11, 0, 12, 13, 0, 0, 0, 14, 15, 16, 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, 0, 29, 30, 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 0, 0, 0, 0, 59, 60, 61, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 }; static const yytype_int16 yycheck[] = { 7, 8, 59, 60, 3, 74, 36, 37, 78, 78, 12, 103, 104, 70, 88, 72, 73, 12, 3, 4, 12, 0, 21, 72, 72, 75, 6, 101, 72, 86, 7, 72, 15, 16, 17, 34, 35, 36, 37, 72, 8, 40, 15, 16, 17, 119, 15, 16, 17, 72, 72, 5, 73, 9, 11, 5, 3, 64, 3, 66, 67, 68, 69, 5, 3, 5, 72, 72, 72, 42, 3, 70, 71, 75, 76, 77, 78, 3, 152, 86, 3, 76, 77, 78, 76, 77, 69, 62, 72, 166, 100, 163, 149, 102, 95, 114, 69, 144, -1, 117, 69, 158, 3, 4, 167, 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, -1, -1, 0, -1, -1, 3, 4, -1, 6, 7, 8, 9, 10, 11, -1, 13, 14, -1, -1, -1, 18, 19, 20, 145, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 158, -1, -1, -1, 38, 39, -1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, -1, -1, -1, -1, 73, 74, 75, 3, 4, -1, 6, 7, 8, 9, 10, 11, -1, 13, 14, -1, -1, -1, 18, 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, -1, -1, -1, 38, 39, -1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, -1, -1, -1, -1, 73, 74, 75, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 80, 100, 0, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 73, 74, 75, 81, 82, 88, 89, 93, 97, 98, 99, 102, 103, 104, 109, 78, 96, 96, 96, 36, 37, 94, 15, 16, 17, 42, 69, 105, 106, 72, 72, 75, 90, 90, 90, 85, 82, 12, 76, 77, 92, 96, 96, 96, 96, 96, 90, 90, 90, 6, 7, 8, 72, 72, 72, 72, 72, 90, 96, 93, 73, 91, 5, 92, 89, 93, 97, 99, 99, 5, 3, 21, 34, 35, 36, 37, 40, 70, 71, 95, 3, 103, 3, 106, 83, 84, 86, 93, 5, 3, 101, 101, 74, 96, 90, 15, 16, 17, 69, 107, 108, 93, 87, 72, 72, 72, 72, 90, 96, 5, 95, 3, 3, 87, 108, 3 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (fr, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, fr, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, ctFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; ctFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (fr); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, ctFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; ctFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, Base* fr, ctFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, fr, ll) YYSTYPE *yyvsp; int yyrule; Base* fr; ctFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , fr, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, fr, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, Base* fr, ctFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, fr, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; Base* fr; ctFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (fr); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (Base* fr, ctFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (Base* fr, ctFlexLexer* ll) #else int yyparse (fr, ll) Base* fr; ctFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 7: #line 157 "frame/contourparser.Y" {cerr << "DS9 Contour File 7.5" << endl;;} break; case 9: #line 161 "frame/contourparser.Y" { globalSystem=(Coord::CoordSystem)(yyvsp[(1) - (2)].integer); ;} break; case 10: #line 165 "frame/contourparser.Y" { globalSystem=globalWCS; globalSky=(Coord::SkyFrame)(yyvsp[(1) - (2)].integer); ;} break; case 11: #line 170 "frame/contourparser.Y" { globalSystem=globalWCS; globalSky=Coord::FK5; ;} break; case 13: #line 174 "frame/contourparser.Y" {localLevel = (yyvsp[(3) - (3)].real);} break; case 15: #line 175 "frame/contourparser.Y" {localLevel = (yyvsp[(3) - (3)].real);} break; case 17: #line 177 "frame/contourparser.Y" { if (cl) cc = new Contour(cl); ;} break; case 19: #line 183 "frame/contourparser.Y" { if (cc && cl) cl->lcontour().append(cc); ;} break; case 20: #line 187 "frame/contourparser.Y" {DISCARD_(1);;} break; case 24: #line 195 "frame/contourparser.Y" { if (cl) fr->contourAppendCmd(cl); cl = new ContourLevel(fr, localLevel, localColor, localWidth, localDash, localDashList); ;} break; case 27: #line 207 "frame/contourparser.Y" { if (cc) cc->lvertex().append(new Vertex((yyvsp[(1) - (2)].vector))); ;} break; case 29: #line 214 "frame/contourparser.Y" {DISCARD_(1);;} break; case 33: #line 220 "frame/contourparser.Y" { if (cl) fr->contourAppendCmd(cl); YYACCEPT; ;} break; case 34: #line 227 "frame/contourparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 35: #line 228 "frame/contourparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 36: #line 231 "frame/contourparser.Y" {yydebug=1;;} break; case 37: #line 232 "frame/contourparser.Y" {yydebug=0;;} break; case 38: #line 235 "frame/contourparser.Y" {(yyval.integer)=((yyvsp[(1) - (1)].integer) ? 1 : 0);;} break; case 39: #line 237 "frame/contourparser.Y" {(yyval.integer)=1;;} break; case 40: #line 238 "frame/contourparser.Y" {(yyval.integer)=1;;} break; case 41: #line 239 "frame/contourparser.Y" {(yyval.integer)=1;;} break; case 42: #line 240 "frame/contourparser.Y" {(yyval.integer)=1;;} break; case 43: #line 242 "frame/contourparser.Y" {(yyval.integer)=0;;} break; case 44: #line 243 "frame/contourparser.Y" {(yyval.integer)=0;;} break; case 45: #line 244 "frame/contourparser.Y" {(yyval.integer)=0;;} break; case 46: #line 245 "frame/contourparser.Y" {(yyval.integer)=0;;} break; case 49: #line 252 "frame/contourparser.Y" {(yyval.real) = parseSEXStr((yyvsp[(1) - (1)].str));;} break; case 50: #line 255 "frame/contourparser.Y" {(yyval.real) = parseHMSStr((yyvsp[(1) - (1)].str));;} break; case 51: #line 258 "frame/contourparser.Y" {(yyval.real) = parseDMSStr((yyvsp[(1) - (1)].str));;} break; case 52: #line 261 "frame/contourparser.Y" { cl = NULL; cc = NULL; globalSystem = Coord::WCS; globalWCS = fr->wcsSystem(); globalSky = fr->wcsSky(); strcpy(globalColor,"green"); globalDash = 0; globalDashList[0] = 8; globalDashList[1] = 3; globalWidth = 1; ;} break; case 53: #line 275 "frame/contourparser.Y" { strcpy(localColor,globalColor); localDash = globalDash; localDashList[0] = globalDashList[0]; localDashList[1] = globalDashList[1]; localWidth = globalWidth; ;} break; case 54: #line 284 "frame/contourparser.Y" {(yyval.integer) = Coord::IMAGE;;} break; case 55: #line 285 "frame/contourparser.Y" {(yyval.integer) = Coord::PHYSICAL;;} break; case 56: #line 286 "frame/contourparser.Y" {(yyval.integer) = Coord::DETECTOR;;} break; case 57: #line 287 "frame/contourparser.Y" {(yyval.integer) = Coord::AMPLIFIER;;} break; case 58: #line 288 "frame/contourparser.Y" {(yyval.integer) = (yyvsp[(1) - (1)].integer); globalWCS = (Coord::CoordSystem)(yyvsp[(1) - (1)].integer);;} break; case 59: #line 291 "frame/contourparser.Y" {(yyval.integer) = Coord::WCS;;} break; case 60: #line 292 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSA;;} break; case 61: #line 293 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSB;;} break; case 62: #line 294 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSC;;} break; case 63: #line 295 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSD;;} break; case 64: #line 296 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSE;;} break; case 65: #line 297 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSF;;} break; case 66: #line 298 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSG;;} break; case 67: #line 299 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSH;;} break; case 68: #line 300 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSI;;} break; case 69: #line 301 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSJ;;} break; case 70: #line 302 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSK;;} break; case 71: #line 303 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSL;;} break; case 72: #line 304 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSM;;} break; case 73: #line 305 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSN;;} break; case 74: #line 306 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSO;;} break; case 75: #line 307 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSP;;} break; case 76: #line 308 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSQ;;} break; case 77: #line 309 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSR;;} break; case 78: #line 310 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSS;;} break; case 79: #line 311 "frame/contourparser.Y" {(yyval.integer) = Coord::WCST;;} break; case 80: #line 312 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSU;;} break; case 81: #line 313 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSV;;} break; case 82: #line 314 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSW;;} break; case 83: #line 315 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSX;;} break; case 84: #line 316 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSY;;} break; case 85: #line 317 "frame/contourparser.Y" {(yyval.integer) = Coord::WCSZ;;} break; case 86: #line 320 "frame/contourparser.Y" {(yyval.integer) = Coord::FK4;;} break; case 87: #line 321 "frame/contourparser.Y" {(yyval.integer) = Coord::FK4;;} break; case 88: #line 322 "frame/contourparser.Y" {(yyval.integer) = Coord::FK4_NO_E;;} break; case 89: #line 323 "frame/contourparser.Y" {(yyval.integer) = Coord::FK5;;} break; case 90: #line 324 "frame/contourparser.Y" {(yyval.integer) = Coord::FK5;;} break; case 91: #line 325 "frame/contourparser.Y" {(yyval.integer) = Coord::ICRS;;} break; case 92: #line 326 "frame/contourparser.Y" {(yyval.integer) = Coord::GALACTIC;;} break; case 93: #line 327 "frame/contourparser.Y" {(yyval.integer) = Coord::SUPERGALACTIC;;} break; case 94: #line 328 "frame/contourparser.Y" {(yyval.integer) = Coord::ECLIPTIC;;} break; case 95: #line 329 "frame/contourparser.Y" {(yyval.integer) = Coord::HELIOECLIPTIC;;} break; case 98: #line 336 "frame/contourparser.Y" {strncpy(globalColor,(yyvsp[(3) - (3)].str),16);;} break; case 99: #line 337 "frame/contourparser.Y" {globalDash = (yyvsp[(3) - (3)].integer);;} break; case 100: #line 338 "frame/contourparser.Y" {globalDashList[0] =(yyvsp[(3) - (4)].integer); globalDashList[1] =(yyvsp[(4) - (4)].integer);;} break; case 101: #line 339 "frame/contourparser.Y" {globalWCS = (Coord::CoordSystem)(yyvsp[(3) - (3)].integer);;} break; case 102: #line 340 "frame/contourparser.Y" {globalWidth = (yyvsp[(3) - (3)].integer);;} break; case 105: #line 347 "frame/contourparser.Y" {strncpy(localColor,(yyvsp[(3) - (3)].str),16);;} break; case 106: #line 348 "frame/contourparser.Y" {localDash = (yyvsp[(3) - (3)].integer);;} break; case 107: #line 349 "frame/contourparser.Y" {localDashList[0] =(yyvsp[(3) - (4)].integer); localDashList[1] =(yyvsp[(4) - (4)].integer);;} break; case 108: #line 350 "frame/contourparser.Y" {localWidth = (yyvsp[(3) - (3)].integer);;} break; case 109: #line 354 "frame/contourparser.Y" { Vector r; Coord::CoordSystem sys = checkWCSSystem(); Coord::SkyFrame sky = checkWCSSky(); if (sky == Coord::GALACTIC || sky == Coord::ECLIPTIC) r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), sys, sky); else r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real)*360./24.,(yyvsp[(3) - (3)].real)), sys, sky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 110: #line 367 "frame/contourparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), checkWCSSystem(), checkWCSSky()); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 111: #line 375 "frame/contourparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), checkWCSSystem(), checkWCSSky()); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 112: #line 383 "frame/contourparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), globalSystem, globalSky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 113: #line 390 "frame/contourparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), checkWCSSystem(), checkWCSSky()); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 114: #line 398 "frame/contourparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::IMAGE); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 115: #line 405 "frame/contourparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::PHYSICAL); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; ;} break; /* Line 1267 of yacc.c. */ #line 2248 "frame/contourparser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (fr, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (fr, ll, yymsg); } else { yyerror (fr, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, fr, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, fr, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (fr, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, fr, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, fr, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 411 "frame/contourparser.Y" static Coord::CoordSystem checkWCSSystem() { switch (globalSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::WCS; default: return globalSystem; } } static Coord::SkyFrame checkWCSSky() { switch (globalSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::FK5; default: return globalSky; } } saods9/tksao/frame/contourparser.H000644 000765 000000 00000011357 12762340413 017627 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, STRING = 260, ANGDEGREE = 261, PHYCOORD = 262, IMGCOORD = 263, SEXSTR = 264, HMSSTR = 265, DMSSTR = 266, EOF_ = 267, AMPLIFIER_ = 268, B1950_ = 269, COLOR_ = 270, DASH_ = 271, DASHLIST_ = 272, DEBUG_ = 273, DETECTOR_ = 274, ECLIPTIC_ = 275, FALSE_ = 276, FK4_ = 277, FK4_NO_E_ = 278, FK5_ = 279, GALACTIC_ = 280, GLOBAL_ = 281, HELIOECLIPTIC_ = 282, ICRS_ = 283, IMAGE_ = 284, J2000_ = 285, LEVEL_ = 286, LEVELS_ = 287, LINEAR_ = 288, N_ = 289, NO_ = 290, OFF_ = 291, ON_ = 292, PHYSICAL_ = 293, SUPERGALACTIC_ = 294, TRUE_ = 295, VERSION_ = 296, WCS_ = 297, WCSA_ = 298, WCSB_ = 299, WCSC_ = 300, WCSD_ = 301, WCSE_ = 302, WCSF_ = 303, WCSG_ = 304, WCSH_ = 305, WCSI_ = 306, WCSJ_ = 307, WCSK_ = 308, WCSL_ = 309, WCSM_ = 310, WCSN_ = 311, WCSO_ = 312, WCSP_ = 313, WCSQ_ = 314, WCSR_ = 315, WCSS_ = 316, WCST_ = 317, WCSU_ = 318, WCSV_ = 319, WCSW_ = 320, WCSX_ = 321, WCSY_ = 322, WCSZ_ = 323, WIDTH_ = 324, Y_ = 325, YES_ = 326 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define STRING 260 #define ANGDEGREE 261 #define PHYCOORD 262 #define IMGCOORD 263 #define SEXSTR 264 #define HMSSTR 265 #define DMSSTR 266 #define EOF_ 267 #define AMPLIFIER_ 268 #define B1950_ 269 #define COLOR_ 270 #define DASH_ 271 #define DASHLIST_ 272 #define DEBUG_ 273 #define DETECTOR_ 274 #define ECLIPTIC_ 275 #define FALSE_ 276 #define FK4_ 277 #define FK4_NO_E_ 278 #define FK5_ 279 #define GALACTIC_ 280 #define GLOBAL_ 281 #define HELIOECLIPTIC_ 282 #define ICRS_ 283 #define IMAGE_ 284 #define J2000_ 285 #define LEVEL_ 286 #define LEVELS_ 287 #define LINEAR_ 288 #define N_ 289 #define NO_ 290 #define OFF_ 291 #define ON_ 292 #define PHYSICAL_ 293 #define SUPERGALACTIC_ 294 #define TRUE_ 295 #define VERSION_ 296 #define WCS_ 297 #define WCSA_ 298 #define WCSB_ 299 #define WCSC_ 300 #define WCSD_ 301 #define WCSE_ 302 #define WCSF_ 303 #define WCSG_ 304 #define WCSH_ 305 #define WCSI_ 306 #define WCSJ_ 307 #define WCSK_ 308 #define WCSL_ 309 #define WCSM_ 310 #define WCSN_ 311 #define WCSO_ 312 #define WCSP_ 313 #define WCSQ_ 314 #define WCSR_ 315 #define WCSS_ 316 #define WCST_ 317 #define WCSU_ 318 #define WCSV_ 319 #define WCSW_ 320 #define WCSX_ 321 #define WCSY_ 322 #define WCSZ_ 323 #define WIDTH_ 324 #define Y_ 325 #define YES_ 326 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 54 "frame/contourparser.Y" { #define CTBUFSIZE 2048 double real; int integer; char str[CTBUFSIZE]; double vector[3]; } /* Line 1529 of yacc.c. */ #line 199 "frame/contourparser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/frame/contourparser.Y000644 000765 000000 00000020274 12762077401 017652 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {Base* fr} %lex-param {ctFlexLexer* ll} %parse-param {ctFlexLexer* ll} %{ #define YYDEBUG 1 #define FITSPTR (fr->findFits()) #define DISCARD_(x) {yyclearin; ctDiscard(x);} #include #include #include #include "base.h" #include "fitsimage.h" #include "contour.h" #undef yyFlexLexer #define yyFlexLexer ctFlexLexer #include extern int ctlex(void*, ctFlexLexer*); extern void cterror(Base*, ctFlexLexer*, const char*); extern void ctDiscard(int); static Coord::CoordSystem globalWCS; static Coord::CoordSystem globalSystem; static Coord::SkyFrame globalSky; static ContourLevel* cl; static Contour* cc; static double localLevel; static char globalColor[16]; static char localColor[16]; static int globalWidth; static int localWidth; static int globalDash; static int localDash; static int globalDashList[2]; static int localDashList[2]; static Coord::CoordSystem checkWCSSystem(); static Coord::SkyFrame checkWCSSky(); %} %union { #define CTBUFSIZE 2048 double real; int integer; char str[CTBUFSIZE]; double vector[3]; } %type numeric %type yesno %type sexagesimal %type hms %type dms %type coord %type coordSystem %type wcsSystem %type skyFrame %token INT %token REAL %token STRING %token ANGDEGREE %token PHYCOORD %token IMGCOORD %token SEXSTR %token HMSSTR %token DMSSTR %token EOF_ %token AMPLIFIER_ %token B1950_ %token COLOR_ %token DASH_ %token DASHLIST_ %token DEBUG_ %token DETECTOR_ %token ECLIPTIC_ %token FALSE_ %token FK4_ %token FK4_NO_E_ %token FK5_ %token GALACTIC_ %token GLOBAL_ %token HELIOECLIPTIC_ %token ICRS_ %token IMAGE_ %token J2000_ %token LEVEL_ %token LEVELS_ %token LINEAR_ %token N_ %token NO_ %token OFF_ %token ON_ %token PHYSICAL_ %token SUPERGALACTIC_ %token TRUE_ %token VERSION_ %token WCS_ %token WCSA_ %token WCSB_ %token WCSC_ %token WCSD_ %token WCSE_ %token WCSF_ %token WCSG_ %token WCSH_ %token WCSI_ %token WCSJ_ %token WCSK_ %token WCSL_ %token WCSM_ %token WCSN_ %token WCSO_ %token WCSP_ %token WCSQ_ %token WCSR_ %token WCSS_ %token WCST_ %token WCSU_ %token WCSV_ %token WCSW_ %token WCSX_ %token WCSY_ %token WCSZ_ %token WIDTH_ %token Y_ %token YES_ %% start : initGlobal commands ; commands: commands command terminator | command terminator ; command : /* empty */ | DEBUG_ debug | VERSION_ {cerr << "DS9 Contour File 7.5" << endl;} | GLOBAL_ global comment | coordSystem comment { globalSystem=(Coord::CoordSystem)$1; } | skyFrame comment { globalSystem=globalWCS; globalSky=(Coord::SkyFrame)$1; } | LINEAR_ comment { globalSystem=globalWCS; globalSky=Coord::FK5; } | LEVELS_ '=' '(' levels ')' | LEVEL_ '=' numeric {localLevel = $3} initLocal comment newcl | LEVEL_ '=' numeric {localLevel = $3} initLocal local comment newcl | '(' comment { if (cl) cc = new Contour(cl); } | nodes | ')' comment { if (cc && cl) cl->lcontour().append(cc); } | '#' {DISCARD_(1);} STRING ; levels : levels sp numeric | numeric ; newcl : { if (cl) fr->contourAppendCmd(cl); cl = new ContourLevel(fr, localLevel, localColor, localWidth, localDash, localDashList); } ; nodes : nodes sp node | node ; node : coord comment { if (cc) cc->lvertex().append(new Vertex($1)); } ; comment : /* empty */ | '#' {DISCARD_(1);} STRING ; terminator: '\n' | ';' | EOF_ { if (cl) fr->contourAppendCmd(cl); YYACCEPT; } ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; yesno : INT {$$=($1 ? 1 : 0);} | YES_ {$$=1;} | Y_ {$$=1;} | ON_ {$$=1;} | TRUE_ {$$=1;} | NO_ {$$=0;} | N_ {$$=0;} | OFF_ {$$=0;} | FALSE_ {$$=0;} ; sp : /* empty */ | ',' ; sexagesimal: SEXSTR {$$ = parseSEXStr($1);} ; hms : HMSSTR {$$ = parseHMSStr($1);} ; dms : DMSSTR {$$ = parseDMSStr($1);} ; initGlobal: { cl = NULL; cc = NULL; globalSystem = Coord::WCS; globalWCS = fr->wcsSystem(); globalSky = fr->wcsSky(); strcpy(globalColor,"green"); globalDash = 0; globalDashList[0] = 8; globalDashList[1] = 3; globalWidth = 1; } ; initLocal: { strcpy(localColor,globalColor); localDash = globalDash; localDashList[0] = globalDashList[0]; localDashList[1] = globalDashList[1]; localWidth = globalWidth; } ; coordSystem :IMAGE_ {$$ = Coord::IMAGE;} | PHYSICAL_ {$$ = Coord::PHYSICAL;} | DETECTOR_ {$$ = Coord::DETECTOR;} | AMPLIFIER_ {$$ = Coord::AMPLIFIER;} | wcsSystem {$$ = $1; globalWCS = (Coord::CoordSystem)$1;} ; wcsSystem : WCS_ {$$ = Coord::WCS;} | WCSA_ {$$ = Coord::WCSA;} | WCSB_ {$$ = Coord::WCSB;} | WCSC_ {$$ = Coord::WCSC;} | WCSD_ {$$ = Coord::WCSD;} | WCSE_ {$$ = Coord::WCSE;} | WCSF_ {$$ = Coord::WCSF;} | WCSG_ {$$ = Coord::WCSG;} | WCSH_ {$$ = Coord::WCSH;} | WCSI_ {$$ = Coord::WCSI;} | WCSJ_ {$$ = Coord::WCSJ;} | WCSK_ {$$ = Coord::WCSK;} | WCSL_ {$$ = Coord::WCSL;} | WCSM_ {$$ = Coord::WCSM;} | WCSN_ {$$ = Coord::WCSN;} | WCSO_ {$$ = Coord::WCSO;} | WCSP_ {$$ = Coord::WCSP;} | WCSQ_ {$$ = Coord::WCSQ;} | WCSR_ {$$ = Coord::WCSR;} | WCSS_ {$$ = Coord::WCSS;} | WCST_ {$$ = Coord::WCST;} | WCSU_ {$$ = Coord::WCSU;} | WCSV_ {$$ = Coord::WCSV;} | WCSW_ {$$ = Coord::WCSW;} | WCSX_ {$$ = Coord::WCSX;} | WCSY_ {$$ = Coord::WCSY;} | WCSZ_ {$$ = Coord::WCSZ;} ; skyFrame : FK4_ {$$ = Coord::FK4;} | B1950_ {$$ = Coord::FK4;} | FK4_NO_E_ {$$ = Coord::FK4_NO_E;} | FK5_ {$$ = Coord::FK5;} | J2000_ {$$ = Coord::FK5;} | ICRS_ {$$ = Coord::ICRS;} | GALACTIC_ {$$ = Coord::GALACTIC;} | SUPERGALACTIC_ {$$ = Coord::SUPERGALACTIC;} | ECLIPTIC_ {$$ = Coord::ECLIPTIC;} | HELIOECLIPTIC_ {$$ = Coord::HELIOECLIPTIC;} ; global : global sp globalProperty | globalProperty ; globalProperty : COLOR_ '=' STRING {strncpy(globalColor,$3,16);} | DASH_ '=' yesno {globalDash = $3;} | DASHLIST_ '=' INT INT {globalDashList[0] =$3; globalDashList[1] =$4;} | WCS_ '=' wcsSystem {globalWCS = (Coord::CoordSystem)$3;} | WIDTH_ '=' INT {globalWidth = $3;} ; local : local sp localProperty | localProperty ; localProperty : COLOR_ '=' STRING {strncpy(localColor,$3,16);} | DASH_ '=' yesno {localDash = $3;} | DASHLIST_ '=' INT INT {localDashList[0] =$3; localDashList[1] =$4;} | WIDTH_ '=' INT {localWidth = $3;} ; coord : sexagesimal sp sexagesimal { Vector r; Coord::CoordSystem sys = checkWCSSystem(); Coord::SkyFrame sky = checkWCSSky(); if (sky == Coord::GALACTIC || sky == Coord::ECLIPTIC) r = FITSPTR->mapToRef(Vector($1,$3), sys, sky); else r = FITSPTR->mapToRef(Vector($1*360./24.,$3), sys, sky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | hms sp dms { Vector r = FITSPTR->mapToRef(Vector($1,$3), checkWCSSystem(), checkWCSSky()); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | dms sp dms { Vector r = FITSPTR->mapToRef(Vector($1,$3), checkWCSSystem(), checkWCSSky()); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | numeric sp numeric { Vector r = FITSPTR->mapToRef(Vector($1,$3), globalSystem, globalSky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | ANGDEGREE sp ANGDEGREE { Vector r = FITSPTR->mapToRef(Vector($1,$3), checkWCSSystem(), checkWCSSky()); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | IMGCOORD sp IMGCOORD { Vector r = FITSPTR->mapToRef(Vector($1,$3), Coord::IMAGE); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | PHYCOORD sp PHYCOORD { Vector r = FITSPTR->mapToRef(Vector($1,$3), Coord::PHYSICAL); $$[0] = r[0]; $$[1] = r[1]; } ; %% static Coord::CoordSystem checkWCSSystem() { switch (globalSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::WCS; default: return globalSystem; } } static Coord::SkyFrame checkWCSSky() { switch (globalSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::FK5; default: return globalSky; } } saods9/tksao/frame/coord.C000644 000765 000000 00000016412 12775517652 016036 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "coord.h" #include "util.h" #include "fitsimage.h" Coord coord; static const char* coordSystemStr_[] = { "data", "image", "physical", "amplifier", "detector", "wcs", "wcsa", "wcsb", "wcsc", "wcsd", "wcse", "wcsf", "wcsg", "wcsh", "wcsi", "wcsj", "wcsk", "wcsl", "wcsm", "wcsn", "wcso", "wcsp", "wcsq", "wcsr", "wcss", "wcst", "wcsu", "wcsv", "wcsw", "wcsx", "wcsy", "wcsz", "wcs0" }; static const char* skyFrameStr_[] = { "fk4", "fk4-no-e", "fk5", "icrs", "galactic", "supergalactic", "ecliptic", "helioecliptic", "gappt" }; static const char* skyFormatStr_[] = { "degrees", "sexagesimal", }; static const char* skyDistStr_[] = { "degrees", "arcmin", "arcsec" }; const char* Coord::coordSystemStr(int ii) { return coordSystemStr_[ii]; } const char* Coord::skyFrameStr(int ii) { return skyFrameStr_[ii]; } const char* Coord::skyFormatStr(int ii) { return skyFormatStr_[ii]; } const char* Coord::skyDistStr(int ii) { return skyDistStr_[ii]; } void Coord::listCoordSystem(ostream& str, CoordSystem sys, SkyFrame sky, FitsImage* ptr) { switch (sys) { case IMAGE: str << "image"; return; case PHYSICAL: str << "physical"; return; case DETECTOR: str << "detector"; return; case AMPLIFIER: str << "amplifier"; return; default: if (ptr->hasWCSCel(sys)) { switch (sky) { case FK4: str << "fk4"; return; case FK4_NO_E: str << "fk4-no-e"; return; case FK5: str << "fk5"; return; case ICRS: str << "icrs"; return; case GALACTIC: str << "galactic"; return; case SUPERGALACTIC: str << "supergalactic"; return; case ECLIPTIC: str << "ecliptic"; return; case HELIOECLIPTIC: str << "helioecliptic"; return; } } else { str << "wcs"; if (sys > WCS) str << (char)(sys-WCS+'`'); } return; } } void Coord::listDistSystem(ostream& str, CoordSystem sys, SkyDist format, FitsImage* ptr) { switch (sys) { case IMAGE: str << "image"; return; case PHYSICAL: str << "physical"; return; case DETECTOR: str << "detector"; return; case AMPLIFIER: str << "amplifier"; return; default: if (ptr->hasWCSCel(sys)) { switch (format) { case DEGREE: str << "degrees"; return; case ARCMIN: str << "arcmin"; return; case ARCSEC: str << "arcsec"; return; } } else str << "pixels"; return; } } void Coord::listProsCoordSystem(ostream& str, CoordSystem sys, SkyFrame sky) { switch (sys) { case IMAGE: str << "logical"; return; case PHYSICAL: str << "physical"; return; case DETECTOR: str << "detector"; return; case AMPLIFIER: str << "amplifier"; return; default: switch (sky) { case FK4: str << "b1950"; return; case FK4_NO_E: str << "fk4-no-e"; return; case FK5: str << "j2000"; return; case ICRS: str << "icrs"; return; case GALACTIC: str << "galactic"; return; case SUPERGALACTIC: str << "supergalactic"; return; case ECLIPTIC: str << "ecliptic"; return; case HELIOECLIPTIC: str << "helioecliptic"; return; } } } void Coord::strToCoordSystem(const char* str, CoordSystem wcssys, CoordSystem* sys, SkyFrame* sky) { if (!str) { *sys = PHYSICAL; *sky = FK5; } else if (STRCMP(str,"image",5)) { *sys = IMAGE; *sky = FK5; } else if (STRCMP(str,"physical",8)) { *sys = PHYSICAL; *sky = FK5; } else if (STRCMP(str,"amplifier",9)) { *sys = AMPLIFIER; *sky = FK5; } else if (STRCMP(str,"detector",9)) { *sys = DETECTOR; *sky = FK5; } else if (STRCMP(str,"fk4-no-e",8)) { *sys = wcssys; *sky = FK4_NO_E; } else if (STRCMP(str,"fk4",3)) { *sys = wcssys; *sky = FK4; } else if (STRCMP(str,"fk5",3)) { *sys = wcssys; *sky = FK5; } else if (STRCMP(str,"icrs",4)) { *sys = wcssys; *sky = ICRS; } else if (STRCMP(str,"galactic",8)) { *sys = wcssys; *sky = GALACTIC; } else if (STRCMP(str,"supergalactic",12)) { *sys = wcssys; *sky = SUPERGALACTIC; } else if (STRCMP(str,"ecliptic",8)) { *sys = wcssys; *sky = ECLIPTIC; } else if (STRCMP(str,"helioecliptic",12)) { *sys = wcssys; *sky = HELIOECLIPTIC; } else if (STRCMP(str,"wcs",3)) { *sys = wcssys; *sky = FK5; } else if (STRCMP(str,"linear",6)) { *sys = wcssys; *sky = FK5; } else { *sys = PHYSICAL; *sky = FK5; } } void Coord::strToSkyFormat(const char* str, SkyFormat* format) { if (!str) *format = DEGREES; else if (STRCMP(str,"degrees",7)) *format = DEGREES; else if (STRCMP(str,"degree",6)) *format = DEGREES; else if (STRCMP(str,"deg",3)) *format = DEGREES; else if (STRCMP(str,"hms",3)) *format = SEXAGESIMAL; else if (STRCMP(str,"h:m:s",5)) *format = SEXAGESIMAL; else if (STRCMP(str,"\"h:m:s\"",7)) *format = SEXAGESIMAL; else if (STRCMP(str,"dms",3)) *format = SEXAGESIMAL; else if (STRCMP(str,"d:m:s",5)) *format = SEXAGESIMAL; else if (STRCMP(str,"\"d:m:s\"",7)) *format = SEXAGESIMAL; else *format = DEGREES; } void Coord::strToSkyDist(const char* str, SkyDist* dist) { if (!str) *dist = DEGREE; else if (STRCMP(str,"degrees",7)) *dist = DEGREE; else if (STRCMP(str,"degree",6)) *dist = DEGREE; else if (STRCMP(str,"deg",3)) *dist = DEGREE; else if (STRCMP(str,"arcminute",9)) *dist = ARCMIN; else if (STRCMP(str,"arcmin",6)) *dist = ARCMIN; else if (STRCMP(str,"arcsecond",9)) *dist = ARCSEC; else if (STRCMP(str,"arcsec",6)) *dist = ARCSEC; else *dist = DEGREE; } void Coord::strToAngleFormat(const char* str, AngleFormat* format) { if (!str) *format = DEG; else if (STRCMP(str,"degrees",7)) *format = DEG; else if (STRCMP(str,"degree",6)) *format = DEG; else if (STRCMP(str,"deg",3)) *format = DEG; else if (STRCMP(str,"radian",6)) *format = RAD; else if (STRCMP(str,"rad",3)) *format = RAD; else *format = DEG; } void Coord::strToDistSystem(const char* str, CoordSystem wcssys, CoordSystem* sys, SkyDist* dist) { if (!str) { *sys = PHYSICAL; *dist = DEGREE; } else if (STRCMP(str,"image",5)) { *sys = IMAGE; *dist = DEGREE; } else if (STRCMP(str,"physical",8)) { *sys = PHYSICAL; *dist = DEGREE; } else if (STRCMP(str,"amplifier",9)) { *sys = AMPLIFIER; *dist = DEGREE; } else if (STRCMP(str,"detector",8)) { *sys = DETECTOR; *dist = DEGREE; } else if (STRCMP(str,"degrees",7)) { *sys = wcssys; *dist = DEGREE; } else if (STRCMP(str,"arcmin",6)) { *sys = wcssys; *dist = ARCMIN; } else if (STRCMP(str,"arcsec",6)) { *sys = wcssys; *dist = ARCSEC; } else if (STRCMP(str,"pixels",6)) { *sys = PHYSICAL; *dist = DEGREE; } else { *sys = PHYSICAL; *dist = DEGREE; } } saods9/tksao/frame/coord.h000644 000765 000000 00000003134 12775517652 016100 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __coord_h__ #define __coord_h__ #include #include #include #include using namespace std; class FitsImage; class Coord { public: enum InternalSystem {WINDOW, CANVAS, WIDGET, USER, REF, PANNER, MAGNIFIER, PS}; enum CoordSystem {DATA, IMAGE, PHYSICAL, AMPLIFIER, DETECTOR, WCS, WCSA, WCSB, WCSC, WCSD, WCSE, WCSF, WCSG, WCSH, WCSI, WCSJ, WCSK, WCSL, WCSM, WCSN, WCSO, WCSP, WCSQ, WCSR, WCSS, WCST, WCSU, WCSV, WCSW, WCSX, WCSY, WCSZ, WCS0}; enum SkyFrame {FK4, FK4_NO_E, FK5, ICRS, GALACTIC, SUPERGALACTIC, ECLIPTIC, HELIOECLIPTIC}; enum SkyFormat {DEGREES, SEXAGESIMAL}; enum SkyDist {DEGREE, ARCMIN, ARCSEC}; enum AngleFormat {DEG, RAD}; enum Orientation {NORMAL, XX, YY, XY}; public: void listCoordSystem(ostream&, CoordSystem, SkyFrame, FitsImage*); void listDistSystem(ostream&, CoordSystem, SkyDist, FitsImage*); void listProsCoordSystem(ostream&, CoordSystem, SkyFrame); void strToCoordSystem(const char*, CoordSystem, CoordSystem*, SkyFrame*); void strToSkyFormat(const char*, SkyFormat*); void strToSkyDist(const char*, SkyDist*); void strToDistSystem(const char*, CoordSystem, CoordSystem*, SkyDist*); void strToAngleFormat(const char*, AngleFormat*); const char* coordSystemStr(int ii); const char* skyFrameStr(int ii); const char* skyFormatStr(int ii); const char* skyDistStr(int ii); }; extern Coord coord; #endif saods9/tksao/frame/cpanda.C000644 000765 000000 00000047627 12775230632 016160 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "cpanda.h" #include "fitsimage.h" Cpanda::Cpanda(Base* p, const Vector& ctr, double a1, double a2, int an, double r1, double r2, int rn, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseEllipse(p, ctr, 0, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = rn+1; annuli_ = new Vector[numAnnuli_]; for (int ii=0; ii& tg, const List& cb) : BaseEllipse(p, ctr, 0, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = rn; annuli_ = new Vector[numAnnuli_]; for (int ii=0; iigetColor("red")); else if (ii == numAngles_-1) XSetForeground(display, gc, parent->getColor("blue")); else XSetForeground(display, gc, color); } else XSetForeground(display, gc, color); } XDrawLine(display, drawable, lgc, rr0[0], rr0[1], rr1[0], rr1[1]); } } void Cpanda::renderPS(int mode) { BaseEllipse::renderPS(mode); Vector r0 = annuli_[0]; Vector r1 = annuli_[numAnnuli_-1]; for (int ii=0; iicanvas) << ' ' << "moveto " << rr1.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } } #ifdef MAC_OSX_TK void Cpanda::renderMACOSX() { BaseEllipse::renderMACOSX(); Vector r0 = annuli_[0]; Vector r1 = annuli_[numAnnuli_-1]; for (int ii=0; ii4) { int hh = h-4-1; if (numAnnuli_>2 && hh2 && hh<(numAnnuli_+numAngles_)) { hh -= numAnnuli_; deleteAngle(hh); } numHandle = 4 + numAnnuli_ + numAngles_; startAng_ = angles_[0]; stopAng_ = angles_[numAngles_-1]; updateBBox(); doCallBack(CallBack::EDITCB); } } int Cpanda::isIn(const Vector& vv, Coord::InternalSystem sys, int nn, int aa) { Vector pp = bckMap(vv,sys); return BaseEllipse::isIn(vv,sys,nn) && isInAngle(pp,aa); } void Cpanda::analysis(AnalysisTask mm, int which) { switch (mm) { case PANDA: if (!analysisPanda_ && which) { addCallBack(CallBack::MOVECB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITENDCB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisPandaCB_[1], parent->options->cmdName); } if (analysisPanda_ && !which) { deleteCallBack(CallBack::MOVECB, analysisPandaCB_[0]); deleteCallBack(CallBack::EDITCB, analysisPandaCB_[0]); deleteCallBack(CallBack::EDITENDCB, analysisPandaCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisPandaCB_[0]); deleteCallBack(CallBack::DELETECB, analysisPandaCB_[1]); } analysisPanda_ = which; break; case STATS: if (!analysisStats_ && which) { addCallBack(CallBack::MOVECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITENDCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisStatsCB_[1], parent->options->cmdName); } if (analysisStats_ && !which) { deleteCallBack(CallBack::MOVECB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITCB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITENDCB, analysisStatsCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::DELETECB, analysisStatsCB_[1]); } analysisStats_ = which; break; default: // na break; } } void Cpanda::analysisPanda(Coord::CoordSystem sys) { double* xx; double* yy; double* ee; BBox* bb = new BBox[numAnnuli_]; for (int ii=0; iimarkerAnalysisPanda(this, &xx, &yy, &ee, numAnnuli_-1, annuli_, numAngles_-1, angles_, bb, sys); analysisXYEResult(xx, yy, ee, num); } void Cpanda::analysisStats(Coord::CoordSystem sys, Coord::SkyFrame sky) { ostringstream str; BBox* bb = new BBox[numAnnuli_]; for (int ii=0; iimarkerAnalysisStats(this, str, numAnnuli_-1, numAngles_-1, bb, sys, sky); str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } // list void Cpanda::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { int regular = 1; if (numAngles_>2) { double delta; if (angles_[1] > angles_[0]) delta = angles_[1]-angles_[0]; else delta = angles_[1]+M_TWOPI-angles_[0]; for (int ii=2; ii angles_[ii-1]) diff = angles_[ii]-angles_[ii-1]; else diff = angles_[ii]+M_TWOPI-angles_[ii-1]; if (!teq(diff,delta,FLT_EPSILON)) { regular = 0; break; } } } if (numAnnuli_>2) { double delta = annuli_[1][0]-annuli_[0][0]; for (int i=2; ifindFits(sys,center); listPre(str, sys, sky, ptr, strip, 0); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listANonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { double a1 = radToDeg(parent->mapAngleFromRef(angles_[0],sys,sky)); double a2 = radToDeg(parent->mapAngleFromRef(angles_[numAngles_-1],sys,sky)); double r1 = ptr->mapLenFromRef(annuli_[0][0],sys,Coord::ARCSEC); double r2 = ptr->mapLenFromRef(annuli_[numAnnuli_-1][0],sys,Coord::ARCSEC); if (a2<=a1+FLT_EPSILON) a2 += 360; switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ',' << setprecision(8) << a1 << ',' << a2 <<',' << numAngles_-1 << ',' << setprecision(3) << fixed << r1 << '"' << ',' << r2 << '"' << ','; str.unsetf(ios_base::floatfield); str << setprecision(8) << numAnnuli_-1 << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(8) << a1 << ',' << a2 <<',' << numAngles_-1 << ',' << setprecision(3) << fixed << r1 << '"' << ',' << r2 << '"' << ','; str.unsetf(ios_base::floatfield); str << setprecision(8) << numAnnuli_-1 << ')'; break; } } else listANonCel(ptr, str, sys); } listPost(str, conj, strip); } void Cpanda::listANonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { double a1 = radToDeg(parent->mapAngleFromRef(angles_[0],sys)); double a2 = radToDeg(parent->mapAngleFromRef(angles_[numAngles_-1],sys)); if (a2<=a1+FLT_EPSILON) a2 += 360; Vector vv = ptr->mapFromRef(center,sys); double r1 = ptr->mapLenFromRef(annuli_[0][0],sys); double r2 = ptr->mapLenFromRef(annuli_[numAnnuli_-1][0],sys); str << type_ << '(' << setprecision(8) << vv << ',' << a1 << ',' << a2 << ',' << numAngles_-1 << ',' << r1 << ',' << r2 << ',' << numAnnuli_-1 << ')'; } void Cpanda::listB(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { FitsImage* ptr = parent->findFits(sys,center); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listBNonCel(ptr, str, sys, sky, format, conj, strip); break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); for (int jj=1; jjmapFromRef(center,sys); for (int jj=1; jjmapAngleFromRef(angles_[jj-1],sys)); double a2 = radToDeg(parent->mapAngleFromRef(angles_[jj],sys)); if (a2<=a1+FLT_EPSILON) a2 += 360; for (int ii=1; iimapLenFromRef(annuli_[ii-1][0],sys); double r2 = ptr->mapLenFromRef(annuli_[ii][0],sys); str << type_ << '(' << setprecision(8) << vv << ',' << a1 << ',' << a2 << ",1," << r1 << ',' << r2 << ",1)"; if (!strip) { if (conj) str << " ||"; str << " # panda="; if (ii==1 && jj==1 && !strip) { str << '('; for (int kk=0; kkmapAngleFromRef(angles_[kk],sys); str << radToDeg(ar) << ((kkmapLenFromRef(annuli_[kk][0],sys); str << rr << ((kkmapAngleFromRef(angles_[jj-1],sys,sky)); double a2 = radToDeg(parent->mapAngleFromRef(angles_[jj],sys,sky)); if (a2<=a1+FLT_EPSILON) a2 += 360; double r1 = ptr->mapLenFromRef(annuli_[ii-1][0],sys,Coord::ARCSEC); double r2 = ptr->mapLenFromRef(annuli_[ii][0],sys,Coord::ARCSEC); str << setprecision(10) << a1 << ',' << a2 << ",1," << setprecision(3) << fixed << r1 << '"' << ',' << r2 << '"' << ",1)"; str.unsetf(ios_base::floatfield); if (!strip) { if (conj) str << " ||"; str << " # panda="; if (ii==1 && jj==1 && !strip) { str << '(' << setprecision(8); for (int kk=0; kkmapAngleFromRef(angles_[kk],sys,sky); str << radToDeg(aa) << ((kkmapLenFromRef(annuli_[kk][0],sys,Coord::ARCSEC); str << rr << '"' << ((kkfindFits(sys,center); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowCenter(ptr,sys,sky,format); XMLRowRadiusX(ptr,sys,annuli_,numAnnuli_); XMLRowAng(sys,sky,angles_,numAngles_); XMLRowProps(ptr,sys); XMLRowEnd(str); } void Cpanda::listCiao(ostream& str, Coord::CoordSystem sys, int strip) { FitsImage* ptr = parent->findFits(); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector vv = ptr->mapFromRef(center,Coord::PHYSICAL); for (int ii=0; iimapLenFromRef(annuli_[ii][0],Coord::PHYSICAL); double r2 = ptr->mapLenFromRef(annuli_[ii+1][0],Coord::PHYSICAL); for (int jj=0; jjhasWCSCel(sys)) { listRADEC(ptr,center,sys,Coord::FK5,Coord::SEXAGESIMAL); for (int ii=0; iimapLenFromRef(annuli_[ii][0],sys,Coord::ARCMIN); double r2 = ptr->mapLenFromRef(annuli_[ii+1][0],sys,Coord::ARCMIN); for (int jj=0; jj& tg, const List& cb); Cpanda(Base* p, const Vector& ctr, int an, double* a, int rn, double* r, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Marker* dup() {return new Cpanda(*this);} void edit(const Vector&, int); void editEnd(); void rotateBegin() {} void rotate(const Vector& v, int h) {} void rotateEnd() {} int addAnnuli(const Vector&); int addAngles(const Vector&); void setAnglesAnnuli(double, double, int, Vector, Vector, int); void setAnglesAnnuli(const double*, int, const Vector*, int); void deleteAnglesAnnuli(int h); void analysis(AnalysisTask, int); void analysisPanda(Coord::CoordSystem sys); void analysisStats(Coord::CoordSystem, Coord::SkyFrame sky); void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void listCiao(ostream&, Coord::CoordSystem, int); // special composite funtionality void setComposite(const Matrix&, double); }; #endif saods9/tksao/frame/ds9lex.C000644 000765 000000 00000354337 12705446247 016145 0ustar00joyewheel000000 000000 #line 2 "frame/ds9lex.C" #line 4 "frame/ds9lex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer mkFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *mkalloc (yy_size_t ); void *mkrealloc (void *,yy_size_t ); void mkfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 153 #define YY_END_OF_BUFFER 154 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[540] = { 0, 0, 0, 2, 2, 154, 152, 148, 151, 152, 152, 152, 152, 152, 152, 116, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 54, 147, 147, 147, 147, 147, 147, 147, 147, 147, 113, 114, 152, 152, 2, 1, 148, 149, 0, 144, 0, 0, 145, 0, 116, 118, 131, 127, 117, 116, 0, 147, 119, 147, 147, 125, 123, 121, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 55, 147, 57, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 150, 0, 146, 2, 0, 118, 133, 129, 117, 119, 0, 0, 125, 123, 121, 132, 128, 120, 0, 126, 124, 122, 119, 0, 147, 0, 117, 147, 147, 147, 147, 147, 147, 147, 147, 11, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 33, 147, 147, 147, 147, 37, 39, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 49, 147, 147, 56, 147, 147, 60, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 73, 147, 147, 147, 147, 147, 147, 147, 147, 84, 147, 115, 141, 134, 130, 0, 117, 0, 0, 118, 0, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 22, 147, 147, 147, 147, 147, 147, 29, 147, 147, 147, 147, 147, 0, 40, 147, 147, 147, 147, 45, 147, 147, 147, 147, 51, 53, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 74, 77, 78, 147, 147, 147, 147, 147, 111, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 147, 0, 0, 0, 0, 135, 0, 147, 0, 147, 147, 147, 147, 147, 7, 8, 147, 10, 147, 147, 147, 147, 17, 147, 147, 147, 21, 147, 24, 147, 147, 147, 147, 147, 147, 147, 34, 35, 36, 0, 147, 147, 147, 147, 147, 48, 147, 50, 147, 58, 147, 147, 62, 147, 147, 147, 147, 147, 68, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 112, 0, 0, 0, 136, 135, 0, 0, 139, 0, 0, 137, 147, 147, 5, 6, 147, 147, 13, 147, 15, 147, 147, 20, 147, 147, 26, 147, 147, 147, 147, 32, 0, 147, 42, 147, 147, 46, 147, 52, 147, 61, 147, 147, 147, 66, 67, 147, 69, 71, 147, 147, 147, 147, 147, 81, 79, 147, 142, 139, 137, 140, 138, 147, 4, 147, 147, 147, 147, 18, 147, 147, 25, 147, 28, 147, 30, 0, 147, 147, 147, 47, 147, 63, 147, 147, 70, 147, 147, 147, 147, 147, 80, 0, 147, 147, 147, 14, 16, 147, 23, 27, 31, 38, 41, 147, 44, 59, 147, 65, 147, 147, 147, 147, 83, 0, 3, 147, 12, 19, 147, 147, 147, 75, 147, 147, 0, 9, 147, 64, 147, 76, 82, 0, 147, 147, 0, 147, 147, 143, 43, 72, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 5, 6, 1, 1, 1, 7, 1, 1, 1, 8, 1, 9, 10, 1, 11, 12, 13, 14, 15, 16, 17, 17, 17, 18, 19, 1, 1, 1, 1, 1, 1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 1, 46, 1, 1, 1, 1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 1, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[75] = { 0, 1, 1, 2, 1, 3, 1, 3, 1, 1, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1 } ; static yyconst flex_int16_t yy_base[558] = { 0, 0, 0, 181, 180, 179, 4306, 176, 4306, 167, 160, 0, 156, 65, 73, 87, 102, 162, 213, 140, 273, 331, 170, 211, 388, 113, 195, 201, 233, 266, 274, 429, 166, 305, 306, 489, 364, 372, 406, 244, 426, 80, 84, 0, 4306, 155, 4306, 151, 4306, 0, 148, 4306, 456, 549, 609, 4306, 4306, 669, 729, 489, 337, 789, 507, 516, 396, 425, 433, 536, 575, 804, 532, 629, 635, 586, 648, 691, 695, 758, 708, 805, 716, 864, 766, 815, 823, 830, 857, 840, 865, 892, 899, 872, 914, 921, 929, 937, 947, 960, 954, 970, 989, 978, 997, 1005, 582, 1016, 684, 1026, 1032, 1045, 1051, 1055, 1073, 1080, 1088, 1103, 1113, 1121, 1144, 1145, 1152, 1162, 1172, 1183, 1191, 1202, 1221, 4306, 80, 4306, 0, 0, 1250, 4306, 4306, 1264, 1276, 1287, 1295, 4306, 4306, 4306, 4306, 4306, 4306, 1306, 4306, 4306, 4306, 4306, 1314, 84, 1323, 1337, 1345, 1239, 1359, 1360, 1366, 1229, 1376, 1377, 1402, 1383, 1384, 1430, 1429, 1403, 1440, 1448, 1461, 1465, 1482, 1488, 1492, 1499, 1516, 1515, 1523, 1531, 1542, 1550, 1558, 1575, 1557, 1585, 1586, 1593, 1601, 1614, 1624, 1625, 1631, 1648, 1649, 1665, 1672, 1676, 1689, 1699, 1705, 1712, 1716, 1727, 1734, 1738, 1751, 1755, 1774, 1778, 1782, 1807, 1811, 1817, 1824, 1835, 1841, 1842, 1848, 1859, 1870, 1877, 1932, 1912, 1888, 0, 4306, 4306, 1994, 2016, 2024, 1912, 2047, 2033, 2056, 2074, 2088, 2089, 2095, 2105, 2099, 2120, 2127, 2144, 2150, 2160, 2154, 2177, 2181, 2187, 2204, 2212, 2232, 2233, 2248, 2255, 2259, 2263, 2282, 1895, 2288, 2295, 2306, 2324, 2330, 84, 2341, 2349, 2356, 2360, 2376, 2377, 2383, 2394, 2404, 2405, 2412, 2420, 2430, 2436, 2447, 2446, 2453, 2463, 2476, 2483, 2489, 2506, 2510, 2514, 2525, 2521, 2532, 2549, 2557, 2568, 2576, 2583, 2593, 2601, 2594, 2609, 2625, 2626, 2632, 2633, 2643, 2650, 2654, 2658, 2665, 2669, 2673, 2680, 2684, 2688, 2695, 2699, 2703, 2710, 2714, 2718, 2725, 2729, 2733, 2740, 2744, 2748, 0, 2766, 2775, 2002, 2793, 2064, 2802, 2783, 2811, 2825, 2826, 2832, 2836, 2755, 2849, 2864, 2865, 2881, 2889, 2897, 2905, 2915, 2916, 2932, 2933, 2950, 2954, 2958, 2969, 2979, 2980, 2995, 3003, 3016, 3024, 3031, 3042, 3046, 85, 3053, 3057, 3063, 3070, 3086, 3090, 3094, 3101, 3111, 3117, 3121, 3128, 3144, 3145, 3152, 3162, 3173, 3177, 3181, 3197, 3198, 3204, 3208, 3226, 3233, 3239, 3246, 3264, 3268, 3272, 3285, 0, 3306, 3324, 3296, 3334, 3342, 3352, 3367, 3380, 3388, 3368, 3403, 3404, 3414, 3420, 3427, 3433, 3444, 3452, 3465, 3471, 3484, 3488, 3492, 3503, 3509, 3510, 3527, 3528, 3535, 3548, 144, 3556, 3555, 3571, 3575, 3582, 3593, 3597, 3603, 3614, 3620, 3621, 3627, 3638, 3642, 3649, 3657, 3664, 3665, 3672, 3685, 3689, 3695, 3711, 3721, 3722, 0, 4306, 4306, 4306, 4306, 3729, 3747, 3751, 3755, 3762, 3766, 3783, 3789, 3790, 3796, 3807, 3815, 3826, 3830, 101, 3847, 3853, 3854, 3860, 3875, 3876, 3882, 3883, 3893, 3909, 3910, 3916, 3937, 3938, 3945, 0, 3964, 3965, 3971, 3975, 3981, 3992, 3998, 4002, 4008, 4306, 4019, 4025, 4026, 4032, 4042, 4049, 4050, 4067, 4068, 4074, 4085, 0, 4089, 4104, 4105, 4112, 4123, 4131, 4138, 4142, 4146, 4162, 0, 4161, 4169, 4185, 4191, 4195, 4202, 0, 4210, 4217, 0, 4218, 4234, 4306, 4241, 4242, 4306, 4283, 4287, 144, 4291, 4293, 4297, 4301, 132, 129, 127, 126, 125, 124, 123, 104, 92, 91, 89 } ; static yyconst flex_int16_t yy_def[558] = { 0, 539, 1, 540, 540, 539, 539, 539, 539, 539, 541, 542, 543, 539, 539, 544, 544, 544, 17, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 21, 544, 544, 544, 544, 544, 544, 544, 544, 544, 539, 545, 546, 539, 539, 539, 541, 539, 547, 543, 539, 539, 539, 539, 539, 539, 539, 544, 539, 544, 544, 61, 61, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 539, 545, 539, 546, 548, 54, 539, 539, 57, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 61, 539, 61, 61, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 539, 544, 544, 549, 539, 539, 539, 539, 539, 539, 539, 539, 61, 61, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 539, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 550, 539, 539, 539, 539, 539, 61, 539, 61, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 539, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 551, 539, 539, 539, 539, 539, 539, 544, 539, 539, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 539, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 552, 539, 539, 539, 539, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 539, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 553, 544, 544, 544, 544, 544, 544, 544, 544, 544, 539, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 554, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 555, 544, 544, 544, 544, 544, 544, 556, 544, 544, 557, 544, 544, 539, 544, 544, 0, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539 } ; static yyconst flex_int16_t yy_nxt[4381] = { 0, 6, 7, 8, 9, 10, 11, 12, 13, 13, 14, 15, 15, 15, 15, 15, 15, 15, 15, 6, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 32, 41, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 32, 42, 6, 52, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 55, 536, 56, 533, 530, 57, 58, 58, 58, 58, 58, 58, 58, 58, 59, 539, 523, 539, 61, 62, 539, 127, 63, 64, 234, 366, 539, 429, 539, 539, 65, 539, 66, 500, 100, 512, 490, 455, 398, 328, 539, 225, 67, 68, 131, 61, 62, 69, 127, 63, 64, 234, 366, 539, 429, 539, 49, 65, 539, 66, 500, 474, 129, 51, 48, 45, 129, 539, 80, 67, 68, 51, 81, 48, 69, 539, 82, 539, 46, 539, 539, 539, 70, 539, 539, 539, 45, 539, 539, 539, 71, 44, 44, 539, 72, 80, 539, 539, 92, 81, 539, 539, 539, 82, 73, 74, 539, 539, 539, 93, 539, 539, 539, 539, 539, 539, 539, 71, 539, 539, 539, 72, 539, 539, 539, 92, 539, 101, 539, 539, 539, 73, 74, 60, 539, 539, 93, 102, 539, 539, 539, 75, 539, 94, 539, 60, 539, 95, 539, 76, 539, 539, 539, 539, 101, 77, 78, 539, 79, 539, 539, 539, 539, 539, 102, 539, 539, 539, 75, 539, 94, 539, 60, 539, 95, 103, 76, 539, 539, 539, 539, 539, 77, 78, 539, 79, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 103, 83, 84, 539, 539, 105, 104, 539, 539, 539, 85, 539, 86, 106, 87, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 83, 84, 539, 539, 105, 104, 539, 539, 114, 85, 539, 86, 106, 87, 539, 539, 539, 112, 115, 539, 539, 539, 539, 113, 116, 539, 539, 539, 539, 88, 539, 539, 539, 539, 539, 114, 539, 89, 539, 90, 539, 539, 539, 91, 112, 115, 539, 539, 539, 539, 113, 116, 539, 539, 539, 539, 88, 539, 539, 539, 539, 539, 539, 539, 89, 539, 90, 539, 539, 539, 91, 539, 539, 539, 123, 121, 539, 122, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 96, 539, 539, 539, 97, 539, 539, 539, 539, 539, 98, 99, 539, 123, 121, 539, 122, 539, 124, 539, 539, 539, 539, 539, 125, 539, 539, 96, 539, 539, 539, 97, 539, 539, 539, 539, 539, 98, 99, 107, 126, 539, 539, 539, 539, 124, 108, 109, 539, 60, 539, 125, 539, 110, 539, 539, 111, 132, 132, 132, 132, 132, 132, 132, 132, 539, 107, 126, 539, 539, 539, 539, 539, 108, 109, 539, 60, 539, 539, 539, 110, 539, 539, 111, 539, 539, 539, 539, 539, 539, 150, 150, 150, 150, 150, 150, 150, 150, 539, 117, 539, 539, 539, 118, 539, 152, 152, 119, 153, 153, 153, 153, 153, 153, 153, 153, 120, 154, 154, 154, 154, 154, 154, 154, 154, 539, 117, 539, 539, 539, 118, 539, 539, 539, 119, 539, 539, 539, 539, 539, 159, 539, 539, 120, 133, 539, 134, 539, 539, 135, 53, 53, 53, 53, 53, 53, 53, 53, 59, 539, 539, 155, 136, 137, 539, 539, 138, 139, 539, 539, 539, 539, 539, 539, 140, 539, 141, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 155, 136, 137, 539, 539, 138, 139, 539, 539, 539, 156, 539, 539, 140, 539, 141, 142, 539, 143, 539, 539, 539, 54, 54, 54, 54, 54, 54, 54, 54, 539, 162, 539, 539, 144, 145, 539, 156, 539, 146, 539, 539, 539, 539, 539, 539, 147, 539, 148, 539, 539, 539, 539, 160, 539, 539, 539, 539, 162, 539, 539, 144, 145, 161, 539, 539, 146, 539, 539, 539, 163, 539, 539, 147, 539, 148, 55, 539, 56, 539, 160, 539, 54, 54, 54, 54, 54, 54, 54, 54, 161, 539, 539, 539, 149, 137, 539, 163, 539, 139, 539, 539, 539, 539, 539, 539, 140, 539, 141, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 149, 137, 539, 164, 539, 139, 539, 539, 539, 168, 539, 539, 140, 165, 141, 55, 539, 56, 539, 539, 57, 58, 58, 58, 58, 58, 58, 58, 58, 59, 164, 539, 539, 61, 62, 170, 168, 63, 64, 539, 165, 539, 539, 539, 539, 65, 539, 66, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 61, 62, 170, 539, 63, 64, 539, 175, 539, 539, 166, 167, 65, 539, 66, 539, 539, 539, 539, 539, 539, 151, 151, 151, 151, 151, 151, 151, 151, 539, 539, 539, 539, 539, 175, 539, 539, 166, 167, 539, 539, 539, 539, 539, 539, 539, 539, 157, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 169, 539, 158, 539, 539, 539, 539, 176, 539, 539, 539, 539, 177, 539, 157, 539, 539, 539, 539, 539, 539, 180, 178, 539, 539, 539, 539, 169, 539, 158, 539, 539, 539, 539, 176, 539, 539, 539, 539, 177, 539, 179, 539, 539, 539, 539, 171, 539, 180, 178, 539, 172, 539, 539, 539, 539, 173, 181, 539, 539, 539, 539, 539, 539, 174, 539, 186, 539, 179, 539, 539, 539, 539, 171, 539, 184, 185, 182, 172, 539, 539, 539, 539, 173, 181, 539, 539, 539, 539, 539, 539, 174, 539, 186, 539, 539, 183, 539, 539, 539, 539, 539, 539, 539, 182, 539, 187, 539, 539, 539, 539, 539, 539, 539, 539, 539, 188, 539, 539, 539, 539, 189, 539, 183, 190, 539, 539, 539, 539, 539, 539, 539, 539, 187, 539, 193, 539, 539, 539, 539, 539, 539, 539, 188, 539, 191, 539, 539, 189, 539, 539, 190, 539, 194, 192, 539, 539, 539, 539, 539, 539, 195, 193, 539, 539, 539, 539, 539, 539, 539, 539, 539, 191, 539, 539, 539, 539, 539, 539, 539, 194, 192, 539, 196, 539, 539, 539, 539, 539, 539, 539, 197, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 199, 539, 539, 539, 539, 198, 539, 539, 196, 539, 539, 539, 539, 539, 539, 539, 197, 539, 200, 539, 539, 539, 539, 539, 539, 539, 539, 199, 202, 539, 539, 539, 198, 539, 539, 201, 539, 539, 204, 539, 539, 205, 539, 539, 539, 200, 539, 203, 206, 539, 539, 539, 539, 539, 539, 202, 539, 539, 539, 539, 539, 539, 201, 539, 539, 204, 539, 539, 205, 539, 208, 207, 539, 209, 203, 206, 539, 539, 210, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 208, 207, 539, 209, 539, 211, 539, 539, 210, 213, 212, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 211, 539, 539, 539, 213, 212, 215, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 214, 539, 217, 539, 539, 216, 539, 539, 219, 539, 539, 539, 539, 218, 539, 539, 215, 539, 220, 539, 539, 539, 539, 539, 539, 539, 539, 214, 539, 217, 539, 539, 216, 221, 539, 219, 539, 539, 223, 539, 218, 539, 222, 539, 539, 220, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 241, 539, 221, 539, 539, 539, 539, 223, 539, 539, 226, 222, 227, 539, 224, 539, 132, 132, 132, 132, 132, 132, 132, 132, 133, 236, 134, 539, 539, 539, 132, 132, 132, 132, 132, 132, 132, 132, 539, 539, 539, 224, 228, 228, 228, 228, 228, 228, 228, 228, 152, 152, 236, 229, 229, 229, 229, 229, 229, 229, 229, 230, 230, 230, 230, 230, 230, 230, 230, 231, 231, 539, 232, 232, 232, 232, 232, 232, 232, 232, 150, 150, 150, 150, 150, 150, 150, 150, 233, 229, 229, 229, 229, 229, 229, 229, 229, 133, 539, 134, 539, 539, 539, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 235, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 238, 539, 539, 539, 539, 539, 239, 237, 240, 539, 539, 539, 235, 243, 242, 539, 539, 539, 539, 539, 539, 539, 539, 246, 245, 539, 539, 238, 539, 539, 539, 539, 244, 239, 237, 240, 539, 539, 539, 539, 243, 242, 539, 539, 539, 539, 249, 539, 539, 539, 246, 245, 539, 539, 539, 539, 539, 539, 539, 244, 247, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 248, 539, 249, 539, 539, 539, 539, 539, 539, 539, 250, 539, 539, 539, 539, 539, 247, 539, 539, 539, 539, 539, 539, 251, 539, 252, 539, 248, 539, 539, 539, 539, 539, 539, 539, 539, 539, 250, 539, 539, 539, 539, 253, 539, 539, 539, 539, 539, 539, 255, 251, 539, 252, 256, 539, 539, 254, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 257, 253, 539, 539, 539, 539, 539, 539, 255, 539, 539, 539, 256, 258, 539, 254, 539, 539, 539, 539, 260, 539, 539, 259, 539, 539, 539, 257, 539, 539, 539, 539, 539, 539, 539, 265, 539, 539, 539, 539, 258, 539, 539, 539, 261, 539, 539, 260, 539, 539, 259, 539, 539, 539, 539, 539, 539, 262, 263, 539, 539, 539, 539, 539, 539, 539, 539, 539, 264, 539, 539, 261, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 267, 539, 262, 263, 539, 539, 539, 539, 539, 268, 539, 539, 266, 264, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 267, 539, 269, 539, 539, 539, 539, 539, 539, 268, 539, 270, 266, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 271, 539, 272, 539, 539, 539, 269, 539, 539, 539, 539, 273, 539, 275, 539, 270, 539, 274, 539, 539, 539, 539, 539, 539, 539, 539, 539, 271, 539, 272, 539, 539, 539, 539, 539, 539, 539, 276, 273, 539, 539, 539, 539, 539, 274, 539, 539, 539, 539, 539, 277, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 276, 278, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 277, 539, 539, 539, 539, 539, 539, 539, 539, 539, 279, 280, 539, 539, 539, 278, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 281, 539, 539, 539, 539, 539, 539, 539, 285, 286, 279, 280, 539, 283, 539, 282, 539, 539, 539, 284, 539, 539, 539, 539, 539, 539, 539, 281, 539, 539, 539, 287, 539, 539, 539, 285, 286, 539, 539, 289, 283, 539, 282, 288, 539, 539, 284, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 287, 539, 539, 539, 539, 539, 539, 539, 289, 539, 291, 539, 288, 539, 539, 539, 539, 539, 539, 290, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 293, 539, 539, 291, 292, 539, 294, 539, 539, 539, 539, 295, 290, 296, 539, 539, 539, 539, 539, 539, 297, 539, 539, 539, 539, 539, 539, 293, 539, 539, 539, 292, 539, 294, 539, 539, 539, 539, 295, 539, 296, 539, 539, 539, 539, 539, 539, 297, 539, 539, 298, 539, 539, 539, 539, 539, 299, 539, 539, 539, 539, 539, 539, 539, 232, 232, 232, 232, 232, 232, 232, 232, 539, 539, 539, 539, 539, 298, 539, 539, 539, 539, 539, 299, 300, 60, 60, 60, 60, 60, 60, 60, 327, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 228, 228, 228, 228, 228, 228, 228, 228, 401, 401, 401, 401, 401, 401, 401, 401, 133, 539, 134, 539, 539, 329, 229, 229, 229, 229, 229, 229, 229, 229, 230, 230, 230, 230, 230, 230, 230, 230, 331, 332, 332, 332, 332, 332, 332, 332, 332, 226, 329, 227, 539, 330, 539, 232, 232, 232, 232, 232, 232, 232, 232, 333, 334, 334, 334, 334, 334, 334, 334, 334, 403, 403, 403, 403, 403, 403, 403, 403, 330, 335, 336, 336, 336, 336, 336, 336, 336, 336, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 337, 539, 539, 539, 338, 539, 539, 339, 539, 539, 539, 539, 539, 340, 539, 342, 539, 539, 539, 539, 539, 539, 539, 539, 539, 341, 539, 337, 539, 539, 539, 338, 539, 539, 339, 539, 539, 343, 539, 539, 340, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 341, 539, 539, 539, 539, 539, 539, 347, 539, 344, 345, 539, 343, 539, 539, 346, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 347, 539, 344, 345, 539, 350, 348, 539, 346, 539, 539, 539, 539, 539, 539, 539, 349, 539, 539, 351, 539, 539, 539, 539, 539, 352, 539, 539, 539, 539, 539, 539, 350, 348, 539, 539, 539, 539, 539, 539, 539, 539, 539, 349, 539, 539, 351, 539, 353, 539, 539, 539, 352, 539, 539, 539, 539, 355, 539, 539, 539, 354, 539, 539, 539, 539, 539, 539, 539, 539, 356, 539, 539, 539, 539, 353, 539, 539, 539, 358, 539, 539, 539, 539, 355, 539, 539, 539, 354, 539, 539, 539, 357, 539, 539, 359, 539, 356, 539, 539, 539, 539, 539, 539, 539, 539, 358, 539, 539, 539, 539, 539, 539, 539, 539, 360, 362, 539, 539, 357, 539, 361, 359, 539, 539, 539, 539, 539, 363, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 360, 362, 539, 364, 539, 539, 361, 539, 539, 365, 539, 539, 539, 363, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 367, 539, 539, 364, 539, 368, 539, 539, 539, 365, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 369, 539, 539, 539, 367, 539, 539, 539, 539, 368, 539, 539, 539, 370, 539, 539, 539, 539, 539, 539, 539, 539, 374, 539, 372, 539, 371, 369, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 375, 539, 370, 539, 539, 539, 539, 539, 539, 539, 539, 539, 373, 372, 539, 371, 539, 539, 376, 539, 539, 539, 539, 539, 539, 539, 539, 375, 539, 539, 539, 539, 377, 539, 539, 539, 539, 539, 539, 373, 539, 539, 539, 539, 539, 376, 378, 380, 539, 539, 539, 539, 539, 379, 539, 381, 539, 539, 539, 377, 539, 539, 539, 539, 539, 539, 539, 539, 382, 539, 539, 539, 539, 378, 380, 539, 539, 539, 539, 539, 379, 539, 381, 539, 539, 539, 539, 539, 539, 539, 383, 384, 539, 539, 539, 382, 539, 539, 539, 539, 539, 539, 386, 539, 387, 539, 539, 539, 539, 539, 539, 385, 539, 539, 539, 388, 539, 383, 384, 539, 390, 539, 539, 539, 539, 539, 389, 539, 539, 386, 539, 387, 539, 539, 539, 539, 539, 391, 385, 539, 539, 539, 388, 539, 539, 539, 539, 390, 539, 539, 539, 539, 539, 389, 539, 539, 539, 539, 539, 539, 539, 539, 392, 539, 391, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 393, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 392, 394, 539, 539, 539, 539, 395, 539, 396, 539, 539, 539, 539, 393, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 394, 539, 539, 539, 539, 395, 539, 396, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 397, 333, 399, 399, 399, 399, 399, 399, 399, 399, 335, 400, 400, 400, 400, 400, 400, 400, 400, 406, 406, 406, 406, 406, 406, 406, 406, 397, 402, 332, 332, 332, 332, 332, 332, 332, 332, 404, 334, 334, 334, 334, 334, 334, 334, 334, 407, 336, 336, 336, 336, 336, 336, 336, 336, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 405, 539, 539, 539, 539, 539, 539, 539, 539, 408, 409, 539, 539, 539, 539, 539, 539, 539, 412, 539, 539, 539, 539, 539, 539, 411, 410, 405, 539, 539, 539, 539, 539, 539, 539, 539, 408, 409, 539, 539, 539, 539, 539, 539, 539, 412, 539, 539, 539, 539, 539, 539, 411, 410, 539, 539, 539, 539, 539, 539, 539, 413, 539, 539, 539, 539, 539, 539, 539, 415, 539, 539, 539, 539, 539, 539, 539, 416, 414, 539, 539, 539, 539, 539, 539, 539, 539, 539, 413, 417, 539, 539, 539, 539, 539, 539, 415, 539, 539, 539, 539, 539, 539, 539, 416, 414, 539, 539, 539, 539, 539, 539, 539, 420, 418, 539, 417, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 419, 539, 539, 539, 539, 539, 539, 539, 539, 539, 420, 418, 421, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 422, 539, 539, 539, 419, 539, 539, 539, 539, 539, 423, 539, 539, 539, 539, 539, 421, 539, 539, 539, 539, 539, 539, 539, 539, 539, 424, 422, 539, 539, 539, 539, 539, 539, 539, 425, 539, 423, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 426, 539, 428, 539, 424, 539, 539, 539, 539, 539, 539, 539, 427, 425, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 426, 539, 428, 539, 539, 539, 539, 539, 539, 539, 539, 539, 427, 539, 539, 539, 539, 539, 432, 431, 539, 539, 539, 430, 539, 539, 539, 539, 539, 433, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 434, 539, 539, 539, 432, 431, 539, 435, 539, 430, 539, 539, 539, 539, 539, 433, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 434, 539, 539, 539, 539, 539, 437, 435, 539, 539, 539, 436, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 438, 539, 539, 539, 437, 539, 539, 539, 440, 436, 539, 539, 539, 439, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 438, 539, 539, 539, 442, 539, 441, 539, 440, 539, 539, 539, 539, 439, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 443, 539, 539, 539, 442, 539, 441, 539, 446, 539, 444, 539, 539, 539, 447, 539, 539, 445, 539, 539, 539, 539, 539, 539, 539, 539, 539, 443, 539, 539, 539, 539, 539, 539, 539, 446, 539, 444, 539, 448, 539, 447, 539, 539, 445, 539, 450, 449, 539, 539, 451, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 448, 539, 452, 539, 539, 539, 539, 450, 449, 539, 539, 451, 539, 539, 539, 539, 539, 539, 539, 453, 454, 401, 401, 401, 401, 401, 401, 401, 401, 452, 404, 399, 399, 399, 399, 399, 399, 399, 399, 539, 539, 539, 539, 539, 539, 539, 453, 454, 407, 400, 400, 400, 400, 400, 400, 400, 400, 539, 456, 401, 401, 401, 401, 401, 401, 401, 401, 403, 403, 403, 403, 403, 403, 403, 403, 539, 457, 403, 403, 403, 403, 403, 403, 403, 403, 456, 539, 539, 539, 539, 539, 539, 539, 539, 458, 539, 539, 539, 539, 539, 539, 539, 539, 457, 456, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 458, 539, 539, 539, 539, 539, 539, 539, 539, 539, 456, 459, 539, 539, 539, 539, 539, 539, 539, 457, 539, 539, 539, 539, 460, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 461, 539, 539, 459, 539, 539, 539, 539, 539, 539, 539, 457, 539, 463, 539, 539, 460, 539, 539, 462, 539, 539, 539, 539, 539, 539, 539, 461, 539, 539, 539, 539, 464, 539, 539, 539, 539, 465, 539, 539, 463, 539, 539, 539, 539, 539, 462, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 464, 539, 539, 539, 539, 539, 539, 539, 466, 539, 539, 467, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 468, 539, 539, 539, 539, 539, 466, 539, 539, 467, 539, 469, 539, 539, 470, 539, 539, 539, 539, 539, 471, 539, 539, 539, 539, 539, 472, 468, 539, 473, 539, 539, 539, 539, 539, 539, 539, 539, 469, 539, 539, 470, 539, 539, 539, 539, 539, 471, 539, 539, 539, 539, 539, 472, 475, 539, 473, 539, 539, 539, 539, 539, 539, 476, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 475, 539, 539, 477, 539, 539, 478, 539, 539, 476, 539, 539, 479, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 477, 539, 539, 478, 539, 539, 539, 539, 539, 479, 539, 539, 480, 539, 539, 539, 539, 539, 539, 481, 539, 539, 539, 539, 539, 482, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 480, 539, 539, 539, 539, 484, 539, 481, 483, 539, 539, 539, 539, 482, 539, 539, 539, 539, 485, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 484, 539, 539, 483, 539, 488, 539, 539, 487, 539, 539, 539, 486, 485, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 488, 539, 539, 487, 539, 539, 539, 486, 539, 491, 539, 489, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 491, 539, 489, 539, 539, 539, 493, 539, 539, 495, 539, 492, 494, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 493, 539, 539, 495, 539, 492, 494, 539, 539, 539, 539, 539, 539, 539, 539, 496, 497, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 498, 539, 539, 539, 499, 539, 539, 539, 539, 539, 539, 496, 497, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 501, 539, 498, 539, 539, 539, 499, 539, 539, 503, 539, 539, 539, 539, 539, 502, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 501, 539, 539, 539, 539, 539, 539, 539, 539, 503, 504, 539, 539, 539, 505, 502, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 506, 539, 539, 539, 539, 539, 504, 539, 539, 509, 505, 539, 539, 507, 508, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 506, 539, 539, 539, 539, 539, 539, 539, 539, 509, 539, 510, 539, 507, 508, 539, 539, 539, 539, 539, 539, 539, 539, 511, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 510, 539, 539, 515, 539, 539, 514, 539, 539, 513, 539, 539, 511, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 516, 539, 539, 539, 539, 539, 515, 539, 539, 514, 539, 539, 513, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 516, 539, 539, 539, 539, 539, 539, 539, 539, 539, 517, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 519, 539, 539, 539, 539, 539, 518, 539, 539, 539, 517, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 520, 539, 539, 539, 539, 539, 519, 539, 539, 539, 539, 539, 518, 539, 539, 539, 521, 539, 539, 539, 539, 539, 522, 539, 539, 539, 539, 520, 539, 539, 539, 539, 539, 539, 539, 539, 524, 539, 539, 539, 539, 539, 539, 521, 539, 539, 539, 539, 539, 522, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 524, 539, 539, 539, 525, 539, 527, 539, 539, 539, 526, 539, 539, 539, 539, 539, 528, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 525, 529, 527, 539, 539, 539, 526, 539, 539, 539, 539, 539, 528, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 531, 539, 539, 539, 539, 529, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 532, 539, 539, 539, 539, 531, 539, 539, 534, 539, 537, 539, 539, 539, 539, 535, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 538, 532, 539, 539, 539, 539, 539, 539, 539, 534, 539, 537, 539, 539, 539, 539, 535, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 538, 43, 43, 43, 43, 47, 539, 47, 47, 50, 539, 50, 50, 60, 60, 128, 539, 128, 128, 130, 539, 130, 130, 5, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539 } ; static yyconst flex_int16_t yy_chk[4381] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 15, 557, 15, 556, 555, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 554, 16, 15, 15, 16, 41, 15, 15, 151, 265, 25, 366, 25, 16, 15, 25, 15, 474, 25, 553, 552, 551, 550, 549, 25, 548, 16, 16, 547, 15, 15, 16, 41, 15, 15, 151, 265, 19, 366, 19, 542, 15, 19, 15, 474, 429, 128, 50, 47, 45, 42, 19, 19, 16, 16, 12, 19, 10, 16, 17, 19, 17, 9, 32, 17, 32, 17, 22, 32, 22, 7, 5, 22, 17, 17, 4, 3, 32, 17, 19, 0, 22, 22, 19, 0, 0, 0, 19, 17, 17, 0, 0, 26, 22, 26, 0, 0, 26, 27, 0, 27, 17, 0, 27, 0, 17, 26, 0, 23, 22, 23, 26, 27, 23, 0, 17, 17, 18, 0, 0, 22, 27, 23, 0, 0, 18, 0, 23, 0, 18, 28, 23, 28, 18, 0, 28, 0, 0, 26, 18, 18, 39, 18, 39, 28, 0, 39, 0, 27, 0, 0, 0, 18, 0, 23, 39, 18, 0, 23, 28, 18, 0, 0, 29, 0, 29, 18, 18, 29, 18, 20, 30, 20, 30, 0, 20, 30, 29, 0, 0, 0, 0, 0, 0, 20, 30, 28, 20, 20, 0, 0, 30, 29, 0, 0, 0, 20, 0, 20, 30, 20, 0, 33, 34, 33, 34, 0, 33, 34, 0, 0, 0, 0, 0, 20, 20, 33, 34, 30, 29, 0, 0, 34, 20, 0, 20, 30, 20, 21, 0, 21, 33, 34, 21, 60, 0, 60, 33, 34, 60, 0, 0, 21, 21, 0, 0, 0, 0, 60, 34, 0, 21, 0, 21, 0, 0, 0, 21, 33, 34, 0, 36, 0, 36, 33, 34, 36, 0, 0, 37, 21, 37, 0, 0, 37, 36, 0, 0, 21, 0, 21, 0, 0, 37, 21, 24, 0, 24, 37, 36, 24, 36, 0, 64, 0, 64, 0, 0, 64, 24, 0, 0, 24, 38, 0, 38, 24, 64, 38, 0, 0, 0, 24, 24, 0, 37, 36, 38, 36, 0, 38, 0, 65, 40, 65, 40, 38, 65, 40, 24, 66, 0, 66, 24, 0, 66, 65, 40, 0, 24, 24, 31, 40, 0, 66, 0, 0, 38, 31, 31, 0, 31, 0, 38, 0, 31, 0, 0, 31, 52, 52, 52, 52, 52, 52, 52, 52, 0, 31, 40, 0, 0, 0, 0, 0, 31, 31, 0, 31, 0, 0, 0, 31, 0, 0, 31, 35, 0, 35, 0, 0, 35, 59, 59, 59, 59, 59, 59, 59, 59, 35, 35, 0, 0, 0, 35, 0, 62, 62, 35, 62, 62, 62, 62, 62, 62, 62, 62, 35, 63, 63, 63, 63, 63, 63, 63, 63, 0, 35, 70, 0, 70, 35, 67, 70, 67, 35, 0, 67, 0, 0, 0, 70, 70, 0, 35, 53, 67, 53, 0, 0, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 0, 0, 67, 53, 53, 0, 0, 53, 53, 0, 0, 68, 0, 68, 0, 53, 68, 53, 104, 0, 104, 0, 73, 104, 73, 68, 0, 73, 0, 67, 53, 53, 104, 0, 53, 53, 73, 0, 0, 68, 0, 0, 53, 0, 53, 54, 0, 54, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 0, 73, 0, 0, 54, 54, 71, 68, 71, 54, 0, 71, 72, 0, 72, 0, 54, 72, 54, 0, 71, 0, 0, 71, 0, 74, 72, 74, 73, 0, 74, 54, 54, 72, 0, 0, 54, 0, 0, 74, 74, 0, 0, 54, 0, 54, 57, 0, 57, 0, 71, 0, 57, 57, 57, 57, 57, 57, 57, 57, 72, 106, 0, 106, 57, 57, 106, 74, 75, 57, 75, 0, 76, 75, 76, 106, 57, 76, 57, 0, 0, 0, 75, 0, 0, 78, 76, 78, 0, 0, 78, 57, 57, 80, 75, 80, 57, 0, 80, 78, 78, 0, 0, 57, 76, 57, 58, 80, 58, 0, 0, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 75, 0, 0, 58, 58, 80, 78, 58, 58, 0, 76, 0, 0, 0, 77, 58, 77, 58, 0, 77, 0, 0, 82, 0, 82, 0, 0, 82, 77, 0, 58, 58, 80, 0, 58, 58, 82, 82, 0, 0, 77, 77, 58, 0, 58, 61, 0, 61, 0, 0, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 69, 79, 69, 79, 82, 69, 79, 77, 77, 0, 0, 83, 0, 83, 69, 79, 83, 69, 0, 84, 0, 84, 0, 0, 84, 83, 85, 0, 85, 0, 79, 85, 69, 84, 0, 0, 87, 83, 87, 0, 85, 87, 84, 0, 69, 0, 0, 0, 0, 0, 87, 87, 85, 86, 0, 86, 0, 79, 86, 69, 81, 88, 81, 88, 83, 81, 88, 86, 91, 84, 91, 86, 0, 91, 81, 88, 81, 0, 87, 85, 0, 81, 91, 0, 0, 0, 81, 88, 89, 0, 89, 0, 0, 89, 81, 90, 91, 90, 86, 0, 90, 0, 89, 81, 0, 90, 90, 89, 81, 90, 92, 0, 92, 81, 88, 92, 0, 93, 0, 93, 0, 81, 93, 91, 92, 94, 89, 94, 0, 0, 94, 93, 0, 95, 89, 95, 92, 0, 95, 94, 0, 0, 0, 96, 0, 96, 93, 95, 96, 0, 98, 94, 98, 89, 95, 98, 97, 96, 97, 0, 0, 97, 0, 92, 98, 98, 99, 0, 99, 0, 97, 99, 0, 93, 101, 96, 101, 0, 94, 101, 99, 95, 0, 99, 97, 100, 0, 100, 101, 0, 100, 100, 98, 102, 0, 102, 0, 0, 102, 100, 0, 103, 96, 103, 0, 0, 103, 102, 0, 0, 99, 97, 105, 101, 105, 103, 0, 105, 0, 0, 0, 102, 107, 0, 107, 0, 105, 107, 108, 0, 108, 0, 105, 108, 0, 0, 107, 103, 0, 0, 101, 109, 108, 109, 0, 0, 109, 110, 102, 110, 107, 111, 110, 111, 0, 109, 111, 0, 0, 105, 109, 110, 0, 0, 103, 111, 0, 108, 0, 112, 110, 112, 0, 110, 112, 0, 113, 107, 113, 109, 111, 113, 0, 112, 114, 0, 114, 109, 0, 114, 113, 0, 0, 0, 108, 0, 0, 110, 114, 115, 110, 115, 113, 112, 115, 114, 109, 111, 0, 116, 114, 116, 0, 115, 116, 0, 0, 117, 0, 117, 0, 0, 117, 116, 0, 0, 0, 0, 0, 113, 112, 117, 114, 0, 115, 0, 0, 114, 117, 116, 118, 119, 118, 119, 0, 118, 119, 0, 120, 0, 120, 0, 0, 120, 118, 119, 0, 0, 121, 0, 121, 115, 120, 121, 0, 117, 116, 119, 122, 0, 122, 0, 121, 122, 0, 0, 0, 0, 118, 123, 121, 123, 122, 120, 123, 0, 122, 124, 0, 124, 0, 121, 124, 123, 119, 0, 123, 0, 125, 0, 125, 124, 0, 125, 0, 118, 0, 121, 0, 0, 120, 123, 125, 122, 0, 0, 125, 126, 121, 126, 124, 0, 126, 123, 0, 159, 0, 159, 0, 0, 159, 126, 0, 0, 0, 155, 159, 155, 123, 159, 155, 0, 0, 125, 0, 0, 132, 124, 132, 155, 126, 0, 132, 132, 132, 132, 132, 132, 132, 132, 135, 155, 135, 0, 0, 0, 135, 135, 135, 135, 135, 135, 135, 135, 0, 0, 0, 126, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 155, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 145, 145, 0, 145, 145, 145, 145, 145, 145, 145, 145, 150, 150, 150, 150, 150, 150, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 152, 153, 0, 153, 0, 0, 0, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 156, 157, 156, 157, 0, 156, 157, 158, 0, 158, 0, 0, 158, 154, 156, 157, 0, 160, 161, 160, 161, 158, 160, 161, 163, 164, 163, 164, 157, 163, 164, 160, 161, 0, 157, 156, 158, 0, 163, 164, 154, 161, 160, 162, 167, 162, 167, 0, 162, 167, 0, 164, 163, 0, 0, 157, 0, 162, 167, 0, 162, 157, 156, 158, 0, 0, 0, 0, 161, 160, 166, 165, 166, 165, 167, 166, 165, 0, 164, 163, 0, 168, 0, 168, 166, 165, 168, 162, 165, 169, 0, 169, 0, 0, 169, 168, 0, 0, 0, 166, 0, 167, 170, 169, 170, 0, 171, 170, 171, 168, 0, 171, 0, 0, 0, 165, 170, 0, 0, 0, 171, 0, 169, 172, 170, 172, 166, 0, 172, 173, 0, 173, 0, 174, 173, 174, 168, 172, 174, 0, 175, 171, 175, 173, 0, 175, 0, 174, 173, 169, 0, 170, 174, 0, 175, 172, 177, 176, 177, 176, 0, 177, 176, 0, 178, 0, 178, 175, 171, 178, 177, 176, 179, 0, 179, 173, 0, 179, 178, 174, 176, 0, 172, 180, 0, 180, 179, 178, 180, 0, 177, 181, 0, 181, 175, 0, 181, 180, 184, 182, 184, 182, 184, 184, 182, 181, 0, 176, 0, 0, 0, 180, 184, 182, 178, 0, 183, 177, 183, 0, 0, 183, 0, 0, 181, 182, 185, 186, 185, 186, 183, 185, 186, 0, 187, 183, 187, 0, 180, 187, 185, 186, 188, 0, 188, 0, 0, 188, 187, 187, 0, 181, 182, 0, 0, 189, 188, 189, 188, 0, 189, 186, 183, 0, 0, 190, 191, 190, 191, 189, 190, 191, 192, 0, 192, 0, 187, 192, 189, 190, 191, 0, 0, 0, 0, 188, 192, 190, 186, 193, 194, 193, 194, 0, 193, 194, 0, 0, 0, 191, 0, 192, 0, 193, 194, 189, 195, 0, 195, 0, 193, 195, 195, 196, 190, 196, 194, 197, 196, 197, 195, 0, 197, 0, 0, 0, 191, 196, 192, 0, 198, 197, 198, 0, 0, 198, 197, 193, 0, 0, 199, 0, 199, 194, 198, 199, 200, 0, 200, 198, 0, 200, 0, 201, 199, 201, 0, 202, 201, 202, 200, 0, 202, 197, 200, 0, 0, 201, 203, 0, 203, 202, 0, 203, 0, 204, 198, 204, 0, 205, 204, 205, 203, 0, 205, 0, 201, 203, 0, 204, 0, 200, 206, 205, 206, 0, 207, 206, 207, 0, 0, 207, 0, 204, 0, 0, 206, 0, 0, 0, 207, 207, 207, 201, 203, 208, 206, 208, 205, 209, 208, 209, 206, 210, 209, 210, 0, 0, 210, 208, 204, 0, 0, 209, 208, 0, 0, 210, 207, 207, 0, 0, 210, 206, 0, 205, 209, 0, 211, 206, 211, 0, 212, 211, 212, 0, 0, 212, 213, 0, 213, 208, 211, 213, 0, 214, 212, 214, 0, 210, 214, 212, 213, 209, 0, 0, 215, 0, 215, 214, 211, 215, 216, 217, 216, 217, 0, 216, 217, 218, 215, 218, 0, 0, 218, 215, 216, 217, 212, 214, 219, 216, 219, 218, 0, 219, 217, 211, 218, 0, 0, 220, 0, 220, 219, 219, 220, 0, 221, 0, 221, 0, 215, 221, 0, 220, 214, 0, 216, 224, 0, 224, 221, 217, 224, 218, 259, 0, 259, 0, 0, 259, 219, 224, 0, 220, 0, 0, 0, 0, 259, 221, 0, 223, 0, 223, 0, 0, 223, 231, 231, 231, 231, 231, 231, 231, 231, 223, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 221, 222, 222, 222, 222, 222, 222, 222, 222, 223, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 223, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 228, 228, 228, 228, 228, 228, 228, 228, 331, 331, 331, 331, 331, 331, 331, 331, 229, 0, 229, 0, 0, 228, 229, 229, 229, 229, 229, 229, 229, 229, 230, 230, 230, 230, 230, 230, 230, 230, 233, 233, 233, 233, 233, 233, 233, 233, 233, 232, 228, 232, 0, 230, 0, 232, 232, 232, 232, 232, 232, 232, 232, 234, 234, 234, 234, 234, 234, 234, 234, 234, 333, 333, 333, 333, 333, 333, 333, 333, 230, 235, 235, 235, 235, 235, 235, 235, 235, 235, 236, 237, 236, 237, 0, 236, 237, 238, 0, 238, 0, 240, 238, 240, 236, 237, 240, 239, 0, 239, 0, 238, 239, 236, 0, 240, 0, 237, 0, 0, 238, 239, 241, 0, 241, 0, 239, 241, 241, 242, 0, 242, 0, 0, 242, 0, 241, 0, 240, 0, 236, 0, 0, 242, 237, 0, 243, 238, 243, 0, 242, 243, 244, 239, 244, 0, 246, 244, 246, 0, 243, 246, 245, 0, 245, 240, 244, 245, 0, 0, 246, 0, 246, 0, 243, 244, 245, 242, 0, 247, 245, 247, 0, 248, 247, 248, 0, 0, 248, 249, 0, 249, 0, 247, 249, 0, 0, 248, 0, 246, 0, 243, 244, 249, 249, 247, 250, 245, 250, 0, 0, 250, 0, 0, 251, 248, 251, 0, 249, 251, 250, 0, 0, 0, 250, 0, 0, 0, 251, 0, 0, 249, 247, 0, 252, 253, 252, 253, 0, 252, 253, 0, 248, 0, 0, 249, 0, 251, 252, 253, 254, 250, 254, 0, 0, 254, 253, 255, 0, 255, 252, 256, 255, 256, 254, 257, 256, 257, 0, 254, 257, 255, 0, 0, 251, 256, 0, 0, 256, 257, 0, 0, 0, 253, 258, 0, 258, 252, 0, 258, 260, 255, 260, 0, 257, 260, 254, 261, 258, 261, 0, 0, 261, 0, 260, 256, 0, 0, 262, 0, 262, 261, 0, 262, 258, 261, 0, 0, 255, 0, 260, 257, 262, 0, 0, 0, 263, 262, 263, 0, 0, 263, 264, 0, 264, 0, 0, 264, 0, 0, 263, 258, 261, 266, 263, 266, 264, 260, 266, 0, 264, 267, 0, 267, 262, 0, 267, 266, 268, 0, 268, 0, 269, 268, 269, 267, 0, 269, 267, 0, 0, 263, 268, 268, 0, 0, 269, 264, 270, 271, 270, 271, 0, 270, 271, 272, 0, 272, 0, 0, 272, 269, 270, 271, 0, 267, 273, 0, 273, 272, 268, 273, 0, 0, 270, 0, 274, 275, 274, 275, 273, 274, 275, 275, 276, 273, 276, 272, 269, 276, 274, 275, 277, 0, 277, 0, 0, 277, 276, 276, 0, 270, 278, 0, 278, 0, 277, 278, 279, 0, 279, 274, 273, 279, 272, 0, 278, 278, 281, 280, 281, 280, 279, 281, 280, 282, 276, 282, 0, 0, 282, 279, 281, 280, 0, 283, 0, 283, 274, 282, 283, 0, 0, 0, 278, 280, 282, 0, 284, 283, 284, 0, 281, 284, 283, 285, 0, 285, 279, 0, 285, 286, 284, 286, 0, 0, 286, 284, 0, 285, 0, 0, 280, 282, 0, 286, 0, 0, 287, 281, 287, 283, 288, 287, 288, 0, 289, 288, 289, 285, 286, 289, 287, 291, 284, 291, 288, 290, 291, 290, 289, 288, 290, 289, 292, 0, 292, 291, 0, 292, 287, 290, 0, 0, 290, 0, 285, 286, 292, 292, 0, 293, 0, 293, 0, 291, 293, 0, 288, 294, 289, 294, 0, 0, 294, 293, 292, 287, 0, 0, 295, 290, 295, 294, 0, 295, 292, 0, 296, 0, 296, 0, 291, 296, 295, 297, 0, 297, 0, 0, 297, 295, 296, 292, 0, 298, 300, 298, 300, 297, 298, 300, 0, 299, 296, 299, 0, 0, 299, 298, 300, 301, 0, 301, 0, 0, 301, 299, 295, 297, 0, 0, 0, 0, 298, 301, 299, 302, 303, 302, 303, 296, 302, 303, 304, 305, 304, 305, 0, 304, 305, 302, 303, 0, 0, 306, 297, 306, 304, 305, 306, 298, 307, 299, 307, 0, 308, 307, 308, 306, 309, 308, 309, 0, 0, 309, 307, 310, 0, 310, 308, 311, 310, 311, 309, 312, 311, 312, 0, 0, 312, 310, 313, 0, 313, 311, 314, 313, 314, 312, 315, 314, 315, 0, 0, 315, 313, 316, 0, 316, 314, 317, 316, 317, 315, 318, 317, 318, 0, 0, 318, 316, 319, 0, 319, 317, 320, 319, 320, 318, 321, 320, 321, 0, 0, 321, 319, 322, 0, 322, 320, 323, 322, 323, 321, 324, 323, 324, 0, 0, 324, 322, 325, 0, 325, 323, 326, 325, 326, 324, 327, 326, 327, 0, 0, 327, 325, 341, 0, 341, 326, 0, 341, 0, 327, 0, 0, 0, 0, 0, 0, 341, 327, 329, 329, 329, 329, 329, 329, 329, 329, 329, 330, 330, 330, 330, 330, 330, 330, 330, 330, 335, 335, 335, 335, 335, 335, 335, 335, 327, 332, 332, 332, 332, 332, 332, 332, 332, 332, 334, 334, 334, 334, 334, 334, 334, 334, 334, 336, 336, 336, 336, 336, 336, 336, 336, 336, 337, 338, 337, 338, 0, 337, 338, 339, 0, 339, 334, 340, 339, 340, 337, 338, 340, 0, 0, 336, 337, 339, 0, 0, 342, 340, 342, 0, 340, 342, 0, 0, 0, 0, 0, 339, 338, 334, 342, 343, 344, 343, 344, 0, 343, 344, 336, 337, 0, 0, 0, 0, 0, 343, 344, 340, 345, 0, 345, 0, 0, 345, 339, 338, 346, 0, 346, 0, 0, 346, 345, 343, 347, 0, 347, 0, 0, 347, 346, 346, 348, 0, 348, 0, 0, 348, 347, 347, 345, 0, 349, 350, 349, 350, 348, 349, 350, 0, 343, 348, 0, 0, 0, 0, 349, 350, 346, 351, 352, 351, 352, 0, 351, 352, 347, 345, 0, 0, 0, 0, 0, 351, 352, 352, 350, 353, 348, 353, 0, 354, 353, 354, 0, 355, 354, 355, 0, 0, 355, 353, 351, 0, 0, 354, 356, 0, 356, 355, 0, 356, 352, 350, 354, 0, 357, 358, 357, 358, 356, 357, 358, 0, 0, 356, 0, 0, 0, 351, 357, 358, 359, 0, 359, 357, 0, 359, 0, 0, 360, 354, 360, 0, 0, 360, 359, 0, 0, 0, 0, 358, 356, 361, 360, 361, 0, 0, 361, 0, 359, 362, 357, 362, 0, 0, 362, 361, 363, 0, 363, 0, 0, 363, 360, 362, 362, 0, 358, 364, 0, 364, 363, 365, 364, 365, 361, 359, 365, 0, 367, 0, 367, 364, 368, 367, 368, 365, 0, 368, 369, 360, 369, 362, 367, 369, 0, 370, 368, 370, 0, 0, 370, 361, 369, 0, 0, 0, 0, 369, 368, 370, 0, 371, 367, 371, 0, 372, 371, 372, 370, 373, 372, 373, 0, 0, 373, 371, 374, 0, 374, 372, 371, 374, 0, 373, 369, 368, 375, 373, 375, 367, 374, 375, 376, 0, 376, 370, 377, 376, 377, 0, 375, 377, 0, 378, 0, 378, 376, 371, 378, 0, 377, 0, 0, 377, 373, 0, 0, 378, 375, 379, 380, 379, 380, 0, 379, 380, 0, 381, 0, 381, 0, 0, 381, 379, 380, 0, 378, 382, 0, 382, 377, 381, 382, 0, 381, 375, 0, 0, 383, 380, 383, 382, 384, 383, 384, 0, 385, 384, 385, 0, 0, 385, 383, 378, 0, 0, 384, 383, 0, 382, 385, 381, 386, 387, 386, 387, 380, 386, 387, 388, 0, 388, 0, 389, 388, 389, 386, 387, 389, 0, 384, 0, 0, 388, 383, 0, 382, 389, 388, 0, 386, 390, 0, 390, 389, 0, 390, 387, 391, 0, 391, 0, 0, 391, 392, 390, 392, 384, 0, 392, 0, 393, 391, 393, 0, 388, 393, 386, 392, 390, 0, 389, 0, 0, 387, 393, 392, 391, 0, 394, 393, 394, 0, 395, 394, 395, 0, 396, 395, 396, 0, 0, 396, 394, 0, 0, 390, 395, 394, 0, 397, 396, 397, 392, 391, 397, 0, 393, 0, 0, 0, 0, 0, 0, 397, 395, 396, 401, 401, 401, 401, 401, 401, 401, 401, 394, 399, 399, 399, 399, 399, 399, 399, 399, 399, 0, 0, 0, 0, 0, 0, 0, 395, 396, 400, 400, 400, 400, 400, 400, 400, 400, 400, 0, 399, 402, 402, 402, 402, 402, 402, 402, 402, 403, 403, 403, 403, 403, 403, 403, 403, 0, 400, 404, 404, 404, 404, 404, 404, 404, 404, 399, 405, 408, 405, 408, 0, 405, 408, 0, 403, 0, 0, 0, 0, 0, 405, 408, 0, 400, 404, 406, 406, 406, 406, 406, 406, 406, 406, 407, 407, 407, 407, 407, 407, 407, 407, 403, 409, 410, 409, 410, 0, 409, 410, 0, 0, 404, 406, 411, 0, 411, 409, 410, 411, 412, 407, 412, 0, 0, 412, 409, 413, 411, 413, 0, 0, 413, 414, 412, 414, 0, 410, 414, 0, 406, 413, 0, 0, 415, 0, 415, 414, 407, 415, 414, 0, 416, 409, 416, 0, 413, 416, 415, 0, 0, 0, 0, 0, 410, 417, 416, 417, 0, 416, 417, 418, 0, 418, 417, 0, 418, 414, 0, 417, 0, 0, 0, 413, 419, 418, 419, 0, 420, 419, 420, 0, 421, 420, 421, 0, 416, 421, 419, 0, 0, 0, 420, 422, 418, 422, 421, 419, 422, 423, 424, 423, 424, 0, 423, 424, 0, 422, 0, 0, 0, 0, 0, 423, 424, 421, 0, 425, 426, 425, 426, 418, 425, 426, 419, 427, 422, 427, 0, 424, 427, 425, 426, 0, 0, 425, 0, 0, 428, 427, 428, 426, 421, 428, 427, 431, 430, 431, 430, 0, 431, 430, 428, 422, 0, 0, 424, 0, 0, 431, 430, 432, 425, 432, 0, 433, 432, 433, 426, 430, 433, 427, 434, 0, 434, 432, 0, 434, 432, 433, 0, 0, 0, 435, 0, 435, 434, 436, 435, 436, 0, 0, 436, 437, 0, 437, 430, 435, 437, 433, 0, 436, 435, 0, 438, 432, 438, 437, 437, 438, 439, 440, 439, 440, 0, 439, 440, 441, 438, 441, 0, 0, 441, 0, 439, 440, 433, 0, 442, 435, 442, 441, 443, 442, 443, 437, 0, 443, 439, 444, 0, 444, 442, 0, 444, 440, 443, 445, 0, 445, 0, 441, 445, 444, 446, 447, 446, 447, 0, 446, 447, 445, 448, 0, 448, 439, 0, 448, 446, 447, 447, 0, 440, 444, 0, 449, 448, 449, 441, 450, 449, 450, 0, 448, 450, 451, 0, 451, 0, 449, 451, 0, 0, 450, 0, 0, 0, 447, 0, 451, 444, 452, 451, 452, 0, 450, 452, 0, 0, 449, 448, 453, 454, 453, 454, 452, 453, 454, 0, 460, 0, 460, 0, 0, 460, 453, 454, 0, 0, 451, 0, 0, 450, 460, 0, 0, 449, 461, 460, 461, 454, 462, 461, 462, 0, 463, 462, 463, 0, 0, 463, 461, 464, 0, 464, 462, 465, 464, 465, 463, 0, 465, 0, 0, 0, 460, 464, 454, 0, 0, 465, 463, 0, 466, 465, 466, 462, 464, 466, 467, 468, 467, 468, 0, 467, 468, 469, 466, 469, 0, 0, 469, 0, 467, 468, 0, 0, 470, 463, 470, 469, 465, 470, 462, 464, 471, 0, 471, 0, 0, 471, 470, 0, 467, 468, 0, 472, 0, 472, 471, 473, 472, 473, 0, 0, 473, 0, 0, 0, 470, 472, 0, 0, 472, 473, 0, 0, 475, 0, 475, 467, 468, 475, 476, 477, 476, 477, 0, 476, 477, 478, 475, 478, 0, 475, 478, 470, 476, 477, 0, 472, 0, 0, 477, 478, 479, 480, 479, 480, 476, 479, 480, 481, 482, 481, 482, 0, 481, 482, 479, 480, 475, 0, 483, 0, 483, 481, 482, 483, 0, 477, 479, 0, 0, 0, 481, 476, 483, 0, 484, 485, 484, 485, 0, 484, 485, 486, 0, 486, 0, 0, 486, 482, 484, 485, 0, 0, 0, 479, 0, 486, 486, 481, 0, 0, 484, 485, 487, 488, 487, 488, 0, 487, 488, 0, 489, 0, 489, 0, 482, 489, 487, 488, 0, 0, 0, 0, 0, 486, 489, 487, 0, 484, 485, 491, 492, 491, 492, 0, 491, 492, 493, 488, 493, 0, 494, 493, 494, 491, 492, 494, 495, 0, 495, 0, 493, 495, 487, 0, 494, 493, 0, 496, 492, 496, 495, 491, 496, 497, 488, 497, 0, 498, 497, 498, 0, 496, 498, 499, 0, 499, 496, 497, 499, 0, 0, 498, 493, 0, 501, 492, 501, 499, 491, 501, 502, 503, 502, 503, 0, 502, 503, 504, 501, 504, 0, 0, 504, 496, 502, 503, 0, 505, 0, 505, 0, 504, 505, 502, 506, 507, 506, 507, 0, 506, 507, 505, 0, 0, 0, 0, 0, 0, 506, 507, 507, 0, 508, 509, 508, 509, 505, 508, 509, 510, 502, 510, 0, 0, 510, 0, 508, 509, 0, 0, 511, 508, 511, 510, 513, 511, 513, 507, 0, 513, 0, 0, 0, 505, 511, 0, 0, 509, 513, 514, 515, 514, 515, 510, 514, 515, 0, 516, 508, 516, 0, 0, 516, 514, 515, 0, 0, 514, 517, 0, 517, 516, 0, 517, 509, 0, 518, 0, 518, 0, 510, 518, 517, 519, 0, 519, 0, 520, 519, 520, 518, 521, 520, 521, 514, 0, 521, 519, 517, 0, 519, 520, 0, 0, 518, 521, 524, 522, 524, 522, 521, 524, 522, 0, 525, 0, 525, 0, 0, 525, 524, 522, 0, 0, 0, 517, 522, 519, 525, 0, 526, 518, 526, 0, 0, 526, 527, 521, 527, 0, 528, 527, 528, 0, 526, 528, 0, 529, 525, 529, 527, 0, 529, 522, 528, 531, 0, 531, 0, 0, 531, 529, 532, 534, 532, 534, 0, 532, 534, 531, 527, 0, 0, 0, 0, 525, 532, 534, 531, 535, 534, 535, 0, 0, 535, 532, 537, 538, 537, 538, 0, 537, 538, 535, 0, 0, 535, 527, 0, 0, 537, 538, 0, 0, 0, 531, 0, 534, 0, 0, 0, 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 540, 540, 540, 540, 541, 0, 541, 541, 543, 0, 543, 543, 544, 544, 545, 0, 545, 545, 546, 0, 546, 546, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "frame/ds9lex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "frame/ds9lex.L" #include #include #include #include "util.h" #include "ds9parser.H" extern YYSTYPE* mklval; extern mkFlexLexer* mklexx; /* rules */ #line 1568 "frame/ds9lex.C" #define INITIAL 0 #define DISCARD 1 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 31 "frame/ds9lex.L" #line 1672 "frame/ds9lex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 540 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 539 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 33 "frame/ds9lex.L" { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(mklval->str,""); // feed a blank string return STRING; } YY_BREAK case 2: YY_RULE_SETUP #line 40 "frame/ds9lex.L" { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return STRING; } YY_BREAK case 3: YY_RULE_SETUP #line 48 "frame/ds9lex.L" {return AMPLIFIER_;} YY_BREAK case 4: YY_RULE_SETUP #line 49 "frame/ds9lex.L" {return ANNULUS_;} YY_BREAK case 5: YY_RULE_SETUP #line 50 "frame/ds9lex.L" {return ARCMIN_;} YY_BREAK case 6: YY_RULE_SETUP #line 51 "frame/ds9lex.L" {return ARCSEC_;} YY_BREAK case 7: YY_RULE_SETUP #line 52 "frame/ds9lex.L" {return ARROW_;} YY_BREAK case 8: YY_RULE_SETUP #line 53 "frame/ds9lex.L" {return B1950_;} YY_BREAK case 9: YY_RULE_SETUP #line 54 "frame/ds9lex.L" {return BACKGROUND_;} YY_BREAK case 10: YY_RULE_SETUP #line 55 "frame/ds9lex.L" {return BEGIN_;} YY_BREAK case 11: YY_RULE_SETUP #line 56 "frame/ds9lex.L" {return BOX_;} YY_BREAK case 12: YY_RULE_SETUP #line 57 "frame/ds9lex.L" {return BOXCIRCLE_;} YY_BREAK case 13: YY_RULE_SETUP #line 58 "frame/ds9lex.L" {return BPANDA_;} YY_BREAK case 14: YY_RULE_SETUP #line 59 "frame/ds9lex.L" {return CALLBACK_;} YY_BREAK case 15: YY_RULE_SETUP #line 60 "frame/ds9lex.L" {return CIRCLE_;} YY_BREAK case 16: YY_RULE_SETUP #line 61 "frame/ds9lex.L" {return CIRCLE3D_;} YY_BREAK case 17: YY_RULE_SETUP #line 62 "frame/ds9lex.L" {return COLOR_;} YY_BREAK case 18: YY_RULE_SETUP #line 63 "frame/ds9lex.L" {return COMPASS_;} YY_BREAK case 19: YY_RULE_SETUP #line 64 "frame/ds9lex.L" {return COMPOSITE_;} YY_BREAK case 20: YY_RULE_SETUP #line 65 "frame/ds9lex.L" {return CPANDA_;} YY_BREAK case 21: YY_RULE_SETUP #line 66 "frame/ds9lex.L" {return CROSS_;} YY_BREAK case 22: YY_RULE_SETUP #line 67 "frame/ds9lex.L" {return DASH_;} YY_BREAK case 23: YY_RULE_SETUP #line 68 "frame/ds9lex.L" {return DASHLIST_;} YY_BREAK case 24: YY_RULE_SETUP #line 69 "frame/ds9lex.L" {return DEBUG_;} YY_BREAK case 25: YY_RULE_SETUP #line 70 "frame/ds9lex.L" {return DEGREES_;} YY_BREAK case 26: YY_RULE_SETUP #line 71 "frame/ds9lex.L" {return DELETE_;} YY_BREAK case 27: YY_RULE_SETUP #line 72 "frame/ds9lex.L" {return DETECTOR_;} YY_BREAK case 28: YY_RULE_SETUP #line 73 "frame/ds9lex.L" {return DIAMOND_;} YY_BREAK case 29: YY_RULE_SETUP #line 74 "frame/ds9lex.L" {return EDIT_;} YY_BREAK case 30: YY_RULE_SETUP #line 75 "frame/ds9lex.L" {return ELLIPSE_;} YY_BREAK case 31: YY_RULE_SETUP #line 76 "frame/ds9lex.L" {return ECLIPTIC_;} YY_BREAK case 32: YY_RULE_SETUP #line 77 "frame/ds9lex.L" {return EPANDA_;} YY_BREAK case 33: YY_RULE_SETUP #line 78 "frame/ds9lex.L" {return END_;} YY_BREAK case 34: YY_RULE_SETUP #line 79 "frame/ds9lex.L" {return FALSE_;} YY_BREAK case 35: YY_RULE_SETUP #line 80 "frame/ds9lex.L" {return FIELD_;} YY_BREAK case 36: YY_RULE_SETUP #line 81 "frame/ds9lex.L" {return FIXED_;} YY_BREAK case 37: YY_RULE_SETUP #line 82 "frame/ds9lex.L" {return FK4_;} YY_BREAK case 38: YY_RULE_SETUP #line 83 "frame/ds9lex.L" {return FK4_NO_E_;} YY_BREAK case 39: YY_RULE_SETUP #line 84 "frame/ds9lex.L" {return FK5_;} YY_BREAK case 40: YY_RULE_SETUP #line 85 "frame/ds9lex.L" {return FONT_;} YY_BREAK case 41: YY_RULE_SETUP #line 86 "frame/ds9lex.L" {return GALACTIC_;} YY_BREAK case 42: YY_RULE_SETUP #line 87 "frame/ds9lex.L" {return GLOBAL_;} YY_BREAK case 43: YY_RULE_SETUP #line 88 "frame/ds9lex.L" {return HELIOECLIPTIC_;} YY_BREAK case 44: YY_RULE_SETUP #line 89 "frame/ds9lex.L" {return HIGHLITE_;} YY_BREAK case 45: YY_RULE_SETUP #line 90 "frame/ds9lex.L" {return ICRS_;} YY_BREAK case 46: YY_RULE_SETUP #line 91 "frame/ds9lex.L" {return IGNORE_;} YY_BREAK case 47: YY_RULE_SETUP #line 92 "frame/ds9lex.L" {return INCLUDE_;} YY_BREAK case 48: YY_RULE_SETUP #line 93 "frame/ds9lex.L" {return IMAGE_;} YY_BREAK case 49: YY_RULE_SETUP #line 94 "frame/ds9lex.L" {return KEY_;} YY_BREAK case 50: YY_RULE_SETUP #line 95 "frame/ds9lex.L" {return J2000_;} YY_BREAK case 51: YY_RULE_SETUP #line 96 "frame/ds9lex.L" {return LINE_;} YY_BREAK case 52: YY_RULE_SETUP #line 97 "frame/ds9lex.L" {return LINEAR_;} YY_BREAK case 53: YY_RULE_SETUP #line 98 "frame/ds9lex.L" {return MOVE_;} YY_BREAK case 54: YY_RULE_SETUP #line 99 "frame/ds9lex.L" {return N_;} YY_BREAK case 55: YY_RULE_SETUP #line 100 "frame/ds9lex.L" {return NO_;} YY_BREAK case 56: YY_RULE_SETUP #line 101 "frame/ds9lex.L" {return OFF_;} YY_BREAK case 57: YY_RULE_SETUP #line 102 "frame/ds9lex.L" {return ON_;} YY_BREAK case 58: YY_RULE_SETUP #line 103 "frame/ds9lex.L" {return CPANDA_;} YY_BREAK case 59: YY_RULE_SETUP #line 104 "frame/ds9lex.L" {return PHYSICAL_;} YY_BREAK case 60: YY_RULE_SETUP #line 105 "frame/ds9lex.L" {return PIE_;} YY_BREAK case 61: YY_RULE_SETUP #line 106 "frame/ds9lex.L" {return PIXELS_;} YY_BREAK case 62: YY_RULE_SETUP #line 107 "frame/ds9lex.L" {return POINT_;} YY_BREAK case 63: YY_RULE_SETUP #line 108 "frame/ds9lex.L" {return POLYGON_;} YY_BREAK case 64: YY_RULE_SETUP #line 109 "frame/ds9lex.L" {return PROJECTION_;} YY_BREAK case 65: YY_RULE_SETUP #line 110 "frame/ds9lex.L" {return PROPERTY_;} YY_BREAK case 66: YY_RULE_SETUP #line 111 "frame/ds9lex.L" {return ROTATE_;} YY_BREAK case 67: YY_RULE_SETUP #line 112 "frame/ds9lex.L" {return ROTBOX_;} YY_BREAK case 68: YY_RULE_SETUP #line 113 "frame/ds9lex.L" {return RULER_;} YY_BREAK case 69: YY_RULE_SETUP #line 114 "frame/ds9lex.L" {return SELECT_;} YY_BREAK case 70: YY_RULE_SETUP #line 115 "frame/ds9lex.L" {return SEGMENT_;} YY_BREAK case 71: YY_RULE_SETUP #line 116 "frame/ds9lex.L" {return SOURCE_;} YY_BREAK case 72: YY_RULE_SETUP #line 117 "frame/ds9lex.L" {return SUPERGALACTIC_;} YY_BREAK case 73: YY_RULE_SETUP #line 118 "frame/ds9lex.L" {return TAG_;} YY_BREAK case 74: YY_RULE_SETUP #line 119 "frame/ds9lex.L" {return TEXT_;} YY_BREAK case 75: YY_RULE_SETUP #line 120 "frame/ds9lex.L" {return TEXTANGLE_;} YY_BREAK case 76: YY_RULE_SETUP #line 121 "frame/ds9lex.L" {return TEXTROTATE_;} YY_BREAK case 77: YY_RULE_SETUP #line 122 "frame/ds9lex.L" {return TILE_;} YY_BREAK case 78: YY_RULE_SETUP #line 123 "frame/ds9lex.L" {return TRUE_;} YY_BREAK case 79: YY_RULE_SETUP #line 124 "frame/ds9lex.L" {return VECTOR_;} YY_BREAK case 80: YY_RULE_SETUP #line 125 "frame/ds9lex.L" {return VERSION_;} YY_BREAK case 81: YY_RULE_SETUP #line 126 "frame/ds9lex.L" {return UPDATE_;} YY_BREAK case 82: YY_RULE_SETUP #line 127 "frame/ds9lex.L" {return UNHIGHLITE_;} YY_BREAK case 83: YY_RULE_SETUP #line 128 "frame/ds9lex.L" {return UNSELECT_;} YY_BREAK case 84: YY_RULE_SETUP #line 129 "frame/ds9lex.L" {return WCS_;} YY_BREAK case 85: YY_RULE_SETUP #line 130 "frame/ds9lex.L" {return WCSA_;} YY_BREAK case 86: YY_RULE_SETUP #line 131 "frame/ds9lex.L" {return WCSB_;} YY_BREAK case 87: YY_RULE_SETUP #line 132 "frame/ds9lex.L" {return WCSC_;} YY_BREAK case 88: YY_RULE_SETUP #line 133 "frame/ds9lex.L" {return WCSD_;} YY_BREAK case 89: YY_RULE_SETUP #line 134 "frame/ds9lex.L" {return WCSE_;} YY_BREAK case 90: YY_RULE_SETUP #line 135 "frame/ds9lex.L" {return WCSF_;} YY_BREAK case 91: YY_RULE_SETUP #line 136 "frame/ds9lex.L" {return WCSG_;} YY_BREAK case 92: YY_RULE_SETUP #line 137 "frame/ds9lex.L" {return WCSH_;} YY_BREAK case 93: YY_RULE_SETUP #line 138 "frame/ds9lex.L" {return WCSI_;} YY_BREAK case 94: YY_RULE_SETUP #line 139 "frame/ds9lex.L" {return WCSJ_;} YY_BREAK case 95: YY_RULE_SETUP #line 140 "frame/ds9lex.L" {return WCSK_;} YY_BREAK case 96: YY_RULE_SETUP #line 141 "frame/ds9lex.L" {return WCSL_;} YY_BREAK case 97: YY_RULE_SETUP #line 142 "frame/ds9lex.L" {return WCSM_;} YY_BREAK case 98: YY_RULE_SETUP #line 143 "frame/ds9lex.L" {return WCSN_;} YY_BREAK case 99: YY_RULE_SETUP #line 144 "frame/ds9lex.L" {return WCSO_;} YY_BREAK case 100: YY_RULE_SETUP #line 145 "frame/ds9lex.L" {return WCSP_;} YY_BREAK case 101: YY_RULE_SETUP #line 146 "frame/ds9lex.L" {return WCSQ_;} YY_BREAK case 102: YY_RULE_SETUP #line 147 "frame/ds9lex.L" {return WCSR_;} YY_BREAK case 103: YY_RULE_SETUP #line 148 "frame/ds9lex.L" {return WCSS_;} YY_BREAK case 104: YY_RULE_SETUP #line 149 "frame/ds9lex.L" {return WCST_;} YY_BREAK case 105: YY_RULE_SETUP #line 150 "frame/ds9lex.L" {return WCSU_;} YY_BREAK case 106: YY_RULE_SETUP #line 151 "frame/ds9lex.L" {return WCSV_;} YY_BREAK case 107: YY_RULE_SETUP #line 152 "frame/ds9lex.L" {return WCSW_;} YY_BREAK case 108: YY_RULE_SETUP #line 153 "frame/ds9lex.L" {return WCSX_;} YY_BREAK case 109: YY_RULE_SETUP #line 154 "frame/ds9lex.L" {return WCSY_;} YY_BREAK case 110: YY_RULE_SETUP #line 155 "frame/ds9lex.L" {return WCSZ_;} YY_BREAK case 111: YY_RULE_SETUP #line 156 "frame/ds9lex.L" {return WCS0_;} YY_BREAK case 112: YY_RULE_SETUP #line 157 "frame/ds9lex.L" {return WIDTH_;} YY_BREAK case 113: YY_RULE_SETUP #line 158 "frame/ds9lex.L" {return X_;} YY_BREAK case 114: YY_RULE_SETUP #line 159 "frame/ds9lex.L" {return Y_;} YY_BREAK case 115: YY_RULE_SETUP #line 160 "frame/ds9lex.L" {return YES_;} YY_BREAK case 116: YY_RULE_SETUP #line 163 "frame/ds9lex.L" { // Integer mklval->integer = atoi(yytext); return INT; } YY_BREAK case 117: #line 169 "frame/ds9lex.L" case 118: YY_RULE_SETUP #line 169 "frame/ds9lex.L" { // Real Number mklval->real = atof(yytext); return REAL; } YY_BREAK case 119: #line 175 "frame/ds9lex.L" case 120: YY_RULE_SETUP #line 175 "frame/ds9lex.L" { // degrees yytext[yyleng-1] = '\0'; mklval->real = atof(yytext); return ANGDEGREE; } YY_BREAK case 121: #line 182 "frame/ds9lex.L" case 122: YY_RULE_SETUP #line 182 "frame/ds9lex.L" { // radians yytext[yyleng-1] = '\0'; mklval->real = atof(yytext); return ANGRADIAN; } YY_BREAK case 123: #line 189 "frame/ds9lex.L" case 124: YY_RULE_SETUP #line 189 "frame/ds9lex.L" { // physical coords yytext[yyleng-1] = '\0'; mklval->real = atof(yytext); return PHYCOORD; } YY_BREAK case 125: #line 196 "frame/ds9lex.L" case 126: YY_RULE_SETUP #line 196 "frame/ds9lex.L" { // image coords yytext[yyleng-1] = '\0'; mklval->real = atof(yytext); return IMGCOORD; } YY_BREAK case 127: #line 203 "frame/ds9lex.L" case 128: #line 204 "frame/ds9lex.L" case 129: #line 205 "frame/ds9lex.L" case 130: YY_RULE_SETUP #line 205 "frame/ds9lex.L" { // minutes of arc yytext[yyleng-1] = '\0'; mklval->real = atof(yytext); return ARCMINUTE; } YY_BREAK case 131: #line 212 "frame/ds9lex.L" case 132: #line 213 "frame/ds9lex.L" case 133: #line 214 "frame/ds9lex.L" case 134: YY_RULE_SETUP #line 214 "frame/ds9lex.L" { // seconds of arc yytext[yyleng-1] = '\0'; mklval->real = atof(yytext); return ARCSECOND; } YY_BREAK case 135: #line 221 "frame/ds9lex.L" case 136: YY_RULE_SETUP #line 221 "frame/ds9lex.L" { // Sexagesimal int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return SEXSTR; } YY_BREAK case 137: #line 229 "frame/ds9lex.L" case 138: YY_RULE_SETUP #line 229 "frame/ds9lex.L" { // HMS int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return HMSSTR; } YY_BREAK case 139: #line 237 "frame/ds9lex.L" case 140: YY_RULE_SETUP #line 237 "frame/ds9lex.L" { // DMS int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return DMSSTR; } YY_BREAK case 141: YY_RULE_SETUP #line 244 "frame/ds9lex.L" { // 8 bit Hex Color int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return STRING; } YY_BREAK case 142: YY_RULE_SETUP #line 251 "frame/ds9lex.L" { // 16 bit Hex Color int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return STRING; } YY_BREAK case 143: YY_RULE_SETUP #line 258 "frame/ds9lex.L" { // 32 bit Hex Color int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return STRING; } YY_BREAK case 144: #line 266 "frame/ds9lex.L" case 145: YY_RULE_SETUP #line 266 "frame/ds9lex.L" { // Quoted String int ll = (yyleng-2)<(MKBUFSIZE-1) ? (yyleng-2):(MKBUFSIZE-1); strncpy(mklval->str,yytext+1,ll); // skip the " " mklval->str[ll] = '\0'; // Remove the '"' return STRING; } YY_BREAK case 146: YY_RULE_SETUP #line 273 "frame/ds9lex.L" { // Quoted String int ll = (yyleng-2)<(MKBUFSIZE-1) ? (yyleng-2):(MKBUFSIZE-1); strncpy(mklval->str,yytext+1,ll); // skip the '{' mklval->str[ll] = '\0'; // Remove the '}' return STRING; } YY_BREAK case 147: YY_RULE_SETUP #line 280 "frame/ds9lex.L" { // General String int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return STRING; } YY_BREAK case 148: YY_RULE_SETUP #line 287 "frame/ds9lex.L" { // White Spaces } YY_BREAK case 149: /* rule 149 can match eol */ YY_RULE_SETUP #line 290 "frame/ds9lex.L" { // windows line feed return '\n'; } YY_BREAK case 150: YY_RULE_SETUP #line 294 "frame/ds9lex.L" { // fake line feed return '\n'; } YY_BREAK case 151: /* rule 151 can match eol */ YY_RULE_SETUP #line 298 "frame/ds9lex.L" { // linefeed return '\n'; } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(DISCARD): #line 302 "frame/ds9lex.L" { // eof return EOF_; } YY_BREAK case 152: YY_RULE_SETUP #line 306 "frame/ds9lex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 153: YY_RULE_SETUP #line 310 "frame/ds9lex.L" ECHO; YY_BREAK #line 2576 "frame/ds9lex.C" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; mkfree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); mkfree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ mkrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) mkrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 540 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 540 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 539); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) mkalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) mkalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) mkfree((void *) b->yy_ch_buf ); mkfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)mkalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)mkrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) mkalloc(new_size ); else (yy_start_stack) = (int *) mkrealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *mkalloc (yy_size_t size ) { return (void *) malloc( size ); } void *mkrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void mkfree (void * ptr ) { free( (char *) ptr ); /* see mkrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 310 "frame/ds9lex.L" void mkDiscard(int doit) { if (mklexx) mklexx->begin(DISCARD, doit); } void mkFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/frame/ds9lex.L000644 000765 000000 00000016104 12705446247 016141 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "util.h" #include "ds9parser.H" extern YYSTYPE* mklval; extern mkFlexLexer* mklexx; %} %x DISCARD D [0-9] E [Ee][+-]?{D}+ H [0-9a-fA-F] /* rules */ %% [\n] { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(mklval->str,""); // feed a blank string return STRING; } [^\n]* { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return STRING; } amplifier {return AMPLIFIER_;} ann[u][l][u][s] {return ANNULUS_;} arcmin {return ARCMIN_;} arcsec {return ARCSEC_;} arrow {return ARROW_;} b1950 {return B1950_;} background {return BACKGROUND_;} begin {return BEGIN_;} box {return BOX_;} boxcircle {return BOXCIRCLE_;} bpanda {return BPANDA_;} callback {return CALLBACK_;} cir[c][l][e] {return CIRCLE_;} circle3d {return CIRCLE3D_;} color {return COLOR_;} compass {return COMPASS_;} composite {return COMPOSITE_;} cpanda {return CPANDA_;} cross {return CROSS_;} dash {return DASH_;} dashlist {return DASHLIST_;} debug {return DEBUG_;} degrees {return DEGREES_;} delete {return DELETE_;} detector {return DETECTOR_;} diamond {return DIAMOND_;} edit {return EDIT_;} ell[i][p][s][e] {return ELLIPSE_;} ecliptic {return ECLIPTIC_;} epanda {return EPANDA_;} end {return END_;} false {return FALSE_;} fie[l][d] {return FIELD_;} fixed {return FIXED_;} fk4 {return FK4_;} fk4-no-e {return FK4_NO_E_;} fk5 {return FK5_;} font {return FONT_;} galactic {return GALACTIC_;} global {return GLOBAL_;} helioecliptic {return HELIOECLIPTIC_;} highlite {return HIGHLITE_;} icrs {return ICRS_;} ignore {return IGNORE_;} include {return INCLUDE_;} image {return IMAGE_;} key {return KEY_;} j2000 {return J2000_;} lin[e] {return LINE_;} linear {return LINEAR_;} move {return MOVE_;} n {return N_;} no {return NO_;} off {return OFF_;} on {return ON_;} panda {return CPANDA_;} physical {return PHYSICAL_;} pie {return PIE_;} pixels {return PIXELS_;} poi[n][t] {return POINT_;} pol[y][g][o][n] {return POLYGON_;} projection {return PROJECTION_;} property {return PROPERTY_;} rotate {return ROTATE_;} rotbox {return ROTBOX_;} ruler {return RULER_;} select {return SELECT_;} segment {return SEGMENT_;} source {return SOURCE_;} supergalactic {return SUPERGALACTIC_;} tag {return TAG_;} text {return TEXT_;} textangle {return TEXTANGLE_;} textrotate {return TEXTROTATE_;} tile {return TILE_;} true {return TRUE_;} vector {return VECTOR_;} version {return VERSION_;} update {return UPDATE_;} unhighlite {return UNHIGHLITE_;} unselect {return UNSELECT_;} wcs {return WCS_;} wcsa {return WCSA_;} wcsb {return WCSB_;} wcsc {return WCSC_;} wcsd {return WCSD_;} wcse {return WCSE_;} wcsf {return WCSF_;} wcsg {return WCSG_;} wcsh {return WCSH_;} wcsi {return WCSI_;} wcsj {return WCSJ_;} wcsk {return WCSK_;} wcsl {return WCSL_;} wcsm {return WCSM_;} wcsn {return WCSN_;} wcso {return WCSO_;} wcsp {return WCSP_;} wcsq {return WCSQ_;} wcsr {return WCSR_;} wcss {return WCSS_;} wcst {return WCST_;} wcsu {return WCSU_;} wcsv {return WCSV_;} wcsw {return WCSW_;} wcsx {return WCSX_;} wcsy {return WCSY_;} wcsz {return WCSZ_;} wcs0 {return WCS0_;} width {return WIDTH_;} x {return X_;} y {return Y_;} yes {return YES_;} [+-]?{D}+ { // Integer mklval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number mklval->real = atof(yytext); return REAL; } [+-]?{D}+"."?d | [+-]?{D}*"."{D}+d { // degrees yytext[yyleng-1] = '\0'; mklval->real = atof(yytext); return ANGDEGREE; } [+-]?{D}+"."?r | [+-]?{D}*"."{D}+r { // radians yytext[yyleng-1] = '\0'; mklval->real = atof(yytext); return ANGRADIAN; } [+-]?{D}+"."?p | [+-]?{D}*"."{D}+p { // physical coords yytext[yyleng-1] = '\0'; mklval->real = atof(yytext); return PHYCOORD; } [+-]?{D}+"."?i | [+-]?{D}*"."{D}+i { // image coords yytext[yyleng-1] = '\0'; mklval->real = atof(yytext); return IMGCOORD; } {D}+"."?' | {D}*"."{D}+' | [+-]?{D}+"."?({E})?' | [+-]?{D}*"."{D}+({E})?' { // minutes of arc yytext[yyleng-1] = '\0'; mklval->real = atof(yytext); return ARCMINUTE; } {D}+"."?\" | {D}*"."{D}+\" | [+-]?{D}+"."?({E})?\" | [+-]?{D}*"."{D}+({E})?\" { // seconds of arc yytext[yyleng-1] = '\0'; mklval->real = atof(yytext); return ARCSECOND; } [+-]?{D}+:{D}+:{D}+"."? | [+-]?{D}+:{D}+:{D}*"."{D}+ { // Sexagesimal int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return SEXSTR; } [+-]?{D}+h{D}+m{D}+"."?s | [+-]?{D}+h{D}+m{D}*"."{D}+s { // HMS int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return HMSSTR; } [+-]?{D}+d{D}+m{D}+"."?s | [+-]?{D}+d{D}+m{D}*"."{D}+s { // DMS int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return DMSSTR; } #({H}){3} { // 8 bit Hex Color int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return STRING; } #({H}){6} { // 16 bit Hex Color int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return STRING; } #({H}){12} { // 32 bit Hex Color int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return STRING; } \"[^\"\n]*\" | \'[^\'\n]*\' { // Quoted String int ll = (yyleng-2)<(MKBUFSIZE-1) ? (yyleng-2):(MKBUFSIZE-1); strncpy(mklval->str,yytext+1,ll); // skip the " " mklval->str[ll] = '\0'; // Remove the '"' return STRING; } \{[^\}\n]*\} { // Quoted String int ll = (yyleng-2)<(MKBUFSIZE-1) ? (yyleng-2):(MKBUFSIZE-1); strncpy(mklval->str,yytext+1,ll); // skip the '{' mklval->str[ll] = '\0'; // Remove the '}' return STRING; } [0-9A-Za-z]+ { // General String int ll = yyleng <(MKBUFSIZE-1) ? yyleng:(MKBUFSIZE-1); strncpy(mklval->str,yytext,ll); mklval->str[ll] = '\0'; return STRING; } [ \t]+ { // White Spaces } \r\n { // windows line feed return '\n'; } \\n { // fake line feed return '\n'; } \n { // linefeed return '\n'; } <> { // eof return EOF_; } . { // Else, return the char return yytext[0]; } %% void mkDiscard(int doit) { if (mklexx) mklexx->begin(DISCARD, doit); } void mkFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/frame/ds9parser.C000644 000765 000000 00000543167 12761117102 016635 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse mkparse #define yylex mklex #define yyerror mkerror #define yylval mklval #define yychar mkchar #define yydebug mkdebug #define yynerrs mknerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, STRING = 260, COLOR = 261, ANGDEGREE = 262, ANGRADIAN = 263, ARCMINUTE = 264, ARCSECOND = 265, PHYCOORD = 266, IMGCOORD = 267, SEXSTR = 268, HMSSTR = 269, DMSSTR = 270, EOF_ = 271, AMPLIFIER_ = 272, ANNULUS_ = 273, ARCMIN_ = 274, ARCSEC_ = 275, ARROW_ = 276, B1950_ = 277, BACKGROUND_ = 278, BEGIN_ = 279, BOX_ = 280, BOXCIRCLE_ = 281, BPANDA_ = 282, CALLBACK_ = 283, CIRCLE_ = 284, CIRCLE3D_ = 285, COLOR_ = 286, COMPASS_ = 287, COMPOSITE_ = 288, CPANDA_ = 289, CROSS_ = 290, DASH_ = 291, DASHLIST_ = 292, DEBUG_ = 293, DEGREES_ = 294, DELETE_ = 295, DETECTOR_ = 296, DIAMOND_ = 297, ECLIPTIC_ = 298, EDIT_ = 299, ELLIPSE_ = 300, END_ = 301, EPANDA_ = 302, FALSE_ = 303, FIELD_ = 304, FIXED_ = 305, FK4_ = 306, FK4_NO_E_ = 307, FK5_ = 308, FONT_ = 309, GALACTIC_ = 310, GLOBAL_ = 311, HELIOECLIPTIC_ = 312, HIGHLITE_ = 313, ICRS_ = 314, IGNORE_ = 315, IMAGE_ = 316, INCLUDE_ = 317, J2000_ = 318, KEY_ = 319, LINE_ = 320, LINEAR_ = 321, MOVE_ = 322, N_ = 323, NO_ = 324, OFF_ = 325, ON_ = 326, PHYSICAL_ = 327, PIE_ = 328, PIXELS_ = 329, POINT_ = 330, POLYGON_ = 331, PROJECTION_ = 332, PROPERTY_ = 333, ROTATE_ = 334, ROTBOX_ = 335, RULER_ = 336, SEGMENT_ = 337, SELECT_ = 338, SOURCE_ = 339, SUPERGALACTIC_ = 340, TAG_ = 341, TEXT_ = 342, TEXTANGLE_ = 343, TEXTROTATE_ = 344, TILE_ = 345, TRUE_ = 346, VECTOR_ = 347, VERSION_ = 348, UNHIGHLITE_ = 349, UNSELECT_ = 350, UPDATE_ = 351, WCS_ = 352, WCSA_ = 353, WCSB_ = 354, WCSC_ = 355, WCSD_ = 356, WCSE_ = 357, WCSF_ = 358, WCSG_ = 359, WCSH_ = 360, WCSI_ = 361, WCSJ_ = 362, WCSK_ = 363, WCSL_ = 364, WCSM_ = 365, WCSN_ = 366, WCSO_ = 367, WCSP_ = 368, WCSQ_ = 369, WCSR_ = 370, WCSS_ = 371, WCST_ = 372, WCSU_ = 373, WCSV_ = 374, WCSW_ = 375, WCSX_ = 376, WCSY_ = 377, WCSZ_ = 378, WCS0_ = 379, WIDTH_ = 380, X_ = 381, Y_ = 382, YES_ = 383 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define STRING 260 #define COLOR 261 #define ANGDEGREE 262 #define ANGRADIAN 263 #define ARCMINUTE 264 #define ARCSECOND 265 #define PHYCOORD 266 #define IMGCOORD 267 #define SEXSTR 268 #define HMSSTR 269 #define DMSSTR 270 #define EOF_ 271 #define AMPLIFIER_ 272 #define ANNULUS_ 273 #define ARCMIN_ 274 #define ARCSEC_ 275 #define ARROW_ 276 #define B1950_ 277 #define BACKGROUND_ 278 #define BEGIN_ 279 #define BOX_ 280 #define BOXCIRCLE_ 281 #define BPANDA_ 282 #define CALLBACK_ 283 #define CIRCLE_ 284 #define CIRCLE3D_ 285 #define COLOR_ 286 #define COMPASS_ 287 #define COMPOSITE_ 288 #define CPANDA_ 289 #define CROSS_ 290 #define DASH_ 291 #define DASHLIST_ 292 #define DEBUG_ 293 #define DEGREES_ 294 #define DELETE_ 295 #define DETECTOR_ 296 #define DIAMOND_ 297 #define ECLIPTIC_ 298 #define EDIT_ 299 #define ELLIPSE_ 300 #define END_ 301 #define EPANDA_ 302 #define FALSE_ 303 #define FIELD_ 304 #define FIXED_ 305 #define FK4_ 306 #define FK4_NO_E_ 307 #define FK5_ 308 #define FONT_ 309 #define GALACTIC_ 310 #define GLOBAL_ 311 #define HELIOECLIPTIC_ 312 #define HIGHLITE_ 313 #define ICRS_ 314 #define IGNORE_ 315 #define IMAGE_ 316 #define INCLUDE_ 317 #define J2000_ 318 #define KEY_ 319 #define LINE_ 320 #define LINEAR_ 321 #define MOVE_ 322 #define N_ 323 #define NO_ 324 #define OFF_ 325 #define ON_ 326 #define PHYSICAL_ 327 #define PIE_ 328 #define PIXELS_ 329 #define POINT_ 330 #define POLYGON_ 331 #define PROJECTION_ 332 #define PROPERTY_ 333 #define ROTATE_ 334 #define ROTBOX_ 335 #define RULER_ 336 #define SEGMENT_ 337 #define SELECT_ 338 #define SOURCE_ 339 #define SUPERGALACTIC_ 340 #define TAG_ 341 #define TEXT_ 342 #define TEXTANGLE_ 343 #define TEXTROTATE_ 344 #define TILE_ 345 #define TRUE_ 346 #define VECTOR_ 347 #define VERSION_ 348 #define UNHIGHLITE_ 349 #define UNSELECT_ 350 #define UPDATE_ 351 #define WCS_ 352 #define WCSA_ 353 #define WCSB_ 354 #define WCSC_ 355 #define WCSD_ 356 #define WCSE_ 357 #define WCSF_ 358 #define WCSG_ 359 #define WCSH_ 360 #define WCSI_ 361 #define WCSJ_ 362 #define WCSK_ 363 #define WCSL_ 364 #define WCSM_ 365 #define WCSN_ 366 #define WCSO_ 367 #define WCSP_ 368 #define WCSQ_ 369 #define WCSR_ 370 #define WCSS_ 371 #define WCST_ 372 #define WCSU_ 373 #define WCSV_ 374 #define WCSW_ 375 #define WCSX_ 376 #define WCSY_ 377 #define WCSZ_ 378 #define WCS0_ 379 #define WIDTH_ 380 #define X_ 381 #define Y_ 382 #define YES_ 383 /* Copy the first part of user declarations. */ #line 10 "frame/ds9parser.Y" #define YYDEBUG 1 #define FITSPTR (fr->findFits(globalTile)) #define DISCARD_(x) {yyclearin; mkDiscard(x);} #include #include #include #include "base.h" #include "fitsimage.h" #include "basemarker.h" #include "point.h" #undef yyFlexLexer #define yyFlexLexer mkFlexLexer #include extern int mklex(void*, mkFlexLexer*); extern void mkerror(Base*, mkFlexLexer*, const char*); extern void mkDiscard(int); static Coord::CoordSystem globalWCS; static Coord::CoordSystem globalSystem; static Coord::CoordSystem localSystem; static Coord::SkyFrame globalSky; static Coord::SkyFrame localSky; static int globalTile; static unsigned short globalProps; static unsigned short localProps; static int globalDash[2]; static int localDash[2]; static int globalWidth; static int localWidth; static char globalColor[16]; static char localColor[16]; static char globalFont[32]; static char localFont[32]; static char globalText[80]; static char localText[80]; static char localComment[80]; static int globalLine1; static int localLine1; static int globalLine2; static int localLine2; static int globalVector; static int localVector; static int globalComposite; static int localComposite; static int globalPoint; static int localPoint; static int globalPointSize; static int localPointSize; static double globalTextAngle; static double localTextAngle; static int globalTextRotate; static int localTextRotate; static Coord::CoordSystem globalRulerCoordSystem; static Coord::CoordSystem localRulerCoordSystem; static Coord::SkyFrame globalRulerSkyFrame; static Coord::SkyFrame localRulerSkyFrame; static Coord::CoordSystem globalRulerDistSystem; static Coord::CoordSystem localRulerDistSystem; static Coord::SkyDist globalRulerDistFormat; static Coord::SkyDist localRulerDistFormat; static Coord::CoordSystem globalCompassCoordSystem; static Coord::SkyFrame globalCompassSkyFrame; static char globalCompassNorth[80]; static char globalCompassEast[80]; static int globalCompassNArrow; static int globalCompassEArrow; static Coord::CoordSystem localCompassCoordSystem; static Coord::SkyFrame localCompassSkyFrame; static char localCompassNorth[80]; static char localCompassEast[80]; static int localCompassNArrow; static int localCompassEArrow; static int localCpanda; static int localEpanda; static int localBpanda; static List polylist; static List taglist; static List cblist; static double aAnnuli[MAXANNULI]; static Vector aVector[MAXANNULI]; static int aNum; static int aNumsao; static int aStatus; static int cStatus; static Vector aCenter; static double aAngles[MAXANGLES]; static int aAngNum; static double aAngle; static unsigned short aProps; static char aColor[16]; static int aWidth; static int aDash[2]; static char aFont[32]; static char aText[80]; static char aComment[80]; static void setProps(unsigned short* props, unsigned short prop, int value); static Coord::CoordSystem checkWCSSystem(); static Coord::SkyFrame checkWCSSky(); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 136 "frame/ds9parser.Y" { #define MKBUFSIZE 2048 double real; int integer; char str[MKBUFSIZE]; double vector[3]; } /* Line 193 of yacc.c. */ #line 494 "frame/ds9parser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 507 "frame/ds9parser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 2735 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 141 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 73 /* YYNRULES -- Number of rules. */ #define YYNRULES 326 /* YYNRULES -- Number of states. */ #define YYNSTATES 841 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 383 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 130, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 140, 2, 129, 2, 2, 139, 2, 133, 134, 2, 137, 132, 138, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 131, 2, 136, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 135, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 7, 11, 14, 15, 18, 20, 24, 27, 28, 32, 33, 37, 38, 42, 45, 49, 53, 55, 58, 61, 62, 65, 66, 67, 71, 73, 74, 79, 83, 84, 90, 92, 93, 97, 100, 101, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 139, 141, 142, 144, 145, 147, 148, 150, 153, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 178, 182, 186, 190, 194, 198, 202, 204, 206, 208, 212, 216, 220, 224, 228, 232, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 359, 361, 364, 367, 369, 372, 375, 377, 380, 382, 384, 386, 388, 390, 392, 394, 396, 400, 402, 406, 410, 415, 419, 423, 427, 429, 431, 433, 437, 442, 447, 451, 455, 459, 467, 471, 475, 479, 484, 487, 490, 493, 496, 499, 502, 504, 506, 509, 511, 513, 515, 516, 520, 522, 526, 530, 535, 539, 543, 547, 551, 557, 559, 561, 563, 567, 572, 577, 581, 585, 589, 597, 601, 605, 609, 613, 617, 622, 625, 628, 631, 634, 637, 640, 642, 644, 647, 649, 651, 653, 654, 662, 664, 665, 676, 678, 679, 690, 692, 693, 695, 697, 699, 701, 703, 705, 707, 709, 711, 722, 723, 731, 738, 747, 756, 767, 776, 785, 794, 803, 814, 825, 836, 837, 845, 846, 854, 863, 874, 881, 882, 892, 899, 907, 915, 923, 931, 939, 947, 955, 964, 973, 984, 995, 1008, 1021, 1034, 1049, 1064, 1083, 1096, 1111, 1126, 1145, 1164, 1185, 1206, 1217, 1230, 1243, 1249, 1258, 1262, 1264, 1266, 1270, 1272, 1274, 1278, 1280, 1282, 1286, 1288, 1292 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { 142, 0, -1, 185, 143, 213, -1, 143, 144, 158, -1, 144, 158, -1, -1, 38, 160, -1, 93, -1, 56, 181, 150, -1, 90, 3, -1, -1, 175, 145, 150, -1, -1, 177, 146, 150, -1, -1, 66, 147, 150, -1, 196, 201, -1, 196, 198, 201, -1, 196, 129, 148, -1, 199, -1, 198, 199, -1, 90, 3, -1, -1, 149, 5, -1, -1, -1, 129, 151, 5, -1, 213, -1, -1, 129, 153, 5, 213, -1, 129, 186, 213, -1, -1, 129, 186, 154, 5, 213, -1, 213, -1, -1, 156, 5, 213, -1, 186, 213, -1, -1, 186, 157, 5, 213, -1, 130, -1, 131, -1, 16, -1, 4, -1, 3, -1, 71, -1, 70, -1, 3, -1, 128, -1, 127, -1, 71, -1, 91, -1, 69, -1, 68, -1, 70, -1, 48, -1, -1, 132, -1, -1, 133, -1, -1, 134, -1, -1, 135, -1, 135, 135, -1, -1, 167, -1, 159, -1, 7, -1, 8, -1, 159, -1, 11, -1, 12, -1, 7, -1, 9, -1, 10, -1, 159, 162, 159, -1, 11, 162, 11, -1, 12, 162, 12, -1, 7, 162, 7, -1, 9, 162, 9, -1, 10, 162, 10, -1, 68, 136, 3, -1, 13, -1, 14, -1, 15, -1, 171, 162, 171, -1, 172, 162, 173, -1, 173, 162, 173, -1, 159, 162, 159, -1, 7, 162, 7, -1, 12, 162, 12, -1, 11, 162, 11, -1, 61, -1, 72, -1, 41, -1, 17, -1, 176, -1, 97, -1, 98, -1, 99, -1, 100, -1, 101, -1, 102, -1, 103, -1, 104, -1, 105, -1, 106, -1, 107, -1, 108, -1, 109, -1, 110, -1, 111, -1, 112, -1, 113, -1, 114, -1, 115, -1, 116, -1, 117, -1, 118, -1, 119, -1, 120, -1, 121, -1, 122, -1, 123, -1, 124, -1, 51, -1, 22, -1, 52, -1, 53, -1, 63, -1, 59, -1, 55, -1, 85, -1, 43, -1, 57, -1, 39, -1, 19, -1, 20, -1, 83, -1, 58, -1, 36, -1, 50, -1, 44, -1, 67, -1, 79, -1, 40, -1, 62, -1, 84, -1, 83, -1, 95, -1, 58, -1, 94, -1, 24, 67, -1, 67, -1, 46, 67, -1, 24, 44, -1, 44, -1, 46, 44, -1, 24, 79, -1, 79, -1, 46, 79, -1, 40, -1, 87, -1, 31, -1, 125, -1, 78, -1, 54, -1, 64, -1, 96, -1, 181, 162, 182, -1, 182, -1, 179, 136, 161, -1, 31, 136, 5, -1, 37, 136, 3, 3, -1, 125, 136, 3, -1, 54, 136, 5, -1, 87, 136, 5, -1, 36, -1, 84, -1, 23, -1, 75, 136, 197, -1, 75, 136, 197, 3, -1, 65, 136, 3, 3, -1, 92, 136, 3, -1, 33, 136, 3, -1, 81, 136, 183, -1, 32, 136, 184, 5, 5, 3, 3, -1, 88, 136, 167, -1, 89, 136, 3, -1, 97, 136, 176, -1, 175, 177, 175, 178, -1, 175, 175, -1, 175, 178, -1, 177, 175, -1, 177, 178, -1, 66, 175, -1, 66, 178, -1, 178, -1, 74, -1, 175, 177, -1, 175, -1, 177, -1, 66, -1, -1, 186, 162, 187, -1, 187, -1, 179, 136, 161, -1, 31, 136, 5, -1, 37, 136, 3, 3, -1, 125, 136, 3, -1, 54, 136, 5, -1, 87, 136, 5, -1, 86, 136, 5, -1, 28, 136, 180, 5, 5, -1, 36, -1, 84, -1, 23, -1, 75, 136, 197, -1, 75, 136, 197, 3, -1, 65, 136, 3, 3, -1, 92, 136, 3, -1, 33, 136, 3, -1, 81, 136, 188, -1, 32, 136, 189, 5, 5, 3, 3, -1, 88, 136, 167, -1, 89, 136, 3, -1, 34, 136, 190, -1, 47, 136, 192, -1, 27, 136, 194, -1, 175, 177, 175, 178, -1, 175, 175, -1, 175, 178, -1, 177, 175, -1, 177, 178, -1, 66, 175, -1, 66, 178, -1, 178, -1, 74, -1, 175, 177, -1, 175, -1, 177, -1, 66, -1, -1, 191, 133, 209, 134, 133, 207, 134, -1, 60, -1, -1, 193, 133, 209, 134, 133, 211, 134, 133, 167, 134, -1, 60, -1, -1, 195, 133, 209, 134, 133, 211, 134, 133, 167, 134, -1, 60, -1, -1, 29, -1, 25, -1, 42, -1, 35, -1, 126, -1, 21, -1, 26, -1, 137, -1, 138, -1, 92, 163, 174, 162, 168, 162, 167, 164, 165, 155, -1, -1, 82, 200, 163, 205, 164, 165, 155, -1, 87, 163, 174, 164, 165, 155, -1, 81, 163, 174, 162, 174, 164, 165, 155, -1, 32, 163, 174, 162, 168, 164, 165, 155, -1, 77, 163, 174, 162, 174, 162, 168, 164, 165, 155, -1, 30, 163, 174, 162, 168, 164, 165, 155, -1, 33, 163, 174, 162, 166, 164, 165, 155, -1, 29, 163, 174, 162, 168, 164, 165, 152, -1, 30, 163, 174, 162, 168, 164, 165, 152, -1, 45, 163, 174, 162, 169, 162, 166, 164, 165, 152, -1, 25, 163, 174, 162, 169, 162, 166, 164, 165, 152, -1, 80, 163, 174, 162, 169, 162, 166, 164, 165, 152, -1, -1, 76, 202, 163, 205, 164, 165, 152, -1, -1, 82, 203, 163, 205, 164, 165, 152, -1, 65, 163, 174, 162, 174, 164, 165, 152, -1, 92, 163, 174, 162, 168, 162, 167, 164, 165, 152, -1, 87, 163, 174, 164, 165, 152, -1, -1, 87, 163, 174, 162, 5, 164, 204, 165, 152, -1, 75, 163, 174, 164, 165, 152, -1, 29, 75, 163, 174, 164, 165, 152, -1, 25, 75, 163, 174, 164, 165, 152, -1, 42, 75, 163, 174, 164, 165, 152, -1, 35, 75, 163, 174, 164, 165, 152, -1, 126, 75, 163, 174, 164, 165, 152, -1, 21, 75, 163, 174, 164, 165, 152, -1, 26, 75, 163, 174, 164, 165, 152, -1, 81, 163, 174, 162, 174, 164, 165, 152, -1, 32, 163, 174, 162, 168, 164, 165, 152, -1, 77, 163, 174, 162, 174, 162, 168, 164, 165, 152, -1, 18, 163, 174, 162, 168, 162, 168, 164, 165, 152, -1, 18, 163, 174, 162, 168, 162, 168, 162, 207, 164, 165, 152, -1, 18, 163, 174, 162, 168, 162, 168, 162, 170, 164, 165, 152, -1, 45, 163, 174, 162, 169, 162, 169, 162, 166, 164, 165, 152, -1, 45, 163, 174, 162, 169, 162, 169, 162, 170, 162, 166, 164, 165, 152, -1, 45, 163, 174, 162, 169, 162, 169, 162, 211, 162, 166, 164, 165, 152, -1, 45, 163, 174, 162, 169, 162, 166, 164, 139, 140, 45, 163, 174, 162, 169, 162, 166, 164, -1, 25, 163, 174, 162, 169, 162, 169, 162, 166, 164, 165, 152, -1, 25, 163, 174, 162, 169, 162, 169, 162, 211, 162, 166, 164, 165, 152, -1, 25, 163, 174, 162, 169, 162, 169, 162, 170, 162, 166, 164, 165, 152, -1, 25, 163, 174, 162, 169, 162, 166, 164, 139, 140, 25, 163, 174, 162, 169, 162, 166, 164, -1, 34, 163, 174, 162, 167, 162, 167, 162, 3, 162, 168, 162, 168, 162, 3, 164, 165, 152, -1, 47, 163, 174, 162, 167, 162, 167, 162, 3, 162, 169, 162, 169, 162, 3, 162, 166, 164, 165, 152, -1, 27, 163, 174, 162, 167, 162, 167, 162, 3, 162, 169, 162, 169, 162, 3, 162, 166, 164, 165, 152, -1, 73, 163, 174, 162, 167, 162, 167, 164, 165, 152, -1, 73, 163, 174, 162, 167, 162, 167, 162, 209, 164, 165, 152, -1, 73, 163, 174, 162, 167, 162, 167, 162, 170, 164, 165, 152, -1, 49, 163, 164, 165, 152, -1, 33, 163, 174, 162, 166, 164, 165, 152, -1, 205, 162, 206, -1, 206, -1, 174, -1, 207, 162, 208, -1, 208, -1, 168, -1, 209, 162, 210, -1, 210, -1, 167, -1, 211, 162, 212, -1, 212, -1, 168, 162, 168, -1, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 297, 297, 300, 301, 304, 305, 306, 308, 309, 311, 311, 312, 312, 313, 313, 315, 316, 317, 320, 321, 322, 323, 323, 326, 327, 327, 330, 331, 331, 332, 333, 333, 336, 337, 337, 338, 339, 339, 342, 343, 344, 347, 348, 351, 352, 355, 357, 358, 359, 360, 362, 363, 364, 365, 368, 369, 372, 373, 376, 377, 380, 381, 382, 385, 386, 389, 390, 391, 394, 395, 396, 397, 398, 399, 402, 409, 416, 423, 430, 437, 446, 449, 452, 455, 458, 471, 479, 487, 494, 502, 509, 517, 518, 519, 520, 521, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 566, 567, 568, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 606, 607, 610, 615, 620, 625, 626, 631, 636, 641, 646, 651, 652, 657, 662, 663, 667, 668, 677, 678, 679, 682, 689, 696, 703, 710, 717, 724, 731, 738, 747, 752, 757, 762, 769, 811, 812, 815, 816, 817, 822, 823, 824, 825, 826, 828, 829, 830, 832, 833, 834, 835, 836, 837, 838, 845, 846, 847, 848, 849, 852, 859, 866, 873, 880, 887, 894, 901, 908, 917, 922, 927, 932, 939, 939, 940, 943, 943, 945, 948, 948, 950, 953, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1011, 1012, 1015, 1023, 1023, 1030, 1037, 1046, 1056, 1064, 1072, 1081, 1088, 1096, 1119, 1142, 1151, 1151, 1158, 1158, 1166, 1174, 1182, 1189, 1189, 1197, 1204, 1211, 1218, 1225, 1232, 1239, 1246, 1253, 1262, 1272, 1280, 1287, 1297, 1305, 1315, 1325, 1337, 1345, 1355, 1367, 1377, 1386, 1408, 1432, 1457, 1458, 1459, 1461, 1463, 1472, 1473, 1476, 1479, 1480, 1483, 1490, 1491, 1494, 1501, 1502, 1505, 1509 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "INT", "REAL", "STRING", "COLOR", "ANGDEGREE", "ANGRADIAN", "ARCMINUTE", "ARCSECOND", "PHYCOORD", "IMGCOORD", "SEXSTR", "HMSSTR", "DMSSTR", "EOF_", "AMPLIFIER_", "ANNULUS_", "ARCMIN_", "ARCSEC_", "ARROW_", "B1950_", "BACKGROUND_", "BEGIN_", "BOX_", "BOXCIRCLE_", "BPANDA_", "CALLBACK_", "CIRCLE_", "CIRCLE3D_", "COLOR_", "COMPASS_", "COMPOSITE_", "CPANDA_", "CROSS_", "DASH_", "DASHLIST_", "DEBUG_", "DEGREES_", "DELETE_", "DETECTOR_", "DIAMOND_", "ECLIPTIC_", "EDIT_", "ELLIPSE_", "END_", "EPANDA_", "FALSE_", "FIELD_", "FIXED_", "FK4_", "FK4_NO_E_", "FK5_", "FONT_", "GALACTIC_", "GLOBAL_", "HELIOECLIPTIC_", "HIGHLITE_", "ICRS_", "IGNORE_", "IMAGE_", "INCLUDE_", "J2000_", "KEY_", "LINE_", "LINEAR_", "MOVE_", "N_", "NO_", "OFF_", "ON_", "PHYSICAL_", "PIE_", "PIXELS_", "POINT_", "POLYGON_", "PROJECTION_", "PROPERTY_", "ROTATE_", "ROTBOX_", "RULER_", "SEGMENT_", "SELECT_", "SOURCE_", "SUPERGALACTIC_", "TAG_", "TEXT_", "TEXTANGLE_", "TEXTROTATE_", "TILE_", "TRUE_", "VECTOR_", "VERSION_", "UNHIGHLITE_", "UNSELECT_", "UPDATE_", "WCS_", "WCSA_", "WCSB_", "WCSC_", "WCSD_", "WCSE_", "WCSF_", "WCSG_", "WCSH_", "WCSI_", "WCSJ_", "WCSK_", "WCSL_", "WCSM_", "WCSN_", "WCSO_", "WCSP_", "WCSQ_", "WCSR_", "WCSS_", "WCST_", "WCSU_", "WCSV_", "WCSW_", "WCSX_", "WCSY_", "WCSZ_", "WCS0_", "WIDTH_", "X_", "Y_", "YES_", "'#'", "'\\n'", "';'", "','", "'('", "')'", "'|'", "'='", "'+'", "'-'", "'&'", "'!'", "$accept", "start", "commands", "command", "@1", "@2", "@3", "hash", "@4", "comment", "@5", "shapeComment", "@6", "@7", "nonshapeComment", "@8", "@9", "terminator", "numeric", "debug", "yesno", "sp", "bp", "ep", "conjunction", "optangle", "angle", "value", "vvalue", "numberof", "sexagesimal", "hms", "dms", "coord", "coordSystem", "wcsSystem", "skyFrame", "skyDist", "property", "callBack", "global", "globalProperty", "globalRuler", "globalCompass", "initGlobal", "local", "localProperty", "localRuler", "localCompass", "localCpanda", "@10", "localEpanda", "@11", "localBpanda", "@12", "initLocal", "pointShape", "include", "nonshape", "@13", "shape", "@14", "@15", "@16", "polyNodes", "polyNode", "aRads", "aRad", "aAngs", "aAng", "vRads", "vRad", "postLocal", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 35, 10, 59, 44, 40, 41, 124, 61, 43, 45, 38, 33 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 141, 142, 143, 143, 144, 144, 144, 144, 144, 145, 144, 146, 144, 147, 144, 144, 144, 144, 148, 148, 148, 149, 148, 150, 151, 150, 152, 153, 152, 152, 154, 152, 155, 156, 155, 155, 157, 155, 158, 158, 158, 159, 159, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 163, 163, 164, 164, 165, 165, 165, 166, 166, 167, 167, 167, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 170, 171, 172, 173, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 185, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 188, 188, 188, 188, 188, 188, 188, 188, 188, 189, 189, 189, 189, 191, 190, 190, 193, 192, 192, 195, 194, 194, 196, 197, 197, 197, 197, 197, 197, 197, 198, 198, 199, 200, 199, 199, 199, 199, 199, 199, 199, 201, 201, 201, 201, 201, 202, 201, 203, 201, 201, 201, 201, 204, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 205, 205, 206, 207, 207, 208, 209, 209, 210, 211, 211, 212, 213 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 3, 3, 2, 0, 2, 1, 3, 2, 0, 3, 0, 3, 0, 3, 2, 3, 3, 1, 2, 2, 0, 2, 0, 0, 3, 1, 0, 4, 3, 0, 5, 1, 0, 3, 2, 0, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 3, 4, 3, 3, 3, 1, 1, 1, 3, 4, 4, 3, 3, 3, 7, 3, 3, 3, 4, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 0, 3, 1, 3, 3, 4, 3, 3, 3, 3, 5, 1, 1, 1, 3, 4, 4, 3, 3, 3, 7, 3, 3, 3, 3, 3, 4, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 0, 7, 1, 0, 10, 1, 0, 10, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 0, 7, 6, 8, 8, 10, 8, 8, 8, 8, 10, 10, 10, 0, 7, 0, 7, 8, 10, 6, 0, 9, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 10, 10, 12, 12, 12, 14, 14, 18, 12, 14, 14, 18, 18, 20, 20, 10, 12, 12, 5, 8, 3, 1, 1, 3, 1, 1, 3, 1, 1, 3, 1, 3, 0 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint16 yydefact[] = { 203, 0, 251, 1, 95, 126, 0, 94, 133, 125, 127, 128, 131, 0, 134, 130, 92, 129, 14, 93, 132, 0, 7, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 251, 0, 10, 96, 12, 0, 45, 44, 6, 179, 0, 0, 0, 177, 0, 145, 142, 141, 0, 139, 146, 0, 143, 0, 144, 0, 138, 178, 0, 0, 0, 0, 0, 0, 0, 55, 170, 24, 9, 0, 2, 41, 39, 40, 4, 24, 24, 57, 0, 57, 0, 57, 57, 57, 57, 57, 57, 0, 0, 57, 57, 57, 57, 57, 57, 275, 57, 57, 57, 277, 57, 57, 0, 22, 259, 260, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 56, 8, 0, 15, 3, 11, 13, 58, 0, 57, 57, 0, 57, 0, 57, 0, 0, 0, 0, 0, 57, 57, 0, 0, 59, 0, 0, 0, 57, 0, 0, 0, 57, 0, 0, 57, 57, 57, 57, 57, 57, 262, 57, 0, 57, 18, 0, 0, 19, 17, 172, 202, 200, 201, 0, 184, 0, 175, 0, 257, 253, 258, 252, 255, 254, 256, 180, 136, 137, 135, 0, 198, 0, 0, 197, 185, 176, 43, 42, 67, 68, 66, 187, 188, 183, 189, 174, 46, 54, 52, 51, 53, 49, 50, 48, 47, 171, 0, 169, 55, 55, 55, 82, 83, 84, 55, 55, 55, 55, 55, 0, 0, 55, 0, 55, 0, 55, 55, 55, 55, 55, 0, 0, 55, 55, 60, 61, 55, 55, 59, 0, 55, 55, 55, 0, 59, 55, 0, 0, 0, 0, 0, 0, 57, 0, 21, 0, 23, 20, 199, 0, 173, 182, 181, 195, 196, 191, 0, 192, 193, 194, 26, 0, 0, 0, 0, 0, 0, 0, 0, 59, 59, 0, 59, 0, 59, 0, 0, 0, 64, 0, 59, 59, 0, 0, 62, 326, 0, 0, 61, 316, 55, 315, 0, 0, 0, 55, 0, 61, 0, 59, 55, 55, 55, 55, 55, 0, 59, 55, 0, 0, 89, 91, 90, 88, 85, 86, 87, 72, 73, 74, 70, 71, 69, 55, 61, 61, 55, 55, 55, 55, 55, 55, 55, 61, 55, 61, 59, 59, 59, 59, 65, 55, 61, 61, 55, 55, 63, 28, 312, 27, 59, 55, 326, 0, 61, 55, 55, 59, 61, 59, 326, 55, 61, 0, 0, 64, 0, 0, 59, 61, 0, 0, 190, 0, 326, 326, 0, 0, 0, 0, 0, 0, 64, 326, 0, 326, 61, 61, 61, 61, 0, 326, 326, 64, 0, 216, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 55, 205, 61, 0, 284, 314, 326, 0, 64, 61, 326, 282, 281, 0, 326, 59, 59, 59, 55, 59, 61, 326, 55, 186, 55, 290, 286, 78, 79, 80, 76, 77, 75, 67, 66, 59, 55, 291, 55, 285, 326, 326, 326, 326, 55, 288, 287, 59, 55, 55, 248, 0, 0, 0, 0, 242, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 30, 326, 55, 276, 59, 59, 326, 278, 61, 59, 289, 61, 61, 61, 0, 61, 326, 264, 0, 55, 33, 0, 0, 61, 61, 64, 0, 270, 271, 293, 313, 0, 61, 64, 0, 250, 228, 0, 0, 163, 161, 156, 0, 166, 150, 167, 153, 165, 159, 148, 162, 151, 149, 168, 164, 0, 207, 241, 239, 240, 0, 221, 244, 226, 0, 0, 247, 227, 0, 210, 0, 217, 0, 237, 0, 0, 236, 222, 212, 211, 224, 225, 220, 209, 29, 206, 326, 204, 279, 0, 61, 61, 61, 292, 326, 61, 326, 326, 326, 59, 326, 263, 326, 0, 36, 59, 0, 319, 59, 55, 318, 326, 0, 326, 72, 69, 59, 55, 55, 55, 324, 55, 55, 0, 326, 59, 55, 55, 55, 0, 155, 152, 158, 157, 154, 160, 0, 238, 0, 0, 208, 0, 219, 218, 234, 235, 230, 0, 231, 232, 233, 32, 322, 59, 59, 321, 326, 326, 326, 283, 326, 268, 266, 269, 61, 265, 35, 326, 61, 0, 61, 0, 61, 295, 0, 273, 61, 0, 64, 64, 0, 0, 0, 272, 61, 64, 64, 0, 55, 213, 0, 55, 55, 0, 61, 0, 61, 309, 294, 274, 280, 326, 38, 326, 81, 326, 317, 326, 57, 326, 325, 59, 59, 323, 55, 55, 57, 326, 59, 59, 55, 0, 0, 0, 0, 229, 326, 320, 326, 267, 261, 297, 296, 0, 302, 61, 61, 0, 0, 0, 298, 61, 61, 0, 0, 223, 0, 0, 311, 310, 55, 326, 326, 55, 55, 55, 326, 326, 55, 55, 55, 55, 0, 304, 303, 0, 0, 0, 299, 300, 0, 0, 0, 243, 0, 55, 55, 59, 55, 55, 0, 0, 64, 64, 61, 64, 64, 0, 0, 59, 59, 326, 59, 59, 249, 246, 305, 61, 306, 301, 61, 326, 326, 308, 307 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 1, 51, 52, 96, 97, 88, 190, 191, 146, 242, 394, 462, 534, 553, 554, 639, 95, 250, 59, 241, 731, 153, 271, 331, 385, 386, 653, 378, 644, 251, 252, 253, 335, 53, 54, 55, 219, 463, 591, 86, 87, 220, 199, 2, 555, 465, 613, 596, 599, 600, 603, 604, 572, 573, 56, 211, 127, 193, 288, 128, 173, 177, 544, 336, 337, 645, 646, 690, 691, 655, 656, 395 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -679 static const yytype_int16 yypact[] = { -679, 40, 1717, -679, -679, -679, 99, -679, -679, -679, -679, -679, -679, 2582, -679, -679, -679, -679, -679, -679, -679, 51, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, 1475, 54, -679, -679, -679, 1667, -679, -679, -679, -679, -93, -77, -74, -36, -27, -679, -679, -679, -8, -679, -679, 5, -679, 26, -679, 45, -679, 52, 57, 68, 75, 86, 103, 115, 129, 127, -679, 4, -679, 54, -679, -679, -679, -679, -679, 4, 4, 109, 179, -44, 194, 109, -37, 109, 109, 109, 109, 196, 197, 109, 109, 109, 109, 109, 109, -679, 109, 109, 109, -679, 109, 109, 198, 267, -679, -679, 1250, -679, 265, 2156, 274, 275, 276, 279, 277, 1832, 280, 224, 281, 290, 2611, 292, 23, -679, -679, -679, 2582, -679, -679, -679, -679, -679, 603, 109, 109, 603, 109, 603, 109, 603, 603, 603, 603, 603, 109, 109, 603, 603, 162, 603, 603, 603, 109, 603, 603, 603, 109, 603, 603, 109, 109, 109, 109, 109, 109, -679, 109, 304, 109, -679, 303, 517, -679, -679, -679, -679, 485, -679, 305, -679, 306, -679, 310, -679, -679, -679, -679, -679, -679, -679, 311, -679, -679, -679, 2372, -679, 2048, 2372, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, 312, -679, 186, 186, 186, -679, -679, -679, 186, 186, 186, 186, 186, 603, 603, 186, 603, 186, 603, 186, 186, 186, 186, 186, 603, 603, 186, 186, -679, 185, 186, 186, 162, 603, 186, 186, 186, 603, 22, 186, 603, 603, 603, 603, 603, 603, 109, 603, -679, 603, -679, -679, -679, 317, -679, -679, -679, -679, -679, -679, 2480, -679, -679, -679, -679, 316, 313, 315, 195, 318, 314, 314, 551, 162, 162, 618, 162, 224, 162, 551, 551, 551, 224, 224, 162, 162, 618, 224, 190, 201, 603, 224, 185, -679, 106, -679, 603, 618, 603, 106, 328, 185, 551, 162, 186, 186, 186, 186, 186, 603, 162, 186, 331, 56, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, 186, 185, 185, 186, 186, 186, 186, 186, 186, 186, 185, 186, 185, 162, 162, 162, 162, -679, 186, 185, 185, 186, 186, -679, 2482, -679, -679, 162, 186, 201, 603, 185, 186, 186, 162, 185, 162, 201, 186, 185, 551, 551, 224, 603, 603, 112, 185, 551, 332, -679, 551, 201, 201, 330, 329, 333, 334, 327, 195, 357, 201, 224, 201, 185, 185, 185, 185, 224, 201, 201, 357, 224, -679, 205, 206, 210, 211, 214, 215, -36, 216, 217, 222, 234, 237, 238, 52, 239, 241, 244, 246, 252, 253, 387, 257, 82, -679, 185, 224, -679, -679, 201, 551, 224, 185, 201, -679, -679, 224, 201, 162, 162, 162, 186, 162, 185, 1595, 186, -679, 106, -679, -679, -679, -679, -679, -679, -679, -679, 10, 31, 162, 186, -679, 186, -679, 201, 201, 201, 201, 186, -679, -679, 162, 186, 186, 337, 1338, 389, 2264, 395, 339, 404, 348, 405, 406, 277, 1940, 408, 413, 224, 416, 418, 420, -679, 23, 419, 2482, -679, 201, 106, -679, 162, 162, 201, -679, 185, 162, -679, 185, 185, 185, 551, 185, 1595, -679, 424, 94, -679, 224, 38, 185, -67, 128, 427, -679, -679, -679, -679, 428, 13, 128, 429, -679, -679, 300, 130, -679, -679, -679, 136, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, 430, -679, -679, 485, -679, 433, -679, -679, -679, 307, 436, -679, -679, 309, -679, 441, 442, 2372, -679, 2048, 2372, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, 104, 185, 185, 185, -679, 201, 185, 1595, 1595, 1595, 162, 1595, -679, -679, 443, -679, 162, 319, -679, 162, 106, -679, 201, 321, 201, 118, 145, 162, 186, 186, 186, -679, 186, 186, 324, 201, 162, 186, 186, 186, 224, -679, -679, -679, -679, -679, -679, 444, -679, 445, 224, -679, 224, -679, -679, -679, -679, -679, 2480, -679, -679, -679, -679, -679, 162, 21, -679, 201, 201, 201, -679, 201, -679, -679, -679, 185, -679, -679, -679, 185, 448, 185, 551, 185, -679, 421, -679, 185, 551, 224, 515, 618, 551, 422, -679, 185, 224, 515, 618, -81, -679, 450, -55, 15, 56, 185, 224, 185, -679, -679, -679, -679, 1595, -679, 1595, -679, 201, -679, 201, 109, 201, -679, 162, 162, -679, 186, 186, 109, 201, 162, 162, 186, 325, 462, 335, 342, -679, 201, -679, 201, -679, -679, -679, -679, 603, -679, 185, 185, 618, 551, 603, -679, 185, 185, 618, 551, -679, 551, 551, -679, -679, 186, 201, 201, 186, 186, 186, 201, 201, 186, 84, 111, 134, 618, -679, -679, 463, 467, 618, -679, -679, 473, 344, 551, -679, 346, 186, 186, 162, 186, 186, 224, 224, 224, 224, 185, 224, 224, 351, 352, 162, 162, 201, 162, 162, -679, -679, -679, 185, -679, -679, 185, 201, 201, -679, -679 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -679, -679, -679, 431, -679, -679, -679, -679, -679, 133, -679, 719, -679, -679, -531, -679, -679, 390, 62, -679, -46, -86, -99, 546, 616, -359, 7, 345, -282, -496, 177, -679, -79, 634, -97, 354, -100, -154, -3, -679, -679, 349, -679, -679, -679, 100, -35, -679, -679, -679, -679, -679, -679, -679, -679, -679, -25, 380, 320, -679, 378, -679, -679, -679, -247, 110, -274, -192, -458, -214, -560, -678, -49 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -327 static const yytype_int16 yytable[] = { 147, 156, 91, 158, 160, 161, 162, 163, 164, 663, 85, 167, 168, 169, 170, 171, 172, -55, 174, 175, 176, 637, 178, 179, -55, -55, 232, -55, -55, -55, 198, 155, 341, 197, -55, -55, 218, 749, 159, 217, 3, 222, 223, 129, 749, 363, 390, 364, 365, 366, 367, 145, 481, 757, 89, 255, 256, 402, 258, 130, 260, 300, 131, 303, 305, 654, 266, 267, 330, 499, 92, 233, 648, 662, 275, 212, 213, 145, 279, 759, 511, 282, 283, 284, 285, 286, 287, -31, 289, 152, 291, 234, 235, 236, 237, 214, 152, 294, -326, -37, -140, 697, 698, 699, 414, 701, 642, 222, 223, 132, -326, 224, 225, 541, 238, -55, -55, 302, 299, -55, 301, 304, -59, -55, -55, -55, -55, -55, 133, 689, 749, 222, 223, 144, -67, 650, 225, 364, 365, 366, 367, 134, 145, -24, 85, 227, 500, 145, 330, 760, 239, 240, 659, 145, 145, 270, 270, 512, 307, 308, 309, -66, 135, 145, 310, 311, 312, 313, 314, 57, 58, 317, 642, 319, 666, 321, 322, 323, 324, 325, 669, 136, 328, 329, 93, 94, 332, 333, -147, 351, 338, 339, 340, 137, 342, 344, 642, 667, 222, 223, 226, 418, 652, 670, 138, 355, 765, 724, 766, 668, 661, 139, -326, -326, 145, 671, 145, 727, 807, 728, 795, 148, 140, 797, -326, -326, 145, 222, 223, 150, 151, 224, 225, 361, 362, -59, -59, -59, 145, 141, 270, -59, 152, 145, 145, 809, 270, -67, -67, -67, 399, 142, -67, -67, 154, 399, 144, -24, -24, 145, 409, 410, 411, 412, 413, 143, 145, 416, 810, 157, 195, 165, 166, 180, -66, -66, -66, 200, 201, -66, -66, 202, 203, 419, 228, 221, 422, 423, 424, 425, 426, 427, 428, 229, 430, 231, 270, 181, 204, 182, 183, 436, 205, 206, 439, 440, 207, 290, 292, 296, 295, 467, 208, 297, 298, 471, 472, 306, 145, 209, 330, 477, 354, 356, 357, 392, 380, 358, 399, 249, 393, 247, 387, 405, 417, 487, 391, 491, 492, 495, 397, 514, 515, 493, 184, 494, 516, 517, 185, 186, 518, 519, 520, 521, 187, 747, 748, 188, 522, 189, 222, 223, 754, 755, 497, 225, 373, 374, 375, 376, 523, 612, 359, 524, 525, 526, 368, 527, 535, 377, 528, 226, 529, 368, 368, 368, 226, 226, 530, 531, 377, 226, 532, 533, 592, 226, 550, 571, 597, 598, 557, 377, 558, 210, 125, 126, 368, 601, 602, 606, 605, 422, 427, 614, 561, 536, 562, 595, 615, 617, 594, 618, 567, 619, 622, 611, 569, 570, 610, 638, 657, 658, 664, 665, 750, 672, 556, 502, 674, 676, 675, 756, 677, 508, 678, 679, 744, 513, 703, 725, 726, 740, 625, 758, 681, 705, 684, 686, 780, 825, 826, 710, 828, 829, 718, 781, 812, 752, 782, 535, 813, 368, 368, 226, 538, 783, 815, 816, 368, 817, 149, 368, 90, 620, 545, 830, 831, 621, 360, 496, 498, 789, 226, 464, 673, 230, 243, 794, 226, 607, 623, 498, 226, 556, 192, 194, 640, 5, 796, 469, 683, 680, 293, 682, 685, 742, 811, 763, 222, 223, 0, 814, 650, 225, 364, 365, 366, 367, 8, 226, 0, 0, 0, 368, 226, 616, 9, 10, 11, 226, 12, 0, 14, 0, 15, 0, 0, 181, 17, 182, 183, 0, 0, 0, 222, 223, 0, 0, 363, 707, 364, 365, 366, 367, 641, 0, 0, 713, 714, 715, 20, 716, 717, 687, 0, 761, 721, 722, 723, 0, 0, 0, 0, 556, 556, 556, 729, 556, 0, 702, 226, 0, 0, 0, 184, 0, 0, 0, 185, 186, 0, 0, 0, 0, 187, 0, 222, 223, 0, 189, 244, 0, 368, 0, 245, 246, 247, 248, 249, 226, 368, 222, 223, 651, 0, 372, 0, 373, 374, 375, 376, 651, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 775, 738, 0, 0, 0, 0, 369, 0, 0, 0, 0, 773, 774, 382, 383, 384, 0, 779, 0, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 688, 0, 0, 226, 556, 407, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 0, 0, 801, 802, 803, 0, 0, 806, 808, 707, 808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 818, 819, 226, 821, 822, 0, 0, 0, 0, 0, 0, 0, 226, 688, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 480, 0, 0, 0, 0, 0, 486, 0, 0, 488, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 368, 226, 651, 377, 368, 0, 0, 0, 226, 651, 377, 0, 254, 0, 0, 257, 0, 259, 226, 261, 262, 263, 264, 265, 0, 0, 268, 269, 0, 272, 273, 274, 0, 276, 277, 278, 0, 280, 281, 0, 0, 540, 0, 0, 0, 334, 0, 0, 823, 824, 0, 343, 0, 0, 0, 0, 0, 0, 0, 0, 377, 368, 0, 0, 0, 0, 377, 368, 0, 368, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 370, 371, 0, 379, 377, 381, 0, 0, 0, 368, 0, 388, 389, 0, 0, 0, 0, 226, 226, 226, 226, 400, 226, 226, 0, 0, 404, 0, 315, 316, 408, 318, 0, 320, 635, 0, 0, 415, 0, 326, 327, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, 0, 352, 0, 353, 0, 0, 432, 433, 434, 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466, 0, 0, 0, 0, 0, 0, 473, 398, 475, 0, 0, 0, 0, 0, 0, 0, 406, 484, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 401, 0, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, 421, 0, 0, 0, 0, 0, 0, 0, 429, 0, 431, 0, 0, 0, 0, 0, 0, 437, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 474, 0, 0, 0, 478, 547, 548, 549, 0, 551, 0, 485, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 482, 483, 504, 505, 506, 507, 643, 0, 0, 0, 0, 568, 746, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, 0, 626, 0, 627, 628, 0, 542, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 790, 0, 0, 0, 0, 0, 476, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 489, 490, 0, 0, 0, 0, 0, 0, 0, 501, 0, 503, 0, 0, 0, 0, 0, 509, 510, 0, 0, 630, 0, 0, 632, 633, 634, 0, 636, 0, 0, 0, 0, 0, 0, 0, 647, 649, 0, 0, 0, 0, 700, 0, 0, 660, 0, 0, 704, 0, 539, 706, 708, 0, 543, 0, 0, 0, 546, 712, 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, 564, 565, 566, 0, 0, 0, 0, 0, 0, 0, 0, 730, 732, 0, 0, 0, 0, 0, 692, 693, 694, 0, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 98, 0, 0, 99, 0, 0, 0, 100, 101, 102, 0, 103, 104, 0, 105, 106, 107, 108, 0, 0, 0, 0, 0, 0, 109, 771, 772, 110, 0, 111, 0, 112, 777, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 737, 0, 0, 0, 739, 0, 741, 114, 743, 115, 116, 117, 745, 0, 118, 119, 120, 0, 0, 0, 753, 121, 0, 0, 0, 0, 122, 0, 0, 0, 762, 0, 764, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 820, 0, 0, 574, 0, 0, 0, 709, 0, 711, 575, 0, 832, 833, 0, 835, 836, 123, 0, 576, 719, 0, 0, 577, 0, 578, 0, 0, 787, 788, 0, 0, 0, 579, 792, 793, 0, 580, 0, 0, 0, 0, 0, 581, 786, 0, 582, 0, 0, 0, 791, 0, 733, 734, 735, 0, 736, 583, 584, 0, 0, 0, 585, 0, 0, 0, 586, 0, 0, 0, 0, 0, 0, 587, 588, 589, 0, 827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 837, 0, 0, 838, 0, 0, 0, 0, 0, 0, 0, 767, 0, 768, 590, 770, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, -326, 0, 0, 0, 0, 0, 784, 0, 785, 0, 0, 0, 0, 0, 0, 0, -5, 4, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 799, 800, 0, 0, 0, 804, 805, 6, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 0, 12, 13, 14, 0, 15, 0, 16, 0, 17, 0, 0, 18, 0, 0, 0, 0, 834, 19, 0, 0, 0, 0, 0, 0, 0, 0, 839, 840, 0, 0, 20, 0, 0, 0, 0, 21, 0, 0, 22, 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, -34, 0, 0, 0, 0, -5, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 442, 443, 0, 0, 444, 445, 446, 447, 0, 448, 449, 0, 0, 66, 0, 0, 0, 67, 0, 0, 450, 0, 0, 68, 0, 0, 0, 451, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 452, 0, 73, 0, 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 75, 0, 454, 0, 77, 455, 0, 456, 457, 458, 459, 98, 0, 460, 99, 0, 0, 0, 100, 101, 102, 0, 103, 104, 0, 105, 106, 107, 108, 0, 0, 0, 0, 0, 0, 109, 0, 0, 110, 0, 111, 0, 112, 0, 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, -5, 4, 0, 0, 0, 0, 5, 114, 0, 115, 116, 117, 0, 0, 118, 119, 120, 0, 0, 0, 0, 121, 6, 0, 0, 7, 122, 8, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 0, 12, 13, 14, 0, 15, 0, 16, 0, 17, 0, 0, 18, 0, 0, 0, 0, 0, 19, 0, 0, 0, 123, 0, 0, 124, 0, 0, 0, 0, 0, 20, 0, 125, 126, 0, 21, 0, 0, 22, 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 0, 0, 0, 0, 0, -5, -5, 4, 0, 212, 213, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 0, 12, 0, 14, 0, 15, 0, 16, 0, 17, 0, 0, 215, 0, 0, 0, 0, 0, 19, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 4, 0, 212, 213, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 0, 12, 0, 14, 0, 15, 0, 16, 0, 17, 0, 0, 608, 0, 0, 0, 0, 0, 19, 0, 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 4, 0, 212, 213, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 0, 12, 0, 14, 0, 15, 0, 16, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 4, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 0, 12, 0, 14, 0, 15, 0, 16, 0, 17, 0, 0, 196, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 4, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 0, 12, 0, 14, 0, 15, 0, 16, 0, 17, 0, 0, 593, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 4, 0, 212, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 4, 0, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 442, 443, 0, 0, 444, 445, 446, 447, 0, 448, 449, 0, 7, 66, 0, 0, 0, 67, 0, 0, 450, 0, 0, 68, 0, 0, 0, 451, 0, 0, 0, 70, 16, 0, 0, 71, 0, 0, 452, 0, 73, 0, 0, 19, 0, 0, 0, 0, 453, 0, 0, 0, 75, 0, 454, 0, 77, 455, 0, 456, 457, 458, 459, 0, 0, 460, 0, 0, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 60, 0, 461, 0, 0, 0, 0, 0, 61, 62, 63, 0, 0, 64, 65, 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 0, 0, 68, 0, 0, 0, 69, 0, 0, 0, 70, 0, 0, 0, 71, 0, 0, 72, 0, 73, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 75, 0, 76, 0, 77, 78, 0, 0, 79, 80, 81, 0, 0, 82, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 }; static const yytype_int16 yycheck[] = { 86, 100, 51, 102, 103, 104, 105, 106, 107, 569, 13, 110, 111, 112, 113, 114, 115, 7, 117, 118, 119, 552, 121, 122, 3, 4, 3, 5, 7, 8, 130, 75, 279, 130, 3, 4, 136, 715, 75, 136, 0, 3, 4, 136, 722, 7, 328, 9, 10, 11, 12, 132, 411, 134, 3, 154, 155, 339, 157, 136, 159, 215, 136, 217, 218, 561, 165, 166, 135, 428, 16, 48, 139, 569, 173, 19, 20, 132, 177, 134, 439, 180, 181, 182, 183, 184, 185, 5, 187, 133, 189, 68, 69, 70, 71, 39, 133, 197, 16, 5, 136, 632, 633, 634, 351, 636, 68, 3, 4, 136, 16, 7, 8, 472, 91, 3, 4, 217, 215, 7, 217, 218, 16, 11, 12, 13, 14, 15, 136, 625, 808, 3, 4, 129, 16, 7, 8, 9, 10, 11, 12, 136, 132, 16, 147, 138, 428, 132, 135, 134, 127, 128, 139, 132, 132, 134, 134, 439, 244, 245, 246, 16, 136, 132, 250, 251, 252, 253, 254, 70, 71, 257, 68, 259, 44, 261, 262, 263, 264, 265, 44, 136, 268, 269, 130, 131, 272, 273, 136, 288, 276, 277, 278, 136, 280, 281, 68, 67, 3, 4, 138, 355, 561, 67, 136, 302, 737, 665, 739, 79, 569, 136, 130, 131, 132, 79, 132, 675, 134, 677, 780, 88, 136, 783, 130, 131, 132, 3, 4, 96, 97, 7, 8, 312, 313, 129, 130, 131, 132, 136, 134, 135, 133, 132, 132, 134, 134, 129, 130, 131, 336, 136, 134, 135, 75, 341, 129, 130, 131, 132, 346, 347, 348, 349, 350, 136, 132, 353, 134, 75, 5, 75, 75, 75, 129, 130, 131, 3, 3, 134, 135, 5, 3, 369, 3, 5, 372, 373, 374, 375, 376, 377, 378, 3, 380, 3, 134, 30, 21, 32, 33, 387, 25, 26, 390, 391, 29, 3, 5, 3, 5, 397, 35, 3, 3, 401, 402, 5, 132, 42, 135, 407, 5, 7, 11, 135, 319, 12, 414, 15, 129, 13, 325, 5, 3, 3, 329, 7, 9, 12, 333, 136, 136, 10, 77, 11, 136, 136, 81, 82, 136, 136, 136, 136, 87, 714, 715, 90, 136, 92, 3, 4, 721, 722, 7, 8, 9, 10, 11, 12, 136, 525, 310, 136, 136, 136, 314, 136, 464, 317, 136, 319, 136, 321, 322, 323, 324, 325, 136, 136, 328, 329, 5, 136, 5, 333, 482, 60, 3, 60, 486, 339, 488, 126, 137, 138, 344, 3, 60, 3, 5, 497, 498, 5, 500, 464, 502, 517, 5, 3, 517, 3, 508, 3, 5, 525, 512, 513, 525, 5, 3, 3, 3, 133, 716, 5, 485, 430, 5, 3, 133, 723, 133, 436, 3, 3, 25, 440, 5, 5, 5, 3, 538, 3, 608, 136, 610, 611, 133, 818, 819, 140, 821, 822, 140, 3, 3, 45, 133, 555, 3, 409, 410, 411, 467, 133, 3, 133, 416, 133, 90, 419, 51, 532, 477, 134, 134, 533, 311, 427, 428, 773, 430, 393, 594, 141, 147, 779, 436, 524, 535, 439, 440, 552, 124, 127, 555, 22, 782, 399, 610, 608, 192, 610, 611, 707, 798, 731, 3, 4, -1, 803, 7, 8, 9, 10, 11, 12, 43, 467, -1, -1, -1, 471, 472, 528, 51, 52, 53, 477, 55, -1, 57, -1, 59, -1, -1, 30, 63, 32, 33, -1, -1, -1, 3, 4, -1, -1, 7, 645, 9, 10, 11, 12, 557, -1, -1, 653, 654, 655, 85, 657, 658, 622, -1, 729, 662, 663, 664, -1, -1, -1, -1, 632, 633, 634, 683, 636, -1, 638, 528, -1, -1, -1, 77, -1, -1, -1, 81, 82, -1, -1, -1, -1, 87, -1, 3, 4, -1, 92, 7, -1, 550, -1, 11, 12, 13, 14, 15, 557, 558, 3, 4, 561, -1, 7, -1, 9, 10, 11, 12, 569, 625, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 744, -1, -1, -1, -1, -1, -1, -1, 752, 703, -1, -1, -1, -1, 314, -1, -1, -1, -1, 750, 751, 321, 322, 323, -1, 756, -1, 665, -1, -1, -1, -1, -1, -1, -1, -1, -1, 675, -1, 677, -1, -1, 625, 737, 344, 739, -1, -1, -1, -1, -1, -1, -1, -1, -1, 786, -1, -1, 789, 790, 791, -1, -1, 794, 795, 796, 797, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 811, 812, 665, 814, 815, -1, -1, -1, -1, -1, -1, -1, 675, 731, 677, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 409, 410, -1, -1, -1, -1, -1, 416, -1, -1, 419, -1, -1, -1, -1, 707, -1, -1, -1, -1, -1, 713, 714, 715, 716, 717, -1, -1, -1, 721, 722, 723, -1, 153, -1, -1, 156, -1, 158, 731, 160, 161, 162, 163, 164, -1, -1, 167, 168, -1, 170, 171, 172, -1, 174, 175, 176, -1, 178, 179, -1, -1, 471, -1, -1, -1, 274, -1, -1, 816, 817, -1, 280, -1, -1, -1, -1, -1, -1, -1, -1, 773, 774, -1, -1, -1, -1, 779, 780, -1, 782, 783, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 798, 315, 316, -1, 318, 803, 320, -1, -1, -1, 808, -1, 326, 327, -1, -1, -1, -1, 816, 817, 818, 819, 336, 821, 822, -1, -1, 341, -1, 255, 256, 345, 258, -1, 260, 550, -1, -1, 352, -1, 266, 267, -1, 558, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 282, 283, 284, 285, 286, 287, -1, 289, -1, 291, -1, -1, 382, 383, 384, 385, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, -1, -1, -1, -1, -1, -1, 403, 334, 405, -1, -1, -1, -1, -1, -1, -1, 343, 414, -1, -1, -1, -1, -1, 332, -1, -1, -1, -1, -1, 338, -1, 340, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 370, 371, -1, -1, -1, -1, -1, -1, -1, 379, -1, 381, -1, -1, -1, -1, -1, -1, 388, 389, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 400, -1, -1, -1, 404, -1, -1, -1, 408, 479, 480, 481, -1, 483, -1, 415, -1, -1, 488, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 499, 412, 413, 432, 433, 434, 435, 707, -1, -1, -1, -1, 511, 713, -1, -1, -1, 717, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 466, -1, 538, -1, 540, 541, -1, 473, -1, 545, -1, -1, -1, -1, -1, -1, -1, -1, 484, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 398, -1, 774, -1, -1, -1, -1, -1, 406, -1, 782, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 420, 421, -1, -1, -1, -1, -1, -1, -1, 429, -1, 431, -1, -1, -1, -1, -1, 437, 438, -1, -1, 544, -1, -1, 547, 548, 549, -1, 551, -1, -1, -1, -1, -1, -1, -1, 559, 560, -1, -1, -1, -1, 635, -1, -1, 568, -1, -1, 641, -1, 470, 644, 645, -1, 474, -1, -1, -1, 478, 652, -1, -1, -1, -1, -1, -1, -1, -1, 661, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 504, 505, 506, 507, -1, -1, -1, -1, -1, -1, -1, -1, 689, 690, -1, -1, -1, -1, -1, 626, 627, 628, -1, -1, 631, -1, -1, -1, -1, -1, -1, -1, -1, 537, -1, -1, -1, -1, 542, -1, -1, -1, -1, -1, -1, 18, -1, -1, 21, -1, -1, -1, 25, 26, 27, -1, 29, 30, -1, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1, 42, 747, 748, 45, -1, 47, -1, 49, 754, 755, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 65, 700, -1, -1, -1, 704, -1, 706, 73, 708, 75, 76, 77, 712, -1, 80, 81, 82, -1, -1, -1, 720, 87, -1, -1, -1, -1, 92, -1, -1, -1, 730, -1, 732, 630, -1, -1, -1, -1, -1, -1, -1, -1, -1, 813, -1, -1, 24, -1, -1, -1, 647, -1, 649, 31, -1, 825, 826, -1, 828, 829, 126, -1, 40, 660, -1, -1, 44, -1, 46, -1, -1, 771, 772, -1, -1, -1, 54, 777, 778, -1, 58, -1, -1, -1, -1, -1, 64, 769, -1, 67, -1, -1, -1, 775, -1, 692, 693, 694, -1, 696, 78, 79, -1, -1, -1, 83, -1, -1, -1, 87, -1, -1, -1, -1, -1, -1, 94, 95, 96, -1, 820, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 833, -1, -1, 836, -1, -1, -1, -1, -1, -1, -1, 741, -1, 743, 125, 745, -1, -1, -1, -1, -1, -1, -1, 753, -1, -1, 0, -1, -1, -1, -1, -1, 762, -1, 764, -1, -1, -1, -1, -1, -1, -1, 16, 17, -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, 787, 788, -1, -1, -1, 792, 793, 38, -1, -1, 41, -1, 43, -1, -1, -1, -1, -1, -1, -1, 51, 52, 53, -1, 55, 56, 57, -1, 59, -1, 61, -1, 63, -1, -1, 66, -1, -1, -1, -1, 827, 72, -1, -1, -1, -1, -1, -1, -1, -1, 837, 838, -1, -1, 85, -1, -1, -1, -1, 90, -1, -1, 93, -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 5, -1, -1, -1, -1, 130, 131, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 23, -1, -1, -1, 27, 28, -1, -1, 31, 32, 33, 34, -1, 36, 37, -1, -1, 40, -1, -1, -1, 44, -1, -1, 47, -1, -1, 50, -1, -1, -1, 54, -1, -1, -1, 58, -1, -1, -1, 62, -1, -1, 65, -1, 67, -1, -1, -1, -1, -1, -1, -1, 75, -1, -1, -1, 79, -1, 81, -1, 83, 84, -1, 86, 87, 88, 89, 18, -1, 92, 21, -1, -1, -1, 25, 26, 27, -1, 29, 30, -1, 32, 33, 34, 35, -1, -1, -1, -1, -1, -1, 42, -1, -1, 45, -1, 47, -1, 49, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 65, 16, 17, -1, -1, -1, -1, 22, 73, -1, 75, 76, 77, -1, -1, 80, 81, 82, -1, -1, -1, -1, 87, 38, -1, -1, 41, 92, 43, -1, -1, -1, -1, -1, -1, -1, 51, 52, 53, -1, 55, 56, 57, -1, 59, -1, 61, -1, 63, -1, -1, 66, -1, -1, -1, -1, -1, 72, -1, -1, -1, 126, -1, -1, 129, -1, -1, -1, -1, -1, 85, -1, 137, 138, -1, 90, -1, -1, 93, -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, -1, -1, -1, -1, -1, 130, 131, 17, -1, 19, 20, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 39, -1, 41, -1, 43, -1, -1, -1, -1, -1, -1, -1, 51, 52, 53, -1, 55, -1, 57, -1, 59, -1, 61, -1, 63, -1, -1, 66, -1, -1, -1, -1, -1, 72, -1, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 17, -1, 19, 20, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 39, -1, 41, -1, 43, -1, -1, -1, -1, -1, -1, -1, 51, 52, 53, -1, 55, -1, 57, -1, 59, -1, 61, -1, 63, -1, -1, 66, -1, -1, -1, -1, -1, 72, -1, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 17, -1, 19, 20, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 39, -1, 41, -1, 43, -1, -1, -1, -1, -1, -1, -1, 51, 52, 53, -1, 55, -1, 57, -1, 59, -1, 61, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 17, -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, 43, -1, -1, -1, -1, -1, -1, -1, 51, 52, 53, -1, 55, -1, 57, -1, 59, -1, 61, -1, 63, -1, -1, 66, -1, -1, -1, -1, -1, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 17, -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, 43, -1, -1, -1, -1, -1, -1, -1, 51, 52, 53, -1, 55, -1, 57, -1, 59, -1, 61, -1, 63, -1, -1, 66, -1, -1, -1, -1, -1, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 17, -1, 19, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 39, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 61, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 17, -1, -1, -1, -1, -1, -1, -1, 23, -1, -1, -1, 27, 28, -1, -1, 31, 32, 33, 34, -1, 36, 37, -1, 41, 40, -1, -1, -1, 44, -1, -1, 47, -1, -1, 50, -1, -1, -1, 54, -1, -1, -1, 58, 61, -1, -1, 62, -1, -1, 65, -1, 67, -1, -1, 72, -1, -1, -1, -1, 75, -1, -1, -1, 79, -1, 81, -1, 83, 84, -1, 86, 87, 88, 89, -1, -1, 92, -1, -1, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 23, -1, 125, -1, -1, -1, -1, -1, 31, 32, 33, -1, -1, 36, 37, -1, -1, 40, -1, -1, -1, 44, -1, -1, -1, -1, -1, 50, -1, -1, -1, 54, -1, -1, -1, 58, -1, -1, -1, 62, -1, -1, 65, -1, 67, -1, -1, -1, -1, -1, -1, -1, 75, -1, -1, -1, 79, -1, 81, -1, 83, 84, -1, -1, 87, 88, 89, -1, -1, 92, -1, -1, -1, -1, 97, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 142, 185, 0, 17, 22, 38, 41, 43, 51, 52, 53, 55, 56, 57, 59, 61, 63, 66, 72, 85, 90, 93, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 143, 144, 175, 176, 177, 196, 70, 71, 160, 23, 31, 32, 33, 36, 37, 40, 44, 50, 54, 58, 62, 65, 67, 75, 79, 81, 83, 84, 87, 88, 89, 92, 97, 125, 179, 181, 182, 147, 3, 144, 213, 16, 130, 131, 158, 145, 146, 18, 21, 25, 26, 27, 29, 30, 32, 33, 34, 35, 42, 45, 47, 49, 65, 73, 75, 76, 77, 80, 81, 82, 87, 92, 126, 129, 137, 138, 198, 201, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 129, 132, 150, 162, 150, 158, 150, 150, 133, 163, 75, 75, 163, 75, 163, 75, 163, 163, 163, 163, 163, 75, 75, 163, 163, 163, 163, 163, 163, 202, 163, 163, 163, 203, 163, 163, 75, 30, 32, 33, 77, 81, 82, 87, 90, 92, 148, 149, 198, 199, 201, 5, 66, 175, 177, 184, 3, 3, 5, 3, 21, 25, 26, 29, 35, 42, 126, 197, 19, 20, 39, 66, 74, 175, 177, 178, 183, 5, 3, 4, 7, 8, 159, 167, 3, 3, 176, 3, 3, 48, 68, 69, 70, 71, 91, 127, 128, 161, 151, 182, 7, 11, 12, 13, 14, 15, 159, 171, 172, 173, 174, 163, 163, 174, 163, 174, 163, 174, 174, 174, 174, 174, 163, 163, 174, 174, 134, 164, 174, 174, 174, 163, 174, 174, 174, 163, 174, 174, 163, 163, 163, 163, 163, 163, 200, 163, 3, 163, 5, 199, 177, 5, 3, 3, 3, 175, 178, 175, 177, 178, 175, 178, 5, 162, 162, 162, 162, 162, 162, 162, 162, 174, 174, 162, 174, 162, 174, 162, 162, 162, 162, 162, 174, 174, 162, 162, 135, 165, 162, 162, 164, 174, 205, 206, 162, 162, 162, 205, 162, 164, 162, 174, 174, 174, 174, 174, 174, 163, 174, 174, 5, 175, 7, 11, 12, 159, 171, 173, 173, 7, 9, 10, 11, 12, 159, 168, 164, 164, 7, 9, 10, 11, 12, 159, 169, 164, 167, 164, 168, 168, 168, 166, 167, 167, 164, 164, 169, 167, 135, 129, 152, 213, 174, 167, 165, 162, 164, 174, 169, 174, 164, 5, 165, 168, 164, 162, 162, 162, 162, 162, 205, 164, 162, 3, 178, 162, 165, 165, 162, 162, 162, 162, 162, 162, 162, 165, 162, 165, 164, 164, 164, 164, 162, 165, 165, 162, 162, 23, 27, 28, 31, 32, 33, 34, 36, 37, 47, 54, 65, 75, 81, 84, 86, 87, 88, 89, 92, 125, 153, 179, 186, 187, 164, 162, 152, 206, 165, 162, 162, 164, 165, 164, 152, 162, 165, 168, 168, 166, 174, 174, 164, 165, 168, 3, 168, 152, 152, 7, 9, 10, 11, 12, 159, 7, 159, 166, 169, 152, 167, 152, 165, 165, 165, 165, 167, 152, 152, 166, 169, 167, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 5, 136, 154, 162, 213, 165, 167, 152, 168, 166, 165, 152, 204, 167, 152, 164, 164, 164, 162, 164, 165, 155, 156, 186, 213, 162, 162, 164, 164, 162, 162, 152, 152, 152, 152, 162, 164, 162, 162, 60, 194, 195, 24, 31, 40, 44, 46, 54, 58, 64, 67, 78, 79, 83, 87, 94, 95, 96, 125, 180, 5, 66, 175, 177, 189, 3, 60, 190, 191, 3, 60, 192, 193, 5, 3, 197, 66, 74, 175, 177, 178, 188, 5, 5, 167, 3, 3, 3, 213, 161, 5, 187, 152, 162, 164, 164, 164, 152, 165, 164, 165, 165, 165, 168, 165, 155, 5, 157, 213, 167, 68, 168, 170, 207, 208, 165, 139, 165, 7, 159, 166, 168, 170, 211, 212, 3, 3, 139, 165, 166, 170, 211, 3, 133, 44, 67, 79, 44, 67, 79, 5, 177, 5, 133, 3, 133, 3, 3, 175, 178, 175, 177, 178, 175, 178, 213, 167, 170, 209, 210, 165, 165, 165, 152, 165, 155, 155, 155, 164, 155, 213, 5, 164, 136, 164, 162, 164, 152, 140, 152, 164, 162, 162, 162, 162, 162, 140, 152, 164, 162, 162, 162, 209, 5, 5, 209, 209, 175, 164, 162, 164, 152, 152, 152, 152, 165, 213, 165, 3, 165, 208, 165, 25, 165, 168, 166, 166, 212, 169, 168, 45, 165, 166, 166, 169, 134, 3, 134, 134, 178, 165, 210, 165, 155, 155, 152, 152, 163, 152, 164, 164, 162, 162, 163, 152, 164, 164, 162, 133, 3, 133, 133, 152, 152, 174, 165, 165, 169, 168, 174, 165, 165, 169, 211, 207, 211, 162, 152, 152, 162, 162, 162, 152, 152, 162, 134, 162, 134, 134, 169, 3, 3, 169, 3, 133, 133, 162, 162, 164, 162, 162, 167, 167, 166, 166, 165, 166, 166, 134, 134, 164, 164, 152, 164, 164, 165, 165, 152, 152 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (fr, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, fr, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, mkFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; mkFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (fr); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, mkFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; mkFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, Base* fr, mkFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, fr, ll) YYSTYPE *yyvsp; int yyrule; Base* fr; mkFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , fr, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, fr, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, Base* fr, mkFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, fr, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; Base* fr; mkFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (fr); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (Base* fr, mkFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (Base* fr, mkFlexLexer* ll) #else int yyparse (fr, ll) Base* fr; mkFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 7: #line 306 "frame/ds9parser.Y" {cerr << "DS9 Regions File 3.2" << endl;;} break; case 9: #line 309 "frame/ds9parser.Y" {globalTile = (yyvsp[(2) - (2)].integer);;} break; case 10: #line 311 "frame/ds9parser.Y" {globalSystem=(Coord::CoordSystem)(yyvsp[(1) - (1)].integer);;} break; case 12: #line 312 "frame/ds9parser.Y" {globalSystem=globalWCS; globalSky=(Coord::SkyFrame)(yyvsp[(1) - (1)].integer);;} break; case 14: #line 313 "frame/ds9parser.Y" {globalSystem=globalWCS; globalSky=Coord::FK5;;} break; case 21: #line 322 "frame/ds9parser.Y" {globalTile = (yyvsp[(2) - (2)].integer);;} break; case 22: #line 323 "frame/ds9parser.Y" {DISCARD_(1);;} break; case 25: #line 327 "frame/ds9parser.Y" {DISCARD_(1);;} break; case 28: #line 331 "frame/ds9parser.Y" {DISCARD_(1);;} break; case 29: #line 331 "frame/ds9parser.Y" {strncpy(localComment,(yyvsp[(3) - (4)].str),80);;} break; case 31: #line 333 "frame/ds9parser.Y" {DISCARD_(1);;} break; case 32: #line 333 "frame/ds9parser.Y" {strncpy(localComment,(yyvsp[(4) - (5)].str),80);;} break; case 34: #line 337 "frame/ds9parser.Y" {DISCARD_(1);;} break; case 35: #line 337 "frame/ds9parser.Y" {strncpy(localComment,(yyvsp[(2) - (3)].str),80);;} break; case 37: #line 339 "frame/ds9parser.Y" {DISCARD_(1);;} break; case 38: #line 339 "frame/ds9parser.Y" {strncpy(localComment,(yyvsp[(3) - (4)].str),80);;} break; case 41: #line 344 "frame/ds9parser.Y" {YYACCEPT;;} break; case 42: #line 347 "frame/ds9parser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 43: #line 348 "frame/ds9parser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 44: #line 351 "frame/ds9parser.Y" {yydebug=1;;} break; case 45: #line 352 "frame/ds9parser.Y" {yydebug=0;;} break; case 46: #line 355 "frame/ds9parser.Y" {(yyval.integer)=((yyvsp[(1) - (1)].integer) ? 1 : 0);;} break; case 47: #line 357 "frame/ds9parser.Y" {(yyval.integer)=1;;} break; case 48: #line 358 "frame/ds9parser.Y" {(yyval.integer)=1;;} break; case 49: #line 359 "frame/ds9parser.Y" {(yyval.integer)=1;;} break; case 50: #line 360 "frame/ds9parser.Y" {(yyval.integer)=1;;} break; case 51: #line 362 "frame/ds9parser.Y" {(yyval.integer)=0;;} break; case 52: #line 363 "frame/ds9parser.Y" {(yyval.integer)=0;;} break; case 53: #line 364 "frame/ds9parser.Y" {(yyval.integer)=0;;} break; case 54: #line 365 "frame/ds9parser.Y" {(yyval.integer)=0;;} break; case 61: #line 380 "frame/ds9parser.Y" {cStatus = 0;;} break; case 62: #line 381 "frame/ds9parser.Y" {cStatus = 1;;} break; case 63: #line 382 "frame/ds9parser.Y" {cStatus = 1;;} break; case 64: #line 385 "frame/ds9parser.Y" {(yyval.real) = fr->mapAngleToRef(0,localSystem,localSky);;} break; case 65: #line 386 "frame/ds9parser.Y" {(yyval.real) = (yyvsp[(1) - (1)].real);;} break; case 66: #line 389 "frame/ds9parser.Y" {(yyval.real) = fr->mapAngleToRef(degToRad((yyvsp[(1) - (1)].real)),localSystem,localSky);;} break; case 67: #line 390 "frame/ds9parser.Y" {(yyval.real) = fr->mapAngleToRef(degToRad((yyvsp[(1) - (1)].real)),localSystem,localSky);;} break; case 68: #line 391 "frame/ds9parser.Y" {(yyval.real) = fr->mapAngleToRef((yyvsp[(1) - (1)].real),localSystem,localSky);;} break; case 69: #line 394 "frame/ds9parser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), localSystem, Coord::DEGREE);;} break; case 70: #line 395 "frame/ds9parser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), Coord::PHYSICAL);;} break; case 71: #line 396 "frame/ds9parser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), Coord::IMAGE);;} break; case 72: #line 397 "frame/ds9parser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), checkWCSSystem(), Coord::DEGREE);;} break; case 73: #line 398 "frame/ds9parser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), checkWCSSystem(), Coord::ARCMIN);;} break; case 74: #line 399 "frame/ds9parser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), checkWCSSystem(), Coord::ARCSEC);;} break; case 75: #line 403 "frame/ds9parser.Y" { Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), localSystem, Coord::DEGREE); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 76: #line 410 "frame/ds9parser.Y" { Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::PHYSICAL); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 77: #line 417 "frame/ds9parser.Y" { Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::IMAGE); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 78: #line 424 "frame/ds9parser.Y" { Vector r=FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),checkWCSSystem(),Coord::DEGREE); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 79: #line 431 "frame/ds9parser.Y" { Vector r=FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),checkWCSSystem(),Coord::ARCMIN); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 80: #line 438 "frame/ds9parser.Y" { Vector r=FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),checkWCSSystem(),Coord::ARCSEC); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 81: #line 446 "frame/ds9parser.Y" {(yyval.integer) = (yyvsp[(3) - (3)].integer);;} break; case 82: #line 449 "frame/ds9parser.Y" {(yyval.real) = parseSEXStr((yyvsp[(1) - (1)].str));;} break; case 83: #line 452 "frame/ds9parser.Y" {(yyval.real) = parseHMSStr((yyvsp[(1) - (1)].str));;} break; case 84: #line 455 "frame/ds9parser.Y" {(yyval.real) = parseDMSStr((yyvsp[(1) - (1)].str));;} break; case 85: #line 459 "frame/ds9parser.Y" { Vector r; Coord::CoordSystem sys = checkWCSSystem(); Coord::SkyFrame sky = checkWCSSky(); if (sky == Coord::GALACTIC || sky == Coord::ECLIPTIC) r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), sys, sky); else r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real)*360./24.,(yyvsp[(3) - (3)].real)), sys, sky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 86: #line 472 "frame/ds9parser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), checkWCSSystem(), checkWCSSky()); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 87: #line 480 "frame/ds9parser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), checkWCSSystem(), checkWCSSky()); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 88: #line 488 "frame/ds9parser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), localSystem, localSky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 89: #line 495 "frame/ds9parser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), checkWCSSystem(), checkWCSSky()); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 90: #line 503 "frame/ds9parser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::IMAGE); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 91: #line 510 "frame/ds9parser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::PHYSICAL); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; ;} break; case 92: #line 517 "frame/ds9parser.Y" {(yyval.integer) = Coord::IMAGE;;} break; case 93: #line 518 "frame/ds9parser.Y" {(yyval.integer) = Coord::PHYSICAL;;} break; case 94: #line 519 "frame/ds9parser.Y" {(yyval.integer) = Coord::DETECTOR;;} break; case 95: #line 520 "frame/ds9parser.Y" {(yyval.integer) = Coord::AMPLIFIER;;} break; case 96: #line 521 "frame/ds9parser.Y" {(yyval.integer) = (yyvsp[(1) - (1)].integer); globalWCS = (Coord::CoordSystem)(yyvsp[(1) - (1)].integer);;} break; case 97: #line 524 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCS;;} break; case 98: #line 525 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSA;;} break; case 99: #line 526 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSB;;} break; case 100: #line 527 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSC;;} break; case 101: #line 528 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSD;;} break; case 102: #line 529 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSE;;} break; case 103: #line 530 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSF;;} break; case 104: #line 531 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSG;;} break; case 105: #line 532 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSH;;} break; case 106: #line 533 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSI;;} break; case 107: #line 534 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSJ;;} break; case 108: #line 535 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSK;;} break; case 109: #line 536 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSL;;} break; case 110: #line 537 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSM;;} break; case 111: #line 538 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSN;;} break; case 112: #line 539 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSO;;} break; case 113: #line 540 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSP;;} break; case 114: #line 541 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSQ;;} break; case 115: #line 542 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSR;;} break; case 116: #line 543 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSS;;} break; case 117: #line 544 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCST;;} break; case 118: #line 545 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSU;;} break; case 119: #line 546 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSV;;} break; case 120: #line 547 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSW;;} break; case 121: #line 548 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSX;;} break; case 122: #line 549 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSY;;} break; case 123: #line 550 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCSZ;;} break; case 124: #line 551 "frame/ds9parser.Y" {(yyval.integer) = Coord::WCS0;;} break; case 125: #line 554 "frame/ds9parser.Y" {(yyval.integer) = Coord::FK4;;} break; case 126: #line 555 "frame/ds9parser.Y" {(yyval.integer) = Coord::FK4;;} break; case 127: #line 556 "frame/ds9parser.Y" {(yyval.integer) = Coord::FK4_NO_E;;} break; case 128: #line 557 "frame/ds9parser.Y" {(yyval.integer) = Coord::FK5;;} break; case 129: #line 558 "frame/ds9parser.Y" {(yyval.integer) = Coord::FK5;;} break; case 130: #line 559 "frame/ds9parser.Y" {(yyval.integer) = Coord::ICRS;;} break; case 131: #line 560 "frame/ds9parser.Y" {(yyval.integer) = Coord::GALACTIC;;} break; case 132: #line 561 "frame/ds9parser.Y" {(yyval.integer) = Coord::SUPERGALACTIC;;} break; case 133: #line 562 "frame/ds9parser.Y" {(yyval.integer) = Coord::ECLIPTIC;;} break; case 134: #line 563 "frame/ds9parser.Y" {(yyval.integer) = Coord::HELIOECLIPTIC;;} break; case 135: #line 566 "frame/ds9parser.Y" {(yyval.integer)=Coord::DEGREE;;} break; case 136: #line 567 "frame/ds9parser.Y" {(yyval.integer)=Coord::ARCMIN;;} break; case 137: #line 568 "frame/ds9parser.Y" {(yyval.integer)=Coord::ARCSEC;;} break; case 138: #line 571 "frame/ds9parser.Y" {(yyval.integer) = Marker::SELECT;;} break; case 139: #line 572 "frame/ds9parser.Y" {(yyval.integer) = Marker::HIGHLITE;;} break; case 140: #line 573 "frame/ds9parser.Y" {(yyval.integer) = Marker::DASH;;} break; case 141: #line 574 "frame/ds9parser.Y" {(yyval.integer) = Marker::FIXED;;} break; case 142: #line 575 "frame/ds9parser.Y" {(yyval.integer) = Marker::EDIT;;} break; case 143: #line 576 "frame/ds9parser.Y" {(yyval.integer) = Marker::MOVE;;} break; case 144: #line 577 "frame/ds9parser.Y" {(yyval.integer) = Marker::ROTATE;;} break; case 145: #line 578 "frame/ds9parser.Y" {(yyval.integer) = Marker::DELETE;;} break; case 146: #line 579 "frame/ds9parser.Y" {(yyval.integer) = Marker::INCLUDE;;} break; case 147: #line 580 "frame/ds9parser.Y" {(yyval.integer) = Marker::SOURCE;;} break; case 148: #line 583 "frame/ds9parser.Y" {(yyval.integer) = CallBack::SELECTCB;;} break; case 149: #line 584 "frame/ds9parser.Y" {(yyval.integer) = CallBack::UNSELECTCB;;} break; case 150: #line 585 "frame/ds9parser.Y" {(yyval.integer) = CallBack::HIGHLITECB;;} break; case 151: #line 586 "frame/ds9parser.Y" {(yyval.integer) = CallBack::UNHIGHLITECB;;} break; case 152: #line 587 "frame/ds9parser.Y" {(yyval.integer) = CallBack::MOVEBEGINCB;;} break; case 153: #line 588 "frame/ds9parser.Y" {(yyval.integer) = CallBack::MOVECB;;} break; case 154: #line 589 "frame/ds9parser.Y" {(yyval.integer) = CallBack::MOVEENDCB;;} break; case 155: #line 590 "frame/ds9parser.Y" {(yyval.integer) = CallBack::EDITBEGINCB;;} break; case 156: #line 591 "frame/ds9parser.Y" {(yyval.integer) = CallBack::EDITCB;;} break; case 157: #line 592 "frame/ds9parser.Y" {(yyval.integer) = CallBack::EDITENDCB;;} break; case 158: #line 593 "frame/ds9parser.Y" {(yyval.integer) = CallBack::ROTATEBEGINCB;;} break; case 159: #line 594 "frame/ds9parser.Y" {(yyval.integer) = CallBack::ROTATECB;;} break; case 160: #line 595 "frame/ds9parser.Y" {(yyval.integer) = CallBack::ROTATEENDCB;;} break; case 161: #line 596 "frame/ds9parser.Y" {(yyval.integer) = CallBack::DELETECB;;} break; case 162: #line 597 "frame/ds9parser.Y" {(yyval.integer) = CallBack::TEXTCB;;} break; case 163: #line 598 "frame/ds9parser.Y" {(yyval.integer) = CallBack::COLORCB;;} break; case 164: #line 599 "frame/ds9parser.Y" {(yyval.integer) = CallBack::LINEWIDTHCB;;} break; case 165: #line 600 "frame/ds9parser.Y" {(yyval.integer) = CallBack::PROPERTYCB;;} break; case 166: #line 601 "frame/ds9parser.Y" {(yyval.integer) = CallBack::FONTCB;;} break; case 167: #line 602 "frame/ds9parser.Y" {(yyval.integer) = CallBack::KEYCB;;} break; case 168: #line 603 "frame/ds9parser.Y" {(yyval.integer) = CallBack::UPDATECB;;} break; case 171: #line 611 "frame/ds9parser.Y" { setProps(&globalProps,(yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer)); setProps(&localProps,(yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer)); ;} break; case 172: #line 616 "frame/ds9parser.Y" { strncpy(globalColor,(yyvsp[(3) - (3)].str),16); strncpy(localColor,(yyvsp[(3) - (3)].str),16); ;} break; case 173: #line 621 "frame/ds9parser.Y" { globalDash[0] = localDash[0] =(yyvsp[(3) - (4)].integer); globalDash[1] = localDash[1] =(yyvsp[(4) - (4)].integer); ;} break; case 174: #line 625 "frame/ds9parser.Y" {globalWidth = localWidth = (yyvsp[(3) - (3)].integer);;} break; case 175: #line 627 "frame/ds9parser.Y" { strncpy(globalFont,(yyvsp[(3) - (3)].str),32); strncpy(localFont,(yyvsp[(3) - (3)].str),32); ;} break; case 176: #line 632 "frame/ds9parser.Y" { strncpy(globalText,(yyvsp[(3) - (3)].str),80); strncpy(localText,(yyvsp[(3) - (3)].str),80); ;} break; case 177: #line 637 "frame/ds9parser.Y" { setProps(&globalProps,Marker::DASH,1); setProps(&localProps,Marker::DASH,1); ;} break; case 178: #line 642 "frame/ds9parser.Y" { setProps(&globalProps,Marker::SOURCE,1); setProps(&localProps,Marker::SOURCE,1); ;} break; case 179: #line 647 "frame/ds9parser.Y" { setProps(&globalProps,Marker::SOURCE,0); setProps(&localProps,Marker::SOURCE,0); ;} break; case 180: #line 651 "frame/ds9parser.Y" {globalPoint = localPoint = (yyvsp[(3) - (3)].integer);;} break; case 181: #line 653 "frame/ds9parser.Y" { globalPoint = localPoint = (yyvsp[(3) - (4)].integer); globalPointSize = localPointSize = (yyvsp[(4) - (4)].integer); ;} break; case 182: #line 658 "frame/ds9parser.Y" { globalLine1 = localLine1 = (yyvsp[(3) - (4)].integer); globalLine2 = localLine2 = (yyvsp[(4) - (4)].integer); ;} break; case 183: #line 662 "frame/ds9parser.Y" {globalVector = localVector = (yyvsp[(3) - (3)].integer);;} break; case 184: #line 664 "frame/ds9parser.Y" { globalComposite = localComposite = (yyvsp[(3) - (3)].integer); ;} break; case 185: #line 667 "frame/ds9parser.Y" {;} break; case 186: #line 669 "frame/ds9parser.Y" { strncpy(globalCompassNorth,(yyvsp[(4) - (7)].str),80); strncpy(globalCompassEast,(yyvsp[(5) - (7)].str),80); strncpy(localCompassNorth,(yyvsp[(4) - (7)].str),80); strncpy(localCompassEast,(yyvsp[(5) - (7)].str),80); globalCompassNArrow = localCompassNArrow = (yyvsp[(6) - (7)].integer); globalCompassEArrow = localCompassEArrow = (yyvsp[(7) - (7)].integer); ;} break; case 187: #line 677 "frame/ds9parser.Y" {globalTextAngle = localTextAngle = (yyvsp[(3) - (3)].real);;} break; case 188: #line 678 "frame/ds9parser.Y" {globalTextRotate = localTextRotate = (yyvsp[(3) - (3)].integer);;} break; case 189: #line 679 "frame/ds9parser.Y" {globalWCS = (Coord::CoordSystem)(yyvsp[(3) - (3)].integer);;} break; case 190: #line 683 "frame/ds9parser.Y" { globalRulerCoordSystem = localRulerCoordSystem = (Coord::CoordSystem)(yyvsp[(1) - (4)].integer); globalRulerSkyFrame = localRulerSkyFrame = (Coord::SkyFrame)(yyvsp[(2) - (4)].integer); globalRulerDistSystem = localRulerDistSystem = (Coord::CoordSystem)(yyvsp[(3) - (4)].integer); globalRulerDistFormat = localRulerDistFormat = (Coord::SkyDist)(yyvsp[(4) - (4)].integer); ;} break; case 191: #line 690 "frame/ds9parser.Y" { globalRulerCoordSystem = localRulerCoordSystem = (Coord::CoordSystem)(yyvsp[(1) - (2)].integer); globalRulerSkyFrame = localRulerSkyFrame = Coord::FK5; globalRulerDistSystem = localRulerDistSystem = (Coord::CoordSystem)(yyvsp[(2) - (2)].integer); globalRulerDistFormat = localRulerDistFormat = Coord::DEGREE; ;} break; case 192: #line 697 "frame/ds9parser.Y" { globalRulerCoordSystem = localRulerCoordSystem = (Coord::CoordSystem)(yyvsp[(1) - (2)].integer); globalRulerSkyFrame = localRulerSkyFrame = Coord::FK5; globalRulerDistSystem = localRulerDistSystem = Coord::WCS; globalRulerDistFormat = localRulerDistFormat = (Coord::SkyDist)(yyvsp[(2) - (2)].integer); ;} break; case 193: #line 704 "frame/ds9parser.Y" { globalRulerCoordSystem = localRulerCoordSystem = Coord::WCS; globalRulerSkyFrame = localRulerSkyFrame = (Coord::SkyFrame)(yyvsp[(1) - (2)].integer); globalRulerDistSystem = localRulerDistSystem = (Coord::CoordSystem)(yyvsp[(2) - (2)].integer); globalRulerDistFormat = localRulerDistFormat = Coord::DEGREE; ;} break; case 194: #line 711 "frame/ds9parser.Y" { globalRulerCoordSystem = localRulerCoordSystem = Coord::WCS; globalRulerSkyFrame = localRulerSkyFrame = (Coord::SkyFrame)(yyvsp[(1) - (2)].integer); globalRulerDistSystem = localRulerDistSystem = Coord::WCS; globalRulerDistFormat = localRulerDistFormat = (Coord::SkyDist)(yyvsp[(2) - (2)].integer); ;} break; case 195: #line 718 "frame/ds9parser.Y" { globalRulerCoordSystem = localRulerCoordSystem = Coord::WCS; globalRulerSkyFrame = localRulerSkyFrame = Coord::FK5; globalRulerDistSystem = localRulerDistSystem = (Coord::CoordSystem)(yyvsp[(2) - (2)].integer); globalRulerDistFormat = localRulerDistFormat = Coord::DEGREE; ;} break; case 196: #line 725 "frame/ds9parser.Y" { globalRulerCoordSystem = localRulerCoordSystem = Coord::WCS; globalRulerSkyFrame = localRulerSkyFrame = Coord::FK5; globalRulerDistSystem = localRulerDistSystem = Coord::WCS; globalRulerDistFormat = localRulerDistFormat = (Coord::SkyDist)(yyvsp[(2) - (2)].integer); ;} break; case 197: #line 732 "frame/ds9parser.Y" { globalRulerCoordSystem = localRulerCoordSystem = Coord::IMAGE; globalRulerSkyFrame = localRulerSkyFrame = Coord::FK5; globalRulerDistSystem = localRulerDistSystem = Coord::WCS; globalRulerDistFormat = localRulerDistFormat = (Coord::SkyDist)(yyvsp[(1) - (1)].integer); ;} break; case 198: #line 739 "frame/ds9parser.Y" { globalRulerCoordSystem = localRulerCoordSystem = Coord::IMAGE; globalRulerSkyFrame = localRulerSkyFrame = Coord::FK5; globalRulerDistSystem = localRulerDistSystem = Coord::IMAGE; globalRulerDistFormat = localRulerDistFormat = Coord::DEGREE; ;} break; case 199: #line 748 "frame/ds9parser.Y" { globalCompassCoordSystem = localCompassCoordSystem = (Coord::CoordSystem)(yyvsp[(1) - (2)].integer); globalCompassSkyFrame = localCompassSkyFrame = (Coord::SkyFrame)(yyvsp[(2) - (2)].integer); ;} break; case 200: #line 753 "frame/ds9parser.Y" { globalCompassCoordSystem = localCompassCoordSystem = (Coord::CoordSystem)(yyvsp[(1) - (1)].integer); globalCompassSkyFrame = localCompassSkyFrame = Coord::FK5; ;} break; case 201: #line 758 "frame/ds9parser.Y" { globalCompassCoordSystem = localCompassCoordSystem = Coord::WCS; globalCompassSkyFrame = localCompassSkyFrame = (Coord::SkyFrame)(yyvsp[(1) - (1)].integer); ;} break; case 202: #line 763 "frame/ds9parser.Y" { globalCompassCoordSystem = localCompassCoordSystem = Coord::WCS; globalCompassSkyFrame = localCompassSkyFrame = Coord::FK5; ;} break; case 203: #line 769 "frame/ds9parser.Y" { // global properties globalSystem = Coord::PHYSICAL; globalWCS = fr->wcsSystem(); globalSky = fr->wcsSky(); globalTile = 1; globalProps = Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::HIGHLITE | Marker::INCLUDE | Marker::SOURCE; strcpy(globalColor,"green"); globalDash[0] = 8; globalDash[1] = 3; globalWidth = 1; strcpy(globalFont,"helvetica 10 normal roman"); strcpy(globalText,""); // unique properties globalLine1 = 0; globalLine2 = 0; globalVector = 1; globalComposite = 1; globalRulerCoordSystem = Coord::PHYSICAL; globalRulerSkyFrame = Coord::FK5; globalRulerDistSystem = Coord::PHYSICAL; globalRulerDistFormat = Coord::DEGREE; globalCompassCoordSystem = Coord::PHYSICAL; globalCompassSkyFrame = Coord::FK5; strcpy(globalCompassNorth,"N"); strcpy(globalCompassEast,"E"); globalCompassNArrow = 1; globalCompassEArrow = 1; globalPoint = Point::BOXCIRCLE; globalPointSize = POINTSIZE; globalTextAngle=0; globalTextRotate=1; aStatus = 0; cStatus = 0; ;} break; case 206: #line 815 "frame/ds9parser.Y" {setProps(&localProps,(yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 207: #line 816 "frame/ds9parser.Y" {strncpy(localColor,(yyvsp[(3) - (3)].str),16);;} break; case 208: #line 818 "frame/ds9parser.Y" { localDash[0] =(yyvsp[(3) - (4)].integer); localDash[1] =(yyvsp[(4) - (4)].integer); ;} break; case 209: #line 822 "frame/ds9parser.Y" {localWidth = (yyvsp[(3) - (3)].integer);;} break; case 210: #line 823 "frame/ds9parser.Y" {strncpy(localFont,(yyvsp[(3) - (3)].str),32);;} break; case 211: #line 824 "frame/ds9parser.Y" {strncpy(localText,(yyvsp[(3) - (3)].str),80);;} break; case 212: #line 825 "frame/ds9parser.Y" {taglist.append(new Tag((yyvsp[(3) - (3)].str)));;} break; case 213: #line 826 "frame/ds9parser.Y" {cblist.append( new CallBack(fr->getInterp(),(CallBack::Type)(yyvsp[(3) - (5)].integer),(yyvsp[(4) - (5)].str),(yyvsp[(5) - (5)].str)));;} break; case 214: #line 828 "frame/ds9parser.Y" {setProps(&localProps,Marker::DASH,1);;} break; case 215: #line 829 "frame/ds9parser.Y" {setProps(&localProps,Marker::SOURCE,1);;} break; case 216: #line 830 "frame/ds9parser.Y" {setProps(&localProps,Marker::SOURCE,0);;} break; case 217: #line 832 "frame/ds9parser.Y" {localPoint = (yyvsp[(3) - (3)].integer);;} break; case 218: #line 833 "frame/ds9parser.Y" {localPoint = (yyvsp[(3) - (4)].integer); localPointSize = (yyvsp[(4) - (4)].integer);;} break; case 219: #line 834 "frame/ds9parser.Y" {localLine1=(yyvsp[(3) - (4)].integer); localLine2=(yyvsp[(4) - (4)].integer);;} break; case 220: #line 835 "frame/ds9parser.Y" {localVector=(yyvsp[(3) - (3)].integer);;} break; case 221: #line 836 "frame/ds9parser.Y" {localComposite=(yyvsp[(3) - (3)].integer);;} break; case 223: #line 839 "frame/ds9parser.Y" { strncpy(localCompassNorth,(yyvsp[(4) - (7)].str),80); strncpy(localCompassEast,(yyvsp[(5) - (7)].str),80); localCompassNArrow = (yyvsp[(6) - (7)].integer); localCompassEArrow = (yyvsp[(7) - (7)].integer); ;} break; case 224: #line 845 "frame/ds9parser.Y" {localTextAngle=(yyvsp[(3) - (3)].real);;} break; case 225: #line 846 "frame/ds9parser.Y" {localTextRotate=(yyvsp[(3) - (3)].integer);;} break; case 229: #line 853 "frame/ds9parser.Y" { localRulerCoordSystem = (Coord::CoordSystem)(yyvsp[(1) - (4)].integer); localRulerSkyFrame = (Coord::SkyFrame)(yyvsp[(2) - (4)].integer); localRulerDistSystem = (Coord::CoordSystem)(yyvsp[(3) - (4)].integer); localRulerDistFormat = (Coord::SkyDist)(yyvsp[(4) - (4)].integer); ;} break; case 230: #line 860 "frame/ds9parser.Y" { localRulerCoordSystem = (Coord::CoordSystem)(yyvsp[(1) - (2)].integer); localRulerSkyFrame = Coord::FK5; localRulerDistSystem = (Coord::CoordSystem)(yyvsp[(2) - (2)].integer); localRulerDistFormat = Coord::DEGREE; ;} break; case 231: #line 867 "frame/ds9parser.Y" { localRulerCoordSystem = (Coord::CoordSystem)(yyvsp[(1) - (2)].integer); localRulerSkyFrame = Coord::FK5; localRulerDistSystem = Coord::WCS; localRulerDistFormat = (Coord::SkyDist)(yyvsp[(2) - (2)].integer); ;} break; case 232: #line 874 "frame/ds9parser.Y" { localRulerCoordSystem = Coord::WCS; localRulerSkyFrame = (Coord::SkyFrame)(yyvsp[(1) - (2)].integer); localRulerDistSystem = (Coord::CoordSystem)(yyvsp[(2) - (2)].integer); localRulerDistFormat = Coord::DEGREE; ;} break; case 233: #line 881 "frame/ds9parser.Y" { localRulerCoordSystem = Coord::WCS; localRulerSkyFrame = (Coord::SkyFrame)(yyvsp[(1) - (2)].integer); localRulerDistSystem = Coord::WCS; localRulerDistFormat = (Coord::SkyDist)(yyvsp[(2) - (2)].integer); ;} break; case 234: #line 888 "frame/ds9parser.Y" { localRulerCoordSystem = Coord::WCS; localRulerSkyFrame = Coord::FK5; localRulerDistSystem = (Coord::CoordSystem)(yyvsp[(2) - (2)].integer); localRulerDistFormat = Coord::DEGREE; ;} break; case 235: #line 895 "frame/ds9parser.Y" { localRulerCoordSystem = Coord::WCS; localRulerSkyFrame = Coord::FK5; localRulerDistSystem = Coord::WCS; localRulerDistFormat = (Coord::SkyDist)(yyvsp[(2) - (2)].integer); ;} break; case 236: #line 902 "frame/ds9parser.Y" { localRulerCoordSystem = Coord::IMAGE; localRulerSkyFrame = Coord::FK5; localRulerDistSystem = Coord::WCS; localRulerDistFormat = (Coord::SkyDist)(yyvsp[(1) - (1)].integer); ;} break; case 237: #line 909 "frame/ds9parser.Y" { localRulerCoordSystem = Coord::IMAGE; localRulerSkyFrame = Coord::FK5; localRulerDistSystem = Coord::IMAGE; localRulerDistFormat = Coord::DEGREE; ;} break; case 238: #line 918 "frame/ds9parser.Y" { localCompassCoordSystem = (Coord::CoordSystem)(yyvsp[(1) - (2)].integer); localCompassSkyFrame = (Coord::SkyFrame)(yyvsp[(2) - (2)].integer); ;} break; case 239: #line 923 "frame/ds9parser.Y" { localCompassCoordSystem = (Coord::CoordSystem)(yyvsp[(1) - (1)].integer); localCompassSkyFrame = Coord::FK5; ;} break; case 240: #line 928 "frame/ds9parser.Y" { localCompassCoordSystem = Coord::WCS; localCompassSkyFrame = (Coord::SkyFrame)(yyvsp[(1) - (1)].integer); ;} break; case 241: #line 933 "frame/ds9parser.Y" { localCompassCoordSystem = Coord::WCS; localCompassSkyFrame = Coord::FK5; ;} break; case 242: #line 939 "frame/ds9parser.Y" {aNum=0; aAngNum=0;;} break; case 243: #line 939 "frame/ds9parser.Y" {localCpanda = 2;;} break; case 244: #line 940 "frame/ds9parser.Y" {localCpanda=0;;} break; case 245: #line 943 "frame/ds9parser.Y" {aNum=0; aAngNum=0, aAngle=0;;} break; case 246: #line 944 "frame/ds9parser.Y" {aAngle=(yyvsp[(9) - (10)].real);localEpanda=2;;} break; case 247: #line 945 "frame/ds9parser.Y" {localEpanda=0;;} break; case 248: #line 948 "frame/ds9parser.Y" {aNum=0; aAngNum=0, aAngle=0;;} break; case 249: #line 949 "frame/ds9parser.Y" {aAngle=(yyvsp[(9) - (10)].real);localBpanda=2;;} break; case 250: #line 950 "frame/ds9parser.Y" {localBpanda=0;;} break; case 251: #line 953 "frame/ds9parser.Y" { // reset maperr flag maperr = 0; // needed for annulus, ellipse annulus, and box annulus aNum = 2; // composite (previous conjunction found?) if (!cStatus) fr->resetCompositeMarker(); // global properties localSystem = globalSystem; localSky = globalSky; localProps = globalProps; strcpy(localColor,globalColor); localDash[0] = globalDash[0]; localDash[1] = globalDash[1]; localWidth = globalWidth; strcpy(localFont,globalFont); strcpy(localText,globalText); strcpy(localComment,""); taglist.deleteAll(); cblist.deleteAll(); // unique properties localLine1 = globalLine1; localLine2 = globalLine2; localVector = globalVector; localComposite = globalComposite; localPoint = globalPoint; localPointSize = globalPointSize; localRulerCoordSystem = globalRulerCoordSystem; localRulerSkyFrame = globalRulerSkyFrame; localRulerDistSystem = globalRulerDistSystem; localRulerDistFormat = globalRulerDistFormat; localCompassCoordSystem = globalCompassCoordSystem; localCompassSkyFrame = globalCompassSkyFrame; strcpy(localCompassNorth,globalCompassNorth); strcpy(localCompassEast,globalCompassEast); localCompassNArrow = globalCompassNArrow; localCompassEArrow = globalCompassEArrow; localTextAngle = globalTextAngle; localTextRotate = globalTextRotate; localCpanda = 1; localEpanda = 1; localBpanda = 1; ;} break; case 252: #line 1002 "frame/ds9parser.Y" {(yyval.integer) = Point::CIRCLE;;} break; case 253: #line 1003 "frame/ds9parser.Y" {(yyval.integer) = Point::BOX;;} break; case 254: #line 1004 "frame/ds9parser.Y" {(yyval.integer) = Point::DIAMOND;;} break; case 255: #line 1005 "frame/ds9parser.Y" {(yyval.integer) = Point::CROSS;;} break; case 256: #line 1006 "frame/ds9parser.Y" {(yyval.integer) = Point::EX;;} break; case 257: #line 1007 "frame/ds9parser.Y" {(yyval.integer) = Point::ARROW;;} break; case 258: #line 1008 "frame/ds9parser.Y" {(yyval.integer) = Point::BOXCIRCLE;;} break; case 259: #line 1011 "frame/ds9parser.Y" {setProps(&localProps, Marker::INCLUDE, 1);;} break; case 260: #line 1012 "frame/ds9parser.Y" {setProps(&localProps, Marker::INCLUDE, 0);;} break; case 261: #line 1016 "frame/ds9parser.Y" { fr->createVectCmd(Vector((yyvsp[(3) - (10)].vector)), (yyvsp[(5) - (10)].real),(yyvsp[(7) - (10)].real), localVector, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 262: #line 1023 "frame/ds9parser.Y" {polylist.deleteAll();;} break; case 263: #line 1025 "frame/ds9parser.Y" { fr->createSegmentCmd(polylist, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 264: #line 1031 "frame/ds9parser.Y" { fr->createTextCmd(Vector((yyvsp[(3) - (6)].vector)), localTextAngle,localTextRotate, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 265: #line 1038 "frame/ds9parser.Y" { fr->createRulerCmd(Vector((yyvsp[(3) - (8)].vector)), Vector((yyvsp[(5) - (8)].vector)), localRulerCoordSystem, localRulerSkyFrame, localRulerDistSystem, localRulerDistFormat, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 266: #line 1047 "frame/ds9parser.Y" { fr->createCompassCmd(Vector((yyvsp[(3) - (8)].vector)), (yyvsp[(5) - (8)].real), localCompassNorth, localCompassEast, localCompassNArrow, localCompassEArrow, localCompassCoordSystem, localCompassSkyFrame, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 267: #line 1057 "frame/ds9parser.Y" { fr->createProjectionCmd(Vector((yyvsp[(3) - (10)].vector)), Vector((yyvsp[(5) - (10)].vector)), (yyvsp[(7) - (10)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 268: #line 1065 "frame/ds9parser.Y" { // backward compatibility fr->createCircleCmd(Vector((yyvsp[(3) - (8)].vector)), (yyvsp[(5) - (8)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 269: #line 1073 "frame/ds9parser.Y" { fr->createCompositeCmd(Vector((yyvsp[(3) - (8)].vector)), (yyvsp[(5) - (8)].real), localComposite, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 270: #line 1082 "frame/ds9parser.Y" { fr->createCircleCmd(Vector((yyvsp[(3) - (8)].vector)), (yyvsp[(5) - (8)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 271: #line 1089 "frame/ds9parser.Y" { // backwards compatibility fr->createCircleCmd(Vector((yyvsp[(3) - (8)].vector)), (yyvsp[(5) - (8)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 272: #line 1097 "frame/ds9parser.Y" { // for ellipse annulus aStatus = 1; aCenter = Vector((yyvsp[(3) - (10)].vector)); aAngles[0] = (yyvsp[(7) - (10)].real); aVector[0] = Vector((yyvsp[(5) - (10)].vector)); aNumsao = 1; strncpy(aColor,localColor,16); aDash[0] = localDash[0]; aDash[1] = localDash[1]; aWidth = localWidth; strncpy(aFont,localFont,32); strncpy(aText,localText,80); strncpy(aComment,localComment,80); aProps = localProps; fr->createEllipseCmd(Vector((yyvsp[(3) - (10)].vector)), Vector((yyvsp[(5) - (10)].vector)), (yyvsp[(7) - (10)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 273: #line 1120 "frame/ds9parser.Y" { // for box annulus aStatus = 3; aCenter = Vector((yyvsp[(3) - (10)].vector)); aAngles[0] = (yyvsp[(7) - (10)].real); aVector[0] = Vector((yyvsp[(5) - (10)].vector)); aNumsao = 1; strncpy(aColor,localColor,16); aDash[0] = localDash[0]; aDash[1] = localDash[1]; aWidth = localWidth; strncpy(aFont,localFont,32); strncpy(aText,localText,80); strncpy(aComment,localComment,80); aProps = localProps; fr->createBoxCmd(Vector((yyvsp[(3) - (10)].vector)), Vector((yyvsp[(5) - (10)].vector)), (yyvsp[(7) - (10)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 274: #line 1143 "frame/ds9parser.Y" { // backwards compatibility fr->createBoxCmd(Vector((yyvsp[(3) - (10)].vector)), Vector((yyvsp[(5) - (10)].vector)), (yyvsp[(7) - (10)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 275: #line 1151 "frame/ds9parser.Y" {polylist.deleteAll();;} break; case 276: #line 1153 "frame/ds9parser.Y" { fr->createPolygonCmd(polylist, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 277: #line 1158 "frame/ds9parser.Y" {polylist.deleteAll();;} break; case 278: #line 1160 "frame/ds9parser.Y" { fr->createSegmentCmd(polylist, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 279: #line 1167 "frame/ds9parser.Y" { fr->createLineCmd(Vector((yyvsp[(3) - (8)].vector)), Vector((yyvsp[(5) - (8)].vector)), localLine1,localLine2, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 280: #line 1175 "frame/ds9parser.Y" { fr->createVectCmd(Vector((yyvsp[(3) - (10)].vector)), (yyvsp[(5) - (10)].real),(yyvsp[(7) - (10)].real), localVector, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 281: #line 1183 "frame/ds9parser.Y" { fr->createTextCmd(Vector((yyvsp[(3) - (6)].vector)), localTextAngle,localTextRotate, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 282: #line 1189 "frame/ds9parser.Y" {strncpy(localText,(yyvsp[(5) - (6)].str),80);;} break; case 283: #line 1191 "frame/ds9parser.Y" { fr->createTextCmd(Vector((yyvsp[(3) - (9)].vector)), localTextAngle,localTextRotate, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 284: #line 1198 "frame/ds9parser.Y" { fr->createPointCmd(Vector((yyvsp[(3) - (6)].vector)), (Point::PointShape)localPoint, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 285: #line 1205 "frame/ds9parser.Y" { // backwards compatibility fr->createPointCmd(Vector((yyvsp[(4) - (7)].vector)), Point::CIRCLE, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 286: #line 1212 "frame/ds9parser.Y" { // backwards compatibility fr->createPointCmd(Vector((yyvsp[(4) - (7)].vector)), Point::BOX, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 287: #line 1219 "frame/ds9parser.Y" { // backwards compatibility fr->createPointCmd(Vector((yyvsp[(4) - (7)].vector)), Point::DIAMOND, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 288: #line 1226 "frame/ds9parser.Y" { // backwards compatibility fr->createPointCmd(Vector((yyvsp[(4) - (7)].vector)), Point::CROSS, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 289: #line 1233 "frame/ds9parser.Y" { // backwards compatibility fr->createPointCmd(Vector((yyvsp[(4) - (7)].vector)), Point::EX, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 290: #line 1240 "frame/ds9parser.Y" { // backwards compatibility fr->createPointCmd(Vector((yyvsp[(4) - (7)].vector)), Point::ARROW, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 291: #line 1247 "frame/ds9parser.Y" { // backwards compatibility fr->createPointCmd(Vector((yyvsp[(4) - (7)].vector)), Point::BOXCIRCLE, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 292: #line 1254 "frame/ds9parser.Y" { fr->createRulerCmd(Vector((yyvsp[(3) - (8)].vector)), Vector((yyvsp[(5) - (8)].vector)), localRulerCoordSystem, localRulerSkyFrame, localRulerDistSystem, localRulerDistFormat, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 293: #line 1263 "frame/ds9parser.Y" { fr->createCompassCmd(Vector((yyvsp[(3) - (8)].vector)), (yyvsp[(5) - (8)].real), localCompassNorth, localCompassEast, localCompassNArrow, localCompassEArrow, localCompassCoordSystem, localCompassSkyFrame, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 294: #line 1273 "frame/ds9parser.Y" { fr->createProjectionCmd(Vector((yyvsp[(3) - (10)].vector)), Vector((yyvsp[(5) - (10)].vector)), (yyvsp[(7) - (10)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 295: #line 1281 "frame/ds9parser.Y" { fr->createAnnulusCmd(Vector((yyvsp[(3) - (10)].vector)), (yyvsp[(5) - (10)].real),(yyvsp[(7) - (10)].real),1, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 296: #line 1289 "frame/ds9parser.Y" { aAnnuli[0] = (yyvsp[(5) - (12)].real); aAnnuli[1] = (yyvsp[(7) - (12)].real); fr->createAnnulusCmd(Vector((yyvsp[(3) - (12)].vector)), aNum,aAnnuli, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 297: #line 1299 "frame/ds9parser.Y" { fr->createAnnulusCmd(Vector((yyvsp[(3) - (12)].vector)), (yyvsp[(5) - (12)].real),(yyvsp[(7) - (12)].real),(yyvsp[(9) - (12)].integer), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 298: #line 1307 "frame/ds9parser.Y" { // prefered syntax fr->createEllipseAnnulusCmd(Vector((yyvsp[(3) - (12)].vector)), Vector((yyvsp[(5) - (12)].vector)),Vector((yyvsp[(7) - (12)].vector)),1, (yyvsp[(9) - (12)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 299: #line 1317 "frame/ds9parser.Y" { // prefered syntax fr->createEllipseAnnulusCmd(Vector((yyvsp[(3) - (14)].vector)), Vector((yyvsp[(5) - (14)].vector)),Vector((yyvsp[(7) - (14)].vector)),(yyvsp[(9) - (14)].integer), (yyvsp[(11) - (14)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 300: #line 1327 "frame/ds9parser.Y" { // prefered syntax aVector[0] = Vector((yyvsp[(5) - (14)].vector)); aVector[1] = Vector((yyvsp[(7) - (14)].vector)); fr->createEllipseAnnulusCmd(Vector((yyvsp[(3) - (14)].vector)), aNum,aVector, (yyvsp[(11) - (14)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 301: #line 1339 "frame/ds9parser.Y" { // backwards compatibility // old saoimage syntax aStatus = 2; aVector[aNumsao++] = Vector((yyvsp[(5) - (18)].vector)); ;} break; case 302: #line 1347 "frame/ds9parser.Y" { // prefered syntax fr->createBoxAnnulusCmd(Vector((yyvsp[(3) - (12)].vector)), Vector((yyvsp[(5) - (12)].vector)),Vector((yyvsp[(7) - (12)].vector)),1, (yyvsp[(9) - (12)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 303: #line 1357 "frame/ds9parser.Y" { // prefered syntax aVector[0] = Vector((yyvsp[(5) - (14)].vector)); aVector[1] = Vector((yyvsp[(7) - (14)].vector)); fr->createBoxAnnulusCmd(Vector((yyvsp[(3) - (14)].vector)), aNum,aVector, (yyvsp[(11) - (14)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 304: #line 1369 "frame/ds9parser.Y" { // prefered syntax fr->createBoxAnnulusCmd(Vector((yyvsp[(3) - (14)].vector)), Vector((yyvsp[(5) - (14)].vector)),Vector((yyvsp[(7) - (14)].vector)),(yyvsp[(9) - (14)].integer), (yyvsp[(11) - (14)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 305: #line 1379 "frame/ds9parser.Y" { // backwards compatibility // old saoimage syntax aStatus = 4; aVector[aNumsao++] = Vector((yyvsp[(5) - (18)].vector)); ;} break; case 306: #line 1388 "frame/ds9parser.Y" { switch (localCpanda) { case 0: /* ignore it */ break; case 1: /* normal cpanda */ fr->createCpandaCmd(Vector((yyvsp[(3) - (18)].vector)), (yyvsp[(5) - (18)].real),(yyvsp[(7) - (18)].real),(yyvsp[(9) - (18)].integer), (yyvsp[(11) - (18)].real),(yyvsp[(13) - (18)].real),(yyvsp[(15) - (18)].integer), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); break; case 2: /* one of our special pandas */ fr->createCpandaCmd(Vector((yyvsp[(3) - (18)].vector)), aAngNum,aAngles, aNum,aAnnuli, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); break; } ;} break; case 307: #line 1410 "frame/ds9parser.Y" { switch (localEpanda) { case 0: /* ignore it */ break; case 1: /* normal epanda */ fr->createEpandaCmd(Vector((yyvsp[(3) - (20)].vector)), (yyvsp[(5) - (20)].real),(yyvsp[(7) - (20)].real),(yyvsp[(9) - (20)].integer), Vector((yyvsp[(11) - (20)].vector)),Vector((yyvsp[(13) - (20)].vector)),(yyvsp[(15) - (20)].integer), (yyvsp[(17) - (20)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); break; case 2: /* one of our special pandas */ fr->createEpandaCmd(Vector((yyvsp[(3) - (20)].vector)), aAngNum,aAngles, aNum,aVector, aAngle, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); break; } ;} break; case 308: #line 1434 "frame/ds9parser.Y" { switch (localBpanda) { case 0: /* ignore it */ break; case 1: /* normal bpanda */ fr->createBpandaCmd(Vector((yyvsp[(3) - (20)].vector)), (yyvsp[(5) - (20)].real),(yyvsp[(7) - (20)].real),(yyvsp[(9) - (20)].integer), Vector((yyvsp[(11) - (20)].vector)),Vector((yyvsp[(13) - (20)].vector)),(yyvsp[(15) - (20)].integer), (yyvsp[(17) - (20)].real), localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); break; case 2: /* one of our special pandas */ fr->createBpandaCmd(Vector((yyvsp[(3) - (20)].vector)), aAngNum,aAngles, aNum,aVector, aAngle, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); break; } ;} break; case 313: #line 1464 "frame/ds9parser.Y" { fr->createCompositeCmd(Vector((yyvsp[(3) - (8)].vector)), (yyvsp[(5) - (8)].real), localComposite, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); ;} break; case 316: #line 1476 "frame/ds9parser.Y" {polylist.append(new Vertex((yyvsp[(1) - (1)].vector)));;} break; case 319: #line 1484 "frame/ds9parser.Y" { if (aNum < MAXANNULI) aAnnuli[aNum++] = (yyvsp[(1) - (1)].real); ;} break; case 322: #line 1495 "frame/ds9parser.Y" { if (aAngNum < MAXANGLES) aAngles[aAngNum++] = (yyvsp[(1) - (1)].real); ;} break; case 325: #line 1505 "frame/ds9parser.Y" {aVector[aNum++] = Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real));;} break; case 326: #line 1509 "frame/ds9parser.Y" { // old style annulus switch (aStatus) { case 0: // do nothing break; case 1: // we found just an ellipse, do nothing break; case 2: // ok we have an ellipse annulus fr->markerDeleteLastCmd(); // delete the previous ellipse fr->createEllipseAnnulusCmd(aCenter, aNumsao,aVector, aAngles[0], aColor,aDash,aWidth,aFont,aText,aProps,aComment,taglist,cblist); break; case 3: // we found just a box, do nothing break; case 4: // ok, we have a box annulus fr->markerDeleteLastCmd(); // delete the previous box fr->createBoxAnnulusCmd(aCenter, aNumsao,aVector, aAngles[0], aColor,aDash,aWidth,aFont,aText,aProps,aComment,taglist,cblist); break; } aStatus = 0; ;} break; /* Line 1267 of yacc.c. */ #line 4894 "frame/ds9parser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (fr, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (fr, ll, yymsg); } else { yyerror (fr, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, fr, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, fr, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (fr, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, fr, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, fr, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 1536 "frame/ds9parser.Y" static void setProps(unsigned short* props, unsigned short prop, int value) { if (value) *props |= prop; else *props &= ~prop; } static Coord::CoordSystem checkWCSSystem() { switch (localSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::WCS; default: return localSystem; } } static Coord::SkyFrame checkWCSSky() { switch (localSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::FK5; default: return localSky; } } saods9/tksao/frame/ds9parser.H000644 000765 000000 00000015736 12761117102 016636 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, STRING = 260, COLOR = 261, ANGDEGREE = 262, ANGRADIAN = 263, ARCMINUTE = 264, ARCSECOND = 265, PHYCOORD = 266, IMGCOORD = 267, SEXSTR = 268, HMSSTR = 269, DMSSTR = 270, EOF_ = 271, AMPLIFIER_ = 272, ANNULUS_ = 273, ARCMIN_ = 274, ARCSEC_ = 275, ARROW_ = 276, B1950_ = 277, BACKGROUND_ = 278, BEGIN_ = 279, BOX_ = 280, BOXCIRCLE_ = 281, BPANDA_ = 282, CALLBACK_ = 283, CIRCLE_ = 284, CIRCLE3D_ = 285, COLOR_ = 286, COMPASS_ = 287, COMPOSITE_ = 288, CPANDA_ = 289, CROSS_ = 290, DASH_ = 291, DASHLIST_ = 292, DEBUG_ = 293, DEGREES_ = 294, DELETE_ = 295, DETECTOR_ = 296, DIAMOND_ = 297, ECLIPTIC_ = 298, EDIT_ = 299, ELLIPSE_ = 300, END_ = 301, EPANDA_ = 302, FALSE_ = 303, FIELD_ = 304, FIXED_ = 305, FK4_ = 306, FK4_NO_E_ = 307, FK5_ = 308, FONT_ = 309, GALACTIC_ = 310, GLOBAL_ = 311, HELIOECLIPTIC_ = 312, HIGHLITE_ = 313, ICRS_ = 314, IGNORE_ = 315, IMAGE_ = 316, INCLUDE_ = 317, J2000_ = 318, KEY_ = 319, LINE_ = 320, LINEAR_ = 321, MOVE_ = 322, N_ = 323, NO_ = 324, OFF_ = 325, ON_ = 326, PHYSICAL_ = 327, PIE_ = 328, PIXELS_ = 329, POINT_ = 330, POLYGON_ = 331, PROJECTION_ = 332, PROPERTY_ = 333, ROTATE_ = 334, ROTBOX_ = 335, RULER_ = 336, SEGMENT_ = 337, SELECT_ = 338, SOURCE_ = 339, SUPERGALACTIC_ = 340, TAG_ = 341, TEXT_ = 342, TEXTANGLE_ = 343, TEXTROTATE_ = 344, TILE_ = 345, TRUE_ = 346, VECTOR_ = 347, VERSION_ = 348, UNHIGHLITE_ = 349, UNSELECT_ = 350, UPDATE_ = 351, WCS_ = 352, WCSA_ = 353, WCSB_ = 354, WCSC_ = 355, WCSD_ = 356, WCSE_ = 357, WCSF_ = 358, WCSG_ = 359, WCSH_ = 360, WCSI_ = 361, WCSJ_ = 362, WCSK_ = 363, WCSL_ = 364, WCSM_ = 365, WCSN_ = 366, WCSO_ = 367, WCSP_ = 368, WCSQ_ = 369, WCSR_ = 370, WCSS_ = 371, WCST_ = 372, WCSU_ = 373, WCSV_ = 374, WCSW_ = 375, WCSX_ = 376, WCSY_ = 377, WCSZ_ = 378, WCS0_ = 379, WIDTH_ = 380, X_ = 381, Y_ = 382, YES_ = 383 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define STRING 260 #define COLOR 261 #define ANGDEGREE 262 #define ANGRADIAN 263 #define ARCMINUTE 264 #define ARCSECOND 265 #define PHYCOORD 266 #define IMGCOORD 267 #define SEXSTR 268 #define HMSSTR 269 #define DMSSTR 270 #define EOF_ 271 #define AMPLIFIER_ 272 #define ANNULUS_ 273 #define ARCMIN_ 274 #define ARCSEC_ 275 #define ARROW_ 276 #define B1950_ 277 #define BACKGROUND_ 278 #define BEGIN_ 279 #define BOX_ 280 #define BOXCIRCLE_ 281 #define BPANDA_ 282 #define CALLBACK_ 283 #define CIRCLE_ 284 #define CIRCLE3D_ 285 #define COLOR_ 286 #define COMPASS_ 287 #define COMPOSITE_ 288 #define CPANDA_ 289 #define CROSS_ 290 #define DASH_ 291 #define DASHLIST_ 292 #define DEBUG_ 293 #define DEGREES_ 294 #define DELETE_ 295 #define DETECTOR_ 296 #define DIAMOND_ 297 #define ECLIPTIC_ 298 #define EDIT_ 299 #define ELLIPSE_ 300 #define END_ 301 #define EPANDA_ 302 #define FALSE_ 303 #define FIELD_ 304 #define FIXED_ 305 #define FK4_ 306 #define FK4_NO_E_ 307 #define FK5_ 308 #define FONT_ 309 #define GALACTIC_ 310 #define GLOBAL_ 311 #define HELIOECLIPTIC_ 312 #define HIGHLITE_ 313 #define ICRS_ 314 #define IGNORE_ 315 #define IMAGE_ 316 #define INCLUDE_ 317 #define J2000_ 318 #define KEY_ 319 #define LINE_ 320 #define LINEAR_ 321 #define MOVE_ 322 #define N_ 323 #define NO_ 324 #define OFF_ 325 #define ON_ 326 #define PHYSICAL_ 327 #define PIE_ 328 #define PIXELS_ 329 #define POINT_ 330 #define POLYGON_ 331 #define PROJECTION_ 332 #define PROPERTY_ 333 #define ROTATE_ 334 #define ROTBOX_ 335 #define RULER_ 336 #define SEGMENT_ 337 #define SELECT_ 338 #define SOURCE_ 339 #define SUPERGALACTIC_ 340 #define TAG_ 341 #define TEXT_ 342 #define TEXTANGLE_ 343 #define TEXTROTATE_ 344 #define TILE_ 345 #define TRUE_ 346 #define VECTOR_ 347 #define VERSION_ 348 #define UNHIGHLITE_ 349 #define UNSELECT_ 350 #define UPDATE_ 351 #define WCS_ 352 #define WCSA_ 353 #define WCSB_ 354 #define WCSC_ 355 #define WCSD_ 356 #define WCSE_ 357 #define WCSF_ 358 #define WCSG_ 359 #define WCSH_ 360 #define WCSI_ 361 #define WCSJ_ 362 #define WCSK_ 363 #define WCSL_ 364 #define WCSM_ 365 #define WCSN_ 366 #define WCSO_ 367 #define WCSP_ 368 #define WCSQ_ 369 #define WCSR_ 370 #define WCSS_ 371 #define WCST_ 372 #define WCSU_ 373 #define WCSV_ 374 #define WCSW_ 375 #define WCSX_ 376 #define WCSY_ 377 #define WCSZ_ 378 #define WCS0_ 379 #define WIDTH_ 380 #define X_ 381 #define Y_ 382 #define YES_ 383 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 136 "frame/ds9parser.Y" { #define MKBUFSIZE 2048 double real; int integer; char str[MKBUFSIZE]; double vector[3]; } /* Line 1529 of yacc.c. */ #line 313 "frame/ds9parser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/frame/ds9parser.Y000644 000765 000000 00000117753 12762062114 016664 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {Base* fr} %lex-param {mkFlexLexer* ll} %parse-param {mkFlexLexer* ll} %{ #define YYDEBUG 1 #define FITSPTR (fr->findFits(globalTile)) #define DISCARD_(x) {yyclearin; mkDiscard(x);} #include #include #include #include "base.h" #include "fitsimage.h" #include "basemarker.h" #include "point.h" #undef yyFlexLexer #define yyFlexLexer mkFlexLexer #include extern int mklex(void*, mkFlexLexer*); extern void mkerror(Base*, mkFlexLexer*, const char*); extern void mkDiscard(int); static Coord::CoordSystem globalWCS; static Coord::CoordSystem globalSystem; static Coord::CoordSystem localSystem; static Coord::SkyFrame globalSky; static Coord::SkyFrame localSky; static int globalTile; static unsigned short globalProps; static unsigned short localProps; static int globalDash[2]; static int localDash[2]; static int globalWidth; static int localWidth; static char globalColor[16]; static char localColor[16]; static char globalFont[32]; static char localFont[32]; static char globalText[80]; static char localText[80]; static char localComment[80]; static int globalLine1; static int localLine1; static int globalLine2; static int localLine2; static int globalVector; static int localVector; static int globalComposite; static int localComposite; static int globalPoint; static int localPoint; static int globalPointSize; static int localPointSize; static double globalTextAngle; static double localTextAngle; static int globalTextRotate; static int localTextRotate; static Coord::CoordSystem globalRulerCoordSystem; static Coord::CoordSystem localRulerCoordSystem; static Coord::SkyFrame globalRulerSkyFrame; static Coord::SkyFrame localRulerSkyFrame; static Coord::CoordSystem globalRulerDistSystem; static Coord::CoordSystem localRulerDistSystem; static Coord::SkyDist globalRulerDistFormat; static Coord::SkyDist localRulerDistFormat; static Coord::CoordSystem globalCompassCoordSystem; static Coord::SkyFrame globalCompassSkyFrame; static char globalCompassNorth[80]; static char globalCompassEast[80]; static int globalCompassNArrow; static int globalCompassEArrow; static Coord::CoordSystem localCompassCoordSystem; static Coord::SkyFrame localCompassSkyFrame; static char localCompassNorth[80]; static char localCompassEast[80]; static int localCompassNArrow; static int localCompassEArrow; static int localCpanda; static int localEpanda; static int localBpanda; static List polylist; static List taglist; static List cblist; static double aAnnuli[MAXANNULI]; static Vector aVector[MAXANNULI]; static int aNum; static int aNumsao; static int aStatus; static int cStatus; static Vector aCenter; static double aAngles[MAXANGLES]; static int aAngNum; static double aAngle; static unsigned short aProps; static char aColor[16]; static int aWidth; static int aDash[2]; static char aFont[32]; static char aText[80]; static char aComment[80]; static void setProps(unsigned short* props, unsigned short prop, int value); static Coord::CoordSystem checkWCSSystem(); static Coord::SkyFrame checkWCSSky(); %} %union { #define MKBUFSIZE 2048 double real; int integer; char str[MKBUFSIZE]; double vector[3]; } %type numeric %type yesno %type angle %type optangle %type value %type vvalue %type sexagesimal %type hms %type dms %type coord %type coordSystem %type wcsSystem %type skyFrame %type skyDist %type property %type callBack %type pointShape %type numberof %token INT %token REAL %token STRING %token ANGDEGREE %token ANGRADIAN %token ARCMINUTE %token ARCSECOND %token PHYCOORD %token IMGCOORD %token SEXSTR %token HMSSTR %token DMSSTR %token EOF_ %token AMPLIFIER_ %token ANNULUS_ %token ARCMIN_ %token ARCSEC_ %token ARROW_ %token B1950_ %token BACKGROUND_ %token BEGIN_ %token BOX_ %token BOXCIRCLE_ %token BPANDA_ %token CALLBACK_ %token CIRCLE_ %token CIRCLE3D_ %token COLOR_ %token COMPASS_ %token COMPOSITE_ %token CPANDA_ %token CROSS_ %token DASH_ %token DASHLIST_ %token DEBUG_ %token DEGREES_ %token DELETE_ %token DETECTOR_ %token DIAMOND_ %token ECLIPTIC_ %token EDIT_ %token ELLIPSE_ %token END_ %token EPANDA_ %token FALSE_ %token FIELD_ %token FIXED_ %token FK4_ %token FK4_NO_E_ %token FK5_ %token FONT_ %token GALACTIC_ %token GLOBAL_ %token HELIOECLIPTIC_ %token HIGHLITE_ %token ICRS_ %token IGNORE_ %token IMAGE_ %token INCLUDE_ %token J2000_ %token KEY_ %token LINE_ %token LINEAR_ %token MOVE_ %token N_ %token NO_ %token OFF_ %token ON_ %token PHYSICAL_ %token PIE_ %token PIXELS_ %token POINT_ %token POLYGON_ %token PROJECTION_ %token PROPERTY_ %token ROTATE_ %token ROTBOX_ %token RULER_ %token SEGMENT_ %token SELECT_ %token SOURCE_ %token SUPERGALACTIC_ %token TAG_ %token TEXT_ %token TEXTANGLE_ %token TEXTROTATE_ %token TILE_ %token TRUE_ %token VECTOR_ %token VERSION_ %token UNHIGHLITE_ %token UNSELECT_ %token UPDATE_ %token WCS_ %token WCSA_ %token WCSB_ %token WCSC_ %token WCSD_ %token WCSE_ %token WCSF_ %token WCSG_ %token WCSH_ %token WCSI_ %token WCSJ_ %token WCSK_ %token WCSL_ %token WCSM_ %token WCSN_ %token WCSO_ %token WCSP_ %token WCSQ_ %token WCSR_ %token WCSS_ %token WCST_ %token WCSU_ %token WCSV_ %token WCSW_ %token WCSX_ %token WCSY_ %token WCSZ_ %token WCS0_ %token WIDTH_ %token X_ %token Y_ %token YES_ %% start : initGlobal commands postLocal ; commands: commands command terminator | command terminator ; command : /* empty */ | DEBUG_ debug | VERSION_ {cerr << "DS9 Regions File 3.2" << endl;} | GLOBAL_ global comment | TILE_ INT {globalTile = $2;} | coordSystem {globalSystem=(Coord::CoordSystem)$1;} comment | skyFrame {globalSystem=globalWCS; globalSky=(Coord::SkyFrame)$1;} comment | LINEAR_ {globalSystem=globalWCS; globalSky=Coord::FK5;} comment | initLocal shape | initLocal include shape | initLocal '#' hash ; hash : nonshape | include nonshape | TILE_ INT {globalTile = $2;} | {DISCARD_(1);} STRING ; comment : /* empty */ | '#' {DISCARD_(1);} STRING ; shapeComment : /* empty */ postLocal | '#' {DISCARD_(1);} STRING postLocal {strncpy(localComment,$3,80);} | '#' local postLocal | '#' local {DISCARD_(1);} STRING postLocal {strncpy(localComment,$4,80);} ; nonshapeComment : /* empty */ postLocal | {DISCARD_(1);} STRING postLocal {strncpy(localComment,$2,80);} | local postLocal | local {DISCARD_(1);} STRING postLocal {strncpy(localComment,$3,80);} ; terminator: '\n' | ';' | EOF_ {YYACCEPT;} ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; yesno : INT {$$=($1 ? 1 : 0);} | YES_ {$$=1;} | Y_ {$$=1;} | ON_ {$$=1;} | TRUE_ {$$=1;} | NO_ {$$=0;} | N_ {$$=0;} | OFF_ {$$=0;} | FALSE_ {$$=0;} ; sp : /* empty */ | ',' ; bp : /* empty */ | '(' ; ep : /* emtpy */ | ')' ; conjunction : /* empty */ {cStatus = 0;} | '|' {cStatus = 1;} | '|' '|' {cStatus = 1;} ; optangle: /* empty */ {$$ = fr->mapAngleToRef(0,localSystem,localSky);} | angle {$$ = $1;} ; angle : numeric {$$ = fr->mapAngleToRef(degToRad($1),localSystem,localSky);} | ANGDEGREE {$$ = fr->mapAngleToRef(degToRad($1),localSystem,localSky);} | ANGRADIAN {$$ = fr->mapAngleToRef($1,localSystem,localSky);} ; value : numeric {$$ = FITSPTR->mapLenToRef($1, localSystem, Coord::DEGREE);} | PHYCOORD {$$ = FITSPTR->mapLenToRef($1, Coord::PHYSICAL);} | IMGCOORD {$$ = FITSPTR->mapLenToRef($1, Coord::IMAGE);} | ANGDEGREE {$$ = FITSPTR->mapLenToRef($1, checkWCSSystem(), Coord::DEGREE);} | ARCMINUTE {$$ = FITSPTR->mapLenToRef($1, checkWCSSystem(), Coord::ARCMIN);} | ARCSECOND {$$ = FITSPTR->mapLenToRef($1, checkWCSSystem(), Coord::ARCSEC);} ; vvalue : numeric sp numeric { Vector r = FITSPTR->mapLenToRef(Vector($1,$3), localSystem, Coord::DEGREE); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | PHYCOORD sp PHYCOORD { Vector r = FITSPTR->mapLenToRef(Vector($1,$3), Coord::PHYSICAL); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | IMGCOORD sp IMGCOORD { Vector r = FITSPTR->mapLenToRef(Vector($1,$3), Coord::IMAGE); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | ANGDEGREE sp ANGDEGREE { Vector r=FITSPTR->mapLenToRef(Vector($1,$3),checkWCSSystem(),Coord::DEGREE); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | ARCMINUTE sp ARCMINUTE { Vector r=FITSPTR->mapLenToRef(Vector($1,$3),checkWCSSystem(),Coord::ARCMIN); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | ARCSECOND sp ARCSECOND { Vector r=FITSPTR->mapLenToRef(Vector($1,$3),checkWCSSystem(),Coord::ARCSEC); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } ; numberof: N_ '=' INT {$$ = $3;} ; sexagesimal: SEXSTR {$$ = parseSEXStr($1);} ; hms : HMSSTR {$$ = parseHMSStr($1);} ; dms : DMSSTR {$$ = parseDMSStr($1);} ; coord : sexagesimal sp sexagesimal { Vector r; Coord::CoordSystem sys = checkWCSSystem(); Coord::SkyFrame sky = checkWCSSky(); if (sky == Coord::GALACTIC || sky == Coord::ECLIPTIC) r = FITSPTR->mapToRef(Vector($1,$3), sys, sky); else r = FITSPTR->mapToRef(Vector($1*360./24.,$3), sys, sky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | hms sp dms { Vector r = FITSPTR->mapToRef(Vector($1,$3), checkWCSSystem(), checkWCSSky()); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | dms sp dms { Vector r = FITSPTR->mapToRef(Vector($1,$3), checkWCSSystem(), checkWCSSky()); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | numeric sp numeric { Vector r = FITSPTR->mapToRef(Vector($1,$3), localSystem, localSky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | ANGDEGREE sp ANGDEGREE { Vector r = FITSPTR->mapToRef(Vector($1,$3), checkWCSSystem(), checkWCSSky()); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | IMGCOORD sp IMGCOORD { Vector r = FITSPTR->mapToRef(Vector($1,$3), Coord::IMAGE); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | PHYCOORD sp PHYCOORD { Vector r = FITSPTR->mapToRef(Vector($1,$3), Coord::PHYSICAL); $$[0] = r[0]; $$[1] = r[1]; } ; coordSystem :IMAGE_ {$$ = Coord::IMAGE;} | PHYSICAL_ {$$ = Coord::PHYSICAL;} | DETECTOR_ {$$ = Coord::DETECTOR;} | AMPLIFIER_ {$$ = Coord::AMPLIFIER;} | wcsSystem {$$ = $1; globalWCS = (Coord::CoordSystem)$1;} ; wcsSystem : WCS_ {$$ = Coord::WCS;} | WCSA_ {$$ = Coord::WCSA;} | WCSB_ {$$ = Coord::WCSB;} | WCSC_ {$$ = Coord::WCSC;} | WCSD_ {$$ = Coord::WCSD;} | WCSE_ {$$ = Coord::WCSE;} | WCSF_ {$$ = Coord::WCSF;} | WCSG_ {$$ = Coord::WCSG;} | WCSH_ {$$ = Coord::WCSH;} | WCSI_ {$$ = Coord::WCSI;} | WCSJ_ {$$ = Coord::WCSJ;} | WCSK_ {$$ = Coord::WCSK;} | WCSL_ {$$ = Coord::WCSL;} | WCSM_ {$$ = Coord::WCSM;} | WCSN_ {$$ = Coord::WCSN;} | WCSO_ {$$ = Coord::WCSO;} | WCSP_ {$$ = Coord::WCSP;} | WCSQ_ {$$ = Coord::WCSQ;} | WCSR_ {$$ = Coord::WCSR;} | WCSS_ {$$ = Coord::WCSS;} | WCST_ {$$ = Coord::WCST;} | WCSU_ {$$ = Coord::WCSU;} | WCSV_ {$$ = Coord::WCSV;} | WCSW_ {$$ = Coord::WCSW;} | WCSX_ {$$ = Coord::WCSX;} | WCSY_ {$$ = Coord::WCSY;} | WCSZ_ {$$ = Coord::WCSZ;} | WCS0_ {$$ = Coord::WCS0;} ; skyFrame : FK4_ {$$ = Coord::FK4;} | B1950_ {$$ = Coord::FK4;} | FK4_NO_E_ {$$ = Coord::FK4_NO_E;} | FK5_ {$$ = Coord::FK5;} | J2000_ {$$ = Coord::FK5;} | ICRS_ {$$ = Coord::ICRS;} | GALACTIC_ {$$ = Coord::GALACTIC;} | SUPERGALACTIC_ {$$ = Coord::SUPERGALACTIC;} | ECLIPTIC_ {$$ = Coord::ECLIPTIC;} | HELIOECLIPTIC_ {$$ = Coord::HELIOECLIPTIC;} ; skyDist : DEGREES_ {$$=Coord::DEGREE;} | ARCMIN_ {$$=Coord::ARCMIN;} | ARCSEC_ {$$=Coord::ARCSEC;} ; property : SELECT_ {$$ = Marker::SELECT;} | HIGHLITE_ {$$ = Marker::HIGHLITE;} | DASH_ {$$ = Marker::DASH;} | FIXED_ {$$ = Marker::FIXED;} | EDIT_ {$$ = Marker::EDIT;} | MOVE_ {$$ = Marker::MOVE;} | ROTATE_ {$$ = Marker::ROTATE;} | DELETE_ {$$ = Marker::DELETE;} | INCLUDE_ {$$ = Marker::INCLUDE;} | SOURCE_ {$$ = Marker::SOURCE;} ; callBack : SELECT_ {$$ = CallBack::SELECTCB;} | UNSELECT_ {$$ = CallBack::UNSELECTCB;} | HIGHLITE_ {$$ = CallBack::HIGHLITECB;} | UNHIGHLITE_ {$$ = CallBack::UNHIGHLITECB;} | BEGIN_ MOVE_ {$$ = CallBack::MOVEBEGINCB;} | MOVE_ {$$ = CallBack::MOVECB;} | END_ MOVE_ {$$ = CallBack::MOVEENDCB;} | BEGIN_ EDIT_ {$$ = CallBack::EDITBEGINCB;} | EDIT_ {$$ = CallBack::EDITCB;} | END_ EDIT_ {$$ = CallBack::EDITENDCB;} | BEGIN_ ROTATE_ {$$ = CallBack::ROTATEBEGINCB;} | ROTATE_ {$$ = CallBack::ROTATECB;} | END_ ROTATE_ {$$ = CallBack::ROTATEENDCB;} | DELETE_ {$$ = CallBack::DELETECB;} | TEXT_ {$$ = CallBack::TEXTCB;} | COLOR_ {$$ = CallBack::COLORCB;} | WIDTH_ {$$ = CallBack::LINEWIDTHCB;} | PROPERTY_ {$$ = CallBack::PROPERTYCB;} | FONT_ {$$ = CallBack::FONTCB;} | KEY_ {$$ = CallBack::KEYCB;} | UPDATE_ {$$ = CallBack::UPDATECB;} ; global : global sp globalProperty | globalProperty ; globalProperty : property '=' yesno { setProps(&globalProps,$1,$3); setProps(&localProps,$1,$3); } | COLOR_ '=' STRING { strncpy(globalColor,$3,16); strncpy(localColor,$3,16); } | DASHLIST_ '=' INT INT { globalDash[0] = localDash[0] =$3; globalDash[1] = localDash[1] =$4; } | WIDTH_ '=' INT {globalWidth = localWidth = $3;} | FONT_ '=' STRING { strncpy(globalFont,$3,32); strncpy(localFont,$3,32); } | TEXT_ '=' STRING { strncpy(globalText,$3,80); strncpy(localText,$3,80); } | DASH_ { setProps(&globalProps,Marker::DASH,1); setProps(&localProps,Marker::DASH,1); } | SOURCE_ { setProps(&globalProps,Marker::SOURCE,1); setProps(&localProps,Marker::SOURCE,1); } | BACKGROUND_ { setProps(&globalProps,Marker::SOURCE,0); setProps(&localProps,Marker::SOURCE,0); } | POINT_ '=' pointShape {globalPoint = localPoint = $3;} | POINT_ '=' pointShape INT { globalPoint = localPoint = $3; globalPointSize = localPointSize = $4; } | LINE_ '=' INT INT { globalLine1 = localLine1 = $3; globalLine2 = localLine2 = $4; } | VECTOR_ '=' INT {globalVector = localVector = $3;} | COMPOSITE_ '=' INT { globalComposite = localComposite = $3; } | RULER_ '=' globalRuler {} | COMPASS_ '=' globalCompass STRING STRING INT INT { strncpy(globalCompassNorth,$4,80); strncpy(globalCompassEast,$5,80); strncpy(localCompassNorth,$4,80); strncpy(localCompassEast,$5,80); globalCompassNArrow = localCompassNArrow = $6; globalCompassEArrow = localCompassEArrow = $7; } | TEXTANGLE_ '=' angle {globalTextAngle = localTextAngle = $3;} | TEXTROTATE_ '=' INT {globalTextRotate = localTextRotate = $3;} | WCS_ '=' wcsSystem {globalWCS = (Coord::CoordSystem)$3;} ; globalRuler : coordSystem skyFrame coordSystem skyDist { globalRulerCoordSystem = localRulerCoordSystem = (Coord::CoordSystem)$1; globalRulerSkyFrame = localRulerSkyFrame = (Coord::SkyFrame)$2; globalRulerDistSystem = localRulerDistSystem = (Coord::CoordSystem)$3; globalRulerDistFormat = localRulerDistFormat = (Coord::SkyDist)$4; } | coordSystem coordSystem { globalRulerCoordSystem = localRulerCoordSystem = (Coord::CoordSystem)$1; globalRulerSkyFrame = localRulerSkyFrame = Coord::FK5; globalRulerDistSystem = localRulerDistSystem = (Coord::CoordSystem)$2; globalRulerDistFormat = localRulerDistFormat = Coord::DEGREE; } | coordSystem skyDist { globalRulerCoordSystem = localRulerCoordSystem = (Coord::CoordSystem)$1; globalRulerSkyFrame = localRulerSkyFrame = Coord::FK5; globalRulerDistSystem = localRulerDistSystem = Coord::WCS; globalRulerDistFormat = localRulerDistFormat = (Coord::SkyDist)$2; } | skyFrame coordSystem { globalRulerCoordSystem = localRulerCoordSystem = Coord::WCS; globalRulerSkyFrame = localRulerSkyFrame = (Coord::SkyFrame)$1; globalRulerDistSystem = localRulerDistSystem = (Coord::CoordSystem)$2; globalRulerDistFormat = localRulerDistFormat = Coord::DEGREE; } | skyFrame skyDist { globalRulerCoordSystem = localRulerCoordSystem = Coord::WCS; globalRulerSkyFrame = localRulerSkyFrame = (Coord::SkyFrame)$1; globalRulerDistSystem = localRulerDistSystem = Coord::WCS; globalRulerDistFormat = localRulerDistFormat = (Coord::SkyDist)$2; } | LINEAR_ coordSystem { globalRulerCoordSystem = localRulerCoordSystem = Coord::WCS; globalRulerSkyFrame = localRulerSkyFrame = Coord::FK5; globalRulerDistSystem = localRulerDistSystem = (Coord::CoordSystem)$2; globalRulerDistFormat = localRulerDistFormat = Coord::DEGREE; } | LINEAR_ skyDist { globalRulerCoordSystem = localRulerCoordSystem = Coord::WCS; globalRulerSkyFrame = localRulerSkyFrame = Coord::FK5; globalRulerDistSystem = localRulerDistSystem = Coord::WCS; globalRulerDistFormat = localRulerDistFormat = (Coord::SkyDist)$2; } | skyDist { globalRulerCoordSystem = localRulerCoordSystem = Coord::IMAGE; globalRulerSkyFrame = localRulerSkyFrame = Coord::FK5; globalRulerDistSystem = localRulerDistSystem = Coord::WCS; globalRulerDistFormat = localRulerDistFormat = (Coord::SkyDist)$1; } | PIXELS_ { globalRulerCoordSystem = localRulerCoordSystem = Coord::IMAGE; globalRulerSkyFrame = localRulerSkyFrame = Coord::FK5; globalRulerDistSystem = localRulerDistSystem = Coord::IMAGE; globalRulerDistFormat = localRulerDistFormat = Coord::DEGREE; } ; globalCompass : coordSystem skyFrame { globalCompassCoordSystem = localCompassCoordSystem = (Coord::CoordSystem)$1; globalCompassSkyFrame = localCompassSkyFrame = (Coord::SkyFrame)$2; } | coordSystem { globalCompassCoordSystem = localCompassCoordSystem = (Coord::CoordSystem)$1; globalCompassSkyFrame = localCompassSkyFrame = Coord::FK5; } | skyFrame { globalCompassCoordSystem = localCompassCoordSystem = Coord::WCS; globalCompassSkyFrame = localCompassSkyFrame = (Coord::SkyFrame)$1; } | LINEAR_ { globalCompassCoordSystem = localCompassCoordSystem = Coord::WCS; globalCompassSkyFrame = localCompassSkyFrame = Coord::FK5; } ; initGlobal:{ // global properties globalSystem = Coord::PHYSICAL; globalWCS = fr->wcsSystem(); globalSky = fr->wcsSky(); globalTile = 1; globalProps = Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::HIGHLITE | Marker::INCLUDE | Marker::SOURCE; strcpy(globalColor,"green"); globalDash[0] = 8; globalDash[1] = 3; globalWidth = 1; strcpy(globalFont,"helvetica 10 normal roman"); strcpy(globalText,""); // unique properties globalLine1 = 0; globalLine2 = 0; globalVector = 1; globalComposite = 1; globalRulerCoordSystem = Coord::PHYSICAL; globalRulerSkyFrame = Coord::FK5; globalRulerDistSystem = Coord::PHYSICAL; globalRulerDistFormat = Coord::DEGREE; globalCompassCoordSystem = Coord::PHYSICAL; globalCompassSkyFrame = Coord::FK5; strcpy(globalCompassNorth,"N"); strcpy(globalCompassEast,"E"); globalCompassNArrow = 1; globalCompassEArrow = 1; globalPoint = Point::BOXCIRCLE; globalPointSize = POINTSIZE; globalTextAngle=0; globalTextRotate=1; aStatus = 0; cStatus = 0; } ; local : local sp localProperty | localProperty ; localProperty : property '=' yesno {setProps(&localProps,$1,$3);} | COLOR_ '=' STRING {strncpy(localColor,$3,16);} | DASHLIST_ '=' INT INT { localDash[0] =$3; localDash[1] =$4; } | WIDTH_ '=' INT {localWidth = $3;} | FONT_ '=' STRING {strncpy(localFont,$3,32);} | TEXT_ '=' STRING {strncpy(localText,$3,80);} | TAG_ '=' STRING {taglist.append(new Tag($3));} | CALLBACK_ '=' callBack STRING STRING {cblist.append( new CallBack(fr->getInterp(),(CallBack::Type)$3,$4,$5));} | DASH_ {setProps(&localProps,Marker::DASH,1);} | SOURCE_ {setProps(&localProps,Marker::SOURCE,1);} | BACKGROUND_ {setProps(&localProps,Marker::SOURCE,0);} | POINT_ '=' pointShape {localPoint = $3;} | POINT_ '=' pointShape INT {localPoint = $3; localPointSize = $4;} | LINE_ '=' INT INT {localLine1=$3; localLine2=$4;} | VECTOR_ '=' INT {localVector=$3;} | COMPOSITE_ '=' INT {localComposite=$3;} | RULER_ '=' localRuler | COMPASS_ '=' localCompass STRING STRING INT INT { strncpy(localCompassNorth,$4,80); strncpy(localCompassEast,$5,80); localCompassNArrow = $6; localCompassEArrow = $7; } | TEXTANGLE_ '=' angle {localTextAngle=$3;} | TEXTROTATE_ '=' INT {localTextRotate=$3;} | CPANDA_ '=' localCpanda | EPANDA_ '=' localEpanda | BPANDA_ '=' localBpanda ; localRuler : coordSystem skyFrame coordSystem skyDist { localRulerCoordSystem = (Coord::CoordSystem)$1; localRulerSkyFrame = (Coord::SkyFrame)$2; localRulerDistSystem = (Coord::CoordSystem)$3; localRulerDistFormat = (Coord::SkyDist)$4; } | coordSystem coordSystem { localRulerCoordSystem = (Coord::CoordSystem)$1; localRulerSkyFrame = Coord::FK5; localRulerDistSystem = (Coord::CoordSystem)$2; localRulerDistFormat = Coord::DEGREE; } | coordSystem skyDist { localRulerCoordSystem = (Coord::CoordSystem)$1; localRulerSkyFrame = Coord::FK5; localRulerDistSystem = Coord::WCS; localRulerDistFormat = (Coord::SkyDist)$2; } | skyFrame coordSystem { localRulerCoordSystem = Coord::WCS; localRulerSkyFrame = (Coord::SkyFrame)$1; localRulerDistSystem = (Coord::CoordSystem)$2; localRulerDistFormat = Coord::DEGREE; } | skyFrame skyDist { localRulerCoordSystem = Coord::WCS; localRulerSkyFrame = (Coord::SkyFrame)$1; localRulerDistSystem = Coord::WCS; localRulerDistFormat = (Coord::SkyDist)$2; } | LINEAR_ coordSystem { localRulerCoordSystem = Coord::WCS; localRulerSkyFrame = Coord::FK5; localRulerDistSystem = (Coord::CoordSystem)$2; localRulerDistFormat = Coord::DEGREE; } | LINEAR_ skyDist { localRulerCoordSystem = Coord::WCS; localRulerSkyFrame = Coord::FK5; localRulerDistSystem = Coord::WCS; localRulerDistFormat = (Coord::SkyDist)$2; } | skyDist { localRulerCoordSystem = Coord::IMAGE; localRulerSkyFrame = Coord::FK5; localRulerDistSystem = Coord::WCS; localRulerDistFormat = (Coord::SkyDist)$1; } | PIXELS_ { localRulerCoordSystem = Coord::IMAGE; localRulerSkyFrame = Coord::FK5; localRulerDistSystem = Coord::IMAGE; localRulerDistFormat = Coord::DEGREE; } ; localCompass : coordSystem skyFrame { localCompassCoordSystem = (Coord::CoordSystem)$1; localCompassSkyFrame = (Coord::SkyFrame)$2; } | coordSystem { localCompassCoordSystem = (Coord::CoordSystem)$1; localCompassSkyFrame = Coord::FK5; } | skyFrame { localCompassCoordSystem = Coord::WCS; localCompassSkyFrame = (Coord::SkyFrame)$1; } | LINEAR_ { localCompassCoordSystem = Coord::WCS; localCompassSkyFrame = Coord::FK5; } ; localCpanda: {aNum=0; aAngNum=0;} '(' aAngs ')' '(' aRads ')' {localCpanda = 2;} | IGNORE_ {localCpanda=0;} ; localEpanda: {aNum=0; aAngNum=0, aAngle=0;} '(' aAngs ')' '(' vRads ')' '(' angle ')' {aAngle=$9;localEpanda=2;} | IGNORE_ {localEpanda=0;} ; localBpanda: {aNum=0; aAngNum=0, aAngle=0;} '(' aAngs ')' '(' vRads ')' '(' angle ')' {aAngle=$9;localBpanda=2;} | IGNORE_ {localBpanda=0;} ; initLocal : { // reset maperr flag maperr = 0; // needed for annulus, ellipse annulus, and box annulus aNum = 2; // composite (previous conjunction found?) if (!cStatus) fr->resetCompositeMarker(); // global properties localSystem = globalSystem; localSky = globalSky; localProps = globalProps; strcpy(localColor,globalColor); localDash[0] = globalDash[0]; localDash[1] = globalDash[1]; localWidth = globalWidth; strcpy(localFont,globalFont); strcpy(localText,globalText); strcpy(localComment,""); taglist.deleteAll(); cblist.deleteAll(); // unique properties localLine1 = globalLine1; localLine2 = globalLine2; localVector = globalVector; localComposite = globalComposite; localPoint = globalPoint; localPointSize = globalPointSize; localRulerCoordSystem = globalRulerCoordSystem; localRulerSkyFrame = globalRulerSkyFrame; localRulerDistSystem = globalRulerDistSystem; localRulerDistFormat = globalRulerDistFormat; localCompassCoordSystem = globalCompassCoordSystem; localCompassSkyFrame = globalCompassSkyFrame; strcpy(localCompassNorth,globalCompassNorth); strcpy(localCompassEast,globalCompassEast); localCompassNArrow = globalCompassNArrow; localCompassEArrow = globalCompassEArrow; localTextAngle = globalTextAngle; localTextRotate = globalTextRotate; localCpanda = 1; localEpanda = 1; localBpanda = 1; } ; pointShape : CIRCLE_ {$$ = Point::CIRCLE;} | BOX_ {$$ = Point::BOX;} | DIAMOND_ {$$ = Point::DIAMOND;} | CROSS_ {$$ = Point::CROSS;} | X_ {$$ = Point::EX;} | ARROW_ {$$ = Point::ARROW;} | BOXCIRCLE_ {$$ = Point::BOXCIRCLE;} ; include : '+' {setProps(&localProps, Marker::INCLUDE, 1);} | '-' {setProps(&localProps, Marker::INCLUDE, 0);} ; nonshape : VECTOR_ bp coord sp value sp angle ep conjunction nonshapeComment { fr->createVectCmd(Vector($3), $5,$7, localVector, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | SEGMENT_ {polylist.deleteAll();} bp polyNodes ep conjunction nonshapeComment { fr->createSegmentCmd(polylist, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | TEXT_ bp coord ep conjunction nonshapeComment { fr->createTextCmd(Vector($3), localTextAngle,localTextRotate, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | RULER_ bp coord sp coord ep conjunction nonshapeComment { fr->createRulerCmd(Vector($3), Vector($5), localRulerCoordSystem, localRulerSkyFrame, localRulerDistSystem, localRulerDistFormat, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | COMPASS_ bp coord sp value ep conjunction nonshapeComment { fr->createCompassCmd(Vector($3), $5, localCompassNorth, localCompassEast, localCompassNArrow, localCompassEArrow, localCompassCoordSystem, localCompassSkyFrame, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | PROJECTION_ bp coord sp coord sp value ep conjunction nonshapeComment { fr->createProjectionCmd(Vector($3), Vector($5), $7, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | CIRCLE3D_ bp coord sp value ep conjunction nonshapeComment { // backward compatibility fr->createCircleCmd(Vector($3), $5, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | COMPOSITE_ bp coord sp optangle ep conjunction nonshapeComment { fr->createCompositeCmd(Vector($3), $5, localComposite, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } ; shape : CIRCLE_ bp coord sp value ep conjunction shapeComment { fr->createCircleCmd(Vector($3), $5, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | CIRCLE3D_ bp coord sp value ep conjunction shapeComment { // backwards compatibility fr->createCircleCmd(Vector($3), $5, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | ELLIPSE_ bp coord sp vvalue sp optangle ep conjunction shapeComment { // for ellipse annulus aStatus = 1; aCenter = Vector($3); aAngles[0] = $7; aVector[0] = Vector($5); aNumsao = 1; strncpy(aColor,localColor,16); aDash[0] = localDash[0]; aDash[1] = localDash[1]; aWidth = localWidth; strncpy(aFont,localFont,32); strncpy(aText,localText,80); strncpy(aComment,localComment,80); aProps = localProps; fr->createEllipseCmd(Vector($3), Vector($5), $7, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | BOX_ bp coord sp vvalue sp optangle ep conjunction shapeComment { // for box annulus aStatus = 3; aCenter = Vector($3); aAngles[0] = $7; aVector[0] = Vector($5); aNumsao = 1; strncpy(aColor,localColor,16); aDash[0] = localDash[0]; aDash[1] = localDash[1]; aWidth = localWidth; strncpy(aFont,localFont,32); strncpy(aText,localText,80); strncpy(aComment,localComment,80); aProps = localProps; fr->createBoxCmd(Vector($3), Vector($5), $7, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | ROTBOX_ bp coord sp vvalue sp optangle ep conjunction shapeComment { // backwards compatibility fr->createBoxCmd(Vector($3), Vector($5), $7, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | POLYGON_ {polylist.deleteAll();} bp polyNodes ep conjunction shapeComment { fr->createPolygonCmd(polylist, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | SEGMENT_ {polylist.deleteAll();} bp polyNodes ep conjunction shapeComment { fr->createSegmentCmd(polylist, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | LINE_ bp coord sp coord ep conjunction shapeComment { fr->createLineCmd(Vector($3), Vector($5), localLine1,localLine2, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | VECTOR_ bp coord sp value sp angle ep conjunction shapeComment { fr->createVectCmd(Vector($3), $5,$7, localVector, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | TEXT_ bp coord ep conjunction shapeComment { fr->createTextCmd(Vector($3), localTextAngle,localTextRotate, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | TEXT_ bp coord sp STRING ep {strncpy(localText,$5,80);} conjunction shapeComment { fr->createTextCmd(Vector($3), localTextAngle,localTextRotate, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | POINT_ bp coord ep conjunction shapeComment { fr->createPointCmd(Vector($3), (Point::PointShape)localPoint, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | CIRCLE_ POINT_ bp coord ep conjunction shapeComment { // backwards compatibility fr->createPointCmd(Vector($4), Point::CIRCLE, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | BOX_ POINT_ bp coord ep conjunction shapeComment { // backwards compatibility fr->createPointCmd(Vector($4), Point::BOX, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | DIAMOND_ POINT_ bp coord ep conjunction shapeComment { // backwards compatibility fr->createPointCmd(Vector($4), Point::DIAMOND, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | CROSS_ POINT_ bp coord ep conjunction shapeComment { // backwards compatibility fr->createPointCmd(Vector($4), Point::CROSS, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | X_ POINT_ bp coord ep conjunction shapeComment { // backwards compatibility fr->createPointCmd(Vector($4), Point::EX, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | ARROW_ POINT_ bp coord ep conjunction shapeComment { // backwards compatibility fr->createPointCmd(Vector($4), Point::ARROW, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | BOXCIRCLE_ POINT_ bp coord ep conjunction shapeComment { // backwards compatibility fr->createPointCmd(Vector($4), Point::BOXCIRCLE, localPointSize, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | RULER_ bp coord sp coord ep conjunction shapeComment { fr->createRulerCmd(Vector($3), Vector($5), localRulerCoordSystem, localRulerSkyFrame, localRulerDistSystem, localRulerDistFormat, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | COMPASS_ bp coord sp value ep conjunction shapeComment { fr->createCompassCmd(Vector($3), $5, localCompassNorth, localCompassEast, localCompassNArrow, localCompassEArrow, localCompassCoordSystem, localCompassSkyFrame, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | PROJECTION_ bp coord sp coord sp value ep conjunction shapeComment { fr->createProjectionCmd(Vector($3), Vector($5), $7, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | ANNULUS_ bp coord sp value sp value ep conjunction shapeComment { fr->createAnnulusCmd(Vector($3), $5,$7,1, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | ANNULUS_ bp coord sp value sp value sp aRads ep conjunction shapeComment { aAnnuli[0] = $5; aAnnuli[1] = $7; fr->createAnnulusCmd(Vector($3), aNum,aAnnuli, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | ANNULUS_ bp coord sp value sp value sp numberof ep conjunction shapeComment { fr->createAnnulusCmd(Vector($3), $5,$7,$9, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | ELLIPSE_ bp coord sp vvalue sp vvalue sp optangle ep conjunction shapeComment { // prefered syntax fr->createEllipseAnnulusCmd(Vector($3), Vector($5),Vector($7),1, $9, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | ELLIPSE_ bp coord sp vvalue sp vvalue sp numberof sp optangle ep conjunction shapeComment { // prefered syntax fr->createEllipseAnnulusCmd(Vector($3), Vector($5),Vector($7),$9, $11, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | ELLIPSE_ bp coord sp vvalue sp vvalue sp vRads sp optangle ep conjunction shapeComment { // prefered syntax aVector[0] = Vector($5); aVector[1] = Vector($7); fr->createEllipseAnnulusCmd(Vector($3), aNum,aVector, $11, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | ELLIPSE_ bp coord sp vvalue sp optangle ep '&' '!' ELLIPSE_ bp coord sp vvalue sp optangle ep { // backwards compatibility // old saoimage syntax aStatus = 2; aVector[aNumsao++] = Vector($5); } | BOX_ bp coord sp vvalue sp vvalue sp optangle ep conjunction shapeComment { // prefered syntax fr->createBoxAnnulusCmd(Vector($3), Vector($5),Vector($7),1, $9, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | BOX_ bp coord sp vvalue sp vvalue sp vRads sp optangle ep conjunction shapeComment { // prefered syntax aVector[0] = Vector($5); aVector[1] = Vector($7); fr->createBoxAnnulusCmd(Vector($3), aNum,aVector, $11, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | BOX_ bp coord sp vvalue sp vvalue sp numberof sp optangle ep conjunction shapeComment { // prefered syntax fr->createBoxAnnulusCmd(Vector($3), Vector($5),Vector($7),$9, $11, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } | BOX_ bp coord sp vvalue sp optangle ep '&' '!' BOX_ bp coord sp vvalue sp optangle ep { // backwards compatibility // old saoimage syntax aStatus = 4; aVector[aNumsao++] = Vector($5); } | CPANDA_ bp coord sp angle sp angle sp INT sp value sp value sp INT ep conjunction shapeComment { switch (localCpanda) { case 0: /* ignore it */ break; case 1: /* normal cpanda */ fr->createCpandaCmd(Vector($3), $5,$7,$9, $11,$13,$15, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); break; case 2: /* one of our special pandas */ fr->createCpandaCmd(Vector($3), aAngNum,aAngles, aNum,aAnnuli, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); break; } } | EPANDA_ bp coord sp angle sp angle sp INT sp vvalue sp vvalue sp INT sp optangle ep conjunction shapeComment { switch (localEpanda) { case 0: /* ignore it */ break; case 1: /* normal epanda */ fr->createEpandaCmd(Vector($3), $5,$7,$9, Vector($11),Vector($13),$15, $17, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); break; case 2: /* one of our special pandas */ fr->createEpandaCmd(Vector($3), aAngNum,aAngles, aNum,aVector, aAngle, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); break; } } | BPANDA_ bp coord sp angle sp angle sp INT sp vvalue sp vvalue sp INT sp optangle ep conjunction shapeComment { switch (localBpanda) { case 0: /* ignore it */ break; case 1: /* normal bpanda */ fr->createBpandaCmd(Vector($3), $5,$7,$9, Vector($11),Vector($13),$15, $17, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); break; case 2: /* one of our special pandas */ fr->createBpandaCmd(Vector($3), aAngNum,aAngles, aNum,aVector, aAngle, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); break; } } | PIE_ bp coord sp angle sp angle ep conjunction shapeComment | PIE_ bp coord sp angle sp angle sp aAngs ep conjunction shapeComment | PIE_ bp coord sp angle sp angle sp numberof ep conjunction shapeComment | FIELD_ bp ep conjunction shapeComment | COMPOSITE_ bp coord sp optangle ep conjunction shapeComment { fr->createCompositeCmd(Vector($3), $5, localComposite, localColor,localDash,localWidth,localFont, localText,localProps,localComment,taglist,cblist); } ; polyNodes : polyNodes sp polyNode | polyNode ; polyNode : coord {polylist.append(new Vertex($1));} ; aRads : aRads sp aRad | aRad ; aRad : value { if (aNum < MAXANNULI) aAnnuli[aNum++] = $1; } ; aAngs : aAngs sp aAng | aAng ; aAng : angle { if (aAngNum < MAXANGLES) aAngles[aAngNum++] = $1; } ; vRads : vRads sp vRad | vRad ; vRad : value sp value {aVector[aNum++] = Vector($1,$3);} ; postLocal : /* empty */ { // old style annulus switch (aStatus) { case 0: // do nothing break; case 1: // we found just an ellipse, do nothing break; case 2: // ok we have an ellipse annulus fr->markerDeleteLastCmd(); // delete the previous ellipse fr->createEllipseAnnulusCmd(aCenter, aNumsao,aVector, aAngles[0], aColor,aDash,aWidth,aFont,aText,aProps,aComment,taglist,cblist); break; case 3: // we found just a box, do nothing break; case 4: // ok, we have a box annulus fr->markerDeleteLastCmd(); // delete the previous box fr->createBoxAnnulusCmd(aCenter, aNumsao,aVector, aAngles[0], aColor,aDash,aWidth,aFont,aText,aProps,aComment,taglist,cblist); break; } aStatus = 0; } ; %% static void setProps(unsigned short* props, unsigned short prop, int value) { if (value) *props |= prop; else *props &= ~prop; } static Coord::CoordSystem checkWCSSystem() { switch (localSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::WCS; default: return localSystem; } } static Coord::SkyFrame checkWCSSky() { switch (localSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::FK5; default: return localSky; } } saods9/tksao/frame/ellipse.C000644 000765 000000 00000025237 12775230632 016360 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "ellipse.h" #include "fitsimage.h" Ellipse::Ellipse(Base* p, const Vector& ctr, const Vector& r, double ang) : BaseEllipse(p, ctr, ang) { numAnnuli_ = 1; annuli_ = new Vector[1]; annuli_[0] = r; strcpy(type_,"ellipse"); numHandle = 4; updateBBox(); } Ellipse::Ellipse(Base* p, const Vector& ctr, const Vector& r, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseEllipse(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = 1; annuli_ = new Vector[1]; annuli_[0] = r; strcpy(type_,"ellipse"); numHandle = 4; updateBBox(); } Ellipse::Ellipse(const Ellipse& a) : BaseEllipse(a) {} void Ellipse::edit(const Vector& v, int h) { Matrix mm = bckMatrix(); annuli_[0] = (v * mm).abs(); updateBBox(); doCallBack(CallBack::EDITCB); } void Ellipse::analysis(AnalysisTask mm, int which) { switch (mm) { case HISTOGRAM: if (!analysisHistogram_ && which) { addCallBack(CallBack::MOVECB, analysisHistogramCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisHistogramCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisHistogramCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisHistogramCB_[1], parent->options->cmdName); } if (analysisHistogram_ && !which) { deleteCallBack(CallBack::MOVECB, analysisHistogramCB_[0]); deleteCallBack(CallBack::EDITCB, analysisHistogramCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisHistogramCB_[0]); deleteCallBack(CallBack::DELETECB, analysisHistogramCB_[1]); } analysisHistogram_ = which; break; case PLOT3D: if (!analysisPlot3d_ && which) { addCallBack(CallBack::MOVECB, analysisPlot3dCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisPlot3dCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisPlot3dCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisPlot3dCB_[1], parent->options->cmdName); } if (analysisPlot3d_ && !which) { deleteCallBack(CallBack::MOVECB, analysisPlot3dCB_[0]); deleteCallBack(CallBack::EDITCB, analysisPlot3dCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisPlot3dCB_[0]); deleteCallBack(CallBack::DELETECB, analysisPlot3dCB_[1]); } analysisPlot3d_ = which; break; case STATS: if (!analysisStats_ && which) { addCallBack(CallBack::MOVECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisStatsCB_[1], parent->options->cmdName); } if (analysisStats_ && !which) { deleteCallBack(CallBack::MOVECB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITCB, analysisStatsCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::DELETECB, analysisStatsCB_[1]); } analysisStats_ = which; break; default: // na break; } } void Ellipse::analysisHistogram(char* xname, char* yname, int num) { double* x; double* y; Matrix mm = Rotate(angle) * Translate(center); Vector vv = annuli_[0]; BBox bb(-vv * mm); bb.bound( vv * mm); bb.bound(Vector( vv[0],-vv[1]) * mm); bb.bound(Vector(-vv[0], vv[1]) * mm); parent->markerAnalysisHistogram(this, &x, &y, bb, num); analysisXYResult(xname, yname, x, y, num+1); } void Ellipse::analysisPlot3d(char* xname, char* yname, Coord::CoordSystem sys, Marker::AnalysisMethod method) { double* x; double* y; Matrix mm = Rotate(angle) * Translate(center); Vector vv = annuli_[0]; BBox bb(-vv * mm); bb.bound( vv * mm); bb.bound(Vector( vv[0],-vv[1]) * mm); bb.bound(Vector(-vv[0], vv[1]) * mm); int num = parent->markerAnalysisPlot3d(this, &x, &y, bb, sys, method); analysisXYResult(xname, yname, x, y, num); } void Ellipse::analysisStats(Coord::CoordSystem sys, Coord::SkyFrame sky) { ostringstream str; Matrix mm = Rotate(angle) * Translate(center); Vector vv = annuli_[0]; BBox bb(-vv * mm); bb.bound( vv * mm); bb.bound(Vector( vv[0],-vv[1]) * mm); bb.bound(Vector(-vv[0], vv[1]) * mm); parent->markerAnalysisStats(this, str, bb, sys, sky); str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } // list void Ellipse::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 0); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { Vector rr = ptr->mapLenFromRef(annuli_[0],sys,Coord::ARCSEC); double aa = parent->mapAngleFromRef(angle,sys,sky); switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ',' << setprecision(3) << fixed << setunit('"') << rr << ','; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(aa) << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << setprecision(8) << ra << ',' << dec << ',' << setprecision(3) << fixed << setunit('"') << rr << ','; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(aa) << ')'; break; } } else listNonCel(ptr, str, sys); } listPost(str, conj, strip); } void Ellipse::listNonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { Vector vv = ptr->mapFromRef(center,sys); Vector rr = ptr->mapLenFromRef(annuli_[0],sys); double aa = parent->mapAngleFromRef(angle,sys); str << type_ << '(' << setprecision(8) << vv << ',' << rr << ',' << radToDeg(aa) << ')'; } void Ellipse::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowCenter(ptr,sys,sky,format); XMLRowRadius(ptr,sys,annuli_[0]); XMLRowAng(sys,sky); XMLRowProps(ptr,sys); XMLRowEnd(str); } void Ellipse::listCiao(ostream& str, Coord::CoordSystem sys, int strip) { FitsImage* ptr = parent->findFits(); listCiaoPre(str); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector vv = ptr->mapFromRef(center,Coord::PHYSICAL); Vector rr = ptr->mapLenFromRef(annuli_[0],Coord::PHYSICAL); str << type_ << '(' << setprecision(8) << vv << ',' << rr << ',' << radToDeg(angle) << ')'; } break; default: if (ptr->hasWCSCel(sys)) { listRADEC(ptr,center,sys,Coord::FK5,Coord::SEXAGESIMAL); Vector rr = ptr->mapLenFromRef(annuli_[0],sys,Coord::ARCMIN); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(5) << fixed << setunit('\'') << rr << ','; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle) << ')'; } break; } listCiaoPost(str, strip); } void Ellipse::listSAOtng(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); listSAOtngPre(str, strip); // radius is always in image coords switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector vv = ptr->mapFromRef(center,Coord::IMAGE); Vector rr = ptr->mapLenFromRef(annuli_[0],Coord::IMAGE); str << type_ << '(' << setprecision(8) << vv << ',' << rr << ',' << radToDeg(angle) << ')'; } break; default: if (ptr->hasWCSCel(sys)) { Vector rr = ptr->mapLenFromRef(annuli_[0],Coord::IMAGE); switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ',' << setprecision(8) << rr << ',' << setprecision(8) << radToDeg(angle) << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(8) << rr << ',' << setprecision(8) << radToDeg(angle) << ')'; break; } } } listSAOtngPost(str, strip); } void Ellipse::listPros(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); switch (sys) { case Coord::IMAGE: case Coord::DETECTOR: case Coord::AMPLIFIER: sys = Coord::IMAGE; case Coord::PHYSICAL: { Vector vv = ptr->mapFromRef(center,sys); Vector rr = ptr->mapLenFromRef(annuli_[0],Coord::IMAGE); coord.listProsCoordSystem(str,sys,sky); str << "; " << type_ << ' ' << setprecision(8) << vv << ' ' << rr << ' ' << radToDeg(angle); } break; default: if (ptr->hasWCSCel(sys)) { Vector rr = ptr->mapLenFromRef(annuli_[0],sys,Coord::ARCSEC); switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); coord.listProsCoordSystem(str,sys,sky); str << "; " << type_ << ' ' << setprecision(10) << setunit('d') << vv << ' ' << setprecision(3) << fixed << setunit('"') << rr << ' '; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle); } break; case Coord::SEXAGESIMAL: listRADECPros(ptr,center,sys,sky,format); coord.listProsCoordSystem(str,sys,sky); str << "; " << type_ << ' ' << ra << ' ' << dec << ' ' << setprecision(3) << fixed << setunit('"') << rr << ' '; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle); break; } } } listProsPost(str, strip); } void Ellipse::listSAOimage(ostream& str, int strip) { FitsImage* ptr = parent->findFits(); listSAOimagePre(str); Vector vv = ptr->mapFromRef(center,Coord::IMAGE); str << type_ << '(' << setprecision(8) << vv << ',' << annuli_[0] << ',' << radToDeg(angle) << ')'; listSAOimagePost(str, strip); } saods9/tksao/frame/ellipse.h000644 000765 000000 00000002716 12752657750 016433 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __ellipse_h__ #define __ellipse_h__ #include "baseellipse.h" class Ellipse : public BaseEllipse { protected: void listNonCel(FitsImage*, ostream&, Coord::CoordSystem); public: Ellipse(Base* p, const Vector& ctr, const Vector& r, double ang); Ellipse(Base* p, const Vector& ctr, const Vector& r, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Ellipse(const Ellipse&); virtual Marker* dup() {return new Ellipse(*this);} void edit(const Vector&, int); void analysis(AnalysisTask, int); void analysisHistogram(char*, char*, int); void analysisPlot3d(char*, char*, Coord::CoordSystem, Marker::AnalysisMethod); void analysisStats(Coord::CoordSystem, Coord::SkyFrame sky); void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); virtual void listCiao(ostream&, Coord::CoordSystem, int); virtual void listSAOtng(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); virtual void listPros(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); virtual void listSAOimage(ostream&, int); }; #endif saods9/tksao/frame/ellipseannulus.C000644 000765 000000 00000027370 12775230632 017766 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "ellipseannulus.h" #include "fitsimage.h" EllipseAnnulus::EllipseAnnulus(Base* p, const Vector& ctr, const Vector& r, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseEllipse(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = 1; annuli_ = new Vector[1]; annuli_[0] = r; strcpy(type_,"ellipseannulus"); numHandle = 4; updateBBox(); } EllipseAnnulus::EllipseAnnulus(Base* p, const Vector& ctr, const Vector& inner,const Vector& outer,int num, double ang) : BaseEllipse(p, ctr, ang) { numAnnuli_ = num+1; annuli_ = new Vector[numAnnuli_]; for (int i=0; i& tg, const List& cb) : BaseEllipse(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = num+1; annuli_ = new Vector[numAnnuli_]; for (int i=0; i& tg, const List& cb) : BaseEllipse(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = an; annuli_ = new Vector[numAnnuli_]; for (int i=0; ioptions->cmdName); addCallBack(CallBack::EDITCB, analysisRadialCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITENDCB, analysisRadialCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisRadialCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisRadialCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisRadialCB_[1], parent->options->cmdName); } if (analysisRadial_ && !which) { deleteCallBack(CallBack::MOVECB, analysisRadialCB_[0]); deleteCallBack(CallBack::EDITCB, analysisRadialCB_[0]); deleteCallBack(CallBack::EDITENDCB, analysisRadialCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisRadialCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisRadialCB_[0]); deleteCallBack(CallBack::DELETECB, analysisRadialCB_[1]); } analysisRadial_ = which; break; case STATS: if (!analysisStats_ && which) { addCallBack(CallBack::MOVECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITENDCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisStatsCB_[1], parent->options->cmdName); } if (analysisStats_ && !which) { deleteCallBack(CallBack::MOVECB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITCB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITENDCB, analysisStatsCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::DELETECB, analysisStatsCB_[1]); } analysisStats_ = which; break; default: // na break; } } void EllipseAnnulus::analysisRadial(char* xname, char* yname, char* ename, Coord::CoordSystem sys) { double* xx; double* yy; double* ee; BBox* bb = new BBox[numAnnuli_]; Matrix mm = Rotate(angle) * Translate(center); for (int ii=0; iimarkerAnalysisRadial(this, &xx, &yy, &ee, numAnnuli_-1, annuli_, bb, sys); analysisXYEResult(xname, yname, ename, xx, yy, ee, num); } void EllipseAnnulus::analysisStats(Coord::CoordSystem sys, Coord::SkyFrame sky) { ostringstream str; BBox* bb = new BBox[numAnnuli_]; Matrix mm = Rotate(angle) * Translate(center); for (int ii=0; iimarkerAnalysisStats(this, str, numAnnuli_-1, bb, sys, sky); str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } // list void EllipseAnnulus::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 0); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { double aa = parent->mapAngleFromRef(angle,sys,sky); switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << "ellipse(" << setprecision(8) << vv << setprecision(3) << fixed; for (int ii=0; iimapLenFromRef(annuli_[ii],sys,Coord::ARCSEC); str << ',' << setunit('"') << rr; } str.unsetf(ios_base::floatfield); str << setprecision(8) << ',' << radToDeg(aa) << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << "ellipse(" << ra << ',' << dec << setprecision(3) << fixed; for (int ii=0; iimapLenFromRef(annuli_[ii],sys,Coord::ARCSEC); str << ',' << setunit('"') << rr; } str.unsetf(ios_base::floatfield); str << setprecision(8) << ',' << radToDeg(aa) << ')'; break; } } else listNonCel(ptr, str, sys); } listPost(str, conj, strip); } void EllipseAnnulus::listNonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { Vector vv = ptr->mapFromRef(center,sys); double aa = parent->mapAngleFromRef(angle,sys); str << "ellipse(" << setprecision(8) << vv; for (int ii=0; iimapLenFromRef(annuli_[ii],sys); str << ',' << rr; } str << ',' << radToDeg(aa) << ')'; } void EllipseAnnulus::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowCenter(ptr,sys,sky,format); XMLRowRadius(ptr,sys,annuli_,numAnnuli_); XMLRowAng(sys,sky); XMLRowProps(ptr,sys); XMLRowEnd(str); } void EllipseAnnulus::listPros(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); switch (sys) { case Coord::IMAGE: case Coord::DETECTOR: case Coord::AMPLIFIER: sys = Coord::IMAGE; case Coord::PHYSICAL: { Vector vv = ptr->mapFromRef(center,sys); for (int ii=0; iimapLenFromRef(annuli_[ii],Coord::IMAGE); str << "ellipse " << setprecision(8) << vv << ' ' << rr << ' ' << radToDeg(angle); if (ii!=0) { Vector r1 = ptr->mapLenFromRef(annuli_[ii-1],Coord::IMAGE); str << " & !ellipse " << setprecision(8) << vv << ' ' << r1 << ' ' << radToDeg(angle); } listProsPost(str, strip); } } break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); for (int ii=0; iimapLenFromRef(annuli_[ii],sys,Coord::ARCSEC); str << "ellipse " << setprecision(10) << setunit('d') << vv << ' ' << setprecision(3) << setunit('"') << fixed << rr << ' '; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle); if (ii!=0) { Vector r1 = ptr->mapLenFromRef(annuli_[ii-1],sys,Coord::ARCSEC); str << " & !ellipse " << setprecision(8) << setunit('d') << vv << ' ' << setprecision(3) << setunit('"') << fixed << r1 << ' '; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle); } listProsPost(str, strip); } } break; case Coord::SEXAGESIMAL: listRADECPros(ptr,center,sys,sky,format); for (int ii=0; iimapLenFromRef(annuli_[ii],sys,Coord::ARCSEC); str << "ellipse " << ra << ' ' << dec << ' ' << setprecision(3) << setunit('"') << fixed << rr << ' '; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle); if (ii!=0) { Vector r1 = ptr->mapLenFromRef(annuli_[ii-1],sys,Coord::ARCSEC); str << " & !ellipse " << ra << ' ' << dec << ' ' << setprecision(3) << setunit('"') << fixed << r1 << ' '; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(angle); } listProsPost(str, strip); } break; } } } } void EllipseAnnulus::listSAOimage(ostream& str, int strip) { FitsImage* ptr = parent->findFits(); listSAOimagePre(str); for (int ii=0; iimapFromRef(center,Coord::IMAGE); str << "ellipse(" << setprecision(8) << vv << ',' << annuli_[ii] << ',' << radToDeg(angle) << ')'; if (ii!=0) str << " & !ellipse(" << setprecision(8) << vv << ',' << annuli_[ii-1] << ',' << radToDeg(angle) << ')'; listSAOimagePost(str, strip); } } saods9/tksao/frame/ellipseannulus.h000644 000765 000000 00000003625 12752661141 020026 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __ellipseannulus_h__ #define __ellipseannulus_h__ #include "baseellipse.h" class EllipseAnnulus : public BaseEllipse { protected: void listNonCel(FitsImage*, ostream&, Coord::CoordSystem); public: EllipseAnnulus(Base* p, const Vector& ctr, const Vector& r, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); EllipseAnnulus(Base* p, const Vector& ctr, const Vector& inner, const Vector& outer, int num, double ang); EllipseAnnulus(Base* p, const Vector& ctr, const Vector& inner, const Vector& outer, int num, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); EllipseAnnulus(Base* p, const Vector& ctr, int an, Vector* r, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); EllipseAnnulus(const EllipseAnnulus&); Marker* dup() {return new EllipseAnnulus(*this);} void edit(const Vector&, int); void editEnd(); int addAnnuli(const Vector&); void analysis(AnalysisTask, int); void analysisRadial(char*, char*, char*, Coord::CoordSystem sys); void analysisStats(Coord::CoordSystem, Coord::SkyFrame sky); void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void listPros(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); void listSAOimage(ostream&, int); }; #endif saods9/tksao/frame/epanda.C000644 000765 000000 00000045346 12775230632 016156 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "epanda.h" #include "fitsimage.h" Epanda::Epanda(Base* p, const Vector& ctr, double a1, double a2, int an, const Vector& r1, const Vector& r2, int rn, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseEllipse(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = rn+1; annuli_ = new Vector[numAnnuli_]; for (int ii=0; ii& tg, const List& cb) : BaseEllipse(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { numAnnuli_ = rn; annuli_ = new Vector[numAnnuli_]; for (int ii=0; iigetColor("red")); else if (ii == numAngles_-1) XSetForeground(display, gc, parent->getColor("blue")); else XSetForeground(display, gc, color); } else XSetForeground(display, gc, color); } XDrawLine(display, drawable, lgc, rr0[0], rr0[1], rr1[0], rr1[1]); } } void Epanda::renderPS(int mode) { BaseEllipse::renderPS(mode); renderPSGC(mode); Vector r0 = annuli_[0]; Vector r1 = annuli_[numAnnuli_-1]; for (int ii=0; iicanvas) << ' ' << "moveto " << rr1.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } } #ifdef MAC_OSX_TK void Epanda::renderMACOSX() { BaseEllipse::renderMACOSX(); renderMACOSXGC(); Vector r0 = annuli_[0]; Vector r1 = annuli_[numAnnuli_-1]; for (int ii=0; ii4) { int hh = h-4-1; if (numAnnuli_>2 && hh2 && hh<(numAnnuli_+numAngles_)) { hh -= numAnnuli_; deleteAngle(hh); } numHandle = 4 + numAnnuli_ + numAngles_; startAng_ = angles_[0]; stopAng_ = angles_[numAngles_-1]; updateBBox(); doCallBack(CallBack::EDITCB); } } int Epanda::isIn(const Vector& vv, Coord::InternalSystem sys, int nn, int aa) { Vector pp = bckMap(vv,sys); return BaseEllipse::isIn(vv,sys,nn) && isInAngle(pp,aa); } void Epanda::analysis(AnalysisTask mm, int which) { switch (mm) { case PANDA: if (!analysisPanda_ && which) { addCallBack(CallBack::MOVECB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITENDCB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisPandaCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisPandaCB_[1], parent->options->cmdName); } if (analysisPanda_ && !which) { deleteCallBack(CallBack::MOVECB, analysisPandaCB_[0]); deleteCallBack(CallBack::EDITCB, analysisPandaCB_[0]); deleteCallBack(CallBack::EDITENDCB, analysisPandaCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisPandaCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisPandaCB_[0]); deleteCallBack(CallBack::DELETECB, analysisPandaCB_[1]); } analysisPanda_ = which; break; case STATS: if (!analysisStats_ && which) { addCallBack(CallBack::MOVECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITENDCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisStatsCB_[1], parent->options->cmdName); } if (analysisStats_ && !which) { deleteCallBack(CallBack::MOVECB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITCB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITENDCB, analysisStatsCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::DELETECB, analysisStatsCB_[1]); } analysisStats_ = which; break; default: // na break; } } void Epanda::analysisPanda(Coord::CoordSystem sys) { double* xx; double* yy; double* ee; BBox* bb = new BBox[numAnnuli_]; Matrix mm = Rotate(angle) * Translate(center); for (int ii=0; iimarkerAnalysisPanda(this, &xx, &yy, &ee, numAnnuli_-1, annuli_, numAngles_-1, angles_, bb, sys); analysisXYEResult(xx, yy, ee, num); } void Epanda::analysisStats(Coord::CoordSystem sys, Coord::SkyFrame sky) { ostringstream str; BBox* bb = new BBox[numAnnuli_]; Matrix mm = Rotate(angle) * Translate(center); for (int ii=0; iimarkerAnalysisStats(this, str, numAnnuli_-1, numAngles_-1, bb, sys, sky); str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } // list void Epanda::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { int regular = 1; if (numAngles_>2) { double delta; if (angles_[1] > angles_[0]) delta = angles_[1]-angles_[0]; else delta = angles_[1]+M_TWOPI-angles_[0]; for (int ii=2; ii angles_[ii-1]) diff = angles_[ii]-angles_[ii-1]; else diff = angles_[ii]+M_TWOPI-angles_[ii-1]; if (!teq(diff,delta,FLT_EPSILON)) { regular = 0; break; } } } if (numAnnuli_>2) { double delta = annuli_[1][0]-annuli_[0][0]; for (int i=2; ifindFits(sys,center); listPre(str, sys, sky, ptr, strip, 0); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listANonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { double a1 = radToDeg(parent->mapAngleFromRef(angles_[0],sys,sky)); double a2 = radToDeg(parent->mapAngleFromRef(angles_[numAngles_-1],sys,sky)); Vector r1 = ptr->mapLenFromRef(annuli_[0],sys,Coord::ARCSEC); Vector r2 = ptr->mapLenFromRef(annuli_[numAnnuli_-1],sys,Coord::ARCSEC); double aa = parent->mapAngleFromRef(angle,sys,sky); if (a2<=a1+FLT_EPSILON) a2 += 360; switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ',' << setprecision(8) << a1 << ',' << a2 <<',' << numAngles_-1 << ',' << setprecision(3) << fixed << setunit('"') << r1 << ',' << setunit('"') << r2 << ','; str.unsetf(ios_base::floatfield); str << setprecision(8) << numAnnuli_-1 << ',' << setprecision(8) << radToDeg(aa) << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(8) << a1 << ',' << a2 <<',' << numAngles_-1 << ',' << setprecision(3) << fixed << setunit('"') << r1 << ',' << setunit('"') << r2 << ','; str.unsetf(ios_base::floatfield); str << setprecision(8) << numAnnuli_-1 << ',' << setprecision(8) << radToDeg(aa) << ')'; break; } } else listANonCel(ptr, str, sys); } listPost(str, conj, strip); } void Epanda::listANonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { double a1 = radToDeg(parent->mapAngleFromRef(angles_[0],sys)); double a2 = radToDeg(parent->mapAngleFromRef(angles_[numAngles_-1],sys)); if (a2<=a1+FLT_EPSILON) a2 += 360; Vector vv = ptr->mapFromRef(center,sys); Vector r1 = ptr->mapLenFromRef(annuli_[0],sys); Vector r2 = ptr->mapLenFromRef(annuli_[numAnnuli_-1],sys); double aa = parent->mapAngleFromRef(angle,sys); str << type_ << '(' << setprecision(8) << vv << ',' << a1 << ',' << a2 << ',' << numAngles_-1 << ',' << r1 << ',' << r2 << ',' << numAnnuli_-1 << ',' << radToDeg(aa) << ')'; } void Epanda::listB(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { FitsImage* ptr = parent->findFits(sys,center); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listBNonCel(ptr, str, sys, sky, format, conj, strip); break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); for (int jj=1; jjmapFromRef(center,sys); double aa = parent->mapAngleFromRef(angle,sys); for (int jj=1; jjmapAngleFromRef(angles_[jj-1],sys)); double a2 = radToDeg(parent->mapAngleFromRef(angles_[jj],sys)); if (a2<=a1+FLT_EPSILON) a2 += 360; for (int ii=1; iimapLenFromRef(annuli_[ii-1],sys); Vector r2 = ptr->mapLenFromRef(annuli_[ii],sys); str << type_ << '(' << setprecision(8) << vv << ',' << a1 << ',' << a2 << ",1," << r1 << ',' << r2 << ",1," << radToDeg(aa) << ')'; if (!strip) { if (conj) str << " ||"; str << " # epanda="; if (ii==1 && jj==1 && !strip) { str << '('; for (int kk=0; kkmapAngleFromRef(angles_[kk],sys); str << radToDeg(ar) << ((kkmapLenFromRef(annuli_[kk],sys); str << rr << ((kkmapAngleFromRef(angles_[jj-1],sys,sky)); double a2 = radToDeg(parent->mapAngleFromRef(angles_[jj],sys,sky)); if (a2<=a1+FLT_EPSILON) a2 += 360; Vector r1 = ptr->mapLenFromRef(annuli_[ii-1],sys,Coord::ARCSEC); Vector r2 = ptr->mapLenFromRef(annuli_[ii],sys,Coord::ARCSEC); double aa = parent->mapAngleFromRef(angle,sys,sky); str << setprecision(10) << a1 << ',' << a2 << ",1," << setprecision(3) << fixed << setunit('"') << r1 << ',' << setunit('"') << r2 << ",1,"; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(aa) << ')'; if (!strip) { if (conj) str << " ||"; str << " # epanda="; if (ii==1 && jj==1 && !strip) { str << '(' << setprecision(8); for (int kk=0; kkmapAngleFromRef(angles_[kk],sys,sky); str << radToDeg(ar) << ((kkmapLenFromRef(annuli_[kk],sys,Coord::ARCSEC); str << setunit('"') << rr << ((kkfindFits(sys,center); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowCenter(ptr,sys,sky,format); XMLRowRadius(ptr,sys,annuli_,numAnnuli_); XMLRowAng(sys,sky); XMLRowAng(sys,sky,angles_,numAngles_); XMLRowProps(ptr,sys); XMLRowEnd(str); } saods9/tksao/frame/epanda.h000644 000765 000000 00000004375 12752661141 016216 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __epanda_h__ #define __epanda_h__ #include "baseellipse.h" class Epanda : public BaseEllipse { private: void renderX(Drawable, Coord::InternalSystem, RenderMode); void renderPS(int); #ifdef MAC_OSX_TK void renderMACOSX(); #endif #ifdef __WIN32 void renderWIN32(); #endif void updateHandles(); void listA(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listB(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listANonCel(FitsImage*, ostream&, Coord::CoordSystem); void listBNonCel(FitsImage*, ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listBCel(FitsImage*, int, int, ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); int isIn(const Vector& vv, Coord::InternalSystem sys, int nn, int aa); public: Epanda(const Epanda&); Epanda(Base* p, const Vector& ctr, double a1, double a2, int an, const Vector& r1, const Vector& r2, int rn, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Epanda(Base* p, const Vector& ctr, int an, double* a, int rn, Vector* r, double ang, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Marker* dup() {return new Epanda(*this);} void edit(const Vector&, int); void editEnd(); int addAnnuli(const Vector&); int addAngles(const Vector&); void setAnglesAnnuli(double, double, int, Vector, Vector, int); void setAnglesAnnuli(const double*, int, const Vector*, int); void deleteAnglesAnnuli(int h); void analysis(AnalysisTask, int); void analysisPanda(Coord::CoordSystem sys); void analysisStats(Coord::CoordSystem, Coord::SkyFrame sky); void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); }; #endif saods9/tksao/frame/fitsanalysis.C000644 000765 000000 00000010755 12705446247 017437 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __WIN32 #include #endif #include "fitsimage.h" #include "analysis.h" #include "smooth.h" #include "context.h" void* convolve(void* tt); #ifdef __WIN32 void FitsImage::analysis(int which) { if (DebugPerf) cerr << "FitsImage::analysis()" << endl; if (manageAnalysis_) { if (analysis_) delete analysis_; if (analysisdata_) delete analysisdata_; } manageAnalysis_ =0; analysis_ = block_; analysisdata_ = blockdata_; if (which) { analysis_ = new FitsAnalysis(block_); if (analysis_->isValid()) { analysisdata_ = new FitsDatam(analysis_, interp_); smooth(); manageAnalysis_ =1; } else { delete analysis_; analysis_ = block_; } } image_ = analysis_; data_ = analysisdata_; } void FitsImage::smooth() { // radius int r = context_->smoothRadius(); int ww = analysis_->head()->naxis(0); int hh = analysis_->head()->naxis(1); // src double* src = new double[ww*hh]; double* ptr = src; for (long jj=0; jjgetValueDouble(jj*ww+ii); // dest double* dest = (double*)analysis_->data(); // kernel // create kernel int rr = 2*r+1; double* kernel = new double[rr*rr]; memset(kernel, 0, rr*rr*sizeof(double)); switch (context_->smoothFunction()) { case Context::BOXCAR: boxcar(kernel,r); break; case Context::TOPHAT: tophat(kernel,r); break; case Context::GAUSSIAN: gaussian(kernel,r); break; } // convolve t_smooth_arg* targ = new t_smooth_arg; targ->kernel = kernel; targ->src = src; targ->dest = dest; targ->width = ww; targ->height = hh; targ->radius = r; convolve(targ); // clean up if (targ->kernel) delete [] targ->kernel; if (targ->src) delete [] targ->src; if (targ) delete targ; } #else void FitsImage::analysis(int which, pthread_t* thread, t_smooth_arg* targ) { if (DebugPerf) cerr << "FitsImage::analysis()" << endl; targ->kernel =NULL; targ->src =NULL; targ->dest =NULL; targ->width =0; targ->height =0; targ->radius =0; if (manageAnalysis_) { if (analysis_) delete analysis_; if (analysisdata_) delete analysisdata_; } manageAnalysis_ =0; analysis_ = block_; analysisdata_ = blockdata_; if (which) { analysis_ = new FitsAnalysis(block_); if (analysis_->isValid()) { analysisdata_ = new FitsDatam(analysis_, interp_); smooth(thread, targ); manageAnalysis_ =1; } else { delete analysis_; analysis_ = block_; } } image_ = analysis_; data_ = analysisdata_; } void FitsImage::smooth(pthread_t* thread, t_smooth_arg* targ) { // radius int r = context_->smoothRadius(); int ww = analysis_->head()->naxis(0); int hh = analysis_->head()->naxis(1); // src double* src = new double[ww*hh]; double* ptr = src; for (long jj=0; jjgetValueDouble(jj*ww+ii); // dest double* dest = (double*)analysis_->data(); // kernel // create kernel int rr = 2*r+1; double* kernel = new double[rr*rr]; memset(kernel, 0, rr*rr*sizeof(double)); switch (context_->smoothFunction()) { case Context::BOXCAR: boxcar(kernel,r); break; case Context::TOPHAT: tophat(kernel,r); break; case Context::GAUSSIAN: gaussian(kernel,r); break; } // convolve targ->kernel = kernel; targ->src = src; targ->dest = dest; targ->width = ww; targ->height = hh; targ->radius = r; int result = pthread_create(thread, NULL, convolve, targ); if (result) internalError("Unable to Create Thread"); } #endif void* convolve(void* tt) { t_smooth_arg* targ = (t_smooth_arg*)tt; double* kernel = targ->kernel; double* src = targ->src; double* dest = targ->dest; int width = targ->width; int height = targ->height; int r = targ->radius; int rr = 2*r+1; double* dptr = dest; for (int jj=0; jj=0 && nn=0 && mmhead(); if (head) { FitsTableHDU* hdu = (FitsTableHDU*)(head->hdu()); if (!hdu->width() || !hdu->rows()) return; } } // make sure we have cols to bin on if (!fits_->pBinX() || !fits_->pBinY()) { FitsHead* head = fits_->head(); if (head) { FitsTableHDU* hdu = (FitsTableHDU*)head->hdu(); // try for X and Y FitsColumn* x = hdu->find("X"); FitsColumn* y = hdu->find("Y"); // next, try for ra and dec if (!x) x = hdu->find("RA"); if (!y) y = hdu->find("DEC"); // last chance, try first and second column if (!x) x = hdu->find(0); if (!y) y = hdu->find(1); if (x) { char* str = trim(x->ttype()); fits_->setpBinX(str); delete [] str; } else return; if (y) { char* str = trim(y->ttype()); fits_->setpBinY(str); delete [] str; } else return; } } if (!fits_->pBinZ()) { FitsHead* head = fits_->head(); if (head) { FitsTableHDU* hdu = (FitsTableHDU*)head->hdu(); // try for TIME FitsColumn* z = hdu->find("TIME"); // last chance, try third column if (!z) z = hdu->find(2); if (z) { char* str = trim(z->ttype()); fits_->setpBinZ(str); delete [] str; } } } nextBin(getHistCenter()); } int FitsImage::hasBinCol(const char* str) { if (fits_) { FitsHead* head = fits_->head(); if (head) { FitsTableHDU* hdu = (FitsTableHDU*)head->hdu(); return hdu->find(str) ? 1 : 0; } } return 0; } void FitsImage::setBinCursor(const Vector& v) { histCursor = v * refToPhysical; } Matrix FitsImage::nextBin(const Vector& c) { if (hist_) delete hist_; hist_ = NULL; if (manageBlock_) { if (block_) delete block_; if (blockdata_) delete blockdata_; } manageBlock_ =0; block_ = base_; blockdata_ = basedata_; if (manageAnalysis_) { if (analysis_) delete analysis_; if (analysisdata_) delete analysisdata_; } manageAnalysis_ =0; // cursor, c is in bin (physical) coords // remember where we are pointing histCursor = c; // Vector s = getHistDim()/binFactor_; Vector d = getHistDim(); Vector s; Vector binFactor = context_->binFactor(); s[0] = d[0]/binFactor[0]; s[1] = d[1]/binFactor[1]; // make sure that we have a width/height of at least 1 if (s[0]<1) s[0]=1; if (s[1]<1) s[1]=1; int bufferSize = context_->binBufferSize(); int width = (int)(s[0]binDepth(); Vector center = Vector(width, height)/2; if (DebugBin) { cerr << "width height: " << width << ' ' << height << endl; cerr << "center: " << center << endl; cerr << "center.ceil(): " << center.ceil() << endl; } if (binFactor[0]<1 || binFactor[1]<1) { actualHistCursor = histCursor; if (DebugBin) cerr << "histCursor: " << histCursor << endl; } else { // force to a bin boundary, then translate to center of bin cell // actualHistCursor = ((histCursor/binFactor_).floor() * binFactor_) + // Vector(.5,.5); actualHistCursor[0] = (floor(histCursor[0]/binFactor[0]) * binFactor[0]) + .5; actualHistCursor[1] = (floor(histCursor[1]/binFactor[1]) * binFactor[1]) + .5; // now, figure out any offset due to mod(lowerleft,binFactor_) FitsTableHDU* hdu = (FitsTableHDU*)(fits_->head())->hdu(); Vector xd = hdu->dimension(fits_->pBinX()); Vector yd = hdu->dimension(fits_->pBinY()); Vector ll(xd[0],yd[0]); // Vector a = ((ll/binFactor_).floor() * binFactor_) + Vector(.5,.5); Vector a; a[0] = (floor(ll[0]/binFactor[0]) * binFactor[0]) + .5; a[1] = (floor(ll[1]/binFactor[1]) * binFactor[1]) + .5; Vector offset = a-ll; actualHistCursor -= offset; if (DebugBin) { cerr << "histCursor: " << histCursor << endl; cerr << "actualHistCursor: " << actualHistCursor << endl; cerr << "ll: " << ll << endl; cerr << "offset: " << offset << endl; } } // new physicalToData Matrix mm = Translate(-actualHistCursor) * Scale(1./binFactor[0],1./binFactor[1]) * Translate(center.ceil()); if (DebugBin) cerr << "mm: " << mm << endl << endl; FitsHist::Function binFunction = context_->binFunction(); hist_ = new FitsHist(fits_, width, height, depth, mm, binFunction, binFactor); if (!hist_->isValid()) { reset(); return Matrix(); } load(); return refToPhysical * mm * dataToRef; } Vector FitsImage::getHistColMinMax(const char* col) { return fits_ ? fits_->getColMinMax(col) : Vector(); } Vector FitsImage::getHistColDim(const char* col) { return fits_ ? fits_->getColDim(col) : Vector(); } Vector FitsImage::getHistDim() { if (!isBinTable()) return Vector(); // assumes we aready have our columns FitsTableHDU* hdu = (FitsTableHDU*)(fits_->head())->hdu(); Vector xd = hdu->dimension(fits_->pBinX()); Vector yd = hdu->dimension(fits_->pBinY()); // if DBL_MAX, we will get nan Vector r(xd[1]-xd[0],yd[1]-yd[0]); if (isfinite(r[0]) && isfinite(r[1])) return r; else return Vector(DBL_MAX,DBL_MAX); } Vector FitsImage::getHistCenter() { // return bin (physical) coords if (!isBinTable()) return Vector(); // assumes we aready have our columns FitsTableHDU* hdu = (FitsTableHDU*)(fits_->head())->hdu(); Vector xd = hdu->dimension(fits_->pBinX()); Vector yd = hdu->dimension(fits_->pBinY()); // if DBL_MAX, we will get nan Vector r = Vector(xd[1]-xd[0],yd[1]-yd[0])/2 + Vector(xd[0],yd[0]); if (isfinite(r[0]) && isfinite(r[1])) return r; else return Vector(); } const char* FitsImage::getHistFilter() { return fits_ ? fits_->pFilter() : NULL; } const char* FitsImage::getHistX() { return fits_ ? fits_->pBinX() : NULL; } const char* FitsImage::getHistY() { return fits_ ? fits_->pBinY() : NULL; } const char* FitsImage::getHistZ() { return fits_ ? fits_->pBinZ() : NULL; } char* FitsImage::getHistList() { if (!isHist()) return NULL; FitsHead* head = fits_->head(); return ((FitsTableHDU*)head->hdu())->list(); } saods9/tksao/frame/fitsblock.C000644 000765 000000 00000010036 12705446247 016676 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "fitsimage.h" #include "block.h" #include "context.h" void* blockproc(void* tt); void FitsImage::block() { if (DebugPerf) cerr << "FitsImage::block()" << endl; if (manageBlock_) { if (block_) delete block_; if (blockdata_) delete blockdata_; } manageBlock_ =0; block_ = base_; blockdata_ = basedata_; if (manageAnalysis_) { if (analysis_) delete analysis_; if (analysisdata_) delete analysisdata_; } manageAnalysis_ =0; Vector blockFactor = context_->blockFactor(); if (blockFactor[0] != 1 && blockFactor[1] != 1) { block_ = new FitsBlock(base_, blockFactor); if (block_->isValid()) { manageBlock_ =1; switch (block_->head()->bitpix()) { case -64: blockdata_ = new FitsDatam(block_, interp_); break; default: blockdata_ = new FitsDatam(block_, interp_); break; } t_block_arg* targ = new t_block_arg; targ->base = base_; targ->basedata = basedata_; targ->block = block_; targ->blockFactor = blockFactor; blockproc(targ); } else { delete block_; block_ = base_; return; } } analysis_ = block_; analysisdata_ = blockdata_; image_ = analysis_; data_ = analysisdata_; resetWCS(); processKeywordsPhysical(); processKeywordsParams(); } #ifndef __WIN32 void FitsImage::block(pthread_t* thread) { if (DebugPerf) cerr << "FitsImage::block(thread)" << endl; if (manageBlock_) { if (block_) delete block_; if (blockdata_) delete blockdata_; } manageBlock_ =0; block_ = base_; blockdata_ = basedata_; if (manageAnalysis_) { if (analysis_) delete analysis_; if (analysisdata_) delete analysisdata_; } manageAnalysis_ =0; Vector blockFactor = context_->blockFactor(); if (blockFactor[0] != 1 && blockFactor[1] != 1) { block_ = new FitsBlock(base_, blockFactor); if (block_->isValid()) { manageBlock_ =1; switch (block_->head()->bitpix()) { case -64: blockdata_ = new FitsDatam(block_, interp_); break; default: blockdata_ = new FitsDatam(block_, interp_); break; } t_block_arg* targ = new t_block_arg; targ->base = base_; targ->basedata = basedata_; targ->block = block_; targ->blockFactor = blockFactor; int result = pthread_create(thread, NULL, blockproc, targ); if (result) internalError("Unable to Create Thread"); } else { delete block_; block_ = base_; return; } } analysis_ = block_; analysisdata_ = blockdata_; image_ = analysis_; data_ = analysisdata_; resetWCS(); processKeywordsPhysical(); processKeywordsParams(); } #endif void* blockproc(void* tt) { t_block_arg* targ = (t_block_arg*)tt; FitsFile* base = targ->base; FitsData* basedata = targ->basedata; FitsFile* block = targ->block; Vector blockFactor = targ->blockFactor; Matrix mm = Scale(1/blockFactor[0],1/blockFactor[1]); int srcw = base->head()->naxis(0); int srch = base->head()->naxis(1); int ww = block->head()->naxis(0); int hh = block->head()->naxis(1); switch (block->head()->bitpix()) { case -64: { double* dest=(double*)block->data(); for (int jj=0; jj=0 && cc[0]=0 && cc[1]getValueDouble(jj*srcw+ii); *(dest+(int(cc[1])*ww + int(cc[0]))) += vv; } } } } break; default: { float* dest=(float*)block->data(); for (int jj=0; jj=0 && cc[0]=0 && cc[1]getValueFloat(jj*srcw+ii); *(dest+(int(cc[1])*ww + int(cc[0]))) += vv; } } } } break; } return NULL; } saods9/tksao/frame/fitscompress.C000644 000765 000000 00000005717 12705446247 017451 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "fitsimage.h" #include "compress.h" #include "rice.h" #include "gzip.h" #include "hcompress.h" #include "plio.h" void FitsImage::initCompress() { int bitpix = fits_->getInteger("ZBITPIX",0); char* type = fits_->getString("ZCMPTYPE"); if (!bitpix || !type) { if (type) delete [] type; return ; } if (post_) delete post_; post_ = NULL; if (!strncmp(type,"RICE_1",6) || !(strncmp(type,"RICE_ONE",8))) switch (bitpix) { case 8: post_ = new FitsRicem(fits_); break; case 16: post_ = new FitsRicem(fits_); break; case -16: post_ = new FitsRicem(fits_); break; case 32: post_ = new FitsRicem(fits_); break; case 64: post_ = new FitsRicem(fits_); break; case -32: post_ = new FitsRicem(fits_); break; case -64: post_ = new FitsRicem(fits_); break; } else if (!strncmp(type,"GZIP_1",6) || !strncmp(type,"GZIP_2",6)) switch (bitpix) { case 8: post_ = new FitsGzipm(fits_); break; case 16: post_ = new FitsGzipm(fits_); break; case -16: post_ = new FitsGzipm(fits_); break; case 32: post_ = new FitsGzipm(fits_); break; case 64: post_ = new FitsGzipm(fits_); break; case -32: post_ = new FitsGzipm(fits_); break; case -64: post_ = new FitsGzipm(fits_); break; } else if (!strncmp(type,"PLIO_1",6)) switch (bitpix) { case 8: post_ = new FitsPliom(fits_); break; case 16: post_ = new FitsPliom(fits_); break; case -16: post_ = new FitsPliom(fits_); break; case 32: post_ = new FitsPliom(fits_); break; case 64: post_ = new FitsPliom(fits_); break; case -32: post_ = new FitsPliom(fits_); break; case -64: post_ = new FitsPliom(fits_); break; } else if (!strncmp(type,"HCOMPRESS_1",11)) switch (bitpix) { case 8: post_ = new FitsHcompressm(fits_); break; case 16: post_ = new FitsHcompressm(fits_); break; case -16: post_ = new FitsHcompressm(fits_); break; case 32: post_ = new FitsHcompressm(fits_); break; case 64: post_ = new FitsHcompressm(fits_); break; case -32: post_ = new FitsHcompressm(fits_); break; case -64: post_ = new FitsHcompressm(fits_); break; } else { ; // unknown compression type } if (type) delete [] type; return; } saods9/tksao/frame/fitsdata.C000644 000765 000000 00000152621 12732007674 016521 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "fitsdata.h" #include "sigbus.h" #ifdef INTERP #undef INTERP #endif #define INTERP interp_ // ZSCALE #define ZSMAX(a,b) ((a) > (b) ? (a) : (b)) #define ZSMIN(a,b) ((a) < (b) ? (a) : (b)) #define ZSMOD(a,b) ((a) % (b)) #define ZSNINT(a) ((int)(a + 0.5)) #define ZSINDEF 0 // smallest permissible sample #define ZSMIN_NPIXELS 5 // max frac. of pixels to be rejected #define ZSMAX_REJECT 0.5 // k-sigma pixel rejection factor #define ZSKREJ 2.5 // maximum number of fitline iterations #define ZSMAX_ITERATIONS 5 ostream& operator<<(ostream& ss, const FitsBound& fb) { ss << ' ' << fb.xmin << ' ' << fb.ymin << ' ' << fb.xmax << ' ' << fb.ymax; return ss; } // FitsData FitsData::FitsData(FitsFile* fits, Tcl_Interp* pp) { interp_ = pp; FitsImageHDU* hdu = (FitsImageHDU*)fits->head()->hdu(); width_ = hdu->naxis(0); height_ = hdu->naxis(1); buf_[0] = '\0'; byteswap_ = fits->byteswap(); bscale_ = hdu->bscale(); bzero_ = hdu->bzero(); blank_ = hdu->blank(); hasscaling_ = hdu->hasscaling(); switch (hdu->bitpix()) { case 8: case 16: case -16: case 32: case 64: hasblank_ = hdu->hasblank(); break; case -32: case -64: hasblank_ = 0; break; } min_ =0; max_ =0; low_ =0; high_ =0; zLow_ = zHigh_ = 0; aLow_ = aHigh_ = 0; ulow_ = uhigh_ = 0; scanValid_ = 0; minmaxSample_ = 25; zContrast_ = .5; zSample_ = 600; zLine_ = 5; zscaleValid_ = 0; autoCutValid_ = 0; autoCutPer_ = 0; clipMode_ = FrScale::MINMAX; minmaxMode_ = FrScale::SCAN; if (fits->find("DATAMIN") && fits->find("DATAMAX")) { hasdatamin_ = 1; datamin_ = fits->getReal("DATAMIN", 0); datamax_ = fits->getReal("DATAMAX", 0); } else { hasdatamin_ = 0; datamin_ = datamax_ = 0; } if (fits->find("IRAF-MIN") && fits->find("IRAF-MAX")) { hasirafmin_ = 1; irafmin_ = fits->getReal("IRAF-MIN", 0); irafmax_ = fits->getReal("IRAF-MAX", 0); } else { hasirafmin_ = 0; irafmin_ = irafmax_ = 0; } secMode_ = FrScale::IMGSEC; } FitsData::~FitsData() { } const char* FitsData::getLow() { ostringstream str; str << low_ << ends; memcpy(buf_,str.str().c_str(),str.str().length()); return buf_; } const char* FitsData::getHigh() { ostringstream str; str << high_ << ends; memcpy(buf_,str.str().c_str(),str.str().length()); return buf_; } int FitsData::calcIncr() { switch (minmaxMode_) { case FrScale::SCAN: case FrScale::DATAMIN: case FrScale::IRAFMIN: return 1; case FrScale::SAMPLE: return minmaxSample_; } } // AutoCut #define AUTOCUTSIZE 10240 void FitsData::autoCut(FitsBound* params) { double amin = min(); double amax = max(); // bin it up double hst[AUTOCUTSIZE]; memset(hst,0,sizeof(double)*AUTOCUTSIZE); hist(hst, AUTOCUTSIZE, amin, amax, params); // find total number of pixels int total = 0; for (int ii=0; ii cutoff) break; } for (hh=AUTOCUTSIZE-1,count=0; hh>ll+1; hh--) { count += hst[hh]; if (count > cutoff) break; } aLow_ = (amax-amin)/AUTOCUTSIZE*ll + amin; aHigh_ = (amax-amin)/AUTOCUTSIZE*hh + amin; } const char* FitsData::getMin() { ostringstream str; switch (minmaxMode_) { case FrScale::SCAN: case FrScale::SAMPLE: str << min_ << ends; break; case FrScale::DATAMIN: if (hasdatamin_) str << datamin_ << ends; else str << ends; break; case FrScale::IRAFMIN: if (hasirafmin_) str << irafmin_ << ends; else str << ends; break; } memcpy(buf_,str.str().c_str(),str.str().length()); return buf_; } const char* FitsData::getMinX() { ostringstream str; str << minXY_[0] << ends; memcpy(buf_,str.str().c_str(),str.str().length()); return buf_; } const char* FitsData::getMinY() { ostringstream str; str << minXY_[1] << ends; memcpy(buf_,str.str().c_str(),str.str().length()); return buf_; } const char* FitsData::getMax() { ostringstream str; switch (minmaxMode_) { case FrScale::SCAN: case FrScale::SAMPLE: str << max_ << ends; break; case FrScale::DATAMIN: if (hasdatamin_) str << datamax_ << ends; else str << ends; break; case FrScale::IRAFMIN: if (hasirafmin_) str << irafmax_ << ends; else str << ends; break; } memcpy(buf_,str.str().c_str(),str.str().length()); return buf_; } const char* FitsData::getMaxX() { ostringstream str; str << maxXY_[0] << ends; memcpy(buf_,str.str().c_str(),str.str().length()); return buf_; } const char* FitsData::getMaxY() { ostringstream str; str << maxXY_[1] << ends; memcpy(buf_,str.str().c_str(),str.str().length()); return buf_; } double FitsData::min() { switch (minmaxMode_) { case FrScale::SCAN: case FrScale::SAMPLE: return min_; case FrScale::DATAMIN: if (hasdatamin_) return datamin_; else return 0; case FrScale::IRAFMIN: if (hasirafmin_) return irafmin_; else return 0; } } double FitsData::max() { switch (minmaxMode_) { case FrScale::SCAN: case FrScale::SAMPLE: return max_; case FrScale::DATAMIN: if (hasdatamin_) return datamax_; else return 0; case FrScale::IRAFMIN: if (hasirafmin_) return irafmax_; return 0; } } // FitsDatam template FitsDatam::FitsDatam(FitsFile* fits, Tcl_Interp* pp) : FitsData(fits, pp) { data_ = (T*)fits->data(); } // swap (optimized) template <> unsigned char FitsDatam::swap(unsigned char* ptr) { return *ptr; } template <> short FitsDatam::swap(short* ptr) { const char* p = (const char*)ptr; union { char c[2]; short s; } u; u.c[1] = *p++; u.c[0] = *p; return u.s; } template <> unsigned short FitsDatam::swap(unsigned short* ptr) { const char* p = (const char*)ptr; union { char c[2]; unsigned short s; } u; u.c[1] = *p++; u.c[0] = *p; return u.s; } template <> int FitsDatam::swap(int* ptr) { const char* p = (const char*)ptr; union { char c[4]; int i; } u; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; return u.i; } template <> long long FitsDatam::swap(long long* ptr) { const char* p = (const char*)ptr; union { char c[8]; long long i; } u; u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; return u.i; } template <> float FitsDatam::swap(float* ptr) { const char* p = (const char*)ptr; union { char c[4]; float f; } u; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; return u.f; } template <> double FitsDatam::swap(double* ptr) { const char* p = (const char*)ptr; union { char c[8]; double d; } u; u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; return u.d; } // Private/Protected // output template void FitsDatam::output(ostringstream& str, T value) { str << value << ends; } template <> void FitsDatam::output(ostringstream& str, unsigned char value) { str << (unsigned short)value << ends; } template <> void FitsDatam::output(ostringstream& str, unsigned short value) { str << (unsigned short)value << ends; } // scan (optimized) template <> void FitsDatam::scan(FitsBound* params) { min_ = UCHAR_MAX; max_ = 0; minXY_.origin(); maxXY_.origin(); int kk =calcIncr(); if (DebugPerf) cerr << "FitsDatam::scan()..." << " sample=" << minmaxSample_ << " (" << params->xmin << ',' << params->ymin << ") to (" << params->xmax << ',' << params->ymax << ") "; SETSIGBUS for (int jj=params->ymin; jjymax; jj+=kk) { unsigned char* ptr = data_ + jj*long(width_) + long(params->xmin); for (int ii=params->xmin; iixmax; ii+=kk, ptr+=kk) { register unsigned char value = *ptr; if (hasblank_ && value == blank_) continue; // skip nan's if (value < min_) { min_ = value; minXY_ = Vector(ii+1, jj+1); } if (value > max_) { max_ = value; maxXY_ = Vector(ii+1, jj+1); } } } CLEARSIGBUS // sanity check if (min_ == UCHAR_MAX && max_ == 0) { min_ =NAN; max_ =NAN; minXY_.origin(); maxXY_.origin(); } else { if (hasscaling_) { min_ = min_*bscale_ + bzero_; max_ = max_*bscale_ + bzero_; } } if (DebugPerf) { cerr << "end" << endl; cerr << "min: " << min_ << " max: " << max_ << endl; } } template <> void FitsDatam::scan(FitsBound* params) { min_ = SHRT_MAX; max_ = SHRT_MIN; minXY_.origin(); maxXY_.origin(); int kk =calcIncr(); if (DebugPerf) cerr << "FitsDatam::scan()..." << " sample=" << minmaxSample_ << " (" << params->xmin << ',' << params->ymin << ") to (" << params->xmax << ',' << params->ymax << ") "; SETSIGBUS for (int jj=params->ymin; jjymax; jj+=kk) { short* ptr = data_ + jj*long(width_) + long(params->xmin); for (int ii=params->xmin; iixmax; ii+=kk, ptr+=kk) { register short value; if (!byteswap_) value = *ptr; else { const char* p = (const char*)ptr; union { char c[2]; short s; } u; u.c[1] = *p++; u.c[0] = *p; value = u.s; } if (hasblank_ && value == blank_) continue; // skip nan's if (value < min_) { min_ = value; minXY_ = Vector(ii+1, jj+1); } if (value > max_) { max_ = value; maxXY_ = Vector(ii+1, jj+1); } } } CLEARSIGBUS // sanity check if (min_ == SHRT_MAX && max_ == SHRT_MIN) { min_ =NAN; max_ =NAN; minXY_.origin(); maxXY_.origin(); } else { if (hasscaling_) { min_ = min_*bscale_ + bzero_; max_ = max_*bscale_ + bzero_; } } if (DebugPerf) { cerr << "end" << endl; cerr << "min: " << min_ << " max: " << max_ << endl; } } template <> void FitsDatam::scan(FitsBound* params) { min_ = USHRT_MAX; max_ = 0; minXY_.origin(); maxXY_.origin(); int kk =calcIncr(); if (DebugPerf) cerr << "FitsDatam::scan()..." << " sample=" << minmaxSample_ << " (" << params->xmin << ',' << params->ymin << ") to (" << params->xmax << ',' << params->ymax << ") "; SETSIGBUS for (int jj=params->ymin; jjymax; jj+=kk) { unsigned short* ptr = data_ + jj*long(width_) + long(params->xmin); for (int ii=params->xmin; iixmax; ii+=kk, ptr+=kk) { register unsigned short value; if (!byteswap_) value = *ptr; else { const char* p = (const char*)ptr; union { char c[2]; unsigned short s; } u; u.c[1] = *p++; u.c[0] = *p; value = u.s; } if (hasblank_ && value == blank_) continue; // skip nan's if (value < min_) { min_ = value; minXY_ = Vector(ii+1, jj+1); } if (value > max_) { max_ = value; maxXY_ = Vector(ii+1, jj+1); } } } CLEARSIGBUS // sanity check if (min_ == USHRT_MAX && max_ == 0) { min_ =NAN; max_ =NAN; minXY_.origin(); maxXY_.origin(); } else { if (hasscaling_) { min_ = min_*bscale_ + bzero_; max_ = max_*bscale_ + bzero_; } } if (DebugPerf) { cerr << "end" << endl; cerr << "min: " << min_ << " max: " << max_ << endl; } } template <> void FitsDatam::scan(FitsBound* params) { min_ = INT_MAX; max_ = INT_MIN; minXY_.origin(); maxXY_.origin(); int kk =calcIncr(); if (DebugPerf) cerr << "FitsDatam::scan()..." << " sample=" << minmaxSample_ << " (" << params->xmin << ',' << params->ymin << ") to (" << params->xmax << ',' << params->ymax << ") "; SETSIGBUS for (int jj=params->ymin; jjymax; jj+=kk) { int* ptr = data_ + jj*long(width_) + long(params->xmin); for (int ii=params->xmin; iixmax; ii+=kk, ptr+=kk) { register int value; if (!byteswap_) value = *ptr; else { const char* p = (const char*)ptr; union { char c[4]; int i; } u; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; value = u.i; } if (hasblank_ && value == blank_) continue; // skip nan's if (value < min_) { min_ = value; minXY_ = Vector(ii+1, jj+1); } if (value > max_) { max_ = value; maxXY_ = Vector(ii+1, jj+1); } } } CLEARSIGBUS // sanity check if (min_ == INT_MAX && max_ == INT_MIN) { min_ =NAN; max_ =NAN; minXY_.origin(); maxXY_.origin(); } else { if (hasscaling_) { min_ = min_*bscale_ + bzero_; max_ = max_*bscale_ + bzero_; } } if (DebugPerf) { cerr << "end" << endl; cerr << "min: " << min_ << " max: " << max_ << endl; } } template <> void FitsDatam::scan(FitsBound* params) { min_ = LLONG_MAX; max_ = LLONG_MIN; minXY_.origin(); maxXY_.origin(); int kk =calcIncr(); if (DebugPerf) cerr << "FitsDatam::scan()..." << " sample=" << minmaxSample_ << " (" << params->xmin << ',' << params->ymin << ") to (" << params->xmax << ',' << params->ymax << ") "; SETSIGBUS for (int jj=params->ymin; jjymax; jj+=kk) { long long* ptr = data_ + jj*long(width_) + long(params->xmin); for (int ii=params->xmin; iixmax; ii+=kk, ptr+=kk) { register long long value; if (!byteswap_) value = *ptr; else { const char* p = (const char*)ptr; union { char c[8]; long long i; } u; u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; value = u.i; } if (hasblank_ && value == blank_) continue; // skip nan's if (value < min_) { min_ = value; minXY_ = Vector(ii+1, jj+1); } if (value > max_) { max_ = value; maxXY_ = Vector(ii+1, jj+1); } } } CLEARSIGBUS // sanity check if (min_ == LLONG_MAX && max_ == LLONG_MIN) { min_ =NAN; max_ =NAN; minXY_.origin(); maxXY_.origin(); } else { if (hasscaling_) { min_ = min_*bscale_ + bzero_; max_ = max_*bscale_ + bzero_; } } if (DebugPerf) { cerr << "end" << endl; cerr << "min: " << min_ << " max: " << max_ << endl; } } template <> void FitsDatam::scan(FitsBound* params) { min_ = FLT_MAX; max_ = -FLT_MAX; minXY_.origin(); maxXY_.origin(); int kk =calcIncr(); if (DebugPerf) cerr << "FitsDatam::scan()..." << " sample=" << minmaxSample_ << " (" << params->xmin << ',' << params->ymin << ") to (" << params->xmax << ',' << params->ymax << ") "; SETSIGBUS for (int jj=params->ymin; jjymax; jj+=kk) { float* ptr = data_ + jj*long(width_) + long(params->xmin); for (int ii=params->xmin; iixmax; ii+=kk, ptr+=kk) { register float value; if (!byteswap_) value = *ptr; else { const char* p = (const char*)ptr; union { char c[4]; float f; } u; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; value = u.f; } if (isfinite(value)) { if (value < min_) { min_ = value; minXY_ = Vector(ii+1, jj+1); } if (value > max_) { max_ = value; maxXY_ = Vector(ii+1, jj+1); } } } } CLEARSIGBUS // sanity check if (min_ == FLT_MAX && max_ == -FLT_MAX) { min_ =NAN; max_ =NAN; minXY_.origin(); maxXY_.origin(); } else { if (hasscaling_) { min_ = min_*bscale_ + bzero_; max_ = max_*bscale_ + bzero_; } } if (DebugPerf) { cerr << "end" << endl; cerr << "min: " << min_ << " max: " << max_ << endl; } } template <> void FitsDatam::scan(FitsBound* params) { min_ = DBL_MAX; max_ = -DBL_MAX; minXY_.origin(); maxXY_.origin(); int kk =calcIncr(); if (DebugPerf) cerr << "FitsDatam::scan()..." << " sample=" << minmaxSample_ << " (" << params->xmin << ',' << params->ymin << ") to (" << params->xmax << ',' << params->ymax << ") "; SETSIGBUS for (int jj=params->ymin; jjymax; jj+=kk) { double* ptr = data_ + jj*long(width_) + long(params->xmin); for (int ii=params->xmin; iixmax; ii+=kk, ptr+=kk) { register double value; if (!byteswap_) value = *ptr; else { const char* p = (const char*)ptr; union { char c[8]; double d; } u; u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; value = u.d; } if (isfinite(value)) { if (value < min_) { min_ = value; minXY_ = Vector(ii+1, jj+1); } if (value > max_) { max_ = value; maxXY_ = Vector(ii+1, jj+1); } } } } CLEARSIGBUS // sanity check if (min_ == DBL_MAX && max_ == -DBL_MAX) { min_ =NAN; max_ =NAN; minXY_.origin(); maxXY_.origin(); } else { if (hasscaling_) { min_ = min_*bscale_ + bzero_; max_ = max_*bscale_ + bzero_; } } if (DebugPerf) { cerr << "end" << endl; cerr << "min: " << min_ << " max: " << max_ << endl; } } // Public // updateClip template void FitsDatam::updateClip(FrScale* fr, FitsBound* params) { if (DebugPerf) cerr << "FitsDatam::updateClip()" << endl; clipMode_ = fr->clipMode(); ulow_ = fr->ulow(); uhigh_ = fr->uhigh(); // DATASEC if (secMode_ != fr->secMode()) { scanValid_ = 0; zscaleValid_ = 0; autoCutValid_ = 0; } secMode_ = fr->secMode(); // MINMAX if (minmaxMode_ != fr->minmaxMode() || minmaxSample_ != fr->minmaxSample()) scanValid_ = 0; minmaxMode_ = fr->minmaxMode(); minmaxSample_ = fr->minmaxSample(); // ZSCALE if (zContrast_ != fr->zContrast() || zSample_ != fr->zSample() || zLine_ != fr->zLine()) zscaleValid_ = 0; zContrast_ = fr->zContrast(); zSample_ = fr->zSample(); zLine_ = fr->zLine(); // AUTOCUT if (minmaxMode_ != fr->minmaxMode() || autoCutPer_ != fr->autoCutPer()) autoCutValid_ = 0; autoCutPer_ = fr->autoCutPer(); // always update min/max because everyone needs it if (!scanValid_) { scan(params); scanValid_ = 1; } switch (clipMode_) { case FrScale::MINMAX: low_ = min(); high_ = max(); break; case FrScale::ZSCALE: if (!zscaleValid_) { zscale(params); zscaleValid_ = 1; } low_ = zLow_; high_ = zHigh_; break; case FrScale::ZMAX: // set low via zscale, high via minmax if (!zscaleValid_) { zscale(params); zscaleValid_ = 1; } low_ = zLow_; high_ = max(); break; case FrScale::AUTOCUT: if (!autoCutValid_) { autoCut(params); autoCutValid_ = 1; } low_ = aLow_; high_ = aHigh_; break; case FrScale::USERCLIP: low_ = ulow_; high_ = uhigh_; break; } } // getValue template const char* FitsDatam::getValue(const Vector& vv) { Vector v(vv); long x = (long)v[0]; long y = (long)v[1]; ostringstream str; if (x >= 0 && x < width_ && y >= 0 && y < height_) { register T value = !byteswap_ ? data_[y*width_ + x] : swap(data_+(y*width_ + x)); if (hasblank_ && value == blank_) str << "blank" << ends; else if (hasscaling_) str << value * bscale_ + bzero_ << ends; else output(str, value); } else str << ends; memcpy(buf_,str.str().c_str(),str.str().length()); return buf_; } template <> const char* FitsDatam::getValue(const Vector& vv) { Vector v(vv); long x = (long)v[0]; long y = (long)v[1]; ostringstream str; if (x >= 0 && x < width_ && y >= 0 && y < height_) { register float value = !byteswap_ ? data_[y*width_ + x] : swap(data_+(y*width_ + x)); if (isinf(value)) str << "inf" << ends; else if (isnan(value)) str << "nan" << ends; else if (hasscaling_) str << value * bscale_ + bzero_ << ends; else str << value << ends; } else str << ends; memcpy(buf_,str.str().c_str(),str.str().length()); return buf_; } template <> const char* FitsDatam::getValue(const Vector& vv) { Vector v(vv); long x = (long)v[0]; long y = (long)v[1]; ostringstream str; if (x >= 0 && x < width_ && y >= 0 && y < height_) { register double value = !byteswap_ ? data_[y*width_ + x] : swap(data_+(y*width_ + x)); if (isinf(value)) str << "inf" << ends; else if (isnan(value)) str << "nan" << ends; else if (hasscaling_) str << value * bscale_ + bzero_ << ends; else str << value << ends; } else str << ends; memcpy(buf_,str.str().c_str(),str.str().length()); return buf_; } // getValueFloat(long) (optimized) // no bounds checking, we need the speed template <> float FitsDatam::getValueFloat(long i) { if (!hasblank_ && !hasscaling_) return data_[i]; if (hasblank_ && data_[i] == blank_) return NAN; else return hasscaling_ ? data_[i] * bscale_ + bzero_ : data_[i]; } template <> float FitsDatam::getValueFloat(long i) { if (!byteswap_ && !hasblank_ && !hasscaling_) return data_[i]; if (!byteswap_) { if (hasblank_ && data_[i] == blank_) return NAN; else return hasscaling_ ? data_[i] * bscale_ + bzero_ : data_[i]; } else { const char* p = (const char*)(data_+i); union { char c[2]; short s; } u; u.c[1] = *p++; u.c[0] = *p; if (!hasblank_ && !hasscaling_) return u.s; if (hasblank_ && u.s == blank_) return NAN; else return hasscaling_ ? u.s * bscale_ + bzero_ : u.s; } } template <> float FitsDatam::getValueFloat(long i) { if (!byteswap_ && !hasblank_ && !hasscaling_) return data_[i]; if (!byteswap_) { if (hasblank_ && data_[i] == blank_) return NAN; else return hasscaling_ ? data_[i] * bscale_ + bzero_ : data_[i]; } else { const char* p = (const char*)(data_+i); union { char c[2]; unsigned short s; } u; u.c[1] = *p++; u.c[0] = *p; if (!hasblank_ && !hasscaling_) return u.s; if (hasblank_ && u.s == blank_) return NAN; else return hasscaling_ ? u.s * bscale_ + bzero_ : u.s; } } template <> float FitsDatam::getValueFloat(long i) { if (!byteswap_ && !hasblank_ && !hasscaling_) return data_[i]; if (!byteswap_) { if (hasblank_ && data_[i] == blank_) return NAN; else return hasscaling_ ? data_[i] * bscale_ + bzero_ : data_[i]; } else { const char* p = (const char*)(data_+i); union { char c[4]; int i; } u; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; if (!hasblank_ && !hasscaling_) return u.i; if (hasblank_ && u.i == blank_) return NAN; else return hasscaling_ ? u.i * bscale_ + bzero_ : u.i; } } template <> float FitsDatam::getValueFloat(long i) { if (!byteswap_ && !hasblank_ && !hasscaling_) return data_[i]; if (!byteswap_) { if (hasblank_ && data_[i] == blank_) return NAN; else return hasscaling_ ? data_[i] * bscale_ + bzero_ : data_[i]; } else { const char* p = (const char*)(data_+i); union { char c[8]; long long i; } u; u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; if (!hasblank_ && !hasscaling_) return u.i; if (hasblank_ && u.i == blank_) return NAN; else return hasscaling_ ? u.i * bscale_ + bzero_ : u.i; } } template <> float FitsDatam::getValueFloat(long i) { if (!byteswap_) if (isfinite(data_[i])) return hasscaling_ ? data_[i] * bscale_ + bzero_ : data_[i]; else return NAN; else { const char* p = (const char*)(data_+i); union { char c[4]; float f; } u; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; if (isfinite(u.f)) return hasscaling_ ? u.f * bscale_ + bzero_ : u.f; else return NAN; } } template <> float FitsDatam::getValueFloat(long i) { if (!byteswap_) if (isfinite(data_[i])) return hasscaling_ ? (float)data_[i] * bscale_ + bzero_ : (float)data_[i]; else return NAN; else { const char* p = (const char*)(data_+i); union { char c[8]; double d; } u; u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; if (isfinite(u.d)) return hasscaling_ ? (float)u.d * bscale_ + bzero_ : (float)u.d; else return NAN; } } // getValueFloat(const Vector&) template float FitsDatam::getValueFloat(const Vector& v) { Vector r = v; long x = (long)r[0]; long y = (long)r[1]; if (x >= 0 && x < width_ && y >= 0 && y < height_) { register T value = !byteswap_ ? data_[y*width_ + x] : swap(data_+(y*width_ + x)); if (hasblank_ && value == blank_) return NAN; return hasscaling_ ? value * bscale_ + bzero_ : value; } else return NAN; } template <> float FitsDatam::getValueFloat(const Vector& v) { Vector r = v; long x = (long)r[0]; long y = (long)r[1]; if (x >= 0 && x < width_ && y >= 0 && y < height_) { register float value = !byteswap_ ? data_[y*width_ + x] : swap(data_+(y*width_ + x)); if (isfinite(value)) return hasscaling_ ? value * bscale_ + bzero_ : value; else return NAN; } else return NAN; } template <> float FitsDatam::getValueFloat(const Vector& v) { Vector r = v; long x = (long)r[0]; long y = (long)r[1]; if (x >= 0 && x < width_ && y >= 0 && y < height_) { register double value = !byteswap_ ? data_[y*width_ + x] : swap(data_+(y*width_ + x)); if (isfinite(value)) return hasscaling_ ? (float)value * bscale_ + bzero_ : (float)value; else return NAN; } else return NAN; } // getValueDouble(long) (optimized) // no bounds checking, we need the speed template <> double FitsDatam::getValueDouble(long i) { if (!hasblank_ && !hasscaling_) return data_[i]; if (hasblank_ && data_[i] == blank_) return NAN; else return hasscaling_ ? data_[i] * bscale_ + bzero_ : data_[i]; } template <> double FitsDatam::getValueDouble(long i) { if (!byteswap_ && !hasblank_ && !hasscaling_) return data_[i]; if (!byteswap_) { if (hasblank_ && data_[i] == blank_) return NAN; else return hasscaling_ ? data_[i] * bscale_ + bzero_ : data_[i]; } else { const char* p = (const char*)(data_+i); union { char c[2]; short s; } u; u.c[1] = *p++; u.c[0] = *p; if (!hasblank_ && !hasscaling_) return u.s; if (hasblank_ && u.s == blank_) return NAN; else return hasscaling_ ? u.s * bscale_ + bzero_ : u.s; } } template <> double FitsDatam::getValueDouble(long i) { if (!byteswap_ && !hasblank_ && !hasscaling_) return data_[i]; if (!byteswap_) { if (hasblank_ && data_[i] == blank_) return NAN; else return hasscaling_ ? data_[i] * bscale_ + bzero_ : data_[i]; } else { const char* p = (const char*)(data_+i); union { char c[2]; unsigned short s; } u; u.c[1] = *p++; u.c[0] = *p; if (!hasblank_ && !hasscaling_) return u.s; if (hasblank_ && u.s == blank_) return NAN; else return hasscaling_ ? u.s * bscale_ + bzero_ : u.s; } } template <> double FitsDatam::getValueDouble(long i) { if (!byteswap_ && !hasblank_ && !hasscaling_) return data_[i]; if (!byteswap_) { if (hasblank_ && data_[i] == blank_) return NAN; else return hasscaling_ ? data_[i] * bscale_ + bzero_ : data_[i]; } else { const char* p = (const char*)(data_+i); union { char c[4]; int i; } u; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; if (!hasblank_ && !hasscaling_) return u.i; if (hasblank_ && u.i == blank_) return NAN; else return hasscaling_ ? u.i * bscale_ + bzero_ : u.i; } } template <> double FitsDatam::getValueDouble(long i) { if (!byteswap_ && !hasblank_ && !hasscaling_) return data_[i]; if (!byteswap_) { if (hasblank_ && data_[i] == blank_) return NAN; else return hasscaling_ ? data_[i] * bscale_ + bzero_ : data_[i]; } else { const char* p = (const char*)(data_+i); union { char c[8]; long long i; } u; u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; if (!hasblank_ && !hasscaling_) return u.i; if (hasblank_ && u.i == blank_) return NAN; else return hasscaling_ ? u.i * bscale_ + bzero_ : u.i; } } template <> double FitsDatam::getValueDouble(long i) { if (!byteswap_ && !hasscaling_) return (double)data_[i]; if (!byteswap_) { if (isfinite(data_[i])) return hasscaling_ ? (double)data_[i] * bscale_ + bzero_ : (double)data_[i]; else return NAN; } else { const char* p = (const char*)(data_+i); union { char c[4]; float f; } u; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; if (isfinite(u.f)) return hasscaling_ ? (double)u.f * bscale_ + bzero_ : (double)u.f; else return NAN; } } template <> double FitsDatam::getValueDouble(long i) { if (!byteswap_ && !hasscaling_) return (double)data_[i]; if (!byteswap_) { if (isfinite(data_[i])) return hasscaling_ ? data_[i] * bscale_ + bzero_ : data_[i]; else return NAN; } else { const char* p = (const char*)(data_+i); union { char c[8]; double d; } u; u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; if (isfinite(u.d)) return hasscaling_ ? u.d * bscale_ + bzero_ : u.d; else return NAN; } } // getValueDouble(const Vector&) template double FitsDatam::getValueDouble(const Vector& v) { Vector r = v; long x = (long)r[0]; long y = (long)r[1]; if (x >= 0 && x < width_ && y >= 0 && y < height_) { register T value = !byteswap_ ? data_[y*width_ + x] : swap(data_+(y*width_ + x)); if (hasblank_ && value == blank_) return NAN; return hasscaling_ ? value * bscale_ + bzero_ : value; } else return NAN; } template <> double FitsDatam::getValueDouble(const Vector& v) { Vector r = v; long x = (long)r[0]; long y = (long)r[1]; if (x >= 0 && x < width_ && y >= 0 && y < height_) { register float value = !byteswap_ ? data_[y*width_ + x] : swap(data_+(y*width_ + x)); if (isfinite(value)) return hasscaling_ ? (double)value * bscale_ + bzero_ : (double)value; else return NAN; } else return NAN; } template <> double FitsDatam::getValueDouble(const Vector& v) { Vector r = v; long x = (long)r[0]; long y = (long)r[1]; if (x >= 0 && x < width_ && y >= 0 && y < height_) { register double value = !byteswap_ ? data_[y*width_ + x] : swap(data_+(y*width_ + x)); if (isfinite(value)) return hasscaling_ ? value * bscale_ + bzero_ : value; else return NAN; } else return NAN; } // getValueMask template int FitsDatam::getValueMask(const Vector& v) { Vector r = v; long x = (long)r[0]; long y = (long)r[1]; if (x >= 0 && x < width_ && y >= 0 && y < height_) return data_[y*width_ + x] ? 1 : 0; else return 0; } template int FitsDatam::getValueMask(double xx, double yy) { long x = (long)xx; long y = (long)yy; if (x >= 0 && x < width_ && y >= 0 && y < height_) return data_[y*width_ + x] ? 1 : 0; else return 0; } template int FitsDatam::getValueMask(long i) { return data_[i] ? 1 : 0; } // bin template void FitsDatam::hist(double* arr, int length, double mn, double mx, FitsBound* params) { if (DebugPerf) cerr << "FitsDatam::hist()" << endl; double diff = mx-mn; int last = length-1; int kk =calcIncr(); // special case: mx-mn=0 if (!diff) { arr[0] = (params->xmax-params->xmin)*(params->ymax-params->ymin); return; } SETSIGBUS for (int jj=params->ymin; jjymax; jj+=kk) { T* ptr = data_ + jj*long(width_) + long(params->xmin); for (int ii=params->xmin; iixmax; ii+=kk, ptr+=kk) { register double value = !byteswap_ ? *ptr : swap(ptr); if (hasblank_ && value == blank_) continue; // skip nan's if (hasscaling_) value = value * bscale_ + bzero_; if (value>=mn && value <=mx) arr[(int)((value-mn)/diff*last+.5)]++; } } CLEARSIGBUS } template <> void FitsDatam::hist(double* arr, int length, double mn, double mx, FitsBound* params) { if (DebugPerf) cerr << "FitsDatam::hist()" << endl; double diff = mx-mn; // the last location is always 0 int last = length-2; int kk =calcIncr(); // special case: mx-mn=0 if (!diff) { arr[0] = (params->xmax-params->xmin)*(params->ymax-params->ymin); return; } SETSIGBUS for (int jj=params->ymin; jjymax; jj+=kk) { float* ptr = data_ + jj*long(width_) + long(params->xmin); for (int ii=params->xmin; iixmax; ii+=kk, ptr+=kk) { register double value = !byteswap_ ? *ptr : swap(ptr); if (!isfinite(value)) continue; // skip nan's if (hasscaling_) value = value * bscale_ + bzero_; if (value>=mn && value<=mx) arr[(int)((value-mn)/diff*last+.5)]++; } } CLEARSIGBUS } template <> void FitsDatam::hist(double* arr, int length, double mn, double mx, FitsBound* params) { if (DebugPerf) cerr << "FitsDatam::hist()" << endl; double diff = mx-mn; int last = length-1; int kk =calcIncr(); // special case: mx-mn=0 if (!diff) { arr[0] = (params->xmax-params->xmin)*(params->ymax-params->ymin); return; } SETSIGBUS for (int jj=params->ymin; jjymax; jj+=kk) { double* ptr = data_ + jj*long(width_) + long(params->xmin); for (int ii=params->xmin; iixmax; ii+=kk, ptr+=kk) { register double value = !byteswap_ ? *ptr : swap(ptr); if (!isfinite(value)) continue; // skip nan's if (hasscaling_) value = value * bscale_ + bzero_; if (value>=mn && value <=mx) arr[(int)((value-mn)/diff*last+.5)]++; } } CLEARSIGBUS } // ZSCALE // ZSCALE -- Compute the optimal Z1, Z2 (range of greyscale values to be // displayed) of an image. For efficiency a statistical subsample of an image // is used. The pixel sample evenly subsamples the image in x and y. The // entire image is used if the number of pixels in the image is smaller than // the desired sample. // // The sample is accumulated in a buffer and sorted by greyscale value. // The median value is the central value of the sorted array. The slope of a // straight line fitted to the sorted sample is a measure of the standard // deviation of the sample about the median value. Our algorithm is to sort // the sample and perform an iterative fit of a straight line to the sample, // using pixel rejection to omit gross deviants near the endpoints. The fitted // straight line is the transfer function used to map image Z into display Z. // If more than half the pixels are rejected the full range is used. The slope // of the fitted line is divided by the user-supplied contrast factor and the // final Z1 and Z2 are computed, taking the origin of the fitted line at the // median value. template void FitsDatam::zscale(FitsBound* params) { // Subsample the image float* sample; int npix = zSampleImage(&sample,params); int center_pixel = ZSMAX(1, (npix + 1) / 2); // Sort the sample, compute the minimum, maximum, and median pixel values qsort((void*)sample, npix, sizeof(float), fCompare); float zmin = *sample; float zmax = *(sample+ZSMAX(npix,1)-1); // The median value is the average of the two central values if there // are an even number of pixels in the sample. float* left = &(sample[center_pixel - 1]); float median; if (ZSMOD(npix, 2) == 1 || center_pixel >= npix) median = *left; else median = (*left + *(left+1)) / 2; // Fit a line to the sorted sample vector. If more than half of the // pixels in the sample are rejected give up and return the full range. // If the user-supplied contrast factor is not 1.0 adjust the scale // accordingly and compute zLow and zHigh, the y intercepts at indices 1 and // npix. int minpix = ZSMAX(ZSMIN_NPIXELS, (int)(npix * ZSMAX_REJECT)); int ngrow = ZSMAX(1, ZSNINT(npix * .01)); float zstart, zslope; int ngoodpix = zFitLine(sample, npix, &zstart, &zslope, ZSKREJ, ngrow, ZSMAX_ITERATIONS); if (ngoodpix < minpix) { zLow_ = zmin; zHigh_ = zmax; } else { if (zContrast_ > 0) zslope = zslope / zContrast_; zLow_ = ZSMAX(zmin, median - (center_pixel - 1) * zslope); zHigh_ = ZSMIN(zmax, median + (npix - center_pixel) * zslope); } delete [] sample; } // sampleImage -- Extract an evenly gridded subsample of the pixels from // a two-dimensional image into a one-dimensional vector. template int FitsDatam::zSampleImage(float** sample, FitsBound* params) { // Compute the number of pixels each line will contribute to the sample, // and the subsampling step size for a line. The sampling grid must // span the whole line on a uniform grid. int wd = params->xmax - params->xmin; int opt_npix_per_line = ZSMAX(1, ZSMIN(wd, zLine_)); int col_step = ZSMAX(2, (wd + opt_npix_per_line-1) / opt_npix_per_line); int npix_per_line = ZSMAX(1, (wd + col_step-1) / col_step); /* int opt_npix_per_line = ZSMAX(1, ZSMIN(width, zLine)); int col_step = ZSMAX(2, (width + opt_npix_per_line-1) / opt_npix_per_line); int npix_per_line = ZSMAX(1, (width + col_step-1) / col_step); */ // Compute the number of lines to sample and the spacing between lines. // We must ensure that the image is adequately sampled despite its // size, hence there is a lower limit on the number of lines in the // sample. We also want to minimize the number of lines accessed when // accessing a large image, because each disk seek and read is ex- // pensive. The number of lines extracted will be roughly the sample // size divided by zLine, possibly more if the lines are very // short. int hd = params->ymax-params->ymin; int min_nlines_in_sample = ZSMAX(1, zSample_ / zLine_); int opt_nlines_in_sample = ZSMAX(min_nlines_in_sample, ZSMIN(hd, (zSample_ + npix_per_line-1) / npix_per_line)); int line_step = ZSMAX(2, hd / opt_nlines_in_sample); int max_nlines_in_sample = (hd + line_step-1) / line_step; /* int min_nlines_in_sample = ZSMAX(1, zSample / zLine); int opt_nlines_in_sample = ZSMAX(min_nlines_in_sample, ZSMIN(height, (zSample + npix_per_line-1) / npix_per_line)); int line_step = ZSMAX(2, height / opt_nlines_in_sample); int max_nlines_in_sample = (height + line_step-1) / line_step; */ // Allocate space for the output vector. Buffer must be freed by our caller. int maxpix = npix_per_line * max_nlines_in_sample; *sample = new float[maxpix]; // float* row = new float[width]; float* row = new float[wd]; // Extract the vector int npix = 0; float* op = *sample; // for (int line = (line_step + 1)/2; line < height; line+=line_step) { for (int line = (line_step + 1)/2 + params->ymin; line < params->ymax; line+=line_step) { // Load a row of values from the image // for (int i=0; i < width; i++) { for (int i=0; ixmin); T value = !byteswap_ ? *ptr : swap(ptr); if (hasblank_ && (value == blank_)) row[i] = NAN; else row[i] = hasscaling_ ? value * bscale_ + bzero_ : value; } int got = zSubSample(row, op, npix_per_line, col_step); op += got; npix += got; if (npix >= maxpix) break; } delete [] row; return npix; } template <> int FitsDatam::zSampleImage(float** sample, FitsBound* params) { // Compute the number of pixels each line will contribute to the sample, // and the subsampling step size for a line. The sampling grid must // span the whole line on a uniform grid. int wd = params->xmax - params->xmin; int opt_npix_per_line = ZSMAX(1, ZSMIN(wd, zLine_)); int col_step = ZSMAX(2, (wd + opt_npix_per_line-1) / opt_npix_per_line); int npix_per_line = ZSMAX(1, (wd + col_step-1) / col_step); /* int opt_npix_per_line = ZSMAX(1, ZSMIN(width, zLine)); int col_step = ZSMAX(2, (width + opt_npix_per_line-1) / opt_npix_per_line); int npix_per_line = ZSMAX(1, (width + col_step-1) / col_step); */ // Compute the number of lines to sample and the spacing between lines. // We must ensure that the image is adequately sampled despite its // size, hence there is a lower limit on the number of lines in the // sample. We also want to minimize the number of lines accessed when // accessing a large image, because each disk seek and read is ex- // pensive. The number of lines extracted will be roughly the sample // size divided by zLine, possibly more if the lines are very // short. int hd = params->ymax-params->ymin; int min_nlines_in_sample = ZSMAX(1, zSample_ / zLine_); int opt_nlines_in_sample = ZSMAX(min_nlines_in_sample, ZSMIN(hd, (zSample_ + npix_per_line-1) / npix_per_line)); int line_step = ZSMAX(2, hd / opt_nlines_in_sample); int max_nlines_in_sample = (hd + line_step-1) / line_step; /* int min_nlines_in_sample = ZSMAX(1, zSample / zLine); int opt_nlines_in_sample = ZSMAX(min_nlines_in_sample, ZSMIN(height, (zSample + npix_per_line-1) / npix_per_line)); int line_step = ZSMAX(2, height / opt_nlines_in_sample); int max_nlines_in_sample = (height + line_step-1) / line_step; */ // Allocate space for the output vector. Buffer must be freed by our caller. int maxpix = npix_per_line * max_nlines_in_sample; *sample = new float[maxpix]; // float* row = new float[width]; float* row = new float[wd]; // Extract the vector int npix = 0; float* op = *sample; // for (int line = (line_step + 1)/2; line < height; line+=line_step) { for (int line = (line_step + 1)/2 + params->ymin; line < params->ymax; line+=line_step) { // Load a row of values from the image // for (int i=0; i < width; i++) { for (int i=0; ixmin); float value = !byteswap_ ? *ptr : swap(ptr); if (isfinite(value)) row[i] = hasscaling_ ? value * bscale_ + bzero_ : value; else row[i] = NAN; } int got = zSubSample(row, op, npix_per_line, col_step); op += got; npix += got; if (npix >= maxpix) break; } delete [] row; return npix; } template <> int FitsDatam::zSampleImage(float** sample, FitsBound* params) { // Compute the number of pixels each line will contribute to the sample, // and the subsampling step size for a line. The sampling grid must // span the whole line on a uniform grid. int wd = params->xmax - params->xmin; int opt_npix_per_line = ZSMAX(1, ZSMIN(wd, zLine_)); int col_step = ZSMAX(2, (wd + opt_npix_per_line-1) / opt_npix_per_line); int npix_per_line = ZSMAX(1, (wd + col_step-1) / col_step); /* int opt_npix_per_line = ZSMAX(1, ZSMIN(width, zLine)); int col_step = ZSMAX(2, (width + opt_npix_per_line-1) / opt_npix_per_line); int npix_per_line = ZSMAX(1, (width + col_step-1) / col_step); */ // Compute the number of lines to sample and the spacing between lines. // We must ensure that the image is adequately sampled despite its // size, hence there is a lower limit on the number of lines in the // sample. We also want to minimize the number of lines accessed when // accessing a large image, because each disk seek and read is ex- // pensive. The number of lines extracted will be roughly the sample // size divided by zLine, possibly more if the lines are very // short. int hd = params->ymax-params->ymin; int min_nlines_in_sample = ZSMAX(1, zSample_ / zLine_); int opt_nlines_in_sample = ZSMAX(min_nlines_in_sample, ZSMIN(hd, (zSample_ + npix_per_line-1) / npix_per_line)); int line_step = ZSMAX(2, hd / opt_nlines_in_sample); int max_nlines_in_sample = (hd + line_step-1) / line_step; /* int min_nlines_in_sample = ZSMAX(1, zSample / zLine); int opt_nlines_in_sample = ZSMAX(min_nlines_in_sample, ZSMIN(height, (zSample + npix_per_line-1) / npix_per_line)); int line_step = ZSMAX(2, height / opt_nlines_in_sample); int max_nlines_in_sample = (height + line_step-1) / line_step; */ // Allocate space for the output vector. Buffer must be freed by our caller. int maxpix = npix_per_line * max_nlines_in_sample; *sample = new float[maxpix]; // float* row = new float[width]; float* row = new float[wd]; // Extract the vector int npix = 0; float* op = *sample; // for (int line = (line_step + 1)/2; line < height; line+=line_step) { for (int line = (line_step + 1)/2 + params->ymin; line < params->ymax; line+=line_step) { // Load a row of values from the image // for (int i=0; i < width; i++) { for (int i=0; ixmin); double value = !byteswap_ ? *ptr : swap(ptr); if (isfinite(value)) row[i] = hasscaling_ ? (float)value * bscale_ + bzero_ : (float)value; else row[i] = NAN; } int got = zSubSample(row, op, npix_per_line, col_step); op += got; npix += got; if (npix >= maxpix) break; } delete [] row; return npix; } // subSample -- Subsample an image line. Extract the first pixel and // every "step"th pixel thereafter for a total of npix pixels. int FitsData::zSubSample(float* a, float* b, int npix, int step) { if (step <= 1) step = 1; int got = 0; int ip = 0; for (int i=0; i 0) { double rowrat = sumx / sumxsqr; z0 = (sumz - rowrat * sumxz) / (ngoodpix - rowrat * sumx); dz = (sumxz - z0 * sumx) / sumxsqr; } if (ngoodpix >= last_ngoodpix || ngoodpix < minpix) break; } // Transform the line coefficients back to the X range [1:npix] *zstart = z0 - dz; *zslope = dz * xscale; delete [] flat; delete [] normx; delete [] badpix; return ngoodpix; } // flattenData -- Compute and subtract the fitted line from the data array, // returned the flattened data in FLAT. void FitsData::zFlattenData(float* sampleData, float* flat, float* x, int npix, float z0, float dz) { for (int i=0; i < npix; i++) flat[i] = sampleData[i] - (x[i] * dz + z0); } // computeSigma -- Compute the root mean square deviation from the // mean of a flattened array. Ignore rejected pixels. int FitsData::zComputeSigma(float* a, short* badpix, int npix, float* mean, float* sigma) { int ngoodpix = 0; double sum = 0.0; double sumsq = 0.0; // Accumulate sum and sum of squares for (int i=0; i < npix; i++) if (badpix[i] == GOOD_PIXEL) { float pixval = a[i]; ngoodpix = ngoodpix + 1; sum = sum + pixval; sumsq = sumsq + pixval * pixval; } // Compute mean and sigma switch (ngoodpix) { case 0: *mean = ZSINDEF; *sigma = ZSINDEF; break; case 1: *mean = sum; *sigma = ZSINDEF; break; default: *mean = sum / ngoodpix; double temp = sumsq / (ngoodpix-1) - (sum*sum) / (ngoodpix*(ngoodpix - 1)); if (temp < 0) // possible with roundoff error *sigma = 0.0; else *sigma = sqrt(temp); } return ngoodpix; } // rejectPixels -- Detect and reject pixels more than "threshold" greyscale // units from the fitted line. The residuals about the fitted line are given // by the "flat" array, while the raw data is in "data". Each time a pixel // is rejected subtract its contributions from the matrix sums and flag the // pixel as rejected. When a pixel is rejected reject its neighbors out to // a specified radius as well. This speeds up convergence considerably and // produces a more stringent rejection criteria which takes advantage of the // fact that bad pixels tend to be clumped. The number of pixels left in the // fit is returned as the function value. int FitsData::zRejectPixels(float* sampleData, float* flat, float *normx, short *badpix, int npix, double* sumxsqr, double* sumxz, double* sumx, double* sumz, float threshold, int ngrow) { int ngoodpix = npix; float lcut = -threshold; float hcut = threshold; for (int i=0; i < npix; i++) { if (badpix[i] == BAD_PIXEL) ngoodpix = ngoodpix - 1; else { float residual = flat[i]; if (residual < lcut || residual > hcut) { // Reject the pixel and its neighbors out to the growing // radius. We must be careful how we do this to avoid // directional effects. Do not turn off thresholding on // pixels in the forward direction; mark them for rejection // but do not reject until they have been thresholded. // If this is not done growing will not be symmetric. for (int j=ZSMAX(0,i-ngrow); j < ZSMIN(npix,i+ngrow); j++) { if (badpix[j] != BAD_PIXEL) { if (j <= i) { double x = normx[j]; double z = sampleData[j]; *sumxsqr = *sumxsqr - (x * x); *sumxz = *sumxz - z * x; *sumx = *sumx - x; *sumz = *sumz - z; badpix[j] = BAD_PIXEL; ngoodpix = ngoodpix - 1; } else badpix[j] = REJECT_PIXEL; } } } } } return ngoodpix; } template class FitsDatam; template class FitsDatam; template class FitsDatam; template class FitsDatam; template class FitsDatam; template class FitsDatam; template class FitsDatam; saods9/tksao/frame/fitsdata.h000644 000765 000000 00000010064 12705446247 016563 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsdata_h__ #define __fitsdata_h__ #include "base.h" #include "file.h" class ColorScale; class FitsFile; class FitsBound { public: int xmin; int xmax; int ymin; int ymax; public: FitsBound() {xmin= xmax= ymin= ymax= 0;} FitsBound(int x0, int y0, int x1, int y1) {xmin=x0; xmax=x1; ymin=y0; ymax=y1;} FitsBound(const FitsBound &bb) {xmin=bb.xmin; xmax=bb.xmax; ymin=bb.ymin; ymax=bb.ymax;} void set(int x0, int y0, int x1, int y1) {xmin=x0; xmax=x1; ymin=y0; ymax=y1;} }; ostream& operator<<(ostream&, const FitsBound&); class FitsData { protected: Tcl_Interp* interp_; long width_; long height_; char buf_[32]; int byteswap_; double bscale_; double bzero_; int hasscaling_; int blank_; int hasblank_; double min_; // bscale applied Vector minXY_; double max_; // bscale applied Vector maxXY_; double high_; // bscale applied double low_; // bscale applied float zHigh_; // bscale applied float zLow_; // bscale applied double aLow_; // bscale applied double aHigh_; // bscale applied double ulow_; // bscale applied double uhigh_; // bscale applied int scanValid_; int minmaxSample_; float zContrast_; int zSample_; int zLine_; int zscaleValid_; int autoCutValid_; float autoCutPer_; FrScale::ClipMode clipMode_; FrScale::MinMaxMode minmaxMode_; FrScale::SecMode secMode_; double datamin_; // bscale applied double datamax_; // bscale applied int hasdatamin_; double irafmin_; // bscale applied double irafmax_; // bscale applied int hasirafmin_; // zscale constants enum PixelType {GOOD_PIXEL, BAD_PIXEL, REJECT_PIXEL}; int zSubSample(float*, float*, int, int); int zFitLine(float*, int, float*, float*, float, int, int); void zFlattenData (float*, float*, float*, int npix, float, float dz); int zComputeSigma (float*, short*, int npix, float*, float*); int zRejectPixels (float*, float*, float*, short*, int, double*, double*, double*, double*, float, int); protected: void autoCut(FitsBound*); int calcIncr(); public: FitsData(FitsFile*, Tcl_Interp*); virtual ~FitsData(); virtual void* data() =0; virtual const char* getValue(const Vector&) =0; virtual float getValueFloat(const Vector&) =0; virtual double getValueDouble(const Vector&) =0; virtual int getValueMask(const Vector&) =0; virtual int getValueMask(double,double) =0; virtual float getValueFloat(long) =0; virtual double getValueDouble(long) =0; virtual int getValueMask(long) =0; double min(); const Vector& minXY() {return minXY_;} double max(); const Vector& maxXY() {return maxXY_;} const char* getMin(); const char* getMinX(); const char* getMinY(); const char* getMax(); const char* getMaxX(); const char* getMaxY(); const char* getLow(); const char* getHigh(); double low() {return low_;} double high() {return high_;} void setClip(double ll, double hh) {low_ =ll; high_ =hh;} virtual void updateClip(FrScale*, FitsBound*) =0; int hasDATAMIN() {return hasdatamin_;} int hasIRAFMIN() {return hasirafmin_;} virtual void hist(double*,int,double,double,FitsBound*) =0; }; template class FitsDatam : public FitsData { private: T* data_; void scan(FitsBound*); void output(ostringstream&, T); void zscale(FitsBound*); int zSampleImage(float**,FitsBound*); public: FitsDatam(FitsFile*, Tcl_Interp*); T swap(T*); void* data() {return data_;} const char* getValue(const Vector&); float getValueFloat(const Vector&); double getValueDouble(const Vector&); int getValueMask(const Vector&); int getValueMask(double, double); float getValueFloat(long i); double getValueDouble(long i); int getValueMask(long i); void updateClip(FrScale*, FitsBound*); void hist(double*, int, double, double, FitsBound*); }; #endif saods9/tksao/frame/fitsenvi.C000644 000765 000000 00000003130 12705446247 016542 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "fitsimage.h" #include "envi.h" void FitsImage::initENVI() { if (post_) delete post_; post_ = NULL; switch (fits_->pEncoding()) { case FitsFile::BSQ: // better not see this break; case FitsFile::BIL: switch (fits_->pBitpix()) { case 8: post_ = new FitsENVIBILm(fits_); break; case 16: post_ = new FitsENVIBILm(fits_); break; case -16: post_ = new FitsENVIBILm(fits_); break; case 32: post_ = new FitsENVIBILm(fits_); break; case 64: post_ = new FitsENVIBILm(fits_); break; case -32: post_ = new FitsENVIBILm(fits_); break; case -64: post_ = new FitsENVIBILm(fits_); break; } break; case FitsFile::BIP: switch (fits_->pBitpix()) { case 8: post_ = new FitsENVIBIPm(fits_); break; case 16: post_ = new FitsENVIBIPm(fits_); break; case -16: post_ = new FitsENVIBIPm(fits_); break; case 32: post_ = new FitsENVIBIPm(fits_); break; case 64: post_ = new FitsENVIBIPm(fits_); break; case -32: post_ = new FitsENVIBIPm(fits_); break; case -64: post_ = new FitsENVIBIPm(fits_); break; } break; default: // na break; } return; } saods9/tksao/frame/fitshealpix.C000644 000765 000000 00000003335 12705446247 017242 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "fitsimage.h" #include "hpx.h" void FitsImage::initHPX() { if (hpx_) delete hpx_; hpx_ = NULL; // make sure we have rows and cols FitsHead* head = fits_->head(); FitsTableHDU* hdu = NULL; if (head) { hdu = (FitsTableHDU*)(head->hdu()); if (!hdu->width() || !hdu->rows()) return; } // coordinate system identifier? FitsHPX::CoordSys coord = FitsHPX::UNKNOWN; if (fits_->pHPXSystem() >= 0) coord = (FitsHPX::CoordSys)fits_->pHPXSystem(); else { char* str = head->getString("COORDSYS"); if (str) { if (str[0] == 'G') coord = FitsHPX::GAL; else if (str[0] == 'E') coord = FitsHPX::ECL; else if (str[0] == 'C') coord = FitsHPX::EQU; else if (str[0] == 'Q') coord = FitsHPX::EQU; delete [] str; } } // Nested or ring order? FitsHPX::Order order = FitsHPX::RING; if (fits_->pHPXOrder() >=0) order = (FitsHPX::Order)fits_->pHPXOrder(); else { char* str = head->getString("ORDERING"); if (str) { if (str[0] == 'N') order = FitsHPX::NESTED; else if (str[0] == 'R') order = FitsHPX::RING; delete [] str; } } // Layout FitsHPX::Layout layout = FitsHPX::EQUATOR; if (fits_->pHPXLayout() >=0) layout = (FitsHPX::Layout)fits_->pHPXLayout(); // Col int col =0; if (fits_->pHPXColumn() >=0) col = fits_->pHPXColumn(); if (col<0) col =0; // Quad int quad = 0; if (fits_->pHPXQuad() >=0) quad = fits_->pHPXQuad(); if (quad<0 || quad>3) quad =0; hpx_ = new FitsHPX(fits_, order, coord, layout, col, quad); } saods9/tksao/frame/fitsimage.C000644 000765 000000 00000274742 12753116765 016710 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __WIN32 #include #endif #include "fitsimage.h" #include "framebase.h" #include "context.h" #include "mmap.h" #include "smmap.h" #include "mmapincr.h" #include "alloc.h" #include "allocgz.h" #include "channel.h" #include "share.h" #include "sshare.h" #include "socket.h" #include "socketgz.h" #include "var.h" #include "order.h" #include "iis.h" #include "hist.h" #include "compress.h" #include "analysis.h" #include "photo.h" #include "colorscale.h" // this is kluge to speed up doug minks wcssubs 'ksearch' routine extern "C" { FitsHead* wcshead = NULL; FitsHead* wcsprim = NULL; char* ksearchh(char*, char*); char* findit(char* cards, char* key) { char* rr = NULL; if (wcshead) { if ((rr = wcshead->find(key))) return rr; if (wcsprim) if ((rr = wcsprim->find(key))) return rr; return NULL; } else return ksearchh(cards, key); } }; WCSx::WCSx() { for (int ii=0; iifitsFile(), hdr, data, sz); process(NULL,id); rootBaseFileName = dupstr(fi->rootBaseFileName); fullBaseFileName = dupstr(fi->fullBaseFileName); iisFileName = dupstr(fi->fullBaseFileName); } // Fits Next FitsImageFitsNextAlloc::FitsImageFitsNextAlloc(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsFitsNextAlloc(prev); process(fn,id); } FitsImageFitsNextAllocGZ::FitsImageFitsNextAllocGZ(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsFitsNextAllocGZ(prev); process(fn,id); } FitsImageFitsNextChannel::FitsImageFitsNextChannel(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsFitsNextChannel(prev); process(fn,id); } FitsImageFitsNextMMap::FitsImageFitsNextMMap(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsFitsNextMMap(prev); process(fn,id); } FitsImageFitsNextSMMap::FitsImageFitsNextSMMap(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsFitsNextSMMap(prev); process(fn,id); } FitsImageFitsNextMMapIncr::FitsImageFitsNextMMapIncr(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsFitsNextMMapIncr(prev); process(fn,id); } FitsImageFitsNextShare::FitsImageFitsNextShare(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsFitsNextShare(prev); process(fn,id); } FitsImageFitsNextSShare::FitsImageFitsNextSShare(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsFitsNextSShare(prev); process(fn,id); } FitsImageFitsNextSocket::FitsImageFitsNextSocket(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsFitsNextSocket(prev); process(fn,id); } FitsImageFitsNextSocketGZ::FitsImageFitsNextSocketGZ(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsFitsNextSocketGZ(prev); process(fn,id); } FitsImageFitsNextVar::FitsImageFitsNextVar(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsFitsNextVar(prev); process(fn,id); } FitsImageFitsNextHist::FitsImageFitsNextHist(Context* cx, Tcl_Interp* pp, FitsImage* fi, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsHistNext(prev); process(NULL,id); fits_->setpFilter(fi->getHistFilter()); fits_->setpBinX(fi->getHistX()); fits_->setpBinY(fi->getHistY()); fits_->setpBinZ(fi->getHistZ()); rootBaseFileName = dupstr(fi->rootBaseFileName); fullBaseFileName = dupstr(fi->fullBaseFileName); iisFileName = dupstr(fi->fullBaseFileName); } FitsImageFitsNextPost::FitsImageFitsNextPost(Context* cx, Tcl_Interp* pp, FitsImage* fi, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsPostNext(prev); process(NULL,id); rootBaseFileName = dupstr(fi->rootBaseFileName); fullBaseFileName = dupstr(fi->fullBaseFileName); iisFileName = dupstr(fi->fullBaseFileName); } FitsImageFitsNextOrder::FitsImageFitsNextOrder(Context* cx, Tcl_Interp* pp, FitsImage* fi, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsOrderNext(prev); process(NULL,id); rootBaseFileName = dupstr(fi->rootBaseFileName); fullBaseFileName = dupstr(fi->fullBaseFileName); iisFileName = dupstr(fi->fullBaseFileName); } // Array FitsImageArrAlloc::FitsImageArrAlloc(Context* cx, Tcl_Interp* pp, const char* ch, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsArrAlloc(ch, flush); process(fn,id); } FitsImageArrAllocGZ::FitsImageArrAllocGZ(Context* cx, Tcl_Interp* pp, const char* ch, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsArrAllocGZ(ch, flush); process(fn,id); } FitsImageArrChannel::FitsImageArrChannel(Context* cx, Tcl_Interp* pp, const char* ch, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsArrChannel(pp, ch, fn, flush); process(fn,id); } FitsImageArrMMap::FitsImageArrMMap(Context* cx, Tcl_Interp* pp, const char* fn, int id) : FitsImage(cx, pp) { fits_ = new FitsArrMMap(fn); process(fn,id); } FitsImageArrMMapIncr::FitsImageArrMMapIncr(Context* cx, Tcl_Interp* pp, const char* fn, int id) : FitsImage(cx, pp) { fits_ = new FitsArrMMapIncr(fn); process(fn,id); } FitsImageArrShare::FitsImageArrShare(Context* cx, Tcl_Interp* pp, Base::ShmType type, int sid, const char* fn, int id) : FitsImage(cx, pp) { switch (type) { case Base::SHMID: fits_ = new FitsArrShareID(sid, fn); break; case Base::KEY: fits_ = new FitsArrShareKey(sid, fn); break; } process(fn,id); } FitsImageArrSocket::FitsImageArrSocket(Context* cx, Tcl_Interp* pp, int s, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsArrSocket(s, fn, flush); process(fn,id); } FitsImageArrSocketGZ::FitsImageArrSocketGZ(Context* cx, Tcl_Interp* pp, int s, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsArrSocketGZ(s, fn, flush); process(fn,id); } FitsImageArrVar::FitsImageArrVar(Context* cx, Tcl_Interp* pp, const char* var, const char* fn, int id) : FitsImage(cx, pp) { fits_ = new FitsArrVar(pp, var, fn); process(fn,id); } // ENVI FitsImageENVISMMap::FitsImageENVISMMap(Context* cx, Tcl_Interp* pp, const char* hdr, const char* fn, int id) : FitsImage(cx, pp) { fits_ = new FitsENVISMMap(hdr,fn); process(fn,id); } // NRRD FitsImageNRRDAlloc::FitsImageNRRDAlloc(Context* cx, Tcl_Interp* pp, const char* ch, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsNRRDAlloc(ch, flush); process(fn,id); } FitsImageNRRDChannel::FitsImageNRRDChannel(Context* cx, Tcl_Interp* pp, const char* ch, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsNRRDChannel(pp, ch, fn, flush); process(fn,id); } FitsImageNRRDMMap::FitsImageNRRDMMap(Context* cx, Tcl_Interp* pp, const char* fn, int id) : FitsImage(cx, pp) { fits_ = new FitsNRRDMMap(fn); process(fn,id); } FitsImageNRRDShare::FitsImageNRRDShare(Context* cx, Tcl_Interp* pp, Base::ShmType type, int sid, const char* fn, int id) : FitsImage(cx, pp) { switch (type) { case Base::SHMID: fits_ = new FitsNRRDShareID(sid, fn); break; case Base::KEY: fits_ = new FitsNRRDShareKey(sid, fn); break; } process(fn,id); } FitsImageNRRDSocket::FitsImageNRRDSocket(Context* cx, Tcl_Interp* pp, int s, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsNRRDSocket(s, fn, flush); process(fn,id); } FitsImageNRRDVar::FitsImageNRRDVar(Context* cx, Tcl_Interp* pp, const char* var, const char* fn, int id) : FitsImage(cx, pp) { fits_ = new FitsNRRDVar(pp, var, fn); process(fn,id); } // Photo FitsImagePhoto::FitsImagePhoto(Context* cx, Tcl_Interp* pp, const char* ph, const char* fn, int id) : FitsImage(cx, pp) { fits_ = new FitsPhoto(pp, ph); process(fn,id); } FitsImagePhotoCube::FitsImagePhotoCube(Context* cx, Tcl_Interp* pp, const char* ph, const char* fn, int id) : FitsImage(cx, pp) { fits_ = new FitsPhotoCube(pp, ph); process(fn,id); } FitsImagePhotoCubeNext::FitsImagePhotoCubeNext(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsPhotoCubeNext(prev); process(fn,id); } // Mosaic FitsImageMosaicAlloc::FitsImageMosaicAlloc(Context* cx, Tcl_Interp* pp, const char* ch, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicAlloc(ch, flush); process(fn,id); } FitsImageMosaicAllocGZ::FitsImageMosaicAllocGZ(Context* cx, Tcl_Interp* pp, const char* ch, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicAllocGZ(ch, flush); process(fn,id); } FitsImageMosaicChannel::FitsImageMosaicChannel(Context* cx, Tcl_Interp* pp, const char* ch, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicChannel(pp, ch, flush); process(fn,id); } FitsImageMosaicMMap::FitsImageMosaicMMap(Context* cx, Tcl_Interp* pp, const char* fn, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicMMap(fn); process(fn,id); } FitsImageMosaicMMapIncr::FitsImageMosaicMMapIncr(Context* cx, Tcl_Interp* pp, const char* fn, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicMMapIncr(fn); process(fn,id); } FitsImageMosaicShare::FitsImageMosaicShare(Context* cx, Tcl_Interp* pp, Base::ShmType type, int sid, const char* fn, int id) : FitsImage(cx, pp) { switch (type) { case Base::SHMID: fits_ = new FitsMosaicShareID(sid); break; case Base::KEY: fits_ = new FitsMosaicShareKey(sid); break; } process(fn,id); } FitsImageMosaicSocket::FitsImageMosaicSocket(Context* cx, Tcl_Interp* pp, int s, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicSocket(s, flush); process(fn,id); } FitsImageMosaicSocketGZ::FitsImageMosaicSocketGZ(Context* cx, Tcl_Interp* pp, int s, const char* fn, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicSocketGZ(s, flush); process(fn,id); } FitsImageMosaicVar::FitsImageMosaicVar(Context* cx, Tcl_Interp* pp, const char* var, const char* fn, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicVar(pp, var, fn); process(fn,id); } // Mosaic Next FitsImageMosaicNextAlloc::FitsImageMosaicNextAlloc(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicNextAlloc(prev, flush); process(fn,id); } FitsImageMosaicNextAllocGZ::FitsImageMosaicNextAllocGZ(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicNextAllocGZ(prev, flush); process(fn,id); } FitsImageMosaicNextChannel::FitsImageMosaicNextChannel(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicNextChannel(prev, flush); process(fn,id); } FitsImageMosaicNextMMap::FitsImageMosaicNextMMap(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicNextMMap(prev); process(fn,id); } FitsImageMosaicNextMMapIncr::FitsImageMosaicNextMMapIncr(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicNextMMapIncr(prev); process(fn,id); } FitsImageMosaicNextShare::FitsImageMosaicNextShare(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicNextShare(prev); process(fn,id); } FitsImageMosaicNextSocket::FitsImageMosaicNextSocket(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicNextSocket(prev, flush); process(fn,id); } FitsImageMosaicNextSocketGZ::FitsImageMosaicNextSocketGZ(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, FitsFile::FlushMode flush, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicNextSocketGZ(prev, flush); process(fn,id); } FitsImageMosaicNextVar::FitsImageMosaicNextVar(Context* cx, Tcl_Interp* pp, const char* fn, FitsFile* prev, int id) : FitsImage(cx, pp) { fits_ = new FitsMosaicNextVar(prev); process(fn,id); } // IIS FitsImageIIS::FitsImageIIS(Context* cx, Tcl_Interp* pp, int w, int h) : FitsImage(cx, pp) { fits_ = new FitsIIS(w, h); process("",1); iisMode_ = 1; } void FitsImageIIS::iisErase() { ((FitsIIS*)fits_)->erase(); } char* FitsImageIIS::iisGet(int xx, int yy, int dx, int dy) { return ((FitsIIS*)fits_)->get(xx, yy, dx, dy); } void FitsImageIIS::iisSet(const char* src, int xx, int yy, int dx, int dy) { ((FitsIIS*)fits_)->set(src, xx, yy, dx, dy); } void FitsImageIIS::iisWCS(const Matrix& mm, const Vector& z, int zt) { Matrix& mx = (Matrix&)mm; double sx = mx[0][0]; double sy = mx[1][1]; double tx = mx[2][0]; double ty = mx[2][1]; imageToPhysical = Translate(0,-height()/2.) * FlipY() * Translate(0,height()/2.) * Translate(-1,0) * Scale(sx,sy) * Translate(tx,ty); physicalToImage = imageToPhysical.invert(); iisz_ = z; iiszt_ = zt; } // FitsImage void FitsImage::altWCS(istream& str) { FitsHead* hh = parseWCS(str); // Process OBJECT keyword if (objectKeyword_) delete [] objectKeyword_; objectKeyword_ = hh->getString("OBJECT"); // Process WCS keywords if (altHeader_) delete altHeader_; altHeader_ = hh; initWCS(); } void FitsImage::appendWCS(istream& str) { FitsHead* hh = parseWCS(str); // process OBJECT keyword char* obj = hh->getString("OBJECT"); if (obj) { if (objectKeyword_) delete [] objectKeyword_; objectKeyword_ = obj; } // Process WCS keywords FitsHead* hd = image_->head(); // append wcs keywords to the end of the header int ll = hd->headbytes()+hh->headbytes(); char* cards = new char[ll]; // copy default wcs memcpy(cards, hd->cards(), hd->headbytes()); // find first END and zero out for (int i=0; iheadbytes(); i+=80) if (!strncmp(cards+i,"END",3)) { memcpy(cards+i, " ",3); break; } // copy appended wcs memcpy(cards+hd->headbytes(), hh->cards(), hh->headbytes()); delete hh; if (wcsHeader_) delete wcsHeader_; wcsHeader_ = new FitsHead(cards,ll,FitsHead::ALLOC); initWCS(); } char* FitsImage::display(FitsHead* hd) { int size = hd->ncard() * (FTY_CARDLEN+1); char* lbuf = new char[size+1]; char* lptr = lbuf; char* cptr = hd->cards(); for (int i=0; incard(); i++,cptr+=FTY_CARDLEN) { memcpy(lptr, cptr, FTY_CARDLEN); lptr+=FTY_CARDLEN; *(lptr++) = '\n'; } lbuf[size] = '\0'; return lbuf; } char* FitsImage::displayHeader() { Vector blockFactor = context_->blockFactor(); if (blockFactor[0] != 1 && blockFactor[1] != 1) return display(image_->head()); if (DebugBin || DebugCompress) return display(image_->head()); else return display(fits_->head()); } char* FitsImage::displayPrimary() { return display(fits_->primary()); } char* FitsImage::displayWCS() { if (wcsHeader_) return display(wcsHeader_); else if (altHeader_) return display(altHeader_); else return display(image_->head()); } int FitsImage::findKeyword(const char* key) { return fits_->find(key); } FitsBound* FitsImage::getDataParams(FrScale::SecMode which) { switch (which) { case FrScale::IMGSEC: return &iparams; case FrScale::DATASEC: return &dparams; case FrScale::CROPSEC: return &cparams; } // just to satisfy the compiler return &iparams; } const char* FitsImage::getValue(const Vector& v) { if (!isIIS()) return data_->getValue(v); else { double val = data_->getValueDouble(v); ostringstream str; if (val == 0) str << ends; else if (val == 1) str << '<' << iisz_[0] << ends; else if (val == IISMAX) str << '>' << iisz_[1] << ends; else if (val > IISMAX) str << ends; else str << ((val-1) * (iisz_[1]-iisz_[0]))/(IISMAX-1) + iisz_[0] << ends; memcpy(buf,str.str().c_str(), str.str().length()); return buf; } } void FitsImage::iisSetFileName(const char* fn) { if (iisFileName) delete [] iisFileName; iisFileName = dupstr(fn); } void FitsImage::initWCS() { // free up wcs and ast arrays if (wcs_) { for (int ii=0; iishareWCS()) { FitsImage* ptr = context_->fits; while (ptr) { if (ptr == this) break; FitsImage* sptr = ptr->nextSlice(); while (sptr) { if (sptr == this) { for (int ii=0; iiwcs_[ii]; for (int ii=0; iiwcsx_[ii]; for (int ii=0; iiast_[ii]; initWCSPhysical(); manageWCS_ =0; return; } sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } // WCSx FitsHead* hd =NULL; FitsHead* prim =NULL; if (wcsHeader_) hd = wcsHeader_; else if (altHeader_) hd = altHeader_; else { hd = image_->head(); prim = image_->primary() && image_->inherit() ? image_->primary() : NULL; } // wcsinit is sloooowwww! so try to figure it out first // look first for default WCS. Let wcsinit figure it out since there can // be many different non-standard wcs's present wcshead = hd; wcsprim = prim; wcs_[0] = wcsinit(hd->cards()); wcshead = NULL; wcsprim = NULL; // now look for WCSA - WCSZ // we can take a short cut here, since only valid FITS wcs's are available for (int ii=1; iifind(str)) { wcshead = hd; wcsprim = prim; wcs_[ii] = wcsinitc(hd->cards(),str+6); wcshead = NULL; wcsprim = NULL; } } // finally, look for AST def if (!wcs_[0]) { char str[] = "BEGAST_A"; if (hd->find(str)) { wcs_[0] = wcskinit(100, 100, (char*)"AST--WCS", (char*)"AST--WCS", 0, 0, 0, 0, NULL, 1, 1, 0, 2000, 0); wcs_[0]->longpole = 999; wcs_[0]->latpole = 999; } } // AST for (int ii=0; iifind("WCSDEP")) { char* str = hd->getString("WCSDEP"); if (str) { for (int ii=1; iiwcsname) { if (!strncmp(str,wcs_[ii]->wcsname,strlen(wcs_[ii]->wcsname))) { if (ast_[0] && ast_[ii]) { AstFrameSet* dep = (AstFrameSet*)astCopy(ast_[ii]); astInvert(ast_[0]); astAddFrame(dep,2,astUnitMap(2,""),ast_[0]); astSetI(dep,"current",4); astAnnul(ast_[0]); ast_[0] = dep; } } } } } delete [] str; } } // WCSx char scrpix[] = "CRPIX "; char scrval[] = "CRVAL "; char scd[] = "CD _ "; char spc[] = "PC _ "; char scdelt[] = "CDELT "; for (int ii=0; iifind(scrpix) && hd->find(scrval)) { if (!wcsx_[ii]) wcsx_[ii] = new WCSx(); wcsx_[ii]->crpix[jj] = hd->getReal(scrpix,0); wcsx_[ii]->crval[jj] = hd->getReal(scrval,0); float cd = hd->getReal(scd,0); float pc = hd->getReal(spc,0); float cdelt = hd->getReal(scdelt,0); if (cd) wcsx_[ii]->cd[jj] = cd; else if (pc && cdelt) wcsx_[ii]->cd[jj] = pc * cdelt; else if (cdelt) wcsx_[ii]->cd[jj] = cdelt; else wcsx_[ii]->cd[jj] = 1; } } } initWCSPhysical(); if (DebugWCS) { for (int ii=0; iicd[jj]) { cerr << "wcsx" << (char)(!ii ? ' ' : '@'+ii) << "[" << ii << "]->crpix[" << jj << "]=" << wcsx_[ii]->crpix[jj] << endl; cerr << "wcsx" << (char)(!ii ? ' ' : '@'+ii) << "[" << ii << "]->crval[" << jj << "]=" << wcsx_[ii]->crval[jj] << endl; cerr << "wcsx" << (char)(!ii ? ' ' : '@'+ii) << "[" << ii << "]->cd[" << jj << "]=" << wcsx_[ii]->cd[jj] << endl; } } } } } } void FitsImage::initWCSPhysical() { // now see if we have a 'physical' wcs, if so, set LTMV keywords keyLTMV =0; for (int ii=1; iiwcsname && !strncmp(wcs_[ii]->wcsname, "PHYSICAL", 8)) { keyLTMV = 1; double ltm11 = wcs_[ii]->cd[0] != 0 ? 1/wcs_[ii]->cd[0] : 0; double ltm12 = wcs_[ii]->cd[1] != 0 ? 1/wcs_[ii]->cd[1] : 0; double ltm21 = wcs_[ii]->cd[2] != 0 ? 1/wcs_[ii]->cd[2] : 0; double ltm22 = wcs_[ii]->cd[3] != 0 ? 1/wcs_[ii]->cd[3] : 0; double ltv1 = wcs_[ii]->crpix[0] - wcs_[ii]->crval[0]*ltm11 - wcs_[ii]->crval[1]*ltm21; double ltv2 = wcs_[ii]->crpix[1] - wcs_[ii]->crval[0]*ltm12 - wcs_[ii]->crval[1]*ltm22; physicalToImage = Matrix(ltm11, ltm12, ltm21, ltm22, ltv1, ltv2); imageToPhysical = physicalToImage.invert(); } } } void FitsImage::initWCS0(const Vector& pix) { int ii = Coord::WCS0-Coord::WCS; if (wcs_[ii]) wcsfree(wcs_[ii]); wcs_[ii] = NULL; if (wcs_[0]) { Vector cc = mapFromRef(pix, Coord::IMAGE, Coord::FK5); WorldCoor* ww = wcs_[0]; wcs_[ii] = wcskinit(ww->nxpix, ww->nypix, (char*)"RA---TAN", (char*)"DEC--TAN", cc[0], cc[1], 0, 0, ww->cd, 0, 0, 0, 2000, 2000); wcs_[ii]->longpole = 999; wcs_[ii]->latpole = 999; if (ast_[ii]) astAnnul(ast_[ii]); ast_[ii] = NULL; astinit0(ii); if (DebugWCS) { if (wcs_[ii]) wcsShow(wcs_[ii]); } } } void FitsImage::load() { if (post_) base_ = post_; else if (hpx_) base_ = hpx_; else if (hist_) base_ = hist_; else base_ = fits_; if (basedata_) delete basedata_; switch (base_->head()->bitpix()) { case 8: basedata_ = new FitsDatam(base_, interp_); break; case 16: basedata_ = new FitsDatam(base_, interp_); break; case -16: basedata_ = new FitsDatam(base_, interp_); break; case 32: basedata_ = new FitsDatam(base_, interp_); break; case 64: basedata_ = new FitsDatam(base_, interp_); break; case -32: basedata_ = new FitsDatam(base_, interp_); break; case -64: basedata_ = new FitsDatam(base_, interp_); break; } // block block_ = base_; blockdata_ = basedata_; // analysis analysis_ = block_; analysisdata_ = blockdata_; // image image_ = analysis_; data_ = analysisdata_; } void FitsImage::match(const char* xxname1, const char* yyname1, Coord::CoordSystem sys1, Coord::SkyFrame sky1, const char* xxname2, const char* yyname2, Coord::CoordSystem sys2, Coord::SkyFrame sky2, double rad, Coord::CoordSystem sys, Coord::SkyDist dist, const char* rrname) { astClearStatus; // get lists Tcl_Obj* listxx1 = Tcl_GetVar2Ex(interp_, xxname1, NULL, TCL_LEAVE_ERR_MSG); Tcl_Obj* listyy1 = Tcl_GetVar2Ex(interp_, yyname1, NULL, TCL_LEAVE_ERR_MSG); Tcl_Obj* listxx2 = Tcl_GetVar2Ex(interp_, xxname2, NULL, TCL_LEAVE_ERR_MSG); Tcl_Obj* listyy2 = Tcl_GetVar2Ex(interp_, yyname2, NULL, TCL_LEAVE_ERR_MSG); // get objects int nxx1; Tcl_Obj **objxx1; Tcl_ListObjGetElements(interp_, listxx1, &nxx1, &objxx1); int nyy1; Tcl_Obj **objyy1; Tcl_ListObjGetElements(interp_, listyy1, &nyy1, &objyy1); int nxx2; Tcl_Obj **objxx2; Tcl_ListObjGetElements(interp_, listxx2, &nxx2, &objxx2); int nyy2; Tcl_Obj **objyy2; Tcl_ListObjGetElements(interp_, listyy2, &nyy2, &objyy2); // sanity check if (nxx1 != nyy1 || nxx2 != nyy2) return; // get doubles double* ixx1 = new double[nxx1]; for (int ii=0 ; ii=0 && ast_ && ast_[ss])) return; if (astIsASkyFrame(astGetFrame(ast_[0], AST__CURRENT))) { setAstSkyFrame(ast_[ss],sky1); for (int ii=0; ii=0 && ast_ && ast_[ss])) return; if (astIsASkyFrame(astGetFrame(ast_[ss], AST__CURRENT))) { setAstSkyFrame(ast_[ss],sky2); for (int ii=0; iihead(); FitsHead* rr = new FitsHead(hd->naxis(0), hd->naxis(1), hd->naxis(2), hd->bitpix()); // this works for both terminated (\n) and non-terminated (fits) headers while (!str.eof()) { char buf[256]; str.get(buf,80,'\n'); if (strlen(buf) > 0) { // check for blank lines if (*buf == ' ') break; string x(buf); istringstream sstr(x); char keyword[32]; sstr >> keyword; if (strchr(buf,'=')) { char dummy; sstr >> dummy; } if (strchr(buf,'\'')) { char val[64]; char* ss = strchr(buf,'\'')+1; char* ee = strrchr(buf,'\''); int ll = ee-ss; if (ll<0 || ll>63) ll =0; strncpy(val,ss,ll); val[ll] = '\0'; rr->appendString(keyword, val, ""); } else { double val; sstr >> val; rr->appendReal(keyword, val, 15, ""); } if (strlen(buf) <= 80) { // eat the \n char b; str.get(b); } } else break; } return rr; } void FitsImage::process(const char* fn, int id) { if (!fits_->isValid()) { reset(); return; } if (fits_->isImage()) { switch (fits_->pEncoding()) { case FitsFile::RAW: case FitsFile::BSQ: break; case FitsFile::GZIP: initNRRD(); if (!post_ || !post_->isValid()) { reset(); return; } break; case FitsFile::BIL: case FitsFile::BIP: initENVI(); if (!post_ || !post_->isValid()) { reset(); return; } break; default: reset(); return; } load(); } else if (fits_->isBinTable()) { // Compress if (fits_->find("ZIMAGE")) { initCompress(); if (!post_ || !post_->isValid()) { reset(); return; } load(); } // HEALPIX else if ((fits_->find("PIXTYPE") && (!strncmp(fits_->getString("PIXTYPE"),"HEALPIX",4))) || fits_->find("NSIDE")) { initHPX(); if (!hpx_ || !hpx_->isValid()) { reset(); return; } load(); } else { // Bintable initBin(); if (!hist_ || !hist_->isValid()) { reset(); return; } } } else if (fits_->isAsciiTable()) { // HEALPIX if (fits_->find("NSIDE")) { initHPX(); if (!hpx_ || !hpx_->isValid()) { reset(); return; } load(); } } // set slice address for (int ii=1; iifind("LTM1_1") || image_->find("LTM1_2") || image_->find("LTM2_1") || image_->find("LTM2_2") || image_->find("LTV1") || image_->find("LTV2")) keyLTMV = 1; double ltm11 = image_->getReal("LTM1_1", 1); double ltm12 = image_->getReal("LTM1_2", 0); double ltm21 = image_->getReal("LTM2_1", 0); double ltm22 = image_->getReal("LTM2_2", 1); double ltv1 = image_->getReal("LTV1", 0); double ltv2 = image_->getReal("LTV2", 0); physicalToImage = Matrix(ltm11, ltm12, ltm21, ltm22, ltv1, ltv2); imageToPhysical = physicalToImage.invert(); } // CDD to Detector (DTM/DTV keywords) keyDTMV =0; if (image_->find("DTM1_1") || image_->find("DTM1_2") || image_->find("DTM2_1") || image_->find("DTM2_2") || image_->find("DTV1") || image_->find("DTV2")) keyDTMV = 1; double dtm11 = image_->getReal("DTM1_1", 1); double dtm12 = image_->getReal("DTM1_2", 0); double dtm21 = image_->getReal("DTM2_1", 0); double dtm22 = image_->getReal("DTM2_2", 1); double dtv1 = image_->getReal("DTV1", 0); double dtv2 = image_->getReal("DTV2", 0); physicalToDetector = Matrix(dtm11, dtm12, dtm21, dtm22, dtv1, dtv2); detectorToPhysical = physicalToDetector.invert(); // Physical to Amplifier (ATM/ATV keywords) keyATMV =0; if (image_->find("ATM1_1") || image_->find("ATM1_2") || image_->find("ATM2_1") || image_->find("ATM2_2") || image_->find("ATV1") || image_->find("ATV2")) keyATMV = 1; double atm11 = image_->getReal("ATM1_1", 1); double atm12 = image_->getReal("ATM1_2", 0); double atm21 = image_->getReal("ATM2_1", 0); double atm22 = image_->getReal("ATM2_2", 1); double atv1 = image_->getReal("ATV1", 0); double atv2 = image_->getReal("ATV2", 0); physicalToAmplifier = Matrix(atm11, atm12, atm21, atm22, atv1, atv2); amplifierToPhysical = physicalToAmplifier.invert(); if (DebugMosaic) { cerr << endl; cerr << "ATM/V: " << physicalToAmplifier << endl; cerr << "ATM/V-1: " << amplifierToPhysical << endl; cerr << "DTM/V: " << physicalToDetector << endl; cerr << "DTM/V-1: " << detectorToPhysical << endl; cerr << "LTM/V: " << physicalToImage << endl; cerr << "LTM/V-1: " << imageToPhysical << endl; } /* // Radio data? char* bunit = image_->getString("BUNIT"); double cdelt1 = fabs(image_->getReal("CDELT1",0)); char* cunit1 = image_->getString("CUNIT1"); double cdelt2 = fabs(image_->getReal("CDELT2",0)); char* cunit2 = image_->getString("CUNIT2"); double bmaj = image_->getReal("BMAJ",0); double bmin = image_->getReal("BMIN",0); // ok we have a radio map #define GFACTOR (2.0*sqrt(2.0*log(2.0))) if (!strncmp(bunit,"JY/BEAM",7) && cdelt1 && cdelt2 && bmaj && bmin) { // convert from deg to arcsec? cdelt1 *= 3600; cdelt2 *= 3600; bmaj *= 3600; bmin *= 3600; jyBeam_ = (2*M_PI*bmaj*bmin)/(GFACTOR*GFACTOR*cdelt1*cdelt2); } if (bunit) delete [] bunit; if (cunit1) delete [] cunit1; if (cunit2) delete [] cunit2; */ } void FitsImage::processKeywordsParams() { // iparams is a BBOX in DATA coords 0-n iparams.set(0, 0, width(), height()); { char* datstr = image_->getString("DATASEC"); // default Vector v1(1,1); Vector v2(size()); keyDATASEC =0; if (datstr && *datstr && parseSection(datstr,&v1,&v2)) { // additional check if (v1[0]<1 || v1[1]<1 || v1[1]>width() || v2[1]>height() || v1[0]>v2[0] || v1[1]>v2[1]) { // default v1 = Vector(1,1); v2 = Vector(size()); keyDATASEC = 0; } else keyDATASEC = 1; } // dparams is a BBOX in DATA coords 0-n datasec = BBox(v1,v2); v1 -= Vector(1,1); dparams.set(v1[0],v1[1],v2[0],v2[1]); if (datstr) delete [] datstr; } // DEBUG if (DebugCrop) { cerr << "iparams " << iparams << endl; cerr << "dparams " << dparams << endl; } } void FitsImage::processKeywordsFitsSection() { Vector ll(dparams.xmin,dparams.ymin); Vector ur(dparams.xmax,dparams.ymax); if (fits_->pcoord() && fits_->pxvalid() && fits_->pyvalid()) { ll[0] = fits_->pxmin(); ur[0] = fits_->pxmax(); ll[1] = fits_->pymin(); ur[1] = fits_->pymax(); ll = ll*physicalToImage*Translate(-1,-1); ur = ur*physicalToImage; context_->setSecMode(FrScale::CROPSEC); } if (!fits_->pcoord() && fits_->pxvalid()) { ll[0] = fits_->pxmin()-1; ur[0] = fits_->pxmax(); context_->setSecMode(FrScale::CROPSEC); } if (!fits_->pcoord() && fits_->pyvalid()) { ll[1] = fits_->pymin()-1; ur[1] = fits_->pymax(); context_->setSecMode(FrScale::CROPSEC); } // params is a BBOX in DATA coords 0-n setCropParams(ll,ur,0); // DEBUG if (DebugCrop) cerr << "cparams " << cparams << endl; if (fits_->pzvalid()) { int zmin = fits_->pzmin()-1; int zmax = fits_->pzmax(); context_->setSecMode(FrScale::CROPSEC); context_->setCrop3dParams(zmin,zmax); } } int FitsImage::processKeywordsIRAF(FitsImage* fits) { // DETSEC Coord::Orientation orientation = Coord::NORMAL; char* detstr = image_->getString("DETSEC"); Vector dv1,dv2; if (!(detstr && *detstr && parseSection(detstr,&dv1,&dv2))) { if (detstr) delete [] detstr; return 0; } delete [] detstr; BBox detsec = BBox(dv1,dv2); int xx = (dv1[0] < dv2[0]); int yy = (dv1[1] < dv2[1]); if (xx && yy) orientation = Coord::NORMAL; else if (!xx && yy) orientation = Coord::XX; else if (!xx && !yy) orientation = Coord::XY; else if (xx && !yy) orientation = Coord::YY; // DETSIZE char* sizestr = image_->getString("DETSIZE"); Vector sv1(1,1); Vector sv2(10000,10000); if (sizestr && *sizestr) { if (!(parseSection(sizestr,&sv1,&sv2))) { delete [] sizestr; return 0; } } if (sizestr) delete [] sizestr; BBox detsize = BBox(sv1,sv2); // CCDSUM Vector ccdsum(1,1); char* ccdstr = image_->getString("CCDSUM"); if (ccdstr && *ccdstr) { double Ns, Np, Ns1, Np1; string x(ccdstr); istringstream str(x); str >> Ns >> Np >> Ns1 >> Np1; ccdsum = Vector(1/Ns, 1/Np); } if (ccdstr) delete [] ccdstr; // origin Vector origin = detsec.ll * Scale(ccdsum) * Translate(-datasec.ll); // matrix // if the segment is flipped, we can have a discontinuity at // the edges, due to round off errors, so we 'nudge' it Matrix flip; switch (orientation) { case Coord::NORMAL: break; case Coord::XX: flip = FlipX(); break; case Coord::YY: flip = FlipY(); break; case Coord::XY: flip = FlipXY(); break; } // internal flip Matrix mflip; switch (context_->IRAFOrientation(orientation)) { case Coord::NORMAL: break; case Coord::XX: mflip = FlipX(); break; case Coord::YY: mflip = FlipY(); break; case Coord::XY: mflip = FlipXY(); break; } Vector center = datasec.center() * imageToData; Vector mcenter = detsize.center() * imageToData * Scale(ccdsum); wcsToRef_ = Translate(-center) * flip * Translate(center) * Translate(origin) * Translate(-mcenter) * mflip * Translate(mcenter); // we do this to shift the origin to the middle of the image to match // the wcs case. Needed by imageBBox() // first? reset wcsToRef if (fits == this) { irafToRef = wcsToRef_.invert(); wcsToRef_ = Matrix(); } else wcsToRef_ *= fits->irafToRef; if (DebugMosaic) { cerr << "ProcessKeywordsIRAF" << endl << " datasec: " << datasec << endl << " ccdsum : " << ccdsum << endl << " detsize: " << detsize << endl << " detsec : " << detsec << endl << " matrix : " << wcsToRef_ << endl; } return 1; } void FitsImage::replaceWCS(istream& str) { FitsHead* hh = parseWCS(str); // Process OBJECT keyword if (objectKeyword_) delete [] objectKeyword_; objectKeyword_ = hh->getString("OBJECT"); // Process WCS keywords if (wcsHeader_) delete wcsHeader_; wcsHeader_ = hh; initWCS(); } void FitsImage::reset() { if (fits_) delete fits_; fits_ =NULL; if (post_) delete post_; post_ =NULL; if (hpx_) delete hpx_; hpx_ =NULL; if (hist_) delete hist_; hist_ =NULL; base_ =NULL; if (basedata_) delete basedata_; basedata_ =NULL; if (manageBlock_) { if (block_) delete block_; if (blockdata_) delete blockdata_; } manageBlock_ =0; block_ =NULL; blockdata_ =NULL; if (manageAnalysis_) { if (analysis_) delete analysis_; if (analysisdata_) delete analysisdata_; } manageAnalysis_ =0; analysis_ =NULL; analysisdata_ =NULL; image_ =NULL; data_ =NULL; } void FitsImage::resetWCS() { // Process OBJECT keyword if (objectKeyword_) delete [] objectKeyword_; objectKeyword_ = image_->getString("OBJECT"); // Process WCS keywords if (wcsHeader_) delete wcsHeader_; wcsHeader_ = NULL; initWCS(); } void FitsImage::resetWCS0() { int ii = Coord::WCS0-Coord::WCS; if (wcs_[ii]) wcsfree(wcs_[ii]); wcs_[ii] = NULL; if (ast_[ii]) astAnnul(ast_[ii]); ast_[ii] = NULL; } char* FitsImage::root(const char* fn) { if (fn) { const char* ptr = fn; // init the ptr while(*ptr++); // walk it forward to end of string ptr--; // backup one while(*ptr != '/' && ptr != fn) // walk it backward til last / or beginning ptr--; if (*ptr == '/') // step it over the last '/' ptr++; return dupstr(ptr); // got it! } else return NULL; } void FitsImage::setCropParams(int datasec) { if (!datasec) cparams = iparams; else cparams = dparams; } void FitsImage::setCropParams(const Vector& ss, const Vector& tt, int datasec) { // Coord are in DATA Vector ll = ss; Vector ur = tt; int xmin = ll[0]; int xmax = ur[0]; int ymin = ll[1]; int ymax = ur[1]; if (xmin>xmax) { xmin = ur[0]; xmax = ll[0]; } if (ymin>ymax) { ymin = ur[1]; ymax = ll[1]; } setCropParams(xmin,ymin,xmax,ymax,datasec); } void FitsImage::setCropParams(int x0, int y0, int x1, int y1, int datasec) { FitsBound* params; if (!datasec) params = &iparams; else params = &dparams; // Coords are in DATA if (x0xmin) x0=params->xmin; if (x0>params->xmax) x0=params->xmax; if (x1xmin) x1=params->xmin; if (x1>params->xmax) x1=params->xmax; if (y0ymin) y0=params->ymin; if (y0>params->ymax) y0=params->ymax; if (y1ymin) y1=params->ymin; if (y1>params->ymax) y1=params->ymax; cparams.set(x0,y0,x1,y1); } void FitsImage::setFileName(const char* fn) { if (fileName) delete [] fileName; fileName = NULL; if (rootBaseFileName) delete [] rootBaseFileName; rootBaseFileName = NULL; if (fullBaseFileName) delete [] fullBaseFileName; fullBaseFileName = NULL; if (iisFileName) delete [] iisFileName; iisFileName = NULL; // no filename to set if (!fn) return; // strip any '[]' char* ffn = strip(fn); FitsFile* ptr = post_ ? post_ : fits_; if (!ptr) return; const char* ext = ptr->extname(); if (ext) { { ostringstream str; str << ffn << '[' << ext << ']' << ends; fullBaseFileName = dupstr(str.str().c_str()); } { char* m = root(ffn); ostringstream str; str << m << '[' << ext << ']' << ends; rootBaseFileName = dupstr(str.str().c_str()); delete [] m; } } else if (ptr->ext()) { { ostringstream str; str << ffn << '[' << ptr->ext() << ']' << ends; fullBaseFileName = dupstr(str.str().c_str()); } { char* m = root(ffn); ostringstream str; str << m << '[' << ptr->ext() << ']' << ends; rootBaseFileName = dupstr(str.str().c_str()); delete [] m; } } else { fullBaseFileName = dupstr(ffn); rootBaseFileName = root(ffn); } // by default, iisFileName is fullBaseFileName if (fullBaseFileName) iisFileName = dupstr(fullBaseFileName); delete [] ffn; } void FitsImage::setObjectKeyword(const char* obj) { if (objectKeyword_) delete [] objectKeyword_; objectKeyword_ = dupstr(obj); } char* FitsImage::strip(const char* fn) { if (fn) { char* r = dupstr(fn); // dup the string char* ptr = r; // init the ptr while(*ptr != '[' && *ptr) // walk it forward til '[' or end ptr++; *ptr = '\0'; // zero out rest return r; // got it! } else return NULL; } int FitsImage::nhdu() { int dd =1; for (int ii=2; iiupdateClip(fr,getDataParams(fr->secMode())); } #ifndef __WIN32 void* clipproc(void* tt) { t_clip_arg* targ = (t_clip_arg*)tt; FitsData* data = targ->data; FrScale* fr = targ->fr; FitsBound* bb = targ->bb; data->updateClip(fr,bb); return NULL; } void FitsImage::updateClip(FrScale* fr, pthread_t* thread, t_clip_arg* targ) { targ->data = data_; targ->fr = fr; targ->bb = getDataParams(fr->secMode()); int result = pthread_create(thread, NULL, clipproc, targ); if (result) internalError("Unable to Create Thread"); } #endif const char* FitsImage::getFileName(Base::FileNameType type) { switch (type) { case Base::ROOTBASE: return rootBaseFileName; case Base::FULLBASE: return fullBaseFileName; case Base::ROOT: case Base::FULL: // clear the buffer if (fileName) delete [] fileName; fileName =NULL; // generate filename // if FITS bin table cube, be sure to check the first slice if (context_->fits->isHist()) return updateFileNameBin(type); else return updateFileNameImage(type); } // just to satisfy the compiler return rootBaseFileName; } const char* FitsImage::updateFileNameImage(Base::FileNameType type) { // 2d/3d section char* sec =NULL; switch (context_->secMode()) { case FrScale::IMGSEC: case FrScale::DATASEC: { Vector blockFactor = context_->blockFactor(); if (blockFactor[0] != 1) { ostringstream str; str << "*," << blockFactor[0] << ends; sec = dupstr(str.str().c_str()); } } break; case FrScale::CROPSEC: { FitsBound* params =getDataParams(FrScale::CROPSEC); // params is a BBOX in DATA coords 0-n // xlate to 1-n Vector ll= Vector(params->xmin,params->ymin) * Translate(1,1); Vector ur(params->xmax,params->ymax); Vector blockFactor = context_->blockFactor(); if (blockFactor[0] != 1) { ostringstream str; str << ll[0] << ':' << ur[0] << ',' << ll[1] << ':' << ur[1] << ',' << blockFactor[0] << ends; sec = dupstr(str.str().c_str()); } else { ostringstream str; str << ll[0] << ':' << ur[0] << ',' << ll[1] << ':' << ur[1] << ends; sec = dupstr(str.str().c_str()); } } break; } // address char* add =NULL; { int doAdd =0; ostringstream str; int jj; for (jj=FTY_MAXAXES-1; jj>=2; jj--) { if (address[jj]!=1) break; } jj++; for (int ii=2; ii=" << ll[0] << ',' << fits_->pBinX() << "<=" << ur[0] << ',' << fits_->pBinY() << ">=" << ll[1] << ',' << fits_->pBinY() << "<=" << ur[1] << ends; sec = dupstr(str.str().c_str()); } break; } } // z filter char* slice =NULL; { char* zcol = (char*)fits_->pBinZ(); int bd = context_->binDepth(); if (bd>1 && zcol) { // only the first slice will have this FitsImage* first = context_->fits; if (first) { Vector zlim = first->fits_->getColMinMax(zcol); double zlen = zlim[1]-zlim[0]; double zdelta = zlen/bd; double zptr = zlim[0] + (address[2]-1)*zdelta; ostringstream str; str << zcol << ">=" << zptr << '&' << zcol << '<' << zptr+zdelta <pc[0] ? wcs_[ii]->pc[0] : 1; double pc3 = wcs_[ii]->pc[3] ? wcs_[ii]->pc[3] : 1; if (!wcs_[ii]->coorflip) return Vector(wcs_[ii]->cdelt[0]*pc0, wcs_[ii]->cdelt[1]*pc3); else return Vector(wcs_[ii]->cdelt[1]*pc3, wcs_[ii]->cdelt[0]*pc0); } else return Vector(); } Coord::Orientation FitsImage::getWCSOrientation(Coord::CoordSystem sys, Coord::SkyFrame sky) { if (hasWCS(sys)) { Vector orpix = center(); Vector orval = pix2wcs(orpix, sys, sky); Vector delta = getWCScdelt(sys).abs(); Vector npix = wcs2pix(Vector(orval[0],orval[1]+delta[1]), sys, sky); Vector north = (npix-orpix).normalize(); Vector epix = wcs2pix(Vector(orval[0]+delta[0],orval[1]), sys, sky); Vector east = (epix-orpix).normalize(); // sanity check Vector diff = (north-east).abs(); if ((north[0]==0 && north[1]==0) || (east[0]==0 && east[1]==0) || (diff[0]<.01 && diff[1]<.01)) return Coord::NORMAL; // take the cross product and see which way the 3rd axis is pointing double w = east[0]*north[1]-east[1]*north[0]; if (!hasWCSCel(sys)) return w>0 ? Coord::NORMAL : Coord::XX; else return w<0 ? Coord::NORMAL : Coord::XX; } return Coord::NORMAL; } double FitsImage::getWCSRotation(Coord::CoordSystem sys, Coord::SkyFrame sky) { if (hasWCS(sys)) { Vector orpix = center(); Vector orval = pix2wcs(orpix, sys, sky); Vector delta = getWCScdelt(sys).abs(); Vector npix = wcs2pix(Vector(orval[0],orval[1]+delta[1]), sys, sky); Vector north = (npix-orpix).normalize(); Vector epix = wcs2pix(Vector(orval[0]+delta[0],orval[1]), sys, sky); Vector east = (epix-orpix).normalize(); // sanity check Vector diff = (north-east).abs(); if ((north[0]==0 && north[1]==0) || (east[0]==0 && east[1]==0) || (diff[0]<.01 && diff[1]<.01)) return 0; return -(north.angle()-M_PI_2); } return 0; } // AST Vector FitsImage::pix2wcs(Vector in, Coord::CoordSystem sys, Coord::SkyFrame sky) { astClearStatus; int ii = sys-Coord::WCS; if (ii>=0 && ast_ && ast_[ii]) { double xx =0; double yy =0; if (astIsASkyFrame(astGetFrame(ast_[ii], AST__CURRENT))) { setAstSkyFrame(ast_[ii],sky); astTran2(ast_[ii], 1, in.v, in.v+1, 1, &xx, &yy); if (astOK) if (checkAst(xx,yy)) return Vector(radToDeg(xx),yy*180./M_PI); } else { astTran2(ast_[ii], 1, in.v, in.v+1, 1, &xx, &yy); if (astOK) if (checkAst(xx,yy)) return Vector(xx,yy); } } maperr =1; return Vector(); } Vector* FitsImage::pix2wcs(Vector* in, int num, Coord::CoordSystem sys, Coord::SkyFrame sky) { astClearStatus; double xin[num]; double yin[num]; double xout[num]; double yout[num]; Vector* out = new Vector[num]; for (int ii=0; ii=0 && ast_ && ast_[ii]) { if (astIsASkyFrame(astGetFrame(ast_[ii], AST__CURRENT))) { setAstSkyFrame(ast_[ii],sky); astTran2(ast_[ii], num, xin, yin, 1, xout, yout); if (astOK) { for (int ii=0; ii=0 && ast_ && ast_[ii]) { double xx =0; double yy =0; ostringstream str; if (astIsASkyFrame(astGetFrame(ast_[ii], AST__CURRENT))) { setAstSkyFrame(ast_[ii],sky); astTran2(ast_[ii], 1, in.v, in.v+1, 1, &xx, &yy); if (!astOK || !checkAst(xx,yy)) { maperr =1; lbuf[0] = '\0'; return lbuf; } switch (format) { case Coord::DEGREES: xx =radToDeg(xx); // 0 to 360 yy *=180./M_PI; str << setprecision(8) << xx << ' ' << yy << ' ' << coord.skyFrameStr(sky) << ends; break; case Coord::SEXAGESIMAL: switch (sky) { case Coord::FK4: case Coord::FK4_NO_E: case Coord::FK5: case Coord::ICRS: xx = zeroTWOPI(xx); setAstFormat(ast_[ii],1,"hms.3"); setAstFormat(ast_[ii],2,"+dms.3"); break; case Coord::GALACTIC: case Coord::SUPERGALACTIC: case Coord::ECLIPTIC: case Coord::HELIOECLIPTIC: xx = zeroTWOPI(xx); setAstFormat(ast_[ii],1,"+dms.3"); setAstFormat(ast_[ii],2,"+dms.3"); break; } str << astFormat(ast_[ii], 1, xx) << ' ' << astFormat(ast_[ii], 2, yy) << ' ' << coord.skyFrameStr(sky) << ends; break; } } else { astTran2(ast_[ii], 1, in.v, in.v+1, 1, &xx, &yy); if (!astOK || !checkAst(xx,yy)) { maperr =1; return lbuf; } str << setprecision(8) << xx << ' ' << yy << ends; } strncpy(lbuf, str.str().c_str(), str.str().length()); } return lbuf; } Vector FitsImage::wcs2pix(Vector in, Coord::CoordSystem sys, Coord::SkyFrame sky) { astClearStatus; int ii = sys-Coord::WCS; if (ii>=0 && ast_ && ast_[ii]) { double xx =0; double yy =0; if (astIsASkyFrame(astGetFrame(ast_[ii], AST__CURRENT))) { setAstSkyFrame(ast_[ii],sky); Vector rr = in*M_PI/180.; astTran2(ast_[ii], 1, rr.v, &(rr[1]), 0, &xx, &yy); if (astOK) if (checkAst(xx,yy)) return Vector(xx,yy); } else { astTran2(ast_[ii], 1, in.v, in.v+1, 0, &xx, &yy); if (astOK) if (checkAst(xx,yy)) return Vector(xx,yy); } } maperr =1; return Vector(); } Vector* FitsImage::wcs2pix(Vector* in, int num, Coord::CoordSystem sys, Coord::SkyFrame sky) { astClearStatus; double xin[num]; double yin[num]; double xout[num]; double yout[num]; Vector* out = new Vector[num]; for (int ii=0; ii=0 && ast_ && ast_[ii]) { if (astIsASkyFrame(astGetFrame(ast_[ii], AST__CURRENT))) { setAstSkyFrame(ast_[ii],sky); for (int kk=0; kk=0 && ast_ && ast_[ii]) { if (astIsASkyFrame(astGetFrame(ast_[ii], AST__CURRENT))) { Vector aa = a*M_PI/180.; Vector bb = b*M_PI/180.; rr = astDistance(ast_[ii], aa.v, bb.v) *180./M_PI; } else rr = astDistance(ast_[ii], a.v, b.v); if (!astOK) { maperr =1; return 0; } } return rr; } int FitsImage::hasWCS(Coord::CoordSystem sys) { int ii = sys-Coord::WCS; return (sys>=Coord::WCS && ast_ && ast_[ii]) ? 1 : 0; } int FitsImage::hasWCSEqu(Coord::CoordSystem sys) { astClearStatus; int ii = sys-Coord::WCS; if (ii>=0 && ast_ && ast_[ii]) if (astIsASkyFrame(astGetFrame(ast_[ii], AST__CURRENT))) { // special case of xLON/xLAT char* bb = &(wcs_[ii]->c1type[1]); if (!strncmp(bb,"LON",3) || !strncmp(bb,"LAT",3)) { switch (wcs_[ii]->c1type[0]) { case 'G': case 'H': case 'E': case 'S': return 1; default: return 0; } } // special case of xyLN/xyLT char* cc = &(wcs_[ii]->c1type[2]); if (!strncmp(cc,"LN",2) || !strncmp(cc,"LT",2)) return 0; return 1; } return 0; } int FitsImage::hasWCSCel(Coord::CoordSystem sys) { astClearStatus; int ii = sys-Coord::WCS; if (ii>=0 && ast_ && ast_[ii]) if (astIsASkyFrame(astGetFrame(ast_[ii], AST__CURRENT))) return 1; return 0; } // WCSX int FitsImage::hasWCSx(Coord::CoordSystem sys, int ss) { int ii = sys-Coord::WCS; return (ss>=2&&ss=Coord::WCS && wcsx_[ii]) ? 1 : 0; } double FitsImage::pix2wcsx(double in, Coord::CoordSystem sys, int ss) { if (hasWCSx(sys,ss)) { int ii = sys-Coord::WCS; return (in-wcsx_[ii]->crpix[ss])*wcsx_[ii]->cd[ss] + wcsx_[ii]->crval[ss]; } else return in; } double FitsImage::wcs2pixx(double in, Coord::CoordSystem sys, int ss) { if (hasWCSx(sys,ss)) { int ii = sys-Coord::WCS; return (in-wcsx_[ii]->crval[ss])/wcsx_[ii]->cd[ss] + wcsx_[ii]->crpix[ss]; } else return in; } // WCS/AST support void FitsImage::wcsShow(WorldCoor* ww) { if (!ww) return; int n = ww->naxes; int nn = n*n; cerr << "wcs->wcsname=" << (ww->wcsname ? ww->wcsname : "") << endl; cerr << "wcs->naxes=" << ww->naxes << endl; cerr << "wcs->naxis=" << ww->naxis << endl; cerr << "wcs->radecsys=" << ww->radecsys << endl; cerr << "wcs->equinox=" << ww->equinox << endl; cerr << "wcs->epoch=" << ww->epoch << endl; cerr << "wcs->ctype[0]=" << ww->ctype[0] << endl; cerr << "wcs->ctype[1]=" << ww->ctype[1] << endl; cerr << "wcs->c1type=" << ww->c1type << endl; cerr << "wcs->c2type=" << ww->c2type << endl; cerr << "wcs->ptype=" << ww->ptype << endl; for (int jj=0; jjcrpix[" << jj << "]=" << ww->crpix[jj] << endl; for (int jj=0; jjcrval[" << jj << "]=" << ww->crval[jj] << endl; for (int jj=0; jjcdelt[" << jj << "]=" << ww->cdelt[jj] << endl; for (int jj=0; jj<4; jj++) cerr << "wcs->cd[" << jj << "]=" << ww->cd[jj] << endl; for (int jj=0; jjpc[" << jj << "]=" << ww->pc[jj] << endl; cerr << "wcs->longpole=" << ww->longpole << endl; cerr << "wcs->latpole=" << ww->latpole << endl; cerr << "wcs->prjcode=" << ww->prjcode << endl; cerr << "wcs->rot=" << ww->rot << endl; cerr << "wcs->coorflip=" << ww->coorflip << endl; cerr << "wcs->distcode=" << ww->distcode << endl; } void FitsImage::astinit(int ii, FitsHead* hd, FitsHead* prim) { if (!wcs_[ii]) { ast_[ii] = NULL; return; } // just in case if (!hd) return; // DSS,PLT,LIN goes straight to AST // we can't send 3D directly to AST if (wcs_[ii]->prjcode==WCS_DSS || wcs_[ii]->prjcode==WCS_PLT || (wcs_[ii]->prjcode==WCS_LIN && !strncmp(wcs_[ii]->ptype,"HPX",3)) || (wcs_[ii]->prjcode==WCS_LIN && !strncmp(wcs_[ii]->ptype,"XPH",3)) || (wcs_[ii]->prjcode==WCS_LIN && !strncmp(wcs_[ii]->ptype,"TAB",3)) || (wcs_[ii]->prjcode==WCS_LIN && !strncmp(wcs_[ii]->c1type,"AST",3))) ast_[ii] = fits2ast(hd); else ast_[ii] = buildast(ii, hd, prim); if (!ast_[ii]) return; // set default skyframe if (astIsASkyFrame(astGetFrame(ast_[ii], AST__CURRENT))) setAstSkyFrame(ast_[ii],Coord::FK5); if (DebugAST) astShow(ast_[ii]); } void FitsImage::astinit0(int ii) { if (!wcs_[ii]) { ast_[ii] = NULL; return; } ast_[ii] = buildast0(ii); if (!ast_[ii]) return; // set default skyframe if (astIsASkyFrame(astGetFrame(ast_[ii], AST__CURRENT))) setAstSkyFrame(ast_[ii],Coord::FK5); if (DebugAST) astShow(ast_[ii]); } int FitsImage::checkAst(double x, double y) { // check for reasonable values return (fabs(x) < FLT_MAX && fabs(y) < FLT_MAX) ? 1 : 0; } void FitsImage::setAstFormat(AstFrameSet* aa, int id, const char* format) { // is it already set? // ast is very slow when changing params { ostringstream str; str << "Format(" << id << ")" << ends; const char* out = astGetC(aa, str.str().c_str()); if (!strcmp(out,format)) return; } ostringstream str; str << "Format(" << id << ")=" << format << ends; astSet(aa, str.str().c_str()); } void FitsImage::setAstSkyFrame(AstFrameSet* aa, Coord::SkyFrame sky) { // is sky frame if (!astIsASkyFrame(astGetFrame(aa, AST__CURRENT))) return; // is it already set? // ast is very slow when changing system,equinox const char* str = astGetC(aa, "System"); // TLON/XLON and HPX will do this if (!strncmp(str,"Unknown",3)) return; switch (sky) { case Coord::FK4_NO_E: if (!strncmp(str,"FK4-NO-E",8)) return; astSet(aa, "System=FK4-NO-E, Equinox=B1950"); return; case Coord::FK4: if (!strncmp(str,"FK4",3)) return; astSet(aa, "System=FK4, Equinox=B1950"); return; case Coord::FK5: if (!strncmp(str,"FK5",3)) return; astSet(aa, "System=FK5, Equinox=J2000"); return; case Coord::ICRS: if (!strncmp(str,"ICRS",4)) return; astSet(aa, "System=ICRS"); return; case Coord::GALACTIC: if (!strncmp(str,"GALACTIC",8)) return; astSet(aa, "System=GALACTIC"); return; case Coord::SUPERGALACTIC: if (!strncmp(str,"SUPERGALACTIC",13)) return; astSet(aa, "System=SUPERGALACTIC"); return; case Coord::ECLIPTIC: if (!strncmp(str,"ECLIPTIC",8)) return; astSet(aa, "System=ECLIPTIC"); // get AST to agree with WCSSUBS astSetD(aa, "EQUINOX", astGetD(aa, "EPOCH")); return; case Coord::HELIOECLIPTIC: if (!strncmp(str,"HELIOECLIPTIC",13)) return; astSet(aa, "System=HELIOECLIPTIC"); return; } } AstFrameSet* FitsImage::fits2ast(FitsHead* hd) { // we may have an error, just reset astClearStatus; // new fitschan AstFitsChan* chan = astFitsChan(NULL, NULL, ""); if (!astOK || chan == AST__NULL) return NULL; // no warning messages astClear(chan,"Warnings"); // fill up chan char* cards =NULL; int ncards =0; if (hd) { cards = hd->cards(); ncards = hd->ncard(); } if (cards == NULL || ncards == 0) return NULL; for (int i=0; ifind("CTYPE1") && hd->find("CTYPE2") && hd->find("CRVAL1") && hd->find("CRVAL2") && hd->find("CRPIX1") && hd->find("CRPIX2")) { wcs2ast(ii,hd,prim,chan); fromwcs =1; } else header2ast(hd,chan); // rewind chan astClear(chan, "Card"); // parse header AstFrameSet* frameSet = (AstFrameSet*)astRead(chan); // do we have anything? if (!astOK || frameSet == AST__NULL || strncmp(astGetC(frameSet,"Class"), "FrameSet", 8)) return NULL; if (fromwcs && wcs_[ii]->coorflip) { int orr[] = {2,1}; astPermAxes(frameSet,orr); } // cleanup astAnnul(chan); return frameSet; } AstFrameSet* FitsImage::buildast0(int ii) { if (DebugAST) cerr << endl << "buildast0()" << endl; // read wcs struct into astChannel // we may have an error, just reset astClearStatus; // new fitschan AstFitsChan* chan = astFitsChan(NULL, NULL, ""); if (!astOK || chan == AST__NULL) return NULL; // no warning messages astClear(chan,"Warnings"); // basics (needed by fitschan.c) putFitsCard(chan, "NAXIS1", (int)naxis(0)); putFitsCard(chan, "NAXIS2", (int)naxis(1)); wcs2ast0(ii,chan); // rewind chan astClear(chan, "Card"); // parse header AstFrameSet* frameSet = (AstFrameSet*)astRead(chan); // do we have anything? if (!astOK || frameSet == AST__NULL || strncmp(astGetC(frameSet,"Class"), "FrameSet", 8)) return NULL; if (wcs_[ii]->coorflip) { int orr[] = {2,1}; astPermAxes(frameSet,orr); } // cleanup astAnnul(chan); return frameSet; } void FitsImage::header2ast(FitsHead* hd, void* chan) { if (DebugAST) cerr << endl << "header2ast()" << endl; for (int ii=0; iifind(key1) && !hd->find(key2)) continue; char* ctype1 = hd->getString(key1); char* ctype2 = hd->getString(key2); if (ctype1 && !strncmp(ctype1,"GLON",4)) { if (!ctype2 || strncmp(ctype2,"GLAT",4)) { ctype1 = (char*)linear; ctype2 = (char*)linear; } } else if (ctype2 && !strncmp(ctype2,"GLON",4)) { if (!ctype1 || strncmp(ctype1,"GLAT",4)) { ctype1 = (char*)linear; ctype2 = (char*)linear; } } else if (ctype1 && !strncmp(ctype1,"GLAT",4)) { if (!ctype2 || strncmp(ctype2,"GLON",4)) { ctype1 = (char*)linear; ctype2 = (char*)linear; } } else if (ctype2 && !strncmp(ctype2,"GLAT",4)) { if (!ctype1 || strncmp(ctype1,"GLON",4)) { ctype1 = (char*)linear; ctype2 = (char*)linear; } } else if (ctype1 && !strncmp(ctype1,"RA",2)) { if (!ctype2 || strncmp(ctype2,"DEC",3)) { ctype1 = (char*)linear; ctype2 = (char*)linear; } } else if (ctype2 && !strncmp(ctype2,"RA",2)) { if (!ctype1 || strncmp(ctype1,"DEC",3)) { ctype1 = (char*)linear; ctype2 = (char*)linear; } } else if (ctype1 && !strncmp(ctype1,"DEC",3)) { if (!ctype2 || strncmp(ctype2,"RA",2)) { ctype1 = (char*)linear; ctype2 = (char*)linear; } } else if (ctype2 && !strncmp(ctype2,"DEC",3)) { if (!ctype1 || strncmp(ctype1,"RA",2)) { ctype1 = (char*)linear; ctype2 = (char*)linear; } } else { if (!ctype1) ctype1 =(char*)linear; if (!ctype2) ctype2 =(char*)linear; } putFitsCard(chan, key1, ctype1); putFitsCard(chan, key2, ctype2); // CRPIX strcpy(key1, "CRPIX1 "); strcpy(key2, "CRPIX2 "); key1[6] = key2[6] = alt; putFitsCard(chan, key1, hd->getReal(key1,0)); putFitsCard(chan, key2, hd->getReal(key2,0)); // CRVAL strcpy(key1, "CRVAL1 "); strcpy(key2, "CRVAL2 "); key1[6] = key2[6] = alt; putFitsCard(chan, key1, hd->getReal(key1,0)); putFitsCard(chan, key2, hd->getReal(key2,0)); // CDELT/CD/PC strcpy(key1, "CDELT1 "); strcpy(key2, "CDELT2 "); key1[6] = key2[6] = alt; char pkey1[8]; char pkey2[8]; char pkey3[8]; char pkey4[8]; strcpy(pkey1, "PC1_1 "); strcpy(pkey2, "PC1_2 "); strcpy(pkey3, "PC2_1 "); strcpy(pkey4, "PC2_2 "); pkey1[5] = pkey2[5] = pkey3[5] = pkey4[5] = alt; char ckey1[8]; char ckey2[8]; char ckey3[8]; char ckey4[8]; strcpy(ckey1, "CD1_1 "); strcpy(ckey2, "CD1_2 "); strcpy(ckey3, "CD2_1 "); strcpy(ckey4, "CD2_2 "); ckey1[5] = ckey2[5] = ckey3[5] = ckey4[5] = alt; // Give CD priority over CDELT if (hd->find(ckey1) || hd->find(ckey2) || hd->find(ckey3) || hd->find(ckey4)) { putFitsCard(chan, ckey1, hd->getReal(ckey1,1)); putFitsCard(chan, ckey2, hd->getReal(ckey2,0)); putFitsCard(chan, ckey3, hd->getReal(ckey3,0)); putFitsCard(chan, ckey4, hd->getReal(ckey4,1)); } else if (hd->find(key1) || hd->find(key2)) { putFitsCard(chan, key1, hd->getReal(key1,1)); putFitsCard(chan, key2, hd->getReal(key2,1)); if (hd->find(pkey1) || hd->find(pkey2) || hd->find(pkey3) || hd->find(pkey4)) { putFitsCard(chan, pkey1, hd->getReal(pkey1,1)); putFitsCard(chan, pkey2, hd->getReal(pkey2,1)); putFitsCard(chan, pkey3, hd->getReal(pkey3,1)); putFitsCard(chan, pkey4, hd->getReal(pkey4,1)); } } } } void FitsImage::wcs2ast(int ww, FitsHead* hd, FitsHead* prim, void* chan) { if (DebugAST) cerr << endl << "wcs2ast()" << endl; // Alt WCS char alt = (ww==0) ? ' ' : (char)('@'+ww); // CTYPE if ( // special case (reorder 3D cube) (!strncmp(wcs_[ww]->c1type,"GLON",4) && strncmp(wcs_[ww]->c2type,"GLAT",4)) || (strncmp(wcs_[ww]->c1type,"GLON",4) && !strncmp(wcs_[ww]->c2type,"GLAT",4)) || (!strncmp(wcs_[ww]->c1type,"GLAT",4) && strncmp(wcs_[ww]->c2type,"GLON",4)) || (strncmp(wcs_[ww]->c1type,"GLAT",4) && !strncmp(wcs_[ww]->c2type,"GLON",4)) || (!strncmp(wcs_[ww]->c1type,"RA",2) && strncmp(wcs_[ww]->c2type,"DEC",3)) || (strncmp(wcs_[ww]->c1type,"RA",2) && !strncmp(wcs_[ww]->c2type,"DEC",3)) || (!strncmp(wcs_[ww]->c1type,"DEC",3) && strncmp(wcs_[ww]->c2type,"RA",2)) || (strncmp(wcs_[ww]->c1type,"DEC",3) && !strncmp(wcs_[ww]->c2type,"RA",2))) { putFitsCard(chan, "CTYPE1", "LINEAR"); putFitsCard(chan, "CTYPE2", "LINEAR"); } else if (wcs_[ww]->prjcode == WCS_TAN && wcs_[ww]->distcode) { // SIP { ostringstream str; str << wcs_[ww]->ctype[0] << "-SIP" << ends; putFitsCard(chan, "CTYPE1", str.str().c_str()); } { ostringstream str; str << wcs_[ww]->ctype[1] << "-SIP" << ends; putFitsCard(chan, "CTYPE2", str.str().c_str()); } } else if ((wcs_[ww]->prjcode == WCS_LIN) && (strncmp(wcs_[ww]->ctype[0]+2,"LN",2)) && (strncmp(wcs_[ww]->ctype[0]+2,"LT",2)) && (strncmp(wcs_[ww]->ctype[0]+1,"LON",3)) && (strncmp(wcs_[ww]->ctype[0]+1,"LAT",3))) { // this is not a mistake putFitsCard(chan, "CTYPE1", wcs_[ww]->c1type); putFitsCard(chan, "CTYPE2", wcs_[ww]->c2type); } else if (wcs_[ww]->prjcode == WCS_PIX) { // this is not a mistake putFitsCard(chan, "CTYPE1", wcs_[ww]->c1type); putFitsCard(chan, "CTYPE2", wcs_[ww]->c2type); } else { putFitsCard(chan, "CTYPE1", wcs_[ww]->ctype[0]); putFitsCard(chan, "CTYPE2", wcs_[ww]->ctype[1]); } // CRPIX/CRVAL putFitsCard(chan, "CRPIX1", wcs_[ww]->crpix[0]); putFitsCard(chan, "CRPIX2", wcs_[ww]->crpix[1]); putFitsCard(chan, "CRVAL1", wcs_[ww]->crval[0]); putFitsCard(chan, "CRVAL2", wcs_[ww]->crval[1]); // CD/CDELT/PC // This is very complicated. AST is very, very, very picky as to which // keywords it use... { ostringstream cd; cd << "CD1_1" << alt << ends; ostringstream cdelt; cdelt << "CDELT1" << alt << ends; ostringstream pc; pc << "PC1_1" << alt << ends; if (hd->find(cd.str().c_str()) || (prim && prim->find(cd.str().c_str()))) { // simple case CD // no rotation, no poles, no LIN, no inner cd values if (!wcs_[ww]->cd[1] && !wcs_[ww]->cd[2] && !wcs_[ww]->rot && !wcs_[ww]->coorflip && wcs_[ww]->latpole == 999 && wcs_[ww]->longpole == 999 && wcs_[ww]->prjcode != WCS_PIX && wcs_[ww]->prjcode != WCS_LIN) { putFitsCard(chan, "CDELT1", wcs_[ww]->cdelt[0]); putFitsCard(chan, "CDELT2", wcs_[ww]->cdelt[1]); } else { putFitsCard(chan, "CD1_1", wcs_[ww]->cd[0]); putFitsCard(chan, "CD1_2", wcs_[ww]->cd[1]); putFitsCard(chan, "CD2_1", wcs_[ww]->cd[2]); putFitsCard(chan, "CD2_2", wcs_[ww]->cd[3]); } } // CDELT else if (hd->find(cdelt.str().c_str()) || (prim && prim->find(cdelt.str().c_str()))) { putFitsCard(chan, "CDELT1", wcs_[ww]->cdelt[0]); putFitsCard(chan, "CDELT2", wcs_[ww]->cdelt[1]); if (hd->find(pc.str().c_str()) || (prim && prim->find(pc.str().c_str()))) { putFitsCard(chan, "PC1_1", wcs_[ww]->pc[0]); putFitsCard(chan, "PC1_2", wcs_[ww]->pc[1]); putFitsCard(chan, "PC2_1", wcs_[ww]->pc[2]); putFitsCard(chan, "PC2_2", wcs_[ww]->pc[3]); } else if (!ww && (hd->find("PC001001") || (prim && prim->find("PC001001")))) { putFitsCard(chan, "PC001001", wcs_[ww]->pc[0]); putFitsCard(chan, "PC001002", wcs_[ww]->pc[1]); putFitsCard(chan, "PC002001", wcs_[ww]->pc[2]); putFitsCard(chan, "PC002002", wcs_[ww]->pc[3]); } else { if (!ww && (hd->find("CROTA1") || (prim && prim->find("CROTA1")))) putFitsCard(chan, "CROTA1", wcs_[ww]->rot); if (!ww && (hd->find("CROTA2") || (prim && hd->find("CROTA2")))) putFitsCard(chan, "CROTA2", wcs_[ww]->rot); } } // sanity check else if (!wcs_[ww]->cd[0] && !wcs_[ww]->cd[1] && !wcs_[ww]->cd[2] && !wcs_[ww]->cd[3]) { putFitsCard(chan, "CDELT1", wcs_[ww]->cdelt[0]); putFitsCard(chan, "CDELT2", wcs_[ww]->cdelt[1]); putFitsCard(chan, "PC1_1", wcs_[ww]->pc[0]); putFitsCard(chan, "PC1_2", wcs_[ww]->pc[1]); putFitsCard(chan, "PC2_1", wcs_[ww]->pc[2]); putFitsCard(chan, "PC2_2", wcs_[ww]->pc[3]); } // fall back else { putFitsCard(chan, "CD1_1", wcs_[ww]->cd[0]); putFitsCard(chan, "CD1_2", wcs_[ww]->cd[1]); putFitsCard(chan, "CD2_1", wcs_[ww]->cd[2]); putFitsCard(chan, "CD2_2", wcs_[ww]->cd[3]); } } // equatorial keywords if (wcs_[ww]->prjcode>0 && wcs_[ww]->prjcode<34) { // equiniox putFitsCard(chan, "EQUINOX", wcs_[ww]->equinox); // from wcssub/wcsinit.c line 800 // wcs[ww]->epoch = 1900.0 + (mjd - 15019.81352) / 365.242198781; putFitsCard(chan, "MJD-OBS", (wcs_[ww]->epoch-1900)*365.242198781+15019.81352); ostringstream radesys; radesys << "RADESYS" << alt << ends; if (hd->find(radesys.str().c_str())) { // if RADESYS present, use it putFitsCard(chan, "RADESYS", hd->getString(radesys.str().c_str())); } else if (prim && prim->find(radesys.str().c_str())) { // if RADESYS present, use it putFitsCard(chan, "RADESYS", prim->getString(radesys.str().c_str())); } else if (hd->find("RADECSYS")) { // look for old RADECSYS putFitsCard(chan, "RADESYS", hd->getString("RADECSYS")); } else if (prim && prim->find("RADECSYS")) { // look for old RADECSYS putFitsCard(chan, "RADESYS", prim->getString("RADECSYS")); } else { // fall back on wcssubs if (!strncmp("RA",wcs_[ww]->ctype[0],2) || !strncmp("RA",wcs_[ww]->ctype[1],2)) { if (!strncmp("FK4",wcs_[ww]->radecsys,3) || !strncmp("FK4-NO-E",wcs_[ww]->radecsys,8) || !strncmp("FK5",wcs_[ww]->radecsys,3) || !strncmp("ICRS",wcs_[ww]->radecsys,4)) putFitsCard(chan, "RADESYS", wcs_[ww]->radecsys); } } } // ast is picky about latpole/longpole if ((wcs_[ww]->latpole == 999 && wcs_[ww]->longpole == 999) || (wcs_[ww]->latpole == 0 && wcs_[ww]->longpole == 0)) ; else { if (wcs_[ww]->latpole != 999) putFitsCard(chan, "LATPOLE", wcs_[ww]->latpole); if (wcs_[ww]->longpole != 999) putFitsCard(chan, "LONPOLE", wcs_[ww]->longpole); } // Projection parameters- PV, QV, WAT // TAN+PV (old SCAMP-backward compatibility) // TPV+PV (new SCAMP) // xxx+PV (ZPN generic) // xxx+QV (TAN AUTOASTROM) // TNX/ZPX+WAT (IRAF) // TAN/LIN-SIP (SIP) // PVx_y (old SCAMP, SCAMP, generic) // MAXPV defined in wcs.h for (int ii=1; ii<=2; ii++) { for (int mm=0; mm<=MAXPV; mm++) { ostringstream str,str2; str << "PV" << ii << '_' << mm << alt << ends; str2 << "PV" << ii << '_' << mm << ends; if (hd->find(str.str().c_str())) { double val = hd->getReal(str.str().c_str(),0); putFitsCard(chan, str2.str().c_str(), val); } else if (prim && prim->find(str.str().c_str())) { double val = prim->getReal(str.str().c_str(),0); putFitsCard(chan, str2.str().c_str(), val); } } } // QVx_y (Autoastrom) for (int ii=1; ii<=2; ii++) { for (int mm=0; mm<=MAXPV; mm++) { ostringstream str,str2; str << "QV" << ii << '_' << mm << alt << ends; str2 << "QV" << ii << '_' << mm << ends; if (hd->find(str.str().c_str())) { double val = hd->getReal(str.str().c_str(),0); putFitsCard(chan, str2.str().c_str(), val); } else if (prim && prim->find(str.str().c_str())) { double val = prim->getReal(str.str().c_str(),0); putFitsCard(chan, str2.str().c_str(), val); } } } // WATx_ (IRAF) (primary only) if ((wcs_[ww]->prjcode == WCS_TNX || wcs_[ww]->prjcode == WCS_ZPX) && !ww) { for (int jj=0; jj<=2; jj++) { for (int ii=1; ii<=9; ii++) { ostringstream str; str << "WAT" << jj << "_00" << ii << ends; if (hd->find(str.str().c_str())) { char* val = hd->getString(str.str().c_str()); if (val) { putFitsCard(chan, str.str().c_str(), val); delete [] val; } } else if (prim && prim->find(str.str().c_str())) { char* val = prim->getString(str.str().c_str()); if (val) { putFitsCard(chan, str.str().c_str(), val); delete [] val; } } } } } // SIP (TAN-SIP/LIN-SIP) (primary only) if ((wcs_[ww]->prjcode == WCS_TAN || wcs_[ww]->prjcode == WCS_LIN) && !ww && wcs_[ww]->distcode) { if (hd->find("A_ORDER")) { int val = hd->getInteger("A_ORDER",0); putFitsCard(chan, "A_ORDER", val); } else if (prim && prim->find("A_ORDER")) { int val = prim->getInteger("A_ORDER",0); putFitsCard(chan, "A_ORDER", val); } if (hd->find("AP_ORDER")) { int val = hd->getInteger("AP_ORDER",0); putFitsCard(chan, "AP_ORDER", val); } else if (prim && prim->find("AP_ORDER")) { int val = prim->getInteger("AP_ORDER",0); putFitsCard(chan, "AP_ORDER", val); } if (hd->find("A_DMAX")) { double val = hd->getReal("A_DMAX",0); putFitsCard(chan, "A_DMAX", val); } else if (prim && prim->find("A_DMAX")) { double val = prim->getReal("A_DMAX",0); putFitsCard(chan, "A_DMAX", val); } if (hd->find("B_ORDER")) { int val = hd->getInteger("B_ORDER",0); putFitsCard(chan, "B_ORDER", val); } else if (prim && prim->find("B_ORDER")) { int val = prim->getInteger("B_ORDER",0); putFitsCard(chan, "B_ORDER", val); } if (hd->find("BP_ORDER")) { int val = hd->getInteger("BP_ORDER",0); putFitsCard(chan, "BP_ORDER", val); } else if (prim && prim->find("BP_ORDER")) { int val = prim->getInteger("BP_ORDER",0); putFitsCard(chan, "BP_ORDER", val); } if (hd->find("B_DMAX")) { double val = hd->getReal("B_DMAX",0); putFitsCard(chan, "B_DMAX", val); } else if (prim && prim->find("B_DMAX")) { double val = prim->getReal("B_DMAX",0); putFitsCard(chan, "B_DMAX", val); } for (int jj=0; jj<=9; jj++) { for (int ii=0; ii<=9; ii++) { { ostringstream str; str << "A_" << jj << "_" << ii << ends; if (hd->find(str.str().c_str())) { double val = hd->getReal(str.str().c_str(),0); putFitsCard(chan, str.str().c_str(), val); } else if (prim && prim->find(str.str().c_str())) { double val = prim->getReal(str.str().c_str(),0); putFitsCard(chan, str.str().c_str(), val); } } { ostringstream str; str << "AP_" << jj << "_" << ii << ends; if (hd->find(str.str().c_str())) { double val = hd->getReal(str.str().c_str(),0); putFitsCard(chan, str.str().c_str(), val); } else if (prim && prim->find(str.str().c_str())) { double val = prim->getReal(str.str().c_str(),0); putFitsCard(chan, str.str().c_str(), val); } } { ostringstream str; str << "B_" << jj << "_" << ii << ends; if (hd->find(str.str().c_str())) { double val = hd->getReal(str.str().c_str(),0); putFitsCard(chan, str.str().c_str(), val); } else if (prim && prim->find(str.str().c_str())) { double val = prim->getReal(str.str().c_str(),0); putFitsCard(chan, str.str().c_str(), val); } } { ostringstream str; str << "BP_" << jj << "_" << ii << ends; if (hd->find(str.str().c_str())) { double val = hd->getReal(str.str().c_str(),0); putFitsCard(chan, str.str().c_str(), val); } else if (prim && prim->find(str.str().c_str())) { double val = prim->getReal(str.str().c_str(),0); putFitsCard(chan, str.str().c_str(), val); } } } } } } void FitsImage::wcs2ast0(int ww, void* chan) { if (DebugAST) cerr << endl << "wcs2ast0()" << endl; putFitsCard(chan, "CTYPE1", wcs_[ww]->ctype[0]); putFitsCard(chan, "CTYPE2", wcs_[ww]->ctype[1]); // CRPIX/CRVAL putFitsCard(chan, "CRPIX1", wcs_[ww]->crpix[0]); putFitsCard(chan, "CRPIX2", wcs_[ww]->crpix[1]); putFitsCard(chan, "CRVAL1", wcs_[ww]->crval[0]); putFitsCard(chan, "CRVAL2", wcs_[ww]->crval[1]); putFitsCard(chan, "CD1_1", wcs_[ww]->cd[0]); putFitsCard(chan, "CD1_2", wcs_[ww]->cd[1]); putFitsCard(chan, "CD2_1", wcs_[ww]->cd[2]); putFitsCard(chan, "CD2_2", wcs_[ww]->cd[3]); putFitsCard(chan, "EQUINOX", wcs_[ww]->equinox); // from wcssub/wcsinit.c line 800 // wcs[ww]->epoch = 1900.0 + (mjd - 15019.81352) / 365.242198781; putFitsCard(chan, "MJD-OBS", (wcs_[ww]->epoch-1900)*365.242198781+15019.81352); putFitsCard(chan, "RADESYS", wcs_[ww]->radecsys); } void FitsImage::putFitsCard(void* chan, const char* key, const char* value) { char buf[80]; memset(buf,'\0', 80); ostringstream str; str.setf(ios::left,ios::adjustfield); str.width(8); str << key << "= '" << value << "'"; memcpy(buf,str.str().c_str(),str.str().length()); astPutFits(chan, buf, 0); astClearStatus; if (DebugAST) cerr << str.str().c_str() << endl; } void FitsImage::putFitsCard(void* chan, const char* key, int value) { char buf[80]; memset(buf,'\0', 80); ostringstream str; str.setf(ios::left,ios::adjustfield); str.width(8); str << key << "= " << value; memcpy(buf,str.str().c_str(),str.str().length()); astPutFits(chan, buf, 0); astClearStatus; if (DebugAST) cerr << str.str().c_str() << endl; } void FitsImage::putFitsCard(void* chan, const char* key, double value) { char buf[80]; memset(buf,'\0', 80); ostringstream str; str.setf(ios::left,ios::adjustfield); str.setf(ios::scientific,ios::floatfield); str.width(8); str.precision(16); str << key << "= " << value; memcpy(buf,str.str().c_str(),str.str().length()); astPutFits(chan, buf, 0); astClearStatus; if (DebugAST) cerr << str.str().c_str() << endl; } saods9/tksao/frame/fitsimage.h000644 000765 000000 00000061707 12766032036 016740 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsimage_h__ #define __fitsimage_h__ #include "vector.h" #include "vector3d.h" #include "fitsdata.h" #include "coord.h" #include "file.h" #include "wcs.h" #include "head.h" #include "smooth.h" // WCS ' ','A' to 'Z', WCS0 #define MULTWCS 27 #define MULTWCSA 28 typedef struct { double* kernel; double* src; double* dest; int width; int height; int radius; } t_smooth_arg; typedef struct { FitsFile* base; FitsData* basedata; FitsFile* block; Vector blockFactor; } t_block_arg; typedef struct { FitsData* data; FrScale* fr; FitsBound* bb; } t_clip_arg; extern "C" { #include "ast.h" } class WCSx { public: double crpix[FTY_MAXAXES]; double crval[FTY_MAXAXES]; double cd[FTY_MAXAXES]; public: WCSx(); }; class FitsImage { protected: Context* context_; // pointer to context Tcl_Interp* interp_; char* objectKeyword_; // object keyword // native fits file FitsFile* fits_; FitsFile* post_; // fits post processing FitsFile* hist_; // fits bin FitsFile* hpx_; // healpix // base FitsFile* base_; FitsData* basedata_; // block int manageBlock_; FitsFile* block_; FitsData* blockdata_; // analysis int manageAnalysis_; FitsFile* analysis_; FitsData* analysisdata_; // final FitsFile* image_; FitsData* data_; Vector histCursor; // start point to bin about (physical coords) Vector actualHistCursor; // actual bin center (physical coords) char buf[32]; // tmp storage for returning strings // Mosaic items int keyLTMV; int keyATMV; int keyDTMV; int keyDATASEC; double jyBeam_; // beam area for radio maps BBox datasec; // DATASEC keyword int iisMode_; // flag to indicate if iis Vector iisz_; // z1 and z2 int iiszt_; // 0-Uniary, 1-Linear, 2-Log FitsImage* nextMosaic_; // next mosaic FitsImage* nextSlice_; // next slice int address[FTY_MAXAXES]; int manageWCS_; WorldCoor** wcs_; // wcs list WCSx** wcsx_; // xth Axis WCS AstFrameSet** ast_; // ast frameset; FitsHead* wcsHeader_; // alt wcs header FitsHead* altHeader_; // wcs header for wfpc2 Matrix wcsToRef_; // iraf/wcs matrix protected: void reset(); void process(const char*, int); void initCompress(); void initNRRD(); void initENVI(); void initBin(); void initHPX(); void initWCS(); void initWCSPhysical(); Vector getHistCenter(); char* root(const char*); char* strip(const char*); #ifdef __WIN32 void smooth(); #else void smooth(pthread_t*, t_smooth_arg*); #endif void wcsShow(WorldCoor*); void astinit(int, FitsHead*, FitsHead*); void astinit0(int); int checkAst(double, double); AstFrameSet* fits2ast(FitsHead*); AstFrameSet* buildast(int, FitsHead*, FitsHead*); AstFrameSet* buildast0(int); void wcs2ast(int, FitsHead*, FitsHead*, void*); void wcs2ast0(int, void*); void header2ast(FitsHead*, void*); void putFitsCard(void* chan, const char* key, const char* value); void putFitsCard(void* chan, const char* key, int value); void putFitsCard(void* chan, const char* key, double value); public: char* fileName; char* rootBaseFileName; char* fullBaseFileName; char* iisFileName; // alt file name for iis Matrix irafToRef; Matrix dataToImage; Matrix imageToData; Matrix dataToRef; Matrix refToData; Matrix dataToUser; Matrix userToData; Matrix dataToWidget; Matrix widgetToData; Matrix dataToCanvas; Matrix canvasToData; Matrix dataToWindow; Matrix windowToData; Matrix canvasToRef; Matrix refToCanvas; Matrix refToImage; Matrix imageToRef; Matrix refToPhysical; Matrix physicalToRef; Matrix refToDetector; Matrix detectorToRef; Matrix refToAmplifier; Matrix amplifierToRef; Matrix imageToWidget; Matrix widgetToImage; Matrix imageToPhysical; Matrix physicalToImage; Matrix imageToDetector; Matrix detectorToImage; Matrix imageToAmplifier; Matrix amplifierToImage; Matrix physicalToDetector; Matrix detectorToPhysical; Matrix physicalToAmplifier; Matrix amplifierToPhysical; Matrix3d dataToImage3d; Matrix3d imageToData3d; Matrix3d dataToRef3d; Matrix3d refToData3d; Matrix3d dataToUser3d; Matrix3d userToData3d; Matrix3d dataToWidget3d; Matrix3d widgetToData3d; Matrix3d dataToCanvas3d; Matrix3d canvasToData3d; Matrix3d dataToWindow3d; Matrix3d windowToData3d; Matrix magnifierToData; Matrix dataToMagnifier; Matrix3d magnifierToData3d; Matrix3d dataToMagnifier3d; Matrix pannerToData; Matrix dataToPanner; Matrix3d pannerToData3d; Matrix3d dataToPanner3d; Matrix psToData; Matrix dataToPS; Matrix3d psToData3d; Matrix3d dataToPS3d; FitsBound iparams; // image bbox FitsBound dparams; // DATASEC bbox FitsBound cparams; // crop bbox public: FitsImage(Context*, Tcl_Interp*); virtual ~FitsImage(); void setContext(Context* cx) {context_ = cx;} void load(); #ifdef __WIN32 void analysis(int); #else void analysis(int, pthread_t*, t_smooth_arg*); #endif void block(); #ifndef __WIN32 void block(pthread_t*); #endif Matrix bin(const Vector&); Matrix binCenter(); Matrix binCursor(); FitsImage* nextMosaic() {return nextMosaic_;} FitsImage* nextSlice() {return nextSlice_;} void setNextMosaic(FitsImage* n) {nextMosaic_ = n;} void setNextSlice(FitsImage* n) {nextSlice_ = n;} FitsFile* fitsFile() {return fits_;} FitsFile* baseFile() {return base_;} FitsFile* blockFile() {return block_;} FitsFile* analysisFile() {return analysis_;} FitsFile* imageFile() {return image_;} // we assume that 'data' is valid void* basedata() {return basedata_->data();} void* blockdata() {return blockdata_->data();} void* analysisdata() {return analysisdata_->data();} void* imagedata() {return data_->data();} // isValid() means "valid image found" int isValid() {return image_ ? 1 : 0;} int isPost() {return post_ ? 1 : 0;} int isHist() {return hist_ ? 1 : 0;} int isHPX() {return hpx_ ? 1 : 0;} int isImage() {return fits_ ? fits_->isImage() : 0;} int isTable() {return fits_ ? fits_->isTable() : 0;} int isAsciiTable() {return fits_ ? fits_->isAsciiTable() : 0;} int isBinTable() {return fits_ ? fits_->isBinTable() : 0;} void close() {if (fits_) fits_->done();} void match(const char* xxname1, const char* yyname1, Coord::CoordSystem sys1, Coord::SkyFrame sky1, const char* xxname2, const char* yyname2, Coord::CoordSystem sys2, Coord::SkyFrame sky2, double rad, Coord::CoordSystem sys, Coord::SkyDist dist, const char* rrname); FitsHead* parseWCS(istream&); Matrix nextBin(const Vector&); void calcHistSize(); Vector getHistDim(); Vector getHistColMinMax(const char*); Vector getHistColDim(const char*); Vector getHistCursor() {return actualHistCursor;} const char* getHistFilter(); const char* getHistX(); const char* getHistY(); const char* getHistZ(); char* getHistList(); void setBinCursor(const Vector&); void setBinX(const char* str) {if (fits_) fits_->setpBinX(str);} void setBinY(const char* str) {if (fits_) fits_->setpBinY(str);} void setBinZ(const char* str) {if (fits_) fits_->setpBinZ(str);} void setBinFilter(const char* fil) {if (fits_) fits_->setpFilter(fil);} void setBinSliceFilter(const char*); void setBinColMinMax(const char* str, const Vector& lim) {if (fits_) fits_->setColMinMax(str,lim);} int hasBinCol(const char*); const char* objectKeyword() {return objectKeyword_;} void setObjectKeyword(const char*); void setFileName(const char*); const char* getFileName(Base::FileNameType); const char* updateFileNameBin(Base::FileNameType); const char* updateFileNameImage(Base::FileNameType); const char* iisGetFileName() {return iisFileName;} void iisSetFileName(const char*); long naxis(int ii) {return image_->head()->naxis(ii);} long owidth() {return fits_->head()->naxis(0);} long oheight() {return fits_->head()->naxis(1);} Vector osize() {return Vector(owidth(),oheight());} Vector ocenter() {return Vector(owidth(),oheight())/2.;} long width() {return image_->head()->naxis(0);} long height() {return image_->head()->naxis(1);} long depth() {return naxis(2)>0 ? naxis(2) : 1;} Vector size() {return Vector(width(),height());} Vector center() {return Vector(width(),height())/2.;} int nhdu(); int bitpix() {return image_->head()->bitpix();} int ext() {return fits_->ext();} FitsBound* getDataParams(FrScale::SecMode); // return bbox in IMAGE void setCropParams(int); void setCropParams(int,int,int,int,int); void setCropParams(const Vector&, const Vector&, int); int hasLTMV() {return keyLTMV;} int hasATMV() {return keyATMV;} int hasDTMV() {return keyDTMV;} FitsHead* wcsHeader() {return wcsHeader_;} WCSx** wcsx() {return wcsx_;} int isIIS() {return iisMode_;} Vector& iisz() {return iisz_;} Vector pix2wcs(Vector, Coord::CoordSystem, Coord::SkyFrame); Vector* pix2wcs(Vector*, int, Coord::CoordSystem, Coord::SkyFrame); char* pix2wcs(Vector, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, char*); Vector wcs2pix(Vector, Coord::CoordSystem, Coord::SkyFrame); Vector* wcs2pix(Vector*, int, Coord::CoordSystem, Coord::SkyFrame); double wcsdist(Vector, Vector, Coord::CoordSystem); double pix2wcsx(double, Coord::CoordSystem, int); double wcs2pixx(double, Coord::CoordSystem, int); void altWCS(istream&); void appendWCS(istream&); void listWCS(ostream&, Coord::CoordSystem); void resetWCS(); void replaceWCS(istream&); void initWCS0(const Vector&); void resetWCS0(); void processKeywordsPhysical(); void processKeywordsParams(); void processKeywordsFitsSection(); int processKeywordsIRAF(FitsImage*); WorldCoor* getWCS(Coord::CoordSystem sys) {return (wcs_ && wcs_[sys-Coord::WCS]) ? wcs_[sys-Coord::WCS] : NULL;} const char* getWCSName(Coord::CoordSystem sys) {return (wcs_ && wcs_[sys-Coord::WCS]) ? wcs_[sys-Coord::WCS]->wcsname : NULL;} Coord::Orientation getWCSOrientation(Coord::CoordSystem, Coord::SkyFrame); double getWCSRotation(Coord::CoordSystem, Coord::SkyFrame); Vector getWCScdelt(Coord::CoordSystem); void setAstSkyFrame(AstFrameSet*, Coord::SkyFrame); void setAstFormat(AstFrameSet*, int, const char*); AstFrameSet* getAST(Coord::CoordSystem sys) {return (ast_ && ast_[sys-Coord::WCS]) ? ast_[sys-Coord::WCS] : NULL;} int hasWCS(Coord::CoordSystem); int hasWCSx(Coord::CoordSystem, int); int hasWCSEqu(Coord::CoordSystem); int hasWCSCel(Coord::CoordSystem); void updateMatrices(Matrix&, Matrix&, Matrix&, Matrix&, Matrix&); void updateMatrices(Matrix3d&, Matrix3d&, Matrix3d&, Matrix3d&); void updatePannerMatrices(Matrix&); void updatePannerMatrices(Matrix3d&); void updateMagnifierMatrices(Matrix&); void updateMagnifierMatrices(Matrix3d&); void updatePS(Matrix); void updatePS(Matrix3d); Matrix& matrixToData(Coord::InternalSystem); Matrix& matrixFromData(Coord::InternalSystem sys); Matrix3d& matrixFromData3d(Coord::InternalSystem); Matrix3d& matrixToData3d(Coord::InternalSystem); Vector mapFromRef(const Vector&, Coord::CoordSystem, Coord::SkyFrame =Coord::FK5); void mapFromRef(const Vector&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, char*); Vector mapToRef(const Vector&, Coord::CoordSystem, Coord::SkyFrame =Coord::FK5); double mapFromRef3axis(double, Coord::CoordSystem, int); double mapToRef3axis(double, Coord::CoordSystem, int); double mapLenFromRef(double, Coord::CoordSystem, Coord::SkyDist =Coord::DEGREE); Vector mapLenFromRef(const Vector&, Coord::CoordSystem, Coord::SkyDist =Coord::DEGREE); double mapLenToRef(double, Coord::CoordSystem, Coord::SkyDist =Coord::DEGREE); Vector mapLenToRef(const Vector&, Coord::CoordSystem, Coord::SkyDist =Coord::DEGREE); double mapDistFromRef(const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyDist =Coord::DEGREE); void listFromRef(ostream&, const Vector&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void listLenFromRef(ostream&, double, Coord::CoordSystem, Coord::SkyDist); void listLenFromRef(ostream&, const Vector&, Coord::CoordSystem, Coord::SkyDist); void listDistFromRef(ostream&, const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyDist); const char* getValue(const Vector& v); float getValueFloat(const Vector& v) {return data_->getValueFloat(v);} double getValueDouble(const Vector& v) {return data_->getValueDouble(v);} int getValueMask(const Vector& v) {return data_->getValueMask(v);} int getValueMask(double x, double y) {return data_->getValueMask(x,y);} float getValueFloat(long i) {return data_->getValueFloat(i);} double getValueDouble(long i) {return data_->getValueDouble(i);} int getValueMask(long i) {return data_->getValueMask(i);} void setClip(double l, double h) {data_->setClip(l,h);} const char* getMin() {return data_ ? data_->getMin() : NULL;} const char* getMinX() {return data_ ? data_->getMinX() : NULL;} const char* getMinY() {return data_ ? data_->getMinY() : NULL;} const char* getMax() {return data_ ? data_->getMax() : NULL;} const char* getMaxX() {return data_ ? data_->getMaxX() : NULL;} const char* getMaxY() {return data_ ? data_->getMaxY() : NULL;} const char* getLow() {return data_ ? data_->getLow() : NULL;} const char* getHigh() {return data_ ? data_->getHigh() : NULL;} double min() {return data_ ? data_->min() : 0;} Vector minXY() {return data_ ? data_->minXY() : Vector();} double max() {return data_ ? data_->max() : 0;} Vector maxXY() {return data_ ? data_->maxXY() : Vector();} double low() {return data_ ? data_->low() : 0;} double high() {return data_ ? data_->high() : 0;} void updateClip(FrScale*); #ifndef __WIN32 void updateClip(FrScale* fr, pthread_t* thread, t_clip_arg* targ); #endif int hasDATAMIN() {return data_ ? data_->hasDATAMIN() : 0;} int hasDATASEC() {return keyDATASEC;} int hasIRAFMIN() {return data_ ? data_->hasIRAFMIN() : 0;} void hist(double* b, int l, double mn, double mx, FrScale::SecMode ds) {data_->hist(b,l,mn,mx,getDataParams(ds));} char* display(FitsHead*); char* displayHeader(); char* displayPrimary(); char* displayWCS(); FitsHead* head() {return image_->head();} char* getKeyword(const char* key) {return fits_->getKeyword(key);} int findKeyword(const char*); int saveFitsPrimHeader(OutFitsStream& str) {return image_ ? image_->saveFitsPrimHeader(str) : 0;} int saveFitsXtHeader(OutFitsStream& str, int dd) {return image_ ? image_->saveFitsXtHeader(str, dd) : 0;} int saveFitsHeader(OutFitsStream& str, int dd) {return image_ ? image_->saveFitsHeader(str, dd) : 0;} int saveFits(OutFitsStream& str) {return image_ ? image_->saveFits(str) : 0;} int saveFitsPad(OutFitsStream& str, size_t cnt, char fil) {return image_ ? image_->saveFitsPad(str, cnt, fil) : 0;} int saveFitsTable(OutFitsStream& str) {return fits_ ? fits_->saveFitsTable(str) : 0;} int saveArray(OutFitsStream& str, FitsFile::ArchType endian) {return image_ ? image_->saveArray(str, endian) : 0;} int saveFitsIISHeader(OutFitsStream& str) {return image_ ? image_->saveFitsIISHeader(str) : 0;} int saveFitsIIS(OutFitsStream& str) {return image_ ? image_->saveFitsIIS(str,iisz_) : 0;} const Matrix& wcsToRef() {return wcsToRef_;} void setwcsToRef(Matrix mm) {wcsToRef_ = mm;} }; // Fits class FitsImageFitsAlloc : public FitsImage { public: FitsImageFitsAlloc(Context*, Tcl_Interp*, const char*, const char*, FitsFile::FlushMode, int); }; class FitsImageFitsAllocGZ : public FitsImage { public: FitsImageFitsAllocGZ(Context*, Tcl_Interp*, const char*, const char*, FitsFile::FlushMode, int); }; class FitsImageFitsChannel : public FitsImage { public: FitsImageFitsChannel(Context*, Tcl_Interp*, const char*, const char*, FitsFile::FlushMode, int); }; class FitsImageFitsMMap : public FitsImage { public: FitsImageFitsMMap(Context*, Tcl_Interp*, const char*, int); }; class FitsImageFitsSMMap : public FitsImage { public: FitsImageFitsSMMap(Context*, Tcl_Interp*, const char*, const char*, int); }; class FitsImageFitsMMapIncr : public FitsImage { public: FitsImageFitsMMapIncr(Context*, Tcl_Interp*, const char*, int); }; class FitsImageFitsShare : public FitsImage { public: FitsImageFitsShare(Context*, Tcl_Interp*, Base::ShmType, int, const char*, int); }; class FitsImageFitsSShare : public FitsImage { public: FitsImageFitsSShare(Context*, Tcl_Interp*, Base::ShmType, int, int, const char*, int); }; class FitsImageFitsSocket : public FitsImage { public: FitsImageFitsSocket(Context*, Tcl_Interp*, int, const char*, FitsFile::FlushMode, int); }; class FitsImageFitsSocketGZ : public FitsImage { public: FitsImageFitsSocketGZ(Context*, Tcl_Interp*, int, const char*, FitsFile::FlushMode, int); }; class FitsImageFitsVar : public FitsImage { public: FitsImageFitsVar(Context*, Tcl_Interp*, const char*, const char*, int); }; class FitsImageFitsOrder : public FitsImage { public: FitsImageFitsOrder(Context*, Tcl_Interp*, FitsImage*, FitsHead*, char*, size_t, int); }; // Fits Next class FitsImageFitsNextAlloc : public FitsImage { public: FitsImageFitsNextAlloc(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageFitsNextAllocGZ : public FitsImage { public: FitsImageFitsNextAllocGZ(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageFitsNextChannel : public FitsImage { public: FitsImageFitsNextChannel(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageFitsNextMMap : public FitsImage { public: FitsImageFitsNextMMap(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageFitsNextSMMap : public FitsImage { public: FitsImageFitsNextSMMap(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageFitsNextMMapIncr : public FitsImage { public: FitsImageFitsNextMMapIncr(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageFitsNextShare : public FitsImage { public: FitsImageFitsNextShare(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageFitsNextSShare : public FitsImage { public: FitsImageFitsNextSShare(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageFitsNextSocket : public FitsImage { public: FitsImageFitsNextSocket(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageFitsNextSocketGZ : public FitsImage { public: FitsImageFitsNextSocketGZ(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageFitsNextVar : public FitsImage { public: FitsImageFitsNextVar(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageFitsNextHist : public FitsImage { public: FitsImageFitsNextHist(Context*, Tcl_Interp*, FitsImage*, FitsFile*, int); }; class FitsImageFitsNextPost : public FitsImage { public: FitsImageFitsNextPost(Context*, Tcl_Interp*, FitsImage*, FitsFile*, int); }; class FitsImageFitsNextOrder : public FitsImage { public: FitsImageFitsNextOrder(Context*, Tcl_Interp*, FitsImage*, FitsFile*, int); }; // Array class FitsImageArrAlloc : public FitsImage { public: FitsImageArrAlloc(Context*, Tcl_Interp*, const char*, const char*, FitsFile::FlushMode, int); }; class FitsImageArrAllocGZ : public FitsImage { public: FitsImageArrAllocGZ(Context*, Tcl_Interp*, const char*, const char*, FitsFile::FlushMode, int); }; class FitsImageArrChannel : public FitsImage { public: FitsImageArrChannel(Context*, Tcl_Interp*, const char*, const char*, FitsFile::FlushMode, int); }; class FitsImageArrMMap : public FitsImage { public: FitsImageArrMMap(Context*, Tcl_Interp*, const char*, int); }; class FitsImageArrMMapIncr : public FitsImage { public: FitsImageArrMMapIncr(Context*, Tcl_Interp*, const char*, int); }; class FitsImageArrShare : public FitsImage { public: FitsImageArrShare(Context*, Tcl_Interp*, Base::ShmType, int, const char*, int); }; class FitsImageArrSocket : public FitsImage { public: FitsImageArrSocket(Context*, Tcl_Interp*, int, const char*, FitsFile::FlushMode, int); }; class FitsImageArrSocketGZ : public FitsImage { public: FitsImageArrSocketGZ(Context*, Tcl_Interp*, int, const char*, FitsFile::FlushMode, int); }; class FitsImageArrVar : public FitsImage { public: FitsImageArrVar(Context*, Tcl_Interp*, const char*, const char*, int); }; // ENVI class FitsImageENVISMMap : public FitsImage { public: FitsImageENVISMMap(Context*, Tcl_Interp*, const char*, const char*, int); }; // NRRD class FitsImageNRRDAlloc : public FitsImage { public: FitsImageNRRDAlloc(Context*, Tcl_Interp*, const char*, const char*, FitsFile::FlushMode, int); }; class FitsImageNRRDChannel : public FitsImage { public: FitsImageNRRDChannel(Context*, Tcl_Interp*, const char*, const char*, FitsFile::FlushMode, int); }; class FitsImageNRRDMMap : public FitsImage { public: FitsImageNRRDMMap(Context*, Tcl_Interp*, const char*, int); }; class FitsImageNRRDShare : public FitsImage { public: FitsImageNRRDShare(Context*, Tcl_Interp*, Base::ShmType, int, const char*, int); }; class FitsImageNRRDSocket : public FitsImage { public: FitsImageNRRDSocket(Context*, Tcl_Interp*, int, const char*, FitsFile::FlushMode, int); }; class FitsImageNRRDVar : public FitsImage { public: FitsImageNRRDVar(Context*, Tcl_Interp*, const char*, const char*, int); }; // Photo class FitsImagePhoto : public FitsImage { public: FitsImagePhoto(Context*, Tcl_Interp*, const char*, const char*, int); }; class FitsImagePhotoCube : public FitsImage { public: FitsImagePhotoCube(Context*, Tcl_Interp*, const char*, const char*, int); }; class FitsImagePhotoCubeNext : public FitsImage { public: FitsImagePhotoCubeNext(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; // Mosaic class FitsImageMosaicAlloc : public FitsImage { public: FitsImageMosaicAlloc(Context*, Tcl_Interp*, const char*, const char*, FitsFile::FlushMode, int); }; class FitsImageMosaicAllocGZ : public FitsImage { public: FitsImageMosaicAllocGZ(Context*, Tcl_Interp*, const char*, const char*, FitsFile::FlushMode, int); }; class FitsImageMosaicChannel : public FitsImage { public: FitsImageMosaicChannel(Context*, Tcl_Interp*, const char*, const char*, FitsFile::FlushMode, int); }; class FitsImageMosaicMMap : public FitsImage { public: FitsImageMosaicMMap(Context*, Tcl_Interp*, const char*, int); }; class FitsImageMosaicMMapIncr : public FitsImage { public: FitsImageMosaicMMapIncr(Context*, Tcl_Interp*, const char*, int); }; class FitsImageMosaicShare : public FitsImage { public: FitsImageMosaicShare(Context*, Tcl_Interp*, Base::ShmType, int, const char*, int); }; class FitsImageMosaicSocket : public FitsImage { public: FitsImageMosaicSocket(Context*, Tcl_Interp*, int, const char*, FitsFile::FlushMode, int); }; class FitsImageMosaicSocketGZ : public FitsImage { public: FitsImageMosaicSocketGZ(Context*, Tcl_Interp*, int, const char*, FitsFile::FlushMode, int); }; class FitsImageMosaicVar : public FitsImage { public: FitsImageMosaicVar(Context*, Tcl_Interp*, const char*, const char*, int); }; // Mosaic Next class FitsImageMosaicNextAlloc : public FitsImage { public: FitsImageMosaicNextAlloc(Context*, Tcl_Interp*, const char*, FitsFile*, FitsFile::FlushMode, int); }; class FitsImageMosaicNextAllocGZ : public FitsImage { public: FitsImageMosaicNextAllocGZ(Context*, Tcl_Interp*, const char*, FitsFile*, FitsFile::FlushMode, int); }; class FitsImageMosaicNextChannel : public FitsImage { public: FitsImageMosaicNextChannel(Context*, Tcl_Interp*, const char*, FitsFile*, FitsFile::FlushMode, int); }; class FitsImageMosaicNextMMap : public FitsImage { public: FitsImageMosaicNextMMap(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageMosaicNextMMapIncr : public FitsImage { public: FitsImageMosaicNextMMapIncr(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageMosaicNextShare : public FitsImage { public: FitsImageMosaicNextShare(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; class FitsImageMosaicNextSocket : public FitsImage { public: FitsImageMosaicNextSocket(Context*, Tcl_Interp*, const char*, FitsFile*, FitsFile::FlushMode, int); }; class FitsImageMosaicNextSocketGZ : public FitsImage { public: FitsImageMosaicNextSocketGZ(Context*, Tcl_Interp*, const char*, FitsFile*, FitsFile::FlushMode, int); }; class FitsImageMosaicNextVar : public FitsImage { public: FitsImageMosaicNextVar(Context*, Tcl_Interp*, const char*, FitsFile*, int); }; // IIS class FitsImageIIS : public FitsImage { public: FitsImageIIS(Context*, Tcl_Interp*, int, int); void iisErase(); char* iisGet(int xx, int yy, int dx, int dy); void iisSet(const char* src, int xx, int yy, int dx, int dy); void iisWCS(const Matrix&, const Vector&, int); }; #endif saods9/tksao/frame/fitsmap.C000644 000765 000000 00000020031 12766033655 016357 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "fitsimage.h" // Map Point Vector FitsImage::mapFromRef(const Vector& vv, Coord::CoordSystem out, Coord::SkyFrame sky) { switch (out) { case Coord::IMAGE: return vv * refToImage; case Coord::PHYSICAL: return vv * refToPhysical; case Coord::AMPLIFIER: return vv * refToAmplifier; case Coord::DETECTOR: return vv * refToDetector; default: if (hasWCS(out)) return pix2wcs(vv * refToImage, out, sky); } maperr =1; return vv; } void FitsImage::mapFromRef(const Vector& vv, Coord::CoordSystem out, Coord::SkyFrame sky, Coord::SkyFormat format, char* buf) { if (hasWCS(out)) { pix2wcs(vv * refToImage, out, sky, format, buf); return; } maperr =1; strcpy(buf,""); } Vector FitsImage::mapToRef(const Vector& vv, Coord::CoordSystem in, Coord::SkyFrame sky) { switch (in) { case Coord::IMAGE: return vv * imageToRef; case Coord::PHYSICAL: return vv * physicalToRef; case Coord::AMPLIFIER: return vv * amplifierToRef; case Coord::DETECTOR: return vv * detectorToRef; default: if (hasWCS(in)) return wcs2pix(vv, in, sky) * imageToRef; } maperr =1; return vv; } void FitsImage::listFromRef(ostream& str, const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: str << setprecision(8) << mapFromRef(vv, sys); break; default: if (hasWCS(sys)) { if (hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: str << setprecision(10) << mapFromRef(vv, sys, sky); break; case Coord::SEXAGESIMAL: { char buf[64]; buf[0] = '\0'; mapFromRef(vv, sys, sky, format, buf); // grap only the first two items char* ptr = buf; while (*ptr) ptr++; while (*ptr != ' ' && ptr >= buf) ptr--; *ptr = '\0'; str << buf; } break; } } else str << setprecision(8) << mapFromRef(vv, sys); } else str << "0 0"; } } // Map Length double FitsImage::mapLenFromRef(double dd, Coord::CoordSystem sys, Coord::SkyDist dist) { Vector rr = mapLenFromRef(Vector(dd,0),sys,dist); return rr[0]; } Vector FitsImage::mapLenFromRef(const Vector& vv, Coord::CoordSystem sys, Coord::SkyDist dist) { // really from image coords switch (sys) { case Coord::IMAGE: return mapLen(vv,refToImage); case Coord::PHYSICAL: return mapLen(vv,refToPhysical); case Coord::AMPLIFIER: return mapLen(vv,refToPhysical * physicalToAmplifier); case Coord::DETECTOR: return mapLen(vv,refToPhysical * physicalToDetector); default: if (hasWCS(sys)) { Vector cd = getWCScdelt(sys); Vector in = mapLen(vv,refToImage); Vector out = Vector(in[0]*cd[0], in[1]*cd[1]).abs(); if (hasWCSCel(sys)) { switch (dist) { case Coord::DEGREE: break; case Coord::ARCMIN: out *= 60; break; case Coord::ARCSEC: out *=60*60; break; } } return out; } } maperr =1; return Vector(); } double FitsImage::mapLenToRef(double dd, Coord::CoordSystem sys, Coord::SkyDist dist) { Vector rr = mapLenToRef(Vector(dd,0), sys, dist); return rr[0]; } Vector FitsImage::mapLenToRef(const Vector& vv, Coord::CoordSystem sys, Coord::SkyDist dist) { switch (sys) { case Coord::IMAGE: return mapLen(vv,imageToRef); case Coord::PHYSICAL: return mapLen(vv,physicalToRef); case Coord::AMPLIFIER: return mapLen(vv,amplifierToPhysical * physicalToRef); case Coord::DETECTOR: return mapLen(vv,detectorToPhysical * physicalToRef); default: if (hasWCS(sys)) { Vector cd = getWCScdelt(sys); Vector in = mapLen(vv,refToImage); Vector out = Vector(in[0]/cd[0], in[1]/cd[1]).abs(); if (hasWCSCel(sys)) { switch (dist) { case Coord::DEGREE: break; case Coord::ARCMIN: out /= 60; break; case Coord::ARCSEC: out /= 60*60; break; } } return out; } } maperr =1; return Vector(); } void FitsImage::listLenFromRef(ostream& str, double dd, Coord::CoordSystem sys, Coord::SkyDist dist) { double out = mapLenFromRef(dd, sys, dist); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: str << setprecision(8) << out; break; default: if (hasWCS(sys)) { if (hasWCSCel(sys)) { str << fixed; switch (dist) { case Coord::DEGREE: str << setprecision(7); break; case Coord::ARCMIN: str << setprecision(5); break; case Coord::ARCSEC: str << setprecision(3); break; } str << out; } else str << setprecision(8) << out; } else str << "0"; } } void FitsImage::listLenFromRef(ostream& str, const Vector& vv, Coord::CoordSystem sys, Coord::SkyDist dist) { Vector out = mapLenFromRef(vv, sys, dist); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: str << setprecision(8) << out; break; default: if (hasWCS(sys)) { if (hasWCSCel(sys)) { str << fixed; switch (dist) { case Coord::DEGREE: str << setprecision(7); break; case Coord::ARCMIN: str << setprecision(5); break; case Coord::ARCSEC: str << setprecision(3); break; } str << out; } else str << setprecision(8) << out; } else str << "0 0"; } } // Map Distance double FitsImage::mapDistFromRef(const Vector& vv1, const Vector& vv2, Coord::CoordSystem sys, Coord::SkyDist dist) { switch (sys) { case Coord::IMAGE: { Vector v1 = vv1 * refToImage; Vector v2 = vv2 * refToImage; return (v2-v1).length(); } case Coord::PHYSICAL: { Vector v1 = vv1 * refToPhysical; Vector v2 = vv2 * refToPhysical; return (v2-v1).length(); } case Coord::AMPLIFIER: { Vector v1 = vv1 * refToPhysical * physicalToAmplifier; Vector v2 = vv2 * refToPhysical * physicalToAmplifier; return (v2-v1).length(); } case Coord::DETECTOR: { Vector v1 = vv1 * refToPhysical * physicalToDetector; Vector v2 = vv2 * refToPhysical * physicalToDetector; return (v2-v1).length(); } default: if (hasWCS(sys)) { Vector v1 = pix2wcs(vv1 * refToImage, sys, Coord::FK5); Vector v2 = pix2wcs(vv2 * refToImage, sys, Coord::FK5); if (hasWCSCel(sys)) { switch (dist) { case Coord::DEGREE: return wcsdist(v1,v2,sys); case Coord::ARCMIN: return wcsdist(v1,v2,sys)*60; case Coord::ARCSEC: return wcsdist(v1,v2,sys)*60*60; } } else return wcsdist(v1,v2,sys); } } maperr =1; return 0; } void FitsImage::listDistFromRef(ostream& str, const Vector& vv1, const Vector& vv2, Coord::CoordSystem sys, Coord::SkyDist dist) { double out = mapDistFromRef(vv1, vv2, sys, dist); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: str << setprecision(8) << out; break; default: if (hasWCS(sys)) { if (hasWCSCel(sys)) { str << fixed; switch (dist) { case Coord::DEGREE: str << setprecision(7); break; case Coord::ARCMIN: str << setprecision(5); break; case Coord::ARCSEC: str << setprecision(3); break; } str << out; } else str << setprecision(8) << out; } else str << "0 0"; } } // 3D double FitsImage::mapFromRef3axis(double vv, Coord::CoordSystem out, int ss) { switch (out) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::AMPLIFIER: case Coord::DETECTOR: return vv+.5; default: return pix2wcsx(vv+.5,out,ss); } } double FitsImage::mapToRef3axis(double vv, Coord::CoordSystem in, int ss) { switch (in) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::AMPLIFIER: case Coord::DETECTOR: return vv-.5; default: return wcs2pixx(vv,in,ss) -.5; } } saods9/tksao/frame/fitsmask.C000644 000765 000000 00000001772 12705446247 016546 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "fitsmask.h" #include "base.h" #include "fitsimage.h" FitsMask::FitsMask(Base* p, FitsImage* fits, char* clr, int mrk) : parent_(p), mask_(fits) { current_ = mask_; mptr_ = current_; colorName_ = dupstr(clr); color_ = parent_->getXColor(colorName_); parent_->encodeTrueColor(color_, trueColor_); mark_ = mrk; next_ = NULL; previous_ = NULL; } FitsMask::~FitsMask() { if (colorName_) delete [] colorName_; FitsImage* ptr = mask_; while (ptr) { // better not have more that one slice FitsImage* sptr = ptr->nextSlice(); while (sptr) { FitsImage* stmp = sptr->nextSlice(); delete sptr; sptr = stmp; } FitsImage* tmp = ptr->nextMosaic(); delete ptr; ptr = tmp; } } void FitsMask::nextMosaic() { if (mptr_) mptr_ = mptr_->nextMosaic(); } saods9/tksao/frame/fitsmask.h000644 000765 000000 00000002051 12705446247 016602 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsmask_h__ #define __fitsmask_h__ #include class Base; class FitsImage; class FitsMask { private: Base* parent_; FitsImage* mask_; FitsImage* current_; FitsImage* mptr_; char* colorName_; XColor* color_; char trueColor_[4]; int mark_; protected: FitsMask* previous_; FitsMask* next_; public: FitsMask(Base*, FitsImage*, char*, int); virtual ~FitsMask(); FitsImage* mask() {return mask_;} FitsImage* current() {return current_;} FitsImage* mptr() {return mptr_;} XColor* color() {return color_;} char* trueColor() {return trueColor_;} int mark() {return mark_;} void initMosaic() {mptr_ = current_;} void nextMosaic(); void nextSlice(); FitsMask* previous() {return previous_;} void setPrevious(FitsMask* m) {previous_ = m;} FitsMask* next() {return next_;} void setNext(FitsMask* m) {next_ = m;} }; #endif saods9/tksao/frame/fitsnrrd.C000644 000765 000000 00000001751 12705446247 016555 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "fitsimage.h" #include "nrrdgzip.h" void FitsImage::initNRRD() { if (post_) delete post_; post_ = NULL; switch (fits_->pEncoding()) { case FitsFile::RAW: break; case FitsFile::GZIP: switch (fits_->pBitpix()) { case 8: post_ = new FitsNRRDGzipm(fits_); break; case 16: post_ = new FitsNRRDGzipm(fits_); break; case -16: post_ = new FitsNRRDGzipm(fits_); break; case 32: post_ = new FitsNRRDGzipm(fits_); break; case 64: post_ = new FitsNRRDGzipm(fits_); break; case -32: post_ = new FitsNRRDGzipm(fits_); break; case -64: post_ = new FitsNRRDGzipm(fits_); break; } break; default: break; } return; } saods9/tksao/frame/fr3dcommand.C000644 000765 000000 00000034271 12765575673 017136 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "frame3dbase.h" #include "fitsimage.h" #include "context.h" #include "marker.h" void Frame3dBase::binToFitCmd() { if (!keyContext->fits) return; Vector3d dim(keyContext->fits->getHistDim(), keyContext->binDepth()); double bf = 1/calcZoom3d(dim, Vector(options->width,options->height)); // round up to next power of 2 if (bf < 1) keyContext->setBinToFactor(Vector(1,1)); else { int p=1; while (psetBinToFactor(Vector(p,p)); } Matrix mm = keyContext->binCursor(); updateBin(mm); } void Frame3dBase::blockToFitCmd() { if (!keyContext->fits) return; Vector3d ss(keyContext->fits->osize(),keyContext->naxis(2)); double bf = 1/calcZoom3d(ss, Vector(options->width,options->height)); // round down to next power of 2 Vector vv; if (bf < 1) vv = keyContext->setBlockToFactor(Vector(1,1)); else { int p=1; while (psetBlockToFactor(Vector(p,p)); } keyContext->block(); keyContext->analysis(); updateBlock(vv); } void Frame3dBase::crop3dBeginCmd(const Vector& vv, int which) { // which =0 (zmin) which =1 (zmax) if (!keyContext->fits) return; cropBegin = vv * Scale(zoom_).invert(); cropEnd = vv * Scale(zoom_).invert(); // params is a BBOX in DATA coords 0-n FitsZBound* zparams = keyContext->getDataParams(keyContext->secMode()); if (!which) cropsl_ = zparams->zmin; else cropsl_ = zparams->zmax; } void Frame3dBase::crop3dMotionCmd(const Vector& vv, int which) { // which =0 (zmin) which =1 (zmax) if (!keyContext->fits) return; // params is a BBOX in DATA coords 0-n FitsBound* params = keyContext->fits->getDataParams(keyContext->secMode()); FitsZBound* zparams = keyContext->getDataParams(keyContext->secMode()); Vector ss(params->xmin,params->ymin); Vector tt(params->xmax,params->ymax); // erase if (cropBegin[0]!=cropEnd[0] || cropBegin[1]!=cropEnd[1]) { Vector ll = mapFromRef3d(ss,Coord::CANVAS,cropsl_); Vector lr = mapFromRef3d(Vector(tt[0],ss[1]),Coord::CANVAS,cropsl_); Vector ur = mapFromRef3d(tt,Coord::CANVAS,cropsl_); Vector ul = mapFromRef3d(Vector(ss[0],tt[1]),Coord::CANVAS,cropsl_); BBox bb(ll); bb.bound(lr); bb.bound(ur); bb.bound(ul); redrawNow(bb.expand(2)); } cropEnd = vv * Scale(zoom_).invert(); Vector diff = cropEnd-cropBegin; if (!which) cropsl_ = diff[0]+zparams->zmin; else cropsl_ = diff[0]+zparams->zmax; // this will be incorrect for multiple ext/file cubes double depth = keyContext->naxis(2); if (!which) { if (cropsl_<0) cropsl_ = 0; if (cropsl_>zparams->zmax-1) cropsl_ = zparams->zmax-1; } else { if (cropsl_zmin+1) cropsl_ = zparams->zmin+1; if (cropsl_>depth) cropsl_ = depth; } // and draw to window { Vector ll = mapFromRef3d(ss,Coord::WINDOW,cropsl_); Vector lr = mapFromRef3d(Vector(tt[0],ss[1]),Coord::WINDOW,cropsl_); Vector ur = mapFromRef3d(tt,Coord::WINDOW,cropsl_); Vector ul = mapFromRef3d(Vector(ss[0],tt[1]),Coord::WINDOW,cropsl_); XDrawLine(display,Tk_WindowId(tkwin),selectGCXOR,ll[0],ll[1],lr[0],lr[1]); XDrawLine(display,Tk_WindowId(tkwin),selectGCXOR,lr[0],lr[1],ur[0],ur[1]); XDrawLine(display,Tk_WindowId(tkwin),selectGCXOR,ur[0],ur[1],ul[0],ul[1]); XDrawLine(display,Tk_WindowId(tkwin),selectGCXOR,ul[0],ul[1],ll[0],ll[1]); } } void Frame3dBase::crop3dEndCmd(const Vector& vv, int which) { // which =0 (zmin) which =1 (zmax) if (!keyContext->fits) return; // params is a BBOX in DATA coords 0-n FitsBound* params = keyContext->fits->getDataParams(keyContext->secMode()); FitsZBound* zparams = keyContext->getDataParams(keyContext->secMode()); Vector ss(params->xmin,params->ymin); Vector tt(params->xmax,params->ymax); // erase if (cropBegin[0]!=cropEnd[0] || cropBegin[1]!=cropEnd[1]) { Vector ll = mapFromRef3d(ss,Coord::CANVAS,cropsl_); Vector lr = mapFromRef3d(Vector(tt[0],ss[1]),Coord::CANVAS,cropsl_); Vector ur = mapFromRef3d(tt,Coord::CANVAS,cropsl_); Vector ul = mapFromRef3d(Vector(ss[0],tt[1]),Coord::CANVAS,cropsl_); BBox bb(ll); bb.bound(lr); bb.bound(ur); bb.bound(ul); redrawNow(bb.expand(2)); } cropEnd = vv * Scale(zoom_).invert(); Vector diff = cropEnd-cropBegin; if (!which) cropsl_ = diff[0]+zparams->zmin; else cropsl_ = diff[0]+zparams->zmax; // this will be incorrect for multiple ext/file cubes double depth = keyContext->naxis(2); if (!which) { if (cropsl_<0) cropsl_ = 0; if (cropsl_>zparams->zmax-1) cropsl_ = zparams->zmax-1; } else { if (cropsl_zmin+1) cropsl_ = zparams->zmin+1; if (cropsl_>depth) cropsl_ = depth; } if (cropBegin[0]!=cropEnd[0] || cropBegin[1]!=cropEnd[1]) { keyContext->setSecMode(FrScale::CROPSEC); // params is a BBOX in DATA coords 0-n if (!which) keyContext->setCrop3dParams(int(cropsl_+.5),zparams->zmax); else keyContext->setCrop3dParams(zparams->zmin,int(cropsl_+.5)); // set current slice if needed // setSlice() IMAGE (ranges 1-n) // context->slice() IMAGE (ranges 1-n) // cropsl_ ranges coords 0-n double sl = keyContext->slice(2)-.5; if (!which) { if (sl<=cropsl_) setSlice(2,int(cropsl_+1.5)); } else { if (sl>cropsl_) setSlice(2,int(cropsl_)); } } else { keyContext->resetSecMode(); keyContext->setCrop3dParams(); FitsImage* sptr = keyContext->fits; while (sptr) { sptr->setCropParams(keyContext->datasec()); sptr = sptr->nextSlice(); } } keyContext->updateClip(); keyContext->updateContours(); updateColorScale(); update(MATRIX); updateMarkerCBs(&userMarkers); updateMarkerCBs(&catalogMarkers); // updateMarkerCBs(&analysisMarkers); } void Frame3dBase::get3dBorderCmd() { if (border_) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Frame3dBase::get3dBorderColorCmd() { Tcl_AppendResult(interp, borderColorName_, NULL); } void Frame3dBase::get3dCompassCmd() { if (compass_) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Frame3dBase::get3dCompassColorCmd() { Tcl_AppendResult(interp, compassColorName_, NULL); } void Frame3dBase::get3dHighliteCmd() { if (highlite_) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Frame3dBase::get3dHighliteColorCmd() { Tcl_AppendResult(interp, highliteColorName_, NULL); } void Frame3dBase::get3dRenderMethodCmd() { ostringstream str; switch (renderMethod_) { case MIP: str << "mip" << ends; break; case AIP: str << "aip" << ends; break; } Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Frame3dBase::get3dScaleCmd() { ostringstream str; str << zscale_ << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Frame3dBase::get3dViewCmd() { ostringstream str; str << m180To180(radToDeg(az_)) << ' ' << m180To180(radToDeg(el_)) << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Frame3dBase::get3dViewPointCmd() { ostringstream str; str << vp_ << viewCursor_ << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Frame3dBase::get3dRenderBackgroundCmd() { switch (render_) { case NONE: Tcl_AppendResult(interp, "none", NULL); break; case AZIMUTH: Tcl_AppendResult(interp, "azimuth", NULL); break; case ELEVATION: Tcl_AppendResult(interp, "elevation", NULL); break; } } void Frame3dBase::getCursorCmd(Coord::InternalSystem sys) { Vector aa = Vector(options->width,options->height)/2.; Vector bb = mapToRef(aa,Coord::WIDGET); ostringstream str; str << mapFromRef(bb, sys) << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Frame3dBase::getCursorCmd(Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { if (keyContext->fits) { Vector aa = Vector(options->width,options->height)/2.; Vector bb = mapToRef(aa,Coord::WIDGET); printFromRef(keyContext->fits, bb, sys, sky, format); } } void Frame3dBase::gridCmd(Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, Grid::GridType type, const char* ops, const char* vars) { if (grid) delete grid; switch (type) { case Grid::ANALYSIS: grid = new Grid25d(this, sys, sky, format, type, ops, vars); break; case Grid::PUBLICATION: grid = new Grid3d(this, sys, sky, format, type, ops, vars); break; } update(PIXMAP); } void Frame3dBase::panCmd(const Vector& v1, const Vector& v2) { viewCursor_ -= (v1-v2)*Scale(1/zoom_[0],1/zoom_[1]); update(MATRIX); } void Frame3dBase::panCmd(const Vector& vv) { viewCursor_ -= vv*Scale(1/zoom_[0],1/zoom_[1]); update(MATRIX); } void Frame3dBase::panCmd(const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky) { if (!keyContext->fits) return; Vector cc = Vector(options->width,options->height)/2.; Vector dd = mapToRef(cc,Coord::WIDGET); Vector uu = keyContext->fits->mapFromRef(dd, sys, sky); uu += vv; Vector ee = keyContext->fits->mapToRef(uu, sys, sky); Vector ff = mapFromRef(ee,Coord::WIDGET); viewCursor_ += (cc-ff)*Scale(1/zoom_[0],1/zoom_[1]); update(MATRIX); } void Frame3dBase::panToCmd(const Vector& vv) { Vector dd = Vector(options->width,options->height)/2. - vv*canvasToWidget; viewCursor_ += dd*Scale(1/zoom_[0],1/zoom_[1]); update(MATRIX); } void Frame3dBase::panToCmd(const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky) { if (!keyContext->fits) return; Vector aa = keyContext->fits->mapToRef(vv, sys, sky); Vector dd = Vector(options->width,options->height)/2. - mapFromRef(aa,Coord::WIDGET); viewCursor_ += dd*Scale(1/zoom_[0],1/zoom_[1]); update(MATRIX); } void Frame3dBase::panBBoxCmd(const Vector& vv) { // vv is center of panBBox in panner coordinate Vector aa = vv*pannerToWidget3d; Vector dd = Vector(options->width,options->height)/2. - aa; viewCursor_ += dd*Scale(1/zoom_[0],1/zoom_[1]); update(MATRIX); } void Frame3dBase::panEndCmd(const Vector& vv) { if (panPM) Tk_FreePixmap(display, panPM); panPM = 0; Vector dd = vv*canvasToWidget - panCursor*canvasToWidget; viewCursor_ += dd*Scale(1/zoom_[0],1/zoom_[1]); update(MATRIX); } void Frame3dBase::rotateBeginCmd() { // save the current rotation rotateRotation = rotation; } void Frame3dBase::rotateMotionCmd(double angle) { rotation = rotateRotation + angle; update(MATRIX); } void Frame3dBase::rotateEndCmd() { update(MATRIX); } void Frame3dBase::set3dBorderCmd(int hh) { border_ = hh; update(PIXMAP); } void Frame3dBase::set3dBorderColorCmd(const char* clr) { if (borderColorName_) delete [] borderColorName_; borderColorName_ = dupstr(clr); if (threedGC) XSetForeground(display, threedGC, getColor(borderColorName_)); update(PIXMAP); } void Frame3dBase::set3dCompassCmd(int hh) { compass_ = hh; update(PIXMAP); } void Frame3dBase::set3dCompassColorCmd(const char* clr) { if (compassColorName_) delete [] compassColorName_; compassColorName_ = dupstr(clr); if (threedGC) XSetForeground(display, threedGC, getColor(compassColorName_)); update(PIXMAP); } void Frame3dBase::set3dHighliteCmd(int hh) { highlite_ = hh; update(PIXMAP); } void Frame3dBase::set3dHighliteColorCmd(const char* clr) { if (highliteColorName_) delete [] highliteColorName_; highliteColorName_ = dupstr(clr); if (threedGC) XSetForeground(display, threedGC, getColor(highliteColorName_)); update(PIXMAP); } void Frame3dBase::set3dRenderMethodCmd(int m) { RenderMethod mm = (RenderMethod)m; if (mm!=renderMethod_) { renderMethod_ = mm; update(MATRIX); } } void Frame3dBase::set3dScaleCmd(double ss) { if (zscale_ == ss) return; zscale_ = ss; // just in case if pending az/el preservecache_ =0; update(MATRIX); } void Frame3dBase::set3dViewCmd(float az, float el) { az_ = degToRad(az); el_ = degToRad(el); preservecache_ =1; update(MATRIX); } void Frame3dBase::set3dViewPointCmd(const Vector3d& vv, const Vector& cc) { vp_ = vv; viewCursor_ = cc; update(MATRIX); } void Frame3dBase::set3dRenderBackgroundCmd(int which) { if (which != render_) { render_ = (MotionType)which; cancelDetach(); preservecache_ =1; update(BASE); } } void Frame3dBase::set3dPreserveCmd() { preservecache_ =1; } void Frame3dBase::zoomAboutCmd(const Vector& zz, const Vector& vv) { Vector dd = Vector(options->width,options->height)/2. - vv*canvasToWidget; viewCursor_ += dd*Scale(1/zoom_[0],1/zoom_[1]); Vector az = ((Vector&)zz).abs(); zoom_[0] *= az[0]; zoom_[1] *= az[1]; update(MATRIX); } void Frame3dBase::zoomAboutCmd(const Vector& zz, const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky) { if (!keyContext->fits) return; Vector aa = keyContext->fits->mapToRef(vv, sys, sky); Vector dd = Vector(options->width,options->height)/2. - mapFromRef(aa,Coord::WIDGET); viewCursor_ += dd*Scale(1/zoom_[0],1/zoom_[1]); Vector az = ((Vector&)zz).abs(); zoom_[0] *= az[0]; zoom_[1] *= az[1]; update(MATRIX); } void Frame3dBase::zoomToAboutCmd(const Vector& zz, const Vector& vv) { Vector dd = Vector(options->width,options->height)/2. - vv*canvasToWidget; viewCursor_ += dd*Scale(1/zoom_[0],1/zoom_[1]); zoom_ = ((Vector&)zz).abs(); update(MATRIX); } void Frame3dBase::zoomToAboutCmd(const Vector& zz, const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky) { if (!keyContext->fits) return; Vector aa = keyContext->fits->mapToRef(vv, sys, sky); Vector dd = Vector(options->width,options->height)/2. - mapFromRef(aa,Coord::WIDGET); viewCursor_ += dd*Scale(1/zoom_[0],1/zoom_[1]); zoom_ = ((Vector&)zz).abs(); update(MATRIX); } void Frame3dBase::zoomToFitCmd(double ss) { if (!keyContext->fits) return; centerImage(); Vector3d tt = imageSize3d(keyContext->secMode()); double zz = calcZoom3d(tt,Vector(options->width,options->height)) * ss; zoom_ = Vector(zz,zz); update(MATRIX); } saods9/tksao/frame/fr3dmap.C000644 000765 000000 00000004436 12705446247 016261 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "context.h" #include "frame3dbase.h" #include "fitsimage.h" Vector3d Frame3dBase::mapFromRef3d(const Vector& vv, Coord::InternalSystem sys) { // context->slice() IMAGE (ranges 1-n) double sl = keyContext->slice(2)-.5; return mapFromRef3d(vv,sys,sl); } Vector3d Frame3dBase::mapFromRef3d(const Vector& vv, Coord::InternalSystem sys, double sl) { // note: sl is in REF=DATA coordinates Matrix3d mm; switch (sys) { case Coord::REF: return Vector3d(vv,sl); case Coord::USER: mm = refToUser3d; break; case Coord::WIDGET: mm = refToWidget3d; break; case Coord::CANVAS: mm = refToCanvas3d; break; case Coord::WINDOW: mm = refToWindow3d; break; case Coord::PANNER: mm = refToPanner3d; break; case Coord::MAGNIFIER: mm = refToMagnifier3d; break; default: // na break; } return Vector3d(vv,sl)*mm; } Vector3d Frame3dBase::mapToRef3d(const Vector& vv, Coord::InternalSystem sys) { // context->slice() IMAGE (ranges 1-n) double sl = keyContext->slice(2)-.5; return mapToRef3d(vv,sys,sl); } Vector3d Frame3dBase::mapToRef3d(const Vector& vv, Coord::InternalSystem sys, double sl) { switch (sys) { case Coord::REF: return Vector3d(vv,sl); case Coord::USER: return Vector3d(vv,sl)*userToRef3d; default: break; } // note: sl is in REF=DATA coordinates Vector3d xx = Vector3d(1,0,sl)*refToWidget3d; Vector3d yy = Vector3d(0,1,sl)*refToWidget3d; Vector3d zz = Vector3d(0,0,sl)*refToWidget3d; Vector3d ii=xx-zz; Vector3d jj=yy-zz; Vector3d nn = cross(jj,ii).normalize(); double& a = nn[0]; double& b = nn[1]; double& c = nn[2]; double d = -a*xx[0] -b*xx[1] -c*xx[2]; Vector ww; switch (sys) { case Coord::WIDGET: ww = vv; break; case Coord::CANVAS: ww = vv*canvasToWidget; break; case Coord::WINDOW: ww = vv*windowToWidget; break; case Coord::PANNER: ww = vv*pannerToWidget; break; case Coord::MAGNIFIER: ww = vv*magnifierToWidget; break; default: // na break; } double z = (-a*ww[0] -b*ww[1] -d)/c; return Vector3d(ww,z)*widgetToRef3d; } saods9/tksao/frame/frame.C000644 000765 000000 00000040754 12754663543 016026 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "frame.h" #include "fitsimage.h" #include "ps.h" #include "sigbus.h" // Frame Member Functions Frame::Frame(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : FrameBase(i,c,item) { context = new Context(); context->parent(this); currentContext = context; keyContext = context; keyContextSet =1; colormapData =NULL; cmapID = 1; bias = 0.5; contrast = 1.0; colorCount = 0; colorScale = NULL; colorCells = NULL; } Frame::~Frame() { if (context) delete context; if (colorScale) delete colorScale; if (colorCells) delete [] colorCells; if (colormapData) delete [] colormapData; } unsigned char* Frame::blend(unsigned char* src, unsigned char* msk, int width, int height) { unsigned char* sptr = src; // 3 component unsigned char* mptr = msk; // 4 component, premultiplied for (int jj=0; jjred; *ptr++ = (unsigned char)bgColor->green; *ptr++ = (unsigned char)bgColor->blue; } } if (!context->cfits) return img; // basics int length = colorScale->size() - 1; const unsigned char* table = colorScale->psColors(); FitsImage* sptr = context->cfits; int mosaic = isMosaic(); // variable double* mm = sptr->matrixToData(sys).mm(); FitsBound* params = sptr->getDataParams(context->secMode()); int srcw = sptr->width(); double ll = sptr->low(); double hh = sptr->high(); double diff = hh - ll; // main loop unsigned char* dest = img; SETSIGBUS for (long jj=0; jjcfits; mm = sptr->matrixToData(sys).mm(); params = sptr->getDataParams(context->secMode()); srcw = sptr->width(); ll = sptr->low(); hh = sptr->high(); diff = hh - ll; } do { double xx = ii*mm[0] + jj*mm[3] + mm[6]; double yy = ii*mm[1] + jj*mm[4] + mm[7]; if (xx>=params->xmin && xxxmax && yy>=params->ymin && yyymax) { double value = sptr->getValueDouble(long(yy)*srcw + long(xx)); if (isfinite(diff) && isfinite(value)) { if (value <= ll) { *(dest+2) = table[0]; *(dest+1) = table[1]; *dest = table[2]; } else if (value >= hh) { *(dest+2) = table[length*3]; *(dest+1) = table[length*3+1]; *dest = table[length*3+2]; } else { int l = (int)(((value - ll)/diff * length) + .5); *(dest+2) = table[l*3]; *(dest+1) = table[l*3+1]; *dest = table[l*3+2]; } } else { *(dest+2) = nanColor->blue; *(dest+1) = nanColor->green; *dest = nanColor->red; } break; } else { if (mosaic) { sptr = sptr->nextMosaic(); if (sptr) { mm = sptr->matrixToData(sys).mm(); params = sptr->getDataParams(context->secMode()); srcw = sptr->width(); ll = sptr->low(); hh = sptr->high(); diff = hh - ll; } } } } while (mosaic && sptr); } } CLEARSIGBUS if (img) { if (context->mask.head()) { FitsMask* mptr = context->mask.tail(); while (mptr) { unsigned char* msk = fillMask(mptr, width, height, sys); blend(img,msk,width,height); delete [] msk; mptr = mptr->previous(); } } } return img; } unsigned char* Frame::fillMask(FitsMask* msk, int width, int height, Coord::InternalSystem sys) { FitsImage* currentMsk = msk->current(); XColor* maskColor = msk->color(); int mark = msk->mark(); // img unsigned char* img = new unsigned char[width*height*4]; memset(img,0,width*height*4); if (!currentMsk) return img; // basics FitsImage* sptr = currentMsk; int mosaic = isMosaic(); // variable double* mm = sptr->matrixToData(sys).mm(); FitsBound* params = sptr->getDataParams(context->secMode()); int srcw = sptr->width(); // main loop unsigned char* dest = img; SETSIGBUS for (long jj=0; jjmatrixToData(sys).mm(); params = sptr->getDataParams(context->secMode()); srcw = sptr->width(); } do { double xx = ii*mm[0] + jj*mm[3] + mm[6]; double yy = ii*mm[1] + jj*mm[4] + mm[7]; if (xx>=params->xmin && xxxmax && yy>=params->ymin && yyymax) { int value = sptr->getValueMask(long(yy)*srcw + long(xx)); if ((mark && value) || (!mark && !value)) { *dest = ((unsigned char)maskColor->red)*maskAlpha; *(dest+1) = ((unsigned char)maskColor->green)*maskAlpha; *(dest+2) = ((unsigned char)maskColor->blue)*maskAlpha; *(dest+3) = 1; } break; } else { if (mosaic) { sptr = sptr->nextMosaic(); if (sptr) { mm = sptr->matrixToData(sys).mm(); params = sptr->getDataParams(context->secMode()); srcw = sptr->width(); } } } } while (mosaic && sptr); } } CLEARSIGBUS return img; } int Frame::isIIS() { return context->cfits && context->cfits->isIIS(); } void Frame::pushMatrices() { Base::pushMatrices(); // alway identity Matrix rgbToRef; // now any masks FitsMask* msk = currentContext->mask.tail(); while (msk) { FitsImage* mskimg = msk->mask(); while (mskimg) { FitsImage* sptr = mskimg; while (sptr) { sptr->updateMatrices(rgbToRef, refToUser, userToWidget, widgetToCanvas, canvasToWindow); sptr = sptr->nextSlice(); } mskimg = mskimg->nextMosaic(); } msk = msk->previous(); } } void Frame::pushMagnifierMatrices() { Base::pushMagnifierMatrices(); FitsMask* msk = context->mask.tail(); while (msk) { FitsImage* mskimg = msk->mask(); while (mskimg) { FitsImage* sptr = mskimg; while (sptr) { sptr->updateMagnifierMatrices(refToMagnifier); sptr = sptr->nextSlice(); } mskimg = mskimg->nextMosaic(); } msk = msk->previous(); } } void Frame::pushPannerMatrices() { Base::pushPannerMatrices(); FitsMask* msk = context->mask.tail(); while (msk) { FitsImage* mskimg = msk->mask(); while (mskimg) { FitsImage* sptr = mskimg; while (sptr) { sptr->updatePannerMatrices(refToPanner); sptr = sptr->nextSlice(); } mskimg = mskimg->nextMosaic(); } msk = msk->previous(); } } void Frame::pushPSMatrices(float scale, int width, int height) { Base::pushPSMatrices(scale, width, height); Matrix mx = psMatrix(scale, width, height); FitsMask* msk = context->mask.tail(); while (msk) { FitsImage* ptr = msk->current(); while (ptr) { ptr->updatePS(mx); ptr = ptr->nextMosaic(); } msk = msk->previous(); } } void Frame::reset() { cmapID = 1; bias = 0.5; contrast = 1.0; context->resetSecMode(); context->updateClip(); Base::reset(); } void Frame::updateColorCells(unsigned char* cells, int cnt) { colorCount = cnt; if (colorCells) delete [] colorCells; colorCells = new unsigned char[cnt*3]; if (!colorCells) { internalError("Unable to Alloc colorCells"); return; } memcpy(colorCells, cells, cnt*3); } void Frame::unloadFits() { if (DebugPerf) cerr << "Frame::unloadFits()" << endl; // clean up from iis if needed if (isIIS()) context->resetIIS(); context->unload(); FrameBase::unloadFits(); } // Commands void Frame::colormapCmd(int id, float b, float c, int i, unsigned char* cells, int cnt) { cmapID = id; bias = b; contrast = c; invert = i; updateColorCells(cells, cnt); updateColorScale(); update(BASE); } void Frame::colormapBeginCmd() { // we need a colorScale before we can render if (!validColorScale()) return; // we need some fits data // we assume the colorScale length will not change during motion calls if (!context->cfits) return; int width = options->width; int height = options->height; // Create XImage if (!(colormapXM = XGetImage(display, pixmap, 0, 0, width, height, AllPlanes, ZPixmap))) { internalError("Unable to Create Colormap XImage"); return; } // Create Pixmap colormapPM = Tk_GetPixmap(display, Tk_WindowId(tkwin), width, height, depth); if (!colormapPM) { internalError("Unable to Create Colormap Pixmap"); return; } // colormapGCXOR colormapGCXOR = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); // Create table index array if (colormapData) delete [] colormapData; colormapData = new long[width*height]; if (!colormapData) { internalError("Unable to alloc tmp data array"); return; } // fill data array // basics int bytesPerPixel = colormapXM->bits_per_pixel/8; int length = colorScale->size() - 1; int last = length * bytesPerPixel; FitsImage* sptr = context->cfits; int mosaic = isMosaic(); long* dest = colormapData; // variable double* mm = sptr->matrixToData(Coord::WIDGET).mm(); FitsBound* params = sptr->getDataParams(context->secMode()); int srcw = sptr->width(); double ll = sptr->low(); double hh = sptr->high(); double diff = hh - ll; // main loop SETSIGBUS for (long jj=0; jjcfits; mm = sptr->matrixToData(Coord::WIDGET).mm(); params = sptr->getDataParams(context->secMode()); srcw = sptr->width(); ll = sptr->low(); hh = sptr->high(); diff = hh - ll; } do { double xx = ii*mm[0] + jj*mm[3] + mm[6]; double yy = ii*mm[1] + jj*mm[4] + mm[7]; if (xx>=params->xmin && xxxmax && yy>=params->ymin && yyymax) { double value = sptr->getValueDouble(long(yy)*srcw + long(xx)); if (isfinite(diff) && isfinite(value)) { if (value <= ll) *dest = 0; else if (value >= hh) *dest = last; else *dest = (int)(((value - ll)/diff * length) + .5)*bytesPerPixel; } else *dest = -1; break; } else { if (mosaic) { sptr = sptr->nextMosaic(); if (sptr) { mm = sptr->matrixToData(Coord::WIDGET).mm(); params = sptr->getDataParams(context->secMode()); srcw = sptr->width(); ll = sptr->low(); hh = sptr->high(); diff = hh - ll; } } } } while (mosaic && sptr); } } CLEARSIGBUS } void Frame::colormapMotionCmd(int id, float b, float c, int i, unsigned char* cells, int cnt) { // we need a colorScale before we can render if (!validColorScale()) return; // first check for change if (cmapID == id && bias == b && contrast == c && invert == i && colorCells) return; // we got a change cmapID = id; bias = b; contrast = c; invert = i; updateColorCells(cells, cnt); updateColorScale(); // if we have no data, stop now if (!context->cfits) return; // clear ximage int& width = colormapXM->width; int& height = colormapXM->height; char* data = colormapXM->data; int bytesPerPixel = colormapXM->bits_per_pixel/8; int& bytesPerLine = colormapXM->bytes_per_line; const unsigned char* table = colorScale->colors(); long* src = colormapData; for (long jj=0; jjsetIIS(); FitsImage* img = new FitsImageIIS(currentContext, interp, width, height); loadDone(currentContext->load(ALLOC, "", img, IMG),IMG); } void Frame::iisEraseCmd() { if (context->cfits) ((FitsImageIIS*)context->cfits)->iisErase(); } void Frame::iisGetCmd(char* dest, int xx, int yy, int dx, int dy) { if (context->cfits) { char* buf = ((FitsImageIIS*)context->cfits)->iisGet(xx,yy,dx,dy); memcpy(dest, buf, dx*dy); delete [] buf; } } void Frame::iisSetCmd(const char* src, int xx, int yy, int dx, int dy) { if (context->cfits) ((FitsImageIIS*)context->cfits)->iisSet(src, xx, yy, dx, dy); } void Frame::iisWCSCmd(const Matrix& mx, const Vector& z, int zt) { if (context->cfits) ((FitsImageIIS*)context->cfits)->iisWCS(mx, z, zt); } void Frame::savePhotoCmd(const char* ph) { FitsImage* fits = currentContext->cfits; if (!fits) return; // basics int length = colorScale->size() - 1; const unsigned char* table = colorScale->psColors(); // variable FitsBound* params = fits->getDataParams(context->secMode()); double ll = fits->low(); double hh = fits->high(); double diff = hh - ll; int width = params->xmax - params->xmin; int height = params->ymax - params->ymin; // photo if (*ph == '\0') { Tcl_AppendResult(interp, "bad image name ", NULL); return; } Tk_PhotoHandle photo = Tk_FindPhoto(interp, ph); if (!photo) { Tcl_AppendResult(interp, "bad image handle ", NULL); return; } if (Tk_PhotoSetSize(interp, photo, width, height) != TCL_OK) { Tcl_AppendResult(interp, "bad photo set size ", NULL); return; } Tk_PhotoBlank(photo); Tk_PhotoImageBlock block; if (!Tk_PhotoGetImage(photo,&block)) { Tcl_AppendResult(interp, "bad image block ", NULL); return; } if (block.pixelSize<4) { Tcl_AppendResult(interp, "bad pixel size ", NULL); return; } // main loop SETSIGBUS unsigned char* dest = block.pixelPtr; for (long jj=params->ymax-1; jj>=params->ymin; jj--) { for (long ii=params->xmin; iixmax; ii++, dest += block.pixelSize) { double value = fits->getValueDouble(Vector(ii,jj)); if (isfinite(diff) && isfinite(value)) { if (value <= ll) { *(dest+block.offset[0]) = table[2]; *(dest+block.offset[1]) = table[1]; *(dest+block.offset[2]) = table[0]; *(dest+block.offset[3]) = 255; } else if (value >= hh) { *(dest+block.offset[0]) = table[length*3+2]; *(dest+block.offset[1]) = table[length*3+1]; *(dest+block.offset[2]) = table[length*3]; *(dest+block.offset[3]) = 255; } else { int l = (int)(((value - ll)/diff * length) + .5); *(dest+block.offset[0]) = table[l*3+2]; *(dest+block.offset[1]) = table[l*3+1]; *(dest+block.offset[2]) = table[l*3]; *(dest+block.offset[3]) = 255; } } else { *(dest+block.offset[0]) = nanColor->red; *(dest+block.offset[1]) = nanColor->green; *(dest+block.offset[2]) = nanColor->blue; *(dest+block.offset[3]) = 255; } } } CLEARSIGBUS if (Tk_PhotoPutBlock(interp, photo, &block, 0, 0, width, height, TK_PHOTO_COMPOSITE_SET) != TCL_OK) { Tcl_AppendResult(interp, "bad put block ", NULL); return; } } saods9/tksao/frame/frame.h000644 000765 000000 00000003523 12705763771 016064 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __frame_h__ #define __frame_h__ #include "context.h" #include "framebase.h" #include "colorscale.h" // Frame class Frame : public FrameBase { protected: int cmapID; // current colormap id float bias; // current colormap bias float contrast; // current colormap contrast long* colormapData; int colorCount; // number of dynamic colors ColorScale* colorScale; // current color scale unsigned char* colorCells; // current color values private: unsigned char* blend(unsigned char*, unsigned char*, int, int); int isIIS(); void pushMatrices(); void pushMagnifierMatrices(); void pushPannerMatrices(); void pushPSMatrices(float, int, int); void reset(); void setKeyFits() {} void unloadFits(); protected: int isFrame() {return 1;} unsigned char* fillImage(int width, int height, Coord::InternalSystem); unsigned char* fillMask(FitsMask*, int, int, Coord::InternalSystem); int validColorScale() {return colorScale ? 1 : 0;} void updateColorCells(unsigned char*, int); public: Frame(Tcl_Interp*, Tk_Canvas, Tk_Item*); virtual ~Frame(); void colormapCmd(int, float, float, int, unsigned char*, int); void colormapBeginCmd(); void colormapMotionCmd(int, float, float, int, unsigned char*, int); void colormapEndCmd(); void getColorbarCmd(); void getRGBChannelCmd(); void getRGBViewCmd(); void getRGBSystemCmd(); void getTypeCmd(); void iisCmd(int, int); void iisEraseCmd(); void iisGetCmd(char*, int, int, int, int); void iisSetCmd(const char*, int, int, int, int); void iisWCSCmd(const Matrix&, const Vector&, int); void savePhotoCmd(const char*); }; #endif saods9/tksao/frame/frame3d.C000644 000765 000000 00000064125 12734522344 016242 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "frame3d.h" #include "fitsimage.h" #include "ps.h" #include "sigbus.h" #ifndef __WIN32 #include #endif #ifndef __WIN32 void render3dTimer(void* ptr) { int rr = ((Frame3d*)ptr)->processDetach(); if (rr) { Tcl_TimerToken tt = Tcl_CreateTimerHandler(125,render3dTimer,ptr); ((Frame3d*)ptr)->setTimer(tt); } else ((Frame3d*)ptr)->setTimer(0); } #endif Frame3d::Frame3d(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Frame3dBase(i,c,item) { context = new Context(); context->parent(this); currentContext = context; keyContext = context; keyContextSet =1; cmapID = 1; bias = 0.5; contrast = 1.0; colormapData = NULL; colorCount = 0; colorScale = NULL; colorCells = NULL; #ifndef __WIN32 thread_ =NULL; #endif targ_ =NULL; status_ = 0; nrays_ =0; xid_ =NULL; yid_ =NULL; timer_ =0; rt_ =NULL; rtb_ =NULL; rtbcnt_ = 0; // scope is alway global keyContext->setClipScope(FrScale::GLOBAL); } Frame3d::~Frame3d() { if (context) delete context; if (colorScale) delete colorScale; if (colormapData) delete [] colormapData; if (colorCells) delete [] colorCells; #ifndef __WIN32 if (thread_) delete [] thread_; #endif if (targ_) delete [] targ_; if (xid_) delete [] xid_; if (yid_) delete [] yid_; if (rt_) delete rt_; if (rtb_) delete rtb_; } #ifdef __WIN32 unsigned char* Frame3d::fillImage(int width, int height, Coord::InternalSystem sys) { unsigned char* img =NULL; Matrix3d mm = context->fits->matrixToData3d(sys); switch (sys) { case Coord::WIDGET: { RayTrace* rt = findInCache(cache_, az_, el_); if (!rt) { BBox3d bb = imageBounds(width, height, mm); rt = new RayTrace(az_, el_, width, height, mm, bb); if (!fillImageJoin(rt)) return NULL; cacheIt(cache_, rt); } img = fillImageColor(rt); } break; case Coord::PANNER: { RayTrace* rt = findInCache(pannerCache_, az_, el_); if (!rt) { BBox3d bb = imageBounds(width, height, mm); rt = new RayTrace(az_, el_, width, height, mm, bb); if (!fillImageJoin(rt)) return NULL; cacheIt(pannerCache_, rt); } img = fillImageColor(rt); } break; case Coord::PS: { BBox3d bb = imageBounds(width, height, mm); RayTrace* rt = new RayTrace(az_, el_, width, height, mm, bb); if (!fillImageJoin(rt)) return NULL; img = fillImageColor(rt); if (rt) delete rt; } break; default: // na break; } return img; } #else unsigned char* Frame3d::fillImage(int width, int height, Coord::InternalSystem sys) { unsigned char* img =NULL; Matrix3d mm = context->fits->matrixToData3d(sys); switch (sys) { case Coord::WIDGET: if (syncUpdate) { RayTrace* rt = findInCache(cache_, az_, el_); if (!rt) { BBox3d bb = imageBounds(width, height, mm); rt = new RayTrace(az_, el_, width, height, mm, bb); if (!fillImageJoin(rt)) return NULL; cacheIt(cache_, rt); } img = fillImageColor(rt); } else { if (!rt_) { RayTrace* ptr = findInCache(cache_, az_, el_); if (ptr) { img = fillImageColor(ptr); // start background switch (render_) { case NONE: break; case AZIMUTH: case ELEVATION: if (timer_) { if (!status_) status_ = 2; } else { status_ = 2; render3dTimer(this); } break; } } else { // just in case if (thread_) cancelDetach(); BBox3d bb = imageBounds(width, height, mm); rt_ = new RayTrace(az_, el_, width, height, mm, bb); // are we very small? if (bb.volume() < 1.25e7*nthreads_) { // yes, just do it if (!fillImageJoin(rt_)) return NULL; img = fillImageColor(rt_); cacheIt(cache_, rt_); rt_ =NULL; // start background switch (render_) { case NONE: break; case AZIMUTH: case ELEVATION: status_ = 2; if (!timer_) render3dTimer(this); break; } } else { // ok, start the build process fillImageDetach(rt_); img = fillImageColor(rt_); // start primary status_ = 1; if (!timer_) render3dTimer(this); } } } else img = fillImageColor(rt_); } break; case Coord::PANNER: { RayTrace* rt = findInCache(pannerCache_, az_, el_); if (!rt) { BBox3d bb = imageBounds(width, height, mm); rt = new RayTrace(az_, el_, width, height, mm, bb); if (!fillImageJoin(rt)) return NULL; cacheIt(pannerCache_, rt); } img = fillImageColor(rt); } break; case Coord::PS: { BBox3d bb = imageBounds(width, height, mm); RayTrace* rt = new RayTrace(az_, el_, width, height, mm, bb); if (!fillImageJoin(rt)) return NULL; img = fillImageColor(rt); if (rt) delete rt; } break; default: // na break; } return img; } #endif void* raytrace(void* arg) { t_arg* targ = (t_arg*)arg; Frame3dBase::RenderMethod renderMethod = targ->renderMethod; int width = targ->width; float* zbuf = targ->zbuf; unsigned char* mkzbuf = targ->mkzbuf; Context* context = targ->context; int* xid = targ->xid; int* yid = targ->yid; int start = targ->start; int stop = targ->stop; int zstart = targ->zstart; int zstop = targ->zstop; // this will be incorrect for multiple ext/file cubes int srcd = context->naxis(2); double* mm = targ->matrix.mm(); FitsImage* ptr = context->fits; // if more than 3 axes, walk it forward int num = context->calcSlice(); for (int ii=1; iinextSlice(); // slice jump vector FitsImage* sjv[srcd]; FitsImage* sptr = ptr; int ii=0; while (sptr) { sjv[ii++] = sptr; if (sptr) sptr = sptr->nextSlice(); } FitsBound* params = context->fits->getDataParams(context->secMode()); FitsZBound* zparams = context->getDataParams(context->secMode()); int srcw = context->fits->width(); targ->rays =0; for (int ll=start; ll<=stop; ll++, targ->rays++) { int& jj = yid[ll]; int& ii = xid[ll]; double ii0 = ii*mm[0]; double ii1 = ii*mm[1]; double ii2 = ii*mm[2]; double jj4 = jj*mm[4]; double jj5 = jj*mm[5]; double jj6 = jj*mm[6]; int cnt=0; float acc=0; float max = -FLT_MAX; int kks = zstart; int kkt = zstop; // good abort point if (targ->abort) { targ->done =1; return 0; } int inside =0; for (int kk=kks; kk=params->xmin && xxxmax && yy>=params->ymin && yyymax && zz>=zparams->zmin && zzzmax) { float value = sjv[int(zz)]->getValueDouble(long(yy)*srcw+long(xx)); inside =1; // ignore nan if (isfinite(value)) { if (value>max) max = value; cnt++; acc+=value; } } else { // early determination if (inside) break; } } if (cnt) { float* dest = zbuf + jj*width + ii; unsigned char* mkdest = mkzbuf + jj*width + ii; switch (renderMethod) { case Frame3dBase::MIP: *dest =max; break; case Frame3dBase::AIP: *dest =acc/cnt; break; } *mkdest=1; } } targ->done=1; return NULL; } #ifdef __WIN32 int Frame3d::fillImageJoin(RayTrace* rt) { BBox3d& bb = rt->bb_; Vector3d dd=bb.size(); int ww = dd[0]; int hh = dd[1]; int zz = dd[2]; // sanity check if (!ww || !hh || !zz) return 1; // local var overide int nrays = ww*hh; int* xid = new int[nrays]; int* yid = new int[nrays]; int x=bb.ll[0]+.5; // don't know why; int y=bb.ll[1]+.5; // don't know why // init array for (int jj=0; jjwidth_; targ.zbuf = rt->zbuf_; targ.mkzbuf = rt->mkzbuf_; targ.context = context; targ.matrix = rt->mm_; targ.xid = xid; targ.yid = yid; targ.start = 0; targ.stop = nrays-1; targ.zstart = bb.ll[2]; targ.zstop = bb.ur[2]; targ.rays =0; targ.abort =0; targ.done =0; raytrace(&targ); if (xid) delete [] xid; if (yid) delete [] yid; return 1; } #else int Frame3d::fillImageJoin(RayTrace* rt) { BBox3d& bb = rt->bb_; Vector3d dd=bb.size(); int ww = dd[0]; int hh = dd[1]; int zz = dd[2]; // sanity check if (!ww || !hh || !zz) return 1; // local var overide int nrays = ww*hh; float incr = nrays/nthreads_; int* xid = new int[nrays]; int* yid = new int[nrays]; int x=bb.ll[0]+.5; // don't know why; int y=bb.ll[1]+.5; // don't know why // init array for (int jj=0; jjwidth_; targ[ii].zbuf = rt->zbuf_; targ[ii].mkzbuf = rt->mkzbuf_; targ[ii].context = context; targ[ii].matrix = rt->mm_; targ[ii].xid = xid; targ[ii].yid = yid; targ[ii].start = incr*ii; if (ii+1bb_; Vector3d dd=bb.size(); int ww = dd[0]; int hh = dd[1]; int zz = dd[2]; // sanity check if (!ww || !hh || !zz) return; nrays_ = ww*hh; float incr = nrays_/nthreads_; if (xid_) delete [] xid_; xid_ = new int[nrays_]; if (yid_) delete [] yid_; yid_ = new int[nrays_]; int x=bb.ll[0]+.5; // don't know why int y=bb.ll[1]+.5; // don't know why // init array for (int jj=0; jj0; kk--) { int ll = rand() % (kk+1); // 0 <= ll <= kk if (ll!=kk) { int tx = xid_[kk]; int ty = yid_[kk]; xid_[kk]=xid_[ll]; yid_[kk]=yid_[ll]; xid_[ll]=tx; yid_[ll]=ty; } } // init threads thread_ = new pthread_t[nthreads_]; targ_ = new t_arg[nthreads_]; for (int ii=0; iiwidth_; targ_[ii].zbuf = rt->zbuf_; targ_[ii].mkzbuf = rt->mkzbuf_; targ_[ii].context = context; targ_[ii].matrix = rt->mm_; targ_[ii].xid = xid_; targ_[ii].yid = yid_; targ_[ii].start = incr*ii; if (ii+1180) org = org-360; int cnt =1; while (!((org+cnt)>180 && (org-cnt)<-180)) { if ((org+cnt)<=180) if (bkgDetach(degToRad(org+cnt),el_)) return 1; if ((org-cnt)>=-180) if (bkgDetach(degToRad(org-cnt),el_)) return 1; cnt++; } } break; case ELEVATION: { int org = floor(radToDeg(el_)); if (org>180) org = org-360; int cnt =1; while (!((org+cnt)>90 && (org-cnt)<-90)) { if ((org+cnt)<=90) if (bkgDetach(az_,degToRad(org+cnt))) return 1; if ((org-cnt)>=-90) if (bkgDetach(az_,degToRad(org-cnt))) return 1; cnt++; } } break; } status_ = 0; return 1; } case 3: // process background { if (!thread_) { // cache cacheIt(cache_, rtb_); rtb_ =NULL; // and do the next one status_ = 2; } else { // we done yet? int sum=0; for (int ii=0; iiwidth/2.), (int)(options->height/2.), (int)(zdepth_/2.)); Matrix3d refToWidget3d = refToUser3d * userToWidget3d; Matrix3d mm = (context->fits->dataToRef3d * refToWidget3d).invert(); BBox3d bb = imageBounds(options->width, options->height, mm); rtb_ = new RayTrace(az, el, options->width, options->height, mm, bb); fillImageDetach(rtb_); status_ =3; return 1; } rtbcnt_++; return 0; } #endif void Frame3d::cacheIt(List& cache, RayTrace* rt) { // hard coded int max = (render_ == NONE) ? 256 : 361+181; if (rt) { cache.append(rt); if (cache.count() >= max) { RayTrace* ptr = cache.fifo(); if (ptr) delete ptr; } } } unsigned char* Frame3d::fillImageColor(RayTrace* rt) { int width = rt->width_; int height = rt->height_; float* zbuf = rt->zbuf_; unsigned char* mkzbuf = rt->mkzbuf_; unsigned char* img = new unsigned char[width*height*3]; if (!img) return NULL; memset(img, 0, width*height*3); int length = colorScale->size() - 1; const unsigned char* table = colorScale->psColors(); double ll = keyContext->fits->low(); double hh = keyContext->fits->high(); double diff = hh - ll; register unsigned char red = (unsigned char)bgColor->red; register unsigned char green = (unsigned char)bgColor->green; register unsigned char blue = (unsigned char)bgColor->blue; unsigned char* dest = img; float* src = zbuf; unsigned char* mksrc = mkzbuf; for (int jj=0; jj= hh) { *(dest+2) = table[length*3]; *(dest+1) = table[length*3+1]; *dest = table[length*3+2]; } else { int l = (int)(((value - ll)/diff * length) + .5); *(dest+2) = table[l*3]; *(dest+1) = table[l*3+1]; *dest = table[l*3+2]; } } } } } return img; } RayTrace* Frame3d::findInCache(List& cache, double az, double el) { double rr = degToRad(.5); RayTrace* ptr = cache.head(); while (ptr) { double raz = ptr->az_ - az; double rel = ptr->el_ - el; if ((raz*raz + rel*rel) < rr*rr) return ptr; ptr=ptr->next(); } return NULL; } BBox3d Frame3d::imageBounds(int width, int height, Matrix3d mm) { Matrix3d mx = mm.invert(); FitsBound* params = keyContext->fits->getDataParams(keyContext->secMode()); FitsZBound* zparams = keyContext->getDataParams(keyContext->secMode()); // add a buffer around due to round off int xmin = params->xmin -1; int xmax = params->xmax +1; int ymin = params->ymin -1; int ymax = params->ymax +1; int zmin = zparams->zmin -1; int zmax = zparams->zmax +1; Vector3d llf = Vector3d(xmin,ymin,zmin) * mx; Vector3d lrf = Vector3d(xmax,ymin,zmin) * mx; Vector3d urf = Vector3d(xmax,ymax,zmin) * mx; Vector3d ulf = Vector3d(xmin,ymax,zmin) * mx; Vector3d llb = Vector3d(xmin,ymin,zmax) * mx; Vector3d lrb = Vector3d(xmax,ymin,zmax) * mx; Vector3d urb = Vector3d(xmax,ymax,zmax) * mx; Vector3d ulb = Vector3d(xmin,ymax,zmax) * mx; BBox3d bb(llf); bb.bound(lrf); bb.bound(urf); bb.bound(ulf); bb.bound(llb); bb.bound(lrb); bb.bound(urb); bb.bound(ulb); if (bb.ll[0]<0) bb.ll[0] = 0; if (bb.ll[1]<0) bb.ll[1] = 0; if (bb.ur[0]>width) bb.ur[0] = width; if (bb.ur[1]>height) bb.ur[1] = height; // try to limit the z depth, sometime will fail double zz0 = zdepth_; double zz1 = 0; for (int kk=zmin; kk<=zmax; kk++) { // 4 corners ibv3d(Vector3d(xmin,ymin,kk), mx, width, height, &zz0, &zz1); ibv3d(Vector3d(xmax,ymin,kk), mx, width, height, &zz0, &zz1); ibv3d(Vector3d(xmax,ymax,kk), mx, width, height, &zz0, &zz1); ibv3d(Vector3d(xmin,ymax,kk), mx, width, height, &zz0, &zz1); // center ibv3d(Vector3d((xmax-xmin)/2.,(ymax-ymin)/2.,kk), mx, width, height, &zz0, &zz1); } if (zz0=0 && vv[0]<=ww && vv[1]>=0 && vv[1]<=hh) { if (vv[2] < *zz0) *zz0 = vv[2]; if (vv[2] > *zz1) *zz1 = vv[2]; } } void Frame3d::reset() { cmapID = 1; bias = 0.5; contrast = 1.0; keyContext->resetSecMode(); keyContext->updateClip(); Base::reset(); } void Frame3d::updateColorCells(unsigned char* cells, int cnt) { colorCount = cnt; if (colorCells) delete [] colorCells; colorCells = new unsigned char[cnt*3]; if (!colorCells) { internalError("Unable to Alloc colorCells"); return; } memcpy(colorCells, cells, cnt*3); } void Frame3d::pushMatrices() { Base::pushMatrices(); FitsImage* ptr = keyContext->fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updateMatrices(refToUser3d, userToWidget3d, widgetToCanvas3d, canvasToWindow3d); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } void Frame3d::pushPannerMatrices() { Base::pushPannerMatrices(); FitsImage* ptr = keyContext->fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updatePannerMatrices(refToPanner3d); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } void Frame3d::pushMagnifierMatrices() { Base::pushMagnifierMatrices(); FitsImage* ptr = keyContext->fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updateMagnifierMatrices(refToMagnifier3d); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } void Frame3d::pushPSMatrices(float scale, int width, int height) { Base::pushPSMatrices(scale, width, height); Matrix3d mx = psMatrix(scale, width, height); FitsImage* ptr = keyContext->fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updatePS(mx); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } void Frame3d::unloadFits() { if (DebugPerf) cerr << "Frame3d::unloadFits()" << endl; // kill any active threads cancelDetach(); keyContext->unload(); Base::unloadFits(); } // Commands void Frame3d::colormapCmd(int id, float b, float c, int i, unsigned char* cells, int cnt) { cmapID = id; bias = b; contrast = c; invert = i; updateColorCells(cells, cnt); updateColorScale(); update(BASE); } void Frame3d::colormapEndCmd() { update(BASE); } void Frame3d::getColorbarCmd() { ostringstream str; str << cmapID << ' ' << bias << ' ' << contrast << ' ' << invert << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Frame3d::getRGBChannelCmd() { Tcl_AppendResult(interp, "red", NULL); } void Frame3d::getRGBViewCmd() { Tcl_AppendResult(interp, "1 1 1", NULL); } void Frame3d::getRGBSystemCmd() { Tcl_AppendResult(interp, "image", NULL); } void Frame3d::getTypeCmd() { Tcl_AppendResult(interp, "3d", NULL); } void Frame3d::savePhotoCmd(const char* ph) { FitsImage* fits = currentContext->cfits; if (!fits) return; // basics int length = colorScale->size() - 1; const unsigned char* table = colorScale->psColors(); // variable FitsBound* params = fits->getDataParams(context->secMode()); double ll = fits->low(); double hh = fits->high(); double diff = hh - ll; int width = params->xmax - params->xmin; int height = params->ymax - params->ymin; // photo if (*ph == '\0') { Tcl_AppendResult(interp, "bad image name ", NULL); return; } Tk_PhotoHandle photo = Tk_FindPhoto(interp, ph); if (!photo) { Tcl_AppendResult(interp, "bad image handle ", NULL); return; } if (Tk_PhotoSetSize(interp, photo, width, height) != TCL_OK) { Tcl_AppendResult(interp, "bad photo set size ", NULL); return; } Tk_PhotoBlank(photo); Tk_PhotoImageBlock block; if (!Tk_PhotoGetImage(photo,&block)) { Tcl_AppendResult(interp, "bad image block ", NULL); return; } if (block.pixelSize<4) { Tcl_AppendResult(interp, "bad pixel size ", NULL); return; } // main loop SETSIGBUS unsigned char* dest = block.pixelPtr; for (long jj=params->ymax-1; jj>=params->ymin; jj--) { for (long ii=params->xmin; iixmax; ii++, dest += block.pixelSize) { double value = fits->getValueDouble(Vector(ii,jj)); if (isfinite(value)) { if (value <= ll) { *(dest+block.offset[0]) = table[2]; *(dest+block.offset[1]) = table[1]; *(dest+block.offset[2]) = table[0]; *(dest+block.offset[3]) = 255; } else if (value >= hh) { *(dest+block.offset[0]) = table[length*3+2]; *(dest+block.offset[1]) = table[length*3+1]; *(dest+block.offset[2]) = table[length*3]; *(dest+block.offset[3]) = 255; } else { int l = (int)(((value - ll)/diff * length) + .5); *(dest+block.offset[0]) = table[l*3+2]; *(dest+block.offset[1]) = table[l*3+1]; *(dest+block.offset[2]) = table[l*3]; *(dest+block.offset[3]) = 255; } } else { *(dest+block.offset[0]) = nanColor->red; *(dest+block.offset[1]) = nanColor->green; *(dest+block.offset[2]) = nanColor->blue; *(dest+block.offset[3]) = 255; } } } CLEARSIGBUS if (Tk_PhotoPutBlock(interp, photo, &block, 0, 0, width, height, TK_PHOTO_COMPOSITE_SET) != TCL_OK) { Tcl_AppendResult(interp, "bad put block ", NULL); return; } } saods9/tksao/frame/frame3d.h000644 000765 000000 00000005021 12710203245 016263 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __frame3d_h__ #define __frame3d_h__ #include "context.h" #include "frame3dbase.h" #include "colorscale.h" typedef struct { Frame3dBase::RenderMethod renderMethod; int width; float* zbuf; unsigned char* mkzbuf; Context* context; Matrix3d matrix; int* xid; int* yid; int start; int stop; int zstart; int zstop; int rays; int abort; int done; } t_arg; class Frame3d : public Frame3dBase { protected: int cmapID; // current colormap id float bias; // current colormap bias float contrast; // current colormap contrast long* colormapData; int colorCount; // number of dynamic colors ColorScale* colorScale; // current color scale unsigned char* colorCells; // current color values #ifndef __WIN32 pthread_t* thread_; #endif int status_; t_arg* targ_; int nrays_; int* xid_; int* yid_; Tcl_TimerToken timer_; RayTrace* rt_; RayTrace* rtb_; int rtbcnt_; private: #ifndef __WIN32 void cancelDetach(); void fillImageDetach(RayTrace*); int bkgDetach(double az, double el); #else void cancelDetach() {} #endif BBox3d imageBounds(int, int, Matrix3d); void ibv3d(Vector3d, Matrix3d&, int, int, double*, double*); int fillImageJoin(RayTrace*); unsigned char* fillImageColor(RayTrace*); RayTrace* findInCache(List&, double, double); void cacheIt(List&, RayTrace*); void reset(); void setKeyFits() {} void pushMatrices(); void pushMagnifierMatrices(); void pushPannerMatrices(); void pushPSMatrices(float, int, int); void unloadFits(); protected: int isFrame3d() {return 1;} unsigned char* fillImage(int width, int height, Coord::InternalSystem); void updateColorCells(unsigned char*, int); int validColorScale() {return colorScale ? 1 : 0;} public: Frame3d(Tcl_Interp*, Tk_Canvas, Tk_Item*); virtual ~Frame3d(); void setTimer(Tcl_TimerToken tt) {timer_ = tt;} #ifndef __WIN32 int processDetach(); #endif void getColorbarCmd(); void getRGBChannelCmd(); void getRGBSystemCmd(); void getRGBViewCmd(); void getTypeCmd(); void colormapCmd(int, float, float, int, unsigned char*, int); void colormapEndCmd(); void colormapMotionCmd(int id, float b, float c, int i, unsigned char* cells, int cnt) {colormapCmd(id, b, c, i, cells, cnt);} void savePhotoCmd(const char*); }; #endif saods9/tksao/frame/frame3dbase.C000644 000765 000000 00000075166 12754663522 017112 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "frame3dbase.h" #include "fitsimage.h" #include "marker.h" #include "context.h" #include "ps.h" Frame3dBase::Frame3dBase(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Base(i, c, item) { // zdepth_ =100000; zdepth_ =200000; zzoom_ =1; zscale_ =1; az_ =0; el_ =0; renderMethod_ = MIP; preservecache_ =0; render_ =NONE; threedGC = NULL; border_ =0; borderColorName_ = dupstr("blue"); compass_ =0; compassColorName_ = dupstr("green"); highlite_ =1; highliteColorName_ = dupstr("cyan"); cropsl_ =0; imageToData3d = Translate3d(-.5, -.5, -.5); dataToImage3d = Translate3d( .5, .5, .5); } Frame3dBase::~Frame3dBase() { if (threedGC) XFreeGC(display, threedGC); if (borderColorName_) delete [] borderColorName_; if (compassColorName_) delete [] compassColorName_; if (highliteColorName_) delete [] highliteColorName_; cache_.deleteAll(); pannerCache_.deleteAll(); } void Frame3dBase::calcBorder(Coord::InternalSystem sys, FrScale::SecMode mode, Vector3d* vv, int* dd) { if (!keyContext->fits) return; FitsBound* params = keyContext->fits->getDataParams(mode); FitsZBound* zparams = keyContext->getDataParams(mode); Vector3d llf(params->xmin,params->ymin,zparams->zmin); Vector3d lrf(params->xmax,params->ymin,zparams->zmin); Vector3d urf(params->xmax,params->ymax,zparams->zmin); Vector3d ulf(params->xmin,params->ymax,zparams->zmin); Vector3d llb(params->xmin,params->ymin,zparams->zmax); Vector3d lrb(params->xmax,params->ymin,zparams->zmax); Vector3d urb(params->xmax,params->ymax,zparams->zmax); Vector3d ulb(params->xmin,params->ymax,zparams->zmax); Matrix3d& mm = keyContext->fits->matrixFromData3d(sys); vv[0] = llf * mm; vv[1] = lrf * mm; vv[2] = urf * mm; vv[3] = ulf * mm; vv[4] = llb * mm; vv[5] = lrb * mm; vv[6] = urb * mm; vv[7] = ulb * mm; // init for dash for (int ii=0; ii<12; ii++) dd[ii] =1; // front { Vector3d aa = vv[1]-vv[0]; Vector3d cc = vv[3]-vv[0]; Vector3d ff = cross(aa,cc); for (int ii=0; ii<4; ii++) dd[ii] &= ff[2]>0; } // right { Vector3d aa = vv[5]-vv[1]; Vector3d cc = vv[2]-vv[1]; Vector3d ff = cross(aa,cc); int ww = ff[2]>0; dd[1] &= ww; dd[9] &= ww; dd[5] &= ww; dd[10] &= ww; } // top { Vector3d aa = vv[6]-vv[2]; Vector3d cc = vv[3]-vv[2]; Vector3d ff = cross(aa,cc); int ww = ff[2]>0; dd[2] &= ww; dd[10] &= ww; dd[6] &= ww; dd[11] &= ww; } // left { Vector3d aa = vv[7]-vv[3]; Vector3d cc = vv[0]-vv[3]; Vector3d ff = cross(aa,cc); int ww = ff[2]>0; dd[3] &= ww; dd[8] &= ww; dd[7] &= ww; dd[11] &= ww; } // bottom { Vector3d aa = vv[4]-vv[0]; Vector3d cc = vv[1]-vv[0]; Vector3d ff = cross(aa,cc); int ww = ff[2]>0; dd[0] &= ww; dd[9] &= ww; dd[4] &= ww; dd[8] &= ww; } // back { Vector3d aa = vv[4]-vv[5]; Vector3d cc = vv[6]-vv[5]; Vector3d ff = cross(aa,cc); for (int ii=4; ii<8; ii++) dd[ii] &= ff[2]>0; } } void Frame3dBase::calcHighlite(Coord::InternalSystem sys, Vector* vv, int* rr) { if (!keyContext->fits) return; FitsBound* params = keyContext->fits->getDataParams(keyContext->secMode()); Vector ss(params->xmin,params->ymin); Vector tt(params->xmax,params->ymax); Vector ll = mapFromRef3d(ss,sys); Vector lr = mapFromRef3d(Vector(tt[0],ss[1]),sys); Vector ur = mapFromRef3d(tt,sys); Vector ul = mapFromRef3d(Vector(ss[0],tt[1]),sys); // context->slice() IMAGE (ranges 1-n) double sl = keyContext->slice(2)-.5; Vector3d ll1 = mapFromRef3d(ss,sys); Vector3d lr1 = mapFromRef3d(Vector(tt[0],ss[1]),sys); Vector3d ur1 = mapFromRef3d(tt,sys); Vector3d ul1 = mapFromRef3d(Vector3d(ss[0],tt[1]),sys); Vector3d ll0 = mapFromRef3d(ss,sys,sl-1); Vector3d lr0 = mapFromRef3d(Vector3d(tt[0],ss[1]),sys,sl-1); Vector3d ur0 = mapFromRef3d(tt,sys,sl-1); Vector3d ul0 = mapFromRef3d(Vector3d(ss[0],tt[1]),sys,sl-1); Vector3d aa1 = (ll0-ll1).normalize(); Vector3d aa2 = (lr0-lr1).normalize(); Vector3d aa3 = (ur0-ur1).normalize(); Vector3d aa4 = (ul0-ul1).normalize(); Vector3d bb1 = (lr1-ll1).normalize(); Vector3d bb2 = (ur1-lr1).normalize(); Vector3d bb3 = (ul1-ur1).normalize(); Vector3d bb4 = (ll1-ul1).normalize(); Vector3d cc1 = cross(bb1,aa1); Vector3d cc2 = cross(bb2,aa2); Vector3d cc3 = cross(bb3,aa3); Vector3d cc4 = cross(bb4,aa4); vv[0] = ll; vv[1] = lr; vv[2] = ur; vv[3] = ul; rr[0] = cc1[2]>0; rr[1] = cc2[2]>0; rr[2] = cc3[2]>0; rr[3] = cc4[2]>0; } double Frame3dBase::calcZoom3d(Vector3d src, Vector dest) { Vector3d cc = src/2.; Vector3d llf(0,0,0); Vector3d lrf(0,src[1],0); Vector3d urf(src[0],src[1],0); Vector3d ulf(src[0],0,0); Vector3d llb(0,0,src[2]); Vector3d lrb(0,src[1],src[2]); Vector3d urb(src[0],src[1],src[2]); Vector3d ulb(src[0],0,src[2]); Matrix3d mx = Translate3d(-cc) * RotateZ3d(-wcsRotation) * RotateZ3d(-rotation) * RotateY3d(az_) * RotateX3d(el_); BBox3d bb(llf*mx); bb.bound(lrf*mx); bb.bound(urf*mx); bb.bound(ulf*mx); bb.bound(llb*mx); bb.bound(lrb*mx); bb.bound(urb*mx); bb.bound(ulb*mx); Vector3d bs = bb.size(); double r0 = dest[0]/bs[0]; double r1 = dest[1]/bs[1]; return r0>r1 ? r1:r0; } double Frame3dBase::calcZoomPanner() { if (!keyContext->fits) return 1; if (!pannerPixmap) return 1; Vector3d src = imageSize3d(keyContext->datasec() ? FrScale::DATASEC : FrScale::IMGSEC) * Scale3d(1,zscale_); Vector dest(pannerWidth,pannerHeight); Vector3d cc = src/2.; Vector3d llf = Vector3d(0,0,0); Vector3d lrf = Vector3d(0,src[1],0); Vector3d urf = Vector3d(src[0],src[1],0); Vector3d ulf = Vector3d(src[0],0,0); Vector3d llb = Vector3d(0,0,src[2]); Vector3d lrb = Vector3d(0,src[1],src[2]); Vector3d urb = Vector3d(src[0],src[1],src[2]); Vector3d ulb = Vector3d(src[0],0,src[2]); BBox3d bb; // 0, 0 Matrix3d m0000 = Translate3d(-cc) * RotateY3d(degToRad(0)) * RotateX3d(degToRad(0)); bb.bound(llf*m0000); bb.bound(llf*m0000); bb.bound(lrf*m0000); bb.bound(urf*m0000); bb.bound(ulf*m0000); bb.bound(llb*m0000); bb.bound(lrb*m0000); bb.bound(urb*m0000); bb.bound(ulb*m0000); // 0, 90 Matrix3d m0090 = Translate3d(-cc) * RotateY3d(degToRad(90)) * RotateX3d(degToRad(0)); bb.bound(llf*m0090); bb.bound(llf*m0090); bb.bound(lrf*m0090); bb.bound(urf*m0090); bb.bound(ulf*m0090); bb.bound(llb*m0090); bb.bound(lrb*m0090); bb.bound(urb*m0090); bb.bound(ulb*m0090); // 90, 0 Matrix3d m9000 = Translate3d(-cc) * RotateY3d(degToRad(0)) * RotateX3d(-degToRad(90)); bb.bound(llf*m9000); bb.bound(llf*m9000); bb.bound(lrf*m9000); bb.bound(urf*m9000); bb.bound(ulf*m9000); bb.bound(llb*m9000); bb.bound(lrb*m9000); bb.bound(urb*m9000); bb.bound(ulb*m9000); // 45, 45 Matrix3d m4545 = Translate3d(-cc) * RotateY3d(degToRad(45)) * RotateX3d(-degToRad(45)); bb.bound(llf*m4545); bb.bound(llf*m4545); bb.bound(lrf*m4545); bb.bound(urf*m4545); bb.bound(ulf*m4545); bb.bound(llb*m4545); bb.bound(lrb*m4545); bb.bound(urb*m4545); bb.bound(ulb*m4545); // 45, 90 Matrix3d m4590 = Translate3d(-cc) * RotateY3d(degToRad(90)) * RotateX3d(-degToRad(45)); bb.bound(llf*m4590); bb.bound(lrf*m4590); bb.bound(urf*m4590); bb.bound(ulf*m4590); bb.bound(llb*m4590); bb.bound(lrb*m4590); bb.bound(urb*m4590); bb.bound(ulb*m4590); // 90, 45 Matrix3d m9045 = Translate3d(-cc) * RotateY3d(degToRad(45)) * RotateX3d(-degToRad(90)); bb.bound(llf*m9045); bb.bound(lrf*m9045); bb.bound(urf*m9045); bb.bound(ulf*m9045); bb.bound(llb*m9045); bb.bound(lrb*m9045); bb.bound(urb*m9045); bb.bound(ulb*m9045); Vector3d bs = bb.size(); double ll = bs[0] > bs[1] ? bs[0] : bs[1]; double mm = dest[0] > dest[1] ? dest[0] : dest[1]; return 1/ll*mm; } void Frame3dBase::centerImage() { Base::centerImage(); viewCursor_ = Vector(); if (keyContext->fits) { // imageCenter is in IMAGE coords Vector3d aa = imageCenter3d(keyContext->secMode()); // always center to center of pixel, even for even sized image Vector3d bb = (aa*Translate3d(.5,.5,.5)).floor(); // vp_ is in REF coords vp_ = bb*imageToData3d; } else vp_ = Vector(); } Vector3d Frame3dBase::imageCenter3d(FrScale::SecMode mode) { if (!keyContext->fits) return Vector3d(); // params is a BBOX in DATA coords 0-n FitsBound* pp = keyContext->fits->getDataParams(mode); FitsZBound* zz = keyContext->getDataParams(mode); // Note: imageCenter() is in IMAGE coords return Vector3d((pp->xmax - pp->xmin)/2.+pp->xmin, (pp->ymax - pp->ymin)/2.+pp->ymin, (zz->zmax - zz->zmin)/2.+zz->zmin) * dataToImage3d; } Vector3d Frame3dBase::imageSize3d(FrScale::SecMode mode ) { if (!keyContext->fits) return Vector3d(); // params is a BBOX in DATA coords 0-n FitsBound* params = keyContext->fits->getDataParams(mode); FitsZBound* zparams = keyContext->getDataParams(mode); // return in IMAGE coords and extends edge to edge return Vector3d(params->xmax-params->xmin, params->ymax-params->ymin, zparams->zmax-zparams->zmin); } void Frame3dBase::psColor(PSColorSpace mode, const char* color) { ostringstream str; switch (mode) { case BW: case GRAY: psColorGray(getXColor(color), str); str << " setgray"; break; case RGB: psColorRGB(getXColor(color), str); str << " setrgbcolor"; break; case CMYK: psColorCMYK(getXColor(color), str); str << " setcmykcolor"; break; } str << endl << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Frame3dBase::psLine(Vector& ss, Vector& tt, int dd) { ostringstream str; if (dd) str << '[' << dlist[0] << ' ' << dlist[1] << "] 0 setdash" << endl; else str << "[] 0 setdash" << endl; str << "newpath " << ss.TkCanvasPs(canvas) << " moveto" << endl << tt.TkCanvasPs(canvas) << " lineto stroke" << endl << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Frame3dBase::psWidth(int dd) { ostringstream str; str << dd << " setlinewidth" << endl << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Frame3dBase::psGraphics(PSColorSpace mode) { if (!keyContext->fits) return; if (border_) psBorder(mode); if (compass_) psCompass(mode); if (highlite_) psHighlite(mode); } void Frame3dBase::psBorder(PSColorSpace mode) { Vector3d vv[8]; int dd[12]; calcBorder(Coord::WIDGET, keyContext->secMode(), vv, dd); Vector uu[8]; for (int ii=0; ii<8; ii++) uu[ii] = Vector(vv[ii])*widgetToCanvas; psColor(mode, borderColorName_); psWidth(1); // front psLine(uu[0],uu[1],dd[0]); psLine(uu[1],uu[2],dd[1]); psLine(uu[2],uu[3],dd[2]); psLine(uu[3],uu[0],dd[3]); // back psLine(uu[4],uu[5],dd[4]); psLine(uu[5],uu[6],dd[5]); psLine(uu[6],uu[7],dd[6]); psLine(uu[7],uu[4],dd[7]); // other psLine(uu[0],uu[4],dd[8]); psLine(uu[1],uu[5],dd[9]); psLine(uu[2],uu[6],dd[10]); psLine(uu[3],uu[7],dd[11]); } void Frame3dBase::psCompass(PSColorSpace mode) { Matrix3d& mm = keyContext->fits->dataToWidget3d; double ss = 100./(zoom_[0]+zoom_[1]); Vector3d oo = vp_*mm; Vector3d xx = Vector3d(1,0,0) * Scale3d(ss) * Translate3d(vp_) * mm; Vector3d yy = Vector3d(0,1,0) * Scale3d(ss) * Translate3d(vp_) * mm; Vector3d zz = Vector3d(0,0,1) * Scale3d(ss) * Translate3d(vp_) * mm; Vector o = Vector(oo)*widgetToCanvas; Vector x = Vector(xx)*widgetToCanvas; Vector y = Vector(yy)*widgetToCanvas; Vector z = Vector(zz)*widgetToCanvas; psColor(mode, compassColorName_); psWidth(1); psLine(o,x,0); psLine(o,y,0); psLine(o,z,0); } void Frame3dBase::psHighlite(PSColorSpace mode) { Vector vv[4]; int rr[4]; calcHighlite(Coord::CANVAS,vv,rr); psColor(mode, highliteColorName_); psWidth(1); psLine(vv[0],vv[1],rr[0]); psLine(vv[1],vv[2],rr[1]); psLine(vv[2],vv[3],rr[2]); psLine(vv[3],vv[0],rr[3]); } Matrix3d Frame3dBase::psMatrix(float scale, int width, int height) { Matrix3d userToPS3d = Matrix3d(wcsOrientationMatrix) * Matrix3d(orientationMatrix) * RotateZ3d(-wcsRotation) * RotateZ3d(-rotation) * RotateY3d(az_) * RotateX3d(el_) * Translate3d(viewCursor_) * Scale3d(zoom_, zzoom_) * Scale3d(scale,1) * FlipY3d() * Translate3d(width/2., height/2., zdepth_/2.); return refToUser3d*userToPS3d; } void Frame3dBase::setSlice(int id, int ss) { // IMAGE (ranges 1-n) currentContext->updateSlice(id, ss); if (id==2) { currentContext->updateContours(); update(BASEONLY); } else { // load the next cube currentContext->updateClip(); currentContext->updateContoursScale(); updateColorScale(); update(MATRIX); } Base::setSlice(id,ss); } void Frame3dBase::updateBin(const Matrix& mx) { centerImage(); Base::updateBin(mx); } void Frame3dBase::updateBlock(const Vector& vv) { centerImage(); Base::updateBlock(vv); } void Frame3dBase::updateGCs() { Base::updateGCs(); // widget clip region BBox bbWidget = BBox(0, 0, options->width, options->height); Vector sizeWidget = bbWidget.size(); rectWidget[0].x = (int)bbWidget.ll[0]; rectWidget[0].y = (int)bbWidget.ll[1]; rectWidget[0].width = (int)sizeWidget[0]; rectWidget[0].height = (int)sizeWidget[1]; // window clip region BBox bbWindow = bbWidget * widgetToWindow; Vector sizeWindow = bbWindow.size(); rectWindow[0].x = (int)bbWindow.ll[0]; rectWindow[0].y = (int)bbWindow.ll[1]; rectWindow[0].width = (int)sizeWindow[0]; rectWindow[0].height = (int)sizeWindow[1]; // 3d highlite if (!threedGC) { threedGC = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); XSetLineAttributes(display, threedGC, 1, LineSolid, CapButt, JoinMiter); } XSetClipRectangles(display, threedGC, 0, 0, rectWidget, 1, Unsorted); } void Frame3dBase::updateMatrices() { if (DebugPerf) cerr << "Frame3dBase::updateMatrices()..." << endl; zzoom_ = (zoom_[0]+zoom_[1])/2.; if (zzoom_<1) zzoom_ = 1; // if othogonal, reset zzoom if ((teq(az_,0,.001) || teq(fabs(az_),M_PI_2,.001) || teq(fabs(az_),M_PI,.001)) && (teq(el_,0,.001) || teq(fabs(el_),M_PI_2,.001))) zzoom_ =1; // These are the basic tranformation matrices // Note: imageCenter() is in IMAGE coords refToUser3d = Translate3d(-vp_) * Scale3d(1,zscale_) * FlipY3d(); userToRef3d = refToUser3d.invert(); // userToWidget3d userToWidget3d = Matrix3d(wcsOrientationMatrix) * Matrix3d(orientationMatrix) * RotateZ3d(-wcsRotation) * RotateZ3d(-rotation) * RotateY3d(az_) * RotateX3d(el_) * Translate3d(viewCursor_) * Scale3d(zoom_, zzoom_) * // must be int to align with screen pixels Translate3d((int)(options->width/2.), (int)(options->height/2.), (int)(zdepth_/2.)); widgetToUser3d = userToWidget3d.invert(); // widgetToCanvas widgetToCanvas3d = Translate3d(originX, originY, 0); canvasToWidget3d = widgetToCanvas3d.invert(); // canvasToWindow short xx, yy; Tk_CanvasWindowCoords(canvas, 0, 0, &xx, &yy); canvasToWindow3d = Translate3d(xx, yy, 0); windowToCanvas3d = canvasToWindow3d.invert(); // These are derived Transformation Matrices refToWidget3d = refToUser3d * userToWidget3d; widgetToRef3d = refToWidget3d.invert(); refToCanvas3d = refToWidget3d * widgetToCanvas3d; canvasToRef3d = refToCanvas3d.invert(); refToWindow3d = refToCanvas3d * canvasToWindow3d; windowToRef3d = refToWindow3d.invert(); userToCanvas3d = userToWidget3d * widgetToCanvas3d; canvasToUser3d = userToCanvas3d.invert(); userToWindow3d = userToCanvas3d * canvasToWindow3d; windowToUser3d = userToWindow3d.invert(); widgetToWindow3d = widgetToCanvas3d * canvasToWindow3d; windowToWidget3d = widgetToWindow3d.invert(); Base::updateMatrices(); // delete current zbuffer since matrices have changed cancelDetach(); // preserve cache? if (!preservecache_) { cache_.deleteAll(); pannerCache_.deleteAll(); } preservecache_ =0; if (DebugPerf) cerr << "updateMatrices end" << endl; } void Frame3dBase::updateMagnifierMatrices() { // vv is in CANVAS coords Vector ww = magnifierCursor*canvasToRef; // refToUser3d Matrix3d refToUser3d = Translate3d(Vector3d(-ww,-vp_[2])) * FlipY3d(); // userToMagnifier userToMagnifier3d = Matrix3d(wcsOrientationMatrix) * Matrix3d(orientationMatrix) * RotateZ3d(-wcsRotation) * RotateZ3d(-rotation) * RotateY3d(az_) * RotateX3d(el_) * Translate3d(viewCursor_) * Scale3d(zoom_, zzoom_) * Scale3d(magnifierZoom_,magnifierZoom_) * Translate3d((int)(magnifierWidth/2.), (int)(magnifierHeight/2.), (int)(zdepth_/2.)); magnifierToUser3d = userToMagnifier3d.invert(); refToMagnifier3d = refToUser3d * userToMagnifier3d; magnifierToRef3d = refToMagnifier3d.invert(); magnifierToWidget3d = magnifierToRef3d * refToWidget3d; widgetToMagnifier3d = magnifierToWidget3d.invert(); Base::updateMagnifierMatrices(); } void Frame3dBase::updatePannerMatrices() { Vector3d center = imageCenter3d(FrScale::IMGSEC) * imageToData3d; // refToUser3d Matrix3d refToUser3d = Translate3d(-center) * Scale3d(1,zscale_) * FlipY3d(); // userToPanner3d double pz = calcZoomPanner(); double zz = zzoom_*pz; if (zz<1) zz =1; userToPanner3d = Matrix3d(wcsOrientationMatrix) * Matrix3d(orientationMatrix) * RotateZ3d(-wcsRotation) * RotateZ3d(-rotation) * RotateY3d(az_) * RotateX3d(el_) * Scale3d(pz, zz) * Translate3d((int)(pannerWidth/2.), (int)(pannerHeight/2.), (int)(zdepth_/2.)); pannerToUser3d = userToPanner3d.invert(); refToPanner3d = refToUser3d * userToPanner3d; pannerToRef3d = refToPanner3d.invert(); pannerToWidget3d = pannerToRef3d * refToWidget3d; widgetToPanner3d = pannerToWidget3d.invert(); Base::updatePannerMatrices(); } void Frame3dBase::updatePanner() { // do this first Base::updatePanner(); // always render (to update panner background color) if (usePanner) { if (keyContext->fits) { XSetForeground(display, pannerGC, getColor("black")); x11Border(Coord::PANNER,FrScale::IMGSEC,pannerGC,pannerPixmap); } ostringstream str; str << pannerName << " update " << (void*)pannerPixmap << ';'; // calculate bbox Vector ll = Vector(0,0) * widgetToPanner3d; Vector lr = Vector(options->width,0) * widgetToPanner3d; Vector ur = Vector(options->width,options->height) * widgetToPanner3d; Vector ul = Vector(0,options->height) * widgetToPanner3d; str << pannerName << " update bbox " << ll << ' ' << lr << ' ' << ur << ' ' << ul << ';'; // calculate image compass vectors Matrix3d mm = Matrix3d(wcsOrientationMatrix) * Matrix3d(orientationMatrix) * RotateZ3d(wcsRotation) * RotateZ3d(rotation) * RotateY3d(az_) * RotateX3d(-el_) * FlipY3d(); Vector xx = (Vector3d(1,0,0)*mm).normalize(); Vector yy = (Vector3d(0,1,0)*mm).normalize(); Vector zz = (Vector3d(0,0,1)*mm).normalize(); str << pannerName << " update image compass " << xx << ' ' << yy << ' ' << zz << ';'; if (keyContext->fits && keyContext->fits->hasWCS(wcsSystem_)) { Vector orpix = keyContext->fits->center(); Vector orval=keyContext->fits->pix2wcs(orpix, wcsSystem_, wcsSky_); Vector orpix2 = keyContext->fits->wcs2pix(orval, wcsSystem_,wcsSky_); Vector delta = keyContext->fits->getWCScdelt(wcsSystem_).abs(); // find normalized north Vector npix = keyContext->fits->wcs2pix(Vector(orval[0],orval[1]+delta[1]), wcsSystem_,wcsSky_); Vector north = (Vector3d(npix-orpix2)*mm).normalize(); // find normalized east Vector epix = keyContext->fits->wcs2pix(Vector(orval[0]+delta[0],orval[1]), wcsSystem_,wcsSky_); Vector east = (Vector3d(epix-orpix2)*mm).normalize(); // sanity check Vector diff = (north-east).abs(); if ((north[0]==0 && north[1]==0) || (east[0]==0 && east[1]==0) || (diff[0]<.01 && diff[1]<.01)) { north = (Vector3d(0,1)*mm).normalize(); east = (Vector3d(-1,0)*mm).normalize(); } // and update the panner str << pannerName << " update wcs compass " << north << ' ' << east << ends; } else str << pannerName << " update wcs compass invalid" << ends; Tcl_Eval(interp, str.str().c_str()); } } void Frame3dBase::x11Graphics() { Base::x11Graphics(); if (!keyContext->fits) return; if (border_) { XSetForeground(display, threedGC, getColor(borderColorName_)); x11Border(Coord::WIDGET, keyContext->secMode(), threedGC, pixmap); } if (compass_) x11Compass(); if (highlite_) x11Highlite(); } void Frame3dBase::x11Line(Vector ss, Vector tt, int dd, GC gc, Pixmap pm) { if (clip(&ss,&tt,options->width,options->height)) { x11Dash(gc, dd); XDrawLine(display, pm, gc, ss[0], ss[1], tt[0], tt[1]); } } void Frame3dBase::x11Border(Coord::InternalSystem sys, FrScale::SecMode mode, GC gc, Pixmap pm) { Vector3d vv[8]; int dd[12]; calcBorder(sys, mode, vv, dd); // front x11Line(vv[0], vv[1], dd[0], gc, pm); x11Line(vv[1], vv[2], dd[1], gc, pm); x11Line(vv[2], vv[3], dd[2], gc, pm); x11Line(vv[3], vv[0], dd[3], gc, pm); // back x11Line(vv[4], vv[5], dd[4], gc, pm); x11Line(vv[5], vv[6], dd[5], gc, pm); x11Line(vv[6], vv[7], dd[6], gc, pm); x11Line(vv[7], vv[4], dd[7], gc, pm); // other x11Line(vv[0], vv[4], dd[8], gc, pm); x11Line(vv[1], vv[5], dd[9], gc, pm); x11Line(vv[2], vv[6], dd[10], gc, pm); x11Line(vv[3], vv[7], dd[11], gc, pm); } void Frame3dBase::x11Compass() { Matrix3d& mm = keyContext->fits->dataToWidget3d; double ss = 100./(zoom_[0]+zoom_[1]); Vector3d oo = vp_*mm; Vector3d xx = Vector3d(1,0,0) * Scale3d(ss) * Translate3d(vp_) * mm; Vector3d yy = Vector3d(0,1,0) * Scale3d(ss) * Translate3d(vp_) * mm; Vector3d zz = Vector3d(0,0,1) * Scale3d(ss) * Translate3d(vp_) * mm; x11Dash(threedGC, 0); XSetForeground(display, threedGC, getColor(compassColorName_)); XDrawLine(display, pixmap, threedGC, oo[0], oo[1], xx[0], xx[1]); XDrawLine(display, pixmap, threedGC, oo[0], oo[1], yy[0], yy[1]); XDrawLine(display, pixmap, threedGC, oo[0], oo[1], zz[0], zz[1]); } /* void Frame3dBase::renderArm(int length, Vector center, Rotate rot, const char* str, int color) { if (!tkfont_) { ostringstream fstr; fstr << '{' << options->helvetica << '}' << " 9 roman normal" << ends; tkfont_ = Tk_GetFont(interp, tkwin, fstr.str().c_str()); if (tkfont_) Tk_GetFontMetrics(tkfont_, &metric); } if (!compassGC) { compassGC = XCreateGC(display, pixmap, 0, NULL); XSetLineAttributes(display, compassGC, 1, LineSolid, CapButt, JoinMiter); if (tkfont_) XSetFont(display, compassGC, Tk_FontId(tkfont_)); } if (length<=0) return; // set GC XSetForeground(display, compassGC, color); const int textOffset = 15; // Text offset const int tip = 6; // length from end of line to tip of arrow const int tail = 2; // length from end of line to tails of arrow const int wc = 2; // width of arrow at end of line const int wt = 3; // width of arrow at tails // Arrow-- oriented on Y axis Vector arrow[6]; arrow[0] = Vector(0, tip); arrow[1] = Vector(-wc, 0); arrow[2] = Vector(-wt, -tail); arrow[3] = Vector(0, 0); arrow[4] = Vector(wt, -tail); arrow[5] = Vector(wc, 0); // Staff-- oriented on X axis XPoint arrowArray[6]; Matrix arrowMatrix = Rotate(M_PI_2) * Translate(length,0) * rot * Translate(center); for (int i=0; i<6; i++) { Vector r = (arrow[i] * arrowMatrix).round(); arrowArray[i].x = (int)r[0]; arrowArray[i].y = (int)r[1]; } Vector c = ((Vector&)center).round(); Vector end = (Vector(length, 0) * rot * Translate(center)).round(); XDrawLine(display, pixmap, compassGC, (int)c[0], (int)c[1], (int)end[0], (int)end[1]); XFillPolygon(display, pixmap, compassGC, arrowArray, 6, Nonconvex, CoordModeOrigin); if (useFont && tkfont_) { Vector et = Vector((length + textOffset), 0) * rot * Translate(center) * Translate(-Tk_TextWidth(tkfont_, str, 1)/2., metric.ascent/2.); Tk_DrawChars(display, pixmap, compassGC, tkfont_, str, 1, (int)et[0], (int)et[1]); } } */ void Frame3dBase::x11Highlite() { Vector vv[4]; int rr[4]; calcHighlite(Coord::WIDGET,vv,rr); XSetForeground(display, threedGC, getColor(highliteColorName_)); x11Line(vv[0], vv[1], rr[0], threedGC, pixmap); x11Line(vv[1], vv[2], rr[1], threedGC, pixmap); x11Line(vv[2], vv[3], rr[2], threedGC, pixmap); x11Line(vv[3], vv[0], rr[3], threedGC, pixmap); } void Frame3dBase::ximageToPixmapMagnifier() { if (!basePixmap || !baseXImage || !magnifierPixmap || !magnifierXImage) return; // magnifier int& ww = magnifierXImage->width; int& hh = magnifierXImage->height; Vector wh(ww,hh); Vector cc = magnifierCursor * canvasToWidget; Vector ll =cc-wh/2.; Vector ur =cc+wh/2.; // clip to base BBox bb(0,0,baseXImage->width,baseXImage->height); Vector uu(ll); Vector vv(ur); uu.clip(bb); vv.clip(bb); Vector zz = vv-uu; Vector oo = uu-ll; // sanity check if (zz[0]<=0 || zz[1]<=0) return; XImage* srcXImage = XGetImage(display, basePixmap, uu[0], uu[1], zz[0], zz[1], AllPlanes, ZPixmap); char* src = srcXImage->data; int srcBytesPerLine = srcXImage->bytes_per_line; char* dst = magnifierXImage->data; int dstBytesPerLine = magnifierXImage->bytes_per_line; int bytesPerPixel = magnifierXImage->bits_per_pixel/8; Matrix mx = Translate(-wh/2.) * Translate(oo) * Translate(-.5,-.5) * Scale(magnifierZoom_) * Translate(wh/2.); Matrix mm = mx.invert(); for (int jj=0; jj= 0 && vv[0] < zz[0] && vv[1] >= 0 && vv[1] < zz[1]) { // I really don't understand this #if MAC_OSX_TK char* sptr = src + ((int)vv[1])*srcBytesPerLine + ((int)vv[0])*bytesPerPixel; *(dest+0) = *(sptr+3); *(dest+1) = *(sptr+0); *(dest+2) = *(sptr+1); *(dest+3) = *(sptr+2); #else memcpy(dest, src + ((int)vv[1])*srcBytesPerLine + ((int)vv[0])*bytesPerPixel, bytesPerPixel); #endif } else memcpy(dest, bgTrueColor_, bytesPerPixel); } } TkPutImage(NULL, 0, display, magnifierPixmap, widgetGC, magnifierXImage, 0, 0, 0, 0, magnifierXImage->width, magnifierXImage->height); if (srcXImage) XDestroyImage(srcXImage); } #ifdef MAC_OSX_TK void Frame3dBase::macosxLine(Vector& ss, Vector& tt, int dd) { if (dd) macosxDash(dlist,2); else macosxDash(NULL,0); macosxDrawLine(ss,tt); } void Frame3dBase::macosxGraphics() { if (!keyContext->fits) return; if (border_) macosxBorder(); if (compass_) macosxCompass(); if (highlite_) macosxHighlite(); } void Frame3dBase::macosxBorder() { Vector3d vv[8]; int dd[12]; calcBorder(Coord::WIDGET, keyContext->secMode(), vv, dd); Vector uu[8]; for (int ii=0; ii<8; ii++) uu[ii] = Vector(vv[ii])*widgetToCanvas; macosxColor(getXColor(borderColorName_)); macosxWidth(1); // front macosxLine(uu[0],uu[1],dd[0]); macosxLine(uu[1],uu[2],dd[1]); macosxLine(uu[2],uu[3],dd[2]); macosxLine(uu[3],uu[0],dd[3]); // back macosxLine(uu[4],uu[5],dd[4]); macosxLine(uu[5],uu[6],dd[5]); macosxLine(uu[6],uu[7],dd[6]); macosxLine(uu[7],uu[4],dd[7]); // other macosxLine(uu[0],uu[4],dd[8]); macosxLine(uu[1],uu[5],dd[9]); macosxLine(uu[2],uu[6],dd[10]); macosxLine(uu[3],uu[7],dd[11]); } void Frame3dBase::macosxCompass() { Matrix3d& mm = keyContext->fits->dataToWidget3d; double ss = 100./(zoom_[0]+zoom_[1]); Vector3d oo = vp_*mm; Vector3d xx = Vector3d(1,0,0) * Scale3d(ss) * Translate3d(vp_) * mm; Vector3d yy = Vector3d(0,1,0) * Scale3d(ss) * Translate3d(vp_) * mm; Vector3d zz = Vector3d(0,0,1) * Scale3d(ss) * Translate3d(vp_) * mm; Vector o = Vector(oo)*widgetToCanvas; Vector x = Vector(xx)*widgetToCanvas; Vector y = Vector(yy)*widgetToCanvas; Vector z = Vector(zz)*widgetToCanvas; macosxColor(getXColor(compassColorName_)); macosxWidth(1); macosxLine(o,x,0); macosxLine(o,y,0); macosxLine(o,z,0); } void Frame3dBase::macosxHighlite() { Vector vv[4]; int rr[4]; calcHighlite(Coord::CANVAS,vv,rr); macosxColor(getXColor(highliteColorName_)); macosxWidth(1); macosxLine(vv[0],vv[1],rr[0]); macosxLine(vv[1],vv[2],rr[1]); macosxLine(vv[2],vv[3],rr[2]); macosxLine(vv[3],vv[0],rr[3]); } #endif #ifdef __WIN32 void Frame3dBase::win32Line(Vector& ss, Vector& tt, int dd) { if (dd) win32Dash(dlist,2); else win32Dash(NULL,0); win32DrawLine(ss,tt); } void Frame3dBase::win32Graphics() { if (!keyContext->fits) return; if (border_) win32Border(); if (compass_) win32Compass(); if (highlite_) win32Highlite(); } void Frame3dBase::win32Border() { Vector3d vv[8]; int dd[12]; calcBorder(Coord::WIDGET, keyContext->secMode(), vv, dd); Vector uu[8]; for (int ii=0; ii<8; ii++) uu[ii] = Vector(vv[ii])*widgetToCanvas; win32Color(getXColor(borderColorName_)); win32Width(1); // front win32Line(uu[0],uu[1],dd[0]); win32Line(uu[1],uu[2],dd[1]); win32Line(uu[2],uu[3],dd[2]); win32Line(uu[3],uu[0],dd[3]); // back win32Line(uu[4],uu[5],dd[4]); win32Line(uu[5],uu[6],dd[5]); win32Line(uu[6],uu[7],dd[6]); win32Line(uu[7],uu[4],dd[7]); // other win32Line(uu[0],uu[4],dd[8]); win32Line(uu[1],uu[5],dd[9]); win32Line(uu[2],uu[6],dd[10]); win32Line(uu[3],uu[7],dd[11]); } void Frame3dBase::win32Compass() { Matrix3d& mm = keyContext->fits->dataToWidget3d; double ss = 100./(zoom_[0]+zoom_[1]); Vector3d oo = vp_*mm; Vector3d xx = Vector3d(1,0,0) * Scale3d(ss) * Translate3d(vp_) * mm; Vector3d yy = Vector3d(0,1,0) * Scale3d(ss) * Translate3d(vp_) * mm; Vector3d zz = Vector3d(0,0,1) * Scale3d(ss) * Translate3d(vp_) * mm; Vector o = Vector(oo)*widgetToCanvas; Vector x = Vector(xx)*widgetToCanvas; Vector y = Vector(yy)*widgetToCanvas; Vector z = Vector(zz)*widgetToCanvas; win32Color(getXColor(compassColorName_)); win32Width(1); win32Line(o,x,0); win32Line(o,y,0); win32Line(o,z,0); } void Frame3dBase::win32Highlite() { Vector vv[4]; int rr[4]; calcHighlite(Coord::CANVAS,vv,rr); win32Color(getXColor(highliteColorName_)); win32Width(1); win32Line(vv[0],vv[1],rr[0]); win32Line(vv[1],vv[2],rr[1]); win32Line(vv[2],vv[3],rr[2]); win32Line(vv[3],vv[0],rr[3]); } #endif saods9/tksao/frame/frame3dbase.h000644 000765 000000 00000014013 12750203255 017124 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __frame3dbase_h__ #define __frame3dbase_h__ #include "base.h" #include "raytrace.h" class Grid3d; class Frame3dBase : public Base { friend class Grid3d; public: enum RenderMethod {MIP,AIP}; enum MotionType {NONE,AZIMUTH,ELEVATION}; protected: int zdepth_; double zzoom_; double zscale_; Vector3d vp_; Vector viewCursor_; float az_; float el_; RenderMethod renderMethod_; List cache_; List pannerCache_; int preservecache_; MotionType render_; // enable background rendering GC threedGC; int border_; char* borderColorName_; int compass_; char* compassColorName_; int highlite_; char* highliteColorName_; double cropsl_; Matrix3d dataToImage3d; Matrix3d imageToData3d; Matrix3d refToUser3d; Matrix3d userToRef3d; Matrix3d refToWidget3d; Matrix3d widgetToRef3d; Matrix3d refToCanvas3d; Matrix3d canvasToRef3d; Matrix3d refToWindow3d; Matrix3d windowToRef3d; Matrix3d userToWidget3d; Matrix3d widgetToUser3d; Matrix3d userToCanvas3d; Matrix3d canvasToUser3d; Matrix3d userToWindow3d; Matrix3d windowToUser3d; Matrix3d widgetToCanvas3d; Matrix3d canvasToWidget3d; Matrix3d widgetToWindow3d; Matrix3d windowToWidget3d; Matrix3d canvasToWindow3d; Matrix3d windowToCanvas3d; Matrix3d refToMagnifier3d; Matrix3d magnifierToRef3d; Matrix3d userToMagnifier3d; Matrix3d magnifierToUser3d; Matrix3d widgetToMagnifier3d; Matrix3d magnifierToWidget3d; Matrix3d refToPanner3d; Matrix3d pannerToRef3d; Matrix3d userToPanner3d; Matrix3d pannerToUser3d; Matrix3d widgetToPanner3d; Matrix3d pannerToWidget3d; private: void calcBorder(Coord::InternalSystem, FrScale::SecMode mode, Vector3d* vv, int* dd); void calcHighlite(Coord::InternalSystem, Vector*, int*); protected: double calcZoomPanner(); double calcZoom3d(Vector3d, Vector); virtual void cancelDetach() =0; void centerImage(); int isAzElZero() {return !az_ && !el_;} Vector3d imageCenter3d(FrScale::SecMode); Vector3d imageSize3d(FrScale::SecMode); void psColor(PSColorSpace, const char*); void psLine(Vector&, Vector&, int); void psWidth(int); void psGraphics(PSColorSpace mode); void psBorder(PSColorSpace mode); void psCompass(PSColorSpace mode); void psHighlite(PSColorSpace mode); Matrix3d psMatrix(float scale, int width, int height); void setBinCursor() {} void updateBin(const Matrix&); void updateBlock(const Vector&); void updateGCs(); void updateMagnifierMatrices(); void updatePannerMatrices(); void updateMatrices(); void updatePanner(); void x11Line(Vector, Vector, int, GC, Pixmap); void x11Graphics(); void x11Border(Coord::InternalSystem, FrScale::SecMode, GC, Pixmap); void x11Compass(); void x11Highlite(); void ximageToPixmapMagnifier(); public: Frame3dBase(Tcl_Interp*, Tk_Canvas, Tk_Item*); virtual ~Frame3dBase(); void setSlice(int,int); Vector mapFromRef(const Vector& vv, Coord::InternalSystem sys) {return mapFromRef3d(vv,sys);} Vector3d mapFromRef3d(const Vector&, Coord::InternalSystem); Vector3d mapFromRef3d(const Vector&, Coord::InternalSystem, double); Vector mapToRef(const Vector& vv, Coord::InternalSystem sys) {return mapToRef3d(vv,sys);} Vector3d mapToRef3d(const Vector&, Coord::InternalSystem); Vector3d mapToRef3d(const Vector&, Coord::InternalSystem, double); // Bin Commands void binToFitCmd(); // Block Commands void blockToFitCmd(); // Clip Commands void clipScopeCmd(FrScale::ClipScope) {} // scope is always GLOBAL // Coordinate Commands void getCursorCmd(Coord::InternalSystem); void getCursorCmd(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); // Crop Commands void crop3dBeginCmd(const Vector&, int); void crop3dMotionCmd(const Vector&, int); void crop3dEndCmd(const Vector&, int); // Grid Commands void gridCmd(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, Grid::GridType, const char*, const char*); // Pan Zoom Rotate Orient Commands void panCmd(const Vector&); void panCmd(const Vector&, const Vector&); void panCmd(const Vector&, Coord::CoordSystem, Coord::SkyFrame); void panToCmd(const Vector&); void panToCmd(const Vector&, Coord::CoordSystem, Coord::SkyFrame); void panBBoxCmd(const Vector&); void panEndCmd(const Vector&); void rotateBeginCmd(); void rotateMotionCmd(double); void rotateEndCmd(); void zoomAboutCmd(const Vector&, const Vector&); void zoomAboutCmd(const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyFrame); void zoomToAboutCmd(const Vector&, const Vector&); void zoomToAboutCmd(const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyFrame); void zoomToFitCmd(double); // 3d Commands void get3dBorderCmd(); void get3dBorderColorCmd(); void get3dCompassCmd(); void get3dCompassColorCmd(); void get3dHighliteCmd(); void get3dHighliteColorCmd(); void get3dRenderMethodCmd(); void get3dRenderBackgroundCmd(); void get3dScaleCmd(); void get3dViewCmd(); void get3dViewPointCmd(); void set3dBorderCmd(int); void set3dBorderColorCmd(const char*); void set3dCompassCmd(int); void set3dCompassColorCmd(const char*); void set3dHighliteCmd(int); void set3dHighliteColorCmd(const char*); void set3dRenderMethodCmd(int); void set3dRenderBackgroundCmd(int); void set3dPreserveCmd(); void set3dScaleCmd(double); void set3dViewCmd(float, float); void set3dViewPointCmd(const Vector3d&, const Vector&); void view3dMotionCmd(float az, float el) {set3dViewCmd(az,el);} void view3dEndCmd(float az, float el) {set3dViewCmd(az,el);} #ifdef MAC_OSX_TK void macosxLine(Vector&, Vector&, int); void macosxGraphics(); void macosxBorder(); void macosxCompass(); void macosxHighlite(); #endif #ifdef __WIN32 void win32Line(Vector&, Vector&, int); void win32Graphics(); void win32Border(); void win32Compass(); void win32Highlite(); #endif }; #endif saods9/tksao/frame/frame3dtruecolor16.C000644 000765 000000 00000012404 12705767426 020353 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "frame3dtruecolor16.h" #include "colorscaletrue16.h" #include "util.h" // Tk Canvas Widget Function Declarations int Frame3dTrueColor16CreateProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const []); // Frame3dTrueColor16 Specs static Tk_CustomOption tagsOption = { Tk_CanvasTagsParseProc, Tk_CanvasTagsPrintProc, NULL }; static Tk_ConfigSpec frame3dTrueColor16Specs[] = { {TK_CONFIG_STRING, (char*)"-command", NULL, NULL, "frame3d", Tk_Offset(WidgetOptions, cmdName), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-x", NULL, NULL, "1", Tk_Offset(WidgetOptions, x), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-y", NULL, NULL, "1", Tk_Offset(WidgetOptions, y), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-width", NULL, NULL, "512", Tk_Offset(WidgetOptions, width), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-height", NULL, NULL, "512", Tk_Offset(WidgetOptions, height), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_ANCHOR, (char*)"-anchor", NULL, NULL, "nw", Tk_Offset(WidgetOptions, anchor), 0, NULL}, {TK_CONFIG_CUSTOM, (char*)"-tags", NULL, NULL, NULL, 0, TK_CONFIG_NULL_OK, &tagsOption}, {TK_CONFIG_STRING, (char*)"-helvetica", NULL, NULL, "helvetica", Tk_Offset(WidgetOptions, helvetica), 0, NULL}, {TK_CONFIG_STRING, (char*)"-courier", NULL, NULL, "courier", Tk_Offset(WidgetOptions, courier), 0, NULL}, {TK_CONFIG_STRING, (char*)"-times", NULL, NULL, "times", Tk_Offset(WidgetOptions, times), 0, NULL}, {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL}, }; // Tk Static Structure static Tk_ItemType frame3dTrueColor16Type = { (char*)"frame3dtruecolor16", // name sizeof(WidgetOptions), // item size Frame3dTrueColor16CreateProc, // configProc frame3dTrueColor16Specs, // configSpecs WidgetConfigProc, // configProc WidgetCoordProc, // coordProc WidgetDeleteProc, // deleteProc WidgetDisplayProc, // displayProc 0, // alwaysRedraw WidgetPointProc, // pointProc WidgetAreaProc, // areaProc WidgetPostscriptProc, // postscriptProc WidgetScaleProc, // scaleProc WidgetTranslateProc, // translateProc (Tk_ItemIndexProc*)NULL, // indexProc WidgetICursorProc, // icursorProc (Tk_ItemSelectionProc*)NULL, // selectionProc (Tk_ItemInsertProc*)NULL, // insertProc (Tk_ItemDCharsProc*)NULL, // dCharsProc (Tk_ItemType*)NULL // nextPtr }; // Non-Member Functions int Frame3dTrueColor16_Init(Tcl_Interp* interp) { Tk_CreateItemType(&frame3dTrueColor16Type); return TCL_OK; } int Frame3dTrueColor16CreateProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[]) { Frame3dTrueColor16* frame = new Frame3dTrueColor16(interp, canvas, item); // and set default configuration if (frame->configure(argc, (const char**)argv, 0) != TCL_OK) { delete frame; Tcl_AppendResult(interp, " error occured while creating frame.", NULL); return TCL_ERROR; } return TCL_OK; } // Frame3dTrueColor16 Member Functions Frame3dTrueColor16::Frame3dTrueColor16(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Frame3d(i,c,item), TrueColor16(visual) { configSpecs = frame3dTrueColor16Specs; // frame configure options } Frame3dTrueColor16::~Frame3dTrueColor16() { // we must do this at this level, because updateColorScale is called unloadAllFits(); } void Frame3dTrueColor16::updateColorScale() { // we need colors before we can construct a scale if (!colorCells) return; if (colorScale) delete colorScale; switch (context->colorScaleType()) { case FrScale::LINEARSCALE: colorScale = new LinearScaleTrueColor16(colorCount, colorCells, colorCount, visual, byteorder_); break; case FrScale::LOGSCALE: colorScale = new LogScaleTrueColor16(SCALESIZE, colorCells, colorCount, context->expo(), visual, byteorder_); break; case FrScale::POWSCALE: colorScale = new PowScaleTrueColor16(SCALESIZE, colorCells, colorCount, context->expo(), visual, byteorder_); break; case FrScale::SQRTSCALE: colorScale = new SqrtScaleTrueColor16(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::SQUAREDSCALE: colorScale = new SquaredScaleTrueColor16(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::ASINHSCALE: colorScale = new AsinhScaleTrueColor16(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::SINHSCALE: colorScale = new SinhScaleTrueColor16(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::HISTEQUSCALE: colorScale = new HistEquScaleTrueColor16(SCALESIZE, colorCells, colorCount, context->histequ(), HISTEQUSIZE, visual, byteorder_); break; case FrScale::IISSCALE: colorScale = new IISScaleTrueColor16(colorCells, colorCount, visual, byteorder_); break; } } saods9/tksao/frame/frame3dtruecolor16.h000644 000765 000000 00000001266 12705767426 020424 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __frame3dtruecolor16_h__ #define __frame3dtruecolor16_h__ #include "frame3d.h" #include "truecolor16.h" class Frame3dTrueColor16 : public Frame3d, public TrueColor16 { private: void encodeTrueColor(XColor* src, char* dest) {TrueColor16::encodeTrueColor(src,dest,baseXImage);} void encodeTrueColor(unsigned char* src, XImage* ximage) {TrueColor16::encodeTrueColor(src, ximage);} void updateColorScale(); public: Frame3dTrueColor16(Tcl_Interp*, Tk_Canvas, Tk_Item*); ~Frame3dTrueColor16(); }; #endif saods9/tksao/frame/frame3dtruecolor24.C000644 000765 000000 00000015766 12705767426 020370 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "frame3dtruecolor24.h" #include "colorscaletrue24.h" #include "colorscaletrue32.h" // Tk Canvas Widget Function Declarations int Frame3dTrueColor24CreateProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const []); // Frame3dTrueColor24 Specs static Tk_CustomOption tagsOption = { Tk_CanvasTagsParseProc, Tk_CanvasTagsPrintProc, NULL }; static Tk_ConfigSpec frame3dTrueColor24Specs[] = { {TK_CONFIG_STRING, (char*)"-command", NULL, NULL, "frame3d", Tk_Offset(WidgetOptions, cmdName), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-x", NULL, NULL, "1", Tk_Offset(WidgetOptions, x), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-y", NULL, NULL, "1", Tk_Offset(WidgetOptions, y), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-width", NULL, NULL, "512", Tk_Offset(WidgetOptions, width), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-height", NULL, NULL, "512", Tk_Offset(WidgetOptions, height), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_ANCHOR, (char*)"-anchor", NULL, NULL, "nw", Tk_Offset(WidgetOptions, anchor), 0, NULL}, {TK_CONFIG_CUSTOM, (char*)"-tags", NULL, NULL, NULL, 0, TK_CONFIG_NULL_OK, &tagsOption}, {TK_CONFIG_STRING, (char*)"-helvetica", NULL, NULL, "helvetica", Tk_Offset(WidgetOptions, helvetica), 0, NULL}, {TK_CONFIG_STRING, (char*)"-courier", NULL, NULL, "courier", Tk_Offset(WidgetOptions, courier), 0, NULL}, {TK_CONFIG_STRING, (char*)"-times", NULL, NULL, "times", Tk_Offset(WidgetOptions, times), 0, NULL}, {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL}, }; // Tk Static Structure static Tk_ItemType frame3dTrueColor24Type = { (char*)"frame3dtruecolor24", // name sizeof(WidgetOptions), // item size Frame3dTrueColor24CreateProc, // configProc frame3dTrueColor24Specs, // configSpecs WidgetConfigProc, // configProc WidgetCoordProc, // coordProc WidgetDeleteProc, // deleteProc WidgetDisplayProc, // displayProc 0, // alwaysRedraw WidgetPointProc, // pointProc WidgetAreaProc, // areaProc WidgetPostscriptProc, // postscriptProc WidgetScaleProc, // scaleProc WidgetTranslateProc, // translateProc (Tk_ItemIndexProc*)NULL, // indexProc WidgetICursorProc, // icursorProc (Tk_ItemSelectionProc*)NULL, // selectionProc (Tk_ItemInsertProc*)NULL, // insertProc (Tk_ItemDCharsProc*)NULL, // dCharsProc (Tk_ItemType*)NULL // nextPtr }; // Non-Member Functions int Frame3dTrueColor24_Init(Tcl_Interp* interp) { Tk_CreateItemType(&frame3dTrueColor24Type); return TCL_OK; } int Frame3dTrueColor24CreateProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[]) { Frame3dTrueColor24* frame = new Frame3dTrueColor24(interp, canvas, item); // and set default configuration if (frame->configure(argc, (const char**)argv, 0) != TCL_OK) { delete frame; Tcl_AppendResult(interp, " error occured while creating frame.", NULL); return TCL_ERROR; } return TCL_OK; } // Frame3dTrueColor24 Member Functions Frame3dTrueColor24::Frame3dTrueColor24(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Frame3d(i,c,item), TrueColor24(visual) { configSpecs = frame3dTrueColor24Specs; // frame configure options } Frame3dTrueColor24::~Frame3dTrueColor24() { // we must do this at this level, because updateColorScale is called unloadAllFits(); } void Frame3dTrueColor24::updateColorScale() { // we need colors before we can construct a scale if (!colorCells || !bitsperpixel_) return; if (colorScale) delete colorScale; // determine if we have 3 bytes or 4 bytes per pixel switch (bitsperpixel_) { case 24: updateColorScale24(); break; case 32: updateColorScale32(); break; } } void Frame3dTrueColor24::updateColorScale24() { switch (context->colorScaleType()) { case FrScale::LINEARSCALE: colorScale = new LinearScaleTrueColor24(colorCount, colorCells, colorCount, visual, byteorder_); break; case FrScale::LOGSCALE: colorScale = new LogScaleTrueColor24(SCALESIZE, colorCells, colorCount, context->expo(), visual, byteorder_); break; case FrScale::POWSCALE: colorScale = new PowScaleTrueColor24(SCALESIZE, colorCells, colorCount, context->expo(), visual, byteorder_); break; case FrScale::SQRTSCALE: colorScale = new SqrtScaleTrueColor24(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::SQUAREDSCALE: colorScale = new SquaredScaleTrueColor24(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::ASINHSCALE: colorScale = new AsinhScaleTrueColor24(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::SINHSCALE: colorScale = new SinhScaleTrueColor24(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::HISTEQUSCALE: colorScale = new HistEquScaleTrueColor24(SCALESIZE, colorCells, colorCount, context->histequ(), HISTEQUSIZE, visual, byteorder_); break; case FrScale::IISSCALE: colorScale = new IISScaleTrueColor24(colorCells, colorCount, visual, byteorder_); break; } } void Frame3dTrueColor24::updateColorScale32() { switch (context->colorScaleType()) { case FrScale::LINEARSCALE: colorScale = new LinearScaleTrueColor32(colorCount, colorCells, colorCount, visual, byteorder_); break; case FrScale::LOGSCALE: colorScale = new LogScaleTrueColor32(SCALESIZE, colorCells, colorCount, context->expo(), visual, byteorder_); break; case FrScale::POWSCALE: colorScale = new PowScaleTrueColor32(SCALESIZE, colorCells, colorCount, context->expo(), visual, byteorder_); break; case FrScale::SQRTSCALE: colorScale = new SqrtScaleTrueColor32(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::SQUAREDSCALE: colorScale = new SquaredScaleTrueColor32(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::ASINHSCALE: colorScale = new AsinhScaleTrueColor32(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::SINHSCALE: colorScale = new SinhScaleTrueColor32(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::HISTEQUSCALE: colorScale = new HistEquScaleTrueColor32(SCALESIZE, colorCells, colorCount, context->histequ(), HISTEQUSIZE, visual, byteorder_); break; case FrScale::IISSCALE: colorScale = new IISScaleTrueColor32(colorCells, colorCount, visual, byteorder_); break; } } saods9/tksao/frame/frame3dtruecolor24.h000644 000765 000000 00000001360 12705767426 020416 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __frame3dtruecolor24_h__ #define __frame3dtruecolor24_h__ #include "frame3d.h" #include "truecolor24.h" class Frame3dTrueColor24 : public Frame3d, public TrueColor24 { private: void encodeTrueColor(XColor* src, char* dest) {TrueColor24::encodeTrueColor(src,dest,baseXImage);} void encodeTrueColor(unsigned char* src, XImage* ximage) {TrueColor24::encodeTrueColor(src, ximage);} void updateColorScale(); void updateColorScale24(); void updateColorScale32(); public: Frame3dTrueColor24(Tcl_Interp*, Tk_Canvas, Tk_Item*); ~Frame3dTrueColor24(); }; #endif saods9/tksao/frame/frame3dtruecolor8.C000644 000765 000000 00000012107 12705767426 020274 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "frame3dtruecolor8.h" #include "colorscaletrue8.h" // Tk Canvas Widget Function Declarations int Frame3dTrueColor8CreateProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const []); // Frame3dTrueColor8 Specs static Tk_CustomOption tagsOption = { Tk_CanvasTagsParseProc, Tk_CanvasTagsPrintProc, NULL }; static Tk_ConfigSpec frame3dTrueColor8Specs[] = { {TK_CONFIG_STRING, (char*)"-command", NULL, NULL, "frame3d", Tk_Offset(WidgetOptions, cmdName), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-x", NULL, NULL, "1", Tk_Offset(WidgetOptions, x), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-y", NULL, NULL, "1", Tk_Offset(WidgetOptions, y), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-width", NULL, NULL, "512", Tk_Offset(WidgetOptions, width), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-height", NULL, NULL, "512", Tk_Offset(WidgetOptions, height), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_ANCHOR, (char*)"-anchor", NULL, NULL, "nw", Tk_Offset(WidgetOptions, anchor), 0, NULL}, {TK_CONFIG_CUSTOM, (char*)"-tags", NULL, NULL, NULL, 0, TK_CONFIG_NULL_OK, &tagsOption}, {TK_CONFIG_STRING, (char*)"-helvetica", NULL, NULL, "helvetica", Tk_Offset(WidgetOptions, helvetica), 0, NULL}, {TK_CONFIG_STRING, (char*)"-courier", NULL, NULL, "courier", Tk_Offset(WidgetOptions, courier), 0, NULL}, {TK_CONFIG_STRING, (char*)"-times", NULL, NULL, "times", Tk_Offset(WidgetOptions, times), 0, NULL}, {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL}, }; // Tk Static Structure static Tk_ItemType frame3dTrueColor8Type = { (char*)"frame3dtruecolor8", // name sizeof(WidgetOptions), // item size Frame3dTrueColor8CreateProc, // configProc frame3dTrueColor8Specs, // configSpecs WidgetConfigProc, // configProc WidgetCoordProc, // coordProc WidgetDeleteProc, // deleteProc WidgetDisplayProc, // displayProc 0, // alwaysRedraw WidgetPointProc, // pointProc WidgetAreaProc, // areaProc WidgetPostscriptProc, // postscriptProc WidgetScaleProc, // scaleProc WidgetTranslateProc, // translateProc (Tk_ItemIndexProc*)NULL, // indexProc WidgetICursorProc, // icursorProc (Tk_ItemSelectionProc*)NULL, // selectionProc (Tk_ItemInsertProc*)NULL, // insertProc (Tk_ItemDCharsProc*)NULL, // dCharsProc (Tk_ItemType*)NULL // nextPtr }; // Non-Member Functions int Frame3dTrueColor8_Init(Tcl_Interp* interp) { Tk_CreateItemType(&frame3dTrueColor8Type); return TCL_OK; } int Frame3dTrueColor8CreateProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[]) { Frame3dTrueColor8* frame = new Frame3dTrueColor8(interp, canvas, item); // and set default configuration if (frame->configure(argc, (const char**)argv, 0) != TCL_OK) { delete frame; Tcl_AppendResult(interp, " error occured while creating frame.", NULL); return TCL_ERROR; } return TCL_OK; } // Frame3dTrueColor8 Member Functions Frame3dTrueColor8::Frame3dTrueColor8(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Frame3d(i,c,item), TrueColor8(visual) { configSpecs = frame3dTrueColor8Specs; // frame configure options } Frame3dTrueColor8::~Frame3dTrueColor8() { // we must do this at this level, because updateColorScale is called unloadAllFits(); } void Frame3dTrueColor8::updateColorScale() { // we need colors before we can construct a scale if (!colorCells) return; if (colorScale) delete colorScale; switch (context->colorScaleType()) { case FrScale::LINEARSCALE: colorScale = new LinearScaleTrueColor8(colorCount, colorCells, colorCount, visual); break; case FrScale::LOGSCALE: colorScale = new LogScaleTrueColor8(SCALESIZE, colorCells, colorCount, context->expo(), visual); break; case FrScale::POWSCALE: colorScale = new PowScaleTrueColor8(SCALESIZE, colorCells, colorCount, context->expo(), visual); break; case FrScale::SQRTSCALE: colorScale = new SqrtScaleTrueColor8(SCALESIZE, colorCells, colorCount, visual); break; case FrScale::SQUAREDSCALE: colorScale = new SquaredScaleTrueColor8(SCALESIZE, colorCells, colorCount, visual); break; case FrScale::ASINHSCALE: colorScale = new AsinhScaleTrueColor8(SCALESIZE, colorCells, colorCount, visual); break; case FrScale::SINHSCALE: colorScale = new SinhScaleTrueColor8(SCALESIZE, colorCells, colorCount, visual); break; case FrScale::HISTEQUSCALE: colorScale = new HistEquScaleTrueColor8(SCALESIZE, colorCells, colorCount, context->histequ(), HISTEQUSIZE, visual); break; case FrScale::IISSCALE: colorScale = new IISScaleTrueColor8(colorCells, colorCount, visual); break; } } saods9/tksao/frame/frame3dtruecolor8.h000644 000765 000000 00000001256 12705767426 020344 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __frame3dtruecolor8_h__ #define __frame3dtruecolor8_h__ #include "frame3d.h" #include "truecolor8.h" class Frame3dTrueColor8 : public Frame3d, public TrueColor8 { private: void encodeTrueColor(XColor* src, char* dest) {TrueColor8::encodeTrueColor(src,dest,baseXImage);} void encodeTrueColor(unsigned char* src, XImage* ximage) {TrueColor8::encodeTrueColor(src, ximage);} void updateColorScale(); public: Frame3dTrueColor8(Tcl_Interp*, Tk_Canvas, Tk_Item*); ~Frame3dTrueColor8(); }; #endif saods9/tksao/frame/framebase.C000644 000765 000000 00000015057 12754663646 016663 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "framebase.h" #include "fitsimage.h" #include "marker.h" #include "context.h" #include "ps.h" // Public FrameBase::FrameBase(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Base(i, c, item) { rotateSrcXM = NULL; rotateDestXM = NULL; rotatePM = 0; colormapXM = NULL; colormapPM = 0; colormapGCXOR = 0; } FrameBase::~FrameBase() { if (colormapXM) XDestroyImage(colormapXM); if (colormapPM) Tk_FreePixmap(display, colormapPM); if (colormapGCXOR) XFreeGC(display, colormapGCXOR); } double FrameBase::calcZoomPanner() { if (!(keyContext->fits && pannerPixmap)) return 1; Vector src = imageSize(keyContext->datasec() ? FrScale::DATASEC : FrScale::IMGSEC); return calcZoom(src, Vector(pannerWidth,pannerHeight)); } void FrameBase::rotateMotion() { // Rotate from src to dest Vector cc = Vector(options->width,options->height)/2; Matrix m = (Translate(-cc) * Rotate(rotation-rotateRotation) * Translate(cc)).invert(); double* mm = m.mm(); int& width = options->width; int& height = options->height; char* src = rotateSrcXM->data; int bytesPerPixel = rotateDestXM->bits_per_pixel/8; for (int j=0; jdata + j*rotateDestXM->bytes_per_line; memset(dest,0,rotateDestXM->bytes_per_line); for (int i=0; i= 0 && x < width && y >= 0 && y < height) { #if MAC_OSX_TK // I really don't understand this char* sptr = src + ((int)y)*rotateDestXM->bytes_per_line+ ((int)x)*bytesPerPixel; *(dest+0) = *(sptr+3); *(dest+1) = *(sptr+0); *(dest+2) = *(sptr+1); *(dest+3) = *(sptr+2); #else memcpy(dest, src + ((int)y)*rotateDestXM->bytes_per_line + ((int)x)*bytesPerPixel, bytesPerPixel); #endif } else memcpy(dest, bgTrueColor_, bytesPerPixel); } } // XImage to Pixmap TkPutImage(NULL, 0, display, rotatePM, widgetGC, rotateDestXM, 0, 0, 0, 0, options->width, options->height); // Display Pixmap Vector dd = Vector() * widgetToWindow; XCopyArea(display, rotatePM, Tk_WindowId(tkwin), rotateGCXOR, 0, 0, options->width, options->height, dd[0], dd[1]); } void FrameBase::setBinCursor() { if (context->cfits) context->cfits->setBinCursor(cursor); } void FrameBase::setSlice(int id, int ss) { // IMAGE (ranges 1-n) currentContext->updateSlice(id, ss); switch (currentContext->clipScope()) { case FrScale::GLOBAL: currentContext->updateContours(); break; case FrScale::LOCAL: currentContext->clearHist(); currentContext->updateClip(); currentContext->updateContoursScale(); break; } updateColorScale(); update(MATRIX); Base::setSlice(id,ss); } void FrameBase::updateBin(const Matrix& mx) { // Note: cursor is in REF coords, imageCenter() in IMAGE coords cursor = imageCenter(FrScale::IMGSEC); Base::updateBin(mx); } void FrameBase::updatePanner() { Base::updatePanner(); if (usePanner) { ostringstream str; str << pannerName << " update " << (void*)pannerPixmap << ';'; // calculate bbox Vector ll = Vector(0,0) * widgetToPanner; Vector lr = Vector(options->width,0) * widgetToPanner; Vector ur = Vector(options->width,options->height) * widgetToPanner; Vector ul = Vector(0,options->height) * widgetToPanner; str << pannerName << " update bbox " << ll << ' ' << lr << ' ' << ur << ' ' << ul << ';'; // calculate image compass vectors Matrix mm = FlipY() * irafMatrix_ * wcsOrientationMatrix * Rotate(wcsRotation) * orientationMatrix * Rotate(rotation); Vector xx = (Vector(1,0)*mm).normalize(); Vector yy = (Vector(0,1)*mm).normalize(); str << pannerName << " update image compass " << xx << ' ' << yy << ';'; if (keyContext->fits && keyContext->fits->hasWCS(wcsSystem_)) { Vector orpix = keyContext->fits->center(); Vector orval=keyContext->fits->pix2wcs(orpix, wcsSystem_, wcsSky_); Vector orpix2 = keyContext->fits->wcs2pix(orval, wcsSystem_,wcsSky_); Vector delta = keyContext->fits->getWCScdelt(wcsSystem_).abs(); Vector npix = keyContext->fits->wcs2pix(Vector(orval[0],orval[1]+delta[1]), wcsSystem_,wcsSky_); Vector north = ((npix-orpix2)*mm).normalize(); Vector epix = keyContext->fits->wcs2pix(Vector(orval[0]+delta[0],orval[1]), wcsSystem_,wcsSky_); Vector east = ((epix-orpix2)*mm).normalize(); // sanity check Vector diff = (north-east).abs(); if ((north[0]==0 && north[1]==0) || (east[0]==0 && east[1]==0) || (diff[0]<.01 && diff[1]<.01)) { north = (Vector(0,1)*mm).normalize(); east = (Vector(-1,0)*mm).normalize(); } str << pannerName << " update wcs compass " << north << ' ' << east << ends; } else str << pannerName << " update wcs compass invalid" << ends; Tcl_Eval(interp, str.str().c_str()); } } void FrameBase::x11MagnifierCursor(const Vector& vv) { // first, the inner color'd box Vector uu = vv * canvasToUser; Matrix mm = Translate(-uu) * Rotate(wcsRotation) * Rotate(rotation) * Scale(zoom_) * Scale(magnifierZoom_) * Translate(magnifierWidth/2., magnifierHeight/2.); Vector c[5]; c[0] = (uu + Vector(-.5,-.5)) * mm; c[1] = (uu + Vector( .5,-.5)) * mm; c[2] = (uu + Vector( .5, .5)) * mm; c[3] = (uu + Vector(-.5, .5)) * mm; c[4] = c[0]; XPoint pts[5]; for (int ii=0; ii<5; ii++) { Vector z = c[ii].round(); pts[ii].x = (short)z[0]; pts[ii].y = (short)z[1]; } XSetForeground(display, widgetGC, getColor(magnifierColorName)); XDrawLines(display, magnifierPixmap, widgetGC, pts, 5, CoordModeOrigin); // now, the outer black box Matrix nn = Translate(-(uu * mm)) * Rotate(-rotation) * Rotate(-wcsRotation); Matrix oo = nn.invert(); Vector dd[5]; for (int ii=0; ii<5; ii++) dd[ii] = c[ii] * nn; dd[0]+=Vector(-1,-1); dd[1]+=Vector( 1,-1); dd[2]+=Vector( 1, 1); dd[3]+=Vector(-1, 1); dd[4]=dd[0]; for (int ii=0; ii<5; ii++) { dd[ii] = dd[ii] * oo; Vector zz = dd[ii].round(); pts[ii].x = (int)zz[0]; pts[ii].y = (int)zz[1]; } XSetForeground(display, widgetGC, getColor("black")); XDrawLines(display, magnifierPixmap, widgetGC, pts, 5, CoordModeOrigin); } saods9/tksao/frame/framebase.h000644 000765 000000 00000006630 12750203255 016703 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __framebase_h__ #define __framebase_h__ #include "base.h" class FrameBase : public Base { protected: XImage* rotateSrcXM; // rotate src ximage XImage* rotateDestXM; // rotate dest ximage Pixmap rotatePM; // rotate pixmap XImage* colormapXM; // rotate dest ximage Pixmap colormapPM; // rotate pixmap GC colormapGCXOR; // GC for interactive rotation Vector iisLastCursor; // iis cursor state info protected: double calcZoomPanner(); void cancelDetach() {}; void rotateMotion(); void saveFitsResampleFits(OutFitsStream&); void saveFitsResampleKeyword(OutFitsStream&, FitsHead&); void setBinCursor(); virtual void updateBin(const Matrix&); void updatePanner(); void x11MagnifierCursor(const Vector&); public: FrameBase(Tcl_Interp*, Tk_Canvas, Tk_Item*); virtual ~FrameBase(); void setSlice(int,int); Vector mapFromRef(const Vector&, Coord::InternalSystem); Vector3d mapFromRef3d(const Vector& vv, Coord::InternalSystem sys) {return mapFromRef(vv,sys);} Vector mapToRef(const Vector&, Coord::InternalSystem); Vector3d mapToRef3d(const Vector& vv, Coord::InternalSystem sys) {return mapToRef(vv,sys);} // Bin Commands void binToFitCmd(); // Block Commands void blockToFitCmd(); // Coordinate Commands void getCursorCmd(Coord::InternalSystem); void getCursorCmd(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); // Grid Commands void gridCmd(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, Grid::GridType, const char*, const char*); // Fits Commands void saveFitsResample(OutFitsStream&); void saveFitsResampleFileCmd(const char*); void saveFitsResampleChannelCmd(const char*); void saveFitsResampleSocketCmd(int); // IIS Commands void iisCursorModeCmd(int); void iisGetCursorCmd(); void iisGetFileNameCmd(); void iisGetFileNameCmd(int); void iisGetFileNameCmd(const Vector&); void iisMessageCmd(const char*); void iisSetCursorCmd(const Vector&, Coord::InternalSystem); void iisSetCursorCmd(const Vector&, Coord::CoordSystem); void iisSetFileNameCmd(const char*); void iisSetFileNameCmd(const char*,int); void iisUpdateCmd() {updateNow(MATRIX);} // Pan Zoom Rotate Orient Commands void panCmd(const Vector&); void panCmd(const Vector&, const Vector&); void panCmd(const Vector&, Coord::CoordSystem, Coord::SkyFrame); void panToCmd(const Vector&); void panToCmd(const Vector&, Coord::CoordSystem, Coord::SkyFrame); void panBBoxCmd(const Vector&); void panEndCmd(const Vector&); void rotateBeginCmd(); void rotateMotionCmd(double); void rotateEndCmd(); void zoomAboutCmd(const Vector&, const Vector&); void zoomAboutCmd(const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyFrame); void zoomToAboutCmd(const Vector&, const Vector&); void zoomToAboutCmd(const Vector&, const Vector&, Coord::CoordSystem, Coord::SkyFrame); void zoomToFitCmd(double); // 3d void get3dBorderCmd(); void get3dBorderColorCmd(); void get3dCompassCmd(); void get3dCompassColorCmd(); void get3dHighliteCmd(); void get3dHighliteColorCmd(); void get3dScaleCmd(); void get3dViewCmd(); void get3dViewPointCmd(); void get3dRenderMethodCmd(); void get3dRenderBackgroundCmd(); }; #endif saods9/tksao/frame/framergb.C000644 000765 000000 00000122776 12764332620 016514 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "framergb.h" #include "fitsimage.h" #include "ps.h" #include "outfile.h" #include "outchannel.h" #include "outsocket.h" #include "sigbus.h" // Frame Member Functions FrameRGB::FrameRGB(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : FrameBase(i,c,item) { context = new Context[3]; context[0].parent(this); context[1].parent(this); context[2].parent(this); channel = 0; rgbSystem = Coord::WCS; for (int ii=0; ii<3; ii++) { view[ii] = 1; bias[ii] = .5; contrast[ii] = 1.0; colorScale[ii] = NULL; } for (int kk=0; kk<3; kk++) colormapData[kk] = NULL; colorCount = 0; colorCells = NULL; currentContext = &context[channel]; keyContext = &context[channel]; keyContextSet =0; } FrameRGB::~FrameRGB() { if (context) delete [] context; for (int ii=0; ii<3; ii++) { if (colorScale[ii]) delete colorScale[ii]; } for (int kk=0; kk<3; kk++) if (colormapData[kk]) delete [] colormapData[kk]; if (colorCells) delete [] colorCells; } void FrameRGB::alignWCS() { if (!wcsAlign_ || !(keyContext->fits) || !keyContext->fits->hasWCS(wcsSystem_)) { wcsOrientation = Coord::NORMAL; wcsOrientationMatrix.identity(); wcsRotation = 0; } else calcAlignWCS(keyContext->fits, wcsSystem_, wcsSky_, &wcsOrientation, &wcsOrientationMatrix, &wcsRotation); updateRGBMatrices(); } void FrameRGB::alignWCS(Coord::CoordSystem sys, Coord::SkyFrame sky) { if (!wcsAlign_ || !(keyContext->fits) || !keyContext->fits->hasWCS(sys)) { wcsOrientation = Coord::NORMAL; wcsOrientationMatrix.identity(); wcsRotation = 0; } else calcAlignWCS(keyContext->fits, sys, sky, &wcsOrientation, &wcsOrientationMatrix, &wcsRotation); updateRGBMatrices(); } void FrameRGB::alignWCS(FitsImage* ptr, Coord::CoordSystem sys) { if (!wcsAlign_ || !(keyContext->fits) || !ptr || !keyContext->fits->hasWCS(wcsSystem_)) { wcsOrientation = Coord::NORMAL; wcsOrientationMatrix.identity(); wcsRotation = 0; } else calcAlignWCS(ptr, keyContext->fits, wcsSystem_, sys, wcsSky_, &wcsOrientation, &wcsOrientationMatrix, &wcsRotation, &zoom_); updateRGBMatrices(); } int FrameRGB::doRender() { return ((context[0].fits&&view[0]) || (context[1].fits&&view[1]) || (context[2].fits&&view[2])); } unsigned char* FrameRGB::fillImage(int width, int height, Coord::InternalSystem sys) { // img unsigned char* img = new unsigned char[width*height*3]; memset(img,0,width*height*3); // mk char* mk = new char[width*height]; memset(mk,0,width*height); SETSIGBUS // one channel at a time for (int kk=0; kk<3; kk++) { if (!view[kk] || !context[kk].fits) continue; // basics int length = colorScale[kk]->size() - 1; const unsigned char* table = colorScale[kk]->psColors(); FitsImage* sptr = context[kk].cfits; int mosaic = context[kk].isMosaic(); // variable double* mm = sptr->matrixToData(sys).mm(); FitsBound* params = sptr->getDataParams(context[kk].secMode()); int srcw = sptr->width(); double ll = sptr->low(); double hh = sptr->high(); double diff = hh - ll; // main loop unsigned char* dest = img; char* mkptr = mk; for (long jj=0; jjmatrixToData(sys).mm(); params = sptr->getDataParams(context[kk].secMode()); srcw = sptr->width(); ll = sptr->low(); hh = sptr->high(); diff = hh - ll; } do { double xx = ii*mm[0] + jj*mm[3] + mm[6]; double yy = ii*mm[1] + jj*mm[4] + mm[7]; if (xx>=params->xmin && xxxmax && yy>=params->ymin && yyymax) { double value = sptr->getValueDouble(long(yy)*srcw + long(xx)); if (isfinite(diff) && isfinite(value)) { if (value <= ll) *(dest+kk) = *table; else if (value >= hh) *(dest+kk) = *(table+length); else *(dest+kk) = *(table+((int)(((value - ll)/diff * length) +.5))); *mkptr =2; } else if (*mkptr < 2) *mkptr =1; break; } else { if (mosaic) { sptr = sptr->nextMosaic(); if (sptr) { mm = sptr->matrixToData(sys).mm(); params = sptr->getDataParams(context[kk].secMode()); srcw = sptr->width(); ll = sptr->low(); hh = sptr->high(); diff = hh - ll; } } } } while (mosaic && sptr); } } } // now fill in bg { unsigned char* dest = img; char* mkptr = mk; for (int jj=0; jjred; *(dest+1) = (unsigned char)nanColor->green; *(dest+2) = (unsigned char)nanColor->blue; } else { // bg *dest = (unsigned char)bgColor->red; *(dest+1) = (unsigned char)bgColor->green; *(dest+2) = (unsigned char)bgColor->blue; } } } CLEARSIGBUS // clean up delete [] mk; return img; } BBox FrameRGB::imageBBox(FrScale::SecMode mode) { // returns imageBBox in IMAGE coords // and extends edge to edge updateRGBMatrices(); BBox rr; int first=1; for (int ii=0; ii<3; ii++) { if (context[ii].fits) { FitsImage* ptr = context[ii].fits; while (ptr) { FitsBound* params = ptr->getDataParams(mode); Matrix mm = ptr->wcsToRef() * rgb[ii] * dataToImage; Vector aa = Vector(params->xmin,params->ymin) * mm; if (first) { rr = BBox(aa,aa); first = 0; } else rr.bound(aa); rr.bound(Vector(params->xmax,params->ymin) * mm); rr.bound(Vector(params->xmax,params->ymax) * mm); rr.bound(Vector(params->xmin,params->ymax) * mm); ptr = ptr->nextMosaic(); } } } return rr; } void FrameRGB::loadRGBCube(MemType which, const char* fn, FitsImage* img) { if (!img || !img->isValid() || !(img->isImage() || img->isPost()) || (img->depth() != 3)) goto error; context[0].bfits_ = img; if (img->isPost()) which = POST; switch (which) { case ALLOC: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImageFitsNextAlloc(&context[1], interp, fn, context[0].bfits_->fitsFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImageFitsNextAlloc(&context[2], interp, fn, context[1].bfits_->fitsFile(),3); break; case ALLOCGZ: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImageFitsNextAllocGZ(&context[1], interp, fn, context[0].bfits_->fitsFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImageFitsNextAllocGZ(&context[2], interp, fn, context[1].bfits_->fitsFile(),3); break; case CHANNEL: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImageFitsNextChannel(&context[1], interp, fn, context[0].bfits_->fitsFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImageFitsNextChannel(&context[2], interp, fn, context[1].bfits_->fitsFile(),3); break; case MMAP: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImageFitsNextMMap(&context[1], interp, fn, context[0].bfits_->fitsFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImageFitsNextMMap(&context[2], interp, fn, context[1].bfits_->fitsFile(),3); break; case SMMAP: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImageFitsNextSMMap(&context[1], interp, fn, context[0].bfits_->fitsFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImageFitsNextSMMap(&context[2], interp, fn, context[1].bfits_->fitsFile(),3); break; case MMAPINCR: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImageFitsNextMMapIncr(&context[1], interp, fn, context[0].bfits_->fitsFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImageFitsNextMMapIncr(&context[2], interp, fn, context[1].bfits_->fitsFile(),3); break; case SHARE: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImageFitsNextShare(&context[1], interp, fn, context[0].bfits_->fitsFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImageFitsNextShare(&context[2], interp, fn, context[1].bfits_->fitsFile(),3); break; case SSHARE: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImageFitsNextSShare(&context[1], interp, fn, context[0].bfits_->fitsFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImageFitsNextSShare(&context[2], interp, fn, context[1].bfits_->fitsFile(),3); break; case SOCKET: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImageFitsNextSocket(&context[1], interp, fn, context[0].bfits_->fitsFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImageFitsNextSocket(&context[2], interp, fn, context[1].bfits_->fitsFile(),3); break; case SOCKETGZ: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImageFitsNextSocketGZ(&context[1], interp, fn, context[0].bfits_->fitsFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImageFitsNextSocketGZ(&context[2], interp, fn, context[1].bfits_->fitsFile(),3); break; case VAR: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImageFitsNextVar(&context[1], interp, fn, context[0].bfits_->fitsFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImageFitsNextVar(&context[2], interp, fn, context[1].bfits_->fitsFile(),3); break; case POST: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImageFitsNextPost(&context[1], interp, img, context[0].bfits_->baseFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImageFitsNextPost(&context[2], interp, img, context[1].bfits_->baseFile(),3); break; case PHOTO: if (context[0].bfits_ && context[0].bfits_->isValid()) context[1].bfits_ = new FitsImagePhotoCubeNext(&context[1], interp, fn, context[0].bfits_->baseFile(),2); if (context[1].bfits_ && context[1].bfits_->isValid()) context[2].bfits_ = new FitsImagePhotoCubeNext(&context[2], interp, fn, context[1].bfits_->baseFile(),3); break; default: // na break; } // is everything ok? if (context[0].bfits_ && context[0].bfits_->isValid() && (context[0].bfits_->isImage() || context[0].bfits_->isPost()) && context[1].bfits_ && context[1].bfits_->isValid() && (context[1].bfits_->isImage() || context[1].bfits_->isPost()) && context[2].bfits_ && context[2].bfits_->isValid() && (context[2].bfits_->isImage() || context[2].bfits_->isPost())) { loadRGBFinish(); return; } error: context[0].unload(); context[1].unload(); context[2].unload(); reset(); updateColorScale(); Tcl_AppendResult(interp, "Unable to load rgb cube file", NULL); result = TCL_ERROR; return; } void FrameRGB::loadRGBImage(MemType which, const char* fn, FitsImage* img) { FitsImage* r = img; FitsImage* g = NULL; FitsImage* b = NULL; if (!img || !img->isValid() || !(img->isImage() || img->isPost())) goto error; switch (which) { case ALLOC: if (r && r->isValid()) g = new FitsImageMosaicNextAlloc(&context[1], interp, fn, r->fitsFile(), FitsFile::NOFLUSH,1); if (g && g->isValid()) b = new FitsImageMosaicNextAlloc(&context[2], interp, fn, g->fitsFile(), FitsFile::NOFLUSH,1); break; case ALLOCGZ: if (r && r->isValid()) g = new FitsImageMosaicNextAllocGZ(&context[1], interp, fn, r->fitsFile(), FitsFile::NOFLUSH,1); if (g && g->isValid()) b = new FitsImageMosaicNextAllocGZ(&context[2], interp, fn, g->fitsFile(), FitsFile::NOFLUSH,1); break; case CHANNEL: if (r && r->isValid()) g = new FitsImageMosaicNextChannel(&context[1], interp, fn, r->fitsFile(), FitsFile::NOFLUSH,1); if (g && g->isValid()) b = new FitsImageMosaicNextChannel(&context[2], interp, fn, g->fitsFile(), FitsFile::NOFLUSH,1); break; case MMAP: if (r && r->isValid()) g = new FitsImageMosaicNextMMap(&context[1], interp, fn, r->fitsFile(),1); if (g && g->isValid()) b = new FitsImageMosaicNextMMap(&context[2], interp, fn, g->fitsFile(),1); break; case MMAPINCR: if (r && r->isValid()) g = new FitsImageMosaicNextMMapIncr(&context[1], interp, fn, r->fitsFile(),1); if (g && g->isValid()) b = new FitsImageMosaicNextMMapIncr(&context[2], interp, fn, g->fitsFile(),1); break; case SHARE: if (r && r->isValid()) g = new FitsImageMosaicNextShare(&context[1], interp, fn, r->fitsFile(),1); if (g && g->isValid()) b = new FitsImageMosaicNextShare(&context[2], interp, fn, g->fitsFile(),1); break; case SOCKET: if (r && r->isValid()) g = new FitsImageMosaicNextSocket(&context[1], interp, fn, r->fitsFile(), FitsFile::FLUSH,1); if (g && g->isValid()) b = new FitsImageMosaicNextSocket(&context[2], interp, fn,g->fitsFile(), FitsFile::FLUSH,1); break; case SOCKETGZ: if (r && r->isValid()) g = new FitsImageMosaicNextSocketGZ(&context[1], interp, fn, r->fitsFile(), FitsFile::FLUSH,1); if (g && g->isValid()) b = new FitsImageMosaicNextSocketGZ(&context[2], interp, fn, g->fitsFile(), FitsFile::FLUSH,1); break; case VAR: if (r && r->isValid()) g = new FitsImageMosaicNextVar(&context[1], interp, fn, r->fitsFile(),1); if (g && g->isValid()) b = new FitsImageMosaicNextVar(&context[2], interp, fn, g->fitsFile(),1); break; default: // na break; } // ok, figure out which is which channel context[0].bfits_ = context[1].bfits_ = context[2].bfits_ = NULL; { const char* ext = r->fitsFile()->extname(); if (ext) { if (!strncmp(ext,"RED",3)) context[0].bfits_ = r; else if (!strncmp(ext,"GREEN",3)) { context[1].bfits_ = r; r->setContext(&context[1]); } else if (!strncmp(ext,"BLUE",3)) { context[2].bfits_ = r; r->setContext(&context[2]); } else context[0].bfits_ = r; } else context[0].bfits_ = r; } { const char* ext = g->fitsFile()->extname(); if (ext) { if (!strncmp(ext,"RED",3)) { context[0].bfits_ = g; g->setContext(&context[0]); } else if (!strncmp(ext,"GREEN",3)) context[1].bfits_ = g; else if (!strncmp(ext,"BLUE",3)) { context[2].bfits_ = g; g->setContext(&context[3]); } else context[1].bfits_ = g; } else context[1].bfits_ = g; } { const char* ext = b->fitsFile()->extname(); if (ext) { if (!strncmp(ext,"RED",3)) { context[0].bfits_ = b; b->setContext(&context[0]); } else if (!strncmp(ext,"GREEN",3)) { context[1].bfits_ = b; b->setContext(&context[1]); } else if (!strncmp(ext,"BLUE",3)) context[2].bfits_ = b; else context[2].bfits_ = b; } else context[2].bfits_ = b; } // is everything ok? if (context[0].bfits_ && context[0].bfits_->isValid() && (context[0].bfits_->isImage() || context[0].bfits_->isPost()) && context[1].bfits_ && context[1].bfits_->isValid() && (context[1].bfits_->isImage() || context[1].bfits_->isPost()) && context[2].bfits_ && context[2].bfits_->isValid() && (context[2].bfits_->isImage() || context[2].bfits_->isPost())) { loadRGBFinish(); return; } error: context[0].unload(); context[1].unload(); context[2].unload(); reset(); updateColorScale(); Tcl_AppendResult(interp, "Unable to load rgb image file", NULL); result = TCL_ERROR; return; } void FrameRGB::loadRGBFinish() { for (int ii=0; ii<3; ii++) { context[ii].loadInit(1,NOMOSAIC,Coord::WCS); context[ii].loadFinish(); } channel = 0; currentContext = &context[channel]; keyContext = &context[channel]; keyContextSet =1; alignWCS(); if (!preservePan) { centerImage(); // cursor is in REF, crosshair in REF crosshair = cursor; } updateColorScale(); update(MATRIX); } void FrameRGB::pushMatrices() { for (int ii=0; ii<3; ii++) { FitsImage* ptr = context[ii].fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updateMatrices(rgb[ii], refToUser, userToWidget, widgetToCanvas, canvasToWindow); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } } void FrameRGB::pushMagnifierMatrices() { for (int ii=0; ii<3; ii++) { FitsImage* ptr = context[ii].fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updateMagnifierMatrices(refToMagnifier); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } } void FrameRGB::pushPannerMatrices() { for (int ii=0; ii<3; ii++) { FitsImage* ptr = context[ii].fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->updatePannerMatrices(refToPanner); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } } void FrameRGB::pushPSMatrices(float scale, int width, int height) { Matrix mx = psMatrix(scale, width, height); for (int kk=0; kk<3; kk++) if (context[kk].fits) { FitsImage* ptr = context[kk].cfits; while (ptr) { ptr->updatePS(mx); ptr = ptr->nextMosaic(); } } } void FrameRGB::reset() { for (int ii=0; ii<3; ii++) { bias[ii] = 0.5; contrast[ii] = 1.0; context[ii].resetSecMode(); context[ii].updateClip(); } Base::reset(); } void FrameRGB::rgbAlignWCS(int ii) { if (keyContext->fits && keyContext->fits->hasWCS(rgbSystem)) rgb[ii] = calcAlignWCS(keyContext->fits, context[ii].fits, rgbSystem, rgbSystem, Coord::FK5); if (DebugRGB) cerr << "rgbAlignWCS " << rgb[ii] << endl; } void FrameRGB::setBinCursor() { for (int ii=0; ii<3; ii++) if (context[ii].fits) context[ii].fits->setBinCursor(cursor); } void FrameRGB::updateColorCells(unsigned char* cells, int cnt) { if (DebugRGB) cerr << "updateColorCells" << endl; colorCount = cnt; if (colorCells) delete [] colorCells; colorCells = new unsigned char[cnt*3]; if (!colorCells) { internalError("Unable to Alloc colorCells"); return; } memcpy(colorCells, cells, cnt*3); } void FrameRGB::updateColorScale() { // we need colors before we can construct a scale if (!colorCells) return; if (DebugRGB) cerr << "updateColorScale" << endl; for (int ii=0; ii<3; ii++) { if (colorScale[ii]) delete colorScale[ii]; switch (context[ii].colorScaleType()) { case FrScale::LINEARSCALE: colorScale[ii] = new LinearScaleRGB(ii, colorCount, colorCells, colorCount); break; case FrScale::LOGSCALE: colorScale[ii] = new LogScaleRGB(ii, SCALESIZE, colorCells, colorCount, context[ii].expo()); break; case FrScale::POWSCALE: colorScale[ii] = new PowScaleRGB(ii, SCALESIZE, colorCells, colorCount, context[ii].expo()); break; case FrScale::SQRTSCALE: colorScale[ii] = new SqrtScaleRGB(ii, SCALESIZE, colorCells, colorCount); break; case FrScale::SQUAREDSCALE: colorScale[ii] = new SquaredScaleRGB(ii, SCALESIZE, colorCells, colorCount); break; case FrScale::ASINHSCALE: colorScale[ii] = new AsinhScaleRGB(ii, SCALESIZE, colorCells, colorCount); break; case FrScale::SINHSCALE: colorScale[ii] = new SinhScaleRGB(ii, SCALESIZE, colorCells, colorCount); break; case FrScale::HISTEQUSCALE: colorScale[ii] = new HistEquScaleRGB(ii, SCALESIZE, colorCells, colorCount, context[ii].histequ(), HISTEQUSIZE); break; case FrScale::IISSCALE: // na break; } } } void FrameRGB::updateRGBMatrices() { // image,pysical,amplifier,detector are ok, check for wcs if (rgbSystem >= Coord::WCS) { for (int ii=0; ii<3; ii++) { if (context[ii].fits && !context[ii].fits->hasWCS(rgbSystem)) { // ok, don't have requested coordinate system // down grade to image rgbSystem = Coord::IMAGE; break; } } } // rgb align for (int ii=0; ii<3; ii++) { rgb[ii].identity(); if (context[ii].fits && keyContext->fits) { switch (rgbSystem) { case Coord::IMAGE: // nothing to do here break; case Coord::PHYSICAL: if (context[ii].fits != keyContext->fits) rgb[ii] = context[ii].fits->imageToPhysical * keyContext->fits->physicalToImage; break; case Coord::AMPLIFIER: if (context[ii].fits != keyContext->fits) rgb[ii] = context[ii].fits->imageToAmplifier * keyContext->fits->amplifierToImage; break; case Coord::DETECTOR: if (context[ii].fits != keyContext->fits) rgb[ii] = context[ii].fits->imageToDetector * keyContext->fits->detectorToImage; break; default: rgbAlignWCS(ii); break; } } if (DebugRGB) cerr << "rgb[" << ii << "] " << rgb[ii] << endl; } } void FrameRGB::unloadAllFits() { if (DebugPerf) cerr << "FrameRGB::unloadAllFits()" << endl; for (int ii=0; ii<3; ii++) { rgb[ii].identity(); context[ii].unload(); // always (for HISTEQU and LOG) updateColorScale(); } channel =0; currentContext = &context[channel]; keyContext = &context[channel]; keyContextSet =0; FrameBase::unloadFits(); } void FrameRGB::unloadFits() { if (DebugPerf) cerr << "FrameRGB::unloadFits()" << endl; rgb[channel].identity(); context[channel].unload(); // always (for HISTEQU and LOG) updateColorScale(); } // Commands void FrameRGB::colormapCmd(float rb, float gb, float bb, float rc, float gc, float bc, int i, unsigned char* cells, int cnt) { bias[0] = rb; bias[1] = gb; bias[2] = bb; contrast[0] = rc; contrast[1] = gc; contrast[2] = bc; invert = i; updateColorCells(cells, cnt); updateColorScale(); update(BASE); } void FrameRGB::colormapBeginCmd() { // we need a colorScale before we can render if (!validColorScale()) return; // we need some fits data // we assume the colorScale length will not change during motion calls if (!context[0].fits && !context[1].fits && !context[2].fits) return; int width = options->width; int height = options->height; // Create XImage if (!(colormapXM = XGetImage(display, pixmap, 0, 0, width, height, AllPlanes, ZPixmap))) { internalError("Unable to Create Colormap XImage"); return; } // Create Pixmap colormapPM = Tk_GetPixmap(display, Tk_WindowId(tkwin), width, height, depth); if (!colormapPM) { internalError("Unable to Create Colormap Pixmap"); return; } // colormapGCXOR colormapGCXOR = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); // Create table index array for (int kk=0; kk<3; kk++) { if (colormapData[kk]) delete [] colormapData[kk]; colormapData[kk] = new long[width*height]; if (!colormapData[kk]) { internalError("Unable to alloc tmp data array"); return; } } SETSIGBUS // fill data array for (int kk=0; kk<3; kk++) { if (!view[kk] || !context[kk].fits) continue; // basics int length = colorScale[kk]->size() - 1; FitsImage* sptr = context[kk].cfits; int mosaic = context[kk].isMosaic(); // variable double* mm = sptr->matrixToData(Coord::WIDGET).mm(); FitsBound* params = sptr->getDataParams(context[kk].secMode()); int srcw = sptr->width(); double ll = sptr->low(); double hh = sptr->high(); double diff = hh - ll; // main loop long* dest = colormapData[kk]; for (long jj=0; jjmatrixToData(Coord::WIDGET).mm(); params = sptr->getDataParams(context[kk].secMode()); srcw = sptr->width(); ll = sptr->low(); hh = sptr->high(); diff = hh - ll; } do { double xx = ii*mm[0] + jj*mm[3] + mm[6]; double yy = ii*mm[1] + jj*mm[4] + mm[7]; if (xx>=params->xmin && xxxmax && yy>=params->ymin && yyymax) { double value = sptr->getValueDouble(long(yy)*srcw + long(xx)); if (isfinite(diff) && isfinite(value)) { if (value <= ll) *dest = 0; else if (value >= hh) *dest = length; else *dest = (int)(((value - ll)/diff * length) + .5); } else *dest = -1; // nan break; } else { if (mosaic) { sptr = sptr->nextMosaic(); if (sptr) { mm = sptr->matrixToData(Coord::WIDGET).mm(); params = sptr->getDataParams(context[kk].secMode()); srcw = sptr->width(); ll = sptr->low(); hh = sptr->high(); diff = hh - ll; } } } } while (mosaic && sptr); } } } CLEARSIGBUS } void FrameRGB::colormapEndCmd() { if (colormapXM) { XDestroyImage(colormapXM); colormapXM = NULL; } if (colormapPM) { Tk_FreePixmap(display, colormapPM); colormapPM = 0; } if (colormapGCXOR) { XFreeGC(display, colormapGCXOR); colormapGCXOR = 0; } for (int kk=0; kk<3; kk++) if (colormapData[kk]) { delete [] colormapData[kk]; colormapData[kk] = NULL; } update(BASE); // always update } void FrameRGB::colormapMotionCmd(float rb, float gb, float bb, float rc, float gc, float bc, int i, unsigned char* cells, int cnt) { // we need a colorScale before we can render if (!validColorScale()) return; // first check for change if (bias[0] == rb && bias[1] == gb && bias[2] == bb && contrast[0] == rc && contrast[1] == gc && contrast[2] == bc && invert == i && colorCells) return; // we got a change bias[0] = rb; bias[1] = gb; bias[2] = bb; contrast[0] = rc; contrast[1] = gc; contrast[2] = bc; invert = i; updateColorCells(cells, cnt); updateColorScale(); // special case if ((!view[0] || !context[0].fits) && (!view[1] || !context[1].fits) && (!view[2] || !context[2].fits)) return; int& width = colormapXM->width; int& height = colormapXM->height; // create img unsigned char* img = new unsigned char[width*height*3]; memset(img, 0, width*height*3); char* mk = new char[width*height]; memset(mk, 0, width*height); for (int kk=0; kk<3; kk++) { if (!view[kk] || !context[kk].fits) continue; const unsigned char* table = colorScale[kk]->psColors(); long* src = colormapData[kk]; unsigned char* dest = img; char* mptr = mk; for (long jj=0; jj= 0) { memcpy(dest+kk, table+(*src), 1); *mptr = 2; } else if (*src == -1 && *mptr < 2) *mptr = 1; } // set remainder to bg { unsigned char* dest = img; char* mptr = mk; for (long jj=0; jjred; *(dest+1) = (unsigned char)nanColor->green; *(dest+2) = (unsigned char)nanColor->blue; } else { // bg *(dest ) = (unsigned char)bgColor->red; *(dest+1) = (unsigned char)bgColor->green; *(dest+2) = (unsigned char)bgColor->blue; } } // build colormapXM encodeTrueColor((unsigned char*)img, colormapXM); // clean up if (img) delete [] img; if (mk) delete [] mk; // XImage to Pixmap TkPutImage(NULL, 0, display, colormapPM, widgetGC, colormapXM, 0, 0, 0, 0, width, height); // Display Pixmap Vector dd = Vector() * widgetToWindow; XCopyArea(display, colormapPM, Tk_WindowId(tkwin), colormapGCXOR, 0, 0, width, height, dd[0], dd[1]); // update panner updatePanner(); } void FrameRGB::getColorbarCmd() { ostringstream str; str << "rgb " << fixed; for (int ii=0; ii<3; ii++) str << bias[ii] << ' '; for (int ii=0; ii<3; ii++) str << contrast[ii] << ' '; str << invert << ' ' << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void FrameRGB::getInfoCmd(const Vector& vv, Coord::InternalSystem ref, char* var) { FrameBase::getInfoCmd(vv, ref, var); if (!currentContext->cfits) return; const char* array[3] = {"value,red","value,green","value,blue"}; SETSIGBUS for (int ii=0; ii<3; ii++) { // make sure we have an image FitsImage* sptr = context[ii].cfits; if (!sptr) continue; int mosaic = context[ii].isMosaic(); FitsBound* params = sptr->getDataParams(context[ii].secMode()); do { Vector3d rr = mapToRef3d(vv,ref); Vector img = Vector(rr) * sptr->refToData; if (img[0]>=params->xmin && img[0]xmax && img[1]>=params->ymin && img[1]ymax) { Tcl_SetVar2(interp,var,array[ii],(char*)sptr->getValue(img),0); break; } else { if (mosaic) { sptr = sptr->nextMosaic(); if (sptr) params = sptr->getDataParams(context[ii].secMode()); } } } while (mosaic && sptr); } CLEARSIGBUS } void FrameRGB::getRGBChannelCmd() { switch (channel) { case 0: Tcl_AppendResult(interp, "red", NULL); return; case 1: Tcl_AppendResult(interp, "green", NULL); return; case 2: Tcl_AppendResult(interp, "blue", NULL); return; } } void FrameRGB::getRGBSystemCmd() { printCoordSystem(rgbSystem); } void FrameRGB::getRGBViewCmd() { for (int ii=0; ii<3; ii++) Tcl_AppendElement(interp, view[ii] ? "1" : "0"); } void FrameRGB::getTypeCmd() { Tcl_AppendResult(interp, "rgb", NULL); } // RGBCube FITS void FrameRGB::loadRGBCubeAllocCmd(const char* ch, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageFitsAlloc(&context[0], interp, ch, fn, FitsFile::NOFLUSH, 1); loadRGBCube(ALLOC,fn,img); } void FrameRGB::loadRGBCubeAllocGZCmd(const char* ch, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageFitsAllocGZ(&context[0], interp, ch, fn, FitsFile::NOFLUSH, 1); loadRGBCube(ALLOCGZ,fn,img); } void FrameRGB::loadRGBCubeChannelCmd(const char* ch, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageFitsChannel(&context[0], interp, ch, fn, FitsFile::NOFLUSH, 1); loadRGBCube(CHANNEL,fn,img); } void FrameRGB::loadRGBCubeMMapCmd(const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageFitsMMap(&context[0], interp, fn, 1); loadRGBCube(MMAP,fn,img); } void FrameRGB::loadRGBCubeSMMapCmd(const char* hdr, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageFitsSMMap(&context[0], interp, hdr, fn, 1); loadRGBCube(SMMAP,fn,img); } void FrameRGB::loadRGBCubeMMapIncrCmd(const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageFitsMMapIncr(&context[0], interp, fn, 1); loadRGBCube(MMAPINCR,fn,img); } void FrameRGB::loadRGBCubeShareCmd(ShmType type, int id, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageFitsShare(&context[0], interp, type, id, fn, 1); loadRGBCube(SHARE,fn,img); } void FrameRGB::loadRGBCubeSShareCmd(ShmType type, int hdr, int id, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageFitsSShare(&context[0], interp, type, hdr, id, fn, 1); loadRGBCube(SSHARE,fn,img); } void FrameRGB::loadRGBCubeSocketCmd(int s, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageFitsSocket(&context[0], interp, s, fn, FitsFile::FLUSH, 1); loadRGBCube(SOCKET,fn,img); } void FrameRGB::loadRGBCubeSocketGZCmd(int s, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageFitsSocketGZ(&context[0], interp, s, fn, FitsFile::FLUSH, 1); loadRGBCube(SOCKETGZ,fn,img); } void FrameRGB::loadRGBCubeVarCmd(const char* ch, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageFitsVar(&context[0], interp, ch, fn, 1); loadRGBCube(VAR,fn,img); } // RGBImage FITS void FrameRGB::loadRGBImageAllocCmd(const char* ch, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageMosaicAlloc(&context[0], interp, ch, fn, FitsFile::NOFLUSH, 1); loadRGBImage(ALLOC,fn,img); } void FrameRGB::loadRGBImageAllocGZCmd(const char* ch, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageMosaicAllocGZ(&context[0], interp, ch, fn, FitsFile::NOFLUSH, 1); loadRGBImage(ALLOCGZ,fn,img); } void FrameRGB::loadRGBImageChannelCmd(const char* ch, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageMosaicChannel(&context[0], interp, ch, fn, FitsFile::NOFLUSH, 1); loadRGBImage(CHANNEL,fn,img); } void FrameRGB::loadRGBImageMMapCmd(const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageMosaicMMap(&context[0], interp, fn, 1); loadRGBImage(MMAP,fn,img); } void FrameRGB::loadRGBImageMMapIncrCmd(const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageMosaicMMapIncr(&context[0], interp, fn, 1); loadRGBImage(MMAPINCR,fn,img); } void FrameRGB::loadRGBImageShareCmd(ShmType type, int id, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageMosaicShare(&context[0], interp, type, id, fn, 1); loadRGBImage(SHARE,fn,img); } void FrameRGB::loadRGBImageSocketCmd(int s, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageMosaicSocket(&context[0], interp, s, fn, FitsFile::FLUSH, 1); loadRGBImage(SOCKET,fn,img); } void FrameRGB::loadRGBImageSocketGZCmd(int s, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageMosaicSocketGZ(&context[0], interp, s, fn, FitsFile::FLUSH, 1); loadRGBImage(SOCKETGZ,fn,img); } void FrameRGB::loadRGBImageVarCmd(const char* ch, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageMosaicVar(&context[0], interp, ch, fn, 1); loadRGBImage(VAR,fn,img); } // RGBCube Array void FrameRGB::loadArrayRGBCubeAllocCmd(const char* ch, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageArrAlloc(&context[0], interp, ch, fn, FitsFile::NOFLUSH, 1); loadRGBCube(ALLOC,fn,img); } void FrameRGB::loadArrayRGBCubeAllocGZCmd(const char* ch, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageArrAllocGZ(&context[0], interp, ch, fn, FitsFile::NOFLUSH, 1); loadRGBCube(ALLOCGZ,fn,img); } void FrameRGB::loadArrayRGBCubeChannelCmd(const char* ch, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageArrChannel(&context[0], interp, ch, fn, FitsFile::NOFLUSH, 1); loadRGBCube(CHANNEL,fn,img); } void FrameRGB::loadArrayRGBCubeMMapCmd(const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageArrMMap(&context[0], interp, fn, 1); loadRGBCube(MMAP,fn,img); } void FrameRGB::loadArrayRGBCubeMMapIncrCmd(const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageArrMMapIncr(&context[0], interp, fn, 1); loadRGBCube(MMAPINCR,fn,img); } void FrameRGB::loadArrayRGBCubeShareCmd(ShmType type, int id, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageArrShare(&context[0], interp, type, id, fn, 1); loadRGBCube(SHARE,fn,img); } void FrameRGB::loadArrayRGBCubeSocketCmd(int s, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageArrSocket(&context[0], interp, s, fn, FitsFile::FLUSH, 1); loadRGBCube(SOCKET,fn,img); } void FrameRGB::loadArrayRGBCubeSocketGZCmd(int s, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageArrSocketGZ(&context[0], interp, s, fn, FitsFile::FLUSH, 1); loadRGBCube(SOCKETGZ,fn,img); } void FrameRGB::loadArrayRGBCubeVarCmd(const char* ch, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImageArrVar(&context[0], interp, ch, fn, 1); loadRGBCube(VAR,fn,img); } // RGBPhoto void FrameRGB::loadPhotoCmd(const char* ph, const char* fn) { unloadAllFits(); FitsImage* img = new FitsImagePhotoCube(&context[0], interp, ph, fn, 1); loadRGBCube(ALLOC,fn,img); } void FrameRGB::saveFitsRGBImageFileCmd(const char* fn) { if (keyContext->fits) { OutFitsFile str(fn); saveFitsRGBImage(str); } } void FrameRGB::saveFitsRGBImageChannelCmd(const char* ch) { if (keyContext->fits) { OutFitsChannel str(interp, ch); saveFitsRGBImage(str); } } void FrameRGB::saveFitsRGBImageSocketCmd(int ss) { if (keyContext->fits) { OutFitsSocket str(ss); saveFitsRGBImage(str); } } void FrameRGB::saveFitsRGBCubeFileCmd(const char* fn) { if (keyContext->fits) { OutFitsFile str(fn); saveFitsRGBCube(str); } } void FrameRGB::saveFitsRGBCubeChannelCmd(const char* ch) { if (keyContext->fits) { OutFitsChannel str(interp, ch); saveFitsRGBCube(str); } } void FrameRGB::saveFitsRGBCubeSocketCmd(int ss) { if (keyContext->fits) { OutFitsSocket str(ss); saveFitsRGBCube(str); } } void FrameRGB::saveArrayRGBCubeFileCmd(const char* fn, FitsFile::ArchType endian) { if (keyContext->fits) { OutFitsFile str(fn); saveArrayRGBCube(str, endian); } } void FrameRGB::saveArrayRGBCubeChannelCmd(const char* ch, FitsFile::ArchType endian) { if (keyContext->fits) { OutFitsChannel str(interp, ch); saveArrayRGBCube(str, endian); } } void FrameRGB::saveArrayRGBCubeSocketCmd(int ss, FitsFile::ArchType endian) { if (keyContext->fits) { OutFitsSocket str(ss); saveArrayRGBCube(str, endian); } } void FrameRGB::savePhotoCmd(const char* ph) { // need to determine size from key context FitsImage* fits = keyContext->fits; if (!fits) return; // check size FitsBound* params = fits->getDataParams(context->secMode()); for (int kk=0; kk<3; kk++) { if (!view[kk] || !context[kk].fits) continue; FitsImage* ptr = context[kk].fits; FitsBound* pptr = ptr->getDataParams(context[kk].secMode()); if (params->xmin != pptr->xmin || params->xmax != pptr->xmax || params->ymin != pptr->ymin || params->ymax != pptr->ymax) { internalError("All channels need to be same size."); return; } } // width,height int width = params->xmax - params->xmin; int height = params->ymax - params->ymin; // photo if (*ph == '\0') { Tcl_AppendResult(interp, "bad image name ", NULL); return; } Tk_PhotoHandle photo = Tk_FindPhoto(interp, ph); if (!photo) { Tcl_AppendResult(interp, "bad image handle ", NULL); return; } if (Tk_PhotoSetSize(interp, photo, width, height) != TCL_OK) { Tcl_AppendResult(interp, "bad photo set size ", NULL); return; } Tk_PhotoBlank(photo); Tk_PhotoImageBlock block; if (!Tk_PhotoGetImage(photo,&block)) { Tcl_AppendResult(interp, "bad image block ", NULL); return; } if (block.pixelSize<4) { Tcl_AppendResult(interp, "bad pixel size ", NULL); return; } // clear, set alpha channel unsigned char* dest = block.pixelPtr; for (long jj=0; jjsize() - 1; const unsigned char* table = colorScale[kk]->psColors(); // variable FitsImage* fits = context[kk].cfits; double ll = fits->low(); double hh = fits->high(); double diff = hh - ll; unsigned char* dest = block.pixelPtr; for (long jj=params->ymax-1; jj>=params->ymin; jj--) { for (long ii=params->xmin; iixmax; ii++, dest+=block.pixelSize) { double value = fits->getValueDouble(Vector(ii,jj)); if (isfinite(diff) && isfinite(value)) { if (value <= ll) *(dest+block.offset[kk]) = table[0]; else if (value >= hh) *(dest+block.offset[kk]) = table[length]; else *(dest+block.offset[kk]) = table[(int)(((value - ll)/diff * length) + .5)]; } } } } CLEARSIGBUS if (Tk_PhotoPutBlock(interp, photo, &block, 0, 0, width, height, TK_PHOTO_COMPOSITE_SET) != TCL_OK) { Tcl_AppendResult(interp, "bad put block ", NULL); return; } } void FrameRGB::setRGBChannelCmd(const char* c) { if (!strncmp(c,"red",3)) channel = 0; else if (!strncmp(c,"gre",3)) channel = 1; else if (!strncmp(c,"blu",3)) channel = 2; else channel = 0; currentContext = &context[channel]; // execute any update callbacks updateCBMarkers(&userMarkers); updateCBMarkers(&catalogMarkers); // updateCBMarkers(&analysisMarkers); // always update update(BASE); } void FrameRGB::setRGBSystemCmd(Coord::CoordSystem sys) { rgbSystem = sys; // save current matrix Matrix old[3]; for (int ii=0; ii<3; ii++) old[ii] = rgb[ii]; alignWCS(); // fix any contours for (int ii=0; ii<3; ii++) { Matrix mm = old[ii].invert() * rgb[ii]; context[ii].updateContours(mm); } update(MATRIX); } void FrameRGB::setRGBViewCmd(int r, int g, int b) { view[0] = r ? 1 : 0; view[1] = g ? 1 : 0; view[2] = b ? 1 : 0; update(BASE); // always update } saods9/tksao/frame/framergb.h000644 000765 000000 00000011440 12705764674 016557 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __framergb_h__ #define __framergb_h__ #include "context.h" #include "framebase.h" #include "colorscalergb.h" // Frame class FrameRGB : public FrameBase { protected: int channel; // current channel Coord::CoordSystem rgbSystem; // alignment coordinate system Matrix rgb[3]; // rgb matrix long* colormapData[3]; // preextract data int view[3]; // visible channels float bias[3]; // current colormap bias float contrast[3]; // current colormap contrast ColorScaleRGB* colorScale[3]; // current color scale int colorCount; // number of dynamic colors unsigned char* colorCells; // current color values private: void alignWCS(); void alignWCS(Coord::CoordSystem, Coord::SkyFrame); void alignWCS(FitsImage*, Coord::CoordSystem); int doRender(); BBox imageBBox(FrScale::SecMode); void loadRGBCube(MemType, const char*, FitsImage*); void loadRGBImage(MemType, const char*, FitsImage*); void loadRGBFinish(); void reset(); void rgbAlignWCS(int); void setBinCursor(); void setKeyFits(); void unloadFits(); void pushMatrices(); void pushMagnifierMatrices(); void pushPannerMatrices(); void pushPSMatrices(float, int, int); void updateRGBMatrices(); protected: int isFrameRGB() {return 1;} unsigned char* fillImage(int, int, Coord::InternalSystem); void updateColorCells(unsigned char*, int); void updateColorScale(); void unloadAllFits(); int validColorScale() {return colorScale[0] && colorScale[1] && colorScale[2];} public: FrameRGB(Tcl_Interp*, Tk_Canvas, Tk_Item*); virtual ~FrameRGB(); void getColorbarCmd(); void getInfoCmd(const Vector&, Coord::InternalSystem, char*); void getRGBChannelCmd(); void getRGBSystemCmd(); void getRGBViewCmd(); void getTypeCmd(); void colormapCmd(float, float, float, float, float, float, int, unsigned char*, int); void colormapBeginCmd(); void colormapEndCmd(); void colormapMotionCmd(float, float, float, float, float, float, int, unsigned char*, int); void iisCmd(int, int) {} void iisEraseCmd() {} void iisGetCmd(char*, int, int, int, int) {} void iisSetCmd(const char*, int, int, int, int) {} void iisWCSCmd(const Matrix&, const Vector&, int) {} void loadPhotoCmd(const char*, const char*); void loadSlicePhotoCmd(const char*, const char*) {} void loadRGBCubeAllocCmd(const char*, const char*); void loadRGBCubeAllocGZCmd(const char*, const char*); void loadRGBCubeChannelCmd(const char*, const char*); void loadRGBCubeMMapCmd(const char*); void loadRGBCubeSMMapCmd(const char*, const char*); void loadRGBCubeMMapIncrCmd(const char*); void loadRGBCubeShareCmd(ShmType, int, const char*); void loadRGBCubeSShareCmd(ShmType, int, int, const char*); void loadRGBCubeSocketCmd(int, const char*); void loadRGBCubeSocketGZCmd(int, const char*); void loadRGBCubeVarCmd(const char*, const char*); void loadRGBImageAllocCmd(const char*, const char*); void loadRGBImageAllocGZCmd(const char*, const char*); void loadRGBImageChannelCmd(const char*, const char*); void loadRGBImageMMapCmd(const char*); void loadRGBImageMMapIncrCmd(const char*); void loadRGBImageShareCmd(ShmType, int, const char*); void loadRGBImageSocketCmd(int, const char*); void loadRGBImageSocketGZCmd(int, const char*); void loadRGBImageVarCmd(const char*, const char*); void loadArrayRGBCubeAllocCmd(const char*, const char*); void loadArrayRGBCubeAllocGZCmd(const char*, const char*); void loadArrayRGBCubeChannelCmd(const char*, const char*); void loadArrayRGBCubeMMapCmd(const char*); void loadArrayRGBCubeMMapIncrCmd(const char*); void loadArrayRGBCubeShareCmd(ShmType, int, const char*); void loadArrayRGBCubeSocketCmd(int, const char*); void loadArrayRGBCubeSocketGZCmd(int, const char*); void loadArrayRGBCubeVarCmd(const char*, const char*); void saveFitsRGBImage(OutFitsStream&); void saveFitsRGBImageFileCmd(const char*); void saveFitsRGBImageChannelCmd(const char*); void saveFitsRGBImageSocketCmd(int); void saveFitsRGBCube(OutFitsStream&); void saveFitsRGBCubeFileCmd(const char*); void saveFitsRGBCubeChannelCmd(const char*); void saveFitsRGBCubeSocketCmd(int); void saveArrayRGBCube(OutFitsStream&, FitsFile::ArchType); void saveArrayRGBCubeFileCmd(const char*, FitsFile::ArchType); void saveArrayRGBCubeChannelCmd(const char*, FitsFile::ArchType); void saveArrayRGBCubeSocketCmd(int, FitsFile::ArchType); void savePhotoCmd(const char*); void setRGBChannelCmd(const char*); void setRGBViewCmd(int, int, int); void setRGBSystemCmd(Coord::CoordSystem); }; #endif saods9/tksao/frame/framergbtruecolor16.C000644 000765 000000 00000007264 12705767426 020627 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "framergbtruecolor16.h" #include "fitsimage.h" // Tk Canvas Widget Function Declarations int FrameRGBTrueColor16CreateProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const []); // FrameRGBTrueColor16 Specs static Tk_CustomOption tagsOption = { Tk_CanvasTagsParseProc, Tk_CanvasTagsPrintProc, NULL }; static Tk_ConfigSpec frameRGBTrueColor16Specs[] = { {TK_CONFIG_STRING, (char*)"-command", NULL, NULL, "framergb", Tk_Offset(WidgetOptions, cmdName), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-x", NULL, NULL, "1", Tk_Offset(WidgetOptions, x), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-y", NULL, NULL, "1", Tk_Offset(WidgetOptions, y), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-width", NULL, NULL, "512", Tk_Offset(WidgetOptions, width), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-height", NULL, NULL, "512", Tk_Offset(WidgetOptions, height), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_ANCHOR, (char*)"-anchor", NULL, NULL, "nw", Tk_Offset(WidgetOptions, anchor), 0, NULL}, {TK_CONFIG_CUSTOM, (char*)"-tags", NULL, NULL, NULL, 0, TK_CONFIG_NULL_OK, &tagsOption}, {TK_CONFIG_STRING, (char*)"-helvetica", NULL, NULL, "helvetica", Tk_Offset(WidgetOptions, helvetica), 0, NULL}, {TK_CONFIG_STRING, (char*)"-courier", NULL, NULL, "courier", Tk_Offset(WidgetOptions, courier), 0, NULL}, {TK_CONFIG_STRING, (char*)"-times", NULL, NULL, "times", Tk_Offset(WidgetOptions, times), 0, NULL}, {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL}, }; // Tk Static Structure static Tk_ItemType frameRGBTrueColor16Type = { (char*)"framergbtruecolor16", // name sizeof(WidgetOptions), // item size FrameRGBTrueColor16CreateProc, // configProc frameRGBTrueColor16Specs, // configSpecs WidgetConfigProc, // configProc WidgetCoordProc, // coordProc WidgetDeleteProc, // deleteProc WidgetDisplayProc, // displayProc 0, // alwaysRedraw WidgetPointProc, // pointProc WidgetAreaProc, // areaProc WidgetPostscriptProc, // postscriptProc WidgetScaleProc, // scaleProc WidgetTranslateProc, // translateProc (Tk_ItemIndexProc*)NULL, // indexProc WidgetICursorProc, // icursorProc (Tk_ItemSelectionProc*)NULL, // selectionProc (Tk_ItemInsertProc*)NULL, // insertProc (Tk_ItemDCharsProc*)NULL, // dCharsProc (Tk_ItemType*)NULL // nextPtr }; // Non-Member Functions int FrameRGBTrueColor16_Init(Tcl_Interp* interp) { Tk_CreateItemType(&frameRGBTrueColor16Type); return TCL_OK; } int FrameRGBTrueColor16CreateProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[]) { FrameRGBTrueColor16* frame = new FrameRGBTrueColor16(interp, canvas, item); // and set default configuration if (frame->configure(argc, (const char**)argv, 0) != TCL_OK) { delete frame; Tcl_AppendResult(interp, " error occured while creating frame.", NULL); return TCL_ERROR; } return TCL_OK; } // FrameRGBTrueColor16 Member Functions FrameRGBTrueColor16::FrameRGBTrueColor16(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : FrameRGB(i,c,item), TrueColor16(visual) { configSpecs = frameRGBTrueColor16Specs; // frame configure options } FrameRGBTrueColor16::~FrameRGBTrueColor16() { // we must do this at this level, because updateColorScale is called unloadAllFits(); } saods9/tksao/frame/framergbtruecolor16.h000644 000765 000000 00000001244 12705767426 020664 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __framergbtruecolor16_h__ #define __framergbtruecolor16_h__ #include "framergb.h" #include "truecolor16.h" class FrameRGBTrueColor16 : public FrameRGB, public TrueColor16 { private: void encodeTrueColor(XColor* src, char* dest) {TrueColor16::encodeTrueColor(src,dest,baseXImage);} void encodeTrueColor(unsigned char* src, XImage* ximage) {TrueColor16::encodeTrueColor(src, ximage);} public: FrameRGBTrueColor16(Tcl_Interp*, Tk_Canvas, Tk_Item*); ~FrameRGBTrueColor16(); }; #endif saods9/tksao/frame/framergbtruecolor24.C000644 000765 000000 00000007266 12705767427 020631 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "framergbtruecolor24.h" #include "fitsimage.h" // Tk Canvas Widget Function Declarations int FrameRGBTrueColor24CreateProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const []); // FrameRGBTrueColor24 Specs static Tk_CustomOption tagsOption = { Tk_CanvasTagsParseProc, Tk_CanvasTagsPrintProc, NULL }; static Tk_ConfigSpec frameRGBTrueColor24Specs[] = { {TK_CONFIG_STRING, (char*)"-command", NULL, NULL, "framergb", Tk_Offset(WidgetOptions, cmdName), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-x", NULL, NULL, "1", Tk_Offset(WidgetOptions, x), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-y", NULL, NULL, "1", Tk_Offset(WidgetOptions, y), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-width", NULL, NULL, "512", Tk_Offset(WidgetOptions, width), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-height", NULL, NULL, "512", Tk_Offset(WidgetOptions, height), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_ANCHOR, (char*)"-anchor", NULL, NULL, "nw", Tk_Offset(WidgetOptions, anchor), 0, NULL}, {TK_CONFIG_CUSTOM, (char*)"-tags", NULL, NULL, NULL, 0, TK_CONFIG_NULL_OK, &tagsOption}, {TK_CONFIG_STRING, (char*)"-helvetica", NULL, NULL, "helvetica", Tk_Offset(WidgetOptions, helvetica), 0, NULL}, {TK_CONFIG_STRING, (char*)"-courier", NULL, NULL, "courier", Tk_Offset(WidgetOptions, courier), 0, NULL}, {TK_CONFIG_STRING, (char*)"-times", NULL, NULL, "times", Tk_Offset(WidgetOptions, times), 0, NULL}, {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL}, }; // Tk Static Structure static Tk_ItemType frameRGBTrueColor24Type = { (char*)"framergbtruecolor24", // name sizeof(WidgetOptions), // item size FrameRGBTrueColor24CreateProc, // configProc frameRGBTrueColor24Specs, // configSpecs WidgetConfigProc, // configProc WidgetCoordProc, // coordProc WidgetDeleteProc, // deleteProc WidgetDisplayProc, // displayProc 0, // alwaysRedraw WidgetPointProc, // pointProc WidgetAreaProc, // areaProc WidgetPostscriptProc, // postscriptProc WidgetScaleProc, // scaleProc WidgetTranslateProc, // translateProc (Tk_ItemIndexProc*)NULL, // indexProc WidgetICursorProc, // icursorProc (Tk_ItemSelectionProc*)NULL, // selectionProc (Tk_ItemInsertProc*)NULL, // insertProc (Tk_ItemDCharsProc*)NULL, // dCharsProc (Tk_ItemType*)NULL // nextPtr }; // Non-Member Functions int FrameRGBTrueColor24_Init(Tcl_Interp* interp) { Tk_CreateItemType(&frameRGBTrueColor24Type); return TCL_OK; } int FrameRGBTrueColor24CreateProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[]) { FrameRGBTrueColor24* frame = new FrameRGBTrueColor24(interp, canvas, item); // and set default configuration if (frame->configure(argc, (const char**)argv, 0) != TCL_OK) { delete frame; Tcl_AppendResult(interp, " error occured while creating frame.", NULL); return TCL_ERROR; } return TCL_OK; } // FrameRGBTrueColor24 Member Functions FrameRGBTrueColor24::FrameRGBTrueColor24(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : FrameRGB(i, c, item), TrueColor24(visual) { configSpecs = frameRGBTrueColor24Specs; // frame configure options } FrameRGBTrueColor24::~FrameRGBTrueColor24() { // we must do this at this level, because updateColorScale is called unloadAllFits(); } saods9/tksao/frame/framergbtruecolor24.h000644 000765 000000 00000001243 12705767427 020663 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __framergbtruecolor24_h__ #define __framergbtruecolor24_h__ #include "framergb.h" #include "truecolor24.h" class FrameRGBTrueColor24 :public FrameRGB, public TrueColor24 { private: void encodeTrueColor(XColor* src, char* dest) {TrueColor24::encodeTrueColor(src,dest,baseXImage);} void encodeTrueColor(unsigned char* src, XImage* ximage) {TrueColor24::encodeTrueColor(src, ximage);} public: FrameRGBTrueColor24(Tcl_Interp*, Tk_Canvas, Tk_Item*); ~FrameRGBTrueColor24(); }; #endif saods9/tksao/frame/framergbtruecolor8.C000644 000765 000000 00000007237 12705767427 020551 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "framergbtruecolor8.h" #include "fitsimage.h" // Tk Canvas Widget Function Declarations int FrameRGBTrueColor8CreateProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const []); // FrameRGBTrueColor8 Specs static Tk_CustomOption tagsOption = { Tk_CanvasTagsParseProc, Tk_CanvasTagsPrintProc, NULL }; static Tk_ConfigSpec frameRGBTrueColor8Specs[] = { {TK_CONFIG_STRING, (char*)"-command", NULL, NULL, "framergb", Tk_Offset(WidgetOptions, cmdName), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-x", NULL, NULL, "1", Tk_Offset(WidgetOptions, x), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-y", NULL, NULL, "1", Tk_Offset(WidgetOptions, y), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-width", NULL, NULL, "512", Tk_Offset(WidgetOptions, width), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-height", NULL, NULL, "512", Tk_Offset(WidgetOptions, height), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_ANCHOR, (char*)"-anchor", NULL, NULL, "nw", Tk_Offset(WidgetOptions, anchor), 0, NULL}, {TK_CONFIG_CUSTOM, (char*)"-tags", NULL, NULL, NULL, 0, TK_CONFIG_NULL_OK, &tagsOption}, {TK_CONFIG_STRING, (char*)"-helvetica", NULL, NULL, "helvetica", Tk_Offset(WidgetOptions, helvetica), 0, NULL}, {TK_CONFIG_STRING, (char*)"-courier", NULL, NULL, "courier", Tk_Offset(WidgetOptions, courier), 0, NULL}, {TK_CONFIG_STRING, (char*)"-times", NULL, NULL, "times", Tk_Offset(WidgetOptions, times), 0, NULL}, {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL}, }; // Tk Static Structure static Tk_ItemType frameRGBTrueColor8Type = { (char*)"framergbtruecolor8", // name sizeof(WidgetOptions), // item size FrameRGBTrueColor8CreateProc, // configProc frameRGBTrueColor8Specs, // configSpecs WidgetConfigProc, // configProc WidgetCoordProc, // coordProc WidgetDeleteProc, // deleteProc WidgetDisplayProc, // displayProc 0, // alwaysRedraw WidgetPointProc, // pointProc WidgetAreaProc, // areaProc WidgetPostscriptProc, // postscriptProc WidgetScaleProc, // scaleProc WidgetTranslateProc, // translateProc (Tk_ItemIndexProc*)NULL, // indexProc WidgetICursorProc, // icursorProc (Tk_ItemSelectionProc*)NULL, // selectionProc (Tk_ItemInsertProc*)NULL, // insertProc (Tk_ItemDCharsProc*)NULL, // dCharsProc (Tk_ItemType*)NULL // nextPtr }; // Non-Member Functions int FrameRGBTrueColor8_Init(Tcl_Interp* interp) { Tk_CreateItemType(&frameRGBTrueColor8Type); return TCL_OK; } int FrameRGBTrueColor8CreateProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[]) { FrameRGBTrueColor8* frame = new FrameRGBTrueColor8(interp, canvas, item); // and set default configuration if (frame->configure(argc, (const char**)argv, 0) != TCL_OK) { delete frame; Tcl_AppendResult(interp, " error occured while creating frame.", NULL); return TCL_ERROR; } return TCL_OK; } // FrameRGBTrueColor8 Member Functions FrameRGBTrueColor8::FrameRGBTrueColor8(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : FrameRGB(i,c,item), TrueColor8(visual) { configSpecs = frameRGBTrueColor8Specs; // frame configure options } FrameRGBTrueColor8::~FrameRGBTrueColor8() { // we must do this at this level, because updateColorScale is called unloadAllFits(); } saods9/tksao/frame/framergbtruecolor8.h000644 000765 000000 00000001233 12705767427 020604 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __framergbtruecolor8_h__ #define __framergbtruecolor8_h__ #include "framergb.h" #include "truecolor8.h" class FrameRGBTrueColor8 : public FrameRGB, public TrueColor8 { private: void encodeTrueColor(XColor* src, char* dest) {TrueColor8::encodeTrueColor(src,dest,baseXImage);} void encodeTrueColor(unsigned char* src, XImage* ximage) {TrueColor8::encodeTrueColor(src, ximage);} public: FrameRGBTrueColor8(Tcl_Interp*, Tk_Canvas, Tk_Item*); ~FrameRGBTrueColor8(); }; #endif saods9/tksao/frame/frametruecolor16.C000644 000765 000000 00000012311 12705767427 020122 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "frametruecolor16.h" #include "colorscaletrue16.h" // Tk Canvas Widget Function Declarations int FrameTrueColor16CreateProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const []); // FrameTrueColor16 Specs static Tk_CustomOption tagsOption = { Tk_CanvasTagsParseProc, Tk_CanvasTagsPrintProc, NULL }; static Tk_ConfigSpec frameTrueColor16Specs[] = { {TK_CONFIG_STRING, (char*)"-command", NULL, NULL, "frame", Tk_Offset(WidgetOptions, cmdName), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-x", NULL, NULL, "1", Tk_Offset(WidgetOptions, x), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-y", NULL, NULL, "1", Tk_Offset(WidgetOptions, y), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-width", NULL, NULL, "512", Tk_Offset(WidgetOptions, width), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-height", NULL, NULL, "512", Tk_Offset(WidgetOptions, height), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_ANCHOR, (char*)"-anchor", NULL, NULL, "nw", Tk_Offset(WidgetOptions, anchor), 0, NULL}, {TK_CONFIG_CUSTOM, (char*)"-tags", NULL, NULL, NULL, 0, TK_CONFIG_NULL_OK, &tagsOption}, {TK_CONFIG_STRING, (char*)"-helvetica", NULL, NULL, "helvetica", Tk_Offset(WidgetOptions, helvetica), 0, NULL}, {TK_CONFIG_STRING, (char*)"-courier", NULL, NULL, "courier", Tk_Offset(WidgetOptions, courier), 0, NULL}, {TK_CONFIG_STRING, (char*)"-times", NULL, NULL, "times", Tk_Offset(WidgetOptions, times), 0, NULL}, {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL}, }; // Tk Static Structure static Tk_ItemType frameTrueColor16Type = { (char*)"frametruecolor16", // name sizeof(WidgetOptions), // item size FrameTrueColor16CreateProc, // configProc frameTrueColor16Specs, // configSpecs WidgetConfigProc, // configProc WidgetCoordProc, // coordProc WidgetDeleteProc, // deleteProc WidgetDisplayProc, // displayProc 0, // alwaysRedraw WidgetPointProc, // pointProc WidgetAreaProc, // areaProc WidgetPostscriptProc, // postscriptProc WidgetScaleProc, // scaleProc WidgetTranslateProc, // translateProc (Tk_ItemIndexProc*)NULL, // indexProc WidgetICursorProc, // icursorProc (Tk_ItemSelectionProc*)NULL, // selectionProc (Tk_ItemInsertProc*)NULL, // insertProc (Tk_ItemDCharsProc*)NULL, // dCharsProc (Tk_ItemType*)NULL // nextPtr }; // Non-Member Functions int FrameTrueColor16_Init(Tcl_Interp* interp) { Tk_CreateItemType(&frameTrueColor16Type); return TCL_OK; } int FrameTrueColor16CreateProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[]) { FrameTrueColor16* frame = new FrameTrueColor16(interp, canvas, item); // and set default configuration if (frame->configure(argc, (const char**)argv, 0) != TCL_OK) { delete frame; Tcl_AppendResult(interp, " error occured while creating frame.", NULL); return TCL_ERROR; } return TCL_OK; } // FrameTrueColor16 Member Functions FrameTrueColor16::FrameTrueColor16(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Frame(i,c,item), TrueColor16(visual) { configSpecs = frameTrueColor16Specs; // frame configure options } FrameTrueColor16::~FrameTrueColor16() { // we must do this at this level, because updateColorScale is called unloadAllFits(); } void FrameTrueColor16::updateColorScale() { // we need colors before we can construct a scale if (!colorCells) return; if (colorScale) delete colorScale; switch (context->colorScaleType()) { case FrScale::LINEARSCALE: colorScale = new LinearScaleTrueColor16(colorCount, colorCells, colorCount, visual, byteorder_); break; case FrScale::LOGSCALE: colorScale = new LogScaleTrueColor16(SCALESIZE, colorCells, colorCount, context->expo(), visual, byteorder_); break; case FrScale::POWSCALE: colorScale = new PowScaleTrueColor16(SCALESIZE, colorCells, colorCount, context->expo(), visual, byteorder_); break; case FrScale::SQRTSCALE: colorScale = new SqrtScaleTrueColor16(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::SQUAREDSCALE: colorScale = new SquaredScaleTrueColor16(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::ASINHSCALE: colorScale = new AsinhScaleTrueColor16(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::SINHSCALE: colorScale = new SinhScaleTrueColor16(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::HISTEQUSCALE: colorScale = new HistEquScaleTrueColor16(SCALESIZE, colorCells, colorCount, context->histequ(), HISTEQUSIZE, visual, byteorder_); break; case FrScale::IISSCALE: colorScale = new IISScaleTrueColor16(colorCells, colorCount, visual, byteorder_); break; } } saods9/tksao/frame/frametruecolor16.h000644 000765 000000 00000001250 12705767427 020167 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __frametruecolor16_h__ #define __frametruecolor16_h__ #include "frame.h" #include "truecolor16.h" class FrameTrueColor16 : public Frame, public TrueColor16 { private: void encodeTrueColor(XColor* src, char* dest) {TrueColor16::encodeTrueColor(src,dest,baseXImage);} void encodeTrueColor(unsigned char* src, XImage* ximage) {TrueColor16::encodeTrueColor(src, ximage);} void updateColorScale(); public: FrameTrueColor16(Tcl_Interp*, Tk_Canvas, Tk_Item*); ~FrameTrueColor16(); }; #endif saods9/tksao/frame/frametruecolor24.C000644 000765 000000 00000015704 12705767427 020132 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "frametruecolor24.h" #include "colorscaletrue24.h" #include "colorscaletrue32.h" // Tk Canvas Widget Function Declarations int FrameTrueColor24CreateProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const []); // FrameTrueColor24 Specs static Tk_CustomOption tagsOption = { Tk_CanvasTagsParseProc, Tk_CanvasTagsPrintProc, NULL }; static Tk_ConfigSpec frameTrueColor24Specs[] = { {TK_CONFIG_STRING, (char*)"-command", NULL, NULL, "frame", Tk_Offset(WidgetOptions, cmdName), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-x", NULL, NULL, "1", Tk_Offset(WidgetOptions, x), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-y", NULL, NULL, "1", Tk_Offset(WidgetOptions, y), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-width", NULL, NULL, "512", Tk_Offset(WidgetOptions, width), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-height", NULL, NULL, "512", Tk_Offset(WidgetOptions, height), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_ANCHOR, (char*)"-anchor", NULL, NULL, "nw", Tk_Offset(WidgetOptions, anchor), 0, NULL}, {TK_CONFIG_CUSTOM, (char*)"-tags", NULL, NULL, NULL, 0, TK_CONFIG_NULL_OK, &tagsOption}, {TK_CONFIG_STRING, (char*)"-helvetica", NULL, NULL, "helvetica", Tk_Offset(WidgetOptions, helvetica), 0, NULL}, {TK_CONFIG_STRING, (char*)"-courier", NULL, NULL, "courier", Tk_Offset(WidgetOptions, courier), 0, NULL}, {TK_CONFIG_STRING, (char*)"-times", NULL, NULL, "times", Tk_Offset(WidgetOptions, times), 0, NULL}, {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL}, }; // Tk Static Structure static Tk_ItemType frameTrueColor24Type = { (char*)"frametruecolor24", // name sizeof(WidgetOptions), // item size FrameTrueColor24CreateProc, // configProc frameTrueColor24Specs, // configSpecs WidgetConfigProc, // configProc WidgetCoordProc, // coordProc WidgetDeleteProc, // deleteProc WidgetDisplayProc, // displayProc 0, // alwaysRedraw WidgetPointProc, // pointProc WidgetAreaProc, // areaProc WidgetPostscriptProc, // postscriptProc WidgetScaleProc, // scaleProc WidgetTranslateProc, // translateProc (Tk_ItemIndexProc*)NULL, // indexProc WidgetICursorProc, // icursorProc (Tk_ItemSelectionProc*)NULL, // selectionProc (Tk_ItemInsertProc*)NULL, // insertProc (Tk_ItemDCharsProc*)NULL, // dCharsProc (Tk_ItemType*)NULL // nextPtr }; // Non-Member Functions int FrameTrueColor24_Init(Tcl_Interp* interp) { Tk_CreateItemType(&frameTrueColor24Type); return TCL_OK; } int FrameTrueColor24CreateProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[]) { FrameTrueColor24* frame = new FrameTrueColor24(interp, canvas, item); // and set default configuration if (frame->configure(argc, (const char**)argv, 0) != TCL_OK) { delete frame; Tcl_AppendResult(interp, " error occured while creating frame.", NULL); return TCL_ERROR; } return TCL_OK; } // FrameTrueColor24 Member Functions FrameTrueColor24::FrameTrueColor24(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Frame(i,c,item), TrueColor24(visual) { configSpecs = frameTrueColor24Specs; // frame configure options } FrameTrueColor24::~FrameTrueColor24() { // we must do this at this level, because updateColorScale is called unloadAllFits(); } void FrameTrueColor24::updateColorScale() { // we need colors before we can construct a scale if (!colorCells || !bitsperpixel_) return; if (colorScale) delete colorScale; // determine if we have 3 bytes or 4 bytes per pixel switch (bitsperpixel_) { case 24: updateColorScale24(); break; case 32: updateColorScale32(); break; } } void FrameTrueColor24::updateColorScale24() { switch (context->colorScaleType()) { case FrScale::LINEARSCALE: colorScale = new LinearScaleTrueColor24(colorCount, colorCells, colorCount, visual, byteorder_); break; case FrScale::LOGSCALE: colorScale = new LogScaleTrueColor24(SCALESIZE, colorCells, colorCount, context->expo(), visual, byteorder_); break; case FrScale::POWSCALE: colorScale = new PowScaleTrueColor24(SCALESIZE, colorCells, colorCount, context->expo(), visual, byteorder_); break; case FrScale::SQRTSCALE: colorScale = new SqrtScaleTrueColor24(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::SQUAREDSCALE: colorScale = new SquaredScaleTrueColor24(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::ASINHSCALE: colorScale = new AsinhScaleTrueColor24(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::SINHSCALE: colorScale = new SinhScaleTrueColor24(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::HISTEQUSCALE: colorScale = new HistEquScaleTrueColor24(SCALESIZE, colorCells, colorCount, context->histequ(), HISTEQUSIZE, visual, byteorder_); break; case FrScale::IISSCALE: colorScale = new IISScaleTrueColor24(colorCells, colorCount, visual, byteorder_); break; } } void FrameTrueColor24::updateColorScale32() { switch (context->colorScaleType()) { case FrScale::LINEARSCALE: colorScale = new LinearScaleTrueColor32(colorCount, colorCells, colorCount, visual, byteorder_); break; case FrScale::LOGSCALE: colorScale = new LogScaleTrueColor32(SCALESIZE, colorCells, colorCount, context->expo(), visual, byteorder_); break; case FrScale::POWSCALE: colorScale = new PowScaleTrueColor32(SCALESIZE, colorCells, colorCount, context->expo(), visual, byteorder_); break; case FrScale::SQRTSCALE: colorScale = new SqrtScaleTrueColor32(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::SQUAREDSCALE: colorScale = new SquaredScaleTrueColor32(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::ASINHSCALE: colorScale = new AsinhScaleTrueColor32(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::SINHSCALE: colorScale = new SinhScaleTrueColor32(SCALESIZE, colorCells, colorCount, visual, byteorder_); break; case FrScale::HISTEQUSCALE: colorScale = new HistEquScaleTrueColor32(SCALESIZE, colorCells, colorCount, context->histequ(), HISTEQUSIZE, visual, byteorder_); break; case FrScale::IISSCALE: colorScale = new IISScaleTrueColor32(colorCells, colorCount, visual, byteorder_); break; } } saods9/tksao/frame/frametruecolor24.h000644 000765 000000 00000001342 12705767427 020170 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __frametruecolor24_h__ #define __frametruecolor24_h__ #include "frame.h" #include "truecolor24.h" class FrameTrueColor24 : public Frame, public TrueColor24 { private: void encodeTrueColor(XColor* src, char* dest) {TrueColor24::encodeTrueColor(src,dest,baseXImage);} void encodeTrueColor(unsigned char* src, XImage* ximage) {TrueColor24::encodeTrueColor(src, ximage);} void updateColorScale(); void updateColorScale24(); void updateColorScale32(); public: FrameTrueColor24(Tcl_Interp*, Tk_Canvas, Tk_Item*); ~FrameTrueColor24(); }; #endif saods9/tksao/frame/frametruecolor8.C000644 000765 000000 00000012015 12705767427 020044 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "frametruecolor8.h" #include "colorscaletrue8.h" // Tk Canvas Widget Function Declarations int FrameTrueColor8CreateProc(Tcl_Interp*, Tk_Canvas, Tk_Item*, int, Tcl_Obj *const []); // FrameTrueColor8 Specs static Tk_CustomOption tagsOption = { Tk_CanvasTagsParseProc, Tk_CanvasTagsPrintProc, NULL }; static Tk_ConfigSpec frameTrueColor8Specs[] = { {TK_CONFIG_STRING, (char*)"-command", NULL, NULL, "frame", Tk_Offset(WidgetOptions, cmdName), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-x", NULL, NULL, "1", Tk_Offset(WidgetOptions, x), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-y", NULL, NULL, "1", Tk_Offset(WidgetOptions, y), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-width", NULL, NULL, "512", Tk_Offset(WidgetOptions, width), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_INT, (char*)"-height", NULL, NULL, "512", Tk_Offset(WidgetOptions, height), TK_CONFIG_OPTION_SPECIFIED, NULL}, {TK_CONFIG_ANCHOR, (char*)"-anchor", NULL, NULL, "nw", Tk_Offset(WidgetOptions, anchor), 0, NULL}, {TK_CONFIG_CUSTOM, (char*)"-tags", NULL, NULL, NULL, 0, TK_CONFIG_NULL_OK, &tagsOption}, {TK_CONFIG_STRING, (char*)"-helvetica", NULL, NULL, "helvetica", Tk_Offset(WidgetOptions, helvetica), 0, NULL}, {TK_CONFIG_STRING, (char*)"-courier", NULL, NULL, "courier", Tk_Offset(WidgetOptions, courier), 0, NULL}, {TK_CONFIG_STRING, (char*)"-times", NULL, NULL, "times", Tk_Offset(WidgetOptions, times), 0, NULL}, {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0, NULL}, }; // Tk Static Structure static Tk_ItemType frameTrueColor8Type = { (char*)"frametruecolor8", // name sizeof(WidgetOptions), // item size FrameTrueColor8CreateProc, // configProc frameTrueColor8Specs, // configSpecs WidgetConfigProc, // configProc WidgetCoordProc, // coordProc WidgetDeleteProc, // deleteProc WidgetDisplayProc, // displayProc 0, // alwaysRedraw WidgetPointProc, // pointProc WidgetAreaProc, // areaProc WidgetPostscriptProc, // postscriptProc WidgetScaleProc, // scaleProc WidgetTranslateProc, // translateProc (Tk_ItemIndexProc*)NULL, // indexProc WidgetICursorProc, // icursorProc (Tk_ItemSelectionProc*)NULL, // selectionProc (Tk_ItemInsertProc*)NULL, // insertProc (Tk_ItemDCharsProc*)NULL, // dCharsProc (Tk_ItemType*)NULL // nextPtr }; // Non-Member Functions int FrameTrueColor8_Init(Tcl_Interp* interp) { Tk_CreateItemType(&frameTrueColor8Type); return TCL_OK; } int FrameTrueColor8CreateProc(Tcl_Interp* interp, Tk_Canvas canvas, Tk_Item* item, int argc, Tcl_Obj *const argv[]) { FrameTrueColor8* frame = new FrameTrueColor8(interp, canvas, item); // and set default configuration if (frame->configure(argc, (const char**)argv, 0) != TCL_OK) { delete frame; Tcl_AppendResult(interp, " error occured while creating frame.", NULL); return TCL_ERROR; } return TCL_OK; } // FrameTrueColor8 Member Functions FrameTrueColor8::FrameTrueColor8(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Frame(i,c,item), TrueColor8(visual) { configSpecs = frameTrueColor8Specs; // frame configure options } FrameTrueColor8::~FrameTrueColor8() { // we must do this at this level, because updateColorScale is called unloadAllFits(); } void FrameTrueColor8::updateColorScale() { // we need colors before we can construct a scale if (!colorCells) return; if (colorScale) delete colorScale; switch (context->colorScaleType()) { case FrScale::LINEARSCALE: colorScale = new LinearScaleTrueColor8(colorCount, colorCells, colorCount, visual); break; case FrScale::LOGSCALE: colorScale = new LogScaleTrueColor8(SCALESIZE, colorCells, colorCount, context->expo(), visual); break; case FrScale::POWSCALE: colorScale = new PowScaleTrueColor8(SCALESIZE, colorCells, colorCount, context->expo(), visual); break; case FrScale::SQRTSCALE: colorScale = new SqrtScaleTrueColor8(SCALESIZE, colorCells, colorCount, visual); break; case FrScale::SQUAREDSCALE: colorScale = new SquaredScaleTrueColor8(SCALESIZE, colorCells, colorCount, visual); break; case FrScale::ASINHSCALE: colorScale = new AsinhScaleTrueColor8(SCALESIZE, colorCells, colorCount, visual); break; case FrScale::SINHSCALE: colorScale = new SinhScaleTrueColor8(SCALESIZE, colorCells, colorCount, visual); break; case FrScale::HISTEQUSCALE: colorScale = new HistEquScaleTrueColor8(SCALESIZE, colorCells, colorCount, context->histequ(), HISTEQUSIZE, visual); break; case FrScale::IISSCALE: colorScale = new IISScaleTrueColor8(colorCells, colorCount, visual); break; } } saods9/tksao/frame/frametruecolor8.h000644 000765 000000 00000001236 12705767427 020114 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __frametruecolor8_h__ #define __frametruecolor8_h__ #include "frame.h" #include "truecolor8.h" class FrameTrueColor8 : public Frame, public TrueColor8 { private: void encodeTrueColor(XColor* src, char* dest) {TrueColor8::encodeTrueColor(src,dest,baseXImage);} void encodeTrueColor(unsigned char* src, XImage* ximage) {TrueColor8::encodeTrueColor(src, ximage);} void updateColorScale(); public: FrameTrueColor8(Tcl_Interp*, Tk_Canvas, Tk_Item*); ~FrameTrueColor8(); }; #endif saods9/tksao/frame/frblt.C000644 000765 000000 00000061317 12775517652 016045 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "base.h" #include "context.h" #include "fitsimage.h" #include "projection.h" extern "C" { #include "tkbltVector.h" } #include "sigbus.h" void Base::markerAnalysisHistogram(Marker* pp, double** x, double** y, const BBox& bb, int num) { // does not extend across mosaic boundries // uses currentContext FitsImage* ptr = isInCFits(pp->getCenter(),Coord::REF,NULL); if (!ptr) ptr = currentContext->cfits; int srcw = ptr->width(); FitsBound* params = ptr->getDataParams(currentContext->secMode()); double min =DBL_MAX; double max =-DBL_MAX; // take the bbox and extend to lower/upper pixel boundaries Vector ll = (bb.ll*ptr->refToData).floor(); Vector ur = (bb.ur*ptr->refToData).ceil(); int msize = int(ur[1]-ll[1])*int(ur[0]-ll[0]); double* marr = new double[msize]; int* mask = new int[msize]; memset(marr,0,msize*sizeof(double)); memset(mask,0,msize*sizeof(int)); // main loop SETSIGBUS int cnt =0; for (int jj=ll[1]; jj=params->xmin && iixmax && jj>=params->ymin && jjymax) { // shift to center of pixel in DATA Vector rr = Vector(ii,jj)+Vector(.5,.5); Vector ss = rr*ptr->dataToRef; if (pp->isIn(ss,Coord::REF)) { double val =ptr->getValueDouble(long(jj)*srcw+long(ii)); // check for nan if (isfinite(val)) { marr[cnt] =val; mask[cnt] =1; if (valmax) max =val; } } } } } CLEARSIGBUS // sanity check if (num<1) num = 1; // we need one extra max,0 value at the end int nn = num+1; *x = (double*)malloc(nn*sizeof(double)); *y = (double*)malloc(nn*sizeof(double)); memset(*x,0,nn*sizeof(double)); memset(*y,0,nn*sizeof(double)); double diff = max-min; int last = num-1; double* xx = *x; double* yy = *y; if (diff>0) { for (int ii=0; ii=min && val<=max) yy[(int)((val-min)/diff*last+.5)]++; } } } else { for (int ii=0; iigetCenter(),Coord::REF,NULL); if (!ptr) ptr = currentContext->cfits; FitsBound* params = ptr->getDataParams(currentContext->secMode()); Vector vv = p2-p1; int num = vv.length() +1; Vector s = vv.normalize(); int cnt[num]; *x = (double*)malloc(num*sizeof(double)); *y = (double*)malloc(num*sizeof(double)); *xc = (double*)malloc(num*sizeof(double)); *yc = (double*)malloc(num*sizeof(double)); // main loop SETSIGBUS for (long ii=0; iimapFromRef(t, sys, sky); (*xc)[ii] = tv[0]; (*yc)[ii] = tv[1]; Vector z = t * ptr->refToData; if (z[0]>=params->xmin && z[0]xmax && z[1]>=params->ymin && z[1]ymax) { // check for nan double v = ptr->getValueDouble(z); if (isfinite(v)) { (*y)[ii] = v; cnt[ii] = 1; } Vector ss = Vector(-s[1],s[0]); for (long jj=1; jjrefToData; if (zz[0]>=params->xmin && zz[0]xmax && zz[1]>=params->ymin && zz[1]ymax) { double vvalue = ptr->getValueDouble(zz); // check for nan if (isfinite(vvalue)) { (*y)[ii] += vvalue; cnt[ii]++; } } } } } // average if needed if (method == Marker::AVERAGE) for (long ii=0; iigetCenter(),Coord::REF,NULL); if (!ptr) ptr = currentContext->fits; // if more than 3 axes, walk it forward int num = currentContext->calcSlice(); for (int ii=1; iinextSlice(); FitsBound* params = ptr->getDataParams(currentContext->secMode()); FitsZBound* zparams=currentContext->getDataParams(currentContext->secMode()); int srcw = ptr->width(); int srcd = zparams->zmax - zparams->zmin; // slice jump vector FitsImage* sjv[srcd]; FitsImage* sptr = ptr; for (int ii=0; iizmin; ii++) sptr = sptr->nextSlice(); for (int ii=0; iinextSlice(); } // init *x = (double*)malloc(srcd*sizeof(double)); *y = (double*)malloc(srcd*sizeof(double)); memset(*x,0,srcd*sizeof(double)); memset(*y,0,srcd*sizeof(double)); int* cnt = new int[srcd]; memset(cnt,0,srcd*sizeof(int)); // take the bbox and extend to lower/upper pixel boundaries Vector ll = (bb.ll*ptr->refToData).floor(); Vector ur = (bb.ur*ptr->refToData).ceil(); // mask int ss = (ur[0]-ll[0])*(ur[1]-ll[1]); bool* msk = new bool[ss]; long* idx = new long[ss]; memset(msk,0,ss*sizeof(bool)); memset(idx,0,ss*sizeof(long)); bool* mptr=msk; long* iptr=idx; if (!pp->isFixed()) { Matrix bck = pp->bckMatrix(); for (int jj=ll[1]; jj=params->xmin && iixmax && jj>=params->ymin && jjymax) { // shift to center of pixel in DATA Vector rr = Vector(ii,jj)+Vector(.5,.5); if (pp->isIn(rr*ptr->dataToRef,bck)) { *mptr=1; *iptr=long(jj)*srcw+long(ii); } } } } } else { for (int jj=ll[1]; jj=params->xmin && iixmax && jj>=params->ymin && jjymax) { // shift to center of pixel in DATA Vector rr = Vector(ii,jj)+Vector(.5,.5); if (pp->isIn(rr*ptr->dataToRef,Coord::REF)) { *mptr=1; *iptr=long(jj)*srcw+long(ii); } } } } } // main loop SETSIGBUS for (int kk=0; kkmapFromRef3axis(kk+.5+zparams->zmin, sys, 2); bool* mptr=msk; long* iptr=idx; for (int ll=0; llgetValueDouble(*iptr); // check for nan if (isfinite(val)) { (*y)[kk] += val; cnt[kk]++; } } } } CLEARSIGBUS // average if needed if (method == Marker::AVERAGE) for (long kk=0; kkgetCenter(),Coord::REF,NULL); if (!ptr) ptr = currentContext->cfits; int srcw = ptr->width(); FitsBound* params = ptr->getDataParams(currentContext->secMode()); double sum[num]; memset(sum,0,num*sizeof(double)); int cnt[num]; memset(cnt,0,num*sizeof(int)); for (int kk=0; kkrefToData).floor(); Vector ur = (bb[kk+1].ur*ptr->refToData).ceil(); // main loop SETSIGBUS for (int jj=ll[1]; jj=params->xmin && iixmax && jj>=params->ymin && jjymax) { // shift to center of pixel in DATA Vector rr = Vector(ii,jj)+Vector(.5,.5); Vector ss = rr*ptr->dataToRef; if (pp->isIn(ss,Coord::REF,kk+1) && !pp->isIn(ss,Coord::REF,kk)) { double val =ptr->getValueDouble(long(jj)*srcw+long(ii)); // check for nan if (isfinite(val)) { sum[kk] += val; cnt[kk]++; } } } } } CLEARSIGBUS } *x = (double*)malloc(num*sizeof(double)); *y = (double*)malloc(num*sizeof(double)); *e = (double*)malloc(num*sizeof(double)); int unit; Vector cdelt; double xaxis =1; if (ptr->hasWCS(sys)) if (ptr->hasWCSCel(sys)) { unit =1; cdelt= ptr->getWCScdelt(sys); xaxis = fabs(cdelt[0]*60*60); } else { unit =2; cdelt= ptr->getWCScdelt(sys); xaxis = fabs(cdelt[0]); } else { unit =0; xaxis =1; } for (int kk=0; kkgetCenter(),Coord::REF,NULL); if (!ptr) ptr = currentContext->cfits; int srcw = ptr->width(); FitsBound* params = ptr->getDataParams(currentContext->secMode()); double sum[num][aa]; memset(sum,0,num*aa*sizeof(double)); int cnt[num][aa]; memset(cnt,0,num*aa*sizeof(int)); for (int kk=0; kkrefToData).floor(); Vector ur = (bb[kk+1].ur*ptr->refToData).ceil(); // main loop SETSIGBUS for (int qq=0; qq=params->xmin && iixmax && jj>=params->ymin && jjymax) { // shift to center of pixel in DATA Vector rr = Vector(ii,jj)+Vector(.5,.5); Vector ss = rr*ptr->dataToRef; if (pp->isIn(ss,Coord::REF,kk+1,qq) && !pp->isIn(ss,Coord::REF,kk,qq)) { double val =ptr->getValueDouble(long(jj)*srcw+long(ii)); // check for nan if (isfinite(val)) { sum[kk][qq] += val; cnt[kk][qq]++; } } } } } } CLEARSIGBUS } *x = (double*)malloc(num*aa*sizeof(double)); *y = (double*)malloc(num*aa*sizeof(double)); *e = (double*)malloc(num*aa*sizeof(double)); int unit; Vector cdelt; double xaxis =1; if (ptr->hasWCS(sys)) if (ptr->hasWCSCel(sys)) { unit =1; cdelt= ptr->getWCScdelt(sys); xaxis = fabs(cdelt[0]*60*60); } else { unit =2; cdelt= ptr->getWCScdelt(sys); xaxis = fabs(cdelt[0]); } else { unit =0; xaxis =1; } for (int qq=0; qqgetCenter(),Coord::REF,NULL); if (!ptr) ptr = currentContext->cfits; int srcw = ptr->width(); FitsBound* params = ptr->getDataParams(currentContext->secMode()); double sum =0; double sum2 =0; int cnt =0; double min =DBL_MAX; double max =-DBL_MAX; // take the bbox and extend to lower/upper pixel boundaries Vector ll = (bb.ll*ptr->refToData).floor(); Vector ur = (bb.ur*ptr->refToData).ceil(); int msize = int(ur[1]-ll[1])*int(ur[0]-ll[0]); double* marr = new double[msize]; memset(marr,0,msize*sizeof(double)); // main loop SETSIGBUS for (int jj=ll[1]; jj=params->xmin && iixmax && jj>=params->ymin && jjymax) { // shift to center of pixel in DATA Vector rr = Vector(ii,jj)+Vector(.5,.5); Vector ss = rr*ptr->dataToRef; if (pp->isIn(ss,Coord::REF)) { double val =ptr->getValueDouble(long(jj)*srcw+long(ii)); // check for nan if (isfinite(val)) { sum += val; sum2 += val*val; if (cntmax) max =val; cnt++; } } } } } CLEARSIGBUS qsort((void*)marr,cnt,sizeof(double),dCompare); double median = marr[int(cnt/2.)]; if (marr) delete [] marr; int unit = markerAnalysisStats1(pp,ptr,str,sys,sky); markerAnalysisStats2(ptr,str,sys,0,cnt,sum,unit); markerAnalysisStats3(str); markerAnalysisStats4(str,0,cnt,sum,sum2,median,min,max); } // for annulus regions void Base::markerAnalysisStats(Marker* pp, ostream& str, int num, BBox* bb, Coord::CoordSystem sys, Coord::SkyFrame sky) { // does not extend across mosaic boundries // uses currentContext FitsImage* ptr = isInCFits(pp->getCenter(),Coord::REF,NULL); if (!ptr) ptr = currentContext->cfits; int srcw = ptr->width(); FitsBound* params = ptr->getDataParams(currentContext->secMode()); double sum[num]; memset(sum,0,num*sizeof(double)); double sum2[num]; memset(sum2,0,num*sizeof(double)); int cnt[num]; memset(cnt,0,num*sizeof(int)); double min[num]; double max[num]; for (int ii=0; iirefToData).floor(); Vector ur = (bb[kk+1].ur*ptr->refToData).ceil(); int msize = int(ur[1]-ll[1])*int(ur[0]-ll[0]); double* marr = new double[msize]; memset(marr,0,msize*sizeof(double)); // main loop SETSIGBUS for (int jj=ll[1]; jj=params->xmin && iixmax && jj>=params->ymin && jjymax) { // shift to center of pixel in DATA Vector rr = Vector(ii,jj)+Vector(.5,.5); Vector ss = rr*ptr->dataToRef; if (pp->isIn(ss,Coord::REF,kk+1) && !pp->isIn(ss,Coord::REF,kk)) { double val =ptr->getValueDouble(long(jj)*srcw+long(ii)); // check for nan if (isfinite(val)) { sum[kk] += val; sum2[kk] += val*val; if (cnt[kk]max[kk]) max[kk] =val; cnt[kk]++; } } } } } CLEARSIGBUS qsort((void*)marr,cnt[kk],sizeof(double),dCompare); median[kk] = marr[int(cnt[kk]/2.)]; if (marr) delete [] marr; } int unit = markerAnalysisStats1(pp,ptr,str,sys,sky); for (int kk=0; kkgetCenter(),Coord::REF,NULL); if (!ptr) ptr = currentContext->cfits; int srcw = ptr->width(); FitsBound* params = ptr->getDataParams(currentContext->secMode()); double sum[num][aa]; memset(sum,0,num*aa*sizeof(double)); double sum2[num][aa]; memset(sum2,0,num*aa*sizeof(double)); int cnt[num][aa]; memset(cnt,0,num*aa*sizeof(int)); double min[num][aa]; double max[num][aa]; for (int ii=0; iirefToData).floor(); Vector ur = (bb[kk+1].ur*ptr->refToData).ceil(); int msize = int(ur[1]-ll[1])*int(ur[0]-ll[0]); double* marr = new double[msize]; // main loop SETSIGBUS for (int qq=0; qq=params->xmin && iixmax && jj>=params->ymin && jjymax) { // shift to center of pixel in DATA Vector rr = Vector(ii,jj)+Vector(.5,.5); Vector ss = rr*ptr->dataToRef; if (pp->isIn(ss,Coord::REF,kk+1,qq) && !pp->isIn(ss,Coord::REF,kk,qq)) { double val =ptr->getValueDouble(long(jj)*srcw+long(ii)); // check for nan if (isfinite(val)) { sum[kk][qq] += val; sum2[kk][qq] += val*val; if (cnt[kk][qq]max[kk][qq]) max[kk][qq] = val; cnt[kk][qq]++; } } } } } qsort((void*)marr,cnt[kk][qq],sizeof(double),dCompare); median[kk][qq] = marr[int(cnt[kk][qq]/2.)]; } CLEARSIGBUS if (marr) delete [] marr; } int unit = markerAnalysisStats1(pp,ptr,str,sys,sky); for (int kk=0; kkgetWCScdelt(sys); if (ptr->hasWCSCel(sys)) { str << "1 pixel = "<< fabs(cdelt[0]*60*60) << " arcsec"; str << endl << endl; str << "reg\t" << "sum\t" << "error\t\t" << "area\t\t" << "surf_bri\t\t" << "surf_err" << endl << "\t" << "\t" << "\t\t" << "(arcsec**2)\t\t" << "(sum/arcsec**2)\t" << "(sum/arcsec**2)" << endl << "---\t" << "---\t" << "-----\t\t" << "-----------\t\t" << "---------------\t" << "---------------" << endl; return 1; } else { str << "1 pixel = "<< fabs(cdelt[0]); str << endl << endl; str << "reg\t" << "sum\t" << "error\t\t" << "area\t\t" << "surf_bri\t\t" << "surf_err" << endl << "\t" << "\t" << "\t\t" << "(pix**2)\t\t" << "(sum/pix**2)\t\t" << "(sum/pix**2)" << endl << "---\t" << "---\t" << "-----\t\t" << "--------\t\t" << "------------\t\t" << "------------" << endl; return 2; } } break; } } void Base::markerAnalysisStats2(FitsImage* ptr, ostream& str, Coord::CoordSystem sys, int kk, int cnt, double sum, int unit) { double area =0; switch (unit) { case 0: // pixels area = cnt; break; case 1: { // Cel WCS Vector cdelt= ptr->getWCScdelt(sys); area = fabs(cdelt[0]*cdelt[1]*60*60*60*60*cnt); } break; case 2: { // Linear WCS Vector cdelt= ptr->getWCScdelt(sys); area = fabs(cdelt[0]*cdelt[1]*cnt); } break; } double err = sqrt(fabs(sum)); double bri = sum/area; double brierr = err/area; str << kk+1 << '\t' << sum << '\t' << err << "\t\t" << area << "\t\t" << bri << "\t\t" << brierr << endl; } void Base::markerAnalysisStats3(ostream& str) { str << endl << "reg\t" << "sum\t" << "npix\t" << "mean\t" << "median\t" << "min\t" << "max\t" << "var\t" << "stddev\t" << "rms\t" << endl << "---\t" << "---\t" << "----\t" << "----\t" << "------\t" << "---\t" << "---\t" << "---\t" << "------\t" << "---\t" << endl; } void Base::markerAnalysisStats4(ostream& str, int kk, int cnt, double sum, double sum2, double median, double min, double max) { double mean =0; double std =0; double var =0; double rms =0; if (cnt) { mean = sum/cnt; var = fabs(sum2/cnt - (sum*sum)/(cnt*cnt)); std = sqrt(var); rms = sqrt(sum2/cnt); } str << kk+1 << '\t' << sum << '\t' << cnt << '\t' << mean << '\t' << median << '\t' << min << '\t' << max << '\t' << var << '\t' << std << '\t' << rms << '\t' << endl; } void Base::bltCut(char* xname, char* yname, Coord::Orientation axis, const Vector& rr) { int size; if (axis == Coord::XX) size = options->width; else size = options->height; long length = (size+1) * 2; double* xx = (double*)malloc(sizeof(double)*length); double* yy = (double*)malloc(sizeof(double)*length); // check for data or undefined low()/high() if (!currentContext->cfits || !isfinite(currentContext->low())) { for (int ii=0; ii<=size; ii++) { xx[ii*2] = ii; xx[ii*2+1] = ii; yy[ii*2] = 0; yy[ii*2+1] = 0; } } else bltCutFits(xx, yy, size, axis, rr); Blt_Vector* xv; if (Blt_GetVector(interp, xname, &xv) != TCL_OK) goto error; if (Blt_ResetVector(xv, xx, length, length*sizeof(double), TCL_DYNAMIC) != TCL_OK) goto error; Blt_Vector* yv; if (Blt_GetVector(interp, yname, &yv) != TCL_OK) goto error; if (Blt_ResetVector(yv, yy, length, length*sizeof(double), TCL_DYNAMIC) != TCL_OK) goto error; return; error: result = TCL_ERROR; return; } void Base::bltCutFits(double* xx, double* yy, int size, Coord::Orientation axis, const Vector& r) { // Widget Vector rr = r * refToWidget; // basics FitsImage* sptr = currentContext->cfits; int mosaic = isMosaic(); // variable FitsBound* params = sptr->getDataParams(currentContext->secMode()); double prev = currentContext->low(); // main loop SETSIGBUS for (int ii=0; ii<=size; ii++) { double vv = currentContext->low(); if (mosaic) { sptr = currentContext->cfits; params = sptr->getDataParams(currentContext->secMode()); } do { Vector img; if (axis == Coord::XX) img = Vector(1+ii,rr[1]) * sptr->widgetToData; else img = Vector(rr[0],1+ii) * sptr->widgetToData; if (img[0]>=params->xmin && img[0]xmax && img[1]>=params->ymin && img[1]ymax) { double value = sptr->getValueDouble(img); if (isfinite(value)) vv = value; break; } else { if (mosaic) { sptr = sptr->nextMosaic(); if (sptr) params = sptr->getDataParams(currentContext->secMode()); } } } while (mosaic && sptr); xx[2*ii] = ii; xx[2*ii +1] = ii; yy[2*ii] = prev; yy[2*ii +1] = vv; prev = vv; } CLEARSIGBUS } saods9/tksao/frame/frcommand.C000644 000765 000000 00000024232 12766067715 016675 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "fdstream.hpp" #include #include "framebase.h" #include "fitsimage.h" #include "context.h" #include "marker.h" #include "outfile.h" #include "outchannel.h" #include "outsocket.h" void FrameBase::binToFitCmd() { if (currentContext->fits) { double bf = 1/calcZoom(currentContext->fits->getHistDim(), Vector(options->width,options->height)); // round up to next power of 2 if (bf < 1) currentContext->setBinToFactor(Vector(1,1)); else { int p=1; while (psetBinToFactor(Vector(p,p)); } } Matrix mm = currentContext->binCursor(); updateBin(mm); } void FrameBase::blockToFitCmd() { if (currentContext->fits) { double bf = 1/calcZoom(currentContext->fits->osize(), Vector(options->width,options->height)); // round up to next power of 2 Vector vv; if (bf < 1) vv = currentContext->setBlockToFactor(Vector(1,1)); else { int p=1; while (psetBlockToFactor(Vector(p,p)); } currentContext->block(); currentContext->analysis(); updateBlock(vv); } } void FrameBase::get3dBorderCmd() { Tcl_AppendResult(interp, "1", NULL); } void FrameBase::get3dBorderColorCmd() { Tcl_AppendResult(interp, "blue", NULL); } void FrameBase::get3dCompassCmd() { Tcl_AppendResult(interp, "1", NULL); } void FrameBase::get3dCompassColorCmd() { Tcl_AppendResult(interp, "green", NULL); } void FrameBase::get3dHighliteCmd() { Tcl_AppendResult(interp, "1", NULL); } void FrameBase::get3dHighliteColorCmd() { Tcl_AppendResult(interp, "cyan", NULL); } void FrameBase::get3dRenderMethodCmd() { Tcl_AppendResult(interp, "mip", NULL); } void FrameBase::get3dScaleCmd() { Tcl_AppendResult(interp, "1", NULL); } void FrameBase::get3dViewCmd() { Tcl_AppendResult(interp, "0 0", NULL); } void FrameBase::get3dViewPointCmd() { Tcl_AppendResult(interp, "0 0 0 0 0", NULL); } void FrameBase::get3dRenderBackgroundCmd() { Tcl_AppendResult(interp, "none", NULL); } void FrameBase::getCursorCmd(Coord::InternalSystem sys) { ostringstream str; str << mapFromRef(cursor, sys) << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void FrameBase::getCursorCmd(Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { if (currentContext->cfits) printFromRef(currentContext->cfits, cursor, sys, sky, format); else Tcl_AppendResult(interp, "0 0", NULL); } void FrameBase::gridCmd(Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, Grid::GridType type, const char* ops, const char* vars) { if (grid) delete grid; grid = new Grid2d(this, sys, sky, format, type, ops, vars); update(PIXMAP); } void FrameBase::iisCursorModeCmd(int state) { if (state) { // set iisLastCursor if first time thru if (iisLastCursor[0] == 0 && iisLastCursor[1] == 0) iisLastCursor = Vector(options->width,options->height)/2; // and move to last cursor position Vector rr = iisLastCursor * widgetToWindow; warpTo(rr); } } void FrameBase::iisGetCursorCmd() { ostringstream str; str << iisLastCursor << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void FrameBase::iisGetFileNameCmd() { FitsImage* ptr = currentContext->fits; while (ptr && ptr->nextMosaic()) ptr = ptr->nextMosaic(); if (ptr) Tcl_AppendResult(interp, ptr->iisGetFileName(), NULL); } void FrameBase::iisGetFileNameCmd(int which) { FitsImage* ptr = currentContext->fits; for (int i=0; i<(which-1); i++) { if (ptr) ptr = ptr->nextMosaic(); } if (ptr) Tcl_AppendResult(interp, ptr->iisGetFileName(), NULL); } void FrameBase::iisGetFileNameCmd(const Vector& vv) { if (FitsImage* ptr = isInCFits(vv, Coord::CANVAS, NULL)) Tcl_AppendResult(interp, ptr->iisGetFileName(), NULL); } void FrameBase::iisMessageCmd(const char* ptr) { if (!currentContext->cfits) return; // do we have something? if (!(ptr && *ptr)) return; // filename // note: the file name is the second value passed char fn[PATH_MAX]; string x(ptr); istringstream str(x); str >> fn >> fn; currentContext->cfits->setFileName(fn); // object name // first go to end char* sptr = (char*)ptr; while (*sptr) sptr++; // now work backwards to last '-' while (sptr != ptr) { if (*sptr == '-') break; sptr--; } // is it good? if (sptr != ptr) { // go forward 2 sptr += 2; currentContext->cfits->setObjectKeyword(sptr); } } void FrameBase::iisSetCursorCmd(const Vector& v, Coord::InternalSystem sys) { // assume canvas if (!currentContext->cfits) return; iisLastCursor = v * canvasToWidget; Vector rr = iisLastCursor * widgetToWindow; warpTo(rr); } void FrameBase::iisSetCursorCmd(const Vector& v, Coord::CoordSystem sys) { if (!currentContext->cfits) return; iisLastCursor = currentContext->cfits->mapToRef(v,sys) * refToWidget; Vector rr = iisLastCursor * widgetToWindow; warpTo(rr); } void FrameBase::iisSetFileNameCmd(const char* fn) { FitsImage* ptr = currentContext->fits; while (ptr && ptr->nextMosaic()) ptr = ptr->nextMosaic(); if (ptr) ptr->iisSetFileName(fn); } void FrameBase::iisSetFileNameCmd(const char* fn, int which) { FitsImage* ptr = currentContext->fits; for (int i=0; i<(which-1); i++) { if (ptr) ptr = ptr->nextMosaic(); } if (ptr) ptr->iisSetFileName(fn); } void FrameBase::panCmd(const Vector& v1, const Vector& v2) { Vector start = mapToRef(v1,Coord::CANVAS); Vector stop = mapToRef(v2,Coord::CANVAS); cursor -= stop - start; setBinCursor(); update(MATRIX); } void FrameBase::panCmd(const Vector& vv) { Vector uu = mapFromRef(cursor,Coord::CANVAS); uu += vv; cursor = mapToRef(uu,Coord::CANVAS); setBinCursor(); update(MATRIX); } void FrameBase::panCmd(const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky) { if (!currentContext->cfits) return; Vector uu = currentContext->cfits->mapFromRef(cursor, sys, sky); uu += vv; cursor = currentContext->cfits->mapToRef(uu, sys, sky); setBinCursor(); update(MATRIX); } void FrameBase::panToCmd(const Vector& vv) { cursor = mapToRef(vv,Coord::CANVAS); setBinCursor(); update(MATRIX); } void FrameBase::panToCmd(const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky) { if (!currentContext->cfits) return; cursor = currentContext->cfits->mapToRef(vv, sys, sky); setBinCursor(); update(MATRIX); } void FrameBase::panBBoxCmd(const Vector& vv) { if (!currentContext->cfits) return; // we want to round to nearest pixel center Vector rr = vv * currentContext->cfits->pannerToData; cursor = (rr.floor() + Vector(.5,.5)) * currentContext->cfits->dataToRef; setBinCursor(); update(MATRIX); } void FrameBase::panEndCmd(const Vector& vv) { // vv and panCursor are in Coord::CANVAS coords // delete tmp pixmap if (panPM) Tk_FreePixmap(display, panPM); panPM = 0; // use matrix, not map() for 3d? Vector start = panCursor * canvasToRef; Vector stop = vv * canvasToRef; cursor -= stop - start; setBinCursor(); update(MATRIX); } void FrameBase::rotateBeginCmd() { // save the current rotation rotateRotation = rotation; // Create src XImage if (!(rotateSrcXM = XGetImage(display, pixmap, 0, 0, options->width, options->height, AllPlanes, ZPixmap))) { internalError("Unable to Create Rotate XImage"); return; } // Create dest XImage if (!(rotateDestXM = XGetImage(display, pixmap, 0, 0, options->width, options->height, AllPlanes, ZPixmap))) { internalError("Unable to Create Rotate XImage"); return; } // Create dest Pixmap rotatePM = Tk_GetPixmap(display, Tk_WindowId(tkwin), options->width, options->height, depth); if (!rotatePM) { internalError("Unable to Create Rotate Motion Pixmap"); return; } } void FrameBase::rotateMotionCmd(double angle) { rotation = rotateRotation + angle; rotateMotion(); } void FrameBase::rotateEndCmd() { // Clean up if (rotateSrcXM) XDestroyImage(rotateSrcXM); if (rotateDestXM) XDestroyImage(rotateDestXM); if (rotatePM) Tk_FreePixmap(display, rotatePM); update(MATRIX); } void FrameBase::saveFitsResampleFileCmd(const char* fn) { OutFitsFile str(fn); saveFitsResample(str); } void FrameBase::saveFitsResampleChannelCmd(const char* ch) { OutFitsChannel str(interp, ch); saveFitsResample(str); } void FrameBase::saveFitsResampleSocketCmd(int ss) { OutFitsSocket str(ss); saveFitsResample(str); } void FrameBase::zoomAboutCmd(const Vector& zz, const Vector& vv) { Vector az = ((Vector&)zz).abs(); zoom_[0] *= az[0]; zoom_[1] *= az[1]; cursor = mapToRef(vv,Coord::CANVAS); setBinCursor(); update(MATRIX); } void FrameBase::zoomAboutCmd(const Vector& z, const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky) { Vector az = ((Vector&)z).abs(); zoom_[0] *= az[0]; zoom_[1] *= az[1]; if (currentContext->cfits) { cursor = currentContext->cfits->mapToRef(vv, sys, sky); setBinCursor(); } update(MATRIX); } void FrameBase::zoomToAboutCmd(const Vector& z, const Vector& vv) { zoom_ = ((Vector&)z).abs(); cursor = mapToRef(vv,Coord::CANVAS); setBinCursor(); update(MATRIX); } void FrameBase::zoomToAboutCmd(const Vector& z, const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky) { zoom_ = ((Vector&)z).abs(); if (currentContext->cfits) { cursor = currentContext->cfits->mapToRef(vv, sys, sky); setBinCursor(); } update(MATRIX); } void FrameBase::zoomToFitCmd(double ss) { // will center image on center of pixel // with even number pixels, it will be shifted if (keyContext->fits) { centerImage(); Vector tt = imageSize(keyContext->secMode()); // adjust image size to be odd (see above) double dd; // dummy if (!modf(tt[0]/2,&dd)) tt[0] +=1; if (!modf(tt[1]/2,&dd)) tt[1] +=1; double zz = calcZoom(tt,Vector(options->width,options->height)) * ss; zoom_ = Vector(zz,zz); update(MATRIX); } } saods9/tksao/frame/frload.C000644 000765 000000 00000053731 12705446250 016170 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "context.h" #include "fitsimage.h" #include "alloc.h" #include "allocgz.h" #include "channel.h" #include "mmap.h" #include "mmapincr.h" #include "share.h" #include "sshare.h" #include "socket.h" #include "socketgz.h" #include "var.h" // *** Fits *** void Base::loadFitsAllocCmd(const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageFitsAlloc(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->load(ALLOC, fn, img, ll),ll); } void Base::loadFitsAllocGZCmd(const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageFitsAllocGZ(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->load(ALLOCGZ, fn, img, ll),ll); } void Base::loadFitsChannelCmd(const char* ch, const char* fn,LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageFitsChannel(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->load(CHANNEL, fn, img, ll),ll); } void Base::loadFitsMMapCmd(const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageFitsMMap(currentContext, interp, fn, 1); loadDone(currentContext->load(MMAP, fn, img, ll),ll); } void Base::loadFitsSMMapCmd(const char* hdr, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageFitsSMMap(currentContext, interp, hdr, fn, 1); loadDone(currentContext->load(SMMAP, fn, img, ll),ll); } void Base::loadFitsMMapIncrCmd(const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageFitsMMapIncr(currentContext, interp, fn, 1); loadDone(currentContext->load(MMAPINCR, fn, img, ll),ll); } void Base::loadFitsShareCmd(ShmType stype, int id, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageFitsShare(currentContext, interp, stype, id, fn, 1); loadDone(currentContext->load(SHARE, fn, img, ll),ll); } void Base::loadFitsSShareCmd(ShmType stype, int hdr, int id, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageFitsSShare(currentContext, interp, stype, hdr, id, fn, 1); loadDone(currentContext->load(SSHARE, fn, img, ll),ll); } void Base::loadFitsSocketCmd(int s, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageFitsSocket(currentContext, interp, s, fn, FitsFile::FLUSH, 1); loadDone(currentContext->load(SOCKET, fn, img, ll),ll); } void Base::loadFitsSocketGZCmd(int s, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageFitsSocketGZ(currentContext, interp, s, fn, FitsFile::FLUSH, 1); loadDone(currentContext->load(SOCKETGZ, fn, img, ll),ll); } void Base::loadFitsVarCmd(const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageFitsVar(currentContext, interp, ch, fn, 1); loadDone(currentContext->load(VAR, fn, img, ll),ll); } // *** Array *** void Base::loadArrAllocCmd(const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageArrAlloc(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->load(ALLOC, fn, img, ll),ll); } void Base::loadArrAllocGZCmd(const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageArrAllocGZ(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->load(ALLOCGZ, fn, img, ll),ll); } void Base::loadArrChannelCmd(const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageArrChannel(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->load(CHANNEL, fn, img, ll),ll); } void Base::loadArrMMapCmd(const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageArrMMap(currentContext, interp, fn, 1); loadDone(currentContext->load(MMAP, fn, img, ll),ll); } void Base::loadArrMMapIncrCmd(const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageArrMMapIncr(currentContext, interp, fn, 1); loadDone(currentContext->load(MMAPINCR, fn, img, ll),ll); } void Base::loadArrShareCmd(ShmType stype, int id, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageArrShare(currentContext, interp, stype, id, fn, 1); loadDone(currentContext->load(SHARE, fn, img, ll),ll); } void Base::loadArrSocketCmd(int s, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageArrSocket(currentContext, interp, s, fn, FitsFile::FLUSH, 1); loadDone(currentContext->load(SOCKET, fn, img, ll),ll); } void Base::loadArrSocketGZCmd(int s, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageArrSocketGZ(currentContext, interp, s, fn, FitsFile::FLUSH, 1); loadDone(currentContext->load(SOCKETGZ, fn, img, ll),ll); } void Base::loadArrVarCmd(const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageArrVar(currentContext, interp, ch, fn, 1); loadDone(currentContext->load(VAR, fn, img, ll),ll); } // *** ENVI *** void Base::loadENVISMMapCmd(const char* hdr, const char* fn) { unloadFits(); FitsImage* img = new FitsImageENVISMMap(currentContext, interp, hdr, fn, 1); loadDone(currentContext->load(SMMAP, fn, img, IMG), IMG); } // *** NRRD *** void Base::loadNRRDAllocCmd(const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageNRRDAlloc(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->load(ALLOC, fn, img, ll),ll); } void Base::loadNRRDChannelCmd(const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageNRRDChannel(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->load(CHANNEL, fn, img, ll),ll); } void Base::loadNRRDMMapCmd(const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageNRRDMMap(currentContext, interp, fn, 1); loadDone(currentContext->load(MMAP, fn, img, ll),ll); } void Base::loadNRRDShareCmd(ShmType stype, int id, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageNRRDShare(currentContext, interp, stype, id, fn, 1); loadDone(currentContext->load(SHARE, fn, img, ll),ll); } void Base::loadNRRDSocketCmd(int s, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageNRRDSocket(currentContext, interp, s, fn, FitsFile::FLUSH, 1); loadDone(currentContext->load(SOCKET, fn, img, ll),ll); } void Base::loadNRRDVarCmd(const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageNRRDVar(currentContext, interp, ch, fn, 1); loadDone(currentContext->load(VAR, fn, img, ll),ll); } // *** Photo *** void Base::loadPhotoCmd(const char* ph, const char* fn) { unloadFits(); FitsImage* img = new FitsImagePhoto(currentContext, interp, ph, fn, 1); loadDone(currentContext->load(PHOTO, fn, img, IMG), IMG); } void Base::loadSlicePhotoCmd(const char* ph, const char* fn) { FitsImage* img = new FitsImagePhoto(currentContext, interp, ph, fn, 1); loadDone(currentContext->loadSlice(PHOTO, fn, img), IMG); } // *** Data Cube *** void Base::loadExtCubeAllocCmd(const char* ch, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsAlloc(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadExtCube(ALLOC, fn, img), IMG); } void Base::loadExtCubeAllocGZCmd(const char* ch, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsAllocGZ(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadExtCube(ALLOCGZ, fn, img), IMG); } void Base::loadExtCubeChannelCmd(const char* ch, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsChannel(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadExtCube(CHANNEL, fn, img), IMG); } void Base::loadExtCubeMMapCmd(const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsMMap(currentContext, interp, fn, 1); loadDone(currentContext->loadExtCube(MMAP, fn, img), IMG); } void Base::loadExtCubeMMapIncrCmd(const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsMMapIncr(currentContext, interp, fn, 1); loadDone(currentContext->loadExtCube(MMAPINCR, fn, img), IMG); } void Base::loadExtCubeShareCmd(ShmType stype, int id, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsShare(currentContext, interp, stype, id, fn, 1); loadDone(currentContext->loadExtCube(SHARE, fn, img), IMG); } void Base::loadExtCubeSocketCmd(int s, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsSocket(currentContext, interp, s, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadExtCube(SOCKET, fn, img), IMG); } void Base::loadExtCubeSocketGZCmd(int s, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsSocketGZ(currentContext, interp, s, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadExtCube(SOCKETGZ, fn, img), IMG); } void Base::loadExtCubeVarCmd(const char* ch, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsVar(currentContext, interp, ch, fn, 1); loadDone(currentContext->loadExtCube(VAR, fn, img), IMG); } // *** Slice *** void Base::loadSliceAllocCmd(const char* ch, const char* fn) { FitsImage* img = new FitsImageFitsAlloc(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadSlice(ALLOC, fn, img), IMG); } void Base::loadSliceAllocGZCmd(const char* ch, const char* fn) { FitsImage* img = new FitsImageFitsAllocGZ(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadSlice(ALLOCGZ, fn, img), IMG); } void Base::loadSliceChannelCmd(const char* ch, const char* fn) { FitsImage* img = new FitsImageFitsChannel(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadSlice(CHANNEL, fn, img), IMG); } void Base::loadSliceMMapCmd(const char* fn) { FitsImage* img = new FitsImageFitsMMap(currentContext, interp, fn, 1); loadDone(currentContext->loadSlice(MMAP, fn, img), IMG); } void Base::loadSliceSMMapCmd(const char* hdr, const char* fn) { FitsImage* img = new FitsImageFitsSMMap(currentContext, interp, hdr, fn, 1); loadDone(currentContext->loadSlice(MMAP, fn, img), IMG); } void Base::loadSliceMMapIncrCmd(const char* fn) { FitsImage* img = new FitsImageFitsMMapIncr(currentContext, interp, fn, 1); loadDone(currentContext->loadSlice(MMAPINCR, fn, img), IMG); } void Base::loadSliceShareCmd(ShmType stype, int id, const char* fn) { FitsImage* img = new FitsImageFitsShare(currentContext, interp, stype, id, fn, 1); loadDone(currentContext->loadSlice(SHARE, fn, img), IMG); } void Base::loadSliceSShareCmd(ShmType stype, int hdr, int id, const char* fn) { FitsImage* img = new FitsImageFitsSShare(currentContext, interp, stype, hdr, id, fn, 1); loadDone(currentContext->loadSlice(SSHARE, fn, img), IMG); } void Base::loadSliceSocketCmd(int s, const char* fn) { FitsImage* img = new FitsImageFitsSocket(currentContext, interp, s, fn, FitsFile::FLUSH, 1); loadDone(currentContext->loadSlice(SOCKET, fn, img), IMG); } void Base::loadSliceSocketGZCmd(int s, const char* fn) { FitsImage* img = new FitsImageFitsSocketGZ(currentContext, interp, s, fn, FitsFile::FLUSH, 1); loadDone(currentContext->loadSlice(SOCKETGZ, fn, img), IMG); } void Base::loadSliceVarCmd(const char* ch, const char* fn) { FitsImage* img = new FitsImageFitsVar(currentContext, interp, ch, fn, 1); loadDone(currentContext->loadSlice(VAR, fn, img), IMG); } // *** Mosaic Image *** void Base::loadMosaicImageAllocCmd(MosaicType type, Coord::CoordSystem sys, const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageMosaicAlloc(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaicImage(ALLOC, fn, img, ll,type,sys),ll); } void Base::loadMosaicImageAllocGZCmd(MosaicType type, Coord::CoordSystem sys, const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageMosaicAllocGZ(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaicImage(ALLOCGZ, fn, img, ll,type,sys),ll); } void Base::loadMosaicImageChannelCmd(MosaicType type, Coord::CoordSystem sys, const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageMosaicChannel(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaicImage(CHANNEL, fn, img, ll,type,sys),ll); } void Base::loadMosaicImageMMapCmd(MosaicType type, Coord::CoordSystem sys, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageMosaicMMap(currentContext, interp, fn, 1); loadDone(currentContext->loadMosaicImage(MMAP, fn, img, ll,type,sys),ll); } void Base::loadMosaicImageMMapIncrCmd(MosaicType type, Coord::CoordSystem sys, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageMosaicMMapIncr(currentContext, interp, fn, 1); loadDone(currentContext->loadMosaicImage(MMAPINCR, fn, img, ll,type,sys),ll); } void Base::loadMosaicImageShareCmd(MosaicType type, Coord::CoordSystem sys, ShmType stype, int id, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageMosaicShare(currentContext, interp, stype, id, fn, 1); loadDone(currentContext->loadMosaicImage(SHARE, fn, img, ll,type,sys),ll); } void Base::loadMosaicImageSocketCmd(MosaicType type, Coord::CoordSystem sys, int s, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageMosaicSocket(currentContext, interp, s, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaicImage(SOCKET, fn, img, ll,type,sys),ll); } void Base::loadMosaicImageSocketGZCmd(MosaicType type, Coord::CoordSystem sys, int s, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageMosaicSocketGZ(currentContext, interp, s, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaicImage(SOCKETGZ, fn, img, ll,type,sys),ll); } void Base::loadMosaicImageVarCmd(MosaicType type, Coord::CoordSystem sys, const char* ch, const char* fn, LayerType ll) { if (ll == IMG) unloadFits(); FitsImage* img = new FitsImageMosaicVar(currentContext, interp, ch, fn, 1); loadDone(currentContext->loadMosaicImage(VAR, fn, img, ll,type,sys),ll); } // *** Mosaic *** void Base::loadMosaicAllocCmd(MosaicType type, Coord::CoordSystem sys, const char* ch, const char* fn, LayerType ll) { FitsImage* img = new FitsImageFitsAlloc(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaic(ALLOC, fn, img, ll,type,sys),ll); } void Base::loadMosaicAllocGZCmd(MosaicType type, Coord::CoordSystem sys, const char* ch, const char* fn, LayerType ll) { FitsImage* img = new FitsImageFitsAllocGZ(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaic(ALLOCGZ, fn, img, ll,type,sys),ll); } void Base::loadMosaicChannelCmd(MosaicType type, Coord::CoordSystem sys, const char* ch, const char* fn, LayerType ll) { FitsImage* img = new FitsImageFitsChannel(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaic(CHANNEL, fn, img, ll,type,sys),ll); } void Base::loadMosaicMMapCmd(MosaicType type, Coord::CoordSystem sys, const char* fn, LayerType ll) { FitsImage* img = new FitsImageFitsMMap(currentContext, interp, fn, 1); loadDone(currentContext->loadMosaic(MMAP, fn, img, ll,type,sys),ll); } void Base::loadMosaicSMMapCmd(MosaicType type, Coord::CoordSystem sys, const char* hdr, const char* fn, LayerType ll) { FitsImage* img = new FitsImageFitsSMMap(currentContext, interp, hdr, fn, 1); loadDone(currentContext->loadMosaic(MMAP, fn, img, ll,type,sys),ll); } void Base::loadMosaicMMapIncrCmd(MosaicType type, Coord::CoordSystem sys, const char* fn, LayerType ll) { FitsImage* img = new FitsImageFitsMMapIncr(currentContext, interp, fn, 1); loadDone(currentContext->loadMosaic(MMAPINCR, fn, img, ll,type,sys),ll); } void Base::loadMosaicShareCmd(MosaicType type, Coord::CoordSystem sys, ShmType stype, int id, const char* fn, LayerType ll) { FitsImage* img = new FitsImageFitsShare(currentContext, interp, stype, id, fn, 1); loadDone(currentContext->loadMosaic(SHARE, fn, img, ll,type,sys),ll); } void Base::loadMosaicSShareCmd(MosaicType type, Coord::CoordSystem sys, ShmType stype, int hdr, int id, const char* fn, LayerType ll) { FitsImage* img = new FitsImageFitsSShare(currentContext, interp, stype, hdr, id, fn, 1); loadDone(currentContext->loadMosaic(SSHARE, fn, img, ll,type,sys),ll); } void Base::loadMosaicSocketCmd(MosaicType type, Coord::CoordSystem sys, int s, const char* fn, LayerType ll) { FitsImage* img = new FitsImageFitsSocket(currentContext, interp, s, fn, FitsFile::FLUSH, 1); loadDone(currentContext->loadMosaic(SOCKET, fn, img, ll,type,sys),ll); } void Base::loadMosaicSocketGZCmd(MosaicType type, Coord::CoordSystem sys, int s, const char* fn, LayerType ll) { FitsImage* img = new FitsImageFitsSocketGZ(currentContext, interp, s, fn, FitsFile::FLUSH, 1); loadDone(currentContext->loadMosaic(SOCKETGZ, fn, img, ll,type,sys),ll); } void Base::loadMosaicVarCmd(MosaicType type, Coord::CoordSystem sys, const char* ch, const char* fn, LayerType ll) { FitsImage* img = new FitsImageFitsVar(currentContext, interp, ch, fn, 1); loadDone(currentContext->loadMosaic(VAR, fn, img, ll,type,sys),ll); } // *** Mosaic Image WFPC2 *** void Base::loadMosaicImageWFPC2AllocCmd(const char* ch, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsAlloc(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaicWFPC2(ALLOC, fn, img), IMG); } void Base::loadMosaicImageWFPC2AllocGZCmd(const char* ch, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsAllocGZ(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaicWFPC2(ALLOCGZ, fn, img), IMG); } void Base::loadMosaicImageWFPC2ChannelCmd(const char* ch, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsChannel(currentContext, interp, ch, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaicWFPC2(CHANNEL, fn, img), IMG); } void Base::loadMosaicImageWFPC2MMapCmd(const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsMMap(currentContext, interp, fn, 1); loadDone(currentContext->loadMosaicWFPC2(MMAP, fn, img), IMG); } void Base::loadMosaicImageWFPC2MMapIncrCmd(const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsMMapIncr(currentContext, interp, fn, 1); loadDone(currentContext->loadMosaicWFPC2(MMAPINCR, fn, img), IMG); } void Base::loadMosaicImageWFPC2ShareCmd(ShmType stype, int id, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsShare(currentContext, interp, stype, id, fn, 1); loadDone(currentContext->loadMosaicWFPC2(SHARE, fn, img), IMG); } void Base::loadMosaicImageWFPC2SocketCmd(int s, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsSocket(currentContext, interp, s, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaicWFPC2(SOCKET, fn, img), IMG); } void Base::loadMosaicImageWFPC2SocketGZCmd(int s, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsSocketGZ(currentContext, interp, s, fn, FitsFile::NOFLUSH, 1); loadDone(currentContext->loadMosaicWFPC2(SOCKETGZ, fn, img), IMG); } void Base::loadMosaicImageWFPC2VarCmd(const char* ch, const char* fn) { unloadFits(); FitsImage* img = new FitsImageFitsVar(currentContext, interp, ch, fn, 1); loadDone(currentContext->loadMosaicWFPC2(VAR, fn, img), IMG); } // *** void Base::loadDone(int rr, LayerType ll) { if (rr) { if (ll == IMG) { if (!keyContextSet) { keyContext = currentContext; keyContextSet =1; } } alignWCS(); if (!preservePan) { centerImage(); crosshair = cursor; } } else { reset(); Tcl_AppendResult(interp, "Unable to load file", NULL); result = TCL_ERROR; } // adjust current slice if needed if (currentContext->fits && isCube() && currentContext->secMode()==FrScale::CROPSEC) { // context->slice() IMAGE (ranges 1-n) // params are in DATA coords, edge to edge // setSlice() IMAGE (ranges 1-n) double sl = currentContext->slice(2)-.5; FitsZBound* zparams = currentContext->getDataParams(currentContext->secMode()); double ff = zparams->zmin+.5; double tt = zparams->zmax-.5; if (sltt) setSlice(2,tt+.5); } updateColorScale(); update(MATRIX); } saods9/tksao/frame/frmap.C000644 000765 000000 00000006621 12705446250 016022 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "context.h" #include "framebase.h" #include "fitsimage.h" double Base::mapAngleFromRef(double angle, Coord::CoordSystem sys, Coord::SkyFrame sky) { double rr = angle; FitsImage* ptr = currentContext->cfits; if (!ptr) return 0; switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: break; default: switch (ptr->getWCSOrientation(sys,sky)) { case Coord::NORMAL: rr += ptr->getWCSRotation(sys,sky); break; case Coord::XX: rr = -(angle + ptr->getWCSRotation(sys,sky) + M_PI); break; case Coord::YY: case Coord::XY: break; } } return zeroTWOPI(rr); } double Base::mapAngleToRef(double angle, Coord::CoordSystem sys, Coord::SkyFrame sky) { double rr = angle; FitsImage* ptr = currentContext->cfits; if (!ptr) return 0; switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: break; default: switch (ptr->getWCSOrientation(sys,sky)) { case Coord::NORMAL: rr -= ptr->getWCSRotation(sys,sky); break; case Coord::XX: rr = -(angle + ptr->getWCSRotation(sys,sky) + M_PI); break; case Coord::YY: case Coord::XY: break; } } return zeroTWOPI(rr); } double Base::mapDistFromRef(const Vector& v1, const Vector& v2, Coord::InternalSystem sys) { switch (sys) { case Coord::CANVAS: return (v2*refToCanvas - v1*refToCanvas).length(); case Coord::PANNER: return (v2*refToPanner - v1*refToPanner).length(); default: // na return 0; } } double Base::mapLenFromRef(double d, Coord::InternalSystem sys) { Vector r = mapLenFromRef(Vector(d,0),sys); return r[0]; } Vector Base::mapLenFromRef(const Vector& v, Coord::InternalSystem sys) { switch (sys) { case Coord::CANVAS: return mapLen(v,refToCanvas); case Coord::PANNER: return mapLen(v,refToPanner); default: return Vector(); } } double Base::mapLenToRef(double d, Coord::InternalSystem sys) { Vector r = mapLenToRef(Vector(d,0),sys); return r[0]; } Vector Base::mapLenToRef(const Vector& v, Coord::InternalSystem sys) { switch (sys) { case Coord::CANVAS: return mapLen(v,canvasToRef); case Coord::PANNER: return mapLen(v,pannerToRef); default: return Vector(); } } Vector FrameBase::mapFromRef(const Vector& vv, Coord::InternalSystem sys) { switch (sys) { case Coord::REF: return vv; case Coord::USER: return vv * refToUser; case Coord::WIDGET: return vv * refToWidget; case Coord::CANVAS: return vv * refToCanvas; case Coord::WINDOW: return vv * refToWindow; case Coord::PANNER: return vv * refToPanner; case Coord::MAGNIFIER: return vv * refToMagnifier; default: return Vector(); } } Vector FrameBase::mapToRef(const Vector& vv, Coord::InternalSystem sys) { switch (sys) { case Coord::REF: return vv; case Coord::USER: return vv * userToRef; case Coord::WIDGET: return vv * widgetToRef; case Coord::CANVAS: return vv * canvasToRef; case Coord::WINDOW: return vv * windowToRef; case Coord::PANNER: return vv * pannerToRef; case Coord::MAGNIFIER: return vv * magnifierToRef; default: return Vector(); } } saods9/tksao/frame/frmarker.C000644 000765 000000 00000433433 12775517652 016547 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "fdstream.hpp" #include "context.h" #include "base.h" #include "fitsimage.h" #include "fvcontour.h" #include "marker.h" #include "basemarker.h" #include "sigbus.h" #include "circle.h" #include "ellipse.h" #include "box.h" #include "polygon.h" #include "line.h" #include "vect.h" #include "projection.h" #include "segment.h" #include "text.h" #include "point.h" #include "ruler.h" #include "compass.h" #include "annulus.h" #include "ellipseannulus.h" #include "boxannulus.h" #include "cpanda.h" #include "epanda.h" #include "bpanda.h" #include "composite.h" #define LISTBUFSIZE 8192 // NOTE: all marker traversal routines use a local ptr as opposed to the // list current() because marker call backs may invoke another traversal // routine or the event loop, which may process pending events // DS9/Funtools Marker Parser Stuff // Parser Stuff #undef yyFlexLexer #define yyFlexLexer mkFlexLexer #include void* mklval; mkFlexLexer* mklexx; extern int mkparse(Base*, mkFlexLexer*); int mklex(void* vval, mkFlexLexer* ll) { mklval = vval; mklexx = ll; return ll ? ll->yylex() : 0; } void mkerror(Base* fr, mkFlexLexer* ll, const char* m) { fr->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') { fr->error(": "); fr->error(cmd); } } // CIAO Marker Parser Stuff #undef yyFlexLexer #define yyFlexLexer ciaoFlexLexer #include void* ciaolval; extern int ciaoparse(Base*, ciaoFlexLexer*); int ciaolex(void* vval, ciaoFlexLexer* ll) { ciaolval = vval; return ll ? ll->yylex() : 0; } void ciaoerror(Base* fr, ciaoFlexLexer* ll, const char* m) { fr->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') { fr->error(": "); fr->error(cmd); } } // PROS Marker Parser Stuff #undef yyFlexLexer #define yyFlexLexer prosFlexLexer #include void* proslval; prosFlexLexer* proslexx; extern int prosparse(Base*, prosFlexLexer*); int proslex(void* vval, prosFlexLexer* ll) { proslval = vval; proslexx = ll; return ll ? ll->yylex() : 0; } void proserror(Base* fr, prosFlexLexer* ll, const char* m) { fr->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') { fr->error(": "); fr->error(cmd); } } // TNG Marker Parser Stuff #undef yyFlexLexer #define yyFlexLexer tngFlexLexer #include void* tnglval; tngFlexLexer* tnglexx; extern int tngparse(Base*, tngFlexLexer*); int tnglex(void* vval, tngFlexLexer* ll) { tnglval = vval; tnglexx = ll; return ll ? ll->yylex() : 0; } void tngerror(Base* fr, tngFlexLexer* ll, const char* m) { fr->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') { fr->error(": "); fr->error(cmd); } } // SAO Marker Parser Stuff #undef yyFlexLexer #define yyFlexLexer saoFlexLexer #include void* saolval; saoFlexLexer* saolexx; extern int saoparse(Base*, saoFlexLexer*); int saolex(void* vval, saoFlexLexer* ll) { saolval = vval; saolexx = ll; return ll ? ll->yylex() : 0; } void saoerror(Base* fr, saoFlexLexer* ll, const char* m) { fr->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') { fr->error(": "); fr->error(cmd); } } // XY Marker Parser Stuff #undef yyFlexLexer #define yyFlexLexer xyFlexLexer #include void* xylval; extern int xyparse(Base*, xyFlexLexer*); int xylex(void* vval, xyFlexLexer* ll) { xylval = vval; return ll ? ll->yylex() : 0; } void xyerror(Base* fr, xyFlexLexer* ll, const char* m) { fr->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') { fr->error(": "); fr->error(cmd); } } // IME Analysis Commands /* void Base::analysisMarkersInit() { Vector cc; double rr =20; Vector ss(40,20); double ang =0; double mag =20; double in =0; double out =20; int num =10; Vector vin(0,0); Vector vout(40,20); analysisMarkers.append(new Circle(this, cc, rr)); analysisMarkers.append(new Box(this, cc, ss, ang)); analysisMarkers.append(new Ellipse(this, cc, ss, ang)); analysisMarkers.append(new Polygon(this, cc, ss)); analysisMarkers.append(new Point(this, cc)); analysisMarkers.append(new Vect(this, cc, mag, ang)); analysisMarkers.append(new Annulus(this, cc, in, out, num)); analysisMarkers.append(new EllipseAnnulus(this, cc, vin, vout, num, ang)); analysisMarkers.append(new BoxAnnulus(this, cc, vin, vout, num, ang)); Marker* mm = analysisMarkers.head(); while (mm) { mm->setProperty(Marker::SELECT, 1); mm->setProperty(Marker::EDIT, 1); mm->setProperty(Marker::ROTATE, 1); mm = mm->next(); } } */ void Base::analysisMarkersResetCmd() { /* if (analysisMarkers.isEmpty()) analysisMarkersInit(); Marker* mm = analysisMarkers.head(); while (mm) { mm->setProperty(Marker::HIDDEN, 1); mm = mm->next(); } */ } void Base::analysisMarkersSelectCmd(const char* which, const Vector& cc) { /* // reset analysisMarkersResetCmd(); Marker* mm = analysisMarkers.head(); while (mm) { if (!strcmp(mm->getType(),which)) { mm->setProperty(Marker::HIDDEN, 0); mm->moveTo(cc); update(PIXMAP); return; } mm = mm->next(); } */ } // Basic Regions void Base::createCircleCmd(const Vector& center, double radius, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Circle(this, center, radius, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createEllipseCmd(const Vector& center, const Vector& radius, double angle, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag,const List& cb) { createMarker(new Ellipse(this,center, radius, angle, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createBoxCmd(const Vector& center, const Vector& size, double angle, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Box(this, center, size, angle, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createPolygonCmd(const Vector& center, const Vector& bb, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Polygon(this, center, bb, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createPolygonCmd(const List& list, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Polygon(this, list, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::contourCreatePolygonCmd() { // only create in the USER layer markerLayerCmd(USER); contourCreatePolygon(currentContext->fvcontour().lcontourlevel()); contourCreatePolygon(currentContext->auxcontours()); currentContext->contourDeleteFV(); currentContext->contourDeleteAux(); } void Base::contourCreatePolygon(List& cl) { int dl[2]; dl[0] = 8; dl[1] = 3; char font[] = "helvetica 10 normal roman"; char text[] = ""; unsigned short defaultProps = Marker::SELECT | Marker::HIGHLITE | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::INCLUDE | Marker::SOURCE; const List tag; const List cb; // back to front for levels if (cl.tail()) { do { const char* color = cl.current()->colorName(); int width = cl.current()->lineWidth(); unsigned short prop = defaultProps; if (cl.current()->dash()) prop |= Marker::DASH; List& cc = cl.current()->lcontour(); cc.head(); while (cc.current()) { List& vv = cc.current()->lvertex(); if (!vv.isEmpty()) createMarker(new Polygon(this, vv, color, dl, width, font, text, prop, NULL, tag, cb)); cc.next(); } } while (cl.previous()); } } void Base::createSegmentCmd(const Vector& center, const Vector& bb, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Segment(this, center, bb, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createSegmentCmd(const List& list, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Segment(this, list, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createLineCmd(const Vector& center, const Vector& p2, int arrow1, int arrow2, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Line(this, center, p2, arrow1, arrow2, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createVectCmd(const Vector& center, const Vector& p2, int arrow, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Vect(this, center, p2, arrow, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createVectCmd(const Vector& center, double mag, double ang, int arrow, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Vect(this, center, mag, ang, arrow, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createTextCmd(const Vector& center, double angle, int rotate, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Text(this, center, angle, rotate, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createPointCmd(const Vector& center, Point::PointShape shape, int size, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Point(this, center, shape, size, color, dash, width, font, text, prop, comment, tag, cb)); } // Measurement Regions void Base::createRulerCmd(const Vector& center, const Vector& p2, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::CoordSystem distsys, Coord::SkyDist distdist, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Ruler(this, center, p2, sys, sky, distsys, distdist, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createCompassCmd(const Vector& center, double r, const char* north, const char* east, int na, int ea, Coord::CoordSystem sys, Coord::SkyFrame sky, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Compass(this, center, r, north, east, na, ea, sys, sky, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createProjectionCmd(const Vector& center, const Vector& p2, double w, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Projection(this, center, p2, w, color, dash, width, font, text, prop, comment, tag, cb)); } // Annulus Regions void Base::createAnnulusCmd(const Vector& center, double start, double stop, int num, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag,const List& cb) { createMarker(new Annulus(this, center, start, stop, num, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createAnnulusCmd(const Vector& center, int num, double* radii, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag,const List& cb) { createMarker(new Annulus(this, center, num, radii, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createEllipseAnnulusCmd(const Vector& center, const Vector& inner, const Vector& outer, int num, double angle, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new EllipseAnnulus(this, center, inner, outer, num, angle, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createEllipseAnnulusCmd(const Vector& center, int num, Vector* radii, double angle, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new EllipseAnnulus(this, center, num, radii, angle, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createBoxAnnulusCmd(const Vector& center, const Vector& inner, const Vector& outer, int num, double angle, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new BoxAnnulus(this, center, inner, outer, num, angle, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createBoxAnnulusCmd(const Vector& center, int num, Vector* size, double angle, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new BoxAnnulus(this, center, num, size, angle, color, dash, width, font, text, prop, comment, tag, cb)); } // Panda Regions void Base::createCpandaCmd(const Vector& center, double ang1, double ang2, int an, double rad1, double rad2, int rn, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Cpanda(this, center, ang1, ang2, an, rad1, rad2, rn, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createCpandaCmd(const Vector& center, int an, double* a, int rn, double* r, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Cpanda(this, center, an, a, rn, r, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createEpandaCmd(const Vector& center, double ang1, double ang2, int an, const Vector& rad1, const Vector& rad2, int rn, double angle, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Epanda(this, center, ang1, ang2, an, rad1, rad2, rn, angle, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createEpandaCmd(const Vector& center, int an, double* a, int rn, Vector* r, double angle, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Epanda(this, center, an, a, rn, r, angle, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createBpandaCmd(const Vector& center, double ang1, double ang2, int an, const Vector& rad1, const Vector& rad2, int rn, double angle, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Bpanda(this, center, ang1, ang2, an, rad1, rad2, rn, angle, color, dash, width, font, text, prop, comment, tag, cb)); } void Base::createBpandaCmd(const Vector& center, int an, double* a, int rn, Vector* r, double angle, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { createMarker(new Bpanda(this, center, an, a, rn, r, angle, color, dash, width, font, text, prop, comment, tag, cb)); } // Composite Regions void Base::createCompositeCmd(const Vector& center, double angle, int global, const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { Composite* m = new Composite(this, center, angle, global, color, dash, width, font, text, prop, comment, tag, cb); createMarker(m); compositeMarker = m; } void Base::createCompositeCmd( const char* color, int* dash, int width, const char* font, const char* text, unsigned short prop, const char* comment, const List& tag, const List& cb) { // find center Vector cc; int cnt=0; Marker* mm=markers->head(); while (mm) { if (mm->isSelected() && strncmp(mm->getType(),"composite", 9)) { cc += mm->getCenter(); cnt++; } mm=mm->next(); } cc /= cnt; // create composite Composite* mk = new Composite(this, cc, 0, 1, color, dash, width, font, text, prop, comment, tag, cb); createMarker(mk); // append members mm=markers->head(); while (mm) { if (mm->isSelected() && strncmp(mm->getType(),"composite",9)) { mm->unselect(); Marker* next = markers->extractNext(mm); mm->doCallBack(CallBack::DELETECB); mm->deleteCBs(); mk->append(mm); mm = next; } else mm=mm->next(); } // all done mk->updateBBox(); mk->select(); update(PIXMAP); } // Template Regions void Base::createTemplateCmd(const Vector& center, const char* fn) { ifstream str(fn); if (!str) { result = TCL_ERROR; return; } createTemplate(center,str); } void Base::createTemplateCmd(const Vector& v, Coord::CoordSystem sys, Coord::SkyFrame sky, const char* fn) { ifstream str(fn); if (!str) { result = TCL_ERROR; return; } createTemplate(currentContext->cfits->mapToRef(v, sys, sky),str); } void Base::createTemplateVarCmd(const Vector& center, const char* var) { Tcl_Obj* obj = Tcl_GetVar2Ex(interp, (char*)var, NULL, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG); if (!obj) return; // just in case Tcl_ConvertToType(interp, obj, Tcl_GetObjType("bytearray")); typedef struct ByteArray { int used; /* The number of bytes used in the byte * array. */ int allocated; /* The amount of space actually allocated * minus 1 byte. */ unsigned char bytes[4]; /* The array of bytes. The actual size of * this field depends on the 'allocated' field * above. */ } ByteArray; Tcl_IncrRefCount(obj); // only make command string as long as needed // or the rest will be processed as garbage ByteArray* ba = (ByteArray*)(obj->internalRep.otherValuePtr); int len = ba->used+2; char* buf = new char[len]; memcpy(buf, (char*)ba->bytes, ba->used); Tcl_DecrRefCount(obj); // add terminator to make parser happy buf[len-2] = '\n'; buf[len-1] = '\0'; string x(buf); istringstream istr(x); createTemplate(center,istr); delete [] buf; } void Base::createTemplate(const Vector& center, istream& str) { FitsImage* ptr = keyContext->fits; while (ptr) { ptr->initWCS0(center); ptr = ptr->nextMosaic(); } mkFlexLexer* ll = new mkFlexLexer(&str); mkparse(this, ll); delete ll; Marker* mk = compositeMarker; resetCompositeMarker(); ptr = keyContext->fits; while (ptr) { ptr->resetWCS0(); ptr = ptr->nextMosaic(); } if (mk) { mk->moveTo(center); update(PIXMAP, mk->getAllBBox()); // and return id printInteger(mk->getId()); } } // Support void Base::createMarker(Marker* m) { if (maperr) { Tcl_SetVar2(interp, "ds9", "msg", "Bad Coordinate mapping, unable to create some region(s).", TCL_GLOBAL_ONLY); Tcl_SetVar2(interp, "ds9", "msg,level", "warning", TCL_GLOBAL_ONLY); delete m; return; } if (compositeMarker) { compositeMarker->append(m); compositeMarker->updateBBox(); update(PIXMAP, compositeMarker->getAllBBox()); } else { markers->append(m); // now update new marker update(PIXMAP, m->getAllBBox()); // can't do this for windows, threads are weird // parser.Y and ds9parser.Y are not thread safe // *bad* exectute any Edit CallBacks // m->doCallBack(CallBack::EDITCB); // and return id printInteger(m->getId()); } } Vector Base::centroid(const Vector& vv) { FitsImage* ptr = currentContext->cfits; while (ptr) { Vector img = vv * ptr->refToData; FitsBound* params = ptr->getDataParams(currentContext->secMode()); if (img[0]>=params->xmin && img[0]xmax && img[1]>=params->ymin && img[1]ymax) break; ptr = ptr->nextMosaic(); } if (!ptr) return vv; FitsBound* params = ptr->getDataParams(currentContext->secMode()); // int srcw = ptr->width(); Vector cd = vv * ptr->refToData; float rr = centroidRadius; float rr2 = rr*rr; // main loop SETSIGBUS for (int kk=0; kk=params->xmin && aa[0]xmax && aa[1]>=params->ymin && aa[1]ymax) { if (ii*ii+jj*jj <= rr2) { double val = ptr->getValueDouble(aa); // check for nan if (isfinite(val)) { sum += aa*val; weight += val; } } } } } if (weight>0) cd = sum/weight; else break; } CLEARSIGBUS return cd * ptr->dataToRef; } void Base::getMarkerAnalysisHistogramCmd(char* xname, char* yname, int num) { Marker* mm = markers->head(); while (mm) { if (!mm->getProperty(Marker::HIDDEN)) { mm->analysisHistogram(xname, yname, num); return; } mm=mm->next(); } } void Base::getMarkerAnalysisHistogramCmd(int id, char* xname, char* yname, int num) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->analysisHistogram(xname, yname, num); return; } mm=mm->next(); } } void Base::getMarkerAnalysisPlot2dCmd(char* xname, char* yname, char* xcname, char* ycname, Coord::CoordSystem sys, Coord::SkyFrame sky, Marker::AnalysisMethod method) { Marker* mm=markers->head(); while (mm) { if (!mm->getProperty(Marker::HIDDEN)) { mm->analysisPlot2d(xname, yname, xcname, ycname, sys, sky, method); return; } mm=mm->next(); } } void Base::getMarkerAnalysisPlot2dCmd(int id, char* xname, char* yname, char* xcname, char* ycname, Coord::CoordSystem sys, Coord::SkyFrame sky, Marker::AnalysisMethod method) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->analysisPlot2d(xname, yname, xcname, ycname, sys, sky, method); return; } mm=mm->next(); } } void Base::getMarkerAnalysisPlot3dCmd(char* xname, char* yname, Coord::CoordSystem sys, Marker::AnalysisMethod method) { Marker* mm=markers->head(); while (mm) { if (!mm->getProperty(Marker::HIDDEN)) { mm->analysisPlot3d(xname, yname, sys, method); return; } mm=mm->next(); } } void Base::getMarkerAnalysisPlot3dCmd(int id, char* xname, char* yname, Coord::CoordSystem sys, Marker::AnalysisMethod method) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->analysisPlot3d(xname, yname, sys, method); return; } mm=mm->next(); } } void Base::getMarkerAnalysisPandaCmd(Coord::CoordSystem sys) { Marker* mm=markers->head(); while (mm) { if (!mm->getProperty(Marker::HIDDEN)) { mm->analysisPanda(sys); return; } mm=mm->next(); } } void Base::getMarkerAnalysisPandaCmd(int id, Coord::CoordSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->analysisPanda(sys); return; } mm=mm->next(); } } void Base::getMarkerAnalysisRadialCmd(char* xname, char* yname, char* yename, Coord::CoordSystem sys) { Marker* mm=markers->head(); while (mm) { if (!mm->getProperty(Marker::HIDDEN)) { mm->analysisRadial(xname, yname, yename, sys); return; } mm=mm->next(); } } void Base::getMarkerAnalysisRadialCmd(int id, char* xname, char* yname, char* yename, Coord::CoordSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->analysisRadial(xname, yname, yename, sys); return; } mm=mm->next(); } } void Base::getMarkerAnalysisStatsCmd(Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (!mm->getProperty(Marker::HIDDEN)) { mm->analysisStats(sys,sky); return; } mm=mm->next(); } } void Base::getMarkerAnalysisStatsCmd(int id, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->analysisStats(sys,sky); return; } mm=mm->next(); } } void Base::getMarkerAngleCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { printDouble(radToDeg(mm->getAngle())); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerAngleCmd(int id, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { printDouble(radToDeg(mapAngleFromRef(mm->getAngle(), sys, sky))); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerAnnulusRadiusCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { int cnt = ((Annulus*)mm)->numAnnuli(); Vector cc = mm->getCenter(); for (int i=0; iannuli(i); FitsImage* ptr = findFits(sys,cc); printLenFromRef(ptr, rr[0], sys, dist); Tcl_AppendResult(interp, "\n", NULL); } return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerBoxAnnulusRadiusCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { int cnt = ((BoxAnnulus*)mm)->numAnnuli(); Vector cc = mm->getCenter(); for (int i=0; iannuli(i); FitsImage* ptr = findFits(sys,cc); printLenFromRef(ptr, rr, sys, dist); Tcl_AppendResult(interp, "\n", NULL); } return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerBoxRadiusCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Vector rr = ((Box*)mm)->annuli(0); Vector cc = mm->getCenter(); FitsImage* ptr = findFits(sys,cc); printLenFromRef(ptr, rr, sys, dist); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerBpandaAnglesCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { int cnt = ((Bpanda*)mm)->numAngles(); double first=0; for (int ii=0; iiangles(ii)); if (!ii) first = ang; else if (ang<=first+FLT_EPSILON) ang += 360; printDouble(ang); Tcl_AppendResult(interp, "\n", NULL); } return; } mm=mm->next(); } } void Base::getMarkerBpandaAnglesCmd(int id, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { int cnt = ((Bpanda*)mm)->numAngles(); double first=0; for (int ii=0; iiangles(ii),sys,sky)); if (!ii) first = ang; else if (ang<=first+FLT_EPSILON) ang += 360; printDouble(ang); Tcl_AppendResult(interp, "\n", NULL); } return; } mm=mm->next(); } } void Base::getMarkerBpandaRadiusCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { int cnt = ((Bpanda*)mm)->numAnnuli(); Vector cc = mm->getCenter(); for (int i=0; iannuli(i); FitsImage* ptr = findFits(sys,cc); printLenFromRef(ptr, rr, sys, dist); Tcl_AppendResult(interp, "\n", NULL); } return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerCenterCmd(int id, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Vector cc= mm->getCenter(); printFromRef(findFits(sys,cc), cc, sys, sky, format); return; } mm=mm->next(); } } void Base::getMarkerCircleRadiusCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Vector rr = ((Circle*)mm)->annuli(0); Vector cc = mm->getCenter(); FitsImage* ptr = findFits(sys,cc); printLenFromRef(ptr, rr[0], sys, dist); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerCpandaAnglesCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { int cnt = ((Cpanda*)mm)->numAngles(); double first=0; for (int ii=0; iiangles(ii)); if (!ii) first = ang; else if (ang<=first+FLT_EPSILON) ang += 360; printDouble(ang); Tcl_AppendResult(interp, "\n", NULL); } return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerCpandaAnglesCmd(int id, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { int cnt = ((Cpanda*)mm)->numAngles(); double first=0; for (int ii=0; iiangles(ii),sys,sky)); if (!ii) first = ang; else if (ang<=first+FLT_EPSILON) ang += 360; printDouble(ang); Tcl_AppendResult(interp, "\n", NULL); } return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerCpandaRadiusCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { int cnt = ((Cpanda*)mm)->numAnnuli(); Vector cc = mm->getCenter(); for (int i=0; iannuli(i); FitsImage* ptr = findFits(sys,cc); printLenFromRef(ptr, rr[0], sys, dist); Tcl_AppendResult(interp, "\n", NULL); } return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerColorCmd() { // return first found Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { Tcl_AppendResult(interp, mm->getColorName(), NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerColorCmd(const char* tag) { // return first found Marker* mm=markers->head(); while (mm) { if (mm->hasTag(tag)) { Tcl_AppendResult(interp, mm->getColorName(), NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerColorCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Tcl_AppendResult(interp, mm->getColorName(), NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerCompassArrowCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (((Compass*)mm)->getNorthArrow()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); if (((Compass*)mm)->getEastArrow()) Tcl_AppendResult(interp, " 1", NULL); else Tcl_AppendResult(interp, " 0", NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerCompassLabelCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Tcl_AppendElement(interp, ((Compass*)mm)->getNorthText()); Tcl_AppendElement(interp, ((Compass*)mm)->getEastText()); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerCompassRadiusCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { double rr = ((Compass*)mm)->getRadius(); Vector cc = mm->getCenter(); FitsImage* ptr = findFits(sys,cc); printLenFromRef(ptr, rr, sys, dist); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerCompassSystemCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { printCoordSystem(((Compass*)mm)->getSystem()); Tcl_AppendResult(interp, " ", NULL); printSkyFrame(((Compass*)mm)->getSkyFrame()); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerCompositeCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (((Composite*)mm)->getGlobal()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); return; } mm=mm->next(); } } void Base::getMarkerEllipseRadiusCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Vector rr = ((Ellipse*)mm)->annuli(0); Vector cc = mm->getCenter(); FitsImage* ptr = findFits(sys,cc); printLenFromRef(ptr, rr, sys, dist); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerEllipseAnnulusRadiusCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { int cnt = ((EllipseAnnulus*)mm)->numAnnuli(); Vector cc = mm->getCenter(); for (int i=0; iannuli(i); FitsImage* ptr = findFits(sys,cc); printLenFromRef(ptr, rr, sys, dist); Tcl_AppendResult(interp, "\n", NULL); } return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerEpandaAnglesCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { int cnt = ((Epanda*)mm)->numAngles(); double first=0; for (int ii=0; iiangles(ii)); if (!ii) first = ang; else if (ang<=first+FLT_EPSILON) ang += 360; printDouble(ang); Tcl_AppendResult(interp, "\n", NULL); } return; } mm=mm->next(); } } void Base::getMarkerEpandaAnglesCmd(int id, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { int cnt = ((Epanda*)mm)->numAngles(); double first=0; for (int ii=0; iiangles(ii),sys,sky)); if (!ii) first = ang; else if (ang<=first+FLT_EPSILON) ang += 360; printDouble(ang); Tcl_AppendResult(interp, "\n", NULL); } return; } mm=mm->next(); } } void Base::getMarkerEpandaRadiusCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { int cnt = ((Epanda*)mm)->numAnnuli(); Vector cc = mm->getCenter(); for (int i=0; iannuli(i); FitsImage* ptr = findFits(sys,cc); printLenFromRef(ptr, rr, sys, dist); Tcl_AppendResult(interp, "\n", NULL); } return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerEpsilonCmd() { ostringstream str; str << markerEpsilon << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getMarkerFontCmd() { Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { Tcl_AppendResult(interp, mm->getFont(), NULL); return; } mm=mm->next(); } } void Base::getMarkerFontCmd(const char* tag) { Marker* mm=markers->head(); while (mm) { if (mm->hasTag(tag)) { Tcl_AppendResult(interp, mm->getFont(), NULL); return; } mm=mm->next(); } } void Base::getMarkerFontCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Tcl_AppendResult(interp, mm->getFont(), NULL); return; } mm=mm->next(); } } void Base::getMarkerHandleCmd(const Vector& v) { Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { int h = mm->onHandle(v); if (h) { ostringstream str; str << mm->getId() << ' ' << h << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); return; } } mm=mm->next(); } Tcl_AppendResult(interp, "0 0", NULL); } void Base::getMarkerIdCmd(const char* tag) { // return first found Marker* mm=markers->head(); while (mm) { if (mm->hasTag(tag)) { printInteger(mm->getId()); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerIdCmd(const Vector& v) { // v is in canvas coords Marker* mm=markers->head(); while (mm) { if (mm->isIn(v)) { printInteger(mm->getId()); return; } mm=mm->next(); } Tcl_AppendResult(interp, "0", NULL); } void Base::getMarkerIdAllCmd() { Marker* mm=markers->head(); while (mm) { ostringstream str; str << mm->getId() << ' ' << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); mm=mm->next(); } } void Base::getMarkerLineCmd(int id, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Vector p1 = ((Line*)mm)->getP1(); Vector p2 = ((Line*)mm)->getP2(); Vector cc = mm->getCenter(); printFromRef(findFits(sys,cc), p1, sys, sky, format); Tcl_AppendResult(interp, " ", NULL); printFromRef(findFits(sys,cc), p2, sys, sky, format); return; } mm=mm->next(); } } void Base::getMarkerLineArrowCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (((Line*)mm)->getP1Arrow()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); if (((Line*)mm)->getP2Arrow()) Tcl_AppendResult(interp, " 1", NULL); else Tcl_AppendResult(interp, " 0", NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerLineLengthCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Vector p1 = ((Line*)mm)->getP1(); Vector p2 = ((Line*)mm)->getP2(); Vector cc = mm->getCenter(); FitsImage* ptr = findFits(sys,cc); printDistFromRef(ptr,p2,p1,sys,dist); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerLineWidthCmd() { // return first found Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { ostringstream str; str << mm->getLineWidth() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerLineWidthCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { ostringstream str; str << mm->getLineWidth() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerMapLenFromRefCmd(int id, double dd, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { FitsImage* ptr = findFits(sys,mm->getCenter()); printLenFromRef(ptr, dd, sys, dist); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerPointShapeCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Tcl_AppendResult(interp, ((Point*)mm)->shape(), NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerPointSizeCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { printInteger(((Point*)mm)->size()); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerPolygonSegmentCmd(const Vector& v) { Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { int s = mm->getSegment(v); if (s) { ostringstream str; str << mm->getId() << ' ' << s << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); return; } } mm=mm->next(); } Tcl_AppendResult(interp, "0 0", NULL); } void Base::getMarkerPreserveCmd() { if (preserveMarkers) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::getMarkerProjectionPointsCmd(int id, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Vector p1 = ((Projection*)mm)->getP1(); Vector p2 = ((Projection*)mm)->getP2(); Vector cc = mm->getCenter(); printFromRef(findFits(sys,cc), p1, sys, sky, format); Tcl_AppendResult(interp, " ", NULL); printFromRef(findFits(sys,cc), p2, sys, sky, format); return; } mm=mm->next(); } } void Base::getMarkerProjectionLengthCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Vector p1 = ((Projection*)mm)->getP1(); Vector p2 = ((Projection*)mm)->getP2(); Vector cc = mm->getCenter(); FitsImage* ptr = findFits(sys,cc); printDistFromRef(ptr,p2,p1,sys,dist); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerProjectionWidthCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { double rr = ((Projection*)mm)->getWidth(); Vector cc = mm->getCenter(); FitsImage* ptr = findFits(sys,cc); printLenFromRef(ptr, rr, sys, dist); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerPropertyCmd(unsigned short which) { // return first selected found Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { mm->getProperty(which) ? Tcl_AppendResult(interp, "1", NULL): Tcl_AppendResult(interp, "0", NULL); return; } mm=mm->next(); } // else, return 'off' Tcl_AppendResult(interp, "0", NULL); } void Base::getMarkerPropertyCmd(const char* tag, unsigned short which) { // return first selected found Marker* mm=markers->head(); while (mm) { if (mm->hasTag(tag)) { mm->getProperty(which) ? Tcl_AppendResult(interp, "1", NULL): Tcl_AppendResult(interp, "0", NULL); return; } mm=mm->next(); } // else, return 'off' Tcl_AppendResult(interp, "0", NULL); } void Base::getMarkerPropertyCmd(int id, unsigned short which) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->getProperty(which) ? Tcl_AppendResult(interp, "1", NULL): Tcl_AppendResult(interp, "0", NULL); return; } mm=mm->next(); } // else, return 'off' Tcl_AppendResult(interp, "0", NULL); } void Base::getMarkerRulerLengthCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Vector p1 = ((Ruler*)mm)->getP1(); Vector p2 = ((Ruler*)mm)->getP2(); Vector p3 = ((Ruler*)mm)->getP3(); Vector cc = mm->getCenter(); FitsImage* ptr = findFits(sys,cc); printDistFromRef(ptr,p2,p1,sys,dist); Tcl_AppendResult(interp, " ", NULL); printDistFromRef(ptr,p3,p1,sys,dist); Tcl_AppendResult(interp, " ", NULL); printDistFromRef(ptr,p3,p2,sys,dist); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerRulerPointCmd(int id, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Vector p1 = ((Ruler*)mm)->getP1(); Vector p2 = ((Ruler*)mm)->getP2(); Vector cc = mm->getCenter(); printFromRef(findFits(sys,cc), p1, sys, sky, format); Tcl_AppendResult(interp, " ", NULL); printFromRef(findFits(sys,cc), p2, sys, sky, format); return; } mm=mm->next(); } } void Base::getMarkerRulerSystemCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { printCoordSystem(((Ruler*)mm)->getSystem()); Tcl_AppendResult(interp, " ", NULL); printSkyFrame(((Ruler*)mm)->getSkyFrame()); Tcl_AppendResult(interp, " ", NULL); printCoordSystem(((Ruler*)mm)->getDistSystem()); Tcl_AppendResult(interp, " ", NULL); printSkyDist(((Ruler*)mm)->getDistDist()); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerSegmentSegmentCmd(const Vector& v) { Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { int s = mm->getSegment(v); if (s) { ostringstream str; str << mm->getId() << ' ' << s << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); return; } } mm=mm->next(); } Tcl_AppendResult(interp, "0 0", NULL); } void Base::getMarkerSelectedCmd() { Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { ostringstream str; str << mm->getId() << ' ' << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } mm=mm->next(); } } void Base::getMarkerSelectedCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->isSelected()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); return; } mm=mm->next(); } } void Base::getMarkerSelectedCmd(const Vector& v) { Marker* mm=markers->head(); while (mm) { if (mm->isIn(v) && mm->isSelected()) { ostringstream str; str << mm->getId() << ' ' << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "0", NULL); } void Base::getMarkerNumberCmd() { int count=0; Marker* mm=markers->head(); while (mm) { count++; mm=mm->next(); } printInteger(count); } void Base::getMarkerSelectedNumberCmd() { int count=0; Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) count++; mm=mm->next(); } printInteger(count); } void Base::getMarkerHighlitedCmd() { Marker* mm=markers->head(); while (mm) { if (mm->isHighlited()) { ostringstream str; str << mm->getId() << ' ' << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } mm=mm->next(); } } void Base::getMarkerHighlitedCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->isHighlited()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); return; } mm=mm->next(); } } void Base::getMarkerHighlitedCmd(const Vector& v) { Marker* mm=markers->head(); while (mm) { if (mm->isIn(v) && mm->isHighlited()) { ostringstream str; str << mm->getId() << ' ' << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "0", NULL); } void Base::getMarkerHighlitedNumberCmd() { int count=0; Marker* mm=markers->head(); while (mm) { if (mm->isHighlited()) count++; mm=mm->next(); } printInteger(count); } void Base::getMarkerShowCmd() { if (showMarkers) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::getMarkerShowTextCmd() { if (showMarkersText) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::getMarkerCentroidAutoCmd() { if (centroidAuto) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::getMarkerCentroidRadiusCmd() { ostringstream str; str << centroidRadius << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getMarkerCentroidIterationCmd() { ostringstream str; str << centroidIteration << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } // backup compatibility void Base::getMarkerCentroidOptionCmd() { ostringstream str; str << centroidIteration << centroidRadius << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getMarkerTagCmd(const char* tag) { Marker* mm=markers->head(); while (mm) { if (mm->hasTag(tag)) { ostringstream str; str << mm->getId() << ' ' << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } mm=mm->next(); } } void Base::getMarkerTagCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { const char* r = mm->getTag(); while (r) { Tcl_AppendElement(interp, r); r = mm->getNextTag(); } return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerTagCmd(int id, int num) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Tcl_AppendResult(interp, mm->getTag(num), NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerTagDefaultNameCmd() { int cnt = 1; again: ostringstream str; str << "Group " << cnt << ends; Marker* mm = markers->head(); while (mm) { if (mm->hasTag(str.str().c_str())) { cnt++; goto again; } mm=mm->next(); } Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::getMarkerTagNumberCmd(const char* tag) { // return number of markers with tag int count=0; Marker* mm=markers->head(); while (mm) { if (mm->hasTag(tag)) count++; mm=mm->next(); } printInteger(count); } void Base::getMarkerTagsCmd() { // return all tags List tags; // loop thru all markers Marker* mm=markers->head(); while (mm) { // loop thru all tags in markers const char* t = mm->getTag(); while (t) { // loop thru our current list int found = 0; Tag* tt = tags.head(); while (tt) { if (!strcmp(tt->tag(), t)) { found =1; break; } tt = tt->next(); } // didn't find it, add it to the list if (!found) { tags.append(new Tag(t)); } t=mm->getNextTag(); } mm=mm->next(); } // now sort // ok, dump the tags Tag* tt = tags.head(); while (tt) { Tcl_AppendElement(interp, tt->tag()); tt=tt->next(); } } void Base::getMarkerTextCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Tcl_AppendResult(interp, mm->getText(), NULL); return; } mm=mm->next(); } } void Base::getMarkerTextRotateCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (((Text*)mm)->getRotate()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerTypeCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Tcl_AppendResult(interp, mm->getType(), NULL); return; } mm=mm->next(); } } void Base::getMarkerVectorCmd(int id, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Vector p1 = ((Line*)mm)->getP1(); Vector cc = mm->getCenter(); printFromRef(findFits(sys,cc), p1, sys, sky, format); return; } mm=mm->next(); } } void Base::getMarkerVectorArrowCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (((Vect*)mm)->getArrow()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::getMarkerVectorLengthCmd(int id, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { Vector p1 = ((Vect*)mm)->getP1(); Vector p2 = ((Vect*)mm)->getP2(); Vector cc = mm->getCenter(); FitsImage* ptr = findFits(sys,cc); printDistFromRef(ptr,p2,p1,sys,dist); return; } mm=mm->next(); } Tcl_AppendResult(interp, "", NULL); } void Base::hasMarkerHighlitedCmd() { Marker* mm=markers->head(); while (mm) { if (mm->isHighlited()) { Tcl_AppendResult(interp, "1", NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "0", NULL); } void Base::hasMarkerPasteCmd() { if (!pasteMarkers->isEmpty()) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::hasMarkerSelectedCmd() { Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { Tcl_AppendResult(interp, "1", NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "0", NULL); } void Base::hasMarkerUndoCmd() { if (!undoMarkers->isEmpty()) switch (undoMarkerType) { case MOVE: Tcl_AppendResult(interp, "move", NULL); return; case EDIT: Tcl_AppendResult(interp, "edit", NULL); return; case DELETE: Tcl_AppendResult(interp, "delete", NULL); return; default: Tcl_AppendResult(interp, "", NULL); return; } else Tcl_AppendResult(interp, "", NULL); } void Base::markerLayerCmd(MarkerLayer layer) { switch (layer) { case USER: markers = &userMarkers; undoMarkers = &undoUserMarkers; pasteMarkers = &pasteUserMarkers; break; case CATALOG: markers = &catalogMarkers; undoMarkers = &undoCatalogMarkers; pasteMarkers = &pasteCatalogMarkers; break; /* case ANALYSIS: markers = &analysisMarkers; undoMarkers = &undoAnalysisMarkers; pasteMarkers = &pasteAnalysisMarkers; break; */ default: // na break; } } void Base::markerAnalysisCmd(int id, Marker::AnalysisTask aa, int which) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->analysis(aa,which); return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerAngleCmd(int id, double angle) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canRotate()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); mm->setAngle(angle); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerAngleCmd(int id, double angle, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canRotate()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); mm->setAngle(mapAngleToRef(angle,sys,sky)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerAnnulusCreateRadiusCmd(int id, const Vector& vv) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); printInteger(((Annulus*)mm)->addAnnuli(mapToRef(vv,Coord::CANVAS))); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerAnnulusDeleteRadiusCmd(int id, int h) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Annulus*)mm)->deleteAnnuli(h); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } } void Base::markerAnnulusRadiusCmd(int id, double inner, double outer, int num, Coord::InternalSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); double r1 = mapLenToRef(inner,sys); double r2 = mapLenToRef(outer,sys); ((Annulus*)mm)->setAnnuli(Vector(r1,r1),Vector(r2,r2),num); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerAnnulusRadiusCmd(int id, double inner, double outer, int num, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); double r1 = ptr->mapLenToRef(inner, sys, dist); double r2 = ptr->mapLenToRef(outer, sys, dist); ((Annulus*)mm)->setAnnuli(Vector(r1,r1),Vector(r2,r2),num); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerAnnulusRadiusCmd(int id, const char* lev, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); int cnt = 0; Vector radii[MAXANNULI]; string x(lev); istringstream str(x); while ((cnt> radii[cnt][0])) { radii[cnt][1] = radii[cnt][0]; ++cnt; } FitsImage* ptr = findFits(sys,mm->getCenter()); for (int i=0; imapLenToRef(radii[i], sys, dist); ((Annulus*)mm)->setAnnuli(radii,cnt); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerBackCmd() { Marker* mm = markers->tail(); while (mm) { if (mm->isSelected()) { Marker* prev = markers->extractPrev(mm); markers->append(mm); update(PIXMAP, mm->getAllBBox()); mm = prev; } else mm=mm->previous(); } } void Base::markerBackCmd(const char* tag) { Marker* mm = markers->tail(); while (mm) { if (mm->hasTag(tag)) { Marker* prev = markers->extractPrev(mm); markers->append(mm); update(PIXMAP, mm->getAllBBox()); mm = prev; } else mm=mm->previous(); } } void Base::markerBackCmd(int id) { Marker* mm = markers->tail(); while (mm) { if (mm->getId() == id) { markers->extractPrev(mm); markers->append(mm); update(PIXMAP, mm->getAllBBox()); return; } else mm=mm->previous(); } } void Base::markerBoxAnnulusRadiusCmd(int id, const Vector& inner, const Vector& outer, int num, Coord::InternalSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); Vector s1 = mapLenToRef(inner, sys); Vector s2 = mapLenToRef(outer, sys); ((BoxAnnulus*)(mm))->setAnnuli(s1,s2,num); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerBoxAnnulusRadiusCmd(int id, const Vector& inner, const Vector& outer, int num, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); Vector s1 = ptr->mapLenToRef(inner, sys, dist); Vector s2 = ptr->mapLenToRef(outer, sys, dist); ((BoxAnnulus*)(mm))->setAnnuli(s1,s2,num); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerBoxAnnulusRadiusCmd(int id,const char* lev, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); int cnt = 0; Vector size[MAXANNULI]; string x(lev); istringstream str(x); while ((cnt> size[cnt][0])) str >> size[cnt++][1]; // verify proper ratios for (int i=0; igetCenter()); for (int i=0; imapLenToRef(size[i], sys, dist); ((BoxAnnulus*)mm)->setAnnuli(size,cnt); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerBoxAnnulusCreateRadiusCmd(int id, const Vector& vv) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); printInteger(((BoxAnnulus*)mm)->addAnnuli(mapToRef(vv,Coord::CANVAS))); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerBoxAnnulusDeleteRadiusCmd(int id, int h) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((BoxAnnulus*)mm)->deleteAnnuli(h); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } } void Base::markerBoxRadiusCmd(int id, const Vector& size, Coord::InternalSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Box*)(mm))->setAnnuli(mapLenToRef(size, sys)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerBoxRadiusCmd(int id, const Vector& size, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); ((Box*)(mm))->setAnnuli(ptr->mapLenToRef(size, sys, dist)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerBpandaCreateAnglesCmd(int id, const Vector& vv) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); printInteger(((Bpanda*)mm)->addAngles(mapToRef(vv,Coord::CANVAS))); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerBpandaCreateRadiusCmd(int id, const Vector& vv) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); printInteger(((Bpanda*)mm)->addAnnuli(mapToRef(vv,Coord::CANVAS))); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerBpandaDeleteCmd(int id, int h) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Bpanda*)mm)->deleteAnglesAnnuli(h); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } } void Base::markerBpandaEditCmd(int id, double a1, double a2, int an, const Vector& r1, const Vector& r2, int rn) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Bpanda*)mm)->setAnglesAnnuli(a1,a2,an,r1,r2,rn); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerBpandaEditCmd(int id, double a1, double a2, int an, const Vector& r1, const Vector& r2, int rn, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Bpanda*)mm)->setAnglesAnnuli(mapAngleToRef(a1,sys,sky), mapAngleToRef(a2,sys,sky),an,r1,r2,rn); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerBpandaEditCmd(int id, const char* a, const char* r, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::CoordSystem rsys, Coord::SkyDist rdist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); int acnt = 0; double angles[MAXANGLES]; { string x(a); istringstream astr(x); while ((acnt> angles[acnt])) ++acnt; } for (int i=0; i> radii[rcnt][0])) rstr >> radii[rcnt++][1]; } // verify proper ratios for (int i=0; igetCenter()); for (int i=0; imapLenToRef(radii[i], rsys, rdist); ((Bpanda*)mm)->setAnglesAnnuli(angles,acnt,radii,rcnt); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCallBackCmd(int id, CallBack::Type cb, const char* p, const char* a) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { result = mm->addCallBack(cb, p, a); return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCentroidCmd() { undoMarkers->deleteAll(); Marker* mm=markers->head(); while (mm) { if (mm->isSelected() && mm->canMove()) { undoMarkers->append(mm->dup()); undoMarkerType = MOVE; update(PIXMAP, mm->getAllBBox()); mm->centroid(); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerCentroidCmd(const char* tag) { undoMarkers->deleteAll(); Marker* mm=markers->head(); while (mm) { if (mm->canMove() && mm->hasTag(tag)) { undoMarkers->append(mm->dup()); undoMarkerType = MOVE; update(PIXMAP, mm->getAllBBox()); mm->centroid(); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerCentroidCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canMove()) { markerUndo(mm, MOVE); update(PIXMAP, mm->getAllBBox()); mm->centroid(); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } } void Base::markerCentroidAutoCmd(int which) { centroidAuto = which; } void Base::markerCentroidRadiusCmd(float rad) { centroidRadius = rad; } void Base::markerCentroidIterationCmd(int iter) { centroidIteration = iter; } void Base::markerCircleRadiusCmd(int id, double radius, Coord::InternalSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); double r = mapLenToRef(radius, sys); ((Circle*)mm)->setAnnuli(Vector(r,r)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCircleRadiusCmd(int id, double radius, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); double r = ptr->mapLenToRef(radius, sys, dist); ((Circle*)mm)->setAnnuli(Vector(r,r)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerColorCmd(const char* clr) { Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { mm->setColor(clr); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerColorCmd(const char* tag, const char* clr) { Marker* mm=markers->head(); while (mm) { if (mm->hasTag(tag)) { mm->setColor(clr); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerColorCmd(int id, const char* clr) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->setColor(clr); update(PIXMAP, mm->getAllBBox()); return; } mm=mm->next(); } } void Base::markerCommandCmd(MarkerFormat fm, const char* ccmd) { // only make command string as long as needed // or the rest will be processed as garbage int len = strlen(ccmd)+2; char* buf = new char[len]; memcpy(buf, ccmd, len); // add terminator to make parser happy buf[len-2] = '\n'; buf[len-1] = '\0'; string x(buf); istringstream istr(x); parseMarker(fm, istr); delete [] buf; } void Base::markerCommandVarCmd(MarkerFormat fm, const char* var) { const char* ccmd = Tcl_GetVar(interp, var, TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG); if (!ccmd) { result = TCL_ERROR; return; } // only make command string as long as needed // or the rest will be processed as garbage int len = strlen(ccmd)+2; char* buf = new char[len]; memcpy(buf, ccmd, len); // add terminator to make parser happy buf[len-2] = '\n'; buf[len-1] = '\0'; string x(buf); istringstream istr(x); parseMarker(fm, istr); delete [] buf; } void Base::markerCompassArrowCmd(int id, int n, int e) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { ((Compass*)(mm))->setArrows(n, e); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCompassLabelCmd(int id, const char* n, const char* e) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { // it may shrink update(PIXMAP, mm->getAllBBox()); ((Compass*)(mm))->setLabels(n, e); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCompassRadiusCmd(int id, double r, Coord::InternalSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); double rr = mapLenToRef(r, sys); ((Compass*)mm)->setRadius(rr); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCompassRadiusCmd(int id, double r, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); double rr = ptr->mapLenToRef(r, sys, dist); ((Compass*)mm)->setRadius(rr); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCompassSystemCmd(int id, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { // it may shrink update(PIXMAP, mm->getAllBBox()); ((Compass*)(mm))->setCoordSystem(sys, sky); update(PIXMAP, mm->getAllBBox()); return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCompositeCmd(int id, int gl) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { ((Composite*)(mm))->setGlobal(gl); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCompositeDeleteCmd() { Marker* mm=markers->head(); while (mm) { if (mm->isSelected() && !strncmp(mm->getType(),"composite",9)) { Marker* nn = ((Composite*)mm)->extract(); while (nn) { markers->append(nn); nn = ((Composite*)mm)->extract(); } Marker* next = markers->extractNext(mm); delete mm; mm = next; update(PIXMAP); } else mm=mm->next(); } } void Base::markerCopyCmd() { undoMarkers->deleteAll(); pasteMarkers->deleteAll(); Marker* mm = markers->head(); while (mm) { if (mm->isSelected()) pasteMarkers->append(mm->dup()); mm=mm->next(); } } void Base::markerCopyCmd(const char* tag) { undoMarkers->deleteAll(); pasteMarkers->deleteAll(); Marker* mm = markers->head(); while (mm) { if (mm->hasTag(tag)) pasteMarkers->append(mm->dup()); mm=mm->next(); } } void Base::markerCpandaCreateAnglesCmd(int id, const Vector& vv) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); printInteger(((Cpanda*)mm)->addAngles(mapToRef(vv,Coord::CANVAS))); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCpandaCreateRadiusCmd(int id, const Vector& vv) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); printInteger(((Cpanda*)mm)->addAnnuli(mapToRef(vv,Coord::CANVAS))); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCpandaDeleteCmd(int id, int h) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Cpanda*)mm)->deleteAnglesAnnuli(h); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } } void Base::markerCpandaEditCmd(int id, double a1, double a2, int an, double r1, double r2, int rn) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Cpanda*)mm)->setAnglesAnnuli(a1,a2,an,Vector(r1,r1),Vector(r2,r2),rn); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCpandaEditCmd(int id, double a1, double a2, int an, double r1, double r2, int rn, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Cpanda*)mm)->setAnglesAnnuli(mapAngleToRef(a1,sys,sky), mapAngleToRef(a2,sys,sky), an, Vector(r1,r1),Vector(r2,r2),rn); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCpandaEditCmd(int id, const char* a, const char* r, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::CoordSystem rsys, Coord::SkyDist rdist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); int acnt = 0; double angles[MAXANGLES]; { string x(a); istringstream astr(x); while ((acnt> angles[acnt])) ++acnt; } { for (int i=0; i> radii[rcnt][0])) { radii[rcnt][1] = radii[rcnt][0]; ++rcnt; } } { FitsImage* ptr = findFits(sys,mm->getCenter()); for (int i=0; imapLenToRef(radii[i], rsys, rdist); } ((Cpanda*)mm)->setAnglesAnnuli(angles,acnt,radii,rcnt); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerCutCmd() { undoMarkers->deleteAll(); pasteMarkers->deleteAll(); Marker* mm = markers->head(); while (mm) { if (mm->isSelected() && mm->canDelete()) { Marker* next = markers->extractNext(mm); update(PIXMAP); pasteMarkers->append(mm); mm->doCallBack(CallBack::DELETECB); mm->disableCB(); mm = next; } else mm=mm->next(); } } void Base::markerCutCmd(const char* tag) { undoMarkers->deleteAll(); pasteMarkers->deleteAll(); Marker* mm = markers->head(); while (mm) { if (mm->canDelete() && mm->hasTag(tag)) { Marker* next = markers->extractNext(mm); update(PIXMAP); pasteMarkers->append(mm); mm->doCallBack(CallBack::DELETECB); mm->disableCB(); mm = next; } else mm=mm->next(); } } void Base::markerDeleteCallBackCmd(int id, CallBack::Type cb, const char* p) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { result = mm->deleteCallBack(cb, p); return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerDeleteCmd() { undoMarkers->deleteAll(); Marker* mm = markers->head(); while (mm) { if (mm->isSelected() && mm->canDelete()) { Marker* next = markers->extractNext(mm); update(PIXMAP); mm->doCallBack(CallBack::DELETECB); mm->deleteCBs(); undoMarkers->append(mm); undoMarkerType = DELETE; mm = next; } else mm=mm->next(); } } void Base::markerDeleteCmd(const char* tag) { undoMarkers->deleteAll(); Marker* mm = markers->head(); while (mm) { if (mm->canDelete() && mm->hasTag(tag)) { Marker* next = markers->extractNext(mm); update(PIXMAP); mm->doCallBack(CallBack::DELETECB); mm->deleteCBs(); undoMarkers->append(mm); undoMarkerType = DELETE; mm = next; } else mm=mm->next(); } } void Base::markerDeleteCmd(int id) { undoMarkers->deleteAll(); Marker* mm = markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canDelete()) { markers->extractNext(mm); update(PIXMAP); mm->doCallBack(CallBack::DELETECB); mm->deleteCBs(); undoMarkers->append(mm); undoMarkerType = DELETE; } return; } else mm=mm->next(); } } void Base::markerDeleteAllCmd() { undoMarkers->deleteAll(); Marker* mm = markers->head(); while (mm) { if (mm->canDelete()) { update(PIXMAP); Marker* next = markers->extractNext(mm); mm->doCallBack(CallBack::DELETECB); mm->deleteCBs(); undoMarkers->append(mm); undoMarkerType = DELETE; mm = next; } else mm=mm->next(); } } void Base::markerDeleteLastCmd() { undoMarkers->deleteAll(); Marker* mm=markers->tail(); if (mm && mm->canDelete()) { markers->extractNext(mm); update(PIXMAP); mm->doCallBack(CallBack::DELETECB); mm->deleteCBs(); undoMarkers->append(mm); undoMarkerType = DELETE; return; } } void Base::markerDeleteTagCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canDelete()) mm->deleteTags(); return; } mm=mm->next(); } } void Base::markerDeleteTagCmd(int id, const char* tag) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canDelete()) mm->deleteTag(tag); return; } mm=mm->next(); } } void Base::markerDeleteTagCmd(int id, int which) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canDelete()) mm->deleteTag(which); return; } mm=mm->next(); } } void Base::markerEditBeginCmd(int id, int h) { // remember which marker is being edited Marker* mm=markers->head(); while (mm) { if (mm->getId() == id && mm->canEdit()) { markerUndo(mm, EDIT); editMarker = mm; editMarker->editBegin(h); return; } mm=mm->next(); } editMarker = NULL; } void Base::markerEditBeginCmd(const Vector& v, int h) { // remember which marker is being edited Marker* mm=markers->head(); while (mm) { if (mm->isSelected() && mm->canEdit()) { markerUndo(mm, EDIT); editMarker = mm; editMarker->editBegin(h); return; } mm=mm->next(); } editMarker = NULL; } void Base::markerEditMotionCmd(const Vector& vv, int hh) { if (editMarker) { // erase current marker now redraw(editMarker->getAllBBox()); forceUpdate(); editMarker->edit(mapToRef(vv,Coord::CANVAS), hh); x11MarkerXOR(editMarker); } } void Base::markerEditEndCmd() { if (editMarker) editMarker->editEnd(); editMarker = NULL; update(PIXMAP); } void Base::markerEllipseRadiusCmd(int id, const Vector& radius, Coord::InternalSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); Vector r = mapLenToRef(radius, sys); ((Ellipse*)mm)->setAnnuli(r); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerEllipseRadiusCmd(int id, const Vector& radius, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); Vector r = ptr->mapLenToRef(radius, sys, dist); ((Ellipse*)mm)->setAnnuli(r); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerEllipseAnnulusRadiusCmd(int id, const Vector& inner, const Vector& outer, int num, Coord::InternalSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); Vector r1 = mapLenToRef(inner, sys); Vector r2 = mapLenToRef(outer, sys); ((EllipseAnnulus*)(mm))->setAnnuli(r1,r2,num); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerEllipseAnnulusRadiusCmd(int id, const Vector& inner, const Vector& outer, int num, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); Vector r1 = ptr->mapLenToRef(inner, sys, dist); Vector r2 = ptr->mapLenToRef(outer, sys, dist); ((EllipseAnnulus*)(mm))->setAnnuli(r1,r2,num); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerEllipseAnnulusRadiusCmd(int id, const char* lev, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); int cnt = 0; Vector radii[MAXANNULI]; string x(lev); istringstream str(x); while ((cnt> radii[cnt][0])) str >> radii[cnt++][1]; // verify proper ratios for (int i=0; igetCenter()); for (int i=0; imapLenToRef(radii[i], sys, dist); ((EllipseAnnulus*)(mm))->setAnnuli(radii,cnt); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerEllipseAnnulusCreateRadiusCmd(int id, const Vector& vv) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); printInteger(((EllipseAnnulus*)mm)->addAnnuli(mapToRef(vv,Coord::CANVAS))); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerEllipseAnnulusDeleteRadiusCmd(int id, int h) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((EllipseAnnulus*)mm)->deleteAnnuli(h); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } } void Base::markerEpandaCreateAnglesCmd(int id, const Vector& vv) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); printInteger(((Epanda*)mm)->addAngles(mapToRef(vv,Coord::CANVAS))); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerEpandaCreateRadiusCmd(int id, const Vector& vv) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); printInteger(((Epanda*)mm)->addAnnuli(mapToRef(vv,Coord::CANVAS))); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerEpandaDeleteCmd(int id, int h) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Epanda*)mm)->deleteAnglesAnnuli(h); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } } void Base::markerEpandaEditCmd(int id, double a1, double a2, int an, const Vector& r1, const Vector& r2, int rn) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Epanda*)mm)->setAnglesAnnuli(a1,a2,an,r1,r2,rn); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerEpandaEditCmd(int id, double a1, double a2, int an, const Vector& r1, const Vector& r2, int rn, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Epanda*)mm)->setAnglesAnnuli(mapAngleToRef(a1,sys,sky), mapAngleToRef(a2,sys,sky),an,r1,r2,rn); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerEpandaEditCmd(int id, const char* a, const char* r, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::CoordSystem rsys, Coord::SkyDist rdist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); int acnt = 0; double angles[MAXANGLES]; { string x(a); istringstream astr(x); while ((acnt> angles[acnt])) ++acnt; } for (int i=0; i> radii[rcnt][0])) rstr >> radii[rcnt++][1]; } // verify proper ratios for (int i=0; igetCenter()); for (int i=0; imapLenToRef(radii[i], rsys, rdist); ((Epanda*)mm)->setAnglesAnnuli(angles,acnt,radii,rcnt); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerHighliteAllCmd() { Marker* mm=markers->head(); while (mm) { if (mm->canHighlite()) { mm->highlite(); update(PIXMAP, mm->getBBox()); } mm=mm->next(); } } void Base::markerHighliteCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->canHighlite() && mm->getId() == id) { mm->highlite(); update(PIXMAP, mm->getAllBBox()); return; } mm=mm->next(); } } void Base::markerHighliteCmd(const char* tag) { Marker* mm=markers->head(); while (mm) { if (mm->canHighlite() && mm->hasTag(tag)) { mm->highlite(); update(PIXMAP, mm->getBBox()); } mm=mm->next(); } } void Base::markerHighliteToggleCmd(const Vector& v) { // toggle the highlite of the first found Marker* mm=markers->head(); while (mm) { if (mm->canHighlite() && mm->isIn(v)) { mm->toggleHighlite(); update(PIXMAP, mm->getBBox()); Tcl_AppendResult(interp, "1", NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "0", NULL); } void Base::markerHighliteOnlyCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->canHighlite() && mm->getId() == id) { if (!mm->isHighlited()) { mm->highlite(); update(PIXMAP, mm->getBBox()); } } else { if (mm->isHighlited()) { mm->unhighlite(); update(PIXMAP, mm->getBBox()); } } mm=mm->next(); } } void Base::markerHighliteOnlyCmd(const char* tag) { Marker* mm=markers->head(); while (mm) { if (mm->canHighlite() && mm->hasTag(tag)) { if (!mm->isHighlited()) { mm->highlite(); update(PIXMAP, mm->getBBox()); } else { if (mm->isHighlited()) { mm->unhighlite(); update(PIXMAP, mm->getBBox()); } } } mm=mm->next(); } } void Base::markerHighliteOnlyCmd(const Vector& v) { // first, check to see if we clicked on an already highlited marker Marker* mm=markers->head(); while (mm) { if (mm->canHighlite() && mm->isIn(v) && mm->isHighlited()) { Tcl_AppendResult(interp, "1", NULL); return; } mm=mm->next(); } // ok, now highlite the first found, and unhighlite the rest int found = 0; mm=markers->head(); while (mm) { if (mm->canHighlite() && mm->isIn(v) && !found) { if (!mm->isHighlited()) { mm->highlite(); update(PIXMAP, mm->getBBox()); } found = 1; } else { if (mm->isHighlited()) { mm->unhighlite(); update(PIXMAP, mm->getBBox()); } } mm=mm->next(); } if (found) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::markerFontCmd(const char* f) { Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { // things can shrink, so do before and after update(PIXMAP, mm->getAllBBox()); mm->setFont(f); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerFontCmd(const char* tag, const char* f) { Marker* mm=markers->head(); while (mm) { if (mm->hasTag(tag)) { // things can shrink, so do before and after update(PIXMAP, mm->getAllBBox()); mm->setFont(f); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerFontCmd(int id, const char* f) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { // things can shrink, so do before and after update(PIXMAP, mm->getAllBBox()); mm->setFont(f); update(PIXMAP, mm->getAllBBox()); return; } mm=mm->next(); } } void Base::markerFrontCmd() { Marker* mm = markers->head(); while (mm) { if (mm->isSelected()) { Marker* next = markers->extractNext(mm); markers->insertHead(mm); update(PIXMAP, mm->getAllBBox()); mm = next; } else mm=mm->next(); } } void Base::markerFrontCmd(const char* tag) { Marker* mm = markers->head(); while (mm) { if (mm->hasTag(tag)) { Marker* next = markers->extractNext(mm); markers->insertHead(mm); update(PIXMAP, mm->getAllBBox()); mm = next; } else mm=mm->next(); } } void Base::markerFrontCmd(int id) { Marker* mm = markers->head(); while (mm) { if (mm->getId() == id) { markers->extractNext(mm); markers->insertHead(mm); update(PIXMAP, mm->getAllBBox()); return; } else mm=mm->next(); } } void Base::markerKeyCmd() { Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) mm->key(); mm=mm->next(); } } void Base::markerKeyCmd(const Vector& v) { // v is in canvas coords Marker* mm=markers->head(); while (mm) { if (mm->isIn(v)) mm->key(); mm=mm->next(); } } void Base::markerLineCmd(int id, const Vector& p1, const Vector& p2, Coord::InternalSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Line*)(mm))->setPoints(mapToRef(p1,sys),mapToRef(p2,sys)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerLineCmd(int id, const Vector& p1, const Vector& p2, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); ((Line*)(mm))->setPoints(ptr->mapToRef(p1,sys,sky), ptr->mapToRef(p2,sys,sky)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerLineArrowCmd(int id, int p1, int p2) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { ((Line*)(mm))->setArrows(p1, p2); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerLineWidthCmd(int w) { Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { mm->setLineWidth(w); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerLineWidthCmd(int id, int w) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->setLineWidth(w); update(PIXMAP, mm->getAllBBox()); return; } mm=mm->next(); } } void Base::markerListCmd(MarkerFormat type, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip, int select, unsigned short mask, unsigned short value, List& tags) { ostringstream str; switch (type) { case DS9: if (!strip) markerListHeader(str); str << setseparator(','); break; case XML: markerListXMLHeader(str, sys, sky, format); break; case CIAO: str << setseparator(','); break; case SAOTNG: if (!strip) markerListSAOtngHeader(str, sys, sky, format); str << setseparator(','); break; case PROS: str << setseparator(' '); break; case SAOIMAGE: str << setseparator(','); break; case RAWXY: str << setseparator(' '); break; } // check for wcs switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: break; default: if (!keyContext->fits->hasWCS(sys)) goto done; } { Marker* mm = markers->head(); Marker* first = mm; while (mm) { Tag* t; // selected if (select) { if (!mm->isSelected()) goto next; } // properties if (mask) { if (!((mm->getProperty() & mask) == value)) goto next; } // tags if ((t=tags.head())) { while (t) { if (!mm->hasTag(t->tag())) goto next; t=t->next(); } } // ok, its passed the tests! switch (type) { case DS9: // only do this once if (mm == first) { coord.listCoordSystem(str, sys, sky, keyContext->fits); str << (strip ? ';' : '\n'); } mm->list(str, sys, sky, format, 0, strip); break; case XML: mm->listXML(str, sys, sky, format); break; case CIAO: mm->listCiao(str, sys, strip); break; case SAOTNG: mm->listSAOtng(str, sys, sky, format, strip); break; case PROS: mm->listPros(str, sys, sky, format, strip); break; case SAOIMAGE: mm->listSAOimage(str, strip); break; case RAWXY: mm->listXY(str, sys, sky, format, strip); break; } next: mm=mm->next(); } } done: switch (type) { case DS9: break; case XML: markerListXMLFooter(str); break; case CIAO: break; case SAOTNG: break; case PROS: break; case SAOIMAGE: break; case RAWXY: break; } str << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::markerLoadCmd(MarkerFormat fm, const char* fn) { ifstream str(fn); if (!str) { result = TCL_ERROR; return; } parseMarker(fm, str); } void Base::markerLoadCmd(MarkerFormat fm, const char* fn, Coord::CoordSystem sys, Coord::SkyFrame sky) { xySystem_ = sys; xySky_ = sky; markerLoadCmd(fm,fn); } void Base::markerLoadCmd(MarkerFormat fm, int fd) { boost::fdistream str(fd); if (!str) { result = TCL_ERROR; return; } parseMarker(fm, str); } void Base::markerLoadCmd(MarkerFormat fm, int fd, Coord::CoordSystem sys, Coord::SkyFrame sky) { xySystem_ = sys; xySky_ = sky; markerLoadCmd(fm,fd); } void Base::markerLoadFitsCmd(const char* fn, const char* color, int* dash, int width, const char* font) { if (!keyContext->fits) return; // verify that we have an ext specified if (fn && (fn[strlen(fn)-1] != ']')) { result = TCL_ERROR; return; } // do we have a WCS? FitsImage* mkfits = NULL; { mkfits = new FitsImageFitsMMap(currentContext, interp, fn, 1); if (!mkfits || !mkfits->isValid() || !mkfits->isBinTable()) { if (mkfits) delete mkfits; result = TCL_ERROR; return; } } // recenter if (keyContext->fits) { FitsImage* ptr = keyContext->fits; mkfits->nextBin(ptr->getHistCursor()); } FitsFile* mk = mkfits->fitsFile(); FitsHead* mkh = mk->head(); FitsTableHDU* mkhdu = (FitsTableHDU*)mkh->hdu(); // determine x and y column names // if image, hard code 'x' and 'y' // however, if table, find out the columns used to bin FitsColumn* x; FitsColumn* y; if (keyContext->fits) { FitsImage* ptr = keyContext->fits; if (ptr->isHist()) { x = mkhdu->find(ptr->getHistX()); y = mkhdu->find(ptr->getHistY()); } else { x = mkhdu->find("x"); y = mkhdu->find("y"); } } else { x = mkhdu->find("x"); y = mkhdu->find("y"); } FitsColumn* shape = mkhdu->find("shape"); FitsColumn* r = mkhdu->find("r"); FitsColumn* ang = mkhdu->find("rotang"); // manatory columns x and y if (!x || !y) { if (mkfits) delete mkfits; result = TCL_ERROR; return; } // and width should be the same if (((FitsBinColumn*)x)->repeat() != ((FitsBinColumn*)y)->repeat()) { if (mkfits) delete mkfits; result = TCL_ERROR; return; } int repeat = ((FitsBinColumn*)x)->repeat(); char* ptr = (char*)mk->data(); int rows = mkhdu->rows(); int rowlen = mkhdu->width(); char text[] = ""; List taglist; List cblist; for (int i=0; istr(ptr)); else { s1 = new char[7]; strcpy(s1,"POINT "); } // look for '!', which sets include/exclude char* s2 = s1; unsigned short props = Marker::SELECT | Marker::HIGHLITE | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::SOURCE; if (s2[0]=='!') s2++; else props |= Marker::INCLUDE; Vector center(x->value(ptr,0),y->value(ptr,0)); if (!strncmp(s2, "CIRCLE", 6) && r) { Vector rr(r->value(ptr),0); createCircleCmd(keyContext->fits->mapToRef(center, Coord::PHYSICAL), keyContext->fits->mapLenToRef(rr[0], Coord::PHYSICAL), color, dash, width, font, text, props, NULL, taglist,cblist); } else if (!strncmp(s2, "ANNULU", 6) && r) { Vector rr0(r->value(ptr,0),0); Vector rr1(r->value(ptr,1),0); createAnnulusCmd(keyContext->fits->mapToRef(center ,Coord::PHYSICAL), keyContext->fits->mapLenToRef(rr0[0], Coord::PHYSICAL), keyContext->fits->mapLenToRef(rr1[0], Coord::PHYSICAL), 1, color, dash, width, font, text, props, NULL, taglist,cblist); } else if (!strncmp(s2, "BOX ", 6) && r && ang) { // with angle Vector rr(r->value(ptr,0),r->value(ptr,1)); createBoxCmd(keyContext->fits->mapToRef(center, Coord::PHYSICAL), keyContext->fits->mapLenToRef(rr, Coord::PHYSICAL), degToRad(ang->value(ptr)), color, dash, width, font, text, props, NULL, taglist,cblist); } else if (!strncmp(s2, "BOX ", 6) && r) { // no angle Vector rr(r->value(ptr,0),r->value(ptr,1)); createBoxCmd(keyContext->fits->mapToRef(center, Coord::PHYSICAL), keyContext->fits->mapLenToRef(rr, Coord::PHYSICAL), 0, color, dash, width, font, text, props, NULL, taglist,cblist); } else if (!strncmp(s2, "ROTBOX", 6) && r && ang) { Vector rr(r->value(ptr,0),r->value(ptr,1)); createBoxCmd(keyContext->fits->mapToRef(center, Coord::PHYSICAL), keyContext->fits->mapLenToRef(rr, Coord::PHYSICAL), degToRad(ang->value(ptr)), color, dash, width, font, text, props, NULL, taglist,cblist); } else if (!strncmp(s2, "RECTAN", 6)) { Vector v1(center); Vector v2(x->value(ptr,1), y->value(ptr,1)); Vector d = v2-v1; Vector c = d/2 + v1; createBoxCmd(keyContext->fits->mapToRef(c,Coord::PHYSICAL), keyContext->fits->mapLenToRef(d,Coord::PHYSICAL), 0, color, dash, width, font, text, props, NULL, taglist,cblist); } else if (!strncmp(s2, "ROTREC", 6) && ang) { Vector v1(center); Vector v2(x->value(ptr,1), y->value(ptr,1)); Vector d = v2-v1; Vector c = d/2 + v1; createBoxCmd(keyContext->fits->mapToRef(c,Coord::PHYSICAL), keyContext->fits->mapLenToRef(d,Coord::PHYSICAL), degToRad(ang->value(ptr)), color, dash, width, font, text, props, NULL, taglist,cblist); } else if (!strncmp(s2, "ELLIPSE", 7) && r && ang) { Vector rr(r->value(ptr,0),r->value(ptr,1)); createEllipseCmd(keyContext->fits->mapToRef(center, Coord::PHYSICAL), keyContext->fits->mapLenToRef(rr, Coord::PHYSICAL), degToRad(ang->value(ptr)), color, dash, width, font, text, props, NULL, taglist,cblist); } else if (!strncmp(s2,"PIE",3) && r && ang) { Vector rr0(r->value(ptr,0),0); Vector rr1(r->value(ptr,1),0); createCpandaCmd(keyContext->fits->mapToRef(center,Coord::PHYSICAL), degToRad(ang->value(ptr,0)),degToRad(ang->value(ptr,1)),1, keyContext->fits->mapLenToRef(rr0[0],Coord::PHYSICAL), keyContext->fits->mapLenToRef(rr1[0],Coord::PHYSICAL), 1, color, dash, width, font, text, props, NULL, taglist,cblist); } else if (!strncmp(s2,"ELLIPTANN",9) && r && ang) { Vector rr0(r->value(ptr,0),r->value(ptr,1)); Vector rr1(r->value(ptr,2),r->value(ptr,3)); createEpandaCmd(keyContext->fits->mapToRef(center,Coord::PHYSICAL), degToRad(ang->value(ptr,0)),degToRad(ang->value(ptr,1)),1, keyContext->fits->mapLenToRef(rr0,Coord::PHYSICAL), keyContext->fits->mapLenToRef(rr1,Coord::PHYSICAL), 1, 0, color, dash, width, font, text, props, NULL, taglist,cblist); } else if (!strncmp(s2, "POINT ", 6)) createPointCmd(keyContext->fits->mapToRef(center,Coord::PHYSICAL), Point::BOXCIRCLE, POINTSIZE, color, dash, width, font, text, props, NULL, taglist,cblist); else if (!strncmp(s2, "POLYGO", 6)) { List list; for (int ii=0; iivalue(ptr,ii), y->value(ptr,ii)); Vertex* n = new Vertex(keyContext->fits->mapToRef(vv, Coord::PHYSICAL)); if (ii+1 < repeat) { // check for endpoints matching or endpoints NULL after first if ((ii>0) && ( (x->value(ptr,ii) == x->value(ptr,0) && y->value(ptr,ii) == y->value(ptr,0)) || (x->value(ptr,ii) == 0 && y->value(ptr,ii) == 0))) { delete n; break; } list.append(n); } else { // check for last point equals first point if (x->value(ptr,ii) != x->value(ptr,0) || y->value(ptr,ii) != y->value(ptr,0)) list.append(n); else delete n; } } if (!list.isEmpty()) createPolygonCmd(list, color, dash, width, font, text, props, NULL, taglist,cblist); } delete [] s1; } if (mkfits) delete mkfits; } void Base::markerMoveCmd(const Vector& v) { // use matrix, not map() undoMarkers->deleteAll(); Marker* mm=markers->head(); while (mm) { if (mm->isSelected() && mm->canMove()) { undoMarkers->append(mm->dup()); undoMarkerType = MOVE; Vector c = mm->getCenter() * refToCanvas; update(PIXMAP, mm->getAllBBox()); mm->moveTo((c + v) * canvasToRef); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerMoveCmd(const char* tag, const Vector& v) { // use matrix, not map() undoMarkers->deleteAll(); Marker* mm=markers->head(); while (mm) { if (mm->canMove() && mm->hasTag(tag)) { undoMarkers->append(mm->dup()); undoMarkerType = MOVE; Vector c = mm->getCenter() * refToCanvas; update(PIXMAP, mm->getAllBBox()); mm->moveTo((c + v) * canvasToRef); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerMoveCmd(int id, const Vector& v) { // use matrix, not map() Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canMove()) { markerUndo(mm, MOVE); Vector c = mm->getCenter() * refToCanvas; update(PIXMAP, mm->getAllBBox()); mm->moveTo((c + v) * canvasToRef); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } } void Base::markerMoveBeginCmd(const Vector& v) { markerBegin = mapToRef(v,Coord::CANVAS); undoMarkers->deleteAll(); Marker* mm=markers->head(); while (mm) { if (mm->isSelected() && mm->canMove()) { undoMarkers->append(mm->dup()); undoMarkerType = MOVE; mm->moveBegin(); } mm=mm->next(); } } void Base::markerMoveBeginCmd(int id, const Vector& v) { markerBegin = mapToRef(v,Coord::CANVAS); undoMarkers->deleteAll(); Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canMove()) { undoMarkers->append(mm->dup()); undoMarkerType = MOVE; mm->moveBegin(); } return; } mm=mm->next(); } } void Base::markerMoveMotionCmd(const Vector& v) { // first, accumulate erase markers Marker* mm=markers->head(); if (mm) { while (mm) { if (mm->isSelected() && mm->canMove()) redraw(mm->getAllBBox()); mm=mm->next(); } // and erase now forceUpdate(); // ok, now draw selected markers in new location Vector markerEnd = mapToRef(v,Coord::CANVAS); Vector diff = markerEnd - markerBegin; markerBegin = markerEnd; mm=markers->head(); while (mm) { if (mm->isSelected() && mm->canMove()) { mm->move(diff); x11MarkerXOR(mm); } mm=mm->next(); } } } void Base::markerMoveMotionCmd(int id, const Vector& v) { // first, accumulate erase markers Marker* mm=markers->head(); if (mm) { while (mm) { if (mm->getId() && mm->canMove()) { redraw(mm->getAllBBox()); break; } mm=mm->next(); } if (!mm) return; // can't find it Marker *ptr = mm; // and erase now forceUpdate(); // ok, now draw selected markers in new location Vector markerEnd = mapToRef(v,Coord::CANVAS); Vector diff = markerEnd - markerBegin; markerBegin = markerEnd; ptr->move(diff); x11MarkerXOR(ptr); } } void Base::markerMoveEndCmd() { Marker* mm=markers->head(); while (mm) { if (mm->isSelected() && mm->canMove()) mm->moveEnd(); mm=mm->next(); } // update widget since we don't know where the selected markers came from update(PIXMAP); } void Base::markerMoveEndCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canMove()) mm->moveEnd(); return; } mm=mm->next(); } // update widget since we don't know where the selected markers came from update(PIXMAP); } void Base::markerMoveToCmd(const Vector& v, Coord::InternalSystem sys) { undoMarkers->deleteAll(); Marker* mm=markers->head(); while (mm) { if (mm->isSelected() && mm->canMove()) { undoMarkers->append(mm->dup()); undoMarkerType = MOVE; update(PIXMAP, mm->getAllBBox()); mm->moveTo(mapToRef(v,sys)); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerMoveToCmd(const Vector& v, Coord::CoordSystem sys, Coord::SkyFrame sky) { undoMarkers->deleteAll(); Marker* mm=markers->head(); while (mm) { if (mm->isSelected() && mm->canMove()) { undoMarkers->append(mm->dup()); undoMarkerType = MOVE; update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); mm->moveTo(ptr->mapToRef(v,sys,sky)); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerMoveToCmd(const char* tag, const Vector& v, Coord::InternalSystem sys) { undoMarkers->deleteAll(); Marker* mm=markers->head(); while (mm) { if (mm->canMove() && mm->hasTag(tag)) { undoMarkers->append(mm->dup()); undoMarkerType = MOVE; update(PIXMAP, mm->getAllBBox()); mm->moveTo(mapToRef(v,sys)); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerMoveToCmd(const char* tag, const Vector& v, Coord::CoordSystem sys, Coord::SkyFrame sky) { undoMarkers->deleteAll(); Marker* mm=markers->head(); while (mm) { if (mm->canMove() && mm->hasTag(tag)) { undoMarkers->append(mm->dup()); undoMarkerType = MOVE; update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); mm->moveTo(ptr->mapToRef(v,sys,sky)); update(PIXMAP, mm->getAllBBox()); } mm=mm->next(); } } void Base::markerMoveToCmd(int id, const Vector& v, Coord::InternalSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canMove()) { markerUndo(mm, MOVE); update(PIXMAP, mm->getAllBBox()); mm->moveTo(mapToRef(v, sys)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } } void Base::markerMoveToCmd(int id, const Vector& v, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canMove()) { markerUndo(mm, MOVE); update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); mm->moveTo(ptr->mapToRef(v,sys,sky)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } } void Base::markerPasteCmd() { // Internal copy/paste { Marker* mm=markers->head(); while (mm) { mm->unselect(); mm=mm->next(); } } undoMarkers->deleteAll(); Marker* mm=pasteMarkers->head(); while (mm) { Marker* nn = mm->dup(); nn->newIdentity(); markers->append(nn); mm = mm->next(); } update(PIXMAP); } void Base::markerPasteCmd(Coord::CoordSystem sys) { ostringstream str; // MarkerFormat type = DS9; markerListHeader(str); coord.listCoordSystem(str, sys, Coord::FK5, keyContext->fits); str << endl; str << setseparator(','); Marker* mm = pasteMarkers->head(); while (mm) { mm->list(str, sys, Coord::FK5, Coord::DEGREES, 0, 0); mm=mm->next(); } str << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Base::markerPointShapeCmd(int id, Point::PointShape shape) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Point*)mm)->setShape(shape); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerPointSizeCmd(int id, int size) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Point*)mm)->setSize(size); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerPolygonCreateVertexCmd(int id, int seg, const Vector& v) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); ((Polygon*)(mm))->createVertex(seg, mapToRef(v,Coord::CANVAS)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerPolygonDeleteVertexCmd(int id, int h) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Polygon*)(mm))->deleteVertex(h); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } } void Base::markerPolygonResetCmd(int id, const Vector& size, Coord::InternalSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Polygon*)(mm))->reset(mapLenToRef(size, sys)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerPolygonResetCmd(int id, const Vector& size, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); ((Polygon*)(mm))->reset(ptr->mapLenToRef(size, sys, dist)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerProjectionCmd(int id,const Vector& p1,const Vector& p2, Coord::InternalSystem sys,double width) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Projection*)(mm))->set(mapToRef(p1,sys), mapToRef(p2,sys), mapLenToRef(width,sys)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerProjectionCmd(int id, const Vector& p1, const Vector& p2, Coord::CoordSystem sys, Coord::SkyFrame sky, double width, Coord::CoordSystem wdsys, Coord::SkyDist wddist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); ((Projection*)(mm))->set(ptr->mapToRef(p1,sys,sky), ptr->mapToRef(p2,sys,sky), ptr->mapLenToRef(width, wdsys, wddist)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerPropertyCmd(unsigned short prop, int value) { Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) { if (prop == Marker::DASH || prop == Marker::FIXED || prop == Marker::INCLUDE || prop == Marker::SOURCE) { // marker will change bbox, so get before and after update(PIXMAP, mm->getAllBBox()); mm->setProperty(prop, value); update(PIXMAP, mm->getAllBBox()); } else mm->setProperty(prop, value); } mm=mm->next(); } } void Base::markerPropertyCmd(const char* tag, unsigned short prop, int value) { Marker* mm=markers->head(); while (mm) { if (mm->hasTag(tag)) { if (prop == Marker::DASH || prop == Marker::FIXED || prop == Marker::INCLUDE || prop == Marker::SOURCE) { // marker will change bbox, so get before and after update(PIXMAP, mm->getAllBBox()); mm->setProperty(prop, value); update(PIXMAP, mm->getAllBBox()); } else mm->setProperty(prop, value); } mm=mm->next(); } } void Base::markerPropertyCmd(unsigned short prop, int value, const Vector& v) { // v is in canvas coords Marker* mm=markers->head(); while (mm) { if (mm->isIn(v)) { if (prop == Marker::DASH || prop == Marker::FIXED || prop == Marker::INCLUDE || prop == Marker::SOURCE) { // marker will change bbox, so get before and after update(PIXMAP, mm->getAllBBox()); mm->setProperty(prop, value); update(PIXMAP, mm->getAllBBox()); } else mm->setProperty(prop, value); } mm=mm->next(); } } void Base::markerPropertyCmd(int id, unsigned short prop, int value) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (prop == Marker::DASH || prop == Marker::FIXED || prop == Marker::INCLUDE || prop == Marker::SOURCE) { // marker will change bbox, so get before and after update(PIXMAP, mm->getAllBBox()); mm->setProperty(prop, value); update(PIXMAP, mm->getAllBBox()); } else mm->setProperty(prop, value); return; } mm=mm->next(); } } void Base::markerRotateBeginCmd(int id) { // remember which marker is being edited Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canRotate()) { markerUndo(mm, EDIT); rotateMarker = mm; rotateMarker->rotateBegin(); } return; } mm=mm->next(); } rotateMarker = NULL; } void Base::markerRotateBeginCmd(const Vector& v) { // remember which marker is being edited Marker* mm=markers->head(); while (mm) { if (mm->isSelected() && mm->canRotate()) { markerUndo(mm, EDIT); rotateMarker = mm; rotateMarker->rotateBegin(); return; } mm=mm->next(); } rotateMarker = NULL; } void Base::markerRotateMotionCmd(const Vector& vv, int hh) { if (rotateMarker) { // erase current marker now redraw(rotateMarker->getAllBBox()); forceUpdate(); rotateMarker->rotate(mapToRef(vv,Coord::CANVAS), hh); x11MarkerXOR(rotateMarker); } } void Base::markerRotateEndCmd() { if (rotateMarker) rotateMarker->rotateEnd(); rotateMarker = NULL; update(PIXMAP); } void Base::markerRulerPointCmd(int id, const Vector& p1, const Vector& p2, Coord::InternalSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Ruler*)(mm))->setPoints(mapToRef(p1,sys),mapToRef(p2,sys)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerRulerPointCmd(int id, const Vector& p1, const Vector& p2, Coord::CoordSystem sys, Coord::SkyFrame sky) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); ((Ruler*)(mm))->setPoints(ptr->mapToRef(p1,sys,sky), ptr->mapToRef(p2,sys,sky)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerRulerSystemCmd(int id, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::CoordSystem dsys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { // it may shrink update(PIXMAP, mm->getAllBBox()); ((Ruler*)(mm))->setCoordSystem(sys, sky, dsys, dist); update(PIXMAP, mm->getAllBBox()); return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerSaveCmd(const char* fileName, MarkerFormat type, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { ofstream fn(fileName); if (!fn) { Tcl_AppendResult(interp, "Unable to open file ", fileName, NULL); result = TCL_ERROR; return; } switch (type) { case DS9: if (!strip) markerListHeader(fn); fn << setseparator(','); break; case XML: markerListXMLHeader(fn, sys, sky, format); break; case CIAO: fn << setseparator(','); break; case SAOTNG: if (!strip) markerListSAOtngHeader(fn, sys, sky, format); fn << setseparator(','); break; case SAOIMAGE: fn << setseparator(','); break; case PROS: fn << setseparator(' '); break; case RAWXY: fn << setseparator(' '); break; } // check for wcs switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: break; default: if (!keyContext->fits->hasWCS(sys)) goto done; } { Marker* mm = markers->head(); Marker* first = mm; while (mm) { switch (type) { case DS9: // only do this once if (mm == first) { coord.listCoordSystem(fn, sys, sky, keyContext->fits); fn << (strip ? ';' : '\n'); } mm->list(fn, sys, sky, format, 0, strip); break; case XML: mm->listXML(fn, sys, sky, format); break; case CIAO: mm->listCiao(fn, sys, strip); break; case SAOTNG: mm->listSAOtng(fn, sys, sky, format, strip); break; case SAOIMAGE: mm->listSAOimage(fn, strip); break; case PROS: mm->listPros(fn, sys, sky, format, strip); break; case RAWXY: mm->listXY(fn, sys, sky, format, strip); break; } mm=mm->next(); } } done: switch (type) { case DS9: break; case XML: markerListXMLFooter(fn); break; case CIAO: break; case SAOTNG: break; case SAOIMAGE: break; case PROS: break; case RAWXY: break; } } void Base::markerSaveTemplateCmd(const char* fileName) { Marker* mm=markers->head(); if (!keyContext->fits || !mm) return; ofstream fn(fileName); if (!fn) { Tcl_AppendResult(interp, "Unable to open file ", fileName, NULL); result = TCL_ERROR; } FitsImage* ptr = keyContext->fits; while (ptr) { ptr->initWCS0(mm->getCenter()); ptr = ptr->nextMosaic(); } markerListHeader(fn); fn << "wcs0;fk5" << endl; while (mm) { mm->list(fn, Coord::WCS0, Coord::FK5, Coord::DEGREES, 0, 0); mm=mm->next(); } ptr = keyContext->fits; while (ptr) { ptr->resetWCS0(); ptr = ptr->nextMosaic(); } } void Base::markerSegmentCreateVertexCmd(int id, int seg, const Vector& v) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); ((Segment*)(mm))->createVertex(seg, mapToRef(v,Coord::CANVAS)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerSegmentDeleteVertexCmd(int id, int h) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Segment*)(mm))->deleteVertex(h); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } } void Base::markerSegmentResetCmd(int id, const Vector& size, Coord::InternalSystem sys) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Segment*)(mm))->reset(mapLenToRef(size, sys)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerSegmentResetCmd(int id, const Vector& size, Coord::CoordSystem sys, Coord::SkyDist dist) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); ((Segment*)(mm))->reset(ptr->mapLenToRef(size, sys, dist)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerSelectAllCmd() { Marker* mm=markers->head(); while (mm) { if (mm->canSelect()) { mm->select(); update(PIXMAP, mm->getBBox()); } mm=mm->next(); } } void Base::markerSelectCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->canSelect() && mm->getId() == id) { mm->select(); update(PIXMAP, mm->getAllBBox()); return; } mm=mm->next(); } } void Base::markerSelectCmd(const char* tag) { Marker* mm=markers->head(); while (mm) { if (mm->canSelect() && mm->hasTag(tag)) { mm->select(); update(PIXMAP, mm->getBBox()); } mm=mm->next(); } } void Base::markerSelectToggleCmd() { // toggle the select of the first found Marker* mm=markers->head(); while (mm) { if (mm->canSelect()) { mm->toggleSelect(); update(PIXMAP, mm->getBBox()); } mm=mm->next(); } } void Base::markerSelectToggleCmd(const Vector& v) { // toggle the select of the first found Marker* mm=markers->head(); while (mm) { if (mm->canSelect() && mm->isIn(v)) { mm->toggleSelect(); update(PIXMAP, mm->getBBox()); Tcl_AppendResult(interp, "1", NULL); return; } mm=mm->next(); } Tcl_AppendResult(interp, "0", NULL); } void Base::markerSelectOnlyCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->canSelect() && mm->getId() == id) { if (!mm->isSelected()) { mm->select(); update(PIXMAP, mm->getBBox()); } } else { if (mm->isSelected()) { mm->unselect(); update(PIXMAP, mm->getBBox()); } } mm=mm->next(); } } void Base::markerSelectOnlyCmd(const char* tag) { Marker* mm=markers->head(); while (mm) { if (mm->canSelect() && mm->hasTag(tag)) { if (!mm->isSelected()) { mm->select(); update(PIXMAP, mm->getBBox()); } else { if (mm->isSelected()) { mm->unselect(); update(PIXMAP, mm->getBBox()); } } } mm=mm->next(); } } void Base::markerSelectOnlyCmd(const Vector& v) { // first, check to see if we clicked on an already selected marker Marker* mm=markers->head(); while (mm) { if (mm->canSelect() && mm->isIn(v) && mm->isSelected()) { Tcl_AppendResult(interp, "1", NULL); return; } mm=mm->next(); } // ok, now select the first found, and unselect the rest int found = 0; mm=markers->head(); while (mm) { if (mm->canSelect() && mm->isIn(v) && !found) { if (!mm->isSelected()) { mm->select(); update(PIXMAP, mm->getBBox()); } found = 1; } else { if (mm->isSelected()) { mm->unselect(); update(PIXMAP, mm->getBBox()); } } mm=mm->next(); } if (found) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void Base::markerShowCmd(int which) { showMarkers = which; update(PIXMAP); } void Base::markerShowTextCmd(int which) { showMarkersText = which; update(PIXMAP); } void Base::markerTagCmd(const char* tag) { Marker* mm=markers->head(); while (mm) { if (mm->isSelected()) mm->addTag(tag); mm=mm->next(); } } void Base::markerTagCmd(int id, const char* tag) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->addTag(tag); return; } mm=mm->next(); } } void Base::markerTagEditCmd(const char* from, const char* to) { Marker* mm=markers->head(); while (mm) { mm->editTag(from, to); mm=mm->next(); } } void Base::markerTagDeleteCmd(const char* t) { Marker* mm=markers->head(); while (mm) { mm->deleteTag(t); mm=mm->next(); } } void Base::markerTagDeleteAllCmd() { Marker* mm=markers->head(); while (mm) { mm->deleteTags(); mm=mm->next(); } } void Base::markerTagUpdateCmd(const char* t) { markerTagDeleteCmd(t); markerTagCmd(t); } void Base::markerTextCmd(int id, const char* text) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { // things can shrink, so do before and after update(PIXMAP,mm->getAllBBox()); mm->setText(text); update(PIXMAP,mm->getAllBBox()); return; } mm=mm->next(); } } void Base::markerTextRotateCmd(int id, int rot) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { ((Text*)(mm))->setRotate(rot); update(PIXMAP); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerUndoCmd() { Marker* nn=undoMarkers->head(); while (nn) { Marker* next = nn->next(); undoMarkers->extractPrev(nn); switch (undoMarkerType) { case NONE: break; case DELETE: markers->append(nn); nn->updateBBox(); update(PIXMAP,nn->getAllBBox()); break; case EDIT: case MOVE: { Marker* mm=markers->head(); while (mm) { if (mm->getId() == nn->getId()) { nn->enableCB(); mm->updateBBox(); update(PIXMAP,mm->getAllBBox()); markers->insertNext(mm,nn); markers->extractNext(mm); nn->updateBBox(); update(PIXMAP,nn->getAllBBox()); switch (undoMarkerType) { case EDIT: nn->doCallBack(CallBack::EDITCB); break; case MOVE: nn->doCallBack(CallBack::MOVECB); break; default: // na break; } mm->disableCB(); delete mm; break; } mm=mm->next(); } } break; } nn=next; } undoMarkerType = NONE; } void Base::markerUnhighliteAllCmd() { Marker* mm=markers->head(); while (mm) { mm->unhighlite(); update(PIXMAP, mm->getBBox()); mm=mm->next(); } } void Base::markerUnhighliteCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->unhighlite(); update(PIXMAP, mm->getBBox()); return; } mm=mm->next(); } } void Base::markerUnhighliteCmd(const char* tag) { Marker* mm=markers->head(); while (mm) { if (mm->hasTag(tag)) { mm->unhighlite(); update(PIXMAP, mm->getBBox()); } mm=mm->next(); } } void Base::markerUnselectAllCmd() { Marker* mm=markers->head(); while (mm) { mm->unselect(); update(PIXMAP, mm->getBBox()); mm=mm->next(); } } void Base::markerUnselectCmd(int id) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { mm->unselect(); update(PIXMAP, mm->getBBox()); return; } mm=mm->next(); } } void Base::markerUnselectCmd(const char* tag) { Marker* mm=markers->head(); while (mm) { if (mm->hasTag(tag)) { mm->unselect(); update(PIXMAP, mm->getBBox()); } mm=mm->next(); } } void Base::markerVectorCmd(int id, const Vector& p, Coord::InternalSystem sys, double mag, double ang) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); ((Vect*)(mm))->setPoints(mapToRef(p,sys),mapLenToRef(mag,sys),ang); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerVectorCmd(int id, const Vector& p, Coord::CoordSystem sys, Coord::SkyFrame sky, double mag, Coord::CoordSystem dsys, Coord::SkyDist dist, double ang) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { markerUndo(mm, EDIT); // it may shrink update(PIXMAP, mm->getAllBBox()); FitsImage* ptr = findFits(sys,mm->getCenter()); ((Vect*)(mm))->setPoints(ptr->mapToRef(p,sys,sky), ptr->mapLenToRef(mag,dsys,dist), mapAngleToRef(ang,sys,sky)); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::markerVectorArrowCmd(int id, int p) { Marker* mm=markers->head(); while (mm) { if (mm->getId() == id) { if (mm->canEdit()) { ((Vect*)(mm))->setArrow(p); update(PIXMAP, mm->getAllBBox()); } return; } mm=mm->next(); } result = TCL_ERROR; } void Base::regionHighliteEndCmd() { BBox bb(regionBegin, regionEnd); Marker* mm=markers->head(); while (mm) { if (bb.isIn(mm->getBBox())==4 && mm->canHighlite()) mm->highlite(); else mm->unhighlite(); mm=mm->next(); } update(PIXMAP, bb.expand(2)); } void Base::regionHighliteShiftEndCmd() { BBox bb(regionBegin, regionEnd); Marker* mm=markers->head(); while (mm) { if (bb.isIn(mm->getBBox())==4 && mm->canHighlite()) mm->highlite(); mm=mm->next(); } update(PIXMAP, bb.expand(2)); } void Base::regionSelectBeginCmd(const Vector& vv) { regionBegin = vv; regionEnd = vv; } void Base::regionSelectMotionCmd(const Vector& vv) { // erase redrawNow((BBox(regionBegin, regionEnd)).expand(2)); // and draw to window regionEnd = vv; BBox cc = BBox(regionBegin, regionEnd) * canvasToWindow; Vector size = cc.size(); XDrawRectangle(display, Tk_WindowId(tkwin), selectGCXOR, cc.ll[0], cc.ll[1], size[0], size[1]); } void Base::regionSelectEndCmd() { BBox bb(regionBegin, regionEnd); Marker* mm=markers->head(); while (mm) { if (bb.isIn(mm->getBBox())==4 && mm->canSelect()) mm->select(); else mm->unselect(); mm=mm->next(); } update(PIXMAP, bb.expand(2)); } void Base::regionSelectShiftEndCmd() { BBox bb(regionBegin, regionEnd); Marker* mm=markers->head(); while (mm) { if (bb.isIn(mm->getBBox())==4 && mm->canSelect()) mm->select(); mm=mm->next(); } update(PIXMAP, bb.expand(2)); } // Marker Support void Base::markerListHeader(ostream& str) { str << "# Region file format: DS9 version 4.1" << endl; str << "global color=green dashlist=8 3 width=1 font=\"helvetica 10 normal roman\" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1" << endl; } void Base::markerListSAOtngHeader(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { // don't output filename anymore // if (keyContext->fits) // str << "# filename: " << keyContext->fits->getRootFileName() << endl; switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::AMPLIFIER: case Coord::DETECTOR: str << "# format: pixels (physical)" << endl; break; default: str << "# format: "; switch (sky) { case Coord::FK4: case Coord::FK4_NO_E: case Coord::FK5: case Coord::ICRS: case Coord::GALACTIC: case Coord::SUPERGALACTIC: case Coord::ECLIPTIC: case Coord::HELIOECLIPTIC: switch (format) { case Coord::DEGREES: str << "degrees ("; break; case Coord::SEXAGESIMAL: str << "hms ("; break; } switch (sky) { case Coord::FK4: str << "fk4"; break; case Coord::FK4_NO_E: str << "fk4-no-e"; break; case Coord::FK5: str << "fk5"; break; case Coord::ICRS: str << "icrs"; break; case Coord::GALACTIC: str << "galactic"; break; case Coord::SUPERGALACTIC: str << "supergalactic"; break; case Coord::ECLIPTIC: str << "ecliptic"; break; case Coord::HELIOECLIPTIC: str << "helioecliptic"; break; } str << ')' << endl; break; } } } void Base::markerUndo(Marker* m, UndoMarkerType t) { undoMarkers->deleteAll(); undoMarkers->append(m->dup()); undoMarkerType = t; } void Base::parseMarker(MarkerFormat fm, istream& str) { switch (fm) { case DS9: { mkFlexLexer* ll = new mkFlexLexer(&str); mkparse(this, ll); delete ll; resetCompositeMarker(); } break; case XML: xmlParse(str); break; case CIAO: { ciaoFlexLexer* ll = new ciaoFlexLexer(&str); ciaoparse(this, ll); delete ll; } break; case PROS: { prosFlexLexer* ll = new prosFlexLexer(&str); prosparse(this, ll); delete ll; } break; case SAOTNG: { tngFlexLexer* ll = new tngFlexLexer(&str); tngparse(this, ll); delete ll; } break; case SAOIMAGE: { saoFlexLexer* ll = new saoFlexLexer(&str); saoparse(this, ll); delete ll; } break; case RAWXY: { xyFlexLexer* ll = new xyFlexLexer(&str); xyparse(this, ll); delete ll; } break; } } void Base::psMarkers(List* ml, int mode) { // render from back to front // bbox is in canvas coords const BBox bb = BBox(0, 0, options->width-1, options->height-1) * widgetToCanvas; Marker* mm=ml->tail(); while (mm) { if (mm->isVisible(bb)) mm->ps(mode, showMarkersText); mm=mm->previous(); } } void Base::x11MagnifierMarkers(List* ml, const BBox& bb) { // render from back to front // bbox is in canvas coords Marker* mm=ml->tail(); while (mm) { if (mm->isVisible(bb)) mm->x11(magnifierPixmap, Coord::MAGNIFIER, showMarkersText, Marker::SRC, Marker::NOHANDLES); mm=mm->previous(); } } void Base::x11Markers(List* ml, const BBox& bb) { // render from back to front // bbox is in canvas coords Marker* mm=ml->tail(); while (mm) { if (mm->isVisible(bb)) mm->x11(pixmap, Coord::WIDGET, showMarkersText, Marker::SRC, Marker::HANDLES); mm=mm->previous(); } } void Base::x11MarkerXOR(Marker* ptr) { if (ptr) ptr->x11(Tk_WindowId(tkwin), Coord::WINDOW, showMarkersText, Marker::XOR, Marker::NOHANDLES); } void Base::unselectMarkers(List* ml) { Marker* mm=ml->head(); while (mm) { mm->unselect(); mm=mm->next(); } } void Base::unhighliteMarkers() { Marker* mm=markers->head(); while (mm) { mm->unhighlite(); mm=mm->next(); } } void Base::updateCBMarkers(List* ml) { Marker* mm=ml->head(); while (mm) { mm->doCallBack(CallBack::UPDATECB); mm=mm->next(); } } void Base::updateMarkers(List* ml) { Marker* mm=ml->head(); while (mm) { mm->updateBBox(); mm=mm->next(); } } void Base::updateMarkerCoords(List* ml, const Matrix& mx) { Marker* mm=ml->head(); while (mm) { mm->updateCoords(mx); mm=mm->next(); } } void Base::updateMarkerCBs(List* ml) { Marker* mm=ml->head(); while (mm) { mm->doCallBack(CallBack::MOVECB); mm->doCallBack(CallBack::EDITCB); mm->doCallBack(CallBack::ROTATECB); mm=mm->next(); } } #ifdef MAC_OSX_TK void Base::macosxMarkers(List* ml) { // render from back to front // bbox is in canvas coords const BBox bb = BBox(0, 0, options->width-1, options->height-1) * widgetToCanvas; Marker* mm=ml->tail(); while (mm) { if (mm->isVisible(bb)) mm->macosx(showMarkersText); mm=mm->previous(); } } #endif #ifdef __WIN32 void Base::win32Markers(List* ml) { // render from back to front // bbox is in canvas coords const BBox bb = BBox(0, 0, options->width-1, options->height-1) * widgetToCanvas; Marker* mm=ml->tail(); while (mm) { if (mm->isVisible(bb)) mm->win32(showMarkersText); mm=mm->previous(); } } #endif saods9/tksao/frame/frmarkerxml.C000644 000765 000000 00000103556 12705446250 017254 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "fdstream.hpp" #include #include "context.h" #include "framebase.h" #include "fitsimage.h" static int xmlRead (void * context, char * buffer, int len) { istream* str=(istream*)context; str->read(buffer,len); return str->gcount(); } static int xmlClose (void * context) { return 1; } void Base::xmlParse(istream& str) { xmlTextReaderPtr reader = xmlReaderForIO(xmlRead, xmlClose, (void*)(&str), "", NULL, 0); if (reader) { char** cols=NULL; int colcnt=0; int id[128]; char* unit[128]; char* ref[128]; char* axis[128]; char* dir[128]; for (int ii=0; ii<128; ii++) { id[ii]=0; unit[ii]=NULL; ref[ii]=NULL; dir[ii]=NULL; } int cnt=0; int state=0; int ret = xmlTextReaderRead(reader); while (ret == 1) { int nodeType = xmlTextReaderNodeType(reader); char* key = (char*)xmlTextReaderConstName(reader); if (!strncmp(key,"VOTABLE",7) && (nodeType==1)) { } else if (!strncmp(key,"VOTABLE",7) && (nodeType==15)) { } else if (!strncmp(key,"DEFINITIONS",11) && (nodeType==1)) { } else if (!strncmp(key,"DEFINITIONS",11) && (nodeType==15)) { } else if (!strncmp(key,"COOSYS",6) && (nodeType==1)) { } else if (!strncmp(key,"COOSYS",6) && (nodeType==15)) { } else if (!strncmp(key,"RESOURCE",8) && (nodeType==1)) { } else if (!strncmp(key,"RESOURCE",8) && (nodeType==15)) { } else if (!strncmp(key,"TABLE",5) && (nodeType==1)) { } else if (!strncmp(key,"TABLE",5) && (nodeType==15)) { } else if (!strncmp(key,"FIELD",5) && (nodeType==1)) { xmlParseFIELD(reader,id,unit,ref,axis,dir,colcnt); state = 2; colcnt++; } else if (!strncmp(key,"FIELD",5) && (nodeType==15)) { state = 0; } else if (!strncmp(key,"DATA",4) && (nodeType==1)) { state = 0; } else if (!strncmp(key,"DATA",4) && (nodeType==15)) { } else if (!strncmp(key,"TABLEDATA",9) && (nodeType==1)) { state = 0; } else if (!strncmp(key,"TABLEDATA",9) && (nodeType==15)) { } else if (!strncmp(key,"TR",2) && (nodeType==1)) { if (cols) { for (int ii=0; ii taglist; // params char* param =NULL; char* param2 =NULL; char* param3 =NULL; char* param4 =NULL; char* param5 =NULL; // comment char* comment=NULL; List cblist; // build it for (int ii=0; iimapLenToRef(atof(r), rsys, rdist), color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "ellipse", 7)) { createEllipseCmd(xmlPoint(ptr, x, y, sys, sky, format), ptr->mapLenToRef(Vector(atof(r),atof(r2)), rsys, rdist), xmlAngle(ang, angsign, angoffset, angformat, sys, sky), color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "box", 3) || STRCMP(shape, "rotbox", 6)) { createBoxCmd(xmlPoint(ptr, x, y, sys, sky, format), ptr->mapLenToRef(Vector(atof(r),atof(r2)), rsys, rdist), xmlAngle(ang, angsign, angoffset, angformat, sys, sky), color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "rectang", 6) || STRCMP(shape, "rotrec", 6)) { Vector v1 = xmlPoint(ptr, xv, yv, vsys, vsky, vformat, 0); Vector v2 = xmlPoint(ptr, xv, yv, vsys, vsky, vformat, 1); Vector d = v2-v1; Vector c = d/2 + v1; createBoxCmd(c,d, xmlAngle(ang, angsign, angoffset, angformat, sys, sky), color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "polygon", 7)) { List* list = xmlVertex(ptr, xv, yv, vsys, vsky, vformat); createPolygonCmd(*list, color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "line", 4)) { int arrow1 =1; int arrow2 =1; if (!param) arrow1 = atoi(param); if (!param2) arrow2 = atoi(param2); createLineCmd(xmlPoint(ptr, xv, yv, vsys, vsky, vformat, 0), xmlPoint(ptr, xv, yv, vsys, vsky, vformat, 1), arrow1, arrow2, color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "vector", 6)) { int arrow =1; if (!param) arrow = atoi(param); createVectCmd(xmlPoint(ptr, x, y, sys, sky, format), ptr->mapLenToRef(atof(r), rsys, rdist), xmlAngle(ang, angsign, angoffset, angformat, sys, sky), arrow, color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "projection", 10)) { createProjectionCmd(xmlPoint(ptr, xv, yv, vsys, vsky, vformat, 0), xmlPoint(ptr, xv, yv, vsys, vsky, vformat, 1), ptr->mapLenToRef(atof(r), rsys, rdist), color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "segment", 7)) { List* list = xmlVertex(ptr, xv, yv, vsys, vsky, vformat); createSegmentCmd(*list, color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "text", 4)) { int rotate = 1; if (!param) rotate = atoi(param); createTextCmd(xmlPoint(ptr, x, y, sys, sky, format), xmlAngle(ang, angsign, angoffset, angformat, sys, sky), rotate, color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "point", 5)) { const char* def = "circle"; Point::PointShape shape = Point::CIRCLE; if (!param) param = (char*)def; int size = 11; if (param2) size = atoi(param2); if (STRCMP(param, "circle", 6)) shape = Point::CIRCLE; else if (STRCMP(param, "box", 3)) shape = Point::BOX; else if (STRCMP(param, "diamond", 7)) shape = Point::DIAMOND; else if (STRCMP(param, "cross", 5)) shape = Point::CROSS; else if (STRCMP(param, "x", 1)) shape = Point::EX; else if (STRCMP(param, "arrow", 5)) shape = Point::ARROW; else if (STRCMP(param,"boxcircle",9)) shape = Point::BOXCIRCLE; createPointCmd(xmlPoint(ptr, x, y, sys, sky, format), shape, size, color, dash, width, font, text, props, comment, taglist, cblist); } // Measurement Regions else if (STRCMP(shape, "ruler", 5)) { Coord::CoordSystem rsys; Coord::SkyFrame rsky; coord.strToCoordSystem(param, wcsSystem_, &rsys, &rsky); Coord::CoordSystem dsys; Coord::SkyDist ddist; coord.strToDistSystem(param2, wcsSystem_, &dsys, &ddist); createRulerCmd(xmlPoint(ptr, xv, yv, vsys, vsky, vformat, 0), xmlPoint(ptr, xv, yv, vsys, vsky, vformat, 1), rsys, rsky, dsys, ddist, color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "compass", 7)) { Coord::CoordSystem csys; Coord::SkyFrame csky; coord.strToCoordSystem(param, wcsSystem_, &csys, &csky); const char* param2def = "N"; if (!param2) param2 = (char*)param2def; const char* param3def = "E"; if (!param3) param3 = (char*)param3def; int arrow1 =1; if (!param4) arrow1 = atoi(param4); int arrow2 =1; if (!param5) arrow2 = atoi(param5); createCompassCmd(xmlPoint(ptr, x, y, sys, sky, format), ptr->mapLenToRef(atof(r), rsys, rdist), param2, param3, arrow1, arrow2, csys, csky, color, dash, width, font, text, props, comment, taglist, cblist); } // Annulus Regions else if (STRCMP(shape, "annulus", 7)) { int num = xmlCount(rv); createAnnulusCmd(xmlPoint(ptr, x, y, sys, sky, format), num, xmlDistance(ptr, rv, num, rvsys, rvdist), color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "ellipseannulus", 14)) { int num = xmlCount(rv); createEllipseAnnulusCmd(xmlPoint(ptr, x, y, sys, sky, format), num, xmlDistance(ptr, rv, rv2, num, rvsys, rvdist), xmlAngle(ang, angsign, angoffset, angformat, sys, sky), color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "boxannulus", 10)) { int num = xmlCount(rv); createBoxAnnulusCmd(xmlPoint(ptr, x, y, sys, sky, format), num, xmlDistance(ptr, rv, rv2, num, rvsys, rvdist), xmlAngle(ang, angsign, angoffset, angformat, sys, sky), color, dash, width, font, text, props, comment, taglist, cblist); } // Panda Regions else if (STRCMP(shape, "panda", 5) || STRCMP(shape, "pie", 3)) { int anum = xmlCount(angv); int rnum = xmlCount(rv); createCpandaCmd(xmlPoint(ptr, x, y, sys, sky, format), anum, xmlAngles(angv, angvsign, angvoffset, anum, angvformat, sys, sky), rnum, xmlDistance(ptr, rv, rnum, rvsys, rvdist), color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "epanda", 6)) { int anum = xmlCount(angv); int rnum = xmlCount(rv); createEpandaCmd(xmlPoint(ptr, x, y, sys, sky, format), anum, xmlAngles(angv, angvsign, angoffset, anum, angvformat, sys, sky), rnum, xmlDistance(ptr, rv, rv2, rnum, rvsys, rvdist), xmlAngle(ang, angsign, angoffset, angformat, sys, sky), color, dash, width, font, text, props, comment, taglist, cblist); } else if (STRCMP(shape, "bpanda", 6)) { int anum = xmlCount(angv); int rnum = xmlCount(rv); createBpandaCmd(xmlPoint(ptr, x, y, sys, sky, format), anum, xmlAngles(angv, angvsign, angvoffset, anum, angvformat, sys, sky), rnum, xmlDistance(ptr, rv, rv2, rnum, rvsys, rvdist), xmlAngle(ang, angsign, angoffset, angformat, sys, sky), color, dash, width, font, text, props, comment, taglist, cblist); } } void Base::xmlSetProps(unsigned short* props, unsigned short prop, char* str) { if (atoi(str)) *props |= prop; else *props &= ~prop; } int Base::xmlCount(const char* col) { int cnt=0; char* cc = dupstr(col); char* tok = strtok(cc, " "); while (tok) { cnt++; tok = strtok(NULL, " "); } delete [] cc; return cnt; } Vector Base::xmlPoint(FitsImage* ptr, const char* xstr, const char* ystr, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int which) { if (!xstr || !ystr) return Vector(); char* x =NULL; char* y =NULL; char* xcc =NULL; char* ycc =NULL; if (which>0) { xcc = dupstr(xstr); x = strtok(xcc, " "); for (int ii=0; iimapToRef(Vector(atof(x),atof(y)), sys); break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: rr = ptr->mapToRef(Vector(atof(x),atof(y)), sys, sky); break; case Coord::SEXAGESIMAL: { double xx=parseSEXStr(x); double yy=parseSEXStr(y); switch (sky) { case Coord::FK4: case Coord::FK4_NO_E: case Coord::FK5: case Coord::ICRS: xx = xx/24.*360.; break; case Coord::GALACTIC: case Coord::SUPERGALACTIC: case Coord::ECLIPTIC: case Coord::HELIOECLIPTIC: break; } rr = ptr->mapToRef(Vector(xx,yy), sys, sky); } } } else rr = ptr->mapToRef(Vector(atof(x),atof(y)), sys); } if (which>0) { if (xcc) delete [] xcc; if (ycc) delete [] ycc; } return rr; } List* Base::xmlVertex(FitsImage* ptr, const char* x, const char* y, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { List* list = new List; int cnt= xmlCount(x); for (int ii=0; iiappend(n); } return list; } double* Base::xmlDistance(FitsImage* ptr, const char* r, int cnt, Coord::CoordSystem sys, Coord::SkyDist dist) { double* rr = new double[cnt]; char* cc = dupstr(r); char* tok = strtok(cc, " "); for (int ii=0; iimapLenToRef(rr[ii], sys, dist); return rr; } Vector* Base::xmlDistance(FitsImage* ptr, const char* r, const char* r2, int cnt, Coord::CoordSystem sys, Coord::SkyDist dist) { Vector* vv = new Vector[cnt]; { char* cc = dupstr(r); char* tok = strtok(cc, " "); for (int ii=0; iimapLenToRef(vv[ii], sys, dist); return vv; } double Base::xmlAngle(const char* angle, int sign, double offset, Coord::AngleFormat format, Coord::CoordSystem sys, Coord::SkyFrame sky) { switch (format) { case Coord::DEG: return mapAngleToRef(sign*degToRad(atof(angle))+offset, sys, sky); case Coord::RAD: return mapAngleToRef(sign*atof(angle)+offset, sys, sky); } } double* Base::xmlAngles(const char* angle, int sign, double offset, int cnt, Coord::AngleFormat format, Coord::CoordSystem sys, Coord::SkyFrame sky) { double* ang = new double[cnt]; char* cc = dupstr(angle); char* tok = strtok(cc, " "); for (int ii=0; ii" << endl << "" << endl << "" << endl << "" << endl << "" << endl << "" << endl << "" << endl << "" << endl << "DS9 version 4.1" << endl; str << "" << endl; switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; break; default: if (keyContext->fits->hasWCS(sys)) { if (keyContext->fits->hasWCSCel(sys)) { // determine ucd char* xucd=NULL; char* yucd=NULL; switch (sky) { case Coord::FK4: case Coord::FK4_NO_E: case Coord::FK5: case Coord::ICRS: xucd = dupstr("pos.eq.ra;meta.main"); yucd = dupstr("pos.eq.dec;meta.main"); break; case Coord::GALACTIC: case Coord::SUPERGALACTIC: xucd = dupstr("pos.galactic.lon;meta.main"); yucd = dupstr("pos.galactic.lat;meta.main"); break; case Coord::ECLIPTIC: case Coord::HELIOECLIPTIC: xucd = dupstr("pos.ecliptic.lon;meta.main"); yucd = dupstr("pos.ecliptic.lat;meta.main"); break; } switch (format) { case Coord::DEGREES: str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; break; case Coord::SEXAGESIMAL: str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; break; } str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; } else { str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; } } } str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl; str << "" << endl << "" << endl; } void Base::markerListXMLFooter(ostream& str) { str << "" << endl << "" << endl << "
" << endl << "
" << endl << "
" << endl; } saods9/tksao/frame/frsave.C000644 000765 000000 00000031352 12764622777 016221 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "context.h" #include "framebase.h" #include "framergb.h" #include "fitsimage.h" #include "outfile.h" #include "outchannel.h" #include "outsocket.h" #include "sigbus.h" void Base::saveFits(OutFitsStream& str) { FitsImage* ptr = currentContext->fits; if (!ptr) return; int dd = currentContext->naxis(2); if (!ptr->isIIS()) { ptr->saveFitsHeader(str,dd); size_t cnt =0; FitsImage* sptr = ptr; while (sptr) { cnt += sptr->saveFits(str); sptr = sptr->nextSlice(); } ptr->saveFitsPad(str,cnt,'\0'); } else { ptr->saveFitsIISHeader(str); size_t cnt = ptr->saveFitsIIS(str); ptr->saveFitsPad(str,cnt,'\0'); } } void Base::saveFitsTable(OutFitsStream& str) { FitsImage* ptr = currentContext->fits; if (ptr) { if (ptr->isTable()) ptr->saveFitsTable(str); else { Tcl_AppendResult(interp, " not a fits table", NULL); result = TCL_ERROR; } } } void Base::saveFitsSlice(OutFitsStream& str) { FitsImage* ptr = currentContext->cfits; if (!ptr) return; ptr->saveFitsHeader(str,0); size_t cnt = ptr->saveFits(str); ptr->saveFitsPad(str,cnt,'\0'); } void Base::saveFitsExtCube(OutFitsStream& str) { FitsImage* ptr = currentContext->fits; if (!ptr) return; ptr->saveFitsPrimHeader(str); while (ptr) { ptr->saveFitsXtHeader(str, 0); size_t cnt = ptr->saveFits(str); ptr->saveFitsPad(str,cnt,'\0'); ptr = ptr->nextSlice(); } } void Base::saveFitsMosaic(OutFitsStream& str, int which) { FitsImage* ptr = currentContext->fits; int dd = currentContext->naxis(2); // which 1 to n which--; while (ptr && which) { ptr = ptr->nextMosaic(); which--; } if (!ptr) return; ptr->saveFitsHeader(str,dd); size_t cnt =0; FitsImage* sptr = ptr; while (sptr) { cnt += sptr->saveFits(str); sptr = sptr->nextSlice(); } ptr->saveFitsPad(str,cnt,'\0'); } void Base::saveFitsMosaicImage(OutFitsStream& str) { FitsImage* ptr = currentContext->fits; if (!ptr) return; int dd = currentContext->naxis(2); ptr->saveFitsPrimHeader(str); while (ptr) { ptr->saveFitsXtHeader(str,dd); size_t cnt =0; FitsImage* sptr = ptr; while (sptr) { cnt += sptr->saveFits(str); sptr = sptr->nextSlice(); } ptr->saveFitsPad(str,cnt,'\0'); ptr = ptr->nextMosaic(); } } void FrameRGB::saveFitsRGBImage(OutFitsStream& str) { FitsImage* ptr = keyContext->fits; if (!ptr) return; // fake primary header ptr->saveFitsPrimHeader(str); for (int ii=0; ii<3; ii++) { if (context[ii].fits) { context[ii].fits->saveFitsXtHeader(str,0); size_t cnt = context[ii].fits->saveFits(str); context[ii].fits->saveFitsPad(str,cnt,'\0'); } } } void FrameRGB::saveFitsRGBCube(OutFitsStream& str) { FitsImage* ptr = keyContext->fits; if (!ptr) return; int ss =0; for (int ii=0; ii<3; ii++) if (context[ii].fits) ss++; ptr->saveFitsHeader(str,ss); size_t cnt =0; for (int ii=0; ii<3; ii++) if (context[ii].fits) cnt += context[ii].fits->saveFits(str); ptr->saveFitsPad(str,cnt,'\0'); } void Base::saveArray(OutFitsStream& str, FitsFile::ArchType endian) { FitsImage* ptr = currentContext->fits; if (!ptr) return; // set endian if needed if (endian == FitsFile::NATIVE) { if (lsb()) endian = FitsFile::LITTLE; else endian = FitsFile::BIG; } // dump each slice while (ptr) { ptr->saveArray(str,endian); ptr = ptr->nextSlice(); } } void FrameRGB::saveArrayRGBCube(OutFitsStream& str, FitsFile::ArchType endian) { FitsImage* ptr = keyContext->fits; if (!ptr) return; // set endian if needed if (endian == FitsFile::NATIVE) { if (lsb()) endian = FitsFile::LITTLE; else endian = FitsFile::BIG; } for (int ii=0; ii<3; ii++) if (context[ii].fits) context[ii].fits->saveArray(str,endian); } void Base::saveNRRD(OutFitsStream& str, FitsFile::ArchType endian) { FitsImage* ptr = currentContext->fits; if (!ptr) return; // set endian if needed if (endian == FitsFile::NATIVE) { if (lsb()) endian = FitsFile::LITTLE; else endian = FitsFile::BIG; } // dump header ostringstream hstr; hstr << "NRRD0002" << endl; if (currentContext->naxis(2)>1) { hstr << "dimension: 3" << endl; hstr << "sizes: " << ptr->naxis(0) << ' ' << ptr->naxis(1) << ' ' << currentContext->naxis(2) << endl; } else { hstr << "dimension: 2" << endl; hstr << "sizes: " << ptr->naxis(0) << ' ' << ptr->naxis(1) << endl; } switch (ptr->bitpix()) { case 8: hstr << "type: char" << endl; break; case 16: hstr << "type: short" << endl; break; case 32: hstr << "type: int" << endl; break; case 64: hstr << "type: longlong" << endl; break; case -32: hstr << "type: float" << endl; break; case -64: hstr << "type: double" << endl; break; } if (abs(ptr->bitpix()) > 8) { switch (endian) { case FitsFile::LITTLE: hstr << "endian: little" << endl; break; case FitsFile::BIG: hstr << "endian: big" << endl; break; default: // na break; } } hstr << "encoding: raw" << endl; // very important hstr << endl << ends; str.write((char*)hstr.str().c_str(),hstr.str().length()); // now dump each slice while (ptr) { ptr->saveArray(str,endian); ptr = ptr->nextSlice(); } } void Base::saveENVI(ostream& hstr, OutFitsStream& fstr, FitsFile::ArchType endian) { FitsImage* ptr = currentContext->fits; if (!ptr) return; // set endian if needed if (endian == FitsFile::NATIVE) { if (lsb()) endian = FitsFile::LITTLE; else endian = FitsFile::BIG; } // header hstr << "ENVI" << endl; hstr << "description = {}" << endl; hstr << "samples = " << ptr->naxis(0) << endl; hstr << "lines = " << ptr->naxis(1) << endl; if (currentContext->naxis(2)>1) { hstr << "bands = " << currentContext->naxis(2) << endl; } hstr << "header offset = 0" << endl; hstr << "file type = ENVI Standard" << endl; hstr << "data type = "; switch (ptr->bitpix()) { case 8: hstr << "1" << endl; break; case 16: hstr << "2" << endl; break; case -16: hstr << "12" << endl; break; case 32: hstr << "3" << endl; break; case 64: hstr << "14" << endl; break; case -32: hstr << "4" << endl; break; case -64: hstr << "5" << endl; break; } hstr << "interleave = bsq" << endl; hstr << "byte order = "; switch (endian) { case FitsFile::LITTLE: hstr << "0" << endl; break; case FitsFile::BIG: hstr << "1" << endl; break; default: // na break; } // now dump each slice while (ptr) { ptr->saveArray(fstr,endian); ptr = ptr->nextSlice(); } } void FrameBase::saveFitsResample(OutFitsStream& str) { int& width = options->width; int& height = options->height; int bitpix_ = -32; int datapixels_ = width*height; int realbytes_ = datapixels_ * (abs(bitpix_)/8); int datablocks_ = (realbytes_ + (FTY_BLOCK-1))/FTY_BLOCK; int databytes_ = datablocks_ * FTY_BLOCK; // create header FitsHead hd(width, height, 1, bitpix_); // write keywords saveFitsResampleKeyword(str, hd); // write header str.write(hd.cards(), hd.headbytes()); // write data saveFitsResampleFits(str); // pad rest of block { int diff = databytes_ - realbytes_; char buf[diff]; memset(buf,'\0',diff); str.write(buf, diff); } } void FrameBase::saveFitsResampleKeyword(OutFitsStream& str, FitsHead& dst) { FitsHead* src = currentContext->fits->head(); Vector center = Vector(options->width, options->height)/2.; // OBJECT char* object = src->getString("OBJECT"); if (object) { dst.appendString("OBJECT", object, NULL); delete [] object; } // DATE-OBS char* date = src->getString("DATE"); if (date) { dst.appendString("DATE", date, NULL); delete [] date; } char* dateobs = src->getString("DATE-OBS"); if (dateobs) { dst.appendString("DATE-OBS", dateobs, NULL); delete [] dateobs; } char* timeobs = src->getString("TIME-OBS"); if (timeobs) { dst.appendString("TIME-OBS", timeobs, NULL); delete [] timeobs; } char* dateend = src->getString("DATE-END"); if (dateend) { dst.appendString("DATE-END", dateend, NULL); delete [] dateend; } char* timeend = src->getString("TIME-END"); if (timeend) { dst.appendString("TIME-END", timeend, NULL); delete [] timeend; } // LTMV,DTMV if (!isMosaic()) { if (currentContext->fits->hasLTMV()) { Matrix ltmv = currentContext->fits->physicalToRef * refToWidget * Translate(-center) * Translate(1,0) * FlipY() * Translate(center); dst.appendReal("LTM1_1", ltmv[0][0], 9, NULL); dst.appendReal("LTM1_2", ltmv[0][1], 9, NULL); dst.appendReal("LTM2_1", ltmv[1][0], 9, NULL); dst.appendReal("LTM2_2", ltmv[1][1], 9, NULL); dst.appendReal("LTV1", ltmv[2][0], 9, NULL); dst.appendReal("LTV2", ltmv[2][1], 9, NULL); } } else { if (currentContext->fits->hasDTMV()) { Matrix dtmv = currentContext->fits->detectorToRef * refToWidget * Translate(-center) * Translate(1,0) * FlipY() * Translate(center); dst.appendReal("DTM1_1", dtmv[0][0], 9, NULL); dst.appendReal("DTM1_2", dtmv[0][1], 9, NULL); dst.appendReal("DTM2_1", dtmv[1][0], 9, NULL); dst.appendReal("DTM2_2", dtmv[1][1], 9, NULL); dst.appendReal("DTV1", dtmv[2][0], 9, NULL); dst.appendReal("DTV2", dtmv[2][1], 9, NULL); } } // WCS if (currentContext->fits->hasWCS(Coord::WCS)) { WorldCoor* wcs = currentContext->fits->getWCS(Coord::WCS); // abort if this is a DSS, ZPN, TNX if (!strncmp(wcs->ptype,"DSS",3) || !strncmp(wcs->ptype,"ZPN",3) || !strncmp(wcs->ptype,"TNX",3)) return; dst.appendString("RADESYS", wcs->radecsys, NULL); dst.appendReal("EQUINOX", wcs->equinox, 9, NULL); dst.appendString("CTYPE1", wcs->ctype[0], NULL); dst.appendString("CTYPE2", wcs->ctype[1], NULL); dst.appendReal("CRVAL1", wcs->crval[0], 9, NULL); dst.appendReal("CRVAL2", wcs->crval[1], 9, NULL); char* cunit1 = src->getString("CUNIT1"); if (cunit1) { dst.appendString("CUNIT1", cunit1, NULL); delete [] cunit1; } char* cunit2 = src->getString("CUNIT2"); if (cunit2) { dst.appendString("CUNIT2", cunit2, NULL); delete [] cunit2; } // crpix Vector crpix = Vector(wcs->crpix[0],wcs->crpix[1]) * currentContext->fits->imageToWidget * Translate(-center) * Translate(1,0) * FlipY() * Translate(center); dst.appendReal("CRPIX1", crpix[0], 9, NULL); dst.appendReal("CRPIX2", crpix[1], 9, NULL); // cd matrix Matrix cd = Matrix(wcs->cd[0],wcs->cd[1],wcs->cd[2],wcs->cd[3],0,0) * currentContext->fits->imageToRef * refToUser * wcsOrientationMatrix * Rotate(wcsRotation) * orientationMatrix * Scale(zoom_.invert()) * Rotate(rotation) * Translate(center) * Translate(-center) * Translate(1,0) * FlipY() * Translate(center); dst.appendReal("CD1_1", cd.matrix(0,0), 9, NULL); dst.appendReal("CD1_2", cd.matrix(0,1), 9, NULL); dst.appendReal("CD2_1", cd.matrix(1,0), 9, NULL); dst.appendReal("CD2_2", cd.matrix(1,1), 9, NULL); } } void FrameBase::saveFitsResampleFits(OutFitsStream& str) { int& width = options->width; int& height = options->height; // basics FitsImage* sptr = currentContext->fits; int mosaic = isMosaic(); // variable double* mm = sptr->matrixToData(Coord::WIDGET).mm(); FitsBound* params = sptr->getDataParams(currentContext->secMode()); int srcw = sptr->width(); // main loop SETSIGBUS for (int jj=height-1; jj>=0; jj--) { for (int ii=0; iifits; mm = sptr->matrixToData(Coord::WIDGET).mm(); params = sptr->getDataParams(currentContext->secMode()); srcw = sptr->width(); } float v = NAN; do { double xx = ii*mm[0] + jj*mm[3] + mm[6]; double yy = ii*mm[1] + jj*mm[4] + mm[7]; if (xx>=params->xmin && xxxmax && yy>=params->ymin && yyymax) { v = sptr->getValueFloat(long(yy)*srcw + long(xx)); break; } else { if (mosaic) { sptr = sptr->nextMosaic(); if (sptr) { mm = sptr->matrixToData(Coord::WIDGET).mm(); params = sptr->getDataParams(currentContext->secMode()); srcw = sptr->width(); } } } } while (mosaic && sptr); if (lsb()) str.writeSwap((char*)(&v), 4, -32); else str.write((char*)(&v), 4); } } CLEARSIGBUS } saods9/tksao/frame/frscale.C000644 000765 000000 00000014457 12712674011 016336 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "frscale.h" #include "fitsimage.h" FrScale::FrScale() { colorScaleType_ = LINEARSCALE; clipScope_ = LOCAL; clipMode_ = MINMAX; minmaxMode_ = SCAN; low_ = 1; high_ = 100; min_ = 1; max_ = 100; ulow_ = 1; uhigh_ = 100; expo_ = 1000; zContrast_ = .25; zSample_ = 600; zLine_ = 120; minmaxSample_ = 25; autoCutPer_ = 100; secMode_ = IMGSEC; histequ_ = NULL; histequSize_ = 0; histogramX_ = NULL; histogramY_ = NULL; histogramSize_ = 0; datasec_ = 1; } FrScale::~FrScale() { if (histequ_) delete [] histequ_; if (histogramX_) free(histogramX_); if (histogramY_) free(histogramY_); } FrScale::FrScale(const FrScale& a) { colorScaleType_ = a.colorScaleType_; clipScope_ = a.clipScope_; clipMode_ = a.clipMode_; minmaxMode_ = a.minmaxMode_; low_ = a.low_; high_ = a.high_; min_ = a.min_; max_ = a.max_; ulow_ = a.ulow_; uhigh_ = a.uhigh_; expo_ = a.expo_; zContrast_ = a.zContrast_; zSample_ = a.zSample_; zLine_ = a.zLine_; minmaxSample_ = a.minmaxSample_; autoCutPer_ = a.autoCutPer_; secMode_ = a.secMode_; if (a.histequ_) { histequ_ = new double[a.histequSize_]; memcpy(histequ_,a.histequ_,a.histequSize_*sizeof(double)); } else histequ_ = NULL; histequSize_ = a.histequSize_; if (a.histogramX_) { histogramX_ = (double*)calloc(a.histogramSize_, sizeof(double)); memcpy(histogramX_,a.histogramX_,a.histogramSize_*sizeof(double)); } else histogramX_ = NULL; if (a.histogramY_) { histogramY_ = (double*)calloc(a.histogramSize_, sizeof(double)); memcpy(histogramY_,a.histogramY_,a.histogramSize_*sizeof(double)); } else histogramY_ = NULL; histogramSize_ = a.histogramSize_; } FrScale& FrScale::operator=(const FrScale& a) { colorScaleType_ = a.colorScaleType_; clipScope_ = a.clipScope_; clipMode_ = a.clipMode_; minmaxMode_ = a.minmaxMode_; low_ = a.low_; high_ = a.high_; min_ = a.min_; max_ = a.max_; ulow_ = a.ulow_; uhigh_ = a.uhigh_; expo_ = a.expo_; zContrast_ = a.zContrast_; zSample_ = a.zSample_; zLine_ = a.zLine_; minmaxSample_ = a.minmaxSample_; autoCutPer_ = a.autoCutPer_; secMode_ = a.secMode_; if (histequ_) delete histequ_; histequ_ = NULL; if (a.histequ_) { histequ_ = new double[a.histequSize_]; memcpy(histequ_,a.histequ_,a.histequSize_*sizeof(double)); } histequSize_ = a.histequSize_; if (histogramX_) free(histogramX_); histogramX_ = NULL; if (a.histogramX_) { histogramX_ = (double*)calloc(a.histogramSize_, sizeof(double)); memcpy(histogramX_,a.histogramX_,a.histogramSize_*sizeof(double)); } if (histogramY_) free(histogramY_); histogramY_ = NULL; if (a.histogramY_) { histogramY_ = (double*)calloc(a.histogramSize_, sizeof(double)); memcpy(histogramY_,a.histogramY_,a.histogramSize_*sizeof(double)); } histogramSize_ = a.histogramSize_; return *this; } double* FrScale::histequ(FitsImage* fits) { if (DebugPerf) cerr << "FrScale::histequ()" << endl; // if we don't have any data, bail if (!fits) return NULL; // if we already have it, bail if (histequ_) return histequ_; // create pdf or histogram double* pdf = new double[HISTEQUSIZE]; memset(pdf,0,HISTEQUSIZE*sizeof(double)); switch (clipScope_) { case GLOBAL: { FitsImage* ptr = fits; while (ptr) { FitsImage* sptr = ptr; while (sptr) { sptr->hist(pdf, HISTEQUSIZE, low_, high_, secMode_); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } break; case LOCAL: { FitsImage* ptr = fits; while (ptr) { ptr->hist(pdf, HISTEQUSIZE, low_, high_, secMode_); ptr = ptr->nextMosaic(); } } break; } // find a total/average double total, average; { total = 0; for (int ii=0; ii=average && color0) { for (int ii=0; iihist(histogramY_, nn, min_, max_, secMode_); sptr = sptr->nextSlice(); } ptr = ptr->nextMosaic(); } } break; case LOCAL: { FitsImage* ptr = fits; while (ptr) { ptr->hist(histogramY_, nn, min_, max_, secMode_); ptr = ptr->nextMosaic(); } } break; } } void FrScale::clearHistogram() { if (DebugPerf) cerr << "FrScale::clearHistogram" << endl; if (histogramX_) free(histogramX_); histogramX_ = NULL; if (histogramY_) free(histogramY_); histogramY_ = NULL; histogramSize_ = 0; } ostream& operator<<(ostream& s, FrScale& fr) { s << "scope: " << fr.clipScope() << endl; s << "mode: " << fr.clipMode() << endl; s << "low: " << fr.low() << endl; s << "high: " << fr.high() << endl; s << "min: " << fr.min() << endl; s << "max: " << fr.max() << endl; return s; } saods9/tksao/frame/frscale.h000644 000765 000000 00000007730 12705446250 016403 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __frscale_h__ #define __frscale_h__ #include #include #include using namespace std; #include "vector.h" class FitsImage; class FrScale { public: enum ColorScaleType {LINEARSCALE, LOGSCALE, POWSCALE, SQRTSCALE, SQUAREDSCALE, ASINHSCALE, SINHSCALE, HISTEQUSCALE, IISSCALE}; enum ClipScope {GLOBAL, LOCAL}; enum ClipMode {MINMAX, ZSCALE, ZMAX, AUTOCUT, USERCLIP}; enum MinMaxMode {SCAN, SAMPLE, DATAMIN, IRAFMIN}; enum SecMode {IMGSEC, DATASEC, CROPSEC}; private: ColorScaleType colorScaleType_; // color scale type ClipScope clipScope_; // color scale clip scope ClipMode clipMode_; // color scale clip mode MinMaxMode minmaxMode_; // method to use for determining minmax double low_; // low cut level for all data double high_; // high cut level for all data double min_; // min for all data Vector minXY_; double max_; // max for all data Vector maxXY_; double ulow_; // low cut via user for all data double uhigh_; // high cut via user for all data float expo_; // log scale exponent float zContrast_; // zscale slope transfer function int zSample_; // zscale optimal sample size int zLine_; // zscale number of lines to sample int minmaxSample_; // minmax sampling incr float autoCutPer_; // autoCut percentage SecMode secMode_; // use keyword DATASEC double* histequ_; // image histogram equalization xfer function int histequSize_; double* histogramX_; // scale histogram double* histogramY_; // scale histogram int histogramSize_; int datasec_; public: FrScale(); ~FrScale(); FrScale(const FrScale&); FrScale& operator=(const FrScale&); ColorScaleType colorScaleType() {return colorScaleType_;} ClipScope clipScope() {return clipScope_;} ClipMode clipMode() {return clipMode_;} MinMaxMode minmaxMode() {return minmaxMode_;} double low() {return low_;} double high() {return high_;} double min() {return min_;} const Vector& minXY() {return minXY_;} double max() {return max_;} const Vector& maxXY() {return maxXY_;} double ulow() {return ulow_;} double uhigh() {return uhigh_;} float expo() {return expo_;} float zContrast() {return zContrast_;} int zSample() {return zSample_;} int zLine() {return zLine_;} int minmaxSample() {return minmaxSample_;} float autoCutPer() {return autoCutPer_;} SecMode secMode() {return secMode_;} double* histogramX() {return histogramX_;} double* histogramY() {return histogramY_;} int datasec() {return datasec_;} void setColorScaleType(ColorScaleType v) {colorScaleType_ = v;} void setClipScope(ClipScope v) {clipScope_ = v;} void setClipMode(ClipMode v) {clipMode_ = v;} void setMinMaxMode(MinMaxMode v) {minmaxMode_ = v;} void setLow(double v) {low_ = v;} void setHigh(double v) {high_ = v;} void setMin(double mm, const Vector& vv) {min_ = mm; minXY_ = vv;} void setMax(double mm, const Vector& vv) {max_ = mm; maxXY_ = vv;} void setULow(double v) {ulow_ = v;} void setUHigh(double v) {uhigh_ = v;} void setExpo(float e) {expo_ = e>10 ? e : 10;} void setZContrast(float v) {zContrast_ = v;} void setZSample(int v) {zSample_ = v;} void setZLine(int v) {zLine_ = v;} void setMinMaxSample(int v) {minmaxSample_ = v;} void setAutoCutPer(float v) {autoCutPer_ = v;} void setSecMode(SecMode v) {secMode_ = v;} void resetSecMode() {secMode_ = datasec_ ? DATASEC : IMGSEC;} void setDataSec(int d) {datasec_ = d;} double* histequ(FitsImage*); void clearHistequ(); void histogram(FitsImage*, int); void clearHistogram(); }; ostream& operator<<(ostream&, FrScale&); #endif saods9/tksao/frame/fvcontour.C000644 000765 000000 00000027414 12764623376 016760 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "context.h" #include "base.h" #include "fitsimage.h" #include "fvcontour.h" #include "sigbus.h" #ifdef INTERP #undef INTERP #endif #define INTERP (((Base*)parent_)->interp) static const char* methodName_[] = { "smooth", "block" }; // It is a modified version of contour code found in Fv 2.4 // Fv may be obtained from the HEASARC (High Energy Astrophysics Science // Archive Research Center) FTOOLS Web site at: // http://heasarc.gsfc.nasa.gov/ftools/fv.html // The original author is unknown. FVContour::FVContour() { parent_ =NULL; colorName_ = dupstr("green"); lineWidth_ =1; dash_ =0; dlist_[0] =8; dlist_[1] =3; method_ = BLOCK; smooth_ =4; numLevel_ =5; colorScaleType_ = FrScale::LINEARSCALE; clipMode_ = (float)FrScale::MINMAX; expo_ =1000; limits_ = Vector(0,100); level_ =NULL; scale_ =NULL; } FVContour::~FVContour() { if (colorName_) delete [] colorName_; if (level_) delete [] level_; if (scale_) delete scale_; } void FVContour::create(Base* pp, FitsImage* fits, FrScale* fr, const char* cc, int ww, int dd, Method mm, int nn, int rr, const char* ll, FrScale::ColorScaleType sc, float exp, float cm, Vector lim) { lcontourlevel_.deleteAll(); parent_ = pp; colorName_ = dupstr(cc); lineWidth_ = ww; dash_ = dd; method_ = mm; smooth_ = rr; numLevel_ = nn; colorScaleType_ = sc; clipMode_ = cm; expo_ = exp; limits_ = lim; level_ = dupstr(ll); if (level_ && strlen(level_)>0) { int cnt = 0; double levels[100]; string x(level_); istringstream str(x); while ((cnt<100) && (str >> levels[cnt])) cnt++; scale_ = new InverseScale(cnt, levels); } else buildScale(fits, fr); append(fits); } void FVContour::buildScale(FitsImage* fits, FrScale* fr) { switch (colorScaleType_) { case FrScale::LINEARSCALE: scale_ = new LinearInverseScale(numLevel_, limits_[0], limits_[1]); break; case FrScale::LOGSCALE: scale_ = new LogInverseScale(numLevel_, limits_[0], limits_[1], expo_); break; case FrScale::POWSCALE: scale_ = new PowInverseScale(numLevel_, limits_[0], limits_[1], expo_); break; case FrScale::SQRTSCALE: scale_ = new SqrtInverseScale(numLevel_, limits_[0], limits_[1]); break; case FrScale::SQUAREDSCALE: scale_ = new SquaredInverseScale(numLevel_, limits_[0], limits_[1]); break; case FrScale::ASINHSCALE: scale_ = new AsinhInverseScale(numLevel_, limits_[0], limits_[1]); break; case FrScale::SINHSCALE: scale_ = new SinhInverseScale(numLevel_, limits_[0], limits_[1]); break; case FrScale::HISTEQUSCALE: scale_ = new HistEquInverseScale(numLevel_, limits_[0], limits_[1], fr->histequ(fits), HISTEQUSIZE); break; case FrScale::IISSCALE: scale_ = new IISInverseScale(numLevel_, limits_[0], limits_[1], fits->iisz()); break; } } void FVContour::update(FitsImage* fits) { if (lcontourlevel_.isEmpty()) return; lcontourlevel_.deleteAll(); append(fits); } void FVContour::update(FitsImage* fits, FrScale* fr) { if (lcontourlevel_.isEmpty()) return; lcontourlevel_.deleteAll(); if (scale_) delete scale_; limits_ = Vector(fr->low(),fr->high()); expo_ = fr->expo(); buildScale(fits, fr); if (level_) delete [] level_; ostringstream str; str << *scale_ << ends; level_ = dupstr(str.str().c_str()); append(fits); } const char* FVContour::methodName() { return methodName_[method_]; } void FVContour::append(FitsImage* fits) { if (smooth_ == 1) unity(fits); else switch (method_) { case SMOOTH: nobin(fits); break; case BLOCK: bin(fits); break; } } void FVContour::unity(FitsImage* fits) { FitsBound* params = fits->getDataParams(((Base*)parent_)->currentContext->secMode()); long width = fits->width(); long height = fits->height(); // blank img long size = width*height; double* img = new double[size]; if (!img) { internalError("FVContour could not allocate enough memory"); return; } for (long ii=0; iiymin; jjymax; jj++) { for(long ii=params->xmin; iixmax; ii++) { long kk = jj*width + ii; double vv = fits->getValueDouble(kk); if (isfinite(vv)) img[kk] = vv; } } CLEARSIGBUS // do contours build(width, height, img, fits->dataToRef); // clean up delete [] img; } void FVContour::nobin(FitsImage* fits) { long width = fits->width(); long height = fits->height(); // blank img long size = width*height; double* img = new double[size]; if (!img) { internalError("FVContour could not allocate enough memory"); return; } for (long ii=0; iidataToRef); // cleanup delete kernal; delete [] img; } void FVContour::convolve(FitsImage* fits, double* kernal, double* dest, int r) { FitsBound* params = fits->getDataParams(((Base*)parent_)->currentContext->secMode()); long width = fits->width(); int rr = 2*r+1; SETSIGBUS for (long jj=params->ymin; jjymax; jj++) { for (long ii=params->xmin; iixmax; ii++) { long ir = ii-r; long irr = ii+r; long jr = jj-r; long jrr = jj+r; for (long n=jr, nn=0; n<=jrr; n++, nn++) { if (n>=params->ymin && nymax) { for (long m=ir, mm=0; m<=irr; m++, mm++) { if (m>=params->xmin && mxmax) { double vv = fits->getValueDouble(n*width+m); if (isfinite(vv)) { double kk = kernal[nn*rr+mm]; double* ptr = dest+(jj*width+ii); if (*ptr == FLT_MIN) *ptr = vv*kk; else *ptr += vv*kk; } } } } } } } CLEARSIGBUS } double* FVContour::tophat(int r) { int rr = 2*r+1; int ksz = rr*rr; double* kernal = new double[ksz]; memset(kernal, 0, ksz*sizeof(double)); double kt = 0; for (int yy=-r; yy<=r; yy++) { for (int xx=-r; xx<=r; xx++) { if ((xx*xx + yy*yy) <= r*r) { kernal[(yy+r)*rr+(xx+r)] = 1; kt++; } } } // normalize kernal for (int aa=0; aagetDataParams(((Base*)parent_)->currentContext->secMode()); long width = fits->width(); long height = fits->height(); int rr = smooth_; long w2 = (long)(width/rr); long h2 = (long)(height/rr); Matrix m = Translate((Vector(-width,-height)/2).floor()) * Scale(1./rr) * Translate((Vector(w2,h2)/2).floor()); Matrix n = m.invert(); double* mm = m.mm(); double* img = new double[w2 * h2]; { for (long jj=0; jjymin; jjymax; jj++) { for (long ii=params->xmin; iixmax; ii++) { double xx = ii*mm[0] + jj*mm[3] + mm[6]; double yy = ii*mm[1] + jj*mm[4] + mm[7]; if (xx >= 0 && xx < w2 && yy >= 0 && yy < h2) { long kk = (long(yy)*w2 + long(xx)); double v = fits->getValueDouble(jj*width + ii); if (isfinite(v)) { if (count[kk]) img[kk] += v; else img[kk] = v; count[kk]++; } } } } for (long kk=0; kkdataToRef; build(w2, h2, img, w); delete [] img; } void FVContour::build(long xdim, long ydim, double *image, Matrix& mx) { long nelem = xdim*ydim; char* usedGrid = new char[nelem]; double** rows = new double*[ydim]; for (long jj=0; jjsize(); c++) { double cntour = scale_->level(c); ContourLevel* cl =new ContourLevel(parent_, cntour, colorName_, lineWidth_, dash_, dlist_); memset(usedGrid,0,nelem); // Search outer edge long ii,jj; // Search top for (jj=0, ii=0; ii=0; ii--) if (rows[jj][ii+1]=0; jj--) if (rows[jj+1][ii]lcontour().isEmpty()) lcontourlevel_.append(cl); } delete [] usedGrid; delete [] rows; } void FVContour::trace(long xdim, long ydim, double cntr, long xCell, long yCell, int side, double** rows, char* usedGrid, Matrix& mx, ContourLevel* cl) { long ii = xCell; long jj = yCell; int origSide = side; int init = 1; int done = (ii<0 || ii>=xdim-1 || (jj<0 && jj>=ydim-1)); Contour* cc = new Contour(cl); while (!done) { int flag = 0; double a = rows[jj][ii]; double b = rows[jj][ii+1]; double c = rows[jj+1][ii+1]; double d = rows[jj+1][ii]; double X, Y; if (init) { init = 0; switch (side) { case top: X = (cntr-a) / (b-a) + ii; Y = jj; break; case right: X = ii+1; Y = (cntr-b) / (c-b) + jj; break; case bottom: X = (cntr-c) / (d-c) + ii; Y = jj+1; break; case left: X = ii; Y = (cntr-a) / (d-a) + jj; break; } } else { if (side==top) usedGrid[jj*xdim + ii] = 1; do { if (++side == none) side = top; switch (side) { case top: if (a>=cntr && cntr>b) { flag = 1; X = (cntr-a) / (b-a) + ii; Y = jj; jj--; } break; case right: if( b>=cntr && cntr>c ) { flag = 1; X = ii+1; Y = (cntr-b) / (c-b) + jj; ii++; } break; case bottom: if( c>=cntr && cntr>d ) { flag = 1; X = (cntr-d) / (c-d) + ii; Y = jj+1; jj++; } break; case left: if( d>=cntr && cntr>a ) { flag = 1; X = ii; Y = (cntr-a) / (d-a) + jj; ii--; } break; } } while (!flag); if (++side == none) side = top; if (++side == none) side = top; if (ii==xCell && jj==yCell && side==origSide) done = 1; if (ii<0 || ii>=xdim-1 || jj<0 || jj>=ydim-1) done = 1; } cc->lvertex().append(new Vertex(Vector(X+.5,Y+.5)*mx)); } if (!cc->lvertex().isEmpty()) cl->lcontour().append(cc); else delete cc; } saods9/tksao/frame/fvcontour.h000644 000765 000000 00000003713 12764623376 017021 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fvcontour_h__ #define __fvcontour_h__ #include "vector.h" #include "contour.h" #include "frscale.h" #include "inversescale.h" class FVContour { public: enum Method {SMOOTH, BLOCK}; private: enum {top, right, bottom, left, none}; Base* parent_; List lcontourlevel_; char* colorName_; int lineWidth_; int dash_; int dlist_[2]; Method method_; int smooth_; int numLevel_; FrScale::ColorScaleType colorScaleType_; float expo_; float clipMode_; Vector limits_; char* level_; InverseScale* scale_; void buildScale(FitsImage* fits, FrScale* fr); void unity(FitsImage*); void bin(FitsImage*); void nobin(FitsImage*); void convolve(FitsImage*, double*, double*, int); double* tophat(int); double* gaussian(int); void build(long xdim, long ydim, double *image, Matrix&); void trace(long xdim, long ydim, double cntr, long xCell, long yCell, int side, double** rows, char* useGrid, Matrix&, ContourLevel*); public: FVContour(); ~FVContour(); List& lcontourlevel() {return lcontourlevel_;} void create(Base*, FitsImage*, FrScale*, const char*, int, int, Method, int, int, const char*, FrScale::ColorScaleType, float, float, Vector); void append(FitsImage*); void update(FitsImage*); void update(FitsImage*, FrScale*); int isEmpty() {return lcontourlevel_.isEmpty();} const char* methodName(); char* level() {return level_;} int numLevel() {return numLevel_;} int smooth() {return smooth_;} int colorScaleType() {return colorScaleType_;} float expo() {return expo_;} float clipMode() {return clipMode_;} Vector limits() {return limits_;} const char* getColorName() {return colorName_;} int getDash() {return dash_;} int getLineWidth() {return lineWidth_;} }; #endif saods9/tksao/frame/grid.C000644 000765 000000 00000001012 12705446250 015627 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "grid.h" #include "context.h" #include "fitsimage.h" extern "C" { #include "ast.h" } Grid::Grid(Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, GridType type, const char* v) : type_(type), system_(sys), sky_(sky), skyFormat_(format) { vars_ = dupstr(v); } Grid::~Grid() { if (vars_) delete [] vars_; } saods9/tksao/frame/grid.h000644 000765 000000 00000001674 12705446250 015712 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __grid_h__ #define __grid_h__ #include "coord.h" class Grid { public: enum GridType {ANALYSIS,PUBLICATION}; protected: GridType type_; Coord::CoordSystem system_; Coord::SkyFrame sky_; Coord::SkyFormat skyFormat_; char* vars_; public: Grid(Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, GridType, const char*); virtual ~Grid(); virtual const char* option() =0; virtual void x11() =0; virtual void ps(int) =0; #ifdef MAC_OSX_TK virtual void macosx() =0; #endif #ifdef __WIN32 virtual void win32() =0; #endif GridType type() {return type_;} Coord::CoordSystem system() {return system_;} Coord::SkyFrame sky() {return sky_;} Coord::SkyFormat skyFormat() {return skyFormat_;} const char* vars() {return vars_;} }; #endif saods9/tksao/frame/grid25d.C000644 000765 000000 00000007310 12754670576 016167 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "grid25d.h" #include "context.h" #include "frame3dbase.h" #include "fitsimage.h" extern "C" { #include "ast.h" } extern Grid25dBase* astGrid25dPtr; Grid25d::Grid25d(Widget* p, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, GridType t, const char* o, const char* v) : Grid(sys, sky, format, t, v), Grid25dBase(p,o) {} Grid25d::~Grid25d() {} int Grid25d::doit(RenderMode rm) { Frame3dBase* pp = (Frame3dBase*)parent_; matrix_ = pp->widgetToCanvas; pixmap_ = pp->pixmap; renderMode_ = rm; Context* context = pp->keyContext; FitsImage* fits = context->fits; if (!fits) return 1; // int width = fits->width(); // int height = fits->height(); astClearStatus; // just to make sure astBegin; // start memory management AstFrameSet* frameSet = NULL; FitsBound* params = fits->getDataParams(context->secMode()); switch (system_) { case Coord::IMAGE: frameSet = (AstFrameSet*)matrixMap(fits->refToImage,"Domain=IMAGE"); break; case Coord::PHYSICAL: frameSet = (AstFrameSet*)matrixMap(fits->refToPhysical,"Domain=PHYSICAL"); break; case Coord::AMPLIFIER: frameSet = (AstFrameSet*)matrixMap(fits->refToAmplifier,"Domain=AMPLIFIER"); break; case Coord::DETECTOR: frameSet = (AstFrameSet*)matrixMap(fits->refToDetector,"Domain=DETECTOR"); default: { // imageToData frame/map double ss[] = {-.5, -.5}; AstShiftMap *sm = astShiftMap(2, ss, " "); AstFrame *df = astFrame(2, "Domain=DATA"); // Get 2D SkyFrame AstFrameSet* wcs = (AstFrameSet*)astCopy(fits->getAST(system_)); if (astIsASkyFrame(astGetFrame(wcs, AST__CURRENT))) fits->setAstSkyFrame(wcs, sky_); // astShow(wcs); // Record the index of the current Frame int isky = astGetI(wcs, "Current"); // Add the new DATA Frame into the FrameSet, using the ShiftMap to // connect it to the existing IMAGE Frame. astAddFrame(wcs, AST__BASE, sm, df); // The above call to astAddFrame will have changed the current Frame // in the FrameSet to be the new DATA Frame. First record the index of // the DATA Frame, and then re-instate the original current Frame (i.e. // the SKY Frame). int idata = astGetI(wcs, "Current"); astSetI(wcs, "Current", isky); // make the DATA Frame the new base Frame astSetI(wcs, "Base", idata); frameSet = wcs; } } if (!frameSet) return 0; astSet(frameSet,"Title=%s", " "); // create astPlot float gbox[4]; double pbox[4]; Vector ll = Vector(params->xmin,params->ymin); Vector ur = Vector(params->xmax,params->ymax); // Vector gll = ll * fits->dataToWidget; // Vector gur = ur * fits->dataToWidget; pbox[0] = gbox[0] = ll[0]; pbox[1] = gbox[1] = ll[1]; pbox[2] = gbox[2] = ur[0]; pbox[3] = gbox[3] = ur[1]; // and now create astGrid astGrid25dPtr = this; AstPlot* plot = astPlot(frameSet, gbox, pbox, option_); astGrid(plot); astEnd; // now, clean up memory astGrid25dPtr =NULL; return 1; } void* Grid25d::matrixMap(Matrix& mx, const char* str) { double ss[] = {mx.matrix(0,0),mx.matrix(1,0), mx.matrix(0,1),mx.matrix(1,1)}; double tt[] = {mx.matrix(2,0),mx.matrix(2,1)}; AstMatrixMap* mm = astMatrixMap(2, 2, 0, ss, ""); AstShiftMap* sm = astShiftMap(2, tt, ""); AstCmpMap* cmap = astCmpMap(mm, sm, 1, ""); AstFrame* in = astFrame(2,"Domain=REF"); AstFrame* out = astFrame(2,str); AstFrameSet* frameSet = astFrameSet(in,""); astAddFrame(frameSet,AST__CURRENT,cmap,out); return frameSet; } saods9/tksao/frame/grid25d.h000644 000765 000000 00000001425 12705446250 016217 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __grid25d_h__ #define __grid25d_h__ #include "grid.h" #include "grid25dbase.h" #include "coord.h" class Grid25d : public Grid, public Grid25dBase { private: void* matrixMap(Matrix&, const char*); int doit(RenderMode); public: Grid25d(Widget*, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, GridType, const char*, const char*); ~Grid25d(); const char* option() {return GridBase::option();} void x11() {doit(X11);} void ps(int mode) {mode_=mode; doit(PS);} #ifdef MAC_OSX_TK void macosx() {doit(MACOSX);} #endif #ifdef __WIN32 void win32() {doit(GWIN32);} #endif }; #endif saods9/tksao/frame/grid2d.C000644 000765 000000 00000007036 12754670576 016107 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "grid2d.h" #include "context.h" #include "framebase.h" #include "fitsimage.h" extern "C" { #include "ast.h" } extern Grid2dBase* astGrid2dPtr; Grid2d::Grid2d(Widget* p, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, GridType t, const char* o, const char* v) : Grid(sys, sky, format, t, v), Grid2dBase(p,o) {} Grid2d::~Grid2d() {} int Grid2d::doit(RenderMode rm) { FrameBase* pp = (FrameBase*)parent_; matrix_ = pp->widgetToCanvas; pixmap_ = pp->pixmap; renderMode_ = rm; Context* context = pp->keyContext; FitsImage* fits = context->fits; if (!fits) return 1; // int width = fits->width(); // int height = fits->height(); astClearStatus; // just to make sure astBegin; // start memory management AstFrameSet* frameSet = NULL; AstPlot* plot = NULL; if (!(frameSet = astFrameSet(astFrame(2,"Domain=WIDGET"),""))) { astEnd; return 0; } // map from Widget to Image matrixMap(frameSet,fits->widgetToImage,"Domain=IMAGE"); switch (system_) { case Coord::IMAGE: break; case Coord::PHYSICAL: matrixMap(frameSet,fits->imageToPhysical,"Domain=PHYSICAL"); break; case Coord::AMPLIFIER: matrixMap(frameSet,fits->imageToAmplifier,"Domain=AMPLIFIER"); break; case Coord::DETECTOR: matrixMap(frameSet,fits->imageToDetector,"Domain=DETECTOR"); break; default: { AstFrameSet* wcsfs = (AstFrameSet*)astCopy(fits->getAST(system_)); // set desired skyformat if (astIsASkyFrame(astGetFrame(wcsfs, AST__CURRENT))) fits->setAstSkyFrame(wcsfs, sky_); // add wcs to frameset // this will link frame 2 of frameset to frame 3 wcs with unitMap // set the current of frameset to last astInvert(wcsfs); astAddFrame(frameSet,2,astUnitMap(2,""),wcsfs); astSetI(frameSet,"current",astGetI(frameSet,"nframe")); } } astSet(frameSet,"Title=%s", " "); // create astPlot float gbox[4]; double pbox[4]; switch (type_) { case ANALYSIS: { gbox[0] = pbox[0] = 0; gbox[1] = pbox[1] = 0; gbox[2] = pbox[2] = pp->options->width-1; gbox[3] = pbox[3] = pp->options->height-1; } break; case PUBLICATION: { Matrix mm = fits->imageToWidget; BBox b = pp->imageBBox(pp->context->secMode()); Vector ll = b.ll * mm; Vector lr = b.lr() * mm; Vector ur = b.ur * mm; Vector ul = b.ul() * mm; BBox bb(ll,ll); bb.bound(lr); bb.bound(ur); bb.bound(ul); gbox[0] = pbox[0] = bb.ll[0]; gbox[1] = pbox[1] = bb.ll[1]; gbox[2] = pbox[2] = bb.ur[0]; gbox[3] = pbox[3] = bb.ur[1]; } break; } // and now create astGrid astGrid2dPtr = this; plot = astPlot(frameSet, gbox, pbox, option_); astGrid(plot); astEnd; // now, clean up memory astGrid2dPtr =NULL; return 1; } int Grid2d::matrixMap(void* fs, Matrix& mx, const char* str) { AstFrameSet* frameSet = (AstFrameSet*)fs; double ss[] = {mx.matrix(0,0),mx.matrix(1,0), mx.matrix(0,1),mx.matrix(1,1)}; double tt[] = {mx.matrix(2,0),mx.matrix(2,1)}; AstMatrixMap* mm; if (!(mm= astMatrixMap(2, 2, 0, ss, ""))) return 0; AstShiftMap* sm; if (!(sm = astShiftMap(2, tt, ""))) return 0; AstCmpMap* cmp; if (!(cmp = astCmpMap(mm, sm, 1, ""))) return 0; astAddFrame(frameSet, AST__CURRENT, cmp, astFrame(2, str)); return 1; } saods9/tksao/frame/grid2d.h000644 000765 000000 00000001421 12705446250 016126 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __grid2d_h__ #define __grid2d_h__ #include "grid.h" #include "grid2dbase.h" #include "coord.h" class Grid2d : public Grid, public Grid2dBase { private: int matrixMap(void*, Matrix&, const char*); int doit(RenderMode); public: Grid2d(Widget*, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, GridType, const char*, const char*); ~Grid2d(); const char* option() {return GridBase::option();} void x11() {doit(X11);} void ps(int mode) {mode_=mode; doit(PS);} #ifdef MAC_OSX_TK void macosx() {doit(MACOSX);} #endif #ifdef __WIN32 void win32() {doit(GWIN32);} #endif }; #endif saods9/tksao/frame/grid3d.C000644 000765 000000 00000014045 12754670576 016106 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "grid3d.h" #include "context.h" #include "frame3dbase.h" #include "fitsimage.h" extern "C" { #include "ast.h" } static FitsImage* foobar; void bar(AstMapping* that, int npoint, int ncoord_in, const double* ptr_in[], int forward, int ncoord_out, double* ptr_out[]) { WCSx** wcsx = foobar->wcsx(); if (forward) { for (int ii=0; iicrpix[2]) * wcsx[0]->cd[2] + wcsx[0]->crval[2]; } else { for (int ii=0; iicrval[2]) / wcsx[0]->cd[2] + wcsx[0]->crpix[2] -.5; } } extern Grid3dBase* astGrid3dPtr; Grid3d::Grid3d(Widget* p, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, GridType t, const char* o, const char* v) : Grid(sys, sky, format, t, v), Grid3dBase(p,o) {} Grid3d::~Grid3d() {} int Grid3d::doit(RenderMode rm) { Frame3dBase* pp = (Frame3dBase*)parent_; mx_ = pp->refToWidget3d; rx_ = Matrix3d(pp->wcsOrientationMatrix) * Matrix3d(pp->orientationMatrix) * RotateZ3d(-pp->wcsRotation) * RotateZ3d(-pp->rotation) * RotateY3d(pp->az_) * RotateX3d(pp->el_); matrix_ = pp->widgetToCanvas; pixmap_ = pp->pixmap; renderMode_ = rm; Context* context = pp->keyContext; FitsImage* fits = context->fits; foobar = fits; if (!fits) return 1; // int width = fits->width(); // int height = fits->height(); astClearStatus; // just to make sure astBegin; // start memory management AstFrameSet* frameSet = NULL; AstPlot3D* plot = NULL; FitsBound* params = fits->getDataParams(context->secMode()); FitsZBound* zparams = context->getDataParams(context->secMode()); switch (system_) { case Coord::IMAGE: frameSet = (AstFrameSet*)matrixMap(fits->refToImage,"Domain=IMAGE"); break; case Coord::PHYSICAL: frameSet = (AstFrameSet*)matrixMap(fits->refToPhysical,"Domain=PHYSICAL"); break; case Coord::AMPLIFIER: frameSet = (AstFrameSet*)matrixMap(fits->refToAmplifier,"Domain=AMPLIFIER"); break; case Coord::DETECTOR: frameSet = (AstFrameSet*)matrixMap(fits->refToDetector,"Domain=DETECTOR"); break; default: { // imageToData frame/map double ss[] = {-.5, -.5}; AstShiftMap *sm = astShiftMap(2, ss, " "); AstFrame *df = astFrame(2, "Domain=DATA"); // Get 2D SkyFrame AstFrameSet* wcs = (AstFrameSet*)astCopy(fits->getAST(system_)); if (astIsASkyFrame(astGetFrame(wcs, AST__CURRENT))) fits->setAstSkyFrame(wcs, sky_); // Record the index of the current Frame int isky = astGetI(wcs, "Current"); // Add the new DATA Frame into the FrameSet, using the ShiftMap to // connect it to the existing IMAGE Frame. astAddFrame(wcs, AST__BASE, sm, df); // The above call to astAddFrame will have changed the current Frame // in the FrameSet to be the new DATA Frame. First record the index of // the DATA Frame, and then re-instate the original current Frame (i.e. // the SKY Frame). int idata = astGetI(wcs, "Current"); astSetI(wcs, "Current", isky); // make the DATA Frame the new base Frame astSetI(wcs, "Base", idata); // Create two 1D Frames and a 1D Mapping describing the third axis AstFrame* zbase = astFrame(1,""); AstFrame* zcurr = astFrame(1,""); AstMapping* zmap; if (fits->hasWCSx(system_,2)) { astIntraReg("foo",1,1,bar,0,"testing","me","you"); if (!(zmap = (AstMapping*)astIntraMap("foo",1,1,""))) return 0; } else zmap = (AstMapping*)astUnitMap(1,""); // Use astGetFrame and astGetMapping to get the base and current // Frames from the 2D FrameSet, and the base->current Mapping. AstFrame* wcsbase = (AstFrame*)astGetFrame(wcs,AST__BASE); AstFrame* wcscurr = (AstFrame*)astGetFrame(wcs,AST__CURRENT); AstMapping* wcsmap = (AstMapping*)astGetMapping(wcs,AST__BASE,AST__CURRENT); // Combine the 2D and 1D base Frames into a 3D CmpFrame // Likewise, combine the 2D and 1D current Frames into a 3D CmpFrame AstCmpFrame* cmpwcsbase = astCmpFrame(wcsbase,zbase,""); AstCmpFrame* cmpwcscurr = astCmpFrame(wcscurr,zcurr,""); // Combine the 2D and 1D Mappings into a 3D CmpMap AstCmpMap* cmpwcsmap = astCmpMap(wcsmap,zmap,0,""); // Construct the 3D FrameSet from the new 3D Frames and Mapping frameSet = astFrameSet(cmpwcsbase,""); astAddFrame(frameSet, AST__CURRENT, cmpwcsmap, cmpwcscurr); } } if (!frameSet) return 0; astSet(frameSet,"Title=%s", " "); // create astPlot float gbox[6]; double pbox[6]; // params is a BBOX in DATA coords 0-n Vector3d ll = Vector3d(params->xmin,params->ymin,zparams->zmin); Vector3d ur = Vector3d(params->xmax,params->ymax,zparams->zmax); pbox[0] = gbox[0] = ll[0]; pbox[1] = gbox[1] = ll[1]; pbox[2] = gbox[2] = ll[2]; pbox[3] = gbox[3] = ur[0]; pbox[4] = gbox[4] = ur[1]; pbox[5] = gbox[5] = ur[2]; // and now create astGrid astGrid3dPtr = this; renderMode_ = rm; plot = astPlot3D(frameSet, gbox, pbox, option_); // astShow(plot); astGrid(plot); astEnd; // now, clean up memory astGrid3dPtr =NULL; return 1; } void* Grid3d::matrixMap(Matrix& mx, const char* str) { double ss[] = {mx.matrix(0,0),mx.matrix(1,0), mx.matrix(0,1),mx.matrix(1,1)}; AstMatrixMap* mm; if (!(mm= astMatrixMap(2,2,0,ss,""))) return NULL; double tt[] = {mx.matrix(2,0),mx.matrix(2,1)}; AstShiftMap* sm; if (!(sm = astShiftMap(2,tt,""))) return NULL; AstCmpMap* mapxy; if (!(mapxy = astCmpMap(mm,sm,1,""))) return NULL; AstFrame* in = astFrame(3,"Domain=REF"); AstFrame* out = astFrame(3,str); double uu =.5; AstShiftMap* mapz = astShiftMap(1,&uu,""); AstCmpMap* cmap = astCmpMap(mapxy,mapz,0,""); AstFrameSet* frameSet = astFrameSet(in,""); astAddFrame(frameSet,AST__CURRENT,cmap,out); return frameSet; } saods9/tksao/frame/grid3d.h000644 000765 000000 00000001414 12705446250 016131 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __grid3d_h__ #define __grid3d_h__ #include "grid.h" #include "grid3dbase.h" #include "coord.h" class Grid3d : public Grid, public Grid3dBase { private: void* matrixMap(Matrix&, const char*); int doit(RenderMode); public: Grid3d(Widget*, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, GridType, const char*, const char*); ~Grid3d(); const char* option() {return GridBase::option();} void x11() {doit(X11);} void ps(int mode) {mode_=mode; doit(PS);} #ifdef MAC_OSX_TK void macosx() {doit(MACOSX);} #endif #ifdef __WIN32 void win32() {doit(GWIN32);} #endif }; #endif saods9/tksao/frame/inversescale.C000644 000765 000000 00000010045 12705446251 017374 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "inversescale.h" #include "framebase.h" #include "colorscale.h" InverseScale::InverseScale(int ss) : size_(ss) { level_ = new double[size_]; for (int ii=0; iivv) break; jj++; } double aa = double(jj)/histsize; level_[ii] = aa*dd +low; } } } IISInverseScale::IISInverseScale(int ss, double low, double high, Vector& iisz) : InverseScale(ss) { if (size_==1) { level_[0] = high; return; } double dd = high-low; for (int ii=0; ii IISMAX) level_[ii] = iisz[1]; else level_[ii] = ((vv-1) * (iisz[1]-iisz[0]))/(IISMAX-1) + iisz[0]; } } saods9/tksao/frame/inversescale.h000644 000765 000000 00000003043 12705446251 017441 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __inversescale_h__ #define __inversescale_h__ #include using namespace std; #include "vector.h" class InverseScale { protected: double* level_; int size_; public: InverseScale(int); InverseScale(int, double*); virtual ~InverseScale(); int size() {return size_;} double* level() {return level_;} double level(int ii) {return level_[ii];} friend ostream& operator<<(ostream&, const InverseScale&); }; class LinearInverseScale : public InverseScale { public: LinearInverseScale(int, double, double); }; class LogInverseScale : public InverseScale { public: LogInverseScale(int, double, double, double); }; class PowInverseScale : public InverseScale { public: PowInverseScale(int, double, double, double); }; class SqrtInverseScale : public InverseScale { public: SqrtInverseScale(int, double, double); }; class SquaredInverseScale : public InverseScale { public: SquaredInverseScale(int, double, double); }; class AsinhInverseScale : public InverseScale { public: AsinhInverseScale(int, double, double); }; class SinhInverseScale : public InverseScale { public: SinhInverseScale(int, double, double); }; class HistEquInverseScale : public InverseScale { public: HistEquInverseScale(int, double, double, double*, int); }; class IISInverseScale : public InverseScale { public: IISInverseScale(int, double, double, Vector&); }; #endif saods9/tksao/frame/lex.C000644 000765 000000 00000376575 12705446251 015530 0ustar00joyewheel000000 000000 #line 2 "frame/lex.C" #line 4 "frame/lex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer frFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *fralloc (yy_size_t ); void *frrealloc (void *,yy_size_t ); void frfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 351 #define YY_END_OF_BUFFER 352 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[1268] = { 0, 0, 0, 352, 350, 349, 351, 350, 350, 350, 350, 350, 331, 331, 331, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 349, 348, 0, 348, 345, 0, 348, 346, 348, 331, 333, 332, 331, 348, 335, 348, 348, 348, 271, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 30, 348, 348, 348, 348, 348, 43, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 128, 348, 348, 348, 348, 348, 141, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 188, 348, 348, 348, 348, 195, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 275, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 326, 348, 348, 348, 348, 0, 348, 347, 345, 346, 333, 332, 337, 336, 348, 335, 348, 348, 348, 332, 348, 334, 348, 2, 348, 6, 7, 348, 348, 348, 348, 348, 348, 348, 348, 18, 348, 20, 348, 348, 348, 348, 348, 348, 348, 348, 31, 33, 348, 348, 348, 37, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 78, 348, 348, 348, 348, 348, 348, 348, 348, 348, 92, 93, 348, 348, 348, 348, 99, 348, 348, 348, 348, 348, 105, 348, 348, 348, 110, 348, 114, 116, 348, 348, 348, 348, 348, 348, 123, 348, 348, 348, 348, 130, 348, 348, 348, 348, 348, 348, 348, 348, 142, 348, 348, 348, 348, 348, 348, 348, 152, 348, 348, 348, 348, 348, 348, 348, 348, 164, 348, 348, 168, 348, 348, 348, 348, 348, 348, 175, 348, 348, 348, 348, 348, 348, 183, 348, 348, 186, 348, 348, 190, 348, 348, 348, 194, 348, 348, 348, 199, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 214, 348, 348, 348, 348, 348, 348, 348, 348, 348, 229, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 243, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 263, 348, 348, 348, 267, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 287, 348, 348, 348, 348, 294, 348, 348, 348, 325, 327, 348, 348, 348, 347, 338, 348, 333, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 19, 348, 22, 348, 348, 25, 27, 28, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 51, 348, 348, 54, 79, 348, 60, 348, 348, 348, 348, 348, 69, 348, 348, 348, 71, 348, 76, 348, 80, 82, 348, 348, 348, 348, 348, 348, 348, 348, 98, 348, 348, 100, 348, 348, 348, 348, 348, 348, 108, 348, 111, 348, 348, 117, 348, 119, 348, 348, 348, 348, 348, 126, 127, 348, 131, 348, 348, 135, 348, 348, 348, 140, 348, 348, 145, 146, 348, 149, 348, 348, 348, 348, 348, 348, 159, 161, 348, 162, 348, 348, 348, 169, 171, 348, 348, 348, 348, 176, 178, 348, 348, 181, 182, 348, 348, 187, 189, 191, 348, 348, 196, 348, 348, 348, 348, 348, 348, 204, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 219, 348, 348, 348, 348, 348, 348, 348, 348, 230, 348, 348, 348, 348, 348, 236, 348, 238, 348, 348, 348, 348, 348, 348, 348, 348, 348, 249, 250, 251, 348, 348, 348, 348, 348, 258, 348, 348, 348, 348, 348, 348, 348, 269, 348, 348, 348, 348, 348, 278, 279, 280, 348, 348, 348, 348, 285, 348, 348, 348, 348, 288, 293, 321, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 348, 348, 348, 328, 330, 348, 348, 339, 348, 348, 348, 348, 1, 5, 3, 348, 348, 10, 348, 348, 348, 348, 15, 16, 17, 348, 348, 24, 348, 29, 348, 348, 35, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 53, 55, 348, 348, 348, 348, 348, 348, 348, 348, 70, 348, 348, 72, 348, 348, 348, 348, 85, 348, 348, 348, 89, 348, 348, 348, 348, 348, 348, 348, 348, 104, 348, 107, 348, 112, 113, 348, 118, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 143, 348, 348, 348, 348, 151, 348, 154, 348, 156, 348, 348, 163, 348, 348, 348, 167, 348, 348, 348, 348, 348, 348, 348, 185, 348, 348, 348, 348, 200, 348, 348, 203, 205, 348, 207, 348, 348, 210, 348, 348, 348, 215, 348, 348, 348, 221, 348, 348, 348, 348, 348, 227, 348, 348, 232, 348, 348, 348, 237, 348, 240, 348, 348, 348, 245, 348, 247, 248, 252, 253, 348, 348, 348, 348, 348, 261, 348, 348, 348, 266, 348, 273, 348, 348, 348, 348, 348, 348, 348, 348, 348, 286, 348, 348, 348, 348, 322, 323, 324, 348, 340, 339, 348, 348, 343, 348, 348, 341, 348, 348, 348, 348, 12, 13, 14, 348, 348, 348, 348, 34, 36, 348, 39, 348, 41, 42, 348, 45, 348, 348, 48, 348, 348, 52, 348, 348, 348, 61, 348, 348, 348, 348, 348, 348, 348, 73, 74, 348, 77, 348, 348, 348, 348, 348, 88, 348, 348, 348, 348, 348, 101, 348, 348, 106, 109, 348, 348, 348, 348, 124, 348, 129, 132, 133, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 155, 160, 157, 165, 348, 170, 348, 173, 174, 348, 179, 180, 184, 192, 193, 197, 198, 201, 202, 348, 208, 209, 348, 348, 348, 348, 348, 348, 348, 222, 223, 224, 348, 348, 348, 231, 233, 348, 235, 348, 348, 242, 348, 246, 254, 255, 257, 348, 348, 262, 348, 265, 348, 348, 348, 276, 277, 348, 348, 281, 348, 284, 289, 348, 291, 348, 329, 344, 342, 4, 348, 348, 11, 21, 23, 348, 348, 348, 348, 348, 46, 348, 348, 50, 348, 348, 348, 348, 62, 63, 348, 348, 66, 348, 348, 348, 348, 83, 84, 87, 86, 348, 91, 348, 348, 96, 102, 348, 348, 348, 348, 348, 348, 348, 348, 137, 348, 348, 144, 147, 150, 348, 153, 348, 348, 172, 348, 348, 211, 212, 348, 348, 348, 348, 348, 225, 348, 348, 348, 348, 241, 348, 348, 259, 260, 348, 348, 270, 348, 348, 348, 348, 290, 348, 348, 9, 348, 348, 348, 348, 44, 348, 49, 56, 57, 348, 348, 348, 65, 67, 348, 348, 81, 90, 94, 348, 348, 348, 115, 120, 121, 122, 125, 348, 136, 348, 348, 348, 348, 348, 177, 206, 348, 216, 348, 218, 348, 226, 348, 234, 348, 348, 256, 348, 268, 348, 348, 348, 283, 292, 8, 348, 32, 348, 40, 348, 348, 348, 64, 348, 75, 95, 348, 348, 348, 138, 348, 148, 348, 166, 348, 348, 348, 348, 348, 348, 348, 272, 348, 348, 26, 38, 47, 58, 59, 348, 348, 103, 348, 139, 348, 213, 217, 348, 228, 239, 348, 348, 348, 282, 68, 348, 348, 348, 220, 244, 348, 348, 348, 348, 158, 348, 274, 348, 134, 264, 97, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 4, 4, 4, 4, 6, 4, 4, 4, 7, 4, 8, 9, 4, 10, 11, 12, 13, 14, 15, 16, 16, 16, 17, 18, 4, 4, 4, 4, 4, 4, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 4, 4, 4, 4, 4, 4, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 4, 72, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[73] = { 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } ; static yyconst flex_int16_t yy_base[1275] = { 0, 0, 0, 433, 2920, 429, 2920, 0, 72, 77, 75, 83, 92, 69, 90, 141, 201, 250, 94, 295, 345, 146, 97, 390, 418, 96, 196, 295, 194, 300, 436, 83, 350, 483, 534, 91, 143, 243, 136, 103, 96, 364, 383, 0, 375, 391, 0, 371, 385, 0, 594, 603, 662, 702, 121, 611, 619, 636, 644, 742, 676, 141, 150, 244, 184, 253, 188, 361, 376, 237, 202, 209, 210, 354, 298, 232, 262, 0, 381, 288, 382, 304, 309, 0, 426, 395, 357, 438, 393, 336, 763, 415, 438, 479, 430, 809, 446, 353, 440, 452, 489, 489, 531, 468, 489, 485, 533, 531, 67, 524, 525, 532, 535, 521, 533, 675, 0, 605, 676, 723, 535, 536, 0, 538, 619, 760, 621, 618, 358, 627, 661, 665, 709, 758, 853, 645, 710, 681, 778, 839, 770, 795, 665, 673, 715, 725, 748, 742, 755, 843, 763, 797, 789, 799, 858, 849, 815, 844, 846, 885, 863, 885, 856, 893, 901, 905, 939, 895, 902, 931, 936, 932, 911, 922, 943, 939, 960, 947, 955, 961, 960, 947, 992, 965, 970, 980, 988, 997, 987, 989, 993, 1006, 1000, 0, 994, 1013, 1000, 1013, 269, 1060, 0, 2920, 2920, 1123, 1043, 0, 0, 1060, 0, 1070, 1084, 723, 1096, 1111, 0, 1004, 0, 1053, 1057, 0, 1063, 1073, 1087, 1079, 1107, 1116, 1129, 1099, 0, 1116, 0, 1114, 1114, 1121, 324, 1125, 1132, 1116, 1133, 1138, 0, 1129, 1143, 1143, 1148, 1134, 1146, 1152, 1143, 1175, 1174, 1160, 1167, 1167, 1180, 1183, 1169, 1175, 1173, 1180, 1167, 1171, 1170, 1183, 1184, 1198, 1184, 1196, 1185, 0, 1208, 1216, 1207, 1230, 1214, 1228, 1214, 1230, 1223, 0, 0, 1228, 1218, 1217, 1231, 0, 1232, 1230, 1236, 1245, 1228, 0, 1228, 1230, 1248, 1231, 1246, 330, 0, 1232, 1241, 1244, 1266, 1279, 1264, 0, 1282, 1271, 1281, 1282, 0, 1284, 1282, 1281, 1286, 1284, 1273, 1288, 1279, 0, 1292, 1289, 1285, 1297, 1297, 1286, 284, 1282, 1303, 1313, 1316, 1327, 1315, 1316, 1333, 1337, 0, 1324, 1326, 0, 1330, 1331, 1340, 1325, 1337, 1335, 0, 1333, 1345, 1350, 1343, 1348, 1349, 0, 1346, 1351, 0, 1337, 1354, 0, 1356, 1370, 1368, 0, 1359, 1378, 1383, 1386, 1370, 1371, 1386, 1373, 1375, 1390, 1376, 1383, 1376, 1382, 0, 1384, 1390, 1415, 1394, 1389, 1400, 1402, 1400, 1435, 0, 1419, 1440, 1437, 1427, 1435, 1440, 1434, 1442, 1433, 1439, 1448, 0, 1453, 1440, 1453, 1452, 1440, 1456, 1472, 1480, 1485, 1473, 1480, 1474, 1473, 1493, 1494, 1476, 0, 1492, 1478, 1487, 0, 1484, 1481, 1499, 1499, 1498, 1498, 1493, 1503, 1505, 1496, 1504, 1500, 1511, 1528, 1517, 1517, 0, 1520, 1524, 1522, 1530, 1587, 1639, 1623, 279, 0, 0, 1620, 1632, 1645, 2920, 0, 1555, 1655, 1664, 1682, 1691, 1645, 1652, 1664, 1685, 1670, 1691, 1685, 1684, 1690, 1695, 1676, 1679, 1695, 0, 1703, 0, 1684, 228, 1699, 0, 0, 1693, 1694, 1700, 1699, 1706, 1698, 1738, 1710, 1710, 1714, 1716, 1706, 1700, 1741, 1734, 0, 1737, 1732, 0, 0, 1733, 0, 1739, 1752, 1753, 1740, 1752, 0, 1737, 1756, 1741, 0, 1743, 0, 1748, 1752, 1779, 1760, 1748, 1765, 1771, 1791, 1797, 1786, 1786, 0, 1802, 1788, 0, 1801, 1794, 1787, 1803, 1794, 1805, 0, 1806, 1787, 1809, 1800, 0, 1795, 0, 1796, 1816, 1801, 1820, 1814, 0, 0, 1811, 1838, 1836, 1835, 0, 1839, 1847, 1827, 0, 1849, 1834, 0, 0, 1849, 1844, 1857, 226, 1844, 1848, 1841, 1851, 1863, 0, 1853, 0, 1854, 1848, 1859, 1866, 0, 1864, 1872, 1859, 1874, 1886, 0, 1887, 1887, 0, 0, 1881, 1885, 0, 0, 0, 1900, 1903, 0, 1892, 1894, 1908, 1905, 1906, 1907, 0, 1898, 1905, 1903, 123, 1896, 1910, 1899, 1914, 1900, 1918, 1919, 0, 1916, 1901, 1926, 1933, 1953, 1942, 1936, 1945, 0, 1938, 1941, 1948, 1948, 1948, 0, 1958, 0, 1950, 1960, 1961, 1964, 1961, 1964, 1965, 1951, 1968, 0, 0, 0, 1970, 1960, 1957, 1973, 1976, 0, 1981, 1982, 1987, 1989, 2004, 2005, 1999, 0, 2001, 2012, 2002, 2014, 1997, 0, 0, 0, 2010, 2017, 2007, 2000, 0, 2016, 2007, 2014, 2019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 2019, 174, 0, 0, 2017, 2066, 2075, 2083, 2092, 2100, 2147, 0, 0, 2023, 2094, 2082, 0, 2081, 2099, 2090, 2102, 0, 0, 0, 2099, 2087, 0, 2090, 0, 2105, 2086, 0, 2103, 2108, 2105, 2106, 2124, 2134, 2152, 2135, 2140, 2136, 2139, 2143, 2154, 2155, 0, 2174, 2148, 2149, 2145, 2146, 2163, 2148, 2169, 2162, 0, 2171, 2168, 2166, 2157, 2168, 2195, 2200, 0, 2194, 2202, 2203, 0, 2189, 2196, 2191, 2192, 2195, 2214, 2201, 2202, 0, 2200, 0, 2202, 0, 0, 2206, 0, 2213, 2203, 2215, 2213, 2217, 2222, 2210, 2209, 2234, 2236, 2239, 2250, 2243, 0, 2255, 2255, 2252, 2242, 0, 2245, 0, 2256, 0, 2248, 2262, 0, 2244, 2263, 2252, 0, 2265, 2269, 2250, 2261, 2273, 2263, 2273, 0, 2261, 2260, 2267, 2271, 0, 2279, 2290, 0, 0, 2306, 0, 2306, 2307, 2307, 2298, 2311, 2297, 0, 2313, 2300, 2316, 0, 2308, 2302, 2308, 2321, 2309, 0, 2305, 2322, 0, 2323, 2328, 2323, 0, 2311, 0, 2318, 2313, 2338, 0, 2345, 0, 0, 0, 0, 2352, 2341, 2357, 2358, 2359, 0, 2346, 2359, 2354, 0, 2367, 0, 2366, 2363, 2367, 2353, 2358, 2368, 2373, 2373, 2374, 0, 2362, 2366, 2358, 2380, 0, 0, 0, 2379, 2120, 2419, 2427, 2435, 0, 2443, 2471, 0, 2419, 2438, 2439, 2430, 0, 0, 0, 2445, 2443, 2437, 2444, 0, 0, 2434, 0, 2453, 0, 0, 2454, 0, 2451, 2441, 0, 2451, 2449, 0, 2488, 2490, 2489, 0, 2489, 2475, 2486, 2477, 2479, 2479, 2485, 0, 0, 2499, 0, 2482, 2488, 2500, 2484, 2487, 0, 2492, 2504, 2500, 2501, 2506, 0, 2498, 2495, 0, 0, 156, 2499, 2532, 2541, 0, 2540, 0, 0, 0, 2541, 2525, 2525, 2529, 2534, 2544, 2532, 2537, 2543, 2549, 0, 0, 2549, 0, 2546, 0, 2551, 0, 0, 2554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2557, 0, 0, 2541, 2546, 2543, 2540, 2543, 2544, 2564, 0, 0, 0, 2561, 2581, 2574, 0, 0, 2588, 0, 2587, 2577, 0, 2579, 0, 0, 2592, 0, 2596, 2597, 0, 2601, 0, 2583, 2585, 2590, 0, 0, 2605, 2595, 0, 2605, 0, 0, 2595, 0, 2609, 0, 0, 0, 0, 2606, 2593, 0, 0, 0, 2592, 2613, 2603, 2604, 2606, 0, 2609, 2641, 0, 2628, 2631, 2647, 2648, 0, 0, 2630, 2632, 0, 2632, 2652, 2645, 2635, 0, 0, 0, 0, 2638, 0, 2654, 2643, 2658, 0, 2651, 2656, 2648, 2660, 2650, 2646, 2654, 2662, 0, 2667, 2649, 0, 0, 0, 2655, 0, 2683, 2693, 0, 2681, 2688, 0, 0, 2692, 2697, 2694, 2679, 2685, 0, 2701, 2698, 2703, 2703, 0, 2701, 2685, 0, 0, 2700, 2708, 0, 2702, 2697, 2707, 2697, 0, 2706, 2701, 0, 2706, 2707, 2701, 2744, 0, 2749, 0, 0, 0, 2739, 2749, 2748, 0, 0, 2734, 2737, 0, 0, 0, 2742, 2743, 2757, 0, 0, 0, 0, 0, 2750, 0, 2747, 2760, 2748, 2759, 2746, 0, 0, 2749, 0, 2751, 0, 2758, 0, 2753, 0, 2760, 2757, 0, 2770, 0, 2768, 2768, 2754, 0, 0, 0, 2797, 0, 2783, 0, 2791, 2799, 2800, 0, 2801, 0, 0, 2793, 2796, 2793, 0, 2798, 0, 2802, 0, 2792, 2799, 2799, 2801, 2813, 2816, 2815, 0, 2805, 2815, 0, 0, 0, 0, 0, 2802, 2801, 0, 2803, 0, 2823, 0, 0, 2811, 0, 0, 2814, 2833, 2851, 0, 0, 2843, 2847, 2843, 0, 0, 2849, 2834, 2839, 2858, 0, 2859, 0, 2844, 0, 0, 0, 2920, 74, 2907, 2909, 2911, 2913, 2915, 2917 } ; static yyconst flex_int16_t yy_def[1275] = { 0, 1267, 1, 1267, 1267, 1267, 1267, 1268, 1269, 1270, 1268, 1268, 1268, 12, 12, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1271, 1267, 1268, 1272, 1269, 1268, 1273, 1270, 1268, 1268, 12, 1268, 1268, 12, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1274, 1271, 1268, 1267, 1267, 1268, 203, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 59, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1267, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1267, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 0, 1267, 1267, 1267, 1267, 1267, 1267, 1267 } ; static yyconst flex_int16_t yy_nxt[2993] = { 0, 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 13, 14, 13, 13, 13, 13, 7, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 7, 44, 44, 44, 43, 46, 47, 47, 47, 297, 298, 49, 50, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 53, 54, 54, 54, 54, 54, 54, 54, 54, 55, 43, 60, 94, 56, 57, 117, 95, 58, 129, 118, 96, 157, 182, 119, 183, 194, 195, 184, 196, 120, 97, 43, 197, 59, 841, 842, 43, 60, 94, 56, 57, 117, 95, 58, 129, 118, 96, 157, 182, 119, 183, 194, 195, 184, 196, 120, 97, 43, 197, 59, 61, 185, 43, 1098, 112, 186, 192, 62, 113, 187, 63, 64, 65, 215, 66, 114, 67, 68, 193, 69, 70, 115, 71, 216, 72, 904, 61, 185, 43, 116, 112, 186, 192, 62, 113, 187, 63, 64, 65, 215, 66, 114, 67, 68, 193, 69, 70, 115, 71, 216, 72, 73, 139, 902, 130, 116, 140, 220, 131, 74, 75, 224, 132, 76, 231, 77, 141, 78, 133, 142, 79, 232, 143, 80, 81, 810, 233, 733, 139, 82, 130, 83, 140, 220, 131, 74, 75, 224, 132, 76, 231, 77, 141, 78, 133, 142, 79, 232, 143, 80, 81, 188, 233, 189, 237, 82, 190, 83, 84, 191, 217, 221, 85, 218, 229, 86, 87, 222, 230, 88, 89, 219, 90, 91, 223, 92, 238, 188, 93, 189, 237, 708, 190, 566, 84, 191, 217, 221, 85, 218, 229, 86, 87, 222, 230, 88, 89, 219, 90, 91, 223, 92, 238, 134, 93, 98, 99, 135, 235, 144, 242, 136, 245, 145, 100, 137, 101, 138, 102, 103, 104, 146, 246, 147, 236, 148, 105, 539, 476, 134, 452, 98, 99, 135, 235, 144, 242, 136, 245, 145, 100, 137, 101, 138, 102, 103, 104, 146, 246, 147, 236, 148, 105, 106, 198, 198, 198, 326, 158, 280, 234, 107, 159, 108, 160, 252, 202, 109, 257, 201, 110, 225, 161, 111, 42, 47, 47, 47, 162, 106, 49, 44, 44, 44, 158, 46, 226, 107, 159, 108, 160, 252, 227, 109, 257, 239, 110, 225, 161, 111, 121, 122, 240, 228, 162, 255, 123, 243, 241, 256, 124, 125, 226, 244, 250, 126, 251, 127, 227, 128, 42, 239, 1267, 264, 1267, 200, 121, 122, 240, 228, 1267, 255, 123, 243, 241, 256, 124, 125, 1267, 244, 250, 126, 251, 127, 149, 247, 253, 248, 150, 264, 265, 151, 152, 249, 278, 153, 270, 271, 154, 281, 266, 155, 1267, 254, 156, 1267, 279, 1267, 282, 1267, 149, 247, 253, 248, 150, 1267, 265, 151, 152, 249, 278, 153, 270, 271, 154, 281, 266, 155, 267, 254, 156, 163, 279, 164, 282, 165, 289, 290, 166, 167, 285, 283, 168, 169, 268, 170, 269, 171, 284, 172, 173, 174, 291, 1267, 267, 175, 1267, 163, 286, 164, 1267, 165, 289, 290, 166, 167, 285, 283, 168, 169, 268, 170, 269, 171, 284, 172, 173, 174, 291, 287, 1267, 175, 176, 292, 286, 299, 177, 300, 305, 178, 294, 301, 293, 302, 303, 306, 179, 288, 295, 180, 317, 318, 296, 304, 319, 287, 181, 1267, 176, 292, 1267, 299, 177, 300, 305, 178, 294, 301, 293, 302, 303, 306, 179, 288, 295, 180, 317, 318, 296, 304, 319, 1267, 181, 203, 203, 203, 203, 203, 203, 203, 203, 204, 51, 51, 51, 51, 51, 51, 51, 51, 209, 209, 209, 209, 209, 209, 209, 209, 210, 210, 210, 210, 210, 210, 210, 210, 309, 320, 205, 324, 325, 310, 211, 211, 43, 212, 212, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 1267, 309, 320, 205, 324, 325, 310, 1267, 327, 43, 52, 52, 52, 52, 52, 52, 52, 52, 1267, 328, 343, 344, 206, 207, 210, 210, 210, 210, 210, 210, 210, 210, 307, 311, 327, 329, 1267, 1267, 347, 360, 308, 312, 361, 330, 313, 328, 343, 344, 206, 207, 52, 52, 52, 52, 52, 52, 52, 52, 307, 311, 1267, 329, 208, 57, 347, 360, 308, 312, 361, 330, 313, 212, 212, 212, 212, 212, 212, 212, 212, 331, 345, 362, 346, 314, 332, 333, 315, 363, 208, 57, 214, 214, 214, 214, 214, 214, 214, 214, 316, 214, 214, 214, 214, 214, 214, 331, 345, 362, 346, 314, 332, 333, 315, 363, 1267, 334, 364, 335, 365, 321, 366, 336, 322, 1267, 316, 214, 214, 214, 214, 214, 214, 258, 259, 260, 261, 262, 323, 370, 348, 1267, 263, 334, 364, 335, 365, 321, 366, 336, 322, 356, 357, 1267, 1267, 349, 350, 1267, 351, 258, 259, 260, 261, 262, 323, 370, 348, 358, 263, 272, 371, 373, 374, 273, 274, 382, 359, 356, 357, 275, 372, 349, 350, 276, 351, 1267, 1267, 277, 1267, 1267, 1267, 1267, 1267, 358, 1267, 272, 371, 373, 374, 273, 274, 382, 359, 1267, 1267, 275, 372, 383, 384, 276, 352, 353, 379, 277, 337, 367, 380, 354, 338, 368, 369, 355, 381, 388, 1267, 375, 391, 339, 376, 340, 341, 342, 1267, 383, 384, 377, 352, 353, 379, 378, 337, 367, 380, 354, 338, 368, 369, 355, 381, 388, 385, 375, 391, 339, 376, 340, 341, 342, 389, 386, 395, 377, 387, 390, 392, 378, 393, 406, 396, 408, 398, 1267, 1267, 394, 397, 399, 385, 415, 1267, 407, 1267, 416, 1267, 400, 389, 386, 395, 401, 387, 390, 392, 1267, 393, 406, 396, 408, 398, 411, 402, 394, 397, 399, 409, 415, 410, 407, 403, 416, 413, 400, 404, 414, 405, 401, 417, 412, 419, 418, 422, 428, 420, 430, 424, 411, 402, 421, 426, 435, 409, 423, 410, 425, 403, 436, 413, 427, 404, 414, 405, 429, 417, 412, 419, 418, 422, 428, 420, 430, 424, 439, 437, 421, 426, 435, 431, 423, 438, 425, 432, 436, 441, 427, 433, 442, 440, 429, 443, 444, 445, 434, 447, 448, 449, 450, 451, 439, 437, 1267, 446, 1267, 431, 1267, 438, 459, 432, 1267, 441, 1267, 433, 442, 440, 1267, 443, 444, 445, 434, 447, 448, 449, 450, 451, 198, 198, 198, 446, 208, 57, 454, 454, 459, 455, 455, 455, 455, 455, 455, 455, 455, 460, 205, 209, 209, 209, 209, 209, 209, 209, 209, 456, 1267, 461, 208, 57, 462, 210, 210, 210, 210, 210, 210, 210, 210, 1267, 463, 460, 205, 212, 212, 212, 212, 212, 212, 212, 212, 1267, 457, 461, 464, 465, 462, 1267, 213, 213, 213, 213, 213, 213, 213, 213, 463, 466, 471, 200, 203, 203, 203, 203, 203, 203, 203, 203, 457, 458, 464, 465, 206, 207, 467, 469, 472, 473, 474, 475, 468, 477, 478, 466, 471, 479, 453, 480, 481, 470, 482, 483, 484, 487, 485, 458, 486, 488, 206, 207, 467, 469, 472, 473, 474, 475, 468, 477, 478, 489, 490, 479, 453, 480, 481, 470, 482, 483, 484, 487, 485, 491, 486, 488, 492, 493, 494, 495, 496, 497, 498, 499, 505, 500, 506, 489, 490, 501, 503, 502, 507, 504, 508, 509, 510, 511, 513, 491, 512, 514, 492, 493, 494, 495, 496, 497, 498, 499, 505, 500, 506, 515, 516, 501, 503, 502, 507, 504, 508, 509, 510, 511, 513, 517, 512, 514, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 515, 516, 529, 530, 531, 532, 533, 534, 537, 538, 540, 535, 517, 541, 542, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 536, 543, 529, 530, 531, 532, 533, 534, 537, 538, 540, 535, 544, 541, 542, 545, 546, 549, 550, 547, 551, 552, 553, 554, 555, 556, 536, 543, 548, 557, 558, 559, 562, 560, 563, 564, 565, 567, 544, 561, 568, 545, 546, 549, 550, 547, 551, 552, 553, 554, 555, 556, 569, 570, 548, 557, 558, 559, 562, 560, 563, 564, 565, 567, 571, 561, 568, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 569, 570, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 571, 593, 594, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 595, 596, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 597, 593, 594, 598, 599, 602, 600, 603, 604, 605, 606, 607, 608, 609, 595, 596, 601, 610, 611, 612, 613, 1267, 617, 618, 1267, 619, 597, 620, 621, 598, 599, 602, 600, 603, 604, 605, 606, 607, 608, 609, 1267, 614, 601, 610, 611, 612, 613, 615, 617, 618, 616, 619, 622, 620, 621, 625, 623, 626, 627, 628, 629, 631, 632, 634, 633, 635, 624, 614, 636, 637, 638, 630, 639, 615, 640, 641, 616, 642, 622, 643, 644, 625, 623, 626, 627, 628, 629, 631, 632, 634, 633, 635, 624, 645, 636, 637, 638, 630, 639, 646, 640, 641, 647, 642, 648, 643, 644, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 645, 661, 662, 663, 664, 665, 646, 666, 667, 647, 668, 648, 669, 670, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 671, 661, 662, 663, 664, 665, 672, 666, 667, 673, 668, 674, 669, 670, 675, 676, 677, 678, 455, 455, 455, 455, 455, 455, 455, 455, 671, 1267, 1267, 1267, 1267, 1267, 672, 1267, 1267, 673, 1267, 674, 1267, 1267, 675, 676, 677, 678, 43, 43, 43, 43, 43, 43, 679, 43, 43, 43, 43, 43, 43, 43, 43, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 43, 43, 706, 707, 709, 710, 711, 455, 455, 455, 455, 455, 455, 455, 455, 712, 713, 713, 713, 713, 713, 713, 713, 713, 1267, 718, 719, 720, 706, 707, 709, 710, 711, 714, 715, 715, 715, 715, 715, 715, 715, 715, 716, 717, 717, 717, 717, 717, 717, 717, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 734, 735, 736, 737, 738, 739, 740, 1267, 743, 744, 745, 746, 747, 748, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 734, 735, 736, 737, 738, 739, 740, 741, 743, 744, 745, 746, 747, 748, 749, 742, 751, 752, 753, 754, 755, 756, 757, 760, 762, 763, 761, 750, 764, 765, 766, 767, 768, 741, 1267, 771, 758, 772, 773, 759, 749, 742, 751, 752, 753, 754, 755, 756, 757, 760, 762, 763, 761, 750, 764, 765, 766, 767, 768, 774, 769, 771, 758, 772, 773, 759, 770, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 774, 769, 793, 794, 795, 796, 797, 770, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 798, 799, 793, 794, 795, 796, 797, 800, 801, 802, 804, 805, 806, 807, 808, 809, 811, 812, 813, 803, 814, 815, 816, 817, 818, 819, 798, 799, 820, 821, 822, 823, 824, 800, 801, 802, 804, 805, 806, 807, 808, 809, 811, 812, 813, 803, 814, 815, 816, 817, 818, 819, 825, 826, 820, 821, 822, 823, 824, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 843, 844, 845, 846, 847, 825, 826, 848, 849, 850, 851, 852, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 843, 844, 845, 846, 847, 853, 854, 848, 849, 850, 851, 852, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 853, 854, 874, 875, 876, 877, 878, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 879, 880, 874, 875, 876, 877, 878, 881, 883, 882, 884, 885, 886, 887, 888, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 879, 880, 903, 901, 905, 914, 889, 881, 883, 882, 884, 885, 886, 887, 888, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 1267, 1267, 903, 901, 905, 914, 889, 906, 906, 906, 906, 906, 906, 906, 906, 907, 713, 713, 713, 713, 713, 713, 713, 713, 908, 908, 908, 908, 908, 908, 908, 908, 909, 715, 715, 715, 715, 715, 715, 715, 715, 911, 911, 911, 911, 911, 911, 911, 911, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 910, 906, 906, 906, 906, 906, 906, 906, 906, 1267, 926, 927, 928, 929, 930, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 910, 912, 717, 717, 717, 717, 717, 717, 717, 717, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 1267, 943, 944, 945, 946, 913, 1267, 947, 948, 949, 950, 951, 952, 953, 954, 940, 955, 931, 932, 933, 934, 935, 936, 937, 938, 939, 941, 943, 944, 945, 946, 913, 942, 947, 948, 949, 950, 951, 952, 953, 954, 940, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 941, 965, 966, 967, 968, 969, 942, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 956, 957, 958, 959, 960, 961, 962, 963, 964, 980, 965, 966, 967, 968, 969, 981, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 982, 983, 984, 985, 986, 987, 988, 989, 990, 980, 991, 992, 993, 994, 995, 981, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 982, 983, 984, 985, 986, 987, 988, 989, 990, 1006, 991, 992, 993, 994, 995, 1007, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1006, 1017, 1018, 1019, 1020, 1021, 1007, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1032, 1017, 1018, 1019, 1020, 1021, 1033, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1032, 1043, 1044, 1045, 1046, 1047, 1033, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1267, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1267, 1043, 1044, 1045, 1046, 1047, 1267, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 906, 906, 906, 906, 906, 906, 906, 906, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 911, 911, 911, 911, 911, 911, 911, 911, 1267, 1267, 1059, 1057, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 910, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1058, 911, 911, 911, 911, 911, 911, 911, 911, 1059, 1057, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 910, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1058, 1074, 913, 1075, 1076, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1077, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1099, 1074, 913, 1075, 1076, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1077, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 45, 45, 48, 48, 199, 199, 44, 44, 47, 47, 198, 198, 3, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267 } ; static yyconst flex_int16_t yy_chk[2993] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 8, 8, 1268, 8, 9, 9, 9, 108, 108, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 14, 18, 12, 12, 22, 18, 12, 25, 22, 18, 31, 35, 22, 35, 39, 40, 35, 40, 22, 18, 14, 40, 12, 608, 608, 13, 14, 18, 12, 12, 22, 18, 12, 25, 22, 18, 31, 35, 22, 35, 39, 40, 35, 40, 22, 18, 14, 40, 12, 15, 36, 54, 971, 21, 36, 38, 15, 21, 36, 15, 15, 15, 61, 15, 21, 15, 15, 38, 15, 15, 21, 15, 62, 15, 708, 15, 36, 54, 21, 21, 36, 38, 15, 21, 36, 15, 15, 15, 61, 15, 21, 15, 15, 38, 15, 15, 21, 15, 62, 15, 16, 28, 706, 26, 21, 28, 64, 26, 16, 16, 66, 26, 16, 70, 16, 28, 16, 26, 28, 16, 71, 28, 16, 16, 566, 72, 476, 28, 16, 26, 16, 28, 64, 26, 16, 16, 66, 26, 16, 70, 16, 28, 16, 26, 28, 16, 71, 28, 16, 16, 37, 72, 37, 75, 16, 37, 16, 17, 37, 63, 65, 17, 63, 69, 17, 17, 65, 69, 17, 17, 63, 17, 17, 65, 17, 76, 37, 17, 37, 75, 446, 37, 326, 17, 37, 63, 65, 17, 63, 69, 17, 17, 65, 69, 17, 17, 63, 17, 17, 65, 17, 76, 27, 17, 19, 19, 27, 74, 29, 79, 27, 81, 29, 19, 27, 19, 27, 19, 19, 19, 29, 82, 29, 74, 29, 19, 297, 234, 27, 198, 19, 19, 27, 74, 29, 79, 27, 81, 29, 19, 27, 19, 27, 19, 19, 19, 29, 82, 29, 74, 29, 19, 20, 41, 41, 41, 128, 32, 97, 73, 20, 32, 20, 32, 86, 47, 20, 89, 44, 20, 67, 32, 20, 42, 48, 48, 48, 32, 20, 48, 45, 45, 45, 32, 45, 67, 20, 32, 20, 32, 86, 68, 20, 89, 78, 20, 67, 32, 20, 23, 23, 78, 68, 32, 88, 23, 80, 78, 88, 23, 23, 67, 80, 85, 23, 85, 23, 68, 24, 5, 78, 3, 91, 0, 41, 23, 23, 78, 68, 0, 88, 23, 80, 78, 88, 23, 23, 0, 80, 85, 23, 85, 23, 30, 84, 87, 84, 30, 91, 92, 30, 30, 84, 96, 30, 94, 94, 30, 98, 92, 30, 0, 87, 30, 0, 96, 0, 99, 0, 30, 84, 87, 84, 30, 0, 92, 30, 30, 84, 96, 30, 94, 94, 30, 98, 92, 30, 93, 87, 30, 33, 96, 33, 99, 33, 103, 104, 33, 33, 101, 100, 33, 33, 93, 33, 93, 33, 100, 33, 33, 33, 105, 0, 93, 33, 0, 33, 101, 33, 0, 33, 103, 104, 33, 33, 101, 100, 33, 33, 93, 33, 93, 33, 100, 33, 33, 33, 105, 102, 0, 33, 34, 106, 101, 109, 34, 110, 113, 34, 107, 111, 106, 111, 112, 114, 34, 102, 107, 34, 120, 121, 107, 112, 123, 102, 34, 0, 34, 106, 0, 109, 34, 110, 113, 34, 107, 111, 106, 111, 112, 114, 34, 102, 107, 34, 120, 121, 107, 112, 123, 0, 34, 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, 51, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 117, 124, 51, 126, 127, 117, 57, 57, 51, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 0, 117, 124, 51, 126, 127, 117, 0, 129, 51, 52, 52, 52, 52, 52, 52, 52, 52, 0, 130, 135, 135, 52, 52, 60, 60, 60, 60, 60, 60, 60, 60, 115, 118, 129, 131, 0, 0, 137, 142, 115, 118, 143, 131, 118, 130, 135, 135, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 115, 118, 0, 131, 53, 53, 137, 142, 115, 118, 143, 131, 118, 211, 211, 211, 211, 211, 211, 211, 211, 132, 136, 144, 136, 119, 132, 132, 119, 145, 53, 53, 59, 59, 59, 59, 59, 59, 59, 59, 119, 59, 59, 59, 59, 59, 59, 132, 136, 144, 136, 119, 132, 132, 119, 145, 0, 133, 146, 133, 147, 125, 148, 133, 125, 0, 119, 59, 59, 59, 59, 59, 59, 90, 90, 90, 90, 90, 125, 150, 138, 0, 90, 133, 146, 133, 147, 125, 148, 133, 125, 140, 140, 0, 0, 138, 138, 0, 138, 90, 90, 90, 90, 90, 125, 150, 138, 141, 90, 95, 151, 152, 153, 95, 95, 156, 141, 140, 140, 95, 151, 138, 138, 95, 138, 0, 0, 95, 0, 0, 0, 0, 0, 141, 0, 95, 151, 152, 153, 95, 95, 156, 141, 0, 0, 95, 151, 157, 158, 95, 139, 139, 155, 95, 134, 149, 155, 139, 134, 149, 149, 139, 155, 160, 0, 154, 162, 134, 154, 134, 134, 134, 0, 157, 158, 154, 139, 139, 155, 154, 134, 149, 155, 139, 134, 149, 149, 139, 155, 160, 159, 154, 162, 134, 154, 134, 134, 134, 161, 159, 164, 154, 159, 161, 163, 154, 163, 167, 164, 168, 165, 0, 0, 163, 164, 165, 159, 172, 0, 167, 0, 173, 0, 165, 161, 159, 164, 165, 159, 161, 163, 0, 163, 167, 164, 168, 165, 170, 166, 163, 164, 165, 169, 172, 169, 167, 166, 173, 171, 165, 166, 171, 166, 165, 174, 170, 175, 174, 177, 180, 176, 181, 178, 170, 166, 176, 179, 183, 169, 177, 169, 178, 166, 184, 171, 179, 166, 171, 166, 180, 174, 170, 175, 174, 177, 180, 176, 181, 178, 186, 185, 176, 179, 183, 182, 177, 185, 178, 182, 184, 187, 179, 182, 188, 186, 180, 189, 190, 191, 182, 192, 194, 195, 196, 197, 186, 185, 0, 191, 0, 182, 0, 185, 215, 182, 0, 187, 0, 182, 188, 186, 0, 189, 190, 191, 182, 192, 194, 195, 196, 197, 199, 199, 199, 191, 204, 204, 207, 207, 215, 207, 207, 207, 207, 207, 207, 207, 207, 217, 204, 209, 209, 209, 209, 209, 209, 209, 209, 209, 0, 218, 204, 204, 220, 210, 210, 210, 210, 210, 210, 210, 210, 0, 221, 217, 204, 212, 212, 212, 212, 212, 212, 212, 212, 0, 210, 218, 222, 223, 220, 0, 213, 213, 213, 213, 213, 213, 213, 213, 221, 224, 227, 199, 203, 203, 203, 203, 203, 203, 203, 203, 210, 213, 222, 223, 203, 203, 225, 226, 229, 231, 232, 233, 225, 235, 236, 224, 227, 237, 203, 238, 239, 226, 241, 242, 243, 245, 244, 213, 244, 246, 203, 203, 225, 226, 229, 231, 232, 233, 225, 235, 236, 247, 248, 237, 203, 238, 239, 226, 241, 242, 243, 245, 244, 249, 244, 246, 250, 251, 252, 253, 254, 255, 256, 257, 260, 258, 261, 247, 248, 258, 259, 258, 262, 259, 263, 264, 265, 266, 267, 249, 266, 268, 250, 251, 252, 253, 254, 255, 256, 257, 260, 258, 261, 270, 271, 258, 259, 258, 262, 259, 263, 264, 265, 266, 267, 272, 266, 268, 273, 274, 275, 276, 277, 278, 281, 282, 283, 284, 286, 270, 271, 287, 288, 289, 290, 292, 293, 295, 296, 299, 294, 272, 300, 301, 273, 274, 275, 276, 277, 278, 281, 282, 283, 284, 286, 294, 302, 287, 288, 289, 290, 292, 293, 295, 296, 299, 294, 303, 300, 301, 304, 306, 308, 309, 307, 311, 312, 313, 314, 315, 316, 294, 302, 307, 317, 318, 320, 322, 321, 323, 324, 325, 327, 303, 321, 328, 304, 306, 308, 309, 307, 311, 312, 313, 314, 315, 316, 329, 330, 307, 317, 318, 320, 322, 321, 323, 324, 325, 327, 331, 321, 328, 332, 333, 334, 335, 337, 338, 340, 341, 342, 343, 344, 329, 330, 345, 347, 348, 349, 350, 351, 352, 354, 355, 357, 331, 358, 360, 332, 333, 334, 335, 337, 338, 340, 341, 342, 343, 344, 361, 362, 345, 347, 348, 349, 350, 351, 352, 354, 355, 357, 364, 358, 360, 365, 366, 368, 367, 369, 370, 371, 372, 373, 374, 375, 361, 362, 367, 376, 377, 379, 380, 0, 382, 383, 0, 384, 364, 385, 386, 365, 366, 368, 367, 369, 370, 371, 372, 373, 374, 375, 0, 381, 367, 376, 377, 379, 380, 381, 382, 383, 381, 384, 387, 385, 386, 389, 387, 390, 391, 392, 393, 394, 395, 396, 395, 397, 387, 381, 398, 399, 401, 393, 402, 381, 402, 403, 381, 404, 387, 405, 406, 389, 387, 390, 391, 392, 393, 394, 395, 396, 395, 397, 387, 407, 398, 399, 401, 393, 402, 408, 402, 403, 409, 404, 410, 405, 406, 411, 412, 413, 414, 415, 416, 418, 419, 420, 422, 423, 424, 407, 425, 426, 427, 428, 429, 408, 430, 431, 409, 432, 410, 433, 434, 411, 412, 413, 414, 415, 416, 418, 419, 420, 422, 423, 424, 435, 425, 426, 427, 428, 429, 436, 430, 431, 437, 432, 439, 433, 434, 440, 440, 441, 442, 454, 454, 454, 454, 454, 454, 454, 454, 435, 0, 0, 0, 0, 0, 436, 0, 0, 437, 0, 439, 0, 0, 440, 440, 441, 442, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 444, 445, 449, 450, 451, 455, 455, 455, 455, 455, 455, 455, 455, 456, 456, 456, 456, 456, 456, 456, 456, 456, 0, 459, 460, 461, 444, 445, 449, 450, 451, 457, 457, 457, 457, 457, 457, 457, 457, 457, 458, 458, 458, 458, 458, 458, 458, 458, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 473, 475, 477, 480, 481, 482, 483, 484, 485, 0, 487, 488, 489, 490, 491, 492, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 473, 475, 477, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 486, 494, 496, 497, 500, 502, 503, 504, 505, 506, 508, 505, 493, 509, 510, 512, 514, 515, 486, 0, 517, 504, 518, 519, 504, 493, 486, 494, 496, 497, 500, 502, 503, 504, 505, 506, 508, 505, 493, 509, 510, 512, 514, 515, 520, 516, 517, 504, 518, 519, 504, 516, 521, 522, 523, 524, 526, 527, 529, 530, 531, 532, 533, 534, 536, 537, 538, 539, 541, 543, 520, 516, 544, 545, 546, 547, 550, 516, 521, 522, 523, 524, 526, 527, 529, 530, 531, 532, 533, 534, 536, 537, 538, 539, 541, 543, 551, 552, 544, 545, 546, 547, 550, 553, 555, 556, 557, 559, 560, 563, 564, 565, 567, 568, 569, 556, 570, 571, 573, 575, 576, 577, 551, 552, 578, 580, 581, 582, 583, 553, 555, 556, 557, 559, 560, 563, 564, 565, 567, 568, 569, 556, 570, 571, 573, 575, 576, 577, 584, 586, 578, 580, 581, 582, 583, 587, 590, 591, 595, 596, 598, 599, 600, 601, 602, 603, 605, 606, 607, 609, 610, 611, 612, 613, 584, 586, 614, 615, 617, 618, 619, 587, 590, 591, 595, 596, 598, 599, 600, 601, 602, 603, 605, 606, 607, 609, 610, 611, 612, 613, 619, 620, 614, 615, 617, 618, 619, 621, 622, 623, 624, 626, 627, 628, 629, 630, 632, 634, 635, 636, 637, 638, 639, 640, 641, 642, 619, 620, 646, 647, 648, 649, 650, 621, 622, 623, 624, 626, 627, 628, 629, 630, 632, 634, 635, 636, 637, 638, 639, 640, 641, 642, 652, 653, 646, 647, 648, 649, 650, 654, 655, 654, 656, 657, 658, 660, 661, 662, 663, 664, 668, 669, 670, 671, 673, 674, 675, 676, 652, 653, 707, 676, 711, 720, 661, 654, 655, 654, 656, 657, 658, 660, 661, 662, 663, 664, 668, 669, 670, 671, 673, 674, 675, 676, 0, 0, 707, 676, 711, 720, 661, 712, 712, 712, 712, 712, 712, 712, 712, 713, 713, 713, 713, 713, 713, 713, 713, 713, 714, 714, 714, 714, 714, 714, 714, 714, 715, 715, 715, 715, 715, 715, 715, 715, 715, 716, 716, 716, 716, 716, 716, 716, 716, 721, 722, 724, 725, 726, 727, 731, 732, 734, 736, 737, 715, 906, 906, 906, 906, 906, 906, 906, 906, 0, 739, 740, 741, 742, 743, 721, 722, 724, 725, 726, 727, 731, 732, 734, 736, 737, 715, 717, 717, 717, 717, 717, 717, 717, 717, 717, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 0, 755, 756, 757, 758, 717, 0, 759, 760, 761, 762, 764, 765, 766, 767, 754, 768, 744, 745, 746, 747, 748, 749, 750, 751, 752, 754, 755, 756, 757, 758, 717, 754, 759, 760, 761, 762, 764, 765, 766, 767, 754, 768, 769, 770, 772, 773, 774, 776, 777, 778, 779, 754, 780, 781, 782, 783, 785, 754, 787, 790, 792, 793, 794, 795, 796, 797, 798, 799, 769, 770, 772, 773, 774, 776, 777, 778, 779, 800, 780, 781, 782, 783, 785, 801, 787, 790, 792, 793, 794, 795, 796, 797, 798, 799, 802, 803, 804, 806, 807, 808, 809, 811, 813, 800, 815, 816, 818, 819, 820, 801, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 802, 803, 804, 806, 807, 808, 809, 811, 813, 833, 815, 816, 818, 819, 820, 835, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 836, 839, 841, 842, 843, 844, 845, 846, 848, 833, 849, 850, 852, 853, 854, 835, 855, 856, 858, 859, 861, 862, 863, 865, 867, 868, 836, 839, 841, 842, 843, 844, 845, 846, 848, 869, 849, 850, 852, 853, 854, 871, 855, 856, 858, 859, 861, 862, 863, 865, 867, 868, 876, 877, 878, 879, 880, 882, 883, 884, 886, 869, 888, 889, 890, 891, 892, 871, 893, 894, 895, 896, 898, 899, 900, 901, 905, 0, 876, 877, 878, 879, 880, 882, 883, 884, 886, 0, 888, 889, 890, 891, 892, 0, 893, 894, 895, 896, 898, 899, 900, 901, 905, 907, 907, 907, 907, 907, 907, 907, 907, 908, 908, 908, 908, 908, 908, 908, 908, 909, 909, 909, 909, 909, 909, 909, 909, 911, 911, 911, 911, 911, 911, 911, 911, 0, 0, 914, 908, 915, 916, 917, 921, 922, 923, 924, 909, 927, 929, 932, 934, 935, 937, 938, 911, 912, 912, 912, 912, 912, 912, 912, 912, 914, 908, 915, 916, 917, 921, 922, 923, 924, 909, 927, 929, 932, 934, 935, 937, 938, 911, 940, 912, 941, 942, 944, 945, 946, 947, 948, 949, 950, 953, 955, 956, 957, 958, 942, 959, 961, 962, 963, 964, 965, 967, 968, 972, 940, 912, 941, 942, 944, 945, 946, 947, 948, 949, 950, 953, 955, 956, 957, 958, 942, 959, 961, 962, 963, 964, 965, 967, 968, 972, 973, 974, 976, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 992, 994, 996, 999, 1009, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1022, 973, 974, 976, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 992, 994, 996, 999, 1009, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1022, 1023, 1024, 1027, 1029, 1030, 1032, 1035, 1037, 1038, 1040, 1042, 1043, 1044, 1047, 1048, 1050, 1053, 1055, 1060, 1061, 1065, 1066, 1067, 1068, 1069, 1071, 1023, 1024, 1027, 1029, 1030, 1032, 1035, 1037, 1038, 1040, 1042, 1043, 1044, 1047, 1048, 1050, 1053, 1055, 1060, 1061, 1065, 1066, 1067, 1068, 1069, 1071, 1072, 1074, 1075, 1076, 1077, 1080, 1081, 1083, 1084, 1085, 1086, 1091, 1093, 1094, 1095, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1106, 1107, 1111, 1072, 1074, 1075, 1076, 1077, 1080, 1081, 1083, 1084, 1085, 1086, 1091, 1093, 1094, 1095, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1106, 1107, 1111, 1113, 1114, 1116, 1117, 1120, 1121, 1122, 1123, 1124, 1126, 1127, 1128, 1129, 1131, 1132, 1135, 1136, 1138, 1139, 1140, 1141, 1143, 1144, 1146, 1147, 1148, 1113, 1114, 1116, 1117, 1120, 1121, 1122, 1123, 1124, 1126, 1127, 1128, 1129, 1131, 1132, 1135, 1136, 1138, 1139, 1140, 1141, 1143, 1144, 1146, 1147, 1148, 1149, 1151, 1155, 1156, 1157, 1160, 1161, 1165, 1166, 1167, 1173, 1175, 1176, 1177, 1178, 1179, 1182, 1184, 1186, 1188, 1190, 1191, 1193, 1195, 1196, 1197, 1149, 1151, 1155, 1156, 1157, 1160, 1161, 1165, 1166, 1167, 1173, 1175, 1176, 1177, 1178, 1179, 1182, 1184, 1186, 1188, 1190, 1191, 1193, 1195, 1196, 1197, 1201, 1203, 1205, 1206, 1207, 1209, 1212, 1213, 1214, 1216, 1218, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1228, 1229, 1235, 1236, 1238, 1240, 1243, 1246, 1201, 1203, 1205, 1206, 1207, 1209, 1212, 1213, 1214, 1216, 1218, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1228, 1229, 1235, 1236, 1238, 1240, 1243, 1246, 1247, 1248, 1251, 1252, 1253, 1256, 1257, 1258, 1259, 1261, 1263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1247, 1248, 1251, 1252, 1253, 1256, 1257, 1258, 1259, 1261, 1263, 1269, 1269, 1270, 1270, 1271, 1271, 1272, 1272, 1273, 1273, 1274, 1274, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "frame/lex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "frame/lex.L" #include #include #include #include #include "util.h" #include "parser.H" extern YYSTYPE* frlval; /* rules */ #line 1503 "frame/lex.C" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 28 "frame/lex.L" #line 1606 "frame/lex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 1268 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 1267 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 30 "frame/lex.L" {return ABOUT_;} YY_BREAK case 2: YY_RULE_SETUP #line 31 "frame/lex.L" {return AIP_;} YY_BREAK case 3: YY_RULE_SETUP #line 32 "frame/lex.L" {return ALLOC_;} YY_BREAK case 4: YY_RULE_SETUP #line 33 "frame/lex.L" {return ALLOCGZ_;} YY_BREAK case 5: YY_RULE_SETUP #line 34 "frame/lex.L" {return ALIGN_;} YY_BREAK case 6: YY_RULE_SETUP #line 35 "frame/lex.L" {return ALL_;} YY_BREAK case 7: YY_RULE_SETUP #line 36 "frame/lex.L" {return ALT_;} YY_BREAK case 8: YY_RULE_SETUP #line 37 "frame/lex.L" {return AMPLIFIER_;} YY_BREAK case 9: YY_RULE_SETUP #line 38 "frame/lex.L" {return ANALYSIS_;} YY_BREAK case 10: YY_RULE_SETUP #line 39 "frame/lex.L" {return ANGLE_;} YY_BREAK case 11: YY_RULE_SETUP #line 40 "frame/lex.L" {return ANNULUS_;} YY_BREAK case 12: YY_RULE_SETUP #line 41 "frame/lex.L" {return APPEND_;} YY_BREAK case 13: YY_RULE_SETUP #line 42 "frame/lex.L" {return ARCMIN_;} YY_BREAK case 14: YY_RULE_SETUP #line 43 "frame/lex.L" {return ARCSEC_;} YY_BREAK case 15: YY_RULE_SETUP #line 44 "frame/lex.L" {return ARRAY_;} YY_BREAK case 16: YY_RULE_SETUP #line 45 "frame/lex.L" {return ARROW_;} YY_BREAK case 17: YY_RULE_SETUP #line 46 "frame/lex.L" {return ASINH_;} YY_BREAK case 18: YY_RULE_SETUP #line 47 "frame/lex.L" {return AST_;} YY_BREAK case 19: YY_RULE_SETUP #line 48 "frame/lex.L" {return AUTO_;} YY_BREAK case 20: YY_RULE_SETUP #line 49 "frame/lex.L" {return AUX_;} YY_BREAK case 21: YY_RULE_SETUP #line 50 "frame/lex.L" {return AVERAGE_;} YY_BREAK case 22: YY_RULE_SETUP #line 51 "frame/lex.L" {return AXES_;} YY_BREAK case 23: YY_RULE_SETUP #line 52 "frame/lex.L" {return AZIMUTH_;} YY_BREAK case 24: YY_RULE_SETUP #line 53 "frame/lex.L" {return B1950_;} YY_BREAK case 25: YY_RULE_SETUP #line 54 "frame/lex.L" {return BACK_;} YY_BREAK case 26: YY_RULE_SETUP #line 55 "frame/lex.L" {return BACKGROUND_;} YY_BREAK case 27: YY_RULE_SETUP #line 56 "frame/lex.L" {return BASE_;} YY_BREAK case 28: YY_RULE_SETUP #line 57 "frame/lex.L" {return BBOX_;} YY_BREAK case 29: YY_RULE_SETUP #line 58 "frame/lex.L" {return BEGIN_;} YY_BREAK case 30: YY_RULE_SETUP #line 59 "frame/lex.L" {return BG_;} YY_BREAK case 31: YY_RULE_SETUP #line 60 "frame/lex.L" {return BIGENDIAN_;} YY_BREAK case 32: YY_RULE_SETUP #line 61 "frame/lex.L" {return BIGENDIAN_;} YY_BREAK case 33: YY_RULE_SETUP #line 62 "frame/lex.L" {return BIN_;} YY_BREAK case 34: YY_RULE_SETUP #line 63 "frame/lex.L" {return BITPIX_;} YY_BREAK case 35: YY_RULE_SETUP #line 64 "frame/lex.L" {return BLOCK_;} YY_BREAK case 36: YY_RULE_SETUP #line 65 "frame/lex.L" {return BORDER_;} YY_BREAK case 37: YY_RULE_SETUP #line 66 "frame/lex.L" {return BOX_;} YY_BREAK case 38: YY_RULE_SETUP #line 67 "frame/lex.L" {return BOXANNULUS_;} YY_BREAK case 39: YY_RULE_SETUP #line 68 "frame/lex.L" {return BOXCAR_;} YY_BREAK case 40: YY_RULE_SETUP #line 69 "frame/lex.L" {return BOXCIRCLE_;} YY_BREAK case 41: YY_RULE_SETUP #line 70 "frame/lex.L" {return BPANDA_;} YY_BREAK case 42: YY_RULE_SETUP #line 71 "frame/lex.L" {return BUFFER_;} YY_BREAK case 43: YY_RULE_SETUP #line 72 "frame/lex.L" {return BW_;} YY_BREAK case 44: YY_RULE_SETUP #line 73 "frame/lex.L" {return CALLBACK_;} YY_BREAK case 45: YY_RULE_SETUP #line 74 "frame/lex.L" {return CANVAS_;} YY_BREAK case 46: YY_RULE_SETUP #line 75 "frame/lex.L" {return CATALOG_;} YY_BREAK case 47: YY_RULE_SETUP #line 76 "frame/lex.L" {return CELESTRIAL_;} YY_BREAK case 48: YY_RULE_SETUP #line 77 "frame/lex.L" {return CENTER_;} YY_BREAK case 49: YY_RULE_SETUP #line 78 "frame/lex.L" {return CENTROID_;} YY_BREAK case 50: YY_RULE_SETUP #line 79 "frame/lex.L" {return CHANNEL_;} YY_BREAK case 51: YY_RULE_SETUP #line 80 "frame/lex.L" {return CIAO_;} YY_BREAK case 52: YY_RULE_SETUP #line 81 "frame/lex.L" {return CIRCLE_;} YY_BREAK case 53: YY_RULE_SETUP #line 82 "frame/lex.L" {return CLEAR_;} YY_BREAK case 54: YY_RULE_SETUP #line 83 "frame/lex.L" {return CLIP_;} YY_BREAK case 55: YY_RULE_SETUP #line 84 "frame/lex.L" {return COLOR_;} YY_BREAK case 56: YY_RULE_SETUP #line 85 "frame/lex.L" {return COLORBAR_;} YY_BREAK case 57: YY_RULE_SETUP #line 86 "frame/lex.L" {return COLORMAP_;} YY_BREAK case 58: YY_RULE_SETUP #line 87 "frame/lex.L" {return COLORSCALE_;} YY_BREAK case 59: YY_RULE_SETUP #line 88 "frame/lex.L" {return COLORSPACE_;} YY_BREAK case 60: YY_RULE_SETUP #line 89 "frame/lex.L" {return COLS_;} YY_BREAK case 61: YY_RULE_SETUP #line 90 "frame/lex.L" {return COLUMN_;} YY_BREAK case 62: YY_RULE_SETUP #line 91 "frame/lex.L" {return COMMAND_;} YY_BREAK case 63: YY_RULE_SETUP #line 92 "frame/lex.L" {return COMPASS_;} YY_BREAK case 64: YY_RULE_SETUP #line 93 "frame/lex.L" {return COMPOSITE_;} YY_BREAK case 65: YY_RULE_SETUP #line 94 "frame/lex.L" {return COMPRESS_;} YY_BREAK case 66: YY_RULE_SETUP #line 95 "frame/lex.L" {return CONTOUR_;} YY_BREAK case 67: YY_RULE_SETUP #line 96 "frame/lex.L" {return CONTRAST_;} YY_BREAK case 68: YY_RULE_SETUP #line 97 "frame/lex.L" {return COORDINATES_;} YY_BREAK case 69: YY_RULE_SETUP #line 98 "frame/lex.L" {return COPY_;} YY_BREAK case 70: YY_RULE_SETUP #line 99 "frame/lex.L" {return COUNT_;} YY_BREAK case 71: YY_RULE_SETUP #line 100 "frame/lex.L" {return CROP_;} YY_BREAK case 72: YY_RULE_SETUP #line 101 "frame/lex.L" {return CROSS_;} YY_BREAK case 73: YY_RULE_SETUP #line 102 "frame/lex.L" {return CPANDA_;} YY_BREAK case 74: YY_RULE_SETUP #line 103 "frame/lex.L" {return CREATE_;} YY_BREAK case 75: YY_RULE_SETUP #line 104 "frame/lex.L" {return CROSSHAIR_;} YY_BREAK case 76: YY_RULE_SETUP #line 105 "frame/lex.L" {return CUBE_;} YY_BREAK case 77: YY_RULE_SETUP #line 106 "frame/lex.L" {return CURSOR_;} YY_BREAK case 78: YY_RULE_SETUP #line 107 "frame/lex.L" {return CUT_;} YY_BREAK case 79: YY_RULE_SETUP #line 108 "frame/lex.L" {return CMYK_;} YY_BREAK case 80: YY_RULE_SETUP #line 109 "frame/lex.L" {return DASH_;} YY_BREAK case 81: YY_RULE_SETUP #line 110 "frame/lex.L" {return DASHLIST_;} YY_BREAK case 82: YY_RULE_SETUP #line 111 "frame/lex.L" {return DATA_;} YY_BREAK case 83: YY_RULE_SETUP #line 112 "frame/lex.L" {return DATAMIN_;} YY_BREAK case 84: YY_RULE_SETUP #line 113 "frame/lex.L" {return DATASEC_;} YY_BREAK case 85: YY_RULE_SETUP #line 114 "frame/lex.L" {return DEBUG_;} YY_BREAK case 86: YY_RULE_SETUP #line 115 "frame/lex.L" {return DEGREES_;} YY_BREAK case 87: YY_RULE_SETUP #line 116 "frame/lex.L" {return DEFAULT_;} YY_BREAK case 88: YY_RULE_SETUP #line 117 "frame/lex.L" {return DELETE_;} YY_BREAK case 89: YY_RULE_SETUP #line 118 "frame/lex.L" {return DEPTH_;} YY_BREAK case 90: YY_RULE_SETUP #line 119 "frame/lex.L" {return DETECTOR_;} YY_BREAK case 91: YY_RULE_SETUP #line 120 "frame/lex.L" {return DIAMOND_;} YY_BREAK case 92: YY_RULE_SETUP #line 121 "frame/lex.L" {return DIM_;} YY_BREAK case 93: YY_RULE_SETUP #line 122 "frame/lex.L" {return DS9_;} YY_BREAK case 94: YY_RULE_SETUP #line 123 "frame/lex.L" {return ECLIPTIC_;} YY_BREAK case 95: YY_RULE_SETUP #line 124 "frame/lex.L" {return ELEVATION_;} YY_BREAK case 96: YY_RULE_SETUP #line 125 "frame/lex.L" {return ELLIPSE_;} YY_BREAK case 97: YY_RULE_SETUP #line 126 "frame/lex.L" {return ELLIPSEANNULUS_;} YY_BREAK case 98: YY_RULE_SETUP #line 127 "frame/lex.L" {return EDIT_;} YY_BREAK case 99: YY_RULE_SETUP #line 128 "frame/lex.L" {return END_;} YY_BREAK case 100: YY_RULE_SETUP #line 129 "frame/lex.L" {return ENVI_;} YY_BREAK case 101: YY_RULE_SETUP #line 130 "frame/lex.L" {return EPANDA_;} YY_BREAK case 102: YY_RULE_SETUP #line 131 "frame/lex.L" {return EPSILON_;} YY_BREAK case 103: YY_RULE_SETUP #line 132 "frame/lex.L" {return EQUATORIAL_;} YY_BREAK case 104: YY_RULE_SETUP #line 133 "frame/lex.L" {return ERASE_;} YY_BREAK case 105: YY_RULE_SETUP #line 134 "frame/lex.L" {return EXT_;} YY_BREAK case 106: YY_RULE_SETUP #line 135 "frame/lex.L" {return FACTOR_;} YY_BREAK case 107: YY_RULE_SETUP #line 136 "frame/lex.L" {return FALSE_;} YY_BREAK case 108: YY_RULE_SETUP #line 137 "frame/lex.L" {return FILE_;} YY_BREAK case 109: YY_RULE_SETUP #line 138 "frame/lex.L" {return FILTER_;} YY_BREAK case 110: YY_RULE_SETUP #line 139 "frame/lex.L" {return FIT_;} YY_BREAK case 111: YY_RULE_SETUP #line 140 "frame/lex.L" {return FITS_;} YY_BREAK case 112: YY_RULE_SETUP #line 141 "frame/lex.L" {return FITSY_;} YY_BREAK case 113: YY_RULE_SETUP #line 142 "frame/lex.L" {return FIXED_;} YY_BREAK case 114: YY_RULE_SETUP #line 143 "frame/lex.L" {return FK4_;} YY_BREAK case 115: YY_RULE_SETUP #line 144 "frame/lex.L" {return FK4_NO_E_;} YY_BREAK case 116: YY_RULE_SETUP #line 145 "frame/lex.L" {return FK5_;} YY_BREAK case 117: YY_RULE_SETUP #line 146 "frame/lex.L" {return FONT_;} YY_BREAK case 118: YY_RULE_SETUP #line 147 "frame/lex.L" {return FRONT_;} YY_BREAK case 119: YY_RULE_SETUP #line 148 "frame/lex.L" {return FULL_;} YY_BREAK case 120: YY_RULE_SETUP #line 149 "frame/lex.L" {return FUNCTION_;} YY_BREAK case 121: YY_RULE_SETUP #line 150 "frame/lex.L" {return GALACTIC_;} YY_BREAK case 122: YY_RULE_SETUP #line 151 "frame/lex.L" {return GAUSSIAN_;} YY_BREAK case 123: YY_RULE_SETUP #line 152 "frame/lex.L" {return GET_;} YY_BREAK case 124: YY_RULE_SETUP #line 153 "frame/lex.L" {return GLOBAL_;} YY_BREAK case 125: YY_RULE_SETUP #line 154 "frame/lex.L" {return GRAPHICS_;} YY_BREAK case 126: YY_RULE_SETUP #line 155 "frame/lex.L" {return GRAY_;} YY_BREAK case 127: YY_RULE_SETUP #line 156 "frame/lex.L" {return GRID_;} YY_BREAK case 128: YY_RULE_SETUP #line 157 "frame/lex.L" {return GZ_;} YY_BREAK case 129: YY_RULE_SETUP #line 158 "frame/lex.L" {return HANDLE_;} YY_BREAK case 130: YY_RULE_SETUP #line 159 "frame/lex.L" {return HAS_;} YY_BREAK case 131: YY_RULE_SETUP #line 160 "frame/lex.L" {return HEAD_;} YY_BREAK case 132: YY_RULE_SETUP #line 161 "frame/lex.L" {return HEADER_;} YY_BREAK case 133: YY_RULE_SETUP #line 162 "frame/lex.L" {return HEIGHT_;} YY_BREAK case 134: YY_RULE_SETUP #line 163 "frame/lex.L" {return HELIOECLIPTIC_;} YY_BREAK case 135: YY_RULE_SETUP #line 164 "frame/lex.L" {return HIDE_;} YY_BREAK case 136: YY_RULE_SETUP #line 165 "frame/lex.L" {return HIGHLITE_;} YY_BREAK case 137: YY_RULE_SETUP #line 166 "frame/lex.L" {return HISTEQU_;} YY_BREAK case 138: YY_RULE_SETUP #line 167 "frame/lex.L" {return HISTOGRAM_;} YY_BREAK case 139: YY_RULE_SETUP #line 168 "frame/lex.L" {return HORIZONTAL_;} YY_BREAK case 140: YY_RULE_SETUP #line 169 "frame/lex.L" {return ICRS_;} YY_BREAK case 141: YY_RULE_SETUP #line 170 "frame/lex.L" {return ID_;} YY_BREAK case 142: YY_RULE_SETUP #line 171 "frame/lex.L" {return IIS_;} YY_BREAK case 143: YY_RULE_SETUP #line 172 "frame/lex.L" {return IMAGE_;} YY_BREAK case 144: YY_RULE_SETUP #line 173 "frame/lex.L" {return INCLUDE_;} YY_BREAK case 145: YY_RULE_SETUP #line 174 "frame/lex.L" {return INCR_;} YY_BREAK case 146: YY_RULE_SETUP #line 175 "frame/lex.L" {return INFO_;} YY_BREAK case 147: YY_RULE_SETUP #line 176 "frame/lex.L" {return INTEGER_;} YY_BREAK case 148: YY_RULE_SETUP #line 177 "frame/lex.L" {return ITERATION_;} YY_BREAK case 149: YY_RULE_SETUP #line 178 "frame/lex.L" {return IRAF_;} YY_BREAK case 150: YY_RULE_SETUP #line 179 "frame/lex.L" {return IRAFMIN_;} YY_BREAK case 151: YY_RULE_SETUP #line 180 "frame/lex.L" {return J2000_;} YY_BREAK case 152: YY_RULE_SETUP #line 181 "frame/lex.L" {return KEY_;} YY_BREAK case 153: YY_RULE_SETUP #line 182 "frame/lex.L" {return KEYWORD_;} YY_BREAK case 154: YY_RULE_SETUP #line 183 "frame/lex.L" {return LABEL_;} YY_BREAK case 155: YY_RULE_SETUP #line 184 "frame/lex.L" {return LENGTH_;} YY_BREAK case 156: YY_RULE_SETUP #line 185 "frame/lex.L" {return LEVEL_;} YY_BREAK case 157: YY_RULE_SETUP #line 186 "frame/lex.L" {return LITTLEENDIAN_;} YY_BREAK case 158: YY_RULE_SETUP #line 187 "frame/lex.L" {return LITTLEENDIAN_;} YY_BREAK case 159: YY_RULE_SETUP #line 188 "frame/lex.L" {return LINE_;} YY_BREAK case 160: YY_RULE_SETUP #line 189 "frame/lex.L" {return LINEAR_;} YY_BREAK case 161: YY_RULE_SETUP #line 190 "frame/lex.L" {return LIST_;} YY_BREAK case 162: YY_RULE_SETUP #line 191 "frame/lex.L" {return LOAD_;} YY_BREAK case 163: YY_RULE_SETUP #line 192 "frame/lex.L" {return LOCAL_;} YY_BREAK case 164: YY_RULE_SETUP #line 193 "frame/lex.L" {return LOG_;} YY_BREAK case 165: YY_RULE_SETUP #line 194 "frame/lex.L" {return MACOSX_;} YY_BREAK case 166: YY_RULE_SETUP #line 195 "frame/lex.L" {return MAGNIFIER_;} YY_BREAK case 167: YY_RULE_SETUP #line 196 "frame/lex.L" {return MATCH_;} YY_BREAK case 168: YY_RULE_SETUP #line 197 "frame/lex.L" {return MAP_;} YY_BREAK case 169: YY_RULE_SETUP #line 198 "frame/lex.L" {return MARK_;} YY_BREAK case 170: YY_RULE_SETUP #line 199 "frame/lex.L" {return MARKER_;} YY_BREAK case 171: YY_RULE_SETUP #line 200 "frame/lex.L" {return MASK_;} YY_BREAK case 172: YY_RULE_SETUP #line 201 "frame/lex.L" {return MESSAGE_;} YY_BREAK case 173: YY_RULE_SETUP #line 202 "frame/lex.L" {return METHOD_;} YY_BREAK case 174: YY_RULE_SETUP #line 203 "frame/lex.L" {return MINMAX_;} YY_BREAK case 175: YY_RULE_SETUP #line 204 "frame/lex.L" {return MIP_;} YY_BREAK case 176: YY_RULE_SETUP #line 205 "frame/lex.L" {return MMAP_;} YY_BREAK case 177: YY_RULE_SETUP #line 206 "frame/lex.L" {return MMAPINCR_;} YY_BREAK case 178: YY_RULE_SETUP #line 207 "frame/lex.L" {return MODE_;} YY_BREAK case 179: YY_RULE_SETUP #line 208 "frame/lex.L" {return MOSAIC_;} YY_BREAK case 180: YY_RULE_SETUP #line 209 "frame/lex.L" {return MOTION_;} YY_BREAK case 181: YY_RULE_SETUP #line 210 "frame/lex.L" {return MOVE_;} YY_BREAK case 182: YY_RULE_SETUP #line 211 "frame/lex.L" {return NAME_;} YY_BREAK case 183: YY_RULE_SETUP #line 212 "frame/lex.L" {return NAN_;} YY_BREAK case 184: YY_RULE_SETUP #line 213 "frame/lex.L" {return NATIVE_;} YY_BREAK case 185: YY_RULE_SETUP #line 214 "frame/lex.L" {return NAXES_;} YY_BREAK case 186: YY_RULE_SETUP #line 215 "frame/lex.L" {return NEW_;} YY_BREAK case 187: YY_RULE_SETUP #line 216 "frame/lex.L" {return NEXT_;} YY_BREAK case 188: YY_RULE_SETUP #line 217 "frame/lex.L" {return NO_;} YY_BREAK case 189: YY_RULE_SETUP #line 218 "frame/lex.L" {return NONE_;} YY_BREAK case 190: YY_RULE_SETUP #line 219 "frame/lex.L" {return NOW_;} YY_BREAK case 191: YY_RULE_SETUP #line 220 "frame/lex.L" {return NRRD_;} YY_BREAK case 192: YY_RULE_SETUP #line 221 "frame/lex.L" {return NUMBER_;} YY_BREAK case 193: YY_RULE_SETUP #line 222 "frame/lex.L" {return OBJECT_;} YY_BREAK case 194: YY_RULE_SETUP #line 223 "frame/lex.L" {return OFF_;} YY_BREAK case 195: YY_RULE_SETUP #line 224 "frame/lex.L" {return ON_;} YY_BREAK case 196: YY_RULE_SETUP #line 225 "frame/lex.L" {return ONLY_;} YY_BREAK case 197: YY_RULE_SETUP #line 226 "frame/lex.L" {return OPTION_;} YY_BREAK case 198: YY_RULE_SETUP #line 227 "frame/lex.L" {return ORIENT_;} YY_BREAK case 199: YY_RULE_SETUP #line 228 "frame/lex.L" {return PAN_;} YY_BREAK case 200: YY_RULE_SETUP #line 229 "frame/lex.L" {return CPANDA_;} YY_BREAK case 201: YY_RULE_SETUP #line 230 "frame/lex.L" {return PANNER_;} YY_BREAK case 202: YY_RULE_SETUP #line 231 "frame/lex.L" {return PARSER_;} YY_BREAK case 203: YY_RULE_SETUP #line 232 "frame/lex.L" {return PASTE_;} YY_BREAK case 204: YY_RULE_SETUP #line 233 "frame/lex.L" {return PERF_;} YY_BREAK case 205: YY_RULE_SETUP #line 234 "frame/lex.L" {return PHOTO_;} YY_BREAK case 206: YY_RULE_SETUP #line 235 "frame/lex.L" {return PHYSICAL_;} YY_BREAK case 207: YY_RULE_SETUP #line 236 "frame/lex.L" {return PIXEL_;} YY_BREAK case 208: YY_RULE_SETUP #line 237 "frame/lex.L" {return PLOT2D_;} YY_BREAK case 209: YY_RULE_SETUP #line 238 "frame/lex.L" {return PLOT3D_;} YY_BREAK case 210: YY_RULE_SETUP #line 239 "frame/lex.L" {return POINT_;} YY_BREAK case 211: YY_RULE_SETUP #line 240 "frame/lex.L" {return POINTER_;} YY_BREAK case 212: YY_RULE_SETUP #line 241 "frame/lex.L" {return POLYGON_;} YY_BREAK case 213: YY_RULE_SETUP #line 242 "frame/lex.L" {return POSTSCRIPT_;} YY_BREAK case 214: YY_RULE_SETUP #line 243 "frame/lex.L" {return POW_;} YY_BREAK case 215: YY_RULE_SETUP #line 244 "frame/lex.L" {return PRINT_;} YY_BREAK case 216: YY_RULE_SETUP #line 245 "frame/lex.L" {return PRESERVE_;} YY_BREAK case 217: YY_RULE_SETUP #line 246 "frame/lex.L" {return PROJECTION_;} YY_BREAK case 218: YY_RULE_SETUP #line 247 "frame/lex.L" {return PROPERTY_;} YY_BREAK case 219: YY_RULE_SETUP #line 248 "frame/lex.L" {return PROS_;} YY_BREAK case 220: YY_RULE_SETUP #line 249 "frame/lex.L" {return PUBLICATION_;} YY_BREAK case 221: YY_RULE_SETUP #line 250 "frame/lex.L" {return QUERY_;} YY_BREAK case 222: YY_RULE_SETUP #line 251 "frame/lex.L" {return RADIAL_;} YY_BREAK case 223: YY_RULE_SETUP #line 252 "frame/lex.L" {return RADIUS_;} YY_BREAK case 224: YY_RULE_SETUP #line 253 "frame/lex.L" {return REGION_;} YY_BREAK case 225: YY_RULE_SETUP #line 254 "frame/lex.L" {return REPLACE_;} YY_BREAK case 226: YY_RULE_SETUP #line 255 "frame/lex.L" {return RESAMPLE_;} YY_BREAK case 227: YY_RULE_SETUP #line 256 "frame/lex.L" {return RESET_;} YY_BREAK case 228: YY_RULE_SETUP #line 257 "frame/lex.L" {return RESOLUTION_;} YY_BREAK case 229: YY_RULE_SETUP #line 258 "frame/lex.L" {return RGB_;} YY_BREAK case 230: YY_RULE_SETUP #line 259 "frame/lex.L" {return ROOT_;} YY_BREAK case 231: YY_RULE_SETUP #line 260 "frame/lex.L" {return ROTATE_;} YY_BREAK case 232: YY_RULE_SETUP #line 261 "frame/lex.L" {return RULER_;} YY_BREAK case 233: YY_RULE_SETUP #line 262 "frame/lex.L" {return SAMPLE_;} YY_BREAK case 234: YY_RULE_SETUP #line 263 "frame/lex.L" {return SAOIMAGE_;} YY_BREAK case 235: YY_RULE_SETUP #line 264 "frame/lex.L" {return SAOTNG_;} YY_BREAK case 236: YY_RULE_SETUP #line 265 "frame/lex.L" {return SAVE_;} YY_BREAK case 237: YY_RULE_SETUP #line 266 "frame/lex.L" {return SCALE_;} YY_BREAK case 238: YY_RULE_SETUP #line 267 "frame/lex.L" {return SCAN_;} YY_BREAK case 239: YY_RULE_SETUP #line 268 "frame/lex.L" {return SCIENTIFIC_;} YY_BREAK case 240: YY_RULE_SETUP #line 269 "frame/lex.L" {return SCOPE_;} YY_BREAK case 241: YY_RULE_SETUP #line 270 "frame/lex.L" {return SEGMENT_;} YY_BREAK case 242: YY_RULE_SETUP #line 271 "frame/lex.L" {return SELECT_;} YY_BREAK case 243: YY_RULE_SETUP #line 272 "frame/lex.L" {return SET_;} YY_BREAK case 244: YY_RULE_SETUP #line 273 "frame/lex.L" {return SEXAGESIMAL_;} YY_BREAK case 245: YY_RULE_SETUP #line 274 "frame/lex.L" {return SHAPE_;} YY_BREAK case 246: YY_RULE_SETUP #line 275 "frame/lex.L" {return SHARED_;} YY_BREAK case 247: YY_RULE_SETUP #line 276 "frame/lex.L" {return SHIFT_;} YY_BREAK case 248: YY_RULE_SETUP #line 277 "frame/lex.L" {return SHMID_;} YY_BREAK case 249: YY_RULE_SETUP #line 278 "frame/lex.L" {return SHOW_;} YY_BREAK case 250: YY_RULE_SETUP #line 279 "frame/lex.L" {return SINH_;} YY_BREAK case 251: YY_RULE_SETUP #line 280 "frame/lex.L" {return SIZE_;} YY_BREAK case 252: YY_RULE_SETUP #line 281 "frame/lex.L" {return SLICE_;} YY_BREAK case 253: YY_RULE_SETUP #line 282 "frame/lex.L" {return SMMAP_;} YY_BREAK case 254: YY_RULE_SETUP #line 283 "frame/lex.L" {return SMOOTH_;} YY_BREAK case 255: YY_RULE_SETUP #line 284 "frame/lex.L" {return SOCKET_;} YY_BREAK case 256: YY_RULE_SETUP #line 285 "frame/lex.L" {return SOCKETGZ_;} YY_BREAK case 257: YY_RULE_SETUP #line 286 "frame/lex.L" {return SOURCE_;} YY_BREAK case 258: YY_RULE_SETUP #line 287 "frame/lex.L" {return SQRT_;} YY_BREAK case 259: YY_RULE_SETUP #line 288 "frame/lex.L" {return SQUARED_;} YY_BREAK case 260: YY_RULE_SETUP #line 289 "frame/lex.L" {return SSHARED_;} YY_BREAK case 261: YY_RULE_SETUP #line 290 "frame/lex.L" {return STATS_;} YY_BREAK case 262: YY_RULE_SETUP #line 291 "frame/lex.L" {return STATUS_;} YY_BREAK case 263: YY_RULE_SETUP #line 292 "frame/lex.L" {return SUM_;} YY_BREAK case 264: YY_RULE_SETUP #line 293 "frame/lex.L" {return SUPERGALACTIC_;} YY_BREAK case 265: YY_RULE_SETUP #line 294 "frame/lex.L" {return SYSTEM_;} YY_BREAK case 266: YY_RULE_SETUP #line 295 "frame/lex.L" {return TABLE_;} YY_BREAK case 267: YY_RULE_SETUP #line 296 "frame/lex.L" {return TAG_;} YY_BREAK case 268: YY_RULE_SETUP #line 297 "frame/lex.L" {return TEMPLATE_;} YY_BREAK case 269: YY_RULE_SETUP #line 298 "frame/lex.L" {return TEXT_;} YY_BREAK case 270: YY_RULE_SETUP #line 299 "frame/lex.L" {return THREADS_;} YY_BREAK case 271: YY_RULE_SETUP #line 300 "frame/lex.L" {return THREED_;} YY_BREAK case 272: YY_RULE_SETUP #line 301 "frame/lex.L" {return THRESHOLD_;} YY_BREAK case 273: YY_RULE_SETUP #line 302 "frame/lex.L" {return THICK_;} YY_BREAK case 274: YY_RULE_SETUP #line 303 "frame/lex.L" {return TRANSPARENCY_;} YY_BREAK case 275: YY_RULE_SETUP #line 304 "frame/lex.L" {return TO_;} YY_BREAK case 276: YY_RULE_SETUP #line 305 "frame/lex.L" {return TOGGLE_;} YY_BREAK case 277: YY_RULE_SETUP #line 306 "frame/lex.L" {return TOPHAT_;} YY_BREAK case 278: YY_RULE_SETUP #line 307 "frame/lex.L" {return TRUE_;} YY_BREAK case 279: YY_RULE_SETUP #line 308 "frame/lex.L" {return TYPE_;} YY_BREAK case 280: YY_RULE_SETUP #line 309 "frame/lex.L" {return UNDO_;} YY_BREAK case 281: YY_RULE_SETUP #line 310 "frame/lex.L" {return UNLOAD_;} YY_BREAK case 282: YY_RULE_SETUP #line 311 "frame/lex.L" {return UNHIGHLITE_;} YY_BREAK case 283: YY_RULE_SETUP #line 312 "frame/lex.L" {return UNSELECT_;} YY_BREAK case 284: YY_RULE_SETUP #line 313 "frame/lex.L" {return UPDATE_;} YY_BREAK case 285: YY_RULE_SETUP #line 314 "frame/lex.L" {return USER_;} YY_BREAK case 286: YY_RULE_SETUP #line 315 "frame/lex.L" {return VALUE_;} YY_BREAK case 287: YY_RULE_SETUP #line 316 "frame/lex.L" {return VAR_;} YY_BREAK case 288: YY_RULE_SETUP #line 317 "frame/lex.L" {return VIEW_;} YY_BREAK case 289: YY_RULE_SETUP #line 318 "frame/lex.L" {return VECTOR_;} YY_BREAK case 290: YY_RULE_SETUP #line 319 "frame/lex.L" {return VERSION_;} YY_BREAK case 291: YY_RULE_SETUP #line 320 "frame/lex.L" {return VERTEX_;} YY_BREAK case 292: YY_RULE_SETUP #line 321 "frame/lex.L" {return VERTICAL_;} YY_BREAK case 293: YY_RULE_SETUP #line 322 "frame/lex.L" {return WARP_;} YY_BREAK case 294: YY_RULE_SETUP #line 323 "frame/lex.L" {return WCS_;} YY_BREAK case 295: YY_RULE_SETUP #line 324 "frame/lex.L" {return WCSA_;} YY_BREAK case 296: YY_RULE_SETUP #line 325 "frame/lex.L" {return WCSB_;} YY_BREAK case 297: YY_RULE_SETUP #line 326 "frame/lex.L" {return WCSC_;} YY_BREAK case 298: YY_RULE_SETUP #line 327 "frame/lex.L" {return WCSD_;} YY_BREAK case 299: YY_RULE_SETUP #line 328 "frame/lex.L" {return WCSE_;} YY_BREAK case 300: YY_RULE_SETUP #line 329 "frame/lex.L" {return WCSF_;} YY_BREAK case 301: YY_RULE_SETUP #line 330 "frame/lex.L" {return WCSG_;} YY_BREAK case 302: YY_RULE_SETUP #line 331 "frame/lex.L" {return WCSH_;} YY_BREAK case 303: YY_RULE_SETUP #line 332 "frame/lex.L" {return WCSI_;} YY_BREAK case 304: YY_RULE_SETUP #line 333 "frame/lex.L" {return WCSJ_;} YY_BREAK case 305: YY_RULE_SETUP #line 334 "frame/lex.L" {return WCSK_;} YY_BREAK case 306: YY_RULE_SETUP #line 335 "frame/lex.L" {return WCSL_;} YY_BREAK case 307: YY_RULE_SETUP #line 336 "frame/lex.L" {return WCSM_;} YY_BREAK case 308: YY_RULE_SETUP #line 337 "frame/lex.L" {return WCSN_;} YY_BREAK case 309: YY_RULE_SETUP #line 338 "frame/lex.L" {return WCSO_;} YY_BREAK case 310: YY_RULE_SETUP #line 339 "frame/lex.L" {return WCSP_;} YY_BREAK case 311: YY_RULE_SETUP #line 340 "frame/lex.L" {return WCSQ_;} YY_BREAK case 312: YY_RULE_SETUP #line 341 "frame/lex.L" {return WCSR_;} YY_BREAK case 313: YY_RULE_SETUP #line 342 "frame/lex.L" {return WCSS_;} YY_BREAK case 314: YY_RULE_SETUP #line 343 "frame/lex.L" {return WCST_;} YY_BREAK case 315: YY_RULE_SETUP #line 344 "frame/lex.L" {return WCSU_;} YY_BREAK case 316: YY_RULE_SETUP #line 345 "frame/lex.L" {return WCSV_;} YY_BREAK case 317: YY_RULE_SETUP #line 346 "frame/lex.L" {return WCSW_;} YY_BREAK case 318: YY_RULE_SETUP #line 347 "frame/lex.L" {return WCSX_;} YY_BREAK case 319: YY_RULE_SETUP #line 348 "frame/lex.L" {return WCSY_;} YY_BREAK case 320: YY_RULE_SETUP #line 349 "frame/lex.L" {return WCSZ_;} YY_BREAK case 321: YY_RULE_SETUP #line 350 "frame/lex.L" {return WCS0_;} YY_BREAK case 322: YY_RULE_SETUP #line 351 "frame/lex.L" {return WFPC2_;} YY_BREAK case 323: YY_RULE_SETUP #line 352 "frame/lex.L" {return WIDTH_;} YY_BREAK case 324: YY_RULE_SETUP #line 353 "frame/lex.L" {return WIN32_;} YY_BREAK case 325: YY_RULE_SETUP #line 354 "frame/lex.L" {return XML_;} YY_BREAK case 326: YY_RULE_SETUP #line 355 "frame/lex.L" {return XY_;} YY_BREAK case 327: YY_RULE_SETUP #line 356 "frame/lex.L" {return YES_;} YY_BREAK case 328: YY_RULE_SETUP #line 357 "frame/lex.L" {return ZMAX_;} YY_BREAK case 329: YY_RULE_SETUP #line 358 "frame/lex.L" {return ZSCALE_;} YY_BREAK case 330: YY_RULE_SETUP #line 359 "frame/lex.L" {return ZOOM_;} YY_BREAK case 331: YY_RULE_SETUP #line 361 "frame/lex.L" { // Integer frlval->integer = atoi(yytext); return INT; } YY_BREAK case 332: #line 367 "frame/lex.L" case 333: YY_RULE_SETUP #line 367 "frame/lex.L" { // Real Number frlval->real = atof(yytext); return REAL; } YY_BREAK case 334: YY_RULE_SETUP #line 372 "frame/lex.L" { // Pointer frlval->ptr = (void*)strtoul(yytext,NULL,16); return POINTER; } YY_BREAK case 335: #line 378 "frame/lex.L" case 336: YY_RULE_SETUP #line 378 "frame/lex.L" { // degrees yytext[yyleng-1] = '\0'; frlval->real = atof(yytext); return ANGDEGREE; } YY_BREAK case 337: #line 385 "frame/lex.L" case 338: YY_RULE_SETUP #line 385 "frame/lex.L" { // radians yytext[yyleng-1] = '\0'; frlval->real = atof(yytext); return ANGRADIAN; } YY_BREAK case 339: #line 392 "frame/lex.L" case 340: YY_RULE_SETUP #line 392 "frame/lex.L" { // sexagesimal int ll = yyleng <(FRBUFSIZE-1) ? yyleng:(FRBUFSIZE-1); strncpy(frlval->str,yytext,ll); frlval->str[ll] = '\0'; return SEXSTR; } YY_BREAK case 341: #line 400 "frame/lex.L" case 342: YY_RULE_SETUP #line 400 "frame/lex.L" { // HMS int ll = yyleng <(FRBUFSIZE-1) ? yyleng:(FRBUFSIZE-1); strncpy(frlval->str,yytext,ll); frlval->str[ll] = '\0'; return HMSSTR; } YY_BREAK case 343: #line 408 "frame/lex.L" case 344: YY_RULE_SETUP #line 408 "frame/lex.L" { // DMS int ll = yyleng <(FRBUFSIZE-1) ? yyleng:(FRBUFSIZE-1); strncpy(frlval->str,yytext,ll); frlval->str[ll] = '\0'; return DMSSTR; } YY_BREAK case 345: /* rule 345 can match eol */ #line 416 "frame/lex.L" case 346: /* rule 346 can match eol */ YY_RULE_SETUP #line 416 "frame/lex.L" { // Quoted String int ll = (yyleng-2)<(FRBUFSIZE-1) ? (yyleng-2):(FRBUFSIZE-1); strncpy(frlval->str,yytext+1,ll); // skip the " " frlval->str[ll] = '\0'; // Remove the '"' return STRING; } YY_BREAK case 347: /* rule 347 can match eol */ YY_RULE_SETUP #line 423 "frame/lex.L" { // Quoted String int ll = (yyleng-2)<(FRBUFSIZE-1) ? (yyleng-2):(FRBUFSIZE-1); strncpy(frlval->str,yytext+1,ll); // skip the '{' frlval->str[ll] = '\0'; // Remove the '}' return STRING; } YY_BREAK case 348: YY_RULE_SETUP #line 430 "frame/lex.L" { // General String-- at least 2 printable chars int ll = yyleng <(FRBUFSIZE-1) ? yyleng:(FRBUFSIZE-1); strncpy(frlval->str,yytext,ll); frlval->str[ll] = '\0'; return STRING; } YY_BREAK case 349: YY_RULE_SETUP #line 437 "frame/lex.L" { // White Spaces } YY_BREAK case 350: YY_RULE_SETUP #line 440 "frame/lex.L" { // Else, return the char return toupper(yytext[0]); } YY_BREAK case 351: YY_RULE_SETUP #line 444 "frame/lex.L" ECHO; YY_BREAK #line 3472 "frame/lex.C" case YY_STATE_EOF(INITIAL): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; frfree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); frfree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ frrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) frrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 1268 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 1268 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 1267); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) fralloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) fralloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) frfree((void *) b->yy_ch_buf ); frfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)fralloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)frrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) fralloc(new_size ); else (yy_start_stack) = (int *) frrealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *fralloc (yy_size_t size ) { return (void *) malloc( size ); } void *frrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void frfree (void * ptr ) { free( (char *) ptr ); /* see frrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 444 "frame/lex.L" saods9/tksao/frame/lex.L000644 000765 000000 00000025050 12705446251 015514 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include #include "util.h" #include "parser.H" extern YYSTYPE* frlval; %} D [0-9] E [Ee][+-]?{D}+ /* rules */ %% about {return ABOUT_;} aip {return AIP_;} alloc {return ALLOC_;} allocgz {return ALLOCGZ_;} align {return ALIGN_;} all {return ALL_;} alt {return ALT_;} amplifier {return AMPLIFIER_;} analysis {return ANALYSIS_;} angle {return ANGLE_;} annulus {return ANNULUS_;} append {return APPEND_;} arcmin {return ARCMIN_;} arcsec {return ARCSEC_;} array {return ARRAY_;} arrow {return ARROW_;} asinh {return ASINH_;} ast {return AST_;} auto {return AUTO_;} aux {return AUX_;} average {return AVERAGE_;} axes {return AXES_;} azimuth {return AZIMUTH_;} b1950 {return B1950_;} back {return BACK_;} background {return BACKGROUND_;} base {return BASE_;} bbox {return BBOX_;} begin {return BEGIN_;} bg {return BG_;} big {return BIGENDIAN_;} bigendian {return BIGENDIAN_;} bin {return BIN_;} bitpix {return BITPIX_;} block {return BLOCK_;} border {return BORDER_;} box {return BOX_;} boxannulus {return BOXANNULUS_;} boxcar {return BOXCAR_;} boxcircle {return BOXCIRCLE_;} bpanda {return BPANDA_;} buffer {return BUFFER_;} bw {return BW_;} callback {return CALLBACK_;} canvas {return CANVAS_;} catalog {return CATALOG_;} celestrial {return CELESTRIAL_;} center {return CENTER_;} centroid {return CENTROID_;} channel {return CHANNEL_;} ciao {return CIAO_;} circle {return CIRCLE_;} clear {return CLEAR_;} clip {return CLIP_;} color {return COLOR_;} colorbar {return COLORBAR_;} colormap {return COLORMAP_;} colorscale {return COLORSCALE_;} colorspace {return COLORSPACE_;} cols {return COLS_;} column {return COLUMN_;} command {return COMMAND_;} compass {return COMPASS_;} composite {return COMPOSITE_;} compress {return COMPRESS_;} contour {return CONTOUR_;} contrast {return CONTRAST_;} coordinates {return COORDINATES_;} copy {return COPY_;} count {return COUNT_;} crop {return CROP_;} cross {return CROSS_;} cpanda {return CPANDA_;} create {return CREATE_;} crosshair {return CROSSHAIR_;} cube {return CUBE_;} cursor {return CURSOR_;} cut {return CUT_;} cmyk {return CMYK_;} dash {return DASH_;} dashlist {return DASHLIST_;} data {return DATA_;} datamin {return DATAMIN_;} datasec {return DATASEC_;} debug {return DEBUG_;} degrees {return DEGREES_;} default {return DEFAULT_;} delete {return DELETE_;} depth {return DEPTH_;} detector {return DETECTOR_;} diamond {return DIAMOND_;} dim {return DIM_;} ds9 {return DS9_;} ecliptic {return ECLIPTIC_;} elevation {return ELEVATION_;} ellipse {return ELLIPSE_;} ellipseannulus {return ELLIPSEANNULUS_;} edit {return EDIT_;} end {return END_;} envi {return ENVI_;} epanda {return EPANDA_;} epsilon {return EPSILON_;} equatorial {return EQUATORIAL_;} erase {return ERASE_;} ext {return EXT_;} factor {return FACTOR_;} false {return FALSE_;} file {return FILE_;} filter {return FILTER_;} fit {return FIT_;} fits {return FITS_;} fitsy {return FITSY_;} fixed {return FIXED_;} fk4 {return FK4_;} fk4-no-e {return FK4_NO_E_;} fk5 {return FK5_;} font {return FONT_;} front {return FRONT_;} full {return FULL_;} function {return FUNCTION_;} galactic {return GALACTIC_;} gaussian {return GAUSSIAN_;} get {return GET_;} global {return GLOBAL_;} graphics {return GRAPHICS_;} gray {return GRAY_;} grid {return GRID_;} gz {return GZ_;} handle {return HANDLE_;} has {return HAS_;} head {return HEAD_;} header {return HEADER_;} height {return HEIGHT_;} helioecliptic {return HELIOECLIPTIC_;} hide {return HIDE_;} highlite {return HIGHLITE_;} histequ {return HISTEQU_;} histogram {return HISTOGRAM_;} horizontal {return HORIZONTAL_;} icrs {return ICRS_;} id {return ID_;} iis {return IIS_;} image {return IMAGE_;} include {return INCLUDE_;} incr {return INCR_;} info {return INFO_;} integer {return INTEGER_;} iteration {return ITERATION_;} iraf {return IRAF_;} irafmin {return IRAFMIN_;} j2000 {return J2000_;} key {return KEY_;} keyword {return KEYWORD_;} label {return LABEL_;} length {return LENGTH_;} level {return LEVEL_;} little {return LITTLEENDIAN_;} littleendian {return LITTLEENDIAN_;} line {return LINE_;} linear {return LINEAR_;} list {return LIST_;} load {return LOAD_;} local {return LOCAL_;} log {return LOG_;} macosx {return MACOSX_;} magnifier {return MAGNIFIER_;} match {return MATCH_;} map {return MAP_;} mark {return MARK_;} marker {return MARKER_;} mask {return MASK_;} message {return MESSAGE_;} method {return METHOD_;} minmax {return MINMAX_;} mip {return MIP_;} mmap {return MMAP_;} mmapincr {return MMAPINCR_;} mode {return MODE_;} mosaic {return MOSAIC_;} motion {return MOTION_;} move {return MOVE_;} name {return NAME_;} nan {return NAN_;} native {return NATIVE_;} naxes {return NAXES_;} new {return NEW_;} next {return NEXT_;} no {return NO_;} none {return NONE_;} now {return NOW_;} nrrd {return NRRD_;} number {return NUMBER_;} object {return OBJECT_;} off {return OFF_;} on {return ON_;} only {return ONLY_;} option {return OPTION_;} orient {return ORIENT_;} pan {return PAN_;} panda {return CPANDA_;} panner {return PANNER_;} parser {return PARSER_;} paste {return PASTE_;} perf {return PERF_;} photo {return PHOTO_;} physical {return PHYSICAL_;} pixel {return PIXEL_;} plot2d {return PLOT2D_;} plot3d {return PLOT3D_;} point {return POINT_;} pointer {return POINTER_;} polygon {return POLYGON_;} postscript {return POSTSCRIPT_;} pow {return POW_;} print {return PRINT_;} preserve {return PRESERVE_;} projection {return PROJECTION_;} property {return PROPERTY_;} pros {return PROS_;} publication {return PUBLICATION_;} query {return QUERY_;} radial {return RADIAL_;} radius {return RADIUS_;} region {return REGION_;} replace {return REPLACE_;} resample {return RESAMPLE_;} reset {return RESET_;} resolution {return RESOLUTION_;} rgb {return RGB_;} root {return ROOT_;} rotate {return ROTATE_;} ruler {return RULER_;} sample {return SAMPLE_;} saoimage {return SAOIMAGE_;} saotng {return SAOTNG_;} save {return SAVE_;} scale {return SCALE_;} scan {return SCAN_;} scientific {return SCIENTIFIC_;} scope {return SCOPE_;} segment {return SEGMENT_;} select {return SELECT_;} set {return SET_;} sexagesimal {return SEXAGESIMAL_;} shape {return SHAPE_;} shared {return SHARED_;} shift {return SHIFT_;} shmid {return SHMID_;} show {return SHOW_;} sinh {return SINH_;} size {return SIZE_;} slice {return SLICE_;} smmap {return SMMAP_;} smooth {return SMOOTH_;} socket {return SOCKET_;} socketgz {return SOCKETGZ_;} source {return SOURCE_;} sqrt {return SQRT_;} squared {return SQUARED_;} sshared {return SSHARED_;} stats {return STATS_;} status {return STATUS_;} sum {return SUM_;} supergalactic {return SUPERGALACTIC_;} system {return SYSTEM_;} table {return TABLE_;} tag {return TAG_;} template {return TEMPLATE_;} text {return TEXT_;} threads {return THREADS_;} 3d {return THREED_;} threshold {return THRESHOLD_;} thick {return THICK_;} transparency {return TRANSPARENCY_;} to {return TO_;} toggle {return TOGGLE_;} tophat {return TOPHAT_;} true {return TRUE_;} type {return TYPE_;} undo {return UNDO_;} unload {return UNLOAD_;} unhighlite {return UNHIGHLITE_;} unselect {return UNSELECT_;} update {return UPDATE_;} user {return USER_;} value {return VALUE_;} var {return VAR_;} view {return VIEW_;} vector {return VECTOR_;} version {return VERSION_;} vertex {return VERTEX_;} vertical {return VERTICAL_;} warp {return WARP_;} wcs {return WCS_;} wcsa {return WCSA_;} wcsb {return WCSB_;} wcsc {return WCSC_;} wcsd {return WCSD_;} wcse {return WCSE_;} wcsf {return WCSF_;} wcsg {return WCSG_;} wcsh {return WCSH_;} wcsi {return WCSI_;} wcsj {return WCSJ_;} wcsk {return WCSK_;} wcsl {return WCSL_;} wcsm {return WCSM_;} wcsn {return WCSN_;} wcso {return WCSO_;} wcsp {return WCSP_;} wcsq {return WCSQ_;} wcsr {return WCSR_;} wcss {return WCSS_;} wcst {return WCST_;} wcsu {return WCSU_;} wcsv {return WCSV_;} wcsw {return WCSW_;} wcsx {return WCSX_;} wcsy {return WCSY_;} wcsz {return WCSZ_;} wcs0 {return WCS0_;} wfpc2 {return WFPC2_;} width {return WIDTH_;} win32 {return WIN32_;} xml {return XML_;} xy {return XY_;} yes {return YES_;} zmax {return ZMAX_;} zscale {return ZSCALE_;} zoom {return ZOOM_;} [+-]?{D}+ { // Integer frlval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number frlval->real = atof(yytext); return REAL; } 0[xX][0-9a-fA-F]+ { // Pointer frlval->ptr = (void*)strtoul(yytext,NULL,16); return POINTER; } [+-]?{D}+"."?d | [+-]?{D}*"."{D}+d { // degrees yytext[yyleng-1] = '\0'; frlval->real = atof(yytext); return ANGDEGREE; } [+-]{D}+"."?r | [+-]{D}*"."{D}+r { // radians yytext[yyleng-1] = '\0'; frlval->real = atof(yytext); return ANGRADIAN; } [+-]?{D}+:{D}+:{D}+"."? | [+-]?{D}+:{D}+:{D}*"."{D}+ { // sexagesimal int ll = yyleng <(FRBUFSIZE-1) ? yyleng:(FRBUFSIZE-1); strncpy(frlval->str,yytext,ll); frlval->str[ll] = '\0'; return SEXSTR; } [+-]?{D}+h{D}+m{D}+"."?s | [+-]?{D}+h{D}+m{D}*"."{D}+s { // HMS int ll = yyleng <(FRBUFSIZE-1) ? yyleng:(FRBUFSIZE-1); strncpy(frlval->str,yytext,ll); frlval->str[ll] = '\0'; return HMSSTR; } [+-]?{D}+d{D}+m{D}+"."?s | [+-]?{D}+d{D}+m{D}*"."{D}+s { // DMS int ll = yyleng <(FRBUFSIZE-1) ? yyleng:(FRBUFSIZE-1); strncpy(frlval->str,yytext,ll); frlval->str[ll] = '\0'; return DMSSTR; } \"[^\"]*\" | \'[^\']*\' { // Quoted String int ll = (yyleng-2)<(FRBUFSIZE-1) ? (yyleng-2):(FRBUFSIZE-1); strncpy(frlval->str,yytext+1,ll); // skip the " " frlval->str[ll] = '\0'; // Remove the '"' return STRING; } \{[^\}]*\} { // Quoted String int ll = (yyleng-2)<(FRBUFSIZE-1) ? (yyleng-2):(FRBUFSIZE-1); strncpy(frlval->str,yytext+1,ll); // skip the '{' frlval->str[ll] = '\0'; // Remove the '}' return STRING; } [!-~][!-~]+ { // General String-- at least 2 printable chars int ll = yyleng <(FRBUFSIZE-1) ? yyleng:(FRBUFSIZE-1); strncpy(frlval->str,yytext,ll); frlval->str[ll] = '\0'; return STRING; } [ \t]+ { // White Spaces } . { // Else, return the char return toupper(yytext[0]); } %% saods9/tksao/frame/line.C000644 000765 000000 00000016002 12775230632 015640 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "line.h" #include "fitsimage.h" Line::Line(Base* p, const Vector& ptr1, const Vector& ptr2) : BaseLine(p, ptr1, ptr2) { p1Arrow = 0; p2Arrow = 0; strcpy(type_,"line"); handle = new Vector[2]; numHandle = 2; updateBBox(); } Line::Line(Base* p, const Vector& ptr1, const Vector& ptr2, int a1, int a2, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseLine(p, ptr1, ptr2, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { p1Arrow = a1; p2Arrow = a2; strcpy(type_,"line"); handle = new Vector[2]; numHandle = 2; updateBBox(); } Line::Line(const Line& a) : BaseLine(a) { p1Arrow = a.p1Arrow; p2Arrow = a.p2Arrow; } void Line::renderX(Drawable drawable, Coord::InternalSystem sys, RenderMode mode) { GC lgc = renderXGC(mode); Vector aa = parent->mapFromRef(p1,sys); Vector bb = parent->mapFromRef(p2,sys); if (p1Arrow) { aa = modifyArrow(p2,p1,sys); renderXArrow(drawable,p2,p1,sys,lgc); } if (p2Arrow) { bb = modifyArrow(p1,p2,sys); renderXArrow(drawable,p1,p2,sys,lgc); } XDrawLine(display, drawable, lgc, aa[0], aa[1], bb[0], bb[1]); } void Line::renderPS(int mode) { renderPSGC(mode); Vector aa = parent->mapFromRef(p1,Coord::CANVAS); Vector bb = parent->mapFromRef(p2,Coord::CANVAS); if (p1Arrow) { aa = modifyArrow(p2,p1,Coord::CANVAS); renderPSArrow(p2,p1,Coord::CANVAS); } if (p2Arrow) { bb = modifyArrow(p1,p2,Coord::CANVAS); renderPSArrow(p1,p2,Coord::CANVAS); } ostringstream str; str << "newpath " << aa.TkCanvasPs(parent->canvas) << ' ' << "moveto " << bb.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } #ifdef MAC_OSX_TK void Line::renderMACOSX() { renderMACOSXGC(); Vector aa = parent->mapFromRef(p1,Coord::CANVAS); Vector bb = parent->mapFromRef(p2,Coord::CANVAS); if (p1Arrow) { aa = modifyArrow(p2,p1,Coord::CANVAS); renderMACOSXArrow(p2,p1,Coord::CANVAS); } if (p2Arrow) { bb = modifyArrow(p1,p2,Coord::CANVAS); renderMACOSXArrow(p1,p2,Coord::CANVAS); } macosxDrawLine(aa,bb); } #endif #ifdef __WIN32 void Line::renderWIN32() { renderWIN32GC(); Vector aa = parent->mapFromRef(p1,Coord::CANVAS); Vector bb = parent->mapFromRef(p2,Coord::CANVAS); if (p1Arrow) { aa = modifyArrow(p2,p1,Coord::CANVAS); renderWIN32Arrow(p2,p1,Coord::CANVAS); } if (p2Arrow) { bb = modifyArrow(p1,p2,Coord::CANVAS); renderWIN32Arrow(p1,p2,Coord::CANVAS); } win32DrawLine(aa,bb); } #endif // Support void Line::updateHandles() { center = (p2-p1)/2 + p1; angle = (p2-p1).angle(); // generate handles in Coord::CANVAS coords handle[0] = parent->mapFromRef(p1,Coord::CANVAS); handle[1] = parent->mapFromRef(p2,Coord::CANVAS); } void Line::setArrows(int w1, int w2) { p1Arrow = w1 ? 1 : 0; p2Arrow = w2 ? 1 : 0; updateBBox(); } void Line::analysis(AnalysisTask mm, int which) { switch (mm) { case PLOT2D: if (!analysisPlot2d_ && which) { addCallBack(CallBack::MOVECB, analysisPlot2dCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisPlot2dCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisPlot2dCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisPlot2dCB_[1], parent->options->cmdName); } if (analysisPlot2d_ && !which) { deleteCallBack(CallBack::MOVECB, analysisPlot2dCB_[0]); deleteCallBack(CallBack::EDITCB, analysisPlot2dCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisPlot2dCB_[0]); deleteCallBack(CallBack::DELETECB, analysisPlot2dCB_[1]); } analysisPlot2d_ = which; break; default: // na break; } } void Line::analysisPlot2d(char* xname, char* yname, char* xcname, char* ycname, Coord::CoordSystem sys, Coord::SkyFrame sky, Marker::AnalysisMethod method) { double* x; double* y; double* xc; double* yc; int num = parent->markerAnalysisPlot2d(this, &x, &y, &xc, &yc, p1, p2, 0, sys, sky, method); analysisXYEEResult(xname, yname, xcname, ycname, x, y, xc, yc, num); } // list void Line::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 0); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector v1 = ptr->mapFromRef(p1,sys,sky); Vector v2 = ptr->mapFromRef(p2,sys,sky); str << type_ << '(' << setprecision(10) << v1 << ',' << v2 << ')'; } break; case Coord::SEXAGESIMAL: str << type_ << '('; listRADEC(ptr,p1,sys,sky,format); str << ra << ',' << dec << ','; listRADEC(ptr,p2,sys,sky,format); str << ra << ',' << dec << ')'; break; } } else listNonCel(ptr, str, sys); } listPost(str, conj, strip); } void Line::listPost(ostream& str, int conj, int strip) { // no props for semicolons if (!strip) { if (conj) str << " ||"; str << " # line=" << p1Arrow << ' ' << p2Arrow; listProperties(str, 0); } else { if (conj) str << "||"; else str << ';'; } } void Line::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); Vector vv[2]; vv[0] = p1; vv[1] = p2; XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowPoint(ptr,sys,sky,format,vv,2); XMLRow(XMLPARAM,p1Arrow); XMLRow(XMLPARAM2,p2Arrow); XMLRowProps(ptr,sys); XMLRowEnd(str); } void Line::listSAOtng(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); listSAOtngPre(str, strip); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector v1 = ptr->mapFromRef(p1,Coord::IMAGE); Vector v2 = ptr->mapFromRef(p2,Coord::IMAGE); str << type_ << '(' << setprecision(8) << v1 << ',' << v2 << ')'; } break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector v1 = ptr->mapFromRef(p1,sys,sky); Vector v2 = ptr->mapFromRef(p2,sys,sky); str << type_ << '(' << setprecision(10) << v1 << ',' << v2 << ')'; } break; case Coord::SEXAGESIMAL: str << type_ << '('; listRADEC(ptr,p1,sys,sky,format); str << ra << ',' << dec << ','; listRADEC(ptr,p2,sys,sky,format); str << ra << ',' << dec << ')'; break; } } } listSAOtngPost(str, strip); } saods9/tksao/frame/line.h000644 000765 000000 00000002763 12752665521 015722 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __line_h__ #define __line_h__ #include "baseline.h" class Line : public BaseLine { protected: int p1Arrow; int p2Arrow; protected: void renderX(Drawable, Coord::InternalSystem, RenderMode); void renderPS(int); #ifdef MAC_OSX_TK void renderMACOSX(); #endif #ifdef __WIN32 void renderWIN32(); #endif void updateHandles(); public: Line(Base* p, const Vector& ptr1, const Vector& ptr2); Line(Base* p, const Vector& ptr1, const Vector& ptr2, int a1, int a2, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Line(const Line&); virtual Marker* dup() {return new Line(*this);} void setArrows(int,int); int getP1Arrow() {return p1Arrow;} int getP2Arrow() {return p2Arrow;} void analysis(AnalysisTask, int); void analysisPlot2d(char*, char*, char*, char*, Coord::CoordSystem, Coord::SkyFrame, Marker::AnalysisMethod); virtual void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); virtual void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); virtual void listPost(ostream&, int, int); void listSAOtng(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); }; #endif saods9/tksao/frame/marker.C000644 000765 000000 00000125245 12775016372 016207 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "marker.h" #include "fitsimage.h" extern "C" { #include "tkbltVector.h" } static int markerSeqID = 1; // hard coded const char* Marker::analysisHistogramCB_[] = { "MarkerAnalysisHistogramCB", "MarkerAnalysisHistogramDeleteCB" }; const char* Marker::analysisPlot2dCB_[] = { "MarkerAnalysisPlot2dCB", "MarkerAnalysisPlot2dDeleteCB" }; const char* Marker::analysisPlot3dCB_[] = { "MarkerAnalysisPlot3dCB", "MarkerAnalysisPlot3dDeleteCB" }; const char* Marker::analysisPandaCB_[] = { "MarkerAnalysisPandaCB", "MarkerAnalysisPandaDeleteCB" }; const char* Marker::analysisRadialCB_[] = { "MarkerAnalysisRadialCB", "MarkerAnalysisRadialDeleteCB" }; const char* Marker::analysisStatsCB_[] = { "MarkerAnalysisStatsCB", "MarkerAnalysisStatsDeleteCB" }; // Marker Members Public Marker::Marker(Base* p, const Vector& ctr, double ang) { id = markerSeqID++; type_[0] = '\0'; parent = p; center = ctr; angle = ang; handle = NULL; numHandle = 0; colorName = dupstr("green"); color = parent->getColor(colorName); lineWidth = 1; properties = INCLUDE|SOURCE; selected = 0; highlited = 0; dlist[0] = 8; dlist[1] = 3; text = dupstr(""); tkfont_ =NULL; psfont_ =NULL; initFonts("helvetica 10 normal roman"); comment = dupstr(""); display = parent->display; gc = parent->markerGC; gcxor = parent->markerGCXOR; for (int ii=0; ii& tg, const List& cb) { id = markerSeqID++; type_[0] = '\0'; parent = p; center = ctr; angle = ang; handle = NULL; numHandle = 0; colorName = dupstr(clr); color = parent->getColor(colorName); lineWidth = w; properties = prop; selected = 0; highlited = 0; dlist[0] = dsh[0]; dlist[1] = dsh[1]; text = dupstr(t); tkfont_ =NULL; psfont_ =NULL; initFonts(f); comment = dupstr(c); display = parent->display; gc = parent->markerGC; gcxor = parent->markerGCXOR; for (int ii=0; iiinterp, parent->tkwin, Tk_NameOfFont(a.tkfont_)) : NULL; psfont_ = a.psfont_ ? Tk_GetFont(parent->interp, parent->tkwin, Tk_NameOfFont(a.psfont_)) : NULL; comment = dupstr(a.comment); display = a.display; gc = a.gc; gcxor = a.gcxor; for (int ii=0; iicanvasToWidget).round(); Vector ur = (handle[2]*parent->canvasToWidget).round(); if (mode==SRC) XSetForeground(display, gc, parent->getColor("red")); XDrawLine(display, drawable, lgc, ll[0], ll[1], ur[0], ur[1]); } } void Marker::renderXText(Drawable drawable, Coord::InternalSystem sys, RenderMode mode) { if (text && *text && tkfont_) { GC lgc; switch (mode) { case SRC: lgc = gc; XSetForeground(display, gc, color); break; case XOR: lgc = gcxor; break; } XSetFont(display, lgc, Tk_FontId(tkfont_)); Tk_FontMetrics metrics; Tk_GetFontMetrics(tkfont_, &metrics); int width = Tk_TextWidth(tkfont_, text, strlen(text)); Matrix mm; Matrix nn; setMatrices(sys,&mm,&nn); Vector ll0 = bbox.ll*parent->canvasToRef; Vector ll = ll0*mm; Vector ur0 = bbox.ur*parent->canvasToRef; Vector ur = ur0*mm; BBox bb(ll,ur); Vector bbc = bb.center(); Vector tt = Vector(bbc[0], bb.ll[1]) * Translate(-width/2., -metrics.descent); Tk_DrawChars(display, drawable, lgc, tkfont_, text, strlen(text), tt[0], tt[1]); } } void Marker::renderXArrow(Drawable drawable, const Vector& p1, const Vector& p2, Coord::InternalSystem sys, GC lgc) { Vector* vv = arrow(p1,p2,sys); XPoint dd[6]; for (int ii=0; ii<6; ii++) { dd[ii].x = (short)vv[ii][0]; dd[ii].y = (short)vv[ii][1]; } XFillPolygon(display, drawable, lgc, dd, 6, Nonconvex, CoordModeOrigin); delete [] vv; } void Marker::renderXHandles(Drawable drawable) { // handles are of length 5 if (selected && canSelect()) { XSetForeground(display, gc, color); for (int ii=0; iicanvasToWidget - Vector(2,2)).round(); XFillRectangle(display, drawable, gc, vv[0], vv[1], 5, 5); } } } GC Marker::renderXGC(RenderMode mode) { // set width, color, dash switch (mode) { case SRC: XSetForeground(display, gc, color); if ((properties & SOURCE) && !(properties & DASH)) renderXLineNoDash(gc); else renderXLineDash(gc); return gc; case XOR: renderXLineDash(gcxor); return gcxor; } } void Marker::renderXLineDash(GC lgc) { char dl[2]; dl[0] = dlist[0]; dl[1] = dlist[1]; int ww = (highlited && canHighlite()) ? lineWidth*2 : lineWidth; XSetDashes(display, lgc, 0, dl, 2); XSetLineAttributes(display, lgc, ww, LineOnOffDash, CapButt, JoinMiter); } void Marker::renderXLineNoDash(GC lgc) { int ww = (highlited && canHighlite()) ? lineWidth*2 : lineWidth; XSetLineAttributes(display, lgc, ww, LineSolid, CapButt, JoinMiter); } void Marker::ps(int mode, int tt) { if (properties & HIDDEN) return; if (tt) renderPSText(mode); renderPS(mode); renderPSInclude(mode); } void Marker::renderPSInclude(int mode) { if (!(properties & INCLUDE)) { renderPSColor(mode, parent->getXColor("red")); Vector ll = handle[0]; Vector ur = handle[2]; ostringstream str; str << "newpath " << ll.TkCanvasPs(parent->canvas) << ' ' << "moveto " << ur.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } } void Marker::renderPSText(int mode) { if (text && *text && psfont_) { renderPSColor(mode, parent->getXColor(colorName)); ostringstream str; const char* ff = Tk_NameOfFont(psfont_); str << '/' << psFontName(ff) << " findfont " << int(psFontSize(ff)*parent->getDisplayRatio()) << " scalefont setfont" << endl; Vector bbc = bbox.center(); Vector tt = Vector(bbc[0], bbox.ll[1]).TkCanvasPs(parent->canvas); str << "gsave" << endl << "newpath " << endl << tt << " moveto" << endl << '(' << psQuote(text) << ')' << endl << "dup true charpath pathbbox " << endl << "closepath " << endl << "3 -1 roll sub 2.5 div " << endl << "3 1 roll sub 2 div exch " << endl << tt << " moveto rmoveto show " << endl << "grestore" << endl; str << ends; Tcl_AppendResult(parent->interp, (char*)str.str().c_str(), NULL); } } void Marker::renderPSArrow(const Vector& p1, const Vector& p2, Coord::InternalSystem sys) { Vector* vv = arrow(p1,p2,sys); ostringstream str; str << "newpath " << endl << vv[0].TkCanvasPs(parent->canvas) << " moveto" << endl; for (int ii=1; ii<6; ii++) str << vv[ii].TkCanvasPs(parent->canvas) << " lineto" << endl; str << "closepath fill" << endl << ends; Tcl_AppendResult(parent->interp, (char*)str.str().c_str(), NULL); delete [] vv; } void Marker::renderPSGC(int mode) { // set width, color, dash renderPSColor(mode, parent->getXColor(colorName)); if ((properties & SOURCE) && !(properties & DASH)) renderPSLineNoDash(); else renderPSLineDash(); } void Marker::renderPSLineDash() { ostringstream str; str << lineWidth << " setlinewidth" << endl << '[' << dlist[0] << ' ' << dlist[1] << "] 0 setdash" << endl << ends; Tcl_AppendResult(parent->interp, (char*)str.str().c_str(), NULL); } void Marker::renderPSLineNoDash() { ostringstream str; str << lineWidth << " setlinewidth" << endl << "[] 0 setdash" << endl << ends; Tcl_AppendResult(parent->interp, (char*)str.str().c_str(), NULL); } void Marker::renderPSColor(int mode, XColor* clr) { ostringstream str; switch ((Widget::PSColorSpace)mode) { case Widget::BW: case Widget::GRAY: psColorGray(clr, str); str << " setgray"; break; case Widget::RGB: psColorRGB(clr, str); str << " setrgbcolor"; break; case Widget::CMYK: psColorCMYK(clr, str); str << " setcmykcolor"; break; } str << endl << ends; Tcl_AppendResult(parent->interp, (char*)str.str().c_str(), NULL); } #ifdef MAC_OSX_TK void Marker::macosx(int tt) { if (properties & HIDDEN) return; if (tt) renderMACOSXText(); renderMACOSX(); renderMACOSXInclude(); } void Marker::renderMACOSXInclude() { if (!(properties & INCLUDE)) { macosxColor(parent->getXColor("red")); Vector ll = handle[0]; Vector ur = handle[2]; macosxDrawLine(ll,ur); } } void Marker::renderMACOSXText() { if (text && *text && psfont_) { macosxColor(parent->getXColor(colorName)); Tcl_DString psdstr; Tcl_DStringInit(&psdstr); int psSize = Tk_PostscriptFontName(psfont_, &psdstr); macosxFont(Tcl_DStringValue(&psdstr), psSize); Tcl_DStringFree(&psdstr); Tk_FontMetrics metrics; Tk_GetFontMetrics(psfont_, &metrics); int width = Tk_TextWidth(psfont_, text, strlen(text)); Vector bbc = bbox.center(); Vector tt = Vector(bbc[0], bbox.ll[1]) * Translate(-width/2., -metrics.descent); macosxDrawText(tt, 0, text); } } void Marker::renderMACOSXArrow(const Vector& p1, const Vector& p2, Coord::InternalSystem sys) { Vector* vv = arrow(p1,p2,sys); Vector dd[6]; for (int ii=0; ii<6; ii++) dd[ii] = vv[ii]; macosxFillPolygon(dd,6); delete [] vv; } void Marker::renderMACOSXGC() { // set width, color, dash macosxColor(parent->getXColor(colorName)); if ((properties & SOURCE) && !(properties & DASH)) renderMACOSXLineNoDash(); else renderMACOSXLineDash(); } void Marker::renderMACOSXLineDash() { macosxWidth(lineWidth); macosxDash(dlist,2); } void Marker::renderMACOSXLineNoDash() { macosxWidth(lineWidth); macosxDash(NULL,0); } #endif #ifdef __WIN32 void Marker::win32(int tt) { if (properties & HIDDEN) return; if (tt) renderWIN32Text(); renderWIN32(); renderWIN32Include(); } void Marker::renderWIN32Include() { if (!(properties & INCLUDE)) { win32Color(parent->getXColor("red")); Vector ll = handle[0]; Vector ur = handle[2]; win32DrawLine(ll,ur); } } void Marker::renderWIN32Text() { if (text && *text && tkfont_) { win32Color(parent->getXColor(colorName)); win32Font(tkfont_); Tk_FontMetrics metrics; Tk_GetFontMetrics(tkfont_, &metrics); int width = Tk_TextWidth(tkfont_, text, strlen(text)); BBox bb = bbox; Vector bbc = bb.center(); Vector tt = Vector(bbc[0], bbox.ll[1]) * Translate(-width/2., -metrics.descent); win32DrawText(tt, 0, text); } } void Marker::renderWIN32Arrow(const Vector& p1, const Vector& p2, Coord::InternalSystem sys) { Vector* vv = arrow(p1,p2,sys); Vector dd[6]; for (int ii=0; ii<6; ii++) dd[ii] = vv[ii]; win32FillPolygon(dd,6); delete [] vv; } void Marker::renderWIN32GC() { // set width, color, dash win32Color(parent->getXColor(colorName)); if ((properties & SOURCE) && !(properties & DASH)) renderWIN32LineNoDash(); else renderWIN32LineDash(); } void Marker::renderWIN32LineDash() { win32Width(lineWidth); win32Dash(dlist,2); } void Marker::renderWIN32LineNoDash() { win32Width(lineWidth); win32Dash(NULL,0); } #endif // Support void Marker::updateBBox() { // generate handles updateHandles(); // bound handles bbox = BBox(handle[0]); for (int ii=1; iicentroid(center); updateBBox(); doCallBack(CallBack::MOVECB); } void Marker::moveTo(const Vector& v) { center=v; updateBBox(); doCallBack(CallBack::MOVECB); } void Marker::moveBegin() { doCallBack(CallBack::MOVEBEGINCB); } void Marker::move(const Vector& v) { center+=v; updateBBox(); doCallBack(CallBack::MOVECB); } void Marker::moveEnd() { doCallBack(CallBack::MOVEENDCB); } void Marker::editBegin(int) { doCallBack(CallBack::EDITBEGINCB); } void Marker::edit(const Vector& v, int h) { doCallBack(CallBack::EDITCB); } void Marker::editEnd() { doCallBack(CallBack::EDITENDCB); } void Marker::rotateBegin() { doCallBack(CallBack::ROTATEBEGINCB); } void Marker::rotate(const Vector& v, int h) { // v is in ref coords // handles are in canvas coords double a = (v * Translate(-center) * FlipY()).angle(); double b = ((parent->mapToRef(handle[h-1],Coord::CANVAS) * Translate(-center) * FlipY())).angle(); angle -= a-b; updateBBox(); doCallBack(CallBack::ROTATECB); } void Marker::rotateEnd() { doCallBack(CallBack::ROTATEENDCB); } void Marker::select() { // only call the CB if not already selected if (!selected) doCallBack(CallBack::SELECTCB); selected = 1; } void Marker::unselect() { // only call the CB if already selected if (selected) doCallBack(CallBack::UNSELECTCB); selected = 0; } void Marker::toggleSelect() { selected = !selected; if (selected) doCallBack(CallBack::SELECTCB); else doCallBack(CallBack::UNSELECTCB); } void Marker::highlite() { // only call the CB if not already highlited if (!highlited) doCallBack(CallBack::HIGHLITECB); highlited = 1; } void Marker::unhighlite() { // only call the CB if already highlited if (highlited) doCallBack(CallBack::UNHIGHLITECB); highlited = 0; } void Marker::toggleHighlite() { highlited = !highlited; if (highlited) doCallBack(CallBack::HIGHLITECB); else doCallBack(CallBack::UNHIGHLITECB); } void Marker::key() { doCallBack(CallBack::KEYCB); } Vector Marker::getHandle(int h) { if (hgetColor(colorName); doCallBack(CallBack::COLORCB); } void Marker::setLineWidth(int w) { lineWidth = w; doCallBack(CallBack::LINEWIDTHCB); } void Marker::setFont(const char* f) { initFonts(f); updateBBox(); doCallBack(CallBack::FONTCB); } void Marker::initFonts(const char* ff) { if (tkfont_) Tk_FreeFont(tkfont_); tkfont_ = NULL; if (psfont_) Tk_FreeFont(psfont_); psfont_ = NULL; const char* dd = "helvetica 9 roman normal"; if (!ff) ff = dd; psfont_ = Tk_GetFont(parent->interp, parent->tkwin, ff); // determine tkfont from psfont string x(ff); istringstream str(x); char family[16] = ""; int size = 0; char weight[16] = ""; char slant[16] = ""; str >> family >> size >> weight >> slant; // old regions files will not have a slant if (strncmp(slant,"roma",4) && strncmp(slant,"ital",4)) strcpy(slant,"roman"); #ifdef MAC_OSX_TK size *= parent->getDisplayRatio(); #endif char* ptr =NULL; if (!strncmp(family,"helvetica",4)) ptr = parent->options->helvetica; else if (!strncmp(family,"times",4)) ptr = parent->options->times; else if (!strncmp(family,"courier",4)) ptr = parent->options->courier; else ptr = parent->options->helvetica; ostringstream fstr; fstr << '{' << ptr << '}' << ' ' << size << ' ' << weight << ' ' << slant << ends; tkfont_ = Tk_GetFont(parent->getInterp(), parent->getTkwin(), fstr.str().c_str()); } const char* Marker::getFont() { if (psfont_) return Tk_NameOfFont(psfont_); else return NULL; } void Marker::addTag(const char* tg) { Tag* t = new Tag(tg); tags.append(t); } void Marker::editTag(const char* from, const char* to) { // change any tags { Tag* t = tags.head(); while (t) { if (!strcmp(t->tag(),from)) { t->set(to); } t=t->next(); } } // now, remove duplicates { Tag* t = tags.head(); while (t) { Tag* tt=t->next(); while (tt) { if (!strcmp(t->tag(),tt->tag())) { Tag* ntt = tags.extractNext(tt); delete tt; tt = ntt; } else tt=tt->next(); } t=t->next(); } } } void Marker::deleteTags() { tags.deleteAll(); } void Marker::deleteTag(const char* tg) { Tag* t = tags.head(); while (t) { if (!strcmp(t->tag(),tg)) { tags.extractNext(t); delete t; return; } t = t->next(); } } void Marker::deleteTag(int w) { Tag* t = tags.head(); for (int i=0; inext(); else break; if (t) { tags.extractNext(t); delete t; } } const char* Marker::getTag() { Tag* t = tags.head(); if (t) return t->tag(); else return NULL; } const char* Marker::getNextTag() { Tag* t = tags.next(); if (t) return t->tag(); else return NULL; } const char* Marker::getTag(int w) { Tag* t = tags.head(); for (int i=0; inext(); else break; if (t) return t->tag(); else return NULL; } int Marker::hasTag(const char* tg) { Tag* t = tags.head(); while (t) { if (!strcmp(t->tag(),tg)) return 1; t = t->next(); } return 0; } int Marker::onHandle(const Vector& v) { // return handle number // work last to first for annuli for (int ii=numHandle-1; ii>=0; ii--) { BBox bb(handle[ii]); bb.expand(parent->markerEpsilon); if (bb.isIn(v)) return ii+1; } return 0; } int Marker::getProperty(unsigned short which) { return (properties & which) ? 1 : 0; } void Marker::setText(const char* str) { if (text) delete [] text; text = dupstr(str); updateBBox(); doCallBack(CallBack::TEXTCB); } void Marker::setProperty(unsigned short prop, int value) { if (value) properties |= prop; else properties &= ~prop; if (prop == FIXED) // bbox will change updateBBox(); doCallBack(CallBack::PROPERTYCB); } int Marker::addCallBack(CallBack::Type t, const char* proc, const char* arg) { CallBack* cb = new CallBack(parent->interp, t, proc, arg); if (cb) { callbacks.append(cb); return TCL_OK; } return TCL_ERROR; } void Marker::deleteCallBack(CallBack::Type t) { CallBack* cb = callbacks.head(); while (cb) { if (cb->type() == t) { CallBack* next = callbacks.extractNext(cb); delete cb; cb = next; } else cb = cb->next(); } } int Marker::deleteCallBack(CallBack::Type t, const char* proc) { CallBack* cb = callbacks.head(); while (cb) { if (cb->type() == t && (!strcmp(cb->proc(), proc))) { callbacks.extractNext(cb); delete cb; return TCL_OK; } else cb = cb->next(); } return TCL_ERROR; } int Marker::isIn(const Vector& vv, Coord::InternalSystem sys) { Vector rr = parent->mapToRef(vv,sys); Vector ss = parent->mapFromRef(rr,Coord::CANVAS); return bbox.isIn(ss); } // assume Coord::REF int Marker::isIn(const Vector& vv, const Matrix& bck) { Vector ss = parent->mapFromRef(vv,Coord::CANVAS); return bbox.isIn(ss); } int Marker::isVisible(const BBox& b) { // assume visible, prove otherwise // all coords are in canvas coords BBox bb(b); return !((allBBox.ur[0] < bb.ll[0]) || (allBBox.ll[0] > bb.ur[0]) || (allBBox.ur[1] < bb.ll[1]) || (allBBox.ll[1] > bb.ur[1])); } void Marker::doCallBack(CallBack::Type t) { if (!doCB) return; ostringstream str; str << id << ends; CallBack* cb=callbacks.head(); while (cb) { if (cb->type() == t) if (cb->eval(str.str().c_str())) { ostringstream estr; estr << "Unable to eval Marker CallBack " << cb->proc() << " : " << Tcl_GetStringResult(parent->interp) << ends; internalError(estr.str().c_str()); } cb=cb->next(); } } double Marker::calcAngle() { switch (parent->getOrientation()) { case Coord::NORMAL: case Coord::XY: return angle + parent->getRotation(); case Coord::XX: case Coord::YY: return -angle + parent->getRotation(); } } Vector Marker::modifyArrow(const Vector& p1, const Vector& p2, Coord::InternalSystem sys) { const int tip = 6; // length from end of line to tip of arrow Vector aa = parent->mapFromRef(p1,sys); Vector bb = parent->mapFromRef(p2,sys); Vector nn = (bb-aa).normalize(); double ll = (bb-aa).length(); return nn * Scale(ll-tip) * Translate(aa); } Vector* Marker::arrow(const Vector& p1, const Vector& p2, Coord::InternalSystem sys) { Vector p3; if (((p2-p1)[0]) == 0) p3 = p1+Vector(1,0); else p3 = p1+Vector(0,1); Vector3d aa = parent->mapFromRef3d(p1,sys); Vector3d bb = parent->mapFromRef3d(p2,sys); Vector3d cc = parent->mapFromRef3d(p3,sys); const int tip = 6; // length from end of line to tip of arrow const int tail = 2; // length from end of line to tails of arrow const int wc = 2; // width of arrow at end of line const int wt = 3; // width of arrow at tails // build in Y-Z plane, align on z axis Vector3d vv[6]; vv[0] = Vector3d(0,0,tip); vv[1] = Vector3d(0,-wc,0); vv[2] = Vector3d(0,-wt,-tail); vv[3] = Vector3d(0,0,0); vv[4] = Vector3d(0,wt,-tail); vv[5] = Vector3d(0,wc,0); Vector3d l1 = (aa-bb).normalize(); Vector3d l2 = (aa-cc).normalize(); Vector3d rz = -l1; Vector3d rx = (cross(l1,l2)).normalize(); Vector3d ry = cross(rz,rx); Matrix3d rr(rx,ry,rz); Matrix3d mm = Translate3d(0,0,-tip) * Scale3d(1.5) * rr.invert() * Translate3d(bb); Vector* ww = new Vector[6]; for (int ii=0; ii<6; ii++) ww[ii] = vv[ii]*mm; return ww; } void Marker::analysisXYEEResult(char* xname, char* yname, char* xcname, char* ycname, double* x, double* y, double* xc, double* yc, int num) { Blt_Vector* xx; Blt_GetVector(parent->getInterp(), xname, &xx); Blt_ResetVector(xx, x, num, num*sizeof(double), TCL_DYNAMIC); Blt_Vector* yy; Blt_GetVector(parent->getInterp(), yname, &yy); Blt_ResetVector(yy, y, num, num*sizeof(double), TCL_DYNAMIC); Blt_Vector* xxc; Blt_GetVector(parent->getInterp(), xcname, &xxc); Blt_ResetVector(xxc, xc, num, num*sizeof(double), TCL_DYNAMIC); Blt_Vector* yyc; Blt_GetVector(parent->getInterp(), ycname, &yyc); Blt_ResetVector(yyc, yc, num, num*sizeof(double), TCL_DYNAMIC); } void Marker::analysisXYResult(char* xname, char* yname, double* x, double* y, int num) { Blt_Vector* xx; Blt_GetVector(parent->getInterp(), xname, &xx); Blt_ResetVector(xx, x, num, num*sizeof(double), TCL_DYNAMIC); Blt_Vector* yy; Blt_GetVector(parent->getInterp(), yname, &yy); Blt_ResetVector(yy, y, num, num*sizeof(double), TCL_DYNAMIC); } void Marker::analysisXYEResult(char* xname, char* yname, char* ename, double* x, double* y, double* e, int num) { Blt_Vector* xx; Blt_GetVector(parent->getInterp(), xname, &xx); Blt_ResetVector(xx, x, num, num*sizeof(double), TCL_DYNAMIC); Blt_Vector* yy; Blt_GetVector(parent->getInterp(), yname, &yy); Blt_ResetVector(yy, y, num, num*sizeof(double), TCL_DYNAMIC); Blt_Vector* ee; Blt_GetVector(parent->getInterp(), ename, &ee); Blt_ResetVector(ee, e, num, num*sizeof(double), TCL_DYNAMIC); } void Marker::analysisXYEResult(double* x, double* y, double* e, int num) { for (int ii=0; iiinterp, str.str().c_str(), NULL); } } Matrix Marker::fwdMatrix() { return Rotate(angle) * FlipY() * Translate(center); } Matrix Marker::bckMatrix() { return Translate(-center) * FlipY() * Rotate(-angle); } Vector Marker::fwdMap(const Vector& vv, Coord::InternalSystem sys) { return parent->mapFromRef(vv * Rotate(angle) * FlipY() * Translate(center),sys); } Vector Marker::bckMap(const Vector& vv, Coord::InternalSystem sys) { return parent->mapToRef(vv,sys) * Translate(-center) * FlipY() * Rotate(-angle); } void Marker::setMatrices(Coord::InternalSystem sys, Matrix* fwd, Matrix* bck) { switch (sys) { case Coord::WIDGET: *fwd = parent->refToWidget; *bck = parent->widgetToRef; break; case Coord::CANVAS: *fwd = parent->refToCanvas; *bck = parent->canvasToRef; break; case Coord::WINDOW: *fwd = parent->refToWindow; *bck = parent->windowToRef; break; case Coord::MAGNIFIER: *fwd = parent->refToMagnifier; *bck = parent->magnifierToRef; break; default: // na break; } } // list void Marker::listRADEC(FitsImage* ptr, const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { char buf[64]; ptr->mapFromRef(vv,sys,sky,format,buf); string x(buf); istringstream wcs(x); wcs >> ra >> dec; } void Marker::listRADECPros(FitsImage* ptr, const Vector& vv, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { char buf[64]; char decc[32]; ptr->mapFromRef(vv,sys,sky,format,buf); string x(buf); istringstream wcs(x); wcs >> ra >> decc; if (decc[0]=='+') strncpy(dec,decc+1,32); else strncpy(dec,decc,32); } void Marker::listPre(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, FitsImage* ptr, int strip, int hash) { // no props for semicolons if (!strip) { FitsImage* fits = parent->findFits(); if (fits && fits->nextMosaic()) { switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: str << "# tile " << parent->findFits(ptr) << endl; break; default: if (!parent->findFits()->hasWCSCel(sys)) str << "# tile " << parent->findFits(ptr) << endl; } } if (hash) str << "# "; } if (!(properties&INCLUDE)) str << '-'; } void Marker::listPost(ostream& str, int conj, int strip) { // no props for semicolons if (!strip) { if (conj) str << " ||"; listProperties(str,1); } else { if (conj) str << "||"; else str << ';'; } } void Marker::listProperties(ostream& str, int hash) { if (strncmp("green",colorName,5) || dlist[0] != 8 || dlist[1] != 3 || (lineWidth != 1) || strncmp("helvetica 10 normal roman",getFont(),25) || (text && *text) || !(properties&SELECT) || !(properties&HIGHLITE) || (properties&DASH) || (properties&FIXED) || !(properties&EDIT) || !(properties&MOVE) || !(properties&ROTATE) || !(properties&DELETE) || !(properties&SOURCE) || (tags.count() > 0) || (comment && *comment)) { if (hash) str << " #"; listProps(str); } str << endl; } void Marker::listProps(ostream& str) { if (strncmp("green",colorName,5)) str << " color=" << colorName; if (dlist[0] != 8 || dlist[1] != 3) str << " dashlist=" << dlist[0] << ' ' << dlist[1]; if (lineWidth != 1) str << " width=" << lineWidth; if (strncmp("helvetica 10 normal roman", getFont(), 25)) str << " font=\"" << getFont() << '"'; if (text && *text) // only list text if there is something to list str << " text={" << text << '}'; if (!(properties&SELECT)) str << " select=0"; if (!(properties&HIGHLITE)) str << " highlite=0"; if (properties&DASH) str << " dash=1"; if (properties&FIXED) str << " fixed=1"; if (!(properties&EDIT)) str << " edit=0"; if (!(properties&MOVE)) str << " move=0"; if (!(properties&ROTATE)) str << " rotate=0"; if (!(properties&DELETE)) str << " delete=0"; if (!(properties&SOURCE)) str << " background"; // tags Tag* t = tags.head(); while (t) { str << " tag={" << t->tag() << '}'; t = t->next(); } if (comment && *comment) str << ' ' << comment; } void Marker::listCiaoPre(ostream& str) { if (!(properties&INCLUDE)) str << '-'; } void Marker::listCiaoPost(ostream& str, int strip) { str << (strip ? ';' : '\n'); } void Marker::listProsPost(ostream& str, int strip) { str << (strip ? ';' : '\n'); } void Marker::listSAOtngPre(ostream& str, int strip) { if (!strip && text && *text) str << '#' << text << endl; if (properties&INCLUDE) str << '+'; else str << '-'; } void Marker::listSAOtngPost(ostream& str, int strip) { if (!strip) { str << " # "; if (comment && *comment) str << comment; else if (!(properties&SOURCE)) str << "background"; else str << colorName; } str << (strip ? ';' : '\n'); } void Marker::listSAOimagePre(ostream& str) { if (!(properties&INCLUDE)) str << '-'; } void Marker::listSAOimagePost(ostream& str, int strip) { str << (strip ? ';' : '\n'); } void Marker::listXY(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: str << setprecision(8) << ptr->mapFromRef(center,sys); break; default: if (ptr->hasWCS(sys)) { if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: str << setprecision(10) << ptr->mapFromRef(center,sys,sky); break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << ra << ' ' << dec; break; } } else { str << setprecision(8) << ptr->mapFromRef(center,sys); } } break; } str << (strip ? ';' : '\n'); } void Marker::XMLRowInit() { for (int ii=0; iifindFits(); if (fits && fits->nextMosaic()) { switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: str << parent->findFits(ptr) << ends; break; default: if (!parent->findFits()->hasWCSCel(sys)) str << parent->findFits(ptr) << ends; break; } } if (XMLCol[col]) delete [] XMLCol[col]; XMLCol[col] = dupstr(str.str().c_str()); } // color { XMLColName col = XMLCOLOR; if (XMLCol[col]) delete [] XMLCol[col]; XMLCol[col] = dupstr(colorName); } // width { ostringstream str; str << lineWidth << ends; XMLColName col = XMLWIDTH; if (XMLCol[col]) delete [] XMLCol[col]; XMLCol[col] = dupstr(str.str().c_str()); } // text if (text && *text) { XMLColName col = XMLTEXT; if (XMLCol[col]) delete [] XMLCol[col]; XMLCol[col] = dupstr(text); } // font { XMLColName col = XMLFONT; if (XMLCol[col]) delete [] XMLCol[col]; XMLCol[col] = dupstr(getFont()); } XMLRowProp(XMLSELECT,SELECT); XMLRowProp(XMLHIGHLITE,HIGHLITE); XMLRowProp(XMLEDIT,EDIT); XMLRowProp(XMLMOVE,MOVE); XMLRowProp(XMLROTATE,ROTATE); XMLRowProp(XMLDELETE,DELETE); XMLRowProp(XMLFIXED,FIXED); XMLRowProp(XMLINCLUDE,INCLUDE); XMLRowProp(XMLSOURCE,SOURCE); XMLRowProp(XMLDASH,DASH); // dashlist { ostringstream str; str << dlist[0] << ',' << dlist[1] << ends; XMLColName col = XMLDASHLIST; if (XMLCol[col]) delete [] XMLCol[col]; XMLCol[col] = dupstr(str.str().c_str()); } // tags { ostringstream str; Tag* start = tags.head(); Tag* ptr = start; while (ptr) { if (ptr != start) str << ' '; char* tag = (char*)ptr->tag(); while (*tag) { if (*tag == ' ') str << " "; else str << *tag; tag++; } ptr = ptr->next(); } str << ends; XMLColName col = XMLTAG; if (XMLCol[col]) delete [] XMLCol[col]; XMLCol[col] = dupstr(str.str().c_str()); } // comment if (comment && *comment) { XMLColName col = XMLCOMMENT; if (XMLCol[col]) delete [] XMLCol[col]; XMLCol[col] = dupstr(comment); } } void Marker::XMLRowEnd(ostream& str) { str << ""; for (int ii=0; ii"; if (XMLCol[ii]) { char* ss = XMLQuote(XMLCol[ii]); str << ss; delete [] XMLCol[ii]; delete [] ss; XMLCol[ii] = NULL; } str << ""; } str << "" << endl; } void Marker::XMLRowProp(XMLColName col, Property prop) { if (properties & prop) XMLCol[col] = dupstr("1"); else XMLCol[col] = dupstr("0"); } void Marker::XMLRowPoint(FitsImage* ptr, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, Vector vv) { switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector v = ptr->mapFromRef(vv,sys); XMLRow(XMLX,v[0],8); XMLRow(XMLY,v[1],8); } break; default: if (ptr->hasWCS(sys)) { if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector v = ptr->mapFromRef(vv,sys,sky); XMLRow(XMLX,v[0],10); XMLRow(XMLY,v[1],10); } break; case Coord::SEXAGESIMAL: listRADEC(ptr,vv,sys,sky,format); XMLRow(XMLX,ra); XMLRow(XMLY,dec); break; } } else { Vector v = ptr->mapFromRef(vv,sys); XMLRow(XMLX,v[0],8); XMLRow(XMLY,v[1],8); } } } } void Marker::XMLRowPoint(FitsImage* ptr, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, Vector* vv, int cnt) { switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { double xx[cnt]; double yy[cnt]; for (int ii=0; iimapFromRef(vv[ii],sys); xx[ii] = v[0]; yy[ii] = v[1]; } XMLRow(XMLXV,xx,cnt,8); XMLRow(XMLYV,yy,cnt,8); } break; default: if (ptr->hasWCS(sys)) { if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { double xx[cnt]; double yy[cnt]; for (int ii=0; iimapFromRef(vv[ii],sys,sky); xx[ii] = v[0]; yy[ii] = v[1]; } XMLRow(XMLXV,xx,cnt,10); XMLRow(XMLYV,yy,cnt,10); } break; case Coord::SEXAGESIMAL: { char* xx[cnt]; char* yy[cnt]; for (int ii=0; iimapFromRef(vv[ii],sys); xx[ii] = v[0]; yy[ii] = v[1]; } XMLRow(XMLXV,xx,cnt,8); XMLRow(XMLYV,yy,cnt,8); } } } } void Marker::XMLRowRadiusX(FitsImage* ptr, Coord::CoordSystem sys, Vector vv) { double rr = ptr->mapLenFromRef(vv[0],sys,Coord::ARCSEC); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: XMLRow(XMLR,rr,8); break; default: if (ptr->hasWCS(sys)) { if (ptr->hasWCSCel(sys)) XMLRowARCSEC(XMLR,rr); else XMLRow(XMLR,rr,8); } break; } } void Marker::XMLRowRadiusX(FitsImage* ptr, Coord::CoordSystem sys, Vector* vv, int cnt) { double rr[cnt]; for (int ii=0; iimapLenFromRef(vv[ii][0],sys,Coord::ARCSEC); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: XMLRow(XMLRV,rr,cnt,8); break; default: if (ptr->hasWCS(sys)) { if (ptr->hasWCSCel(sys)) XMLRowARCSEC(XMLRV,rr,cnt); else XMLRow(XMLRV,rr,cnt,8); } break; } } void Marker::XMLRowRadius(FitsImage* ptr, Coord::CoordSystem sys, Vector vv) { Vector v = ptr->mapLenFromRef(vv,sys,Coord::ARCSEC); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: XMLRow(XMLR,v[0],8); XMLRow(XMLR2,v[1],8); break; default: if (ptr->hasWCS(sys)) { if (ptr->hasWCSCel(sys)) { XMLRowARCSEC(XMLR,v[0]); XMLRowARCSEC(XMLR2,v[1]); } else { XMLRow(XMLR,v[0],8); XMLRow(XMLR2,v[1],8); } } break; } } void Marker::XMLRowRadius(FitsImage* ptr, Coord::CoordSystem sys, Vector* vv, int cnt) { double rr[cnt]; double rr2[cnt]; for (int ii=0; iimapLenFromRef(vv[ii],sys,Coord::ARCSEC); rr[ii] = v[0]; rr2[ii] = v[1]; } switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: XMLRow(XMLRV,rr,cnt,8); XMLRow(XMLRV2,rr2,cnt,8); break; default: if (ptr->hasWCS(sys)) { if (ptr->hasWCSCel(sys)) { XMLRowARCSEC(XMLRV,rr,cnt); XMLRowARCSEC(XMLRV2,rr2,cnt); } else { XMLRow(XMLRV,rr,cnt,8); XMLRow(XMLRV2,rr2,cnt,8); } } break; } } void Marker::XMLRowAng(Coord::CoordSystem sys, Coord::SkyFrame sky) { XMLRow(XMLANG, radToDeg(parent->mapAngleFromRef(angle,sys,sky)),8); } void Marker::XMLRowAng(Coord::CoordSystem sys, Coord::SkyFrame sky, double* ang, int cnt) { double aa[cnt]; for (int ii=0; iimapAngleFromRef(ang[ii],sys,sky)); XMLRow(XMLANGV,aa,cnt,8); } char* Marker::XMLQuote(char* src) { char* dest = new char[strlen(src)*7+1]; char* sptr = src; char* dptr = dest; while (sptr && *sptr) { if (*sptr == '&') { // special case, char entities if (*(sptr+1) == '#') { *dptr++ = *sptr; } else { memcpy(dptr,"&",5); dptr += 5; } } else if (*sptr == '<') { memcpy(dptr,"<",4); dptr += 4; } else if (*sptr == '>') { memcpy(dptr,">",4); dptr += 4; } else if (*sptr == '\'') { memcpy(dptr,"'",6); dptr += 6; } else if (*sptr == '"') { memcpy(dptr,""",6); dptr += 6; } else *dptr++ = *sptr; sptr++; } *dptr = '\0'; return dest; } // special composite funtionallity void Marker::setComposite(const Matrix& mx, double aa) { center *= mx; angle += aa; updateBBox(); } void Marker::setComposite(const char* clr, int w, int h) { lineWidth = w; if (colorName) delete [] colorName; colorName = dupstr(clr); color = parent->getColor(colorName); highlited = h; } saods9/tksao/frame/marker.h000644 000765 000000 00000026474 12752714626 016262 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __marker_h__ #define __marker_h__ #include #include "vector.h" #include "vector3d.h" #include "callback.h" #include "list.h" #include "tag.h" #include "coord.h" #include "xml.h" #define POINTSIZE 11 class Base; class FitsImage; class Vector; class Marker { public: // Select-- user may select the marker // Highlite-- user may highlite the marker // Edit-- user may edit the marker // Move-- user may move the marker // Rotate-- user may rotate the marker // Delete-- user may delete the marker // Fixed-- marker is fixed in size (not scaled based on zoom) // Include-- marker is 'included' or 'excluded' ie '+' or '-' // Source-- marker is a 'source' or 'background' marker // Dash-- render with dashed line // Hide-- hidden marker enum Property {NONE=0, SELECT=1, HIGHLITE=2, EDIT=4, MOVE=8, ROTATE=16, DELETE=32, FIXED=64, INCLUDE=128, SOURCE=256, DASH=512, HIDDEN=1024}; enum RenderMode {SRC,XOR}; enum HandleMode {HANDLES,NOHANDLES}; enum AnalysisTask {STATS,PLOT2D,PLOT3D,RADIAL,PANDA,HISTOGRAM}; enum AnalysisMethod {SUM,AVERAGE}; protected: int id; char type_[64]; Base* parent; Vector center; // ref coordinates BBox bbox; // canvas coordinates BBox allBBox; // canvas coordinates double angle; // radians Vector* handle; // canvas coordinates int numHandle; char* colorName; unsigned long color; int lineWidth; unsigned short properties; int selected; int highlited; float dlist[2]; char* text; Tk_Font tkfont_; Tk_Font psfont_; char* comment; Display* display; GC gc; GC gcxor; int doCB; List tags; List callbacks; Marker* previous_; Marker* next_; Vector* arrow(const Vector&, const Vector&, Coord::InternalSystem); char* XMLCol[XMLNUMCOL]; int analysisHistogram_; static const char* analysisHistogramCB_[]; int analysisPlot2d_; static const char* analysisPlot2dCB_[]; int analysisPlot3d_; static const char* analysisPlot3dCB_[]; int analysisPanda_; static const char* analysisPandaCB_[]; int analysisRadial_; static const char* analysisRadialCB_[]; int analysisStats_; static const char* analysisStatsCB_[]; char ra[32]; // tmp storage char dec[32]; // tmp storage protected: virtual void renderX(Drawable, Coord::InternalSystem, RenderMode) =0; virtual void renderXInclude(Drawable drawable, Coord::InternalSystem, RenderMode mode); virtual void renderXText(Drawable, Coord::InternalSystem, RenderMode); void renderXArrow(Drawable, const Vector&, const Vector&, Coord::InternalSystem, GC); void renderXHandles(Drawable); virtual GC renderXGC(RenderMode); virtual void renderXLineDash(GC); void renderXLineNoDash(GC); virtual void renderPS(int mode) =0; virtual void renderPSInclude(int); virtual void renderPSText(int); void renderPSArrow(const Vector&, const Vector&, Coord::InternalSystem); virtual void renderPSGC(int); virtual void renderPSLineDash(); void renderPSLineNoDash(); void renderPSColor(int, XColor*); #ifdef MAC_OSX_TK virtual void renderMACOSX() =0; virtual void renderMACOSXInclude(); virtual void renderMACOSXText(); void renderMACOSXArrow(const Vector&, const Vector&, Coord::InternalSystem); virtual void renderMACOSXGC(); virtual void renderMACOSXLineDash(); void renderMACOSXLineNoDash(); #endif #ifdef __WIN32 virtual void renderWIN32() =0; virtual void renderWIN32Include(); virtual void renderWIN32Text(); void renderWIN32Arrow(const Vector&, const Vector&, Coord::InternalSystem); virtual void renderWIN32GC(); virtual void renderWIN32LineDash(); void renderWIN32LineNoDash(); #endif void analysisXYResult(char*, char*, double*, double*, int); void analysisXYEResult(char*, char*, char*, double*, double*, double*, int); void analysisXYEResult(double*, double*, double*, int); void analysisXYEEResult(char*, char*, char*, char*, double*, double*, double*, double*, int); void setMatrices(Coord::InternalSystem, Matrix*, Matrix*); double calcAngle(); Vector modifyArrow(const Vector&, const Vector&, Coord::InternalSystem); virtual void updateHandles() =0; virtual void calcAllBBox(); void initFonts(const char*); void listRADEC(FitsImage*, const Vector&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void listRADECPros(FitsImage*, const Vector&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void listPre(ostream&, Coord::CoordSystem, Coord::SkyFrame, FitsImage*, int, int); virtual void listPost(ostream&, int, int); void listCiaoPre(ostream&); void listCiaoPost(ostream&, int); void listProsPost(ostream&, int); void listSAOtngPre(ostream&, int); void listSAOtngPost(ostream&, int); void listSAOimagePre(ostream&); void listSAOimagePost(ostream&, int); void listProps(ostream&); void listProperties(ostream&, int); void XMLRowInit(); void XMLRow(XMLColName,int); void XMLRow(XMLColName,int*,int); void XMLRow(XMLColName,double, int); void XMLRow(XMLColName,double*,int, int); void XMLRow(XMLColName,char*); void XMLRow(XMLColName,char**, int); void XMLRowARCSEC(XMLColName,double); void XMLRowARCSEC(XMLColName,double*,int); void XMLRowProps(FitsImage*, Coord::CoordSystem); void XMLRowEnd(ostream&); void XMLRowProp(XMLColName, Property); void XMLRowCenter(FitsImage* fits, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) {XMLRowPoint(fits, sys, sky, format, center);} void XMLRowPoint(FitsImage*, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, Vector); void XMLRowPoint(FitsImage*, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, Vector*, int); void XMLRowRadiusX(FitsImage*, Coord::CoordSystem, Vector); void XMLRowRadiusX(FitsImage*, Coord::CoordSystem, Vector*, int); void XMLRowRadius(FitsImage*, Coord::CoordSystem, Vector); void XMLRowRadius(FitsImage*, Coord::CoordSystem, Vector*, int); void XMLRowAng(Coord::CoordSystem, Coord::SkyFrame); void XMLRowAng(Coord::CoordSystem, Coord::SkyFrame, double*, int); char* XMLQuote(char*); public: Marker(Base* p, const Vector& v, double ang); Marker(Base* p, const Vector& v, double ang, const char* clr, int* dsh, int w, const char* f, const char* t, unsigned short prop, const char* c, const List& tag, const List& cb); Marker(const Marker&); virtual ~Marker(); virtual Matrix fwdMatrix(); virtual Matrix bckMatrix(); virtual Vector fwdMap(const Vector&, Coord::InternalSystem); virtual Vector bckMap(const Vector&, Coord::InternalSystem); virtual void x11(Drawable, Coord::InternalSystem, int, RenderMode,HandleMode); virtual void ps(int,int); #ifdef MAC_OSX_TK virtual void macosx(int); #endif #ifdef __WIN32 virtual void win32(int); #endif virtual Marker* dup() =0; void newIdentity(); virtual void updateBBox(); virtual void updateCoords(const Matrix&); virtual void moveTo(const Vector& v); virtual void moveBegin(); virtual void move(const Vector& v); virtual void moveEnd(); virtual void centroid(); virtual void editBegin(int); virtual void edit(const Vector& v, int h); virtual void editEnd(); virtual void rotateBegin(); virtual void rotate(const Vector& v, int h); virtual void rotateEnd(); // assume Coord::CANVAS virtual int isIn(const Vector& vv) {return bbox.isIn(vv);} virtual int isIn(const Vector& vv, Coord::InternalSystem sys); virtual int isIn(const Vector& vv, Coord::InternalSystem sys, int nn) {return isIn(vv,sys);} virtual int isIn(const Vector& vv, Coord::InternalSystem sys, int nn, int aa) {return isIn(vv,sys);} // assume Coord::REF virtual int isIn(const Vector& vv, const Matrix& bck); virtual int isIn(const Vector& vv, const Matrix& bck, int nn) {return isIn(vv,bck);} virtual int isIn(const Vector& vv, const Matrix& bck, int nn, int aa) {return isIn(vv,bck);} void setAngle(double); double getAngle() {return angle;} int getNumHandle() {return numHandle;} Vector getHandle(int); virtual int getSegment(const Vector&) {return 0;} virtual void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int) =0; virtual void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat) {} virtual void listCiao(ostream&, Coord::CoordSystem, int) {} virtual void listSAOtng(ostream&,Coord::CoordSystem,Coord::SkyFrame,Coord::SkyFormat, int) {} virtual void listPros(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int) {} virtual void listSAOimage(ostream&, int) {} virtual void listXY(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); const BBox& getBBox() {return bbox;} const BBox& getAllBBox() {return allBBox;} int isVisible(const BBox&); void select(); void unselect(); void toggleSelect(); int isSelected() {return selected;} void highlite(); void unhighlite(); void toggleHighlite(); int isHighlited() {return highlited;} void key(); void setColor(const char*); const char* getColorName() {return colorName;} void setLineWidth(int); int getLineWidth() {return lineWidth;} void setText(const char*); const char* getText() {return text;} void setFont(const char*); const char* getFont(); void addTag(const char*); void editTag(const char*, const char*); void deleteTags(); void deleteTag(int); void deleteTag(const char*); const char* getTag(); const char* getNextTag(); const char* getTag(int); int hasTag(const char*); int onHandle(const Vector& v); int getId() {return id;} const char* getType() {return type_;} Vector getCenter() {return center;} int canSelect() {return (properties & SELECT) ? 1:0;} int canHighlite() {return (properties & HIGHLITE) ? 1:0;} int canEdit() {return (properties & EDIT) ? 1:0;} int canMove() {return (properties & MOVE) ? 1:0;} int canRotate() {return (properties & ROTATE) ? 1:0;} int canDelete() {return (properties & DELETE) ? 1:0;} int isFixed() {return (properties & FIXED) ? 1:0;} void setProperty(unsigned short, int); int getProperty(unsigned short); unsigned short getProperty() {return properties;} int addCallBack(CallBack::Type, const char*, const char*); int deleteCallBack(CallBack::Type, const char*); void deleteCallBack(CallBack::Type); void doCallBack(CallBack::Type); Marker* previous() {return previous_;} void setPrevious(Marker* m) {previous_ = m;} Marker* next() {return next_;} void setNext(Marker* m) {next_ = m;} void enableCB() {doCB = 1;} void disableCB() {doCB = 0;} void deleteCBs(); virtual void analysis(AnalysisTask, int) {} virtual void analysisHistogram(char*, char*, int) {} virtual void analysisRadial(char*, char*, char*, Coord::CoordSystem) {} virtual void analysisStats(Coord::CoordSystem, Coord::SkyFrame) {} virtual void analysisPanda(Coord::CoordSystem) {} virtual void analysisPlot2d(char*, char*, char*, char*, Coord::CoordSystem, Coord::SkyFrame, Marker::AnalysisMethod) {} virtual void analysisPlot3d(char*, char*, Coord::CoordSystem, Marker::AnalysisMethod) {} // special composite funtionality virtual void setComposite(const Matrix&, double); void setComposite(const char*, int, int); }; #endif saods9/tksao/frame/parser.C000644 000765 000000 00001551720 12775514040 016217 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse frparse #define yylex frlex #define yyerror frerror #define yylval frlval #define yychar frchar #define yydebug frdebug #define yynerrs frnerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { REAL = 258, INT = 259, STRING = 260, POINTER = 261, ANGDEGREE = 262, ANGRADIAN = 263, SEXSTR = 264, HMSSTR = 265, DMSSTR = 266, ABOUT_ = 267, AIP_ = 268, ALLOC_ = 269, ALLOCGZ_ = 270, ALIGN_ = 271, ALL_ = 272, ALT_ = 273, AMPLIFIER_ = 274, ANALYSIS_ = 275, ANGLE_ = 276, ANNULUS_ = 277, APPEND_ = 278, ARCMIN_ = 279, ARCSEC_ = 280, ARRAY_ = 281, ARROW_ = 282, ASINH_ = 283, AST_ = 284, AUTO_ = 285, AUX_ = 286, AVERAGE_ = 287, AXES_ = 288, AZIMUTH_ = 289, B1950_ = 290, BACK_ = 291, BACKGROUND_ = 292, BASE_ = 293, BBOX_ = 294, BEGIN_ = 295, BG_ = 296, BIG_ = 297, BIGENDIAN_ = 298, BIN_ = 299, BITPIX_ = 300, BLOCK_ = 301, BORDER_ = 302, BOX_ = 303, BOXANNULUS_ = 304, BOXCAR_ = 305, BOXCIRCLE_ = 306, BPANDA_ = 307, BUFFER_ = 308, BW_ = 309, CALLBACK_ = 310, CANVAS_ = 311, CATALOG_ = 312, CELESTRIAL_ = 313, CENTER_ = 314, CENTROID_ = 315, CHANNEL_ = 316, CIRCLE_ = 317, CIAO_ = 318, CLEAR_ = 319, CLIP_ = 320, COLOR_ = 321, COLORBAR_ = 322, COLORMAP_ = 323, COLORSCALE_ = 324, COLORSPACE_ = 325, COLS_ = 326, COLUMN_ = 327, COMMAND_ = 328, COMPASS_ = 329, COMPOSITE_ = 330, COMPRESS_ = 331, CONTOUR_ = 332, CONTRAST_ = 333, COORDINATES_ = 334, COPY_ = 335, COUNT_ = 336, CPANDA_ = 337, CREATE_ = 338, CROP_ = 339, CROSS_ = 340, CROSSHAIR_ = 341, CUBE_ = 342, CURSOR_ = 343, CUT_ = 344, CMYK_ = 345, DASH_ = 346, DASHLIST_ = 347, DATA_ = 348, DATAMIN_ = 349, DATASEC_ = 350, DEBUG_ = 351, DEGREES_ = 352, DEFAULT_ = 353, DELETE_ = 354, DEPTH_ = 355, DETECTOR_ = 356, DIAMOND_ = 357, DIM_ = 358, DS9_ = 359, EDIT_ = 360, ECLIPTIC_ = 361, ELEVATION_ = 362, ELLIPSE_ = 363, ELLIPSEANNULUS_ = 364, END_ = 365, ENVI_ = 366, EPANDA_ = 367, EPSILON_ = 368, EQUATORIAL_ = 369, ERASE_ = 370, EXT_ = 371, FACTOR_ = 372, FALSE_ = 373, FILE_ = 374, FILTER_ = 375, FIT_ = 376, FITS_ = 377, FITSY_ = 378, FIXED_ = 379, FK4_ = 380, FK4_NO_E_ = 381, FK5_ = 382, FONT_ = 383, FRONT_ = 384, FULL_ = 385, FUNCTION_ = 386, GALACTIC_ = 387, GAUSSIAN_ = 388, GET_ = 389, GLOBAL_ = 390, GRAPHICS_ = 391, GRAY_ = 392, GRID_ = 393, GZ_ = 394, HANDLE_ = 395, HAS_ = 396, HEAD_ = 397, HEADER_ = 398, HEIGHT_ = 399, HELIOECLIPTIC_ = 400, HIDE_ = 401, HIGHLITE_ = 402, HISTEQU_ = 403, HISTOGRAM_ = 404, HORIZONTAL_ = 405, ICRS_ = 406, ID_ = 407, IIS_ = 408, IMAGE_ = 409, INCLUDE_ = 410, INCR_ = 411, INFO_ = 412, INTEGER_ = 413, ITERATION_ = 414, IRAF_ = 415, IRAFMIN_ = 416, J2000_ = 417, KEY_ = 418, KEYWORD_ = 419, LABEL_ = 420, LENGTH_ = 421, LEVEL_ = 422, LITTLE_ = 423, LITTLEENDIAN_ = 424, LINE_ = 425, LINEAR_ = 426, LIST_ = 427, LOAD_ = 428, LOCAL_ = 429, LOG_ = 430, MACOSX_ = 431, MAGNIFIER_ = 432, MATCH_ = 433, MAP_ = 434, MARK_ = 435, MARKER_ = 436, MASK_ = 437, MESSAGE_ = 438, METHOD_ = 439, MINMAX_ = 440, MIP_ = 441, MMAP_ = 442, MMAPINCR_ = 443, MOSAIC_ = 444, MODE_ = 445, MOTION_ = 446, MOVE_ = 447, NAME_ = 448, NAN_ = 449, NATIVE_ = 450, NAXES_ = 451, NEW_ = 452, NEXT_ = 453, NO_ = 454, NONE_ = 455, NOW_ = 456, NRRD_ = 457, NUMBER_ = 458, OBJECT_ = 459, OFF_ = 460, ON_ = 461, ONLY_ = 462, OPTION_ = 463, ORIENT_ = 464, PAN_ = 465, PANNER_ = 466, PARSER_ = 467, PASTE_ = 468, PERF_ = 469, PHOTO_ = 470, PHYSICAL_ = 471, PIXEL_ = 472, PLOT2D_ = 473, PLOT3D_ = 474, POINT_ = 475, POINTER_ = 476, POLYGON_ = 477, POSTSCRIPT_ = 478, POW_ = 479, PRINT_ = 480, PRESERVE_ = 481, PROJECTION_ = 482, PROPERTY_ = 483, PUBLICATION_ = 484, PROS_ = 485, QUERY_ = 486, RADIAL_ = 487, RADIUS_ = 488, REGION_ = 489, REPLACE_ = 490, RESAMPLE_ = 491, RESET_ = 492, RESOLUTION_ = 493, RGB_ = 494, ROOT_ = 495, ROTATE_ = 496, RULER_ = 497, SAMPLE_ = 498, SAOIMAGE_ = 499, SAOTNG_ = 500, SAVE_ = 501, SCALE_ = 502, SCAN_ = 503, SCIENTIFIC_ = 504, SCOPE_ = 505, SEGMENT_ = 506, SELECT_ = 507, SET_ = 508, SEXAGESIMAL_ = 509, SHAPE_ = 510, SHARED_ = 511, SHIFT_ = 512, SHMID_ = 513, SHOW_ = 514, SINH_ = 515, SIZE_ = 516, SLICE_ = 517, SMMAP_ = 518, SMOOTH_ = 519, SOCKET_ = 520, SOCKETGZ_ = 521, SOURCE_ = 522, SQRT_ = 523, SQUARED_ = 524, SSHARED_ = 525, STATS_ = 526, STATUS_ = 527, SUPERGALACTIC_ = 528, SUM_ = 529, SYSTEM_ = 530, TABLE_ = 531, TAG_ = 532, TEMPLATE_ = 533, TEXT_ = 534, THREADS_ = 535, THREED_ = 536, THRESHOLD_ = 537, THICK_ = 538, TRANSPARENCY_ = 539, TO_ = 540, TOGGLE_ = 541, TOPHAT_ = 542, TRUE_ = 543, TYPE_ = 544, UNDO_ = 545, UNHIGHLITE_ = 546, UNLOAD_ = 547, UNSELECT_ = 548, UPDATE_ = 549, USER_ = 550, VALUE_ = 551, VAR_ = 552, VIEW_ = 553, VECTOR_ = 554, VERSION_ = 555, VERTEX_ = 556, VERTICAL_ = 557, WARP_ = 558, WCS_ = 559, WCSA_ = 560, WCSB_ = 561, WCSC_ = 562, WCSD_ = 563, WCSE_ = 564, WCSF_ = 565, WCSG_ = 566, WCSH_ = 567, WCSI_ = 568, WCSJ_ = 569, WCSK_ = 570, WCSL_ = 571, WCSM_ = 572, WCSN_ = 573, WCSO_ = 574, WCSP_ = 575, WCSQ_ = 576, WCSR_ = 577, WCSS_ = 578, WCST_ = 579, WCSU_ = 580, WCSV_ = 581, WCSW_ = 582, WCSX_ = 583, WCSY_ = 584, WCSZ_ = 585, WCS0_ = 586, WFPC2_ = 587, WIDTH_ = 588, WIN32_ = 589, XML_ = 590, XY_ = 591, YES_ = 592, ZMAX_ = 593, ZSCALE_ = 594, ZOOM_ = 595 }; #endif /* Tokens. */ #define REAL 258 #define INT 259 #define STRING 260 #define POINTER 261 #define ANGDEGREE 262 #define ANGRADIAN 263 #define SEXSTR 264 #define HMSSTR 265 #define DMSSTR 266 #define ABOUT_ 267 #define AIP_ 268 #define ALLOC_ 269 #define ALLOCGZ_ 270 #define ALIGN_ 271 #define ALL_ 272 #define ALT_ 273 #define AMPLIFIER_ 274 #define ANALYSIS_ 275 #define ANGLE_ 276 #define ANNULUS_ 277 #define APPEND_ 278 #define ARCMIN_ 279 #define ARCSEC_ 280 #define ARRAY_ 281 #define ARROW_ 282 #define ASINH_ 283 #define AST_ 284 #define AUTO_ 285 #define AUX_ 286 #define AVERAGE_ 287 #define AXES_ 288 #define AZIMUTH_ 289 #define B1950_ 290 #define BACK_ 291 #define BACKGROUND_ 292 #define BASE_ 293 #define BBOX_ 294 #define BEGIN_ 295 #define BG_ 296 #define BIG_ 297 #define BIGENDIAN_ 298 #define BIN_ 299 #define BITPIX_ 300 #define BLOCK_ 301 #define BORDER_ 302 #define BOX_ 303 #define BOXANNULUS_ 304 #define BOXCAR_ 305 #define BOXCIRCLE_ 306 #define BPANDA_ 307 #define BUFFER_ 308 #define BW_ 309 #define CALLBACK_ 310 #define CANVAS_ 311 #define CATALOG_ 312 #define CELESTRIAL_ 313 #define CENTER_ 314 #define CENTROID_ 315 #define CHANNEL_ 316 #define CIRCLE_ 317 #define CIAO_ 318 #define CLEAR_ 319 #define CLIP_ 320 #define COLOR_ 321 #define COLORBAR_ 322 #define COLORMAP_ 323 #define COLORSCALE_ 324 #define COLORSPACE_ 325 #define COLS_ 326 #define COLUMN_ 327 #define COMMAND_ 328 #define COMPASS_ 329 #define COMPOSITE_ 330 #define COMPRESS_ 331 #define CONTOUR_ 332 #define CONTRAST_ 333 #define COORDINATES_ 334 #define COPY_ 335 #define COUNT_ 336 #define CPANDA_ 337 #define CREATE_ 338 #define CROP_ 339 #define CROSS_ 340 #define CROSSHAIR_ 341 #define CUBE_ 342 #define CURSOR_ 343 #define CUT_ 344 #define CMYK_ 345 #define DASH_ 346 #define DASHLIST_ 347 #define DATA_ 348 #define DATAMIN_ 349 #define DATASEC_ 350 #define DEBUG_ 351 #define DEGREES_ 352 #define DEFAULT_ 353 #define DELETE_ 354 #define DEPTH_ 355 #define DETECTOR_ 356 #define DIAMOND_ 357 #define DIM_ 358 #define DS9_ 359 #define EDIT_ 360 #define ECLIPTIC_ 361 #define ELEVATION_ 362 #define ELLIPSE_ 363 #define ELLIPSEANNULUS_ 364 #define END_ 365 #define ENVI_ 366 #define EPANDA_ 367 #define EPSILON_ 368 #define EQUATORIAL_ 369 #define ERASE_ 370 #define EXT_ 371 #define FACTOR_ 372 #define FALSE_ 373 #define FILE_ 374 #define FILTER_ 375 #define FIT_ 376 #define FITS_ 377 #define FITSY_ 378 #define FIXED_ 379 #define FK4_ 380 #define FK4_NO_E_ 381 #define FK5_ 382 #define FONT_ 383 #define FRONT_ 384 #define FULL_ 385 #define FUNCTION_ 386 #define GALACTIC_ 387 #define GAUSSIAN_ 388 #define GET_ 389 #define GLOBAL_ 390 #define GRAPHICS_ 391 #define GRAY_ 392 #define GRID_ 393 #define GZ_ 394 #define HANDLE_ 395 #define HAS_ 396 #define HEAD_ 397 #define HEADER_ 398 #define HEIGHT_ 399 #define HELIOECLIPTIC_ 400 #define HIDE_ 401 #define HIGHLITE_ 402 #define HISTEQU_ 403 #define HISTOGRAM_ 404 #define HORIZONTAL_ 405 #define ICRS_ 406 #define ID_ 407 #define IIS_ 408 #define IMAGE_ 409 #define INCLUDE_ 410 #define INCR_ 411 #define INFO_ 412 #define INTEGER_ 413 #define ITERATION_ 414 #define IRAF_ 415 #define IRAFMIN_ 416 #define J2000_ 417 #define KEY_ 418 #define KEYWORD_ 419 #define LABEL_ 420 #define LENGTH_ 421 #define LEVEL_ 422 #define LITTLE_ 423 #define LITTLEENDIAN_ 424 #define LINE_ 425 #define LINEAR_ 426 #define LIST_ 427 #define LOAD_ 428 #define LOCAL_ 429 #define LOG_ 430 #define MACOSX_ 431 #define MAGNIFIER_ 432 #define MATCH_ 433 #define MAP_ 434 #define MARK_ 435 #define MARKER_ 436 #define MASK_ 437 #define MESSAGE_ 438 #define METHOD_ 439 #define MINMAX_ 440 #define MIP_ 441 #define MMAP_ 442 #define MMAPINCR_ 443 #define MOSAIC_ 444 #define MODE_ 445 #define MOTION_ 446 #define MOVE_ 447 #define NAME_ 448 #define NAN_ 449 #define NATIVE_ 450 #define NAXES_ 451 #define NEW_ 452 #define NEXT_ 453 #define NO_ 454 #define NONE_ 455 #define NOW_ 456 #define NRRD_ 457 #define NUMBER_ 458 #define OBJECT_ 459 #define OFF_ 460 #define ON_ 461 #define ONLY_ 462 #define OPTION_ 463 #define ORIENT_ 464 #define PAN_ 465 #define PANNER_ 466 #define PARSER_ 467 #define PASTE_ 468 #define PERF_ 469 #define PHOTO_ 470 #define PHYSICAL_ 471 #define PIXEL_ 472 #define PLOT2D_ 473 #define PLOT3D_ 474 #define POINT_ 475 #define POINTER_ 476 #define POLYGON_ 477 #define POSTSCRIPT_ 478 #define POW_ 479 #define PRINT_ 480 #define PRESERVE_ 481 #define PROJECTION_ 482 #define PROPERTY_ 483 #define PUBLICATION_ 484 #define PROS_ 485 #define QUERY_ 486 #define RADIAL_ 487 #define RADIUS_ 488 #define REGION_ 489 #define REPLACE_ 490 #define RESAMPLE_ 491 #define RESET_ 492 #define RESOLUTION_ 493 #define RGB_ 494 #define ROOT_ 495 #define ROTATE_ 496 #define RULER_ 497 #define SAMPLE_ 498 #define SAOIMAGE_ 499 #define SAOTNG_ 500 #define SAVE_ 501 #define SCALE_ 502 #define SCAN_ 503 #define SCIENTIFIC_ 504 #define SCOPE_ 505 #define SEGMENT_ 506 #define SELECT_ 507 #define SET_ 508 #define SEXAGESIMAL_ 509 #define SHAPE_ 510 #define SHARED_ 511 #define SHIFT_ 512 #define SHMID_ 513 #define SHOW_ 514 #define SINH_ 515 #define SIZE_ 516 #define SLICE_ 517 #define SMMAP_ 518 #define SMOOTH_ 519 #define SOCKET_ 520 #define SOCKETGZ_ 521 #define SOURCE_ 522 #define SQRT_ 523 #define SQUARED_ 524 #define SSHARED_ 525 #define STATS_ 526 #define STATUS_ 527 #define SUPERGALACTIC_ 528 #define SUM_ 529 #define SYSTEM_ 530 #define TABLE_ 531 #define TAG_ 532 #define TEMPLATE_ 533 #define TEXT_ 534 #define THREADS_ 535 #define THREED_ 536 #define THRESHOLD_ 537 #define THICK_ 538 #define TRANSPARENCY_ 539 #define TO_ 540 #define TOGGLE_ 541 #define TOPHAT_ 542 #define TRUE_ 543 #define TYPE_ 544 #define UNDO_ 545 #define UNHIGHLITE_ 546 #define UNLOAD_ 547 #define UNSELECT_ 548 #define UPDATE_ 549 #define USER_ 550 #define VALUE_ 551 #define VAR_ 552 #define VIEW_ 553 #define VECTOR_ 554 #define VERSION_ 555 #define VERTEX_ 556 #define VERTICAL_ 557 #define WARP_ 558 #define WCS_ 559 #define WCSA_ 560 #define WCSB_ 561 #define WCSC_ 562 #define WCSD_ 563 #define WCSE_ 564 #define WCSF_ 565 #define WCSG_ 566 #define WCSH_ 567 #define WCSI_ 568 #define WCSJ_ 569 #define WCSK_ 570 #define WCSL_ 571 #define WCSM_ 572 #define WCSN_ 573 #define WCSO_ 574 #define WCSP_ 575 #define WCSQ_ 576 #define WCSR_ 577 #define WCSS_ 578 #define WCST_ 579 #define WCSU_ 580 #define WCSV_ 581 #define WCSW_ 582 #define WCSX_ 583 #define WCSY_ 584 #define WCSZ_ 585 #define WCS0_ 586 #define WFPC2_ 587 #define WIDTH_ 588 #define WIN32_ 589 #define XML_ 590 #define XY_ 591 #define YES_ 592 #define ZMAX_ 593 #define ZSCALE_ 594 #define ZOOM_ 595 /* Copy the first part of user declarations. */ #line 10 "frame/parser.Y" #define YYDEBUG 1 #include #include #include #include "base.h" #include "frame3d.h" #include "fitsimage.h" #include "marker.h" #undef yyFlexLexer #define yyFlexLexer frFlexLexer #include extern int frlex(void*, frFlexLexer*); extern void frerror(Base*, frFlexLexer*, const char*); static Coord::CoordSystem currentCoord = Coord::IMAGE; static Coord::SkyFrame currentSky = Coord::FK5; static unsigned short defaultProps = Marker::SELECT | Marker::HIGHLITE | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::INCLUDE | Marker::SOURCE; static unsigned short currentProps; static char currentColor[16]; static int currentWidth; static int currentDash[2]; static char currentFont[32]; static char currentText[80]; static List taglist; static List cblist; static unsigned short propQMask; static unsigned short propQValue; static void setProps(unsigned short* props, unsigned short prop, int value); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 51 "frame/parser.Y" { #define FRBUFSIZE 4096 char chr; char str[FRBUFSIZE]; void* ptr; int integer; double real; double vector[3]; int dash[2]; } /* Line 193 of yacc.c. */ #line 836 "frame/parser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 849 "frame/parser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 354 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 5976 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 345 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 216 /* YYNRULES -- Number of rules. */ #define YYNRULES 1263 /* YYNRULES -- Number of states. */ #define YYNSTATES 2793 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 595 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint16 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 344, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 342, 2, 2, 2, 2, 2, 2, 2, 2, 2, 343, 341, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 6, 9, 12, 16, 19, 21, 23, 26, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 65, 68, 71, 75, 78, 81, 84, 87, 91, 94, 98, 101, 104, 107, 110, 113, 115, 119, 122, 125, 128, 130, 133, 136, 139, 141, 144, 146, 149, 152, 155, 158, 160, 162, 164, 166, 169, 172, 175, 178, 181, 184, 187, 190, 193, 196, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 218, 221, 224, 226, 228, 229, 231, 233, 235, 237, 239, 241, 243, 246, 249, 252, 255, 257, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 373, 375, 377, 378, 380, 382, 384, 386, 388, 390, 392, 394, 395, 397, 399, 400, 402, 404, 405, 407, 409, 410, 412, 414, 416, 418, 420, 422, 424, 425, 427, 429, 431, 433, 435, 437, 439, 440, 442, 444, 445, 447, 449, 451, 453, 455, 458, 461, 464, 467, 470, 473, 476, 478, 481, 483, 486, 488, 491, 493, 496, 499, 506, 510, 514, 518, 520, 523, 527, 531, 535, 539, 543, 547, 551, 555, 559, 562, 567, 570, 573, 576, 580, 583, 586, 588, 591, 593, 596, 601, 607, 610, 614, 620, 627, 629, 631, 633, 641, 653, 662, 675, 677, 680, 683, 685, 687, 690, 693, 696, 699, 703, 706, 709, 711, 713, 715, 717, 719, 721, 723, 726, 729, 732, 736, 739, 742, 745, 752, 763, 765, 768, 770, 777, 788, 790, 793, 796, 799, 802, 805, 808, 821, 823, 824, 826, 828, 833, 840, 842, 844, 846, 851, 855, 860, 861, 868, 877, 880, 884, 888, 892, 893, 897, 902, 907, 912, 916, 920, 922, 926, 932, 937, 942, 946, 949, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995, 997, 1000, 1003, 1008, 1016, 1019, 1022, 1025, 1027, 1031, 1034, 1037, 1039, 1042, 1051, 1054, 1056, 1059, 1061, 1064, 1066, 1071, 1079, 1082, 1084, 1086, 1088, 1090, 1093, 1095, 1097, 1100, 1102, 1103, 1106, 1109, 1111, 1113, 1115, 1117, 1120, 1123, 1126, 1128, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1150, 1152, 1155, 1157, 1162, 1168, 1169, 1172, 1174, 1180, 1183, 1186, 1188, 1190, 1192, 1195, 1197, 1200, 1202, 1204, 1205, 1207, 1208, 1210, 1216, 1223, 1228, 1232, 1239, 1242, 1244, 1248, 1250, 1252, 1254, 1258, 1265, 1273, 1279, 1281, 1283, 1288, 1294, 1296, 1300, 1301, 1303, 1306, 1308, 1313, 1315, 1318, 1320, 1323, 1327, 1330, 1332, 1335, 1337, 1342, 1345, 1347, 1349, 1353, 1355, 1358, 1362, 1365, 1366, 1368, 1370, 1375, 1378, 1379, 1381, 1383, 1386, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 1407, 1409, 1412, 1415, 1418, 1421, 1423, 1425, 1427, 1428, 1430, 1431, 1433, 1434, 1436, 1437, 1439, 1440, 1443, 1446, 1447, 1449, 1452, 1454, 1461, 1467, 1469, 1471, 1473, 1476, 1479, 1481, 1483, 1485, 1487, 1490, 1492, 1494, 1496, 1499, 1501, 1503, 1506, 1509, 1512, 1513, 1515, 1516, 1518, 1520, 1522, 1524, 1526, 1528, 1530, 1532, 1535, 1538, 1540, 1543, 1547, 1549, 1552, 1555, 1560, 1567, 1569, 1580, 1582, 1585, 1589, 1593, 1596, 1599, 1602, 1605, 1608, 1611, 1614, 1619, 1624, 1629, 1633, 1637, 1643, 1648, 1653, 1658, 1662, 1666, 1670, 1674, 1677, 1680, 1685, 1689, 1693, 1697, 1701, 1706, 1711, 1716, 1721, 1727, 1732, 1739, 1747, 1752, 1757, 1763, 1766, 1770, 1774, 1778, 1781, 1785, 1789, 1793, 1797, 1802, 1806, 1812, 1819, 1823, 1827, 1832, 1836, 1840, 1844, 1848, 1852, 1858, 1862, 1866, 1871, 1875, 1878, 1881, 1883, 1887, 1892, 1897, 1902, 1907, 1912, 1919, 1924, 1929, 1935, 1940, 1945, 1950, 1955, 1961, 1966, 1973, 1981, 1986, 1991, 1997, 2003, 2009, 2015, 2021, 2027, 2035, 2041, 2047, 2054, 2060, 2066, 2072, 2078, 2085, 2091, 2099, 2108, 2114, 2120, 2127, 2131, 2135, 2139, 2143, 2147, 2153, 2157, 2161, 2166, 2170, 2174, 2178, 2182, 2187, 2191, 2197, 2204, 2208, 2212, 2217, 2221, 2225, 2229, 2233, 2237, 2243, 2247, 2251, 2256, 2261, 2266, 2270, 2276, 2281, 2286, 2289, 2293, 2300, 2307, 2309, 2311, 2313, 2316, 2319, 2322, 2326, 2330, 2333, 2346, 2349, 2352, 2354, 2358, 2363, 2366, 2367, 2371, 2373, 2375, 2378, 2381, 2384, 2387, 2390, 2395, 2400, 2405, 2409, 2414, 2420, 2428, 2437, 2444, 2453, 2463, 2470, 2477, 2485, 2496, 2508, 2521, 2531, 2537, 2543, 2550, 2554, 2560, 2566, 2572, 2579, 2585, 2590, 2600, 2611, 2623, 2633, 2640, 2647, 2654, 2661, 2668, 2675, 2682, 2689, 2696, 2704, 2712, 2715, 2720, 2725, 2730, 2735, 2741, 2746, 2751, 2757, 2763, 2767, 2772, 2777, 2782, 2789, 2797, 2806, 2816, 2823, 2834, 2846, 2859, 2869, 2873, 2876, 2880, 2886, 2893, 2901, 2906, 2910, 2914, 2921, 2928, 2935, 2943, 2950, 2958, 2963, 2968, 2975, 2985, 2990, 2994, 3001, 3009, 3017, 3020, 3024, 3028, 3032, 3037, 3040, 3043, 3048, 3056, 3067, 3071, 3073, 3077, 3080, 3083, 3086, 3089, 3093, 3099, 3104, 3110, 3113, 3121, 3125, 3128, 3131, 3135, 3138, 3141, 3144, 3148, 3151, 3155, 3160, 3164, 3168, 3174, 3181, 3186, 3189, 3193, 3196, 3199, 3204, 3208, 3212, 3215, 3219, 3221, 3224, 3226, 3229, 3232, 3235, 3237, 3239, 3241, 3243, 3246, 3248, 3251, 3254, 3256, 3259, 3262, 3264, 3267, 3269, 3271, 3273, 3275, 3277, 3279, 3281, 3283, 3284, 3286, 3289, 3292, 3295, 3299, 3305, 3313, 3321, 3328, 3335, 3342, 3349, 3355, 3362, 3369, 3376, 3383, 3390, 3397, 3404, 3415, 3423, 3431, 3439, 3449, 3459, 3470, 3483, 3496, 3499, 3502, 3506, 3511, 3516, 3521, 3524, 3529, 3534, 3536, 3538, 3540, 3542, 3544, 3546, 3548, 3550, 3553, 3555, 3557, 3559, 3563, 3567, 3572, 3579, 3590, 3598, 3606, 3612, 3617, 3624, 3635, 3643, 3651, 3657, 3660, 3663, 3667, 3672, 3678, 3684, 3690, 3694, 3699, 3705, 3711, 3717, 3723, 3726, 3730, 3734, 3740, 3744, 3748, 3752, 3757, 3763, 3769, 3775, 3781, 3785, 3790, 3796, 3802, 3805, 3808, 3812, 3818, 3825, 3832, 3836, 3840, 3847, 3853, 3859, 3862, 3866, 3872, 3879, 3883, 3886, 3889, 3893, 3896, 3900, 3903, 3907, 3913, 3920, 3923, 3926, 3929, 3931, 3936, 3941, 3943, 3946, 3949, 3952, 3955, 3958, 3961, 3964, 3968, 3971, 3975, 3978, 3982, 3984, 3986, 3988, 3990, 3992, 3993, 3996, 3997, 4000, 4001, 4003, 4004, 4005, 4007, 4009, 4011, 4013, 4015, 4023, 4032, 4035, 4040, 4043, 4048, 4055, 4058, 4060, 4062, 4066, 4070, 4072, 4076, 4081, 4084, 4086, 4090, 4094, 4099, 4103, 4107, 4111, 4113, 4115, 4117, 4119, 4121, 4123, 4125, 4127, 4129, 4131, 4133, 4135, 4137, 4139, 4142, 4143, 4144, 4147, 4149, 4153, 4155, 4159, 4161, 4164, 4167, 4169, 4173, 4174, 4175, 4178, 4181, 4183, 4187, 4193, 4195, 4198, 4201, 4204, 4206, 4208, 4210, 4212, 4217, 4220, 4224, 4228, 4231, 4235, 4238, 4241, 4244, 4248, 4252, 4256, 4259, 4263, 4265, 4269, 4273, 4275, 4278, 4281, 4284, 4287, 4289, 4291, 4293, 4295, 4298, 4301, 4305, 4309, 4311, 4314, 4318, 4322, 4324, 4327, 4329, 4331, 4333, 4335, 4337, 4340, 4343, 4348, 4350, 4353, 4356, 4359, 4363, 4365, 4367, 4369, 4372, 4375, 4378, 4381, 4384, 4388, 4392, 4396, 4400, 4404, 4408, 4412, 4414, 4417, 4420, 4423, 4427, 4430, 4434, 4438, 4441, 4444, 4447, 4450, 4453, 4456, 4459, 4462, 4465, 4468, 4471, 4474, 4477, 4480, 4484, 4488, 4492, 4495, 4498, 4501, 4504, 4507, 4510, 4513, 4516, 4519, 4522, 4525, 4528, 4532, 4536, 4540, 4545, 4548, 4550, 4552, 4554, 4556, 4557, 4563, 4565, 4572, 4576, 4578, 4581, 4584, 4588, 4591, 4595, 4599, 4602, 4605, 4608, 4611, 4614, 4617, 4621, 4624, 4627, 4631, 4633, 4637, 4642, 4644, 4647, 4653, 4660, 4667, 4670, 4672, 4675, 4678, 4684, 4691 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { 346, 0, -1, 96, 348, -1, 20, 379, -1, 44, 381, -1, 41, 66, 5, -1, 46, 386, -1, 59, -1, 64, -1, 65, 388, -1, 67, 277, 5, -1, 68, 393, -1, 69, 395, -1, 77, 396, -1, 84, 403, -1, 86, 405, -1, 87, 406, -1, 95, 349, -1, 123, 407, -1, 134, 408, -1, 138, 451, -1, 141, 454, -1, 146, -1, 147, 349, -1, 153, 460, -1, 160, 16, 4, -1, 173, 463, -1, 176, 481, -1, 177, 482, -1, 178, 483, -1, 181, 499, 484, -1, 182, 518, -1, 194, 66, 5, -1, 209, 519, -1, 210, 520, -1, 211, 523, -1, 231, 88, -1, 223, 524, -1, 237, -1, 234, 499, 526, -1, 239, 531, -1, 241, 532, -1, 246, 534, -1, 259, -1, 264, 549, -1, 280, 4, -1, 281, 374, -1, 292, -1, 294, 551, -1, 300, -1, 303, 553, -1, 304, 554, -1, 334, 558, -1, 340, 559, -1, 3, -1, 4, -1, 206, -1, 205, -1, 29, 349, -1, 189, 349, -1, 212, 349, -1, 214, 349, -1, 304, 349, -1, 44, 349, -1, 46, 349, -1, 76, 349, -1, 84, 349, -1, 139, 349, -1, 239, 349, -1, 4, -1, 337, -1, 341, -1, 206, -1, 288, -1, 199, -1, 342, -1, 205, -1, 118, -1, -1, 240, 38, -1, 130, 38, -1, 240, -1, 130, -1, -1, 352, -1, 347, -1, 7, -1, 8, -1, 9, -1, 10, -1, 11, -1, 353, 353, -1, 354, 355, -1, 355, 355, -1, 347, 347, -1, 154, -1, 216, -1, 101, -1, 19, -1, 358, -1, 304, -1, 305, -1, 306, -1, 307, -1, 308, -1, 309, -1, 310, -1, 311, -1, 312, -1, 313, -1, 314, -1, 315, -1, 316, -1, 317, -1, 318, -1, 319, -1, 320, -1, 321, -1, 322, -1, 323, -1, 324, -1, 325, -1, 326, -1, 327, -1, 328, -1, 329, -1, 330, -1, 331, -1, 56, -1, 211, -1, 171, -1, 175, -1, 224, -1, 268, -1, 269, -1, 28, -1, 260, -1, 148, -1, 30, -1, 248, -1, 243, -1, 94, -1, 161, -1, -1, 125, -1, 126, -1, 35, -1, 127, -1, 162, -1, 151, -1, 132, -1, 273, -1, 106, -1, 145, -1, -1, 97, -1, 254, -1, -1, 97, -1, 24, -1, 25, -1, 347, -1, 185, -1, 339, -1, 338, -1, 295, -1, -1, 258, -1, 163, -1, -1, 17, -1, 156, -1, -1, 154, -1, 182, -1, -1, 62, -1, 48, -1, 102, -1, 85, -1, 343, -1, 27, -1, 51, -1, -1, 4, -1, 82, -1, 149, -1, 218, -1, 219, -1, 232, -1, 271, -1, -1, 32, -1, 274, -1, -1, 195, -1, 42, -1, 43, -1, 168, -1, 169, -1, 298, 378, -1, 47, 375, -1, 74, 376, -1, 147, 377, -1, 184, 529, -1, 37, 530, -1, 247, 347, -1, 226, -1, 282, 347, -1, 349, -1, 66, 5, -1, 349, -1, 66, 5, -1, 349, -1, 66, 5, -1, 347, 347, -1, 220, 347, 347, 347, 347, 347, -1, 40, 347, 347, -1, 191, 347, 347, -1, 110, 347, 347, -1, 237, -1, 255, 380, -1, 62, 347, 347, -1, 108, 347, 347, -1, 48, 347, 347, -1, 222, 347, 347, -1, 220, 347, 347, -1, 299, 347, 347, -1, 22, 347, 347, -1, 109, 347, 347, -1, 49, 347, 347, -1, 12, 382, -1, 71, 5, 5, 5, -1, 100, 4, -1, 117, 383, -1, 131, 384, -1, 53, 261, 4, -1, 285, 385, -1, 120, 5, -1, 59, -1, 347, 347, -1, 347, -1, 347, 347, -1, 347, 12, 347, 347, -1, 347, 347, 12, 347, 347, -1, 285, 347, -1, 285, 347, 347, -1, 285, 347, 12, 347, 347, -1, 285, 347, 347, 12, 347, 347, -1, 32, -1, 274, -1, 121, -1, 347, 347, 12, 59, 5, 5, 5, -1, 347, 347, 4, 347, 347, 12, 59, 5, 5, 5, 5, -1, 347, 347, 12, 347, 347, 5, 5, 5, -1, 347, 347, 4, 347, 347, 12, 347, 347, 5, 5, 5, 5, -1, 347, -1, 347, 347, -1, 285, 387, -1, 121, -1, 347, -1, 347, 347, -1, 250, 389, -1, 190, 390, -1, 185, 391, -1, 295, 347, 347, -1, 339, 392, -1, 226, 349, -1, 135, -1, 174, -1, 347, -1, 185, -1, 339, -1, 338, -1, 295, -1, 4, 361, -1, 190, 361, -1, 243, 4, -1, 347, 4, 4, -1, 78, 347, -1, 243, 4, -1, 170, 4, -1, 4, 347, 347, 4, 6, 4, -1, 239, 347, 347, 347, 347, 347, 347, 4, 6, 4, -1, 40, -1, 191, 394, -1, 110, -1, 4, 347, 347, 4, 6, 4, -1, 239, 347, 347, 347, 347, 347, 347, 4, 6, 4, -1, 360, -1, 175, 347, -1, 83, 397, -1, 99, 398, -1, 173, 399, -1, 213, 401, -1, 246, 402, -1, 5, 4, 4, 400, 4, 4, 360, 347, 365, 347, 347, 5, -1, 222, -1, -1, 31, -1, 5, -1, 5, 5, 4, 349, -1, 5, 4, 349, 5, 357, 362, -1, 264, -1, 46, -1, 5, -1, 5, 5, 4, 349, -1, 5, 357, 362, -1, 31, 5, 357, 362, -1, -1, 347, 347, 347, 347, 357, 362, -1, 59, 356, 357, 362, 347, 347, 357, 364, -1, 281, 404, -1, 40, 347, 347, -1, 191, 347, 347, -1, 110, 347, 347, -1, -1, 347, 347, 357, -1, 40, 347, 347, 4, -1, 191, 347, 347, 4, -1, 110, 347, 347, 4, -1, 359, 347, 347, -1, 357, 362, 356, -1, 349, -1, 303, 347, 347, -1, 40, 191, 359, 347, 347, -1, 191, 359, 347, 347, -1, 40, 191, 357, 356, -1, 191, 357, 356, -1, 33, 4, -1, 141, 116, 5, -1, 41, 66, -1, 44, 409, -1, 46, 411, -1, 65, 412, -1, 68, 417, -1, 67, 416, -1, 69, 419, -1, 77, 421, -1, 79, 424, -1, 84, 425, -1, 86, 426, -1, 88, 428, -1, 87, 427, -1, 93, 429, -1, 95, -1, 122, 433, -1, 138, 439, -1, 149, 5, 5, 4, -1, 150, 89, 5, 5, 347, 347, 359, -1, 153, 431, -1, 157, 430, -1, 160, 16, -1, 185, -1, 181, 499, 493, -1, 182, 440, -1, 194, 66, -1, 209, -1, 210, 441, -1, 217, 276, 359, 347, 347, 4, 4, 5, -1, 239, 442, -1, 241, -1, 264, 443, -1, 280, -1, 281, 444, -1, 289, -1, 296, 359, 347, 347, -1, 302, 89, 5, 5, 347, 347, 359, -1, 304, 449, -1, 340, -1, 100, -1, 117, -1, 131, -1, 53, 261, -1, 88, -1, 120, -1, 71, 410, -1, 172, -1, -1, 185, 5, -1, 103, 5, -1, 117, -1, 413, -1, 250, -1, 190, -1, 185, 414, -1, 295, 167, -1, 339, 415, -1, 226, -1, -1, 347, -1, 185, -1, 339, -1, 338, -1, 295, -1, 190, -1, 243, -1, 78, -1, 243, -1, 170, -1, -1, 277, -1, 167, 418, -1, 4, -1, 4, 359, 347, 347, -1, 4, 347, 347, 360, 347, -1, -1, 167, 420, -1, 175, -1, 4, 347, 347, 360, 347, -1, 357, 362, -1, 65, 422, -1, 66, -1, 91, -1, 167, -1, 203, 167, -1, 184, -1, 69, 423, -1, 264, -1, 333, -1, -1, 190, -1, -1, 175, -1, 347, 347, 357, 362, 363, -1, 359, 347, 347, 357, 362, 363, -1, 347, 357, 357, 4, -1, 357, 362, 363, -1, 59, 357, 362, 363, 357, 364, -1, 281, 357, -1, 359, -1, 357, 362, 363, -1, 272, -1, 33, -1, 359, -1, 357, 362, 363, -1, 357, 362, 356, 347, 347, 5, -1, 4, 357, 362, 356, 347, 347, 5, -1, 359, 347, 347, 4, 4, -1, 5, -1, 65, -1, 359, 347, 347, 5, -1, 6, 4, 4, 4, 4, -1, 88, -1, 119, 193, 432, -1, -1, 4, -1, 347, 347, -1, 196, -1, 59, 357, 362, 363, -1, 81, -1, 100, 436, -1, 45, -1, 116, 434, -1, 119, 193, 437, -1, 143, 435, -1, 144, -1, 204, 193, -1, 261, -1, 261, 357, 362, 364, -1, 262, 438, -1, 333, -1, 4, -1, 359, 347, 347, -1, 4, -1, 164, 5, -1, 4, 164, 5, -1, 304, 4, -1, -1, 4, -1, 350, -1, 350, 359, 347, 347, -1, 350, 4, -1, -1, 4, -1, 357, -1, 4, 357, -1, -1, 208, -1, 297, -1, 66, -1, 180, -1, 284, -1, 226, -1, 61, -1, 275, -1, 298, -1, 131, -1, 233, -1, 298, 448, -1, 47, 445, -1, 74, 446, -1, 147, 447, -1, 184, -1, 37, -1, 247, -1, -1, 66, -1, -1, 66, -1, -1, 66, -1, -1, 220, -1, -1, 16, 450, -1, 193, 358, -1, -1, 221, -1, 83, 452, -1, 99, -1, 357, 362, 363, 453, 5, 5, -1, 357, 362, 363, 453, 5, -1, 20, -1, 229, -1, 19, -1, 44, 455, -1, 77, 456, -1, 84, -1, 94, -1, 95, -1, 101, -1, 122, 457, -1, 138, -1, 153, -1, 161, -1, 181, 458, -1, 216, -1, 264, -1, 275, 357, -1, 304, 459, -1, 72, 5, -1, -1, 31, -1, -1, 44, -1, 87, -1, 189, -1, 147, -1, 252, -1, 213, -1, 290, -1, 357, -1, 114, 357, -1, 58, 357, -1, 18, -1, 281, 357, -1, 197, 4, 4, -1, 115, -1, 183, 5, -1, 88, 462, -1, 253, 119, 193, 461, -1, 253, 6, 4, 4, 4, 4, -1, 294, -1, 304, 347, 347, 347, 347, 347, 347, 347, 347, 4, -1, 5, -1, 5, 4, -1, 4, 4, 56, -1, 4, 4, 357, -1, 190, 349, -1, 26, 464, -1, 111, 466, -1, 122, 467, -1, 156, 480, -1, 202, 478, -1, 215, 479, -1, 5, 14, 5, 368, -1, 5, 15, 5, 368, -1, 5, 61, 5, 368, -1, 5, 187, 368, -1, 5, 188, 368, -1, 5, 256, 366, 4, 368, -1, 5, 265, 4, 368, -1, 5, 266, 4, 368, -1, 5, 297, 5, 368, -1, 239, 87, 465, -1, 5, 14, 5, -1, 5, 15, 5, -1, 5, 61, 5, -1, 5, 187, -1, 5, 188, -1, 5, 256, 366, 4, -1, 5, 265, 4, -1, 5, 266, 4, -1, 5, 297, 5, -1, 5, 5, 263, -1, 5, 14, 5, 368, -1, 5, 15, 5, 368, -1, 5, 61, 5, 368, -1, 5, 187, 367, 368, -1, 5, 5, 263, 367, 368, -1, 5, 188, 367, 368, -1, 5, 256, 366, 4, 367, 368, -1, 5, 270, 366, 4, 4, 367, 368, -1, 5, 265, 4, 368, -1, 5, 266, 4, 368, -1, 5, 297, 5, 367, 368, -1, 262, 468, -1, 116, 87, 469, -1, 239, 154, 477, -1, 239, 87, 476, -1, 189, 470, -1, 5, 14, 5, -1, 5, 15, 5, -1, 5, 61, 5, -1, 5, 187, 367, -1, 5, 5, 263, 367, -1, 5, 188, 367, -1, 5, 256, 366, 4, 367, -1, 5, 270, 366, 4, 4, 367, -1, 5, 265, 4, -1, 5, 266, 4, -1, 5, 297, 5, 367, -1, 5, 14, 5, -1, 5, 15, 5, -1, 5, 61, 5, -1, 5, 187, 367, -1, 5, 188, 367, -1, 5, 256, 366, 4, 367, -1, 5, 265, 4, -1, 5, 266, 4, -1, 5, 297, 5, 367, -1, 154, 160, 471, -1, 160, 472, -1, 154, 473, -1, 474, -1, 154, 332, 475, -1, 5, 14, 5, 368, -1, 5, 15, 5, 368, -1, 5, 61, 5, 368, -1, 5, 187, 367, 368, -1, 5, 188, 367, 368, -1, 5, 256, 366, 4, 367, 368, -1, 5, 265, 4, 368, -1, 5, 266, 4, 368, -1, 5, 297, 5, 367, 368, -1, 5, 14, 5, 368, -1, 5, 15, 5, 368, -1, 5, 61, 5, 368, -1, 5, 187, 367, 368, -1, 5, 5, 263, 367, 368, -1, 5, 188, 367, 368, -1, 5, 256, 366, 4, 367, 368, -1, 5, 270, 366, 4, 4, 367, 368, -1, 5, 265, 4, 368, -1, 5, 266, 4, 368, -1, 5, 297, 5, 367, 368, -1, 358, 5, 14, 5, 368, -1, 358, 5, 15, 5, 368, -1, 358, 5, 61, 5, 368, -1, 358, 5, 187, 367, 368, -1, 358, 5, 188, 367, 368, -1, 358, 5, 256, 366, 4, 367, 368, -1, 358, 5, 265, 4, 368, -1, 358, 5, 266, 4, 368, -1, 358, 5, 297, 5, 367, 368, -1, 358, 5, 14, 5, 368, -1, 358, 5, 15, 5, 368, -1, 358, 5, 61, 5, 368, -1, 358, 5, 187, 367, 368, -1, 358, 5, 5, 263, 367, 368, -1, 358, 5, 188, 367, 368, -1, 358, 5, 256, 366, 4, 367, 368, -1, 358, 5, 270, 366, 4, 4, 367, 368, -1, 358, 5, 265, 4, 368, -1, 358, 5, 266, 4, 368, -1, 358, 5, 297, 5, 367, 368, -1, 5, 14, 5, -1, 5, 15, 5, -1, 5, 61, 5, -1, 5, 187, 367, -1, 5, 188, 367, -1, 5, 256, 366, 4, 367, -1, 5, 265, 4, -1, 5, 266, 4, -1, 5, 297, 5, 367, -1, 5, 14, 5, -1, 5, 15, 5, -1, 5, 61, 5, -1, 5, 187, 367, -1, 5, 5, 263, 367, -1, 5, 188, 367, -1, 5, 256, 366, 4, 367, -1, 5, 270, 366, 4, 4, 367, -1, 5, 265, 4, -1, 5, 266, 4, -1, 5, 297, 5, 367, -1, 5, 14, 5, -1, 5, 15, 5, -1, 5, 61, 5, -1, 5, 187, 367, -1, 5, 188, 367, -1, 5, 256, 366, 4, 367, -1, 5, 265, 4, -1, 5, 266, 4, -1, 5, 297, 5, 367, -1, 5, 14, 5, 368, -1, 5, 61, 5, 368, -1, 5, 187, 368, -1, 5, 256, 366, 4, 368, -1, 5, 265, 4, 368, -1, 5, 297, 5, 368, -1, 5, 5, -1, 262, 5, 5, -1, 93, 4, 4, 4, 4, 4, -1, 185, 4, 4, 4, 4, 4, -1, 110, -1, 225, -1, 349, -1, 136, 349, -1, 88, 349, -1, 66, 5, -1, 5, 4, 4, -1, 294, 347, 347, -1, 340, 347, -1, 5, 5, 358, 362, 5, 5, 358, 362, 347, 358, 364, 5, -1, 60, 487, -1, 66, 5, -1, 80, -1, 73, 492, 5, -1, 73, 492, 297, 5, -1, 75, 99, -1, -1, 83, 485, 488, -1, 89, -1, 99, -1, 99, 17, -1, 105, 491, -1, 113, 4, -1, 128, 5, -1, 147, 17, -1, 147, 207, 347, 347, -1, 147, 286, 347, 347, -1, 4, 20, 371, 349, -1, 4, 21, 352, -1, 4, 21, 352, 359, -1, 4, 21, 352, 357, 362, -1, 4, 22, 233, 347, 347, 4, 359, -1, 4, 22, 233, 347, 347, 4, 357, 364, -1, 4, 22, 233, 5, 357, 364, -1, 4, 49, 233, 347, 347, 347, 4, 359, -1, 4, 49, 233, 347, 347, 347, 4, 357, 364, -1, 4, 49, 233, 5, 357, 364, -1, 4, 48, 233, 347, 347, 359, -1, 4, 48, 233, 347, 347, 357, 364, -1, 4, 52, 105, 352, 352, 4, 347, 347, 347, 4, -1, 4, 52, 105, 352, 352, 4, 347, 347, 347, 4, 359, -1, 4, 52, 105, 352, 352, 4, 347, 347, 347, 4, 357, 362, -1, 4, 52, 105, 5, 5, 357, 362, 357, 364, -1, 4, 55, 486, 5, 5, -1, 4, 62, 233, 347, 359, -1, 4, 62, 233, 347, 357, 364, -1, 4, 66, 5, -1, 4, 74, 27, 349, 349, -1, 4, 74, 165, 5, 5, -1, 4, 74, 233, 347, 359, -1, 4, 74, 233, 347, 357, 364, -1, 4, 74, 275, 357, 362, -1, 4, 75, 135, 349, -1, 4, 82, 105, 352, 352, 4, 347, 347, 4, -1, 4, 82, 105, 352, 352, 4, 347, 347, 4, 359, -1, 4, 82, 105, 352, 352, 4, 347, 347, 4, 357, 362, -1, 4, 82, 105, 5, 5, 357, 362, 357, 364, -1, 4, 83, 22, 233, 347, 347, -1, 4, 83, 49, 233, 347, 347, -1, 4, 83, 52, 21, 347, 347, -1, 4, 83, 52, 233, 347, 347, -1, 4, 83, 109, 233, 347, 347, -1, 4, 83, 112, 21, 347, 347, -1, 4, 83, 112, 233, 347, 347, -1, 4, 83, 82, 21, 347, 347, -1, 4, 83, 82, 233, 347, 347, -1, 4, 83, 222, 301, 4, 347, 347, -1, 4, 83, 251, 301, 4, 347, 347, -1, 4, 99, -1, 4, 99, 22, 4, -1, 4, 99, 49, 4, -1, 4, 99, 52, 4, -1, 4, 99, 109, 4, -1, 4, 99, 55, 486, 5, -1, 4, 99, 112, 4, -1, 4, 99, 82, 4, -1, 4, 99, 222, 301, 4, -1, 4, 99, 251, 301, 4, -1, 4, 99, 277, -1, 4, 99, 277, 5, -1, 4, 99, 277, 4, -1, 4, 105, 40, 4, -1, 4, 108, 233, 347, 347, 359, -1, 4, 108, 233, 347, 347, 357, 364, -1, 4, 109, 233, 347, 347, 347, 4, 359, -1, 4, 109, 233, 347, 347, 347, 4, 357, 364, -1, 4, 109, 233, 5, 357, 364, -1, 4, 112, 105, 352, 352, 4, 347, 347, 347, 4, -1, 4, 112, 105, 352, 352, 4, 347, 347, 347, 4, 359, -1, 4, 112, 105, 352, 352, 4, 347, 347, 347, 4, 357, 362, -1, 4, 112, 105, 5, 5, 357, 362, 357, 364, -1, 4, 128, 5, -1, 4, 147, -1, 4, 147, 207, -1, 4, 170, 27, 349, 349, -1, 4, 170, 220, 359, 356, 356, -1, 4, 170, 220, 357, 362, 356, 356, -1, 4, 192, 347, 347, -1, 4, 192, 129, -1, 4, 192, 36, -1, 4, 192, 285, 359, 347, 347, -1, 4, 192, 285, 357, 362, 356, -1, 4, 222, 237, 347, 347, 359, -1, 4, 222, 237, 347, 347, 357, 364, -1, 4, 251, 237, 347, 347, 359, -1, 4, 251, 237, 347, 347, 357, 364, -1, 4, 220, 255, 369, -1, 4, 220, 261, 4, -1, 4, 227, 359, 356, 356, 347, -1, 4, 227, 357, 362, 356, 356, 347, 357, 364, -1, 4, 228, 505, 349, -1, 4, 241, 40, -1, 4, 242, 220, 359, 356, 356, -1, 4, 242, 220, 357, 362, 356, 356, -1, 4, 242, 275, 357, 362, 357, 364, -1, 4, 252, -1, 4, 252, 207, -1, 4, 277, 5, -1, 4, 279, 5, -1, 4, 279, 241, 349, -1, 4, 291, -1, 4, 293, -1, 4, 299, 27, 349, -1, 4, 299, 220, 359, 356, 347, 352, -1, 4, 299, 220, 357, 362, 356, 357, 364, 347, 352, -1, 4, 333, 4, -1, 163, -1, 163, 347, 347, -1, 172, 500, -1, 173, 501, -1, 192, 502, -1, 226, 349, -1, 228, 505, 349, -1, 228, 505, 349, 347, 347, -1, 241, 40, 347, 347, -1, 241, 191, 347, 347, 4, -1, 241, 110, -1, 246, 5, 492, 357, 362, 363, 349, -1, 246, 278, 5, -1, 252, 509, -1, 259, 510, -1, 5, 66, 5, -1, 5, 80, -1, 5, 99, -1, 5, 89, -1, 5, 128, 5, -1, 5, 147, -1, 5, 147, 207, -1, 5, 192, 347, 347, -1, 5, 192, 129, -1, 5, 192, 36, -1, 5, 192, 285, 359, 356, -1, 5, 192, 285, 357, 362, 356, -1, 5, 228, 505, 349, -1, 5, 252, -1, 5, 252, 207, -1, 5, 291, -1, 5, 293, -1, 277, 105, 5, 5, -1, 277, 99, 5, -1, 277, 99, 17, -1, 277, 5, -1, 277, 294, 5, -1, 213, -1, 213, 357, -1, 290, -1, 291, 17, -1, 293, 17, -1, 333, 4, -1, 252, -1, 293, -1, 147, -1, 291, -1, 40, 192, -1, 192, -1, 110, 192, -1, 40, 105, -1, 105, -1, 110, 105, -1, 40, 241, -1, 241, -1, 110, 241, -1, 99, -1, 279, -1, 66, -1, 333, -1, 228, -1, 128, -1, 163, -1, 294, -1, -1, 4, -1, 30, 349, -1, 233, 347, -1, 159, 4, -1, 208, 4, 347, -1, 62, 347, 347, 347, 506, -1, 108, 347, 347, 347, 347, 351, 506, -1, 48, 347, 347, 347, 347, 351, 506, -1, 222, 347, 347, 347, 347, 506, -1, 251, 347, 347, 347, 347, 506, -1, 170, 347, 347, 347, 347, 506, -1, 299, 347, 347, 347, 347, 506, -1, 279, 347, 347, 351, 506, -1, 62, 220, 347, 347, 370, 506, -1, 48, 220, 347, 347, 370, 506, -1, 102, 220, 347, 347, 370, 506, -1, 85, 220, 347, 347, 370, 506, -1, 343, 220, 347, 347, 370, 506, -1, 27, 220, 347, 347, 370, 506, -1, 51, 220, 347, 347, 370, 506, -1, 242, 347, 347, 347, 347, 357, 362, 357, 364, 506, -1, 74, 347, 347, 347, 357, 362, 506, -1, 227, 347, 347, 347, 347, 347, 506, -1, 22, 347, 347, 347, 347, 4, 506, -1, 109, 347, 347, 347, 347, 347, 4, 351, 506, -1, 49, 347, 347, 347, 347, 347, 4, 351, 506, -1, 82, 347, 347, 352, 352, 4, 347, 347, 4, 506, -1, 112, 347, 347, 352, 352, 4, 347, 347, 347, 4, 351, 506, -1, 52, 347, 347, 352, 352, 4, 347, 347, 347, 4, 351, 506, -1, 75, 506, -1, 278, 489, -1, 5, 347, 347, -1, 297, 5, 347, 347, -1, 347, 347, 297, 5, -1, 5, 357, 362, 356, -1, 4, 4, -1, 40, 347, 347, 4, -1, 191, 347, 347, 4, -1, 110, -1, 104, -1, 335, -1, 63, -1, 245, -1, 244, -1, 230, -1, 336, -1, 60, 494, -1, 66, -1, 128, -1, 113, -1, 140, 347, 347, -1, 152, 347, 347, -1, 146, 20, 82, 357, -1, 146, 20, 149, 5, 5, 4, -1, 146, 20, 218, 5, 5, 5, 5, 357, 362, 372, -1, 146, 20, 219, 5, 5, 357, 372, -1, 146, 20, 232, 5, 5, 5, 357, -1, 146, 20, 271, 357, 362, -1, 4, 20, 82, 357, -1, 4, 20, 149, 5, 5, 4, -1, 4, 20, 218, 5, 5, 5, 5, 357, 362, 372, -1, 4, 20, 219, 5, 5, 357, 372, -1, 4, 20, 232, 5, 5, 5, 357, -1, 4, 20, 271, 357, 362, -1, 152, 17, -1, 4, 21, -1, 4, 21, 359, -1, 4, 21, 357, 362, -1, 4, 22, 233, 357, 364, -1, 4, 49, 233, 357, 364, -1, 4, 48, 233, 357, 364, -1, 4, 52, 21, -1, 4, 52, 21, 359, -1, 4, 52, 21, 357, 362, -1, 4, 52, 233, 357, 364, -1, 4, 59, 357, 362, 363, -1, 4, 62, 233, 357, 364, -1, 4, 66, -1, 4, 74, 27, -1, 4, 74, 165, -1, 4, 74, 233, 357, 364, -1, 4, 74, 275, -1, 4, 75, 135, -1, 4, 82, 21, -1, 4, 82, 21, 359, -1, 4, 82, 21, 357, 362, -1, 4, 82, 233, 357, 364, -1, 4, 108, 233, 357, 364, -1, 4, 109, 233, 357, 364, -1, 4, 112, 21, -1, 4, 112, 21, 359, -1, 4, 112, 21, 357, 362, -1, 4, 112, 233, 357, 364, -1, 4, 128, -1, 4, 147, -1, 4, 170, 27, -1, 4, 170, 166, 357, 364, -1, 4, 170, 220, 357, 362, 363, -1, 4, 179, 166, 347, 357, 364, -1, 4, 220, 255, -1, 4, 220, 261, -1, 4, 227, 220, 357, 362, 363, -1, 4, 227, 166, 357, 364, -1, 4, 227, 283, 357, 364, -1, 4, 228, -1, 4, 228, 505, -1, 4, 242, 166, 357, 364, -1, 4, 242, 220, 357, 362, 363, -1, 4, 242, 275, -1, 4, 252, -1, 4, 277, -1, 4, 277, 4, -1, 4, 279, -1, 4, 279, 241, -1, 4, 289, -1, 4, 299, 27, -1, 4, 299, 166, 357, 364, -1, 4, 299, 220, 357, 362, 363, -1, 4, 333, -1, 147, 495, -1, 147, 203, -1, 203, -1, 222, 251, 347, 347, -1, 251, 251, 347, 347, -1, 226, -1, 228, 505, -1, 252, 496, -1, 252, 203, -1, 259, 497, -1, 5, 66, -1, 5, 128, -1, 5, 152, -1, 5, 228, 505, -1, 5, 277, -1, 5, 277, 203, -1, 277, 17, -1, 277, 98, 193, -1, 333, -1, 30, -1, 233, -1, 159, -1, 208, -1, -1, 347, 347, -1, -1, 347, 347, -1, -1, 279, -1, -1, -1, 221, -1, 234, -1, 295, -1, 57, -1, 20, -1, 492, 357, 362, 363, 349, 507, 513, -1, 252, 492, 357, 362, 363, 349, 507, 513, -1, 492, 5, -1, 492, 5, 357, 362, -1, 492, 4, -1, 492, 4, 357, 362, -1, 122, 5, 5, 490, 4, 5, -1, 347, 347, -1, 129, -1, 36, -1, 40, 347, 347, -1, 191, 347, 347, -1, 110, -1, 285, 359, 356, -1, 285, 357, 362, 356, -1, 503, 504, -1, 504, -1, 505, 344, 349, -1, 66, 344, 5, -1, 92, 344, 4, 4, -1, 333, 344, 4, -1, 128, 344, 5, -1, 279, 344, 5, -1, 516, -1, 517, -1, 200, -1, 252, -1, 147, -1, 91, -1, 124, -1, 105, -1, 192, -1, 241, -1, 99, -1, 155, -1, 267, -1, 498, -1, 498, 503, -1, -1, -1, 508, 511, -1, 17, -1, 207, 347, 347, -1, 286, -1, 286, 347, 347, -1, 349, -1, 279, 349, -1, 511, 512, -1, 512, -1, 505, 344, 349, -1, -1, -1, 514, 515, -1, 515, 516, -1, 516, -1, 277, 344, 5, -1, 55, 344, 486, 5, 5, -1, 64, -1, 66, 5, -1, 180, 4, -1, 284, 347, -1, 343, -1, 341, -1, 336, -1, 200, -1, 347, 347, 347, 347, -1, 347, 347, -1, 359, 347, 347, -1, 357, 362, 356, -1, 285, 521, -1, 39, 347, 347, -1, 191, 522, -1, 226, 349, -1, 347, 347, -1, 359, 347, 347, -1, 357, 362, 356, -1, 40, 347, 347, -1, 347, 347, -1, 110, 347, 347, -1, 349, -1, 304, 358, 362, -1, 5, 4, 4, -1, 294, -1, 70, 525, -1, 167, 4, -1, 238, 4, -1, 247, 347, -1, 54, -1, 137, -1, 239, -1, 90, -1, 147, 527, -1, 252, 528, -1, 40, 347, 347, -1, 191, 347, 347, -1, 110, -1, 257, 110, -1, 40, 347, 347, -1, 191, 347, 347, -1, 110, -1, 257, 110, -1, 186, -1, 13, -1, 200, -1, 34, -1, 107, -1, 61, 5, -1, 275, 357, -1, 298, 4, 4, 4, -1, 347, -1, 347, 97, -1, 191, 533, -1, 285, 347, -1, 285, 347, 97, -1, 40, -1, 347, -1, 110, -1, 26, 535, -1, 122, 537, -1, 202, 547, -1, 111, 548, -1, 215, 5, -1, 119, 5, 373, -1, 61, 5, 373, -1, 265, 4, 373, -1, 239, 87, 536, -1, 119, 5, 373, -1, 61, 5, 373, -1, 265, 4, 373, -1, 538, -1, 154, 538, -1, 276, 539, -1, 262, 540, -1, 116, 87, 541, -1, 189, 542, -1, 239, 154, 544, -1, 239, 87, 545, -1, 236, 546, -1, 119, 5, -1, 61, 5, -1, 265, 4, -1, 119, 5, -1, 61, 5, -1, 265, 4, -1, 119, 5, -1, 61, 5, -1, 265, 4, -1, 119, 5, -1, 61, 5, -1, 265, 4, -1, 154, 543, -1, 119, 5, 4, -1, 61, 5, 4, -1, 265, 4, 4, -1, 119, 5, -1, 61, 5, -1, 265, 4, -1, 119, 5, -1, 61, 5, -1, 265, 4, -1, 119, 5, -1, 61, 5, -1, 265, 4, -1, 119, 5, -1, 61, 5, -1, 265, 4, -1, 119, 5, 373, -1, 61, 5, 373, -1, 265, 4, 373, -1, 119, 5, 5, 373, -1, 550, 4, -1, 99, -1, 50, -1, 133, -1, 287, -1, -1, 4, 347, 347, 347, 347, -1, 201, -1, 201, 4, 347, 347, 347, 347, -1, 122, 262, 552, -1, 4, -1, 347, 357, -1, 4, 4, -1, 4, 347, 357, -1, 347, 347, -1, 285, 347, 347, -1, 358, 362, 363, -1, 16, 557, -1, 237, 4, -1, 235, 556, -1, 23, 555, -1, 4, 4, -1, 4, 5, -1, 279, 4, 5, -1, 4, 4, -1, 4, 5, -1, 279, 4, 5, -1, 4, -1, 4, 358, 362, -1, 4, 6, 358, 362, -1, 225, -1, 347, 347, -1, 347, 347, 12, 347, 347, -1, 347, 347, 12, 359, 347, 347, -1, 347, 347, 12, 357, 362, 356, -1, 285, 560, -1, 121, -1, 121, 347, -1, 347, 347, -1, 347, 347, 12, 347, 347, -1, 347, 347, 12, 359, 347, 347, -1, 347, 347, 12, 357, 362, 356, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 445, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 499, 500, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 518, 520, 521, 522, 523, 525, 526, 527, 528, 531, 532, 533, 534, 535, 538, 539, 542, 543, 544, 547, 550, 553, 556, 568, 575, 582, 590, 591, 592, 593, 594, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 627, 628, 631, 632, 633, 634, 635, 636, 637, 638, 641, 642, 643, 644, 645, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 661, 662, 663, 666, 667, 668, 669, 672, 673, 674, 675, 676, 679, 680, 681, 684, 685, 686, 689, 690, 691, 694, 695, 696, 697, 698, 699, 700, 701, 704, 705, 708, 709, 710, 711, 712, 713, 716, 717, 718, 721, 722, 723, 724, 725, 726, 729, 730, 731, 732, 733, 734, 735, 736, 737, 741, 742, 745, 746, 749, 750, 753, 754, 756, 757, 758, 761, 762, 765, 767, 769, 771, 773, 775, 777, 779, 781, 785, 786, 787, 788, 789, 790, 791, 792, 795, 796, 799, 800, 801, 803, 805, 806, 807, 809, 813, 814, 817, 818, 820, 823, 825, 831, 832, 833, 836, 837, 838, 841, 842, 843, 844, 845, 846, 852, 853, 856, 857, 858, 859, 860, 863, 864, 865, 868, 869, 874, 879, 886, 888, 890, 891, 892, 895, 897, 900, 901, 904, 905, 906, 907, 908, 911, 913, 916, 917, 920, 921, 922, 929, 930, 933, 934, 937, 939, 943, 944, 947, 949, 950, 951, 952, 955, 956, 957, 958, 959, 962, 964, 966, 967, 969, 971, 973, 975, 979, 982, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1024, 1026, 1027, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1040, 1041, 1042, 1045, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1061, 1062, 1063, 1064, 1065, 1066, 1069, 1070, 1073, 1074, 1075, 1078, 1079, 1082, 1085, 1086, 1088, 1092, 1093, 1094, 1097, 1101, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1114, 1115, 1118, 1119, 1122, 1124, 1130, 1134, 1136, 1138, 1141, 1142, 1144, 1147, 1150, 1151, 1155, 1157, 1160, 1165, 1166, 1167, 1171, 1172, 1173, 1176, 1177, 1178, 1181, 1182, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1195, 1196, 1199, 1200, 1203, 1204, 1205, 1206, 1209, 1210, 1213, 1215, 1218, 1222, 1223, 1224, 1225, 1228, 1229, 1230, 1233, 1234, 1235, 1238, 1241, 1242, 1243, 1246, 1247, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1259, 1260, 1263, 1264, 1267, 1268, 1271, 1272, 1275, 1276, 1277, 1280, 1281, 1284, 1285, 1288, 1291, 1299, 1300, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1321, 1324, 1325, 1328, 1329, 1330, 1331, 1334, 1335, 1336, 1337, 1340, 1341, 1342, 1343, 1344, 1347, 1348, 1349, 1350, 1351, 1352, 1354, 1355, 1360, 1361, 1364, 1366, 1368, 1371, 1372, 1373, 1374, 1375, 1376, 1379, 1381, 1383, 1385, 1386, 1388, 1390, 1392, 1394, 1396, 1399, 1400, 1401, 1402, 1403, 1404, 1406, 1407, 1408, 1411, 1414, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1431, 1433, 1435, 1437, 1438, 1439, 1440, 1441, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1452, 1454, 1455, 1456, 1459, 1460, 1461, 1462, 1463, 1464, 1466, 1467, 1468, 1471, 1472, 1473, 1474, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1507, 1510, 1513, 1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1566, 1571, 1574, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1606, 1608, 1609, 1610, 1611, 1612, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1626, 1628, 1629, 1630, 1633, 1634, 1635, 1636, 1637, 1638, 1640, 1641, 1642, 1645, 1647, 1649, 1650, 1652, 1654, 1658, 1659, 1662, 1663, 1664, 1667, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1683, 1691, 1692, 1693, 1694, 1696, 1698, 1699, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1707, 1708, 1710, 1713, 1716, 1717, 1718, 1721, 1723, 1726, 1729, 1732, 1736, 1739, 1741, 1744, 1747, 1751, 1756, 1761, 1763, 1765, 1767, 1768, 1770, 1772, 1774, 1776, 1778, 1779, 1781, 1783, 1787, 1792, 1794, 1796, 1798, 1800, 1802, 1804, 1806, 1808, 1810, 1812, 1815, 1816, 1818, 1820, 1821, 1823, 1825, 1826, 1827, 1829, 1831, 1832, 1833, 1835, 1836, 1838, 1841, 1845, 1849, 1852, 1855, 1859, 1864, 1870, 1871, 1872, 1874, 1875, 1877, 1881, 1883, 1884, 1885, 1887, 1890, 1892, 1895, 1897, 1900, 1902, 1904, 1907, 1912, 1915, 1916, 1919, 1922, 1926, 1927, 1929, 1930, 1931, 1933, 1934, 1936, 1937, 1939, 1944, 1946, 1947, 1949, 1950, 1951, 1952, 1953, 1954, 1956, 1958, 1960, 1961, 1963, 1964, 1966, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1980, 1982, 1984, 1985, 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2026, 2027, 2028, 2029, 2030, 2031, 2039, 2046, 2055, 2064, 2071, 2078, 2086, 2094, 2101, 2106, 2111, 2116, 2121, 2126, 2131, 2137, 2146, 2156, 2166, 2173, 2183, 2193, 2202, 2214, 2227, 2232, 2235, 2237, 2239, 2244, 2248, 2251, 2253, 2255, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2267, 2268, 2269, 2270, 2271, 2272, 2274, 2276, 2278, 2280, 2282, 2284, 2287, 2289, 2291, 2293, 2295, 2297, 2300, 2301, 2302, 2303, 2305, 2308, 2310, 2312, 2313, 2314, 2316, 2319, 2322, 2324, 2325, 2326, 2327, 2329, 2330, 2331, 2332, 2333, 2335, 2337, 2339, 2342, 2343, 2344, 2346, 2348, 2349, 2350, 2351, 2353, 2356, 2360, 2361, 2362, 2365, 2368, 2370, 2371, 2372, 2374, 2377, 2378, 2380, 2381, 2382, 2383, 2384, 2386, 2387, 2389, 2392, 2393, 2394, 2395, 2396, 2398, 2400, 2401, 2402, 2403, 2405, 2407, 2408, 2409, 2410, 2411, 2412, 2414, 2415, 2417, 2420, 2421, 2422, 2423, 2426, 2427, 2430, 2431, 2434, 2435, 2438, 2451, 2452, 2456, 2457, 2461, 2462, 2465, 2470, 2477, 2479, 2482, 2484, 2487, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2499, 2503, 2504, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2530, 2531, 2534, 2535, 2535, 2538, 2539, 2540, 2541, 2544, 2545, 2548, 2549, 2552, 2556, 2557, 2557, 2560, 2561, 2564, 2567, 2571, 2572, 2573, 2574, 2577, 2578, 2579, 2580, 2583, 2585, 2586, 2591, 2593, 2594, 2595, 2596, 2599, 2600, 2605, 2609, 2610, 2611, 2614, 2615, 2620, 2621, 2624, 2626, 2627, 2628, 2633, 2634, 2635, 2636, 2639, 2640, 2643, 2645, 2647, 2648, 2651, 2653, 2654, 2655, 2658, 2659, 2662, 2663, 2664, 2667, 2668, 2669, 2672, 2673, 2674, 2675, 2676, 2679, 2680, 2681, 2684, 2685, 2686, 2687, 2688, 2691, 2693, 2695, 2697, 2700, 2702, 2704, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2718, 2719, 2720, 2723, 2724, 2725, 2728, 2729, 2730, 2733, 2734, 2735, 2738, 2739, 2740, 2741, 2744, 2745, 2746, 2749, 2750, 2751, 2754, 2755, 2756, 2759, 2760, 2761, 2764, 2766, 2768, 2772, 2776, 2777, 2780, 2781, 2782, 2785, 2786, 2788, 2789, 2791, 2794, 2795, 2796, 2797, 2800, 2801, 2804, 2806, 2807, 2808, 2809, 2812, 2813, 2814, 2817, 2818, 2819, 2822, 2823, 2828, 2832, 2839, 2840, 2842, 2847, 2849, 2852, 2853, 2854, 2855, 2857, 2862 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "REAL", "INT", "STRING", "POINTER", "ANGDEGREE", "ANGRADIAN", "SEXSTR", "HMSSTR", "DMSSTR", "ABOUT_", "AIP_", "ALLOC_", "ALLOCGZ_", "ALIGN_", "ALL_", "ALT_", "AMPLIFIER_", "ANALYSIS_", "ANGLE_", "ANNULUS_", "APPEND_", "ARCMIN_", "ARCSEC_", "ARRAY_", "ARROW_", "ASINH_", "AST_", "AUTO_", "AUX_", "AVERAGE_", "AXES_", "AZIMUTH_", "B1950_", "BACK_", "BACKGROUND_", "BASE_", "BBOX_", "BEGIN_", "BG_", "BIG_", "BIGENDIAN_", "BIN_", "BITPIX_", "BLOCK_", "BORDER_", "BOX_", "BOXANNULUS_", "BOXCAR_", "BOXCIRCLE_", "BPANDA_", "BUFFER_", "BW_", "CALLBACK_", "CANVAS_", "CATALOG_", "CELESTRIAL_", "CENTER_", "CENTROID_", "CHANNEL_", "CIRCLE_", "CIAO_", "CLEAR_", "CLIP_", "COLOR_", "COLORBAR_", "COLORMAP_", "COLORSCALE_", "COLORSPACE_", "COLS_", "COLUMN_", "COMMAND_", "COMPASS_", "COMPOSITE_", "COMPRESS_", "CONTOUR_", "CONTRAST_", "COORDINATES_", "COPY_", "COUNT_", "CPANDA_", "CREATE_", "CROP_", "CROSS_", "CROSSHAIR_", "CUBE_", "CURSOR_", "CUT_", "CMYK_", "DASH_", "DASHLIST_", "DATA_", "DATAMIN_", "DATASEC_", "DEBUG_", "DEGREES_", "DEFAULT_", "DELETE_", "DEPTH_", "DETECTOR_", "DIAMOND_", "DIM_", "DS9_", "EDIT_", "ECLIPTIC_", "ELEVATION_", "ELLIPSE_", "ELLIPSEANNULUS_", "END_", "ENVI_", "EPANDA_", "EPSILON_", "EQUATORIAL_", "ERASE_", "EXT_", "FACTOR_", "FALSE_", "FILE_", "FILTER_", "FIT_", "FITS_", "FITSY_", "FIXED_", "FK4_", "FK4_NO_E_", "FK5_", "FONT_", "FRONT_", "FULL_", "FUNCTION_", "GALACTIC_", "GAUSSIAN_", "GET_", "GLOBAL_", "GRAPHICS_", "GRAY_", "GRID_", "GZ_", "HANDLE_", "HAS_", "HEAD_", "HEADER_", "HEIGHT_", "HELIOECLIPTIC_", "HIDE_", "HIGHLITE_", "HISTEQU_", "HISTOGRAM_", "HORIZONTAL_", "ICRS_", "ID_", "IIS_", "IMAGE_", "INCLUDE_", "INCR_", "INFO_", "INTEGER_", "ITERATION_", "IRAF_", "IRAFMIN_", "J2000_", "KEY_", "KEYWORD_", "LABEL_", "LENGTH_", "LEVEL_", "LITTLE_", "LITTLEENDIAN_", "LINE_", "LINEAR_", "LIST_", "LOAD_", "LOCAL_", "LOG_", "MACOSX_", "MAGNIFIER_", "MATCH_", "MAP_", "MARK_", "MARKER_", "MASK_", "MESSAGE_", "METHOD_", "MINMAX_", "MIP_", "MMAP_", "MMAPINCR_", "MOSAIC_", "MODE_", "MOTION_", "MOVE_", "NAME_", "NAN_", "NATIVE_", "NAXES_", "NEW_", "NEXT_", "NO_", "NONE_", "NOW_", "NRRD_", "NUMBER_", "OBJECT_", "OFF_", "ON_", "ONLY_", "OPTION_", "ORIENT_", "PAN_", "PANNER_", "PARSER_", "PASTE_", "PERF_", "PHOTO_", "PHYSICAL_", "PIXEL_", "PLOT2D_", "PLOT3D_", "POINT_", "POINTER_", "POLYGON_", "POSTSCRIPT_", "POW_", "PRINT_", "PRESERVE_", "PROJECTION_", "PROPERTY_", "PUBLICATION_", "PROS_", "QUERY_", "RADIAL_", "RADIUS_", "REGION_", "REPLACE_", "RESAMPLE_", "RESET_", "RESOLUTION_", "RGB_", "ROOT_", "ROTATE_", "RULER_", "SAMPLE_", "SAOIMAGE_", "SAOTNG_", "SAVE_", "SCALE_", "SCAN_", "SCIENTIFIC_", "SCOPE_", "SEGMENT_", "SELECT_", "SET_", "SEXAGESIMAL_", "SHAPE_", "SHARED_", "SHIFT_", "SHMID_", "SHOW_", "SINH_", "SIZE_", "SLICE_", "SMMAP_", "SMOOTH_", "SOCKET_", "SOCKETGZ_", "SOURCE_", "SQRT_", "SQUARED_", "SSHARED_", "STATS_", "STATUS_", "SUPERGALACTIC_", "SUM_", "SYSTEM_", "TABLE_", "TAG_", "TEMPLATE_", "TEXT_", "THREADS_", "THREED_", "THRESHOLD_", "THICK_", "TRANSPARENCY_", "TO_", "TOGGLE_", "TOPHAT_", "TRUE_", "TYPE_", "UNDO_", "UNHIGHLITE_", "UNLOAD_", "UNSELECT_", "UPDATE_", "USER_", "VALUE_", "VAR_", "VIEW_", "VECTOR_", "VERSION_", "VERTEX_", "VERTICAL_", "WARP_", "WCS_", "WCSA_", "WCSB_", "WCSC_", "WCSD_", "WCSE_", "WCSF_", "WCSG_", "WCSH_", "WCSI_", "WCSJ_", "WCSK_", "WCSL_", "WCSM_", "WCSN_", "WCSO_", "WCSP_", "WCSQ_", "WCSR_", "WCSS_", "WCST_", "WCSU_", "WCSV_", "WCSW_", "WCSX_", "WCSY_", "WCSZ_", "WCS0_", "WFPC2_", "WIDTH_", "WIN32_", "XML_", "XY_", "YES_", "ZMAX_", "ZSCALE_", "ZOOM_", "'Y'", "'N'", "'X'", "'='", "$accept", "command", "numeric", "debug", "yesno", "fileNameType", "optangle", "angle", "sexagesimal", "hms", "dms", "coord", "coordSystem", "wcsSystem", "internalSystem", "scaleType", "minmaxMode", "skyFrame", "skyFormat", "skyDist", "contourClipMode", "shmType", "incrLoad", "layerType", "pointShape", "pointSize", "analysisMethod", "analysisParam", "endian", "threed", "threedBorder", "threedCompass", "threedHighlite", "threedView", "analysis", "analysisShape", "bin", "binAbout", "binFactor", "binFunction", "binTo", "block", "blockTo", "clip", "clipScope", "clipMode", "clipMinMax", "clipZScale", "colormap", "colormapMotion", "colorscale", "contour", "contourCreate", "contourDelete", "contourLoad", "contourMethod", "contourPaste", "contourSave", "crop", "crop3d", "crosshair", "cube", "fitsy", "get", "getBin", "getBinCols", "getBlock", "getClip", "getClipLimits", "getClipMinMax", "getClipZScale", "getColorbar", "getColorMap", "getColorMapLevel", "getColorScale", "getColorScaleLevel", "getContour", "getContourClip", "getContourColorScale", "getCoord", "getCrop", "getCrosshair", "getCube", "getCursor", "getData", "getInfo", "getiis", "getIISFileName", "getFits", "getFitsExt", "getFitsHeader", "getFitsDepth", "getFitsFileName", "getFitsSlice", "getGrid", "getMask", "getPan", "getRGB", "getSmooth", "getThreed", "getThreedBorder", "getThreedCompass", "getThreedHighlite", "getThreedView", "getWCS", "getWCSAlign", "grid", "gridCreate", "gridType", "has", "hasBin", "hasContour", "hasFits", "hasMarker", "hasWCS", "iis", "iisSetFileName", "iiscursor", "load", "loadArr", "loadArrayRGBCube", "loadENVI", "loadFits", "loadFitsSlice", "loadFitsExtCube", "loadFitsMosaic", "loadFitsMosaicImageIRAF", "loadFitsMosaicIRAF", "loadFitsMosaicImageWCS", "loadFitsMosaicWCS", "loadFitsMosaicImageWFPC2", "loadFitsRGBCube", "loadFitsRGBImage", "loadNRRD", "loadPhoto", "loadIncr", "macosx", "magnifier", "match", "marker", "@1", "markerCallBack", "markerCentroid", "markerCreate", "markerCreateTemplate", "markerDash", "markerEdit", "markerFormat", "markerGet", "markerGetCentroid", "markerGetHighlite", "markerGetSelect", "markerGetShow", "markerInitProp", "markerLayer", "markerList", "markerLoad", "markerMoveSelected", "markerProps", "markerProp", "markerProperty", "markerProperties", "markerQuery", "@2", "markerSelect", "markerShow", "queries", "query", "markerTags", "@3", "tags", "tag", "callback", "mask", "orient", "pan", "panTo", "panMotion", "panner", "postscript", "pscolorspace", "region", "regionHighlite", "regionSelect", "renderMethod", "renderBackground", "rgb", "rotate", "rotateMotion", "save", "saveArray", "saveArrayRGBCube", "saveFits", "saveFitsImage", "saveFitsTable", "saveFitsSlice", "saveFitsExtCube", "saveFitsMosaic", "saveFitsMosaicImage", "saveFitsRGBImage", "saveFitsRGBCube", "saveFitsResample", "saveNRRD", "saveENVI", "smooth", "smoothFunction", "update", "updateFitsSlice", "warp", "wcs", "wcsAppend", "wcsReplace", "wcsAlign", "win32", "zoom", "zoomTo", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 89, 78, 88, 61 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { 0, 345, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 347, 347, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 349, 349, 349, 349, 349, 349, 349, 349, 349, 350, 350, 350, 350, 350, 351, 351, 352, 352, 352, 353, 354, 355, 356, 356, 356, 356, 357, 357, 357, 357, 357, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 359, 359, 360, 360, 360, 360, 360, 360, 360, 360, 361, 361, 361, 361, 361, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, 363, 363, 363, 364, 364, 364, 364, 365, 365, 365, 365, 365, 366, 366, 366, 367, 367, 367, 368, 368, 368, 369, 369, 369, 369, 369, 369, 369, 369, 370, 370, 371, 371, 371, 371, 371, 371, 372, 372, 372, 373, 373, 373, 373, 373, 373, 374, 374, 374, 374, 374, 374, 374, 374, 374, 375, 375, 376, 376, 377, 377, 378, 378, 378, 378, 378, 379, 379, 380, 380, 380, 380, 380, 380, 380, 380, 380, 381, 381, 381, 381, 381, 381, 381, 381, 382, 382, 383, 383, 383, 383, 383, 383, 383, 383, 384, 384, 385, 385, 385, 385, 385, 386, 386, 386, 387, 387, 387, 388, 388, 388, 388, 388, 388, 389, 389, 390, 390, 390, 390, 390, 391, 391, 391, 392, 392, 392, 392, 393, 393, 393, 393, 393, 394, 394, 395, 395, 396, 396, 396, 396, 396, 397, 397, 398, 398, 399, 399, 399, 400, 400, 401, 401, 402, 402, 403, 403, 403, 403, 403, 403, 403, 404, 404, 404, 404, 404, 405, 405, 405, 405, 405, 405, 405, 405, 406, 407, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 409, 409, 409, 409, 409, 409, 409, 409, 410, 410, 410, 411, 412, 412, 412, 412, 412, 412, 412, 413, 413, 413, 413, 413, 413, 414, 414, 415, 415, 415, 416, 416, 417, 418, 418, 418, 419, 419, 419, 420, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 422, 422, 423, 423, 424, 424, 424, 425, 425, 425, 426, 426, 426, 427, 428, 428, 429, 429, 429, 430, 430, 430, 431, 431, 431, 432, 432, 432, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, 434, 434, 435, 435, 435, 435, 436, 436, 437, 437, 437, 438, 438, 438, 438, 439, 439, 439, 440, 440, 440, 441, 442, 442, 442, 443, 443, 444, 444, 444, 444, 444, 444, 444, 445, 445, 446, 446, 447, 447, 448, 448, 449, 449, 449, 450, 450, 451, 451, 452, 452, 453, 453, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 455, 456, 456, 457, 457, 457, 457, 458, 458, 458, 458, 459, 459, 459, 459, 459, 460, 460, 460, 460, 460, 460, 460, 460, 461, 461, 462, 462, 462, 463, 463, 463, 463, 463, 463, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 465, 465, 465, 465, 465, 465, 465, 465, 465, 466, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 469, 469, 469, 469, 469, 469, 469, 469, 469, 470, 470, 470, 470, 470, 471, 471, 471, 471, 471, 471, 471, 471, 471, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 473, 473, 473, 473, 473, 473, 473, 473, 473, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 475, 475, 475, 475, 475, 475, 475, 475, 475, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 477, 477, 477, 477, 477, 477, 477, 477, 477, 478, 478, 478, 478, 478, 478, 479, 479, 480, 480, 480, 481, 482, 482, 482, 482, 482, 482, 482, 483, 484, 484, 484, 484, 484, 484, 485, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 487, 487, 487, 487, 487, 487, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 489, 489, 489, 489, 490, 491, 491, 491, 492, 492, 492, 492, 492, 492, 492, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 494, 494, 494, 494, 495, 495, 496, 496, 497, 497, 498, 499, 499, 499, 499, 499, 499, 500, 500, 501, 501, 501, 501, 501, 502, 502, 502, 502, 502, 502, 502, 502, 503, 503, 504, 504, 504, 504, 504, 504, 504, 504, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 506, 506, 507, 508, 507, 509, 509, 509, 509, 510, 510, 511, 511, 512, 513, 514, 513, 515, 515, 516, 517, 518, 518, 518, 518, 519, 519, 519, 519, 520, 520, 520, 520, 520, 520, 520, 520, 521, 521, 521, 522, 522, 522, 523, 523, 523, 523, 524, 524, 524, 524, 525, 525, 525, 525, 526, 526, 527, 527, 527, 527, 528, 528, 528, 528, 529, 529, 530, 530, 530, 531, 531, 531, 532, 532, 532, 532, 532, 533, 533, 533, 534, 534, 534, 534, 534, 535, 535, 535, 535, 536, 536, 536, 537, 537, 537, 537, 537, 537, 537, 537, 537, 538, 538, 538, 539, 539, 539, 540, 540, 540, 541, 541, 541, 542, 542, 542, 542, 543, 543, 543, 544, 544, 544, 545, 545, 545, 546, 546, 546, 547, 547, 547, 548, 549, 549, 550, 550, 550, 551, 551, 551, 551, 551, 552, 552, 552, 552, 553, 553, 554, 554, 554, 554, 554, 555, 555, 555, 556, 556, 556, 557, 557, 557, 558, 559, 559, 559, 559, 559, 560, 560, 560, 560, 560, 560 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 2, 2, 2, 3, 2, 1, 1, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 3, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2, 1, 3, 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 6, 3, 3, 3, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 4, 2, 2, 2, 3, 2, 2, 1, 2, 1, 2, 4, 5, 2, 3, 5, 6, 1, 1, 1, 7, 11, 8, 12, 1, 2, 2, 1, 1, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 2, 2, 2, 6, 10, 1, 2, 1, 6, 10, 1, 2, 2, 2, 2, 2, 2, 12, 1, 0, 1, 1, 4, 6, 1, 1, 1, 4, 3, 4, 0, 6, 8, 2, 3, 3, 3, 0, 3, 4, 4, 4, 3, 3, 1, 3, 5, 4, 4, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 4, 7, 2, 2, 2, 1, 3, 2, 2, 1, 2, 8, 2, 1, 2, 1, 2, 1, 4, 7, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 0, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 1, 4, 5, 0, 2, 1, 5, 2, 2, 1, 1, 1, 2, 1, 2, 1, 1, 0, 1, 0, 1, 5, 6, 4, 3, 6, 2, 1, 3, 1, 1, 1, 3, 6, 7, 5, 1, 1, 4, 5, 1, 3, 0, 1, 2, 1, 4, 1, 2, 1, 2, 3, 2, 1, 2, 1, 4, 2, 1, 1, 3, 1, 2, 3, 2, 0, 1, 1, 4, 2, 0, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 2, 2, 0, 1, 2, 1, 6, 5, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 2, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 3, 1, 2, 2, 4, 6, 1, 10, 1, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 3, 3, 5, 4, 4, 4, 3, 3, 3, 3, 2, 2, 4, 3, 3, 3, 3, 4, 4, 4, 4, 5, 4, 6, 7, 4, 4, 5, 2, 3, 3, 3, 2, 3, 3, 3, 3, 4, 3, 5, 6, 3, 3, 4, 3, 3, 3, 3, 3, 5, 3, 3, 4, 3, 2, 2, 1, 3, 4, 4, 4, 4, 4, 6, 4, 4, 5, 4, 4, 4, 4, 5, 4, 6, 7, 4, 4, 5, 5, 5, 5, 5, 5, 7, 5, 5, 6, 5, 5, 5, 5, 6, 5, 7, 8, 5, 5, 6, 3, 3, 3, 3, 3, 5, 3, 3, 4, 3, 3, 3, 3, 4, 3, 5, 6, 3, 3, 4, 3, 3, 3, 3, 3, 5, 3, 3, 4, 4, 4, 3, 5, 4, 4, 2, 3, 6, 6, 1, 1, 1, 2, 2, 2, 3, 3, 2, 12, 2, 2, 1, 3, 4, 2, 0, 3, 1, 1, 2, 2, 2, 2, 2, 4, 4, 4, 3, 4, 5, 7, 8, 6, 8, 9, 6, 6, 7, 10, 11, 12, 9, 5, 5, 6, 3, 5, 5, 5, 6, 5, 4, 9, 10, 11, 9, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 2, 4, 4, 4, 4, 5, 4, 4, 5, 5, 3, 4, 4, 4, 6, 7, 8, 9, 6, 10, 11, 12, 9, 3, 2, 3, 5, 6, 7, 4, 3, 3, 6, 6, 6, 7, 6, 7, 4, 4, 6, 9, 4, 3, 6, 7, 7, 2, 3, 3, 3, 4, 2, 2, 4, 7, 10, 3, 1, 3, 2, 2, 2, 2, 3, 5, 4, 5, 2, 7, 3, 2, 2, 3, 2, 2, 2, 3, 2, 3, 4, 3, 3, 5, 6, 4, 2, 3, 2, 2, 4, 3, 3, 2, 3, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 2, 2, 3, 5, 7, 7, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 6, 6, 10, 7, 7, 7, 9, 9, 10, 12, 12, 2, 2, 3, 4, 4, 4, 2, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 3, 4, 6, 10, 7, 7, 5, 4, 6, 10, 7, 7, 5, 2, 2, 3, 4, 5, 5, 5, 3, 4, 5, 5, 5, 5, 2, 3, 3, 5, 3, 3, 3, 4, 5, 5, 5, 5, 3, 4, 5, 5, 2, 2, 3, 5, 6, 6, 3, 3, 6, 5, 5, 2, 3, 5, 6, 3, 2, 2, 3, 2, 3, 2, 3, 5, 6, 2, 2, 2, 1, 4, 4, 1, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 3, 1, 1, 1, 1, 1, 0, 2, 0, 2, 0, 1, 0, 0, 1, 1, 1, 1, 1, 7, 8, 2, 4, 2, 4, 6, 2, 1, 1, 3, 3, 1, 3, 4, 2, 1, 3, 3, 4, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 2, 1, 3, 1, 3, 1, 2, 2, 1, 3, 0, 0, 2, 2, 1, 3, 5, 1, 2, 2, 2, 1, 1, 1, 1, 4, 2, 3, 3, 2, 3, 2, 2, 2, 3, 3, 3, 2, 3, 1, 3, 3, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 3, 3, 1, 2, 3, 3, 1, 2, 1, 1, 1, 1, 1, 2, 2, 4, 1, 2, 2, 2, 3, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 1, 2, 2, 2, 3, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 2, 1, 1, 1, 1, 0, 5, 1, 6, 3, 1, 2, 2, 3, 2, 3, 3, 2, 2, 2, 2, 2, 2, 3, 2, 2, 3, 1, 3, 4, 1, 2, 5, 6, 6, 2, 1, 2, 2, 5, 6, 6 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint16 yydefact[] = { 0, 0, 0, 0, 0, 7, 8, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 1046, 0, 0, 0, 0, 0, 0, 0, 1046, 38, 0, 0, 0, 43, 0, 0, 0, 47, 1227, 49, 0, 0, 0, 0, 0, 220, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 54, 55, 0, 256, 6, 0, 0, 0, 0, 0, 0, 9, 0, 0, 284, 286, 0, 0, 11, 135, 137, 130, 131, 132, 136, 133, 134, 289, 12, 0, 298, 0, 0, 0, 13, 0, 0, 0, 0, 316, 0, 14, 69, 98, 0, 128, 97, 77, 95, 0, 74, 76, 72, 129, 96, 73, 0, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 70, 71, 75, 323, 143, 99, 0, 15, 0, 16, 17, 0, 0, 0, 0, 0, 0, 0, 57, 56, 0, 0, 0, 0, 2, 0, 18, 0, 0, 0, 389, 400, 0, 406, 0, 0, 0, 0, 0, 0, 0, 345, 0, 477, 0, 0, 0, 0, 0, 1046, 0, 353, 0, 357, 0, 0, 0, 361, 0, 363, 0, 365, 0, 0, 504, 369, 19, 0, 510, 20, 515, 0, 532, 518, 519, 520, 521, 534, 523, 524, 525, 0, 527, 528, 0, 0, 21, 23, 0, 548, 0, 0, 0, 553, 0, 24, 0, 0, 0, 0, 0, 0, 0, 26, 707, 27, 0, 0, 0, 0, 0, 0, 708, 28, 0, 29, 1051, 1050, 1047, 1048, 1049, 0, 1109, 0, 0, 0, 31, 0, 1116, 1115, 1114, 1113, 33, 0, 0, 0, 0, 0, 143, 0, 34, 0, 1134, 0, 1131, 35, 0, 0, 0, 0, 37, 36, 0, 0, 0, 0, 40, 0, 0, 1161, 41, 0, 0, 0, 0, 0, 42, 1224, 1223, 1225, 1226, 44, 0, 45, 0, 0, 0, 0, 0, 207, 0, 0, 0, 46, 0, 0, 1229, 48, 0, 0, 50, 0, 0, 0, 0, 143, 51, 1252, 52, 0, 0, 53, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 5, 239, 0, 231, 0, 0, 233, 0, 241, 234, 238, 249, 250, 235, 251, 0, 237, 259, 260, 258, 257, 0, 0, 0, 264, 271, 274, 273, 272, 270, 263, 267, 268, 269, 262, 0, 0, 0, 0, 0, 266, 10, 0, 0, 0, 285, 0, 290, 0, 297, 291, 299, 292, 300, 293, 305, 294, 0, 0, 295, 0, 88, 89, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, 146, 152, 144, 145, 147, 150, 153, 149, 148, 151, 0, 0, 329, 58, 63, 64, 65, 66, 67, 59, 60, 61, 68, 62, 0, 331, 0, 378, 374, 370, 371, 375, 372, 377, 332, 381, 333, 391, 384, 388, 383, 394, 393, 392, 390, 334, 382, 401, 336, 0, 335, 0, 408, 337, 420, 412, 422, 413, 414, 416, 0, 418, 419, 143, 338, 0, 0, 339, 0, 0, 143, 340, 432, 143, 430, 341, 433, 343, 143, 434, 342, 0, 143, 0, 344, 452, 0, 450, 468, 0, 0, 0, 456, 448, 0, 458, 473, 461, 346, 478, 479, 347, 0, 0, 0, 443, 0, 350, 439, 440, 0, 351, 352, 0, 480, 481, 482, 355, 356, 483, 358, 0, 484, 485, 486, 360, 487, 488, 362, 494, 496, 498, 500, 493, 495, 502, 364, 0, 0, 507, 0, 368, 143, 509, 0, 516, 533, 517, 535, 536, 537, 522, 538, 540, 539, 541, 526, 529, 545, 0, 0, 0, 542, 530, 0, 0, 550, 549, 0, 0, 0, 0, 25, 0, 0, 560, 0, 561, 0, 0, 0, 0, 0, 562, 0, 706, 0, 563, 0, 564, 0, 0, 565, 0, 711, 710, 709, 0, 714, 0, 0, 0, 896, 0, 0, 0, 718, 722, 724, 725, 0, 0, 0, 0, 832, 0, 0, 0, 869, 0, 0, 0, 0, 0, 0, 0, 871, 0, 0, 0, 30, 1110, 1111, 1112, 32, 0, 0, 0, 0, 1123, 1124, 0, 143, 0, 1121, 1118, 0, 0, 0, 143, 1139, 1142, 1140, 1141, 1135, 1136, 1137, 1138, 0, 0, 39, 1158, 1159, 0, 1166, 1168, 1167, 1163, 1164, 1162, 0, 0, 0, 0, 1169, 0, 1172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1170, 1181, 0, 0, 0, 1171, 1173, 1222, 1156, 1157, 1155, 205, 0, 209, 201, 0, 211, 202, 0, 213, 203, 1154, 1153, 204, 206, 208, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 1236, 1249, 1239, 0, 0, 1242, 0, 0, 1241, 1240, 154, 1258, 0, 1257, 1253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 236, 0, 245, 0, 242, 0, 261, 138, 141, 142, 140, 139, 275, 276, 277, 265, 279, 281, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 313, 94, 91, 92, 93, 143, 315, 314, 0, 0, 0, 0, 0, 0, 0, 328, 0, 324, 322, 321, 330, 373, 0, 0, 376, 395, 396, 385, 386, 397, 399, 398, 387, 403, 402, 0, 407, 421, 411, 423, 417, 415, 410, 0, 0, 0, 143, 429, 154, 154, 154, 143, 0, 0, 143, 469, 451, 462, 0, 453, 78, 464, 0, 0, 455, 457, 143, 474, 475, 460, 0, 0, 0, 445, 0, 0, 0, 0, 944, 946, 945, 0, 0, 1039, 0, 1018, 0, 1021, 0, 0, 1041, 1043, 0, 1034, 354, 0, 497, 490, 499, 491, 501, 492, 503, 489, 0, 0, 508, 505, 506, 154, 531, 544, 543, 546, 0, 559, 547, 0, 0, 0, 0, 0, 0, 172, 172, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 166, 0, 0, 166, 0, 0, 0, 0, 0, 601, 625, 0, 0, 0, 597, 0, 0, 0, 0, 172, 166, 0, 0, 702, 0, 712, 713, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 821, 0, 0, 826, 827, 0, 0, 0, 848, 850, 849, 0, 852, 0, 0, 860, 862, 863, 897, 0, 0, 0, 0, 716, 717, 938, 936, 941, 940, 939, 937, 942, 0, 721, 0, 726, 0, 935, 0, 727, 728, 729, 730, 0, 0, 0, 0, 0, 834, 0, 0, 835, 1061, 0, 1064, 1060, 0, 0, 0, 836, 870, 837, 1080, 1085, 1082, 1081, 1079, 1086, 1083, 1077, 1084, 1078, 1087, 0, 0, 842, 0, 0, 0, 1093, 0, 1095, 845, 0, 1097, 846, 867, 0, 0, 0, 872, 873, 874, 1122, 0, 0, 1129, 1125, 0, 0, 0, 1120, 1119, 1133, 1132, 0, 1147, 0, 0, 1143, 0, 1151, 0, 0, 1144, 0, 1165, 194, 194, 0, 194, 0, 1191, 0, 1190, 1182, 0, 0, 0, 0, 1186, 0, 0, 0, 1189, 0, 0, 0, 0, 0, 1184, 1192, 0, 0, 0, 1183, 194, 194, 194, 210, 212, 214, 0, 0, 0, 0, 215, 0, 55, 0, 1231, 0, 1237, 0, 143, 1243, 1244, 0, 1246, 1247, 0, 155, 156, 1238, 1259, 1260, 0, 228, 224, 230, 222, 223, 229, 226, 225, 227, 232, 0, 246, 0, 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, 0, 0, 307, 143, 0, 0, 0, 0, 317, 0, 327, 0, 326, 380, 379, 0, 0, 0, 143, 0, 0, 154, 427, 431, 435, 0, 0, 0, 154, 0, 82, 81, 470, 454, 0, 465, 467, 157, 476, 348, 0, 0, 55, 0, 444, 0, 0, 962, 0, 0, 0, 0, 0, 0, 974, 0, 0, 0, 0, 0, 0, 990, 991, 0, 0, 0, 0, 1001, 0, 1006, 1007, 1009, 1011, 0, 1015, 1026, 1027, 1028, 0, 1030, 1035, 1037, 1038, 1036, 943, 0, 0, 1017, 0, 1016, 961, 0, 0, 1022, 0, 1024, 0, 1023, 1044, 1025, 1032, 0, 0, 366, 0, 0, 557, 558, 0, 555, 551, 0, 172, 172, 172, 173, 174, 569, 570, 168, 167, 0, 172, 172, 172, 0, 575, 585, 169, 172, 172, 172, 170, 171, 172, 172, 0, 172, 172, 0, 169, 0, 598, 0, 0, 0, 624, 0, 623, 0, 0, 600, 0, 599, 0, 0, 0, 0, 169, 169, 166, 0, 0, 166, 0, 0, 0, 172, 172, 698, 0, 172, 172, 703, 0, 185, 186, 187, 188, 189, 190, 0, 86, 87, 85, 734, 0, 0, 0, 0, 0, 890, 888, 883, 0, 893, 877, 894, 880, 892, 886, 875, 889, 878, 876, 895, 891, 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 797, 799, 0, 0, 805, 804, 0, 0, 175, 0, 0, 143, 0, 0, 817, 0, 0, 0, 822, 823, 824, 0, 0, 0, 831, 847, 851, 853, 856, 855, 0, 0, 0, 861, 898, 900, 0, 899, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1045, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 833, 0, 143, 0, 1056, 1054, 0, 0, 143, 0, 1059, 838, 0, 0, 0, 844, 0, 0, 1098, 865, 866, 0, 868, 1128, 1130, 1127, 1126, 1117, 0, 0, 1148, 0, 0, 1152, 1160, 196, 197, 198, 199, 195, 1175, 1174, 0, 0, 0, 1177, 1176, 194, 0, 0, 0, 1185, 0, 0, 0, 0, 0, 1202, 0, 1216, 1215, 1217, 0, 0, 0, 1188, 0, 0, 0, 1187, 1197, 1196, 1198, 1194, 1193, 1195, 1219, 1218, 1220, 217, 219, 218, 0, 0, 55, 0, 1233, 0, 143, 1250, 1245, 1248, 0, 0, 143, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 304, 303, 0, 0, 301, 306, 308, 0, 318, 320, 319, 143, 325, 0, 0, 0, 154, 426, 143, 0, 0, 0, 0, 449, 463, 80, 79, 472, 0, 466, 159, 160, 158, 459, 0, 0, 447, 441, 0, 0, 0, 0, 0, 0, 143, 963, 0, 0, 0, 968, 0, 143, 0, 975, 976, 0, 978, 979, 980, 0, 0, 0, 986, 0, 992, 0, 0, 0, 996, 997, 0, 0, 0, 1002, 0, 0, 1005, 1008, 1010, 1012, 0, 0, 1029, 1031, 947, 0, 0, 0, 0, 0, 0, 1040, 948, 0, 0, 1042, 1033, 0, 0, 513, 514, 0, 0, 556, 0, 566, 567, 568, 172, 572, 573, 574, 0, 0, 0, 579, 580, 166, 0, 0, 0, 172, 586, 587, 588, 589, 591, 169, 594, 595, 0, 172, 0, 0, 0, 169, 169, 166, 0, 0, 0, 0, 622, 0, 626, 0, 0, 0, 0, 0, 169, 169, 166, 0, 0, 166, 0, 0, 0, 0, 0, 169, 169, 166, 0, 0, 166, 0, 0, 0, 0, 0, 169, 169, 166, 0, 0, 166, 0, 0, 0, 0, 169, 169, 166, 0, 0, 0, 169, 602, 603, 604, 605, 607, 0, 610, 611, 0, 169, 0, 0, 696, 697, 172, 700, 701, 0, 733, 143, 735, 0, 0, 0, 0, 0, 0, 0, 882, 879, 885, 884, 881, 887, 0, 0, 0, 0, 0, 143, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 775, 776, 777, 0, 781, 778, 780, 0, 0, 786, 785, 787, 0, 0, 0, 0, 0, 0, 143, 0, 143, 0, 803, 181, 177, 182, 176, 179, 178, 180, 812, 813, 0, 0, 0, 816, 143, 0, 143, 0, 825, 828, 143, 0, 143, 0, 854, 859, 901, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1088, 926, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 927, 0, 0, 0, 0, 0, 731, 732, 143, 154, 0, 143, 143, 1062, 1063, 0, 1065, 0, 840, 0, 143, 1094, 1096, 864, 1145, 1146, 1149, 1150, 194, 194, 194, 1221, 1200, 1199, 1201, 1204, 1203, 1207, 1206, 1208, 1205, 1213, 1212, 1214, 1210, 1209, 1211, 0, 1228, 1235, 0, 1251, 0, 143, 0, 1254, 0, 0, 247, 0, 244, 0, 0, 0, 282, 0, 0, 0, 0, 143, 0, 310, 131, 0, 404, 0, 424, 154, 157, 0, 0, 438, 0, 0, 442, 955, 0, 0, 0, 0, 143, 964, 157, 157, 157, 143, 969, 157, 154, 157, 157, 143, 981, 157, 157, 157, 143, 987, 157, 157, 143, 0, 157, 143, 157, 157, 143, 157, 143, 949, 0, 0, 0, 0, 143, 1019, 1020, 0, 0, 512, 552, 0, 571, 576, 577, 578, 0, 582, 583, 584, 590, 172, 169, 596, 613, 614, 615, 616, 617, 0, 619, 620, 169, 0, 0, 0, 169, 169, 166, 0, 0, 0, 0, 0, 0, 169, 169, 166, 0, 0, 0, 0, 0, 0, 169, 169, 166, 0, 0, 0, 169, 172, 172, 172, 172, 172, 0, 172, 172, 0, 169, 169, 172, 172, 172, 172, 172, 0, 172, 172, 0, 169, 169, 676, 677, 678, 679, 681, 0, 684, 685, 0, 169, 687, 688, 689, 690, 691, 0, 693, 694, 169, 606, 169, 0, 612, 0, 0, 699, 0, 736, 157, 0, 0, 157, 0, 0, 0, 749, 157, 750, 753, 754, 157, 755, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 782, 783, 0, 157, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 857, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1089, 1068, 0, 1075, 1076, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0, 83, 0, 0, 933, 934, 154, 0, 0, 0, 1057, 1055, 1066, 839, 841, 154, 1179, 1178, 1180, 0, 1230, 1261, 0, 0, 1256, 1255, 248, 0, 0, 0, 287, 0, 0, 0, 302, 157, 405, 409, 425, 428, 0, 436, 471, 349, 0, 0, 0, 0, 960, 965, 967, 966, 970, 971, 972, 973, 977, 982, 983, 984, 985, 988, 989, 993, 154, 157, 999, 154, 1000, 1003, 154, 1013, 154, 0, 0, 0, 0, 954, 0, 367, 511, 0, 581, 592, 172, 169, 621, 172, 172, 172, 172, 172, 0, 172, 172, 169, 667, 668, 669, 670, 671, 0, 673, 674, 169, 172, 172, 172, 172, 172, 0, 172, 172, 169, 172, 636, 637, 638, 639, 641, 169, 644, 645, 0, 172, 172, 656, 657, 658, 659, 661, 169, 664, 665, 0, 172, 680, 169, 0, 686, 169, 695, 608, 169, 704, 705, 143, 739, 0, 157, 743, 742, 0, 143, 0, 751, 756, 143, 0, 763, 764, 765, 766, 770, 771, 767, 768, 769, 0, 0, 157, 788, 792, 0, 143, 0, 0, 801, 807, 806, 157, 808, 0, 814, 0, 818, 157, 157, 810, 0, 0, 858, 0, 183, 183, 0, 0, 183, 0, 183, 1045, 0, 0, 0, 0, 0, 0, 0, 0, 1067, 0, 0, 183, 183, 0, 0, 0, 0, 0, 0, 0, 0, 928, 0, 0, 0, 1045, 84, 0, 183, 0, 1091, 932, 0, 0, 216, 1263, 1262, 0, 0, 252, 0, 0, 0, 0, 311, 437, 956, 0, 191, 0, 994, 995, 998, 1004, 1014, 950, 0, 191, 0, 359, 0, 593, 618, 627, 628, 629, 630, 631, 169, 633, 634, 172, 169, 675, 647, 648, 649, 650, 651, 169, 653, 654, 172, 640, 172, 169, 646, 660, 172, 169, 666, 682, 169, 692, 609, 0, 157, 737, 744, 0, 0, 0, 0, 0, 772, 773, 789, 0, 0, 0, 802, 809, 0, 819, 820, 811, 157, 829, 0, 184, 1045, 1045, 83, 0, 1045, 0, 1045, 902, 143, 0, 1070, 0, 1073, 1107, 1074, 1072, 1069, 0, 1045, 1045, 83, 0, 0, 1045, 1045, 0, 0, 1045, 931, 929, 930, 909, 1045, 1045, 1091, 1102, 0, 1058, 843, 0, 0, 254, 0, 0, 0, 0, 192, 193, 958, 959, 0, 952, 953, 0, 172, 635, 672, 172, 655, 642, 172, 662, 172, 683, 0, 738, 157, 740, 157, 0, 157, 0, 157, 790, 157, 0, 157, 0, 1045, 915, 911, 1045, 0, 916, 0, 910, 1045, 0, 1071, 0, 913, 912, 1045, 0, 0, 907, 905, 1045, 143, 906, 908, 914, 1102, 1052, 0, 0, 1092, 1100, 0, 0, 0, 283, 162, 165, 164, 163, 161, 0, 143, 143, 554, 632, 652, 643, 663, 157, 741, 748, 0, 762, 759, 791, 796, 0, 815, 0, 920, 904, 83, 0, 918, 1108, 0, 903, 83, 0, 919, 0, 1053, 1104, 1106, 0, 1099, 0, 0, 288, 0, 191, 191, 0, 745, 143, 760, 793, 830, 1045, 0, 0, 1045, 0, 157, 1105, 1101, 253, 0, 0, 957, 951, 715, 143, 746, 761, 143, 794, 922, 0, 1045, 921, 0, 1045, 255, 296, 747, 795, 83, 923, 83, 917, 1045, 1045, 925, 924 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 53, 429, 176, 155, 1250, 2496, 2497, 430, 431, 432, 433, 156, 157, 158, 94, 806, 456, 1191, 1665, 2708, 1339, 1352, 1335, 1905, 2591, 1399, 2639, 1565, 335, 747, 750, 753, 764, 56, 364, 66, 368, 374, 378, 381, 71, 384, 78, 399, 395, 389, 405, 85, 410, 95, 101, 415, 417, 419, 1634, 421, 424, 108, 440, 159, 161, 178, 218, 480, 848, 482, 491, 492, 851, 856, 494, 496, 858, 499, 860, 510, 862, 864, 513, 517, 521, 523, 526, 530, 557, 553, 1262, 544, 883, 888, 880, 1251, 893, 547, 563, 566, 571, 574, 582, 921, 923, 925, 927, 587, 931, 221, 589, 1733, 238, 591, 593, 597, 602, 609, 247, 1328, 612, 255, 621, 1344, 623, 629, 975, 1360, 970, 1774, 1366, 1364, 971, 1776, 1369, 1371, 635, 638, 633, 257, 265, 267, 676, 1052, 1425, 1041, 1520, 1951, 2279, 1057, 1050, 918, 1302, 1307, 1315, 1317, 1935, 273, 1066, 1069, 1077, 2251, 2252, 2253, 1936, 2626, 2627, 1100, 1103, 2697, 2698, 2694, 2695, 2740, 2254, 2255, 278, 284, 292, 690, 685, 297, 302, 700, 706, 1127, 1132, 756, 744, 308, 312, 713, 318, 720, 1570, 733, 734, 1163, 1158, 1576, 1148, 1582, 1594, 1590, 1152, 738, 722, 323, 324, 339, 1178, 342, 348, 774, 777, 771, 350, 353, 782 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -2562 static const yytype_int16 yypact[] = { 4516, -71, 69, 444, 80, -2562, -2562, 932, -85, 563, 1115, 397, 236, 3453, 163, 330, 1947, 58, 5636, 405, 1609, -2562, 330, 728, 201, 41, -22, 105, 244, 190, 49, 209, 881, 3122, 185, 836, 118, 190, -2562, -24, 75, 748, -2562, -10, 276, 355, -2562, 487, -2562, 90, 2084, 267, 124, 494, -2562, 498, -2562, 500, 171, 262, 525, 559, 133, 590, -7, 88, -2562, -2562, -2562, 539, 837, -2562, 145, 47, 330, 399, 837, 84, -2562, 592, 837, -2562, -2562, 53, 837, -2562, -2562, -2562, -2562, 837, -2562, -2562, -2562, -2562, -2562, -2562, 28, 581, 612, 633, 155, -2562, 837, 1553, 837, 837, 979, 837, -2562, -2562, -2562, 463, -2562, -2562, -2562, -2562, 5014, -2562, -2562, -2562, -2562, -2562, -2562, 837, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 1397, -2562, 837, -2562, 682, -2562, -2562, 330, 330, 330, 330, 330, 330, 330, -2562, -2562, 330, 330, 330, 330, -2562, 584, -2562, 624, 1273, 586, 43, 434, 565, 517, 4582, 322, 5069, 4986, 697, 5014, 4019, -2562, 61, -75, 746, 689, 701, 91, 778, 190, -13, -2562, 743, -2562, 596, 557, 97, -2562, 443, -2562, 421, -2562, 0, 761, 125, -2562, -2562, 5258, -2562, -2562, -2562, 780, 829, -2562, -2562, -2562, -2562, 564, -2562, -2562, -2562, 858, -2562, -2562, 5258, 4637, -2562, -2562, 45, -2562, 859, 879, 492, -2562, 837, -2562, 887, 25, 880, 396, 406, 895, 27, -2562, -2562, -2562, 898, 900, 330, 330, 837, 837, -2562, -2562, 902, -2562, -2562, -2562, -2562, -2562, -2562, 2903, -2562, 904, 910, 837, -2562, 935, -2562, -2562, -2562, -2562, -2562, 837, 1275, 330, 3782, 837, 1397, 837, -2562, 931, -2562, 4124, -2562, -2562, 526, 938, 947, 837, -2562, -2562, 10, 955, 5258, 961, -2562, 1347, 837, 877, -2562, 495, 875, 1224, 429, 1007, -2562, -2562, -2562, -2562, -2562, -2562, 1029, -2562, 52, 8, 73, 360, 461, -2562, 837, 837, 479, -2562, 837, 776, 1039, -2562, 837, 837, -2562, 1047, 15, 20, 1059, 1397, -2562, -2562, -2562, 617, 837, -2562, -2562, 837, 837, 837, 837, 837, 837, 837, 837, 837, -2562, -2562, -2562, 837, -2562, 1073, 1077, -2562, 837, 740, -2562, -2562, -2562, -2562, -2562, -2562, 837, -2562, -2562, 837, -2562, -2562, 488, 488, 1092, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 837, 837, 1099, 1107, 1119, -2562, -2562, 837, 837, 837, -2562, 837, -2562, 1121, -2562, -2562, -2562, -2562, 883, -2562, 1125, -2562, 5258, 1129, -2562, 837, -2562, -2562, -2562, 837, 1127, 1133, 1133, 5258, 837, 837, 837, 837, 837, 837, -2562, 837, 5014, 1553, 837, 837, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 1553, 837, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 1140, -2562, 886, 2, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -35, -2562, -2562, -2562, 982, -2562, 379, -2562, -2562, -2562, -2562, -2562, 1159, -2562, 1160, -2562, -2562, 986, -2562, 1002, -2562, -2562, -2562, 1011, -2562, -2562, 1397, -2562, 3963, 837, -2562, 5258, 5258, 1397, -2562, -2562, 1397, -2562, -2562, -2562, -2562, 1397, -2562, -2562, 5258, 1397, 837, -2562, -2562, 5258, -2562, 1175, 419, 988, 12, -2562, -2562, 991, 5258, 4197, -2562, -2562, -2562, -2562, -2562, 1180, 1183, 1190, -2562, 1003, -2562, -2562, -2562, 837, -2562, -2562, 595, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 0, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 1134, 1136, 1141, -2562, -2562, 989, -2562, 837, 1211, 974, 4124, -2562, 1397, -2562, 1216, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 5258, 5258, 5258, -2562, -2562, 1222, 330, -2562, -2562, 1228, 1229, 1035, 837, -2562, 440, 1147, -2562, 1230, -2562, 540, 1150, 4553, 64, 1239, -2562, 1242, -2562, 1244, -2562, 187, -2562, 1245, 1248, -2562, 1251, -2562, -2562, -2562, 837, -2562, 4124, 4949, 945, 483, 1253, 618, 1157, -2562, -2562, -2562, 1232, 441, 1258, 1261, 14, 837, 465, 468, 35, 5258, 330, 1482, 466, 39, 114, 304, 13, -2562, 1250, 1252, 1268, -2562, -2562, -2562, -2562, -2562, 837, 837, 837, 837, -2562, -2562, 837, 1397, 837, -2562, 837, 1553, 837, 1277, 1397, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 110, 513, -2562, -2562, -2562, 1279, -2562, -2562, -2562, -2562, 1192, -2562, 1282, 1289, 1197, 1292, -2562, 1295, -2562, 1296, 1220, 1304, 543, 510, 614, 82, 621, 1307, 707, -2562, -2562, 1312, 1315, 1308, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 1316, -2562, -2562, 1319, -2562, -2562, 1323, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 837, 837, 837, 837, 837, -2562, 837, 933, 837, 837, -2562, 1490, -2562, 964, 1326, -2562, 997, 1332, -2562, -2562, -42, 837, 837, -2562, 1325, 837, 837, 837, 837, 837, 837, 837, 837, 837, -2562, -2562, 1343, 981, 837, 1341, 574, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 1350, 1363, 837, 837, 837, 1365, 330, 1366, 1367, 1397, 5258, -2562, -2562, -2562, -2562, -2562, 1397, -2562, -2562, 837, 837, 837, 5258, 837, 1553, 837, -2562, 837, -2562, -2562, -2562, -2562, -2562, 1369, 1371, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 322, -2562, 837, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 5258, 5258, 837, 1397, -2562, -42, -42, -42, 1397, 1553, 837, 1397, -2562, -2562, -2562, 837, -2562, -9, 1208, 1372, 1375, -2562, -2562, 1397, 5258, -2562, -2562, 1376, 1381, 1377, 1045, 837, 4954, 522, 812, -2562, -2562, -2562, 837, 1374, 140, 975, -2562, 1138, -2562, 1482, 1144, 416, 1118, 121, -2562, -2562, 837, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 837, 1394, -2562, -2562, -2562, -42, -2562, -2562, -2562, -2562, 5345, -2562, -2562, 1401, 1405, 837, 1407, 1409, 1410, -14, -14, -64, 1415, 1416, 1419, 1420, 1158, 1165, 1426, 1428, 1430, 42, 42, -64, 1432, 1433, -64, 1436, 1437, 5109, 1441, 1447, -2562, -2562, 1448, 1449, 710, -2562, 1434, 1454, 1456, 1461, -14, -64, 1463, 1465, -2562, 1467, -2562, -2562, 1397, 725, 1338, 1241, 1246, 1249, 1379, 785, 1254, 1480, 175, 1355, 1386, 817, 909, 1453, 1288, 1293, 1425, 1520, 1324, 119, 24, 616, 1298, 5014, 1482, 1500, 257, 1306, 1337, 1540, 29, -2562, -2562, 411, 1542, 1546, -2562, -2562, -2562, 1555, 1340, 59, 1482, 1358, -2562, -2562, -2562, 330, 1562, 1565, 837, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 18, -2562, 1053, -2562, 837, -2562, 837, -2562, -2562, -2562, -2562, 837, 837, 837, 618, 5258, -2562, 1567, 1049, -2562, -2562, 837, -2562, -2562, 837, 5014, 837, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 330, 837, -2562, 837, 618, 1569, -2562, 837, 837, -2562, 330, -2562, -2562, -2562, 709, 1571, 1572, -2562, -2562, -2562, -2562, 837, 837, -2562, -2562, 1553, 837, 837, -2562, -2562, -2562, -2562, 837, -2562, 837, 1469, -2562, 837, -2562, 837, 1470, -2562, 1580, -2562, 1108, 1108, 708, 1108, 1584, -2562, 730, -2562, -2562, 1590, 1591, 763, 1593, -2562, 1594, 1595, 1597, -2562, 770, 777, 1600, 1602, 1598, -2562, -2562, 1604, 1605, 1607, -2562, 1108, 1108, 1108, -2562, -2562, -2562, 837, 837, 837, 837, -2562, 837, 916, 5258, -2562, 837, -2562, 4124, 1397, -2562, -2562, 1610, -2562, -2562, 1614, -2562, -2562, -2562, -2562, 1586, 3782, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 837, 1612, 837, 837, 837, 864, -2562, 1606, 1618, 837, 837, -11, 1620, 330, 330, -2562, 1397, 837, 1626, 1627, 1628, -2562, 5258, -2562, 837, -2562, -2562, -2562, 837, 837, 837, 1397, 1629, 5258, -42, -2562, -2562, -2562, 1553, 837, 1630, -42, 837, 1601, 1603, 482, -2562, 1631, -2562, -2562, 721, -2562, -2562, 837, 1634, 1643, 837, -2562, 1639, 798, 5014, 1412, 1413, 1414, 108, 5258, 1417, -2562, 218, 1516, 179, 1421, 1422, 195, -2562, -2562, 432, 1486, 620, -98, 1482, -50, -2562, 1653, 1423, -2562, 449, -2562, -2562, -2562, -2562, 1482, 1455, -2562, -2562, -2562, -2562, -2562, 837, 980, -2562, 837, -2562, -2562, 837, 837, -2562, 837, -2562, 837, -2562, -2562, -2562, -2562, 1468, 837, -2562, 837, 32, -2562, -2562, 1656, 1659, -2562, 837, -14, -14, -14, -2562, -2562, -2562, -2562, -2562, -2562, 1661, -14, -14, -14, 579, -2562, -2562, 42, -14, -14, -14, -2562, -2562, -14, -14, 1662, -14, -14, 1663, 42, 758, -2562, 1666, 1667, 1670, -2562, 734, -2562, 1178, 1403, -2562, 800, -2562, 1424, 1671, 1672, 1673, 42, 42, -64, 1675, 1676, -64, 1678, 1680, 1681, -14, -14, -2562, 1684, -14, -14, -2562, 1685, -2562, -2562, -2562, -2562, -2562, -2562, 330, -2562, -2562, -2562, 5014, 1005, 837, 1081, 1149, 3, -2562, -2562, -2562, 395, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 1686, 837, -2562, 330, 1687, 837, 5258, 330, 1352, 1464, 1466, 203, 206, 1472, 234, 1393, 1400, 1694, 1698, 1702, 785, 1703, 1704, 1705, 1411, 1418, 1056, 1707, 837, 1095, 1473, -2562, -2562, 330, 5014, -2562, -2562, 5014, 837, 63, 1709, 837, 1397, 1553, 330, -2562, 5014, 5258, 837, -2562, -2562, -2562, 330, 330, 5014, -2562, -2562, -2562, -2562, -2562, -2562, 5014, 837, 330, -2562, -2562, -2562, 837, -2562, -2562, 1710, 837, 1494, 169, 837, 1497, 837, 178, 837, -2562, 837, 1498, 1504, 837, 837, 837, 837, 837, 837, 837, 837, 17, 837, 837, 1507, -2562, 837, 837, 837, 837, -2562, 5258, 1397, 1715, 5258, 5258, 837, 837, 1397, 1553, -2562, 837, 837, 837, 5258, -2562, 837, 837, -2562, -2562, -2562, 1723, -2562, -2562, -2562, -2562, -2562, -2562, 837, 837, -2562, 837, 837, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 1725, 1728, 1731, -2562, -2562, 1108, 1732, 1733, 1735, -2562, 1736, 1737, 1738, 1739, 1741, -2562, 1742, -2562, -2562, -2562, 1743, 1745, 1747, -2562, 1748, 1749, 1752, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 837, 837, 1757, 5258, -2562, 837, 1397, -2562, -2562, -2562, 3782, 837, 1397, 837, 837, 837, -2562, 837, 837, 1753, 837, 1755, 1730, 837, 837, -2562, -2562, 1756, 5258, -2562, -2562, -2562, 837, -2562, -2562, -2562, 1397, -2562, 1187, 837, 1187, -42, -2562, 1397, 5258, 837, 837, 1759, -2562, -2562, -2562, -2562, -2562, 837, -2562, -2562, -2562, -2562, -2562, 837, 1760, -2562, -2562, 5258, 1762, 1763, 1764, 1766, 5258, 1397, -2562, 5258, 5258, 5258, 5014, 5258, 1397, 5258, -2562, -2562, 5258, -2562, -2562, 5014, 5258, 5258, 5258, 5014, 5258, -2562, 5258, 5258, 837, -2562, -2562, 5258, 5258, 5258, -2562, 5258, 5258, -2562, -2562, -2562, -2562, 5258, 5258, -2562, -2562, -2562, 5258, 1767, 1768, 1771, 1772, 5258, -2562, -2562, 837, 837, -2562, -2562, 1761, 837, -2562, -2562, 1773, 1775, -2562, 837, -2562, -2562, -2562, -14, -2562, -2562, -2562, 1776, 1777, 1778, -2562, -2562, -64, 1780, 1782, 1783, -14, -2562, -2562, -2562, -2562, -2562, 42, -2562, -2562, 1787, -14, 1817, 1818, 1819, 42, 42, -64, 1788, 1822, 1823, 1026, -2562, 1032, -2562, 1126, 1479, 1824, 1825, 1826, 42, 42, -64, 1828, 1830, -64, 1831, 1489, 1832, 1833, 1836, 42, 42, -64, 1839, 1841, -64, 1842, 1524, 1843, 1845, 1846, 42, 42, -64, 1848, 1849, -64, 1850, 1851, 1852, 1853, 42, 42, -64, 1865, 1866, 1867, 42, -2562, -2562, -2562, -2562, -2562, 1870, -2562, -2562, 1871, 42, 1872, 1874, -2562, -2562, -14, -2562, -2562, 1875, -2562, 1397, -2562, 5258, 837, 837, 5258, 837, 1876, 1338, -2562, -2562, -2562, -2562, -2562, -2562, 1877, 5014, 330, 1881, 5014, 1397, -2562, 1883, 1338, 837, 837, 837, 837, 837, 837, 837, 837, 837, 1885, 1886, -2562, -2562, -2562, 1891, -2562, -2562, -2562, 1887, 1893, -2562, -2562, -2562, 837, 5258, 837, 1894, 1338, 330, 1397, 1553, 1397, 837, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 837, 1553, 1553, -2562, 1397, 1553, 1397, 837, -2562, -2562, 1397, 1553, 1397, 1553, -2562, -2562, -2562, -2562, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 2906, -2562, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 3963, 1897, 837, -2562, 837, 837, 837, 1901, 1903, -2562, -2562, 1397, -42, 1904, 1397, 1397, -2562, -2562, 1553, -2562, 837, -2562, 1905, 1397, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 1108, 1108, 1108, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 837, -2562, -2562, 837, -2562, 837, 1397, 837, -2562, 1553, 837, -2562, 837, -2562, 1815, 1906, 1907, -2562, 1910, 837, 837, 1911, 1397, 5258, -2562, -2562, 837, -2562, 837, -2562, -42, 721, 837, 1912, -2562, 837, 0, -2562, -2562, 1913, 1914, 1915, 1926, 1397, -2562, 721, 721, 721, 1397, -2562, 721, -42, 721, 721, 1397, -2562, 721, 721, 721, 1397, -2562, 721, 721, 1397, 5258, 721, 1397, 721, 721, 1397, 721, 1397, -2562, 1927, 1940, 1942, 1946, 1397, -2562, -2562, 1948, 0, 1949, -2562, 837, -2562, -2562, -2562, -2562, 1952, -2562, -2562, -2562, -2562, -14, 42, -2562, -2562, -2562, -2562, -2562, -2562, 1953, -2562, -2562, 42, 1954, 1956, 1957, 42, 42, -64, 1959, 1961, 1962, 1963, 1964, 1965, 42, 42, -64, 1967, 1968, 1969, 1972, 1973, 1974, 42, 42, -64, 1976, 1977, 1978, 42, -14, -14, -14, -14, -14, 1980, -14, -14, 1981, 42, 42, -14, -14, -14, -14, -14, 1982, -14, -14, 1983, 42, 42, -2562, -2562, -2562, -2562, -2562, 1984, -2562, -2562, 1985, 42, -2562, -2562, -2562, -2562, -2562, 1986, -2562, -2562, 42, -2562, 42, 1988, -2562, 1991, 1992, -2562, 4124, -2562, 721, 1994, 5014, 721, 837, 5258, 1996, -2562, 721, -2562, -2562, -2562, 721, -2562, -2562, 5258, 1998, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, -2562, -2562, -2562, 5014, 721, 837, 5258, 1999, -2562, 1553, 1553, 1553, 837, 5014, 1553, 837, 1553, 1553, 5258, 5014, 1553, 837, 1553, -2562, 837, 837, 837, 837, 837, 837, 1338, 837, 837, 837, 1491, 1502, 1505, 1510, 1527, 1535, 1638, 2906, -2562, 1664, -2562, -2562, 1338, 837, 837, 837, 837, 1338, 837, 837, 837, 837, 837, 837, 1397, 837, 1619, 1338, 837, 837, -2562, -2562, -42, 330, 2001, 2003, -2562, -2562, -2562, -2562, -2562, -42, -2562, -2562, -2562, 837, -2562, -2562, 1553, 837, -2562, -2562, -2562, 930, 2004, 2005, -2562, 837, 2007, 1187, -2562, 721, -2562, -2562, -2562, -2562, 2010, -2562, -2562, -2562, 2008, 2011, 5258, 2012, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -42, 721, -2562, -42, -2562, -2562, -42, -2562, -42, 2014, 2016, 5258, 2019, -2562, 2020, -2562, -2562, 837, -2562, -2562, -14, 42, -2562, -14, -14, -14, -14, -14, 2015, -14, -14, 42, -2562, -2562, -2562, -2562, -2562, 2023, -2562, -2562, 42, -14, -14, -14, -14, -14, 2024, -14, -14, 42, -14, -2562, -2562, -2562, -2562, -2562, 42, -2562, -2562, 2030, -14, -14, -2562, -2562, -2562, -2562, -2562, 42, -2562, -2562, 2033, -14, -2562, 42, 2034, -2562, 42, -2562, -2562, 42, -2562, -2562, 1397, -2562, 5014, 721, -2562, -2562, 2035, 1397, 837, -2562, -2562, 1397, 837, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 837, 837, 721, -2562, -2562, 2036, 1397, 837, 1553, -2562, -2562, -2562, 721, -2562, 837, -2562, 1553, -2562, 721, 721, -2562, 5258, 1338, -2562, 837, 2037, 2037, 837, 837, 2037, 1338, 2037, -2562, 5258, 785, 2038, 2040, 2041, 2042, 2043, 2045, -2562, 330, 1338, 2037, 2037, 837, 837, 1338, 837, 837, 837, 837, 837, -2562, 1553, 837, 2046, -2562, -2562, 837, 2037, 330, 6, -2562, 2047, 330, -2562, -2562, -2562, 2048, 837, -2562, 2049, 2051, 2044, 837, -2562, -2562, -2562, 2052, -6, 5258, -2562, -2562, -2562, -2562, -2562, -2562, 2053, -6, 5258, -2562, 837, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 42, -2562, -2562, -14, 42, -2562, -2562, -2562, -2562, -2562, -2562, 42, -2562, -2562, -14, -2562, -14, 42, -2562, -2562, -14, 42, -2562, -2562, 42, -2562, -2562, 837, 721, -2562, -2562, 5014, 5258, 837, 5258, 837, -2562, -2562, -2562, 5014, 5258, 837, -2562, -2562, 5258, -2562, -2562, -2562, 721, -2562, 2055, -2562, -2562, -2562, 1338, 837, -2562, 2056, -2562, -2562, 1397, 2057, -2562, 2060, -2562, -2562, -2562, -2562, -2562, 2061, -2562, -2562, 1338, 837, 2062, -2562, -2562, 837, 5258, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 6, 1484, 1482, -2562, -2562, 2063, 2064, -2562, 2050, 2066, 78, 5258, -2562, -2562, -2562, -2562, 5258, -2562, -2562, 2067, -14, -2562, -2562, -14, -2562, -2562, -14, -2562, -14, -2562, 4124, -2562, 721, -2562, 721, 837, 721, 2068, 721, -2562, 721, 837, 721, 837, -2562, -2562, -2562, -2562, 2069, -2562, 837, -2562, -2562, 2071, -2562, 837, -2562, -2562, -2562, 2070, 837, -2562, -2562, -2562, 1397, -2562, -2562, -2562, 1484, -2562, 1696, 1717, 1482, -2562, 2072, 2074, 2078, -2562, -2562, -2562, -2562, -2562, -2562, 837, 1397, 1397, -2562, -2562, -2562, -2562, -2562, 721, -2562, -2562, 2079, -2562, 5014, -2562, -2562, 2080, -2562, 1338, -2562, -2562, 1338, 837, -2562, -2562, 837, -2562, 1338, 837, -2562, 5258, -2562, 1696, -2562, 330, -2562, 2083, 2085, -2562, 837, -6, -6, 2086, 5014, 1397, -2562, 5014, -2562, -2562, 837, 2081, -2562, 837, 721, -2562, -2562, -2562, 2087, 2088, -2562, -2562, -2562, 1397, -2562, -2562, 1397, -2562, -2562, 2090, -2562, -2562, 2091, -2562, -2562, -2562, -2562, -2562, 1338, -2562, 1338, -2562, -2562, -2562, -2562, -2562 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -2562, -2562, -4, -2562, 297, -2562, -1596, -893, 1523, -2562, 675, -326, 1844, -49, 99, -1638, 1655, 1951, -869, 570, -2562, -857, 729, 1581, -2562, -928, -2562, -2511, -1123, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -1443, -2562, -2562, -2562, -2562, -2562, -651, -2562, -2562, -2562, -2562, -2562, -2562, 33, -2562, -2562, -2562, -2562, -184, -652, -1350, -536, -2562, -2562, -2562, -2562, -601, -596, -2562, -2562, -2561, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, 1373, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562, -2562 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1235 static const yytype_int16 yytable[] = { 70, 347, 1878, 1240, 1241, 1242, -1090, 2024, 107, 2026, 1065, 1068, 109, 1566, 1091, 1571, 885, 2642, 1104, 772, 67, 68, 1948, 1494, 775, 376, 2637, 67, 68, 289, 619, 1060, 636, 413, 1476, 1632, 311, 305, 67, 68, 319, 1601, 1602, 1603, 1095, 341, 67, 68, 352, 610, 67, 68, 1731, 560, 367, 1189, 112, 408, 373, 1350, 1460, 380, 67, 68, 1323, 383, 385, 249, 1702, 394, 304, 1070, 400, 404, 745, 1071, 407, 109, 67, 68, 411, 67, 68, 67, 68, 412, 741, 67, 68, 320, 1898, 67, 68, 67, 68, 1484, 554, 1403, 425, 1337, 434, 435, 439, 441, 1354, 846, 531, 1357, 1849, 109, 258, 1899, 1105, 274, 1900, 275, 1706, 839, 1106, 445, 532, 1248, 1703, 321, 1388, 1901, 114, 67, 68, 1681, 842, 1097, 291, 545, 2741, 57, 67, 68, 1318, 748, 1333, 585, 533, 67, 68, 1072, 1458, 112, 1902, 386, 1123, 972, 250, 1461, 457, 849, 555, 704, 568, 742, 422, 534, 401, 251, 1073, 1903, 54, 561, 1334, 1153, 1707, 259, 67, 68, 67, 68, 886, 535, 490, 2762, 536, 67, 68, 511, 55, 1704, 423, 847, 1485, 109, 293, 114, 79, 260, 1338, 1850, 160, 252, 1351, 177, 1690, 978, 1428, 256, 537, 538, 303, 117, 850, 379, 268, 120, 1190, 118, 119, 444, 1694, 248, 973, 1319, 1124, 1061, 546, 114, 1866, 1708, 1074, 1868, 483, 276, 366, 1249, 390, 484, 559, 611, 1154, 2767, 2768, 67, 68, 261, 617, 253, 1851, 1685, 695, 269, 979, 266, 414, 306, 743, 1633, 402, 1871, 254, 539, 643, 644, 1311, 1732, 705, 2703, 620, 540, 309, 377, 2638, 485, 1477, 562, 117, 679, 307, 279, 102, 322, 118, 119, 325, 681, 684, -1090, 687, 691, 512, 693, 520, 637, 525, 529, 409, 486, 773, 103, 122, 703, 556, 776, 1062, 1125, 120, 114, 117, 712, 714, 1107, 109, 1462, 118, 119, 162, 583, 1949, 1495, 887, 1096, 586, 239, 1075, 1098, 541, 542, 264, 67, 68, 403, 757, 758, 763, 296, 765, 277, 109, 387, 768, 769, 487, 1459, 1429, 1682, 391, 1305, 1486, 152, 104, 781, 783, 153, 154, 784, 785, 786, 787, 788, 789, 790, 791, 792, 310, 122, 1469, 793, 109, 69, 1119, 1126, 796, 798, 1651, 396, 569, 2704, 980, 340, 799, 1655, 112, 800, 1488, 488, 489, 1686, 117, 392, 393, 689, 388, 1927, 118, 119, 326, 122, 543, 570, 809, 810, 1932, 262, 1099, 624, 327, 814, 815, 816, 1904, 817, 1430, 351, 152, 270, 1691, 1526, 153, 154, 2705, 2706, 372, 67, 68, 824, 114, 881, 271, 825, 751, 105, 1695, 328, 830, 831, 832, 833, 834, 835, 1867, 836, 1478, 1869, 840, 841, 152, 981, 1539, 263, 153, 154, 114, 1982, 1431, 1687, 982, 843, 944, 945, 58, 853, 575, 1696, 459, 460, 461, 462, 463, 464, 465, 1872, 576, 466, 467, 468, 469, 122, 754, 112, 1711, 1471, 114, 294, 96, 1054, 67, 68, 983, 272, 1659, 1036, 219, 295, 735, 336, 349, 1688, 354, 577, 97, 59, 615, 630, 1852, 946, 329, 117, 220, 365, 1092, 867, 869, 118, 119, 1228, 625, 1037, 1848, 60, 631, 106, 801, 759, 355, 1826, 152, 369, 1829, 877, 153, 154, 1043, 117, 370, 1043, 1472, 120, 397, 118, 119, 932, 112, 330, 1863, 838, 67, 68, 61, 955, 356, 357, 736, 854, 1244, 1055, 898, 1128, 956, 957, 716, 641, 642, 117, 358, 62, 1891, 371, 63, 118, 119, 80, 578, 1044, 98, 1144, 1044, 398, 572, 64, 1093, 969, 1209, 928, 696, 331, 802, 1101, 686, 626, 1210, 1853, 1293, 760, 1067, 632, 122, 1744, 1745, 375, 988, 406, 1697, 899, 900, 958, 332, 81, 723, 579, 359, 360, 594, 337, 99, 616, 416, 943, 717, 1712, 697, 418, 122, 1313, 67, 68, 855, 1129, 746, 749, 752, 947, 948, 1145, 120, 1479, 1056, 1705, 882, 627, 1854, 333, 420, 987, 1746, 152, 1038, 100, 1714, 153, 154, 755, 122, 803, 1294, 595, 1698, 334, 442, 901, 1063, 1094, 628, 1076, 382, 902, 725, 698, 1146, 2514, 919, 152, 580, 1713, 761, 153, 154, 82, 1295, 1149, 573, 1111, 1112, 1113, 1114, 1043, 1155, 1115, 497, 1117, 458, 1118, 338, 1120, 471, 1039, 498, 120, 737, 1045, 949, 152, 1045, 762, 470, 153, 154, 481, 1130, 950, 951, 550, 903, 1046, 1047, 493, 1046, 1047, 1544, 1372, 1040, 1064, 361, 581, 362, 1182, 1044, 904, 1373, 1374, 1545, 959, 960, 65, 522, 804, 495, 1150, 718, 905, 805, 952, 780, 1778, 1156, 906, 907, 67, 68, 1662, 1663, 908, 1779, 1780, 1296, 548, 797, 596, 83, 1170, 1171, 1172, 1173, 1174, 719, 1175, 1177, 1179, 1180, 699, 1747, 1748, 1160, 1567, 1131, 1375, 1764, 1765, 313, 1147, 1192, 1193, 549, 2027, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 551, 1550, 1573, 1206, 1207, 558, 1781, 961, 363, 909, 1297, 1048, 1049, 84, 1048, 1049, 962, 963, 1393, 731, 564, 964, 1213, 1214, 1215, 1811, 1812, 240, 910, 1664, 1766, 552, 911, 565, 912, 1579, 1408, 1161, 1568, 1223, 1224, 1225, 1587, 1227, 567, 1229, 1749, 1230, 965, 1591, 1434, 67, 68, 1298, 241, 1750, 1751, 913, 914, 1045, 1574, 584, 1409, 590, 1233, 915, 1235, 2286, 2287, 2288, 314, 592, 1813, 1046, 1047, 613, 1238, 1435, 67, 68, 1436, 315, 1464, 916, 1245, 1394, 1700, 1752, 1465, 1247, 1151, 1670, 1701, 1580, 614, 1410, 622, 1157, 819, 820, 1588, 1411, 618, 2087, 1261, 1263, 1412, 1592, 1376, 1377, 1437, 634, 1303, 639, 1306, 1309, 640, 298, 645, 939, 677, 1314, 242, 2100, 1413, 678, 1320, -1232, 1652, 1363, 67, 1609, 1782, 1783, 1626, 1321, 243, 1438, 2137, 917, 1439, 2140, 1442, 1414, 67, 68, 694, 67, 1176, 2148, 1329, 680, 2151, 701, 1395, 1396, 1767, 1768, 1671, 1415, 2159, 316, 702, 2162, 1048, 1049, 2188, 1234, 1397, 1443, 2169, 707, 1444, 1079, 317, 1445, 709, 1378, 1102, 1183, 1184, 2198, 1299, 1162, 1569, 715, 1379, 1380, 1416, 67, 68, 1381, 244, 67, 68, 67, 68, 1402, 1814, 1815, 2508, 1784, 1446, 1308, 1205, 721, 1575, 1398, 2672, 2217, 1785, 1786, 1186, 1187, 299, 1787, 598, 1463, 1382, 67, 68, 1842, 1025, 739, 1417, 1769, 2683, 1672, 1673, 1447, 436, 1300, 1448, 245, 1770, 1771, 1026, 1418, 1487, 1581, 2600, 1674, 1788, 246, 740, 1027, 1589, 1493, 1419, 766, 1440, 2104, 2105, 1593, 767, 1028, 1301, 2113, 2114, 67, 1260, 1521, 770, 1522, 1529, 1530, 1772, 1816, 1523, 1524, 1525, 1884, 1885, 1717, 778, 1420, 1817, 1818, 1531, 1441, 1675, 1532, 599, 1535, 1029, 300, 1496, 1421, 794, 1422, 1423, 1497, 280, 795, 301, 67, 68, 1845, 2106, 1537, 437, 1538, 2277, 1030, 2115, 1541, 1542, 808, 1819, 67, 68, 1888, 1498, 1499, 811, 1500, 1501, 827, 828, 1548, 1549, 600, 812, 1468, 1551, 1552, 1502, 1217, 72, 1424, 1553, 2598, 1554, 73, 813, 1556, 818, 1557, 1503, 1504, 1718, 821, 1449, 1613, 2756, 823, 1505, 426, 1031, 1506, 2759, 2122, 2123, 1909, 86, 428, 844, 2622, 845, 601, 852, 1560, 1561, 67, 68, 1847, 1507, 1400, 1401, 74, 2308, 1450, 1508, 1509, 857, 859, 1510, 1604, 1605, 1606, 1607, 438, 1608, 1610, 1032, 1534, 1612, 861, 863, 865, 879, 2324, 884, 75, 1789, 889, 894, 1451, 2124, 895, 2789, 1618, 2790, 1790, 1791, 896, 930, 897, 1033, 1719, 1720, 920, 1621, 922, 1623, 1624, 1625, 1627, 924, 1967, 926, 1630, 1631, 1721, 2107, 2108, 86, 929, 281, 1639, 2116, 2117, 934, 282, 1511, 283, 1644, 938, 76, 942, 1645, 1646, 1647, 940, 941, 953, 954, 1034, 966, 1035, 1792, 1653, 2670, 2671, 1656, 974, 2674, 976, 2676, 977, 1053, 984, 1722, 2362, 985, 1666, 986, 1051, 1668, 1042, 2681, 2682, 2371, 1058, 87, 2686, 2687, 1059, 1108, 2690, 1109, 2380, 77, 1110, 2691, 2692, 1512, 1562, 1563, 67, 68, 1513, 1121, 2109, 1133, 1137, 723, 88, 1135, 2118, 1134, 89, 2110, 2111, 1620, 1136, 1514, 1138, 2119, 2120, 1716, 1139, 1140, 1723, 1564, 1515, 1724, 1725, 1141, 1726, 1142, 1727, 1159, 1166, 2125, 2126, 682, 1729, 1164, 1730, 2727, 1165, 1167, 2728, 2112, 1168, 1736, 472, 2731, 1169, 2121, 1185, 1516, 1517, 2734, 1490, 87, 1188, 1194, 2737, 90, 724, 67, 68, 725, 473, 1400, 1401, 2468, 1204, 1660, 67, 68, 1518, 1208, 1211, 67, 68, 1862, 88, 1400, 1401, 474, 2023, 2481, 1677, 1793, 1794, 1212, 2486, 1216, 1218, 1219, 1252, 475, 1231, 91, 1232, 1253, 726, 1254, 1257, 1259, 2127, 92, 93, 683, 1258, 710, 1536, 1310, 476, 2128, 2129, 477, 1304, 1312, 1519, 1316, 1543, 1322, 1843, 1844, 1846, 1402, 478, 1326, 2775, 2500, 1800, 2778, 1327, 90, 1330, 727, 1331, 1332, 2504, 1801, 1802, 1340, 1341, 1345, 1856, 2130, 1342, 1343, 1859, 2786, 1346, 1402, 2788, 1347, 446, 1348, 1795, 1349, 1355, 1356, 1383, 2791, 2792, 1358, 1359, 1796, 1797, 479, 1365, 91, 1798, 1887, 1889, 1402, 1367, 1368, 1370, 92, 93, 711, 1384, 1897, 728, 1385, 1907, 729, 1803, 2521, 1386, 1389, 2523, 1914, 1390, 2524, 1391, 2525, 1404, 1799, 67, 68, 1890, 1405, 1400, 1401, 1406, 1921, 1407, 1427, 730, 1426, 1923, 731, 1432, 1433, 1925, 1452, 1928, 1929, 1181, 1931, 1933, 1934, 732, 1937, 1841, 447, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1950, 1952, 1953, 1636, 1637, 1955, 1956, 1957, 1958, 1453, 448, 449, 450, 1456, 1454, 1964, 1965, 451, 1455, 1457, 1968, 1969, 1970, 1466, 2592, 1972, 1973, 2595, 1470, 2597, 452, 1473, 1474, 1475, 1480, 1483, 453, 1975, 1976, 1481, 1977, 1978, 2609, 2610, 67, 68, 1894, 454, 1482, 1896, 426, 427, 428, 1489, 1491, 2588, 2220, 1492, 1912, 2624, 1528, 1080, 1540, 2596, 1546, 1547, 1918, 1555, 1558, 1081, 2224, 2225, 1559, 1920, 2227, 1082, 2608, 1572, 1804, 1805, 2231, 2613, 2233, 1577, 1578, 1583, 1617, 1584, 1585, 1586, 1597, 1998, 1999, 1595, 1083, 1596, 2001, 1598, 1599, 1600, 1628, 2003, 2006, 1615, 2008, 2009, 2010, 1616, 2011, 2012, 1629, 2014, 1622, 1635, 2017, 2018, 222, 1084, 1640, 1641, 1642, 1649, 1654, 2021, 1661, 1085, 1667, 1657, 2282, 1658, 2025, -446, 1669, 1678, 1679, 1680, 2030, 2031, 1684, 1689, 1699, 223, 1692, 1693, 2033, 1709, 1715, 1806, 1734, 1728, 2034, 1735, 1710, 1740, 1759, 1762, 1807, 1808, 455, 1773, 1775, 1809, 1086, 1777, 1821, 1822, 1823, 1827, 1828, 2294, 1087, 1830, 1831, 1832, 224, 1820, 1835, 1353, 1838, 1855, 1858, 225, 1873, 2062, 1839, 1864, 1875, 1865, 1810, 1874, 1876, 226, 227, 1870, 1877, 1879, 1880, 1881, 228, 1886, 1882, 1906, 1926, 1924, 2005, 1930, 1938, 1883, 1961, 2076, 2077, 1088, 1939, 1857, 2079, 1954, 1974, 1861, 1979, 229, 2082, 1980, 1089, 1981, 2016, 1983, 1984, 1985, 1986, 1987, 2131, 1988, 1989, 1990, 1991, 230, 1992, 1090, 1993, 1994, 2142, 1995, 1996, 1892, 1997, -1234, 2013, 2015, 2019, -1103, 231, 2032, 2035, 2078, 1910, 2037, 2038, 2039, 232, 2040, 2071, 2072, 1915, 1916, 2073, 2074, 2080, 2081, 2047, 2084, 2085, 2086, 2088, 1922, 2089, 2153, 2090, 2053, 233, 2093, 2101, 2058, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 2095, 2096, 2097, 234, 2102, 2297, 2103, 2132, 2133, 2134, 2138, 2755, 2139, 2472, 2141, 2143, 2144, 2183, 2184, 2145, 2186, 2149, 1402, 2150, 2473, 2152, 2154, 2474, 2155, 2156, 2160, 2161, 2475, 2163, 2164, 2165, 2166, 1402, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2170, 2171, 2476, 2172, 235, 2174, 2175, 2177, 290, 2178, 2477, 2180, 2187, 2189, 2213, 236, 2215, 2193, 1402, 2197, 2208, 2209, 2211, 2222, 2446, 2447, 2448, 2210, 2212, 2452, 2216, 2454, 2455, 2269, 2223, 2459, 2274, 2461, 2275, 2278, 2284, 2229, 2298, 2299, 237, 2300, 2303, 2495, 2311, 2314, 2315, 2316, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2317, 2343, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2344, 2270, 2345, 2271, 2272, 2273, 2346, 2348, 826, 2350, 2191, 2352, 2355, 2195, 2357, 443, 2358, 2359, 2363, 2283, 2364, 2506, 2365, 2366, 2367, 2368, 2372, 2373, 2248, 2374, 2696, 163, 2375, 2376, 2377, 2381, 2382, 2478, 2383, 2390, 2393, 2401, 2404, 2407, 2408, 2410, 164, 2413, 165, 2289, 2414, 2415, 2290, 2418, 2291, 2424, 2293, 2428, 2445, 2295, 2502, 2296, 2503, 2480, 2510, 2511, 2513, 2517, 2301, 2302, 2516, 2518, 2520, 2526, 2539, 2306, 2527, 2307, 166, 2529, 2530, 2310, 2543, 2550, 2312, 509, 167, 516, 519, 2556, 524, 528, 2560, 2563, 2570, 2578, 2590, 807, 2601, 2602, 2696, 2603, 2604, 2605, 2606, 2634, 2621, 2628, 2630, 2632, 2633, 2701, 2636, 2641, 2669, 2675, 2742, 2678, 588, 2679, 2680, 2685, 2479, 2699, 2700, 2702, 2711, 2721, 2729, 2735, 1753, 2732, 2744, 2351, 2745, 603, 608, 2746, 2751, 2754, 2777, 168, 1763, 2764, 2693, 2765, 2769, 2781, 2782, 2785, 2787, 2743, 2739, 0, 1143, 343, 0, 0, 0, 0, 1824, 1825, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2581, 0, 0, 0, 0, 0, 0, 0, 2584, 0, 0, 2416, 688, 2313, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 170, 171, 2192, 0, 0, 0, 0, 172, 0, 173, 0, 0, 0, 0, 0, 2619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2349, 0, 0, 0, 2422, 0, 0, 0, 174, 0, 0, 2218, 0, 0, 0, 0, 0, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 0, 0, 0, 0, 0, 2443, 0, 0, 0, 0, 0, 0, 2449, 0, 0, 2453, 0, 0, 0, 0, 0, 2460, 0, 0, 2462, 2463, 2464, 2465, 2466, 2467, 1402, 2469, 2470, 2471, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 1402, 2482, 2483, 2484, 2485, 1402, 2487, 2488, 2489, 2490, 2491, 2492, 0, 2494, 822, 1402, 2498, 2499, 0, 0, 0, 0, 0, 0, 0, 829, 0, 0, 0, 0, 0, 2420, 0, 2505, 837, 0, 0, 2507, 0, 0, 0, 2509, 0, 0, 0, 2512, 779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2441, 0, 0, 0, 0, 0, 0, 345, 0, 346, 2451, 0, 0, 0, 0, 0, 2458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2531, 0, 0, 0, 0, 0, 0, 0, 868, 0, 0, 870, 871, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 875, 0, 0, 0, 0, 878, 0, 0, 0, 0, 0, 0, 0, 0, 890, 892, 0, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 0, 0, 0, 0, 2572, 0, 0, 0, 2574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2575, 2576, 0, 0, 0, 0, 0, 2580, 0, 0, 0, 0, 0, 0, 2583, 935, 936, 937, 0, 0, 0, 0, 1402, 0, 2589, 0, 866, 2593, 2594, 0, 1402, 0, 0, 872, 0, 0, 873, 0, 0, 0, 0, 874, 0, 1402, 0, 876, 2611, 2612, 1402, 2614, 2615, 2616, 2617, 2618, 2092, 0, 2620, 0, 0, 0, 2623, 0, 2098, 2099, 0, 0, 0, 0, 0, 0, 0, 2631, 0, 0, 1078, 0, 2635, 2135, 2136, 0, 0, 0, 0, 2568, 0, 0, 0, 0, 2146, 2147, 0, 0, 0, 2644, 0, 1336, 0, 0, 0, 2157, 2158, 0, 0, 0, 0, 933, 0, 0, 0, 2167, 2168, 0, 0, 0, 0, 2173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2176, 0, 1387, 2655, 0, 0, 0, 0, 0, 2660, 0, 2662, 0, 0, 0, 2501, 0, 2666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1402, 2673, 0, 0, 0, 0, 0, 0, 0, 0, 2309, 0, 0, 0, 0, 0, 0, 2716, 1402, 2684, 0, 0, 0, 2688, 2319, 2320, 2321, 0, 0, 2323, 0, 2325, 2326, 0, 0, 2328, 2329, 2330, 0, 0, 2332, 2333, 2707, 0, 2336, 0, 2338, 2339, 0, 2341, 1116, 0, 0, 0, 0, 0, 0, 1122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2719, 0, 0, 0, 0, 0, 2724, 0, 2726, 0, 0, 1221, 0, 2658, 0, 2730, 0, 0, 0, 0, 2733, 2664, 0, 1226, 0, 2736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2747, 0, 0, 0, 0, 0, 0, 1236, 1237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1402, 0, 0, 1402, 2757, 0, 0, 2758, 0, 1402, 2760, 0, 0, 1256, 0, 0, 0, 0, 0, 0, 0, 2766, 0, 0, 0, 0, 0, 0, 0, 0, 2417, 2776, 0, 2421, 2779, 0, 0, 0, 2425, 0, 0, 0, 2426, 0, 0, 0, 0, 0, 0, 0, 0, 1220, 0, 0, 0, 2607, 0, 0, 1222, 1402, 1325, 1402, 2442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2625, 0, 0, 0, 2629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2753, 1239, 2354, 0, 0, 0, 1243, 0, 0, 1246, 0, 0, 2356, 0, 0, 0, 2360, 2361, 0, 0, 0, 1255, 0, 0, 0, 2369, 2370, 0, 0, 0, 2771, 0, 0, 2774, 2378, 2379, 0, 1467, 0, 0, 2384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2394, 2395, 0, 0, 0, 2515, 0, 0, 0, 0, 0, 2405, 2406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2409, 0, 0, 0, 0, 0, 0, 0, 0, 2411, 0, 2412, 0, 2522, 0, 646, 647, 1527, 0, 1737, 1738, 1739, 0, 0, 0, 0, 0, 1533, 0, 1741, 1742, 1743, 0, 0, 0, 0, 1754, 1755, 1756, 0, 0, 1757, 1758, 0, 1760, 1761, 0, 1392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2244, 0, 648, 0, 0, 1833, 1834, 0, 649, 1836, 1837, 2245, 0, 0, 0, 650, 0, 651, 0, 0, 0, 0, 652, 0, 0, 653, 0, 0, 2569, 0, 0, 654, 0, 0, 0, 0, 1080, 2246, 0, 0, 0, 655, 0, 0, 1081, 0, 0, 656, 0, 2577, 1082, 0, 0, 0, 0, 657, 0, 0, 0, 2582, 1611, 0, 0, 0, 0, 2585, 2586, 0, 0, 1083, 658, 0, 0, 2247, 0, 0, 0, 1619, 2763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 659, 0, 0, 1084, 0, 0, 0, 0, 0, 0, 0, 1085, 0, 0, 0, 0, 660, 0, 0, 0, 0, 1643, 0, 0, 0, 661, 662, 0, 0, 0, 0, 0, 1650, 0, 2533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2542, 663, 0, 0, 1086, 0, 0, 0, 0, 2544, 0, 0, 1087, 0, 0, 1676, 0, 0, 2553, 0, 1683, 0, 664, 0, 0, 2555, 0, 0, 0, 0, 0, 67, 68, 0, 0, 665, 2559, 666, 0, 1614, 0, 0, 2562, 2656, 0, 2564, 0, 110, 2565, 0, 667, 0, 0, 1088, 0, 668, 0, 0, 0, 0, 0, 669, 0, 2668, 1089, 0, 0, 285, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1638, 1090, 0, 0, 0, 0, 112, 0, 671, 0, 0, 2248, 0, 2249, 0, 1648, 0, 0, 0, 0, 0, 672, 673, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 2717, 0, 2718, 0, 2720, 0, 2722, 0, 2723, 675, 2725, 0, 2250, 0, 0, 0, 0, 0, 0, 0, 1840, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2645, 0, 0, 0, 2647, 0, 0, 1860, 115, 0, 0, 2648, 0, 0, 0, 0, 0, 2651, 2750, 0, 0, 2653, 0, 0, 2654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1893, 0, 0, 1895, 0, 0, 0, 0, 0, 0, 286, 0, 1911, 1913, 0, 0, 0, 0, 2083, 0, 1917, 0, 0, 0, 0, 0, 0, 1919, 2780, 0, 120, 2091, 0, 0, 0, 121, 0, 0, 0, 0, 0, 2094, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1959, 0, 0, 1962, 1963, 0, 0, 0, 0, 0, 0, 0, 0, 1971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 2179, 0, 1908, 0, 0, 0, 0, 0, 0, 0, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 2000, 0, 0, 109, 0, 0, 0, 2004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 1960, 2020, 0, 0, 0, 0, 1966, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 2029, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 2036, 0, 0, 0, 0, 2041, 0, 0, 2043, 2044, 2045, 2046, 2048, 0, 2050, 0, 0, 2051, 0, 0, 2052, 2054, 2055, 2056, 2057, 2059, 0, 2060, 2061, 0, 0, 0, 2063, 2064, 2065, 0, 2066, 2067, 0, 0, 113, 0, 2068, 2069, 0, 0, 0, 2070, 0, 0, 2002, 0, 2075, 0, 0, 0, 2007, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2022, 0, 0, 0, 0, 0, 0, 2028, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2042, 0, 0, 0, 0, 0, 0, 2049, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 118, 119, 0, 0, 0, 0, 120, 0, 0, 0, 0, 121, 0, 0, 0, 2353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2182, 0, 0, 2185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2190, 0, 0, 2194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2385, 2386, 2387, 2388, 2389, 0, 2391, 2392, 0, 0, 0, 2396, 2397, 2398, 2399, 2400, 0, 2402, 2403, 2214, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 67, 68, 0, 0, 0, 152, 2181, 2268, 0, 153, 154, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 2219, 0, 2221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2226, 0, 2228, 2305, 0, 0, 2230, 0, 2232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2335, 0, 0, 0, 2276, 0, 0, 2280, 2281, 0, 0, 0, 0, 0, 0, 0, 2285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2532, 115, 0, 2534, 2535, 2536, 2537, 2538, 0, 2540, 2541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2292, 2545, 2546, 2547, 2548, 2549, 0, 2551, 2552, 0, 2554, 67, 68, 0, 0, 0, 2304, 0, 0, 0, 2557, 2558, 0, 0, 0, 0, 0, 110, 0, 0, 0, 2561, 0, 0, 0, 0, 0, 2318, 120, 0, 0, 0, 2322, 121, 0, 0, 0, 0, 2327, 0, 0, 0, 0, 2331, 0, 0, 0, 2334, 0, 0, 2337, 0, 0, 2340, 0, 2342, 0, 0, 527, 0, 0, 2347, 0, 2419, 0, 0, 2423, 0, 0, 0, 0, 0, 0, 110, 0, 0, 2427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2440, 0, 0, 2444, 0, 0, 0, 113, 0, 0, 2450, 0, 0, 0, 0, 2456, 2457, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 0, 0, 0, 115, 0, 0, 113, 0, 0, 2646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2649, 0, 2650, 0, 0, 0, 2652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 2493, 0, 0, 0, 0, 0, 0, 2712, 0, 0, 2713, 120, 0, 2714, 0, 2715, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2567, 0, 0, 0, 0, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 0, 0, 0, 113, 0, 0, 0, 0, 2587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2599, 0, 0, 0, 0, 0, 0, 0, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2640, 0, 0, 2566, 0, 0, 0, 0, 0, 2643, 2571, 0, 0, 0, 2573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 2657, 2659, 0, 2661, 0, 0, 0, 0, 2663, 2665, 0, 0, 0, 2667, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 0, 0, 0, 0, 0, 2689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2709, 0, 0, 0, 0, 2710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2677, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 4, 0, 0, 2752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 7, 2761, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 11, 0, 2770, 0, 0, 2773, 0, 12, 110, 13, 14, 0, 0, 0, 0, 0, 0, 0, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2738, 0, 0, 0, 0, 0, 0, 500, 501, 0, 18, 502, 0, 0, 19, 604, 110, 20, 0, 0, 2748, 2749, 21, 22, 0, 0, 0, 0, 0, 23, 0, 0, 0, 503, 0, 0, 24, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 25, 0, 0, 26, 27, 28, 605, 0, 29, 30, 0, 0, 0, 0, 2772, 0, 0, 0, 967, 0, 0, 31, 0, 0, 968, 0, 0, 0, 0, 0, 0, 0, 2783, 0, 0, 2784, 32, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 113, 35, 0, 0, 0, 0, 0, 0, 0, 36, 0, 504, 37, 606, 0, 38, 0, 39, 0, 40, 0, 0, 0, 0, 41, 0, 0, 0, 505, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 43, 0, 0, 0, 0, 506, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 44, 45, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 47, 0, 0, 0, 0, 0, 48, 0, 0, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, 0, 0, 0, 51, 0, 0, 121, 0, 0, 52, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 0, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 0, 508, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 989, 990, 991, 0, 0, 1264, 1265, 1266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 992, 993, 0, 0, 994, 1267, 1268, 995, 110, 1269, 0, 0, 0, 0, 996, 0, 1270, 0, 997, 1271, 0, 0, 0, 1272, 0, 0, 998, 999, 0, 0, 0, 1273, 1274, 0, 1000, 1001, 110, 0, 0, 1275, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 1002, 0, 0, 0, 0, 0, 1003, 0, 0, 1004, 1005, 0, 0, 1006, 1276, 1277, 0, 0, 1278, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 1007, 0, 0, 0, 0, 1279, 0, 0, 0, 0, 113, 110, 0, 0, 0, 0, 0, 0, 0, 1008, 0, 0, 0, 0, 1280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 1009, 0, 0, 0, 0, 1281, 0, 0, 0, 514, 0, 0, 0, 0, 1282, 0, 0, 0, 0, 0, 0, 115, 1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 1011, 113, 1012, 0, 0, 1283, 0, 1013, 1014, 0, 0, 0, 1284, 1285, 0, 0, 0, 0, 0, 0, 0, 1015, 1016, 0, 0, 0, 0, 1286, 120, 0, 0, 1017, 1018, 121, 0, 0, 0, 1287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 120, 1019, 0, 1020, 0, 121, 1288, 0, 1289, 0, 0, 0, 0, 0, 0, 1021, 0, 1022, 1290, 0, 0, 0, 0, 1023, 0, 0, 0, 0, 1291, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1361, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 1024, 0, 0, 121, 0, 1292, 0, 0, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 1324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 1362, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 179, 0, 0, 180, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, 183, 184, 185, 0, 0, 0, 0, 0, 0, 0, 186, 0, 187, 0, 0, 0, 0, 188, 0, 189, 190, 191, 0, 0, 0, 0, 192, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 197, 0, 0, 198, 0, 0, 0, 199, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 202, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 212, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 215, 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217 }; static const yytype_int16 yycheck[] = { 4, 50, 1445, 872, 873, 874, 0, 1645, 12, 1647, 661, 662, 4, 1136, 666, 1138, 4, 2528, 5, 4, 3, 4, 5, 5, 4, 32, 32, 3, 4, 33, 5, 17, 5, 5, 5, 46, 40, 61, 3, 4, 50, 1164, 1165, 1166, 5, 49, 3, 4, 52, 4, 3, 4, 20, 66, 58, 97, 56, 4, 62, 17, 36, 65, 3, 4, 933, 69, 70, 26, 166, 73, 37, 36, 76, 77, 66, 40, 80, 4, 3, 4, 84, 3, 4, 3, 4, 89, 34, 3, 4, 99, 27, 3, 4, 3, 4, 36, 5, 990, 102, 163, 104, 105, 106, 107, 961, 103, 45, 964, 105, 4, 5, 48, 99, 64, 51, 66, 166, 443, 105, 123, 59, 130, 220, 133, 981, 62, 118, 3, 4, 21, 456, 17, 33, 208, 2695, 66, 3, 4, 17, 66, 154, 16, 81, 3, 4, 110, 27, 56, 85, 4, 40, 87, 111, 129, 158, 190, 65, 147, 61, 107, 5, 100, 78, 122, 129, 102, 237, 180, 182, 87, 220, 66, 3, 4, 3, 4, 164, 116, 182, 2740, 119, 3, 4, 187, 255, 283, 31, 185, 129, 4, 5, 118, 277, 88, 258, 192, 33, 156, 156, 141, 21, 14, 27, 225, 143, 144, 88, 199, 243, 121, 20, 211, 254, 205, 206, 116, 21, 16, 154, 98, 110, 207, 297, 118, 21, 275, 191, 21, 185, 180, 59, 240, 185, 190, 201, 190, 154, 2748, 2749, 3, 4, 136, 246, 202, 241, 27, 295, 57, 61, 5, 222, 275, 200, 264, 170, 21, 215, 196, 262, 263, 912, 229, 252, 185, 239, 204, 191, 274, 274, 226, 241, 284, 199, 277, 298, 66, 40, 287, 205, 206, 4, 285, 286, 277, 288, 289, 187, 291, 189, 262, 191, 192, 239, 250, 279, 59, 288, 301, 199, 279, 286, 191, 211, 118, 199, 309, 310, 294, 4, 285, 205, 206, 15, 214, 297, 297, 304, 278, 193, 22, 285, 207, 261, 262, 27, 3, 4, 243, 332, 333, 334, 34, 336, 284, 4, 190, 340, 341, 295, 220, 165, 233, 295, 203, 285, 337, 110, 351, 352, 341, 342, 355, 356, 357, 358, 359, 360, 361, 362, 363, 285, 288, 1014, 367, 4, 285, 692, 257, 372, 373, 1239, 74, 275, 295, 187, 285, 380, 1246, 56, 383, 1032, 338, 339, 165, 199, 338, 339, 288, 243, 220, 205, 206, 37, 288, 333, 298, 400, 401, 220, 294, 286, 5, 47, 407, 408, 409, 343, 411, 233, 285, 337, 221, 233, 1064, 341, 342, 338, 339, 285, 3, 4, 425, 118, 4, 234, 429, 66, 191, 233, 74, 434, 435, 436, 437, 438, 439, 233, 441, 27, 233, 444, 445, 337, 256, 1095, 340, 341, 342, 118, 1572, 275, 233, 265, 457, 14, 15, 12, 78, 37, 27, 163, 164, 165, 166, 167, 168, 169, 233, 47, 172, 173, 174, 175, 288, 13, 56, 27, 220, 118, 294, 83, 40, 3, 4, 297, 295, 4, 4, 83, 304, 61, 4, 225, 275, 0, 74, 99, 53, 6, 93, 105, 61, 147, 199, 99, 5, 40, 511, 512, 205, 206, 837, 116, 30, 1407, 71, 110, 281, 30, 40, 22, 1378, 337, 261, 1381, 529, 341, 342, 63, 199, 5, 63, 275, 211, 135, 205, 206, 586, 56, 184, 1433, 442, 3, 4, 100, 5, 48, 49, 119, 170, 876, 110, 556, 40, 14, 15, 61, 260, 261, 199, 62, 117, 1455, 4, 120, 205, 206, 4, 147, 104, 173, 61, 104, 174, 131, 131, 110, 626, 4, 583, 54, 226, 94, 279, 287, 189, 12, 192, 66, 110, 122, 185, 288, 14, 15, 5, 645, 5, 166, 4, 5, 61, 247, 40, 61, 184, 108, 109, 44, 122, 213, 119, 31, 617, 119, 166, 90, 5, 288, 203, 3, 4, 243, 110, 327, 328, 329, 187, 188, 119, 211, 220, 191, 1285, 535, 239, 241, 282, 5, 643, 61, 337, 159, 246, 1296, 341, 342, 186, 288, 161, 128, 87, 220, 298, 191, 60, 660, 191, 262, 663, 121, 66, 119, 137, 154, 2303, 567, 337, 247, 220, 191, 341, 342, 110, 152, 61, 233, 681, 682, 683, 684, 63, 61, 687, 167, 689, 4, 691, 201, 693, 66, 208, 175, 211, 265, 230, 256, 337, 230, 220, 116, 341, 342, 117, 191, 265, 266, 6, 113, 244, 245, 277, 244, 245, 5, 5, 233, 252, 220, 298, 222, 770, 104, 128, 14, 15, 17, 187, 188, 285, 33, 243, 167, 119, 239, 140, 248, 297, 121, 5, 119, 146, 147, 3, 4, 24, 25, 152, 14, 15, 228, 5, 12, 189, 191, 759, 760, 761, 762, 763, 265, 765, 766, 767, 768, 239, 187, 188, 61, 61, 257, 61, 14, 15, 26, 265, 780, 781, 89, 1648, 784, 785, 786, 787, 788, 789, 790, 791, 792, 88, 1116, 61, 796, 797, 16, 61, 256, 299, 203, 277, 335, 336, 239, 335, 336, 265, 266, 82, 265, 66, 270, 815, 816, 817, 14, 15, 88, 222, 97, 61, 119, 226, 226, 228, 61, 40, 119, 119, 832, 833, 834, 61, 836, 276, 838, 256, 840, 297, 61, 22, 3, 4, 30, 115, 265, 266, 251, 252, 230, 119, 89, 66, 72, 857, 259, 859, 1979, 1980, 1981, 111, 31, 61, 244, 245, 5, 869, 49, 3, 4, 52, 122, 255, 277, 877, 149, 255, 297, 261, 882, 265, 82, 261, 119, 4, 99, 5, 265, 4, 5, 119, 105, 4, 1749, 897, 898, 110, 119, 187, 188, 82, 5, 905, 4, 907, 908, 5, 70, 5, 611, 5, 914, 183, 1769, 128, 4, 919, 0, 1243, 967, 3, 4, 187, 188, 59, 928, 197, 109, 1784, 333, 112, 1787, 22, 147, 3, 4, 4, 3, 4, 1795, 943, 5, 1798, 4, 218, 219, 187, 188, 149, 163, 1806, 202, 4, 1809, 335, 336, 1848, 857, 232, 49, 1816, 5, 52, 665, 215, 55, 4, 256, 670, 4, 5, 1863, 159, 265, 265, 97, 265, 266, 192, 3, 4, 270, 253, 3, 4, 3, 4, 990, 187, 188, 59, 256, 82, 17, 12, 119, 265, 271, 2593, 1891, 265, 266, 4, 5, 167, 270, 147, 1010, 297, 3, 4, 5, 66, 5, 228, 256, 2611, 218, 219, 109, 40, 208, 112, 294, 265, 266, 80, 241, 1031, 265, 2472, 232, 297, 304, 4, 89, 265, 1040, 252, 262, 222, 14, 15, 265, 4, 99, 233, 14, 15, 3, 4, 1054, 4, 1056, 4, 5, 297, 256, 1061, 1062, 1063, 4, 5, 82, 4, 279, 265, 266, 1071, 251, 271, 1074, 213, 1076, 128, 238, 22, 291, 4, 293, 294, 27, 200, 5, 247, 3, 4, 5, 61, 1092, 110, 1094, 1960, 147, 61, 1098, 1099, 4, 297, 3, 4, 5, 48, 49, 4, 51, 52, 431, 432, 1112, 1113, 252, 4, 1013, 1117, 1118, 62, 819, 185, 333, 1123, 2470, 1125, 190, 4, 1128, 4, 1130, 74, 75, 149, 5, 222, 1181, 2729, 5, 82, 9, 192, 85, 2735, 14, 15, 1468, 28, 11, 5, 2496, 261, 290, 167, 42, 43, 3, 4, 5, 102, 7, 8, 226, 2028, 251, 108, 109, 4, 4, 112, 1170, 1171, 1172, 1173, 191, 1175, 1176, 228, 1075, 1179, 190, 175, 167, 4, 2049, 193, 250, 5, 193, 5, 277, 61, 5, 2785, 1194, 2787, 14, 15, 4, 221, 193, 252, 218, 219, 66, 1205, 66, 1207, 1208, 1209, 1210, 66, 1534, 220, 1214, 1215, 232, 187, 188, 28, 5, 336, 1222, 187, 188, 5, 341, 170, 343, 1229, 4, 295, 193, 1233, 1234, 1235, 4, 4, 87, 5, 291, 87, 293, 61, 1244, 2591, 2592, 1247, 5, 2595, 4, 2597, 4, 17, 5, 271, 2109, 5, 1258, 4, 99, 1261, 5, 2609, 2610, 2118, 4, 148, 2614, 2615, 5, 17, 2618, 17, 2127, 339, 4, 2623, 2624, 222, 168, 169, 3, 4, 227, 4, 256, 4, 87, 61, 171, 5, 256, 97, 175, 265, 266, 1194, 5, 242, 4, 265, 266, 1303, 5, 5, 1306, 195, 251, 1309, 1310, 87, 1312, 5, 1314, 4, 4, 187, 188, 40, 1320, 5, 1322, 2669, 5, 5, 2672, 297, 5, 1329, 53, 2677, 5, 297, 4, 278, 279, 2683, 1037, 148, 4, 12, 2688, 224, 116, 3, 4, 119, 71, 7, 8, 2240, 5, 1250, 3, 4, 299, 12, 4, 3, 4, 5, 171, 7, 8, 88, 175, 2256, 1265, 187, 188, 4, 2261, 4, 4, 4, 164, 100, 5, 260, 5, 5, 154, 4, 4, 4, 256, 268, 269, 110, 5, 40, 1091, 251, 117, 265, 266, 120, 20, 251, 343, 279, 1101, 5, 1404, 1405, 1406, 1407, 131, 4, 2756, 2276, 5, 2759, 5, 224, 5, 189, 5, 5, 2285, 14, 15, 4, 4, 263, 1426, 297, 5, 5, 1430, 2777, 263, 1433, 2780, 5, 35, 5, 256, 5, 4, 4, 4, 2789, 2790, 5, 5, 265, 266, 172, 5, 260, 270, 1453, 1454, 1455, 5, 5, 5, 268, 269, 110, 4, 1463, 236, 5, 1466, 239, 61, 2334, 5, 4, 2337, 1473, 5, 2340, 5, 2342, 233, 297, 3, 4, 5, 233, 7, 8, 233, 1487, 105, 5, 262, 233, 1492, 265, 135, 105, 1496, 40, 1498, 1499, 6, 1501, 1502, 1503, 276, 1505, 1403, 106, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1218, 1219, 1521, 1522, 1523, 1524, 233, 125, 126, 127, 5, 233, 1531, 1532, 132, 105, 207, 1536, 1537, 1538, 237, 2464, 1541, 1542, 2467, 40, 2469, 145, 237, 207, 5, 4, 207, 151, 1553, 1554, 5, 1556, 1557, 2482, 2483, 3, 4, 1459, 162, 5, 1462, 9, 10, 11, 207, 4, 2460, 1894, 4, 1471, 2499, 5, 91, 5, 2468, 5, 5, 1479, 110, 110, 99, 1908, 1909, 4, 1486, 1912, 105, 2481, 5, 187, 188, 1918, 2486, 1920, 5, 5, 4, 12, 5, 5, 4, 4, 1607, 1608, 5, 124, 5, 1612, 5, 5, 4, 6, 1617, 1618, 5, 1620, 1621, 1622, 5, 1624, 1625, 4, 1627, 12, 5, 1630, 1631, 19, 147, 4, 4, 4, 4, 4, 1639, 5, 155, 4, 38, 1966, 38, 1646, 0, 5, 233, 233, 233, 1652, 1653, 233, 135, 166, 44, 233, 233, 1660, 4, 203, 256, 4, 193, 1666, 4, 241, 4, 4, 4, 265, 266, 273, 5, 5, 270, 192, 5, 5, 5, 5, 4, 4, 2007, 200, 5, 4, 4, 77, 263, 4, 960, 5, 5, 5, 84, 301, 1699, 1399, 233, 4, 233, 297, 301, 4, 94, 95, 233, 4, 4, 4, 4, 101, 4, 301, 4, 220, 5, 1617, 220, 220, 301, 5, 1725, 1726, 241, 220, 1428, 1730, 220, 5, 1432, 5, 122, 1736, 5, 252, 4, 6, 5, 5, 4, 4, 4, 263, 5, 5, 4, 4, 138, 5, 267, 5, 4, 263, 5, 5, 1458, 4, 0, 5, 4, 4, 277, 153, 4, 4, 4, 1469, 5, 5, 5, 161, 5, 5, 5, 1477, 1478, 5, 5, 5, 4, 1681, 5, 5, 5, 4, 1488, 4, 263, 5, 1690, 181, 4, 4, 1694, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 5, 5, 5, 216, 4, 12, 5, 5, 5, 5, 4, 2726, 4, 344, 5, 5, 5, 1843, 1844, 5, 1846, 4, 1848, 4, 344, 5, 5, 344, 5, 5, 4, 4, 344, 5, 5, 5, 5, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 4, 4, 344, 5, 264, 4, 4, 4, 33, 4, 344, 5, 5, 5, 1887, 275, 1889, 5, 1891, 5, 4, 4, 4, 1896, 2219, 2220, 2221, 5, 4, 2224, 5, 2226, 2227, 5, 1907, 2230, 4, 2232, 4, 4, 4, 1914, 5, 5, 304, 4, 4, 297, 5, 5, 5, 5, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 5, 5, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 5, 1950, 5, 1952, 1953, 1954, 5, 4, 430, 5, 1856, 4, 4, 1859, 5, 116, 5, 5, 4, 1968, 4, 2292, 5, 5, 5, 5, 4, 4, 277, 5, 2627, 29, 5, 5, 5, 4, 4, 344, 5, 4, 4, 4, 4, 4, 4, 4, 44, 4, 46, 1998, 4, 4, 2001, 4, 2003, 4, 2005, 4, 4, 2008, 4, 2010, 4, 344, 5, 5, 4, 4, 2017, 2018, 5, 5, 5, 4, 4, 2024, 5, 2026, 76, 5, 5, 2030, 4, 4, 2033, 186, 84, 188, 189, 4, 191, 192, 4, 4, 4, 4, 4, 387, 5, 4, 2697, 5, 5, 5, 4, 6, 5, 5, 5, 5, 4, 6, 5, 5, 4, 4, 344, 5, 219, 4, 4, 4, 2251, 5, 5, 4, 4, 4, 4, 4, 1346, 5, 5, 2082, 5, 236, 237, 4, 4, 4, 4, 139, 1358, 5, 2625, 5, 5, 5, 5, 4, 4, 2697, 2693, -1, 726, 16, -1, -1, -1, -1, 1376, 1377, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2446, -1, -1, -1, -1, -1, -1, -1, 2454, -1, -1, 2180, 288, 2034, -1, -1, 189, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 306, -1, 205, 206, 1857, -1, -1, -1, -1, 212, -1, 214, -1, -1, -1, -1, -1, 2493, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2079, -1, -1, -1, 2186, -1, -1, -1, 239, -1, -1, 1892, -1, -1, -1, -1, -1, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, -1, -1, -1, -1, -1, 2215, -1, -1, -1, -1, -1, -1, 2222, -1, -1, 2225, -1, -1, -1, -1, -1, 2231, -1, -1, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, -1, 290, -1, -1, -1, -1, -1, -1, -1, -1, -1, 304, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, -1, 2269, 422, 2271, 2272, 2273, -1, -1, -1, -1, -1, -1, -1, 433, -1, -1, -1, -1, -1, 2184, -1, 2289, 442, -1, -1, 2293, -1, -1, -1, 2297, -1, -1, -1, 2301, 347, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2213, -1, -1, -1, -1, -1, -1, 235, -1, 237, 2223, -1, -1, -1, -1, -1, 2229, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2351, -1, -1, -1, -1, -1, -1, -1, 511, -1, -1, 514, 515, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 527, -1, -1, -1, -1, 532, -1, -1, -1, -1, -1, -1, -1, -1, 541, 542, -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, -1, -1, -1, 2424, -1, -1, -1, 2428, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2438, 2439, -1, -1, -1, -1, -1, 2445, -1, -1, -1, -1, -1, -1, 2452, 605, 606, 607, -1, -1, -1, -1, 2460, -1, 2462, -1, 509, 2465, 2466, -1, 2468, -1, -1, 516, -1, -1, 519, -1, -1, -1, -1, 524, -1, 2481, -1, 528, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 1759, -1, 2494, -1, -1, -1, 2498, -1, 1767, 1768, -1, -1, -1, -1, -1, -1, -1, 2509, -1, -1, 664, -1, 2514, 1782, 1783, -1, -1, -1, -1, 2418, -1, -1, -1, -1, 1793, 1794, -1, -1, -1, 2531, -1, 948, -1, -1, -1, 1804, 1805, -1, -1, -1, -1, 588, -1, -1, -1, 1814, 1815, -1, -1, -1, -1, 1820, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1830, -1, 980, 2566, -1, -1, -1, -1, -1, 2572, -1, 2574, -1, -1, -1, 2277, -1, 2580, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2593, 2594, -1, -1, -1, -1, -1, -1, -1, -1, 2029, -1, -1, -1, -1, -1, -1, 2655, 2611, 2612, -1, -1, -1, 2616, 2043, 2044, 2045, -1, -1, 2048, -1, 2050, 2051, -1, -1, 2054, 2055, 2056, -1, -1, 2059, 2060, 2635, -1, 2063, -1, 2065, 2066, -1, 2068, 688, -1, -1, -1, -1, -1, -1, 695, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2660, -1, -1, -1, -1, -1, 2666, -1, 2668, -1, -1, 823, -1, 2570, -1, 2675, -1, -1, -1, -1, 2680, 2578, -1, 835, -1, 2685, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2708, -1, -1, -1, -1, -1, -1, 867, 868, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2726, -1, -1, 2729, 2730, -1, -1, 2733, -1, 2735, 2736, -1, -1, 891, -1, -1, -1, -1, -1, -1, -1, 2747, -1, -1, -1, -1, -1, -1, -1, -1, 2182, 2757, -1, 2185, 2760, -1, -1, -1, 2190, -1, -1, -1, 2194, -1, -1, -1, -1, -1, -1, -1, -1, 822, -1, -1, -1, 2480, -1, -1, 829, 2785, 938, 2787, 2214, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2500, -1, -1, -1, 2504, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2721, 870, 2093, -1, -1, -1, 875, -1, -1, 878, -1, -1, 2103, -1, -1, -1, 2107, 2108, -1, -1, -1, 890, -1, -1, -1, 2116, 2117, -1, -1, -1, 2751, -1, -1, 2754, 2125, 2126, -1, 1013, -1, -1, 2131, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2141, 2142, -1, -1, -1, 2305, -1, -1, -1, -1, -1, 2152, 2153, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2163, -1, -1, -1, -1, -1, -1, -1, -1, 2172, -1, 2174, -1, 2335, -1, 4, 5, 1065, -1, 1330, 1331, 1332, -1, -1, -1, -1, -1, 1075, -1, 1340, 1341, 1342, -1, -1, -1, -1, 1347, 1348, 1349, -1, -1, 1352, 1353, -1, 1355, 1356, -1, 988, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 55, -1, 60, -1, -1, 1385, 1386, -1, 66, 1389, 1390, 66, -1, -1, -1, 73, -1, 75, -1, -1, -1, -1, 80, -1, -1, 83, -1, -1, 2419, -1, -1, 89, -1, -1, -1, -1, 91, 92, -1, -1, -1, 99, -1, -1, 99, -1, -1, 105, -1, 2440, 105, -1, -1, -1, -1, 113, -1, -1, -1, 2450, 1177, -1, -1, -1, -1, 2456, 2457, -1, -1, 124, 128, -1, -1, 128, -1, -1, -1, 1194, 2742, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 147, -1, -1, 147, -1, -1, -1, -1, -1, -1, -1, 155, -1, -1, -1, -1, 163, -1, -1, -1, -1, 1227, -1, -1, -1, 172, 173, -1, -1, -1, -1, -1, 1238, -1, 2355, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2365, 192, -1, -1, 192, -1, -1, -1, -1, 2374, -1, -1, 200, -1, -1, 1265, -1, -1, 2383, -1, 1270, -1, 213, -1, -1, 2390, -1, -1, -1, -1, -1, 3, 4, -1, -1, 226, 2401, 228, -1, 1182, -1, -1, 2407, 2567, -1, 2410, -1, 19, 2413, -1, 241, -1, -1, 241, -1, 246, -1, -1, -1, -1, -1, 252, -1, 2587, 252, -1, -1, 39, 259, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1221, 267, -1, -1, -1, -1, 56, -1, 277, -1, -1, 277, -1, 279, -1, 1236, -1, -1, -1, -1, -1, 290, 291, -1, 293, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, 2657, -1, 2659, -1, 2661, -1, 2663, -1, 2665, 333, 2667, -1, 333, -1, -1, -1, -1, -1, -1, -1, 1403, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2539, -1, -1, -1, 2543, -1, -1, 1431, 154, -1, -1, 2550, -1, -1, -1, -1, -1, 2556, 2716, -1, -1, 2560, -1, -1, 2563, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1459, -1, -1, 1462, -1, -1, -1, -1, -1, -1, 191, -1, 1471, 1472, -1, -1, -1, -1, 1740, -1, 1479, -1, -1, -1, -1, -1, -1, 1486, 2761, -1, 211, 1753, -1, -1, -1, 216, -1, -1, -1, -1, -1, 1763, -1, -1, -1, 226, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1526, -1, -1, 1529, 1530, -1, -1, -1, -1, -1, -1, -1, -1, 1539, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 285, -1, -1, -1, -1, -1, -1, -1, -1, 1835, -1, 1467, -1, -1, -1, -1, -1, -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 1610, -1, -1, 4, -1, -1, -1, 1617, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1, -1, 1527, 1635, -1, -1, -1, -1, 1533, -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, 1651, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56, -1, -1, -1, -1, 1670, -1, -1, -1, -1, 1675, -1, -1, 1678, 1679, 1680, 1681, 1682, -1, 1684, -1, -1, 1687, -1, -1, 1690, 1691, 1692, 1693, 1694, 1695, -1, 1697, 1698, -1, -1, -1, 1702, 1703, 1704, -1, 1706, 1707, -1, -1, 101, -1, 1712, 1713, -1, -1, -1, 1717, -1, -1, 1613, -1, 1722, -1, -1, -1, 1619, 118, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1643, -1, -1, -1, -1, -1, -1, 1650, -1, -1, -1, -1, -1, 154, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1676, -1, -1, -1, -1, -1, -1, 1683, -1, -1, -1, -1, -1, -1, -1, -1, -1, 191, -1, -1, -1, -1, -1, -1, -1, 199, -1, -1, -1, -1, -1, 205, 206, -1, -1, -1, -1, 211, -1, -1, -1, -1, 216, -1, -1, -1, 2092, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1842, -1, -1, 1845, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1856, -1, -1, 1859, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2132, 2133, 2134, 2135, 2136, -1, 2138, 2139, -1, -1, -1, 2143, 2144, 2145, 2146, 2147, -1, 2149, 2150, 1888, -1, -1, -1, -1, -1, -1, -1, -1, 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 3, 4, -1, -1, -1, 337, 1840, 1948, -1, 341, 342, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1860, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56, -1, -1, -1, -1, -1, 1893, -1, 1895, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1911, -1, 1913, 2021, -1, -1, 1917, -1, 1919, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2062, -1, -1, -1, 1959, -1, -1, 1962, 1963, -1, -1, -1, -1, -1, -1, -1, 1971, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2354, 154, -1, 2357, 2358, 2359, 2360, 2361, -1, 2363, 2364, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2004, 2375, 2376, 2377, 2378, 2379, -1, 2381, 2382, -1, 2384, 3, 4, -1, -1, -1, 2020, -1, -1, -1, 2394, 2395, -1, -1, -1, -1, -1, 19, -1, -1, -1, 2405, -1, -1, -1, -1, -1, 2041, 211, -1, -1, -1, 2046, 216, -1, -1, -1, -1, 2052, -1, -1, -1, -1, 2057, -1, -1, -1, 2061, -1, -1, 2064, -1, -1, 2067, -1, 2069, -1, -1, 4, -1, -1, 2075, -1, 2184, -1, -1, 2187, -1, -1, -1, -1, -1, -1, 19, -1, -1, 2197, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2213, -1, -1, 2216, -1, -1, -1, 101, -1, -1, 2223, -1, -1, -1, -1, 2228, 2229, -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, -1, -1, 154, -1, -1, 101, -1, -1, 2542, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2553, -1, 2555, -1, -1, -1, 2559, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2316, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 154, -1, -1, -1, -1, -1, 216, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, -1, -1, 2268, -1, -1, -1, -1, -1, -1, 2645, -1, -1, 2648, 211, -1, 2651, -1, 2653, 216, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2418, -1, -1, -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, -1, -1, 101, -1, -1, -1, -1, 2459, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2471, -1, -1, -1, -1, -1, -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 154, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2520, -1, -1, 2416, -1, -1, -1, -1, -1, 2529, 2423, -1, -1, -1, 2427, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2444, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 216, 2570, 2571, -1, 2573, -1, -1, -1, -1, 2578, 2579, -1, -1, -1, 2583, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, -1, -1, -1, -1, 2617, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2636, -1, -1, -1, -1, 2641, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, -1, -1, -1, -1, -1, -1, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2599, -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, 46, -1, -1, 2721, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, 64, 65, 2738, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, 77, -1, 2751, -1, -1, 2754, -1, 84, 19, 86, 87, -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 123, 2689, -1, -1, -1, -1, -1, -1, 65, 66, -1, 134, 69, -1, -1, 138, 18, 19, 141, -1, -1, 2709, 2710, 146, 147, -1, -1, -1, -1, -1, 153, -1, -1, -1, 91, -1, -1, 160, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, 173, -1, -1, 176, 177, 178, 58, -1, 181, 182, -1, -1, -1, -1, 2752, -1, -1, -1, 154, -1, -1, 194, -1, -1, 160, -1, -1, -1, -1, -1, -1, -1, 2770, -1, -1, 2773, 209, 210, 211, -1, -1, -1, -1, -1, -1, -1, -1, 154, -1, 101, 223, -1, -1, -1, -1, -1, -1, -1, 231, -1, 167, 234, 114, -1, 237, -1, 239, -1, 241, -1, -1, -1, -1, 246, -1, -1, -1, 184, -1, -1, -1, -1, -1, -1, -1, -1, 259, -1, -1, -1, -1, 264, -1, -1, -1, -1, 203, -1, -1, -1, -1, -1, 154, -1, -1, -1, -1, 280, 281, 216, -1, -1, -1, -1, -1, -1, -1, -1, -1, 292, -1, 294, -1, -1, -1, -1, -1, 300, -1, -1, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 264, -1, -1, -1, 334, -1, -1, 216, -1, -1, 340, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, 333, -1, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 20, 21, 22, -1, -1, 20, 21, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, -1, -1, 52, 48, 49, 55, 19, 52, -1, -1, -1, -1, 62, -1, 59, -1, 66, 62, -1, -1, -1, 66, -1, -1, 74, 75, -1, -1, -1, 74, 75, -1, 82, 83, 19, -1, -1, 82, -1, -1, -1, -1, -1, 56, -1, -1, -1, -1, -1, 99, -1, -1, -1, -1, -1, 105, -1, -1, 108, 109, -1, -1, 112, 108, 109, -1, -1, 112, -1, -1, -1, 56, -1, -1, -1, -1, -1, -1, 128, -1, -1, -1, -1, 128, -1, -1, -1, -1, 101, 19, -1, -1, -1, -1, -1, -1, -1, 147, -1, -1, -1, -1, 147, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, 170, -1, -1, -1, -1, 170, -1, -1, -1, 59, -1, -1, -1, -1, 179, -1, -1, -1, -1, -1, -1, 154, 192, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 154, 220, 101, 222, -1, -1, 220, -1, 227, 228, -1, -1, -1, 227, 228, -1, -1, -1, -1, -1, -1, -1, 241, 242, -1, -1, -1, -1, 242, 211, -1, -1, 251, 252, 216, -1, -1, -1, 252, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 154, -1, 211, 277, -1, 279, -1, 216, 277, -1, 279, -1, -1, -1, -1, -1, -1, 291, -1, 293, 289, -1, -1, -1, -1, 299, -1, -1, -1, -1, 299, -1, -1, -1, -1, 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 160, -1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1, 333, -1, -1, 216, -1, 333, -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, -1, -1, -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, 19, -1, -1, -1, -1, -1, -1, -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 154, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 216, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 154, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 216, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 41, -1, -1, 44, -1, 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 65, -1, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, 77, -1, 79, -1, -1, -1, -1, 84, -1, 86, 87, 88, -1, -1, -1, -1, 93, -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 138, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 149, 150, -1, -1, 153, -1, -1, -1, 157, -1, -1, 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 181, 182, -1, -1, 185, -1, -1, -1, -1, -1, -1, -1, -1, 194, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 209, 210, -1, -1, -1, -1, -1, -1, 217, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 239, -1, 241, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 264, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, 281, -1, -1, -1, -1, -1, -1, -1, 289, -1, -1, -1, -1, -1, -1, 296, -1, -1, -1, -1, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 340 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { 0, 20, 41, 44, 46, 59, 64, 65, 67, 68, 69, 77, 84, 86, 87, 95, 96, 123, 134, 138, 141, 146, 147, 153, 160, 173, 176, 177, 178, 181, 182, 194, 209, 210, 211, 223, 231, 234, 237, 239, 241, 246, 259, 264, 280, 281, 292, 294, 300, 303, 304, 334, 340, 346, 237, 255, 379, 66, 12, 53, 71, 100, 117, 120, 131, 285, 381, 3, 4, 285, 347, 386, 185, 190, 226, 250, 295, 339, 388, 277, 4, 40, 110, 191, 239, 393, 28, 148, 171, 175, 224, 260, 268, 269, 360, 395, 83, 99, 173, 213, 246, 396, 40, 59, 110, 191, 281, 347, 403, 4, 19, 40, 56, 101, 118, 154, 191, 199, 205, 206, 211, 216, 288, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 337, 341, 342, 349, 357, 358, 359, 405, 33, 406, 349, 29, 44, 46, 76, 84, 139, 189, 205, 206, 212, 214, 239, 304, 348, 141, 407, 41, 44, 46, 65, 67, 68, 69, 77, 79, 84, 86, 87, 88, 93, 95, 122, 138, 149, 150, 153, 157, 160, 181, 182, 185, 194, 209, 210, 217, 239, 241, 264, 280, 281, 289, 296, 302, 304, 340, 408, 83, 99, 451, 19, 44, 77, 84, 94, 95, 101, 122, 138, 153, 161, 181, 216, 264, 275, 304, 454, 349, 88, 115, 183, 197, 253, 294, 304, 460, 16, 26, 111, 122, 156, 202, 215, 463, 225, 481, 5, 66, 88, 136, 294, 340, 349, 482, 5, 483, 20, 57, 221, 234, 295, 499, 64, 66, 180, 284, 518, 66, 200, 336, 341, 343, 519, 39, 191, 226, 285, 347, 357, 359, 520, 5, 294, 304, 349, 523, 70, 167, 238, 247, 524, 88, 499, 61, 275, 298, 531, 191, 285, 347, 532, 26, 111, 122, 202, 215, 534, 50, 99, 133, 287, 549, 550, 4, 37, 47, 74, 147, 184, 226, 247, 282, 298, 374, 4, 122, 201, 551, 285, 347, 553, 16, 23, 235, 237, 358, 554, 225, 558, 285, 347, 559, 0, 22, 48, 49, 62, 108, 109, 220, 222, 299, 380, 5, 59, 347, 382, 261, 5, 4, 285, 347, 383, 5, 32, 274, 384, 121, 347, 385, 121, 347, 387, 347, 4, 190, 243, 391, 185, 295, 338, 339, 347, 390, 349, 135, 174, 389, 347, 78, 170, 243, 347, 392, 5, 347, 4, 239, 394, 347, 347, 5, 222, 397, 31, 398, 5, 399, 5, 401, 5, 31, 402, 347, 9, 10, 11, 347, 353, 354, 355, 356, 347, 347, 40, 110, 191, 347, 404, 347, 191, 357, 359, 347, 35, 106, 125, 126, 127, 132, 145, 151, 162, 273, 362, 347, 4, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, 116, 66, 53, 71, 88, 100, 117, 120, 131, 172, 409, 117, 411, 185, 190, 226, 250, 295, 338, 339, 347, 412, 413, 277, 416, 167, 417, 167, 175, 419, 65, 66, 69, 91, 167, 184, 203, 264, 333, 357, 421, 347, 359, 424, 59, 281, 357, 425, 272, 357, 359, 426, 33, 427, 357, 359, 428, 4, 357, 359, 429, 45, 59, 81, 100, 116, 119, 143, 144, 196, 204, 261, 262, 333, 433, 208, 297, 439, 5, 89, 6, 88, 119, 431, 5, 65, 359, 430, 16, 499, 66, 180, 284, 440, 66, 226, 441, 276, 61, 275, 298, 442, 131, 233, 443, 37, 47, 74, 147, 184, 247, 298, 444, 359, 89, 16, 193, 449, 357, 452, 72, 455, 31, 456, 44, 87, 189, 457, 147, 213, 252, 290, 458, 357, 18, 58, 114, 281, 357, 459, 4, 190, 462, 5, 4, 6, 119, 347, 4, 5, 239, 464, 5, 466, 5, 116, 189, 239, 262, 467, 93, 110, 185, 480, 5, 478, 5, 262, 479, 4, 5, 349, 349, 347, 347, 5, 4, 5, 60, 66, 73, 75, 80, 83, 89, 99, 105, 113, 128, 147, 163, 172, 173, 192, 213, 226, 228, 241, 246, 252, 259, 277, 290, 291, 293, 333, 484, 5, 4, 347, 5, 347, 40, 110, 347, 522, 349, 347, 357, 359, 521, 347, 362, 347, 4, 358, 54, 90, 137, 239, 525, 4, 4, 347, 147, 252, 526, 5, 357, 4, 40, 110, 347, 533, 347, 97, 61, 119, 239, 265, 535, 119, 548, 61, 116, 119, 154, 189, 236, 239, 262, 265, 276, 537, 538, 61, 119, 265, 547, 5, 4, 34, 107, 200, 530, 66, 349, 375, 66, 349, 376, 66, 349, 377, 13, 186, 529, 347, 347, 40, 110, 191, 220, 347, 378, 347, 262, 4, 347, 347, 4, 557, 4, 279, 555, 4, 279, 556, 4, 362, 121, 347, 560, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 4, 5, 347, 12, 347, 347, 347, 30, 94, 161, 243, 248, 361, 361, 4, 347, 347, 4, 4, 4, 347, 347, 347, 347, 4, 4, 5, 5, 357, 5, 347, 347, 353, 355, 355, 357, 347, 347, 347, 347, 347, 347, 347, 357, 359, 356, 347, 347, 356, 347, 5, 261, 103, 185, 410, 190, 243, 414, 167, 78, 170, 243, 415, 4, 418, 4, 420, 190, 422, 175, 423, 167, 362, 347, 357, 347, 357, 357, 362, 362, 362, 357, 362, 347, 357, 4, 436, 4, 359, 434, 193, 4, 164, 304, 435, 193, 357, 4, 357, 438, 5, 5, 4, 193, 347, 4, 5, 60, 66, 113, 128, 140, 146, 147, 152, 203, 222, 226, 228, 251, 252, 259, 277, 333, 493, 359, 66, 445, 66, 446, 66, 447, 220, 448, 347, 5, 221, 450, 358, 362, 5, 357, 357, 357, 4, 349, 4, 4, 193, 347, 14, 15, 61, 187, 188, 256, 265, 266, 297, 87, 5, 5, 14, 15, 61, 187, 188, 256, 265, 266, 270, 297, 87, 154, 160, 358, 470, 474, 87, 154, 5, 468, 4, 4, 14, 61, 187, 256, 265, 297, 5, 5, 4, 347, 358, 20, 21, 22, 48, 49, 52, 55, 62, 66, 74, 75, 82, 83, 99, 105, 108, 109, 112, 128, 147, 170, 192, 220, 222, 227, 228, 241, 242, 251, 252, 277, 279, 291, 293, 299, 333, 66, 80, 89, 99, 128, 147, 192, 228, 252, 291, 293, 4, 30, 159, 208, 233, 487, 5, 63, 104, 230, 244, 245, 335, 336, 492, 99, 485, 17, 40, 110, 191, 491, 4, 5, 17, 207, 286, 347, 252, 492, 500, 122, 492, 501, 36, 40, 110, 129, 191, 285, 347, 502, 357, 349, 91, 99, 105, 124, 147, 155, 192, 200, 241, 252, 267, 505, 40, 110, 191, 5, 278, 17, 207, 286, 509, 279, 349, 510, 5, 99, 105, 294, 17, 17, 4, 347, 347, 347, 347, 347, 362, 347, 347, 356, 347, 4, 362, 40, 110, 191, 257, 527, 40, 110, 191, 257, 528, 4, 97, 5, 5, 87, 4, 5, 5, 87, 5, 538, 61, 119, 154, 265, 542, 61, 119, 265, 546, 87, 154, 61, 119, 265, 540, 4, 61, 119, 265, 539, 5, 5, 4, 5, 5, 5, 347, 347, 347, 347, 347, 347, 4, 347, 552, 347, 347, 6, 358, 4, 5, 4, 4, 5, 4, 97, 254, 363, 347, 347, 12, 347, 347, 347, 347, 347, 347, 347, 347, 347, 5, 12, 347, 347, 12, 4, 12, 4, 4, 347, 347, 347, 4, 349, 4, 4, 362, 357, 362, 347, 347, 347, 357, 347, 356, 347, 347, 5, 5, 347, 359, 347, 357, 357, 347, 362, 363, 363, 363, 362, 356, 347, 362, 347, 130, 240, 350, 437, 164, 5, 4, 362, 357, 4, 5, 4, 4, 347, 432, 347, 20, 21, 22, 48, 49, 52, 59, 62, 66, 74, 75, 82, 108, 109, 112, 128, 147, 170, 179, 220, 227, 228, 242, 252, 277, 279, 289, 299, 333, 66, 128, 152, 228, 277, 30, 159, 208, 233, 494, 347, 20, 203, 347, 495, 17, 347, 251, 505, 251, 203, 347, 496, 279, 497, 17, 98, 347, 347, 5, 363, 56, 357, 4, 5, 461, 347, 5, 5, 5, 154, 182, 368, 368, 163, 258, 366, 4, 4, 5, 5, 465, 263, 263, 5, 5, 5, 17, 156, 367, 367, 366, 4, 4, 366, 5, 5, 469, 160, 332, 358, 473, 5, 472, 5, 5, 476, 5, 477, 5, 14, 15, 61, 187, 188, 256, 265, 266, 270, 297, 4, 4, 5, 5, 368, 366, 4, 5, 5, 362, 82, 149, 218, 219, 232, 271, 371, 7, 8, 347, 352, 233, 233, 233, 105, 40, 66, 99, 105, 110, 128, 147, 163, 192, 228, 241, 252, 279, 291, 293, 294, 333, 486, 233, 5, 27, 165, 233, 275, 135, 105, 22, 49, 52, 82, 109, 112, 222, 251, 22, 49, 52, 55, 82, 109, 112, 222, 251, 277, 40, 233, 233, 105, 5, 207, 27, 220, 36, 129, 285, 347, 255, 261, 237, 357, 359, 505, 40, 220, 275, 237, 207, 5, 5, 241, 27, 220, 4, 5, 5, 207, 36, 129, 285, 347, 505, 207, 349, 4, 4, 347, 5, 297, 22, 27, 48, 49, 51, 52, 62, 74, 75, 82, 85, 102, 108, 109, 112, 170, 222, 227, 242, 251, 278, 279, 299, 343, 488, 347, 347, 347, 347, 347, 492, 357, 5, 4, 5, 347, 347, 357, 359, 347, 349, 347, 347, 492, 5, 347, 347, 349, 5, 17, 5, 5, 347, 347, 356, 347, 347, 347, 347, 110, 347, 347, 110, 4, 42, 43, 168, 169, 195, 373, 373, 61, 119, 265, 536, 373, 5, 61, 119, 265, 541, 5, 5, 61, 119, 265, 543, 4, 5, 5, 4, 61, 119, 265, 545, 61, 119, 265, 544, 5, 5, 4, 5, 5, 4, 373, 373, 373, 347, 347, 347, 347, 347, 4, 347, 357, 347, 358, 362, 5, 5, 12, 347, 357, 359, 347, 12, 347, 347, 347, 59, 347, 6, 4, 347, 347, 46, 264, 400, 5, 349, 349, 362, 347, 4, 4, 4, 357, 347, 347, 347, 347, 362, 4, 357, 363, 356, 347, 4, 363, 347, 38, 38, 4, 359, 5, 24, 25, 97, 364, 347, 4, 347, 5, 82, 149, 218, 219, 232, 271, 357, 359, 233, 233, 233, 21, 233, 357, 233, 27, 165, 233, 275, 135, 21, 233, 233, 233, 21, 233, 27, 166, 220, 166, 255, 261, 166, 220, 283, 505, 166, 220, 275, 4, 241, 27, 166, 220, 505, 203, 347, 82, 149, 218, 219, 232, 271, 347, 347, 347, 347, 347, 193, 347, 347, 20, 229, 453, 4, 4, 347, 368, 368, 368, 4, 368, 368, 368, 14, 15, 61, 187, 188, 256, 265, 266, 297, 367, 368, 368, 368, 368, 368, 4, 368, 368, 4, 367, 14, 15, 61, 187, 188, 256, 265, 266, 297, 5, 471, 5, 475, 5, 5, 14, 15, 61, 187, 188, 256, 265, 266, 270, 297, 5, 14, 15, 61, 187, 188, 256, 265, 266, 270, 297, 5, 14, 15, 61, 187, 188, 256, 265, 266, 270, 297, 14, 15, 61, 187, 188, 256, 265, 266, 297, 263, 5, 5, 5, 367, 367, 366, 4, 4, 366, 5, 4, 4, 368, 368, 4, 368, 368, 5, 349, 357, 359, 5, 347, 347, 5, 347, 5, 352, 105, 192, 241, 105, 192, 241, 5, 347, 349, 5, 347, 357, 349, 5, 352, 233, 233, 21, 233, 21, 233, 233, 21, 233, 301, 301, 4, 4, 4, 486, 4, 4, 4, 301, 301, 4, 5, 4, 347, 5, 347, 5, 352, 349, 357, 359, 357, 359, 347, 27, 48, 51, 62, 85, 102, 343, 369, 4, 347, 362, 356, 349, 357, 359, 357, 347, 349, 349, 357, 359, 357, 359, 347, 349, 347, 5, 347, 220, 220, 347, 347, 220, 347, 220, 347, 347, 498, 506, 347, 220, 220, 347, 347, 347, 347, 347, 347, 347, 347, 5, 297, 347, 489, 347, 347, 220, 347, 347, 347, 347, 357, 362, 5, 357, 357, 347, 347, 362, 356, 347, 347, 347, 357, 347, 347, 5, 347, 347, 347, 347, 5, 5, 4, 373, 5, 5, 4, 4, 4, 5, 5, 4, 4, 5, 5, 4, 5, 5, 4, 347, 347, 357, 347, 362, 347, 357, 359, 347, 362, 347, 347, 347, 347, 347, 5, 347, 4, 6, 347, 347, 4, 357, 347, 362, 175, 360, 347, 360, 363, 362, 357, 347, 347, 4, 347, 347, 4, 357, 5, 5, 5, 5, 357, 362, 357, 357, 357, 357, 359, 357, 362, 357, 357, 357, 359, 357, 357, 357, 357, 359, 357, 357, 357, 347, 357, 357, 357, 357, 357, 357, 357, 357, 5, 5, 5, 5, 357, 347, 347, 4, 347, 5, 4, 347, 368, 5, 5, 5, 366, 4, 4, 5, 368, 367, 4, 368, 5, 5, 5, 367, 367, 366, 4, 4, 5, 14, 15, 61, 187, 188, 256, 265, 266, 297, 14, 15, 61, 187, 188, 256, 265, 266, 297, 14, 15, 61, 187, 188, 256, 265, 266, 297, 263, 5, 5, 5, 367, 367, 366, 4, 4, 366, 5, 263, 5, 5, 5, 367, 367, 366, 4, 4, 366, 5, 263, 5, 5, 5, 367, 367, 366, 4, 4, 366, 5, 5, 5, 5, 367, 367, 366, 4, 4, 5, 367, 4, 4, 367, 4, 4, 368, 5, 362, 357, 347, 347, 357, 347, 5, 352, 5, 357, 359, 349, 5, 357, 359, 362, 5, 352, 347, 347, 347, 347, 347, 347, 347, 347, 347, 4, 4, 5, 4, 4, 347, 357, 347, 5, 352, 349, 362, 356, 362, 347, 347, 356, 356, 362, 356, 362, 347, 362, 356, 362, 356, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 55, 66, 92, 128, 277, 279, 333, 503, 504, 505, 516, 517, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 357, 5, 347, 347, 347, 347, 4, 4, 362, 363, 4, 490, 362, 362, 356, 347, 4, 362, 373, 373, 373, 347, 347, 347, 362, 347, 356, 347, 347, 12, 5, 5, 4, 347, 347, 4, 362, 357, 347, 347, 363, 364, 347, 5, 347, 359, 5, 5, 5, 5, 362, 364, 364, 364, 362, 364, 363, 364, 364, 362, 364, 364, 364, 362, 364, 364, 362, 357, 364, 362, 364, 364, 362, 364, 362, 5, 5, 5, 5, 362, 4, 359, 5, 347, 4, 368, 367, 4, 367, 5, 5, 5, 367, 367, 366, 4, 4, 5, 5, 5, 5, 367, 367, 366, 4, 4, 5, 5, 5, 5, 367, 367, 366, 4, 4, 5, 367, 368, 368, 368, 368, 368, 4, 368, 368, 4, 367, 367, 368, 368, 368, 368, 368, 4, 368, 368, 4, 367, 367, 4, 4, 367, 4, 367, 367, 4, 4, 4, 358, 364, 4, 357, 359, 364, 347, 357, 4, 364, 364, 357, 4, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 357, 359, 364, 347, 357, 4, 356, 356, 356, 347, 357, 359, 356, 347, 356, 356, 357, 357, 359, 356, 347, 356, 347, 347, 347, 347, 347, 347, 352, 347, 347, 347, 344, 344, 344, 344, 344, 344, 344, 504, 344, 352, 347, 347, 347, 347, 352, 347, 347, 347, 347, 347, 347, 362, 347, 297, 351, 352, 347, 347, 363, 349, 4, 4, 363, 347, 356, 347, 59, 347, 5, 5, 347, 4, 360, 364, 5, 4, 5, 357, 5, 363, 364, 363, 363, 363, 4, 5, 357, 5, 5, 347, 368, 367, 368, 368, 368, 368, 368, 4, 368, 368, 367, 4, 367, 368, 368, 368, 368, 368, 4, 368, 368, 367, 368, 367, 4, 368, 368, 367, 4, 368, 367, 4, 367, 367, 362, 357, 359, 364, 4, 362, 347, 362, 347, 347, 347, 364, 4, 362, 347, 356, 364, 347, 356, 364, 364, 357, 352, 347, 4, 370, 370, 347, 347, 370, 352, 370, 506, 357, 486, 5, 4, 5, 5, 5, 4, 349, 352, 370, 370, 347, 347, 352, 347, 347, 347, 347, 347, 356, 347, 5, 506, 347, 370, 349, 507, 508, 5, 349, 5, 347, 5, 4, 6, 347, 5, 32, 274, 372, 357, 5, 372, 357, 347, 367, 368, 367, 367, 368, 368, 367, 368, 367, 367, 347, 364, 357, 359, 357, 347, 357, 347, 357, 359, 357, 347, 357, 364, 4, 506, 506, 351, 347, 506, 4, 506, 362, 5, 4, 4, 506, 506, 351, 347, 4, 506, 506, 347, 357, 506, 506, 506, 507, 513, 514, 505, 511, 512, 5, 5, 6, 4, 185, 295, 338, 339, 347, 365, 357, 357, 4, 368, 368, 368, 368, 358, 364, 364, 347, 364, 4, 364, 364, 347, 364, 347, 506, 506, 4, 347, 506, 5, 347, 506, 4, 347, 506, 362, 513, 515, 516, 344, 512, 5, 5, 4, 347, 362, 362, 364, 4, 357, 359, 4, 352, 351, 347, 347, 351, 347, 357, 516, 349, 5, 5, 347, 372, 372, 5, 357, 359, 362, 357, 359, 506, 347, 4, 506, 347, 364, 5, 5, 362, 362, 4, 506, 4, 506, 351, 351, 506, 506 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (fr, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, fr, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, frFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; frFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (fr); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, frFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; frFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, Base* fr, frFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, fr, ll) YYSTYPE *yyvsp; int yyrule; Base* fr; frFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , fr, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, fr, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, Base* fr, frFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, fr, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; Base* fr; frFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (fr); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (Base* fr, frFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (Base* fr, frFlexLexer* ll) #else int yyparse (fr, ll) Base* fr; frFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 5: #line 448 "frame/parser.Y" {fr->bgColorCmd((yyvsp[(3) - (3)].str));;} break; case 7: #line 450 "frame/parser.Y" {fr->centerCmd();;} break; case 8: #line 451 "frame/parser.Y" {fr->clearCmd();;} break; case 10: #line 453 "frame/parser.Y" {fr->colorbarTagCmd((yyvsp[(3) - (3)].str));;} break; case 17: #line 460 "frame/parser.Y" {fr->DATASECCmd((yyvsp[(2) - (2)].integer));;} break; case 22: #line 465 "frame/parser.Y" {fr->hideCmd();;} break; case 23: #line 466 "frame/parser.Y" {fr->highliteCmd((yyvsp[(2) - (2)].integer));;} break; case 25: #line 468 "frame/parser.Y" {fr->irafAlignCmd((yyvsp[(3) - (3)].integer));;} break; case 32: #line 475 "frame/parser.Y" {fr->nanColorCmd((yyvsp[(3) - (3)].str));;} break; case 36: #line 479 "frame/parser.Y" {fr->queryCursorCmd();;} break; case 38: #line 481 "frame/parser.Y" {fr->resetCmd();;} break; case 43: #line 486 "frame/parser.Y" {fr->showCmd();;} break; case 45: #line 488 "frame/parser.Y" {fr->threadsCmd((yyvsp[(2) - (2)].integer));;} break; case 47: #line 490 "frame/parser.Y" {fr->unloadFitsCmd();;} break; case 49: #line 492 "frame/parser.Y" {fr->msg("Frame 1.0");;} break; case 54: #line 499 "frame/parser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 55: #line 500 "frame/parser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 56: #line 503 "frame/parser.Y" {yydebug=1;;} break; case 57: #line 504 "frame/parser.Y" {yydebug=0;;} break; case 58: #line 505 "frame/parser.Y" {DebugAST=(yyvsp[(2) - (2)].integer);;} break; case 59: #line 506 "frame/parser.Y" {DebugMosaic=(yyvsp[(2) - (2)].integer);;} break; case 60: #line 507 "frame/parser.Y" {yydebug=(yyvsp[(2) - (2)].integer);;} break; case 61: #line 508 "frame/parser.Y" {DebugPerf=(yyvsp[(2) - (2)].integer);;} break; case 62: #line 509 "frame/parser.Y" {DebugWCS=(yyvsp[(2) - (2)].integer);;} break; case 63: #line 510 "frame/parser.Y" {DebugBin=(yyvsp[(2) - (2)].integer);;} break; case 64: #line 511 "frame/parser.Y" {DebugBlock=(yyvsp[(2) - (2)].integer);;} break; case 65: #line 512 "frame/parser.Y" {DebugCompress=(yyvsp[(2) - (2)].integer);;} break; case 66: #line 513 "frame/parser.Y" {DebugCrop=(yyvsp[(2) - (2)].integer);;} break; case 67: #line 514 "frame/parser.Y" {DebugGZ=(yyvsp[(2) - (2)].integer);;} break; case 68: #line 515 "frame/parser.Y" {DebugRGB=(yyvsp[(2) - (2)].integer);;} break; case 69: #line 518 "frame/parser.Y" {(yyval.integer)=((yyvsp[(1) - (1)].integer) ? 1 : 0);;} break; case 70: #line 520 "frame/parser.Y" {(yyval.integer)=1;;} break; case 71: #line 521 "frame/parser.Y" {(yyval.integer)=1;;} break; case 72: #line 522 "frame/parser.Y" {(yyval.integer)=1;;} break; case 73: #line 523 "frame/parser.Y" {(yyval.integer)=1;;} break; case 74: #line 525 "frame/parser.Y" {(yyval.integer)=0;;} break; case 75: #line 526 "frame/parser.Y" {(yyval.integer)=0;;} break; case 76: #line 527 "frame/parser.Y" {(yyval.integer)=0;;} break; case 77: #line 528 "frame/parser.Y" {(yyval.integer)=0;;} break; case 78: #line 531 "frame/parser.Y" {(yyval.integer) = Base::ROOTBASE;;} break; case 79: #line 532 "frame/parser.Y" {(yyval.integer) = Base::ROOTBASE;;} break; case 80: #line 533 "frame/parser.Y" {(yyval.integer) = Base::FULLBASE;;} break; case 81: #line 534 "frame/parser.Y" {(yyval.integer) = Base::ROOT;;} break; case 82: #line 535 "frame/parser.Y" {(yyval.integer) = Base::FULL;;} break; case 83: #line 538 "frame/parser.Y" {(yyval.real) = 0;;} break; case 84: #line 539 "frame/parser.Y" {(yyval.real) = (yyvsp[(1) - (1)].real);;} break; case 85: #line 542 "frame/parser.Y" {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;} break; case 86: #line 543 "frame/parser.Y" {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;} break; case 87: #line 544 "frame/parser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 88: #line 547 "frame/parser.Y" {(yyval.real) = parseSEXStr((yyvsp[(1) - (1)].str));;} break; case 89: #line 550 "frame/parser.Y" {(yyval.real) = parseHMSStr((yyvsp[(1) - (1)].str));;} break; case 90: #line 553 "frame/parser.Y" {(yyval.real) = parseDMSStr((yyvsp[(1) - (1)].str));;} break; case 91: #line 557 "frame/parser.Y" { Vector r; if (currentSky == Coord::GALACTIC || currentSky == Coord::ECLIPTIC) r = Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)); else r = Vector((yyvsp[(1) - (2)].real)*360./24.,(yyvsp[(2) - (2)].real)); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 92: #line 569 "frame/parser.Y" { Vector r = Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 93: #line 576 "frame/parser.Y" { Vector r = Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 94: #line 583 "frame/parser.Y" { (yyval.vector)[0] = (yyvsp[(1) - (2)].real); (yyval.vector)[1] = (yyvsp[(2) - (2)].real); (yyval.vector)[2] = 1; ;} break; case 95: #line 590 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::IMAGE;;} break; case 96: #line 591 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::PHYSICAL;;} break; case 97: #line 592 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::DETECTOR;;} break; case 98: #line 593 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::AMPLIFIER;;} break; case 99: #line 594 "frame/parser.Y" {(yyval.integer) = (Coord::CoordSystem)(yyvsp[(1) - (1)].integer);;} break; case 100: #line 597 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCS;;} break; case 101: #line 598 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSA;;} break; case 102: #line 599 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSB;;} break; case 103: #line 600 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSC;;} break; case 104: #line 601 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSD;;} break; case 105: #line 602 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSE;;} break; case 106: #line 603 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSF;;} break; case 107: #line 604 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSG;;} break; case 108: #line 605 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSH;;} break; case 109: #line 606 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSI;;} break; case 110: #line 607 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSJ;;} break; case 111: #line 608 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSK;;} break; case 112: #line 609 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSL;;} break; case 113: #line 610 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSM;;} break; case 114: #line 611 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSN;;} break; case 115: #line 612 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSO;;} break; case 116: #line 613 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSP;;} break; case 117: #line 614 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSQ;;} break; case 118: #line 615 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSR;;} break; case 119: #line 616 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSS;;} break; case 120: #line 617 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCST;;} break; case 121: #line 618 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSU;;} break; case 122: #line 619 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSV;;} break; case 123: #line 620 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSW;;} break; case 124: #line 621 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSX;;} break; case 125: #line 622 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSY;;} break; case 126: #line 623 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCSZ;;} break; case 127: #line 624 "frame/parser.Y" {(yyval.integer) = currentCoord = Coord::WCS0;;} break; case 128: #line 627 "frame/parser.Y" {(yyval.integer) = Coord::CANVAS;;} break; case 129: #line 628 "frame/parser.Y" {(yyval.integer) = Coord::PANNER;;} break; case 130: #line 631 "frame/parser.Y" {(yyval.integer) = FrScale::LINEARSCALE;;} break; case 131: #line 632 "frame/parser.Y" {(yyval.integer) = FrScale::LOGSCALE;;} break; case 132: #line 633 "frame/parser.Y" {(yyval.integer) = FrScale::POWSCALE;;} break; case 133: #line 634 "frame/parser.Y" {(yyval.integer) = FrScale::SQRTSCALE;;} break; case 134: #line 635 "frame/parser.Y" {(yyval.integer) = FrScale::SQUAREDSCALE;;} break; case 135: #line 636 "frame/parser.Y" {(yyval.integer) = FrScale::ASINHSCALE;;} break; case 136: #line 637 "frame/parser.Y" {(yyval.integer) = FrScale::SINHSCALE;;} break; case 137: #line 638 "frame/parser.Y" {(yyval.integer) = FrScale::HISTEQUSCALE;;} break; case 138: #line 641 "frame/parser.Y" {(yyval.integer)=FrScale::SCAN;;} break; case 139: #line 642 "frame/parser.Y" {(yyval.integer)=FrScale::SCAN;;} break; case 140: #line 643 "frame/parser.Y" {(yyval.integer)=FrScale::SAMPLE;;} break; case 141: #line 644 "frame/parser.Y" {(yyval.integer)=FrScale::DATAMIN;;} break; case 142: #line 645 "frame/parser.Y" {(yyval.integer)=FrScale::IRAFMIN;;} break; case 143: #line 648 "frame/parser.Y" {(yyval.integer) = currentSky = Coord::FK5;;} break; case 144: #line 649 "frame/parser.Y" {(yyval.integer) = currentSky = Coord::FK4;;} break; case 145: #line 650 "frame/parser.Y" {(yyval.integer) = currentSky = Coord::FK4_NO_E;;} break; case 146: #line 651 "frame/parser.Y" {(yyval.integer) = currentSky = Coord::FK4;;} break; case 147: #line 652 "frame/parser.Y" {(yyval.integer) = currentSky = Coord::FK5;;} break; case 148: #line 653 "frame/parser.Y" {(yyval.integer) = currentSky = Coord::FK5;;} break; case 149: #line 654 "frame/parser.Y" {(yyval.integer) = currentSky = Coord::ICRS;;} break; case 150: #line 655 "frame/parser.Y" {(yyval.integer) = currentSky = Coord::GALACTIC;;} break; case 151: #line 656 "frame/parser.Y" {(yyval.integer) = currentSky = Coord::SUPERGALACTIC;;} break; case 152: #line 657 "frame/parser.Y" {(yyval.integer) = currentSky = Coord::ECLIPTIC;;} break; case 153: #line 658 "frame/parser.Y" {(yyval.integer) = currentSky = Coord::HELIOECLIPTIC;;} break; case 154: #line 661 "frame/parser.Y" {(yyval.integer)=Coord::DEGREES;;} break; case 155: #line 662 "frame/parser.Y" {(yyval.integer)=Coord::DEGREES;;} break; case 156: #line 663 "frame/parser.Y" {(yyval.integer)=Coord::SEXAGESIMAL;;} break; case 157: #line 666 "frame/parser.Y" {(yyval.integer)=Coord::DEGREE;;} break; case 158: #line 667 "frame/parser.Y" {(yyval.integer)=Coord::DEGREE;;} break; case 159: #line 668 "frame/parser.Y" {(yyval.integer)=Coord::ARCMIN;;} break; case 160: #line 669 "frame/parser.Y" {(yyval.integer)=Coord::ARCSEC;;} break; case 161: #line 672 "frame/parser.Y" {(yyval.real) = (yyvsp[(1) - (1)].real);;} break; case 162: #line 673 "frame/parser.Y" {(yyval.real) = FrScale::MINMAX;;} break; case 163: #line 674 "frame/parser.Y" {(yyval.real) = FrScale::ZSCALE;;} break; case 164: #line 675 "frame/parser.Y" {(yyval.real) = FrScale::ZMAX;;} break; case 165: #line 676 "frame/parser.Y" {(yyval.real) = FrScale::USERCLIP;;} break; case 166: #line 679 "frame/parser.Y" {(yyval.integer) = Base::SHMID;;} break; case 167: #line 680 "frame/parser.Y" {(yyval.integer) = Base::SHMID;;} break; case 168: #line 681 "frame/parser.Y" {(yyval.integer) = Base::KEY;;} break; case 169: #line 684 "frame/parser.Y" {;} break; case 170: #line 685 "frame/parser.Y" {;} break; case 171: #line 686 "frame/parser.Y" {;} break; case 172: #line 689 "frame/parser.Y" {(yyval.integer) = Base::IMG;;} break; case 173: #line 690 "frame/parser.Y" {(yyval.integer) = Base::IMG;;} break; case 174: #line 691 "frame/parser.Y" {(yyval.integer) = Base::MASK;;} break; case 175: #line 694 "frame/parser.Y" {(yyval.integer) = Point::CIRCLE;;} break; case 176: #line 695 "frame/parser.Y" {(yyval.integer) = Point::CIRCLE;;} break; case 177: #line 696 "frame/parser.Y" {(yyval.integer) = Point::BOX;;} break; case 178: #line 697 "frame/parser.Y" {(yyval.integer) = Point::DIAMOND;;} break; case 179: #line 698 "frame/parser.Y" {(yyval.integer) = Point::CROSS;;} break; case 180: #line 699 "frame/parser.Y" {(yyval.integer) = Point::EX;;} break; case 181: #line 700 "frame/parser.Y" {(yyval.integer) = Point::ARROW;;} break; case 182: #line 701 "frame/parser.Y" {(yyval.integer) = Point::BOXCIRCLE;;} break; case 183: #line 704 "frame/parser.Y" {(yyval.integer) = POINTSIZE;;} break; case 184: #line 705 "frame/parser.Y" {(yyval.integer) = (yyvsp[(1) - (1)].integer);;} break; case 185: #line 708 "frame/parser.Y" {(yyval.integer) = Marker::PANDA;;} break; case 186: #line 709 "frame/parser.Y" {(yyval.integer) = Marker::HISTOGRAM;;} break; case 187: #line 710 "frame/parser.Y" {(yyval.integer) = Marker::PLOT2D;;} break; case 188: #line 711 "frame/parser.Y" {(yyval.integer) = Marker::PLOT3D;;} break; case 189: #line 712 "frame/parser.Y" {(yyval.integer) = Marker::RADIAL;;} break; case 190: #line 713 "frame/parser.Y" {(yyval.integer) = Marker::STATS;;} break; case 191: #line 716 "frame/parser.Y" {(yyval.integer) = Marker::AVERAGE;;} break; case 192: #line 717 "frame/parser.Y" {(yyval.integer) = Marker::AVERAGE;;} break; case 193: #line 718 "frame/parser.Y" {(yyval.integer) = Marker::SUM;;} break; case 194: #line 721 "frame/parser.Y" {(yyval.integer) = FitsFile::NATIVE;;} break; case 195: #line 722 "frame/parser.Y" {(yyval.integer) = FitsFile::NATIVE;;} break; case 196: #line 723 "frame/parser.Y" {(yyval.integer) = FitsFile::BIG;;} break; case 197: #line 724 "frame/parser.Y" {(yyval.integer) = FitsFile::BIG;;} break; case 198: #line 725 "frame/parser.Y" {(yyval.integer) = FitsFile::LITTLE;;} break; case 199: #line 726 "frame/parser.Y" {(yyval.integer) = FitsFile::LITTLE;;} break; case 204: #line 733 "frame/parser.Y" {fr->set3dRenderMethodCmd((yyvsp[(2) - (2)].integer));;} break; case 205: #line 734 "frame/parser.Y" {fr->set3dRenderBackgroundCmd((yyvsp[(2) - (2)].integer));;} break; case 206: #line 735 "frame/parser.Y" {fr->set3dScaleCmd((yyvsp[(2) - (2)].real));;} break; case 207: #line 736 "frame/parser.Y" {fr->set3dPreserveCmd();;} break; case 208: #line 738 "frame/parser.Y" {/* needed for compatibility with old version of backup */;} break; case 209: #line 741 "frame/parser.Y" {fr->set3dBorderCmd((yyvsp[(1) - (1)].integer));;} break; case 210: #line 742 "frame/parser.Y" {fr->set3dBorderColorCmd((yyvsp[(2) - (2)].str));;} break; case 211: #line 745 "frame/parser.Y" {fr->set3dCompassCmd((yyvsp[(1) - (1)].integer));;} break; case 212: #line 746 "frame/parser.Y" {fr->set3dCompassColorCmd((yyvsp[(2) - (2)].str));;} break; case 213: #line 749 "frame/parser.Y" {fr->set3dHighliteCmd((yyvsp[(1) - (1)].integer));;} break; case 214: #line 750 "frame/parser.Y" {fr->set3dHighliteColorCmd((yyvsp[(2) - (2)].str));;} break; case 215: #line 753 "frame/parser.Y" {fr->set3dViewCmd((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real));;} break; case 216: #line 755 "frame/parser.Y" {fr->set3dViewPointCmd(Vector3d((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real),(yyvsp[(4) - (6)].real)),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;} break; case 217: #line 756 "frame/parser.Y" {fr->view3dBeginCmd((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real));;} break; case 218: #line 757 "frame/parser.Y" {fr->view3dMotionCmd((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real));;} break; case 219: #line 758 "frame/parser.Y" {fr->view3dEndCmd((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real));;} break; case 220: #line 761 "frame/parser.Y" {fr->analysisMarkersResetCmd();;} break; case 222: #line 766 "frame/parser.Y" {fr->analysisMarkersSelectCmd("circle", fr->mapToRef(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::CANVAS));;} break; case 223: #line 768 "frame/parser.Y" {fr->analysisMarkersSelectCmd("ellipse", fr->mapToRef(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::CANVAS));;} break; case 224: #line 770 "frame/parser.Y" {fr->analysisMarkersSelectCmd("box", fr->mapToRef(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::CANVAS));;} break; case 225: #line 772 "frame/parser.Y" {fr->analysisMarkersSelectCmd("polygon", fr->mapToRef(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::CANVAS));;} break; case 226: #line 774 "frame/parser.Y" {fr->analysisMarkersSelectCmd("point", fr->mapToRef(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::CANVAS));;} break; case 227: #line 776 "frame/parser.Y" {fr->analysisMarkersSelectCmd("vector", fr->mapToRef(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::CANVAS));;} break; case 228: #line 778 "frame/parser.Y" {fr->analysisMarkersSelectCmd("annulus", fr->mapToRef(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::CANVAS));;} break; case 229: #line 780 "frame/parser.Y" {fr->analysisMarkersSelectCmd("ellipseannulus", fr->mapToRef(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::CANVAS));;} break; case 230: #line 782 "frame/parser.Y" {fr->analysisMarkersSelectCmd("boxannulus", fr->mapToRef(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::CANVAS));;} break; case 232: #line 786 "frame/parser.Y" {fr->binColsCmd((yyvsp[(2) - (4)].str),(yyvsp[(3) - (4)].str),(yyvsp[(4) - (4)].str));;} break; case 233: #line 787 "frame/parser.Y" {fr->binDepthCmd((yyvsp[(2) - (2)].integer));;} break; case 236: #line 790 "frame/parser.Y" {fr->binBufferSizeCmd((yyvsp[(3) - (3)].integer));;} break; case 238: #line 792 "frame/parser.Y" {fr->binFilterCmd((yyvsp[(2) - (2)].str));;} break; case 239: #line 795 "frame/parser.Y" {fr->binAboutCmd();;} break; case 240: #line 796 "frame/parser.Y" {fr->binAboutCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 241: #line 799 "frame/parser.Y" {fr->binFactorCmd(Vector((yyvsp[(1) - (1)].real),(yyvsp[(1) - (1)].real)));;} break; case 242: #line 800 "frame/parser.Y" {fr->binFactorCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 243: #line 802 "frame/parser.Y" {fr->binFactorAboutCmd(Vector((yyvsp[(1) - (4)].real),(yyvsp[(1) - (4)].real)), Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;} break; case 244: #line 804 "frame/parser.Y" {fr->binFactorAboutCmd(Vector((yyvsp[(1) - (5)].real),(yyvsp[(2) - (5)].real)), Vector((yyvsp[(4) - (5)].real),(yyvsp[(5) - (5)].real)));;} break; case 245: #line 805 "frame/parser.Y" {fr->binFactorToCmd(Vector((yyvsp[(2) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 246: #line 806 "frame/parser.Y" {fr->binFactorToCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 247: #line 808 "frame/parser.Y" {fr->binFactorToAboutCmd(Vector((yyvsp[(2) - (5)].real),(yyvsp[(2) - (5)].real)), Vector((yyvsp[(4) - (5)].real),(yyvsp[(5) - (5)].real)));;} break; case 248: #line 810 "frame/parser.Y" {fr->binFactorToAboutCmd(Vector((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real)), Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;} break; case 249: #line 813 "frame/parser.Y" {fr->binFunctionCmd(FitsHist::AVERAGE);;} break; case 250: #line 814 "frame/parser.Y" {fr->binFunctionCmd(FitsHist::SUM);;} break; case 251: #line 817 "frame/parser.Y" {fr->binToFitCmd();;} break; case 252: #line 819 "frame/parser.Y" {fr->binCmd(Vector((yyvsp[(1) - (7)].real),(yyvsp[(2) - (7)].real)), (yyvsp[(5) - (7)].str), (yyvsp[(6) - (7)].str), (yyvsp[(7) - (7)].str));;} break; case 253: #line 822 "frame/parser.Y" {fr->binCmd(Vector((yyvsp[(1) - (11)].real),(yyvsp[(2) - (11)].real)), (yyvsp[(3) - (11)].integer), Vector((yyvsp[(4) - (11)].real),(yyvsp[(5) - (11)].real)), (yyvsp[(8) - (11)].str), (yyvsp[(9) - (11)].str), (yyvsp[(10) - (11)].str), (yyvsp[(11) - (11)].str));;} break; case 254: #line 824 "frame/parser.Y" {fr->binCmd(Vector((yyvsp[(1) - (8)].real),(yyvsp[(2) - (8)].real)), Vector((yyvsp[(4) - (8)].real),(yyvsp[(5) - (8)].real)), (yyvsp[(6) - (8)].str), (yyvsp[(7) - (8)].str), (yyvsp[(8) - (8)].str));;} break; case 255: #line 827 "frame/parser.Y" {fr->binCmd(Vector((yyvsp[(1) - (12)].real),(yyvsp[(2) - (12)].real)), (yyvsp[(3) - (12)].integer), Vector((yyvsp[(4) - (12)].real),(yyvsp[(5) - (12)].real)), Vector((yyvsp[(7) - (12)].real),(yyvsp[(8) - (12)].real)), (yyvsp[(9) - (12)].str), (yyvsp[(10) - (12)].str), (yyvsp[(11) - (12)].str), (yyvsp[(12) - (12)].str));;} break; case 256: #line 831 "frame/parser.Y" {fr->blockCmd(Vector((yyvsp[(1) - (1)].real),(yyvsp[(1) - (1)].real)));;} break; case 257: #line 832 "frame/parser.Y" {fr->blockCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 259: #line 836 "frame/parser.Y" {fr->blockToFitCmd();;} break; case 260: #line 837 "frame/parser.Y" {fr->blockToCmd(Vector((yyvsp[(1) - (1)].real),(yyvsp[(1) - (1)].real)));;} break; case 261: #line 838 "frame/parser.Y" {fr->blockToCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 265: #line 844 "frame/parser.Y" {fr->clipUserCmd((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real));;} break; case 267: #line 847 "frame/parser.Y" { // backward compatibility with backup ;} break; case 268: #line 852 "frame/parser.Y" {fr->clipScopeCmd(FrScale::GLOBAL);;} break; case 269: #line 853 "frame/parser.Y" {fr->clipScopeCmd(FrScale::LOCAL);;} break; case 270: #line 856 "frame/parser.Y" {fr->clipModeCmd((yyvsp[(1) - (1)].real));;} break; case 271: #line 857 "frame/parser.Y" {fr->clipModeCmd(FrScale::MINMAX);;} break; case 272: #line 858 "frame/parser.Y" {fr->clipModeCmd(FrScale::ZSCALE);;} break; case 273: #line 859 "frame/parser.Y" {fr->clipModeCmd(FrScale::ZMAX);;} break; case 274: #line 860 "frame/parser.Y" {fr->clipModeCmd(FrScale::USERCLIP);;} break; case 275: #line 863 "frame/parser.Y" {fr->clipMinMaxCmd((FrScale::MinMaxMode)(yyvsp[(2) - (2)].integer),(yyvsp[(1) - (2)].integer));;} break; case 276: #line 864 "frame/parser.Y" {fr->clipMinMaxModeCmd((FrScale::MinMaxMode)(yyvsp[(2) - (2)].integer));;} break; case 277: #line 865 "frame/parser.Y" {fr->clipMinMaxSampleCmd((yyvsp[(2) - (2)].integer));;} break; case 278: #line 868 "frame/parser.Y" {fr->clipZScaleCmd((yyvsp[(1) - (3)].real),(yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 279: #line 870 "frame/parser.Y" { // backward compatibility with backup fr->clipZScaleContrastCmd((yyvsp[(2) - (2)].real)); ;} break; case 280: #line 875 "frame/parser.Y" { // backward compatibility with backup fr->clipZScaleSampleCmd((yyvsp[(2) - (2)].integer)); ;} break; case 281: #line 880 "frame/parser.Y" { // backward compatibility with backup fr->clipZScaleLineCmd((yyvsp[(2) - (2)].integer)); ;} break; case 282: #line 887 "frame/parser.Y" {fr->colormapCmd((yyvsp[(1) - (6)].integer), (yyvsp[(2) - (6)].real), (yyvsp[(3) - (6)].real), (yyvsp[(4) - (6)].integer), (unsigned char*)(yyvsp[(5) - (6)].ptr), (yyvsp[(6) - (6)].integer));;} break; case 283: #line 889 "frame/parser.Y" {fr->colormapCmd((yyvsp[(2) - (10)].real),(yyvsp[(3) - (10)].real),(yyvsp[(4) - (10)].real),(yyvsp[(5) - (10)].real),(yyvsp[(6) - (10)].real),(yyvsp[(7) - (10)].real),(yyvsp[(8) - (10)].integer),(unsigned char*)(yyvsp[(9) - (10)].ptr),(yyvsp[(10) - (10)].integer));;} break; case 284: #line 890 "frame/parser.Y" {fr->colormapBeginCmd();;} break; case 286: #line 892 "frame/parser.Y" {fr->colormapEndCmd();;} break; case 287: #line 896 "frame/parser.Y" {fr->colormapMotionCmd((yyvsp[(1) - (6)].integer), (yyvsp[(2) - (6)].real), (yyvsp[(3) - (6)].real), (yyvsp[(4) - (6)].integer), (unsigned char*)(yyvsp[(5) - (6)].ptr), (yyvsp[(6) - (6)].integer));;} break; case 288: #line 898 "frame/parser.Y" {fr->colormapMotionCmd((yyvsp[(2) - (10)].real),(yyvsp[(3) - (10)].real),(yyvsp[(4) - (10)].real),(yyvsp[(5) - (10)].real),(yyvsp[(6) - (10)].real),(yyvsp[(7) - (10)].real),(yyvsp[(8) - (10)].integer),(unsigned char*)(yyvsp[(9) - (10)].ptr),(yyvsp[(10) - (10)].integer));;} break; case 289: #line 900 "frame/parser.Y" {fr->colorScaleCmd((FrScale::ColorScaleType)(yyvsp[(1) - (1)].integer));;} break; case 290: #line 901 "frame/parser.Y" {fr->colorScaleLogCmd((yyvsp[(2) - (2)].real));;} break; case 296: #line 912 "frame/parser.Y" {fr->contourCreateCmd((yyvsp[(1) - (12)].str),(yyvsp[(2) - (12)].integer),(yyvsp[(3) - (12)].integer),(FVContour::Method)(yyvsp[(4) - (12)].integer),(yyvsp[(5) - (12)].integer),(yyvsp[(6) - (12)].integer),(FrScale::ColorScaleType)(yyvsp[(7) - (12)].integer),(yyvsp[(8) - (12)].real),(yyvsp[(9) - (12)].real),Vector((yyvsp[(10) - (12)].real),(yyvsp[(11) - (12)].real)),(yyvsp[(12) - (12)].str));;} break; case 297: #line 913 "frame/parser.Y" {fr->contourCreatePolygonCmd();;} break; case 298: #line 916 "frame/parser.Y" {fr->contourDeleteCmd();;} break; case 299: #line 917 "frame/parser.Y" {fr->contourDeleteAuxCmd();;} break; case 300: #line 920 "frame/parser.Y" {fr->contourLoadCmd((yyvsp[(1) - (1)].str));;} break; case 301: #line 921 "frame/parser.Y" {fr->contourLoadCmd((yyvsp[(1) - (4)].str),(yyvsp[(2) - (4)].str),(yyvsp[(3) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 302: #line 923 "frame/parser.Y" { // backward compatibility with backup fr->contourLoadCmd((yyvsp[(4) - (6)].str),(Coord::CoordSystem)(yyvsp[(5) - (6)].integer),(Coord::SkyFrame)(yyvsp[(6) - (6)].integer),(yyvsp[(1) - (6)].str),(yyvsp[(2) - (6)].integer),(yyvsp[(3) - (6)].integer)); ;} break; case 303: #line 929 "frame/parser.Y" {(yyval.integer) = FVContour::SMOOTH;;} break; case 304: #line 930 "frame/parser.Y" {(yyval.integer) = FVContour::BLOCK;;} break; case 305: #line 933 "frame/parser.Y" {fr->contourPasteCmd((yyvsp[(1) - (1)].str));;} break; case 306: #line 934 "frame/parser.Y" {fr->contourPasteCmd((yyvsp[(1) - (4)].str),(yyvsp[(2) - (4)].str),(yyvsp[(3) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 307: #line 938 "frame/parser.Y" {fr->contourSaveCmd((yyvsp[(1) - (3)].str), (Coord::CoordSystem)(yyvsp[(2) - (3)].integer), (Coord::SkyFrame)(yyvsp[(3) - (3)].integer));;} break; case 308: #line 940 "frame/parser.Y" {fr->contourSaveAuxCmd((yyvsp[(2) - (4)].str),(Coord::CoordSystem)(yyvsp[(3) - (4)].integer),(Coord::SkyFrame)(yyvsp[(4) - (4)].integer));;} break; case 309: #line 943 "frame/parser.Y" {fr->cropCmd();;} break; case 310: #line 945 "frame/parser.Y" {fr->cropCmd(Vector((yyvsp[(1) - (6)].real),(yyvsp[(2) - (6)].real)), Vector((yyvsp[(3) - (6)].real),(yyvsp[(4) - (6)].real)), (Coord::CoordSystem)(yyvsp[(5) - (6)].integer), (Coord::SkyFrame)(yyvsp[(6) - (6)].integer));;} break; case 311: #line 948 "frame/parser.Y" {fr->cropCenterCmd(Vector((yyvsp[(2) - (8)].vector)), (Coord::CoordSystem)(yyvsp[(3) - (8)].integer), (Coord::SkyFrame)(yyvsp[(4) - (8)].integer), Vector((yyvsp[(5) - (8)].real),(yyvsp[(6) - (8)].real)), (Coord::CoordSystem)(yyvsp[(7) - (8)].integer), (Coord::SkyDist)(yyvsp[(8) - (8)].integer));;} break; case 313: #line 950 "frame/parser.Y" {fr->cropBeginCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 314: #line 951 "frame/parser.Y" {fr->cropMotionCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 315: #line 952 "frame/parser.Y" {fr->cropEndCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 316: #line 955 "frame/parser.Y" {fr->crop3dCmd();;} break; case 317: #line 956 "frame/parser.Y" {fr->crop3dCmd((yyvsp[(1) - (3)].real), (yyvsp[(2) - (3)].real), (Coord::CoordSystem)(yyvsp[(3) - (3)].integer));;} break; case 318: #line 957 "frame/parser.Y" {fr->crop3dBeginCmd(Vector((yyvsp[(2) - (4)].real),(yyvsp[(3) - (4)].real)),(yyvsp[(4) - (4)].integer));;} break; case 319: #line 958 "frame/parser.Y" {fr->crop3dMotionCmd(Vector((yyvsp[(2) - (4)].real),(yyvsp[(3) - (4)].real)),(yyvsp[(4) - (4)].integer));;} break; case 320: #line 959 "frame/parser.Y" {fr->crop3dEndCmd(Vector((yyvsp[(2) - (4)].real),(yyvsp[(3) - (4)].real)),(yyvsp[(4) - (4)].integer));;} break; case 321: #line 963 "frame/parser.Y" {fr->crosshairCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), (Coord::InternalSystem)(yyvsp[(1) - (3)].integer));;} break; case 322: #line 965 "frame/parser.Y" {fr->crosshairCmd(Vector((yyvsp[(3) - (3)].vector)), (Coord::CoordSystem)(yyvsp[(1) - (3)].integer), (Coord::SkyFrame)(yyvsp[(2) - (3)].integer));;} break; case 323: #line 966 "frame/parser.Y" {fr->crosshairCmd((yyvsp[(1) - (1)].integer));;} break; case 324: #line 967 "frame/parser.Y" {fr->crosshairWarpCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 325: #line 970 "frame/parser.Y" {fr->crosshairCmd(Vector((yyvsp[(4) - (5)].real),(yyvsp[(5) - (5)].real)), (Coord::InternalSystem)(yyvsp[(3) - (5)].integer));;} break; case 326: #line 972 "frame/parser.Y" {fr->crosshairCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)), (Coord::InternalSystem)(yyvsp[(2) - (4)].integer));;} break; case 327: #line 974 "frame/parser.Y" {fr->crosshairCmd(Vector((yyvsp[(4) - (4)].vector)), (Coord::CoordSystem)(yyvsp[(3) - (4)].integer));;} break; case 328: #line 976 "frame/parser.Y" {fr->crosshairCmd(Vector((yyvsp[(3) - (3)].vector)), (Coord::CoordSystem)(yyvsp[(2) - (3)].integer));;} break; case 329: #line 979 "frame/parser.Y" {fr->axesOrderCmd((yyvsp[(2) - (2)].integer));;} break; case 330: #line 982 "frame/parser.Y" {fr->fitsyHasExtCmd((yyvsp[(3) - (3)].str));;} break; case 331: #line 985 "frame/parser.Y" {fr->getBgColorCmd();;} break; case 345: #line 999 "frame/parser.Y" {fr->getDATASECCmd();;} break; case 348: #line 1002 "frame/parser.Y" {fr->getHistogramCmd((yyvsp[(2) - (4)].str),(yyvsp[(3) - (4)].str),(yyvsp[(4) - (4)].integer));;} break; case 349: #line 1004 "frame/parser.Y" {fr->getHorzCutCmd((yyvsp[(3) - (7)].str),(yyvsp[(4) - (7)].str),Vector((yyvsp[(5) - (7)].real),(yyvsp[(6) - (7)].real)),(Coord::InternalSystem)(yyvsp[(7) - (7)].integer));;} break; case 352: #line 1007 "frame/parser.Y" {fr->getIRAFAlignCmd();;} break; case 353: #line 1008 "frame/parser.Y" {fr->getMinMaxCmd();;} break; case 356: #line 1011 "frame/parser.Y" {fr->getNANColorCmd();;} break; case 357: #line 1012 "frame/parser.Y" {fr->getOrientCmd();;} break; case 359: #line 1015 "frame/parser.Y" {fr->getPixelTableCmd(Vector((yyvsp[(4) - (8)].real),(yyvsp[(5) - (8)].real)), (Coord::InternalSystem)(yyvsp[(3) - (8)].integer), (yyvsp[(6) - (8)].integer), (yyvsp[(7) - (8)].integer), (yyvsp[(8) - (8)].str));;} break; case 361: #line 1017 "frame/parser.Y" {fr->getRotateCmd();;} break; case 363: #line 1019 "frame/parser.Y" {fr->getThreadsCmd();;} break; case 365: #line 1021 "frame/parser.Y" {fr->getTypeCmd();;} break; case 366: #line 1023 "frame/parser.Y" {fr->getValueCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)),(Coord::InternalSystem)(yyvsp[(2) - (4)].integer));;} break; case 367: #line 1025 "frame/parser.Y" {fr->getVertCutCmd((yyvsp[(3) - (7)].str),(yyvsp[(4) - (7)].str),Vector((yyvsp[(5) - (7)].real),(yyvsp[(6) - (7)].real)),(Coord::InternalSystem)(yyvsp[(7) - (7)].integer));;} break; case 369: #line 1027 "frame/parser.Y" {fr->getZoomCmd();;} break; case 370: #line 1030 "frame/parser.Y" {fr->getBinDepthCmd();;} break; case 371: #line 1031 "frame/parser.Y" {fr->getBinFactorCmd();;} break; case 372: #line 1032 "frame/parser.Y" {fr->getBinFunctionCmd();;} break; case 373: #line 1033 "frame/parser.Y" {fr->getBinBufferSizeCmd();;} break; case 374: #line 1034 "frame/parser.Y" {fr->getBinCursorCmd();;} break; case 375: #line 1035 "frame/parser.Y" {fr->getBinFilterCmd();;} break; case 377: #line 1037 "frame/parser.Y" {fr->getBinListCmd();;} break; case 378: #line 1040 "frame/parser.Y" {fr->getBinColsCmd();;} break; case 379: #line 1041 "frame/parser.Y" {fr->getBinColsMinMaxCmd((yyvsp[(2) - (2)].str));;} break; case 380: #line 1042 "frame/parser.Y" {fr->getBinColsDimCmd((yyvsp[(2) - (2)].str));;} break; case 381: #line 1045 "frame/parser.Y" {fr->getBlockCmd();;} break; case 383: #line 1049 "frame/parser.Y" {fr->getClipScopeCmd();;} break; case 384: #line 1050 "frame/parser.Y" {fr->getClipModeCmd();;} break; case 386: #line 1052 "frame/parser.Y" {fr->getClipUserCmd();;} break; case 388: #line 1055 "frame/parser.Y" { // backward compatibility with backup fr->getClipPreserveCmd(); ;} break; case 389: #line 1061 "frame/parser.Y" {fr->getClipCmd();;} break; case 390: #line 1062 "frame/parser.Y" {fr->getClipCmd((yyvsp[(1) - (1)].real));;} break; case 391: #line 1063 "frame/parser.Y" {fr->getClipCmd(FrScale::MINMAX);;} break; case 392: #line 1064 "frame/parser.Y" {fr->getClipCmd(FrScale::ZSCALE);;} break; case 393: #line 1065 "frame/parser.Y" {fr->getClipCmd(FrScale::ZMAX);;} break; case 394: #line 1066 "frame/parser.Y" {fr->getClipCmd(FrScale::USERCLIP);;} break; case 395: #line 1069 "frame/parser.Y" {fr->getClipMinMaxModeCmd();;} break; case 396: #line 1070 "frame/parser.Y" {fr->getClipMinMaxSampleCmd();;} break; case 397: #line 1073 "frame/parser.Y" {fr->getClipZScaleContrastCmd();;} break; case 398: #line 1074 "frame/parser.Y" {fr->getClipZScaleSampleCmd();;} break; case 399: #line 1075 "frame/parser.Y" {fr->getClipZScaleLineCmd();;} break; case 400: #line 1078 "frame/parser.Y" {fr->getColorbarCmd();;} break; case 401: #line 1079 "frame/parser.Y" {fr->getColorbarTagCmd();;} break; case 403: #line 1085 "frame/parser.Y" {fr->getColorMapLevelCmd((yyvsp[(1) - (1)].integer));;} break; case 404: #line 1087 "frame/parser.Y" {fr->getColorMapLevelCmd((yyvsp[(1) - (4)].integer),Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)),(Coord::InternalSystem)(yyvsp[(2) - (4)].integer));;} break; case 405: #line 1089 "frame/parser.Y" {fr->getColorMapLevelCmd((yyvsp[(1) - (5)].integer),(yyvsp[(2) - (5)].real),(yyvsp[(3) - (5)].real),(FrScale::ColorScaleType)(yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].real));;} break; case 406: #line 1092 "frame/parser.Y" {fr->getColorScaleCmd();;} break; case 408: #line 1094 "frame/parser.Y" {fr->getColorScaleLogCmd();;} break; case 409: #line 1098 "frame/parser.Y" {fr->getColorScaleLevelCmd((yyvsp[(1) - (5)].integer),(yyvsp[(2) - (5)].real),(yyvsp[(3) - (5)].real),(FrScale::ColorScaleType)(yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].real));;} break; case 410: #line 1102 "frame/parser.Y" {fr->getContourCmd((Coord::CoordSystem)(yyvsp[(1) - (2)].integer),(Coord::SkyFrame)(yyvsp[(2) - (2)].integer));;} break; case 412: #line 1104 "frame/parser.Y" {fr->getContourColorNameCmd();;} break; case 413: #line 1105 "frame/parser.Y" {fr->getContourDashCmd();;} break; case 414: #line 1106 "frame/parser.Y" {fr->getContourLevelCmd();;} break; case 415: #line 1107 "frame/parser.Y" {fr->getContourNumLevelCmd();;} break; case 416: #line 1108 "frame/parser.Y" {fr->getContourMethodCmd();;} break; case 418: #line 1110 "frame/parser.Y" {fr->getContourSmoothCmd();;} break; case 419: #line 1111 "frame/parser.Y" {fr->getContourLineWidthCmd();;} break; case 420: #line 1114 "frame/parser.Y" {fr->getContourClipCmd();;} break; case 421: #line 1115 "frame/parser.Y" {fr->getContourClipModeCmd();;} break; case 422: #line 1118 "frame/parser.Y" {fr->getContourScaleCmd();;} break; case 423: #line 1119 "frame/parser.Y" {fr->getContourScaleLogCmd();;} break; case 424: #line 1123 "frame/parser.Y" {fr->getCoordCmd(Vector((yyvsp[(1) - (5)].real),(yyvsp[(2) - (5)].real)), (Coord::CoordSystem)(yyvsp[(3) - (5)].integer), (Coord::SkyFrame)(yyvsp[(4) - (5)].integer), (Coord::SkyFormat)(yyvsp[(5) - (5)].integer));;} break; case 425: #line 1125 "frame/parser.Y" { // backward compatibility fr->getCoordCmd(Vector((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real)), (Coord::CoordSystem)(yyvsp[(4) - (6)].integer), (Coord::SkyFrame)(yyvsp[(5) - (6)].integer), (Coord::SkyFormat)(yyvsp[(6) - (6)].integer)); ;} break; case 426: #line 1131 "frame/parser.Y" {fr->getCoord3axisCmd((yyvsp[(1) - (4)].real), (Coord::CoordSystem)(yyvsp[(2) - (4)].integer), (Coord::CoordSystem)(yyvsp[(3) - (4)].integer), (yyvsp[(4) - (4)].integer));;} break; case 427: #line 1135 "frame/parser.Y" {fr->getCropCmd((Coord::CoordSystem)(yyvsp[(1) - (3)].integer), (Coord::SkyFrame)(yyvsp[(2) - (3)].integer), (Coord::SkyFormat)(yyvsp[(3) - (3)].integer));;} break; case 428: #line 1137 "frame/parser.Y" {fr->getCropCenterCmd((Coord::CoordSystem)(yyvsp[(2) - (6)].integer), (Coord::SkyFrame)(yyvsp[(3) - (6)].integer), (Coord::SkyFormat)(yyvsp[(4) - (6)].integer), (Coord::CoordSystem)(yyvsp[(5) - (6)].integer), (Coord::SkyDist)(yyvsp[(6) - (6)].integer));;} break; case 429: #line 1138 "frame/parser.Y" {fr->getCrop3dCmd((Coord::CoordSystem)(yyvsp[(2) - (2)].integer));;} break; case 430: #line 1141 "frame/parser.Y" {fr->getCrosshairCmd((Coord::InternalSystem)(yyvsp[(1) - (1)].integer));;} break; case 431: #line 1143 "frame/parser.Y" {fr->getCrosshairCmd((Coord::CoordSystem)(yyvsp[(1) - (3)].integer), (Coord::SkyFrame)(yyvsp[(2) - (3)].integer), (Coord::SkyFormat)(yyvsp[(3) - (3)].integer));;} break; case 432: #line 1144 "frame/parser.Y" {fr->getCrosshairStatusCmd();;} break; case 433: #line 1147 "frame/parser.Y" {fr->getAxesOrderCmd();;} break; case 434: #line 1150 "frame/parser.Y" {fr->getCursorCmd((Coord::InternalSystem)(yyvsp[(1) - (1)].integer));;} break; case 435: #line 1152 "frame/parser.Y" {fr->getCursorCmd((Coord::CoordSystem)(yyvsp[(1) - (3)].integer), (Coord::SkyFrame)(yyvsp[(2) - (3)].integer), (Coord::SkyFormat)(yyvsp[(3) - (3)].integer));;} break; case 436: #line 1156 "frame/parser.Y" {fr->getDataValuesCmd(1, Vector((yyvsp[(3) - (6)].vector)), (Coord::CoordSystem)(yyvsp[(1) - (6)].integer), (Coord::SkyFrame)(yyvsp[(2) - (6)].integer), Vector((yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real)), (yyvsp[(6) - (6)].str));;} break; case 437: #line 1158 "frame/parser.Y" {fr->getDataValuesCmd((yyvsp[(1) - (7)].integer), Vector((yyvsp[(4) - (7)].vector)), (Coord::CoordSystem)(yyvsp[(2) - (7)].integer), (Coord::SkyFrame)(yyvsp[(3) - (7)].integer), Vector((yyvsp[(5) - (7)].real),(yyvsp[(6) - (7)].real)), (yyvsp[(7) - (7)].str));;} break; case 438: #line 1161 "frame/parser.Y" {fr->getDataValuesCmd(Vector((yyvsp[(2) - (5)].real),(yyvsp[(3) - (5)].real)),(Coord::InternalSystem)(yyvsp[(1) - (5)].integer), Vector((yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].integer)));;} break; case 439: #line 1165 "frame/parser.Y" {fr->getInfoCmd((yyvsp[(1) - (1)].str));;} break; case 440: #line 1166 "frame/parser.Y" {fr->getInfoClipCmd();;} break; case 441: #line 1168 "frame/parser.Y" {fr->getInfoCmd(Vector((yyvsp[(2) - (4)].real),(yyvsp[(3) - (4)].real)), (Coord::InternalSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(4) - (4)].str));;} break; case 442: #line 1171 "frame/parser.Y" {fr->iisGetCmd((char*)(yyvsp[(1) - (5)].ptr),(yyvsp[(2) - (5)].integer),(yyvsp[(3) - (5)].integer),(yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].integer));;} break; case 443: #line 1172 "frame/parser.Y" {fr->iisGetCursorCmd();;} break; case 445: #line 1176 "frame/parser.Y" {fr->iisGetFileNameCmd();;} break; case 446: #line 1177 "frame/parser.Y" {fr->iisGetFileNameCmd((yyvsp[(1) - (1)].integer));;} break; case 447: #line 1178 "frame/parser.Y" {fr->iisGetFileNameCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 448: #line 1181 "frame/parser.Y" {fr->getFitsNAxesCmd();;} break; case 449: #line 1183 "frame/parser.Y" {fr->getFitsCenterCmd((Coord::CoordSystem)(yyvsp[(2) - (4)].integer),(Coord::SkyFrame)(yyvsp[(3) - (4)].integer),(Coord::SkyFormat)(yyvsp[(4) - (4)].integer));;} break; case 450: #line 1184 "frame/parser.Y" {fr->getFitsCountCmd();;} break; case 452: #line 1186 "frame/parser.Y" {fr->getBitpixCmd();;} break; case 456: #line 1190 "frame/parser.Y" {fr->getFitsHeightCmd();;} break; case 457: #line 1191 "frame/parser.Y" {fr->getFitsObjectNameCmd();;} break; case 458: #line 1192 "frame/parser.Y" {fr->getFitsSizeCmd();;} break; case 459: #line 1194 "frame/parser.Y" {fr->getFitsSizeCmd((Coord::CoordSystem)(yyvsp[(2) - (4)].integer),(Coord::SkyFrame)(yyvsp[(3) - (4)].integer),(Coord::SkyDist)(yyvsp[(4) - (4)].integer));;} break; case 461: #line 1196 "frame/parser.Y" {fr->getFitsWidthCmd();;} break; case 462: #line 1199 "frame/parser.Y" {fr->getFitsExtCmd((yyvsp[(1) - (1)].integer));;} break; case 463: #line 1201 "frame/parser.Y" {fr->getFitsExtCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)),(Coord::InternalSystem)(yyvsp[(1) - (3)].integer));;} break; case 464: #line 1203 "frame/parser.Y" {fr->getFitsHeaderCmd((yyvsp[(1) - (1)].integer));;} break; case 465: #line 1204 "frame/parser.Y" {fr->getFitsHeaderKeywordCmd(1,(yyvsp[(2) - (2)].str));;} break; case 466: #line 1205 "frame/parser.Y" {fr->getFitsHeaderKeywordCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].str));;} break; case 467: #line 1206 "frame/parser.Y" {fr->getFitsHeaderWCSCmd((yyvsp[(2) - (2)].integer));;} break; case 468: #line 1209 "frame/parser.Y" {fr->getFitsDepthCmd(2);;} break; case 469: #line 1210 "frame/parser.Y" {fr->getFitsDepthCmd((yyvsp[(1) - (1)].integer));;} break; case 470: #line 1214 "frame/parser.Y" {fr->getFitsFileNameCmd((Base::FileNameType)(yyvsp[(1) - (1)].integer));;} break; case 471: #line 1216 "frame/parser.Y" {fr->getFitsFileNameCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)), (Coord::InternalSystem)(yyvsp[(2) - (4)].integer), (Base::FileNameType)(yyvsp[(1) - (4)].integer));;} break; case 472: #line 1219 "frame/parser.Y" {fr->getFitsFileNameCmd((yyvsp[(2) - (2)].integer), (Base::FileNameType)(yyvsp[(1) - (2)].integer));;} break; case 473: #line 1222 "frame/parser.Y" {fr->getFitsSliceCmd(2);;} break; case 474: #line 1223 "frame/parser.Y" {fr->getFitsSliceCmd((yyvsp[(1) - (1)].integer));;} break; case 475: #line 1224 "frame/parser.Y" {fr->getFitsSliceCmd(2, (Coord::CoordSystem)(yyvsp[(1) - (1)].integer));;} break; case 476: #line 1225 "frame/parser.Y" {fr->getFitsSliceCmd((yyvsp[(1) - (2)].integer), (Coord::CoordSystem)(yyvsp[(2) - (2)].integer));;} break; case 477: #line 1228 "frame/parser.Y" {fr->getGridCmd();;} break; case 478: #line 1229 "frame/parser.Y" {fr->getGridOptionCmd();;} break; case 479: #line 1230 "frame/parser.Y" {fr->getGridVarsCmd();;} break; case 480: #line 1233 "frame/parser.Y" {fr->getMaskColorCmd();;} break; case 481: #line 1234 "frame/parser.Y" {fr->getMaskMarkCmd();;} break; case 482: #line 1235 "frame/parser.Y" {fr->getMaskTransparencyCmd();;} break; case 483: #line 1238 "frame/parser.Y" {fr->getPanPreserveCmd();;} break; case 484: #line 1241 "frame/parser.Y" {fr->getRGBChannelCmd();;} break; case 485: #line 1242 "frame/parser.Y" {fr->getRGBSystemCmd();;} break; case 486: #line 1243 "frame/parser.Y" {fr->getRGBViewCmd();;} break; case 487: #line 1246 "frame/parser.Y" {fr->getSmoothFunctionCmd();;} break; case 488: #line 1247 "frame/parser.Y" {fr->getSmoothRadiusCmd();;} break; case 493: #line 1254 "frame/parser.Y" {fr->get3dRenderMethodCmd();;} break; case 494: #line 1255 "frame/parser.Y" {fr->get3dRenderBackgroundCmd();;} break; case 495: #line 1256 "frame/parser.Y" {fr->get3dScaleCmd();;} break; case 496: #line 1259 "frame/parser.Y" {fr->get3dBorderCmd();;} break; case 497: #line 1260 "frame/parser.Y" {fr->get3dBorderColorCmd();;} break; case 498: #line 1263 "frame/parser.Y" {fr->get3dCompassCmd();;} break; case 499: #line 1264 "frame/parser.Y" {fr->get3dCompassColorCmd();;} break; case 500: #line 1267 "frame/parser.Y" {fr->get3dHighliteCmd();;} break; case 501: #line 1268 "frame/parser.Y" {fr->get3dHighliteColorCmd();;} break; case 502: #line 1271 "frame/parser.Y" {fr->get3dViewCmd();;} break; case 503: #line 1272 "frame/parser.Y" {fr->get3dViewPointCmd();;} break; case 504: #line 1275 "frame/parser.Y" {fr->getWCSCmd();;} break; case 506: #line 1277 "frame/parser.Y" {fr->getWCSNameCmd((Coord::CoordSystem)(yyvsp[(2) - (2)].integer));;} break; case 507: #line 1280 "frame/parser.Y" {fr->getWCSAlignCmd();;} break; case 508: #line 1281 "frame/parser.Y" {fr->getWCSAlignPointerCmd();;} break; case 510: #line 1285 "frame/parser.Y" {fr->gridDeleteCmd();;} break; case 511: #line 1289 "frame/parser.Y" {fr->gridCmd((Coord::CoordSystem)(yyvsp[(1) - (6)].integer), (Coord::SkyFrame)(yyvsp[(2) - (6)].integer), (Coord::SkyFormat)(yyvsp[(3) - (6)].integer), (Grid2d::GridType)(yyvsp[(4) - (6)].integer), (yyvsp[(5) - (6)].str), (yyvsp[(6) - (6)].str));;} break; case 512: #line 1292 "frame/parser.Y" { // backward compatibility with backup fr->gridCmd((Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (Coord::SkyFrame)(yyvsp[(2) - (5)].integer), (Coord::SkyFormat)(yyvsp[(3) - (5)].integer), (Grid2d::GridType)(yyvsp[(4) - (5)].integer), (yyvsp[(5) - (5)].str), ""); ;} break; case 513: #line 1299 "frame/parser.Y" {(yyval.integer)=Grid2d::ANALYSIS;;} break; case 514: #line 1300 "frame/parser.Y" {(yyval.integer)=Grid2d::PUBLICATION;;} break; case 515: #line 1303 "frame/parser.Y" {fr->hasAmplifierCmd();;} break; case 518: #line 1306 "frame/parser.Y" {fr->hasCropCmd();;} break; case 519: #line 1307 "frame/parser.Y" {fr->hasDATAMINCmd();;} break; case 520: #line 1308 "frame/parser.Y" {fr->hasDATASECCmd();;} break; case 521: #line 1309 "frame/parser.Y" {fr->hasDetectorCmd();;} break; case 523: #line 1311 "frame/parser.Y" {fr->hasGridCmd();;} break; case 524: #line 1312 "frame/parser.Y" {fr->hasIISCmd();;} break; case 525: #line 1313 "frame/parser.Y" {fr->hasIRAFMINCmd();;} break; case 527: #line 1315 "frame/parser.Y" {fr->hasPhysicalCmd();;} break; case 528: #line 1316 "frame/parser.Y" {fr->hasSmoothCmd();;} break; case 529: #line 1317 "frame/parser.Y" {fr->hasSystemCmd((Coord::CoordSystem)(yyvsp[(2) - (2)].integer));;} break; case 531: #line 1321 "frame/parser.Y" {fr->hasBinColCmd((yyvsp[(2) - (2)].str));;} break; case 532: #line 1324 "frame/parser.Y" {fr->hasContourCmd();;} break; case 533: #line 1325 "frame/parser.Y" {fr->hasContourAuxCmd();;} break; case 534: #line 1328 "frame/parser.Y" {fr->hasFitsCmd();;} break; case 535: #line 1329 "frame/parser.Y" {fr->hasFitsBinCmd();;} break; case 536: #line 1330 "frame/parser.Y" {fr->hasFitsCubeCmd();;} break; case 537: #line 1331 "frame/parser.Y" {fr->hasFitsMosaicCmd();;} break; case 538: #line 1334 "frame/parser.Y" {fr->hasMarkerHighlitedCmd();;} break; case 539: #line 1335 "frame/parser.Y" {fr->hasMarkerSelectedCmd();;} break; case 540: #line 1336 "frame/parser.Y" {fr->hasMarkerPasteCmd();;} break; case 541: #line 1337 "frame/parser.Y" {fr->hasMarkerUndoCmd();;} break; case 542: #line 1340 "frame/parser.Y" {fr->hasWCSCmd((Coord::CoordSystem)(yyvsp[(1) - (1)].integer));;} break; case 543: #line 1341 "frame/parser.Y" {fr->hasWCSEquCmd((Coord::CoordSystem)(yyvsp[(2) - (2)].integer));;} break; case 544: #line 1342 "frame/parser.Y" {fr->hasWCSCelCmd((Coord::CoordSystem)(yyvsp[(2) - (2)].integer));;} break; case 545: #line 1343 "frame/parser.Y" {fr->hasWCSAltCmd();;} break; case 546: #line 1344 "frame/parser.Y" {fr->hasWCSxCmd((Coord::CoordSystem)(yyvsp[(2) - (2)].integer));;} break; case 547: #line 1347 "frame/parser.Y" {fr->iisCmd((yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 548: #line 1348 "frame/parser.Y" {fr->iisEraseCmd();;} break; case 549: #line 1349 "frame/parser.Y" {fr->iisMessageCmd((yyvsp[(2) - (2)].str));;} break; case 552: #line 1353 "frame/parser.Y" {fr->iisSetCmd((const char*)(yyvsp[(2) - (6)].ptr),(yyvsp[(3) - (6)].integer),(yyvsp[(4) - (6)].integer),(yyvsp[(5) - (6)].integer),(yyvsp[(6) - (6)].integer));;} break; case 553: #line 1354 "frame/parser.Y" {fr->iisUpdateCmd();;} break; case 554: #line 1357 "frame/parser.Y" {fr->iisWCSCmd(Matrix((yyvsp[(2) - (10)].real),(yyvsp[(3) - (10)].real),(yyvsp[(4) - (10)].real),(yyvsp[(5) - (10)].real),(yyvsp[(6) - (10)].real),(yyvsp[(7) - (10)].real)),Vector((yyvsp[(8) - (10)].real),(yyvsp[(9) - (10)].real)),(yyvsp[(10) - (10)].integer));;} break; case 555: #line 1360 "frame/parser.Y" {fr->iisSetFileNameCmd((yyvsp[(1) - (1)].str));;} break; case 556: #line 1361 "frame/parser.Y" {fr->iisSetFileNameCmd((yyvsp[(1) - (2)].str),(yyvsp[(2) - (2)].integer));;} break; case 557: #line 1365 "frame/parser.Y" {fr->iisSetCursorCmd(Vector((yyvsp[(1) - (3)].integer),(yyvsp[(2) - (3)].integer)),Coord::CANVAS);;} break; case 558: #line 1367 "frame/parser.Y" {fr->iisSetCursorCmd(Vector((yyvsp[(1) - (3)].integer),(yyvsp[(2) - (3)].integer)),(Coord::CoordSystem)(yyvsp[(3) - (3)].integer));;} break; case 559: #line 1368 "frame/parser.Y" {fr->iisCursorModeCmd((yyvsp[(2) - (2)].integer));;} break; case 566: #line 1380 "frame/parser.Y" {fr->loadArrAllocCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 567: #line 1382 "frame/parser.Y" {fr->loadArrAllocGZCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 568: #line 1384 "frame/parser.Y" {fr->loadArrChannelCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 569: #line 1385 "frame/parser.Y" {fr->loadArrMMapCmd((yyvsp[(1) - (3)].str), (Base::LayerType)(yyvsp[(3) - (3)].integer));;} break; case 570: #line 1387 "frame/parser.Y" {fr->loadArrMMapIncrCmd((yyvsp[(1) - (3)].str), (Base::LayerType)(yyvsp[(3) - (3)].integer));;} break; case 571: #line 1389 "frame/parser.Y" {fr->loadArrShareCmd((Base::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(1) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 572: #line 1391 "frame/parser.Y" {fr->loadArrSocketCmd((yyvsp[(3) - (4)].integer), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 573: #line 1393 "frame/parser.Y" {fr->loadArrSocketGZCmd((yyvsp[(3) - (4)].integer), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 574: #line 1395 "frame/parser.Y" {fr->loadArrVarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 576: #line 1399 "frame/parser.Y" {fr->loadArrayRGBCubeAllocCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 577: #line 1400 "frame/parser.Y" {fr->loadArrayRGBCubeAllocGZCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 578: #line 1401 "frame/parser.Y" {fr->loadArrayRGBCubeChannelCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 579: #line 1402 "frame/parser.Y" {fr->loadArrayRGBCubeMMapCmd((yyvsp[(1) - (2)].str));;} break; case 580: #line 1403 "frame/parser.Y" {fr->loadArrayRGBCubeMMapIncrCmd((yyvsp[(1) - (2)].str));;} break; case 581: #line 1405 "frame/parser.Y" {fr->loadArrayRGBCubeShareCmd((Base::ShmType)(yyvsp[(3) - (4)].integer), (yyvsp[(4) - (4)].integer), (yyvsp[(1) - (4)].str));;} break; case 582: #line 1406 "frame/parser.Y" {fr->loadArrayRGBCubeSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;} break; case 583: #line 1407 "frame/parser.Y" {fr->loadArrayRGBCubeSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;} break; case 584: #line 1408 "frame/parser.Y" {fr->loadArrayRGBCubeVarCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 585: #line 1411 "frame/parser.Y" {fr->loadENVISMMapCmd((yyvsp[(1) - (3)].str),(yyvsp[(2) - (3)].str));;} break; case 586: #line 1415 "frame/parser.Y" {fr->loadFitsAllocCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 587: #line 1417 "frame/parser.Y" {fr->loadFitsAllocGZCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 588: #line 1419 "frame/parser.Y" {fr->loadFitsChannelCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 589: #line 1421 "frame/parser.Y" {fr->loadFitsMMapCmd((yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 590: #line 1423 "frame/parser.Y" {fr->loadFitsSMMapCmd((yyvsp[(1) - (5)].str), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 591: #line 1425 "frame/parser.Y" {fr->loadFitsMMapIncrCmd((yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 592: #line 1427 "frame/parser.Y" {fr->loadFitsShareCmd((Base::ShmType)(yyvsp[(3) - (6)].integer), (yyvsp[(4) - (6)].integer), (yyvsp[(1) - (6)].str), (Base::LayerType)(yyvsp[(6) - (6)].integer));;} break; case 593: #line 1429 "frame/parser.Y" {fr->loadFitsSShareCmd((Base::ShmType)(yyvsp[(3) - (7)].integer), (yyvsp[(4) - (7)].integer), (yyvsp[(5) - (7)].integer), (yyvsp[(1) - (7)].str), (Base::LayerType)(yyvsp[(7) - (7)].integer));;} break; case 594: #line 1432 "frame/parser.Y" {fr->loadFitsSocketCmd((yyvsp[(3) - (4)].integer), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 595: #line 1434 "frame/parser.Y" {fr->loadFitsSocketGZCmd((yyvsp[(3) - (4)].integer), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 596: #line 1436 "frame/parser.Y" {fr->loadFitsVarCmd((yyvsp[(3) - (5)].str), (yyvsp[(1) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 602: #line 1444 "frame/parser.Y" {fr->loadSliceAllocCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 603: #line 1445 "frame/parser.Y" {fr->loadSliceAllocGZCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 604: #line 1446 "frame/parser.Y" {fr->loadSliceChannelCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 605: #line 1447 "frame/parser.Y" {fr->loadSliceMMapCmd((yyvsp[(1) - (3)].str));;} break; case 606: #line 1448 "frame/parser.Y" {fr->loadSliceSMMapCmd((yyvsp[(1) - (4)].str), (yyvsp[(2) - (4)].str));;} break; case 607: #line 1449 "frame/parser.Y" {fr->loadSliceMMapIncrCmd((yyvsp[(1) - (3)].str));;} break; case 608: #line 1451 "frame/parser.Y" {fr->loadSliceShareCmd((Base::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(1) - (5)].str));;} break; case 609: #line 1453 "frame/parser.Y" {fr->loadSliceSShareCmd((Base::ShmType)(yyvsp[(3) - (6)].integer), (yyvsp[(4) - (6)].integer), (yyvsp[(5) - (6)].integer), (yyvsp[(1) - (6)].str));;} break; case 610: #line 1454 "frame/parser.Y" {fr->loadSliceSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;} break; case 611: #line 1455 "frame/parser.Y" {fr->loadSliceSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;} break; case 612: #line 1456 "frame/parser.Y" {fr->loadSliceVarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str));;} break; case 613: #line 1459 "frame/parser.Y" {fr->loadExtCubeAllocCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 614: #line 1460 "frame/parser.Y" {fr->loadExtCubeAllocGZCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 615: #line 1461 "frame/parser.Y" {fr->loadExtCubeChannelCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 616: #line 1462 "frame/parser.Y" {fr->loadExtCubeMMapCmd((yyvsp[(1) - (3)].str));;} break; case 617: #line 1463 "frame/parser.Y" {fr->loadExtCubeMMapIncrCmd((yyvsp[(1) - (3)].str));;} break; case 618: #line 1465 "frame/parser.Y" {fr->loadExtCubeShareCmd((Base::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(1) - (5)].str));;} break; case 619: #line 1466 "frame/parser.Y" {fr->loadExtCubeSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;} break; case 620: #line 1467 "frame/parser.Y" {fr->loadExtCubeSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;} break; case 621: #line 1468 "frame/parser.Y" {fr->loadExtCubeVarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str));;} break; case 627: #line 1479 "frame/parser.Y" {fr->loadMosaicImageAllocCmd(Base::IRAF, Coord::WCS, (yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 628: #line 1482 "frame/parser.Y" {fr->loadMosaicImageAllocGZCmd(Base::IRAF, Coord::WCS, (yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str),(Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 629: #line 1485 "frame/parser.Y" {fr->loadMosaicImageChannelCmd(Base::IRAF, Coord::WCS, (yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str),(Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 630: #line 1488 "frame/parser.Y" {fr->loadMosaicImageMMapCmd(Base::IRAF, Coord::WCS, (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 631: #line 1491 "frame/parser.Y" {fr->loadMosaicImageMMapIncrCmd(Base::IRAF, Coord::WCS, (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 632: #line 1494 "frame/parser.Y" {fr->loadMosaicImageShareCmd(Base::IRAF, Coord::WCS, (Base::ShmType)(yyvsp[(3) - (6)].integer), (yyvsp[(4) - (6)].integer), (yyvsp[(1) - (6)].str), (Base::LayerType)(yyvsp[(6) - (6)].integer));;} break; case 633: #line 1497 "frame/parser.Y" {fr->loadMosaicImageSocketCmd(Base::IRAF, Coord::WCS, (yyvsp[(3) - (4)].integer), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 634: #line 1500 "frame/parser.Y" {fr->loadMosaicImageSocketGZCmd(Base::IRAF, Coord::WCS, (yyvsp[(3) - (4)].integer), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 635: #line 1503 "frame/parser.Y" {fr->loadMosaicImageVarCmd(Base::IRAF, Coord::WCS, (yyvsp[(3) - (5)].str), (yyvsp[(1) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 636: #line 1508 "frame/parser.Y" {fr->loadMosaicAllocCmd(Base::IRAF, Coord::WCS, (yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 637: #line 1511 "frame/parser.Y" {fr->loadMosaicAllocGZCmd(Base::IRAF, Coord::WCS, (yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 638: #line 1514 "frame/parser.Y" {fr->loadMosaicChannelCmd(Base::IRAF, Coord::WCS, (yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 639: #line 1517 "frame/parser.Y" {fr->loadMosaicMMapCmd(Base::IRAF, Coord::WCS, (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 640: #line 1520 "frame/parser.Y" {fr->loadMosaicSMMapCmd(Base::IRAF, Coord::WCS, (yyvsp[(1) - (5)].str), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 641: #line 1523 "frame/parser.Y" {fr->loadMosaicMMapIncrCmd(Base::IRAF, Coord::WCS, (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 642: #line 1526 "frame/parser.Y" {fr->loadMosaicShareCmd(Base::IRAF, Coord::WCS, (Base::ShmType)(yyvsp[(3) - (6)].integer), (yyvsp[(4) - (6)].integer), (yyvsp[(1) - (6)].str), (Base::LayerType)(yyvsp[(6) - (6)].integer));;} break; case 643: #line 1529 "frame/parser.Y" {fr->loadMosaicSShareCmd(Base::IRAF, Coord::WCS, (Base::ShmType)(yyvsp[(3) - (7)].integer), (yyvsp[(4) - (7)].integer), (yyvsp[(5) - (7)].integer), (yyvsp[(1) - (7)].str), (Base::LayerType)(yyvsp[(7) - (7)].integer));;} break; case 644: #line 1532 "frame/parser.Y" {fr->loadMosaicSocketCmd(Base::IRAF, Coord::WCS, (yyvsp[(3) - (4)].integer), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 645: #line 1535 "frame/parser.Y" {fr->loadMosaicSocketGZCmd(Base::IRAF, Coord::WCS, (yyvsp[(3) - (4)].integer), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 646: #line 1538 "frame/parser.Y" {fr->loadMosaicVarCmd(Base::IRAF, Coord::WCS, (yyvsp[(3) - (5)].str), (yyvsp[(1) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 647: #line 1543 "frame/parser.Y" {fr->loadMosaicImageAllocCmd(Base::WCSMOSAIC, (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].str), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 648: #line 1546 "frame/parser.Y" {fr->loadMosaicImageAllocGZCmd(Base::WCSMOSAIC, (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].str), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 649: #line 1549 "frame/parser.Y" {fr->loadMosaicImageChannelCmd(Base::WCSMOSAIC, (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].str), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 650: #line 1552 "frame/parser.Y" {fr->loadMosaicImageMMapCmd(Base::WCSMOSAIC, (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 651: #line 1555 "frame/parser.Y" {fr->loadMosaicImageMMapIncrCmd(Base::WCSMOSAIC, (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 652: #line 1558 "frame/parser.Y" {fr->loadMosaicImageShareCmd(Base::WCSMOSAIC, (Coord::CoordSystem)(yyvsp[(1) - (7)].integer), (Base::ShmType)(yyvsp[(4) - (7)].integer), (yyvsp[(5) - (7)].integer), (yyvsp[(2) - (7)].str), (Base::LayerType)(yyvsp[(7) - (7)].integer));;} break; case 653: #line 1561 "frame/parser.Y" {fr->loadMosaicImageSocketCmd(Base::WCSMOSAIC, (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 654: #line 1564 "frame/parser.Y" {fr->loadMosaicImageSocketGZCmd(Base::WCSMOSAIC, (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 655: #line 1567 "frame/parser.Y" {fr->loadMosaicImageVarCmd(Base::WCSMOSAIC, (Coord::CoordSystem)(yyvsp[(1) - (6)].integer), (yyvsp[(4) - (6)].str), (yyvsp[(2) - (6)].str), (Base::LayerType)(yyvsp[(6) - (6)].integer));;} break; case 656: #line 1572 "frame/parser.Y" {fr->loadMosaicAllocCmd((Base::WCSMOSAIC), (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].str), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 657: #line 1575 "frame/parser.Y" {fr->loadMosaicAllocGZCmd((Base::WCSMOSAIC), (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].str), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 658: #line 1578 "frame/parser.Y" {fr->loadMosaicChannelCmd((Base::WCSMOSAIC), (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].str), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 659: #line 1581 "frame/parser.Y" {fr->loadMosaicMMapCmd((Base::WCSMOSAIC), (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 660: #line 1584 "frame/parser.Y" {fr->loadMosaicSMMapCmd((Base::WCSMOSAIC), (Coord::CoordSystem)(yyvsp[(1) - (6)].integer), (yyvsp[(2) - (6)].str), (yyvsp[(3) - (6)].str), (Base::LayerType)(yyvsp[(6) - (6)].integer));;} break; case 661: #line 1587 "frame/parser.Y" {fr->loadMosaicMMapIncrCmd((Base::WCSMOSAIC), (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 662: #line 1590 "frame/parser.Y" {fr->loadMosaicShareCmd((Base::WCSMOSAIC), (Coord::CoordSystem)(yyvsp[(1) - (7)].integer), (Base::ShmType)(yyvsp[(4) - (7)].integer), (yyvsp[(5) - (7)].integer), (yyvsp[(2) - (7)].str), (Base::LayerType)(yyvsp[(7) - (7)].integer));;} break; case 663: #line 1593 "frame/parser.Y" {fr->loadMosaicSShareCmd((Base::WCSMOSAIC), (Coord::CoordSystem)(yyvsp[(1) - (8)].integer), (Base::ShmType)(yyvsp[(4) - (8)].integer), (yyvsp[(5) - (8)].integer), (yyvsp[(6) - (8)].integer), (yyvsp[(2) - (8)].str), (Base::LayerType)(yyvsp[(8) - (8)].integer));;} break; case 664: #line 1596 "frame/parser.Y" {fr->loadMosaicSocketCmd((Base::WCSMOSAIC), (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 665: #line 1599 "frame/parser.Y" {fr->loadMosaicSocketGZCmd((Base::WCSMOSAIC), (Coord::CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(2) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 666: #line 1602 "frame/parser.Y" {fr->loadMosaicVarCmd((Base::WCSMOSAIC), (Coord::CoordSystem)(yyvsp[(1) - (6)].integer), (yyvsp[(4) - (6)].str), (yyvsp[(2) - (6)].str), (Base::LayerType)(yyvsp[(6) - (6)].integer));;} break; case 667: #line 1607 "frame/parser.Y" {fr->loadMosaicImageWFPC2AllocCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 668: #line 1608 "frame/parser.Y" {fr->loadMosaicImageWFPC2AllocGZCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 669: #line 1609 "frame/parser.Y" {fr->loadMosaicImageWFPC2ChannelCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 670: #line 1610 "frame/parser.Y" {fr->loadMosaicImageWFPC2MMapCmd((yyvsp[(1) - (3)].str));;} break; case 671: #line 1611 "frame/parser.Y" {fr->loadMosaicImageWFPC2MMapIncrCmd((yyvsp[(1) - (3)].str));;} break; case 672: #line 1613 "frame/parser.Y" {fr->loadMosaicImageWFPC2ShareCmd((Base::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(1) - (5)].str));;} break; case 673: #line 1614 "frame/parser.Y" {fr->loadMosaicImageWFPC2SocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;} break; case 674: #line 1615 "frame/parser.Y" {fr->loadMosaicImageWFPC2SocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;} break; case 675: #line 1616 "frame/parser.Y" {fr->loadMosaicImageWFPC2VarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str));;} break; case 676: #line 1618 "frame/parser.Y" {fr->loadRGBCubeAllocCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 677: #line 1619 "frame/parser.Y" {fr->loadRGBCubeAllocGZCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 678: #line 1620 "frame/parser.Y" {fr->loadRGBCubeChannelCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 679: #line 1621 "frame/parser.Y" {fr->loadRGBCubeMMapCmd((yyvsp[(1) - (3)].str));;} break; case 680: #line 1622 "frame/parser.Y" {fr->loadRGBCubeSMMapCmd((yyvsp[(1) - (4)].str), (yyvsp[(2) - (4)].str));;} break; case 681: #line 1623 "frame/parser.Y" {fr->loadRGBCubeMMapIncrCmd((yyvsp[(1) - (3)].str));;} break; case 682: #line 1625 "frame/parser.Y" {fr->loadRGBCubeShareCmd((Base::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(1) - (5)].str));;} break; case 683: #line 1627 "frame/parser.Y" {fr->loadRGBCubeSShareCmd((Base::ShmType)(yyvsp[(3) - (6)].integer), (yyvsp[(4) - (6)].integer), (yyvsp[(5) - (6)].integer), (yyvsp[(1) - (6)].str));;} break; case 684: #line 1628 "frame/parser.Y" {fr->loadRGBCubeSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;} break; case 685: #line 1629 "frame/parser.Y" {fr->loadRGBCubeSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;} break; case 686: #line 1630 "frame/parser.Y" {fr->loadRGBCubeVarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str));;} break; case 687: #line 1633 "frame/parser.Y" {fr->loadRGBImageAllocCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 688: #line 1634 "frame/parser.Y" {fr->loadRGBImageAllocGZCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 689: #line 1635 "frame/parser.Y" {fr->loadRGBImageChannelCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;} break; case 690: #line 1636 "frame/parser.Y" {fr->loadRGBImageMMapCmd((yyvsp[(1) - (3)].str));;} break; case 691: #line 1637 "frame/parser.Y" {fr->loadRGBImageMMapIncrCmd((yyvsp[(1) - (3)].str));;} break; case 692: #line 1639 "frame/parser.Y" {fr->loadRGBImageShareCmd((Base::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(1) - (5)].str));;} break; case 693: #line 1640 "frame/parser.Y" {fr->loadRGBImageSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;} break; case 694: #line 1641 "frame/parser.Y" {fr->loadRGBImageSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;} break; case 695: #line 1642 "frame/parser.Y" {fr->loadRGBImageVarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str));;} break; case 696: #line 1646 "frame/parser.Y" {fr->loadNRRDAllocCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 697: #line 1648 "frame/parser.Y" {fr->loadNRRDChannelCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 698: #line 1649 "frame/parser.Y" {fr->loadNRRDMMapCmd((yyvsp[(1) - (3)].str), (Base::LayerType)(yyvsp[(3) - (3)].integer));;} break; case 699: #line 1651 "frame/parser.Y" {fr->loadNRRDShareCmd((Base::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(1) - (5)].str), (Base::LayerType)(yyvsp[(5) - (5)].integer));;} break; case 700: #line 1653 "frame/parser.Y" {fr->loadNRRDSocketCmd((yyvsp[(3) - (4)].integer), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 701: #line 1655 "frame/parser.Y" {fr->loadNRRDVarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (Base::LayerType)(yyvsp[(4) - (4)].integer));;} break; case 702: #line 1658 "frame/parser.Y" {fr->loadPhotoCmd((yyvsp[(1) - (2)].str),(yyvsp[(2) - (2)].str));;} break; case 703: #line 1659 "frame/parser.Y" {fr->loadSlicePhotoCmd((yyvsp[(2) - (3)].str),(yyvsp[(3) - (3)].str));;} break; case 704: #line 1662 "frame/parser.Y" {fr->loadIncrDataCmd((yyvsp[(2) - (6)].integer),(yyvsp[(3) - (6)].integer),(yyvsp[(4) - (6)].integer),(yyvsp[(5) - (6)].integer),(yyvsp[(6) - (6)].integer));;} break; case 705: #line 1663 "frame/parser.Y" {fr->loadIncrMinMaxCmd((yyvsp[(2) - (6)].integer),(yyvsp[(3) - (6)].integer),(yyvsp[(4) - (6)].integer),(yyvsp[(5) - (6)].integer),(yyvsp[(6) - (6)].integer));;} break; case 706: #line 1664 "frame/parser.Y" {fr->loadIncrEndCmd();;} break; case 707: #line 1667 "frame/parser.Y" { #ifdef MAC_OSX_TK fr->macosxPrintCmd(); #endif ;} break; case 708: #line 1674 "frame/parser.Y" {fr->magnifierCmd((yyvsp[(1) - (1)].integer));;} break; case 709: #line 1675 "frame/parser.Y" {fr->magnifierGraphicsCmd((yyvsp[(2) - (2)].integer));;} break; case 710: #line 1676 "frame/parser.Y" {fr->magnifierCursorCmd((yyvsp[(2) - (2)].integer));;} break; case 711: #line 1677 "frame/parser.Y" {fr->magnifierColorCmd((yyvsp[(2) - (2)].str));;} break; case 712: #line 1678 "frame/parser.Y" {fr->magnifierCmd((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].integer), (yyvsp[(3) - (3)].integer));;} break; case 713: #line 1679 "frame/parser.Y" {fr->updateMagnifierCmd(Vector((yyvsp[(2) - (3)].real), (yyvsp[(3) - (3)].real)));;} break; case 714: #line 1680 "frame/parser.Y" {fr->magnifierZoomCmd((yyvsp[(2) - (2)].real));;} break; case 715: #line 1684 "frame/parser.Y" { fr->matchCmd((yyvsp[(1) - (12)].str),(yyvsp[(2) - (12)].str),(Coord::CoordSystem)(yyvsp[(3) - (12)].integer),(Coord::SkyFrame)(yyvsp[(4) - (12)].integer), (yyvsp[(5) - (12)].str),(yyvsp[(6) - (12)].str),(Coord::CoordSystem)(yyvsp[(7) - (12)].integer),(Coord::SkyFrame)(yyvsp[(8) - (12)].integer), (yyvsp[(9) - (12)].real),(Coord::CoordSystem)(yyvsp[(10) - (12)].integer),(Coord::SkyDist)(yyvsp[(11) - (12)].integer), (yyvsp[(12) - (12)].str)); ;} break; case 717: #line 1692 "frame/parser.Y" {fr->markerColorCmd((yyvsp[(2) - (2)].str));;} break; case 718: #line 1693 "frame/parser.Y" {fr->markerCopyCmd();;} break; case 719: #line 1695 "frame/parser.Y" {fr->markerCommandCmd((Base::MarkerFormat)(yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].str));;} break; case 720: #line 1697 "frame/parser.Y" {fr->markerCommandVarCmd((Base::MarkerFormat)(yyvsp[(2) - (4)].integer),(yyvsp[(4) - (4)].str));;} break; case 721: #line 1698 "frame/parser.Y" {fr->markerCompositeDeleteCmd();;} break; case 722: #line 1699 "frame/parser.Y" {maperr =0;;} break; case 724: #line 1700 "frame/parser.Y" {fr->markerCutCmd();;} break; case 725: #line 1701 "frame/parser.Y" {fr->markerDeleteCmd();;} break; case 726: #line 1702 "frame/parser.Y" {fr->markerDeleteAllCmd();;} break; case 728: #line 1704 "frame/parser.Y" {fr->markerEpsilonCmd((yyvsp[(2) - (2)].integer));;} break; case 729: #line 1705 "frame/parser.Y" {fr->markerFontCmd((yyvsp[(2) - (2)].str));;} break; case 730: #line 1707 "frame/parser.Y" {fr->markerHighliteAllCmd();;} break; case 731: #line 1709 "frame/parser.Y" {fr->markerHighliteOnlyCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;} break; case 732: #line 1711 "frame/parser.Y" {fr->markerHighliteToggleCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;} break; case 733: #line 1714 "frame/parser.Y" {fr->markerAnalysisCmd((yyvsp[(1) - (4)].integer), (Marker::AnalysisTask)(yyvsp[(3) - (4)].integer), (yyvsp[(4) - (4)].integer));;} break; case 734: #line 1716 "frame/parser.Y" {fr->markerAngleCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].real));;} break; case 735: #line 1717 "frame/parser.Y" {fr->markerAngleCmd((yyvsp[(1) - (4)].integer),(yyvsp[(3) - (4)].real));;} break; case 736: #line 1719 "frame/parser.Y" {fr->markerAngleCmd((yyvsp[(1) - (5)].integer),(yyvsp[(3) - (5)].real),(Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyFrame)(yyvsp[(5) - (5)].integer));;} break; case 737: #line 1722 "frame/parser.Y" {fr->markerAnnulusRadiusCmd((yyvsp[(1) - (7)].integer), (yyvsp[(4) - (7)].real), (yyvsp[(5) - (7)].real), (yyvsp[(6) - (7)].integer), (Coord::InternalSystem)(yyvsp[(7) - (7)].integer));;} break; case 738: #line 1724 "frame/parser.Y" {fr->markerAnnulusRadiusCmd((yyvsp[(1) - (8)].integer), (yyvsp[(4) - (8)].real), (yyvsp[(5) - (8)].real), (yyvsp[(6) - (8)].integer), (Coord::CoordSystem)(yyvsp[(7) - (8)].integer), (Coord::SkyDist)(yyvsp[(8) - (8)].integer));;} break; case 739: #line 1727 "frame/parser.Y" {fr->markerAnnulusRadiusCmd((yyvsp[(1) - (6)].integer), (yyvsp[(4) - (6)].str),(Coord::CoordSystem)(yyvsp[(5) - (6)].integer),(Coord::SkyDist)(yyvsp[(6) - (6)].integer));;} break; case 740: #line 1730 "frame/parser.Y" {fr->markerBoxAnnulusRadiusCmd((yyvsp[(1) - (8)].integer), Vector((yyvsp[(4) - (8)].real), (yyvsp[(5) - (8)].real)), Vector((yyvsp[(6) - (8)].real), (yyvsp[(6) - (8)].real)*(yyvsp[(5) - (8)].real)/(yyvsp[(4) - (8)].real)), (yyvsp[(7) - (8)].integer), (Coord::InternalSystem)(yyvsp[(8) - (8)].integer));;} break; case 741: #line 1734 "frame/parser.Y" {fr->markerBoxAnnulusRadiusCmd((yyvsp[(1) - (9)].integer), Vector((yyvsp[(4) - (9)].real), (yyvsp[(5) - (9)].real)), Vector((yyvsp[(6) - (9)].real), (yyvsp[(6) - (9)].real)*(yyvsp[(5) - (9)].real)/(yyvsp[(4) - (9)].real)), (yyvsp[(7) - (9)].integer), (Coord::CoordSystem)(yyvsp[(8) - (9)].integer), (Coord::SkyDist)(yyvsp[(9) - (9)].integer));;} break; case 742: #line 1737 "frame/parser.Y" {fr->markerBoxAnnulusRadiusCmd((yyvsp[(1) - (6)].integer),(yyvsp[(4) - (6)].str),(Coord::CoordSystem)(yyvsp[(5) - (6)].integer),(Coord::SkyDist)(yyvsp[(6) - (6)].integer));;} break; case 743: #line 1740 "frame/parser.Y" {fr->markerBoxRadiusCmd((yyvsp[(1) - (6)].integer), Vector((yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real)), (Coord::InternalSystem)(yyvsp[(6) - (6)].integer));;} break; case 744: #line 1742 "frame/parser.Y" {fr->markerBoxRadiusCmd((yyvsp[(1) - (7)].integer), Vector((yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real)), (Coord::CoordSystem)(yyvsp[(6) - (7)].integer), (Coord::SkyDist)(yyvsp[(7) - (7)].integer));;} break; case 745: #line 1745 "frame/parser.Y" {fr->markerBpandaEditCmd((yyvsp[(1) - (10)].integer), (yyvsp[(4) - (10)].real), (yyvsp[(5) - (10)].real), (yyvsp[(6) - (10)].integer), Vector((yyvsp[(7) - (10)].real),(yyvsp[(8) - (10)].real)), Vector((yyvsp[(9) - (10)].real),(yyvsp[(9) - (10)].real)*(yyvsp[(8) - (10)].real)/(yyvsp[(7) - (10)].real)), (yyvsp[(10) - (10)].integer));;} break; case 746: #line 1749 "frame/parser.Y" {fr->markerBpandaEditCmd((yyvsp[(1) - (11)].integer), (yyvsp[(4) - (11)].real), (yyvsp[(5) - (11)].real), (yyvsp[(6) - (11)].integer), Vector((yyvsp[(7) - (11)].real),(yyvsp[(8) - (11)].real)), Vector((yyvsp[(9) - (11)].real),(yyvsp[(9) - (11)].real)*(yyvsp[(8) - (11)].real)/(yyvsp[(7) - (11)].real)), (yyvsp[(10) - (11)].integer));;} break; case 747: #line 1753 "frame/parser.Y" {fr->markerBpandaEditCmd((yyvsp[(1) - (12)].integer), (yyvsp[(4) - (12)].real), (yyvsp[(5) - (12)].real), (yyvsp[(6) - (12)].integer), Vector((yyvsp[(7) - (12)].real),(yyvsp[(8) - (12)].real)), Vector((yyvsp[(9) - (12)].real),(yyvsp[(9) - (12)].real)*(yyvsp[(8) - (12)].real)/(yyvsp[(7) - (12)].real)), (yyvsp[(10) - (12)].integer), (Coord::CoordSystem)(yyvsp[(11) - (12)].integer), (Coord::SkyFrame)(yyvsp[(12) - (12)].integer));;} break; case 748: #line 1758 "frame/parser.Y" {fr->markerBpandaEditCmd((yyvsp[(1) - (9)].integer), (yyvsp[(4) - (9)].str), (yyvsp[(5) - (9)].str), (Coord::CoordSystem)(yyvsp[(6) - (9)].integer), (Coord::SkyFrame)(yyvsp[(7) - (9)].integer), (Coord::CoordSystem)(yyvsp[(8) - (9)].integer), (Coord::SkyDist)(yyvsp[(9) - (9)].integer));;} break; case 749: #line 1762 "frame/parser.Y" {fr->markerCallBackCmd((yyvsp[(1) - (5)].integer),(CallBack::Type)(yyvsp[(3) - (5)].integer),(yyvsp[(4) - (5)].str),(yyvsp[(5) - (5)].str));;} break; case 750: #line 1764 "frame/parser.Y" {fr->markerCircleRadiusCmd((yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].real), (Coord::InternalSystem)(yyvsp[(5) - (5)].integer));;} break; case 751: #line 1766 "frame/parser.Y" {fr->markerCircleRadiusCmd((yyvsp[(1) - (6)].integer), (yyvsp[(4) - (6)].real), (Coord::CoordSystem)(yyvsp[(5) - (6)].integer), (Coord::SkyDist)(yyvsp[(6) - (6)].integer));;} break; case 752: #line 1767 "frame/parser.Y" {fr->markerColorCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].str));;} break; case 753: #line 1769 "frame/parser.Y" {fr->markerCompassArrowCmd((yyvsp[(1) - (5)].integer),(yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].integer));;} break; case 754: #line 1771 "frame/parser.Y" {fr->markerCompassLabelCmd((yyvsp[(1) - (5)].integer),(yyvsp[(4) - (5)].str),(yyvsp[(5) - (5)].str));;} break; case 755: #line 1773 "frame/parser.Y" {fr->markerCompassRadiusCmd((yyvsp[(1) - (5)].integer),(yyvsp[(4) - (5)].real),(Coord::InternalSystem)(yyvsp[(5) - (5)].integer));;} break; case 756: #line 1775 "frame/parser.Y" {fr->markerCompassRadiusCmd((yyvsp[(1) - (6)].integer),(yyvsp[(4) - (6)].real),(Coord::CoordSystem)(yyvsp[(5) - (6)].integer),(Coord::SkyDist)(yyvsp[(6) - (6)].integer));;} break; case 757: #line 1777 "frame/parser.Y" {fr->markerCompassSystemCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyFrame)(yyvsp[(5) - (5)].integer));;} break; case 758: #line 1778 "frame/parser.Y" {fr->markerCompositeCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 759: #line 1780 "frame/parser.Y" {fr->markerCpandaEditCmd((yyvsp[(1) - (9)].integer), (yyvsp[(4) - (9)].real), (yyvsp[(5) - (9)].real), (yyvsp[(6) - (9)].integer), (yyvsp[(7) - (9)].real), (yyvsp[(8) - (9)].real), (yyvsp[(9) - (9)].integer));;} break; case 760: #line 1782 "frame/parser.Y" {fr->markerCpandaEditCmd((yyvsp[(1) - (10)].integer), (yyvsp[(4) - (10)].real), (yyvsp[(5) - (10)].real), (yyvsp[(6) - (10)].integer), (yyvsp[(7) - (10)].real), (yyvsp[(8) - (10)].real), (yyvsp[(9) - (10)].integer));;} break; case 761: #line 1785 "frame/parser.Y" {fr->markerCpandaEditCmd((yyvsp[(1) - (11)].integer), (yyvsp[(4) - (11)].real), (yyvsp[(5) - (11)].real), (yyvsp[(6) - (11)].integer), (yyvsp[(7) - (11)].real), (yyvsp[(8) - (11)].real), (yyvsp[(9) - (11)].integer), (Coord::CoordSystem)(yyvsp[(10) - (11)].integer), (Coord::SkyFrame)(yyvsp[(11) - (11)].integer));;} break; case 762: #line 1789 "frame/parser.Y" {fr->markerCpandaEditCmd((yyvsp[(1) - (9)].integer), (yyvsp[(4) - (9)].str), (yyvsp[(5) - (9)].str), (Coord::CoordSystem)(yyvsp[(6) - (9)].integer), (Coord::SkyFrame)(yyvsp[(7) - (9)].integer), (Coord::CoordSystem)(yyvsp[(8) - (9)].integer), (Coord::SkyDist)(yyvsp[(9) - (9)].integer));;} break; case 763: #line 1793 "frame/parser.Y" {fr->markerAnnulusCreateRadiusCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;} break; case 764: #line 1795 "frame/parser.Y" {fr->markerBoxAnnulusCreateRadiusCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;} break; case 765: #line 1797 "frame/parser.Y" {fr->markerBpandaCreateAnglesCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;} break; case 766: #line 1799 "frame/parser.Y" {fr->markerBpandaCreateRadiusCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;} break; case 767: #line 1801 "frame/parser.Y" {fr->markerEllipseAnnulusCreateRadiusCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;} break; case 768: #line 1803 "frame/parser.Y" {fr->markerEpandaCreateAnglesCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;} break; case 769: #line 1805 "frame/parser.Y" {fr->markerEpandaCreateRadiusCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;} break; case 770: #line 1807 "frame/parser.Y" {fr->markerCpandaCreateAnglesCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;} break; case 771: #line 1809 "frame/parser.Y" {fr->markerCpandaCreateRadiusCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;} break; case 772: #line 1811 "frame/parser.Y" {fr->markerPolygonCreateVertexCmd((yyvsp[(1) - (7)].integer),(yyvsp[(5) - (7)].integer),Vector((yyvsp[(6) - (7)].real),(yyvsp[(7) - (7)].real)));;} break; case 773: #line 1813 "frame/parser.Y" {fr->markerSegmentCreateVertexCmd((yyvsp[(1) - (7)].integer),(yyvsp[(5) - (7)].integer),Vector((yyvsp[(6) - (7)].real),(yyvsp[(7) - (7)].real)));;} break; case 774: #line 1815 "frame/parser.Y" {fr->markerDeleteCmd((yyvsp[(1) - (2)].integer));;} break; case 775: #line 1817 "frame/parser.Y" {fr->markerAnnulusDeleteRadiusCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 776: #line 1819 "frame/parser.Y" {fr->markerBoxAnnulusDeleteRadiusCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 777: #line 1820 "frame/parser.Y" {fr->markerBpandaDeleteCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 778: #line 1822 "frame/parser.Y" {fr->markerEllipseAnnulusDeleteRadiusCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 779: #line 1824 "frame/parser.Y" {fr->markerDeleteCallBackCmd((yyvsp[(1) - (5)].integer),(CallBack::Type)(yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].str));;} break; case 780: #line 1825 "frame/parser.Y" {fr->markerEpandaDeleteCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 781: #line 1826 "frame/parser.Y" {fr->markerCpandaDeleteCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 782: #line 1828 "frame/parser.Y" {fr->markerPolygonDeleteVertexCmd((yyvsp[(1) - (5)].integer),(yyvsp[(5) - (5)].integer));;} break; case 783: #line 1830 "frame/parser.Y" {fr->markerSegmentDeleteVertexCmd((yyvsp[(1) - (5)].integer),(yyvsp[(5) - (5)].integer));;} break; case 784: #line 1831 "frame/parser.Y" {fr->markerDeleteTagCmd((yyvsp[(1) - (3)].integer));;} break; case 785: #line 1832 "frame/parser.Y" {fr->markerDeleteTagCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].str));;} break; case 786: #line 1833 "frame/parser.Y" {fr->markerDeleteTagCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 787: #line 1835 "frame/parser.Y" {fr->markerEditBeginCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 788: #line 1837 "frame/parser.Y" {fr->markerEllipseRadiusCmd((yyvsp[(1) - (6)].integer), Vector((yyvsp[(4) - (6)].real), (yyvsp[(5) - (6)].real)), (Coord::InternalSystem)(yyvsp[(6) - (6)].integer));;} break; case 789: #line 1839 "frame/parser.Y" {fr->markerEllipseRadiusCmd((yyvsp[(1) - (7)].integer), Vector((yyvsp[(4) - (7)].real), (yyvsp[(5) - (7)].real)), (Coord::CoordSystem)(yyvsp[(6) - (7)].integer), (Coord::SkyDist)(yyvsp[(7) - (7)].integer));;} break; case 790: #line 1843 "frame/parser.Y" {fr->markerEllipseAnnulusRadiusCmd((yyvsp[(1) - (8)].integer), Vector((yyvsp[(4) - (8)].real),(yyvsp[(5) - (8)].real)), Vector((yyvsp[(6) - (8)].real),(yyvsp[(6) - (8)].real)*(yyvsp[(5) - (8)].real)/(yyvsp[(4) - (8)].real)), (yyvsp[(7) - (8)].integer), (Coord::InternalSystem)(yyvsp[(8) - (8)].integer));;} break; case 791: #line 1847 "frame/parser.Y" {fr->markerEllipseAnnulusRadiusCmd((yyvsp[(1) - (9)].integer), Vector((yyvsp[(4) - (9)].real),(yyvsp[(5) - (9)].real)), Vector((yyvsp[(6) - (9)].real),(yyvsp[(6) - (9)].real)*(yyvsp[(5) - (9)].real)/(yyvsp[(4) - (9)].real)), (yyvsp[(7) - (9)].integer), (Coord::CoordSystem)(yyvsp[(8) - (9)].integer), (Coord::SkyDist)(yyvsp[(9) - (9)].integer));;} break; case 792: #line 1850 "frame/parser.Y" {fr->markerEllipseAnnulusRadiusCmd((yyvsp[(1) - (6)].integer), (yyvsp[(4) - (6)].str), (Coord::CoordSystem)(yyvsp[(5) - (6)].integer), (Coord::SkyDist)(yyvsp[(6) - (6)].integer));;} break; case 793: #line 1853 "frame/parser.Y" {fr->markerEpandaEditCmd((yyvsp[(1) - (10)].integer), (yyvsp[(4) - (10)].real), (yyvsp[(5) - (10)].real), (yyvsp[(6) - (10)].integer), Vector((yyvsp[(7) - (10)].real),(yyvsp[(8) - (10)].real)), Vector((yyvsp[(9) - (10)].real),(yyvsp[(9) - (10)].real)*(yyvsp[(8) - (10)].real)/(yyvsp[(7) - (10)].real)), (yyvsp[(10) - (10)].integer));;} break; case 794: #line 1857 "frame/parser.Y" {fr->markerEpandaEditCmd((yyvsp[(1) - (11)].integer), (yyvsp[(4) - (11)].real), (yyvsp[(5) - (11)].real), (yyvsp[(6) - (11)].integer), Vector((yyvsp[(7) - (11)].real),(yyvsp[(8) - (11)].real)), Vector((yyvsp[(9) - (11)].real),(yyvsp[(9) - (11)].real)*(yyvsp[(8) - (11)].real)/(yyvsp[(7) - (11)].real)), (yyvsp[(10) - (11)].integer));;} break; case 795: #line 1861 "frame/parser.Y" {fr->markerEpandaEditCmd((yyvsp[(1) - (12)].integer), (yyvsp[(4) - (12)].real), (yyvsp[(5) - (12)].real), (yyvsp[(6) - (12)].integer), Vector((yyvsp[(7) - (12)].real),(yyvsp[(8) - (12)].real)), Vector((yyvsp[(9) - (12)].real),(yyvsp[(9) - (12)].real)*(yyvsp[(8) - (12)].real)/(yyvsp[(7) - (12)].real)), (yyvsp[(10) - (12)].integer), (Coord::CoordSystem)(yyvsp[(11) - (12)].integer), (Coord::SkyFrame)(yyvsp[(12) - (12)].integer));;} break; case 796: #line 1866 "frame/parser.Y" {fr->markerEpandaEditCmd((yyvsp[(1) - (9)].integer), (yyvsp[(4) - (9)].str), (yyvsp[(5) - (9)].str), (Coord::CoordSystem)(yyvsp[(6) - (9)].integer), (Coord::SkyFrame)(yyvsp[(7) - (9)].integer), (Coord::CoordSystem)(yyvsp[(8) - (9)].integer), (Coord::SkyDist)(yyvsp[(9) - (9)].integer));;} break; case 797: #line 1870 "frame/parser.Y" {fr->markerFontCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].str));;} break; case 798: #line 1871 "frame/parser.Y" {fr->markerHighliteCmd((yyvsp[(1) - (2)].integer));;} break; case 799: #line 1872 "frame/parser.Y" {fr->markerHighliteOnlyCmd((yyvsp[(1) - (3)].integer));;} break; case 800: #line 1874 "frame/parser.Y" {fr->markerLineArrowCmd((yyvsp[(1) - (5)].integer),(yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].integer));;} break; case 801: #line 1876 "frame/parser.Y" {fr->markerLineCmd((yyvsp[(1) - (6)].integer), Vector((yyvsp[(5) - (6)].vector)), Vector((yyvsp[(6) - (6)].vector)), (Coord::InternalSystem)(yyvsp[(4) - (6)].integer));;} break; case 802: #line 1878 "frame/parser.Y" {fr->markerLineCmd((yyvsp[(1) - (7)].integer), Vector((yyvsp[(6) - (7)].vector)), Vector((yyvsp[(7) - (7)].vector)), (Coord::CoordSystem)(yyvsp[(4) - (7)].integer), (Coord::SkyFrame)(yyvsp[(5) - (7)].integer));;} break; case 803: #line 1882 "frame/parser.Y" {fr->markerMoveCmd((yyvsp[(1) - (4)].integer), Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;} break; case 804: #line 1883 "frame/parser.Y" {fr->markerFrontCmd((yyvsp[(1) - (3)].integer));;} break; case 805: #line 1884 "frame/parser.Y" {fr->markerBackCmd((yyvsp[(1) - (3)].integer));;} break; case 806: #line 1886 "frame/parser.Y" {fr->markerMoveToCmd((yyvsp[(1) - (6)].integer), Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)), (Coord::InternalSystem)(yyvsp[(4) - (6)].integer));;} break; case 807: #line 1888 "frame/parser.Y" {fr->markerMoveToCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(6) - (6)].vector)),(Coord::CoordSystem)(yyvsp[(4) - (6)].integer),(Coord::SkyFrame)(yyvsp[(5) - (6)].integer));;} break; case 808: #line 1891 "frame/parser.Y" {fr->markerPolygonResetCmd((yyvsp[(1) - (6)].integer), Vector((yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real)),(Coord::InternalSystem)(yyvsp[(6) - (6)].integer));;} break; case 809: #line 1893 "frame/parser.Y" {fr->markerPolygonResetCmd((yyvsp[(1) - (7)].integer), Vector((yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real)), (Coord::CoordSystem)(yyvsp[(6) - (7)].integer), (Coord::SkyDist)(yyvsp[(7) - (7)].integer));;} break; case 810: #line 1896 "frame/parser.Y" {fr->markerSegmentResetCmd((yyvsp[(1) - (6)].integer), Vector((yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real)),(Coord::InternalSystem)(yyvsp[(6) - (6)].integer));;} break; case 811: #line 1898 "frame/parser.Y" {fr->markerSegmentResetCmd((yyvsp[(1) - (7)].integer), Vector((yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real)), (Coord::CoordSystem)(yyvsp[(6) - (7)].integer), (Coord::SkyDist)(yyvsp[(7) - (7)].integer));;} break; case 812: #line 1901 "frame/parser.Y" {fr->markerPointShapeCmd((yyvsp[(1) - (4)].integer),(Point::PointShape)(yyvsp[(4) - (4)].integer));;} break; case 813: #line 1902 "frame/parser.Y" {fr->markerPointSizeCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 814: #line 1905 "frame/parser.Y" {fr->markerProjectionCmd((yyvsp[(1) - (6)].integer), Vector((yyvsp[(4) - (6)].vector)), Vector((yyvsp[(5) - (6)].vector)), (Coord::InternalSystem)(yyvsp[(3) - (6)].integer), (yyvsp[(6) - (6)].real));;} break; case 815: #line 1909 "frame/parser.Y" {fr->markerProjectionCmd((yyvsp[(1) - (9)].integer), Vector((yyvsp[(5) - (9)].vector)), Vector((yyvsp[(6) - (9)].vector)), (Coord::CoordSystem)(yyvsp[(3) - (9)].integer), (Coord::SkyFrame)(yyvsp[(4) - (9)].integer), (yyvsp[(7) - (9)].real), (Coord::CoordSystem)(yyvsp[(8) - (9)].integer), (Coord::SkyDist)(yyvsp[(9) - (9)].integer));;} break; case 816: #line 1913 "frame/parser.Y" {fr->markerPropertyCmd((yyvsp[(1) - (4)].integer),(yyvsp[(3) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 817: #line 1915 "frame/parser.Y" {fr->markerRotateBeginCmd((yyvsp[(1) - (3)].integer));;} break; case 818: #line 1917 "frame/parser.Y" {fr->markerRulerPointCmd((yyvsp[(1) - (6)].integer), Vector((yyvsp[(5) - (6)].vector)), Vector((yyvsp[(6) - (6)].vector)), (Coord::InternalSystem)(yyvsp[(4) - (6)].integer));;} break; case 819: #line 1920 "frame/parser.Y" {fr->markerRulerPointCmd((yyvsp[(1) - (7)].integer), Vector((yyvsp[(6) - (7)].vector)), Vector((yyvsp[(7) - (7)].vector)), (Coord::CoordSystem)(yyvsp[(4) - (7)].integer), (Coord::SkyFrame)(yyvsp[(5) - (7)].integer));;} break; case 820: #line 1923 "frame/parser.Y" {fr->markerRulerSystemCmd((yyvsp[(1) - (7)].integer), (Coord::CoordSystem)(yyvsp[(4) - (7)].integer), (Coord::SkyFrame)(yyvsp[(5) - (7)].integer), (Coord::CoordSystem)(yyvsp[(6) - (7)].integer), (Coord::SkyDist)(yyvsp[(7) - (7)].integer));;} break; case 821: #line 1926 "frame/parser.Y" {fr->markerSelectCmd((yyvsp[(1) - (2)].integer));;} break; case 822: #line 1927 "frame/parser.Y" {fr->markerSelectOnlyCmd((yyvsp[(1) - (3)].integer));;} break; case 823: #line 1929 "frame/parser.Y" {fr->markerTagCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].str));;} break; case 824: #line 1930 "frame/parser.Y" {fr->markerTextCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].str));;} break; case 825: #line 1931 "frame/parser.Y" {fr->markerTextRotateCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 826: #line 1933 "frame/parser.Y" {fr->markerUnhighliteCmd((yyvsp[(1) - (2)].integer));;} break; case 827: #line 1934 "frame/parser.Y" {fr->markerUnselectCmd((yyvsp[(1) - (2)].integer));;} break; case 828: #line 1936 "frame/parser.Y" {fr->markerVectorArrowCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 829: #line 1938 "frame/parser.Y" {fr->markerVectorCmd((yyvsp[(1) - (7)].integer), Vector((yyvsp[(5) - (7)].vector)), (Coord::InternalSystem)(yyvsp[(4) - (7)].integer), (yyvsp[(6) - (7)].real), (yyvsp[(7) - (7)].real));;} break; case 830: #line 1941 "frame/parser.Y" {fr->markerVectorCmd((yyvsp[(1) - (10)].integer), Vector((yyvsp[(6) - (10)].vector)), (Coord::CoordSystem)(yyvsp[(4) - (10)].integer), (Coord::SkyFrame)(yyvsp[(5) - (10)].integer), (yyvsp[(9) - (10)].real), (Coord::CoordSystem)(yyvsp[(7) - (10)].integer), (Coord::SkyDist)(yyvsp[(8) - (10)].integer), (yyvsp[(10) - (10)].real));;} break; case 831: #line 1944 "frame/parser.Y" {fr->markerLineWidthCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 832: #line 1946 "frame/parser.Y" {fr->markerKeyCmd();;} break; case 833: #line 1947 "frame/parser.Y" {fr->markerKeyCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 837: #line 1952 "frame/parser.Y" {fr->markerPreserveCmd((yyvsp[(2) - (2)].integer));;} break; case 838: #line 1953 "frame/parser.Y" {fr->markerPropertyCmd((yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 839: #line 1955 "frame/parser.Y" {fr->markerPropertyCmd((yyvsp[(2) - (5)].integer),(yyvsp[(3) - (5)].integer),Vector((yyvsp[(4) - (5)].real),(yyvsp[(5) - (5)].real)));;} break; case 840: #line 1957 "frame/parser.Y" {fr->markerRotateBeginCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;} break; case 841: #line 1959 "frame/parser.Y" {fr->markerRotateMotionCmd(Vector((yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].real)),(yyvsp[(5) - (5)].integer));;} break; case 842: #line 1960 "frame/parser.Y" {fr->markerRotateEndCmd();;} break; case 843: #line 1962 "frame/parser.Y" {fr->markerSaveCmd((yyvsp[(2) - (7)].str), (Base::MarkerFormat)(yyvsp[(3) - (7)].integer), (Coord::CoordSystem)(yyvsp[(4) - (7)].integer), (Coord::SkyFrame)(yyvsp[(5) - (7)].integer), (Coord::SkyFormat)(yyvsp[(6) - (7)].integer), (yyvsp[(7) - (7)].integer));;} break; case 844: #line 1963 "frame/parser.Y" {fr->markerSaveTemplateCmd((yyvsp[(3) - (3)].str));;} break; case 847: #line 1968 "frame/parser.Y" {fr->markerColorCmd((yyvsp[(1) - (3)].str),(yyvsp[(3) - (3)].str));;} break; case 848: #line 1969 "frame/parser.Y" {fr->markerCopyCmd((yyvsp[(1) - (2)].str));;} break; case 849: #line 1970 "frame/parser.Y" {fr->markerDeleteCmd((yyvsp[(1) - (2)].str));;} break; case 850: #line 1971 "frame/parser.Y" {fr->markerCutCmd((yyvsp[(1) - (2)].str));;} break; case 851: #line 1972 "frame/parser.Y" {fr->markerFontCmd((yyvsp[(1) - (3)].str),(yyvsp[(3) - (3)].str));;} break; case 852: #line 1973 "frame/parser.Y" {fr->markerHighliteCmd((yyvsp[(1) - (2)].str));;} break; case 853: #line 1974 "frame/parser.Y" {fr->markerHighliteOnlyCmd((yyvsp[(1) - (3)].str));;} break; case 854: #line 1975 "frame/parser.Y" {fr->markerMoveCmd((yyvsp[(1) - (4)].str),Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;} break; case 855: #line 1976 "frame/parser.Y" {fr->markerFrontCmd((yyvsp[(1) - (3)].str));;} break; case 856: #line 1977 "frame/parser.Y" {fr->markerBackCmd((yyvsp[(1) - (3)].str));;} break; case 857: #line 1979 "frame/parser.Y" {fr->markerMoveToCmd((yyvsp[(1) - (5)].str),Vector((yyvsp[(5) - (5)].vector)),(Coord::InternalSystem)(yyvsp[(4) - (5)].integer));;} break; case 858: #line 1981 "frame/parser.Y" {fr->markerMoveToCmd((yyvsp[(1) - (6)].str),Vector((yyvsp[(6) - (6)].vector)),(Coord::CoordSystem)(yyvsp[(4) - (6)].integer),(Coord::SkyFrame)(yyvsp[(5) - (6)].integer));;} break; case 859: #line 1983 "frame/parser.Y" {fr->markerPropertyCmd((yyvsp[(1) - (4)].str),(yyvsp[(3) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 860: #line 1984 "frame/parser.Y" {fr->markerSelectCmd((yyvsp[(1) - (2)].str));;} break; case 861: #line 1985 "frame/parser.Y" {fr->markerSelectOnlyCmd((yyvsp[(1) - (3)].str));;} break; case 862: #line 1986 "frame/parser.Y" {fr->markerUnhighliteCmd((yyvsp[(1) - (2)].str));;} break; case 863: #line 1987 "frame/parser.Y" {fr->markerUnselectCmd((yyvsp[(1) - (2)].str));;} break; case 864: #line 1989 "frame/parser.Y" {fr->markerTagEditCmd((yyvsp[(3) - (4)].str),(yyvsp[(4) - (4)].str));;} break; case 865: #line 1990 "frame/parser.Y" {fr->markerTagDeleteCmd((yyvsp[(3) - (3)].str));;} break; case 866: #line 1991 "frame/parser.Y" {fr->markerTagDeleteAllCmd();;} break; case 867: #line 1992 "frame/parser.Y" {fr->markerTagCmd((yyvsp[(2) - (2)].str));;} break; case 868: #line 1993 "frame/parser.Y" {fr->markerTagUpdateCmd((yyvsp[(3) - (3)].str));;} break; case 869: #line 1995 "frame/parser.Y" {fr->markerPasteCmd();;} break; case 870: #line 1996 "frame/parser.Y" {fr->markerPasteCmd((Coord::CoordSystem)(yyvsp[(2) - (2)].integer));;} break; case 871: #line 1997 "frame/parser.Y" {fr->markerUndoCmd();;} break; case 872: #line 1998 "frame/parser.Y" {fr->markerUnhighliteAllCmd();;} break; case 873: #line 1999 "frame/parser.Y" {fr->markerUnselectAllCmd();;} break; case 874: #line 2000 "frame/parser.Y" {fr->markerLineWidthCmd((yyvsp[(2) - (2)].integer));;} break; case 875: #line 2003 "frame/parser.Y" {(yyval.integer) = CallBack::SELECTCB;;} break; case 876: #line 2004 "frame/parser.Y" {(yyval.integer) = CallBack::UNSELECTCB;;} break; case 877: #line 2005 "frame/parser.Y" {(yyval.integer) = CallBack::HIGHLITECB;;} break; case 878: #line 2006 "frame/parser.Y" {(yyval.integer) = CallBack::UNHIGHLITECB;;} break; case 879: #line 2007 "frame/parser.Y" {(yyval.integer) = CallBack::MOVEBEGINCB;;} break; case 880: #line 2008 "frame/parser.Y" {(yyval.integer) = CallBack::MOVECB;;} break; case 881: #line 2009 "frame/parser.Y" {(yyval.integer) = CallBack::MOVEENDCB;;} break; case 882: #line 2010 "frame/parser.Y" {(yyval.integer) = CallBack::EDITBEGINCB;;} break; case 883: #line 2011 "frame/parser.Y" {(yyval.integer) = CallBack::EDITCB;;} break; case 884: #line 2012 "frame/parser.Y" {(yyval.integer) = CallBack::EDITENDCB;;} break; case 885: #line 2013 "frame/parser.Y" {(yyval.integer) = CallBack::ROTATEBEGINCB;;} break; case 886: #line 2014 "frame/parser.Y" {(yyval.integer) = CallBack::ROTATECB;;} break; case 887: #line 2015 "frame/parser.Y" {(yyval.integer) = CallBack::ROTATEENDCB;;} break; case 888: #line 2016 "frame/parser.Y" {(yyval.integer) = CallBack::DELETECB;;} break; case 889: #line 2017 "frame/parser.Y" {(yyval.integer) = CallBack::TEXTCB;;} break; case 890: #line 2018 "frame/parser.Y" {(yyval.integer) = CallBack::COLORCB;;} break; case 891: #line 2019 "frame/parser.Y" {(yyval.integer) = CallBack::LINEWIDTHCB;;} break; case 892: #line 2020 "frame/parser.Y" {(yyval.integer) = CallBack::PROPERTYCB;;} break; case 893: #line 2021 "frame/parser.Y" {(yyval.integer) = CallBack::FONTCB;;} break; case 894: #line 2022 "frame/parser.Y" {(yyval.integer) = CallBack::KEYCB;;} break; case 895: #line 2023 "frame/parser.Y" {(yyval.integer) = CallBack::UPDATECB;;} break; case 896: #line 2026 "frame/parser.Y" {fr->markerCentroidCmd();;} break; case 897: #line 2027 "frame/parser.Y" {fr->markerCentroidCmd((yyvsp[(1) - (1)].integer));;} break; case 898: #line 2028 "frame/parser.Y" {fr->markerCentroidAutoCmd((yyvsp[(2) - (2)].integer));;} break; case 899: #line 2029 "frame/parser.Y" {fr->markerCentroidRadiusCmd((yyvsp[(2) - (2)].real));;} break; case 900: #line 2030 "frame/parser.Y" {fr->markerCentroidIterationCmd((yyvsp[(2) - (2)].integer));;} break; case 901: #line 2032 "frame/parser.Y" { fr->markerCentroidIterationCmd((yyvsp[(2) - (3)].integer)); fr->markerCentroidRadiusCmd((yyvsp[(3) - (3)].real)); ;} break; case 902: #line 2042 "frame/parser.Y" {fr->createCircleCmd(fr->mapToRef(Vector((yyvsp[(2) - (5)].real),(yyvsp[(3) - (5)].real)),Coord::CANVAS), (yyvsp[(4) - (5)].real), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 903: #line 2050 "frame/parser.Y" {fr->createEllipseCmd(fr->mapToRef(Vector((yyvsp[(2) - (7)].real),(yyvsp[(3) - (7)].real)),Coord::CANVAS), Vector((yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real)), (yyvsp[(6) - (7)].real), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 904: #line 2059 "frame/parser.Y" {fr->createBoxCmd(fr->mapToRef(Vector((yyvsp[(2) - (7)].real),(yyvsp[(3) - (7)].real)),Coord::CANVAS), Vector((yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real)), (yyvsp[(6) - (7)].real), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 905: #line 2067 "frame/parser.Y" {fr->createPolygonCmd(fr->mapToRef(Vector((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real)),Coord::CANVAS), Vector((yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real)), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 906: #line 2074 "frame/parser.Y" {fr->createSegmentCmd(fr->mapToRef(Vector((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real)),Coord::CANVAS), Vector((yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real)), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 907: #line 2081 "frame/parser.Y" {fr->createLineCmd(fr->mapToRef(Vector((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real)),Coord::CANVAS), fr->mapToRef(Vector((yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real)),Coord::CANVAS), 0, 0, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 908: #line 2089 "frame/parser.Y" {fr->createVectCmd(fr->mapToRef(Vector((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real)),Coord::CANVAS), fr->mapToRef(Vector((yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real)),Coord::CANVAS), 1, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 909: #line 2097 "frame/parser.Y" {fr->createTextCmd(fr->mapToRef(Vector((yyvsp[(2) - (5)].real),(yyvsp[(3) - (5)].real)),Coord::CANVAS), (yyvsp[(4) - (5)].real), 1, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 910: #line 2102 "frame/parser.Y" {fr->createPointCmd(fr->mapToRef(Vector((yyvsp[(3) - (6)].real),(yyvsp[(4) - (6)].real)),Coord::CANVAS), Point::CIRCLE, (yyvsp[(5) - (6)].integer), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 911: #line 2107 "frame/parser.Y" {fr->createPointCmd(fr->mapToRef(Vector((yyvsp[(3) - (6)].real),(yyvsp[(4) - (6)].real)),Coord::CANVAS), Point::BOX, (yyvsp[(5) - (6)].integer), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 912: #line 2112 "frame/parser.Y" {fr->createPointCmd(fr->mapToRef(Vector((yyvsp[(3) - (6)].real),(yyvsp[(4) - (6)].real)),Coord::CANVAS), Point::DIAMOND, (yyvsp[(5) - (6)].integer), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 913: #line 2117 "frame/parser.Y" {fr->createPointCmd(fr->mapToRef(Vector((yyvsp[(3) - (6)].real),(yyvsp[(4) - (6)].real)),Coord::CANVAS), Point::CROSS, (yyvsp[(5) - (6)].integer), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 914: #line 2122 "frame/parser.Y" {fr->createPointCmd(fr->mapToRef(Vector((yyvsp[(3) - (6)].real),(yyvsp[(4) - (6)].real)),Coord::CANVAS), Point::EX, (yyvsp[(5) - (6)].integer), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 915: #line 2127 "frame/parser.Y" {fr->createPointCmd(fr->mapToRef(Vector((yyvsp[(3) - (6)].real),(yyvsp[(4) - (6)].real)),Coord::CANVAS), Point::ARROW, (yyvsp[(5) - (6)].integer), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 916: #line 2132 "frame/parser.Y" {fr->createPointCmd(fr->mapToRef(Vector((yyvsp[(3) - (6)].real),(yyvsp[(4) - (6)].real)),Coord::CANVAS), Point::BOXCIRCLE, (yyvsp[(5) - (6)].integer), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 917: #line 2141 "frame/parser.Y" {fr->createRulerCmd(fr->mapToRef(Vector((yyvsp[(2) - (10)].real),(yyvsp[(3) - (10)].real)),Coord::CANVAS), fr->mapToRef(Vector((yyvsp[(4) - (10)].real),(yyvsp[(5) - (10)].real)),Coord::CANVAS), (Coord::CoordSystem)(yyvsp[(6) - (10)].integer), (Coord::SkyFrame)(yyvsp[(7) - (10)].integer), (Coord::CoordSystem)(yyvsp[(8) - (10)].integer), (Coord::SkyDist)(yyvsp[(9) - (10)].integer), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 918: #line 2150 "frame/parser.Y" {fr->createCompassCmd(fr->mapToRef(Vector((yyvsp[(2) - (7)].real),(yyvsp[(3) - (7)].real)),Coord::CANVAS), (yyvsp[(4) - (7)].real), "N", "E", 1, 1, (Coord::CoordSystem)(yyvsp[(5) - (7)].integer), (Coord::SkyFrame)(yyvsp[(6) - (7)].integer), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 919: #line 2160 "frame/parser.Y" {fr->createProjectionCmd(fr->mapToRef(Vector((yyvsp[(2) - (7)].real),(yyvsp[(3) - (7)].real)),Coord::CANVAS), fr->mapToRef(Vector((yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real)),Coord::CANVAS), (yyvsp[(6) - (7)].real), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 920: #line 2169 "frame/parser.Y" {fr->createAnnulusCmd(fr->mapToRef(Vector((yyvsp[(2) - (7)].real),(yyvsp[(3) - (7)].real)),Coord::CANVAS), (yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real),(yyvsp[(6) - (7)].integer), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 921: #line 2177 "frame/parser.Y" {fr->createEllipseAnnulusCmd(fr->mapToRef(Vector((yyvsp[(2) - (9)].real),(yyvsp[(3) - (9)].real)),Coord::CANVAS), Vector((yyvsp[(4) - (9)].real),(yyvsp[(5) - (9)].real)), Vector((yyvsp[(6) - (9)].real),(yyvsp[(6) - (9)].real)*(yyvsp[(4) - (9)].real)/(yyvsp[(5) - (9)].real)),(yyvsp[(7) - (9)].integer), (yyvsp[(8) - (9)].real), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 922: #line 2187 "frame/parser.Y" {fr->createBoxAnnulusCmd(fr->mapToRef(Vector((yyvsp[(2) - (9)].real),(yyvsp[(3) - (9)].real)),Coord::CANVAS), Vector((yyvsp[(4) - (9)].real),(yyvsp[(5) - (9)].real)),Vector((yyvsp[(6) - (9)].real),(yyvsp[(6) - (9)].real)*(yyvsp[(4) - (9)].real)/(yyvsp[(5) - (9)].real)),(yyvsp[(7) - (9)].integer), (yyvsp[(8) - (9)].real), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 923: #line 2197 "frame/parser.Y" {fr->createCpandaCmd(fr->mapToRef(Vector((yyvsp[(2) - (10)].real),(yyvsp[(3) - (10)].real)),Coord::CANVAS), (yyvsp[(4) - (10)].real),(yyvsp[(5) - (10)].real),(yyvsp[(6) - (10)].integer), (yyvsp[(7) - (10)].real),(yyvsp[(8) - (10)].real),(yyvsp[(9) - (10)].integer), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 924: #line 2207 "frame/parser.Y" {fr->createEpandaCmd(fr->mapToRef(Vector((yyvsp[(2) - (12)].real),(yyvsp[(3) - (12)].real)),Coord::CANVAS), (yyvsp[(4) - (12)].real),(yyvsp[(5) - (12)].real),(yyvsp[(6) - (12)].integer), Vector((yyvsp[(7) - (12)].real),(yyvsp[(8) - (12)].real)), Vector((yyvsp[(9) - (12)].real),(yyvsp[(9) - (12)].real)*(yyvsp[(7) - (12)].real)/(yyvsp[(8) - (12)].real)),(yyvsp[(10) - (12)].integer), (yyvsp[(11) - (12)].real), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 925: #line 2219 "frame/parser.Y" {fr->createBpandaCmd(fr->mapToRef(Vector((yyvsp[(2) - (12)].real),(yyvsp[(3) - (12)].real)),Coord::CANVAS), (yyvsp[(4) - (12)].real),(yyvsp[(5) - (12)].real),(yyvsp[(6) - (12)].integer), Vector((yyvsp[(7) - (12)].real),(yyvsp[(8) - (12)].real)), Vector((yyvsp[(9) - (12)].real),(yyvsp[(9) - (12)].real)*(yyvsp[(7) - (12)].real)/(yyvsp[(8) - (12)].real)),(yyvsp[(10) - (12)].integer), (yyvsp[(11) - (12)].real), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 926: #line 2228 "frame/parser.Y" {fr->createCompositeCmd( currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);;} break; case 928: #line 2236 "frame/parser.Y" {fr->createTemplateCmd(fr->mapToRef(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)),Coord::CANVAS), (yyvsp[(1) - (3)].str));;} break; case 929: #line 2238 "frame/parser.Y" {fr->createTemplateVarCmd(fr->mapToRef(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)),Coord::CANVAS), (yyvsp[(2) - (4)].str));;} break; case 930: #line 2240 "frame/parser.Y" { // backward compatibility fr->createTemplateVarCmd(fr->mapToRef(Vector((yyvsp[(1) - (4)].real),(yyvsp[(2) - (4)].real)),Coord::CANVAS), (yyvsp[(4) - (4)].str)); ;} break; case 931: #line 2245 "frame/parser.Y" {fr->createTemplateCmd(Vector((yyvsp[(4) - (4)].vector)),(Coord::CoordSystem)(yyvsp[(2) - (4)].integer),(Coord::SkyFrame)(yyvsp[(3) - (4)].integer), (yyvsp[(1) - (4)].str));;} break; case 932: #line 2248 "frame/parser.Y" {(yyval.dash)[0] = (yyvsp[(1) - (2)].integer); (yyval.dash)[1] = (yyvsp[(2) - (2)].integer);;} break; case 933: #line 2252 "frame/parser.Y" {fr->markerEditBeginCmd(Vector((yyvsp[(2) - (4)].real),(yyvsp[(3) - (4)].real)),(yyvsp[(4) - (4)].integer));;} break; case 934: #line 2254 "frame/parser.Y" {fr->markerEditMotionCmd(Vector((yyvsp[(2) - (4)].real),(yyvsp[(3) - (4)].real)),(yyvsp[(4) - (4)].integer));;} break; case 935: #line 2255 "frame/parser.Y" {fr->markerEditEndCmd();;} break; case 936: #line 2258 "frame/parser.Y" {(yyval.integer) = Base::DS9;;} break; case 937: #line 2259 "frame/parser.Y" {(yyval.integer) = Base::XML;;} break; case 938: #line 2260 "frame/parser.Y" {(yyval.integer) = Base::CIAO;;} break; case 939: #line 2261 "frame/parser.Y" {(yyval.integer) = Base::SAOTNG;;} break; case 940: #line 2262 "frame/parser.Y" {(yyval.integer) = Base::SAOIMAGE;;} break; case 941: #line 2263 "frame/parser.Y" {(yyval.integer) = Base::PROS;;} break; case 942: #line 2264 "frame/parser.Y" {(yyval.integer) = Base::RAWXY;;} break; case 944: #line 2268 "frame/parser.Y" {fr->getMarkerColorCmd();;} break; case 945: #line 2269 "frame/parser.Y" {fr->getMarkerFontCmd();;} break; case 946: #line 2270 "frame/parser.Y" {fr->getMarkerEpsilonCmd();;} break; case 947: #line 2271 "frame/parser.Y" {fr->getMarkerHandleCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 948: #line 2272 "frame/parser.Y" {fr->getMarkerIdCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 949: #line 2275 "frame/parser.Y" {fr->getMarkerAnalysisPandaCmd((Coord::CoordSystem)(yyvsp[(4) - (4)].integer));;} break; case 950: #line 2277 "frame/parser.Y" {fr->getMarkerAnalysisHistogramCmd((yyvsp[(4) - (6)].str),(yyvsp[(5) - (6)].str),(yyvsp[(6) - (6)].integer));;} break; case 951: #line 2279 "frame/parser.Y" {fr->getMarkerAnalysisPlot2dCmd((yyvsp[(4) - (10)].str),(yyvsp[(5) - (10)].str),(yyvsp[(6) - (10)].str),(yyvsp[(7) - (10)].str),(Coord::CoordSystem)(yyvsp[(8) - (10)].integer), (Coord::SkyFrame)(yyvsp[(9) - (10)].integer), (Marker::AnalysisMethod)(yyvsp[(10) - (10)].integer));;} break; case 952: #line 2281 "frame/parser.Y" {fr->getMarkerAnalysisPlot3dCmd((yyvsp[(4) - (7)].str),(yyvsp[(5) - (7)].str),(Coord::CoordSystem)(yyvsp[(6) - (7)].integer),(Marker::AnalysisMethod)(yyvsp[(7) - (7)].integer));;} break; case 953: #line 2283 "frame/parser.Y" {fr->getMarkerAnalysisRadialCmd((yyvsp[(4) - (7)].str),(yyvsp[(5) - (7)].str),(yyvsp[(6) - (7)].str),(Coord::CoordSystem)(yyvsp[(7) - (7)].integer));;} break; case 954: #line 2285 "frame/parser.Y" {fr->getMarkerAnalysisStatsCmd((Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyFrame)(yyvsp[(5) - (5)].integer));;} break; case 955: #line 2288 "frame/parser.Y" {fr->getMarkerAnalysisPandaCmd((yyvsp[(1) - (4)].integer),(Coord::CoordSystem)(yyvsp[(4) - (4)].integer));;} break; case 956: #line 2290 "frame/parser.Y" {fr->getMarkerAnalysisHistogramCmd((yyvsp[(1) - (6)].integer),(yyvsp[(4) - (6)].str),(yyvsp[(5) - (6)].str),(yyvsp[(6) - (6)].integer));;} break; case 957: #line 2292 "frame/parser.Y" {fr->getMarkerAnalysisPlot2dCmd((yyvsp[(1) - (10)].integer),(yyvsp[(4) - (10)].str),(yyvsp[(5) - (10)].str),(yyvsp[(6) - (10)].str),(yyvsp[(7) - (10)].str),(Coord::CoordSystem)(yyvsp[(8) - (10)].integer), (Coord::SkyFrame)(yyvsp[(9) - (10)].integer), (Marker::AnalysisMethod)(yyvsp[(10) - (10)].integer));;} break; case 958: #line 2294 "frame/parser.Y" {fr->getMarkerAnalysisPlot3dCmd((yyvsp[(1) - (7)].integer),(yyvsp[(4) - (7)].str),(yyvsp[(5) - (7)].str),(Coord::CoordSystem)(yyvsp[(6) - (7)].integer),(Marker::AnalysisMethod)(yyvsp[(7) - (7)].integer));;} break; case 959: #line 2296 "frame/parser.Y" {fr->getMarkerAnalysisRadialCmd((yyvsp[(1) - (7)].integer),(yyvsp[(4) - (7)].str),(yyvsp[(5) - (7)].str),(yyvsp[(6) - (7)].str),(Coord::CoordSystem)(yyvsp[(7) - (7)].integer));;} break; case 960: #line 2298 "frame/parser.Y" {fr->getMarkerAnalysisStatsCmd((yyvsp[(1) - (5)].integer),(Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyFrame)(yyvsp[(5) - (5)].integer));;} break; case 961: #line 2300 "frame/parser.Y" {fr->getMarkerIdAllCmd();;} break; case 962: #line 2301 "frame/parser.Y" {fr->getMarkerAngleCmd((yyvsp[(1) - (2)].integer));;} break; case 963: #line 2302 "frame/parser.Y" {fr->getMarkerAngleCmd((yyvsp[(1) - (3)].integer));;} break; case 964: #line 2304 "frame/parser.Y" {fr->getMarkerAngleCmd((yyvsp[(1) - (4)].integer),(Coord::CoordSystem)(yyvsp[(3) - (4)].integer), (Coord::SkyFrame)(yyvsp[(4) - (4)].integer));;} break; case 965: #line 2306 "frame/parser.Y" {fr->getMarkerAnnulusRadiusCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 966: #line 2309 "frame/parser.Y" {fr->getMarkerBoxAnnulusRadiusCmd((yyvsp[(1) - (5)].integer),(Coord::CoordSystem)(yyvsp[(4) - (5)].integer),(Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 967: #line 2311 "frame/parser.Y" {fr->getMarkerBoxRadiusCmd((yyvsp[(1) - (5)].integer),(Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 968: #line 2312 "frame/parser.Y" {fr->getMarkerBpandaAnglesCmd((yyvsp[(1) - (3)].integer));;} break; case 969: #line 2313 "frame/parser.Y" {fr->getMarkerBpandaAnglesCmd((yyvsp[(1) - (4)].integer));;} break; case 970: #line 2315 "frame/parser.Y" {fr->getMarkerBpandaAnglesCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyFrame)(yyvsp[(5) - (5)].integer));;} break; case 971: #line 2317 "frame/parser.Y" {fr->getMarkerBpandaRadiusCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 972: #line 2320 "frame/parser.Y" {fr->getMarkerCenterCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(3) - (5)].integer), (Coord::SkyFrame)(yyvsp[(4) - (5)].integer), (Coord::SkyFormat)(yyvsp[(5) - (5)].integer));;} break; case 973: #line 2323 "frame/parser.Y" {fr->getMarkerCircleRadiusCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 974: #line 2324 "frame/parser.Y" {fr->getMarkerColorCmd((yyvsp[(1) - (2)].integer));;} break; case 975: #line 2325 "frame/parser.Y" {fr->getMarkerCompassArrowCmd((yyvsp[(1) - (3)].integer));;} break; case 976: #line 2326 "frame/parser.Y" {fr->getMarkerCompassLabelCmd((yyvsp[(1) - (3)].integer));;} break; case 977: #line 2328 "frame/parser.Y" {fr->getMarkerCompassRadiusCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 978: #line 2329 "frame/parser.Y" {fr->getMarkerCompassSystemCmd((yyvsp[(1) - (3)].integer));;} break; case 979: #line 2330 "frame/parser.Y" {fr->getMarkerCompositeCmd((yyvsp[(1) - (3)].integer));;} break; case 980: #line 2331 "frame/parser.Y" {fr->getMarkerCpandaAnglesCmd((yyvsp[(1) - (3)].integer));;} break; case 981: #line 2332 "frame/parser.Y" {fr->getMarkerCpandaAnglesCmd((yyvsp[(1) - (4)].integer));;} break; case 982: #line 2334 "frame/parser.Y" {fr->getMarkerCpandaAnglesCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyFrame)(yyvsp[(5) - (5)].integer));;} break; case 983: #line 2336 "frame/parser.Y" {fr->getMarkerCpandaRadiusCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 984: #line 2338 "frame/parser.Y" {fr->getMarkerEllipseRadiusCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 985: #line 2340 "frame/parser.Y" {fr->getMarkerEllipseAnnulusRadiusCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 986: #line 2342 "frame/parser.Y" {fr->getMarkerEpandaAnglesCmd((yyvsp[(1) - (3)].integer));;} break; case 987: #line 2343 "frame/parser.Y" {fr->getMarkerEpandaAnglesCmd((yyvsp[(1) - (4)].integer));;} break; case 988: #line 2345 "frame/parser.Y" {fr->getMarkerEpandaAnglesCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyFrame)(yyvsp[(5) - (5)].integer));;} break; case 989: #line 2347 "frame/parser.Y" {fr->getMarkerEpandaRadiusCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 990: #line 2348 "frame/parser.Y" {fr->getMarkerFontCmd((yyvsp[(1) - (2)].integer));;} break; case 991: #line 2349 "frame/parser.Y" {fr->getMarkerHighlitedCmd((yyvsp[(1) - (2)].integer));;} break; case 992: #line 2350 "frame/parser.Y" {fr->getMarkerLineArrowCmd((yyvsp[(1) - (3)].integer));;} break; case 993: #line 2352 "frame/parser.Y" {fr->getMarkerLineLengthCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 994: #line 2354 "frame/parser.Y" {fr->getMarkerLineCmd((yyvsp[(1) - (6)].integer), (Coord::CoordSystem)(yyvsp[(4) - (6)].integer), (Coord::SkyFrame)(yyvsp[(5) - (6)].integer), (Coord::SkyFormat)(yyvsp[(6) - (6)].integer));;} break; case 995: #line 2357 "frame/parser.Y" {fr->getMarkerMapLenFromRefCmd((yyvsp[(1) - (6)].integer), (yyvsp[(4) - (6)].real), (Coord::CoordSystem)(yyvsp[(5) - (6)].integer),(Coord::SkyDist)(yyvsp[(6) - (6)].integer));;} break; case 996: #line 2360 "frame/parser.Y" {fr->getMarkerPointShapeCmd((yyvsp[(1) - (3)].integer));;} break; case 997: #line 2361 "frame/parser.Y" {fr->getMarkerPointSizeCmd((yyvsp[(1) - (3)].integer));;} break; case 998: #line 2363 "frame/parser.Y" {fr->getMarkerProjectionPointsCmd((yyvsp[(1) - (6)].integer), (Coord::CoordSystem)(yyvsp[(4) - (6)].integer), (Coord::SkyFrame)(yyvsp[(5) - (6)].integer), (Coord::SkyFormat)(yyvsp[(6) - (6)].integer));;} break; case 999: #line 2366 "frame/parser.Y" {fr->getMarkerProjectionLengthCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 1000: #line 2369 "frame/parser.Y" {fr->getMarkerProjectionWidthCmd((yyvsp[(1) - (5)].integer),(Coord::CoordSystem)(yyvsp[(4) - (5)].integer),(Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 1001: #line 2370 "frame/parser.Y" {fr->getMarkerPropertyCmd((yyvsp[(1) - (2)].integer));;} break; case 1002: #line 2371 "frame/parser.Y" {fr->getMarkerPropertyCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 1003: #line 2373 "frame/parser.Y" {fr->getMarkerRulerLengthCmd((yyvsp[(1) - (5)].integer),(Coord::CoordSystem)(yyvsp[(4) - (5)].integer),(Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 1004: #line 2375 "frame/parser.Y" {fr->getMarkerRulerPointCmd((yyvsp[(1) - (6)].integer), (Coord::CoordSystem)(yyvsp[(4) - (6)].integer), (Coord::SkyFrame)(yyvsp[(5) - (6)].integer), (Coord::SkyFormat)(yyvsp[(6) - (6)].integer));;} break; case 1005: #line 2377 "frame/parser.Y" {fr->getMarkerRulerSystemCmd((yyvsp[(1) - (3)].integer));;} break; case 1006: #line 2378 "frame/parser.Y" {fr->getMarkerSelectedCmd((yyvsp[(1) - (2)].integer));;} break; case 1007: #line 2380 "frame/parser.Y" {fr->getMarkerTagCmd((yyvsp[(1) - (2)].integer));;} break; case 1008: #line 2381 "frame/parser.Y" {fr->getMarkerTagCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 1009: #line 2382 "frame/parser.Y" {fr->getMarkerTextCmd((yyvsp[(1) - (2)].integer));;} break; case 1010: #line 2383 "frame/parser.Y" {fr->getMarkerTextRotateCmd((yyvsp[(1) - (3)].integer));;} break; case 1011: #line 2384 "frame/parser.Y" {fr->getMarkerTypeCmd((yyvsp[(1) - (2)].integer));;} break; case 1012: #line 2386 "frame/parser.Y" {fr->getMarkerVectorArrowCmd((yyvsp[(1) - (3)].integer));;} break; case 1013: #line 2388 "frame/parser.Y" {fr->getMarkerVectorLengthCmd((yyvsp[(1) - (5)].integer), (Coord::CoordSystem)(yyvsp[(4) - (5)].integer), (Coord::SkyDist)(yyvsp[(5) - (5)].integer));;} break; case 1014: #line 2390 "frame/parser.Y" {fr->getMarkerVectorCmd((yyvsp[(1) - (6)].integer), (Coord::CoordSystem)(yyvsp[(4) - (6)].integer), (Coord::SkyFrame)(yyvsp[(5) - (6)].integer), (Coord::SkyFormat)(yyvsp[(6) - (6)].integer));;} break; case 1015: #line 2392 "frame/parser.Y" {fr->getMarkerLineWidthCmd((yyvsp[(1) - (2)].integer));;} break; case 1017: #line 2394 "frame/parser.Y" {fr->getMarkerHighlitedNumberCmd();;} break; case 1018: #line 2395 "frame/parser.Y" {fr->getMarkerNumberCmd();;} break; case 1019: #line 2397 "frame/parser.Y" {fr->getMarkerPolygonSegmentCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;} break; case 1020: #line 2399 "frame/parser.Y" {fr->getMarkerSegmentSegmentCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;} break; case 1021: #line 2400 "frame/parser.Y" {fr->getMarkerPreserveCmd();;} break; case 1022: #line 2401 "frame/parser.Y" {fr->getMarkerPropertyCmd((yyvsp[(2) - (2)].integer));;} break; case 1024: #line 2403 "frame/parser.Y" {fr->getMarkerSelectedNumberCmd();;} break; case 1026: #line 2407 "frame/parser.Y" {fr->getMarkerColorCmd((yyvsp[(1) - (2)].str));;} break; case 1027: #line 2408 "frame/parser.Y" {fr->getMarkerFontCmd((yyvsp[(1) - (2)].str));;} break; case 1028: #line 2409 "frame/parser.Y" {fr->getMarkerIdCmd((yyvsp[(1) - (2)].str));;} break; case 1029: #line 2410 "frame/parser.Y" {fr->getMarkerPropertyCmd((yyvsp[(1) - (3)].str),(yyvsp[(3) - (3)].integer));;} break; case 1030: #line 2411 "frame/parser.Y" {fr->getMarkerTagCmd((yyvsp[(1) - (2)].str));;} break; case 1031: #line 2412 "frame/parser.Y" {fr->getMarkerTagNumberCmd((yyvsp[(1) - (3)].str));;} break; case 1032: #line 2414 "frame/parser.Y" {fr->getMarkerTagsCmd();;} break; case 1033: #line 2415 "frame/parser.Y" {fr->getMarkerTagDefaultNameCmd();;} break; case 1034: #line 2417 "frame/parser.Y" {fr->getMarkerLineWidthCmd();;} break; case 1035: #line 2420 "frame/parser.Y" {fr->getMarkerCentroidAutoCmd();;} break; case 1036: #line 2421 "frame/parser.Y" {fr->getMarkerCentroidRadiusCmd();;} break; case 1037: #line 2422 "frame/parser.Y" {fr->getMarkerCentroidIterationCmd();;} break; case 1038: #line 2423 "frame/parser.Y" {fr->getMarkerCentroidOptionCmd();;} break; case 1039: #line 2426 "frame/parser.Y" {fr->getMarkerHighlitedCmd();;} break; case 1040: #line 2427 "frame/parser.Y" {fr->getMarkerHighlitedCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 1041: #line 2430 "frame/parser.Y" {fr->getMarkerSelectedCmd();;} break; case 1042: #line 2431 "frame/parser.Y" {fr->getMarkerSelectedCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 1043: #line 2434 "frame/parser.Y" {fr->getMarkerShowCmd();;} break; case 1044: #line 2435 "frame/parser.Y" {fr->getMarkerShowTextCmd();;} break; case 1045: #line 2438 "frame/parser.Y" { strncpy(currentFont, "helvetica 10 normal roman", 32); strncpy(currentColor, "green", 16); currentDash[0] = 8; currentDash[1] = 3; currentWidth = 1; strncpy(currentText, "", 80); currentProps = defaultProps; taglist.deleteAll(); cblist.deleteAll(); ;} break; case 1046: #line 2451 "frame/parser.Y" {fr->markerLayerCmd(Base::USER);;} break; case 1047: #line 2452 "frame/parser.Y" { // backward compatibility fr->markerLayerCmd(Base::USER); ;} break; case 1048: #line 2456 "frame/parser.Y" {fr->markerLayerCmd(Base::USER);;} break; case 1049: #line 2457 "frame/parser.Y" { // backward compatibility fr->markerLayerCmd(Base::USER); ;} break; case 1050: #line 2461 "frame/parser.Y" {fr->markerLayerCmd(Base::CATALOG);;} break; case 1051: #line 2462 "frame/parser.Y" {fr->markerLayerCmd(Base::ANALYSIS);;} break; case 1052: #line 2467 "frame/parser.Y" {fr->markerListCmd((Base::MarkerFormat)(yyvsp[(1) - (7)].integer), (Coord::CoordSystem)(yyvsp[(2) - (7)].integer), (Coord::SkyFrame)(yyvsp[(3) - (7)].integer), (Coord::SkyFormat)(yyvsp[(4) - (7)].integer), (yyvsp[(5) - (7)].integer), 0, propQMask, propQValue, taglist);;} break; case 1053: #line 2472 "frame/parser.Y" {fr->markerListCmd((Base::MarkerFormat)(yyvsp[(2) - (8)].integer), (Coord::CoordSystem)(yyvsp[(3) - (8)].integer), (Coord::SkyFrame)(yyvsp[(4) - (8)].integer), (Coord::SkyFormat)(yyvsp[(5) - (8)].integer), (yyvsp[(6) - (8)].integer), 1, propQMask, propQValue, taglist);;} break; case 1054: #line 2478 "frame/parser.Y" {fr->markerLoadCmd((Base::MarkerFormat)(yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].str));;} break; case 1055: #line 2480 "frame/parser.Y" {fr->markerLoadCmd((Base::MarkerFormat)(yyvsp[(1) - (4)].integer),(yyvsp[(2) - (4)].str), (Coord::CoordSystem)(yyvsp[(3) - (4)].integer),(Coord::SkyFrame)(yyvsp[(4) - (4)].integer));;} break; case 1056: #line 2483 "frame/parser.Y" {fr->markerLoadCmd((Base::MarkerFormat)(yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].integer));;} break; case 1057: #line 2485 "frame/parser.Y" {fr->markerLoadCmd((Base::MarkerFormat)(yyvsp[(1) - (4)].integer),(yyvsp[(2) - (4)].integer), (Coord::CoordSystem)(yyvsp[(3) - (4)].integer),(Coord::SkyFrame)(yyvsp[(4) - (4)].integer));;} break; case 1058: #line 2488 "frame/parser.Y" {fr->markerLoadFitsCmd((yyvsp[(2) - (6)].str), (yyvsp[(3) - (6)].str), (yyvsp[(4) - (6)].dash), (yyvsp[(5) - (6)].integer), (yyvsp[(6) - (6)].str));;} break; case 1059: #line 2491 "frame/parser.Y" {fr->markerMoveCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 1060: #line 2492 "frame/parser.Y" {fr->markerFrontCmd();;} break; case 1061: #line 2493 "frame/parser.Y" {fr->markerBackCmd();;} break; case 1062: #line 2494 "frame/parser.Y" {fr->markerMoveBeginCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 1063: #line 2495 "frame/parser.Y" {fr->markerMoveMotionCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 1064: #line 2496 "frame/parser.Y" {fr->markerMoveEndCmd();;} break; case 1065: #line 2498 "frame/parser.Y" {fr->markerMoveToCmd(Vector((yyvsp[(3) - (3)].vector)), (Coord::InternalSystem)(yyvsp[(2) - (3)].integer));;} break; case 1066: #line 2500 "frame/parser.Y" {fr->markerMoveToCmd(Vector((yyvsp[(4) - (4)].vector)), (Coord::CoordSystem)(yyvsp[(2) - (4)].integer), (Coord::SkyFrame)(yyvsp[(3) - (4)].integer));;} break; case 1069: #line 2507 "frame/parser.Y" {setProps(¤tProps,(yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 1070: #line 2508 "frame/parser.Y" {strncpy(currentColor,(yyvsp[(3) - (3)].str),16);;} break; case 1071: #line 2509 "frame/parser.Y" {currentDash[0]=(yyvsp[(3) - (4)].integer);currentDash[1]=(yyvsp[(4) - (4)].integer);;} break; case 1072: #line 2510 "frame/parser.Y" {currentWidth = (yyvsp[(3) - (3)].integer);;} break; case 1073: #line 2511 "frame/parser.Y" {strncpy(currentFont,(yyvsp[(3) - (3)].str),32);;} break; case 1074: #line 2512 "frame/parser.Y" {strncpy(currentText,(yyvsp[(3) - (3)].str),80);;} break; case 1077: #line 2517 "frame/parser.Y" {(yyval.integer) = Marker::NONE;;} break; case 1078: #line 2518 "frame/parser.Y" {(yyval.integer) = Marker::SELECT;;} break; case 1079: #line 2519 "frame/parser.Y" {(yyval.integer) = Marker::HIGHLITE;;} break; case 1080: #line 2520 "frame/parser.Y" {(yyval.integer) = Marker::DASH;;} break; case 1081: #line 2521 "frame/parser.Y" {(yyval.integer) = Marker::FIXED;;} break; case 1082: #line 2522 "frame/parser.Y" {(yyval.integer) = Marker::EDIT;;} break; case 1083: #line 2523 "frame/parser.Y" {(yyval.integer) = Marker::MOVE;;} break; case 1084: #line 2524 "frame/parser.Y" {(yyval.integer) = Marker::ROTATE;;} break; case 1085: #line 2525 "frame/parser.Y" {(yyval.integer) = Marker::DELETE;;} break; case 1086: #line 2526 "frame/parser.Y" {(yyval.integer) = Marker::INCLUDE;;} break; case 1087: #line 2527 "frame/parser.Y" {(yyval.integer) = Marker::SOURCE;;} break; case 1090: #line 2534 "frame/parser.Y" {propQMask=0;propQValue=0;;} break; case 1091: #line 2535 "frame/parser.Y" {propQMask=0;propQValue=0;;} break; case 1093: #line 2538 "frame/parser.Y" {fr->markerSelectAllCmd();;} break; case 1094: #line 2539 "frame/parser.Y" {fr->markerSelectOnlyCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 1095: #line 2540 "frame/parser.Y" {fr->markerSelectToggleCmd();;} break; case 1096: #line 2541 "frame/parser.Y" {fr->markerSelectToggleCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 1097: #line 2544 "frame/parser.Y" {fr->markerShowCmd((yyvsp[(1) - (1)].integer));;} break; case 1098: #line 2545 "frame/parser.Y" {fr->markerShowTextCmd((yyvsp[(2) - (2)].integer));;} break; case 1101: #line 2553 "frame/parser.Y" {propQMask |= (yyvsp[(1) - (3)].integer); setProps(&propQValue,(yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 1102: #line 2556 "frame/parser.Y" {taglist.deleteAll();;} break; case 1103: #line 2557 "frame/parser.Y" {taglist.deleteAll();;} break; case 1107: #line 2564 "frame/parser.Y" {taglist.append(new Tag((yyvsp[(3) - (3)].str)));;} break; case 1108: #line 2567 "frame/parser.Y" {cblist.append( new CallBack(fr->getInterp(),(CallBack::Type)(yyvsp[(3) - (5)].integer),(yyvsp[(4) - (5)].str),(yyvsp[(5) - (5)].str)));;} break; case 1109: #line 2571 "frame/parser.Y" {fr->maskClearCmd();;} break; case 1110: #line 2572 "frame/parser.Y" {fr->maskColorCmd((yyvsp[(2) - (2)].str));;} break; case 1111: #line 2573 "frame/parser.Y" {fr->maskMarkCmd((yyvsp[(2) - (2)].integer));;} break; case 1112: #line 2574 "frame/parser.Y" {fr->maskTransparencyCmd((yyvsp[(2) - (2)].real));;} break; case 1113: #line 2577 "frame/parser.Y" {fr->orientCmd(Coord::XX);;} break; case 1114: #line 2578 "frame/parser.Y" {fr->orientCmd(Coord::YY);;} break; case 1115: #line 2579 "frame/parser.Y" {fr->orientCmd(Coord::XY);;} break; case 1116: #line 2580 "frame/parser.Y" {fr->orientCmd(Coord::NORMAL);;} break; case 1117: #line 2584 "frame/parser.Y" {fr->panCmd(Vector((yyvsp[(1) - (4)].real),(yyvsp[(2) - (4)].real)),Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;} break; case 1118: #line 2585 "frame/parser.Y" {fr->panCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 1119: #line 2587 "frame/parser.Y" { // backward compatibility fr->panCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real))); ;} break; case 1120: #line 2592 "frame/parser.Y" {fr->panCmd(Vector((yyvsp[(3) - (3)].vector)), (Coord::CoordSystem)(yyvsp[(1) - (3)].integer), (Coord::SkyFrame)(yyvsp[(2) - (3)].integer));;} break; case 1122: #line 2594 "frame/parser.Y" {fr->panBBoxCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 1124: #line 2596 "frame/parser.Y" {fr->panPreserveCmd((yyvsp[(2) - (2)].integer));;} break; case 1125: #line 2599 "frame/parser.Y" {fr->panToCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 1126: #line 2601 "frame/parser.Y" { // backward compatibility fr->panToCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real))); ;} break; case 1127: #line 2606 "frame/parser.Y" {fr->panToCmd(Vector((yyvsp[(3) - (3)].vector)), (Coord::CoordSystem)(yyvsp[(1) - (3)].integer), (Coord::SkyFrame)(yyvsp[(2) - (3)].integer));;} break; case 1128: #line 2609 "frame/parser.Y" {fr->panBeginCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 1129: #line 2610 "frame/parser.Y" {fr->panMotionCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 1130: #line 2611 "frame/parser.Y" {fr->panEndCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 1131: #line 2614 "frame/parser.Y" {fr->pannerCmd((yyvsp[(1) - (1)].integer));;} break; case 1132: #line 2616 "frame/parser.Y" { // backward compatibility fr->pannerCmd((Coord::CoordSystem)(yyvsp[(2) - (3)].integer),(Coord::SkyFrame)(yyvsp[(3) - (3)].integer)); ;} break; case 1133: #line 2620 "frame/parser.Y" {fr->pannerCmd((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].integer), (yyvsp[(3) - (3)].integer));;} break; case 1134: #line 2621 "frame/parser.Y" {fr->updatePannerCmd();;} break; case 1135: #line 2625 "frame/parser.Y" {fr->psColorSpaceCmd((Widget::PSColorSpace)(yyvsp[(2) - (2)].integer));;} break; case 1136: #line 2626 "frame/parser.Y" {fr->psLevelCmd((yyvsp[(2) - (2)].integer));;} break; case 1137: #line 2627 "frame/parser.Y" {fr->psResolutionCmd((yyvsp[(2) - (2)].integer));;} break; case 1138: #line 2628 "frame/parser.Y" { // backward compatibility with backup ;} break; case 1139: #line 2633 "frame/parser.Y" {(yyval.integer) = Widget::BW;;} break; case 1140: #line 2634 "frame/parser.Y" {(yyval.integer) = Widget::GRAY;;} break; case 1141: #line 2635 "frame/parser.Y" {(yyval.integer) = Widget::RGB;;} break; case 1142: #line 2636 "frame/parser.Y" {(yyval.integer) = Widget::CMYK;;} break; case 1145: #line 2644 "frame/parser.Y" {fr->regionHighliteBeginCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 1146: #line 2646 "frame/parser.Y" {fr->regionHighliteMotionCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 1147: #line 2647 "frame/parser.Y" {fr->regionHighliteEndCmd();;} break; case 1148: #line 2648 "frame/parser.Y" {fr->regionHighliteShiftEndCmd();;} break; case 1149: #line 2652 "frame/parser.Y" {fr->regionSelectBeginCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 1150: #line 2653 "frame/parser.Y" {fr->regionSelectMotionCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 1151: #line 2654 "frame/parser.Y" {fr->regionSelectEndCmd();;} break; case 1152: #line 2655 "frame/parser.Y" {fr->regionSelectShiftEndCmd();;} break; case 1153: #line 2658 "frame/parser.Y" {(yyval.integer) = Frame3dBase::MIP;;} break; case 1154: #line 2659 "frame/parser.Y" {(yyval.integer) = Frame3dBase::AIP;;} break; case 1155: #line 2662 "frame/parser.Y" {(yyval.integer) = Frame3dBase::NONE;;} break; case 1156: #line 2663 "frame/parser.Y" {(yyval.integer) = Frame3dBase::AZIMUTH;;} break; case 1157: #line 2664 "frame/parser.Y" {(yyval.integer) = Frame3dBase::ELEVATION;;} break; case 1158: #line 2667 "frame/parser.Y" {fr->setRGBChannelCmd((yyvsp[(2) - (2)].str));;} break; case 1159: #line 2668 "frame/parser.Y" {fr->setRGBSystemCmd((Coord::CoordSystem)(yyvsp[(2) - (2)].integer));;} break; case 1160: #line 2669 "frame/parser.Y" {fr->setRGBViewCmd((yyvsp[(2) - (4)].integer),(yyvsp[(3) - (4)].integer),(yyvsp[(4) - (4)].integer));;} break; case 1161: #line 2672 "frame/parser.Y" {fr->rotateCmd(degToRad((yyvsp[(1) - (1)].real)));;} break; case 1162: #line 2673 "frame/parser.Y" {fr->rotateCmd(degToRad((yyvsp[(1) - (2)].real)));;} break; case 1164: #line 2675 "frame/parser.Y" {fr->rotateToCmd(degToRad((yyvsp[(2) - (2)].real)));;} break; case 1165: #line 2676 "frame/parser.Y" {fr->rotateToCmd(degToRad((yyvsp[(2) - (3)].real)));;} break; case 1166: #line 2679 "frame/parser.Y" {fr->rotateBeginCmd();;} break; case 1167: #line 2680 "frame/parser.Y" {fr->rotateMotionCmd(degToRad((yyvsp[(1) - (1)].real)));;} break; case 1168: #line 2681 "frame/parser.Y" {fr->rotateEndCmd();;} break; case 1173: #line 2688 "frame/parser.Y" {fr->savePhotoCmd((yyvsp[(2) - (2)].str));;} break; case 1174: #line 2692 "frame/parser.Y" {fr->saveArrayFileCmd((yyvsp[(2) - (3)].str), (FitsFile::ArchType)(yyvsp[(3) - (3)].integer));;} break; case 1175: #line 2694 "frame/parser.Y" {fr->saveArrayChannelCmd((yyvsp[(2) - (3)].str), (FitsFile::ArchType)(yyvsp[(3) - (3)].integer));;} break; case 1176: #line 2696 "frame/parser.Y" {fr->saveArraySocketCmd((yyvsp[(2) - (3)].integer), (FitsFile::ArchType)(yyvsp[(3) - (3)].integer));;} break; case 1178: #line 2701 "frame/parser.Y" {fr->saveArrayRGBCubeFileCmd((yyvsp[(2) - (3)].str), (FitsFile::ArchType)(yyvsp[(3) - (3)].integer));;} break; case 1179: #line 2703 "frame/parser.Y" {fr->saveArrayRGBCubeChannelCmd((yyvsp[(2) - (3)].str), (FitsFile::ArchType)(yyvsp[(3) - (3)].integer));;} break; case 1180: #line 2705 "frame/parser.Y" {fr->saveArrayRGBCubeSocketCmd((yyvsp[(2) - (3)].integer), (FitsFile::ArchType)(yyvsp[(3) - (3)].integer));;} break; case 1190: #line 2718 "frame/parser.Y" {fr->saveFitsFileCmd((yyvsp[(2) - (2)].str));;} break; case 1191: #line 2719 "frame/parser.Y" {fr->saveFitsChannelCmd((yyvsp[(2) - (2)].str));;} break; case 1192: #line 2720 "frame/parser.Y" {fr->saveFitsSocketCmd((yyvsp[(2) - (2)].integer));;} break; case 1193: #line 2723 "frame/parser.Y" {fr->saveFitsTableFileCmd((yyvsp[(2) - (2)].str));;} break; case 1194: #line 2724 "frame/parser.Y" {fr->saveFitsTableChannelCmd((yyvsp[(2) - (2)].str));;} break; case 1195: #line 2725 "frame/parser.Y" {fr->saveFitsTableSocketCmd((yyvsp[(2) - (2)].integer));;} break; case 1196: #line 2728 "frame/parser.Y" {fr->saveFitsSliceFileCmd((yyvsp[(2) - (2)].str));;} break; case 1197: #line 2729 "frame/parser.Y" {fr->saveFitsSliceChannelCmd((yyvsp[(2) - (2)].str));;} break; case 1198: #line 2730 "frame/parser.Y" {fr->saveFitsSliceSocketCmd((yyvsp[(2) - (2)].integer));;} break; case 1199: #line 2733 "frame/parser.Y" {fr->saveFitsExtCubeFileCmd((yyvsp[(2) - (2)].str));;} break; case 1200: #line 2734 "frame/parser.Y" {fr->saveFitsExtCubeChannelCmd((yyvsp[(2) - (2)].str));;} break; case 1201: #line 2735 "frame/parser.Y" {fr->saveFitsExtCubeSocketCmd((yyvsp[(2) - (2)].integer));;} break; case 1203: #line 2739 "frame/parser.Y" {fr->saveFitsMosaicFileCmd((yyvsp[(2) - (3)].str),(yyvsp[(3) - (3)].integer));;} break; case 1204: #line 2740 "frame/parser.Y" {fr->saveFitsMosaicChannelCmd((yyvsp[(2) - (3)].str),(yyvsp[(3) - (3)].integer));;} break; case 1205: #line 2741 "frame/parser.Y" {fr->saveFitsMosaicSocketCmd((yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 1206: #line 2744 "frame/parser.Y" {fr->saveFitsMosaicImageFileCmd((yyvsp[(2) - (2)].str));;} break; case 1207: #line 2745 "frame/parser.Y" {fr->saveFitsMosaicImageChannelCmd((yyvsp[(2) - (2)].str));;} break; case 1208: #line 2746 "frame/parser.Y" {fr->saveFitsMosaicImageSocketCmd((yyvsp[(2) - (2)].integer));;} break; case 1209: #line 2749 "frame/parser.Y" {fr->saveFitsRGBImageFileCmd((yyvsp[(2) - (2)].str));;} break; case 1210: #line 2750 "frame/parser.Y" {fr->saveFitsRGBImageChannelCmd((yyvsp[(2) - (2)].str));;} break; case 1211: #line 2751 "frame/parser.Y" {fr->saveFitsRGBImageSocketCmd((yyvsp[(2) - (2)].integer));;} break; case 1212: #line 2754 "frame/parser.Y" {fr->saveFitsRGBCubeFileCmd((yyvsp[(2) - (2)].str));;} break; case 1213: #line 2755 "frame/parser.Y" {fr->saveFitsRGBCubeChannelCmd((yyvsp[(2) - (2)].str));;} break; case 1214: #line 2756 "frame/parser.Y" {fr->saveFitsRGBCubeSocketCmd((yyvsp[(2) - (2)].integer));;} break; case 1215: #line 2759 "frame/parser.Y" {fr->saveFitsResampleFileCmd((yyvsp[(2) - (2)].str));;} break; case 1216: #line 2760 "frame/parser.Y" {fr->saveFitsResampleChannelCmd((yyvsp[(2) - (2)].str));;} break; case 1217: #line 2761 "frame/parser.Y" {fr->saveFitsResampleSocketCmd((yyvsp[(2) - (2)].integer));;} break; case 1218: #line 2765 "frame/parser.Y" {fr->saveNRRDFileCmd((yyvsp[(2) - (3)].str), (FitsFile::ArchType)(yyvsp[(3) - (3)].integer));;} break; case 1219: #line 2767 "frame/parser.Y" {fr->saveNRRDChannelCmd((yyvsp[(2) - (3)].str), (FitsFile::ArchType)(yyvsp[(3) - (3)].integer));;} break; case 1220: #line 2769 "frame/parser.Y" {fr->saveNRRDSocketCmd((yyvsp[(2) - (3)].integer), (FitsFile::ArchType)(yyvsp[(3) - (3)].integer));;} break; case 1221: #line 2773 "frame/parser.Y" {fr->saveENVIFileCmd((yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), (FitsFile::ArchType)(yyvsp[(4) - (4)].integer));;} break; case 1222: #line 2776 "frame/parser.Y" {fr->smoothCmd((Context::SmoothFunction)(yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].integer));;} break; case 1223: #line 2777 "frame/parser.Y" {fr->smoothDeleteCmd();;} break; case 1224: #line 2780 "frame/parser.Y" {(yyval.integer) = Context::BOXCAR;;} break; case 1225: #line 2781 "frame/parser.Y" {(yyval.integer) = Context::GAUSSIAN;;} break; case 1226: #line 2782 "frame/parser.Y" {(yyval.integer) = Context::TOPHAT;;} break; case 1227: #line 2785 "frame/parser.Y" {fr->updateFitsCmd(0);;} break; case 1228: #line 2787 "frame/parser.Y" {fr->updateFitsCmd((yyvsp[(1) - (5)].integer),BBox((yyvsp[(2) - (5)].real),(yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].real),(yyvsp[(5) - (5)].real)),0);;} break; case 1229: #line 2788 "frame/parser.Y" {fr->updateFitsCmd(1);;} break; case 1230: #line 2790 "frame/parser.Y" {fr->updateFitsCmd((yyvsp[(2) - (6)].integer),BBox((yyvsp[(3) - (6)].real),(yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)),1);;} break; case 1232: #line 2794 "frame/parser.Y" {fr->sliceCmd(2, (yyvsp[(1) - (1)].integer));;} break; case 1233: #line 2795 "frame/parser.Y" {fr->sliceCmd(2, (yyvsp[(1) - (2)].real), (Coord::CoordSystem)(yyvsp[(2) - (2)].integer));;} break; case 1234: #line 2796 "frame/parser.Y" {fr->sliceCmd((yyvsp[(1) - (2)].integer), (yyvsp[(2) - (2)].integer));;} break; case 1235: #line 2797 "frame/parser.Y" {fr->sliceCmd((yyvsp[(1) - (3)].integer), (yyvsp[(2) - (3)].real), (Coord::CoordSystem)(yyvsp[(3) - (3)].integer));;} break; case 1236: #line 2800 "frame/parser.Y" {fr->warpCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 1237: #line 2801 "frame/parser.Y" {fr->warpToCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;} break; case 1238: #line 2805 "frame/parser.Y" {fr->wcsCmd((Coord::CoordSystem)(yyvsp[(1) - (3)].integer), (Coord::SkyFrame)(yyvsp[(2) - (3)].integer), (Coord::SkyFormat)(yyvsp[(3) - (3)].integer));;} break; case 1240: #line 2807 "frame/parser.Y" {fr->wcsResetCmd((yyvsp[(2) - (2)].integer));;} break; case 1243: #line 2812 "frame/parser.Y" {fr->wcsAppendCmd((yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].integer));;} break; case 1244: #line 2813 "frame/parser.Y" {fr->wcsAppendCmd((yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].str));;} break; case 1245: #line 2814 "frame/parser.Y" {fr->wcsAppendTxtCmd((yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].str));;} break; case 1246: #line 2817 "frame/parser.Y" {fr->wcsReplaceCmd((yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].integer));;} break; case 1247: #line 2818 "frame/parser.Y" {fr->wcsReplaceCmd((yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].str));;} break; case 1248: #line 2819 "frame/parser.Y" {fr->wcsReplaceTxtCmd((yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].str));;} break; case 1249: #line 2822 "frame/parser.Y" {fr->wcsAlignCmd((yyvsp[(1) - (1)].integer));;} break; case 1250: #line 2824 "frame/parser.Y" { // used by backup fr->wcsAlignCmd((yyvsp[(1) - (3)].integer), (Coord::CoordSystem)(yyvsp[(2) - (3)].integer), (Coord::SkyFrame)(yyvsp[(3) - (3)].integer)); ;} break; case 1251: #line 2829 "frame/parser.Y" {fr->wcsAlignCmd((yyvsp[(1) - (4)].integer), (FitsImage*)(yyvsp[(2) - (4)].ptr), (Coord::CoordSystem)(yyvsp[(3) - (4)].integer), (Coord::SkyFrame)(yyvsp[(4) - (4)].integer));;} break; case 1252: #line 2832 "frame/parser.Y" { #ifdef __WIN32 fr->win32PrintCmd(); #endif ;} break; case 1253: #line 2839 "frame/parser.Y" {fr->zoomCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 1254: #line 2841 "frame/parser.Y" {fr->zoomAboutCmd(Vector((yyvsp[(1) - (5)].real),(yyvsp[(2) - (5)].real)),Vector((yyvsp[(4) - (5)].real),(yyvsp[(5) - (5)].real)));;} break; case 1255: #line 2843 "frame/parser.Y" { // backward compatibility fr->zoomAboutCmd(Vector((yyvsp[(1) - (6)].real),(yyvsp[(2) - (6)].real)),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real))); ;} break; case 1256: #line 2848 "frame/parser.Y" {fr->zoomAboutCmd(Vector((yyvsp[(1) - (6)].real),(yyvsp[(2) - (6)].real)),Vector((yyvsp[(6) - (6)].vector)), (Coord::CoordSystem)(yyvsp[(4) - (6)].integer),(Coord::SkyFrame)(yyvsp[(5) - (6)].integer));;} break; case 1258: #line 2852 "frame/parser.Y" {fr->zoomToFitCmd(1);;} break; case 1259: #line 2853 "frame/parser.Y" {fr->zoomToFitCmd((yyvsp[(2) - (2)].real));;} break; case 1260: #line 2854 "frame/parser.Y" {fr->zoomToCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;} break; case 1261: #line 2856 "frame/parser.Y" {fr->zoomToAboutCmd(Vector((yyvsp[(1) - (5)].real),(yyvsp[(2) - (5)].real)),Vector((yyvsp[(4) - (5)].real),(yyvsp[(5) - (5)].real)));;} break; case 1262: #line 2858 "frame/parser.Y" { // backward compatibility fr->zoomToAboutCmd(Vector((yyvsp[(1) - (6)].real),(yyvsp[(2) - (6)].real)),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real))); ;} break; case 1263: #line 2863 "frame/parser.Y" {fr->zoomToAboutCmd(Vector((yyvsp[(1) - (6)].real),(yyvsp[(2) - (6)].real)), Vector((yyvsp[(6) - (6)].vector)), (Coord::CoordSystem)(yyvsp[(4) - (6)].integer), (Coord::SkyFrame)(yyvsp[(5) - (6)].integer));;} break; /* Line 1267 of yacc.c. */ #line 10970 "frame/parser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (fr, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (fr, ll, yymsg); } else { yyerror (fr, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, fr, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, fr, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (fr, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, fr, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, fr, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 2867 "frame/parser.Y" static void setProps(unsigned short* props, unsigned short prop, int value) { if (value) *props |= prop; else *props &= ~prop; } saods9/tksao/frame/parser.H000644 000765 000000 00000036151 12705227353 016220 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { REAL = 258, INT = 259, STRING = 260, POINTER = 261, ANGDEGREE = 262, ANGRADIAN = 263, SEXSTR = 264, HMSSTR = 265, DMSSTR = 266, ABOUT_ = 267, AIP_ = 268, ALLOC_ = 269, ALLOCGZ_ = 270, ALIGN_ = 271, ALL_ = 272, ALT_ = 273, AMPLIFIER_ = 274, ANALYSIS_ = 275, ANGLE_ = 276, ANNULUS_ = 277, APPEND_ = 278, ARCMIN_ = 279, ARCSEC_ = 280, ARRAY_ = 281, ARROW_ = 282, ASINH_ = 283, AST_ = 284, AUTO_ = 285, AUX_ = 286, AVERAGE_ = 287, AXES_ = 288, AZIMUTH_ = 289, B1950_ = 290, BACK_ = 291, BACKGROUND_ = 292, BASE_ = 293, BBOX_ = 294, BEGIN_ = 295, BG_ = 296, BIG_ = 297, BIGENDIAN_ = 298, BIN_ = 299, BITPIX_ = 300, BLOCK_ = 301, BORDER_ = 302, BOX_ = 303, BOXANNULUS_ = 304, BOXCAR_ = 305, BOXCIRCLE_ = 306, BPANDA_ = 307, BUFFER_ = 308, BW_ = 309, CALLBACK_ = 310, CANVAS_ = 311, CATALOG_ = 312, CELESTRIAL_ = 313, CENTER_ = 314, CENTROID_ = 315, CHANNEL_ = 316, CIRCLE_ = 317, CIAO_ = 318, CLEAR_ = 319, CLIP_ = 320, COLOR_ = 321, COLORBAR_ = 322, COLORMAP_ = 323, COLORSCALE_ = 324, COLORSPACE_ = 325, COLS_ = 326, COLUMN_ = 327, COMMAND_ = 328, COMPASS_ = 329, COMPOSITE_ = 330, COMPRESS_ = 331, CONTOUR_ = 332, CONTRAST_ = 333, COORDINATES_ = 334, COPY_ = 335, COUNT_ = 336, CPANDA_ = 337, CREATE_ = 338, CROP_ = 339, CROSS_ = 340, CROSSHAIR_ = 341, CUBE_ = 342, CURSOR_ = 343, CUT_ = 344, CMYK_ = 345, DASH_ = 346, DASHLIST_ = 347, DATA_ = 348, DATAMIN_ = 349, DATASEC_ = 350, DEBUG_ = 351, DEGREES_ = 352, DEFAULT_ = 353, DELETE_ = 354, DEPTH_ = 355, DETECTOR_ = 356, DIAMOND_ = 357, DIM_ = 358, DS9_ = 359, EDIT_ = 360, ECLIPTIC_ = 361, ELEVATION_ = 362, ELLIPSE_ = 363, ELLIPSEANNULUS_ = 364, END_ = 365, ENVI_ = 366, EPANDA_ = 367, EPSILON_ = 368, EQUATORIAL_ = 369, ERASE_ = 370, EXT_ = 371, FACTOR_ = 372, FALSE_ = 373, FILE_ = 374, FILTER_ = 375, FIT_ = 376, FITS_ = 377, FITSY_ = 378, FIXED_ = 379, FK4_ = 380, FK4_NO_E_ = 381, FK5_ = 382, FONT_ = 383, FRONT_ = 384, FULL_ = 385, FUNCTION_ = 386, GALACTIC_ = 387, GAUSSIAN_ = 388, GET_ = 389, GLOBAL_ = 390, GRAPHICS_ = 391, GRAY_ = 392, GRID_ = 393, GZ_ = 394, HANDLE_ = 395, HAS_ = 396, HEAD_ = 397, HEADER_ = 398, HEIGHT_ = 399, HELIOECLIPTIC_ = 400, HIDE_ = 401, HIGHLITE_ = 402, HISTEQU_ = 403, HISTOGRAM_ = 404, HORIZONTAL_ = 405, ICRS_ = 406, ID_ = 407, IIS_ = 408, IMAGE_ = 409, INCLUDE_ = 410, INCR_ = 411, INFO_ = 412, INTEGER_ = 413, ITERATION_ = 414, IRAF_ = 415, IRAFMIN_ = 416, J2000_ = 417, KEY_ = 418, KEYWORD_ = 419, LABEL_ = 420, LENGTH_ = 421, LEVEL_ = 422, LITTLE_ = 423, LITTLEENDIAN_ = 424, LINE_ = 425, LINEAR_ = 426, LIST_ = 427, LOAD_ = 428, LOCAL_ = 429, LOG_ = 430, MACOSX_ = 431, MAGNIFIER_ = 432, MATCH_ = 433, MAP_ = 434, MARK_ = 435, MARKER_ = 436, MASK_ = 437, MESSAGE_ = 438, METHOD_ = 439, MINMAX_ = 440, MIP_ = 441, MMAP_ = 442, MMAPINCR_ = 443, MOSAIC_ = 444, MODE_ = 445, MOTION_ = 446, MOVE_ = 447, NAME_ = 448, NAN_ = 449, NATIVE_ = 450, NAXES_ = 451, NEW_ = 452, NEXT_ = 453, NO_ = 454, NONE_ = 455, NOW_ = 456, NRRD_ = 457, NUMBER_ = 458, OBJECT_ = 459, OFF_ = 460, ON_ = 461, ONLY_ = 462, OPTION_ = 463, ORIENT_ = 464, PAN_ = 465, PANNER_ = 466, PARSER_ = 467, PASTE_ = 468, PERF_ = 469, PHOTO_ = 470, PHYSICAL_ = 471, PIXEL_ = 472, PLOT2D_ = 473, PLOT3D_ = 474, POINT_ = 475, POINTER_ = 476, POLYGON_ = 477, POSTSCRIPT_ = 478, POW_ = 479, PRINT_ = 480, PRESERVE_ = 481, PROJECTION_ = 482, PROPERTY_ = 483, PUBLICATION_ = 484, PROS_ = 485, QUERY_ = 486, RADIAL_ = 487, RADIUS_ = 488, REGION_ = 489, REPLACE_ = 490, RESAMPLE_ = 491, RESET_ = 492, RESOLUTION_ = 493, RGB_ = 494, ROOT_ = 495, ROTATE_ = 496, RULER_ = 497, SAMPLE_ = 498, SAOIMAGE_ = 499, SAOTNG_ = 500, SAVE_ = 501, SCALE_ = 502, SCAN_ = 503, SCIENTIFIC_ = 504, SCOPE_ = 505, SEGMENT_ = 506, SELECT_ = 507, SET_ = 508, SEXAGESIMAL_ = 509, SHAPE_ = 510, SHARED_ = 511, SHIFT_ = 512, SHMID_ = 513, SHOW_ = 514, SINH_ = 515, SIZE_ = 516, SLICE_ = 517, SMMAP_ = 518, SMOOTH_ = 519, SOCKET_ = 520, SOCKETGZ_ = 521, SOURCE_ = 522, SQRT_ = 523, SQUARED_ = 524, SSHARED_ = 525, STATS_ = 526, STATUS_ = 527, SUPERGALACTIC_ = 528, SUM_ = 529, SYSTEM_ = 530, TABLE_ = 531, TAG_ = 532, TEMPLATE_ = 533, TEXT_ = 534, THREADS_ = 535, THREED_ = 536, THRESHOLD_ = 537, THICK_ = 538, TRANSPARENCY_ = 539, TO_ = 540, TOGGLE_ = 541, TOPHAT_ = 542, TRUE_ = 543, TYPE_ = 544, UNDO_ = 545, UNHIGHLITE_ = 546, UNLOAD_ = 547, UNSELECT_ = 548, UPDATE_ = 549, USER_ = 550, VALUE_ = 551, VAR_ = 552, VIEW_ = 553, VECTOR_ = 554, VERSION_ = 555, VERTEX_ = 556, VERTICAL_ = 557, WARP_ = 558, WCS_ = 559, WCSA_ = 560, WCSB_ = 561, WCSC_ = 562, WCSD_ = 563, WCSE_ = 564, WCSF_ = 565, WCSG_ = 566, WCSH_ = 567, WCSI_ = 568, WCSJ_ = 569, WCSK_ = 570, WCSL_ = 571, WCSM_ = 572, WCSN_ = 573, WCSO_ = 574, WCSP_ = 575, WCSQ_ = 576, WCSR_ = 577, WCSS_ = 578, WCST_ = 579, WCSU_ = 580, WCSV_ = 581, WCSW_ = 582, WCSX_ = 583, WCSY_ = 584, WCSZ_ = 585, WCS0_ = 586, WFPC2_ = 587, WIDTH_ = 588, WIN32_ = 589, XML_ = 590, XY_ = 591, YES_ = 592, ZMAX_ = 593, ZSCALE_ = 594, ZOOM_ = 595 }; #endif /* Tokens. */ #define REAL 258 #define INT 259 #define STRING 260 #define POINTER 261 #define ANGDEGREE 262 #define ANGRADIAN 263 #define SEXSTR 264 #define HMSSTR 265 #define DMSSTR 266 #define ABOUT_ 267 #define AIP_ 268 #define ALLOC_ 269 #define ALLOCGZ_ 270 #define ALIGN_ 271 #define ALL_ 272 #define ALT_ 273 #define AMPLIFIER_ 274 #define ANALYSIS_ 275 #define ANGLE_ 276 #define ANNULUS_ 277 #define APPEND_ 278 #define ARCMIN_ 279 #define ARCSEC_ 280 #define ARRAY_ 281 #define ARROW_ 282 #define ASINH_ 283 #define AST_ 284 #define AUTO_ 285 #define AUX_ 286 #define AVERAGE_ 287 #define AXES_ 288 #define AZIMUTH_ 289 #define B1950_ 290 #define BACK_ 291 #define BACKGROUND_ 292 #define BASE_ 293 #define BBOX_ 294 #define BEGIN_ 295 #define BG_ 296 #define BIG_ 297 #define BIGENDIAN_ 298 #define BIN_ 299 #define BITPIX_ 300 #define BLOCK_ 301 #define BORDER_ 302 #define BOX_ 303 #define BOXANNULUS_ 304 #define BOXCAR_ 305 #define BOXCIRCLE_ 306 #define BPANDA_ 307 #define BUFFER_ 308 #define BW_ 309 #define CALLBACK_ 310 #define CANVAS_ 311 #define CATALOG_ 312 #define CELESTRIAL_ 313 #define CENTER_ 314 #define CENTROID_ 315 #define CHANNEL_ 316 #define CIRCLE_ 317 #define CIAO_ 318 #define CLEAR_ 319 #define CLIP_ 320 #define COLOR_ 321 #define COLORBAR_ 322 #define COLORMAP_ 323 #define COLORSCALE_ 324 #define COLORSPACE_ 325 #define COLS_ 326 #define COLUMN_ 327 #define COMMAND_ 328 #define COMPASS_ 329 #define COMPOSITE_ 330 #define COMPRESS_ 331 #define CONTOUR_ 332 #define CONTRAST_ 333 #define COORDINATES_ 334 #define COPY_ 335 #define COUNT_ 336 #define CPANDA_ 337 #define CREATE_ 338 #define CROP_ 339 #define CROSS_ 340 #define CROSSHAIR_ 341 #define CUBE_ 342 #define CURSOR_ 343 #define CUT_ 344 #define CMYK_ 345 #define DASH_ 346 #define DASHLIST_ 347 #define DATA_ 348 #define DATAMIN_ 349 #define DATASEC_ 350 #define DEBUG_ 351 #define DEGREES_ 352 #define DEFAULT_ 353 #define DELETE_ 354 #define DEPTH_ 355 #define DETECTOR_ 356 #define DIAMOND_ 357 #define DIM_ 358 #define DS9_ 359 #define EDIT_ 360 #define ECLIPTIC_ 361 #define ELEVATION_ 362 #define ELLIPSE_ 363 #define ELLIPSEANNULUS_ 364 #define END_ 365 #define ENVI_ 366 #define EPANDA_ 367 #define EPSILON_ 368 #define EQUATORIAL_ 369 #define ERASE_ 370 #define EXT_ 371 #define FACTOR_ 372 #define FALSE_ 373 #define FILE_ 374 #define FILTER_ 375 #define FIT_ 376 #define FITS_ 377 #define FITSY_ 378 #define FIXED_ 379 #define FK4_ 380 #define FK4_NO_E_ 381 #define FK5_ 382 #define FONT_ 383 #define FRONT_ 384 #define FULL_ 385 #define FUNCTION_ 386 #define GALACTIC_ 387 #define GAUSSIAN_ 388 #define GET_ 389 #define GLOBAL_ 390 #define GRAPHICS_ 391 #define GRAY_ 392 #define GRID_ 393 #define GZ_ 394 #define HANDLE_ 395 #define HAS_ 396 #define HEAD_ 397 #define HEADER_ 398 #define HEIGHT_ 399 #define HELIOECLIPTIC_ 400 #define HIDE_ 401 #define HIGHLITE_ 402 #define HISTEQU_ 403 #define HISTOGRAM_ 404 #define HORIZONTAL_ 405 #define ICRS_ 406 #define ID_ 407 #define IIS_ 408 #define IMAGE_ 409 #define INCLUDE_ 410 #define INCR_ 411 #define INFO_ 412 #define INTEGER_ 413 #define ITERATION_ 414 #define IRAF_ 415 #define IRAFMIN_ 416 #define J2000_ 417 #define KEY_ 418 #define KEYWORD_ 419 #define LABEL_ 420 #define LENGTH_ 421 #define LEVEL_ 422 #define LITTLE_ 423 #define LITTLEENDIAN_ 424 #define LINE_ 425 #define LINEAR_ 426 #define LIST_ 427 #define LOAD_ 428 #define LOCAL_ 429 #define LOG_ 430 #define MACOSX_ 431 #define MAGNIFIER_ 432 #define MATCH_ 433 #define MAP_ 434 #define MARK_ 435 #define MARKER_ 436 #define MASK_ 437 #define MESSAGE_ 438 #define METHOD_ 439 #define MINMAX_ 440 #define MIP_ 441 #define MMAP_ 442 #define MMAPINCR_ 443 #define MOSAIC_ 444 #define MODE_ 445 #define MOTION_ 446 #define MOVE_ 447 #define NAME_ 448 #define NAN_ 449 #define NATIVE_ 450 #define NAXES_ 451 #define NEW_ 452 #define NEXT_ 453 #define NO_ 454 #define NONE_ 455 #define NOW_ 456 #define NRRD_ 457 #define NUMBER_ 458 #define OBJECT_ 459 #define OFF_ 460 #define ON_ 461 #define ONLY_ 462 #define OPTION_ 463 #define ORIENT_ 464 #define PAN_ 465 #define PANNER_ 466 #define PARSER_ 467 #define PASTE_ 468 #define PERF_ 469 #define PHOTO_ 470 #define PHYSICAL_ 471 #define PIXEL_ 472 #define PLOT2D_ 473 #define PLOT3D_ 474 #define POINT_ 475 #define POINTER_ 476 #define POLYGON_ 477 #define POSTSCRIPT_ 478 #define POW_ 479 #define PRINT_ 480 #define PRESERVE_ 481 #define PROJECTION_ 482 #define PROPERTY_ 483 #define PUBLICATION_ 484 #define PROS_ 485 #define QUERY_ 486 #define RADIAL_ 487 #define RADIUS_ 488 #define REGION_ 489 #define REPLACE_ 490 #define RESAMPLE_ 491 #define RESET_ 492 #define RESOLUTION_ 493 #define RGB_ 494 #define ROOT_ 495 #define ROTATE_ 496 #define RULER_ 497 #define SAMPLE_ 498 #define SAOIMAGE_ 499 #define SAOTNG_ 500 #define SAVE_ 501 #define SCALE_ 502 #define SCAN_ 503 #define SCIENTIFIC_ 504 #define SCOPE_ 505 #define SEGMENT_ 506 #define SELECT_ 507 #define SET_ 508 #define SEXAGESIMAL_ 509 #define SHAPE_ 510 #define SHARED_ 511 #define SHIFT_ 512 #define SHMID_ 513 #define SHOW_ 514 #define SINH_ 515 #define SIZE_ 516 #define SLICE_ 517 #define SMMAP_ 518 #define SMOOTH_ 519 #define SOCKET_ 520 #define SOCKETGZ_ 521 #define SOURCE_ 522 #define SQRT_ 523 #define SQUARED_ 524 #define SSHARED_ 525 #define STATS_ 526 #define STATUS_ 527 #define SUPERGALACTIC_ 528 #define SUM_ 529 #define SYSTEM_ 530 #define TABLE_ 531 #define TAG_ 532 #define TEMPLATE_ 533 #define TEXT_ 534 #define THREADS_ 535 #define THREED_ 536 #define THRESHOLD_ 537 #define THICK_ 538 #define TRANSPARENCY_ 539 #define TO_ 540 #define TOGGLE_ 541 #define TOPHAT_ 542 #define TRUE_ 543 #define TYPE_ 544 #define UNDO_ 545 #define UNHIGHLITE_ 546 #define UNLOAD_ 547 #define UNSELECT_ 548 #define UPDATE_ 549 #define USER_ 550 #define VALUE_ 551 #define VAR_ 552 #define VIEW_ 553 #define VECTOR_ 554 #define VERSION_ 555 #define VERTEX_ 556 #define VERTICAL_ 557 #define WARP_ 558 #define WCS_ 559 #define WCSA_ 560 #define WCSB_ 561 #define WCSC_ 562 #define WCSD_ 563 #define WCSE_ 564 #define WCSF_ 565 #define WCSG_ 566 #define WCSH_ 567 #define WCSI_ 568 #define WCSJ_ 569 #define WCSK_ 570 #define WCSL_ 571 #define WCSM_ 572 #define WCSN_ 573 #define WCSO_ 574 #define WCSP_ 575 #define WCSQ_ 576 #define WCSR_ 577 #define WCSS_ 578 #define WCST_ 579 #define WCSU_ 580 #define WCSV_ 581 #define WCSW_ 582 #define WCSX_ 583 #define WCSY_ 584 #define WCSZ_ 585 #define WCS0_ 586 #define WFPC2_ 587 #define WIDTH_ 588 #define WIN32_ 589 #define XML_ 590 #define XY_ 591 #define YES_ 592 #define ZMAX_ 593 #define ZSCALE_ 594 #define ZOOM_ 595 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 51 "frame/parser.Y" { #define FRBUFSIZE 4096 char chr; char str[FRBUFSIZE]; void* ptr; int integer; double real; double vector[3]; int dash[2]; } /* Line 1529 of yacc.c. */ #line 740 "frame/parser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/frame/parser.Y000644 000765 000000 00000271373 12775514042 016251 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {Base* fr} %lex-param {frFlexLexer* ll} %parse-param {frFlexLexer* ll} %{ #define YYDEBUG 1 #include #include #include #include "base.h" #include "frame3d.h" #include "fitsimage.h" #include "marker.h" #undef yyFlexLexer #define yyFlexLexer frFlexLexer #include extern int frlex(void*, frFlexLexer*); extern void frerror(Base*, frFlexLexer*, const char*); static Coord::CoordSystem currentCoord = Coord::IMAGE; static Coord::SkyFrame currentSky = Coord::FK5; static unsigned short defaultProps = Marker::SELECT | Marker::HIGHLITE | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::INCLUDE | Marker::SOURCE; static unsigned short currentProps; static char currentColor[16]; static int currentWidth; static int currentDash[2]; static char currentFont[32]; static char currentText[80]; static List taglist; static List cblist; static unsigned short propQMask; static unsigned short propQValue; static void setProps(unsigned short* props, unsigned short prop, int value); %} %union { #define FRBUFSIZE 4096 char chr; char str[FRBUFSIZE]; void* ptr; int integer; double real; double vector[3]; int dash[2]; } %type numeric %type yesno %type angle %type optangle %type sexagesimal %type hms %type dms %type coord %type coordSystem %type wcsSystem %type internalSystem %type skyFrame %type skyFormat %type skyDist %type markerProperty %type markerCallBack %type markerFormat %type markerLayer %type markerDash %type pscolorspace %type scaleType %type minmaxMode %type contourClipMode %type shmType %type contourMethod %type layerType %type gridType %type fileNameType %type smoothFunction %type pointShape %type pointSize %type endian %type renderMethod %type renderBackground %type analysisMethod %type analysisParam %token REAL %token INT %token STRING %token POINTER %token ANGDEGREE %token ANGRADIAN %token SEXSTR %token HMSSTR %token DMSSTR %token ABOUT_ %token AIP_ %token ALLOC_ %token ALLOCGZ_ %token ALIGN_ %token ALL_ %token ALT_ %token AMPLIFIER_ %token ANALYSIS_ %token ANGLE_ %token ANNULUS_ %token APPEND_ %token ARCMIN_ %token ARCSEC_ %token ARRAY_ %token ARROW_ %token ASINH_ %token AST_ %token AUTO_ %token AUX_ %token AVERAGE_ %token AXES_ %token AZIMUTH_ %token B1950_ %token BACK_ %token BACKGROUND_ %token BASE_ %token BBOX_ %token BEGIN_ %token BG_ %token BIG_ %token BIGENDIAN_ %token BIN_ %token BITPIX_ %token BLOCK_ %token BORDER_ %token BOX_ %token BOXANNULUS_ %token BOXCAR_ %token BOXCIRCLE_ %token BPANDA_ %token BUFFER_ %token BW_ %token CALLBACK_ %token CANVAS_ %token CATALOG_ %token CELESTRIAL_ %token CENTER_ %token CENTROID_ %token CHANNEL_ %token CIRCLE_ %token CIAO_ %token CLEAR_ %token CLIP_ %token COLOR_ %token COLORBAR_ %token COLORMAP_ %token COLORSCALE_ %token COLORSPACE_ %token COLS_ %token COLUMN_ %token COMMAND_ %token COMPASS_ %token COMPOSITE_ %token COMPRESS_ %token CONTOUR_ %token CONTRAST_ %token COORDINATES_ %token COPY_ %token COUNT_ %token CPANDA_ %token CREATE_ %token CROP_ %token CROSS_ %token CROSSHAIR_ %token CUBE_ %token CURSOR_ %token CUT_ %token CMYK_ %token DASH_ %token DASHLIST_ %token DATA_ %token DATAMIN_ %token DATASEC_ %token DEBUG_ %token DEGREES_ %token DEFAULT_ %token DELETE_ %token DEPTH_ %token DETECTOR_ %token DIAMOND_ %token DIM_ %token DS9_ %token EDIT_ %token ECLIPTIC_ %token ELEVATION_ %token ELLIPSE_ %token ELLIPSEANNULUS_ %token END_ %token ENVI_ %token EPANDA_ %token EPSILON_ %token EQUATORIAL_ %token ERASE_ %token EXT_ %token FACTOR_ %token FALSE_ %token FILE_ %token FILTER_ %token FIT_ %token FITS_ %token FITSY_ %token FIXED_ %token FK4_ %token FK4_NO_E_ %token FK5_ %token FONT_ %token FRONT_ %token FULL_ %token FUNCTION_ %token GALACTIC_ %token GAUSSIAN_ %token GET_ %token GLOBAL_ %token GRAPHICS_ %token GRAY_ %token GRID_ %token GZ_ %token HANDLE_ %token HAS_ %token HEAD_ %token HEADER_ %token HEIGHT_ %token HELIOECLIPTIC_ %token HIDE_ %token HIGHLITE_ %token HISTEQU_ %token HISTOGRAM_ %token HORIZONTAL_ %token ICRS_ %token ID_ %token IIS_ %token IMAGE_ %token INCLUDE_ %token INCR_ %token INFO_ %token INTEGER_ %token ITERATION_ %token IRAF_ %token IRAFMIN_ %token J2000_ %token KEY_ %token KEYWORD_ %token LABEL_ %token LENGTH_ %token LEVEL_ %token LITTLE_ %token LITTLEENDIAN_ %token LINE_ %token LINEAR_ %token LIST_ %token LOAD_ %token LOCAL_ %token LOG_ %token MACOSX_ %token MAGNIFIER_ %token MATCH_ %token MAP_ %token MARK_ %token MARKER_ %token MASK_ %token MESSAGE_ %token METHOD_ %token MINMAX_ %token MIP_ %token MMAP_ %token MMAPINCR_ %token MOSAIC_ %token MODE_ %token MOTION_ %token MOVE_ %token NAME_ %token NAN_ %token NATIVE_ %token NAXES_ %token NEW_ %token NEXT_ %token NO_ %token NONE_ %token NOW_ %token NRRD_ %token NUMBER_ %token OBJECT_ %token OFF_ %token ON_ %token ONLY_ %token OPTION_ %token ORIENT_ %token PAN_ %token PANNER_ %token PARSER_ %token PASTE_ %token PERF_ %token PHOTO_ %token PHYSICAL_ %token PIXEL_ %token PLOT2D_ %token PLOT3D_ %token POINT_ %token POINTER_ %token POLYGON_ %token POSTSCRIPT_ %token POW_ %token PRINT_ %token PRESERVE_ %token PROJECTION_ %token PROPERTY_ %token PUBLICATION_ %token PROS_ %token QUERY_ %token RADIAL_ %token RADIUS_ %token REGION_ %token REPLACE_ %token RESAMPLE_ %token RESET_ %token RESOLUTION_ %token RGB_ %token ROOT_ %token ROTATE_ %token RULER_ %token SAMPLE_ %token SAOIMAGE_ %token SAOTNG_ %token SAVE_ %token SCALE_ %token SCAN_ %token SCIENTIFIC_ %token SCOPE_ %token SEGMENT_ %token SELECT_ %token SET_ %token SEXAGESIMAL_ %token SHAPE_ %token SHARED_ %token SHIFT_ %token SHMID_ %token SHOW_ %token SINH_ %token SIZE_ %token SLICE_ %token SMMAP_ %token SMOOTH_ %token SOCKET_ %token SOCKETGZ_ %token SOURCE_ %token SQRT_ %token SQUARED_ %token SSHARED_ %token STATS_ %token STATUS_ %token SUPERGALACTIC_ %token SUM_ %token SYSTEM_ %token TABLE_ %token TAG_ %token TEMPLATE_ %token TEXT_ %token THREADS_ %token THREED_ %token THRESHOLD_ %token THICK_ %token TRANSPARENCY_ %token TO_ %token TOGGLE_ %token TOPHAT_ %token TRUE_ %token TYPE_ %token UNDO_ %token UNHIGHLITE_ %token UNLOAD_ %token UNSELECT_ %token UPDATE_ %token USER_ %token VALUE_ %token VAR_ %token VIEW_ %token VECTOR_ %token VERSION_ %token VERTEX_ %token VERTICAL_ %token WARP_ %token WCS_ %token WCSA_ %token WCSB_ %token WCSC_ %token WCSD_ %token WCSE_ %token WCSF_ %token WCSG_ %token WCSH_ %token WCSI_ %token WCSJ_ %token WCSK_ %token WCSL_ %token WCSM_ %token WCSN_ %token WCSO_ %token WCSP_ %token WCSQ_ %token WCSR_ %token WCSS_ %token WCST_ %token WCSU_ %token WCSV_ %token WCSW_ %token WCSX_ %token WCSY_ %token WCSZ_ %token WCS0_ %token WFPC2_ %token WIDTH_ %token WIN32_ %token XML_ %token XY_ %token YES_ %token ZMAX_ %token ZSCALE_ %token ZOOM_ %% command : DEBUG_ debug | ANALYSIS_ analysis | BIN_ bin | BG_ COLOR_ STRING {fr->bgColorCmd($3);} | BLOCK_ block | CENTER_ {fr->centerCmd();} | CLEAR_ {fr->clearCmd();} | CLIP_ clip | COLORBAR_ TAG_ STRING {fr->colorbarTagCmd($3);} | COLORMAP_ colormap | COLORSCALE_ colorscale | CONTOUR_ contour | CROP_ crop | CROSSHAIR_ crosshair | CUBE_ cube | DATASEC_ yesno {fr->DATASECCmd($2);} | FITSY_ fitsy | GET_ get | GRID_ grid | HAS_ has | HIDE_ {fr->hideCmd();} | HIGHLITE_ yesno {fr->highliteCmd($2);} | IIS_ iis | IRAF_ ALIGN_ INT {fr->irafAlignCmd($3);} | LOAD_ load | MACOSX_ macosx | MAGNIFIER_ magnifier | MATCH_ match | MARKER_ markerLayer marker | MASK_ mask | NAN_ COLOR_ STRING {fr->nanColorCmd($3);} | ORIENT_ orient | PAN_ pan | PANNER_ panner | QUERY_ CURSOR_ {fr->queryCursorCmd();} | POSTSCRIPT_ postscript | RESET_ {fr->resetCmd();} | REGION_ markerLayer region | RGB_ rgb | ROTATE_ rotate | SAVE_ save | SHOW_ {fr->showCmd();} | SMOOTH_ smooth | THREADS_ INT {fr->threadsCmd($2);} | THREED_ threed | UNLOAD_ {fr->unloadFitsCmd();} | UPDATE_ update | VERSION_ {fr->msg("Frame 1.0");} | WARP_ warp | WCS_ wcs | WIN32_ win32 | ZOOM_ zoom ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} | AST_ yesno {DebugAST=$2;} | MOSAIC_ yesno {DebugMosaic=$2;} | PARSER_ yesno {yydebug=$2;} | PERF_ yesno {DebugPerf=$2;} | WCS_ yesno {DebugWCS=$2;} | BIN_ yesno {DebugBin=$2;} | BLOCK_ yesno {DebugBlock=$2;} | COMPRESS_ yesno {DebugCompress=$2;} | CROP_ yesno {DebugCrop=$2;} | GZ_ yesno {DebugGZ=$2;} | RGB_ yesno {DebugRGB=$2;} ; yesno : INT {$$=($1 ? 1 : 0);} | YES_ {$$=1;} | 'Y' {$$=1;} | ON_ {$$=1;} | TRUE_ {$$=1;} | NO_ {$$=0;} | 'N' {$$=0;} | OFF_ {$$=0;} | FALSE_ {$$=0;} ; fileNameType : /* empty */ {$$ = Base::ROOTBASE;} | ROOT_ BASE_ {$$ = Base::ROOTBASE;} | FULL_ BASE_ {$$ = Base::FULLBASE;} | ROOT_ {$$ = Base::ROOT;} | FULL_ {$$ = Base::FULL;} ; optangle : /* empty */ {$$ = 0;} | angle {$$ = $1;} ; angle : numeric {$$ = degToRad($1);} /* assume degree */ | ANGDEGREE {$$ = degToRad($1);} | ANGRADIAN {$$=$1;} ; sexagesimal: SEXSTR {$$ = parseSEXStr($1);} ; hms : HMSSTR {$$ = parseHMSStr($1);} ; dms : DMSSTR {$$ = parseDMSStr($1);} ; coord : sexagesimal sexagesimal { Vector r; if (currentSky == Coord::GALACTIC || currentSky == Coord::ECLIPTIC) r = Vector($1,$2); else r = Vector($1*360./24.,$2); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | hms dms { Vector r = Vector($1,$2); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | dms dms { Vector r = Vector($1,$2); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | numeric numeric { $$[0] = $1; $$[1] = $2; $$[2] = 1; } ; coordSystem :IMAGE_ {$$ = currentCoord = Coord::IMAGE;} | PHYSICAL_ {$$ = currentCoord = Coord::PHYSICAL;} | DETECTOR_ {$$ = currentCoord = Coord::DETECTOR;} | AMPLIFIER_ {$$ = currentCoord = Coord::AMPLIFIER;} | wcsSystem {$$ = (Coord::CoordSystem)$1;} ; wcsSystem : WCS_ {$$ = currentCoord = Coord::WCS;} | WCSA_ {$$ = currentCoord = Coord::WCSA;} | WCSB_ {$$ = currentCoord = Coord::WCSB;} | WCSC_ {$$ = currentCoord = Coord::WCSC;} | WCSD_ {$$ = currentCoord = Coord::WCSD;} | WCSE_ {$$ = currentCoord = Coord::WCSE;} | WCSF_ {$$ = currentCoord = Coord::WCSF;} | WCSG_ {$$ = currentCoord = Coord::WCSG;} | WCSH_ {$$ = currentCoord = Coord::WCSH;} | WCSI_ {$$ = currentCoord = Coord::WCSI;} | WCSJ_ {$$ = currentCoord = Coord::WCSJ;} | WCSK_ {$$ = currentCoord = Coord::WCSK;} | WCSL_ {$$ = currentCoord = Coord::WCSL;} | WCSM_ {$$ = currentCoord = Coord::WCSM;} | WCSN_ {$$ = currentCoord = Coord::WCSN;} | WCSO_ {$$ = currentCoord = Coord::WCSO;} | WCSP_ {$$ = currentCoord = Coord::WCSP;} | WCSQ_ {$$ = currentCoord = Coord::WCSQ;} | WCSR_ {$$ = currentCoord = Coord::WCSR;} | WCSS_ {$$ = currentCoord = Coord::WCSS;} | WCST_ {$$ = currentCoord = Coord::WCST;} | WCSU_ {$$ = currentCoord = Coord::WCSU;} | WCSV_ {$$ = currentCoord = Coord::WCSV;} | WCSW_ {$$ = currentCoord = Coord::WCSW;} | WCSX_ {$$ = currentCoord = Coord::WCSX;} | WCSY_ {$$ = currentCoord = Coord::WCSY;} | WCSZ_ {$$ = currentCoord = Coord::WCSZ;} | WCS0_ {$$ = currentCoord = Coord::WCS0;} ; internalSystem : CANVAS_ {$$ = Coord::CANVAS;} | PANNER_ {$$ = Coord::PANNER;} ; scaleType: LINEAR_ {$$ = FrScale::LINEARSCALE;} | LOG_ {$$ = FrScale::LOGSCALE;} | POW_ {$$ = FrScale::POWSCALE;} | SQRT_ {$$ = FrScale::SQRTSCALE;} | SQUARED_ {$$ = FrScale::SQUAREDSCALE;} | ASINH_ {$$ = FrScale::ASINHSCALE;} | SINH_ {$$ = FrScale::SINHSCALE;} | HISTEQU_ {$$ = FrScale::HISTEQUSCALE;} ; minmaxMode : AUTO_ {$$=FrScale::SCAN;} | SCAN_ {$$=FrScale::SCAN;} | SAMPLE_ {$$=FrScale::SAMPLE;} | DATAMIN_ {$$=FrScale::DATAMIN;} | IRAFMIN_ {$$=FrScale::IRAFMIN;} ; skyFrame : /* empty */ {$$ = currentSky = Coord::FK5;} | FK4_ {$$ = currentSky = Coord::FK4;} | FK4_NO_E_ {$$ = currentSky = Coord::FK4_NO_E;} | B1950_ {$$ = currentSky = Coord::FK4;} | FK5_ {$$ = currentSky = Coord::FK5;} | J2000_ {$$ = currentSky = Coord::FK5;} | ICRS_ {$$ = currentSky = Coord::ICRS;} | GALACTIC_ {$$ = currentSky = Coord::GALACTIC;} | SUPERGALACTIC_ {$$ = currentSky = Coord::SUPERGALACTIC;} | ECLIPTIC_ {$$ = currentSky = Coord::ECLIPTIC;} | HELIOECLIPTIC_ {$$ = currentSky = Coord::HELIOECLIPTIC;} ; skyFormat : /* empty */ {$$=Coord::DEGREES;} | DEGREES_ {$$=Coord::DEGREES;} | SEXAGESIMAL_ {$$=Coord::SEXAGESIMAL;} ; skyDist : /* empty */ {$$=Coord::DEGREE;} | DEGREES_ {$$=Coord::DEGREE;} | ARCMIN_ {$$=Coord::ARCMIN;} | ARCSEC_ {$$=Coord::ARCSEC;} ; contourClipMode: numeric {$$ = $1;} | MINMAX_ {$$ = FrScale::MINMAX;} | ZSCALE_ {$$ = FrScale::ZSCALE;} | ZMAX_ {$$ = FrScale::ZMAX;} | USER_ {$$ = FrScale::USERCLIP;} ; shmType : /* empty */ {$$ = Base::SHMID;} | SHMID_ {$$ = Base::SHMID;} | KEY_ {$$ = Base::KEY;} ; incrLoad: /*backward compatibility*/ {} | ALL_ {} | INCR_ {} ; layerType : /* empty */ {$$ = Base::IMG;} | IMAGE_ {$$ = Base::IMG;} | MASK_ {$$ = Base::MASK;} ; pointShape: /* empty */ {$$ = Point::CIRCLE;} | CIRCLE_ {$$ = Point::CIRCLE;} | BOX_ {$$ = Point::BOX;} | DIAMOND_ {$$ = Point::DIAMOND;} | CROSS_ {$$ = Point::CROSS;} | 'X' {$$ = Point::EX;} | ARROW_ {$$ = Point::ARROW;} | BOXCIRCLE_ {$$ = Point::BOXCIRCLE;} ; pointSize: /* empty */ {$$ = POINTSIZE;} | INT {$$ = $1;} ; analysisMethod: CPANDA_ {$$ = Marker::PANDA;} | HISTOGRAM_ {$$ = Marker::HISTOGRAM;} | PLOT2D_ {$$ = Marker::PLOT2D;} | PLOT3D_ {$$ = Marker::PLOT3D;} | RADIAL_ {$$ = Marker::RADIAL;} | STATS_ {$$ = Marker::STATS;} ; analysisParam : /* emtpy */ {$$ = Marker::AVERAGE;} | AVERAGE_ {$$ = Marker::AVERAGE;} | SUM_ {$$ = Marker::SUM;} ; endian : /* empty */ {$$ = FitsFile::NATIVE;} | NATIVE_ {$$ = FitsFile::NATIVE;} | BIG_ {$$ = FitsFile::BIG;} | BIGENDIAN_ {$$ = FitsFile::BIG;} | LITTLE_ {$$ = FitsFile::LITTLE;} | LITTLEENDIAN_ {$$ = FitsFile::LITTLE;} ; threed : VIEW_ threedView | BORDER_ threedBorder | COMPASS_ threedCompass | HIGHLITE_ threedHighlite | METHOD_ renderMethod {fr->set3dRenderMethodCmd($2);} | BACKGROUND_ renderBackground {fr->set3dRenderBackgroundCmd($2);} | SCALE_ numeric {fr->set3dScaleCmd($2);} | PRESERVE_ {fr->set3dPreserveCmd();} | THRESHOLD_ numeric {/* needed for compatibility with old version of backup */} ; threedBorder : yesno {fr->set3dBorderCmd($1);} | COLOR_ STRING {fr->set3dBorderColorCmd($2);} ; threedCompass : yesno {fr->set3dCompassCmd($1);} | COLOR_ STRING {fr->set3dCompassColorCmd($2);} ; threedHighlite : yesno {fr->set3dHighliteCmd($1);} | COLOR_ STRING {fr->set3dHighliteColorCmd($2);} ; threedView : numeric numeric {fr->set3dViewCmd($1,$2);} | POINT_ numeric numeric numeric numeric numeric {fr->set3dViewPointCmd(Vector3d($2,$3,$4),Vector($5,$6));} | BEGIN_ numeric numeric {fr->view3dBeginCmd($2,$3);} | MOTION_ numeric numeric {fr->view3dMotionCmd($2,$3);} | END_ numeric numeric {fr->view3dEndCmd($2,$3);} ; analysis : RESET_ {fr->analysisMarkersResetCmd();} | SHAPE_ analysisShape ; analysisShape : CIRCLE_ numeric numeric {fr->analysisMarkersSelectCmd("circle", fr->mapToRef(Vector($2,$3), Coord::CANVAS));} | ELLIPSE_ numeric numeric {fr->analysisMarkersSelectCmd("ellipse", fr->mapToRef(Vector($2,$3), Coord::CANVAS));} | BOX_ numeric numeric {fr->analysisMarkersSelectCmd("box", fr->mapToRef(Vector($2,$3), Coord::CANVAS));} | POLYGON_ numeric numeric {fr->analysisMarkersSelectCmd("polygon", fr->mapToRef(Vector($2,$3), Coord::CANVAS));} | POINT_ numeric numeric {fr->analysisMarkersSelectCmd("point", fr->mapToRef(Vector($2,$3), Coord::CANVAS));} | VECTOR_ numeric numeric {fr->analysisMarkersSelectCmd("vector", fr->mapToRef(Vector($2,$3), Coord::CANVAS));} | ANNULUS_ numeric numeric {fr->analysisMarkersSelectCmd("annulus", fr->mapToRef(Vector($2,$3), Coord::CANVAS));} | ELLIPSEANNULUS_ numeric numeric {fr->analysisMarkersSelectCmd("ellipseannulus", fr->mapToRef(Vector($2,$3), Coord::CANVAS));} | BOXANNULUS_ numeric numeric {fr->analysisMarkersSelectCmd("boxannulus", fr->mapToRef(Vector($2,$3), Coord::CANVAS));} ; bin : ABOUT_ binAbout | COLS_ STRING STRING STRING {fr->binColsCmd($2,$3,$4);} | DEPTH_ INT {fr->binDepthCmd($2);} | FACTOR_ binFactor | FUNCTION_ binFunction | BUFFER_ SIZE_ INT {fr->binBufferSizeCmd($3);} | TO_ binTo | FILTER_ STRING {fr->binFilterCmd($2);} ; binAbout : CENTER_ {fr->binAboutCmd();} | numeric numeric {fr->binAboutCmd(Vector($1,$2));} ; binFactor : numeric {fr->binFactorCmd(Vector($1,$1));} | numeric numeric {fr->binFactorCmd(Vector($1,$2));} | numeric ABOUT_ numeric numeric {fr->binFactorAboutCmd(Vector($1,$1), Vector($3,$4));} | numeric numeric ABOUT_ numeric numeric {fr->binFactorAboutCmd(Vector($1,$2), Vector($4,$5));} | TO_ numeric {fr->binFactorToCmd(Vector($2,$2));} | TO_ numeric numeric {fr->binFactorToCmd(Vector($2,$3));} | TO_ numeric ABOUT_ numeric numeric {fr->binFactorToAboutCmd(Vector($2,$2), Vector($4,$5));} | TO_ numeric numeric ABOUT_ numeric numeric {fr->binFactorToAboutCmd(Vector($2,$3), Vector($5,$6));} ; binFunction : AVERAGE_ {fr->binFunctionCmd(FitsHist::AVERAGE);} | SUM_ {fr->binFunctionCmd(FitsHist::SUM);} ; binTo : FIT_ {fr->binToFitCmd();} | numeric numeric ABOUT_ CENTER_ STRING STRING STRING {fr->binCmd(Vector($1,$2), $5, $6, $7);} | numeric numeric INT numeric numeric ABOUT_ CENTER_ STRING STRING STRING STRING {fr->binCmd(Vector($1,$2), $3, Vector($4,$5), $8, $9, $10, $11);} | numeric numeric ABOUT_ numeric numeric STRING STRING STRING {fr->binCmd(Vector($1,$2), Vector($4,$5), $6, $7, $8);} | numeric numeric INT numeric numeric ABOUT_ numeric numeric STRING STRING STRING STRING {fr->binCmd(Vector($1,$2), $3, Vector($4,$5), Vector($7,$8), $9, $10, $11, $12);} ; block : numeric {fr->blockCmd(Vector($1,$1));} | numeric numeric {fr->blockCmd(Vector($1,$2));} | TO_ blockTo ; blockTo : FIT_ {fr->blockToFitCmd();} | numeric {fr->blockToCmd(Vector($1,$1));} | numeric numeric {fr->blockToCmd(Vector($1,$2));} ; clip : SCOPE_ clipScope | MODE_ clipMode | MINMAX_ clipMinMax | USER_ numeric numeric {fr->clipUserCmd($2,$3);} | ZSCALE_ clipZScale | PRESERVE_ yesno { // backward compatibility with backup } ; clipScope: GLOBAL_ {fr->clipScopeCmd(FrScale::GLOBAL);} | LOCAL_ {fr->clipScopeCmd(FrScale::LOCAL);} ; clipMode: numeric {fr->clipModeCmd($1);} | MINMAX_ {fr->clipModeCmd(FrScale::MINMAX);} | ZSCALE_ {fr->clipModeCmd(FrScale::ZSCALE);} | ZMAX_ {fr->clipModeCmd(FrScale::ZMAX);} | USER_ {fr->clipModeCmd(FrScale::USERCLIP);} ; clipMinMax : INT minmaxMode {fr->clipMinMaxCmd((FrScale::MinMaxMode)$2,$1);} | MODE_ minmaxMode {fr->clipMinMaxModeCmd((FrScale::MinMaxMode)$2);} | SAMPLE_ INT {fr->clipMinMaxSampleCmd($2);} ; clipZScale: numeric INT INT {fr->clipZScaleCmd($1,$2,$3);} | CONTRAST_ numeric { // backward compatibility with backup fr->clipZScaleContrastCmd($2); } | SAMPLE_ INT { // backward compatibility with backup fr->clipZScaleSampleCmd($2); } | LINE_ INT { // backward compatibility with backup fr->clipZScaleLineCmd($2); } ; colormap : INT numeric numeric INT POINTER INT {fr->colormapCmd($1, $2, $3, $4, (unsigned char*)$5, $6);} | RGB_ numeric numeric numeric numeric numeric numeric INT POINTER INT {fr->colormapCmd($2,$3,$4,$5,$6,$7,$8,(unsigned char*)$9,$10);} | BEGIN_ {fr->colormapBeginCmd();} | MOTION_ colormapMotion | END_ {fr->colormapEndCmd();} ; colormapMotion: INT numeric numeric INT POINTER INT {fr->colormapMotionCmd($1, $2, $3, $4, (unsigned char*)$5, $6);} | RGB_ numeric numeric numeric numeric numeric numeric INT POINTER INT {fr->colormapMotionCmd($2,$3,$4,$5,$6,$7,$8,(unsigned char*)$9,$10);} colorscale : scaleType {fr->colorScaleCmd((FrScale::ColorScaleType)$1);} | LOG_ numeric {fr->colorScaleLogCmd($2);} ; contour : CREATE_ contourCreate | DELETE_ contourDelete | LOAD_ contourLoad | PASTE_ contourPaste | SAVE_ contourSave ; contourCreate : STRING INT INT contourMethod INT INT scaleType numeric contourClipMode numeric numeric STRING {fr->contourCreateCmd($1,$2,$3,(FVContour::Method)$4,$5,$6,(FrScale::ColorScaleType)$7,$8,$9,Vector($10,$11),$12);} | POLYGON_ {fr->contourCreatePolygonCmd();} ; contourDelete : /*empty */ {fr->contourDeleteCmd();} | AUX_ {fr->contourDeleteAuxCmd();} ; contourLoad : STRING {fr->contourLoadCmd($1);} | STRING STRING INT yesno {fr->contourLoadCmd($1,$2,$3,$4);} | STRING INT yesno STRING coordSystem skyFrame { // backward compatibility with backup fr->contourLoadCmd($4,(Coord::CoordSystem)$5,(Coord::SkyFrame)$6,$1,$2,$3); } ; contourMethod : SMOOTH_ {$$ = FVContour::SMOOTH;} | BLOCK_ {$$ = FVContour::BLOCK;} ; contourPaste : STRING {fr->contourPasteCmd($1);} | STRING STRING INT yesno {fr->contourPasteCmd($1,$2,$3,$4);} ; contourSave : STRING coordSystem skyFrame {fr->contourSaveCmd($1, (Coord::CoordSystem)$2, (Coord::SkyFrame)$3);} | AUX_ STRING coordSystem skyFrame {fr->contourSaveAuxCmd($2,(Coord::CoordSystem)$3,(Coord::SkyFrame)$4);} ; crop : /* empty */ {fr->cropCmd();} | numeric numeric numeric numeric coordSystem skyFrame {fr->cropCmd(Vector($1,$2), Vector($3,$4), (Coord::CoordSystem)$5, (Coord::SkyFrame)$6);} | CENTER_ coord coordSystem skyFrame numeric numeric coordSystem skyDist {fr->cropCenterCmd(Vector($2), (Coord::CoordSystem)$3, (Coord::SkyFrame)$4, Vector($5,$6), (Coord::CoordSystem)$7, (Coord::SkyDist)$8);} | THREED_ crop3d | BEGIN_ numeric numeric {fr->cropBeginCmd(Vector($2,$3));} | MOTION_ numeric numeric {fr->cropMotionCmd(Vector($2,$3));} | END_ numeric numeric {fr->cropEndCmd(Vector($2,$3));} ; crop3d : /* empty */ {fr->crop3dCmd();} | numeric numeric coordSystem {fr->crop3dCmd($1, $2, (Coord::CoordSystem)$3);} | BEGIN_ numeric numeric INT {fr->crop3dBeginCmd(Vector($2,$3),$4);} | MOTION_ numeric numeric INT {fr->crop3dMotionCmd(Vector($2,$3),$4);} | END_ numeric numeric INT {fr->crop3dEndCmd(Vector($2,$3),$4);} ; crosshair: internalSystem numeric numeric {fr->crosshairCmd(Vector($2,$3), (Coord::InternalSystem)$1);} | coordSystem skyFrame coord {fr->crosshairCmd(Vector($3), (Coord::CoordSystem)$1, (Coord::SkyFrame)$2);} | yesno {fr->crosshairCmd($1);} | WARP_ numeric numeric {fr->crosshairWarpCmd(Vector($2,$3));} | BEGIN_ MOTION_ internalSystem numeric numeric {fr->crosshairCmd(Vector($4,$5), (Coord::InternalSystem)$3);} | MOTION_ internalSystem numeric numeric {fr->crosshairCmd(Vector($3,$4), (Coord::InternalSystem)$2);} | BEGIN_ MOTION_ coordSystem coord {fr->crosshairCmd(Vector($4), (Coord::CoordSystem)$3);} | MOTION_ coordSystem coord {fr->crosshairCmd(Vector($3), (Coord::CoordSystem)$2);} ; cube : AXES_ INT {fr->axesOrderCmd($2);} ; fitsy : HAS_ EXT_ STRING {fr->fitsyHasExtCmd($3);} ; get : BG_ COLOR_ {fr->getBgColorCmd();} | BIN_ getBin | BLOCK_ getBlock | CLIP_ getClip | COLORMAP_ getColorMap | COLORBAR_ getColorbar | COLORSCALE_ getColorScale | CONTOUR_ getContour | COORDINATES_ getCoord | CROP_ getCrop | CROSSHAIR_ getCrosshair | CURSOR_ getCursor | CUBE_ getCube | DATA_ getData | DATASEC_ {fr->getDATASECCmd();} | FITS_ getFits | GRID_ getGrid | HISTOGRAM_ STRING STRING INT {fr->getHistogramCmd($2,$3,$4);} | HORIZONTAL_ CUT_ STRING STRING numeric numeric internalSystem {fr->getHorzCutCmd($3,$4,Vector($5,$6),(Coord::InternalSystem)$7);} | IIS_ getiis | INFO_ getInfo | IRAF_ ALIGN_ {fr->getIRAFAlignCmd();} | MINMAX_ {fr->getMinMaxCmd();} | MARKER_ markerLayer markerGet | MASK_ getMask | NAN_ COLOR_ {fr->getNANColorCmd();} | ORIENT_ {fr->getOrientCmd();} | PAN_ getPan | PIXEL_ TABLE_ internalSystem numeric numeric INT INT STRING {fr->getPixelTableCmd(Vector($4,$5), (Coord::InternalSystem)$3, $6, $7, $8);} | RGB_ getRGB | ROTATE_ {fr->getRotateCmd();} | SMOOTH_ getSmooth | THREADS_ {fr->getThreadsCmd();} | THREED_ getThreed | TYPE_ {fr->getTypeCmd();} | VALUE_ internalSystem numeric numeric {fr->getValueCmd(Vector($3,$4),(Coord::InternalSystem)$2);} | VERTICAL_ CUT_ STRING STRING numeric numeric internalSystem {fr->getVertCutCmd($3,$4,Vector($5,$6),(Coord::InternalSystem)$7);} | WCS_ getWCS | ZOOM_ {fr->getZoomCmd();} ; getBin : DEPTH_ {fr->getBinDepthCmd();} | FACTOR_ {fr->getBinFactorCmd();} | FUNCTION_ {fr->getBinFunctionCmd();} | BUFFER_ SIZE_ {fr->getBinBufferSizeCmd();} | CURSOR_ {fr->getBinCursorCmd();} | FILTER_ {fr->getBinFilterCmd();} | COLS_ getBinCols | LIST_ {fr->getBinListCmd();} ; getBinCols : /* empty */ {fr->getBinColsCmd();} | MINMAX_ STRING {fr->getBinColsMinMaxCmd($2);} | DIM_ STRING {fr->getBinColsDimCmd($2);} ; getBlock : FACTOR_ {fr->getBlockCmd();} ; getClip : getClipLimits | SCOPE_ {fr->getClipScopeCmd();} | MODE_ {fr->getClipModeCmd();} | MINMAX_ getClipMinMax | USER_ LEVEL_ {fr->getClipUserCmd();} | ZSCALE_ getClipZScale | PRESERVE_ { // backward compatibility with backup fr->getClipPreserveCmd(); } ; getClipLimits: /* empty */ {fr->getClipCmd();} | numeric {fr->getClipCmd($1);} | MINMAX_ {fr->getClipCmd(FrScale::MINMAX);} | ZSCALE_ {fr->getClipCmd(FrScale::ZSCALE);} | ZMAX_ {fr->getClipCmd(FrScale::ZMAX);} | USER_ {fr->getClipCmd(FrScale::USERCLIP);} ; getClipMinMax : MODE_ {fr->getClipMinMaxModeCmd();} | SAMPLE_ {fr->getClipMinMaxSampleCmd();} ; getClipZScale: CONTRAST_ {fr->getClipZScaleContrastCmd();} | SAMPLE_ {fr->getClipZScaleSampleCmd();} | LINE_ {fr->getClipZScaleLineCmd();} ; getColorbar: /* empty */ {fr->getColorbarCmd();} | TAG_ {fr->getColorbarTagCmd();} ; getColorMap : LEVEL_ getColorMapLevel ; getColorMapLevel: INT {fr->getColorMapLevelCmd($1);} | INT internalSystem numeric numeric {fr->getColorMapLevelCmd($1,Vector($3,$4),(Coord::InternalSystem)$2);} | INT numeric numeric scaleType numeric {fr->getColorMapLevelCmd($1,$2,$3,(FrScale::ColorScaleType)$4,$5);} ; getColorScale : /* empty */ {fr->getColorScaleCmd();} | LEVEL_ getColorScaleLevel | LOG_ {fr->getColorScaleLogCmd();} ; getColorScaleLevel: INT numeric numeric scaleType numeric {fr->getColorScaleLevelCmd($1,$2,$3,(FrScale::ColorScaleType)$4,$5);} ; getContour: coordSystem skyFrame {fr->getContourCmd((Coord::CoordSystem)$1,(Coord::SkyFrame)$2);} | CLIP_ getContourClip | COLOR_ {fr->getContourColorNameCmd();} | DASH_ {fr->getContourDashCmd();} | LEVEL_ {fr->getContourLevelCmd();} | NUMBER_ LEVEL_ {fr->getContourNumLevelCmd();} | METHOD_ {fr->getContourMethodCmd();} | COLORSCALE_ getContourColorScale | SMOOTH_ {fr->getContourSmoothCmd();} | WIDTH_ {fr->getContourLineWidthCmd();} ; getContourClip : /* empty */ {fr->getContourClipCmd();} | MODE_ {fr->getContourClipModeCmd();} ; getContourColorScale : /* empty */ {fr->getContourScaleCmd();} | LOG_ {fr->getContourScaleLogCmd();} ; getCoord : numeric numeric coordSystem skyFrame skyFormat {fr->getCoordCmd(Vector($1,$2), (Coord::CoordSystem)$3, (Coord::SkyFrame)$4, (Coord::SkyFormat)$5);} | internalSystem numeric numeric coordSystem skyFrame skyFormat { // backward compatibility fr->getCoordCmd(Vector($2,$3), (Coord::CoordSystem)$4, (Coord::SkyFrame)$5, (Coord::SkyFormat)$6); } | numeric coordSystem coordSystem INT {fr->getCoord3axisCmd($1, (Coord::CoordSystem)$2, (Coord::CoordSystem)$3, $4);} ; getCrop : coordSystem skyFrame skyFormat {fr->getCropCmd((Coord::CoordSystem)$1, (Coord::SkyFrame)$2, (Coord::SkyFormat)$3);} | CENTER_ coordSystem skyFrame skyFormat coordSystem skyDist {fr->getCropCenterCmd((Coord::CoordSystem)$2, (Coord::SkyFrame)$3, (Coord::SkyFormat)$4, (Coord::CoordSystem)$5, (Coord::SkyDist)$6);} | THREED_ coordSystem {fr->getCrop3dCmd((Coord::CoordSystem)$2);} ; getCrosshair: internalSystem {fr->getCrosshairCmd((Coord::InternalSystem)$1);} | coordSystem skyFrame skyFormat {fr->getCrosshairCmd((Coord::CoordSystem)$1, (Coord::SkyFrame)$2, (Coord::SkyFormat)$3);} | STATUS_ {fr->getCrosshairStatusCmd();} ; getCube : AXES_ {fr->getAxesOrderCmd();} ; getCursor : internalSystem {fr->getCursorCmd((Coord::InternalSystem)$1);} | coordSystem skyFrame skyFormat {fr->getCursorCmd((Coord::CoordSystem)$1, (Coord::SkyFrame)$2, (Coord::SkyFormat)$3);} ; getData : coordSystem skyFrame coord numeric numeric STRING {fr->getDataValuesCmd(1, Vector($3), (Coord::CoordSystem)$1, (Coord::SkyFrame)$2, Vector($4,$5), $6);} | INT coordSystem skyFrame coord numeric numeric STRING {fr->getDataValuesCmd($1, Vector($4), (Coord::CoordSystem)$2, (Coord::SkyFrame)$3, Vector($5,$6), $7);} | internalSystem numeric numeric INT INT {fr->getDataValuesCmd(Vector($2,$3),(Coord::InternalSystem)$1, Vector($4,$5));} ; getInfo : STRING {fr->getInfoCmd($1);} | CLIP_ {fr->getInfoClipCmd();} | internalSystem numeric numeric STRING {fr->getInfoCmd(Vector($2,$3), (Coord::InternalSystem)$1, $4);} ; getiis : POINTER INT INT INT INT {fr->iisGetCmd((char*)$1,$2,$3,$4,$5);} | CURSOR_ {fr->iisGetCursorCmd();} | FILE_ NAME_ getIISFileName ; getIISFileName : /* empty */ {fr->iisGetFileNameCmd();} | INT {fr->iisGetFileNameCmd($1);} | numeric numeric {fr->iisGetFileNameCmd(Vector($1,$2));} ; getFits : NAXES_ /* empty */ {fr->getFitsNAxesCmd();} | CENTER_ coordSystem skyFrame skyFormat {fr->getFitsCenterCmd((Coord::CoordSystem)$2,(Coord::SkyFrame)$3,(Coord::SkyFormat)$4);} | COUNT_ {fr->getFitsCountCmd();} | DEPTH_ getFitsDepth | BITPIX_ {fr->getBitpixCmd();} | EXT_ getFitsExt | FILE_ NAME_ getFitsFileName | HEADER_ getFitsHeader | HEIGHT_ {fr->getFitsHeightCmd();} | OBJECT_ NAME_ {fr->getFitsObjectNameCmd();} | SIZE_ {fr->getFitsSizeCmd();} | SIZE_ coordSystem skyFrame skyDist {fr->getFitsSizeCmd((Coord::CoordSystem)$2,(Coord::SkyFrame)$3,(Coord::SkyDist)$4);} | SLICE_ getFitsSlice | WIDTH_ {fr->getFitsWidthCmd();} ; getFitsExt : INT {fr->getFitsExtCmd($1);} | internalSystem numeric numeric {fr->getFitsExtCmd(Vector($2,$3),(Coord::InternalSystem)$1);} getFitsHeader : INT {fr->getFitsHeaderCmd($1);} | KEYWORD_ STRING {fr->getFitsHeaderKeywordCmd(1,$2);} | INT KEYWORD_ STRING {fr->getFitsHeaderKeywordCmd($1,$3);} | WCS_ INT {fr->getFitsHeaderWCSCmd($2);} ; getFitsDepth : /* empty */ {fr->getFitsDepthCmd(2);} | INT {fr->getFitsDepthCmd($1);} ; getFitsFileName: fileNameType {fr->getFitsFileNameCmd((Base::FileNameType)$1);} | fileNameType internalSystem numeric numeric {fr->getFitsFileNameCmd(Vector($3,$4), (Coord::InternalSystem)$2, (Base::FileNameType)$1);} | fileNameType INT {fr->getFitsFileNameCmd($2, (Base::FileNameType)$1);} ; getFitsSlice : /* empty */ {fr->getFitsSliceCmd(2);} | INT {fr->getFitsSliceCmd($1);} | coordSystem {fr->getFitsSliceCmd(2, (Coord::CoordSystem)$1);} | INT coordSystem {fr->getFitsSliceCmd($1, (Coord::CoordSystem)$2);} ; getGrid : /* empty */ {fr->getGridCmd();} | OPTION_ {fr->getGridOptionCmd();} | VAR_ {fr->getGridVarsCmd();} ; getMask : COLOR_ {fr->getMaskColorCmd();} | MARK_ {fr->getMaskMarkCmd();} | TRANSPARENCY_{fr->getMaskTransparencyCmd();} ; getPan : PRESERVE_ {fr->getPanPreserveCmd();} ; getRGB : CHANNEL_ {fr->getRGBChannelCmd();} | SYSTEM_ {fr->getRGBSystemCmd();} | VIEW_ {fr->getRGBViewCmd();} ; getSmooth : FUNCTION_ {fr->getSmoothFunctionCmd();} | RADIUS_ {fr->getSmoothRadiusCmd();} ; getThreed : VIEW_ getThreedView | BORDER_ getThreedBorder | COMPASS_ getThreedCompass | HIGHLITE_ getThreedHighlite | METHOD_ {fr->get3dRenderMethodCmd();} | BACKGROUND_ {fr->get3dRenderBackgroundCmd();} | SCALE_ {fr->get3dScaleCmd();} ; getThreedBorder : {fr->get3dBorderCmd();} | COLOR_ {fr->get3dBorderColorCmd();} ; getThreedCompass : {fr->get3dCompassCmd();} | COLOR_ {fr->get3dCompassColorCmd();} ; getThreedHighlite : {fr->get3dHighliteCmd();} | COLOR_ {fr->get3dHighliteColorCmd();} ; getThreedView : {fr->get3dViewCmd();} | POINT_ {fr->get3dViewPointCmd();} ; getWCS : /* empty */ {fr->getWCSCmd();} | ALIGN_ getWCSAlign | NAME_ wcsSystem {fr->getWCSNameCmd((Coord::CoordSystem)$2);} ; getWCSAlign : /* empty */ {fr->getWCSAlignCmd();} | POINTER_ {fr->getWCSAlignPointerCmd();} ; grid : CREATE_ gridCreate | DELETE_ {fr->gridDeleteCmd();} ; gridCreate: coordSystem skyFrame skyFormat gridType STRING STRING {fr->gridCmd((Coord::CoordSystem)$1, (Coord::SkyFrame)$2, (Coord::SkyFormat)$3, (Grid2d::GridType)$4, $5, $6);} | coordSystem skyFrame skyFormat gridType STRING { // backward compatibility with backup fr->gridCmd((Coord::CoordSystem)$1, (Coord::SkyFrame)$2, (Coord::SkyFormat)$3, (Grid2d::GridType)$4, $5, ""); } ; gridType : ANALYSIS_ {$$=Grid2d::ANALYSIS;} | PUBLICATION_ {$$=Grid2d::PUBLICATION;} ; has : AMPLIFIER_ {fr->hasAmplifierCmd();} | BIN_ hasBin | CONTOUR_ hasContour | CROP_ {fr->hasCropCmd();} | DATAMIN_ {fr->hasDATAMINCmd();} | DATASEC_ {fr->hasDATASECCmd();} | DETECTOR_ {fr->hasDetectorCmd();} | FITS_ hasFits | GRID_ {fr->hasGridCmd();} | IIS_ {fr->hasIISCmd();} | IRAFMIN_ {fr->hasIRAFMINCmd();} | MARKER_ hasMarker | PHYSICAL_ {fr->hasPhysicalCmd();} | SMOOTH_ {fr->hasSmoothCmd();} | SYSTEM_ coordSystem {fr->hasSystemCmd((Coord::CoordSystem)$2);} | WCS_ hasWCS ; hasBin : COLUMN_ STRING {fr->hasBinColCmd($2);} ; hasContour : /* empty */ {fr->hasContourCmd();} | AUX_ {fr->hasContourAuxCmd();} ; hasFits : /* empty */ {fr->hasFitsCmd();} | BIN_ {fr->hasFitsBinCmd();} | CUBE_ {fr->hasFitsCubeCmd();} | MOSAIC_ {fr->hasFitsMosaicCmd();} ; hasMarker : HIGHLITE_ {fr->hasMarkerHighlitedCmd();} | SELECT_ {fr->hasMarkerSelectedCmd();} | PASTE_ {fr->hasMarkerPasteCmd();} | UNDO_ {fr->hasMarkerUndoCmd();} ; hasWCS : coordSystem {fr->hasWCSCmd((Coord::CoordSystem)$1);} | EQUATORIAL_ coordSystem {fr->hasWCSEquCmd((Coord::CoordSystem)$2);} | CELESTRIAL_ coordSystem {fr->hasWCSCelCmd((Coord::CoordSystem)$2);} | ALT_ {fr->hasWCSAltCmd();} | THREED_ coordSystem {fr->hasWCSxCmd((Coord::CoordSystem)$2);} ; iis : NEW_ INT INT {fr->iisCmd($2,$3);} | ERASE_ {fr->iisEraseCmd();} | MESSAGE_ STRING {fr->iisMessageCmd($2);} | CURSOR_ iiscursor | SET_ FILE_ NAME_ iisSetFileName | SET_ POINTER INT INT INT INT {fr->iisSetCmd((const char*)$2,$3,$4,$5,$6);} | UPDATE_ {fr->iisUpdateCmd();} | WCS_ numeric numeric numeric numeric numeric numeric numeric numeric INT {fr->iisWCSCmd(Matrix($2,$3,$4,$5,$6,$7),Vector($8,$9),$10);} ; iisSetFileName : STRING {fr->iisSetFileNameCmd($1);} | STRING INT {fr->iisSetFileNameCmd($1,$2);} ; iiscursor: INT INT CANVAS_ {fr->iisSetCursorCmd(Vector($1,$2),Coord::CANVAS);} | INT INT coordSystem {fr->iisSetCursorCmd(Vector($1,$2),(Coord::CoordSystem)$3);} | MODE_ yesno {fr->iisCursorModeCmd($2);} ; load : ARRAY_ loadArr | ENVI_ loadENVI | FITS_ loadFits | INCR_ loadIncr | NRRD_ loadNRRD | PHOTO_ loadPhoto ; loadArr : STRING ALLOC_ STRING layerType {fr->loadArrAllocCmd($3, $1, (Base::LayerType)$4);} | STRING ALLOCGZ_ STRING layerType {fr->loadArrAllocGZCmd($3, $1, (Base::LayerType)$4);} | STRING CHANNEL_ STRING layerType {fr->loadArrChannelCmd($3, $1, (Base::LayerType)$4);} | STRING MMAP_ layerType {fr->loadArrMMapCmd($1, (Base::LayerType)$3);} | STRING MMAPINCR_ layerType {fr->loadArrMMapIncrCmd($1, (Base::LayerType)$3);} | STRING SHARED_ shmType INT layerType {fr->loadArrShareCmd((Base::ShmType)$3, $4, $1, (Base::LayerType)$5);} | STRING SOCKET_ INT layerType {fr->loadArrSocketCmd($3, $1, (Base::LayerType)$4);} | STRING SOCKETGZ_ INT layerType {fr->loadArrSocketGZCmd($3, $1, (Base::LayerType)$4);} | STRING VAR_ STRING layerType {fr->loadArrVarCmd($3, $1, (Base::LayerType)$4);} | RGB_ CUBE_ loadArrayRGBCube ; loadArrayRGBCube : STRING ALLOC_ STRING {fr->loadArrayRGBCubeAllocCmd($3, $1);} | STRING ALLOCGZ_ STRING {fr->loadArrayRGBCubeAllocGZCmd($3, $1);} | STRING CHANNEL_ STRING {fr->loadArrayRGBCubeChannelCmd($3, $1);} | STRING MMAP_ {fr->loadArrayRGBCubeMMapCmd($1);} | STRING MMAPINCR_ {fr->loadArrayRGBCubeMMapIncrCmd($1);} | STRING SHARED_ shmType INT {fr->loadArrayRGBCubeShareCmd((Base::ShmType)$3, $4, $1);} | STRING SOCKET_ INT {fr->loadArrayRGBCubeSocketCmd($3, $1);} | STRING SOCKETGZ_ INT {fr->loadArrayRGBCubeSocketGZCmd($3, $1);} | STRING VAR_ STRING {fr->loadArrayRGBCubeVarCmd($3, $1);} ; loadENVI : STRING STRING SMMAP_ {fr->loadENVISMMapCmd($1,$2);} ; loadFits: STRING ALLOC_ STRING layerType {fr->loadFitsAllocCmd($3, $1, (Base::LayerType)$4);} | STRING ALLOCGZ_ STRING layerType {fr->loadFitsAllocGZCmd($3, $1, (Base::LayerType)$4);} | STRING CHANNEL_ STRING layerType {fr->loadFitsChannelCmd($3, $1, (Base::LayerType)$4);} | STRING MMAP_ incrLoad layerType {fr->loadFitsMMapCmd($1, (Base::LayerType)$4);} | STRING STRING SMMAP_ incrLoad layerType {fr->loadFitsSMMapCmd($1, $2, (Base::LayerType)$5);} | STRING MMAPINCR_ incrLoad layerType {fr->loadFitsMMapIncrCmd($1, (Base::LayerType)$4);} | STRING SHARED_ shmType INT incrLoad layerType {fr->loadFitsShareCmd((Base::ShmType)$3, $4, $1, (Base::LayerType)$6);} | STRING SSHARED_ shmType INT INT incrLoad layerType {fr->loadFitsSShareCmd((Base::ShmType)$3, $4, $5, $1, (Base::LayerType)$7);} | STRING SOCKET_ INT layerType {fr->loadFitsSocketCmd($3, $1, (Base::LayerType)$4);} | STRING SOCKETGZ_ INT layerType {fr->loadFitsSocketGZCmd($3, $1, (Base::LayerType)$4);} | STRING VAR_ STRING incrLoad layerType {fr->loadFitsVarCmd($3, $1, (Base::LayerType)$5);} | SLICE_ loadFitsSlice | EXT_ CUBE_ loadFitsExtCube | RGB_ IMAGE_ loadFitsRGBImage | RGB_ CUBE_ loadFitsRGBCube | MOSAIC_ loadFitsMosaic ; loadFitsSlice:STRING ALLOC_ STRING {fr->loadSliceAllocCmd($3, $1);} | STRING ALLOCGZ_ STRING {fr->loadSliceAllocGZCmd($3, $1);} | STRING CHANNEL_ STRING {fr->loadSliceChannelCmd($3, $1);} | STRING MMAP_ incrLoad {fr->loadSliceMMapCmd($1);} | STRING STRING SMMAP_ incrLoad {fr->loadSliceSMMapCmd($1, $2);} | STRING MMAPINCR_ incrLoad {fr->loadSliceMMapIncrCmd($1);} | STRING SHARED_ shmType INT incrLoad {fr->loadSliceShareCmd((Base::ShmType)$3, $4, $1);} | STRING SSHARED_ shmType INT INT incrLoad {fr->loadSliceSShareCmd((Base::ShmType)$3, $4, $5, $1);} | STRING SOCKET_ INT {fr->loadSliceSocketCmd($3, $1);} | STRING SOCKETGZ_ INT {fr->loadSliceSocketGZCmd($3, $1);} | STRING VAR_ STRING incrLoad {fr->loadSliceVarCmd($3, $1);} ; loadFitsExtCube: STRING ALLOC_ STRING {fr->loadExtCubeAllocCmd($3, $1);} | STRING ALLOCGZ_ STRING {fr->loadExtCubeAllocGZCmd($3, $1);} | STRING CHANNEL_ STRING {fr->loadExtCubeChannelCmd($3, $1);} | STRING MMAP_ incrLoad {fr->loadExtCubeMMapCmd($1);} | STRING MMAPINCR_ incrLoad {fr->loadExtCubeMMapIncrCmd($1);} | STRING SHARED_ shmType INT incrLoad {fr->loadExtCubeShareCmd((Base::ShmType)$3, $4, $1);} | STRING SOCKET_ INT {fr->loadExtCubeSocketCmd($3, $1);} | STRING SOCKETGZ_ INT {fr->loadExtCubeSocketGZCmd($3, $1);} | STRING VAR_ STRING incrLoad {fr->loadExtCubeVarCmd($3, $1);} ; loadFitsMosaic : IMAGE_ IRAF_ loadFitsMosaicImageIRAF | IRAF_ loadFitsMosaicIRAF | IMAGE_ loadFitsMosaicImageWCS | loadFitsMosaicWCS | IMAGE_ WFPC2_ loadFitsMosaicImageWFPC2 ; loadFitsMosaicImageIRAF : STRING ALLOC_ STRING layerType {fr->loadMosaicImageAllocCmd(Base::IRAF, Coord::WCS, $3, $1, (Base::LayerType)$4);} | STRING ALLOCGZ_ STRING layerType {fr->loadMosaicImageAllocGZCmd(Base::IRAF, Coord::WCS, $3, $1,(Base::LayerType)$4);} | STRING CHANNEL_ STRING layerType {fr->loadMosaicImageChannelCmd(Base::IRAF, Coord::WCS, $3, $1,(Base::LayerType)$4);} | STRING MMAP_ incrLoad layerType {fr->loadMosaicImageMMapCmd(Base::IRAF, Coord::WCS, $1, (Base::LayerType)$4);} | STRING MMAPINCR_ incrLoad layerType {fr->loadMosaicImageMMapIncrCmd(Base::IRAF, Coord::WCS, $1, (Base::LayerType)$4);} | STRING SHARED_ shmType INT incrLoad layerType {fr->loadMosaicImageShareCmd(Base::IRAF, Coord::WCS, (Base::ShmType)$3, $4, $1, (Base::LayerType)$6);} | STRING SOCKET_ INT layerType {fr->loadMosaicImageSocketCmd(Base::IRAF, Coord::WCS, $3, $1, (Base::LayerType)$4);} | STRING SOCKETGZ_ INT layerType {fr->loadMosaicImageSocketGZCmd(Base::IRAF, Coord::WCS, $3, $1, (Base::LayerType)$4);} | STRING VAR_ STRING incrLoad layerType {fr->loadMosaicImageVarCmd(Base::IRAF, Coord::WCS, $3, $1, (Base::LayerType)$5);} ; loadFitsMosaicIRAF : STRING ALLOC_ STRING layerType {fr->loadMosaicAllocCmd(Base::IRAF, Coord::WCS, $3, $1, (Base::LayerType)$4);} | STRING ALLOCGZ_ STRING layerType {fr->loadMosaicAllocGZCmd(Base::IRAF, Coord::WCS, $3, $1, (Base::LayerType)$4);} | STRING CHANNEL_ STRING layerType {fr->loadMosaicChannelCmd(Base::IRAF, Coord::WCS, $3, $1, (Base::LayerType)$4);} | STRING MMAP_ incrLoad layerType {fr->loadMosaicMMapCmd(Base::IRAF, Coord::WCS, $1, (Base::LayerType)$4);} | STRING STRING SMMAP_ incrLoad layerType {fr->loadMosaicSMMapCmd(Base::IRAF, Coord::WCS, $1, $2, (Base::LayerType)$5);} | STRING MMAPINCR_ incrLoad layerType {fr->loadMosaicMMapIncrCmd(Base::IRAF, Coord::WCS, $1, (Base::LayerType)$4);} | STRING SHARED_ shmType INT incrLoad layerType {fr->loadMosaicShareCmd(Base::IRAF, Coord::WCS, (Base::ShmType)$3, $4, $1, (Base::LayerType)$6);} | STRING SSHARED_ shmType INT INT incrLoad layerType {fr->loadMosaicSShareCmd(Base::IRAF, Coord::WCS, (Base::ShmType)$3, $4, $5, $1, (Base::LayerType)$7);} | STRING SOCKET_ INT layerType {fr->loadMosaicSocketCmd(Base::IRAF, Coord::WCS, $3, $1, (Base::LayerType)$4);} | STRING SOCKETGZ_ INT layerType {fr->loadMosaicSocketGZCmd(Base::IRAF, Coord::WCS, $3, $1, (Base::LayerType)$4);} | STRING VAR_ STRING incrLoad layerType {fr->loadMosaicVarCmd(Base::IRAF, Coord::WCS, $3, $1, (Base::LayerType)$5);} ; loadFitsMosaicImageWCS : wcsSystem STRING ALLOC_ STRING layerType {fr->loadMosaicImageAllocCmd(Base::WCSMOSAIC, (Coord::CoordSystem)$1, $4, $2, (Base::LayerType)$5);} | wcsSystem STRING ALLOCGZ_ STRING layerType {fr->loadMosaicImageAllocGZCmd(Base::WCSMOSAIC, (Coord::CoordSystem)$1, $4, $2, (Base::LayerType)$5);} | wcsSystem STRING CHANNEL_ STRING layerType {fr->loadMosaicImageChannelCmd(Base::WCSMOSAIC, (Coord::CoordSystem)$1, $4, $2, (Base::LayerType)$5);} | wcsSystem STRING MMAP_ incrLoad layerType {fr->loadMosaicImageMMapCmd(Base::WCSMOSAIC, (Coord::CoordSystem)$1, $2, (Base::LayerType)$5);} | wcsSystem STRING MMAPINCR_ incrLoad layerType {fr->loadMosaicImageMMapIncrCmd(Base::WCSMOSAIC, (Coord::CoordSystem)$1, $2, (Base::LayerType)$5);} | wcsSystem STRING SHARED_ shmType INT incrLoad layerType {fr->loadMosaicImageShareCmd(Base::WCSMOSAIC, (Coord::CoordSystem)$1, (Base::ShmType)$4, $5, $2, (Base::LayerType)$7);} | wcsSystem STRING SOCKET_ INT layerType {fr->loadMosaicImageSocketCmd(Base::WCSMOSAIC, (Coord::CoordSystem)$1, $4, $2, (Base::LayerType)$5);} | wcsSystem STRING SOCKETGZ_ INT layerType {fr->loadMosaicImageSocketGZCmd(Base::WCSMOSAIC, (Coord::CoordSystem)$1, $4, $2, (Base::LayerType)$5);} | wcsSystem STRING VAR_ STRING incrLoad layerType {fr->loadMosaicImageVarCmd(Base::WCSMOSAIC, (Coord::CoordSystem)$1, $4, $2, (Base::LayerType)$6);} ; loadFitsMosaicWCS : wcsSystem STRING ALLOC_ STRING layerType {fr->loadMosaicAllocCmd((Base::WCSMOSAIC), (Coord::CoordSystem)$1, $4, $2, (Base::LayerType)$5);} | wcsSystem STRING ALLOCGZ_ STRING layerType {fr->loadMosaicAllocGZCmd((Base::WCSMOSAIC), (Coord::CoordSystem)$1, $4, $2, (Base::LayerType)$5);} | wcsSystem STRING CHANNEL_ STRING layerType {fr->loadMosaicChannelCmd((Base::WCSMOSAIC), (Coord::CoordSystem)$1, $4, $2, (Base::LayerType)$5);} | wcsSystem STRING MMAP_ incrLoad layerType {fr->loadMosaicMMapCmd((Base::WCSMOSAIC), (Coord::CoordSystem)$1, $2, (Base::LayerType)$5);} | wcsSystem STRING STRING SMMAP_ incrLoad layerType {fr->loadMosaicSMMapCmd((Base::WCSMOSAIC), (Coord::CoordSystem)$1, $2, $3, (Base::LayerType)$6);} | wcsSystem STRING MMAPINCR_ incrLoad layerType {fr->loadMosaicMMapIncrCmd((Base::WCSMOSAIC), (Coord::CoordSystem)$1, $2, (Base::LayerType)$5);} | wcsSystem STRING SHARED_ shmType INT incrLoad layerType {fr->loadMosaicShareCmd((Base::WCSMOSAIC), (Coord::CoordSystem)$1, (Base::ShmType)$4, $5, $2, (Base::LayerType)$7);} | wcsSystem STRING SSHARED_ shmType INT INT incrLoad layerType {fr->loadMosaicSShareCmd((Base::WCSMOSAIC), (Coord::CoordSystem)$1, (Base::ShmType)$4, $5, $6, $2, (Base::LayerType)$8);} | wcsSystem STRING SOCKET_ INT layerType {fr->loadMosaicSocketCmd((Base::WCSMOSAIC), (Coord::CoordSystem)$1, $4, $2, (Base::LayerType)$5);} | wcsSystem STRING SOCKETGZ_ INT layerType {fr->loadMosaicSocketGZCmd((Base::WCSMOSAIC), (Coord::CoordSystem)$1, $4, $2, (Base::LayerType)$5);} | wcsSystem STRING VAR_ STRING incrLoad layerType {fr->loadMosaicVarCmd((Base::WCSMOSAIC), (Coord::CoordSystem)$1, $4, $2, (Base::LayerType)$6);} ; loadFitsMosaicImageWFPC2 : STRING ALLOC_ STRING {fr->loadMosaicImageWFPC2AllocCmd($3, $1);} | STRING ALLOCGZ_ STRING {fr->loadMosaicImageWFPC2AllocGZCmd($3, $1);} | STRING CHANNEL_ STRING {fr->loadMosaicImageWFPC2ChannelCmd($3, $1);} | STRING MMAP_ incrLoad {fr->loadMosaicImageWFPC2MMapCmd($1);} | STRING MMAPINCR_ incrLoad {fr->loadMosaicImageWFPC2MMapIncrCmd($1);} | STRING SHARED_ shmType INT incrLoad {fr->loadMosaicImageWFPC2ShareCmd((Base::ShmType)$3, $4, $1);} | STRING SOCKET_ INT {fr->loadMosaicImageWFPC2SocketCmd($3, $1);} | STRING SOCKETGZ_ INT {fr->loadMosaicImageWFPC2SocketGZCmd($3, $1);} | STRING VAR_ STRING incrLoad {fr->loadMosaicImageWFPC2VarCmd($3, $1);} ; loadFitsRGBCube: STRING ALLOC_ STRING {fr->loadRGBCubeAllocCmd($3, $1);} | STRING ALLOCGZ_ STRING {fr->loadRGBCubeAllocGZCmd($3, $1);} | STRING CHANNEL_ STRING {fr->loadRGBCubeChannelCmd($3, $1);} | STRING MMAP_ incrLoad {fr->loadRGBCubeMMapCmd($1);} | STRING STRING SMMAP_ incrLoad {fr->loadRGBCubeSMMapCmd($1, $2);} | STRING MMAPINCR_ incrLoad {fr->loadRGBCubeMMapIncrCmd($1);} | STRING SHARED_ shmType INT incrLoad {fr->loadRGBCubeShareCmd((Base::ShmType)$3, $4, $1);} | STRING SSHARED_ shmType INT INT incrLoad {fr->loadRGBCubeSShareCmd((Base::ShmType)$3, $4, $5, $1);} | STRING SOCKET_ INT {fr->loadRGBCubeSocketCmd($3, $1);} | STRING SOCKETGZ_ INT {fr->loadRGBCubeSocketGZCmd($3, $1);} | STRING VAR_ STRING incrLoad {fr->loadRGBCubeVarCmd($3, $1);} ; loadFitsRGBImage: STRING ALLOC_ STRING {fr->loadRGBImageAllocCmd($3, $1);} | STRING ALLOCGZ_ STRING {fr->loadRGBImageAllocGZCmd($3, $1);} | STRING CHANNEL_ STRING {fr->loadRGBImageChannelCmd($3, $1);} | STRING MMAP_ incrLoad {fr->loadRGBImageMMapCmd($1);} | STRING MMAPINCR_ incrLoad {fr->loadRGBImageMMapIncrCmd($1);} | STRING SHARED_ shmType INT incrLoad {fr->loadRGBImageShareCmd((Base::ShmType)$3, $4, $1);} | STRING SOCKET_ INT {fr->loadRGBImageSocketCmd($3, $1);} | STRING SOCKETGZ_ INT {fr->loadRGBImageSocketGZCmd($3, $1);} | STRING VAR_ STRING incrLoad {fr->loadRGBImageVarCmd($3, $1);} ; loadNRRD : STRING ALLOC_ STRING layerType {fr->loadNRRDAllocCmd($3, $1, (Base::LayerType)$4);} | STRING CHANNEL_ STRING layerType {fr->loadNRRDChannelCmd($3, $1, (Base::LayerType)$4);} | STRING MMAP_ layerType {fr->loadNRRDMMapCmd($1, (Base::LayerType)$3);} | STRING SHARED_ shmType INT layerType {fr->loadNRRDShareCmd((Base::ShmType)$3, $4, $1, (Base::LayerType)$5);} | STRING SOCKET_ INT layerType {fr->loadNRRDSocketCmd($3, $1, (Base::LayerType)$4);} | STRING VAR_ STRING layerType {fr->loadNRRDVarCmd($3, $1, (Base::LayerType)$4);} ; loadPhoto: /* empty */ STRING STRING {fr->loadPhotoCmd($1,$2);} | SLICE_ STRING STRING {fr->loadSlicePhotoCmd($2,$3);} ; loadIncr: DATA_ INT INT INT INT INT {fr->loadIncrDataCmd($2,$3,$4,$5,$6);} | MINMAX_ INT INT INT INT INT {fr->loadIncrMinMaxCmd($2,$3,$4,$5,$6);} | END_ {fr->loadIncrEndCmd();} ; macosx : PRINT_ { #ifdef MAC_OSX_TK fr->macosxPrintCmd(); #endif } ; magnifier: yesno {fr->magnifierCmd($1);} | GRAPHICS_ yesno {fr->magnifierGraphicsCmd($2);} | CURSOR_ yesno {fr->magnifierCursorCmd($2);} | COLOR_ STRING {fr->magnifierColorCmd($2);} | STRING INT INT {fr->magnifierCmd($1, $2, $3);} | UPDATE_ numeric numeric {fr->updateMagnifierCmd(Vector($2, $3));} | ZOOM_ numeric {fr->magnifierZoomCmd($2);} ; match : STRING STRING wcsSystem skyFrame STRING STRING wcsSystem skyFrame numeric wcsSystem skyDist STRING { fr->matchCmd($1,$2,(Coord::CoordSystem)$3,(Coord::SkyFrame)$4, $5,$6,(Coord::CoordSystem)$7,(Coord::SkyFrame)$8, $9,(Coord::CoordSystem)$10,(Coord::SkyDist)$11, $12); } marker : CENTROID_ markerCentroid | COLOR_ STRING {fr->markerColorCmd($2);} | COPY_ {fr->markerCopyCmd();} | COMMAND_ markerFormat STRING {fr->markerCommandCmd((Base::MarkerFormat)$2,$3);} | COMMAND_ markerFormat VAR_ STRING {fr->markerCommandVarCmd((Base::MarkerFormat)$2,$4);} | COMPOSITE_ DELETE_ {fr->markerCompositeDeleteCmd();} | CREATE_ {maperr =0;} markerCreate | CUT_ {fr->markerCutCmd();} | DELETE_ {fr->markerDeleteCmd();} | DELETE_ ALL_ {fr->markerDeleteAllCmd();} | EDIT_ markerEdit | EPSILON_ INT {fr->markerEpsilonCmd($2);} | FONT_ STRING {fr->markerFontCmd($2);} | HIGHLITE_ ALL_ {fr->markerHighliteAllCmd();} | HIGHLITE_ ONLY_ numeric numeric {fr->markerHighliteOnlyCmd(Vector($3,$4));} | HIGHLITE_ TOGGLE_ numeric numeric {fr->markerHighliteToggleCmd(Vector($3,$4));} | INT ANALYSIS_ analysisMethod yesno {fr->markerAnalysisCmd($1, (Marker::AnalysisTask)$3, $4);} | INT ANGLE_ angle {fr->markerAngleCmd($1,$3);} | INT ANGLE_ angle internalSystem {fr->markerAngleCmd($1,$3);} | INT ANGLE_ angle coordSystem skyFrame {fr->markerAngleCmd($1,$3,(Coord::CoordSystem)$4, (Coord::SkyFrame)$5);} | INT ANNULUS_ RADIUS_ numeric numeric INT internalSystem {fr->markerAnnulusRadiusCmd($1, $4, $5, $6, (Coord::InternalSystem)$7);} | INT ANNULUS_ RADIUS_ numeric numeric INT coordSystem skyDist {fr->markerAnnulusRadiusCmd($1, $4, $5, $6, (Coord::CoordSystem)$7, (Coord::SkyDist)$8);} | INT ANNULUS_ RADIUS_ STRING coordSystem skyDist {fr->markerAnnulusRadiusCmd($1, $4,(Coord::CoordSystem)$5,(Coord::SkyDist)$6);} | INT BOXANNULUS_ RADIUS_ numeric numeric numeric INT internalSystem {fr->markerBoxAnnulusRadiusCmd($1, Vector($4, $5), Vector($6, $6*$5/$4), $7, (Coord::InternalSystem)$8);} | INT BOXANNULUS_ RADIUS_ numeric numeric numeric INT coordSystem skyDist {fr->markerBoxAnnulusRadiusCmd($1, Vector($4, $5), Vector($6, $6*$5/$4), $7, (Coord::CoordSystem)$8, (Coord::SkyDist)$9);} | INT BOXANNULUS_ RADIUS_ STRING coordSystem skyDist {fr->markerBoxAnnulusRadiusCmd($1,$4,(Coord::CoordSystem)$5,(Coord::SkyDist)$6);} | INT BOX_ RADIUS_ numeric numeric internalSystem {fr->markerBoxRadiusCmd($1, Vector($4,$5), (Coord::InternalSystem)$6);} | INT BOX_ RADIUS_ numeric numeric coordSystem skyDist {fr->markerBoxRadiusCmd($1, Vector($4,$5), (Coord::CoordSystem)$6, (Coord::SkyDist)$7);} | INT BPANDA_ EDIT_ angle angle INT numeric numeric numeric INT {fr->markerBpandaEditCmd($1, $4, $5, $6, Vector($7,$8), Vector($9,$9*$8/$7), $10);} | INT BPANDA_ EDIT_ angle angle INT numeric numeric numeric INT internalSystem {fr->markerBpandaEditCmd($1, $4, $5, $6, Vector($7,$8), Vector($9,$9*$8/$7), $10);} | INT BPANDA_ EDIT_ angle angle INT numeric numeric numeric INT coordSystem skyFrame {fr->markerBpandaEditCmd($1, $4, $5, $6, Vector($7,$8), Vector($9,$9*$8/$7), $10, (Coord::CoordSystem)$11, (Coord::SkyFrame)$12);} | INT BPANDA_ EDIT_ STRING STRING coordSystem skyFrame coordSystem skyDist {fr->markerBpandaEditCmd($1, $4, $5, (Coord::CoordSystem)$6, (Coord::SkyFrame)$7, (Coord::CoordSystem)$8, (Coord::SkyDist)$9);} | INT CALLBACK_ markerCallBack STRING STRING {fr->markerCallBackCmd($1,(CallBack::Type)$3,$4,$5);} | INT CIRCLE_ RADIUS_ numeric internalSystem {fr->markerCircleRadiusCmd($1, $4, (Coord::InternalSystem)$5);} | INT CIRCLE_ RADIUS_ numeric coordSystem skyDist {fr->markerCircleRadiusCmd($1, $4, (Coord::CoordSystem)$5, (Coord::SkyDist)$6);} | INT COLOR_ STRING {fr->markerColorCmd($1,$3);} | INT COMPASS_ ARROW_ yesno yesno {fr->markerCompassArrowCmd($1,$4,$5);} | INT COMPASS_ LABEL_ STRING STRING {fr->markerCompassLabelCmd($1,$4,$5);} | INT COMPASS_ RADIUS_ numeric internalSystem {fr->markerCompassRadiusCmd($1,$4,(Coord::InternalSystem)$5);} | INT COMPASS_ RADIUS_ numeric coordSystem skyDist {fr->markerCompassRadiusCmd($1,$4,(Coord::CoordSystem)$5,(Coord::SkyDist)$6);} | INT COMPASS_ SYSTEM_ coordSystem skyFrame {fr->markerCompassSystemCmd($1, (Coord::CoordSystem)$4, (Coord::SkyFrame)$5);} | INT COMPOSITE_ GLOBAL_ yesno {fr->markerCompositeCmd($1,$4);} | INT CPANDA_ EDIT_ angle angle INT numeric numeric INT {fr->markerCpandaEditCmd($1, $4, $5, $6, $7, $8, $9);} | INT CPANDA_ EDIT_ angle angle INT numeric numeric INT internalSystem {fr->markerCpandaEditCmd($1, $4, $5, $6, $7, $8, $9);} | INT CPANDA_ EDIT_ angle angle INT numeric numeric INT coordSystem skyFrame {fr->markerCpandaEditCmd($1, $4, $5, $6, $7, $8, $9, (Coord::CoordSystem)$10, (Coord::SkyFrame)$11);} | INT CPANDA_ EDIT_ STRING STRING coordSystem skyFrame coordSystem skyDist {fr->markerCpandaEditCmd($1, $4, $5, (Coord::CoordSystem)$6, (Coord::SkyFrame)$7, (Coord::CoordSystem)$8, (Coord::SkyDist)$9);} | INT CREATE_ ANNULUS_ RADIUS_ numeric numeric {fr->markerAnnulusCreateRadiusCmd($1,Vector($5,$6));} | INT CREATE_ BOXANNULUS_ RADIUS_ numeric numeric {fr->markerBoxAnnulusCreateRadiusCmd($1,Vector($5,$6));} | INT CREATE_ BPANDA_ ANGLE_ numeric numeric {fr->markerBpandaCreateAnglesCmd($1,Vector($5,$6));} | INT CREATE_ BPANDA_ RADIUS_ numeric numeric {fr->markerBpandaCreateRadiusCmd($1,Vector($5,$6));} | INT CREATE_ ELLIPSEANNULUS_ RADIUS_ numeric numeric {fr->markerEllipseAnnulusCreateRadiusCmd($1,Vector($5,$6));} | INT CREATE_ EPANDA_ ANGLE_ numeric numeric {fr->markerEpandaCreateAnglesCmd($1,Vector($5,$6));} | INT CREATE_ EPANDA_ RADIUS_ numeric numeric {fr->markerEpandaCreateRadiusCmd($1,Vector($5,$6));} | INT CREATE_ CPANDA_ ANGLE_ numeric numeric {fr->markerCpandaCreateAnglesCmd($1,Vector($5,$6));} | INT CREATE_ CPANDA_ RADIUS_ numeric numeric {fr->markerCpandaCreateRadiusCmd($1,Vector($5,$6));} | INT CREATE_ POLYGON_ VERTEX_ INT numeric numeric {fr->markerPolygonCreateVertexCmd($1,$5,Vector($6,$7));} | INT CREATE_ SEGMENT_ VERTEX_ INT numeric numeric {fr->markerSegmentCreateVertexCmd($1,$5,Vector($6,$7));} | INT DELETE_ {fr->markerDeleteCmd($1);} | INT DELETE_ ANNULUS_ INT {fr->markerAnnulusDeleteRadiusCmd($1,$4);} | INT DELETE_ BOXANNULUS_ INT {fr->markerBoxAnnulusDeleteRadiusCmd($1,$4);} | INT DELETE_ BPANDA_ INT {fr->markerBpandaDeleteCmd($1,$4);} | INT DELETE_ ELLIPSEANNULUS_ INT {fr->markerEllipseAnnulusDeleteRadiusCmd($1,$4);} | INT DELETE_ CALLBACK_ markerCallBack STRING {fr->markerDeleteCallBackCmd($1,(CallBack::Type)$4,$5);} | INT DELETE_ EPANDA_ INT {fr->markerEpandaDeleteCmd($1,$4);} | INT DELETE_ CPANDA_ INT {fr->markerCpandaDeleteCmd($1,$4);} | INT DELETE_ POLYGON_ VERTEX_ INT {fr->markerPolygonDeleteVertexCmd($1,$5);} | INT DELETE_ SEGMENT_ VERTEX_ INT {fr->markerSegmentDeleteVertexCmd($1,$5);} | INT DELETE_ TAG_ {fr->markerDeleteTagCmd($1);} | INT DELETE_ TAG_ STRING {fr->markerDeleteTagCmd($1,$4);} | INT DELETE_ TAG_ INT {fr->markerDeleteTagCmd($1,$4);} | INT EDIT_ BEGIN_ INT {fr->markerEditBeginCmd($1,$4);} | INT ELLIPSE_ RADIUS_ numeric numeric internalSystem {fr->markerEllipseRadiusCmd($1, Vector($4, $5), (Coord::InternalSystem)$6);} | INT ELLIPSE_ RADIUS_ numeric numeric coordSystem skyDist {fr->markerEllipseRadiusCmd($1, Vector($4, $5), (Coord::CoordSystem)$6, (Coord::SkyDist)$7);} | INT ELLIPSEANNULUS_ RADIUS_ numeric numeric numeric INT internalSystem {fr->markerEllipseAnnulusRadiusCmd($1, Vector($4,$5), Vector($6,$6*$5/$4), $7, (Coord::InternalSystem)$8);} | INT ELLIPSEANNULUS_ RADIUS_ numeric numeric numeric INT coordSystem skyDist {fr->markerEllipseAnnulusRadiusCmd($1, Vector($4,$5), Vector($6,$6*$5/$4), $7, (Coord::CoordSystem)$8, (Coord::SkyDist)$9);} | INT ELLIPSEANNULUS_ RADIUS_ STRING coordSystem skyDist {fr->markerEllipseAnnulusRadiusCmd($1, $4, (Coord::CoordSystem)$5, (Coord::SkyDist)$6);} | INT EPANDA_ EDIT_ angle angle INT numeric numeric numeric INT {fr->markerEpandaEditCmd($1, $4, $5, $6, Vector($7,$8), Vector($9,$9*$8/$7), $10);} | INT EPANDA_ EDIT_ angle angle INT numeric numeric numeric INT internalSystem {fr->markerEpandaEditCmd($1, $4, $5, $6, Vector($7,$8), Vector($9,$9*$8/$7), $10);} | INT EPANDA_ EDIT_ angle angle INT numeric numeric numeric INT coordSystem skyFrame {fr->markerEpandaEditCmd($1, $4, $5, $6, Vector($7,$8), Vector($9,$9*$8/$7), $10, (Coord::CoordSystem)$11, (Coord::SkyFrame)$12);} | INT EPANDA_ EDIT_ STRING STRING coordSystem skyFrame coordSystem skyDist {fr->markerEpandaEditCmd($1, $4, $5, (Coord::CoordSystem)$6, (Coord::SkyFrame)$7, (Coord::CoordSystem)$8, (Coord::SkyDist)$9);} | INT FONT_ STRING {fr->markerFontCmd($1,$3);} | INT HIGHLITE_ {fr->markerHighliteCmd($1);} | INT HIGHLITE_ ONLY_{fr->markerHighliteOnlyCmd($1);} | INT LINE_ ARROW_ yesno yesno {fr->markerLineArrowCmd($1,$4,$5);} | INT LINE_ POINT_ internalSystem coord coord {fr->markerLineCmd($1, Vector($5), Vector($6), (Coord::InternalSystem)$4);} | INT LINE_ POINT_ coordSystem skyFrame coord coord {fr->markerLineCmd($1, Vector($6), Vector($7), (Coord::CoordSystem)$4, (Coord::SkyFrame)$5);} | INT MOVE_ numeric numeric {fr->markerMoveCmd($1, Vector($3,$4));} | INT MOVE_ FRONT_ {fr->markerFrontCmd($1);} | INT MOVE_ BACK_ {fr->markerBackCmd($1);} | INT MOVE_ TO_ internalSystem numeric numeric {fr->markerMoveToCmd($1, Vector($5,$6), (Coord::InternalSystem)$4);} | INT MOVE_ TO_ coordSystem skyFrame coord {fr->markerMoveToCmd($1,Vector($6),(Coord::CoordSystem)$4,(Coord::SkyFrame)$5);} | INT POLYGON_ RESET_ numeric numeric internalSystem {fr->markerPolygonResetCmd($1, Vector($4,$5),(Coord::InternalSystem)$6);} | INT POLYGON_ RESET_ numeric numeric coordSystem skyDist {fr->markerPolygonResetCmd($1, Vector($4,$5), (Coord::CoordSystem)$6, (Coord::SkyDist)$7);} | INT SEGMENT_ RESET_ numeric numeric internalSystem {fr->markerSegmentResetCmd($1, Vector($4,$5),(Coord::InternalSystem)$6);} | INT SEGMENT_ RESET_ numeric numeric coordSystem skyDist {fr->markerSegmentResetCmd($1, Vector($4,$5), (Coord::CoordSystem)$6, (Coord::SkyDist)$7);} | INT POINT_ SHAPE_ pointShape {fr->markerPointShapeCmd($1,(Point::PointShape)$4);} | INT POINT_ SIZE_ INT {fr->markerPointSizeCmd($1,$4);} | INT PROJECTION_ internalSystem coord coord numeric {fr->markerProjectionCmd($1, Vector($4), Vector($5), (Coord::InternalSystem)$3, $6);} | INT PROJECTION_ coordSystem skyFrame coord coord numeric coordSystem skyDist {fr->markerProjectionCmd($1, Vector($5), Vector($6), (Coord::CoordSystem)$3, (Coord::SkyFrame)$4, $7, (Coord::CoordSystem)$8, (Coord::SkyDist)$9);} | INT PROPERTY_ markerProperty yesno {fr->markerPropertyCmd($1,$3,$4);} | INT ROTATE_ BEGIN_ {fr->markerRotateBeginCmd($1);} | INT RULER_ POINT_ internalSystem coord coord {fr->markerRulerPointCmd($1, Vector($5), Vector($6), (Coord::InternalSystem)$4);} | INT RULER_ POINT_ coordSystem skyFrame coord coord {fr->markerRulerPointCmd($1, Vector($6), Vector($7), (Coord::CoordSystem)$4, (Coord::SkyFrame)$5);} | INT RULER_ SYSTEM_ coordSystem skyFrame coordSystem skyDist {fr->markerRulerSystemCmd($1, (Coord::CoordSystem)$4, (Coord::SkyFrame)$5, (Coord::CoordSystem)$6, (Coord::SkyDist)$7);} | INT SELECT_ {fr->markerSelectCmd($1);} | INT SELECT_ ONLY_ {fr->markerSelectOnlyCmd($1);} | INT TAG_ STRING {fr->markerTagCmd($1,$3);} | INT TEXT_ STRING {fr->markerTextCmd($1,$3);} | INT TEXT_ ROTATE_ yesno {fr->markerTextRotateCmd($1,$4);} | INT UNHIGHLITE_ {fr->markerUnhighliteCmd($1);} | INT UNSELECT_ {fr->markerUnselectCmd($1);} | INT VECTOR_ ARROW_ yesno {fr->markerVectorArrowCmd($1,$4);} | INT VECTOR_ POINT_ internalSystem coord numeric angle {fr->markerVectorCmd($1, Vector($5), (Coord::InternalSystem)$4, $6, $7);} | INT VECTOR_ POINT_ coordSystem skyFrame coord coordSystem skyDist numeric angle {fr->markerVectorCmd($1, Vector($6), (Coord::CoordSystem)$4, (Coord::SkyFrame)$5, $9, (Coord::CoordSystem)$7, (Coord::SkyDist)$8, $10);} | INT WIDTH_ INT {fr->markerLineWidthCmd($1,$3);} | KEY_ {fr->markerKeyCmd();} | KEY_ numeric numeric {fr->markerKeyCmd(Vector($2,$3));} | LIST_ markerList | LOAD_ markerLoad | MOVE_ markerMoveSelected | PRESERVE_ yesno {fr->markerPreserveCmd($2);} | PROPERTY_ markerProperty yesno {fr->markerPropertyCmd($2,$3);} | PROPERTY_ markerProperty yesno numeric numeric {fr->markerPropertyCmd($2,$3,Vector($4,$5));} | ROTATE_ BEGIN_ numeric numeric {fr->markerRotateBeginCmd(Vector($3,$4));} | ROTATE_ MOTION_ numeric numeric INT {fr->markerRotateMotionCmd(Vector($3,$4),$5);} | ROTATE_ END_ {fr->markerRotateEndCmd();} | SAVE_ STRING markerFormat coordSystem skyFrame skyFormat yesno {fr->markerSaveCmd($2, (Base::MarkerFormat)$3, (Coord::CoordSystem)$4, (Coord::SkyFrame)$5, (Coord::SkyFormat)$6, $7);} | SAVE_ TEMPLATE_ STRING {fr->markerSaveTemplateCmd($3);} | SELECT_ markerSelect | SHOW_ markerShow | STRING COLOR_ STRING {fr->markerColorCmd($1,$3);} | STRING COPY_ {fr->markerCopyCmd($1);} | STRING DELETE_ {fr->markerDeleteCmd($1);} | STRING CUT_ {fr->markerCutCmd($1);} | STRING FONT_ STRING {fr->markerFontCmd($1,$3);} | STRING HIGHLITE_ {fr->markerHighliteCmd($1);} | STRING HIGHLITE_ ONLY_ {fr->markerHighliteOnlyCmd($1);} | STRING MOVE_ numeric numeric {fr->markerMoveCmd($1,Vector($3,$4));} | STRING MOVE_ FRONT_ {fr->markerFrontCmd($1);} | STRING MOVE_ BACK_ {fr->markerBackCmd($1);} | STRING MOVE_ TO_ internalSystem coord {fr->markerMoveToCmd($1,Vector($5),(Coord::InternalSystem)$4);} | STRING MOVE_ TO_ coordSystem skyFrame coord {fr->markerMoveToCmd($1,Vector($6),(Coord::CoordSystem)$4,(Coord::SkyFrame)$5);} | STRING PROPERTY_ markerProperty yesno {fr->markerPropertyCmd($1,$3,$4);} | STRING SELECT_ {fr->markerSelectCmd($1);} | STRING SELECT_ ONLY_ {fr->markerSelectOnlyCmd($1);} | STRING UNHIGHLITE_ {fr->markerUnhighliteCmd($1);} | STRING UNSELECT_ {fr->markerUnselectCmd($1);} | TAG_ EDIT_ STRING STRING {fr->markerTagEditCmd($3,$4);} | TAG_ DELETE_ STRING {fr->markerTagDeleteCmd($3);} | TAG_ DELETE_ ALL_ {fr->markerTagDeleteAllCmd();} | TAG_ STRING {fr->markerTagCmd($2);} | TAG_ UPDATE_ STRING {fr->markerTagUpdateCmd($3);} | PASTE_ {fr->markerPasteCmd();} | PASTE_ coordSystem {fr->markerPasteCmd((Coord::CoordSystem)$2);} | UNDO_ {fr->markerUndoCmd();} | UNHIGHLITE_ ALL_ {fr->markerUnhighliteAllCmd();} | UNSELECT_ ALL_ {fr->markerUnselectAllCmd();} | WIDTH_ INT {fr->markerLineWidthCmd($2);} ; markerCallBack : SELECT_ {$$ = CallBack::SELECTCB;} | UNSELECT_ {$$ = CallBack::UNSELECTCB;} | HIGHLITE_ {$$ = CallBack::HIGHLITECB;} | UNHIGHLITE_ {$$ = CallBack::UNHIGHLITECB;} | BEGIN_ MOVE_ {$$ = CallBack::MOVEBEGINCB;} | MOVE_ {$$ = CallBack::MOVECB;} | END_ MOVE_ {$$ = CallBack::MOVEENDCB;} | BEGIN_ EDIT_ {$$ = CallBack::EDITBEGINCB;} | EDIT_ {$$ = CallBack::EDITCB;} | END_ EDIT_ {$$ = CallBack::EDITENDCB;} | BEGIN_ ROTATE_ {$$ = CallBack::ROTATEBEGINCB;} | ROTATE_ {$$ = CallBack::ROTATECB;} | END_ ROTATE_ {$$ = CallBack::ROTATEENDCB;} | DELETE_ {$$ = CallBack::DELETECB;} | TEXT_ {$$ = CallBack::TEXTCB;} | COLOR_ {$$ = CallBack::COLORCB;} | WIDTH_ {$$ = CallBack::LINEWIDTHCB;} | PROPERTY_ {$$ = CallBack::PROPERTYCB;} | FONT_ {$$ = CallBack::FONTCB;} | KEY_ {$$ = CallBack::KEYCB;} | UPDATE_ {$$ = CallBack::UPDATECB;} ; markerCentroid : /* empty */ {fr->markerCentroidCmd();} | INT {fr->markerCentroidCmd($1);} | AUTO_ yesno {fr->markerCentroidAutoCmd($2);} | RADIUS_ numeric {fr->markerCentroidRadiusCmd($2);} | ITERATION_ INT {fr->markerCentroidIterationCmd($2);} | OPTION_ INT numeric { fr->markerCentroidIterationCmd($2); fr->markerCentroidRadiusCmd($3); } ; markerCreate : CIRCLE_ numeric numeric numeric markerProperties {fr->createCircleCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), $4, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | ELLIPSE_ numeric numeric numeric numeric optangle markerProperties {fr->createEllipseCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), Vector($4,$5), $6, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | BOX_ numeric numeric numeric numeric optangle markerProperties {fr->createBoxCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), Vector($4,$5), $6, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | POLYGON_ numeric numeric numeric numeric markerProperties {fr->createPolygonCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), Vector($4,$5), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | SEGMENT_ numeric numeric numeric numeric markerProperties {fr->createSegmentCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), Vector($4,$5), currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | LINE_ numeric numeric numeric numeric markerProperties {fr->createLineCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), fr->mapToRef(Vector($4,$5),Coord::CANVAS), 0, 0, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | VECTOR_ numeric numeric numeric numeric markerProperties {fr->createVectCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), fr->mapToRef(Vector($4,$5),Coord::CANVAS), 1, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | TEXT_ numeric numeric optangle markerProperties {fr->createTextCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), $4, 1, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | CIRCLE_ POINT_ numeric numeric pointSize markerProperties {fr->createPointCmd(fr->mapToRef(Vector($3,$4),Coord::CANVAS), Point::CIRCLE, $5, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | BOX_ POINT_ numeric numeric pointSize markerProperties {fr->createPointCmd(fr->mapToRef(Vector($3,$4),Coord::CANVAS), Point::BOX, $5, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | DIAMOND_ POINT_ numeric numeric pointSize markerProperties {fr->createPointCmd(fr->mapToRef(Vector($3,$4),Coord::CANVAS), Point::DIAMOND, $5, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | CROSS_ POINT_ numeric numeric pointSize markerProperties {fr->createPointCmd(fr->mapToRef(Vector($3,$4),Coord::CANVAS), Point::CROSS, $5, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | 'X' POINT_ numeric numeric pointSize markerProperties {fr->createPointCmd(fr->mapToRef(Vector($3,$4),Coord::CANVAS), Point::EX, $5, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | ARROW_ POINT_ numeric numeric pointSize markerProperties {fr->createPointCmd(fr->mapToRef(Vector($3,$4),Coord::CANVAS), Point::ARROW, $5, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | BOXCIRCLE_ POINT_ numeric numeric pointSize markerProperties {fr->createPointCmd(fr->mapToRef(Vector($3,$4),Coord::CANVAS), Point::BOXCIRCLE, $5, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | RULER_ numeric numeric numeric numeric coordSystem skyFrame coordSystem skyDist markerProperties {fr->createRulerCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), fr->mapToRef(Vector($4,$5),Coord::CANVAS), (Coord::CoordSystem)$6, (Coord::SkyFrame)$7, (Coord::CoordSystem)$8, (Coord::SkyDist)$9, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | COMPASS_ numeric numeric numeric coordSystem skyFrame markerProperties {fr->createCompassCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), $4, "N", "E", 1, 1, (Coord::CoordSystem)$5, (Coord::SkyFrame)$6, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | PROJECTION_ numeric numeric numeric numeric numeric markerProperties {fr->createProjectionCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), fr->mapToRef(Vector($4,$5),Coord::CANVAS), $6, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | ANNULUS_ numeric numeric numeric numeric INT markerProperties {fr->createAnnulusCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), $4,$5,$6, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | ELLIPSEANNULUS_ numeric numeric numeric numeric numeric INT optangle markerProperties {fr->createEllipseAnnulusCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), Vector($4,$5), Vector($6,$6*$4/$5),$7, $8, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | BOXANNULUS_ numeric numeric numeric numeric numeric INT optangle markerProperties {fr->createBoxAnnulusCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), Vector($4,$5),Vector($6,$6*$4/$5),$7, $8, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | CPANDA_ numeric numeric angle angle INT numeric numeric INT markerProperties {fr->createCpandaCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), $4,$5,$6, $7,$8,$9, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | EPANDA_ numeric numeric angle angle INT numeric numeric numeric INT optangle markerProperties {fr->createEpandaCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), $4,$5,$6, Vector($7,$8), Vector($9,$9*$7/$8),$10, $11, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | BPANDA_ numeric numeric angle angle INT numeric numeric numeric INT optangle markerProperties {fr->createBpandaCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), $4,$5,$6, Vector($7,$8), Vector($9,$9*$7/$8),$10, $11, currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | COMPOSITE_ markerProperties {fr->createCompositeCmd( currentColor,currentDash,currentWidth,currentFont, currentText,currentProps,NULL,taglist,cblist);} | TEMPLATE_ markerCreateTemplate ; markerCreateTemplate : STRING numeric numeric {fr->createTemplateCmd(fr->mapToRef(Vector($2,$3),Coord::CANVAS), $1);} | VAR_ STRING numeric numeric {fr->createTemplateVarCmd(fr->mapToRef(Vector($3,$4),Coord::CANVAS), $2);} | numeric numeric VAR_ STRING { // backward compatibility fr->createTemplateVarCmd(fr->mapToRef(Vector($1,$2),Coord::CANVAS), $4); } | STRING coordSystem skyFrame coord {fr->createTemplateCmd(Vector($4),(Coord::CoordSystem)$2,(Coord::SkyFrame)$3, $1);} ; markerDash : INT INT {$$[0] = $1; $$[1] = $2;} ; markerEdit : BEGIN_ numeric numeric INT {fr->markerEditBeginCmd(Vector($2,$3),$4);} | MOTION_ numeric numeric INT {fr->markerEditMotionCmd(Vector($2,$3),$4);} | END_ {fr->markerEditEndCmd();} ; markerFormat : DS9_ {$$ = Base::DS9;} | XML_ {$$ = Base::XML;} | CIAO_ {$$ = Base::CIAO;} | SAOTNG_ {$$ = Base::SAOTNG;} | SAOIMAGE_ {$$ = Base::SAOIMAGE;} | PROS_ {$$ = Base::PROS;} | XY_ {$$ = Base::RAWXY;} ; markerGet : CENTROID_ markerGetCentroid | COLOR_ {fr->getMarkerColorCmd();} | FONT_ {fr->getMarkerFontCmd();} | EPSILON_ {fr->getMarkerEpsilonCmd();} | HANDLE_ numeric numeric {fr->getMarkerHandleCmd(Vector($2,$3));} | ID_ numeric numeric {fr->getMarkerIdCmd(Vector($2,$3));} | HIDE_ ANALYSIS_ CPANDA_ coordSystem {fr->getMarkerAnalysisPandaCmd((Coord::CoordSystem)$4);} | HIDE_ ANALYSIS_ HISTOGRAM_ STRING STRING INT {fr->getMarkerAnalysisHistogramCmd($4,$5,$6);} | HIDE_ ANALYSIS_ PLOT2D_ STRING STRING STRING STRING coordSystem skyFrame analysisParam {fr->getMarkerAnalysisPlot2dCmd($4,$5,$6,$7,(Coord::CoordSystem)$8, (Coord::SkyFrame)$9, (Marker::AnalysisMethod)$10);} | HIDE_ ANALYSIS_ PLOT3D_ STRING STRING coordSystem analysisParam {fr->getMarkerAnalysisPlot3dCmd($4,$5,(Coord::CoordSystem)$6,(Marker::AnalysisMethod)$7);} | HIDE_ ANALYSIS_ RADIAL_ STRING STRING STRING coordSystem {fr->getMarkerAnalysisRadialCmd($4,$5,$6,(Coord::CoordSystem)$7);} | HIDE_ ANALYSIS_ STATS_ coordSystem skyFrame {fr->getMarkerAnalysisStatsCmd((Coord::CoordSystem)$4, (Coord::SkyFrame)$5);} | INT ANALYSIS_ CPANDA_ coordSystem {fr->getMarkerAnalysisPandaCmd($1,(Coord::CoordSystem)$4);} | INT ANALYSIS_ HISTOGRAM_ STRING STRING INT {fr->getMarkerAnalysisHistogramCmd($1,$4,$5,$6);} | INT ANALYSIS_ PLOT2D_ STRING STRING STRING STRING coordSystem skyFrame analysisParam {fr->getMarkerAnalysisPlot2dCmd($1,$4,$5,$6,$7,(Coord::CoordSystem)$8, (Coord::SkyFrame)$9, (Marker::AnalysisMethod)$10);} | INT ANALYSIS_ PLOT3D_ STRING STRING coordSystem analysisParam {fr->getMarkerAnalysisPlot3dCmd($1,$4,$5,(Coord::CoordSystem)$6,(Marker::AnalysisMethod)$7);} | INT ANALYSIS_ RADIAL_ STRING STRING STRING coordSystem {fr->getMarkerAnalysisRadialCmd($1,$4,$5,$6,(Coord::CoordSystem)$7);} | INT ANALYSIS_ STATS_ coordSystem skyFrame {fr->getMarkerAnalysisStatsCmd($1,(Coord::CoordSystem)$4, (Coord::SkyFrame)$5);} | ID_ ALL_ {fr->getMarkerIdAllCmd();} | INT ANGLE_ {fr->getMarkerAngleCmd($1);} | INT ANGLE_ internalSystem {fr->getMarkerAngleCmd($1);} | INT ANGLE_ coordSystem skyFrame {fr->getMarkerAngleCmd($1,(Coord::CoordSystem)$3, (Coord::SkyFrame)$4);} | INT ANNULUS_ RADIUS_ coordSystem skyDist {fr->getMarkerAnnulusRadiusCmd($1, (Coord::CoordSystem)$4, (Coord::SkyDist)$5);} | INT BOXANNULUS_ RADIUS_ coordSystem skyDist {fr->getMarkerBoxAnnulusRadiusCmd($1,(Coord::CoordSystem)$4,(Coord::SkyDist)$5);} | INT BOX_ RADIUS_ coordSystem skyDist {fr->getMarkerBoxRadiusCmd($1,(Coord::CoordSystem)$4, (Coord::SkyDist)$5);} | INT BPANDA_ ANGLE_ {fr->getMarkerBpandaAnglesCmd($1);} | INT BPANDA_ ANGLE_ internalSystem {fr->getMarkerBpandaAnglesCmd($1);} | INT BPANDA_ ANGLE_ coordSystem skyFrame {fr->getMarkerBpandaAnglesCmd($1, (Coord::CoordSystem)$4, (Coord::SkyFrame)$5);} | INT BPANDA_ RADIUS_ coordSystem skyDist {fr->getMarkerBpandaRadiusCmd($1, (Coord::CoordSystem)$4, (Coord::SkyDist)$5);} | INT CENTER_ coordSystem skyFrame skyFormat {fr->getMarkerCenterCmd($1, (Coord::CoordSystem)$3, (Coord::SkyFrame)$4, (Coord::SkyFormat)$5);} | INT CIRCLE_ RADIUS_ coordSystem skyDist {fr->getMarkerCircleRadiusCmd($1, (Coord::CoordSystem)$4, (Coord::SkyDist)$5);} | INT COLOR_ {fr->getMarkerColorCmd($1);} | INT COMPASS_ ARROW_ {fr->getMarkerCompassArrowCmd($1);} | INT COMPASS_ LABEL_ {fr->getMarkerCompassLabelCmd($1);} | INT COMPASS_ RADIUS_ coordSystem skyDist {fr->getMarkerCompassRadiusCmd($1, (Coord::CoordSystem)$4, (Coord::SkyDist)$5);} | INT COMPASS_ SYSTEM_ {fr->getMarkerCompassSystemCmd($1);} | INT COMPOSITE_ GLOBAL_ {fr->getMarkerCompositeCmd($1);} | INT CPANDA_ ANGLE_ {fr->getMarkerCpandaAnglesCmd($1);} | INT CPANDA_ ANGLE_ internalSystem {fr->getMarkerCpandaAnglesCmd($1);} | INT CPANDA_ ANGLE_ coordSystem skyFrame {fr->getMarkerCpandaAnglesCmd($1, (Coord::CoordSystem)$4, (Coord::SkyFrame)$5);} | INT CPANDA_ RADIUS_ coordSystem skyDist {fr->getMarkerCpandaRadiusCmd($1, (Coord::CoordSystem)$4, (Coord::SkyDist)$5);} | INT ELLIPSE_ RADIUS_ coordSystem skyDist {fr->getMarkerEllipseRadiusCmd($1, (Coord::CoordSystem)$4, (Coord::SkyDist)$5);} | INT ELLIPSEANNULUS_ RADIUS_ coordSystem skyDist {fr->getMarkerEllipseAnnulusRadiusCmd($1, (Coord::CoordSystem)$4, (Coord::SkyDist)$5);} | INT EPANDA_ ANGLE_ {fr->getMarkerEpandaAnglesCmd($1);} | INT EPANDA_ ANGLE_ internalSystem {fr->getMarkerEpandaAnglesCmd($1);} | INT EPANDA_ ANGLE_ coordSystem skyFrame {fr->getMarkerEpandaAnglesCmd($1, (Coord::CoordSystem)$4, (Coord::SkyFrame)$5);} | INT EPANDA_ RADIUS_ coordSystem skyDist {fr->getMarkerEpandaRadiusCmd($1, (Coord::CoordSystem)$4, (Coord::SkyDist)$5);} | INT FONT_ {fr->getMarkerFontCmd($1);} | INT HIGHLITE_ {fr->getMarkerHighlitedCmd($1);} | INT LINE_ ARROW_ {fr->getMarkerLineArrowCmd($1);} | INT LINE_ LENGTH_ coordSystem skyDist {fr->getMarkerLineLengthCmd($1, (Coord::CoordSystem)$4, (Coord::SkyDist)$5);} | INT LINE_ POINT_ coordSystem skyFrame skyFormat {fr->getMarkerLineCmd($1, (Coord::CoordSystem)$4, (Coord::SkyFrame)$5, (Coord::SkyFormat)$6);} | INT MAP_ LENGTH_ numeric coordSystem skyDist {fr->getMarkerMapLenFromRefCmd($1, $4, (Coord::CoordSystem)$5,(Coord::SkyDist)$6);} | INT POINT_ SHAPE_ {fr->getMarkerPointShapeCmd($1);} | INT POINT_ SIZE_ {fr->getMarkerPointSizeCmd($1);} | INT PROJECTION_ POINT_ coordSystem skyFrame skyFormat {fr->getMarkerProjectionPointsCmd($1, (Coord::CoordSystem)$4, (Coord::SkyFrame)$5, (Coord::SkyFormat)$6);} | INT PROJECTION_ LENGTH_ coordSystem skyDist {fr->getMarkerProjectionLengthCmd($1, (Coord::CoordSystem)$4, (Coord::SkyDist)$5);} | INT PROJECTION_ THICK_ coordSystem skyDist {fr->getMarkerProjectionWidthCmd($1,(Coord::CoordSystem)$4,(Coord::SkyDist)$5);} | INT PROPERTY_ {fr->getMarkerPropertyCmd($1);} | INT PROPERTY_ markerProperty {fr->getMarkerPropertyCmd($1,$3);} | INT RULER_ LENGTH_ coordSystem skyDist {fr->getMarkerRulerLengthCmd($1,(Coord::CoordSystem)$4,(Coord::SkyDist)$5);} | INT RULER_ POINT_ coordSystem skyFrame skyFormat {fr->getMarkerRulerPointCmd($1, (Coord::CoordSystem)$4, (Coord::SkyFrame)$5, (Coord::SkyFormat)$6);} | INT RULER_ SYSTEM_ {fr->getMarkerRulerSystemCmd($1);} | INT SELECT_ {fr->getMarkerSelectedCmd($1);} | INT TAG_ {fr->getMarkerTagCmd($1);} | INT TAG_ INT {fr->getMarkerTagCmd($1,$3);} | INT TEXT_ {fr->getMarkerTextCmd($1);} | INT TEXT_ ROTATE_ {fr->getMarkerTextRotateCmd($1);} | INT TYPE_ {fr->getMarkerTypeCmd($1);} | INT VECTOR_ ARROW_ {fr->getMarkerVectorArrowCmd($1);} | INT VECTOR_ LENGTH_ coordSystem skyDist {fr->getMarkerVectorLengthCmd($1, (Coord::CoordSystem)$4, (Coord::SkyDist)$5);} | INT VECTOR_ POINT_ coordSystem skyFrame skyFormat {fr->getMarkerVectorCmd($1, (Coord::CoordSystem)$4, (Coord::SkyFrame)$5, (Coord::SkyFormat)$6);} | INT WIDTH_ {fr->getMarkerLineWidthCmd($1);} | HIGHLITE_ markerGetHighlite | HIGHLITE_ NUMBER_ {fr->getMarkerHighlitedNumberCmd();} | NUMBER_ {fr->getMarkerNumberCmd();} | POLYGON_ SEGMENT_ numeric numeric {fr->getMarkerPolygonSegmentCmd(Vector($3,$4));} | SEGMENT_ SEGMENT_ numeric numeric {fr->getMarkerSegmentSegmentCmd(Vector($3,$4));} | PRESERVE_ {fr->getMarkerPreserveCmd();} | PROPERTY_ markerProperty {fr->getMarkerPropertyCmd($2);} | SELECT_ markerGetSelect | SELECT_ NUMBER_ {fr->getMarkerSelectedNumberCmd();} | SHOW_ markerGetShow | STRING COLOR_ {fr->getMarkerColorCmd($1);} | STRING FONT_ {fr->getMarkerFontCmd($1);} | STRING ID_ {fr->getMarkerIdCmd($1);} | STRING PROPERTY_ markerProperty {fr->getMarkerPropertyCmd($1,$3);} | STRING TAG_ {fr->getMarkerTagCmd($1);} | STRING TAG_ NUMBER_ {fr->getMarkerTagNumberCmd($1);} | TAG_ ALL_ {fr->getMarkerTagsCmd();} | TAG_ DEFAULT_ NAME_ {fr->getMarkerTagDefaultNameCmd();} | WIDTH_ {fr->getMarkerLineWidthCmd();} ; markerGetCentroid : AUTO_ {fr->getMarkerCentroidAutoCmd();} | RADIUS_ {fr->getMarkerCentroidRadiusCmd();} | ITERATION_ {fr->getMarkerCentroidIterationCmd();} | OPTION_ {fr->getMarkerCentroidOptionCmd();} ; markerGetHighlite : /* empty */ {fr->getMarkerHighlitedCmd();} | numeric numeric {fr->getMarkerHighlitedCmd(Vector($1,$2));} ; markerGetSelect : /* empty */ {fr->getMarkerSelectedCmd();} | numeric numeric {fr->getMarkerSelectedCmd(Vector($1,$2));} ; markerGetShow : /* empty */ {fr->getMarkerShowCmd();} | TEXT_ {fr->getMarkerShowTextCmd();} ; markerInitProp : { strncpy(currentFont, "helvetica 10 normal roman", 32); strncpy(currentColor, "green", 16); currentDash[0] = 8; currentDash[1] = 3; currentWidth = 1; strncpy(currentText, "", 80); currentProps = defaultProps; taglist.deleteAll(); cblist.deleteAll(); } ; markerLayer : /* empty */ {fr->markerLayerCmd(Base::USER);} | POINTER_ { // backward compatibility fr->markerLayerCmd(Base::USER); } | REGION_ {fr->markerLayerCmd(Base::USER);} | USER_ { // backward compatibility fr->markerLayerCmd(Base::USER); } | CATALOG_ {fr->markerLayerCmd(Base::CATALOG);} | ANALYSIS_ {fr->markerLayerCmd(Base::ANALYSIS);} ; markerList : markerFormat coordSystem skyFrame skyFormat yesno markerQuery markerTags {fr->markerListCmd((Base::MarkerFormat)$1, (Coord::CoordSystem)$2, (Coord::SkyFrame)$3, (Coord::SkyFormat)$4, $5, 0, propQMask, propQValue, taglist);} | SELECT_ markerFormat coordSystem skyFrame skyFormat yesno markerQuery markerTags {fr->markerListCmd((Base::MarkerFormat)$2, (Coord::CoordSystem)$3, (Coord::SkyFrame)$4, (Coord::SkyFormat)$5, $6, 1, propQMask, propQValue, taglist);} ; markerLoad : markerFormat STRING {fr->markerLoadCmd((Base::MarkerFormat)$1,$2);} | markerFormat STRING coordSystem skyFrame {fr->markerLoadCmd((Base::MarkerFormat)$1,$2, (Coord::CoordSystem)$3,(Coord::SkyFrame)$4);} | markerFormat INT {fr->markerLoadCmd((Base::MarkerFormat)$1,$2);} | markerFormat INT coordSystem skyFrame {fr->markerLoadCmd((Base::MarkerFormat)$1,$2, (Coord::CoordSystem)$3,(Coord::SkyFrame)$4);} | FITS_ STRING STRING markerDash INT STRING {fr->markerLoadFitsCmd($2, $3, $4, $5, $6);} ; markerMoveSelected : numeric numeric {fr->markerMoveCmd(Vector($1,$2));} | FRONT_ {fr->markerFrontCmd();} | BACK_ {fr->markerBackCmd();} | BEGIN_ numeric numeric {fr->markerMoveBeginCmd(Vector($2,$3));} | MOTION_ numeric numeric {fr->markerMoveMotionCmd(Vector($2,$3));} | END_ {fr->markerMoveEndCmd();} | TO_ internalSystem coord {fr->markerMoveToCmd(Vector($3), (Coord::InternalSystem)$2);} | TO_ coordSystem skyFrame coord {fr->markerMoveToCmd(Vector($4), (Coord::CoordSystem)$2, (Coord::SkyFrame)$3);} ; markerProps : markerProps markerProp | markerProp ; markerProp : markerProperty '=' yesno {setProps(¤tProps,$1,$3);} | COLOR_ '=' STRING {strncpy(currentColor,$3,16);} | DASHLIST_ '=' INT INT {currentDash[0]=$3;currentDash[1]=$4;} | WIDTH_ '=' INT {currentWidth = $3;} | FONT_ '=' STRING {strncpy(currentFont,$3,32);} | TEXT_ '=' STRING {strncpy(currentText,$3,80);} | tag | callback ; markerProperty : NONE_ {$$ = Marker::NONE;} | SELECT_ {$$ = Marker::SELECT;} | HIGHLITE_ {$$ = Marker::HIGHLITE;} | DASH_ {$$ = Marker::DASH;} | FIXED_ {$$ = Marker::FIXED;} | EDIT_ {$$ = Marker::EDIT;} | MOVE_ {$$ = Marker::MOVE;} | ROTATE_ {$$ = Marker::ROTATE;} | DELETE_ {$$ = Marker::DELETE;} | INCLUDE_ {$$ = Marker::INCLUDE;} | SOURCE_ {$$ = Marker::SOURCE;} ; markerProperties : /* empty */ markerInitProp | markerInitProp markerProps ; markerQuery: /* empty */ {propQMask=0;propQValue=0;} | {propQMask=0;propQValue=0;} queries ; markerSelect : ALL_ {fr->markerSelectAllCmd();} | ONLY_ numeric numeric {fr->markerSelectOnlyCmd(Vector($2,$3));} | TOGGLE_ {fr->markerSelectToggleCmd();} | TOGGLE_ numeric numeric {fr->markerSelectToggleCmd(Vector($2,$3));} ; markerShow : yesno {fr->markerShowCmd($1);} | TEXT_ yesno {fr->markerShowTextCmd($2);} ; queries : queries query | query ; query : markerProperty '=' yesno {propQMask |= $1; setProps(&propQValue,$1,$3);} ; markerTags: /* empty */ {taglist.deleteAll();} | {taglist.deleteAll();} tags ; tags : tags tag | tag ; tag : TAG_ '=' STRING {taglist.append(new Tag($3));} ; callback : CALLBACK_ '=' markerCallBack STRING STRING {cblist.append( new CallBack(fr->getInterp(),(CallBack::Type)$3,$4,$5));} ; mask : CLEAR_ {fr->maskClearCmd();} | COLOR_ STRING {fr->maskColorCmd($2);} | MARK_ INT {fr->maskMarkCmd($2);} | TRANSPARENCY_ numeric {fr->maskTransparencyCmd($2);} ; orient : 'X' {fr->orientCmd(Coord::XX);} | 'Y' {fr->orientCmd(Coord::YY);} | XY_ {fr->orientCmd(Coord::XY);} | NONE_ {fr->orientCmd(Coord::NORMAL);} ; pan : numeric numeric numeric numeric {fr->panCmd(Vector($1,$2),Vector($3,$4));} | numeric numeric {fr->panCmd(Vector($1,$2));} | internalSystem numeric numeric { // backward compatibility fr->panCmd(Vector($2,$3)); } | coordSystem skyFrame coord {fr->panCmd(Vector($3), (Coord::CoordSystem)$1, (Coord::SkyFrame)$2);} | TO_ panTo | BBOX_ numeric numeric {fr->panBBoxCmd(Vector($2,$3));} | MOTION_ panMotion | PRESERVE_ yesno {fr->panPreserveCmd($2);} ; panTo : numeric numeric {fr->panToCmd(Vector($1,$2));} | internalSystem numeric numeric { // backward compatibility fr->panToCmd(Vector($2,$3)); } | coordSystem skyFrame coord {fr->panToCmd(Vector($3), (Coord::CoordSystem)$1, (Coord::SkyFrame)$2);} ; panMotion : BEGIN_ numeric numeric {fr->panBeginCmd(Vector($2,$3));} | numeric numeric {fr->panMotionCmd(Vector($1,$2));} | END_ numeric numeric {fr->panEndCmd(Vector($2,$3));} ; panner : yesno {fr->pannerCmd($1);} | WCS_ wcsSystem skyFrame { // backward compatibility fr->pannerCmd((Coord::CoordSystem)$2,(Coord::SkyFrame)$3); } | STRING INT INT {fr->pannerCmd($1, $2, $3);} | UPDATE_ {fr->updatePannerCmd();} ; postscript : COLORSPACE_ pscolorspace {fr->psColorSpaceCmd((Widget::PSColorSpace)$2);} | LEVEL_ INT {fr->psLevelCmd($2);} | RESOLUTION_ INT {fr->psResolutionCmd($2);} | SCALE_ numeric { // backward compatibility with backup } ; pscolorspace : BW_ {$$ = Widget::BW;} | GRAY_ {$$ = Widget::GRAY;} | RGB_ {$$ = Widget::RGB;} | CMYK_ {$$ = Widget::CMYK;} ; region : HIGHLITE_ regionHighlite | SELECT_ regionSelect ; regionHighlite : BEGIN_ numeric numeric {fr->regionHighliteBeginCmd(Vector($2,$3));} | MOTION_ numeric numeric {fr->regionHighliteMotionCmd(Vector($2,$3));} | END_ {fr->regionHighliteEndCmd();} | SHIFT_ END_ {fr->regionHighliteShiftEndCmd();} ; regionSelect : BEGIN_ numeric numeric {fr->regionSelectBeginCmd(Vector($2,$3));} | MOTION_ numeric numeric {fr->regionSelectMotionCmd(Vector($2,$3));} | END_ {fr->regionSelectEndCmd();} | SHIFT_ END_ {fr->regionSelectShiftEndCmd();} ; renderMethod: MIP_ {$$ = Frame3dBase::MIP;} | AIP_ {$$ = Frame3dBase::AIP;} ; renderBackground: NONE_ {$$ = Frame3dBase::NONE;} | AZIMUTH_ {$$ = Frame3dBase::AZIMUTH;} | ELEVATION_ {$$ = Frame3dBase::ELEVATION;} ; rgb : CHANNEL_ STRING {fr->setRGBChannelCmd($2);} | SYSTEM_ coordSystem {fr->setRGBSystemCmd((Coord::CoordSystem)$2);} | VIEW_ INT INT INT {fr->setRGBViewCmd($2,$3,$4);} ; rotate : numeric {fr->rotateCmd(degToRad($1));} | numeric DEGREES_ {fr->rotateCmd(degToRad($1));} | MOTION_ rotateMotion | TO_ numeric {fr->rotateToCmd(degToRad($2));} | TO_ numeric DEGREES_ {fr->rotateToCmd(degToRad($2));} ; rotateMotion : BEGIN_ {fr->rotateBeginCmd();} | numeric {fr->rotateMotionCmd(degToRad($1));} | END_ {fr->rotateEndCmd();} ; save : ARRAY_ saveArray | FITS_ saveFits | NRRD_ saveNRRD | ENVI_ saveENVI | PHOTO_ STRING {fr->savePhotoCmd($2);} ; saveArray : FILE_ STRING endian {fr->saveArrayFileCmd($2, (FitsFile::ArchType)$3);} | CHANNEL_ STRING endian {fr->saveArrayChannelCmd($2, (FitsFile::ArchType)$3);} | SOCKET_ INT endian {fr->saveArraySocketCmd($2, (FitsFile::ArchType)$3);} | RGB_ CUBE_ saveArrayRGBCube ; saveArrayRGBCube : FILE_ STRING endian {fr->saveArrayRGBCubeFileCmd($2, (FitsFile::ArchType)$3);} | CHANNEL_ STRING endian {fr->saveArrayRGBCubeChannelCmd($2, (FitsFile::ArchType)$3);} | SOCKET_ INT endian {fr->saveArrayRGBCubeSocketCmd($2, (FitsFile::ArchType)$3);} saveFits: /* empty */ saveFitsImage | IMAGE_ saveFitsImage | TABLE_ saveFitsTable | SLICE_ saveFitsSlice | EXT_ CUBE_ saveFitsExtCube | MOSAIC_ saveFitsMosaic | RGB_ IMAGE_ saveFitsRGBImage | RGB_ CUBE_ saveFitsRGBCube | RESAMPLE_ saveFitsResample ; saveFitsImage : FILE_ STRING {fr->saveFitsFileCmd($2);} | CHANNEL_ STRING {fr->saveFitsChannelCmd($2);} | SOCKET_ INT {fr->saveFitsSocketCmd($2);} ; saveFitsTable : FILE_ STRING {fr->saveFitsTableFileCmd($2);} | CHANNEL_ STRING {fr->saveFitsTableChannelCmd($2);} | SOCKET_ INT {fr->saveFitsTableSocketCmd($2);} ; saveFitsSlice : FILE_ STRING {fr->saveFitsSliceFileCmd($2);} | CHANNEL_ STRING {fr->saveFitsSliceChannelCmd($2);} | SOCKET_ INT {fr->saveFitsSliceSocketCmd($2);} ; saveFitsExtCube : FILE_ STRING {fr->saveFitsExtCubeFileCmd($2);} | CHANNEL_ STRING {fr->saveFitsExtCubeChannelCmd($2);} | SOCKET_ INT {fr->saveFitsExtCubeSocketCmd($2);} ; saveFitsMosaic : IMAGE_ saveFitsMosaicImage | FILE_ STRING INT {fr->saveFitsMosaicFileCmd($2,$3);} | CHANNEL_ STRING INT {fr->saveFitsMosaicChannelCmd($2,$3);} | SOCKET_ INT INT {fr->saveFitsMosaicSocketCmd($2,$3);} ; saveFitsMosaicImage : FILE_ STRING {fr->saveFitsMosaicImageFileCmd($2);} | CHANNEL_ STRING {fr->saveFitsMosaicImageChannelCmd($2);} | SOCKET_ INT {fr->saveFitsMosaicImageSocketCmd($2);} ; saveFitsRGBImage : FILE_ STRING {fr->saveFitsRGBImageFileCmd($2);} | CHANNEL_ STRING {fr->saveFitsRGBImageChannelCmd($2);} | SOCKET_ INT {fr->saveFitsRGBImageSocketCmd($2);} ; saveFitsRGBCube : FILE_ STRING {fr->saveFitsRGBCubeFileCmd($2);} | CHANNEL_ STRING {fr->saveFitsRGBCubeChannelCmd($2);} | SOCKET_ INT {fr->saveFitsRGBCubeSocketCmd($2);} ; saveFitsResample : FILE_ STRING {fr->saveFitsResampleFileCmd($2);} | CHANNEL_ STRING {fr->saveFitsResampleChannelCmd($2);} | SOCKET_ INT {fr->saveFitsResampleSocketCmd($2);} ; saveNRRD : FILE_ STRING endian {fr->saveNRRDFileCmd($2, (FitsFile::ArchType)$3);} | CHANNEL_ STRING endian {fr->saveNRRDChannelCmd($2, (FitsFile::ArchType)$3);} | SOCKET_ INT endian {fr->saveNRRDSocketCmd($2, (FitsFile::ArchType)$3);} ; saveENVI : FILE_ STRING STRING endian {fr->saveENVIFileCmd($2, $3, (FitsFile::ArchType)$4);} ; smooth : smoothFunction INT {fr->smoothCmd((Context::SmoothFunction)$1,$2);} | DELETE_ {fr->smoothDeleteCmd();} ; smoothFunction : BOXCAR_ {$$ = Context::BOXCAR;} | GAUSSIAN_ {$$ = Context::GAUSSIAN;} | TOPHAT_ {$$ = Context::TOPHAT;} ; update : /* empty */ {fr->updateFitsCmd(0);} | INT numeric numeric numeric numeric {fr->updateFitsCmd($1,BBox($2,$3,$4,$5),0);} | NOW_ {fr->updateFitsCmd(1);} | NOW_ INT numeric numeric numeric numeric {fr->updateFitsCmd($2,BBox($3,$4,$5,$6),1);} | FITS_ SLICE_ updateFitsSlice ; updateFitsSlice : INT {fr->sliceCmd(2, $1);} | numeric coordSystem {fr->sliceCmd(2, $1, (Coord::CoordSystem)$2);} | INT INT {fr->sliceCmd($1, $2);} | INT numeric coordSystem {fr->sliceCmd($1, $2, (Coord::CoordSystem)$3);} ; warp : numeric numeric {fr->warpCmd(Vector($1,$2));} | TO_ numeric numeric {fr->warpToCmd(Vector($2,$3));} ; wcs : wcsSystem skyFrame skyFormat {fr->wcsCmd((Coord::CoordSystem)$1, (Coord::SkyFrame)$2, (Coord::SkyFormat)$3);} | ALIGN_ wcsAlign | RESET_ INT {fr->wcsResetCmd($2);} | REPLACE_ wcsReplace | APPEND_ wcsAppend ; wcsAppend : INT INT {fr->wcsAppendCmd($1,$2);} | INT STRING {fr->wcsAppendCmd($1,$2);} | TEXT_ INT STRING {fr->wcsAppendTxtCmd($2,$3);} ; wcsReplace : INT INT {fr->wcsReplaceCmd($1,$2);} | INT STRING {fr->wcsReplaceCmd($1,$2);} | TEXT_ INT STRING {fr->wcsReplaceTxtCmd($2,$3);} ; wcsAlign : INT {fr->wcsAlignCmd($1);} | INT wcsSystem skyFrame { // used by backup fr->wcsAlignCmd($1, (Coord::CoordSystem)$2, (Coord::SkyFrame)$3); } | INT POINTER wcsSystem skyFrame {fr->wcsAlignCmd($1, (FitsImage*)$2, (Coord::CoordSystem)$3, (Coord::SkyFrame)$4);} ; win32 : PRINT_ { #ifdef __WIN32 fr->win32PrintCmd(); #endif } ; zoom : numeric numeric {fr->zoomCmd(Vector($1,$2));} | numeric numeric ABOUT_ numeric numeric {fr->zoomAboutCmd(Vector($1,$2),Vector($4,$5));} | numeric numeric ABOUT_ internalSystem numeric numeric { // backward compatibility fr->zoomAboutCmd(Vector($1,$2),Vector($5,$6)); } | numeric numeric ABOUT_ coordSystem skyFrame coord {fr->zoomAboutCmd(Vector($1,$2),Vector($6), (Coord::CoordSystem)$4,(Coord::SkyFrame)$5);} | TO_ zoomTo ; zoomTo : FIT_ {fr->zoomToFitCmd(1);} | FIT_ numeric {fr->zoomToFitCmd($2);} | numeric numeric {fr->zoomToCmd(Vector($1,$2));} | numeric numeric ABOUT_ numeric numeric {fr->zoomToAboutCmd(Vector($1,$2),Vector($4,$5));} | numeric numeric ABOUT_ internalSystem numeric numeric { // backward compatibility fr->zoomToAboutCmd(Vector($1,$2),Vector($5,$6)); } | numeric numeric ABOUT_ coordSystem skyFrame coord {fr->zoomToAboutCmd(Vector($1,$2), Vector($6), (Coord::CoordSystem)$4, (Coord::SkyFrame)$5);} ; %% static void setProps(unsigned short* props, unsigned short prop, int value) { if (value) *props |= prop; else *props &= ~prop; } saods9/tksao/frame/point.C000644 000765 000000 00000051156 12775230632 016053 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "point.h" #include "fitsimage.h" #define NUMSEG 16 Point::Point(Base* p, const Vector& ctr) : Marker(p, ctr, 0) { strcpy(type_, "point"); shape_ = CIRCLE; shapeStr(shape_); size_ = 11; handle = new Vector[4]; numHandle = 4; updateBBox(); } Point::Point(Base* p, const Vector& ctr, PointShape ss, int size, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : Marker(p, ctr, 0, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { strcpy(type_, "point"); shape_ = ss; shapeStr(ss); size_ = size; handle = new Vector[4]; numHandle = 4; updateBBox(); } Point::Point(const Point& a) : Marker(a) { shape_ = a.shape_; shapestr_ = dupstr(a.shapestr_); size_ = a.size_; } Point::~Point() { if (shapestr_) delete [] shapestr_; } // X11 void Point::renderX(Drawable drawable, Coord::InternalSystem sys, RenderMode mode) { GC lgc = renderXGC(mode); Vector* vv = NULL; switch (shape_) { case CIRCLE: renderXCircle(drawable, sys, mode, size_); break; case BOX: renderXBox(drawable, sys, mode); break; case DIAMOND: vv = generateDiamond(sys); XDrawLine(display, drawable, lgc, vv[0][0], vv[0][1], vv[1][0], vv[1][1]); XDrawLine(display, drawable, lgc, vv[1][0], vv[1][1], vv[2][0], vv[2][1]); XDrawLine(display, drawable, lgc, vv[2][0], vv[2][1], vv[3][0], vv[3][1]); XDrawLine(display, drawable, lgc, vv[3][0], vv[3][1], vv[0][0], vv[0][1]); break; case CROSS: vv = generateCross(sys); XDrawLine(display, drawable, lgc, vv[0][0], vv[0][1], vv[1][0], vv[1][1]); XDrawLine(display, drawable, lgc, vv[2][0], vv[2][1], vv[3][0], vv[3][1]); break; case EX: vv = generateEx(sys); XDrawLine(display, drawable, lgc, vv[0][0], vv[0][1], vv[1][0], vv[1][1]); XDrawLine(display, drawable, lgc, vv[2][0], vv[2][1], vv[3][0], vv[3][1]); break; case ARROW: vv = generateArrow(sys); XDrawLine(display, drawable, lgc, vv[0][0], vv[0][1], vv[3][0], vv[3][1]); XDrawLine(display, drawable, lgc, vv[1][0], vv[1][1], vv[3][0], vv[3][1]); XDrawLine(display, drawable, lgc, vv[2][0], vv[2][1], vv[3][0], vv[3][1]); break; case BOXCIRCLE: renderXBox(drawable, sys, mode); renderXCircle(drawable, sys, mode, size_-2); break; } if (vv) delete [] vv; } void Point::renderXCircle(Drawable drawable, Coord::InternalSystem sys, RenderMode mode, int rr) { GC lgc = renderXGC(mode); if (parent->isAzElZero()) { Vector cc = parent->mapFromRef(center,sys); Vector v = cc*Translate(-Vector(rr,rr)/2); #ifndef __WIN32 XDrawArc(display, drawable, lgc, v[0], v[1], rr, rr, 0, 360*64); #else int ss = int(rr/2.+.5)*2; XDrawArc(display, drawable, lgc, v[0], v[1], ss, ss, 0, 360*64); #endif } else { Vector* vv = generateCircle(sys, rr); for (int ii=1; ii<=NUMSEG; ii++) XDrawLine(display, drawable, lgc, vv[ii-1][0], vv[ii-1][1], vv[ii][0], vv[ii][1]); delete [] vv; } } void Point::renderXBox(Drawable drawable, Coord::InternalSystem sys, RenderMode mode) { GC lgc = renderXGC(mode); Vector* vv = generateBox(sys); XDrawLine(display, drawable, lgc, vv[0][0], vv[0][1], vv[1][0], vv[1][1]); XDrawLine(display, drawable, lgc, vv[1][0], vv[1][1], vv[2][0], vv[2][1]); XDrawLine(display, drawable, lgc, vv[2][0], vv[2][1], vv[3][0], vv[3][1]); XDrawLine(display, drawable, lgc, vv[3][0], vv[3][1], vv[0][0], vv[0][1]); delete [] vv; } void Point::renderXLineDash(GC lgc) { char dl[2]; #ifdef __WIN32 dl[0] = dlist[0]/2; dl[1] = dlist[1]/2; #else dl[0] = ceil(dlist[0]/2.); dl[1] = ceil(dlist[1]/2.); #endif int ww = (highlited && canHighlite()) ? lineWidth*2 : lineWidth; XSetDashes(display, lgc, 0, dl, 2); XSetLineAttributes(display, lgc, ww, LineOnOffDash, CapButt, JoinMiter); } // PS void Point::renderPS(int mode) { renderPSGC(mode); Vector* vv =NULL; ostringstream str; switch (shape_) { case CIRCLE: renderPSCircle(mode, size_); break; case BOX: renderPSBox(mode); break; case DIAMOND: vv = generateDiamond(Coord::CANVAS); str << "newpath " << vv[0].TkCanvasPs(parent->canvas) << ' ' << "moveto " << vv[1].TkCanvasPs(parent->canvas) << ' ' << "lineto " << vv[2].TkCanvasPs(parent->canvas) << ' ' << "lineto " << vv[3].TkCanvasPs(parent->canvas) << ' ' << "lineto " << "closepath stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); break; case CROSS: vv = generateCross(Coord::CANVAS); str << "newpath " << vv[0].TkCanvasPs(parent->canvas) << ' ' << "moveto " << vv[1].TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << "newpath " << vv[2].TkCanvasPs(parent->canvas) << ' ' << "moveto " << vv[3].TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); break; case EX: vv = generateEx(Coord::CANVAS); str << "newpath " << vv[0].TkCanvasPs(parent->canvas) << ' ' << "moveto " << vv[1].TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << "newpath " << vv[2].TkCanvasPs(parent->canvas) << ' ' << "moveto " << vv[3].TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); break; case ARROW: vv = generateArrow(Coord::CANVAS); str << "newpath " << vv[0].TkCanvasPs(parent->canvas) << ' ' << "moveto " << vv[3].TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << "newpath " << vv[1].TkCanvasPs(parent->canvas) << ' ' << "moveto " << vv[3].TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << "newpath " << vv[2].TkCanvasPs(parent->canvas) << ' ' << "moveto " << vv[3].TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); break; case BOXCIRCLE: renderPSBox(mode); renderPSCircle(mode,size_-2); break; } if (vv) delete [] vv; } void Point::renderPSCircle(int mode, int ss) { if (parent->isAzElZero()) { Vector cc = parent->mapFromRef(center,Coord::CANVAS); ostringstream str; str << "newpath " << cc.TkCanvasPs(parent->canvas) << ' ' << ss/2. << " 0 360 arc stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } else { Vector* vv = generateCircle(Coord::CANVAS,ss); ostringstream str; str << "newpath " << vv[0].TkCanvasPs(parent->canvas) << " moveto " << endl; for (int ii=1; iicanvas) << " lineto" << endl; str << "closepath stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); delete [] vv; } } void Point::renderPSBox(int mode) { Vector* vv = generateBox(Coord::CANVAS); ostringstream str; str << "newpath " << vv[0].TkCanvasPs(parent->canvas) << ' ' << "moveto " << vv[1].TkCanvasPs(parent->canvas) << ' ' << "lineto " << vv[2].TkCanvasPs(parent->canvas) << ' ' << "lineto " << vv[3].TkCanvasPs(parent->canvas) << ' ' << "lineto " << endl << "closepath stroke" << endl << ends; Tcl_AppendResult(parent->interp, (char*)str.str().c_str(), NULL); delete [] vv; } void Point::renderPSLineDash() { ostringstream str; str << lineWidth << " setlinewidth" << endl; str << '[' << dlist[0]/2. << ' ' << dlist[1]/2. << "] 0 setdash" << endl << ends; Tcl_AppendResult(parent->interp, (char*)str.str().c_str(), NULL); } // MacOSX #ifdef MAC_OSX_TK void Point::renderMACOSX() { renderMACOSXGC(); Vector* vv = NULL; switch (shape_) { case CIRCLE: renderMACOSXCircle(size_); break; case BOX: renderMACOSXBox(); break; case DIAMOND: vv = generateDiamond(Coord::CANVAS); macosxDrawLines(vv,5); break; case CROSS: vv = generateCross(Coord::CANVAS); macosxDrawLine(vv[0],vv[1]); macosxDrawLine(vv[2],vv[3]); break; case EX: vv = generateEx(Coord::CANVAS); macosxDrawLine(vv[0],vv[1]); macosxDrawLine(vv[2],vv[3]); break; case ARROW: vv = generateArrow(Coord::CANVAS); macosxDrawLine(vv[0],vv[3]); macosxDrawLine(vv[1],vv[3]); macosxDrawLine(vv[2],vv[3]); break; case BOXCIRCLE: renderMACOSXBox(); renderMACOSXCircle(size_-2); break; } if (vv) delete [] vv; } void Point::renderMACOSXCircle(int ss) { renderMACOSXGC(); if (parent->isAzElZero()) { Vector cc = parent->mapFromRef(center,Coord::CANVAS); macosxDrawArc(cc, ss/2., 0, M_TWOPI); } else { Vector* vv = generateCircle(Coord::CANVAS, ss); macosxDrawLines(vv,NUMSEG+1); delete [] vv; } } void Point::renderMACOSXBox() { renderMACOSXGC(); Vector* vv = generateBox(Coord::CANVAS); macosxDrawLines(vv,5); delete [] vv; } void Point::renderMACOSXLineDash() { macosxWidth(lineWidth); float dl[2]; dl[0] = dlist[0]/2.; dl[1] = dlist[1]/2.; macosxDash(dl,2); } #endif // WIN32 #ifdef __WIN32 void Point::renderWIN32() { renderWIN32GC(); Vector* vv = NULL; switch (shape_) { case CIRCLE: renderWIN32Circle(size_); break; case BOX: renderWIN32Box(); break; case DIAMOND: vv = generateDiamond(Coord::CANVAS); win32DrawLines(vv,5); break; case CROSS: vv = generateCross(Coord::CANVAS); win32DrawLine(vv[0],vv[1]); win32DrawLine(vv[2],vv[3]); break; case EX: vv = generateEx(Coord::CANVAS); win32DrawLine(vv[0],vv[1]); win32DrawLine(vv[2],vv[3]); break; case ARROW: vv = generateArrow(Coord::CANVAS); win32DrawLine(vv[0],vv[3]); win32DrawLine(vv[1],vv[3]); win32DrawLine(vv[2],vv[3]); break; case BOXCIRCLE: renderWIN32Box(); renderWIN32Circle(size_-2); break; } if (vv) delete [] vv; } void Point::renderWIN32Circle(int ss) { if (parent->isAzElZero()) { Vector cc = parent->mapFromRef(center,Coord::CANVAS); win32DrawArc(cc, ss/2., 0, M_TWOPI); } else { Vector* vv = generateCircle(Coord::CANVAS, ss); win32DrawLines(vv,NUMSEG+1); delete [] vv; } } void Point::renderWIN32Box() { Vector* vv = generateBox(Coord::CANVAS); win32DrawLines(vv,5); delete [] vv; } void Point::renderWIN32LineDash() { win32Width(lineWidth); float dl[2]; dl[0] = dlist[0]/2.; dl[1] = dlist[1]/2.; win32Dash(dl,2); } #endif // Support Vector* Point::generateCircle(Coord::InternalSystem sys, int ss) { Vector* vv = new Vector[NUMSEG+1]; Matrix mm; Matrix nn; setMatrices(sys,&mm,&nn); Vector cc = center*mm; for (int ii=0; iimapFromRef(bb,sys); } vv[NUMSEG] = vv[0]; return vv; } Vector* Point::generateBox(Coord::InternalSystem sys) { Vector* vv = new Vector[5]; Matrix mm; Matrix nn; setMatrices(sys,&mm,&nn); double ss = size_/2; Vector cc = center*mm; Vector v1a = cc+Vector(-ss,-ss); Vector v1b = v1a*nn; vv[0] = parent->mapFromRef(v1b,sys); Vector v2a = cc+Vector(-ss,ss); Vector v2b = v2a*nn; vv[1] = parent->mapFromRef(v2b,sys); Vector v3a = cc+Vector(ss,ss); Vector v3b = v3a*nn; vv[2] = parent->mapFromRef(v3b,sys); Vector v4a = cc+Vector(ss,-ss); Vector v4b = v4a*nn; vv[3] = parent->mapFromRef(v4b,sys); vv[4] = vv[0]; return vv; } Vector* Point::generateDiamond(Coord::InternalSystem sys) { Vector* vv = new Vector[5]; Matrix mm; Matrix nn; setMatrices(sys,&mm,&nn); Vector xx = Vector(size_-1,0)/2; Vector yy = Vector(0,size_-1)/2; Vector cc = center*mm; Vector v1a = cc-xx; Vector v1b = v1a*nn; vv[0] = parent->mapFromRef(v1b,sys); Vector v2a = cc-yy; Vector v2b = v2a*nn; vv[1] = parent->mapFromRef(v2b,sys); Vector v3a = cc+xx; Vector v3b = v3a*nn; vv[2] = parent->mapFromRef(v3b,sys); Vector v4a = cc+yy; Vector v4b = v4a*nn; vv[3] = parent->mapFromRef(v4b,sys); vv[4] = vv[0]; return vv; } Vector* Point::generateCross(Coord::InternalSystem sys) { Vector* vv = new Vector[4]; Matrix mm; Matrix nn; setMatrices(sys,&mm,&nn); Vector xx = Vector(size_,0)/2; Vector yy = Vector(0,size_)/2; Vector cc = center*mm; Vector v1a = cc-xx; Vector v1b = v1a*nn; vv[0] = parent->mapFromRef(v1b,sys); Vector v2a = cc+xx; Vector v2b = v2a*nn; vv[1] = parent->mapFromRef(v2b,sys); Vector v3a = cc-yy; Vector v3b = v3a*nn; vv[2] = parent->mapFromRef(v3b,sys); Vector v4a = cc+yy; Vector v4b = v4a*nn; vv[3] = parent->mapFromRef(v4b,sys); return vv; } Vector* Point::generateEx(Coord::InternalSystem sys) { Vector* vv = new Vector[4]; Matrix mm; Matrix nn; setMatrices(sys,&mm,&nn); Vector xy = Vector(-size_,-size_)/2; Vector yx = Vector( size_,-size_)/2; Vector cc = center*mm; Vector v1a = cc+xy; Vector v1b = v1a*nn; vv[0] = parent->mapFromRef(v1b,sys); Vector v2a = cc-xy; Vector v2b = v2a*nn; vv[1] = parent->mapFromRef(v2b,sys); Vector v3a = cc+yx; Vector v3b = v3a*nn; vv[2] = parent->mapFromRef(v3b,sys); Vector v4a = cc-yx; Vector v4b = v4a*nn; vv[3] = parent->mapFromRef(v4b,sys); return vv; } Vector* Point::generateArrow(Coord::InternalSystem sys) { Vector* vv = new Vector[4]; Matrix mm; Matrix nn; setMatrices(sys,&mm,&nn); Vector xx = Vector(-size_,0)/2; Vector yy = Vector(0,-size_)/2; Vector cc = center*mm; Vector v1a = cc+xx; Vector v1b = v1a*nn; vv[0] = parent->mapFromRef(v1b,sys); Vector v2a = cc+yy; Vector v2b = v2a*nn; vv[1] = parent->mapFromRef(v2b,sys); Vector v3a = cc+xx+yy; Vector v3b = v3a*nn; vv[2] = parent->mapFromRef(v3b,sys); Vector v4a = cc; Vector v4b = v4a*nn; vv[3] = parent->mapFromRef(v4b,sys); return vv; } void Point::shapeStr(PointShape ss) { switch (ss) { case CIRCLE: shapestr_ = dupstr("circle"); break; case BOX: shapestr_ = dupstr("box"); break; case DIAMOND: shapestr_ = dupstr("diamond"); break; case CROSS: shapestr_ = dupstr("cross"); break; case EX: shapestr_ = dupstr("x"); break; case ARROW: shapestr_ = dupstr("arrow"); break; case BOXCIRCLE: shapestr_ = dupstr("boxcircle"); break; } } void Point::setShape(PointShape ss) { shape_ = ss; shapeStr(ss); updateBBox(); doCallBack(CallBack::EDITCB); } void Point::setSize(int size) { size_ = size; updateBBox(); doCallBack(CallBack::EDITCB); } void Point::updateHandles() { // bound marker double ss = size_/2; Vector cc = center*parent->refToCanvas; Vector lla = cc+Vector(-ss,-ss); Vector llb = lla*parent->canvasToRef; Vector ll = parent->mapFromRef(llb,Coord::CANVAS); Vector lra = cc+Vector(-ss,ss); Vector lrb = lra*parent->canvasToRef; Vector lr = parent->mapFromRef(lrb,Coord::CANVAS); Vector ura = cc+Vector(ss,ss); Vector urb = ura*parent->canvasToRef; Vector ur = parent->mapFromRef(urb,Coord::CANVAS); Vector ula = cc+Vector(ss,-ss); Vector ulb = ula*parent->canvasToRef; Vector ul = parent->mapFromRef(ulb,Coord::CANVAS); handle[0] = ll; handle[1] = lr; handle[2] = ur; handle[3] = ul; } void Point::analysis(AnalysisTask mm, int which) { switch (mm) { case PLOT3D: if (!analysisPlot3d_ && which) { addCallBack(CallBack::MOVECB, analysisPlot3dCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisPlot3dCB_[1], parent->options->cmdName); } if (analysisPlot3d_ && !which) { deleteCallBack(CallBack::MOVECB, analysisPlot3dCB_[0]); deleteCallBack(CallBack::DELETECB, analysisPlot3dCB_[1]); } analysisPlot3d_ = which; break; default: // na break; } } void Point::analysisPlot3d(char* xname, char* yname, Coord::CoordSystem sys, Marker::AnalysisMethod method) { double* x; double* y; Vector ll = -Vector(.5,.5) * Translate(center); Vector ur = Vector(.5,.5) * Translate(center); BBox bb(ll,ur); int num = parent->markerAnalysisPlot3d(this, &x, &y, bb, sys, method); analysisXYResult(xname, yname, x, y, num); } int Point::isInRef(const Vector& vv) { Vector& pp = (Vector&)vv; if (pp[0]<-.5 || pp[0]>=.5 || pp[1]<-.5 || pp[1]>=.5) return 0; else return 1; } // list void Point::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 0); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ')'; break; } } else listNonCel(ptr, str, sys); } listPost(str, conj, strip); } void Point::listNonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { Vector vv = ptr->mapFromRef(center,sys); str << type_ << '(' << setprecision(8) << vv << ')'; } void Point::listPost(ostream& str, int conj, int strip) { // no props for semicolons if (!strip) { if (conj) str << " ||"; str << " # point=" << shapestr_; if (size_ != POINTSIZE) str << ' ' << size_; listProperties(str,0); } else { if (conj) str << "||"; else str << ';'; } } void Point::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowCenter(ptr,sys,sky,format); XMLRow(XMLPARAM,shapestr_); XMLRow(XMLPARAM2,size_); XMLRowProps(ptr,sys); XMLRowEnd(str); } void Point::listCiao(ostream& str, Coord::CoordSystem sys, int strip) { FitsImage* ptr = parent->findFits(); listCiaoPre(str); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector vv = ptr->mapFromRef(center,Coord::PHYSICAL); str << type_ << '(' << setprecision(8) << vv << ')'; } break; default: if (ptr->hasWCSCel(sys)) { listRADEC(ptr,center,sys,Coord::FK5,Coord::SEXAGESIMAL); str << type_ << '(' << ra << ',' << dec << ')'; } break; } listCiaoPost(str, strip); } void Point::listPros(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); switch (sys) { case Coord::IMAGE: case Coord::DETECTOR: case Coord::AMPLIFIER: sys = Coord::IMAGE; case Coord::PHYSICAL: { coord.listProsCoordSystem(str,sys,sky); str << "; "; Vector vv = ptr->mapFromRef(center,sys); str << type_ << ' ' << setprecision(8) << vv; } break; default: if (ptr->hasWCSCel(sys)) { coord.listProsCoordSystem(str,sys,sky); str << "; "; switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << ' ' << setprecision(10) << setunit('d') << vv; } break; case Coord::SEXAGESIMAL: listRADECPros(ptr,center,sys,sky,format); str << type_ << ' ' << ra << ' ' << dec; break; } } } listProsPost(str, strip); } void Point::listSAOtng(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); listSAOtngPre(str, strip); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector vv = ptr->mapFromRef(center,Coord::IMAGE); str << type_ << '(' << setprecision(8) << vv << ')'; } break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ')'; break; } } } listSAOtngPost(str,strip); } void Point::listSAOimage(ostream& str, int strip) { FitsImage* ptr = parent->findFits(); listSAOimagePre(str); // all coords are in image coords Vector vv = ptr->mapFromRef(center,Coord::IMAGE); str << type_ << '(' << setprecision(8) << vv << ')'; listSAOimagePost(str, strip); } saods9/tksao/frame/point.h000644 000765 000000 00000005700 12752662217 016115 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __point_h__ #define __point_h__ #include "marker.h" class Point : public Marker { public: enum PointShape {CIRCLE,BOX,DIAMOND,CROSS,EX,ARROW,BOXCIRCLE}; protected: PointShape shape_; char* shapestr_; int size_; protected: Vector* generateCircle(Coord::InternalSystem, int); Vector* generateBox(Coord::InternalSystem); Vector* generateDiamond(Coord::InternalSystem); Vector* generateCross(Coord::InternalSystem); Vector* generateEx(Coord::InternalSystem); Vector* generateArrow(Coord::InternalSystem); void renderXCircle(Drawable, Coord::InternalSystem, RenderMode, int); void renderXBox(Drawable drawable, Coord::InternalSystem sys, RenderMode mode); void renderXLineDash(GC lgc); void renderPSCircle(int,int); void renderPSBox(int); void renderPSLineDash(); #ifdef MAC_OSX_TK void renderMACOSXCircle(int); void renderMACOSXBox(); void renderMACOSXLineDash(); #endif #ifdef __WIN32 void renderWIN32Circle(int); void renderWIN32Box(); void renderWIN32LineDash(); #endif void shapeStr(PointShape); void updateHandles(); int isInRef(const Vector&); void listNonCel(FitsImage*, ostream&, Coord::CoordSystem); public: Point(Base* p, const Vector& ctr); Point(Base* p, const Vector& ctr, PointShape shape, int size, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Point(const Point&); virtual ~Point(); virtual Marker* dup() {return new Point(*this);} void renderX(Drawable, Coord::InternalSystem, RenderMode); void renderPS(int mode); #ifdef MAC_OSX_TK void renderMACOSX(); #endif #ifdef __WIN32 void renderWIN32(); #endif const char* shape() {return shapestr_;} void setShape(PointShape); int size() {return size_;} void setSize(int); void editBegin(int) {} void edit(const Vector& v, int h) {} void editEnd() {} void rotateBegin() {} void rotate(const Vector& v, int h) {} void rotateEnd() {} void analysis(AnalysisTask, int); void analysisPlot3d(char*, char*, Coord::CoordSystem sys, Marker::AnalysisMethod); int isIn(const Vector& vv, Coord::InternalSystem sys) {return isInRef(bckMap(vv,sys));} int isIn(const Vector& vv, const Matrix& bck) {return isInRef(vv*bck);} void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void listPost(ostream&, int, int); virtual void listCiao(ostream&, Coord::CoordSystem, int); virtual void listPros(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); virtual void listSAOtng(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); virtual void listSAOimage(ostream&, int); }; #endif saods9/tksao/frame/polygon.C000644 000765 000000 00000032161 12765612244 016406 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "polygon.h" #include "fitsimage.h" Polygon::Polygon(Base* p, const Vector& ctr, const Vector& b) : BasePolygon(p,ctr,b) { strcpy(type_, "polygon"); reset(b); } Polygon::Polygon(Base* p, const Vector& ctr, const Vector& b, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BasePolygon(p, ctr, b, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { strcpy(type_, "polygon"); reset(b); } Polygon::Polygon(Base* p, const List& v, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BasePolygon(p, v, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { strcpy(type_, "polygon"); // check to see if the first and last node are the same if (vertex.head()->vector[0] == vertex.tail()->vector[0] && vertex.head()->vector[1] == vertex.tail()->vector[1]) delete vertex.pop(); } void Polygon::renderX(Drawable drawable, Coord::InternalSystem sys, RenderMode mode) { GC lgc = renderXGC(mode); vertex.head(); Vector v1; Vector v2 = fwdMap(vertex.current()->vector,sys); int done = 0; do { if (!vertex.next()) { done = 1; vertex.head(); } v1 = v2; v2 = fwdMap(vertex.current()->vector,sys); XDrawLine(display, drawable, lgc, v1[0], v1[1], v2[0], v2[1]); } while (!done); } void Polygon::renderPS(int mode) { renderPSGC(mode); vertex.head(); int first = 1; do { ostringstream str; Vector v = fwdMap(vertex.current()->vector,Coord::CANVAS); if (first) { str << "newpath " << endl << v.TkCanvasPs(parent->canvas) << " moveto" << endl << ends; first = 0; } else str << v.TkCanvasPs(parent->canvas) << " lineto" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } while (vertex.next()); ostringstream str; str << "closepath stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } #ifdef MAC_OSX_TK void Polygon::renderMACOSX() { renderMACOSXGC(); vertex.head(); Vector v1; Vector v2 = fwdMap(vertex.current()->vector,Coord::CANVAS); int done = 0; do { if (!vertex.next()) { done = 1; vertex.head(); } v1 = v2; v2 = fwdMap(vertex.current()->vector,Coord::CANVAS); macosxDrawLine(v1,v2); } while (!done); } #endif #ifdef __WIN32 void Polygon::renderWIN32() { renderWIN32GC(); vertex.head(); Vector v1; Vector v2 = fwdMap(vertex.current()->vector,Coord::CANVAS); int done = 0; do { if (!vertex.next()) { done = 1; vertex.head(); } v1 = v2; v2 = fwdMap(vertex.current()->vector,Coord::CANVAS); win32DrawLine(v1,v2); } while (!done); } #endif void Polygon::reset(const Vector& b) { angle = 0; vertex.deleteAll(); Vector bb = b; vertex.append(new Vertex(-bb[0],-bb[1])); vertex.append(new Vertex( bb[0],-bb[1])); vertex.append(new Vertex( bb[0], bb[1])); vertex.append(new Vertex(-bb[0], bb[1])); updateBBox(); } int Polygon::isInRef(const Vector& v) { /* v[0]-- x value of point being tested v[1]-- y value of point being tested This algorithm is from "An Introduction to Ray Tracing", Academic Press, 1989, edited by Andrew Glassner, pg 53 -- a point lies in a polygon if a line is extended from the point to infinite in any direction and the number of intersections with the polygon is odd. This is valid for both concave and convex polygons. Points on a vertex are considered inside. Points on a edge are considered inside. */ int crossings = 0; // number of crossings vertex.head(); Vector v1; Vector v2 = vertex.current()->vector - v; int sign = ((v2[1])>=0) ? 1 : -1; // init sign // for all edges int done = 0; do { // look at next two vertices v1 = v2; if (!vertex.next()) { done = 1; vertex.head(); } v2 = vertex.current()->vector - v; int nextSign = (v2[1]>=0) ? 1 : -1; // sign holder for p2 if (sign != nextSign) { if (v1[0]>0 && v2[0]>0) crossings++; else if (v1[0]>0 || v2[0]>0) { if (v1[0]-(v1[1]*(v2[0]-v1[0])/(v2[1]-v1[1])) > 0) crossings++; } sign = nextSign; } } while (!done); return fmod(float(crossings),float(2)) ? 1 : 0; // if odd, point is inside } int Polygon::getSegment(const Vector& v) { // v is in canvas coords Matrix mm = fwdMatrix(); vertex.head(); Vector v1; Vector v2 = vertex.current()->vector * mm; int done = 0; int ii = 1; do { v1 = v2; if (!vertex.next()) { vertex.head(); done = 1; } v2 = vertex.current()->vector * mm; Vector l1 = parent->mapFromRef(v1,Coord::CANVAS); Vector l2 = parent->mapFromRef(v2,Coord::CANVAS); double a = (l2-l1).angle(); Matrix mx = Translate(-l1) * FlipY() * Rotate(-a); Vector end = l2*mx; Vector vv = v*mx; if (vv[0]>0 && vv[0]-parent->markerEpsilon && vv[1]markerEpsilon) return ii; ii++; } while (!done); return 0; } void Polygon::analysis(AnalysisTask mm, int which) { switch (mm) { case HISTOGRAM: if (!analysisHistogram_ && which) { addCallBack(CallBack::MOVECB, analysisHistogramCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisHistogramCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisHistogramCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisHistogramCB_[1], parent->options->cmdName); } if (analysisHistogram_ && !which) { deleteCallBack(CallBack::MOVECB, analysisHistogramCB_[0]); deleteCallBack(CallBack::EDITCB, analysisHistogramCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisHistogramCB_[0]); deleteCallBack(CallBack::DELETECB, analysisHistogramCB_[1]); } analysisHistogram_ = which; break; case PLOT3D: if (!analysisPlot3d_ && which) { addCallBack(CallBack::MOVECB, analysisPlot3dCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisPlot3dCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisPlot3dCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisPlot3dCB_[1], parent->options->cmdName); } if (analysisPlot3d_ && !which) { deleteCallBack(CallBack::MOVECB, analysisPlot3dCB_[0]); deleteCallBack(CallBack::EDITCB, analysisPlot3dCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisPlot3dCB_[0]); deleteCallBack(CallBack::DELETECB, analysisPlot3dCB_[1]); } analysisPlot3d_ = which; break; case STATS: if (!analysisStats_ && which) { addCallBack(CallBack::MOVECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::EDITCB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::ROTATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisStatsCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisStatsCB_[1], parent->options->cmdName); } if (analysisStats_ && !which) { deleteCallBack(CallBack::MOVECB, analysisStatsCB_[0]); deleteCallBack(CallBack::EDITCB, analysisStatsCB_[0]); deleteCallBack(CallBack::ROTATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisStatsCB_[0]); deleteCallBack(CallBack::DELETECB, analysisStatsCB_[1]); } analysisStats_ = which; break; default: // na break; } } void Polygon::analysisHistogram(char* xname, char* yname, int num) { double* x; double* y; BBox bb(center); Matrix mm = Rotate(angle) * Translate(center); vertex.head(); do bb.bound(vertex.current()->vector * mm); while (vertex.next()); parent->markerAnalysisHistogram(this, &x, &y, bb, num); analysisXYResult(xname, yname, x, y, num+1); } void Polygon::analysisPlot3d(char* xname, char* yname, Coord::CoordSystem sys, Marker::AnalysisMethod method) { double* x; double* y; BBox bb(center); Matrix mm = Rotate(angle) * Translate(center); vertex.head(); do bb.bound(vertex.current()->vector * mm); while (vertex.next()); int num = parent->markerAnalysisPlot3d(this, &x, &y, bb, sys, method); analysisXYResult(xname, yname, x, y, num); } void Polygon::analysisStats(Coord::CoordSystem sys, Coord::SkyFrame sky) { ostringstream str; BBox bb(center); Matrix mm = Rotate(angle) * Translate(center); vertex.head(); do bb.bound(vertex.current()->vector * mm); while (vertex.next()); parent->markerAnalysisStats(this, str, bb, sys, sky); str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } // list void Polygon::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 0); listBase(ptr, str, sys, sky, format); listPost(str, conj, strip); } void Polygon::listCiao(ostream& str, Coord::CoordSystem sys, int strip) { FitsImage* ptr = parent->findFits(); Matrix mm = fwdMatrix(); listCiaoPre(str); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { str << type_ << '('; int first=1; vertex.head(); do { if (!first) str << ','; first=0; Vector vv = ptr->mapFromRef(vertex.current()->vector*mm,Coord::PHYSICAL); str << setprecision(8) << vv; } while (vertex.next()); str << ')'; } break; default: if (ptr->hasWCSCel(sys)) { str << type_ << '('; int first=1; vertex.head(); do { if (!first) str << ','; first=0; listRADEC(ptr,vertex.current()->vector*mm,sys, Coord::FK5,Coord::SEXAGESIMAL); str << ra << ',' << dec; } while (vertex.next()); str << ')'; } } listCiaoPost(str, strip); } void Polygon::listPros(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); Matrix mm = fwdMatrix(); switch (sys) { case Coord::IMAGE: case Coord::DETECTOR: case Coord::AMPLIFIER: sys = Coord::IMAGE; case Coord::PHYSICAL: { coord.listProsCoordSystem(str,sys,sky); str << "; " << type_; vertex.head(); do { Vector vv = ptr->mapFromRef(vertex.current()->vector*mm,sys); str << ' ' << setprecision(8) << vv; } while (vertex.next()); } break; default: if (ptr->hasWCSCel(sys)) { coord.listProsCoordSystem(str,sys,sky); str << "; " << type_; switch (format) { case Coord::DEGREES: { vertex.head(); do { Vector vv = ptr->mapFromRef(vertex.current()->vector*mm,sys,sky); str << ' ' << setprecision(10) << setunit('d') << vv; } while (vertex.next()); } break; case Coord::SEXAGESIMAL: vertex.head(); do { listRADECPros(ptr,vertex.current()->vector*mm,sys,sky,format); str << ' ' << ra << ' ' << dec; } while (vertex.next()); break; } } } listProsPost(str, strip); } void Polygon::listSAOtng(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { FitsImage* ptr = parent->findFits(); Matrix mm = fwdMatrix(); listSAOtngPre(str, strip); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { str << type_ << '('; int first=1; vertex.head(); do { if (!first) str << ','; first=0; Vector vv = ptr->mapFromRef(vertex.current()->vector*mm,sys); str << setprecision(8) << vv; } while (vertex.next()); str << ')'; } break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { str << type_ << '('; int first=1; vertex.head(); do { if (!first) str << ','; first=0; Vector vv = ptr->mapFromRef(vertex.current()->vector*mm,sys,sky); str << setprecision(10) << vv; } while (vertex.next()); str << ')'; } break; case Coord::SEXAGESIMAL: { str << type_ << '('; int first=1; vertex.head(); do { if (!first) str << ','; first=0; listRADEC(ptr,vertex.current()->vector*mm,sys,sky,format); str << ra << ',' << dec; } while (vertex.next()); str << ')'; } break; } } } listSAOtngPost(str, strip); } void Polygon::listSAOimage(ostream& str, int strip) { FitsImage* ptr = parent->findFits(); listSAOimagePre(str); Matrix mm = fwdMatrix(); str << type_ << '('; int first=1; vertex.head(); do { if (!first) str << ','; first=0; Vector vv = ptr->mapFromRef(vertex.current()->vector*mm,Coord::IMAGE); str << setprecision(8) << vv; } while (vertex.next()); str << ')'; listSAOimagePost(str, strip); } saods9/tksao/frame/polygon.h000644 000765 000000 00000003742 12751154240 016446 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __polygon_h__ #define __polygon_h__ #include "basepolygon.h" #include "marker.h" #include "list.h" class Polygon : public BasePolygon { protected: int isInRef(const Vector& v); void renderX(Drawable, Coord::InternalSystem, RenderMode); void renderPS(int); #ifdef MAC_OSX_TK void renderMACOSX(); #endif #ifdef __WIN32 void renderWIN32(); #endif public: Polygon(Base* p, const Vector& ctr, const Vector& b); Polygon(Base* p, const Vector& ctr, const Vector& b, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Polygon(Base* p, const List& v, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Polygon(const Polygon& a) : BasePolygon(a) {} Marker* dup() {return new Polygon(*this);} void analysis(AnalysisTask, int); void analysisHistogram(char*, char*, int); void analysisPlot3d(char*, char*, Coord::CoordSystem, Marker::AnalysisMethod); void analysisStats(Coord::CoordSystem, Coord::SkyFrame sky); int isIn(const Vector& vv) {return isIn(vv, Coord::CANVAS);} int isIn(const Vector& vv, Coord::InternalSystem sys) {return isInRef(bckMap(vv,sys));} int isIn(const Vector& vv, const Matrix& bck) {return isInRef(vv*bck);} int getSegment(const Vector&); void reset(const Vector&); void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listCiao(ostream&, Coord::CoordSystem, int); void listSAOtng(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); void listSAOimage(ostream&, int); void listPros(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); }; #endif saods9/tksao/frame/projection.C000644 000765 000000 00000023141 12775230632 017067 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "projection.h" #include "fitsimage.h" Projection::Projection(const Projection& a) : BaseLine(a) { width = a.width; p3 = a.p3; p4 = a.p4; } Projection::Projection(Base* p, const Vector& ptr1, const Vector& ptr2, double wd, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseLine(p, ptr1, ptr2, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { width = wd; strcpy(type_,"projection"); handle = new Vector[3]; numHandle = 3; // this causes a focus problem with MacOSX and X11? // analysis(PLOT2D,1); updateBBox(); } void Projection::renderX(Drawable drawable, Coord::InternalSystem sys, RenderMode mode) { GC lgc = renderXGC(mode); Vector aa = parent->mapFromRef(p1,sys); Vector bb = parent->mapFromRef(p2,sys); XDrawLine(display, drawable, lgc, aa[0], aa[1], bb[0], bb[1]); if (width>0) { renderXLineDash(lgc); Matrix imm = bckMatrix(); Vector a = p1*imm; Vector b = p2*imm; Vector c = Vector(0,-width); Vector ll = fwdMap(a,sys); Vector lr = fwdMap(b,sys); Vector ul = fwdMap(a+c,sys); Vector ur = fwdMap(b+c,sys); XDrawLine(display, drawable, lgc, lr[0], lr[1], ur[0], ur[1]); XDrawLine(display, drawable, lgc, ur[0], ur[1], ul[0], ul[1]); XDrawLine(display, drawable, lgc, ul[0], ul[1], ll[0], ll[1]); } } GC Projection::renderXGC(RenderMode mode) { // set width, color, dash switch (mode) { case SRC: XSetForeground(display, gc, color); renderXLineNoDash(gc); return gc; case XOR: renderXLineDash(gcxor); return gcxor; } } void Projection::renderPS(int mode) { renderPSGC(mode); Vector aa = parent->mapFromRef(p1,Coord::CANVAS); Vector bb = parent->mapFromRef(p2,Coord::CANVAS); { ostringstream str; str << "newpath " << aa.TkCanvasPs(parent->canvas) << ' ' << "moveto " << bb.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } if (width>0) { renderPSLineDash(); Matrix imm = bckMatrix(); Vector a = p1*imm; Vector b = p2*imm; Vector c = Vector(0,-width); Vector ll = fwdMap(a,Coord::CANVAS); Vector lr = fwdMap(b,Coord::CANVAS); Vector ul = fwdMap(a+c,Coord::CANVAS); Vector ur = fwdMap(b+c,Coord::CANVAS); ostringstream str; str << "newpath " << lr.TkCanvasPs(parent->canvas) << ' ' << "moveto " << ur.TkCanvasPs(parent->canvas) << ' ' << "lineto " << ul.TkCanvasPs(parent->canvas) << ' ' << "lineto " << ll.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } } void Projection::renderPSGC(int mode) { renderPSColor(mode, parent->getXColor(colorName)); renderPSLineNoDash(); } #ifdef MAC_OSX_TK void Projection::renderMACOSX() { renderMACOSXGC(); Vector aa = parent->mapFromRef(p1,Coord::CANVAS); Vector bb = parent->mapFromRef(p2,Coord::CANVAS); macosxDrawLine(aa,bb); if (width>0) { renderMACOSXLineDash(); Matrix imm = bckMatrix(); Vector a = p1*imm; Vector b = p2*imm; Vector c = Vector(0,-width); Vector ll = fwdMap(a,Coord::CANVAS); Vector lr = fwdMap(b,Coord::CANVAS); Vector ul = fwdMap(a+c,Coord::CANVAS); Vector ur = fwdMap(b+c,Coord::CANVAS); macosxDrawLine(lr,ur); macosxDrawLine(ur,ul); macosxDrawLine(ul,ll); } } void Projection::renderMACOSXGC() { macosxColor(parent->getXColor(colorName)); renderMACOSXLineNoDash(); } #endif #ifdef __WIN32 void Projection::renderWIN32() { renderWIN32GC(); Vector aa = parent->mapFromRef(p1,Coord::CANVAS); Vector bb = parent->mapFromRef(p2,Coord::CANVAS); win32DrawLine(aa,bb); if (width>0) { renderWIN32LineDash(); Matrix imm = bckMatrix(); Vector a = p1*imm; Vector b = p2*imm; Vector c = Vector(0,-width); Vector ll = fwdMap(a,Coord::CANVAS); Vector lr = fwdMap(b,Coord::CANVAS); Vector ul = fwdMap(a+c,Coord::CANVAS); Vector ur = fwdMap(b+c,Coord::CANVAS); win32DrawLine(lr,ur); win32DrawLine(ur,ul); win32DrawLine(ul,ll); } } void Projection::renderWIN32GC() { win32Color(parent->getXColor(colorName)); renderWIN32LineNoDash(); } #endif // Support void Projection::updateHandles() { center = (p2-p1)/2 + p1; angle = (p2-p1).angle(); Matrix imm = bckMatrix(); Vector a = p1*imm; Vector b = p2*imm; Vector c = Vector(0,-width); p3 = fwdMap(a+c,Coord::CANVAS); p4 = fwdMap(b+c,Coord::CANVAS); Vector hh = fwdMap(((b-a)/2+a)+c,Coord::CANVAS); // generate handles in Coord::CANVAS coords handle[0] = parent->mapFromRef(p1,Coord::CANVAS); handle[1] = parent->mapFromRef(p2,Coord::CANVAS); handle[2] = hh; } void Projection::calcAllBBox() { // p3/p4 are already in Coord::CANVAS coords bbox.bound(p3); bbox.bound(p4); Marker::calcAllBBox(); } void Projection::edit(const Vector& v, int h) { switch (h) { case 1: p1 = v; break; case 2: p2 = v; break; case 3: Matrix mm = bckMatrix(); width = -(v * mm)[1]; if (width<0) width = 0; break; } updateBBox(); doCallBack(CallBack::EDITCB); } int Projection::isIn(const Vector& v) { Vector zz = parent->zoom(); if (width * zz.length() > parent->markerEpsilon) { Matrix imm = bckMatrix(); Vector a = p1*imm; Vector b = p2*imm; Vector vv = -bckMap(v,Coord::CANVAS); return (vv[0]>a[0] && vv[0]0 && vv[1]options->cmdName); addCallBack(CallBack::EDITCB, analysisPlot2dCB_[0], parent->options->cmdName); addCallBack(CallBack::UPDATECB, analysisPlot2dCB_[0], parent->options->cmdName); addCallBack(CallBack::DELETECB, analysisPlot2dCB_[1], parent->options->cmdName); } if (analysisPlot2d_ && !which) { deleteCallBack(CallBack::MOVECB, analysisPlot2dCB_[0]); deleteCallBack(CallBack::EDITCB, analysisPlot2dCB_[0]); deleteCallBack(CallBack::UPDATECB, analysisPlot2dCB_[0]); deleteCallBack(CallBack::DELETECB, analysisPlot2dCB_[1]); } analysisPlot2d_ = which; break; default: // na break; } } void Projection::analysisPlot2d(char* xname, char* yname, char* xcname, char* ycname, Coord::CoordSystem sys, Coord::SkyFrame sky, Marker::AnalysisMethod method) { double* x; double* y; double* xc; double* yc; int num = parent->markerAnalysisPlot2d(this, &x, &y, &xc, &yc, p1, p2, width, sys, sky, method); analysisXYEEResult(xname, yname, xcname, ycname, x, y, xc, yc, num); } // list void Projection::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { if (!strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 1); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSEqu(sys)) { double ww = ptr->mapLenFromRef(width,sys,Coord::ARCSEC); switch (format) { case Coord::DEGREES: { Vector v1 = ptr->mapFromRef(p1,sys,sky); Vector v2 = ptr->mapFromRef(p2,sys,sky); str << type_ << '(' << setprecision(10) << v1 << ',' << v2 << ',' << setprecision(3) << fixed << ww << '"' << ')'; str.unsetf(ios_base::floatfield); } break; case Coord::SEXAGESIMAL: str << type_ << '('; listRADEC(ptr,p1,sys,sky,format); str << ra << ',' << dec << ','; listRADEC(ptr,p2,sys,sky,format); str << ra << ',' << dec << ','; str << setprecision(3) << fixed << ww << '"' << ')'; str.unsetf(ios_base::floatfield); break; } } else listNonCel(ptr, str, sys); } if (conj) str << " ||"; listProperties(str, 0); } } void Projection::listNonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { Vector v1 = ptr->mapFromRef(p1,sys); Vector v2 = ptr->mapFromRef(p2,sys); double ww = ptr->mapLenFromRef(width,sys); str << type_ << '(' << setprecision(8) << v1 << ',' << v2 << ',' << ww << ')'; } void Projection::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); Vector vv[2]; vv[0] = p1; vv[1] = p2; double rr = ptr->mapLenFromRef(width,sys,Coord::ARCSEC); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowPoint(ptr,sys,sky,format,vv,2); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: XMLRow(XMLR,rr,8); break; default: if (ptr->hasWCS(sys)) { if (ptr->hasWCSCel(sys)) XMLRowARCSEC(XMLR,rr); else XMLRow(XMLR,rr,8); } break; } XMLRowProps(ptr,sys); XMLRowEnd(str); } saods9/tksao/frame/projection.h000644 000765 000000 00000003206 12752663436 017143 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __projection_h__ #define __projection_h__ #include "baseline.h" class Projection : public BaseLine { private: double width; Vector p3; // used for bbox Vector p4; private: void renderX(Drawable, Coord::InternalSystem, RenderMode); GC renderXGC(RenderMode); void renderPS(int); void renderPSGC(int); #ifdef MAC_OSX_TK void renderMACOSX(); void renderMACOSXGC(); #endif #ifdef __WIN32 void renderWIN32(); void renderWIN32GC(); #endif void updateHandles(); void calcAllBBox(); protected: void listNonCel(FitsImage*, ostream&, Coord::CoordSystem); public: Projection(const Projection&); Projection(Base* p, const Vector& ptr1, const Vector& ptr2, double wd, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Marker* dup() {return new Projection(*this);} int isIn(const Vector&); void updateCoords(const Matrix&); void edit(const Vector&, int); void analysis(AnalysisTask, int); void analysisPlot2d(char*, char*, char*, char*, Coord::CoordSystem, Coord::SkyFrame, Marker::AnalysisMethod); void set(const Vector&, const Vector&, double); void setWidth(double); double getWidth() {return width;} void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); }; #endif saods9/tksao/frame/proslex.C000644 000765 000000 00000210203 12705446251 016403 0ustar00joyewheel000000 000000 #line 2 "frame/proslex.C" #line 4 "frame/proslex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer prosFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *prosalloc (yy_size_t ); void *prosrealloc (void *,yy_size_t ); void prosfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 52 #define YY_END_OF_BUFFER 53 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[198] = { 0, 0, 0, 2, 2, 53, 51, 47, 50, 51, 51, 51, 51, 51, 22, 46, 46, 46, 46, 46, 46, 46, 46, 46, 14, 46, 46, 46, 46, 51, 51, 2, 1, 47, 48, 0, 43, 0, 44, 0, 22, 24, 33, 29, 23, 22, 0, 46, 25, 46, 46, 27, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 16, 46, 46, 46, 46, 49, 0, 45, 2, 24, 35, 31, 23, 25, 0, 0, 27, 34, 30, 26, 0, 28, 25, 0, 46, 0, 23, 46, 46, 46, 5, 46, 46, 46, 46, 46, 46, 46, 46, 15, 46, 46, 46, 46, 46, 36, 32, 0, 23, 0, 0, 24, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 0, 0, 37, 0, 46, 0, 46, 46, 4, 46, 7, 46, 46, 46, 46, 12, 46, 46, 18, 46, 46, 46, 0, 0, 38, 37, 0, 0, 41, 0, 0, 39, 46, 6, 46, 46, 46, 46, 46, 46, 46, 20, 46, 41, 39, 42, 40, 3, 46, 8, 46, 46, 13, 46, 19, 21, 9, 46, 11, 17, 46, 10, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 5, 1, 1, 1, 1, 6, 1, 1, 1, 7, 1, 7, 8, 1, 9, 10, 11, 12, 12, 13, 12, 12, 12, 14, 15, 1, 1, 1, 1, 1, 1, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 26, 38, 39, 26, 1, 40, 1, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 26, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 26, 62, 63, 26, 64, 1, 65, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[66] = { 0, 1, 1, 2, 1, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1 } ; static yyconst flex_int16_t yy_base[204] = { 0, 0, 0, 134, 131, 130, 1540, 123, 1540, 121, 116, 114, 58, 64, 74, 94, 98, 90, 121, 162, 127, 138, 150, 154, 166, 170, 187, 182, 214, 62, 52, 0, 1540, 114, 1540, 96, 1540, 86, 1540, 233, 255, 308, 1540, 1540, 361, 414, 239, 222, 467, 478, 270, 281, 286, 318, 330, 301, 342, 380, 385, 396, 489, 433, 495, 500, 438, 459, 520, 524, 528, 1540, 25, 1540, 0, 581, 1540, 1540, 634, 539, 553, 563, 1540, 1540, 1540, 1540, 595, 1540, 1540, 606, 621, 646, 105, 673, 656, 455, 573, 688, 692, 705, 709, 729, 733, 660, 745, 751, 756, 767, 771, 783, 787, 1540, 1540, 794, 818, 826, 838, 850, 857, 872, 880, 890, 894, 905, 811, 913, 918, 930, 942, 946, 961, 966, 972, 978, 986, 990, 1009, 1024, 863, 1033, 999, 1041, 1047, 1093, 1057, 1061, 1065, 1073, 1081, 1103, 1114, 1118, 1126, 1130, 1142, 1150, 1158, 1164, 1175, 1183, 1210, 1197, 1221, 1236, 1242, 1252, 1252, 1268, 1282, 1290, 1298, 1303, 1314, 1325, 1330, 1336, 1356, 1341, 1360, 1375, 1540, 1540, 1540, 1540, 1380, 1393, 1397, 1401, 1409, 1414, 1426, 1432, 1440, 1451, 1455, 1459, 1467, 1473, 1478, 1540, 1524, 1527, 1530, 78, 1533, 1536 } ; static yyconst flex_int16_t yy_def[204] = { 0, 197, 1, 198, 198, 197, 197, 197, 197, 197, 199, 200, 197, 197, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 197, 202, 203, 197, 197, 197, 199, 197, 200, 197, 197, 197, 197, 197, 197, 197, 201, 197, 201, 201, 201, 49, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 197, 202, 197, 203, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 49, 197, 49, 49, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 197, 197, 197, 197, 197, 197, 197, 197, 49, 49, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 197, 197, 197, 197, 197, 49, 197, 49, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 197, 197, 197, 197, 197, 197, 201, 197, 197, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 197, 197, 197, 197, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 0, 197, 197, 197, 197, 197, 197 } ; static yyconst flex_int16_t yy_nxt[1606] = { 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14, 14, 14, 14, 14, 6, 15, 16, 17, 18, 19, 20, 21, 20, 20, 22, 20, 23, 20, 24, 25, 26, 20, 27, 20, 20, 20, 28, 20, 20, 29, 15, 16, 17, 18, 19, 20, 21, 20, 20, 22, 23, 20, 24, 25, 26, 20, 27, 20, 20, 20, 28, 20, 20, 30, 6, 39, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 42, 43, 47, 44, 45, 45, 45, 45, 45, 45, 46, 71, 69, 38, 48, 49, 197, 197, 50, 197, 197, 197, 36, 197, 197, 197, 197, 197, 51, 53, 197, 74, 75, 197, 197, 55, 69, 33, 71, 48, 49, 38, 36, 50, 52, 34, 33, 197, 197, 54, 197, 197, 51, 197, 197, 32, 197, 197, 32, 197, 55, 197, 56, 197, 197, 197, 197, 197, 52, 197, 197, 197, 197, 54, 197, 60, 197, 197, 197, 197, 197, 197, 61, 197, 197, 197, 197, 56, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 60, 57, 197, 197, 197, 62, 197, 197, 197, 197, 58, 197, 63, 197, 197, 59, 197, 197, 197, 197, 64, 197, 197, 197, 197, 197, 57, 197, 197, 62, 197, 65, 197, 67, 58, 197, 197, 63, 66, 59, 197, 197, 197, 197, 64, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 68, 65, 67, 197, 197, 197, 197, 66, 73, 73, 73, 73, 73, 73, 87, 87, 87, 87, 87, 87, 197, 197, 197, 197, 197, 68, 74, 75, 197, 76, 40, 40, 40, 40, 40, 40, 46, 197, 197, 197, 77, 78, 197, 197, 79, 91, 91, 91, 91, 91, 91, 197, 197, 197, 80, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 77, 78, 197, 197, 79, 197, 197, 197, 197, 197, 197, 197, 197, 80, 81, 82, 92, 197, 41, 41, 41, 41, 41, 41, 197, 197, 197, 197, 83, 84, 197, 197, 197, 93, 197, 95, 197, 197, 197, 197, 92, 197, 85, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 83, 84, 197, 197, 197, 197, 95, 96, 197, 197, 197, 197, 197, 85, 42, 43, 94, 197, 41, 41, 41, 41, 41, 41, 197, 197, 197, 197, 86, 78, 197, 197, 96, 197, 197, 197, 197, 197, 197, 197, 94, 197, 80, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 86, 78, 97, 197, 197, 197, 197, 98, 197, 197, 197, 197, 197, 80, 42, 43, 197, 44, 45, 45, 45, 45, 45, 45, 46, 197, 97, 99, 48, 49, 197, 98, 50, 197, 197, 197, 197, 101, 197, 197, 197, 197, 51, 197, 197, 197, 197, 197, 197, 197, 197, 99, 197, 48, 49, 197, 197, 50, 197, 197, 197, 197, 197, 120, 197, 197, 51, 197, 197, 197, 197, 88, 88, 88, 88, 88, 88, 197, 197, 197, 89, 197, 90, 90, 90, 90, 90, 90, 197, 197, 197, 197, 197, 104, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 100, 102, 197, 197, 197, 103, 104, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 100, 197, 102, 197, 105, 197, 103, 106, 111, 111, 111, 111, 111, 111, 197, 197, 197, 197, 197, 107, 89, 108, 112, 112, 112, 112, 112, 112, 197, 105, 197, 106, 113, 113, 113, 113, 113, 113, 197, 197, 197, 197, 197, 107, 197, 108, 109, 110, 197, 197, 73, 73, 73, 73, 73, 73, 197, 197, 197, 197, 83, 84, 114, 197, 115, 115, 115, 115, 115, 115, 197, 197, 197, 197, 85, 87, 87, 87, 87, 87, 87, 116, 197, 197, 197, 83, 84, 197, 197, 197, 88, 88, 88, 88, 88, 88, 197, 197, 85, 74, 75, 197, 197, 73, 73, 73, 73, 73, 73, 117, 197, 197, 197, 86, 78, 112, 112, 112, 112, 112, 112, 197, 197, 197, 197, 197, 197, 80, 197, 127, 197, 197, 197, 117, 197, 197, 197, 197, 86, 78, 197, 197, 91, 91, 91, 91, 91, 91, 197, 197, 197, 80, 119, 197, 197, 197, 197, 197, 197, 197, 197, 118, 197, 197, 197, 197, 121, 197, 197, 197, 197, 197, 197, 197, 197, 197, 119, 197, 197, 197, 197, 197, 197, 197, 197, 118, 197, 197, 122, 123, 197, 121, 197, 124, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 125, 197, 197, 197, 126, 197, 197, 122, 197, 123, 197, 197, 197, 124, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 128, 125, 197, 197, 197, 126, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 129, 197, 197, 197, 128, 197, 130, 197, 197, 197, 132, 197, 197, 111, 111, 111, 111, 111, 111, 197, 131, 197, 197, 197, 129, 197, 197, 197, 197, 197, 130, 133, 134, 74, 75, 132, 197, 112, 112, 112, 112, 112, 112, 145, 131, 113, 113, 113, 113, 113, 113, 197, 197, 197, 197, 133, 134, 115, 115, 115, 115, 115, 115, 197, 135, 109, 110, 197, 145, 115, 115, 115, 115, 115, 115, 136, 137, 137, 137, 137, 137, 137, 159, 159, 159, 159, 159, 159, 135, 197, 138, 139, 139, 139, 139, 139, 139, 197, 140, 141, 141, 141, 141, 141, 141, 197, 197, 197, 197, 197, 197, 197, 197, 143, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 142, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 144, 197, 197, 197, 197, 197, 197, 197, 197, 142, 197, 197, 146, 197, 197, 197, 197, 147, 197, 197, 197, 197, 197, 150, 144, 197, 197, 197, 149, 197, 197, 197, 197, 148, 197, 197, 146, 197, 197, 197, 197, 147, 197, 197, 197, 197, 197, 151, 197, 197, 197, 197, 197, 149, 197, 197, 197, 148, 152, 197, 197, 197, 197, 197, 197, 197, 197, 197, 154, 197, 197, 197, 151, 197, 197, 153, 161, 161, 161, 161, 161, 161, 156, 152, 155, 138, 157, 157, 157, 157, 157, 157, 197, 154, 197, 197, 197, 197, 197, 153, 140, 158, 158, 158, 158, 158, 158, 156, 155, 160, 137, 137, 137, 137, 137, 137, 197, 162, 139, 139, 139, 139, 139, 139, 164, 164, 164, 164, 164, 164, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 163, 197, 197, 197, 197, 197, 197, 197, 197, 197, 168, 197, 197, 197, 197, 197, 197, 197, 167, 197, 197, 197, 197, 197, 163, 197, 165, 141, 141, 141, 141, 141, 141, 197, 197, 168, 197, 197, 197, 197, 197, 169, 167, 197, 197, 197, 197, 197, 197, 197, 197, 197, 166, 197, 197, 197, 197, 197, 197, 197, 197, 197, 170, 197, 197, 169, 197, 197, 197, 171, 197, 173, 197, 197, 197, 197, 166, 197, 172, 197, 197, 197, 197, 197, 197, 174, 170, 197, 197, 197, 197, 197, 197, 171, 197, 197, 173, 197, 197, 197, 197, 197, 172, 197, 197, 197, 197, 197, 197, 197, 174, 197, 197, 175, 197, 197, 162, 157, 157, 157, 157, 157, 157, 197, 197, 197, 197, 176, 197, 197, 177, 159, 159, 159, 159, 159, 159, 175, 197, 197, 197, 197, 178, 165, 158, 158, 158, 158, 158, 158, 197, 176, 197, 197, 177, 159, 159, 159, 159, 159, 159, 197, 197, 197, 197, 197, 178, 197, 197, 179, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 197, 197, 197, 197, 164, 164, 164, 164, 164, 164, 197, 179, 197, 180, 197, 197, 197, 197, 197, 178, 164, 164, 164, 164, 164, 164, 197, 197, 197, 181, 197, 197, 197, 197, 197, 197, 197, 180, 197, 197, 197, 197, 197, 178, 197, 179, 197, 197, 197, 197, 197, 197, 197, 181, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 182, 197, 179, 183, 197, 197, 197, 197, 197, 197, 184, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 182, 197, 197, 197, 183, 197, 186, 197, 197, 197, 185, 184, 197, 197, 197, 187, 197, 197, 197, 197, 197, 197, 189, 197, 188, 197, 197, 197, 197, 197, 197, 186, 197, 197, 185, 197, 197, 197, 197, 187, 197, 197, 197, 197, 197, 197, 189, 197, 197, 188, 197, 197, 197, 197, 197, 197, 190, 197, 197, 197, 197, 197, 197, 191, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 192, 197, 193, 190, 197, 197, 197, 197, 197, 197, 197, 191, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 192, 197, 193, 194, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 195, 197, 197, 197, 197, 197, 194, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 195, 197, 197, 197, 196, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 196, 31, 31, 31, 35, 197, 35, 37, 197, 37, 70, 197, 70, 72, 197, 72, 5, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197 } ; static yyconst flex_int16_t yy_chk[1606] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 201, 14, 14, 14, 14, 14, 14, 14, 14, 70, 29, 37, 14, 14, 17, 17, 14, 17, 15, 15, 35, 15, 16, 16, 17, 16, 14, 16, 15, 90, 90, 90, 16, 17, 29, 33, 30, 14, 14, 11, 10, 14, 15, 9, 7, 18, 18, 16, 18, 5, 14, 20, 20, 4, 20, 18, 3, 0, 17, 0, 18, 20, 21, 21, 0, 21, 15, 0, 0, 0, 0, 16, 21, 21, 22, 22, 0, 22, 23, 23, 22, 23, 0, 0, 22, 18, 19, 19, 23, 19, 24, 24, 0, 24, 25, 25, 19, 25, 21, 19, 24, 0, 0, 23, 25, 0, 27, 27, 19, 27, 25, 26, 26, 19, 26, 0, 27, 0, 25, 0, 0, 26, 0, 0, 19, 0, 0, 23, 0, 26, 0, 27, 19, 0, 0, 25, 26, 19, 28, 28, 0, 28, 25, 0, 0, 0, 47, 47, 28, 47, 0, 0, 0, 28, 26, 27, 47, 0, 0, 0, 26, 39, 39, 39, 39, 39, 39, 46, 46, 46, 46, 46, 46, 0, 0, 0, 0, 0, 28, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 40, 40, 0, 50, 40, 50, 50, 50, 50, 50, 50, 0, 51, 51, 40, 51, 0, 52, 52, 0, 52, 0, 51, 0, 0, 40, 40, 52, 0, 40, 0, 0, 55, 55, 0, 55, 0, 0, 40, 41, 41, 52, 55, 41, 41, 41, 41, 41, 41, 53, 53, 0, 53, 41, 41, 0, 0, 0, 53, 53, 55, 54, 54, 0, 54, 52, 0, 41, 0, 0, 0, 54, 0, 56, 56, 0, 56, 0, 41, 41, 0, 0, 0, 56, 55, 56, 0, 0, 0, 0, 0, 41, 44, 44, 54, 0, 44, 44, 44, 44, 44, 44, 0, 0, 0, 0, 44, 44, 0, 0, 56, 57, 57, 0, 57, 0, 58, 58, 54, 58, 44, 57, 0, 0, 0, 0, 58, 59, 59, 0, 59, 44, 44, 57, 0, 0, 0, 59, 58, 0, 0, 0, 0, 0, 44, 45, 45, 0, 45, 45, 45, 45, 45, 45, 45, 45, 0, 57, 59, 45, 45, 0, 58, 45, 61, 61, 0, 61, 61, 64, 64, 0, 64, 45, 61, 0, 0, 0, 0, 64, 0, 0, 59, 0, 45, 45, 93, 93, 45, 93, 65, 65, 0, 65, 93, 0, 93, 45, 48, 48, 65, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 60, 60, 0, 60, 65, 0, 62, 62, 0, 62, 60, 63, 63, 0, 63, 0, 62, 0, 0, 0, 0, 63, 60, 62, 0, 0, 0, 63, 65, 0, 0, 66, 66, 0, 66, 67, 67, 0, 67, 68, 68, 66, 68, 0, 0, 67, 60, 0, 62, 68, 66, 0, 63, 66, 77, 77, 77, 77, 77, 77, 0, 0, 0, 0, 0, 67, 78, 68, 78, 78, 78, 78, 78, 78, 0, 66, 0, 66, 79, 79, 79, 79, 79, 79, 94, 94, 0, 94, 0, 67, 0, 68, 73, 73, 94, 0, 73, 73, 73, 73, 73, 73, 0, 0, 0, 0, 73, 73, 84, 0, 84, 84, 84, 84, 84, 84, 0, 0, 0, 0, 73, 87, 87, 87, 87, 87, 87, 87, 0, 0, 0, 73, 73, 0, 88, 0, 88, 88, 88, 88, 88, 88, 0, 0, 73, 76, 76, 0, 0, 76, 76, 76, 76, 76, 76, 88, 0, 0, 0, 76, 76, 89, 89, 89, 89, 89, 89, 92, 92, 0, 92, 101, 101, 76, 101, 101, 0, 92, 0, 88, 0, 101, 0, 0, 76, 76, 91, 0, 91, 91, 91, 91, 91, 91, 0, 0, 0, 76, 92, 95, 95, 0, 95, 96, 96, 0, 96, 91, 0, 95, 0, 0, 95, 96, 0, 0, 97, 97, 0, 97, 98, 98, 92, 98, 0, 0, 97, 0, 0, 0, 98, 91, 0, 0, 96, 97, 0, 95, 0, 98, 99, 99, 0, 99, 100, 100, 0, 100, 0, 0, 99, 99, 0, 0, 100, 100, 102, 102, 96, 102, 97, 0, 103, 103, 98, 103, 102, 104, 104, 0, 104, 0, 103, 0, 0, 102, 99, 104, 105, 105, 100, 105, 106, 106, 0, 106, 0, 0, 105, 0, 0, 0, 106, 0, 107, 107, 104, 107, 108, 108, 102, 108, 105, 0, 107, 0, 107, 0, 108, 111, 111, 111, 111, 111, 111, 0, 106, 0, 0, 0, 104, 0, 122, 122, 0, 122, 105, 108, 111, 112, 112, 107, 122, 112, 112, 112, 112, 112, 112, 122, 106, 113, 113, 113, 113, 113, 113, 0, 0, 0, 0, 108, 111, 114, 114, 114, 114, 114, 114, 0, 113, 115, 115, 0, 122, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 136, 136, 136, 136, 136, 136, 113, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 0, 119, 120, 120, 0, 120, 120, 0, 119, 0, 0, 0, 120, 121, 121, 0, 121, 0, 0, 0, 119, 123, 123, 121, 123, 0, 124, 124, 0, 124, 0, 123, 0, 0, 0, 121, 124, 0, 125, 125, 0, 125, 0, 0, 119, 0, 0, 123, 125, 0, 126, 126, 124, 126, 127, 127, 0, 127, 127, 121, 126, 0, 0, 126, 127, 0, 0, 0, 125, 128, 128, 123, 128, 0, 129, 129, 124, 129, 0, 128, 130, 130, 128, 130, 129, 0, 131, 131, 126, 131, 130, 0, 125, 129, 132, 132, 131, 132, 133, 133, 0, 133, 0, 131, 132, 0, 0, 128, 133, 0, 130, 138, 138, 138, 138, 138, 138, 133, 129, 132, 134, 134, 134, 134, 134, 134, 134, 0, 131, 0, 0, 0, 0, 0, 130, 135, 135, 135, 135, 135, 135, 135, 133, 132, 137, 137, 137, 137, 137, 137, 137, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 142, 142, 0, 142, 143, 143, 0, 143, 144, 144, 142, 144, 0, 139, 143, 0, 145, 145, 144, 145, 0, 0, 0, 144, 146, 146, 145, 146, 0, 0, 0, 142, 0, 0, 146, 0, 0, 139, 141, 141, 141, 141, 141, 141, 141, 141, 147, 147, 144, 147, 0, 0, 0, 0, 146, 142, 147, 148, 148, 0, 148, 149, 149, 0, 149, 141, 0, 148, 0, 150, 150, 149, 150, 151, 151, 147, 151, 0, 146, 150, 0, 0, 148, 151, 151, 152, 152, 0, 152, 141, 0, 149, 0, 153, 153, 152, 153, 0, 152, 147, 0, 154, 154, 153, 154, 0, 148, 155, 155, 151, 155, 154, 0, 0, 0, 149, 0, 155, 156, 156, 0, 156, 0, 152, 0, 0, 154, 0, 156, 157, 157, 157, 157, 157, 157, 157, 0, 0, 0, 0, 155, 0, 0, 156, 159, 159, 159, 159, 159, 159, 154, 0, 0, 0, 0, 157, 158, 158, 158, 158, 158, 158, 158, 0, 155, 0, 0, 156, 160, 160, 160, 160, 160, 160, 0, 0, 0, 0, 0, 157, 0, 0, 158, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 0, 163, 164, 164, 164, 164, 164, 164, 163, 158, 0, 161, 0, 0, 0, 0, 0, 162, 165, 165, 165, 165, 165, 165, 0, 0, 0, 164, 166, 166, 0, 166, 0, 0, 0, 161, 167, 167, 166, 167, 0, 162, 0, 165, 168, 168, 167, 168, 0, 169, 169, 164, 169, 0, 168, 0, 0, 0, 0, 169, 170, 170, 0, 170, 0, 167, 0, 165, 169, 0, 170, 171, 171, 0, 171, 170, 172, 172, 0, 172, 0, 171, 173, 173, 0, 173, 172, 175, 175, 167, 175, 0, 173, 169, 0, 172, 0, 175, 0, 171, 170, 0, 174, 174, 173, 174, 176, 176, 0, 176, 0, 175, 174, 174, 0, 0, 176, 0, 0, 0, 172, 177, 177, 171, 177, 0, 182, 182, 173, 182, 0, 177, 0, 0, 0, 175, 182, 0, 174, 183, 183, 0, 183, 184, 184, 177, 184, 185, 185, 183, 185, 0, 183, 184, 0, 186, 186, 185, 186, 0, 187, 187, 0, 187, 0, 186, 185, 0, 186, 177, 187, 0, 188, 188, 0, 188, 0, 183, 189, 189, 0, 189, 188, 0, 0, 0, 190, 190, 189, 190, 0, 185, 0, 186, 188, 0, 190, 191, 191, 0, 191, 192, 192, 0, 192, 193, 193, 191, 193, 0, 0, 192, 192, 194, 194, 193, 194, 0, 188, 195, 195, 0, 195, 194, 196, 196, 0, 196, 0, 195, 0, 0, 0, 0, 196, 0, 0, 192, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 198, 198, 198, 199, 0, 199, 200, 0, 200, 202, 0, 202, 203, 0, 203, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "frame/proslex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "frame/proslex.L" #include #include #include #include "util.h" #include "prosparser.H" extern YYSTYPE* proslval; extern prosFlexLexer* proslexx; /* rules */ #line 846 "frame/proslex.C" #define INITIAL 0 #define DISCARD 1 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 30 "frame/proslex.L" #line 950 "frame/proslex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 198 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 197 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 32 "frame/proslex.L" { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(proslval->str,""); // feed a blank string return STRING; } YY_BREAK case 2: YY_RULE_SETUP #line 39 "frame/proslex.L" { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(PROSBUFSIZE-1) ? yyleng:(PROSBUFSIZE-1); strncpy(proslval->str,yytext,ll); proslval->str[ll] = '\0'; return STRING; } YY_BREAK case 3: YY_RULE_SETUP #line 47 "frame/proslex.L" {return ANNULUS_;} YY_BREAK case 4: YY_RULE_SETUP #line 48 "frame/proslex.L" {return B1950_;} YY_BREAK case 5: YY_RULE_SETUP #line 49 "frame/proslex.L" {return BOX_;} YY_BREAK case 6: YY_RULE_SETUP #line 50 "frame/proslex.L" {return CIRCLE_;} YY_BREAK case 7: YY_RULE_SETUP #line 51 "frame/proslex.L" {return DEBUG_;} YY_BREAK case 8: YY_RULE_SETUP #line 52 "frame/proslex.L" {return ELLIPSE_;} YY_BREAK case 9: YY_RULE_SETUP #line 53 "frame/proslex.L" {return ECLIPTIC_;} YY_BREAK case 10: YY_RULE_SETUP #line 54 "frame/proslex.L" {return EQUATORIAL_;} YY_BREAK case 11: YY_RULE_SETUP #line 55 "frame/proslex.L" {return GALACTIC_;} YY_BREAK case 12: YY_RULE_SETUP #line 56 "frame/proslex.L" {return J2000_;} YY_BREAK case 13: YY_RULE_SETUP #line 57 "frame/proslex.L" {return LOGICAL_;} YY_BREAK case 14: YY_RULE_SETUP #line 58 "frame/proslex.L" {return N_;} YY_BREAK case 15: YY_RULE_SETUP #line 59 "frame/proslex.L" {return OFF_;} YY_BREAK case 16: YY_RULE_SETUP #line 60 "frame/proslex.L" {return ON_;} YY_BREAK case 17: YY_RULE_SETUP #line 61 "frame/proslex.L" {return PHYSICAL_;} YY_BREAK case 18: YY_RULE_SETUP #line 62 "frame/proslex.L" {return POINT_;} YY_BREAK case 19: YY_RULE_SETUP #line 63 "frame/proslex.L" {return POLYGON_;} YY_BREAK case 20: YY_RULE_SETUP #line 64 "frame/proslex.L" {return ROTBOX_;} YY_BREAK case 21: YY_RULE_SETUP #line 65 "frame/proslex.L" {return VERSION_;} YY_BREAK case 22: YY_RULE_SETUP #line 67 "frame/proslex.L" { // Integer proslval->integer = atoi(yytext); return INT; } YY_BREAK case 23: #line 73 "frame/proslex.L" case 24: YY_RULE_SETUP #line 73 "frame/proslex.L" { // Real Number proslval->real = atof(yytext); return REAL; } YY_BREAK case 25: #line 79 "frame/proslex.L" case 26: YY_RULE_SETUP #line 79 "frame/proslex.L" { // degrees yytext[yyleng-1] = '\0'; proslval->real = atof(yytext); return ANGDEGREE; } YY_BREAK case 27: #line 86 "frame/proslex.L" case 28: YY_RULE_SETUP #line 86 "frame/proslex.L" { // radians yytext[yyleng-1] = '\0'; proslval->real = atof(yytext); return ANGRADIAN; } YY_BREAK case 29: #line 93 "frame/proslex.L" case 30: #line 94 "frame/proslex.L" case 31: #line 95 "frame/proslex.L" case 32: YY_RULE_SETUP #line 95 "frame/proslex.L" { // minutes of arc yytext[yyleng-1] = '\0'; proslval->real = atof(yytext); return ARCMINUTE; } YY_BREAK case 33: #line 102 "frame/proslex.L" case 34: #line 103 "frame/proslex.L" case 35: #line 104 "frame/proslex.L" case 36: YY_RULE_SETUP #line 104 "frame/proslex.L" { // seconds of arc yytext[yyleng-1] = '\0'; proslval->real = atof(yytext); return ARCSECOND; } YY_BREAK case 37: #line 111 "frame/proslex.L" case 38: YY_RULE_SETUP #line 111 "frame/proslex.L" { // Sexagesimal int ll = yyleng <(PROSBUFSIZE-1) ? yyleng:(PROSBUFSIZE-1); strncpy(proslval->str,yytext,ll); proslval->str[ll] = '\0'; return SEXSTR; } YY_BREAK case 39: #line 119 "frame/proslex.L" case 40: YY_RULE_SETUP #line 119 "frame/proslex.L" { // HMS int ll = yyleng <(PROSBUFSIZE-1) ? yyleng:(PROSBUFSIZE-1); strncpy(proslval->str,yytext,ll); proslval->str[ll] = '\0'; return HMSSTR; } YY_BREAK case 41: #line 127 "frame/proslex.L" case 42: YY_RULE_SETUP #line 127 "frame/proslex.L" { // DMS int ll = yyleng <(PROSBUFSIZE-1) ? yyleng:(PROSBUFSIZE-1); strncpy(proslval->str,yytext,ll); proslval->str[ll] = '\0'; return DMSSTR; } YY_BREAK case 43: #line 135 "frame/proslex.L" case 44: YY_RULE_SETUP #line 135 "frame/proslex.L" { // Quoted String int ll=(yyleng-2)<(PROSBUFSIZE-1)?(yyleng-2):(PROSBUFSIZE-1); strncpy(proslval->str,yytext+1,ll); // skip the " " proslval->str[ll] = '\0'; // Remove the '"' return STRING; } YY_BREAK case 45: YY_RULE_SETUP #line 142 "frame/proslex.L" { // Quoted String int ll=(yyleng-2)<(PROSBUFSIZE-1)?(yyleng-2):(PROSBUFSIZE-1); strncpy(proslval->str,yytext+1,ll); // skip the '{' proslval->str[ll] = '\0'; // Remove the '}' return STRING; } YY_BREAK case 46: YY_RULE_SETUP #line 149 "frame/proslex.L" { // General String int ll = yyleng <(PROSBUFSIZE-1) ? yyleng:(PROSBUFSIZE-1); strncpy(proslval->str,yytext,ll); proslval->str[ll] = '\0'; return STRING; } YY_BREAK case 47: YY_RULE_SETUP #line 156 "frame/proslex.L" { // White Spaces } YY_BREAK case 48: /* rule 48 can match eol */ YY_RULE_SETUP #line 159 "frame/proslex.L" { // windows line feed return '\n'; } YY_BREAK case 49: YY_RULE_SETUP #line 163 "frame/proslex.L" { // fake line feed return '\n'; } YY_BREAK case 50: /* rule 50 can match eol */ YY_RULE_SETUP #line 167 "frame/proslex.L" { // linefeed return '\n'; } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(DISCARD): #line 171 "frame/proslex.L" { // eof return EOF_; } YY_BREAK case 51: YY_RULE_SETUP #line 175 "frame/proslex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 52: YY_RULE_SETUP #line 179 "frame/proslex.L" ECHO; YY_BREAK #line 1332 "frame/proslex.C" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; prosfree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); prosfree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ prosrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) prosrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 198 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 198 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 197); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) prosalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) prosalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) prosfree((void *) b->yy_ch_buf ); prosfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)prosalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)prosrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) prosalloc(new_size ); else (yy_start_stack) = (int *) prosrealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *prosalloc (yy_size_t size ) { return (void *) malloc( size ); } void *prosrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void prosfree (void * ptr ) { free( (char *) ptr ); /* see prosrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 179 "frame/proslex.L" void prosDiscard(int doit) { if (proslexx) proslexx->begin(DISCARD, doit); } void prosFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/frame/proslex.L000644 000765 000000 00000007746 12705446251 016434 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "util.h" #include "prosparser.H" extern YYSTYPE* proslval; extern prosFlexLexer* proslexx; %} %x DISCARD D [0-9] E [Ee][+-]?{D}+ /* rules */ %% [\n] { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(proslval->str,""); // feed a blank string return STRING; } [^\n]* { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(PROSBUFSIZE-1) ? yyleng:(PROSBUFSIZE-1); strncpy(proslval->str,yytext,ll); proslval->str[ll] = '\0'; return STRING; } annulus {return ANNULUS_;} b1950 {return B1950_;} box {return BOX_;} circle {return CIRCLE_;} debug {return DEBUG_;} ellipse {return ELLIPSE_;} ecliptic {return ECLIPTIC_;} equatorial {return EQUATORIAL_;} galactic {return GALACTIC_;} j2000 {return J2000_;} logical {return LOGICAL_;} n {return N_;} off {return OFF_;} on {return ON_;} physical {return PHYSICAL_;} point {return POINT_;} polygon {return POLYGON_;} rotbox {return ROTBOX_;} version {return VERSION_;} [+-]?{D}+ { // Integer proslval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number proslval->real = atof(yytext); return REAL; } [+-]?{D}+"."?d | [+-]?{D}*"."{D}+d { // degrees yytext[yyleng-1] = '\0'; proslval->real = atof(yytext); return ANGDEGREE; } [+-]?{D}+"."?r | [+-]?{D}*"."{D}+r { // radians yytext[yyleng-1] = '\0'; proslval->real = atof(yytext); return ANGRADIAN; } {D}+"."?' | {D}*"."{D}+' | [+-]?{D}+"."?({E})?' | [+-]?{D}*"."{D}+({E})?' { // minutes of arc yytext[yyleng-1] = '\0'; proslval->real = atof(yytext); return ARCMINUTE; } {D}+"."?\" | {D}*"."{D}+\" | [+-]?{D}+"."?({E})?\" | [+-]?{D}*"."{D}+({E})?\" { // seconds of arc yytext[yyleng-1] = '\0'; proslval->real = atof(yytext); return ARCSECOND; } [+-]?{D}+:{D}+:{D}+"."? | [+-]?{D}+:{D}+:{D}*"."{D}+ { // Sexagesimal int ll = yyleng <(PROSBUFSIZE-1) ? yyleng:(PROSBUFSIZE-1); strncpy(proslval->str,yytext,ll); proslval->str[ll] = '\0'; return SEXSTR; } [+-]?{D}+h{D}+m{D}+"."?s | [+-]?{D}+h{D}+m{D}*"."{D}+s { // HMS int ll = yyleng <(PROSBUFSIZE-1) ? yyleng:(PROSBUFSIZE-1); strncpy(proslval->str,yytext,ll); proslval->str[ll] = '\0'; return HMSSTR; } [+-]?{D}+d{D}+m{D}+"."?s | [+-]?{D}+d{D}+m{D}*"."{D}+s { // DMS int ll = yyleng <(PROSBUFSIZE-1) ? yyleng:(PROSBUFSIZE-1); strncpy(proslval->str,yytext,ll); proslval->str[ll] = '\0'; return DMSSTR; } \"[^\"\n]*\" | \'[^\'\n]*\' { // Quoted String int ll=(yyleng-2)<(PROSBUFSIZE-1)?(yyleng-2):(PROSBUFSIZE-1); strncpy(proslval->str,yytext+1,ll); // skip the " " proslval->str[ll] = '\0'; // Remove the '"' return STRING; } \{[^\}\n]*\} { // Quoted String int ll=(yyleng-2)<(PROSBUFSIZE-1)?(yyleng-2):(PROSBUFSIZE-1); strncpy(proslval->str,yytext+1,ll); // skip the '{' proslval->str[ll] = '\0'; // Remove the '}' return STRING; } [0-9A-Za-z]+ { // General String int ll = yyleng <(PROSBUFSIZE-1) ? yyleng:(PROSBUFSIZE-1); strncpy(proslval->str,yytext,ll); proslval->str[ll] = '\0'; return STRING; } [ \t]+ { // White Spaces } \r\n { // windows line feed return '\n'; } \\n { // fake line feed return '\n'; } \n { // linefeed return '\n'; } <> { // eof return EOF_; } . { // Else, return the char return yytext[0]; } %% void prosDiscard(int doit) { if (proslexx) proslexx->begin(DISCARD, doit); } void prosFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/frame/prosparser.C000644 000765 000000 00000205426 12553253031 017113 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse prosparse #define yylex proslex #define yyerror proserror #define yylval proslval #define yychar proschar #define yydebug prosdebug #define yynerrs prosnerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, STRING = 260, ANGDEGREE = 261, ARCMINUTE = 262, ARCSECOND = 263, ANGRADIAN = 264, SEXSTR = 265, HMSSTR = 266, DMSSTR = 267, EOF_ = 268, ANNULUS_ = 269, B1950_ = 270, BOX_ = 271, CIRCLE_ = 272, DEBUG_ = 273, ECLIPTIC_ = 274, ELLIPSE_ = 275, EQUATORIAL_ = 276, GALACTIC_ = 277, J2000_ = 278, LOGICAL_ = 279, N_ = 280, OFF_ = 281, ON_ = 282, PHYSICAL_ = 283, POINT_ = 284, POLYGON_ = 285, ROTBOX_ = 286, VERSION_ = 287 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define STRING 260 #define ANGDEGREE 261 #define ARCMINUTE 262 #define ARCSECOND 263 #define ANGRADIAN 264 #define SEXSTR 265 #define HMSSTR 266 #define DMSSTR 267 #define EOF_ 268 #define ANNULUS_ 269 #define B1950_ 270 #define BOX_ 271 #define CIRCLE_ 272 #define DEBUG_ 273 #define ECLIPTIC_ 274 #define ELLIPSE_ 275 #define EQUATORIAL_ 276 #define GALACTIC_ 277 #define J2000_ 278 #define LOGICAL_ 279 #define N_ 280 #define OFF_ 281 #define ON_ 282 #define PHYSICAL_ 283 #define POINT_ 284 #define POLYGON_ 285 #define ROTBOX_ 286 #define VERSION_ 287 /* Copy the first part of user declarations. */ #line 10 "frame/prosparser.Y" #define YYDEBUG 1 #define FITSPTR (fr->findFits()) #define DISCARD_(x) {yyclearin; prosDiscard(x);} #include #include #include #include "base.h" #include "fitsimage.h" #include "basemarker.h" #undef yyFlexLexer #define yyFlexLexer prosFlexLexer #include extern int proslex(void*, prosFlexLexer*); extern void proserror(Base*, prosFlexLexer*, const char*); extern void prosDiscard(int); static Coord::CoordSystem globalSystem; static Coord::SkyFrame globalSky; static Coord::CoordSystem localSystem; static Coord::SkyFrame localSky; static unsigned short globalProps; static unsigned short localProps; static const char *color = "green"; static int dash[] ={8,3}; static const char *font = "helvetica 10 normal roman"; static const char *text = ""; static char localComment[80]; static List polylist; static List taglist; static List cblist; static double aAnnuli[MAXANNULI]; static Vector aVector[MAXANNULI]; static int aNum; static int aStatus; static Vector aCenter; static double aAngle; static unsigned short aProps; static char aComment[80]; static void setProps(unsigned short* props, unsigned short prop, int value); static Coord::CoordSystem checkWCSSystem(); static Coord::SkyFrame checkWCSSky(); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 65 "frame/prosparser.Y" { #define PROSBUFSIZE 2048 double real; int integer; char str[PROSBUFSIZE]; double vector[3]; } /* Line 193 of yacc.c. */ #line 231 "frame/prosparser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 244 "frame/prosparser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 215 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 44 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 41 /* YYNRULES -- Number of rules. */ #define YYNRULES 90 /* YYNRULES -- Number of states. */ #define YYNSTATES 187 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 287 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 33, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 42, 2, 43, 2, 2, 41, 2, 36, 37, 2, 39, 35, 40, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 34, 2, 38, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 7, 11, 14, 15, 18, 20, 21, 25, 26, 30, 34, 36, 38, 40, 42, 44, 46, 48, 50, 51, 53, 54, 56, 57, 59, 60, 62, 64, 66, 68, 70, 72, 74, 76, 80, 84, 88, 92, 96, 98, 100, 102, 106, 110, 114, 118, 122, 124, 126, 129, 131, 133, 135, 137, 139, 141, 142, 143, 144, 146, 148, 156, 166, 167, 180, 192, 202, 221, 231, 241, 260, 266, 267, 274, 278, 280, 282, 286, 288, 290, 291, 292, 293, 297, 298, 302, 304, 305 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 45, 0, -1, 68, 46, 78, -1, 46, 47, 50, -1, 47, 50, -1, -1, 18, 52, -1, 32, -1, -1, 65, 48, 79, -1, -1, 66, 49, 79, -1, 69, 70, 71, -1, 81, -1, 33, -1, 34, -1, 13, -1, 4, -1, 3, -1, 27, -1, 26, -1, -1, 35, -1, -1, 36, -1, -1, 37, -1, -1, 57, -1, 51, -1, 6, -1, 9, -1, 51, -1, 6, -1, 7, -1, 8, -1, 51, 53, 51, -1, 6, 53, 6, -1, 7, 53, 7, -1, 8, 53, 8, -1, 25, 38, 3, -1, 10, -1, 11, -1, 12, -1, 61, 53, 61, -1, 62, 53, 63, -1, 63, 53, 63, -1, 51, 53, 51, -1, 6, 53, 6, -1, 24, -1, 28, -1, 21, 67, -1, 15, -1, 23, -1, 22, -1, 19, -1, 15, -1, 23, -1, -1, -1, -1, 39, -1, 40, -1, 17, 54, 64, 53, 58, 55, 83, -1, 14, 54, 64, 53, 58, 53, 58, 55, 83, -1, -1, 14, 54, 64, 53, 58, 53, 58, 53, 72, 76, 55, 83, -1, 14, 54, 64, 53, 58, 53, 58, 53, 60, 55, 83, -1, 20, 54, 64, 53, 59, 53, 56, 55, 83, -1, 20, 54, 64, 53, 59, 53, 56, 55, 41, 42, 20, 54, 64, 53, 59, 53, 56, 55, -1, 16, 54, 64, 53, 59, 53, 56, 55, 83, -1, 31, 54, 64, 53, 59, 53, 56, 55, 83, -1, 16, 54, 64, 53, 59, 53, 56, 55, 41, 42, 16, 54, 64, 53, 59, 53, 56, 55, -1, 29, 54, 64, 55, 83, -1, -1, 30, 73, 54, 74, 55, 83, -1, 74, 53, 75, -1, 75, -1, 64, -1, 76, 53, 77, -1, 77, -1, 58, -1, -1, -1, -1, 43, 80, 5, -1, -1, 43, 82, 5, -1, 78, -1, -1, 43, 84, 5, 78, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 125, 125, 128, 129, 132, 133, 134, 135, 135, 136, 136, 137, 138, 141, 142, 143, 146, 147, 150, 151, 154, 155, 158, 159, 162, 163, 166, 167, 170, 171, 172, 175, 176, 177, 178, 181, 188, 195, 202, 211, 214, 217, 220, 223, 236, 244, 252, 259, 269, 270, 273, 274, 275, 276, 277, 280, 281, 284, 295, 307, 308, 309, 313, 317, 321, 321, 330, 335, 351, 358, 374, 379, 386, 390, 390, 395, 396, 399, 402, 403, 406, 410, 437, 438, 438, 441, 441, 444, 445, 445 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "INT", "REAL", "STRING", "ANGDEGREE", "ARCMINUTE", "ARCSECOND", "ANGRADIAN", "SEXSTR", "HMSSTR", "DMSSTR", "EOF_", "ANNULUS_", "B1950_", "BOX_", "CIRCLE_", "DEBUG_", "ECLIPTIC_", "ELLIPSE_", "EQUATORIAL_", "GALACTIC_", "J2000_", "LOGICAL_", "N_", "OFF_", "ON_", "PHYSICAL_", "POINT_", "POLYGON_", "ROTBOX_", "VERSION_", "'\\n'", "';'", "','", "'('", "')'", "'='", "'+'", "'-'", "'&'", "'!'", "'#'", "$accept", "start", "commands", "command", "@1", "@2", "terminator", "numeric", "debug", "sp", "bp", "ep", "optangle", "angle", "value", "vvalue", "numberof", "sexagesimal", "hms", "dms", "coord", "coordSystem", "skyFrame", "equatorial", "initGlobal", "initLocal", "include", "shape", "@3", "@4", "polyNodes", "polyNode", "aRads", "aRad", "processAnnulus", "comment", "@5", "generalComment", "@6", "shapeComment", "@7", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 10, 59, 44, 40, 41, 61, 43, 45, 38, 33, 35 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 44, 45, 46, 46, 47, 47, 47, 48, 47, 49, 47, 47, 47, 50, 50, 50, 51, 51, 52, 52, 53, 53, 54, 54, 55, 55, 56, 56, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, 60, 61, 62, 63, 64, 64, 64, 64, 64, 65, 65, 66, 66, 66, 66, 66, 67, 67, 68, 69, 70, 70, 70, 71, 71, 72, 71, 71, 71, 71, 71, 71, 71, 71, 73, 71, 74, 74, 75, 76, 76, 77, 78, 79, 80, 79, 82, 81, 83, 84, 83 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 3, 3, 2, 0, 2, 1, 0, 3, 0, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 7, 9, 0, 12, 11, 9, 18, 9, 9, 18, 5, 0, 6, 3, 1, 1, 3, 1, 1, 0, 0, 0, 3, 0, 3, 1, 0, 4 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 58, 0, 59, 1, 52, 0, 55, 0, 54, 53, 49, 50, 7, 86, 59, 0, 8, 10, 60, 13, 20, 19, 6, 56, 57, 51, 0, 0, 2, 16, 14, 15, 4, 83, 83, 61, 62, 0, 87, 3, 84, 9, 11, 23, 23, 23, 23, 23, 74, 23, 12, 0, 24, 0, 0, 0, 0, 0, 23, 0, 85, 18, 17, 21, 41, 42, 43, 21, 21, 21, 21, 21, 21, 21, 21, 25, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 82, 78, 21, 77, 0, 48, 47, 44, 45, 46, 33, 34, 35, 32, 21, 21, 21, 21, 21, 21, 25, 21, 89, 88, 73, 0, 82, 21, 0, 0, 0, 0, 0, 27, 82, 27, 0, 76, 75, 27, 21, 37, 38, 39, 36, 30, 31, 29, 25, 28, 63, 25, 82, 25, 65, 82, 82, 82, 90, 82, 0, 25, 0, 64, 0, 70, 0, 68, 71, 0, 82, 81, 21, 80, 0, 0, 40, 67, 0, 82, 23, 23, 79, 66, 0, 0, 21, 21, 0, 0, 21, 21, 27, 27, 25, 25, 72, 69 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 1, 14, 15, 33, 34, 32, 67, 22, 79, 53, 89, 137, 138, 160, 108, 150, 68, 69, 70, 90, 16, 17, 25, 2, 18, 37, 50, 151, 58, 91, 92, 161, 162, 112, 41, 51, 19, 26, 113, 125 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -92 static const yytype_int16 yypact[] = { -92, 2, 163, -92, -92, 17, -92, 19, -92, -92, -92, -92, -92, -92, 132, 7, -92, -92, 6, -92, -92, -92, -92, -92, -92, -92, 13, 7, -92, -92, -92, -92, -92, -36, -36, -92, -92, 72, -92, -92, -92, -92, -92, 12, 12, 12, 12, 12, -92, 12, -92, 48, -92, 197, 197, 197, 197, 197, 12, 197, -92, -92, -92, 32, -92, -92, -92, 32, 32, 32, 32, 32, 32, 32, 32, 33, 197, 32, -92, 63, 52, 65, 61, 61, 118, 207, 118, 207, -92, 40, -92, 155, -92, 207, -92, -92, -92, -92, -92, -92, -92, -92, -92, 32, 32, 32, 32, 32, 32, 33, 32, -92, -92, -92, 197, 40, 32, 118, 90, 91, 89, 52, 102, 40, 102, 105, -92, -92, 102, 155, -92, -92, -92, -92, -92, -92, -92, 33, -92, -92, 33, -92, 33, 82, 40, -19, -5, -92, 40, 74, 33, 118, -92, 73, -92, 75, -92, -92, 115, 40, -92, 155, -92, 107, 116, -92, -92, 118, 40, 12, 12, -92, -92, 197, 197, 32, 32, 207, 207, 32, 32, 102, 102, 33, 33, -92, -92 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -92, -92, -92, 121, -92, -92, 112, -8, -92, -42, -41, -90, -91, -92, -63, -78, -92, 59, -92, -25, -43, -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, 27, -92, -23, -14, 108, -92, -92, -92, -64, -92 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -83 static const yytype_int16 yytable[] = { 28, 115, 3, 54, 55, 56, 57, 40, 59, 110, 71, 72, 73, 74, 75, 116, 77, 76, 38, 123, 29, 103, 153, 109, 111, 80, 81, 82, 83, 84, 85, 86, 87, 140, 23, 93, 155, 142, 111, 144, 30, 31, 24, 20, 21, 35, 36, 145, 52, 114, 146, 127, 148, 60, 129, 61, 62, 97, 98, 139, 159, 117, 118, 119, 120, 121, 122, 78, 124, 94, 88, 168, 95, 66, 128, 64, 102, 107, 102, 107, 152, 154, 156, 111, 157, 107, 43, 143, 44, 45, 183, 184, 46, 185, 186, 166, 130, 132, 131, 179, 180, 47, 48, 49, 172, 61, 62, 149, 134, 102, 141, 135, 158, 133, 136, 163, 136, 164, 165, 167, 136, 61, 62, 169, 99, 100, 101, 147, 173, 174, 175, 176, -82, 177, 178, 27, 170, 181, 182, 39, 96, 126, 42, 102, 171, -5, 0, 4, 0, 0, 5, 6, 0, 7, 8, 9, 10, 0, 0, 102, 11, 0, 0, 0, 12, -5, -5, 0, -25, 107, 107, 0, 0, 136, 136, 13, -5, 0, 4, 0, 0, 5, 6, 0, 7, 8, 9, 10, -25, -25, 78, 11, 88, 0, 0, 12, -5, -5, -25, 0, 61, 62, 0, 63, 0, 0, 13, 64, 65, 66, 61, 62, 0, 104, 105, 106 }; static const yytype_int16 yycheck[] = { 14, 91, 0, 44, 45, 46, 47, 43, 49, 87, 53, 54, 55, 56, 57, 93, 59, 58, 5, 109, 13, 84, 41, 86, 43, 67, 68, 69, 70, 71, 72, 73, 74, 124, 15, 77, 41, 128, 43, 129, 33, 34, 23, 26, 27, 39, 40, 137, 36, 91, 140, 115, 142, 5, 117, 3, 4, 82, 83, 123, 150, 103, 104, 105, 106, 107, 108, 35, 110, 6, 37, 161, 80, 12, 116, 10, 84, 85, 86, 87, 144, 145, 146, 43, 148, 93, 14, 129, 16, 17, 181, 182, 20, 183, 184, 159, 6, 8, 7, 177, 178, 29, 30, 31, 168, 3, 4, 25, 6, 117, 5, 9, 38, 121, 122, 42, 124, 42, 3, 161, 128, 3, 4, 16, 6, 7, 8, 141, 169, 170, 173, 174, 0, 175, 176, 14, 20, 179, 180, 27, 81, 114, 34, 151, 167, 13, -1, 15, -1, -1, 18, 19, -1, 21, 22, 23, 24, -1, -1, 167, 28, -1, -1, -1, 32, 33, 34, -1, 13, 177, 178, -1, -1, 181, 182, 43, 13, -1, 15, -1, -1, 18, 19, -1, 21, 22, 23, 24, 33, 34, 35, 28, 37, -1, -1, 32, 33, 34, 43, -1, 3, 4, -1, 6, -1, -1, 43, 10, 11, 12, 3, 4, -1, 6, 7, 8 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 45, 68, 0, 15, 18, 19, 21, 22, 23, 24, 28, 32, 43, 46, 47, 65, 66, 69, 81, 26, 27, 52, 15, 23, 67, 82, 47, 78, 13, 33, 34, 50, 48, 49, 39, 40, 70, 5, 50, 43, 79, 79, 14, 16, 17, 20, 29, 30, 31, 71, 80, 36, 54, 54, 54, 54, 54, 73, 54, 5, 3, 4, 6, 10, 11, 12, 51, 61, 62, 63, 64, 64, 64, 64, 64, 54, 64, 35, 53, 53, 53, 53, 53, 53, 53, 53, 53, 37, 55, 64, 74, 75, 53, 6, 51, 61, 63, 63, 6, 7, 8, 51, 58, 6, 7, 8, 51, 59, 58, 59, 43, 78, 83, 53, 55, 59, 53, 53, 53, 53, 53, 53, 55, 53, 84, 75, 83, 53, 58, 6, 7, 8, 51, 6, 9, 51, 56, 57, 83, 56, 5, 56, 53, 55, 55, 55, 78, 55, 25, 60, 72, 83, 41, 83, 41, 83, 83, 38, 55, 58, 76, 77, 42, 42, 3, 83, 53, 55, 16, 20, 77, 83, 54, 54, 64, 64, 53, 53, 59, 59, 53, 53, 56, 56, 55, 55 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (fr, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, fr, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, prosFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; prosFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (fr); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, prosFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; prosFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, Base* fr, prosFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, fr, ll) YYSTYPE *yyvsp; int yyrule; Base* fr; prosFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , fr, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, fr, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, Base* fr, prosFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, fr, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; Base* fr; prosFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (fr); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (Base* fr, prosFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (Base* fr, prosFlexLexer* ll) #else int yyparse (fr, ll) Base* fr; prosFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 7: #line 134 "frame/prosparser.Y" {cerr << "PROS" << endl;;} break; case 8: #line 135 "frame/prosparser.Y" {globalSystem = (Coord::CoordSystem)(yyvsp[(1) - (1)].integer);;} break; case 10: #line 136 "frame/prosparser.Y" {globalSystem = Coord::WCS; globalSky = (Coord::SkyFrame)(yyvsp[(1) - (1)].integer);;} break; case 16: #line 143 "frame/prosparser.Y" {YYACCEPT;;} break; case 17: #line 146 "frame/prosparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 18: #line 147 "frame/prosparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 19: #line 150 "frame/prosparser.Y" {yydebug=1;;} break; case 20: #line 151 "frame/prosparser.Y" {yydebug=0;;} break; case 27: #line 166 "frame/prosparser.Y" {(yyval.real) = 0;;} break; case 28: #line 167 "frame/prosparser.Y" {(yyval.real) = (yyvsp[(1) - (1)].real);;} break; case 29: #line 170 "frame/prosparser.Y" {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;} break; case 30: #line 171 "frame/prosparser.Y" {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;} break; case 31: #line 172 "frame/prosparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 32: #line 175 "frame/prosparser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), Coord::IMAGE);;} break; case 33: #line 176 "frame/prosparser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), checkWCSSystem(), Coord::DEGREE);;} break; case 34: #line 177 "frame/prosparser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), checkWCSSystem(), Coord::ARCMIN);;} break; case 35: #line 178 "frame/prosparser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), checkWCSSystem(), Coord::ARCSEC);;} break; case 36: #line 182 "frame/prosparser.Y" { Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::IMAGE); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 37: #line 189 "frame/prosparser.Y" { Vector r=FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),checkWCSSystem(),Coord::DEGREE); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 38: #line 196 "frame/prosparser.Y" { Vector r=FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),checkWCSSystem(),Coord::ARCMIN); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 39: #line 203 "frame/prosparser.Y" { Vector r=FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),checkWCSSystem(),Coord::ARCSEC); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 40: #line 211 "frame/prosparser.Y" {(yyval.integer) = (yyvsp[(3) - (3)].integer);;} break; case 41: #line 214 "frame/prosparser.Y" {(yyval.real) = parseSEXStr((yyvsp[(1) - (1)].str));;} break; case 42: #line 217 "frame/prosparser.Y" {(yyval.real) = parseHMSStr((yyvsp[(1) - (1)].str));;} break; case 43: #line 220 "frame/prosparser.Y" {(yyval.real) = parseDMSStr((yyvsp[(1) - (1)].str));;} break; case 44: #line 224 "frame/prosparser.Y" { Vector r; Coord::CoordSystem sys = checkWCSSystem(); Coord::SkyFrame sky = checkWCSSky(); if (sky == Coord::GALACTIC || sky == Coord::ECLIPTIC) r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), sys, sky); else r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real)*360./24.,(yyvsp[(3) - (3)].real)), sys, sky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 45: #line 237 "frame/prosparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), checkWCSSystem(), checkWCSSky()); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 46: #line 245 "frame/prosparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), checkWCSSystem(), checkWCSSky()); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 47: #line 253 "frame/prosparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), localSystem, localSky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 48: #line 260 "frame/prosparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), checkWCSSystem(), checkWCSSky()); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 49: #line 269 "frame/prosparser.Y" {(yyval.integer) = Coord::IMAGE;;} break; case 50: #line 270 "frame/prosparser.Y" {(yyval.integer) = Coord::PHYSICAL;;} break; case 51: #line 273 "frame/prosparser.Y" {(yyval.integer) = (yyvsp[(2) - (2)].integer);;} break; case 52: #line 274 "frame/prosparser.Y" {(yyval.integer) = Coord::FK4;;} break; case 53: #line 275 "frame/prosparser.Y" {(yyval.integer) = Coord::FK5;;} break; case 54: #line 276 "frame/prosparser.Y" {(yyval.integer) = Coord::GALACTIC;;} break; case 55: #line 277 "frame/prosparser.Y" {(yyval.integer) = Coord::ECLIPTIC;;} break; case 56: #line 280 "frame/prosparser.Y" {(yyval.integer) = Coord::FK4;;} break; case 57: #line 281 "frame/prosparser.Y" {(yyval.integer) = Coord::FK5;;} break; case 58: #line 284 "frame/prosparser.Y" { // global properties globalSystem = Coord::IMAGE; globalSky = Coord::FK5; globalProps = Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::HIGHLITE | Marker::INCLUDE | Marker::SOURCE; ;} break; case 59: #line 295 "frame/prosparser.Y" { // reset maperr flag maperr =0; // global properties localSystem = globalSystem; localSky = globalSky; localProps = globalProps; strcpy(localComment,""); ;} break; case 60: #line 307 "frame/prosparser.Y" {setProps(&localProps, Marker::INCLUDE, 1);;} break; case 61: #line 308 "frame/prosparser.Y" {setProps(&localProps, Marker::INCLUDE, 1);;} break; case 62: #line 309 "frame/prosparser.Y" {setProps(&localProps, Marker::INCLUDE, 0);;} break; case 63: #line 314 "frame/prosparser.Y" {fr->createCircleCmd(Vector((yyvsp[(3) - (7)].vector)), (yyvsp[(5) - (7)].real), color,dash,1,font,text,localProps,localComment,taglist,cblist);;} break; case 64: #line 318 "frame/prosparser.Y" {fr->createAnnulusCmd(Vector((yyvsp[(3) - (9)].vector)), (yyvsp[(5) - (9)].real),(yyvsp[(7) - (9)].real),1, color,dash,1,font,text,localProps,localComment,taglist,cblist);;} break; case 65: #line 321 "frame/prosparser.Y" {aNum=2;;} break; case 66: #line 323 "frame/prosparser.Y" { aAnnuli[0] = (yyvsp[(5) - (12)].real); aAnnuli[1] = (yyvsp[(7) - (12)].real); fr->createAnnulusCmd(Vector((yyvsp[(3) - (12)].vector)), aNum,aAnnuli, color,dash,1,font,text,localProps,localComment,taglist,cblist); ;} break; case 67: #line 331 "frame/prosparser.Y" {fr->createAnnulusCmd(Vector((yyvsp[(3) - (11)].vector)), (yyvsp[(5) - (11)].real),(yyvsp[(7) - (11)].real),(yyvsp[(9) - (11)].integer), color,dash,1,font,text,localProps,localComment,taglist,cblist);;} break; case 68: #line 336 "frame/prosparser.Y" { // for ellipse annulus aStatus = 1; aCenter = Vector((yyvsp[(3) - (9)].vector)); aAngle = (yyvsp[(7) - (9)].real); aVector[0] = Vector((yyvsp[(5) - (9)].vector)); aNum = 1; strncpy(aComment,localComment,80); aProps = localProps; fr->createEllipseCmd(Vector((yyvsp[(3) - (9)].vector)), Vector((yyvsp[(5) - (9)].vector)), (yyvsp[(7) - (9)].real), color,dash,1,font,text,localProps,localComment,taglist,cblist); ;} break; case 69: #line 353 "frame/prosparser.Y" { aStatus = 2; aVector[aNum++] = Vector((yyvsp[(5) - (18)].vector)); ;} break; case 70: #line 359 "frame/prosparser.Y" { // for box annulus aStatus = 3; aCenter = Vector((yyvsp[(3) - (9)].vector)); aAngle = (yyvsp[(7) - (9)].real); aVector[0] = Vector((yyvsp[(5) - (9)].vector)); aNum = 1; strncpy(aComment,localComment,80); aProps = localProps; fr->createBoxCmd(Vector((yyvsp[(3) - (9)].vector)), Vector((yyvsp[(5) - (9)].vector)), (yyvsp[(7) - (9)].real), color,dash,1,font,text,localProps,localComment,taglist,cblist); ;} break; case 71: #line 375 "frame/prosparser.Y" {fr->createBoxCmd(Vector((yyvsp[(3) - (9)].vector)), Vector((yyvsp[(5) - (9)].vector)), (yyvsp[(7) - (9)].real), color,dash,1,font,text,localProps,localComment,taglist,cblist);;} break; case 72: #line 381 "frame/prosparser.Y" { aStatus = 4; aVector[aNum++] = Vector((yyvsp[(5) - (18)].vector)); ;} break; case 73: #line 387 "frame/prosparser.Y" {fr->createPointCmd(Vector((yyvsp[(3) - (5)].vector)), Point::BOXCIRCLE, POINTSIZE, color,dash,1,font,text,localProps,localComment,taglist,cblist);;} break; case 74: #line 390 "frame/prosparser.Y" {polylist.deleteAll();;} break; case 75: #line 391 "frame/prosparser.Y" {fr->createPolygonCmd(polylist, color,dash,1,font,text,localProps,localComment,taglist,cblist);;} break; case 78: #line 399 "frame/prosparser.Y" {polylist.append(new Vertex((yyvsp[(1) - (1)].vector)));;} break; case 81: #line 406 "frame/prosparser.Y" {aAnnuli[aNum++] = (yyvsp[(1) - (1)].real);;} break; case 82: #line 410 "frame/prosparser.Y" { switch (aStatus) { case 0: // do nothing break; case 1: // we found just an ellipse, do nothing break; case 2: // ok we have an ellipse annulus fr->markerDeleteLastCmd(); // delete the previous ellipse fr->createEllipseAnnulusCmd(aCenter, aNum,aVector, aAngle, color,dash,1,font,text,aProps,aComment,taglist,cblist); break; case 3: // we found just a box, do nothing break; case 4: // ok, we have a box annulus fr->markerDeleteLastCmd(); // delete the previous box fr->createBoxAnnulusCmd(aCenter, aNum,aVector, aAngle, color,dash,1,font,text,aProps,aComment,taglist,cblist); break; } aStatus = 0; ;} break; case 84: #line 438 "frame/prosparser.Y" {DISCARD_(1);;} break; case 86: #line 441 "frame/prosparser.Y" {DISCARD_(1);;} break; case 89: #line 445 "frame/prosparser.Y" {DISCARD_(0);;} break; case 90: #line 446 "frame/prosparser.Y" {strncpy(localComment,(yyvsp[(3) - (4)].str),80);;} break; /* Line 1267 of yacc.c. */ #line 2090 "frame/prosparser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (fr, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (fr, ll, yymsg); } else { yyerror (fr, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, fr, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, fr, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (fr, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, fr, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, fr, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 449 "frame/prosparser.Y" static void setProps(unsigned short* props, unsigned short prop, int value) { if (value) *props |= prop; else *props &= ~prop; } static Coord::CoordSystem checkWCSSystem() { switch (localSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::WCS; default: return localSystem; } } static Coord::SkyFrame checkWCSSky() { switch (localSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::FK5; default: return localSky; } } saods9/tksao/frame/prosparser.H000644 000765 000000 00000006537 12553253031 017122 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, STRING = 260, ANGDEGREE = 261, ARCMINUTE = 262, ARCSECOND = 263, ANGRADIAN = 264, SEXSTR = 265, HMSSTR = 266, DMSSTR = 267, EOF_ = 268, ANNULUS_ = 269, B1950_ = 270, BOX_ = 271, CIRCLE_ = 272, DEBUG_ = 273, ECLIPTIC_ = 274, ELLIPSE_ = 275, EQUATORIAL_ = 276, GALACTIC_ = 277, J2000_ = 278, LOGICAL_ = 279, N_ = 280, OFF_ = 281, ON_ = 282, PHYSICAL_ = 283, POINT_ = 284, POLYGON_ = 285, ROTBOX_ = 286, VERSION_ = 287 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define STRING 260 #define ANGDEGREE 261 #define ARCMINUTE 262 #define ARCSECOND 263 #define ANGRADIAN 264 #define SEXSTR 265 #define HMSSTR 266 #define DMSSTR 267 #define EOF_ 268 #define ANNULUS_ 269 #define B1950_ 270 #define BOX_ 271 #define CIRCLE_ 272 #define DEBUG_ 273 #define ECLIPTIC_ 274 #define ELLIPSE_ 275 #define EQUATORIAL_ 276 #define GALACTIC_ 277 #define J2000_ 278 #define LOGICAL_ 279 #define N_ 280 #define OFF_ 281 #define ON_ 282 #define PHYSICAL_ 283 #define POINT_ 284 #define POLYGON_ 285 #define ROTBOX_ 286 #define VERSION_ 287 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 65 "frame/prosparser.Y" { #define PROSBUFSIZE 2048 double real; int integer; char str[PROSBUFSIZE]; double vector[3]; } /* Line 1529 of yacc.c. */ #line 121 "frame/prosparser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/frame/prosparser.Y000644 000765 000000 00000024300 12705446251 017136 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {Base* fr} %lex-param {prosFlexLexer* ll} %parse-param {prosFlexLexer* ll} %{ #define YYDEBUG 1 #define FITSPTR (fr->findFits()) #define DISCARD_(x) {yyclearin; prosDiscard(x);} #include #include #include #include "base.h" #include "fitsimage.h" #include "basemarker.h" #undef yyFlexLexer #define yyFlexLexer prosFlexLexer #include extern int proslex(void*, prosFlexLexer*); extern void proserror(Base*, prosFlexLexer*, const char*); extern void prosDiscard(int); static Coord::CoordSystem globalSystem; static Coord::SkyFrame globalSky; static Coord::CoordSystem localSystem; static Coord::SkyFrame localSky; static unsigned short globalProps; static unsigned short localProps; static const char *color = "green"; static int dash[] ={8,3}; static const char *font = "helvetica 10 normal roman"; static const char *text = ""; static char localComment[80]; static List polylist; static List taglist; static List cblist; static double aAnnuli[MAXANNULI]; static Vector aVector[MAXANNULI]; static int aNum; static int aStatus; static Vector aCenter; static double aAngle; static unsigned short aProps; static char aComment[80]; static void setProps(unsigned short* props, unsigned short prop, int value); static Coord::CoordSystem checkWCSSystem(); static Coord::SkyFrame checkWCSSky(); %} %union { #define PROSBUFSIZE 2048 double real; int integer; char str[PROSBUFSIZE]; double vector[3]; } %type numeric %type angle %type optangle %type value %type vvalue %type sexagesimal %type hms %type dms %type coord %type coordSystem %type skyFrame %type equatorial %type numberof %token INT %token REAL %token STRING %token ANGDEGREE %token ARCMINUTE %token ARCSECOND %token ANGRADIAN %token SEXSTR %token HMSSTR %token DMSSTR %token EOF_ %token ANNULUS_ %token B1950_ %token BOX_ %token CIRCLE_ %token DEBUG_ %token ECLIPTIC_ %token ELLIPSE_ %token EQUATORIAL_ %token GALACTIC_ %token J2000_ %token LOGICAL_ %token N_ %token OFF_ %token ON_ %token PHYSICAL_ %token POINT_ %token POLYGON_ %token ROTBOX_ %token VERSION_ %% start : initGlobal commands processAnnulus ; commands: commands command terminator | command terminator ; command : /* empty */ | DEBUG_ debug | VERSION_ {cerr << "PROS" << endl;} | coordSystem {globalSystem = (Coord::CoordSystem)$1;} comment | skyFrame {globalSystem = Coord::WCS; globalSky = (Coord::SkyFrame)$1;} comment | initLocal include shape | generalComment ; terminator: '\n' | ';' | EOF_ {YYACCEPT;} ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; sp : /* empty */ | ',' ; bp : /* empty */ | '(' ; ep : /* emtpy */ | ')' ; optangle: /* empty */ {$$ = 0;} | angle {$$ = $1;} ; angle : numeric {$$ = degToRad($1);} /* assume degree */ | ANGDEGREE {$$ = degToRad($1);} | ANGRADIAN {$$=$1;} ; value : numeric {$$ = FITSPTR->mapLenToRef($1, Coord::IMAGE);} | ANGDEGREE {$$ = FITSPTR->mapLenToRef($1, checkWCSSystem(), Coord::DEGREE);} | ARCMINUTE {$$ = FITSPTR->mapLenToRef($1, checkWCSSystem(), Coord::ARCMIN);} | ARCSECOND {$$ = FITSPTR->mapLenToRef($1, checkWCSSystem(), Coord::ARCSEC);} ; vvalue : numeric sp numeric { Vector r = FITSPTR->mapLenToRef(Vector($1,$3), Coord::IMAGE); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | ANGDEGREE sp ANGDEGREE { Vector r=FITSPTR->mapLenToRef(Vector($1,$3),checkWCSSystem(),Coord::DEGREE); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | ARCMINUTE sp ARCMINUTE { Vector r=FITSPTR->mapLenToRef(Vector($1,$3),checkWCSSystem(),Coord::ARCMIN); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | ARCSECOND sp ARCSECOND { Vector r=FITSPTR->mapLenToRef(Vector($1,$3),checkWCSSystem(),Coord::ARCSEC); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } ; numberof: N_ '=' INT {$$ = $3;} ; sexagesimal: SEXSTR {$$ = parseSEXStr($1);} ; hms : HMSSTR {$$ = parseHMSStr($1);} ; dms : DMSSTR {$$ = parseDMSStr($1);} ; coord : sexagesimal sp sexagesimal { Vector r; Coord::CoordSystem sys = checkWCSSystem(); Coord::SkyFrame sky = checkWCSSky(); if (sky == Coord::GALACTIC || sky == Coord::ECLIPTIC) r = FITSPTR->mapToRef(Vector($1,$3), sys, sky); else r = FITSPTR->mapToRef(Vector($1*360./24.,$3), sys, sky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | hms sp dms { Vector r = FITSPTR->mapToRef(Vector($1,$3), checkWCSSystem(), checkWCSSky()); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | dms sp dms { Vector r = FITSPTR->mapToRef(Vector($1,$3), checkWCSSystem(), checkWCSSky()); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | numeric sp numeric { Vector r = FITSPTR->mapToRef(Vector($1,$3), localSystem, localSky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | ANGDEGREE sp ANGDEGREE { Vector r = FITSPTR->mapToRef(Vector($1,$3), checkWCSSystem(), checkWCSSky()); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } ; coordSystem : LOGICAL_ {$$ = Coord::IMAGE;} | PHYSICAL_ {$$ = Coord::PHYSICAL;} ; skyFrame : EQUATORIAL_ equatorial {$$ = $2;} | B1950_ {$$ = Coord::FK4;} | J2000_ {$$ = Coord::FK5;} | GALACTIC_ {$$ = Coord::GALACTIC;} | ECLIPTIC_ {$$ = Coord::ECLIPTIC;} ; equatorial : B1950_ {$$ = Coord::FK4;} | J2000_ {$$ = Coord::FK5;} ; initGlobal:{ // global properties globalSystem = Coord::IMAGE; globalSky = Coord::FK5; globalProps = Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::HIGHLITE | Marker::INCLUDE | Marker::SOURCE; } ; initLocal : { // reset maperr flag maperr =0; // global properties localSystem = globalSystem; localSky = globalSky; localProps = globalProps; strcpy(localComment,""); } ; include : /* empty */ {setProps(&localProps, Marker::INCLUDE, 1);} | '+' {setProps(&localProps, Marker::INCLUDE, 1);} | '-' {setProps(&localProps, Marker::INCLUDE, 0);} ; shape : CIRCLE_ bp coord sp value ep shapeComment {fr->createCircleCmd(Vector($3), $5, color,dash,1,font,text,localProps,localComment,taglist,cblist);} | ANNULUS_ bp coord sp value sp value ep shapeComment {fr->createAnnulusCmd(Vector($3), $5,$7,1, color,dash,1,font,text,localProps,localComment,taglist,cblist);} | ANNULUS_ bp coord sp value sp value sp {aNum=2;} aRads ep shapeComment { aAnnuli[0] = $5; aAnnuli[1] = $7; fr->createAnnulusCmd(Vector($3), aNum,aAnnuli, color,dash,1,font,text,localProps,localComment,taglist,cblist); } | ANNULUS_ bp coord sp value sp value sp numberof ep shapeComment {fr->createAnnulusCmd(Vector($3), $5,$7,$9, color,dash,1,font,text,localProps,localComment,taglist,cblist);} | ELLIPSE_ bp coord sp vvalue sp optangle ep shapeComment { // for ellipse annulus aStatus = 1; aCenter = Vector($3); aAngle = $7; aVector[0] = Vector($5); aNum = 1; strncpy(aComment,localComment,80); aProps = localProps; fr->createEllipseCmd(Vector($3), Vector($5), $7, color,dash,1,font,text,localProps,localComment,taglist,cblist); } | ELLIPSE_ bp coord sp vvalue sp optangle ep '&' '!' ELLIPSE_ bp coord sp vvalue sp optangle ep { aStatus = 2; aVector[aNum++] = Vector($5); } | BOX_ bp coord sp vvalue sp optangle ep shapeComment { // for box annulus aStatus = 3; aCenter = Vector($3); aAngle = $7; aVector[0] = Vector($5); aNum = 1; strncpy(aComment,localComment,80); aProps = localProps; fr->createBoxCmd(Vector($3), Vector($5), $7, color,dash,1,font,text,localProps,localComment,taglist,cblist); } | ROTBOX_ bp coord sp vvalue sp optangle ep shapeComment {fr->createBoxCmd(Vector($3), Vector($5), $7, color,dash,1,font,text,localProps,localComment,taglist,cblist);} | BOX_ bp coord sp vvalue sp optangle ep '&' '!' BOX_ bp coord sp vvalue sp optangle ep { aStatus = 4; aVector[aNum++] = Vector($5); } | POINT_ bp coord ep shapeComment {fr->createPointCmd(Vector($3), Point::BOXCIRCLE, POINTSIZE, color,dash,1,font,text,localProps,localComment,taglist,cblist);} | POLYGON_ {polylist.deleteAll();} bp polyNodes ep shapeComment {fr->createPolygonCmd(polylist, color,dash,1,font,text,localProps,localComment,taglist,cblist);} ; polyNodes : polyNodes sp polyNode | polyNode ; polyNode : coord {polylist.append(new Vertex($1));} ; aRads : aRads sp aRad | aRad ; aRad : value {aAnnuli[aNum++] = $1;} ; processAnnulus : /* empty */ { switch (aStatus) { case 0: // do nothing break; case 1: // we found just an ellipse, do nothing break; case 2: // ok we have an ellipse annulus fr->markerDeleteLastCmd(); // delete the previous ellipse fr->createEllipseAnnulusCmd(aCenter, aNum,aVector, aAngle, color,dash,1,font,text,aProps,aComment,taglist,cblist); break; case 3: // we found just a box, do nothing break; case 4: // ok, we have a box annulus fr->markerDeleteLastCmd(); // delete the previous box fr->createBoxAnnulusCmd(aCenter, aNum,aVector, aAngle, color,dash,1,font,text,aProps,aComment,taglist,cblist); break; } aStatus = 0; } ; comment : /* empty */ | '#' {DISCARD_(1);} STRING ; generalComment : '#' {DISCARD_(1);} STRING ; shapeComment : /* empty */ processAnnulus | '#' {DISCARD_(0);} STRING processAnnulus {strncpy(localComment,$3,80);} ; %% static void setProps(unsigned short* props, unsigned short prop, int value) { if (value) *props |= prop; else *props &= ~prop; } static Coord::CoordSystem checkWCSSystem() { switch (localSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::WCS; default: return localSystem; } } static Coord::SkyFrame checkWCSSky() { switch (localSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::FK5; default: return localSky; } } saods9/tksao/frame/raytrace.C000644 000765 000000 00000001604 12706511111 016511 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "raytrace.h" RayTrace::RayTrace() { az_ =0; el_ =0; width_ =0; height_ =0; zbuf_ =NULL; mkzbuf_ =NULL; next_ =NULL; previous_ =NULL; } RayTrace::RayTrace(double az, double el, int width, int height, Matrix3d mm, BBox3d bb) { az_ = az; el_ = el; width_ = width; height_ = height; mm_ = mm; bb_ = bb; zbuf_ = new float[width_*height_]; if (!zbuf_) return; memset(zbuf_, 0, width_*height_*sizeof(float)); mkzbuf_ = new unsigned char[width_*height_]; if (!mkzbuf_) return; memset(mkzbuf_, 0, width_*height_); next_ =NULL; previous_ =NULL; } RayTrace::~RayTrace() { if (zbuf_) delete [] zbuf_; if (mkzbuf_) delete [] mkzbuf_; } saods9/tksao/frame/raytrace.h000644 000765 000000 00000001331 12706511111 016553 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __raytrace_h__ #define __raytrace_h__ #include "list.h" #include "vector3d.h" class RayTrace { public: double az_; double el_; int width_; int height_; Matrix3d mm_; BBox3d bb_; float* zbuf_; unsigned char* mkzbuf_; RayTrace* next_; RayTrace* previous_; public: RayTrace(); RayTrace(double, double, int, int, Matrix3d, BBox3d); ~RayTrace(); RayTrace* previous() {return previous_;} void setPrevious(RayTrace* r) {previous_ = r;} RayTrace* next() {return next_;} void setNext(RayTrace* r) {next_ = r;} }; #endif saods9/tksao/frame/ruler.C000644 000765 000000 00000031147 12775517652 016063 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "ruler.h" #include "fitsimage.h" Ruler::Ruler(const Ruler& a) : BaseLine(a) { p3 = a.p3; coordSystem = a.coordSystem; skyFrame = a.skyFrame; distSystem = a.distSystem; distDist = a.distDist; dist = a.dist; } Ruler::Ruler(Base* p, const Vector& ptr1, const Vector& ptr2, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::CoordSystem distsys, Coord::SkyDist distfor, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseLine(p, ptr1, ptr2, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { coordSystem = sys; skyFrame = sky; distSystem = distsys; distDist = distfor; dist = 0; strcpy(type_,"ruler"); handle = new Vector[2]; numHandle = 2; updateBBox(); } void Ruler::renderX(Drawable drawable, Coord::InternalSystem sys, RenderMode mode) { GC lgc = renderXGC(mode); Vector aa = parent->mapFromRef(p1,sys); Vector bb = parent->mapFromRef(p2,sys); Vector cc = parent->mapFromRef(p3,sys); Vector dd = modifyArrow(p2,p1,sys); Vector ee = modifyArrow(p1,p2,sys); // line XDrawLine(display, drawable, lgc, dd[0], dd[1], ee[0], ee[1]); renderXArrow(drawable, p2, p1, sys, lgc); renderXArrow(drawable, p1, p2, sys, lgc); // axes renderXLineDash(lgc); XDrawLine(display, drawable, lgc, aa[0], aa[1], cc[0], cc[1]); XDrawLine(display, drawable, lgc, bb[0], bb[1], cc[0], cc[1]); // dist ostringstream str; distToStr(str); str << ends; if (tkfont_) { XSetFont(display, lgc, Tk_FontId(tkfont_)); Tk_FontMetrics metrics; Tk_GetFontMetrics(tkfont_, &metrics); char* buf = dupstr(str.str().c_str()); int width = Tk_TextWidth(tkfont_, buf, strlen(buf)); Vector tt = ((bb-aa)/2+aa) * Translate(-width/2.,-metrics.descent); Tk_DrawChars(display, drawable, lgc, tkfont_, buf, strlen(buf), tt[0], tt[1]); if (buf) delete [] buf; } } GC Ruler::renderXGC(RenderMode mode) { // set width, color, dash switch (mode) { case SRC: XSetForeground(display, gc, color); renderXLineNoDash(gc); return gc; case XOR: renderXLineDash(gcxor); return gcxor; } // so compiler will not complain return gc; } void Ruler::renderPS(int mode) { renderPSGC(mode); Vector aa = parent->mapFromRef(p1,Coord::CANVAS); Vector bb = parent->mapFromRef(p2,Coord::CANVAS); Vector cc = parent->mapFromRef(p3,Coord::CANVAS); Vector dd = modifyArrow(p2,p1,Coord::CANVAS); Vector ee = modifyArrow(p1,p2,Coord::CANVAS); // line { ostringstream str; str << "newpath " << dd.TkCanvasPs(parent->canvas) << ' ' << "moveto " << ee.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); renderPSArrow(p2,p1,Coord::CANVAS); renderPSArrow(p1,p2,Coord::CANVAS); } // axes renderPSLineDash(); { ostringstream str; str << "newpath " << aa.TkCanvasPs(parent->canvas) << ' ' << "moveto " << cc.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << "newpath " << bb.TkCanvasPs(parent->canvas) << ' ' << "moveto " << cc.TkCanvasPs(parent->canvas) << ' ' << "lineto stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } // dist if (psfont_) { ostringstream vstr; ostringstream str; const char* ff = Tk_NameOfFont(psfont_); str << '/' << psFontName(ff) << " findfont " << int(psFontSize(ff)*parent->getDisplayRatio()) << " scalefont setfont" << endl; distToStr(vstr); vstr << ends; char* buf = dupstr(vstr.str().c_str()); Vector tt = ((bb-aa)/2 + aa).TkCanvasPs(parent->canvas); str << "gsave" << endl << "newpath " << endl << tt << " moveto" << endl << '(' << psQuote(buf) << ')' << endl << "dup true charpath pathbbox " << endl << "closepath " << endl << "3 -1 roll sub 2.5 div " << endl << "3 1 roll sub 2 div exch " << endl << tt << " moveto rmoveto show " << endl << "grestore" << endl; str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); if (buf) delete buf; } } void Ruler::renderPSGC(int mode) { renderPSColor(mode, parent->getXColor(colorName)); renderPSLineNoDash(); } #ifdef MAC_OSX_TK void Ruler::renderMACOSX() { renderMACOSXGC(); Vector aa = parent->mapFromRef(p1,Coord::CANVAS); Vector bb = parent->mapFromRef(p2,Coord::CANVAS); Vector cc = parent->mapFromRef(p3,Coord::CANVAS); Vector dd = modifyArrow(p2,p1,Coord::CANVAS); Vector ee = modifyArrow(p1,p2,Coord::CANVAS); // line macosxDrawLine(dd,ee); renderMACOSXArrow(p2,p1,Coord::CANVAS); renderMACOSXArrow(p1,p2,Coord::CANVAS); // axes renderMACOSXLineDash(); macosxDrawLine(aa,cc); macosxDrawLine(bb,cc); // dist { ostringstream vstr; distToStr(vstr); vstr << ends; if (psfont_) { Tcl_DString psdstr; Tcl_DStringInit(&psdstr); int psSize = Tk_PostscriptFontName(psfont_, &psdstr); macosxFont(Tcl_DStringValue(&psdstr), psSize); Tcl_DStringFree(&psdstr); Tk_FontMetrics metrics; Tk_GetFontMetrics(psfont_, &metrics); char* buf = dupstr(vstr.str().c_str()); int width = Tk_TextWidth(psfont_, buf, strlen(buf)); Vector tt = ((bb-aa)/2 + aa) * Translate(-width/2., -metrics.descent); macosxDrawText(tt, 0, buf); if (buf) delete buf; } } } void Ruler::renderMACOSXGC() { macosxColor(parent->getXColor(colorName)); renderMACOSXLineNoDash(); } #endif // WIN32 #ifdef __WIN32 void Ruler::renderWIN32() { renderWIN32GC(); Vector aa = parent->mapFromRef(p1,Coord::CANVAS); Vector bb = parent->mapFromRef(p2,Coord::CANVAS); Vector cc = parent->mapFromRef(p3,Coord::CANVAS); Vector dd = modifyArrow(p2,p1,Coord::CANVAS); Vector ee = modifyArrow(p1,p2,Coord::CANVAS); // line win32DrawLine(dd,ee); renderWIN32Arrow(p2,p1,Coord::CANVAS); renderWIN32Arrow(p1,p2,Coord::CANVAS); // axes renderWIN32LineDash(); win32DrawLine(aa,cc); win32DrawLine(bb,cc); // dist { ostringstream vstr; distToStr(vstr); vstr << ends; if (tkfont_) { win32Font(tkfont_); Tk_FontMetrics metrics; Tk_GetFontMetrics(tkfont_, &metrics); char* buf = dupstr(vstr.str().c_str()); int width = Tk_TextWidth(tkfont_, buf, strlen(buf)); Vector tt = ((bb-aa)/2 + aa) * Translate(-width/2., -metrics.descent); win32DrawText(tt, 0, buf); if (buf) delete buf; } } } void Ruler::renderWIN32GC() { win32Color(parent->getXColor(colorName)); renderWIN32LineNoDash(); } #endif // Support void Ruler::updateHandles() { center = (p2-p1)/2 + p1; angle = (p2-p1).angle(); // calc p3, dist FitsImage* ptr = parent->findFits(coordSystem,center); Vector a = ptr->mapFromRef(p1,coordSystem,skyFrame); Vector b = ptr->mapFromRef(p2,coordSystem,skyFrame); p3 = ptr->mapToRef(Vector(b[0],a[1]),coordSystem,skyFrame); dist = ptr->mapDistFromRef(p2, p1, distSystem, distDist); // generate handles in canvas coords handle[0] = parent->mapFromRef(p1,Coord::CANVAS); handle[1] = parent->mapFromRef(p2,Coord::CANVAS); } void Ruler::calcAllBBox() { // P3 bbox.bound(parent->mapFromRef(p3,Coord::CANVAS)); // make room for text if (tkfont_) { Vector v = (p2-p1)/2 + p1; ostringstream str; distToStr(str); str << ends; Tk_FontMetrics metrics; Tk_GetFontMetrics(tkfont_, &metrics); char* buf = dupstr(str.str().c_str()); int width = Tk_TextWidth(tkfont_, buf, strlen(buf)); Vector ll = parent->mapFromRef(v,Coord::CANVAS) * Translate(-width/2.,-metrics.descent); Vector ur = parent->mapFromRef(v,Coord::CANVAS) * Translate(width/2.,metrics.ascent); bbox.bound(ll); bbox.bound(ur); if (buf) delete [] buf; } Marker::calcAllBBox(); } void Ruler::updateCoords(const Matrix& mx) { p3*=mx; BaseLine::updateCoords(mx); } int Ruler::isOn(const Vector& v, const Vector& v1, const Vector& v2) { // v : canvas coords // v1: ref coords // v2: ref coords // do this in canvas coords, not ref coords Vector l1 = parent->mapFromRef(v1,Coord::CANVAS); Vector l2 = parent->mapFromRef(v2,Coord::CANVAS); double a = (l2-l1).angle(); Matrix m = Translate(-l1) * Rotate(a); Vector end = l2*m; Vector vv = v*m; return (vv[0]>0 && vv[0]-parent->markerEpsilon && vv[1]markerEpsilon); } int Ruler::isIn(const Vector& vv) { // test to see if point is on edge, if so, considered inside if (isOn(vv,p1,p2) || isOn(vv,p1,p3) || isOn(vv,p2,p3)) return 1; /* v[0]-- x value of point being tested v[1]-- y value of point being tested This algorithm is from "An Introduction to Ray Tracing", Academic Press, 1989, edited by Andrew Glassner, pg 53 -- a point lies in a polygon if a line is extended from the point to infinite in any direction and the number of intersections with the polygon is odd. This is valid for both concave and convex polygons. Points on a vertex are considered inside. Points on a edge are considered inside. */ // analysis in ref coords Vector v = parent->mapToRef(vv,Coord::CANVAS); int crossings = 0; // number of crossings int sign; // for all edges for (int i=0; i<3; i++) { Vector v1, v2; switch (i) { case 0: v1 = p1-v; v2 = p2-v; sign = ((v1[1])>=0) ? 1 : -1; // init sign break; case 1: v1 = p2-v; v2 = p3-v; break; case 2: v1 = p3-v; v2 = p1-v; break; } int nextSign = (v2[1]>=0) ? 1 : -1; // sign holder for p2 if (sign != nextSign) { if (v1[0]>0 && v2[0]>0) crossings++; else if (v1[0]>0 || v2[0]>0) { if (v1[0]-(v1[1]*(v2[0]-v1[0])/(v2[1]-v1[1])) > 0) crossings++; } sign = nextSign; } } return fmod(float(crossings),float(2)) ? 1 : 0; // if odd, point is inside } void Ruler::setCoordSystem(Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::CoordSystem dsys, Coord::SkyDist dist) { coordSystem = sys; skyFrame = sky; distSystem = dsys; distDist = dist; updateBBox(); } void Ruler::distToStr(ostringstream& str) { switch (distSystem) { case Coord::IMAGE: str << dist << " img"; break; case Coord::PHYSICAL: str << dist << " phy"; break; case Coord::AMPLIFIER: str << dist << " amp"; break; case Coord::DETECTOR: str << dist << " det"; break; default: if (parent->findFits()->hasWCSCel(distSystem)) switch (distDist) { case Coord::DEGREE: str << dist << " deg"; break; case Coord::ARCMIN: str << dist << '\''; break; case Coord::ARCSEC: str << dist << '"'; break; } else str << dist << " lin"; } } // list void Ruler::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { if (!strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 1); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector v1 = ptr->mapFromRef(p1,sys,sky); Vector v2 = ptr->mapFromRef(p2,sys,sky); str << type_ << '(' << setprecision(10) << v1 << ',' << v2 << ')'; } break; case Coord::SEXAGESIMAL: str << type_ << '('; listRADEC(ptr,p1,sys,sky,format); str << ra << ',' << dec << ','; listRADEC(ptr,p2,sys,sky,format); str << ra << ',' << dec << ')'; break; } } else listNonCel(ptr, str, sys); } if (conj) str << " ||"; str << " ruler="; coord.listCoordSystem(str, coordSystem, skyFrame, ptr); str << ' '; coord.listDistSystem(str, distSystem, distDist, ptr); listProperties(str, 0); } } void Ruler::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); Vector vv[2]; vv[0] = p1; vv[1] = p2; ostringstream sysstr; coord.listCoordSystem(sysstr, coordSystem, skyFrame, ptr); sysstr << ends; ostringstream diststr; coord.listDistSystem(diststr, distSystem, distDist, ptr); diststr << ends; XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowPoint(ptr,sys,sky,format,vv,2); XMLRow(XMLPARAM,(char*)(sysstr.str().c_str())); XMLRow(XMLPARAM2,(char*)(diststr.str().c_str())); XMLRowProps(ptr,sys); XMLRowEnd(str); } saods9/tksao/frame/ruler.h000644 000765 000000 00000003573 12752665521 016124 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __ruler_h__ #define __ruler_h__ #include "baseline.h" class Ruler : public BaseLine { private: Vector p3; Coord::CoordSystem coordSystem; Coord::SkyFrame skyFrame; Coord::CoordSystem distSystem; Coord::SkyDist distDist; double dist; private: void renderX(Drawable, Coord::InternalSystem, RenderMode); GC renderXGC(RenderMode); void renderPS(int); void renderPSGC(int); #ifdef MAC_OSX_TK void renderMACOSX(); void renderMACOSXGC(); #endif #ifdef __WIN32 void renderWIN32(); void renderWIN32GC(); #endif void updateHandles(); void calcAllBBox(); int isOn(const Vector&, const Vector&, const Vector&); void distToStr(ostringstream&); public: Ruler(const Ruler&); Ruler(Base* p, const Vector& ptr1, const Vector& ptr2, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::CoordSystem distsys, Coord::SkyDist distfor, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Marker* dup() {return new Ruler(*this);} void updateCoords(const Matrix&); int isIn(const Vector&); const Vector& getP1() {return p1;} const Vector& getP2() {return p2;} const Vector& getP3() {return p3;} void setCoordSystem(Coord::CoordSystem, Coord::SkyFrame, Coord::CoordSystem, Coord::SkyDist); Coord::CoordSystem getSystem() {return coordSystem;} Coord::SkyFrame getSkyFrame() {return skyFrame;} Coord::CoordSystem getDistSystem() {return distSystem;} Coord::SkyDist getDistDist() {return distDist;} void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); }; #endif saods9/tksao/frame/saolex.C000644 000765 000000 00000136710 12705446251 016214 0ustar00joyewheel000000 000000 #line 2 "frame/saolex.C" #line 4 "frame/saolex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer saoFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *saoalloc (yy_size_t ); void *saorealloc (void *,yy_size_t ); void saofree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 27 #define YY_END_OF_BUFFER 28 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[101] = { 0, 0, 0, 2, 2, 28, 26, 22, 25, 26, 26, 26, 26, 26, 15, 21, 21, 21, 21, 21, 21, 8, 21, 21, 21, 21, 26, 26, 2, 1, 22, 23, 0, 18, 0, 19, 0, 15, 17, 16, 15, 21, 21, 21, 21, 21, 21, 21, 21, 10, 21, 21, 21, 24, 0, 20, 2, 0, 0, 0, 16, 21, 4, 21, 21, 21, 9, 21, 21, 21, 21, 16, 0, 17, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 6, 21, 11, 21, 21, 21, 21, 5, 21, 21, 13, 21, 3, 7, 12, 14, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 5, 1, 1, 1, 1, 6, 1, 1, 1, 7, 1, 7, 8, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 17, 17, 19, 17, 20, 21, 22, 17, 23, 24, 25, 26, 27, 17, 28, 29, 17, 1, 30, 1, 1, 1, 1, 31, 32, 33, 34, 35, 36, 37, 17, 38, 17, 17, 39, 17, 40, 41, 42, 17, 43, 44, 45, 46, 47, 17, 48, 49, 17, 50, 1, 51, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[52] = { 0, 1, 1, 2, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1 } ; static yyconst flex_int16_t yy_base[107] = { 0, 0, 0, 252, 246, 248, 266, 245, 266, 243, 240, 236, 44, 232, 46, 48, 49, 51, 50, 53, 232, 230, 58, 54, 55, 66, 47, 186, 0, 266, 233, 266, 229, 266, 226, 266, 222, 91, 68, 77, 99, 221, 102, 96, 89, 98, 107, 106, 112, 220, 111, 115, 120, 266, 176, 266, 0, 115, 124, 217, 75, 127, 213, 134, 130, 136, 203, 139, 143, 150, 144, 199, 195, 192, 147, 156, 154, 161, 169, 173, 157, 179, 176, 185, 182, 172, 163, 192, 177, 198, 199, 149, 201, 204, 124, 210, 94, 85, 71, 63, 266, 250, 253, 256, 62, 259, 262 } ; static yyconst flex_int16_t yy_def[107] = { 0, 100, 1, 101, 101, 100, 100, 100, 100, 100, 102, 103, 100, 100, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 100, 105, 106, 100, 100, 100, 102, 100, 103, 100, 100, 100, 100, 100, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 100, 105, 100, 106, 100, 100, 100, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 100, 100, 100, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, 100, 100, 100, 100, 100, 100 } ; static yyconst flex_int16_t yy_nxt[318] = { 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 20, 20, 20, 21, 22, 23, 24, 20, 20, 20, 25, 20, 20, 26, 15, 16, 17, 18, 19, 20, 20, 20, 20, 21, 22, 23, 24, 20, 20, 20, 25, 20, 20, 27, 6, 36, 37, 39, 40, 100, 100, 100, 100, 42, 100, 100, 100, 46, 41, 100, 53, 43, 45, 44, 100, 47, 48, 100, 50, 51, 38, 49, 100, 52, 42, 58, 100, 60, 46, 38, 53, 43, 45, 44, 57, 47, 100, 48, 50, 51, 100, 49, 39, 37, 52, 100, 58, 100, 57, 100, 39, 40, 59, 100, 60, 57, 42, 100, 100, 61, 62, 64, 100, 100, 63, 59, 100, 71, 65, 57, 66, 100, 67, 68, 72, 100, 73, 42, 100, 61, 62, 100, 64, 69, 63, 100, 70, 100, 65, 75, 100, 66, 67, 68, 100, 100, 74, 77, 100, 76, 100, 100, 78, 69, 80, 100, 70, 100, 100, 82, 75, 81, 100, 84, 100, 79, 74, 77, 83, 76, 100, 88, 78, 100, 100, 80, 85, 100, 100, 82, 100, 81, 87, 100, 84, 79, 100, 86, 83, 92, 89, 88, 91, 100, 73, 90, 85, 73, 94, 100, 100, 71, 100, 87, 100, 100, 93, 86, 97, 92, 89, 100, 95, 91, 100, 90, 96, 98, 94, 71, 55, 100, 100, 99, 38, 35, 93, 33, 30, 97, 55, 100, 95, 100, 38, 35, 96, 98, 33, 31, 30, 100, 29, 99, 28, 28, 28, 32, 29, 32, 34, 100, 34, 54, 100, 54, 56, 100, 56, 5, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 } ; static yyconst flex_int16_t yy_chk[318] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 12, 14, 14, 15, 16, 18, 17, 14, 19, 23, 24, 18, 104, 22, 26, 15, 17, 16, 99, 19, 22, 25, 23, 24, 38, 22, 98, 25, 14, 38, 60, 60, 18, 39, 26, 15, 17, 16, 39, 19, 97, 22, 23, 24, 44, 22, 37, 37, 25, 96, 38, 43, 37, 45, 40, 40, 42, 42, 42, 39, 40, 47, 46, 43, 44, 46, 50, 48, 45, 57, 51, 57, 47, 37, 48, 52, 50, 50, 58, 94, 58, 40, 61, 43, 44, 64, 46, 51, 45, 63, 52, 65, 47, 63, 67, 48, 50, 50, 68, 70, 61, 65, 74, 64, 91, 69, 67, 51, 69, 76, 52, 75, 80, 74, 63, 70, 77, 76, 86, 68, 61, 65, 75, 64, 78, 80, 67, 85, 79, 69, 77, 82, 88, 74, 81, 70, 79, 84, 76, 68, 83, 78, 75, 85, 81, 80, 83, 87, 73, 82, 77, 72, 88, 89, 90, 71, 92, 79, 66, 93, 87, 78, 92, 85, 81, 95, 89, 83, 62, 82, 90, 93, 88, 59, 54, 49, 41, 95, 36, 34, 87, 32, 30, 92, 27, 21, 89, 20, 13, 11, 90, 93, 10, 9, 7, 5, 4, 95, 101, 101, 101, 102, 3, 102, 103, 0, 103, 105, 0, 105, 106, 0, 106, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "frame/saolex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "frame/saolex.L" #include #include #include #include "util.h" #include "saoparser.H" extern YYSTYPE* saolval; extern saoFlexLexer* saolexx; /* rules */ #line 528 "frame/saolex.C" #define INITIAL 0 #define DISCARD 1 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 30 "frame/saolex.L" #line 632 "frame/saolex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 101 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 100 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 32 "frame/saolex.L" { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(saolval->str,""); // feed a blank string return STRING; } YY_BREAK case 2: YY_RULE_SETUP #line 39 "frame/saolex.L" { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(SAOBUFSIZE-1) ? yyleng:(SAOBUFSIZE-1); strncpy(saolval->str,yytext,ll); saolval->str[ll] = '\0'; return STRING; } YY_BREAK case 3: YY_RULE_SETUP #line 47 "frame/saolex.L" {return ANNULUS_;} YY_BREAK case 4: YY_RULE_SETUP #line 48 "frame/saolex.L" {return BOX_;} YY_BREAK case 5: YY_RULE_SETUP #line 49 "frame/saolex.L" {return CIRCLE_;} YY_BREAK case 6: YY_RULE_SETUP #line 50 "frame/saolex.L" {return DEBUG_;} YY_BREAK case 7: YY_RULE_SETUP #line 51 "frame/saolex.L" {return ELLIPSE_;} YY_BREAK case 8: YY_RULE_SETUP #line 52 "frame/saolex.L" {return N_;} YY_BREAK case 9: YY_RULE_SETUP #line 53 "frame/saolex.L" {return OFF_;} YY_BREAK case 10: YY_RULE_SETUP #line 54 "frame/saolex.L" {return ON_;} YY_BREAK case 11: YY_RULE_SETUP #line 55 "frame/saolex.L" {return POINT_;} YY_BREAK case 12: YY_RULE_SETUP #line 56 "frame/saolex.L" {return POLYGON_;} YY_BREAK case 13: YY_RULE_SETUP #line 57 "frame/saolex.L" {return ROTBOX_;} YY_BREAK case 14: YY_RULE_SETUP #line 58 "frame/saolex.L" {return VERSION_;} YY_BREAK case 15: YY_RULE_SETUP #line 60 "frame/saolex.L" { // Integer saolval->integer = atoi(yytext); return INT; } YY_BREAK case 16: #line 66 "frame/saolex.L" case 17: YY_RULE_SETUP #line 66 "frame/saolex.L" { // Real Number saolval->real = atof(yytext); return REAL; } YY_BREAK case 18: #line 72 "frame/saolex.L" case 19: YY_RULE_SETUP #line 72 "frame/saolex.L" { // Quoted String int ll = (yyleng-2)<(SAOBUFSIZE-1)?(yyleng-2):(SAOBUFSIZE-1); strncpy(saolval->str,yytext+1,ll); // skip the " " saolval->str[ll] = '\0'; // Remove the '"' return STRING; } YY_BREAK case 20: YY_RULE_SETUP #line 79 "frame/saolex.L" { // Quoted String int ll = (yyleng-2)<(SAOBUFSIZE-1)?(yyleng-2):(SAOBUFSIZE-1); strncpy(saolval->str,yytext+1,ll); // skip the '{' saolval->str[ll] = '\0'; // Remove the '}' return STRING; } YY_BREAK case 21: YY_RULE_SETUP #line 86 "frame/saolex.L" { // General String int ll = yyleng <(SAOBUFSIZE-1) ? yyleng:(SAOBUFSIZE-1); strncpy(saolval->str,yytext,ll); saolval->str[ll] = '\0'; return STRING; } YY_BREAK case 22: YY_RULE_SETUP #line 93 "frame/saolex.L" { // White Spaces } YY_BREAK case 23: /* rule 23 can match eol */ YY_RULE_SETUP #line 96 "frame/saolex.L" { // windows line feed return '\n'; } YY_BREAK case 24: YY_RULE_SETUP #line 100 "frame/saolex.L" { // fake line feed return '\n'; } YY_BREAK case 25: /* rule 25 can match eol */ YY_RULE_SETUP #line 104 "frame/saolex.L" { // linefeed return '\n'; } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(DISCARD): #line 108 "frame/saolex.L" { // eof return EOF_; } YY_BREAK case 26: YY_RULE_SETUP #line 112 "frame/saolex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 27: YY_RULE_SETUP #line 116 "frame/saolex.L" ECHO; YY_BREAK #line 891 "frame/saolex.C" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; saofree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); saofree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ saorealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) saorealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 101 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 101 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 100); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) saoalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) saoalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) saofree((void *) b->yy_ch_buf ); saofree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)saoalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)saorealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) saoalloc(new_size ); else (yy_start_stack) = (int *) saorealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *saoalloc (yy_size_t size ) { return (void *) malloc( size ); } void *saorealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void saofree (void * ptr ) { free( (char *) ptr ); /* see saorealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 116 "frame/saolex.L" void saoDiscard(int doit) { if (saolexx) saolexx->begin(DISCARD, doit); } void saoFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/frame/saolex.L000644 000765 000000 00000004707 12705446251 016225 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "util.h" #include "saoparser.H" extern YYSTYPE* saolval; extern saoFlexLexer* saolexx; %} %x DISCARD D [0-9] E [Ee][+-]?{D}+ /* rules */ %% [\n] { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(saolval->str,""); // feed a blank string return STRING; } [^\n]* { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(SAOBUFSIZE-1) ? yyleng:(SAOBUFSIZE-1); strncpy(saolval->str,yytext,ll); saolval->str[ll] = '\0'; return STRING; } annulus {return ANNULUS_;} box {return BOX_;} circle {return CIRCLE_;} debug {return DEBUG_;} ellipse {return ELLIPSE_;} n {return N_;} off {return OFF_;} on {return ON_;} point {return POINT_;} polygon {return POLYGON_;} rotbox {return ROTBOX_;} version {return VERSION_;} [+-]?{D}+ { // Integer saolval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number saolval->real = atof(yytext); return REAL; } \"[^\"\n]*\" | \'[^\'\n]*\' { // Quoted String int ll = (yyleng-2)<(SAOBUFSIZE-1)?(yyleng-2):(SAOBUFSIZE-1); strncpy(saolval->str,yytext+1,ll); // skip the " " saolval->str[ll] = '\0'; // Remove the '"' return STRING; } \{[^\}\n]*\} { // Quoted String int ll = (yyleng-2)<(SAOBUFSIZE-1)?(yyleng-2):(SAOBUFSIZE-1); strncpy(saolval->str,yytext+1,ll); // skip the '{' saolval->str[ll] = '\0'; // Remove the '}' return STRING; } [0-9A-Za-z]+ { // General String int ll = yyleng <(SAOBUFSIZE-1) ? yyleng:(SAOBUFSIZE-1); strncpy(saolval->str,yytext,ll); saolval->str[ll] = '\0'; return STRING; } [ \t]+ { // White Spaces } \r\n { // windows line feed return '\n'; } \\n { // fake line feed return '\n'; } \n { // linefeed return '\n'; } <> { // eof return EOF_; } . { // Else, return the char return yytext[0]; } %% void saoDiscard(int doit) { if (saolexx) saolexx->begin(DISCARD, doit); } void saoFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/frame/saoparser.C000644 000765 000000 00000162352 12553253032 016713 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse saoparse #define yylex saolex #define yyerror saoerror #define yylval saolval #define yychar saochar #define yydebug saodebug #define yynerrs saonerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, STRING = 260, EOF_ = 261, ANNULUS_ = 262, BOX_ = 263, CIRCLE_ = 264, DEBUG_ = 265, ELLIPSE_ = 266, N_ = 267, OFF_ = 268, ON_ = 269, POINT_ = 270, POLYGON_ = 271, ROTBOX_ = 272, VERSION_ = 273 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define STRING 260 #define EOF_ 261 #define ANNULUS_ 262 #define BOX_ 263 #define CIRCLE_ 264 #define DEBUG_ 265 #define ELLIPSE_ 266 #define N_ 267 #define OFF_ 268 #define ON_ 269 #define POINT_ 270 #define POLYGON_ 271 #define ROTBOX_ 272 #define VERSION_ 273 /* Copy the first part of user declarations. */ #line 10 "frame/saoparser.Y" #define YYDEBUG 1 #define FITSPTR (fr->findFits()) #define DISCARD_(x) {yyclearin; saoDiscard(x);} #include #include #include #include "base.h" #include "fitsimage.h" #include "basemarker.h" #undef yyFlexLexer #define yyFlexLexer saoFlexLexer #include extern int saolex(void*, saoFlexLexer*); extern void saoerror(Base*, saoFlexLexer*, const char*); extern void saoDiscard(int); static unsigned short globalProps; static unsigned short localProps; static const char *color = "green"; static int dash[] = {8,3}; static const char *font = "helvetica 10 normal roman"; static const char *text = ""; static char localComment[80]; static List polylist; static List taglist; static List cblist; static double aAnnuli[MAXANNULI]; static Vector aVector[MAXANNULI]; static int aNum; static int aStatus; static Vector aCenter; static double aAngle; static unsigned short aProps; static char aComment[80]; static void setProps(unsigned short* props, unsigned short prop, int value); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 59 "frame/saoparser.Y" { #define SAOBUFSIZE 2048 double real; int integer; char str[SAOBUFSIZE]; double vector[3]; } /* Line 193 of yacc.c. */ #line 197 "frame/saoparser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 210 "frame/saoparser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 160 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 30 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 31 /* YYNRULES -- Number of rules. */ #define YYNRULES 59 /* YYNRULES -- Number of states. */ #define YYNSTATES 139 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 273 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 19, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 28, 2, 29, 2, 2, 27, 2, 22, 23, 2, 25, 21, 26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 20, 2, 24, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 7, 11, 14, 15, 18, 20, 24, 26, 28, 30, 32, 34, 36, 38, 40, 41, 43, 44, 46, 47, 49, 50, 52, 54, 56, 60, 64, 68, 69, 70, 71, 73, 75, 83, 93, 94, 107, 119, 129, 148, 158, 168, 187, 193, 194, 201, 205, 207, 209, 213, 215, 217, 218, 219, 223, 225, 226 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 31, 0, -1, 46, 32, 56, -1, 32, 33, 34, -1, 33, 34, -1, -1, 10, 36, -1, 18, -1, 47, 48, 49, -1, 57, -1, 19, -1, 20, -1, 6, -1, 4, -1, 3, -1, 14, -1, 13, -1, -1, 21, -1, -1, 22, -1, -1, 23, -1, -1, 41, -1, 35, -1, 35, -1, 35, 37, 35, -1, 12, 24, 3, -1, 35, 37, 35, -1, -1, -1, -1, 25, -1, 26, -1, 9, 38, 45, 37, 42, 39, 59, -1, 7, 38, 45, 37, 42, 37, 42, 39, 59, -1, -1, 7, 38, 45, 37, 42, 37, 42, 37, 50, 54, 39, 59, -1, 7, 38, 45, 37, 42, 37, 42, 37, 44, 39, 59, -1, 11, 38, 45, 37, 43, 37, 40, 39, 59, -1, 11, 38, 45, 37, 43, 37, 40, 39, 27, 28, 11, 38, 45, 37, 43, 37, 40, 39, -1, 8, 38, 45, 37, 43, 37, 40, 39, 59, -1, 17, 38, 45, 37, 43, 37, 40, 39, 59, -1, 8, 38, 45, 37, 43, 37, 40, 39, 27, 28, 8, 38, 45, 37, 43, 37, 40, 39, -1, 15, 38, 45, 39, 59, -1, -1, 16, 51, 38, 52, 39, 59, -1, 52, 37, 53, -1, 53, -1, 45, -1, 54, 37, 55, -1, 55, -1, 42, -1, -1, -1, 29, 58, 5, -1, 56, -1, -1, 29, 60, 5, 56, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 97, 97, 100, 101, 104, 105, 106, 107, 108, 111, 112, 113, 116, 117, 120, 121, 124, 125, 128, 129, 132, 133, 136, 137, 140, 143, 146, 155, 158, 167, 175, 183, 184, 185, 188, 192, 196, 196, 205, 211, 227, 234, 250, 255, 262, 266, 266, 271, 272, 275, 278, 279, 282, 286, 313, 313, 316, 317, 317 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "INT", "REAL", "STRING", "EOF_", "ANNULUS_", "BOX_", "CIRCLE_", "DEBUG_", "ELLIPSE_", "N_", "OFF_", "ON_", "POINT_", "POLYGON_", "ROTBOX_", "VERSION_", "'\\n'", "';'", "','", "'('", "')'", "'='", "'+'", "'-'", "'&'", "'!'", "'#'", "$accept", "start", "commands", "command", "terminator", "numeric", "debug", "sp", "bp", "ep", "optangle", "angle", "value", "vvalue", "numberof", "coord", "initGlobal", "initLocal", "include", "shape", "@1", "@2", "polyNodes", "polyNode", "aRads", "aRad", "processAnnulus", "generalComment", "@3", "shapeComment", "@4", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 10, 59, 44, 40, 41, 61, 43, 45, 38, 33, 35 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 30, 31, 32, 32, 33, 33, 33, 33, 33, 34, 34, 34, 35, 35, 36, 36, 37, 37, 38, 38, 39, 39, 40, 40, 41, 42, 43, 44, 45, 46, 47, 48, 48, 48, 49, 49, 50, 49, 49, 49, 49, 49, 49, 49, 49, 51, 49, 52, 52, 53, 54, 54, 55, 56, 58, 57, 59, 60, 59 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 3, 3, 2, 0, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 3, 3, 3, 0, 0, 0, 1, 1, 7, 9, 0, 12, 11, 9, 18, 9, 9, 18, 5, 0, 6, 3, 1, 1, 3, 1, 1, 0, 0, 3, 1, 0, 4 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 30, 0, 31, 1, 0, 7, 55, 31, 0, 32, 9, 16, 15, 6, 0, 0, 2, 12, 10, 11, 4, 33, 34, 0, 56, 3, 19, 19, 19, 19, 19, 46, 19, 8, 20, 0, 0, 0, 0, 0, 19, 0, 14, 13, 17, 17, 17, 17, 17, 21, 0, 17, 18, 0, 0, 0, 0, 0, 22, 54, 50, 21, 49, 0, 29, 26, 17, 17, 17, 21, 17, 58, 57, 45, 0, 54, 17, 0, 0, 23, 54, 23, 0, 48, 47, 23, 21, 27, 25, 21, 24, 35, 21, 54, 21, 37, 54, 54, 54, 59, 54, 0, 21, 0, 36, 0, 42, 0, 40, 43, 0, 54, 53, 21, 52, 0, 0, 28, 39, 0, 54, 19, 19, 51, 38, 0, 0, 17, 17, 0, 0, 17, 17, 23, 23, 21, 21, 44, 41 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 1, 7, 8, 20, 44, 13, 53, 35, 59, 89, 90, 112, 68, 102, 60, 2, 9, 23, 33, 103, 40, 61, 62, 113, 114, 72, 10, 14, 73, 82 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -71 static const yytype_int16 yypact[] = { -71, 21, 119, -71, 11, -71, -71, 116, 16, 31, -71, -71, -71, -71, 22, 16, -71, -71, -71, -71, -71, -71, -71, 135, -71, -71, 9, 9, 9, 9, 9, -71, 9, -71, -71, 69, 69, 69, 69, 69, 9, 69, -71, -71, 20, 20, 20, 20, 20, 26, 69, 20, -71, 69, 69, 69, 69, 69, -71, 33, -71, 56, -71, 69, -71, -71, 20, 20, 20, 26, 20, -71, -71, -71, 69, 33, 20, 69, 69, 69, 33, 69, 61, -71, -71, 69, 137, -71, -71, 26, -71, -71, 26, -71, 26, 58, 33, -1, 3, -71, 33, 52, 26, 69, -71, 50, -71, 53, -71, -71, 79, 33, -71, 56, -71, 75, 73, -71, -71, 69, 33, 9, 9, -71, -71, 69, 69, 20, 20, 69, 69, 20, 20, 69, 69, 26, 26, -71, -71 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -71, -71, -71, 80, 71, -10, -71, -28, -27, 19, -70, -71, -40, -2, -71, -29, -71, -71, -71, -71, -71, -71, -71, 15, -71, -21, -3, -71, -71, -46, -71 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -55 static const yytype_int16 yytable[] = { 36, 37, 38, 39, 16, 41, 45, 46, 47, 48, 49, 92, 51, 50, 66, 94, 69, 54, 55, 56, 57, 3, 17, 63, 11, 12, 105, 24, 71, 84, 107, 34, 71, 74, 91, 18, 19, 86, 77, 78, 79, 52, 81, 64, 65, 67, 65, 67, 85, 58, 104, 106, 108, 67, 109, 70, 21, 22, 95, -17, -17, 76, 71, 135, 136, 118, 93, 65, 87, 88, 101, 88, 42, 43, 124, 88, 110, 52, 115, 58, 75, 116, 117, 121, 122, 119, 25, 15, 80, 83, 99, 0, 0, 65, 125, 126, 127, 128, 123, 129, 130, 0, 0, 133, 134, 96, 0, 0, 97, 65, 0, 98, 0, 100, 0, 0, -54, 0, 0, 67, 67, 111, -5, 88, 88, -5, 4, 131, 132, 4, 0, 0, 120, 0, 5, -5, -5, 5, -5, -5, -17, -17, 26, 27, 28, 6, 29, 0, 6, -17, 30, 31, 32, 0, 137, 138, 0, 0, 52, 0, 58 }; static const yytype_int16 yycheck[] = { 27, 28, 29, 30, 7, 32, 35, 36, 37, 38, 39, 81, 41, 40, 54, 85, 56, 45, 46, 47, 48, 0, 6, 51, 13, 14, 27, 5, 29, 75, 27, 22, 29, 61, 80, 19, 20, 77, 66, 67, 68, 21, 70, 53, 54, 55, 56, 57, 76, 23, 96, 97, 98, 63, 100, 57, 25, 26, 86, 3, 4, 63, 29, 133, 134, 111, 5, 77, 78, 79, 12, 81, 3, 4, 120, 85, 24, 21, 28, 23, 61, 28, 3, 8, 11, 113, 15, 7, 69, 74, 93, -1, -1, 103, 121, 122, 125, 126, 119, 127, 128, -1, -1, 131, 132, 86, -1, -1, 89, 119, -1, 92, -1, 94, -1, -1, 0, -1, -1, 129, 130, 102, 6, 133, 134, 6, 10, 129, 130, 10, -1, -1, 113, -1, 18, 19, 20, 18, 19, 20, 3, 4, 7, 8, 9, 29, 11, -1, 29, 12, 15, 16, 17, -1, 135, 136, -1, -1, 21, -1, 23 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 31, 46, 0, 10, 18, 29, 32, 33, 47, 57, 13, 14, 36, 58, 33, 56, 6, 19, 20, 34, 25, 26, 48, 5, 34, 7, 8, 9, 11, 15, 16, 17, 49, 22, 38, 38, 38, 38, 38, 51, 38, 3, 4, 35, 45, 45, 45, 45, 45, 38, 45, 21, 37, 37, 37, 37, 37, 23, 39, 45, 52, 53, 37, 35, 35, 42, 35, 43, 42, 43, 29, 56, 59, 37, 39, 43, 37, 37, 37, 39, 37, 60, 53, 59, 37, 42, 35, 35, 40, 41, 59, 40, 5, 40, 37, 39, 39, 39, 56, 39, 12, 44, 50, 59, 27, 59, 27, 59, 59, 24, 39, 42, 54, 55, 28, 28, 3, 59, 37, 39, 8, 11, 55, 59, 38, 38, 45, 45, 37, 37, 43, 43, 37, 37, 40, 40, 39, 39 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (fr, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, fr, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, saoFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; saoFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (fr); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, saoFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; saoFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, Base* fr, saoFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, fr, ll) YYSTYPE *yyvsp; int yyrule; Base* fr; saoFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , fr, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, fr, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, Base* fr, saoFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, fr, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; Base* fr; saoFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (fr); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (Base* fr, saoFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (Base* fr, saoFlexLexer* ll) #else int yyparse (fr, ll) Base* fr; saoFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 7: #line 106 "frame/saoparser.Y" {cerr << "SAOimage" << endl;;} break; case 12: #line 113 "frame/saoparser.Y" {YYACCEPT;;} break; case 13: #line 116 "frame/saoparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 14: #line 117 "frame/saoparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 15: #line 120 "frame/saoparser.Y" {yydebug=1;;} break; case 16: #line 121 "frame/saoparser.Y" {yydebug=0;;} break; case 23: #line 136 "frame/saoparser.Y" {(yyval.real) = 0;;} break; case 24: #line 137 "frame/saoparser.Y" {(yyval.real) = (yyvsp[(1) - (1)].real);;} break; case 25: #line 140 "frame/saoparser.Y" {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;} break; case 26: #line 143 "frame/saoparser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), Coord::IMAGE);;} break; case 27: #line 147 "frame/saoparser.Y" { Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::IMAGE); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 28: #line 155 "frame/saoparser.Y" {(yyval.integer) = (yyvsp[(3) - (3)].integer);;} break; case 29: #line 159 "frame/saoparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::IMAGE); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 30: #line 167 "frame/saoparser.Y" { globalProps = Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::HIGHLITE | Marker::INCLUDE | Marker::SOURCE; ;} break; case 31: #line 175 "frame/saoparser.Y" { // reset maperr flag maperr =0; localProps = globalProps; ;} break; case 32: #line 183 "frame/saoparser.Y" {setProps(&localProps, Marker::INCLUDE, 1);;} break; case 33: #line 184 "frame/saoparser.Y" {setProps(&localProps, Marker::INCLUDE, 1);;} break; case 34: #line 185 "frame/saoparser.Y" {setProps(&localProps, Marker::INCLUDE, 0);;} break; case 35: #line 189 "frame/saoparser.Y" {fr->createCircleCmd(Vector((yyvsp[(3) - (7)].vector)), (yyvsp[(5) - (7)].real), color,dash,1,font,text,localProps,localComment,taglist,cblist);;} break; case 36: #line 193 "frame/saoparser.Y" {fr->createAnnulusCmd(Vector((yyvsp[(3) - (9)].vector)), (yyvsp[(5) - (9)].real),(yyvsp[(7) - (9)].real),1, color,dash,1,font,text,localProps,localComment,taglist,cblist);;} break; case 37: #line 196 "frame/saoparser.Y" {aNum=2;;} break; case 38: #line 198 "frame/saoparser.Y" { aAnnuli[0] = (yyvsp[(5) - (12)].real); aAnnuli[1] = (yyvsp[(7) - (12)].real); fr->createAnnulusCmd(Vector((yyvsp[(3) - (12)].vector)), aNum,aAnnuli, color,dash,1,font,text,localProps,localComment,taglist,cblist); ;} break; case 39: #line 206 "frame/saoparser.Y" {fr->createAnnulusCmd(Vector((yyvsp[(3) - (11)].vector)), (yyvsp[(5) - (11)].real),(yyvsp[(7) - (11)].real),(yyvsp[(9) - (11)].integer), color,dash,1,font,text,localProps,localComment,taglist,cblist);;} break; case 40: #line 212 "frame/saoparser.Y" { // for ellipse annulus aStatus = 1; aCenter = Vector((yyvsp[(3) - (9)].vector)); aAngle = (yyvsp[(7) - (9)].real); aVector[0] = Vector((yyvsp[(5) - (9)].vector)); aNum = 1; strncpy(aComment,localComment,80); aProps = localProps; fr->createEllipseCmd(Vector((yyvsp[(3) - (9)].vector)), Vector((yyvsp[(5) - (9)].vector)), (yyvsp[(7) - (9)].real), color,dash,1,font,text,localProps,localComment,taglist,cblist); ;} break; case 41: #line 229 "frame/saoparser.Y" { aStatus = 2; aVector[aNum++] = Vector((yyvsp[(5) - (18)].vector)); ;} break; case 42: #line 235 "frame/saoparser.Y" { // for box annulus aStatus = 3; aCenter = Vector((yyvsp[(3) - (9)].vector)); aAngle = (yyvsp[(7) - (9)].real); aVector[0] = Vector((yyvsp[(5) - (9)].vector)); aNum = 1; strncpy(aComment,localComment,80); aProps = localProps; fr->createBoxCmd(Vector((yyvsp[(3) - (9)].vector)), Vector((yyvsp[(5) - (9)].vector)), (yyvsp[(7) - (9)].real), color,dash,1,font,text,localProps,localComment,taglist,cblist); ;} break; case 43: #line 251 "frame/saoparser.Y" {fr->createBoxCmd(Vector((yyvsp[(3) - (9)].vector)), Vector((yyvsp[(5) - (9)].vector)), (yyvsp[(7) - (9)].real), color,dash,1,font,text,localProps,localComment,taglist,cblist);;} break; case 44: #line 257 "frame/saoparser.Y" { aStatus = 4; aVector[aNum++] = Vector((yyvsp[(5) - (18)].vector)); ;} break; case 45: #line 263 "frame/saoparser.Y" {fr->createPointCmd(Vector((yyvsp[(3) - (5)].vector)), Point::BOXCIRCLE, POINTSIZE, color,dash,1,font,text,localProps,localComment,taglist,cblist);;} break; case 46: #line 266 "frame/saoparser.Y" {polylist.deleteAll();;} break; case 47: #line 267 "frame/saoparser.Y" {fr->createPolygonCmd(polylist, color,dash,1,font,text,localProps,localComment,taglist,cblist);;} break; case 50: #line 275 "frame/saoparser.Y" {polylist.append(new Vertex((yyvsp[(1) - (1)].vector)));;} break; case 53: #line 282 "frame/saoparser.Y" {aAnnuli[aNum++] = (yyvsp[(1) - (1)].real);;} break; case 54: #line 286 "frame/saoparser.Y" { switch (aStatus) { case 0: // do nothing break; case 1: // we found just an ellipse, do nothing break; case 2: // ok we have an ellipse annulus fr->markerDeleteLastCmd(); // delete the previous ellipse fr->createEllipseAnnulusCmd(aCenter, aNum,aVector, aAngle, color,dash,1,font,text,aProps,aComment,taglist,cblist); break; case 3: // we found just a box, do nothing break; case 4: // ok, we have a box annulus fr->markerDeleteLastCmd(); // delete the previous box fr->createBoxAnnulusCmd(aCenter, aNum,aVector, aAngle, color,dash,1,font,text,aProps,aComment,taglist,cblist); break; } aStatus = 0; ;} break; case 55: #line 313 "frame/saoparser.Y" {DISCARD_(1);;} break; case 58: #line 317 "frame/saoparser.Y" {DISCARD_(0);;} break; case 59: #line 318 "frame/saoparser.Y" {strncpy(localComment,(yyvsp[(3) - (4)].str),80);;} break; /* Line 1267 of yacc.c. */ #line 1813 "frame/saoparser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (fr, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (fr, ll, yymsg); } else { yyerror (fr, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, fr, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, fr, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (fr, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, fr, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, fr, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 321 "frame/saoparser.Y" static void setProps(unsigned short* props, unsigned short prop, int value) { if (value) *props |= prop; else *props &= ~prop; } saods9/tksao/frame/saoparser.H000644 000765 000000 00000005416 12553253032 016715 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, STRING = 260, EOF_ = 261, ANNULUS_ = 262, BOX_ = 263, CIRCLE_ = 264, DEBUG_ = 265, ELLIPSE_ = 266, N_ = 267, OFF_ = 268, ON_ = 269, POINT_ = 270, POLYGON_ = 271, ROTBOX_ = 272, VERSION_ = 273 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define STRING 260 #define EOF_ 261 #define ANNULUS_ 262 #define BOX_ 263 #define CIRCLE_ 264 #define DEBUG_ 265 #define ELLIPSE_ 266 #define N_ 267 #define OFF_ 268 #define ON_ 269 #define POINT_ 270 #define POLYGON_ 271 #define ROTBOX_ 272 #define VERSION_ 273 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 59 "frame/saoparser.Y" { #define SAOBUFSIZE 2048 double real; int integer; char str[SAOBUFSIZE]; double vector[3]; } /* Line 1529 of yacc.c. */ #line 93 "frame/saoparser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/frame/saoparser.Y000644 000765 000000 00000015404 12705446251 016742 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {Base* fr} %lex-param {saoFlexLexer* ll} %parse-param {saoFlexLexer* ll} %{ #define YYDEBUG 1 #define FITSPTR (fr->findFits()) #define DISCARD_(x) {yyclearin; saoDiscard(x);} #include #include #include #include "base.h" #include "fitsimage.h" #include "basemarker.h" #undef yyFlexLexer #define yyFlexLexer saoFlexLexer #include extern int saolex(void*, saoFlexLexer*); extern void saoerror(Base*, saoFlexLexer*, const char*); extern void saoDiscard(int); static unsigned short globalProps; static unsigned short localProps; static const char *color = "green"; static int dash[] = {8,3}; static const char *font = "helvetica 10 normal roman"; static const char *text = ""; static char localComment[80]; static List polylist; static List taglist; static List cblist; static double aAnnuli[MAXANNULI]; static Vector aVector[MAXANNULI]; static int aNum; static int aStatus; static Vector aCenter; static double aAngle; static unsigned short aProps; static char aComment[80]; static void setProps(unsigned short* props, unsigned short prop, int value); %} %union { #define SAOBUFSIZE 2048 double real; int integer; char str[SAOBUFSIZE]; double vector[3]; } %type numeric %type angle %type optangle %type value %type vvalue %type coord %type numberof %token INT %token REAL %token STRING %token EOF_ %token ANNULUS_ %token BOX_ %token CIRCLE_ %token DEBUG_ %token ELLIPSE_ %token N_ %token OFF_ %token ON_ %token POINT_ %token POLYGON_ %token ROTBOX_ %token VERSION_ %% start : initGlobal commands processAnnulus ; commands: commands command terminator | command terminator ; command : /* empty */ | DEBUG_ debug | VERSION_ {cerr << "SAOimage" << endl;} | initLocal include shape | generalComment ; terminator: '\n' | ';' | EOF_ {YYACCEPT;} ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; sp : /* empty */ | ',' ; bp : /* empty */ | '(' ; ep : /* emtpy */ | ')' ; optangle: /* empty */ {$$ = 0;} | angle {$$ = $1;} ; angle : numeric {$$ = degToRad($1);} /* assume degree */ ; value : numeric {$$ = FITSPTR->mapLenToRef($1, Coord::IMAGE);} ; vvalue : numeric sp numeric { Vector r = FITSPTR->mapLenToRef(Vector($1,$3), Coord::IMAGE); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } ; numberof: N_ '=' INT {$$ = $3;} ; coord : numeric sp numeric { Vector r = FITSPTR->mapToRef(Vector($1,$3), Coord::IMAGE); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } ; initGlobal:{ globalProps = Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::HIGHLITE | Marker::INCLUDE | Marker::SOURCE; } ; initLocal : { // reset maperr flag maperr =0; localProps = globalProps; } ; include : /* empty */ {setProps(&localProps, Marker::INCLUDE, 1);} | '+' {setProps(&localProps, Marker::INCLUDE, 1);} | '-' {setProps(&localProps, Marker::INCLUDE, 0);} ; shape : CIRCLE_ bp coord sp value ep shapeComment {fr->createCircleCmd(Vector($3), $5, color,dash,1,font,text,localProps,localComment,taglist,cblist);} | ANNULUS_ bp coord sp value sp value ep shapeComment {fr->createAnnulusCmd(Vector($3), $5,$7,1, color,dash,1,font,text,localProps,localComment,taglist,cblist);} | ANNULUS_ bp coord sp value sp value sp {aNum=2;} aRads ep shapeComment { aAnnuli[0] = $5; aAnnuli[1] = $7; fr->createAnnulusCmd(Vector($3), aNum,aAnnuli, color,dash,1,font,text,localProps,localComment,taglist,cblist); } | ANNULUS_ bp coord sp value sp value sp numberof ep shapeComment {fr->createAnnulusCmd(Vector($3), $5,$7,$9, color,dash,1,font,text,localProps,localComment,taglist,cblist);} | ELLIPSE_ bp coord sp vvalue sp optangle ep shapeComment { // for ellipse annulus aStatus = 1; aCenter = Vector($3); aAngle = $7; aVector[0] = Vector($5); aNum = 1; strncpy(aComment,localComment,80); aProps = localProps; fr->createEllipseCmd(Vector($3), Vector($5), $7, color,dash,1,font,text,localProps,localComment,taglist,cblist); } | ELLIPSE_ bp coord sp vvalue sp optangle ep '&' '!' ELLIPSE_ bp coord sp vvalue sp optangle ep { aStatus = 2; aVector[aNum++] = Vector($5); } | BOX_ bp coord sp vvalue sp optangle ep shapeComment { // for box annulus aStatus = 3; aCenter = Vector($3); aAngle = $7; aVector[0] = Vector($5); aNum = 1; strncpy(aComment,localComment,80); aProps = localProps; fr->createBoxCmd(Vector($3), Vector($5), $7, color,dash,1,font,text,localProps,localComment,taglist,cblist); } | ROTBOX_ bp coord sp vvalue sp optangle ep shapeComment {fr->createBoxCmd(Vector($3), Vector($5), $7, color,dash,1,font,text,localProps,localComment,taglist,cblist);} | BOX_ bp coord sp vvalue sp optangle ep '&' '!' BOX_ bp coord sp vvalue sp optangle ep { aStatus = 4; aVector[aNum++] = Vector($5); } | POINT_ bp coord ep shapeComment {fr->createPointCmd(Vector($3), Point::BOXCIRCLE, POINTSIZE, color,dash,1,font,text,localProps,localComment,taglist,cblist);} | POLYGON_ {polylist.deleteAll();} bp polyNodes ep shapeComment {fr->createPolygonCmd(polylist, color,dash,1,font,text,localProps,localComment,taglist,cblist);} ; polyNodes : polyNodes sp polyNode | polyNode ; polyNode : coord {polylist.append(new Vertex($1));} ; aRads : aRads sp aRad | aRad ; aRad : value {aAnnuli[aNum++] = $1;} ; processAnnulus : /* empty */ { switch (aStatus) { case 0: // do nothing break; case 1: // we found just an ellipse, do nothing break; case 2: // ok we have an ellipse annulus fr->markerDeleteLastCmd(); // delete the previous ellipse fr->createEllipseAnnulusCmd(aCenter, aNum,aVector, aAngle, color,dash,1,font,text,aProps,aComment,taglist,cblist); break; case 3: // we found just a box, do nothing break; case 4: // ok, we have a box annulus fr->markerDeleteLastCmd(); // delete the previous box fr->createBoxAnnulusCmd(aCenter, aNum,aVector, aAngle, color,dash,1,font,text,aProps,aComment,taglist,cblist); break; } aStatus = 0; } ; generalComment : '#' {DISCARD_(1);} STRING ; shapeComment : /* empty */ processAnnulus | '#' {DISCARD_(0);} STRING processAnnulus {strncpy(localComment,$3,80);} ; %% static void setProps(unsigned short* props, unsigned short prop, int value) { if (value) *props |= prop; else *props &= ~prop; } saods9/tksao/frame/segment.C000644 000765 000000 00000007341 12765621310 016355 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "segment.h" #include "fitsimage.h" Segment::Segment(Base* p, const Vector& ctr, const Vector& b) : BasePolygon(p,ctr,b) { strcpy(type_, "segment"); reset(b); } Segment::Segment(Base* p, const Vector& ctr, const Vector& b, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BasePolygon(p, ctr, b, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { strcpy(type_, "segment"); reset(b); } Segment::Segment(Base* p, const List& v, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BasePolygon(p, v, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { strcpy(type_, "segment"); } void Segment::renderX(Drawable drawable, Coord::InternalSystem sys, RenderMode mode) { GC lgc = renderXGC(mode); vertex.head(); Vector v1; Vector v2 = fwdMap(vertex.current()->vector,sys); vertex.next(); do { v1 = v2; v2 = fwdMap(vertex.current()->vector,sys); XDrawLine(display, drawable, lgc, v1[0], v1[1], v2[0], v2[1]); } while (vertex.next()); } void Segment::renderPS(int mode) { renderPSGC(mode); vertex.head(); int first = 1; ostringstream str; do { Vector v = fwdMap(vertex.current()->vector,Coord::CANVAS); if (first) { str << "newpath " << endl << v.TkCanvasPs(parent->canvas) << " moveto" << endl; first = 0; } else str << v.TkCanvasPs(parent->canvas) << " lineto" << endl; } while (vertex.next()); str << "stroke" << endl << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } #ifdef MAC_OSX_TK void Segment::renderMACOSX() { renderMACOSXGC(); vertex.head(); Vector v1; Vector v2 = fwdMap(vertex.current()->vector,Coord::CANVAS); vertex.next(); do { v1 = v2; v2 = fwdMap(vertex.current()->vector,Coord::CANVAS); macosxDrawLine(v1,v2); } while (vertex.next()); } #endif #ifdef __WIN32 void Segment::renderWIN32() { renderWIN32GC(); vertex.head(); Vector v1; Vector v2 = fwdMap(vertex.current()->vector,Coord::CANVAS); vertex.next(); do { v1 = v2; v2 = fwdMap(vertex.current()->vector,Coord::CANVAS); win32DrawLine(v1,v2); } while (vertex.next()); } #endif void Segment::reset(const Vector& b) { angle = 0; vertex.deleteAll(); Vector bb = b; vertex.append(new Vertex(-bb[0],-bb[1])); vertex.append(new Vertex( bb[0], bb[1])); updateBBox(); } int Segment::getSegment(const Vector& v) { // v is in canvas coords Matrix mm = fwdMatrix(); vertex.head(); Vector v1; Vector v2 = vertex.current()->vector * mm; vertex.next(); int ii = 1; do { v1 = v2; v2 = vertex.current()->vector * mm; Vector l1 = parent->mapFromRef(v1,Coord::CANVAS); Vector l2 = parent->mapFromRef(v2,Coord::CANVAS); double a = (l2-l1).angle(); Matrix mx = Translate(-l1) * FlipY() * Rotate(-a); Vector end = l2*mx; Vector vv = v*mx; if (vv[0]>0 && vv[0]-parent->markerEpsilon && vv[1]markerEpsilon) return ii; ii++; } while (vertex.next()); return 0; } // list void Segment::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { if (!strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 1); listBase(ptr, str, sys, sky, format); if (conj) str << " ||"; listProperties(str, 0); } } saods9/tksao/frame/segment.h000644 000765 000000 00000002357 12751154240 016422 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __segment_h__ #define __segment_h__ #include "basepolygon.h" #include "marker.h" #include "list.h" class Segment : public BasePolygon { protected: void renderX(Drawable, Coord::InternalSystem, RenderMode); void renderPS(int); #ifdef MAC_OSX_TK void renderMACOSX(); #endif #ifdef __WIN32 void renderWIN32(); #endif public: Segment(Base* p, const Vector& ctr, const Vector& b); Segment(Base* p, const Vector& ctr, const Vector& b, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Segment(Base* p, const List& v, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Segment(const Segment& a) : BasePolygon(a) {} Marker* dup() {return new Segment(*this);} int getSegment(const Vector&); void reset(const Vector&); void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); }; #endif saods9/tksao/frame/sigbus.h000644 000765 000000 00000002070 12705446251 016251 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __sigbus_h__ #define __sigbus_h__ #ifdef __WIN32 #define INTERP #define SETSIGBUS #define CLEARSIGBUS #else // Signal Support #include #include static sigjmp_buf crashbuf; static struct sigaction sigact, osigbus, osigsegv; static void crashHandler(int dummy) { siglongjmp(crashbuf, 1); } #define INTERP interp #define SETSIGBUS \ if (sigsetjmp(crashbuf, 1)) { \ Tcl_SetVar2(INTERP, "ds9", "msg", "A SIGBUS or SIGSEGV error has been received.", TCL_GLOBAL_ONLY); \ Tcl_SetVar2(INTERP, "ds9", "msg,level", "error", TCL_GLOBAL_ONLY); \ } \ else { \ sigact.sa_handler = crashHandler; \ sigemptyset(&sigact.sa_mask); \ sigact.sa_flags = 0; \ sigaction(SIGSEGV, &sigact, &osigsegv); \ sigaction(SIGBUS, &sigact, &osigbus); #define CLEARSIGBUS \ } \ sigaction(SIGSEGV, &osigsegv, NULL); \ sigaction(SIGBUS, &osigbus, NULL); #endif #endif saods9/tksao/frame/tag.C000644 000765 000000 00000001010 12705446251 015454 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "tag.h" #include "util.h" Tag::Tag(const Tag& t) { tag_ = dupstr(t.tag_); } Tag::Tag(const char* t) { tag_ = dupstr(t); } Tag& Tag::operator=(const Tag& t) { tag_ = dupstr(t.tag_); return *this; } Tag::~Tag() { if (tag_) delete [] tag_; } void Tag::set(const char* t) { if (tag_) delete tag_; tag_ = dupstr(t); } saods9/tksao/frame/tag.h000644 000765 000000 00000001215 12705446251 015530 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __tag_h__ #define __tag_h__ #include #include #include using namespace std; class Tag { char* tag_; Tag* previous_; Tag* next_; public: Tag(const char*); Tag(const Tag&); Tag& operator=(const Tag&); ~Tag(); const char* tag() {return tag_;} void set(const char*); Tag* previous() {return previous_;} void setPrevious(Tag* t) {previous_ = t;} Tag* next() {return next_;} void setNext(Tag* t) {next_ = t;} }; #endif saods9/tksao/frame/text.C000644 000765 000000 00000017213 12775230632 015702 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "text.h" #include "fitsimage.h" EXTERN void TkDrawAngledChars(Display *display, Drawable drawable, GC gc, Tk_Font tkfont, const char *source, int numBytes, double x, double y, double angle); Text::Text(const Text& a) : Marker(a) { rotate = a.rotate; } Text::Text(Base* p, const Vector& ctr, double ang, int rot, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : Marker(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { strcpy(type_,"text"); handle = new Vector[4]; numHandle = 4; rotate = rot; updateBBox(); } void Text::renderX(Drawable drawable, Coord::InternalSystem sys, RenderMode mode) { if (text && *text && tkfont_) { GC lgc = renderXGC(mode); XSetFont(display, lgc, Tk_FontId(tkfont_)); // origin is center of text Tk_FontMetrics metrics; Tk_GetFontMetrics(tkfont_, &metrics); int width = Tk_TextWidth(tkfont_, text, strlen(text)); int delta = (metrics.ascent-metrics.descent)/2.; double ang = rotate ? calcAngle() : 0; Vector cc = parent->mapFromRef(center,sys); Matrix mm = Translate(-cc) * Translate(-width/2., delta) * Rotate(ang) * Translate(cc); Vector vv = cc * mm; TkDrawAngledChars(display, drawable, lgc, tkfont_, text, strlen(text), vv[0], vv[1], radToDeg(ang)); } } void Text::renderPS(int mode) { renderPSGC(mode); if (text && *text && psfont_) { ostringstream str; const char* ff = Tk_NameOfFont(psfont_); str << '/' << psFontName(ff) << " findfont " << int(psFontSize(ff)*parent->getDisplayRatio()) << " scalefont setfont" << endl; double ang = rotate ? calcAngle() : 0; Vector cc = (parent->mapFromRef(center,Coord::CANVAS)).TkCanvasPs(parent->canvas); str << "gsave" << endl << "newpath " << endl << cc << " moveto" << endl << '(' << psQuote(text) << ')' << endl << "dup true charpath pathbbox " << endl << "closepath " << endl << "3 -1 roll sub 3.6 div neg " << endl << "3 1 roll sub 2 div exch " << endl << cc << " moveto " << endl << radToDeg(ang) << " rotate " << endl << " rmoveto show" << endl << "grestore" << endl; str << ends; Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); } } #ifdef MAC_OSX_TK void Text::renderMACOSX() { renderMACOSXGC(); if (text && *text && psfont_) { Tcl_DString psdstr; Tcl_DStringInit(&psdstr); int psSize = Tk_PostscriptFontName(psfont_, &psdstr); macosxFont(Tcl_DStringValue(&psdstr), psSize); Tcl_DStringFree(&psdstr); Tk_FontMetrics metrics; Tk_GetFontMetrics(psfont_, &metrics); int width = Tk_TextWidth(psfont_, text, strlen(text)); double ang = rotate ? calcAngle() : 0; Vector cc = parent->mapFromRef(center,Coord::CANVAS); Matrix mm = Translate(-cc) * Translate(-width/2.,metrics.descent) * Rotate(ang) * Translate(cc); macosxDrawText(cc*mm, 0, text); } } #endif #ifdef __WIN32 void Text::renderWIN32() { renderWIN32GC(); if (text && *text && tkfont_) { win32Font(tkfont_); Tk_FontMetrics metrics; Tk_GetFontMetrics(tkfont_, &metrics); int width = Tk_TextWidth(tkfont_, text, strlen(text)); int delta = (metrics.ascent-metrics.descent)/2.; double ang = rotate ? calcAngle() : 0; Vector cc = parent->mapFromRef(center,Coord::CANVAS); Matrix mm = Translate(-cc) * Translate(-width/2., delta) * Rotate(ang) * Translate(cc); Vector vv = cc * mm; win32DrawText(vv, 0, text); } } #endif // Support void Text::updateHandles() { Vector cc = parent->mapFromRef(center,Coord::CANVAS); if (text && *text && tkfont_) { Tk_FontMetrics metrics; Tk_GetFontMetrics(tkfont_, &metrics); int width = Tk_TextWidth(tkfont_, text, strlen(text)); Vector s(width, metrics.linespace); double ang = rotate ? calcAngle() : 0; Matrix mm = Rotate(ang) * Translate(cc); handle[0] = Vector(-s[0],-s[1])/2 * mm; handle[1] = Vector( s[0],-s[1])/2 * mm; handle[2] = Vector( s[0], s[1])/2 * mm; handle[3] = Vector(-s[0], s[1])/2 * mm; } else { Vector s(10,10); Matrix mm = Translate(cc); handle[0] = Vector(-s[0],-s[1])/2 * mm; handle[1] = Vector( s[0],-s[1])/2 * mm; handle[2] = Vector( s[0], s[1])/2 * mm; handle[3] = Vector(-s[0], s[1])/2 * mm; } } void Text::calcAllBBox() { allBBox = bbox; } int Text::isIn(const Vector& vv) { if (text && *text && tkfont_) { // origin is center of text Tk_FontMetrics metrics; Tk_GetFontMetrics(tkfont_, &metrics); float ww = Tk_TextWidth(tkfont_, text, strlen(text))/2./parent->zoom_[0]; float hh = metrics.linespace/2./parent->zoom_[1]; Vector pp = bckMap(vv,Coord::CANVAS); if (pp[0]<-ww || pp[0]>ww || pp[1]<-hh || pp[1]>hh) return 0; else return 1; } else return 0; } void Text::setRotate(int rot) { rotate = rot ? 1 : 0; updateBBox(); } // list void Text::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { if (!text || !*text) return; if (!strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 1); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ')'; break; } } else listNonCel(ptr, str, sys); } if (conj) str << " ||"; if (angle != 0) str << " textangle=" << radToDeg(parent->mapAngleFromRef(angle,sys,sky)); if (!rotate) str << " textrotate=" << 0; listProperties(str, 0); } } void Text::listNonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { Vector vv = ptr->mapFromRef(center,sys); str << type_ << '(' << setprecision(8) << vv << ')'; } void Text::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowCenter(ptr,sys,sky,format); XMLRowAng(sys,sky); XMLRow(XMLPARAM,rotate); XMLRowProps(ptr,sys); XMLRowEnd(str); } void Text::listSAOtng(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int strip) { if (!text || !*text) return; FitsImage* ptr = parent->findFits(); if (properties&INCLUDE) str << '+'; else str << '-'; switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: { Vector vv = ptr->mapFromRef(center,Coord::IMAGE); str << type_ << '(' << setprecision(8) << vv << ", \"" << text << "\")"; } break; default: if (ptr->hasWCSCel(sys)) { switch (format) { case Coord::DEGREES: { Vector vv = ptr->mapFromRef(center,sys,sky); str << type_ << '(' << setprecision(10) << vv << ", \"" << text << "\")"; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,center,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ", \"" << text << "\")"; break; } } } listSAOtngPost(str, strip); } saods9/tksao/frame/text.h000644 000765 000000 00000003203 12752662217 015744 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __text_h__ #define __text_h__ #include "marker.h" class Text : public Marker { private: int rotate; private: void renderX(Drawable, Coord::InternalSystem, RenderMode); void renderXText(Drawable, Coord::InternalSystem, RenderMode) {} void renderXInclude(Drawable, Coord::InternalSystem, RenderMode) {} void renderPS(int); void renderPSText(int) {} void renderPSInclude(int) {} #ifdef MAC_OSX_TK void renderMACOSX(); void renderMACOSXText() {} void renderMACOSXInclude() {} #endif #ifdef __WIN32 void renderWIN32(); void renderWIN32Text() {} void renderWIN32Include() {} #endif void updateHandles(); void calcAllBBox(); protected: void listNonCel(FitsImage*, ostream&, Coord::CoordSystem); public: Text(const Text&); Text(Base* p, const Vector& ctr, double a, int r, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Marker* dup() {return new Text(*this);} int isIn(const Vector&); void editBegin(int) {} void edit(const Vector& v, int h) {} void editEnd() {} void setRotate(int); int getRotate() {return rotate;} void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void listSAOtng(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int); }; #endif saods9/tksao/frame/tnglex.C000644 000765 000000 00000201270 12705446251 016214 0ustar00joyewheel000000 000000 #line 2 "frame/tnglex.C" #line 4 "frame/tnglex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer tngFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *tngalloc (yy_size_t ); void *tngrealloc (void *,yy_size_t ); void tngfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 57 #define YY_END_OF_BUFFER 58 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[250] = { 0, 0, 0, 2, 2, 58, 56, 52, 55, 56, 56, 56, 56, 56, 41, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 56, 56, 2, 1, 52, 53, 0, 48, 0, 49, 0, 41, 43, 42, 41, 0, 51, 44, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 29, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 54, 0, 50, 2, 44, 0, 45, 0, 0, 0, 42, 51, 51, 51, 51, 5, 51, 51, 51, 51, 51, 51, 51, 51, 16, 18, 51, 51, 51, 51, 23, 51, 51, 51, 51, 28, 51, 51, 51, 51, 34, 51, 51, 51, 51, 51, 51, 42, 0, 43, 0, 51, 51, 51, 7, 51, 9, 10, 51, 51, 51, 51, 51, 0, 51, 51, 51, 51, 24, 51, 26, 51, 51, 51, 51, 51, 51, 51, 37, 51, 51, 51, 0, 46, 3, 51, 6, 51, 11, 51, 51, 51, 51, 0, 51, 51, 21, 51, 25, 51, 51, 51, 32, 51, 51, 51, 51, 39, 51, 47, 46, 51, 8, 51, 51, 51, 51, 0, 19, 51, 51, 51, 51, 31, 51, 35, 51, 51, 40, 51, 12, 51, 13, 51, 0, 51, 51, 27, 51, 33, 51, 38, 51, 14, 15, 17, 20, 51, 30, 51, 51, 51, 51, 4, 51, 51, 51, 51, 51, 51, 22, 36, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 5, 1, 1, 1, 1, 6, 1, 1, 1, 7, 1, 8, 9, 1, 10, 11, 12, 13, 14, 15, 13, 13, 13, 16, 17, 1, 1, 1, 1, 1, 1, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 34, 1, 43, 1, 1, 1, 1, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 34, 60, 61, 62, 63, 64, 65, 66, 67, 34, 68, 1, 69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[70] = { 0, 1, 1, 2, 1, 1, 1, 1, 1, 3, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1 } ; static yyconst flex_int16_t yy_base[257] = { 0, 0, 0, 210, 208, 195, 1179, 187, 1179, 164, 155, 133, 61, 68, 76, 85, 90, 86, 87, 97, 104, 124, 148, 120, 137, 138, 154, 152, 168, 164, 165, 170, 193, 182, 199, 87, 58, 0, 1179, 118, 1179, 111, 1179, 109, 1179, 224, 239, 184, 221, 279, 260, 171, 205, 321, 208, 293, 302, 300, 248, 298, 288, 334, 249, 289, 338, 345, 339, 340, 354, 361, 364, 363, 377, 374, 368, 380, 250, 379, 392, 398, 405, 402, 395, 421, 425, 430, 426, 1179, 42, 1179, 0, 1179, 456, 1179, 481, 463, 488, 496, 442, 505, 506, 507, 268, 508, 510, 521, 522, 523, 525, 527, 528, 428, 305, 540, 547, 564, 554, 432, 557, 578, 575, 581, 585, 590, 591, 600, 602, 605, 607, 611, 618, 628, 621, 623, 660, 680, 687, 695, 637, 632, 703, 644, 704, 651, 668, 705, 706, 707, 708, 717, 94, 718, 729, 730, 728, 670, 733, 735, 747, 754, 756, 759, 760, 772, 773, 774, 786, 792, 785, 812, 835, 788, 820, 790, 843, 822, 844, 825, 847, 850, 118, 860, 861, 854, 864, 865, 867, 879, 884, 886, 896, 893, 897, 900, 902, 909, 923, 949, 934, 907, 933, 931, 958, 959, 102, 935, 961, 962, 968, 979, 964, 986, 981, 982, 993, 984, 1002, 1005, 1011, 1012, 1016, 360, 1025, 1018, 1027, 1032, 1037, 1039, 1042, 1043, 1046, 1049, 1179, 1053, 1058, 1060, 1063, 1069, 1076, 1079, 1074, 1080, 1086, 1089, 1095, 1109, 1110, 1096, 1105, 1179, 1156, 1160, 1164, 1166, 1170, 1174, 96 } ; static yyconst flex_int16_t yy_def[257] = { 0, 249, 1, 250, 250, 249, 249, 249, 249, 249, 251, 252, 249, 249, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 249, 254, 255, 249, 249, 249, 251, 249, 252, 249, 249, 249, 256, 256, 253, 249, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 249, 254, 249, 255, 249, 249, 249, 249, 249, 249, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 249, 249, 249, 249, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 249, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 249, 249, 253, 253, 253, 253, 253, 253, 253, 253, 253, 249, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 249, 249, 253, 253, 253, 253, 253, 253, 249, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 249, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 249, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 0, 249, 249, 249, 249, 249, 249, 249 } ; static yyconst flex_int16_t yy_nxt[1249] = { 0, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 14, 6, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 15, 25, 26, 15, 27, 28, 15, 29, 30, 31, 15, 32, 33, 15, 34, 35, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 15, 25, 26, 15, 27, 28, 29, 30, 31, 15, 32, 33, 15, 34, 36, 6, 45, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 48, 49, 49, 49, 49, 49, 49, 49, 50, 249, 249, 249, 52, 53, 249, 47, 54, 249, 249, 249, 60, 249, 249, 55, 61, 221, 89, 58, 249, 249, 44, 42, 62, 87, 56, 39, 249, 57, 52, 53, 180, 63, 89, 59, 249, 64, 60, 65, 249, 55, 61, 66, 249, 58, 44, 71, 249, 67, 62, 87, 56, 249, 249, 57, 72, 204, 180, 63, 59, 249, 249, 64, 249, 65, 68, 42, 249, 66, 249, 73, 249, 71, 40, 67, 249, 69, 249, 74, 249, 249, 75, 204, 249, 70, 249, 249, 249, 249, 76, 68, 249, 80, 249, 249, 39, 73, 249, 83, 77, 78, 249, 69, 81, 74, 249, 79, 75, 249, 82, 70, 93, 94, 85, 249, 76, 249, 38, 80, 38, 249, 84, 249, 249, 83, 77, 78, 86, 249, 81, 98, 249, 79, 249, 82, 249, 249, 93, 94, 85, 47, 47, 47, 47, 47, 47, 47, 84, 91, 92, 249, 249, 249, 86, 48, 46, 46, 46, 46, 46, 46, 46, 50, 249, 249, 249, 91, 92, 249, 249, 249, 249, 249, 249, 91, 92, 95, 95, 95, 95, 95, 95, 95, 249, 108, 249, 249, 249, 249, 103, 249, 249, 91, 92, 48, 49, 49, 49, 49, 49, 49, 49, 50, 249, 249, 249, 52, 53, 249, 249, 108, 249, 249, 249, 103, 249, 249, 249, 249, 99, 249, 249, 104, 249, 109, 249, 100, 249, 249, 249, 249, 105, 52, 53, 96, 96, 249, 97, 97, 97, 97, 97, 97, 97, 249, 99, 101, 102, 104, 249, 109, 249, 100, 249, 249, 249, 105, 249, 249, 106, 249, 249, 249, 249, 107, 111, 112, 249, 249, 249, 249, 101, 102, 110, 249, 114, 249, 249, 249, 249, 113, 249, 115, 249, 249, 106, 249, 249, 232, 249, 107, 249, 249, 119, 249, 249, 116, 249, 121, 110, 249, 114, 249, 249, 118, 113, 117, 249, 115, 122, 249, 120, 249, 249, 232, 249, 249, 249, 249, 249, 249, 249, 116, 249, 121, 249, 249, 123, 249, 118, 125, 117, 127, 126, 129, 122, 249, 120, 249, 124, 249, 249, 150, 249, 249, 249, 128, 249, 249, 249, 249, 249, 123, 249, 249, 249, 125, 249, 127, 126, 129, 133, 132, 138, 124, 249, 131, 249, 130, 96, 96, 128, 134, 134, 134, 134, 134, 134, 134, 95, 95, 95, 95, 95, 95, 95, 137, 133, 132, 249, 249, 131, 249, 130, 135, 135, 249, 136, 136, 136, 136, 136, 136, 136, 134, 134, 134, 134, 134, 134, 134, 249, 97, 97, 97, 97, 97, 97, 97, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 140, 249, 142, 141, 249, 249, 249, 139, 249, 249, 249, 249, 249, 249, 249, 143, 249, 144, 249, 249, 249, 249, 249, 249, 149, 147, 140, 148, 142, 141, 249, 249, 146, 139, 145, 249, 249, 249, 249, 152, 249, 143, 249, 144, 151, 249, 249, 249, 249, 249, 149, 147, 249, 148, 154, 249, 249, 146, 249, 145, 153, 249, 156, 249, 249, 152, 249, 155, 249, 249, 151, 157, 249, 249, 249, 249, 249, 158, 249, 249, 154, 249, 249, 249, 249, 249, 153, 160, 249, 249, 249, 249, 155, 249, 249, 249, 249, 157, 249, 249, 159, 249, 249, 158, 249, 161, 249, 164, 249, 249, 249, 249, 249, 160, 249, 249, 163, 249, 162, 249, 249, 171, 249, 249, 249, 159, 168, 249, 249, 165, 172, 161, 167, 164, 249, 249, 249, 249, 166, 249, 249, 163, 249, 162, 134, 134, 134, 134, 134, 134, 134, 249, 168, 249, 165, 249, 172, 167, 249, 249, 249, 249, 249, 166, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 169, 170, 170, 170, 170, 170, 170, 170, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 176, 175, 249, 173, 249, 174, 249, 249, 181, 249, 249, 249, 177, 178, 249, 185, 249, 249, 249, 249, 179, 182, 249, 249, 249, 249, 176, 175, 249, 173, 249, 174, 184, 183, 181, 249, 249, 249, 177, 178, 249, 249, 249, 249, 249, 249, 179, 182, 249, 249, 186, 249, 187, 249, 249, 249, 190, 188, 184, 183, 249, 249, 249, 249, 191, 249, 249, 249, 189, 249, 249, 249, 249, 249, 249, 249, 186, 249, 187, 249, 192, 249, 190, 188, 193, 249, 194, 249, 249, 195, 191, 249, 249, 189, 196, 196, 196, 196, 196, 196, 196, 249, 249, 249, 249, 192, 249, 249, 249, 249, 193, 249, 194, 249, 249, 195, 197, 170, 170, 170, 170, 170, 170, 170, 249, 249, 249, 198, 249, 249, 249, 249, 249, 249, 201, 249, 249, 199, 200, 249, 203, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 198, 249, 249, 202, 249, 249, 207, 201, 249, 249, 249, 199, 200, 249, 203, 249, 249, 205, 206, 209, 249, 249, 249, 249, 208, 249, 249, 249, 202, 249, 249, 249, 207, 249, 249, 212, 249, 249, 249, 249, 210, 213, 205, 206, 249, 209, 249, 249, 211, 208, 249, 249, 214, 196, 196, 196, 196, 196, 196, 196, 249, 212, 249, 249, 249, 210, 249, 213, 249, 215, 249, 249, 249, 249, 211, 249, 249, 218, 214, 196, 196, 196, 196, 196, 196, 196, 216, 249, 249, 217, 249, 249, 249, 249, 215, 249, 249, 249, 249, 249, 219, 249, 223, 218, 249, 249, 224, 222, 249, 220, 249, 249, 216, 249, 217, 249, 249, 225, 249, 249, 227, 249, 249, 249, 249, 249, 219, 249, 223, 249, 249, 249, 224, 222, 249, 220, 249, 226, 249, 249, 249, 249, 249, 225, 228, 249, 227, 249, 249, 249, 249, 230, 249, 249, 249, 249, 249, 249, 231, 249, 229, 249, 249, 226, 249, 233, 249, 234, 249, 249, 228, 249, 249, 249, 249, 249, 249, 230, 249, 249, 249, 235, 249, 249, 231, 229, 249, 249, 236, 249, 249, 233, 249, 234, 237, 249, 249, 249, 249, 249, 249, 239, 249, 249, 238, 249, 249, 235, 249, 249, 240, 249, 249, 249, 236, 249, 249, 249, 249, 242, 237, 249, 249, 249, 249, 249, 249, 239, 249, 241, 238, 249, 249, 249, 249, 245, 240, 243, 249, 249, 249, 246, 249, 244, 249, 242, 249, 249, 249, 247, 248, 249, 249, 249, 249, 241, 249, 249, 249, 249, 249, 245, 243, 249, 249, 249, 249, 246, 244, 249, 249, 249, 249, 249, 249, 247, 248, 37, 37, 37, 37, 41, 249, 41, 41, 43, 249, 43, 43, 51, 51, 88, 249, 88, 88, 90, 249, 90, 90, 5, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249 } ; static yyconst flex_int16_t yy_chk[1249] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 17, 18, 14, 14, 16, 256, 16, 15, 17, 18, 18, 19, 16, 16, 18, 204, 88, 17, 20, 19, 43, 41, 19, 35, 16, 39, 20, 16, 14, 14, 150, 19, 36, 17, 23, 20, 18, 20, 21, 16, 18, 20, 23, 17, 11, 23, 21, 21, 19, 35, 16, 24, 25, 16, 24, 180, 150, 19, 17, 24, 25, 20, 22, 20, 21, 10, 27, 20, 26, 25, 22, 23, 9, 21, 27, 22, 26, 26, 29, 30, 27, 180, 28, 22, 31, 51, 29, 30, 27, 21, 28, 29, 31, 51, 7, 25, 33, 31, 28, 28, 5, 22, 30, 26, 33, 28, 27, 32, 30, 22, 47, 47, 33, 34, 27, 32, 4, 29, 3, 52, 32, 34, 54, 31, 28, 28, 34, 52, 30, 54, 54, 28, 0, 30, 0, 0, 47, 47, 33, 45, 45, 45, 45, 45, 45, 45, 32, 48, 48, 0, 0, 0, 34, 46, 46, 46, 46, 46, 46, 46, 46, 46, 58, 62, 76, 46, 46, 0, 0, 0, 58, 62, 76, 48, 48, 50, 50, 50, 50, 50, 50, 50, 102, 62, 0, 0, 0, 0, 58, 0, 102, 46, 46, 49, 49, 49, 49, 49, 49, 49, 49, 49, 60, 63, 0, 49, 49, 55, 0, 62, 60, 63, 59, 58, 57, 55, 56, 0, 55, 112, 59, 59, 57, 63, 56, 56, 0, 112, 0, 0, 60, 49, 49, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 55, 56, 57, 59, 61, 63, 0, 56, 64, 66, 67, 60, 61, 0, 61, 65, 64, 66, 67, 61, 65, 65, 0, 65, 68, 0, 56, 57, 64, 0, 67, 69, 68, 71, 70, 66, 0, 68, 74, 69, 61, 71, 70, 221, 73, 61, 74, 72, 72, 77, 75, 69, 73, 74, 64, 72, 67, 77, 75, 71, 66, 70, 78, 68, 75, 82, 73, 0, 79, 221, 78, 0, 81, 82, 0, 80, 79, 69, 0, 74, 81, 0, 77, 80, 71, 79, 70, 80, 79, 82, 75, 83, 73, 0, 78, 84, 86, 111, 111, 83, 85, 81, 117, 84, 86, 0, 111, 77, 85, 0, 117, 79, 98, 80, 79, 82, 86, 85, 98, 78, 98, 84, 0, 83, 92, 92, 81, 92, 92, 92, 92, 92, 92, 92, 95, 95, 95, 95, 95, 95, 95, 95, 86, 85, 0, 0, 84, 0, 83, 94, 94, 0, 94, 94, 94, 94, 94, 94, 94, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 100, 101, 103, 0, 104, 0, 0, 99, 100, 101, 103, 100, 104, 103, 101, 105, 106, 107, 99, 108, 0, 109, 110, 105, 106, 107, 104, 108, 105, 109, 110, 0, 0, 0, 113, 110, 108, 100, 109, 103, 101, 114, 113, 107, 99, 106, 0, 0, 116, 114, 114, 118, 104, 0, 105, 113, 116, 0, 115, 118, 0, 110, 108, 0, 109, 116, 115, 0, 107, 120, 106, 115, 119, 119, 0, 121, 114, 120, 118, 122, 119, 113, 120, 121, 123, 124, 0, 122, 121, 0, 0, 116, 123, 124, 125, 0, 126, 115, 124, 127, 0, 128, 125, 118, 126, 129, 0, 127, 120, 128, 0, 123, 130, 129, 121, 132, 125, 133, 129, 0, 130, 0, 131, 132, 124, 133, 139, 128, 0, 126, 131, 138, 138, 0, 139, 0, 123, 133, 141, 138, 130, 139, 125, 132, 129, 143, 141, 0, 0, 131, 0, 0, 128, 143, 126, 134, 134, 134, 134, 134, 134, 134, 144, 133, 155, 130, 0, 139, 132, 0, 144, 0, 155, 0, 131, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 140, 142, 145, 146, 147, 148, 0, 0, 140, 142, 145, 146, 147, 148, 149, 151, 146, 145, 0, 140, 0, 142, 149, 151, 151, 154, 152, 153, 147, 148, 156, 156, 157, 154, 152, 153, 149, 152, 156, 0, 157, 0, 146, 145, 158, 140, 0, 142, 154, 153, 151, 159, 158, 160, 147, 148, 161, 162, 0, 159, 0, 160, 149, 152, 161, 162, 158, 0, 159, 163, 164, 165, 162, 160, 154, 153, 0, 163, 164, 165, 163, 0, 168, 166, 161, 171, 0, 173, 0, 167, 168, 166, 158, 171, 159, 173, 164, 167, 162, 160, 166, 0, 167, 0, 0, 168, 163, 0, 0, 161, 169, 169, 169, 169, 169, 169, 169, 172, 0, 175, 0, 164, 177, 0, 0, 172, 166, 175, 167, 0, 177, 168, 170, 170, 170, 170, 170, 170, 170, 170, 174, 176, 0, 172, 178, 0, 0, 179, 174, 176, 177, 183, 178, 174, 176, 179, 179, 181, 182, 183, 0, 184, 185, 0, 186, 181, 182, 0, 172, 184, 185, 178, 186, 0, 184, 177, 187, 0, 0, 174, 176, 188, 179, 189, 187, 181, 182, 187, 0, 188, 191, 189, 186, 190, 192, 0, 178, 193, 191, 194, 184, 190, 192, 191, 199, 193, 195, 194, 188, 192, 181, 182, 199, 187, 195, 0, 190, 186, 0, 0, 193, 196, 196, 196, 196, 196, 196, 196, 201, 191, 200, 198, 205, 188, 0, 192, 201, 195, 200, 198, 205, 0, 190, 0, 0, 201, 193, 197, 197, 197, 197, 197, 197, 197, 198, 202, 203, 200, 206, 207, 0, 210, 195, 202, 203, 208, 206, 207, 202, 210, 207, 201, 0, 208, 208, 206, 209, 203, 212, 213, 198, 215, 200, 211, 209, 209, 212, 213, 213, 215, 214, 211, 0, 0, 202, 0, 207, 0, 214, 216, 208, 206, 217, 203, 0, 211, 0, 216, 218, 219, 217, 209, 214, 220, 213, 223, 218, 219, 0, 218, 0, 220, 222, 223, 224, 0, 220, 0, 216, 225, 222, 211, 224, 222, 226, 223, 227, 225, 214, 228, 229, 0, 226, 230, 227, 218, 231, 228, 229, 225, 233, 230, 220, 216, 231, 234, 227, 235, 233, 222, 236, 223, 229, 234, 0, 235, 237, 0, 236, 236, 0, 240, 234, 238, 237, 225, 239, 241, 237, 240, 0, 238, 227, 242, 239, 241, 243, 239, 229, 0, 0, 242, 244, 247, 243, 236, 0, 238, 234, 0, 244, 247, 248, 243, 237, 241, 245, 246, 0, 244, 248, 242, 0, 239, 245, 246, 0, 245, 246, 0, 0, 0, 0, 238, 0, 0, 0, 0, 0, 243, 241, 0, 0, 0, 0, 244, 242, 0, 0, 0, 0, 0, 0, 245, 246, 250, 250, 250, 250, 251, 0, 251, 251, 252, 0, 252, 252, 253, 253, 254, 0, 254, 254, 255, 0, 255, 255, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "frame/tnglex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "frame/tnglex.L" #include #include #include #include "util.h" #include "tngparser.H" extern YYSTYPE* tnglval; extern tngFlexLexer* tnglexx; /* rules */ #line 781 "frame/tnglex.C" #define INITIAL 0 #define DISCARD 1 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 30 "frame/tnglex.L" #line 885 "frame/tnglex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 250 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 249 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 32 "frame/tnglex.L" { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(tnglval->str,""); // feed a blank string return STRING; } YY_BREAK case 2: YY_RULE_SETUP #line 39 "frame/tnglex.L" { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(TNGBUFSIZE-1) ? yyleng:(TNGBUFSIZE-1); strncpy(tnglval->str,yytext,ll); tnglval->str[ll] = '\0'; return STRING; } YY_BREAK case 3: YY_RULE_SETUP #line 47 "frame/tnglex.L" {return B1950_;} YY_BREAK case 4: YY_RULE_SETUP #line 48 "frame/tnglex.L" {return BACKGROUND_;} YY_BREAK case 5: YY_RULE_SETUP #line 49 "frame/tnglex.L" {return BOX_;} YY_BREAK case 6: YY_RULE_SETUP #line 50 "frame/tnglex.L" {return BLACK_;} YY_BREAK case 7: YY_RULE_SETUP #line 51 "frame/tnglex.L" {return BLUE_;} YY_BREAK case 8: YY_RULE_SETUP #line 52 "frame/tnglex.L" {return CIRCLE_;} YY_BREAK case 9: YY_RULE_SETUP #line 53 "frame/tnglex.L" {return CYAN_;} YY_BREAK case 10: YY_RULE_SETUP #line 54 "frame/tnglex.L" {return DATE_;} YY_BREAK case 11: YY_RULE_SETUP #line 55 "frame/tnglex.L" {return DEBUG_;} YY_BREAK case 12: YY_RULE_SETUP #line 56 "frame/tnglex.L" {return DEGREES_;} YY_BREAK case 13: YY_RULE_SETUP #line 57 "frame/tnglex.L" {return ELLIPSE_;} YY_BREAK case 14: YY_RULE_SETUP #line 58 "frame/tnglex.L" {return ECLIPTIC_;} YY_BREAK case 15: YY_RULE_SETUP #line 59 "frame/tnglex.L" {return FILENAME_;} YY_BREAK case 16: YY_RULE_SETUP #line 60 "frame/tnglex.L" {return FK4_;} YY_BREAK case 17: YY_RULE_SETUP #line 61 "frame/tnglex.L" {return FK4_NO_E_;} YY_BREAK case 18: YY_RULE_SETUP #line 62 "frame/tnglex.L" {return FK5_;} YY_BREAK case 19: YY_RULE_SETUP #line 63 "frame/tnglex.L" {return FORMAT_;} YY_BREAK case 20: YY_RULE_SETUP #line 64 "frame/tnglex.L" {return GALACTIC_;} YY_BREAK case 21: YY_RULE_SETUP #line 65 "frame/tnglex.L" {return GREEN_;} YY_BREAK case 22: YY_RULE_SETUP #line 66 "frame/tnglex.L" {return HELIOECLIPTIC_;} YY_BREAK case 23: YY_RULE_SETUP #line 67 "frame/tnglex.L" {return HMS_;} YY_BREAK case 24: YY_RULE_SETUP #line 68 "frame/tnglex.L" {return ICRS_;} YY_BREAK case 25: YY_RULE_SETUP #line 69 "frame/tnglex.L" {return J2000_;} YY_BREAK case 26: YY_RULE_SETUP #line 70 "frame/tnglex.L" {return LINE_;} YY_BREAK case 27: YY_RULE_SETUP #line 71 "frame/tnglex.L" {return MAGENTA_;} YY_BREAK case 28: YY_RULE_SETUP #line 72 "frame/tnglex.L" {return OFF_;} YY_BREAK case 29: YY_RULE_SETUP #line 73 "frame/tnglex.L" {return ON_;} YY_BREAK case 30: YY_RULE_SETUP #line 74 "frame/tnglex.L" {return PHYSICAL_;} YY_BREAK case 31: YY_RULE_SETUP #line 75 "frame/tnglex.L" {return PIXELS_;} YY_BREAK case 32: YY_RULE_SETUP #line 76 "frame/tnglex.L" {return POINT_;} YY_BREAK case 33: YY_RULE_SETUP #line 77 "frame/tnglex.L" {return POLYGON_;} YY_BREAK case 34: YY_RULE_SETUP #line 78 "frame/tnglex.L" {return RED_;} YY_BREAK case 35: YY_RULE_SETUP #line 79 "frame/tnglex.L" {return SOURCE_;} YY_BREAK case 36: YY_RULE_SETUP #line 80 "frame/tnglex.L" {return SUPERGALACTIC_;} YY_BREAK case 37: YY_RULE_SETUP #line 81 "frame/tnglex.L" {return TEXT_;} YY_BREAK case 38: YY_RULE_SETUP #line 82 "frame/tnglex.L" {return VERSION_;} YY_BREAK case 39: YY_RULE_SETUP #line 83 "frame/tnglex.L" {return WHITE_;} YY_BREAK case 40: YY_RULE_SETUP #line 84 "frame/tnglex.L" {return YELLOW_;} YY_BREAK case 41: YY_RULE_SETUP #line 86 "frame/tnglex.L" { // Integer tnglval->integer = atoi(yytext); return INT; } YY_BREAK case 42: #line 92 "frame/tnglex.L" case 43: YY_RULE_SETUP #line 92 "frame/tnglex.L" { // Real Number tnglval->real = atof(yytext); return REAL; } YY_BREAK case 44: #line 98 "frame/tnglex.L" case 45: YY_RULE_SETUP #line 98 "frame/tnglex.L" { // degrees yytext[yyleng-1] = '\0'; tnglval->real = atof(yytext); return ANGDEGREE; } YY_BREAK case 46: #line 105 "frame/tnglex.L" case 47: YY_RULE_SETUP #line 105 "frame/tnglex.L" { // Sexagesimal int ll = yyleng <(TNGBUFSIZE-1)?yyleng:(TNGBUFSIZE-1); strncpy(tnglval->str,yytext,ll); tnglval->str[ll] = '\0'; return SEXSTR; } YY_BREAK case 48: #line 113 "frame/tnglex.L" case 49: YY_RULE_SETUP #line 113 "frame/tnglex.L" { // Quoted String int ll = (yyleng-2)<(TNGBUFSIZE-1)?(yyleng-2):(TNGBUFSIZE-1); strncpy(tnglval->str,yytext+1,yyleng-2); // skip the " " tnglval->str[ll] = '\0'; // Remove the '"' return STRING; } YY_BREAK case 50: YY_RULE_SETUP #line 120 "frame/tnglex.L" { // Quoted String int ll = (yyleng-2)<(TNGBUFSIZE-1)?(yyleng-2):(TNGBUFSIZE-1); strncpy(tnglval->str,yytext+1,yyleng-2); // skip the '{' tnglval->str[ll] = '\0'; // Remove the '}' return STRING; } YY_BREAK case 51: YY_RULE_SETUP #line 127 "frame/tnglex.L" { // General String int ll = yyleng <(TNGBUFSIZE-1) ? yyleng:(TNGBUFSIZE-1); strncpy(tnglval->str,yytext,ll); tnglval->str[ll] = '\0'; return STRING; } YY_BREAK case 52: YY_RULE_SETUP #line 134 "frame/tnglex.L" { // White Spaces } YY_BREAK case 53: /* rule 53 can match eol */ YY_RULE_SETUP #line 137 "frame/tnglex.L" { // windows line feed return '\n'; } YY_BREAK case 54: YY_RULE_SETUP #line 141 "frame/tnglex.L" { // fake line feed return '\n'; } YY_BREAK case 55: /* rule 55 can match eol */ YY_RULE_SETUP #line 145 "frame/tnglex.L" { // linefeed return '\n'; } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(DISCARD): #line 149 "frame/tnglex.L" { // eof return EOF_; } YY_BREAK case 56: YY_RULE_SETUP #line 153 "frame/tnglex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 57: YY_RULE_SETUP #line 157 "frame/tnglex.L" ECHO; YY_BREAK #line 1297 "frame/tnglex.C" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; tngfree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); tngfree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ tngrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) tngrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 250 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 250 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 249); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) tngalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) tngalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) tngfree((void *) b->yy_ch_buf ); tngfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)tngalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)tngrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) tngalloc(new_size ); else (yy_start_stack) = (int *) tngrealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *tngalloc (yy_size_t size ) { return (void *) malloc( size ); } void *tngrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void tngfree (void * ptr ) { free( (char *) ptr ); /* see tngrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 157 "frame/tnglex.L" void tngDiscard(int doit) { if (tnglexx) tnglexx->begin(DISCARD, doit); } void tngFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/frame/tnglex.L000644 000765 000000 00000006734 12705446251 016235 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "util.h" #include "tngparser.H" extern YYSTYPE* tnglval; extern tngFlexLexer* tnglexx; %} %x DISCARD D [0-9] E [Ee][+-]?{D}+ /* rules */ %% [\n] { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(tnglval->str,""); // feed a blank string return STRING; } [^\n]* { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(TNGBUFSIZE-1) ? yyleng:(TNGBUFSIZE-1); strncpy(tnglval->str,yytext,ll); tnglval->str[ll] = '\0'; return STRING; } b1950 {return B1950_;} background {return BACKGROUND_;} box {return BOX_;} black {return BLACK_;} blue {return BLUE_;} circle {return CIRCLE_;} cyan {return CYAN_;} date {return DATE_;} debug {return DEBUG_;} degrees {return DEGREES_;} ellipse {return ELLIPSE_;} ecliptic {return ECLIPTIC_;} filename {return FILENAME_;} fk4 {return FK4_;} fk4-no-e {return FK4_NO_E_;} fk5 {return FK5_;} format {return FORMAT_;} galactic {return GALACTIC_;} green {return GREEN_;} helioecliptic {return HELIOECLIPTIC_;} hms {return HMS_;} icrs {return ICRS_;} j2000 {return J2000_;} lin[e] {return LINE_;} magenta {return MAGENTA_;} off {return OFF_;} on {return ON_;} physical {return PHYSICAL_;} pixels {return PIXELS_;} point {return POINT_;} polygon {return POLYGON_;} red {return RED_;} source {return SOURCE_;} supergalactic {return SUPERGALACTIC_;} text {return TEXT_;} version {return VERSION_;} white {return WHITE_;} yellow {return YELLOW_;} [+-]?{D}+ { // Integer tnglval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number tnglval->real = atof(yytext); return REAL; } [+-]?{D}+"."?d | [+-]?{D}*"."{D}+d { // degrees yytext[yyleng-1] = '\0'; tnglval->real = atof(yytext); return ANGDEGREE; } [+-]?{D}+:{D}+:{D}+"."? | [+-]?{D}+:{D}+:{D}*"."{D}+ { // Sexagesimal int ll = yyleng <(TNGBUFSIZE-1)?yyleng:(TNGBUFSIZE-1); strncpy(tnglval->str,yytext,ll); tnglval->str[ll] = '\0'; return SEXSTR; } \"[^\"\n]*\" | \'[^\'\n]*\' { // Quoted String int ll = (yyleng-2)<(TNGBUFSIZE-1)?(yyleng-2):(TNGBUFSIZE-1); strncpy(tnglval->str,yytext+1,yyleng-2); // skip the " " tnglval->str[ll] = '\0'; // Remove the '"' return STRING; } \{[^\}\n]*\} { // Quoted String int ll = (yyleng-2)<(TNGBUFSIZE-1)?(yyleng-2):(TNGBUFSIZE-1); strncpy(tnglval->str,yytext+1,yyleng-2); // skip the '{' tnglval->str[ll] = '\0'; // Remove the '}' return STRING; } [0-9A-Za-z]+ { // General String int ll = yyleng <(TNGBUFSIZE-1) ? yyleng:(TNGBUFSIZE-1); strncpy(tnglval->str,yytext,ll); tnglval->str[ll] = '\0'; return STRING; } [ \t]+ { // White Spaces } \r\n { // windows line feed return '\n'; } \\n { // fake line feed return '\n'; } \n { // linefeed return '\n'; } <> { // eof return EOF_; } . { // Else, return the char return yytext[0]; } %% void tngDiscard(int doit) { if (tnglexx) tnglexx->begin(DISCARD, doit); } void tngFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/frame/tngparser.C000644 000765 000000 00000174455 12553253032 016730 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse tngparse #define yylex tnglex #define yyerror tngerror #define yylval tnglval #define yychar tngchar #define yydebug tngdebug #define yynerrs tngnerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, STRING = 260, ANGDEGREE = 261, SEXSTR = 262, EOF_ = 263, B1950_ = 264, BACKGROUND_ = 265, BOX_ = 266, BLACK_ = 267, BLUE_ = 268, CIRCLE_ = 269, CYAN_ = 270, DATE_ = 271, DEBUG_ = 272, DEGREES_ = 273, ECLIPTIC_ = 274, ELLIPSE_ = 275, FILENAME_ = 276, FK4_ = 277, FK4_NO_E_ = 278, FK5_ = 279, FORMAT_ = 280, GALACTIC_ = 281, GREEN_ = 282, HELIOECLIPTIC_ = 283, HMS_ = 284, ICRS_ = 285, J2000_ = 286, LINE_ = 287, MAGENTA_ = 288, OFF_ = 289, ON_ = 290, PHYSICAL_ = 291, PIXELS_ = 292, POINT_ = 293, POLYGON_ = 294, RED_ = 295, SOURCE_ = 296, SUPERGALACTIC_ = 297, TEXT_ = 298, VERSION_ = 299, WHITE_ = 300, YELLOW_ = 301 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define STRING 260 #define ANGDEGREE 261 #define SEXSTR 262 #define EOF_ 263 #define B1950_ 264 #define BACKGROUND_ 265 #define BOX_ 266 #define BLACK_ 267 #define BLUE_ 268 #define CIRCLE_ 269 #define CYAN_ 270 #define DATE_ 271 #define DEBUG_ 272 #define DEGREES_ 273 #define ECLIPTIC_ 274 #define ELLIPSE_ 275 #define FILENAME_ 276 #define FK4_ 277 #define FK4_NO_E_ 278 #define FK5_ 279 #define FORMAT_ 280 #define GALACTIC_ 281 #define GREEN_ 282 #define HELIOECLIPTIC_ 283 #define HMS_ 284 #define ICRS_ 285 #define J2000_ 286 #define LINE_ 287 #define MAGENTA_ 288 #define OFF_ 289 #define ON_ 290 #define PHYSICAL_ 291 #define PIXELS_ 292 #define POINT_ 293 #define POLYGON_ 294 #define RED_ 295 #define SOURCE_ 296 #define SUPERGALACTIC_ 297 #define TEXT_ 298 #define VERSION_ 299 #define WHITE_ 300 #define YELLOW_ 301 /* Copy the first part of user declarations. */ #line 10 "frame/tngparser.Y" #define YYDEBUG 1 #define FITSPTR (fr->findFits()) #define DISCARD_(x) {yyclearin; tngDiscard(x);} #include #include #include #include "base.h" #include "fitsimage.h" #include "basemarker.h" #undef yyFlexLexer #define yyFlexLexer tngFlexLexer #include extern int tnglex(void*, tngFlexLexer*); extern void tngerror(Base*, tngFlexLexer*, const char*); extern void tngDiscard(int); static Coord::CoordSystem globalSystem; static Coord::SkyFrame globalSky; static Coord::CoordSystem localSystem; static Coord::SkyFrame localSky; static unsigned short globalProps; static unsigned short localProps; static char globalColor[16]; static char localColor[16]; static int dash[] = {8,3}; static char globalFont[32]; static char globalText[80]; static char localText[80]; static char localComment[80]; static List polylist; static List taglist; static List cblist; static void setProps(unsigned short* props, unsigned short prop, int value); static Coord::CoordSystem checkWCSSystem(); static Coord::SkyFrame checkWCSSky(); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 61 "frame/tngparser.Y" { #define TNGBUFSIZE 2048 double real; int integer; char str[TNGBUFSIZE]; double vector[3]; } /* Line 193 of yacc.c. */ #line 255 "frame/tngparser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 268 "frame/tngparser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 155 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 56 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 33 /* YYNRULES -- Number of rules. */ #define YYNRULES 85 /* YYNRULES -- Number of states. */ #define YYNSTATES 148 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 301 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 47, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 54, 2, 2, 2, 2, 50, 51, 2, 52, 49, 53, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 55, 48, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 6, 10, 13, 14, 17, 19, 23, 25, 27, 29, 31, 33, 35, 37, 39, 40, 42, 43, 45, 46, 48, 49, 51, 53, 55, 57, 61, 63, 67, 71, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 96, 97, 98, 100, 102, 110, 120, 130, 138, 144, 145, 154, 155, 162, 166, 168, 170, 175, 176, 182, 183, 189, 190, 194, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222, 225, 226, 230, 233, 236, 238, 243, 244 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 57, 0, -1, 73, 58, -1, 58, 59, 60, -1, 59, 60, -1, -1, 17, 62, -1, 44, -1, 74, 75, 76, -1, 81, -1, 47, -1, 48, -1, 8, -1, 4, -1, 3, -1, 35, -1, 34, -1, -1, 49, -1, -1, 50, -1, -1, 51, -1, -1, 67, -1, 61, -1, 6, -1, 61, -1, 61, 63, 61, -1, 7, -1, 70, 63, 70, -1, 61, 63, 61, -1, 6, 63, 6, -1, 22, -1, 9, -1, 23, -1, 24, -1, 31, -1, 30, -1, 26, -1, 42, -1, 19, -1, 28, -1, -1, -1, -1, 52, -1, 53, -1, 14, 64, 71, 63, 68, 65, 85, -1, 20, 64, 71, 63, 69, 63, 66, 65, 85, -1, 11, 64, 71, 63, 69, 63, 66, 65, 85, -1, 32, 64, 71, 63, 71, 65, 85, -1, 38, 64, 71, 65, 85, -1, -1, 43, 64, 71, 63, 5, 65, 77, 85, -1, -1, 39, 78, 64, 79, 65, 85, -1, 79, 63, 80, -1, 80, -1, 71, -1, 54, 25, 55, 87, -1, -1, 54, 21, 55, 82, 5, -1, -1, 54, 16, 55, 83, 5, -1, -1, 54, 84, 5, -1, -1, 54, 45, -1, 54, 12, -1, 54, 40, -1, 54, 27, -1, 54, 13, -1, 54, 15, -1, 54, 33, -1, 54, 46, -1, 54, 41, -1, 54, 10, -1, -1, 54, 86, 5, -1, 29, 88, -1, 18, 88, -1, 37, -1, 37, 50, 36, 51, -1, -1, 50, 72, 51, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 130, 130, 133, 134, 137, 138, 139, 140, 141, 144, 145, 146, 149, 150, 153, 154, 157, 158, 161, 162, 165, 166, 169, 170, 173, 174, 177, 180, 189, 192, 206, 213, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 235, 249, 265, 266, 267, 270, 276, 283, 290, 297, 302, 302, 308, 308, 314, 315, 318, 321, 322, 322, 323, 323, 324, 324, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 341, 346, 346, 349, 350, 351, 352, 356, 360 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "INT", "REAL", "STRING", "ANGDEGREE", "SEXSTR", "EOF_", "B1950_", "BACKGROUND_", "BOX_", "BLACK_", "BLUE_", "CIRCLE_", "CYAN_", "DATE_", "DEBUG_", "DEGREES_", "ECLIPTIC_", "ELLIPSE_", "FILENAME_", "FK4_", "FK4_NO_E_", "FK5_", "FORMAT_", "GALACTIC_", "GREEN_", "HELIOECLIPTIC_", "HMS_", "ICRS_", "J2000_", "LINE_", "MAGENTA_", "OFF_", "ON_", "PHYSICAL_", "PIXELS_", "POINT_", "POLYGON_", "RED_", "SOURCE_", "SUPERGALACTIC_", "TEXT_", "VERSION_", "WHITE_", "YELLOW_", "'\\n'", "';'", "','", "'('", "')'", "'+'", "'-'", "'#'", "':'", "$accept", "start", "commands", "command", "terminator", "numeric", "debug", "sp", "bp", "ep", "optangle", "angle", "value", "vvalue", "sexagesimal", "coord", "skyFrame", "initGlobal", "initLocal", "include", "shape", "@1", "@2", "polyNodes", "polyNode", "generalComment", "@3", "@4", "@5", "shapeComment", "@6", "tngFormat", "tngWCS", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 10, 59, 44, 40, 41, 43, 45, 35, 58 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 56, 57, 58, 58, 59, 59, 59, 59, 59, 60, 60, 60, 61, 61, 62, 62, 63, 63, 64, 64, 65, 65, 66, 66, 67, 67, 68, 69, 70, 71, 71, 71, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 74, 75, 75, 75, 76, 76, 76, 76, 76, 77, 76, 78, 76, 79, 79, 80, 81, 82, 81, 83, 81, 84, 81, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 85, 87, 87, 87, 87, 88, 88 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 2, 3, 2, 0, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 7, 9, 9, 7, 5, 0, 8, 0, 6, 3, 1, 1, 4, 0, 5, 0, 5, 0, 3, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 3, 2, 2, 1, 4, 0, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 43, 0, 44, 1, 0, 7, 65, 44, 0, 45, 9, 16, 15, 6, 0, 0, 0, 0, 0, 12, 10, 11, 4, 46, 47, 0, 63, 61, 0, 66, 3, 19, 19, 19, 19, 19, 55, 19, 8, 0, 0, 84, 84, 82, 60, 20, 0, 0, 0, 0, 0, 19, 0, 64, 62, 0, 81, 80, 0, 14, 13, 17, 29, 17, 17, 17, 17, 17, 17, 21, 0, 17, 34, 41, 33, 35, 36, 39, 42, 38, 37, 40, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 22, 67, 59, 17, 58, 0, 85, 83, 32, 31, 30, 17, 17, 27, 21, 17, 21, 78, 52, 0, 67, 21, 0, 23, 67, 23, 67, 77, 69, 72, 73, 71, 74, 70, 76, 68, 75, 0, 57, 56, 53, 28, 26, 25, 21, 24, 48, 21, 51, 79, 67, 67, 67, 54, 50, 49 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 1, 7, 8, 22, 63, 13, 85, 46, 93, 136, 137, 106, 104, 64, 94, 82, 2, 9, 25, 38, 142, 51, 95, 96, 10, 40, 39, 17, 110, 129, 44, 56 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -108 static const yytype_int8 yypact[] = { -108, 2, -5, -108, -21, -108, 67, 0, -7, -46, -108, -108, -108, -108, -45, -30, -17, 40, -7, -108, -108, -108, -108, -108, -108, 105, -108, -108, -14, -108, -108, -4, -4, -4, -4, -4, -108, -4, -108, 45, 46, 3, 3, 11, -108, -108, 127, 127, 127, 127, 127, -4, 127, -108, -108, 87, -108, -108, 16, -108, -108, 15, -108, 15, 15, 15, 15, 15, 15, 14, 127, 15, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, 17, 18, -108, 70, 29, 78, 29, 29, 29, 127, -108, 32, -108, 8, -108, 82, -108, -108, -108, -108, -108, 15, 15, -108, 14, 15, 14, 62, -108, 127, 32, 14, 29, 117, 32, 117, 32, -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, 85, -108, -108, -108, -108, -108, -108, 14, -108, -108, 14, -108, -108, 32, 32, 32, -108, -108, -108 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -108, -108, -108, 84, 75, 38, -108, -37, 47, -35, -23, -108, -108, 7, 12, -28, -108, -108, -108, -108, -108, -108, -108, -108, -11, -108, -108, -108, -108, -107, -108, -108, 63 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -22 static const yytype_int16 yytable[] = { -2, 19, 3, -5, 41, 131, 23, 24, -5, 138, 26, 140, 4, 11, 12, 42, -21, 4, 65, 66, 67, 68, 69, 43, 71, 27, 86, 87, 88, 89, 90, 91, 59, 60, 97, 145, 146, 147, 28, 5, 20, 21, -5, -5, 5, 29, 45, -5, -5, 6, 53, 54, 83, 55, 6, -21, -21, 84, 111, 92, 112, 58, -21, 108, 84, 92, 114, 115, 98, 99, 117, 116, 119, 118, 120, 121, 100, 122, 132, 47, 48, 49, 50, 14, 52, 62, 109, 113, 15, 123, 141, 18, 16, 30, 139, 124, 72, 107, 70, 102, 130, 143, 125, 126, 144, 57, 73, 127, 128, 74, 75, 76, 0, 77, 0, 78, 31, 79, 80, 32, 59, 60, 0, 134, 101, 33, 103, 105, 103, 81, 59, 60, 0, 61, 62, 0, 0, 34, 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, 37, 0, 0, 0, 133, 135, 0, 135 }; static const yytype_int16 yycheck[] = { 0, 8, 0, 8, 18, 112, 52, 53, 8, 116, 55, 118, 17, 34, 35, 29, 8, 17, 46, 47, 48, 49, 50, 37, 52, 55, 63, 64, 65, 66, 67, 68, 3, 4, 71, 142, 143, 144, 55, 44, 47, 48, 47, 48, 44, 5, 50, 47, 48, 54, 5, 5, 36, 50, 54, 47, 48, 49, 95, 51, 95, 50, 54, 91, 49, 51, 103, 104, 51, 51, 107, 106, 10, 108, 12, 13, 6, 15, 113, 32, 33, 34, 35, 16, 37, 7, 54, 5, 21, 27, 5, 7, 25, 18, 117, 33, 9, 90, 51, 87, 111, 136, 40, 41, 139, 42, 19, 45, 46, 22, 23, 24, -1, 26, -1, 28, 11, 30, 31, 14, 3, 4, -1, 6, 86, 20, 88, 89, 90, 42, 3, 4, -1, 6, 7, -1, -1, 32, -1, -1, -1, -1, -1, 38, 39, -1, -1, -1, 43, -1, -1, -1, 114, 115, -1, 117 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 57, 73, 0, 17, 44, 54, 58, 59, 74, 81, 34, 35, 62, 16, 21, 25, 84, 59, 8, 47, 48, 60, 52, 53, 75, 55, 55, 55, 5, 60, 11, 14, 20, 32, 38, 39, 43, 76, 83, 82, 18, 29, 37, 87, 50, 64, 64, 64, 64, 64, 78, 64, 5, 5, 50, 88, 88, 50, 3, 4, 6, 7, 61, 70, 71, 71, 71, 71, 71, 64, 71, 9, 19, 22, 23, 24, 26, 28, 30, 31, 42, 72, 36, 49, 63, 63, 63, 63, 63, 63, 63, 51, 65, 71, 79, 80, 63, 51, 51, 6, 61, 70, 61, 69, 61, 68, 69, 71, 54, 85, 63, 65, 5, 63, 63, 65, 63, 65, 10, 12, 13, 15, 27, 33, 40, 41, 45, 46, 86, 80, 85, 65, 61, 6, 61, 66, 67, 85, 66, 85, 5, 77, 65, 65, 85, 85, 85 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (fr, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, fr, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, tngFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; tngFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (fr); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, tngFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; tngFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, Base* fr, tngFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, fr, ll) YYSTYPE *yyvsp; int yyrule; Base* fr; tngFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , fr, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, fr, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, Base* fr, tngFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, fr, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; Base* fr; tngFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (fr); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (Base* fr, tngFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (Base* fr, tngFlexLexer* ll) #else int yyparse (fr, ll) Base* fr; tngFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 7: #line 139 "frame/tngparser.Y" {cerr << "SAOtng" << endl;;} break; case 12: #line 146 "frame/tngparser.Y" {YYACCEPT;;} break; case 13: #line 149 "frame/tngparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 14: #line 150 "frame/tngparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 15: #line 153 "frame/tngparser.Y" {yydebug=1;;} break; case 16: #line 154 "frame/tngparser.Y" {yydebug=0;;} break; case 23: #line 169 "frame/tngparser.Y" {(yyval.real) = 0;;} break; case 24: #line 170 "frame/tngparser.Y" {(yyval.real) = (yyvsp[(1) - (1)].real);;} break; case 25: #line 173 "frame/tngparser.Y" {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;} break; case 26: #line 174 "frame/tngparser.Y" {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;} break; case 27: #line 177 "frame/tngparser.Y" {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real),Coord::IMAGE);;} break; case 28: #line 181 "frame/tngparser.Y" { Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), Coord::IMAGE); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 29: #line 189 "frame/tngparser.Y" {(yyval.real) = parseSEXStr((yyvsp[(1) - (1)].str));;} break; case 30: #line 193 "frame/tngparser.Y" { Vector r; Coord::CoordSystem sys = checkWCSSystem(); Coord::SkyFrame sky = checkWCSSky(); if (sky == Coord::GALACTIC || sky == Coord::ECLIPTIC) r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), sys, sky); else r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real)*360./24.,(yyvsp[(3) - (3)].real)), sys, sky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 31: #line 207 "frame/tngparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), localSystem, localSky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 32: #line 214 "frame/tngparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), checkWCSSystem(), checkWCSSky()); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 33: #line 223 "frame/tngparser.Y" {(yyval.integer) = Coord::FK4;;} break; case 34: #line 224 "frame/tngparser.Y" {(yyval.integer) = Coord::FK4;;} break; case 35: #line 225 "frame/tngparser.Y" {(yyval.integer) = Coord::FK4_NO_E;;} break; case 36: #line 226 "frame/tngparser.Y" {(yyval.integer) = Coord::FK5;;} break; case 37: #line 227 "frame/tngparser.Y" {(yyval.integer) = Coord::FK5;;} break; case 38: #line 228 "frame/tngparser.Y" {(yyval.integer) = Coord::ICRS;;} break; case 39: #line 229 "frame/tngparser.Y" {(yyval.integer) = Coord::GALACTIC;;} break; case 40: #line 230 "frame/tngparser.Y" {(yyval.integer) = Coord::SUPERGALACTIC;;} break; case 41: #line 231 "frame/tngparser.Y" {(yyval.integer) = Coord::ECLIPTIC;;} break; case 42: #line 232 "frame/tngparser.Y" {(yyval.integer) = Coord::HELIOECLIPTIC;;} break; case 43: #line 235 "frame/tngparser.Y" { // global properties globalSystem = Coord::IMAGE; globalSky = Coord::FK5; globalProps = Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::HIGHLITE | Marker::INCLUDE | Marker::SOURCE; strcpy(globalColor,"green"); strcpy(globalFont,"helvetica 10 normal roman"); strcpy(globalText,""); ;} break; case 44: #line 249 "frame/tngparser.Y" { // reset maperr flag maperr =0; // global properties localSystem = globalSystem; localSky = globalSky; localProps = globalProps; strcpy(localColor,globalColor); strcpy(localText,globalText); strcpy(localComment,""); strcpy(globalText,""); ;} break; case 45: #line 265 "frame/tngparser.Y" {setProps(&localProps, Marker::INCLUDE, 1);;} break; case 46: #line 266 "frame/tngparser.Y" {setProps(&localProps, Marker::INCLUDE, 1);;} break; case 47: #line 267 "frame/tngparser.Y" {setProps(&localProps, Marker::INCLUDE, 0);;} break; case 48: #line 271 "frame/tngparser.Y" {fr->createCircleCmd(Vector((yyvsp[(3) - (7)].vector)), (yyvsp[(5) - (7)].real), localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);;} break; case 49: #line 277 "frame/tngparser.Y" {fr->createEllipseCmd(Vector((yyvsp[(3) - (9)].vector)), Vector((yyvsp[(5) - (9)].vector)), (yyvsp[(7) - (9)].real), localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);;} break; case 50: #line 284 "frame/tngparser.Y" {fr->createBoxCmd(Vector((yyvsp[(3) - (9)].vector)), Vector((yyvsp[(5) - (9)].vector)), (yyvsp[(7) - (9)].real), localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);;} break; case 51: #line 291 "frame/tngparser.Y" {fr->createLineCmd(Vector((yyvsp[(3) - (7)].vector)), Vector((yyvsp[(5) - (7)].vector)), 0,0, localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);;} break; case 52: #line 298 "frame/tngparser.Y" {fr->createPointCmd(Vector((yyvsp[(3) - (5)].vector)), Point::BOXCIRCLE, POINTSIZE, localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);;} break; case 53: #line 302 "frame/tngparser.Y" {strncpy(localText,(yyvsp[(5) - (6)].str),80);;} break; case 54: #line 303 "frame/tngparser.Y" {fr->createTextCmd(Vector((yyvsp[(3) - (8)].vector)), 0, 1, localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);;} break; case 55: #line 308 "frame/tngparser.Y" {polylist.deleteAll();;} break; case 56: #line 309 "frame/tngparser.Y" {fr->createPolygonCmd(polylist, localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);;} break; case 59: #line 318 "frame/tngparser.Y" {polylist.append(new Vertex((yyvsp[(1) - (1)].vector)));;} break; case 61: #line 322 "frame/tngparser.Y" {DISCARD_(0);;} break; case 63: #line 323 "frame/tngparser.Y" {DISCARD_(0);;} break; case 65: #line 324 "frame/tngparser.Y" {DISCARD_(1);;} break; case 66: #line 324 "frame/tngparser.Y" {strncpy(globalText,(yyvsp[(3) - (3)].str),80);;} break; case 68: #line 328 "frame/tngparser.Y" {strcpy(localColor,"white");;} break; case 69: #line 329 "frame/tngparser.Y" {strcpy(localColor,"black");;} break; case 70: #line 330 "frame/tngparser.Y" {strcpy(localColor,"red");;} break; case 71: #line 331 "frame/tngparser.Y" {strcpy(localColor,"green");;} break; case 72: #line 332 "frame/tngparser.Y" {strcpy(localColor,"blue");;} break; case 73: #line 333 "frame/tngparser.Y" {strcpy(localColor,"cyan");;} break; case 74: #line 334 "frame/tngparser.Y" {strcpy(localColor,"magenta");;} break; case 75: #line 335 "frame/tngparser.Y" {strcpy(localColor,"yellow");;} break; case 76: #line 337 "frame/tngparser.Y" { strcpy(localColor,"green"); setProps(&localProps,Marker::SOURCE,1); ;} break; case 77: #line 342 "frame/tngparser.Y" { strcpy(localColor,"red"); setProps(&localProps,Marker::SOURCE,0); ;} break; case 78: #line 346 "frame/tngparser.Y" {DISCARD_(1);;} break; case 79: #line 346 "frame/tngparser.Y" {strncpy(localComment,(yyvsp[(3) - (3)].str),80);;} break; case 82: #line 351 "frame/tngparser.Y" {globalSystem = localSystem = Coord::IMAGE;;} break; case 83: #line 352 "frame/tngparser.Y" {globalSystem = localSystem = Coord::IMAGE;;} break; case 84: #line 356 "frame/tngparser.Y" { globalSystem = localSystem = Coord::WCS; globalSky = localSky = Coord::FK5; ;} break; case 85: #line 361 "frame/tngparser.Y" { globalSystem = localSystem = Coord::WCS; globalSky = localSky = (Coord::SkyFrame)(yyvsp[(2) - (3)].integer); ;} break; /* Line 1267 of yacc.c. */ #line 2007 "frame/tngparser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (fr, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (fr, ll, yymsg); } else { yyerror (fr, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, fr, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, fr, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (fr, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, fr, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, fr, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 367 "frame/tngparser.Y" static void setProps(unsigned short* props, unsigned short prop, int value) { if (value) *props |= prop; else *props &= ~prop; } static Coord::CoordSystem checkWCSSystem() { switch (localSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::WCS; default: return localSystem; } } static Coord::SkyFrame checkWCSSky() { switch (localSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::FK5; default: return localSky; } } saods9/tksao/frame/tngparser.H000644 000765 000000 00000007573 12553253032 016731 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, STRING = 260, ANGDEGREE = 261, SEXSTR = 262, EOF_ = 263, B1950_ = 264, BACKGROUND_ = 265, BOX_ = 266, BLACK_ = 267, BLUE_ = 268, CIRCLE_ = 269, CYAN_ = 270, DATE_ = 271, DEBUG_ = 272, DEGREES_ = 273, ECLIPTIC_ = 274, ELLIPSE_ = 275, FILENAME_ = 276, FK4_ = 277, FK4_NO_E_ = 278, FK5_ = 279, FORMAT_ = 280, GALACTIC_ = 281, GREEN_ = 282, HELIOECLIPTIC_ = 283, HMS_ = 284, ICRS_ = 285, J2000_ = 286, LINE_ = 287, MAGENTA_ = 288, OFF_ = 289, ON_ = 290, PHYSICAL_ = 291, PIXELS_ = 292, POINT_ = 293, POLYGON_ = 294, RED_ = 295, SOURCE_ = 296, SUPERGALACTIC_ = 297, TEXT_ = 298, VERSION_ = 299, WHITE_ = 300, YELLOW_ = 301 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define STRING 260 #define ANGDEGREE 261 #define SEXSTR 262 #define EOF_ 263 #define B1950_ 264 #define BACKGROUND_ 265 #define BOX_ 266 #define BLACK_ 267 #define BLUE_ 268 #define CIRCLE_ 269 #define CYAN_ 270 #define DATE_ 271 #define DEBUG_ 272 #define DEGREES_ 273 #define ECLIPTIC_ 274 #define ELLIPSE_ 275 #define FILENAME_ 276 #define FK4_ 277 #define FK4_NO_E_ 278 #define FK5_ 279 #define FORMAT_ 280 #define GALACTIC_ 281 #define GREEN_ 282 #define HELIOECLIPTIC_ 283 #define HMS_ 284 #define ICRS_ 285 #define J2000_ 286 #define LINE_ 287 #define MAGENTA_ 288 #define OFF_ 289 #define ON_ 290 #define PHYSICAL_ 291 #define PIXELS_ 292 #define POINT_ 293 #define POLYGON_ 294 #define RED_ 295 #define SOURCE_ 296 #define SUPERGALACTIC_ 297 #define TEXT_ 298 #define VERSION_ 299 #define WHITE_ 300 #define YELLOW_ 301 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 61 "frame/tngparser.Y" { #define TNGBUFSIZE 2048 double real; int integer; char str[TNGBUFSIZE]; double vector[3]; } /* Line 1529 of yacc.c. */ #line 149 "frame/tngparser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/frame/tngparser.Y000644 000765 000000 00000020301 12705446251 016740 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {Base* fr} %lex-param {tngFlexLexer* ll} %parse-param {tngFlexLexer* ll} %{ #define YYDEBUG 1 #define FITSPTR (fr->findFits()) #define DISCARD_(x) {yyclearin; tngDiscard(x);} #include #include #include #include "base.h" #include "fitsimage.h" #include "basemarker.h" #undef yyFlexLexer #define yyFlexLexer tngFlexLexer #include extern int tnglex(void*, tngFlexLexer*); extern void tngerror(Base*, tngFlexLexer*, const char*); extern void tngDiscard(int); static Coord::CoordSystem globalSystem; static Coord::SkyFrame globalSky; static Coord::CoordSystem localSystem; static Coord::SkyFrame localSky; static unsigned short globalProps; static unsigned short localProps; static char globalColor[16]; static char localColor[16]; static int dash[] = {8,3}; static char globalFont[32]; static char globalText[80]; static char localText[80]; static char localComment[80]; static List polylist; static List taglist; static List cblist; static void setProps(unsigned short* props, unsigned short prop, int value); static Coord::CoordSystem checkWCSSystem(); static Coord::SkyFrame checkWCSSky(); %} %union { #define TNGBUFSIZE 2048 double real; int integer; char str[TNGBUFSIZE]; double vector[3]; } %type numeric %type angle %type optangle %type value %type vvalue %type sexagesimal %type coord %type skyFrame %token INT %token REAL %token STRING %token ANGDEGREE %token SEXSTR %token EOF_ %token B1950_ %token BACKGROUND_ %token BOX_ %token BLACK_ %token BLUE_ %token CIRCLE_ %token CYAN_ %token DATE_ %token DEBUG_ %token DEGREES_ %token ECLIPTIC_ %token ELLIPSE_ %token FILENAME_ %token FK4_ %token FK4_NO_E_ %token FK5_ %token FORMAT_ %token GALACTIC_ %token GREEN_ %token HELIOECLIPTIC_ %token HMS_ %token ICRS_ %token J2000_ %token LINE_ %token MAGENTA_ %token OFF_ %token ON_ %token PHYSICAL_ %token PIXELS_ %token POINT_ %token POLYGON_ %token RED_ %token SOURCE_ %token SUPERGALACTIC_ %token TEXT_ %token VERSION_ %token WHITE_ %token YELLOW_ %% start : initGlobal commands ; commands: commands command terminator | command terminator ; command : /* empty */ | DEBUG_ debug | VERSION_ {cerr << "SAOtng" << endl;} | initLocal include shape | generalComment ; terminator: '\n' | ';' | EOF_ {YYACCEPT;} ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; sp : /* empty */ | ',' ; bp : /* empty */ | '(' ; ep : /* emtpy */ | ')' ; optangle: /* empty */ {$$ = 0;} | angle {$$ = $1;} ; angle : numeric {$$ = degToRad($1);} /* assume degree */ | ANGDEGREE {$$ = degToRad($1);} ; value : numeric {$$ = FITSPTR->mapLenToRef($1,Coord::IMAGE);} ; vvalue : numeric sp numeric { Vector r = FITSPTR->mapLenToRef(Vector($1,$3), Coord::IMAGE); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } ; sexagesimal: SEXSTR {$$ = parseSEXStr($1);} ; coord : sexagesimal sp sexagesimal { Vector r; Coord::CoordSystem sys = checkWCSSystem(); Coord::SkyFrame sky = checkWCSSky(); if (sky == Coord::GALACTIC || sky == Coord::ECLIPTIC) r = FITSPTR->mapToRef(Vector($1,$3), sys, sky); else r = FITSPTR->mapToRef(Vector($1*360./24.,$3), sys, sky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | numeric sp numeric { Vector r = FITSPTR->mapToRef(Vector($1,$3), localSystem, localSky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | ANGDEGREE sp ANGDEGREE { Vector r = FITSPTR->mapToRef(Vector($1,$3), checkWCSSystem(), checkWCSSky()); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } ; skyFrame : FK4_ {$$ = Coord::FK4;} | B1950_ {$$ = Coord::FK4;} | FK4_NO_E_ {$$ = Coord::FK4_NO_E;} | FK5_ {$$ = Coord::FK5;} | J2000_ {$$ = Coord::FK5;} | ICRS_ {$$ = Coord::ICRS;} | GALACTIC_ {$$ = Coord::GALACTIC;} | SUPERGALACTIC_ {$$ = Coord::SUPERGALACTIC;} | ECLIPTIC_ {$$ = Coord::ECLIPTIC;} | HELIOECLIPTIC_ {$$ = Coord::HELIOECLIPTIC;} ; initGlobal:{ // global properties globalSystem = Coord::IMAGE; globalSky = Coord::FK5; globalProps = Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::HIGHLITE | Marker::INCLUDE | Marker::SOURCE; strcpy(globalColor,"green"); strcpy(globalFont,"helvetica 10 normal roman"); strcpy(globalText,""); } ; initLocal : { // reset maperr flag maperr =0; // global properties localSystem = globalSystem; localSky = globalSky; localProps = globalProps; strcpy(localColor,globalColor); strcpy(localText,globalText); strcpy(localComment,""); strcpy(globalText,""); } ; include : /* empty */ {setProps(&localProps, Marker::INCLUDE, 1);} | '+' {setProps(&localProps, Marker::INCLUDE, 1);} | '-' {setProps(&localProps, Marker::INCLUDE, 0);} ; shape : CIRCLE_ bp coord sp value ep shapeComment {fr->createCircleCmd(Vector($3), $5, localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);} | ELLIPSE_ bp coord sp vvalue sp optangle ep shapeComment {fr->createEllipseCmd(Vector($3), Vector($5), $7, localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);} | BOX_ bp coord sp vvalue sp optangle ep shapeComment {fr->createBoxCmd(Vector($3), Vector($5), $7, localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);} | LINE_ bp coord sp coord ep shapeComment {fr->createLineCmd(Vector($3), Vector($5), 0,0, localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);} | POINT_ bp coord ep shapeComment {fr->createPointCmd(Vector($3), Point::BOXCIRCLE, POINTSIZE, localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);} | TEXT_ bp coord sp STRING ep {strncpy(localText,$5,80);} shapeComment {fr->createTextCmd(Vector($3), 0, 1, localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);} | POLYGON_ {polylist.deleteAll();} bp polyNodes ep shapeComment {fr->createPolygonCmd(polylist, localColor,dash,1,globalFont,localText, localProps,localComment,taglist,cblist);} ; polyNodes : polyNodes sp polyNode | polyNode ; polyNode : coord {polylist.append(new Vertex($1));} ; generalComment : '#' FORMAT_ ':' tngFormat | '#' FILENAME_ ':' {DISCARD_(0);} STRING | '#' DATE_ ':' {DISCARD_(0);} STRING | '#' {DISCARD_(1);} STRING {strncpy(globalText,$3,80);} ; shapeComment : /* empty */ | '#' WHITE_ {strcpy(localColor,"white");} | '#' BLACK_ {strcpy(localColor,"black");} | '#' RED_ {strcpy(localColor,"red");} | '#' GREEN_ {strcpy(localColor,"green");} | '#' BLUE_ {strcpy(localColor,"blue");} | '#' CYAN_ {strcpy(localColor,"cyan");} | '#' MAGENTA_ {strcpy(localColor,"magenta");} | '#' YELLOW_ {strcpy(localColor,"yellow");} | '#' SOURCE_ { strcpy(localColor,"green"); setProps(&localProps,Marker::SOURCE,1); } | '#' BACKGROUND_ { strcpy(localColor,"red"); setProps(&localProps,Marker::SOURCE,0); } | '#' {DISCARD_(1);} STRING {strncpy(localComment,$3,80);} ; tngFormat : HMS_ tngWCS | DEGREES_ tngWCS | PIXELS_ {globalSystem = localSystem = Coord::IMAGE;} | PIXELS_ '(' PHYSICAL_ ')' {globalSystem = localSystem = Coord::IMAGE;} ; tngWCS : /* empty */ { globalSystem = localSystem = Coord::WCS; globalSky = localSky = Coord::FK5; } | '(' skyFrame ')' { globalSystem = localSystem = Coord::WCS; globalSky = localSky = (Coord::SkyFrame)$2; } ; %% static void setProps(unsigned short* props, unsigned short prop, int value) { if (value) *props |= prop; else *props &= ~prop; } static Coord::CoordSystem checkWCSSystem() { switch (localSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::WCS; default: return localSystem; } } static Coord::SkyFrame checkWCSSky() { switch (localSystem) { case Coord::IMAGE: case Coord::PHYSICAL: return Coord::FK5; default: return localSky; } } saods9/tksao/frame/vect.C000644 000765 000000 00000007263 12775230632 015663 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "vect.h" #include "fitsimage.h" Vect::Vect(Base* p, const Vector& pt, double mag, double ang) : Line(p, pt, pt) { strcpy(type_,"vector"); p2 = Vector(mag,0) * Rotate(ang) * FlipY() * Translate(p1); updateBBox(); } Vect::Vect(Base* p, const Vector& pt, double mag, double ang, int arr, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : Line(p, pt, pt, 0, arr, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { strcpy(type_,"vector"); p2 = Vector(mag,0) * Rotate(ang) * FlipY() * Translate(p1); updateBBox(); } Vect::Vect(Base* p, const Vector& ptr1, const Vector& ptr2, int arr, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb) : Line(p, ptr1, ptr2, 0, arr, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb) { strcpy(type_,"vector"); } void Vect::setPoints(const Vector& pt, double mag, double ang) { p1 = pt; p2 = Vector(mag,0) * Rotate(ang) * FlipY() * Translate(p1); updateBBox(); doCallBack(CallBack::EDITCB); } // list void Vect::list(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format, int conj, int strip) { if (!strip) { FitsImage* ptr = parent->findFits(sys,center); listPre(str, sys, sky, ptr, strip, 1); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: listNonCel(ptr, str, sys); break; default: if (ptr->hasWCSCel(sys)) { double rr = ptr->mapLenFromRef((p2-p1).length(),sys,Coord::ARCSEC); double aa = parent->mapAngleFromRef((p2-p1).angle(),sys,sky); switch (format) { case Coord::DEGREES: { Vector v1 = ptr->mapFromRef(p1,sys,sky); str << type_ << '(' << setprecision(10) << v1 << ',' << setprecision(3) << fixed << rr << '"' << ','; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(aa) << ')'; } break; case Coord::SEXAGESIMAL: listRADEC(ptr,p1,sys,sky,format); str << type_ << '(' << ra << ',' << dec << ',' << setprecision(3) << fixed << rr << '"' << ','; str.unsetf(ios_base::floatfield); str << setprecision(8) << radToDeg(aa) << ')'; break; } } else listNonCel(ptr, str, sys); } if (conj) str << " ||"; str << " vector=" << p2Arrow; listProperties(str, 0); } } void Vect::listNonCel(FitsImage* ptr, ostream& str, Coord::CoordSystem sys) { Vector v1 = ptr->mapFromRef(p1,sys); double rr = ptr->mapLenFromRef((p2-p1).length(),sys); double aa = parent->mapAngleFromRef((p2-p1).angle(),sys); str << type_ << '(' << setprecision(8) << v1 << ',' << rr << ',' << radToDeg(aa) << ')'; } void Vect::listXML(ostream& str, Coord::CoordSystem sys, Coord::SkyFrame sky, Coord::SkyFormat format) { FitsImage* ptr = parent->findFits(sys,center); double rr = ptr->mapLenFromRef((p2-p1).length(),sys,Coord::ARCSEC); XMLRowInit(); XMLRow(XMLSHAPE,type_); XMLRowPoint(ptr,sys,sky,format,p1); switch (sys) { case Coord::IMAGE: case Coord::PHYSICAL: case Coord::DETECTOR: case Coord::AMPLIFIER: XMLRow(XMLR,rr,8); break; default: if (ptr->hasWCS(sys)) { if (ptr->hasWCSCel(sys)) XMLRowARCSEC(XMLR,rr); else XMLRow(XMLR,rr,8); } break; } XMLRowAng(sys,sky); XMLRow(XMLPARAM,p2Arrow); XMLRowProps(ptr,sys); XMLRowEnd(str); } saods9/tksao/frame/vect.h000644 000765 000000 00000002567 12752662217 015735 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __vect_h__ #define __vect_h__ #include "line.h" class Vect : public Line { protected: void listNonCel(FitsImage*, ostream&, Coord::CoordSystem); public: Vect(Base* p, const Vector& pt, double mag, double ang); Vect(Base* p, const Vector& pt, double mag, double ang, int arr, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); Vect(Base* p, const Vector& ptr1, const Vector& ptr2, int arr, const char* clr, int* dsh, int wth, const char* fnt, const char* txt, unsigned short prop, const char* cmt, const List& tg, const List& cb); virtual Marker* dup() {return new Vect(*this);} int getArrow() {return p2Arrow;} void setArrow(int w) {p2Arrow = w ? 1 : 0;} void setPoints(const Vector& pt, double mag, double ang); void list(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int, int); void listXML(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat); void listSAOtng(ostream&, Coord::CoordSystem, Coord::SkyFrame, Coord::SkyFormat, int) {} }; #endif saods9/tksao/frame/xml.h000644 000765 000000 00000001035 12705446251 015555 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __xml_h__ #define __xml_h__ #define XMLNUMCOL 34 enum XMLColName {XMLSHAPE,XMLX,XMLY,XMLXV,XMLYV,XMLR,XMLR2,XMLRV,XMLRV2,XMLANG,XMLANGV,XMLTILE,XMLCOLOR,XMLWIDTH,XMLTEXT,XMLFONT,XMLSELECT,XMLHIGHLITE,XMLEDIT,XMLMOVE,XMLROTATE,XMLDELETE,XMLFIXED,XMLINCLUDE,XMLSOURCE,XMLDASH,XMLDASHLIST,XMLTAG,XMLPARAM,XMLPARAM2,XMLPARAM3,XMLPARAM4,XMLPARAM5,XMLCOMMENT}; #endif saods9/tksao/frame/xylex.C000644 000765 000000 00000157104 12705446251 016072 0ustar00joyewheel000000 000000 #line 2 "frame/xylex.C" #line 4 "frame/xylex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer xyFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *xyalloc (yy_size_t ); void *xyrealloc (void *,yy_size_t ); void xyfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 61 #define YY_END_OF_BUFFER 62 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[197] = { 0, 0, 0, 62, 60, 59, 60, 57, 60, 59, 60, 48, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 58, 57, 0, 48, 50, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 3, 0, 0, 0, 7, 9, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 21, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, 51, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 13, 14, 0, 0, 0, 0, 52, 51, 0, 0, 55, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 54, 0, 0, 0, 0, 0, 0, 15, 0, 0, 20, 0, 5, 6, 8, 10, 0, 18, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 11, 19, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 5, 6, 7, 8, 1, 9, 10, 11, 12, 13, 14, 12, 12, 12, 15, 16, 6, 1, 1, 1, 1, 1, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 1, 1, 1, 1, 1, 1, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[69] = { 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int16_t yy_base[198] = { 0, 0, 0, 303, 615, 615, 300, 0, 61, 615, 68, 76, 64, 291, 75, 74, 79, 72, 84, 81, 84, 289, 73, 84, 81, 70, 87, 90, 615, 0, 132, 0, 139, 152, 165, 178, 191, 198, 78, 224, 91, 179, 84, 102, 127, 128, 123, 141, 212, 136, 146, 615, 128, 182, 182, 182, 215, 222, 235, 242, 256, 263, 230, 205, 615, 222, 239, 236, 211, 615, 245, 238, 244, 257, 163, 256, 615, 247, 262, 256, 302, 284, 301, 363, 371, 379, 370, 162, 373, 378, 366, 369, 381, 370, 615, 381, 161, 384, 379, 371, 381, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 398, 425, 405, 433, 440, 448, 442, 615, 615, 429, 430, 436, 433, 449, 615, 615, 454, 453, 450, 443, 466, 492, 501, 508, 615, 515, 542, 615, 457, 501, 508, 111, 509, 516, 509, 521, 522, 510, 615, 615, 520, 508, 525, 524, 527, 519, 615, 520, 521, 615, 544, 615, 615, 615, 615, 554, 615, 563, 615, 549, 563, 547, 548, 560, 561, 568, 569, 615, 615, 615, 116 } ; static yyconst flex_int16_t yy_def[198] = { 0, 196, 1, 196, 196, 196, 196, 197, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 197, 196, 11, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 0, 196 } ; static yyconst flex_int16_t yy_nxt[684] = { 0, 4, 5, 6, 7, 8, 9, 8, 10, 11, 11, 11, 11, 11, 11, 11, 4, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 4, 22, 4, 4, 23, 24, 4, 4, 25, 4, 4, 26, 27, 4, 4, 4, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 4, 22, 4, 4, 23, 24, 4, 4, 25, 4, 4, 26, 27, 4, 4, 4, 30, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 33, 31, 31, 31, 31, 31, 31, 31, 34, 38, 40, 41, 35, 36, 42, 43, 37, 44, 45, 46, 49, 52, 50, 53, 54, 55, 62, 64, 67, 47, 51, 68, 69, 29, 170, 38, 40, 41, 35, 36, 42, 43, 37, 44, 45, 46, 49, 52, 50, 53, 54, 55, 62, 64, 67, 47, 51, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70, 71, 72, 73, 75, 56, 32, 32, 32, 32, 32, 32, 32, 76, 77, 142, 134, 96, 36, 57, 57, 57, 57, 57, 57, 57, 70, 71, 72, 73, 75, 56, 58, 58, 58, 58, 58, 58, 58, 76, 77, 59, 65, 59, 36, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 78, 66, 79, 80, 91, 87, 81, 74, 81, 65, 82, 82, 82, 82, 82, 82, 82, 57, 57, 57, 57, 57, 57, 57, 83, 63, 78, 66, 79, 80, 58, 58, 58, 58, 58, 58, 58, 60, 60, 60, 60, 60, 60, 60, 86, 88, 89, 90, 92, 93, 84, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 94, 95, 97, 98, 99, 86, 88, 89, 90, 92, 93, 84, 100, 85, 82, 82, 82, 82, 82, 82, 82, 48, 39, 28, 196, 196, 94, 95, 97, 98, 99, 82, 82, 82, 82, 82, 82, 82, 100, 85, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 128, 128, 128, 128, 128, 128, 129, 130, 130, 130, 130, 130, 130, 130, 131, 132, 132, 132, 132, 132, 132, 132, 133, 135, 136, 137, 138, 139, 140, 141, 143, 144, 145, 146, 147, 147, 147, 147, 147, 147, 147, 149, 149, 149, 149, 149, 149, 149, 133, 135, 136, 137, 138, 139, 140, 141, 143, 144, 145, 146, 148, 128, 128, 128, 128, 128, 128, 128, 150, 130, 130, 130, 130, 130, 130, 130, 152, 152, 152, 152, 152, 152, 152, 153, 132, 132, 132, 132, 132, 132, 132, 155, 156, 157, 158, 151, 159, 160, 161, 162, 163, 164, 147, 147, 147, 147, 147, 147, 147, 167, 154, 196, 196, 196, 196, 196, 196, 155, 156, 157, 158, 151, 159, 160, 161, 162, 163, 164, 147, 147, 147, 147, 147, 147, 147, 167, 154, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 152, 152, 152, 152, 152, 152, 152, 196, 168, 169, 171, 172, 165, 173, 174, 175, 176, 177, 178, 151, 179, 180, 181, 182, 183, 184, 166, 152, 152, 152, 152, 152, 152, 152, 168, 169, 171, 172, 165, 173, 174, 175, 176, 177, 178, 151, 179, 180, 181, 182, 183, 184, 166, 154, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 154, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 3, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196 } ; static yyconst flex_int16_t yy_chk[684] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 14, 15, 11, 11, 16, 17, 11, 18, 19, 20, 22, 24, 23, 25, 26, 27, 38, 40, 42, 20, 23, 43, 43, 197, 158, 12, 14, 15, 11, 11, 16, 17, 11, 18, 19, 20, 22, 24, 23, 25, 26, 27, 38, 40, 42, 20, 23, 30, 30, 30, 30, 30, 30, 30, 32, 32, 32, 32, 32, 32, 32, 44, 45, 46, 47, 49, 32, 33, 33, 33, 33, 33, 33, 33, 50, 52, 96, 87, 74, 33, 34, 34, 34, 34, 34, 34, 34, 44, 45, 46, 47, 49, 32, 35, 35, 35, 35, 35, 35, 35, 50, 52, 36, 41, 36, 33, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 53, 41, 54, 55, 68, 63, 56, 48, 56, 41, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 39, 53, 41, 54, 55, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 62, 65, 66, 67, 70, 71, 58, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 72, 73, 75, 77, 78, 62, 65, 66, 67, 70, 71, 58, 79, 61, 81, 81, 81, 81, 81, 81, 81, 21, 13, 6, 3, 0, 72, 73, 75, 77, 78, 82, 82, 82, 82, 82, 82, 82, 79, 61, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 86, 88, 89, 90, 91, 92, 93, 95, 97, 98, 99, 100, 127, 127, 127, 127, 127, 127, 127, 129, 129, 129, 129, 129, 129, 129, 86, 88, 89, 90, 91, 92, 93, 95, 97, 98, 99, 100, 128, 128, 128, 128, 128, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 133, 136, 137, 138, 130, 139, 140, 143, 144, 145, 146, 147, 147, 147, 147, 147, 147, 147, 155, 132, 0, 0, 0, 0, 0, 0, 133, 136, 137, 138, 130, 139, 140, 143, 144, 145, 146, 148, 148, 148, 148, 148, 148, 148, 155, 132, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 0, 156, 157, 159, 160, 149, 161, 162, 163, 164, 167, 168, 150, 169, 170, 171, 172, 174, 175, 152, 153, 153, 153, 153, 153, 153, 153, 156, 157, 159, 160, 149, 161, 162, 163, 164, 167, 168, 150, 169, 170, 171, 172, 174, 175, 152, 153, 177, 182, 184, 186, 187, 188, 189, 190, 191, 192, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 177, 182, 184, 186, 187, 188, 189, 190, 191, 192, 193, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "frame/xylex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "frame/xylex.L" #include #include #include #include "util.h" #include "xyparser.H" extern YYSTYPE* xylval; /* rules */ #line 638 "frame/xylex.C" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 27 "frame/xylex.L" #line 741 "frame/xylex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 197 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 196 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 29 "frame/xylex.L" {return AMPLIFIER_;} YY_BREAK case 2: YY_RULE_SETUP #line 30 "frame/xylex.L" {return B1950_;} YY_BREAK case 3: YY_RULE_SETUP #line 31 "frame/xylex.L" {return CCD_;} YY_BREAK case 4: YY_RULE_SETUP #line 32 "frame/xylex.L" {return DEBUG_;} YY_BREAK case 5: YY_RULE_SETUP #line 33 "frame/xylex.L" {return DETECTOR_;} YY_BREAK case 6: YY_RULE_SETUP #line 34 "frame/xylex.L" {return ECLIPTIC_;} YY_BREAK case 7: YY_RULE_SETUP #line 35 "frame/xylex.L" {return FK4_;} YY_BREAK case 8: YY_RULE_SETUP #line 36 "frame/xylex.L" {return FK4_NO_E_;} YY_BREAK case 9: YY_RULE_SETUP #line 37 "frame/xylex.L" {return FK5_;} YY_BREAK case 10: YY_RULE_SETUP #line 38 "frame/xylex.L" {return GALACTIC_;} YY_BREAK case 11: YY_RULE_SETUP #line 39 "frame/xylex.L" {return HELIOECLIPTIC_;} YY_BREAK case 12: YY_RULE_SETUP #line 40 "frame/xylex.L" {return ICRS_;} YY_BREAK case 13: YY_RULE_SETUP #line 41 "frame/xylex.L" {return IMAGE_;} YY_BREAK case 14: YY_RULE_SETUP #line 42 "frame/xylex.L" {return J2000_;} YY_BREAK case 15: YY_RULE_SETUP #line 43 "frame/xylex.L" {return LOGICAL_;} YY_BREAK case 16: YY_RULE_SETUP #line 44 "frame/xylex.L" {return OFF_;} YY_BREAK case 17: YY_RULE_SETUP #line 45 "frame/xylex.L" {return ON_;} YY_BREAK case 18: YY_RULE_SETUP #line 46 "frame/xylex.L" {return PHYSICAL_;} YY_BREAK case 19: YY_RULE_SETUP #line 47 "frame/xylex.L" {return SUPERGALACTIC_;} YY_BREAK case 20: YY_RULE_SETUP #line 48 "frame/xylex.L" {return VERSION_;} YY_BREAK case 21: YY_RULE_SETUP #line 49 "frame/xylex.L" {return WCS_;} YY_BREAK case 22: YY_RULE_SETUP #line 50 "frame/xylex.L" {return WCSA_;} YY_BREAK case 23: YY_RULE_SETUP #line 51 "frame/xylex.L" {return WCSB_;} YY_BREAK case 24: YY_RULE_SETUP #line 52 "frame/xylex.L" {return WCSC_;} YY_BREAK case 25: YY_RULE_SETUP #line 53 "frame/xylex.L" {return WCSD_;} YY_BREAK case 26: YY_RULE_SETUP #line 54 "frame/xylex.L" {return WCSE_;} YY_BREAK case 27: YY_RULE_SETUP #line 55 "frame/xylex.L" {return WCSF_;} YY_BREAK case 28: YY_RULE_SETUP #line 56 "frame/xylex.L" {return WCSG_;} YY_BREAK case 29: YY_RULE_SETUP #line 57 "frame/xylex.L" {return WCSH_;} YY_BREAK case 30: YY_RULE_SETUP #line 58 "frame/xylex.L" {return WCSI_;} YY_BREAK case 31: YY_RULE_SETUP #line 59 "frame/xylex.L" {return WCSJ_;} YY_BREAK case 32: YY_RULE_SETUP #line 60 "frame/xylex.L" {return WCSK_;} YY_BREAK case 33: YY_RULE_SETUP #line 61 "frame/xylex.L" {return WCSL_;} YY_BREAK case 34: YY_RULE_SETUP #line 62 "frame/xylex.L" {return WCSM_;} YY_BREAK case 35: YY_RULE_SETUP #line 63 "frame/xylex.L" {return WCSN_;} YY_BREAK case 36: YY_RULE_SETUP #line 64 "frame/xylex.L" {return WCSO_;} YY_BREAK case 37: YY_RULE_SETUP #line 65 "frame/xylex.L" {return WCSP_;} YY_BREAK case 38: YY_RULE_SETUP #line 66 "frame/xylex.L" {return WCSQ_;} YY_BREAK case 39: YY_RULE_SETUP #line 67 "frame/xylex.L" {return WCSR_;} YY_BREAK case 40: YY_RULE_SETUP #line 68 "frame/xylex.L" {return WCSS_;} YY_BREAK case 41: YY_RULE_SETUP #line 69 "frame/xylex.L" {return WCST_;} YY_BREAK case 42: YY_RULE_SETUP #line 70 "frame/xylex.L" {return WCSU_;} YY_BREAK case 43: YY_RULE_SETUP #line 71 "frame/xylex.L" {return WCSV_;} YY_BREAK case 44: YY_RULE_SETUP #line 72 "frame/xylex.L" {return WCSW_;} YY_BREAK case 45: YY_RULE_SETUP #line 73 "frame/xylex.L" {return WCSX_;} YY_BREAK case 46: YY_RULE_SETUP #line 74 "frame/xylex.L" {return WCSY_;} YY_BREAK case 47: YY_RULE_SETUP #line 75 "frame/xylex.L" {return WCSZ_;} YY_BREAK case 48: YY_RULE_SETUP #line 77 "frame/xylex.L" { // Integer xylval->integer = atoi(yytext); return INT; } YY_BREAK case 49: #line 83 "frame/xylex.L" case 50: YY_RULE_SETUP #line 83 "frame/xylex.L" { // Real Number xylval->real = atof(yytext); return REAL; } YY_BREAK case 51: #line 89 "frame/xylex.L" case 52: YY_RULE_SETUP #line 89 "frame/xylex.L" { // Sexagesimal int ll = yyleng <(XYBUFSIZE-1) ? yyleng:(XYBUFSIZE-1); strncpy(xylval->str,yytext,ll); xylval->str[ll] = '\0'; return SEXSTR; } YY_BREAK case 53: #line 97 "frame/xylex.L" case 54: YY_RULE_SETUP #line 97 "frame/xylex.L" { // HMS int ll = yyleng <(XYBUFSIZE-1) ? yyleng:(XYBUFSIZE-1); strncpy(xylval->str,yytext,ll); xylval->str[ll] = '\0'; return HMSSTR; } YY_BREAK case 55: #line 105 "frame/xylex.L" case 56: YY_RULE_SETUP #line 105 "frame/xylex.L" { // DMS int ll = yyleng <(XYBUFSIZE-1) ? yyleng:(XYBUFSIZE-1); strncpy(xylval->str,yytext,ll); xylval->str[ll] = '\0'; return DMSSTR; } YY_BREAK case 57: YY_RULE_SETUP #line 112 "frame/xylex.L" { // comment, eat it } YY_BREAK case 58: /* rule 58 can match eol */ YY_RULE_SETUP #line 115 "frame/xylex.L" { // windows line feed return '\n'; } YY_BREAK case 59: /* rule 59 can match eol */ YY_RULE_SETUP #line 119 "frame/xylex.L" { // special chars return yytext[0]; } YY_BREAK case YY_STATE_EOF(INITIAL): #line 123 "frame/xylex.L" { // eof return EOF_; } YY_BREAK case 60: YY_RULE_SETUP #line 127 "frame/xylex.L" { // Else, eat it } YY_BREAK case 61: YY_RULE_SETUP #line 130 "frame/xylex.L" ECHO; YY_BREAK #line 1148 "frame/xylex.C" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; xyfree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); xyfree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ xyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) xyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 197 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 197 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 196); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) xyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) xyalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) xyfree((void *) b->yy_ch_buf ); xyfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)xyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)xyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) xyalloc(new_size ); else (yy_start_stack) = (int *) xyrealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *xyalloc (yy_size_t size ) { return (void *) malloc( size ); } void *xyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void xyfree (void * ptr ) { free( (char *) ptr ); /* see xyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 130 "frame/xylex.L" saods9/tksao/frame/xylex.L000644 000765 000000 00000005073 12705446251 016100 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "util.h" #include "xyparser.H" extern YYSTYPE* xylval; %} D [0-9] E [Ee][+-]?{D}+ /* rules */ %% amplifier {return AMPLIFIER_;} b1950 {return B1950_;} ccd {return CCD_;} debug {return DEBUG_;} detector {return DETECTOR_;} ecliptic {return ECLIPTIC_;} fk4 {return FK4_;} fk4-no-e {return FK4_NO_E_;} fk5 {return FK5_;} galactic {return GALACTIC_;} helioecliptic {return HELIOECLIPTIC_;} icrs {return ICRS_;} image {return IMAGE_;} j2000 {return J2000_;} logical {return LOGICAL_;} off {return OFF_;} on {return ON_;} physical {return PHYSICAL_;} supergalactic {return SUPERGALACTIC_;} version {return VERSION_;} wcs {return WCS_;} wcsa {return WCSA_;} wcsb {return WCSB_;} wcsc {return WCSC_;} wcsd {return WCSD_;} wcse {return WCSE_;} wcsf {return WCSF_;} wcsg {return WCSG_;} wcsh {return WCSH_;} wcsi {return WCSI_;} wcsj {return WCSJ_;} wcsk {return WCSK_;} wcsl {return WCSL_;} wcsm {return WCSM_;} wcsn {return WCSN_;} wcso {return WCSO_;} wcsp {return WCSP_;} wcsq {return WCSQ_;} wcsr {return WCSR_;} wcss {return WCSS_;} wcst {return WCST_;} wcsu {return WCSU_;} wcsv {return WCSV_;} wcsw {return WCSW_;} wcsx {return WCSX_;} wcsy {return WCSY_;} wcsz {return WCSZ_;} [+-]?{D}+ { // Integer xylval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number xylval->real = atof(yytext); return REAL; } [+-]?{D}+:{D}+:{D}+"."? | [+-]?{D}+:{D}+:{D}*"."{D}+ { // Sexagesimal int ll = yyleng <(XYBUFSIZE-1) ? yyleng:(XYBUFSIZE-1); strncpy(xylval->str,yytext,ll); xylval->str[ll] = '\0'; return SEXSTR; } [+-]?{D}+h{D}+m{D}+"."?s | [+-]?{D}+h{D}+m{D}*"."{D}+s { // HMS int ll = yyleng <(XYBUFSIZE-1) ? yyleng:(XYBUFSIZE-1); strncpy(xylval->str,yytext,ll); xylval->str[ll] = '\0'; return HMSSTR; } [+-]?{D}+d{D}+m{D}+"."?s | [+-]?{D}+d{D}+m{D}*"."{D}+s { // DMS int ll = yyleng <(XYBUFSIZE-1) ? yyleng:(XYBUFSIZE-1); strncpy(xylval->str,yytext,ll); xylval->str[ll] = '\0'; return DMSSTR; } #.* { // comment, eat it } \r\n { // windows line feed return '\n'; } [\n;,] { // special chars return yytext[0]; } <> { // eof return EOF_; } . { // Else, eat it } %% saods9/tksao/frame/xyparser.C000644 000765 000000 00000163632 12553253032 016573 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse xyparse #define yylex xylex #define yyerror xyerror #define yylval xylval #define yychar xychar #define yydebug xydebug #define yynerrs xynerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, ANGDEGREE = 260, SEXSTR = 261, HMSSTR = 262, DMSSTR = 263, EOF_ = 264, AMPLIFIER_ = 265, B1950_ = 266, CCD_ = 267, DEBUG_ = 268, DETECTOR_ = 269, ECLIPTIC_ = 270, FK4_ = 271, FK4_NO_E_ = 272, FK5_ = 273, GALACTIC_ = 274, HELIOECLIPTIC_ = 275, ICRS_ = 276, IMAGE_ = 277, J2000_ = 278, LOGICAL_ = 279, OFF_ = 280, ON_ = 281, PHYSICAL_ = 282, SUPERGALACTIC_ = 283, VERSION_ = 284, WCS_ = 285, WCSA_ = 286, WCSB_ = 287, WCSC_ = 288, WCSD_ = 289, WCSE_ = 290, WCSF_ = 291, WCSG_ = 292, WCSH_ = 293, WCSI_ = 294, WCSJ_ = 295, WCSK_ = 296, WCSL_ = 297, WCSM_ = 298, WCSN_ = 299, WCSO_ = 300, WCSP_ = 301, WCSQ_ = 302, WCSR_ = 303, WCSS_ = 304, WCST_ = 305, WCSU_ = 306, WCSV_ = 307, WCSW_ = 308, WCSX_ = 309, WCSY_ = 310, WCSZ_ = 311 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define ANGDEGREE 260 #define SEXSTR 261 #define HMSSTR 262 #define DMSSTR 263 #define EOF_ 264 #define AMPLIFIER_ 265 #define B1950_ 266 #define CCD_ 267 #define DEBUG_ 268 #define DETECTOR_ 269 #define ECLIPTIC_ 270 #define FK4_ 271 #define FK4_NO_E_ 272 #define FK5_ 273 #define GALACTIC_ 274 #define HELIOECLIPTIC_ 275 #define ICRS_ 276 #define IMAGE_ 277 #define J2000_ 278 #define LOGICAL_ 279 #define OFF_ 280 #define ON_ 281 #define PHYSICAL_ 282 #define SUPERGALACTIC_ 283 #define VERSION_ 284 #define WCS_ 285 #define WCSA_ 286 #define WCSB_ 287 #define WCSC_ 288 #define WCSD_ 289 #define WCSE_ 290 #define WCSF_ 291 #define WCSG_ 292 #define WCSH_ 293 #define WCSI_ 294 #define WCSJ_ 295 #define WCSK_ 296 #define WCSL_ 297 #define WCSM_ 298 #define WCSN_ 299 #define WCSO_ 300 #define WCSP_ 301 #define WCSQ_ 302 #define WCSR_ 303 #define WCSS_ 304 #define WCST_ 305 #define WCSU_ 306 #define WCSV_ 307 #define WCSW_ 308 #define WCSX_ 309 #define WCSY_ 310 #define WCSZ_ 311 /* Copy the first part of user declarations. */ #line 10 "frame/xyparser.Y" #define YYDEBUG 1 #define FITSPTR (fr->findFits()) #include #include #include #include "base.h" #include "fitsimage.h" #include "basemarker.h" #undef yyFlexLexer #define yyFlexLexer xyFlexLexer #include extern int xylex(void*, xyFlexLexer*); extern void xyerror(Base*, xyFlexLexer*, const char*); static const char *color = "green"; static int dash[] = {8,3}; static const char *font = "helvetica 10 normal roman"; static const char *text = ""; static Coord::CoordSystem globalSystem; static Coord::SkyFrame globalSky; static Coord::CoordSystem localSystem; static Coord::SkyFrame localSky; static List taglist; static List cblist; /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 44 "frame/xyparser.Y" { #define XYBUFSIZE 2048 double real; int integer; char str[XYBUFSIZE]; double vector[3]; } /* Line 193 of yacc.c. */ #line 258 "frame/xyparser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 271 "frame/xyparser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 126 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 60 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 20 /* YYNRULES -- Number of rules. */ #define YYNRULES 78 /* YYNRULES -- Number of states. */ #define YYNSTATES 91 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 311 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 57, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 59, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 58, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 4, 7, 11, 14, 15, 18, 20, 22, 25, 26, 30, 31, 33, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 55, 57, 59, 61, 63, 67, 71, 75, 79, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 61, 0, -1, -1, 62, 63, -1, 63, 64, 69, -1, 64, 69, -1, -1, 13, 71, -1, 29, -1, 77, -1, 77, 78, -1, -1, 65, 79, 66, -1, -1, 67, -1, 67, 68, -1, 68, -1, 70, -1, 57, -1, 58, -1, 9, -1, 4, -1, 3, -1, 26, -1, 25, -1, -1, 59, -1, 6, -1, 7, -1, 8, -1, 73, 72, 73, -1, 74, 72, 75, -1, 75, 72, 75, -1, 70, 72, 70, -1, 5, 72, 5, -1, 22, -1, 24, -1, 27, -1, 12, -1, 10, -1, 14, -1, 30, -1, 31, -1, 32, -1, 33, -1, 34, -1, 35, -1, 36, -1, 37, -1, 38, -1, 39, -1, 40, -1, 41, -1, 42, -1, 43, -1, 44, -1, 45, -1, 46, -1, 47, -1, 48, -1, 49, -1, 50, -1, 51, -1, 52, -1, 53, -1, 54, -1, 55, -1, 56, -1, 16, -1, 11, -1, 17, -1, 18, -1, 23, -1, 21, -1, 19, -1, 28, -1, 15, -1, 20, -1, 76, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 122, 122, 122, 128, 129, 132, 133, 134, 135, 136, 138, 138, 141, 142, 145, 146, 149, 152, 153, 154, 157, 158, 161, 162, 165, 166, 169, 172, 175, 178, 189, 196, 203, 210, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 266 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "INT", "REAL", "ANGDEGREE", "SEXSTR", "HMSSTR", "DMSSTR", "EOF_", "AMPLIFIER_", "B1950_", "CCD_", "DEBUG_", "DETECTOR_", "ECLIPTIC_", "FK4_", "FK4_NO_E_", "FK5_", "GALACTIC_", "HELIOECLIPTIC_", "ICRS_", "IMAGE_", "J2000_", "LOGICAL_", "OFF_", "ON_", "PHYSICAL_", "SUPERGALACTIC_", "VERSION_", "WCS_", "WCSA_", "WCSB_", "WCSC_", "WCSD_", "WCSE_", "WCSF_", "WCSG_", "WCSH_", "WCSI_", "WCSJ_", "WCSK_", "WCSL_", "WCSM_", "WCSN_", "WCSO_", "WCSP_", "WCSQ_", "WCSR_", "WCSS_", "WCST_", "WCSU_", "WCSV_", "WCSW_", "WCSX_", "WCSY_", "WCSZ_", "'\\n'", "';'", "','", "$accept", "start", "@1", "commands", "command", "@2", "comment", "junks", "junk", "terminator", "numeric", "debug", "sp", "sexagesimal", "hms", "dms", "coord", "coordSystem", "skyFrame", "shape", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 10, 59, 44 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 60, 62, 61, 63, 63, 64, 64, 64, 64, 64, 65, 64, 66, 66, 67, 67, 68, 69, 69, 69, 70, 70, 71, 71, 72, 72, 73, 74, 75, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 3, 2, 0, 2, 1, 1, 2, 0, 3, 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 2, 0, 11, 1, 39, 38, 0, 40, 35, 36, 37, 8, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 11, 0, 0, 9, 24, 23, 7, 0, 20, 18, 19, 5, 22, 21, 25, 27, 28, 29, 25, 25, 25, 25, 78, 13, 69, 76, 68, 70, 71, 74, 77, 73, 72, 75, 10, 4, 26, 0, 0, 0, 0, 0, 12, 14, 16, 17, 34, 33, 30, 31, 32, 15 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 1, 2, 39, 40, 41, 81, 82, 83, 50, 84, 45, 76, 58, 59, 60, 61, 42, 73, 62 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -40 static const yytype_int8 yypact[] = { -40, 11, 50, -40, -40, -40, -18, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 0, 8, -2, 98, -40, -40, -40, 8, -40, -40, -40, -40, -40, -40, -36, -40, -40, -40, -36, -36, -36, -36, -40, 12, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, 21, 12, 22, 61, 61, -40, 12, -40, -40, -40, -40, -40, -40, -40, -40 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -40, -40, -40, -40, 31, -40, -40, -40, -11, 27, -16, -40, -39, -3, -40, -12, -40, -40, -40, -40 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -7 static const yytype_int8 yytable[] = { -3, 51, 52, 53, 54, 55, 56, 43, 44, -6, 4, 3, 5, 6, 7, 51, 52, 47, 77, 78, 79, 80, 8, 75, 9, 57, 85, 10, 54, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, -6, -6, -6, 4, 86, 5, 6, 7, 48, 49, 88, 89, 56, 46, 90, 8, 74, 9, 87, 0, 10, 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, -6, -6, 63, 0, 0, 0, 64, 65, 66, 67, 68, 69, 70, 0, 71, 0, 0, 0, 0, 72 }; static const yytype_int8 yycheck[] = { 0, 3, 4, 5, 6, 7, 8, 25, 26, 9, 10, 0, 12, 13, 14, 3, 4, 9, 57, 58, 59, 60, 22, 59, 24, 41, 5, 27, 6, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 9, 10, 77, 12, 13, 14, 57, 58, 79, 80, 8, 39, 82, 22, 46, 24, 78, -1, 27, -1, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 11, -1, -1, -1, 15, 16, 17, 18, 19, 20, 21, -1, 23, -1, -1, -1, -1, 28 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 61, 62, 0, 10, 12, 13, 14, 22, 24, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 63, 64, 65, 77, 25, 26, 71, 64, 9, 57, 58, 69, 3, 4, 5, 6, 7, 8, 70, 73, 74, 75, 76, 79, 11, 15, 16, 17, 18, 19, 20, 21, 23, 28, 78, 69, 59, 72, 72, 72, 72, 72, 66, 67, 68, 70, 5, 70, 73, 75, 75, 68 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (fr, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, fr, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, xyFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; xyFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (fr); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, Base* fr, xyFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, fr, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; Base* fr; xyFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, fr, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, Base* fr, xyFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, fr, ll) YYSTYPE *yyvsp; int yyrule; Base* fr; xyFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , fr, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, fr, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, Base* fr, xyFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, fr, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; Base* fr; xyFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (fr); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (Base* fr, xyFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (Base* fr, xyFlexLexer* ll) #else int yyparse (fr, ll) Base* fr; xyFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: #line 122 "frame/xyparser.Y" { globalSystem = fr->xySystem(); globalSky = fr->xySky(); ;} break; case 8: #line 134 "frame/xyparser.Y" {cerr << "X Y Format 1.0" << endl;;} break; case 9: #line 135 "frame/xyparser.Y" {globalSystem = (Coord::CoordSystem)(yyvsp[(1) - (1)].integer);;} break; case 10: #line 137 "frame/xyparser.Y" {globalSystem = (Coord::CoordSystem)(yyvsp[(1) - (2)].integer); globalSky = (Coord::SkyFrame)(yyvsp[(2) - (2)].integer);;} break; case 11: #line 138 "frame/xyparser.Y" {localSystem = globalSystem; localSky = globalSky; maperr = 0;;} break; case 17: #line 149 "frame/xyparser.Y" {;} break; case 20: #line 154 "frame/xyparser.Y" {YYACCEPT;;} break; case 21: #line 157 "frame/xyparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 22: #line 158 "frame/xyparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 23: #line 161 "frame/xyparser.Y" {yydebug=1;;} break; case 24: #line 162 "frame/xyparser.Y" {yydebug=0;;} break; case 27: #line 169 "frame/xyparser.Y" {(yyval.real) = parseSEXStr((yyvsp[(1) - (1)].str));;} break; case 28: #line 172 "frame/xyparser.Y" {(yyval.real) = parseHMSStr((yyvsp[(1) - (1)].str));;} break; case 29: #line 175 "frame/xyparser.Y" {(yyval.real) = parseDMSStr((yyvsp[(1) - (1)].str));;} break; case 30: #line 179 "frame/xyparser.Y" { Vector r; if (localSky == Coord::GALACTIC || localSky == Coord::ECLIPTIC) r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),localSystem,localSky); else r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real)*360./24.,(yyvsp[(3) - (3)].real)),localSystem,localSky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 31: #line 190 "frame/xyparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),localSystem,localSky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 32: #line 197 "frame/xyparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),localSystem,localSky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 33: #line 204 "frame/xyparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),localSystem,localSky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 34: #line 211 "frame/xyparser.Y" { Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),localSystem,localSky); (yyval.vector)[0] = r[0]; (yyval.vector)[1] = r[1]; (yyval.vector)[2] = r[2]; ;} break; case 35: #line 219 "frame/xyparser.Y" {(yyval.integer) = Coord::IMAGE;;} break; case 36: #line 220 "frame/xyparser.Y" {(yyval.integer) = Coord::IMAGE;;} break; case 37: #line 221 "frame/xyparser.Y" {(yyval.integer) = Coord::PHYSICAL;;} break; case 38: #line 222 "frame/xyparser.Y" {(yyval.integer) = Coord::PHYSICAL;;} break; case 39: #line 223 "frame/xyparser.Y" {(yyval.integer) = Coord::AMPLIFIER;;} break; case 40: #line 224 "frame/xyparser.Y" {(yyval.integer) = Coord::DETECTOR;;} break; case 41: #line 225 "frame/xyparser.Y" {(yyval.integer) = Coord::WCS;;} break; case 42: #line 226 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSA;;} break; case 43: #line 227 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSB;;} break; case 44: #line 228 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSC;;} break; case 45: #line 229 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSD;;} break; case 46: #line 230 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSE;;} break; case 47: #line 231 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSF;;} break; case 48: #line 232 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSG;;} break; case 49: #line 233 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSH;;} break; case 50: #line 234 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSI;;} break; case 51: #line 235 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSJ;;} break; case 52: #line 236 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSK;;} break; case 53: #line 237 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSL;;} break; case 54: #line 238 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSM;;} break; case 55: #line 239 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSN;;} break; case 56: #line 240 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSO;;} break; case 57: #line 241 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSP;;} break; case 58: #line 242 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSQ;;} break; case 59: #line 243 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSR;;} break; case 60: #line 244 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSS;;} break; case 61: #line 245 "frame/xyparser.Y" {(yyval.integer) = Coord::WCST;;} break; case 62: #line 246 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSU;;} break; case 63: #line 247 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSV;;} break; case 64: #line 248 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSW;;} break; case 65: #line 249 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSX;;} break; case 66: #line 250 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSY;;} break; case 67: #line 251 "frame/xyparser.Y" {(yyval.integer) = Coord::WCSZ;;} break; case 68: #line 254 "frame/xyparser.Y" {(yyval.integer) = Coord::FK4;;} break; case 69: #line 255 "frame/xyparser.Y" {(yyval.integer) = Coord::FK4;;} break; case 70: #line 256 "frame/xyparser.Y" {(yyval.integer) = Coord::FK4_NO_E;;} break; case 71: #line 257 "frame/xyparser.Y" {(yyval.integer) = Coord::FK5;;} break; case 72: #line 258 "frame/xyparser.Y" {(yyval.integer) = Coord::FK5;;} break; case 73: #line 259 "frame/xyparser.Y" {(yyval.integer) = Coord::ICRS;;} break; case 74: #line 260 "frame/xyparser.Y" {(yyval.integer) = Coord::GALACTIC;;} break; case 75: #line 261 "frame/xyparser.Y" {(yyval.integer) = Coord::SUPERGALACTIC;;} break; case 76: #line 262 "frame/xyparser.Y" {(yyval.integer) = Coord::ECLIPTIC;;} break; case 77: #line 263 "frame/xyparser.Y" {(yyval.integer) = Coord::HELIOECLIPTIC;;} break; case 78: #line 266 "frame/xyparser.Y" {fr->createPointCmd(Vector((yyvsp[(1) - (1)].vector)), Point::BOXCIRCLE, POINTSIZE, color,dash,1,font,text, Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::HIGHLITE | Marker::INCLUDE | Marker::SOURCE, "",taglist,cblist); ;} break; /* Line 1267 of yacc.c. */ #line 1934 "frame/xyparser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (fr, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (fr, ll, yymsg); } else { yyerror (fr, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, fr, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, fr, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (fr, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, fr, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, fr, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 275 "frame/xyparser.Y" saods9/tksao/frame/xyparser.H000644 000765 000000 00000010265 12553253032 016571 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, ANGDEGREE = 260, SEXSTR = 261, HMSSTR = 262, DMSSTR = 263, EOF_ = 264, AMPLIFIER_ = 265, B1950_ = 266, CCD_ = 267, DEBUG_ = 268, DETECTOR_ = 269, ECLIPTIC_ = 270, FK4_ = 271, FK4_NO_E_ = 272, FK5_ = 273, GALACTIC_ = 274, HELIOECLIPTIC_ = 275, ICRS_ = 276, IMAGE_ = 277, J2000_ = 278, LOGICAL_ = 279, OFF_ = 280, ON_ = 281, PHYSICAL_ = 282, SUPERGALACTIC_ = 283, VERSION_ = 284, WCS_ = 285, WCSA_ = 286, WCSB_ = 287, WCSC_ = 288, WCSD_ = 289, WCSE_ = 290, WCSF_ = 291, WCSG_ = 292, WCSH_ = 293, WCSI_ = 294, WCSJ_ = 295, WCSK_ = 296, WCSL_ = 297, WCSM_ = 298, WCSN_ = 299, WCSO_ = 300, WCSP_ = 301, WCSQ_ = 302, WCSR_ = 303, WCSS_ = 304, WCST_ = 305, WCSU_ = 306, WCSV_ = 307, WCSW_ = 308, WCSX_ = 309, WCSY_ = 310, WCSZ_ = 311 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define ANGDEGREE 260 #define SEXSTR 261 #define HMSSTR 262 #define DMSSTR 263 #define EOF_ 264 #define AMPLIFIER_ 265 #define B1950_ 266 #define CCD_ 267 #define DEBUG_ 268 #define DETECTOR_ 269 #define ECLIPTIC_ 270 #define FK4_ 271 #define FK4_NO_E_ 272 #define FK5_ 273 #define GALACTIC_ 274 #define HELIOECLIPTIC_ 275 #define ICRS_ 276 #define IMAGE_ 277 #define J2000_ 278 #define LOGICAL_ 279 #define OFF_ 280 #define ON_ 281 #define PHYSICAL_ 282 #define SUPERGALACTIC_ 283 #define VERSION_ 284 #define WCS_ 285 #define WCSA_ 286 #define WCSB_ 287 #define WCSC_ 288 #define WCSD_ 289 #define WCSE_ 290 #define WCSF_ 291 #define WCSG_ 292 #define WCSH_ 293 #define WCSI_ 294 #define WCSJ_ 295 #define WCSK_ 296 #define WCSL_ 297 #define WCSM_ 298 #define WCSN_ 299 #define WCSO_ 300 #define WCSP_ 301 #define WCSQ_ 302 #define WCSR_ 303 #define WCSS_ 304 #define WCST_ 305 #define WCSU_ 306 #define WCSV_ 307 #define WCSW_ 308 #define WCSX_ 309 #define WCSY_ 310 #define WCSZ_ 311 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 44 "frame/xyparser.Y" { #define XYBUFSIZE 2048 double real; int integer; char str[XYBUFSIZE]; double vector[3]; } /* Line 1529 of yacc.c. */ #line 169 "frame/xyparser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/frame/xyparser.Y000644 000765 000000 00000012557 12705446251 016626 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {Base* fr} %lex-param {xyFlexLexer* ll} %parse-param {xyFlexLexer* ll} %{ #define YYDEBUG 1 #define FITSPTR (fr->findFits()) #include #include #include #include "base.h" #include "fitsimage.h" #include "basemarker.h" #undef yyFlexLexer #define yyFlexLexer xyFlexLexer #include extern int xylex(void*, xyFlexLexer*); extern void xyerror(Base*, xyFlexLexer*, const char*); static const char *color = "green"; static int dash[] = {8,3}; static const char *font = "helvetica 10 normal roman"; static const char *text = ""; static Coord::CoordSystem globalSystem; static Coord::SkyFrame globalSky; static Coord::CoordSystem localSystem; static Coord::SkyFrame localSky; static List taglist; static List cblist; %} %union { #define XYBUFSIZE 2048 double real; int integer; char str[XYBUFSIZE]; double vector[3]; } %type numeric %type sexagesimal %type hms %type dms %type coord %type coordSystem %type skyFrame %token INT %token REAL %token ANGDEGREE %token SEXSTR %token HMSSTR %token DMSSTR %token EOF_ %token AMPLIFIER_ %token B1950_ %token CCD_ %token DEBUG_ %token DETECTOR_ %token ECLIPTIC_ %token FK4_ %token FK4_NO_E_ %token FK5_ %token GALACTIC_ %token HELIOECLIPTIC_ %token ICRS_ %token IMAGE_ %token J2000_ %token LOGICAL_ %token OFF_ %token ON_ %token PHYSICAL_ %token SUPERGALACTIC_ %token VERSION_ %token WCS_ %token WCSA_ %token WCSB_ %token WCSC_ %token WCSD_ %token WCSE_ %token WCSF_ %token WCSG_ %token WCSH_ %token WCSI_ %token WCSJ_ %token WCSK_ %token WCSL_ %token WCSM_ %token WCSN_ %token WCSO_ %token WCSP_ %token WCSQ_ %token WCSR_ %token WCSS_ %token WCST_ %token WCSU_ %token WCSV_ %token WCSW_ %token WCSX_ %token WCSY_ %token WCSZ_ %% start : { globalSystem = fr->xySystem(); globalSky = fr->xySky(); } commands ; commands: commands command terminator | command terminator ; command : /* empty */ | DEBUG_ debug | VERSION_ {cerr << "X Y Format 1.0" << endl;} | coordSystem {globalSystem = (Coord::CoordSystem)$1;} | coordSystem skyFrame {globalSystem = (Coord::CoordSystem)$1; globalSky = (Coord::SkyFrame)$2;} | {localSystem = globalSystem; localSky = globalSky; maperr = 0;} shape comment ; comment : /* empty */ | junks ; junks : junks junk | junk ; junk : numeric {} ; terminator: '\n' | ';' | EOF_ {YYACCEPT;} ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; sp : /* empty */ | ',' ; sexagesimal: SEXSTR {$$ = parseSEXStr($1);} ; hms : HMSSTR {$$ = parseHMSStr($1);} ; dms : DMSSTR {$$ = parseDMSStr($1);} ; coord : sexagesimal sp sexagesimal { Vector r; if (localSky == Coord::GALACTIC || localSky == Coord::ECLIPTIC) r = FITSPTR->mapToRef(Vector($1,$3),localSystem,localSky); else r = FITSPTR->mapToRef(Vector($1*360./24.,$3),localSystem,localSky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | hms sp dms { Vector r = FITSPTR->mapToRef(Vector($1,$3),localSystem,localSky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | dms sp dms { Vector r = FITSPTR->mapToRef(Vector($1,$3),localSystem,localSky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | numeric sp numeric { Vector r = FITSPTR->mapToRef(Vector($1,$3),localSystem,localSky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } | ANGDEGREE sp ANGDEGREE { Vector r = FITSPTR->mapToRef(Vector($1,$3),localSystem,localSky); $$[0] = r[0]; $$[1] = r[1]; $$[2] = r[2]; } ; coordSystem : IMAGE_ {$$ = Coord::IMAGE;} | LOGICAL_ {$$ = Coord::IMAGE;} | PHYSICAL_ {$$ = Coord::PHYSICAL;} | CCD_ {$$ = Coord::PHYSICAL;} | AMPLIFIER_ {$$ = Coord::AMPLIFIER;} | DETECTOR_ {$$ = Coord::DETECTOR;} | WCS_ {$$ = Coord::WCS;} | WCSA_ {$$ = Coord::WCSA;} | WCSB_ {$$ = Coord::WCSB;} | WCSC_ {$$ = Coord::WCSC;} | WCSD_ {$$ = Coord::WCSD;} | WCSE_ {$$ = Coord::WCSE;} | WCSF_ {$$ = Coord::WCSF;} | WCSG_ {$$ = Coord::WCSG;} | WCSH_ {$$ = Coord::WCSH;} | WCSI_ {$$ = Coord::WCSI;} | WCSJ_ {$$ = Coord::WCSJ;} | WCSK_ {$$ = Coord::WCSK;} | WCSL_ {$$ = Coord::WCSL;} | WCSM_ {$$ = Coord::WCSM;} | WCSN_ {$$ = Coord::WCSN;} | WCSO_ {$$ = Coord::WCSO;} | WCSP_ {$$ = Coord::WCSP;} | WCSQ_ {$$ = Coord::WCSQ;} | WCSR_ {$$ = Coord::WCSR;} | WCSS_ {$$ = Coord::WCSS;} | WCST_ {$$ = Coord::WCST;} | WCSU_ {$$ = Coord::WCSU;} | WCSV_ {$$ = Coord::WCSV;} | WCSW_ {$$ = Coord::WCSW;} | WCSX_ {$$ = Coord::WCSX;} | WCSY_ {$$ = Coord::WCSY;} | WCSZ_ {$$ = Coord::WCSZ;} ; skyFrame : FK4_ {$$ = Coord::FK4;} | B1950_ {$$ = Coord::FK4;} | FK4_NO_E_ {$$ = Coord::FK4_NO_E;} | FK5_ {$$ = Coord::FK5;} | J2000_ {$$ = Coord::FK5;} | ICRS_ {$$ = Coord::ICRS;} | GALACTIC_ {$$ = Coord::GALACTIC;} | SUPERGALACTIC_ {$$ = Coord::SUPERGALACTIC;} | ECLIPTIC_ {$$ = Coord::ECLIPTIC;} | HELIOECLIPTIC_ {$$ = Coord::HELIOECLIPTIC;} ; shape : coord {fr->createPointCmd(Vector($1), Point::BOXCIRCLE, POINTSIZE, color,dash,1,font,text, Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | Marker::DELETE | Marker::HIGHLITE | Marker::INCLUDE | Marker::SOURCE, "",taglist,cblist); } ; %% saods9/tksao/fitsy++/alloc.C000644 000765 000000 00000001055 12705446163 016200 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "alloc.h" FitsAlloc::FitsAlloc(const char* fn) { parse(fn); if (!valid_) return; // we need the 'b' for windows... if (!strncmp(pName_, "stdin", 5) || !strncmp(pName_, "STDIN", 5) || !strncmp(pName_, "-", 1)) stream_ = fdopen(dup(fileno(stdin)), "rb"); else stream_ = fopen(pName_, "rb"); valid_ = stream_ ? 1 : 0; } saods9/tksao/fitsy++/alloc.h000644 000765 000000 00000002635 12705446163 016252 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsalloc_h__ #define __fitsalloc_h__ #include "strm.h" class FitsAlloc : public virtual FitsStream { public: FitsAlloc(const char*); virtual ~FitsAlloc() {} }; class FitsFitsAlloc : public FitsAlloc, public FitsFitsStream { public: FitsFitsAlloc(const char* fn, ScanMode mode, FlushMode flush) : FitsAlloc(fn), FitsFitsStream(mode, flush) {} }; class FitsFitsNextAlloc : public FitsFitsNextStream { public: FitsFitsNextAlloc(FitsFile* prev) : FitsFitsNextStream(prev) {} }; class FitsArrAlloc : public FitsAlloc, FitsArrStream { public: FitsArrAlloc(const char* fn, FlushMode flush) : FitsAlloc(fn), FitsArrStream(flush) {} }; class FitsNRRDAlloc : public FitsAlloc, FitsNRRDStream { public: FitsNRRDAlloc(const char* fn, FlushMode flush) : FitsAlloc(fn), FitsNRRDStream(flush) {} }; class FitsMosaicAlloc : public FitsAlloc, FitsMosaicStream { public: FitsMosaicAlloc(const char* fn, FlushMode flush) : FitsAlloc(fn), FitsMosaicStream(flush) {} }; class FitsMosaicNextAlloc : public FitsMosaicNextStream { public: FitsMosaicNextAlloc(FitsFile* prev, FlushMode flush) : FitsMosaicNextStream(prev, flush) {} }; #endif saods9/tksao/fitsy++/allocgz.C000644 000765 000000 00000001065 12705446163 016542 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "allocgz.h" FitsAllocGZ::FitsAllocGZ(const char* fn) { parse(fn); if (!valid_) return; // we need the 'b' for windows... if (!strncmp(pName_, "stdin", 5) || !strncmp(pName_, "STDIN", 5) || !strncmp(pName_, "-", 1)) stream_ = gzdopen(dup(STDIN_FILENO), "rb"); else stream_ = gzopen(pName_, "rb"); valid_ = stream_ ? 1 : 0; } saods9/tksao/fitsy++/allocgz.h000644 000765 000000 00000002461 12705446163 016610 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsallocgz_h__ #define __fitsallocgz_h__ #include "strm.h" #include "zlib.h" class FitsAllocGZ : public virtual FitsStream { public: FitsAllocGZ(const char*); virtual ~FitsAllocGZ() {} }; class FitsFitsAllocGZ : public FitsAllocGZ, public FitsFitsStream { public: FitsFitsAllocGZ(const char* fn, ScanMode mode, FlushMode flush) : FitsAllocGZ(fn), FitsFitsStream(mode, flush) {} }; class FitsFitsNextAllocGZ : public FitsFitsNextStream { public: FitsFitsNextAllocGZ(FitsFile* prev) : FitsFitsNextStream(prev) {} }; class FitsArrAllocGZ : public FitsAllocGZ, FitsArrStream { public: FitsArrAllocGZ(const char* fn, FlushMode flush) : FitsAllocGZ(fn), FitsArrStream(flush) {} }; class FitsMosaicAllocGZ : public FitsAllocGZ, FitsMosaicStream { public: FitsMosaicAllocGZ(const char* fn, FlushMode flush) : FitsAllocGZ(fn), FitsMosaicStream(flush) {} }; class FitsMosaicNextAllocGZ : public FitsMosaicNextStream { public: FitsMosaicNextAllocGZ(FitsFile* prev, FlushMode flush) : FitsMosaicNextStream(prev, flush) {} }; #endif saods9/tksao/fitsy++/analysis.C000644 000765 000000 00000002134 12705446163 016730 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "analysis.h" FitsAnalysis::FitsAnalysis(FitsFile* src) { primary_ = src->primary(); managePrimary_ = 0; head_ = new FitsHead(*(src->head())); manageHead_ = 1; ext_ = src->ext(); inherit_ = src->inherit(); // change bitpix to double head_->setInteger("BITPIX", -64, ""); // unset BZERO/BSCALE if present if (head_->find("BZERO")) head_->setReal("BZERO",0,2,NULL); if (head_->find("BSCALE")) head_->setReal("BSCALE",1,2,NULL); head_->updateHDU(); int width = head_->naxis(0); int height = head_->naxis(1); // alloc memory size_t size = (size_t)width*height; data_ = new double[size]; if (!data_) return; dataSize_ = size; dataSkip_ = 0; // clear memory memset(data_, 0, size*sizeof(double)); // made it this far, must be valid byteswap_ = 0; endian_ = lsb() ? LITTLE : BIG; valid_ = 1; } FitsAnalysis::~FitsAnalysis() { if (data_) delete [] (char*)data_; } saods9/tksao/fitsy++/analysis.h000644 000765 000000 00000000532 12705446163 016775 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsanalysis_h__ #define __fitsanalysis_h__ #include "file.h" class FitsAnalysis : public FitsFile { public: FitsAnalysis(FitsFile*); ~FitsAnalysis(); }; #endif saods9/tksao/fitsy++/block.C000644 000765 000000 00000015276 12705446163 016212 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include using namespace std; #include "block.h" FitsBlock::FitsBlock(FitsFile* fits, Vector& block) { FitsHead* srcHead = fits->head(); width_ = srcHead->naxis(0)/block[0]; height_ = srcHead->naxis(1)/block[1]; if (width_<1) width_ = 1; if (height_<1) height_ = 1; size_ = (size_t)width_*height_; primary_ = fits->primary(); ext_ = fits->ext(); inherit_ = fits->inherit(); bitpix_ = srcHead->hdu()->bitpix(); switch (bitpix_) { case -64: if (!(data_ = new double[size_])) return; dataSize_ = size_*sizeof(double); break; default: bitpix_ = -32; if (!(data_ = new float[size_])) return; dataSize_ = size_*sizeof(float); break; } dataSkip_ = 0; memset(data_, 0, dataSize_); initHeader(fits, block); // made it this far, must be valid byteswap_ = 0; endian_ = lsb() ? LITTLE : BIG; valid_ = 1; } FitsBlock::~FitsBlock() { if (data_) delete [] (char*)data_; } void FitsBlock::initHeader(FitsFile* fits, Vector& block) { head_ = new FitsHead(*(fits->head())); // change bitpix switch (bitpix_) { case -64: head_->setInteger("BITPIX", -64, ""); break; default: head_->setInteger("BITPIX", -32, ""); break; } // change width/height head_->setInteger("NAXIS1", width_, ""); head_->setInteger("NAXIS2", height_, ""); // IRAF initLTMV(block); initCCDSUM(block); initKeySEC("BIASSEC",block); initKeySEC("DATASEC",block); initKeySEC("TRIMSEC",block); // WCS initWCS(block); // clear cards if (head_->find("BZERO")) head_->carddel("BZERO"); if (head_->find("BSCALE")) head_->carddel("BSCALE"); if (head_->find("DATASUM")) head_->carddel("DATASUM"); if (head_->find("CHECKSUM")) head_->carddel("CHECKSUM"); if (head_->find("DATAMIN")) head_->carddel("DATAMIN"); if (head_->find("DATAMAX")) head_->carddel("DATAMAX"); if (head_->find("DATAMEAN")) head_->carddel("DATAMEAN"); if (head_->find("GOODMIN")) head_->carddel("GOODMIN"); if (head_->find("GOODMAX")) head_->carddel("GOODMAX"); if (head_->find("IRAF-MIN")) head_->carddel("IRAF-MIN"); if (head_->find("IRAF-MAX")) head_->carddel("IRAF-MAX"); head_->updateHDU(); } void FitsBlock::initCCDSUM(Vector& block) { if (head_->find("CCDSUM")) { char* val = head_->getString("CCDSUM"); float xx,yy; istringstream istr(val); istr >> xx >> yy; xx *= block[0]; yy *= block[1]; ostringstream ostr; ostr << xx << ' ' << yy << ends; head_->setString("CCDSUM", ostr.str().c_str(), ""); } } void FitsBlock::initKeySEC(const char* key, Vector& block) { if (head_->find(key)) { char* sec = head_->getString(key); Vector ll,ur; parseSection(sec,&ll,&ur); Matrix mm = Translate(-1,-1) * Scale(1/block[0],1/block[1]) * Translate(1,1); Vector nll = ll*mm; Vector nur = ur*mm; ostringstream ostr; ostr << '[' << int(nll[0]) << ':' << int(nur[0]) << ',' << int(nll[1]) << ':' << int(nur[1]) << ']' << ends; head_->setString(key, ostr.str().c_str(), ""); } } void FitsBlock::initLTMV(Vector& block) { // always do LTMV double ltv1 = head_->getReal("LTV1", 0); double ltv2 = head_->getReal("LTV2", 0); double ltm11 = head_->getReal("LTM1_1", 1); double ltm12 = head_->getReal("LTM1_2", 0); double ltm21 = head_->getReal("LTM2_1", 0); double ltm22 = head_->getReal("LTM2_2", 1); Matrix mm(ltm11,ltm12,ltm21,ltm22,ltv1,ltv2); Matrix im = mm * Translate(-.5,-.5) * Scale(1./block[0],1./block[1]) * Translate(.5,.5); if (head_->find("LTV1")) head_->setReal("LTV1", im.matrix(2,0), 8, ""); else head_->appendReal("LTV1", im.matrix(2,0), 8, ""); if (head_->find("LTV2")) head_->setReal("LTV2", im.matrix(2,1), 8, ""); else head_->appendReal("LTV2", im.matrix(2,1), 8, ""); if (head_->find("LTM1_1")) head_->setReal("LTM1_1", ltm11/block[0], 8, ""); else head_->appendReal("LTM1_1", ltm11/block[0], 8, ""); if (head_->find("LTM1_2")) head_->setReal("LTM1_2", ltm12, 8, ""); else head_->appendReal("LTM1_2", ltm12, 8, ""); if (head_->find("LTM2_1")) head_->setReal("LTM2_1", ltm21, 8, ""); else head_->appendReal("LTM2_1", ltm21, 8, ""); if (head_->find("LTM2_2")) head_->setReal("LTM2_2", ltm22/block[1], 8, ""); else head_->appendReal("LTM2_2", ltm22/block[1], 8, ""); } void FitsBlock::initWCS(Vector& block) { // check for WCS if (!head_->find("CRPIX1") && !head_->find("CRPIX2")) return; double crpix1 = head_->getReal("CRPIX1", 0); double crpix2 = head_->getReal("CRPIX2", 0); Matrix pp = Matrix(1,0,0,1,crpix1,crpix2) * Translate(-.5,-.5) * Scale(1/block[0],1/block[1]) * Translate(.5,.5); if (head_->find("CRPIX1")) head_->setReal("CRPIX1", pp.matrix(2,0), 8, ""); else head_->appendReal("CRPIX1", pp.matrix(2,0), 8, ""); if (head_->find("CRPIX2")) head_->setReal("CRPIX2", pp.matrix(2,1), 8, ""); else head_->appendReal("CRPIX2", pp.matrix(2,1), 8, ""); // CD if (head_->find("CD1_1") || head_->find("CD1_2") || head_->find("CD2_1") || head_->find("CD2_2")) { double cd11 = head_->getReal("CD1_1", 1); double cd12 = head_->getReal("CD1_2", 0); double cd21 = head_->getReal("CD2_1", 0); double cd22 = head_->getReal("CD2_2", 1); Matrix mm = Matrix(cd11,cd12,cd21,cd22,0,0) * Scale(block[0],block[1]); if (head_->find("CD1_1")) head_->setReal("CD1_1", mm.matrix(0,0), 8, ""); else head_->appendReal("CD1_1", mm.matrix(0,0), 8, ""); if (head_->find("CD1_2")) head_->setReal("CD1_2", mm.matrix(0,1), 8, ""); else head_->appendReal("CD1_2", mm.matrix(0,1), 8, ""); if (head_->find("CD2_1")) head_->setReal("CD2_1", mm.matrix(1,0), 8, ""); else head_->appendReal("CD2_1", mm.matrix(1,0), 8, ""); if (head_->find("CD2_2")) head_->setReal("CD2_2", mm.matrix(1,1), 8, ""); else head_->appendReal("CD2_2", mm.matrix(1,1), 8, ""); } // CDELT else if (head_->find("CDELT1") || head_->find("CDELT2")) { double cdelt1 = head_->getReal("CDELT1", 1); double cdelt2 = head_->getReal("CDELT2", 0); Matrix mm = Matrix(cdelt1,0,0,cdelt2,0,0) * Scale(block[0],block[1]); if (head_->find("CDELT1")) head_->setReal("CDELT1", mm.matrix(0,0), 8, ""); else head_->appendReal("CDELT1", mm.matrix(0,0), 8, ""); if (head_->find("CDELT2")) head_->setReal("CDELT2", mm.matrix(1,1), 8, ""); else head_->appendReal("CDELT2", mm.matrix(1,1), 8, ""); } } saods9/tksao/fitsy++/block.h000644 000765 000000 00000001123 12705446163 016241 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsblock_h__ #define __fitsblock_h__ #include "vector.h" #include "file.h" class FitsBlock : public FitsFile { protected: int width_; int height_; size_t size_; int bitpix_; void initHeader(FitsFile*, Vector&); void initCCDSUM(Vector&); void initKeySEC(const char*, Vector&); void initLTMV(Vector&); void initWCS(Vector&); public: FitsBlock(FitsFile*, Vector&); ~FitsBlock(); }; #endif saods9/tksao/fitsy++/card.C000644 000765 000000 00000012432 12705446163 016020 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "card.h" FitsCard::FitsCard() { card_ = new char[FTY_CARDLEN]; managed = 1; } FitsCard::FitsCard(char* c) { card_ = c; managed = 0; } FitsCard::FitsCard(const FitsCard& a) { card_ = new char[FTY_CARDLEN]; managed = 1; memcpy(card_, a.card_, FTY_CARDLEN); } FitsCard::~FitsCard() { if (managed) delete [] card_; } FitsCard& FitsCard::operator=(const FitsCard& a) { memcpy(card_, a.card_, FTY_CARDLEN); return *this; } FitsCard& FitsCard::clear() { memset(card_, ' ', FTY_CARDLEN); return *this; } FitsCard& FitsCard::setKey(const char* name) { if (name) { memset(card_, ' ', 8); ostringstream str; str << name; memcpy(card_,str.str().c_str(),str.str().length()); } return *this; } FitsCard& FitsCard::setLogical(const char* name, int value, const char* comment) { setKey(name); memset(card_+8, ' ', FTY_CARDLEN-8); ostringstream str; str << "= " << (value ? 'T' : 'F'); if (comment) str << " / " << comment; memcpy(card_+8,str.str().c_str(),str.str().length()); return *this; } FitsCard& FitsCard::setInteger(const char* name, int value, const char* comment) { setKey(name); memset(card_+8, ' ', FTY_CARDLEN-8); ostringstream str; str << "= " << setw(20) << value; if (comment) str << " / " << comment; memcpy(card_+8,str.str().c_str(),str.str().length()); return *this; } FitsCard& FitsCard::setReal(const char* name, double value, int prec, const char* comment) { setKey(name); memset(card_+8, ' ', FTY_CARDLEN-8); ostringstream str; str << "= " << setw(20) << setprecision(prec) << value; if (comment) str << " / " << comment; memcpy(card_+8,str.str().c_str(),str.str().length()); return *this; } FitsCard& FitsCard::setComplex(const char* name, double real, double img, int prec, const char* comment) { setKey(name); memset(card_+8, ' ', FTY_CARDLEN-8); ostringstream str; str << "= " << setw(20) << setprecision(prec) << real << img; if (comment) str << " / " << comment; memcpy(card_+8,str.str().c_str(),str.str().length()); return *this; } FitsCard& FitsCard::setString(const char* name, const char* value, const char* comment) { setKey(name); memset(card_+8, ' ', FTY_CARDLEN-8); ostringstream str; str << "= '" << value << '\''; if (comment) str << " / " << comment; memcpy(card_+8,str.str().c_str(),str.str().length()); return *this; } FitsCard& FitsCard::setComment(const char* name, const char* value) { setKey(name); memset(card_+8, ' ', FTY_CARDLEN-8); ostringstream str; str << "= " << value; memcpy(card_+8,str.str().c_str(),str.str().length()); return *this; } int FitsCard::getLogical() { for (int i=10; i<80; i++) if (card_[i] != ' ') return (card_[i] == 'T' || card_[i] == 't'); return 0; } int FitsCard::getInteger() { string x(card_+10,FTY_CARDLEN-10); istringstream str(x); int r; str >> r; return r; } double FitsCard::getReal() { // support 'D' as well as 'E' format char buf[FTY_CARDLEN-10+1]; memcpy(buf, card_+10, FTY_CARDLEN-10); buf[FTY_CARDLEN-10] = '\0'; char* ptr = buf; while (*ptr && *ptr != '/') { if (*ptr == 'D' || *ptr == 'E') { *ptr = 'E'; break; } ptr++; } string x(buf,FTY_CARDLEN-10); istringstream str(x); double r; str >> r; return r; } void FitsCard::getComplex(double* r, double* i) { // support 'D' as well as 'E' format char buf[FTY_CARDLEN-10+1]; memcpy(buf, card_+10, FTY_CARDLEN-10); buf[FTY_CARDLEN-10] = '\0'; char* ptr = buf; while (*ptr && *ptr != '/') { if (*ptr == 'D' || *ptr == 'E') { *ptr = 'E'; } ptr++; } string x(buf,FTY_CARDLEN-10); istringstream str(x); str >> *r >> *i; } char* FitsCard::getString() { char value[FTY_CARDLEN]; value[0] = '\0'; value[FTY_CARDLEN-1] = '\0'; int i,j; // find first ' for (i=10; i #include #include #include using namespace std; class FitsCard { private: char* card_; int managed; public: FitsCard(); FitsCard(char*); FitsCard(const FitsCard&); ~FitsCard(); FitsCard& operator=(const FitsCard&); char* card() {return card_;} FitsCard& clear(); FitsCard& setKey(const char *name); FitsCard& setLogical(const char* name, int value, const char* comment); FitsCard& setLogical(int value, const char *comment) {return setLogical(NULL, value, comment);} FitsCard& setInteger(const char* name, int value, const char *comment); FitsCard& setInteger(int value, const char *comment) {return setInteger(NULL, value, comment);} FitsCard& setReal(const char* name, double value, int prec, const char *comment); FitsCard& setReal(double value, int prec, const char *comment) {return setReal(NULL, value, prec, comment);} FitsCard& setComplex(const char* name, double real, double img, int prec, const char *comment); FitsCard& setComplex(double real, double img, int prec, const char *comment) {return setComplex(NULL, real, img, prec, comment);} FitsCard& setString(const char* name, const char *value, const char *comm); FitsCard& setString(const char *value, const char *comment) {return setString(NULL, value, comment);} FitsCard& setComment(const char* name, const char* value); FitsCard& setComment(const char *value) {return setComment(NULL, value);} int getLogical(); int getInteger(); double getReal(); void getComplex(double*, double*); char* getString(); char* getComment(); char* getAsString(); }; #endif saods9/tksao/fitsy++/channel.C000644 000765 000000 00000000664 12705446163 016523 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "channel.h" FitsChannel::FitsChannel(Tcl_Interp* interp, const char* ch, const char* ext) { parse(ext); if (!valid_) return; int tclMode; stream_ = Tcl_GetChannel(interp, (char*)ch, &tclMode); valid_ = stream_ ? 1 : 0; } saods9/tksao/fitsy++/channel.h000644 000765 000000 00000003337 12705446163 016570 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitschannel_h__ #define __fitschannel_h__ #include "strm.h" class FitsChannel : public virtual FitsStream { public: FitsChannel(Tcl_Interp*, const char*, const char*); }; class FitsFitsChannel : public FitsChannel, public FitsFitsStream{ public: FitsFitsChannel(Tcl_Interp* interp, const char* ch, const char* ext, ScanMode mode, FlushMode flush) : FitsChannel(interp, ch, ext), FitsFitsStream(mode, flush) {} }; class FitsFitsNextChannel : public FitsFitsNextStream { public: FitsFitsNextChannel(FitsFile* prev) : FitsFitsNextStream(prev) {} }; class FitsArrChannel : public FitsChannel, FitsArrStream { public: FitsArrChannel(Tcl_Interp* interp, const char* ch, const char* ext, FlushMode flush) : FitsChannel(interp, ch, ext), FitsArrStream(flush) {} }; class FitsNRRDChannel : public FitsChannel, FitsNRRDStream { public: FitsNRRDChannel(Tcl_Interp* interp, const char* ch, const char* ext, FlushMode flush) : FitsChannel(interp, ch, ext), FitsNRRDStream(flush) {} }; class FitsMosaicChannel : public FitsChannel, FitsMosaicStream { public: FitsMosaicChannel(Tcl_Interp* interp, const char* ch, FlushMode flush) : FitsChannel(interp, ch, ""), FitsMosaicStream(flush) {} }; class FitsMosaicNextChannel : public FitsMosaicNextStream { public: FitsMosaicNextChannel(FitsFile* prev, FlushMode flush) : FitsMosaicNextStream(prev, flush) {} }; #endif saods9/tksao/fitsy++/column.C000644 000765 000000 00000030317 12764622777 016422 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include #include #include #include #include #include using namespace std; #include "column.h" #include "file.h" #include "head.h" FitsColumn::FitsColumn(FitsHead* head, int i, int off) { index_ = i; width_ = 0; offset_ = off; type_ = ' '; tform_ = head->getString(keycat("TFORM",i)); ttype_ = head->getString(keycat("TTYPE",i)); tunit_ = head->getString(keycat("TUNIT",i)); tscal_ = head->getReal(keycat("TSCAL",i), 1); tzero_ = head->getReal(keycat("TZERO",i), 0); hastnull_ = head->find(keycat("TNULL",i)) ? 1:0; tnull_ = head->getInteger(keycat("TNULL",i), 0); char* td = head->find(keycat("TDMAX",i)); char* tl = head->find(keycat("TLMAX",i)); char* ta = head->find(keycat("TALEN",i)); char* ax = head->find(keycat("AXLEN",i)); // this provides backward compatibility if (td) { hastlmin_ = head->find(keycat("TDMIN",i)) ? 1:0; hastlmax_ = 1; tlmin_ = head->getReal(keycat("TDMIN",i), 0); tlmax_ = head->getReal(keycat("TDMAX",i), 0); } else if (tl) { hastlmin_ = head->find(keycat("TLMIN",i)) ? 1:0; hastlmax_ = 1; tlmin_ = head->getReal(keycat("TLMIN",i), 0); tlmax_ = head->getReal(keycat("TLMAX",i), 0); } else if (ta) { hastlmin_ = 0; hastlmax_ = 1; tlmin_ = 1; tlmax_ = head->getReal(keycat("TALEN",i), 0); } else if (ax) { hastlmin_ = 0; hastlmax_ = 1; tlmin_ = 1; tlmax_ = head->getReal(keycat("AXLEN",i), 0); } else { hastlmin_ = 0; hastlmax_ = 0; tlmin_ = 0; tlmax_ = 0; } // now, make sure they are valid if (tlmin_>tlmax_) { hastlmin_ = 0; hastlmax_ = 0; tlmin_ = 0; tlmax_ = 0; } // use tlmin/tlmax if available if (hastlmin_ || hastlmax_) { min_ = tlmin_; max_ = tlmax_; } else { min_ = -DBL_MAX; max_ = DBL_MAX; } } FitsColumn::~FitsColumn() { if (tform_) delete [] tform_; if (tunit_) delete [] tunit_; if (ttype_) delete [] ttype_; } char* FitsColumn::keycat(const char* name, int i) { ostringstream str; str << name << i << ends; memcpy(keybuf,str.str().c_str(),str.str().length()); return keybuf; } // FitsAsciiColumn FitsAsciiColumn::FitsAsciiColumn(FitsHead* head, int i, int offset) : FitsColumn(head, i, offset) { int tbcol = head->getInteger(keycat("TBCOL",i),0); if (tbcol) offset_ = tbcol-1; } char* FitsAsciiColumn::str(const char* ptr, int i) { strncpy(buf_, ptr+offset_, width_); buf_[width_] = '\0'; return buf_; } FitsAsciiColumnStr::FitsAsciiColumnStr(FitsHead* head, int i, int offset) : FitsAsciiColumn(head, i, offset) { if (tform_) { string x(tform_); istringstream str(x); str >> type_ >> width_; } } FitsAsciiColumnA::FitsAsciiColumnA(FitsHead* head, int i, int offset) : FitsAsciiColumn(head, i, offset) { prec_ = 0; if (tform_) { char s; string x(tform_); istringstream str(x); str >> type_ >> width_ >> s >> prec_; } } double FitsAsciiColumnA::value(const char* ptr, int i) { string x(ptr+offset_); istringstream str(x); double r; str >> r; return r; } template FitsAsciiColumnT::FitsAsciiColumnT(FitsHead* head, int i, int off) : FitsAsciiColumnA(head, i, off) {} template <> Vector FitsAsciiColumnT::dimension() { return (hastlmin_ || hastlmax_) ? Vector(tlmin_,tlmax_) : Vector(INT_MIN,INT_MAX); } template <> Vector FitsAsciiColumnT::dimension() { return (hastlmin_ || hastlmax_) ? Vector(tlmin_,tlmax_) : Vector(-FLT_MAX,FLT_MAX); } template <> Vector FitsAsciiColumnT::dimension() { return (hastlmin_ || hastlmax_) ? Vector(tlmin_,tlmax_) : Vector(-DBL_MAX,DBL_MAX); } // FitsBinColumn FitsBinColumn::FitsBinColumn(FitsHead* head, int i, int offset) : FitsColumn(head, i, offset) { tdisp_ = head->getString(keycat("TDISP",i)); repeat_ = 1; if (tform_) { string x(tform_); istringstream str(x); if (isalpha(tform_[0])) str >> type_; else str >> repeat_ >> type_; } } FitsBinColumn::~FitsBinColumn() { if (tdisp_) delete [] tdisp_; } // FitsBinColumnStr FitsBinColumnStr::FitsBinColumnStr(FitsHead* head, int i, int offset) : FitsBinColumn(head, i, offset) { width_ = repeat_; } char* FitsBinColumnStr::str(const char* ptr, int i) { strncpy(buf_, ptr+offset_, width_); buf_[width_] = '\0'; return buf_; } // FitsBinColumnLogical FitsBinColumnLogical::FitsBinColumnLogical(FitsHead* head, int i, int offset) : FitsBinColumn(head, i, offset) { width_ = repeat_; } char* FitsBinColumnLogical::str(const char* ptr, int i) { strncpy(buf_, ptr+offset_+i, 1); buf_[width_] = '\0'; return buf_; } // FitsBinColumnArray FitsBinColumnArray::FitsBinColumnArray(FitsHead* head, int i, int offset) : FitsBinColumn(head, i, offset) { ptype_ = ' '; psize_ = 1; pmax_ = 1; abuf_ = NULL; byteswap_ = lsb(); if (tform_) { int rr; char tt; string x(tform_); istringstream str(x); if (isalpha(tform_[0])) str >> tt; else str >> rr >> tt; char s; str >> ptype_ >> s >> pmax_ >> s; switch (ptype_) { case 'L': psize_ = 1; break; case 'X': psize_ = 1; break; case 'B': psize_ = 1; break; case 'I': psize_ = 2; break; case 'J': psize_ = 4; break; case 'K': psize_ = 8; break; case 'A': psize_ = 1; break; case 'E': psize_ = 4; break; case 'D': psize_ = 8; break; case 'C': psize_ = 8; break; case 'M': psize_ = 16; break; default: internalError("Fitsy++ column unknown table column type."); return; } // sanity check pmax_ *= psize_; if (pmax_ > 0) abuf_ = new char[pmax_]; } } FitsBinColumnArray::~FitsBinColumnArray() { if (abuf_) delete [] abuf_; } void* FitsBinColumnArray::get(const char* heap, const char* ptr, int* cnt) { *cnt = swap(ptr,0); if (*cnt > pmax_) { // just in case internalError("Fitsy++ column variable array size greater than specified"); *cnt = pmax_; } size_t pp = swap(ptr,1); if (abuf_) { memset(abuf_,pmax_,0); memcpy(abuf_,heap+pp,(*cnt)*psize_); } return abuf_; } FitsBinColumnArrayP::FitsBinColumnArrayP(FitsHead* head, int i, int offset) : FitsBinColumnArray(head, i, offset) { width_ = 8; } int FitsBinColumnArrayP::swap(const char* ptr, int i) { const char* p = ptr+offset_+i*4; union { char c[4]; int i; } u; if (byteswap_) { u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; } else memcpy(u.c,p,4); return u.i; } FitsBinColumnArrayQ::FitsBinColumnArrayQ(FitsHead* head, int i, int offset) : FitsBinColumnArray(head, i, offset) { width_ = 16; } int FitsBinColumnArrayQ::swap(const char* ptr, int i) { const char* p = ptr+offset_+i*8; union { char c[8]; long l; } u; if (byteswap_) { u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; } else memcpy(u.c,p,8); return u.l; } // FitsbinColumnBit FitsBinColumnBit::FitsBinColumnBit(FitsHead* head, int i, int off) : FitsBinColumn(head, i, off) { width_ = (repeat_+7)/8; } // FitsBinColumnB FitsBinColumnB::FitsBinColumnB(FitsHead* head, int i, int offset) : FitsBinColumn(head, i, offset) { byteswap_ = lsb(); } // FitsBinColumnT template FitsBinColumnT::FitsBinColumnT(FitsHead* head, int i, int off) : FitsBinColumnB(head, i, off) { width_ = repeat_ * sizeof(T); } template <> double FitsBinColumnT::value(const char* ptr, int i) { return (unsigned char)(*(ptr+offset_+i)); } template <> double FitsBinColumnT::value(const char* ptr, int i) { const char* p = ptr+offset_+i*2; union { char c[2]; short s; } u; if (byteswap_) { u.c[1] = *p++; u.c[0] = *p; } else { u.c[0] = *p++; u.c[1] = *p; } return u.s; } template <> double FitsBinColumnT::value(const char* ptr, int i) { const char* p = ptr+offset_+i*2; union { char c[2]; unsigned short s; } u; if (byteswap_) { u.c[1] = *p++; u.c[0] = *p; } else { u.c[0] = *p++; u.c[1] = *p; } return u.s; } template <> double FitsBinColumnT::value(const char* ptr, int i) { const char* p = ptr+offset_+i*4; union { char c[4]; int i; } u; if (byteswap_) { u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; } else memcpy(u.c,p,4); return u.i; } template <> double FitsBinColumnT::value(const char* ptr, int i) { const char* p = ptr+offset_+i*4; union { char c[4]; unsigned int i; } u; if (byteswap_) { u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; } else memcpy(u.c,p,4); return u.i; } template <> double FitsBinColumnT::value(const char* ptr, int i) { const char* p = ptr+offset_+i*8; union { char c[8]; long long i; } u; if (byteswap_) { u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; } else memcpy(u.c,p,8); return u.i; } template <> double FitsBinColumnT::value(const char* ptr, int i) { const char* p = ptr+offset_+i*4; union { char c[4]; float f; } u; if (byteswap_) { u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; } else memcpy(u.c,p,4); return u.f; } template <> double FitsBinColumnT::value(const char* ptr, int i) { const char* p = ptr+offset_+i*8; union { char c[8]; double d; } u; if (byteswap_) { u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; } else memcpy(u.c,p,8); return u.d; } template char* FitsBinColumnT::str(const char* ptr, int i) { ostringstream ost; ost << value(ptr,i) << ends; return (char*)dupstr(ost.str().c_str()); } template <> Vector FitsBinColumnT::dimension() { return (hastlmin_ || hastlmax_) ? Vector(tlmin_-.5,tlmax_+.5) : Vector(0,UCHAR_MAX); } template <> Vector FitsBinColumnT::dimension() { return (hastlmin_ || hastlmax_) ? Vector(tlmin_-.5,tlmax_+.5) : Vector(SHRT_MIN,SHRT_MAX); } template <> Vector FitsBinColumnT::dimension() { return (hastlmin_ || hastlmax_) ? Vector(tlmin_-.5,tlmax_+.5) : Vector(0,USHRT_MAX); } template <> Vector FitsBinColumnT::dimension() { return (hastlmin_ || hastlmax_) ? Vector(tlmin_-.5,tlmax_+.5) : Vector(INT_MIN,INT_MAX); } template <> Vector FitsBinColumnT::dimension() { return (hastlmin_ || hastlmax_) ? Vector(tlmin_-.5,tlmax_+.5) : Vector(0,UINT_MAX); } // some older versions of gcc do not have LLONG #ifndef LLONG_MIN # ifdef LONG_LONG_MIN # define LLONG_MIN LONG_LONG_MIN # else # define LLONG_MIN LONG_MIN # endif #endif #ifndef LLONG_MAX # ifdef LONG_LONG_MAX # define LLONG_MAX LONG_LONG_MAX # else # define LLONG_MAX LONG_MAX # endif #endif template <> Vector FitsBinColumnT::dimension() { return (hastlmin_ || hastlmax_) ? Vector(tlmin_-.5,tlmax_+.5) : Vector(LLONG_MIN,LLONG_MAX); } template <> Vector FitsBinColumnT::dimension() { return (hastlmin_ || hastlmax_) ? Vector(tlmin_,tlmax_) : Vector(-FLT_MAX,FLT_MAX); } template <> Vector FitsBinColumnT::dimension() { return (hastlmin_ || hastlmax_) ? Vector(tlmin_,tlmax_) : Vector(-DBL_MAX,DBL_MAX); } template class FitsAsciiColumnT; template class FitsAsciiColumnT; template class FitsAsciiColumnT; template class FitsBinColumnT; template class FitsBinColumnT; template class FitsBinColumnT; template class FitsBinColumnT; template class FitsBinColumnT; template class FitsBinColumnT; template class FitsBinColumnT; template class FitsBinColumnT; saods9/tksao/fitsy++/column.h000644 000765 000000 00000010014 12705446163 016443 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitscolumn_h__ #define __fitscolumn_h__ #include "vector.h" class FitsHead; class FitsColumn { protected: int index_; // col number 1 to n int width_; // overall width of field in chars int offset_; // offset in chars from start of row char type_; // type char* tform_; char* ttype_; char* tunit_; float tscal_; float tzero_; int tnull_; int hastnull_; float tlmin_; float tlmax_; int hastlmin_; int hastlmax_; double min_; double max_; int validmm_; char buf_[128]; char keybuf[9]; char* keycat(const char*, int); public: FitsColumn(FitsHead*, int, int); virtual ~FitsColumn(); int width() {return width_;} int offset() {return offset_;} int index() {return index_;} const char* tform() {return tform_;} const char* ttype() {return ttype_;} const char* tunit() {return tunit_;} float tscal() {return tscal_;} float tzero() {return tzero_;} int tnull() {return tnull_;} float tlmin() {return tlmin_;} float tlmax() {return tlmax_;} int hasscaling() {return tscal_ != 1 || tzero_ != 0;} int hastnull() {return hastnull_;} virtual double value(const char* ptr, int i =0) {return 0;} virtual char* str(const char* ptr, int i =0) {return NULL;} virtual Vector dimension() {return Vector();} virtual int repeat() {return 1;} void setMin(double m) {min_=m;} void setMax(double m) {max_=m;} double getMin() {return min_;} double getMax() {return max_;} int hasMinMax() {return min_ != -DBL_MAX ? 1 : 0;} int hasTLMinTLMax() {return hastlmin_ && hastlmax_;} }; // FitsAsciiColumn class FitsAsciiColumn : public FitsColumn { public: FitsAsciiColumn(FitsHead*, int, int); char* str(const char* ptr, int i =0); }; class FitsAsciiColumnStr : public FitsAsciiColumn { public: FitsAsciiColumnStr(FitsHead*, int, int); }; class FitsAsciiColumnA : public FitsAsciiColumn { private: int prec_; public: FitsAsciiColumnA(FitsHead*, int, int); double value(const char*, int i =0); }; template class FitsAsciiColumnT : public FitsAsciiColumnA { public: FitsAsciiColumnT(FitsHead*, int, int); Vector dimension(); }; // FitsBinColumn class FitsBinColumn : public FitsColumn { protected: char* tdisp_; int repeat_; // repeat count public: FitsBinColumn(FitsHead*, int, int); ~FitsBinColumn(); int repeat() {return repeat_;} }; class FitsBinColumnStr : public FitsBinColumn { public: FitsBinColumnStr(FitsHead*, int, int); char* str(const char* ptr, int i =0); }; class FitsBinColumnLogical : public FitsBinColumn { public: FitsBinColumnLogical(FitsHead*, int, int); double value(const char* ptr, int i =0) {return (*(ptr+offset_+i) == 'T') ? 1 : 0;} char* str(const char* ptr, int i =0); }; class FitsBinColumnArray : public FitsBinColumn { protected: int byteswap_; char ptype_; int psize_; int pmax_; char* abuf_; virtual int swap(const char* ptr, int i =0) =0; public: FitsBinColumnArray(FitsHead*, int, int); virtual ~FitsBinColumnArray(); virtual void* get(const char* heap, const char* ptr, int* cnt); }; class FitsBinColumnArrayP : public FitsBinColumnArray { protected: int swap(const char* ptr, int i =0); public: FitsBinColumnArrayP(FitsHead*, int, int); }; class FitsBinColumnArrayQ : public FitsBinColumnArray { protected: int swap(const char* ptr, int i =0); public: FitsBinColumnArrayQ(FitsHead*, int, int); }; class FitsBinColumnBit : public FitsBinColumn { public: FitsBinColumnBit(FitsHead*, int, int); }; class FitsBinColumnB : public FitsBinColumn { protected: int byteswap_; public: FitsBinColumnB(FitsHead*, int, int); }; template class FitsBinColumnT : public FitsBinColumnB { private: T swap(T*); public: FitsBinColumnT(FitsHead*, int, int); double value(const char*, int i =0); char* str(const char* ptr, int i =0); Vector dimension(); }; #endif saods9/tksao/fitsy++/compress.C000644 000765 000000 00000046334 12705446163 016752 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "compress.h" #include "head.h" #include "zlib.h" #include "util.h" FitsCompress::FitsCompress(FitsFile* fits) { bitpix_ = fits->getInteger("ZBITPIX",0); type_ = fits->getString("ZCMPTYPE"); // int naxes = fits->getInteger("ZNAXIS",0); width_ = fits->getInteger("ZNAXIS1",0); height_ = fits->getInteger("ZNAXIS2",0); depth_ = fits->getInteger("ZNAXIS3",1); ww_ = fits->getInteger("ZTILE1",width_); hh_ = fits->getInteger("ZTILE2",1); dd_ = fits->getInteger("ZTILE3",1); bscale_ = fits->getReal("ZSCALE",1); bzero_ = fits->getReal("ZZERO",0); blank_ = fits->getInteger("ZBLANK",0); zmaskcmp_ = fits->getString("ZMASKCMP"); quantize_ = NODITHER; char keyword[] = "ZQUANTIZ"; if (fits->find(keyword)) { char* which = fits->getString(keyword); if (!strncmp(which,"NONE",4)) quantize_ = NODITHER; else if (!strncmp(which,"SUBTRACTIVE_DITHER_1",20)) quantize_ = SUBDITHER1; else if (!strncmp(which,"SUBTRACTIVE_DITHER_2",20)) quantize_ = SUBDITHER2; delete [] which; } quantOffset_ = fits->getInteger("ZDITHER0",1); tilesize_ = (size_t)ww_*hh_*dd_; size_ = (size_t)width_*height_*depth_; FitsHead* srcHead = fits->head(); FitsTableHDU* srcHDU = (FitsTableHDU*)(srcHead->hdu()); uncompress_ = srcHDU->find("UNCOMPRESSED_DATA"); gzcompress_ = srcHDU->find("GZIP_COMPRESSED_DATA"); compress_ = srcHDU->find("COMPRESSED_DATA"); zscale_ = srcHDU->find("ZSCALE"); zzero_ = srcHDU->find("ZZERO"); zblank_ = srcHDU->find("ZBLANK"); null_ = srcHDU->find("NULL_PIXEL_MASK"); hasScaling_ = (zscale_ && zzero_) || (fits->find("ZSCALE") && fits->find("ZZERO")) ? 1 : 0; hasBlank_ = zblank_ || fits->find("ZBLANK") ? 1 : 0; // Random seq double aa =16807; double mm =2147483647; double seed =1; numRandom_ =10000; random_ = new float[numRandom_]; for (int ii=0; iihead(); // FitsTableHDU* srcHDU = (FitsTableHDU*)(srcHead->hdu()); if (srcHead->find("ZTENSION")) { char* str = srcHead->getString("ZTENSION"); head_ = new FitsHead(width_, height_, depth_, bitpix_, str); delete [] str; } else head_ = new FitsHead(width_, height_, depth_, bitpix_); if (!head_->isValid()) return 0; char* ptr = srcHead->cards(); for (int ii=0; iincard(); ii++, ptr+=80) { char key[9]; key[8] = '\0'; memcpy(key,ptr,8); if (!strncmp(key,"ZIMAGE",6) || !strncmp(key,"ZCMPTYPE",8) || !strncmp(key,"ZBITPIX",7) || !strncmp(key,"ZNAXIS",6) || !strncmp(key,"ZTILE",5) || !strncmp(key,"ZNAME",5) || !strncmp(key,"ZVAL",4) || !strncmp(key,"ZMASKCMP",8) || !strncmp(key,"ZSIMPLE",7) || !strncmp(key,"ZTENSION",8) || !strncmp(key,"ZEXTEND",7) || !strncmp(key,"SIMPLE",6) || !strncmp(key,"BITPIX",6) || !strncmp(key,"NAXIS",5) || !strncmp(key,"END",3) || !strncmp(key,"XTENSION",8) || !strncmp(key,"PCOUNT",6) || !strncmp(key,"GCOUNT",6) || !strncmp(key,"EXTEND",6) || !strncmp(key,"CHECKSUM",8) || !strncmp(key,"DATASUM",7) || !strncmp(key,"TFIELDS",7) || !strncmp(key,"TBCOL",5) || !strncmp(key,"TFORM",5) || !strncmp(key,"TSCAL",5) || !strncmp(key,"TZERO",5) || !strncmp(key,"TNULL",5) || !strncmp(key,"TTYPE",5) || !strncmp(key,"TUNIT",5) || !strncmp(key,"TDISP",5) || !strncmp(key,"THEAP",5) || !strncmp(key,"TDIM",4)) continue; // eat this one if (!strncmp(key,"EXTNAME",7)) { FitsCard cc(ptr); char* str = cc.getString(); if (str) { if (!strncmp(str,"COMPRESSED_IMAGE",8)) { delete [] str; continue; } delete [] str; } } // substitute these if (!strncmp(key,"ZBLOCK",6)) { FitsCard cc(ptr); head_->appendInteger("BLOCK",cc.getInteger(),NULL); continue; } if (!strncmp(key,"ZPCOUNT",7)) { FitsCard cc(ptr); head_->appendInteger("PCOUNT",cc.getInteger(),NULL); continue; } if (!strncmp(key,"ZGCOUNT",7)) { FitsCard cc(ptr); head_->appendInteger("GCOUNT",cc.getInteger(),NULL); continue; } if (!strncmp(key,"ZHECKSUM",8)) { FitsCard cc(ptr); char* str = cc.getString(); if (str) { head_->appendString("CHECKSUM",str,NULL); delete [] str; continue; } } if (!strncmp(key,"ZDATASUM",8)) { FitsCard cc(ptr); char* str = cc.getString(); if (str) { head_->appendString("DATASUM",str,NULL); delete [] str; continue; } } // pass these unaltered head_->cardins(ptr,NULL); } // we added cards head_->updateHDU(); // other primary_ = fits->primary(); managePrimary_ = 0; inherit_ = head_->inherit(); return 1; } void FitsCompress::initRandom(int row) { row++; int rrow = row + quantOffset_-1; randSeed_ = (int)((rrow-1) % numRandom_); randNext_ = (int)(random_[randSeed_]*500); } double FitsCompress::unquantize(double val, double zs, double zz) { double rr = (val-random_[randNext_]+.5)*zs + zz; randNext_++; if (randNext_ == numRandom_) { randSeed_++; if (randSeed_ == numRandom_) randSeed_ = 0; randNext_ = (int)(random_[randSeed_]*500); } return rr; } #define ZERO_VALUE -2147483646 /* value used to represent zero-valued pixels */ double FitsCompress::unquantizeZero(double val, double zs, double zz) { double rr = (val == ZERO_VALUE) ? 0 : (val-random_[randNext_]+.5)*zs + zz; randNext_++; if (randNext_ == numRandom_) { randSeed_++; if (randSeed_ == numRandom_) randSeed_ = 0; randNext_ = (int)(random_[randSeed_]*500); } return rr; } template FitsCompressm::FitsCompressm(FitsFile* fits) : FitsCompress(fits) {} template void FitsCompressm::uncompress(FitsFile* fits) { if (!initHeader(fits)) return; if (!inflate(fits)) return; swapBytes(); // all done valid_ = 1; } template int FitsCompressm::inflate(FitsFile* fits) { FitsHead* srcHead = fits->head(); FitsTableHDU* srcHDU = (FitsTableHDU*)(srcHead->hdu()); if (null_) { internalError("Fitsy++ does not support NULL_PIXEL_MASK at this time."); return 0; } T* dest = new T[size_]; if (!dest) { internalError("Fitsy++ compress unable to allocate memory"); return 0; } // init image memset(dest, 0, size_*sizeof(T)); // src char* sdata = (char*)fits->data(); char* sptr = sdata; int heap = srcHDU->realbytes(); int rowlen = srcHDU->width(); int rows = srcHDU->rows(); // dest int iistart =0; int iistop =ww_; if (iistop > width_) iistop = width_; int jjstart =0; int jjstop =hh_; if (jjstop > height_) jjstop = height_; int kkstart =0; int kkstop =dd_; if (kkstop > depth_) kkstop = depth_; for (int rr=0; rrpage(sptr, rowlen); int ok=0; if (gzcompress_ && !ok) { if (gzcompressed(dest, sptr, sdata+heap, kkstart, kkstop, jjstart, jjstop, iistart, iistop)) { if (DebugCompress) cerr << 'z'; ok=1; } } if (compress_ && !ok) { initRandom(rr); if (compressed(dest, sptr, sdata+heap, kkstart, kkstop, jjstart, jjstop, iistart, iistop)) { if (DebugCompress) cerr << 'c'; ok=1; } } if (uncompress_ && !ok) { if (uncompressed(dest, sptr, sdata+heap, kkstart, kkstop, jjstart, jjstop, iistart, iistop)) { if (DebugCompress) cerr << 'u'; ok=1; } } if (!ok) return 0; // tiles may not be an even multiple of the image size iistart += ww_; iistop += ww_; if (iistop > width_) iistop = width_; if (iistart >= width_) { iistart = 0; iistop = ww_; if (iistop > width_) iistop = width_; jjstart += hh_; jjstop += hh_; if (jjstop > height_) jjstop = height_; if (jjstart >= height_) { jjstart = 0; jjstop = hh_; if (jjstop > height_) jjstop = height_; kkstart += dd_; kkstop += dd_; // we only do up to 3 dimensions if (kkstart >= depth_) break; } } } // we can't use incr paging due to the location of the heap // fits->resetpage(); data_ = dest; dataSize_ = size_; dataSkip_ = 0; return 1; } // uncompressed template int FitsCompressm::uncompressed(T* dest, char* sptr, char* heap, int kkstart, int kkstop, int jjstart, int jjstop, int iistart, int iistop) { int ocnt=0; T* obuf = (T*)(((FitsBinColumnArray*)uncompress_)->get(heap, sptr, &ocnt)); // obuf can be NULL if (!obuf || !ocnt) return 0; int ll=0; for (int kk=kkstart; kk int FitsCompressm::gzcompressed(T* dest, char* sptr, char* heap, int kkstart, int kkstop, int jjstart, int jjstop, int iistart, int iistop) { int icnt=0; unsigned char* ibuf = (unsigned char*)((FitsBinColumnArray*)gzcompress_)->get(heap, sptr, &icnt); // ibuf can be NULL if (!ibuf || !icnt) return 0; int ocnt = tilesize_; char obuf[ocnt*sizeof(T)]; z_stream zstrm; zstrm.next_in = NULL; zstrm.avail_in = 0; zstrm.zalloc = NULL; zstrm.zfree = NULL; zstrm.opaque = NULL; // look for both zlib and gzcompressed headers if (inflateInit2(&zstrm, MAX_WBITS+32) != Z_OK) { internalError("Fitsy++ gzcompressed inflateInit error"); return 0; } zstrm.avail_in = icnt; zstrm.next_in = ibuf; zstrm.avail_out = ocnt*sizeof(T); zstrm.next_out = (Bytef*)obuf; if (DebugCompress) cerr << " inflate START: avail_in " << zstrm.avail_in << " avail_out " << zstrm.avail_out << " total_in " << zstrm.total_in << " total_out " << zstrm.total_out << endl; int result = ::inflate(&zstrm, Z_FINISH); switch (result) { case Z_OK: if (DebugCompress) cerr << " inflate OK: avail_in " << zstrm.avail_in << " avail_out " << zstrm.avail_out << " total_in " << zstrm.total_in << " total_out " << zstrm.total_out << endl; break; case Z_STREAM_END: if (DebugCompress) cerr << " inflate STREAM_END: avail_in " << zstrm.avail_in << " avail_out " << zstrm.avail_out << " total_in " << zstrm.total_in << " total_out " << zstrm.total_out << endl; break; case Z_BUF_ERROR: if (DebugCompress) cerr << " inflate BUF_ERROR: avail_in " << zstrm.avail_in << " avail_out " << zstrm.avail_out << endl; return 0; default: internalError("Fitsy++ gzcompressed inflate error"); return 0; } inflateEnd(&zstrm); int ll=0; for (int kk=kkstart; kk void FitsCompressm::swapBytes() { if (byteswap_) { T* dest = (T*)data_; for (size_t ii=0; ii unsigned char FitsCompressm::swap(unsigned char* ptr) { return *ptr; } template <> short FitsCompressm::swap(short* ptr) { const char* p = (const char*)ptr; union { char c[2]; short s; } u; u.c[1] = *p++; u.c[0] = *p; return u.s; } template <> unsigned short FitsCompressm::swap(unsigned short* ptr) { const char* p = (const char*)ptr; union { char c[2]; unsigned short s; } u; u.c[1] = *p++; u.c[0] = *p; return u.s; } template <> int FitsCompressm::swap(int* ptr) { const char* p = (const char*)ptr; union { char c[4]; int i; } u; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; return u.i; } template <> long long FitsCompressm::swap(long long* ptr) { const char* p = (const char*)ptr; union { char c[8]; long long i; } u; u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; return u.i; } template <> float FitsCompressm::swap(float* ptr) { const char* p = (const char*)ptr; union { char c[4]; float f; } u; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; return u.f; } template <> double FitsCompressm::swap(double* ptr) { const char* p = (const char*)ptr; union { char c[8]; double d; } u; u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; return u.d; } // getValue char template T FitsCompressm::getValue(char* ptr, double zs, double zz, int blank) { return hasScaling_ ? T((*ptr)*zs + zz) : *ptr; } template <> float FitsCompressm::getValue(char* ptr, double zs, double zz, int blank) { if (!hasBlank_ && !hasScaling_ && quantize_ != SUBDITHER1 && quantize_ != SUBDITHER2) return *ptr; if (hasBlank_ && *ptr == blank) return NAN; switch (quantize_) { case NODITHER: return hasScaling_ ? (*ptr)*zs + zz : *ptr; case SUBDITHER1: case SUBDITHER2: return unquantize(*ptr,zs,zz); } // so compiler will not complain return hasScaling_ ? (*ptr)*zs + zz : *ptr; } template <> double FitsCompressm::getValue(char* ptr, double zs, double zz, int blank) { if (!hasBlank_ && !hasScaling_ && quantize_ != SUBDITHER1 && quantize_ != SUBDITHER2) return *ptr; if (hasBlank_ && *ptr == blank) return NAN; switch (quantize_) { case NODITHER: return hasScaling_ ? (*ptr)*zs + zz : *ptr; case SUBDITHER1: case SUBDITHER2: return unquantize(*ptr,zs,zz); } // so compiler will not complain return hasScaling_ ? (*ptr)*zs + zz : *ptr; } // getValue short template T FitsCompressm::getValue(short* ptr, double zs, double zz, int blank) { return hasScaling_ ? T((*ptr)*zs + zz) : *ptr; } template <> float FitsCompressm::getValue(short* ptr, double zs, double zz, int blank) { if (!hasBlank_ && !hasScaling_ && quantize_ != SUBDITHER1 && quantize_ != SUBDITHER2) return *ptr; if (hasBlank_ && *ptr == blank) return NAN; switch (quantize_) { case NODITHER: return hasScaling_ ? (*ptr)*zs + zz : *ptr; case SUBDITHER1: case SUBDITHER2: return unquantize(*ptr,zs,zz); } // so compiler will not complain return hasScaling_ ? (*ptr)*zs + zz : *ptr; } template <> double FitsCompressm::getValue(short* ptr, double zs, double zz, int blank) { if (!hasBlank_ && !hasScaling_ && quantize_ != SUBDITHER1 && quantize_ != SUBDITHER2) return *ptr; if (hasBlank_ && *ptr == blank) return NAN; switch (quantize_) { case NODITHER: return hasScaling_ ? (*ptr)*zs + zz : *ptr; case SUBDITHER1: case SUBDITHER2: return unquantize(*ptr,zs,zz); } // so compiler will not complain return hasScaling_ ? (*ptr)*zs + zz : *ptr; } // getValue int template T FitsCompressm::getValue(int* ptr, double zs, double zz, int blank) { return hasScaling_ ? T((*ptr)*zs + zz) : *ptr; } template <> float FitsCompressm::getValue(int* ptr, double zs, double zz, int blank) { if (!hasBlank_ && !hasScaling_ && quantize_ != SUBDITHER1 && quantize_ != SUBDITHER2) return *ptr; if (hasBlank_ && *ptr == blank) return NAN; switch (quantize_) { case NODITHER: return hasScaling_ ? (*ptr)*zs + zz : *ptr; case SUBDITHER1: return unquantize(*ptr,zs,zz); case SUBDITHER2: return unquantizeZero(*ptr,zs,zz); } // so compiler will not complain return hasScaling_ ? (*ptr)*zs + zz : *ptr; } template <> double FitsCompressm::getValue(int* ptr, double zs, double zz, int blank) { if (!hasBlank_ && !hasScaling_ && quantize_ != SUBDITHER1 && quantize_ != SUBDITHER2) return *ptr; if (hasBlank_ && *ptr == blank) return NAN; switch (quantize_) { case NODITHER: return hasScaling_ ? (*ptr)*zs + zz : *ptr; case SUBDITHER1: return unquantize(*ptr,zs,zz); case SUBDITHER2: return unquantizeZero(*ptr,zs,zz); } // so compiler will not complain return hasScaling_ ? (*ptr)*zs + zz : *ptr; } // getValue long long template T FitsCompressm::getValue(long long* ptr, double zs, double zz, int blank) { return hasScaling_ ? T((*ptr)*zs + zz) : *ptr; } template <> float FitsCompressm::getValue(long long* ptr, double zs, double zz, int blank) { if (!hasBlank_ && !hasScaling_ && quantize_ != SUBDITHER1 && quantize_ != SUBDITHER2) return *ptr; if (hasBlank_ && *ptr == blank) return NAN; switch (quantize_) { case NODITHER: return hasScaling_ ? (*ptr)*zs + zz : *ptr; case SUBDITHER1: return unquantize(*ptr,zs,zz); case SUBDITHER2: return unquantizeZero(*ptr,zs,zz); } // so compiler will not complain return hasScaling_ ? (*ptr)*zs + zz : *ptr; } template <> double FitsCompressm::getValue(long long* ptr, double zs, double zz, int blank) { if (!hasBlank_ && !hasScaling_ && quantize_ != SUBDITHER1 && quantize_ != SUBDITHER2) return *ptr; if (hasBlank_ && *ptr == blank) return NAN; switch (quantize_) { case NODITHER: return hasScaling_ ? (*ptr)*zs + zz : *ptr; case SUBDITHER1: return unquantize(*ptr,zs,zz); case SUBDITHER2: return unquantizeZero(*ptr,zs,zz); } // so compiler will not complain return hasScaling_ ? (*ptr)*zs + zz : *ptr; } // getValue float template T FitsCompressm::getValue(float* ptr, double zs, double zz, int blank) { return hasScaling_ ? T((*ptr)*zs + zz) : *ptr; } // getValue double template T FitsCompressm::getValue(double* ptr, double zs, double zz, int blank) { return hasScaling_ ? T((*ptr)*zs + zz) : *ptr; } template class FitsCompressm; template class FitsCompressm; template class FitsCompressm; template class FitsCompressm; template class FitsCompressm; template class FitsCompressm; template class FitsCompressm; FitsPostNext::FitsPostNext(FitsFile* p) { FitsCompress* prev = (FitsCompress*)p; primary_ = prev->primary(); managePrimary_ = 0; head_ = prev->head(); manageHead_ = 0; FitsImageHDU* hdu = (FitsImageHDU*)head_->hdu(); data_ = (char*)prev->data() + hdu->imgbytes(); dataSize_ = 0; dataSkip_ = 0; ext_ = prev->ext(); inherit_ = head_->inherit(); byteswap_ = prev->byteswap(); endian_ = prev->endian(); valid_ = 1; return; } saods9/tksao/fitsy++/compress.h000644 000765 000000 00000003616 12705446163 017013 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitscompress_h__ #define __fitscompress_h__ #include "file.h" class FitsCompress : public FitsFile { public: enum QuantMethod {NODITHER,SUBDITHER1,SUBDITHER2}; protected: int bitpix_; char* type_; int width_; int height_; int depth_; int ww_; int hh_; int dd_; double bscale_; double bzero_; unsigned int blank_; char* zmaskcmp_; size_t tilesize_; size_t size_; FitsColumn* gzcompress_; FitsColumn* compress_; FitsColumn* uncompress_; FitsColumn* zscale_; FitsColumn* zzero_; FitsColumn* zblank_; FitsColumn* null_; int hasScaling_; int hasBlank_; QuantMethod quantize_; int quantOffset_; int numRandom_; float* random_; int randSeed_; int randNext_; protected: int initHeader(FitsFile*); void initRandom(int); double unquantize(double, double, double); double unquantizeZero(double, double, double); public: FitsCompress(FitsFile*); virtual ~FitsCompress(); }; template class FitsCompressm : public FitsCompress { private: int inflate(FitsFile*); void swapBytes(); protected: T swap(T* ptr); protected: void uncompress(FitsFile* fits); int gzcompressed(T*, char*, char*, int, int, int, int, int, int); virtual int compressed(T*, char*, char*, int, int, int, int, int, int) =0; int uncompressed(T*, char*, char*, int, int, int, int, int, int); T getValue(char*, double, double, int); T getValue(short*, double, double, int); T getValue(int*, double, double, int); T getValue(long long*, double, double, int); T getValue(float*, double, double, int); T getValue(double*, double, double, int); public: FitsCompressm(FitsFile*); }; class FitsPostNext : public FitsFile { public: FitsPostNext(FitsFile* prev); }; #endif saods9/tksao/fitsy++/envi.C000644 000765 000000 00000006364 12705446163 016057 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "envi.h" #include "head.h" FitsENVI::FitsENVI(FitsFile* fits) { byteswap_ = fits->byteswap(); endian_ = fits->endian(); pBitpix_ = fits->pBitpix(); pWidth_ = fits->pWidth(); pHeight_ = fits->pHeight(); pDepth_ = fits->pDepth(); pEncoding_ = FitsFile::BSQ; pCRPIX3_ = fits->pCRPIX3(); pCRVAL3_ = fits->pCRVAL3(); pCDELT3_ = fits->pCDELT3(); size_ = (size_t)pWidth_*pHeight_*pDepth_; } FitsENVI::~FitsENVI() { if (data_) delete [] (char*)data_; } int FitsENVI::initHeader(FitsFile* fits) { // simple check if (!pWidth_ || !pHeight_ || !pBitpix_) return 0; // create header head_ = new FitsHead(pWidth_, pHeight_, pDepth_, pBitpix_); if (!head_->isValid()) return 0; // WCS? if (pCRPIX3_>0 || pCRVAL3_>0 || pCDELT3_!=1) { head_->appendString("CTYPE1","LINEAR", NULL); head_->appendReal("CRPIX1",1, 9, NULL); head_->appendReal("CRVAL1",1, 9, NULL); head_->appendReal("CDELT1",1, 9, NULL); head_->appendString("CTYPE2","LINEAR", NULL); head_->appendReal("CRPIX2",1, 9, NULL); head_->appendReal("CRVAL2",1, 9, NULL); head_->appendReal("CDELT2",1, 9, NULL); head_->appendString("CTYPE3","WAVELENGTH", NULL); head_->appendReal("CRPIX3",pCRPIX3_, 9, NULL); head_->appendReal("CRVAL3",pCRVAL3_, 9, NULL); head_->appendReal("CDELT3",pCDELT3_, 9, NULL); } // other primary_ = fits->primary(); managePrimary_ = 0; inherit_ = head_->inherit(); return 1; } template FitsENVIBIPm::FitsENVIBIPm(FitsFile* fits) : FitsENVI(fits) { if (!initHeader(fits)) return; T* dest = new T[size_]; if (!dest) { internalError("Fitsy++ envi unable to allocate memory"); return; } memset(dest, 0, size_*sizeof(T)); T* ptr = (T*)fits->data(); for (int jj=0; jj; template class FitsENVIBIPm; template class FitsENVIBIPm; template class FitsENVIBIPm; template class FitsENVIBIPm; template class FitsENVIBIPm; template class FitsENVIBIPm; template FitsENVIBILm::FitsENVIBILm(FitsFile* fits) : FitsENVI(fits) { if (!initHeader(fits)) return; T* dest = new T[size_]; if (!dest) { internalError("Fitsy++ envi unable to allocate memory"); return; } memset(dest, 0, size_*sizeof(T)); T* ptr = (T*)fits->data(); for (int jj=0; jj; template class FitsENVIBILm; template class FitsENVIBILm; template class FitsENVIBILm; template class FitsENVIBILm; template class FitsENVIBILm; template class FitsENVIBILm; saods9/tksao/fitsy++/envi.h000644 000765 000000 00000001131 12705446163 016107 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsenvi_h__ #define __fitsenvi_h__ #include "file.h" class FitsENVI : public FitsFile { protected: size_t size_; protected: int initHeader(FitsFile*); public: FitsENVI(FitsFile*); virtual ~FitsENVI(); }; template class FitsENVIBILm : public FitsENVI { public: FitsENVIBILm(FitsFile*); }; template class FitsENVIBIPm : public FitsENVI { public: FitsENVIBIPm(FitsFile*); }; #endif saods9/tksao/fitsy++/envilex.C000644 000765 000000 00000173465 12705446163 016577 0ustar00joyewheel000000 000000 #line 2 "fitsy++/envilex.C" #line 4 "fitsy++/envilex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer enviFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *envialloc (yy_size_t ); void *envirealloc (void *,yy_size_t ); void envifree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 72 #define YY_END_OF_BUFFER 73 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[282] = { 0, 0, 0, 2, 2, 0, 0, 73, 71, 68, 70, 71, 71, 71, 64, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 3, 2, 1, 63, 61, 62, 63, 60, 59, 63, 56, 59, 4, 68, 69, 0, 64, 66, 65, 64, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 6, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 2, 61, 0, 56, 59, 56, 58, 57, 59, 0, 0, 0, 65, 67, 67, 11, 12, 13, 14, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 32, 67, 67, 7, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 59, 57, 65, 0, 66, 67, 9, 15, 17, 67, 67, 67, 16, 67, 22, 67, 23, 24, 67, 67, 26, 67, 67, 67, 67, 67, 67, 67, 67, 67, 40, 67, 67, 67, 67, 67, 67, 67, 48, 67, 67, 51, 67, 67, 67, 57, 0, 58, 67, 10, 5, 67, 67, 67, 21, 67, 67, 67, 67, 30, 31, 33, 34, 67, 37, 38, 67, 42, 67, 67, 45, 67, 67, 67, 67, 52, 53, 67, 67, 67, 67, 20, 25, 27, 67, 29, 35, 39, 67, 67, 67, 67, 47, 67, 50, 54, 67, 8, 18, 67, 67, 36, 67, 67, 44, 46, 49, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 28, 41, 67, 55, 19, 43, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 7, 8, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 1, 1, 1, 1, 1, 1, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 20, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 1, 62, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[63] = { 0, 1, 1, 2, 1, 1, 1, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1 } ; static yyconst flex_int16_t yy_base[287] = { 0, 0, 0, 806, 805, 62, 124, 807, 810, 800, 810, 788, 64, 781, 66, 78, 179, 781, 68, 69, 127, 71, 75, 128, 76, 77, 80, 150, 148, 132, 231, 144, 91, 83, 102, 810, 0, 810, 810, 786, 810, 88, 810, 92, 778, 141, 778, 810, 783, 810, 775, 187, 134, 190, 197, 775, 212, 153, 202, 201, 227, 200, 204, 226, 246, 228, 145, 210, 232, 236, 254, 255, 258, 274, 270, 282, 286, 278, 280, 772, 297, 289, 288, 296, 300, 311, 294, 303, 306, 316, 95, 327, 325, 322, 323, 330, 0, 776, 768, 349, 767, 351, 353, 359, 375, 365, 383, 765, 220, 369, 387, 765, 764, 763, 761, 371, 393, 379, 394, 386, 389, 398, 400, 397, 409, 402, 407, 404, 408, 427, 405, 428, 414, 760, 431, 429, 437, 446, 456, 443, 439, 458, 467, 451, 470, 453, 463, 465, 474, 475, 479, 477, 484, 505, 512, 757, 334, 514, 756, 751, 750, 494, 501, 750, 746, 518, 517, 519, 739, 520, 725, 523, 687, 684, 527, 528, 636, 530, 532, 531, 535, 537, 540, 562, 548, 544, 629, 565, 569, 577, 573, 584, 580, 550, 570, 587, 593, 558, 598, 596, 600, 544, 542, 541, 606, 541, 534, 604, 605, 588, 503, 603, 621, 610, 619, 491, 486, 454, 440, 624, 410, 626, 630, 370, 631, 644, 363, 649, 654, 652, 657, 356, 658, 659, 662, 651, 663, 347, 345, 341, 669, 338, 666, 268, 667, 674, 679, 685, 262, 683, 256, 238, 693, 216, 206, 689, 712, 174, 690, 715, 172, 156, 152, 719, 696, 589, 707, 716, 709, 721, 722, 734, 738, 736, 744, 133, 110, 741, 103, 97, 94, 810, 792, 796, 94, 800, 802 } ; static yyconst flex_int16_t yy_def[287] = { 0, 281, 1, 282, 282, 283, 283, 281, 281, 281, 281, 281, 281, 281, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 281, 285, 281, 281, 281, 281, 281, 281, 286, 281, 286, 286, 281, 281, 281, 281, 281, 281, 281, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 285, 281, 281, 281, 286, 286, 281, 281, 286, 281, 281, 281, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 281, 281, 281, 286, 286, 281, 281, 281, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 281, 281, 281, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 0, 281, 281, 281, 281, 281 } ; static yyconst flex_int16_t yy_nxt[873] = { 0, 8, 9, 10, 11, 12, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 17, 17, 24, 25, 26, 27, 28, 17, 29, 30, 31, 32, 33, 34, 17, 17, 17, 15, 16, 17, 18, 19, 20, 21, 22, 23, 17, 24, 25, 26, 27, 28, 17, 29, 30, 31, 32, 33, 34, 17, 17, 17, 35, 8, 38, 39, 40, 38, 41, 42, 43, 44, 45, 50, 51, 53, 54, 281, 281, 63, 281, 56, 70, 64, 281, 281, 281, 281, 75, 281, 71, 77, 281, 65, 94, 74, 76, 98, 99, 55, 281, 98, 101, 281, 281, 63, 281, 56, 70, 64, 57, 281, 281, 95, 75, 93, 71, 77, 65, 281, 94, 74, 76, 147, 38, 47, 38, 39, 40, 38, 41, 42, 43, 44, 45, 57, 281, 281, 66, 95, 93, 281, 281, 84, 52, 72, 67, 85, 147, 106, 103, 101, 73, 281, 281, 68, 104, 281, 121, 281, 69, 281, 281, 91, 66, 281, 78, 81, 109, 84, 82, 72, 67, 85, 79, 106, 83, 73, 80, 92, 68, 281, 104, 281, 121, 69, 38, 47, 281, 91, 58, 59, 78, 81, 109, 82, 53, 51, 60, 79, 52, 83, 105, 80, 92, 105, 53, 54, 61, 281, 281, 281, 56, 281, 62, 281, 58, 59, 107, 281, 107, 281, 108, 111, 60, 281, 110, 114, 105, 281, 108, 105, 122, 61, 115, 281, 281, 281, 56, 62, 281, 281, 86, 123, 87, 281, 88, 281, 111, 112, 89, 110, 114, 113, 124, 281, 116, 122, 117, 115, 120, 90, 118, 281, 281, 281, 126, 281, 86, 123, 87, 281, 88, 125, 112, 119, 89, 281, 113, 281, 124, 116, 127, 281, 117, 120, 90, 281, 118, 281, 128, 281, 126, 130, 131, 281, 136, 281, 281, 125, 119, 135, 132, 281, 129, 281, 281, 127, 133, 281, 134, 137, 281, 139, 144, 281, 128, 143, 130, 131, 281, 140, 136, 138, 141, 281, 135, 142, 132, 129, 145, 281, 281, 133, 281, 134, 281, 137, 139, 281, 144, 150, 143, 281, 157, 151, 140, 281, 138, 141, 281, 149, 146, 142, 281, 145, 281, 148, 103, 99, 103, 101, 152, 102, 153, 281, 104, 150, 154, 102, 151, 107, 281, 107, 153, 158, 149, 146, 281, 281, 281, 155, 148, 156, 281, 157, 163, 152, 281, 159, 153, 159, 104, 160, 154, 281, 281, 161, 281, 167, 153, 162, 281, 281, 164, 166, 281, 281, 168, 281, 165, 281, 163, 281, 281, 170, 281, 281, 281, 281, 171, 174, 161, 281, 178, 167, 173, 162, 169, 175, 164, 166, 172, 176, 168, 165, 281, 281, 281, 180, 281, 170, 177, 179, 182, 171, 281, 174, 281, 281, 178, 173, 281, 169, 175, 281, 181, 172, 176, 187, 281, 184, 281, 281, 180, 281, 183, 281, 177, 179, 182, 185, 281, 186, 281, 188, 281, 190, 194, 281, 195, 181, 193, 281, 281, 187, 281, 184, 281, 189, 197, 183, 191, 281, 192, 281, 196, 185, 186, 200, 281, 188, 190, 281, 194, 204, 195, 193, 199, 198, 281, 155, 281, 155, 189, 201, 197, 191, 202, 192, 202, 196, 203, 281, 157, 200, 281, 281, 281, 281, 205, 204, 281, 199, 198, 206, 281, 281, 210, 281, 281, 281, 211, 281, 281, 209, 281, 208, 207, 281, 281, 203, 203, 281, 201, 205, 212, 281, 213, 281, 215, 206, 214, 216, 210, 217, 221, 281, 211, 218, 209, 281, 208, 207, 281, 228, 220, 219, 281, 281, 222, 212, 281, 213, 223, 215, 281, 214, 216, 281, 217, 221, 224, 281, 218, 225, 281, 281, 281, 226, 228, 220, 281, 219, 227, 281, 222, 281, 230, 281, 223, 232, 281, 281, 281, 281, 237, 229, 224, 281, 225, 270, 233, 234, 236, 226, 235, 231, 281, 227, 281, 238, 240, 281, 230, 281, 239, 232, 281, 281, 281, 237, 229, 244, 245, 281, 270, 233, 241, 234, 236, 235, 231, 281, 242, 243, 238, 240, 281, 246, 281, 281, 239, 281, 247, 249, 281, 281, 281, 244, 245, 281, 281, 241, 252, 281, 281, 253, 281, 242, 243, 254, 248, 281, 256, 246, 250, 251, 281, 255, 247, 249, 281, 281, 281, 257, 281, 258, 281, 281, 252, 262, 281, 253, 259, 281, 254, 248, 260, 266, 256, 250, 251, 261, 255, 269, 281, 263, 281, 264, 257, 281, 258, 265, 281, 281, 267, 262, 281, 259, 281, 281, 271, 260, 281, 266, 268, 275, 261, 273, 272, 269, 263, 281, 264, 281, 274, 281, 281, 265, 281, 277, 267, 281, 278, 281, 280, 271, 276, 281, 160, 160, 268, 275, 273, 272, 158, 201, 279, 281, 281, 274, 281, 281, 281, 158, 281, 277, 102, 97, 278, 281, 280, 276, 281, 52, 48, 281, 102, 97, 281, 52, 49, 279, 36, 36, 36, 36, 46, 46, 46, 46, 96, 48, 96, 96, 100, 100, 281, 37, 37, 7, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281 } ; static yyconst flex_int16_t yy_chk[873] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 12, 12, 14, 14, 18, 19, 18, 21, 14, 21, 18, 22, 24, 25, 15, 25, 26, 22, 26, 33, 19, 33, 24, 25, 41, 41, 284, 32, 43, 43, 280, 90, 18, 279, 14, 21, 18, 15, 34, 278, 34, 25, 32, 22, 26, 19, 276, 33, 24, 25, 90, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 15, 20, 23, 20, 34, 32, 29, 275, 29, 52, 23, 20, 29, 90, 52, 45, 45, 23, 31, 66, 20, 45, 28, 66, 27, 20, 262, 57, 31, 20, 261, 27, 28, 57, 29, 28, 23, 20, 29, 27, 52, 28, 23, 27, 31, 20, 260, 45, 257, 66, 20, 6, 6, 16, 31, 16, 16, 27, 28, 57, 28, 51, 51, 16, 27, 53, 28, 51, 27, 31, 53, 54, 54, 16, 61, 59, 58, 54, 62, 16, 254, 16, 16, 56, 67, 56, 56, 56, 59, 16, 253, 58, 61, 51, 108, 108, 53, 67, 16, 62, 63, 60, 65, 54, 16, 30, 68, 30, 68, 30, 69, 30, 251, 59, 60, 30, 58, 61, 60, 69, 64, 63, 67, 64, 62, 65, 30, 64, 70, 71, 250, 71, 72, 30, 68, 30, 248, 30, 70, 60, 64, 30, 243, 60, 74, 69, 63, 72, 73, 64, 65, 30, 77, 64, 78, 73, 75, 71, 74, 74, 76, 78, 82, 81, 70, 64, 77, 75, 86, 73, 83, 80, 72, 75, 84, 76, 80, 87, 82, 87, 88, 73, 86, 74, 74, 85, 83, 78, 81, 84, 89, 77, 85, 75, 73, 88, 93, 94, 75, 92, 76, 91, 80, 82, 95, 87, 93, 86, 156, 156, 94, 83, 241, 81, 84, 239, 92, 89, 85, 238, 88, 237, 91, 99, 99, 101, 101, 95, 102, 99, 231, 101, 93, 102, 103, 94, 105, 226, 105, 103, 105, 92, 89, 109, 223, 115, 104, 91, 104, 104, 104, 115, 95, 117, 106, 99, 106, 101, 106, 102, 119, 110, 109, 120, 119, 103, 110, 116, 118, 116, 118, 123, 121, 120, 122, 117, 125, 115, 127, 130, 122, 126, 128, 124, 220, 123, 126, 109, 132, 130, 119, 125, 110, 121, 127, 116, 118, 124, 128, 120, 117, 129, 131, 135, 132, 134, 122, 129, 131, 135, 123, 136, 126, 140, 218, 130, 125, 139, 121, 127, 137, 134, 124, 128, 140, 143, 137, 145, 217, 132, 138, 136, 141, 129, 131, 135, 138, 146, 139, 147, 141, 142, 143, 146, 144, 147, 134, 145, 148, 149, 140, 151, 137, 150, 142, 149, 136, 144, 152, 144, 216, 148, 138, 139, 152, 215, 141, 143, 161, 146, 161, 147, 145, 151, 150, 162, 153, 210, 153, 142, 153, 149, 144, 154, 144, 154, 148, 154, 157, 157, 152, 166, 165, 167, 169, 162, 161, 171, 151, 150, 165, 174, 175, 171, 177, 179, 178, 174, 206, 180, 169, 181, 167, 166, 182, 205, 203, 202, 185, 201, 162, 175, 184, 177, 193, 179, 165, 178, 180, 171, 181, 185, 197, 174, 182, 169, 183, 167, 166, 187, 193, 184, 183, 188, 194, 187, 175, 190, 177, 188, 179, 189, 178, 180, 192, 181, 185, 189, 191, 182, 190, 195, 209, 265, 191, 193, 184, 196, 183, 192, 199, 187, 198, 196, 200, 188, 199, 211, 207, 208, 204, 209, 195, 189, 213, 190, 265, 200, 204, 208, 191, 207, 198, 214, 192, 212, 211, 213, 219, 196, 221, 212, 199, 186, 222, 224, 209, 195, 222, 224, 176, 265, 200, 214, 204, 208, 207, 198, 225, 219, 221, 211, 213, 227, 225, 235, 229, 212, 228, 227, 229, 230, 232, 233, 222, 224, 234, 236, 214, 233, 242, 244, 234, 240, 219, 221, 235, 228, 245, 240, 225, 230, 232, 246, 236, 227, 229, 249, 173, 247, 242, 172, 244, 255, 258, 233, 249, 252, 234, 245, 264, 235, 228, 246, 258, 240, 230, 232, 247, 236, 264, 266, 252, 268, 255, 242, 256, 244, 256, 259, 267, 259, 249, 263, 245, 269, 270, 266, 246, 170, 258, 263, 270, 247, 268, 267, 264, 252, 271, 255, 273, 269, 272, 168, 256, 277, 272, 259, 274, 273, 164, 277, 266, 271, 163, 160, 159, 263, 270, 268, 267, 158, 155, 274, 133, 114, 269, 113, 112, 111, 107, 100, 272, 98, 97, 273, 79, 277, 271, 55, 50, 48, 46, 44, 39, 17, 13, 11, 274, 282, 282, 282, 282, 283, 283, 283, 283, 285, 9, 285, 285, 286, 286, 7, 4, 3, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "fitsy++/envilex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 11 "fitsy++/envilex.L" #include #include #include #include "util.h" #include "enviparser.H" extern YYSTYPE* envilval; extern enviFlexLexer* envilexx; /* rules */ #line 710 "fitsy++/envilex.C" #define INITIAL 0 #define DISCARD 1 #define BRACKET 2 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 30 "fitsy++/envilex.L" #line 815 "fitsy++/envilex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 282 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 281 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 32 "fitsy++/envilex.L" { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(envilval->str,""); // feed a blank string return STRING; } YY_BREAK case 2: YY_RULE_SETUP #line 39 "fitsy++/envilex.L" { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(ENVIPARSERSIZE-1) ? yyleng:(ENVIPARSERSIZE-1); strncpy(envilval->str,yytext,ll); envilval->str[ll] = '\0'; return STRING; } YY_BREAK case 3: YY_RULE_SETUP #line 47 "fitsy++/envilex.L" { BEGIN BRACKET; return '{'; } YY_BREAK case 4: YY_RULE_SETUP #line 52 "fitsy++/envilex.L" { BEGIN INITIAL; return '}'; } YY_BREAK case 5: YY_RULE_SETUP #line 57 "fitsy++/envilex.L" {return DEBUG_;} YY_BREAK case 6: YY_RULE_SETUP #line 58 "fitsy++/envilex.L" {return ON_;} YY_BREAK case 7: YY_RULE_SETUP #line 59 "fitsy++/envilex.L" {return OFF_;} YY_BREAK case 8: YY_RULE_SETUP #line 61 "fitsy++/envilex.L" {return AVERAGE_;} YY_BREAK case 9: YY_RULE_SETUP #line 62 "fitsy++/envilex.L" {return BAND_;} YY_BREAK case 10: YY_RULE_SETUP #line 63 "fitsy++/envilex.L" {return BANDS_;} YY_BREAK case 11: YY_RULE_SETUP #line 64 "fitsy++/envilex.L" {return BBL_;} YY_BREAK case 12: YY_RULE_SETUP #line 65 "fitsy++/envilex.L" {return BIL_;} YY_BREAK case 13: YY_RULE_SETUP #line 66 "fitsy++/envilex.L" {return BIP_;} YY_BREAK case 14: YY_RULE_SETUP #line 67 "fitsy++/envilex.L" {return BSQ_;} YY_BREAK case 15: YY_RULE_SETUP #line 68 "fitsy++/envilex.L" {return BYTE_;} YY_BREAK case 16: YY_RULE_SETUP #line 69 "fitsy++/envilex.L" {return ENVI_;} YY_BREAK case 17: YY_RULE_SETUP #line 70 "fitsy++/envilex.L" {return DATA_;} YY_BREAK case 18: YY_RULE_SETUP #line 71 "fitsy++/envilex.L" {return DEFAULT_;} YY_BREAK case 19: YY_RULE_SETUP #line 72 "fitsy++/envilex.L" {return DESCRIPTION_;} YY_BREAK case 20: YY_RULE_SETUP #line 73 "fitsy++/envilex.L" {return FACTOR_;} YY_BREAK case 21: YY_RULE_SETUP #line 74 "fitsy++/envilex.L" {return FRAME_;} YY_BREAK case 22: YY_RULE_SETUP #line 75 "fitsy++/envilex.L" {return FILE_;} YY_BREAK case 23: YY_RULE_SETUP #line 76 "fitsy++/envilex.L" {return FWHM_;} YY_BREAK case 24: YY_RULE_SETUP #line 77 "fitsy++/envilex.L" {return GAIN_;} YY_BREAK case 25: YY_RULE_SETUP #line 78 "fitsy++/envilex.L" {return HEADER_;} YY_BREAK case 26: YY_RULE_SETUP #line 79 "fitsy++/envilex.L" {return INFO_;} YY_BREAK case 27: YY_RULE_SETUP #line 80 "fitsy++/envilex.L" {return IGNORE_;} YY_BREAK case 28: YY_RULE_SETUP #line 81 "fitsy++/envilex.L" {return INTERLEAVE_;} YY_BREAK case 29: YY_RULE_SETUP #line 82 "fitsy++/envilex.L" {return LIMITS_;} YY_BREAK case 30: YY_RULE_SETUP #line 83 "fitsy++/envilex.L" {return LINES_;} YY_BREAK case 31: YY_RULE_SETUP #line 84 "fitsy++/envilex.L" {return MAJOR_;} YY_BREAK case 32: YY_RULE_SETUP #line 85 "fitsy++/envilex.L" {return MAP_;} YY_BREAK case 33: YY_RULE_SETUP #line 86 "fitsy++/envilex.L" {return MINOR_;} YY_BREAK case 34: YY_RULE_SETUP #line 87 "fitsy++/envilex.L" {return NAMES_;} YY_BREAK case 35: YY_RULE_SETUP #line 88 "fitsy++/envilex.L" {return OFFSET_;} YY_BREAK case 36: YY_RULE_SETUP #line 89 "fitsy++/envilex.L" {return OFFSETS_;} YY_BREAK case 37: YY_RULE_SETUP #line 90 "fitsy++/envilex.L" {return ORDER_;} YY_BREAK case 38: YY_RULE_SETUP #line 91 "fitsy++/envilex.L" {return PIXEL_;} YY_BREAK case 39: YY_RULE_SETUP #line 92 "fitsy++/envilex.L" {return PIXELS_;} YY_BREAK case 40: YY_RULE_SETUP #line 93 "fitsy++/envilex.L" {return PLOT_;} YY_BREAK case 41: YY_RULE_SETUP #line 94 "fitsy++/envilex.L" {return PROJECTION_;} YY_BREAK case 42: YY_RULE_SETUP #line 95 "fitsy++/envilex.L" {return RANGE_;} YY_BREAK case 43: YY_RULE_SETUP #line 96 "fitsy++/envilex.L" {return REFLECTANCE_;} YY_BREAK case 44: YY_RULE_SETUP #line 97 "fitsy++/envilex.L" {return SAMPLES_;} YY_BREAK case 45: YY_RULE_SETUP #line 98 "fitsy++/envilex.L" {return SCALE_;} YY_BREAK case 46: YY_RULE_SETUP #line 99 "fitsy++/envilex.L" {return SCANNER_;} YY_BREAK case 47: YY_RULE_SETUP #line 100 "fitsy++/envilex.L" {return SENSOR_;} YY_BREAK case 48: YY_RULE_SETUP #line 101 "fitsy++/envilex.L" {return SIZE_;} YY_BREAK case 49: YY_RULE_SETUP #line 102 "fitsy++/envilex.L" {return STRETCH_;} YY_BREAK case 50: YY_RULE_SETUP #line 103 "fitsy++/envilex.L" {return TITLES_;} YY_BREAK case 51: YY_RULE_SETUP #line 104 "fitsy++/envilex.L" {return TYPE_;} YY_BREAK case 52: YY_RULE_SETUP #line 105 "fitsy++/envilex.L" {return UNITS_;} YY_BREAK case 53: YY_RULE_SETUP #line 106 "fitsy++/envilex.L" {return VALUE_;} YY_BREAK case 54: YY_RULE_SETUP #line 107 "fitsy++/envilex.L" {return VALUES_;} YY_BREAK case 55: YY_RULE_SETUP #line 108 "fitsy++/envilex.L" {return WAVELENGTH_;} YY_BREAK case 56: YY_RULE_SETUP #line 111 "fitsy++/envilex.L" { // Integer envilval->integer = atoi(yytext); return INT; } YY_BREAK case 57: #line 117 "fitsy++/envilex.L" case 58: YY_RULE_SETUP #line 117 "fitsy++/envilex.L" { // Real Number envilval->real = atof(yytext); return REAL; } YY_BREAK case 59: YY_RULE_SETUP #line 123 "fitsy++/envilex.L" { // General String int ll = yyleng <(ENVIPARSERSIZE-1) ? yyleng:(ENVIPARSERSIZE-1); strncpy(envilval->str,yytext,ll); envilval->str[ll] = '\0'; return STRING; } YY_BREAK case 60: YY_RULE_SETUP #line 130 "fitsy++/envilex.L" { return ','; } YY_BREAK case 61: YY_RULE_SETUP #line 134 "fitsy++/envilex.L" { // White Spaces } YY_BREAK case 62: /* rule 62 can match eol */ YY_RULE_SETUP #line 137 "fitsy++/envilex.L" { // linefeed } YY_BREAK case 63: YY_RULE_SETUP #line 140 "fitsy++/envilex.L" { // other chars, eat it } YY_BREAK case 64: YY_RULE_SETUP #line 143 "fitsy++/envilex.L" { // Integer envilval->integer = atoi(yytext); return INT; } YY_BREAK case 65: #line 149 "fitsy++/envilex.L" case 66: YY_RULE_SETUP #line 149 "fitsy++/envilex.L" { // Real Number envilval->real = atof(yytext); return REAL; } YY_BREAK case 67: YY_RULE_SETUP #line 155 "fitsy++/envilex.L" { // General String int ll = yyleng <(ENVIPARSERSIZE-1) ? yyleng:(ENVIPARSERSIZE-1); strncpy(envilval->str,yytext,ll); envilval->str[ll] = '\0'; return STRING; } YY_BREAK case 68: YY_RULE_SETUP #line 162 "fitsy++/envilex.L" { // White Spaces } YY_BREAK case 69: /* rule 69 can match eol */ YY_RULE_SETUP #line 165 "fitsy++/envilex.L" { // windows line feed return '\n'; } YY_BREAK case 70: /* rule 70 can match eol */ YY_RULE_SETUP #line 169 "fitsy++/envilex.L" { // linefeed return '\n'; } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(DISCARD): case YY_STATE_EOF(BRACKET): #line 173 "fitsy++/envilex.L" { // eof return EOF_; } YY_BREAK case 71: YY_RULE_SETUP #line 177 "fitsy++/envilex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 72: YY_RULE_SETUP #line 181 "fitsy++/envilex.L" ECHO; YY_BREAK #line 1311 "fitsy++/envilex.C" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; envifree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); envifree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ envirealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) envirealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 282 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 282 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 281); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) envialloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) envialloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) envifree((void *) b->yy_ch_buf ); envifree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)envialloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)envirealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) envialloc(new_size ); else (yy_start_stack) = (int *) envirealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *envialloc (yy_size_t size ) { return (void *) malloc( size ); } void *envirealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void envifree (void * ptr ) { free( (char *) ptr ); /* see envirealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 181 "fitsy++/envilex.L" void enviDiscard(int doit) { if (envilexx) envilexx->begin(DISCARD, doit); } void enviFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/fitsy++/envilex.L000644 000765 000000 00000010235 12705446163 016571 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "util.h" #include "enviparser.H" extern YYSTYPE* envilval; extern enviFlexLexer* envilexx; %} %x DISCARD %x BRACKET D [0-9] E [Ee][+-]?{D}+ /* rules */ %% [\n] { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(envilval->str,""); // feed a blank string return STRING; } [^\n]* { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(ENVIPARSERSIZE-1) ? yyleng:(ENVIPARSERSIZE-1); strncpy(envilval->str,yytext,ll); envilval->str[ll] = '\0'; return STRING; } \{ { BEGIN BRACKET; return '{'; } \} { BEGIN INITIAL; return '}'; } debug {return DEBUG_;} on {return ON_;} off {return OFF_;} average {return AVERAGE_;} band {return BAND_;} bands {return BANDS_;} bbl {return BBL_;} bil {return BIL_;} bip {return BIP_;} bsq {return BSQ_;} byte {return BYTE_;} envi {return ENVI_;} data {return DATA_;} default {return DEFAULT_;} description {return DESCRIPTION_;} factor {return FACTOR_;} frame {return FRAME_;} file {return FILE_;} fwhm {return FWHM_;} gain {return GAIN_;} header {return HEADER_;} info {return INFO_;} ignore {return IGNORE_;} interleave {return INTERLEAVE_;} limits {return LIMITS_;} lines {return LINES_;} major {return MAJOR_;} map {return MAP_;} minor {return MINOR_;} names {return NAMES_;} offset {return OFFSET_;} offsets {return OFFSETS_;} order {return ORDER_;} pixel {return PIXEL_;} pixels {return PIXELS_;} plot {return PLOT_;} projection {return PROJECTION_;} range {return RANGE_;} reflectance {return REFLECTANCE_;} samples {return SAMPLES_;} scale {return SCALE_;} scanner {return SCANNER_;} sensor {return SENSOR_;} size {return SIZE_;} stretch {return STRETCH_;} titles {return TITLES_;} type {return TYPE_;} units {return UNITS_;} value {return VALUE_;} values {return VALUES_;} wavelength {return WAVELENGTH_;} [+-]?{D}+ { // Integer envilval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number envilval->real = atof(yytext); return REAL; } [0-9A-Za-z\-]+ { // General String int ll = yyleng <(ENVIPARSERSIZE-1) ? yyleng:(ENVIPARSERSIZE-1); strncpy(envilval->str,yytext,ll); envilval->str[ll] = '\0'; return STRING; } , { return ','; } [ \t]+ { // White Spaces } \n { // linefeed } . { // other chars, eat it } [+-]?{D}+ { // Integer envilval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number envilval->real = atof(yytext); return REAL; } [0-9A-Za-z]+ { // General String int ll = yyleng <(ENVIPARSERSIZE-1) ? yyleng:(ENVIPARSERSIZE-1); strncpy(envilval->str,yytext,ll); envilval->str[ll] = '\0'; return STRING; } [ \t]+ { // White Spaces } \r\n { // windows line feed return '\n'; } \n { // linefeed return '\n'; } <> { // eof return EOF_; } . { // Else, return the char return yytext[0]; } %% void enviDiscard(int doit) { if (envilexx) envilexx->begin(DISCARD, doit); } void enviFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/fitsy++/enviparser.C000644 000765 000000 00000164476 12553253014 017275 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse enviparse #define yylex envilex #define yyerror envierror #define yylval envilval #define yychar envichar #define yydebug envidebug #define yynerrs envinerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { EOF_ = 258, INT = 259, REAL = 260, STRING = 261, DEBUG_ = 262, ON_ = 263, OFF_ = 264, AVERAGE_ = 265, BAND_ = 266, BANDS_ = 267, BBL_ = 268, BIL_ = 269, BIP_ = 270, BSQ_ = 271, BYTE_ = 272, DATA_ = 273, DEFAULT_ = 274, DESCRIPTION_ = 275, ENVI_ = 276, FACTOR_ = 277, FRAME_ = 278, FILE_ = 279, FWHM_ = 280, GAIN_ = 281, HEADER_ = 282, INFO_ = 283, IGNORE_ = 284, INTERLEAVE_ = 285, LIMITS_ = 286, LINES_ = 287, MAJOR_ = 288, MAP_ = 289, MINOR_ = 290, NAMES_ = 291, OFFSET_ = 292, OFFSETS_ = 293, ORDER_ = 294, PIXEL_ = 295, PIXELS_ = 296, PLOT_ = 297, PROJECTION_ = 298, RANGE_ = 299, REFLECTANCE_ = 300, SAMPLES_ = 301, SCALE_ = 302, SCANNER_ = 303, SENSOR_ = 304, SIZE_ = 305, START_ = 306, STRETCH_ = 307, TITLES_ = 308, TYPE_ = 309, UNITS_ = 310, VALUE_ = 311, VALUES_ = 312, WAVELENGTH_ = 313 }; #endif /* Tokens. */ #define EOF_ 258 #define INT 259 #define REAL 260 #define STRING 261 #define DEBUG_ 262 #define ON_ 263 #define OFF_ 264 #define AVERAGE_ 265 #define BAND_ 266 #define BANDS_ 267 #define BBL_ 268 #define BIL_ 269 #define BIP_ 270 #define BSQ_ 271 #define BYTE_ 272 #define DATA_ 273 #define DEFAULT_ 274 #define DESCRIPTION_ 275 #define ENVI_ 276 #define FACTOR_ 277 #define FRAME_ 278 #define FILE_ 279 #define FWHM_ 280 #define GAIN_ 281 #define HEADER_ 282 #define INFO_ 283 #define IGNORE_ 284 #define INTERLEAVE_ 285 #define LIMITS_ 286 #define LINES_ 287 #define MAJOR_ 288 #define MAP_ 289 #define MINOR_ 290 #define NAMES_ 291 #define OFFSET_ 292 #define OFFSETS_ 293 #define ORDER_ 294 #define PIXEL_ 295 #define PIXELS_ 296 #define PLOT_ 297 #define PROJECTION_ 298 #define RANGE_ 299 #define REFLECTANCE_ 300 #define SAMPLES_ 301 #define SCALE_ 302 #define SCANNER_ 303 #define SENSOR_ 304 #define SIZE_ 305 #define START_ 306 #define STRETCH_ 307 #define TITLES_ 308 #define TYPE_ 309 #define UNITS_ 310 #define VALUE_ 311 #define VALUES_ 312 #define WAVELENGTH_ 313 /* Copy the first part of user declarations. */ #line 10 "fitsy++/enviparser.Y" #define YYDEBUG 1 #define DISCARD_(x) {yyclearin; enviDiscard(x);} #include "file.h" #undef yyFlexLexer #define yyFlexLexer enviFlexLexer #include extern int envilex(void*, enviFlexLexer*); extern void envierror(FitsFile*, enviFlexLexer*, const char*); extern void enviDiscard(int); static int numWave; static float wave[MAXWAVES]; /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 30 "fitsy++/enviparser.Y" { #define ENVIPARSERSIZE 1024 float real; int integer; char str[ENVIPARSERSIZE]; } /* Line 193 of yacc.c. */ #line 247 "fitsy++/enviparser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 260 "fitsy++/enviparser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 202 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 70 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 28 /* YYNRULES -- Number of rules. */ #define YYNRULES 77 /* YYNRULES -- Number of states. */ #define YYNSTATES 200 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 313 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 66, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 63, 64, 2, 2, 69, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 65, 2, 59, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 60, 61, 62, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 67, 2, 68, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 4, 7, 11, 14, 15, 18, 20, 22, 26, 30, 34, 38, 43, 49, 55, 56, 62, 67, 71, 72, 78, 83, 88, 93, 98, 103, 108, 113, 119, 125, 131, 137, 138, 145, 150, 155, 156, 161, 165, 169, 175, 181, 190, 191, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 220, 224, 227, 229, 233, 237, 239, 243, 247, 249, 268, 269, 274, 277, 280, 284, 288, 291, 293 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 71, 0, -1, -1, 72, 73, -1, 73, 74, 81, -1, 74, 81, -1, -1, 7, 83, -1, 79, -1, 21, -1, 20, 59, 87, -1, 46, 59, 4, -1, 32, 59, 4, -1, 12, 59, 4, -1, 27, 37, 59, 4, -1, 33, 23, 38, 59, 91, -1, 35, 23, 38, 59, 91, -1, -1, 24, 54, 59, 75, 6, -1, 18, 54, 59, 84, -1, 30, 59, 85, -1, -1, 49, 54, 59, 76, 6, -1, 17, 39, 59, 86, -1, 60, 51, 59, 91, -1, 61, 51, 59, 91, -1, 34, 28, 59, 93, -1, 43, 28, 59, 87, -1, 19, 12, 59, 91, -1, 58, 55, 59, 6, -1, 45, 47, 22, 59, 82, -1, 62, 42, 44, 59, 89, -1, 62, 42, 10, 59, 89, -1, 62, 42, 53, 59, 87, -1, -1, 18, 29, 57, 59, 77, 6, -1, 40, 50, 59, 89, -1, 11, 36, 59, 87, -1, -1, 58, 59, 78, 95, -1, 25, 59, 87, -1, 13, 59, 87, -1, 18, 26, 57, 59, 89, -1, 18, 37, 57, 59, 89, -1, 48, 31, 63, 41, 64, 59, 4, 4, -1, -1, 65, 80, 6, -1, 66, -1, 3, -1, 5, -1, 4, -1, 8, -1, 9, -1, 4, -1, 16, -1, 15, -1, 14, -1, 4, -1, 67, 68, -1, 67, 88, 68, -1, 88, 6, -1, 6, -1, 67, 90, 68, -1, 90, 69, 82, -1, 82, -1, 67, 92, 68, -1, 92, 69, 4, -1, 4, -1, 67, 6, 69, 4, 69, 4, 69, 82, 69, 82, 69, 82, 69, 82, 69, 4, 94, 68, -1, -1, 69, 6, 69, 6, -1, 69, 6, -1, 67, 68, -1, 67, 96, 68, -1, 96, 69, 97, -1, 96, 69, -1, 97, -1, 82, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 102, 102, 102, 104, 105, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 119, 120, 121, 122, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 134, 135, 136, 137, 137, 138, 139, 140, 141, 142, 145, 145, 148, 149, 152, 153, 156, 157, 160, 190, 191, 192, 195, 208, 209, 212, 213, 216, 219, 220, 223, 226, 227, 230, 233, 234, 235, 238, 244, 259, 260, 261, 264 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "EOF_", "INT", "REAL", "STRING", "DEBUG_", "ON_", "OFF_", "AVERAGE_", "BAND_", "BANDS_", "BBL_", "BIL_", "BIP_", "BSQ_", "BYTE_", "DATA_", "DEFAULT_", "DESCRIPTION_", "ENVI_", "FACTOR_", "FRAME_", "FILE_", "FWHM_", "GAIN_", "HEADER_", "INFO_", "IGNORE_", "INTERLEAVE_", "LIMITS_", "LINES_", "MAJOR_", "MAP_", "MINOR_", "NAMES_", "OFFSET_", "OFFSETS_", "ORDER_", "PIXEL_", "PIXELS_", "PLOT_", "PROJECTION_", "RANGE_", "REFLECTANCE_", "SAMPLES_", "SCALE_", "SCANNER_", "SENSOR_", "SIZE_", "START_", "STRETCH_", "TITLES_", "TYPE_", "UNITS_", "VALUE_", "VALUES_", "WAVELENGTH_", "'='", "'X'", "'Y'", "'Z'", "'('", "')'", "';'", "'\\n'", "'{'", "'}'", "','", "$accept", "start", "@1", "commands", "command", "@2", "@3", "@4", "@5", "comment", "@6", "terminator", "numeric", "debug", "bitpix", "encoding", "endian", "liststr", "strings", "listnum", "numerics", "listint", "ints", "listmap", "listmapopt", "listwave", "aWaves", "aWave", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 61, 88, 89, 90, 40, 41, 59, 10, 123, 125, 44 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 70, 72, 71, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 74, 74, 74, 76, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 77, 74, 74, 74, 78, 74, 74, 74, 74, 74, 74, 80, 79, 81, 81, 82, 82, 83, 83, 84, 85, 85, 85, 86, 87, 87, 88, 88, 89, 90, 90, 91, 92, 92, 93, 94, 94, 94, 95, 95, 96, 96, 96, 97 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 3, 2, 0, 2, 1, 1, 3, 3, 3, 3, 4, 5, 5, 0, 5, 4, 3, 0, 5, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 0, 6, 4, 4, 0, 4, 3, 3, 5, 5, 8, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 1, 3, 3, 1, 3, 3, 1, 18, 0, 4, 2, 2, 3, 3, 2, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 2, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 6, 0, 8, 51, 52, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 48, 47, 5, 0, 13, 0, 41, 0, 0, 0, 0, 0, 0, 10, 17, 40, 0, 56, 55, 54, 20, 12, 0, 0, 0, 0, 0, 0, 11, 0, 21, 0, 0, 0, 0, 0, 0, 0, 46, 4, 37, 61, 58, 0, 57, 23, 0, 34, 0, 53, 19, 0, 28, 0, 14, 0, 0, 26, 0, 0, 36, 27, 0, 0, 0, 29, 0, 39, 24, 25, 0, 0, 0, 60, 59, 42, 0, 43, 67, 0, 18, 15, 0, 16, 50, 49, 64, 0, 30, 0, 22, 72, 77, 0, 76, 32, 31, 33, 35, 65, 0, 0, 62, 0, 0, 73, 75, 66, 0, 63, 0, 74, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 71, 68, 0, 70 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 1, 2, 32, 33, 122, 133, 145, 101, 34, 67, 71, 161, 37, 119, 89, 114, 75, 112, 129, 156, 121, 148, 126, 195, 136, 162, 163 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -126 static const yytype_int16 yypact[] = { -126, 24, 68, -126, -1, 1, -6, -3, 6, -14, 50, 40, -126, 12, 45, 46, 51, 53, 82, 81, 92, 69, 90, 73, 63, 93, 67, -9, 72, 74, 85, -126, 9, -2, -126, -126, -126, -126, 75, 127, 65, 76, 79, 80, 83, 84, 86, 65, 87, 65, 88, 62, 134, 101, 89, 103, 91, 94, 120, 140, 95, 96, 97, -126, 98, 100, 7, 143, -2, -126, -126, -126, 65, -126, 4, -126, 147, 102, 104, 105, 148, 99, -126, -126, -126, 150, -126, -126, -126, -126, -126, 106, 107, 108, 109, 65, 110, -126, 119, -126, 156, 111, 99, 99, 112, 113, 114, -126, -126, -126, -126, -126, 5, -126, -126, 109, -126, 109, -126, -126, 164, -126, 169, -126, 99, 171, -126, 99, 14, -126, -126, 14, 115, 174, -126, 0, -126, -126, -126, 109, 109, 65, -126, -126, -126, 175, -126, -126, -37, -126, -126, 116, -126, -126, -126, -126, 22, -126, 123, -126, -126, -126, 28, -126, -126, -126, -126, -126, -126, 166, 179, -126, 14, 180, -126, 14, -126, 117, -126, 183, -126, 184, -126, 121, 14, 122, 14, 124, 14, 125, 14, 126, 185, 128, 186, 130, 131, -126, 190, -126 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -126, -126, -126, -126, 167, -126, -126, -126, -126, -126, -126, 133, -125, -126, -126, -126, -126, -47, -126, -33, -126, -89, -126, -126, -126, -126, -126, 27 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -4 static const yytype_int16 yytable[] = { 82, 69, 84, 155, 153, 154, 157, 35, 36, -3, 110, 142, 42, 137, 138, 43, 4, 104, 153, 154, 5, 6, 7, 44, 3, 109, 8, 9, 10, 11, 12, 168, 169, 13, 14, 150, 15, 38, 152, 16, 45, 17, 18, 19, 20, 41, 62, 178, 130, 21, 63, 105, 22, 39, 23, 24, 40, 25, 26, 185, 106, 187, 46, 189, 70, 191, 48, 27, 160, 28, 29, 30, 111, 143, 31, 4, 86, 87, 88, 5, 6, 7, 144, 50, 146, 8, 9, 10, 11, 12, 171, 172, 13, 14, 166, 15, 174, 175, 16, 47, 17, 18, 19, 20, 49, 53, 164, 165, 21, 54, 51, 22, 52, 23, 24, 55, 25, 26, 57, 56, 58, 61, 59, 64, 60, 65, 27, 66, 28, 29, 30, 73, 74, 31, 72, 76, 77, 78, 90, 91, 79, 93, 96, 80, 97, 81, 83, 85, 92, 107, 94, 113, 118, 95, 123, 99, 100, 102, 98, 103, 132, 115, 134, 116, 117, 124, 120, 127, 147, 131, 176, 139, 140, 141, 125, 149, 128, 151, 135, 158, 159, 167, 173, 177, 179, 170, 181, 182, 183, 193, 184, 186, 196, 188, 190, 192, 199, 194, 197, 68, 198, 108, 180 }; static const yytype_uint8 yycheck[] = { 47, 3, 49, 128, 4, 5, 131, 8, 9, 0, 6, 6, 26, 102, 103, 29, 7, 10, 4, 5, 11, 12, 13, 37, 0, 72, 17, 18, 19, 20, 21, 68, 69, 24, 25, 124, 27, 36, 127, 30, 54, 32, 33, 34, 35, 39, 55, 172, 95, 40, 59, 44, 43, 59, 45, 46, 59, 48, 49, 184, 53, 186, 12, 188, 66, 190, 54, 58, 68, 60, 61, 62, 68, 68, 65, 7, 14, 15, 16, 11, 12, 13, 115, 37, 117, 17, 18, 19, 20, 21, 68, 69, 24, 25, 141, 27, 68, 69, 30, 59, 32, 33, 34, 35, 59, 23, 139, 140, 40, 28, 59, 43, 59, 45, 46, 23, 48, 49, 28, 50, 47, 54, 59, 51, 31, 51, 58, 42, 60, 61, 62, 4, 67, 65, 59, 59, 57, 57, 4, 38, 57, 38, 22, 59, 4, 59, 59, 59, 59, 6, 59, 4, 4, 59, 4, 59, 59, 59, 63, 59, 41, 59, 6, 59, 59, 59, 67, 59, 4, 59, 4, 59, 59, 59, 67, 6, 67, 6, 67, 64, 6, 6, 59, 4, 4, 69, 69, 4, 4, 4, 69, 69, 6, 69, 69, 69, 6, 69, 68, 32, 69, 68, 175 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 71, 72, 0, 7, 11, 12, 13, 17, 18, 19, 20, 21, 24, 25, 27, 30, 32, 33, 34, 35, 40, 43, 45, 46, 48, 49, 58, 60, 61, 62, 65, 73, 74, 79, 8, 9, 83, 36, 59, 59, 39, 26, 29, 37, 54, 12, 59, 54, 59, 37, 59, 59, 23, 28, 23, 50, 28, 47, 59, 31, 54, 55, 59, 51, 51, 42, 80, 74, 3, 66, 81, 59, 4, 67, 87, 59, 57, 57, 57, 59, 59, 87, 59, 87, 59, 14, 15, 16, 85, 4, 38, 59, 38, 59, 59, 22, 4, 63, 59, 59, 78, 59, 59, 10, 44, 53, 6, 81, 87, 6, 68, 88, 4, 86, 59, 59, 59, 4, 84, 67, 91, 75, 4, 59, 67, 93, 59, 67, 89, 87, 59, 41, 76, 6, 67, 95, 91, 91, 59, 59, 59, 6, 68, 89, 77, 89, 4, 92, 6, 91, 6, 91, 4, 5, 82, 90, 82, 64, 6, 68, 82, 96, 97, 89, 89, 87, 6, 68, 69, 69, 68, 69, 59, 68, 69, 4, 4, 82, 4, 97, 69, 4, 4, 69, 82, 69, 82, 69, 82, 69, 82, 69, 4, 69, 94, 6, 68, 69, 6 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (envi, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, envi, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, FitsFile* envi, enviFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, envi, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; FitsFile* envi; enviFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (envi); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, FitsFile* envi, enviFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, envi, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; FitsFile* envi; enviFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, envi, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, FitsFile* envi, enviFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, envi, ll) YYSTYPE *yyvsp; int yyrule; FitsFile* envi; enviFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , envi, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, envi, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, FitsFile* envi, enviFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, envi, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; FitsFile* envi; enviFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (envi); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (FitsFile* envi, enviFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (FitsFile* envi, enviFlexLexer* ll) #else int yyparse (envi, ll) FitsFile* envi; enviFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: #line 102 "fitsy++/enviparser.Y" {envi->setpArch(FitsFile::BIG);} break; case 11: #line 113 "fitsy++/enviparser.Y" {envi->setpWidth((yyvsp[(3) - (3)].integer));;} break; case 12: #line 114 "fitsy++/enviparser.Y" {envi->setpHeight((yyvsp[(3) - (3)].integer));;} break; case 13: #line 115 "fitsy++/enviparser.Y" {envi->setpDepth((yyvsp[(3) - (3)].integer));;} break; case 14: #line 116 "fitsy++/enviparser.Y" {envi->setpSkip((yyvsp[(4) - (4)].integer));;} break; case 17: #line 119 "fitsy++/enviparser.Y" {DISCARD_(1);} break; case 21: #line 122 "fitsy++/enviparser.Y" {DISCARD_(1);} break; case 34: #line 134 "fitsy++/enviparser.Y" {DISCARD_(1);} break; case 38: #line 137 "fitsy++/enviparser.Y" {numWave=0;;} break; case 45: #line 145 "fitsy++/enviparser.Y" {DISCARD_(1);} break; case 48: #line 149 "fitsy++/enviparser.Y" {YYACCEPT;;} break; case 49: #line 152 "fitsy++/enviparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 50: #line 153 "fitsy++/enviparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 51: #line 156 "fitsy++/enviparser.Y" {yydebug=1;;} break; case 52: #line 157 "fitsy++/enviparser.Y" {yydebug=0;;} break; case 53: #line 161 "fitsy++/enviparser.Y" { switch((yyvsp[(1) - (1)].integer)) { case 1: {envi->setpBitpix(8);} break; case 2: {envi->setpBitpix(16);} break; case 12: {envi->setpBitpix(-16);} break; case 3: {envi->setpBitpix(32);} break; case 14: {envi->setpBitpix(64);} break; case 4: {envi->setpBitpix(-32);} break; case 5: {envi->setpBitpix(-64);} break; default: break; } ;} break; case 54: #line 190 "fitsy++/enviparser.Y" {envi->setpEncoding(FitsFile::BSQ);;} break; case 55: #line 191 "fitsy++/enviparser.Y" {envi->setpEncoding(FitsFile::BIP);;} break; case 56: #line 192 "fitsy++/enviparser.Y" {envi->setpEncoding(FitsFile::BIL);;} break; case 57: #line 196 "fitsy++/enviparser.Y" { switch((yyvsp[(1) - (1)].integer)) { case 0: {envi->setpArch(FitsFile::LITTLE);} break; case 1: {envi->setpArch(FitsFile::BIG);} break; } ;} break; case 72: #line 239 "fitsy++/enviparser.Y" { envi->setpCRPIX3(1); envi->setpCRVAL3(1); envi->setpCDELT3(1); ;} break; case 73: #line 245 "fitsy++/enviparser.Y" { if (numWave>=2) { envi->setpCRPIX3(1); envi->setpCRVAL3(wave[0]); envi->setpCDELT3((wave[numWave-1]-wave[0])/(numWave-1)); } else { envi->setpCRPIX3(1); envi->setpCRVAL3(1); envi->setpCDELT3(1); } ;} break; case 77: #line 265 "fitsy++/enviparser.Y" { if (numWave < MAXWAVES) wave[numWave++] = (yyvsp[(1) - (1)].real); ;} break; /* Line 1267 of yacc.c. */ #line 1802 "fitsy++/enviparser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (envi, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (envi, ll, yymsg); } else { yyerror (envi, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, envi, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, envi, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (envi, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, envi, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, envi, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 271 "fitsy++/enviparser.Y" saods9/tksao/fitsy++/enviparser.H000644 000765 000000 00000010446 12553253014 017265 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { EOF_ = 258, INT = 259, REAL = 260, STRING = 261, DEBUG_ = 262, ON_ = 263, OFF_ = 264, AVERAGE_ = 265, BAND_ = 266, BANDS_ = 267, BBL_ = 268, BIL_ = 269, BIP_ = 270, BSQ_ = 271, BYTE_ = 272, DATA_ = 273, DEFAULT_ = 274, DESCRIPTION_ = 275, ENVI_ = 276, FACTOR_ = 277, FRAME_ = 278, FILE_ = 279, FWHM_ = 280, GAIN_ = 281, HEADER_ = 282, INFO_ = 283, IGNORE_ = 284, INTERLEAVE_ = 285, LIMITS_ = 286, LINES_ = 287, MAJOR_ = 288, MAP_ = 289, MINOR_ = 290, NAMES_ = 291, OFFSET_ = 292, OFFSETS_ = 293, ORDER_ = 294, PIXEL_ = 295, PIXELS_ = 296, PLOT_ = 297, PROJECTION_ = 298, RANGE_ = 299, REFLECTANCE_ = 300, SAMPLES_ = 301, SCALE_ = 302, SCANNER_ = 303, SENSOR_ = 304, SIZE_ = 305, START_ = 306, STRETCH_ = 307, TITLES_ = 308, TYPE_ = 309, UNITS_ = 310, VALUE_ = 311, VALUES_ = 312, WAVELENGTH_ = 313 }; #endif /* Tokens. */ #define EOF_ 258 #define INT 259 #define REAL 260 #define STRING 261 #define DEBUG_ 262 #define ON_ 263 #define OFF_ 264 #define AVERAGE_ 265 #define BAND_ 266 #define BANDS_ 267 #define BBL_ 268 #define BIL_ 269 #define BIP_ 270 #define BSQ_ 271 #define BYTE_ 272 #define DATA_ 273 #define DEFAULT_ 274 #define DESCRIPTION_ 275 #define ENVI_ 276 #define FACTOR_ 277 #define FRAME_ 278 #define FILE_ 279 #define FWHM_ 280 #define GAIN_ 281 #define HEADER_ 282 #define INFO_ 283 #define IGNORE_ 284 #define INTERLEAVE_ 285 #define LIMITS_ 286 #define LINES_ 287 #define MAJOR_ 288 #define MAP_ 289 #define MINOR_ 290 #define NAMES_ 291 #define OFFSET_ 292 #define OFFSETS_ 293 #define ORDER_ 294 #define PIXEL_ 295 #define PIXELS_ 296 #define PLOT_ 297 #define PROJECTION_ 298 #define RANGE_ 299 #define REFLECTANCE_ 300 #define SAMPLES_ 301 #define SCALE_ 302 #define SCANNER_ 303 #define SENSOR_ 304 #define SIZE_ 305 #define START_ 306 #define STRETCH_ 307 #define TITLES_ 308 #define TYPE_ 309 #define UNITS_ 310 #define VALUE_ 311 #define VALUES_ 312 #define WAVELENGTH_ 313 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 30 "fitsy++/enviparser.Y" { #define ENVIPARSERSIZE 1024 float real; int integer; char str[ENVIPARSERSIZE]; } /* Line 1529 of yacc.c. */ #line 172 "fitsy++/enviparser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/fitsy++/enviparser.Y000644 000765 000000 00000011472 12705446163 017316 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {FitsFile* envi} %lex-param {enviFlexLexer* ll} %parse-param {enviFlexLexer* ll} %{ #define YYDEBUG 1 #define DISCARD_(x) {yyclearin; enviDiscard(x);} #include "file.h" #undef yyFlexLexer #define yyFlexLexer enviFlexLexer #include extern int envilex(void*, enviFlexLexer*); extern void envierror(FitsFile*, enviFlexLexer*, const char*); extern void enviDiscard(int); static int numWave; static float wave[MAXWAVES]; %} %union { #define ENVIPARSERSIZE 1024 float real; int integer; char str[ENVIPARSERSIZE]; } %type numeric // Basic %token EOF_ %token INT %token REAL %token STRING %token DEBUG_ %token ON_ %token OFF_ %token AVERAGE_ %token BAND_ %token BANDS_ %token BBL_ %token BIL_ %token BIP_ %token BSQ_ %token BYTE_ %token DATA_ %token DEFAULT_ %token DESCRIPTION_ %token ENVI_ %token FACTOR_ %token FRAME_ %token FILE_ %token FWHM_ %token GAIN_ %token HEADER_ %token INFO_ %token IGNORE_ %token INTERLEAVE_ %token LIMITS_ %token LINES_ %token MAJOR_ %token MAP_ %token MINOR_ %token NAMES_ %token OFFSET_ %token OFFSETS_ %token ORDER_ %token PIXEL_ %token PIXELS_ %token PLOT_ %token PROJECTION_ %token RANGE_ %token REFLECTANCE_ %token SAMPLES_ %token SCALE_ %token SCANNER_ %token SENSOR_ %token SIZE_ %token START_ %token STRETCH_ %token TITLES_ %token TYPE_ %token UNITS_ %token VALUE_ %token VALUES_ %token WAVELENGTH_ %% //start : {yydebug=1;} commands start : {envi->setpArch(FitsFile::BIG)} commands commands: commands command terminator | command terminator ; command : /* empty */ | DEBUG_ debug | comment | ENVI_ | DESCRIPTION_ '=' liststr | SAMPLES_ '=' INT {envi->setpWidth($3);} | LINES_ '=' INT {envi->setpHeight($3);} | BANDS_ '=' INT {envi->setpDepth($3);} | HEADER_ OFFSET_ '=' INT {envi->setpSkip($4);} | MAJOR_ FRAME_ OFFSETS_ '=' listint | MINOR_ FRAME_ OFFSETS_ '=' listint | FILE_ TYPE_ '=' {DISCARD_(1)} STRING | DATA_ TYPE_ '=' bitpix | INTERLEAVE_ '=' encoding | SENSOR_ TYPE_ '=' {DISCARD_(1)} STRING | BYTE_ ORDER_ '=' endian | 'X' START_ '=' listint | 'Y' START_ '=' listint | MAP_ INFO_ '=' listmap | PROJECTION_ INFO_ '=' liststr | DEFAULT_ BANDS_ '=' listint | WAVELENGTH_ UNITS_ '=' STRING | REFLECTANCE_ SCALE_ FACTOR_ '=' numeric | 'Z' PLOT_ RANGE_ '=' listnum | 'Z' PLOT_ AVERAGE_ '=' listnum | 'Z' PLOT_ TITLES_ '=' liststr | DATA_ IGNORE_ VALUES_ '=' {DISCARD_(1)} STRING | PIXEL_ SIZE_ '=' listnum | BAND_ NAMES_ '=' liststr | WAVELENGTH_ '=' {numWave=0;} listwave | FWHM_ '=' liststr | BBL_ '=' liststr | DATA_ GAIN_ VALUES_ '=' listnum | DATA_ OFFSET_ VALUES_ '=' listnum | SCANNER_ LIMITS_ '(' PIXELS_ ')' '=' INT INT ; comment : ';' {DISCARD_(1)} STRING ; terminator: '\n' | EOF_ {YYACCEPT;} ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; bitpix : INT { switch($1) { case 1: {envi->setpBitpix(8);} break; case 2: {envi->setpBitpix(16);} break; case 12: {envi->setpBitpix(-16);} break; case 3: {envi->setpBitpix(32);} break; case 14: {envi->setpBitpix(64);} break; case 4: {envi->setpBitpix(-32);} break; case 5: {envi->setpBitpix(-64);} break; default: break; } } ; encoding : BSQ_ {envi->setpEncoding(FitsFile::BSQ);} | BIP_ {envi->setpEncoding(FitsFile::BIP);} | BIL_ {envi->setpEncoding(FitsFile::BIL);} ; endian : INT { switch($1) { case 0: {envi->setpArch(FitsFile::LITTLE);} break; case 1: {envi->setpArch(FitsFile::BIG);} break; } } ; liststr : '{' '}' | '{' strings '}' ; strings : strings STRING | STRING ; listnum : '{' numerics '}' ; numerics: numerics ',' numeric | numeric ; listint : '{' ints '}' ; ints : ints ',' INT | INT ; listmap : '{' STRING ',' INT ',' INT ',' numeric ',' numeric ',' numeric ',' numeric ',' INT listmapopt '}' ; listmapopt : /* empty */ | ',' STRING ',' STRING | ',' STRING ; listwave: '{' '}' { envi->setpCRPIX3(1); envi->setpCRVAL3(1); envi->setpCDELT3(1); } | '{' aWaves '}' { if (numWave>=2) { envi->setpCRPIX3(1); envi->setpCRVAL3(wave[0]); envi->setpCDELT3((wave[numWave-1]-wave[0])/(numWave-1)); } else { envi->setpCRPIX3(1); envi->setpCRVAL3(1); envi->setpCDELT3(1); } } ; aWaves : aWaves ',' aWave | aWaves ',' | aWave ; aWave : numeric { if (numWave < MAXWAVES) wave[numWave++] = $1; } ; %% saods9/tksao/fitsy++/file.C000644 000765 000000 00000021105 12705446164 016024 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include using namespace std; #include "file.h" // extention parser #undef yyFlexLexer #define yyFlexLexer ffFlexLexer #include void* fflval; ffFlexLexer* fflexx; extern int ffparse(FitsFile*, ffFlexLexer*); int fflex(void* vval, ffFlexLexer* ll) { fflval = vval; fflexx = ll; return ll ? ll->yylex() : 0; } void fferror(FitsFile* ff, ffFlexLexer* ll, const char* m) { ff->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') ff->error(cmd); } // nrrd parser #undef yyFlexLexer #define yyFlexLexer nrrdFlexLexer #include void* nrrdlval; nrrdFlexLexer* nrrdlexx; extern int nrrdparse(FitsFile*, nrrdFlexLexer*); int nrrdlex(void* vval, nrrdFlexLexer* ll) { nrrdlval = vval; nrrdlexx = ll; return ll ? ll->yylex() : 0; } void nrrderror(FitsFile* nrrd, nrrdFlexLexer* ll, const char* m) { nrrd->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') nrrd->error(cmd); } // envi parser #undef yyFlexLexer #define yyFlexLexer enviFlexLexer #include void* envilval; enviFlexLexer* envilexx; extern int enviparse(FitsFile*, enviFlexLexer*); int envilex(void* vval, enviFlexLexer* ll) { envilval = vval; envilexx = ll; return ll ? ll->yylex() : 0; } void envierror(FitsFile* envi, enviFlexLexer* ll, const char* m) { envi->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') envi->error(cmd); } FitsFile::FitsFile() { primary_ = NULL; managePrimary_ = 0; head_ = NULL; manageHead_ = 1; data_ = NULL; dataSize_ = 0; dataSkip_ = 0; ext_ = 0; inherit_ = 0; byteswap_ = lsb(); endian_ = BIG; valid_ = 0; pName_ = NULL; pExt_ = NULL; pIndex_ = -1; pFilter_ = NULL; pBinX_ = NULL; pBinY_ = NULL; pBinZ_ = NULL; pBitpix_ =0; pWidth_ =0; pHeight_ =0; pDepth_ =1; pSkip_ =0; pArch_ =NATIVE; pEncoding_ =RAW; pHPXOrder_ =-1; pHPXSystem_ =-1; pHPXLayout_ =-1; pHPXColumn_ =-1; pHPXQuad_ =-1; pCRPIX3_ =1; pCRVAL3_ =1; pCDELT3_ =1; pcoord_ =0; pxvalid_ =0; pxmin_ =0; pxmax_ =0; pyvalid_ =0; pymin_ =0; pymax_ =0; pzvalid_ =0; pzmin_ =0; pzmax_ =0; pbvalid_ =0; pblock_ =1; } FitsFile::~FitsFile() { if (manageHead_ && head_) delete head_; if (managePrimary_ && primary_) delete primary_; if (pName_) delete [] pName_; if (pExt_) delete [] pExt_; if (pFilter_) delete [] pFilter_; if (pBinX_) delete [] pBinX_; if (pBinY_) delete [] pBinY_; if (pBinZ_) delete [] pBinZ_; } void FitsFile::parse(const char* fn) { if (fn) { string x(fn); istringstream str(x); valid_ = 1; ffFlexLexer* ll = new ffFlexLexer(&str); ffparse(this, ll); delete ll; } if (!pBinX_ && !pBinY_) { char *env; if ((env = getenv("DS9_BINKEY"))) { string x(env); istringstream str(x); valid_ = 1; ffFlexLexer* ll = new ffFlexLexer(&str); ffparse(this, ll); delete ll; } } if (!pWidth_ && !pHeight_ && !pBitpix_) { char *env; if ((env = getenv("DS9_ARRAY"))) { string x(env); istringstream str(x); valid_ = 1; ffFlexLexer* ll = new ffFlexLexer(&str); ffparse(this, ll); delete ll; } } } void FitsFile::error(const char* m) { valid_ = 0; // cerr << m << endl; } int FitsFile::findEnd(const char* blk) { for (int j=0; jhdu()); FitsColumn* col = hdu->find(name); if (col) { if (!col->hasMinMax()) { double zmin = DBL_MAX; double zmax = -DBL_MAX; int rowlen = hdu->width(); int numrow = hdu->rows(); char* ptr = (char*)data(); for (int i=0; ivalue(ptr); if (z < zmin) zmin = z; if (z > zmax) zmax = z; } // for memory models that support internal paging resetpage(); col->setMin(zmin); col->setMax(zmax); return Vector(zmin,zmax); } else return Vector(col->getMin(), col->getMax()); } } return Vector(); } void FitsFile::setColMinMax(const char* name, const Vector& lim) { if (isBinTable()) { FitsTableHDU* hdu = (FitsTableHDU*)(head()->hdu()); FitsColumn* col = hdu->find(name); if (col) { Vector ll=lim; col->setMin(ll[0]); col->setMax(ll[1]); } } } Vector FitsFile::getColDim(const char* name) { if (isBinTable()) { FitsTableHDU* hdu = (FitsTableHDU*)(head()->hdu()); FitsColumn* col = hdu->find(name); if (col) { if (col->hasTLMinTLMax()) { Vector lim = col->dimension(); col->setMin(lim[0]); col->setMax(lim[1]); return lim; } else return getColMinMax(name); } } return Vector(); } int FitsFile::validParams() { if (!pWidth_ || !pHeight_ || !pBitpix_) return 0; // check for valid bitpix switch (pBitpix_) { case 8: case 16: case -16: case 32: case 64: case -32: case -64: break; default: return 0; } return 1; } void FitsFile::setByteSwap() { switch (pArch_) { case BIG: endian_ = pArch_; byteswap_ = lsb(); break; case LITTLE: endian_ = pArch_; byteswap_ = !lsb(); break; case NATIVE: endian_ = lsb() ? LITTLE : BIG; byteswap_ = 0; break; } } void FitsFile::parseNRRD(istream& str) { valid_ = 1; nrrdFlexLexer* ll = new nrrdFlexLexer(&str); nrrdparse(this, ll); delete ll; } void FitsFile::parseENVI(istream& str) { valid_ = 1; enviFlexLexer* ll = new enviFlexLexer(&str); enviparse(this, ll); delete ll; } int FitsFile::find(const char* name) { if (head_) { if (head_->find(name)) return 1; else if (primary_ && inherit_) if (primary_->find(name)) return 1; } return 0; } int FitsFile::getLogical(const char* name, int def) { if (head_) { int r = head_->getLogical(name,def); if (r != def) return r; else if (primary_ && inherit_) return primary_->getLogical(name,def); } return def; } int FitsFile::getInteger(const char* name, int def) { if (head_) { int r = head_->getInteger(name,def); if (r != def) return r; else if (primary_ && inherit_) return primary_->getInteger(name,def); } return def; } double FitsFile::getReal(const char* name, double def) { if (head_) { double r = head_->getReal(name,def); if (r != def) return r; else if (primary_ && inherit_) return primary_->getReal(name,def); } return def; } void FitsFile::getComplex(const char* name, double* real, double* img, double rdef, double idef) { if (head_) { head_->getComplex(name, real, img, rdef, idef); if (*real != rdef || *img != idef) return; else if (primary_ && inherit_) { primary_->getComplex(name, real, img, rdef, idef); return; } } *real = rdef; *img = idef; } char* FitsFile::getString(const char* name) { if (head_) { char* r = head_->getString(name); if (r) return r; else if (primary_ && inherit_) return primary_->getString(name); } return NULL; } char* FitsFile::getComment(const char* name) { if (head_) { char* r = head_->getComment(name); if (r) return r; else if (primary_ && inherit_) return primary_->getComment(name); } return NULL; } char* FitsFile::getKeyword(const char* name) { if (head_) { char* r = head_->getKeyword(name); if (r) return r; else if (primary_ && inherit_) return primary_->getKeyword(name); } return NULL; } saods9/tksao/fitsy++/file.h000644 000765 000000 00000015754 12705446164 016106 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsfile_h__ #define __fitsfile_h__ #include "head.h" #define B4KB 4096 #define B1MB 1048576 #define MAXWAVES 2048 extern int DebugGZ; extern int DebugCompress; class OutFitsStream; class FitsFile { public: enum FlushMode {NOFLUSH,FLUSH}; enum ScanMode {RELAX, EXACT}; enum ArchType {NATIVE,BIG,LITTLE}; enum EncodingType {RAW,ASCII,HEX,GZIP,BZ2,BIP,BIL,BSQ}; protected: FitsHead* primary_; // pointer to primary header int managePrimary_; // flag, true if we manage primary header FitsHead* head_; // pointer to header int manageHead_; // flag, true if we manage header void* data_; // pointer to raw data size_t dataSize_; // size of data memory segment size_t dataSkip_; // skip into data memory segment int ext_; // extension number int inherit_; // do we have inheritence? int byteswap_; // flag, true if byteswap is needed ArchType endian_; // endian of data int valid_; // flag, true if file is valid char* pName_; // parsed file name char* pExt_; // parsed ext name int pIndex_; // parsed ext number char* pFilter_; // unparsed filter spec char* pBinX_; // parsed bin table x col name char* pBinY_; // parsed bin table y col name char* pBinZ_; // parsed bin table z col name int pBitpix_; // parsed bitpix int pWidth_; // parsed width int pHeight_; // parsed height int pDepth_; // parsed depth size_t pSkip_; // parsed skip size ArchType pArch_; // parsed arch type EncodingType pEncoding_; // parsed encoding int pHPXOrder_; // parsed HPX params int pHPXSystem_; int pHPXLayout_; int pHPXColumn_; int pHPXQuad_; double pCRPIX3_; // WCS_3 axis params double pCRVAL3_; double pCDELT3_; int pcoord_; int pxvalid_; int pxmin_; int pxmax_; int pyvalid_; int pymin_; int pymax_; int pzvalid_; int pzmin_; int pzmax_; int pbvalid_; int pblock_; protected: void parse(const char*); void parseNRRD(istream&); void parseENVI(istream&); int validParams(); int findEnd(const char*); void setByteSwap(); public: FitsFile(); virtual ~FitsFile(); int manageHead() {return manageHead_;} virtual void done() {} virtual char* page(char* ptr, size_t r) {return ptr;} virtual void resetpage() {} void error(const char*); void* data() {return data_;} size_t dataSize() {return dataSize_;} size_t dataSkip() {return dataSkip_;} FitsHead* head() {return head_;} FitsHead* primary() {return primary_;} int ext() {return ext_;} const char* extname() {return head_ ? head_->extname() : NULL;} int inherit() {return inherit_;} void setValid(int vv) {valid_=vv;} int isValid() {return valid_;} int isImage() {return head_ ? head_->isImage() : 0;} int isTable() {return head_ ? head_->isTable() : 0;} int isAsciiTable() {return head_ ? head_->isAsciiTable() : 0;} int isBinTable() {return head_ ? head_->isBinTable() : 0;} int byteswap() {return byteswap_;} ArchType endian() {return endian_;} void setpName(const char*); void setpExt(const char*); void setpIndex(int i) {pIndex_ = i;} void setpFilter(const char*); void setpBinX(const char*); void setpBinY(const char*); void setpBinZ(const char*); void setpBinXY(const char* x, const char* y) {setpBinX(x); setpBinY(y);} void setpBinXYZ(const char* x, const char* y, const char* z) {setpBinX(x); setpBinY(y); setpBinZ(z);} const char* pName() {return pName_;} const char* pExt() {return pExt_;} int pIndex() {return pIndex_;} const char* pFilter() {return pFilter_;} const char* pBinX() {return pBinX_;} const char* pBinY() {return pBinY_;} const char* pBinZ() {return pBinZ_;} int pBitpix() {return pBitpix_;} int pWidth() {return pWidth_;} int pHeight() {return pHeight_;} int pDepth() {return pDepth_;} size_t pSkip() {return pSkip_;} ArchType pArch() {return pArch_;} void setpWidth(int i) {pWidth_ = i;} void setpHeight(int i) {pHeight_ = i;} void setpDepth(int i) {pDepth_ = i;} void setpBitpix(int b) {pBitpix_ = b;} void setpSkip(size_t s) {pSkip_ = s;} void setpArch(ArchType a) {pArch_ = a;} EncodingType pEncoding() {return pEncoding_;} void setpEncoding(EncodingType e) {pEncoding_ = e;} int pHPXOrder() {return pHPXOrder_;} int pHPXSystem() {return pHPXSystem_;} int pHPXLayout() {return pHPXLayout_;} int pHPXColumn() {return pHPXColumn_;} int pHPXQuad() {return pHPXQuad_;} void setpHPXOrder(int oo) {pHPXOrder_ = oo;} void setpHPXSystem(int ss) {pHPXSystem_ = ss;} void setpHPXLayout(int ll) {pHPXLayout_ = ll;} void setpHPXColumn(int cc) {pHPXColumn_ = cc-1;} void setpHPXQuad(int qq) {pHPXQuad_ = qq-1;} double pCRPIX3() {return pCRPIX3_;} double pCRVAL3() {return pCRVAL3_;} double pCDELT3() {return pCDELT3_;} void setpCRPIX3(double dd) {pCRPIX3_ = dd;} void setpCRVAL3(double dd) {pCRVAL3_ = dd;} void setpCDELT3(double dd) {pCDELT3_ = dd;} int pcoord() {return pcoord_;} int pxvalid() {return pxvalid_;} int pxmin() {return pxmin_;} int pxmax() {return pxmax_;} int pyvalid() {return pyvalid_;} int pymin() {return pymin_;} int pymax() {return pymax_;} int pzvalid() {return pzvalid_;} int pzmin() {return pzmin_;} int pzmax() {return pzmax_;} int pbvalid() {return pbvalid_;} int pblock() {return pblock_;} void setpcoord(int vv) {pcoord_ = vv;} void setpxvalid(int vv) {pxvalid_ = vv;} void setpxmin(int vv) {pxmin_ = vv;} void setpxmax(int vv) {pxmax_ = vv;} void setpyvalid(int vv) {pyvalid_ = vv;} void setpymin(int vv) {pymin_ = vv;} void setpymax(int vv) {pymax_ = vv;} void setpzvalid(int vv) {pzvalid_ = vv;} void setpzmin(int vv) {pzmin_ = vv;} void setpzmax(int vv) {pzmax_ = vv;} void setpbvalid(int vv) {pbvalid_ = vv;} void setpblock(int vv) {pblock_ = vv;} Vector getColMinMax(const char*); Vector getColDim(const char*); void setColMinMax(const char*, const Vector&); int find(const char* name); int getLogical(const char* name, int def); int getInteger(const char* name, int def); double getReal(const char* name, double def); void getComplex(const char* name, double* real, double* img, double rdef, double idef); char* getString(const char* name); char* getComment(const char* name); char* getKeyword(const char* name); int saveFitsPrimHeader(OutFitsStream&); int saveFitsHeader(OutFitsStream&, int); int saveFitsXtHeader(OutFitsStream&, int); int saveFits(OutFitsStream&); int saveFitsPad(OutFitsStream&, size_t, char); int saveFitsTable(OutFitsStream&); int saveFitsIISHeader(OutFitsStream&); int saveFitsIIS(OutFitsStream&, Vector&); int saveArray(OutFitsStream&, ArchType); }; #endif saods9/tksao/fitsy++/gzip.C000644 000765 000000 00000017662 12705446164 016073 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include using namespace std; #include "gzip.h" #include "zlib.h" #include "util.h" template FitsGzipm::FitsGzipm(FitsFile* fits) : FitsCompressm(fits) { FitsCompressm::uncompress(fits); } template int FitsGzipm::compressed(T* dest, char* sptr, char* heap, int kkstart, int kkstop, int jjstart, int jjstop, int iistart, int iistop) { double zs = FitsCompressm::bscale_; if (FitsCompressm::zscale_) zs = FitsCompressm::zscale_->value(sptr,0); double zz = FitsCompressm::bzero_; if (FitsCompressm::zzero_) zz = FitsCompressm::zzero_->value(sptr,0); int blank = FitsCompressm::blank_; if (FitsCompressm::zblank_) blank = (int)FitsCompressm::zblank_->value(sptr,0); int icnt=0; unsigned char* ibuf = (unsigned char*)((FitsBinColumnArray*)FitsCompressm::compress_)->get(heap, sptr, &icnt); // ibuf can be NULL if (!ibuf || !icnt) return 0; int ocnt = FitsCompressm::tilesize_; char* obuf = new char[ocnt*sizeof(long long)]; if (!obuf) { internalError("Fitsy++ gzip unable to alloc."); return 0; } z_stream zstrm; zstrm.next_in = NULL; zstrm.avail_in = 0; zstrm.zalloc = NULL; zstrm.zfree = NULL; zstrm.opaque = NULL; // look for both zlib and gzip headers if (inflateInit2(&zstrm, MAX_WBITS+32) != Z_OK) { internalError("Fitsy++ gzip inflateInit error"); if (obuf) delete [] obuf; return 0; } zstrm.avail_in = icnt; zstrm.next_in = ibuf; zstrm.avail_out = ocnt*sizeof(int); zstrm.next_out = (Bytef*)obuf; if (DebugCompress) cerr << " inflate START: avail_in " << zstrm.avail_in << " avail_out " << zstrm.avail_out << " total_in " << zstrm.total_in << " total_out " << zstrm.total_out << endl; int result = ::inflate(&zstrm, Z_FINISH); switch (result) { case Z_OK: if (DebugCompress) cerr << " inflate OK: avail_in " << zstrm.avail_in << " avail_out " << zstrm.avail_out << " total_in " << zstrm.total_in << " total_out " << zstrm.total_out << endl; break; case Z_STREAM_END: if (DebugCompress) cerr << " inflate STREAM_END: avail_in " << zstrm.avail_in << " avail_out " << zstrm.avail_out << " total_in " << zstrm.total_in << " total_out " << zstrm.total_out << endl; break; case Z_BUF_ERROR: if (DebugCompress) cerr << " inflate BUF_ERROR: avail_in " << zstrm.avail_in << " avail_out " << zstrm.avail_out << endl; if (obuf) delete [] obuf; return 0; default: internalError("Fitsy++ gzip inflate error"); if (obuf) delete [] obuf; return 0; } int bytepix = zstrm.total_out/FitsCompressm::tilesize_; inflateEnd(&zstrm); // GZIP_2- unshuffle if needed if (!strncmp(FitsCompressm::type_,"GZIP_2",6)) { switch (bytepix) { case 1: break; case 2: { int ll = ocnt*sizeof(short); char* nbuf = new char[ll]; if (!nbuf) { internalError("Fitsy++ gzip unable to alloc."); if (obuf) delete [] obuf; return 0; } char* optr = obuf+ll-1; char* nptr = nbuf+ll-1; for (int ii=0; ii::width_*FitsCompressm::height_ + jj*FitsCompressm::width_ + ii; // very carefull about type conversions T val = FitsCompressm::getValue(obuf+ll,zs,zz,blank); dest[id] = val; } break; case 2: for (int kk=kkstart; kk::byteswap_) { const char* p = (const char*)((short*)obuf+ll); union { char c[2]; short s; } u; u.c[1] = *p++; u.c[0] = *p; *((short*)obuf+ll) = u.s; } // very carefull about type conversions size_t id = kk*FitsCompressm::width_*FitsCompressm::height_ + jj*FitsCompressm::width_ + ii; T val = FitsCompressm::getValue((short*)obuf+ll,zs,zz,blank); dest[id] = val; } break; case 4: for (int kk=kkstart; kk::byteswap_) { const char* p = (const char*)((int*)obuf+ll); union { char c[4]; int i; } u; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; *((int*)obuf+ll) = u.i; } // very carefull about type conversions size_t id = kk*FitsCompressm::width_*FitsCompressm::height_ + jj*FitsCompressm::width_ + ii; T val =0; switch (FitsCompressm::quantize_) { case FitsCompress::NODITHER: val = FitsCompressm::getValue((float*)obuf+ll,zs,zz,blank); break; case FitsCompress::SUBDITHER1: case FitsCompress::SUBDITHER2: val = FitsCompressm::getValue((int*)obuf+ll,zs,zz,blank); break; } dest[id] = val; } break; case 8: for (int kk=kkstart; kk::byteswap_) { const char* p = (const char*)((long long*)obuf+ll); union { char c[8]; long long i; } u; u.c[7] = *p++; u.c[6] = *p++; u.c[5] = *p++; u.c[4] = *p++; u.c[3] = *p++; u.c[2] = *p++; u.c[1] = *p++; u.c[0] = *p; *((long long*)obuf+ll) = u.i; } // very carefull about type conversions size_t id = kk*FitsCompressm::width_*FitsCompressm::height_ + jj*FitsCompressm::width_ + ii; T val =0; switch (FitsCompressm::quantize_) { case FitsCompress::NODITHER: val = FitsCompressm::getValue((double*)obuf+ll,zs,zz,blank); break; case FitsCompress::SUBDITHER1: case FitsCompress::SUBDITHER2: val = FitsCompressm::getValue((long long*)obuf+ll,zs,zz,blank); break; } dest[id] = val; } break; default: internalError("Fitsy++ gzip illegal bytepix"); if (obuf) delete [] obuf; return 0; } if (obuf) delete [] obuf; return 1; } template class FitsGzipm; template class FitsGzipm; template class FitsGzipm; template class FitsGzipm; template class FitsGzipm; template class FitsGzipm; template class FitsGzipm; saods9/tksao/fitsy++/gzip.h000644 000765 000000 00000000645 12705446164 016131 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsgzip_h__ #define __fitsgzip_h__ #include "compress.h" template class FitsGzipm : public FitsCompressm { private: int compressed(T*, char*, char*, int, int, int, int, int, int); public: FitsGzipm(FitsFile*); }; #endif saods9/tksao/fitsy++/hcompress.C000644 000765 000000 00000006716 12705446164 017123 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include using namespace std; // Note: currently, hcompress will not work with float or double data with // BLANK defined, due to the fact that the decompress code takes a int() and // not an unsigned int() #include "hcompress.h" #include "util.h" extern "C" { int fits_hdecompress(unsigned char *input, int smooth, int *a, int *ny, int *nx, int *scale, int *status); int fits_hdecompress64(unsigned char *input, int smooth, long long *a, int *ny, int *nx, int *scale, int *status); } template FitsHcompressm::FitsHcompressm(FitsFile* fits) : FitsCompressm(fits) { // hcompress parameters smooth_ = 0; char name[] = "ZNAME "; char val[] = "ZVAL "; for (int ii=0; ii<9; ii++) { name[5] = '0'+ii; val[4] = '0'+ii; if (fits->find(name)) { char* which = fits->getString(name); if (!strncmp(which,"SMOOTH",4)) smooth_ = fits->getInteger(val,4); delete [] which; } } FitsCompressm::uncompress(fits); } template int FitsHcompressm::compressed(T* dest, char* sptr, char* heap, int kkstart, int kkstop, int jjstart, int jjstop, int iistart, int iistop) { double zs = FitsCompressm::bscale_; if (FitsCompressm::zscale_) zs = FitsCompressm::zscale_->value(sptr,0); double zz = FitsCompressm::bzero_; if (FitsCompressm::zzero_) zz = FitsCompressm::zzero_->value(sptr,0); int blank = FitsCompressm::blank_; if (FitsCompressm::zblank_) blank = (int)FitsCompressm::zblank_->value(sptr,0); int icnt=0; unsigned char* ibuf = (unsigned char*)((FitsBinColumnArray*)FitsCompressm::compress_)->get(heap, sptr, &icnt); // ibuf can be NULL if (!ibuf || !icnt) return 0; int ocnt = FitsCompressm::tilesize_; int nx,ny,scale; int status=0; int ll=0; switch (FitsCompressm::bitpix_) { case 8: case 16: { int* obuf = new int[ocnt]; if (fits_hdecompress(ibuf, smooth_, obuf, &nx, &ny, &scale, &status)) { internalError("Fitsy++ hcompress bad inflate result"); return 0; } for (int kk=kkstart; kk::width_*FitsCompressm::height_ + jj*FitsCompressm::width_ + ii] = FitsCompressm::getValue(obuf+ll,zs,zz,blank); if (obuf) delete [] obuf; } break; case 32: case -32: case -64: { long long* obuf = new long long[ocnt]; if (fits_hdecompress64(ibuf, smooth_, obuf, &nx, &ny, &scale, &status)) { internalError("Fitsy++ hcompress bad inflate result"); return 0; } for (int kk=kkstart; kk::width_*FitsCompressm::height_ + jj*FitsCompressm::width_ + ii] = FitsCompressm::getValue((int*)obuf+ll,zs,zz,blank); if (obuf) delete [] obuf; } break; } return 1; } template class FitsHcompressm; template class FitsHcompressm; template class FitsHcompressm; template class FitsHcompressm; template class FitsHcompressm; template class FitsHcompressm; template class FitsHcompressm; saods9/tksao/fitsy++/hcompress.h000644 000765 000000 00000000725 12705446164 017162 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitshcompress_h__ #define __fitshcompress_h__ #include "compress.h" template class FitsHcompressm : public FitsCompressm { protected: int smooth_; private: int compressed(T*, char*, char*, int, int, int, int, int, int); public: FitsHcompressm(FitsFile*); }; #endif saods9/tksao/fitsy++/hdecompress.c000644 000765 000000 00000173503 12536624276 017477 0ustar00joyewheel000000 000000 /* ######################################################################### These routines to apply the H-compress decompression algorithm to a 2-D Fits image were written by R. White at the STScI and were obtained from the STScI at http://www.stsci.edu/software/hcompress.html This source file is a concatination of the following sources files in the original distribution hinv.c hsmooth.c undigitize.c decode.c dodecode.c qtree_decode.c qread.c bit_input.c The following modifications have been made to the original code: - commented out redundant "include" statements - added the nextchar global variable - changed all the 'extern' declarations to 'static', since all the routines are in the same source file - changed the first parameter in decode (and in lower level routines from a file stream to a char array - modified the myread routine, and lower level byte reading routines, to copy the input bytes to a char array, instead of reading them from a file stream - changed the function declarations to the more modern ANSI C style - changed calls to printf and perror to call the CFITSIO ffpmsg routine - replace "exit" statements with "return" statements ############################################################################ */ #include #include #include #include /*#include "fitsio2.h"*/ #define LONGLONG long long #define DATA_DECOMPRESSION_ERR 0 static void ffpmsg(const char* str) {} /* WDP added test to see if min and max are already defined */ #ifndef min #define min(a,b) (((a)<(b))?(a):(b)) #endif #ifndef max #define max(a,b) (((a)>(b))?(a):(b)) #endif static long nextchar; static int decode(unsigned char *infile, int *a, int *nx, int *ny, int *scale); static int decode64(unsigned char *infile, LONGLONG *a, int *nx, int *ny, int *scale); static int hinv(int a[], int nx, int ny, int smooth ,int scale); static int hinv64(LONGLONG a[], int nx, int ny, int smooth ,int scale); static void undigitize(int a[], int nx, int ny, int scale); static void undigitize64(LONGLONG a[], int nx, int ny, int scale); static void unshuffle(int a[], int n, int n2, int tmp[]); static void unshuffle64(LONGLONG a[], int n, int n2, LONGLONG tmp[]); static void hsmooth(int a[], int nxtop, int nytop, int ny, int scale); static void hsmooth64(LONGLONG a[], int nxtop, int nytop, int ny, int scale); static void qread(unsigned char *infile,char *a, int n); static int readint(unsigned char *infile); static LONGLONG readlonglong(unsigned char *infile); static int dodecode(unsigned char *infile, int a[], int nx, int ny, unsigned char nbitplanes[3]); static int dodecode64(unsigned char *infile, LONGLONG a[], int nx, int ny, unsigned char nbitplanes[3]); static int qtree_decode(unsigned char *infile, int a[], int n, int nqx, int nqy, int nbitplanes); static int qtree_decode64(unsigned char *infile, LONGLONG a[], int n, int nqx, int nqy, int nbitplanes); static void start_inputing_bits(); static int input_bit(unsigned char *infile); static int input_nbits(unsigned char *infile, int n); /* make input_nybble a separate routine, for added effiency */ /* #define input_nybble(infile) input_nbits(infile,4) */ static int input_nybble(unsigned char *infile); static int input_nnybble(unsigned char *infile, int n, unsigned char *array); static void qtree_expand(unsigned char *infile, unsigned char a[], int nx, int ny, unsigned char b[]); static void qtree_bitins(unsigned char a[], int nx, int ny, int b[], int n, int bit); static void qtree_bitins64(unsigned char a[], int nx, int ny, LONGLONG b[], int n, int bit); static void qtree_copy(unsigned char a[], int nx, int ny, unsigned char b[], int n); static void read_bdirect(unsigned char *infile, int a[], int n, int nqx, int nqy, unsigned char scratch[], int bit); static void read_bdirect64(unsigned char *infile, LONGLONG a[], int n, int nqx, int nqy, unsigned char scratch[], int bit); static int input_huffman(unsigned char *infile); /* ---------------------------------------------------------------------- */ int fits_hdecompress(unsigned char *input, int smooth, int *a, int *ny, int *nx, int *scale, int *status) { /* decompress the input byte stream using the H-compress algorithm input - input array of compressed bytes a - pre-allocated array to hold the output uncompressed image nx - returned X axis size ny - returned Y axis size NOTE: the nx and ny dimensions as defined within this code are reversed from the usual FITS notation. ny is the fastest varying dimension, which is usually considered the X axis in the FITS image display */ int stat; if (*status > 0) return(*status); /* decode the input array */ stat = decode(input, a, nx, ny, scale); *status = stat; if (stat) return(*status); /* * Un-Digitize */ undigitize(a, *nx, *ny, *scale); /* * Inverse H-transform */ stat = hinv(a, *nx, *ny, smooth, *scale); *status = stat; return(*status); } /* ---------------------------------------------------------------------- */ int fits_hdecompress64(unsigned char *input, int smooth, LONGLONG *a, int *ny, int *nx, int *scale, int *status) { /* decompress the input byte stream using the H-compress algorithm input - input array of compressed bytes a - pre-allocated array to hold the output uncompressed image nx - returned X axis size ny - returned Y axis size NOTE: the nx and ny dimensions as defined within this code are reversed from the usual FITS notation. ny is the fastest varying dimension, which is usually considered the X axis in the FITS image display */ int stat, *iarray, ii, nval; if (*status > 0) return(*status); /* decode the input array */ stat = decode64(input, a, nx, ny, scale); *status = stat; if (stat) return(*status); /* * Un-Digitize */ undigitize64(a, *nx, *ny, *scale); /* * Inverse H-transform */ stat = hinv64(a, *nx, *ny, smooth, *scale); *status = stat; /* pack the I*8 values back into an I*4 array */ iarray = (int *) a; nval = (*nx) * (*ny); for (ii = 0; ii < nval; ii++) iarray[ii] = (int) a[ii]; return(*status); } /* ############################################################################ */ /* ############################################################################ */ /* Copyright (c) 1993 Association of Universities for Research * in Astronomy. All rights reserved. Produced under National * Aeronautics and Space Administration Contract No. NAS5-26555. */ /* hinv.c Inverse H-transform of NX x NY integer image * * Programmer: R. White Date: 23 July 1993 */ /* ############################################################################ */ static int hinv(int a[], int nx, int ny, int smooth ,int scale) /* int smooth; 0 for no smoothing, else smooth during inversion int scale; used if smoothing is specified */ { int nmax, log2n, i, j, k; int nxtop,nytop,nxf,nyf,c; int oddx,oddy; int shift, bit0, bit1, bit2, mask0, mask1, mask2, prnd0, prnd1, prnd2, nrnd0, nrnd1, nrnd2, lowbit0, lowbit1; int h0, hx, hy, hc; int s10, s00; int *tmp; /* * log2n is log2 of max(nx,ny) rounded up to next power of 2 */ nmax = (nx>ny) ? nx : ny; log2n = (int) (log((float) nmax)/log(2.0)+0.5); if ( nmax > (1<> 1; prnd1 = bit1 >> 1; prnd2 = bit2 >> 1; nrnd0 = prnd0 - 1; nrnd1 = prnd1 - 1; nrnd2 = prnd2 - 1; /* * round h0 to multiple of bit2 */ a[0] = (a[0] + ((a[0] >= 0) ? prnd2 : nrnd2)) & mask2; /* * do log2n expansions * * We're indexing a as a 2-D array with dimensions (nx,ny). */ nxtop = 1; nytop = 1; nxf = nx; nyf = ny; c = 1<=0; k--) { /* * this somewhat cryptic code generates the sequence * ntop[k-1] = (ntop[k]+1)/2, where ntop[log2n] = n */ c = c>>1; nxtop = nxtop<<1; nytop = nytop<<1; if (nxf <= c) { nxtop -= 1; } else { nxf -= c; } if (nyf <= c) { nytop -= 1; } else { nyf -= c; } /* * double shift and fix nrnd0 (because prnd0=0) on last pass */ if (k == 0) { nrnd0 = 0; shift = 2; } /* * unshuffle in each dimension to interleave coefficients */ for (i = 0; i= 0) ? prnd1 : nrnd1)) & mask1; hy = (hy + ((hy >= 0) ? prnd1 : nrnd1)) & mask1; hc = (hc + ((hc >= 0) ? prnd0 : nrnd0)) & mask0; /* * propagate bit0 of hc to hx,hy */ lowbit0 = hc & bit0; hx = (hx >= 0) ? (hx - lowbit0) : (hx + lowbit0); hy = (hy >= 0) ? (hy - lowbit0) : (hy + lowbit0); /* * Propagate bits 0 and 1 of hc,hx,hy to h0. * This could be simplified if we assume h0>0, but then * the inversion would not be lossless for images with * negative pixels. */ lowbit1 = (hc ^ hx ^ hy) & bit1; h0 = (h0 >= 0) ? (h0 + lowbit0 - lowbit1) : (h0 + ((lowbit0 == 0) ? lowbit1 : (lowbit0-lowbit1))); /* * Divide sums by 2 (4 last time) */ a[s10+1] = (h0 + hx + hy + hc) >> shift; a[s10 ] = (h0 + hx - hy - hc) >> shift; a[s00+1] = (h0 - hx + hy - hc) >> shift; a[s00 ] = (h0 - hx - hy + hc) >> shift; s00 += 2; s10 += 2; } if (oddy) { /* * do last element in row if row length is odd * s00+1, s10+1 are off edge */ h0 = a[s00 ]; hx = a[s10 ]; hx = ((hx >= 0) ? (hx+prnd1) : (hx+nrnd1)) & mask1; lowbit1 = hx & bit1; h0 = (h0 >= 0) ? (h0 - lowbit1) : (h0 + lowbit1); a[s10 ] = (h0 + hx) >> shift; a[s00 ] = (h0 - hx) >> shift; } } if (oddx) { /* * do last row if column length is odd * s10, s10+1 are off edge */ s00 = ny*i; for (j = 0; j= 0) ? (hy+prnd1) : (hy+nrnd1)) & mask1; lowbit1 = hy & bit1; h0 = (h0 >= 0) ? (h0 - lowbit1) : (h0 + lowbit1); a[s00+1] = (h0 + hy) >> shift; a[s00 ] = (h0 - hy) >> shift; s00 += 2; } if (oddy) { /* * do corner element if both row and column lengths are odd * s00+1, s10, s10+1 are off edge */ h0 = a[s00 ]; a[s00 ] = h0 >> shift; } } /* * divide all the masks and rounding values by 2 */ bit2 = bit1; bit1 = bit0; bit0 = bit0 >> 1; mask1 = mask0; mask0 = mask0 >> 1; prnd1 = prnd0; prnd0 = prnd0 >> 1; nrnd1 = nrnd0; nrnd0 = prnd0 - 1; } free(tmp); return(0); } /* ############################################################################ */ static int hinv64(LONGLONG a[], int nx, int ny, int smooth ,int scale) /* int smooth; 0 for no smoothing, else smooth during inversion int scale; used if smoothing is specified */ { int nmax, log2n, i, j, k; int nxtop,nytop,nxf,nyf,c; int oddx,oddy; int shift; LONGLONG mask0, mask1, mask2, prnd0, prnd1, prnd2, bit0, bit1, bit2; LONGLONG nrnd0, nrnd1, nrnd2, lowbit0, lowbit1; LONGLONG h0, hx, hy, hc; int s10, s00; LONGLONG *tmp; /* * log2n is log2 of max(nx,ny) rounded up to next power of 2 */ nmax = (nx>ny) ? nx : ny; log2n = (int) (log((float) nmax)/log(2.0)+0.5); if ( nmax > (1<> 1; prnd1 = bit1 >> 1; prnd2 = bit2 >> 1; nrnd0 = prnd0 - 1; nrnd1 = prnd1 - 1; nrnd2 = prnd2 - 1; /* * round h0 to multiple of bit2 */ a[0] = (a[0] + ((a[0] >= 0) ? prnd2 : nrnd2)) & mask2; /* * do log2n expansions * * We're indexing a as a 2-D array with dimensions (nx,ny). */ nxtop = 1; nytop = 1; nxf = nx; nyf = ny; c = 1<=0; k--) { /* * this somewhat cryptic code generates the sequence * ntop[k-1] = (ntop[k]+1)/2, where ntop[log2n] = n */ c = c>>1; nxtop = nxtop<<1; nytop = nytop<<1; if (nxf <= c) { nxtop -= 1; } else { nxf -= c; } if (nyf <= c) { nytop -= 1; } else { nyf -= c; } /* * double shift and fix nrnd0 (because prnd0=0) on last pass */ if (k == 0) { nrnd0 = 0; shift = 2; } /* * unshuffle in each dimension to interleave coefficients */ for (i = 0; i= 0) ? prnd1 : nrnd1)) & mask1; hy = (hy + ((hy >= 0) ? prnd1 : nrnd1)) & mask1; hc = (hc + ((hc >= 0) ? prnd0 : nrnd0)) & mask0; /* * propagate bit0 of hc to hx,hy */ lowbit0 = hc & bit0; hx = (hx >= 0) ? (hx - lowbit0) : (hx + lowbit0); hy = (hy >= 0) ? (hy - lowbit0) : (hy + lowbit0); /* * Propagate bits 0 and 1 of hc,hx,hy to h0. * This could be simplified if we assume h0>0, but then * the inversion would not be lossless for images with * negative pixels. */ lowbit1 = (hc ^ hx ^ hy) & bit1; h0 = (h0 >= 0) ? (h0 + lowbit0 - lowbit1) : (h0 + ((lowbit0 == 0) ? lowbit1 : (lowbit0-lowbit1))); /* * Divide sums by 2 (4 last time) */ a[s10+1] = (h0 + hx + hy + hc) >> shift; a[s10 ] = (h0 + hx - hy - hc) >> shift; a[s00+1] = (h0 - hx + hy - hc) >> shift; a[s00 ] = (h0 - hx - hy + hc) >> shift; s00 += 2; s10 += 2; } if (oddy) { /* * do last element in row if row length is odd * s00+1, s10+1 are off edge */ h0 = a[s00 ]; hx = a[s10 ]; hx = ((hx >= 0) ? (hx+prnd1) : (hx+nrnd1)) & mask1; lowbit1 = hx & bit1; h0 = (h0 >= 0) ? (h0 - lowbit1) : (h0 + lowbit1); a[s10 ] = (h0 + hx) >> shift; a[s00 ] = (h0 - hx) >> shift; } } if (oddx) { /* * do last row if column length is odd * s10, s10+1 are off edge */ s00 = ny*i; for (j = 0; j= 0) ? (hy+prnd1) : (hy+nrnd1)) & mask1; lowbit1 = hy & bit1; h0 = (h0 >= 0) ? (h0 - lowbit1) : (h0 + lowbit1); a[s00+1] = (h0 + hy) >> shift; a[s00 ] = (h0 - hy) >> shift; s00 += 2; } if (oddy) { /* * do corner element if both row and column lengths are odd * s00+1, s10, s10+1 are off edge */ h0 = a[s00 ]; a[s00 ] = h0 >> shift; } } /* * divide all the masks and rounding values by 2 */ bit2 = bit1; bit1 = bit0; bit0 = bit0 >> 1; mask1 = mask0; mask0 = mask0 >> 1; prnd1 = prnd0; prnd0 = prnd0 >> 1; nrnd1 = nrnd0; nrnd0 = prnd0 - 1; } free(tmp); return(0); } /* ############################################################################ */ static void unshuffle(int a[], int n, int n2, int tmp[]) /* int a[]; array to shuffle int n; number of elements to shuffle int n2; second dimension int tmp[]; scratch storage */ { int i; int nhalf; int *p1, *p2, *pt; /* * copy 2nd half of array to tmp */ nhalf = (n+1)>>1; pt = tmp; p1 = &a[n2*nhalf]; /* pointer to a[i] */ for (i=nhalf; i= 0; i--) { *p1 = *p2; p2 -= n2; p1 -= (n2+n2); } /* * now distribute 2nd half of array (in tmp) to odd elements */ pt = tmp; p1 = &a[n2]; /* pointer to a[i] */ for (i=1; i>1; pt = tmp; p1 = &a[n2*nhalf]; /* pointer to a[i] */ for (i=nhalf; i= 0; i--) { *p1 = *p2; p2 -= n2; p1 -= (n2+n2); } /* * now distribute 2nd half of array (in tmp) to odd elements */ pt = tmp; p1 = &a[n2]; /* pointer to a[i] */ for (i=1; i> 1); if (smax <= 0) return; ny2 = ny << 1; /* * We're indexing a as a 2-D array with dimensions (nxtop,ny) of which * only (nxtop,nytop) are used. The coefficients on the edge of the * array are not adjusted (which is why the loops below start at 2 * instead of 0 and end at nxtop-2 instead of nxtop.) */ /* * Adjust x difference hx */ for (i = 2; i=0, dmin<=0. */ if (dmin < dmax) { diff = max( min(diff, dmax), dmin); /* * Compute change in slope limited to range +/- smax. * Careful with rounding negative numbers when using * shift for divide by 8. */ s = diff-(a[s10]<<3); s = (s>=0) ? (s>>3) : ((s+7)>>3) ; s = max( min(s, smax), -smax); a[s10] = a[s10]+s; } s00 += 2; s10 += 2; } } /* * Adjust y difference hy */ for (i = 0; i=0) ? (s>>3) : ((s+7)>>3) ; s = max( min(s, smax), -smax); a[s00+1] = a[s00+1]+s; } s00 += 2; s10 += 2; } } /* * Adjust curvature difference hc */ for (i = 2; i=0, dmin<=0. */ if (dmin < dmax) { diff = max( min(diff, dmax), dmin); /* * Compute change in slope limited to range +/- smax. * Careful with rounding negative numbers when using * shift for divide by 64. */ s = diff-(a[s10+1]<<6); s = (s>=0) ? (s>>6) : ((s+63)>>6) ; s = max( min(s, smax), -smax); a[s10+1] = a[s10+1]+s; } s00 += 2; s10 += 2; } } } /* ############################################################################ */ static void hsmooth64(LONGLONG a[], int nxtop, int nytop, int ny, int scale) /* LONGLONG a[]; array of H-transform coefficients int nxtop,nytop; size of coefficient block to use int ny; actual 1st dimension of array int scale; truncation scale factor that was used */ { int i, j; int ny2, s10, s00; LONGLONG hm, h0, hp, hmm, hpm, hmp, hpp, hx2, hy2, diff, dmax, dmin, s, smax, m1, m2; /* * Maximum change in coefficients is determined by scale factor. * Since we rounded during division (see digitize.c), the biggest * permitted change is scale/2. */ smax = (scale >> 1); if (smax <= 0) return; ny2 = ny << 1; /* * We're indexing a as a 2-D array with dimensions (nxtop,ny) of which * only (nxtop,nytop) are used. The coefficients on the edge of the * array are not adjusted (which is why the loops below start at 2 * instead of 0 and end at nxtop-2 instead of nxtop.) */ /* * Adjust x difference hx */ for (i = 2; i=0, dmin<=0. */ if (dmin < dmax) { diff = max( min(diff, dmax), dmin); /* * Compute change in slope limited to range +/- smax. * Careful with rounding negative numbers when using * shift for divide by 8. */ s = diff-(a[s10]<<3); s = (s>=0) ? (s>>3) : ((s+7)>>3) ; s = max( min(s, smax), -smax); a[s10] = a[s10]+s; } s00 += 2; s10 += 2; } } /* * Adjust y difference hy */ for (i = 0; i=0) ? (s>>3) : ((s+7)>>3) ; s = max( min(s, smax), -smax); a[s00+1] = a[s00+1]+s; } s00 += 2; s10 += 2; } } /* * Adjust curvature difference hc */ for (i = 2; i=0, dmin<=0. */ if (dmin < dmax) { diff = max( min(diff, dmax), dmin); /* * Compute change in slope limited to range +/- smax. * Careful with rounding negative numbers when using * shift for divide by 64. */ s = diff-(a[s10+1]<<6); s = (s>=0) ? (s>>6) : ((s+63)>>6) ; s = max( min(s, smax), -smax); a[s10+1] = a[s10+1]+s; } s00 += 2; s10 += 2; } } } /* ############################################################################ */ /* ############################################################################ */ /* Copyright (c) 1993 Association of Universities for Research * in Astronomy. All rights reserved. Produced under National * Aeronautics and Space Administration Contract No. NAS5-26555. */ /* undigitize.c undigitize H-transform * * Programmer: R. White Date: 9 May 1991 */ /* ############################################################################ */ static void undigitize(int a[], int nx, int ny, int scale) { int *p; /* * multiply by scale */ if (scale <= 1) return; for (p=a; p <= &a[nx*ny-1]; p++) *p = (*p)*scale; } /* ############################################################################ */ static void undigitize64(LONGLONG a[], int nx, int ny, int scale) { LONGLONG *p, scale64; /* * multiply by scale */ if (scale <= 1) return; scale64 = (LONGLONG) scale; /* use a 64-bit int for efficiency in the big loop */ for (p=a; p <= &a[nx*ny-1]; p++) *p = (*p)*scale64; } /* ############################################################################ */ /* ############################################################################ */ /* Copyright (c) 1993 Association of Universities for Research * in Astronomy. All rights reserved. Produced under National * Aeronautics and Space Administration Contract No. NAS5-26555. */ /* decode.c read codes from infile and construct array * * Programmer: R. White Date: 2 February 1994 */ static char code_magic[2] = { (char)0xDD, (char)0x99 }; /* ############################################################################ */ static int decode(unsigned char *infile, int *a, int *nx, int *ny, int *scale) /* char *infile; input file int *a; address of output array [nx][ny] int *nx,*ny; size of output array int *scale; scale factor for digitization */ { LONGLONG sumall; int nel, stat; unsigned char nbitplanes[3]; char tmagic[2]; /* initialize the byte read position to the beginning of the array */; nextchar = 0; /* * File starts either with special 2-byte magic code or with * FITS keyword "SIMPLE =" */ qread(infile, tmagic, sizeof(tmagic)); /* * check for correct magic code value */ if (memcmp(tmagic,code_magic,sizeof(code_magic)) != 0) { ffpmsg("bad file format"); return(DATA_DECOMPRESSION_ERR); } *nx =readint(infile); /* x size of image */ *ny =readint(infile); /* y size of image */ *scale=readint(infile); /* scale factor for digitization */ nel = (*nx) * (*ny); /* sum of all pixels */ sumall=readlonglong(infile); /* # bits in quadrants */ qread(infile, (char *) nbitplanes, sizeof(nbitplanes)); stat = dodecode(infile, a, *nx, *ny, nbitplanes); /* * put sum of all pixels back into pixel 0 */ a[0] = (int) sumall; return(stat); } /* ############################################################################ */ static int decode64(unsigned char *infile, LONGLONG *a, int *nx, int *ny, int *scale) /* char *infile; input file LONGLONG *a; address of output array [nx][ny] int *nx,*ny; size of output array int *scale; scale factor for digitization */ { int nel, stat; LONGLONG sumall; unsigned char nbitplanes[3]; char tmagic[2]; /* initialize the byte read position to the beginning of the array */; nextchar = 0; /* * File starts either with special 2-byte magic code or with * FITS keyword "SIMPLE =" */ qread(infile, tmagic, sizeof(tmagic)); /* * check for correct magic code value */ if (memcmp(tmagic,code_magic,sizeof(code_magic)) != 0) { ffpmsg("bad file format"); return(DATA_DECOMPRESSION_ERR); } *nx =readint(infile); /* x size of image */ *ny =readint(infile); /* y size of image */ *scale=readint(infile); /* scale factor for digitization */ nel = (*nx) * (*ny); /* sum of all pixels */ sumall=readlonglong(infile); /* # bits in quadrants */ qread(infile, (char *) nbitplanes, sizeof(nbitplanes)); stat = dodecode64(infile, a, *nx, *ny, nbitplanes); /* * put sum of all pixels back into pixel 0 */ a[0] = sumall; return(stat); } /* ############################################################################ */ /* ############################################################################ */ /* Copyright (c) 1993 Association of Universities for Research * in Astronomy. All rights reserved. Produced under National * Aeronautics and Space Administration Contract No. NAS5-26555. */ /* dodecode.c Decode stream of characters on infile and return array * * This version encodes the different quadrants separately * * Programmer: R. White Date: 9 May 1991 */ /* ############################################################################ */ static int dodecode(unsigned char *infile, int a[], int nx, int ny, unsigned char nbitplanes[3]) /* int a[]; int nx,ny; Array dimensions are [nx][ny] unsigned char nbitplanes[3]; Number of bit planes in quadrants */ { int i, nel, nx2, ny2, stat; nel = nx*ny; nx2 = (nx+1)/2; ny2 = (ny+1)/2; /* * initialize a to zero */ for (i=0; inqy) ? nqx : nqy; log2n = (int) (log((float) nqmax)/log(2.0)+0.5); if (nqmax > (1<= 0; bit--) { /* * Was bitplane was quadtree-coded or written directly? */ b = input_nybble(infile); if(b == 0) { /* * bit map was written directly */ read_bdirect(infile,a,n,nqx,nqy,scratch,bit); } else if (b != 0xf) { ffpmsg("qtree_decode: bad format code"); return(DATA_DECOMPRESSION_ERR); } else { /* * bitmap was quadtree-coded, do log2n expansions * * read first code */ scratch[0] = input_huffman(infile); /* * now do log2n expansions, reading codes from file as necessary */ nx = 1; ny = 1; nfx = nqx; nfy = nqy; c = 1<>1; nx = nx<<1; ny = ny<<1; if (nfx <= c) { nx -= 1; } else { nfx -= c; } if (nfy <= c) { ny -= 1; } else { nfy -= c; } qtree_expand(infile,scratch,nx,ny,scratch); } /* * now copy last set of 4-bit codes to bitplane bit of array a */ qtree_bitins(scratch,nqx,nqy,a,n,bit); } } free(scratch); return(0); } /* ############################################################################ */ static int qtree_decode64(unsigned char *infile, LONGLONG a[], int n, int nqx, int nqy, int nbitplanes) /* char *infile; LONGLONG a[]; a is 2-D array with dimensions (n,n) int n; length of full row in a int nqx; partial length of row to decode int nqy; partial length of column (<=n) int nbitplanes; number of bitplanes to decode */ { int log2n, k, bit, b, nqmax; int nx,ny,nfx,nfy,c; int nqx2, nqy2; unsigned char *scratch; /* * log2n is log2 of max(nqx,nqy) rounded up to next power of 2 */ nqmax = (nqx>nqy) ? nqx : nqy; log2n = (int) (log((float) nqmax)/log(2.0)+0.5); if (nqmax > (1<= 0; bit--) { /* * Was bitplane was quadtree-coded or written directly? */ b = input_nybble(infile); if(b == 0) { /* * bit map was written directly */ read_bdirect64(infile,a,n,nqx,nqy,scratch,bit); } else if (b != 0xf) { ffpmsg("qtree_decode64: bad format code"); return(DATA_DECOMPRESSION_ERR); } else { /* * bitmap was quadtree-coded, do log2n expansions * * read first code */ scratch[0] = input_huffman(infile); /* * now do log2n expansions, reading codes from file as necessary */ nx = 1; ny = 1; nfx = nqx; nfy = nqy; c = 1<>1; nx = nx<<1; ny = ny<<1; if (nfx <= c) { nx -= 1; } else { nfx -= c; } if (nfy <= c) { ny -= 1; } else { nfy -= c; } qtree_expand(infile,scratch,nx,ny,scratch); } /* * now copy last set of 4-bit codes to bitplane bit of array a */ qtree_bitins64(scratch,nqx,nqy,a,n,bit); } } free(scratch); return(0); } /* ############################################################################ */ /* * do one quadtree expansion step on array a[(nqx+1)/2,(nqy+1)/2] * results put into b[nqx,nqy] (which may be the same as a) */ static void qtree_expand(unsigned char *infile, unsigned char a[], int nx, int ny, unsigned char b[]) { int i; /* * first copy a to b, expanding each 4-bit value */ qtree_copy(a,nx,ny,b,ny); /* * now read new 4-bit values into b for each non-zero element */ for (i = nx*ny-1; i >= 0; i--) { if (b[i]) b[i] = input_huffman(infile); } } /* ############################################################################ */ /* * copy 4-bit values from a[(nx+1)/2,(ny+1)/2] to b[nx,ny], expanding * each value to 2x2 pixels * a,b may be same array */ static void qtree_copy(unsigned char a[], int nx, int ny, unsigned char b[], int n) /* int n; declared y dimension of b */ { int i, j, k, nx2, ny2; int s00, s10; /* * first copy 4-bit values to b * start at end in case a,b are same array */ nx2 = (nx+1)/2; ny2 = (ny+1)/2; k = ny2*(nx2-1)+ny2-1; /* k is index of a[i,j] */ for (i = nx2-1; i >= 0; i--) { s00 = 2*(n*i+ny2-1); /* s00 is index of b[2*i,2*j] */ for (j = ny2-1; j >= 0; j--) { b[s00] = a[k]; k -= 1; s00 -= 2; } } /* * now expand each 2x2 block */ for (i = 0; i>1) & 1; b[s00+1] = (b[s00]>>2) & 1; b[s00 ] = (b[s00]>>3) & 1; */ s00 += 2; s10 += 2; } if (j < ny) { /* * row size is odd, do last element in row * s00+1, s10+1 are off edge */ /* not worth converting this to use 16 case statements */ b[s10 ] = (b[s00]>>1) & 1; b[s00 ] = (b[s00]>>3) & 1; } } if (i < nx) { /* * column size is odd, do last row * s10, s10+1 are off edge */ s00 = n*i; for (j = 0; j>2) & 1; b[s00 ] = (b[s00]>>3) & 1; s00 += 2; } if (j < ny) { /* * both row and column size are odd, do corner element * s00+1, s10, s10+1 are off edge */ /* not worth converting this to use 16 case statements */ b[s00 ] = (b[s00]>>3) & 1; } } } /* ############################################################################ */ /* * Copy 4-bit values from a[(nx+1)/2,(ny+1)/2] to b[nx,ny], expanding * each value to 2x2 pixels and inserting into bitplane BIT of B. * A,B may NOT be same array (it wouldn't make sense to be inserting * bits into the same array anyway.) */ static void qtree_bitins(unsigned char a[], int nx, int ny, int b[], int n, int bit) /* int n; declared y dimension of b */ { int i, j, k; int s00; int plane_val; plane_val = 1 << bit; /* * expand each 2x2 block */ k = 0; /* k is index of a[i/2,j/2] */ for (i = 0; i>1) & 1) << bit; b[s00+1] |= ((a[k]>>2) & 1) << bit; b[s00 ] |= ((a[k]>>3) & 1) << bit; */ s00 += 2; /* s10 += 2; */ k += 1; } if (j < ny) { /* * row size is odd, do last element in row * s00+1, s10+1 are off edge */ switch (a[k]) { case(0): break; case(1): break; case(2): b[s00+n ] |= plane_val; break; case(3): b[s00+n ] |= plane_val; break; case(4): break; case(5): break; case(6): b[s00+n ] |= plane_val; break; case(7): b[s00+n ] |= plane_val; break; case(8): b[s00 ] |= plane_val; break; case(9): b[s00 ] |= plane_val; break; case(10): b[s00+n ] |= plane_val; b[s00 ] |= plane_val; break; case(11): b[s00+n ] |= plane_val; b[s00 ] |= plane_val; break; case(12): b[s00 ] |= plane_val; break; case(13): b[s00 ] |= plane_val; break; case(14): b[s00+n ] |= plane_val; b[s00 ] |= plane_val; break; case(15): b[s00+n ] |= plane_val; b[s00 ] |= plane_val; break; } /* b[s10 ] |= ((a[k]>>1) & 1) << bit; b[s00 ] |= ((a[k]>>3) & 1) << bit; */ k += 1; } } if (i < nx) { /* * column size is odd, do last row * s10, s10+1 are off edge */ s00 = n*i; for (j = 0; j>2) & 1) << bit; b[s00 ] |= ((a[k]>>3) & 1) << bit; */ s00 += 2; k += 1; } if (j < ny) { /* * both row and column size are odd, do corner element * s00+1, s10, s10+1 are off edge */ switch (a[k]) { case(0): break; case(1): break; case(2): break; case(3): break; case(4): break; case(5): break; case(6): break; case(7): break; case(8): b[s00 ] |= plane_val; break; case(9): b[s00 ] |= plane_val; break; case(10): b[s00 ] |= plane_val; break; case(11): b[s00 ] |= plane_val; break; case(12): b[s00 ] |= plane_val; break; case(13): b[s00 ] |= plane_val; break; case(14): b[s00 ] |= plane_val; break; case(15): b[s00 ] |= plane_val; break; } /* b[s00 ] |= ((a[k]>>3) & 1) << bit; */ k += 1; } } } /* ############################################################################ */ /* * Copy 4-bit values from a[(nx+1)/2,(ny+1)/2] to b[nx,ny], expanding * each value to 2x2 pixels and inserting into bitplane BIT of B. * A,B may NOT be same array (it wouldn't make sense to be inserting * bits into the same array anyway.) */ static void qtree_bitins64(unsigned char a[], int nx, int ny, LONGLONG b[], int n, int bit) /* int n; declared y dimension of b */ { int i, j, k; int s00; int plane_val; plane_val = 1 << bit; /* * expand each 2x2 block */ k = 0; /* k is index of a[i/2,j/2] */ for (i = 0; i>1) & 1) << bit; b[s00+1] |= ((((LONGLONG)a[k])>>2) & 1) << bit; b[s00 ] |= ((((LONGLONG)a[k])>>3) & 1) << bit; */ s00 += 2; /* s10 += 2; */ k += 1; } if (j < ny) { /* * row size is odd, do last element in row * s00+1, s10+1 are off edge */ switch (a[k]) { case(0): break; case(1): break; case(2): b[s00+n ] |= plane_val; break; case(3): b[s00+n ] |= plane_val; break; case(4): break; case(5): break; case(6): b[s00+n ] |= plane_val; break; case(7): b[s00+n ] |= plane_val; break; case(8): b[s00 ] |= plane_val; break; case(9): b[s00 ] |= plane_val; break; case(10): b[s00+n ] |= plane_val; b[s00 ] |= plane_val; break; case(11): b[s00+n ] |= plane_val; b[s00 ] |= plane_val; break; case(12): b[s00 ] |= plane_val; break; case(13): b[s00 ] |= plane_val; break; case(14): b[s00+n ] |= plane_val; b[s00 ] |= plane_val; break; case(15): b[s00+n ] |= plane_val; b[s00 ] |= plane_val; break; } /* b[s10 ] |= ((((LONGLONG)a[k])>>1) & 1) << bit; b[s00 ] |= ((((LONGLONG)a[k])>>3) & 1) << bit; */ k += 1; } } if (i < nx) { /* * column size is odd, do last row * s10, s10+1 are off edge */ s00 = n*i; for (j = 0; j>2) & 1) << bit; b[s00 ] |= ((((LONGLONG)a[k])>>3) & 1) << bit; */ s00 += 2; k += 1; } if (j < ny) { /* * both row and column size are odd, do corner element * s00+1, s10, s10+1 are off edge */ switch (a[k]) { case(0): break; case(1): break; case(2): break; case(3): break; case(4): break; case(5): break; case(6): break; case(7): break; case(8): b[s00 ] |= plane_val; break; case(9): b[s00 ] |= plane_val; break; case(10): b[s00 ] |= plane_val; break; case(11): b[s00 ] |= plane_val; break; case(12): b[s00 ] |= plane_val; break; case(13): b[s00 ] |= plane_val; break; case(14): b[s00 ] |= plane_val; break; case(15): b[s00 ] |= plane_val; break; } /* b[s00 ] |= ((((LONGLONG)a[k])>>3) & 1) << bit; */ k += 1; } } } /* ############################################################################ */ static void read_bdirect(unsigned char *infile, int a[], int n, int nqx, int nqy, unsigned char scratch[], int bit) { /* * read bit image packed 4 pixels/nybble */ /* int i; for (i = 0; i < ((nqx+1)/2) * ((nqy+1)/2); i++) { scratch[i] = input_nybble(infile); } */ input_nnybble(infile, ((nqx+1)/2) * ((nqy+1)/2), scratch); /* * insert in bitplane BIT of image A */ qtree_bitins(scratch,nqx,nqy,a,n,bit); } /* ############################################################################ */ static void read_bdirect64(unsigned char *infile, LONGLONG a[], int n, int nqx, int nqy, unsigned char scratch[], int bit) { /* * read bit image packed 4 pixels/nybble */ /* int i; for (i = 0; i < ((nqx+1)/2) * ((nqy+1)/2); i++) { scratch[i] = input_nybble(infile); } */ input_nnybble(infile, ((nqx+1)/2) * ((nqy+1)/2), scratch); /* * insert in bitplane BIT of image A */ qtree_bitins64(scratch,nqx,nqy,a,n,bit); } /* ############################################################################ */ /* * Huffman decoding for fixed codes * * Coded values range from 0-15 * * Huffman code values (hex): * * 3e, 00, 01, 08, 02, 09, 1a, 1b, * 03, 1c, 0a, 1d, 0b, 1e, 3f, 0c * * and number of bits in each code: * * 6, 3, 3, 4, 3, 4, 5, 5, * 3, 5, 4, 5, 4, 5, 6, 4 */ static int input_huffman(unsigned char *infile) { int c; /* * get first 3 bits to start */ c = input_nbits(infile,3); if (c < 4) { /* * this is all we need * return 1,2,4,8 for c=0,1,2,3 */ return(1<>bits_to_go) & 1); } /* ############################################################################ */ /* INPUT N BITS (N must be <= 8) */ static int input_nbits(unsigned char *infile, int n) { /* AND mask for retreiving the right-most n bits */ static int mask[9] = {0, 1, 3, 7, 15, 31, 63, 127, 255}; if (bits_to_go < n) { /* * need another byte's worth of bits */ buffer2 = (buffer2<<8) | (int) infile[nextchar]; nextchar++; bits_to_go += 8; } /* * now pick off the first n bits */ bits_to_go -= n; /* there was a slight gain in speed by replacing the following line */ /* return( (buffer2>>bits_to_go) & ((1<>bits_to_go) & (*(mask+n)) ); } /* ############################################################################ */ /* INPUT 4 BITS */ static int input_nybble(unsigned char *infile) { if (bits_to_go < 4) { /* * need another byte's worth of bits */ buffer2 = (buffer2<<8) | (int) infile[nextchar]; nextchar++; bits_to_go += 8; } /* * now pick off the first 4 bits */ bits_to_go -= 4; return( (buffer2>>bits_to_go) & 15 ); } /* ############################################################################ */ /* INPUT array of 4 BITS */ static int input_nnybble(unsigned char *infile, int n, unsigned char array[]) { /* copy n 4-bit nybbles from infile to the lower 4 bits of array */ int ii, kk, shift1, shift2; /* forcing byte alignment doesn;t help, and even makes it go slightly slower if (bits_to_go != 8) input_nbits(infile, bits_to_go); */ if (n == 1) { array[0] = input_nybble(infile); return(0); } if (bits_to_go == 8) { /* already have 2 full nybbles in buffer2, so backspace the infile array to reuse last char */ nextchar--; bits_to_go = 0; } /* bits_to_go now has a value in the range 0 - 7. After adding */ /* another byte, bits_to_go effectively will be in range 8 - 15 */ shift1 = bits_to_go + 4; /* shift1 will be in range 4 - 11 */ shift2 = bits_to_go; /* shift2 will be in range 0 - 7 */ kk = 0; /* special case */ if (bits_to_go == 0) { for (ii = 0; ii < n/2; ii++) { /* * refill the buffer with next byte */ buffer2 = (buffer2<<8) | (int) infile[nextchar]; nextchar++; array[kk] = (int) ((buffer2>>4) & 15); array[kk + 1] = (int) ((buffer2) & 15); /* no shift required */ kk += 2; } } else { for (ii = 0; ii < n/2; ii++) { /* * refill the buffer with next byte */ buffer2 = (buffer2<<8) | (int) infile[nextchar]; nextchar++; array[kk] = (int) ((buffer2>>shift1) & 15); array[kk + 1] = (int) ((buffer2>>shift2) & 15); kk += 2; } } if (ii * 2 != n) { /* have to read last odd byte */ array[n-1] = input_nybble(infile); } return( (buffer2>>bits_to_go) & 15 ); } saods9/tksao/fitsy++/hdu.C000644 000765 000000 00000016035 12705446164 015673 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include #include #include #include using namespace std; #include "hdu.h" #include "head.h" FitsHDU::FitsHDU(FitsHead* head) { extname_ = head->getString("EXTNAME"); // trim any spaces at end if (extname_) { for (int ii=strlen(extname_)-1; ii>=0; ii--) { if (extname_[ii] == ' ') extname_[ii] = '\0'; else break; } } extver_ = head->getInteger("EXTVER", 0); bitpix_ = head->getInteger("BITPIX", 0); naxes_ = head->getInteger("NAXIS", 0); if (naxes_>FTY_MAXAXES) naxes_ = FTY_MAXAXES; // init naxis_ for(int i=0; igetInteger(keycat("NAXIS",(i+1)), 0); // special case: 1D image if (naxis_[0]>0 && naxis_[1]==0) naxis_[1] = 1; realbytes_ = 0; heapbytes_ = head->getInteger("PCOUNT",0); allbytes_ = 0; padbytes_ = 0; databytes_ = 0; datablocks_ = 0; } FitsHDU::~FitsHDU() { if (extname_) delete [] extname_; } char* FitsHDU::keycat(const char* name, int i) { ostringstream str; str << name << i << ends; memcpy(keybuf,str.str().c_str(),str.str().length()); return keybuf; } void FitsHDU::updateCards(FitsHead* head) { head->setInteger("BITPIX", bitpix_, NULL); head->setInteger("NAXIS", naxes_, NULL); for (int i=1; i<=naxes_; i++) head->setInteger(keycat("NAXIS", i), naxis_[i-1], NULL); } // FitsImageHDU FitsImageHDU::FitsImageHDU(FitsHead* head) : FitsHDU(head) { size_t imgpixels = (size_t)naxis_[0]*naxis_[1]; imgbytes_ = imgpixels * (abs(bitpix_)/8); size_t realpixels; if (naxes_>0) { realpixels = 1; for (int i=0; igetReal("BZERO", 0.0); bscale_ = head->getReal("BSCALE", 1.0); hasblank_ = head->find("BLANK") ? 1:0; blank_ = head->getInteger("BLANK", 0); } void FitsImageHDU::updateCards(FitsHead* head) { FitsHDU::updateCards(head); if (blank_) if (bitpix_ > 0) head->setInteger("BLANK", blank_, NULL); if (bzero_) head->setReal("BZERO", bzero_ , 7, NULL); if (bscale_ != 1) head->setReal("BSCALE", bscale_, 7, NULL); } // FitsTableHDU FitsTableHDU::FitsTableHDU(FitsHead* head) : FitsHDU(head) { tfields_ = head->getInteger("TFIELDS", 0); cols_ = NULL; // number of rows * width of row in bytes realbytes_ = (size_t)naxis_[0]*naxis_[1]; allbytes_ = realbytes_ + heapbytes_; datablocks_ = (allbytes_ + (FTY_BLOCK-1))/FTY_BLOCK; databytes_ = datablocks_ * FTY_BLOCK; padbytes_ = databytes_ - allbytes_; } FitsTableHDU::~FitsTableHDU() { if (cols_) { for (int i=0; ittype() << ' '; str << ends; return dupstr(str.str().c_str()); } FitsColumn* FitsTableHDU::find(const char* name) { char* n = toUpper(name); // trim any spaces char* nn = n; while (*nn) nn++; nn--; while (*nn == ' ') *nn-- = '\0'; for (int i=0; ittype()); // trim any spaces char* tt=t; while (*tt) tt++; tt--; while (*tt == ' ') *tt-- = '\0'; if (!strncmp(n,t,strlen(n)) && strlen(n)==strlen(t)) { delete [] n; delete [] t; return cols_[i]; } delete [] t; } } delete [] n; return NULL; } FitsColumn* FitsTableHDU::find(int i) { if (i>=0 && idimension() : Vector(); } FitsAsciiTableHDU::FitsAsciiTableHDU(FitsHead* head) : FitsTableHDU(head) { cols_ = new FitsColumn*[tfields_]; size_t offset = 0; for (int i=0; igetString(keycat("TFORM",i+1)); char type = 'F'; if (tform) { string x(tform); istringstream str(x); str >> type; } switch (type) { case 'A': cols_[i] = new FitsAsciiColumnStr(head, i+1, offset); break; case 'I': cols_[i] = new FitsAsciiColumnT(head, i+1, offset); break; case 'F': cols_[i] = new FitsAsciiColumnT(head, i+1, offset); break; case 'E': cols_[i] = new FitsAsciiColumnT(head, i+1, offset); break; case 'D': cols_[i] = new FitsAsciiColumnT(head, i+1, offset); break; } delete [] tform; if (cols_[i]) offset += cols_[i]->width(); } } FitsBinTableHDU::FitsBinTableHDU(FitsHead* head) : FitsTableHDU(head) { cols_ = new FitsColumn*[tfields_]; int offset =0; for (int i=0; igetString(keycat("TFORM",i+1)); int repeat; char type = 'J'; if (tform) { string x(tform); istringstream str(x); if (isalpha(tform[0])) str >> type; else str >> repeat >> type; } switch (type) { case 'L': cols_[i] = new FitsBinColumnLogical(head, i+1, offset); break; case 'X': cols_[i] = new FitsBinColumnBit(head, i+1, offset); break; case 'B': cols_[i] = new FitsBinColumnT(head, i+1, offset); break; case 'I': cols_[i] = new FitsBinColumnT(head, i+1, offset); break; case 'U': cols_[i] = new FitsBinColumnT(head, i+1, offset); break; case 'J': cols_[i] = new FitsBinColumnT(head, i+1, offset); break; case 'V': cols_[i] = new FitsBinColumnT(head, i+1, offset); break; case 'K': cols_[i] = new FitsBinColumnT(head, i+1, offset); break; case 'A': cols_[i] = new FitsBinColumnStr(head, i+1, offset); break; case 'E': cols_[i] = new FitsBinColumnT(head, i+1, offset); break; case 'D': cols_[i] = new FitsBinColumnT(head, i+1, offset); break; case 'C': cols_[i] = NULL; internalError("Fitsy++ hdu single precision complex column type not supported"); break; case 'M': cols_[i] = NULL; internalError("Fitsy++ hdu double precision complex column type not supported"); break; case 'P': cols_[i] = new FitsBinColumnArrayP(head, i+1, offset); break; case 'Q': cols_[i] = new FitsBinColumnArrayQ(head, i+1, offset); break; default: cols_[i] = NULL; internalError("Fitsy++ hdu unknown table column type"); break; } delete [] tform; if (cols_[i]) offset += cols_[i]->width(); } } saods9/tksao/fitsy++/hdu.h000644 000765 000000 00000005037 12705446164 015740 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitshdu_h__ #define __fitshdu_h__ #include #include "column.h" #define FTY_MAXAXES 10 class FitsHead; class FitsHDU { protected: char* extname_; // EXTNAME keyword int extver_; // EXTVER keyword int bitpix_; // BITPIX keyword int naxes_; // NAXIS keyword int naxis_[FTY_MAXAXES]; // NAXIS[i] keywords size_t realbytes_; // Number of real bytes size_t heapbytes_; // Number of heap bytes size_t allbytes_; // Number of real bytes + heap bytes size_t padbytes_; // Number of pad bytes size_t databytes_; // Number of total bytes (padded) size_t datablocks_; // Number of total blocks char keybuf[9]; char* keycat(const char*, int); public: FitsHDU(FitsHead*); virtual ~FitsHDU(); virtual void updateCards(FitsHead*); const char* extname() {return extname_;} int extver() {return extver_;} int bitpix() {return bitpix_;} int naxes() {return naxes_;} int naxis(int ii) {return naxis_[ii];} size_t realbytes() {return realbytes_;} size_t heapbytes() {return heapbytes_;} size_t allbytes() {return allbytes_;} size_t padbytes() {return padbytes_;} size_t databytes() {return databytes_;} size_t datablocks() {return datablocks_;} }; class FitsImageHDU : public FitsHDU { private: size_t imgbytes_; // number of image bytes double bscale_; double bzero_; int hasblank_; int blank_; public: FitsImageHDU(FitsHead*); void updateCards(FitsHead*); size_t imgbytes() {return imgbytes_;} void setScaling(double t,double z) {bscale_=t; bzero_=z;} double bscale() {return bscale_;} double bzero() {return bzero_;} int hasscaling() {return bscale_ != 1 || bzero_ != 0;} int hasblank() {return hasblank_;} int blank() {return blank_;} }; class FitsTableHDU : public FitsHDU { protected: int tfields_; FitsColumn** cols_; public: FitsTableHDU(FitsHead*); virtual ~FitsTableHDU(); int tfields() {return tfields_;} int rows() {return naxis_[1];} int cols() {return tfields_;} int width() {return naxis_[0];} char* list(); FitsColumn* find(const char*); FitsColumn* find(int); Vector dimension(const char*); }; class FitsBinTableHDU : public FitsTableHDU { public: FitsBinTableHDU(FitsHead*); }; class FitsAsciiTableHDU : public FitsTableHDU { public: FitsAsciiTableHDU(FitsHead*); }; #endif saods9/tksao/fitsy++/head.C000644 000765 000000 00000027610 12755426413 016015 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include #include #ifndef __WIN32 #include #include #endif #include "file.h" #include "head.h" FitsHead::FitsHead(char* raw, size_t bytes, Memory mem) { cards_ = raw; mapdata_ = raw; mapsize_ = bytes; memory_ = mem; ncard_ = 0; acard_ = 0; ccard_ = 0; index_ = NULL; valid_ = 0; inherit_ = 0; hdu_ = NULL; char* c; int i; for (c = cards_, i=0; c < cards_+bytes; c+=FTY_CARDLEN, i++) { // only compare 4 chars if (!strncmp(c, "END ", 4)) { ncard_ = i + 1; acard_ = ((ncard_+FTY_CARDS-1)/FTY_CARDS) * FTY_CARDS; valid_ = 1; buildIndex(); updateHDU(); return; } } } FitsHead::FitsHead(char* raw, size_t bytes, char* mm, size_t sz, Memory mem) { cards_ = raw; mapdata_ = mm; mapsize_ = sz; memory_ = mem; ncard_ = 0; acard_ = 0; ccard_ = 0; index_ = NULL; valid_ = 0; inherit_ = 0; hdu_ = NULL; char* c; int i; for (c = cards_, i=0; c < cards_+bytes; c+=FTY_CARDLEN, i++) { // only compare 4 chars if (!strncmp(c, "END ", 4)) { ncard_ = i + 1; acard_ = ((ncard_+FTY_CARDS-1)/FTY_CARDS) * FTY_CARDS; valid_ = 1; buildIndex(); updateHDU(); return; } } } // Create Image FitsHead FitsHead::FitsHead(int width, int height, int depth, int bitpix, char* xtension) { cards_ = new char[FTY_BLOCK]; memset(cards_, ' ', FTY_BLOCK); memcpy(cards_, "END", 3); mapdata_ = NULL; mapsize_ = 0; memory_ = ALLOC; ncard_ = 1; acard_ = FTY_CARDS; ccard_ = 0; index_ = NULL; if (!xtension) appendLogical("SIMPLE", 1, "Fits Standard"); else appendString("XTENSION", xtension, "Fits Standard"); appendInteger("BITPIX", bitpix, "Bits per pixel"); appendInteger("NAXIS", depth>1 ? 3 : 2, "Number of axes"); appendInteger("NAXIS1", width, "Axis Length"); appendInteger("NAXIS2", height, "Axis Length"); if (depth>1) appendInteger("NAXIS3", depth, "Axis Length"); valid_ = 1; inherit_ = 0; hdu_ = NULL; buildIndex(); updateHDU(); } FitsHead::FitsHead(int width, int height, int depth, int bitpix, char* mm, size_t sz, Memory mem) { cards_ = new char[FTY_BLOCK]; memset(cards_, ' ', FTY_BLOCK); memcpy(cards_, "END", 3); mapdata_ = mm; mapsize_ = sz; memory_ = mem; ncard_ = 1; acard_ = FTY_CARDS; ccard_ = 0; index_ = NULL; appendLogical("SIMPLE", 1, "Fits Standard"); appendInteger("BITPIX", bitpix, "Bits per pixel"); appendInteger("NAXIS", depth==1 ? 2 : 3, "Number of axes"); appendInteger("NAXIS1", width, "Axis Length"); appendInteger("NAXIS2", height, "Axis Length"); if (depth>1) appendInteger("NAXIS3", depth, "Axis Length"); valid_ = 1; inherit_ = 0; hdu_ = NULL; buildIndex(); updateHDU(); } FitsHead::FitsHead(const FitsHead& a) { cards_ = new char[a.acard_*FTY_CARDLEN]; memmove(cards_, a.cards_, a.acard_*FTY_CARDLEN); mapdata_ = NULL; mapsize_ = 0; memory_ = ALLOC; index_ = NULL; acard_ = a.acard_; ncard_ = a.ncard_; ccard_ = a.ccard_; valid_ = 1; inherit_ = 0; hdu_ = NULL; buildIndex(); updateHDU(); } FitsHead::~FitsHead() { if (index_) delete [] index_; if (hdu_) delete hdu_; switch (memory_) { case ALLOC: if (cards_) delete [] cards_; break; case MMAP: #ifndef __WIN32 if (mapdata_>0) munmap((caddr_t)mapdata_, mapsize_); #endif break; case SHARE: #ifndef __WIN32 if (mapdata_>0) shmdt(mapdata_); #endif case EXTERNAL: break; } } int FitsHead::isImage() { // just look for SIMPLE, if present it may be of value 'F' char* xtension = getString("XTENSION"); char* simple = find("SIMPLE"); int r = (simple || (xtension && !strncmp(xtension, "IMAGE", 5))) && naxes() > 0 && naxis(0) > 0 && naxis(1) > 0; delete [] xtension; return r; } int FitsHead::isTable() { char* xtension = getString("XTENSION"); int r = (xtension && (!strncmp(xtension, "TABLE", 5) || !strncmp(xtension, "BINTABLE", 8))); delete [] xtension; return r; } int FitsHead::isAsciiTable() { char* xtension = getString("XTENSION"); int r = (xtension && (!strncmp(xtension, "TABLE", 5))); delete [] xtension; return r; } int FitsHead::isBinTable() { char* xtension = getString("XTENSION"); int r = (xtension && (!strncmp(xtension, "BINTABLE", 8))); delete [] xtension; return r; } int FitsHead::isHeap() { return getInteger("PCOUNT",0) ? 1 : 0; } void FitsHead::updateHDU() { if (hdu_) delete hdu_; hdu_ = NULL; // just find simple, it might be present but of value 'F' char* simple = find("SIMPLE"); char* xtension = getString("XTENSION"); if (xtension) inherit_ = getLogical("INHERIT",0); if (simple || (xtension && !strncmp(xtension, "IMAGE", 5))) hdu_ = new FitsImageHDU(this); if (xtension && !strncmp(xtension, "TABLE", 5)) hdu_ = new FitsAsciiTableHDU(this); if (xtension && !strncmp(xtension, "BINTABLE", 8)) hdu_ = new FitsBinTableHDU(this); delete [] xtension; } int FitsHead::getLogical(const char* name, int def) { char* card = find(name); if (card) { FitsCard c(card); return c.getLogical(); } else return def; } int FitsHead::getInteger(const char* name, int def) { char* card = find(name); if (card) { FitsCard c(card); return c.getInteger(); } else return def; } double FitsHead::getReal(const char* name, double def) { char* card = find(name); if (card) { FitsCard c(card); return c.getReal(); } else return def; } void FitsHead::getComplex(const char* name, double* real, double* img, double rdef, double idef) { char* card = find(name); if (card) { FitsCard c(card); c.getComplex(real, img); } else { *real = rdef; *img = idef; } } char* FitsHead::getString(const char* name) { char* card = find(name); if (card) { FitsCard c(card); return c.getString(); } else return NULL; } char* FitsHead::getComment(const char* name) { char* card = find(name); if (card) { FitsCard c(card); return c.getComment(); } else return NULL; } char* FitsHead::getKeyword(const char* name) { char* card = find(name); if (card) { FitsCard c(card); return c.getAsString(); } else return NULL; } char* FitsHead::setKey(const char* name, const char* value) { char* card = find(name); if (card) FitsCard(card).setKey(value); buildIndex(); return card; } char* FitsHead::setLogical(const char* name, int value, const char* comm) { char* card = find(name); if (card) FitsCard(card).setLogical(value, comm); return card; } char* FitsHead::setInteger(const char* name, int value, const char* comm) { char* card = find(name); if (card) FitsCard(card).setInteger(value, comm); return card; } char* FitsHead::setReal(const char* name, double value, int prec, const char* comm) { char* card = find(name); if (card) FitsCard(card).setReal(value, prec, comm); return card; } char* FitsHead::setComplex(const char* name, double real, double img, int prec, const char* comm) { char* card = find(name); if (card) FitsCard(card).setComplex(real, img, prec, comm); return card; } char* FitsHead::setString(const char* name, const char* value, const char* comm) { char* card = find(name); if (card) FitsCard(card).setString(value, comm); return card; } char* FitsHead::setComment(const char* name, const char* value) { char* card = find(name); if (card) FitsCard(card).setComment(value); return card; } char* FitsHead::cardins(char* card, char* here) { // do we need to allocate another block? if (ncard_+1 > acard_) { switch (memory_) { case ALLOC: { char* old = cards_; int oldsz = acard_*FTY_CARDLEN; int sz = oldsz+FTY_BLOCK; acard_ = sz/FTY_CARDLEN; cards_ = new char[sz]; memset(cards_, ' ', sz); memcpy(cards_, old, oldsz); // don't forget to redirect here if needed if (here) { size_t diff = here-old; here = cards_+diff; } delete [] old; } break; case MMAP: case SHARE: case EXTERNAL: internalError("Fitsy++ head can't add card: readonly memory"); return NULL; } } char* where = here ? here : cards_+((ncard_-1)*FTY_CARDLEN); memmove(where+FTY_CARDLEN, where, (cards_+(ncard_*FTY_CARDLEN))-where); memmove(where, card, FTY_CARDLEN); ncard_++; buildIndex(); return where; } char* FitsHead::carddel(const char* name) { char* card = find(name); if (card) { char* next = card+FTY_CARDLEN; char* last = cards_+((ncard_-1)*FTY_CARDLEN); memmove(card, next, last-card); memset(last,' ', FTY_CARDLEN); } buildIndex(); return card; } char* FitsHead::cardclear(const char* name) { char* card = find(name); if (card) FitsCard(card).clear(); buildIndex(); return card; } char* FitsHead::insertLogical(const char* name, int value, const char* comm, const char* here) { FitsCard key; key.setLogical(name, value, comm); return cardins(key.card(), (char*)here); } char* FitsHead::insertInteger(const char* name, int value, const char* comm, const char* here) { FitsCard key; key.setInteger(name, value, comm); return cardins(key.card(), (char*)here); } char* FitsHead::insertReal(const char* name, double value, int prec, const char* comm, const char* here) { FitsCard key; key.setReal(name, value, prec, comm); return cardins(key.card(), (char*)here); } char* FitsHead::insertComplex(const char* name, double real, double img, int prec, const char* comm, const char* here) { FitsCard key; key.setComplex(name, real, img, prec, comm); return cardins(key.card(), (char*)here); } char* FitsHead::insertString(const char* name, const char* value, const char* comm, const char* here) { FitsCard key; key.setString(name, value, comm); return cardins(key.card(), (char*)here); } char* FitsHead::insertComment(const char* name, const char* value, const char* here) { FitsCard key; key.setComment(name, value); return cardins(key.card(), (char*)here); } char* FitsHead::first() { ccard_ = 0; return (ccard_8 ? 8 : len); for (int i=0; i8 ? 8 : len); for (int i=0; i 1) { int i = strncmp(k, base[cut], 8); if (!i) return base[cut]; if (i < 0) { hi = cut; cut = (lo+hi)/2; } else { lo = cut; cut = (lo+hi)/2; } } if (!strncmp(k, base[cut], 8)) return base[cut]; return NULL; } static int compare(const void* a, const void* b) { char** aa = (char**)a; char** bb = (char**)b; return strncmp(*aa, *bb, 8); } void FitsHead::buildIndex() { if (index_) delete [] index_; index_ = new char*[ncard_]; for (int i=0; iextname() : NULL;} int extver() {return hdu_ ? hdu_->extver() : 0;} int bitpix() {return hdu_ ? hdu_->bitpix() : 0;} int naxes() {return hdu_ ? hdu_->naxes() : 0;} int naxis(int ii) {return hdu_ ? hdu_->naxis(ii) : 0;} size_t realbytes() {return hdu_ ? hdu_->realbytes() : 0;} size_t heapbytes() {return hdu_ ? hdu_->heapbytes() : 0;} size_t allbytes() {return hdu_ ? hdu_->allbytes() : 0;} size_t padbytes() {return hdu_ ? hdu_->padbytes() : 0;} size_t databytes() {return hdu_ ? hdu_->databytes() : 0;} size_t datablocks() {return hdu_ ? hdu_->datablocks() : 0;} void buildIndex(); void updateHDU(); void updateCards() {if (hdu_) hdu_->updateCards(this);} char* find(const char* name); char* findSeq(const char* name); char* findIndex(const char* name); char* cardins(char* card, char* here); char* carddel(const char* card); char* cardclear(const char* card); char* setKey(const char* name, const char* value); char* setLogical(const char* name, int value, const char* comm); char* setInteger(const char* name, int value, const char* comm); char* setReal(const char* name, double value, int prec, const char* comm); char* setComplex(const char* name, double real, double img, int prec, const char* comm); char* setString(const char* name, const char* value, const char* comm); char* setComment(const char* name, const char* value); char* insertLogical(const char* name, int value, const char* comm, const char* here); char* insertInteger(const char* name, int value, const char* comm, const char* here); char* insertReal(const char* name, double value, int prec, const char* comm, const char* here); char* insertComplex(const char* name, double real, double img, int prec, const char* comm, const char* here); char* insertString(const char* name, const char* value, const char* comm, const char* here); char* insertComment(const char* name, const char* value, const char* here); char* appendLogical(const char* name, int value, const char* comm) {return insertLogical(name, value, comm, NULL);} char* appendInteger(const char* name, int value, const char* comm) {return insertInteger(name, value, comm, NULL);} char* appendReal(const char* name, double value, int prec, const char* comm) {return insertReal(name, value, prec, comm, NULL);} char* appendComplex(const char* name, double real, double img, int prec, const char* comm) {return insertComplex(name, real, img, prec, comm, NULL);} char* appendString(const char* name, const char* value, const char* comm) {return insertString(name, value, comm, NULL);} int getLogical(const char* name, int def); int getInteger(const char* name, int def); double getReal(const char* name, double def); void getComplex(const char* name, double* real, double* img, double rdef, double idef); char* getString(const char* name); char* getComment(const char* name); char* getKeyword(const char* name); char* first(); char* next(); }; #endif saods9/tksao/fitsy++/hist.C000644 000765 000000 00000037531 12764607531 016070 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include #include #include using namespace std; #include "hist.h" #include "util.h" #include "fitsy.h" #include "filter.h" #ifdef __CYGWIN__ // limit size, cygwin pipe to 64K / (4 args x 4 bytes) #define FILTERSIZE 2048 #else #define FILTERSIZE 65536 #endif #define MULTWCS 27 char *gerrorstring(void); static const char* reservedKeywords[] = { "SIMPLE","XTENSION","ZSIMPLE","ZTENSION","ZIMAGE","ZTABLE", "BITPIX","ZBITPIX", "NAXIS","ZNAXIS", "NAXIS.","ZNAXIS.", "END", "PCOUNT","ZPCOUNT", "GCOUNT","ZGCOUNT", "CHECKSUM","ZHECKSUM", "DATASUM","ZDATASUM", /* "OBJECT",*/ "INHERIT", "BSCALE", "BZERO","TZERO.", "BUNIT","TUNIT.", "BLANK", "DATAMAX","TDMAX.","TLMAX.", "DATAMIN","TDMIN.","TLMIN.", "BLOCKED","ZBLOCKED", "EXTENDED","ZEXTEND", "EXTNAME","ZNAME.", "EXTVER", "EXTLEVEL", "TFIELDS", "TFORM.","ZFORM.", "TBCOL.", "ZCMPTYPE","ZCTYP.","ZTILELEN","ZTILE.","ZVAL.", "ZMASKCMP","ZQUANTIZ","ZDITHER0","ZTHEAP", "TSCAL.","TNULL.","TTYPE.","TDISP.", "TDIM.","THEAP", "FZTILELN","FZALGOR","FZALG.", "PTYPE.","PSCAL.","PZERO.", "WCSAXES.","WCSAX.?", "CTYPE.?",".CTYP.",".CTY.?","TCTYP.","TCTY.?", "CUNIT.?",".CUNI.",".CUN.?","TCUNI.","TCUN.?", "CRVAL.?",".CRVL.",".CRV.?","TCRVL.","TCRV.?", "CDELT.?",".CDLT.",".CDE.?","TCDLT.","TCDE.?", "CRPIX.?",".CRPX.",".CRP.?","TCRPX.","TCRP.?", "CROTA.",".CROT.","TCROT.", "PC._.?","..PC.?","TPC._.?","TP._.?", "CD._.?","..CD.?","TCD._.?","TC._.?", "PV._.?",".PV._.?",".V._.?","TPV._.?","TV._.?", ".V._X?", "PS._.?",".PS._.?",".S._.?","TPS._.?","TS._.?", "WCSNAME?","WCSN.?","WCS.?","TWCS.?", "CNAME.?",".CNA.?","TCNA.?", "CRDER.?",".CRD.?","TCRD.?", "CSYER.?",".CSY.?","TCSY.?", "WCST.?", "WCSX.?", /* "LONPOLE?", */ "LONP.?", /* "LATPOLE?", */ "LATP.?", /* "EQUINOX?", */ "EQUI.?", /* "EPOCH", */ /* "RADESYS", */ "REDE.?", "RESTFRQ?","RFRQ.?", "RESTWAV?","RWAV.?", "SPECSYS?","SPEC.?", "SSYSOBS?","SOBS.?", "SSYSSRC?","SSRC.?", "OBSGEO-X","OBSGX.", "OBSGEO-Y","OBSGY.", "OBSGEO-Z","OBSGZ.", "VELOSYS?","VSYS.?", "ZSOURCE?","ZSOU.?", "VELANGL?","VANG.?", /* "DATE",*/ /* "DATE-OBS", */ "DOBS.", /* "MJD-OBS", */ "MJDOB.", "BEPOCH", "JEPOCH", /* "DATE-AVE", */ "DAVG.", /* "MJD-AVG", */ "MJDA.", /* "DATE-BEG", */ /* "MJD-BEG", */ /* "TSTART", "TSTOP", */ /* "DATE-END", */ /* "MJD-END", */ "XPOSURE", "TELAPSE", /* "TIMESYS",*/ /* "MJDREF",*/ /* "JDREF",*/ /* "DATEREF",*/ "TREFPOS","TRPOS.", "TREFDIR","TRDIR.", "PLEPHEM", /* "TIMEUNIT",*/ /* "TIMEOFFS",*/ /* "TIMSYER",*/ /* "TIMRDER",*/ /* "TIMEDEL",*/ /* "TIMEPIXR",*/ "CZPHS",".CZPH.",".CZP.?","TCZPH.","TCZP.?", "CPERI",".CPER.",".CPR.?","TCPER.","TCPR.?" }; FitsHist::FitsHist(FitsFile* fits, int w, int h, int d, Matrix& m, Function func, Vector block) : width_(w), height_(h), depth_(d) { size_ = (size_t)width_*height_*depth_; xcol_ = NULL; ycol_ = NULL; zcol_ = NULL; fitsy_ = NULL; filter_ = NULL; valid_ = 0; if (!initHeader(fits)) return; // we need to translate by another .5 for the offset from Data to Image Matrix mm = m * Translate(.5,.5); initLTMV(mm); initWCS(fits, mm, block); initFilter(fits); bin(fits, m, func, block); if (byteswap_) swap(); deleteFilter(); valid_ = 1; } FitsHist::~FitsHist() { if (data_) delete [] (float*)data_; } int FitsHist::initHeader(FitsFile* fits) { FitsHead* srcHead = fits->head(); FitsTableHDU* srcHDU = (FitsTableHDU*)(srcHead->hdu()); // make sure we have a table with columns, X, Y if (!fits->isBinTable()) return 0; // make sure we have rows and cols if (!srcHDU->width() || !srcHDU->rows()) return 0; // get X column if (fits->pBinX()) xcol_ = srcHDU->find(fits->pBinX()); if (!xcol_) return 0; // get Y column if (fits->pBinY()) ycol_ = srcHDU->find(fits->pBinY()); if (!ycol_) return 0; // get Z column (if specified) if (fits->pBinZ() && depth_ > 1) zcol_ = srcHDU->find(fits->pBinZ()); else zcol_ = NULL; // create header head_ = new FitsHead(width_, height_, depth_, -32); if (!head_->isValid()) return 0; // now screen other KEYWORDS for addition char* cc = srcHead->first(); while (cc) { if (screenKeyword(cc)) head_->cardins(cc, (char*)NULL); cc = srcHead->next(); } // MJD-OBJ deprecated double rr = srcHead->getReal("MJD_OBS",0); if (rr) head_->appendReal("MJD-OBS", rr, 10, NULL); // we added cards head_->updateHDU(); return 1; } static int mstrcmp(const char* s1, const char* s2) { const char* p1 = s1; const char* p2 = s2; while (*p1 != '\0') { if (*p1 == '?') return 0; if (*p2=='\0') return 1; if (*p1 != '.') { if (*p2>*p1) return -1; if (*p2<*p1) return 1; } else { if (*p2<'0' || *p2>'9') return 1; p2++; if (*p2<'0' || *p2>'9') p2--; } p1++; p2++; } if (*p2 != '\0') return -1; return 0; } int FitsHist::screenKeyword(const char* cc) { int cnt= sizeof(reservedKeywords)/sizeof(const char*); char key[9]; memset(key,0,9); strncpy(key,cc,8); for (int ii=8; ii>=0; ii--) if (key[ii]==' ') key[ii] = '\0'; const char** ptr = reservedKeywords; for (int ii=0; iihead(); const char* filtstr = fits->pFilter(); if (filtstr && *filtstr) { ostringstream str; str << "bincols=(" << fits->pBinX() << ',' << fits->pBinY() << ')'; if (byteswap_) str << ",convert=true"; str << ends; if (!(fitsy_ = ft_headinit(srcHead->cards(), srcHead->headbytes()))) internalError("Fitsy++ hist bad filter head"); else { if (!(filter_ = FilterOpen((FITSHead)fitsy_, (char*)filtstr, (char*)str.str().c_str()))){ internalError("Fitsy++ hist unable to build filter"); } } } } void FitsHist::deleteFilter() { if (filter_) { FilterClose((Filter)filter_); filter_ = NULL; } if (fitsy_) { ft_headfree((FITSHead)fitsy_,0); fitsy_ = NULL; } } void FitsHist::bin(FitsFile* fits, Matrix& m, Function func, Vector block) { FitsHead* srcHead = fits->head(); FitsTableHDU* srcHDU = (FitsTableHDU*)(srcHead->hdu()); // create image space float* dest = new float[size_]; memset(dest, 0, size_*sizeof(float)); // bin it up char* ptr = (char*)fits->data(); int rowlen = srcHDU->width(); int rows = srcHDU->rows(); // third dimension double zmin; double zlength; if (zcol_) { zmin = zcol_->getMin(); zlength = zcol_->getMax() - zcol_->getMin(); } // filter int goodincr = 0; int goodindex = FILTERSIZE; int* good = NULL; if (filter_) good = new int[FILTERSIZE]; // matrix register double m00 = m.matrix(0,0); register double m10 = m.matrix(1,0); register double m20 = m.matrix(2,0); register double m01 = m.matrix(0,1); register double m11 = m.matrix(1,1); register double m21 = m.matrix(2,1); for (int ii=0; ii=FILTERSIZE)) { // for memory models that support internal paging // need at lease FILTERSIZE rows ptr = fits->page(ptr, rowlen*FILTERSIZE); int diff = srcHDU->rows() - (goodincr * FILTERSIZE); if (FilterEvents((Filter)filter_, ptr, srcHDU->width(), (diffpage(ptr, rowlen); } if (!good || (good && good[goodindex])) { register double x = xcol_->value(ptr); register double y = ycol_->value(ptr); register double X = x*m00 + y*m10 + m20; register double Y = x*m01 + y*m11 + m21; if (X >= 0 && X < width_ && Y >= 0 && Y < height_) { if (!zcol_) dest[((int)Y)*width_ + (int)X]++; else { int zz = (int)((zcol_->value(ptr)-zmin)/zlength*depth_); if (zz>=0 && zzresetpage(); // Average if (func==AVERAGE) for (size_t kk=0; kkappendReal("LTM1_1", m[0][0], 10, NULL); head_->appendReal("LTM1_2", m[0][1], 10, NULL); head_->appendReal("LTM2_1", m[1][0], 10, NULL); head_->appendReal("LTM2_2", m[1][1], 10, NULL); head_->appendReal("LTV1" , m[2][0], 10, NULL); head_->appendReal("LTV2" , m[2][1], 10, NULL); } void FitsHist::mapWCSString(FitsHead* head, char* w, const char* out, const char* prim) { ostringstream istr; istr << prim << xcol_->index() << w << ends; if (head->find(istr.str().c_str())) { char* cc = head->getString(istr.str().c_str()); head_->appendString(out, cc, NULL); delete [] cc; } } void FitsHist::mapWCSString(FitsHead* head, char* w, const char* out, const char* prim, const char* alt) { ostringstream istr1, istr2; if (!w[0]) { istr1 << prim << xcol_->index() << w << ends; istr2 << prim << ycol_->index() << w << ends; } else { istr1 << alt << xcol_->index() << w << ends; istr2 << alt << ycol_->index() << w << ends; } ostringstream ostr1, ostr2; ostr1 << out << "1" << w << ends; ostr2 << out << "2" << w << ends; if (head->find(istr1.str().c_str()) || head->find(istr2.str().c_str())) { char* cc1 = head->getString(istr1.str().c_str()); char* cc2 = head->getString(istr2.str().c_str()); head_->appendString(ostr1.str().c_str(), cc1, NULL); head_->appendString(ostr2.str().c_str(), cc2, NULL); delete [] cc1; delete [] cc2; } } void FitsHist::mapWCSReal(FitsHead* head, const char* out, const char* in) { ostringstream istr; istr << in << xcol_->index() << ends; if (head->find(istr.str().c_str())) { float cc = head->getReal(istr.str().c_str(), 0); head_->appendReal(out, cc, 10, NULL); } } void FitsHist::mapWCSReal(FitsHead* head, char* w, const char* out, const char* in) { ostringstream istr; istr << in << xcol_->index() << w << ends; if (head->find(istr.str().c_str())) { float cc = head->getReal(istr.str().c_str(), 0); head_->appendReal(out, cc, 10, NULL); } } void FitsHist::mapWCSReal(FitsHead* head, char* w, const char* out, const char* prim, const char* alt, Matrix mm) { ostringstream istr1, istr2; if (!w[0]) { istr1 << prim << xcol_->index() << w << ends; istr2 << prim << ycol_->index() << w << ends; } else { istr1 << alt << xcol_->index() << w << ends; istr2 << alt << ycol_->index() << w << ends; } ostringstream ostr1, ostr2; ostr1 << out << "1" << w << ends; ostr2 << out << "2" << w << ends; if (head->find(istr1.str().c_str()) || head->find(istr2.str().c_str())) { float cc1 = head->getReal(istr1.str().c_str(),0); float cc2 = head->getReal(istr2.str().c_str(),0); Vector cc = Vector(cc1,cc2) * mm; head_->appendReal(ostr1.str().c_str(), cc[0], 10, NULL); head_->appendReal(ostr2.str().c_str(), cc[1], 10, NULL); } } void FitsHist::mapWCSMatrix(FitsHead* head, char* w, const char* out, const char* in, Vector vv) { ostringstream istr1, istr2, istr3, istr4; istr1 << in << xcol_->index() << "_" << xcol_->index() << w << ends; istr2 << in << xcol_->index() << "_" << ycol_->index() << w << ends; istr3 << in << ycol_->index() << "_" << xcol_->index() << w << ends; istr4 << in << ycol_->index() << "_" << ycol_->index() << w << ends; ostringstream ostr1, ostr2, ostr3, ostr4; ostr1 << out << "1_1" << w << ends; ostr2 << out << "1_2" << w << ends; ostr3 << out << "2_1" << w << ends; ostr4 << out << "2_2" << w << ends; if (head->find(istr1.str().c_str()) || head->find(istr2.str().c_str()) || head->find(istr3.str().c_str()) || head->find(istr4.str().c_str())) { float cc11 = head->getReal(istr1.str().c_str(), 0); float cc12 = head->getReal(istr2.str().c_str(), 0); float cc21 = head->getReal(istr3.str().c_str(), 0); float cc22 = head->getReal(istr4.str().c_str(), 0); Matrix cc = Matrix(cc11*vv[0], cc12*vv[0], cc21*vv[1], cc22*vv[1], 0, 0); head_->appendReal(ostr1.str().c_str(), cc[0][0], 10, NULL); head_->appendReal(ostr2.str().c_str(), cc[0][1], 10, NULL); head_->appendReal(ostr3.str().c_str(), cc[1][0], 10, NULL); head_->appendReal(ostr4.str().c_str(), cc[1][1], 10, NULL); } } void FitsHist::mapWCSVector(FitsHead* head, char* w, const char* out, const char* in) { for (int ii=0; ii<=9; ii++) { ostringstream istr1, istr2; istr1 << in << xcol_->index() << "_" << ii << w << ends; istr2 << in << ycol_->index() << "_" << ii << w << ends; ostringstream ostr1, ostr2; ostr1 << out << "1_" << ii << ends; ostr2 << out << "2_" << ii << ends; if (head->find(istr1.str().c_str()) || head->find(istr2.str().c_str())) { float cc1 = head->getReal(istr1.str().c_str(), 0); float cc2 = head->getReal(istr2.str().c_str(), 0); head_->appendReal(ostr1.str().c_str(), cc1, 10, NULL); head_->appendReal(ostr2.str().c_str(), cc2, 10, NULL); } } } void FitsHist::initWCS(FitsFile* fits, Matrix& mm, Vector block) { FitsHead* srcHead = fits->head(); char w[2]; w[1] = '\0'; for (int i=0; ifind("EQUINOX")) mapWCSReal(srcHead, w, "EQUINOX", "EQUI"); if (!head_->find("MJD-OBS")) mapWCSReal(srcHead, "MJD-OBS", "MJDOB"); if (!head_->find("RADESYS")) mapWCSString(srcHead, w, "RADESYS", "RADE"); } } FitsHistNext::FitsHistNext(FitsFile* prev) { primary_ = prev->primary(); managePrimary_ = 0; head_ = prev->head(); manageHead_ = 0; FitsImageHDU* hdu = (FitsImageHDU*)head_->hdu(); data_ = (char*)prev->data() + hdu->imgbytes(); dataSize_ = 0; dataSkip_ = 0; ext_ = prev->ext(); inherit_ = prev->inherit(); byteswap_ = prev->byteswap(); endian_ = prev->endian(); valid_ = 1; return; } saods9/tksao/fitsy++/hist.h000644 000765 000000 00000003040 12755426413 016117 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitshist_h__ #define __fitshist_h__ #include "vector.h" #include "file.h" class FitsHist : public FitsFile { public: enum Function {SUM, AVERAGE}; private: int width_; int height_; int depth_; size_t size_; FitsColumn* xcol_; FitsColumn* ycol_; FitsColumn* zcol_; void* fitsy_; void* filter_; int initHeader(FitsFile*); int screenKeyword(const char*); void initLTMV(Matrix&); void initWCS(FitsFile*, Matrix&, Vector); void mapWCSMatrix(FitsHead*, char* w, const char* out, const char* in, Vector); void mapWCSReal(FitsHead* head, const char* out, const char* in); void mapWCSReal(FitsHead* head, char* w, const char* out, const char* in); void mapWCSReal(FitsHead*, char* w, const char* out, const char* prim, const char* alt, Matrix); void mapWCSString(FitsHead*, char* w, const char* out, const char* prim); void mapWCSString(FitsHead*, char* w, const char* out, const char* prim, const char* alt); void mapWCSVector(FitsHead*, char* w, const char* out, const char* in); void initFilter(FitsFile*); void deleteFilter(); void bin(FitsFile*, Matrix&, Function, Vector); void swap(); public: FitsHist(FitsFile* src, int width, int height, int depth, Matrix& m, Function func, Vector block); ~FitsHist(); }; class FitsHistNext : public FitsFile { public: FitsHistNext(FitsFile* prev); }; #endif saods9/tksao/fitsy++/hpx.C000644 000765 000000 00000037644 12705446164 015723 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" // This source has been modified from the original authored by // Dr. Mark Calabretta as distributed with WCSLIBS under GNU GPL version 3 // WCSLIB 4.7 - an implementation of the FITS WCS standard. // Copyright (C) 1995-2011, Mark Calabretta #include #include #include #include #include using namespace std; #include "hpx.h" #include "util.h" #include "fitsy.h" FitsHPX::FitsHPX(FitsFile* fits, Order oo, CoordSys ss, Layout ll, int cc, int qq) : order_(oo), coord_(ss), layout_(ll), quad_(qq) { FitsHead* head = fits->head(); FitsTableHDU* hdu = (FitsTableHDU*)(head->hdu()); col_ = (FitsBinColumn*)hdu->find(cc); if (!col_) return; int nrow = hdu->rows(); int nelem = col_->repeat(); nside_ = head->getInteger("NSIDE",0); long firstpix = head->getInteger("FIRSTPIX",-1); long lastpix = head->getInteger("LASTPIX",-1); if (!nside_) { // Deduce NSIDE if (lastpix >= 0) { // If LASTPIX is present without NSIDE we can only assume it's npix. nside_ = (int)(sqrt((double)((lastpix+1) / 12)) + 0.5); } else if (nrow) nside_ = (int)(sqrt((double)((nrow * nelem) / 12)) + 0.5); } long npix = 12*nside_*nside_; if (firstpix < 0) firstpix = 0; if (lastpix < 0) lastpix = npix - 1; build(fits); if (byteswap_) swap(); valid_ = 1; } FitsHPX::~FitsHPX() { if (data_) delete [] (float*)data_; } void FitsHPX::build(FitsFile* fits) { // Number of facets on a side of each layout const int NFACET[] = {5, 4, 4}; // Arrays that define the facet location and rotation for each recognised // layout. Bear in mind that these appear to be upside-down, i.e. the top // line contains facet numbers for the bottom row of the output image. // Facets numbered -1 are blank. // Equatorial (diagonal) facet layout. const int FACETS[][5][5] = {{{ 6, 9, -1, -1, -1}, { 1, 5, 8, -1, -1}, {-1, 0, 4, 11, -1}, {-1, -1, 3, 7, 10}, {-1, -1, -1, 2, 6}}, // North polar (X) facet layout. {{ 8, 4, 4, 11, -1}, { 5, 0, 3, 7, -1}, { 5, 1, 2, 7, -1}, { 9, 6, 6, 10, -1}, {-1, -1, -1, -1, -1}}, // South polar (X) facet layout. {{ 1, 6, 6, 2, -1}, { 5, 9, 10, 7, -1}, { 5, 8, 11, 7, -1}, { 0, 4, 4, 3, -1}, {-1, -1, -1, -1, -1}}}; // All facets of the equatorial layout are rotated by +45 degrees with // respect to the normal orientation, i.e. that with the equator running // horizontally. The rotation recorded for the polar facets is the number // of additional positive (anti-clockwise) 90 degree turns with respect to // the equatorial layout. // Equatorial (diagonal), no facet rotation. const int FROTAT[][5][5] = {{{ 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}}, // North polar (X) facet rotation. {{ 3, 3, 0, 0, 0}, { 3, 3, 0, 0, 0}, { 2, 2, 1, 1, 0}, { 2, 2, 1, 1, 0}, { 0, 0, 0, 0, 0}}, // South polar (X) facet rotation. {{ 1, 1, 2, 2, 0}, { 1, 1, 2, 2, 0}, { 0, 0, 3, 3, 0}, { 0, 0, 3, 3, 0}, { 0, 0, 0, 0, 0}}}; // Facet halving codes. 0: the facet is whole (or wholly blank), // 1: blanked bottom-right, 2: top-right, 3: top-left, 4: bottom-left. // Positive values mean that the diagonal is included, otherwise not. // Equatorial (diagonal), no facet halving. const int FHALVE[][5][5] = {{{ 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0}}, // North polar (X) facet halving. {{ 0, 1, -4, 0, 0}, {-3, 0, 0, 2, 0}, { 4, 0, 0, -1, 0}, { 0, -2, 3, 0, 0}, { 0, 0, 0, 0, 0}}, // South polar (X) facet halving. {{ 0, 1, -4, 0, 0}, {-3, 0, 0, 2, 0}, { 4, 0, 0, -1, 0}, { 0, -2, 3, 0, 0}, { 0, 0, 0, 0, 0}}}; FitsHead* head = fits->head(); FitsTableHDU* hdu = (FitsTableHDU*)(head->hdu()); int rowlen = hdu->width(); char* data = (char*)fits->data(); int nside = nside_; int layout = layout_; int nfacet = NFACET[layout]; pWidth_ = nfacet*nside; pHeight_ = pWidth_; // create image space size_t pSize = (size_t)pWidth_*pHeight_; float* dest = new float[pSize]; for (longlong ii=0; ii= 0) { if (facet <= 3) { facet += quad_; if (facet > 3) facet -= 4; } else if (facet <= 7) { facet += quad_; if (facet > 7) facet -= 4; } else { facet += quad_; if (facet > 11) facet -= 4; } } // Write out the data if (facet < 0) ; else { switch (order_) { case NESTED: NESTidx(nside, facet, rotn, jj, healidx); break; case RING: RINGidx(nside, facet, rotn, jj, healidx); break; } // Gather data into the output vector. long* healp = healidx; for (float* rowp = row; rowp < row+nside; rowp++) *rowp = col_->value(data+*(healp++)*rowlen,0); // Apply blanking to halved facets. if (halve) { int i1; int i2; if (abs(halve) == 1) { // Blank bottom-right. i1 = jj; i2 = nside; if (halve > 0) i1++; } else if (abs(halve) == 2) { // Blank top-right. i1 = nside - jj; i2 = nside; if (halve < 0) i1--; } else if (abs(halve) == 3) { // Blank top-left. i1 = 0; i2 = jj; if (halve < 0) i2++; } else { // Blank bottom-left. i1 = 0; i2 = nside - jj; if (halve > 0) i2--; } for (float* rowp = row+i1; rowp < row+i2; rowp++) *rowp = NAN; } // Write out this facet's contribution to this row of the map. memcpy(dest+fpixel-1, row, nside*sizeof(float)); } fpixel += nelem; } } } data_ = dest; dataSize_ = pSize; dataSkip_ = 0; } // (imap,jmap) are 0-relative pixel coordinates in the output map with origin // at the bottom-left corner of the specified facet which is rotated by // (45 + rotn * 90) degrees from its natural orientation; imap increases to // the right and jmap upwards. void FitsHPX::NESTidx(int nside, int facet, int rotn, int jmap, long *healidx) { // Nested index (0-relative) of the first pixel in this facet. int hh = facet*nside*nside; int nside1 = nside - 1; long* hp = healidx; for (int imap = 0; imap < nside; imap++, hp++) { // (ii,jj) are 0-relative pixel coordinates with origin in the southern // corner of the facet; i increases to the north-east and j to the // north-west. int ii =0; int jj =0; if (rotn == 0) { ii = nside1 - imap; jj = jmap; } else if (rotn == 1) { ii = nside1 - jmap; jj = nside1 - imap; } else if (rotn == 2) { ii = imap; jj = nside1 - jmap; } else if (rotn == 3) { ii = jmap; jj = imap; } *hp = 0; int bit = 1; while (ii || jj) { if (ii & 1) *hp |= bit; bit <<= 1; if (jj & 1) *hp |= bit; bit <<= 1; ii >>= 1; jj >>= 1; } *hp += hh; } } // (imap,jmap) pixel coordinates are as described above for NESTidx(). This // function computes the double-pixelisation index then converts it to the // regular ring index. void FitsHPX::RINGidx(int nside, int facet, int rotn, int jmap, long *healidx) { const int I0[] = { 1, 3, -3, -1, 0, 2, 4, -2, 1, 3, -3, -1}; const int J0[] = { 1, 1, 1, 1, 0, 0, 0, 0, -1, -1, -1, -1}; int n2side = 2 * nside; int n8side = 8 * nside; // Double-pixelisation index of the last pixel in the north polar cap. */ int npole = (n2side - 1) * (n2side - 1) - 1; // Double-pixelisation pixel coordinates of the centre of the facet. */ int i0 = nside * I0[facet]; int j0 = nside * J0[facet]; int nside1 = nside - 1; long* hp = healidx; for (int imap = 0; imap < nside; imap++, hp++) { // (ii,jj) are 0-relative, double-pixelisation pixel coordinates. The // origin is at the intersection of the equator and prime meridian, // i increases to the east (N.B.) and j to the north. int ii =0; int jj =0; if (rotn == 0) { ii = i0 + nside1 - (jmap + imap); jj = j0 + jmap - imap; } else if (rotn == 1) { ii = i0 + imap - jmap; jj = j0 + nside1 - (imap + jmap); } else if (rotn == 2) { ii = i0 + (imap + jmap) - nside1; jj = j0 + imap - jmap; } else if (rotn == 3) { ii = i0 + jmap - imap; jj = j0 + jmap + imap - nside1; } // Convert i for counting pixels if (ii < 0) ii += n8side; ii++; if (jj > nside) { // North polar regime. if (jj == n2side) *hp = 0; else { // Number of pixels in a polar facet with this value of jj. int npj = 2 * (n2side - jj); // Index of the last pixel in the row above this. *hp = (npj - 1) * (npj - 1) - 1; // Number of pixels in this row in the polar facets before this. *hp += npj * (ii/n2side); // Pixel number in this polar facet. *hp += ii%n2side - (jj - nside) - 1; } } else if (jj >= -nside) { // Equatorial regime. *hp = npole + n8side * (nside - jj) + ii; } else { // South polar regime. *hp = 24 * nside * nside + 1; if (jj > -n2side) { // Number of pixels in a polar facet with this value of jj. int npj = 2 * (jj + n2side); // Total number of pixels in this row or below it. *hp -= (npj + 1) * (npj + 1); // Number of pixels in this row in the polar facets before this. *hp += npj * (ii/n2side); // Pixel number in this polar facet. *hp += ii%n2side + (nside + jj) - 1; } } // Convert double-pixelisation index to regular. *hp -= 1; *hp /= 2; } } void FitsHPX::initHeader(FitsFile* fits) { FitsHead* src = fits->head(); // create header head_ = new FitsHead(pWidth_, pHeight_, 1, -32); // OBJECT char* object = src->getString("OBJECT"); if (object) { head_->appendString("OBJECT", object, NULL); delete [] object; } // CRPIX1/2 float crpix1; switch (layout_) { case EQUATOR: crpix1 = (5 * nside_ + 1) / 2.; break; case NORTH: case SOUTH: crpix1 = (4 * nside_ + 1) / 2.; break; } float crpix2 = crpix1; head_->appendReal("CRPIX1", crpix1, 8, "Coordinate reference pixel"); head_->appendReal("CRPIX2", crpix2, 8, "Coordinate reference pixel"); // PCx_y float cos45 = sqrt(2.0) / 2.0; if (layout_ == EQUATOR) { head_->appendReal("PC1_1", cos45, 8, "Transformation matrix element"); head_->appendReal("PC1_2", cos45, 8, "Transformation matrix element"); head_->appendReal("PC2_1", -cos45, 8, "Transformation matrix element"); head_->appendReal("PC2_2", cos45, 8, "Transformation matrix element"); } // CDELT1/2 float cdelt1 = -90.0 / nside_ / sqrt(2.); float cdelt2 = -cdelt1; head_->appendReal("CDELT1", cdelt1, 8, "[deg] Coordinate increment"); head_->appendReal("CDELT2", cdelt2, 8, "[deg] Coordinate increment"); // CTYPE1/2 const char* pcode; switch (layout_) { case EQUATOR: pcode = "HPX"; break; case NORTH: case SOUTH: pcode = "XPH"; break; } const char* ctype1; const char* ctype2; const char* descr1; const char* descr2; switch (coord_) { case EQU: ctype1 = "RA--"; ctype2 = "DEC-"; descr1 = "Right ascension"; descr2 = "Declination"; break; case GAL: ctype1 = "GLON"; ctype2 = "GLAT"; descr1 = "Galactic longitude"; descr2 = "Galactic latitude"; break; case ECL: ctype1 = "ELON"; ctype2 = "ELAT"; descr1 = "Ecliptic longitude"; descr2 = "Ecliptic latitude"; break; case UNKNOWN: ctype1 = "XLON"; ctype2 = "XLAT"; descr1 = "Longitude"; descr2 = " Latitude"; } { ostringstream cval; cval << ctype1 << '-' << pcode << ends; ostringstream comm; comm << descr1 << " in an " << pcode << " projection" << ends; head_->appendString("CTYPE1", cval.str().c_str(), comm.str().c_str()); } { ostringstream cval; cval << ctype2 << '-' << pcode << ends; ostringstream comm; comm << descr2 << " in an " << pcode << " projection" << ends; head_->appendString("CTYPE2", cval.str().c_str(), comm.str().c_str()); } // CRVAL1/CRVAL2 float crval1 = 0. + 90.*quad_; float crval2; switch (layout_) { case EQUATOR: crval2 = 0.; break; case NORTH: crval1 += 180.; crval2 = 90.; break; case SOUTH: crval1 += 180.; crval2 = -90.; break; } if (360. < crval1) crval1 -= 360.; { ostringstream comm; comm << "[deg] " << descr1 << " at the reference point" << ends; head_->appendReal("CRVAL1", crval1, 8, comm.str().c_str()); } { ostringstream comm; comm << "[deg] " << descr2 << " at the reference point" << ends; head_->appendReal("CRVAL2", crval2, 8, comm.str().c_str()); } // PV2_1/2 switch (layout_) { case EQUATOR: head_->appendInteger("PV2_1", 4, "HPX H parameter (longitude)"); head_->appendInteger("PV2_2", 3, "HPX K parameter (latitude)"); break; case NORTH: case SOUTH: head_->appendReal("LONPOLE", 180., 8, "[deg] Native longitude of the celestial pole"); break; } // we added cards head_->updateHDU(); } void FitsHPX::swap() { if (!data_) return; // we now need to byteswap back to native form float* dest = (float*)data_; for (int ii=0; iiisValid()) return; // alloc memory size_t size = (size_t)width*height; data_ = new char[size]; if (!data_) return; dataSize_ = size; dataSkip_ = 0; // clear memory memset(data_, '\0', size); // made it this far, must be valid valid_ = 1; } FitsIIS::~FitsIIS() { if (data_) delete [] (char*)data_; } void FitsIIS::erase() { // clear memory FitsImageHDU* hdu = (FitsImageHDU*)head_->hdu(); memset(data_, '\0', hdu->realbytes()); } char* FitsIIS::get(int xx, int yy, int dx, int dy) { // fill-in in reverse order int ll = dx*dy; char* dest = new char[ll]; int ww = head_->naxis(0); int hh = head_->naxis(1); char* dptr = dest; char* sptr = (char*)data_ + ((hh-1)-yy)*ww + xx; while (ll) { memcpy(dptr, sptr, ww); sptr -= ww; dptr += ww; ll -= ww; } return dest; } void FitsIIS::set(const char* src, int xx, int yy, int dx, int dy) { // fill-in in reverse order int ll = dx*dy; int ww = head_->naxis(0); int hh = head_->naxis(1); char* sptr = (char*)src; char* dptr = (char*)data_ + ((hh-1)-yy)*ww + xx; while (ll) { memcpy(dptr, sptr, ww); sptr += ww; dptr -= ww; ll -= ww; } } saods9/tksao/fitsy++/iis.h000644 000765 000000 00000000673 12705446164 015745 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsiis_h__ #define __fitsiis_h__ #include "file.h" class FitsIIS : public FitsFile { public: FitsIIS(int, int); ~FitsIIS(); void erase(); char* get(int xx, int yy, int dx, int dy); void set(const char* src, int xx, int yy, int dx, int dy); }; #endif saods9/tksao/fitsy++/lex.C000644 000765 000000 00000146752 12705446164 015715 0ustar00joyewheel000000 000000 #line 2 "fitsy++/lex.C" #line 4 "fitsy++/lex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer ffFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *ffalloc (yy_size_t ); void *ffrealloc (void *,yy_size_t ); void fffree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 45 #define YY_END_OF_BUFFER 46 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[178] = { 0, 0, 0, 0, 0, 42, 42, 0, 0, 46, 1, 3, 1, 1, 2, 4, 41, 40, 45, 41, 39, 37, 37, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 42, 44, 44, 43, 1, 3, 1, 40, 36, 37, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 42, 43, 37, 37, 7, 9, 37, 13, 14, 37, 37, 37, 37, 20, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 5, 37, 37, 37, 37, 37, 15, 37, 37, 37, 37, 37, 37, 37, 37, 37, 27, 28, 29, 37, 37, 37, 33, 34, 35, 6, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 25, 26, 30, 37, 37, 37, 11, 10, 12, 37, 17, 37, 37, 21, 22, 24, 31, 37, 37, 37, 37, 37, 37, 32, 37, 16, 37, 19, 37, 8, 37, 37, 18, 37, 37, 23, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 7, 8, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 10, 11, 12, 13, 14, 8, 15, 16, 17, 8, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 8, 29, 30, 31, 32, 33, 1, 34, 1, 8, 1, 35, 36, 37, 38, 39, 8, 40, 41, 42, 8, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 8, 54, 55, 56, 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[58] = { 0, 1, 2, 3, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 } ; static yyconst flex_int16_t yy_base[184] = { 0, 0, 3, 37, 0, 339, 336, 5, 6, 119, 0, 14, 0, 15, 381, 381, 381, 18, 381, 108, 381, 105, 0, 101, 70, 79, 75, 81, 87, 90, 87, 92, 90, 78, 77, 89, 117, 86, 100, 102, 103, 381, 0, 381, 26, 23, 0, 19, 22, 23, 22, 0, 21, 130, 129, 99, 125, 127, 134, 121, 132, 121, 122, 127, 131, 133, 146, 151, 141, 146, 137, 140, 150, 168, 172, 175, 0, 20, 178, 185, 182, 185, 175, 0, 173, 183, 184, 192, 194, 0, 183, 179, 180, 181, 195, 198, 197, 190, 188, 189, 197, 215, 219, 222, 0, 213, 224, 224, 233, 231, 0, 226, 240, 224, 240, 225, 235, 241, 240, 232, 0, 0, 0, 242, 245, 239, 0, 0, 0, 0, 249, 244, 234, 236, 241, 264, 267, 265, 267, 281, 283, 0, 0, 0, 277, 269, 282, 0, 0, 0, 283, 0, 276, 285, 0, 289, 0, 0, 283, 295, 294, 290, 296, 288, 0, 290, 0, 302, 0, 300, 0, 296, 299, 0, 308, 314, 0, 381, 360, 364, 368, 372, 24, 376 } ; static yyconst flex_int16_t yy_def[184] = { 0, 178, 178, 177, 3, 179, 179, 180, 180, 177, 181, 177, 181, 181, 177, 177, 177, 177, 177, 177, 177, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 177, 183, 177, 177, 177, 181, 177, 181, 177, 177, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 183, 177, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 0, 177, 177, 177, 177, 177, 177 } ; static yyconst flex_int16_t yy_nxt[439] = { 0, 177, 11, 12, 13, 11, 12, 13, 18, 18, 44, 44, 44, 44, 45, 45, 47, 47, 47, 48, 49, 47, 49, 47, 47, 49, 48, 49, 51, 77, 52, 50, 77, 14, 15, 77, 14, 15, 16, 17, 18, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 22, 22, 30, 31, 22, 32, 33, 22, 34, 35, 36, 22, 37, 22, 38, 39, 40, 41, 16, 24, 25, 26, 27, 28, 29, 22, 22, 30, 31, 22, 32, 33, 22, 34, 35, 36, 22, 37, 22, 38, 39, 40, 53, 54, 55, 56, 57, 60, 61, 62, 66, 64, 67, 68, 72, 58, 63, 52, 59, 65, 73, 52, 74, 75, 50, 83, 177, 53, 54, 55, 56, 57, 60, 61, 62, 66, 64, 67, 68, 72, 58, 63, 69, 59, 65, 73, 70, 74, 75, 78, 83, 80, 84, 85, 86, 71, 87, 81, 88, 89, 90, 91, 79, 82, 92, 93, 94, 69, 95, 96, 97, 70, 98, 99, 78, 100, 80, 84, 85, 86, 71, 87, 81, 88, 89, 90, 91, 79, 82, 92, 93, 94, 101, 95, 96, 97, 102, 98, 99, 103, 100, 104, 105, 106, 107, 109, 110, 111, 112, 113, 108, 114, 115, 116, 117, 118, 119, 101, 120, 121, 122, 102, 123, 124, 103, 125, 104, 105, 106, 107, 109, 110, 111, 112, 113, 108, 114, 115, 116, 117, 118, 119, 126, 120, 121, 122, 127, 123, 124, 128, 125, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 126, 145, 146, 147, 127, 148, 149, 128, 150, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 151, 145, 146, 147, 152, 148, 149, 153, 150, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 151, 170, 171, 172, 152, 173, 174, 153, 175, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 176, 170, 171, 172, 18, 173, 174, 18, 175, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 176, 10, 10, 10, 10, 42, 42, 42, 42, 43, 43, 43, 43, 46, 177, 46, 46, 76, 76, 177, 76, 9, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177 } ; static yyconst flex_int16_t yy_chk[439] = { 0, 0, 1, 1, 1, 2, 2, 2, 7, 8, 7, 8, 7, 8, 7, 8, 11, 13, 11, 13, 17, 47, 17, 47, 48, 49, 48, 49, 182, 77, 52, 50, 45, 1, 1, 44, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 24, 25, 26, 27, 28, 29, 30, 31, 33, 32, 34, 35, 37, 28, 31, 23, 28, 32, 38, 21, 39, 40, 19, 55, 9, 24, 25, 26, 27, 28, 29, 30, 31, 33, 32, 34, 35, 37, 28, 31, 36, 28, 32, 38, 36, 39, 40, 53, 55, 54, 56, 57, 58, 36, 59, 54, 60, 61, 62, 63, 53, 54, 64, 65, 66, 36, 67, 68, 69, 36, 70, 71, 53, 72, 54, 56, 57, 58, 36, 59, 54, 60, 61, 62, 63, 53, 54, 64, 65, 66, 73, 67, 68, 69, 74, 70, 71, 75, 72, 78, 79, 80, 81, 82, 84, 85, 86, 87, 81, 88, 90, 91, 92, 93, 94, 73, 95, 96, 97, 74, 98, 99, 75, 100, 78, 79, 80, 81, 82, 84, 85, 86, 87, 81, 88, 90, 91, 92, 93, 94, 101, 95, 96, 97, 102, 98, 99, 103, 100, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 123, 124, 101, 125, 130, 131, 102, 132, 133, 103, 134, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 123, 124, 135, 125, 130, 131, 136, 132, 133, 137, 134, 138, 139, 140, 144, 145, 146, 150, 152, 153, 155, 158, 159, 160, 161, 162, 163, 135, 165, 167, 169, 136, 171, 172, 137, 174, 138, 139, 140, 144, 145, 146, 150, 152, 153, 155, 158, 159, 160, 161, 162, 163, 175, 165, 167, 169, 6, 171, 172, 5, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 178, 178, 178, 178, 179, 179, 179, 179, 180, 180, 180, 180, 181, 0, 181, 181, 183, 183, 0, 183, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "fitsy++/lex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 11 "fitsy++/lex.L" #include #include #include #include "util.h" #include "parser.H" extern YYSTYPE* fflval; extern ffFlexLexer* fflexx; extern char ff_filter[]; #define RET(x) {strcat(ff_filter,yytext);return x;} #define CLEARFILTER {ff_filter[0]='\0';} /* rules */ #line 584 "fitsy++/lex.C" #define INITIAL 0 #define EXT 1 #define FILTER 2 #define ARRAY 3 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 32 "fitsy++/lex.L" #line 690 "fitsy++/lex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 178 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 177 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 34 "fitsy++/lex.L" { // File strcpy(fflval->str,yytext); return STRING; } YY_BREAK case 2: YY_RULE_SETUP #line 39 "fitsy++/lex.L" { // first bracket BEGIN EXT; CLEARFILTER return yytext[0]; } YY_BREAK case 3: YY_RULE_SETUP #line 45 "fitsy++/lex.L" { // White Spaces } YY_BREAK case 4: YY_RULE_SETUP #line 48 "fitsy++/lex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 5: YY_RULE_SETUP #line 54 "fitsy++/lex.L" {RET(ARCH_)} YY_BREAK case 6: YY_RULE_SETUP #line 55 "fitsy++/lex.L" {RET(ARRAY_)} YY_BREAK case 7: YY_RULE_SETUP #line 56 "fitsy++/lex.L" {RET(BIG_)} YY_BREAK case 8: YY_RULE_SETUP #line 57 "fitsy++/lex.L" {RET(BIGENDIAN_)} YY_BREAK case 9: YY_RULE_SETUP #line 58 "fitsy++/lex.L" {RET(BIN_)} YY_BREAK case 10: YY_RULE_SETUP #line 59 "fitsy++/lex.L" {RET(BINKEY_)} YY_BREAK case 11: YY_RULE_SETUP #line 60 "fitsy++/lex.L" {RET(BINCOL_)} YY_BREAK case 12: YY_RULE_SETUP #line 61 "fitsy++/lex.L" {RET(BITPIX_)} YY_BREAK case 13: YY_RULE_SETUP #line 62 "fitsy++/lex.L" {RET(COL_)} YY_BREAK case 14: YY_RULE_SETUP #line 63 "fitsy++/lex.L" {RET(DIM_)} YY_BREAK case 15: YY_RULE_SETUP #line 64 "fitsy++/lex.L" {RET(DIMS_)} YY_BREAK case 16: YY_RULE_SETUP #line 65 "fitsy++/lex.L" {RET(ECLIPTIC_)} YY_BREAK case 17: YY_RULE_SETUP #line 66 "fitsy++/lex.L" {RET(ENDIAN_)} YY_BREAK case 18: YY_RULE_SETUP #line 67 "fitsy++/lex.L" {RET(EQUATORIAL_)} YY_BREAK case 19: YY_RULE_SETUP #line 68 "fitsy++/lex.L" {RET(GALACTIC_)} YY_BREAK case 20: YY_RULE_SETUP #line 69 "fitsy++/lex.L" {RET(KEY_)} YY_BREAK case 21: YY_RULE_SETUP #line 70 "fitsy++/lex.L" {RET(LAYOUT_)} YY_BREAK case 22: YY_RULE_SETUP #line 71 "fitsy++/lex.L" {RET(LITTLE_)} YY_BREAK case 23: YY_RULE_SETUP #line 72 "fitsy++/lex.L" {RET(LITTLEENDIAN_)} YY_BREAK case 24: YY_RULE_SETUP #line 73 "fitsy++/lex.L" {RET(NESTED_)} YY_BREAK case 25: YY_RULE_SETUP #line 74 "fitsy++/lex.L" {RET(NORTH_)} YY_BREAK case 26: YY_RULE_SETUP #line 75 "fitsy++/lex.L" {RET(ORDER_)} YY_BREAK case 27: YY_RULE_SETUP #line 76 "fitsy++/lex.L" {RET(QUAD_)} YY_BREAK case 28: YY_RULE_SETUP #line 77 "fitsy++/lex.L" {RET(RING_)} YY_BREAK case 29: YY_RULE_SETUP #line 78 "fitsy++/lex.L" {RET(SKIP_)} YY_BREAK case 30: YY_RULE_SETUP #line 79 "fitsy++/lex.L" {RET(SOUTH_)} YY_BREAK case 31: YY_RULE_SETUP #line 80 "fitsy++/lex.L" {RET(SYSTEM_)} YY_BREAK case 32: YY_RULE_SETUP #line 81 "fitsy++/lex.L" {RET(UNKNOWN_)} YY_BREAK case 33: YY_RULE_SETUP #line 82 "fitsy++/lex.L" {RET(XDIM_)} YY_BREAK case 34: YY_RULE_SETUP #line 83 "fitsy++/lex.L" {RET(YDIM_)} YY_BREAK case 35: YY_RULE_SETUP #line 84 "fitsy++/lex.L" {RET(ZDIM_)} YY_BREAK case 36: YY_RULE_SETUP #line 86 "fitsy++/lex.L" { // Integer fflval->integer = atoi(yytext); RET(INT) } YY_BREAK case 37: YY_RULE_SETUP #line 91 "fitsy++/lex.L" { // Extn/Col Name strcpy(fflval->str,yytext); RET(STRING) } YY_BREAK case 38: YY_RULE_SETUP #line 96 "fitsy++/lex.L" { // bracket CLEARFILTER return yytext[0]; } YY_BREAK case 39: YY_RULE_SETUP #line 101 "fitsy++/lex.L" { // comma CLEARFILTER return yytext[0]; } YY_BREAK case 40: YY_RULE_SETUP #line 106 "fitsy++/lex.L" { // White Spaces strcat(ff_filter,yytext); } YY_BREAK case 41: YY_RULE_SETUP #line 110 "fitsy++/lex.L" { // Else, return the char strcat(ff_filter,yytext); return yytext[0]; } YY_BREAK case 42: YY_RULE_SETUP #line 117 "fitsy++/lex.L" { // rest of Filter strcpy(fflval->str,yytext); fflval->str[yyleng-1] = '\0'; // Remove the ']' strcat(ff_filter,fflval->str); return STRING; } YY_BREAK case 43: YY_RULE_SETUP #line 126 "fitsy++/lex.L" { // Integer fflval->integer = atoi(yytext); return INT; } YY_BREAK case 44: YY_RULE_SETUP #line 131 "fitsy++/lex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 45: YY_RULE_SETUP #line 137 "fitsy++/lex.L" ECHO; YY_BREAK #line 1036 "fitsy++/lex.C" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(EXT): case YY_STATE_EOF(FILTER): case YY_STATE_EOF(ARRAY): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; fffree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); fffree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ ffrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) ffrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 178 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 178 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 177); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) ffalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) ffalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) fffree((void *) b->yy_ch_buf ); fffree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)ffalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)ffrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) ffalloc(new_size ); else (yy_start_stack) = (int *) ffrealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *ffalloc (yy_size_t size ) { return (void *) malloc( size ); } void *ffrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void fffree (void * ptr ) { free( (char *) ptr ); /* see ffrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 137 "fitsy++/lex.L" void ffFilter(int doit) { if (fflexx) fflexx->begin(FILTER, doit); } void ffArray(int doit) { if (fflexx) fflexx->begin(ARRAY, doit); } void ffFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/fitsy++/lex.L000644 000765 000000 00000004764 12705446164 015722 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "util.h" #include "parser.H" extern YYSTYPE* fflval; extern ffFlexLexer* fflexx; extern char ff_filter[]; #define RET(x) {strcat(ff_filter,yytext);return x;} #define CLEARFILTER {ff_filter[0]='\0';} %} %x EXT %x FILTER %x ARRAY /* rules */ %% [^[\]\t]+ { // File strcpy(fflval->str,yytext); return STRING; } \[ { // first bracket BEGIN EXT; CLEARFILTER return yytext[0]; } [ \t]+ { // White Spaces } . { // Else, return the char return yytext[0]; } { arch {RET(ARCH_)} array {RET(ARRAY_)} big {RET(BIG_)} bigendian {RET(BIGENDIAN_)} bin {RET(BIN_)} binkey {RET(BINKEY_)} bincol {RET(BINCOL_)} bitpix {RET(BITPIX_)} col {RET(COL_)} dim {RET(DIM_)} dims {RET(DIMS_)} ecliptic {RET(ECLIPTIC_)} endian {RET(ENDIAN_)} equatorial {RET(EQUATORIAL_)} galactic {RET(GALACTIC_)} key {RET(KEY_)} layout {RET(LAYOUT_)} little {RET(LITTLE_)} littleendian {RET(LITTLEENDIAN_)} nested {RET(NESTED_)} north {RET(NORTH_)} order {RET(ORDER_)} quad {RET(QUAD_)} ring {RET(RING_)} skip {RET(SKIP_)} south {RET(SOUTH_)} system {RET(SYSTEM_)} unknown {RET(UNKNOWN_)} xdim {RET(XDIM_)} ydim {RET(YDIM_)} zdim {RET(ZDIM_)} [-+]?[0-9]+ { // Integer fflval->integer = atoi(yytext); RET(INT) } [0-9A-Za-z_.-]+ { // Extn/Col Name strcpy(fflval->str,yytext); RET(STRING) } \[ { // bracket CLEARFILTER return yytext[0]; } , { // comma CLEARFILTER return yytext[0]; } [ \t]+ { // White Spaces strcat(ff_filter,yytext); } . { // Else, return the char strcat(ff_filter,yytext); return yytext[0]; } } .* { // rest of Filter strcpy(fflval->str,yytext); fflval->str[yyleng-1] = '\0'; // Remove the ']' strcat(ff_filter,fflval->str); return STRING; } { [-+]?[0-9]+ { // Integer fflval->integer = atoi(yytext); return INT; } . { // Else, return the char return yytext[0]; } } %% void ffFilter(int doit) { if (fflexx) fflexx->begin(FILTER, doit); } void ffArray(int doit) { if (fflexx) fflexx->begin(ARRAY, doit); } void ffFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/fitsy++/map.C000644 000765 000000 00000020164 12705446164 015666 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "map.h" #include "head.h" FitsMap::FitsMap() { mapdata_ = NULL; mapsize_ = 0; } char* FitsMap::enddata() { // return the address of the first data byte pass the end of data return head_ ? (char*)data_+head_->databytes() : NULL; } size_t FitsMap::endsize() { // return the size - (header+data) return head_ ? (mapsize_ - (size_t)((char*)data_+head_->databytes()-mapdata_)) : 0; } void FitsMap::found(char* here) { data_ = here + head_->headbytes(); dataSize_ = mapsize_; dataSkip_ = here - mapdata_ + head_->headbytes(); inherit_ = head_->inherit(); valid_ = 1; } void FitsMap::error() { if (manageHead_ && head_) delete head_; head_ = NULL; if (managePrimary_ && primary_) delete primary_; primary_ = NULL; data_ = NULL; dataSize_ = 0; dataSkip_ = 0; valid_ = 0; } FitsFitsMap::FitsFitsMap(ScanMode mode) { if (!valid_) return; if (mode == EXACT || pExt_ || pIndex_>-1) processExact(); else processRelax(); } void FitsFitsMap::processExact() { // find head and data for specified unit char* here = mapdata_; size_t size = mapsize_; // simple check for fits file if (strncmp(mapdata_,"SIMPLE ",8) && strncmp(mapdata_,"XTENSION",8)) { error(); return; } if (!(pExt_ || (pIndex_>0))) { // we are only looking for a primary image head_ = new FitsHead(here, size, FitsHead::EXTERNAL); if (head_->isValid()) { found(here); return; } } else { // we are looking for an extension // keep the primary header primary_ = new FitsHead(here, size, FitsHead::EXTERNAL); managePrimary_ = 1; if (!primary_->isValid()) { error(); return; } here += primary_->headbytes() + primary_->databytes(); size -= primary_->headbytes() + primary_->databytes(); if (pExt_) { while (size > 0) { head_ = new FitsHead(here, size, FitsHead::EXTERNAL); if (!head_->isValid()) { error(); return; } ext_++; if (head_->extname()) { char* a = toUpper(head_->extname()); char* b = toUpper(pExt_); if (!strncmp(a,b,strlen(b))) { delete [] a; delete [] b; found(here); return; } delete [] a; delete [] b; } here += head_->headbytes() + head_->databytes(); size -= head_->headbytes() + head_->databytes(); delete head_; head_ = NULL; } } else { for (int i=1; i0; i++) { head_ = new FitsHead(here, size, FitsHead::EXTERNAL); if (!head_->isValid()) { error(); return; } ext_++; here += head_->headbytes() + head_->databytes(); size -= head_->headbytes() + head_->databytes(); delete head_; head_ = NULL; } head_ = new FitsHead(here, size, FitsHead::EXTERNAL); if (head_->isValid()) { ext_++; found(here); return; } } } // Must have an error error(); } void FitsFitsMap::processRelax() { char* here = mapdata_; size_t size = mapsize_; // simple check for fits file if (strncmp(mapdata_,"SIMPLE ",8) && strncmp(mapdata_,"XTENSION",8)) { error(); return; } // check to see if there is an image in the primary head_ = new FitsHead(here, size, FitsHead::EXTERNAL); if (head_->isValid() && head_->naxes() > 0 && head_->naxis(0) > 0 && head_->naxis(1) > 0) { found(here); return; } // ok, no image, save primary and lets check extensions here += head_->headbytes() + head_->databytes(); size -= head_->headbytes() + head_->databytes(); primary_ = head_; managePrimary_ = 1; head_ = NULL; while (size > 0) { head_ = new FitsHead(here, size, FitsHead::EXTERNAL); if (!head_->isValid()) { error(); return; } ext_++; // check for image if (head_->isImage()) { found(here); return; } // else, check for compressed image if (head_->isBinTable() && head_->find("ZIMAGE")) { found(here); return; } // else, check for bin table named STDEVT, EVENTS, RAYEVENT if (head_->isBinTable() && head_->extname()) { char* a = toUpper(head_->extname()); if (!strncmp("STDEVT", a, 6) || !strncmp("EVENTS", a, 6) || !strncmp("RAYEVENT", a, 8)) { delete [] a; found(here); return; } } // else, check for bin table with keyword PIXTYPE = 'HEALPIX ' if (head_->isBinTable() && head_->find("PIXTYPE") && (!strncmp(head_->getString("PIXTYPE"),"HEALPIX",4))) { found(here); return; } // else, check for bin table with keyword NSIDE (also HEALPIX) if (head_->isBinTable() && head_->find("NSIDE")) { found(here); return; } here += head_->headbytes() + head_->databytes(); size -= head_->headbytes() + head_->databytes(); delete head_; head_ = NULL; } // did not find anything, bail out error(); } FitsFitsNextMap::FitsFitsNextMap(FitsFile* p) { FitsMap* prev = (FitsMap*)p; primary_ = prev->primary(); managePrimary_ = 0; head_ = prev->head(); manageHead_ = 0; FitsImageHDU* hdu = (FitsImageHDU*)head_->hdu(); data_ = (char*)prev->data() + hdu->imgbytes(); dataSize_ = 0; dataSkip_ = 0; ext_ = prev->ext(); inherit_ = prev->inherit(); byteswap_ = prev->byteswap(); endian_ = prev->endian(); valid_ = 1; pcoord_ = prev->pcoord(); pxvalid_ = prev->pxvalid(); pxmin_ = prev->pxmin(); pxmax_ = prev->pxmax(); pyvalid_ = prev->pyvalid(); pymin_ = prev->pymin(); pymax_ = prev->pymax(); pzvalid_ = prev->pzvalid(); pzmin_ = prev->pzmin(); pzmax_ = prev->pzmax(); pbvalid_ = prev->pbvalid(); pblock_ = prev->pblock(); mapdata_ = prev->mapdata(); mapsize_ = prev->mapsize(); return; } FitsArrMap::FitsArrMap() { if (!valid_) return; // reset valid_ = 0; // check to see if we have a nonzero width, height, and bitpix if (!validParams()) return; // check to see if dimensions equal mapped space if (((size_t)pWidth_*pHeight_*pDepth_*abs(pBitpix_)/8)+pSkip_ > mapsize_) return; // skip to start of data data_ = mapdata_ + pSkip_; dataSize_ = mapsize_; dataSkip_ = pSkip_; // new header head_ = new FitsHead(pWidth_, pHeight_, pDepth_, pBitpix_); if (!head_->isValid()) return; // do we byteswap? setByteSwap(); // made it this far, must be valid valid_ = 1; } FitsNRRDMap::FitsNRRDMap() { if (!valid_) return; // reset valid_ = 0; // header { char buf[1024]; char* dptr = buf; char* sptr = mapdata_; int cnt =0; do { *dptr++ = *sptr++; if (cnt>0 && (*sptr == '\n' && *(sptr-1) == '\n')) { pSkip_ = cnt+2; break; } cnt++; } while (cnt<1024); *dptr = '\0'; string x(buf); istringstream str(x); parseNRRD(str); if (!valid_) return; // reset valid_ =0; } // check to see if we have a nonzero width, height, and bitpix if (!validParams()) return; // skip to start of data data_ = mapdata_ + pSkip_; dataSize_ = mapsize_; dataSkip_ = pSkip_; // new header head_ = new FitsHead(pWidth_, pHeight_, pDepth_, pBitpix_); if (!head_->isValid()) return; // do we byteswap? setByteSwap(); // so far, so good valid_ = 1; } FitsMosaicMap::FitsMosaicMap() { if (!valid_) return; char* here = mapdata_; size_t size = mapsize_; // keep the primary header primary_ = new FitsHead(here, size, FitsHead::EXTERNAL); managePrimary_ = 1; if (!primary_->isValid()) { error(); return; } here += primary_->headbytes() + primary_->databytes(); size -= primary_->headbytes() + primary_->databytes(); // first extension head_ = new FitsHead(here, size, FitsHead::EXTERNAL); if (!head_->isValid()) { error(); return; } ext_++; found(here); } FitsMosaicNextMap::FitsMosaicNextMap(FitsFile* p) { FitsMap* prev = (FitsMap*)p; primary_ = prev->primary(); managePrimary_ = 0; ext_ = prev->ext(); mapdata_ = prev->enddata(); mapsize_ = prev->endsize(); head_ = new FitsHead(mapdata_, mapsize_, FitsHead::EXTERNAL); if (!head_->isValid()) { error(); return; } ext_++; found(mapdata_); } saods9/tksao/fitsy++/map.h000644 000765 000000 00000002063 12705446164 015731 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsmap_h__ #define __fitsmap_h__ #include "file.h" class FitsMap : public FitsFile { protected: char* mapdata_; size_t mapsize_; public: FitsMap(); virtual ~FitsMap() {} char* mapdata() {return mapdata_;} size_t mapsize() {return mapsize_;} void found(char*); void error(); char* enddata(); size_t endsize(); }; class FitsFitsMap : public virtual FitsMap { protected: void processExact(); void processRelax(); public: FitsFitsMap(ScanMode); }; class FitsFitsNextMap : public FitsMap { public: FitsFitsNextMap(FitsFile* prev); }; class FitsArrMap : public virtual FitsMap { public: FitsArrMap(); }; class FitsNRRDMap : public virtual FitsMap { public: FitsNRRDMap(); }; class FitsMosaicMap : public virtual FitsMap { public: FitsMosaicMap(); }; class FitsMosaicNextMap : public FitsMap { public: FitsMosaicNextMap(FitsFile* prev); }; #endif saods9/tksao/fitsy++/mapincr.C000644 000765 000000 00000030126 12705446164 016541 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "mapincr.h" #ifndef __WIN32 #include #include #include #include #include #include #include "head.h" //#define PAGELIMIT 1073741824 #define PAGELIMIT 536870912 FitsMapIncr::FitsMapIncr() { mapdata_ = NULL; mapsize_ = 0; page_ = 0; filesize_ = 0; seek_ = 0; dseek_ = 0; nseek_ = 0; } FitsMapIncr::~FitsMapIncr() { if (mapdata_>0) munmap((caddr_t)mapdata_, mapsize_); } FitsHead* FitsMapIncr::headRead() { // NOTE: the hdu cleans up after the hdu, // here we only clean up after the data segment // mmap will return valid if seek_ is at end of file, so check first if (filesize_-seek_<=0) return NULL; // read first BLOCK // seek_ needs to be an increment of getpagesize int pagesize = getpagesize(); off_t mmseek = (seek_/pagesize)*pagesize; size_t offset = seek_ - mmseek; int fd = open(pName_, O_RDONLY); size_t mmsize = offset+FTY_BLOCK; char* mmdata = (char*)mmap(NULL, mmsize, PROT_READ, MAP_SHARED, fd, mmseek); close(fd); // are we valid? if ((long)mmdata == -1) return NULL; // simple test if (strncmp(mmdata+offset,"SIMPLE ",8) && strncmp(mmdata+offset,"XTENSION",8)) { munmap((caddr_t)mmdata, mmsize); return NULL; } // can we find 'END'? while (mmsize-offset-FTY_BLOCK < filesize_-seek_) { if (findEnd(mmdata+mmsize-FTY_BLOCK)) break; // add another BLOCK munmap((caddr_t)mmdata, mmsize); fd = open(pName_, O_RDONLY); mmdata = (char*)mmap(NULL, mmsize+FTY_BLOCK, PROT_READ, MAP_SHARED, fd, mmseek); close(fd); // are we valid? if ((long)mmdata == -1) return NULL; mmsize += FTY_BLOCK; } // do we have a header? FitsHead* hd = new FitsHead(mmdata+offset, mmsize-offset, mmdata, mmsize, FitsHead::MMAP); if (!hd || !hd->isValid()) { delete hd; return NULL; } seek_ += mmsize-offset; // success! return hd; } void FitsMapIncr::dataSkip(size_t bytes) { seek_ += bytes; } void FitsMapIncr::dataSkipBlock(size_t blk) { seek_ += blk*FTY_BLOCK; } void FitsMapIncr::found() { // at this point we mmap the data segment // must find a page boundary int pagesize = getpagesize(); off_t mmseek = (seek_/pagesize)*pagesize; size_t offset = seek_ - mmseek; int fd = open(pName_, O_RDONLY); // determine internal page mode if (!head_->isTable() || !head_->isAsciiTable() || head_->isHeap()) { // no internal paging mapsize_ = head_->databytes()+offset; page_ = 0; } else { // if mapsize_ will exceed our inernal page limit, turn on internal paging if (head_->databytes()+offset > PAGELIMIT) { mapsize_ = PAGELIMIT; page_ = 1; dseek_ = seek_; nseek_ = seek_-offset; } else { // small enough, no internal paging mapsize_ = head_->databytes()+offset; page_ = 0; } } mapdata_ = (char*)mmap(NULL, mapsize_, PROT_READ, MAP_SHARED, fd, mmseek); close(fd); // are we valid? (we'd better be!) if ((long)mapdata_ == -1) { mapsize_ = 0; mapdata_ = NULL; error(); return; } // seek to next hdu, even if we are internal paging seek_ += head_->databytes(); // data starts after any page boundary data_ = mapdata_+offset; dataSize_ = mapsize_; dataSkip_ = 0; inherit_ = head_->inherit(); valid_ = 1; } char* FitsMapIncr::page(char* ptr, size_t row) { if (!page_) // no paging, just return return ptr; else { // be sure that at least 'row' bytes are still available if (ptr <= mapdata_+mapsize_-row) // no problem yet return ptr; else { // how far did we get nseek_ += ptr-mapdata_; // unmap the old segment munmap((caddr_t)mapdata_, mapsize_); // next mmap segment int pagesize = getpagesize(); off_t mmseek = (nseek_/pagesize)*pagesize; size_t offset = nseek_ - mmseek; int fd = open(pName_, O_RDONLY); // calc next internal page size if (head_->databytes()+offset-(nseek_-dseek_) > PAGELIMIT) mapsize_ = PAGELIMIT; else mapsize_ = head_->databytes()+offset-(nseek_-dseek_); mapdata_ =(char*)mmap(NULL, mapsize_, PROT_READ, MAP_SHARED, fd, mmseek); close(fd); // are we valid? (we'd better be!) if ((long)mapdata_ == -1) { //*** what to do here? internalError("Fitsy++ mapincr page() error"); mapsize_ = 0; mapdata_ = NULL; } nseek_ -= offset; return mapdata_+offset; } } } void FitsMapIncr::resetpage() { if (page_) { // ok, get a new page munmap((caddr_t)mapdata_, mapsize_); // remap original page int pagesize = getpagesize(); off_t mmseek = (dseek_/pagesize)*pagesize; size_t offset = dseek_ - mmseek; int fd = open(pName_, O_RDONLY); if (head_->databytes()+offset > PAGELIMIT) mapsize_ = PAGELIMIT; else mapsize_ = head_->databytes()+offset; mapdata_ =(char*)mmap(NULL, mapsize_, PROT_READ, MAP_SHARED, fd, mmseek); close(fd); // are we valid? (we'd better be!) if ((long)mapdata_ == -1) { //*** what to do here? internalError("Fitsy++ mapincr resetpage() error"); mapsize_ = 0; mapdata_ = NULL; } // reset, we may have moved in memory // found the data, save it nseek_ = dseek_-offset; data_ = mapdata_+offset; dataSize_ = mapsize_; dataSkip_ = offset; } } void FitsMapIncr::error() { if (manageHead_ && head_) delete head_; head_ = NULL; if (managePrimary_ && primary_) delete primary_; primary_ = NULL; data_ = NULL; dataSize_ = 0; dataSkip_ = 0; valid_ = 0; } FitsFitsMapIncr::FitsFitsMapIncr(ScanMode mode) { if (!valid_) return; if (mode == EXACT || pExt_ || pIndex_>-1) processExact(); else processRelax(); } void FitsFitsMapIncr::processExact() { // simple check for fits file if (!(pExt_ || (pIndex_>0))) { // we are only looking for a primary image head_ = headRead(); if (head_ && head_->isValid()) { found(); return; } } else { // we are looking for an extension // keep the primary header primary_ = headRead(); managePrimary_ = 1; if (!(primary_ && primary_->isValid())) { error(); return; } dataSkipBlock(primary_->datablocks()); if (pExt_) { while (seek_ < filesize_) { head_ = headRead(); if (!(head_ && head_->isValid())) { error(); return; } ext_++; if (head_->extname()) { char* a = toUpper(head_->extname()); char* b = toUpper(pExt_); if (!strncmp(a,b,strlen(b))) { delete [] a; delete [] b; found(); return; } delete [] a; delete [] b; } dataSkipBlock(head_->datablocks()); delete head_; head_ = NULL; } } else { for (int i=1; iisValid())) { error(); return; } ext_++; dataSkipBlock(head_->datablocks()); delete head_; head_ = NULL; } head_ = headRead(); if (head_ && head_->isValid()) { ext_++; found(); return; } } } // Must have an error error(); } void FitsFitsMapIncr::processRelax() { // check to see if there is an image in the primary head_ = headRead(); if (!(head_ && head_->isValid())) { error(); return; } if (head_ && head_->isValid() && head_->naxes() > 0 && head_->naxis(0) > 0 && head_->naxis(1) > 0) { found(); return; } // ok, no image, save primary and lets check extensions primary_ = head_; managePrimary_ = 1; dataSkipBlock(head_->datablocks()); head_ = NULL; while (seek_ < filesize_) { head_ = headRead(); if (!(head_ && head_->isValid())) { error(); return; } ext_++; // check for image if (head_->isImage()) { found(); return; } // else, check for compressed image if (head_->isBinTable() && head_->find("ZIMAGE")) { found(); return; } // else, check for bin table named STDEVT, EVENTS, RAYEVENT if (head_->isBinTable() && head_->extname()) { char* a = toUpper(head_->extname()); if (!strncmp("STDEVT", a, 6) || !strncmp("EVENTS", a, 6) || !strncmp("RAYEVENT", a, 8)) { delete [] a; found(); return; } else delete [] a; } // else, check for bin table with keyword PIXTYPE = 'HEALPIX ' if (head_->isBinTable() && head_->find("PIXTYPE") && (!strncmp(head_->getString("PIXTYPE"),"HEALPIX",4))) { found(); return; } // else, check for bin table with keyword NSIDE (also HEALPIX) if (head_->isBinTable() && head_->find("NSIDE")) { found(); return; } dataSkipBlock(head_->datablocks()); delete head_; head_ = NULL; } // did not find anything, bail out error(); } FitsFitsNextMapIncr::FitsFitsNextMapIncr(FitsFile* p) { FitsMapIncr* prev = (FitsMapIncr*)p; primary_ = prev->primary(); managePrimary_ = 0; head_ = prev->head(); manageHead_ = 0; FitsImageHDU* hdu = (FitsImageHDU*)head_->hdu(); data_ = (char*)prev->data() + hdu->imgbytes(); dataSize_ = 0; dataSkip_ = 0; ext_ = prev->ext(); inherit_ = prev->inherit(); byteswap_ = prev->byteswap(); endian_ = prev->endian(); valid_ = 1; pcoord_ = prev->pcoord(); pxvalid_ = prev->pxvalid(); pxmin_ = prev->pxmin(); pxmax_ = prev->pxmax(); pyvalid_ = prev->pyvalid(); pymin_ = prev->pymin(); pymax_ = prev->pymax(); pzvalid_ = prev->pzvalid(); pzmin_ = prev->pzmin(); pzmax_ = prev->pzmax(); pbvalid_ = prev->pbvalid(); pblock_ = prev->pblock(); filesize_ = prev->filesize(); seek_ = prev->seek(); return; } FitsArrMapIncr::FitsArrMapIncr() { if (!valid_) return; // reset valid_ = 0; // check to see if we have a nonzero width, height, and bitpix if (!validParams()) return; // check to see if dimensions equal mapped space size_t mmsize = ((size_t)pWidth_*pHeight_*pDepth_*abs(pBitpix_)/8) + pSkip_; if (mmsize > filesize_) return; // skip to start of data int fd = open(pName_, O_RDONLY); char* mmdata = (char*)mmap(NULL, mmsize, PROT_READ, MAP_SHARED, fd, 0); close(fd); // are we valid? if ((long)mmdata == -1) return; // new header head_ = new FitsHead(pWidth_, pHeight_, pDepth_, pBitpix_, mmdata, mmsize, FitsHead::ALLOC); if (!head_->isValid()) return; seek_ = mmsize; data_ = mmdata + pSkip_; dataSize_ = mapsize_; dataSkip_ = pSkip_; // do we byteswap? setByteSwap(); // made it this far, must be valid valid_ = 1; } FitsMosaicMapIncr::FitsMosaicMapIncr() { if (!valid_) return; // keep the primary header primary_ = headRead(); managePrimary_ = 1; if (!(primary_ && primary_->isValid())) { error(); return; } dataSkipBlock(primary_->datablocks()); // first extension head_ = headRead(); if (!(head_ && head_->isValid())) { error(); return; } ext_++; found(); } FitsMosaicNextMapIncr::FitsMosaicNextMapIncr(FitsFile* p) { FitsMapIncr* prev = (FitsMapIncr*)p; pName_ = dupstr(prev->pName()); filesize_ = prev->filesize(); seek_ = prev->seek(); primary_ = prev->primary(); managePrimary_ = 0; ext_ = prev->ext(); head_ = headRead(); if (!(head_ && head_->isValid())) { error(); return; } ext_++; found(); } #else FitsMapIncr::FitsMapIncr() { mapdata_ = NULL; mapsize_ = 0; } FitsMapIncr::~FitsMapIncr() {} FitsHead* FitsMapIncr::headRead() {} void FitsMapIncr::dataSkip(size_t bytes) {} void FitsMapIncr::dataSkipBlock(size_t blk) {} void FitsMapIncr::found() {} char* FitsMapIncr::page(char* ptr, size_t row) { return NULL; } void FitsMapIncr::resetpage() {} void FitsMapIncr::error() {} FitsFitsMapIncr::FitsFitsMapIncr(ScanMode mode) {} void FitsFitsMapIncr::processExact() {} void FitsFitsMapIncr::processRelax() {} FitsFitsNextMapIncr::FitsFitsNextMapIncr(FitsFile* p) {} FitsArrMapIncr::FitsArrMapIncr() {} FitsMosaicMapIncr::FitsMosaicMapIncr() {} FitsMosaicNextMapIncr::FitsMosaicNextMapIncr(FitsFile* p) {} #endif saods9/tksao/fitsy++/mapincr.h000644 000765 000000 00000002645 12705446164 016613 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsmapincr_h__ #define __fitsmapincr_h__ #include "file.h" class FitsMapIncr : public FitsFile { protected: char* mapdata_; // mmap segment ptr size_t mapsize_; // mmap segment size int page_; // flag to indicate paging mode size_t filesize_; // size of the total segment size_t seek_; // offset into segment size_t dseek_; // offset to data segment size_t nseek_; // offset into next page data segment FitsHead* headRead(); void dataSkip(size_t); void dataSkipBlock(size_t); void found(); void error(); public: FitsMapIncr(); virtual ~FitsMapIncr(); char* page(char*, size_t); void resetpage(); size_t filesize() {return filesize_;} size_t seek() {return seek_;} }; class FitsFitsMapIncr : public virtual FitsMapIncr { protected: void processExact(); void processRelax(); public: FitsFitsMapIncr(ScanMode); }; class FitsFitsNextMapIncr : public FitsMapIncr { public: FitsFitsNextMapIncr(FitsFile* prev); }; class FitsArrMapIncr : public virtual FitsMapIncr { public: FitsArrMapIncr(); }; class FitsMosaicMapIncr : public virtual FitsMapIncr { public: FitsMosaicMapIncr(); }; class FitsMosaicNextMapIncr : public FitsMapIncr { public: FitsMosaicNextMapIncr(FitsFile* prev); }; #endif saods9/tksao/fitsy++/mmap.C000644 000765 000000 00000002164 12705446164 016043 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "mmap.h" #ifndef __WIN32 #include #include #include #include #include FitsMMap::FitsMMap(const char* fn) { // parse the fn and options parse(fn); if (!valid_) return; // reset valid_ = 0; if (!pName_) return; // Map the file. int file = open(pName_, O_RDONLY); if (file == -1) return; struct stat info; if (fstat(file, &info) < 0) return; // check to see if we have something, we may have a small array if (info.st_size <= 0) return; // map it mapsize_ = info.st_size; mapdata_ = (char*)mmap(NULL, mapsize_, PROT_READ, MAP_SHARED, file, 0); // close the file close(file); // are we valid? if ((long)mapdata_ == -1) return; // so far, so good valid_ = 1; } FitsMMap::~FitsMMap() { if (mapdata_>0) munmap((caddr_t)mapdata_, mapsize_); } #else FitsMMap::FitsMMap(const char* fn) {} FitsMMap::~FitsMMap() {} #endif saods9/tksao/fitsy++/mmap.h000644 000765 000000 00000002216 12705446164 016106 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsmmap_h__ #define __fitsmmap_h__ #include "map.h" class FitsMMap : public virtual FitsMap { public: FitsMMap(const char*); virtual ~FitsMMap(); }; class FitsFitsMMap : public FitsMMap, public FitsFitsMap { public: FitsFitsMMap(const char* fn, ScanMode mode) : FitsMMap(fn), FitsFitsMap(mode) {} }; class FitsFitsNextMMap : public FitsFitsNextMap { public: FitsFitsNextMMap(FitsFile* prev) : FitsFitsNextMap(prev) {} }; class FitsArrMMap : public FitsMMap, public FitsArrMap { public: FitsArrMMap(const char* fn) : FitsMMap(fn), FitsArrMap() {} }; class FitsNRRDMMap : public FitsMMap, public FitsNRRDMap { public: FitsNRRDMMap(const char* fn) : FitsMMap(fn), FitsNRRDMap() {} }; class FitsMosaicMMap : public FitsMMap, public FitsMosaicMap { public: FitsMosaicMMap(const char* fn) : FitsMMap(fn), FitsMosaicMap() {} }; class FitsMosaicNextMMap : public FitsMosaicNextMap { public: FitsMosaicNextMMap(FitsFile* prev) : FitsMosaicNextMap(prev) {} }; #endif saods9/tksao/fitsy++/mmapincr.C000644 000765 000000 00000001552 12705446164 016717 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "mmapincr.h" #ifndef __WIN32 #include #include #include #include #include FitsMMapIncr::FitsMMapIncr(const char* fn) { // parse the fn and options parse(fn); if (!valid_) return; // reset valid_ =0; if (!pName_) return; // Map the file. int fd = open(pName_, O_RDONLY); if (fd == -1) return; struct stat info; if (fstat(fd, &info) < 0) return; close(fd); // check to see if we have something, we may have a small array if (info.st_size <= 0) return; filesize_ = info.st_size; // so far, so good valid_ = 1; } #else FitsMMapIncr::FitsMMapIncr(const char* fn) {} #endif saods9/tksao/fitsy++/mmapincr.h000644 000765 000000 00000002160 12705446164 016760 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsmmapincr_h__ #define __fitsmmapincr_h__ #include "mapincr.h" class FitsMMapIncr : public virtual FitsMapIncr { public: FitsMMapIncr(const char*); }; class FitsFitsMMapIncr : public FitsMMapIncr, public FitsFitsMapIncr { public: FitsFitsMMapIncr(const char* fn, ScanMode mode) : FitsMMapIncr(fn), FitsFitsMapIncr(mode) {} }; class FitsFitsNextMMapIncr : public FitsFitsNextMapIncr { public: FitsFitsNextMMapIncr(FitsFile* prev) : FitsFitsNextMapIncr(prev) {} }; class FitsArrMMapIncr : public FitsMMapIncr, public FitsArrMapIncr { public: FitsArrMMapIncr(const char* fn) : FitsMMapIncr(fn), FitsArrMapIncr() {} }; class FitsMosaicMMapIncr : public FitsMMapIncr, public FitsMosaicMapIncr { public: FitsMosaicMMapIncr(const char* fn) : FitsMMapIncr(fn), FitsMosaicMapIncr() {} }; class FitsMosaicNextMMapIncr : public FitsMosaicNextMapIncr { public: FitsMosaicNextMMapIncr(FitsFile* prev) : FitsMosaicNextMapIncr(prev) {} }; #endif saods9/tksao/fitsy++/nrrd.C000644 000765 000000 00000003153 12705446164 016055 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "nrrd.h" #include "head.h" FitsNRRD::FitsNRRD(FitsFile* fits) { byteswap_ = fits->byteswap(); endian_ = fits->endian(); pBitpix_ = fits->pBitpix(); pWidth_ = fits->pWidth(); pHeight_ = fits->pHeight(); pDepth_ = fits->pDepth(); size_ = (size_t)pWidth_*pHeight_*pDepth_; } FitsNRRD::~FitsNRRD() { if (data_) delete [] (char*)data_; } int FitsNRRD::initHeader(FitsFile* fits) { // simple check if (!pWidth_ || !pHeight_ || !pBitpix_) return 0; // create header head_ = new FitsHead(pWidth_, pHeight_, pDepth_, pBitpix_); if (!head_->isValid()) return 0; // other primary_ = fits->primary(); managePrimary_ = 0; inherit_ = head_->inherit(); return 1; } template FitsNRRDm::FitsNRRDm(FitsFile* fits) : FitsNRRD(fits) { } template void FitsNRRDm::uncompress(FitsFile* fits) { if (!initHeader(fits)) return; T* dest = new T[size_]; if (!dest) { internalError("Fitsy++ nrrd unable to allocate memory"); return; } memset(dest, 0, size_*sizeof(T)); compressed(dest, (char*)fits->data(), fits->dataSize()-fits->dataSkip()); data_ = dest; dataSize_ = size_; dataSkip_ = 0; // all done valid_ = 1; } template class FitsNRRDm; template class FitsNRRDm; template class FitsNRRDm; template class FitsNRRDm; template class FitsNRRDm; template class FitsNRRDm; template class FitsNRRDm; saods9/tksao/fitsy++/nrrd.h000644 000765 000000 00000001205 12705446164 016116 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsnrrd_h__ #define __fitsnrrd_h__ #include "file.h" class FitsNRRD : public FitsFile { protected: size_t size_; protected: int initHeader(FitsFile*); public: FitsNRRD(FitsFile*); virtual ~FitsNRRD(); }; template class FitsNRRDm : public FitsNRRD { private: void swapBytes(FitsFile::ArchType); protected: void uncompress(FitsFile* fits); virtual int compressed(T*, char*, size_t) =0; public: FitsNRRDm(FitsFile*); }; #endif saods9/tksao/fitsy++/nrrdgzip.C000644 000765 000000 00000004271 12705446164 016751 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include using namespace std; #include "nrrdgzip.h" #include "zlib.h" #include "util.h" template FitsNRRDGzipm::FitsNRRDGzipm(FitsFile* fits) : FitsNRRDm(fits) { FitsNRRDm::uncompress(fits); } template int FitsNRRDGzipm::compressed(T* dest, char* src, size_t sz) { z_stream zstrm; zstrm.zalloc = NULL; zstrm.zfree = NULL; zstrm.opaque = NULL; zstrm.avail_in = sz; zstrm.next_in = (Bytef*)src; zstrm.avail_out = this->size_*sizeof(T); zstrm.next_out = (Bytef*)dest; // look for both zlib and gzip headers if (inflateInit2(&zstrm, MAX_WBITS+32) != Z_OK) { internalError("Fitsy++ gzip inflateInit error"); return 0; } if (DebugCompress) cerr << " inflate START: avail_in " << zstrm.avail_in << " avail_out " << zstrm.avail_out << " total_in " << zstrm.total_in << " total_out " << zstrm.total_out << endl; int result = ::inflate(&zstrm, Z_FINISH); switch (result) { case Z_OK: if (DebugCompress) cerr << " inflate OK: avail_in " << zstrm.avail_in << " avail_out " << zstrm.avail_out << " total_in " << zstrm.total_in << " total_out " << zstrm.total_out << endl; break; case Z_STREAM_END: if (DebugCompress) cerr << " inflate STREAM_END: avail_in " << zstrm.avail_in << " avail_out " << zstrm.avail_out << " total_in " << zstrm.total_in << " total_out " << zstrm.total_out << endl; break; case Z_BUF_ERROR: if (DebugCompress) cerr << " inflate BUF_ERROR: avail_in " << zstrm.avail_in << " avail_out " << zstrm.avail_out << endl; return 0; default: internalError("Fitsy++ gzip inflate error"); return 0; } inflateEnd(&zstrm); return 1; } template class FitsNRRDGzipm; template class FitsNRRDGzipm; template class FitsNRRDGzipm; template class FitsNRRDGzipm; template class FitsNRRDGzipm; template class FitsNRRDGzipm; template class FitsNRRDGzipm; saods9/tksao/fitsy++/nrrdgzip.h000644 000765 000000 00000000620 12705446164 017010 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsnrrdgzip_h__ #define __fitsnrrdgzip_h__ #include "nrrd.h" template class FitsNRRDGzipm : public FitsNRRDm { private: int compressed(T*, char*, size_t); public: FitsNRRDGzipm(FitsFile*); }; #endif saods9/tksao/fitsy++/nrrdlex.C000644 000765 000000 00000212654 12705446164 016576 0ustar00joyewheel000000 000000 #line 2 "fitsy++/nrrdlex.C" #line 4 "fitsy++/nrrdlex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer nrrdFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *nrrdalloc (yy_size_t ); void *nrrdrealloc (void *,yy_size_t ); void nrrdfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 105 #define YY_END_OF_BUFFER 106 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[359] = { 0, 0, 0, 2, 2, 106, 104, 100, 103, 104, 104, 104, 95, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 104, 104, 2, 1, 100, 101, 0, 95, 97, 96, 95, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 58, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 4, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 102, 0, 98, 2, 0, 0, 0, 96, 99, 99, 63, 99, 99, 60, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 57, 29, 99, 99, 99, 99, 99, 69, 67, 99, 99, 99, 99, 5, 66, 99, 53, 99, 99, 99, 99, 99, 99, 99, 99, 54, 99, 99, 99, 99, 99, 99, 99, 96, 0, 97, 99, 82, 99, 74, 99, 89, 99, 22, 99, 11, 99, 99, 99, 99, 99, 99, 99, 12, 99, 59, 99, 99, 99, 23, 99, 99, 72, 99, 40, 85, 83, 90, 91, 99, 99, 99, 99, 99, 99, 99, 50, 71, 99, 55, 99, 19, 99, 37, 99, 99, 99, 99, 99, 56, 99, 49, 99, 61, 99, 99, 3, 99, 99, 99, 99, 99, 99, 47, 30, 35, 42, 0, 93, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 28, 99, 79, 13, 99, 99, 25, 99, 26, 99, 14, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 48, 99, 62, 0, 0, 0, 24, 92, 99, 64, 99, 99, 76, 70, 68, 16, 77, 20, 99, 99, 38, 0, 99, 99, 99, 99, 32, 99, 99, 99, 99, 99, 87, 65, 99, 99, 99, 94, 99, 31, 36, 43, 99, 99, 99, 99, 99, 99, 0, 27, 33, 45, 99, 99, 86, 84, 99, 75, 99, 99, 99, 99, 52, 73, 41, 6, 7, 8, 9, 10, 99, 80, 99, 39, 0, 0, 99, 21, 51, 99, 18, 99, 99, 99, 81, 34, 46, 99, 88, 15, 17, 99, 44, 78, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 5, 6, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 14, 1, 1, 1, 1, 1, 1, 1, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 25, 32, 33, 34, 35, 25, 36, 37, 38, 39, 1, 40, 1, 1, 41, 1, 42, 43, 44, 45, 46, 47, 48, 49, 50, 25, 51, 52, 53, 54, 55, 56, 25, 57, 58, 59, 60, 25, 61, 62, 63, 64, 65, 1, 66, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[67] = { 0, 1, 1, 2, 1, 3, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1 } ; static yyconst flex_int16_t yy_base[367] = { 0, 0, 0, 1080, 1073, 1060, 1098, 1055, 1098, 1051, 1047, 60, 70, 80, 81, 91, 106, 89, 82, 85, 83, 96, 1046, 104, 135, 147, 149, 141, 158, 204, 176, 218, 69, 985, 0, 1098, 1047, 1098, 270, 166, 81, 137, 280, 1042, 322, 174, 152, 169, 201, 101, 199, 205, 210, 215, 160, 223, 290, 310, 295, 292, 244, 291, 305, 314, 296, 306, 340, 346, 318, 347, 352, 345, 350, 351, 360, 1040, 358, 197, 356, 355, 382, 362, 377, 353, 383, 386, 385, 390, 389, 405, 411, 1098, 979, 1098, 0, 1039, 1038, 457, 467, 434, 429, 1036, 408, 195, 1035, 430, 477, 479, 482, 483, 484, 485, 486, 487, 489, 491, 488, 497, 490, 493, 492, 1034, 441, 496, 505, 510, 506, 522, 513, 516, 544, 546, 518, 551, 1032, 547, 554, 1026, 548, 549, 553, 552, 555, 571, 561, 578, 1023, 563, 572, 567, 574, 587, 581, 591, 640, 649, 658, 668, 585, 593, 579, 87, 1022, 669, 1021, 670, 1013, 671, 672, 673, 674, 675, 676, 678, 1012, 677, 1011, 86, 239, 259, 98, 679, 680, 681, 682, 698, 1010, 1009, 1008, 1005, 257, 702, 707, 704, 724, 699, 723, 729, 1004, 732, 955, 734, 949, 735, 438, 736, 738, 739, 741, 740, 889, 749, 747, 753, 841, 758, 755, 840, 768, 760, 769, 794, 782, 801, 837, 265, 267, 269, 391, 771, 775, 777, 804, 805, 297, 780, 807, 810, 812, 811, 700, 823, 697, 694, 816, 819, 693, 418, 381, 610, 691, 814, 832, 815, 828, 846, 847, 848, 852, 845, 853, 857, 872, 850, 690, 876, 639, 576, 833, 850, 1098, 637, 882, 635, 883, 618, 634, 633, 630, 626, 881, 624, 895, 874, 521, 859, 621, 354, 907, 905, 623, 909, 913, 885, 908, 915, 495, 453, 893, 920, 922, 436, 925, 1098, 1098, 1098, 923, 934, 975, 939, 930, 932, 899, 1098, 921, 929, 966, 947, 431, 425, 954, 422, 972, 951, 970, 983, 417, 348, 315, 311, 303, 301, 299, 261, 985, 255, 989, 1098, 964, 967, 996, 237, 231, 997, 181, 998, 1000, 1002, 172, 1098, 1098, 991, 163, 161, 109, 1001, 94, 88, 1098, 1061, 1065, 1067, 1074, 1081, 1084, 1089, 1092 } ; static yyconst flex_int16_t yy_def[367] = { 0, 358, 1, 359, 359, 358, 358, 358, 358, 358, 360, 358, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 358, 362, 363, 358, 358, 358, 358, 360, 364, 364, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 358, 362, 358, 363, 365, 366, 358, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 358, 358, 358, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 358, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 358, 358, 358, 358, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 358, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 358, 358, 358, 361, 361, 361, 361, 361, 361, 358, 358, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 358, 358, 358, 361, 361, 361, 361, 361, 361, 361, 361, 361, 358, 358, 361, 361, 361, 361, 361, 361, 361, 0, 358, 358, 358, 358, 358, 358, 358, 358 } ; static yyconst flex_int16_t yy_nxt[1165] = { 0, 6, 7, 8, 9, 10, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 22, 28, 29, 30, 31, 22, 22, 22, 22, 32, 6, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 22, 28, 29, 30, 31, 22, 22, 22, 22, 33, 6, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 358, 358, 358, 358, 44, 358, 358, 358, 358, 358, 214, 358, 91, 225, 358, 96, 358, 62, 358, 47, 59, 358, 48, 60, 358, 51, 358, 45, 52, 358, 44, 46, 58, 49, 50, 53, 54, 91, 61, 63, 55, 96, 64, 62, 56, 47, 59, 48, 60, 103, 57, 51, 45, 228, 52, 358, 46, 58, 49, 50, 53, 358, 54, 61, 63, 65, 55, 358, 64, 358, 56, 95, 358, 66, 103, 57, 73, 68, 358, 67, 358, 358, 74, 358, 75, 69, 41, 76, 77, 358, 100, 65, 358, 70, 358, 71, 358, 95, 72, 66, 95, 358, 73, 68, 67, 101, 99, 74, 110, 75, 83, 69, 76, 84, 77, 358, 100, 358, 70, 358, 71, 358, 104, 72, 358, 358, 95, 85, 86, 160, 358, 101, 99, 110, 78, 358, 83, 105, 358, 84, 108, 79, 80, 358, 81, 102, 106, 137, 107, 82, 87, 358, 85, 86, 111, 160, 88, 358, 109, 358, 78, 89, 226, 105, 358, 90, 108, 79, 80, 81, 102, 106, 137, 107, 82, 358, 87, 358, 234, 358, 111, 358, 88, 109, 227, 358, 89, 358, 119, 358, 90, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 358, 358, 358, 119, 44, 358, 358, 358, 275, 358, 267, 358, 268, 358, 269, 358, 358, 116, 117, 120, 358, 358, 112, 118, 358, 358, 113, 124, 358, 123, 44, 97, 358, 98, 98, 98, 98, 98, 98, 98, 98, 98, 114, 116, 117, 120, 121, 112, 118, 115, 358, 113, 122, 124, 123, 358, 358, 358, 358, 128, 358, 358, 358, 358, 358, 358, 358, 114, 358, 315, 358, 121, 358, 125, 115, 130, 134, 122, 126, 127, 129, 132, 133, 135, 128, 131, 136, 358, 138, 139, 142, 358, 358, 358, 144, 358, 358, 143, 125, 358, 358, 130, 134, 126, 127, 129, 132, 133, 140, 135, 131, 145, 136, 138, 139, 358, 142, 148, 358, 144, 147, 358, 149, 143, 146, 141, 285, 358, 358, 270, 159, 284, 358, 150, 140, 358, 151, 145, 153, 358, 358, 358, 152, 148, 358, 147, 358, 149, 358, 146, 141, 358, 247, 177, 270, 178, 159, 248, 179, 150, 180, 151, 157, 358, 153, 161, 158, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 358, 98, 98, 98, 98, 98, 98, 98, 98, 98, 358, 157, 358, 161, 158, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 166, 358, 358, 358, 162, 170, 168, 169, 171, 175, 174, 358, 358, 163, 164, 181, 358, 165, 172, 358, 167, 173, 358, 176, 358, 182, 166, 358, 358, 162, 183, 170, 168, 169, 171, 175, 174, 190, 163, 164, 184, 181, 165, 172, 185, 167, 186, 173, 176, 187, 358, 182, 358, 358, 358, 358, 183, 358, 358, 358, 358, 358, 312, 190, 188, 184, 189, 358, 191, 358, 185, 186, 197, 358, 187, 192, 193, 358, 358, 194, 358, 195, 196, 202, 358, 358, 198, 358, 203, 199, 188, 358, 189, 358, 191, 200, 201, 358, 197, 358, 192, 204, 193, 205, 194, 208, 195, 196, 206, 202, 303, 198, 213, 211, 203, 199, 358, 207, 286, 212, 200, 209, 201, 287, 358, 308, 204, 358, 205, 358, 358, 208, 358, 206, 314, 303, 358, 213, 211, 358, 358, 358, 207, 358, 212, 358, 209, 154, 154, 154, 154, 154, 154, 154, 154, 154, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 215, 216, 219, 210, 217, 223, 222, 358, 358, 220, 358, 358, 218, 221, 358, 358, 358, 358, 230, 358, 232, 358, 224, 229, 358, 231, 215, 216, 219, 210, 217, 223, 222, 235, 236, 220, 233, 218, 221, 238, 358, 358, 237, 230, 240, 232, 358, 224, 229, 358, 231, 358, 358, 358, 241, 358, 358, 358, 358, 235, 236, 233, 239, 243, 358, 238, 358, 244, 237, 240, 358, 245, 358, 242, 252, 358, 254, 358, 246, 251, 241, 249, 250, 253, 255, 358, 358, 239, 358, 243, 257, 256, 358, 244, 358, 259, 245, 358, 242, 358, 252, 258, 254, 246, 251, 262, 249, 250, 253, 263, 255, 358, 260, 261, 272, 257, 256, 265, 358, 271, 259, 358, 358, 276, 358, 264, 258, 358, 358, 358, 262, 358, 358, 358, 263, 273, 358, 260, 261, 272, 358, 266, 280, 265, 271, 358, 274, 288, 276, 358, 278, 264, 279, 281, 358, 277, 282, 358, 358, 283, 290, 273, 358, 358, 358, 358, 266, 358, 280, 358, 358, 274, 289, 288, 358, 278, 291, 279, 304, 281, 277, 282, 293, 294, 283, 290, 292, 295, 298, 358, 297, 358, 299, 358, 301, 305, 296, 289, 358, 358, 358, 291, 358, 304, 313, 311, 358, 300, 293, 294, 358, 292, 358, 295, 298, 297, 302, 306, 299, 301, 305, 296, 358, 307, 358, 358, 358, 309, 310, 313, 358, 311, 358, 300, 323, 320, 317, 358, 358, 358, 358, 302, 358, 306, 337, 316, 358, 358, 307, 358, 321, 358, 309, 318, 310, 322, 358, 319, 326, 323, 320, 324, 317, 325, 358, 327, 358, 328, 358, 337, 316, 358, 358, 338, 335, 321, 336, 341, 318, 334, 322, 339, 319, 358, 326, 342, 324, 358, 325, 358, 327, 344, 358, 328, 329, 330, 331, 332, 333, 335, 358, 336, 358, 341, 334, 343, 358, 340, 358, 349, 345, 342, 350, 358, 358, 358, 344, 358, 358, 358, 347, 358, 358, 346, 356, 358, 358, 358, 358, 358, 358, 343, 340, 348, 349, 345, 351, 350, 358, 358, 358, 352, 353, 358, 354, 357, 347, 355, 346, 358, 356, 358, 358, 358, 155, 97, 93, 358, 348, 358, 36, 351, 93, 358, 38, 37, 352, 353, 36, 354, 357, 358, 355, 34, 34, 34, 34, 34, 34, 34, 39, 39, 43, 43, 43, 43, 92, 35, 92, 92, 92, 92, 92, 94, 35, 94, 94, 94, 94, 94, 40, 358, 40, 154, 358, 154, 156, 358, 156, 5, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358 } ; static yyconst flex_int16_t yy_chk[1165] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 14, 18, 20, 12, 19, 177, 161, 357, 17, 161, 15, 32, 177, 356, 40, 21, 20, 180, 14, 18, 49, 14, 18, 23, 15, 16, 13, 15, 354, 12, 13, 17, 14, 14, 15, 16, 32, 19, 21, 16, 40, 23, 20, 16, 14, 18, 14, 18, 49, 16, 15, 13, 180, 15, 24, 13, 17, 14, 14, 15, 27, 16, 19, 21, 24, 16, 25, 23, 26, 16, 41, 46, 24, 49, 16, 27, 25, 28, 24, 54, 353, 27, 352, 27, 25, 39, 27, 28, 47, 46, 24, 348, 26, 45, 26, 30, 41, 26, 24, 39, 344, 27, 25, 24, 47, 45, 27, 54, 27, 30, 25, 27, 30, 28, 103, 46, 77, 26, 50, 26, 48, 50, 26, 29, 51, 39, 30, 30, 103, 52, 47, 45, 54, 29, 53, 30, 50, 31, 30, 52, 29, 29, 55, 29, 48, 51, 77, 51, 29, 31, 342, 30, 30, 55, 103, 31, 341, 53, 178, 29, 31, 178, 50, 60, 31, 52, 29, 29, 29, 48, 51, 77, 51, 29, 335, 31, 190, 190, 179, 55, 333, 31, 53, 179, 225, 31, 226, 60, 227, 31, 38, 38, 38, 38, 38, 38, 38, 38, 38, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 56, 61, 59, 60, 42, 58, 64, 234, 234, 332, 225, 331, 226, 330, 227, 62, 65, 58, 58, 61, 57, 329, 56, 59, 63, 328, 56, 65, 68, 64, 42, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 57, 58, 58, 61, 62, 56, 59, 57, 66, 56, 63, 65, 64, 71, 67, 69, 327, 68, 72, 73, 70, 83, 287, 79, 78, 57, 76, 287, 74, 62, 81, 66, 57, 70, 73, 63, 66, 67, 69, 71, 72, 74, 68, 70, 76, 82, 78, 79, 81, 248, 80, 84, 83, 86, 85, 82, 66, 88, 87, 70, 73, 66, 67, 69, 71, 72, 80, 74, 70, 84, 76, 78, 79, 89, 81, 87, 102, 83, 86, 90, 88, 82, 85, 80, 248, 326, 247, 228, 102, 247, 321, 89, 80, 319, 89, 84, 90, 100, 105, 318, 89, 87, 99, 86, 301, 88, 204, 85, 80, 122, 204, 122, 228, 122, 102, 204, 122, 89, 122, 89, 99, 297, 90, 105, 100, 89, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 106, 99, 107, 105, 100, 108, 109, 110, 111, 112, 113, 116, 114, 118, 115, 120, 119, 110, 296, 123, 117, 106, 114, 112, 113, 115, 119, 118, 124, 126, 107, 108, 123, 125, 109, 116, 128, 111, 117, 129, 120, 132, 124, 110, 284, 127, 106, 125, 114, 112, 113, 115, 119, 118, 132, 107, 108, 126, 123, 109, 116, 127, 111, 128, 117, 120, 129, 130, 124, 131, 135, 138, 139, 125, 133, 141, 140, 136, 142, 284, 132, 130, 126, 131, 144, 133, 147, 127, 128, 141, 149, 129, 135, 136, 143, 148, 138, 150, 139, 140, 147, 145, 160, 142, 152, 148, 143, 130, 158, 131, 151, 133, 144, 145, 153, 141, 159, 135, 149, 136, 150, 138, 152, 139, 140, 150, 147, 267, 142, 160, 158, 148, 143, 249, 151, 249, 159, 144, 153, 145, 249, 275, 275, 149, 286, 150, 290, 281, 152, 279, 150, 286, 267, 278, 160, 158, 277, 276, 273, 151, 271, 159, 266, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 156, 157, 163, 165, 167, 168, 169, 170, 171, 172, 175, 173, 181, 182, 183, 184, 163, 165, 169, 157, 167, 173, 172, 264, 250, 170, 246, 243, 168, 171, 242, 185, 195, 240, 182, 191, 184, 193, 175, 181, 192, 183, 163, 165, 169, 157, 167, 173, 172, 191, 192, 170, 185, 168, 171, 193, 196, 194, 192, 182, 195, 184, 197, 175, 181, 199, 183, 201, 203, 205, 196, 206, 207, 209, 208, 191, 192, 185, 194, 199, 212, 193, 211, 199, 192, 195, 213, 201, 216, 197, 208, 215, 211, 219, 203, 207, 196, 205, 206, 209, 211, 218, 220, 194, 229, 199, 213, 212, 230, 199, 231, 216, 201, 235, 197, 222, 208, 215, 211, 203, 207, 219, 205, 206, 209, 220, 211, 221, 218, 218, 231, 213, 212, 222, 223, 230, 216, 232, 233, 235, 236, 221, 215, 237, 239, 238, 219, 251, 253, 244, 220, 232, 245, 218, 218, 231, 241, 223, 239, 222, 230, 254, 233, 251, 235, 252, 237, 221, 238, 241, 224, 236, 244, 217, 214, 245, 253, 232, 259, 255, 256, 257, 223, 263, 239, 258, 260, 233, 252, 251, 261, 237, 254, 238, 268, 241, 236, 244, 256, 257, 245, 253, 255, 258, 260, 262, 259, 283, 261, 265, 263, 269, 258, 252, 280, 272, 274, 254, 293, 268, 285, 283, 210, 262, 256, 257, 298, 255, 282, 258, 260, 259, 265, 272, 261, 263, 269, 258, 289, 274, 288, 294, 291, 280, 282, 285, 292, 283, 295, 262, 298, 293, 289, 299, 314, 300, 306, 265, 302, 272, 312, 288, 315, 310, 274, 311, 294, 307, 280, 291, 282, 295, 309, 292, 302, 298, 293, 299, 289, 300, 317, 306, 202, 307, 323, 312, 288, 320, 200, 314, 310, 294, 311, 317, 291, 309, 295, 315, 292, 316, 302, 320, 299, 324, 300, 322, 306, 323, 308, 307, 308, 308, 308, 308, 308, 310, 325, 311, 334, 317, 309, 322, 336, 316, 351, 338, 324, 320, 339, 340, 343, 345, 323, 346, 355, 347, 334, 198, 189, 325, 351, 188, 187, 186, 176, 174, 166, 322, 316, 336, 338, 324, 340, 339, 164, 162, 146, 343, 345, 137, 346, 355, 334, 347, 325, 134, 351, 121, 104, 101, 96, 95, 92, 75, 336, 43, 36, 340, 33, 22, 10, 9, 343, 345, 7, 346, 355, 5, 347, 359, 359, 359, 359, 359, 359, 359, 360, 360, 361, 361, 361, 361, 362, 4, 362, 362, 362, 362, 362, 363, 3, 363, 363, 363, 363, 363, 364, 0, 364, 365, 0, 365, 366, 0, 366, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, 358 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "fitsy++/nrrdlex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 11 "fitsy++/nrrdlex.L" #include #include #include #include "util.h" #include "nrrdparser.H" extern YYSTYPE* nrrdlval; extern nrrdFlexLexer* nrrdlexx; /* rules */ #line 799 "fitsy++/nrrdlex.C" #define INITIAL 0 #define DISCARD 1 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 29 "fitsy++/nrrdlex.L" #line 903 "fitsy++/nrrdlex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 359 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 358 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 31 "fitsy++/nrrdlex.L" { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(nrrdlval->str,""); // feed a blank string return STRING; } YY_BREAK case 2: YY_RULE_SETUP #line 38 "fitsy++/nrrdlex.L" { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(NRRDPARSERSIZE-1) ? yyleng:(NRRDPARSERSIZE-1); strncpy(nrrdlval->str,yytext,ll); nrrdlval->str[ll] = '\0'; return STRING; } YY_BREAK case 3: YY_RULE_SETUP #line 46 "fitsy++/nrrdlex.L" {return DEBUG_;} YY_BREAK case 4: YY_RULE_SETUP #line 47 "fitsy++/nrrdlex.L" {return ON_;} YY_BREAK case 5: YY_RULE_SETUP #line 48 "fitsy++/nrrdlex.L" {return OFF_;} YY_BREAK case 6: YY_RULE_SETUP #line 50 "fitsy++/nrrdlex.L" {return NRRD0001_;} YY_BREAK case 7: YY_RULE_SETUP #line 51 "fitsy++/nrrdlex.L" {return NRRD0002_;} YY_BREAK case 8: YY_RULE_SETUP #line 52 "fitsy++/nrrdlex.L" {return NRRD0003_;} YY_BREAK case 9: YY_RULE_SETUP #line 53 "fitsy++/nrrdlex.L" {return NRRD0004_;} YY_BREAK case 10: YY_RULE_SETUP #line 54 "fitsy++/nrrdlex.L" {return NRRD0005_;} YY_BREAK case 11: YY_RULE_SETUP #line 56 "fitsy++/nrrdlex.L" {return DATA_;} YY_BREAK case 12: YY_RULE_SETUP #line 57 "fitsy++/nrrdlex.L" {return FILE_;} YY_BREAK case 13: YY_RULE_SETUP #line 59 "fitsy++/nrrdlex.L" {return SPACE_;} YY_BREAK case 14: YY_RULE_SETUP #line 60 "fitsy++/nrrdlex.L" {return UNITS_;} YY_BREAK case 15: YY_RULE_SETUP #line 61 "fitsy++/nrrdlex.L" {return DIMENSIONS_;} YY_BREAK case 16: YY_RULE_SETUP #line 62 "fitsy++/nrrdlex.L" {return ORIGIN_;} YY_BREAK case 17: YY_RULE_SETUP #line 63 "fitsy++/nrrdlex.L" {return DIRECTIONS_;} YY_BREAK case 18: YY_RULE_SETUP #line 65 "fitsy++/nrrdlex.L" {return DIMENSION_;} YY_BREAK case 19: YY_RULE_SETUP #line 67 "fitsy++/nrrdlex.L" {return TYPE_;} YY_BREAK case 20: YY_RULE_SETUP #line 68 "fitsy++/nrrdlex.L" {return SIGNED_;} YY_BREAK case 21: YY_RULE_SETUP #line 69 "fitsy++/nrrdlex.L" {return UNSIGNED_;} YY_BREAK case 22: YY_RULE_SETUP #line 70 "fitsy++/nrrdlex.L" {return CHAR_;} YY_BREAK case 23: YY_RULE_SETUP #line 71 "fitsy++/nrrdlex.L" {return INT8_;} YY_BREAK case 24: YY_RULE_SETUP #line 72 "fitsy++/nrrdlex.L" {return INT8_T_;} YY_BREAK case 25: YY_RULE_SETUP #line 73 "fitsy++/nrrdlex.L" {return UCHAR_;} YY_BREAK case 26: YY_RULE_SETUP #line 74 "fitsy++/nrrdlex.L" {return UINT8_;} YY_BREAK case 27: YY_RULE_SETUP #line 75 "fitsy++/nrrdlex.L" {return UINT8_T_;} YY_BREAK case 28: YY_RULE_SETUP #line 76 "fitsy++/nrrdlex.L" {return SHORT_;} YY_BREAK case 29: YY_RULE_SETUP #line 77 "fitsy++/nrrdlex.L" {return INT_;} YY_BREAK case 30: YY_RULE_SETUP #line 78 "fitsy++/nrrdlex.L" {return INT16_;} YY_BREAK case 31: YY_RULE_SETUP #line 79 "fitsy++/nrrdlex.L" {return INT16_T_;} YY_BREAK case 32: YY_RULE_SETUP #line 80 "fitsy++/nrrdlex.L" {return USHORT_;} YY_BREAK case 33: YY_RULE_SETUP #line 81 "fitsy++/nrrdlex.L" {return UINT16_;} YY_BREAK case 34: YY_RULE_SETUP #line 82 "fitsy++/nrrdlex.L" {return UINT16_T_;} YY_BREAK case 35: YY_RULE_SETUP #line 83 "fitsy++/nrrdlex.L" {return INT32_;} YY_BREAK case 36: YY_RULE_SETUP #line 84 "fitsy++/nrrdlex.L" {return INT32_T_;} YY_BREAK case 37: YY_RULE_SETUP #line 85 "fitsy++/nrrdlex.L" {return UINT_;} YY_BREAK case 38: YY_RULE_SETUP #line 86 "fitsy++/nrrdlex.L" {return UINT32_;} YY_BREAK case 39: YY_RULE_SETUP #line 87 "fitsy++/nrrdlex.L" {return UINT32_T_;} YY_BREAK case 40: YY_RULE_SETUP #line 88 "fitsy++/nrrdlex.L" {return LONG_;} YY_BREAK case 41: YY_RULE_SETUP #line 89 "fitsy++/nrrdlex.L" {return LONGLONG_;} YY_BREAK case 42: YY_RULE_SETUP #line 90 "fitsy++/nrrdlex.L" {return INT64_;} YY_BREAK case 43: YY_RULE_SETUP #line 91 "fitsy++/nrrdlex.L" {return INT64_T_;} YY_BREAK case 44: YY_RULE_SETUP #line 92 "fitsy++/nrrdlex.L" {return ULONGLONG_;} YY_BREAK case 45: YY_RULE_SETUP #line 93 "fitsy++/nrrdlex.L" {return UINT64_;} YY_BREAK case 46: YY_RULE_SETUP #line 94 "fitsy++/nrrdlex.L" {return UINT64_T_;} YY_BREAK case 47: YY_RULE_SETUP #line 95 "fitsy++/nrrdlex.L" {return FLOAT_;} YY_BREAK case 48: YY_RULE_SETUP #line 96 "fitsy++/nrrdlex.L" {return DOUBLE_;} YY_BREAK case 49: YY_RULE_SETUP #line 98 "fitsy++/nrrdlex.L" {return BLOCK_;} YY_BREAK case 50: YY_RULE_SETUP #line 99 "fitsy++/nrrdlex.L" {return SIZE_;} YY_BREAK case 51: YY_RULE_SETUP #line 100 "fitsy++/nrrdlex.L" {return BLOCKSIZE_;} YY_BREAK case 52: YY_RULE_SETUP #line 102 "fitsy++/nrrdlex.L" {return ENCODING_;} YY_BREAK case 53: YY_RULE_SETUP #line 103 "fitsy++/nrrdlex.L" {return RAW_;} YY_BREAK case 54: YY_RULE_SETUP #line 104 "fitsy++/nrrdlex.L" {return TXT_;} YY_BREAK case 55: YY_RULE_SETUP #line 105 "fitsy++/nrrdlex.L" {return TEXT_;} YY_BREAK case 56: YY_RULE_SETUP #line 106 "fitsy++/nrrdlex.L" {return ASCII_;} YY_BREAK case 57: YY_RULE_SETUP #line 107 "fitsy++/nrrdlex.L" {return HEX_;} YY_BREAK case 58: YY_RULE_SETUP #line 108 "fitsy++/nrrdlex.L" {return GZ_;} YY_BREAK case 59: YY_RULE_SETUP #line 109 "fitsy++/nrrdlex.L" {return GZIP_;} YY_BREAK case 60: YY_RULE_SETUP #line 110 "fitsy++/nrrdlex.L" {return BZ2_;} YY_BREAK case 61: YY_RULE_SETUP #line 111 "fitsy++/nrrdlex.L" {return BZIP2_;} YY_BREAK case 62: YY_RULE_SETUP #line 113 "fitsy++/nrrdlex.L" {return ENDIAN_;} YY_BREAK case 63: YY_RULE_SETUP #line 114 "fitsy++/nrrdlex.L" {return BIG_;} YY_BREAK case 64: YY_RULE_SETUP #line 115 "fitsy++/nrrdlex.L" {return LITTLE_;} YY_BREAK case 65: YY_RULE_SETUP #line 117 "fitsy++/nrrdlex.L" {return CONTENT_;} YY_BREAK case 66: YY_RULE_SETUP #line 119 "fitsy++/nrrdlex.L" {return OLD_;} YY_BREAK case 67: YY_RULE_SETUP #line 120 "fitsy++/nrrdlex.L" {return MIN_;} YY_BREAK case 68: YY_RULE_SETUP #line 121 "fitsy++/nrrdlex.L" {return OLDMIN_;} YY_BREAK case 69: YY_RULE_SETUP #line 122 "fitsy++/nrrdlex.L" {return MAX_;} YY_BREAK case 70: YY_RULE_SETUP #line 123 "fitsy++/nrrdlex.L" {return OLDMAX_;} YY_BREAK case 71: YY_RULE_SETUP #line 125 "fitsy++/nrrdlex.L" {return SKIP_;} YY_BREAK case 72: YY_RULE_SETUP #line 126 "fitsy++/nrrdlex.L" {return LINE_;} YY_BREAK case 73: YY_RULE_SETUP #line 127 "fitsy++/nrrdlex.L" {return LINESKIP_;} YY_BREAK case 74: YY_RULE_SETUP #line 128 "fitsy++/nrrdlex.L" {return BYTE_;} YY_BREAK case 75: YY_RULE_SETUP #line 129 "fitsy++/nrrdlex.L" {return BYTESKIP_;} YY_BREAK case 76: YY_RULE_SETUP #line 131 "fitsy++/nrrdlex.L" {return NUMBER_;} YY_BREAK case 77: YY_RULE_SETUP #line 133 "fitsy++/nrrdlex.L" {return SAMPLE_;} YY_BREAK case 78: YY_RULE_SETUP #line 134 "fitsy++/nrrdlex.L" {return SAMPLEUNITS_;} YY_BREAK case 79: YY_RULE_SETUP #line 136 "fitsy++/nrrdlex.L" {return SIZES_;} YY_BREAK case 80: YY_RULE_SETUP #line 137 "fitsy++/nrrdlex.L" {return SPACINGS_;} YY_BREAK case 81: YY_RULE_SETUP #line 138 "fitsy++/nrrdlex.L" {return THICKNESSES_;} YY_BREAK case 82: YY_RULE_SETUP #line 139 "fitsy++/nrrdlex.L" {return AXIS_;} YY_BREAK case 83: YY_RULE_SETUP #line 140 "fitsy++/nrrdlex.L" {return MINS_;} YY_BREAK case 84: YY_RULE_SETUP #line 141 "fitsy++/nrrdlex.L" {return AXISMINS_;} YY_BREAK case 85: YY_RULE_SETUP #line 142 "fitsy++/nrrdlex.L" {return MAXS_;} YY_BREAK case 86: YY_RULE_SETUP #line 143 "fitsy++/nrrdlex.L" {return AXISMAXS_;} YY_BREAK case 87: YY_RULE_SETUP #line 144 "fitsy++/nrrdlex.L" {return CENTERS_;} YY_BREAK case 88: YY_RULE_SETUP #line 145 "fitsy++/nrrdlex.L" {return CENTERINGS_;} YY_BREAK case 89: YY_RULE_SETUP #line 146 "fitsy++/nrrdlex.L" {return CELL_;} YY_BREAK case 90: YY_RULE_SETUP #line 147 "fitsy++/nrrdlex.L" {return NODE_;} YY_BREAK case 91: YY_RULE_SETUP #line 148 "fitsy++/nrrdlex.L" {return NONE_;} YY_BREAK case 92: YY_RULE_SETUP #line 149 "fitsy++/nrrdlex.L" {return LABELS_;} YY_BREAK case 93: YY_RULE_SETUP #line 150 "fitsy++/nrrdlex.L" {return KINDS_;} YY_BREAK case 94: YY_RULE_SETUP #line 151 "fitsy++/nrrdlex.L" {return DOMAINS_;} YY_BREAK case 95: YY_RULE_SETUP #line 153 "fitsy++/nrrdlex.L" { // Integer nrrdlval->integer = atoi(yytext); return INT; } YY_BREAK case 96: #line 159 "fitsy++/nrrdlex.L" case 97: YY_RULE_SETUP #line 159 "fitsy++/nrrdlex.L" { // Real Number nrrdlval->real = atof(yytext); return REAL; } YY_BREAK case 98: YY_RULE_SETUP #line 165 "fitsy++/nrrdlex.L" { // Quoted String int ll = (yyleng-2)<(NRRDPARSERSIZE-1) ? (yyleng-2):(NRRDPARSERSIZE-1); strncpy(nrrdlval->str,yytext+1,ll); // skip the '{' nrrdlval->str[ll] = '\0'; // Remove the '}' return STRING; } YY_BREAK case 99: YY_RULE_SETUP #line 172 "fitsy++/nrrdlex.L" { // General String int ll = yyleng <(NRRDPARSERSIZE-1) ? yyleng:(NRRDPARSERSIZE-1); strncpy(nrrdlval->str,yytext,ll); nrrdlval->str[ll] = '\0'; return STRING; } YY_BREAK case 100: YY_RULE_SETUP #line 179 "fitsy++/nrrdlex.L" { // White Spaces } YY_BREAK case 101: /* rule 101 can match eol */ YY_RULE_SETUP #line 182 "fitsy++/nrrdlex.L" { // windows line feed return '\n'; } YY_BREAK case 102: YY_RULE_SETUP #line 186 "fitsy++/nrrdlex.L" { // fake line feed return '\n'; } YY_BREAK case 103: /* rule 103 can match eol */ YY_RULE_SETUP #line 190 "fitsy++/nrrdlex.L" { // linefeed return '\n'; } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(DISCARD): #line 194 "fitsy++/nrrdlex.L" { // eof return EOF_; } YY_BREAK case 104: YY_RULE_SETUP #line 198 "fitsy++/nrrdlex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 105: YY_RULE_SETUP #line 202 "fitsy++/nrrdlex.L" ECHO; YY_BREAK #line 1550 "fitsy++/nrrdlex.C" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; nrrdfree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); nrrdfree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ nrrdrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) nrrdrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 359 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 359 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 358); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) nrrdalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) nrrdalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) nrrdfree((void *) b->yy_ch_buf ); nrrdfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)nrrdalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)nrrdrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) nrrdalloc(new_size ); else (yy_start_stack) = (int *) nrrdrealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *nrrdalloc (yy_size_t size ) { return (void *) malloc( size ); } void *nrrdrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void nrrdfree (void * ptr ) { free( (char *) ptr ); /* see nrrdrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 202 "fitsy++/nrrdlex.L" void nrrdDiscard(int doit) { if (nrrdlexx) nrrdlexx->begin(DISCARD, doit); } void nrrdFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/fitsy++/nrrdlex.L000644 000765 000000 00000012005 12705446164 016573 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "util.h" #include "nrrdparser.H" extern YYSTYPE* nrrdlval; extern nrrdFlexLexer* nrrdlexx; %} %x DISCARD D [0-9] E [Ee][+-]?{D}+ /* rules */ %% [\n] { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(nrrdlval->str,""); // feed a blank string return STRING; } [^\n]* { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(NRRDPARSERSIZE-1) ? yyleng:(NRRDPARSERSIZE-1); strncpy(nrrdlval->str,yytext,ll); nrrdlval->str[ll] = '\0'; return STRING; } debug {return DEBUG_;} on {return ON_;} off {return OFF_;} NRRD0001 {return NRRD0001_;} NRRD0002 {return NRRD0002_;} NRRD0003 {return NRRD0003_;} NRRD0004 {return NRRD0004_;} NRRD0005 {return NRRD0005_;} data {return DATA_;} file {return FILE_;} space {return SPACE_;} units {return UNITS_;} dimentions {return DIMENSIONS_;} origin {return ORIGIN_;} directions {return DIRECTIONS_;} dimension {return DIMENSION_;} type {return TYPE_;} signed {return SIGNED_;} unsigned {return UNSIGNED_;} char {return CHAR_;} int8 {return INT8_;} int8_t {return INT8_T_;} uchar {return UCHAR_;} uint8 {return UINT8_;} uint8_t {return UINT8_T_;} short {return SHORT_;} int {return INT_;} int16 {return INT16_;} int16_t {return INT16_T_;} ushort {return USHORT_;} unint16 {return UINT16_;} unint16_t {return UINT16_T_;} int32 {return INT32_;} int32_t {return INT32_T_;} uint {return UINT_;} uint32 {return UINT32_;} uint32_t {return UINT32_T_;} long {return LONG_;} longlong {return LONGLONG_;} int64 {return INT64_;} int64_t {return INT64_T_;} unlonglong {return ULONGLONG_;} unint64 {return UINT64_;} unint64_t {return UINT64_T_;} float {return FLOAT_;} double {return DOUBLE_;} block {return BLOCK_;} size {return SIZE_;} blocksize {return BLOCKSIZE_;} encoding {return ENCODING_;} raw {return RAW_;} txt {return TXT_;} text {return TEXT_;} ascii {return ASCII_;} hex {return HEX_;} gz {return GZ_;} gzip {return GZIP_;} bz2 {return BZ2_;} bzip2 {return BZIP2_;} endian {return ENDIAN_;} big {return BIG_;} little {return LITTLE_;} content {return CONTENT_;} old {return OLD_;} min {return MIN_;} oldmin {return OLDMIN_;} max {return MAX_;} oldmax {return OLDMAX_;} skip {return SKIP_;} line {return LINE_;} lineskip {return LINESKIP_;} byte {return BYTE_;} byteskip {return BYTESKIP_;} number {return NUMBER_;} sample {return SAMPLE_;} sampleunits {return SAMPLEUNITS_;} sizes {return SIZES_;} spacings {return SPACINGS_;} thickness {return THICKNESSES_;} axis {return AXIS_;} mins {return MINS_;} axismins {return AXISMINS_;} maxs {return MAXS_;} axismaxs {return AXISMAXS_;} centers {return CENTERS_;} centerings {return CENTERINGS_;} cell {return CELL_;} node {return NODE_;} none {return NONE_;} labels {return LABELS_;} kinds {return KINDS_;} domains {return DOMAINS_;} [+-]?{D}+ { // Integer nrrdlval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number nrrdlval->real = atof(yytext); return REAL; } \{[^\}\n]*\} { // Quoted String int ll = (yyleng-2)<(NRRDPARSERSIZE-1) ? (yyleng-2):(NRRDPARSERSIZE-1); strncpy(nrrdlval->str,yytext+1,ll); // skip the '{' nrrdlval->str[ll] = '\0'; // Remove the '}' return STRING; } [0-9A-Za-z]+ { // General String int ll = yyleng <(NRRDPARSERSIZE-1) ? yyleng:(NRRDPARSERSIZE-1); strncpy(nrrdlval->str,yytext,ll); nrrdlval->str[ll] = '\0'; return STRING; } [ \t]+ { // White Spaces } \r\n { // windows line feed return '\n'; } \\n { // fake line feed return '\n'; } \n { // linefeed return '\n'; } <> { // eof return EOF_; } . { // Else, return the char return yytext[0]; } %% void nrrdDiscard(int doit) { if (nrrdlexx) nrrdlexx->begin(DISCARD, doit); } void nrrdFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/fitsy++/nrrdparser.C000644 000765 000000 00000203706 12553253014 017267 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse nrrdparse #define yylex nrrdlex #define yyerror nrrderror #define yylval nrrdlval #define yychar nrrdchar #define yydebug nrrddebug #define yynerrs nrrdnerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { EOF_ = 258, INT = 259, REAL = 260, STRING = 261, DEBUG_ = 262, ON_ = 263, OFF_ = 264, NRRD0001_ = 265, NRRD0002_ = 266, NRRD0003_ = 267, NRRD0004_ = 268, NRRD0005_ = 269, DATA_ = 270, FILE_ = 271, SPACE_ = 272, UNITS_ = 273, DIMENSIONS_ = 274, ORIGIN_ = 275, DIRECTIONS_ = 276, DIMENSION_ = 277, TYPE_ = 278, SIGNED_ = 279, UNSIGNED_ = 280, CHAR_ = 281, INT8_ = 282, INT8_T_ = 283, UCHAR_ = 284, UINT8_ = 285, UINT8_T_ = 286, SHORT_ = 287, INT_ = 288, INT16_ = 289, INT16_T_ = 290, USHORT_ = 291, UINT16_ = 292, UINT16_T_ = 293, INT32_ = 294, INT32_T_ = 295, UINT_ = 296, UINT32_ = 297, UINT32_T_ = 298, LONG_ = 299, LONGLONG_ = 300, INT64_ = 301, INT64_T_ = 302, ULONGLONG_ = 303, UINT64_ = 304, UINT64_T_ = 305, FLOAT_ = 306, DOUBLE_ = 307, BLOCK_ = 308, SIZE_ = 309, BLOCKSIZE_ = 310, ENCODING_ = 311, RAW_ = 312, TXT_ = 313, TEXT_ = 314, ASCII_ = 315, HEX_ = 316, GZ_ = 317, GZIP_ = 318, BZ2_ = 319, BZIP2_ = 320, ENDIAN_ = 321, BIG_ = 322, LITTLE_ = 323, CONTENT_ = 324, OLD_ = 325, MIN_ = 326, OLDMIN_ = 327, MAX_ = 328, OLDMAX_ = 329, SKIP_ = 330, LINE_ = 331, LINESKIP_ = 332, BYTE_ = 333, BYTESKIP_ = 334, NUMBER_ = 335, SAMPLE_ = 336, SAMPLEUNITS_ = 337, SIZES_ = 338, SPACINGS_ = 339, THICKNESSES_ = 340, AXIS_ = 341, MINS_ = 342, AXISMINS_ = 343, MAXS_ = 344, AXISMAXS_ = 345, CENTERS_ = 346, CENTERINGS_ = 347, CELL_ = 348, NODE_ = 349, NONE_ = 350, LABELS_ = 351, KINDS_ = 352, DOMAINS_ = 353 }; #endif /* Tokens. */ #define EOF_ 258 #define INT 259 #define REAL 260 #define STRING 261 #define DEBUG_ 262 #define ON_ 263 #define OFF_ 264 #define NRRD0001_ 265 #define NRRD0002_ 266 #define NRRD0003_ 267 #define NRRD0004_ 268 #define NRRD0005_ 269 #define DATA_ 270 #define FILE_ 271 #define SPACE_ 272 #define UNITS_ 273 #define DIMENSIONS_ 274 #define ORIGIN_ 275 #define DIRECTIONS_ 276 #define DIMENSION_ 277 #define TYPE_ 278 #define SIGNED_ 279 #define UNSIGNED_ 280 #define CHAR_ 281 #define INT8_ 282 #define INT8_T_ 283 #define UCHAR_ 284 #define UINT8_ 285 #define UINT8_T_ 286 #define SHORT_ 287 #define INT_ 288 #define INT16_ 289 #define INT16_T_ 290 #define USHORT_ 291 #define UINT16_ 292 #define UINT16_T_ 293 #define INT32_ 294 #define INT32_T_ 295 #define UINT_ 296 #define UINT32_ 297 #define UINT32_T_ 298 #define LONG_ 299 #define LONGLONG_ 300 #define INT64_ 301 #define INT64_T_ 302 #define ULONGLONG_ 303 #define UINT64_ 304 #define UINT64_T_ 305 #define FLOAT_ 306 #define DOUBLE_ 307 #define BLOCK_ 308 #define SIZE_ 309 #define BLOCKSIZE_ 310 #define ENCODING_ 311 #define RAW_ 312 #define TXT_ 313 #define TEXT_ 314 #define ASCII_ 315 #define HEX_ 316 #define GZ_ 317 #define GZIP_ 318 #define BZ2_ 319 #define BZIP2_ 320 #define ENDIAN_ 321 #define BIG_ 322 #define LITTLE_ 323 #define CONTENT_ 324 #define OLD_ 325 #define MIN_ 326 #define OLDMIN_ 327 #define MAX_ 328 #define OLDMAX_ 329 #define SKIP_ 330 #define LINE_ 331 #define LINESKIP_ 332 #define BYTE_ 333 #define BYTESKIP_ 334 #define NUMBER_ 335 #define SAMPLE_ 336 #define SAMPLEUNITS_ 337 #define SIZES_ 338 #define SPACINGS_ 339 #define THICKNESSES_ 340 #define AXIS_ 341 #define MINS_ 342 #define AXISMINS_ 343 #define MAXS_ 344 #define AXISMAXS_ 345 #define CENTERS_ 346 #define CENTERINGS_ 347 #define CELL_ 348 #define NODE_ 349 #define NONE_ 350 #define LABELS_ 351 #define KINDS_ 352 #define DOMAINS_ 353 /* Copy the first part of user declarations. */ #line 10 "fitsy++/nrrdparser.Y" #define YYDEBUG 1 #define DISCARD_(x) {yyclearin; nrrdDiscard(x);} #include "file.h" #undef yyFlexLexer #define yyFlexLexer nrrdFlexLexer #include extern int nrrdlex(void*, nrrdFlexLexer*); extern void nrrderror(FitsFile*, nrrdFlexLexer*, const char*); extern void nrrdDiscard(int); int dim; /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 29 "fitsy++/nrrdparser.Y" { #define NRRDPARSERSIZE 256 float real; int integer; char str[NRRDPARSERSIZE]; } /* Line 193 of yacc.c. */ #line 326 "fitsy++/nrrdparser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 339 "fitsy++/nrrdparser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 245 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 102 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 44 /* YYNRULES -- Number of rules. */ #define YYNRULES 152 /* YYNRULES -- Number of states. */ #define YYNSTATES 240 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 353 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 101, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 100, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 99, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 4, 7, 11, 14, 15, 18, 20, 22, 27, 30, 34, 38, 40, 44, 48, 49, 54, 58, 62, 64, 66, 68, 70, 74, 78, 82, 86, 91, 95, 100, 104, 108, 112, 116, 120, 124, 126, 128, 130, 132, 134, 135, 139, 141, 143, 145, 147, 149, 151, 152, 156, 160, 161, 166, 167, 172, 173, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 205, 207, 209, 211, 214, 216, 218, 220, 223, 226, 230, 232, 234, 236, 239, 243, 245, 247, 249, 252, 254, 256, 258, 261, 263, 265, 267, 270, 274, 278, 283, 285, 287, 289, 293, 298, 300, 302, 307, 311, 313, 315, 317, 319, 321, 323, 325, 327, 329, 331, 333, 338, 342, 347, 351, 356, 360, 365, 369, 372, 374, 376, 379, 381, 384, 386, 389, 391, 394, 396, 399, 401, 403, 405, 407, 410, 412, 415, 417, 420 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { 103, 0, -1, -1, 104, 105, -1, 105, 106, 111, -1, 106, 111, -1, -1, 7, 113, -1, 108, -1, 109, -1, 15, 16, 99, 6, -1, 17, 114, -1, 22, 99, 4, -1, 23, 99, 119, -1, 128, -1, 56, 99, 129, -1, 66, 99, 130, -1, -1, 69, 99, 107, 6, -1, 71, 99, 112, -1, 73, 99, 112, -1, 131, -1, 132, -1, 133, -1, 134, -1, 80, 99, 6, -1, 83, 99, 135, -1, 84, 99, 137, -1, 85, 99, 138, -1, 86, 87, 99, 139, -1, 88, 99, 139, -1, 86, 89, 99, 140, -1, 90, 99, 140, -1, 91, 99, 141, -1, 92, 99, 141, -1, 96, 99, 143, -1, 18, 99, 144, -1, 97, 99, 145, -1, 10, -1, 11, -1, 12, -1, 13, -1, 14, -1, -1, 100, 110, 6, -1, 101, -1, 3, -1, 5, -1, 4, -1, 8, -1, 9, -1, -1, 99, 115, 6, -1, 22, 99, 4, -1, -1, 18, 99, 116, 6, -1, -1, 20, 99, 117, 6, -1, -1, 21, 99, 118, 6, -1, 120, -1, 121, -1, 122, -1, 123, -1, 124, -1, 125, -1, 126, -1, 127, -1, 51, -1, 52, -1, 53, -1, 26, -1, 24, 26, -1, 27, -1, 28, -1, 29, -1, 25, 26, -1, 30, -1, 31, -1, 32, -1, 32, 33, -1, 24, 32, -1, 24, 32, 33, -1, 34, -1, 35, -1, 36, -1, 25, 32, -1, 25, 32, 33, -1, 37, -1, 38, -1, 33, -1, 24, 33, -1, 39, -1, 40, -1, 41, -1, 25, 33, -1, 42, -1, 43, -1, 45, -1, 44, 44, -1, 44, 44, 33, -1, 24, 44, 44, -1, 24, 44, 44, 33, -1, 46, -1, 47, -1, 48, -1, 25, 44, 44, -1, 25, 44, 44, 33, -1, 49, -1, 50, -1, 53, 54, 99, 4, -1, 55, 99, 4, -1, 57, -1, 58, -1, 59, -1, 60, -1, 61, -1, 62, -1, 63, -1, 64, -1, 65, -1, 67, -1, 68, -1, 70, 71, 99, 112, -1, 72, 99, 112, -1, 70, 73, 99, 112, -1, 74, 99, 112, -1, 76, 75, 99, 4, -1, 77, 99, 4, -1, 78, 75, 99, 4, -1, 79, 99, 4, -1, 135, 136, -1, 136, -1, 4, -1, 137, 112, -1, 112, -1, 138, 112, -1, 112, -1, 139, 112, -1, 112, -1, 140, 112, -1, 112, -1, 141, 142, -1, 142, -1, 93, -1, 94, -1, 95, -1, 143, 6, -1, 6, -1, 144, 6, -1, 6, -1, 145, 6, -1, 6, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 168, 168, 168, 171, 172, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 208, 209, 210, 211, 212, 215, 215, 218, 219, 222, 223, 226, 227, 230, 230, 231, 232, 232, 233, 233, 234, 234, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 250, 251, 252, 253, 256, 257, 258, 259, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 274, 277, 278, 279, 280, 283, 284, 285, 286, 289, 290, 291, 292, 293, 294, 295, 298, 299, 300, 301, 302, 305, 306, 309, 310, 311, 312, 313, 314, 315, 316, 317, 320, 321, 324, 325, 328, 329, 332, 333, 336, 337, 340, 341, 344, 361, 362, 365, 366, 369, 370, 373, 374, 377, 378, 381, 382, 383, 386, 387, 390, 391, 394, 395 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "EOF_", "INT", "REAL", "STRING", "DEBUG_", "ON_", "OFF_", "NRRD0001_", "NRRD0002_", "NRRD0003_", "NRRD0004_", "NRRD0005_", "DATA_", "FILE_", "SPACE_", "UNITS_", "DIMENSIONS_", "ORIGIN_", "DIRECTIONS_", "DIMENSION_", "TYPE_", "SIGNED_", "UNSIGNED_", "CHAR_", "INT8_", "INT8_T_", "UCHAR_", "UINT8_", "UINT8_T_", "SHORT_", "INT_", "INT16_", "INT16_T_", "USHORT_", "UINT16_", "UINT16_T_", "INT32_", "INT32_T_", "UINT_", "UINT32_", "UINT32_T_", "LONG_", "LONGLONG_", "INT64_", "INT64_T_", "ULONGLONG_", "UINT64_", "UINT64_T_", "FLOAT_", "DOUBLE_", "BLOCK_", "SIZE_", "BLOCKSIZE_", "ENCODING_", "RAW_", "TXT_", "TEXT_", "ASCII_", "HEX_", "GZ_", "GZIP_", "BZ2_", "BZIP2_", "ENDIAN_", "BIG_", "LITTLE_", "CONTENT_", "OLD_", "MIN_", "OLDMIN_", "MAX_", "OLDMAX_", "SKIP_", "LINE_", "LINESKIP_", "BYTE_", "BYTESKIP_", "NUMBER_", "SAMPLE_", "SAMPLEUNITS_", "SIZES_", "SPACINGS_", "THICKNESSES_", "AXIS_", "MINS_", "AXISMINS_", "MAXS_", "AXISMAXS_", "CENTERS_", "CENTERINGS_", "CELL_", "NODE_", "NONE_", "LABELS_", "KINDS_", "DOMAINS_", "':'", "'#'", "'\\n'", "$accept", "start", "@1", "commands", "command", "@2", "magic", "comment", "@3", "terminator", "numeric", "debug", "space", "@4", "@5", "@6", "@7", "type", "char", "uchar", "short", "ushort", "int", "uint", "long", "ulong", "block", "encoding", "endian", "oldmin", "oldmax", "lineskip", "byteskip", "sizes", "size", "spacings", "thicknesses", "axismins", "axismaxs", "centers", "center", "labels", "units", "kinds", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 58, 35, 10 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 102, 104, 103, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 108, 108, 108, 108, 108, 110, 109, 111, 111, 112, 112, 113, 113, 115, 114, 114, 116, 114, 117, 114, 118, 114, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 124, 124, 124, 124, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 131, 131, 132, 132, 133, 133, 134, 134, 135, 135, 136, 137, 137, 138, 138, 139, 139, 140, 140, 141, 141, 142, 142, 142, 143, 143, 144, 144, 145, 145 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 3, 2, 0, 2, 1, 1, 4, 2, 3, 3, 1, 3, 3, 0, 4, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 4, 3, 4, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 0, 3, 1, 1, 1, 1, 1, 1, 0, 3, 3, 0, 4, 0, 4, 0, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 3, 1, 1, 1, 2, 3, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 3, 3, 4, 1, 1, 1, 3, 4, 1, 1, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 3, 4, 3, 4, 3, 4, 3, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 2, 0, 6, 1, 0, 38, 39, 40, 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 6, 0, 8, 9, 14, 21, 22, 23, 24, 49, 50, 7, 0, 0, 0, 0, 0, 51, 11, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 45, 5, 0, 54, 56, 58, 0, 0, 150, 36, 12, 0, 0, 71, 73, 74, 75, 77, 78, 79, 90, 83, 84, 85, 88, 89, 92, 93, 94, 96, 97, 0, 98, 103, 104, 105, 108, 109, 68, 69, 70, 13, 60, 61, 62, 63, 64, 65, 66, 67, 0, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 15, 121, 122, 16, 0, 0, 0, 48, 47, 19, 124, 20, 126, 0, 128, 0, 130, 25, 133, 26, 132, 135, 27, 137, 28, 0, 0, 139, 30, 141, 32, 144, 145, 146, 33, 143, 34, 148, 35, 152, 37, 44, 4, 10, 0, 0, 0, 53, 52, 149, 72, 81, 91, 0, 76, 86, 95, 0, 80, 99, 110, 18, 123, 125, 127, 129, 131, 134, 136, 29, 31, 138, 140, 142, 147, 151, 55, 57, 59, 82, 101, 87, 106, 100, 102, 107 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 1, 2, 41, 42, 158, 43, 44, 90, 94, 181, 52, 59, 100, 198, 199, 200, 134, 135, 136, 137, 138, 139, 140, 141, 142, 45, 154, 157, 46, 47, 48, 49, 173, 174, 176, 178, 182, 184, 188, 189, 192, 102, 194 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -138 static const yytype_int16 yypact[] = { -138, 4, 145, -138, 79, -138, -138, -138, -138, -138, 52, -13, -36, -28, -16, 31, -4, -3, -2, -1, -25, 0, 2, 6, 8, 34, 12, 53, 16, 30, 35, 37, 41, -37, 42, 43, 46, 49, 50, 51, -138, 47, 3, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 62, 65, 66, 67, 70, -138, -138, 116, 142, -8, 71, 147, 17, 24, -138, 72, 73, 89, 89, 89, 89, 74, 170, 76, 172, 171, 174, 89, 89, 80, 81, 89, 89, -81, -81, 175, 176, 177, 3, -138, -138, -138, 178, -138, -138, -138, 181, 180, -138, 182, -138, 23, 40, -138, -138, -138, -138, -138, -138, 154, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 146, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 185, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 186, 89, 89, -138, -138, -138, -138, -138, -138, 187, -138, 189, -138, -138, -138, 174, -138, -138, 89, -138, 89, 89, 89, -138, 89, -138, 89, -138, -138, -138, -81, -138, -81, -138, 188, -138, 190, -138, -138, -138, 191, 193, 196, -138, -138, -138, -138, 162, -138, 159, -138, 173, -138, 160, -138, 179, -138, -138, -138, -138, -138, -138, -138, -138, -138, 89, 89, -138, -138, -138, -138, -138, -138, -138, -138, -138, 194, -138, 199, -138, -138, -138 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -138, -138, -138, -138, 164, -138, -138, -138, -138, 117, -70, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, 36, -138, -138, 28, 33, 123, -137, -138, -138, -138 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -4 static const yytype_int16 yytable[] = { 163, 164, 165, 166, 3, 54, 92, 55, 56, 57, 175, 177, 185, 186, 187, 183, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 68, -3, 69, 204, 82, 227, 83, 227, 4, 205, 206, 5, 6, 7, 8, 9, 10, 60, 11, 12, 208, 207, 53, 13, 14, 61, 209, 210, 145, 146, 147, 148, 149, 150, 151, 152, 153, 62, 211, 63, 58, 50, 51, 216, 217, 155, 156, 161, 162, 64, 65, 66, 67, 70, 15, 71, 16, 17, 93, 72, 221, 73, 222, 74, 183, 75, 225, 18, 226, 77, 19, 20, 21, 22, 23, 24, 101, 25, 26, 27, 28, 29, 76, 78, 30, 31, 32, 33, 79, 34, 80, 35, 36, 37, 81, 84, 85, 38, 39, 86, 103, 40, 87, 88, 89, 144, 4, 225, 226, 5, 6, 7, 8, 9, 10, 95, 11, 12, 96, 97, 98, 13, 14, 99, 143, 159, 160, 167, 168, 169, 170, 171, 172, 179, 180, 191, 193, 195, 197, 201, 202, 212, 203, 214, 213, 218, 215, 219, 228, 233, 229, 230, 15, 231, 16, 17, 232, 234, 236, 91, 235, 223, 196, 220, 190, 18, 237, 224, 19, 20, 21, 22, 23, 24, 0, 25, 26, 27, 28, 29, 0, 238, 30, 31, 32, 33, 239, 34, 0, 35, 36, 37, 0, 0, 0, 38, 39, 0, 0, 40 }; static const yytype_int16 yycheck[] = { 70, 71, 72, 73, 0, 18, 3, 20, 21, 22, 80, 81, 93, 94, 95, 85, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 71, 0, 73, 26, 87, 188, 89, 190, 7, 32, 33, 10, 11, 12, 13, 14, 15, 99, 17, 18, 26, 44, 16, 22, 23, 99, 32, 33, 57, 58, 59, 60, 61, 62, 63, 64, 65, 99, 44, 54, 99, 8, 9, 159, 160, 67, 68, 4, 5, 99, 99, 99, 99, 99, 53, 99, 55, 56, 101, 99, 176, 99, 178, 75, 180, 99, 182, 66, 184, 99, 69, 70, 71, 72, 73, 74, 6, 76, 77, 78, 79, 80, 75, 99, 83, 84, 85, 86, 99, 88, 99, 90, 91, 92, 99, 99, 99, 96, 97, 99, 4, 100, 99, 99, 99, 4, 7, 223, 224, 10, 11, 12, 13, 14, 15, 99, 17, 18, 99, 99, 99, 22, 23, 99, 99, 99, 99, 99, 4, 99, 4, 6, 4, 99, 99, 6, 6, 6, 6, 4, 6, 33, 6, 4, 44, 4, 6, 4, 6, 33, 6, 6, 53, 6, 55, 56, 6, 44, 44, 41, 33, 179, 91, 173, 87, 66, 33, 180, 69, 70, 71, 72, 73, 74, -1, 76, 77, 78, 79, 80, -1, 33, 83, 84, 85, 86, 33, 88, -1, 90, 91, 92, -1, -1, -1, 96, 97, -1, -1, 100 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 103, 104, 0, 7, 10, 11, 12, 13, 14, 15, 17, 18, 22, 23, 53, 55, 56, 66, 69, 70, 71, 72, 73, 74, 76, 77, 78, 79, 80, 83, 84, 85, 86, 88, 90, 91, 92, 96, 97, 100, 105, 106, 108, 109, 128, 131, 132, 133, 134, 8, 9, 113, 16, 18, 20, 21, 22, 99, 114, 99, 99, 99, 54, 99, 99, 99, 99, 71, 73, 99, 99, 99, 99, 75, 99, 75, 99, 99, 99, 99, 99, 87, 89, 99, 99, 99, 99, 99, 99, 110, 106, 3, 101, 111, 99, 99, 99, 99, 99, 115, 6, 144, 4, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 119, 120, 121, 122, 123, 124, 125, 126, 127, 99, 4, 57, 58, 59, 60, 61, 62, 63, 64, 65, 129, 67, 68, 130, 107, 99, 99, 4, 5, 112, 112, 112, 112, 99, 4, 99, 4, 6, 4, 135, 136, 112, 137, 112, 138, 99, 99, 112, 139, 112, 140, 93, 94, 95, 141, 142, 141, 6, 143, 6, 145, 6, 111, 6, 116, 117, 118, 4, 6, 6, 26, 32, 33, 44, 26, 32, 33, 44, 33, 44, 4, 6, 112, 112, 4, 4, 136, 112, 112, 139, 140, 112, 112, 142, 6, 6, 6, 6, 6, 33, 44, 33, 44, 33, 33, 33 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (nrrd, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, nrrd, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, FitsFile* nrrd, nrrdFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, nrrd, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; FitsFile* nrrd; nrrdFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (nrrd); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, FitsFile* nrrd, nrrdFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, nrrd, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; FitsFile* nrrd; nrrdFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, nrrd, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, FitsFile* nrrd, nrrdFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, nrrd, ll) YYSTYPE *yyvsp; int yyrule; FitsFile* nrrd; nrrdFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , nrrd, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, nrrd, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, FitsFile* nrrd, nrrdFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, nrrd, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; FitsFile* nrrd; nrrdFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (nrrd); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (FitsFile* nrrd, nrrdFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (FitsFile* nrrd, nrrdFlexLexer* ll) #else int yyparse (nrrd, ll) FitsFile* nrrd; nrrdFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: #line 168 "fitsy++/nrrdparser.Y" {dim=0; nrrd->setpArch(FitsFile::BIG);;} break; case 17: #line 186 "fitsy++/nrrdparser.Y" {DISCARD_(1);} break; case 43: #line 215 "fitsy++/nrrdparser.Y" {DISCARD_(1);} break; case 46: #line 219 "fitsy++/nrrdparser.Y" {YYACCEPT;;} break; case 47: #line 222 "fitsy++/nrrdparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 48: #line 223 "fitsy++/nrrdparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 49: #line 226 "fitsy++/nrrdparser.Y" {yydebug=1;;} break; case 50: #line 227 "fitsy++/nrrdparser.Y" {yydebug=0;;} break; case 51: #line 230 "fitsy++/nrrdparser.Y" {DISCARD_(1);} break; case 54: #line 232 "fitsy++/nrrdparser.Y" {DISCARD_(1);} break; case 56: #line 233 "fitsy++/nrrdparser.Y" {DISCARD_(1);} break; case 58: #line 234 "fitsy++/nrrdparser.Y" {DISCARD_(1);} break; case 60: #line 237 "fitsy++/nrrdparser.Y" {nrrd->setpBitpix(8);;} break; case 61: #line 238 "fitsy++/nrrdparser.Y" {nrrd->setpBitpix(8);;} break; case 62: #line 239 "fitsy++/nrrdparser.Y" {nrrd->setpBitpix(16);;} break; case 63: #line 240 "fitsy++/nrrdparser.Y" {nrrd->setpBitpix(16);;} break; case 64: #line 241 "fitsy++/nrrdparser.Y" {nrrd->setpBitpix(32);;} break; case 65: #line 242 "fitsy++/nrrdparser.Y" {nrrd->setpBitpix(32);;} break; case 66: #line 243 "fitsy++/nrrdparser.Y" {nrrd->setpBitpix(64);;} break; case 67: #line 244 "fitsy++/nrrdparser.Y" {nrrd->setpBitpix(64);;} break; case 68: #line 245 "fitsy++/nrrdparser.Y" {nrrd->setpBitpix(-32);;} break; case 69: #line 246 "fitsy++/nrrdparser.Y" {nrrd->setpBitpix(-64);;} break; case 112: #line 309 "fitsy++/nrrdparser.Y" {nrrd->setpEncoding(FitsFile::RAW);;} break; case 113: #line 310 "fitsy++/nrrdparser.Y" {nrrd->setpEncoding(FitsFile::ASCII);;} break; case 114: #line 311 "fitsy++/nrrdparser.Y" {nrrd->setpEncoding(FitsFile::ASCII);;} break; case 115: #line 312 "fitsy++/nrrdparser.Y" {nrrd->setpEncoding(FitsFile::ASCII);;} break; case 116: #line 313 "fitsy++/nrrdparser.Y" {nrrd->setpEncoding(FitsFile::HEX);;} break; case 117: #line 314 "fitsy++/nrrdparser.Y" {nrrd->setpEncoding(FitsFile::GZIP);;} break; case 118: #line 315 "fitsy++/nrrdparser.Y" {nrrd->setpEncoding(FitsFile::GZIP);;} break; case 119: #line 316 "fitsy++/nrrdparser.Y" {nrrd->setpEncoding(FitsFile::BZ2);;} break; case 120: #line 317 "fitsy++/nrrdparser.Y" {nrrd->setpEncoding(FitsFile::BZ2);;} break; case 121: #line 320 "fitsy++/nrrdparser.Y" {nrrd->setpArch(FitsFile::BIG);;} break; case 122: #line 321 "fitsy++/nrrdparser.Y" {nrrd->setpArch(FitsFile::LITTLE);;} break; case 133: #line 345 "fitsy++/nrrdparser.Y" { switch (dim) { case 0: nrrd->setpWidth((yyvsp[(1) - (1)].integer)); break; case 1: nrrd->setpHeight((yyvsp[(1) - (1)].integer)); break; case 2: nrrd->setpDepth((yyvsp[(1) - (1)].integer)); break; } dim++; ;} break; /* Line 1267 of yacc.c. */ #line 1981 "fitsy++/nrrdparser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (nrrd, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (nrrd, ll, yymsg); } else { yyerror (nrrd, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, nrrd, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, nrrd, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (nrrd, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, nrrd, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, nrrd, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 398 "fitsy++/nrrdparser.Y" saods9/tksao/fitsy++/nrrdparser.H000644 000765 000000 00000013567 12553253014 017300 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { EOF_ = 258, INT = 259, REAL = 260, STRING = 261, DEBUG_ = 262, ON_ = 263, OFF_ = 264, NRRD0001_ = 265, NRRD0002_ = 266, NRRD0003_ = 267, NRRD0004_ = 268, NRRD0005_ = 269, DATA_ = 270, FILE_ = 271, SPACE_ = 272, UNITS_ = 273, DIMENSIONS_ = 274, ORIGIN_ = 275, DIRECTIONS_ = 276, DIMENSION_ = 277, TYPE_ = 278, SIGNED_ = 279, UNSIGNED_ = 280, CHAR_ = 281, INT8_ = 282, INT8_T_ = 283, UCHAR_ = 284, UINT8_ = 285, UINT8_T_ = 286, SHORT_ = 287, INT_ = 288, INT16_ = 289, INT16_T_ = 290, USHORT_ = 291, UINT16_ = 292, UINT16_T_ = 293, INT32_ = 294, INT32_T_ = 295, UINT_ = 296, UINT32_ = 297, UINT32_T_ = 298, LONG_ = 299, LONGLONG_ = 300, INT64_ = 301, INT64_T_ = 302, ULONGLONG_ = 303, UINT64_ = 304, UINT64_T_ = 305, FLOAT_ = 306, DOUBLE_ = 307, BLOCK_ = 308, SIZE_ = 309, BLOCKSIZE_ = 310, ENCODING_ = 311, RAW_ = 312, TXT_ = 313, TEXT_ = 314, ASCII_ = 315, HEX_ = 316, GZ_ = 317, GZIP_ = 318, BZ2_ = 319, BZIP2_ = 320, ENDIAN_ = 321, BIG_ = 322, LITTLE_ = 323, CONTENT_ = 324, OLD_ = 325, MIN_ = 326, OLDMIN_ = 327, MAX_ = 328, OLDMAX_ = 329, SKIP_ = 330, LINE_ = 331, LINESKIP_ = 332, BYTE_ = 333, BYTESKIP_ = 334, NUMBER_ = 335, SAMPLE_ = 336, SAMPLEUNITS_ = 337, SIZES_ = 338, SPACINGS_ = 339, THICKNESSES_ = 340, AXIS_ = 341, MINS_ = 342, AXISMINS_ = 343, MAXS_ = 344, AXISMAXS_ = 345, CENTERS_ = 346, CENTERINGS_ = 347, CELL_ = 348, NODE_ = 349, NONE_ = 350, LABELS_ = 351, KINDS_ = 352, DOMAINS_ = 353 }; #endif /* Tokens. */ #define EOF_ 258 #define INT 259 #define REAL 260 #define STRING 261 #define DEBUG_ 262 #define ON_ 263 #define OFF_ 264 #define NRRD0001_ 265 #define NRRD0002_ 266 #define NRRD0003_ 267 #define NRRD0004_ 268 #define NRRD0005_ 269 #define DATA_ 270 #define FILE_ 271 #define SPACE_ 272 #define UNITS_ 273 #define DIMENSIONS_ 274 #define ORIGIN_ 275 #define DIRECTIONS_ 276 #define DIMENSION_ 277 #define TYPE_ 278 #define SIGNED_ 279 #define UNSIGNED_ 280 #define CHAR_ 281 #define INT8_ 282 #define INT8_T_ 283 #define UCHAR_ 284 #define UINT8_ 285 #define UINT8_T_ 286 #define SHORT_ 287 #define INT_ 288 #define INT16_ 289 #define INT16_T_ 290 #define USHORT_ 291 #define UINT16_ 292 #define UINT16_T_ 293 #define INT32_ 294 #define INT32_T_ 295 #define UINT_ 296 #define UINT32_ 297 #define UINT32_T_ 298 #define LONG_ 299 #define LONGLONG_ 300 #define INT64_ 301 #define INT64_T_ 302 #define ULONGLONG_ 303 #define UINT64_ 304 #define UINT64_T_ 305 #define FLOAT_ 306 #define DOUBLE_ 307 #define BLOCK_ 308 #define SIZE_ 309 #define BLOCKSIZE_ 310 #define ENCODING_ 311 #define RAW_ 312 #define TXT_ 313 #define TEXT_ 314 #define ASCII_ 315 #define HEX_ 316 #define GZ_ 317 #define GZIP_ 318 #define BZ2_ 319 #define BZIP2_ 320 #define ENDIAN_ 321 #define BIG_ 322 #define LITTLE_ 323 #define CONTENT_ 324 #define OLD_ 325 #define MIN_ 326 #define OLDMIN_ 327 #define MAX_ 328 #define OLDMAX_ 329 #define SKIP_ 330 #define LINE_ 331 #define LINESKIP_ 332 #define BYTE_ 333 #define BYTESKIP_ 334 #define NUMBER_ 335 #define SAMPLE_ 336 #define SAMPLEUNITS_ 337 #define SIZES_ 338 #define SPACINGS_ 339 #define THICKNESSES_ 340 #define AXIS_ 341 #define MINS_ 342 #define AXISMINS_ 343 #define MAXS_ 344 #define AXISMAXS_ 345 #define CENTERS_ 346 #define CENTERINGS_ 347 #define CELL_ 348 #define NODE_ 349 #define NONE_ 350 #define LABELS_ 351 #define KINDS_ 352 #define DOMAINS_ 353 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 29 "fitsy++/nrrdparser.Y" { #define NRRDPARSERSIZE 256 float real; int integer; char str[NRRDPARSERSIZE]; } /* Line 1529 of yacc.c. */ #line 252 "fitsy++/nrrdparser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/fitsy++/nrrdparser.Y000644 000765 000000 00000015401 12705446164 017317 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {FitsFile* nrrd} %lex-param {nrrdFlexLexer* ll} %parse-param {nrrdFlexLexer* ll} %{ #define YYDEBUG 1 #define DISCARD_(x) {yyclearin; nrrdDiscard(x);} #include "file.h" #undef yyFlexLexer #define yyFlexLexer nrrdFlexLexer #include extern int nrrdlex(void*, nrrdFlexLexer*); extern void nrrderror(FitsFile*, nrrdFlexLexer*, const char*); extern void nrrdDiscard(int); int dim; %} %union { #define NRRDPARSERSIZE 256 float real; int integer; char str[NRRDPARSERSIZE]; } %type numeric // Basic %token EOF_ %token INT %token REAL %token STRING %token DEBUG_ %token ON_ %token OFF_ // Magic %token NRRD0001_ %token NRRD0002_ %token NRRD0003_ %token NRRD0004_ %token NRRD0005_ // 3. Headers %token DATA_ %token FILE_ // 4. Space %token SPACE_ %token UNITS_ %token DIMENSIONS_ %token ORIGIN_ %token DIRECTIONS_ // 5.1 Dimension %token DIMENSION_ // 5.2 Type %token TYPE_ %token SIGNED_ %token UNSIGNED_ %token CHAR_ %token INT8_ %token INT8_T_ %token UCHAR_ %token UINT8_ %token UINT8_T_ %token SHORT_ %token INT_ %token INT16_ %token INT16_T_ %token USHORT_ %token UINT16_ %token UINT16_T_ %token INT32_ %token INT32_T_ %token UINT_ %token UINT32_ %token UINT32_T_ %token LONG_ %token LONGLONG_ %token INT64_ %token INT64_T_ %token ULONGLONG_ %token UINT64_ %token UINT64_T_ %token FLOAT_ %token DOUBLE_ // 5.3 Block %token BLOCK_ %token SIZE_ %token BLOCKSIZE_ // 5.4 ENCODING %token ENCODING_ %token RAW_ %token TXT_ %token TEXT_ %token ASCII_ %token HEX_ %token GZ_ %token GZIP_ %token BZ2_ %token BZIP2_ // 5.5 Endian %token ENDIAN_ %token BIG_ %token LITTLE_ // 5.6 Content %token CONTENT_ // 5.7 MinMax %token OLD_ %token MIN_ %token OLDMIN_ %token MAX_ %token OLDMAX_ // 5.8 Skip %token SKIP_ %token LINE_ %token LINESKIP_ %token BYTE_ %token BYTESKIP_ // 5.9 Number %token NUMBER_ // 5.10 Sample %token SAMPLE_ %token SAMPLEUNITS_ // 6 Per Axis %token SIZES_ %token SPACINGS_ %token THICKNESSES_ %token AXIS_ %token MINS_ %token AXISMINS_ %token MAXS_ %token AXISMAXS_ %token CENTERS_ %token CENTERINGS_ %token CELL_ %token NODE_ %token NONE_ %token LABELS_ %token KINDS_ %token DOMAINS_ %% start : {dim=0; nrrd->setpArch(FitsFile::BIG);} commands ; commands: commands command terminator | command terminator ; command : /* empty */ | DEBUG_ debug | magic | comment | DATA_ FILE_ ':' STRING | SPACE_ space | DIMENSION_ ':' INT | TYPE_ ':' type | block | ENCODING_ ':' encoding | ENDIAN_ ':' endian | CONTENT_ ':' {DISCARD_(1)} STRING | MIN_ ':' numeric | MAX_ ':' numeric | oldmin | oldmax | lineskip | byteskip | NUMBER_ ':' STRING | SIZES_ ':' sizes | SPACINGS_ ':' spacings | THICKNESSES_ ':' thicknesses | AXIS_ MINS_ ':' axismins | AXISMINS_ ':' axismins | AXIS_ MAXS_ ':' axismaxs | AXISMAXS_ ':' axismaxs | CENTERS_ ':' centers | CENTERINGS_ ':' centers | LABELS_ ':' labels | UNITS_ ':' units | KINDS_ ':' kinds ; magic : NRRD0001_ | NRRD0002_ | NRRD0003_ | NRRD0004_ | NRRD0005_ ; comment : '#' {DISCARD_(1)} STRING ; terminator: '\n' | EOF_ {YYACCEPT;} ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; space : ':' {DISCARD_(1)} STRING | DIMENSION_ ':' INT | UNITS_ ':' {DISCARD_(1)} STRING | ORIGIN_ ':' {DISCARD_(1)} STRING | DIRECTIONS_ ':' {DISCARD_(1)} STRING ; type : char {nrrd->setpBitpix(8);} | uchar {nrrd->setpBitpix(8);} | short {nrrd->setpBitpix(16);} | ushort {nrrd->setpBitpix(16);} | int {nrrd->setpBitpix(32);} | uint {nrrd->setpBitpix(32);} | long {nrrd->setpBitpix(64);} | ulong {nrrd->setpBitpix(64);} | FLOAT_ {nrrd->setpBitpix(-32);} | DOUBLE_ {nrrd->setpBitpix(-64);} | BLOCK_ ; char : CHAR_ | SIGNED_ CHAR_ | INT8_ | INT8_T_ ; uchar : UCHAR_ | UNSIGNED_ CHAR_ | UINT8_ | UINT8_T_ ; short : SHORT_ | SHORT_ INT_ | SIGNED_ SHORT_ | SIGNED_ SHORT_ INT_ | INT16_ | INT16_T_ ; ushort : USHORT_ | UNSIGNED_ SHORT_ | UNSIGNED_ SHORT_ INT_ | UINT16_ | UINT16_T_ ; int : INT_ | SIGNED_ INT_ | INT32_ | INT32_T_ ; uint : UINT_ | UNSIGNED_ INT_ | UINT32_ | UINT32_T_ ; long : LONGLONG_ | LONG_ LONG_ | LONG_ LONG_ INT_ | SIGNED_ LONG_ LONG_ | SIGNED_ LONG_ LONG_ INT_ | INT64_ | INT64_T_ ; ulong : ULONGLONG_ | UNSIGNED_ LONG_ LONG_ | UNSIGNED_ LONG_ LONG_ INT_ | UINT64_ | UINT64_T_ ; block : BLOCK_ SIZE_ ':' INT | BLOCKSIZE_ ':' INT ; encoding : RAW_ {nrrd->setpEncoding(FitsFile::RAW);} | TXT_ {nrrd->setpEncoding(FitsFile::ASCII);} | TEXT_ {nrrd->setpEncoding(FitsFile::ASCII);} | ASCII_ {nrrd->setpEncoding(FitsFile::ASCII);} | HEX_ {nrrd->setpEncoding(FitsFile::HEX);} | GZ_ {nrrd->setpEncoding(FitsFile::GZIP);} | GZIP_ {nrrd->setpEncoding(FitsFile::GZIP);} | BZ2_ {nrrd->setpEncoding(FitsFile::BZ2);} | BZIP2_ {nrrd->setpEncoding(FitsFile::BZ2);} ; endian : BIG_ {nrrd->setpArch(FitsFile::BIG);} | LITTLE_ {nrrd->setpArch(FitsFile::LITTLE);} ; oldmin : OLD_ MIN_ ':' numeric | OLDMIN_ ':' numeric ; oldmax : OLD_ MAX_ ':' numeric | OLDMAX_ ':' numeric ; lineskip : LINE_ SKIP_ ':' INT | LINESKIP_ ':' INT ; byteskip : BYTE_ SKIP_ ':' INT | BYTESKIP_ ':' INT ; sizes : sizes size | size ; size : INT { switch (dim) { case 0: nrrd->setpWidth($1); break; case 1: nrrd->setpHeight($1); break; case 2: nrrd->setpDepth($1); break; } dim++; } ; spacings : spacings numeric | numeric ; thicknesses : thicknesses numeric | numeric ; axismins : axismins numeric | numeric ; axismaxs : axismaxs numeric | numeric ; centers : centers center | center ; center : CELL_ | NODE_ | NONE_ ; labels : labels STRING | STRING ; units : units STRING | STRING ; kinds : kinds STRING | STRING ; %% saods9/tksao/fitsy++/order.C000644 000765 000000 00000011711 12705446164 016222 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include using namespace std; #include "order.h" FitsOrder::FitsOrder(FitsFile* fits, FitsHead* hdr, char* data, size_t sz) { head_ = hdr; data_ = data; dataSize_ = sz; primary_ = fits->primary(); ext_ = fits->ext(); inherit_ = fits->inherit(); byteswap_ = fits->byteswap(); endian_ = fits->endian(); // just to make sure head_->updateHDU(); valid_ = 1; } FitsOrder::~FitsOrder() { if (data_) delete [] (char*)data_; } FitsOrderNext::FitsOrderNext(FitsFile* prev) { primary_ = prev->primary(); managePrimary_ = 0; head_ = prev->head(); manageHead_ = 0; FitsImageHDU* hdu = (FitsImageHDU*)head_->hdu(); data_ = (char*)prev->data() + hdu->imgbytes(); dataSize_ = 0; dataSkip_ = 0; ext_ = prev->ext(); inherit_ = prev->inherit(); byteswap_ = prev->byteswap(); endian_ = prev->endian(); valid_ = 1; return; } /* FitsOrder::FitsOrder(FitsFile* fits, int order) { FitsHead* src = fits->head(); width_ = src->naxis(0); height_ = src->naxis(1); depth_ = src->naxis(2); if (width_<1) width_ = 1; if (height_<1) height_ = 1; if (depth_<1) depth_=1; size_ = (size_t)width_*height_*depth_; primary_ = fits->primary(); ext_ = fits->ext(); inherit_ = fits->inherit(); byteswap_ = fits->byteswap(); endian_ = fits->endian(); bitpix_ = src->hdu()->bitpix(); switch (bitpix_) { case 8: if (!(data_ = new char[size_])) return; dataSize_ = size_*sizeof(char); pixelSize_ = 1; break; case 16: if (!(data_ = new short[size_])) return; dataSize_ = size_*sizeof(short); pixelSize_ = 2; break; case -16: if (!(data_ = new unsigned short[size_])) return; dataSize_ = size_*sizeof(unsigned short); pixelSize_ = 2; break; case 32: if (!(data_ = new int[size_])) return; dataSize_ = size_*sizeof(int); pixelSize_ = 4; break; case -32: if (!(data_ = new float[size_])) return; dataSize_ = size_*sizeof(float); pixelSize_ = 4; break; case 64: if (!(data_ = new long long[size_])) return; dataSize_ = size_*sizeof(long long); pixelSize_ = 8; break; case -64: if (!(data_ = new double[size_])) return; dataSize_ = size_*sizeof(double); pixelSize_ = 8; break; } dataSkip_ = 0; memset(data_, 0, dataSize_); initHeader(fits, order); reorder(fits, order); // made it this far, must be valid valid_ = 1; } FitsOrder::~FitsOrder() { if (data_) delete [] (char*)data_; } void FitsOrder::initHeader(FitsFile* fits, int order) { head_ = new FitsHead(*(fits->head())); // NAXIS int a1 = head_->getInteger("NAXIS1",1); int a2 = head_->getInteger("NAXIS2",1); int a3 = head_->getInteger("NAXIS3",1); int n1,n2,n3; switch (order) { case 123: n1=a1; n2=a2; n3=a3; break; case 132: n1=a1; n2=a3; n3=a2; break; case 213: n1=a2; n2=a1; n3=a3; break; case 231: n1=a2; n2=a3; n3=a1; break; case 312: n1=a3; n2=a1; n3=a2; break; case 321: n1=a3; n2=a2; n3=a1; break; } head_->setInteger("NAXES", 3, ""); head_->setInteger("NAXIS1", n1, ""); head_->setInteger("NAXIS2", n2, ""); head_->setInteger("NAXIS3", n3, ""); head_->updateHDU(); } void FitsOrder::reorder(FitsFile* fits, int order) { char* src = (char*)fits->data(); char* dest = (char*)data_; char* dptr = dest; int s1 = pixelSize_; int s2 = width_*pixelSize_; int s3 = height_*width_*pixelSize_; switch (order) { case 123: // should not be used, but just in case memcpy(dest, src, dataSize_); break; case 132: for (int jj=0; jj #include "outchannel.h" OutFitsChannel::OutFitsChannel(Tcl_Interp* interp, const char* ch) { int tclMode; if ((ch_ = Tcl_GetChannel(interp, (char*)ch, &tclMode))) valid_ = 1; } int OutFitsChannel::write(char* where, size_t size) { // size_t size is unsigned long long ss =size; size_t rr = 0; int r = 0; do { r = Tcl_Write(ch_, where+rr, (ss>B1MB) ? B1MB : ss); ss -= r; rr += r; } while (r>0 && rr #include "outfile.h" OutFitsFile::OutFitsFile(const char* fn) { if ((fd_ = fopen(fn, "wb"))) valid_ = 1; } OutFitsFile::~OutFitsFile() { if (fd_) fclose(fd_); } int OutFitsFile::write(char* where, size_t size) { // size_t size is unsigned long long ss =size; size_t rr = 0; int r = 0; do { r = fwrite(where+rr, 1, (ss>B1MB) ? B1MB : ss, fd_); ss -= r; rr += r; } while (r>0 && rrB1MB) ? B1MB : ss); ss -= r; rr += r; } while (r>0 && rrB4KB) ? B4KB : ss; switch (bitpix) { case 8: memcpy(buf, where+rr, r); break; case 16: case -16: for (int ii=0; ii0 && rr #include #include "file.h" OutFitsSocket::OutFitsSocket(int s) { id_ = s; valid_ = 1; } int OutFitsSocket::write(char* where, size_t size) { // size_t size is unsigned long long ss = size; size_t rr =0; int r; do { r = (ss>B4KB) ? B4KB : ss; send(id_, where+rr, r, 0); if (r == -1) { internalError("Fitsy++ outsocket write error"); return -1; } ss -= r; rr += r; } while (r>0 && rrnext_in = NULL; stream_->avail_in = 0; stream_->next_out = NULL; stream_->avail_out = 0; stream_->zalloc = NULL; stream_->zfree = NULL; stream_->opaque = NULL; if (deflateInit2(stream_, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -MAX_WBITS, 8, Z_DEFAULT_STRATEGY) != Z_OK) { internalError("Fitsy++ outsocket deflateInit error"); return; } // dump simple header unsigned char header[10] = {0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x03}; send(id_, header, 10, 0); stream_->next_out = buf_; stream_->avail_out = B4KB; valid_ = 1; } OutFitsSocketGZ::~OutFitsSocketGZ() { // flush any pending output while (deflategz(Z_FINISH) == Z_OK); // output crc/length putlong(crc_); putlong(stream_->total_in); if (deflateEnd(stream_) != Z_OK) internalError("Fitsy++ outsocket deflateEnd error"); if (stream_) delete stream_; if (buf_) delete [] buf_; } int OutFitsSocketGZ::write(char* where, size_t size) { stream_->next_in = (unsigned char*)where; stream_->avail_in = size; if (DebugGZ) cerr << "write " << size << endl; while (stream_->avail_in > 0 && deflategz(Z_NO_FLUSH) == Z_OK); // update crc crc_ = crc32(crc_, (const Bytef *)where, size); return size - stream_->avail_in; } int OutFitsSocketGZ::deflategz(int flush) { int result = deflate(stream_, flush); switch (result) { case Z_OK: if (DebugGZ) cerr << "deflate OK: avail_in " << stream_->avail_in << " avail_out " << stream_->avail_out << endl; break; case Z_STREAM_END: if (DebugGZ) cerr << "deflate STRM_END: avail_in " << stream_->avail_in << " avail_out " << stream_->avail_out << endl; break; default: if (DebugGZ) cerr << "deflate Error " << result << endl; return result; } if (stream_->avail_out == 0 || result != Z_OK) { int s = B4KB - stream_->avail_out; unsigned char* d = buf_; while (s>0) { int r = send(id_, d, s, 0); if (r == -1) { internalError("Fitsy++ outsocket deflate send error"); return Z_ERRNO; } if (DebugGZ) cerr << "deflate send " << r << " out of " << s << endl; s -= r; d += r; } stream_->next_out = buf_; stream_->avail_out = B4KB; } return result; } void OutFitsSocketGZ::putlong(unsigned long l) { // dump in LSB order for (int n = 0; n < 4; n++) { unsigned char foo = (int)(l & 0xff); send(id_, &foo, 1, 0); l >>= 8; } } #else OutFitsSocket::OutFitsSocket(int s) { id_ = s; valid_ = 0; } int OutFitsSocket::write(char* where, size_t size) { return 0; } OutFitsSocketGZ::OutFitsSocketGZ(int s) { id_ = s; valid_ = 0; } OutFitsSocketGZ::~OutFitsSocketGZ() {} int OutFitsSocketGZ::write(char* where, size_t size) { return 0; } int OutFitsSocketGZ::deflategz(int flush) { return 0; } void OutFitsSocketGZ::putlong(unsigned long l) {} #endif saods9/tksao/fitsy++/outsocket.h000644 000765 000000 00000001272 12705446164 017175 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __outfitssocket_h__ #define __outfitssocket_h__ #include "outfits.h" #include "zlib.h" class OutFitsSocket : public virtual OutFitsStream { private: int id_; public: OutFitsSocket(int s); int write(char*, size_t); }; class OutFitsSocketGZ : public virtual OutFitsStream { private: int id_; z_stream* stream_; unsigned char* buf_; unsigned long crc_; int deflategz(int); void putlong(unsigned long); public: OutFitsSocketGZ(int); ~OutFitsSocketGZ(); int write(char*, size_t); }; #endif saods9/tksao/fitsy++/parser.C000644 000765 000000 00000201354 12617220472 016401 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse ffparse #define yylex fflex #define yyerror fferror #define yylval fflval #define yychar ffchar #define yydebug ffdebug #define yynerrs ffnerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, STRING = 259, ARCH_ = 260, ARRAY_ = 261, BIG_ = 262, BIGENDIAN_ = 263, BIN_ = 264, BINKEY_ = 265, BINCOL_ = 266, BITPIX_ = 267, COL_ = 268, DIM_ = 269, DIMS_ = 270, ECLIPTIC_ = 271, ENDIAN_ = 272, EQUATORIAL_ = 273, GALACTIC_ = 274, KEY_ = 275, LAYOUT_ = 276, LITTLE_ = 277, LITTLEENDIAN_ = 278, NESTED_ = 279, NORTH_ = 280, ORDER_ = 281, QUAD_ = 282, RING_ = 283, SKIP_ = 284, SOUTH_ = 285, SYSTEM_ = 286, UNKNOWN_ = 287, XDIM_ = 288, YDIM_ = 289, ZDIM_ = 290 }; #endif /* Tokens. */ #define INT 258 #define STRING 259 #define ARCH_ 260 #define ARRAY_ 261 #define BIG_ 262 #define BIGENDIAN_ 263 #define BIN_ 264 #define BINKEY_ 265 #define BINCOL_ 266 #define BITPIX_ 267 #define COL_ 268 #define DIM_ 269 #define DIMS_ 270 #define ECLIPTIC_ 271 #define ENDIAN_ 272 #define EQUATORIAL_ 273 #define GALACTIC_ 274 #define KEY_ 275 #define LAYOUT_ 276 #define LITTLE_ 277 #define LITTLEENDIAN_ 278 #define NESTED_ 279 #define NORTH_ 280 #define ORDER_ 281 #define QUAD_ 282 #define RING_ 283 #define SKIP_ 284 #define SOUTH_ 285 #define SYSTEM_ 286 #define UNKNOWN_ 287 #define XDIM_ 288 #define YDIM_ 289 #define ZDIM_ 290 /* Copy the first part of user declarations. */ #line 10 "fitsy++/parser.Y" #define YYDEBUG 1 #define GOTOFILT(x) {yyclearin; ffFilter(x);} #define GOTOARR(x) {yyclearin; ffArray(x);} #include "file.h" #include "hpx.h" #undef yyFlexLexer #define yyFlexLexer ffFlexLexer #include extern int fflex(void*, ffFlexLexer*); extern void fferror(FitsFile*, ffFlexLexer*, const char*); char ff_filter[512]; extern void ffFilter(int); extern void ffArray(int); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 32 "fitsy++/parser.Y" { float real; int integer; char str[256]; void* ptr; } /* Line 193 of yacc.c. */ #line 203 "fitsy++/parser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 216 "fitsy++/parser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 6 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 250 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 56 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 34 /* YYNRULES -- Number of rules. */ #define YYNRULES 121 /* YYNRULES -- Number of states. */ #define YYNSTATES 203 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 290 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 38, 39, 45, 2, 40, 2, 55, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 43, 2, 2, 46, 2, 2, 44, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 42, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 36, 2, 37, 2, 2, 2, 2, 47, 2, 54, 2, 53, 2, 2, 50, 2, 2, 51, 2, 2, 2, 41, 2, 52, 48, 2, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 5, 8, 12, 15, 21, 25, 30, 35, 38, 42, 46, 52, 56, 61, 66, 69, 73, 77, 83, 86, 90, 94, 95, 104, 105, 109, 110, 112, 116, 120, 123, 126, 131, 135, 141, 147, 155, 159, 161, 165, 169, 175, 176, 178, 180, 184, 188, 190, 194, 198, 200, 206, 210, 214, 216, 218, 222, 226, 229, 231, 233, 235, 237, 243, 247, 255, 261, 265, 267, 271, 275, 277, 281, 285, 289, 293, 297, 301, 305, 309, 313, 315, 317, 319, 321, 323, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 350, 356, 357, 360, 361, 363, 365, 369, 373, 375, 379, 383, 387, 391, 395, 397, 399, 401, 403, 405, 407, 409, 411 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 57, 0, -1, 60, -1, 60, 61, -1, 60, 61, 63, -1, 60, 63, -1, 60, 36, 62, 64, 37, -1, 60, 61, 71, -1, 60, 61, 71, 63, -1, 60, 61, 63, 71, -1, 60, 71, -1, 60, 71, 63, -1, 60, 63, 71, -1, 60, 36, 62, 72, 37, -1, 60, 61, 84, -1, 60, 61, 84, 63, -1, 60, 61, 63, 84, -1, 60, 84, -1, 60, 84, 63, -1, 60, 63, 84, -1, 60, 36, 62, 84, 37, -1, 60, 75, -1, 60, 75, 63, -1, 60, 63, 75, -1, -1, 60, 36, 6, 58, 38, 79, 39, 37, -1, -1, 1, 59, 4, -1, -1, 4, -1, 36, 4, 37, -1, 36, 3, 37, -1, 4, 40, -1, 3, 40, -1, 36, 64, 65, 37, -1, 66, 40, 67, -1, 66, 40, 67, 40, 70, -1, 66, 40, 67, 40, 69, -1, 66, 40, 67, 40, 70, 40, 69, -1, 66, 40, 70, -1, 68, -1, 68, 40, 70, -1, 68, 40, 69, -1, 68, 40, 70, 40, 69, -1, -1, 41, -1, 42, -1, 3, 43, 3, -1, 3, 44, 3, -1, 45, -1, 3, 43, 3, -1, 3, 44, 3, -1, 45, -1, 3, 44, 3, 44, 3, -1, 3, 43, 3, -1, 3, 44, 3, -1, 45, -1, 3, -1, 36, 72, 37, -1, 73, 46, 74, -1, 73, 74, -1, 9, -1, 10, -1, 11, -1, 20, -1, 38, 4, 40, 4, 39, -1, 4, 40, 4, -1, 38, 4, 40, 4, 40, 4, 39, -1, 4, 40, 4, 40, 4, -1, 38, 4, 39, -1, 4, -1, 36, 76, 37, -1, 76, 40, 77, -1, 77, -1, 33, 46, 3, -1, 34, 46, 3, -1, 35, 46, 3, -1, 14, 46, 3, -1, 15, 46, 3, -1, 12, 46, 3, -1, 29, 46, 3, -1, 5, 46, 78, -1, 17, 46, 78, -1, 78, -1, 7, -1, 8, -1, 22, -1, 23, -1, 80, 81, 82, 83, -1, 47, -1, 48, -1, 49, -1, 50, -1, 51, -1, 52, -1, 53, -1, 54, -1, 3, -1, 3, 55, 3, -1, 3, 55, 3, 55, 3, -1, -1, 43, 3, -1, -1, 51, -1, 47, -1, 36, 85, 37, -1, 85, 40, 86, -1, 86, -1, 31, 46, 87, -1, 26, 46, 88, -1, 21, 46, 89, -1, 13, 46, 3, -1, 27, 46, 3, -1, 18, -1, 19, -1, 16, -1, 32, -1, 28, -1, 24, -1, 18, -1, 25, -1, 30, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 81, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 106, 108, 108, 112, 113, 123, 124, 127, 128, 131, 133, 134, 135, 136, 137, 138, 139, 140, 141, 144, 145, 146, 149, 156, 158, 166, 168, 170, 173, 180, 182, 184, 187, 190, 192, 193, 196, 197, 198, 199, 202, 203, 204, 205, 206, 207, 210, 213, 214, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 229, 230, 231, 232, 235, 238, 239, 240, 241, 242, 243, 244, 245, 248, 249, 250, 254, 255, 258, 259, 260, 263, 266, 267, 270, 271, 272, 273, 274, 277, 278, 279, 280, 283, 284, 287, 288, 289 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "INT", "STRING", "ARCH_", "ARRAY_", "BIG_", "BIGENDIAN_", "BIN_", "BINKEY_", "BINCOL_", "BITPIX_", "COL_", "DIM_", "DIMS_", "ECLIPTIC_", "ENDIAN_", "EQUATORIAL_", "GALACTIC_", "KEY_", "LAYOUT_", "LITTLE_", "LITTLEENDIAN_", "NESTED_", "NORTH_", "ORDER_", "QUAD_", "RING_", "SKIP_", "SOUTH_", "SYSTEM_", "UNKNOWN_", "XDIM_", "YDIM_", "ZDIM_", "'['", "']'", "'('", "')'", "','", "'p'", "'P'", "':'", "'@'", "'*'", "'='", "'b'", "'s'", "'u'", "'i'", "'l'", "'r'", "'f'", "'d'", "'.'", "$accept", "command", "@1", "@2", "filename", "ext", "extb", "sect", "sectb", "physical", "rangex", "rangey", "rangexy", "rangez", "block", "bin", "binb", "binword", "binkey", "arrs", "arrsb", "arr", "endian", "array", "atype", "adims", "askip", "aendian", "hpxs", "hpxsb", "hpx", "hpxSystem", "hpxOrder", "hpxLayout", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 91, 93, 40, 41, 44, 112, 80, 58, 64, 42, 61, 98, 115, 117, 105, 108, 114, 102, 100, 46 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 57, 59, 57, 60, 60, 61, 61, 62, 62, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 69, 69, 69, 70, 71, 72, 72, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 79, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 82, 82, 83, 83, 83, 84, 85, 85, 86, 86, 86, 86, 86, 87, 87, 87, 87, 88, 88, 89, 89, 89 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 2, 3, 2, 5, 3, 4, 4, 2, 3, 3, 5, 3, 4, 4, 2, 3, 3, 5, 2, 3, 3, 0, 8, 0, 3, 0, 1, 3, 3, 2, 2, 4, 3, 5, 5, 7, 3, 1, 3, 3, 5, 0, 1, 1, 3, 3, 1, 3, 3, 1, 5, 3, 3, 1, 1, 3, 3, 2, 1, 1, 1, 1, 5, 3, 7, 5, 3, 1, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 0, 2, 0, 1, 1, 3, 3, 1, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 26, 29, 0, 2, 0, 1, 0, 3, 5, 10, 21, 17, 27, 0, 0, 0, 24, 84, 85, 61, 62, 63, 0, 0, 0, 0, 0, 64, 0, 86, 87, 0, 0, 0, 0, 0, 0, 0, 49, 0, 44, 0, 40, 0, 0, 0, 73, 83, 0, 107, 0, 4, 7, 14, 0, 12, 23, 19, 0, 11, 22, 18, 31, 33, 0, 0, 30, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 46, 0, 0, 0, 58, 70, 0, 0, 60, 71, 0, 105, 0, 0, 9, 16, 8, 15, 47, 48, 81, 0, 79, 111, 77, 78, 82, 119, 120, 121, 110, 118, 117, 109, 112, 80, 115, 113, 114, 116, 108, 74, 75, 76, 6, 13, 20, 34, 57, 52, 35, 39, 57, 56, 42, 41, 0, 0, 59, 72, 106, 0, 89, 90, 91, 92, 93, 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, 0, 66, 69, 0, 53, 0, 97, 100, 50, 51, 37, 36, 54, 55, 0, 43, 0, 0, 25, 0, 0, 102, 0, 68, 65, 0, 98, 101, 104, 103, 88, 38, 0, 0, 67, 99 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 3, 70, 5, 4, 8, 40, 9, 41, 91, 42, 140, 43, 144, 141, 10, 44, 45, 98, 11, 46, 47, 48, 160, 161, 174, 188, 197, 12, 49, 50, 130, 123, 120 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -114 static const yytype_int16 yypact[] = { 60, -114, -114, 10, -9, 44, -114, 8, 27, 29, 45, 45, 45, -114, 105, 49, 37, -114, -114, -114, -114, -114, -114, 55, 68, 82, 92, 94, -114, 119, -114, -114, 123, 132, 136, 137, 147, 148, 149, -114, 59, 75, 52, 156, 160, 36, 110, -114, -114, 139, -114, 46, 162, 45, 45, 98, -114, -114, -114, -1, -114, -114, -114, -114, -114, 196, 197, -114, -114, 77, 163, 199, 200, 201, 202, 77, 72, 102, 203, 204, 152, 205, 206, 207, 79, 67, 174, 175, 176, -114, -114, 177, 30, 33, -114, 178, 211, 20, -114, -114, 129, -114, 67, 146, -114, -114, -114, -114, -114, 172, -114, 138, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, 117, -114, 179, -114, 131, -114, -114, 180, 213, 114, -114, -114, -114, 218, -114, -114, -114, -114, -114, -114, -114, -114, 183, 220, 221, 222, 33, 223, 224, 42, 188, -114, 225, -114, 193, 181, 189, -114, -114, -114, 191, -114, -114, 131, -114, 229, 141, -114, 231, 232, 88, 42, -114, -114, 233, 184, -114, -114, -114, -114, -114, 208, 235, -114, -114 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -114, -114, -114, -114, -114, -114, -114, -7, 209, -114, -114, -114, -114, -113, -93, 0, 210, -114, 143, 234, -114, 142, -43, -114, -114, -114, -114, -114, -2, -114, 144, -114, -114, -114 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -29 static const yytype_int16 yytable[] = { 145, 52, 84, 60, 61, 62, 54, 58, 53, 56, 6, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 95, 27, 110, 7, 28, 29, 30, 31, 116, 138, 32, 33, 142, 34, 88, 35, 95, 36, 37, 38, 39, 181, 106, 107, 13, 84, 105, 177, 104, 39, 182, 20, 21, 22, 96, 24, -28, 1, 84, 51, 2, 55, 28, 29, 20, 21, 22, 178, 32, 33, 96, 139, 198, 35, 143, 28, 24, 59, 97, 69, 18, 19, 67, 143, 29, 68, 117, 39, 92, 32, 33, 85, -28, 118, 35, 30, 31, 71, 119, 16, 39, 18, 19, 20, 21, 22, 23, 24, 25, 26, 72, 27, 89, 90, 28, 29, 30, 31, 65, 66, 32, 33, 121, 34, 73, 35, 122, 36, 37, 38, 16, 195, 18, 19, 74, 196, 75, 23, 63, 25, 26, 64, 27, 99, 65, 66, 100, 30, 31, 169, 170, 20, 21, 22, 34, 24, 162, 163, 36, 37, 38, 76, 28, 29, 126, 77, 127, 128, 32, 33, 165, 166, 101, 35, 78, 102, 191, 192, 79, 80, 129, 152, 153, 154, 155, 156, 157, 158, 159, 81, 82, 83, 93, 94, 103, 108, 109, 111, 112, 113, 114, 115, 124, 125, 131, 132, 133, 134, 135, 136, 137, 147, 151, 168, 146, 164, 167, 171, 172, 173, 175, 176, 179, 180, 183, 184, 185, 189, 187, 190, 193, 194, 186, 199, 202, 200, 148, 0, 149, 57, 0, 0, 150, 201, 0, 86, 87 }; static const yytype_int16 yycheck[] = { 93, 8, 3, 10, 11, 12, 8, 9, 8, 9, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 4, 17, 69, 36, 20, 21, 22, 23, 75, 3, 26, 27, 3, 29, 40, 31, 4, 33, 34, 35, 45, 3, 53, 54, 4, 3, 52, 164, 52, 45, 167, 9, 10, 11, 38, 13, 0, 1, 3, 36, 4, 36, 20, 21, 9, 10, 11, 164, 26, 27, 38, 45, 189, 31, 45, 20, 13, 36, 46, 46, 7, 8, 37, 45, 21, 40, 18, 45, 40, 26, 27, 36, 36, 25, 31, 22, 23, 46, 30, 5, 45, 7, 8, 9, 10, 11, 12, 13, 14, 15, 46, 17, 41, 42, 20, 21, 22, 23, 43, 44, 26, 27, 24, 29, 46, 31, 28, 33, 34, 35, 5, 47, 7, 8, 46, 51, 46, 12, 37, 14, 15, 40, 17, 37, 43, 44, 40, 22, 23, 39, 40, 9, 10, 11, 29, 13, 43, 44, 33, 34, 35, 46, 20, 21, 16, 46, 18, 19, 26, 27, 43, 44, 37, 31, 46, 40, 39, 40, 46, 46, 32, 47, 48, 49, 50, 51, 52, 53, 54, 46, 46, 46, 40, 37, 36, 3, 3, 38, 3, 3, 3, 3, 3, 3, 3, 3, 3, 37, 37, 37, 37, 4, 44, 4, 40, 40, 40, 3, 39, 3, 3, 3, 3, 3, 40, 4, 37, 40, 43, 4, 3, 3, 55, 4, 3, 55, 97, -1, 100, 9, -1, -1, 102, 39, -1, 40, 40 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 1, 4, 57, 60, 59, 0, 36, 61, 63, 71, 75, 84, 4, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 20, 21, 22, 23, 26, 27, 29, 31, 33, 34, 35, 45, 62, 64, 66, 68, 72, 73, 76, 77, 78, 85, 86, 36, 63, 71, 84, 36, 71, 75, 84, 36, 63, 63, 63, 37, 40, 43, 44, 37, 40, 46, 58, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 3, 36, 64, 72, 84, 41, 42, 65, 40, 40, 37, 4, 38, 46, 74, 37, 40, 37, 40, 36, 71, 84, 63, 63, 3, 3, 78, 38, 3, 3, 3, 3, 78, 18, 25, 30, 89, 24, 28, 88, 3, 3, 16, 18, 19, 32, 87, 3, 3, 3, 37, 37, 37, 37, 3, 45, 67, 70, 3, 45, 69, 70, 40, 4, 74, 77, 86, 44, 47, 48, 49, 50, 51, 52, 53, 54, 79, 80, 43, 44, 40, 43, 44, 40, 4, 39, 40, 3, 39, 3, 81, 3, 3, 69, 70, 3, 3, 3, 69, 40, 4, 37, 55, 43, 82, 40, 4, 39, 40, 3, 3, 47, 51, 83, 69, 4, 55, 39, 3 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (ff, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, ff, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, FitsFile* ff, ffFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, ff, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; FitsFile* ff; ffFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (ff); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, FitsFile* ff, ffFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, ff, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; FitsFile* ff; ffFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, ff, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, FitsFile* ff, ffFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, ff, ll) YYSTYPE *yyvsp; int yyrule; FitsFile* ff; ffFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , ff, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, ff, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, FitsFile* ff, ffFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, ff, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; FitsFile* ff; ffFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (ff); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (FitsFile* ff, ffFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (FitsFile* ff, ffFlexLexer* ll) #else int yyparse (ff, ll) FitsFile* ff; ffFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 24: #line 106 "fitsy++/parser.Y" {GOTOARR(0);} break; case 26: #line 108 "fitsy++/parser.Y" {GOTOFILT(0);} break; case 27: #line 109 "fitsy++/parser.Y" {ff->setValid(1);ff->setpFilter(ff_filter);;} break; case 29: #line 113 "fitsy++/parser.Y" {ff->setpName((yyvsp[(1) - (1)].str));;} break; case 30: #line 123 "fitsy++/parser.Y" {ff->setpExt((yyvsp[(2) - (3)].str));;} break; case 31: #line 124 "fitsy++/parser.Y" {ff->setpIndex((yyvsp[(2) - (3)].integer));;} break; case 32: #line 127 "fitsy++/parser.Y" {ff->setpExt((yyvsp[(1) - (2)].str));;} break; case 33: #line 128 "fitsy++/parser.Y" {ff->setpIndex((yyvsp[(1) - (2)].integer));;} break; case 44: #line 144 "fitsy++/parser.Y" {ff->setpcoord(0);;} break; case 45: #line 145 "fitsy++/parser.Y" {ff->setpcoord(1);;} break; case 46: #line 146 "fitsy++/parser.Y" {ff->setpcoord(1);;} break; case 47: #line 150 "fitsy++/parser.Y" { // this is not a mistake // need to fool parser into processing "xy0:xy1,block" ff->setpxmin((yyvsp[(1) - (3)].integer)); ff->setpxmax((yyvsp[(3) - (3)].integer)); ff->setpxvalid(1); ff->setpymin((yyvsp[(1) - (3)].integer)); ff->setpymax((yyvsp[(3) - (3)].integer)); ff->setpyvalid(1); ;} break; case 48: #line 157 "fitsy++/parser.Y" {ff->setpxmin((yyvsp[(3) - (3)].integer)-(yyvsp[(1) - (3)].integer)/2); ff->setpxmax((yyvsp[(3) - (3)].integer)+(yyvsp[(1) - (3)].integer)/2); ff->setpxvalid(1);;} break; case 49: #line 159 "fitsy++/parser.Y" { // this is not a mistake // need to fool parser into processing "*,block" ff->setpxvalid(0); ff->setpyvalid(0); ;} break; case 50: #line 167 "fitsy++/parser.Y" {ff->setpymin((yyvsp[(1) - (3)].integer)); ff->setpymax((yyvsp[(3) - (3)].integer)); ff->setpyvalid(1);;} break; case 51: #line 169 "fitsy++/parser.Y" {ff->setpymin((yyvsp[(3) - (3)].integer)-(yyvsp[(1) - (3)].integer)/2); ff->setpymax((yyvsp[(3) - (3)].integer)+(yyvsp[(1) - (3)].integer)/2); ff->setpyvalid(1);;} break; case 52: #line 170 "fitsy++/parser.Y" {ff->setpyvalid(0);;} break; case 53: #line 174 "fitsy++/parser.Y" { ff->setpxmin((yyvsp[(3) - (5)].integer)-(yyvsp[(1) - (5)].integer)/2); ff->setpxmax((yyvsp[(3) - (5)].integer)+(yyvsp[(1) - (5)].integer)/2); ff->setpxvalid(1); ff->setpymin((yyvsp[(5) - (5)].integer)-(yyvsp[(1) - (5)].integer)/2); ff->setpymax((yyvsp[(5) - (5)].integer)+(yyvsp[(1) - (5)].integer)/2); ff->setpyvalid(1); ;} break; case 54: #line 181 "fitsy++/parser.Y" {ff->setpzmin((yyvsp[(1) - (3)].integer)); ff->setpzmax((yyvsp[(3) - (3)].integer)); ff->setpzvalid(1);;} break; case 55: #line 183 "fitsy++/parser.Y" {ff->setpzmin((yyvsp[(3) - (3)].integer)-(yyvsp[(1) - (3)].integer)/2); ff->setpzmax((yyvsp[(3) - (3)].integer)+(yyvsp[(1) - (3)].integer)/2); ff->setpzvalid(1);;} break; case 56: #line 184 "fitsy++/parser.Y" {ff->setpzvalid(0);;} break; case 57: #line 187 "fitsy++/parser.Y" {ff->setpblock((yyvsp[(1) - (1)].integer)); ff->setpbvalid(1);;} break; case 65: #line 202 "fitsy++/parser.Y" {ff->setpBinXY((yyvsp[(2) - (5)].str),(yyvsp[(4) - (5)].str));;} break; case 66: #line 203 "fitsy++/parser.Y" {ff->setpBinXY((yyvsp[(1) - (3)].str),(yyvsp[(3) - (3)].str));;} break; case 67: #line 204 "fitsy++/parser.Y" {ff->setpBinXYZ((yyvsp[(2) - (7)].str),(yyvsp[(4) - (7)].str),(yyvsp[(6) - (7)].str));;} break; case 68: #line 205 "fitsy++/parser.Y" {ff->setpBinXYZ((yyvsp[(1) - (5)].str),(yyvsp[(3) - (5)].str),(yyvsp[(5) - (5)].str));;} break; case 69: #line 206 "fitsy++/parser.Y" {ff->setpBinZ((yyvsp[(2) - (3)].str));;} break; case 70: #line 207 "fitsy++/parser.Y" {ff->setpBinZ((yyvsp[(1) - (1)].str));;} break; case 74: #line 217 "fitsy++/parser.Y" {ff->setpWidth((yyvsp[(3) - (3)].integer));;} break; case 75: #line 218 "fitsy++/parser.Y" {ff->setpHeight((yyvsp[(3) - (3)].integer));;} break; case 76: #line 219 "fitsy++/parser.Y" {ff->setpDepth((yyvsp[(3) - (3)].integer));;} break; case 77: #line 220 "fitsy++/parser.Y" {ff->setpWidth((yyvsp[(3) - (3)].integer));ff->setpHeight((yyvsp[(3) - (3)].integer));;} break; case 78: #line 221 "fitsy++/parser.Y" {ff->setpWidth((yyvsp[(3) - (3)].integer));ff->setpHeight((yyvsp[(3) - (3)].integer));;} break; case 79: #line 222 "fitsy++/parser.Y" {ff->setpBitpix((yyvsp[(3) - (3)].integer));;} break; case 80: #line 223 "fitsy++/parser.Y" {ff->setpSkip((yyvsp[(3) - (3)].integer));;} break; case 81: #line 224 "fitsy++/parser.Y" {ff->setpArch((FitsFile::ArchType)(yyvsp[(3) - (3)].integer));;} break; case 82: #line 225 "fitsy++/parser.Y" {ff->setpArch((FitsFile::ArchType)(yyvsp[(3) - (3)].integer));;} break; case 83: #line 226 "fitsy++/parser.Y" {ff->setpArch((FitsFile::ArchType)(yyvsp[(1) - (1)].integer));;} break; case 84: #line 229 "fitsy++/parser.Y" {(yyval.integer) = FitsFile::BIG;;} break; case 85: #line 230 "fitsy++/parser.Y" {(yyval.integer) = FitsFile::BIG;;} break; case 86: #line 231 "fitsy++/parser.Y" {(yyval.integer) = FitsFile::LITTLE;;} break; case 87: #line 232 "fitsy++/parser.Y" {(yyval.integer) = FitsFile::LITTLE;;} break; case 89: #line 238 "fitsy++/parser.Y" {ff->setpBitpix(8);;} break; case 90: #line 239 "fitsy++/parser.Y" {ff->setpBitpix(16);;} break; case 91: #line 240 "fitsy++/parser.Y" {ff->setpBitpix(-16);;} break; case 92: #line 241 "fitsy++/parser.Y" {ff->setpBitpix(32);;} break; case 93: #line 242 "fitsy++/parser.Y" {ff->setpBitpix(64);;} break; case 94: #line 243 "fitsy++/parser.Y" {ff->setpBitpix(-32);;} break; case 95: #line 244 "fitsy++/parser.Y" {ff->setpBitpix(-32);;} break; case 96: #line 245 "fitsy++/parser.Y" {ff->setpBitpix(-64);;} break; case 97: #line 248 "fitsy++/parser.Y" {ff->setpWidth((yyvsp[(1) - (1)].integer));ff->setpHeight((yyvsp[(1) - (1)].integer));;} break; case 98: #line 249 "fitsy++/parser.Y" {ff->setpWidth((yyvsp[(1) - (3)].integer));ff->setpHeight((yyvsp[(3) - (3)].integer));;} break; case 99: #line 251 "fitsy++/parser.Y" {ff->setpWidth((yyvsp[(1) - (5)].integer));ff->setpHeight((yyvsp[(3) - (5)].integer));ff->setpDepth((yyvsp[(5) - (5)].integer));;} break; case 101: #line 255 "fitsy++/parser.Y" {ff->setpSkip((yyvsp[(2) - (2)].integer));;} break; case 103: #line 259 "fitsy++/parser.Y" {ff->setpArch(FitsFile::LITTLE);;} break; case 104: #line 260 "fitsy++/parser.Y" {ff->setpArch(FitsFile::BIG);;} break; case 111: #line 273 "fitsy++/parser.Y" {ff->setpHPXColumn((yyvsp[(3) - (3)].integer));;} break; case 112: #line 274 "fitsy++/parser.Y" {ff->setpHPXQuad((yyvsp[(3) - (3)].integer));;} break; case 113: #line 277 "fitsy++/parser.Y" {ff->setpHPXSystem(FitsHPX::EQU);;} break; case 114: #line 278 "fitsy++/parser.Y" {ff->setpHPXSystem(FitsHPX::GAL);;} break; case 115: #line 279 "fitsy++/parser.Y" {ff->setpHPXSystem(FitsHPX::ECL);;} break; case 116: #line 280 "fitsy++/parser.Y" {ff->setpHPXSystem(FitsHPX::UNKNOWN);;} break; case 117: #line 283 "fitsy++/parser.Y" {ff->setpHPXOrder(FitsHPX::RING);;} break; case 118: #line 284 "fitsy++/parser.Y" {ff->setpHPXOrder(FitsHPX::NESTED);;} break; case 119: #line 287 "fitsy++/parser.Y" {ff->setpHPXLayout(FitsHPX::EQUATOR);;} break; case 120: #line 288 "fitsy++/parser.Y" {ff->setpHPXLayout(FitsHPX::NORTH);;} break; case 121: #line 289 "fitsy++/parser.Y" {ff->setpHPXLayout(FitsHPX::SOUTH);;} break; /* Line 1267 of yacc.c. */ #line 1979 "fitsy++/parser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (ff, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (ff, ll, yymsg); } else { yyerror (ff, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, ff, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, ff, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (ff, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, ff, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, ff, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 292 "fitsy++/parser.Y" saods9/tksao/fitsy++/parser.H000644 000765 000000 00000006622 12612461721 016406 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, STRING = 259, ARCH_ = 260, ARRAY_ = 261, BIG_ = 262, BIGENDIAN_ = 263, BIN_ = 264, BINKEY_ = 265, BINCOL_ = 266, BITPIX_ = 267, COL_ = 268, DIM_ = 269, DIMS_ = 270, ECLIPTIC_ = 271, ENDIAN_ = 272, EQUATORIAL_ = 273, GALACTIC_ = 274, KEY_ = 275, LAYOUT_ = 276, LITTLE_ = 277, LITTLEENDIAN_ = 278, NESTED_ = 279, NORTH_ = 280, ORDER_ = 281, QUAD_ = 282, RING_ = 283, SKIP_ = 284, SOUTH_ = 285, SYSTEM_ = 286, UNKNOWN_ = 287, XDIM_ = 288, YDIM_ = 289, ZDIM_ = 290 }; #endif /* Tokens. */ #define INT 258 #define STRING 259 #define ARCH_ 260 #define ARRAY_ 261 #define BIG_ 262 #define BIGENDIAN_ 263 #define BIN_ 264 #define BINKEY_ 265 #define BINCOL_ 266 #define BITPIX_ 267 #define COL_ 268 #define DIM_ 269 #define DIMS_ 270 #define ECLIPTIC_ 271 #define ENDIAN_ 272 #define EQUATORIAL_ 273 #define GALACTIC_ 274 #define KEY_ 275 #define LAYOUT_ 276 #define LITTLE_ 277 #define LITTLEENDIAN_ 278 #define NESTED_ 279 #define NORTH_ 280 #define ORDER_ 281 #define QUAD_ 282 #define RING_ 283 #define SKIP_ 284 #define SOUTH_ 285 #define SYSTEM_ 286 #define UNKNOWN_ 287 #define XDIM_ 288 #define YDIM_ 289 #define ZDIM_ 290 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 32 "fitsy++/parser.Y" { float real; int integer; char str[256]; void* ptr; } /* Line 1529 of yacc.c. */ #line 126 "fitsy++/parser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/fitsy++/parser.Y000644 000765 000000 00000014467 12705446164 016444 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {FitsFile* ff} %lex-param {ffFlexLexer* ll} %parse-param {ffFlexLexer* ll} %{ #define YYDEBUG 1 #define GOTOFILT(x) {yyclearin; ffFilter(x);} #define GOTOARR(x) {yyclearin; ffArray(x);} #include "file.h" #include "hpx.h" #undef yyFlexLexer #define yyFlexLexer ffFlexLexer #include extern int fflex(void*, ffFlexLexer*); extern void fferror(FitsFile*, ffFlexLexer*, const char*); char ff_filter[512]; extern void ffFilter(int); extern void ffArray(int); %} %union { float real; int integer; char str[256]; void* ptr; } %type endian %token INT %token STRING %token ARCH_ %token ARRAY_ %token BIG_ %token BIGENDIAN_ %token BIN_ %token BINKEY_ %token BINCOL_ %token BITPIX_ %token COL_ %token DIM_ %token DIMS_ %token ECLIPTIC_ %token ENDIAN_ %token EQUATORIAL_ %token GALACTIC_ %token KEY_ %token LAYOUT_ %token LITTLE_ %token LITTLEENDIAN_ %token NESTED_ %token NORTH_ %token ORDER_ %token QUAD_ %token RING_ %token SKIP_ %token SOUTH_ %token SYSTEM_ %token UNKNOWN_ %token XDIM_ %token YDIM_ %token ZDIM_ %% //start: {yydebug=1;} command // assume any error is the start of a filter command : filename | filename ext | filename ext sect | filename sect | filename '[' extb sectb ']' | filename ext bin | filename ext bin sect | filename ext sect bin | filename bin | filename bin sect | filename sect bin | filename '[' extb binb ']' | filename ext hpxs | filename ext hpxs sect | filename ext sect hpxs | filename hpxs | filename hpxs sect | filename sect hpxs | filename '[' extb hpxs ']' | filename arrs | filename arrs sect | filename sect arrs | filename '[' ARRAY_ {GOTOARR(0)} '(' array ')' ']' | error {GOTOFILT(0)} STRING {ff->setValid(1);ff->setpFilter(ff_filter);} ; filename : /* empty */ | STRING {ff->setpName($1);} ; // we must do it this way so that a bare filter will be accepted //ext : '[' extb ']' // ; //extb : STRING {ff->setpExt($1);} // | INT {ff->setpIndex($1);} // ; ext : '[' STRING ']' {ff->setpExt($2);} | '[' INT ']' {ff->setpIndex($2);} ; extb : STRING ',' {ff->setpExt($1);} | INT ',' {ff->setpIndex($1);} ; sect : '[' sectb physical ']' sectb : rangex ',' rangey | rangex ',' rangey ',' block | rangex ',' rangey ',' rangez | rangex ',' rangey ',' block ',' rangez | rangex ',' block | rangexy | rangexy ',' block | rangexy ',' rangez | rangexy ',' block ',' rangez ; physical : /* empty */ {ff->setpcoord(0);} | 'p' {ff->setpcoord(1);} | 'P' {ff->setpcoord(1);} ; rangex : INT ':' INT { // this is not a mistake // need to fool parser into processing "xy0:xy1,block" ff->setpxmin($1); ff->setpxmax($3); ff->setpxvalid(1); ff->setpymin($1); ff->setpymax($3); ff->setpyvalid(1); } | INT '@' INT {ff->setpxmin($3-$1/2); ff->setpxmax($3+$1/2); ff->setpxvalid(1);} | '*' { // this is not a mistake // need to fool parser into processing "*,block" ff->setpxvalid(0); ff->setpyvalid(0); } ; rangey : INT ':' INT {ff->setpymin($1); ff->setpymax($3); ff->setpyvalid(1);} | INT '@' INT {ff->setpymin($3-$1/2); ff->setpymax($3+$1/2); ff->setpyvalid(1);} | '*' {ff->setpyvalid(0);} ; rangexy : INT '@' INT '@' INT { ff->setpxmin($3-$1/2); ff->setpxmax($3+$1/2); ff->setpxvalid(1); ff->setpymin($5-$1/2); ff->setpymax($5+$1/2); ff->setpyvalid(1); } ; rangez : INT ':' INT {ff->setpzmin($1); ff->setpzmax($3); ff->setpzvalid(1);} | INT '@' INT {ff->setpzmin($3-$1/2); ff->setpzmax($3+$1/2); ff->setpzvalid(1);} | '*' {ff->setpzvalid(0);} ; block : INT {ff->setpblock($1); ff->setpbvalid(1);} ; bin : '[' binb ']' binb : binword '=' binkey | binword binkey ; binword : BIN_ | BINKEY_ | BINCOL_ | KEY_ ; binkey : '(' STRING ',' STRING ')' {ff->setpBinXY($2,$4);} | STRING ',' STRING {ff->setpBinXY($1,$3);} | '(' STRING ',' STRING ',' STRING ')' {ff->setpBinXYZ($2,$4,$6);} | STRING ',' STRING ',' STRING {ff->setpBinXYZ($1,$3,$5);} | '(' STRING ')' {ff->setpBinZ($2);} | STRING {ff->setpBinZ($1);} ; arrs : '[' arrsb ']' ; arrsb : arrsb ',' arr | arr ; arr : XDIM_ '=' INT {ff->setpWidth($3);} | YDIM_ '=' INT {ff->setpHeight($3);} | ZDIM_ '=' INT {ff->setpDepth($3);} | DIM_ '=' INT {ff->setpWidth($3);ff->setpHeight($3);} | DIMS_ '=' INT {ff->setpWidth($3);ff->setpHeight($3);} | BITPIX_ '=' INT {ff->setpBitpix($3);} | SKIP_ '=' INT {ff->setpSkip($3);} | ARCH_ '=' endian {ff->setpArch((FitsFile::ArchType)$3);} | ENDIAN_ '=' endian {ff->setpArch((FitsFile::ArchType)$3);} | endian {ff->setpArch((FitsFile::ArchType)$1);} ; endian : BIG_ {$$ = FitsFile::BIG;} | BIGENDIAN_ {$$ = FitsFile::BIG;} | LITTLE_ {$$ = FitsFile::LITTLE;} | LITTLEENDIAN_ {$$ = FitsFile::LITTLE;} ; array : atype adims askip aendian ; atype : 'b' {ff->setpBitpix(8);} | 's' {ff->setpBitpix(16);} | 'u' {ff->setpBitpix(-16);} | 'i' {ff->setpBitpix(32);} | 'l' {ff->setpBitpix(64);} | 'r' {ff->setpBitpix(-32);} | 'f' {ff->setpBitpix(-32);} | 'd' {ff->setpBitpix(-64);} ; adims : INT {ff->setpWidth($1);ff->setpHeight($1);} | INT '.' INT {ff->setpWidth($1);ff->setpHeight($3);} | INT '.' INT '.' INT {ff->setpWidth($1);ff->setpHeight($3);ff->setpDepth($5);} ; askip : /* empty */ | ':' INT {ff->setpSkip($2);} ; aendian : /* empty */ | 'l' {ff->setpArch(FitsFile::LITTLE);} | 'b' {ff->setpArch(FitsFile::BIG);} ; hpxs : '[' hpxsb ']' ; hpxsb : hpxsb ',' hpx | hpx ; hpx : SYSTEM_ '=' hpxSystem | ORDER_ '=' hpxOrder | LAYOUT_ '=' hpxLayout | COL_ '=' INT {ff->setpHPXColumn($3);} | QUAD_ '=' INT {ff->setpHPXQuad($3);} ; hpxSystem : EQUATORIAL_ {ff->setpHPXSystem(FitsHPX::EQU);} | GALACTIC_ {ff->setpHPXSystem(FitsHPX::GAL);} | ECLIPTIC_ {ff->setpHPXSystem(FitsHPX::ECL);} | UNKNOWN_ {ff->setpHPXSystem(FitsHPX::UNKNOWN);} ; hpxOrder : RING_ {ff->setpHPXOrder(FitsHPX::RING);} | NESTED_ {ff->setpHPXOrder(FitsHPX::NESTED);} ; hpxLayout : EQUATORIAL_ {ff->setpHPXLayout(FitsHPX::EQUATOR);} | NORTH_ {ff->setpHPXLayout(FitsHPX::NORTH);} | SOUTH_ {ff->setpHPXLayout(FitsHPX::SOUTH);} ; %% saods9/tksao/fitsy++/photo.C000644 000765 000000 00000006567 12705446164 016255 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include using namespace std; #include #include "photo.h" FitsPhoto::FitsPhoto(Tcl_Interp* interp, const char* ph) { // reset valid_ = 0; if (*ph == '\0') { Tcl_AppendResult(interp, "bad image name ", NULL); return; } Tk_PhotoHandle photo = Tk_FindPhoto(interp, ph); if (!photo) { Tcl_AppendResult(interp, "bad image handle ", NULL); return; } Tk_PhotoImageBlock block; if (!Tk_PhotoGetImage(photo,&block)) { Tcl_AppendResult(interp, "bad image block ", NULL); return; } int width =0; int height =0; Tk_PhotoGetSize(photo, &width, &height); // new header head_ = new FitsHead(width, height, 1, 8); if (!head_->isValid()) return; size_t size = (size_t)width*height; unsigned char* dest = new unsigned char[size]; data_ = dest; dataSize_ = size; dataSkip_ = 0; unsigned char* src = block.pixelPtr; for (int jj=height-1; jj>=0; jj--) for (int ii=0; iiisValid()) return; size_t size = (size_t)width*height*depth; unsigned char* dest = new unsigned char[size]; data_ = dest; dataSize_ = size; dataSkip_ = 0; unsigned char* src = block.pixelPtr; for (int kk=0; kk=0; jj--) { for (int ii=0; iiprimary(); managePrimary_ = 0; head_ = prev->head(); manageHead_ = 0; FitsImageHDU* hdu = (FitsImageHDU*)head_->hdu(); data_ = (char*)prev->data() + hdu->imgbytes(); dataSize_ = 0; dataSkip_ = 0; ext_ = prev->ext(); inherit_ = head_->inherit(); byteswap_ = prev->byteswap(); endian_ = prev->endian(); valid_ = 1; return; } saods9/tksao/fitsy++/photo.h000644 000765 000000 00000001135 12705446164 016304 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsphoto_h__ #define __fitsphoto_h__ #include #include "vector.h" #include "file.h" class FitsPhoto : public FitsFile { public: FitsPhoto(Tcl_Interp* interp, const char*); ~FitsPhoto(); }; class FitsPhotoCube : public FitsFile { public: FitsPhotoCube(Tcl_Interp* interp, const char*); ~FitsPhotoCube(); }; class FitsPhotoCubeNext : public FitsFile { public: FitsPhotoCubeNext(FitsFile*); }; #endif saods9/tksao/fitsy++/plio.C000644 000765 000000 00000004317 12705446164 016056 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include using namespace std; #include "plio.h" extern "C" { int pl_l2pi(short *ll_src, int xs, int *px_dst, int npix); } template FitsPliom::FitsPliom(FitsFile* fits) : FitsCompressm(fits) { FitsCompressm::uncompress(fits); } template int FitsPliom::compressed(T* dest, char* sptr, char* heap, int kkstart, int kkstop, int jjstart, int jjstop, int iistart, int iistop) { double zs = FitsCompressm::bscale_; if (FitsCompressm::zscale_) zs = FitsCompressm::zscale_->value(sptr,0); double zz = FitsCompressm::bzero_; if (FitsCompressm::zzero_) zz = FitsCompressm::zzero_->value(sptr,0); int blank = FitsCompressm::blank_; if (FitsCompressm::zblank_) blank = (int)FitsCompressm::zblank_->value(sptr,0); int icnt=0; short* ibuf = (short*)((FitsBinColumnArray*)FitsCompressm::compress_)->get(heap, sptr, &icnt); // ibuf can be NULL if (!ibuf || !icnt) return 0; // swap if needed if (FitsCompressm::byteswap_) for (int ii=0; ii::tilesize_; int* obuf = new int[ocnt]; int cc = pl_l2pi(ibuf, 1, obuf, ocnt); if (cc != ocnt) { internalError("Fitsy++ plio error"); return 0; } int ll=0; for (int kk=kkstart; kk::width_*FitsCompressm::height_ + jj*FitsCompressm::width_ + ii] = FitsCompressm::getValue(obuf+ll,zs,zz,blank); if (obuf) delete [] obuf; return 1; } template class FitsPliom; template class FitsPliom; template class FitsPliom; template class FitsPliom; template class FitsPliom; template class FitsPliom; template class FitsPliom; saods9/tksao/fitsy++/plio.h000644 000765 000000 00000000645 12705446164 016123 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsplio_h__ #define __fitsplio_h__ #include "compress.h" template class FitsPliom : public FitsCompressm { private: int compressed(T*, char*, char*, int, int, int, int, int, int); public: FitsPliom(FitsFile*); }; #endif saods9/tksao/fitsy++/pliocomp.c000644 000765 000000 00000015654 10737246655 017011 0ustar00joyewheel000000 000000 /* stdlib is needed for the abs function */ #include /* The following prototype code was provided by Doug Tody, NRAO, for performing conversion between pixel arrays and line lists. The compression technique is used in IRAF. */ int pl_p2li (int *pxsrc, int xs, short *lldst, int npix); int pl_l2pi (short *ll_src, int xs, int *px_dst, int npix); /* * PL_P2L -- Convert a pixel array to a line list. The length of the list is * returned as the function value. * * Translated from the SPP version using xc -f, f2c. 8Sep99 DCT. */ #ifndef min #define min(a,b) (((a)<(b))?(a):(b)) #endif #ifndef max #define max(a,b) (((a)>(b))?(a):(b)) #endif int pl_p2li (int *pxsrc, int xs, short *lldst, int npix) /* int *pxsrc; input pixel array */ /* int xs; starting index in pxsrc (?) */ /* short *lldst; encoded line list */ /* int npix; number of pixels to convert */ { /* System generated locals */ int ret_val, i__1, i__2, i__3; /* Local variables */ static int zero, v, x1, hi, ip, dv, xe, np, op, iz, nv, pv, nz; /* Parameter adjustments */ --lldst; --pxsrc; /* Function Body */ if (! (npix <= 0)) { goto L110; } ret_val = 0; goto L100; L110: lldst[3] = -100; lldst[2] = 7; lldst[1] = 0; lldst[6] = 0; lldst[7] = 0; xe = xs + npix - 1; op = 8; zero = 0; /* Computing MAX */ i__1 = zero, i__2 = pxsrc[xs]; pv = max(i__1,i__2); x1 = xs; iz = xs; hi = 1; i__1 = xe; for (ip = xs; ip <= i__1; ++ip) { if (! (ip < xe)) { goto L130; } /* Computing MAX */ i__2 = zero, i__3 = pxsrc[ip + 1]; nv = max(i__2,i__3); if (! (nv == pv)) { goto L140; } goto L120; L140: if (! (pv == 0)) { goto L150; } pv = nv; x1 = ip + 1; goto L120; L150: goto L131; L130: if (! (pv == 0)) { goto L160; } x1 = xe + 1; L160: L131: np = ip - x1 + 1; nz = x1 - iz; if (! (pv > 0)) { goto L170; } dv = pv - hi; if (! (dv != 0)) { goto L180; } hi = pv; if (! (abs(dv) > 4095)) { goto L190; } lldst[op] = (short) ((pv & 4095) + 4096); ++op; lldst[op] = (short) (pv / 4096); ++op; goto L191; L190: if (! (dv < 0)) { goto L200; } lldst[op] = (short) (-dv + 12288); goto L201; L200: lldst[op] = (short) (dv + 8192); L201: ++op; if (! (np == 1 && nz == 0)) { goto L210; } v = lldst[op - 1]; lldst[op - 1] = (short) (v | 16384); goto L91; L210: L191: L180: L170: if (! (nz > 0)) { goto L220; } L230: if (! (nz > 0)) { goto L232; } lldst[op] = (short) min(4095,nz); ++op; /* L231: */ nz += -4095; goto L230; L232: if (! (np == 1 && pv > 0)) { goto L240; } lldst[op - 1] = (short) (lldst[op - 1] + 20481); goto L91; L240: L220: L250: if (! (np > 0)) { goto L252; } lldst[op] = (short) (min(4095,np) + 16384); ++op; /* L251: */ np += -4095; goto L250; L252: L91: x1 = ip + 1; iz = x1; pv = nv; L120: ; } /* L121: */ lldst[4] = (short) ((op - 1) % 32768); lldst[5] = (short) ((op - 1) / 32768); ret_val = op - 1; goto L100; L100: return ret_val; } /* plp2li_ */ /* * PL_L2PI -- Translate a PLIO line list into an integer pixel array. * The number of pixels output (always npix) is returned as the function * value. * * Translated from the SPP version using xc -f, f2c. 8Sep99 DCT. */ int pl_l2pi (short *ll_src, int xs, int *px_dst, int npix) /* short *ll_src; encoded line list */ /* int xs; starting index in ll_src */ /* int *px_dst; output pixel array */ /* int npix; number of pixels to convert */ { /* System generated locals */ int ret_val, i__1, i__2; /* Local variables */ static int data, sw0001, otop, i__, lllen, i1, i2, x1, x2, ip, xe, np, op, pv, opcode, llfirt; static int skipwd; /* Parameter adjustments */ --px_dst; --ll_src; /* Function Body */ if (! (ll_src[3] > 0)) { goto L110; } lllen = ll_src[3]; llfirt = 4; goto L111; L110: lllen = (ll_src[5] << 15) + ll_src[4]; llfirt = ll_src[2] + 1; L111: if (! (npix <= 0 || lllen <= 0)) { goto L120; } ret_val = 0; goto L100; L120: xe = xs + npix - 1; skipwd = 0; op = 1; x1 = 1; pv = 1; i__1 = lllen; for (ip = llfirt; ip <= i__1; ++ip) { if (! skipwd) { goto L140; } skipwd = 0; goto L130; L140: opcode = ll_src[ip] / 4096; data = ll_src[ip] & 4095; sw0001 = opcode; goto L150; L160: x2 = x1 + data - 1; i1 = max(x1,xs); i2 = min(x2,xe); np = i2 - i1 + 1; if (! (np > 0)) { goto L170; } otop = op + np - 1; if (! (opcode == 4)) { goto L180; } i__2 = otop; for (i__ = op; i__ <= i__2; ++i__) { px_dst[i__] = pv; /* L190: */ } /* L191: */ goto L181; L180: i__2 = otop; for (i__ = op; i__ <= i__2; ++i__) { px_dst[i__] = 0; /* L200: */ } /* L201: */ if (! (opcode == 5 && i2 == x2)) { goto L210; } px_dst[otop] = pv; L210: L181: op = otop + 1; L170: x1 = x2 + 1; goto L151; L220: pv = (ll_src[ip + 1] << 12) + data; skipwd = 1; goto L151; L230: pv += data; goto L151; L240: pv -= data; goto L151; L250: pv += data; goto L91; L260: pv -= data; L91: if (! (x1 >= xs && x1 <= xe)) { goto L270; } px_dst[op] = pv; ++op; L270: ++x1; goto L151; L150: ++sw0001; if (sw0001 < 1 || sw0001 > 8) { goto L151; } switch ((int)sw0001) { case 1: goto L160; case 2: goto L220; case 3: goto L230; case 4: goto L240; case 5: goto L160; case 6: goto L160; case 7: goto L250; case 8: goto L260; } L151: if (! (x1 > xe)) { goto L280; } goto L131; L280: L130: ; } L131: i__1 = npix; for (i__ = op; i__ <= i__1; ++i__) { px_dst[i__] = 0; /* L290: */ } /* L291: */ ret_val = npix; goto L100; L100: return ret_val; } /* pll2pi_ */ saods9/tksao/fitsy++/rice.C000644 000765 000000 00000010256 12705446164 016034 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include using namespace std; #include "rice.h" extern "C" { int fits_rdecomp (unsigned char *c, int clen, unsigned int array[], int nx, int nblock); int fits_rdecomp_short (unsigned char *c, int clen, unsigned short array[], int nx, int nblock); int fits_rdecomp_byte (unsigned char *c, int clen, unsigned char array[], int nx, int nblock); } template FitsRicem::FitsRicem(FitsFile* fits) : FitsCompressm(fits) { // rice parameters block_ = 32; bytepix_ = 4; noisebit_ = 4; char name[] = "ZNAME "; char val[] = "ZVAL "; for (int ii=0; ii<9; ii++) { name[5] = '0'+ii; val[4] = '0'+ii; if (fits->find(name)) { char* which = fits->getString(name); if (!strncmp(which,"BLOCK",4)) block_ = fits->getInteger(val,32); else if (!strncmp(which,"BYTEPIX",4)) bytepix_ = fits->getInteger(val,4); else if (!strncmp(which,"NOISEBIT",4)) noisebit_ = fits->getInteger(val,4); delete [] which; } } FitsCompressm::uncompress(fits); } template int FitsRicem::compressed(T* dest, char* sptr, char* heap, int kkstart, int kkstop, int jjstart, int jjstop, int iistart, int iistop) { double zs = FitsCompressm::bscale_; if (FitsCompressm::zscale_) zs = FitsCompressm::zscale_->value(sptr,0); double zz = FitsCompressm::bzero_; if (FitsCompressm::zzero_) zz = FitsCompressm::zzero_->value(sptr,0); int blank = FitsCompressm::blank_; if (FitsCompressm::zblank_) blank = (int)FitsCompressm::zblank_->value(sptr,0); int icnt=0; unsigned char* ibuf = (unsigned char*)((FitsBinColumnArray*)FitsCompressm::compress_)->get(heap, sptr, &icnt); // ibuf can be NULL if (!ibuf || !icnt) return 0; int ocnt = FitsCompressm::tilesize_; int ll=0; switch (bytepix_) { case 1: { char* obuf = new char[ocnt]; if (fits_rdecomp_byte(ibuf, icnt, (unsigned char*)obuf, ocnt, block_)) { internalError("Fitsy++ rice bad inflate result"); return 0; } for (int kk=kkstart; kk::width_*FitsCompressm::height_ + jj*FitsCompressm::width_ + ii; T val = FitsCompressm::getValue(obuf+ll,zs,zz,blank); dest[id] = val; } if (obuf) delete [] obuf; } break; case 2: { short* obuf = new short[ocnt]; if (fits_rdecomp_short(ibuf, icnt, (unsigned short*)obuf, ocnt, block_)) { internalError("Fitsy++ rice bad inflate result"); return 0; } for (int kk=kkstart; kk::width_*FitsCompressm::height_ + jj*FitsCompressm::width_ + ii; T val = FitsCompressm::getValue(obuf+ll,zs,zz,blank); dest[id] = val; } if (obuf) delete [] obuf; } break; case 4: { int* obuf = new int[ocnt]; if (fits_rdecomp(ibuf, icnt, (unsigned int*)obuf, ocnt, block_)) { internalError("Fitsy++ rice bad inflate result"); return 0; } for (int kk=kkstart; kk::width_*FitsCompressm::height_ + jj*FitsCompressm::width_ + ii; T val = FitsCompressm::getValue(obuf+ll,zs,zz,blank); dest[id] = val; } if (obuf) delete [] obuf; } break; } return 1; } template class FitsRicem; template class FitsRicem; template class FitsRicem; template class FitsRicem; template class FitsRicem; template class FitsRicem; template class FitsRicem; saods9/tksao/fitsy++/rice.h000644 000765 000000 00000000741 12705446164 016077 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsrice_h__ #define __fitsrice_h__ #include "compress.h" template class FitsRicem : public FitsCompressm { protected: int block_; int bytepix_; int noisebit_; private: int compressed(T*, char*, char*, int, int, int, int, int, int); public: FitsRicem(FitsFile*); }; #endif saods9/tksao/fitsy++/ricecomp.c000644 000765 000000 00000105613 12536577540 016762 0ustar00joyewheel000000 000000 /* The following code was written by Richard White at STScI and made available for use in CFITSIO in July 1999. These routines were originally contained in 2 source files: rcomp.c and rdecomp.c, and the 'include' file now called ricecomp.h was originally called buffer.h. */ /*----------------------------------------------------------*/ /* */ /* START OF SOURCE FILE ORIGINALLY CALLED rcomp.c */ /* */ /*----------------------------------------------------------*/ /* @(#) rcomp.c 1.5 99/03/01 12:40:27 */ /* rcomp.c Compress image line using * (1) Difference of adjacent pixels * (2) Rice algorithm coding * * Returns number of bytes written to code buffer or * -1 on failure */ #include #include #include static void ffpmsg(const char* str) {} typedef unsigned char Buffer_t; typedef struct { int bitbuffer; /* bit buffer */ int bits_to_go; /* bits to go in buffer */ Buffer_t *start; /* start of buffer */ Buffer_t *current; /* current position in buffer */ Buffer_t *end; /* end of buffer */ } Buffer; #define putcbuf(c,mf) ((*(mf->current)++ = c), 0) /*#include "fitsio2.h"*/ #define FFLOCK #define FFUNLOCK static void start_outputing_bits(Buffer *buffer); static int done_outputing_bits(Buffer *buffer); static int output_nbits(Buffer *buffer, int bits, int n); /* this routine used to be called 'rcomp' (WDP) */ /*---------------------------------------------------------------------------*/ int fits_rcomp(int a[], /* input array */ int nx, /* number of input pixels */ unsigned char *c, /* output buffer */ int clen, /* max length of output */ int nblock) /* coding block size */ { Buffer bufmem, *buffer = &bufmem; /* int bsize; */ int i, j, thisblock; int lastpix, nextpix, pdiff; int v, fs, fsmask, top, fsmax, fsbits, bbits; int lbitbuffer, lbits_to_go; unsigned int psum; double pixelsum, dpsum; unsigned int *diff; /* * Original size of each pixel (bsize, bytes) and coding block * size (nblock, pixels) * Could make bsize a parameter to allow more efficient * compression of short & byte images. */ /* bsize = 4; */ /* nblock = 32; now an input parameter*/ /* * From bsize derive: * FSBITS = # bits required to store FS * FSMAX = maximum value for FS * BBITS = bits/pixel for direct coding */ /* switch (bsize) { case 1: fsbits = 3; fsmax = 6; break; case 2: fsbits = 4; fsmax = 14; break; case 4: fsbits = 5; fsmax = 25; break; default: ffpmsg("rdecomp: bsize must be 1, 2, or 4 bytes"); return(-1); } */ /* move out of switch block, to tweak performance */ fsbits = 5; fsmax = 25; bbits = 1<start = c; buffer->current = c; buffer->end = c+clen; buffer->bits_to_go = 8; /* * array for differences mapped to non-negative values */ diff = (unsigned int *) malloc(nblock*sizeof(unsigned int)); if (diff == (unsigned int *) NULL) { ffpmsg("fits_rcomp: insufficient memory"); return(-1); } /* * Code in blocks of nblock pixels */ start_outputing_bits(buffer); /* write out first int value to the first 4 bytes of the buffer */ if (output_nbits(buffer, a[0], 32) == EOF) { ffpmsg("rice_encode: end of buffer"); free(diff); return(-1); } lastpix = a[0]; /* the first difference will always be zero */ thisblock = nblock; for (i=0; i> 1; for (fs = 0; psum>0; fs++) psum >>= 1; /* * write the codes * fsbits ID bits used to indicate split level */ if (fs >= fsmax) { /* Special high entropy case when FS >= fsmax * Just write pixel difference values directly, no Rice coding at all. */ if (output_nbits(buffer, fsmax+1, fsbits) == EOF) { ffpmsg("rice_encode: end of buffer"); free(diff); return(-1); } for (j=0; jbitbuffer; lbits_to_go = buffer->bits_to_go; for (j=0; j> fs; /* * top is coded by top zeros + 1 */ if (lbits_to_go >= top+1) { lbitbuffer <<= top+1; lbitbuffer |= 1; lbits_to_go -= top+1; } else { lbitbuffer <<= lbits_to_go; putcbuf(lbitbuffer & 0xff,buffer); for (top -= lbits_to_go; top>=8; top -= 8) { putcbuf(0, buffer); } lbitbuffer = 1; lbits_to_go = 7-top; } /* * bottom FS bits are written without coding * code is output_nbits, moved into this routine to reduce overheads * This code potentially breaks if FS>24, so I am limiting * FS to 24 by choice of FSMAX above. */ if (fs > 0) { lbitbuffer <<= fs; lbitbuffer |= v & fsmask; lbits_to_go -= fs; while (lbits_to_go <= 0) { putcbuf((lbitbuffer>>(-lbits_to_go)) & 0xff,buffer); lbits_to_go += 8; } } } /* check if overflowed output buffer */ if (buffer->current > buffer->end) { ffpmsg("rice_encode: end of buffer"); free(diff); return(-1); } buffer->bitbuffer = lbitbuffer; buffer->bits_to_go = lbits_to_go; } } done_outputing_bits(buffer); free(diff); /* * return number of bytes used */ return(buffer->current - buffer->start); } /*---------------------------------------------------------------------------*/ int fits_rcomp_short( short a[], /* input array */ int nx, /* number of input pixels */ unsigned char *c, /* output buffer */ int clen, /* max length of output */ int nblock) /* coding block size */ { Buffer bufmem, *buffer = &bufmem; /* int bsize; */ int i, j, thisblock; /* NOTE: in principle, the following 2 variable could be declared as 'short' but in fact the code runs faster (on 32-bit Linux at least) as 'int' */ int lastpix, nextpix; /* int pdiff; */ short pdiff; int v, fs, fsmask, top, fsmax, fsbits, bbits; int lbitbuffer, lbits_to_go; /* unsigned int psum; */ unsigned short psum; double pixelsum, dpsum; unsigned int *diff; /* * Original size of each pixel (bsize, bytes) and coding block * size (nblock, pixels) * Could make bsize a parameter to allow more efficient * compression of short & byte images. */ /* bsize = 2; */ /* nblock = 32; now an input parameter */ /* * From bsize derive: * FSBITS = # bits required to store FS * FSMAX = maximum value for FS * BBITS = bits/pixel for direct coding */ /* switch (bsize) { case 1: fsbits = 3; fsmax = 6; break; case 2: fsbits = 4; fsmax = 14; break; case 4: fsbits = 5; fsmax = 25; break; default: ffpmsg("rdecomp: bsize must be 1, 2, or 4 bytes"); return(-1); } */ /* move these out of switch block to further tweak performance */ fsbits = 4; fsmax = 14; bbits = 1<start = c; buffer->current = c; buffer->end = c+clen; buffer->bits_to_go = 8; /* * array for differences mapped to non-negative values */ diff = (unsigned int *) malloc(nblock*sizeof(unsigned int)); if (diff == (unsigned int *) NULL) { ffpmsg("fits_rcomp: insufficient memory"); return(-1); } /* * Code in blocks of nblock pixels */ start_outputing_bits(buffer); /* write out first short value to the first 2 bytes of the buffer */ if (output_nbits(buffer, a[0], 16) == EOF) { ffpmsg("rice_encode: end of buffer"); free(diff); return(-1); } lastpix = a[0]; /* the first difference will always be zero */ thisblock = nblock; for (i=0; i> 1; */ psum = ((unsigned short) dpsum ) >> 1; for (fs = 0; psum>0; fs++) psum >>= 1; /* * write the codes * fsbits ID bits used to indicate split level */ if (fs >= fsmax) { /* Special high entropy case when FS >= fsmax * Just write pixel difference values directly, no Rice coding at all. */ if (output_nbits(buffer, fsmax+1, fsbits) == EOF) { ffpmsg("rice_encode: end of buffer"); free(diff); return(-1); } for (j=0; jbitbuffer; lbits_to_go = buffer->bits_to_go; for (j=0; j> fs; /* * top is coded by top zeros + 1 */ if (lbits_to_go >= top+1) { lbitbuffer <<= top+1; lbitbuffer |= 1; lbits_to_go -= top+1; } else { lbitbuffer <<= lbits_to_go; putcbuf(lbitbuffer & 0xff,buffer); for (top -= lbits_to_go; top>=8; top -= 8) { putcbuf(0, buffer); } lbitbuffer = 1; lbits_to_go = 7-top; } /* * bottom FS bits are written without coding * code is output_nbits, moved into this routine to reduce overheads * This code potentially breaks if FS>24, so I am limiting * FS to 24 by choice of FSMAX above. */ if (fs > 0) { lbitbuffer <<= fs; lbitbuffer |= v & fsmask; lbits_to_go -= fs; while (lbits_to_go <= 0) { putcbuf((lbitbuffer>>(-lbits_to_go)) & 0xff,buffer); lbits_to_go += 8; } } } /* check if overflowed output buffer */ if (buffer->current > buffer->end) { ffpmsg("rice_encode: end of buffer"); free(diff); return(-1); } buffer->bitbuffer = lbitbuffer; buffer->bits_to_go = lbits_to_go; } } done_outputing_bits(buffer); free(diff); /* * return number of bytes used */ return(buffer->current - buffer->start); } /*---------------------------------------------------------------------------*/ int fits_rcomp_byte( signed char a[], /* input array */ int nx, /* number of input pixels */ unsigned char *c, /* output buffer */ int clen, /* max length of output */ int nblock) /* coding block size */ { Buffer bufmem, *buffer = &bufmem; /* int bsize; */ int i, j, thisblock; /* NOTE: in principle, the following 2 variable could be declared as 'short' but in fact the code runs faster (on 32-bit Linux at least) as 'int' */ int lastpix, nextpix; /* int pdiff; */ signed char pdiff; int v, fs, fsmask, top, fsmax, fsbits, bbits; int lbitbuffer, lbits_to_go; /* unsigned int psum; */ unsigned char psum; double pixelsum, dpsum; unsigned int *diff; /* * Original size of each pixel (bsize, bytes) and coding block * size (nblock, pixels) * Could make bsize a parameter to allow more efficient * compression of short & byte images. */ /* bsize = 1; */ /* nblock = 32; now an input parameter */ /* * From bsize derive: * FSBITS = # bits required to store FS * FSMAX = maximum value for FS * BBITS = bits/pixel for direct coding */ /* switch (bsize) { case 1: fsbits = 3; fsmax = 6; break; case 2: fsbits = 4; fsmax = 14; break; case 4: fsbits = 5; fsmax = 25; break; default: ffpmsg("rdecomp: bsize must be 1, 2, or 4 bytes"); return(-1); } */ /* move these out of switch block to further tweak performance */ fsbits = 3; fsmax = 6; bbits = 1<start = c; buffer->current = c; buffer->end = c+clen; buffer->bits_to_go = 8; /* * array for differences mapped to non-negative values */ diff = (unsigned int *) malloc(nblock*sizeof(unsigned int)); if (diff == (unsigned int *) NULL) { ffpmsg("fits_rcomp: insufficient memory"); return(-1); } /* * Code in blocks of nblock pixels */ start_outputing_bits(buffer); /* write out first byte value to the first byte of the buffer */ if (output_nbits(buffer, a[0], 8) == EOF) { ffpmsg("rice_encode: end of buffer"); free(diff); return(-1); } lastpix = a[0]; /* the first difference will always be zero */ thisblock = nblock; for (i=0; i> 1; */ psum = ((unsigned char) dpsum ) >> 1; for (fs = 0; psum>0; fs++) psum >>= 1; /* * write the codes * fsbits ID bits used to indicate split level */ if (fs >= fsmax) { /* Special high entropy case when FS >= fsmax * Just write pixel difference values directly, no Rice coding at all. */ if (output_nbits(buffer, fsmax+1, fsbits) == EOF) { ffpmsg("rice_encode: end of buffer"); free(diff); return(-1); } for (j=0; jbitbuffer; lbits_to_go = buffer->bits_to_go; for (j=0; j> fs; /* * top is coded by top zeros + 1 */ if (lbits_to_go >= top+1) { lbitbuffer <<= top+1; lbitbuffer |= 1; lbits_to_go -= top+1; } else { lbitbuffer <<= lbits_to_go; putcbuf(lbitbuffer & 0xff,buffer); for (top -= lbits_to_go; top>=8; top -= 8) { putcbuf(0, buffer); } lbitbuffer = 1; lbits_to_go = 7-top; } /* * bottom FS bits are written without coding * code is output_nbits, moved into this routine to reduce overheads * This code potentially breaks if FS>24, so I am limiting * FS to 24 by choice of FSMAX above. */ if (fs > 0) { lbitbuffer <<= fs; lbitbuffer |= v & fsmask; lbits_to_go -= fs; while (lbits_to_go <= 0) { putcbuf((lbitbuffer>>(-lbits_to_go)) & 0xff,buffer); lbits_to_go += 8; } } } /* check if overflowed output buffer */ if (buffer->current > buffer->end) { ffpmsg("rice_encode: end of buffer"); free(diff); return(-1); } buffer->bitbuffer = lbitbuffer; buffer->bits_to_go = lbits_to_go; } } done_outputing_bits(buffer); free(diff); /* * return number of bytes used */ return(buffer->current - buffer->start); } /*---------------------------------------------------------------------------*/ /* bit_output.c * * Bit output routines * Procedures return zero on success, EOF on end-of-buffer * * Programmer: R. White Date: 20 July 1998 */ /* Initialize for bit output */ static void start_outputing_bits(Buffer *buffer) { /* * Buffer is empty to start with */ buffer->bitbuffer = 0; buffer->bits_to_go = 8; } /*---------------------------------------------------------------------------*/ /* Output N bits (N must be <= 32) */ static int output_nbits(Buffer *buffer, int bits, int n) { /* local copies */ int lbitbuffer; int lbits_to_go; /* AND mask for the right-most n bits */ static unsigned int mask[33] = {0, 0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff, 0x1ff, 0x3ff, 0x7ff, 0xfff, 0x1fff, 0x3fff, 0x7fff, 0xffff, 0x1ffff, 0x3ffff, 0x7ffff, 0xfffff, 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff, 0x1ffffff, 0x3ffffff, 0x7ffffff, 0xfffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff}; /* * insert bits at end of bitbuffer */ lbitbuffer = buffer->bitbuffer; lbits_to_go = buffer->bits_to_go; if (lbits_to_go+n > 32) { /* * special case for large n: put out the top lbits_to_go bits first * note that 0 < lbits_to_go <= 8 */ lbitbuffer <<= lbits_to_go; /* lbitbuffer |= (bits>>(n-lbits_to_go)) & ((1<>(n-lbits_to_go)) & *(mask+lbits_to_go); putcbuf(lbitbuffer & 0xff,buffer); n -= lbits_to_go; lbits_to_go = 8; } lbitbuffer <<= n; /* lbitbuffer |= ( bits & ((1<>(-lbits_to_go)) & 0xff,buffer); lbits_to_go += 8; } buffer->bitbuffer = lbitbuffer; buffer->bits_to_go = lbits_to_go; return(0); } /*---------------------------------------------------------------------------*/ /* Flush out the last bits */ static int done_outputing_bits(Buffer *buffer) { if(buffer->bits_to_go < 8) { putcbuf(buffer->bitbuffer<bits_to_go,buffer); /* if (putcbuf(buffer->bitbuffer<bits_to_go,buffer) == EOF) return(EOF); */ } return(0); } /*---------------------------------------------------------------------------*/ /*----------------------------------------------------------*/ /* */ /* START OF SOURCE FILE ORIGINALLY CALLED rdecomp.c */ /* */ /*----------------------------------------------------------*/ /* @(#) rdecomp.c 1.4 99/03/01 12:38:41 */ /* rdecomp.c Decompress image line using * (1) Difference of adjacent pixels * (2) Rice algorithm coding * * Returns 0 on success or 1 on failure */ /* moved these 'includes' to the beginning of the file (WDP) #include #include */ /*---------------------------------------------------------------------------*/ /* this routine used to be called 'rdecomp' (WDP) */ int fits_rdecomp (unsigned char *c, /* input buffer */ int clen, /* length of input */ unsigned int array[], /* output array */ int nx, /* number of output pixels */ int nblock) /* coding block size */ { /* int bsize; */ int i, k, imax; int nbits, nzero, fs; unsigned char *cend, bytevalue; unsigned int b, diff, lastpix; int fsmax, fsbits, bbits; static int *nonzero_count = (int *)NULL; /* * Original size of each pixel (bsize, bytes) and coding block * size (nblock, pixels) * Could make bsize a parameter to allow more efficient * compression of short & byte images. */ /* bsize = 4; */ /* nblock = 32; now an input parameter */ /* * From bsize derive: * FSBITS = # bits required to store FS * FSMAX = maximum value for FS * BBITS = bits/pixel for direct coding */ /* switch (bsize) { case 1: fsbits = 3; fsmax = 6; break; case 2: fsbits = 4; fsmax = 14; break; case 4: fsbits = 5; fsmax = 25; break; default: ffpmsg("rdecomp: bsize must be 1, 2, or 4 bytes"); return 1; } */ /* move out of switch block, to tweak performance */ fsbits = 5; fsmax = 25; bbits = 1<=0; ) { for ( ; i>=k; i--) nonzero_count[i] = nzero; k = k/2; nzero--; } } FFUNLOCK; /* * Decode in blocks of nblock pixels */ /* first 4 bytes of input buffer contain the value of the first */ /* 4 byte integer value, without any encoding */ lastpix = 0; bytevalue = c[0]; lastpix = lastpix | (bytevalue<<24); bytevalue = c[1]; lastpix = lastpix | (bytevalue<<16); bytevalue = c[2]; lastpix = lastpix | (bytevalue<<8); bytevalue = c[3]; lastpix = lastpix | bytevalue; c += 4; cend = c + clen - 4; b = *c++; /* bit buffer */ nbits = 8; /* number of bits remaining in b */ for (i = 0; i> nbits) - 1; b &= (1< nx) imax = nx; if (fs<0) { /* low-entropy case, all zero differences */ for ( ; i= 0; k -= 8) { b = *c++; diff |= b<0) { b = *c++; diff |= b>>(-k); b &= (1<>1; } else { diff = ~(diff>>1); } array[i] = diff+lastpix; lastpix = array[i]; } } else { /* normal case, Rice coding */ for ( ; i>nbits); b &= (1<>1; } else { diff = ~(diff>>1); } array[i] = diff+lastpix; lastpix = array[i]; } } if (c > cend) { ffpmsg("decompression error: hit end of compressed byte stream"); return 1; } } if (c < cend) { ffpmsg("decompression warning: unused bytes at end of compressed buffer"); } return 0; } /*---------------------------------------------------------------------------*/ /* this routine used to be called 'rdecomp' (WDP) */ int fits_rdecomp_short (unsigned char *c, /* input buffer */ int clen, /* length of input */ unsigned short array[], /* output array */ int nx, /* number of output pixels */ int nblock) /* coding block size */ { int i, imax; /* int bsize; */ int k; int nbits, nzero, fs; unsigned char *cend, bytevalue; unsigned int b, diff, lastpix; int fsmax, fsbits, bbits; static int *nonzero_count = (int *)NULL; /* * Original size of each pixel (bsize, bytes) and coding block * size (nblock, pixels) * Could make bsize a parameter to allow more efficient * compression of short & byte images. */ /* bsize = 2; */ /* nblock = 32; now an input parameter */ /* * From bsize derive: * FSBITS = # bits required to store FS * FSMAX = maximum value for FS * BBITS = bits/pixel for direct coding */ /* switch (bsize) { case 1: fsbits = 3; fsmax = 6; break; case 2: fsbits = 4; fsmax = 14; break; case 4: fsbits = 5; fsmax = 25; break; default: ffpmsg("rdecomp: bsize must be 1, 2, or 4 bytes"); return 1; } */ /* move out of switch block, to tweak performance */ fsbits = 4; fsmax = 14; bbits = 1<=0; ) { for ( ; i>=k; i--) nonzero_count[i] = nzero; k = k/2; nzero--; } } FFUNLOCK; /* * Decode in blocks of nblock pixels */ /* first 2 bytes of input buffer contain the value of the first */ /* 2 byte integer value, without any encoding */ lastpix = 0; bytevalue = c[0]; lastpix = lastpix | (bytevalue<<8); bytevalue = c[1]; lastpix = lastpix | bytevalue; c += 2; cend = c + clen - 2; b = *c++; /* bit buffer */ nbits = 8; /* number of bits remaining in b */ for (i = 0; i> nbits) - 1; b &= (1< nx) imax = nx; if (fs<0) { /* low-entropy case, all zero differences */ for ( ; i= 0; k -= 8) { b = *c++; diff |= b<0) { b = *c++; diff |= b>>(-k); b &= (1<>1; } else { diff = ~(diff>>1); } array[i] = diff+lastpix; lastpix = array[i]; } } else { /* normal case, Rice coding */ for ( ; i>nbits); b &= (1<>1; } else { diff = ~(diff>>1); } array[i] = diff+lastpix; lastpix = array[i]; } } if (c > cend) { ffpmsg("decompression error: hit end of compressed byte stream"); return 1; } } if (c < cend) { ffpmsg("decompression warning: unused bytes at end of compressed buffer"); } return 0; } /*---------------------------------------------------------------------------*/ /* this routine used to be called 'rdecomp' (WDP) */ int fits_rdecomp_byte (unsigned char *c, /* input buffer */ int clen, /* length of input */ unsigned char array[], /* output array */ int nx, /* number of output pixels */ int nblock) /* coding block size */ { int i, imax; /* int bsize; */ int k; int nbits, nzero, fs; unsigned char *cend; unsigned int b, diff, lastpix; int fsmax, fsbits, bbits; static int *nonzero_count = (int *)NULL; /* * Original size of each pixel (bsize, bytes) and coding block * size (nblock, pixels) * Could make bsize a parameter to allow more efficient * compression of short & byte images. */ /* bsize = 1; */ /* nblock = 32; now an input parameter */ /* * From bsize derive: * FSBITS = # bits required to store FS * FSMAX = maximum value for FS * BBITS = bits/pixel for direct coding */ /* switch (bsize) { case 1: fsbits = 3; fsmax = 6; break; case 2: fsbits = 4; fsmax = 14; break; case 4: fsbits = 5; fsmax = 25; break; default: ffpmsg("rdecomp: bsize must be 1, 2, or 4 bytes"); return 1; } */ /* move out of switch block, to tweak performance */ fsbits = 3; fsmax = 6; bbits = 1<=0; ) { for ( ; i>=k; i--) nonzero_count[i] = nzero; k = k/2; nzero--; } } FFUNLOCK; /* * Decode in blocks of nblock pixels */ /* first byte of input buffer contain the value of the first */ /* byte integer value, without any encoding */ lastpix = c[0]; c += 1; cend = c + clen - 1; b = *c++; /* bit buffer */ nbits = 8; /* number of bits remaining in b */ for (i = 0; i> nbits) - 1; b &= (1< nx) imax = nx; if (fs<0) { /* low-entropy case, all zero differences */ for ( ; i= 0; k -= 8) { b = *c++; diff |= b<0) { b = *c++; diff |= b>>(-k); b &= (1<>1; } else { diff = ~(diff>>1); } array[i] = diff+lastpix; lastpix = array[i]; } } else { /* normal case, Rice coding */ for ( ; i>nbits); b &= (1<>1; } else { diff = ~(diff>>1); } array[i] = diff+lastpix; lastpix = array[i]; } } if (c > cend) { ffpmsg("decompression error: hit end of compressed byte stream"); return 1; } } if (c < cend) { ffpmsg("decompression warning: unused bytes at end of compressed buffer"); } return 0; } saods9/tksao/fitsy++/savefits.C000644 000765 000000 00000022036 12764622777 016750 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include using namespace std; #include #include "file.h" #include "util.h" #include "outfile.h" #include "outchannel.h" #include "outsocket.h" int FitsFile::saveFitsPrimHeader(OutFitsStream& str) { // write fake primary header char buf[FTY_BLOCK]; memset(buf,' ',FTY_BLOCK); char* hdu = buf; memcpy(hdu,"SIMPLE = ",10); memcpy(hdu+32-3,"T /",3); hdu += FTY_CARDLEN; memcpy(hdu,"BITPIX = ",10); memcpy(hdu+32-3,"8 /",3); hdu += FTY_CARDLEN; memcpy(hdu,"NAXIS = ",10); memcpy(hdu+32-3,"0 /",3); hdu += FTY_CARDLEN; memcpy(hdu,"END",3); str.write(buf, FTY_BLOCK); return FTY_BLOCK; } int FitsFile::saveFitsHeader(OutFitsStream& str, int depth) { int cnt =0; char buf[FTY_CARDLEN]; memset(buf,' ',FTY_CARDLEN); memcpy(buf,"SIMPLE = ",10); memcpy(buf+32-3,"T /",3); str.write(buf, FTY_CARDLEN); cnt += FTY_CARDLEN; char* ptr = head()->cards()+FTY_CARDLEN; char* end = head()->cards() + head()->headbytes(); while (ptrbitpix() == -16) { memset(buf,' ',FTY_CARDLEN); memcpy(buf,"BITPIX = ",10); memcpy(buf+32-4,"32 /",4); str.write(buf, FTY_CARDLEN); } else if (!strncmp(ptr,"NAXIS ",6)) { memset(buf,' ',FTY_CARDLEN); memcpy(buf,"NAXIS = ",10); if (depth>1) memcpy(buf+32-3,"3 /",3); else if (head()->naxis(1)>1) memcpy(buf+32-3,"2 /",3); else memcpy(buf+32-3,"1 /",3); str.write(buf, FTY_CARDLEN); } else if (!strncmp(ptr,"NAXIS2",6)) { str.write(ptr, FTY_CARDLEN); if (depth>1) { ostringstream ddstr; ddstr << depth << " /" << ends; const char* ddptr = dupstr(ddstr.str().c_str()); int ll = strlen(ddptr); memset(buf,' ',FTY_CARDLEN); memcpy(buf,"NAXIS3 = ",10); memcpy(buf+32-ll, ddptr, ll); str.write(buf, FTY_CARDLEN); cnt += FTY_CARDLEN; delete [] ddptr; } } else if (!strncmp(ptr,"NAXIS3",6)) { // skip cnt -= FTY_CARDLEN; } else if (!strncmp(ptr,"NAXIS4",6)) { // skip cnt -= FTY_CARDLEN; } else if (!strncmp(ptr,"NAXIS5",6)) { // skip cnt -= FTY_CARDLEN; } else if (!strncmp(ptr,"PCOUNT",6)) { // skip cnt -= FTY_CARDLEN; } else if (!strncmp(ptr,"GCOUNT",6)) { // skip cnt -= FTY_CARDLEN; } else if (!strncmp(ptr,"END ",6)) { // skip cnt -= FTY_CARDLEN; } else str.write(ptr, FTY_CARDLEN); ptr+=FTY_CARDLEN; cnt += FTY_CARDLEN; } // final END memset(buf,' ',FTY_CARDLEN); memcpy(buf,"END",3); str.write(buf, FTY_CARDLEN); cnt += FTY_CARDLEN; cnt += saveFitsPad(str,cnt,' '); return cnt; } int FitsFile::saveFitsXtHeader(OutFitsStream& str, int depth) { // write xtension header // the header may be an xtension, or primary, so lets force a // first line of 'SIMPLE' and then write the rest of the header int cnt =0; char buf[FTY_CARDLEN]; memset(buf,' ',FTY_CARDLEN); memcpy(buf,"XTENSION= 'IMAGE '",20); str.write(buf, FTY_CARDLEN); cnt += FTY_CARDLEN; char* ptr = head()->cards()+FTY_CARDLEN; char* end = head()->cards() + head()->headbytes(); while (ptrbitpix() == -16) { memset(buf,' ',FTY_CARDLEN); memcpy(buf,"BITPIX = ",10); memcpy(buf+32-4,"32 /",4); str.write(buf, FTY_CARDLEN); } else if (!strncmp(ptr,"NAXIS ",6)) { memset(buf,' ',FTY_CARDLEN); memcpy(buf,"NAXIS = ",10); if (depth>1) memcpy(buf+32-3,"3 /",3); else if (head()->naxis(1)>1) memcpy(buf+32-3,"2 /",3); else memcpy(buf+32-3,"1 /",3); str.write(buf, FTY_CARDLEN); } else if (!strncmp(ptr,"NAXIS2",6)) { str.write(ptr, FTY_CARDLEN); if (depth>1) { ostringstream ddstr; ddstr << depth << " /" << ends; const char* ddptr = ddstr.str().c_str(); int ll = strlen(ddptr); memset(buf,' ',FTY_CARDLEN); memcpy(buf,"NAXIS3 = ",10); memcpy(buf+32-ll, ddptr, ll); str.write(buf, FTY_CARDLEN); cnt += FTY_CARDLEN; } memset(buf,' ',FTY_CARDLEN); memcpy(buf,"PCOUNT = ",10); memcpy(buf+32-3,"0 /",3); str.write(buf, FTY_CARDLEN); cnt += FTY_CARDLEN; memset(buf,' ',FTY_CARDLEN); memcpy(buf,"GCOUNT = ",10); memcpy(buf+32-3,"1 /",3); str.write(buf, FTY_CARDLEN); cnt += FTY_CARDLEN; } else if (!strncmp(ptr,"NAXIS3",6)) { // skip cnt -= FTY_CARDLEN; } else if (!strncmp(ptr,"NAXIS4",6)) { // skip cnt -= FTY_CARDLEN; } else if (!strncmp(ptr,"NAXIS5",6)) { // skip cnt -= FTY_CARDLEN; } else if (!strncmp(ptr,"PCOUNT",6)) { // skip cnt -= FTY_CARDLEN; } else if (!strncmp(ptr,"GCOUNT",6)) { // skip cnt -= FTY_CARDLEN; } else if (!strncmp(ptr,"END ",6)) { // skip cnt -= FTY_CARDLEN; } else str.write(ptr, FTY_CARDLEN); ptr+=FTY_CARDLEN; cnt += FTY_CARDLEN; } // final END memset(buf,' ',FTY_CARDLEN); memcpy(buf,"END",3); str.write(buf, FTY_CARDLEN); cnt += FTY_CARDLEN; cnt += saveFitsPad(str,cnt,' '); return cnt; } int FitsFile::saveFits(OutFitsStream& str) { FitsImageHDU* hdu = (FitsImageHDU*)(head()->hdu()); if (hdu->bitpix() != -16) { switch (endian_) { case BIG: str.write((char*)data(), hdu->imgbytes()); break; case LITTLE: str.writeSwap((char*)data(), hdu->imgbytes(), head()->bitpix()); break; case NATIVE: break; } return hdu->imgbytes(); } // convert bitpix=-16 to bitpix=32 int nx = head()->naxis(0); int ny = head()->naxis(1); int ss = nx*ny; int* dest = new int[ss]; for(int jj=0; jj 0 ) str.write(buf, npad); return npad; } int FitsFile::saveFitsTable(OutFitsStream& str) { int cnt =0; // primary header str.write(primary()->cards(), primary()->headbytes()); cnt += primary()->headbytes(); // now, ext header str.write(head()->cards(), head()->headbytes()); cnt += head()->headbytes(); // write valid data // our data may be short (mmap or bad fits), so write valid data // then write the pad, becareful with arch, if array switch (endian_) { case BIG: str.write((char*)data(), head()->allbytes()); break; case LITTLE: str.writeSwap((char*)data(), head()->allbytes(), head()->bitpix()); break; case NATIVE: break; } cnt += head()->allbytes(); // we may need to add a buffer to round out to block size int diff = head()->padbytes(); if (diff>0) { char* buf = new char[diff]; memset(buf,'\0',diff); str.write(buf, diff); delete [] buf; } cnt += head()->padbytes(); return cnt; } int FitsFile::saveFitsIISHeader(OutFitsStream& str) { int cnt =0; char buf[FTY_CARDLEN]; char* ptr = head()->cards(); char* end = head()->cards() + head()->headbytes(); while (ptrhdu()); unsigned char* src = (unsigned char*)data(); int size = hdu->imgbytes(); float* dest = new float[size]; for (int ii=0; ii 200) dest[ii] = NAN; else dest[ii] = ((src[ii]-1) * (iisz[1]-iisz[0]))/199 + iisz[0]; if (!lsb()) str.write((char*)dest, size*sizeof(float)); else str.writeSwap((char*)dest, size*sizeof(float), -32); if (dest) delete [] dest; return size*sizeof(float); } int FitsFile::saveArray(OutFitsStream& str, ArchType which) { // only save one slice size_t size = head_->naxis(0)*head_->naxis(1)*abs(head_->bitpix()/8); int bitpix = head_->bitpix(); if (which == endian_) str.write((char*)data(), size); else str.writeSwap((char*)data(), size, bitpix); return size; } saods9/tksao/fitsy++/share.C000644 000765 000000 00000003501 12705446165 016210 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "share.h" #if (HAVE_SYS_SHM_H && !__WIN32) #include #include #include FitsShareID::FitsShareID(int shmid, const char* filter) { parse(filter); if (!valid_) return; // reset valid_ =0; // find size struct shmid_ds info; if (shmctl(shmid, IPC_STAT, &info)) { internalError("Fitsy++ share shctl failed"); return; } mapsize_ = info.shm_segsz; // Attach the memory segment if ((long)(mapdata_ = (char*)shmat(shmid, 0, SHM_RDONLY)) == -1) { internalError("Fitsy++ share shctl failed"); return; } // so far, so good valid_ = 1; } FitsShareID::~FitsShareID() { shmdt(mapdata_); } FitsShareKey::FitsShareKey(int key, const char* filter) { parse(filter); if (!valid_) return; // reset valid_ =0; // get shmid int shmid; if ((shmid = shmget(key, 0, 0)) < 0) { internalError("Fitsy++ share shmget failed"); return; } // find size struct shmid_ds info; if (shmctl(shmid, IPC_STAT, &info)) { internalError("Fitsy++ share shctl failed"); return; } mapsize_ = info.shm_segsz; // Attach the memory segment if ((long)(mapdata_ = (char*)shmat(shmid, 0, SHM_RDONLY)) == -1) { internalError("Fitsy++ share shmat failed"); return; } // so far, so good valid_ = 1; } FitsShareKey::~FitsShareKey() { if (mapdata_>0) shmdt(mapdata_); } #else FitsShareID::FitsShareID(int shmid, const char* filter) { // shared memory not supported valid_ = 0; } FitsShareID::~FitsShareID() {} FitsShareKey::FitsShareKey(int key, const char* filter) { // shared memory not supported valid_ = 0; } FitsShareKey::~FitsShareKey() {} #endif saods9/tksao/fitsy++/share.h000644 000765 000000 00000005226 12705446165 016263 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsshare_h__ #define __fitsshare_h__ #include "map.h" class FitsShareID : public virtual FitsMap { public: FitsShareID(int, const char*); virtual ~FitsShareID(); }; class FitsShareKey : public virtual FitsMap { public: FitsShareKey(int, const char*); virtual ~FitsShareKey(); }; class FitsFitsShare : public virtual FitsMap, public FitsFitsMap { public: FitsFitsShare(ScanMode mode) : FitsMap(), FitsFitsMap(mode) {} }; class FitsFitsNextShare : public FitsFitsNextMap { public: FitsFitsNextShare(FitsFile* prev) : FitsFitsNextMap(prev) {} }; class FitsArrShare : public virtual FitsMap, public FitsArrMap { public: FitsArrShare() : FitsMap(), FitsArrMap() {} }; class FitsNRRDShare : public virtual FitsMap, public FitsNRRDMap { public: FitsNRRDShare() : FitsMap(), FitsNRRDMap() {} }; class FitsMosaicShare : public virtual FitsMap, public FitsMosaicMap { public: FitsMosaicShare() : FitsMap(), FitsMosaicMap() {} }; class FitsMosaicNextShare : public FitsMosaicNextMap { public: FitsMosaicNextShare(FitsFile* prev) : FitsMosaicNextMap(prev) {} }; class FitsFitsShareID : public FitsShareID, public FitsFitsShare { public: FitsFitsShareID(int shmid, const char* filter, ScanMode mode) : FitsShareID(shmid, filter), FitsFitsShare(mode) {} }; class FitsFitsShareKey : public FitsShareKey, public FitsFitsShare { public: FitsFitsShareKey(int key, const char* filter, ScanMode mode) : FitsShareKey(key, filter), FitsFitsShare(mode) {} }; class FitsArrShareID : public FitsShareID, public FitsArrShare { public: FitsArrShareID(int shmid, const char* filter) : FitsShareID(shmid, filter), FitsArrShare() {} }; class FitsArrShareKey : public FitsShareKey, public FitsArrShare { public: FitsArrShareKey(int key, const char* filter) : FitsShareKey(key, filter), FitsArrShare() {} }; class FitsNRRDShareID : public FitsShareID, public FitsNRRDShare { public: FitsNRRDShareID(int shmid, const char* filter) : FitsShareID(shmid, filter), FitsNRRDShare() {} }; class FitsNRRDShareKey : public FitsShareKey, public FitsNRRDShare { public: FitsNRRDShareKey(int key, const char* filter) : FitsShareKey(key, filter), FitsNRRDShare() {} }; class FitsMosaicShareID : public FitsShareID, public FitsMosaicShare { public: FitsMosaicShareID(int shmid) : FitsShareID(shmid, ""), FitsMosaicShare() {} }; class FitsMosaicShareKey : public FitsShareKey, public FitsMosaicShare { public: FitsMosaicShareKey(int key) : FitsShareKey(key, ""), FitsMosaicShare() {} }; #endif saods9/tksao/fitsy++/shmload.C000644 000765 000000 00000003314 12705446165 016537 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include #include #include #include #include #include #include #include using namespace std; main(int argc, char* argv[]) { int q=0; // check for args if (argc != 2 && argc != 3){ cerr << "usage: shmload [-q] fits" << endl; exit(1); } if (!strncmp(argv[1],"-q",2)) q=1; // find the file char* fn = argv[1+q]; struct stat statb; if (stat(fn, &statb) < 0){ cerr << "can't find file: " << fn << endl; exit(1); } size_t fnsize = statb.st_size; if (!q) cerr << fn << " size " << fnsize << endl; // calculate shmsize size_t shmsize = ((fnsize/2880)+1)*2880; // get shmid int shmid = shmget(IPC_PRIVATE, shmsize, IPC_CREAT|0666); if (shmid == -1) { // give up, its bad perror("shmid is bad"); exit(1); } if (!q) cerr << "shmid " << shmid << endl; else cout << shmid << endl; // get shm stats struct shmid_ds sbuf; if (shmctl(shmid, IPC_STAT, &sbuf)<0) { perror("shmctl is bad"); exit(1); } if (!q) cerr << "size of shared segment: " << sbuf.shm_segsz << endl; char* addr = (char*)shmat(shmid, NULL, 0); // if (addr == -1){ // perror("shmat failed"); // exit(1); // } // load image ifstream fd(fn); fd.read(addr,fnsize); if (!q) { cerr << fd.gcount() << " bytes read" << endl; if (fd.gcount() != fnsize) cerr << "File read error" << endl; else cerr << "success!" << endl; } } saods9/tksao/fitsy++/smap.C000644 000765 000000 00000007137 12705446165 016057 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "smap.h" #include "head.h" FitsSMap::FitsSMap() { hmapdata_ = NULL; hmapsize_ = 0; mapdata_ = NULL; mapsize_ = 0; } FitsFitsSMap::FitsFitsSMap(FitsHead::Memory mem) { if (!valid_) return; // simple check for fits file if (strncmp(hmapdata_,"SIMPLE ",8) && strncmp(hmapdata_,"XTENSION",8)) { data_ = NULL; dataSize_ = 0; dataSkip_ = 0; valid_ = 0; } head_ = new FitsHead(hmapdata_, hmapsize_, mem); if (head_->isValid()) { data_ = mapdata_; dataSize_ = mapsize_; dataSkip_ = 0; inherit_ = head_->inherit(); valid_ = 1; return; } else { if (manageHead_ && head_) delete head_; head_ = NULL; if (managePrimary_ && primary_) delete primary_; primary_ = NULL; data_ = NULL; dataSize_ = 0; dataSkip_ = 0; valid_ = 0; } } FitsENVISMap::FitsENVISMap() { if (!valid_) return; // reset valid_ = 0; if (hmapsize_<=0 || hmapsize_>32768) return; // header { char* buf = new char[hmapsize_+1]; char* dptr = buf; char* sptr = hmapdata_; int cnt =0; do { *dptr++ = *sptr++; cnt++; } while (cntparseENVI(str); delete [] buf; if (!valid_) return; // reset valid_ =0; } // check to see if we have a nonzero width, height, and bitpix if (!validParams()) return; size_t ss = (size_t)pWidth_*pHeight_*pDepth_*abs(pBitpix_)/8; // sometimes, offset is not correct if (pSkip_ == 0) { if (mapsize_ > ss) pSkip_ = mapsize_-ss; } // check to see if dimensions equal mapped space if (ss+pSkip_ > mapsize_) return; // skip to start of data data_ = mapdata_ + pSkip_; dataSize_ = mapsize_; dataSkip_ = pSkip_; // new header head_ = new FitsHead(pWidth_, pHeight_, pDepth_, pBitpix_); if (!head_->isValid()) return; // WCS? if (pCRPIX3_ || pCRVAL3_ || pCDELT3_) { head_->appendString("CTYPE1","LINEAR", NULL); head_->appendReal("CRPIX1",1, 9, NULL); head_->appendReal("CRVAL1",1, 9, NULL); head_->appendReal("CDELT1",1, 9, NULL); head_->appendString("CTYPE2","LINEAR", NULL); head_->appendReal("CRPIX2",1, 9, NULL); head_->appendReal("CRVAL2",1, 9, NULL); head_->appendReal("CDELT2",1, 9, NULL); head_->appendString("CTYPE3","WAVELENGTH", NULL); head_->appendReal("CRPIX3",pCRPIX3_, 9, NULL); head_->appendReal("CRVAL3",pCRVAL3_, 9, NULL); head_->appendReal("CDELT3",pCDELT3_, 9, NULL); } // do we byteswap? setByteSwap(); // so far, so good valid_ = 1; } FitsFitsNextSMap::FitsFitsNextSMap(FitsFile* p) { FitsSMap* prev = (FitsSMap*)p; primary_ = prev->primary(); managePrimary_ = 0; head_ = prev->head(); manageHead_ = 0; FitsImageHDU* hdu = (FitsImageHDU*)head_->hdu(); data_ = (char*)prev->data() + hdu->imgbytes(); dataSize_ = 0; dataSkip_ = 0; ext_ = prev->ext(); inherit_ = prev->inherit(); byteswap_ = prev->byteswap(); endian_ = prev->endian(); valid_ = 1; pcoord_ = prev->pcoord(); pxvalid_ = prev->pxvalid(); pxmin_ = prev->pxmin(); pxmax_ = prev->pxmax(); pyvalid_ = prev->pyvalid(); pymin_ = prev->pymin(); pymax_ = prev->pymax(); pzvalid_ = prev->pzvalid(); pzmin_ = prev->pzmin(); pzmax_ = prev->pzmax(); pbvalid_ = prev->pbvalid(); pblock_ = prev->pblock(); mapdata_ = prev->mapdata(); mapsize_ = prev->mapsize(); return; } saods9/tksao/fitsy++/smap.h000644 000765 000000 00000001371 12705446165 016116 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitssmap_h__ #define __fitssmap_h__ #include "file.h" class FitsSMap : public FitsFile { protected: char* hmapdata_; size_t hmapsize_; char* mapdata_; size_t mapsize_; public: FitsSMap(); virtual ~FitsSMap() {} char* mapdata() {return mapdata_;} size_t mapsize() {return mapsize_;} }; class FitsFitsSMap : public virtual FitsSMap { public: FitsFitsSMap(FitsHead::Memory); }; class FitsENVISMap : public virtual FitsSMap { public: FitsENVISMap(); }; class FitsFitsNextSMap : public FitsSMap { public: FitsFitsNextSMap(FitsFile* prev); }; #endif saods9/tksao/fitsy++/smmap.C000644 000765 000000 00000003307 12705446165 016227 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "smmap.h" #ifndef __WIN32 #include #include #include #include #include FitsSMMap::FitsSMMap(const char* hdr, const char* fn) { // reset valid_ =0; // header { // Map the header. int file = open(hdr, O_RDONLY); if (file == -1) return; struct stat info; if (fstat(file, &info) < 0) return; // check for empty file if (info.st_size == 0) return; // map it hmapsize_ = info.st_size; hmapdata_ = (char*)mmap(NULL, hmapsize_, PROT_READ, MAP_SHARED, file, 0); // close the file close(file); // are we valid? if ((long)hmapdata_ == -1) return; } // data { // parse the fn and options parse(fn); if (!valid_) return; // reset valid_ =0; if (!pName_) return; // Map the file. int file = open(pName_, O_RDONLY); if (file == -1) return; struct stat info; if (fstat(file, &info) < 0) return; // check for empty file if (info.st_size == 0) return; // map it mapsize_ = info.st_size; mapdata_ = (char*)mmap(NULL, mapsize_, PROT_READ, MAP_SHARED, file, 0); // close the file close(file); // are we valid? if ((long)mapdata_ == -1) return; } // so far, so good valid_ = 1; } FitsSMMap::~FitsSMMap() { if (mapdata_>0) munmap((caddr_t)mapdata_, mapsize_); } #else FitsSMMap::FitsSMMap(const char* hdr, const char* fn) { valid_ =0; } FitsSMMap::~FitsSMMap() {} #endif saods9/tksao/fitsy++/smmap.h000644 000765 000000 00000001503 12705446165 016270 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitssmmap_h__ #define __fitssmmap_h__ #include "smap.h" class FitsSMMap : public virtual FitsSMap { public: FitsSMMap(const char*, const char*); virtual ~FitsSMMap(); }; class FitsFitsSMMap : public FitsSMMap, public FitsFitsSMap { public: FitsFitsSMMap(const char* hdr, const char* fn) : FitsSMMap(hdr,fn), FitsFitsSMap(FitsHead::MMAP) {} }; class FitsENVISMMap : public FitsSMMap, public FitsENVISMap { public: FitsENVISMMap(const char* hdr, const char* fn) : FitsSMMap(hdr,fn), FitsENVISMap() {} }; class FitsFitsNextSMMap : public FitsFitsNextSMap { public: FitsFitsNextSMMap(FitsFile* prev) : FitsFitsNextSMap(prev) {} }; #endif saods9/tksao/fitsy++/socket.C000644 000765 000000 00000000654 12705446165 016404 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "socket.h" #ifndef __WIN32 FitsSocket::FitsSocket(int s, const char* ext) { parse(ext); if (!valid_) return; stream_ = s; valid_ = stream_ ? 1 : 0; } #else FitsSocket::FitsSocket(int s, const char* ext) { valid_ = 0; } #endif saods9/tksao/fitsy++/socket.h000644 000765 000000 00000002672 12705446165 016453 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitssocket_h__ #define __fitssocket_h__ #include "strm.h" class FitsSocket : public virtual FitsStream { public: FitsSocket(int, const char*); }; class FitsFitsSocket : public FitsSocket, public FitsFitsStream { public: FitsFitsSocket(int s, const char* ext, ScanMode mode, FlushMode flush) : FitsSocket(s, ext), FitsFitsStream(mode, flush) {} }; class FitsFitsNextSocket : public FitsFitsNextStream { public: FitsFitsNextSocket(FitsFile* prev) : FitsFitsNextStream(prev) {} }; class FitsArrSocket : public FitsSocket, public FitsArrStream { public: FitsArrSocket(int s, const char* ext, FlushMode flush) : FitsSocket(s, ext), FitsArrStream(flush) {} }; class FitsNRRDSocket : public FitsSocket, public FitsNRRDStream { public: FitsNRRDSocket(int s, const char* ext, FlushMode flush) : FitsSocket(s, ext), FitsNRRDStream(flush) {} }; class FitsMosaicSocket : public FitsSocket, public FitsMosaicStream { public: FitsMosaicSocket(int s, FlushMode flush) : FitsSocket(s, ""), FitsMosaicStream(flush) {} }; class FitsMosaicNextSocket : public FitsMosaicNextStream { public: FitsMosaicNextSocket(FitsFile* prev, FlushMode flush) : FitsMosaicNextStream(prev, flush) {} }; #endif saods9/tksao/fitsy++/socketgz.C000644 000765 000000 00000006563 12705446165 016752 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "socketgz.h" #ifndef __WIN32 #include #include #define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ #define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ #define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ #define ORIG_NAME 0x08 /* bit 3 set: original file name present */ #define COMMENT 0x10 /* bit 4 set: file comment present */ #define RESERVED 0xE0 /* bits 5..7: reserved */ FitsSocketGZ::FitsSocketGZ(int s, const char* ext) { parse(ext); if (!valid_) return; // reset valid_ =0; if (!s) return; stream_ = new gzStream_; stream_->id = s; stream_->transparent = 0; memset(stream_->header,'\0',2); stream_->useHeader = 0; stream_->buf = new unsigned char[B4KB]; // magic bytes if (recv(stream_->id , stream_->header, 2, 0) != 2) { internalError("Fitsy++ socketgz can't read magic bytes in header"); return; } if (stream_->header[0] != 0x1f || stream_->header[1] != 0x8b) { stream_->transparent = 1; stream_->useHeader = 1; } else { ((z_stream*)stream_)->next_in = NULL; ((z_stream*)stream_)->avail_in = 0; ((z_stream*)stream_)->zalloc = NULL; ((z_stream*)stream_)->zfree = NULL; ((z_stream*)stream_)->opaque = NULL; if (inflateInit2((z_stream*)stream_, -MAX_WBITS) != Z_OK) { internalError("Fitsy++ socketgz inflateInit error"); return; } unsigned char buf[128]; // method/flags if (recv(stream_->id , buf, 2, 0) != 2) { internalError("Fitsy++ socketgz can't read method/flags bytes in header"); return; } int method = buf[0]; int flags = buf[1]; if (method != Z_DEFLATED || (flags & RESERVED) != 0) { internalError("Fitsy++ socketgz bad method/flags"); return; } // Discard time, xflags and OS code if (recv(stream_->id , buf, 6, 0) != 6) { internalError("Fitsy++ socketgz can't read time/xflags/os bytes in header"); return; } // skip the extra field if ((flags & EXTRA_FIELD) != 0) { if (recv(stream_->id , buf, 2, 0) != 2) { internalError("Fitsy++ socketgz can't read extra field length bytes in header"); return; } int len = buf[0]; len += buf[1]<<8; if (recv(stream_->id , buf, len, 0) != len) { internalError("Fitsy++ socketgz can't read extra field bytes in header"); return; } } // skip the original file name if ((flags & ORIG_NAME) != 0) { while (recv(stream_->id , buf, 1, 0) == 1 && buf[0] != 0) ; } // skip the .gz file comment if ((flags & COMMENT) != 0) { while (recv(stream_->id , buf, 1, 0) == 1 && buf[0] != 0) ; } // skip the header crc if ((flags & HEAD_CRC) != 0) { if (recv(stream_->id , buf, 2, 0) != 2) { internalError("Fitsy++ socketgz can't read header crc bytes in header"); return; } } } if (DebugGZ) cerr << "inflateInt Complete" << endl; // so far, so good valid_ = 1; } FitsSocketGZ::~FitsSocketGZ() { if (stream_->buf) delete [] stream_->buf; if (stream_) delete stream_; stream_ = NULL; } #else FitsSocketGZ::FitsSocketGZ(int s, const char* ext) { valid_ =0; } FitsSocketGZ::~FitsSocketGZ() {} #endif saods9/tksao/fitsy++/socketgz.h000644 000765 000000 00000002572 12705446165 017013 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitssocketgz_h__ #define __fitssocketgz_h__ #include "strm.h" class FitsSocketGZ : public virtual FitsStream { public: FitsSocketGZ(int, const char*); virtual ~FitsSocketGZ(); }; class FitsFitsSocketGZ : public FitsSocketGZ, public FitsFitsStream { public: FitsFitsSocketGZ(int s, const char* ext, ScanMode mode, FlushMode flush) : FitsSocketGZ(s, ext), FitsFitsStream(mode, flush) {} }; class FitsFitsNextSocketGZ : public FitsFitsNextStream { public: FitsFitsNextSocketGZ(FitsFile* prev) : FitsFitsNextStream(prev) {} }; class FitsArrSocketGZ : public FitsSocketGZ, public FitsArrStream { public: FitsArrSocketGZ(int s, const char* ext, FlushMode flush) : FitsSocketGZ(s, ext), FitsArrStream(flush) {} }; class FitsMosaicSocketGZ : public FitsSocketGZ, public FitsMosaicStream { public: FitsMosaicSocketGZ(int s, FlushMode flush) : FitsSocketGZ(s, ""), FitsMosaicStream(flush) {} }; class FitsMosaicNextSocketGZ : public FitsMosaicNextStream { public: FitsMosaicNextSocketGZ(FitsFile* prev, FlushMode flush) : FitsMosaicNextStream(prev, flush) {} }; #endif saods9/tksao/fitsy++/sshare.C000644 000765 000000 00000005475 12705446165 016407 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "sshare.h" #if (HAVE_SYS_SHM_H && !__WIN32) #include #include #include FitsSShareID::FitsSShareID(int hdrid, int shmid, const char* filter) { // reset valid_ =0; { // find size struct shmid_ds info; if (shmctl(hdrid, IPC_STAT, &info)) { internalError("Fitsy++ sshare shctl failed"); return; } hmapsize_ = info.shm_segsz; // Attach the memory segment if ((long)(hmapdata_ = (char*)shmat(hdrid, 0, SHM_RDONLY)) == -1) { internalError("Fitsy++ sshare shmat failed"); return; } } { parse(filter); if (!valid_) return; // reset valid_ =0; // find size struct shmid_ds info; if (shmctl(shmid, IPC_STAT, &info)) { internalError("Fitsy++ sshare shctl failed"); return; } mapsize_ = info.shm_segsz; // Attach the memory segment if ((long)(mapdata_ = (char*)shmat(shmid, 0, SHM_RDONLY)) == -1) { internalError("Fitsy++ sshare shmat failed"); return; } } // so far so good valid_ = 1; } FitsSShareID::~FitsSShareID() { shmdt(mapdata_); } FitsSShareKey::FitsSShareKey(int hdr, int key, const char* filter) { // reset valid_ =0; { // get shmid int shmid; if ((shmid = shmget(hdr, 0, 0)) < 0) { internalError("Fitsy++ sshare shmget failed"); return; } // find size struct shmid_ds info; if (shmctl(shmid, IPC_STAT, &info)) { internalError("Fitsy++ sshare shctl failed"); return; } mapsize_ = info.shm_segsz; // Attach the memory segment if ((long)(mapdata_ = (char*)shmat(shmid, 0, SHM_RDONLY)) == -1) { internalError("Fitsy++ sshare shmat failed"); return; } } { parse(filter); if (!valid_) return; // reset valid_ =0; // get shmid int shmid; if ((shmid = shmget(key, 0, 0)) < 0) { internalError("Fitsy++ sshare shmget failed"); return; } // find size struct shmid_ds info; if (shmctl(shmid, IPC_STAT, &info)) { internalError("Fitsy++ sshare shmctl failed"); return; } mapsize_ = info.shm_segsz; // Attach the memory segment if ((long)(mapdata_ = (char*)shmat(shmid, 0, SHM_RDONLY)) == -1) { internalError("Fitsy++ sshare shmat failed"); return; } } // so far so good valid_ = 1; } FitsSShareKey::~FitsSShareKey() { shmdt(mapdata_); } #else FitsSShareID::FitsSShareID(int hdrid, int shmid, const char* filter) { valid_ = 0; } FitsSShareID::~FitsSShareID() {} FitsSShareKey::FitsSShareKey(int hdr, int key, const char* filter) { valid_ = 0; } FitsSShareKey::~FitsSShareKey() {} #endif saods9/tksao/fitsy++/sshare.h000644 000765 000000 00000002237 12705446165 016445 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitssshare_h__ #define __fitssshare_h__ #include "smap.h" class FitsSShareID : public virtual FitsSMap { public: FitsSShareID(int, int, const char*); virtual ~FitsSShareID(); }; class FitsSShareKey : public virtual FitsSMap { public: FitsSShareKey(int, int, const char*); virtual ~FitsSShareKey(); }; class FitsFitsSShare : public virtual FitsSMap, public FitsFitsSMap { public: FitsFitsSShare() : FitsSMap(), FitsFitsSMap(FitsHead::SHARE) {} }; class FitsFitsNextSShare : public FitsFitsNextSMap { public: FitsFitsNextSShare(FitsFile* prev) : FitsFitsNextSMap(prev) {} }; class FitsFitsSShareID : public FitsSShareID, public FitsFitsSShare { public: FitsFitsSShareID(int hdrid, int shmid, const char* filter) : FitsSShareID(hdrid, shmid, filter), FitsFitsSShare() {} }; class FitsFitsSShareKey : public FitsSShareKey, public FitsFitsSShare { public: FitsFitsSShareKey(int hdr, int key, const char* filter) : FitsSShareKey(hdr, key, filter), FitsFitsSShare() {} }; #endif saods9/tksao/fitsy++/strm.C000644 000765 000000 00000041772 12705446165 016107 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #ifndef __WIN32 #include #endif #include #include "strm.h" #include "util.h" template FitsStream::FitsStream() { stream_ =0; flush_ = NOFLUSH; dataManage_ = 0; } template FitsStream::~FitsStream() { if (dataManage_ && data_) delete [] (T*)data_; } // FILE* template <> size_t FitsStream::read(char* where, size_t size) { // size_t size is unsigned long long ss =size; size_t rr = 0; int r = 0; do { r = fread(where+rr, 1, (ss>B1MB) ? B1MB : ss, stream_); ss -= r; rr += r; } while (r>0 && rr void FitsStream::close() { fclose(stream_); } // Socket #ifndef __WIN32 template <> size_t FitsStream::read(char* where, size_t size) { // size_t size is unsigned long long ss =size; size_t rr =0; int r; do { r = recv(stream_ , where+rr, (ss>B4KB) ? B4KB : ss, 0); ss -= r; rr += r; } while (r>0 && rr size_t FitsStream::read(char* where, size_t size) { return 0; } #endif template <> void FitsStream::close() {} // gzStream #ifndef __WIN32 template <> size_t FitsStream::read(char* where, size_t size) { // size_t size is unsigned long long ss =size; size_t rr = 0; int r = 0; if (stream_->transparent) { if (stream_->useHeader) { memcpy(where,stream_->header,2); ss -= 2; rr += 2; stream_->useHeader = 0; } do { r = recv(stream_->id , where+rr, (ss>B4KB) ? B4KB : ss, 0); ss -= r; rr += r; } while (r>0 && rravail_out = size; ((z_stream*)stream_)->next_out = (unsigned char*)where; if (DebugGZ) cerr << "***read init " << ((z_stream*)stream_)->avail_out << " bytes" << endl; do { if (((z_stream*)stream_)->avail_in == 0) { ((z_stream*)stream_)->next_in = stream_->buf; int aa = recv(stream_->id , stream_->buf, B4KB, 0); if (aa<0) return rr; ((z_stream*)stream_)->avail_in = aa; if (DebugGZ) cerr << " read from socket " << aa << " bytes" << endl; } if (DebugGZ) cerr << " inflate Start: avail_in " << ((z_stream*)stream_)->avail_in << " avail_out " << ((z_stream*)stream_)->avail_out << endl; int before = ((z_stream*)stream_)->avail_out; int result = inflate(((z_stream*)stream_), Z_NO_FLUSH); r = before - ((z_stream*)stream_)->avail_out; rr += r; switch (result) { case Z_OK: if (DebugGZ) cerr << " inflate OK: avail_in " << ((z_stream*)stream_)->avail_in << " avail_out " << ((z_stream*)stream_)->avail_out << endl; break; case Z_STREAM_END: if (DebugGZ) cerr << " inflate STRM_END: avail_in " << ((z_stream*)stream_)->avail_in << " avail_out " << ((z_stream*)stream_)->avail_out << " total_in " << ((z_stream*)stream_)->total_in << " total_out " << ((z_stream*)stream_)->total_out << endl; return rr; default: internalError("Fitsy++ strm inflate error"); return rr; } } while (r>0 && rr void FitsStream::close() { if (!stream_->transparent) { if (inflateEnd((z_stream*)stream_) != Z_OK) internalError("Fitsy++ strm inflateEnd error"); if (DebugGZ) cerr << "inflateEnd: avail_in " << ((z_stream*)stream_)->avail_in << " avail_out " << ((z_stream*)stream_)->avail_out << endl; } } #else template <> size_t FitsStream::read(char* where, size_t size) { return 0; } template <> void FitsStream::close() {} #endif // Tcl_Channel template <> size_t FitsStream::read(char* where, size_t size) { // size_t size is unsigned long long ss =size; size_t rr = 0; int r = 0; do { r = Tcl_Read(stream_, where+rr, (ss>B1MB) ? B1MB : ss); ss -= r; rr += r; } while (r>0 && rr void FitsStream::close() {} // gzFile template <> size_t FitsStream::read(char* where, size_t size) { // size_t size is unsigned long long ss =size; size_t rr = 0; int r = 0; do { r = gzread(stream_, where+rr, (ss>B1MB) ? B1MB : ss); ss -= r; rr += r; } while (r>0 && rr void FitsStream::close() { gzclose(stream_); } template FitsHead* FitsStream::headRead() { // read first block char* cards = new char[FTY_BLOCK]; if (!cards) return NULL; memset(cards, ' ', FTY_BLOCK); if (read(cards, FTY_BLOCK) != FTY_BLOCK) { delete [] cards; return NULL; } // simple FITS file check if (strncmp(cards, "SIMPLE =", 9) && strncmp(cards, "XTENSION=", 9)) { delete [] cards; return NULL; } // read remaining blocks int numblks = 1; char* current = cards; while (1) { if (findEnd(current)) break; // this is check // for TCL channels, the stream gets corrupted, so END is never found // so bail out after an extreme number of blocks have been read // // this does not work because some fits files have 100's or 1000's of // history/comments. lets hope a corrupted stream is caught below // if (numblks>10) { // delete [] cards; // return NULL; // } char* tmp = new char[(numblks+1)*FTY_BLOCK]; memcpy(tmp, cards, numblks*FTY_BLOCK); delete [] cards; cards = tmp; current = cards + numblks*FTY_BLOCK; memset(current, ' ', FTY_BLOCK); if (read(current, FTY_BLOCK) != FTY_BLOCK) { delete [] cards; return NULL; } numblks++; } // create header FitsHead* fits = new FitsHead(cards, numblks*FTY_BLOCK, FitsHead::ALLOC); if (!fits->isValid()) { delete fits; return NULL; } return fits; } template int FitsStream::dataRead(size_t bytes, int validate) { data_ = NULL; dataSize_ = 0; dataSkip_ = 0; dataManage_ = 0; if (!bytes) return 0; data_ = new char[bytes]; if (!data_) return 0; size_t rr = read((char*)data_, bytes); if (validate && rr != bytes) { delete (char*)data_; data_ = NULL; dataSize_ = 0; dataSkip_ = 0; dataManage_ = 0; return 0; } dataSize_ = bytes; dataManage_ = 1; return 1; } template void FitsStream::dataSkip(size_t bytes) { // size_t bytes is unsigned if (bytes) { char block[FTY_BLOCK]; do { read(block, (bytes < FTY_BLOCK ? bytes : FTY_BLOCK)); if (bytes>FTY_BLOCK) bytes -= FTY_BLOCK; else break; } while (1); } } template void FitsStream::dataSkipBlock(size_t blk) { char block[FTY_BLOCK]; for (size_t ii=0; ii void FitsStream::skipEnd() { char block[FTY_BLOCK]; int bytes; do bytes = read(block, FTY_BLOCK); while (bytes > 0); } template void FitsStream::found() { // only read allbytes, since the data seg maybe short if (!this->dataRead(head_->allbytes())) { error(); return; } // read any dead space til next block if (head_->padbytes()>0) this->dataSkip(head_->padbytes()); inherit_ = head_->inherit(); valid_ = 1; if (flush_ == FLUSH) skipEnd(); } template void FitsStream::error() { // try to clean up if ((flush_ == FLUSH) && (head_ || primary_)) skipEnd(); if (manageHead_ && head_) delete head_; head_ = NULL; if (managePrimary_ && primary_) delete primary_; primary_ = NULL; data_ = NULL; dataSize_ = 0; dataSkip_ = 0; dataManage_ = 0; valid_ = 0; } template class FitsStream; template class FitsStream; template class FitsStream; template class FitsStream; template class FitsStream; template FitsFitsStream::FitsFitsStream(FitsFile::ScanMode mode, FitsFile::FlushMode f) { if (!this->valid_) return; this->flush_ = f; if (mode == this->EXACT || this->pExt_ || this->pIndex_>-1) processExact(); else processRelax(); } template void FitsFitsStream::processExact() { if (!(this->pExt_ || (this->pIndex_>0))) { // we are only looking for a primary image if ((this->head_ = this->headRead())) { this->found(); return; } } else { // we are looking for an extension // keep the primary header this->primary_ = this->headRead(); this->managePrimary_ = 1; if (!this->primary_) { this->error(); return; } this->dataSkipBlock(this->primary_->datablocks()); if (this->pExt_) { while (1) { if (!(this->head_ = this->headRead())) { this->error(); return; } this->ext_++; if (this->head_->extname()) { char* a = toUpper(this->head_->extname()); char* b = toUpper(this->pExt_); if (!strncmp(a,b,strlen(b))) { delete [] a; delete [] b; this->found(); return; } delete [] a; delete [] b; } this->dataSkipBlock(this->head_->datablocks()); delete this->head_; this->head_ = NULL; } } else { for (int i=1; ipIndex_; i++) { if (!(this->head_ = this->headRead())) { this->error(); return; } this->ext_++; this->dataSkipBlock(this->head_->datablocks()); delete this->head_; this->head_ = NULL; } if ((this->head_ = this->headRead())) { this->ext_++; this->found(); return; } } } // we must have an error this->error(); } template void FitsFitsStream::processRelax() { // check to see if there is an image in the primary if (!(this->head_ = this->headRead())) { this->error(); return; } else { if (this->head_->isValid() && this->head_->naxes() > 0 && this->head_->naxis(0) > 0 && this->head_->naxis(1) > 0) { this->found(); return; } } // ok, no image, save primary and lets check extensions this->primary_ = this->head_; this->managePrimary_ = 1; this->dataSkipBlock(this->head_->datablocks()); this->head_ = NULL; // ok, no image, lets check extensions while (1) { if (!(this->head_ = this->headRead())) { this->error(); return; } this->ext_++; if (this->head_->isImage()) { this->found(); return; } // else, check for compressed image if (this->head_->isBinTable() && this->head_->find("ZIMAGE")) { this->found(); return; } // else, check for bin table named STDEVT, EVENTS, RAYEVENT if (this->head_->isBinTable() && this->head_->extname()) { char* a = toUpper(this->head_->extname()); if (!strncmp("STDEVT", a, 6) || !strncmp("EVENTS", a, 6) || !strncmp("RAYEVENT", a, 8)) { delete [] a; this->found(); return; } else delete [] a; } // else, check for bin table with keyword PIXTYPE = 'HEALPIX ' if (this->head_->isBinTable() && this->head_->find("PIXTYPE") && (!strncmp(this->head_->getString("PIXTYPE"),"HEALPIX",4))) { this->found(); return; } // else, check for bin table with keyword NSIDE (also HEALPIX) if (this->head_->isBinTable() && this->head_->find("NSIDE")) { this->found(); return; } this->dataSkipBlock(this->head_->datablocks()); delete this->head_; this->head_ = NULL; } this->error(); } template class FitsFitsStream; template class FitsFitsStream; template class FitsFitsStream; template class FitsFitsStream; template class FitsFitsStream; template FitsFitsNextStream::FitsFitsNextStream(FitsFile* p) { FitsStream* prev = (FitsStream*)p; this->primary_ = prev->primary(); this->managePrimary_ = 0; this->head_ = prev->head(); this->manageHead_ = 0; FitsImageHDU* hdu = (FitsImageHDU*)this->head_->hdu(); this->data_ = (char*)prev->data() + hdu->imgbytes(); this->dataSize_ = 0; this->dataSkip_ = 0; this->ext_ = prev->ext(); this->inherit_ = prev->inherit(); this->byteswap_ = prev->byteswap(); this->endian_ = prev->endian(); this->valid_ = 1; this->pcoord_ = prev->pcoord(); this->pxvalid_ = prev->pxvalid(); this->pxmin_ = prev->pxmin(); this->pxmax_ = prev->pxmax(); this->pyvalid_ = prev->pyvalid(); this->pymin_ = prev->pymin(); this->pymax_ = prev->pymax(); this->pzvalid_ = prev->pzvalid(); this->pzmin_ = prev->pzmin(); this->pzmax_ = prev->pzmax(); this->pbvalid_ = prev->pbvalid(); this->pblock_ = prev->pblock(); this->stream_ = prev->stream(); this->flush_ = prev->flush(); this->dataManage_ = 0; } template class FitsFitsNextStream; template class FitsFitsNextStream; template class FitsFitsNextStream; template class FitsFitsNextStream; template class FitsFitsNextStream; template FitsArrStream::FitsArrStream(FitsFile::FlushMode f) { if (!this->valid_) return; this->flush_ = f; this->valid_=0; // check to see if we have a nonzero width, height, and bitpix if (!this->validParams()) { return; } // skip header if (this->pSkip_) this->dataSkip(this->pSkip_); // read data if (!this->dataRead((size_t)this->pWidth_*this->pHeight_*this->pDepth_*abs(this->pBitpix_)/8)) { if ((this->flush_ == this->FLUSH) && this->data_) this->skipEnd(); return; } // create blank header this->head_ = new FitsHead(this->pWidth_, this->pHeight_, this->pDepth_, this->pBitpix_); if (!this->head_->isValid()) { this->error(); return; } // do we need to byteswap? this->setByteSwap(); // made it this far, must be good this->valid_ = 1; if (this->flush_ == this->FLUSH) this->skipEnd(); } template class FitsArrStream; template class FitsArrStream; template class FitsArrStream; template class FitsArrStream; template class FitsArrStream; template FitsNRRDStream::FitsNRRDStream(FitsFile::FlushMode f) { if (!this->valid_) return; this->flush_ = f; this->valid_=0; // header { char buf[1024]; char* dptr = buf; int cnt =0; do { int cc = this->read(dptr,1); if (cc != 1 || (*dptr == '\n' && *(dptr-1) == '\n')) { break; } cnt++; dptr++; } while (cnt<1024); *dptr = '\0'; string x(buf); istringstream str(x); this->parseNRRD(str); } // check to see if we have a nonzero width, height, and bitpix if (!this->validParams()) return; // read data this->dataRead((size_t)this->pWidth_*this->pHeight_*this->pDepth_*abs(this->pBitpix_)/8, 0); // create blank header this->head_ = new FitsHead(this->pWidth_, this->pHeight_, this->pDepth_, this->pBitpix_); if (!this->head_->isValid()) { this->error(); return; } // do we need to byteswap? this->setByteSwap(); // made it this far, must be good this->valid_ = 1; if (this->flush_ == this->FLUSH) this->skipEnd(); } template class FitsNRRDStream; template class FitsNRRDStream; template class FitsNRRDStream; template class FitsNRRDStream; template class FitsNRRDStream; template FitsMosaicStream::FitsMosaicStream(FitsFile::FlushMode f) { if (!this->valid_) return; this->flush_ = f; this->primary_ = this->headRead(); this->managePrimary_ = 1; if (!(this->primary_ && this->primary_->isValid())) { this->error(); return; } this->dataSkipBlock(this->primary_->datablocks()); // first extension this->head_ = this->headRead(); if (!(this->head_ && this->head_->isValid())) { this->error(); return; } this->ext_++; // be sure to read all blocks, so that the next call starts on a boundary if (!this->dataRead(this->head_->datablocks()*FTY_BLOCK)) { this->error(); return; } // don't flush, more to come this->inherit_ = this->head_->inherit(); this->valid_ = 1; } template class FitsMosaicStream; template class FitsMosaicStream; template class FitsMosaicStream; template class FitsMosaicStream; template class FitsMosaicStream; template FitsMosaicNextStream::FitsMosaicNextStream(FitsFile* p, FitsFile::FlushMode f) { this->flush_ = f; FitsStream* prev = (FitsStream*)p; this->primary_ = prev->primary(); this->managePrimary_ = 0; this->stream_ = prev->stream(); this->ext_ = prev->ext(); this->head_ = this->headRead(); if (!(this->head_ && this->head_->isValid())) { this->error(); return; } this->ext_++; // be sure to read all blocks, so that the next call starts on a boundary if (!this->dataRead(this->head_->datablocks()*FTY_BLOCK)) { this->error(); return; } this->inherit_ = this->head_->inherit(); this->valid_ = 1; } template class FitsMosaicNextStream; template class FitsMosaicNextStream; template class FitsMosaicNextStream; template class FitsMosaicNextStream; template class FitsMosaicNextStream; saods9/tksao/fitsy++/strm.h000644 000765 000000 00000003467 12705446165 016153 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsstream_h__ #define __fitsstream_h__ #include "file.h" #include "zlib.h" typedef struct gzStream_ { z_stream zstream; int id; int transparent; unsigned char header[2]; int useHeader; unsigned char* buf; } *gzStream; template class FitsStream : public FitsFile { protected: T stream_; FitsFile::FlushMode flush_; int dataManage_; // flag, true if we manage data FitsHead* headRead(); int dataRead(size_t bytes, int validate =1); void dataSkip(size_t); void dataSkipBlock(size_t); void skipEnd(); size_t read(char*, size_t); void close(); void found(); void error(); public: FitsStream(); virtual ~FitsStream(); T stream() {return stream_;} FitsFile::FlushMode flush() {return flush_;} int dataManage() {return dataManage_;} void done() {close();} }; template class FitsFitsStream : public virtual FitsStream { protected: void processExact(); void processRelax(); public: FitsFitsStream(FitsFile::ScanMode, FitsFile::FlushMode); }; template class FitsFitsNextStream : public FitsStream { public: FitsFitsNextStream(FitsFile* prev); }; template class FitsArrStream : public virtual FitsStream { public: FitsArrStream(FitsFile::FlushMode); }; template class FitsNRRDStream : public virtual FitsStream { public: FitsNRRDStream(FitsFile::FlushMode); }; template class FitsMosaicStream : public virtual FitsStream { public: FitsMosaicStream(FitsFile::FlushMode); }; template class FitsMosaicNextStream : public FitsStream { public: FitsMosaicNextStream(FitsFile* prev, FitsFile::FlushMode); }; #endif saods9/tksao/fitsy++/var.C000644 000765 000000 00000002157 12705446165 015704 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "var.h" FitsVar::FitsVar(Tcl_Interp* interp, const char* var, const char* fn) { parse(fn); if (!valid_) return; // reset valid_ =0; obj = Tcl_GetVar2Ex(interp, (char*)var, NULL, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG); if (!obj) return; // just in case Tcl_ConvertToType(interp, obj, Tcl_GetObjType("bytearray")); typedef struct ByteArray { int used; /* The number of bytes used in the byte * array. */ int allocated; /* The amount of space actually allocated * minus 1 byte. */ unsigned char bytes[4]; /* The array of bytes. The actual size of * this field depends on the 'allocated' field * above. */ } ByteArray; ByteArray* ba = (ByteArray*)(obj->internalRep.otherValuePtr); mapsize_ = ba->used; mapdata_ = (char*)ba->bytes; Tcl_IncrRefCount(obj); // so far, so good valid_ = 1; } FitsVar::~FitsVar() { if (obj) Tcl_DecrRefCount(obj); } saods9/tksao/fitsy++/var.h000644 000765 000000 00000002577 12705446165 015757 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __fitsvar_h__ #define __fitsvar_h__ #include "map.h" class FitsVar : public virtual FitsMap { Tcl_Obj* obj; public: FitsVar(Tcl_Interp*, const char*, const char*); virtual ~FitsVar(); }; class FitsFitsVar : public FitsVar, public FitsFitsMap { public: FitsFitsVar(Tcl_Interp* interp, const char* var, const char* fn, ScanMode mode) : FitsVar(interp, var, fn), FitsFitsMap(mode) {} }; class FitsFitsNextVar : public FitsFitsNextMap { public: FitsFitsNextVar(FitsFile* prev) : FitsFitsNextMap(prev) {} }; class FitsArrVar : public FitsVar, public FitsArrMap { public: FitsArrVar(Tcl_Interp* interp, const char* var, const char* fn) : FitsVar(interp, var, fn), FitsArrMap() {} }; class FitsNRRDVar : public FitsVar, public FitsNRRDMap { public: FitsNRRDVar(Tcl_Interp* interp, const char* var, const char* fn) : FitsVar(interp, var, fn), FitsNRRDMap() {} }; class FitsMosaicVar : public FitsVar, public FitsMosaicMap { public: FitsMosaicVar(Tcl_Interp* interp, const char* var, const char* fn) : FitsVar(interp, var, fn), FitsMosaicMap() {} }; class FitsMosaicNextVar : public FitsMosaicNextMap { public: FitsMosaicNextVar(FitsFile* prev) : FitsMosaicNextMap(prev) {} }; #endif saods9/tksao/colorbar/cbgrid.C000644 000765 000000 00000011656 12754670576 016702 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "cbgrid.h" #include "colorbarbase.h" #include "util.h" extern "C" { #include "ast.h" } extern Grid2dBase* astGrid2dPtr; CBGrid::CBGrid(Widget* p, int cc, double* ll) : Grid2dBase(p), cnt_(cc), lut_(ll) { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)(((ColorbarBase*)parent_)->options); ostringstream str; // basics str << "Grid=0, DrawAxes=0, MinTickLen(1)=0, MinTickLen(2)=0, Colour(ticks)=0, Width(ticks)=.5, Style(ticks)=0, Border=1, Colour(border)=0, Width(border)=.5, Style(border)=0, Labelling=exterior, Colour(numlab)=0, TextLab=0, DrawTitle=0"; if (!opts->orientation) { // horizontal str << ", Edge(1)=top, Edge(2)=left, LabelUp(1)=1, MajTickLen(1)=-.15, MajTickLen(2)=0, NumLab(1)=1, NumLab(2)=0, NumLabGap(1)=.5"; } else { // vertical str << ", Edge(1)=bottom, Edge(2)=right, LabelUp(2)=1, MajTickLen(1)=0, MajTickLen(2)=-.15, NumLab(1)=0, NumLab(2)=1, NumLabGap(2)=.5"; } // font { char* fn = opts->font; int fz = opts->fontSize; char* fw = opts->fontWeight; char* fs = opts->fontSlant; int ff; if (!(strncmp(fn,"times",4) || strncmp(fw,"normal",4) || strncmp(fs,"roman",4))) ff = 1; else if (!(strncmp(fn,"helvetica",4) || strncmp(fw,"normal",4) || strncmp(fs,"roman",4))) ff = 2; else if (!(strncmp(fn,"courier",4) || strncmp(fw,"normal",4) || strncmp(fs,"roman",4))) ff = 4; else if (!(strncmp(fn,"times",4) || strncmp(fw,"bold",4) || strncmp(fs,"roman",4))) ff = 11; else if (!(strncmp(fn,"helvetica",4) || strncmp(fw,"bold",4) || strncmp(fs,"roman",4))) ff = 12; else if (!(strncmp(fn,"courier",4) || strncmp(fw,"bold",4) || strncmp(fs,"roman",4))) ff = 14; else if (!(strncmp(fn,"times",4) || strncmp(fw,"normal",4) || strncmp(fs,"italic",4))) ff = 21; else if (!(strncmp(fn,"helvetica",4) || strncmp(fw,"normal",4) || strncmp(fs,"italic",4))) ff = 22; else if (!(strncmp(fn,"courier",4) || strncmp(fw,"normal",4) || strncmp(fs,"italic",4))) ff = 24; else if (!(strncmp(fn,"times",4) || strncmp(fw,"bold",4) || strncmp(fs,"italic",4))) ff = 31; else if (!(strncmp(fn,"helvetica",4) || strncmp(fw,"bold",4) || strncmp(fs,"italic",4))) ff = 32; else if (!(strncmp(fn,"courier",4) || strncmp(fw,"bold",4) || strncmp(fs,"italic",4))) ff = 34; else ff = 1; str << ", Font(numlab)=" << ff << ", Size(numlab)=" << fz << ends; } option_ = dupstr(str.str().c_str()); } int CBGrid::render() { pixmap_ = ((ColorbarBase*)parent_)->pixmap; return doit(X11); } int CBGrid::ps(int mode, int x, int y) { matrix_ = Translate(x,y); mode_ = mode; return doit(PS); } #ifdef MAC_OSX_TK int CBGrid::macosx(int x, int y) { matrix_ = Translate(x,y); return doit(MACOSX); } #endif #ifdef __WIN32 int CBGrid::win32(int x, int y) { matrix_ = Translate(x,y); return doit(GWIN32); } #endif int CBGrid::doit(RenderMode rm) { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)(((ColorbarBase*)parent_)->options); astClearStatus; // just to make sure astBegin; // start memory management AstFrameSet* frameSet = NULL; AstCmpMap* cmp = NULL; AstLutMap* aa = NULL; AstUnitMap* bb = NULL; AstPlot* plot = NULL; if (!(frameSet = astFrameSet(astFrame(2,"Domain=WIDGET"),""))) goto error; if (!(bb = astUnitMap(1,""))) goto error; if (!opts->orientation) { if (!(aa = astLutMap(cnt_, lut_, 0, double(opts->width)/(cnt_-1), ""))) goto error; if (!(cmp = astCmpMap(aa, bb, 0, ""))) goto error; } else { if (!(aa = astLutMap(cnt_, lut_, 0, double(opts->height)/(cnt_-1), ""))) goto error; if (!(cmp = astCmpMap(bb, aa, 0, ""))) goto error; } astAddFrame(frameSet, AST__CURRENT, cmp, astFrame(2, "Domain=LUT")); astSet(frameSet,"Title=%s", " "); if (0) { int status = astStatus; astClearStatus; astShow(frameSet); astSetStatus(status); } // create astPlot float gbox[4]; double pbox[4]; int ww,hh,zz; if (!opts->orientation) { ww = opts->width; hh = opts->size; } else { ww = opts->size; hh = opts->height; } zz =0; switch (rm) { case X11: ww -= 1; hh -= 1; break; case PS: zz = 1; break; case MACOSX: break; case GWIN32: break; } if (!opts->orientation) { gbox[0] = pbox[0] = 0; gbox[1] = pbox[1] = zz; gbox[2] = pbox[2] = ww; gbox[3] = pbox[3] = hh; } else { gbox[0] = 0; gbox[1] = zz; gbox[2] = ww; gbox[3] = hh; pbox[0] = zz; pbox[1] = hh; pbox[2] = ww; pbox[3] = 0; } plot = astPlot(frameSet, gbox, pbox, option_); // and now create astGrid astGrid2dPtr = this; renderMode_ = rm; astGrid(plot); astEnd; // now, clean up memory return 1; error: astEnd; return 0; } saods9/tksao/colorbar/cbgrid.h000644 000765 000000 00000001061 12705446130 016713 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __cbgrid_h__ #define __cbgrid_h__ #include #include "grid2dbase.h" #include "vector.h" class CBGrid : public Grid2dBase { private: int cnt_; double* lut_; int doit(RenderMode); public: CBGrid(Widget*, int, double*); int render(); int ps(int, int, int); #ifdef MAC_OSX_TK int macosx(int, int); #endif #ifdef __WIN32 int win32(int, int); #endif }; #endif saods9/tksao/colorbar/colorbar.C000644 000765 000000 00000045011 12766317220 017226 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "colorbar.h" #include "util.h" #include "ps.h" #include "lut.h" #include "sao.h" #include "default.h" Colorbar::Colorbar(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : ColorbarBase(i,c,item) { bias = .5; contrast = 1.0; tag =NULL; tagaction =NONE; taginit =0; } Colorbar::~Colorbar() { } int Colorbar::calcContrastBias(int i) { // if default (contrast = 1.0 && bias = .5) return if (fabs(bias - 0.5) < 0.0001 && fabs(contrast - 1.0) < 0.0001) return i; // map i to range of 0 to 1.0 // shift by bias (if invert, bias = 1-bias) // multiply by contrast // shift to center of region // expand back to number of dynamic colors float b = invert ? 1-bias : bias; int r = (int)(((((float)i / colorCount) - b) * contrast + .5 ) * colorCount); // clip to bounds if out of range if (r < 0) return 0; else if (r >= colorCount) return colorCount-1; else return r; } void Colorbar::loadDefaultCMaps() { cmaps.append(new GreyColorMap(this)); cmaps.append(new RedColorMap(this)); cmaps.append(new GreenColorMap(this)); cmaps.append(new BlueColorMap(this)); cmaps.append(new AColorMap(this)); cmaps.append(new BColorMap(this)); cmaps.append(new BBColorMap(this)); cmaps.append(new HEColorMap(this)); cmaps.append(new I8ColorMap(this)); cmaps.append(new AIPSColorMap(this)); cmaps.append(new SLSColorMap(this)); cmaps.append(new HSVColorMap(this)); cmaps.append(new HeatColorMap(this)); cmaps.append(new CoolColorMap(this)); cmaps.append(new RainbowColorMap(this)); cmaps.append(new StandardColorMap(this)); cmaps.append(new StaircaseColorMap(this)); cmaps.append(new ColorColorMap(this)); cmaps.head(); } ColorMapInfo* Colorbar::newColorMap(const char* fn, const char* type) { // determine colormap type char* tmp = dupstr(fn); // tmp memory, we will mangle it char* ptr = tmp; while (*ptr++); // walk forward till end of string ptr--; // backup one while (ptr != tmp && *ptr != '.') // march backward looking for '.' ptr--; if (ptr != tmp) { // are we at '.' or start of string *ptr = '\0'; // mark end of string at '.' ptr++; } // Create ColorMap ColorMapInfo* map = NULL; // if type specified, use it, otherwise, use file extension if (type) ptr = (char*)type; if (strncmp(ptr, "lut", 3) == 0) map = new LUTColorMap(this); else map = new SAOColorMap(this); // Bail out if we don't have a new ColorMap if (!map) return NULL; // Extract a name from the file name. Any extension has already been removed. ptr = tmp; while (*ptr++); // walk forward till end of string while (ptr != tmp && *ptr != '/') // march backward looking for '/' ptr--; if (ptr != tmp) // see if we found '/' or at begining of string ptr++; map->setName(ptr); map->setFileName(fn); delete [] tmp; // clean up return map; } void Colorbar::psHorz(ostream& str, Filter& filter, int width, int height) { for (int jj=0; jjgetBlueChar(index, colorCount); colorCells[i*3+1] = cmaps.current()->getGreenChar(index, colorCount); colorCells[i*3+2] = cmaps.current()->getRedChar(index, colorCount); } ctags.head(); while (ctags.current()) { for (int ii=ctags.current()->start(); iistop(); ii++) { colorCells[ii*3] = ctags.current()->colorBlue(); colorCells[ii*3+1] = ctags.current()->colorGreen(); colorCells[ii*3+2] = ctags.current()->colorRed(); } ctags.next(); } } // Commands void Colorbar::adjustCmd(float c, float b) { contrast = c; bias = b; updateColors(); } void Colorbar::getBiasCmd() { ostringstream str; str << bias << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Colorbar::getColorbarCmd() { if (cmaps.current()) { ostringstream str; str << cmaps.current()->getID() << ' ' << bias << ' ' << contrast << ' ' << invert << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } else result = TCL_ERROR; } void Colorbar::getColormapCmd() { if (cmaps.current()) { ostringstream str; str << cmaps.current()->getID() << ' ' << bias << ' ' << contrast << ' ' << invert << ' ' << (unsigned short*)colorCells << ' ' << colorCount << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } else result = TCL_ERROR; } void Colorbar::getColormapNameCmd(int id) { ColorMapInfo* ptr = cmaps.begin(); while (ptr) { if (ptr->getID() == id) { Tcl_AppendResult(interp, (char*)ptr->getName(), NULL); return; } ptr = ptr->next(); } // if we got this far, we did not find it, bail out Tcl_AppendResult(interp, " colormap not found.", NULL); result = TCL_ERROR; } void Colorbar::getColormapFileNameCmd(int id) { ColorMapInfo* ptr = cmaps.begin(); while (ptr) { if (ptr->getID() == id) { Tcl_AppendResult(interp, (char*)ptr->getFileName(), NULL); return; } ptr = ptr->next(); } // if we got this far, we did not find it, bail out Tcl_AppendResult(interp, " colormap not found.", NULL); result = TCL_ERROR; } void Colorbar::getContrastCmd() { ostringstream str; str << contrast << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Colorbar::getCurrentIDCmd() { if (cmaps.current()) { ostringstream str; str << cmaps.current()->getID() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } else result = TCL_ERROR; } void Colorbar::getCurrentNameCmd() { if (cmaps.current()) Tcl_AppendElement(interp, (char*)cmaps.current()->getName()); else result = TCL_ERROR; } void Colorbar::getCurrentFileNameCmd() { if (cmaps.current()) Tcl_AppendElement(interp, (char*)cmaps.current()->getFileName()); else result = TCL_ERROR; } void Colorbar::getTagCmd() { ostringstream str; ctags.head(); while (ctags.current()) { str << ctags.current()->start() << ' ' << ctags.current()->stop() << ' ' << ctags.current()->colorname() << ' '; ctags.next(); } str << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void Colorbar::getTagCmd(int xx, int yy) { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; int rr,ss; if (!opts->orientation) { rr = xx; ss = float(rr)/opts->width * colorCount; } else { rr = yy; ss = (1-float(rr)/opts->height) * colorCount; } ctags.head(); while (ctags.current()) { if (ss>ctags.current()->start() && ssstop()) { int startid = float(ctags.current()->start())/colorCount * cnt; int stopid = float(ctags.current()->stop())/colorCount * cnt; if (startid<0) startid = 0; if (startid>=cnt) startid = cnt-1; if (stopid<0) stopid = 0; if (stopid>=cnt) stopid = cnt-1; ostringstream str; str << ctags.current()->id() << ' ' << lut[startid] << ' ' << lut[stopid] << ' ' << ctags.current()->colorname() << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); return; } ctags.next(); } } void Colorbar::getRGBChannelCmd() { Tcl_AppendResult(interp, "red", NULL); } void Colorbar::listIDCmd() { ColorMapInfo* ptr = cmaps.begin(); while (ptr) { ostringstream str; str << ptr->getID() << ends; Tcl_AppendElement(interp, str.str().c_str()); ptr = ptr->next(); } } void Colorbar::listNameCmd() { ColorMapInfo* ptr = cmaps.begin(); while (ptr) { Tcl_AppendElement(interp, (char*)ptr->getName()); ptr = ptr->next(); } } void Colorbar::loadCmd(const char* fn, const char* type) { ColorMapInfo* map = newColorMap(fn, type); if (map && map->load()) { // add new colormap to end of the list cmaps.append(map); reset(); } else { // something has gone wrong, clean up, and bail out delete map; Tcl_AppendResult(interp, " unable to load colormap: ", fn, NULL); result = TCL_ERROR; } } void Colorbar::loadCmd(const char* fn, const char* type, const char* var) { ColorMapInfo* map = newColorMap(fn, type); if (map && map->load(var)) { // add new colormap to end of the list cmaps.append(map); reset(); } else { // something has gone wrong, clean up, and bail out delete map; Tcl_AppendResult(interp, " unable to load colormap: ", fn, NULL); result = TCL_ERROR; } } void Colorbar::mapCmd(char* which) { char* a = toLower(which); cmaps.head(); do { char* b = toLower(cmaps.current()->getName()); if (!strcmp(a,b)) { reset(); delete [] a; delete [] b; return; } delete [] b; } while (cmaps.next()); // if we got this far, we did not find it, bail out cmaps.head(); delete [] a; result = TCL_ERROR; } void Colorbar::mapCmd(int id) { cmaps.head(); do { if (cmaps.current()->getID() == id) { reset(); return; } } while (cmaps.next()); // if we got this far, we did not find it, bail out cmaps.head(); result = TCL_ERROR; } void Colorbar::saveCmd(const char* fn) { cmaps.current()->save(fn); } void Colorbar::saveCmd(int id, const char* fn) { ColorMapInfo* ptr = cmaps.begin(); while (ptr) { if (ptr->getID() == id) { ptr->save(fn); return; } ptr = ptr->next(); } result = TCL_ERROR; } void Colorbar::setColorbarCmd(int id, float b, float c, int i) { cmaps.head(); while (cmaps.current()) { if (cmaps.current()->getID() == id) { bias = b; contrast = c; invert = i; updateColors(); return; } cmaps.next(); } // if we got this far, we did not find it, bail out cmaps.head(); result = TCL_ERROR; } void Colorbar::tagCmd(const char* txt) { ctags.deleteAll(); istringstream str(txt); while (!str.eof()) { int aa =0; int bb =0; char color[32]; *color ='\0'; str >> aa >> bb >> color; if (aa && bb && *color) ctags.append(new ColorTag(this,aa,bb,color)); } updateColors(); } void Colorbar::tagCmd(int id, const Vector& v, const char* color) { Vector vv = v; int mm=0; int nn=0; ctags.head(); while (ctags.current()) { if (ctags.current()->id() == id) { // special case if (vv[0]>lut[cnt-1] && vv[1]>lut[cnt-1]) return; else if (vv[0]=0; ii--) if (vv[1]>lut[ii]) { nn=ii; break; } Vector rr = Vector(mm,nn)/cnt*colorCount; ctags.current()->set(rr[0],rr[1],color); updateColors(); return; } ctags.next(); } } void Colorbar::tagDeleteCmd() { ctags.deleteAll(); updateColors(); } void Colorbar::tagDeleteCmd(int xx, int yy) { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; int rr,ss; if (!opts->orientation) { rr = xx; ss = float(rr)/opts->width * colorCount; } else { rr = yy; ss = (1-float(rr)/opts->height) * colorCount; } ctags.head(); while (ctags.current()) { if (ss>ctags.current()->start() && ssstop()) { ColorTag* ct = ctags.extract(); if (ct) delete ct; updateColors(); return; } ctags.next(); } } void Colorbar::tagEditBeginCmd(int xx, int yy, const char* color) { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; tag= NULL; tagaction =NONE; taginit =0; int rr,ss; if (!opts->orientation) { rr = xx; ss = float(rr)/opts->width * colorCount; } else { rr = yy; ss = (1-float(rr)/opts->height) * colorCount; } ctags.head(); while (ctags.current()) { int start = ctags.current()->start(); int stop = ctags.current()->stop(); if (ss>start && ssstop-10 && ssstart && ssorientation) { rr = xx; ss = float(rr)/opts->width * colorCount; tt = float(taginit)/opts->width *colorCount; } else { rr = yy; ss = (1-float(rr)/opts->height) * colorCount; tt = (1-float(taginit)/opts->height) *colorCount; } switch (tagaction) { case NONE: break; case CREATE: tagaction =STOP; tag->move(0,ss-tt); break; case START: tag->move(ss-tt,0); break; case STOP: tag->move(0,ss-tt); break; case MOVE: tag->move(ss-tt,ss-tt); break; } taginit = rr; updateColors(); } } void Colorbar::tagEditEndCmd(int xx, int yy) { if (tag) { switch (tagaction) { case NONE: break; case CREATE: tag->width(100); break; case START: break; case STOP: break; case MOVE: break; } updateColors(); } } void Colorbar::tagLoadCmd(const char* fn) { ifstream str(fn); if (str) { ctags.deleteAll(); while (!str.eof()) { int mm=0; int nn=0; double aa =0; double bb =0; char color[32]; *color ='\0'; str >> aa >> bb >> color; if (aa && bb && *color) { // special case if (aa>lut[cnt-1] && bb>lut[cnt-1]) continue; else if (aa=0; ii--) if (bb>lut[ii]) { nn=ii; break; } Vector rr = Vector(mm,nn)/cnt*colorCount; ctags.append(new ColorTag(this,rr[0],rr[1],color)); } } updateColors(); } } void Colorbar::tagSaveCmd(const char* fn) { ofstream str(fn); if (str) { ctags.head(); while (ctags.current()) { int startid = float(ctags.current()->start())/colorCount * cnt; int stopid = float(ctags.current()->stop())/colorCount * cnt; if (startid<0) startid = 0; if (startid>=cnt) startid = cnt-1; if (stopid<0) stopid = 0; if (stopid>=cnt) stopid = cnt-1; str << lut[startid] << ' ' << lut[stopid] << ' ' << ctags.current()->colorname() << endl; ctags.next(); } } } #ifdef MAC_OSX_TK void Colorbar::macosx(float scale, int width, int height, const Vector& v, const Vector& s) { if (!colorCells) return; // destination unsigned char* dst = new unsigned char[width*height*4]; unsigned char* dptr = dst; if (!((ColorbarBaseOptions*)options)->orientation) { for (int jj=0; jjorientation) { for (int jj=0; jj cmaps; List ctags; float bias; float contrast; ColorTag* tag; ColorTagAction tagaction; int taginit; private: ColorMapInfo* newColorMap(const char*, const char*); void psHorz(ostream&, Filter&, int, int); void psVert(ostream&, Filter&, int, int); protected: int calcContrastBias(int); void loadDefaultCMaps(); void reset(); void updateColorCells(); #ifdef MAC_OSX_TK void macosx(float, int, int, const Vector&, const Vector&); #endif #ifdef __WIN32 void win32(float, int, int, const Vector&, const Vector&); #endif public: Colorbar(Tcl_Interp*, Tk_Canvas, Tk_Item*); virtual ~Colorbar(); // commands void adjustCmd(float, float); void getBiasCmd(); void getColorbarCmd(); void getColormapCmd(); void getColormapNameCmd(int); void getColormapFileNameCmd(int); void getContrastCmd(); void getCurrentFileNameCmd(); void getCurrentIDCmd(); void getCurrentNameCmd(); void listIDCmd(); void listNameCmd(); void loadCmd(const char*, const char*); void loadCmd(const char*, const char*, const char*); void mapCmd(char*); void mapCmd(int); void saveCmd(const char*); void saveCmd(int, const char*); void setColorbarCmd(int, float, float, int); void getTagCmd(); void getTagCmd(int,int); void tagCmd(const char*); void tagCmd(int, const Vector&, const char*); void tagDeleteCmd(); void tagDeleteCmd(int,int); void tagEditBeginCmd(int,int,const char*); void tagEditMotionCmd(int,int); void tagEditEndCmd(int,int); void tagLoadCmd(const char*); void tagSaveCmd(const char*); void getRGBChannelCmd(); }; #endif saods9/tksao/colorbar/colorbarbase.C000644 000765 000000 00000057461 12766541474 020107 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "colorbarbase.h" #include "util.h" #include "cbgrid.h" #include "ps.h" #define TICKLEN 3 #define TICKGAP 7 // Parser Stuff #undef yyFlexLexer #define yyFlexLexer cbFlexLexer #include void* cblval; extern int cbparse(ColorbarBase*, cbFlexLexer*); int cblex(void* vval, cbFlexLexer* ll) { cblval = vval; return ll ? ll->yylex() : 0; } void cberror(ColorbarBase* cb, cbFlexLexer* ll, const char* m) { cb->error(m); const char* cmd = ll ? ll->YYText() : (const char*)NULL; if (cmd && cmd[0] != '\n') { cb->error(": "); cb->error(cmd); } } // Public Member Functions ColorbarBase::ColorbarBase(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Widget(i,c,item) { // this is needed because of a problem with Tk_ConfigureWidget ((ColorbarBaseOptions*)options)->font = NULL; ((ColorbarBaseOptions*)options)->fontWeight = NULL; ((ColorbarBaseOptions*)options)->fontSlant = NULL; xmap = NULL; colorCells = NULL; colorCount = 0; grid = NULL; cnt = 0; lut = NULL; invert = 0; ticktxt = NULL; tickcnt =0; skipcnt =0; } ColorbarBase::~ColorbarBase() { if (xmap) XDestroyImage(xmap); if (colorCells) delete [] colorCells; if (grid) delete grid; if (lut) delete [] lut; if (ticktxt) { for (int ii=0; iifontSize*getDisplayRatio()); #else int fz = opts->fontSize; #endif if (!strncmp(opts->font,"helvetica",4)) fstr << '{' << opts->helvetica << '}' << ' ' << fz << ' ' << opts->fontWeight << ' ' << opts->fontSlant << ends; else if (!strncmp(opts->font,"courier",4)) fstr << '{' << opts->courier << '}' << ' ' << fz << ' ' << opts->fontWeight << ' ' << opts->fontSlant << ends; else if (!strncmp(opts->font,"times",4)) fstr << '{' << opts->times << '}' << ' ' << fz << ' ' << opts->fontWeight << ' ' << opts->fontSlant << ends; else fstr << '{' << opts->helvetica << '}' << ' ' << fz << ' ' << opts->fontWeight << ' ' << opts->fontSlant << ends; return Tk_GetFont(interp, tkwin, fstr.str().c_str()); } void ColorbarBase::lutToText(Tk_Font font) { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; // init if (ticktxt) for (int ii=0; iiticks; ticktxt = new char*[opts->ticks]; for (int ii=0; iiticks; ii++) ticktxt[ii] = NULL; skipcnt =0; // first estimate of prec int prec; { int aa = (int)(log10(fabs(lut[0]))); int bb = (int)(log10(fabs(lut[cnt-1]))); if (aa != bb) prec = aa>bb ? aa : bb; else prec = 1; } // up to three tries for (int jj=0; jj<3; jj++) { // render text for (int ii=0; iiticks; ii++) { int id = ii/double(opts->ticks-1)*cnt; // the last one will be one over if (id>=cnt) id = cnt-1; ostringstream str; if (prec < -2) str << scientific << setprecision(2+jj) << lut[id] << ends; else if (prec < 0) str << fixed << setprecision(abs(prec)+3+jj) << lut[id] << ends; else if (prec < 2) str << setprecision(2+jj) << lut[id] << ends; else if (prec < 5) str << fixed << setprecision(0+jj) << lut[id] << ends; else str << scientific << setprecision(2+jj) << lut[id] << ends; if (ticktxt[ii]) delete [] ticktxt[ii]; ticktxt[ii] = new char[strlen(str.str().c_str())+1]; strcpy(ticktxt[ii],str.str().c_str()); } // now see if all is unique int ok=1; for (int ii=1; iiticks; ii++) { if (!strcmp(ticktxt[ii-1],ticktxt[ii])) ok=0; } if (ok) break; } // determine skipcnt Tk_FontMetrics metrics; Tk_GetFontMetrics(font, &metrics); if (!opts->orientation) { // horizontal int ww =0; for (int ii=0; iiticks; ii++) { if (ticktxt[ii]) { int aa = Tk_TextWidth(font, ticktxt[ii], strlen(ticktxt[ii])); if (aa>ww) ww = aa; } } skipcnt = (ww+2)*opts->ticks/opts->width; } else { // vertical int total = (metrics.linespace+1)*opts->ticks; skipcnt = total/opts->height; } } int ColorbarBase::initColormap() { colorCount = (((ColorbarBaseOptions*)options)->colors); colorCells = new unsigned char[colorCount*3]; // needed to initialize colorCells reset(); return TCL_OK; } void ColorbarBase::updateColors() { updateColorCells(); // fill in xmap // make sure we have a pixmap if (!pixmap || !xmap) return; if (!((ColorbarBaseOptions*)options)->orientation) { updateColorsHorz(); TkPutImage(NULL,0,display, pixmap, widgetGC, xmap, 0, 0, 1, 1, options->width-2, ((ColorbarBaseOptions*)options)->size-2); } else { updateColorsVert(); TkPutImage(NULL,0,display, pixmap, widgetGC, xmap, 0, 0, 1, 1, ((ColorbarBaseOptions*)options)->size-2, options->height-2); } redraw(); } // X11 int ColorbarBase::updatePixmap(const BBox& bb) { if (!widgetGC) widgetGC = XCreateGC(display, Tk_WindowId(tkwin), 0, NULL); ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; if (pixmap) return TCL_OK; // create a valid pixmap // assume if no pixmap, no xmap // bb is in canvas coords if (!(pixmap = Tk_GetPixmap(display, Tk_WindowId(tkwin), options->width, options->height, depth))) { internalError("Colorbar: Unable to Create Pixmap"); return TCL_OK; } XSetForeground(display, widgetGC, getColor("white")); XFillRectangle(display, pixmap, widgetGC, 0, 0, options->width,options->height); if (!opts->orientation) { if (!(xmap = XGetImage(display, pixmap, 1, 1, options->width-2, opts->size-2, AllPlanes, ZPixmap))){ internalError("Colorbar: Unable to Create XImage"); return TCL_OK; } } else { if (!(xmap = XGetImage(display, pixmap, 1, 1, opts->size-2, options->height-2, AllPlanes, ZPixmap))){ internalError("Colorbar: Unable to Create XImage"); return TCL_OK; } } updateColors(); if (opts->numerics && opts->space) { renderGridAST(); return TCL_OK; } // we want a border, even with no numerics renderGrid(); return TCL_OK; } void ColorbarBase::renderGrid() { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; // box XSetForeground(display, widgetGC, getColor("black")); if (!opts->orientation) XDrawRectangle(display, pixmap, widgetGC, 0, 0, options->width-1, opts->size-1); else XDrawRectangle(display, pixmap, widgetGC, 0, 0, opts->size-1, options->height-1); if (opts->numerics && lut) renderGridNumerics(); } void ColorbarBase::renderGridNumerics() { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; // font Tk_Font font = getFont(); if (!font) return; // bad font, we're done Tk_FontMetrics metrics; Tk_GetFontMetrics(font, &metrics); // set font XSetFont(display, widgetGC, Tk_FontId(font)); // generate text lutToText(font); // tick marks int incrcnt=0; for (int ii=1; iiticks-1; ii++) { if (!opts->orientation) { // horizontal int ww = (int)(ii/double(opts->ticks-1)*opts->width); int h = opts->size-1; int hh = opts->size-1 + TICKLEN; XDrawLine(display, pixmap, widgetGC, ww, h, ww, hh); if (!incrcnt) { int txtwidth = Tk_TextWidth(font, ticktxt[ii], strlen(ticktxt[ii])); int www = ww - txtwidth/2.; int hhh = hh + TICKGAP + metrics.ascent; Tk_DrawChars(display, pixmap, widgetGC, font, ticktxt[ii], strlen(ticktxt[ii]), www, hhh); } } else { // vertical int w = opts->size-1; int ww = opts->size-1 + TICKLEN; int hh = opts->height - (int)(ii/double(opts->ticks-1)*opts->height); XDrawLine(display, pixmap, widgetGC, w, hh, ww, hh); if (!incrcnt) { int www = ww + TICKGAP; int hhh = hh + (metrics.ascent-metrics.descent)/2.; Tk_DrawChars(display, pixmap, widgetGC, font, ticktxt[ii], strlen(ticktxt[ii]), www, hhh); } } if (incrcnt1 && lut) { grid = new CBGrid(this, cnt, lut); if (grid) grid->render(); } } // PS int ColorbarBase::postscriptProc(int prepass) { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; if (!visible) return TCL_OK; if (prepass) return TCL_OK; // bar Tcl_AppendResult(interp, "gsave\n", NULL); ps(); Tcl_AppendResult(interp, "grestore\n", NULL); // numerics Tcl_AppendResult(interp, "gsave\n", NULL); if (opts->numerics && opts->space && grid) { psGridAST(); Tcl_AppendResult(interp, "grestore\n", NULL); return TCL_OK; } // we want a border, even if no numerics psGrid(); Tcl_AppendResult(interp, "grestore\n", NULL); return TCL_OK; } void ColorbarBase::ps() { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; int& width = options->width; int& height = options->height; int& size = opts->size; // image int ww = !opts->orientation ? width : size; int hh = !opts->orientation ? size : height; Vector org = psOrigin(); if (!opts->orientation) org += Vector(0,height-size); ostringstream str; str << org << " translate " << 1 << ' ' << 1 << " scale" << endl; switch (psLevel) { case 1: { psHead1(str, ww, hh); NoCompressAsciiHex filter(psLevel); psHV(str, filter, ww, hh); } break; case 2: { psHead2(str, ww, hh, "RunLength", "ASCII85"); RLEAscii85 filter(psLevel); psHV(str, filter, ww, hh); } break; case 3: { psHead2(str, ww, hh, "Flate", "ASCII85"); GZIPAscii85 filter(psLevel); psHV(str, filter, ww, hh); } break; } str << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } void ColorbarBase::psHV(ostream& str, Filter& filter, int width, int height) { if (!((ColorbarBaseOptions*)options)->orientation) psHorz(str, filter, width, height); else psVert(str, filter, width, height); filter.flush(str); } void ColorbarBase::psGrid() { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; int& width = options->width; int& height = options->height; int& size = opts->size; // box int ww,hh; Vector org = psOrigin(); if (!opts->orientation) { ww = width; hh = size; org += Vector(0,height-size); } else { ww = size; hh = height; } Vector ll = Vector(0,0); Vector lr = Vector(ww,0); Vector ur = Vector(ww,hh); Vector ul = Vector(0,hh); ostringstream str; str << org << " translate " << endl << "newpath " << endl << ll << " moveto" << endl << lr << " lineto" << endl << ur << " lineto" << endl << ul << " lineto" << endl << ll << " lineto" << endl << "closepath" << endl << .5 << " setlinewidth" << endl << "stroke" << endl << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); // numerics if (opts->numerics && lut) psGridNumerics(); } void ColorbarBase::psGridNumerics() { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; // font Tk_Font font = NULL; { ostringstream fstr; fstr << opts->font << ' ' << opts->fontSize << ' ' << opts->fontWeight << ' ' << opts->fontSlant << ends; font = Tk_GetFont(interp, tkwin, fstr.str().c_str()); if (!font) return; // bad font, we're done } // set font { ostringstream str; str << '/' << psFontName(opts->font, opts->fontWeight, opts->fontSlant) << " findfont " << int(opts->fontSize*getDisplayRatio()) << " scalefont setfont" << endl; Tcl_AppendResult(interp, str.str().c_str(), NULL); } // generate text lutToText(font); // tick marks int incrcnt=0; for (int ii=0; iiticks; ii++) { if (!opts->orientation) { // horizontal int ww = (int)(ii/double(opts->ticks-1)*opts->width); int h = 0; int hh = h-TICKLEN; ostringstream str; str << "newpath " << endl << Vector(ww,h) << " moveto " << endl << Vector(ww,hh) << " lineto " << endl << "closepath " << endl << .5 << " setlinewidth" << endl << "stroke" << endl << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); if (!incrcnt) { ostringstream str; Vector tt = Vector(ww,hh-TICKGAP); str << "newpath " << endl << tt << " moveto" << endl << '(' << psQuote(ticktxt[ii]) << ')' << "dup true charpath pathbbox " << endl << "closepath " << endl << "3 -1 roll sub 1.2 mul neg " << endl << "3 1 roll sub 2 div exch " << endl << tt << " moveto rmoveto show " << endl; Tcl_AppendResult(interp, str.str().c_str(), NULL); } } else { // vertical int w = opts->size; int ww = opts->size + TICKLEN; int hh = (int)(ii/double(opts->ticks-1)*opts->height); ostringstream str; str << "newpath " << endl << Vector(w,hh) << " moveto " << endl << Vector(ww,hh) << " lineto " << endl << "closepath " << endl << .5 << " setlinewidth" << endl << "stroke" << endl << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); if (!incrcnt) { ostringstream str; Vector tt = Vector(ww+TICKGAP,hh); str << "newpath " << endl << tt << " moveto" << endl << '(' << psQuote(ticktxt[ii]) << ')' << "dup true charpath pathbbox " << endl << "closepath " << endl << "3 -1 roll sub 2 div neg " << endl << "3 1 roll pop pop 0 exch " << endl << tt << " moveto rmoveto show " << endl; Tcl_AppendResult(interp, str.str().c_str(), NULL); } } if (incrcntwidth, options->height); float delta = 4*opts->fontSize; // clip rect (to remove ticks on inside) if (!opts->orientation) { oo += Vector(-delta,-.5); uu += Vector(2*delta,-.75); } else { oo += Vector(-.25,-delta); uu += Vector(0,2*delta); } Matrix mm = Translate(psOrigin()); Vector ll = oo*mm; Vector lr = Vector(uu[0],oo[1])*mm; Vector ur = uu*mm; Vector ul = Vector(oo[0],uu[1])*mm; ostringstream str; str << "newpath " << endl << ll << " moveto " << endl << lr << " lineto " << endl << ur << " lineto " << endl << ul << " lineto " << endl << ll << " lineto " << endl << "closepath clip" << endl << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); // grid if (grid) grid->ps(psColorSpace, originX, originY); } // Commands void ColorbarBase::getInvertCmd() { if (invert) Tcl_AppendResult(interp, "1", NULL); else Tcl_AppendResult(interp, "0", NULL); } void ColorbarBase::getValueCmd(int x, int y) { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; if (lut && cnt) { int id =0; ostringstream str; if (!opts->orientation) { // horizontal id = (int)(x/float(options->width) * cnt); } else { // vertical id = (int)((options->height -y)/float(options->height) * cnt); } if (id<0) id = 0; if (id>=cnt) id = cnt-1; str << lut[id] << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); } else Tcl_AppendResult(interp, NULL); } void ColorbarBase::invertCmd(int ii) { invert = ii ? 1 : 0; updateColors(); } void ColorbarBase::setColormapLevelCmd() { if (lut) delete [] lut; lut = NULL; cnt = 0; invalidPixmap(); redraw(); } void ColorbarBase::setColormapLevelCmd(int cc, double* ff) { // check for the same if (cnt == cc) { int same = 1; for (int ii=0; iiorientation) { ww = options->width; hh = opts->size; } else { ww = opts->size; hh = options->height; } // image macosx(1, ww, hh, Vector(originX,originY), Vector(ww,hh)); // grid if (opts->numerics && opts->space && grid) { macosxGridAST(); macosxEnd(); return; } // we want a border, even if no numerics macosxGrid(); macosxEnd(); } void ColorbarBase::macosxGrid() { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; int& width = options->width; int& height = options->height; int& size = opts->size; Matrix mm = Translate(originX, originY); macosxColor(getXColor("black")); macosxDash(NULL,0); macosxWidth(.5); // Box int ww,hh; if (!opts->orientation) { ww = width; hh = size; } else { ww = size; hh = height; } Vector v[5]; v[0] = Vector(0,0) * mm; v[1] = Vector(ww,0) * mm; v[2] = Vector(ww,hh) * mm; v[3] = Vector(0,hh) * mm; v[4] = Vector(0,0) * mm; macosxDrawLines(v,5); // numerics if (opts->numerics && lut) macosxGridNumerics(); } void ColorbarBase::macosxGridNumerics() { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; Matrix mm = Translate(originX, originY); // font Tk_Font font = getFont(); if (!font) return; // bad font, we're done Tk_FontMetrics metrics; Tk_GetFontMetrics(font, &metrics); // set font Tcl_DString psFont; Tcl_DStringInit(&psFont); int psSize = Tk_PostscriptFontName(font, &psFont); macosxFont(Tcl_DStringValue(&psFont), psSize); Tcl_DStringFree(&psFont); // generate text lutToText(font); // tick marks int incrcnt=0; for (int ii=0; iiticks; ii++) { if (!opts->orientation) { // horizontal int ww = (int)(ii/double(opts->ticks-1)*opts->width); int h = opts->size; int hh = opts->size + TICKLEN; Vector vv[2]; vv[0] = Vector(ww,h)*mm; vv[1] = Vector(ww,hh)*mm; macosxDrawLines(vv,2); if (!incrcnt) { int txtwidth = Tk_TextWidth(font, ticktxt[ii], strlen(ticktxt[ii])); int www = ww - txtwidth/2.; int hhh = hh + TICKGAP + metrics.ascent; macosxDrawText(Vector(www,hhh)*mm, 0, ticktxt[ii]); } } else { // vertical int w = opts->size; int ww = opts->size + TICKLEN; int hh = opts->height - (int)(ii/double(opts->ticks-1)*opts->height); Vector vv[2]; vv[0] = Vector(w,hh)*mm; vv[1] = Vector(ww,hh)*mm; macosxDrawLines(vv,2); if (!incrcnt) { int www = ww + TICKGAP; int hhh = hh + (metrics.ascent-metrics.descent)/2.; macosxDrawText(Vector(www,hhh)*mm, 0, ticktxt[ii]); } } if (incrcntwidth, options->height); float delta = 4*opts->fontSize; if (!opts->orientation) { oo += Vector(-delta,-.2); uu += Vector(2*delta,-.2); } else { oo += Vector(-.2,-delta); uu += Vector(0,2*delta); } macosxClip(oo,uu); if (grid) grid->macosx(originX, originY); } #endif // WIN32 #ifdef __WIN32 void ColorbarBase::win32PrintCmd() { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; if (!visible) return; // init win32Begin(); int ww,hh; if (!opts->orientation) { ww = options->width; hh = opts->size; } else { ww = opts->size; hh = options->height; } // image win32(1, ww, hh, Vector(originX,originY), Vector(ww,hh)); // grid if (opts->numerics && opts->space && grid) { win32GridAST(); win32End(); } // we want a border, even if no numerics win32Grid(); win32End(); } void ColorbarBase::win32Grid() { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; int& width = options->width; int& height = options->height; int& size = opts->size; Matrix mm = Translate(originX, originY); win32Color(getXColor("black")); win32Dash(NULL,0); win32Width(.5); // box int ww,hh; if (!opts->orientation) { ww = width; hh = size; } else { ww = size; hh = height; } Vector v[5]; v[0] = Vector(0,0) * mm; v[1] = Vector(ww,0) * mm; v[2] = Vector(ww,hh) * mm; v[3] = Vector(0,hh) * mm; v[4] = Vector(0,0) * mm; win32DrawLines(v,5); // numerics if (opts->numerics && lut) win32GridNumerics(); } void ColorbarBase::win32GridNumerics() { ColorbarBaseOptions* opts = (ColorbarBaseOptions*)options; Matrix mm = Translate(originX, originY); // font Tk_Font font = getFont(); if (!font) return; // bad font, we're done Tk_FontMetrics metrics; Tk_GetFontMetrics(font, &metrics); win32Font(font); // generate text lutToText(font); // tick marks int incrcnt=0; for (int ii=0; iiticks; ii++) { if (!opts->orientation) { // horizontal int ww = ii/double(opts->ticks-1)*opts->width; int h = opts->size; int hh = opts->size + TICKLEN; Vector vv[2]; vv[0] = Vector(ww,h)*mm; vv[1] = Vector(ww,hh)*mm; win32DrawLines(vv,2); if (!incrcnt) { int txtwidth = Tk_TextWidth(font, ticktxt[ii], strlen(ticktxt[ii])); int www = ww - txtwidth/2.; int hhh = hh + TICKGAP + metrics.ascent; win32DrawText(Vector(www,hhh)*mm, 0, ticktxt[ii]); } } else { // vertical int w = opts->size; int ww = opts->size + TICKLEN; int hh = opts->height - (int)(ii/double(opts->ticks-1)*opts->height); Vector vv[2]; vv[0] = Vector(w,hh)*mm; vv[1] = Vector(ww,hh)*mm; win32DrawLines(vv,2); if (!incrcnt) { int www = ww + TICKGAP; int hhh = hh + (metrics.ascent-metrics.descent)/2.; win32DrawText(Vector(www,hhh)*mm, 0, ticktxt[ii]); } } if (incrcntwidth, options->height); float delta = 4*opts->fontSize; if (!opts->orientation) { oo += Vector(-delta,-.2); uu += Vector(2*delta,-.2); } else { oo += Vector(-.2,-delta); uu += Vector(0,2*delta); } win32Clip(oo,uu); if (grid) grid->win32(originX, originY); } #endif saods9/tksao/colorbar/colorbarbase.h000644 000765 000000 00000011146 12766541474 020142 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __colorbarbase_h__ #define __colorbarbase_h__ #include "widget.h" #include #include // Widget ConfigSpecs Defines #define CONFIGORIENTATION 7 #define CONFIGSIZE 8 #define CONFIGFONT 9 #define CONFIGFONTSTYLE 10 #define CONFIGFONTSIZE 11 #define CONFIGNUMERICS 12 #define CONFIGSPACE 13 #define CONFIGTICKS 14 // ColorbarBase class CBGrid; class Filter; class ColorTag; struct ColorbarBaseOptions { Tk_Item item; // required by tk int x, y; // Coordinates of positioning point on canvas int width; // widget width int height; // widget height Tk_Anchor anchor; // Where to anchor widget relative to x,y char* cmdName; // Suggested Tcl command name char* helvetica; // name of X11 font char* courier; // name of X11 font char* times; // name of X11 font Widget* widget; // pointer to widget class int orientation; // 0-horizontal, 1-vertical int size; char* font; int fontSize; char* fontWeight; char* fontSlant; int numerics; int space; // 0-distance (linear), 1-value (AST) int ticks; int colors; int minColors; int maxColors; int privateCmap; int privateColors; }; class ColorbarBase : public Widget { friend class CBGrid; friend class ColorTag; protected: XImage* xmap; unsigned char* colorCells; int colorCount; CBGrid* grid; int cnt; double* lut; int invert; char** ticktxt; int tickcnt; int skipcnt; private: int initColormap(); Tk_Font getFont(); void lutToText(Tk_Font); void renderGrid(); void renderGridNumerics(); void renderGridAST(); void ps(); void psHV(ostream&, Filter&, int, int); void psGrid(); void psGridNumerics(); void psGridAST(); #ifdef MAC_OSX_TK void macosxGrid(); void macosxGridNumerics(); void macosxGridAST(); #endif #ifdef __WIN32 void win32Grid(); void win32GridNumerics(); void win32GridAST(); #endif protected: void invalidPixmap(); int postscriptProc(int); // generate postscript virtual void psHorz(ostream&, Filter&, int, int) =0; virtual void psVert(ostream&, Filter&, int, int) =0; virtual void reset() =0; void updateColors(); virtual void updateColorCells() =0; virtual void updateColorsHorz() =0; virtual void updateColorsVert() =0; int updatePixmap(const BBox&); #ifdef MAC_OSX_TK virtual void macosx(float, int, int, const Vector&, const Vector&) =0; #endif #ifdef __WIN32 virtual void win32(float, int, int, const Vector&, const Vector&) =0; #endif public: ColorbarBase(Tcl_Interp*, Tk_Canvas, Tk_Item*); virtual ~ColorbarBase(); virtual void adjustCmd(float, float) =0; int configure(int, const char* [], int); virtual void getBiasCmd() =0; virtual void getColorbarCmd() =0; virtual void getColormapCmd() =0; virtual void getColormapNameCmd(int) =0; virtual void getColormapFileNameCmd(int) =0; virtual void getContrastCmd() =0; virtual void getCurrentFileNameCmd() =0; virtual void getCurrentIDCmd() =0; virtual void getCurrentNameCmd() =0; void getInvertCmd(); void getNumericsCmd(); virtual void getRGBChannelCmd() =0; void getValueCmd(int,int); void invertCmd(int); virtual void listIDCmd() {} virtual void listNameCmd() {} virtual void loadCmd(const char*, const char*) {} virtual void loadCmd(const char*, const char*, const char*) {} virtual void mapCmd(char*) {} virtual void mapCmd(int) {} int parse(istringstream&); virtual void saveCmd(const char*) {} virtual void saveCmd(int, const char*) {} virtual void setColorbarCmd(int, float, float, int) {} virtual void setColorbarCmd(float, float, float, float, float, float, int) {} void setColormapLevelCmd(); void setColormapLevelCmd(int, double*); virtual void setColormapWindowCmd(char*) {} virtual void setRGBChannelCmd(const char*) {} virtual void getTagCmd() {} virtual void getTagCmd(int,int) {} virtual void tagCmd(const char*) {} virtual void tagCmd(int, const Vector&, const char*) {} virtual void tagDeleteCmd() {} virtual void tagDeleteCmd(int,int) {} virtual void tagEditBeginCmd(int,int,const char*) {} virtual void tagEditMotionCmd(int,int) {} virtual void tagEditEndCmd(int,int) {} virtual void tagLoadCmd(const char*) {} virtual void tagSaveCmd(const char*) {} #ifdef MAC_OSX_TK void macosxPrintCmd(); #endif #ifdef __WIN32 void win32PrintCmd(); #endif }; #endif saods9/tksao/colorbar/colorbarrgb.C000644 000765 000000 00000026131 12766317220 017723 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "colorbarrgb.h" #include "util.h" #include "ps.h" ColorbarRGB::ColorbarRGB(Tcl_Interp* i,Tk_Canvas c,Tk_Item* item) : ColorbarBase(i,c,item) { channel = 0; for (int i=0; i<3; i++) { bias[i] = .5; contrast[i] = 1.0; } } int ColorbarRGB::calcContrastBias(int i, float bb, float cc) { // if default (contrast = 1.0 && bias = .5) return if (fabs(bb - 0.5) < 0.0001 && fabs(cc - 1.0) < 0.0001) return i; // map i to range of 0 to 1.0 // shift by bias (if invert, bias = 1-bias) // multiply by contrast // shift to center of region // expand back to number of dynamic colors float b = invert ? 1-bb : bb; int r = (int)(((((float)i / colorCount) - b) * cc + .5 ) * colorCount); // clip to bounds if out of range if (r < 0) return 0; else if (r >= colorCount) return colorCount-1; else return r; } void ColorbarRGB::psHorz(ostream& str, Filter& filter, int width, int height) { // red for (int jj=0; jj<(int)(height/3.); jj++) { for (int ii=0; iiorientation) { // blue for (int jj=0; jj<(int)(height/3.); jj++) for (int ii=0; iiorientation) { // blue for (int jj=0; jj<(int)(height/3.); jj++) { for (int ii=0; iiconfigure(argc, (const char**)argv, 0) != TCL_OK) { delete colorbar; Tcl_AppendResult(interp, " error occured while creating colorbar.", NULL); return TCL_ERROR; } return TCL_OK; } // ColorbarRGBTrueColor16 ColorbarRGBTrueColor16::ColorbarRGBTrueColor16(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : ColorbarRGB(i,c,item), TrueColor16(visual) { configSpecs = colorbarRGBTrueColor16Specs; // colorbar configure options } void ColorbarRGBTrueColor16::updateColorsHorz() { int width = options->width-2; int height = ((ColorbarBaseOptions*)options)->size-2; char* data = xmap->data; // if we have cross platforms, we need to byte swap unsigned char row[xmap->bytes_per_line]; if ((!xmap->byte_order && lsb()) || (xmap->byte_order && !lsb())) { // red for (int ii=0; ii0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); memcpy(row+ii*2, &a, 2); } for (int jj=0; jj<(int)(height/3.); jj++) memcpy(data+(jj*xmap->bytes_per_line), row, xmap->bytes_per_line); // green for (int ii=0; ii0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); memcpy(row+ii*2, &a, 2); } for (int jj=(int)(height/3.); jj<(int)(height*2/3.); jj++) memcpy(data+(jj*xmap->bytes_per_line), row, xmap->bytes_per_line); // blue for (int ii=0; ii0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); memcpy(row+ii*2, &a, 2); } for (int jj=(int)(height*2/3.); jjbytes_per_line), row, xmap->bytes_per_line); } else { // red for (int ii=0; ii0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); unsigned char* rr = (unsigned char*)(&a); *(row+ii*2) = *(rr+1); *(row+ii*2+1) = *(rr); } for (int jj=0; jj<(int)(height/3.); jj++) memcpy(data+(jj*xmap->bytes_per_line), row, xmap->bytes_per_line); // green for (int ii=0; ii0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); unsigned char* rr = (unsigned char*)(&a); *(row+ii*2) = *(rr+1); *(row+ii*2+1) = *(rr); } for (int jj=(int)(height/3.); jj<(int)(height*2/3.); jj++) memcpy(data+(jj*xmap->bytes_per_line), row, xmap->bytes_per_line); // blue for (int ii=0; ii0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); unsigned char* rr = (unsigned char*)(&a); *(row+ii*2) = *(rr+1); *(row+ii*2+1) = *(rr); } for (int jj=(int)(height*2/3.); jjbytes_per_line), row, xmap->bytes_per_line); } } void ColorbarRGBTrueColor16::updateColorsVert() { int width = ((ColorbarBaseOptions*)options)->size-2; int height = options->height-2; char* data = xmap->data; // if we have cross platforms, we need to byte swap if ((!xmap->byte_order && lsb()) || (xmap->byte_order && !lsb())) { for (int jj=height-1; jj>=0; jj--, data+=xmap->bytes_per_line) { // red { unsigned short r = colorCells[((int)(double(jj)/height*colorCount))*3]; unsigned short a = 0; a |= rs_>0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); for (int ii=0; ii<(int)(width/3.); ii++) memcpy(data+ii*2, &a, 2); } // green { unsigned short g =colorCells[((int)(double(jj)/height*colorCount))*3+1]; unsigned short a = 0; a |= gs_>0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); for (int ii=(int)(width/3.); ii<(int)(width*2/3.); ii++) memcpy(data+ii*2, &a, 2); } // blue { unsigned short b =colorCells[((int)(double(jj)/height*colorCount))*3+2]; unsigned short a = 0; a |= bs_>0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); for (int ii=(int)(width*2/3.); ii=0; jj--, data+=xmap->bytes_per_line) { // red { unsigned short r = colorCells[((int)(double(jj)/height*colorCount))*3]; unsigned short a = 0; a |= rs_>0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); unsigned char* rr = (unsigned char*)(&a); for (int ii=0; ii<(int)(width/3.); ii++) { *(data+ii*2) = *(rr+1); *(data+ii*2+1) = *(rr); } } // green { unsigned short g =colorCells[((int)(double(jj)/height*colorCount))*3+1]; unsigned short a = 0; a |= gs_>0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); unsigned char* rr = (unsigned char*)(&a); for (int ii=(int)(width/3.); ii<(int)(width*2/3.); ii++) { *(data+ii*2) = *(rr+1); *(data+ii*2+1) = *(rr); } } // blue { unsigned short b =colorCells[((int)(double(jj)/height*colorCount))*3+2]; unsigned short a = 0; a |= bs_>0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); unsigned char* rr = (unsigned char*)(&a); for (int ii=(int)(width*2/3.); iiconfigure(argc, (const char**)argv, 0) != TCL_OK) { delete colorbar; Tcl_AppendResult(interp, " error occured while creating colorbar.", NULL); return TCL_ERROR; } return TCL_OK; } // ColorbarRGBTrueColor24 ColorbarRGBTrueColor24::ColorbarRGBTrueColor24(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : ColorbarRGB(i,c,item), TrueColor24(visual) { configSpecs = colorbarRGBTrueColor24Specs; // colorbar configure options } void ColorbarRGBTrueColor24::updateColorsHorz() { int width = options->width-2; int height = ((ColorbarBaseOptions*)options)->size-2; char* data = xmap->data; switch (xmap->bits_per_pixel) { case 32: updateColors32Horz(width, height, data); break; case 24: updateColors24Horz(width, height, data); break; default: internalError("Colorbar: bad bits/pixel"); return; } } void ColorbarRGBTrueColor24::updateColorsVert() { int width = ((ColorbarBaseOptions*)options)->size-2; int height = options->height-2; char* data = xmap->data; switch (xmap->bits_per_pixel) { case 32: updateColors32Vert(width, height, data); break; case 24: updateColors24Vert(width, height, data); break; default: internalError("Colorbar: bad bits/pixel"); return; } } void ColorbarRGBTrueColor24::updateColors24Horz(int width, int height, char* data) { // if we have cross platforms, we need to byte swap unsigned char row[xmap->bytes_per_line]; if ((!xmap->byte_order && lsb()) || (xmap->byte_order && !lsb())) { // red for (int ii=0; iibytes_per_line), row, xmap->bytes_per_line); // green for (int ii=0; iibytes_per_line), row, xmap->bytes_per_line); // blue for (int ii=0; iibytes_per_line), row, xmap->bytes_per_line); } else { // red for (int ii=0; iibytes_per_line), row, xmap->bytes_per_line); // green for (int ii=0; iibytes_per_line), row, xmap->bytes_per_line); // blue for (int ii=0; iibytes_per_line), row, xmap->bytes_per_line); } } void ColorbarRGBTrueColor24::updateColors24Vert(int width, int height, char* data) { // if we have cross platforms, we need to byte swap if ((!xmap->byte_order && lsb()) || (xmap->byte_order && !lsb())) { for (int jj=height-1; jj>=0; jj--, data+=xmap->bytes_per_line) { // red { unsigned int r = colorCells[(int)(double(jj)/height*colorCount)*3]; unsigned int a = 0; a |= r << rs_; for (int ii=0; ii<(int)(width/3.); ii++) memcpy(data+ii*3, &a, 3); } // green { unsigned int g = colorCells[(int)(double(jj)/height*colorCount)*3+1]; unsigned int a = 0; a |= g << gs_; for (int ii=(int)(width/3.); ii<(int)(width*2/3.); ii++) memcpy(data+ii*3, &a, 3); } // blue { unsigned int b = colorCells[(int)(double(jj)/height*colorCount)*3+2]; unsigned int a = 0; a |= b << bs_; for (int ii=(int)(width*2/3.); ii=0; jj--, data+=xmap->bytes_per_line) { // red { unsigned int r = colorCells[(int)(double(jj)/height*colorCount)*3]; unsigned int a = 0; a |= r << rs_; unsigned char* rr = (unsigned char*)(&a); for (int ii=0; ii<(int)(width/3.); ii++) { *(data+ii*3) = *(rr+3); *(data+ii*3+1) = *(rr+2); *(data+ii*3+2) = *(rr+1); } } // green { unsigned int g = colorCells[(int)(double(jj)/width*colorCount)*3+1]; unsigned int a = 0; a |= g << gs_; unsigned char* rr = (unsigned char*)(&a); for (int ii=(int)(width/3.); ii<(int)(width*2/3.); ii++) { *(data+ii*3) = *(rr+3); *(data+ii*3+1) = *(rr+2); *(data+ii*3+2) = *(rr+1); } } // blue { unsigned int b = colorCells[(int)(double(jj)/width*colorCount)*3+2]; unsigned int a = 0; a |= b << bs_; unsigned char* rr = (unsigned char*)(&a); for (int ii=(int)(width*2/3.); iibytes_per_line]; if ((!xmap->byte_order && lsb()) || (xmap->byte_order && !lsb())) { // red for (int ii=0; iibytes_per_line), row, xmap->bytes_per_line); // green for (int ii=0; iibytes_per_line), row, xmap->bytes_per_line); // blue for (int ii=0; iibytes_per_line), row, xmap->bytes_per_line); } else { // red for (int i=0; ibytes_per_line), row, xmap->bytes_per_line); // green for (int i=0; ibytes_per_line), row, xmap->bytes_per_line); // blue for (int i=0; ibytes_per_line), row, xmap->bytes_per_line); } } void ColorbarRGBTrueColor24::updateColors32Vert(int width, int height, char* data) { // if we have cross platforms, we need to byte swap if ((!xmap->byte_order && lsb()) || (xmap->byte_order && !lsb())) { for (int jj=height-1; jj>=0; jj--, data+=xmap->bytes_per_line) { // red { unsigned int r = colorCells[(int)(double(jj)/height*colorCount)*3]; unsigned int a = 0; #ifdef MAC_OSX_TK a |= 0xff << 24; #endif a |= r << rs_; for (int ii=0; ii<(int)(width/3.); ii++) memcpy(data+ii*4, &a, 4); } // green { unsigned int g = colorCells[(int)(double(jj)/height*colorCount)*3+1]; unsigned int a = 0; #ifdef MAC_OSX_TK a |= 0xff << 24; #endif a |= g << gs_; for (int ii=(int)(width/3.); ii<(int)(width*2/3.); ii++) memcpy(data+ii*4, &a, 4); } // blue { unsigned int b = colorCells[(int)(double(jj)/height*colorCount)*3+2]; unsigned int a = 0; #ifdef MAC_OSX_TK a |= 0xff << 24; #endif a |= b << bs_; for (int ii=(int)(width*2/3.); ii=0; jj--, data+=xmap->bytes_per_line) { // red { unsigned int r = colorCells[(int)(double(jj)/height*colorCount)*3]; unsigned int a = 0; #ifdef MAC_OSX_TK a |= 0xff << 24; #endif a |= r << rs_; unsigned char* rr = (unsigned char*)(&a); for (int ii=0; ii<(int)(width/3.); ii++) { *(data+ii*4) = *(rr+3); *(data+ii*4+1) = *(rr+2); *(data+ii*4+2) = *(rr+1); *(data+ii*4+3) = *(rr); } } // green { unsigned int g = colorCells[(int)(double(jj)/height*colorCount)*3+1]; unsigned int a = 0; #ifdef MAC_OSX_TK a |= 0xff << 24; #endif a |= g << gs_; unsigned char* rr = (unsigned char*)(&a); for (int ii=(int)(width/3.); ii<(int)(width*2/3.); ii++) { *(data+ii*4) = *(rr+3); *(data+ii*4+1) = *(rr+2); *(data+ii*4+2) = *(rr+1); *(data+ii*4+3) = *(rr); } } // blue { unsigned int b = colorCells[(int)(double(jj)/height*colorCount)*3+2]; unsigned int a = 0; #ifdef MAC_OSX_TK a |= 0xff << 24; #endif a |= b << bs_; unsigned char* rr = (unsigned char*)(&a); for (int ii=(int)(width*2/3.); iiconfigure(argc, (const char**)argv, 0) != TCL_OK) { delete colorbar; Tcl_AppendResult(interp, " error occured while creating colorbar.", NULL); return TCL_ERROR; } return TCL_OK; } // ColorbarRGBTrueColor8 ColorbarRGBTrueColor8::ColorbarRGBTrueColor8(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : ColorbarRGB(i,c,item), TrueColor8(visual) { configSpecs = colorbarRGBTrueColor8Specs; // colorbar configure options } void ColorbarRGBTrueColor8::updateColorsHorz() { int width = options->width-2; int height = ((ColorbarBaseOptions*)options)->size-2; char* data = xmap->data; unsigned char row[xmap->bytes_per_line]; // red for (int ii=0; ii> rs_; } for (int jj=0; jj<(int)(height/3.); jj++) memcpy(data+(jj*xmap->bytes_per_line), row, xmap->bytes_per_line); // green for (int ii=0; ii> gs_; } for (int jj=(int)(height/3.); jj<(int)(height*2/3.); jj++) memcpy(data+(jj*xmap->bytes_per_line), row, xmap->bytes_per_line); // blue for (int ii=0; ii> bs_; } for (int jj=(int)(height*2/3.); jjbytes_per_line), row, xmap->bytes_per_line); } void ColorbarRGBTrueColor8::updateColorsVert() { int width = ((ColorbarBaseOptions*)options)->size-2; int height = options->height-2; char* data = xmap->data; for (int jj=height-1; jj>=0; jj--, data+=xmap->bytes_per_line) { // red { char r = colorCells[((int)(double(jj)/height*colorCount))*3]; char a = (r & rm_) >> rs_; for (int ii=0; ii<(int)(width/3.); ii++) data[ii] = a; } // green { char g = colorCells[((int)(double(jj)/height*colorCount))*3+1]; char a = (g & gm_) >> gs_; for (int ii=(int)(width/3.); ii<(int)(width*2/3.); ii++) data[ii] = a; } // blue { char b =colorCells[((int)(double(jj)/height*colorCount))*3+2]; char a = (b & bm_) >> bs_; for (int ii=(int)(width*2/3.); iiconfigure(argc, (const char**)argv, 0) != TCL_OK) { delete colorbar; Tcl_AppendResult(interp, " error occured while creating colorbar.", NULL); return TCL_ERROR; } return TCL_OK; } // ColorbarTrueColor16 ColorbarTrueColor16::ColorbarTrueColor16(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Colorbar(i,c,item), TrueColor16(visual) { configSpecs = colorbarTrueColor16Specs; // colorbar configure options loadDefaultCMaps(); } void ColorbarTrueColor16::updateColorsHorz() { int width = options->width-2; int height = ((ColorbarBaseOptions*)options)->size-2; char* data = xmap->data; // if we have cross platforms, we need to byte swap if ((!xmap->byte_order && lsb()) || (xmap->byte_order && !lsb())) { for (int ii=0; ii0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); a |= gs_>0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); a |= bs_>0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); memcpy(data+ii*2, &a, 2); } } else { for (int ii=0; ii0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); a |= gs_>0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); a |= bs_>0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); unsigned char* rr = (unsigned char*)(&a); *(data+ii*2) = *(rr+1); *(data+ii*2+1) = *(rr); } } // --and duplicate for remaining rows for (int jj=1; jjbytes_per_line), data, xmap->bytes_per_line); } void ColorbarTrueColor16::updateColorsVert() { int width = ((ColorbarBaseOptions*)options)->size-2; int height = options->height-2; char* data = xmap->data; // if we have cross platforms, we need to byte swap if ((!xmap->byte_order && lsb()) || (xmap->byte_order && !lsb())) { for (int jj=height-1; jj>=0; jj--, data+=xmap->bytes_per_line) { unsigned short r = colorCells[((int)(double(jj)/height*colorCount))*3+2]; unsigned short g = colorCells[((int)(double(jj)/height*colorCount))*3+1]; unsigned short b = colorCells[((int)(double(jj)/height*colorCount))*3]; unsigned short a = 0; a |= rs_>0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); a |= gs_>0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); a |= bs_>0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); for (int ii=0; ii=0; jj--, data+=xmap->bytes_per_line) { unsigned short r = colorCells[((int)(double(jj)/height*colorCount))*3+2]; unsigned short g = colorCells[((int)(double(jj)/height*colorCount))*3+1]; unsigned short b = colorCells[((int)(double(jj)/height*colorCount))*3]; unsigned short a = 0; a |= rs_>0 ? ((r & rm_) << rs_) : ((r & rm_) >> -rs_); a |= gs_>0 ? ((g & gm_) << gs_) : ((g & gm_) >> -gs_); a |= bs_>0 ? ((b & bm_) << bs_) : ((b & bm_) >> -bs_); unsigned char* rr = (unsigned char*)(&a); for (int ii=0; iiconfigure(argc, (const char**)argv, 0) != TCL_OK) { delete colorbar; Tcl_AppendResult(interp, " error occured while creating colorbar.", NULL); return TCL_ERROR; } return TCL_OK; } // ColorbarTrueColor24 ColorbarTrueColor24::ColorbarTrueColor24(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Colorbar(i,c,item), TrueColor24(visual) { configSpecs = colorbarTrueColor24Specs; // colorbar configure options loadDefaultCMaps(); } void ColorbarTrueColor24::updateColorsHorz() { int width = options->width-2; int height = ((ColorbarBaseOptions*)options)->size-2; char* data = xmap->data; switch (xmap->bits_per_pixel) { case 32: updateColors32Horz(width, height, data); break; case 24: updateColors24Horz(width, height, data); break; default: internalError("Colorbar: bad bits/pixel"); return; } } void ColorbarTrueColor24::updateColorsVert() { int width = ((ColorbarBaseOptions*)options)->size-2; int height = options->height-2; char* data = xmap->data; switch (xmap->bits_per_pixel) { case 32: updateColors32Vert(width, height, data); break; case 24: updateColors24Vert(width, height, data); break; default: internalError("Colorbar: bad bits/pixel"); return; } } void ColorbarTrueColor24::updateColors24Horz(int width, int height, char* data) { // if we have cross platforms, we need to byte swap if ((!xmap->byte_order && lsb()) || (xmap->byte_order && !lsb())) { for (int ii=0; iibytes_per_line), data, xmap->bytes_per_line); } void ColorbarTrueColor24::updateColors24Vert(int width, int height, char* data) { // if we have cross platforms, we need to byte swap if ((!xmap->byte_order && lsb()) || (xmap->byte_order && !lsb())) { for (int jj=height-1; jj>=0; jj--, data+=xmap->bytes_per_line) { unsigned int r = colorCells[(int)(double(jj)/height*colorCount)*3+2]; unsigned int g = colorCells[(int)(double(jj)/height*colorCount)*3+1]; unsigned int b = colorCells[(int)(double(jj)/height*colorCount)*3]; unsigned int a = 0; a |= r << rs_; a |= g << gs_; a |= b << bs_; for (int ii=0; ii=0; jj--, data+=xmap->bytes_per_line) { unsigned int r = colorCells[(int)(double(jj)/height*colorCount)*3+2]; unsigned int g = colorCells[(int)(double(jj)/height*colorCount)*3+1]; unsigned int b = colorCells[(int)(double(jj)/height*colorCount)*3]; unsigned int a = 0; a |= r << rs_; a |= g << gs_; a |= b << bs_; unsigned char* rr = (unsigned char*)(&a); for (int ii=0; iibyte_order && lsb()) || (xmap->byte_order && !lsb())) { for (int ii=0; iibytes_per_line), data, xmap->bytes_per_line); } void ColorbarTrueColor24::updateColors32Vert(int width, int height, char* data) { // if we have cross platforms, we need to byte swap if ((!xmap->byte_order && lsb()) || (xmap->byte_order && !lsb())) { for (int jj=height-1; jj>=0; jj--, data+=xmap->bytes_per_line) { unsigned int r = colorCells[(int)(double(jj)/height*colorCount)*3+2]; unsigned int g = colorCells[(int)(double(jj)/height*colorCount)*3+1]; unsigned int b = colorCells[(int)(double(jj)/height*colorCount)*3]; unsigned int a = 0; #ifdef MAC_OSX_TK a |= 0xff << 24; #endif a |= r << rs_; a |= g << gs_; a |= b << bs_; for (int ii=0; ii=0; jj--, data+=xmap->bytes_per_line) { unsigned int r = colorCells[(int)(double(jj)/height*colorCount)*3+2]; unsigned int g = colorCells[(int)(double(jj)/height*colorCount)*3+1]; unsigned int b = colorCells[(int)(double(jj)/height*colorCount)*3]; unsigned int a = 0; #ifdef MAC_OSX_TK a |= 0xff << 24; #endif a |= r << rs_; a |= g << gs_; a |= b << bs_; unsigned char* rr = (unsigned char*)(&a); for (int ii=0; iiconfigure(argc, (const char**)argv, 0) != TCL_OK) { delete colorbar; Tcl_AppendResult(interp, " error occured while creating colorbar.", NULL); return TCL_ERROR; } return TCL_OK; } // ColorbarTrueColor8 ColorbarTrueColor8::ColorbarTrueColor8(Tcl_Interp* i, Tk_Canvas c, Tk_Item* item) : Colorbar(i,c,item), TrueColor8(visual) { configSpecs = colorbarTrueColor8Specs; // colorbar configure options loadDefaultCMaps(); } void ColorbarTrueColor8::updateColorsHorz() { int width = options->width-2; int height = ((ColorbarBaseOptions*)options)->size-2; char* data = xmap->data; for (int ii=0; ii> bs_) | ((colorCells[((int)(double(ii)/width*colorCount))*3+1] & gm_) >> gs_) | ((colorCells[((int)(double(ii)/width*colorCount))*3+2] & rm_) >> rs_); // --and duplicate for remaining rows for (int jj=1; jjbytes_per_line), data, xmap->bytes_per_line); } void ColorbarTrueColor8::updateColorsVert() { int width = ((ColorbarBaseOptions*)options)->size-2; int height = options->height-2; char* data = xmap->data; for (int jj=height-1; jj>=0; jj--, data+=xmap->bytes_per_line) { char a = ((colorCells[((int)(double(jj)/height*colorCount))*3] & bm_) >> bs_) | ((colorCells[((int)(double(jj)/height*colorCount))*3+1] & gm_) >> gs_) | ((colorCells[((int)(double(jj)/height*colorCount))*3+2] & rm_) >> rs_); for (int ii=0; ii #include #include #include #include #include #include using namespace std; class Colorbar; // ColorMapInfo class ColorMapInfo { protected: Colorbar* parent_; int id; char* name; char* fileName; ColorMapInfo* next_; ColorMapInfo* previous_; public: ColorMapInfo(Colorbar* p); virtual ~ColorMapInfo(); Colorbar* parent() {return parent_;} const char* getName() {return name;} int getID() {return id;} void setName(const char*); const char* getFileName() {return fileName;} void setFileName(const char*); ColorMapInfo* next() {return next_;} ColorMapInfo* previous() {return previous_;} void setNext(ColorMapInfo* n) {next_ = n;} void setPrevious(ColorMapInfo* p) {previous_=p;} virtual ColorMapInfo* dup() =0; virtual int load() =0; virtual int load(const char*) =0; virtual void save(const char*) =0; virtual unsigned char getRedChar(int, int) =0; virtual unsigned char getGreenChar(int, int) =0; virtual unsigned char getBlueChar(int, int) =0; virtual unsigned short getRedShrt(int, int) =0; virtual unsigned short getGreenShrt(int, int) =0; virtual unsigned short getBlueShrt(int, int) =0; }; #endif saods9/tksao/colorbar/colortag.C000644 000765 000000 00000002523 12705446130 017232 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "colortag.h" #include "colorbar.h" #include "util.h" static int colorTagSeqID = 1; ColorTag::ColorTag(Colorbar* p, int b, int e, const char* clr) : parent_(p), start_(b), stop_(e) { id_ = colorTagSeqID++; colorname_ = dupstr(clr); color_ = parent_->getXColor(colorname_); next_ =NULL; previous_ =NULL; } ColorTag::~ColorTag() { if (colorname_) delete [] colorname_; } void ColorTag::move(int xx, int yy) { int aa = start_+xx; int bb = stop_+yy; if (aa>=bb-20) bb = aa+20; if (bb>parent_->colorCount) { bb = parent_->colorCount; aa = parent_->colorCount - (stop_-start_); } if (aa<0) { aa = 0; bb = stop_-start_; } start_ =aa; stop_ =bb; } void ColorTag::set(int start, int stop, const char* color) { start_ = start; stop_ = stop; if (colorname_) delete [] colorname_; colorname_ = dupstr(color); color_ = parent_->getXColor(colorname_); } void ColorTag::width(int size) { int aa = start_-size/2; int bb = stop_+size/2; if (bb>parent_->colorCount) { bb = parent_->colorCount; aa = parent_->colorCount - size; } if (aa<0) { aa = 0; bb = size; } start_ =aa; stop_ =bb; } saods9/tksao/colorbar/colortag.h000644 000765 000000 00000002442 12705446130 017277 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __colortag_h__ #define __colortag_h__ #include #include #include #include #include #include #include using namespace std; #include #include class Colorbar; class ColorTag { protected: int id_; Colorbar* parent_; const char* colorname_; XColor* color_; int start_; int stop_; ColorTag* next_; ColorTag* previous_; public: ColorTag(Colorbar*, int, int, const char*); virtual ~ColorTag(); int id() {return id_;} Colorbar* parent() {return parent_;} int start() {return start_;} int stop() {return stop_;} const char* colorname() {return colorname_;} void move(int,int); void set(int,int,const char*); void width(int); unsigned short colorRed() {return color_ ? color_->red : 0;} unsigned short colorGreen() {return color_ ? color_->green : 0;} unsigned short colorBlue() {return color_ ? color_->blue : 0;} ColorTag* next() {return next_;} ColorTag* previous() {return previous_;} void setNext(ColorTag* n) {next_ = n;} void setPrevious(ColorTag* p) {previous_=p;} }; #endif saods9/tksao/colorbar/default.C000644 000765 000000 00000053574 12705446130 017060 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include "default.h" #include "util.h" GreyColorMap::GreyColorMap(Colorbar* p) : SAOColorMap(p) { name = dupstr("grey"); fileName = dupstr("grey.sao"); red.append(new LIColor(0,0)); red.append(new LIColor(1,1)); green.append(new LIColor(0,0)); green.append(new LIColor(1,1)); blue.append(new LIColor(0,0)); blue.append(new LIColor(1,1)); } RedColorMap::RedColorMap(Colorbar* p) : SAOColorMap(p) { name = dupstr("red"); fileName = dupstr("red.sao"); red.append(new LIColor(0,0)); red.append(new LIColor(1,1)); green.append(new LIColor(0,0)); green.append(new LIColor(0,0)); blue.append(new LIColor(0,0)); blue.append(new LIColor(0,0)); } GreenColorMap::GreenColorMap(Colorbar* p) : SAOColorMap(p) { name = dupstr("green"); fileName = dupstr("green.sao"); red.append(new LIColor(0,0)); red.append(new LIColor(0,0)); green.append(new LIColor(0,0)); green.append(new LIColor(1,1)); blue.append(new LIColor(0,0)); blue.append(new LIColor(0,0)); } BlueColorMap::BlueColorMap(Colorbar* p) : SAOColorMap(p) { name = dupstr("blue"); fileName = dupstr("blue.sao"); red.append(new LIColor(0,0)); red.append(new LIColor(0,0)); green.append(new LIColor(0,0)); green.append(new LIColor(0,0)); blue.append(new LIColor(0,0)); blue.append(new LIColor(1,1)); } AColorMap::AColorMap(Colorbar* p) : SAOColorMap(p) { name = dupstr("a"); fileName = dupstr("a.sao"); red.append(new LIColor(0,0)); red.append(new LIColor(.25,0)); red.append(new LIColor(.5,1)); red.append(new LIColor(1,1)); green.append(new LIColor(0,0)); green.append(new LIColor(.25,1)); green.append(new LIColor(.5,0)); green.append(new LIColor(.77,0)); green.append(new LIColor(1,1)); blue.append(new LIColor(0,0)); blue.append(new LIColor(.125,0)); blue.append(new LIColor(.5,1)); blue.append(new LIColor(.64,.5)); blue.append(new LIColor(.77,0)); blue.append(new LIColor(1,0)); } BColorMap::BColorMap(Colorbar* p) : SAOColorMap(p) { name = dupstr("b"); fileName = dupstr("b.sao"); red.append(new LIColor(0,0)); red.append(new LIColor(.25,0)); red.append(new LIColor(.5,1)); red.append(new LIColor(1,1)); green.append(new LIColor(0,0)); green.append(new LIColor(.5,0)); green.append(new LIColor(.75,1)); green.append(new LIColor(1,1)); blue.append(new LIColor(0,0)); blue.append(new LIColor(.25,1)); blue.append(new LIColor(.5,0)); blue.append(new LIColor(.75,0)); blue.append(new LIColor(1,1)); } BBColorMap::BBColorMap(Colorbar* p) : SAOColorMap(p) { name = dupstr("bb"); fileName = dupstr("bb.sao"); red.append(new LIColor(0,0)); red.append(new LIColor(.5,1)); red.append(new LIColor(1,1)); green.append(new LIColor(0,0)); green.append(new LIColor(.25,0)); green.append(new LIColor(.75,1)); green.append(new LIColor(1,1)); blue.append(new LIColor(0,0)); blue.append(new LIColor(.5,0)); blue.append(new LIColor(1,1)); } HEColorMap::HEColorMap(Colorbar* p) : SAOColorMap(p) { name = dupstr("he"); fileName = dupstr("he.sao"); red.append(new LIColor(0,0)); red.append(new LIColor(.015,.5)); red.append(new LIColor(.25,.5)); red.append(new LIColor(.5,.75)); red.append(new LIColor(1,1)); green.append(new LIColor(0,0)); green.append(new LIColor(.065,0)); green.append(new LIColor(.125,.5)); green.append(new LIColor(.25,.75)); green.append(new LIColor(.5,.81)); green.append(new LIColor(1,1)); blue.append(new LIColor(0,0)); blue.append(new LIColor(.015,.125)); blue.append(new LIColor(.03,.375)); blue.append(new LIColor(.065,.625)); blue.append(new LIColor(.25,.25)); blue.append(new LIColor(1,1)); } I8ColorMap::I8ColorMap(Colorbar* p) : LUTColorMap(p) { name = dupstr("i8"); fileName = dupstr("i8.lut"); colors.append(new RGBColor(0,0,0)); colors.append(new RGBColor(0,1,0)); colors.append(new RGBColor(0,0,1)); colors.append(new RGBColor(0,1,1)); colors.append(new RGBColor(1,0,0)); colors.append(new RGBColor(1,1,0)); colors.append(new RGBColor(1,0,1)); colors.append(new RGBColor(1,1,1)); } AIPSColorMap::AIPSColorMap(Colorbar* p) : LUTColorMap(p) { name = dupstr("aips0"); fileName = dupstr("aips0.lut"); colors.append(new RGBColor(.196,.196,.196)); colors.append(new RGBColor(.475,.000,.608)); colors.append(new RGBColor(.000,.000,.785)); colors.append(new RGBColor(.373,.655,.925)); colors.append(new RGBColor(.000,.596,.000)); colors.append(new RGBColor(.000,.965,.000)); colors.append(new RGBColor(1.00,1.00,.000)); colors.append(new RGBColor(1.00,.694,.000)); colors.append(new RGBColor(1.00,.000,.000)); } HeatColorMap::HeatColorMap(Colorbar* p) : SAOColorMap(p) { name = dupstr("heat"); fileName = dupstr("heat.sao"); red.append(new LIColor(0,0)); red.append(new LIColor(.34,1)); red.append(new LIColor(1,1)); green.append(new LIColor(0,0)); green.append(new LIColor(1,1)); blue.append(new LIColor(0,0)); blue.append(new LIColor(.65,0)); blue.append(new LIColor(.98,1)); blue.append(new LIColor(1,1)); } CoolColorMap::CoolColorMap(Colorbar* p) : SAOColorMap(p) { name = dupstr("cool"); fileName = dupstr("cool.sao"); red.append(new LIColor(0,0)); red.append(new LIColor(.29,0)); red.append(new LIColor(.76,.1)); red.append(new LIColor(1,1)); green.append(new LIColor(0,0)); green.append(new LIColor(.22,0)); green.append(new LIColor(.96,1)); green.append(new LIColor(1,1)); blue.append(new LIColor(0,0)); blue.append(new LIColor(.53,1)); blue.append(new LIColor(1,1)); } RainbowColorMap::RainbowColorMap(Colorbar* p) : SAOColorMap(p) { name = dupstr("rainbow"); fileName = dupstr("rainbow.sao"); red.append(new LIColor(0,1)); red.append(new LIColor(.2,0)); red.append(new LIColor(.6,0)); red.append(new LIColor(.8,1)); red.append(new LIColor(1,1)); green.append(new LIColor(0,0)); green.append(new LIColor(.2,0)); green.append(new LIColor(.4,1)); green.append(new LIColor(.8,1)); green.append(new LIColor(1,0)); blue.append(new LIColor(0,1)); blue.append(new LIColor(.4,1)); blue.append(new LIColor(.6,0)); blue.append(new LIColor(1,0)); } StandardColorMap::StandardColorMap(Colorbar* p) : SAOColorMap(p) { name = dupstr("standard"); fileName = dupstr("standard.sao"); red.append(new LIColor(0,0)); red.append(new LIColor(.333,.3)); red.append(new LIColor(.333,0)); red.append(new LIColor(.666,.3)); red.append(new LIColor(.666,.3)); red.append(new LIColor(1,1)); green.append(new LIColor(0,0)); green.append(new LIColor(.333,.3)); green.append(new LIColor(.333,.3)); green.append(new LIColor(.666,1)); green.append(new LIColor(.666,0)); green.append(new LIColor(1,.3)); blue.append(new LIColor(0,0)); blue.append(new LIColor(.333,1)); blue.append(new LIColor(.333,0)); blue.append(new LIColor(.666,.3)); blue.append(new LIColor(.666,0)); blue.append(new LIColor(1,.3)); } StaircaseColorMap::StaircaseColorMap(Colorbar* p) : LUTColorMap(p) { name = dupstr("staircase"); fileName = dupstr("staircase.lut"); for (int ii=1; ii<=5; ii++) { float kk = ii/5.; colors.append(new RGBColor(kk*.3,kk*.3,kk*1)); } for (int ii=1; ii<=5; ii++) { float kk = ii/5.; colors.append(new RGBColor(kk*.3,kk*1,kk*.3)); } for (int ii=1; ii<=5; ii++) { float kk = ii/5.; colors.append(new RGBColor(kk*1,kk*.3,kk*.3)); } } ColorColorMap::ColorColorMap(Colorbar* p) : LUTColorMap(p) { name = dupstr("color"); fileName = dupstr("color.lut"); colors.append(new RGBColor(0,0,0)); colors.append(new RGBColor(0.18431, 0.18431, 0.18431)); colors.append(new RGBColor(0.37255, 0.37255, 0.37255)); colors.append(new RGBColor(0.56078, 0.56078, 0.56078)); colors.append(new RGBColor(0.74902, 0.74902, 0.74902)); colors.append(new RGBColor(0.93725, 0.93725, 0.93725)); colors.append(new RGBColor(0.00000, 0.18431, 0.93725)); colors.append(new RGBColor(0.00000, 0.37255, 0.74902)); colors.append(new RGBColor(0.00000, 0.49804, 0.49804)); colors.append(new RGBColor(0.00000, 0.74902, 0.30980)); colors.append(new RGBColor(0.00000, 0.93725, 0.00000)); colors.append(new RGBColor(0.30980, 0.62353, 0.00000)); colors.append(new RGBColor(0.49804, 0.49804, 0.00000)); colors.append(new RGBColor(0.62353, 0.30980, 0.00000)); colors.append(new RGBColor(0.93725, 0.00000, 0.00000)); colors.append(new RGBColor(0.74902, 0.00000, 0.30980)); } SLSColorMap::SLSColorMap(Colorbar* p) : LUTColorMap(p) { name = dupstr("sls"); fileName = dupstr("sls.lut"); colors.append(new RGBColor(0.000000, 0.000000, 0.000000)); colors.append(new RGBColor(0.043442, 0.000000, 0.052883)); colors.append(new RGBColor(0.086883, 0.000000, 0.105767)); colors.append(new RGBColor(0.130325, 0.000000, 0.158650)); colors.append(new RGBColor(0.173767, 0.000000, 0.211533)); colors.append(new RGBColor(0.217208, 0.000000, 0.264417)); colors.append(new RGBColor(0.260650, 0.000000, 0.317300)); colors.append(new RGBColor(0.304092, 0.000000, 0.370183)); colors.append(new RGBColor(0.347533, 0.000000, 0.423067)); colors.append(new RGBColor(0.390975, 0.000000, 0.475950)); colors.append(new RGBColor(0.434417, 0.000000, 0.528833)); colors.append(new RGBColor(0.477858, 0.000000, 0.581717)); colors.append(new RGBColor(0.521300, 0.000000, 0.634600)); colors.append(new RGBColor(0.506742, 0.000000, 0.640217)); colors.append(new RGBColor(0.492183, 0.000000, 0.645833)); colors.append(new RGBColor(0.477625, 0.000000, 0.651450)); colors.append(new RGBColor(0.463067, 0.000000, 0.657067)); colors.append(new RGBColor(0.448508, 0.000000, 0.662683)); colors.append(new RGBColor(0.433950, 0.000000, 0.668300)); colors.append(new RGBColor(0.419392, 0.000000, 0.673917)); colors.append(new RGBColor(0.404833, 0.000000, 0.679533)); colors.append(new RGBColor(0.390275, 0.000000, 0.685150)); colors.append(new RGBColor(0.375717, 0.000000, 0.690767)); colors.append(new RGBColor(0.361158, 0.000000, 0.696383)); colors.append(new RGBColor(0.346600, 0.000000, 0.702000)); colors.append(new RGBColor(0.317717, 0.000000, 0.712192)); colors.append(new RGBColor(0.288833, 0.000000, 0.722383)); colors.append(new RGBColor(0.259950, 0.000000, 0.732575)); colors.append(new RGBColor(0.231067, 0.000000, 0.742767)); colors.append(new RGBColor(0.202183, 0.000000, 0.752958)); colors.append(new RGBColor(0.173300, 0.000000, 0.763150)); colors.append(new RGBColor(0.144417, 0.000000, 0.773342)); colors.append(new RGBColor(0.115533, 0.000000, 0.783533)); colors.append(new RGBColor(0.086650, 0.000000, 0.793725)); colors.append(new RGBColor(0.057767, 0.000000, 0.803917)); colors.append(new RGBColor(0.028883, 0.000000, 0.814108)); colors.append(new RGBColor(0.000000, 0.000000, 0.824300)); colors.append(new RGBColor(0.000000, 0.019817, 0.838942)); colors.append(new RGBColor(0.000000, 0.039633, 0.853583)); colors.append(new RGBColor(0.000000, 0.059450, 0.868225)); colors.append(new RGBColor(0.000000, 0.079267, 0.882867)); colors.append(new RGBColor(0.000000, 0.099083, 0.897508)); colors.append(new RGBColor(0.000000, 0.118900, 0.912150)); colors.append(new RGBColor(0.000000, 0.138717, 0.926792)); colors.append(new RGBColor(0.000000, 0.158533, 0.941433)); colors.append(new RGBColor(0.000000, 0.178350, 0.956075)); colors.append(new RGBColor(0.000000, 0.198167, 0.970717)); colors.append(new RGBColor(0.000000, 0.217983, 0.985358)); colors.append(new RGBColor(0.000000, 0.237800, 1.000000)); colors.append(new RGBColor(0.000000, 0.268533, 1.000000)); colors.append(new RGBColor(0.000000, 0.299267, 1.000000)); colors.append(new RGBColor(0.000000, 0.330000, 1.000000)); colors.append(new RGBColor(0.000000, 0.360733, 1.000000)); colors.append(new RGBColor(0.000000, 0.391467, 1.000000)); colors.append(new RGBColor(0.000000, 0.422200, 1.000000)); colors.append(new RGBColor(0.000000, 0.452933, 1.000000)); colors.append(new RGBColor(0.000000, 0.483667, 1.000000)); colors.append(new RGBColor(0.000000, 0.514400, 1.000000)); colors.append(new RGBColor(0.000000, 0.545133, 1.000000)); colors.append(new RGBColor(0.000000, 0.575867, 1.000000)); colors.append(new RGBColor(0.000000, 0.606600, 1.000000)); colors.append(new RGBColor(0.000000, 0.631733, 0.975300)); colors.append(new RGBColor(0.000000, 0.656867, 0.950600)); colors.append(new RGBColor(0.000000, 0.682000, 0.925900)); colors.append(new RGBColor(0.000000, 0.707133, 0.901200)); colors.append(new RGBColor(0.000000, 0.732267, 0.876500)); colors.append(new RGBColor(0.000000, 0.757400, 0.851800)); colors.append(new RGBColor(0.000000, 0.782533, 0.827100)); colors.append(new RGBColor(0.000000, 0.807667, 0.802400)); colors.append(new RGBColor(0.000000, 0.832800, 0.777700)); colors.append(new RGBColor(0.000000, 0.857933, 0.753000)); colors.append(new RGBColor(0.000000, 0.883067, 0.728300)); colors.append(new RGBColor(0.000000, 0.908200, 0.703600)); colors.append(new RGBColor(0.000000, 0.901908, 0.676675)); colors.append(new RGBColor(0.000000, 0.895617, 0.649750)); colors.append(new RGBColor(0.000000, 0.889325, 0.622825)); colors.append(new RGBColor(0.000000, 0.883033, 0.595900)); colors.append(new RGBColor(0.000000, 0.876742, 0.568975)); colors.append(new RGBColor(0.000000, 0.870450, 0.542050)); colors.append(new RGBColor(0.000000, 0.864158, 0.515125)); colors.append(new RGBColor(0.000000, 0.857867, 0.488200)); colors.append(new RGBColor(0.000000, 0.851575, 0.461275)); colors.append(new RGBColor(0.000000, 0.845283, 0.434350)); colors.append(new RGBColor(0.000000, 0.838992, 0.407425)); colors.append(new RGBColor(0.000000, 0.832700, 0.380500)); colors.append(new RGBColor(0.000000, 0.832308, 0.354858)); colors.append(new RGBColor(0.000000, 0.831917, 0.329217)); colors.append(new RGBColor(0.000000, 0.831525, 0.303575)); colors.append(new RGBColor(0.000000, 0.831133, 0.277933)); colors.append(new RGBColor(0.000000, 0.830742, 0.252292)); colors.append(new RGBColor(0.000000, 0.830350, 0.226650)); colors.append(new RGBColor(0.000000, 0.829958, 0.201008)); colors.append(new RGBColor(0.000000, 0.829567, 0.175367)); colors.append(new RGBColor(0.000000, 0.829175, 0.149725)); colors.append(new RGBColor(0.000000, 0.828783, 0.124083)); colors.append(new RGBColor(0.000000, 0.828392, 0.098442)); colors.append(new RGBColor(0.000000, 0.828000, 0.072800)); colors.append(new RGBColor(0.033167, 0.834167, 0.066733)); colors.append(new RGBColor(0.066333, 0.840333, 0.060667)); colors.append(new RGBColor(0.099500, 0.846500, 0.054600)); colors.append(new RGBColor(0.132667, 0.852667, 0.048533)); colors.append(new RGBColor(0.165833, 0.858833, 0.042467)); colors.append(new RGBColor(0.199000, 0.865000, 0.036400)); colors.append(new RGBColor(0.232167, 0.871167, 0.030333)); colors.append(new RGBColor(0.265333, 0.877333, 0.024267)); colors.append(new RGBColor(0.298500, 0.883500, 0.018200)); colors.append(new RGBColor(0.331667, 0.889667, 0.012133)); colors.append(new RGBColor(0.364833, 0.895833, 0.006067)); colors.append(new RGBColor(0.398000, 0.902000, 0.000000)); colors.append(new RGBColor(0.430950, 0.902000, 0.000000)); colors.append(new RGBColor(0.463900, 0.902000, 0.000000)); colors.append(new RGBColor(0.496850, 0.902000, 0.000000)); colors.append(new RGBColor(0.529800, 0.902000, 0.000000)); colors.append(new RGBColor(0.562750, 0.902000, 0.000000)); colors.append(new RGBColor(0.595700, 0.902000, 0.000000)); colors.append(new RGBColor(0.628650, 0.902000, 0.000000)); colors.append(new RGBColor(0.661600, 0.902000, 0.000000)); colors.append(new RGBColor(0.694550, 0.902000, 0.000000)); colors.append(new RGBColor(0.727500, 0.902000, 0.000000)); colors.append(new RGBColor(0.760450, 0.902000, 0.000000)); colors.append(new RGBColor(0.793400, 0.902000, 0.000000)); colors.append(new RGBColor(0.810617, 0.897133, 0.003983)); colors.append(new RGBColor(0.827833, 0.892267, 0.007967)); colors.append(new RGBColor(0.845050, 0.887400, 0.011950)); colors.append(new RGBColor(0.862267, 0.882533, 0.015933)); colors.append(new RGBColor(0.879483, 0.877667, 0.019917)); colors.append(new RGBColor(0.896700, 0.872800, 0.023900)); colors.append(new RGBColor(0.913917, 0.867933, 0.027883)); colors.append(new RGBColor(0.931133, 0.863067, 0.031867)); colors.append(new RGBColor(0.948350, 0.858200, 0.035850)); colors.append(new RGBColor(0.965567, 0.853333, 0.039833)); colors.append(new RGBColor(0.982783, 0.848467, 0.043817)); colors.append(new RGBColor(1.000000, 0.843600, 0.047800)); colors.append(new RGBColor(0.995725, 0.824892, 0.051600)); colors.append(new RGBColor(0.991450, 0.806183, 0.055400)); colors.append(new RGBColor(0.987175, 0.787475, 0.059200)); colors.append(new RGBColor(0.982900, 0.768767, 0.063000)); colors.append(new RGBColor(0.978625, 0.750058, 0.066800)); colors.append(new RGBColor(0.974350, 0.731350, 0.070600)); colors.append(new RGBColor(0.970075, 0.712642, 0.074400)); colors.append(new RGBColor(0.965800, 0.693933, 0.078200)); colors.append(new RGBColor(0.961525, 0.675225, 0.082000)); colors.append(new RGBColor(0.957250, 0.656517, 0.085800)); colors.append(new RGBColor(0.952975, 0.637808, 0.089600)); colors.append(new RGBColor(0.948700, 0.619100, 0.093400)); colors.append(new RGBColor(0.952975, 0.600408, 0.085617)); colors.append(new RGBColor(0.957250, 0.581717, 0.077833)); colors.append(new RGBColor(0.961525, 0.563025, 0.070050)); colors.append(new RGBColor(0.965800, 0.544333, 0.062267)); colors.append(new RGBColor(0.970075, 0.525642, 0.054483)); colors.append(new RGBColor(0.974350, 0.506950, 0.046700)); colors.append(new RGBColor(0.978625, 0.488258, 0.038917)); colors.append(new RGBColor(0.982900, 0.469567, 0.031133)); colors.append(new RGBColor(0.987175, 0.450875, 0.023350)); colors.append(new RGBColor(0.991450, 0.432183, 0.015567)); colors.append(new RGBColor(0.995725, 0.413492, 0.007783)); colors.append(new RGBColor(1.000000, 0.394800, 0.000000)); colors.append(new RGBColor(0.998342, 0.361900, 0.000000)); colors.append(new RGBColor(0.996683, 0.329000, 0.000000)); colors.append(new RGBColor(0.995025, 0.296100, 0.000000)); colors.append(new RGBColor(0.993367, 0.263200, 0.000000)); colors.append(new RGBColor(0.991708, 0.230300, 0.000000)); colors.append(new RGBColor(0.990050, 0.197400, 0.000000)); colors.append(new RGBColor(0.988392, 0.164500, 0.000000)); colors.append(new RGBColor(0.986733, 0.131600, 0.000000)); colors.append(new RGBColor(0.985075, 0.098700, 0.000000)); colors.append(new RGBColor(0.983417, 0.065800, 0.000000)); colors.append(new RGBColor(0.981758, 0.032900, 0.000000)); colors.append(new RGBColor(0.980100, 0.000000, 0.000000)); colors.append(new RGBColor(0.955925, 0.000000, 0.000000)); colors.append(new RGBColor(0.931750, 0.000000, 0.000000)); colors.append(new RGBColor(0.907575, 0.000000, 0.000000)); colors.append(new RGBColor(0.883400, 0.000000, 0.000000)); colors.append(new RGBColor(0.859225, 0.000000, 0.000000)); colors.append(new RGBColor(0.835050, 0.000000, 0.000000)); colors.append(new RGBColor(0.810875, 0.000000, 0.000000)); colors.append(new RGBColor(0.786700, 0.000000, 0.000000)); colors.append(new RGBColor(0.762525, 0.000000, 0.000000)); colors.append(new RGBColor(0.738350, 0.000000, 0.000000)); colors.append(new RGBColor(0.714175, 0.000000, 0.000000)); colors.append(new RGBColor(0.690000, 0.000000, 0.000000)); colors.append(new RGBColor(0.715833, 0.083333, 0.083333)); colors.append(new RGBColor(0.741667, 0.166667, 0.166667)); colors.append(new RGBColor(0.767500, 0.250000, 0.250000)); colors.append(new RGBColor(0.793333, 0.333333, 0.333333)); colors.append(new RGBColor(0.819167, 0.416667, 0.416667)); colors.append(new RGBColor(0.845000, 0.500000, 0.500000)); colors.append(new RGBColor(0.870833, 0.583333, 0.583333)); colors.append(new RGBColor(0.896667, 0.666667, 0.666667)); colors.append(new RGBColor(0.922500, 0.750000, 0.750000)); colors.append(new RGBColor(0.948333, 0.833333, 0.833333)); colors.append(new RGBColor(0.974167, 0.916667, 0.916667)); colors.append(new RGBColor(1.000000, 1.000000, 1.000000)); colors.append(new RGBColor(1.000000, 1.000000, 1.000000)); colors.append(new RGBColor(1.000000, 1.000000, 1.000000)); colors.append(new RGBColor(1.000000, 1.000000, 1.000000)); colors.append(new RGBColor(1.000000, 1.000000, 1.000000)); colors.append(new RGBColor(1.000000, 1.000000, 1.000000)); colors.append(new RGBColor(1.000000, 1.000000, 1.000000)); colors.append(new RGBColor(1.000000, 1.000000, 1.000000)); } HSVColorMap::HSVColorMap(Colorbar* p) : LUTColorMap(p) { /* HSV: hue varies uniformly from 270 to 360 and back to 270. * Value varies from zero to one using a cube root relation * which causes the value to approach 1.0 rapidly away from zero. * Saturation is zero near the endpoints, causing the curve * to range from black to white at the endpoints, but ranges * to 1.0 at the halfway point, causing nearly saturated colors * in the middle of the range. */ name = dupstr("hsv"); fileName = dupstr("hsv.lut"); int size = 200; for (int i=0; i= 360.0) h -= 360.0; h /= 60.0; int ii = (int)h; float f = h - ii; float p = v * (1 - s); float q = v * (1 - s*f); float t = v * (1 - s * (1.0 - f)); switch (ii) { case 0: colors.append(new RGBColor(v,t,p)); break; case 1: colors.append(new RGBColor(q,v,p)); break; case 2: colors.append(new RGBColor(p,v,t)); break; case 3: colors.append(new RGBColor(p,q,v)); break; case 4: colors.append(new RGBColor(t,p,v)); break; case 5: colors.append(new RGBColor(v,p,q)); break; } } } saods9/tksao/colorbar/default.h000644 000765 000000 00000003301 12705446130 017104 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __default_h__ #define __default_h__ #include "sao.h" #include "lut.h" class Colorbar; class GreyColorMap : public SAOColorMap { public: GreyColorMap(Colorbar*); }; class RedColorMap : public SAOColorMap { public: RedColorMap(Colorbar*); }; class GreenColorMap : public SAOColorMap { public: GreenColorMap(Colorbar*); }; class BlueColorMap : public SAOColorMap { public: BlueColorMap(Colorbar*); }; class AColorMap : public SAOColorMap { public: AColorMap(Colorbar*); }; class BColorMap : public SAOColorMap { public: BColorMap(Colorbar*); }; class BBColorMap : public SAOColorMap { public: BBColorMap(Colorbar*); }; class HEColorMap : public SAOColorMap { public: HEColorMap(Colorbar*); }; class I8ColorMap : public LUTColorMap { public: I8ColorMap(Colorbar*); }; class AIPSColorMap : public LUTColorMap { public: AIPSColorMap(Colorbar*); }; class HeatColorMap : public SAOColorMap { public: HeatColorMap(Colorbar*); }; class CoolColorMap : public SAOColorMap { public: CoolColorMap(Colorbar*); }; class RainbowColorMap : public SAOColorMap { public: RainbowColorMap(Colorbar*); }; class StandardColorMap : public SAOColorMap { public: StandardColorMap(Colorbar*); }; class StaircaseColorMap : public LUTColorMap { public: StaircaseColorMap(Colorbar*); }; class ColorColorMap : public LUTColorMap { public: ColorColorMap(Colorbar*); }; class SLSColorMap : public LUTColorMap { public: SLSColorMap(Colorbar*); }; class HSVColorMap : public LUTColorMap { public: HSVColorMap(Colorbar*); }; #endif saods9/tksao/colorbar/lex.C000644 000765 000000 00000161021 12705446131 016210 0ustar00joyewheel000000 000000 #line 2 "colorbar/lex.C" #line 4 "colorbar/lex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer cbFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *cballoc (yy_size_t ); void *cbrealloc (void *,yy_size_t ); void cbfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 64 #define YY_END_OF_BUFFER 65 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[244] = { 0, 0, 0, 65, 63, 62, 64, 63, 63, 63, 63, 63, 54, 54, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 31, 63, 63, 63, 63, 63, 63, 63, 63, 52, 63, 62, 61, 0, 61, 58, 0, 61, 59, 61, 54, 56, 55, 61, 61, 61, 61, 61, 4, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 22, 61, 61, 61, 61, 61, 61, 61, 61, 33, 61, 35, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 0, 61, 60, 58, 59, 61, 61, 55, 57, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 15, 61, 61, 16, 61, 61, 61, 61, 24, 61, 61, 61, 61, 29, 61, 61, 34, 61, 61, 61, 61, 41, 61, 61, 44, 61, 61, 47, 61, 61, 61, 53, 60, 61, 56, 61, 61, 3, 61, 6, 61, 61, 61, 61, 61, 14, 61, 19, 17, 61, 21, 61, 61, 26, 27, 61, 61, 32, 61, 61, 61, 61, 61, 42, 43, 45, 61, 61, 61, 61, 61, 61, 2, 61, 61, 61, 61, 12, 61, 18, 61, 61, 25, 61, 61, 61, 37, 38, 39, 61, 46, 61, 49, 50, 61, 1, 61, 61, 61, 61, 61, 11, 13, 20, 23, 28, 30, 61, 61, 61, 51, 5, 61, 61, 61, 61, 61, 61, 48, 8, 7, 61, 10, 61, 61, 61, 61, 61, 9, 36, 40, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 4, 4, 4, 4, 6, 4, 4, 4, 7, 4, 7, 8, 4, 9, 10, 11, 12, 10, 10, 10, 10, 10, 10, 4, 4, 4, 4, 4, 4, 4, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 4, 4, 4, 4, 4, 4, 4, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 4, 63, 4, 64, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[65] = { 0, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 } ; static yyconst flex_int16_t yy_base[251] = { 0, 0, 0, 120, 587, 107, 587, 0, 64, 66, 65, 69, 74, 84, 71, 82, 80, 72, 82, 98, 85, 101, 105, 124, 121, 126, 131, 125, 71, 141, 141, 137, 152, 142, 151, 170, 104, 0, 92, 194, 0, 84, 196, 0, 194, 199, 203, 212, 221, 246, 178, 182, 204, 0, 205, 182, 222, 197, 226, 226, 233, 227, 229, 234, 254, 247, 253, 0, 236, 245, 245, 249, 268, 268, 250, 265, 0, 279, 0, 267, 278, 283, 270, 289, 275, 283, 292, 279, 289, 284, 301, 285, 24, 328, 0, 587, 587, 336, 226, 344, 0, 299, 312, 309, 323, 327, 324, 327, 329, 328, 345, 331, 0, 333, 349, 0, 331, 350, 353, 354, 0, 355, 341, 361, 351, 0, 358, 363, 0, 349, 356, 353, 373, 0, 382, 366, 0, 392, 377, 0, 380, 380, 401, 0, 587, 409, 418, 383, 390, 0, 396, 0, 393, 401, 405, 414, 406, 0, 423, 0, 0, 423, 0, 414, 421, 0, 0, 415, 422, 0, 419, 419, 415, 421, 430, 0, 0, 0, 438, 438, 440, 60, 434, 430, 0, 447, 467, 453, 442, 0, 465, 0, 451, 456, 0, 454, 467, 479, 0, 0, 0, 462, 0, 469, 0, 0, 464, 0, 476, 488, 489, 475, 473, 0, 0, 0, 0, 0, 0, 475, 477, 484, 0, 0, 481, 484, 501, 484, 501, 510, 0, 0, 0, 517, 0, 505, 511, 523, 510, 517, 0, 0, 0, 587, 67, 568, 571, 574, 577, 580, 583 } ; static yyconst flex_int16_t yy_def[251] = { 0, 243, 1, 243, 243, 243, 243, 244, 245, 246, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 247, 243, 244, 248, 245, 244, 249, 246, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 250, 247, 244, 243, 243, 244, 244, 244, 49, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 243, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 0, 243, 243, 243, 243, 243, 243, 243 } ; static yyconst flex_int16_t yy_nxt[652] = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 7, 7, 23, 24, 25, 26, 27, 28, 29, 30, 31, 7, 32, 33, 7, 34, 14, 15, 16, 17, 18, 19, 20, 21, 22, 7, 7, 23, 24, 25, 26, 27, 28, 29, 30, 31, 7, 32, 33, 7, 34, 35, 7, 38, 38, 41, 41, 40, 37, 205, 43, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 45, 45, 45, 45, 50, 144, 58, 96, 48, 47, 45, 45, 45, 45, 95, 59, 51, 54, 48, 63, 52, 81, 55, 36, 56, 60, 36, 49, 61, 50, 57, 58, 64, 48, 53, 65, 62, 243, 67, 66, 59, 51, 54, 48, 63, 52, 81, 55, 68, 56, 60, 73, 49, 61, 69, 57, 75, 64, 70, 53, 65, 62, 71, 67, 66, 74, 77, 86, 72, 79, 76, 84, 80, 68, 78, 82, 73, 83, 85, 69, 90, 75, 88, 70, 87, 91, 89, 71, 92, 92, 74, 77, 86, 72, 79, 76, 84, 80, 243, 78, 82, 243, 83, 85, 243, 90, 243, 88, 243, 87, 91, 89, 38, 38, 41, 41, 40, 101, 102, 43, 46, 46, 46, 46, 47, 45, 45, 45, 45, 46, 46, 46, 46, 48, 103, 104, 105, 97, 46, 46, 46, 46, 101, 102, 108, 98, 48, 99, 99, 99, 99, 94, 99, 99, 99, 99, 243, 109, 48, 103, 104, 105, 97, 106, 111, 107, 112, 110, 113, 108, 114, 48, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 109, 115, 116, 117, 118, 119, 106, 111, 107, 112, 110, 113, 120, 114, 121, 122, 123, 126, 124, 100, 100, 100, 100, 100, 100, 127, 115, 116, 117, 118, 119, 125, 128, 129, 130, 131, 132, 120, 133, 121, 122, 123, 126, 124, 134, 135, 136, 137, 138, 140, 127, 143, 141, 243, 139, 243, 125, 128, 129, 130, 131, 132, 142, 133, 92, 92, 243, 147, 148, 134, 135, 136, 137, 138, 140, 149, 143, 141, 145, 139, 146, 146, 146, 146, 150, 151, 152, 142, 99, 99, 99, 99, 147, 148, 153, 154, 155, 156, 157, 158, 149, 159, 243, 160, 161, 162, 163, 164, 165, 150, 151, 152, 166, 167, 168, 169, 170, 171, 172, 153, 154, 155, 156, 157, 158, 173, 159, 94, 160, 161, 162, 163, 164, 165, 175, 174, 176, 166, 167, 168, 169, 170, 171, 172, 177, 178, 179, 180, 181, 183, 173, 184, 182, 146, 146, 146, 146, 185, 186, 175, 174, 176, 146, 146, 146, 146, 187, 188, 189, 177, 178, 179, 180, 190, 183, 191, 184, 182, 192, 193, 194, 195, 185, 186, 196, 197, 198, 199, 200, 201, 202, 187, 188, 189, 203, 204, 206, 207, 190, 208, 191, 212, 243, 192, 193, 194, 195, 213, 243, 196, 197, 198, 199, 200, 201, 202, 209, 214, 215, 203, 204, 206, 207, 216, 208, 217, 212, 210, 218, 219, 220, 221, 213, 211, 222, 223, 224, 225, 226, 227, 228, 209, 214, 215, 229, 230, 231, 232, 216, 233, 217, 234, 210, 218, 219, 220, 221, 235, 211, 222, 223, 224, 225, 226, 227, 228, 236, 237, 238, 229, 230, 231, 232, 239, 233, 240, 234, 241, 242, 243, 243, 243, 235, 243, 243, 243, 243, 243, 243, 243, 243, 236, 237, 238, 243, 243, 243, 243, 239, 243, 240, 243, 241, 242, 39, 243, 39, 42, 243, 42, 93, 243, 93, 38, 243, 38, 41, 243, 41, 92, 243, 92, 3, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243 } ; static yyconst flex_int16_t yy_chk[652] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 8, 9, 9, 8, 244, 181, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 14, 92, 17, 41, 12, 13, 13, 13, 13, 13, 38, 18, 15, 16, 13, 20, 15, 28, 16, 36, 16, 18, 5, 12, 19, 14, 16, 17, 20, 12, 15, 21, 19, 3, 22, 21, 18, 15, 16, 13, 20, 15, 28, 16, 22, 16, 18, 24, 12, 19, 22, 16, 25, 20, 23, 15, 21, 19, 23, 22, 21, 24, 26, 31, 23, 27, 25, 30, 27, 22, 26, 29, 24, 29, 30, 22, 33, 25, 32, 23, 31, 34, 32, 23, 35, 35, 24, 26, 31, 23, 27, 25, 30, 27, 0, 26, 29, 0, 29, 30, 0, 33, 0, 32, 0, 31, 34, 32, 39, 39, 42, 42, 39, 50, 51, 42, 44, 44, 44, 44, 45, 45, 45, 45, 45, 46, 46, 46, 46, 45, 52, 54, 55, 46, 47, 47, 47, 47, 50, 51, 57, 48, 47, 48, 48, 48, 48, 35, 98, 98, 98, 98, 0, 58, 45, 52, 54, 55, 46, 56, 59, 56, 60, 58, 61, 57, 62, 47, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 58, 63, 64, 65, 66, 68, 56, 59, 56, 60, 58, 61, 69, 62, 70, 71, 72, 74, 73, 49, 49, 49, 49, 49, 49, 75, 63, 64, 65, 66, 68, 73, 77, 79, 80, 81, 82, 69, 83, 70, 71, 72, 74, 73, 84, 85, 86, 87, 88, 89, 75, 91, 90, 0, 88, 0, 73, 77, 79, 80, 81, 82, 90, 83, 93, 93, 0, 101, 102, 84, 85, 86, 87, 88, 89, 103, 91, 90, 97, 88, 97, 97, 97, 97, 104, 105, 106, 90, 99, 99, 99, 99, 101, 102, 107, 108, 109, 110, 111, 113, 103, 114, 0, 116, 117, 118, 119, 121, 122, 104, 105, 106, 123, 124, 126, 127, 129, 130, 131, 107, 108, 109, 110, 111, 113, 132, 114, 93, 116, 117, 118, 119, 121, 122, 134, 132, 135, 123, 124, 126, 127, 129, 130, 131, 137, 138, 140, 141, 142, 147, 132, 148, 142, 145, 145, 145, 145, 150, 152, 134, 132, 135, 146, 146, 146, 146, 153, 154, 155, 137, 138, 140, 141, 156, 147, 158, 148, 142, 161, 163, 164, 167, 150, 152, 168, 170, 171, 172, 173, 174, 178, 153, 154, 155, 179, 180, 182, 183, 156, 185, 158, 187, 0, 161, 163, 164, 167, 188, 0, 168, 170, 171, 172, 173, 174, 178, 186, 190, 192, 179, 180, 182, 183, 193, 185, 195, 187, 186, 196, 197, 201, 203, 188, 186, 206, 208, 209, 210, 211, 212, 219, 186, 190, 192, 220, 221, 224, 225, 193, 226, 195, 227, 186, 196, 197, 201, 203, 228, 186, 206, 208, 209, 210, 211, 212, 219, 229, 233, 235, 220, 221, 224, 225, 236, 226, 237, 227, 238, 239, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 229, 233, 235, 0, 0, 0, 0, 236, 0, 237, 0, 238, 239, 245, 0, 245, 246, 0, 246, 247, 0, 247, 248, 0, 248, 249, 0, 249, 250, 0, 250, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "colorbar/lex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "colorbar/lex.L" #include #include #include #include "parser.H" extern YYSTYPE* cblval; /* rules */ #line 646 "colorbar/lex.C" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 26 "colorbar/lex.L" #line 749 "colorbar/lex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 244 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 243 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 28 "colorbar/lex.L" {return ADJUST_;} YY_BREAK case 2: YY_RULE_SETUP #line 29 "colorbar/lex.L" {return BEGIN_;} YY_BREAK case 3: YY_RULE_SETUP #line 30 "colorbar/lex.L" {return BIAS_;} YY_BREAK case 4: YY_RULE_SETUP #line 31 "colorbar/lex.L" {return BW_;} YY_BREAK case 5: YY_RULE_SETUP #line 32 "colorbar/lex.L" {return CHANNEL_;} YY_BREAK case 6: YY_RULE_SETUP #line 33 "colorbar/lex.L" {return CMYK_;} YY_BREAK case 7: YY_RULE_SETUP #line 34 "colorbar/lex.L" {return COLORMAP_;} YY_BREAK case 8: YY_RULE_SETUP #line 35 "colorbar/lex.L" {return COLORBAR_;} YY_BREAK case 9: YY_RULE_SETUP #line 36 "colorbar/lex.L" {return COLORSPACE_;} YY_BREAK case 10: YY_RULE_SETUP #line 37 "colorbar/lex.L" {return CONTRAST_;} YY_BREAK case 11: YY_RULE_SETUP #line 38 "colorbar/lex.L" {return CURSOR_;} YY_BREAK case 12: YY_RULE_SETUP #line 39 "colorbar/lex.L" {return DEBUG_;} YY_BREAK case 13: YY_RULE_SETUP #line 40 "colorbar/lex.L" {return DELETE_;} YY_BREAK case 14: YY_RULE_SETUP #line 41 "colorbar/lex.L" {return EDIT_;} YY_BREAK case 15: YY_RULE_SETUP #line 42 "colorbar/lex.L" {return END_;} YY_BREAK case 16: YY_RULE_SETUP #line 43 "colorbar/lex.L" {return GET_;} YY_BREAK case 17: YY_RULE_SETUP #line 44 "colorbar/lex.L" {return GRAY_;} YY_BREAK case 18: YY_RULE_SETUP #line 45 "colorbar/lex.L" {return FALSE_;} YY_BREAK case 19: YY_RULE_SETUP #line 46 "colorbar/lex.L" {return FILE_;} YY_BREAK case 20: YY_RULE_SETUP #line 47 "colorbar/lex.L" {return HEIGHT_;} YY_BREAK case 21: YY_RULE_SETUP #line 48 "colorbar/lex.L" {return HIDE_;} YY_BREAK case 22: YY_RULE_SETUP #line 49 "colorbar/lex.L" {return ID_;} YY_BREAK case 23: YY_RULE_SETUP #line 50 "colorbar/lex.L" {return INVERT_;} YY_BREAK case 24: YY_RULE_SETUP #line 51 "colorbar/lex.L" {return ITT_;} YY_BREAK case 25: YY_RULE_SETUP #line 52 "colorbar/lex.L" {return LEVEL_;} YY_BREAK case 26: YY_RULE_SETUP #line 53 "colorbar/lex.L" {return LIST_;} YY_BREAK case 27: YY_RULE_SETUP #line 54 "colorbar/lex.L" {return LOAD_;} YY_BREAK case 28: YY_RULE_SETUP #line 55 "colorbar/lex.L" {return MACOSX_;} YY_BREAK case 29: YY_RULE_SETUP #line 56 "colorbar/lex.L" {return MAP_;} YY_BREAK case 30: YY_RULE_SETUP #line 57 "colorbar/lex.L" {return MOTION_;} YY_BREAK case 31: YY_RULE_SETUP #line 58 "colorbar/lex.L" {return N_;} YY_BREAK case 32: YY_RULE_SETUP #line 59 "colorbar/lex.L" {return NAME_;} YY_BREAK case 33: YY_RULE_SETUP #line 60 "colorbar/lex.L" {return NO_;} YY_BREAK case 34: YY_RULE_SETUP #line 61 "colorbar/lex.L" {return OFF_;} YY_BREAK case 35: YY_RULE_SETUP #line 62 "colorbar/lex.L" {return ON_;} YY_BREAK case 36: YY_RULE_SETUP #line 63 "colorbar/lex.L" {return POSTSCRIPT_;} YY_BREAK case 37: YY_RULE_SETUP #line 64 "colorbar/lex.L" {return PRINT_;} YY_BREAK case 38: YY_RULE_SETUP #line 65 "colorbar/lex.L" {return QUERY_;} YY_BREAK case 39: YY_RULE_SETUP #line 66 "colorbar/lex.L" {return RESET_;} YY_BREAK case 40: YY_RULE_SETUP #line 67 "colorbar/lex.L" {return RESOLUTION_;} YY_BREAK case 41: YY_RULE_SETUP #line 68 "colorbar/lex.L" {return RGB_;} YY_BREAK case 42: YY_RULE_SETUP #line 69 "colorbar/lex.L" {return SAVE_;} YY_BREAK case 43: YY_RULE_SETUP #line 70 "colorbar/lex.L" {return SHOW_;} YY_BREAK case 44: YY_RULE_SETUP #line 71 "colorbar/lex.L" {return TAG_;} YY_BREAK case 45: YY_RULE_SETUP #line 72 "colorbar/lex.L" {return TRUE_;} YY_BREAK case 46: YY_RULE_SETUP #line 73 "colorbar/lex.L" {return VALUE_;} YY_BREAK case 47: YY_RULE_SETUP #line 74 "colorbar/lex.L" {return VAR_;} YY_BREAK case 48: YY_RULE_SETUP #line 75 "colorbar/lex.L" {return VERSION_;} YY_BREAK case 49: YY_RULE_SETUP #line 76 "colorbar/lex.L" {return WIDTH_;} YY_BREAK case 50: YY_RULE_SETUP #line 77 "colorbar/lex.L" {return WIN32_;} YY_BREAK case 51: YY_RULE_SETUP #line 78 "colorbar/lex.L" {return WINDOW_;} YY_BREAK case 52: YY_RULE_SETUP #line 79 "colorbar/lex.L" {return Y_;} YY_BREAK case 53: YY_RULE_SETUP #line 80 "colorbar/lex.L" {return YES_;} YY_BREAK case 54: YY_RULE_SETUP #line 82 "colorbar/lex.L" { // Integer cblval->integer = atoi(yytext); return INT; } YY_BREAK case 55: #line 88 "colorbar/lex.L" case 56: YY_RULE_SETUP #line 88 "colorbar/lex.L" { // Real Number cblval->real = atof(yytext); return REAL; } YY_BREAK case 57: YY_RULE_SETUP #line 93 "colorbar/lex.L" { // Pointer cblval->ptr = (void*)strtoul(yytext,NULL,16); return POINTER; } YY_BREAK case 58: #line 99 "colorbar/lex.L" case 59: YY_RULE_SETUP #line 99 "colorbar/lex.L" { // Quoted String int ll = (yyleng-2)<(CBBUFSIZE-1) ? (yyleng-2):(CBBUFSIZE-1); strncpy(cblval->str,yytext+1,ll); // skip the " " cblval->str[ll] = '\0'; // Remove the '"' return STRING; } YY_BREAK case 60: YY_RULE_SETUP #line 106 "colorbar/lex.L" { // Quoted String int ll = (yyleng-2)<(CBBUFSIZE-1) ? (yyleng-2):(CBBUFSIZE-1); strncpy(cblval->str,yytext+1,ll); // skip the '{' cblval->str[ll] = '\0'; // Remove the '}' return STRING; } YY_BREAK case 61: YY_RULE_SETUP #line 113 "colorbar/lex.L" { // General String-- at least 2 printable chars int ll = yyleng <(CBBUFSIZE-1) ? yyleng:(CBBUFSIZE-1); strncpy(cblval->str,yytext,ll); cblval->str[ll] = '\0'; return STRING; } YY_BREAK case 62: YY_RULE_SETUP #line 120 "colorbar/lex.L" { // White Spaces } YY_BREAK case 63: YY_RULE_SETUP #line 123 "colorbar/lex.L" { // Else, return the char return yytext[0]; } YY_BREAK case 64: YY_RULE_SETUP #line 127 "colorbar/lex.L" ECHO; YY_BREAK #line 1169 "colorbar/lex.C" case YY_STATE_EOF(INITIAL): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; cbfree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); cbfree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ cbrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) cbrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 244 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 244 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 243); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) cballoc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) cballoc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) cbfree((void *) b->yy_ch_buf ); cbfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)cballoc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)cbrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) cballoc(new_size ); else (yy_start_stack) = (int *) cbrealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *cballoc (yy_size_t size ) { return (void *) malloc( size ); } void *cbrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void cbfree (void * ptr ) { free( (char *) ptr ); /* see cbrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 127 "colorbar/lex.L" saods9/tksao/colorbar/lex.L000644 000765 000000 00000005304 12705446131 016222 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include "parser.H" extern YYSTYPE* cblval; %} D [0-9] E [Ee][+-]?{D}+ /* rules */ %% adjust {return ADJUST_;} begin {return BEGIN_;} bias {return BIAS_;} bw {return BW_;} channel {return CHANNEL_;} cmyk {return CMYK_;} colormap {return COLORMAP_;} colorbar {return COLORBAR_;} colorspace {return COLORSPACE_;} contrast {return CONTRAST_;} cursor {return CURSOR_;} debug {return DEBUG_;} delete {return DELETE_;} edit {return EDIT_;} end {return END_;} get {return GET_;} gray {return GRAY_;} false {return FALSE_;} file {return FILE_;} height {return HEIGHT_;} hide {return HIDE_;} id {return ID_;} invert {return INVERT_;} itt {return ITT_;} level {return LEVEL_;} list {return LIST_;} load {return LOAD_;} macosx {return MACOSX_;} map {return MAP_;} motion {return MOTION_;} n {return N_;} name {return NAME_;} no {return NO_;} off {return OFF_;} on {return ON_;} postscript {return POSTSCRIPT_;} print {return PRINT_;} query {return QUERY_;} reset {return RESET_;} resolution {return RESOLUTION_;} rgb {return RGB_;} save {return SAVE_;} show {return SHOW_;} tag {return TAG_;} true {return TRUE_;} value {return VALUE_;} var {return VAR_;} version {return VERSION_;} width {return WIDTH_;} win32 {return WIN32_;} window {return WINDOW_;} y {return Y_;} yes {return YES_;} [+-]?{D}+ { // Integer cblval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number cblval->real = atof(yytext); return REAL; } 0[xX][0-9a-fA-F]+ { // Pointer cblval->ptr = (void*)strtoul(yytext,NULL,16); return POINTER; } \"[^\"\n]*\" | \'[^\'\n]*\' { // Quoted String int ll = (yyleng-2)<(CBBUFSIZE-1) ? (yyleng-2):(CBBUFSIZE-1); strncpy(cblval->str,yytext+1,ll); // skip the " " cblval->str[ll] = '\0'; // Remove the '"' return STRING; } \{[^\}\n]*\} { // Quoted String int ll = (yyleng-2)<(CBBUFSIZE-1) ? (yyleng-2):(CBBUFSIZE-1); strncpy(cblval->str,yytext+1,ll); // skip the '{' cblval->str[ll] = '\0'; // Remove the '}' return STRING; } [!-~][!-~]+ { // General String-- at least 2 printable chars int ll = yyleng <(CBBUFSIZE-1) ? yyleng:(CBBUFSIZE-1); strncpy(cblval->str,yytext,ll); cblval->str[ll] = '\0'; return STRING; } [ \t]+ { // White Spaces } . { // Else, return the char return yytext[0]; } %% saods9/tksao/colorbar/lut.C000644 000765 000000 00000007326 12233543631 016232 0ustar00joyewheel000000 000000 // Copyright (C) 1999-200 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "lut.h" #include "colorbar.h" // LUT Parser Stuf #undef yyFlexLexer #define yyFlexLexer rgbFlexLexer #include void* rgblval; rgbFlexLexer* rgblexx; extern int rgbparse(LUTColorMap*, rgbFlexLexer*); int rgblex(void* vval, rgbFlexLexer* ll) { rgblval = vval; rgblexx = ll; return ll ? ll->yylex() : 0; } void rgberror(LUTColorMap* cm, rgbFlexLexer* ll, const char* m) {} // RGBColor istream& operator>>(istream& str, RGBColor& cc) { str >> cc.red_ >> cc.green_ >> cc.blue_; return str; } ostream& operator<<(ostream& str, RGBColor& cc) { str.setf(ios::fixed, ios::floatfield); str << setw(8) << setprecision(6) << cc.red_ << " " << cc.green_ << " " << cc.blue_ << endl; return str; } // LUTColorMap LUTColorMap::LUTColorMap(Colorbar* p) : ColorMapInfo(p) { } void LUTColorMap::newRGBColor(float r, float g, float b) { colors.append(new RGBColor(r,g,b)); } int LUTColorMap::load() { ifstream str(fileName); if (!str) return 0; rgbFlexLexer* ll = new rgbFlexLexer(&str); rgbparse(this, ll); delete ll; if (colors.isEmpty()) return 0; // bailout else return 1; // we found at least one RGBColor } int LUTColorMap::load(const char* var) { const char* ccmd = Tcl_GetVar(parent_->getInterp(), var, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG); if (!ccmd) return 0; // only make command string as long as needed // or the rest will be processed as garbage int len = strlen(ccmd)+2; char* buf = new char[len]; memcpy(buf, ccmd, len); // add terminator to make parser happy buf[len-2] = '\n'; buf[len-1] = '\0'; string x(buf); istringstream istr(x); rgbFlexLexer* ll = new rgbFlexLexer(&istr); rgbparse(this, ll); delete ll; delete [] buf; if (colors.isEmpty()) return 0; // bailout else return 1; // we found at least one RGBColor } void LUTColorMap::save(const char* fn) { ofstream fstr(fn); if (!fstr) return; fstr << *this; } unsigned char LUTColorMap::getRedChar(int ii, int count) { int size = colors.count(); int index = (int)((ii*size/count) + .5); if (index>=0 && indexred() * UCHAR_MAX); else return 0; } unsigned char LUTColorMap::getGreenChar(int ii, int count) { int size = colors.count(); int index = (int)((ii*size/count) + .5); if (index>=0 && indexgreen() * UCHAR_MAX); else return 0; } unsigned char LUTColorMap::getBlueChar(int ii, int count) { int size = colors.count(); int index = (int)((ii*size/count) + .5); if (index>=0 && indexblue() * UCHAR_MAX); else return 0; } unsigned short LUTColorMap::getRedShrt(int ii, int count) { int size = colors.count(); int index = (int)((ii*size/count) + .5); if (index >=0 && index < size) return (unsigned short)(colors[index]->red() * USHRT_MAX); else return 0; } unsigned short LUTColorMap::getGreenShrt(int ii, int count) { int size = colors.count(); int index = (int)((ii*size/count) + .5); if (index>=0 && indexgreen() * USHRT_MAX); else return 0; } unsigned short LUTColorMap::getBlueShrt(int ii, int count) { int size = colors.count(); int index = (int)((ii*size/count) + .5); if (index>=0 && indexblue() * USHRT_MAX); else return 0; } ostream& operator<<(ostream& str, LUTColorMap& cc) { cc.colors.head(); do str << *cc.colors.current(); while (cc.colors.next()); return str; } saods9/tksao/colorbar/lut.h000644 000765 000000 00000003317 12705446131 016274 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __lut_h__ #define __lut_h__ #include "colormap.h" #include "list.h" // RGBColor class RGBColor { private: float red_; float green_; float blue_; RGBColor* next_; RGBColor* previous_; public: RGBColor() {red_=green_=blue_=0;} RGBColor(float r, float g, float b) {red_=r; green_=g; blue_=b;} RGBColor(const RGBColor& a) { red_=a.red_; green_=a.green_; blue_=a.blue_; next_=a.next_; previous_=a.previous_; } RGBColor& operator=(const RGBColor& a) { red_=a.red_; green_=a.green_; blue_=a.blue_; next_=a.next_; previous_=a.previous_; return *this; } RGBColor* next() {return next_;} RGBColor* previous() {return previous_;} void setNext(RGBColor* n) {next_ = n;} void setPrevious(RGBColor* p) {previous_=p;} float red() {return red_;} float green() {return green_;} float blue() {return blue_;} friend istream& operator>>(istream&, RGBColor&); friend ostream& operator<<(ostream&, RGBColor&); }; // LUTColorMap class LUTColorMap : public ColorMapInfo { protected: List colors; public: LUTColorMap(Colorbar* p); ColorMapInfo* dup() {return new LUTColorMap(*this);} int load(); int load(const char* var); void save(const char*); unsigned char getRedChar(int, int); unsigned char getGreenChar(int, int); unsigned char getBlueChar(int, int); unsigned short getRedShrt(int, int); unsigned short getGreenShrt(int, int); unsigned short getBlueShrt(int, int); void newRGBColor(float,float,float); friend ostream& operator<<(ostream&, LUTColorMap&); }; #endif saods9/tksao/colorbar/lutlex.C000644 000765 000000 00000127404 12705446131 016744 0ustar00joyewheel000000 000000 #line 2 "colorbar/lutlex.C" #line 4 "colorbar/lutlex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer rgbFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *rgballoc (yy_size_t ); void *rgbrealloc (void *,yy_size_t ); void rgbfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 18 #define YY_END_OF_BUFFER 19 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[57] = { 0, 0, 0, 2, 2, 19, 17, 14, 16, 17, 17, 17, 10, 13, 13, 13, 13, 13, 13, 13, 2, 1, 14, 15, 0, 10, 12, 11, 10, 13, 13, 13, 13, 5, 13, 7, 13, 13, 2, 0, 0, 0, 11, 13, 13, 6, 13, 9, 11, 0, 12, 13, 13, 8, 3, 4, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 5, 6, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 1, 1, 8, 9, 10, 11, 12, 13, 14, 10, 10, 10, 10, 15, 10, 16, 17, 10, 10, 18, 19, 20, 21, 10, 10, 10, 22, 10, 1, 1, 1, 1, 1, 1, 23, 24, 10, 25, 26, 27, 28, 10, 10, 10, 10, 29, 10, 30, 31, 10, 10, 32, 33, 34, 35, 10, 10, 10, 36, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[37] = { 0, 1, 1, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 } ; static yyconst flex_int16_t yy_base[60] = { 0, 0, 0, 139, 138, 140, 143, 137, 143, 135, 31, 129, 33, 123, 35, 40, 36, 38, 37, 44, 0, 143, 124, 143, 117, 65, 50, 66, 68, 117, 76, 78, 80, 116, 83, 115, 58, 79, 0, 53, 83, 113, 93, 95, 98, 113, 99, 112, 108, 101, 96, 100, 101, 91, 60, 46, 143, 131, 46, 134 } ; static yyconst flex_int16_t yy_def[60] = { 0, 56, 1, 57, 57, 56, 56, 56, 56, 56, 56, 56, 58, 58, 58, 58, 58, 58, 58, 58, 59, 56, 56, 56, 56, 56, 56, 56, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 56, 56, 56, 58, 58, 58, 58, 58, 58, 56, 56, 56, 58, 58, 58, 58, 58, 0, 56, 56, 56 } ; static yyconst flex_int16_t yy_nxt[180] = { 0, 6, 7, 8, 9, 10, 11, 12, 13, 13, 13, 14, 13, 15, 13, 13, 16, 17, 13, 13, 18, 13, 19, 13, 13, 14, 13, 15, 13, 13, 16, 17, 13, 13, 18, 13, 19, 24, 25, 27, 28, 56, 56, 56, 56, 30, 56, 31, 32, 29, 56, 34, 56, 33, 35, 36, 37, 26, 41, 30, 48, 31, 40, 32, 56, 34, 56, 33, 35, 36, 37, 27, 25, 26, 27, 28, 40, 39, 39, 46, 30, 41, 56, 42, 56, 56, 56, 43, 49, 56, 50, 39, 39, 46, 30, 44, 45, 56, 47, 56, 42, 56, 43, 50, 56, 56, 56, 56, 50, 44, 45, 53, 47, 55, 54, 48, 51, 52, 56, 56, 48, 56, 56, 56, 26, 53, 22, 55, 54, 56, 51, 52, 20, 20, 20, 38, 26, 38, 23, 22, 56, 21, 21, 5, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56 } ; static yyconst flex_int16_t yy_chk[180] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 12, 12, 14, 16, 18, 17, 12, 15, 14, 15, 58, 19, 17, 55, 16, 17, 18, 19, 26, 39, 12, 39, 14, 26, 15, 36, 17, 54, 16, 17, 18, 19, 25, 25, 27, 28, 28, 26, 25, 27, 36, 28, 30, 30, 30, 31, 37, 32, 31, 40, 34, 40, 25, 27, 36, 28, 32, 34, 53, 37, 42, 42, 43, 31, 50, 44, 46, 51, 52, 49, 32, 34, 46, 37, 52, 51, 48, 43, 44, 47, 45, 41, 35, 33, 29, 24, 46, 22, 52, 51, 13, 43, 44, 57, 57, 57, 59, 11, 59, 9, 7, 5, 4, 3, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "colorbar/lutlex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "colorbar/lutlex.L" #include #include #include #include #include "util.h" #include "lutparser.H" extern YYSTYPE* rgblval; extern rgbFlexLexer* rgblexx; /* rules */ #line 478 "colorbar/lutlex.C" #define INITIAL 0 #define DISCARD 1 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 31 "colorbar/lutlex.L" #line 582 "colorbar/lutlex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 57 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 56 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 33 "colorbar/lutlex.L" { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(rgblval->str,""); // feed a blank string return STRING; } YY_BREAK case 2: YY_RULE_SETUP #line 40 "colorbar/lutlex.L" { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(LUTBUFSIZE-1) ? yyleng:(LUTBUFSIZE-1); strncpy(rgblval->str,yytext,ll); rgblval->str[ll] = '\0'; return STRING; } YY_BREAK case 3: YY_RULE_SETUP #line 48 "colorbar/lutlex.L" {return DEBUG_;} YY_BREAK case 4: YY_RULE_SETUP #line 49 "colorbar/lutlex.L" {return FALSE_;} YY_BREAK case 5: YY_RULE_SETUP #line 50 "colorbar/lutlex.L" {return NO_;} YY_BREAK case 6: YY_RULE_SETUP #line 51 "colorbar/lutlex.L" {return OFF_;} YY_BREAK case 7: YY_RULE_SETUP #line 52 "colorbar/lutlex.L" {return ON_;} YY_BREAK case 8: YY_RULE_SETUP #line 53 "colorbar/lutlex.L" {return TRUE_;} YY_BREAK case 9: YY_RULE_SETUP #line 54 "colorbar/lutlex.L" {return YES_;} YY_BREAK case 10: YY_RULE_SETUP #line 56 "colorbar/lutlex.L" { // Integer rgblval->integer = atoi(yytext); return INT; } YY_BREAK case 11: #line 62 "colorbar/lutlex.L" case 12: YY_RULE_SETUP #line 62 "colorbar/lutlex.L" { // Real Number rgblval->real = atof(yytext); return REAL; } YY_BREAK case 13: YY_RULE_SETUP #line 67 "colorbar/lutlex.L" { // General String int ll = yyleng <(LUTBUFSIZE-1) ? yyleng:(LUTBUFSIZE-1); strncpy(rgblval->str,yytext,ll); rgblval->str[ll] = '\0'; return STRING; } YY_BREAK case 14: YY_RULE_SETUP #line 74 "colorbar/lutlex.L" { // White Spaces } YY_BREAK case 15: /* rule 15 can match eol */ YY_RULE_SETUP #line 77 "colorbar/lutlex.L" { // windows line feed return '\n'; } YY_BREAK case 16: /* rule 16 can match eol */ YY_RULE_SETUP #line 81 "colorbar/lutlex.L" { // linefeed return '\n'; } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(DISCARD): #line 85 "colorbar/lutlex.L" { // eof return EOF_; } YY_BREAK case 17: YY_RULE_SETUP #line 89 "colorbar/lutlex.L" { // Else, return the char return toupper(yytext[0]); } YY_BREAK case 18: YY_RULE_SETUP #line 93 "colorbar/lutlex.L" ECHO; YY_BREAK #line 787 "colorbar/lutlex.C" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; rgbfree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); rgbfree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ rgbrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) rgbrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 57 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 57 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 56); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) rgballoc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) rgballoc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) rgbfree((void *) b->yy_ch_buf ); rgbfree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)rgballoc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)rgbrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) rgballoc(new_size ); else (yy_start_stack) = (int *) rgbrealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *rgballoc (yy_size_t size ) { return (void *) malloc( size ); } void *rgbrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void rgbfree (void * ptr ) { free( (char *) ptr ); /* see rgbrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 93 "colorbar/lutlex.L" void rgbDiscard(int doit) { if (rgblexx) rgblexx->begin(DISCARD, doit); } void rgbFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/colorbar/lutlex.L000644 000765 000000 00000003475 12705446131 016756 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include #include "util.h" #include "lutparser.H" extern YYSTYPE* rgblval; extern rgbFlexLexer* rgblexx; %} %x DISCARD D [0-9] E [Ee][+-]?{D}+ /* rules */ %% [\n] { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(rgblval->str,""); // feed a blank string return STRING; } [^\n]* { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(LUTBUFSIZE-1) ? yyleng:(LUTBUFSIZE-1); strncpy(rgblval->str,yytext,ll); rgblval->str[ll] = '\0'; return STRING; } debug {return DEBUG_;} false {return FALSE_;} no {return NO_;} off {return OFF_;} on {return ON_;} true {return TRUE_;} yes {return YES_;} [+-]?{D}+ { // Integer rgblval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number rgblval->real = atof(yytext); return REAL; } [0-9A-Za-z]+ { // General String int ll = yyleng <(LUTBUFSIZE-1) ? yyleng:(LUTBUFSIZE-1); strncpy(rgblval->str,yytext,ll); rgblval->str[ll] = '\0'; return STRING; } [ \t]+ { // White Spaces } \r\n { // windows line feed return '\n'; } \n { // linefeed return '\n'; } <> { // eof return EOF_; } . { // Else, return the char return toupper(yytext[0]); } %% void rgbDiscard(int doit) { if (rgblexx) rgblexx->begin(DISCARD, doit); } void rgbFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/colorbar/lutparser.C000644 000765 000000 00000124755 12553253013 017452 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse rgbparse #define yylex rgblex #define yyerror rgberror #define yylval rgblval #define yychar rgbchar #define yydebug rgbdebug #define yynerrs rgbnerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { REAL = 258, INT = 259, STRING = 260, EOF_ = 261, DEBUG_ = 262, FALSE_ = 263, NO_ = 264, OFF_ = 265, ON_ = 266, TRUE_ = 267, YES_ = 268 }; #endif /* Tokens. */ #define REAL 258 #define INT 259 #define STRING 260 #define EOF_ 261 #define DEBUG_ 262 #define FALSE_ 263 #define NO_ 264 #define OFF_ 265 #define ON_ 266 #define TRUE_ 267 #define YES_ 268 /* Copy the first part of user declarations. */ #line 10 "colorbar/lutparser.Y" #define YYDEBUG 1 #define DISCARD_(x) {yyclearin; rgbDiscard(x);} #include #include #include "lut.h" #undef yyFlexLexer #define yyFlexLexer rgbFlexLexer #include extern int rgblex(void*, rgbFlexLexer*); extern void rgberror(LUTColorMap*, rgbFlexLexer*, const char*); extern void rgbDiscard(int); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 29 "colorbar/lutparser.Y" { #define LUTBUFSIZE 4096 char str[LUTBUFSIZE]; int integer; float real; } /* Line 193 of yacc.c. */ #line 156 "colorbar/lutparser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 169 "colorbar/lutparser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 12 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 20 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 17 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 7 /* YYNRULES -- Number of rules. */ #define YYNRULES 14 /* YYNRULES -- Number of states. */ #define YYNSTATES 22 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 268 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 7, 10, 13, 17, 18, 22, 24, 26, 28, 30, 32, 34 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 18, 0, -1, 18, 19, 21, -1, 19, 21, -1, 7, 23, -1, 22, 22, 22, -1, -1, 14, 20, 5, -1, 15, -1, 16, -1, 6, -1, 3, -1, 4, -1, 11, -1, 10, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 54, 54, 55, 58, 59, 60, 60, 63, 64, 65, 68, 69, 72, 73 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "REAL", "INT", "STRING", "EOF_", "DEBUG_", "FALSE_", "NO_", "OFF_", "ON_", "TRUE_", "YES_", "'#'", "'\\n'", "';'", "$accept", "commands", "command", "@1", "terminator", "numeric", "debug", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 35, 10, 59 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 17, 18, 18, 19, 19, 20, 19, 21, 21, 21, 22, 22, 23, 23 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 3, 2, 2, 3, 0, 3, 1, 1, 1, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 11, 12, 0, 6, 0, 0, 0, 14, 13, 4, 0, 1, 0, 10, 8, 9, 3, 0, 7, 2, 5 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 5, 6, 11, 17, 7, 10 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -6 static const yytype_int8 yypact[] = { -2, -6, -6, 5, -6, 0, 3, 7, -6, -6, -6, 8, -6, 3, -6, -6, -6, -6, 7, -6, -6, -6 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -6, -6, 15, -6, -5, -1, -6 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 12, 1, 2, 1, 2, 3, 18, 3, 20, 14, 1, 2, 4, 19, 4, 8, 9, 21, 15, 16, 13 }; static const yytype_uint8 yycheck[] = { 0, 3, 4, 3, 4, 7, 7, 7, 13, 6, 3, 4, 14, 5, 14, 10, 11, 18, 15, 16, 5 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 3, 4, 7, 14, 18, 19, 22, 10, 11, 23, 20, 0, 19, 6, 15, 16, 21, 22, 5, 21, 22 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (cm, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, cm, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, LUTColorMap* cm, rgbFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, cm, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; LUTColorMap* cm; rgbFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (cm); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, LUTColorMap* cm, rgbFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, cm, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; LUTColorMap* cm; rgbFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, cm, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, LUTColorMap* cm, rgbFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, cm, ll) YYSTYPE *yyvsp; int yyrule; LUTColorMap* cm; rgbFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , cm, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, cm, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, LUTColorMap* cm, rgbFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, cm, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; LUTColorMap* cm; rgbFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (cm); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (LUTColorMap* cm, rgbFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (LUTColorMap* cm, rgbFlexLexer* ll) #else int yyparse (cm, ll) LUTColorMap* cm; rgbFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 5: #line 59 "colorbar/lutparser.Y" {cm->newRGBColor((yyvsp[(1) - (3)].real),(yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real));;} break; case 6: #line 60 "colorbar/lutparser.Y" {DISCARD_(1);} break; case 10: #line 65 "colorbar/lutparser.Y" {YYACCEPT;;} break; case 11: #line 68 "colorbar/lutparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 12: #line 69 "colorbar/lutparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 13: #line 72 "colorbar/lutparser.Y" {yydebug=1;;} break; case 14: #line 73 "colorbar/lutparser.Y" {yydebug=0;;} break; /* Line 1267 of yacc.c. */ #line 1417 "colorbar/lutparser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (cm, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (cm, ll, yymsg); } else { yyerror (cm, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, cm, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, cm, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (cm, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, cm, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, cm, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 75 "colorbar/lutparser.Y" saods9/tksao/colorbar/lutparser.H000644 000765 000000 00000005055 12553253013 017446 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { REAL = 258, INT = 259, STRING = 260, EOF_ = 261, DEBUG_ = 262, FALSE_ = 263, NO_ = 264, OFF_ = 265, ON_ = 266, TRUE_ = 267, YES_ = 268 }; #endif /* Tokens. */ #define REAL 258 #define INT 259 #define STRING 260 #define EOF_ 261 #define DEBUG_ 262 #define FALSE_ 263 #define NO_ 264 #define OFF_ 265 #define ON_ 266 #define TRUE_ 267 #define YES_ 268 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 29 "colorbar/lutparser.Y" { #define LUTBUFSIZE 4096 char str[LUTBUFSIZE]; int integer; float real; } /* Line 1529 of yacc.c. */ #line 82 "colorbar/lutparser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/colorbar/lutparser.Y000644 000765 000000 00000002277 12705446131 017476 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {LUTColorMap* cm} %lex-param {rgbFlexLexer* ll} %parse-param {rgbFlexLexer* ll} %{ #define YYDEBUG 1 #define DISCARD_(x) {yyclearin; rgbDiscard(x);} #include #include #include "lut.h" #undef yyFlexLexer #define yyFlexLexer rgbFlexLexer #include extern int rgblex(void*, rgbFlexLexer*); extern void rgberror(LUTColorMap*, rgbFlexLexer*, const char*); extern void rgbDiscard(int); %} %union { #define LUTBUFSIZE 4096 char str[LUTBUFSIZE]; int integer; float real; } %type numeric %token REAL %token INT %token STRING %token EOF_ %token DEBUG_ %token FALSE_ %token NO_ %token OFF_ %token ON_ %token TRUE_ %token YES_ %% commands: commands command terminator | command terminator ; command : DEBUG_ debug | numeric numeric numeric {cm->newRGBColor($1,$2,$3);} | '#' {DISCARD_(1)} STRING ; terminator: '\n' | ';' | EOF_ {YYACCEPT;} ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; %% saods9/tksao/colorbar/parser.C000644 000765 000000 00000171453 12553253013 016722 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse cbparse #define yylex cblex #define yyerror cberror #define yylval cblval #define yychar cbchar #define yydebug cbdebug #define yynerrs cbnerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, STRING = 260, POINTER = 261, ADJUST_ = 262, BEGIN_ = 263, BIAS_ = 264, BW_ = 265, CHANNEL_ = 266, CMYK_ = 267, COLORMAP_ = 268, COLORBAR_ = 269, COLORSPACE_ = 270, CONTRAST_ = 271, CURSOR_ = 272, DEBUG_ = 273, DELETE_ = 274, EDIT_ = 275, END_ = 276, GET_ = 277, GRAY_ = 278, FALSE_ = 279, FILE_ = 280, HEIGHT_ = 281, HIDE_ = 282, ID_ = 283, INVERT_ = 284, ITT_ = 285, LEVEL_ = 286, LIST_ = 287, LOAD_ = 288, MACOSX_ = 289, MAP_ = 290, MOTION_ = 291, N_ = 292, NAME_ = 293, NO_ = 294, OFF_ = 295, ON_ = 296, POSTSCRIPT_ = 297, PRINT_ = 298, QUERY_ = 299, RESET_ = 300, RESOLUTION_ = 301, RGB_ = 302, SAVE_ = 303, SHOW_ = 304, TAG_ = 305, TRUE_ = 306, VALUE_ = 307, VAR_ = 308, VERSION_ = 309, WIDTH_ = 310, WIN32_ = 311, WINDOW_ = 312, Y_ = 313, YES_ = 314 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define STRING 260 #define POINTER 261 #define ADJUST_ 262 #define BEGIN_ 263 #define BIAS_ 264 #define BW_ 265 #define CHANNEL_ 266 #define CMYK_ 267 #define COLORMAP_ 268 #define COLORBAR_ 269 #define COLORSPACE_ 270 #define CONTRAST_ 271 #define CURSOR_ 272 #define DEBUG_ 273 #define DELETE_ 274 #define EDIT_ 275 #define END_ 276 #define GET_ 277 #define GRAY_ 278 #define FALSE_ 279 #define FILE_ 280 #define HEIGHT_ 281 #define HIDE_ 282 #define ID_ 283 #define INVERT_ 284 #define ITT_ 285 #define LEVEL_ 286 #define LIST_ 287 #define LOAD_ 288 #define MACOSX_ 289 #define MAP_ 290 #define MOTION_ 291 #define N_ 292 #define NAME_ 293 #define NO_ 294 #define OFF_ 295 #define ON_ 296 #define POSTSCRIPT_ 297 #define PRINT_ 298 #define QUERY_ 299 #define RESET_ 300 #define RESOLUTION_ 301 #define RGB_ 302 #define SAVE_ 303 #define SHOW_ 304 #define TAG_ 305 #define TRUE_ 306 #define VALUE_ 307 #define VAR_ 308 #define VERSION_ 309 #define WIDTH_ 310 #define WIN32_ 311 #define WINDOW_ 312 #define Y_ 313 #define YES_ 314 /* Copy the first part of user declarations. */ #line 10 "colorbar/parser.Y" #define YYDEBUG 1 #include #include "colorbarbase.h" #undef yyFlexLexer #define yyFlexLexer cbFlexLexer #include extern int cblex(void*, cbFlexLexer*); extern void cberror(ColorbarBase*, cbFlexLexer*, const char*); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 25 "colorbar/parser.Y" { #define CBBUFSIZE 1024 float real; int integer; char str[CBBUFSIZE]; void* ptr; } /* Line 193 of yacc.c. */ #line 245 "colorbar/parser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 258 "colorbar/parser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 93 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 139 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 60 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 23 /* YYNRULES -- Number of rules. */ #define YYNRULES 96 /* YYNRULES -- Number of states. */ #define YYNSTATES 154 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 314 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 6, 10, 13, 16, 19, 21, 24, 27, 30, 33, 36, 39, 42, 45, 47, 51, 54, 57, 59, 61, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 95, 104, 107, 110, 111, 114, 116, 118, 120, 122, 125, 129, 131, 133, 135, 137, 140, 143, 147, 150, 152, 153, 156, 158, 160, 161, 163, 165, 167, 170, 173, 175, 178, 181, 184, 187, 191, 193, 195, 197, 200, 203, 206, 208, 210, 212, 214, 217, 220, 223, 226, 231, 233, 234, 237, 242, 246, 250, 252, 255 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 61, 0, -1, 18, 63, -1, 7, 62, 62, -1, 14, 65, -1, 13, 66, -1, 22, 68, -1, 27, -1, 29, 64, -1, 30, 70, -1, 32, 71, -1, 33, 72, -1, 34, 74, -1, 35, 75, -1, 42, 76, -1, 44, 17, -1, 45, -1, 47, 11, 5, -1, 50, 78, -1, 48, 81, -1, 49, -1, 54, -1, 56, 82, -1, 4, -1, 3, -1, 41, -1, 40, -1, 3, -1, 59, -1, 58, -1, 41, -1, 51, -1, 39, -1, 37, -1, 40, -1, 24, -1, 3, 62, 62, 3, -1, 47, 62, 62, 62, 62, 62, 62, 3, -1, 31, 67, -1, 57, 5, -1, -1, 3, 6, -1, 9, -1, 14, -1, 13, -1, 16, -1, 25, 38, -1, 25, 38, 3, -1, 26, -1, 28, -1, 29, -1, 38, -1, 38, 3, -1, 47, 11, -1, 52, 3, 3, -1, 50, 69, -1, 55, -1, -1, 3, 3, -1, 5, -1, 3, -1, -1, 28, -1, 38, -1, 30, -1, 30, 28, -1, 30, 38, -1, 5, -1, 5, 5, -1, 53, 73, -1, 30, 5, -1, 5, 5, -1, 5, 5, 5, -1, 43, -1, 5, -1, 3, -1, 15, 77, -1, 31, 3, -1, 46, 3, -1, 10, -1, 23, -1, 47, -1, 12, -1, 19, 79, -1, 20, 80, -1, 33, 5, -1, 48, 5, -1, 3, 62, 62, 5, -1, 5, -1, -1, 3, 3, -1, 8, 3, 3, 5, -1, 36, 3, 3, -1, 21, 3, 3, -1, 5, -1, 3, 5, -1, 43, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 98, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 121, 122, 125, 126, 129, 131, 132, 133, 134, 136, 137, 138, 139, 142, 143, 147, 148, 151, 152, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 172, 173, 176, 177, 180, 181, 182, 183, 184, 185, 188, 189, 190, 191, 194, 195, 198, 205, 206, 209, 211, 212, 215, 216, 217, 218, 221, 222, 223, 224, 225, 226, 229, 230, 233, 234, 235, 238, 239, 242 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "INT", "REAL", "STRING", "POINTER", "ADJUST_", "BEGIN_", "BIAS_", "BW_", "CHANNEL_", "CMYK_", "COLORMAP_", "COLORBAR_", "COLORSPACE_", "CONTRAST_", "CURSOR_", "DEBUG_", "DELETE_", "EDIT_", "END_", "GET_", "GRAY_", "FALSE_", "FILE_", "HEIGHT_", "HIDE_", "ID_", "INVERT_", "ITT_", "LEVEL_", "LIST_", "LOAD_", "MACOSX_", "MAP_", "MOTION_", "N_", "NAME_", "NO_", "OFF_", "ON_", "POSTSCRIPT_", "PRINT_", "QUERY_", "RESET_", "RESOLUTION_", "RGB_", "SAVE_", "SHOW_", "TAG_", "TRUE_", "VALUE_", "VAR_", "VERSION_", "WIDTH_", "WIN32_", "WINDOW_", "Y_", "YES_", "$accept", "command", "numeric", "debug", "yesno", "colorbar", "colormap", "colormaplevel", "get", "getTag", "itt", "list", "load", "loadVar", "macosx", "map", "postscript", "pscolorspace", "tag", "tagdelete", "tagedit", "save", "win32", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 66, 66, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 70, 70, 71, 71, 71, 71, 71, 71, 72, 72, 72, 72, 73, 73, 74, 75, 75, 76, 76, 76, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 80, 80, 80, 81, 81, 82 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 2, 3, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 8, 2, 2, 0, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 2, 3, 2, 1, 0, 2, 1, 1, 0, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 3, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 4, 1, 0, 2, 4, 3, 3, 1, 2, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 0, 0, 0, 0, 0, 7, 0, 0, 61, 0, 0, 0, 0, 0, 16, 0, 0, 20, 0, 21, 0, 0, 24, 23, 0, 40, 0, 5, 0, 0, 4, 26, 25, 2, 42, 44, 43, 45, 0, 48, 49, 50, 51, 0, 57, 0, 56, 6, 27, 35, 33, 32, 34, 30, 31, 29, 28, 8, 60, 59, 9, 62, 64, 63, 10, 67, 0, 0, 11, 73, 12, 75, 74, 13, 0, 0, 0, 14, 15, 0, 0, 94, 19, 0, 88, 89, 0, 0, 0, 18, 96, 22, 1, 3, 0, 38, 39, 0, 0, 46, 52, 53, 0, 55, 0, 65, 66, 68, 70, 0, 69, 79, 82, 80, 81, 76, 77, 78, 17, 95, 0, 0, 83, 0, 0, 0, 84, 85, 86, 41, 0, 0, 47, 58, 54, 71, 0, 90, 0, 0, 0, 36, 0, 72, 87, 0, 93, 92, 0, 91, 0, 0, 37 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 22, 25, 34, 58, 31, 28, 96, 48, 104, 61, 65, 69, 111, 71, 74, 78, 116, 90, 123, 127, 83, 92 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -41 static const yytype_int8 yypact[] = { 33, 15, -15, 5, 13, 84, -41, -2, 9, -21, -3, -40, 20, -5, -11, -41, 17, 67, -41, 10, -41, -19, 31, -41, -41, 15, 41, 56, -41, 15, 15, -41, -41, -41, -41, -41, -41, -41, -41, 26, -41, -41, -41, 68, 25, 73, 76, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -17, -41, -41, 79, 80, 81, -41, -41, -41, -41, -41, -41, 22, 85, 87, -41, -41, 86, 89, -41, -41, 15, -41, 92, 12, 94, 96, -41, -41, -41, -41, -41, 97, -41, -41, 15, 15, 99, -41, -41, 101, -41, 102, -41, -41, -41, -41, 103, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, 15, 108, -41, 111, 112, 113, -41, -41, -41, -41, 114, 15, -41, -41, -41, 115, 116, -41, 120, 122, 124, -41, 15, -41, -41, 123, -41, -41, 15, -41, 15, 126, -41 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -41, -41, -25, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, -41 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 94, 49, 66, 70, 98, 99, 79, 62, 29, 63, 75, 106, 59, 84, 60, 85, 26, 64, 23, 24, 124, 107, 50, 72, 91, 73, 76, 67, 80, 86, 87, 93, 112, 125, 113, 51, 102, 52, 53, 54, 1, 77, 27, 88, 95, 114, 2, 3, 126, 55, 68, 4, 30, 32, 33, 5, 56, 57, 89, 121, 6, 97, 7, 8, 100, 9, 10, 11, 12, 115, 81, 101, 82, 131, 132, 13, 103, 14, 15, 105, 16, 17, 18, 19, 108, 109, 110, 20, 117, 21, 118, 119, 0, 35, 120, 122, 137, 36, 37, 128, 38, 129, 133, 130, 134, 135, 0, 143, 136, 39, 40, 138, 41, 42, 139, 140, 141, 142, 149, 0, 144, 145, 43, 146, 151, 147, 152, 148, 150, 153, 0, 44, 0, 0, 45, 0, 46, 0, 0, 47 }; static const yytype_int16 yycheck[] = { 25, 3, 5, 43, 29, 30, 17, 28, 3, 30, 15, 28, 3, 3, 5, 5, 31, 38, 3, 4, 8, 38, 24, 3, 43, 5, 31, 30, 11, 19, 20, 0, 10, 21, 12, 37, 11, 39, 40, 41, 7, 46, 57, 33, 3, 23, 13, 14, 36, 51, 53, 18, 47, 40, 41, 22, 58, 59, 48, 84, 27, 5, 29, 30, 38, 32, 33, 34, 35, 47, 3, 3, 5, 98, 99, 42, 3, 44, 45, 3, 47, 48, 49, 50, 5, 5, 5, 54, 3, 56, 3, 5, -1, 9, 5, 3, 121, 13, 14, 5, 16, 5, 3, 6, 3, 3, -1, 132, 5, 25, 26, 3, 28, 29, 3, 3, 3, 3, 143, -1, 5, 5, 38, 3, 149, 3, 151, 3, 5, 3, -1, 47, -1, -1, 50, -1, 52, -1, -1, 55 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 7, 13, 14, 18, 22, 27, 29, 30, 32, 33, 34, 35, 42, 44, 45, 47, 48, 49, 50, 54, 56, 61, 3, 4, 62, 31, 57, 66, 3, 47, 65, 40, 41, 63, 9, 13, 14, 16, 25, 26, 28, 29, 38, 47, 50, 52, 55, 68, 3, 24, 37, 39, 40, 41, 51, 58, 59, 64, 3, 5, 70, 28, 30, 38, 71, 5, 30, 53, 72, 43, 74, 3, 5, 75, 15, 31, 46, 76, 17, 11, 3, 5, 81, 3, 5, 19, 20, 33, 48, 78, 43, 82, 0, 62, 3, 67, 5, 62, 62, 38, 3, 11, 3, 69, 3, 28, 38, 5, 5, 5, 73, 10, 12, 23, 47, 77, 3, 3, 5, 5, 62, 3, 79, 8, 21, 36, 80, 5, 5, 6, 62, 62, 3, 3, 3, 5, 62, 3, 3, 3, 3, 3, 62, 5, 5, 3, 3, 3, 62, 5, 62, 62, 3 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (cb, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, cb, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, ColorbarBase* cb, cbFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, cb, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; ColorbarBase* cb; cbFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (cb); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, ColorbarBase* cb, cbFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, cb, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; ColorbarBase* cb; cbFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, cb, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, ColorbarBase* cb, cbFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, cb, ll) YYSTYPE *yyvsp; int yyrule; ColorbarBase* cb; cbFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , cb, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, cb, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, ColorbarBase* cb, cbFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, cb, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; ColorbarBase* cb; cbFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (cb); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (ColorbarBase* cb, cbFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (ColorbarBase* cb, cbFlexLexer* ll) #else int yyparse (cb, ll) ColorbarBase* cb; cbFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 3: #line 99 "colorbar/parser.Y" {cb->adjustCmd((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real));;} break; case 7: #line 103 "colorbar/parser.Y" {cb->hideCmd();;} break; case 8: #line 104 "colorbar/parser.Y" {cb->invertCmd((yyvsp[(2) - (2)].integer) );;} break; case 15: #line 111 "colorbar/parser.Y" {cb->queryCursorCmd();;} break; case 16: #line 112 "colorbar/parser.Y" {cb->resetCmd();;} break; case 17: #line 113 "colorbar/parser.Y" {cb->setRGBChannelCmd((yyvsp[(3) - (3)].str));;} break; case 20: #line 116 "colorbar/parser.Y" {cb->showCmd();;} break; case 21: #line 117 "colorbar/parser.Y" {cb->msg("Colorbar 1.0");;} break; case 23: #line 121 "colorbar/parser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 24: #line 122 "colorbar/parser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 25: #line 125 "colorbar/parser.Y" {yydebug=1;;} break; case 26: #line 126 "colorbar/parser.Y" {yydebug=0;;} break; case 27: #line 129 "colorbar/parser.Y" {(yyval.integer)=((yyvsp[(1) - (1)].integer) ? 1 : 0);;} break; case 28: #line 131 "colorbar/parser.Y" {(yyval.integer)=1;;} break; case 29: #line 132 "colorbar/parser.Y" {(yyval.integer)=1;;} break; case 30: #line 133 "colorbar/parser.Y" {(yyval.integer)=1;;} break; case 31: #line 134 "colorbar/parser.Y" {(yyval.integer)=1;;} break; case 32: #line 136 "colorbar/parser.Y" {(yyval.integer)=0;;} break; case 33: #line 137 "colorbar/parser.Y" {(yyval.integer)=0;;} break; case 34: #line 138 "colorbar/parser.Y" {(yyval.integer)=0;;} break; case 35: #line 139 "colorbar/parser.Y" {(yyval.integer)=0;;} break; case 36: #line 142 "colorbar/parser.Y" {cb->setColorbarCmd((yyvsp[(1) - (4)].integer), (yyvsp[(2) - (4)].real), (yyvsp[(3) - (4)].real), (yyvsp[(4) - (4)].integer));;} break; case 37: #line 144 "colorbar/parser.Y" {cb->setColorbarCmd((yyvsp[(2) - (8)].real), (yyvsp[(3) - (8)].real), (yyvsp[(4) - (8)].real), (yyvsp[(5) - (8)].real), (yyvsp[(6) - (8)].real), (yyvsp[(7) - (8)].real), (yyvsp[(8) - (8)].integer));;} break; case 39: #line 148 "colorbar/parser.Y" {cb->setColormapWindowCmd((yyvsp[(2) - (2)].str));;} break; case 40: #line 151 "colorbar/parser.Y" {cb->setColormapLevelCmd();;} break; case 41: #line 152 "colorbar/parser.Y" {cb->setColormapLevelCmd((yyvsp[(1) - (2)].integer), (double*)(yyvsp[(2) - (2)].ptr));;} break; case 42: #line 155 "colorbar/parser.Y" {cb->getBiasCmd();;} break; case 43: #line 156 "colorbar/parser.Y" {cb->getColorbarCmd();;} break; case 44: #line 157 "colorbar/parser.Y" {cb->getColormapCmd();;} break; case 45: #line 158 "colorbar/parser.Y" {cb->getContrastCmd();;} break; case 46: #line 159 "colorbar/parser.Y" {cb->getCurrentFileNameCmd();;} break; case 47: #line 160 "colorbar/parser.Y" {cb->getColormapFileNameCmd((yyvsp[(3) - (3)].integer));;} break; case 48: #line 161 "colorbar/parser.Y" {cb->getHeightCmd();;} break; case 49: #line 162 "colorbar/parser.Y" {cb->getCurrentIDCmd();;} break; case 50: #line 163 "colorbar/parser.Y" {cb->getInvertCmd();;} break; case 51: #line 164 "colorbar/parser.Y" {cb->getCurrentNameCmd();;} break; case 52: #line 165 "colorbar/parser.Y" {cb->getColormapNameCmd((yyvsp[(2) - (2)].integer));;} break; case 53: #line 166 "colorbar/parser.Y" {cb->getRGBChannelCmd();;} break; case 54: #line 167 "colorbar/parser.Y" {cb->getValueCmd((yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 56: #line 169 "colorbar/parser.Y" {cb->getWidthCmd();;} break; case 57: #line 172 "colorbar/parser.Y" {cb->getTagCmd();;} break; case 58: #line 173 "colorbar/parser.Y" {cb->getTagCmd((yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].integer));;} break; case 59: #line 176 "colorbar/parser.Y" {;} break; case 60: #line 177 "colorbar/parser.Y" {;} break; case 61: #line 180 "colorbar/parser.Y" {cb->listNameCmd();;} break; case 62: #line 181 "colorbar/parser.Y" {cb->listIDCmd();;} break; case 63: #line 182 "colorbar/parser.Y" {cb->listNameCmd();;} break; case 64: #line 183 "colorbar/parser.Y" {;} break; case 65: #line 184 "colorbar/parser.Y" {;} break; case 66: #line 185 "colorbar/parser.Y" {;} break; case 67: #line 188 "colorbar/parser.Y" {cb->loadCmd((yyvsp[(1) - (1)].str),NULL);;} break; case 68: #line 189 "colorbar/parser.Y" {cb->loadCmd((yyvsp[(1) - (2)].str),(yyvsp[(2) - (2)].str));;} break; case 70: #line 191 "colorbar/parser.Y" {;} break; case 71: #line 194 "colorbar/parser.Y" {cb->loadCmd((yyvsp[(1) - (2)].str),NULL,(yyvsp[(2) - (2)].str));;} break; case 72: #line 195 "colorbar/parser.Y" {cb->loadCmd((yyvsp[(1) - (3)].str),(yyvsp[(2) - (3)].str),(yyvsp[(3) - (3)].str));;} break; case 73: #line 198 "colorbar/parser.Y" { #ifdef MAC_OSX_TK cb->macosxPrintCmd(); #endif ;} break; case 74: #line 205 "colorbar/parser.Y" {cb->mapCmd((yyvsp[(1) - (1)].str));;} break; case 75: #line 206 "colorbar/parser.Y" {cb->mapCmd((yyvsp[(1) - (1)].integer));;} break; case 76: #line 210 "colorbar/parser.Y" {cb->psColorSpaceCmd((Widget::PSColorSpace)(yyvsp[(2) - (2)].integer));;} break; case 77: #line 211 "colorbar/parser.Y" {cb->psLevelCmd((yyvsp[(2) - (2)].integer));;} break; case 78: #line 212 "colorbar/parser.Y" {cb->psResolutionCmd((yyvsp[(2) - (2)].integer));;} break; case 79: #line 215 "colorbar/parser.Y" {(yyval.integer) = Widget::BW;;} break; case 80: #line 216 "colorbar/parser.Y" {(yyval.integer) = Widget::GRAY;;} break; case 81: #line 217 "colorbar/parser.Y" {(yyval.integer) = Widget::RGB;;} break; case 82: #line 218 "colorbar/parser.Y" {(yyval.integer) = Widget::CMYK;;} break; case 85: #line 223 "colorbar/parser.Y" {cb->tagLoadCmd((yyvsp[(2) - (2)].str));;} break; case 86: #line 224 "colorbar/parser.Y" {cb->tagSaveCmd((yyvsp[(2) - (2)].str));;} break; case 87: #line 225 "colorbar/parser.Y" {cb->tagCmd((yyvsp[(1) - (4)].integer),Vector((yyvsp[(2) - (4)].real),(yyvsp[(3) - (4)].real)),(yyvsp[(4) - (4)].str));;} break; case 88: #line 226 "colorbar/parser.Y" {cb->tagCmd((yyvsp[(1) - (1)].str));;} break; case 89: #line 229 "colorbar/parser.Y" {cb->tagDeleteCmd();;} break; case 90: #line 230 "colorbar/parser.Y" {cb->tagDeleteCmd((yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].integer));;} break; case 91: #line 233 "colorbar/parser.Y" {cb->tagEditBeginCmd((yyvsp[(2) - (4)].integer),(yyvsp[(3) - (4)].integer),(yyvsp[(4) - (4)].str));;} break; case 92: #line 234 "colorbar/parser.Y" {cb->tagEditMotionCmd((yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 93: #line 235 "colorbar/parser.Y" {cb->tagEditEndCmd((yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].integer));;} break; case 94: #line 238 "colorbar/parser.Y" {cb->saveCmd((yyvsp[(1) - (1)].str));;} break; case 95: #line 239 "colorbar/parser.Y" {cb->saveCmd((yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].str));;} break; case 96: #line 242 "colorbar/parser.Y" { #ifdef _WIN32 cb->win32PrintCmd(); #endif ;} break; /* Line 1267 of yacc.c. */ #line 2000 "colorbar/parser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (cb, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (cb, ll, yymsg); } else { yyerror (cb, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, cb, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, cb, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (cb, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, cb, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, cb, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 249 "colorbar/parser.Y" saods9/tksao/colorbar/parser.H000644 000765 000000 00000010407 12553253013 016716 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { INT = 258, REAL = 259, STRING = 260, POINTER = 261, ADJUST_ = 262, BEGIN_ = 263, BIAS_ = 264, BW_ = 265, CHANNEL_ = 266, CMYK_ = 267, COLORMAP_ = 268, COLORBAR_ = 269, COLORSPACE_ = 270, CONTRAST_ = 271, CURSOR_ = 272, DEBUG_ = 273, DELETE_ = 274, EDIT_ = 275, END_ = 276, GET_ = 277, GRAY_ = 278, FALSE_ = 279, FILE_ = 280, HEIGHT_ = 281, HIDE_ = 282, ID_ = 283, INVERT_ = 284, ITT_ = 285, LEVEL_ = 286, LIST_ = 287, LOAD_ = 288, MACOSX_ = 289, MAP_ = 290, MOTION_ = 291, N_ = 292, NAME_ = 293, NO_ = 294, OFF_ = 295, ON_ = 296, POSTSCRIPT_ = 297, PRINT_ = 298, QUERY_ = 299, RESET_ = 300, RESOLUTION_ = 301, RGB_ = 302, SAVE_ = 303, SHOW_ = 304, TAG_ = 305, TRUE_ = 306, VALUE_ = 307, VAR_ = 308, VERSION_ = 309, WIDTH_ = 310, WIN32_ = 311, WINDOW_ = 312, Y_ = 313, YES_ = 314 }; #endif /* Tokens. */ #define INT 258 #define REAL 259 #define STRING 260 #define POINTER 261 #define ADJUST_ 262 #define BEGIN_ 263 #define BIAS_ 264 #define BW_ 265 #define CHANNEL_ 266 #define CMYK_ 267 #define COLORMAP_ 268 #define COLORBAR_ 269 #define COLORSPACE_ 270 #define CONTRAST_ 271 #define CURSOR_ 272 #define DEBUG_ 273 #define DELETE_ 274 #define EDIT_ 275 #define END_ 276 #define GET_ 277 #define GRAY_ 278 #define FALSE_ 279 #define FILE_ 280 #define HEIGHT_ 281 #define HIDE_ 282 #define ID_ 283 #define INVERT_ 284 #define ITT_ 285 #define LEVEL_ 286 #define LIST_ 287 #define LOAD_ 288 #define MACOSX_ 289 #define MAP_ 290 #define MOTION_ 291 #define N_ 292 #define NAME_ 293 #define NO_ 294 #define OFF_ 295 #define ON_ 296 #define POSTSCRIPT_ 297 #define PRINT_ 298 #define QUERY_ 299 #define RESET_ 300 #define RESOLUTION_ 301 #define RGB_ 302 #define SAVE_ 303 #define SHOW_ 304 #define TAG_ 305 #define TRUE_ 306 #define VALUE_ 307 #define VAR_ 308 #define VERSION_ 309 #define WIDTH_ 310 #define WIN32_ 311 #define WINDOW_ 312 #define Y_ 313 #define YES_ 314 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 25 "colorbar/parser.Y" { #define CBBUFSIZE 1024 float real; int integer; char str[CBBUFSIZE]; void* ptr; } /* Line 1529 of yacc.c. */ #line 175 "colorbar/parser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/colorbar/parser.Y000644 000765 000000 00000011231 12705446131 016737 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {ColorbarBase* cb} %lex-param {cbFlexLexer* ll} %parse-param {cbFlexLexer* ll} %{ #define YYDEBUG 1 #include #include "colorbarbase.h" #undef yyFlexLexer #define yyFlexLexer cbFlexLexer #include extern int cblex(void*, cbFlexLexer*); extern void cberror(ColorbarBase*, cbFlexLexer*, const char*); %} %union { #define CBBUFSIZE 1024 float real; int integer; char str[CBBUFSIZE]; void* ptr; } %type numeric %type yesno %type pscolorspace %token INT %token REAL %token STRING %token POINTER %token ADJUST_ %token BEGIN_ %token BIAS_ %token BW_ %token CHANNEL_ %token CMYK_ %token COLORMAP_ %token COLORBAR_ %token COLORSPACE_ %token CONTRAST_ %token CURSOR_ %token DEBUG_ %token DELETE_ %token EDIT_ %token END_ %token GET_ %token GRAY_ %token FALSE_ %token FILE_ %token HEIGHT_ %token HIDE_ %token ID_ %token INVERT_ %token ITT_ %token LEVEL_ %token LIST_ %token LOAD_ %token MACOSX_ %token MAP_ %token MOTION_ %token N_ %token NAME_ %token NO_ %token OFF_ %token ON_ %token POSTSCRIPT_ %token PRINT_ %token QUERY_ %token RESET_ %token RESOLUTION_ %token RGB_ %token SAVE_ %token SHOW_ %token TAG_ %token TRUE_ %token VALUE_ %token VAR_ %token VERSION_ %token WIDTH_ %token WIN32_ %token WINDOW_ %token Y_ %token YES_ %% command : DEBUG_ debug | ADJUST_ numeric numeric {cb->adjustCmd($2,$3);} | COLORBAR_ colorbar | COLORMAP_ colormap | GET_ get | HIDE_ {cb->hideCmd();} | INVERT_ yesno {cb->invertCmd($2 );} | ITT_ itt | LIST_ list | LOAD_ load | MACOSX_ macosx | MAP_ map | POSTSCRIPT_ postscript | QUERY_ CURSOR_ {cb->queryCursorCmd();} | RESET_ {cb->resetCmd();} | RGB_ CHANNEL_ STRING {cb->setRGBChannelCmd($3);} | TAG_ tag | SAVE_ save | SHOW_ {cb->showCmd();} | VERSION_ {cb->msg("Colorbar 1.0");} | WIN32_ win32 ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; yesno : INT {$$=($1 ? 1 : 0);} | YES_ {$$=1;} | Y_ {$$=1;} | ON_ {$$=1;} | TRUE_ {$$=1;} | NO_ {$$=0;} | N_ {$$=0;} | OFF_ {$$=0;} | FALSE_ {$$=0;} ; colorbar: INT numeric numeric INT {cb->setColorbarCmd($1, $2, $3, $4);} | RGB_ numeric numeric numeric numeric numeric numeric INT {cb->setColorbarCmd($2, $3, $4, $5, $6, $7, $8);} ; colormap: LEVEL_ colormaplevel | WINDOW_ STRING {cb->setColormapWindowCmd($2);} ; colormaplevel : /* empty */ {cb->setColormapLevelCmd();} | INT POINTER {cb->setColormapLevelCmd($1, (double*)$2);} ; get : BIAS_ {cb->getBiasCmd();} | COLORBAR_ {cb->getColorbarCmd();} | COLORMAP_ {cb->getColormapCmd();} | CONTRAST_ {cb->getContrastCmd();} | FILE_ NAME_ {cb->getCurrentFileNameCmd();} | FILE_ NAME_ INT {cb->getColormapFileNameCmd($3);} | HEIGHT_ {cb->getHeightCmd();} | ID_ {cb->getCurrentIDCmd();} | INVERT_ {cb->getInvertCmd();} | NAME_ {cb->getCurrentNameCmd();} | NAME_ INT {cb->getColormapNameCmd($2);} | RGB_ CHANNEL_ {cb->getRGBChannelCmd();} | VALUE_ INT INT {cb->getValueCmd($2,$3);} | TAG_ getTag | WIDTH_ {cb->getWidthCmd();} ; getTag : /* empty */ {cb->getTagCmd();} | INT INT {cb->getTagCmd($1,$2);} ; itt : STRING {} | INT {} ; list : /* empty */ {cb->listNameCmd();} | ID_ {cb->listIDCmd();} | NAME_ {cb->listNameCmd();} | ITT_ {} | ITT_ ID_ {} | ITT_ NAME_ {} ; load : STRING {cb->loadCmd($1,NULL);} | STRING STRING {cb->loadCmd($1,$2);} | VAR_ loadVar | ITT_ STRING {} ; loadVar : STRING STRING {cb->loadCmd($1,NULL,$2);} | STRING STRING STRING {cb->loadCmd($1,$2,$3);} ; macosx : PRINT_ { #ifdef MAC_OSX_TK cb->macosxPrintCmd(); #endif } ; map : STRING {cb->mapCmd($1);} | INT {cb->mapCmd($1);} ; postscript : COLORSPACE_ pscolorspace {cb->psColorSpaceCmd((Widget::PSColorSpace)$2);} | LEVEL_ INT {cb->psLevelCmd($2);} | RESOLUTION_ INT {cb->psResolutionCmd($2);} ; pscolorspace : BW_ {$$ = Widget::BW;} | GRAY_ {$$ = Widget::GRAY;} | RGB_ {$$ = Widget::RGB;} | CMYK_ {$$ = Widget::CMYK;} ; tag : DELETE_ tagdelete | EDIT_ tagedit | LOAD_ STRING {cb->tagLoadCmd($2);} | SAVE_ STRING {cb->tagSaveCmd($2);} | INT numeric numeric STRING {cb->tagCmd($1,Vector($2,$3),$4);} | STRING {cb->tagCmd($1);} ; tagdelete: /* empty */ {cb->tagDeleteCmd();} | INT INT {cb->tagDeleteCmd($1,$2);} ; tagedit : BEGIN_ INT INT STRING {cb->tagEditBeginCmd($2,$3,$4);} | MOTION_ INT INT {cb->tagEditMotionCmd($2,$3);} | END_ INT INT {cb->tagEditEndCmd($2,$3);} ; save : STRING {cb->saveCmd($1);} | INT STRING {cb->saveCmd($1,$2);} ; win32 : PRINT_ { #ifdef _WIN32 cb->win32PrintCmd(); #endif } ; %% saods9/tksao/colorbar/sao.C000644 000765 000000 00000010772 12705446131 016210 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include "sao.h" #include "colorbar.h" SAOColorMap* cm; // SAO Parser Stuf #undef yyFlexLexer #define yyFlexLexer liFlexLexer #include void* lilval; liFlexLexer* lilexx; extern int liparse(SAOColorMap*, liFlexLexer*); int lilex(void* vval, liFlexLexer* ll) { lilval = vval; lilexx = ll; return ll ? ll->yylex() : 0; } void lierror(SAOColorMap* cm, liFlexLexer* ll, const char* m) {} // LIColor ostream& operator<<(ostream& s, LIColor& c) { s << "(" << c.x << "," << c.y << ")"; return s; } // SAOColorMap SAOColorMap::SAOColorMap(Colorbar* p) : ColorMapInfo(p) { current =&red; } void SAOColorMap::newLIColor(float aa, float bb) { current->append(new LIColor(aa,bb)); } void SAOColorMap::setChannel(ChannelType which) { switch (which) { case RED: current = &red; break; case GREEN: current = &green; break; case BLUE: current = &blue; break; } } int SAOColorMap::load() { ifstream str(fileName); if (!str) return 0; liFlexLexer* ll = new liFlexLexer(&str); liparse(this, ll); delete ll; if (red.isEmpty() || green.isEmpty() || blue.isEmpty()) return 0; // something is missing, bailout else return 1; // we found at least one LIColor for each RGB } int SAOColorMap::load(const char* var) { const char* ccmd = Tcl_GetVar(parent_->getInterp(), var, TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG); if (!ccmd) return 0; // only make command string as long as needed // or the rest will be processed as garbage int len = strlen(ccmd)+2; char* buf = new char[len]; memcpy(buf, ccmd, len); // add terminator to make parser happy buf[len-2] = '\n'; buf[len-1] = '\0'; string x(buf); istringstream istr(x); liFlexLexer* ll = new liFlexLexer(&istr); liparse(this, ll); delete ll; delete [] buf; if (red.isEmpty() || green.isEmpty() || blue.isEmpty()) return 0; // something is missing, bailout else return 1; // we found at least one LIColor for each RGB } void SAOColorMap::save(const char* fn) { ofstream f(fn); if (!f) return; f << *this; } unsigned char SAOColorMap::getColorChar(int i, int count, List* cc) { float x = (float)i/count; LIColor* head = cc->head(); LIColor* tail = NULL; while (head && (head->getX() < x)) if (head) { tail = head; head = head->next(); } if (tail && head) { // interpolate between head and tail float m = (head->getY() - tail->getY()) / (head->getX() - tail->getX()); if (m) { float y = m * (x - tail->getX()) + tail->getY(); //point slope form return (unsigned char)(y * UCHAR_MAX); } else return (unsigned char)(head->getY() * UCHAR_MAX); } else if (!tail && head) // return first LIColor return (unsigned char)(head->getY() * UCHAR_MAX); else if (tail && !head) // return last LIColor return (unsigned char)(tail->getY() * UCHAR_MAX); else return 0; // there is something very wrong-- bail out } unsigned short SAOColorMap::getColorShrt(int i, int count, List* cc) { float x = (float)i/count; LIColor* head = cc->head(); LIColor* tail = NULL; while (head && (head->getX() < x)) if (head) { tail = head; head = head->next(); } if (tail && head) { // interpolate between head and tail float m = (head->getY() - tail->getY()) / (head->getX() - tail->getX()); if (m) { float y = m * (x - tail->getX()) + tail->getY(); //point slope form return (unsigned short)(y * USHRT_MAX); } else return (unsigned short)(head->getY() * USHRT_MAX); } else if (!tail && head) // return first LIColor return (unsigned short)(head->getY() * USHRT_MAX); else if (tail && !head) // return last LIColor return (unsigned short)(tail->getY() * USHRT_MAX); else return 0; // there is something very wrong-- bail out } ostream& operator<<(ostream& str, SAOColorMap& c) { str << "# SAOimage color table" << endl; str << "PSEUDOCOLOR" << endl; str << "RED:" << endl; c.red.head(); do str << *c.red.current(); while (c.red.next()); str << endl; str << "GREEN:" << endl; c.green.head(); do str << *c.green.current(); while (c.green.next()); str << endl; str << "BLUE:" << endl; c.blue.head(); do str << *c.blue.current(); while (c.blue.next()); str << endl; return str; } saods9/tksao/colorbar/sao.h000644 000765 000000 00000004032 12705446131 016245 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __sao_h__ #define __sao_h__ #include "colormap.h" #include "list.h" class Colorbar; // LIColor class LIColor { private: float x; float y; LIColor* next_; LIColor* previous_; public: LIColor() {x=0; y=0; next_=NULL; previous_=NULL;} LIColor(float ll, float ii) {x=ll; y=ii, next_=NULL; previous_=NULL;} LIColor(const LIColor& a) {x=a.x; y=a.y; next_=a.next_; previous_=a.previous_;} LIColor& operator=(const LIColor& a) {x=a.x; y=a.y; next_=a.next_; previous_=a.previous_; return *this;} LIColor* next() {return next_;} LIColor* previous() {return previous_;} void setNext(LIColor* n) {next_ = n;} void setPrevious(LIColor* p) {previous_=p;} float getX() {return x;} float getY() {return y;} friend ostream& operator<<(ostream&, LIColor&); }; // SAOColorMap class SAOColorMap : public ColorMapInfo { public: enum ChannelType {RED,GREEN,BLUE}; protected: List red; List green; List blue; List* current; protected: unsigned char getColorChar(int, int, List*); unsigned short getColorShrt(int, int, List*); public: SAOColorMap(Colorbar* p); ColorMapInfo* dup() {return new SAOColorMap(*this);} int load(); int load(const char* var); void save(const char*); unsigned char getRedChar(int i, int c) {return getColorChar(i,c,&red);} unsigned char getGreenChar(int i, int c) {return getColorChar(i,c,&green);} unsigned char getBlueChar(int i, int c) {return getColorChar(i,c,&blue);} unsigned short getRedShrt(int i, int c) {return getColorShrt(i,c,&red);} unsigned short getGreenShrt(int i, int c) {return getColorShrt(i,c,&green);} unsigned short getBlueShrt(int i, int c) {return getColorShrt(i,c,&blue);} void setChannel(ChannelType); void newLIColor(float,float); friend ostream& operator<<(ostream&, SAOColorMap&); }; #endif saods9/tksao/colorbar/saolex.C000644 000765 000000 00000133404 12705446131 016717 0ustar00joyewheel000000 000000 #line 2 "colorbar/saolex.C" #line 4 "colorbar/saolex.C" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* The c++ scanner is a mess. The FlexLexer.h header file relies on the * following macro. This is required in order to pass the c++-multiple-scanners * test in the regression suite. We get reports that it breaks inheritance. * We will address this in a future release of flex, or omit the C++ scanner * altogether. */ #define yyFlexLexer liFlexLexer /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ #include #include #include #include /* end standard C++ headers. */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t yyleng; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { std::istream* yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] void *lialloc (yy_size_t ); void *lirealloc (void *,yy_size_t ); void lifree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; #define yytext_ptr yytext #include int yyFlexLexer::yywrap() { return 1; } /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 23 #define YY_END_OF_BUFFER 24 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[84] = { 0, 0, 0, 2, 2, 24, 22, 19, 21, 22, 22, 22, 15, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 2, 1, 19, 20, 0, 15, 17, 16, 15, 18, 18, 18, 18, 18, 18, 18, 8, 18, 10, 18, 18, 18, 18, 2, 0, 0, 0, 16, 18, 18, 18, 18, 18, 9, 18, 12, 18, 14, 16, 0, 17, 3, 18, 18, 18, 18, 18, 13, 4, 7, 5, 6, 18, 18, 18, 18, 18, 18, 11, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 5, 6, 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 1, 1, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15, 15, 16, 17, 18, 19, 20, 15, 21, 22, 23, 24, 15, 15, 15, 25, 15, 1, 1, 1, 1, 1, 1, 26, 27, 28, 29, 30, 31, 32, 15, 15, 15, 15, 33, 34, 35, 36, 37, 15, 38, 39, 40, 41, 15, 15, 15, 42, 15, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[43] = { 0, 1, 1, 2, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 } ; static yyconst flex_int16_t yy_base[87] = { 0, 0, 0, 217, 210, 212, 222, 209, 222, 206, 37, 200, 39, 200, 41, 42, 44, 47, 43, 53, 54, 52, 57, 69, 0, 222, 202, 222, 196, 80, 82, 84, 91, 196, 95, 84, 100, 99, 101, 107, 195, 98, 194, 110, 117, 114, 111, 0, 60, 119, 192, 124, 130, 128, 135, 137, 133, 189, 138, 186, 147, 184, 182, 158, 144, 143, 150, 155, 160, 152, 167, 142, 141, 77, 74, 71, 169, 166, 174, 175, 178, 177, 55, 222, 215, 53, 218 } ; static yyconst flex_int16_t yy_def[87] = { 0, 83, 1, 84, 84, 83, 83, 83, 83, 83, 83, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 83, 83, 83, 83, 83, 83, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 83, 83, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 83, 83, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 0, 83, 83, 83 } ; static yyconst flex_int16_t yy_nxt[265] = { 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 13, 15, 13, 16, 17, 13, 13, 13, 18, 19, 20, 21, 13, 22, 13, 23, 13, 14, 13, 15, 13, 16, 17, 13, 13, 18, 19, 20, 21, 13, 22, 13, 23, 28, 29, 31, 32, 83, 83, 83, 83, 34, 37, 83, 36, 38, 33, 35, 83, 83, 83, 83, 40, 83, 44, 50, 41, 62, 39, 34, 37, 42, 36, 38, 35, 83, 43, 83, 45, 40, 83, 46, 44, 83, 41, 39, 31, 29, 42, 30, 83, 30, 48, 43, 49, 45, 48, 31, 32, 46, 50, 83, 51, 34, 83, 83, 83, 83, 52, 53, 48, 57, 49, 83, 48, 54, 83, 83, 55, 56, 83, 34, 58, 83, 63, 52, 64, 53, 59, 57, 83, 51, 54, 61, 83, 55, 83, 56, 60, 83, 58, 83, 65, 83, 83, 69, 59, 83, 83, 83, 61, 64, 66, 83, 68, 60, 83, 67, 83, 71, 65, 83, 70, 69, 72, 64, 83, 73, 74, 66, 75, 68, 83, 83, 67, 83, 78, 71, 76, 70, 83, 83, 72, 83, 83, 73, 74, 75, 77, 62, 83, 80, 83, 79, 78, 83, 76, 81, 82, 62, 83, 83, 83, 30, 26, 77, 83, 30, 80, 27, 79, 26, 83, 25, 81, 82, 24, 24, 24, 47, 25, 47, 5, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83 } ; static yyconst flex_int16_t yy_chk[265] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 12, 12, 14, 15, 18, 16, 12, 16, 17, 15, 17, 85, 14, 21, 19, 20, 82, 18, 22, 21, 48, 19, 48, 17, 12, 16, 19, 15, 17, 14, 23, 20, 75, 22, 18, 74, 23, 21, 73, 19, 17, 29, 29, 19, 30, 35, 31, 29, 20, 30, 22, 31, 32, 32, 23, 34, 34, 34, 32, 41, 37, 36, 38, 35, 36, 29, 41, 30, 39, 31, 37, 43, 46, 38, 39, 45, 32, 43, 44, 49, 35, 49, 36, 44, 41, 51, 51, 37, 46, 53, 38, 52, 39, 45, 56, 43, 54, 52, 55, 58, 56, 44, 72, 71, 65, 46, 64, 53, 60, 55, 45, 66, 54, 69, 60, 52, 67, 58, 56, 66, 63, 68, 67, 68, 53, 69, 55, 77, 70, 54, 76, 77, 60, 70, 58, 78, 79, 66, 81, 80, 67, 68, 69, 76, 62, 61, 79, 59, 78, 77, 57, 70, 80, 81, 50, 42, 40, 33, 28, 26, 76, 13, 11, 79, 9, 78, 7, 5, 4, 80, 81, 84, 84, 84, 86, 3, 86, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "colorbar/saolex.L" /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ #line 12 "colorbar/saolex.L" #include #include #include #include #include "util.h" #include "saoparser.H" extern YYSTYPE* lilval; extern liFlexLexer* lilexx; /* rules */ #line 508 "colorbar/saolex.C" #define INITIAL 0 #define DISCARD 1 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO #define ECHO LexerOutput( yytext, yyleng ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ \ if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) LexerError( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 #define YY_DECL int yyFlexLexer::yylex() #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 31 "colorbar/saolex.L" #line 612 "colorbar/saolex.C" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = & std::cin; if ( ! yyout ) yyout = & std::cout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 84 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 83 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 33 "colorbar/saolex.L" { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(lilval->str,""); // feed a blank string return STRING; } YY_BREAK case 2: YY_RULE_SETUP #line 40 "colorbar/saolex.L" { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(SAOBUFSIZE-1) ? yyleng:(SAOBUFSIZE-1); strncpy(lilval->str,yytext,ll); lilval->str[ll] = '\0'; return STRING; } YY_BREAK case 3: YY_RULE_SETUP #line 48 "colorbar/saolex.L" {return BLUE_;} YY_BREAK case 4: YY_RULE_SETUP #line 49 "colorbar/saolex.L" {return DEBUG_;} YY_BREAK case 5: YY_RULE_SETUP #line 50 "colorbar/saolex.L" {return GAMMA_;} YY_BREAK case 6: YY_RULE_SETUP #line 51 "colorbar/saolex.L" {return GREEN_;} YY_BREAK case 7: YY_RULE_SETUP #line 52 "colorbar/saolex.L" {return FALSE_;} YY_BREAK case 8: YY_RULE_SETUP #line 53 "colorbar/saolex.L" {return NO_;} YY_BREAK case 9: YY_RULE_SETUP #line 54 "colorbar/saolex.L" {return OFF_;} YY_BREAK case 10: YY_RULE_SETUP #line 55 "colorbar/saolex.L" {return ON_;} YY_BREAK case 11: YY_RULE_SETUP #line 56 "colorbar/saolex.L" {return PSEUDOCOLOR_;} YY_BREAK case 12: YY_RULE_SETUP #line 57 "colorbar/saolex.L" {return RED_;} YY_BREAK case 13: YY_RULE_SETUP #line 58 "colorbar/saolex.L" {return TRUE_;} YY_BREAK case 14: YY_RULE_SETUP #line 59 "colorbar/saolex.L" {return YES_;} YY_BREAK case 15: YY_RULE_SETUP #line 61 "colorbar/saolex.L" { // Integer lilval->integer = atoi(yytext); return INT; } YY_BREAK case 16: #line 67 "colorbar/saolex.L" case 17: YY_RULE_SETUP #line 67 "colorbar/saolex.L" { // Real Number lilval->real = atof(yytext); return REAL; } YY_BREAK case 18: YY_RULE_SETUP #line 72 "colorbar/saolex.L" { // General String int ll = yyleng <(SAOBUFSIZE-1) ? yyleng:(SAOBUFSIZE-1); strncpy(lilval->str,yytext,ll); lilval->str[ll] = '\0'; return STRING; } YY_BREAK case 19: YY_RULE_SETUP #line 79 "colorbar/saolex.L" { // White Spaces } YY_BREAK case 20: /* rule 20 can match eol */ YY_RULE_SETUP #line 82 "colorbar/saolex.L" { // windows line feed return '\n'; } YY_BREAK case 21: /* rule 21 can match eol */ YY_RULE_SETUP #line 86 "colorbar/saolex.L" { // linefeed return '\n'; } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(DISCARD): #line 90 "colorbar/saolex.L" { // eof return EOF_; } YY_BREAK case 22: YY_RULE_SETUP #line 94 "colorbar/saolex.L" { // Else, return the char return toupper(yytext[0]); } YY_BREAK case 23: YY_RULE_SETUP #line 98 "colorbar/saolex.L" ECHO; YY_BREAK #line 842 "colorbar/saolex.C" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ) { yyin = arg_yyin; yyout = arg_yyout; yy_c_buf_p = 0; yy_init = 0; yy_start = 0; yy_flex_debug = 0; yylineno = 1; // this will only get updated if %option yylineno yy_did_buffer_switch_on_eof = 0; yy_looking_for_trail_begin = 0; yy_more_flag = 0; yy_more_len = 0; yy_more_offset = yy_prev_more_offset = 0; yy_start_stack_ptr = yy_start_stack_depth = 0; yy_start_stack = NULL; yy_buffer_stack = 0; yy_buffer_stack_top = 0; yy_buffer_stack_max = 0; yy_state_buf = 0; } /* The contents of this function are C++ specific, so the () macro is not used. */ yyFlexLexer::~yyFlexLexer() { delete [] yy_state_buf; lifree(yy_start_stack ); yy_delete_buffer( YY_CURRENT_BUFFER ); lifree(yy_buffer_stack ); } /* The contents of this function are C++ specific, so the () macro is not used. */ void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out ) { if ( new_in ) { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) ); } if ( new_out ) yyout = new_out; } #ifdef YY_INTERACTIVE size_t yyFlexLexer::LexerInput( char* buf, size_t /* max_size */ ) #else size_t yyFlexLexer::LexerInput( char* buf, size_t max_size ) #endif { if ( yyin->eof() || yyin->fail() ) return 0; #ifdef YY_INTERACTIVE yyin->get( buf[0] ); if ( yyin->eof() ) return 0; if ( yyin->bad() ) return -1; return 1; #else (void) yyin->read( buf, max_size ); if ( yyin->bad() ) return -1; else return yyin->gcount(); #endif } void yyFlexLexer::LexerOutput( const char* buf, size_t size ) { (void) yyout->write( buf, size ); } /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ int yyFlexLexer::yy_get_next_buffer() { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ lirealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) lirealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ yy_state_type yyFlexLexer::yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 84 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 84 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 83); return yy_is_jam ? 0 : yy_current_state; } void yyFlexLexer::yyunput( int c, register char* yy_bp) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } int yyFlexLexer::yyinput() { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyFlexLexer::yyrestart( std::istream* input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } void yyFlexLexer::yy_load_buffer_state() { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) lialloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) lialloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) lifree((void *) b->yy_ch_buf ); lifree((void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yyFlexLexer::yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ void yyFlexLexer::yyensure_buffer_stack(void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)lialloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)lirealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } void yyFlexLexer::yy_push_state( int new_state ) { if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) ) { yy_size_t new_size; (yy_start_stack_depth) += YY_START_STACK_INCR; new_size = (yy_start_stack_depth) * sizeof( int ); if ( ! (yy_start_stack) ) (yy_start_stack) = (int *) lialloc(new_size ); else (yy_start_stack) = (int *) lirealloc((void *) (yy_start_stack),new_size ); if ( ! (yy_start_stack) ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START; BEGIN(new_state); } void yyFlexLexer::yy_pop_state() { if ( --(yy_start_stack_ptr) < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN((yy_start_stack)[(yy_start_stack_ptr)]); } int yyFlexLexer::yy_top_state() { return (yy_start_stack)[(yy_start_stack_ptr) - 1]; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif void yyFlexLexer::LexerError( yyconst char msg[] ) { std::cerr << msg << std::endl; exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *lialloc (yy_size_t size ) { return (void *) malloc( size ); } void *lirealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void lifree (void * ptr ) { free( (char *) ptr ); /* see lirealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 98 "colorbar/saolex.L" void liDiscard(int doit) { if (lilexx) lilexx->begin(DISCARD, doit); } void liFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/colorbar/saolex.L000644 000765 000000 00000003665 12705446131 016735 0ustar00joyewheel000000 000000 /* Copyright (C) 1999-2016 * Smithsonian Astrophysical Observatory, Cambridge, MA, USA * For conditions of distribution and use, see copyright notice in "copyright" */ %option noyywrap %option caseless %option never-interactive %option c++ %{ #include #include #include #include #include "util.h" #include "saoparser.H" extern YYSTYPE* lilval; extern liFlexLexer* lilexx; %} %x DISCARD D [0-9] E [Ee][+-]?{D}+ /* rules */ %% [\n] { // special case-- #\n BEGIN INITIAL; yyless(0); // put back the terminator strcpy(lilval->str,""); // feed a blank string return STRING; } [^\n]* { // Discard reset of line BEGIN INITIAL; int ll = yyleng <(SAOBUFSIZE-1) ? yyleng:(SAOBUFSIZE-1); strncpy(lilval->str,yytext,ll); lilval->str[ll] = '\0'; return STRING; } blue {return BLUE_;} debug {return DEBUG_;} gamma {return GAMMA_;} green {return GREEN_;} false {return FALSE_;} no {return NO_;} off {return OFF_;} on {return ON_;} pseudocolor {return PSEUDOCOLOR_;} red {return RED_;} true {return TRUE_;} yes {return YES_;} [+-]?{D}+ { // Integer lilval->integer = atoi(yytext); return INT; } [+-]?{D}+"."?({E})? | [+-]?{D}*"."{D}+({E})? { // Real Number lilval->real = atof(yytext); return REAL; } [0-9A-Za-z]+ { // General String int ll = yyleng <(SAOBUFSIZE-1) ? yyleng:(SAOBUFSIZE-1); strncpy(lilval->str,yytext,ll); lilval->str[ll] = '\0'; return STRING; } [ \t]+ { // White Spaces } \r\n { // windows line feed return '\n'; } \n { // linefeed return '\n'; } <> { // eof return EOF_; } . { // Else, return the char return toupper(yytext[0]); } %% void liDiscard(int doit) { if (lilexx) lilexx->begin(DISCARD, doit); } void liFlexLexer::begin(int which, int doit) { BEGIN which; if (doit) yyless(0); } saods9/tksao/colorbar/saoparser.C000644 000765 000000 00000130436 12553253013 017421 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse liparse #define yylex lilex #define yyerror lierror #define yylval lilval #define yychar lichar #define yydebug lidebug #define yynerrs linerrs /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { REAL = 258, INT = 259, STRING = 260, EOF_ = 261, BLUE_ = 262, DEBUG_ = 263, GAMMA_ = 264, GREEN_ = 265, FALSE_ = 266, NO_ = 267, OFF_ = 268, ON_ = 269, PSEUDOCOLOR_ = 270, RED_ = 271, TRUE_ = 272, YES_ = 273 }; #endif /* Tokens. */ #define REAL 258 #define INT 259 #define STRING 260 #define EOF_ 261 #define BLUE_ 262 #define DEBUG_ 263 #define GAMMA_ 264 #define GREEN_ 265 #define FALSE_ 266 #define NO_ 267 #define OFF_ 268 #define ON_ 269 #define PSEUDOCOLOR_ 270 #define RED_ 271 #define TRUE_ 272 #define YES_ 273 /* Copy the first part of user declarations. */ #line 10 "colorbar/saoparser.Y" #define YYDEBUG 1 #define DISCARD_(x) {yyclearin; liDiscard(x);} #include #include #include "sao.h" #undef yyFlexLexer #define yyFlexLexer liFlexLexer #include extern int lilex(void*, liFlexLexer*); extern void lierror(SAOColorMap*, liFlexLexer*, const char*); extern void liDiscard(int); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 29 "colorbar/saoparser.Y" { #define SAOBUFSIZE 4096 char str[SAOBUFSIZE]; int integer; float real; } /* Line 193 of yacc.c. */ #line 166 "colorbar/saoparser.C" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 179 "colorbar/saoparser.C" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 23 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 36 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 26 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 11 /* YYNRULES -- Number of rules. */ #define YYNRULES 24 /* YYNRULES -- Number of states. */ #define YYNSTATES 40 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 273 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 24, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 19, 2, 2, 2, 2, 21, 23, 2, 2, 22, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 20, 25, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 7, 10, 13, 15, 17, 18, 22, 24, 28, 32, 36, 37, 40, 43, 45, 51, 53, 55, 57, 59, 61, 63 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 27, 0, -1, 27, 28, 34, -1, 28, 34, -1, 8, 36, -1, 30, -1, 15, -1, -1, 19, 29, 5, -1, 32, -1, 16, 20, 31, -1, 10, 20, 31, -1, 7, 20, 31, -1, -1, 9, 35, -1, 32, 33, -1, 33, -1, 21, 35, 22, 35, 23, -1, 24, -1, 25, -1, 6, -1, 3, -1, 4, -1, 14, -1, 13, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 59, 59, 60, 63, 64, 65, 66, 66, 67, 70, 71, 72, 75, 76, 79, 80, 83, 86, 87, 88, 91, 92, 95, 96 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "REAL", "INT", "STRING", "EOF_", "BLUE_", "DEBUG_", "GAMMA_", "GREEN_", "FALSE_", "NO_", "OFF_", "ON_", "PSEUDOCOLOR_", "RED_", "TRUE_", "YES_", "'#'", "':'", "'('", "','", "')'", "'\\n'", "';'", "$accept", "commands", "command", "@1", "color", "gamma", "lis", "li", "terminator", "numeric", "debug", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 35, 58, 40, 44, 41, 10, 59 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 26, 27, 27, 28, 28, 28, 29, 28, 28, 30, 30, 30, 31, 31, 32, 32, 33, 34, 34, 34, 35, 35, 36, 36 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 3, 2, 2, 1, 1, 0, 3, 1, 3, 3, 3, 0, 2, 2, 1, 5, 1, 1, 1, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 0, 0, 0, 6, 0, 7, 0, 0, 0, 5, 9, 16, 13, 24, 23, 4, 13, 13, 0, 21, 22, 0, 1, 0, 20, 18, 19, 3, 15, 0, 12, 11, 10, 8, 0, 2, 14, 0, 17 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 8, 9, 19, 10, 31, 11, 12, 28, 22, 16 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -30 static const yytype_int8 yypact[] = { 10, -15, -11, 4, -30, 7, -30, 8, 0, -2, -30, -12, -30, 19, -30, -30, -30, 19, 19, 25, -30, -30, 11, -30, -2, -30, -30, -30, -30, -30, 8, -30, -30, -30, -30, 8, -30, -30, 9, -30 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -30, -30, 26, -30, -30, -4, -30, 24, 12, -29, -30 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 23, 37, 14, 15, 25, 13, 38, 1, 2, 7, 3, 20, 21, 32, 33, 4, 5, 1, 2, 6, 3, 7, 26, 27, 17, 4, 5, 18, 30, 6, 34, 7, 39, 35, 24, 29, 36 }; static const yytype_uint8 yycheck[] = { 0, 30, 13, 14, 6, 20, 35, 7, 8, 21, 10, 3, 4, 17, 18, 15, 16, 7, 8, 19, 10, 21, 24, 25, 20, 15, 16, 20, 9, 19, 5, 21, 23, 22, 8, 11, 24 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 7, 8, 10, 15, 16, 19, 21, 27, 28, 30, 32, 33, 20, 13, 14, 36, 20, 20, 29, 3, 4, 35, 0, 28, 6, 24, 25, 34, 33, 9, 31, 31, 31, 5, 22, 34, 35, 35, 23 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (cm, ll, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, ll) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, cm, ll); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, SAOColorMap* cm, liFlexLexer* ll) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, cm, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; SAOColorMap* cm; liFlexLexer* ll; #endif { if (!yyvaluep) return; YYUSE (cm); YYUSE (ll); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, SAOColorMap* cm, liFlexLexer* ll) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, cm, ll) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; SAOColorMap* cm; liFlexLexer* ll; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, cm, ll); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, SAOColorMap* cm, liFlexLexer* ll) #else static void yy_reduce_print (yyvsp, yyrule, cm, ll) YYSTYPE *yyvsp; int yyrule; SAOColorMap* cm; liFlexLexer* ll; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , cm, ll); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, cm, ll); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, SAOColorMap* cm, liFlexLexer* ll) #else static void yydestruct (yymsg, yytype, yyvaluep, cm, ll) const char *yymsg; int yytype; YYSTYPE *yyvaluep; SAOColorMap* cm; liFlexLexer* ll; #endif { YYUSE (yyvaluep); YYUSE (cm); YYUSE (ll); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (SAOColorMap* cm, liFlexLexer* ll); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (SAOColorMap* cm, liFlexLexer* ll) #else int yyparse (cm, ll) SAOColorMap* cm; liFlexLexer* ll; #endif #endif { /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 7: #line 66 "colorbar/saoparser.Y" {DISCARD_(1);} break; case 10: #line 70 "colorbar/saoparser.Y" {cm->setChannel(SAOColorMap::RED);;} break; case 11: #line 71 "colorbar/saoparser.Y" {cm->setChannel(SAOColorMap::GREEN);;} break; case 12: #line 72 "colorbar/saoparser.Y" {cm->setChannel(SAOColorMap::BLUE);;} break; case 17: #line 83 "colorbar/saoparser.Y" {cm->newLIColor((yyvsp[(2) - (5)].real),(yyvsp[(4) - (5)].real));;} break; case 20: #line 88 "colorbar/saoparser.Y" {YYACCEPT;;} break; case 21: #line 91 "colorbar/saoparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].real);;} break; case 22: #line 92 "colorbar/saoparser.Y" {(yyval.real)=(yyvsp[(1) - (1)].integer);;} break; case 23: #line 95 "colorbar/saoparser.Y" {yydebug=1;;} break; case 24: #line 96 "colorbar/saoparser.Y" {yydebug=0;;} break; /* Line 1267 of yacc.c. */ #line 1459 "colorbar/saoparser.C" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (cm, ll, YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (cm, ll, yymsg); } else { yyerror (cm, ll, YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, cm, ll); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, cm, ll); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (cm, ll, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, cm, ll); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, cm, ll); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 98 "colorbar/saoparser.Y" saods9/tksao/colorbar/saoparser.H000644 000765 000000 00000005361 12553253013 017424 0ustar00joyewheel000000 000000 /* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { REAL = 258, INT = 259, STRING = 260, EOF_ = 261, BLUE_ = 262, DEBUG_ = 263, GAMMA_ = 264, GREEN_ = 265, FALSE_ = 266, NO_ = 267, OFF_ = 268, ON_ = 269, PSEUDOCOLOR_ = 270, RED_ = 271, TRUE_ = 272, YES_ = 273 }; #endif /* Tokens. */ #define REAL 258 #define INT 259 #define STRING 260 #define EOF_ 261 #define BLUE_ 262 #define DEBUG_ 263 #define GAMMA_ 264 #define GREEN_ 265 #define FALSE_ 266 #define NO_ 267 #define OFF_ 268 #define ON_ 269 #define PSEUDOCOLOR_ 270 #define RED_ 271 #define TRUE_ 272 #define YES_ 273 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 29 "colorbar/saoparser.Y" { #define SAOBUFSIZE 4096 char str[SAOBUFSIZE]; int integer; float real; } /* Line 1529 of yacc.c. */ #line 92 "colorbar/saoparser.H" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif saods9/tksao/colorbar/saoparser.Y000644 000765 000000 00000003067 12705446131 017452 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2016 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" %pure-parser %parse-param {SAOColorMap* cm} %lex-param {liFlexLexer* ll} %parse-param {liFlexLexer* ll} %{ #define YYDEBUG 1 #define DISCARD_(x) {yyclearin; liDiscard(x);} #include #include #include "sao.h" #undef yyFlexLexer #define yyFlexLexer liFlexLexer #include extern int lilex(void*, liFlexLexer*); extern void lierror(SAOColorMap*, liFlexLexer*, const char*); extern void liDiscard(int); %} %union { #define SAOBUFSIZE 4096 char str[SAOBUFSIZE]; int integer; float real; } %type numeric %token REAL %token INT %token STRING %token EOF_ %token BLUE_ %token DEBUG_ %token GAMMA_ %token GREEN_ %token FALSE_ %token NO_ %token OFF_ %token ON_ %token PSEUDOCOLOR_ %token RED_ %token TRUE_ %token YES_ %% commands: commands command terminator | command terminator ; command : DEBUG_ debug | color | PSEUDOCOLOR_ | '#' {DISCARD_(1)} STRING | lis ; color : RED_ ':' gamma {cm->setChannel(SAOColorMap::RED);} | GREEN_ ':' gamma {cm->setChannel(SAOColorMap::GREEN);} | BLUE_ ':' gamma {cm->setChannel(SAOColorMap::BLUE);} ; gamma : /* empty */ | GAMMA_ numeric ; lis : lis li | li ; li : '(' numeric ',' numeric ')' {cm->newLIColor($2,$4);} ; terminator: '\n' | ';' | EOF_ {YYACCEPT;} ; numeric : REAL {$$=$1;} | INT {$$=$1;} ; debug : ON_ {yydebug=1;} | OFF_ {yydebug=0;} ; %% saods9/tcliis/aclocal.m4000755 000765 000000 00000000223 12257365700 015522 0ustar00joyewheel000000 000000 # # Include the TEA standard macro set # builtin(include,tclconfig/tcl.m4) # # Add here whatever m4 macros you want to define for your package # saods9/tcliis/configure000755 000765 000000 00001046657 12556465611 015620 0ustar00joyewheel000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for tcliis 1.0. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='tcliis' PACKAGE_TARNAME='tcliis' PACKAGE_VERSION='1.0' PACKAGE_STRING='tcliis 1.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS TCLSH_PROG VC_MANIFEST_EMBED_EXE VC_MANIFEST_EMBED_DLL RANLIB_STUB MAKE_STUB_LIB MAKE_STATIC_LIB MAKE_SHARED_LIB MAKE_LIB TCL_DBGX LDFLAGS_DEFAULT CFLAGS_DEFAULT LD_LIBRARY_PATH_VAR SHLIB_CFLAGS SHLIB_LD_LIBS SHLIB_LD STLIB_LD CFLAGS_WARNING CFLAGS_OPTIMIZE CFLAGS_DEBUG RC CELIB_DIR AR SHARED_BUILD TCL_THREADS TCL_INCLUDES PKG_OBJECTS PKG_SOURCES MATH_LIBS EGREP GREP RANLIB SET_MAKE INSTALL CPP ac_ct_CXX CXXFLAGS CXX TCL_SHLIB_LD_LIBS TCL_LD_FLAGS TCL_EXTRA_CFLAGS TCL_DEFS TCL_LIBS CLEANFILES OBJEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC TCL_STUB_LIB_SPEC TCL_STUB_LIB_FLAG TCL_STUB_LIB_FILE TCL_LIB_SPEC TCL_LIB_FLAG TCL_LIB_FILE TCL_SRC_DIR TCL_BIN_DIR TCL_PATCH_LEVEL TCL_VERSION PKG_CFLAGS PKG_LIBS PKG_INCLUDES PKG_HEADERS PKG_TCL_SOURCES PKG_STUB_OBJECTS PKG_STUB_SOURCES PKG_STUB_LIB_FILE PKG_LIB_FILE EXEEXT CYGPATH target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_tcl with_tclinclude enable_threads enable_shared enable_64bit enable_64bit_vis enable_rpath enable_wince with_celib enable_symbols ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures tcliis 1.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/tcliis] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of tcliis 1.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-threads build with threads --enable-shared build and link with shared libraries (default: on) --enable-64bit enable 64bit support (default: off) --enable-64bit-vis enable 64bit Sparc VIS support (default: off) --disable-rpath disable rpath support (default: on) --enable-wince enable Win/CE support (where applicable) --enable-symbols build with debugging symbols (default: off) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-tcl directory containing tcl configuration (tclConfig.sh) --with-tclinclude directory containing the public Tcl header files --with-celib=DIR use Windows/CE support library from DIR Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF tcliis configure 1.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by tcliis $as_me 1.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct TEA configuration" >&5 $as_echo_n "checking for correct TEA configuration... " >&6; } if test x"${PACKAGE_NAME}" = x ; then as_fn_error $? " The PACKAGE_NAME variable must be defined by your TEA configure.in" "$LINENO" 5 fi if test x"3.9" = x ; then as_fn_error $? " TEA version not specified." "$LINENO" 5 elif test "3.9" != "${TEA_VERSION}" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&5 $as_echo "warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (TEA ${TEA_VERSION})" >&5 $as_echo "ok (TEA ${TEA_VERSION})" >&6; } fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) # Extract the first word of "cygpath", so it can be a program name with args. set dummy cygpath; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CYGPATH+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CYGPATH"; then ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CYGPATH="cygpath -w" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" fi fi CYGPATH=$ac_cv_prog_CYGPATH if test -n "$CYGPATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 $as_echo "$CYGPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi { $as_echo "$as_me:${as_lineno-$LINENO}: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&5 $as_echo "$as_me: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&6;} # This package name must be replaced statically for AC_SUBST to work # Substitute STUB_LIB_FILE in case package creates a stub library too. # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... ac_aux_dir= for ac_dir in tclconfig "$srcdir"/tclconfig; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in tclconfig \"$srcdir\"/tclconfig" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true # Check whether --with-tcl was given. if test "${with_tcl+set}" = set; then : withval=$with_tcl; with_tclconfig="${withval}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl configuration" >&5 $as_echo_n "checking for Tcl configuration... " >&6; } if ${ac_cv_c_tclconfig+:} false; then : $as_echo_n "(cached) " >&6 else # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5 $as_echo "$as_me: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&2;} with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else as_fn_error $? "${with_tclconfig} directory doesn't contain tclConfig.sh" "$LINENO" 5 fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../tcl[8-9].[0-9]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../tcl[8-9].[0-9]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi fi if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" as_fn_error $? "Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" "$LINENO" 5 else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: found ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo "found ${TCL_BIN_DIR}/tclConfig.sh" >&6; } fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo_n "checking for existence of ${TCL_BIN_DIR}/tclConfig.sh... " >&6; } if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 $as_echo "loading" >&6; } . "${TCL_BIN_DIR}/tclConfig.sh" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo "could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6; } fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" { $as_echo "$as_me:${as_lineno-$LINENO}: checking platform" >&5 $as_echo_n "checking platform... " >&6; } hold_cc=$CC; CC="$TCL_CC" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifdef _WIN32 #error win32 #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : TEA_PLATFORM="unix" else TEA_PLATFORM="windows" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CC=$hold_cc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEA_PLATFORM" >&5 $as_echo "$TEA_PLATFORM" >&6; } # The BUILD_$pkg is to define the correct extern storage class # handling when making this package cat >>confdefs.h <<_ACEOF #define BUILD_${PACKAGE_NAME} /**/ _ACEOF # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: #-------------------------------------------------------------------- # Load the tkConfig.sh file if necessary (Tk extension) #-------------------------------------------------------------------- #TEA_PATH_TKCONFIG #TEA_LOAD_TKCONFIG #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&5 $as_echo "$as_me: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&6;} prefix=${TCL_PREFIX} else { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to /usr/local" >&5 $as_echo "$as_me: --prefix defaulting to /usr/local" >&6;} prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&5 $as_echo "$as_me: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&6;} exec_prefix=${TCL_EXEC_PREFIX} else { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to ${prefix}" >&5 $as_echo "$as_me: --exec-prefix defaulting to ${prefix}" >&6;} exec_prefix=$prefix fi fi #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC and a few others to create the basic setup # necessary to compile executables. #----------------------------------------------------------------------- # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. #------------------------------------------------------------------------ # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------ if test -z "$no_pipe" -a -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler understands -pipe" >&5 $as_echo_n "checking if the compiler understands -pipe... " >&6; } if ${tcl_cv_cc_pipe+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_cc_pipe=yes else tcl_cv_cc_pipe=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_pipe" >&5 $as_echo "$tcl_cv_cc_pipe" >&6; } if test $tcl_cv_cc_pipe = yes; then CFLAGS="$CFLAGS -pipe" fi fi #-------------------------------------------------------------------- # Common compiler flag setup #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac if test "${TEA_PLATFORM}" = "unix" ; then #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- ac_fn_c_check_func "$LINENO" "sin" "ac_cv_func_sin" if test "x$ac_cv_func_sin" = xyes; then : MATH_LIBS="" else MATH_LIBS="-lm" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lieee" >&5 $as_echo_n "checking for main in -lieee... " >&6; } if ${ac_cv_lib_ieee_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lieee $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ieee_main=yes else ac_cv_lib_ieee_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee_main" >&5 $as_echo "$ac_cv_lib_ieee_main" >&6; } if test "x$ac_cv_lib_ieee_main" = xyes; then : MATH_LIBS="-lieee $MATH_LIBS" fi #-------------------------------------------------------------------- # Interactive UNIX requires -linet instead of -lsocket, plus it # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5 $as_echo_n "checking for main in -linet... " >&6; } if ${ac_cv_lib_inet_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-linet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_inet_main=yes else ac_cv_lib_inet_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5 $as_echo "$ac_cv_lib_inet_main" >&6; } if test "x$ac_cv_lib_inet_main" = xyes; then : LIBS="$LIBS -linet" fi ac_fn_c_check_header_mongrel "$LINENO" "net/errno.h" "ac_cv_header_net_errno_h" "$ac_includes_default" if test "x$ac_cv_header_net_errno_h" = xyes; then : $as_echo "#define HAVE_NET_ERRNO_H 1" >>confdefs.h fi #-------------------------------------------------------------------- # Check for the existence of the -lsocket and -lnsl libraries. # The order here is important, so that they end up in the right # order in the command line generated by make. Here are some # special considerations: # 1. Use "connect" and "accept" to check for -lsocket, and # "gethostbyname" to check for -lnsl. # 2. Use each function name only once: can't redo a check because # autoconf caches the results of the last check and won't redo it. # 3. Use -lnsl and -lsocket only if they supply procedures that # aren't already present in the normal libraries. This is because # IRIX 5.2 has libraries, but they aren't needed and they're # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- tcl_checkBoth=0 ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : tcl_checkSocket=0 else tcl_checkSocket=1 fi if test "$tcl_checkSocket" = 1; then ac_fn_c_check_func "$LINENO" "setsockopt" "ac_cv_func_setsockopt" if test "x$ac_cv_func_setsockopt" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 $as_echo_n "checking for setsockopt in -lsocket... " >&6; } if ${ac_cv_lib_socket_setsockopt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char setsockopt (); int main () { return setsockopt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_setsockopt=yes else ac_cv_lib_socket_setsockopt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_setsockopt" >&5 $as_echo "$ac_cv_lib_socket_setsockopt" >&6; } if test "x$ac_cv_lib_socket_setsockopt" = xyes; then : LIBS="$LIBS -lsocket" else tcl_checkBoth=1 fi fi fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" ac_fn_c_check_func "$LINENO" "accept" "ac_cv_func_accept" if test "x$ac_cv_func_accept" = xyes; then : tcl_checkNsl=0 else LIBS=$tk_oldLibs fi fi ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : LIBS="$LIBS -lnsl" fi fi # TEA specific: Don't perform the eval of the libraries here because # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking dirent.h" >&5 $as_echo_n "checking dirent.h... " >&6; } if ${tcl_cv_dirent_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #ifndef _POSIX_SOURCE # ifdef __Lynx__ /* * Generate compilation error to make the test fail: Lynx headers * are only valid if really in the POSIX environment. */ missing_procedure(); # endif #endif DIR *d; struct dirent *entryPtr; char *p; d = opendir("foobar"); entryPtr = readdir(d); p = entryPtr->d_name; closedir(d); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_dirent_h=yes else tcl_cv_dirent_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_dirent_h" >&5 $as_echo "$tcl_cv_dirent_h" >&6; } if test $tcl_cv_dirent_h = no; then $as_echo "#define NO_DIRENT_H 1" >>confdefs.h fi # TEA specific: ac_fn_c_check_header_mongrel "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" if test "x$ac_cv_header_errno_h" = xyes; then : else $as_echo "#define NO_ERRNO_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default" if test "x$ac_cv_header_float_h" = xyes; then : else $as_echo "#define NO_FLOAT_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default" if test "x$ac_cv_header_values_h" = xyes; then : else $as_echo "#define NO_VALUES_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" if test "x$ac_cv_header_limits_h" = xyes; then : $as_echo "#define HAVE_LIMITS_H 1" >>confdefs.h else $as_echo "#define NO_LIMITS_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : tcl_ok=1 else tcl_ok=0 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strtol" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strtoul" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strtod" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* if test $tcl_ok = 0; then $as_echo "#define NO_STDLIB_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes; then : tcl_ok=1 else tcl_ok=0 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strstr" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strerror" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* # See also memmove check below for a place where NO_STRING_H can be # set and why. if test $tcl_ok = 0; then $as_echo "#define NO_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" if test "x$ac_cv_header_sys_wait_h" = xyes; then : else $as_echo "#define NO_SYS_WAIT_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" if test "x$ac_cv_header_dlfcn_h" = xyes; then : else $as_echo "#define NO_DLFCN_H 1" >>confdefs.h fi # OS/390 lacks sys/param.h (and doesn't need it, by chance). for ac_header in sys/param.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" if test "x$ac_cv_header_sys_param_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_PARAM_H 1 _ACEOF fi done # Let the user call this, because if it triggers, they will # need a compat/strtod.c that is correct. Users can also # use Tcl_GetDouble(FromObj) instead. #TEA_BUGGY_STRTOD fi #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- vars=" iistcl.C xim.C iis.c util.c " for i in $vars; do case $i in \$*) # allow $-var names PKG_SOURCES="$PKG_SOURCES $i" PKG_OBJECTS="$PKG_OBJECTS $i" ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then as_fn_error $? "could not find source file '$i'" "$LINENO" 5 fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}" fi PKG_OBJECTS="$PKG_OBJECTS $j" ;; esac done vars="" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then as_fn_error $? "could not find header file '${srcdir}/$i'" "$LINENO" 5 fi PKG_HEADERS="$PKG_HEADERS $i" done vars="" for i in $vars; do PKG_INCLUDES="$PKG_INCLUDES $i" done vars="-lstdc++" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done PKG_CFLAGS="$PKG_CFLAGS " vars="" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then as_fn_error $? "could not find stub source file '$i'" "$LINENO" 5 fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}" fi PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" done vars="" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then as_fn_error $? "could not find tcl source file '${srcdir}/$i'" "$LINENO" 5 fi PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" done for ac_header in sys/un.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/un.h" "ac_cv_header_sys_un_h" "$ac_includes_default" if test "x$ac_cv_header_sys_un_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_UN_H 1 _ACEOF fi done #-------------------------------------------------------------------- # __CHANGE__ # # You can add more files to clean if your extension creates any extra # files by extending CLEANFILES. # Add pkgIndex.tcl if it is generated in the Makefile instead of ./configure # and change Makefile.in to move it from CONFIG_CLEAN_FILES to BINARIES var. # # A few miscellaneous platform-specific items: # TEA_ADD_* any platform specific compiler/build info here. #-------------------------------------------------------------------- #CLEANFILES="$CLEANFILES pkgIndex.tcl" if test "${TEA_PLATFORM}" = "windows" ; then # Ensure no empty if clauses : #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) else # Ensure no empty else clauses : #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) fi #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl public headers" >&5 $as_echo_n "checking for Tcl public headers... " >&6; } # Check whether --with-tclinclude was given. if test "${with_tclinclude+set}" = set; then : withval=$with_tclinclude; with_tclinclude=${withval} fi if ${ac_cv_c_tclh+:} false; then : $as_echo_n "(cached) " >&6 else # Use the value from --with-tclinclude, if it was given if test x"${with_tclinclude}" != x ; then if test -f "${with_tclinclude}/tcl.h" ; then ac_cv_c_tclh=${with_tclinclude} else as_fn_error $? "${with_tclinclude} directory does not contain tcl.h" "$LINENO" 5 fi else list="" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers directory case ${TCL_DEFS} in *TCL_FRAMEWORK*) list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tcl is not installed, # and in that situation, look there before installed locations. if test -f "${TCL_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TCL_INCLUDE_SPEC}" != x ; then d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tcl.h" ; then ac_cv_c_tclh=$i break fi done fi fi # Print a message based on how we determined the include path if test x"${ac_cv_c_tclh}" = x ; then as_fn_error $? "tcl.h not found. Please specify its location with --with-tclinclude" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_tclh}" >&5 $as_echo "${ac_cv_c_tclh}" >&6; } fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" #TEA_PRIVATE_TCL_HEADERS #TEA_PUBLIC_TK_HEADERS #TEA_PRIVATE_TK_HEADERS #TEA_PATH_X #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. # This auto-enables if Tcl was compiled threaded. #-------------------------------------------------------------------- # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; tcl_ok=$enableval else tcl_ok=yes fi if test "${enable_threads+set}" = set; then enableval="$enable_threads" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then TCL_THREADS=1 if test "${TEA_PLATFORM}" != "windows" ; then # We are always OK on Windows, so check what this platform wants: # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention $as_echo "#define USE_THREAD_ALLOC 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h if test "`uname -s`" = "SunOS" ; then $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h fi $as_echo "#define _THREAD_SAFE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthread" >&5 $as_echo_n "checking for pthread_mutex_init in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_mutex_init=yes else ac_cv_lib_pthread_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthread_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_pthread_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_mutex_init in -lpthread" >&5 $as_echo_n "checking for __pthread_mutex_init in -lpthread... " >&6; } if ${ac_cv_lib_pthread___pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char __pthread_mutex_init (); int main () { return __pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread___pthread_mutex_init=yes else ac_cv_lib_pthread___pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthread___pthread_mutex_init" >&6; } if test "x$ac_cv_lib_pthread___pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthreads" >&5 $as_echo_n "checking for pthread_mutex_init in -lpthreads... " >&6; } if ${ac_cv_lib_pthreads_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthreads $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthreads_pthread_mutex_init=yes else ac_cv_lib_pthreads_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthreads_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_pthreads_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc" >&5 $as_echo_n "checking for pthread_mutex_init in -lc... " >&6; } if ${ac_cv_lib_c_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_pthread_mutex_init=yes else ac_cv_lib_c_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_c_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_c_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc_r" >&5 $as_echo_n "checking for pthread_mutex_init in -lc_r... " >&6; } if ${ac_cv_lib_c_r_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_r_pthread_mutex_init=yes else ac_cv_lib_c_r_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_c_r_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_c_r_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -pthread" else TCL_THREADS=0 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&5 $as_echo "$as_me: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&2;} fi fi fi fi fi else TCL_THREADS=0 fi # Do checking message here to not mess up interleaved configure output { $as_echo "$as_me:${as_lineno-$LINENO}: checking for building with threads" >&5 $as_echo_n "checking for building with threads... " >&6; } if test "${TCL_THREADS}" = 1; then $as_echo "#define TCL_THREADS 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (default)" >&5 $as_echo "yes (default)" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # TCL_THREADS sanity checking. See if our request for building with # threads is the same as the way Tcl was built. If not, warn the user. case ${TCL_DEFS} in *THREADS=1*) if test "${TCL_THREADS}" = "0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads." >&5 $as_echo "$as_me: WARNING: Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads." >&2;} fi ;; *) if test "${TCL_THREADS}" = "1"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core." >&5 $as_echo "$as_me: WARNING: --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core." >&2;} fi ;; esac #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to build libraries" >&5 $as_echo_n "checking how to build libraries... " >&6; } # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; tcl_ok=$enableval else tcl_ok=yes fi if test "${enable_shared+set}" = set; then enableval="$enable_shared" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: shared" >&5 $as_echo "shared" >&6; } SHARED_BUILD=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 $as_echo "static" >&6; } SHARED_BUILD=0 $as_echo "#define STATIC_BUILD 1" >>confdefs.h fi #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Step 0.a: Enable 64 bit support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit support is requested" >&5 $as_echo_n "checking if 64bit support is requested... " >&6; } # Check whether --enable-64bit was given. if test "${enable_64bit+set}" = set; then : enableval=$enable_64bit; do64bit=$enableval else do64bit=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bit" >&5 $as_echo "$do64bit" >&6; } # Step 0.b: Enable Solaris 64 bit VIS support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit Sparc VIS support is requested" >&5 $as_echo_n "checking if 64bit Sparc VIS support is requested... " >&6; } # Check whether --enable-64bit-vis was given. if test "${enable_64bit_vis+set}" = set; then : enableval=$enable_64bit_vis; do64bitVIS=$enableval else do64bitVIS=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bitVIS" >&5 $as_echo "$do64bitVIS" >&6; } # Force 64bit on with VIS if test "$do64bitVIS" = "yes"; then : do64bit=yes fi # Step 0.c: Check if visibility support is available. Do this here so # that platform specific alternatives can be used below if this fails. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports visibility \"hidden\"" >&5 $as_echo_n "checking if compiler supports visibility \"hidden\"... " >&6; } if ${tcl_cv_cc_visibility_hidden+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) void f(void); void f(void) {} int main () { f(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_visibility_hidden=yes else tcl_cv_cc_visibility_hidden=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_visibility_hidden" >&5 $as_echo "$tcl_cv_cc_visibility_hidden" >&6; } if test $tcl_cv_cc_visibility_hidden = yes; then : $as_echo "#define MODULE_SCOPE extern __attribute__((__visibility__(\"hidden\")))" >>confdefs.h $as_echo "#define HAVE_HIDDEN 1" >>confdefs.h fi # Step 0.d: Disable -rpath support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if rpath support is requested" >&5 $as_echo_n "checking if rpath support is requested... " >&6; } # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; doRpath=$enableval else doRpath=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doRpath" >&5 $as_echo "$doRpath" >&6; } # TEA specific: Cross-compiling options for Windows/CE builds? if test "${TEA_PLATFORM}" = windows; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Windows/CE build is requested" >&5 $as_echo_n "checking if Windows/CE build is requested... " >&6; } # Check whether --enable-wince was given. if test "${enable_wince+set}" = set; then : enableval=$enable_wince; doWince=$enableval else doWince=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doWince" >&5 $as_echo "$doWince" >&6; } fi # Set the variable "system" to hold the name and version number # for the system. { $as_echo "$as_me:${as_lineno-$LINENO}: checking system version" >&5 $as_echo_n "checking system version... " >&6; } if ${tcl_cv_sys_version+:} false; then : $as_echo_n "(cached) " >&6 else # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5 $as_echo "$as_me: WARNING: can't find uname command" >&2;} tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5 $as_echo "$tcl_cv_sys_version" >&6; } system=$tcl_cv_sys_version # Require ranlib early so we can override it in special cases below. # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g if test "$GCC" = yes; then : CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" else CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" if test "x$SHLIB_VERSION" = x; then : SHLIB_VERSION="1.0" fi case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs # MACHINE is IX86 for LINK, but this is used by the manifest, # which requires x86|amd64|ia64. MACHINE="X86" if test "$do64bit" != "no" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft Platform SDK" fi MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` PATH64="" case "$do64bit" in amd64|x64|yes) MACHINE="AMD64" ; # default to AMD64 64-bit build PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&5 $as_echo "$as_me: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ensure latest Platform SDK is installed" >&5 $as_echo "$as_me: WARNING: Ensure latest Platform SDK is installed" >&2;} do64bit="no" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using 64-bit $MACHINE mode" >&5 $as_echo " Using 64-bit $MACHINE mode" >&6; } do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" != "no" ; then as_fn_error $? "Windows/CE and 64-bit builds incompatible" "$LINENO" 5 fi if test "$GCC" = "yes" ; then as_fn_error $? "Windows/CE and GCC builds incompatible" "$LINENO" 5 fi # First, look for one uninstalled. # the alternative search directory is invoked by --with-celib if test x"${no_celib}" = x ; then # we reset no_celib in case something fails here no_celib=true # Check whether --with-celib was given. if test "${with_celib+set}" = set; then : withval=$with_celib; with_celibconfig=${withval} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Windows/CE celib directory" >&5 $as_echo_n "checking for Windows/CE celib directory... " >&6; } if ${ac_cv_c_celibconfig+:} false; then : $as_echo_n "(cached) " >&6 else # First check to see if --with-celibconfig was specified. if test x"${with_celibconfig}" != x ; then if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else as_fn_error $? "${with_celibconfig} directory doesn't contain inc directory" "$LINENO" 5 fi fi # then check for a celib library if test x"${ac_cv_c_celibconfig}" = x ; then for i in \ ../celib-palm-3.0 \ ../celib \ ../../celib-palm-3.0 \ ../../celib \ `ls -dr ../celib-*3.[0-9]* 2>/dev/null` \ ${srcdir}/../celib-palm-3.0 \ ${srcdir}/../celib \ `ls -dr ${srcdir}/../celib-*3.[0-9]* 2>/dev/null` \ ; do if test -d "$i/inc" ; then ac_cv_c_celibconfig=`(cd $i; pwd)` break fi done fi fi if test x"${ac_cv_c_celibconfig}" = x ; then as_fn_error $? "Cannot find celib support library directory" "$LINENO" 5 else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $CELIB_DIR" >&5 $as_echo "found $CELIB_DIR" >&6; } fi fi # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length($1)) { printf "CEVERSION=\"%s\"\n", $1; \ if ($1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length($2)) { printf "TARGETCPU=\"%s\"\n", toupper($2) }; \ if (length($3)) { printf "ARCH=\"%s\"\n", toupper($3) }; \ if (length($4)) { printf "PLATFORM=\"%s\"\n", $4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then as_fn_error $? "could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" "$LINENO" 5 doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" != "no" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="\"${PATH64}/cl.exe\"" CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" RC="\"${MSSDK}/bin/rc.exe\"" lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" LINKBIN="\"${PATH64}/link.exe\"" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" # Avoid 'unresolved external symbol __security_cookie' # errors, c.f. http://support.microsoft.com/?id=894573 vars="bufferoverflowU.lib" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="\"${CEBINROOT}/cl.exe\"" else CC="\"${CEBINROOT}/cl${ARCH}.exe\"" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" arch=`echo ${ARCH} | awk '{print tolower($0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do cat >>confdefs.h <<_ACEOF #define $i 1 _ACEOF done cat >>confdefs.h <<_ACEOF #define _WIN32_WCE $CEVERSION _ACEOF cat >>confdefs.h <<_ACEOF #define UNDER_CE $CEVERSION _ACEOF CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RC"; then ac_cv_prog_RC="$RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RC="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RC=$ac_cv_prog_RC if test -n "$RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 $as_echo "$RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RC"; then ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RC"; then ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RC="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 $as_echo "$ac_ct_RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RC" = x; then RC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RC=$ac_ct_RC fi else RC="$ac_cv_prog_RC" fi CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cross-compile version of gcc" >&5 $as_echo_n "checking for cross-compile version of gcc... " >&6; } if ${ac_cv_cross+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __WIN32__ #error cross-compiler #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cross=yes else ac_cv_cross=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cross" >&5 $as_echo "$ac_cv_cross" >&6; } if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # and also # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx # This essentially turns it all on. LDFLAGS_DEBUG="-debug -debugtype:cv" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"; then : # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([^ ]*\)/\1_r/'` ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using $CC for compiling with threads" >&5 $as_echo "Using $CC for compiling with threads" >&6; } fi LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : if test "$GCC" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} else do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" fi fi if test "`uname -m`" = ia64; then : # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" if test "$GCC" = yes; then : CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' else if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared -Wl,-bexpall' else SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" fi SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} fi ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lbind" >&5 $as_echo_n "checking for inet_ntoa in -lbind... " >&6; } if ${ac_cv_lib_bind_inet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbind $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inet_ntoa (); int main () { return inet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bind_inet_ntoa=yes else ac_cv_lib_bind_inet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bind_inet_ntoa" >&5 $as_echo "$ac_cv_lib_bind_inet_ntoa" >&6; } if test "x$ac_cv_lib_bind_inet_ntoa" = xyes; then : LIBS="$LIBS -lbind -lsocket" fi ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; } if ${ac_cv_lib_network_inet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnetwork $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inet_ntoa (); int main () { return inet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_network_inet_ntoa=yes else ac_cv_lib_network_inet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_network_inet_ntoa" >&5 $as_echo "$ac_cv_lib_network_inet_ntoa" >&6; } if test "x$ac_cv_lib_network_inet_ntoa" = xyes; then : LIBS="$LIBS -lnetwork" fi ;; HP-UX-*.11.*) # Use updated header definitions where possible $as_echo "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library if test "`uname -m`" = ia64; then : SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi else SHLIB_SUFFIX=".sl" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = yes; then : LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" fi if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} else CFLAGS="$CFLAGS -z" # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes"; then : if test "$GCC" = yes; then : case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} ;; esac else do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" fi fi ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi if test "$GCC" = yes; then : CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" else case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" fi ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : if test "$GCC" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported by gcc" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported by gcc" >&2;} else do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" fi fi ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "`uname -m`" = "alpha"; then : CFLAGS="$CFLAGS -mieee" fi if test $do64bit = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -m64 flag" >&5 $as_echo_n "checking if compiler accepts -m64 flag... " >&6; } if ${tcl_cv_cc_m64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -m64" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_m64=yes else tcl_cv_cc_m64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_m64" >&5 $as_echo "$tcl_cv_cc_m64" >&6; } if test $tcl_cv_cc_m64 = yes; then : CFLAGS="$CFLAGS -m64" do64bit_ok=yes fi fi # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. if test x"${USE_COMPAT}" != x; then : CFLAGS="$CFLAGS -fno-inline" fi ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac if test "${TCL_THREADS}" = "1"; then : # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" fi # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "${TCL_THREADS}" = "1"; then : # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$@" SHLIB_SUFFIX=".so" LDFLAGS="" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi if test "${TCL_THREADS}" = "1"; then : # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS" fi # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1' TCL_LIB_VERSIONS_OK=nodots ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if ($i~/^(isysroot|mmacosx-version-min)/) print "-"$i}'`" CFLAGS="`echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if (!($i~/^(isysroot|mmacosx-version-min)/)) print "-"$i}'`" if test $do64bit = yes; then : case `arch` in ppc) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch ppc64 flag" >&5 $as_echo_n "checking if compiler accepts -arch ppc64 flag... " >&6; } if ${tcl_cv_cc_arch_ppc64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_arch_ppc64=yes else tcl_cv_cc_arch_ppc64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_ppc64" >&5 $as_echo "$tcl_cv_cc_arch_ppc64" >&6; } if test $tcl_cv_cc_arch_ppc64 = yes; then : CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" do64bit_ok=yes fi;; i386) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch x86_64 flag" >&5 $as_echo_n "checking if compiler accepts -arch x86_64 flag... " >&6; } if ${tcl_cv_cc_arch_x86_64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch x86_64" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_arch_x86_64=yes else tcl_cv_cc_arch_x86_64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_x86_64" >&5 $as_echo "$tcl_cv_cc_arch_x86_64" >&6; } if test $tcl_cv_cc_arch_x86_64 = yes; then : CFLAGS="$CFLAGS -arch x86_64" do64bit_ok=yes fi;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&5 $as_echo "$as_me: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&2;};; esac else # Check for combined 32-bit and 64-bit fat build if echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '; then : fat_32_64=yes fi fi # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -single_module flag" >&5 $as_echo_n "checking if ld accepts -single_module flag... " >&6; } if ${tcl_cv_ld_single_module+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_single_module=yes else tcl_cv_ld_single_module=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_single_module" >&5 $as_echo "$tcl_cv_ld_single_module" >&6; } if test $tcl_cv_ld_single_module = yes; then : SHLIB_LD="${SHLIB_LD} -Wl,-single_module" fi # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([0-9]\{1,5\}\)\(\(\.[0-9]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: if test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int($2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int($2)}'`" -lt 4; then : LDFLAGS="$LDFLAGS -prebind" fi LDFLAGS="$LDFLAGS -headerpad_max_install_names" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -search_paths_first flag" >&5 $as_echo_n "checking if ld accepts -search_paths_first flag... " >&6; } if ${tcl_cv_ld_search_paths_first+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_search_paths_first=yes else tcl_cv_ld_search_paths_first=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_search_paths_first" >&5 $as_echo "$tcl_cv_ld_search_paths_first" >&6; } if test $tcl_cv_ld_search_paths_first = yes; then : LDFLAGS="$LDFLAGS -Wl,-search_paths_first" fi if test "$tcl_cv_cc_visibility_hidden" != yes; then : $as_echo "#define MODULE_SCOPE __private_extern__" >>confdefs.h tcl_cv_cc_visibility_hidden=yes fi CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. if test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"; then : if test "${TEA_WINDOWINGSYSTEM}" = x11; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit X11" >&5 $as_echo_n "checking for 64-bit X11... " >&6; } if ${tcl_cv_lib_x11_64+:} false; then : $as_echo_n "(cached) " >&6 else for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_lib_x11_64=yes else tcl_cv_lib_x11_64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_x11_64" >&5 $as_echo "$tcl_cv_lib_x11_64" >&6; } fi if test "${TEA_WINDOWINGSYSTEM}" = aqua; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit Tk" >&5 $as_echo_n "checking for 64-bit Tk... " >&6; } if ${tcl_cv_lib_tk_64+:} false; then : $as_echo_n "(cached) " >&6 else for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { Tk_InitStubs(NULL, "", 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_lib_tk_64=yes else tcl_cv_lib_tk_64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_tk_64" >&5 $as_echo "$tcl_cv_lib_tk_64" >&6; } fi # remove 64-bit arch flags from CFLAGS et al. if configuration # does not support 64-bit. if test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Removing 64-bit architectures from compiler & linker flags" >&5 $as_echo "$as_me: Removing 64-bit architectures from compiler & linker flags" >&6;} for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done fi fi ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy $as_echo "#define _OE_SOCKETS 1" >>confdefs.h ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" if test "$SHARED_BUILD" = 1; then : SHLIB_LD='ld -shared -expect_unresolved "*"' else SHLIB_LD='ld -non_shared -expect_unresolved "*"' fi SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi if test "$GCC" = yes; then : CFLAGS="$CFLAGS -mieee" else CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee" fi # see pthread_intro(3) for pthread support on osf1, k.furukawa if test "${TCL_THREADS}" = 1; then : CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` if test "$GCC" = yes; then : LIBS="$LIBS -lpthread -lmach -lexc" else CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi fi ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) if test "$GCC" = yes; then : SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" else SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" fi SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[0-6]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} else SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} fi ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : arch=`isainfo` if test "$arch" = "sparcv9 sparc"; then : if test "$GCC" = yes; then : if test "`${CC} -dumpversion | awk -F. '{print $1}'`" -lt 3; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&2;} else do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" fi else do64bit_ok=yes if test "$do64bitVIS" = yes; then : CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS_ARCH="-xarch=v9a" else CFLAGS="$CFLAGS -xarch=v9" LDFLAGS_ARCH="-xarch=v9" fi # Solaris 64 uses this as well #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" fi else if test "$arch" = "amd64 i386"; then : if test "$GCC" = yes; then : case $system in SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*) do64bit_ok=yes CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;};; esac else do64bit_ok=yes case $system in SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*) CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported for $arch" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported for $arch" >&2;} fi fi fi SHLIB_SUFFIX=".so" if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "$do64bit_ok" = yes; then : if test "$arch" = "sparcv9 sparc"; then : # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" else if test "$arch" = "amd64 i386"; then : # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" fi fi fi else case $system in SunOS-5.[1-9][0-9]*) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';; *) SHLIB_LD='/usr/ccs/bin/ld -G -z text';; esac CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' fi ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld accepts -Bexport flag" >&5 $as_echo_n "checking for ld accepts -Bexport flag... " >&6; } if ${tcl_cv_ld_Bexport+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_Bexport=yes else tcl_cv_ld_Bexport=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_Bexport" >&5 $as_echo "$tcl_cv_ld_Bexport" >&6; } if test $tcl_cv_ld_Bexport = yes; then : LDFLAGS="$LDFLAGS -Wl,-Bexport" fi CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; esac if test "$do64bit" = yes -a "$do64bit_ok" = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit support being disabled -- don't know magic for this platform" >&5 $as_echo "$as_me: WARNING: 64bit support being disabled -- don't know magic for this platform" >&2;} fi # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. if test "$GCC" = yes; then : case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac fi if test "$tcl_cv_cc_visibility_hidden" != yes; then : $as_echo "#define MODULE_SCOPE extern" >>confdefs.h fi if test "$SHARED_LIB_SUFFIX" = ""; then : # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}' fi if test "$UNSHARED_LIB_SUFFIX" = ""; then : # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' fi if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SEH support in compiler" >&5 $as_echo_n "checking for SEH support in compiler... " >&6; } if ${tcl_cv_seh+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : tcl_cv_seh=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : tcl_cv_seh=yes else tcl_cv_seh=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_seh" >&5 $as_echo "$tcl_cv_seh" >&6; } if test "$tcl_cv_seh" = "no" ; then $as_echo "#define HAVE_NO_SEH 1" >>confdefs.h fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EXCEPTION_DISPOSITION support in include files" >&5 $as_echo_n "checking for EXCEPTION_DISPOSITION support in include files... " >&6; } if ${tcl_cv_eh_disposition+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN int main () { EXCEPTION_DISPOSITION x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_eh_disposition=yes else tcl_cv_eh_disposition=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_eh_disposition" >&5 $as_echo "$tcl_cv_eh_disposition" >&6; } if test "$tcl_cv_eh_disposition" = "no" ; then $as_echo "#define EXCEPTION_DISPOSITION int" >>confdefs.h fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winnt.h that ignores VOID define" >&5 $as_echo_n "checking for winnt.h that ignores VOID define... " >&6; } if ${tcl_cv_winnt_ignore_void+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define VOID void #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main () { CHAR c; SHORT s; LONG l; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_winnt_ignore_void=yes else tcl_cv_winnt_ignore_void=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_winnt_ignore_void" >&5 $as_echo "$tcl_cv_winnt_ignore_void" >&6; } if test "$tcl_cv_winnt_ignore_void" = "yes" ; then $as_echo "#define HAVE_WINNT_IGNORE_VOID 1" >>confdefs.h fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cast to union support" >&5 $as_echo_n "checking for cast to union support... " >&6; } if ${tcl_cv_cast_to_union+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { union foo { int i; double d; }; union foo f = (union foo) (int) 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_cast_to_union=yes else tcl_cv_cast_to_union=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cast_to_union" >&5 $as_echo "$tcl_cv_cast_to_union" >&6; } if test "$tcl_cv_cast_to_union" = "yes"; then $as_echo "#define HAVE_CAST_TO_UNION 1" >>confdefs.h fi # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary { $as_echo "$as_me:${as_lineno-$LINENO}: checking for required early compiler flags" >&5 $as_echo_n "checking for required early compiler flags... " >&6; } tcl_flags="" if ${tcl_cv_flag__isoc99_source+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *)strtoll; char *q = (char *)strtoull; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__isoc99_source=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _ISOC99_SOURCE 1 #include int main () { char *p = (char *)strtoll; char *q = (char *)strtoull; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__isoc99_source=yes else tcl_cv_flag__isoc99_source=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__isoc99_source}" = "xyes" ; then $as_echo "#define _ISOC99_SOURCE 1" >>confdefs.h tcl_flags="$tcl_flags _ISOC99_SOURCE" fi if ${tcl_cv_flag__largefile64_source+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct stat64 buf; int i = stat64("/", &buf); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile64_source=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE64_SOURCE 1 #include int main () { struct stat64 buf; int i = stat64("/", &buf); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile64_source=yes else tcl_cv_flag__largefile64_source=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__largefile64_source}" = "xyes" ; then $as_echo "#define _LARGEFILE64_SOURCE 1" >>confdefs.h tcl_flags="$tcl_flags _LARGEFILE64_SOURCE" fi if ${tcl_cv_flag__largefile_source64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *)open64; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile_source64=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE64 1 #include int main () { char *p = (char *)open64; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile_source64=yes else tcl_cv_flag__largefile_source64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__largefile_source64}" = "xyes" ; then $as_echo "#define _LARGEFILE_SOURCE64 1" >>confdefs.h tcl_flags="$tcl_flags _LARGEFILE_SOURCE64" fi if test "x${tcl_flags}" = "x" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_flags}" >&5 $as_echo "${tcl_flags}" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit integer type" >&5 $as_echo_n "checking for 64-bit integer type... " >&6; } if ${tcl_cv_type_64bit+:} false; then : $as_echo_n "(cached) " >&6 else tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { __int64 value = (__int64) 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_type_64bit=__int64 else tcl_type_64bit="long long" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { switch (0) { case 1: case (sizeof(${tcl_type_64bit})==sizeof(long)): ; } ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_type_64bit=${tcl_type_64bit} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "${tcl_cv_type_64bit}" = none ; then $as_echo "#define TCL_WIDE_INT_IS_LONG 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: using long" >&5 $as_echo "using long" >&6; } elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* { $as_echo "$as_me:${as_lineno-$LINENO}: result: using Tcl header defaults" >&5 $as_echo "using Tcl header defaults" >&6; } else cat >>confdefs.h <<_ACEOF #define TCL_WIDE_INT_TYPE ${tcl_cv_type_64bit} _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_cv_type_64bit}" >&5 $as_echo "${tcl_cv_type_64bit}" >&6; } # Now check for auxiliary declarations { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent64" >&5 $as_echo_n "checking for struct dirent64... " >&6; } if ${tcl_cv_struct_dirent64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct dirent64 p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_struct_dirent64=yes else tcl_cv_struct_dirent64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_dirent64" >&5 $as_echo "$tcl_cv_struct_dirent64" >&6; } if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then $as_echo "#define HAVE_STRUCT_DIRENT64 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct stat64" >&5 $as_echo_n "checking for struct stat64... " >&6; } if ${tcl_cv_struct_stat64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct stat64 p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_struct_stat64=yes else tcl_cv_struct_stat64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_stat64" >&5 $as_echo "$tcl_cv_struct_stat64" >&6; } if test "x${tcl_cv_struct_stat64}" = "xyes" ; then $as_echo "#define HAVE_STRUCT_STAT64 1" >>confdefs.h fi for ac_func in open64 lseek64 do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for off64_t" >&5 $as_echo_n "checking for off64_t... " >&6; } if ${tcl_cv_type_off64_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { off64_t offset; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_type_off64_t=yes else tcl_cv_type_off64_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_type_off64_t}" = "xyes" && \ test "x${ac_cv_func_lseek64}" = "xyes" && \ test "x${ac_cv_func_open64}" = "xyes" ; then $as_echo "#define HAVE_TYPE_OFF64_T 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build with symbols" >&5 $as_echo_n "checking for build with symbols... " >&6; } # Check whether --enable-symbols was given. if test "${enable_symbols+set}" = set; then : enableval=$enable_symbols; tcl_ok=$enableval else tcl_ok=no fi DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (standard debugging)" >&5 $as_echo "yes (standard debugging)" >&6; } fi fi # TEA specific: if test "${TEA_PLATFORM}" != "windows" ; then LDFLAGS_DEFAULT="${LDFLAGS}" fi if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then $as_echo "#define TCL_MEM_DEBUG 1" >>confdefs.h fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled symbols mem debugging" >&5 $as_echo "enabled symbols mem debugging" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled $tcl_ok debugging" >&5 $as_echo "enabled $tcl_ok debugging" >&6; } fi fi #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. Add Tk too if necessary. #-------------------------------------------------------------------- $as_echo "#define USE_TCL_STUBS 1" >>confdefs.h #AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\$@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\$@ \$(PKG_OBJECTS)" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "manifest needed" >/dev/null 2>&1; then : # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" CLEANFILES="$CLEANFILES *.manifest" fi rm -f conftest* MAKE_STUB_LIB="\${STLIB_LD} -out:\$@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \$@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \$@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \$@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then MAKE_LIB="${MAKE_SHARED_LIB} " else MAKE_LIB="${MAKE_STATIC_LIB} " fi #-------------------------------------------------------------------- # Shared libraries and static libraries have different names. # Use the double eval to make sure any variables in the suffix is # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) RANLIB=: RANLIB_STUB=: else RANLIB_STUB="${RANLIB}" if test "${SHARED_BUILD}" = "1" ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" fi eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" RANLIB=: else eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" fi # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi #-------------------------------------------------------------------- # Determine the name of the tclsh and/or wish executables in the # Tcl and Tk build directories or the location they were installed # into. These paths are used to support running test cases only, # the Makefile should not be making use of these paths to generate # a pkgIndex.tcl file or anything else at extension build time. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tclsh" >&5 $as_echo_n "checking for tclsh... " >&6; } if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="${TCL_BIN_DIR}/tclsh" fi else # tclConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}" fi list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TCL_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${TCLSH_PROG}" ; then REAL_TCL_BIN_DIR="`cd "$i"; pwd`/" break fi done TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${TCLSH_PROG}" >&5 $as_echo "${TCLSH_PROG}" >&6; } #TEA_PROG_WISH #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- ac_config_files="$ac_config_files Makefile pkgIndex.tcl" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS="" : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by tcliis $as_me 1.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ tcliis config.status 1.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "pkgIndex.tcl") CONFIG_FILES="$CONFIG_FILES pkgIndex.tcl" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi saods9/tcliis/configure.in000755 000765 000000 00000016627 12556465611 016216 0ustar00joyewheel000000 000000 #!/bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. #----------------------------------------------------------------------- # Sample configure.in for Tcl Extensions. The only places you should # need to modify this file are marked by the string __CHANGE__ #----------------------------------------------------------------------- #----------------------------------------------------------------------- # __CHANGE__ # Set your package name and version numbers here. # # This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION # set as provided. These will also be added as -D defs in your Makefile # so you can encode the package version directly into the source files. # This will also define a special symbol for Windows (BUILD_ # so that we create the export library with the dll. #----------------------------------------------------------------------- AC_INIT([tcliis], [1.0]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- TEA_INIT([3.9]) AC_CONFIG_AUX_DIR(tclconfig) #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- TEA_PATH_TCLCONFIG TEA_LOAD_TCLCONFIG #-------------------------------------------------------------------- # Load the tkConfig.sh file if necessary (Tk extension) #-------------------------------------------------------------------- #TEA_PATH_TKCONFIG #TEA_LOAD_TKCONFIG #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- TEA_PREFIX #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC and a few others to create the basic setup # necessary to compile executables. #----------------------------------------------------------------------- TEA_SETUP_COMPILER #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- TEA_ADD_SOURCES([ iistcl.C xim.C iis.c util.c ]) TEA_ADD_HEADERS([]) TEA_ADD_INCLUDES([]) TEA_ADD_LIBS([-lstdc++]) TEA_ADD_CFLAGS([]) TEA_ADD_STUB_SOURCES([]) TEA_ADD_TCL_SOURCES([]) AC_CHECK_HEADERS(sys/un.h) #-------------------------------------------------------------------- # __CHANGE__ # # You can add more files to clean if your extension creates any extra # files by extending CLEANFILES. # Add pkgIndex.tcl if it is generated in the Makefile instead of ./configure # and change Makefile.in to move it from CONFIG_CLEAN_FILES to BINARIES var. # # A few miscellaneous platform-specific items: # TEA_ADD_* any platform specific compiler/build info here. #-------------------------------------------------------------------- #CLEANFILES="$CLEANFILES pkgIndex.tcl" if test "${TEA_PLATFORM}" = "windows" ; then # Ensure no empty if clauses : #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) else # Ensure no empty else clauses : #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) fi #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- TEA_PUBLIC_TCL_HEADERS #TEA_PRIVATE_TCL_HEADERS #TEA_PUBLIC_TK_HEADERS #TEA_PRIVATE_TK_HEADERS #TEA_PATH_X #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. # This auto-enables if Tcl was compiled threaded. #-------------------------------------------------------------------- TEA_ENABLE_THREADS #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- TEA_ENABLE_SHARED #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- TEA_CONFIG_CFLAGS #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- TEA_ENABLE_SYMBOLS #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. Add Tk too if necessary. #-------------------------------------------------------------------- AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs]) #AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- TEA_MAKE_LIB #-------------------------------------------------------------------- # Determine the name of the tclsh and/or wish executables in the # Tcl and Tk build directories or the location they were installed # into. These paths are used to support running test cases only, # the Makefile should not be making use of these paths to generate # a pkgIndex.tcl file or anything else at extension build time. #-------------------------------------------------------------------- TEA_PROG_TCLSH #TEA_PROG_WISH #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- AC_OUTPUT([Makefile pkgIndex.tcl]) saods9/tcliis/iis.c000644 000765 000000 00000114731 12720664255 014623 0ustar00joyewheel000000 000000 #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_SYS_UN_H #include #endif #include #include "iis.h" #include "xim.h" /* IIS data pixel values. */ #define CMS_DATASTART 1 #define CMS_DATAEND 200 #define CMS_DATARANGE 200 /* IIS color assignments. */ #define CMS_CURSOR 201 #define CMS_BACKGROUND 202 #define CMS_FOREGROUND 203 #define CMS_RED 204 #define CMS_GREEN 205 #define CMS_BLUE 206 #define CMS_YELLOW 207 #define CMS_CYAN 208 #define CMS_MAGENTA 209 #define XtInputId void * #define XtNumber(x) MAX_CLIENTS /* * IIS.C -- IRAF/IIS "imtool" protocol module. This code is responsible for * accepting connections from remote network clients and communicating with * them via the imtool/iis image display server communications prototcol. * * fd = xim_iisopen (xim) * xim_iisclose (xim) * xim_iisio (xim, &fd, &id) * * xim_frameLabel (xim) * xim_encodewcs (xim, sx, sy, sz, obuf) * xim_retCursorVal (xim, sx, sy, frame, wcs, key, strval) * * xim_iisiomap (w, iomap, &iomap_len) * xim_iiscolormap (w, r, g, b, &first, &ngray, &rgb_len) * * xim_iisio is a callback procedure called by Xt when there is input to be * processed on the stream used to communicate with the remote client. */ #define MEMORY 01 /* frame buffer i/o */ #define LUT 02 /* lut i/o */ #define FEEDBACK 05 /* used for frame clears */ #define IMCURSOR 020 /* logical image cursor */ #define WCS 021 /* used to set WCS */ #define SZ_IOBUF 65536 /* max size data transfer */ #define IO_TIMEOUT 30 /* i/o not getting anywhere */ #define MAXCONN 5 #define IIS_VERSION 10 /* version 10 -> 1.0 */ #define SZ_IMCURVAL 160 #define PACKED 0040000 #define COMMAND 0100000 #define IIS_READ 0100000 #define IMC_SAMPLE 0040000 #define IMT_FBCONFIG 077 #define XYMASK 077777 struct iism70 { short tid; short thingct; short subunit; short checksum; short x, y, z; short t; }; /* Running id for frame mappings. We keep a separate id for each of the * currently allowed MAX_FRAMES since the object id is used in the WCS * code for the image along with the (frame_num * 100). */ int objid[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static int *wcspix_enabled = NULL; static int iis_debug = -1; /* protocol debug */ static void set_fbconfig(), add_mapping(); static void xim_connectClient(), xim_disconnectClient(); static int chan_read(), chan_write(), decode_frameno(); static CtranPtr wcs_update(); static IoChanPtr open_fifo(), open_inet(); #ifdef HAVE_SYS_UN_H static IoChanPtr open_unix(); #endif static IoChanPtr get_iochan(); static MappingPtr xim_getMapping(XimDataPtr, float, float, int); static void print_mappings(FrameBufPtr fr); extern int errno; /* XIM_IISOPEN -- Initialize the IIS protocol module and ready the module to * accept client connections and begin processing client requests. Clients * may connect to the server using a fifo connection or an internet or * UNIX domain socket connection. All three types of server ports are * simultaneously ready to receive client connections. */ int xim_iisOpen(XimDataPtr xim) { int nopen = 0; if (open_fifo (xim)) nopen++; if (open_inet (xim)) nopen++; #ifdef HAVE_SYS_UN_H if (open_unix (xim)) nopen++; #endif return (nopen); } /* XIM_IISCLOSE -- Close down the IIS protocol module. */ void xim_iisClose(XimDataPtr xim) { IoChanPtr chan; int i; for (i=0, chan=NULL; i < XtNumber(xim->chan); i++) { chan = &xim->chan[i]; if (chan->id) { xim_removeInput (xim, (int)chan->id); chan->id = 0; } switch (chan->type) { case IO_FIFO: if (chan->keepalive >= 0) close (chan->keepalive); if (chan->datain >= 0) close (chan->datain); if (chan->dataout >= 0) close (chan->dataout); chan->type = 0; break; case IO_INET: close (chan->datain); chan->type = 0; break; #ifdef HAVE_SYS_UN_H case IO_UNIX: close (chan->datain); unlink (chan->path); chan->type = 0; break; #endif } } } /* OPEN_FIFO -- Ooen the (x)imtool fifo port and make ready to accept client * connections and begin processing client requests. There is no client * yet at this stage. */ static IoChanPtr open_fifo(XimDataPtr xim) { IoChanPtr chan; int datain, dataout; int keepalive; #ifdef __DARWIN__ /* On OS X we don't use fifos. */ xim->input_fifo = "none"; return (NULL); #endif /* Setting the input fifo to "none" or the null string disables * fifo support. */ if (!xim->input_fifo[0] || strcmp(xim->input_fifo,"none")==0) return (NULL); datain = dataout = -1; /* Open the output fifo (which is the client's input fifo). We have * to open it ourselves first as a client to get around the fifo * open-no-client error. */ if ((datain = open (xim->input_fifo, O_RDONLY|O_NDELAY)) != -1) { if ((dataout = open (xim->input_fifo, O_WRONLY|O_NDELAY)) != -1) fcntl (dataout, F_SETFL, O_WRONLY); else goto done; close (datain); } else goto done; /* Open the input stream, a FIFO pseudodevice file used by * applications to send us commands and data. */ if ((datain = open (xim->output_fifo, O_RDONLY|O_NDELAY)) == -1) goto done; else { /* Clear O_NDELAY for reading. */ fcntl (datain, F_SETFL, O_RDONLY); /* Open the client's output fifo as a pseudo-client to make it * appear that a client is connected. */ keepalive = open (xim->output_fifo, O_WRONLY); } done: /* Allocate and fill in i/o channel descriptor. */ if (datain > 0 && dataout > 0 && ((chan = get_iochan(xim)))) { chan->xim = (XtPointer) xim; chan->type = IO_FIFO; chan->datain = datain; chan->dataout = dataout; chan->keepalive = keepalive; chan->reference_frame = 1; chan->version = 0; chan->rf_p = &xim->frames[0]; } else { /* fprintf (stderr, "Warning: cannot open %s\n", xim->output_fifo); */ strcpy (xim->input_fifo, "none"); chan = NULL; } /* Register input callback. */ if (chan) { chan->id = xim_addInput(xim, chan->datain, xim_iisio, chan); } else { if (datain > 0) close (datain); if (dataout > 0) close (dataout); } return (chan); } /* OPEN_INET -- Set up a port to be used for incoming client connections * using internet domain sockets. */ static IoChanPtr open_inet(XimDataPtr xim) { int s = 0; IoChanPtr chan; struct sockaddr_in sockaddr; int reuse = 1; /* Setting the port to zero disables inet socket support. */ if (xim->port <= 0) return (NULL); if ((s = socket (AF_INET, SOCK_STREAM, 0)) < 0) goto err; memset ((void *)&sockaddr, 0, sizeof(sockaddr)); sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons((short)xim->port); sockaddr.sin_addr.s_addr = htonl(INADDR_ANY); if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) < 0) goto err; if (bind (s, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) < 0) goto err; if (listen (s, MAXCONN) < 0) goto err; /* make sure we close on exec */ fcntl(s, F_SETFD, FD_CLOEXEC); /* Allocate and fill in i/o channel descriptor. */ if ((chan = get_iochan(xim))) { chan->xim = (XtPointer) xim; chan->type = IO_INET; chan->datain = s; chan->dataout = s; chan->reference_frame = 1; chan->version = 0; chan->rf_p = &xim->frames[0]; /* Register connectClient callback. */ chan->id = xim_addInput(xim, s, xim_connectClient, chan); return (chan); } err: /* if (errno == EADDRINUSE) { fprintf (stderr,"ximtool: inet port %d already in use - disabled\n", xim->port); } else { fprintf (stderr, "ximtool: can't open inet socket %d, errno=%d\n", xim->port, errno); } */ xim->port = 0; if (s) close (s); return (NULL); } /* OPEN_UNIX -- Set up a port to be used for incoming client connections * using unix domain sockets. */ #ifdef HAVE_SYS_UN_H static IoChanPtr open_unix(XimDataPtr xim) { int s = 0; IoChanPtr chan; struct sockaddr_un sockaddr; int addrlen; char path[256]; /* Setting the addr to "none" or the null string disables unix * socket support. */ if (!xim->unixaddr[0] || strcmp(xim->unixaddr,"none")==0) return (NULL); /* Get path to be used for the unix domain socket. */ sprintf (path, xim->unixaddr, getuid()); unlink (path); if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) goto err; memset ((void *)&sockaddr, 0, sizeof(sockaddr)); sockaddr.sun_family = AF_UNIX; strcpy (sockaddr.sun_path, path); addrlen = sizeof(sockaddr) - sizeof(sockaddr.sun_path) + strlen(path); if (bind (s, (struct sockaddr *)&sockaddr, addrlen) < 0) goto err; if (listen (s, MAXCONN) < 0) goto err; /* make sure we close on exec */ fcntl(s, F_SETFD, FD_CLOEXEC); /* Allocate and fill in i/o channel descriptor. */ if ((chan = get_iochan(xim))) { chan->xim = (XtPointer) xim; chan->type = IO_UNIX; chan->datain = s; chan->dataout = s; chan->reference_frame = 1; chan->version = 0; chan->rf_p = &xim->frames[0]; strncpy (chan->path, path, SZ_FNAME); /* Register connectClient callback. */ chan->id = xim_addInput (xim,s,xim_connectClient,(XtPointer)chan); return (chan); } err: /* if (errno == EADDRINUSE) { fprintf (stderr,"ximtool: unix addr %s already in use - disabled\n", path); } else { fprintf (stderr,"ximtool: cannot open unix socket '%s', errno=%d\n", path, errno); } */ strcpy (xim->unixaddr, "none"); if (s) close (s); return (NULL); } #endif /* XIM_CONNECTCLIENT -- Called when a client has attempted a connection on * a socket port. Accept the connection and set up a new i/o channel to * communicate with the new client. */ static void xim_connectClient(IoChanPtr chan_port, int *source, XtPointer id) { XimDataPtr xim = (XimDataPtr) chan_port->xim; IoChanPtr chan; int s; /* Accept connection. */ if ((s = accept ((int)*source, (struct sockaddr *)0, (socklen_t *)0)) < 0) return; /* if (fcntl (s, F_SETFL, O_RDWR|O_NDELAY) < 0) { close (s); return; } */ /* Allocate and fill in i/o channel descriptor. */ if ((chan = get_iochan(xim))) { chan->xim = (XtPointer) xim; chan->type = chan_port->type; chan->datain = s; chan->dataout = s; chan->reference_frame = 1; chan->version = 0; chan->rf_p = &xim->frames[0]; chan->id = xim_addInput(xim, s, xim_iisio, chan); } } /* XIM_DISCONNECTCLIENT -- Called to close a client connection when EOF is * seen on the input port. Close the connection and free the channel * descriptor. */ static void xim_disconnectClient(IoChanPtr chan) { switch (chan->type) { case IO_INET: case IO_UNIX: close (chan->datain); if (chan->id) { xim_removeInput(chan->xim, chan->id); chan->id = 0; } chan->type = 0; break; default: break; } } /* GET_IOCHAN --- Get an i/o channel descriptor. */ static IoChanPtr get_iochan(XimDataPtr xim) { int i; for (i=0; i < XtNumber(xim->chan); i++) if (!xim->chan[i].type) return (&xim->chan[i]); return (NULL); } /* XIM_IISIO -- Xt file i/o callback procedure, called when there is input * pending on the data stream to the ximtool client. */ void xim_iisio (IoChanPtr chan, int *fd_addr, XtInputId *id_addr) { XimDataPtr xim = (XimDataPtr) chan->xim; MappingPtr mp = (MappingPtr) NULL; FrameBufPtr fb; int sum, i; short *p; int datain = *fd_addr; int dataout = chan->dataout; int ndatabytes, nbytes, n, newframe, ntrys=0; struct iism70 iis; char buf[SZ_FIFOBUF]; static int errmsg=0, bswap=0; /* Initialize the debug output. */ if (iis_debug == -1) iis_debug = (getenv("DEBUG_IIS") != (char *)NULL); /* Get the IIS header. */ if ((n = chan_read (datain, (char *)&iis, sizeof(iis))) < sizeof(iis)) { if (n != 0) fprintf (stderr, "ximtool: command input read error, n=%d of %d, errno=%d\n", n, (int)sizeof(iis), errno); if (n <= 0) xim_disconnectClient (chan); return; } else if (bswap) bswap2 ((char *)&iis, (char *)&iis, sizeof(iis)); /* Verify the checksum. If it fails swap the bytes and try again. */ for (;;) { for (i=0, sum=0, p=(short *)&iis; i < 8; i++) sum += *p++; if ((sum & 0177777) == 0177777) break; if (ntrys++) { if (!errmsg++) { fprintf (stderr, "ximtool: bad data header checksum\n"); if (bswap) bswap2 ((char *)&iis, (char *)&iis, sizeof(iis)); fprintf (stderr, "noswap:"); for (i=0, p=(short *)&iis; i < 8; i++) fprintf (stderr, " %6o", p[i]); fprintf (stderr, "\n"); bswap2 ((char *)&iis, (char *)&iis, sizeof(iis)); fprintf (stderr, " swap:"); for (i=0, p=(short *)&iis; i < 8; i++) fprintf (stderr, " %6o", p[i]); fprintf (stderr, "\n"); } break; } else { bswap2 ((char *)&iis, (char *)&iis, sizeof(iis)); bswap = !bswap; } } ndatabytes = -iis.thingct; if (!(iis.tid & PACKED)) ndatabytes *= 2; if (iis_debug) { fprintf (stderr, "subunit=%06o tid=%06o nbytes=%7d x=%06o y=%06o z=%06o t=%06o\n", iis.subunit & 077, iis.tid, ndatabytes, iis.x & 0177777, iis.y & 0177777, iis.z & 0177777, iis.t & 0177777); fflush (stderr); } switch (iis.subunit & 077) { case FEEDBACK: /* The feedback unit is used only to clear a frame. The * xim_eraseFrame() procedure takes care of uncaching the * mappings associated with this frame. */ newframe = decode_frameno (iis.z & 0177777); xim_setReferenceFrame (chan, newframe); if (newframe == chan->reference_frame) xim_eraseFrame (xim, chan->reference_frame); /* ISM: Uncache all mappings associated with this frame. */ fb = &xim->frames[newframe-1]; for (i=0; i < fb->nmaps; i++) { mp = &fb->mapping[i]; if (mp->id) { sprintf (buf, "uncache %d", mp->id); ism_message (xim, "wcspix", buf); wcspix_message (xim, buf); mp->id = 0; } } /* Reset various counters for the new frame and release the * mappings. */ fb->nmaps = 0; fb->ctran.valid = 0; objid[newframe-1] = 0; fb->nmaps = 0; if (iis_debug) fprintf (stderr, "erase frame %d - ref = %d\n", newframe, chan->reference_frame); break; case LUT: /* Data mode writes to the frame lookup tables are not implemented. * A command mode write to the LUT subunit is used to connect * image memories up to the RGB channels, i.e., to select the frame * to be displayed. We ignore any attempt to assign multiple * frames to multiple color channels, and just do a simple frame * select. */ if (iis.subunit & COMMAND) { int frame, z, n; short x[17]; if (chan_read (datain, (char *)x, ndatabytes) == ndatabytes) { if (bswap) bswap2 ((char *)x, (char *)x, ndatabytes); z = x[0]; if (!z) z = 1; for (n=0; !(z & 1); z >>= 1) n++; frame = max (1, n + 1); if (frame > xim->nframes) { if (frame <= MAX_FRAMES) { set_fbconfig (chan, xim->fb_configno, frame); if (iis_debug) fprintf (stderr, "set_fbconfig (%d, %d)\n", xim->fb_configno, frame); } else { fprintf (stderr, "ximtool warning: "); fprintf (stderr, "attempt to display nonexistent frame %d\n", frame); return; } } xim_setDisplayFrame (xim, frame); if (iis_debug) fprintf (stderr, "set_frame (%d)\n", frame); return; } } case MEMORY: /* Load data into the frame buffer. Data is assumed to be byte * packed. */ if (iis.tid & IIS_READ) { /* Read from the display. */ unsigned char *ip, iobuf[SZ_IOBUF]; int nbytes, nleft, n, x, y; long starttime; /* Get the frame to read from. */ xim_setReferenceFrame (chan, decode_frameno (iis.z & 0177777)); nbytes = ndatabytes; x = iis.x & XYMASK; y = iis.y & XYMASK; if (x < 0 || x >= xim->width || y < 0 || y >= xim->height) { fprintf (stderr, "ximtool: attempted read out of bounds on framebuf\n"); fprintf (stderr, "read %d bytes at [%d,%d]\n", nbytes, x, y); memset ((void *)iobuf, 0, nbytes); } else { GtReadPixels (xim->gt, chan->rf_p->raster, iobuf, 8, x, y, min(xim->width-x,nbytes), max(1,nbytes/xim->width)); if (iis_debug) fprintf (stderr, "read %d bytes at [%d,%d]\n", nbytes, x, y); } /* Return the data from the frame buffer. */ starttime = time(0); for (nleft=nbytes, ip=iobuf; nleft > 0; nleft -= n) { n = (nleft < SZ_FIFOBUF) ? nleft : SZ_FIFOBUF; if ((n = chan_write (dataout, ip, n)) <= 0) { if (n < 0 || (time(0) - starttime > IO_TIMEOUT)) { fprintf (stderr, "XIMTOOL: timeout on write\n"); break; } } else ip += n; } return; } else { /* Write to the display. */ unsigned char *op, iobuf[SZ_IOBUF]; int nbytes, nleft, n, x, y; long starttime; /* Get the frame to be written into (encoded with a bit for * each frame, 01 is frame 1, 02 is frame 2, 04 is frame 3, * and so on). */ xim_setReferenceFrame (chan, decode_frameno (iis.z & 0177777)); nbytes = ndatabytes; x = iis.x & XYMASK; y = iis.y & XYMASK; /* Read the data into the frame buffer. */ starttime = time(0); for (nleft=nbytes, op=iobuf; nleft > 0; nleft -= n) { n = (nleft < SZ_FIFOBUF) ? nleft : SZ_FIFOBUF; if ((n = chan_read (datain, op, n)) <= 0) { if (n < 0 || (time(0) - starttime > IO_TIMEOUT)) { fprintf (stderr, "XIMTOOL: timeout on read\n"); break; } } else op += n; } if (x < 0 || x >= xim->width || y < 0 || y >= xim->height) { fprintf (stderr, "ximtool: attempted write out of bounds on framebuf\n"); fprintf (stderr, "write %d bytes at [%d,%d]\n", nbytes, x, y); memset ((void *)iobuf, 0, nbytes); } else { GtWritePixels (xim->gt, chan->rf_p->raster, iobuf, 8, x, y, min(xim->width-x,nbytes), max(1,nbytes/xim->width)); if (iis_debug) fprintf (stderr, "write %d bytes at x=%d, y=%d\n", nbytes, x, y); } return; } break; case WCS: /* Read or write the WCS for a frame. The frame number to * which the WCS applies is passed in Z and the frame buffer * configuration in T. The client changes the frame buffer * configuration in a WCS set. The WCS text follows the header * as byte packed ASCII data. */ if (iis.tid & IIS_READ) { /* Return the WCS for the referenced frame. */ char emsg[SZ_WCSBUF]; char *text; int frame; memset ((char *)emsg, 0, SZ_WCSBUF); if ((iis.x & 017777) && (iis.y & 017777)) { /* This is a check by the client on our capabilities. * Return with a version number which can be used by the * client. However we write back using the old WCS * buffer size for compatability. */ sprintf (text=emsg, "version=%d", IIS_VERSION); chan->version = IIS_VERSION; chan_write (dataout, text, SZ_OLD_WCSBUF); if (iis_debug) fprintf (stderr, "version query wcs: %s\n",text); } else if ((iis.x & 017777) && (iis.t & 017777)) { /* Return the buffer for a specified WCS number. */ CtranPtr ct = (CtranPtr) NULL; FrameBufPtr fr = (FrameBufPtr) NULL; int wcsnum = (iis.t & 017777); int i, j; /* Decode the requested wcs number. */ frame = decode_frameno (iis.z & 0177777); /* Search for the requested WCS number. */ mp = (MappingPtr) NULL; for (j=0; j < xim->nframes; j++) { fr = &xim->frames[j]; if (fr->frameno != frame) continue; for (i=0; i < fr->nmaps; i++) { mp = &fr->mapping[i]; if (mp->id == wcsnum) { /* found the mapping */ ct = &(mp->ctran); goto map_found; } } } /* Encode the WCS and mapping information. */ map_found: if (ct) { char wcs[SZ_WCSBUF], mapping[SZ_WCSBUF]; sprintf (wcs, "%s\n%f %f %f %f %f %f %f %f %d\n", ct->imtitle, ct->a, ct->b, ct->c, ct->d, ct->tx, ct->ty, ct->z1, ct->z2, ct->zt); sprintf (mapping, "%s %f %f %d %d %d %d %d %d\n%s\n", mp->region, mp->sx, mp->sy, mp->snx, mp->sny, mp->dx, mp->dy, mp->dnx, mp->dny, mp->ref); strcpy (text=emsg, wcs); strcat (text, mapping); } else strcpy (text=emsg, "[NOSUCHWCS]\n"); chan_write (dataout, text, SZ_WCSBUF); if (iis_debug) { fprintf (stderr, "query specified wcs=%d frame=%d\n", wcsnum, frame); write (2, text, strlen (text)); } } else { frame = decode_frameno (iis.z & 0177777); xim_setReferenceFrame (chan, frame); /*** waj ***/ /* We always want to use the wcs buffer. If frameno == 0 ds9 will fill in the buffer. if (chan->rf_p->frameno <= 0) strcpy (text=emsg, "[NOSUCHFRAME]\n"); else */ /*** waj ***/ text = chan->rf_p->wcsbuf; if ((iis.x & 0777)) chan_write (dataout, text, SZ_WCSBUF); else chan_write (dataout, text, SZ_OLD_WCSBUF); if (iis_debug) { fprintf (stderr, "query wcs: frame = %d\n", frame); write (2, text, strlen(text)); } } } else { /* Set the WCS for the referenced frame. */ CtranPtr ct; int fb_config, frame, new_wcs = 0; frame = decode_frameno (iis.z & 0177777); fb_config = (iis.t & 0777) + 1; new_wcs = (iis.x & 0777); /* See if we need to change the frame buffer configuration, * or allocate a new frame. */ if (fb_config != xim->fb_configno) set_fbconfig (chan, fb_config, frame); else if (frame > xim->nframes && frame <= MAX_FRAMES) set_fbconfig (chan, xim->fb_configno, frame); /* Read in and set up the WCS. */ xim_setReferenceFrame (chan, frame); memset ((char *)buf, 0, SZ_WCSBUF); if (chan_read (datain, buf, ndatabytes) == ndatabytes) strncpy (chan->rf_p->wcsbuf, buf, (new_wcs ? SZ_WCSBUF : SZ_OLD_WCSBUF)); if (iis_debug) { fprintf (stderr, "set wcs:\n"); write (2, buf, ndatabytes); } strcpy (chan->rf_p->ctran.format, W_DEFFORMAT); chan->rf_p->ctran.imtitle[0] = '\0'; chan->rf_p->ctran.valid = 0; ct = wcs_update (xim, chan->rf_p); /* If we're connected to an old-style client, disable the * WCSPIX ISM, otherwise just let the GUI know it capable. */ wcspix_message (xim, (new_wcs ? "capable" : "disable")); /* Add the mapping information. */ add_mapping (xim, ct, chan->rf_p->wcsbuf, &xim->frames[chan->reference_frame-1]); xim_message (xim, "frameTitle", ct->imtitle); } return; case IMCURSOR: /* Read or write the logical image cursor. This is an extension * added to provide a high level cursor read facility; this is * not the same as a low level access to the IIS cursor subunit. * Cursor reads may be either nonblocking (immediate) or blocking, * using the keyboard or mouse to terminate the read, and * coordinates may be returned in either image (world) or frame * buffer pixel coordinates. */ if (iis.tid & IIS_READ) { /* Read the logical image cursor. In the case of a blocking * read all we do is initiate a cursor read; completion occurs * when the user hits a key or button. */ if (iis_debug) fprintf (stderr, "read cursor position\n"); if (iis.tid & IMC_SAMPLE) { /* Sample the cursor position and return the cursor value * on the output datastream encoded in a fixed size * ascii buffer. */ int wcs = iis.z; int raster, frame; float sx, sy; IoChanPtr sv_chan; /* Save the cursor channel so that sampled cursor reads * can occur on one channel without affecting any * interactive cursor reads in progress on another * channel. */ sv_chan = xim->cursor_chan; xim->cursor_chan = chan; xim_getCursorPos (xim, &sx, &sy, &raster, &frame); xim_retCursorVal (xim, sx, sy, frame, wcs, 0, ""); xim->cursor_chan = sv_chan; } else { /* Initiate a user triggered cursor read. */ if (xim->cursor_chan) { int frame = xim->cursor_chan->reference_frame; xim_retCursorVal (xim, 0., 0., frame, 0, EOF, ""); } xim->cursor_chan = chan; xim_cursorMode (xim, 1); } } else { /* Write (set) the logical image cursor position. */ CtranPtr ct; int sx = iis.x, sy = iis.y; float wx = sx, wy = sy; int wcs = iis.z; if (iis_debug) fprintf(stderr, "write cursor position: [%d,%d]\n", sx, sy); if (wcs) { ct = wcs_update (xim, xim->df_p); if (ct->valid) { if (abs(ct->a) > .001) sx = (wx - ct->tx) / ct->a; if (abs(ct->d) > .001) sy = (wy - ct->ty) / ct->d; } } xim_setCursorPos (xim, sx, sy); } return; default: /* Ignore unsupported command input. */ break; } /* Discard any data following the header. */ if (!(iis.tid & IIS_READ)) for (nbytes = ndatabytes; nbytes > 0; nbytes -= n) { n = (nbytes < SZ_FIFOBUF) ? nbytes : SZ_FIFOBUF; if ((n = chan_read (datain, buf, n)) <= 0) { if (iis_debug) fprintf (stderr, "discarding %d bytes following header:\n", n); break; } } } /* SET_FBCONFIG -- Set the frame buffer configuration, or add additional * frames to the current configuration. */ static void set_fbconfig(IoChanPtr chan, int config, int frame) { XimDataPtr xim = (XimDataPtr) chan->xim; FrameBufPtr fb = &xim->frames[frame-1]; int i; if (config != xim->fb_configno) { /* Change the frame buffer configuration. */ xim_initialize (xim, config, max (xim->fb_config[config-1].nframes, frame), 1); /* Reinitialize the tile framing if enabled. */ /* if (xim->tileFrames) xim_tileFrames (xim, xim->tileFramesList);*/ /* Initialize the ISM to uncache all images when we change * frame buffer configs. */ ism_message (xim, "wcspix", "initialize"); } else if (frame > xim->nframes) { /* Add additional frames. */ for (i=1; i <= frame; i++) { fb = &xim->frames[i-1]; if (fb->frameno != i) { xim_initFrame (xim, i, frame, &xim->fb_config[config-1], xim->memModel); /* If we're in tile mode, add the frame to the tile list * and if needed resize the tile frames. */ if (xim->tileFrames) { xim->tileFramesList |= (1 << (i-1)); xim->nTileFrames++; /* xim_tileFrames (xim, xim->tileFramesList);*/ } } } } xim_setReferenceFrame (chan, frame); if (frame != xim->display_frame) xim_setDisplayFrame (xim, frame); } /* DECODE_FRAMENO -- Decode encoded IIS register frame number. */ static int decode_frameno(int z) { int n; /* Get the frame number, encoded with a bit for each frame, 01 is * frame 1, 02 is frame 2, 04 is frame 3, and so on. */ if (!z) z = 1; for (n=0; !(z & 1); z >>= 1) n++; return (max (1, n + 1)); } /* XIM_RETCURSORVAL -- Return the cursor value on the output datastream to * the client which requested the cursor read. */ void xim_retCursorVal(XimDataPtr xim, float sx, float sy, int frame, int wcs, int key, char* strval) { CtranPtr ct; MappingPtr mp = (MappingPtr) NULL; int dataout, wcscode; char curval[SZ_IMCURVAL]; char keystr[20]; float wx, wy; if (xim->cursor_chan) dataout = xim->cursor_chan->dataout; else return; /* Compute cursor coordinates. */ if (wcs) { ct = wcs_update (xim, xim->df_p); if (ct->valid) { /* The imtool WCS assumes that the center of the first display * pixel is at (0,0) but actually it is at (0.5,0.5). */ sx -= 0.5; sy -= 0.5; if (abs(ct->a) > .001) wx = ct->a * sx + ct->c * sy + ct->tx; if (abs(ct->d) > .001) wy = ct->b * sx + ct->d * sy + ct->ty; } } else { wx = sx; wy = sy; } /* Compute WCS code. */ wcscode = frame * 100 + wcs; if (wcspix_enabled != NULL && *wcspix_enabled) { if ((mp = xim_getMapping (xim, sx, sy, frame))) { wcscode = mp->id; /* Return the coordinates in terms of the mapping. */ ct = &(mp->ctran); wx = ct->a * sx + ct->c * sy + ct->tx; wy = ct->b * sx + ct->d * sy + ct->ty; } } /* Encode the cursor value. */ if (key == EOF) sprintf (curval, "EOF\n"); else { if (isprint (key) && !isspace(key)) { keystr[0] = key; keystr[1] = '\0'; } else sprintf (keystr, "\\%03o", key); sprintf (curval, "%10.3f %10.3f %d %s %s\n", wx, wy, wcscode, keystr, strval); } if (iis_debug) fprintf (stderr, "curval: %s", curval); /* Send it to the client program and terminate cursor mode. */ chan_write (dataout, curval, sizeof(curval)); xim_cursorMode (xim, 0); xim->cursor_chan = NULL; } /* XIM_ENCODEWCS -- Transform the input screen (raster) coordinates and * pixel value and return a string giving X, Y, and the pixel intensity in * world units. */ void xim_encodewcs (XimDataPtr xim, float sx, float sy, int sz, char* obuf) { CtranPtr ct; MappingPtr mp = (MappingPtr) NULL; float wx, wy, wz; int i=0, ch, map_found = 0; char buf[SZ_LINE]; /* The first time we're called get the address of the wcspix * connected flag so we can check whether to get screen pixel * or real-image values. */ if (wcspix_enabled == NULL) { IsmModule ism; extern ismModule ism_modules[]; extern int ism_nmodules; for (i=0; i < ism_nmodules; i++) { ism = &ism_modules[i]; if (strcmp ("wcspix", ism->name) == 0) wcspix_enabled = &(ism->connected); } } /* Now lookup the coordinate mapping and update the WCS and real * pixel value if the ISM is running. */ if (wcspix_enabled != NULL && *wcspix_enabled) { if ((mp = xim_getMapping (xim, sx+1.0, sy, xim->display_frame))) { ct = &(mp->ctran); sx -= 0.5; sy -= 0.5; wx = ct->a * sx + ct->c * sy + ct->tx; wy = ct->b * sx + ct->d * sy + ct->ty; /* Found the image mapping so request the WCS * and pixel information from the WPIX ISM. */ /* if (mp->ref != NULL) {*/ sprintf (buf, "wcstran %d %g %g\n", mp->id, wx, wy); ism_message (xim, "wcspix", buf); /* }*/ map_found++; } } ct = wcs_update (xim, xim->df_p); if (ct->valid) { /* The imtool WCS assumes that the center of the first display * pixel is at (0,0) but actually it is at (0.5,0.5). */ wx = ct->a * sx + ct->c * sy + ct->tx; wy = ct->b * sx + ct->d * sy + ct->ty; if (sz == 0) wz = 0.0; else { switch (ct->zt) { case W_LINEAR: wz = ((sz - CMS_DATASTART) * (ct->z2 - ct->z1) / (CMS_DATARANGE-1)) + ct->z1; break; default: wz = sz; break; } } } else { wx = sx; wy = sy; wz = sz; } ch = ' '; if (sz && ct->valid) { if (ct->z1 < ct->z2) { if (wz < (ct->z1 + 0.01)) ch = '-'; else if (wz > (ct->z2 - 0.01)) ch = '+'; } else if (ct->z1 > ct->z2) { if (wz < (ct->z2 + 0.01)) ch = '-'; else if (wz > (ct->z1 - 0.01)) ch = '+'; } } sprintf (obuf, ct->format, wx + 0.005, wy + 0.005, wz, ch); } /* XIM_GETMAPPING -- Return the mapping struct for the given screen coords. */ static MappingPtr xim_getMapping(XimDataPtr xim, float sx, float sy, int frame) { FrameBufPtr fb = (FrameBufPtr) NULL; MappingPtr mp = (MappingPtr) NULL; int j,i=0; float y = xim->height - sy; int map_debug = 0; /* Loop through the frame buffers until we find the current one. * The mappings aren't stored in the display fb so we need to * search. */ for (j=0; j < xim->nframes; j++) { fb = &xim->frames[j]; if (frame == fb->frameno) { /* Got the right frame, now search for mappings on this * frame which intersect the screen coords. We assume there * are no overlapping image mappings. */ for (i=0; i < fb->nmaps; i++) { mp = &fb->mapping[i]; if (map_debug) { printf ("sx=%.2f sy=%.2f / %.2f --> ", sx, sy, y); printf ("mp->dx=%d+%d=%d mp->dy=%d+%d=%d", mp->dx, mp->dnx, mp->dx+mp->dnx, mp->dy, mp->dny, mp->dy+mp->dny); } if ((sx >= mp->dx && sx <= (mp->dx + mp->dnx)) && ( y >= mp->dy && y <= (mp->dy + mp->dny))) { if (map_debug) printf (" YES\n"); return (mp); } if (map_debug) printf (" NO\n"); } } } return ((MappingPtr) NULL); } /* XIM_FRAMELABEL -- Return a pointer to the frame label string for the current * frame. */ char* xim_frameLabel(XimDataPtr xim) { FrameBufPtr df_p = xim->df_p; sprintf (df_p->label, "[%d] %s", df_p->frameno, df_p->ctran.imtitle); return (df_p->label); } /* WCS_UPDATE -- Load the screen WCS, if not yet validated, from the user * wcs file, if any. * * File format (two lines): * * image title (imtool header label string)\n * a b c d tx ty z1 z2 zt * * The WCS text is passed in via the data stream as a write to the subunit * WCS and left in the buffer "wcsbuf". Mapping information is parsed * elsewhere if needed, our only purpose here is to extract the frame WCS. */ static CtranPtr wcs_update(XimDataPtr xim, FrameBufPtr fr) { CtranPtr ct = &fr->ctran; char buf[1024], *format; /* Get the new WCS. */ if (!ct->valid) { fr->label[0] = '\0'; ct->zt = W_UNITARY; /* Attempt to read the WCS and set up a unitary transformation * if the information cannot be read. */ if (sscanf (fr->wcsbuf, "%[^\n]\n%f%f%f%f%f%f%f%f%d", buf, &ct->a, &ct->b, &ct->c, &ct->d, &ct->tx, &ct->ty, &ct->z1, &ct->z2, &ct->zt) < 7) { if (fr->wcsbuf[0]) fprintf (stderr, "ximtool: error decoding WCS\n"); strncpy (ct->imtitle, "[NO WCS]\n", SZ_IMTITLE); ct->a = ct->d = 1; ct->b = ct->c = 0; ct->tx = ct->ty = 0; ct->zt = W_UNITARY; } else /*** waj ***/ xim_wcs(fr->frameno, ct->a, ct->b, ct->c, ct->d, ct->tx, ct->ty, ct->z1, ct->z2, ct->zt); /*** waj ***/ strncpy (ct->imtitle, buf, SZ_IMTITLE); ct->valid++; } /* Determine best format for wcs output. */ if (ct->valid && ct->zt == W_LINEAR) { float z1, z2, zrange; z1 = ct->z1; z2 = ct->z2; zrange = (z1 > z2) ? z1 - z2 : z2 - z1; if (zrange < 0.01 || (abs(z1) + abs(z2)) / 2.0 < 0.01) format = " %7.2f %7.2f %9.3g%c"; else if (zrange < 100.0 && (abs(z1) + abs(z2)) / 2.0 < 200.0) format = " %7.2f %7.2f %7.3f%c"; else if (zrange > 99999.0 || (abs(z1) + abs(z2)) / 2.0 > 99999.0) format = " %7.2f %7.2f %9.3g%c"; else format = W_DEFFORMAT; } else format = " %7.2f %7.2f %7.0f%c"; strcpy (ct->format, format); return (ct); } /* ADD_MAPPING -- Add a mapping for the current frame. * * File format (two lines): * * image title (imtool header label string)\n * a b c d tx ty z1 z2 zt \n * region_name sx sy snx sny dx dy dnx dny\n * object_ref * * The WCS text is passed in via the data stream as a write to the subunit * WCS and left in the buffer "wcsbuf". Mapping information is parsed * elsewhere if needed, our only purpose here is to extract the frame WCS. */ static void add_mapping (XimDataPtr xim, CtranPtr ctran, char* wcsbuf, FrameBufPtr fr) { MappingPtr mp = &fr->mapping[fr->nmaps]; CtranPtr ct = &mp->ctran; int i, j, frame = fr->frameno; char buf[SZ_WCSBUF]; /* Attempt to read the WCS and set up a unitary transformation * if the information cannot be read. */ if (sscanf (wcsbuf, "%[^\n]\n%f%f%f%f%f%f%f%f%d", buf, &ct->a, &ct->b, &ct->c, &ct->d, &ct->tx, &ct->ty, &ct->z1, &ct->z2, &ct->zt) < 7) { if (wcsbuf[0]) fprintf (stderr, "ximtool: error decoding WCS\n"); strncpy (ct->imtitle, "[NO WCS]\n", SZ_IMTITLE); ct->a = ct->d = 1; ct->b = ct->c = 0; ct->tx = ct->ty = 0; ct->zt = W_UNITARY; } else strncpy (ct->imtitle, buf, SZ_IMTITLE); ct->valid = 1; /* Skip over the first two lines of WCS data. */ strcpy (buf, wcsbuf); for (i=0, j=0; j < 2 && buf[i]; i++) if (buf[i] == '\n') j++; /* Attempt to read the mapping. */ mp->regid = (++objid[frame-1]) + (frame * 100); mp->id = mp->regid; mp->ref[0] = '\0'; mp->region[0] = '\0'; if (sscanf (&buf[i], "%s%f%f%d%d%d%d%d%d\n%s\n", mp->region, &mp->sx, &mp->sy, &mp->snx, &mp->sny, &mp->dx, &mp->dy, &mp->dnx, &mp->dny, mp->ref) < 10) { if (!wcsbuf[0]) fprintf (stderr, "ximtool: error decoding WCS mapping\n"); strncpy (mp->region, "none", SZ_IMTITLE); strncpy (mp->ref, "none", SZ_IMTITLE); mp->sx = 1.0; mp->sy = 1.0; mp->snx = xim->width; mp->sny = xim->height; mp->dx = 1; mp->dy = 1; mp->dnx = xim->width; mp->dny = xim->height; } memmove (ctran, &mp->ctran, sizeof (Ctran)); /* Tell the ISM to cache this mapping if we have an object ref. */ sprintf (buf, "cache %s %d", mp->ref, mp->id); ism_message (xim, "wcspix", buf); sprintf (buf, "wcslist %d", mp->id); ism_message (xim, "wcspix", buf); /* Send the object ref to the GUI. */ sprintf (buf, "cache %s %d %d", mp->ref, fr->frameno, mp->id); wcspix_message (xim, buf); sprintf (buf, "orient %d %d %d %d", mp->id, fr->frameno, (int)ctran->a, (int)(-1 * ctran->d)); wcspix_message (xim, buf); fr->nmaps++; /* Debug the mappings. */ if (getenv("DEBUG_MAPPINGS") != NULL) print_mappings (fr); } /* PRINT_MAPPINGS -- Debug routine to print all mappings on a frame. */ static void print_mappings(FrameBufPtr fr) { MappingPtr mp; int i; if (fr->nmaps == 0) printf ("No mappings for frame %d\n", fr->frameno); for (i=0; i < fr->nmaps; i++) { mp = &fr->mapping[i]; printf ("Mapping %d of %d: id=%d frame=%d:\n", i+1, fr->nmaps, mp->id, fr->frameno); printf ("\t%s %f %f %d %d %d %d %d %d\n\t%s\n", mp->region, mp->sx, mp->sy, mp->snx, mp->sny, mp->dx, mp->dy, mp->dnx, mp->dny, mp->ref); } } /* CHAN_READ -- Read exactly "n" bytes from a descriptor. */ static int chan_read(int fd, void* vptr, int nbytes) { char *ptr = vptr; int nread = 0, nleft = nbytes, nb = 0; while (nleft > 0) { if ( (nb = read(fd, ptr, nleft)) < 0) { if (errno == EINTR) nb = 0; /* and call read() again */ else return(-1); } else if (nb == 0) break; /* EOF */ nleft -= nb; ptr += nb; nread += nb; } return (nread); /* return no. of bytes read */ } /* CHAN_WRITE -- Write exactly "n" bytes to a descriptor. */ static int chan_write (int fd, void* vptr, int nbytes) { char *ptr = vptr; int nwritten = 0, nleft = nbytes, nb = 0; while (nleft > 0) { if ( (nb = write(fd, ptr, nleft)) <= 0) { if (errno == EINTR) nb = 0; /* and call write() again */ else return(-1); /* error */ } nleft -= nb; ptr += nb; nwritten += nb; } return (nwritten); } saods9/tcliis/iis.h000644 000765 000000 00000000700 11107101056 014575 0ustar00joyewheel000000 000000 #ifndef __iis_h__ #define __iis_h__ #include "ximtool.h" int xim_iisOpen(XimDataPtr); void xim_iisClose(XimDataPtr); void xim_retCursorVal(XimDataPtr, float, float, int, int, int, char*); void xim_encodewcs(XimDataPtr, float, float, int, char*); void get_fbconfig(XimDataPtr); void bswap2 (char* a, char* b, int nbytes); void wcspix_message (XimDataPtr xim, char* message); void ism_message (XimDataPtr xim, char* object, char* command); #endif saods9/tcliis/iistcl.C000644 000765 000000 00000025044 12547244460 015263 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2013 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include #include #include using namespace std; #include #include "iistcl.h" extern "C" { #include "iis.h" #include "xim.h" int Tcliis_Init(Tcl_Interp* interp); int TcliisCmd(ClientData data, Tcl_Interp *interp, int argc, const char* argv[]); } IIS* iis=NULL; // Debug int IISDebug= 0; static char* dupstr(const char* str) { char* copy; if (str) { copy=new char[strlen(str)+1]; strcpy(copy,str); } else copy=NULL; return copy; } int Tcliis_Init(Tcl_Interp* interp) { if (IISDebug) cerr << "Iis_Init()" << endl; if (Tcl_InitStubs(interp, TCL_PATCH_LEVEL, 0) == NULL) return TCL_ERROR; Tcl_CreateCommand(interp, "iis", TcliisCmd, (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL); if (Tcl_PkgProvide(interp, PACKAGE_NAME, PACKAGE_VERSION) != TCL_OK) return TCL_ERROR; iis = new IIS(interp); if (iis) return TCL_OK; else return TCL_ERROR; } int TcliisCmd(ClientData data, Tcl_Interp *interp, int argc, const char* argv[]) { if (argc>=2) { if (!strncmp(argv[1], "open", 4)) return iis->open(argc, argv); else if (!strncmp(argv[1], "close", 4)) return iis->close(); else if (!strncmp(argv[1], "retcur", 4)) return iis->retcur(argc, argv); else if (!strncmp(argv[1], "debug", 4)) return iis->debug(argc, argv); else { Tcl_AppendResult(interp, "iis: unknown command: ", argv[1], NULL); return TCL_ERROR; } } else { Tcl_AppendResult(interp, "usage: iis ?open?close?retcur?", NULL); return TCL_ERROR; } } IIS::IIS(Tcl_Interp* intp) { interp = intp; { for (int i=0; i> xim.port; // *port for INET socket delete [] xim.unixaddr; xim.unixaddr = dupstr(argv[5]); // *format for unix socket path } xim_initialize(&xim, xim.def_config, xim.def_nframes, 1); xim_iisOpen(&xim); return TCL_OK; } int IIS::close() { if (IISDebug) cerr << "IIS::close()" << endl; xim_iisClose(&xim); return TCL_OK; } int IIS::retcur(int argc, const char* argv[]) { if (IISDebug) cerr << "IIS::retcur()" << endl; if (argc==6) { if (xim.cursor_chan == NULL) { Tcl_AppendResult(interp, "iis retcur: no cursor channel", NULL); return TCL_ERROR; } float xx,yy; { string x(argv[2]); istringstream str(x); str >> xx; } { string x(argv[3]); istringstream str(x); str >> yy; } int key = argv[4][0]; int frame; { string x(argv[5]); istringstream str(x); str >> frame; } xim_retCursorVal(&xim, xx, yy, frame, 0, key, (char*)""); return TCL_OK; } else { Tcl_AppendResult(interp, "iis retcur: wrong number of args", NULL); return TCL_ERROR; } } int IIS::encodewcs(int argc, const char* argv[]) { if (IISDebug) cerr << "IIS::encodewcs()" << endl; if (argc==4 || argc==5) { float sx,sy; { string x(argv[2]); istringstream str(x); str >> sx; } { string x(argv[3]); istringstream str(x); str >> sy; } int sz = 0; { string x(argv[4]); istringstream str(x); str >> sz; } char buf[SZ_LINE]; xim_encodewcs(&xim, sx, sy, sz, buf); Tcl_SetResult (interp, buf, TCL_VOLATILE); return TCL_OK; } else { Tcl_AppendResult(interp, "iis encodewcs: wrong number of args", NULL); return TCL_ERROR; } } int IIS::debug(int argc, const char* argv[]) { IISDebug = !strncmp(argv[2],"1",1); return TCL_OK; } saods9/tcliis/iistcl.h000644 000765 000000 00000001341 12233512450 015307 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2013 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #ifndef __iistcl_h__ #define __iistcl_h__ extern "C" { #include "ximtool.h" } extern int IISDebug; #define MAXCHANNEL 40 class IIS { private: Tcl_Interp* interp; public: XimData xim; IoChan* chan[MAXCHANNEL]; void (*func[MAXCHANNEL])(IoChan*, int*, void*); public: IIS(Tcl_Interp*); ~IIS(); void eval(char*); const char* evalstr(char*); const char* result(); int open(int, const char*[]); int close(); int retcur(int, const char*[]); int encodewcs(int, const char*[]); int debug(int, const char*[]); }; extern IIS* iis; #endif saods9/tcliis/Makefile.in000755 000765 000000 00000040251 12562731155 015734 0ustar00joyewheel000000 000000 # Makefile.in -- # # This file is a Makefile for Sample TEA Extension. If it has the name # "Makefile.in" then it is a template for a Makefile; to generate the # actual Makefile, run "./configure", which is a configuration script # generated by the "autoconf" program (constructs like "@foo@" will get # replaced in the actual Makefile. # # Copyright (c) 1999 Scriptics Corporation. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. #======================================================================== # Add additional lines to handle any additional AC_SUBST cases that # have been added in a customized configure script. #======================================================================== #SAMPLE_NEW_VAR = @SAMPLE_NEW_VAR@ #======================================================================== # Nothing of the variables below this line should need to be changed. # Please check the TARGETS section below to make sure the make targets # are correct. #======================================================================== #======================================================================== # The names of the source files is defined in the configure script. # The object files are used for linking into the final library. # This will be used when a dist target is added to the Makefile. # It is not important to specify the directory, as long as it is the # $(srcdir) or in the generic, win or unix subdirectory. #======================================================================== PKG_SOURCES = @PKG_SOURCES@ PKG_OBJECTS = @PKG_OBJECTS@ PKG_STUB_SOURCES = @PKG_STUB_SOURCES@ PKG_STUB_OBJECTS = @PKG_STUB_OBJECTS@ #======================================================================== # PKG_TCL_SOURCES identifies Tcl runtime files that are associated with # this package that need to be installed, if any. #======================================================================== PKG_TCL_SOURCES = @PKG_TCL_SOURCES@ #======================================================================== # This is a list of public header files to be installed, if any. #======================================================================== PKG_HEADERS = @PKG_HEADERS@ #======================================================================== # "PKG_LIB_FILE" refers to the library (dynamic or static as per # configuration options) composed of the named objects. #======================================================================== PKG_LIB_FILE = @PKG_LIB_FILE@ PKG_STUB_LIB_FILE = @PKG_STUB_LIB_FILE@ lib_BINARIES = $(PKG_LIB_FILE) BINARIES = $(lib_BINARIES) SHELL = @SHELL@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ datarootdir = @datarootdir@ datadir = @datadir@ mandir = @mandir@ DESTDIR = PKG_DIR = $(PACKAGE_NAME)$(PACKAGE_VERSION) pkgdatadir = $(datadir)/$(PKG_DIR) pkglibdir = $(libdir)/$(PKG_DIR) pkgincludedir = $(includedir)/$(PKG_DIR) top_builddir = . INSTALL_OPTIONS = INSTALL = $(SHELL) $(srcdir)/tclconfig/install-sh -c ${INSTALL_OPTIONS} INSTALL_DATA_DIR = ${INSTALL} -d -m 755 INSTALL_PROGRAM = ${INSTALL} -m 555 INSTALL_DATA = ${INSTALL} -m 444 INSTALL_SCRIPT = ${INSTALL_PROGRAM} INSTALL_LIBRARY = ${INSTALL} -m 644 PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ CC = @CC@ CFLAGS_DEFAULT = @CFLAGS_DEFAULT@ CFLAGS_WARNING = @CFLAGS_WARNING@ EXEEXT = @EXEEXT@ LDFLAGS_DEFAULT = @LDFLAGS_DEFAULT@ MAKE_LIB = @MAKE_LIB@ MAKE_SHARED_LIB = @MAKE_SHARED_LIB@ MAKE_STATIC_LIB = @MAKE_STATIC_LIB@ MAKE_STUB_LIB = @MAKE_STUB_LIB@ OBJEXT = @OBJEXT@ RANLIB = @RANLIB@ RANLIB_STUB = @RANLIB_STUB@ SHLIB_CFLAGS = @SHLIB_CFLAGS@ SHLIB_LD = @SHLIB_LD@ SHLIB_LD_LIBS = @SHLIB_LD_LIBS@ STLIB_LD = @STLIB_LD@ #TCL_DEFS = @TCL_DEFS@ TCL_BIN_DIR = @TCL_BIN_DIR@ TCL_SRC_DIR = @TCL_SRC_DIR@ #TK_BIN_DIR = @TK_BIN_DIR@ #TK_SRC_DIR = @TK_SRC_DIR@ # Not used, but retained for reference of what libs Tcl required #TCL_LIBS = @TCL_LIBS@ #======================================================================== # TCLLIBPATH seeds the auto_path in Tcl's init.tcl so we can test our # package without installing. The other environment variables allow us # to test against an uninstalled Tcl. Add special env vars that you # require for testing here (like TCLX_LIBRARY). #======================================================================== EXTRA_PATH = $(top_builddir):$(TCL_BIN_DIR) #EXTRA_PATH = $(top_builddir):$(TCL_BIN_DIR):$(TK_BIN_DIR) TCLLIBPATH = $(top_builddir) TCLSH_ENV = TCL_LIBRARY=`@CYGPATH@ $(TCL_SRC_DIR)/library` PKG_ENV = @LD_LIBRARY_PATH_VAR@="$(EXTRA_PATH):$(@LD_LIBRARY_PATH_VAR@)" \ PATH="$(EXTRA_PATH):$(PATH)" \ TCLLIBPATH="$(TCLLIBPATH)" TCLSH_PROG = @TCLSH_PROG@ TCLSH = $(PKG_ENV) $(TCLSH_ENV) $(TCLSH_PROG) #WISH_ENV = TK_LIBRARY=`@CYGPATH@ $(TK_SRC_DIR)/library` #WISH_PROG = @WISH_PROG@ #WISH = $(PKG_ENV) $(TCLSH_ENV) $(WISH_ENV) $(WISH_PROG) SHARED_BUILD = @SHARED_BUILD@ INCLUDES = @PKG_INCLUDES@ @TCL_INCLUDES@ #INCLUDES = @PKG_INCLUDES@ @TCL_INCLUDES@ @TK_INCLUDES@ @TK_XINCLUDES@ PKG_CFLAGS = @PKG_CFLAGS@ # TCL_DEFS is not strictly need here, but if you remove it, then you # must make sure that configure.in checks for the necessary components # that your library may use. TCL_DEFS can actually be a problem if # you do not compile with a similar machine setup as the Tcl core was # compiled with. #DEFS = $(TCL_DEFS) @DEFS@ $(PKG_CFLAGS) DEFS = @DEFS@ $(PKG_CFLAGS) # Move pkgIndex.tcl to 'BINARIES' var if it is generated in the Makefile CONFIG_CLEAN_FILES = Makefile pkgIndex.tcl CLEANFILES = @CLEANFILES@ CPPFLAGS = @CPPFLAGS@ LIBS = @PKG_LIBS@ @LIBS@ AR = @AR@ CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) .SUFFIXES: .c .C .$(OBJEXT) #======================================================================== # Start of user-definable TARGETS section #======================================================================== #======================================================================== # TEA TARGETS. Please note that the "libraries:" target refers to platform # independent files, and the "binaries:" target includes executable programs and # platform-dependent libraries. Modify these targets so that they install # the various pieces of your package. The make and install rules # for the BINARIES that you specified above have already been done. #======================================================================== all: binaries libraries #doc #======================================================================== # The binaries target builds executable programs, Windows .dll's, unix # shared/static libraries, and any other platform-dependent files. # The list of targets to build for "binaries:" is specified at the top # of the Makefile, in the "BINARIES" variable. #======================================================================== binaries: $(BINARIES) libraries: #======================================================================== # Your doc target should differentiate from doc builds (by the developer) # and doc installs (see install-doc), which just install the docs on the # end user machine when building from source. #======================================================================== doc: @echo "If you have documentation to create, place the commands to" @echo "build the docs in the 'doc:' target. For example:" @echo " xml2nroff sample.xml > sample.n" @echo " xml2html sample.xml > sample.html" install: all install-binaries install-libraries #install-doc install-binaries: binaries install-lib-binaries install-bin-binaries #======================================================================== # This rule installs platform-independent files, such as header files. # The list=...; for p in $$list handles the empty list case x-platform. #======================================================================== install-libraries: libraries @$(INSTALL_DATA_DIR) $(DESTDIR)$(includedir) @echo "Installing header files in $(DESTDIR)$(includedir)" @list='$(PKG_HEADERS)'; for i in $$list; do \ echo "Installing $(srcdir)/$$i" ; \ $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir) ; \ done; #======================================================================== # Install documentation. Unix manpages should go in the $(mandir) # directory. #======================================================================== install-doc: doc @$(INSTALL_DATA_DIR) $(DESTDIR)$(mandir)/mann @echo "Installing documentation in $(DESTDIR)$(mandir)" @list='$(srcdir)/doc/*.n'; for i in $$list; do \ echo "Installing $$i"; \ $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/mann ; \ done test: binaries libraries $(TCLSH) `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS) \ -load "package ifneeded ${PACKAGE_NAME} ${PACKAGE_VERSION} \ [list load `@CYGPATH@ $(PKG_LIB_FILE)` $(PACKAGE_NAME)]" shell: binaries libraries @$(TCLSH) $(SCRIPT) gdb: $(TCLSH_ENV) gdb $(TCLSH_PROG) $(SCRIPT) VALGRINDARGS = --tool=memcheck --num-callers=8 --leak-resolution=high \ --leak-check=yes --show-reachable=yes -v valgrind: binaries libraries $(TCLSH_ENV) valgrind $(VALGRINDARGS) $(TCLSH_PROG) \ `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS) valgrindshell: binaries libraries $(TCLSH_ENV) valgrind $(VALGRINDARGS) $(TCLSH_PROG) $(SCRIPT) depend: #======================================================================== # $(PKG_LIB_FILE) should be listed as part of the BINARIES variable # mentioned above. That will ensure that this target is built when you # run "make binaries". # # The $(PKG_OBJECTS) objects are created and linked into the final # library. In most cases these object files will correspond to the # source files above. #======================================================================== $(PKG_LIB_FILE): $(PKG_OBJECTS) -rm -f $(PKG_LIB_FILE) ${MAKE_LIB} $(RANLIB) $(PKG_LIB_FILE) $(PKG_STUB_LIB_FILE): $(PKG_STUB_OBJECTS) -rm -f $(PKG_STUB_LIB_FILE) ${MAKE_STUB_LIB} $(RANLIB_STUB) $(PKG_STUB_LIB_FILE) #======================================================================== # We need to enumerate the list of .c to .o lines here. # # In the following lines, $(srcdir) refers to the toplevel directory # containing your extension. If your sources are in a subdirectory, # you will have to modify the paths to reflect this: # # sample.$(OBJEXT): $(srcdir)/generic/sample.c # $(COMPILE) -c `@CYGPATH@ $(srcdir)/generic/sample.c` -o $@ # # Setting the VPATH variable to a list of paths will cause the makefile # to look into these paths when resolving .c to .obj dependencies. # As necessary, add $(srcdir):$(srcdir)/compat:.... #======================================================================== VPATH = $(srcdir):$(srcdir)/generic:$(srcdir)/unix:$(srcdir)/win:$(srcdir)/macosx .c.@OBJEXT@: $(COMPILE) -c `@CYGPATH@ $<` -o $@ .C.@OBJEXT@: $(COMPILE) -c `@CYGPATH@ $<` -o $@ #======================================================================== # Distribution creation # You may need to tweak this target to make it work correctly. #======================================================================== #COMPRESS = tar cvf $(PKG_DIR).tar $(PKG_DIR); compress $(PKG_DIR).tar COMPRESS = tar zcvf $(PKG_DIR).tar.gz $(PKG_DIR) DIST_ROOT = /tmp/dist DIST_DIR = $(DIST_ROOT)/$(PKG_DIR) dist-clean: rm -rf $(DIST_DIR) $(DIST_ROOT)/$(PKG_DIR).tar.* dist: dist-clean $(INSTALL_DATA_DIR) $(DIST_DIR) cp -p $(srcdir)/ChangeLog $(srcdir)/README* $(srcdir)/license* \ $(srcdir)/aclocal.m4 $(srcdir)/configure $(srcdir)/*.in \ $(DIST_DIR)/ chmod 664 $(DIST_DIR)/Makefile.in $(DIST_DIR)/aclocal.m4 chmod 775 $(DIST_DIR)/configure $(DIST_DIR)/configure.in for i in $(srcdir)/*.[ch]; do \ if [ -f $$i ]; then \ cp -p $$i $(DIST_DIR)/ ; \ fi; \ done; $(INSTALL_DATA_DIR) $(DIST_DIR)/tclconfig cp $(srcdir)/tclconfig/install-sh $(srcdir)/tclconfig/tcl.m4 \ $(DIST_DIR)/tclconfig/ chmod 664 $(DIST_DIR)/tclconfig/tcl.m4 chmod +x $(DIST_DIR)/tclconfig/install-sh list='demos doc generic library mac tests unix win'; \ for p in $$list; do \ if test -d $(srcdir)/$$p ; then \ $(INSTALL_DATA_DIR) $(DIST_DIR)/$$p; \ cp -p $(srcdir)/$$p/*.* $(DIST_DIR)/$$p/; \ fi; \ done (cd $(DIST_ROOT); $(COMPRESS);) #======================================================================== # End of user-definable section #======================================================================== #======================================================================== # Don't modify the file to clean here. Instead, set the "CLEANFILES" # variable in configure.in #======================================================================== clean: -test -z "$(BINARIES)" || rm -f $(BINARIES) -rm -f *.$(OBJEXT) core *.core -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean: clean -rm -f *.tab.c -rm -f $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log config.status #======================================================================== # Install binary object libraries. On Windows this includes both .dll and # .lib files. Because the .lib files are not explicitly listed anywhere, # we need to deduce their existence from the .dll file of the same name. # Library files go into the lib directory. # In addition, this will generate the pkgIndex.tcl # file in the install location (assuming it can find a usable tclsh shell) # # You should not have to modify this target. #======================================================================== install-lib-binaries: binaries @$(INSTALL_DATA_DIR) $(DESTDIR)$(pkglibdir) @list='$(lib_BINARIES)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_LIBRARY) $$p $(DESTDIR)$(pkglibdir)/$$p"; \ $(INSTALL_LIBRARY) $$p $(DESTDIR)$(pkglibdir)/$$p; \ stub=`echo $$p|sed -e "s/.*\(stub\).*/\1/"`; \ if test "x$$stub" = "xstub"; then \ echo " $(RANLIB_STUB) $(DESTDIR)$(pkglibdir)/$$p"; \ $(RANLIB_STUB) $(DESTDIR)$(pkglibdir)/$$p; \ else \ echo " $(RANLIB) $(DESTDIR)$(pkglibdir)/$$p"; \ $(RANLIB) $(DESTDIR)$(pkglibdir)/$$p; \ fi; \ ext=`echo $$p|sed -e "s/.*\.//"`; \ if test "x$$ext" = "xdll"; then \ lib=`basename $$p|sed -e 's/.[^.]*$$//'`.lib; \ if test -f $$lib; then \ echo " $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib"; \ $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib; \ fi; \ fi; \ fi; \ done @list='$(PKG_TCL_SOURCES)'; for p in $$list; do \ if test -f $(srcdir)/$$p; then \ destp=`basename $$p`; \ echo " Install $$destp $(DESTDIR)$(pkglibdir)/$$destp"; \ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkglibdir)/$$destp; \ fi; \ done @if test "x$(SHARED_BUILD)" = "x1"; then \ echo " Install pkgIndex.tcl $(DESTDIR)$(pkglibdir)"; \ $(INSTALL_DATA) pkgIndex.tcl $(DESTDIR)$(pkglibdir); \ fi #======================================================================== # Install binary executables (e.g. .exe files and dependent .dll files) # This is for files that must go in the bin directory (located next to # wish and tclsh), like dependent .dll files on Windows. # # You should not have to modify this target, except to define bin_BINARIES # above if necessary. #======================================================================== install-bin-binaries: binaries @$(INSTALL_DATA_DIR) $(DESTDIR)$(bindir) @list='$(bin_BINARIES)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \ fi; \ done Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status uninstall-binaries: list='$(lib_BINARIES)'; for p in $$list; do \ rm -f $(DESTDIR)$(pkglibdir)/$$p; \ done list='$(PKG_TCL_SOURCES)'; for p in $$list; do \ p=`basename $$p`; \ rm -f $(DESTDIR)$(pkglibdir)/$$p; \ done list='$(bin_BINARIES)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/$$p; \ done .PHONY: all binaries clean depend distclean doc install libraries test # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: saods9/tcliis/pkgIndex.tcl.in000755 000765 000000 00000000220 12535332216 016534 0ustar00joyewheel000000 000000 # # Tcl package index file # package ifneeded @PACKAGE_NAME@ @PACKAGE_VERSION@ \ [list load [file join $dir @PKG_LIB_FILE@] @PACKAGE_NAME@] saods9/tcliis/tclconfig/000755 000765 000000 00000000000 13012655563 015631 5ustar00joyewheel000000 000000 saods9/tcliis/util.c000644 000765 000000 00000016533 12257374202 015010 0ustar00joyewheel000000 000000 #include #include #include #include #include "iis.h" #include "xim.h" /* Definitions for the supported ISM Modules. */ int ism_nmodules = 0; ismModule ism_modules[] = { {"wcspix", "", NULL, NULL, NULL, 0}, }; /* BSWAP2 - Move bytes from array "a" to array "b", swapping successive * pairs of bytes. The two arrays may be the same but may not be offset * and overlapping. */ void bswap2 (char* a, char* b, int nbytes) { register char *ip=a, *op=b, *otop; register unsigned temp; /* Swap successive pairs of bytes. */ for (otop = op + (nbytes & ~1); op < otop; ) { temp = *ip++; *op++ = *ip++; *op++ = temp; } /* If there is an odd byte left, move it to the output array. */ if (nbytes & 1) *op = *ip; } /* GET_FBCONFIG -- Read the XIMTOOL startup file to get the set of possible * frame buffer sizes. * * File format: configno nframes width height [extra fields] * e.g., 1 2 512 512 * 2 2 800 800 * 3 1 1024 1024 # comment */ void get_fbconfig (register XimDataPtr xim) { register char *ip; register FILE *fp = NULL; int config, nframes, width, height, i; char lbuf[SZ_LINE+1], *fname; static char *fb_paths[] = { "/usr/local/lib/imtoolrc", "/opt/local/lib/imtoolrc", "/iraf/iraf/dev/imtoolrc", "/local/lib/imtoolrc", "/usr/iraf/dev/imtoolrc", "/usr/local/iraf/dev/imtoolrc", NULL}; /* Initialize the config table. */ xim->fb_configno = 1; for (i=0; i < MAX_FBCONFIG; i++) { xim->fb_config[i].nframes = 1; xim->fb_config[i].width = DEF_FRAME_WIDTH; xim->fb_config[i].height = DEF_FRAME_HEIGHT; } /* Now add in some defaults for commonly used sizes based on the * standard IRAF imtoolrc file, we'll avoid any instrument specific * configurations. */ xim->fb_config[0].width = xim->fb_config[0].height = 512; xim->fb_config[1].width = xim->fb_config[1].height = 800; xim->fb_config[2].width = xim->fb_config[2].height = 1024; xim->fb_config[3].width = xim->fb_config[3].height = 1600; xim->fb_config[4].width = xim->fb_config[4].height = 2048; xim->fb_config[5].width = xim->fb_config[5].height = 4096; /* Attempt to open the config file. */ if ((fname=getenv(FBCONFIG_ENV1)) || (fname=getenv(FBCONFIG_ENV2))) fp = fopen (fname, "r"); if (!fp && (fname = getenv ("HOME"))) { sprintf (lbuf, "%s/%s", fname, FBCONFIG_1); fp = fopen (fname = lbuf, "r"); if (fp) { if (xim->imtoolrc) free(xim->imtoolrc); xim->imtoolrc = (char *) calloc (SZ_LINE, sizeof(char)); strncpy (xim->imtoolrc, fname, strlen(fname)); } } if (!fp) fp = fopen (fname = xim->imtoolrc, "r"); for (i=0; !fp && fb_paths[i]; i++) { if ((fp = fopen (fname = fb_paths[i], "r"))) { if (xim->imtoolrc) free(xim->imtoolrc); xim->imtoolrc = calloc(strlen(fb_paths[i])+1,sizeof(char)); strncpy (xim->imtoolrc, fb_paths[i],strlen(fb_paths[i])); break; } } if (!fp) { default_imtoolrc(xim); return; } /* Scan the frame buffer configuration file. */ while (fgets (lbuf, SZ_LINE, fp) != NULL) { /* Skip comment lines and blank lines. */ for (ip=lbuf; *ip == ' ' || *ip == '\t'; ip++) ; if (*ip == '\n' || *ip == '#') continue; if (!isdigit (*ip)) continue; switch (sscanf (ip, "%d%d%d%d", &config,&nframes,&width,&height)) { case 4: break; /* normal case */ case 3: height = width; /* default to square format */ break; default: fprintf (stderr, "ximtool: bad config `%s'\n", ip); continue; } nframes = max (1, nframes); width = max (1, width); height = max (1, height); /* Since the frame buffer is stored in a memory pixrect * (effectively), the line length should be an integral number * of 16 bit words. */ if (width & 1) { fprintf (stderr, "imtool warning: fb config %d [%d-%dx%d] - ", config, nframes, width, height); fprintf (stderr, "frame width should be even, reset to %d\n", --width); } config = max(1, min(MAX_FBCONFIG, config)) - 1; xim->fb_config[config].nframes = nframes; xim->fb_config[config].width = width; xim->fb_config[config].height = height; } if (fp) fclose (fp); } /* * Default imtoolrc file-- if a valid imtoolrc file can not be found, * then fill out a default fb_config */ void default_imtoolrc(XimDataPtr xim) { /* 1 2 512 512 # imt1|imt512 */ xim->fb_config[0].nframes = 2; xim->fb_config[0].width = 512; xim->fb_config[0].height = 512; /* 2 2 800 800 # imt2|imt800 */ xim->fb_config[1].nframes = 2; xim->fb_config[1].width = 800; xim->fb_config[1].height = 800; /* 3 2 1024 1024 # imt3|imt1024 */ xim->fb_config[2].nframes = 2; xim->fb_config[2].width = 1024; xim->fb_config[2].height = 1024; /* 4 1 1600 1600 # imt4|imt1600 */ xim->fb_config[3].nframes = 1; xim->fb_config[3].width = 1600; xim->fb_config[3].height = 1600; /* 5 1 2048 2048 # imt5|imt2048 */ xim->fb_config[4].nframes = 1; xim->fb_config[4].width = 2048; xim->fb_config[4].height = 2048; /* 6 1 4096 4096 # imt6|imt4096 */ xim->fb_config[5].nframes = 1; xim->fb_config[5].width = 4096; xim->fb_config[5].height = 4096; /* 7 1 8192 8192 # imt7|imt8192 */ xim->fb_config[6].nframes = 1; xim->fb_config[6].width = 8192; xim->fb_config[6].height = 8192; /* 8 1 1024 4096 # imt8|imt1x4 */ xim->fb_config[7].nframes = 1; xim->fb_config[7].width = 1024; xim->fb_config[7].height = 4096; /* 9 2 1144 880 # imt9|imtfs full screen (1152x900 minus frame) */ xim->fb_config[8].nframes = 2; xim->fb_config[8].width = 1144; xim->fb_config[8].height = 880; /* 10 2 1144 764 # imt10|imtfs35 full screen at 35mm film aspect */ xim->fb_config[9].nframes = 2; xim->fb_config[9].width = 1144; xim->fb_config[9].height = 764; /* 11 2 128 128 # imt11|imt128 */ xim->fb_config[10].nframes = 2; xim->fb_config[10].width = 128; xim->fb_config[10].height = 128; /* 12 2 256 256 # imt12|imt256 */ xim->fb_config[11].nframes = 2; xim->fb_config[11].width = 256; xim->fb_config[11].height = 256; /* 13 2 128 1056 # imt13|imttall128 tall & narrow for spectro. */ xim->fb_config[12].nframes = 2; xim->fb_config[12].width = 128; xim->fb_config[12].height = 1056; /* 14 2 256 1056 # imt14|imttall256 tall & wider for spectro. */ xim->fb_config[13].nframes = 2; xim->fb_config[13].width = 256; xim->fb_config[13].height = 1056; /* 15 2 1056 128 # imt15|imtwide128 wide & thin for spectro. */ xim->fb_config[14].nframes = 2; xim->fb_config[14].width = 1056; xim->fb_config[14].height = 128; /* 16 2 1056 256 # imt16|imtwide256 wide & fatter for spectro. */ xim->fb_config[15].nframes = 2; xim->fb_config[15].width = 1056; xim->fb_config[15].height = 256; /* 17 2 1008 648 # imt17|imtssy Solitaire fmt w/ imtool border */ xim->fb_config[16].nframes = 2; xim->fb_config[16].width = 1008; xim->fb_config[16].height = 648; /* 18 2 1024 680 # imt18|imtssn Solitaire fmt w/out imtool border */ xim->fb_config[17].nframes = 2; xim->fb_config[17].width = 1024; xim->fb_config[17].height = 680; /* 19 1 4096 1024 # imt19|imt4x1 */ xim->fb_config[18].nframes = 1; xim->fb_config[18].width = 4096; xim->fb_config[18].height = 1024; } void wcspix_message (XimDataPtr xim, char* message) {} void ism_message (XimDataPtr xim, char* object, char* command) {} saods9/tcliis/xim.C000644 000765 000000 00000016216 12741731436 014572 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2013 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include #include using namespace std; #include #ifdef __WIN32__ #include #endif #include "iistcl.h" extern "C" { #include "iis.h" #include "xim.h" void iisIO(ClientData data, int mask) { int fd = (long)data; if (IISDebug) cerr << "iisIO() " << fd << ' ' << mask << endl; if ((fd < MAXCHANNEL) && iis->func[fd]) { (*iis->func[fd])(iis->chan[fd], &fd, NULL); } else cerr << "Error: IIS iisIO problems" << endl; } } // extern 'C' int xim_addInput(XimDataPtr xim, int fd, void (*func)(IoChan*, int*, void*), IoChanPtr chan) { if (IISDebug) cerr << "xim_addInput() " << fd << ' ' << func << ' ' << chan << endl; iis->func[fd] = func; iis->chan[fd] = chan; #ifndef __WIN32__ Tcl_CreateFileHandler(fd, TCL_READABLE, (void (*)(ClientData,int))iisIO, (ClientData)long(fd)); #else Tcl_CreateEventSource(setupProc, checkProc, (ClientData)long(fd)); #endif return fd; } #ifdef __WIN32__ void setupProc(void* fd, int flags) { Tcl_Time blockTime = {0,1000}; Tcl_SetMaxBlockTime(&blockTime); return; } void checkProc(void* fdd, int flags) { int fd = (int)fdd; fd_set readfds; struct timeval tv = {0,0}; FD_ZERO(&readfds); FD_SET(fd, &readfds); int got = select(fd+1, &readfds, NULL, NULL, &tv); if (got<0) Tcl_DeleteEventSource(setupProc, checkProc, fdd); else if (got>0) iisIO(fdd,0); } #endif void xim_removeInput(XimDataPtr xim, int fd) { if (IISDebug) cerr << "xim_removeInput() " << fd << endl; if (fd < MAXCHANNEL) { iis->func[fd] = NULL; iis->chan[fd] = NULL; #ifndef __WIN32__ Tcl_DeleteFileHandler(fd); #endif } else cerr << "Error: IIS xim_removeInput-- bad fd" << endl; } void xim_initialize(XimDataPtr xim, int config, int nframes, int hardreset) { // from ximtool xim_initialize get_fbconfig(xim); xim->fb_configno = config; xim->df_p = &xim->frames[0]; FbConfigPtr cf = &xim->fb_config[config-1]; xim->width = cf->width; xim->height = cf->height; ostringstream str; str << "IISInitializeCmd " << xim->width << ' ' << xim->height << ends; iis->eval((char*)str.str().c_str()); if (IISDebug) cerr << "IISInitializeCmd " << xim->width << ' ' << xim->height << endl; } void xim_initFrame(XimDataPtr xim, int frame, int nframes, FbConfig* config, char* memModel) { // from ximtool xim_initFrame FrameBufPtr fb = &xim->frames[frame-1]; fb->frameno = frame; fb->raster = frame; fb->zoomras = 0; fb->zoommap = 0; fb->dispmap = 0; fb->colormap = DEF_COLORMAP; fb->offset = 0.5; fb->scale = 1.0; fb->xscale = fb->yscale = 1.0; fb->xmag = fb->ymag = 1.0; fb->xcen = fb->ycen = 0.0; fb->xoff = fb->yoff = 0.0; fb->xflip = fb->yflip = 0; fb->label[0] = '\0'; fb->wcsbuf[0] = '\0'; fb->nmaps = 0; // my stuff ostringstream str; str << "IISInitFrameCmd " << frame << ends; iis->eval((char*)str.str().c_str()); if (IISDebug) cerr << "xim_initFrame() " << str.str().c_str() << endl; } void xim_setDisplayFrame(XimDataPtr xim, int frame) { // from imtool xim_setDisplayFrame FbConfig* config = &xim->fb_config[xim->fb_configno-1]; xim->df_p = &xim->frames[frame-1]; xim->width = config->width; xim->height = config->height; // and my stuff ostringstream str; str << "IISSetDisplayFrameCmd " << frame << ' ' << config->width << ' ' << config->height << ends; iis->eval((char*)str.str().c_str()); if (IISDebug) { cerr << "xim_setDisplayFrame() " << str.str().c_str() << endl; } } void xim_setReferenceFrame(IoChanPtr chan, int frame) { // from imtool xim_setDisplayFrame // Ignore request if channel not active. if (!chan->type) return; XimDataPtr xim = (XimDataPtr)chan->xim; int frameno = max(1, min(MAX_FRAMES, frame)); FrameBufPtr fb = &xim->frames[frameno-1]; // Ignore request if not a valid frame. // // All frames are valid, ds9 frames now work with iis. // // if (fb->frameno > 0) { chan->reference_frame = frameno; chan->rf_p = fb; // } ostringstream str; str << "IISSetRefFrameCmd " << frame << ends; const char *wcs = iis->evalstr((char*)str.str().c_str()); if (IISDebug) { if (*wcs) cerr << "xim_setReferenceFrame() " << str.str().c_str() << " " << wcs << endl; else cerr << "xim_setReferenceFrame() " << str.str().c_str() << endl; } if (*wcs) strcpy(fb->wcsbuf, wcs); } void xim_eraseFrame(XimDataPtr xim, int frame) { ostringstream str; str << "IISEraseFrameCmd " << frame << ends; iis->eval((char*)str.str().c_str()); if (IISDebug) cerr << "xim_eraseFrame() " << str.str().c_str() << endl; } void xim_message(XimDataPtr xim, char* message, char* imtitle) { ostringstream str; str << "IISMessageCmd {" << message << ' ' << imtitle << '}' << ends; iis->eval((char*)str.str().c_str()); if (IISDebug) cerr << "xim_message() " << str.str().c_str() << endl; } void xim_wcs(int frame, float a, float b, float c, float d, float tx, float ty, float z1, float z2, int zt) { ostringstream str; str << "IISWCSCmd " << frame << ' ' << a << ' ' << b << ' ' << c << ' ' << d << ' ' << tx << ' ' << ty << ' ' << z1 << ' ' << z2 << ' ' << zt << ends; iis->eval((char*)str.str().c_str()); if (IISDebug) cerr << "xim_wcs() " << frame << ' ' << a << ' ' << b << ' ' << c << ' ' << d << ' ' << tx << ' ' << ty << ' ' << z1 << ' ' << z2 << ' ' << zt << endl; } void GtWritePixels(void* gt, int frame, void* pixels, int bits, int xx, int yy, int dx, int dy) { ostringstream str; str << "IISWritePixelsCmd " << frame << ' ' << pixels << ' ' << xx << ' ' << yy << ' ' << dx << ' ' << dy << ends; iis->eval((char*)str.str().c_str()); if (IISDebug) cerr << "GtWritePixels() " << str.str().c_str() << endl; } void GtReadPixels(void* gt, int frame, void* pixels, int nbits, int xx, int yy, int dx, int dy) { ostringstream str; str << "IISReadPixelsCmd " << frame << ' ' << pixels << ' ' << xx << ' ' << yy << ' ' << dx << ' ' << dy << ends; iis->eval((char*)str.str().c_str()); if (IISDebug) cerr << "GtReadPixels() " << str.str().c_str() << endl; } void xim_cursorMode(XimDataPtr xim, int state) { ostringstream str; str << "IISCursorModeCmd " << state << ends; iis->eval((char*)str.str().c_str()); if (IISDebug) cerr << "xim_cursorMode() " << state << endl; } void xim_getCursorPos(XimDataPtr xim, float* xx, float* yy, int* raster, int* frame) { { ostringstream str; str << "IISGetCursorPosCmd " << ends; iis->eval((char*)str.str().c_str()); } if (IISDebug) cerr << "xim_getCursorPos()" << endl; { string x(iis->result()); istringstream str(x); str >> *xx >> *yy >> *frame; *raster = *frame; } } void xim_setCursorPos(XimDataPtr xim, int xx, int yy) { ostringstream str; str << "IISSetCursorPosCmd " << xx << ' ' << yy << ends; iis->eval((char*)str.str().c_str()); if (IISDebug) cerr << "xim_setCursorPos()" << endl; } saods9/tcliis/xim.h000644 000765 000000 00000001737 07307475503 014643 0ustar00joyewheel000000 000000 #ifndef __xim_h__ #define __xim_h__ #include "ximtool.h" void xim_initialize(XimDataPtr, int, int, int); void GtQueryColormap(void*, int, int*, int*, int*); void GtReadPixels(void*, int, void*, int, int, int, int, int); void GtWritePixels(void*, int, void*, int, int, int, int, int); void xim_cursorMode(XimDataPtr, int); void xim_getCursorPos(XimDataPtr, float*, float*, int*, int*); void xim_setReferenceFrame(IoChanPtr, int); void xim_setDisplayFrame(XimDataPtr, int); void xim_removeInput(XimDataPtr, int); void xim_message(XimDataPtr, char*, char*); void xim_initFrame(XimDataPtr, int, int, FbConfig*, char*); void xim_setCursorPos(XimDataPtr, int, int); void xim_eraseFrame(XimDataPtr, int); int xim_addInput(XimDataPtr, int, void (*func)(IoChan*, int*, void*), IoChan*); void xim_wcs(int, float, float, float, float, float, float, float, float, int); #ifdef __WIN32__ void setupProc(void*, int); void checkProc(void*, int); #endif void default_imtoolrc (XimDataPtr xim); #endif saods9/tcliis/ximtool.h000644 000765 000000 00000027352 12260620651 015530 0ustar00joyewheel000000 000000 #ifndef __ximtool_h__ #define __ximtool_h__ #define XtPointer void * #define Boolean int #define String char * #define Widget void * #define PSImagePtr void * /* Default values, size limiting values. */ #define MAX_FBCONFIG 128 /* max possible frame buf sizes */ #define MAX_FRAMES 16 /* max number of frames */ #define MAX_MAPPINGS 100 /* max number of mappings/frame */ #define MAX_CLIENTS 8 /* max display server clients */ #define MAX_ISM 8 /* max ISM module clients */ #define MAX_COLORMAPS 256 /* max number of colormaps */ #define MAX_COLORS 256 /* max size colormap */ #define MAX_PRINTERS 128 /* max number of printers */ #define FIRST_COLOR 10 /* first allocatable color */ #define DEF_NCOLORS 201 /* default number of colors */ #define DEF_COLORMAP 1 /* default colormap */ #define DEF_NFRAMES 1 /* save memory; only one frame */ #define DEF_FRAME_WIDTH 512 /* 512 square frame */ #define DEF_FRAME_HEIGHT 512 /* 512 square frame */ #define DEF_FRAME_DEPTH 8 /* 8 bits deep */ #define DEF_WIN_WIDTH 512 /* default size window */ #define DEF_WIN_HEIGHT 512 /* default size window */ #define DEF_TILE_BORDER 3 /* border width for tileFrames */ #define DEF_BORDER_COLOR "9" /* border highlight color */ #define SZ_CMAPNAME 32 /* colormap name buffer */ #define SZ_NAME 80 /* object name buffer */ #define SZ_LABEL 256 /* main frame label string */ #define SZ_IMTITLE 128 /* image title string */ #define SZ_WCTEXT 80 /* WCS box text */ #define SZ_OLD_WCSBUF 320 /* old WCS text buffer size */ #define SZ_WCSBUF 1024 /* WCS text buffer size */ #define SZ_MSGBUF 8192 /* message buffer size */ #define SZ_COLORBAR 11 /* height of colorbar in pixels */ #define SZ_FIFOBUF 4000 /* transfer size for FIFO i/o */ #define SZ_FNAME 256 #define SZ_LINE 256 #define ERR (-1) #define OK 0 #define EOS '\0' #define M_UNITARY 0 /* xim_setmapping */ #define M_ASPECT 1 #define M_FILL 2 /* Magic numbers. */ #define DEF_PORT 5137 /* default tcp/ip socket */ #define I_DEVNAME "/dev/imt1o" /* pseudo device names */ #define O_DEVNAME "/dev/imt1i" /* our IN is client's OUT */ #define DEF_UNIXADDR "/tmp/.IMT%d" /* default unix socket */ #define DEF_ANTIALIASTYPE "boxcar" /* default antialiasing */ #define FBCONFIG_1 ".imtoolrc" #define FBCONFIG_2 "/usr/local/lib/imtoolrc" #define CMAPCONFIG "/usr/local/lib/imtoolcmap" #define FBCONFIG_ENV1 "imtoolrc" #define FBCONFIG_ENV2 "IMTOOLRC" #define PRINTCONFIG "/usr/local/lib/ximprint.cfg" #define DEF_ISM_ADDR "/tmp/.ISM%d" /* default ISM unix socket */ #define DEF_ISM_TEMPLATE "/tmp/.ISM%d_%d" /* ISM client socket template */ #define DEF_ISM_TASK "wcspix" #define DEF_ISM_CMD "ism_wcspix.e wcspix &" #define SZ_ISMBUF 4096 /* WCS definitions. */ #define W_UNITARY 0 #define W_LINEAR 1 #define W_LOG 2 #define W_USER 3 #define W_DEFFORMAT " %7.2f %7.2f %7.1f%c" /* Rotation matrix defining world coordinate system (WCS) of a frame. */ typedef struct { int valid; /* has WCS been set? */ float a, b; /* x, y scale factors */ float c, d; /* x, y cross factors */ float tx, ty; /* x, y translation */ float z1, z2; /* greyscale range */ int zt; /* greyscale mapping */ char format[32]; /* wcs output format */ char imtitle[SZ_IMTITLE+1]; /* image title from WCS */ } Ctran, *CtranPtr; /* Coordinate mappings on each frame buffer. */ typedef struct { int id; /* object id */ Ctran ctran; /* world coordinate system */ char ref[SZ_FNAME+1]; /* image reference from WCS */ int regid; /* region id */ char region[SZ_FNAME+1]; /* region name from WCS */ float sx, sy; /* source rect */ int snx, sny; int dx, dy; /* destination rect */ int dnx, dny; } Mapping, *MappingPtr; /* The frame buffers. */ typedef struct { int frameno; /* frame number */ int raster; /* frame buffer raster */ int zoomras; /* zoom/pan raster */ int zoommap; /* zoom/pan mapping */ int dispmap; /* mapping used for display */ int colormap; /* greyscale transformation */ float offset, scale; /* transfer function */ float xscale, yscale; /* scaling at [xy]mag==1.0 */ float xmag, ymag; /* zoom/dezoom factors */ float xcen, ycen; /* center of zoomed region */ float xoff, yoff; /* offset of zoomed region */ int xflip, yflip; /* flip in X or Y? */ char label[SZ_LABEL+1]; /* frame label string */ Ctran ctran; /* world coordinate system */ char wcsbuf[SZ_WCSBUF]; /* wcs info string */ Mapping mapping[MAX_MAPPINGS]; /* coordinate mappings */ int nmaps; /* number of defined mappings */ } FrameBuf, *FrameBufPtr; /* Possible frame buffer sizes. */ typedef struct { int nframes; /* number of frames */ int width; /* frame buffer width */ int height; /* frame buffer height */ } FbConfig, *FbConfigPtr; /* Predefined colormaps. */ typedef struct { int mapno; /* widget colormap number */ char name[SZ_CMAPNAME+1]; /* colormap name */ } ColorMap, *ColorMapPtr; /* Predefined lookup tables. */ typedef struct { float red, green, blue; } Triplet, *TripletPtr; typedef struct { int lutlen; Triplet hue[MAX_COLORS]; } Lut, *LutPtr; /* Client IIS I/O channel. */ typedef struct { XtPointer xim; /* backpointer to xim descriptor */ int id; /* input callback id */ int type; /* channel type */ int datain; /* input channel */ int dataout; /* output channel */ int keepalive; /* used to keep input fifo ready */ char path[SZ_FNAME+1]; /* for unix sockets */ int reference_frame; /* reference (cmd i/o) frame */ int version; /* flags capability of client */ FrameBufPtr rf_p; /* reference frame descriptor */ } IoChan, *IoChanPtr; #define IO_FIFO 1 #define IO_INET 2 #define IO_UNIX 3 /* Client ISM I/O channel. */ typedef struct { XtPointer xim; /* backpointer to xim descriptor */ XtPointer id; /* input callback id */ int datain; /* input channel */ int dataout; /* output channel */ int connected; /* client connected? */ char name[SZ_FNAME+1]; /* client name */ char path[SZ_FNAME+1]; /* for unix sockets */ char msgbuf[SZ_ISMBUF+1]; /* incomplete message buffer */ } IsmIoChan, *IsmIoChanPtr; /* Definitions for the supported ISM Modules. */ typedef void (*IsmFunc)(); typedef struct { char name[SZ_FNAME]; /* name of the module */ char command[SZ_LINE]; /* cmd to execute for module */ IsmFunc startupCB; /* connection callback func */ IsmFunc shutdownCB; /* shutdown callback func */ IsmFunc commandCB; /* client command callback func */ int connected; /* client is connected */ int ref_count; /* reference count */ IsmIoChanPtr chan; /* i/o channel */ } ismModule, *IsmModule; /* Printer list. */ typedef struct { char printerName[SZ_FNAME+1]; /* printer name */ char printCmd[SZ_FNAME+1]; /* printer dispose command */ } Printer, *PrinterPtr; /* Printer configuration struct. */ typedef struct { int printno; /* printer number */ int seqno; /* sequence number */ int diskfile; /* print to diskfile? */ char printFile[SZ_FNAME+1]; /* disk filename template */ char printCmd[SZ_FNAME+1]; /* dispose command */ } PrintCfg, *PrintCfgPtr; /* File save definitions and structure. */ typedef struct { int seqno; /* sequence number */ int format; /* save format */ int colorType; /* save color type */ int w, h, d; /* dimensions of last file saved */ char fname[SZ_FNAME+1]; /* save filename */ } fileSave, *fileSavePtr; #define XIM_GRAYSCALE 0 /* save color options */ #define XIM_PSEUDOCOLOR 1 #define XIM_RGB 2 #define XIM_RAS 0 /* save format options */ #define XIM_GIF 1 #define XIM_TIFF 2 #define XIM_JPEG 3 #define XIM_X11 4 #define XIM_FITS 5 #define XIM_RAW 6 #define XIM_EPS 7 #define XIM_OIF 8 /* File load struct. */ typedef struct { int nfiles; /* number of files in directory */ char **FileList; /* list of directory contents */ char curdir[SZ_FNAME+1]; /* current directory */ char homedir[SZ_FNAME+1]; /* home directory */ char pattern[SZ_NAME+1]; /* file pattern to match */ int gray; /* load as a grayscale image? */ int zscale; /* zscale the image */ int zrange; /* use full data range */ float z1, z2; /* user-supplied zrange limits */ int nsample; /* number of zscale sample pts */ } fileLoad, *fileLoadPtr; /* * Application resources and runtime descriptor. * ---------------------------------------------- */ typedef struct { /* Resources. */ Boolean autoscale; /* is XY autoscaling enabled */ Boolean antialias; /* apply antialiasing when dezooming */ Boolean tileFrames; /* tile rather than overlay frames */ Boolean highlightFrames; /* highlight tiled frames */ Boolean invert; /* use inverted colormap */ int def_config; /* default FB config */ int def_nframes; /* default number of frames */ int ncolors; /* number of image pixel colors */ int tileBorder; /* image border when tiling frames */ String borderColor; /* border color for tileFrames */ String gui; /* GUI file name */ String imtoolrc; /* imtoolrc file name */ String memModel; /* FB memory model */ String userCMap1; /* user colormap file */ String userCMap2; /* user colormap file */ String userCMapDir1; /* user colormap directory */ String userCMapDir2; /* user colormap directory */ String antialiasType; /* type of antialiasing */ String printConfig; /* printer configuration file */ String input_fifo; /* client's output, e.g. /dev/imt1o */ String output_fifo; /* client's input, e.g. /dev/imt1i */ String unixaddr; /* format for unix socket path */ String ism_addr; /* format for ISM unix socket path */ String ism_task; /* image support module taskname */ int port; /* port for INET socket */ /* Internal state. */ XtPointer obm; /* object manager */ IoChanPtr cursor_chan; /* cursor mode channel */ IoChan chan[MAX_CLIENTS]; /* client i/o descriptors */ IsmIoChan ism_chan; /* image support module channel */ IsmIoChan ism_client[MAX_ISM]; /* ISM client i/o descriptors */ Widget toplevel; /* dummy toplevel app shell */ Widget gt; /* imagewin gterm-image widget */ Widget cb; /* colorbar gterm-image widget */ XtPointer gm_border; /* border marker for tileFrames */ int tileFramesList; /* frames to be tiled (bitmask) */ int nTileFrames; /* number of frames to be tiled */ int tileRows; /* number of tile rows */ int tileCols; /* number of tile cols */ Boolean tileByRows; /* fill tiles by row vs cols */ Boolean tileTopDown; /* fill tiles by top to bottom */ Boolean tileLabels; /* label frame tiles */ int rop; /* rasterop for mappings */ int display_frame; /* currently displayed frame */ FrameBufPtr df_p; /* display frame descriptor */ FrameBuf frames[MAX_FRAMES]; /* array of frame descriptors */ int fb_configno; /* current config number */ int nframes; /* current number of frame bufs */ int width, height; /* current width, height */ FbConfig fb_config[MAX_FBCONFIG]; /* fb config table */ int *clientPrivate; /* used by imtool client code */ PSImagePtr psim; /* EPS image struct pointer */ PrintCfgPtr pcp; /* printer config pointer */ fileLoadPtr flp; /* load disk file pointer */ fileSavePtr fsp; /* save disk file pointer */ } XimData, *XimDataPtr; /* Functions. */ #ifndef abs #define abs(a) (((a)<0)?(-(a)):(a)) #endif #ifndef min #define min(a,b) ((a)<(b)?(a):(b)) #endif #ifndef max #define max(a,b) ((a)<(b)?(b):(a)) #endif void xim_iisio(); #endif saods9/tcliis/tclconfig/ChangeLog000644 000765 000000 00000106605 12257365700 017414 0ustar00joyewheel000000 000000 2013-07-04 Jan Nijtmans * unix/tcl.m4: Bug [3324676]: AC_PROG_INSTALL incompat, Bug [3606445]: Unneeded -DHAVE_NO_SEH=1 when not building on Windows 2013-07-02 Jan Nijtmans * unix/tcl.m4: Bug [32afa6e256]: dirent64 check is incorrect in tcl.m4 (thanks to Brian Griffin) 2013-06-20 Jan Nijtmans * unix/tcl.m4: Use X11/Xlib.h for checking where X11 can be found in stead of X11/XIntrinsic.h. Suggested by Pietro Cerutti. 2013-06-04 Jan Nijtmans * unix/tcl.m4: Eliminate NO_VIZ macro as current zlib uses HAVE_HIDDEN in stead. One more last-moment fix for FreeBSD by Pietro Cerutti 2013-05-19 Jan Nijtmans * unix/tcl.m4: Fix for FreeBSD, and remove support for old FreeBSD versions. Patch by Pietro Cerutti 2013-03-12 Jan Nijtmans * unix/tcl.m4: Patch by Andrew Shadura, providing better support for * three architectures they have in Debian. 2012-08-07 Stuart Cassoff * tcl.m4: Added "-DNDEBUG" to CFLAGS_DEFAULT when building with --disable-symbols. 2012-08-07 Stuart Cassoff * tcl.m4: [Bug 3555058]: Checkin [30736d63f0] broke CFLAGS_DEFAULT, LDFLAGS_DEFAULT 2012-08-07 Stuart Cassoff * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS 2012-08-07 Jan Nijtmans * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS 2012-07-25 Jan Nijtmans * tcl.m4: My previous commit (2012-04-03) broke the ActiveTcl build for AMD64, because of the quotes in "C://AMD64/cl.exe". It turns out that the AC_TRY_COMPILE macro cannot handle that. 2012-07-22 Stuart Cassoff * tcl.m4: Tidy: consistency, spelling, phrasing, whitespace. No functional change. 2012-04-03 Jan Nijtmans * tcl.m4: [Bug 3511806] Compiler checks too early This change allows to build the cygwin and mingw32 ports of Tcl/Tk extensions to build out-of-the-box using a native or cross-compiler, e.g. on Cygwin, Linux or Darwin. 2011-04-02 Jan Nijtmans * install-sh: Fix issue with library stripping in install-sh (backported from kevin_walzer's patch from Tcl 8.6 trunk) 2011-04-05 Andreas Kupries * tcl.m4: Applied patch by Jeff Lawson. Nicer error message when tclConfig.sh was not found. 2010-12-15 Stuart Cassoff * install-sh: Upgrade to newer install-sh and use it. * tcl.m4: 2010-12-14 Stuart Cassoff * tcl.m4: Better building on OpenBSD. 2010-12-14 Jan Nijtmans * tcl.m4: when using gcc, don't try to determine Win64 SDK 2010-12-12 Jan Nijtmans * tcl.m4: Determine correctly a cross-compiler-windres 2010-11-23 Jan Nijtmans * tcl.m4: add some cross-compile support, borrowed from Tcl 8.6 2010-09-16 Jeff Hobbs * tcl.m4: correct HP-UX LDFLAGS (only used when building big shell) 2010-09-14 Jeff Hobbs * tcl.m4: add extra if check for .manifest file generation Add notice about package name and version being built. 2010-09-09 Jan Nijtmans * tcl.m4: [FREQ #3058486] TEA_LOAD_CONFIG doesn't set all BUILD_ vars Slightly related: defining BUILD_$1 on all platforms - not only win - allows the -fvisibility feature to be used in extensions as well, at least if you compile against tcl >= 8.5. 2010-08-26 Jeff Hobbs * tcl.m4: ensure safe quoting for autoheader usage 2010-08-19 Jeff Hobbs * tcl.m4: add TEA_ADD_CLEANFILES macro to make adding cleanfiles easier, and add *.exp to CLEANFILES Windows default. (TEA_MAKE_LIB): Enhanced to check for MSVC that requires manifests and auto-embed it into proj DLL via MAKE_SHARED_LIB. Also define VC_MANIFEST_EMBED_DLL and VC_MANIFEST_EMBED_EXE that do the same magic in case it is needed for extended TEA projects. 2010-08-16 Jeff Hobbs *** Bump to TEA_VERSION 3.9 *** If upgrading from TEA_VERSION 3.8, copy over tcl.m4, change TEA_INIT to use 3.9 and reconfigure (ac-2.59+). BUILD_${PACKAGE_NAME} will be auto-defined on Windows for correct setting of TCL_STORAGE_CLASS. TEA_LOAD_CONFIG users should remove the SHLIB_LD_LIBS setting done in configure.in (LIBS will be automagically populated by TEA_LOAD_CONFIG). TEA_EXPORT_CONFIG has been added for ${pkg}Config.sh creators SHLIB_LD_FLAGS was deprecated a while ago, remove it if it is still in your Makefile.in. * tcl.m4: add /usr/lib64 to set of auto-search dirs. [Bug 1230554] Auto-define BUILD_$PACKAGE_NAME so users don't need to. This needs to correspond with $pkg.h define magic for TCL_STORAGE_CLASS. Auto-define CLEANFILES. Users can expand it. (SHLIB_LD_LIBS): define to '${LIBS}' default and change it only if necessary. Platforms not using this may simply not work or have very funky linkers. (TEA_LOAD_CONFIG): When loading config for another extension, auto-add stub libraries found with TEA_ADD_LIBS. Eases configure.in for modules like itk and img::*. (TEA_EXPORT_CONFIG): Add standardized function for exporting a ${pkg}Config.sh. See use by img::* and itcl. 2010-08-12 Jeff Hobbs *** Bump to TEA_VERSION 3.8 *** If upgrading from TEA_VERSION 3.7, copy over tcl.m4, change TEA_INIT to use 3.8 and reconfigure (ac-2.59+). No other changes should be necessary. * tcl.m4: remove more vestigial bits from removed platforms. Add back SCO_SV-3.2*. Remove use of DL_LIBS and DL_OBJS and related baggage - these are only needed by the core to support 'load'. Allow for macosx in TEA_ADD_SOURCES. Correct check for found_xincludes=no in TEA_PATH_UNIX_X. 2010-08-11 Jeff Hobbs * tcl.m4: remove the following old platform configurations: UNIX_SV*|UnixWare-5*, SunOS-4.*, SINIX*5.4*, SCO_SV-3.2*, OSF1-1.*, NEXTSTEP-*, NetBSD-1.*|FreeBSD-[[1-2]].*, MP-RAS-*, IRIX-5.*, HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*, dgux*, BSD/OS-2.1*|BSD/OS-3* (AIX): drop AIX-pre4 support and use of ldAix, use -bexpall/-brtl 2010-07-05 Jan Nijtmans * tcl.m4: [Patch #1055668] removal of exported internals from tclInt.h (EXTERN macro) 2010-04-14 Jan Nijtmans * tcl.m4 - Backport a lot of quoting fixes from tcl8.6/unix/tcl.m4 - Fix determination of CYGPATH for CYGWIN With those fixes, itcl and tdbc compile fine with CYGWIN 2010-04-06 Jan Nijtmans * install-sh [Bug 2982540] configure and install* script files should always have LF 2010-02-19 Stuart Cassoff * tcl.m4: Correct compiler/linker flags for threaded builds on OpenBSD. 2010-01-19 Jan Nijtmans * tcl.m4: Detect CYGWIN variant: win32 or unix 2010-01-03 Donal K. Fellows * unix/tcl.m4 (TEA_CONFIG_CFLAGS): [Tcl Bug 1636685]: Use the configuration for modern FreeBSD suggested by the FreeBSD porter. 2009-10-22 Jan Nijtmans * tcl.m4: [Tcl Patch #2883533] tcl.m4 support for Haiku OS 2009-04-27 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): harden the check to add _r to CC on AIX with threads. 2009-04-10 Daniel Steffen * tcl.m4 (Darwin): check for 64-bit TkAqua. 2009-03-26 Jan Nijtmans * tclconfig/tcl.m4: Adapt LDFLAGS and LD_SEARCH_FLAGS together with SHLIB_LD definition to unbreak building on HPUX. 2009-03-20 Andreas Kupries * tclconfig/tcl.m4: Changed SHLIB_LD definition to unbreak building on HPUX. 2009-03-16 Joe English * tcl.m4(TEA_PUBLIC_TK_HEADERS): Look at ${TK_INCLUDE_SPEC} (found in tkConfig.sh) when trying to guess where tk.h might be [Patch 1960628]. 2009-03-11 Joe English * tcl.m4: Allow ${SHLIB_SUFFIX} to be overridden at configure-time [Patch 1960628]. Also fix some comment typos, and an uninitialized variable bug-waiting-to-happen. 2008-12-21 Jan Nijtmans * tcl.m4: [Bug 2073255] Tcl_GetString(NULL) doesn't crash on HP-UX (this bug report was for Tcl, but holds for TEA as well.) 2008-12-20 Daniel Steffen * tcl.m4: sync with tdbc tcl.m4 changes (SunOS-5.11): Sun cc SHLIB_LD: use LDFLAGS_DEFAULT instead of LDFLAGS 2008-12-02 Jeff Hobbs *** Bump to TEA_VERSION 3.7 *** * tcl.m4: in private header check, check for Port.h instead of Int.h to ensure all private headers are available. 2008-11-04 Daniel Steffen * tcl.m4 (Darwin): sync TEA_PRIVATE_TK_HEADERS handling of Tk.framework PrivateHeaders with TEA_PRIVATE_TCL_HEADERS. 2008-11-04 Jeff Hobbs * tcl.m4 (TEA_PATH_TCLCONFIG, TEA_PATH_TKCONFIG): exit with error when tclConfig.sh cannot be found. [Bug #1997760] (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): allow for finding the headers installed in the public areas, e.g. a result of make install-private-headers. [Bug #1631922] 2008-08-12 Daniel Steffen * tcl.m4 (Darwin): link shlib with current and compatiblity version flags; look for libX11.dylib when searching for X11 libraries. 2008-06-12 Daniel Steffen * tcl.m4 (SunOS-5.11): fix 64bit amd64 support with gcc & Sun cc. 2008-03-27 Daniel Steffen * tcl.m4 (SunOS-5.1x): fix 64bit support for Sun cc. [Bug 1921166] 2008-02-01 Donal K. Fellows * tcl.m4 (TEA_CONFIG_CFLAGS): Updated to work at least in part with more modern VC versions. Currently just made the linker flags more flexible; more work may be needed. 2007-10-26 Daniel Steffen * tcl.m4 (Darwin): add support for 64-bit X11. 2007-10-23 Jeff Hobbs *** Tagged tea-3-branch to start TEA 4 development on HEAD *** 2007-09-17 Joe English * tcl.m4: use '${CC} -shared' instead of 'ld -Bshareable' to build shared libraries on current NetBSDs [Bug 1749251]. 2007-09-15 Daniel Steffen * tcl.m4: replace all direct references to compiler by ${CC} to enable CC overriding at configure & make time. (SunOS-5.1x): replace direct use of '/usr/ccs/bin/ld' in SHLIB_LD by 'cc' compiler driver. 2007-08-08 Jeff Hobbs * tcl.m4: check Ttk dir for Tk private headers (8.5). Add some comments to other bits. 2007-06-25 Jeff Hobbs * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): move where / is added. 2007-06-13 Jeff Hobbs * tcl.m4: fix --with-tkinclude alignment. [Bug 1506111] 2007-06-06 Daniel Steffen * tcl.m4 (Darwin): fix 64bit arch removal in fat 32&64bit builds. 2007-05-18 Donal K. Fellows * tcl.m4: Added quoting so that paths with spaces cause fewer problems. 2007-03-07 Daniel Steffen * tcl.m4 (Darwin): s/CFLAGS/CPPFLAGS/ in -mmacosx-version-min check. 2007-02-15 Jeff Hobbs * tcl.m4: correct private header check to search in generic subdir 2007-02-09 Jeff Hobbs *** Bump to TEA_VERSION 3.6 *** * tcl.m4: correct -d to -f (TEA_CONFIG_CFLAGS): SHLIB_SUFFIX is .so on HP ia64 [Bug 1615058] 2007-02-08 Jeff Hobbs * tcl.m4 (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): check that the dirs actually have private headers. [Bug 1631922] 2007-02-04 Daniel Steffen * tcl.m4: add caching to -pipe check. 2007-01-25 Daniel Steffen * tcl.m4: integrate CPPFLAGS into CFLAGS as late as possible and move (rather than duplicate) -isysroot flags from CFLAGS to CPPFLAGS to avoid errors about multiple -isysroot flags from some older gcc builds. 2006-01-19 Daniel Steffen * tcl.m4: ensure CPPFLAGS env var is used when set. [Bug 1586861] (Darwin): add -isysroot and -mmacosx-version-min flags to CPPFLAGS when present in CFLAGS to avoid discrepancies between what headers configure sees during preprocessing tests and compiling tests. 2006-12-19 Daniel Steffen * tcl.m4 (Darwin): --enable-64bit: verify linking with 64bit -arch flag succeeds before enabling 64bit build. 2006-12-16 Daniel Steffen * tcl.m4 (Linux): fix previous change to use makefile variable LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile are picked up. 2006-11-26 Daniel Steffen * tcl.m4 (Linux): --enable-64bit support. [Patch 1597389], [Bug 1230558] 2006-08-18 Daniel Steffen * tcl.m4 (Darwin): add support for --enable-64bit on x86_64, for universal builds including x86_64 and for use of -mmacosx-version-min instead of MACOSX_DEPLOYMENT_TARGET. For Tk extensions, remove 64-bit arch flags from CFLAGS like in the Tk configure, as neither TkAqua nor TkX11 can be built for 64-bit at present. 2006-03-28 Jeff Hobbs * tcl.m4: []-quote AC_DEFUN functions. (TEA_PATH_TKCONFIG): Fixed Windows-specific check for tkConfig.sh. (TEA_MAKE_LIB): Prepend 'lib' for Windows-gcc configs. 2006-03-07 Joe English * tcl.m4: Set SHLIB_LD_FLAGS='${LIBS}' on NetBSD, as per the other *BSD variants [Bug 1334613]. 2006-01-25 Jeff Hobbs *** Bump to TEA version 3.5 *** * tcl.m4: keep LD_SEARCH_FLAGS and CC_SEARCH_FLAGS synchronous with core tcl.m4 meaning. 2006-01-24 Daniel Steffen * tcl.m4 (Darwin): use makefile variable LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile are picked up. [Bug 1403343] 2006-01-23 Jeff Hobbs * tcl.m4: add C:/Tcl/lib and C:/Progra~1/Tcl/lib dirs to check for *Config.sh on Windows. [Bug 1407544] 2006-01-23 Daniel Steffen * tcl.m4 (Darwin): for Tk extensions, remove -arch ppc64 from CFLAGS like in the Tk configure, as neither TkAqua nor TkX11 can be built for 64bit at present (no 64bit GUI libraries). 2006-01-22 Jeff Hobbs * tcl.m4: restore system=windows on Windows. Remove error if 'ar' isn't found (it may not be on Windows). Do not add -lxnet or define _XOPEN_SOURCE on HP-UX by default. Ensure the C|LDFLAGS_DEFAULT gets the fully sub'd value at configure time. 2006-01-10 Daniel Steffen * tcl.m4: add caching, use AC_CACHE_CHECK instead of AC_CACHE_VAL where possible, consistent message quoting, sync relevant tcl/unix/tcl.m4 HEAD changes and gratuitous formatting differences (notably sunc removal of support for for ancient BSD's, IRIX 4, RISCos and Ultrix by kennykb), Darwin improvements to TEA_LOAD_*CONFIG to make linking work against Tcl/Tk frameworks installed in arbitrary location, change TEA_PROG_* search order (look in *_BIN_DIR parents before *_PREFIX). 2006-01-05 Jeff Hobbs * tcl.m4: add dkf's system config refactor 2006-01-04 Jeff Hobbs * tcl.m4: remove extraneous ' that causes bash 3.1 to choke 2005-12-19 Joe English * tcl.m4 (TEA_PATH_TCLCONFIG &c): Look for tclConfig.sh &c in ${libdir}, where they are installed by default [Patch #1377407]. 2005-12-05 Don Porter * tcl.m4 (TEA_PUBLIC_*_HEADERS): Better support for finding header files for uninstalled Tcl and Tk. 2005-12-02 Jeff Hobbs * tcl.m4: correctly bump TEA_VERSION var to 3.4 2005-12-01 Daniel Steffen * unix/tcl.m4 (Darwin): fixed error when MACOSX_DEPLOYMENT_TARGET unset 2005-11-29 Jeff Hobbs * tcl.m4: *** Bump to TEA version 3.4 *** Add Windows x64 build support. Remove TEA_PATH_NOSPACE and handle the problem with ""s where necessary - the macro relied on TCLSH_PROG which didn't work for cross-compiles. 2005-11-27 Daniel Steffen * tcl.m4 (Darwin): add 64bit support, add CFLAGS to SHLIB_LD to support passing -isysroot in env(CFLAGS) to configure (flag can't be present twice, so can't be in both CFLAGS and LDFLAGS during configure), don't use -prebind when deploying on 10.4. (TEA_ENABLE_LANGINFO, TEA_TIME_HANDLER): add/fix caching. 2005-10-30 Daniel Steffen * tcl.m4: fixed two tests for TEA_WINDOWINGSYSTEM = "aqua" that should have been for `uname -s` = "Darwin" instead; added some missing quoting. (TEA_PROG_TCLSH, TEA_PROG_WISH): fix incorrect assumption that install location of tclConfig.sh/tkConfig.sh allows to determine the tclsh/wish install dir via ../bin. Indeed tcl/tk can be configured with arbitrary --libdir and --bindir (independent of prefix) and such a configuration is in fact standard with Darwin framework builds. At least now also check ${TCL_PREFIX}/bin resp. ${TK_PREFIX}/bin for presence of tclsh resp. wish (if tcl/tk have been configured with arbitrary --bindir, this will still not find them, for a general solution *Config.sh would need to contain the values of bindir/libdir/includedir passed to configure). 2005-10-07 Jeff Hobbs * tcl.m4: Fix Solaris 5.10 check and Solaris AMD64 64-bit builds. 2005-10-04 Jeff Hobbs * tcl.m4 (TEA_PRIVATE_TCL_HEADERS): add / to finish sed macro (TEA_ENABLE_THREADS): don't check for pthread_attr_setstacksize func 2005-09-13 Jeff Hobbs * tcl.m4: *** Update to TEA version 3.3 *** define TEA_WINDOWINGSYSTEM in TEA_LOAD_TKCONFIG. Make --enable-threads the default (users can --disable-threads). Improve AIX ${CC}_r fix to better check existing ${CC} value. Do the appropriate evals to not require the *TOP_DIR_NATIVE vars be set for extensions that use private headers. Make aqua check for Xlib compat headers the same as win32. 2005-07-26 Mo DeJong * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH, TEA_PROG_WISH, TEA_BUILD_WISH): Remove TEA_BUILD_TCLSH and TEA_BUILD_WISH because of complaints that it broke the build when only an installed version of Tcl was available at extension build time. The TEA_PROG_TCLSH and TEA_PROG_WISH macros will no longer search the path at all. The build tclsh or installed tclsh shell will now be found by TEA_PROG_TCLSH. 2005-07-24 Mo DeJong * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH, TEA_PROG_WISH, TEA_BUILD_WISH): Split confused search for tclsh on PATH and build and install locations into two macros. TEA_PROG_TCLSH and TEA_PROG_WISH search the system PATH for an installed tclsh or wish. The TEA_BUILD_TCLSH and TEA_BUILD_WISH macros determine the name of tclsh or wish in the Tcl or Tk build directory even if tclsh or wish has not yet been built. [Tcl bug 1160114] [Tcl patch 1244153] 2005-06-23 Daniel Steffen * tcl.m4 (TEA_PRIVATE_TK_HEADERS): add ${TK_SRC_DIR}/macosx to TK_INCLUDES when building against TkAqua. * tcl.m4 (TEA_PATH_X): fixed missing comma in AC_DEFINE * tcl.m4: changes to better support framework builds of Tcl and Tk out of the box: search framework install locations for *Config.sh, and if in presence of a framework build, use the framework's Headers and PrivateHeaders directories for public and private includes. [FR 947735] 2005-06-18 Daniel Steffen * tcl.m4 (Darwin): add -headerpad_max_install_names to LDFLAGS to ensure we can always relocate binaries with install_name_tool. 2005-06-04 Daniel Steffen * tcl.m4 (TEA_PATH_X): for TEA_WINDOWINGSYSTEM == aqua, check if xlib compat headers are available in tkheaders location, otherwise add xlib sourcedir to TK_XINCLUDES. 2005-04-25 Daniel Steffen * tcl.m4: added AC_DEFINE* descriptions (from core tcl.m4) to allow use with autoheader. (Darwin): added configure checks for recently added linker flags -single_module and -search_paths_first to allow building with older tools (and on Mac OS X 10.1), use -single_module in SHLIB_LD. (TEA_MISSING_POSIX_HEADERS): added caching of dirent.h check. (TEA_BUGGY_STRTOD): added caching (sync with core tcl.m4). 2005-03-24 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): use Tcl header defaults for wide int type only on Windows when __int64 is detected as valid. 2005-03-24 Don Porter * README.txt: Update reference to "SC_* macros" to "TEA_* macros". * tcl.m4: Incorporated recent improvements in SC_PATH_TCLCONFIG and SC_PATH_TKCONFIG into TEA_PATH_TCLCONFIG and TEA_PATH_TKCONFIG. Corrected search path in TEA_PATH_CONFIG and added AC_SUBST($1_BIN_DIR) to TEA_LOAD_CONFIG so that packages that load the configuration of another package can know where they loaded it from. 2005-03-18 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): correct 2005-03-17 change to have variant LD_SEARCH_FLAGS for gcc and cc builds. * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): correct x-compile check. 2005-03-17 Jeff Hobbs * tcl.m4: Correct gcc build and HP-UX-11. 2005-02-08 Jeff Hobbs * tcl.m4 (TEA_ADD_LIBS): don't touch lib args starting with -. (TEA_CONFIG_CFLAGS): only define _DLL for CE in shared build. (TEA_MAKE_LIB): set RANLIB* to : on Windows (it's not needed). 2005-02-01 Jeff Hobbs * tcl.m4: redo of 2005-01-27 changes to correctly handle paths with spaces. Win/CE and Win/64 builds now require a prebuilt tclsh to handle conversion to short pathnames. This is done in the new TEA_PATH_NOSPACE macro. For Win/CE|64, make CC just the compiler and move the necessary includes to CFLAGS. (TEA_CONFIG_CFLAGS): Add Solaris 64-bit gcc build support. (TEA_PROG_TCLSH, TEA_PROG_WISH): Allow TCLSH_PROG and WISH_PROG to be set in the env and prevent resetting. (TEA_ADD_LIBS): On Windows using GCC (mingw), convert foo.lib args to -lfoo, for use with mingw. *** POTENTIAL INCOMPATABILITY *** (TEA_CONFIG_CFLAGS): Fix AIX gcc builds to work out-of-box. Bumped TEA to 3.2. 2005-01-27 Jeff Hobbs * tcl.m4: remove cygpath calls to support msys. Update base CE build assumption to "420,ARMV4,ARM,Pocket PC 2003". Make STLIB_LD use $LINKBIN -lib. 2005-01-25 Daniel Steffen * tcl.m4 (Darwin): fixed bug with static build linking to dynamic library in /usr/lib etc instead of linking to static library earlier in search path. [Tcl Bug 956908] Removed obsolete references to Rhapsody. 2004-12-29 Jeff Hobbs * tcl.m4: Updates for VC7 compatibility, fixing CFLAGS and LDFLAGS options, using better default -O levels. [Bug 1092952, 1091967] 2004-12-29 Joe English * tcl.m4: Do not use ${DBGX} suffix when building shared libraries [patch #1081595, TIP #34] 2004-09-07 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): support eVC4 Win/CE builds 2004-08-10 Jeff Hobbs * tcl.m4 (TEA_INIT, TEA_PREFIX): update handling of exec_prefix to work around subdir configures since autoconf only propagates the prefix (not exec_prefix). 2004-07-23 Daniel Steffen * tcl.m4 (TEA_CONFIG_CFLAGS): Darwin section: brought inline with Tcl 8.5 HEAD config, removed core specific & obsolete settings. 2004-07-22 Jeff Hobbs * tcl.m4 (TEA_PATH_X): check in TK_DEFS for MAC_OSX_TK to see if we are compiling on Aqua. Add TEA_WINDOWINGSYSTEM var that reflects 'tk windowingsystem' value. 2004-07-16 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): force a threaded build when building against a threaded core. (CFLAGS_WARNING): Remove -Wconversion for gcc builds (TEA_CONFIG_CFLAGS): Reorder configure.in for better 64-bit build configuration, replacing EXTRA_CFLAGS with CFLAGS. [Bug #874058] Update to latest Tcl 8.5 head config settings. Call this TEA version 3.1. 2004-04-29 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): replace AC_TRY_RUN test with AC_TRY_COMPILE for the long vs. long long check. (kenny) 2004-04-26 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): update against core tcl.m4 to define TCL_WIDE_INT_IS_LONG if 'using long'. 2004-03-19 Jeff Hobbs * tcl.m4: correct Windows builds getting LDFLAGS info in MAKE_LIB 2004-02-11 Jeff Hobbs * tcl.m4: correct TCL_INCLUDES for private headers on Windows - it doesn't need the eval. 2004-02-10 Jeff Hobbs * tcl.m4: don't require TK_INCLUDES and TCL_INCLUDES to have the DIR_NATIVE vars defined when using private headers on unix. Allow $... to TEA_ADD_SOURCES for constructs like TEA_ADD_SOURCES([\$(WIN_OBJECTS)]), that allow the developer to place more in the Makefile.in. tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and CHECK on limits.h 2003-12-10 Jeff Hobbs * Makefile.in: added TEA_ADD_LIBS, TEA_ADD_INCLUDES and * configure: TEA_ADD_CFLAGS to configurable parameters with * configure.in: PKG_* equivs in the Makefile. This allows the * tclconfig/tcl.m4: user to worry less about actual magic VAR names. Corrected Makefile.in to note that TEA_ADD_TCL_SOURCES requires exact file names. 2003-12-09 Jeff Hobbs * tcl.m4: updated OpenBSD support based on [Patch #775246] (cassoff) 2003-12-05 Jeff Hobbs * configure: * configure.in: * Makefile.in (VPATH): readd $(srcdir) to front of VPATH as the first part of VPATH can get chopped off. Change .c.$(OBJEXT) rule to .c.@OBJEXT@ to support more makes. * tclconfig/tcl.m4: add TEA_ADD_STUB_SOURCES to support libstub generation and TEA_ADD_TCL_SOURCES to replace RUNTIME_SOURCES as the way the user specifies library files. 2003-12-03 Jeff Hobbs * configure: Update of TEA spec to (hopefully) simplify * configure.in: some aspects of TEA by making use of more * Makefile.in: AC 2.5x features. Use PACKAGE_NAME (instead * generic/tclsample.c: of PACKAGE) and PACKAGE_VERSION (instead of * tclconfig/tcl.m4: VERSION) arguments to AC_INIT as the TEA package name and version. Provide a version argument to TEA_INIT - starting with 3.0. Drop all use of interior shell substs that older makefiles didn't like. Use PKG_* naming convention instead. Move specification of source files and public headers into configure.in with TEA_ADD_SOURCES and TEA_ADD_HEADERS. These will be munged during ./configure into the right obj file names (no $(SOURCES:.c=.obj) needed). There is almost nothing that should be touched in Makefile.in now for the developer. May want to add a TEA_ADD_TCL_SOURCES for the RUNTIME_SOURCES that remains. Use SHLID_LD_FLAGS (instead of SHLID_LDFLAGS) as Tcl does. Only specify the user requested LDFLAGS/CFLAGS in the Makefile, don't mention the _OPTIMIZE/_DEBUG variants. 2003-10-15 Jeff Hobbs * tcl.m4: create a TEA_SETUP_COMPILER_CC the precedes the TEA_SETUP_COMPILER macro. They are split so the check for CC occurs before any use of CC. Also add AC_PROG_CPP to the compiler checks. 2003-10-06 Jeff Hobbs * tcl.m4: Updated for autoconf 2.5x prereq. Where TCL_WIDE_INT_TYPE would be __int64, defer to the code checks in tcl.h, which also handles TCL_LL_MODIFIER* properly. 2003-04-22 Jeff Hobbs * tcl.m4: correct default setting of ARCH for WinCE builds. Correct \ escaping for CE sed macros. 2003-04-10 Jeff Hobbs * tcl.m4: replace $(syscal) construct with older `syscall` for systems where sh != bash. 2003-04-09 Jeff Hobbs * tcl.m4 (TEA_WITH_CELIB): add --enable-wince and --with-celib options for Windows/CE compilation support. Requires the Microsoft eMbedded SDK and Keuchel's celib emulation layer. 2003-02-18 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): Make sure -lpthread gets passed on the link line when checking for the pthread_attr_setstacksize symbol. (dejong) * tcl.m4 (TEA_SETUP_COMPILER): added default calls to TEA_TCL_EARLY_FLAGS, TEA_TCL_64BIT_FLAGS, TEA_MISSING_POSIX_HEADERS and TEA_BUGGY_STRTOD. 2003-02-14 Jeff Hobbs * tcl.m4: correct HP-UX ia64 --enable-64bit build flags 2003-01-29 Jeff Hobbs * tcl.m4: check $prefix/lib as well as $exec_prefix/lib when looking for tcl|tkConfig.sh, as this check is done before we would set exec_prefix when the user does not define it. 2003-01-21 Mo DeJong * tcl.m4 (TEA_CONFIG_CFLAGS): Fix build support for mingw, the previous implementation would use VC++ when compiling with mingw gcc. Don't pass -fPIC since gcc always compiles pic code under win32. Change some hard coded cases of gcc to ${CC}. 2002-10-15 Jeff Hobbs * tcl.m4: move the CFLAGS definition from TEA_ENABLE_SHARED to TEA_MAKE_LIB because setting too early confuses other AC_* macros. Correct the HP-11 SHLIB_LD_LIBS setting. * tcl.m4: add the CFLAGS definition into TEA_ENABLE_SHARED and make it pick up the env CFLAGS at configure time. 2002-10-09 Jeff Hobbs * tcl.m4: add --enable-symbols=mem option to enable TCL_MEM_DEBUG. Improved AIX 64-bit build support, allow it on AIX-4 as well. Enable 64-bit HP-11 compilation with gcc. Enable 64-bit IRIX64-6 cc build support. Correct FreeBSD thread library linkage. Add OSF1 static build support. Improve SunOS-5 shared build SHLIB_LD macro. 2002-07-20 Zoran Vasiljevic * tcl.m4: Added MINGW32 to list of systems checked for Windows build. Also, fixes some indentation issues with "--with-XXX" options. 2002-04-23 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): added USE_THREAD_ALLOC define to use new threaded allocatory by default on Unix for Tcl 8.4. (TEA_CONFIG_CFLAGS): corrected LD_SEARCH_FLAGS for FreeBSD-3+. 2002-04-22 Jeff Hobbs * tcl.m4 (TEA_SETUP_COMPILER): removed call to AC_CYGWIN so that we can use autoconf 2.5x as well as 2.13. This prevents us from being able to warn against the use of cygwin gcc at configure time, but allows autoconf 2.5x, which is what is shipped with most newer systems. 2002-04-11 Jeff Hobbs * tcl.m4: Enabled COFF as well as CV style debug info with --enable-symbols to allow Dr. Watson users to see function info. More info on debugging levels can be obtained at: http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp 2002-04-03 Jeff Hobbs * tcl.m4: change all SC_* macros to TEA_*. The SC_ was for Scriptics, which is no more. TEA represents a better, independent prefix that won't need changing. Added preliminary mingw gcc support. [Patch #538772] Added TEA_PREFIX macro that handles defaulting the prefix and exec_prefix vars to those used by Tcl if none were specified. Added TEA_SETUP_COMPILER macro that encompasses the AC_PROG_CC check and several other basic AC_PROG checks needed for making executables. This greatly simplifies user's configure.in files. Collapsed AIX-5 defines into AIX-* with extra checks for doing the ELF stuff on AIX-5-ia64. Updated TEA_ENABLE_THREADS to take an optional arg to allow switching it on by default (for Thread) and add sanity checking to warn the user if configuring threads incompatibly. 2002-03-29 Jeff Hobbs * tcl.m4: made sure that SHLIB_LDFLAGS was set to LDFLAGS_DEFAULT. Removed --enable-64bit support for AIX-4 because it wasn't correct. Added -MT or -MD Windows linker switches to properly support symbols-enabled builds. 2002-03-28 Jeff Hobbs * tcl.m4: called AC_MSG_ERROR when SC_TEA_INIT wasn't called first instead of calling it as that inlines it each time in shell code. Changed Windows CFLAGS_OPTIMIZE to use -O2 instead of -Oti. Noted TCL_LIB_VERSIONS_OK=nodots for Windows builds. A few changes to support itcl (and perhaps others): Added support for making your own stub libraries to SC_MAKE_LIB. New SC_PATH_CONFIG and SC_LOAD_CONFIG that take a package name arg and find that ${pkg}Config.sh file. itk uses this for itcl. 2002-03-27 Jeff Hobbs * tcl.m4: made SC_LOAD_TKCONFIG recognize when working with a Tk build dir setup. Added EXTRA_CFLAGS and SHLIB_LD_LIBS substs to SC_CONFIG_CFLAGS. Added XLIBSW onto LIBS when it is defined. Remove TCL_LIBS from MAKE_LIB and correctly use SHLIB_LD_LIBS instead to not rely as much on tclConfig.sh cached info. Add TK_BIN_DIR to paths to find wish in SC_PROG_WISH. These move towards making TEA much more independent of *Config.sh. 2002-03-19 Jeff Hobbs * tcl.m4: corrected forgotten (UN)SHARED_LIB_SUFFIX and SHLIB_SUFFIX defines for Win. (SC_PATH_X): made this only do the check on unix platforms. 2002-03-12 Jeff Hobbs * README.txt: updated to reflect fewer files 2002-03-06 Jeff Hobbs * config.guess (removed): * config.sub (removed): removed unnecessary files * installFile.tcl (removed): * mkinstalldirs (removed): these aren't really necessary for making TEA work * tcl.m4 (SC_PUBLIC_TCL_HEADERS, SC_PUBLIC_TK_HEADERS): don't check /usr(/local)/include for includes on Windows when not using gcc 2002-03-05 Jeff Hobbs * tcl.m4: added warnings on Windows, removed RELPATH define and added TCL_LIBS to MAKE_LIB macro. This import represents 2.0.0, or a new start at attempting to make TEA much easier for C extension developers. **** moved from tclpro project to core tcl project, **** **** renamed to 'tclconfig' **** 2001-03-15 Karl Lehenbauer * installFile.tcl: Added updating of the modification time of the target file whether we overwrote it or decided that it hadn't changed. This was necessary for us to be able to determine whether or not a module install touched the file. 2001-03-08 Karl Lehenbauer * installFile.tcl: Added support for converting new-style (1.1+) Cygnus drive paths to Tcl-style. 2001-01-15 * tcl.m4: Added FreeBSD clause. 2001-01-03 * tcl.m4: Fixed typo in SC_LIB_SPEC where it is checking for exec-prefix. 2000-12-01 * tcl.m4: Concatenated most of the Ajuba acsite.m4 file so we don't need to modify the autoconf installation. * config.guess: * config.sub: * installFile.tcl: Added files from the itcl config subdirectory, which should go away. 2000-7-29 * Fixed the use of TCL_SRC_DIR and TK_SRC_DIR within TCL_PRIVATE_INCLUDES and TK_PRIVATE_INCLUDES to match their recent change from $(srcdir) to $(srcdir)/.. saods9/tcliis/tclconfig/install-sh000755 000765 000000 00000033054 12257365700 017643 0ustar00joyewheel000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2011-04-20.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -S $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -S) stripcmd="$stripprog $2" shift;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: saods9/tcliis/tclconfig/README.txt000644 000765 000000 00000001454 12257365700 017334 0ustar00joyewheel000000 000000 These files comprise the basic building blocks for a Tcl Extension Architecture (TEA) extension. For more information on TEA see: http://www.tcl.tk/doc/tea/ This package is part of the Tcl project at SourceForge, and latest sources should be available there: http://tcl.sourceforge.net/ This package is a freely available open source package. You can do virtually anything you like with it, such as modifying it, redistributing it, and selling it either in whole or in part. CONTENTS ======== The following is a short description of the files you will find in the sample extension. README.txt This file install-sh Program used for copying binaries and script files to their install locations. tcl.m4 Collection of Tcl autoconf macros. Included by a package's aclocal.m4 to define TEA_* macros. saods9/tcliis/tclconfig/tcl.m4000644 000765 000000 00000404642 12562731155 016670 0ustar00joyewheel000000 000000 # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. AC_PREREQ(2.57) dnl TEA extensions pass us the version of TEA they think they dnl are compatible with (must be set in TEA_INIT below) dnl TEA_VERSION="3.9" # Possible values for key variables defined: # # TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem') # TEA_PLATFORM - windows unix # #------------------------------------------------------------------------ # TEA_PATH_TCLCONFIG -- # # Locate the tclConfig.sh file and perform a sanity check on # the Tcl compile flags # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tcl=... # # Defines the following vars: # TCL_BIN_DIR Full path to the directory containing # the tclConfig.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_TCLCONFIG], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), with_tclconfig="${withval}") AC_MSG_CHECKING([for Tcl configuration]) AC_CACHE_VAL(ac_cv_c_tclconfig,[ # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_PATH_TKCONFIG -- # # Locate the tkConfig.sh file # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tk=... # # Defines the following vars: # TK_BIN_DIR Full path to the directory containing # the tkConfig.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_TKCONFIG], [ # # Ok, lets find the tk configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tk # if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), with_tkconfig="${withval}") AC_MSG_CHECKING([for Tk configuration]) AC_CACHE_VAL(ac_cv_c_tkconfig,[ # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ../tk \ `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tk \ `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_TCLCONFIG -- # # Load the tclConfig.sh file # # Arguments: # # Requires the following vars to be set: # TCL_BIN_DIR # # Results: # # Substitutes the following vars: # TCL_BIN_DIR # TCL_SRC_DIR # TCL_LIB_FILE #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TCLCONFIG], [ AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then AC_MSG_RESULT([loading]) . "${TCL_BIN_DIR}/tclConfig.sh" else AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh]) fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" AC_SUBST(TCL_VERSION) AC_SUBST(TCL_PATCH_LEVEL) AC_SUBST(TCL_BIN_DIR) AC_SUBST(TCL_SRC_DIR) AC_SUBST(TCL_LIB_FILE) AC_SUBST(TCL_LIB_FLAG) AC_SUBST(TCL_LIB_SPEC) AC_SUBST(TCL_STUB_LIB_FILE) AC_SUBST(TCL_STUB_LIB_FLAG) AC_SUBST(TCL_STUB_LIB_SPEC) AC_MSG_CHECKING([platform]) hold_cc=$CC; CC="$TCL_CC" AC_TRY_COMPILE(,[ #ifdef _WIN32 #error win32 #endif ], TEA_PLATFORM="unix", TEA_PLATFORM="windows" ) CC=$hold_cc AC_MSG_RESULT($TEA_PLATFORM) # The BUILD_$pkg is to define the correct extern storage class # handling when making this package AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [], [Building extension source?]) # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: AC_SUBST(CLEANFILES) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_DEFS) AC_SUBST(TCL_EXTRA_CFLAGS) AC_SUBST(TCL_LD_FLAGS) AC_SUBST(TCL_SHLIB_LD_LIBS) ]) #------------------------------------------------------------------------ # TEA_LOAD_TKCONFIG -- # # Load the tkConfig.sh file # # Arguments: # # Requires the following vars to be set: # TK_BIN_DIR # # Results: # # Sets the following vars that should be in tkConfig.sh: # TK_BIN_DIR #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TKCONFIG], [ AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh]) if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then AC_MSG_RESULT([loading]) . "${TK_BIN_DIR}/tkConfig.sh" else AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh]) fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" # TEA specific: Ensure windowingsystem is defined if test "${TEA_PLATFORM}" = "unix" ; then case ${TK_DEFS} in *MAC_OSX_TK*) AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?]) TEA_WINDOWINGSYSTEM="aqua" ;; *) TEA_WINDOWINGSYSTEM="x11" ;; esac elif test "${TEA_PLATFORM}" = "windows" ; then TEA_WINDOWINGSYSTEM="win32" fi AC_SUBST(TK_VERSION) AC_SUBST(TK_BIN_DIR) AC_SUBST(TK_SRC_DIR) AC_SUBST(TK_LIB_FILE) AC_SUBST(TK_LIB_FLAG) AC_SUBST(TK_LIB_SPEC) AC_SUBST(TK_STUB_LIB_FILE) AC_SUBST(TK_STUB_LIB_FLAG) AC_SUBST(TK_STUB_LIB_SPEC) # TEA specific: AC_SUBST(TK_LIBS) AC_SUBST(TK_XINCLUDES) ]) #------------------------------------------------------------------------ # TEA_PROG_TCLSH # Determine the fully qualified path name of the tclsh executable # in the Tcl build directory or the tclsh installed in a bin # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # TCLSH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_TCLSH], [ AC_MSG_CHECKING([for tclsh]) if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="${TCL_BIN_DIR}/tclsh" fi else # tclConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}" fi list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TCL_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${TCLSH_PROG}" ; then REAL_TCL_BIN_DIR="`cd "$i"; pwd`/" break fi done TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}" fi AC_MSG_RESULT([${TCLSH_PROG}]) AC_SUBST(TCLSH_PROG) ]) #------------------------------------------------------------------------ # TEA_PROG_WISH # Determine the fully qualified path name of the wish executable # in the Tk build directory or the wish installed in a bin # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # WISH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_WISH], [ AC_MSG_CHECKING([for wish]) if test -f "${TK_BIN_DIR}/Makefile" ; then # tkConfig.sh is in Tk build directory if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="${TK_BIN_DIR}/wish" fi else # tkConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}" fi list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TK_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${WISH_PROG}" ; then REAL_TK_BIN_DIR="`cd "$i"; pwd`/" break fi done WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}" fi AC_MSG_RESULT([${WISH_PROG}]) AC_SUBST(WISH_PROG) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-shared=yes|no # # Defines the following vars: # STATIC_BUILD Used for building import/export libraries # on Windows. # # Sets the following vars: # SHARED_BUILD Value of 1 or 0 #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SHARED], [ AC_MSG_CHECKING([how to build libraries]) AC_ARG_ENABLE(shared, AC_HELP_STRING([--enable-shared], [build and link with shared libraries (default: on)]), [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_shared+set}" = set; then enableval="$enable_shared" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" ; then AC_MSG_RESULT([shared]) SHARED_BUILD=1 else AC_MSG_RESULT([static]) SHARED_BUILD=0 AC_DEFINE(STATIC_BUILD, 1, [Is this a static build?]) fi AC_SUBST(SHARED_BUILD) ]) #------------------------------------------------------------------------ # TEA_ENABLE_THREADS -- # # Specify if thread support should be enabled. If "yes" is specified # as an arg (optional), threads are enabled by default, "no" means # threads are disabled. "yes" is the default. # # TCL_THREADS is checked so that if you are compiling an extension # against a threaded core, your extension must be compiled threaded # as well. # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-threads # # Sets the following vars: # THREADS_LIBS Thread library(s) # # Defines the following vars: # TCL_THREADS # _REENTRANT # _THREAD_SAFE #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_THREADS], [ AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], [build with threads]), [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_threads+set}" = set; then enableval="$enable_threads" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then TCL_THREADS=1 if test "${TEA_PLATFORM}" != "windows" ; then # We are always OK on Windows, so check what this platform wants: # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention AC_DEFINE(USE_THREAD_ALLOC, 1, [Do we want to use the threaded memory allocator?]) AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) if test "`uname -s`" = "SunOS" ; then AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) fi AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?]) AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no) if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] AC_CHECK_LIB(pthread, __pthread_mutex_init, tcl_ok=yes, tcl_ok=no) fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else AC_CHECK_LIB(pthreads, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else AC_CHECK_LIB(c, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "no"; then AC_CHECK_LIB(c_r, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -pthread" else TCL_THREADS=0 AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled]) fi fi fi fi fi else TCL_THREADS=0 fi # Do checking message here to not mess up interleaved configure output AC_MSG_CHECKING([for building with threads]) if test "${TCL_THREADS}" = 1; then AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?]) AC_MSG_RESULT([yes (default)]) else AC_MSG_RESULT([no]) fi # TCL_THREADS sanity checking. See if our request for building with # threads is the same as the way Tcl was built. If not, warn the user. case ${TCL_DEFS} in *THREADS=1*) if test "${TCL_THREADS}" = "0"; then AC_MSG_WARN([ Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads.]) fi ;; *) if test "${TCL_THREADS}" = "1"; then AC_MSG_WARN([ --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core.]) fi ;; esac AC_SUBST(TCL_THREADS) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SYMBOLS -- # # Specify if debugging symbols should be used. # Memory (TCL_MEM_DEBUG) debugging can also be enabled. # # Arguments: # none # # TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives # the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted. # Requires the following vars to be set in the Makefile: # CFLAGS_DEFAULT # LDFLAGS_DEFAULT # # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true # Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false # LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true # Sets to $(LDFLAGS_OPTIMIZE) if false # DBGX Formerly used as debug library extension; # always blank now. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SYMBOLS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_CONFIG_CFLAGS]) AC_MSG_CHECKING([for build with symbols]) AC_ARG_ENABLE(symbols, AC_HELP_STRING([--enable-symbols], [build with debugging symbols (default: off)]), [tcl_ok=$enableval], [tcl_ok=no]) DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" AC_MSG_RESULT([no]) else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then AC_MSG_RESULT([yes (standard debugging)]) fi fi # TEA specific: if test "${TEA_PLATFORM}" != "windows" ; then LDFLAGS_DEFAULT="${LDFLAGS}" fi AC_SUBST(CFLAGS_DEFAULT) AC_SUBST(LDFLAGS_DEFAULT) AC_SUBST(TCL_DBGX) if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?]) fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then AC_MSG_RESULT([enabled symbols mem debugging]) else AC_MSG_RESULT([enabled $tcl_ok debugging]) fi fi ]) #------------------------------------------------------------------------ # TEA_ENABLE_LANGINFO -- # # Allows use of modern nl_langinfo check for better l10n. # This is only relevant for Unix. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_LANGINFO], [ AC_ARG_ENABLE(langinfo, AC_HELP_STRING([--enable-langinfo], [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]), [langinfo_ok=$enableval], [langinfo_ok=yes]) HAVE_LANGINFO=0 if test "$langinfo_ok" = "yes"; then AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no]) fi AC_MSG_CHECKING([whether to use nl_langinfo]) if test "$langinfo_ok" = "yes"; then AC_CACHE_VAL(tcl_cv_langinfo_h, [ AC_TRY_COMPILE([#include ], [nl_langinfo(CODESET);], [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])]) AC_MSG_RESULT([$tcl_cv_langinfo_h]) if test $tcl_cv_langinfo_h = yes; then AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?]) fi else AC_MSG_RESULT([$langinfo_ok]) fi ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the # "uname" command. # # Arguments: # none # # Results: # Defines the following var: # # system - System/platform/version identification code. #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_SYSTEM], [ AC_CACHE_CHECK([system version], tcl_cv_sys_version, [ # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then AC_MSG_WARN([can't find uname command]) tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi ]) system=$tcl_cv_sys_version ]) #-------------------------------------------------------------------- # TEA_CONFIG_CFLAGS # # Try to determine the proper flags to pass to the compiler # for building shared libraries and other such nonsense. # # Arguments: # none # # Results: # # Defines and substitutes the following vars: # # DL_OBJS, DL_LIBS - removed for TEA, only needed by core. # LDFLAGS - Flags to pass to the compiler when linking object # files into an executable application binary such # as tclsh. # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. Could # be the same as CC_SEARCH_FLAGS if ${CC} is used to link. # CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically # goes at the end of the "ld" commands that build # shared libraries. The value of the symbol defaults to # "${LIBS}" if all of the dependent libraries should # be specified when creating a shared library. If # dependent libraries should not be specified (as on # SunOS 4.x, where they cause the link to fail, or in # general if Tcl and Tk aren't themselves shared # libraries), then this symbol has an empty string # as its value. # SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable # extensions. An empty string means we don't know how # to use shared libraries on this platform. # LIB_SUFFIX - Specifies everything that comes after the "libfoo" # in a static or shared library name, using the $PACKAGE_VERSION variable # to put the version in the right place. This is used # by platforms that need non-standard library names. # Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs # to have a version after the .so, and ${PACKAGE_VERSION}.a # on AIX, since a shared library needs to have # a .a extension whereas shared objects for loadable # extensions have a .so extension. Defaults to # ${PACKAGE_VERSION}${SHLIB_SUFFIX}. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_CFLAGS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # Step 0.a: Enable 64 bit support? AC_MSG_CHECKING([if 64bit support is requested]) AC_ARG_ENABLE(64bit, AC_HELP_STRING([--enable-64bit], [enable 64bit support (default: off)]), [do64bit=$enableval], [do64bit=no]) AC_MSG_RESULT([$do64bit]) # Step 0.b: Enable Solaris 64 bit VIS support? AC_MSG_CHECKING([if 64bit Sparc VIS support is requested]) AC_ARG_ENABLE(64bit-vis, AC_HELP_STRING([--enable-64bit-vis], [enable 64bit Sparc VIS support (default: off)]), [do64bitVIS=$enableval], [do64bitVIS=no]) AC_MSG_RESULT([$do64bitVIS]) # Force 64bit on with VIS AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes]) # Step 0.c: Check if visibility support is available. Do this here so # that platform specific alternatives can be used below if this fails. AC_CACHE_CHECK([if compiler supports visibility "hidden"], tcl_cv_cc_visibility_hidden, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" AC_TRY_LINK([ extern __attribute__((__visibility__("hidden"))) void f(void); void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], [disable rpath support (default: on)]), [doRpath=$enableval], [doRpath=yes]) AC_MSG_RESULT([$doRpath]) # TEA specific: Cross-compiling options for Windows/CE builds? AS_IF([test "${TEA_PLATFORM}" = windows], [ AC_MSG_CHECKING([if Windows/CE build is requested]) AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) # Set the variable "system" to hold the name and version number # for the system. TEA_CONFIG_SYSTEM # Require ranlib early so we can override it in special cases below. AC_REQUIRE([AC_PROG_RANLIB]) # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g AS_IF([test "$GCC" = yes], [ CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" ], [ CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" ]) AC_CHECK_TOOL(AR, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION="1.0"]) case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs # MACHINE is IX86 for LINK, but this is used by the manifest, # which requires x86|amd64|ia64. MACHINE="X86" if test "$do64bit" != "no" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft Platform SDK" fi MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` PATH64="" case "$do64bit" in amd64|x64|yes) MACHINE="AMD64" ; # default to AMD64 64-bit build PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) AC_MSG_WARN([Ensure latest Platform SDK is installed]) do64bit="no" else AC_MSG_RESULT([ Using 64-bit $MACHINE mode]) do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" != "no" ; then AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible]) fi if test "$GCC" = "yes" ; then AC_MSG_ERROR([Windows/CE and GCC builds incompatible]) fi TEA_PATH_CELIB # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \ if ([$]1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \ if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \ if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]]) doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" != "no" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="\"${PATH64}/cl.exe\"" CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" RC="\"${MSSDK}/bin/rc.exe\"" lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" LINKBIN="\"${PATH64}/link.exe\"" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" # Avoid 'unresolved external symbol __security_cookie' # errors, c.f. http://support.microsoft.com/?id=894573 TEA_ADD_LIBS([bufferoverflowU.lib]) elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="\"${CEBINROOT}/cl.exe\"" else CC="\"${CEBINROOT}/cl${ARCH}.exe\"" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" arch=`echo ${ARCH} | awk '{print tolower([$]0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i) done AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version]) AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version]) CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode AC_CHECK_TOOL(RC, windres) CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" AC_CACHE_CHECK(for cross-compile version of gcc, ac_cv_cross, AC_TRY_COMPILE([ #ifdef __WIN32__ #error cross-compiler #endif ], [], ac_cv_cross=yes, ac_cv_cross=no) ) if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # and also # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx # This essentially turns it all on. LDFLAGS_DEBUG="-debug -debugtype:cv" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [ # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'` ;; esac AC_MSG_RESULT([Using $CC for compiling with threads]) ]) LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported with GCC on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" ]) ]) AS_IF([test "`uname -m`" = ia64], [ # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" AS_IF([test "$GCC" = yes], [ CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' ], [ CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' ]) LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ], [ AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared -Wl,-bexpall' ], [ SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" ]) SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"]) ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library AS_IF([test "`uname -m`" = ia64], [ SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi ], [ SHLIB_SUFFIX=".sl" ]) AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) AS_IF([test "$tcl_ok" = yes], [ LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" ]) AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ CFLAGS="$CFLAGS -z" # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" ]) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]) ;; esac ], [ do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" ]) ]) ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [ CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" ], [ case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported by gcc]) ], [ do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" ]) ]) ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) AS_IF([test $do64bit = yes], [ AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -m64" AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_m64 = yes], [ CFLAGS="$CFLAGS -m64" do64bit_ok=yes ]) ]) # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac AS_IF([test "${TCL_THREADS}" = "1"], [ # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" ]) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$[@]" SHLIB_SUFFIX=".so" LDFLAGS="" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS"]) # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1' TCL_LIB_VERSIONS_OK=nodots ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`" CFLAGS="`echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`" AS_IF([test $do64bit = yes], [ case `arch` in ppc) AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag], tcl_cv_cc_arch_ppc64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes, tcl_cv_cc_arch_ppc64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [ CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" do64bit_ok=yes ]);; i386) AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag], tcl_cv_cc_arch_x86_64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch x86_64" AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes, tcl_cv_cc_arch_x86_64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [ CFLAGS="$CFLAGS -arch x86_64" do64bit_ok=yes ]);; *) AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);; esac ], [ # Check for combined 32-bit and 64-bit fat build AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [ fat_32_64=yes]) ]) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [ LDFLAGS="$LDFLAGS -prebind"]) LDFLAGS="$LDFLAGS -headerpad_max_install_names" AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_search_paths_first = yes], [ LDFLAGS="$LDFLAGS -Wl,-search_paths_first" ]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [__private_extern__], [Compiler support for module scope symbols]) tcl_cv_cc_visibility_hidden=yes ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [ AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [ AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" AC_TRY_LINK([#include ], [XrmInitialize();], tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [ AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" AC_TRY_LINK([#include ], [Tk_InitStubs(NULL, "", 0);], tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) # remove 64-bit arch flags from CFLAGS et al. if configuration # does not support 64-bit. AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h [Should OS/390 do the right thing with sockets?]) ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" AS_IF([test "$SHARED_BUILD" = 1], [ SHLIB_LD='ld -shared -expect_unresolved "*"' ], [ SHLIB_LD='ld -non_shared -expect_unresolved "*"' ]) SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [ CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"]) # see pthread_intro(3) for pthread support on osf1, k.furukawa AS_IF([test "${TCL_THREADS}" = 1], [ CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` AS_IF([test "$GCC" = yes], [ LIBS="$LIBS -lpthread -lmach -lexc" ], [ CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ]) ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) AS_IF([test "$GCC" = yes], [ SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" ], [ SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" ]) SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[[0-6]]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ arch=`isainfo` AS_IF([test "$arch" = "sparcv9 sparc"], [ AS_IF([test "$GCC" = yes], [ AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [ AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" ]) ], [ do64bit_ok=yes AS_IF([test "$do64bitVIS" = yes], [ CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS_ARCH="-xarch=v9a" ], [ CFLAGS="$CFLAGS -xarch=v9" LDFLAGS_ARCH="-xarch=v9" ]) # Solaris 64 uses this as well #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" ]) ], [AS_IF([test "$arch" = "amd64 i386"], [ AS_IF([test "$GCC" = yes], [ case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) do64bit_ok=yes CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]);; esac ], [ do64bit_ok=yes case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "$do64bit_ok" = yes], [ AS_IF([test "$arch" = "sparcv9 sparc"], [ # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" ], [AS_IF([test "$arch" = "amd64 i386"], [ # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" ])]) ]) ], [ case $system in SunOS-5.[[1-9]][[0-9]]*) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';; *) SHLIB_LD='/usr/ccs/bin/ld -G -z text';; esac CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_Bexport = yes], [ LDFLAGS="$LDFLAGS -Wl,-Bexport" ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; esac AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [ AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform]) ]) dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. AS_IF([test "$GCC" = yes], [ case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [extern], [No Compiler support for module scope symbols]) ]) AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then AC_CACHE_CHECK(for SEH support in compiler, tcl_cv_seh, AC_TRY_RUN([ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } ], tcl_cv_seh=yes, tcl_cv_seh=no, tcl_cv_seh=no) ) if test "$tcl_cv_seh" = "no" ; then AC_DEFINE(HAVE_NO_SEH, 1, [Defined when mingw does not support SEH]) fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, tcl_cv_eh_disposition, AC_TRY_COMPILE([ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN ],[ EXCEPTION_DISPOSITION x; ], tcl_cv_eh_disposition=yes, tcl_cv_eh_disposition=no) ) if test "$tcl_cv_eh_disposition" = "no" ; then AC_DEFINE(EXCEPTION_DISPOSITION, int, [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. AC_CACHE_CHECK(for winnt.h that ignores VOID define, tcl_cv_winnt_ignore_void, AC_TRY_COMPILE([ #define VOID void #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN ], [ CHAR c; SHORT s; LONG l; ], tcl_cv_winnt_ignore_void=yes, tcl_cv_winnt_ignore_void=no) ) if test "$tcl_cv_winnt_ignore_void" = "yes" ; then AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, [Defined when cygwin/mingw ignores VOID define in winnt.h]) fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. AC_CACHE_CHECK(for cast to union support, tcl_cv_cast_to_union, AC_TRY_COMPILE([], [ union foo { int i; double d; }; union foo f = (union foo) (int) 0; ], tcl_cv_cast_to_union=yes, tcl_cv_cast_to_union=no) ) if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) AC_SUBST(STLIB_LD) AC_SUBST(SHLIB_LD) AC_SUBST(SHLIB_LD_LIBS) AC_SUBST(SHLIB_CFLAGS) AC_SUBST(LD_LIBRARY_PATH_VAR) # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary TEA_TCL_EARLY_FLAGS TEA_TCL_64BIT_FLAGS ]) #-------------------------------------------------------------------- # TEA_SERIAL_PORT # # Determine which interface to use to talk to the serial port. # Note that #include lines must begin in leftmost column for # some compilers to recognize them as preprocessor directives, # and some build environments have stdin not pointing at a # pseudo-terminal (usually /dev/null instead.) # # Arguments: # none # # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY #-------------------------------------------------------------------- AC_DEFUN([TEA_SERIAL_PORT], [ AC_CHECK_HEADERS(sys/modem.h) AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ AC_TRY_RUN([ #include int main() { struct termios t; if (tcgetattr(0, &t) == 0) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include #include int main() { struct termios t; if (tcgetattr(0, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) fi]) case $tcl_cv_api_serial in termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);; termio) AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);; sgtty) AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);; esac ]) #-------------------------------------------------------------------- # TEA_MISSING_POSIX_HEADERS # # Supply substitutes for missing POSIX header files. Special # notes: # - stdlib.h doesn't define strtol, strtoul, or # strtod in some versions of SunOS # - some versions of string.h don't declare procedures such # as strstr # # Arguments: # none # # Results: # # Defines some of the following vars: # NO_DIRENT_H # NO_ERRNO_H # NO_VALUES_H # HAVE_LIMITS_H or NO_LIMITS_H # NO_STDLIB_H # NO_STRING_H # NO_SYS_WAIT_H # NO_DLFCN_H # HAVE_SYS_PARAM_H # # HAVE_STRING_H ? # # tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and # CHECK on limits.h #-------------------------------------------------------------------- AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [ AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [ AC_TRY_LINK([#include #include ], [ #ifndef _POSIX_SOURCE # ifdef __Lynx__ /* * Generate compilation error to make the test fail: Lynx headers * are only valid if really in the POSIX environment. */ missing_procedure(); # endif #endif DIR *d; struct dirent *entryPtr; char *p; d = opendir("foobar"); entryPtr = readdir(d); p = entryPtr->d_name; closedir(d); ], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)]) if test $tcl_cv_dirent_h = no; then AC_DEFINE(NO_DIRENT_H, 1, [Do we have ?]) fi # TEA specific: AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have ?])]) AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have ?])]) AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have ?])]) AC_CHECK_HEADER(limits.h, [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have ?])], [AC_DEFINE(NO_LIMITS_H, 1, [Do we have ?])]) AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0) if test $tcl_ok = 0; then AC_DEFINE(NO_STDLIB_H, 1, [Do we have ?]) fi AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0) AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0) # See also memmove check below for a place where NO_STRING_H can be # set and why. if test $tcl_ok = 0; then AC_DEFINE(NO_STRING_H, 1, [Do we have ?]) fi AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have ?])]) AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have ?])]) # OS/390 lacks sys/param.h (and doesn't need it, by chance). AC_HAVE_HEADERS(sys/param.h) ]) #-------------------------------------------------------------------- # TEA_PATH_X # # Locate the X11 header files and the X11 library archive. Try # the ac_path_x macro first, but if it doesn't find the X stuff # (e.g. because there's no xmkmf program) then check through # a list of possible directories. Under some conditions the # autoconf macro will return an include directory that contains # no include files, so double-check its result just to be safe. # # This should be called after TEA_CONFIG_CFLAGS as setting the # LIBS line can confuse some configure macro magic. # # Arguments: # none # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) #-------------------------------------------------------------------- AC_DEFUN([TEA_PATH_X], [ if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then TEA_PATH_UNIX_X fi ]) AC_DEFUN([TEA_PATH_UNIX_X], [ AC_PATH_X not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then AC_TRY_CPP([#include ], , not_really_there="yes") else if test ! -r $x_includes/X11/Xlib.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then AC_MSG_CHECKING([for X11 header files]) found_xincludes="no" AC_TRY_CPP([#include ], found_xincludes="yes", found_xincludes="no") if test "$found_xincludes" = "no"; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Xlib.h; then AC_MSG_RESULT([$i]) XINCLUDES=" -I$i" found_xincludes="yes" break fi done fi else if test "$x_includes" != ""; then XINCLUDES="-I$x_includes" found_xincludes="yes" fi fi if test "$found_xincludes" = "no"; then AC_MSG_RESULT([couldn't find any!]) fi if test "$no_x" = yes; then AC_MSG_CHECKING([for X11 libraries]) XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" for i in $dirs ; do if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then AC_MSG_RESULT([$i]) XLIBSW="-L$i -lX11" x_libraries="$i" break fi done else if test "$x_libraries" = ""; then XLIBSW=-lX11 else XLIBSW="-L$x_libraries -lX11" fi fi if test "$XLIBSW" = nope ; then AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow) fi if test "$XLIBSW" = nope ; then AC_MSG_RESULT([could not find any! Using -lX11.]) XLIBSW=-lX11 fi # TEA specific: if test x"${XLIBSW}" != x ; then PKG_LIBS="${PKG_LIBS} ${XLIBSW}" fi ]) #-------------------------------------------------------------------- # TEA_BLOCKING_STYLE # # The statements below check for systems where POSIX-style # non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. # On these systems (mostly older ones), use the old BSD-style # FIONBIO approach instead. # # Arguments: # none # # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK #-------------------------------------------------------------------- AC_DEFUN([TEA_BLOCKING_STYLE], [ AC_CHECK_HEADERS(sys/ioctl.h) AC_CHECK_HEADERS(sys/filio.h) TEA_CONFIG_SYSTEM AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) case $system in OSF*) AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) AC_MSG_RESULT([FIONBIO]) ;; *) AC_MSG_RESULT([O_NONBLOCK]) ;; esac ]) #-------------------------------------------------------------------- # TEA_TIME_HANDLER # # Checks how the system deals with time.h, what time structures # are used on the system, and what fields the structures have. # # Arguments: # none # # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR #-------------------------------------------------------------------- AC_DEFUN([TEA_TIME_HANDLER], [ AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE AC_CHECK_FUNCS(gmtime_r localtime_r) AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [ AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_tzadj;], tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)]) if test $tcl_cv_member_tm_tzadj = yes ; then AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?]) fi AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [ AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_gmtoff;], tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)]) if test $tcl_cv_member_tm_gmtoff = yes ; then AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?]) fi # # Its important to include time.h in this check, as some systems # (like convex) have timezone functions, etc. # AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [ AC_TRY_COMPILE([#include ], [extern long timezone; timezone += 1; exit (0);], tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)]) if test $tcl_cv_timezone_long = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) else # # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. # AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [ AC_TRY_COMPILE([#include ], [extern time_t timezone; timezone += 1; exit (0);], tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)]) if test $tcl_cv_timezone_time = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) fi fi ]) #-------------------------------------------------------------------- # TEA_BUGGY_STRTOD # # Under Solaris 2.4, strtod returns the wrong value for the # terminating character under some conditions. Check for this # and if the problem exists use a substitute procedure # "fixstrtod" (provided by Tcl) that corrects the error. # Also, on Compaq's Tru64 Unix 5.0, # strtod(" ") returns 0.0 instead of a failure to convert. # # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) #-------------------------------------------------------------------- AC_DEFUN([TEA_BUGGY_STRTOD], [ AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) if test "$tcl_strtod" = 1; then AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[ AC_TRY_RUN([ extern double strtod(); int main() { char *infString="Inf", *nanString="NaN", *spaceString=" "; char *term; double value; value = strtod(infString, &term); if ((term != infString) && (term[-1] == 0)) { exit(1); } value = strtod(nanString, &term); if ((term != nanString) && (term[-1] == 0)) { exit(1); } value = strtod(spaceString, &term); if (term == (spaceString+1)) { exit(1); } exit(0); }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy, tcl_cv_strtod_buggy=buggy)]) if test "$tcl_cv_strtod_buggy" = buggy; then AC_LIBOBJ([fixstrtod]) USE_COMPAT=1 AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?]) fi fi ]) #-------------------------------------------------------------------- # TEA_TCL_LINK_LIBS # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: # DL_LIBS (not in TEA, only needed in core) # LIBS # MATH_LIBS # # Results: # # Substitutes the following vars: # TCL_LIBS # MATH_LIBS # # Might append to the following vars: # LIBS # # Might define the following vars: # HAVE_NET_ERRNO_H #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_LINK_LIBS], [ #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) #-------------------------------------------------------------------- # Interactive UNIX requires -linet instead of -lsocket, plus it # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) AC_CHECK_HEADER(net/errno.h, [ AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have ?])]) #-------------------------------------------------------------------- # Check for the existence of the -lsocket and -lnsl libraries. # The order here is important, so that they end up in the right # order in the command line generated by make. Here are some # special considerations: # 1. Use "connect" and "accept" to check for -lsocket, and # "gethostbyname" to check for -lnsl. # 2. Use each function name only once: can't redo a check because # autoconf caches the results of the last check and won't redo it. # 3. Use -lnsl and -lsocket only if they supply procedures that # aren't already present in the normal libraries. This is because # IRIX 5.2 has libraries, but they aren't needed and they're # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- tcl_checkBoth=0 AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1) if test "$tcl_checkSocket" = 1; then AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt, LIBS="$LIBS -lsocket", tcl_checkBoth=1)]) fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs]) fi AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname, [LIBS="$LIBS -lnsl"])]) # TEA specific: Don't perform the eval of the libraries here because # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' AC_SUBST(TCL_LIBS) AC_SUBST(MATH_LIBS) ]) #-------------------------------------------------------------------- # TEA_TCL_EARLY_FLAGS # # Check for what flags are needed to be passed so the correct OS # features are available. # # Arguments: # None # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_EARLY_FLAG],[ AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, AC_TRY_COMPILE([[#define ]$1[ 1 ]$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no))) if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then AC_DEFINE($1, 1, [Add the ]$1[ flag when building]) tcl_flags="$tcl_flags $1" fi ]) AC_DEFUN([TEA_TCL_EARLY_FLAGS],[ AC_MSG_CHECKING([for required early compiler flags]) tcl_flags="" TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include ], [char *p = (char *)strtoll; char *q = (char *)strtoull;]) TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include ], [struct stat64 buf; int i = stat64("/", &buf);]) TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include ], [char *p = (char *)open64;]) if test "x${tcl_flags}" = "x" ; then AC_MSG_RESULT([none]) else AC_MSG_RESULT([${tcl_flags}]) fi ]) #-------------------------------------------------------------------- # TEA_TCL_64BIT_FLAGS # # Check for what is defined in the way of 64-bit features. # # Arguments: # None # # Results: # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_64BIT_FLAGS], [ AC_MSG_CHECKING([for 64-bit integer type]) AC_CACHE_VAL(tcl_cv_type_64bit,[ tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], tcl_type_64bit=__int64, tcl_type_64bit="long long") # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... AC_TRY_COMPILE(,[switch (0) { case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; }],tcl_cv_type_64bit=${tcl_type_64bit})]) if test "${tcl_cv_type_64bit}" = none ; then AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?]) AC_MSG_RESULT([using long]) elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* AC_MSG_RESULT([using Tcl header defaults]) else AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}, [What type should be used to define wide integers?]) AC_MSG_RESULT([${tcl_cv_type_64bit}]) # Now check for auxiliary declarations AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ AC_TRY_COMPILE([#include #include ],[struct dirent64 p;], tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in ?]) fi AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include ],[struct stat64 p; ], tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)]) if test "x${tcl_cv_struct_stat64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in ?]) fi AC_CHECK_FUNCS(open64 lseek64) AC_MSG_CHECKING([for off64_t]) AC_CACHE_VAL(tcl_cv_type_off64_t,[ AC_TRY_COMPILE([#include ],[off64_t offset; ], tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)]) dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the dnl functions lseek64 and open64 are defined. if test "x${tcl_cv_type_off64_t}" = "xyes" && \ test "x${ac_cv_func_lseek64}" = "xyes" && \ test "x${ac_cv_func_open64}" = "xyes" ; then AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in ?]) AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi ]) ## ## Here ends the standard Tcl configuration bits and starts the ## TEA specific functions ## #------------------------------------------------------------------------ # TEA_INIT -- # # Init various Tcl Extension Architecture (TEA) variables. # This should be the first called TEA_* macro. # # Arguments: # none # # Results: # # Defines and substs the following vars: # CYGPATH # EXEEXT # Defines only: # TEA_VERSION # TEA_INITED # TEA_PLATFORM (windows or unix) # # "cygpath" is used on windows to generate native path names for include # files. These variables should only be used with the compiler and linker # since they generate native path names. # # EXEEXT # Select the executable extension based on the host type. This # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" AC_MSG_CHECKING([for correct TEA configuration]) if test x"${PACKAGE_NAME}" = x ; then AC_MSG_ERROR([ The PACKAGE_NAME variable must be defined by your TEA configure.in]) fi if test x"$1" = x ; then AC_MSG_ERROR([ TEA version not specified.]) elif test "$1" != "${TEA_VERSION}" ; then AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"]) else AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}]) AC_SUBST(EXEEXT) AC_SUBST(CYGPATH) # This package name must be replaced statically for AC_SUBST to work AC_SUBST(PKG_LIB_FILE) # Substitute STUB_LIB_FILE in case package creates a stub library too. AC_SUBST(PKG_STUB_LIB_FILE) # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) AC_SUBST(PKG_TCL_SOURCES) AC_SUBST(PKG_HEADERS) AC_SUBST(PKG_INCLUDES) AC_SUBST(PKG_LIBS) AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_SOURCES # PKG_OBJECTS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_SOURCES], [ vars="$@" for i in $vars; do case $i in [\$]*) # allow $-var names PKG_SOURCES="$PKG_SOURCES $i" PKG_OBJECTS="$PKG_OBJECTS $i" ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_OBJECTS="$PKG_OBJECTS $j" ;; esac done AC_SUBST(PKG_SOURCES) AC_SUBST(PKG_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_STUB_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_STUB_SOURCES # PKG_STUB_OBJECTS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" done AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_TCL_SOURCES -- # # Specify one or more Tcl source files. These should be platform # independent runtime files. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_TCL_SOURCES #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_TCL_SOURCES], [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i']) fi PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" done AC_SUBST(PKG_TCL_SOURCES) ]) #------------------------------------------------------------------------ # TEA_ADD_HEADERS -- # # Specify one or more source headers. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_HEADERS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_HEADERS], [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find header file '${srcdir}/$i']) fi PKG_HEADERS="$PKG_HEADERS $i" done AC_SUBST(PKG_HEADERS) ]) #------------------------------------------------------------------------ # TEA_ADD_INCLUDES -- # # Specify one or more include dirs. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_INCLUDES], [ vars="$@" for i in $vars; do PKG_INCLUDES="$PKG_INCLUDES $i" done AC_SUBST(PKG_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_ADD_LIBS -- # # Specify one or more libraries. Users should check for # the right platform before adding to their list. For Windows, # libraries provided in "foo.lib" format will be converted to # "-lfoo" when using GCC (mingw). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_LIBS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_LIBS], [ vars="$@" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done AC_SUBST(PKG_LIBS) ]) #------------------------------------------------------------------------ # TEA_ADD_CFLAGS -- # # Specify one or more CFLAGS. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_CLEANFILES -- # # Specify one or more CLEANFILES. # # Arguments: # one or more file names to clean target # # Results: # # Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CLEANFILES], [ CLEANFILES="$CLEANFILES $@" ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: # none # # Results: # # If --prefix or --exec-prefix was not specified, $prefix and # $exec_prefix will be set to the values given to Tcl when it was # configured. #------------------------------------------------------------------------ AC_DEFUN([TEA_PREFIX], [ if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}]) prefix=${TCL_PREFIX} else AC_MSG_NOTICE([--prefix defaulting to /usr/local]) prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}]) exec_prefix=${TCL_EXEC_PREFIX} else AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}]) exec_prefix=$prefix fi fi ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER_CC -- # # Do compiler checks the way we want. This is just a replacement # for AC_PROG_CC in TEA configure.in files to make them cleaner. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. AC_PROG_CC AC_PROG_CPP INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" AC_SUBST(INSTALL) #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- AC_PROG_MAKE_SET #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- AC_CHECK_TOOL(RANLIB, ranlib) #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- AC_OBJEXT AC_EXEEXT ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER -- # # Do compiler checks that use the compiler. This must go after # TEA_SETUP_COMPILER_CC, which does the actual compiler check. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER], [ # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. AC_REQUIRE([TEA_SETUP_COMPILER_CC]) #------------------------------------------------------------------------ # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------ if test -z "$no_pipe" -a -n "$GCC"; then AC_CACHE_CHECK([if the compiler understands -pipe], tcl_cv_cc_pipe, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no) CFLAGS=$hold_cflags]) if test $tcl_cv_cc_pipe = yes; then CFLAGS="$CFLAGS -pipe" fi fi #-------------------------------------------------------------------- # Common compiler flag setup #-------------------------------------------------------------------- AC_C_BIGENDIAN if test "${TEA_PLATFORM}" = "unix" ; then TEA_TCL_LINK_LIBS TEA_MISSING_POSIX_HEADERS # Let the user call this, because if it triggers, they will # need a compat/strtod.c that is correct. Users can also # use Tcl_GetDouble(FromObj) instead. #TEA_BUGGY_STRTOD fi ]) #------------------------------------------------------------------------ # TEA_MAKE_LIB -- # # Generate a line that can be used to build a shared/unshared library # in a platform independent manner. # # Arguments: # none # # Requires: # # Results: # # Defines the following vars: # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library # VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL # VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" AC_EGREP_CPP([manifest needed], [ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif ], [ # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" TEA_ADD_CLEANFILES([*.manifest]) ]) MAKE_STUB_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then MAKE_LIB="${MAKE_SHARED_LIB} " else MAKE_LIB="${MAKE_STATIC_LIB} " fi #-------------------------------------------------------------------- # Shared libraries and static libraries have different names. # Use the double eval to make sure any variables in the suffix is # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) RANLIB=: RANLIB_STUB=: else RANLIB_STUB="${RANLIB}" if test "${SHARED_BUILD}" = "1" ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" fi eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" RANLIB=: else eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" fi # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) AC_SUBST(VC_MANIFEST_EMBED_DLL) AC_SUBST(VC_MANIFEST_EMBED_EXE) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. # # Arguments: # basename The base name of the library without version # numbers, extensions, or "lib" prefixes. # extra_dir Extra directory in which to search for the # library. This location is used first, then # $prefix/$exec-prefix, then some defaults. # # Requires: # TEA_INIT and TEA_PREFIX must be called first. # # Results: # # Defines the following vars: # ${basename}_LIB_NAME The computed library name. # ${basename}_LIB_SPEC The computed linker flags. #------------------------------------------------------------------------ AC_DEFUN([TEA_LIB_SPEC], [ AC_MSG_CHECKING([for $1 library]) # Look in exec-prefix for the library (defined by TEA_PREFIX). tea_lib_name_dir="${exec_prefix}/lib" # Or in a user-specified location. if test x"$2" != x ; then tea_extra_lib_dir=$2 else tea_extra_lib_dir=NONE fi for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break fi done if test "${TEA_PLATFORM}" = "windows"; then $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\" else # Strip off the leading "lib" and trailing ".a" or ".so" tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'` $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}" fi if test "x${$1_LIB_NAME}" = x ; then AC_MSG_ERROR([not found]) else AC_MSG_RESULT([${$1_LIB_SPEC}]) fi ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TCL_HEADERS -- # # Locate the private Tcl include files # # Arguments: # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TCL_TOP_DIR_NATIVE # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [ # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh} AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS]) AC_MSG_CHECKING([for Tcl private include files]) TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}` TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\" # Check to see if tclPort.h isn't already with the public headers # Don't look for tclInt.h because that resides with tcl.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tclh}/tclWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tclh}/tclUnixPort.h"; then result="private headers found with public headers" else TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\" if test "${TEA_PLATFORM}" = "windows"; then TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\" else TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TCL_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -d "${TCL_BIN_DIR}/Headers" -a \ -d "${TCL_BIN_DIR}/PrivateHeaders"; then TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}" else TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TCL_INCLUDES}" else if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}]) fi result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}" fi fi AC_SUBST(TCL_TOP_DIR_NATIVE) AC_SUBST(TCL_INCLUDES) AC_MSG_RESULT([${result}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TCL_HEADERS -- # # Locate the installed public Tcl header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [ AC_MSG_CHECKING([for Tcl public headers]) AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tclh, [ # Use the value from --with-tclinclude, if it was given if test x"${with_tclinclude}" != x ; then if test -f "${with_tclinclude}/tcl.h" ; then ac_cv_c_tclh=${with_tclinclude} else AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h]) fi else list="" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers directory case ${TCL_DEFS} in *TCL_FRAMEWORK*) list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tcl is not installed, # and in that situation, look there before installed locations. if test -f "${TCL_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TCL_INCLUDE_SPEC}" != x ; then d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tcl.h" ; then ac_cv_c_tclh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tclh}" = x ; then AC_MSG_ERROR([tcl.h not found. Please specify its location with --with-tclinclude]) else AC_MSG_RESULT([${ac_cv_c_tclh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TCL_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TK_HEADERS -- # # Locate the private Tk include files # # Arguments: # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [ # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh} AC_REQUIRE([TEA_PUBLIC_TK_HEADERS]) AC_MSG_CHECKING([for Tk private include files]) TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}` TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\" # Check to see if tkPort.h isn't already with the public headers # Don't look for tkInt.h because that resides with tk.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tkh}/tkWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tkh}/tkUnixPort.h"; then result="private headers found with public headers" else TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\" TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\" if test "${TEA_PLATFORM}" = "windows"; then TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\" else TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TK_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}" # Detect and add ttk subdir if test -d "${TK_SRC_DIR}/generic/ttk"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\"" fi if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\"" fi if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\"" fi if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TK_DEFS} in *TK_FRAMEWORK*) if test -d "${TK_BIN_DIR}/Headers" -a \ -d "${TK_BIN_DIR}/PrivateHeaders"; then TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}" else TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TK_INCLUDES}" else if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}]) fi result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}" fi fi AC_SUBST(TK_TOP_DIR_NATIVE) AC_SUBST(TK_XLIB_DIR_NATIVE) AC_SUBST(TK_INCLUDES) AC_MSG_RESULT([${result}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TK_HEADERS -- # # Locate the installed public Tk header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [ AC_MSG_CHECKING([for Tk public headers]) AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files], with_tkinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tkh, [ # Use the value from --with-tkinclude, if it was given if test x"${with_tkinclude}" != x ; then if test -f "${with_tkinclude}/tk.h" ; then ac_cv_c_tkh=${with_tkinclude} else AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h]) fi else list="" if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers directory. case ${TK_DEFS} in *TK_FRAMEWORK*) list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tk is not installed, # and in that situation, look there before installed locations. if test -f "${TK_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tk's --prefix location, # relative to directory of tkConfig.sh, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TK_PREFIX}/include 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TK_INCLUDE_SPEC}" != x ; then d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tk.h" ; then ac_cv_c_tkh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tkh}" = x ; then AC_MSG_ERROR([tk.h not found. Please specify its location with --with-tkinclude]) else AC_MSG_RESULT([${ac_cv_c_tkh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}` TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_INCLUDES) if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then # On Windows and Aqua, we need the X compat headers AC_MSG_CHECKING([for X11 header files]) if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_XINCLUDES) fi AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}]) fi ]) #------------------------------------------------------------------------ # TEA_PATH_CONFIG -- # # Locate the ${1}Config.sh file and perform a sanity check on # the ${1} compile flags. These are used by packages like # [incr Tk] that load *Config.sh files from more than Tcl and Tk. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-$1=... # # Defines the following vars: # $1_BIN_DIR Full path to the directory containing # the $1Config.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_CONFIG], [ # # Ok, lets find the $1 configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-$1 # if test x"${no_$1}" = x ; then # we reset no_$1 in case something fails here no_$1=true AC_ARG_WITH($1, [ --with-$1 directory containing $1 configuration ($1Config.sh)], with_$1config=${withval}) AC_MSG_CHECKING([for $1 configuration]) AC_CACHE_VAL(ac_cv_c_$1config,[ # First check to see if --with-$1 was specified. if test x"${with_$1config}" != x ; then case ${with_$1config} in */$1Config.sh ) if test -f ${with_$1config}; then AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself]) with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'` fi;; esac if test -f "${with_$1config}/$1Config.sh" ; then ac_cv_c_$1config=`(cd ${with_$1config}; pwd)` else AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh]) fi fi # then check for a private $1 installation if test x"${ac_cv_c_$1config}" = x ; then for i in \ ../$1 \ `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../$1 \ `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../../$1 \ `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ${srcdir}/../$1 \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi if test -f "$i/unix/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i/unix; pwd)` break fi done fi # check in a few common install locations if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_$1config}" = x ; then $1_BIN_DIR="# no $1 configs found" AC_MSG_WARN([Cannot find $1 configuration definitions]) exit 0 else no_$1= $1_BIN_DIR=${ac_cv_c_$1config} AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG -- # # Load the $1Config.sh file # # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # # Substitutes the following vars: # $1_SRC_DIR # $1_LIB_FILE # $1_LIB_SPEC #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG], [ AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) if test -f "${$1_BIN_DIR}/$1Config.sh" ; then AC_MSG_RESULT([loading]) . "${$1_BIN_DIR}/$1Config.sh" else AC_MSG_RESULT([file not found]) fi # # If the $1_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable $1_LIB_SPEC will be set to the value # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC # instead of $1_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC} $1_LIBRARY_PATH=${$1_LIBRARY_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) # Allow the caller to prevent this auto-check by specifying any 2nd arg AS_IF([test "x$2" = x], [ # Check both upper and lower-case variants # If a dev wanted non-stubs libs, this function could take an option # to not use _STUB in the paths below AS_IF([test "x${$1_STUB_LIB_SPEC}" = x], [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)], [TEA_LOAD_CONFIG_LIB($1_STUB)]) ]) ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG_LIB -- # # Helper function to load correct library from another extension's # ${PACKAGE}Config.sh. # # Results: # Adds to LIBS the appropriate extension library #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG_LIB], [ AC_MSG_CHECKING([For $1 library for LIBS]) # This simplifies the use of stub libraries by automatically adding # the stub lib to your path. Normally this would add to SHLIB_LD_LIBS, # but this is called before CONFIG_CFLAGS. More importantly, this adds # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD. if test "x${$1_LIB_SPEC}" != "x" ; then if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"]) AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}]) else TEA_ADD_LIBS([${$1_LIB_SPEC}]) AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}]) fi else AC_MSG_RESULT([file not found]) fi ]) #------------------------------------------------------------------------ # TEA_EXPORT_CONFIG -- # # Define the data to insert into the ${PACKAGE}Config.sh file # # Arguments: # # Requires the following vars to be set: # $1 # # Results: # Substitutes the following vars: #------------------------------------------------------------------------ AC_DEFUN([TEA_EXPORT_CONFIG], [ #-------------------------------------------------------------------- # These are for $1Config.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}" else eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" fi $1_BUILD_LIB_SPEC="-L`pwd` ${$1_LIB_FLAG}" $1_LIB_SPEC="-L${pkglibdir} ${$1_LIB_FLAG}" $1_BUILD_STUB_LIB_SPEC="-L`pwd` [$]{$1_STUB_LIB_FLAG}" $1_STUB_LIB_SPEC="-L${pkglibdir} [$]{$1_STUB_LIB_FLAG}" $1_BUILD_STUB_LIB_PATH="`pwd`/[$]{PKG_STUB_LIB_FILE}" $1_STUB_LIB_PATH="${pkglibdir}/[$]{PKG_STUB_LIB_FILE}" AC_SUBST($1_BUILD_LIB_SPEC) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_PATH) AC_SUBST($1_STUB_LIB_PATH) AC_SUBST(MAJOR_VERSION) AC_SUBST(MINOR_VERSION) AC_SUBST(PATCHLEVEL) ]) #------------------------------------------------------------------------ # TEA_PATH_CELIB -- # # Locate Keuchel's celib emulation layer for targeting Win/CE # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-celib=... # # Defines the following vars: # CELIB_DIR Full path to the directory containing # the include and platform lib files #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_CELIB], [ # First, look for one uninstalled. # the alternative search directory is invoked by --with-celib if test x"${no_celib}" = x ; then # we reset no_celib in case something fails here no_celib=true AC_ARG_WITH(celib,[ --with-celib=DIR use Windows/CE support library from DIR], with_celibconfig=${withval}) AC_MSG_CHECKING([for Windows/CE celib directory]) AC_CACHE_VAL(ac_cv_c_celibconfig,[ # First check to see if --with-celibconfig was specified. if test x"${with_celibconfig}" != x ; then if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory]) fi fi # then check for a celib library if test x"${ac_cv_c_celibconfig}" = x ; then for i in \ ../celib-palm-3.0 \ ../celib \ ../../celib-palm-3.0 \ ../../celib \ `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \ ${srcdir}/../celib-palm-3.0 \ ${srcdir}/../celib \ `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \ ; do if test -d "$i/inc" ; then ac_cv_c_celibconfig=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_celibconfig}" = x ; then AC_MSG_ERROR([Cannot find celib support library directory]) else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) # Local Variables: # mode: autoconf # End: saods9/tclcheckdns/aclocal.m4000755 000765 000000 00000000223 12260347267 016522 0ustar00joyewheel000000 000000 # # Include the TEA standard macro set # builtin(include,tclconfig/tcl.m4) # # Add here whatever m4 macros you want to define for your package # saods9/tclcheckdns/checkdns.C000644 000765 000000 00000007214 12705454253 016552 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2015 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include #include #include #include #include #include #include using namespace std; #include #define SZ_LINE 2048 static int debug =0; // alarm signal handler static sigjmp_buf alarmbuf; static void alarmHandler(int dummy) { siglongjmp(alarmbuf, 1); } extern "C" { int Tclcheckdns_Init(void *vinterp); }; static int checkdns(char *name, int delay, int cflag) { int result =0; // get temp name, look for port char tbuf[SZ_LINE]; unsigned int port=80; if (name && *name) { char* ss=NULL; strncpy(tbuf, name, SZ_LINE-1); if ((ss=strchr(tbuf, ':'))) { *ss = '\0'; port = atoi(ss+1); } } else *tbuf = '\0'; // start the alarm, if necessary struct sigaction sigact, osigact; if (delay>0) { if (sigsetjmp(alarmbuf, 1)) { if (debug) cerr << "alarm activated" << endl; result= 1; goto done; } else { sigact.sa_handler = alarmHandler; sigemptyset(&sigact.sa_mask); sigact.sa_flags = 0; sigaction(SIGALRM, &sigact, &osigact); alarm(delay); } } // get name of host we are interested in char host[SZ_LINE]; if (*tbuf) strncpy(host, tbuf, SZ_LINE-1); else { // use current host if (gethostname(host, SZ_LINE) < 0) { result =2; goto done; } else if (debug) cerr << "gethostname: " << host << endl; } // try to get info on this host struct hostent* h; if (!(h=gethostbyname(host))) { result =3; goto done; } else if (debug) cerr << "gethostbyname: " << h->h_name << '(' << port << ')' << endl; // connect, if necessary if (cflag) { unsigned int ip; memcpy(&ip, h->h_addr_list[0], (size_t)h->h_length); ip = ntohl(ip); int fd; if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { result =4; goto done; } struct sockaddr_in sock_in; memset((char *)&sock_in, 0, sizeof(sock_in)); sock_in.sin_family = AF_INET; sock_in.sin_addr.s_addr = htonl(ip); sock_in.sin_port = htons(port); int got = connect(fd, (struct sockaddr *)&sock_in, sizeof(sock_in)); close(fd); if (got < 0) { result =5; goto done; } else if (debug) cerr << "connect succeeded" << endl; } done: if (delay) { alarm(0); sigaction(SIGALRM, &osigact, NULL); } return result; } static int TclcheckdnsCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { if (objc < 3) { Tcl_WrongNumArgs(interp, 1, objv, "host delay [connect]"); return TCL_ERROR; } char* host =NULL; char* ss = Tcl_GetStringFromObj(objv[1], NULL); if (ss && *ss) host = ss; int delay=5; char* tt = Tcl_GetStringFromObj(objv[2], NULL); if (tt && *tt) delay = atoi(tt); int cflag=0; if (objc >= 4) { char* uu = Tcl_GetStringFromObj(objv[3], NULL); if (uu && *uu) cflag = atoi(uu); } ostringstream str; str << checkdns(host, delay, cflag) << ends; Tcl_AppendResult(interp, str.str().c_str(), NULL); return TCL_OK; } int Tclcheckdns_Init(void *vinterp) { Tcl_Interp *interp = (Tcl_Interp *)vinterp; if (Tcl_InitStubs(interp, TCL_PATCH_LEVEL, 0) == NULL) return TCL_ERROR; Tcl_CreateObjCommand(interp, "checkdns", TclcheckdnsCmd, (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL); if (Tcl_PkgProvide(interp, PACKAGE_NAME, PACKAGE_VERSION) != TCL_OK) return TCL_ERROR; return TCL_OK; } saods9/tclcheckdns/configure000755 000765 000000 00001046324 12556465353 016610 0ustar00joyewheel000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for tclcheckdns 1.1. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='tclcheckdns' PACKAGE_TARNAME='tclcheckdns' PACKAGE_VERSION='1.1' PACKAGE_STRING='tclcheckdns 1.1' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS TCLSH_PROG VC_MANIFEST_EMBED_EXE VC_MANIFEST_EMBED_DLL RANLIB_STUB MAKE_STUB_LIB MAKE_STATIC_LIB MAKE_SHARED_LIB MAKE_LIB TCL_DBGX LDFLAGS_DEFAULT CFLAGS_DEFAULT LD_LIBRARY_PATH_VAR SHLIB_CFLAGS SHLIB_LD_LIBS SHLIB_LD STLIB_LD CFLAGS_WARNING CFLAGS_OPTIMIZE CFLAGS_DEBUG RC CELIB_DIR AR SHARED_BUILD TCL_THREADS TCL_INCLUDES PKG_OBJECTS PKG_SOURCES MATH_LIBS EGREP GREP RANLIB SET_MAKE INSTALL CPP ac_ct_CXX CXXFLAGS CXX TCL_SHLIB_LD_LIBS TCL_LD_FLAGS TCL_EXTRA_CFLAGS TCL_DEFS TCL_LIBS CLEANFILES OBJEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC TCL_STUB_LIB_SPEC TCL_STUB_LIB_FLAG TCL_STUB_LIB_FILE TCL_LIB_SPEC TCL_LIB_FLAG TCL_LIB_FILE TCL_SRC_DIR TCL_BIN_DIR TCL_PATCH_LEVEL TCL_VERSION PKG_CFLAGS PKG_LIBS PKG_INCLUDES PKG_HEADERS PKG_TCL_SOURCES PKG_STUB_OBJECTS PKG_STUB_SOURCES PKG_STUB_LIB_FILE PKG_LIB_FILE EXEEXT CYGPATH target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_tcl with_tclinclude enable_threads enable_shared enable_64bit enable_64bit_vis enable_rpath enable_wince with_celib enable_symbols ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures tclcheckdns 1.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/tclcheckdns] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of tclcheckdns 1.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-threads build with threads --enable-shared build and link with shared libraries (default: on) --enable-64bit enable 64bit support (default: off) --enable-64bit-vis enable 64bit Sparc VIS support (default: off) --disable-rpath disable rpath support (default: on) --enable-wince enable Win/CE support (where applicable) --enable-symbols build with debugging symbols (default: off) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-tcl directory containing tcl configuration (tclConfig.sh) --with-tclinclude directory containing the public Tcl header files --with-celib=DIR use Windows/CE support library from DIR Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF tclcheckdns configure 1.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by tclcheckdns $as_me 1.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct TEA configuration" >&5 $as_echo_n "checking for correct TEA configuration... " >&6; } if test x"${PACKAGE_NAME}" = x ; then as_fn_error $? " The PACKAGE_NAME variable must be defined by your TEA configure.in" "$LINENO" 5 fi if test x"3.9" = x ; then as_fn_error $? " TEA version not specified." "$LINENO" 5 elif test "3.9" != "${TEA_VERSION}" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&5 $as_echo "warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (TEA ${TEA_VERSION})" >&5 $as_echo "ok (TEA ${TEA_VERSION})" >&6; } fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) # Extract the first word of "cygpath", so it can be a program name with args. set dummy cygpath; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CYGPATH+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CYGPATH"; then ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CYGPATH="cygpath -w" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" fi fi CYGPATH=$ac_cv_prog_CYGPATH if test -n "$CYGPATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 $as_echo "$CYGPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi { $as_echo "$as_me:${as_lineno-$LINENO}: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&5 $as_echo "$as_me: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&6;} # This package name must be replaced statically for AC_SUBST to work # Substitute STUB_LIB_FILE in case package creates a stub library too. # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... ac_aux_dir= for ac_dir in tclconfig "$srcdir"/tclconfig; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in tclconfig \"$srcdir\"/tclconfig" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true # Check whether --with-tcl was given. if test "${with_tcl+set}" = set; then : withval=$with_tcl; with_tclconfig="${withval}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl configuration" >&5 $as_echo_n "checking for Tcl configuration... " >&6; } if ${ac_cv_c_tclconfig+:} false; then : $as_echo_n "(cached) " >&6 else # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5 $as_echo "$as_me: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&2;} with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else as_fn_error $? "${with_tclconfig} directory doesn't contain tclConfig.sh" "$LINENO" 5 fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../tcl[8-9].[0-9]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../tcl[8-9].[0-9]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi fi if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" as_fn_error $? "Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" "$LINENO" 5 else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: found ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo "found ${TCL_BIN_DIR}/tclConfig.sh" >&6; } fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo_n "checking for existence of ${TCL_BIN_DIR}/tclConfig.sh... " >&6; } if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 $as_echo "loading" >&6; } . "${TCL_BIN_DIR}/tclConfig.sh" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo "could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6; } fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" { $as_echo "$as_me:${as_lineno-$LINENO}: checking platform" >&5 $as_echo_n "checking platform... " >&6; } hold_cc=$CC; CC="$TCL_CC" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifdef _WIN32 #error win32 #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : TEA_PLATFORM="unix" else TEA_PLATFORM="windows" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CC=$hold_cc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEA_PLATFORM" >&5 $as_echo "$TEA_PLATFORM" >&6; } # The BUILD_$pkg is to define the correct extern storage class # handling when making this package cat >>confdefs.h <<_ACEOF #define BUILD_${PACKAGE_NAME} /**/ _ACEOF # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: #-------------------------------------------------------------------- # Load the tkConfig.sh file if necessary (Tk extension) #-------------------------------------------------------------------- #TEA_PATH_TKCONFIG #TEA_LOAD_TKCONFIG #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&5 $as_echo "$as_me: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&6;} prefix=${TCL_PREFIX} else { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to /usr/local" >&5 $as_echo "$as_me: --prefix defaulting to /usr/local" >&6;} prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&5 $as_echo "$as_me: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&6;} exec_prefix=${TCL_EXEC_PREFIX} else { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to ${prefix}" >&5 $as_echo "$as_me: --exec-prefix defaulting to ${prefix}" >&6;} exec_prefix=$prefix fi fi #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC and a few others to create the basic setup # necessary to compile executables. #----------------------------------------------------------------------- # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. #------------------------------------------------------------------------ # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------ if test -z "$no_pipe" -a -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler understands -pipe" >&5 $as_echo_n "checking if the compiler understands -pipe... " >&6; } if ${tcl_cv_cc_pipe+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_cc_pipe=yes else tcl_cv_cc_pipe=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_pipe" >&5 $as_echo "$tcl_cv_cc_pipe" >&6; } if test $tcl_cv_cc_pipe = yes; then CFLAGS="$CFLAGS -pipe" fi fi #-------------------------------------------------------------------- # Common compiler flag setup #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac if test "${TEA_PLATFORM}" = "unix" ; then #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- ac_fn_c_check_func "$LINENO" "sin" "ac_cv_func_sin" if test "x$ac_cv_func_sin" = xyes; then : MATH_LIBS="" else MATH_LIBS="-lm" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lieee" >&5 $as_echo_n "checking for main in -lieee... " >&6; } if ${ac_cv_lib_ieee_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lieee $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ieee_main=yes else ac_cv_lib_ieee_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee_main" >&5 $as_echo "$ac_cv_lib_ieee_main" >&6; } if test "x$ac_cv_lib_ieee_main" = xyes; then : MATH_LIBS="-lieee $MATH_LIBS" fi #-------------------------------------------------------------------- # Interactive UNIX requires -linet instead of -lsocket, plus it # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5 $as_echo_n "checking for main in -linet... " >&6; } if ${ac_cv_lib_inet_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-linet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_inet_main=yes else ac_cv_lib_inet_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5 $as_echo "$ac_cv_lib_inet_main" >&6; } if test "x$ac_cv_lib_inet_main" = xyes; then : LIBS="$LIBS -linet" fi ac_fn_c_check_header_mongrel "$LINENO" "net/errno.h" "ac_cv_header_net_errno_h" "$ac_includes_default" if test "x$ac_cv_header_net_errno_h" = xyes; then : $as_echo "#define HAVE_NET_ERRNO_H 1" >>confdefs.h fi #-------------------------------------------------------------------- # Check for the existence of the -lsocket and -lnsl libraries. # The order here is important, so that they end up in the right # order in the command line generated by make. Here are some # special considerations: # 1. Use "connect" and "accept" to check for -lsocket, and # "gethostbyname" to check for -lnsl. # 2. Use each function name only once: can't redo a check because # autoconf caches the results of the last check and won't redo it. # 3. Use -lnsl and -lsocket only if they supply procedures that # aren't already present in the normal libraries. This is because # IRIX 5.2 has libraries, but they aren't needed and they're # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- tcl_checkBoth=0 ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : tcl_checkSocket=0 else tcl_checkSocket=1 fi if test "$tcl_checkSocket" = 1; then ac_fn_c_check_func "$LINENO" "setsockopt" "ac_cv_func_setsockopt" if test "x$ac_cv_func_setsockopt" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 $as_echo_n "checking for setsockopt in -lsocket... " >&6; } if ${ac_cv_lib_socket_setsockopt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char setsockopt (); int main () { return setsockopt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_setsockopt=yes else ac_cv_lib_socket_setsockopt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_setsockopt" >&5 $as_echo "$ac_cv_lib_socket_setsockopt" >&6; } if test "x$ac_cv_lib_socket_setsockopt" = xyes; then : LIBS="$LIBS -lsocket" else tcl_checkBoth=1 fi fi fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" ac_fn_c_check_func "$LINENO" "accept" "ac_cv_func_accept" if test "x$ac_cv_func_accept" = xyes; then : tcl_checkNsl=0 else LIBS=$tk_oldLibs fi fi ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : LIBS="$LIBS -lnsl" fi fi # TEA specific: Don't perform the eval of the libraries here because # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking dirent.h" >&5 $as_echo_n "checking dirent.h... " >&6; } if ${tcl_cv_dirent_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #ifndef _POSIX_SOURCE # ifdef __Lynx__ /* * Generate compilation error to make the test fail: Lynx headers * are only valid if really in the POSIX environment. */ missing_procedure(); # endif #endif DIR *d; struct dirent *entryPtr; char *p; d = opendir("foobar"); entryPtr = readdir(d); p = entryPtr->d_name; closedir(d); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_dirent_h=yes else tcl_cv_dirent_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_dirent_h" >&5 $as_echo "$tcl_cv_dirent_h" >&6; } if test $tcl_cv_dirent_h = no; then $as_echo "#define NO_DIRENT_H 1" >>confdefs.h fi # TEA specific: ac_fn_c_check_header_mongrel "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" if test "x$ac_cv_header_errno_h" = xyes; then : else $as_echo "#define NO_ERRNO_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default" if test "x$ac_cv_header_float_h" = xyes; then : else $as_echo "#define NO_FLOAT_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default" if test "x$ac_cv_header_values_h" = xyes; then : else $as_echo "#define NO_VALUES_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" if test "x$ac_cv_header_limits_h" = xyes; then : $as_echo "#define HAVE_LIMITS_H 1" >>confdefs.h else $as_echo "#define NO_LIMITS_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : tcl_ok=1 else tcl_ok=0 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strtol" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strtoul" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strtod" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* if test $tcl_ok = 0; then $as_echo "#define NO_STDLIB_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes; then : tcl_ok=1 else tcl_ok=0 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strstr" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strerror" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* # See also memmove check below for a place where NO_STRING_H can be # set and why. if test $tcl_ok = 0; then $as_echo "#define NO_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" if test "x$ac_cv_header_sys_wait_h" = xyes; then : else $as_echo "#define NO_SYS_WAIT_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" if test "x$ac_cv_header_dlfcn_h" = xyes; then : else $as_echo "#define NO_DLFCN_H 1" >>confdefs.h fi # OS/390 lacks sys/param.h (and doesn't need it, by chance). for ac_header in sys/param.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" if test "x$ac_cv_header_sys_param_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_PARAM_H 1 _ACEOF fi done # Let the user call this, because if it triggers, they will # need a compat/strtod.c that is correct. Users can also # use Tcl_GetDouble(FromObj) instead. #TEA_BUGGY_STRTOD fi #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- vars="checkdns.C" for i in $vars; do case $i in \$*) # allow $-var names PKG_SOURCES="$PKG_SOURCES $i" PKG_OBJECTS="$PKG_OBJECTS $i" ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then as_fn_error $? "could not find source file '$i'" "$LINENO" 5 fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}" fi PKG_OBJECTS="$PKG_OBJECTS $j" ;; esac done vars="" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then as_fn_error $? "could not find header file '${srcdir}/$i'" "$LINENO" 5 fi PKG_HEADERS="$PKG_HEADERS $i" done vars="" for i in $vars; do PKG_INCLUDES="$PKG_INCLUDES $i" done vars="-lstdc++" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done PKG_CFLAGS="$PKG_CFLAGS " vars="" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then as_fn_error $? "could not find stub source file '$i'" "$LINENO" 5 fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}" fi PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" done vars="" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then as_fn_error $? "could not find tcl source file '${srcdir}/$i'" "$LINENO" 5 fi PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" done #-------------------------------------------------------------------- # __CHANGE__ # # You can add more files to clean if your extension creates any extra # files by extending CLEANFILES. # Add pkgIndex.tcl if it is generated in the Makefile instead of ./configure # and change Makefile.in to move it from CONFIG_CLEAN_FILES to BINARIES var. # # A few miscellaneous platform-specific items: # TEA_ADD_* any platform specific compiler/build info here. #-------------------------------------------------------------------- #CLEANFILES="$CLEANFILES pkgIndex.tcl" if test "${TEA_PLATFORM}" = "windows" ; then # Ensure no empty if clauses : #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) else # Ensure no empty else clauses : #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) fi #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl public headers" >&5 $as_echo_n "checking for Tcl public headers... " >&6; } # Check whether --with-tclinclude was given. if test "${with_tclinclude+set}" = set; then : withval=$with_tclinclude; with_tclinclude=${withval} fi if ${ac_cv_c_tclh+:} false; then : $as_echo_n "(cached) " >&6 else # Use the value from --with-tclinclude, if it was given if test x"${with_tclinclude}" != x ; then if test -f "${with_tclinclude}/tcl.h" ; then ac_cv_c_tclh=${with_tclinclude} else as_fn_error $? "${with_tclinclude} directory does not contain tcl.h" "$LINENO" 5 fi else list="" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers directory case ${TCL_DEFS} in *TCL_FRAMEWORK*) list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tcl is not installed, # and in that situation, look there before installed locations. if test -f "${TCL_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TCL_INCLUDE_SPEC}" != x ; then d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tcl.h" ; then ac_cv_c_tclh=$i break fi done fi fi # Print a message based on how we determined the include path if test x"${ac_cv_c_tclh}" = x ; then as_fn_error $? "tcl.h not found. Please specify its location with --with-tclinclude" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_tclh}" >&5 $as_echo "${ac_cv_c_tclh}" >&6; } fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" #TEA_PRIVATE_TCL_HEADERS #TEA_PUBLIC_TK_HEADERS #TEA_PRIVATE_TK_HEADERS #TEA_PATH_X #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. # This auto-enables if Tcl was compiled threaded. #-------------------------------------------------------------------- # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; tcl_ok=$enableval else tcl_ok=yes fi if test "${enable_threads+set}" = set; then enableval="$enable_threads" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then TCL_THREADS=1 if test "${TEA_PLATFORM}" != "windows" ; then # We are always OK on Windows, so check what this platform wants: # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention $as_echo "#define USE_THREAD_ALLOC 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h if test "`uname -s`" = "SunOS" ; then $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h fi $as_echo "#define _THREAD_SAFE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthread" >&5 $as_echo_n "checking for pthread_mutex_init in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_mutex_init=yes else ac_cv_lib_pthread_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthread_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_pthread_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_mutex_init in -lpthread" >&5 $as_echo_n "checking for __pthread_mutex_init in -lpthread... " >&6; } if ${ac_cv_lib_pthread___pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char __pthread_mutex_init (); int main () { return __pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread___pthread_mutex_init=yes else ac_cv_lib_pthread___pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthread___pthread_mutex_init" >&6; } if test "x$ac_cv_lib_pthread___pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthreads" >&5 $as_echo_n "checking for pthread_mutex_init in -lpthreads... " >&6; } if ${ac_cv_lib_pthreads_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthreads $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthreads_pthread_mutex_init=yes else ac_cv_lib_pthreads_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthreads_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_pthreads_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc" >&5 $as_echo_n "checking for pthread_mutex_init in -lc... " >&6; } if ${ac_cv_lib_c_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_pthread_mutex_init=yes else ac_cv_lib_c_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_c_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_c_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc_r" >&5 $as_echo_n "checking for pthread_mutex_init in -lc_r... " >&6; } if ${ac_cv_lib_c_r_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_r_pthread_mutex_init=yes else ac_cv_lib_c_r_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_c_r_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_c_r_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -pthread" else TCL_THREADS=0 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&5 $as_echo "$as_me: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&2;} fi fi fi fi fi else TCL_THREADS=0 fi # Do checking message here to not mess up interleaved configure output { $as_echo "$as_me:${as_lineno-$LINENO}: checking for building with threads" >&5 $as_echo_n "checking for building with threads... " >&6; } if test "${TCL_THREADS}" = 1; then $as_echo "#define TCL_THREADS 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (default)" >&5 $as_echo "yes (default)" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # TCL_THREADS sanity checking. See if our request for building with # threads is the same as the way Tcl was built. If not, warn the user. case ${TCL_DEFS} in *THREADS=1*) if test "${TCL_THREADS}" = "0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads." >&5 $as_echo "$as_me: WARNING: Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads." >&2;} fi ;; *) if test "${TCL_THREADS}" = "1"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core." >&5 $as_echo "$as_me: WARNING: --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core." >&2;} fi ;; esac #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to build libraries" >&5 $as_echo_n "checking how to build libraries... " >&6; } # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; tcl_ok=$enableval else tcl_ok=yes fi if test "${enable_shared+set}" = set; then enableval="$enable_shared" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: shared" >&5 $as_echo "shared" >&6; } SHARED_BUILD=1 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 $as_echo "static" >&6; } SHARED_BUILD=0 $as_echo "#define STATIC_BUILD 1" >>confdefs.h fi #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Step 0.a: Enable 64 bit support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit support is requested" >&5 $as_echo_n "checking if 64bit support is requested... " >&6; } # Check whether --enable-64bit was given. if test "${enable_64bit+set}" = set; then : enableval=$enable_64bit; do64bit=$enableval else do64bit=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bit" >&5 $as_echo "$do64bit" >&6; } # Step 0.b: Enable Solaris 64 bit VIS support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit Sparc VIS support is requested" >&5 $as_echo_n "checking if 64bit Sparc VIS support is requested... " >&6; } # Check whether --enable-64bit-vis was given. if test "${enable_64bit_vis+set}" = set; then : enableval=$enable_64bit_vis; do64bitVIS=$enableval else do64bitVIS=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bitVIS" >&5 $as_echo "$do64bitVIS" >&6; } # Force 64bit on with VIS if test "$do64bitVIS" = "yes"; then : do64bit=yes fi # Step 0.c: Check if visibility support is available. Do this here so # that platform specific alternatives can be used below if this fails. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports visibility \"hidden\"" >&5 $as_echo_n "checking if compiler supports visibility \"hidden\"... " >&6; } if ${tcl_cv_cc_visibility_hidden+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) void f(void); void f(void) {} int main () { f(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_visibility_hidden=yes else tcl_cv_cc_visibility_hidden=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_visibility_hidden" >&5 $as_echo "$tcl_cv_cc_visibility_hidden" >&6; } if test $tcl_cv_cc_visibility_hidden = yes; then : $as_echo "#define MODULE_SCOPE extern __attribute__((__visibility__(\"hidden\")))" >>confdefs.h $as_echo "#define HAVE_HIDDEN 1" >>confdefs.h fi # Step 0.d: Disable -rpath support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if rpath support is requested" >&5 $as_echo_n "checking if rpath support is requested... " >&6; } # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; doRpath=$enableval else doRpath=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doRpath" >&5 $as_echo "$doRpath" >&6; } # TEA specific: Cross-compiling options for Windows/CE builds? if test "${TEA_PLATFORM}" = windows; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Windows/CE build is requested" >&5 $as_echo_n "checking if Windows/CE build is requested... " >&6; } # Check whether --enable-wince was given. if test "${enable_wince+set}" = set; then : enableval=$enable_wince; doWince=$enableval else doWince=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doWince" >&5 $as_echo "$doWince" >&6; } fi # Set the variable "system" to hold the name and version number # for the system. { $as_echo "$as_me:${as_lineno-$LINENO}: checking system version" >&5 $as_echo_n "checking system version... " >&6; } if ${tcl_cv_sys_version+:} false; then : $as_echo_n "(cached) " >&6 else # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5 $as_echo "$as_me: WARNING: can't find uname command" >&2;} tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5 $as_echo "$tcl_cv_sys_version" >&6; } system=$tcl_cv_sys_version # Require ranlib early so we can override it in special cases below. # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g if test "$GCC" = yes; then : CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" else CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" if test "x$SHLIB_VERSION" = x; then : SHLIB_VERSION="1.0" fi case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs # MACHINE is IX86 for LINK, but this is used by the manifest, # which requires x86|amd64|ia64. MACHINE="X86" if test "$do64bit" != "no" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft Platform SDK" fi MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` PATH64="" case "$do64bit" in amd64|x64|yes) MACHINE="AMD64" ; # default to AMD64 64-bit build PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&5 $as_echo "$as_me: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ensure latest Platform SDK is installed" >&5 $as_echo "$as_me: WARNING: Ensure latest Platform SDK is installed" >&2;} do64bit="no" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using 64-bit $MACHINE mode" >&5 $as_echo " Using 64-bit $MACHINE mode" >&6; } do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" != "no" ; then as_fn_error $? "Windows/CE and 64-bit builds incompatible" "$LINENO" 5 fi if test "$GCC" = "yes" ; then as_fn_error $? "Windows/CE and GCC builds incompatible" "$LINENO" 5 fi # First, look for one uninstalled. # the alternative search directory is invoked by --with-celib if test x"${no_celib}" = x ; then # we reset no_celib in case something fails here no_celib=true # Check whether --with-celib was given. if test "${with_celib+set}" = set; then : withval=$with_celib; with_celibconfig=${withval} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Windows/CE celib directory" >&5 $as_echo_n "checking for Windows/CE celib directory... " >&6; } if ${ac_cv_c_celibconfig+:} false; then : $as_echo_n "(cached) " >&6 else # First check to see if --with-celibconfig was specified. if test x"${with_celibconfig}" != x ; then if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else as_fn_error $? "${with_celibconfig} directory doesn't contain inc directory" "$LINENO" 5 fi fi # then check for a celib library if test x"${ac_cv_c_celibconfig}" = x ; then for i in \ ../celib-palm-3.0 \ ../celib \ ../../celib-palm-3.0 \ ../../celib \ `ls -dr ../celib-*3.[0-9]* 2>/dev/null` \ ${srcdir}/../celib-palm-3.0 \ ${srcdir}/../celib \ `ls -dr ${srcdir}/../celib-*3.[0-9]* 2>/dev/null` \ ; do if test -d "$i/inc" ; then ac_cv_c_celibconfig=`(cd $i; pwd)` break fi done fi fi if test x"${ac_cv_c_celibconfig}" = x ; then as_fn_error $? "Cannot find celib support library directory" "$LINENO" 5 else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $CELIB_DIR" >&5 $as_echo "found $CELIB_DIR" >&6; } fi fi # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length($1)) { printf "CEVERSION=\"%s\"\n", $1; \ if ($1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length($2)) { printf "TARGETCPU=\"%s\"\n", toupper($2) }; \ if (length($3)) { printf "ARCH=\"%s\"\n", toupper($3) }; \ if (length($4)) { printf "PLATFORM=\"%s\"\n", $4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then as_fn_error $? "could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" "$LINENO" 5 doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" != "no" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="\"${PATH64}/cl.exe\"" CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" RC="\"${MSSDK}/bin/rc.exe\"" lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" LINKBIN="\"${PATH64}/link.exe\"" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" # Avoid 'unresolved external symbol __security_cookie' # errors, c.f. http://support.microsoft.com/?id=894573 vars="bufferoverflowU.lib" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="\"${CEBINROOT}/cl.exe\"" else CC="\"${CEBINROOT}/cl${ARCH}.exe\"" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" arch=`echo ${ARCH} | awk '{print tolower($0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do cat >>confdefs.h <<_ACEOF #define $i 1 _ACEOF done cat >>confdefs.h <<_ACEOF #define _WIN32_WCE $CEVERSION _ACEOF cat >>confdefs.h <<_ACEOF #define UNDER_CE $CEVERSION _ACEOF CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RC"; then ac_cv_prog_RC="$RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RC="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RC=$ac_cv_prog_RC if test -n "$RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 $as_echo "$RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RC"; then ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RC"; then ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RC="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 $as_echo "$ac_ct_RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RC" = x; then RC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RC=$ac_ct_RC fi else RC="$ac_cv_prog_RC" fi CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cross-compile version of gcc" >&5 $as_echo_n "checking for cross-compile version of gcc... " >&6; } if ${ac_cv_cross+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __WIN32__ #error cross-compiler #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cross=yes else ac_cv_cross=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cross" >&5 $as_echo "$ac_cv_cross" >&6; } if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # and also # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx # This essentially turns it all on. LDFLAGS_DEBUG="-debug -debugtype:cv" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"; then : # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([^ ]*\)/\1_r/'` ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using $CC for compiling with threads" >&5 $as_echo "Using $CC for compiling with threads" >&6; } fi LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : if test "$GCC" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} else do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" fi fi if test "`uname -m`" = ia64; then : # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" if test "$GCC" = yes; then : CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' else if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared -Wl,-bexpall' else SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" fi SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} fi ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lbind" >&5 $as_echo_n "checking for inet_ntoa in -lbind... " >&6; } if ${ac_cv_lib_bind_inet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbind $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inet_ntoa (); int main () { return inet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bind_inet_ntoa=yes else ac_cv_lib_bind_inet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bind_inet_ntoa" >&5 $as_echo "$ac_cv_lib_bind_inet_ntoa" >&6; } if test "x$ac_cv_lib_bind_inet_ntoa" = xyes; then : LIBS="$LIBS -lbind -lsocket" fi ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; } if ${ac_cv_lib_network_inet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnetwork $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inet_ntoa (); int main () { return inet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_network_inet_ntoa=yes else ac_cv_lib_network_inet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_network_inet_ntoa" >&5 $as_echo "$ac_cv_lib_network_inet_ntoa" >&6; } if test "x$ac_cv_lib_network_inet_ntoa" = xyes; then : LIBS="$LIBS -lnetwork" fi ;; HP-UX-*.11.*) # Use updated header definitions where possible $as_echo "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library if test "`uname -m`" = ia64; then : SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi else SHLIB_SUFFIX=".sl" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = yes; then : LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" fi if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} else CFLAGS="$CFLAGS -z" # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes"; then : if test "$GCC" = yes; then : case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} ;; esac else do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" fi fi ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi if test "$GCC" = yes; then : CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" else case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" fi ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : if test "$GCC" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported by gcc" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported by gcc" >&2;} else do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" fi fi ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "`uname -m`" = "alpha"; then : CFLAGS="$CFLAGS -mieee" fi if test $do64bit = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -m64 flag" >&5 $as_echo_n "checking if compiler accepts -m64 flag... " >&6; } if ${tcl_cv_cc_m64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -m64" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_m64=yes else tcl_cv_cc_m64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_m64" >&5 $as_echo "$tcl_cv_cc_m64" >&6; } if test $tcl_cv_cc_m64 = yes; then : CFLAGS="$CFLAGS -m64" do64bit_ok=yes fi fi # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. if test x"${USE_COMPAT}" != x; then : CFLAGS="$CFLAGS -fno-inline" fi ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac if test "${TCL_THREADS}" = "1"; then : # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" fi # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "${TCL_THREADS}" = "1"; then : # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$@" SHLIB_SUFFIX=".so" LDFLAGS="" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi if test "${TCL_THREADS}" = "1"; then : # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS" fi # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1' TCL_LIB_VERSIONS_OK=nodots ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if ($i~/^(isysroot|mmacosx-version-min)/) print "-"$i}'`" CFLAGS="`echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if (!($i~/^(isysroot|mmacosx-version-min)/)) print "-"$i}'`" if test $do64bit = yes; then : case `arch` in ppc) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch ppc64 flag" >&5 $as_echo_n "checking if compiler accepts -arch ppc64 flag... " >&6; } if ${tcl_cv_cc_arch_ppc64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_arch_ppc64=yes else tcl_cv_cc_arch_ppc64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_ppc64" >&5 $as_echo "$tcl_cv_cc_arch_ppc64" >&6; } if test $tcl_cv_cc_arch_ppc64 = yes; then : CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" do64bit_ok=yes fi;; i386) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch x86_64 flag" >&5 $as_echo_n "checking if compiler accepts -arch x86_64 flag... " >&6; } if ${tcl_cv_cc_arch_x86_64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch x86_64" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_arch_x86_64=yes else tcl_cv_cc_arch_x86_64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_x86_64" >&5 $as_echo "$tcl_cv_cc_arch_x86_64" >&6; } if test $tcl_cv_cc_arch_x86_64 = yes; then : CFLAGS="$CFLAGS -arch x86_64" do64bit_ok=yes fi;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&5 $as_echo "$as_me: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&2;};; esac else # Check for combined 32-bit and 64-bit fat build if echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '; then : fat_32_64=yes fi fi # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -single_module flag" >&5 $as_echo_n "checking if ld accepts -single_module flag... " >&6; } if ${tcl_cv_ld_single_module+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_single_module=yes else tcl_cv_ld_single_module=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_single_module" >&5 $as_echo "$tcl_cv_ld_single_module" >&6; } if test $tcl_cv_ld_single_module = yes; then : SHLIB_LD="${SHLIB_LD} -Wl,-single_module" fi # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([0-9]\{1,5\}\)\(\(\.[0-9]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: if test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int($2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int($2)}'`" -lt 4; then : LDFLAGS="$LDFLAGS -prebind" fi LDFLAGS="$LDFLAGS -headerpad_max_install_names" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -search_paths_first flag" >&5 $as_echo_n "checking if ld accepts -search_paths_first flag... " >&6; } if ${tcl_cv_ld_search_paths_first+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_search_paths_first=yes else tcl_cv_ld_search_paths_first=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_search_paths_first" >&5 $as_echo "$tcl_cv_ld_search_paths_first" >&6; } if test $tcl_cv_ld_search_paths_first = yes; then : LDFLAGS="$LDFLAGS -Wl,-search_paths_first" fi if test "$tcl_cv_cc_visibility_hidden" != yes; then : $as_echo "#define MODULE_SCOPE __private_extern__" >>confdefs.h tcl_cv_cc_visibility_hidden=yes fi CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. if test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"; then : if test "${TEA_WINDOWINGSYSTEM}" = x11; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit X11" >&5 $as_echo_n "checking for 64-bit X11... " >&6; } if ${tcl_cv_lib_x11_64+:} false; then : $as_echo_n "(cached) " >&6 else for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_lib_x11_64=yes else tcl_cv_lib_x11_64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_x11_64" >&5 $as_echo "$tcl_cv_lib_x11_64" >&6; } fi if test "${TEA_WINDOWINGSYSTEM}" = aqua; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit Tk" >&5 $as_echo_n "checking for 64-bit Tk... " >&6; } if ${tcl_cv_lib_tk_64+:} false; then : $as_echo_n "(cached) " >&6 else for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { Tk_InitStubs(NULL, "", 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_lib_tk_64=yes else tcl_cv_lib_tk_64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_tk_64" >&5 $as_echo "$tcl_cv_lib_tk_64" >&6; } fi # remove 64-bit arch flags from CFLAGS et al. if configuration # does not support 64-bit. if test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Removing 64-bit architectures from compiler & linker flags" >&5 $as_echo "$as_me: Removing 64-bit architectures from compiler & linker flags" >&6;} for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done fi fi ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy $as_echo "#define _OE_SOCKETS 1" >>confdefs.h ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" if test "$SHARED_BUILD" = 1; then : SHLIB_LD='ld -shared -expect_unresolved "*"' else SHLIB_LD='ld -non_shared -expect_unresolved "*"' fi SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi if test "$GCC" = yes; then : CFLAGS="$CFLAGS -mieee" else CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee" fi # see pthread_intro(3) for pthread support on osf1, k.furukawa if test "${TCL_THREADS}" = 1; then : CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` if test "$GCC" = yes; then : LIBS="$LIBS -lpthread -lmach -lexc" else CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi fi ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) if test "$GCC" = yes; then : SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" else SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" fi SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[0-6]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} else SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} fi ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : arch=`isainfo` if test "$arch" = "sparcv9 sparc"; then : if test "$GCC" = yes; then : if test "`${CC} -dumpversion | awk -F. '{print $1}'`" -lt 3; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&2;} else do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" fi else do64bit_ok=yes if test "$do64bitVIS" = yes; then : CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS_ARCH="-xarch=v9a" else CFLAGS="$CFLAGS -xarch=v9" LDFLAGS_ARCH="-xarch=v9" fi # Solaris 64 uses this as well #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" fi else if test "$arch" = "amd64 i386"; then : if test "$GCC" = yes; then : case $system in SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*) do64bit_ok=yes CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;};; esac else do64bit_ok=yes case $system in SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*) CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported for $arch" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported for $arch" >&2;} fi fi fi SHLIB_SUFFIX=".so" if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "$do64bit_ok" = yes; then : if test "$arch" = "sparcv9 sparc"; then : # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" else if test "$arch" = "amd64 i386"; then : # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" fi fi fi else case $system in SunOS-5.[1-9][0-9]*) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';; *) SHLIB_LD='/usr/ccs/bin/ld -G -z text';; esac CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' fi ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld accepts -Bexport flag" >&5 $as_echo_n "checking for ld accepts -Bexport flag... " >&6; } if ${tcl_cv_ld_Bexport+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_Bexport=yes else tcl_cv_ld_Bexport=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_Bexport" >&5 $as_echo "$tcl_cv_ld_Bexport" >&6; } if test $tcl_cv_ld_Bexport = yes; then : LDFLAGS="$LDFLAGS -Wl,-Bexport" fi CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; esac if test "$do64bit" = yes -a "$do64bit_ok" = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit support being disabled -- don't know magic for this platform" >&5 $as_echo "$as_me: WARNING: 64bit support being disabled -- don't know magic for this platform" >&2;} fi # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. if test "$GCC" = yes; then : case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac fi if test "$tcl_cv_cc_visibility_hidden" != yes; then : $as_echo "#define MODULE_SCOPE extern" >>confdefs.h fi if test "$SHARED_LIB_SUFFIX" = ""; then : # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}' fi if test "$UNSHARED_LIB_SUFFIX" = ""; then : # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' fi if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SEH support in compiler" >&5 $as_echo_n "checking for SEH support in compiler... " >&6; } if ${tcl_cv_seh+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : tcl_cv_seh=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : tcl_cv_seh=yes else tcl_cv_seh=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_seh" >&5 $as_echo "$tcl_cv_seh" >&6; } if test "$tcl_cv_seh" = "no" ; then $as_echo "#define HAVE_NO_SEH 1" >>confdefs.h fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EXCEPTION_DISPOSITION support in include files" >&5 $as_echo_n "checking for EXCEPTION_DISPOSITION support in include files... " >&6; } if ${tcl_cv_eh_disposition+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN int main () { EXCEPTION_DISPOSITION x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_eh_disposition=yes else tcl_cv_eh_disposition=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_eh_disposition" >&5 $as_echo "$tcl_cv_eh_disposition" >&6; } if test "$tcl_cv_eh_disposition" = "no" ; then $as_echo "#define EXCEPTION_DISPOSITION int" >>confdefs.h fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winnt.h that ignores VOID define" >&5 $as_echo_n "checking for winnt.h that ignores VOID define... " >&6; } if ${tcl_cv_winnt_ignore_void+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define VOID void #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main () { CHAR c; SHORT s; LONG l; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_winnt_ignore_void=yes else tcl_cv_winnt_ignore_void=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_winnt_ignore_void" >&5 $as_echo "$tcl_cv_winnt_ignore_void" >&6; } if test "$tcl_cv_winnt_ignore_void" = "yes" ; then $as_echo "#define HAVE_WINNT_IGNORE_VOID 1" >>confdefs.h fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cast to union support" >&5 $as_echo_n "checking for cast to union support... " >&6; } if ${tcl_cv_cast_to_union+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { union foo { int i; double d; }; union foo f = (union foo) (int) 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_cast_to_union=yes else tcl_cv_cast_to_union=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cast_to_union" >&5 $as_echo "$tcl_cv_cast_to_union" >&6; } if test "$tcl_cv_cast_to_union" = "yes"; then $as_echo "#define HAVE_CAST_TO_UNION 1" >>confdefs.h fi # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary { $as_echo "$as_me:${as_lineno-$LINENO}: checking for required early compiler flags" >&5 $as_echo_n "checking for required early compiler flags... " >&6; } tcl_flags="" if ${tcl_cv_flag__isoc99_source+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *)strtoll; char *q = (char *)strtoull; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__isoc99_source=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _ISOC99_SOURCE 1 #include int main () { char *p = (char *)strtoll; char *q = (char *)strtoull; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__isoc99_source=yes else tcl_cv_flag__isoc99_source=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__isoc99_source}" = "xyes" ; then $as_echo "#define _ISOC99_SOURCE 1" >>confdefs.h tcl_flags="$tcl_flags _ISOC99_SOURCE" fi if ${tcl_cv_flag__largefile64_source+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct stat64 buf; int i = stat64("/", &buf); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile64_source=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE64_SOURCE 1 #include int main () { struct stat64 buf; int i = stat64("/", &buf); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile64_source=yes else tcl_cv_flag__largefile64_source=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__largefile64_source}" = "xyes" ; then $as_echo "#define _LARGEFILE64_SOURCE 1" >>confdefs.h tcl_flags="$tcl_flags _LARGEFILE64_SOURCE" fi if ${tcl_cv_flag__largefile_source64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *)open64; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile_source64=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE64 1 #include int main () { char *p = (char *)open64; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile_source64=yes else tcl_cv_flag__largefile_source64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__largefile_source64}" = "xyes" ; then $as_echo "#define _LARGEFILE_SOURCE64 1" >>confdefs.h tcl_flags="$tcl_flags _LARGEFILE_SOURCE64" fi if test "x${tcl_flags}" = "x" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_flags}" >&5 $as_echo "${tcl_flags}" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit integer type" >&5 $as_echo_n "checking for 64-bit integer type... " >&6; } if ${tcl_cv_type_64bit+:} false; then : $as_echo_n "(cached) " >&6 else tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { __int64 value = (__int64) 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_type_64bit=__int64 else tcl_type_64bit="long long" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { switch (0) { case 1: case (sizeof(${tcl_type_64bit})==sizeof(long)): ; } ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_type_64bit=${tcl_type_64bit} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "${tcl_cv_type_64bit}" = none ; then $as_echo "#define TCL_WIDE_INT_IS_LONG 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: using long" >&5 $as_echo "using long" >&6; } elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* { $as_echo "$as_me:${as_lineno-$LINENO}: result: using Tcl header defaults" >&5 $as_echo "using Tcl header defaults" >&6; } else cat >>confdefs.h <<_ACEOF #define TCL_WIDE_INT_TYPE ${tcl_cv_type_64bit} _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_cv_type_64bit}" >&5 $as_echo "${tcl_cv_type_64bit}" >&6; } # Now check for auxiliary declarations { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent64" >&5 $as_echo_n "checking for struct dirent64... " >&6; } if ${tcl_cv_struct_dirent64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct dirent64 p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_struct_dirent64=yes else tcl_cv_struct_dirent64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_dirent64" >&5 $as_echo "$tcl_cv_struct_dirent64" >&6; } if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then $as_echo "#define HAVE_STRUCT_DIRENT64 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct stat64" >&5 $as_echo_n "checking for struct stat64... " >&6; } if ${tcl_cv_struct_stat64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct stat64 p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_struct_stat64=yes else tcl_cv_struct_stat64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_stat64" >&5 $as_echo "$tcl_cv_struct_stat64" >&6; } if test "x${tcl_cv_struct_stat64}" = "xyes" ; then $as_echo "#define HAVE_STRUCT_STAT64 1" >>confdefs.h fi for ac_func in open64 lseek64 do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for off64_t" >&5 $as_echo_n "checking for off64_t... " >&6; } if ${tcl_cv_type_off64_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { off64_t offset; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_type_off64_t=yes else tcl_cv_type_off64_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_type_off64_t}" = "xyes" && \ test "x${ac_cv_func_lseek64}" = "xyes" && \ test "x${ac_cv_func_open64}" = "xyes" ; then $as_echo "#define HAVE_TYPE_OFF64_T 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build with symbols" >&5 $as_echo_n "checking for build with symbols... " >&6; } # Check whether --enable-symbols was given. if test "${enable_symbols+set}" = set; then : enableval=$enable_symbols; tcl_ok=$enableval else tcl_ok=no fi DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (standard debugging)" >&5 $as_echo "yes (standard debugging)" >&6; } fi fi # TEA specific: if test "${TEA_PLATFORM}" != "windows" ; then LDFLAGS_DEFAULT="${LDFLAGS}" fi if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then $as_echo "#define TCL_MEM_DEBUG 1" >>confdefs.h fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled symbols mem debugging" >&5 $as_echo "enabled symbols mem debugging" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled $tcl_ok debugging" >&5 $as_echo "enabled $tcl_ok debugging" >&6; } fi fi #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. Add Tk too if necessary. #-------------------------------------------------------------------- $as_echo "#define USE_TCL_STUBS 1" >>confdefs.h #AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\$@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\$@ \$(PKG_OBJECTS)" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "manifest needed" >/dev/null 2>&1; then : # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" CLEANFILES="$CLEANFILES *.manifest" fi rm -f conftest* MAKE_STUB_LIB="\${STLIB_LD} -out:\$@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \$@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \$@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \$@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then MAKE_LIB="${MAKE_SHARED_LIB} " else MAKE_LIB="${MAKE_STATIC_LIB} " fi #-------------------------------------------------------------------- # Shared libraries and static libraries have different names. # Use the double eval to make sure any variables in the suffix is # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) RANLIB=: RANLIB_STUB=: else RANLIB_STUB="${RANLIB}" if test "${SHARED_BUILD}" = "1" ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" fi eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" RANLIB=: else eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" fi # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi #-------------------------------------------------------------------- # Determine the name of the tclsh and/or wish executables in the # Tcl and Tk build directories or the location they were installed # into. These paths are used to support running test cases only, # the Makefile should not be making use of these paths to generate # a pkgIndex.tcl file or anything else at extension build time. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tclsh" >&5 $as_echo_n "checking for tclsh... " >&6; } if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="${TCL_BIN_DIR}/tclsh" fi else # tclConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}" fi list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TCL_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${TCLSH_PROG}" ; then REAL_TCL_BIN_DIR="`cd "$i"; pwd`/" break fi done TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${TCLSH_PROG}" >&5 $as_echo "${TCLSH_PROG}" >&6; } #TEA_PROG_WISH #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- ac_config_files="$ac_config_files Makefile pkgIndex.tcl" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS="" : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by tclcheckdns $as_me 1.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ tclcheckdns config.status 1.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "pkgIndex.tcl") CONFIG_FILES="$CONFIG_FILES pkgIndex.tcl" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi saods9/tclcheckdns/configure.in000755 000765 000000 00000016550 12556465353 017212 0ustar00joyewheel000000 000000 #!/bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. #----------------------------------------------------------------------- # Sample configure.in for Tcl Extensions. The only places you should # need to modify this file are marked by the string __CHANGE__ #----------------------------------------------------------------------- #----------------------------------------------------------------------- # __CHANGE__ # Set your package name and version numbers here. # # This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION # set as provided. These will also be added as -D defs in your Makefile # so you can encode the package version directly into the source files. # This will also define a special symbol for Windows (BUILD_ # so that we create the export library with the dll. #----------------------------------------------------------------------- AC_INIT([tclcheckdns], [1.1]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- TEA_INIT([3.9]) AC_CONFIG_AUX_DIR(tclconfig) #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- TEA_PATH_TCLCONFIG TEA_LOAD_TCLCONFIG #-------------------------------------------------------------------- # Load the tkConfig.sh file if necessary (Tk extension) #-------------------------------------------------------------------- #TEA_PATH_TKCONFIG #TEA_LOAD_TKCONFIG #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- TEA_PREFIX #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC and a few others to create the basic setup # necessary to compile executables. #----------------------------------------------------------------------- TEA_SETUP_COMPILER #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- TEA_ADD_SOURCES([checkdns.C]) TEA_ADD_HEADERS([]) TEA_ADD_INCLUDES([]) TEA_ADD_LIBS([-lstdc++]) TEA_ADD_CFLAGS([]) TEA_ADD_STUB_SOURCES([]) TEA_ADD_TCL_SOURCES([]) #-------------------------------------------------------------------- # __CHANGE__ # # You can add more files to clean if your extension creates any extra # files by extending CLEANFILES. # Add pkgIndex.tcl if it is generated in the Makefile instead of ./configure # and change Makefile.in to move it from CONFIG_CLEAN_FILES to BINARIES var. # # A few miscellaneous platform-specific items: # TEA_ADD_* any platform specific compiler/build info here. #-------------------------------------------------------------------- #CLEANFILES="$CLEANFILES pkgIndex.tcl" if test "${TEA_PLATFORM}" = "windows" ; then # Ensure no empty if clauses : #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) else # Ensure no empty else clauses : #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) fi #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- TEA_PUBLIC_TCL_HEADERS #TEA_PRIVATE_TCL_HEADERS #TEA_PUBLIC_TK_HEADERS #TEA_PRIVATE_TK_HEADERS #TEA_PATH_X #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. # This auto-enables if Tcl was compiled threaded. #-------------------------------------------------------------------- TEA_ENABLE_THREADS #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- TEA_ENABLE_SHARED #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- TEA_CONFIG_CFLAGS #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- TEA_ENABLE_SYMBOLS #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. Add Tk too if necessary. #-------------------------------------------------------------------- AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs]) #AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- TEA_MAKE_LIB #-------------------------------------------------------------------- # Determine the name of the tclsh and/or wish executables in the # Tcl and Tk build directories or the location they were installed # into. These paths are used to support running test cases only, # the Makefile should not be making use of these paths to generate # a pkgIndex.tcl file or anything else at extension build time. #-------------------------------------------------------------------- TEA_PROG_TCLSH #TEA_PROG_WISH #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- AC_OUTPUT([Makefile pkgIndex.tcl]) saods9/tclcheckdns/Makefile.in000755 000765 000000 00000040251 12562731013 016723 0ustar00joyewheel000000 000000 # Makefile.in -- # # This file is a Makefile for Sample TEA Extension. If it has the name # "Makefile.in" then it is a template for a Makefile; to generate the # actual Makefile, run "./configure", which is a configuration script # generated by the "autoconf" program (constructs like "@foo@" will get # replaced in the actual Makefile. # # Copyright (c) 1999 Scriptics Corporation. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. #======================================================================== # Add additional lines to handle any additional AC_SUBST cases that # have been added in a customized configure script. #======================================================================== #SAMPLE_NEW_VAR = @SAMPLE_NEW_VAR@ #======================================================================== # Nothing of the variables below this line should need to be changed. # Please check the TARGETS section below to make sure the make targets # are correct. #======================================================================== #======================================================================== # The names of the source files is defined in the configure script. # The object files are used for linking into the final library. # This will be used when a dist target is added to the Makefile. # It is not important to specify the directory, as long as it is the # $(srcdir) or in the generic, win or unix subdirectory. #======================================================================== PKG_SOURCES = @PKG_SOURCES@ PKG_OBJECTS = @PKG_OBJECTS@ PKG_STUB_SOURCES = @PKG_STUB_SOURCES@ PKG_STUB_OBJECTS = @PKG_STUB_OBJECTS@ #======================================================================== # PKG_TCL_SOURCES identifies Tcl runtime files that are associated with # this package that need to be installed, if any. #======================================================================== PKG_TCL_SOURCES = @PKG_TCL_SOURCES@ #======================================================================== # This is a list of public header files to be installed, if any. #======================================================================== PKG_HEADERS = @PKG_HEADERS@ #======================================================================== # "PKG_LIB_FILE" refers to the library (dynamic or static as per # configuration options) composed of the named objects. #======================================================================== PKG_LIB_FILE = @PKG_LIB_FILE@ PKG_STUB_LIB_FILE = @PKG_STUB_LIB_FILE@ lib_BINARIES = $(PKG_LIB_FILE) BINARIES = $(lib_BINARIES) SHELL = @SHELL@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ datarootdir = @datarootdir@ datadir = @datadir@ mandir = @mandir@ DESTDIR = PKG_DIR = $(PACKAGE_NAME)$(PACKAGE_VERSION) pkgdatadir = $(datadir)/$(PKG_DIR) pkglibdir = $(libdir)/$(PKG_DIR) pkgincludedir = $(includedir)/$(PKG_DIR) top_builddir = . INSTALL_OPTIONS = INSTALL = $(SHELL) $(srcdir)/tclconfig/install-sh -c ${INSTALL_OPTIONS} INSTALL_DATA_DIR = ${INSTALL} -d -m 755 INSTALL_PROGRAM = ${INSTALL} -m 555 INSTALL_DATA = ${INSTALL} -m 444 INSTALL_SCRIPT = ${INSTALL_PROGRAM} INSTALL_LIBRARY = ${INSTALL} -m 644 PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ CC = @CC@ CFLAGS_DEFAULT = @CFLAGS_DEFAULT@ CFLAGS_WARNING = @CFLAGS_WARNING@ EXEEXT = @EXEEXT@ LDFLAGS_DEFAULT = @LDFLAGS_DEFAULT@ MAKE_LIB = @MAKE_LIB@ MAKE_SHARED_LIB = @MAKE_SHARED_LIB@ MAKE_STATIC_LIB = @MAKE_STATIC_LIB@ MAKE_STUB_LIB = @MAKE_STUB_LIB@ OBJEXT = @OBJEXT@ RANLIB = @RANLIB@ RANLIB_STUB = @RANLIB_STUB@ SHLIB_CFLAGS = @SHLIB_CFLAGS@ SHLIB_LD = @SHLIB_LD@ SHLIB_LD_LIBS = @SHLIB_LD_LIBS@ STLIB_LD = @STLIB_LD@ #TCL_DEFS = @TCL_DEFS@ TCL_BIN_DIR = @TCL_BIN_DIR@ TCL_SRC_DIR = @TCL_SRC_DIR@ #TK_BIN_DIR = @TK_BIN_DIR@ #TK_SRC_DIR = @TK_SRC_DIR@ # Not used, but retained for reference of what libs Tcl required #TCL_LIBS = @TCL_LIBS@ #======================================================================== # TCLLIBPATH seeds the auto_path in Tcl's init.tcl so we can test our # package without installing. The other environment variables allow us # to test against an uninstalled Tcl. Add special env vars that you # require for testing here (like TCLX_LIBRARY). #======================================================================== EXTRA_PATH = $(top_builddir):$(TCL_BIN_DIR) #EXTRA_PATH = $(top_builddir):$(TCL_BIN_DIR):$(TK_BIN_DIR) TCLLIBPATH = $(top_builddir) TCLSH_ENV = TCL_LIBRARY=`@CYGPATH@ $(TCL_SRC_DIR)/library` PKG_ENV = @LD_LIBRARY_PATH_VAR@="$(EXTRA_PATH):$(@LD_LIBRARY_PATH_VAR@)" \ PATH="$(EXTRA_PATH):$(PATH)" \ TCLLIBPATH="$(TCLLIBPATH)" TCLSH_PROG = @TCLSH_PROG@ TCLSH = $(PKG_ENV) $(TCLSH_ENV) $(TCLSH_PROG) #WISH_ENV = TK_LIBRARY=`@CYGPATH@ $(TK_SRC_DIR)/library` #WISH_PROG = @WISH_PROG@ #WISH = $(PKG_ENV) $(TCLSH_ENV) $(WISH_ENV) $(WISH_PROG) SHARED_BUILD = @SHARED_BUILD@ INCLUDES = @PKG_INCLUDES@ @TCL_INCLUDES@ #INCLUDES = @PKG_INCLUDES@ @TCL_INCLUDES@ @TK_INCLUDES@ @TK_XINCLUDES@ PKG_CFLAGS = @PKG_CFLAGS@ # TCL_DEFS is not strictly need here, but if you remove it, then you # must make sure that configure.in checks for the necessary components # that your library may use. TCL_DEFS can actually be a problem if # you do not compile with a similar machine setup as the Tcl core was # compiled with. #DEFS = $(TCL_DEFS) @DEFS@ $(PKG_CFLAGS) DEFS = @DEFS@ $(PKG_CFLAGS) # Move pkgIndex.tcl to 'BINARIES' var if it is generated in the Makefile CONFIG_CLEAN_FILES = Makefile pkgIndex.tcl CLEANFILES = @CLEANFILES@ CPPFLAGS = @CPPFLAGS@ LIBS = @PKG_LIBS@ @LIBS@ AR = @AR@ CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) .SUFFIXES: .c .C .$(OBJEXT) #======================================================================== # Start of user-definable TARGETS section #======================================================================== #======================================================================== # TEA TARGETS. Please note that the "libraries:" target refers to platform # independent files, and the "binaries:" target includes executable programs and # platform-dependent libraries. Modify these targets so that they install # the various pieces of your package. The make and install rules # for the BINARIES that you specified above have already been done. #======================================================================== all: binaries libraries #doc #======================================================================== # The binaries target builds executable programs, Windows .dll's, unix # shared/static libraries, and any other platform-dependent files. # The list of targets to build for "binaries:" is specified at the top # of the Makefile, in the "BINARIES" variable. #======================================================================== binaries: $(BINARIES) libraries: #======================================================================== # Your doc target should differentiate from doc builds (by the developer) # and doc installs (see install-doc), which just install the docs on the # end user machine when building from source. #======================================================================== doc: @echo "If you have documentation to create, place the commands to" @echo "build the docs in the 'doc:' target. For example:" @echo " xml2nroff sample.xml > sample.n" @echo " xml2html sample.xml > sample.html" install: all install-binaries install-libraries #install-doc install-binaries: binaries install-lib-binaries install-bin-binaries #======================================================================== # This rule installs platform-independent files, such as header files. # The list=...; for p in $$list handles the empty list case x-platform. #======================================================================== install-libraries: libraries @$(INSTALL_DATA_DIR) $(DESTDIR)$(includedir) @echo "Installing header files in $(DESTDIR)$(includedir)" @list='$(PKG_HEADERS)'; for i in $$list; do \ echo "Installing $(srcdir)/$$i" ; \ $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir) ; \ done; #======================================================================== # Install documentation. Unix manpages should go in the $(mandir) # directory. #======================================================================== install-doc: doc @$(INSTALL_DATA_DIR) $(DESTDIR)$(mandir)/mann @echo "Installing documentation in $(DESTDIR)$(mandir)" @list='$(srcdir)/doc/*.n'; for i in $$list; do \ echo "Installing $$i"; \ $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/mann ; \ done test: binaries libraries $(TCLSH) `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS) \ -load "package ifneeded ${PACKAGE_NAME} ${PACKAGE_VERSION} \ [list load `@CYGPATH@ $(PKG_LIB_FILE)` $(PACKAGE_NAME)]" shell: binaries libraries @$(TCLSH) $(SCRIPT) gdb: $(TCLSH_ENV) gdb $(TCLSH_PROG) $(SCRIPT) VALGRINDARGS = --tool=memcheck --num-callers=8 --leak-resolution=high \ --leak-check=yes --show-reachable=yes -v valgrind: binaries libraries $(TCLSH_ENV) valgrind $(VALGRINDARGS) $(TCLSH_PROG) \ `@CYGPATH@ $(srcdir)/tests/all.tcl` $(TESTFLAGS) valgrindshell: binaries libraries $(TCLSH_ENV) valgrind $(VALGRINDARGS) $(TCLSH_PROG) $(SCRIPT) depend: #======================================================================== # $(PKG_LIB_FILE) should be listed as part of the BINARIES variable # mentioned above. That will ensure that this target is built when you # run "make binaries". # # The $(PKG_OBJECTS) objects are created and linked into the final # library. In most cases these object files will correspond to the # source files above. #======================================================================== $(PKG_LIB_FILE): $(PKG_OBJECTS) -rm -f $(PKG_LIB_FILE) ${MAKE_LIB} $(RANLIB) $(PKG_LIB_FILE) $(PKG_STUB_LIB_FILE): $(PKG_STUB_OBJECTS) -rm -f $(PKG_STUB_LIB_FILE) ${MAKE_STUB_LIB} $(RANLIB_STUB) $(PKG_STUB_LIB_FILE) #======================================================================== # We need to enumerate the list of .c to .o lines here. # # In the following lines, $(srcdir) refers to the toplevel directory # containing your extension. If your sources are in a subdirectory, # you will have to modify the paths to reflect this: # # sample.$(OBJEXT): $(srcdir)/generic/sample.c # $(COMPILE) -c `@CYGPATH@ $(srcdir)/generic/sample.c` -o $@ # # Setting the VPATH variable to a list of paths will cause the makefile # to look into these paths when resolving .c to .obj dependencies. # As necessary, add $(srcdir):$(srcdir)/compat:.... #======================================================================== VPATH = $(srcdir):$(srcdir)/generic:$(srcdir)/unix:$(srcdir)/win:$(srcdir)/macosx .c.@OBJEXT@: $(COMPILE) -c `@CYGPATH@ $<` -o $@ .C.@OBJEXT@: $(COMPILE) -c `@CYGPATH@ $<` -o $@ #======================================================================== # Distribution creation # You may need to tweak this target to make it work correctly. #======================================================================== #COMPRESS = tar cvf $(PKG_DIR).tar $(PKG_DIR); compress $(PKG_DIR).tar COMPRESS = tar zcvf $(PKG_DIR).tar.gz $(PKG_DIR) DIST_ROOT = /tmp/dist DIST_DIR = $(DIST_ROOT)/$(PKG_DIR) dist-clean: rm -rf $(DIST_DIR) $(DIST_ROOT)/$(PKG_DIR).tar.* dist: dist-clean $(INSTALL_DATA_DIR) $(DIST_DIR) cp -p $(srcdir)/ChangeLog $(srcdir)/README* $(srcdir)/license* \ $(srcdir)/aclocal.m4 $(srcdir)/configure $(srcdir)/*.in \ $(DIST_DIR)/ chmod 664 $(DIST_DIR)/Makefile.in $(DIST_DIR)/aclocal.m4 chmod 775 $(DIST_DIR)/configure $(DIST_DIR)/configure.in for i in $(srcdir)/*.[ch]; do \ if [ -f $$i ]; then \ cp -p $$i $(DIST_DIR)/ ; \ fi; \ done; $(INSTALL_DATA_DIR) $(DIST_DIR)/tclconfig cp $(srcdir)/tclconfig/install-sh $(srcdir)/tclconfig/tcl.m4 \ $(DIST_DIR)/tclconfig/ chmod 664 $(DIST_DIR)/tclconfig/tcl.m4 chmod +x $(DIST_DIR)/tclconfig/install-sh list='demos doc generic library mac tests unix win'; \ for p in $$list; do \ if test -d $(srcdir)/$$p ; then \ $(INSTALL_DATA_DIR) $(DIST_DIR)/$$p; \ cp -p $(srcdir)/$$p/*.* $(DIST_DIR)/$$p/; \ fi; \ done (cd $(DIST_ROOT); $(COMPRESS);) #======================================================================== # End of user-definable section #======================================================================== #======================================================================== # Don't modify the file to clean here. Instead, set the "CLEANFILES" # variable in configure.in #======================================================================== clean: -test -z "$(BINARIES)" || rm -f $(BINARIES) -rm -f *.$(OBJEXT) core *.core -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean: clean -rm -f *.tab.c -rm -f $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log config.status #======================================================================== # Install binary object libraries. On Windows this includes both .dll and # .lib files. Because the .lib files are not explicitly listed anywhere, # we need to deduce their existence from the .dll file of the same name. # Library files go into the lib directory. # In addition, this will generate the pkgIndex.tcl # file in the install location (assuming it can find a usable tclsh shell) # # You should not have to modify this target. #======================================================================== install-lib-binaries: binaries @$(INSTALL_DATA_DIR) $(DESTDIR)$(pkglibdir) @list='$(lib_BINARIES)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_LIBRARY) $$p $(DESTDIR)$(pkglibdir)/$$p"; \ $(INSTALL_LIBRARY) $$p $(DESTDIR)$(pkglibdir)/$$p; \ stub=`echo $$p|sed -e "s/.*\(stub\).*/\1/"`; \ if test "x$$stub" = "xstub"; then \ echo " $(RANLIB_STUB) $(DESTDIR)$(pkglibdir)/$$p"; \ $(RANLIB_STUB) $(DESTDIR)$(pkglibdir)/$$p; \ else \ echo " $(RANLIB) $(DESTDIR)$(pkglibdir)/$$p"; \ $(RANLIB) $(DESTDIR)$(pkglibdir)/$$p; \ fi; \ ext=`echo $$p|sed -e "s/.*\.//"`; \ if test "x$$ext" = "xdll"; then \ lib=`basename $$p|sed -e 's/.[^.]*$$//'`.lib; \ if test -f $$lib; then \ echo " $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib"; \ $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib; \ fi; \ fi; \ fi; \ done @list='$(PKG_TCL_SOURCES)'; for p in $$list; do \ if test -f $(srcdir)/$$p; then \ destp=`basename $$p`; \ echo " Install $$destp $(DESTDIR)$(pkglibdir)/$$destp"; \ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkglibdir)/$$destp; \ fi; \ done @if test "x$(SHARED_BUILD)" = "x1"; then \ echo " Install pkgIndex.tcl $(DESTDIR)$(pkglibdir)"; \ $(INSTALL_DATA) pkgIndex.tcl $(DESTDIR)$(pkglibdir); \ fi #======================================================================== # Install binary executables (e.g. .exe files and dependent .dll files) # This is for files that must go in the bin directory (located next to # wish and tclsh), like dependent .dll files on Windows. # # You should not have to modify this target, except to define bin_BINARIES # above if necessary. #======================================================================== install-bin-binaries: binaries @$(INSTALL_DATA_DIR) $(DESTDIR)$(bindir) @list='$(bin_BINARIES)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \ fi; \ done Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status uninstall-binaries: list='$(lib_BINARIES)'; for p in $$list; do \ rm -f $(DESTDIR)$(pkglibdir)/$$p; \ done list='$(PKG_TCL_SOURCES)'; for p in $$list; do \ p=`basename $$p`; \ rm -f $(DESTDIR)$(pkglibdir)/$$p; \ done list='$(bin_BINARIES)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/$$p; \ done .PHONY: all binaries clean depend distclean doc install libraries test # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: saods9/tclcheckdns/pkgIndex.tcl.in000755 000765 000000 00000000220 12535330301 017523 0ustar00joyewheel000000 000000 # # Tcl package index file # package ifneeded @PACKAGE_NAME@ @PACKAGE_VERSION@ \ [list load [file join $dir @PKG_LIB_FILE@] @PACKAGE_NAME@] saods9/tclcheckdns/tclconfig/000755 000765 000000 00000000000 13012655563 016627 5ustar00joyewheel000000 000000 saods9/tclcheckdns/tclconfig/ChangeLog000644 000765 000000 00000106605 12260347267 020414 0ustar00joyewheel000000 000000 2013-07-04 Jan Nijtmans * unix/tcl.m4: Bug [3324676]: AC_PROG_INSTALL incompat, Bug [3606445]: Unneeded -DHAVE_NO_SEH=1 when not building on Windows 2013-07-02 Jan Nijtmans * unix/tcl.m4: Bug [32afa6e256]: dirent64 check is incorrect in tcl.m4 (thanks to Brian Griffin) 2013-06-20 Jan Nijtmans * unix/tcl.m4: Use X11/Xlib.h for checking where X11 can be found in stead of X11/XIntrinsic.h. Suggested by Pietro Cerutti. 2013-06-04 Jan Nijtmans * unix/tcl.m4: Eliminate NO_VIZ macro as current zlib uses HAVE_HIDDEN in stead. One more last-moment fix for FreeBSD by Pietro Cerutti 2013-05-19 Jan Nijtmans * unix/tcl.m4: Fix for FreeBSD, and remove support for old FreeBSD versions. Patch by Pietro Cerutti 2013-03-12 Jan Nijtmans * unix/tcl.m4: Patch by Andrew Shadura, providing better support for * three architectures they have in Debian. 2012-08-07 Stuart Cassoff * tcl.m4: Added "-DNDEBUG" to CFLAGS_DEFAULT when building with --disable-symbols. 2012-08-07 Stuart Cassoff * tcl.m4: [Bug 3555058]: Checkin [30736d63f0] broke CFLAGS_DEFAULT, LDFLAGS_DEFAULT 2012-08-07 Stuart Cassoff * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS 2012-08-07 Jan Nijtmans * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS 2012-07-25 Jan Nijtmans * tcl.m4: My previous commit (2012-04-03) broke the ActiveTcl build for AMD64, because of the quotes in "C://AMD64/cl.exe". It turns out that the AC_TRY_COMPILE macro cannot handle that. 2012-07-22 Stuart Cassoff * tcl.m4: Tidy: consistency, spelling, phrasing, whitespace. No functional change. 2012-04-03 Jan Nijtmans * tcl.m4: [Bug 3511806] Compiler checks too early This change allows to build the cygwin and mingw32 ports of Tcl/Tk extensions to build out-of-the-box using a native or cross-compiler, e.g. on Cygwin, Linux or Darwin. 2011-04-02 Jan Nijtmans * install-sh: Fix issue with library stripping in install-sh (backported from kevin_walzer's patch from Tcl 8.6 trunk) 2011-04-05 Andreas Kupries * tcl.m4: Applied patch by Jeff Lawson. Nicer error message when tclConfig.sh was not found. 2010-12-15 Stuart Cassoff * install-sh: Upgrade to newer install-sh and use it. * tcl.m4: 2010-12-14 Stuart Cassoff * tcl.m4: Better building on OpenBSD. 2010-12-14 Jan Nijtmans * tcl.m4: when using gcc, don't try to determine Win64 SDK 2010-12-12 Jan Nijtmans * tcl.m4: Determine correctly a cross-compiler-windres 2010-11-23 Jan Nijtmans * tcl.m4: add some cross-compile support, borrowed from Tcl 8.6 2010-09-16 Jeff Hobbs * tcl.m4: correct HP-UX LDFLAGS (only used when building big shell) 2010-09-14 Jeff Hobbs * tcl.m4: add extra if check for .manifest file generation Add notice about package name and version being built. 2010-09-09 Jan Nijtmans * tcl.m4: [FREQ #3058486] TEA_LOAD_CONFIG doesn't set all BUILD_ vars Slightly related: defining BUILD_$1 on all platforms - not only win - allows the -fvisibility feature to be used in extensions as well, at least if you compile against tcl >= 8.5. 2010-08-26 Jeff Hobbs * tcl.m4: ensure safe quoting for autoheader usage 2010-08-19 Jeff Hobbs * tcl.m4: add TEA_ADD_CLEANFILES macro to make adding cleanfiles easier, and add *.exp to CLEANFILES Windows default. (TEA_MAKE_LIB): Enhanced to check for MSVC that requires manifests and auto-embed it into proj DLL via MAKE_SHARED_LIB. Also define VC_MANIFEST_EMBED_DLL and VC_MANIFEST_EMBED_EXE that do the same magic in case it is needed for extended TEA projects. 2010-08-16 Jeff Hobbs *** Bump to TEA_VERSION 3.9 *** If upgrading from TEA_VERSION 3.8, copy over tcl.m4, change TEA_INIT to use 3.9 and reconfigure (ac-2.59+). BUILD_${PACKAGE_NAME} will be auto-defined on Windows for correct setting of TCL_STORAGE_CLASS. TEA_LOAD_CONFIG users should remove the SHLIB_LD_LIBS setting done in configure.in (LIBS will be automagically populated by TEA_LOAD_CONFIG). TEA_EXPORT_CONFIG has been added for ${pkg}Config.sh creators SHLIB_LD_FLAGS was deprecated a while ago, remove it if it is still in your Makefile.in. * tcl.m4: add /usr/lib64 to set of auto-search dirs. [Bug 1230554] Auto-define BUILD_$PACKAGE_NAME so users don't need to. This needs to correspond with $pkg.h define magic for TCL_STORAGE_CLASS. Auto-define CLEANFILES. Users can expand it. (SHLIB_LD_LIBS): define to '${LIBS}' default and change it only if necessary. Platforms not using this may simply not work or have very funky linkers. (TEA_LOAD_CONFIG): When loading config for another extension, auto-add stub libraries found with TEA_ADD_LIBS. Eases configure.in for modules like itk and img::*. (TEA_EXPORT_CONFIG): Add standardized function for exporting a ${pkg}Config.sh. See use by img::* and itcl. 2010-08-12 Jeff Hobbs *** Bump to TEA_VERSION 3.8 *** If upgrading from TEA_VERSION 3.7, copy over tcl.m4, change TEA_INIT to use 3.8 and reconfigure (ac-2.59+). No other changes should be necessary. * tcl.m4: remove more vestigial bits from removed platforms. Add back SCO_SV-3.2*. Remove use of DL_LIBS and DL_OBJS and related baggage - these are only needed by the core to support 'load'. Allow for macosx in TEA_ADD_SOURCES. Correct check for found_xincludes=no in TEA_PATH_UNIX_X. 2010-08-11 Jeff Hobbs * tcl.m4: remove the following old platform configurations: UNIX_SV*|UnixWare-5*, SunOS-4.*, SINIX*5.4*, SCO_SV-3.2*, OSF1-1.*, NEXTSTEP-*, NetBSD-1.*|FreeBSD-[[1-2]].*, MP-RAS-*, IRIX-5.*, HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*, dgux*, BSD/OS-2.1*|BSD/OS-3* (AIX): drop AIX-pre4 support and use of ldAix, use -bexpall/-brtl 2010-07-05 Jan Nijtmans * tcl.m4: [Patch #1055668] removal of exported internals from tclInt.h (EXTERN macro) 2010-04-14 Jan Nijtmans * tcl.m4 - Backport a lot of quoting fixes from tcl8.6/unix/tcl.m4 - Fix determination of CYGPATH for CYGWIN With those fixes, itcl and tdbc compile fine with CYGWIN 2010-04-06 Jan Nijtmans * install-sh [Bug 2982540] configure and install* script files should always have LF 2010-02-19 Stuart Cassoff * tcl.m4: Correct compiler/linker flags for threaded builds on OpenBSD. 2010-01-19 Jan Nijtmans * tcl.m4: Detect CYGWIN variant: win32 or unix 2010-01-03 Donal K. Fellows * unix/tcl.m4 (TEA_CONFIG_CFLAGS): [Tcl Bug 1636685]: Use the configuration for modern FreeBSD suggested by the FreeBSD porter. 2009-10-22 Jan Nijtmans * tcl.m4: [Tcl Patch #2883533] tcl.m4 support for Haiku OS 2009-04-27 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): harden the check to add _r to CC on AIX with threads. 2009-04-10 Daniel Steffen * tcl.m4 (Darwin): check for 64-bit TkAqua. 2009-03-26 Jan Nijtmans * tclconfig/tcl.m4: Adapt LDFLAGS and LD_SEARCH_FLAGS together with SHLIB_LD definition to unbreak building on HPUX. 2009-03-20 Andreas Kupries * tclconfig/tcl.m4: Changed SHLIB_LD definition to unbreak building on HPUX. 2009-03-16 Joe English * tcl.m4(TEA_PUBLIC_TK_HEADERS): Look at ${TK_INCLUDE_SPEC} (found in tkConfig.sh) when trying to guess where tk.h might be [Patch 1960628]. 2009-03-11 Joe English * tcl.m4: Allow ${SHLIB_SUFFIX} to be overridden at configure-time [Patch 1960628]. Also fix some comment typos, and an uninitialized variable bug-waiting-to-happen. 2008-12-21 Jan Nijtmans * tcl.m4: [Bug 2073255] Tcl_GetString(NULL) doesn't crash on HP-UX (this bug report was for Tcl, but holds for TEA as well.) 2008-12-20 Daniel Steffen * tcl.m4: sync with tdbc tcl.m4 changes (SunOS-5.11): Sun cc SHLIB_LD: use LDFLAGS_DEFAULT instead of LDFLAGS 2008-12-02 Jeff Hobbs *** Bump to TEA_VERSION 3.7 *** * tcl.m4: in private header check, check for Port.h instead of Int.h to ensure all private headers are available. 2008-11-04 Daniel Steffen * tcl.m4 (Darwin): sync TEA_PRIVATE_TK_HEADERS handling of Tk.framework PrivateHeaders with TEA_PRIVATE_TCL_HEADERS. 2008-11-04 Jeff Hobbs * tcl.m4 (TEA_PATH_TCLCONFIG, TEA_PATH_TKCONFIG): exit with error when tclConfig.sh cannot be found. [Bug #1997760] (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): allow for finding the headers installed in the public areas, e.g. a result of make install-private-headers. [Bug #1631922] 2008-08-12 Daniel Steffen * tcl.m4 (Darwin): link shlib with current and compatiblity version flags; look for libX11.dylib when searching for X11 libraries. 2008-06-12 Daniel Steffen * tcl.m4 (SunOS-5.11): fix 64bit amd64 support with gcc & Sun cc. 2008-03-27 Daniel Steffen * tcl.m4 (SunOS-5.1x): fix 64bit support for Sun cc. [Bug 1921166] 2008-02-01 Donal K. Fellows * tcl.m4 (TEA_CONFIG_CFLAGS): Updated to work at least in part with more modern VC versions. Currently just made the linker flags more flexible; more work may be needed. 2007-10-26 Daniel Steffen * tcl.m4 (Darwin): add support for 64-bit X11. 2007-10-23 Jeff Hobbs *** Tagged tea-3-branch to start TEA 4 development on HEAD *** 2007-09-17 Joe English * tcl.m4: use '${CC} -shared' instead of 'ld -Bshareable' to build shared libraries on current NetBSDs [Bug 1749251]. 2007-09-15 Daniel Steffen * tcl.m4: replace all direct references to compiler by ${CC} to enable CC overriding at configure & make time. (SunOS-5.1x): replace direct use of '/usr/ccs/bin/ld' in SHLIB_LD by 'cc' compiler driver. 2007-08-08 Jeff Hobbs * tcl.m4: check Ttk dir for Tk private headers (8.5). Add some comments to other bits. 2007-06-25 Jeff Hobbs * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): move where / is added. 2007-06-13 Jeff Hobbs * tcl.m4: fix --with-tkinclude alignment. [Bug 1506111] 2007-06-06 Daniel Steffen * tcl.m4 (Darwin): fix 64bit arch removal in fat 32&64bit builds. 2007-05-18 Donal K. Fellows * tcl.m4: Added quoting so that paths with spaces cause fewer problems. 2007-03-07 Daniel Steffen * tcl.m4 (Darwin): s/CFLAGS/CPPFLAGS/ in -mmacosx-version-min check. 2007-02-15 Jeff Hobbs * tcl.m4: correct private header check to search in generic subdir 2007-02-09 Jeff Hobbs *** Bump to TEA_VERSION 3.6 *** * tcl.m4: correct -d to -f (TEA_CONFIG_CFLAGS): SHLIB_SUFFIX is .so on HP ia64 [Bug 1615058] 2007-02-08 Jeff Hobbs * tcl.m4 (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): check that the dirs actually have private headers. [Bug 1631922] 2007-02-04 Daniel Steffen * tcl.m4: add caching to -pipe check. 2007-01-25 Daniel Steffen * tcl.m4: integrate CPPFLAGS into CFLAGS as late as possible and move (rather than duplicate) -isysroot flags from CFLAGS to CPPFLAGS to avoid errors about multiple -isysroot flags from some older gcc builds. 2006-01-19 Daniel Steffen * tcl.m4: ensure CPPFLAGS env var is used when set. [Bug 1586861] (Darwin): add -isysroot and -mmacosx-version-min flags to CPPFLAGS when present in CFLAGS to avoid discrepancies between what headers configure sees during preprocessing tests and compiling tests. 2006-12-19 Daniel Steffen * tcl.m4 (Darwin): --enable-64bit: verify linking with 64bit -arch flag succeeds before enabling 64bit build. 2006-12-16 Daniel Steffen * tcl.m4 (Linux): fix previous change to use makefile variable LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile are picked up. 2006-11-26 Daniel Steffen * tcl.m4 (Linux): --enable-64bit support. [Patch 1597389], [Bug 1230558] 2006-08-18 Daniel Steffen * tcl.m4 (Darwin): add support for --enable-64bit on x86_64, for universal builds including x86_64 and for use of -mmacosx-version-min instead of MACOSX_DEPLOYMENT_TARGET. For Tk extensions, remove 64-bit arch flags from CFLAGS like in the Tk configure, as neither TkAqua nor TkX11 can be built for 64-bit at present. 2006-03-28 Jeff Hobbs * tcl.m4: []-quote AC_DEFUN functions. (TEA_PATH_TKCONFIG): Fixed Windows-specific check for tkConfig.sh. (TEA_MAKE_LIB): Prepend 'lib' for Windows-gcc configs. 2006-03-07 Joe English * tcl.m4: Set SHLIB_LD_FLAGS='${LIBS}' on NetBSD, as per the other *BSD variants [Bug 1334613]. 2006-01-25 Jeff Hobbs *** Bump to TEA version 3.5 *** * tcl.m4: keep LD_SEARCH_FLAGS and CC_SEARCH_FLAGS synchronous with core tcl.m4 meaning. 2006-01-24 Daniel Steffen * tcl.m4 (Darwin): use makefile variable LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile are picked up. [Bug 1403343] 2006-01-23 Jeff Hobbs * tcl.m4: add C:/Tcl/lib and C:/Progra~1/Tcl/lib dirs to check for *Config.sh on Windows. [Bug 1407544] 2006-01-23 Daniel Steffen * tcl.m4 (Darwin): for Tk extensions, remove -arch ppc64 from CFLAGS like in the Tk configure, as neither TkAqua nor TkX11 can be built for 64bit at present (no 64bit GUI libraries). 2006-01-22 Jeff Hobbs * tcl.m4: restore system=windows on Windows. Remove error if 'ar' isn't found (it may not be on Windows). Do not add -lxnet or define _XOPEN_SOURCE on HP-UX by default. Ensure the C|LDFLAGS_DEFAULT gets the fully sub'd value at configure time. 2006-01-10 Daniel Steffen * tcl.m4: add caching, use AC_CACHE_CHECK instead of AC_CACHE_VAL where possible, consistent message quoting, sync relevant tcl/unix/tcl.m4 HEAD changes and gratuitous formatting differences (notably sunc removal of support for for ancient BSD's, IRIX 4, RISCos and Ultrix by kennykb), Darwin improvements to TEA_LOAD_*CONFIG to make linking work against Tcl/Tk frameworks installed in arbitrary location, change TEA_PROG_* search order (look in *_BIN_DIR parents before *_PREFIX). 2006-01-05 Jeff Hobbs * tcl.m4: add dkf's system config refactor 2006-01-04 Jeff Hobbs * tcl.m4: remove extraneous ' that causes bash 3.1 to choke 2005-12-19 Joe English * tcl.m4 (TEA_PATH_TCLCONFIG &c): Look for tclConfig.sh &c in ${libdir}, where they are installed by default [Patch #1377407]. 2005-12-05 Don Porter * tcl.m4 (TEA_PUBLIC_*_HEADERS): Better support for finding header files for uninstalled Tcl and Tk. 2005-12-02 Jeff Hobbs * tcl.m4: correctly bump TEA_VERSION var to 3.4 2005-12-01 Daniel Steffen * unix/tcl.m4 (Darwin): fixed error when MACOSX_DEPLOYMENT_TARGET unset 2005-11-29 Jeff Hobbs * tcl.m4: *** Bump to TEA version 3.4 *** Add Windows x64 build support. Remove TEA_PATH_NOSPACE and handle the problem with ""s where necessary - the macro relied on TCLSH_PROG which didn't work for cross-compiles. 2005-11-27 Daniel Steffen * tcl.m4 (Darwin): add 64bit support, add CFLAGS to SHLIB_LD to support passing -isysroot in env(CFLAGS) to configure (flag can't be present twice, so can't be in both CFLAGS and LDFLAGS during configure), don't use -prebind when deploying on 10.4. (TEA_ENABLE_LANGINFO, TEA_TIME_HANDLER): add/fix caching. 2005-10-30 Daniel Steffen * tcl.m4: fixed two tests for TEA_WINDOWINGSYSTEM = "aqua" that should have been for `uname -s` = "Darwin" instead; added some missing quoting. (TEA_PROG_TCLSH, TEA_PROG_WISH): fix incorrect assumption that install location of tclConfig.sh/tkConfig.sh allows to determine the tclsh/wish install dir via ../bin. Indeed tcl/tk can be configured with arbitrary --libdir and --bindir (independent of prefix) and such a configuration is in fact standard with Darwin framework builds. At least now also check ${TCL_PREFIX}/bin resp. ${TK_PREFIX}/bin for presence of tclsh resp. wish (if tcl/tk have been configured with arbitrary --bindir, this will still not find them, for a general solution *Config.sh would need to contain the values of bindir/libdir/includedir passed to configure). 2005-10-07 Jeff Hobbs * tcl.m4: Fix Solaris 5.10 check and Solaris AMD64 64-bit builds. 2005-10-04 Jeff Hobbs * tcl.m4 (TEA_PRIVATE_TCL_HEADERS): add / to finish sed macro (TEA_ENABLE_THREADS): don't check for pthread_attr_setstacksize func 2005-09-13 Jeff Hobbs * tcl.m4: *** Update to TEA version 3.3 *** define TEA_WINDOWINGSYSTEM in TEA_LOAD_TKCONFIG. Make --enable-threads the default (users can --disable-threads). Improve AIX ${CC}_r fix to better check existing ${CC} value. Do the appropriate evals to not require the *TOP_DIR_NATIVE vars be set for extensions that use private headers. Make aqua check for Xlib compat headers the same as win32. 2005-07-26 Mo DeJong * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH, TEA_PROG_WISH, TEA_BUILD_WISH): Remove TEA_BUILD_TCLSH and TEA_BUILD_WISH because of complaints that it broke the build when only an installed version of Tcl was available at extension build time. The TEA_PROG_TCLSH and TEA_PROG_WISH macros will no longer search the path at all. The build tclsh or installed tclsh shell will now be found by TEA_PROG_TCLSH. 2005-07-24 Mo DeJong * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH, TEA_PROG_WISH, TEA_BUILD_WISH): Split confused search for tclsh on PATH and build and install locations into two macros. TEA_PROG_TCLSH and TEA_PROG_WISH search the system PATH for an installed tclsh or wish. The TEA_BUILD_TCLSH and TEA_BUILD_WISH macros determine the name of tclsh or wish in the Tcl or Tk build directory even if tclsh or wish has not yet been built. [Tcl bug 1160114] [Tcl patch 1244153] 2005-06-23 Daniel Steffen * tcl.m4 (TEA_PRIVATE_TK_HEADERS): add ${TK_SRC_DIR}/macosx to TK_INCLUDES when building against TkAqua. * tcl.m4 (TEA_PATH_X): fixed missing comma in AC_DEFINE * tcl.m4: changes to better support framework builds of Tcl and Tk out of the box: search framework install locations for *Config.sh, and if in presence of a framework build, use the framework's Headers and PrivateHeaders directories for public and private includes. [FR 947735] 2005-06-18 Daniel Steffen * tcl.m4 (Darwin): add -headerpad_max_install_names to LDFLAGS to ensure we can always relocate binaries with install_name_tool. 2005-06-04 Daniel Steffen * tcl.m4 (TEA_PATH_X): for TEA_WINDOWINGSYSTEM == aqua, check if xlib compat headers are available in tkheaders location, otherwise add xlib sourcedir to TK_XINCLUDES. 2005-04-25 Daniel Steffen * tcl.m4: added AC_DEFINE* descriptions (from core tcl.m4) to allow use with autoheader. (Darwin): added configure checks for recently added linker flags -single_module and -search_paths_first to allow building with older tools (and on Mac OS X 10.1), use -single_module in SHLIB_LD. (TEA_MISSING_POSIX_HEADERS): added caching of dirent.h check. (TEA_BUGGY_STRTOD): added caching (sync with core tcl.m4). 2005-03-24 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): use Tcl header defaults for wide int type only on Windows when __int64 is detected as valid. 2005-03-24 Don Porter * README.txt: Update reference to "SC_* macros" to "TEA_* macros". * tcl.m4: Incorporated recent improvements in SC_PATH_TCLCONFIG and SC_PATH_TKCONFIG into TEA_PATH_TCLCONFIG and TEA_PATH_TKCONFIG. Corrected search path in TEA_PATH_CONFIG and added AC_SUBST($1_BIN_DIR) to TEA_LOAD_CONFIG so that packages that load the configuration of another package can know where they loaded it from. 2005-03-18 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): correct 2005-03-17 change to have variant LD_SEARCH_FLAGS for gcc and cc builds. * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): correct x-compile check. 2005-03-17 Jeff Hobbs * tcl.m4: Correct gcc build and HP-UX-11. 2005-02-08 Jeff Hobbs * tcl.m4 (TEA_ADD_LIBS): don't touch lib args starting with -. (TEA_CONFIG_CFLAGS): only define _DLL for CE in shared build. (TEA_MAKE_LIB): set RANLIB* to : on Windows (it's not needed). 2005-02-01 Jeff Hobbs * tcl.m4: redo of 2005-01-27 changes to correctly handle paths with spaces. Win/CE and Win/64 builds now require a prebuilt tclsh to handle conversion to short pathnames. This is done in the new TEA_PATH_NOSPACE macro. For Win/CE|64, make CC just the compiler and move the necessary includes to CFLAGS. (TEA_CONFIG_CFLAGS): Add Solaris 64-bit gcc build support. (TEA_PROG_TCLSH, TEA_PROG_WISH): Allow TCLSH_PROG and WISH_PROG to be set in the env and prevent resetting. (TEA_ADD_LIBS): On Windows using GCC (mingw), convert foo.lib args to -lfoo, for use with mingw. *** POTENTIAL INCOMPATABILITY *** (TEA_CONFIG_CFLAGS): Fix AIX gcc builds to work out-of-box. Bumped TEA to 3.2. 2005-01-27 Jeff Hobbs * tcl.m4: remove cygpath calls to support msys. Update base CE build assumption to "420,ARMV4,ARM,Pocket PC 2003". Make STLIB_LD use $LINKBIN -lib. 2005-01-25 Daniel Steffen * tcl.m4 (Darwin): fixed bug with static build linking to dynamic library in /usr/lib etc instead of linking to static library earlier in search path. [Tcl Bug 956908] Removed obsolete references to Rhapsody. 2004-12-29 Jeff Hobbs * tcl.m4: Updates for VC7 compatibility, fixing CFLAGS and LDFLAGS options, using better default -O levels. [Bug 1092952, 1091967] 2004-12-29 Joe English * tcl.m4: Do not use ${DBGX} suffix when building shared libraries [patch #1081595, TIP #34] 2004-09-07 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): support eVC4 Win/CE builds 2004-08-10 Jeff Hobbs * tcl.m4 (TEA_INIT, TEA_PREFIX): update handling of exec_prefix to work around subdir configures since autoconf only propagates the prefix (not exec_prefix). 2004-07-23 Daniel Steffen * tcl.m4 (TEA_CONFIG_CFLAGS): Darwin section: brought inline with Tcl 8.5 HEAD config, removed core specific & obsolete settings. 2004-07-22 Jeff Hobbs * tcl.m4 (TEA_PATH_X): check in TK_DEFS for MAC_OSX_TK to see if we are compiling on Aqua. Add TEA_WINDOWINGSYSTEM var that reflects 'tk windowingsystem' value. 2004-07-16 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): force a threaded build when building against a threaded core. (CFLAGS_WARNING): Remove -Wconversion for gcc builds (TEA_CONFIG_CFLAGS): Reorder configure.in for better 64-bit build configuration, replacing EXTRA_CFLAGS with CFLAGS. [Bug #874058] Update to latest Tcl 8.5 head config settings. Call this TEA version 3.1. 2004-04-29 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): replace AC_TRY_RUN test with AC_TRY_COMPILE for the long vs. long long check. (kenny) 2004-04-26 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): update against core tcl.m4 to define TCL_WIDE_INT_IS_LONG if 'using long'. 2004-03-19 Jeff Hobbs * tcl.m4: correct Windows builds getting LDFLAGS info in MAKE_LIB 2004-02-11 Jeff Hobbs * tcl.m4: correct TCL_INCLUDES for private headers on Windows - it doesn't need the eval. 2004-02-10 Jeff Hobbs * tcl.m4: don't require TK_INCLUDES and TCL_INCLUDES to have the DIR_NATIVE vars defined when using private headers on unix. Allow $... to TEA_ADD_SOURCES for constructs like TEA_ADD_SOURCES([\$(WIN_OBJECTS)]), that allow the developer to place more in the Makefile.in. tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and CHECK on limits.h 2003-12-10 Jeff Hobbs * Makefile.in: added TEA_ADD_LIBS, TEA_ADD_INCLUDES and * configure: TEA_ADD_CFLAGS to configurable parameters with * configure.in: PKG_* equivs in the Makefile. This allows the * tclconfig/tcl.m4: user to worry less about actual magic VAR names. Corrected Makefile.in to note that TEA_ADD_TCL_SOURCES requires exact file names. 2003-12-09 Jeff Hobbs * tcl.m4: updated OpenBSD support based on [Patch #775246] (cassoff) 2003-12-05 Jeff Hobbs * configure: * configure.in: * Makefile.in (VPATH): readd $(srcdir) to front of VPATH as the first part of VPATH can get chopped off. Change .c.$(OBJEXT) rule to .c.@OBJEXT@ to support more makes. * tclconfig/tcl.m4: add TEA_ADD_STUB_SOURCES to support libstub generation and TEA_ADD_TCL_SOURCES to replace RUNTIME_SOURCES as the way the user specifies library files. 2003-12-03 Jeff Hobbs * configure: Update of TEA spec to (hopefully) simplify * configure.in: some aspects of TEA by making use of more * Makefile.in: AC 2.5x features. Use PACKAGE_NAME (instead * generic/tclsample.c: of PACKAGE) and PACKAGE_VERSION (instead of * tclconfig/tcl.m4: VERSION) arguments to AC_INIT as the TEA package name and version. Provide a version argument to TEA_INIT - starting with 3.0. Drop all use of interior shell substs that older makefiles didn't like. Use PKG_* naming convention instead. Move specification of source files and public headers into configure.in with TEA_ADD_SOURCES and TEA_ADD_HEADERS. These will be munged during ./configure into the right obj file names (no $(SOURCES:.c=.obj) needed). There is almost nothing that should be touched in Makefile.in now for the developer. May want to add a TEA_ADD_TCL_SOURCES for the RUNTIME_SOURCES that remains. Use SHLID_LD_FLAGS (instead of SHLID_LDFLAGS) as Tcl does. Only specify the user requested LDFLAGS/CFLAGS in the Makefile, don't mention the _OPTIMIZE/_DEBUG variants. 2003-10-15 Jeff Hobbs * tcl.m4: create a TEA_SETUP_COMPILER_CC the precedes the TEA_SETUP_COMPILER macro. They are split so the check for CC occurs before any use of CC. Also add AC_PROG_CPP to the compiler checks. 2003-10-06 Jeff Hobbs * tcl.m4: Updated for autoconf 2.5x prereq. Where TCL_WIDE_INT_TYPE would be __int64, defer to the code checks in tcl.h, which also handles TCL_LL_MODIFIER* properly. 2003-04-22 Jeff Hobbs * tcl.m4: correct default setting of ARCH for WinCE builds. Correct \ escaping for CE sed macros. 2003-04-10 Jeff Hobbs * tcl.m4: replace $(syscal) construct with older `syscall` for systems where sh != bash. 2003-04-09 Jeff Hobbs * tcl.m4 (TEA_WITH_CELIB): add --enable-wince and --with-celib options for Windows/CE compilation support. Requires the Microsoft eMbedded SDK and Keuchel's celib emulation layer. 2003-02-18 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): Make sure -lpthread gets passed on the link line when checking for the pthread_attr_setstacksize symbol. (dejong) * tcl.m4 (TEA_SETUP_COMPILER): added default calls to TEA_TCL_EARLY_FLAGS, TEA_TCL_64BIT_FLAGS, TEA_MISSING_POSIX_HEADERS and TEA_BUGGY_STRTOD. 2003-02-14 Jeff Hobbs * tcl.m4: correct HP-UX ia64 --enable-64bit build flags 2003-01-29 Jeff Hobbs * tcl.m4: check $prefix/lib as well as $exec_prefix/lib when looking for tcl|tkConfig.sh, as this check is done before we would set exec_prefix when the user does not define it. 2003-01-21 Mo DeJong * tcl.m4 (TEA_CONFIG_CFLAGS): Fix build support for mingw, the previous implementation would use VC++ when compiling with mingw gcc. Don't pass -fPIC since gcc always compiles pic code under win32. Change some hard coded cases of gcc to ${CC}. 2002-10-15 Jeff Hobbs * tcl.m4: move the CFLAGS definition from TEA_ENABLE_SHARED to TEA_MAKE_LIB because setting too early confuses other AC_* macros. Correct the HP-11 SHLIB_LD_LIBS setting. * tcl.m4: add the CFLAGS definition into TEA_ENABLE_SHARED and make it pick up the env CFLAGS at configure time. 2002-10-09 Jeff Hobbs * tcl.m4: add --enable-symbols=mem option to enable TCL_MEM_DEBUG. Improved AIX 64-bit build support, allow it on AIX-4 as well. Enable 64-bit HP-11 compilation with gcc. Enable 64-bit IRIX64-6 cc build support. Correct FreeBSD thread library linkage. Add OSF1 static build support. Improve SunOS-5 shared build SHLIB_LD macro. 2002-07-20 Zoran Vasiljevic * tcl.m4: Added MINGW32 to list of systems checked for Windows build. Also, fixes some indentation issues with "--with-XXX" options. 2002-04-23 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): added USE_THREAD_ALLOC define to use new threaded allocatory by default on Unix for Tcl 8.4. (TEA_CONFIG_CFLAGS): corrected LD_SEARCH_FLAGS for FreeBSD-3+. 2002-04-22 Jeff Hobbs * tcl.m4 (TEA_SETUP_COMPILER): removed call to AC_CYGWIN so that we can use autoconf 2.5x as well as 2.13. This prevents us from being able to warn against the use of cygwin gcc at configure time, but allows autoconf 2.5x, which is what is shipped with most newer systems. 2002-04-11 Jeff Hobbs * tcl.m4: Enabled COFF as well as CV style debug info with --enable-symbols to allow Dr. Watson users to see function info. More info on debugging levels can be obtained at: http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp 2002-04-03 Jeff Hobbs * tcl.m4: change all SC_* macros to TEA_*. The SC_ was for Scriptics, which is no more. TEA represents a better, independent prefix that won't need changing. Added preliminary mingw gcc support. [Patch #538772] Added TEA_PREFIX macro that handles defaulting the prefix and exec_prefix vars to those used by Tcl if none were specified. Added TEA_SETUP_COMPILER macro that encompasses the AC_PROG_CC check and several other basic AC_PROG checks needed for making executables. This greatly simplifies user's configure.in files. Collapsed AIX-5 defines into AIX-* with extra checks for doing the ELF stuff on AIX-5-ia64. Updated TEA_ENABLE_THREADS to take an optional arg to allow switching it on by default (for Thread) and add sanity checking to warn the user if configuring threads incompatibly. 2002-03-29 Jeff Hobbs * tcl.m4: made sure that SHLIB_LDFLAGS was set to LDFLAGS_DEFAULT. Removed --enable-64bit support for AIX-4 because it wasn't correct. Added -MT or -MD Windows linker switches to properly support symbols-enabled builds. 2002-03-28 Jeff Hobbs * tcl.m4: called AC_MSG_ERROR when SC_TEA_INIT wasn't called first instead of calling it as that inlines it each time in shell code. Changed Windows CFLAGS_OPTIMIZE to use -O2 instead of -Oti. Noted TCL_LIB_VERSIONS_OK=nodots for Windows builds. A few changes to support itcl (and perhaps others): Added support for making your own stub libraries to SC_MAKE_LIB. New SC_PATH_CONFIG and SC_LOAD_CONFIG that take a package name arg and find that ${pkg}Config.sh file. itk uses this for itcl. 2002-03-27 Jeff Hobbs * tcl.m4: made SC_LOAD_TKCONFIG recognize when working with a Tk build dir setup. Added EXTRA_CFLAGS and SHLIB_LD_LIBS substs to SC_CONFIG_CFLAGS. Added XLIBSW onto LIBS when it is defined. Remove TCL_LIBS from MAKE_LIB and correctly use SHLIB_LD_LIBS instead to not rely as much on tclConfig.sh cached info. Add TK_BIN_DIR to paths to find wish in SC_PROG_WISH. These move towards making TEA much more independent of *Config.sh. 2002-03-19 Jeff Hobbs * tcl.m4: corrected forgotten (UN)SHARED_LIB_SUFFIX and SHLIB_SUFFIX defines for Win. (SC_PATH_X): made this only do the check on unix platforms. 2002-03-12 Jeff Hobbs * README.txt: updated to reflect fewer files 2002-03-06 Jeff Hobbs * config.guess (removed): * config.sub (removed): removed unnecessary files * installFile.tcl (removed): * mkinstalldirs (removed): these aren't really necessary for making TEA work * tcl.m4 (SC_PUBLIC_TCL_HEADERS, SC_PUBLIC_TK_HEADERS): don't check /usr(/local)/include for includes on Windows when not using gcc 2002-03-05 Jeff Hobbs * tcl.m4: added warnings on Windows, removed RELPATH define and added TCL_LIBS to MAKE_LIB macro. This import represents 2.0.0, or a new start at attempting to make TEA much easier for C extension developers. **** moved from tclpro project to core tcl project, **** **** renamed to 'tclconfig' **** 2001-03-15 Karl Lehenbauer * installFile.tcl: Added updating of the modification time of the target file whether we overwrote it or decided that it hadn't changed. This was necessary for us to be able to determine whether or not a module install touched the file. 2001-03-08 Karl Lehenbauer * installFile.tcl: Added support for converting new-style (1.1+) Cygnus drive paths to Tcl-style. 2001-01-15 * tcl.m4: Added FreeBSD clause. 2001-01-03 * tcl.m4: Fixed typo in SC_LIB_SPEC where it is checking for exec-prefix. 2000-12-01 * tcl.m4: Concatenated most of the Ajuba acsite.m4 file so we don't need to modify the autoconf installation. * config.guess: * config.sub: * installFile.tcl: Added files from the itcl config subdirectory, which should go away. 2000-7-29 * Fixed the use of TCL_SRC_DIR and TK_SRC_DIR within TCL_PRIVATE_INCLUDES and TK_PRIVATE_INCLUDES to match their recent change from $(srcdir) to $(srcdir)/.. saods9/tclcheckdns/tclconfig/install-sh000755 000765 000000 00000033054 12260347267 020643 0ustar00joyewheel000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2011-04-20.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -S $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -S) stripcmd="$stripprog $2" shift;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: saods9/tclcheckdns/tclconfig/README.txt000644 000765 000000 00000001454 12260347267 020334 0ustar00joyewheel000000 000000 These files comprise the basic building blocks for a Tcl Extension Architecture (TEA) extension. For more information on TEA see: http://www.tcl.tk/doc/tea/ This package is part of the Tcl project at SourceForge, and latest sources should be available there: http://tcl.sourceforge.net/ This package is a freely available open source package. You can do virtually anything you like with it, such as modifying it, redistributing it, and selling it either in whole or in part. CONTENTS ======== The following is a short description of the files you will find in the sample extension. README.txt This file install-sh Program used for copying binaries and script files to their install locations. tcl.m4 Collection of Tcl autoconf macros. Included by a package's aclocal.m4 to define TEA_* macros. saods9/tclcheckdns/tclconfig/tcl.m4000644 000765 000000 00000404642 12562731013 017657 0ustar00joyewheel000000 000000 # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. AC_PREREQ(2.57) dnl TEA extensions pass us the version of TEA they think they dnl are compatible with (must be set in TEA_INIT below) dnl TEA_VERSION="3.9" # Possible values for key variables defined: # # TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem') # TEA_PLATFORM - windows unix # #------------------------------------------------------------------------ # TEA_PATH_TCLCONFIG -- # # Locate the tclConfig.sh file and perform a sanity check on # the Tcl compile flags # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tcl=... # # Defines the following vars: # TCL_BIN_DIR Full path to the directory containing # the tclConfig.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_TCLCONFIG], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), with_tclconfig="${withval}") AC_MSG_CHECKING([for Tcl configuration]) AC_CACHE_VAL(ac_cv_c_tclconfig,[ # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_PATH_TKCONFIG -- # # Locate the tkConfig.sh file # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tk=... # # Defines the following vars: # TK_BIN_DIR Full path to the directory containing # the tkConfig.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_TKCONFIG], [ # # Ok, lets find the tk configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tk # if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), with_tkconfig="${withval}") AC_MSG_CHECKING([for Tk configuration]) AC_CACHE_VAL(ac_cv_c_tkconfig,[ # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ../tk \ `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tk \ `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_TCLCONFIG -- # # Load the tclConfig.sh file # # Arguments: # # Requires the following vars to be set: # TCL_BIN_DIR # # Results: # # Substitutes the following vars: # TCL_BIN_DIR # TCL_SRC_DIR # TCL_LIB_FILE #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TCLCONFIG], [ AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then AC_MSG_RESULT([loading]) . "${TCL_BIN_DIR}/tclConfig.sh" else AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh]) fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" AC_SUBST(TCL_VERSION) AC_SUBST(TCL_PATCH_LEVEL) AC_SUBST(TCL_BIN_DIR) AC_SUBST(TCL_SRC_DIR) AC_SUBST(TCL_LIB_FILE) AC_SUBST(TCL_LIB_FLAG) AC_SUBST(TCL_LIB_SPEC) AC_SUBST(TCL_STUB_LIB_FILE) AC_SUBST(TCL_STUB_LIB_FLAG) AC_SUBST(TCL_STUB_LIB_SPEC) AC_MSG_CHECKING([platform]) hold_cc=$CC; CC="$TCL_CC" AC_TRY_COMPILE(,[ #ifdef _WIN32 #error win32 #endif ], TEA_PLATFORM="unix", TEA_PLATFORM="windows" ) CC=$hold_cc AC_MSG_RESULT($TEA_PLATFORM) # The BUILD_$pkg is to define the correct extern storage class # handling when making this package AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [], [Building extension source?]) # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: AC_SUBST(CLEANFILES) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_DEFS) AC_SUBST(TCL_EXTRA_CFLAGS) AC_SUBST(TCL_LD_FLAGS) AC_SUBST(TCL_SHLIB_LD_LIBS) ]) #------------------------------------------------------------------------ # TEA_LOAD_TKCONFIG -- # # Load the tkConfig.sh file # # Arguments: # # Requires the following vars to be set: # TK_BIN_DIR # # Results: # # Sets the following vars that should be in tkConfig.sh: # TK_BIN_DIR #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TKCONFIG], [ AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh]) if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then AC_MSG_RESULT([loading]) . "${TK_BIN_DIR}/tkConfig.sh" else AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh]) fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" # TEA specific: Ensure windowingsystem is defined if test "${TEA_PLATFORM}" = "unix" ; then case ${TK_DEFS} in *MAC_OSX_TK*) AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?]) TEA_WINDOWINGSYSTEM="aqua" ;; *) TEA_WINDOWINGSYSTEM="x11" ;; esac elif test "${TEA_PLATFORM}" = "windows" ; then TEA_WINDOWINGSYSTEM="win32" fi AC_SUBST(TK_VERSION) AC_SUBST(TK_BIN_DIR) AC_SUBST(TK_SRC_DIR) AC_SUBST(TK_LIB_FILE) AC_SUBST(TK_LIB_FLAG) AC_SUBST(TK_LIB_SPEC) AC_SUBST(TK_STUB_LIB_FILE) AC_SUBST(TK_STUB_LIB_FLAG) AC_SUBST(TK_STUB_LIB_SPEC) # TEA specific: AC_SUBST(TK_LIBS) AC_SUBST(TK_XINCLUDES) ]) #------------------------------------------------------------------------ # TEA_PROG_TCLSH # Determine the fully qualified path name of the tclsh executable # in the Tcl build directory or the tclsh installed in a bin # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # TCLSH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_TCLSH], [ AC_MSG_CHECKING([for tclsh]) if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="${TCL_BIN_DIR}/tclsh" fi else # tclConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}" fi list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TCL_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${TCLSH_PROG}" ; then REAL_TCL_BIN_DIR="`cd "$i"; pwd`/" break fi done TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}" fi AC_MSG_RESULT([${TCLSH_PROG}]) AC_SUBST(TCLSH_PROG) ]) #------------------------------------------------------------------------ # TEA_PROG_WISH # Determine the fully qualified path name of the wish executable # in the Tk build directory or the wish installed in a bin # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # WISH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_WISH], [ AC_MSG_CHECKING([for wish]) if test -f "${TK_BIN_DIR}/Makefile" ; then # tkConfig.sh is in Tk build directory if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="${TK_BIN_DIR}/wish" fi else # tkConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}" fi list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TK_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${WISH_PROG}" ; then REAL_TK_BIN_DIR="`cd "$i"; pwd`/" break fi done WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}" fi AC_MSG_RESULT([${WISH_PROG}]) AC_SUBST(WISH_PROG) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-shared=yes|no # # Defines the following vars: # STATIC_BUILD Used for building import/export libraries # on Windows. # # Sets the following vars: # SHARED_BUILD Value of 1 or 0 #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SHARED], [ AC_MSG_CHECKING([how to build libraries]) AC_ARG_ENABLE(shared, AC_HELP_STRING([--enable-shared], [build and link with shared libraries (default: on)]), [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_shared+set}" = set; then enableval="$enable_shared" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" ; then AC_MSG_RESULT([shared]) SHARED_BUILD=1 else AC_MSG_RESULT([static]) SHARED_BUILD=0 AC_DEFINE(STATIC_BUILD, 1, [Is this a static build?]) fi AC_SUBST(SHARED_BUILD) ]) #------------------------------------------------------------------------ # TEA_ENABLE_THREADS -- # # Specify if thread support should be enabled. If "yes" is specified # as an arg (optional), threads are enabled by default, "no" means # threads are disabled. "yes" is the default. # # TCL_THREADS is checked so that if you are compiling an extension # against a threaded core, your extension must be compiled threaded # as well. # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-threads # # Sets the following vars: # THREADS_LIBS Thread library(s) # # Defines the following vars: # TCL_THREADS # _REENTRANT # _THREAD_SAFE #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_THREADS], [ AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], [build with threads]), [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_threads+set}" = set; then enableval="$enable_threads" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then TCL_THREADS=1 if test "${TEA_PLATFORM}" != "windows" ; then # We are always OK on Windows, so check what this platform wants: # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention AC_DEFINE(USE_THREAD_ALLOC, 1, [Do we want to use the threaded memory allocator?]) AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) if test "`uname -s`" = "SunOS" ; then AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) fi AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?]) AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no) if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] AC_CHECK_LIB(pthread, __pthread_mutex_init, tcl_ok=yes, tcl_ok=no) fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else AC_CHECK_LIB(pthreads, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else AC_CHECK_LIB(c, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "no"; then AC_CHECK_LIB(c_r, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -pthread" else TCL_THREADS=0 AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled]) fi fi fi fi fi else TCL_THREADS=0 fi # Do checking message here to not mess up interleaved configure output AC_MSG_CHECKING([for building with threads]) if test "${TCL_THREADS}" = 1; then AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?]) AC_MSG_RESULT([yes (default)]) else AC_MSG_RESULT([no]) fi # TCL_THREADS sanity checking. See if our request for building with # threads is the same as the way Tcl was built. If not, warn the user. case ${TCL_DEFS} in *THREADS=1*) if test "${TCL_THREADS}" = "0"; then AC_MSG_WARN([ Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads.]) fi ;; *) if test "${TCL_THREADS}" = "1"; then AC_MSG_WARN([ --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core.]) fi ;; esac AC_SUBST(TCL_THREADS) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SYMBOLS -- # # Specify if debugging symbols should be used. # Memory (TCL_MEM_DEBUG) debugging can also be enabled. # # Arguments: # none # # TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives # the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted. # Requires the following vars to be set in the Makefile: # CFLAGS_DEFAULT # LDFLAGS_DEFAULT # # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true # Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false # LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true # Sets to $(LDFLAGS_OPTIMIZE) if false # DBGX Formerly used as debug library extension; # always blank now. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SYMBOLS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_CONFIG_CFLAGS]) AC_MSG_CHECKING([for build with symbols]) AC_ARG_ENABLE(symbols, AC_HELP_STRING([--enable-symbols], [build with debugging symbols (default: off)]), [tcl_ok=$enableval], [tcl_ok=no]) DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" AC_MSG_RESULT([no]) else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then AC_MSG_RESULT([yes (standard debugging)]) fi fi # TEA specific: if test "${TEA_PLATFORM}" != "windows" ; then LDFLAGS_DEFAULT="${LDFLAGS}" fi AC_SUBST(CFLAGS_DEFAULT) AC_SUBST(LDFLAGS_DEFAULT) AC_SUBST(TCL_DBGX) if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?]) fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then AC_MSG_RESULT([enabled symbols mem debugging]) else AC_MSG_RESULT([enabled $tcl_ok debugging]) fi fi ]) #------------------------------------------------------------------------ # TEA_ENABLE_LANGINFO -- # # Allows use of modern nl_langinfo check for better l10n. # This is only relevant for Unix. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_LANGINFO], [ AC_ARG_ENABLE(langinfo, AC_HELP_STRING([--enable-langinfo], [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]), [langinfo_ok=$enableval], [langinfo_ok=yes]) HAVE_LANGINFO=0 if test "$langinfo_ok" = "yes"; then AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no]) fi AC_MSG_CHECKING([whether to use nl_langinfo]) if test "$langinfo_ok" = "yes"; then AC_CACHE_VAL(tcl_cv_langinfo_h, [ AC_TRY_COMPILE([#include ], [nl_langinfo(CODESET);], [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])]) AC_MSG_RESULT([$tcl_cv_langinfo_h]) if test $tcl_cv_langinfo_h = yes; then AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?]) fi else AC_MSG_RESULT([$langinfo_ok]) fi ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the # "uname" command. # # Arguments: # none # # Results: # Defines the following var: # # system - System/platform/version identification code. #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_SYSTEM], [ AC_CACHE_CHECK([system version], tcl_cv_sys_version, [ # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then AC_MSG_WARN([can't find uname command]) tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi ]) system=$tcl_cv_sys_version ]) #-------------------------------------------------------------------- # TEA_CONFIG_CFLAGS # # Try to determine the proper flags to pass to the compiler # for building shared libraries and other such nonsense. # # Arguments: # none # # Results: # # Defines and substitutes the following vars: # # DL_OBJS, DL_LIBS - removed for TEA, only needed by core. # LDFLAGS - Flags to pass to the compiler when linking object # files into an executable application binary such # as tclsh. # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. Could # be the same as CC_SEARCH_FLAGS if ${CC} is used to link. # CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically # goes at the end of the "ld" commands that build # shared libraries. The value of the symbol defaults to # "${LIBS}" if all of the dependent libraries should # be specified when creating a shared library. If # dependent libraries should not be specified (as on # SunOS 4.x, where they cause the link to fail, or in # general if Tcl and Tk aren't themselves shared # libraries), then this symbol has an empty string # as its value. # SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable # extensions. An empty string means we don't know how # to use shared libraries on this platform. # LIB_SUFFIX - Specifies everything that comes after the "libfoo" # in a static or shared library name, using the $PACKAGE_VERSION variable # to put the version in the right place. This is used # by platforms that need non-standard library names. # Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs # to have a version after the .so, and ${PACKAGE_VERSION}.a # on AIX, since a shared library needs to have # a .a extension whereas shared objects for loadable # extensions have a .so extension. Defaults to # ${PACKAGE_VERSION}${SHLIB_SUFFIX}. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_CFLAGS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # Step 0.a: Enable 64 bit support? AC_MSG_CHECKING([if 64bit support is requested]) AC_ARG_ENABLE(64bit, AC_HELP_STRING([--enable-64bit], [enable 64bit support (default: off)]), [do64bit=$enableval], [do64bit=no]) AC_MSG_RESULT([$do64bit]) # Step 0.b: Enable Solaris 64 bit VIS support? AC_MSG_CHECKING([if 64bit Sparc VIS support is requested]) AC_ARG_ENABLE(64bit-vis, AC_HELP_STRING([--enable-64bit-vis], [enable 64bit Sparc VIS support (default: off)]), [do64bitVIS=$enableval], [do64bitVIS=no]) AC_MSG_RESULT([$do64bitVIS]) # Force 64bit on with VIS AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes]) # Step 0.c: Check if visibility support is available. Do this here so # that platform specific alternatives can be used below if this fails. AC_CACHE_CHECK([if compiler supports visibility "hidden"], tcl_cv_cc_visibility_hidden, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" AC_TRY_LINK([ extern __attribute__((__visibility__("hidden"))) void f(void); void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], [disable rpath support (default: on)]), [doRpath=$enableval], [doRpath=yes]) AC_MSG_RESULT([$doRpath]) # TEA specific: Cross-compiling options for Windows/CE builds? AS_IF([test "${TEA_PLATFORM}" = windows], [ AC_MSG_CHECKING([if Windows/CE build is requested]) AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) # Set the variable "system" to hold the name and version number # for the system. TEA_CONFIG_SYSTEM # Require ranlib early so we can override it in special cases below. AC_REQUIRE([AC_PROG_RANLIB]) # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g AS_IF([test "$GCC" = yes], [ CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" ], [ CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" ]) AC_CHECK_TOOL(AR, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION="1.0"]) case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs # MACHINE is IX86 for LINK, but this is used by the manifest, # which requires x86|amd64|ia64. MACHINE="X86" if test "$do64bit" != "no" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft Platform SDK" fi MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` PATH64="" case "$do64bit" in amd64|x64|yes) MACHINE="AMD64" ; # default to AMD64 64-bit build PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) AC_MSG_WARN([Ensure latest Platform SDK is installed]) do64bit="no" else AC_MSG_RESULT([ Using 64-bit $MACHINE mode]) do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" != "no" ; then AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible]) fi if test "$GCC" = "yes" ; then AC_MSG_ERROR([Windows/CE and GCC builds incompatible]) fi TEA_PATH_CELIB # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \ if ([$]1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \ if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \ if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]]) doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" != "no" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="\"${PATH64}/cl.exe\"" CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" RC="\"${MSSDK}/bin/rc.exe\"" lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" LINKBIN="\"${PATH64}/link.exe\"" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" # Avoid 'unresolved external symbol __security_cookie' # errors, c.f. http://support.microsoft.com/?id=894573 TEA_ADD_LIBS([bufferoverflowU.lib]) elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="\"${CEBINROOT}/cl.exe\"" else CC="\"${CEBINROOT}/cl${ARCH}.exe\"" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" arch=`echo ${ARCH} | awk '{print tolower([$]0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i) done AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version]) AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version]) CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode AC_CHECK_TOOL(RC, windres) CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" AC_CACHE_CHECK(for cross-compile version of gcc, ac_cv_cross, AC_TRY_COMPILE([ #ifdef __WIN32__ #error cross-compiler #endif ], [], ac_cv_cross=yes, ac_cv_cross=no) ) if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # and also # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx # This essentially turns it all on. LDFLAGS_DEBUG="-debug -debugtype:cv" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [ # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'` ;; esac AC_MSG_RESULT([Using $CC for compiling with threads]) ]) LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported with GCC on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" ]) ]) AS_IF([test "`uname -m`" = ia64], [ # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" AS_IF([test "$GCC" = yes], [ CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' ], [ CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' ]) LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ], [ AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared -Wl,-bexpall' ], [ SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" ]) SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"]) ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library AS_IF([test "`uname -m`" = ia64], [ SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi ], [ SHLIB_SUFFIX=".sl" ]) AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) AS_IF([test "$tcl_ok" = yes], [ LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" ]) AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ CFLAGS="$CFLAGS -z" # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" ]) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]) ;; esac ], [ do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" ]) ]) ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [ CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" ], [ case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported by gcc]) ], [ do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" ]) ]) ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) AS_IF([test $do64bit = yes], [ AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -m64" AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_m64 = yes], [ CFLAGS="$CFLAGS -m64" do64bit_ok=yes ]) ]) # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac AS_IF([test "${TCL_THREADS}" = "1"], [ # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" ]) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$[@]" SHLIB_SUFFIX=".so" LDFLAGS="" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS"]) # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1' TCL_LIB_VERSIONS_OK=nodots ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`" CFLAGS="`echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`" AS_IF([test $do64bit = yes], [ case `arch` in ppc) AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag], tcl_cv_cc_arch_ppc64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes, tcl_cv_cc_arch_ppc64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [ CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" do64bit_ok=yes ]);; i386) AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag], tcl_cv_cc_arch_x86_64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch x86_64" AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes, tcl_cv_cc_arch_x86_64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [ CFLAGS="$CFLAGS -arch x86_64" do64bit_ok=yes ]);; *) AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);; esac ], [ # Check for combined 32-bit and 64-bit fat build AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [ fat_32_64=yes]) ]) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [ LDFLAGS="$LDFLAGS -prebind"]) LDFLAGS="$LDFLAGS -headerpad_max_install_names" AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_search_paths_first = yes], [ LDFLAGS="$LDFLAGS -Wl,-search_paths_first" ]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [__private_extern__], [Compiler support for module scope symbols]) tcl_cv_cc_visibility_hidden=yes ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [ AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [ AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" AC_TRY_LINK([#include ], [XrmInitialize();], tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [ AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" AC_TRY_LINK([#include ], [Tk_InitStubs(NULL, "", 0);], tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) # remove 64-bit arch flags from CFLAGS et al. if configuration # does not support 64-bit. AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h [Should OS/390 do the right thing with sockets?]) ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" AS_IF([test "$SHARED_BUILD" = 1], [ SHLIB_LD='ld -shared -expect_unresolved "*"' ], [ SHLIB_LD='ld -non_shared -expect_unresolved "*"' ]) SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [ CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"]) # see pthread_intro(3) for pthread support on osf1, k.furukawa AS_IF([test "${TCL_THREADS}" = 1], [ CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` AS_IF([test "$GCC" = yes], [ LIBS="$LIBS -lpthread -lmach -lexc" ], [ CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ]) ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) AS_IF([test "$GCC" = yes], [ SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" ], [ SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" ]) SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[[0-6]]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ arch=`isainfo` AS_IF([test "$arch" = "sparcv9 sparc"], [ AS_IF([test "$GCC" = yes], [ AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [ AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" ]) ], [ do64bit_ok=yes AS_IF([test "$do64bitVIS" = yes], [ CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS_ARCH="-xarch=v9a" ], [ CFLAGS="$CFLAGS -xarch=v9" LDFLAGS_ARCH="-xarch=v9" ]) # Solaris 64 uses this as well #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" ]) ], [AS_IF([test "$arch" = "amd64 i386"], [ AS_IF([test "$GCC" = yes], [ case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) do64bit_ok=yes CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]);; esac ], [ do64bit_ok=yes case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "$do64bit_ok" = yes], [ AS_IF([test "$arch" = "sparcv9 sparc"], [ # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" ], [AS_IF([test "$arch" = "amd64 i386"], [ # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" ])]) ]) ], [ case $system in SunOS-5.[[1-9]][[0-9]]*) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';; *) SHLIB_LD='/usr/ccs/bin/ld -G -z text';; esac CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_Bexport = yes], [ LDFLAGS="$LDFLAGS -Wl,-Bexport" ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; esac AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [ AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform]) ]) dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. AS_IF([test "$GCC" = yes], [ case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [extern], [No Compiler support for module scope symbols]) ]) AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then AC_CACHE_CHECK(for SEH support in compiler, tcl_cv_seh, AC_TRY_RUN([ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } ], tcl_cv_seh=yes, tcl_cv_seh=no, tcl_cv_seh=no) ) if test "$tcl_cv_seh" = "no" ; then AC_DEFINE(HAVE_NO_SEH, 1, [Defined when mingw does not support SEH]) fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, tcl_cv_eh_disposition, AC_TRY_COMPILE([ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN ],[ EXCEPTION_DISPOSITION x; ], tcl_cv_eh_disposition=yes, tcl_cv_eh_disposition=no) ) if test "$tcl_cv_eh_disposition" = "no" ; then AC_DEFINE(EXCEPTION_DISPOSITION, int, [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. AC_CACHE_CHECK(for winnt.h that ignores VOID define, tcl_cv_winnt_ignore_void, AC_TRY_COMPILE([ #define VOID void #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN ], [ CHAR c; SHORT s; LONG l; ], tcl_cv_winnt_ignore_void=yes, tcl_cv_winnt_ignore_void=no) ) if test "$tcl_cv_winnt_ignore_void" = "yes" ; then AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, [Defined when cygwin/mingw ignores VOID define in winnt.h]) fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. AC_CACHE_CHECK(for cast to union support, tcl_cv_cast_to_union, AC_TRY_COMPILE([], [ union foo { int i; double d; }; union foo f = (union foo) (int) 0; ], tcl_cv_cast_to_union=yes, tcl_cv_cast_to_union=no) ) if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) AC_SUBST(STLIB_LD) AC_SUBST(SHLIB_LD) AC_SUBST(SHLIB_LD_LIBS) AC_SUBST(SHLIB_CFLAGS) AC_SUBST(LD_LIBRARY_PATH_VAR) # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary TEA_TCL_EARLY_FLAGS TEA_TCL_64BIT_FLAGS ]) #-------------------------------------------------------------------- # TEA_SERIAL_PORT # # Determine which interface to use to talk to the serial port. # Note that #include lines must begin in leftmost column for # some compilers to recognize them as preprocessor directives, # and some build environments have stdin not pointing at a # pseudo-terminal (usually /dev/null instead.) # # Arguments: # none # # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY #-------------------------------------------------------------------- AC_DEFUN([TEA_SERIAL_PORT], [ AC_CHECK_HEADERS(sys/modem.h) AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ AC_TRY_RUN([ #include int main() { struct termios t; if (tcgetattr(0, &t) == 0) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include #include int main() { struct termios t; if (tcgetattr(0, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) fi]) case $tcl_cv_api_serial in termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);; termio) AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);; sgtty) AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);; esac ]) #-------------------------------------------------------------------- # TEA_MISSING_POSIX_HEADERS # # Supply substitutes for missing POSIX header files. Special # notes: # - stdlib.h doesn't define strtol, strtoul, or # strtod in some versions of SunOS # - some versions of string.h don't declare procedures such # as strstr # # Arguments: # none # # Results: # # Defines some of the following vars: # NO_DIRENT_H # NO_ERRNO_H # NO_VALUES_H # HAVE_LIMITS_H or NO_LIMITS_H # NO_STDLIB_H # NO_STRING_H # NO_SYS_WAIT_H # NO_DLFCN_H # HAVE_SYS_PARAM_H # # HAVE_STRING_H ? # # tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and # CHECK on limits.h #-------------------------------------------------------------------- AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [ AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [ AC_TRY_LINK([#include #include ], [ #ifndef _POSIX_SOURCE # ifdef __Lynx__ /* * Generate compilation error to make the test fail: Lynx headers * are only valid if really in the POSIX environment. */ missing_procedure(); # endif #endif DIR *d; struct dirent *entryPtr; char *p; d = opendir("foobar"); entryPtr = readdir(d); p = entryPtr->d_name; closedir(d); ], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)]) if test $tcl_cv_dirent_h = no; then AC_DEFINE(NO_DIRENT_H, 1, [Do we have ?]) fi # TEA specific: AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have ?])]) AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have ?])]) AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have ?])]) AC_CHECK_HEADER(limits.h, [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have ?])], [AC_DEFINE(NO_LIMITS_H, 1, [Do we have ?])]) AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0) if test $tcl_ok = 0; then AC_DEFINE(NO_STDLIB_H, 1, [Do we have ?]) fi AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0) AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0) # See also memmove check below for a place where NO_STRING_H can be # set and why. if test $tcl_ok = 0; then AC_DEFINE(NO_STRING_H, 1, [Do we have ?]) fi AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have ?])]) AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have ?])]) # OS/390 lacks sys/param.h (and doesn't need it, by chance). AC_HAVE_HEADERS(sys/param.h) ]) #-------------------------------------------------------------------- # TEA_PATH_X # # Locate the X11 header files and the X11 library archive. Try # the ac_path_x macro first, but if it doesn't find the X stuff # (e.g. because there's no xmkmf program) then check through # a list of possible directories. Under some conditions the # autoconf macro will return an include directory that contains # no include files, so double-check its result just to be safe. # # This should be called after TEA_CONFIG_CFLAGS as setting the # LIBS line can confuse some configure macro magic. # # Arguments: # none # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) #-------------------------------------------------------------------- AC_DEFUN([TEA_PATH_X], [ if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then TEA_PATH_UNIX_X fi ]) AC_DEFUN([TEA_PATH_UNIX_X], [ AC_PATH_X not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then AC_TRY_CPP([#include ], , not_really_there="yes") else if test ! -r $x_includes/X11/Xlib.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then AC_MSG_CHECKING([for X11 header files]) found_xincludes="no" AC_TRY_CPP([#include ], found_xincludes="yes", found_xincludes="no") if test "$found_xincludes" = "no"; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Xlib.h; then AC_MSG_RESULT([$i]) XINCLUDES=" -I$i" found_xincludes="yes" break fi done fi else if test "$x_includes" != ""; then XINCLUDES="-I$x_includes" found_xincludes="yes" fi fi if test "$found_xincludes" = "no"; then AC_MSG_RESULT([couldn't find any!]) fi if test "$no_x" = yes; then AC_MSG_CHECKING([for X11 libraries]) XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" for i in $dirs ; do if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then AC_MSG_RESULT([$i]) XLIBSW="-L$i -lX11" x_libraries="$i" break fi done else if test "$x_libraries" = ""; then XLIBSW=-lX11 else XLIBSW="-L$x_libraries -lX11" fi fi if test "$XLIBSW" = nope ; then AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow) fi if test "$XLIBSW" = nope ; then AC_MSG_RESULT([could not find any! Using -lX11.]) XLIBSW=-lX11 fi # TEA specific: if test x"${XLIBSW}" != x ; then PKG_LIBS="${PKG_LIBS} ${XLIBSW}" fi ]) #-------------------------------------------------------------------- # TEA_BLOCKING_STYLE # # The statements below check for systems where POSIX-style # non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. # On these systems (mostly older ones), use the old BSD-style # FIONBIO approach instead. # # Arguments: # none # # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK #-------------------------------------------------------------------- AC_DEFUN([TEA_BLOCKING_STYLE], [ AC_CHECK_HEADERS(sys/ioctl.h) AC_CHECK_HEADERS(sys/filio.h) TEA_CONFIG_SYSTEM AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) case $system in OSF*) AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) AC_MSG_RESULT([FIONBIO]) ;; *) AC_MSG_RESULT([O_NONBLOCK]) ;; esac ]) #-------------------------------------------------------------------- # TEA_TIME_HANDLER # # Checks how the system deals with time.h, what time structures # are used on the system, and what fields the structures have. # # Arguments: # none # # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR #-------------------------------------------------------------------- AC_DEFUN([TEA_TIME_HANDLER], [ AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE AC_CHECK_FUNCS(gmtime_r localtime_r) AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [ AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_tzadj;], tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)]) if test $tcl_cv_member_tm_tzadj = yes ; then AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?]) fi AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [ AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_gmtoff;], tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)]) if test $tcl_cv_member_tm_gmtoff = yes ; then AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?]) fi # # Its important to include time.h in this check, as some systems # (like convex) have timezone functions, etc. # AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [ AC_TRY_COMPILE([#include ], [extern long timezone; timezone += 1; exit (0);], tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)]) if test $tcl_cv_timezone_long = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) else # # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. # AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [ AC_TRY_COMPILE([#include ], [extern time_t timezone; timezone += 1; exit (0);], tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)]) if test $tcl_cv_timezone_time = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) fi fi ]) #-------------------------------------------------------------------- # TEA_BUGGY_STRTOD # # Under Solaris 2.4, strtod returns the wrong value for the # terminating character under some conditions. Check for this # and if the problem exists use a substitute procedure # "fixstrtod" (provided by Tcl) that corrects the error. # Also, on Compaq's Tru64 Unix 5.0, # strtod(" ") returns 0.0 instead of a failure to convert. # # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) #-------------------------------------------------------------------- AC_DEFUN([TEA_BUGGY_STRTOD], [ AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) if test "$tcl_strtod" = 1; then AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[ AC_TRY_RUN([ extern double strtod(); int main() { char *infString="Inf", *nanString="NaN", *spaceString=" "; char *term; double value; value = strtod(infString, &term); if ((term != infString) && (term[-1] == 0)) { exit(1); } value = strtod(nanString, &term); if ((term != nanString) && (term[-1] == 0)) { exit(1); } value = strtod(spaceString, &term); if (term == (spaceString+1)) { exit(1); } exit(0); }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy, tcl_cv_strtod_buggy=buggy)]) if test "$tcl_cv_strtod_buggy" = buggy; then AC_LIBOBJ([fixstrtod]) USE_COMPAT=1 AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?]) fi fi ]) #-------------------------------------------------------------------- # TEA_TCL_LINK_LIBS # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: # DL_LIBS (not in TEA, only needed in core) # LIBS # MATH_LIBS # # Results: # # Substitutes the following vars: # TCL_LIBS # MATH_LIBS # # Might append to the following vars: # LIBS # # Might define the following vars: # HAVE_NET_ERRNO_H #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_LINK_LIBS], [ #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) #-------------------------------------------------------------------- # Interactive UNIX requires -linet instead of -lsocket, plus it # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) AC_CHECK_HEADER(net/errno.h, [ AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have ?])]) #-------------------------------------------------------------------- # Check for the existence of the -lsocket and -lnsl libraries. # The order here is important, so that they end up in the right # order in the command line generated by make. Here are some # special considerations: # 1. Use "connect" and "accept" to check for -lsocket, and # "gethostbyname" to check for -lnsl. # 2. Use each function name only once: can't redo a check because # autoconf caches the results of the last check and won't redo it. # 3. Use -lnsl and -lsocket only if they supply procedures that # aren't already present in the normal libraries. This is because # IRIX 5.2 has libraries, but they aren't needed and they're # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- tcl_checkBoth=0 AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1) if test "$tcl_checkSocket" = 1; then AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt, LIBS="$LIBS -lsocket", tcl_checkBoth=1)]) fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs]) fi AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname, [LIBS="$LIBS -lnsl"])]) # TEA specific: Don't perform the eval of the libraries here because # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' AC_SUBST(TCL_LIBS) AC_SUBST(MATH_LIBS) ]) #-------------------------------------------------------------------- # TEA_TCL_EARLY_FLAGS # # Check for what flags are needed to be passed so the correct OS # features are available. # # Arguments: # None # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_EARLY_FLAG],[ AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, AC_TRY_COMPILE([[#define ]$1[ 1 ]$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no))) if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then AC_DEFINE($1, 1, [Add the ]$1[ flag when building]) tcl_flags="$tcl_flags $1" fi ]) AC_DEFUN([TEA_TCL_EARLY_FLAGS],[ AC_MSG_CHECKING([for required early compiler flags]) tcl_flags="" TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include ], [char *p = (char *)strtoll; char *q = (char *)strtoull;]) TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include ], [struct stat64 buf; int i = stat64("/", &buf);]) TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include ], [char *p = (char *)open64;]) if test "x${tcl_flags}" = "x" ; then AC_MSG_RESULT([none]) else AC_MSG_RESULT([${tcl_flags}]) fi ]) #-------------------------------------------------------------------- # TEA_TCL_64BIT_FLAGS # # Check for what is defined in the way of 64-bit features. # # Arguments: # None # # Results: # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_64BIT_FLAGS], [ AC_MSG_CHECKING([for 64-bit integer type]) AC_CACHE_VAL(tcl_cv_type_64bit,[ tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], tcl_type_64bit=__int64, tcl_type_64bit="long long") # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... AC_TRY_COMPILE(,[switch (0) { case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; }],tcl_cv_type_64bit=${tcl_type_64bit})]) if test "${tcl_cv_type_64bit}" = none ; then AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?]) AC_MSG_RESULT([using long]) elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* AC_MSG_RESULT([using Tcl header defaults]) else AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}, [What type should be used to define wide integers?]) AC_MSG_RESULT([${tcl_cv_type_64bit}]) # Now check for auxiliary declarations AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ AC_TRY_COMPILE([#include #include ],[struct dirent64 p;], tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in ?]) fi AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include ],[struct stat64 p; ], tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)]) if test "x${tcl_cv_struct_stat64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in ?]) fi AC_CHECK_FUNCS(open64 lseek64) AC_MSG_CHECKING([for off64_t]) AC_CACHE_VAL(tcl_cv_type_off64_t,[ AC_TRY_COMPILE([#include ],[off64_t offset; ], tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)]) dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the dnl functions lseek64 and open64 are defined. if test "x${tcl_cv_type_off64_t}" = "xyes" && \ test "x${ac_cv_func_lseek64}" = "xyes" && \ test "x${ac_cv_func_open64}" = "xyes" ; then AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in ?]) AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi ]) ## ## Here ends the standard Tcl configuration bits and starts the ## TEA specific functions ## #------------------------------------------------------------------------ # TEA_INIT -- # # Init various Tcl Extension Architecture (TEA) variables. # This should be the first called TEA_* macro. # # Arguments: # none # # Results: # # Defines and substs the following vars: # CYGPATH # EXEEXT # Defines only: # TEA_VERSION # TEA_INITED # TEA_PLATFORM (windows or unix) # # "cygpath" is used on windows to generate native path names for include # files. These variables should only be used with the compiler and linker # since they generate native path names. # # EXEEXT # Select the executable extension based on the host type. This # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" AC_MSG_CHECKING([for correct TEA configuration]) if test x"${PACKAGE_NAME}" = x ; then AC_MSG_ERROR([ The PACKAGE_NAME variable must be defined by your TEA configure.in]) fi if test x"$1" = x ; then AC_MSG_ERROR([ TEA version not specified.]) elif test "$1" != "${TEA_VERSION}" ; then AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"]) else AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}]) AC_SUBST(EXEEXT) AC_SUBST(CYGPATH) # This package name must be replaced statically for AC_SUBST to work AC_SUBST(PKG_LIB_FILE) # Substitute STUB_LIB_FILE in case package creates a stub library too. AC_SUBST(PKG_STUB_LIB_FILE) # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) AC_SUBST(PKG_TCL_SOURCES) AC_SUBST(PKG_HEADERS) AC_SUBST(PKG_INCLUDES) AC_SUBST(PKG_LIBS) AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_SOURCES # PKG_OBJECTS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_SOURCES], [ vars="$@" for i in $vars; do case $i in [\$]*) # allow $-var names PKG_SOURCES="$PKG_SOURCES $i" PKG_OBJECTS="$PKG_OBJECTS $i" ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_OBJECTS="$PKG_OBJECTS $j" ;; esac done AC_SUBST(PKG_SOURCES) AC_SUBST(PKG_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_STUB_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_STUB_SOURCES # PKG_STUB_OBJECTS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" done AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_TCL_SOURCES -- # # Specify one or more Tcl source files. These should be platform # independent runtime files. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_TCL_SOURCES #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_TCL_SOURCES], [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i']) fi PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" done AC_SUBST(PKG_TCL_SOURCES) ]) #------------------------------------------------------------------------ # TEA_ADD_HEADERS -- # # Specify one or more source headers. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_HEADERS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_HEADERS], [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find header file '${srcdir}/$i']) fi PKG_HEADERS="$PKG_HEADERS $i" done AC_SUBST(PKG_HEADERS) ]) #------------------------------------------------------------------------ # TEA_ADD_INCLUDES -- # # Specify one or more include dirs. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_INCLUDES], [ vars="$@" for i in $vars; do PKG_INCLUDES="$PKG_INCLUDES $i" done AC_SUBST(PKG_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_ADD_LIBS -- # # Specify one or more libraries. Users should check for # the right platform before adding to their list. For Windows, # libraries provided in "foo.lib" format will be converted to # "-lfoo" when using GCC (mingw). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_LIBS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_LIBS], [ vars="$@" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done AC_SUBST(PKG_LIBS) ]) #------------------------------------------------------------------------ # TEA_ADD_CFLAGS -- # # Specify one or more CFLAGS. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_CLEANFILES -- # # Specify one or more CLEANFILES. # # Arguments: # one or more file names to clean target # # Results: # # Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CLEANFILES], [ CLEANFILES="$CLEANFILES $@" ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: # none # # Results: # # If --prefix or --exec-prefix was not specified, $prefix and # $exec_prefix will be set to the values given to Tcl when it was # configured. #------------------------------------------------------------------------ AC_DEFUN([TEA_PREFIX], [ if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}]) prefix=${TCL_PREFIX} else AC_MSG_NOTICE([--prefix defaulting to /usr/local]) prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}]) exec_prefix=${TCL_EXEC_PREFIX} else AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}]) exec_prefix=$prefix fi fi ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER_CC -- # # Do compiler checks the way we want. This is just a replacement # for AC_PROG_CC in TEA configure.in files to make them cleaner. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. AC_PROG_CC AC_PROG_CPP INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" AC_SUBST(INSTALL) #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- AC_PROG_MAKE_SET #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- AC_CHECK_TOOL(RANLIB, ranlib) #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- AC_OBJEXT AC_EXEEXT ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER -- # # Do compiler checks that use the compiler. This must go after # TEA_SETUP_COMPILER_CC, which does the actual compiler check. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER], [ # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. AC_REQUIRE([TEA_SETUP_COMPILER_CC]) #------------------------------------------------------------------------ # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------ if test -z "$no_pipe" -a -n "$GCC"; then AC_CACHE_CHECK([if the compiler understands -pipe], tcl_cv_cc_pipe, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no) CFLAGS=$hold_cflags]) if test $tcl_cv_cc_pipe = yes; then CFLAGS="$CFLAGS -pipe" fi fi #-------------------------------------------------------------------- # Common compiler flag setup #-------------------------------------------------------------------- AC_C_BIGENDIAN if test "${TEA_PLATFORM}" = "unix" ; then TEA_TCL_LINK_LIBS TEA_MISSING_POSIX_HEADERS # Let the user call this, because if it triggers, they will # need a compat/strtod.c that is correct. Users can also # use Tcl_GetDouble(FromObj) instead. #TEA_BUGGY_STRTOD fi ]) #------------------------------------------------------------------------ # TEA_MAKE_LIB -- # # Generate a line that can be used to build a shared/unshared library # in a platform independent manner. # # Arguments: # none # # Requires: # # Results: # # Defines the following vars: # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library # VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL # VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" AC_EGREP_CPP([manifest needed], [ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif ], [ # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" TEA_ADD_CLEANFILES([*.manifest]) ]) MAKE_STUB_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then MAKE_LIB="${MAKE_SHARED_LIB} " else MAKE_LIB="${MAKE_STATIC_LIB} " fi #-------------------------------------------------------------------- # Shared libraries and static libraries have different names. # Use the double eval to make sure any variables in the suffix is # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) RANLIB=: RANLIB_STUB=: else RANLIB_STUB="${RANLIB}" if test "${SHARED_BUILD}" = "1" ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" fi eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" RANLIB=: else eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" fi # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) AC_SUBST(VC_MANIFEST_EMBED_DLL) AC_SUBST(VC_MANIFEST_EMBED_EXE) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. # # Arguments: # basename The base name of the library without version # numbers, extensions, or "lib" prefixes. # extra_dir Extra directory in which to search for the # library. This location is used first, then # $prefix/$exec-prefix, then some defaults. # # Requires: # TEA_INIT and TEA_PREFIX must be called first. # # Results: # # Defines the following vars: # ${basename}_LIB_NAME The computed library name. # ${basename}_LIB_SPEC The computed linker flags. #------------------------------------------------------------------------ AC_DEFUN([TEA_LIB_SPEC], [ AC_MSG_CHECKING([for $1 library]) # Look in exec-prefix for the library (defined by TEA_PREFIX). tea_lib_name_dir="${exec_prefix}/lib" # Or in a user-specified location. if test x"$2" != x ; then tea_extra_lib_dir=$2 else tea_extra_lib_dir=NONE fi for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break fi done if test "${TEA_PLATFORM}" = "windows"; then $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\" else # Strip off the leading "lib" and trailing ".a" or ".so" tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'` $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}" fi if test "x${$1_LIB_NAME}" = x ; then AC_MSG_ERROR([not found]) else AC_MSG_RESULT([${$1_LIB_SPEC}]) fi ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TCL_HEADERS -- # # Locate the private Tcl include files # # Arguments: # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TCL_TOP_DIR_NATIVE # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [ # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh} AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS]) AC_MSG_CHECKING([for Tcl private include files]) TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}` TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\" # Check to see if tclPort.h isn't already with the public headers # Don't look for tclInt.h because that resides with tcl.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tclh}/tclWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tclh}/tclUnixPort.h"; then result="private headers found with public headers" else TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\" if test "${TEA_PLATFORM}" = "windows"; then TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\" else TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TCL_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -d "${TCL_BIN_DIR}/Headers" -a \ -d "${TCL_BIN_DIR}/PrivateHeaders"; then TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}" else TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TCL_INCLUDES}" else if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}]) fi result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}" fi fi AC_SUBST(TCL_TOP_DIR_NATIVE) AC_SUBST(TCL_INCLUDES) AC_MSG_RESULT([${result}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TCL_HEADERS -- # # Locate the installed public Tcl header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [ AC_MSG_CHECKING([for Tcl public headers]) AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tclh, [ # Use the value from --with-tclinclude, if it was given if test x"${with_tclinclude}" != x ; then if test -f "${with_tclinclude}/tcl.h" ; then ac_cv_c_tclh=${with_tclinclude} else AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h]) fi else list="" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers directory case ${TCL_DEFS} in *TCL_FRAMEWORK*) list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tcl is not installed, # and in that situation, look there before installed locations. if test -f "${TCL_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TCL_INCLUDE_SPEC}" != x ; then d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tcl.h" ; then ac_cv_c_tclh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tclh}" = x ; then AC_MSG_ERROR([tcl.h not found. Please specify its location with --with-tclinclude]) else AC_MSG_RESULT([${ac_cv_c_tclh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TCL_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TK_HEADERS -- # # Locate the private Tk include files # # Arguments: # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [ # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh} AC_REQUIRE([TEA_PUBLIC_TK_HEADERS]) AC_MSG_CHECKING([for Tk private include files]) TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}` TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\" # Check to see if tkPort.h isn't already with the public headers # Don't look for tkInt.h because that resides with tk.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tkh}/tkWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tkh}/tkUnixPort.h"; then result="private headers found with public headers" else TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\" TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\" if test "${TEA_PLATFORM}" = "windows"; then TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\" else TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TK_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}" # Detect and add ttk subdir if test -d "${TK_SRC_DIR}/generic/ttk"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\"" fi if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\"" fi if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\"" fi if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TK_DEFS} in *TK_FRAMEWORK*) if test -d "${TK_BIN_DIR}/Headers" -a \ -d "${TK_BIN_DIR}/PrivateHeaders"; then TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}" else TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TK_INCLUDES}" else if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}]) fi result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}" fi fi AC_SUBST(TK_TOP_DIR_NATIVE) AC_SUBST(TK_XLIB_DIR_NATIVE) AC_SUBST(TK_INCLUDES) AC_MSG_RESULT([${result}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TK_HEADERS -- # # Locate the installed public Tk header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [ AC_MSG_CHECKING([for Tk public headers]) AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files], with_tkinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tkh, [ # Use the value from --with-tkinclude, if it was given if test x"${with_tkinclude}" != x ; then if test -f "${with_tkinclude}/tk.h" ; then ac_cv_c_tkh=${with_tkinclude} else AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h]) fi else list="" if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers directory. case ${TK_DEFS} in *TK_FRAMEWORK*) list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tk is not installed, # and in that situation, look there before installed locations. if test -f "${TK_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tk's --prefix location, # relative to directory of tkConfig.sh, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TK_PREFIX}/include 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TK_INCLUDE_SPEC}" != x ; then d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tk.h" ; then ac_cv_c_tkh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tkh}" = x ; then AC_MSG_ERROR([tk.h not found. Please specify its location with --with-tkinclude]) else AC_MSG_RESULT([${ac_cv_c_tkh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}` TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_INCLUDES) if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then # On Windows and Aqua, we need the X compat headers AC_MSG_CHECKING([for X11 header files]) if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_XINCLUDES) fi AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}]) fi ]) #------------------------------------------------------------------------ # TEA_PATH_CONFIG -- # # Locate the ${1}Config.sh file and perform a sanity check on # the ${1} compile flags. These are used by packages like # [incr Tk] that load *Config.sh files from more than Tcl and Tk. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-$1=... # # Defines the following vars: # $1_BIN_DIR Full path to the directory containing # the $1Config.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_CONFIG], [ # # Ok, lets find the $1 configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-$1 # if test x"${no_$1}" = x ; then # we reset no_$1 in case something fails here no_$1=true AC_ARG_WITH($1, [ --with-$1 directory containing $1 configuration ($1Config.sh)], with_$1config=${withval}) AC_MSG_CHECKING([for $1 configuration]) AC_CACHE_VAL(ac_cv_c_$1config,[ # First check to see if --with-$1 was specified. if test x"${with_$1config}" != x ; then case ${with_$1config} in */$1Config.sh ) if test -f ${with_$1config}; then AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself]) with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'` fi;; esac if test -f "${with_$1config}/$1Config.sh" ; then ac_cv_c_$1config=`(cd ${with_$1config}; pwd)` else AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh]) fi fi # then check for a private $1 installation if test x"${ac_cv_c_$1config}" = x ; then for i in \ ../$1 \ `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../$1 \ `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../../$1 \ `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ${srcdir}/../$1 \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi if test -f "$i/unix/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i/unix; pwd)` break fi done fi # check in a few common install locations if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_$1config}" = x ; then $1_BIN_DIR="# no $1 configs found" AC_MSG_WARN([Cannot find $1 configuration definitions]) exit 0 else no_$1= $1_BIN_DIR=${ac_cv_c_$1config} AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG -- # # Load the $1Config.sh file # # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # # Substitutes the following vars: # $1_SRC_DIR # $1_LIB_FILE # $1_LIB_SPEC #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG], [ AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) if test -f "${$1_BIN_DIR}/$1Config.sh" ; then AC_MSG_RESULT([loading]) . "${$1_BIN_DIR}/$1Config.sh" else AC_MSG_RESULT([file not found]) fi # # If the $1_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable $1_LIB_SPEC will be set to the value # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC # instead of $1_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC} $1_LIBRARY_PATH=${$1_LIBRARY_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) # Allow the caller to prevent this auto-check by specifying any 2nd arg AS_IF([test "x$2" = x], [ # Check both upper and lower-case variants # If a dev wanted non-stubs libs, this function could take an option # to not use _STUB in the paths below AS_IF([test "x${$1_STUB_LIB_SPEC}" = x], [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)], [TEA_LOAD_CONFIG_LIB($1_STUB)]) ]) ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG_LIB -- # # Helper function to load correct library from another extension's # ${PACKAGE}Config.sh. # # Results: # Adds to LIBS the appropriate extension library #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG_LIB], [ AC_MSG_CHECKING([For $1 library for LIBS]) # This simplifies the use of stub libraries by automatically adding # the stub lib to your path. Normally this would add to SHLIB_LD_LIBS, # but this is called before CONFIG_CFLAGS. More importantly, this adds # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD. if test "x${$1_LIB_SPEC}" != "x" ; then if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"]) AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}]) else TEA_ADD_LIBS([${$1_LIB_SPEC}]) AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}]) fi else AC_MSG_RESULT([file not found]) fi ]) #------------------------------------------------------------------------ # TEA_EXPORT_CONFIG -- # # Define the data to insert into the ${PACKAGE}Config.sh file # # Arguments: # # Requires the following vars to be set: # $1 # # Results: # Substitutes the following vars: #------------------------------------------------------------------------ AC_DEFUN([TEA_EXPORT_CONFIG], [ #-------------------------------------------------------------------- # These are for $1Config.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}" else eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" fi $1_BUILD_LIB_SPEC="-L`pwd` ${$1_LIB_FLAG}" $1_LIB_SPEC="-L${pkglibdir} ${$1_LIB_FLAG}" $1_BUILD_STUB_LIB_SPEC="-L`pwd` [$]{$1_STUB_LIB_FLAG}" $1_STUB_LIB_SPEC="-L${pkglibdir} [$]{$1_STUB_LIB_FLAG}" $1_BUILD_STUB_LIB_PATH="`pwd`/[$]{PKG_STUB_LIB_FILE}" $1_STUB_LIB_PATH="${pkglibdir}/[$]{PKG_STUB_LIB_FILE}" AC_SUBST($1_BUILD_LIB_SPEC) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_PATH) AC_SUBST($1_STUB_LIB_PATH) AC_SUBST(MAJOR_VERSION) AC_SUBST(MINOR_VERSION) AC_SUBST(PATCHLEVEL) ]) #------------------------------------------------------------------------ # TEA_PATH_CELIB -- # # Locate Keuchel's celib emulation layer for targeting Win/CE # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-celib=... # # Defines the following vars: # CELIB_DIR Full path to the directory containing # the include and platform lib files #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_CELIB], [ # First, look for one uninstalled. # the alternative search directory is invoked by --with-celib if test x"${no_celib}" = x ; then # we reset no_celib in case something fails here no_celib=true AC_ARG_WITH(celib,[ --with-celib=DIR use Windows/CE support library from DIR], with_celibconfig=${withval}) AC_MSG_CHECKING([for Windows/CE celib directory]) AC_CACHE_VAL(ac_cv_c_celibconfig,[ # First check to see if --with-celibconfig was specified. if test x"${with_celibconfig}" != x ; then if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory]) fi fi # then check for a celib library if test x"${ac_cv_c_celibconfig}" = x ; then for i in \ ../celib-palm-3.0 \ ../celib \ ../../celib-palm-3.0 \ ../../celib \ `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \ ${srcdir}/../celib-palm-3.0 \ ${srcdir}/../celib \ `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \ ; do if test -d "$i/inc" ; then ac_cv_c_celibconfig=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_celibconfig}" = x ; then AC_MSG_ERROR([Cannot find celib support library directory]) else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) # Local Variables: # mode: autoconf # End: saods9/ds9/cmaps/000755 000765 000000 00000000000 13012655540 014167 5ustar00joyewheel000000 000000 saods9/ds9/doc/000755 000765 000000 00000000000 13012655540 013631 5ustar00joyewheel000000 000000 saods9/ds9/library/000755 000765 000000 00000000000 13012655541 014531 5ustar00joyewheel000000 000000 saods9/ds9/msgs/000755 000765 000000 00000000000 13012655541 014036 5ustar00joyewheel000000 000000 saods9/ds9/template/000755 000765 000000 00000000000 13012655541 014700 5ustar00joyewheel000000 000000 saods9/ds9/unix/000755 000765 000000 00000000000 13012655541 014050 5ustar00joyewheel000000 000000 saods9/ds9/util/000755 000765 000000 00000000000 13012655542 014043 5ustar00joyewheel000000 000000 saods9/ds9/util/mergedict.tcl000644 000765 000000 00000002452 10660664756 016532 0ustar00joyewheel000000 000000 # usage: mergedict <##> set mm [lindex $argv 0] set enc [lindex $argv 1] set fn "msgs/${mm}.msg" # read in original msg file if {[catch {open $fn r} id]} { puts "Error: can't open $fn for reading" return } fconfigure $id -encoding $enc set orgmsg {} while {[gets $id line] >= 0} { lappend orgmsg $line } set orgmsg [lsort -unique $orgmsg] catch {close $id} # read current msgs set curmsg {} while {[gets stdin line] >= 0} { set exp {.*msgcat::mc {([^\}]*)}} if [regexp $exp $line foo aa] { lappend curmsg "::msgcat::mcset $mm {$aa} " } } set curmsg [lsort -unique $curmsg] # now merge original against current set mermsg {} foreach ll $curmsg { set ii [lsearch -glob $orgmsg "$ll*"] if {$ii != -1} { lappend mermsg [lindex $orgmsg $ii] } else { lappend mermsg $ll } } set mermsg [lsort -unique $mermsg] # now find unused entries in original foreach ll $orgmsg { set ii [lsearch -exact $mermsg $ll] if {$ii == -1} { if {[string range $ll 0 0] != {#}} { lappend mermsg "# $ll" } else { lappend mermsg "$ll" } } } set mermsg [lsort -unique $mermsg] # write new msg file if {[catch {open $fn w} id]} { puts "Error: can't open $fn for writing" return } fconfigure $id -encoding $enc foreach ll $mermsg { puts $id $ll } catch {close $id} saods9/ds9/unix/aclocal.m4000755 000765 000000 00000000223 12556763143 015722 0ustar00joyewheel000000 000000 # # Include the TEA standard macro set # builtin(include,tclconfig/tcl.m4) # # Add here whatever m4 macros you want to define for your package # saods9/ds9/unix/configure000755 000765 000000 00001072161 12652237173 015775 0ustar00joyewheel000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for ds9 7.5. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='ds9' PACKAGE_TARNAME='ds9' PACKAGE_VERSION='7.5' PACKAGE_STRING='ds9 7.5' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS VC_MANIFEST_EMBED_EXE VC_MANIFEST_EMBED_DLL RANLIB_STUB MAKE_STUB_LIB MAKE_STATIC_LIB MAKE_SHARED_LIB MAKE_LIB TCL_DBGX LDFLAGS_DEFAULT CFLAGS_DEFAULT LD_LIBRARY_PATH_VAR SHLIB_CFLAGS SHLIB_LD_LIBS SHLIB_LD STLIB_LD CFLAGS_WARNING CFLAGS_OPTIMIZE CFLAGS_DEBUG RC CELIB_DIR AR TCL_THREADS XMKMF TK_INCLUDES TCL_INCLUDES system MATH_LIBS EGREP GREP RANLIB SET_MAKE INSTALL CPP TK_XINCLUDES TK_LIBS TK_STUB_LIB_SPEC TK_STUB_LIB_FLAG TK_STUB_LIB_FILE TK_LIB_SPEC TK_LIB_FLAG TK_LIB_FILE TK_SRC_DIR TK_BIN_DIR TK_VERSION TCL_SHLIB_LD_LIBS TCL_LD_FLAGS TCL_EXTRA_CFLAGS TCL_DEFS TCL_LIBS CLEANFILES OBJEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC TCL_STUB_LIB_SPEC TCL_STUB_LIB_FLAG TCL_STUB_LIB_FILE TCL_LIB_SPEC TCL_LIB_FLAG TCL_LIB_FILE TCL_SRC_DIR TCL_BIN_DIR TCL_PATCH_LEVEL TCL_VERSION PKG_CFLAGS PKG_LIBS PKG_INCLUDES PKG_HEADERS PKG_TCL_SOURCES PKG_STUB_OBJECTS PKG_STUB_SOURCES PKG_STUB_LIB_FILE PKG_LIB_FILE EXEEXT CYGPATH target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_tcl with_tk with_tclinclude with_tkinclude with_x enable_threads enable_64bit enable_64bit_vis enable_rpath enable_wince with_celib enable_symbols ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP XMKMF' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures ds9 7.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/ds9] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of ds9 7.5:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-threads build with threads --enable-64bit enable 64bit support (default: off) --enable-64bit-vis enable 64bit Sparc VIS support (default: off) --disable-rpath disable rpath support (default: on) --enable-wince enable Win/CE support (where applicable) --enable-symbols build with debugging symbols (default: off) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-tcl directory containing tcl configuration (tclConfig.sh) --with-tk directory containing tk configuration (tkConfig.sh) --with-tclinclude directory containing the public Tcl header files --with-tkinclude directory containing the public Tk header files --with-x use the X Window System --with-celib=DIR use Windows/CE support library from DIR Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor XMKMF Path to xmkmf, Makefile generator for X Window System Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF ds9 configure 7.5 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by ds9 $as_me 7.5, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct TEA configuration" >&5 $as_echo_n "checking for correct TEA configuration... " >&6; } if test x"${PACKAGE_NAME}" = x ; then as_fn_error $? " The PACKAGE_NAME variable must be defined by your TEA configure.in" "$LINENO" 5 fi if test x"3.9" = x ; then as_fn_error $? " TEA version not specified." "$LINENO" 5 elif test "3.9" != "${TEA_VERSION}" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&5 $as_echo "warning: requested TEA version \"3.9\", have \"${TEA_VERSION}\"" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok (TEA ${TEA_VERSION})" >&5 $as_echo "ok (TEA ${TEA_VERSION})" >&6; } fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) # Extract the first word of "cygpath", so it can be a program name with args. set dummy cygpath; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CYGPATH+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CYGPATH"; then ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CYGPATH="cygpath -w" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" fi fi CYGPATH=$ac_cv_prog_CYGPATH if test -n "$CYGPATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 $as_echo "$CYGPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi { $as_echo "$as_me:${as_lineno-$LINENO}: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&5 $as_echo "$as_me: configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" >&6;} # This package name must be replaced statically for AC_SUBST to work # Substitute STUB_LIB_FILE in case package creates a stub library too. # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... ac_aux_dir= for ac_dir in tclconfig "$srcdir"/tclconfig; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in tclconfig \"$srcdir\"/tclconfig" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true # Check whether --with-tcl was given. if test "${with_tcl+set}" = set; then : withval=$with_tcl; with_tclconfig="${withval}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl configuration" >&5 $as_echo_n "checking for Tcl configuration... " >&6; } if ${ac_cv_c_tclconfig+:} false; then : $as_echo_n "(cached) " >&6 else # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5 $as_echo "$as_me: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&2;} with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else as_fn_error $? "${with_tclconfig} directory doesn't contain tclConfig.sh" "$LINENO" 5 fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../tcl[8-9].[0-9]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../tcl[8-9].[0-9]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi fi if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" as_fn_error $? "Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh" "$LINENO" 5 else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: found ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo "found ${TCL_BIN_DIR}/tclConfig.sh" >&6; } fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo_n "checking for existence of ${TCL_BIN_DIR}/tclConfig.sh... " >&6; } if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 $as_echo "loading" >&6; } . "${TCL_BIN_DIR}/tclConfig.sh" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find ${TCL_BIN_DIR}/tclConfig.sh" >&5 $as_echo "could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6; } fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" { $as_echo "$as_me:${as_lineno-$LINENO}: checking platform" >&5 $as_echo_n "checking platform... " >&6; } hold_cc=$CC; CC="$TCL_CC" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifdef _WIN32 #error win32 #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : TEA_PLATFORM="unix" else TEA_PLATFORM="windows" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CC=$hold_cc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEA_PLATFORM" >&5 $as_echo "$TEA_PLATFORM" >&6; } # The BUILD_$pkg is to define the correct extern storage class # handling when making this package cat >>confdefs.h <<_ACEOF #define BUILD_${PACKAGE_NAME} /**/ _ACEOF # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: #-------------------------------------------------------------------- # Load the tkConfig.sh file if necessary (Tk extension) #-------------------------------------------------------------------- # # Ok, lets find the tk configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tk # if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true # Check whether --with-tk was given. if test "${with_tk+set}" = set; then : withval=$with_tk; with_tkconfig="${withval}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tk configuration" >&5 $as_echo_n "checking for Tk configuration... " >&6; } if ${ac_cv_c_tkconfig+:} false; then : $as_echo_n "(cached) " >&6 else # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&5 $as_echo "$as_me: WARNING: --with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself" >&2;} with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else as_fn_error $? "${with_tkconfig} directory doesn't contain tkConfig.sh" "$LINENO" 5 fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ../tk \ `ls -dr ../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ../tk[8-9].[0-9]* 2>/dev/null` \ ../../tk \ `ls -dr ../../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../tk[8-9].[0-9]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../../tk[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[8-9].[0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[8-9].[0-9]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi fi if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" as_fn_error $? "Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh" "$LINENO" 5 else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: found ${TK_BIN_DIR}/tkConfig.sh" >&5 $as_echo "found ${TK_BIN_DIR}/tkConfig.sh" >&6; } fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for existence of ${TK_BIN_DIR}/tkConfig.sh" >&5 $as_echo_n "checking for existence of ${TK_BIN_DIR}/tkConfig.sh... " >&6; } if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: loading" >&5 $as_echo "loading" >&6; } . "${TK_BIN_DIR}/tkConfig.sh" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find ${TK_BIN_DIR}/tkConfig.sh" >&5 $as_echo "could not find ${TK_BIN_DIR}/tkConfig.sh" >&6; } fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" # TEA specific: Ensure windowingsystem is defined if test "${TEA_PLATFORM}" = "unix" ; then case ${TK_DEFS} in *MAC_OSX_TK*) $as_echo "#define MAC_OSX_TK 1" >>confdefs.h TEA_WINDOWINGSYSTEM="aqua" ;; *) TEA_WINDOWINGSYSTEM="x11" ;; esac elif test "${TEA_PLATFORM}" = "windows" ; then TEA_WINDOWINGSYSTEM="win32" fi # TEA specific: #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&5 $as_echo "$as_me: --prefix defaulting to TCL_PREFIX ${TCL_PREFIX}" >&6;} prefix=${TCL_PREFIX} else { $as_echo "$as_me:${as_lineno-$LINENO}: --prefix defaulting to /usr/local" >&5 $as_echo "$as_me: --prefix defaulting to /usr/local" >&6;} prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&5 $as_echo "$as_me: --exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}" >&6;} exec_prefix=${TCL_EXEC_PREFIX} else { $as_echo "$as_me:${as_lineno-$LINENO}: --exec-prefix defaulting to ${prefix}" >&5 $as_echo "$as_me: --exec-prefix defaulting to ${prefix}" >&6;} exec_prefix=$prefix fi fi #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC and a few others to create the basic setup # necessary to compile executables. #----------------------------------------------------------------------- # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. #------------------------------------------------------------------------ # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------ if test -z "$no_pipe" -a -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler understands -pipe" >&5 $as_echo_n "checking if the compiler understands -pipe... " >&6; } if ${tcl_cv_cc_pipe+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_cc_pipe=yes else tcl_cv_cc_pipe=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_pipe" >&5 $as_echo "$tcl_cv_cc_pipe" >&6; } if test $tcl_cv_cc_pipe = yes; then CFLAGS="$CFLAGS -pipe" fi fi #-------------------------------------------------------------------- # Common compiler flag setup #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac if test "${TEA_PLATFORM}" = "unix" ; then #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- ac_fn_c_check_func "$LINENO" "sin" "ac_cv_func_sin" if test "x$ac_cv_func_sin" = xyes; then : MATH_LIBS="" else MATH_LIBS="-lm" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lieee" >&5 $as_echo_n "checking for main in -lieee... " >&6; } if ${ac_cv_lib_ieee_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lieee $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ieee_main=yes else ac_cv_lib_ieee_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ieee_main" >&5 $as_echo "$ac_cv_lib_ieee_main" >&6; } if test "x$ac_cv_lib_ieee_main" = xyes; then : MATH_LIBS="-lieee $MATH_LIBS" fi #-------------------------------------------------------------------- # Interactive UNIX requires -linet instead of -lsocket, plus it # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5 $as_echo_n "checking for main in -linet... " >&6; } if ${ac_cv_lib_inet_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-linet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_inet_main=yes else ac_cv_lib_inet_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5 $as_echo "$ac_cv_lib_inet_main" >&6; } if test "x$ac_cv_lib_inet_main" = xyes; then : LIBS="$LIBS -linet" fi ac_fn_c_check_header_mongrel "$LINENO" "net/errno.h" "ac_cv_header_net_errno_h" "$ac_includes_default" if test "x$ac_cv_header_net_errno_h" = xyes; then : $as_echo "#define HAVE_NET_ERRNO_H 1" >>confdefs.h fi #-------------------------------------------------------------------- # Check for the existence of the -lsocket and -lnsl libraries. # The order here is important, so that they end up in the right # order in the command line generated by make. Here are some # special considerations: # 1. Use "connect" and "accept" to check for -lsocket, and # "gethostbyname" to check for -lnsl. # 2. Use each function name only once: can't redo a check because # autoconf caches the results of the last check and won't redo it. # 3. Use -lnsl and -lsocket only if they supply procedures that # aren't already present in the normal libraries. This is because # IRIX 5.2 has libraries, but they aren't needed and they're # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- tcl_checkBoth=0 ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : tcl_checkSocket=0 else tcl_checkSocket=1 fi if test "$tcl_checkSocket" = 1; then ac_fn_c_check_func "$LINENO" "setsockopt" "ac_cv_func_setsockopt" if test "x$ac_cv_func_setsockopt" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 $as_echo_n "checking for setsockopt in -lsocket... " >&6; } if ${ac_cv_lib_socket_setsockopt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char setsockopt (); int main () { return setsockopt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_setsockopt=yes else ac_cv_lib_socket_setsockopt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_setsockopt" >&5 $as_echo "$ac_cv_lib_socket_setsockopt" >&6; } if test "x$ac_cv_lib_socket_setsockopt" = xyes; then : LIBS="$LIBS -lsocket" else tcl_checkBoth=1 fi fi fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" ac_fn_c_check_func "$LINENO" "accept" "ac_cv_func_accept" if test "x$ac_cv_func_accept" = xyes; then : tcl_checkNsl=0 else LIBS=$tk_oldLibs fi fi ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : LIBS="$LIBS -lnsl" fi fi # TEA specific: Don't perform the eval of the libraries here because # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking dirent.h" >&5 $as_echo_n "checking dirent.h... " >&6; } if ${tcl_cv_dirent_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #ifndef _POSIX_SOURCE # ifdef __Lynx__ /* * Generate compilation error to make the test fail: Lynx headers * are only valid if really in the POSIX environment. */ missing_procedure(); # endif #endif DIR *d; struct dirent *entryPtr; char *p; d = opendir("foobar"); entryPtr = readdir(d); p = entryPtr->d_name; closedir(d); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_dirent_h=yes else tcl_cv_dirent_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_dirent_h" >&5 $as_echo "$tcl_cv_dirent_h" >&6; } if test $tcl_cv_dirent_h = no; then $as_echo "#define NO_DIRENT_H 1" >>confdefs.h fi # TEA specific: ac_fn_c_check_header_mongrel "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" if test "x$ac_cv_header_errno_h" = xyes; then : else $as_echo "#define NO_ERRNO_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default" if test "x$ac_cv_header_float_h" = xyes; then : else $as_echo "#define NO_FLOAT_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "values.h" "ac_cv_header_values_h" "$ac_includes_default" if test "x$ac_cv_header_values_h" = xyes; then : else $as_echo "#define NO_VALUES_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" if test "x$ac_cv_header_limits_h" = xyes; then : $as_echo "#define HAVE_LIMITS_H 1" >>confdefs.h else $as_echo "#define NO_LIMITS_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : tcl_ok=1 else tcl_ok=0 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strtol" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strtoul" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strtod" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* if test $tcl_ok = 0; then $as_echo "#define NO_STDLIB_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes; then : tcl_ok=1 else tcl_ok=0 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strstr" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "strerror" >/dev/null 2>&1; then : else tcl_ok=0 fi rm -f conftest* # See also memmove check below for a place where NO_STRING_H can be # set and why. if test $tcl_ok = 0; then $as_echo "#define NO_STRING_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" if test "x$ac_cv_header_sys_wait_h" = xyes; then : else $as_echo "#define NO_SYS_WAIT_H 1" >>confdefs.h fi ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" if test "x$ac_cv_header_dlfcn_h" = xyes; then : else $as_echo "#define NO_DLFCN_H 1" >>confdefs.h fi # OS/390 lacks sys/param.h (and doesn't need it, by chance). for ac_header in sys/param.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" if test "x$ac_cv_header_sys_param_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_PARAM_H 1 _ACEOF fi done # Let the user call this, because if it triggers, they will # need a compat/strtod.c that is correct. Users can also # use Tcl_GetDouble(FromObj) instead. #TEA_BUGGY_STRTOD fi #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- #TEA_ADD_SOURCES([sample.c tclsample.c]) #TEA_ADD_HEADERS([]) #TEA_ADD_INCLUDES([]) vars="-lstdc++" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done #TEA_ADD_CFLAGS([]) #TEA_ADD_STUB_SOURCES([]) #TEA_ADD_TCL_SOURCES([]) { $as_echo "$as_me:${as_lineno-$LINENO}: checking system version" >&5 $as_echo_n "checking system version... " >&6; } if ${tcl_cv_sys_version+:} false; then : $as_echo_n "(cached) " >&6 else # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5 $as_echo "$as_me: WARNING: can't find uname command" >&2;} tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5 $as_echo "$tcl_cv_sys_version" >&6; } system=$tcl_cv_sys_version case $system in Darwin*) $as_echo "#define ZIPFILE 1" >>confdefs.h ;; *) ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlInitParser in -lxml2" >&5 $as_echo_n "checking for xmlInitParser in -lxml2... " >&6; } if ${ac_cv_lib_xml2_xmlInitParser+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxml2 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char xmlInitParser (); int main () { return xmlInitParser (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xml2_xmlInitParser=yes else ac_cv_lib_xml2_xmlInitParser=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xml2_xmlInitParser" >&5 $as_echo "$ac_cv_lib_xml2_xmlInitParser" >&6; } if test "x$ac_cv_lib_xml2_xmlInitParser" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBXML2 1 _ACEOF LIBS="-lxml2 $LIBS" fi #-------------------------------------------------------------------- # __CHANGE__ # # You can add more files to clean if your extension creates any extra # files by extending CLEANFILES. # Add pkgIndex.tcl if it is generated in the Makefile instead of ./configure # and change Makefile.in to move it from CONFIG_CLEAN_FILES to BINARIES var. # # A few miscellaneous platform-specific items: # TEA_ADD_* any platform specific compiler/build info here. #-------------------------------------------------------------------- #CLEANFILES="$CLEANFILES pkgIndex.tcl" if test "${TEA_PLATFORM}" = "windows" ; then # Ensure no empty if clauses : #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) else # Ensure no empty else clauses : #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) fi #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tcl public headers" >&5 $as_echo_n "checking for Tcl public headers... " >&6; } # Check whether --with-tclinclude was given. if test "${with_tclinclude+set}" = set; then : withval=$with_tclinclude; with_tclinclude=${withval} fi if ${ac_cv_c_tclh+:} false; then : $as_echo_n "(cached) " >&6 else # Use the value from --with-tclinclude, if it was given if test x"${with_tclinclude}" != x ; then if test -f "${with_tclinclude}/tcl.h" ; then ac_cv_c_tclh=${with_tclinclude} else as_fn_error $? "${with_tclinclude} directory does not contain tcl.h" "$LINENO" 5 fi else list="" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers directory case ${TCL_DEFS} in *TCL_FRAMEWORK*) list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tcl is not installed, # and in that situation, look there before installed locations. if test -f "${TCL_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TCL_INCLUDE_SPEC}" != x ; then d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tcl.h" ; then ac_cv_c_tclh=$i break fi done fi fi # Print a message based on how we determined the include path if test x"${ac_cv_c_tclh}" = x ; then as_fn_error $? "tcl.h not found. Please specify its location with --with-tclinclude" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_tclh}" >&5 $as_echo "${ac_cv_c_tclh}" >&6; } fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" #TEA_PRIVATE_TCL_HEADERS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Tk public headers" >&5 $as_echo_n "checking for Tk public headers... " >&6; } # Check whether --with-tkinclude was given. if test "${with_tkinclude+set}" = set; then : withval=$with_tkinclude; with_tkinclude=${withval} fi if ${ac_cv_c_tkh+:} false; then : $as_echo_n "(cached) " >&6 else # Use the value from --with-tkinclude, if it was given if test x"${with_tkinclude}" != x ; then if test -f "${with_tkinclude}/tk.h" ; then ac_cv_c_tkh=${with_tkinclude} else as_fn_error $? "${with_tkinclude} directory does not contain tk.h" "$LINENO" 5 fi else list="" if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers directory. case ${TK_DEFS} in *TK_FRAMEWORK*) list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tk is not installed, # and in that situation, look there before installed locations. if test -f "${TK_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tk's --prefix location, # relative to directory of tkConfig.sh, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TK_PREFIX}/include 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TK_INCLUDE_SPEC}" != x ; then d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tk.h" ; then ac_cv_c_tkh=$i break fi done fi fi # Print a message based on how we determined the include path if test x"${ac_cv_c_tkh}" = x ; then as_fn_error $? "tk.h not found. Please specify its location with --with-tkinclude" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_c_tkh}" >&5 $as_echo "${ac_cv_c_tkh}" >&6; } fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}` TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then # On Windows and Aqua, we need the X compat headers { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11 header files" >&5 $as_echo_n "checking for X11 header files... " >&6; } if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${INCLUDE_DIR_NATIVE}" >&5 $as_echo "${INCLUDE_DIR_NATIVE}" >&6; } fi #TEA_PRIVATE_TK_HEADERS if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else not_really_there="yes" fi rm -f conftest.err conftest.i conftest.$ac_ext else if test ! -r $x_includes/X11/Xlib.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11 header files" >&5 $as_echo_n "checking for X11 header files... " >&6; } found_xincludes="no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : found_xincludes="yes" else found_xincludes="no" fi rm -f conftest.err conftest.i conftest.$ac_ext if test "$found_xincludes" = "no"; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Xlib.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $i" >&5 $as_echo "$i" >&6; } XINCLUDES=" -I$i" found_xincludes="yes" break fi done fi else if test "$x_includes" != ""; then XINCLUDES="-I$x_includes" found_xincludes="yes" fi fi if test "$found_xincludes" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: couldn't find any!" >&5 $as_echo "couldn't find any!" >&6; } fi if test "$no_x" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11 libraries" >&5 $as_echo_n "checking for X11 libraries... " >&6; } XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" for i in $dirs ; do if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $i" >&5 $as_echo "$i" >&6; } XLIBSW="-L$i -lX11" x_libraries="$i" break fi done else if test "$x_libraries" = ""; then XLIBSW=-lX11 else XLIBSW="-L$x_libraries -lX11" fi fi if test "$XLIBSW" = nope ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XCreateWindow in -lXwindow" >&5 $as_echo_n "checking for XCreateWindow in -lXwindow... " >&6; } if ${ac_cv_lib_Xwindow_XCreateWindow+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXwindow $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XCreateWindow (); int main () { return XCreateWindow (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xwindow_XCreateWindow=yes else ac_cv_lib_Xwindow_XCreateWindow=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xwindow_XCreateWindow" >&5 $as_echo "$ac_cv_lib_Xwindow_XCreateWindow" >&6; } if test "x$ac_cv_lib_Xwindow_XCreateWindow" = xyes; then : XLIBSW=-lXwindow fi fi if test "$XLIBSW" = nope ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not find any! Using -lX11." >&5 $as_echo "could not find any! Using -lX11." >&6; } XLIBSW=-lX11 fi # TEA specific: if test x"${XLIBSW}" != x ; then PKG_LIBS="${PKG_LIBS} ${XLIBSW}" fi fi #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. # This auto-enables if Tcl was compiled threaded. #-------------------------------------------------------------------- # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; tcl_ok=$enableval else tcl_ok=yes fi if test "${enable_threads+set}" = set; then enableval="$enable_threads" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then TCL_THREADS=1 if test "${TEA_PLATFORM}" != "windows" ; then # We are always OK on Windows, so check what this platform wants: # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention $as_echo "#define USE_THREAD_ALLOC 1" >>confdefs.h $as_echo "#define _REENTRANT 1" >>confdefs.h if test "`uname -s`" = "SunOS" ; then $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h fi $as_echo "#define _THREAD_SAFE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthread" >&5 $as_echo_n "checking for pthread_mutex_init in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_mutex_init=yes else ac_cv_lib_pthread_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthread_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_pthread_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __pthread_mutex_init in -lpthread" >&5 $as_echo_n "checking for __pthread_mutex_init in -lpthread... " >&6; } if ${ac_cv_lib_pthread___pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char __pthread_mutex_init (); int main () { return __pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread___pthread_mutex_init=yes else ac_cv_lib_pthread___pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthread___pthread_mutex_init" >&6; } if test "x$ac_cv_lib_pthread___pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthreads" >&5 $as_echo_n "checking for pthread_mutex_init in -lpthreads... " >&6; } if ${ac_cv_lib_pthreads_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthreads $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthreads_pthread_mutex_init=yes else ac_cv_lib_pthreads_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_pthreads_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_pthreads_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc" >&5 $as_echo_n "checking for pthread_mutex_init in -lc... " >&6; } if ${ac_cv_lib_c_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_pthread_mutex_init=yes else ac_cv_lib_c_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_c_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_c_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc_r" >&5 $as_echo_n "checking for pthread_mutex_init in -lc_r... " >&6; } if ${ac_cv_lib_c_r_pthread_mutex_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_init (); int main () { return pthread_mutex_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_r_pthread_mutex_init=yes else ac_cv_lib_c_r_pthread_mutex_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_mutex_init" >&5 $as_echo "$ac_cv_lib_c_r_pthread_mutex_init" >&6; } if test "x$ac_cv_lib_c_r_pthread_mutex_init" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -pthread" else TCL_THREADS=0 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&5 $as_echo "$as_me: WARNING: Do not know how to find pthread lib on your system - thread support disabled" >&2;} fi fi fi fi fi else TCL_THREADS=0 fi # Do checking message here to not mess up interleaved configure output { $as_echo "$as_me:${as_lineno-$LINENO}: checking for building with threads" >&5 $as_echo_n "checking for building with threads... " >&6; } if test "${TCL_THREADS}" = 1; then $as_echo "#define TCL_THREADS 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (default)" >&5 $as_echo "yes (default)" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # TCL_THREADS sanity checking. See if our request for building with # threads is the same as the way Tcl was built. If not, warn the user. case ${TCL_DEFS} in *THREADS=1*) if test "${TCL_THREADS}" = "0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads." >&5 $as_echo "$as_me: WARNING: Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads." >&2;} fi ;; *) if test "${TCL_THREADS}" = "1"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core." >&5 $as_echo "$as_me: WARNING: --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core." >&2;} fi ;; esac #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- #TEA_ENABLE_SHARED #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Step 0.a: Enable 64 bit support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit support is requested" >&5 $as_echo_n "checking if 64bit support is requested... " >&6; } # Check whether --enable-64bit was given. if test "${enable_64bit+set}" = set; then : enableval=$enable_64bit; do64bit=$enableval else do64bit=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bit" >&5 $as_echo "$do64bit" >&6; } # Step 0.b: Enable Solaris 64 bit VIS support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 64bit Sparc VIS support is requested" >&5 $as_echo_n "checking if 64bit Sparc VIS support is requested... " >&6; } # Check whether --enable-64bit-vis was given. if test "${enable_64bit_vis+set}" = set; then : enableval=$enable_64bit_vis; do64bitVIS=$enableval else do64bitVIS=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $do64bitVIS" >&5 $as_echo "$do64bitVIS" >&6; } # Force 64bit on with VIS if test "$do64bitVIS" = "yes"; then : do64bit=yes fi # Step 0.c: Check if visibility support is available. Do this here so # that platform specific alternatives can be used below if this fails. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler supports visibility \"hidden\"" >&5 $as_echo_n "checking if compiler supports visibility \"hidden\"... " >&6; } if ${tcl_cv_cc_visibility_hidden+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) void f(void); void f(void) {} int main () { f(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_visibility_hidden=yes else tcl_cv_cc_visibility_hidden=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_visibility_hidden" >&5 $as_echo "$tcl_cv_cc_visibility_hidden" >&6; } if test $tcl_cv_cc_visibility_hidden = yes; then : $as_echo "#define MODULE_SCOPE extern __attribute__((__visibility__(\"hidden\")))" >>confdefs.h $as_echo "#define HAVE_HIDDEN 1" >>confdefs.h fi # Step 0.d: Disable -rpath support? { $as_echo "$as_me:${as_lineno-$LINENO}: checking if rpath support is requested" >&5 $as_echo_n "checking if rpath support is requested... " >&6; } # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; doRpath=$enableval else doRpath=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doRpath" >&5 $as_echo "$doRpath" >&6; } # TEA specific: Cross-compiling options for Windows/CE builds? if test "${TEA_PLATFORM}" = windows; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Windows/CE build is requested" >&5 $as_echo_n "checking if Windows/CE build is requested... " >&6; } # Check whether --enable-wince was given. if test "${enable_wince+set}" = set; then : enableval=$enable_wince; doWince=$enableval else doWince=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doWince" >&5 $as_echo "$doWince" >&6; } fi # Set the variable "system" to hold the name and version number # for the system. { $as_echo "$as_me:${as_lineno-$LINENO}: checking system version" >&5 $as_echo_n "checking system version... " >&6; } if ${tcl_cv_sys_version+:} false; then : $as_echo_n "(cached) " >&6 else # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5 $as_echo "$as_me: WARNING: can't find uname command" >&2;} tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5 $as_echo "$tcl_cv_sys_version" >&6; } system=$tcl_cv_sys_version # Require ranlib early so we can override it in special cases below. # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g if test "$GCC" = yes; then : CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" else CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" if test "x$SHLIB_VERSION" = x; then : SHLIB_VERSION="1.0" fi case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs # MACHINE is IX86 for LINK, but this is used by the manifest, # which requires x86|amd64|ia64. MACHINE="X86" if test "$do64bit" != "no" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft Platform SDK" fi MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` PATH64="" case "$do64bit" in amd64|x64|yes) MACHINE="AMD64" ; # default to AMD64 64-bit build PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&5 $as_echo "$as_me: WARNING: Could not find 64-bit $MACHINE SDK to enable 64bit mode" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ensure latest Platform SDK is installed" >&5 $as_echo "$as_me: WARNING: Ensure latest Platform SDK is installed" >&2;} do64bit="no" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using 64-bit $MACHINE mode" >&5 $as_echo " Using 64-bit $MACHINE mode" >&6; } do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" != "no" ; then as_fn_error $? "Windows/CE and 64-bit builds incompatible" "$LINENO" 5 fi if test "$GCC" = "yes" ; then as_fn_error $? "Windows/CE and GCC builds incompatible" "$LINENO" 5 fi # First, look for one uninstalled. # the alternative search directory is invoked by --with-celib if test x"${no_celib}" = x ; then # we reset no_celib in case something fails here no_celib=true # Check whether --with-celib was given. if test "${with_celib+set}" = set; then : withval=$with_celib; with_celibconfig=${withval} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Windows/CE celib directory" >&5 $as_echo_n "checking for Windows/CE celib directory... " >&6; } if ${ac_cv_c_celibconfig+:} false; then : $as_echo_n "(cached) " >&6 else # First check to see if --with-celibconfig was specified. if test x"${with_celibconfig}" != x ; then if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else as_fn_error $? "${with_celibconfig} directory doesn't contain inc directory" "$LINENO" 5 fi fi # then check for a celib library if test x"${ac_cv_c_celibconfig}" = x ; then for i in \ ../celib-palm-3.0 \ ../celib \ ../../celib-palm-3.0 \ ../../celib \ `ls -dr ../celib-*3.[0-9]* 2>/dev/null` \ ${srcdir}/../celib-palm-3.0 \ ${srcdir}/../celib \ `ls -dr ${srcdir}/../celib-*3.[0-9]* 2>/dev/null` \ ; do if test -d "$i/inc" ; then ac_cv_c_celibconfig=`(cd $i; pwd)` break fi done fi fi if test x"${ac_cv_c_celibconfig}" = x ; then as_fn_error $? "Cannot find celib support library directory" "$LINENO" 5 else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $CELIB_DIR" >&5 $as_echo "found $CELIB_DIR" >&6; } fi fi # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length($1)) { printf "CEVERSION=\"%s\"\n", $1; \ if ($1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length($2)) { printf "TARGETCPU=\"%s\"\n", toupper($2) }; \ if (length($3)) { printf "ARCH=\"%s\"\n", toupper($3) }; \ if (length($4)) { printf "PLATFORM=\"%s\"\n", $4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then as_fn_error $? "could not find PocketPC SDK or target compiler to enable WinCE mode $CEVERSION,$TARGETCPU,$ARCH,$PLATFORM" "$LINENO" 5 doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" != "no" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="\"${PATH64}/cl.exe\"" CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" RC="\"${MSSDK}/bin/rc.exe\"" lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" LINKBIN="\"${PATH64}/link.exe\"" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" # Avoid 'unresolved external symbol __security_cookie' # errors, c.f. http://support.microsoft.com/?id=894573 vars="bufferoverflowU.lib" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([^-].*\)\.lib$/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="\"${CEBINROOT}/cl.exe\"" else CC="\"${CEBINROOT}/cl${ARCH}.exe\"" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" arch=`echo ${ARCH} | awk '{print tolower($0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do cat >>confdefs.h <<_ACEOF #define $i 1 _ACEOF done cat >>confdefs.h <<_ACEOF #define _WIN32_WCE $CEVERSION _ACEOF cat >>confdefs.h <<_ACEOF #define UNDER_CE $CEVERSION _ACEOF CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RC"; then ac_cv_prog_RC="$RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RC="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RC=$ac_cv_prog_RC if test -n "$RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 $as_echo "$RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RC"; then ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RC"; then ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RC="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 $as_echo "$ac_ct_RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RC" = x; then RC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RC=$ac_ct_RC fi else RC="$ac_cv_prog_RC" fi CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cross-compile version of gcc" >&5 $as_echo_n "checking for cross-compile version of gcc... " >&6; } if ${ac_cv_cross+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __WIN32__ #error cross-compiler #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cross=yes else ac_cv_cross=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cross" >&5 $as_echo "$ac_cv_cross" >&6; } if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # and also # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx # This essentially turns it all on. LDFLAGS_DEBUG="-debug -debugtype:cv" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"; then : # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([^ ]*\)/\1_r/'` ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using $CC for compiling with threads" >&5 $as_echo "Using $CC for compiling with threads" >&6; } fi LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : if test "$GCC" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} else do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" fi fi if test "`uname -m`" = ia64; then : # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" if test "$GCC" = yes; then : CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' else CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' else if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared -Wl,-bexpall' else SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" fi SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} fi ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lbind" >&5 $as_echo_n "checking for inet_ntoa in -lbind... " >&6; } if ${ac_cv_lib_bind_inet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbind $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inet_ntoa (); int main () { return inet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bind_inet_ntoa=yes else ac_cv_lib_bind_inet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bind_inet_ntoa" >&5 $as_echo "$ac_cv_lib_bind_inet_ntoa" >&6; } if test "x$ac_cv_lib_bind_inet_ntoa" = xyes; then : LIBS="$LIBS -lbind -lsocket" fi ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5 $as_echo_n "checking for inet_ntoa in -lnetwork... " >&6; } if ${ac_cv_lib_network_inet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnetwork $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inet_ntoa (); int main () { return inet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_network_inet_ntoa=yes else ac_cv_lib_network_inet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_network_inet_ntoa" >&5 $as_echo "$ac_cv_lib_network_inet_ntoa" >&6; } if test "x$ac_cv_lib_network_inet_ntoa" = xyes; then : LIBS="$LIBS -lnetwork" fi ;; HP-UX-*.11.*) # Use updated header definitions where possible $as_echo "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library if test "`uname -m`" = ia64; then : SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi else SHLIB_SUFFIX=".sl" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : tcl_ok=yes else tcl_ok=no fi if test "$tcl_ok" = yes; then : LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" fi if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} else CFLAGS="$CFLAGS -z" # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = "yes"; then : if test "$GCC" = yes; then : case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} ;; esac else do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" fi fi ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi if test "$GCC" = yes; then : CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" else case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" fi ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : if test "$GCC" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported by gcc" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported by gcc" >&2;} else do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" fi fi ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "`uname -m`" = "alpha"; then : CFLAGS="$CFLAGS -mieee" fi if test $do64bit = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -m64 flag" >&5 $as_echo_n "checking if compiler accepts -m64 flag... " >&6; } if ${tcl_cv_cc_m64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -m64" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_m64=yes else tcl_cv_cc_m64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_m64" >&5 $as_echo "$tcl_cv_cc_m64" >&6; } if test $tcl_cv_cc_m64 = yes; then : CFLAGS="$CFLAGS -m64" do64bit_ok=yes fi fi # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. if test x"${USE_COMPAT}" != x; then : CFLAGS="$CFLAGS -fno-inline" fi ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac if test "${TCL_THREADS}" = "1"; then : # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" fi # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "${TCL_THREADS}" = "1"; then : # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$@" SHLIB_SUFFIX=".so" LDFLAGS="" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' fi if test "${TCL_THREADS}" = "1"; then : # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS" fi # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1' TCL_LIB_VERSIONS_OK=nodots ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if ($i~/^(isysroot|mmacosx-version-min)/) print "-"$i}'`" CFLAGS="`echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if (!($i~/^(isysroot|mmacosx-version-min)/)) print "-"$i}'`" if test $do64bit = yes; then : case `arch` in ppc) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch ppc64 flag" >&5 $as_echo_n "checking if compiler accepts -arch ppc64 flag... " >&6; } if ${tcl_cv_cc_arch_ppc64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_arch_ppc64=yes else tcl_cv_cc_arch_ppc64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_ppc64" >&5 $as_echo "$tcl_cv_cc_arch_ppc64" >&6; } if test $tcl_cv_cc_arch_ppc64 = yes; then : CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" do64bit_ok=yes fi;; i386) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch x86_64 flag" >&5 $as_echo_n "checking if compiler accepts -arch x86_64 flag... " >&6; } if ${tcl_cv_cc_arch_x86_64+:} false; then : $as_echo_n "(cached) " >&6 else hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch x86_64" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_cc_arch_x86_64=yes else tcl_cv_cc_arch_x86_64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS=$hold_cflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_x86_64" >&5 $as_echo "$tcl_cv_cc_arch_x86_64" >&6; } if test $tcl_cv_cc_arch_x86_64 = yes; then : CFLAGS="$CFLAGS -arch x86_64" do64bit_ok=yes fi;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&5 $as_echo "$as_me: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&2;};; esac else # Check for combined 32-bit and 64-bit fat build if echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '; then : fat_32_64=yes fi fi # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -single_module flag" >&5 $as_echo_n "checking if ld accepts -single_module flag... " >&6; } if ${tcl_cv_ld_single_module+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_single_module=yes else tcl_cv_ld_single_module=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_single_module" >&5 $as_echo "$tcl_cv_ld_single_module" >&6; } if test $tcl_cv_ld_single_module = yes; then : SHLIB_LD="${SHLIB_LD} -Wl,-single_module" fi # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([0-9]\{1,5\}\)\(\(\.[0-9]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: if test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int($2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int($2)}'`" -lt 4; then : LDFLAGS="$LDFLAGS -prebind" fi LDFLAGS="$LDFLAGS -headerpad_max_install_names" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld accepts -search_paths_first flag" >&5 $as_echo_n "checking if ld accepts -search_paths_first flag... " >&6; } if ${tcl_cv_ld_search_paths_first+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_search_paths_first=yes else tcl_cv_ld_search_paths_first=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_search_paths_first" >&5 $as_echo "$tcl_cv_ld_search_paths_first" >&6; } if test $tcl_cv_ld_search_paths_first = yes; then : LDFLAGS="$LDFLAGS -Wl,-search_paths_first" fi if test "$tcl_cv_cc_visibility_hidden" != yes; then : $as_echo "#define MODULE_SCOPE __private_extern__" >>confdefs.h tcl_cv_cc_visibility_hidden=yes fi CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. if test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"; then : if test "${TEA_WINDOWINGSYSTEM}" = x11; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit X11" >&5 $as_echo_n "checking for 64-bit X11... " >&6; } if ${tcl_cv_lib_x11_64+:} false; then : $as_echo_n "(cached) " >&6 else for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_lib_x11_64=yes else tcl_cv_lib_x11_64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_x11_64" >&5 $as_echo "$tcl_cv_lib_x11_64" >&6; } fi if test "${TEA_WINDOWINGSYSTEM}" = aqua; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit Tk" >&5 $as_echo_n "checking for 64-bit Tk... " >&6; } if ${tcl_cv_lib_tk_64+:} false; then : $as_echo_n "(cached) " >&6 else for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { Tk_InitStubs(NULL, "", 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_lib_tk_64=yes else tcl_cv_lib_tk_64=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_tk_64" >&5 $as_echo "$tcl_cv_lib_tk_64" >&6; } fi # remove 64-bit arch flags from CFLAGS et al. if configuration # does not support 64-bit. if test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Removing 64-bit architectures from compiler & linker flags" >&5 $as_echo "$as_me: Removing 64-bit architectures from compiler & linker flags" >&6;} for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done fi fi ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy $as_echo "#define _OE_SOCKETS 1" >>confdefs.h ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" if test "$SHARED_BUILD" = 1; then : SHLIB_LD='ld -shared -expect_unresolved "*"' else SHLIB_LD='ld -non_shared -expect_unresolved "*"' fi SHLIB_SUFFIX=".so" if test $doRpath = yes; then : CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' fi if test "$GCC" = yes; then : CFLAGS="$CFLAGS -mieee" else CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee" fi # see pthread_intro(3) for pthread support on osf1, k.furukawa if test "${TCL_THREADS}" = 1; then : CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` if test "$GCC" = yes; then : LIBS="$LIBS -lpthread -lmach -lexc" else CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" fi fi ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) if test "$GCC" = yes; then : SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" else SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" fi SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[0-6]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} else SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} fi ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. $as_echo "#define _REENTRANT 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker if test "$do64bit" = yes; then : arch=`isainfo` if test "$arch" = "sparcv9 sparc"; then : if test "$GCC" = yes; then : if test "`${CC} -dumpversion | awk -F. '{print $1}'`" -lt 3; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&2;} else do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" fi else do64bit_ok=yes if test "$do64bitVIS" = yes; then : CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS_ARCH="-xarch=v9a" else CFLAGS="$CFLAGS -xarch=v9" LDFLAGS_ARCH="-xarch=v9" fi # Solaris 64 uses this as well #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" fi else if test "$arch" = "amd64 i386"; then : if test "$GCC" = yes; then : case $system in SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*) do64bit_ok=yes CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;};; esac else do64bit_ok=yes case $system in SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*) CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported for $arch" >&5 $as_echo "$as_me: WARNING: 64bit mode not supported for $arch" >&2;} fi fi fi SHLIB_SUFFIX=".so" if test "$GCC" = yes; then : SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} if test "$do64bit_ok" = yes; then : if test "$arch" = "sparcv9 sparc"; then : # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" else if test "$arch" = "amd64 i386"; then : # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" fi fi fi else case $system in SunOS-5.[1-9][0-9]*) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';; *) SHLIB_LD='/usr/ccs/bin/ld -G -z text';; esac CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' fi ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld accepts -Bexport flag" >&5 $as_echo_n "checking for ld accepts -Bexport flag... " >&6; } if ${tcl_cv_ld_Bexport+:} false; then : $as_echo_n "(cached) " >&6 else hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : tcl_cv_ld_Bexport=yes else tcl_cv_ld_Bexport=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$hold_ldflags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_Bexport" >&5 $as_echo "$tcl_cv_ld_Bexport" >&6; } if test $tcl_cv_ld_Bexport = yes; then : LDFLAGS="$LDFLAGS -Wl,-Bexport" fi CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; esac if test "$do64bit" = yes -a "$do64bit_ok" = no; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 64bit support being disabled -- don't know magic for this platform" >&5 $as_echo "$as_me: WARNING: 64bit support being disabled -- don't know magic for this platform" >&2;} fi # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. if test "$GCC" = yes; then : case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac fi if test "$tcl_cv_cc_visibility_hidden" != yes; then : $as_echo "#define MODULE_SCOPE extern" >>confdefs.h fi if test "$SHARED_LIB_SUFFIX" = ""; then : # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}' fi if test "$UNSHARED_LIB_SUFFIX" = ""; then : # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a' fi if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SEH support in compiler" >&5 $as_echo_n "checking for SEH support in compiler... " >&6; } if ${tcl_cv_seh+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : tcl_cv_seh=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : tcl_cv_seh=yes else tcl_cv_seh=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_seh" >&5 $as_echo "$tcl_cv_seh" >&6; } if test "$tcl_cv_seh" = "no" ; then $as_echo "#define HAVE_NO_SEH 1" >>confdefs.h fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EXCEPTION_DISPOSITION support in include files" >&5 $as_echo_n "checking for EXCEPTION_DISPOSITION support in include files... " >&6; } if ${tcl_cv_eh_disposition+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN int main () { EXCEPTION_DISPOSITION x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_eh_disposition=yes else tcl_cv_eh_disposition=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_eh_disposition" >&5 $as_echo "$tcl_cv_eh_disposition" >&6; } if test "$tcl_cv_eh_disposition" = "no" ; then $as_echo "#define EXCEPTION_DISPOSITION int" >>confdefs.h fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for winnt.h that ignores VOID define" >&5 $as_echo_n "checking for winnt.h that ignores VOID define... " >&6; } if ${tcl_cv_winnt_ignore_void+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define VOID void #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main () { CHAR c; SHORT s; LONG l; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_winnt_ignore_void=yes else tcl_cv_winnt_ignore_void=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_winnt_ignore_void" >&5 $as_echo "$tcl_cv_winnt_ignore_void" >&6; } if test "$tcl_cv_winnt_ignore_void" = "yes" ; then $as_echo "#define HAVE_WINNT_IGNORE_VOID 1" >>confdefs.h fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cast to union support" >&5 $as_echo_n "checking for cast to union support... " >&6; } if ${tcl_cv_cast_to_union+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { union foo { int i; double d; }; union foo f = (union foo) (int) 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_cast_to_union=yes else tcl_cv_cast_to_union=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cast_to_union" >&5 $as_echo "$tcl_cv_cast_to_union" >&6; } if test "$tcl_cv_cast_to_union" = "yes"; then $as_echo "#define HAVE_CAST_TO_UNION 1" >>confdefs.h fi # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary { $as_echo "$as_me:${as_lineno-$LINENO}: checking for required early compiler flags" >&5 $as_echo_n "checking for required early compiler flags... " >&6; } tcl_flags="" if ${tcl_cv_flag__isoc99_source+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *)strtoll; char *q = (char *)strtoull; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__isoc99_source=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _ISOC99_SOURCE 1 #include int main () { char *p = (char *)strtoll; char *q = (char *)strtoull; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__isoc99_source=yes else tcl_cv_flag__isoc99_source=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__isoc99_source}" = "xyes" ; then $as_echo "#define _ISOC99_SOURCE 1" >>confdefs.h tcl_flags="$tcl_flags _ISOC99_SOURCE" fi if ${tcl_cv_flag__largefile64_source+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct stat64 buf; int i = stat64("/", &buf); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile64_source=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE64_SOURCE 1 #include int main () { struct stat64 buf; int i = stat64("/", &buf); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile64_source=yes else tcl_cv_flag__largefile64_source=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__largefile64_source}" = "xyes" ; then $as_echo "#define _LARGEFILE64_SOURCE 1" >>confdefs.h tcl_flags="$tcl_flags _LARGEFILE64_SOURCE" fi if ${tcl_cv_flag__largefile_source64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *)open64; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile_source64=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE64 1 #include int main () { char *p = (char *)open64; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_flag__largefile_source64=yes else tcl_cv_flag__largefile_source64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_flag__largefile_source64}" = "xyes" ; then $as_echo "#define _LARGEFILE_SOURCE64 1" >>confdefs.h tcl_flags="$tcl_flags _LARGEFILE_SOURCE64" fi if test "x${tcl_flags}" = "x" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_flags}" >&5 $as_echo "${tcl_flags}" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit integer type" >&5 $as_echo_n "checking for 64-bit integer type... " >&6; } if ${tcl_cv_type_64bit+:} false; then : $as_echo_n "(cached) " >&6 else tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { __int64 value = (__int64) 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_type_64bit=__int64 else tcl_type_64bit="long long" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { switch (0) { case 1: case (sizeof(${tcl_type_64bit})==sizeof(long)): ; } ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_type_64bit=${tcl_type_64bit} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "${tcl_cv_type_64bit}" = none ; then $as_echo "#define TCL_WIDE_INT_IS_LONG 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: using long" >&5 $as_echo "using long" >&6; } elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* { $as_echo "$as_me:${as_lineno-$LINENO}: result: using Tcl header defaults" >&5 $as_echo "using Tcl header defaults" >&6; } else cat >>confdefs.h <<_ACEOF #define TCL_WIDE_INT_TYPE ${tcl_cv_type_64bit} _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${tcl_cv_type_64bit}" >&5 $as_echo "${tcl_cv_type_64bit}" >&6; } # Now check for auxiliary declarations { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent64" >&5 $as_echo_n "checking for struct dirent64... " >&6; } if ${tcl_cv_struct_dirent64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct dirent64 p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_struct_dirent64=yes else tcl_cv_struct_dirent64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_dirent64" >&5 $as_echo "$tcl_cv_struct_dirent64" >&6; } if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then $as_echo "#define HAVE_STRUCT_DIRENT64 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct stat64" >&5 $as_echo_n "checking for struct stat64... " >&6; } if ${tcl_cv_struct_stat64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct stat64 p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_struct_stat64=yes else tcl_cv_struct_stat64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_stat64" >&5 $as_echo "$tcl_cv_struct_stat64" >&6; } if test "x${tcl_cv_struct_stat64}" = "xyes" ; then $as_echo "#define HAVE_STRUCT_STAT64 1" >>confdefs.h fi for ac_func in open64 lseek64 do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for off64_t" >&5 $as_echo_n "checking for off64_t... " >&6; } if ${tcl_cv_type_off64_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { off64_t offset; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : tcl_cv_type_off64_t=yes else tcl_cv_type_off64_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "x${tcl_cv_type_off64_t}" = "xyes" && \ test "x${ac_cv_func_lseek64}" = "xyes" && \ test "x${ac_cv_func_open64}" = "xyes" ; then $as_echo "#define HAVE_TYPE_OFF64_T 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build with symbols" >&5 $as_echo_n "checking for build with symbols... " >&6; } # Check whether --enable-symbols was given. if test "${enable_symbols+set}" = set; then : enableval=$enable_symbols; tcl_ok=$enableval else tcl_ok=no fi DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (standard debugging)" >&5 $as_echo "yes (standard debugging)" >&6; } fi fi # TEA specific: if test "${TEA_PLATFORM}" != "windows" ; then LDFLAGS_DEFAULT="${LDFLAGS}" fi if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then $as_echo "#define TCL_MEM_DEBUG 1" >>confdefs.h fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled symbols mem debugging" >&5 $as_echo "enabled symbols mem debugging" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled $tcl_ok debugging" >&5 $as_echo "enabled $tcl_ok debugging" >&6; } fi fi #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. Add Tk too if necessary. #-------------------------------------------------------------------- #AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs]) #AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\$@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\$@ \$(PKG_OBJECTS)" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "manifest needed" >/dev/null 2>&1; then : # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" CLEANFILES="$CLEANFILES *.manifest" fi rm -f conftest* MAKE_STUB_LIB="\${STLIB_LD} -out:\$@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \$@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \$@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \$@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then MAKE_LIB="${MAKE_SHARED_LIB} " else MAKE_LIB="${MAKE_STATIC_LIB} " fi #-------------------------------------------------------------------- # Shared libraries and static libraries have different names. # Use the double eval to make sure any variables in the suffix is # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) RANLIB=: RANLIB_STUB=: else RANLIB_STUB="${RANLIB}" if test "${SHARED_BUILD}" = "1" ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" fi eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" RANLIB=: else eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" fi # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi #-------------------------------------------------------------------- # Determine the name of the tclsh and/or wish executables in the # Tcl and Tk build directories or the location they were installed # into. These paths are used to support running test cases only, # the Makefile should not be making use of these paths to generate # a pkgIndex.tcl file or anything else at extension build time. #-------------------------------------------------------------------- #TEA_PROG_TCLSH #TEA_PROG_WISH #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS="" : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by ds9 $as_me 7.5, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ ds9 config.status 7.5 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi saods9/ds9/unix/configure.in000755 000765 000000 00000016763 12652237173 016407 0ustar00joyewheel000000 000000 #!/bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. #----------------------------------------------------------------------- # Sample configure.in for Tcl Extensions. The only places you should # need to modify this file are marked by the string __CHANGE__ #----------------------------------------------------------------------- #----------------------------------------------------------------------- # __CHANGE__ # Set your package name and version numbers here. # # This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION # set as provided. These will also be added as -D defs in your Makefile # so you can encode the package version directly into the source files. # This will also define a special symbol for Windows (BUILD_ # so that we create the export library with the dll. #----------------------------------------------------------------------- AC_INIT([ds9], [7.5]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- TEA_INIT([3.9]) AC_CONFIG_AUX_DIR(tclconfig) #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- TEA_PATH_TCLCONFIG TEA_LOAD_TCLCONFIG #-------------------------------------------------------------------- # Load the tkConfig.sh file if necessary (Tk extension) #-------------------------------------------------------------------- TEA_PATH_TKCONFIG TEA_LOAD_TKCONFIG #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- TEA_PREFIX #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC and a few others to create the basic setup # necessary to compile executables. #----------------------------------------------------------------------- TEA_SETUP_COMPILER #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- #TEA_ADD_SOURCES([sample.c tclsample.c]) #TEA_ADD_HEADERS([]) #TEA_ADD_INCLUDES([]) TEA_ADD_LIBS([-lstdc++]) #TEA_ADD_CFLAGS([]) #TEA_ADD_STUB_SOURCES([]) #TEA_ADD_TCL_SOURCES([]) TEA_CONFIG_SYSTEM case $system in Darwin*) AC_DEFINE([ZIPFILE]) ;; *) ;; esac AC_SUBST(system) AC_CHECK_LIB([xml2],[xmlInitParser]) #-------------------------------------------------------------------- # __CHANGE__ # # You can add more files to clean if your extension creates any extra # files by extending CLEANFILES. # Add pkgIndex.tcl if it is generated in the Makefile instead of ./configure # and change Makefile.in to move it from CONFIG_CLEAN_FILES to BINARIES var. # # A few miscellaneous platform-specific items: # TEA_ADD_* any platform specific compiler/build info here. #-------------------------------------------------------------------- #CLEANFILES="$CLEANFILES pkgIndex.tcl" if test "${TEA_PLATFORM}" = "windows" ; then # Ensure no empty if clauses : #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) else # Ensure no empty else clauses : #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) fi #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- TEA_PUBLIC_TCL_HEADERS #TEA_PRIVATE_TCL_HEADERS TEA_PUBLIC_TK_HEADERS #TEA_PRIVATE_TK_HEADERS TEA_PATH_X #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. # This auto-enables if Tcl was compiled threaded. #-------------------------------------------------------------------- TEA_ENABLE_THREADS #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- #TEA_ENABLE_SHARED #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- TEA_CONFIG_CFLAGS #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- TEA_ENABLE_SYMBOLS #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. Add Tk too if necessary. #-------------------------------------------------------------------- #AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs]) #AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- TEA_MAKE_LIB #-------------------------------------------------------------------- # Determine the name of the tclsh and/or wish executables in the # Tcl and Tk build directories or the location they were installed # into. These paths are used to support running test cases only, # the Makefile should not be making use of these paths to generate # a pkgIndex.tcl file or anything else at extension build time. #-------------------------------------------------------------------- #TEA_PROG_TCLSH #TEA_PROG_WISH #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- AC_OUTPUT([Makefile]) saods9/ds9/unix/ds9.C000644 000765 000000 00000015021 12717673340 014662 0ustar00joyewheel000000 000000 // Copyright (C) 1999-2015 // Smithsonian Astrophysical Observatory, Cambridge, MA, USA // For conditions of distribution and use, see copyright notice in "copyright" #include #include #include #include using namespace std; #include #include extern "C" { int SAOAppInit(Tcl_Interp *interp); int SAOLocalMainHook(int* argc, char*** argv); void TclSetStartupScriptFileName(const char*); int Zvfs_Init(Tcl_Interp*); int Zvfs_Mount(Tcl_Interp*, char*, char *); int Tkblt_Init(Tcl_Interp*); int Tktable_Init(Tcl_Interp*); int Tclcheckdns_Init(Tcl_Interp*); int Tksao_Init(Tcl_Interp*); int Tkhtml1_Init(Tcl_Interp*); int Tkmpeg_Init(Tcl_Interp*); int Tkimg_Init(Tcl_Interp*); int Zlibtcl_Init(Tcl_Interp*); int Jpegtcl_Init(Tcl_Interp*); int Tkimgjpeg_Init(Tcl_Interp*); int Tifftcl_Init(Tcl_Interp*); int Tkimgtiff_Init(Tcl_Interp*); int Pngtcl_Init(Tcl_Interp*); int Tkimgpng_Init(Tcl_Interp*); int Tkimggif_Init(Tcl_Interp*); int Tkimgwindow_Init(Tcl_Interp*); int Tclxpa_Init(Tcl_Interp*); int Tcliis_Init(Tcl_Interp*); int Tclxml_Init(Tcl_Interp*); int Tclxml_libxml2_Init(Tcl_Interp*); int Signal_ext_Init(Tcl_Interp*); } Tcl_Interp *global_interp; void internalError(const char* msg) { Tcl_SetVar2(global_interp, "ds9", "msg", msg, TCL_GLOBAL_ONLY); Tcl_SetVar2(global_interp, "ds9", "msg,level", "error", TCL_GLOBAL_ONLY); } // currently use relative path // using full path with spaces causes problems // with htmwidget and tcl/tk int SAOLocalMainHook(int* argcPtr, char*** argvPtr) { // sync C++ io calls with C io calls ios::sync_with_stdio(); // do this first Tcl_FindExecutable((*argvPtr)[0]); // so that tcl and tk know where to find their libs // we do it here before InitLibraryPath is called putenv((char*)"TCL_LIBRARY=./zvfsmntpt/tcl8.6"); putenv((char*)"TK_LIBRARY=./zvfsmntpt/tk8.6"); // startup script Tcl_Obj *path = Tcl_NewStringObj("./zvfsmntpt/library/ds9.tcl",-1); Tcl_SetStartupScript(path, NULL); return TCL_OK; } int SAOAppInit(Tcl_Interp *interp) { // save interp for cputs function global_interp = interp; // We have to initialize the virtual filesystem before calling // Tcl_Init(). Otherwise, Tcl_Init() will not be able to find // its startup script files. if (Zvfs_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "zvfs", Zvfs_Init, (Tcl_PackageInitProc*)NULL); // find current working directory, and set as mount point { Tcl_DString pwd; Tcl_DStringInit(&pwd); Tcl_GetCwd(interp, &pwd); #ifdef ZIPFILE ostringstream str; str << (char *)Tcl_GetNameOfExecutable() << ".zip" << ends; if( Zvfs_Mount(interp, (char*)str.str().c_str(), Tcl_DStringValue(&pwd)) != TCL_OK ){ char str[] = "ERROR: Unable to open the auxiliary ds9 file 'ds9.zip'. If you moved the ds9 program from its original location, please also move the zip file to the same place."; cerr << str << endl; exit(1); } #else Zvfs_Mount(interp, (char *)Tcl_GetNameOfExecutable(), Tcl_DStringValue(&pwd)); #endif Tcl_DStringFree(&pwd); } // Tcl if (Tcl_Init(interp) == TCL_ERROR) return TCL_ERROR; // Tk if (Tk_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage(interp,"Tk", Tk_Init, Tk_SafeInit); // Tkblt if (Tkblt_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage(interp, "tkblt", Tkblt_Init, (Tcl_PackageInitProc*)NULL); // Tktable if (Tktable_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "Tktable", Tktable_Init, (Tcl_PackageInitProc*)NULL); // Tclcheckdns if (Tclcheckdns_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "tclcheckdns", Tclcheckdns_Init, (Tcl_PackageInitProc*)NULL); // Tksao if (Tksao_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "tksao", Tksao_Init, (Tcl_PackageInitProc*)NULL); // Tkhtml1 if (Tkhtml1_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "tkhtml1", Tkhtml1_Init, (Tcl_PackageInitProc*)NULL); // Tclxpa if (Tclxpa_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "Tclxpa", Tclxpa_Init, (Tcl_PackageInitProc*)NULL); // Tcliis if (Tcliis_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "Tcliis", Tcliis_Init, (Tcl_PackageInitProc*)NULL); // Tkmpeg if (Tkmpeg_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "tkmpeg", Tkmpeg_Init, (Tcl_PackageInitProc*)NULL); // Tclxml if (Tclxml_Init(interp) == TCL_ERROR) return TCL_ERROR; // Tkimg if (Tkimg_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "img", Tkimg_Init, (Tcl_PackageInitProc*)NULL); // zlibtcl if (Zlibtcl_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "zlibtcl", Zlibtcl_Init, (Tcl_PackageInitProc*)NULL); // jpegtcl if (Jpegtcl_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "jpegtcl", Jpegtcl_Init, (Tcl_PackageInitProc*)NULL); // Tkimgjpeg if (Tkimgjpeg_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "jpeg", Tkimgjpeg_Init, (Tcl_PackageInitProc*)NULL); // Tifftcl if (Tifftcl_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "tifftcl", Tifftcl_Init, (Tcl_PackageInitProc*)NULL); // Tkimgtiff if (Tkimgtiff_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "tiff", Tkimgtiff_Init, (Tcl_PackageInitProc*)NULL); // Pngtcl if (Pngtcl_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "pngtcl", Pngtcl_Init, (Tcl_PackageInitProc*)NULL); // Tkimgpng if (Tkimgpng_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "png", Tkimgpng_Init, (Tcl_PackageInitProc*)NULL); // Tkimggif if (Tkimggif_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "gif", Tkimggif_Init, (Tcl_PackageInitProc*)NULL); // Tkimgwindow if (Tkimgwindow_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "window", Tkimgwindow_Init, (Tcl_PackageInitProc*)NULL); // Signal_Ext if (Signal_ext_Init(interp) == TCL_ERROR) return TCL_ERROR; Tcl_StaticPackage (interp, "signal", Signal_ext_Init, (Tcl_PackageInitProc*)NULL); return TCL_OK; } saods9/ds9/unix/Makefile.in000644 000765 000000 00000012146 12734262536 016131 0ustar00joyewheel000000 000000 include ../../make.pkgs TCL_LIB_SPEC = @TCL_LIB_SPEC@ TCL_STUB_LIB_SPEC= @TCL_STUB_LIB_SPEC@ TK_LIBS = @TK_LIBS@ TK_LIB_SPEC = @TK_LIB_SPEC@ TK_STUB_LIB_SPEC= @TK_STUB_LIB_SPEC@ CC = @CC@ CFLAGS_DEFAULT = @CFLAGS_DEFAULT@ CFLAGS_WARNING = @CFLAGS_WARNING@ EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ INCLUDES = @PKG_INCLUDES@ @TCL_INCLUDES@ @TK_INCLUDES@ @TK_XINCLUDES@ PKG_CFLAGS = @PKG_CFLAGS@ DEFS = @DEFS@ $(PKG_CFLAGS) CPPFLAGS = @CPPFLAGS@ LIBS = @PKG_LIBS@ @LIBS@ CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) system = @system@ .SUFFIXES: .c .C .$(OBJEXT) .c.@OBJEXT@: $(COMPILE) -c `@CYGPATH@ $<` -o $@ .C.@OBJEXT@: $(COMPILE) -c `@CYGPATH@ $<` -o $@ #--------------------------defines ID = $(shell finger $(shell whoami) | egrep -o 'Name: [a-zA-Z0-9 ]{1,}' | cut -d ':' -f 2 | xargs echo) ZDIR = zvfsmntpt OBJS = ds9.o tkAppInit.o FILES = \ $(ZDIR)/tcl$(TCLVER) \ $(ZDIR)/tcl8 \ $(ZDIR)/tk$(TCLVER) \ $(ZDIR)/tkblt \ $(ZDIR)/tcllib \ $(ZDIR)/tkcon \ $(ZDIR)/library \ $(ZDIR)/msgs \ $(ZDIR)/doc \ $(ZDIR)/cmaps \ $(ZDIR)/template LLIBS = \ ../../lib/tksao$(TKSAOVER)/libtksao$(TKSAOVER).a \ ../../lib/libfuntools.a \ ../../lib/libast.a \ ../../lib/libast_err.a \ ../../lib/libast_pal.a \ ../../lib/tksao$(TKSAOVER)/libtksao$(TKSAOVER).a \ ../../lib/tkhtml1$(TKHTMLVER)/libtkhtml1$(TKHTMLVER).a \ ../../lib/tkmpeg$(TKMPEGVER)/libtkmpeg$(TKMPEGVER).a \ ../../lib/Tclxml$(TCLXMLVER)/libTclxml$(TCLXMLVER).a \ ../../lib/Tktable$(TKTABLEVER)/libTktable$(TKTABLEVER).a \ ../../lib/Img$(TKIMGVER)/libtkimgpng1.4.2.a \ ../../lib/Img$(TKIMGVER)/libpngtcl1.4.12.a \ ../../lib/Img$(TKIMGVER)/libtkimgtiff1.4.2.a \ ../../lib/Img$(TKIMGVER)/libtifftcl3.9.4.a \ ../../lib/Img$(TKIMGVER)/libtkimgjpeg1.4.2.a \ ../../lib/Img$(TKIMGVER)/libjpegtcl8.4.a \ ../../lib/Img$(TKIMGVER)/libtkimggif1.4.2.a \ ../../lib/Img$(TKIMGVER)/libtkimgwindow1.4.2.a \ ../../lib/Img$(TKIMGVER)/libzlibtcl1.2.8.a \ ../../lib/Img$(TKIMGVER)/libtkimg1.4.2.a \ ../../lib/tclzvfs$(TCLZVFSVER)/libtclzvfs$(TCLZVFSVER).a \ ../../lib/libxpa.a \ ../../lib/tcliis$(TCLIISVER)/libtcliis$(TCLIISVER).a \ ../../lib/tclcheckdns$(TCLCHECKDNSVER)/libtclcheckdns$(TCLCHECKDNSVER).a \ ../../lib/tclsignal$(TCLSIGNALVER)/libtclsignal$(TCLSIGNALVER).a \ ../../lib/tkblt$(TKBLTVER)/libtkbltstub$(TKBLTVER).a \ ../../lib/tkblt$(TKBLTVER)/libtkblt$(TKBLTVER).a #--------------------------main .NOTPARALLEL : .PHONY : debug ifeq (,$(findstring Darwin,$(system))) ds9 : ds9base ds9.zip $(RM) ds9 strip ds9base cat ds9base ds9.zip > ds9 zip -A ds9 chmod 755 ds9 cp ds9 ../../bin/. debug : ds9base ds9.zip $(RM) ds9 cat ds9base ds9.zip > ds9 zip -A ds9 chmod 755 ds9 cp ds9 ../../bin/. else ds9 : ds9base ds9.zip $(RM) ds9 strip ds9base cp ds9base ds9 cp ds9 ../../bin/. cp ds9.zip ../../bin/. cd ../../bin; codesign -s "$(ID)" ds9 debug: ds9base ds9.zip $(RM) ds9 cp ds9base ds9 cp ds9 ../../bin/. cp ds9.zip ../../bin/. cd ../../bin; codesign -s "$(ID)" ds9 endif ds9base : $(OBJS) $(LLIBS) $(RM) $@ $(CC) $(CFLAGS) -o $@ \ $(OBJS) \ $(LLIBS) \ $(LIBS) \ $(TK_STUB_LIB_SPEC) $(TK_LIB_SPEC) \ $(TCL_STUB_LIB_SPEC) $(TCL_LIB_SPEC) \ $(TK_LIBS) ds9.zip : $(ZDIR) $(FILES) $(RM) $@ find $(ZDIR) -depth -name "CVS" -exec rm -r {} \; zip -r ds9.zip $(ZDIR) tkAppInit.o : tkAppInit.c $(COMPILE) -DTK_LOCAL_APPINIT=SAOAppInit \ -DTK_LOCAL_MAIN_HOOK=SAOLocalMainHook -c tkAppInit.c -o $@ tkAppInit.c : ../../tk$(TCLVER)/unix/tkAppInit.c cp ../../tk$(TCLVER)/unix/tkAppInit.c . $(ZDIR) : mkdir $@ $(ZDIR)/tcl$(TCLVER) : ../../lib/tcl$(TCLVER) $(RM) -r $@ cp -r ../../lib/tcl$(TCLVER) $(ZDIR)/. $(ZDIR)/tcl8 : ../../lib/tcl8 $(RM) -r $@ cp -r ../../lib/tcl8 $(ZDIR)/. $(ZDIR)/tk$(TCLVER) : ../../lib/tk$(TCLVER) $(RM) -r $@ cp -r ../../lib/tk$(TCLVER) $(ZDIR)/. rm -rf $(ZDIR)/tk$(TCLVER)/images rm -rf $(ZDIR)/tk$(TCLVER)/demos $(ZDIR)/tkblt : $(RM) -r $@ mkdir $(ZDIR)/tkblt cp ../../tkblt/library/graph.tcl $(ZDIR)/tkblt/. $(ZDIR)/tcllib : $(RM) -r $@ mkdir $(ZDIR)/tcllib cp -r ../../tcllib/modules/base64 $(ZDIR)/tcllib/. cp -r ../../tcllib/modules/ftp $(ZDIR)/tcllib/. cp -r ../../tcllib/modules/log $(ZDIR)/tcllib/. cp -r ../../tcllib/modules/textutil $(ZDIR)/tcllib/. cp -r ../../tcllib/modules/math $(ZDIR)/tcllib/. $(ZDIR)/tkcon : ../../lib/tkcon$(TKCONVER) $(RM) -r $@ cp -r ../../lib/tkcon$(TKCONVER) $@ $(ZDIR)/library : ../library/*.tcl $(RM) -r $@ cp -r ../library $(ZDIR)/. $(ZDIR)/msgs : ../msgs/* $(RM) -r $@ cp -r ../msgs $(ZDIR)/. $(ZDIR)/doc : ../doc/* ../doc/ref/* ../doc/user/* ../doc/release/* $(RM) -r $@ cd ..; find doc -name "*.html" | cpio -pdmuv unix/$(ZDIR) cd ..; find doc -name "*.gif" | cpio -pdmuv unix/$(ZDIR) cd ..; find doc -name "*.png" | cpio -pdmuv unix/$(ZDIR) $(ZDIR)/cmaps : ../cmaps/* $(RM) -r $@ cp -r ../cmaps $(ZDIR)/. $(ZDIR)/template : ../template/* $(RM) -r $@ cd ..; find template -name "*.tpl" | cpio -pdmuv unix/$(ZDIR) #--------------------------cleanup .PHONY : clean distclean clean : cd ../library; $(MAKE) clean $(RM) core *~ *# ds9base ds9 *.zip *.o $(RM) -r $(ZDIR) distclean: clean -rm -f Makefile config.cache config.log config.status saods9/ds9/unix/tclconfig/000755 000765 000000 00000000000 13012655541 016020 5ustar00joyewheel000000 000000 saods9/ds9/unix/tclconfig/ChangeLog000644 000765 000000 00000106605 12556763143 017614 0ustar00joyewheel000000 000000 2013-07-04 Jan Nijtmans * unix/tcl.m4: Bug [3324676]: AC_PROG_INSTALL incompat, Bug [3606445]: Unneeded -DHAVE_NO_SEH=1 when not building on Windows 2013-07-02 Jan Nijtmans * unix/tcl.m4: Bug [32afa6e256]: dirent64 check is incorrect in tcl.m4 (thanks to Brian Griffin) 2013-06-20 Jan Nijtmans * unix/tcl.m4: Use X11/Xlib.h for checking where X11 can be found in stead of X11/XIntrinsic.h. Suggested by Pietro Cerutti. 2013-06-04 Jan Nijtmans * unix/tcl.m4: Eliminate NO_VIZ macro as current zlib uses HAVE_HIDDEN in stead. One more last-moment fix for FreeBSD by Pietro Cerutti 2013-05-19 Jan Nijtmans * unix/tcl.m4: Fix for FreeBSD, and remove support for old FreeBSD versions. Patch by Pietro Cerutti 2013-03-12 Jan Nijtmans * unix/tcl.m4: Patch by Andrew Shadura, providing better support for * three architectures they have in Debian. 2012-08-07 Stuart Cassoff * tcl.m4: Added "-DNDEBUG" to CFLAGS_DEFAULT when building with --disable-symbols. 2012-08-07 Stuart Cassoff * tcl.m4: [Bug 3555058]: Checkin [30736d63f0] broke CFLAGS_DEFAULT, LDFLAGS_DEFAULT 2012-08-07 Stuart Cassoff * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS 2012-08-07 Jan Nijtmans * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS 2012-07-25 Jan Nijtmans * tcl.m4: My previous commit (2012-04-03) broke the ActiveTcl build for AMD64, because of the quotes in "C://AMD64/cl.exe". It turns out that the AC_TRY_COMPILE macro cannot handle that. 2012-07-22 Stuart Cassoff * tcl.m4: Tidy: consistency, spelling, phrasing, whitespace. No functional change. 2012-04-03 Jan Nijtmans * tcl.m4: [Bug 3511806] Compiler checks too early This change allows to build the cygwin and mingw32 ports of Tcl/Tk extensions to build out-of-the-box using a native or cross-compiler, e.g. on Cygwin, Linux or Darwin. 2011-04-02 Jan Nijtmans * install-sh: Fix issue with library stripping in install-sh (backported from kevin_walzer's patch from Tcl 8.6 trunk) 2011-04-05 Andreas Kupries * tcl.m4: Applied patch by Jeff Lawson. Nicer error message when tclConfig.sh was not found. 2010-12-15 Stuart Cassoff * install-sh: Upgrade to newer install-sh and use it. * tcl.m4: 2010-12-14 Stuart Cassoff * tcl.m4: Better building on OpenBSD. 2010-12-14 Jan Nijtmans * tcl.m4: when using gcc, don't try to determine Win64 SDK 2010-12-12 Jan Nijtmans * tcl.m4: Determine correctly a cross-compiler-windres 2010-11-23 Jan Nijtmans * tcl.m4: add some cross-compile support, borrowed from Tcl 8.6 2010-09-16 Jeff Hobbs * tcl.m4: correct HP-UX LDFLAGS (only used when building big shell) 2010-09-14 Jeff Hobbs * tcl.m4: add extra if check for .manifest file generation Add notice about package name and version being built. 2010-09-09 Jan Nijtmans * tcl.m4: [FREQ #3058486] TEA_LOAD_CONFIG doesn't set all BUILD_ vars Slightly related: defining BUILD_$1 on all platforms - not only win - allows the -fvisibility feature to be used in extensions as well, at least if you compile against tcl >= 8.5. 2010-08-26 Jeff Hobbs * tcl.m4: ensure safe quoting for autoheader usage 2010-08-19 Jeff Hobbs * tcl.m4: add TEA_ADD_CLEANFILES macro to make adding cleanfiles easier, and add *.exp to CLEANFILES Windows default. (TEA_MAKE_LIB): Enhanced to check for MSVC that requires manifests and auto-embed it into proj DLL via MAKE_SHARED_LIB. Also define VC_MANIFEST_EMBED_DLL and VC_MANIFEST_EMBED_EXE that do the same magic in case it is needed for extended TEA projects. 2010-08-16 Jeff Hobbs *** Bump to TEA_VERSION 3.9 *** If upgrading from TEA_VERSION 3.8, copy over tcl.m4, change TEA_INIT to use 3.9 and reconfigure (ac-2.59+). BUILD_${PACKAGE_NAME} will be auto-defined on Windows for correct setting of TCL_STORAGE_CLASS. TEA_LOAD_CONFIG users should remove the SHLIB_LD_LIBS setting done in configure.in (LIBS will be automagically populated by TEA_LOAD_CONFIG). TEA_EXPORT_CONFIG has been added for ${pkg}Config.sh creators SHLIB_LD_FLAGS was deprecated a while ago, remove it if it is still in your Makefile.in. * tcl.m4: add /usr/lib64 to set of auto-search dirs. [Bug 1230554] Auto-define BUILD_$PACKAGE_NAME so users don't need to. This needs to correspond with $pkg.h define magic for TCL_STORAGE_CLASS. Auto-define CLEANFILES. Users can expand it. (SHLIB_LD_LIBS): define to '${LIBS}' default and change it only if necessary. Platforms not using this may simply not work or have very funky linkers. (TEA_LOAD_CONFIG): When loading config for another extension, auto-add stub libraries found with TEA_ADD_LIBS. Eases configure.in for modules like itk and img::*. (TEA_EXPORT_CONFIG): Add standardized function for exporting a ${pkg}Config.sh. See use by img::* and itcl. 2010-08-12 Jeff Hobbs *** Bump to TEA_VERSION 3.8 *** If upgrading from TEA_VERSION 3.7, copy over tcl.m4, change TEA_INIT to use 3.8 and reconfigure (ac-2.59+). No other changes should be necessary. * tcl.m4: remove more vestigial bits from removed platforms. Add back SCO_SV-3.2*. Remove use of DL_LIBS and DL_OBJS and related baggage - these are only needed by the core to support 'load'. Allow for macosx in TEA_ADD_SOURCES. Correct check for found_xincludes=no in TEA_PATH_UNIX_X. 2010-08-11 Jeff Hobbs * tcl.m4: remove the following old platform configurations: UNIX_SV*|UnixWare-5*, SunOS-4.*, SINIX*5.4*, SCO_SV-3.2*, OSF1-1.*, NEXTSTEP-*, NetBSD-1.*|FreeBSD-[[1-2]].*, MP-RAS-*, IRIX-5.*, HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*, dgux*, BSD/OS-2.1*|BSD/OS-3* (AIX): drop AIX-pre4 support and use of ldAix, use -bexpall/-brtl 2010-07-05 Jan Nijtmans * tcl.m4: [Patch #1055668] removal of exported internals from tclInt.h (EXTERN macro) 2010-04-14 Jan Nijtmans * tcl.m4 - Backport a lot of quoting fixes from tcl8.6/unix/tcl.m4 - Fix determination of CYGPATH for CYGWIN With those fixes, itcl and tdbc compile fine with CYGWIN 2010-04-06 Jan Nijtmans * install-sh [Bug 2982540] configure and install* script files should always have LF 2010-02-19 Stuart Cassoff * tcl.m4: Correct compiler/linker flags for threaded builds on OpenBSD. 2010-01-19 Jan Nijtmans * tcl.m4: Detect CYGWIN variant: win32 or unix 2010-01-03 Donal K. Fellows * unix/tcl.m4 (TEA_CONFIG_CFLAGS): [Tcl Bug 1636685]: Use the configuration for modern FreeBSD suggested by the FreeBSD porter. 2009-10-22 Jan Nijtmans * tcl.m4: [Tcl Patch #2883533] tcl.m4 support for Haiku OS 2009-04-27 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): harden the check to add _r to CC on AIX with threads. 2009-04-10 Daniel Steffen * tcl.m4 (Darwin): check for 64-bit TkAqua. 2009-03-26 Jan Nijtmans * tclconfig/tcl.m4: Adapt LDFLAGS and LD_SEARCH_FLAGS together with SHLIB_LD definition to unbreak building on HPUX. 2009-03-20 Andreas Kupries * tclconfig/tcl.m4: Changed SHLIB_LD definition to unbreak building on HPUX. 2009-03-16 Joe English * tcl.m4(TEA_PUBLIC_TK_HEADERS): Look at ${TK_INCLUDE_SPEC} (found in tkConfig.sh) when trying to guess where tk.h might be [Patch 1960628]. 2009-03-11 Joe English * tcl.m4: Allow ${SHLIB_SUFFIX} to be overridden at configure-time [Patch 1960628]. Also fix some comment typos, and an uninitialized variable bug-waiting-to-happen. 2008-12-21 Jan Nijtmans * tcl.m4: [Bug 2073255] Tcl_GetString(NULL) doesn't crash on HP-UX (this bug report was for Tcl, but holds for TEA as well.) 2008-12-20 Daniel Steffen * tcl.m4: sync with tdbc tcl.m4 changes (SunOS-5.11): Sun cc SHLIB_LD: use LDFLAGS_DEFAULT instead of LDFLAGS 2008-12-02 Jeff Hobbs *** Bump to TEA_VERSION 3.7 *** * tcl.m4: in private header check, check for Port.h instead of Int.h to ensure all private headers are available. 2008-11-04 Daniel Steffen * tcl.m4 (Darwin): sync TEA_PRIVATE_TK_HEADERS handling of Tk.framework PrivateHeaders with TEA_PRIVATE_TCL_HEADERS. 2008-11-04 Jeff Hobbs * tcl.m4 (TEA_PATH_TCLCONFIG, TEA_PATH_TKCONFIG): exit with error when tclConfig.sh cannot be found. [Bug #1997760] (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): allow for finding the headers installed in the public areas, e.g. a result of make install-private-headers. [Bug #1631922] 2008-08-12 Daniel Steffen * tcl.m4 (Darwin): link shlib with current and compatiblity version flags; look for libX11.dylib when searching for X11 libraries. 2008-06-12 Daniel Steffen * tcl.m4 (SunOS-5.11): fix 64bit amd64 support with gcc & Sun cc. 2008-03-27 Daniel Steffen * tcl.m4 (SunOS-5.1x): fix 64bit support for Sun cc. [Bug 1921166] 2008-02-01 Donal K. Fellows * tcl.m4 (TEA_CONFIG_CFLAGS): Updated to work at least in part with more modern VC versions. Currently just made the linker flags more flexible; more work may be needed. 2007-10-26 Daniel Steffen * tcl.m4 (Darwin): add support for 64-bit X11. 2007-10-23 Jeff Hobbs *** Tagged tea-3-branch to start TEA 4 development on HEAD *** 2007-09-17 Joe English * tcl.m4: use '${CC} -shared' instead of 'ld -Bshareable' to build shared libraries on current NetBSDs [Bug 1749251]. 2007-09-15 Daniel Steffen * tcl.m4: replace all direct references to compiler by ${CC} to enable CC overriding at configure & make time. (SunOS-5.1x): replace direct use of '/usr/ccs/bin/ld' in SHLIB_LD by 'cc' compiler driver. 2007-08-08 Jeff Hobbs * tcl.m4: check Ttk dir for Tk private headers (8.5). Add some comments to other bits. 2007-06-25 Jeff Hobbs * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): move where / is added. 2007-06-13 Jeff Hobbs * tcl.m4: fix --with-tkinclude alignment. [Bug 1506111] 2007-06-06 Daniel Steffen * tcl.m4 (Darwin): fix 64bit arch removal in fat 32&64bit builds. 2007-05-18 Donal K. Fellows * tcl.m4: Added quoting so that paths with spaces cause fewer problems. 2007-03-07 Daniel Steffen * tcl.m4 (Darwin): s/CFLAGS/CPPFLAGS/ in -mmacosx-version-min check. 2007-02-15 Jeff Hobbs * tcl.m4: correct private header check to search in generic subdir 2007-02-09 Jeff Hobbs *** Bump to TEA_VERSION 3.6 *** * tcl.m4: correct -d to -f (TEA_CONFIG_CFLAGS): SHLIB_SUFFIX is .so on HP ia64 [Bug 1615058] 2007-02-08 Jeff Hobbs * tcl.m4 (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): check that the dirs actually have private headers. [Bug 1631922] 2007-02-04 Daniel Steffen * tcl.m4: add caching to -pipe check. 2007-01-25 Daniel Steffen * tcl.m4: integrate CPPFLAGS into CFLAGS as late as possible and move (rather than duplicate) -isysroot flags from CFLAGS to CPPFLAGS to avoid errors about multiple -isysroot flags from some older gcc builds. 2006-01-19 Daniel Steffen * tcl.m4: ensure CPPFLAGS env var is used when set. [Bug 1586861] (Darwin): add -isysroot and -mmacosx-version-min flags to CPPFLAGS when present in CFLAGS to avoid discrepancies between what headers configure sees during preprocessing tests and compiling tests. 2006-12-19 Daniel Steffen * tcl.m4 (Darwin): --enable-64bit: verify linking with 64bit -arch flag succeeds before enabling 64bit build. 2006-12-16 Daniel Steffen * tcl.m4 (Linux): fix previous change to use makefile variable LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile are picked up. 2006-11-26 Daniel Steffen * tcl.m4 (Linux): --enable-64bit support. [Patch 1597389], [Bug 1230558] 2006-08-18 Daniel Steffen * tcl.m4 (Darwin): add support for --enable-64bit on x86_64, for universal builds including x86_64 and for use of -mmacosx-version-min instead of MACOSX_DEPLOYMENT_TARGET. For Tk extensions, remove 64-bit arch flags from CFLAGS like in the Tk configure, as neither TkAqua nor TkX11 can be built for 64-bit at present. 2006-03-28 Jeff Hobbs * tcl.m4: []-quote AC_DEFUN functions. (TEA_PATH_TKCONFIG): Fixed Windows-specific check for tkConfig.sh. (TEA_MAKE_LIB): Prepend 'lib' for Windows-gcc configs. 2006-03-07 Joe English * tcl.m4: Set SHLIB_LD_FLAGS='${LIBS}' on NetBSD, as per the other *BSD variants [Bug 1334613]. 2006-01-25 Jeff Hobbs *** Bump to TEA version 3.5 *** * tcl.m4: keep LD_SEARCH_FLAGS and CC_SEARCH_FLAGS synchronous with core tcl.m4 meaning. 2006-01-24 Daniel Steffen * tcl.m4 (Darwin): use makefile variable LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile are picked up. [Bug 1403343] 2006-01-23 Jeff Hobbs * tcl.m4: add C:/Tcl/lib and C:/Progra~1/Tcl/lib dirs to check for *Config.sh on Windows. [Bug 1407544] 2006-01-23 Daniel Steffen * tcl.m4 (Darwin): for Tk extensions, remove -arch ppc64 from CFLAGS like in the Tk configure, as neither TkAqua nor TkX11 can be built for 64bit at present (no 64bit GUI libraries). 2006-01-22 Jeff Hobbs * tcl.m4: restore system=windows on Windows. Remove error if 'ar' isn't found (it may not be on Windows). Do not add -lxnet or define _XOPEN_SOURCE on HP-UX by default. Ensure the C|LDFLAGS_DEFAULT gets the fully sub'd value at configure time. 2006-01-10 Daniel Steffen * tcl.m4: add caching, use AC_CACHE_CHECK instead of AC_CACHE_VAL where possible, consistent message quoting, sync relevant tcl/unix/tcl.m4 HEAD changes and gratuitous formatting differences (notably sunc removal of support for for ancient BSD's, IRIX 4, RISCos and Ultrix by kennykb), Darwin improvements to TEA_LOAD_*CONFIG to make linking work against Tcl/Tk frameworks installed in arbitrary location, change TEA_PROG_* search order (look in *_BIN_DIR parents before *_PREFIX). 2006-01-05 Jeff Hobbs * tcl.m4: add dkf's system config refactor 2006-01-04 Jeff Hobbs * tcl.m4: remove extraneous ' that causes bash 3.1 to choke 2005-12-19 Joe English * tcl.m4 (TEA_PATH_TCLCONFIG &c): Look for tclConfig.sh &c in ${libdir}, where they are installed by default [Patch #1377407]. 2005-12-05 Don Porter * tcl.m4 (TEA_PUBLIC_*_HEADERS): Better support for finding header files for uninstalled Tcl and Tk. 2005-12-02 Jeff Hobbs * tcl.m4: correctly bump TEA_VERSION var to 3.4 2005-12-01 Daniel Steffen * unix/tcl.m4 (Darwin): fixed error when MACOSX_DEPLOYMENT_TARGET unset 2005-11-29 Jeff Hobbs * tcl.m4: *** Bump to TEA version 3.4 *** Add Windows x64 build support. Remove TEA_PATH_NOSPACE and handle the problem with ""s where necessary - the macro relied on TCLSH_PROG which didn't work for cross-compiles. 2005-11-27 Daniel Steffen * tcl.m4 (Darwin): add 64bit support, add CFLAGS to SHLIB_LD to support passing -isysroot in env(CFLAGS) to configure (flag can't be present twice, so can't be in both CFLAGS and LDFLAGS during configure), don't use -prebind when deploying on 10.4. (TEA_ENABLE_LANGINFO, TEA_TIME_HANDLER): add/fix caching. 2005-10-30 Daniel Steffen * tcl.m4: fixed two tests for TEA_WINDOWINGSYSTEM = "aqua" that should have been for `uname -s` = "Darwin" instead; added some missing quoting. (TEA_PROG_TCLSH, TEA_PROG_WISH): fix incorrect assumption that install location of tclConfig.sh/tkConfig.sh allows to determine the tclsh/wish install dir via ../bin. Indeed tcl/tk can be configured with arbitrary --libdir and --bindir (independent of prefix) and such a configuration is in fact standard with Darwin framework builds. At least now also check ${TCL_PREFIX}/bin resp. ${TK_PREFIX}/bin for presence of tclsh resp. wish (if tcl/tk have been configured with arbitrary --bindir, this will still not find them, for a general solution *Config.sh would need to contain the values of bindir/libdir/includedir passed to configure). 2005-10-07 Jeff Hobbs * tcl.m4: Fix Solaris 5.10 check and Solaris AMD64 64-bit builds. 2005-10-04 Jeff Hobbs * tcl.m4 (TEA_PRIVATE_TCL_HEADERS): add / to finish sed macro (TEA_ENABLE_THREADS): don't check for pthread_attr_setstacksize func 2005-09-13 Jeff Hobbs * tcl.m4: *** Update to TEA version 3.3 *** define TEA_WINDOWINGSYSTEM in TEA_LOAD_TKCONFIG. Make --enable-threads the default (users can --disable-threads). Improve AIX ${CC}_r fix to better check existing ${CC} value. Do the appropriate evals to not require the *TOP_DIR_NATIVE vars be set for extensions that use private headers. Make aqua check for Xlib compat headers the same as win32. 2005-07-26 Mo DeJong * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH, TEA_PROG_WISH, TEA_BUILD_WISH): Remove TEA_BUILD_TCLSH and TEA_BUILD_WISH because of complaints that it broke the build when only an installed version of Tcl was available at extension build time. The TEA_PROG_TCLSH and TEA_PROG_WISH macros will no longer search the path at all. The build tclsh or installed tclsh shell will now be found by TEA_PROG_TCLSH. 2005-07-24 Mo DeJong * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH, TEA_PROG_WISH, TEA_BUILD_WISH): Split confused search for tclsh on PATH and build and install locations into two macros. TEA_PROG_TCLSH and TEA_PROG_WISH search the system PATH for an installed tclsh or wish. The TEA_BUILD_TCLSH and TEA_BUILD_WISH macros determine the name of tclsh or wish in the Tcl or Tk build directory even if tclsh or wish has not yet been built. [Tcl bug 1160114] [Tcl patch 1244153] 2005-06-23 Daniel Steffen * tcl.m4 (TEA_PRIVATE_TK_HEADERS): add ${TK_SRC_DIR}/macosx to TK_INCLUDES when building against TkAqua. * tcl.m4 (TEA_PATH_X): fixed missing comma in AC_DEFINE * tcl.m4: changes to better support framework builds of Tcl and Tk out of the box: search framework install locations for *Config.sh, and if in presence of a framework build, use the framework's Headers and PrivateHeaders directories for public and private includes. [FR 947735] 2005-06-18 Daniel Steffen * tcl.m4 (Darwin): add -headerpad_max_install_names to LDFLAGS to ensure we can always relocate binaries with install_name_tool. 2005-06-04 Daniel Steffen * tcl.m4 (TEA_PATH_X): for TEA_WINDOWINGSYSTEM == aqua, check if xlib compat headers are available in tkheaders location, otherwise add xlib sourcedir to TK_XINCLUDES. 2005-04-25 Daniel Steffen * tcl.m4: added AC_DEFINE* descriptions (from core tcl.m4) to allow use with autoheader. (Darwin): added configure checks for recently added linker flags -single_module and -search_paths_first to allow building with older tools (and on Mac OS X 10.1), use -single_module in SHLIB_LD. (TEA_MISSING_POSIX_HEADERS): added caching of dirent.h check. (TEA_BUGGY_STRTOD): added caching (sync with core tcl.m4). 2005-03-24 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): use Tcl header defaults for wide int type only on Windows when __int64 is detected as valid. 2005-03-24 Don Porter * README.txt: Update reference to "SC_* macros" to "TEA_* macros". * tcl.m4: Incorporated recent improvements in SC_PATH_TCLCONFIG and SC_PATH_TKCONFIG into TEA_PATH_TCLCONFIG and TEA_PATH_TKCONFIG. Corrected search path in TEA_PATH_CONFIG and added AC_SUBST($1_BIN_DIR) to TEA_LOAD_CONFIG so that packages that load the configuration of another package can know where they loaded it from. 2005-03-18 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): correct 2005-03-17 change to have variant LD_SEARCH_FLAGS for gcc and cc builds. * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): correct x-compile check. 2005-03-17 Jeff Hobbs * tcl.m4: Correct gcc build and HP-UX-11. 2005-02-08 Jeff Hobbs * tcl.m4 (TEA_ADD_LIBS): don't touch lib args starting with -. (TEA_CONFIG_CFLAGS): only define _DLL for CE in shared build. (TEA_MAKE_LIB): set RANLIB* to : on Windows (it's not needed). 2005-02-01 Jeff Hobbs * tcl.m4: redo of 2005-01-27 changes to correctly handle paths with spaces. Win/CE and Win/64 builds now require a prebuilt tclsh to handle conversion to short pathnames. This is done in the new TEA_PATH_NOSPACE macro. For Win/CE|64, make CC just the compiler and move the necessary includes to CFLAGS. (TEA_CONFIG_CFLAGS): Add Solaris 64-bit gcc build support. (TEA_PROG_TCLSH, TEA_PROG_WISH): Allow TCLSH_PROG and WISH_PROG to be set in the env and prevent resetting. (TEA_ADD_LIBS): On Windows using GCC (mingw), convert foo.lib args to -lfoo, for use with mingw. *** POTENTIAL INCOMPATABILITY *** (TEA_CONFIG_CFLAGS): Fix AIX gcc builds to work out-of-box. Bumped TEA to 3.2. 2005-01-27 Jeff Hobbs * tcl.m4: remove cygpath calls to support msys. Update base CE build assumption to "420,ARMV4,ARM,Pocket PC 2003". Make STLIB_LD use $LINKBIN -lib. 2005-01-25 Daniel Steffen * tcl.m4 (Darwin): fixed bug with static build linking to dynamic library in /usr/lib etc instead of linking to static library earlier in search path. [Tcl Bug 956908] Removed obsolete references to Rhapsody. 2004-12-29 Jeff Hobbs * tcl.m4: Updates for VC7 compatibility, fixing CFLAGS and LDFLAGS options, using better default -O levels. [Bug 1092952, 1091967] 2004-12-29 Joe English * tcl.m4: Do not use ${DBGX} suffix when building shared libraries [patch #1081595, TIP #34] 2004-09-07 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): support eVC4 Win/CE builds 2004-08-10 Jeff Hobbs * tcl.m4 (TEA_INIT, TEA_PREFIX): update handling of exec_prefix to work around subdir configures since autoconf only propagates the prefix (not exec_prefix). 2004-07-23 Daniel Steffen * tcl.m4 (TEA_CONFIG_CFLAGS): Darwin section: brought inline with Tcl 8.5 HEAD config, removed core specific & obsolete settings. 2004-07-22 Jeff Hobbs * tcl.m4 (TEA_PATH_X): check in TK_DEFS for MAC_OSX_TK to see if we are compiling on Aqua. Add TEA_WINDOWINGSYSTEM var that reflects 'tk windowingsystem' value. 2004-07-16 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): force a threaded build when building against a threaded core. (CFLAGS_WARNING): Remove -Wconversion for gcc builds (TEA_CONFIG_CFLAGS): Reorder configure.in for better 64-bit build configuration, replacing EXTRA_CFLAGS with CFLAGS. [Bug #874058] Update to latest Tcl 8.5 head config settings. Call this TEA version 3.1. 2004-04-29 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): replace AC_TRY_RUN test with AC_TRY_COMPILE for the long vs. long long check. (kenny) 2004-04-26 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): update against core tcl.m4 to define TCL_WIDE_INT_IS_LONG if 'using long'. 2004-03-19 Jeff Hobbs * tcl.m4: correct Windows builds getting LDFLAGS info in MAKE_LIB 2004-02-11 Jeff Hobbs * tcl.m4: correct TCL_INCLUDES for private headers on Windows - it doesn't need the eval. 2004-02-10 Jeff Hobbs * tcl.m4: don't require TK_INCLUDES and TCL_INCLUDES to have the DIR_NATIVE vars defined when using private headers on unix. Allow $... to TEA_ADD_SOURCES for constructs like TEA_ADD_SOURCES([\$(WIN_OBJECTS)]), that allow the developer to place more in the Makefile.in. tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and CHECK on limits.h 2003-12-10 Jeff Hobbs * Makefile.in: added TEA_ADD_LIBS, TEA_ADD_INCLUDES and * configure: TEA_ADD_CFLAGS to configurable parameters with * configure.in: PKG_* equivs in the Makefile. This allows the * tclconfig/tcl.m4: user to worry less about actual magic VAR names. Corrected Makefile.in to note that TEA_ADD_TCL_SOURCES requires exact file names. 2003-12-09 Jeff Hobbs * tcl.m4: updated OpenBSD support based on [Patch #775246] (cassoff) 2003-12-05 Jeff Hobbs * configure: * configure.in: * Makefile.in (VPATH): readd $(srcdir) to front of VPATH as the first part of VPATH can get chopped off. Change .c.$(OBJEXT) rule to .c.@OBJEXT@ to support more makes. * tclconfig/tcl.m4: add TEA_ADD_STUB_SOURCES to support libstub generation and TEA_ADD_TCL_SOURCES to replace RUNTIME_SOURCES as the way the user specifies library files. 2003-12-03 Jeff Hobbs * configure: Update of TEA spec to (hopefully) simplify * configure.in: some aspects of TEA by making use of more * Makefile.in: AC 2.5x features. Use PACKAGE_NAME (instead * generic/tclsample.c: of PACKAGE) and PACKAGE_VERSION (instead of * tclconfig/tcl.m4: VERSION) arguments to AC_INIT as the TEA package name and version. Provide a version argument to TEA_INIT - starting with 3.0. Drop all use of interior shell substs that older makefiles didn't like. Use PKG_* naming convention instead. Move specification of source files and public headers into configure.in with TEA_ADD_SOURCES and TEA_ADD_HEADERS. These will be munged during ./configure into the right obj file names (no $(SOURCES:.c=.obj) needed). There is almost nothing that should be touched in Makefile.in now for the developer. May want to add a TEA_ADD_TCL_SOURCES for the RUNTIME_SOURCES that remains. Use SHLID_LD_FLAGS (instead of SHLID_LDFLAGS) as Tcl does. Only specify the user requested LDFLAGS/CFLAGS in the Makefile, don't mention the _OPTIMIZE/_DEBUG variants. 2003-10-15 Jeff Hobbs * tcl.m4: create a TEA_SETUP_COMPILER_CC the precedes the TEA_SETUP_COMPILER macro. They are split so the check for CC occurs before any use of CC. Also add AC_PROG_CPP to the compiler checks. 2003-10-06 Jeff Hobbs * tcl.m4: Updated for autoconf 2.5x prereq. Where TCL_WIDE_INT_TYPE would be __int64, defer to the code checks in tcl.h, which also handles TCL_LL_MODIFIER* properly. 2003-04-22 Jeff Hobbs * tcl.m4: correct default setting of ARCH for WinCE builds. Correct \ escaping for CE sed macros. 2003-04-10 Jeff Hobbs * tcl.m4: replace $(syscal) construct with older `syscall` for systems where sh != bash. 2003-04-09 Jeff Hobbs * tcl.m4 (TEA_WITH_CELIB): add --enable-wince and --with-celib options for Windows/CE compilation support. Requires the Microsoft eMbedded SDK and Keuchel's celib emulation layer. 2003-02-18 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): Make sure -lpthread gets passed on the link line when checking for the pthread_attr_setstacksize symbol. (dejong) * tcl.m4 (TEA_SETUP_COMPILER): added default calls to TEA_TCL_EARLY_FLAGS, TEA_TCL_64BIT_FLAGS, TEA_MISSING_POSIX_HEADERS and TEA_BUGGY_STRTOD. 2003-02-14 Jeff Hobbs * tcl.m4: correct HP-UX ia64 --enable-64bit build flags 2003-01-29 Jeff Hobbs * tcl.m4: check $prefix/lib as well as $exec_prefix/lib when looking for tcl|tkConfig.sh, as this check is done before we would set exec_prefix when the user does not define it. 2003-01-21 Mo DeJong * tcl.m4 (TEA_CONFIG_CFLAGS): Fix build support for mingw, the previous implementation would use VC++ when compiling with mingw gcc. Don't pass -fPIC since gcc always compiles pic code under win32. Change some hard coded cases of gcc to ${CC}. 2002-10-15 Jeff Hobbs * tcl.m4: move the CFLAGS definition from TEA_ENABLE_SHARED to TEA_MAKE_LIB because setting too early confuses other AC_* macros. Correct the HP-11 SHLIB_LD_LIBS setting. * tcl.m4: add the CFLAGS definition into TEA_ENABLE_SHARED and make it pick up the env CFLAGS at configure time. 2002-10-09 Jeff Hobbs * tcl.m4: add --enable-symbols=mem option to enable TCL_MEM_DEBUG. Improved AIX 64-bit build support, allow it on AIX-4 as well. Enable 64-bit HP-11 compilation with gcc. Enable 64-bit IRIX64-6 cc build support. Correct FreeBSD thread library linkage. Add OSF1 static build support. Improve SunOS-5 shared build SHLIB_LD macro. 2002-07-20 Zoran Vasiljevic * tcl.m4: Added MINGW32 to list of systems checked for Windows build. Also, fixes some indentation issues with "--with-XXX" options. 2002-04-23 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): added USE_THREAD_ALLOC define to use new threaded allocatory by default on Unix for Tcl 8.4. (TEA_CONFIG_CFLAGS): corrected LD_SEARCH_FLAGS for FreeBSD-3+. 2002-04-22 Jeff Hobbs * tcl.m4 (TEA_SETUP_COMPILER): removed call to AC_CYGWIN so that we can use autoconf 2.5x as well as 2.13. This prevents us from being able to warn against the use of cygwin gcc at configure time, but allows autoconf 2.5x, which is what is shipped with most newer systems. 2002-04-11 Jeff Hobbs * tcl.m4: Enabled COFF as well as CV style debug info with --enable-symbols to allow Dr. Watson users to see function info. More info on debugging levels can be obtained at: http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp 2002-04-03 Jeff Hobbs * tcl.m4: change all SC_* macros to TEA_*. The SC_ was for Scriptics, which is no more. TEA represents a better, independent prefix that won't need changing. Added preliminary mingw gcc support. [Patch #538772] Added TEA_PREFIX macro that handles defaulting the prefix and exec_prefix vars to those used by Tcl if none were specified. Added TEA_SETUP_COMPILER macro that encompasses the AC_PROG_CC check and several other basic AC_PROG checks needed for making executables. This greatly simplifies user's configure.in files. Collapsed AIX-5 defines into AIX-* with extra checks for doing the ELF stuff on AIX-5-ia64. Updated TEA_ENABLE_THREADS to take an optional arg to allow switching it on by default (for Thread) and add sanity checking to warn the user if configuring threads incompatibly. 2002-03-29 Jeff Hobbs * tcl.m4: made sure that SHLIB_LDFLAGS was set to LDFLAGS_DEFAULT. Removed --enable-64bit support for AIX-4 because it wasn't correct. Added -MT or -MD Windows linker switches to properly support symbols-enabled builds. 2002-03-28 Jeff Hobbs * tcl.m4: called AC_MSG_ERROR when SC_TEA_INIT wasn't called first instead of calling it as that inlines it each time in shell code. Changed Windows CFLAGS_OPTIMIZE to use -O2 instead of -Oti. Noted TCL_LIB_VERSIONS_OK=nodots for Windows builds. A few changes to support itcl (and perhaps others): Added support for making your own stub libraries to SC_MAKE_LIB. New SC_PATH_CONFIG and SC_LOAD_CONFIG that take a package name arg and find that ${pkg}Config.sh file. itk uses this for itcl. 2002-03-27 Jeff Hobbs * tcl.m4: made SC_LOAD_TKCONFIG recognize when working with a Tk build dir setup. Added EXTRA_CFLAGS and SHLIB_LD_LIBS substs to SC_CONFIG_CFLAGS. Added XLIBSW onto LIBS when it is defined. Remove TCL_LIBS from MAKE_LIB and correctly use SHLIB_LD_LIBS instead to not rely as much on tclConfig.sh cached info. Add TK_BIN_DIR to paths to find wish in SC_PROG_WISH. These move towards making TEA much more independent of *Config.sh. 2002-03-19 Jeff Hobbs * tcl.m4: corrected forgotten (UN)SHARED_LIB_SUFFIX and SHLIB_SUFFIX defines for Win. (SC_PATH_X): made this only do the check on unix platforms. 2002-03-12 Jeff Hobbs * README.txt: updated to reflect fewer files 2002-03-06 Jeff Hobbs * config.guess (removed): * config.sub (removed): removed unnecessary files * installFile.tcl (removed): * mkinstalldirs (removed): these aren't really necessary for making TEA work * tcl.m4 (SC_PUBLIC_TCL_HEADERS, SC_PUBLIC_TK_HEADERS): don't check /usr(/local)/include for includes on Windows when not using gcc 2002-03-05 Jeff Hobbs * tcl.m4: added warnings on Windows, removed RELPATH define and added TCL_LIBS to MAKE_LIB macro. This import represents 2.0.0, or a new start at attempting to make TEA much easier for C extension developers. **** moved from tclpro project to core tcl project, **** **** renamed to 'tclconfig' **** 2001-03-15 Karl Lehenbauer * installFile.tcl: Added updating of the modification time of the target file whether we overwrote it or decided that it hadn't changed. This was necessary for us to be able to determine whether or not a module install touched the file. 2001-03-08 Karl Lehenbauer * installFile.tcl: Added support for converting new-style (1.1+) Cygnus drive paths to Tcl-style. 2001-01-15 * tcl.m4: Added FreeBSD clause. 2001-01-03 * tcl.m4: Fixed typo in SC_LIB_SPEC where it is checking for exec-prefix. 2000-12-01 * tcl.m4: Concatenated most of the Ajuba acsite.m4 file so we don't need to modify the autoconf installation. * config.guess: * config.sub: * installFile.tcl: Added files from the itcl config subdirectory, which should go away. 2000-7-29 * Fixed the use of TCL_SRC_DIR and TK_SRC_DIR within TCL_PRIVATE_INCLUDES and TK_PRIVATE_INCLUDES to match their recent change from $(srcdir) to $(srcdir)/.. saods9/ds9/unix/tclconfig/install-sh000755 000765 000000 00000033054 12556763143 020043 0ustar00joyewheel000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2011-04-20.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -S $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -S) stripcmd="$stripprog $2" shift;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: saods9/ds9/unix/tclconfig/README.txt000644 000765 000000 00000001454 12556763143 017534 0ustar00joyewheel000000 000000 These files comprise the basic building blocks for a Tcl Extension Architecture (TEA) extension. For more information on TEA see: http://www.tcl.tk/doc/tea/ This package is part of the Tcl project at SourceForge, and latest sources should be available there: http://tcl.sourceforge.net/ This package is a freely available open source package. You can do virtually anything you like with it, such as modifying it, redistributing it, and selling it either in whole or in part. CONTENTS ======== The following is a short description of the files you will find in the sample extension. README.txt This file install-sh Program used for copying binaries and script files to their install locations. tcl.m4 Collection of Tcl autoconf macros. Included by a package's aclocal.m4 to define TEA_* macros. saods9/ds9/unix/tclconfig/tcl.m4000644 000765 000000 00000404642 12640327670 017063 0ustar00joyewheel000000 000000 # tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. AC_PREREQ(2.57) dnl TEA extensions pass us the version of TEA they think they dnl are compatible with (must be set in TEA_INIT below) dnl TEA_VERSION="3.9" # Possible values for key variables defined: # # TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem') # TEA_PLATFORM - windows unix # #------------------------------------------------------------------------ # TEA_PATH_TCLCONFIG -- # # Locate the tclConfig.sh file and perform a sanity check on # the Tcl compile flags # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tcl=... # # Defines the following vars: # TCL_BIN_DIR Full path to the directory containing # the tclConfig.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_TCLCONFIG], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), with_tclconfig="${withval}") AC_MSG_CHECKING([for Tcl configuration]) AC_CACHE_VAL(ac_cv_c_tclconfig,[ # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_PATH_TKCONFIG -- # # Locate the tkConfig.sh file # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tk=... # # Defines the following vars: # TK_BIN_DIR Full path to the directory containing # the tkConfig.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_TKCONFIG], [ # # Ok, lets find the tk configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tk # if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), with_tkconfig="${withval}") AC_MSG_CHECKING([for Tk configuration]) AC_CACHE_VAL(ac_cv_c_tkconfig,[ # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ../tk \ `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tk \ `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_TCLCONFIG -- # # Load the tclConfig.sh file # # Arguments: # # Requires the following vars to be set: # TCL_BIN_DIR # # Results: # # Substitutes the following vars: # TCL_BIN_DIR # TCL_SRC_DIR # TCL_LIB_FILE #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TCLCONFIG], [ AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then AC_MSG_RESULT([loading]) . "${TCL_BIN_DIR}/tclConfig.sh" else AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh]) fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" AC_SUBST(TCL_VERSION) AC_SUBST(TCL_PATCH_LEVEL) AC_SUBST(TCL_BIN_DIR) AC_SUBST(TCL_SRC_DIR) AC_SUBST(TCL_LIB_FILE) AC_SUBST(TCL_LIB_FLAG) AC_SUBST(TCL_LIB_SPEC) AC_SUBST(TCL_STUB_LIB_FILE) AC_SUBST(TCL_STUB_LIB_FLAG) AC_SUBST(TCL_STUB_LIB_SPEC) AC_MSG_CHECKING([platform]) hold_cc=$CC; CC="$TCL_CC" AC_TRY_COMPILE(,[ #ifdef _WIN32 #error win32 #endif ], TEA_PLATFORM="unix", TEA_PLATFORM="windows" ) CC=$hold_cc AC_MSG_RESULT($TEA_PLATFORM) # The BUILD_$pkg is to define the correct extern storage class # handling when making this package AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [], [Building extension source?]) # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: AC_SUBST(CLEANFILES) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_DEFS) AC_SUBST(TCL_EXTRA_CFLAGS) AC_SUBST(TCL_LD_FLAGS) AC_SUBST(TCL_SHLIB_LD_LIBS) ]) #------------------------------------------------------------------------ # TEA_LOAD_TKCONFIG -- # # Load the tkConfig.sh file # # Arguments: # # Requires the following vars to be set: # TK_BIN_DIR # # Results: # # Sets the following vars that should be in tkConfig.sh: # TK_BIN_DIR #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TKCONFIG], [ AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh]) if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then AC_MSG_RESULT([loading]) . "${TK_BIN_DIR}/tkConfig.sh" else AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh]) fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" # TEA specific: Ensure windowingsystem is defined if test "${TEA_PLATFORM}" = "unix" ; then case ${TK_DEFS} in *MAC_OSX_TK*) AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?]) TEA_WINDOWINGSYSTEM="aqua" ;; *) TEA_WINDOWINGSYSTEM="x11" ;; esac elif test "${TEA_PLATFORM}" = "windows" ; then TEA_WINDOWINGSYSTEM="win32" fi AC_SUBST(TK_VERSION) AC_SUBST(TK_BIN_DIR) AC_SUBST(TK_SRC_DIR) AC_SUBST(TK_LIB_FILE) AC_SUBST(TK_LIB_FLAG) AC_SUBST(TK_LIB_SPEC) AC_SUBST(TK_STUB_LIB_FILE) AC_SUBST(TK_STUB_LIB_FLAG) AC_SUBST(TK_STUB_LIB_SPEC) # TEA specific: AC_SUBST(TK_LIBS) AC_SUBST(TK_XINCLUDES) ]) #------------------------------------------------------------------------ # TEA_PROG_TCLSH # Determine the fully qualified path name of the tclsh executable # in the Tcl build directory or the tclsh installed in a bin # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # TCLSH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_TCLSH], [ AC_MSG_CHECKING([for tclsh]) if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="${TCL_BIN_DIR}/tclsh" fi else # tclConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}" fi list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TCL_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${TCLSH_PROG}" ; then REAL_TCL_BIN_DIR="`cd "$i"; pwd`/" break fi done TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}" fi AC_MSG_RESULT([${TCLSH_PROG}]) AC_SUBST(TCLSH_PROG) ]) #------------------------------------------------------------------------ # TEA_PROG_WISH # Determine the fully qualified path name of the wish executable # in the Tk build directory or the wish installed in a bin # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # WISH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_WISH], [ AC_MSG_CHECKING([for wish]) if test -f "${TK_BIN_DIR}/Makefile" ; then # tkConfig.sh is in Tk build directory if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="${TK_BIN_DIR}/wish" fi else # tkConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}" fi list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TK_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${WISH_PROG}" ; then REAL_TK_BIN_DIR="`cd "$i"; pwd`/" break fi done WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}" fi AC_MSG_RESULT([${WISH_PROG}]) AC_SUBST(WISH_PROG) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-shared=yes|no # # Defines the following vars: # STATIC_BUILD Used for building import/export libraries # on Windows. # # Sets the following vars: # SHARED_BUILD Value of 1 or 0 #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SHARED], [ AC_MSG_CHECKING([how to build libraries]) AC_ARG_ENABLE(shared, AC_HELP_STRING([--enable-shared], [build and link with shared libraries (default: on)]), [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_shared+set}" = set; then enableval="$enable_shared" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" ; then AC_MSG_RESULT([shared]) SHARED_BUILD=1 else AC_MSG_RESULT([static]) SHARED_BUILD=0 AC_DEFINE(STATIC_BUILD, 1, [Is this a static build?]) fi AC_SUBST(SHARED_BUILD) ]) #------------------------------------------------------------------------ # TEA_ENABLE_THREADS -- # # Specify if thread support should be enabled. If "yes" is specified # as an arg (optional), threads are enabled by default, "no" means # threads are disabled. "yes" is the default. # # TCL_THREADS is checked so that if you are compiling an extension # against a threaded core, your extension must be compiled threaded # as well. # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-threads # # Sets the following vars: # THREADS_LIBS Thread library(s) # # Defines the following vars: # TCL_THREADS # _REENTRANT # _THREAD_SAFE #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_THREADS], [ AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], [build with threads]), [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_threads+set}" = set; then enableval="$enable_threads" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then TCL_THREADS=1 if test "${TEA_PLATFORM}" != "windows" ; then # We are always OK on Windows, so check what this platform wants: # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention AC_DEFINE(USE_THREAD_ALLOC, 1, [Do we want to use the threaded memory allocator?]) AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) if test "`uname -s`" = "SunOS" ; then AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) fi AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?]) AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no) if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] AC_CHECK_LIB(pthread, __pthread_mutex_init, tcl_ok=yes, tcl_ok=no) fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else AC_CHECK_LIB(pthreads, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else AC_CHECK_LIB(c, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "no"; then AC_CHECK_LIB(c_r, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -pthread" else TCL_THREADS=0 AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled]) fi fi fi fi fi else TCL_THREADS=0 fi # Do checking message here to not mess up interleaved configure output AC_MSG_CHECKING([for building with threads]) if test "${TCL_THREADS}" = 1; then AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?]) AC_MSG_RESULT([yes (default)]) else AC_MSG_RESULT([no]) fi # TCL_THREADS sanity checking. See if our request for building with # threads is the same as the way Tcl was built. If not, warn the user. case ${TCL_DEFS} in *THREADS=1*) if test "${TCL_THREADS}" = "0"; then AC_MSG_WARN([ Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads.]) fi ;; *) if test "${TCL_THREADS}" = "1"; then AC_MSG_WARN([ --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core.]) fi ;; esac AC_SUBST(TCL_THREADS) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SYMBOLS -- # # Specify if debugging symbols should be used. # Memory (TCL_MEM_DEBUG) debugging can also be enabled. # # Arguments: # none # # TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives # the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted. # Requires the following vars to be set in the Makefile: # CFLAGS_DEFAULT # LDFLAGS_DEFAULT # # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true # Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false # LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true # Sets to $(LDFLAGS_OPTIMIZE) if false # DBGX Formerly used as debug library extension; # always blank now. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SYMBOLS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_CONFIG_CFLAGS]) AC_MSG_CHECKING([for build with symbols]) AC_ARG_ENABLE(symbols, AC_HELP_STRING([--enable-symbols], [build with debugging symbols (default: off)]), [tcl_ok=$enableval], [tcl_ok=no]) DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" AC_MSG_RESULT([no]) else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then AC_MSG_RESULT([yes (standard debugging)]) fi fi # TEA specific: if test "${TEA_PLATFORM}" != "windows" ; then LDFLAGS_DEFAULT="${LDFLAGS}" fi AC_SUBST(CFLAGS_DEFAULT) AC_SUBST(LDFLAGS_DEFAULT) AC_SUBST(TCL_DBGX) if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?]) fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then AC_MSG_RESULT([enabled symbols mem debugging]) else AC_MSG_RESULT([enabled $tcl_ok debugging]) fi fi ]) #------------------------------------------------------------------------ # TEA_ENABLE_LANGINFO -- # # Allows use of modern nl_langinfo check for better l10n. # This is only relevant for Unix. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_LANGINFO], [ AC_ARG_ENABLE(langinfo, AC_HELP_STRING([--enable-langinfo], [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]), [langinfo_ok=$enableval], [langinfo_ok=yes]) HAVE_LANGINFO=0 if test "$langinfo_ok" = "yes"; then AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no]) fi AC_MSG_CHECKING([whether to use nl_langinfo]) if test "$langinfo_ok" = "yes"; then AC_CACHE_VAL(tcl_cv_langinfo_h, [ AC_TRY_COMPILE([#include ], [nl_langinfo(CODESET);], [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])]) AC_MSG_RESULT([$tcl_cv_langinfo_h]) if test $tcl_cv_langinfo_h = yes; then AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?]) fi else AC_MSG_RESULT([$langinfo_ok]) fi ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the # "uname" command. # # Arguments: # none # # Results: # Defines the following var: # # system - System/platform/version identification code. #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_SYSTEM], [ AC_CACHE_CHECK([system version], tcl_cv_sys_version, [ # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then AC_MSG_WARN([can't find uname command]) tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi ]) system=$tcl_cv_sys_version ]) #-------------------------------------------------------------------- # TEA_CONFIG_CFLAGS # # Try to determine the proper flags to pass to the compiler # for building shared libraries and other such nonsense. # # Arguments: # none # # Results: # # Defines and substitutes the following vars: # # DL_OBJS, DL_LIBS - removed for TEA, only needed by core. # LDFLAGS - Flags to pass to the compiler when linking object # files into an executable application binary such # as tclsh. # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. Could # be the same as CC_SEARCH_FLAGS if ${CC} is used to link. # CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically # goes at the end of the "ld" commands that build # shared libraries. The value of the symbol defaults to # "${LIBS}" if all of the dependent libraries should # be specified when creating a shared library. If # dependent libraries should not be specified (as on # SunOS 4.x, where they cause the link to fail, or in # general if Tcl and Tk aren't themselves shared # libraries), then this symbol has an empty string # as its value. # SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable # extensions. An empty string means we don't know how # to use shared libraries on this platform. # LIB_SUFFIX - Specifies everything that comes after the "libfoo" # in a static or shared library name, using the $PACKAGE_VERSION variable # to put the version in the right place. This is used # by platforms that need non-standard library names. # Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs # to have a version after the .so, and ${PACKAGE_VERSION}.a # on AIX, since a shared library needs to have # a .a extension whereas shared objects for loadable # extensions have a .so extension. Defaults to # ${PACKAGE_VERSION}${SHLIB_SUFFIX}. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_CFLAGS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # Step 0.a: Enable 64 bit support? AC_MSG_CHECKING([if 64bit support is requested]) AC_ARG_ENABLE(64bit, AC_HELP_STRING([--enable-64bit], [enable 64bit support (default: off)]), [do64bit=$enableval], [do64bit=no]) AC_MSG_RESULT([$do64bit]) # Step 0.b: Enable Solaris 64 bit VIS support? AC_MSG_CHECKING([if 64bit Sparc VIS support is requested]) AC_ARG_ENABLE(64bit-vis, AC_HELP_STRING([--enable-64bit-vis], [enable 64bit Sparc VIS support (default: off)]), [do64bitVIS=$enableval], [do64bitVIS=no]) AC_MSG_RESULT([$do64bitVIS]) # Force 64bit on with VIS AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes]) # Step 0.c: Check if visibility support is available. Do this here so # that platform specific alternatives can be used below if this fails. AC_CACHE_CHECK([if compiler supports visibility "hidden"], tcl_cv_cc_visibility_hidden, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" AC_TRY_LINK([ extern __attribute__((__visibility__("hidden"))) void f(void); void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], [disable rpath support (default: on)]), [doRpath=$enableval], [doRpath=yes]) AC_MSG_RESULT([$doRpath]) # TEA specific: Cross-compiling options for Windows/CE builds? AS_IF([test "${TEA_PLATFORM}" = windows], [ AC_MSG_CHECKING([if Windows/CE build is requested]) AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) # Set the variable "system" to hold the name and version number # for the system. TEA_CONFIG_SYSTEM # Require ranlib early so we can override it in special cases below. AC_REQUIRE([AC_PROG_RANLIB]) # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g AS_IF([test "$GCC" = yes], [ CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" ], [ CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" ]) AC_CHECK_TOOL(AR, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION="1.0"]) case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs # MACHINE is IX86 for LINK, but this is used by the manifest, # which requires x86|amd64|ia64. MACHINE="X86" if test "$do64bit" != "no" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft Platform SDK" fi MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` PATH64="" case "$do64bit" in amd64|x64|yes) MACHINE="AMD64" ; # default to AMD64 64-bit build PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) AC_MSG_WARN([Ensure latest Platform SDK is installed]) do64bit="no" else AC_MSG_RESULT([ Using 64-bit $MACHINE mode]) do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" != "no" ; then AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible]) fi if test "$GCC" = "yes" ; then AC_MSG_ERROR([Windows/CE and GCC builds incompatible]) fi TEA_PATH_CELIB # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \ if ([$]1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \ if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \ if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]]) doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" != "no" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="\"${PATH64}/cl.exe\"" CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" RC="\"${MSSDK}/bin/rc.exe\"" lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" LINKBIN="\"${PATH64}/link.exe\"" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" # Avoid 'unresolved external symbol __security_cookie' # errors, c.f. http://support.microsoft.com/?id=894573 TEA_ADD_LIBS([bufferoverflowU.lib]) elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="\"${CEBINROOT}/cl.exe\"" else CC="\"${CEBINROOT}/cl${ARCH}.exe\"" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" arch=`echo ${ARCH} | awk '{print tolower([$]0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i) done AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version]) AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version]) CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode AC_CHECK_TOOL(RC, windres) CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" AC_CACHE_CHECK(for cross-compile version of gcc, ac_cv_cross, AC_TRY_COMPILE([ #ifdef __WIN32__ #error cross-compiler #endif ], [], ac_cv_cross=yes, ac_cv_cross=no) ) if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # and also # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx # This essentially turns it all on. LDFLAGS_DEBUG="-debug -debugtype:cv" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [ # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'` ;; esac AC_MSG_RESULT([Using $CC for compiling with threads]) ]) LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported with GCC on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" ]) ]) AS_IF([test "`uname -m`" = ia64], [ # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" AS_IF([test "$GCC" = yes], [ CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' ], [ CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' ]) LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ], [ AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared -Wl,-bexpall' ], [ SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" ]) SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" EXEEXT=".exe" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"]) ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library AS_IF([test "`uname -m`" = ia64], [ SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi ], [ SHLIB_SUFFIX=".sl" ]) AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) AS_IF([test "$tcl_ok" = yes], [ LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" ]) AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ CFLAGS="$CFLAGS -z" # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" ]) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]) ;; esac ], [ do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" ]) ]) ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [ CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" ], [ case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported by gcc]) ], [ do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" ]) ]) ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) AS_IF([test $do64bit = yes], [ AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -m64" AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_m64 = yes], [ CFLAGS="$CFLAGS -m64" do64bit_ok=yes ]) ]) # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac AS_IF([test "${TCL_THREADS}" = "1"], [ # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" ]) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" TCL_SHLIB_LD_EXTRAS="-Wl,-soname=\$[@]" SHLIB_SUFFIX=".so" LDFLAGS="" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS"]) # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1' TCL_LIB_VERSIONS_OK=nodots ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`" CFLAGS="`echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`" AS_IF([test $do64bit = yes], [ case `arch` in ppc) AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag], tcl_cv_cc_arch_ppc64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes, tcl_cv_cc_arch_ppc64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [ CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" do64bit_ok=yes ]);; i386) AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag], tcl_cv_cc_arch_x86_64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch x86_64" AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes, tcl_cv_cc_arch_x86_64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [ CFLAGS="$CFLAGS -arch x86_64" do64bit_ok=yes ]);; *) AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);; esac ], [ # Check for combined 32-bit and 64-bit fat build AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [ fat_32_64=yes]) ]) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [ LDFLAGS="$LDFLAGS -prebind"]) LDFLAGS="$LDFLAGS -headerpad_max_install_names" AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_search_paths_first = yes], [ LDFLAGS="$LDFLAGS -Wl,-search_paths_first" ]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [__private_extern__], [Compiler support for module scope symbols]) tcl_cv_cc_visibility_hidden=yes ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [ AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [ AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" AC_TRY_LINK([#include ], [XrmInitialize();], tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [ AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" AC_TRY_LINK([#include ], [Tk_InitStubs(NULL, "", 0);], tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) # remove 64-bit arch flags from CFLAGS et al. if configuration # does not support 64-bit. AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h [Should OS/390 do the right thing with sockets?]) ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" AS_IF([test "$SHARED_BUILD" = 1], [ SHLIB_LD='ld -shared -expect_unresolved "*"' ], [ SHLIB_LD='ld -non_shared -expect_unresolved "*"' ]) SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [ CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"]) # see pthread_intro(3) for pthread support on osf1, k.furukawa AS_IF([test "${TCL_THREADS}" = 1], [ CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` AS_IF([test "$GCC" = yes], [ LIBS="$LIBS -lpthread -lmach -lexc" ], [ CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ]) ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) AS_IF([test "$GCC" = yes], [ SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" ], [ SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" ]) SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[[0-6]]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ arch=`isainfo` AS_IF([test "$arch" = "sparcv9 sparc"], [ AS_IF([test "$GCC" = yes], [ AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [ AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" ]) ], [ do64bit_ok=yes AS_IF([test "$do64bitVIS" = yes], [ CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS_ARCH="-xarch=v9a" ], [ CFLAGS="$CFLAGS -xarch=v9" LDFLAGS_ARCH="-xarch=v9" ]) # Solaris 64 uses this as well #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" ]) ], [AS_IF([test "$arch" = "amd64 i386"], [ AS_IF([test "$GCC" = yes], [ case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) do64bit_ok=yes CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]);; esac ], [ do64bit_ok=yes case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "$do64bit_ok" = yes], [ AS_IF([test "$arch" = "sparcv9 sparc"], [ # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" ], [AS_IF([test "$arch" = "amd64 i386"], [ # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" ])]) ]) ], [ case $system in SunOS-5.[[1-9]][[0-9]]*) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';; *) SHLIB_LD='/usr/ccs/bin/ld -G -z text';; esac CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_Bexport = yes], [ LDFLAGS="$LDFLAGS -Wl,-Bexport" ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; esac AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [ AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform]) ]) dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. AS_IF([test "$GCC" = yes], [ case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [extern], [No Compiler support for module scope symbols]) ]) AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then AC_CACHE_CHECK(for SEH support in compiler, tcl_cv_seh, AC_TRY_RUN([ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } ], tcl_cv_seh=yes, tcl_cv_seh=no, tcl_cv_seh=no) ) if test "$tcl_cv_seh" = "no" ; then AC_DEFINE(HAVE_NO_SEH, 1, [Defined when mingw does not support SEH]) fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, tcl_cv_eh_disposition, AC_TRY_COMPILE([ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN ],[ EXCEPTION_DISPOSITION x; ], tcl_cv_eh_disposition=yes, tcl_cv_eh_disposition=no) ) if test "$tcl_cv_eh_disposition" = "no" ; then AC_DEFINE(EXCEPTION_DISPOSITION, int, [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. AC_CACHE_CHECK(for winnt.h that ignores VOID define, tcl_cv_winnt_ignore_void, AC_TRY_COMPILE([ #define VOID void #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN ], [ CHAR c; SHORT s; LONG l; ], tcl_cv_winnt_ignore_void=yes, tcl_cv_winnt_ignore_void=no) ) if test "$tcl_cv_winnt_ignore_void" = "yes" ; then AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, [Defined when cygwin/mingw ignores VOID define in winnt.h]) fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. AC_CACHE_CHECK(for cast to union support, tcl_cv_cast_to_union, AC_TRY_COMPILE([], [ union foo { int i; double d; }; union foo f = (union foo) (int) 0; ], tcl_cv_cast_to_union=yes, tcl_cv_cast_to_union=no) ) if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) AC_SUBST(STLIB_LD) AC_SUBST(SHLIB_LD) AC_SUBST(SHLIB_LD_LIBS) AC_SUBST(SHLIB_CFLAGS) AC_SUBST(LD_LIBRARY_PATH_VAR) # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary TEA_TCL_EARLY_FLAGS TEA_TCL_64BIT_FLAGS ]) #-------------------------------------------------------------------- # TEA_SERIAL_PORT # # Determine which interface to use to talk to the serial port. # Note that #include lines must begin in leftmost column for # some compilers to recognize them as preprocessor directives, # and some build environments have stdin not pointing at a # pseudo-terminal (usually /dev/null instead.) # # Arguments: # none # # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY #-------------------------------------------------------------------- AC_DEFUN([TEA_SERIAL_PORT], [ AC_CHECK_HEADERS(sys/modem.h) AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ AC_TRY_RUN([ #include int main() { struct termios t; if (tcgetattr(0, &t) == 0) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include #include int main() { struct termios t; if (tcgetattr(0, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) fi]) case $tcl_cv_api_serial in termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);; termio) AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);; sgtty) AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);; esac ]) #-------------------------------------------------------------------- # TEA_MISSING_POSIX_HEADERS # # Supply substitutes for missing POSIX header files. Special # notes: # - stdlib.h doesn't define strtol, strtoul, or # strtod in some versions of SunOS # - some versions of string.h don't declare procedures such # as strstr # # Arguments: # none # # Results: # # Defines some of the following vars: # NO_DIRENT_H # NO_ERRNO_H # NO_VALUES_H # HAVE_LIMITS_H or NO_LIMITS_H # NO_STDLIB_H # NO_STRING_H # NO_SYS_WAIT_H # NO_DLFCN_H # HAVE_SYS_PARAM_H # # HAVE_STRING_H ? # # tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and # CHECK on limits.h #-------------------------------------------------------------------- AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [ AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [ AC_TRY_LINK([#include #include ], [ #ifndef _POSIX_SOURCE # ifdef __Lynx__ /* * Generate compilation error to make the test fail: Lynx headers * are only valid if really in the POSIX environment. */ missing_procedure(); # endif #endif DIR *d; struct dirent *entryPtr; char *p; d = opendir("foobar"); entryPtr = readdir(d); p = entryPtr->d_name; closedir(d); ], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)]) if test $tcl_cv_dirent_h = no; then AC_DEFINE(NO_DIRENT_H, 1, [Do we have ?]) fi # TEA specific: AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have ?])]) AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have ?])]) AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have ?])]) AC_CHECK_HEADER(limits.h, [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have ?])], [AC_DEFINE(NO_LIMITS_H, 1, [Do we have ?])]) AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0) if test $tcl_ok = 0; then AC_DEFINE(NO_STDLIB_H, 1, [Do we have ?]) fi AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0) AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0) # See also memmove check below for a place where NO_STRING_H can be # set and why. if test $tcl_ok = 0; then AC_DEFINE(NO_STRING_H, 1, [Do we have ?]) fi AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have ?])]) AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have ?])]) # OS/390 lacks sys/param.h (and doesn't need it, by chance). AC_HAVE_HEADERS(sys/param.h) ]) #-------------------------------------------------------------------- # TEA_PATH_X # # Locate the X11 header files and the X11 library archive. Try # the ac_path_x macro first, but if it doesn't find the X stuff # (e.g. because there's no xmkmf program) then check through # a list of possible directories. Under some conditions the # autoconf macro will return an include directory that contains # no include files, so double-check its result just to be safe. # # This should be called after TEA_CONFIG_CFLAGS as setting the # LIBS line can confuse some configure macro magic. # # Arguments: # none # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) #-------------------------------------------------------------------- AC_DEFUN([TEA_PATH_X], [ if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then TEA_PATH_UNIX_X fi ]) AC_DEFUN([TEA_PATH_UNIX_X], [ AC_PATH_X not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then AC_TRY_CPP([#include ], , not_really_there="yes") else if test ! -r $x_includes/X11/Xlib.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then AC_MSG_CHECKING([for X11 header files]) found_xincludes="no" AC_TRY_CPP([#include ], found_xincludes="yes", found_xincludes="no") if test "$found_xincludes" = "no"; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Xlib.h; then AC_MSG_RESULT([$i]) XINCLUDES=" -I$i" found_xincludes="yes" break fi done fi else if test "$x_includes" != ""; then XINCLUDES="-I$x_includes" found_xincludes="yes" fi fi if test "$found_xincludes" = "no"; then AC_MSG_RESULT([couldn't find any!]) fi if test "$no_x" = yes; then AC_MSG_CHECKING([for X11 libraries]) XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" for i in $dirs ; do if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then AC_MSG_RESULT([$i]) XLIBSW="-L$i -lX11" x_libraries="$i" break fi done else if test "$x_libraries" = ""; then XLIBSW=-lX11 else XLIBSW="-L$x_libraries -lX11" fi fi if test "$XLIBSW" = nope ; then AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow) fi if test "$XLIBSW" = nope ; then AC_MSG_RESULT([could not find any! Using -lX11.]) XLIBSW=-lX11 fi # TEA specific: if test x"${XLIBSW}" != x ; then PKG_LIBS="${PKG_LIBS} ${XLIBSW}" fi ]) #-------------------------------------------------------------------- # TEA_BLOCKING_STYLE # # The statements below check for systems where POSIX-style # non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. # On these systems (mostly older ones), use the old BSD-style # FIONBIO approach instead. # # Arguments: # none # # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK #-------------------------------------------------------------------- AC_DEFUN([TEA_BLOCKING_STYLE], [ AC_CHECK_HEADERS(sys/ioctl.h) AC_CHECK_HEADERS(sys/filio.h) TEA_CONFIG_SYSTEM AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) case $system in OSF*) AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) AC_MSG_RESULT([FIONBIO]) ;; *) AC_MSG_RESULT([O_NONBLOCK]) ;; esac ]) #-------------------------------------------------------------------- # TEA_TIME_HANDLER # # Checks how the system deals with time.h, what time structures # are used on the system, and what fields the structures have. # # Arguments: # none # # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR #-------------------------------------------------------------------- AC_DEFUN([TEA_TIME_HANDLER], [ AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE AC_CHECK_FUNCS(gmtime_r localtime_r) AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [ AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_tzadj;], tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)]) if test $tcl_cv_member_tm_tzadj = yes ; then AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?]) fi AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [ AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_gmtoff;], tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)]) if test $tcl_cv_member_tm_gmtoff = yes ; then AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?]) fi # # Its important to include time.h in this check, as some systems # (like convex) have timezone functions, etc. # AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [ AC_TRY_COMPILE([#include ], [extern long timezone; timezone += 1; exit (0);], tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)]) if test $tcl_cv_timezone_long = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) else # # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. # AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [ AC_TRY_COMPILE([#include ], [extern time_t timezone; timezone += 1; exit (0);], tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)]) if test $tcl_cv_timezone_time = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) fi fi ]) #-------------------------------------------------------------------- # TEA_BUGGY_STRTOD # # Under Solaris 2.4, strtod returns the wrong value for the # terminating character under some conditions. Check for this # and if the problem exists use a substitute procedure # "fixstrtod" (provided by Tcl) that corrects the error. # Also, on Compaq's Tru64 Unix 5.0, # strtod(" ") returns 0.0 instead of a failure to convert. # # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) #-------------------------------------------------------------------- AC_DEFUN([TEA_BUGGY_STRTOD], [ AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) if test "$tcl_strtod" = 1; then AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[ AC_TRY_RUN([ extern double strtod(); int main() { char *infString="Inf", *nanString="NaN", *spaceString=" "; char *term; double value; value = strtod(infString, &term); if ((term != infString) && (term[-1] == 0)) { exit(1); } value = strtod(nanString, &term); if ((term != nanString) && (term[-1] == 0)) { exit(1); } value = strtod(spaceString, &term); if (term == (spaceString+1)) { exit(1); } exit(0); }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy, tcl_cv_strtod_buggy=buggy)]) if test "$tcl_cv_strtod_buggy" = buggy; then AC_LIBOBJ([fixstrtod]) USE_COMPAT=1 AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?]) fi fi ]) #-------------------------------------------------------------------- # TEA_TCL_LINK_LIBS # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: # DL_LIBS (not in TEA, only needed in core) # LIBS # MATH_LIBS # # Results: # # Substitutes the following vars: # TCL_LIBS # MATH_LIBS # # Might append to the following vars: # LIBS # # Might define the following vars: # HAVE_NET_ERRNO_H #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_LINK_LIBS], [ #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) #-------------------------------------------------------------------- # Interactive UNIX requires -linet instead of -lsocket, plus it # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) AC_CHECK_HEADER(net/errno.h, [ AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have ?])]) #-------------------------------------------------------------------- # Check for the existence of the -lsocket and -lnsl libraries. # The order here is important, so that they end up in the right # order in the command line generated by make. Here are some # special considerations: # 1. Use "connect" and "accept" to check for -lsocket, and # "gethostbyname" to check for -lnsl. # 2. Use each function name only once: can't redo a check because # autoconf caches the results of the last check and won't redo it. # 3. Use -lnsl and -lsocket only if they supply procedures that # aren't already present in the normal libraries. This is because # IRIX 5.2 has libraries, but they aren't needed and they're # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- tcl_checkBoth=0 AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1) if test "$tcl_checkSocket" = 1; then AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt, LIBS="$LIBS -lsocket", tcl_checkBoth=1)]) fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs]) fi AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname, [LIBS="$LIBS -lnsl"])]) # TEA specific: Don't perform the eval of the libraries here because # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' AC_SUBST(TCL_LIBS) AC_SUBST(MATH_LIBS) ]) #-------------------------------------------------------------------- # TEA_TCL_EARLY_FLAGS # # Check for what flags are needed to be passed so the correct OS # features are available. # # Arguments: # None # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_EARLY_FLAG],[ AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, AC_TRY_COMPILE([[#define ]$1[ 1 ]$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no))) if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then AC_DEFINE($1, 1, [Add the ]$1[ flag when building]) tcl_flags="$tcl_flags $1" fi ]) AC_DEFUN([TEA_TCL_EARLY_FLAGS],[ AC_MSG_CHECKING([for required early compiler flags]) tcl_flags="" TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include ], [char *p = (char *)strtoll; char *q = (char *)strtoull;]) TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include ], [struct stat64 buf; int i = stat64("/", &buf);]) TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include ], [char *p = (char *)open64;]) if test "x${tcl_flags}" = "x" ; then AC_MSG_RESULT([none]) else AC_MSG_RESULT([${tcl_flags}]) fi ]) #-------------------------------------------------------------------- # TEA_TCL_64BIT_FLAGS # # Check for what is defined in the way of 64-bit features. # # Arguments: # None # # Results: # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_64BIT_FLAGS], [ AC_MSG_CHECKING([for 64-bit integer type]) AC_CACHE_VAL(tcl_cv_type_64bit,[ tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], tcl_type_64bit=__int64, tcl_type_64bit="long long") # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... AC_TRY_COMPILE(,[switch (0) { case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; }],tcl_cv_type_64bit=${tcl_type_64bit})]) if test "${tcl_cv_type_64bit}" = none ; then AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?]) AC_MSG_RESULT([using long]) elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* AC_MSG_RESULT([using Tcl header defaults]) else AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}, [What type should be used to define wide integers?]) AC_MSG_RESULT([${tcl_cv_type_64bit}]) # Now check for auxiliary declarations AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ AC_TRY_COMPILE([#include #include ],[struct dirent64 p;], tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in ?]) fi AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include ],[struct stat64 p; ], tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)]) if test "x${tcl_cv_struct_stat64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in ?]) fi AC_CHECK_FUNCS(open64 lseek64) AC_MSG_CHECKING([for off64_t]) AC_CACHE_VAL(tcl_cv_type_off64_t,[ AC_TRY_COMPILE([#include ],[off64_t offset; ], tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)]) dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the dnl functions lseek64 and open64 are defined. if test "x${tcl_cv_type_off64_t}" = "xyes" && \ test "x${ac_cv_func_lseek64}" = "xyes" && \ test "x${ac_cv_func_open64}" = "xyes" ; then AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in ?]) AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi ]) ## ## Here ends the standard Tcl configuration bits and starts the ## TEA specific functions ## #------------------------------------------------------------------------ # TEA_INIT -- # # Init various Tcl Extension Architecture (TEA) variables. # This should be the first called TEA_* macro. # # Arguments: # none # # Results: # # Defines and substs the following vars: # CYGPATH # EXEEXT # Defines only: # TEA_VERSION # TEA_INITED # TEA_PLATFORM (windows or unix) # # "cygpath" is used on windows to generate native path names for include # files. These variables should only be used with the compiler and linker # since they generate native path names. # # EXEEXT # Select the executable extension based on the host type. This # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" AC_MSG_CHECKING([for correct TEA configuration]) if test x"${PACKAGE_NAME}" = x ; then AC_MSG_ERROR([ The PACKAGE_NAME variable must be defined by your TEA configure.in]) fi if test x"$1" = x ; then AC_MSG_ERROR([ TEA version not specified.]) elif test "$1" != "${TEA_VERSION}" ; then AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"]) else AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}]) AC_SUBST(EXEEXT) AC_SUBST(CYGPATH) # This package name must be replaced statically for AC_SUBST to work AC_SUBST(PKG_LIB_FILE) # Substitute STUB_LIB_FILE in case package creates a stub library too. AC_SUBST(PKG_STUB_LIB_FILE) # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) AC_SUBST(PKG_TCL_SOURCES) AC_SUBST(PKG_HEADERS) AC_SUBST(PKG_INCLUDES) AC_SUBST(PKG_LIBS) AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_SOURCES # PKG_OBJECTS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_SOURCES], [ vars="$@" for i in $vars; do case $i in [\$]*) # allow $-var names PKG_SOURCES="$PKG_SOURCES $i" PKG_OBJECTS="$PKG_OBJECTS $i" ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_OBJECTS="$PKG_OBJECTS $j" ;; esac done AC_SUBST(PKG_SOURCES) AC_SUBST(PKG_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_STUB_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_STUB_SOURCES # PKG_STUB_OBJECTS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" done AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_TCL_SOURCES -- # # Specify one or more Tcl source files. These should be platform # independent runtime files. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_TCL_SOURCES #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_TCL_SOURCES], [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i']) fi PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" done AC_SUBST(PKG_TCL_SOURCES) ]) #------------------------------------------------------------------------ # TEA_ADD_HEADERS -- # # Specify one or more source headers. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_HEADERS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_HEADERS], [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find header file '${srcdir}/$i']) fi PKG_HEADERS="$PKG_HEADERS $i" done AC_SUBST(PKG_HEADERS) ]) #------------------------------------------------------------------------ # TEA_ADD_INCLUDES -- # # Specify one or more include dirs. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_INCLUDES], [ vars="$@" for i in $vars; do PKG_INCLUDES="$PKG_INCLUDES $i" done AC_SUBST(PKG_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_ADD_LIBS -- # # Specify one or more libraries. Users should check for # the right platform before adding to their list. For Windows, # libraries provided in "foo.lib" format will be converted to # "-lfoo" when using GCC (mingw). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_LIBS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_LIBS], [ vars="$@" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done AC_SUBST(PKG_LIBS) ]) #------------------------------------------------------------------------ # TEA_ADD_CFLAGS -- # # Specify one or more CFLAGS. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_CLEANFILES -- # # Specify one or more CLEANFILES. # # Arguments: # one or more file names to clean target # # Results: # # Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CLEANFILES], [ CLEANFILES="$CLEANFILES $@" ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: # none # # Results: # # If --prefix or --exec-prefix was not specified, $prefix and # $exec_prefix will be set to the values given to Tcl when it was # configured. #------------------------------------------------------------------------ AC_DEFUN([TEA_PREFIX], [ if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}]) prefix=${TCL_PREFIX} else AC_MSG_NOTICE([--prefix defaulting to /usr/local]) prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}]) exec_prefix=${TCL_EXEC_PREFIX} else AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}]) exec_prefix=$prefix fi fi ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER_CC -- # # Do compiler checks the way we want. This is just a replacement # for AC_PROG_CC in TEA configure.in files to make them cleaner. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. AC_PROG_CC AC_PROG_CPP INSTALL="\$(SHELL) \$(srcdir)/tclconfig/install-sh -c" AC_SUBST(INSTALL) #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- AC_PROG_MAKE_SET #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- AC_CHECK_TOOL(RANLIB, ranlib) #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- AC_OBJEXT AC_EXEEXT ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER -- # # Do compiler checks that use the compiler. This must go after # TEA_SETUP_COMPILER_CC, which does the actual compiler check. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER], [ # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. AC_REQUIRE([TEA_SETUP_COMPILER_CC]) #------------------------------------------------------------------------ # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------ if test -z "$no_pipe" -a -n "$GCC"; then AC_CACHE_CHECK([if the compiler understands -pipe], tcl_cv_cc_pipe, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no) CFLAGS=$hold_cflags]) if test $tcl_cv_cc_pipe = yes; then CFLAGS="$CFLAGS -pipe" fi fi #-------------------------------------------------------------------- # Common compiler flag setup #-------------------------------------------------------------------- AC_C_BIGENDIAN if test "${TEA_PLATFORM}" = "unix" ; then TEA_TCL_LINK_LIBS TEA_MISSING_POSIX_HEADERS # Let the user call this, because if it triggers, they will # need a compat/strtod.c that is correct. Users can also # use Tcl_GetDouble(FromObj) instead. #TEA_BUGGY_STRTOD fi ]) #------------------------------------------------------------------------ # TEA_MAKE_LIB -- # # Generate a line that can be used to build a shared/unshared library # in a platform independent manner. # # Arguments: # none # # Requires: # # Results: # # Defines the following vars: # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library # VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL # VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" AC_EGREP_CPP([manifest needed], [ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif ], [ # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" TEA_ADD_CLEANFILES([*.manifest]) ]) MAKE_STUB_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then MAKE_LIB="${MAKE_SHARED_LIB} " else MAKE_LIB="${MAKE_STATIC_LIB} " fi #-------------------------------------------------------------------- # Shared libraries and static libraries have different names. # Use the double eval to make sure any variables in the suffix is # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) RANLIB=: RANLIB_STUB=: else RANLIB_STUB="${RANLIB}" if test "${SHARED_BUILD}" = "1" ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" fi eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" RANLIB=: else eval eval "PKG_LIB_FILE=lib${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" fi # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) AC_SUBST(VC_MANIFEST_EMBED_DLL) AC_SUBST(VC_MANIFEST_EMBED_EXE) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. # # Arguments: # basename The base name of the library without version # numbers, extensions, or "lib" prefixes. # extra_dir Extra directory in which to search for the # library. This location is used first, then # $prefix/$exec-prefix, then some defaults. # # Requires: # TEA_INIT and TEA_PREFIX must be called first. # # Results: # # Defines the following vars: # ${basename}_LIB_NAME The computed library name. # ${basename}_LIB_SPEC The computed linker flags. #------------------------------------------------------------------------ AC_DEFUN([TEA_LIB_SPEC], [ AC_MSG_CHECKING([for $1 library]) # Look in exec-prefix for the library (defined by TEA_PREFIX). tea_lib_name_dir="${exec_prefix}/lib" # Or in a user-specified location. if test x"$2" != x ; then tea_extra_lib_dir=$2 else tea_extra_lib_dir=NONE fi for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break fi done if test "${TEA_PLATFORM}" = "windows"; then $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\" else # Strip off the leading "lib" and trailing ".a" or ".so" tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'` $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}" fi if test "x${$1_LIB_NAME}" = x ; then AC_MSG_ERROR([not found]) else AC_MSG_RESULT([${$1_LIB_SPEC}]) fi ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TCL_HEADERS -- # # Locate the private Tcl include files # # Arguments: # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TCL_TOP_DIR_NATIVE # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [ # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh} AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS]) AC_MSG_CHECKING([for Tcl private include files]) TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}` TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\" # Check to see if tclPort.h isn't already with the public headers # Don't look for tclInt.h because that resides with tcl.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tclh}/tclWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tclh}/tclUnixPort.h"; then result="private headers found with public headers" else TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\" if test "${TEA_PLATFORM}" = "windows"; then TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\" else TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TCL_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -d "${TCL_BIN_DIR}/Headers" -a \ -d "${TCL_BIN_DIR}/PrivateHeaders"; then TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}" else TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TCL_INCLUDES}" else if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}]) fi result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}" fi fi AC_SUBST(TCL_TOP_DIR_NATIVE) AC_SUBST(TCL_INCLUDES) AC_MSG_RESULT([${result}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TCL_HEADERS -- # # Locate the installed public Tcl header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [ AC_MSG_CHECKING([for Tcl public headers]) AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tclh, [ # Use the value from --with-tclinclude, if it was given if test x"${with_tclinclude}" != x ; then if test -f "${with_tclinclude}/tcl.h" ; then ac_cv_c_tclh=${with_tclinclude} else AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h]) fi else list="" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers directory case ${TCL_DEFS} in *TCL_FRAMEWORK*) list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tcl is not installed, # and in that situation, look there before installed locations. if test -f "${TCL_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TCL_INCLUDE_SPEC}" != x ; then d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tcl.h" ; then ac_cv_c_tclh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tclh}" = x ; then AC_MSG_ERROR([tcl.h not found. Please specify its location with --with-tclinclude]) else AC_MSG_RESULT([${ac_cv_c_tclh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TCL_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TK_HEADERS -- # # Locate the private Tk include files # # Arguments: # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [ # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh} AC_REQUIRE([TEA_PUBLIC_TK_HEADERS]) AC_MSG_CHECKING([for Tk private include files]) TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}` TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\" # Check to see if tkPort.h isn't already with the public headers # Don't look for tkInt.h because that resides with tk.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tkh}/tkWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tkh}/tkUnixPort.h"; then result="private headers found with public headers" else TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\" TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\" if test "${TEA_PLATFORM}" = "windows"; then TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\" else TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TK_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}" # Detect and add ttk subdir if test -d "${TK_SRC_DIR}/generic/ttk"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\"" fi if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\"" fi if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\"" fi if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TK_DEFS} in *TK_FRAMEWORK*) if test -d "${TK_BIN_DIR}/Headers" -a \ -d "${TK_BIN_DIR}/PrivateHeaders"; then TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}" else TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TK_INCLUDES}" else if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}]) fi result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}" fi fi AC_SUBST(TK_TOP_DIR_NATIVE) AC_SUBST(TK_XLIB_DIR_NATIVE) AC_SUBST(TK_INCLUDES) AC_MSG_RESULT([${result}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TK_HEADERS -- # # Locate the installed public Tk header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [ AC_MSG_CHECKING([for Tk public headers]) AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files], with_tkinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tkh, [ # Use the value from --with-tkinclude, if it was given if test x"${with_tkinclude}" != x ; then if test -f "${with_tkinclude}/tk.h" ; then ac_cv_c_tkh=${with_tkinclude} else AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h]) fi else list="" if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers directory. case ${TK_DEFS} in *TK_FRAMEWORK*) list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tk is not installed, # and in that situation, look there before installed locations. if test -f "${TK_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tk's --prefix location, # relative to directory of tkConfig.sh, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TK_PREFIX}/include 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TK_INCLUDE_SPEC}" != x ; then d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tk.h" ; then ac_cv_c_tkh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tkh}" = x ; then AC_MSG_ERROR([tk.h not found. Please specify its location with --with-tkinclude]) else AC_MSG_RESULT([${ac_cv_c_tkh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}` TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_INCLUDES) if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then # On Windows and Aqua, we need the X compat headers AC_MSG_CHECKING([for X11 header files]) if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_XINCLUDES) fi AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}]) fi ]) #------------------------------------------------------------------------ # TEA_PATH_CONFIG -- # # Locate the ${1}Config.sh file and perform a sanity check on # the ${1} compile flags. These are used by packages like # [incr Tk] that load *Config.sh files from more than Tcl and Tk. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-$1=... # # Defines the following vars: # $1_BIN_DIR Full path to the directory containing # the $1Config.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_CONFIG], [ # # Ok, lets find the $1 configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-$1 # if test x"${no_$1}" = x ; then # we reset no_$1 in case something fails here no_$1=true AC_ARG_WITH($1, [ --with-$1 directory containing $1 configuration ($1Config.sh)], with_$1config=${withval}) AC_MSG_CHECKING([for $1 configuration]) AC_CACHE_VAL(ac_cv_c_$1config,[ # First check to see if --with-$1 was specified. if test x"${with_$1config}" != x ; then case ${with_$1config} in */$1Config.sh ) if test -f ${with_$1config}; then AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself]) with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'` fi;; esac if test -f "${with_$1config}/$1Config.sh" ; then ac_cv_c_$1config=`(cd ${with_$1config}; pwd)` else AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh]) fi fi # then check for a private $1 installation if test x"${ac_cv_c_$1config}" = x ; then for i in \ ../$1 \ `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../$1 \ `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../../$1 \ `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ${srcdir}/../$1 \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi if test -f "$i/unix/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i/unix; pwd)` break fi done fi # check in a few common install locations if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_$1config}" = x ; then $1_BIN_DIR="# no $1 configs found" AC_MSG_WARN([Cannot find $1 configuration definitions]) exit 0 else no_$1= $1_BIN_DIR=${ac_cv_c_$1config} AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG -- # # Load the $1Config.sh file # # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # # Substitutes the following vars: # $1_SRC_DIR # $1_LIB_FILE # $1_LIB_SPEC #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG], [ AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) if test -f "${$1_BIN_DIR}/$1Config.sh" ; then AC_MSG_RESULT([loading]) . "${$1_BIN_DIR}/$1Config.sh" else AC_MSG_RESULT([file not found]) fi # # If the $1_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable $1_LIB_SPEC will be set to the value # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC # instead of $1_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC} $1_LIBRARY_PATH=${$1_LIBRARY_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) # Allow the caller to prevent this auto-check by specifying any 2nd arg AS_IF([test "x$2" = x], [ # Check both upper and lower-case variants # If a dev wanted non-stubs libs, this function could take an option # to not use _STUB in the paths below AS_IF([test "x${$1_STUB_LIB_SPEC}" = x], [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)], [TEA_LOAD_CONFIG_LIB($1_STUB)]) ]) ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG_LIB -- # # Helper function to load correct library from another extension's # ${PACKAGE}Config.sh. # # Results: # Adds to LIBS the appropriate extension library #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG_LIB], [ AC_MSG_CHECKING([For $1 library for LIBS]) # This simplifies the use of stub libraries by automatically adding # the stub lib to your path. Normally this would add to SHLIB_LD_LIBS, # but this is called before CONFIG_CFLAGS. More importantly, this adds # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD. if test "x${$1_LIB_SPEC}" != "x" ; then if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"]) AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}]) else TEA_ADD_LIBS([${$1_LIB_SPEC}]) AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}]) fi else AC_MSG_RESULT([file not found]) fi ]) #------------------------------------------------------------------------ # TEA_EXPORT_CONFIG -- # # Define the data to insert into the ${PACKAGE}Config.sh file # # Arguments: # # Requires the following vars to be set: # $1 # # Results: # Substitutes the following vars: #------------------------------------------------------------------------ AC_DEFUN([TEA_EXPORT_CONFIG], [ #-------------------------------------------------------------------- # These are for $1Config.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}" else eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" fi $1_BUILD_LIB_SPEC="-L`pwd` ${$1_LIB_FLAG}" $1_LIB_SPEC="-L${pkglibdir} ${$1_LIB_FLAG}" $1_BUILD_STUB_LIB_SPEC="-L`pwd` [$]{$1_STUB_LIB_FLAG}" $1_STUB_LIB_SPEC="-L${pkglibdir} [$]{$1_STUB_LIB_FLAG}" $1_BUILD_STUB_LIB_PATH="`pwd`/[$]{PKG_STUB_LIB_FILE}" $1_STUB_LIB_PATH="${pkglibdir}/[$]{PKG_STUB_LIB_FILE}" AC_SUBST($1_BUILD_LIB_SPEC) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_PATH) AC_SUBST($1_STUB_LIB_PATH) AC_SUBST(MAJOR_VERSION) AC_SUBST(MINOR_VERSION) AC_SUBST(PATCHLEVEL) ]) #------------------------------------------------------------------------ # TEA_PATH_CELIB -- # # Locate Keuchel's celib emulation layer for targeting Win/CE # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-celib=... # # Defines the following vars: # CELIB_DIR Full path to the directory containing # the include and platform lib files #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_CELIB], [ # First, look for one uninstalled. # the alternative search directory is invoked by --with-celib if test x"${no_celib}" = x ; then # we reset no_celib in case something fails here no_celib=true AC_ARG_WITH(celib,[ --with-celib=DIR use Windows/CE support library from DIR], with_celibconfig=${withval}) AC_MSG_CHECKING([for Windows/CE celib directory]) AC_CACHE_VAL(ac_cv_c_celibconfig,[ # First check to see if --with-celibconfig was specified. if test x"${with_celibconfig}" != x ; then if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory]) fi fi # then check for a celib library if test x"${ac_cv_c_celibconfig}" = x ; then for i in \ ../celib-palm-3.0 \ ../celib \ ../../celib-palm-3.0 \ ../../celib \ `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \ ${srcdir}/../celib-palm-3.0 \ ${srcdir}/../celib \ `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \ ; do if test -d "$i/inc" ; then ac_cv_c_celibconfig=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_celibconfig}" = x ; then AC_MSG_ERROR([Cannot find celib support library directory]) else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) # Local Variables: # mode: autoconf # End: saods9/ds9/template/chandra/000755 000765 000000 00000000000 13012655541 016300 5ustar00joyewheel000000 000000 saods9/ds9/template/heasarc/000755 000765 000000 00000000000 13012655541 016306 5ustar00joyewheel000000 000000 saods9/ds9/template/mmt/000755 000765 000000 00000000000 13012655541 015475 5ustar00joyewheel000000 000000 saods9/ds9/template/xmm/000755 000765 000000 00000000000 13012655541 015501 5ustar00joyewheel000000 000000 saods9/ds9/template/xmm/epicmos1.tpl000644 000765 000000 00000002501 10370226422 017734 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.0 # Filename: /home/joye/templates/xmm/epicmos/image_epicmos1.ds global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source wcs0;fk5 # composite(-0.017,-0.014495,0) || point(359.98122,-0.014772826) || # point=boxcircle # text(0.095331979,0.18528183) || text={5} # text(0.18353977,0.0004077268) || text={6} # text(359.99987,0.00040772889) || text={1} # text(359.90683,0.18649016) || text={4} # text(359.81379,0.0016160537) || text={3} # text(0.092915319,-0.18325807) || text={7} # text(359.90925,-0.18204976) || text={2} polygon(0.18524639,0.27414948,0.0045201849,0.27427278,0.0056046815,0.09358257,0.1845215,0.093406209) || polygon(0.18400899,-0.094584329,0.0032641713,-0.093859609,0.0043500151,-0.27454963,0.18385383,-0.2741015) || polygon(0.27711421,0.089482136,0.094538624,0.090759,0.093867077,-0.091797152,0.27761497,-0.091828859) || polygon(0.092712157,0.091309595,359.91014,0.092586111,359.91122,-0.088106013,0.092552581,-0.088209985) || polygon(0.0033282835,0.27363238,359.82076,0.27490768,359.82001,0.094768685,0.0031744198,0.094115539) || polygon(359.90953,0.092568474,359.72696,0.093844064,359.72812,-0.089262169,359.90881,-0.088176995) || polygon(0.0019846216,-0.091478854,359.81886,-0.092032372,359.8205,-0.27089198,0.0018258799,-0.27099729) saods9/ds9/template/xmm/epicmos2.tpl000644 000765 000000 00000002501 10370226423 017736 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.0 # Filename: /home/joye/templates/xmm/epicmos/image_epicmos2.ds global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source wcs0;fk5 # composite(-.02,-.015099,0) || point(359.98032,-0.015255945) || # point=boxcircle # text(0.002598154,-7.5391061e-05) || text={1} # text(0.19351408,-0.090699798) || text={2} # text(0.0013898207,-0.18132479) || text={3} # text(359.80806,-0.090699806) || text={4} # text(0.19351408,0.09175734) || text={7} # text(0.00018148737,0.18600729) || text={6} # text(359.80927,0.092965679) || text={5} polygon(0.092381631,0.092656826,359.91167,0.092172121,359.91162,-0.090971255,0.092913154,-0.089866031) || polygon(0.091779215,-0.092315194,359.90928,-0.093457297,359.91102,-0.2759413,0.092316593,-0.27483652) || polygon(359.90894,-8.3494418e-05,359.72643,-0.00062029737,359.72749,-0.18040463,359.90763,-0.18114781) || polygon(359.90805,0.18424156,359.72735,0.1837549,359.7273,0.00061430326,359.90859,0.0017195055) || polygon(0.091791652,0.27698791,359.91108,0.27650239,359.91103,0.09336198,0.092327659,0.094467032) || polygon(0.27583152,0.18479008,0.095118571,0.18430591,0.095069778,0.001163703,0.27636646,0.0022696912) || polygon(0.27552481,0.00013033963,0.094815474,-0.00035441732,0.094691734,-0.18108137,0.27625199,-0.17875761) saods9/ds9/template/xmm/epicpn.tpl000644 000765 000000 00000004246 10370226423 017503 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.0 # Filename: /home/joye/templates/xmm/epicpn/image_epicpn.ds global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source wcs0;fk5 # composite(-0.032,0.0166,0) || point(359.9684,0.017688302) || # point=boxcircle polygon(0.0024077734,-0.00014830005,359.78785,-0.00041752552,359.78786,-0.072646412,0.0018211508,-0.072695941) || # text(359.90368,-0.036006347) || text={1} polygon(0.0024077734,-0.00014830005,359.78785,-0.00041752552,359.78786,-0.072646412,0.0018211508,-0.072695941) || # text(359.90247,-0.11213125) || text={2} polygon(0.0021963947,-0.075102588,359.78764,-0.075372326,359.78765,-0.14760027,0.0016077991,-0.14765228) || # text(359.90368,-0.18704668) || text={3} polygon(0.0019729992,-0.14975594,359.78741,-0.15002511,359.78742,-0.2222521,0.0013929609,-0.22230368) || # text(359.90247,0.041326975) || text={4} polygon(0.0026231785,0.074806934,359.78805,0.074537239,359.78807,0.0023093611,0.0020385428,0.0022583476) || # text(359.90126,0.11382726) || text={5} polygon(0.0028373576,0.14976211,359.78827,0.14949189,359.78828,0.077263098,0.0022494778,0.077213572) || # text(359.90247,0.18632595) || text={6} polygon(0.0030451022,0.22471722,359.78848,0.2244455,359.78849,0.15221877,0.0024592092,0.15216874) || # text(0.11272235,0.040118972) || text={7} polygon(0.21961801,0.074544059,0.0050560461,0.074274386,0.0050631475,0.0020453621,0.21903517,0.0019959256) || # text(0.11272285,0.11141062) || text={8} polygon(0.21982932,0.14949757,0.0052702679,0.14922958,0.0052781157,0.077000618,0.21924514,0.076949464) || # text(0.11513727,0.18753426) || text={9} polygon(0.22003744,0.22445102,0.0054832423,0.22418372,0.0054866164,0.15195581,0.21945715,0.15190497) || # text(0.1115122,-0.037214702) || text={10} polygon(0.21940876,-0.00041148409,0.0048458181,-0.00068086539,0.0048521831,-0.072908947,0.21882206,-0.07295968) || # text(0.1127201,-0.11333958) || text={11} polygon(0.21919634,-0.075366094,0.0046291113,-0.075636181,0.0046399943,-0.14786432,0.21860577,-0.14791435) || # text(0.11272043,-0.1870464) || text={12} polygon(0.21897336,-0.15001881,0.0044055854,-0.15028956,0.0044157238,-0.22251775,0.21838946,-0.22256606) saods9/ds9/template/mmt/binospec.tpl000644 000765 000000 00000000433 11073704415 020020 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.0 global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source wcs0;fk5 # composite(0,0,0) || composite=1 box(359.9225,0,480",900",0) || # tag={Bino} box(0.077500142,0,480",900",0) # tag={Bino} saods9/ds9/template/mmt/hecto/000755 000765 000000 00000000000 13012655541 016577 5ustar00joyewheel000000 000000 saods9/ds9/template/mmt/megacam/000755 000765 000000 00000000000 13012655541 017067 5ustar00joyewheel000000 000000 saods9/ds9/template/mmt/mmirs/000755 000765 000000 00000000000 13012655541 016624 5ustar00joyewheel000000 000000 saods9/ds9/template/mmt/swirc.tpl000644 000765 000000 00000003736 10270004707 017351 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.0 # Filename: /home/joye/templates/sao/swirc.fits global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source wcs0;fk5 # composite(0,0,0) || point(0,0) || # point=boxcircle # text(359.97636,0.021004921) || font="times 12 normal" text={I} # text(359.97633,-0.021495059) || font="times 12 normal" text={II} # text(0.023662353,-0.021532975) || font="times 12 normal" text={III} # text(0.023196531,0.021134073) || font="times 12 normal" text={IV} box(0.021365501,0.02401054,153.6",19.2",0) || box(0.021361229,0.01867721,153.6",19.2",0) || box(359.97603,0.021380188,19.2",153.6",0) || box(359.97866,-0.01862193,153.6",19.2",0) || box(359.97866,-0.023955261,153.6",19.2",0) || box(0.023995853,-0.021324909,19.2",153.6",0) || box(0.021348413,0.0026772167,153.6",19.2",0) || box(0.021352685,0.0080105479,153.6",19.2",0) || box(0.021356957,0.013343879,153.6",19.2",0) || box(0.021369773,0.02934387,153.6",19.2",0) || box(0.021374046,0.0346772,153.6",19.2",0) || box(0.021378318,0.040010529,153.6",19.2",0) || box(359.97865,-0.039955249,153.6",19.2",0) || box(359.97865,-0.03462192,153.6",19.2",0) || box(359.97866,-0.029288591,153.6",19.2",0) || box(359.97867,-0.013288599,153.6",19.2",0) || box(359.97867,-0.0079552683,153.6",19.2",0) || box(359.97868,-0.0026219371,153.6",19.2",0) || box(359.96003,0.021393001,19.2",153.6",0) || box(359.96536,0.021388731,19.2",153.6",0) || box(359.9707,0.021384459,19.2",153.6",0) || box(359.98136,0.021375917,19.2",153.6",0) || box(359.9867,0.021371645,19.2",153.6",0) || box(359.99203,0.021367373,19.2",153.6",0) || box(359.99736,0.021363101,19.2",153.6",0) || box(0.0026625281,-0.021307822,19.2",153.6",0) || box(0.0079958596,-0.021312094,19.2",153.6",0) || box(0.013329191,-0.021316366,19.2",153.6",0) || box(0.018662522,-0.021320637,19.2",153.6",0) || box(0.029329184,-0.02132918,19.2",153.6",0) || box(0.034662514,-0.021333451,19.2",153.6",0) || box(0.039995843,-0.021337722,19.2",153.6",0) saods9/ds9/template/mmt/mmirs/image.tpl000644 000765 000000 00000005050 11444434371 020432 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.1 # Filename: test.fits global color=green dashlist=8 3 width=1 font="helvetica 10 normal" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 wcs0;fk5 # composite(0,0,5.2213707e-05) || composite=1 box(0,0,408",408",5.2213707e-05) || # tag={Mask} polygon(359.89225,-0.00012771548,359.89222,0.016979321,359.89215,0.057385486,359.90996,0.092233383,359.94322,0.11811841,359.98286,0.13249802,1.6000224e-06,0.11759077,8.5553752e-07,0.091934992,359.98288,0.073283367,359.94221,0.069587115,359.92874,0.054886822,359.92887,-0.055011809,359.94234,-0.069675137,359.98292,-0.073297943,1.9770939e-06,-0.091934318,3.0342173e-06,-0.11759067,359.98294,-0.13251162,359.94344,-0.11820308,359.91024,-0.092419349,359.89236,-0.057641649,359.89229,-0.017235729) || # tag={Mask} polygon(359.89225,-0.00012771548,359.89222,0.016944321,359.89215,0.056508482,359.91364,0.088477822,359.94746,0.1093244,359.98286,0.1175641,359.98287,0.091928249,359.93711,0.086467601,359.92194,0.079989511,359.91524,0.062597422,359.91542,-0.062765368,359.92215,-0.080135045,359.93729,-0.08656855,359.98293,-0.091941579,359.98293,-0.117578,359.94765,-0.10939812,359.9139,-0.088649851,359.89236,-0.056764653,359.89229,-0.017200729) || # tag={Mask} # text(359.90741,-9.7747524e-05) || textangle=270.00005 text={Camera 1} tag={Mask} polygon(0.11279767,-7.9210806e-05,0.11283029,0.017027184,0.11290769,0.057431829,0.090040766,0.092277881,0.056787713,0.11814596,0.017143943,0.13250625,1.6000224e-06,0.11759077,8.5553752e-07,0.091934992,0.017125131,0.073291941,0.057793497,0.069616127,0.071262324,0.054922962,0.071130502,-0.054973028,0.057658219,-0.069643411,0.017083571,-0.073288523,1.9770939e-06,-0.091934318,3.0342173e-06,-0.11759067,0.017068804,-0.13250186,0.056562363,-0.11817101,0.089760798,-0.092369245,0.11268869,-0.057590992,0.11276514,-0.017186583) || # tag={Mask} polygon(0.11279767,-7.9210806e-05,0.11283022,0.016992185,0.11192484,0.056556496,0.086360832,0.088520613,0.052547573,0.10935005,0.017139089,0.11757242,0.017130929,0.091936714,0.062891853,0.086498803,0.078062803,0.080028419,0.084756883,0.062640181,0.084577917,-0.062719024,0.077852405,-0.080091921,0.0627089,-0.086533678,0.017078796,-0.091932052,0.017072419,-0.11756833,0.052354648,-0.1093686,0.086103276,-0.088601901,0.11171106,-0.056712414,0.11276521,-0.017151584) || # tag={Mask} # text(0.092595036,-4.9017175e-05) || textangle=90.000052 text={Camera 2} tag={Mask} # vector(359.96798,0.055537453,180",180.00005) || vector=1 tag={Mask} # text(359.98315,0.062281588) textangle=180.00005 text={Wavelength} tag={Mask} saods9/ds9/template/mmt/mmirs/longslit.tpl000644 000765 000000 00000005046 11444434371 021210 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.1 # Filename: test.fits global color=green dashlist=8 3 width=1 font="helvetica 10 normal" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 wcs0;fk5 # composite(0,0,5.2213707e-05) || composite=1 box(0,0,1",408",5.2213707e-05) || # tag={Mask} polygon(359.89225,-0.00012771548,359.89222,0.016979321,359.89215,0.057385486,359.90996,0.092233383,359.94322,0.11811841,359.98286,0.13249802,1.6000224e-06,0.11759077,8.5553752e-07,0.091934992,359.98288,0.073283367,359.94221,0.069587115,359.92874,0.054886822,359.92887,-0.055011809,359.94234,-0.069675137,359.98292,-0.073297943,1.9770939e-06,-0.091934318,3.0342173e-06,-0.11759067,359.98294,-0.13251162,359.94344,-0.11820308,359.91024,-0.092419349,359.89236,-0.057641649,359.89229,-0.017235729) || # tag={Mask} polygon(359.89225,-0.00012771548,359.89222,0.016944321,359.89215,0.056508482,359.91364,0.088477822,359.94746,0.1093244,359.98286,0.1175641,359.98287,0.091928249,359.93711,0.086467601,359.92194,0.079989511,359.91524,0.062597422,359.91542,-0.062765368,359.92215,-0.080135045,359.93729,-0.08656855,359.98293,-0.091941579,359.98293,-0.117578,359.94765,-0.10939812,359.9139,-0.088649851,359.89236,-0.056764653,359.89229,-0.017200729) || # tag={Mask} # text(359.90741,-9.7747524e-05) || textangle=270.00005 text={Camera 1} tag={Mask} polygon(0.11279767,-7.9210806e-05,0.11283029,0.017027184,0.11290769,0.057431829,0.090040766,0.092277881,0.056787713,0.11814596,0.017143943,0.13250625,1.6000224e-06,0.11759077,8.5553752e-07,0.091934992,0.017125131,0.073291941,0.057793497,0.069616127,0.071262324,0.054922962,0.071130502,-0.054973028,0.057658219,-0.069643411,0.017083571,-0.073288523,1.9770939e-06,-0.091934318,3.0342173e-06,-0.11759067,0.017068804,-0.13250186,0.056562363,-0.11817101,0.089760798,-0.092369245,0.11268869,-0.057590992,0.11276514,-0.017186583) || # tag={Mask} polygon(0.11279767,-7.9210806e-05,0.11283022,0.016992185,0.11192484,0.056556496,0.086360832,0.088520613,0.052547573,0.10935005,0.017139089,0.11757242,0.017130929,0.091936714,0.062891853,0.086498803,0.078062803,0.080028419,0.084756883,0.062640181,0.084577917,-0.062719024,0.077852405,-0.080091921,0.0627089,-0.086533678,0.017078796,-0.091932052,0.017072419,-0.11756833,0.052354648,-0.1093686,0.086103276,-0.088601901,0.11171106,-0.056712414,0.11276521,-0.017151584) || # tag={Mask} # text(0.092595036,-4.9017175e-05) || textangle=90.000052 text={Camera 2} tag={Mask} # vector(359.96798,0.055537453,180",180.00005) || vector=1 tag={Mask} # text(359.98315,0.062281588) textangle=180.00005 text={Wavelength} tag={Mask} saods9/ds9/template/mmt/mmirs/mask.tpl000644 000765 000000 00000005050 11444434371 020303 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.1 # Filename: test.fits global color=green dashlist=8 3 width=1 font="helvetica 10 normal" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 wcs0;fk5 # composite(0,0,5.2213707e-05) || composite=1 box(0,0,240",408",5.2213707e-05) || # tag={Mask} polygon(359.89225,-0.00012771548,359.89222,0.016979321,359.89215,0.057385486,359.90996,0.092233383,359.94322,0.11811841,359.98286,0.13249802,1.6000224e-06,0.11759077,8.5553752e-07,0.091934992,359.98288,0.073283367,359.94221,0.069587115,359.92874,0.054886822,359.92887,-0.055011809,359.94234,-0.069675137,359.98292,-0.073297943,1.9770939e-06,-0.091934318,3.0342173e-06,-0.11759067,359.98294,-0.13251162,359.94344,-0.11820308,359.91024,-0.092419349,359.89236,-0.057641649,359.89229,-0.017235729) || # tag={Mask} polygon(359.89225,-0.00012771548,359.89222,0.016944321,359.89215,0.056508482,359.91364,0.088477822,359.94746,0.1093244,359.98286,0.1175641,359.98287,0.091928249,359.93711,0.086467601,359.92194,0.079989511,359.91524,0.062597422,359.91542,-0.062765368,359.92215,-0.080135045,359.93729,-0.08656855,359.98293,-0.091941579,359.98293,-0.117578,359.94765,-0.10939812,359.9139,-0.088649851,359.89236,-0.056764653,359.89229,-0.017200729) || # tag={Mask} # text(359.90741,-9.7747524e-05) || textangle=270.00005 text={Camera 1} tag={Mask} polygon(0.11279767,-7.9210806e-05,0.11283029,0.017027184,0.11290769,0.057431829,0.090040766,0.092277881,0.056787713,0.11814596,0.017143943,0.13250625,1.6000224e-06,0.11759077,8.5553752e-07,0.091934992,0.017125131,0.073291941,0.057793497,0.069616127,0.071262324,0.054922962,0.071130502,-0.054973028,0.057658219,-0.069643411,0.017083571,-0.073288523,1.9770939e-06,-0.091934318,3.0342173e-06,-0.11759067,0.017068804,-0.13250186,0.056562363,-0.11817101,0.089760798,-0.092369245,0.11268869,-0.057590992,0.11276514,-0.017186583) || # tag={Mask} polygon(0.11279767,-7.9210806e-05,0.11283022,0.016992185,0.11192484,0.056556496,0.086360832,0.088520613,0.052547573,0.10935005,0.017139089,0.11757242,0.017130929,0.091936714,0.062891853,0.086498803,0.078062803,0.080028419,0.084756883,0.062640181,0.084577917,-0.062719024,0.077852405,-0.080091921,0.0627089,-0.086533678,0.017078796,-0.091932052,0.017072419,-0.11756833,0.052354648,-0.1093686,0.086103276,-0.088601901,0.11171106,-0.056712414,0.11276521,-0.017151584) || # tag={Mask} # text(0.092595036,-4.9017175e-05) || textangle=90.000052 text={Camera 2} tag={Mask} # vector(359.96798,0.055537453,180",180.00005) || vector=1 tag={Mask} # text(359.98315,0.062281588) textangle=180.00005 text={Wavelength} tag={Mask} saods9/ds9/template/mmt/megacam/megacam-amp-guide.tpl000644 000765 000000 00000021164 11075735605 023063 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.0 global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source wcs0;fk5 # composite(0,0,0|| composite=1 point(0,0) || # point=boxcircle # text(359.83864,-0.20117642) || textangle=89.5 text={A1} box(359.83867,-0.20115398,81.586975",367.7002",89.5) || # text(359.83844,-0.1784702) || textangle=89.5 text={A2} box(359.83847,-0.17844776,81.586975",367.7002",89.5) || # text(359.83823,-0.15407873) || textangle=89.5 text={A3} box(359.83825,-0.15405641,81.586975",367.7002",89.5) || # text(359.83803,-0.13137242) || textangle=89.5 text={A4} box(359.83805,-0.13135009,81.586975",367.7002",89.5) || # text(359.83783,-0.10698076) || textangle=89.5 text={A5} box(359.83785,-0.10695843,81.586975",367.7002",89.5) || # text(359.83762,-0.084274433) || textangle=89.5 text={A6} box(359.83764,-0.084252106,81.586975",367.7002",89.5) || # text(359.83742,-0.059882774) || textangle=89.5 text={A7} box(359.83744,-0.059860347,81.586975",367.7002",89.5) || # text(359.83722,-0.037176259) || textangle=89.5 text={A8} box(359.83724,-0.037153931,81.586975",367.7002",89.5) || # text(359.837,-0.012784701) || textangle=89.5 text={A9} box(359.83703,-0.012762259,81.586975",367.7002",89.5) || # text(359.8368,0.0099217144) || textangle=89.5 text={A10} box(359.83683,0.0099441558,81.586975",367.7002",89.5) || # text(359.83658,0.034313386) || textangle=89.5 text={A11} box(359.8366,0.034335714,81.586975",367.7002",89.5) || # text(359.83639,0.057019803) || textangle=89.5 text={A12} box(359.8364,0.05704213,81.586975",367.7002",89.5) || # text(359.83618,0.081411562) || textangle=89.5 text={A13} box(359.8362,0.081433889,81.586975",367.7002",89.5) || # text(359.83597,0.10411788) || textangle=89.5 text={A14} box(359.83599,0.10414022,81.586975",367.7002",89.5) || # text(359.83577,0.12850954) || textangle=89.5 text={A15} box(359.83579,0.12853188,81.586975",367.7002",89.5) || # text(359.83557,0.15121586) || textangle=89.5 text={A16} box(359.83559,0.15123819,81.586975",367.7002",89.5) || # text(359.83535,0.17560722) || textangle=89.5 text={A17} box(359.83537,0.17562955,81.586975",367.7002",89.5) || # text(359.83515,0.19831344) || textangle=89.5 text={A18} box(359.83518,0.19833588,81.586975",367.7002",89.5) || # text(359.95003,-0.20020716) || textangle=89.5 text={A19} box(359.95007,-0.2001846,81.586975",367.7002",89.5) || # text(359.94983,-0.17750084) || textangle=89.5 text={A20} box(359.94987,-0.17747829,81.586975",367.7002",89.5) || # text(359.94962,-0.15310927) || textangle=89.5 text={A21} box(359.94966,-0.15308671,81.586975",367.7002",89.5) || # text(359.94942,-0.13040286) || textangle=89.5 text={A22} box(359.94946,-0.1303804,81.586975",367.7002",89.5) || # text(359.9492,-0.1060113) || textangle=89.5 text={A23} box(359.94924,-0.10598873,81.586975",367.7002",89.5) || # text(359.94901,-0.08330477) || textangle=89.5 text={A24} box(359.94905,-0.083282213,81.586975",367.7002",89.5) || # text(359.94878,-0.058913113) || textangle=89.5 text={A25} box(359.94883,-0.058890441,81.586975",367.7002",89.5) || # text(359.94859,-0.036206483) || textangle=89.5 text={A26} box(359.94863,-0.036184025,81.586975",367.7002",89.5) || # text(359.94838,-0.011814738) || textangle=89.5 text={A27} box(359.94843,-0.011792066,81.586975",367.7002",89.5) || # text(359.94818,0.010891805) || textangle=89.5 text={A28} box(359.94822,0.010914362,81.586975",367.7002",89.5) || # text(359.94797,0.03528355) || textangle=89.5 text={A29} box(359.94802,0.035306221,81.586975",367.7002",89.5) || # text(359.94777,0.057990092) || textangle=89.5 text={A30} box(359.94781,0.058012649,81.586975",367.7002",89.5) || # text(359.94756,0.082381837) || textangle=89.5 text={A31} box(359.94761,0.082404408,81.586975",367.7002",89.5) || # text(359.94735,0.10508817) || textangle=89.5 text={A32} box(359.9474,0.10511083,81.586975",367.7002",89.5) || # text(359.94715,0.12947993) || textangle=89.5 text={A33} box(359.9472,0.12950259,81.586975",367.7002",89.5) || # text(359.94695,0.15218634) || textangle=89.5 text={A34} box(359.947,0.15220891,81.586975",367.7002",89.5) || # text(359.94673,0.17657792) || textangle=89.5 text={A35} box(359.94678,0.17660058,81.586975",367.7002",89.5) || # text(359.94654,0.19928423) || textangle=89.5 text={A36} box(359.94659,0.1993068,81.586975",367.7002",89.5) || # text(0.053422167,-0.19930672) || textangle=89.5 text={A37} box(0.053451906,-0.19928428,81.586975",367.7002",89.5) || # text(0.053230353,-0.17660032) || textangle=89.5 text={A38} box(0.053250094,-0.17657799,81.586975",367.7002",89.5) || # text(0.053019108,-0.15220873) || textangle=89.5 text={A39} box(0.053038849,-0.1521864,81.586975",367.7002",89.5) || # text(0.052817296,-0.12950244) || textangle=89.5 text={A40} box(0.052837036,-0.12948012,81.586975",367.7002",89.5) || # text(0.052606049,-0.10511075) || textangle=89.5 text={A41} box(0.052625787,-0.10508833,81.586975",367.7002",89.5) || # text(0.052404233,-0.082404267) || textangle=89.5 text={A42} box(0.052423972,-0.082381938,81.586975",367.7002",89.5) || # text(0.052192982,-0.058012476) || textangle=89.5 text={A43} box(0.052212722,-0.057990148,81.586975",367.7002",89.5) || # text(0.051991165,-0.035306089) || textangle=89.5 text={A44} box(0.052010904,-0.035283661,81.586975",367.7002",89.5) || # text(0.051779913,-0.010914299) || textangle=89.5 text={A45} box(0.051799651,-0.010891871,81.586975",367.7002",89.5) || # text(0.051578093,0.011792188) || textangle=89.5 text={A46} box(0.051597832,0.011814616,81.586975",367.7002",89.5) || # text(0.051366839,0.036183977) || textangle=89.5 text={A47} box(0.051386577,0.036206406,81.586975",367.7002",89.5) || # text(0.051165016,0.058890464) || textangle=89.5 text={A48} box(0.051194752,0.058912908,81.586975",367.7002",89.5) || # text(0.05095376,0.083282255) || textangle=89.5 text={A49} box(0.050973498,0.083304583,81.586975",367.7002",89.5) || # text(0.050761932,0.10598876) || textangle=89.5 text={A50} box(0.050781669,0.10601119,81.586975",367.7002",89.5) || # text(0.050540675,0.13038043) || textangle=89.5 text={A51} box(0.05057041,0.13040288,81.586975",367.7002",89.5) || # text(0.050348846,0.15308683) || textangle=89.5 text={A52} box(0.050368584,0.15310917,81.586975",367.7002",89.5) || # text(0.050127588,0.17747831) || textangle=89.5 text={A53} box(0.050157322,0.17750076,81.586975",367.7002",89.5) || # text(0.049935755,0.20018471) || textangle=89.5 text={A54} box(0.049955493,0.20020703,81.586975",367.7002",89.5) || # text(0.16483089,-0.19833571) || textangle=89.5 text={A55} box(0.16485064,-0.19831338,81.586975",367.7002",89.5) || # text(0.16462814,-0.17562963) || textangle=89.5 text={A56} box(0.16465787,-0.17560709,81.586975",367.7002",89.5) || # text(0.16441587,-0.15123805) || textangle=89.5 text={A57} box(0.16443561,-0.15121572,81.586975",367.7002",89.5) || # text(0.1642231,-0.12853175) || textangle=89.5 text={A58} box(0.16424285,-0.12850943,81.586975",367.7002",89.5) || # text(0.16401084,-0.10414017) || textangle=89.5 text={A59} box(0.16403057,-0.10411775,81.586975",367.7002",89.5) || # text(0.16380807,-0.081433798) || textangle=89.5 text={A60} box(0.16382782,-0.081411469,81.586975",367.7002",89.5) || # text(0.16359581,-0.057042117) || textangle=89.5 text={A61} box(0.16361554,-0.057019787,81.586975",367.7002",89.5) || # text(0.16339304,-0.034335739) || textangle=89.5 text={A62} box(0.16342277,-0.034313294,81.586975",367.7002",89.5) || # text(0.16318077,-0.0099440576) || textangle=89.5 text={A63} box(0.16320051,-0.0099217278,81.586975",367.7002",89.5) || # text(0.162988,0.012762437) || textangle=89.5 text={A64} box(0.16300773,0.012784766,81.586975",367.7002",89.5) || # text(0.16277572,0.037154118) || textangle=89.5 text={A65} box(0.16279546,0.037176447,81.586975",367.7002",89.5) || # text(0.16257296,0.059860497) || textangle=89.5 text={A66} box(0.16259269,0.059882825,81.586975",367.7002",89.5) || # text(0.16236067,0.084252178) || textangle=89.5 text={A67} box(0.16238042,0.084274507,81.586975",367.7002",89.5) || # text(0.1621579,0.10695856) || textangle=89.5 text={A68} box(0.16217764,0.10698089,81.586975",367.7002",89.5) || # text(0.16194562,0.13135014) || textangle=89.5 text={A69} box(0.16196536,0.13137247,81.586975",367.7002",89.5) || # text(0.16175284,0.15405653) || textangle=89.5 text={A70} box(0.16177259,0.15407886,81.586975",367.7002",89.5) || # text(0.16153057,0.1784479) || textangle=89.5 text={A71} box(0.1615603,0.17847035,81.586975",367.7002",89.5) || # text(0.16133779,0.20115409) || textangle=89.5 text={A72} box(0.16135752,0.20117652,81.586975",367.7002",89.5)|| # text(359.99712,0.32469933) || textangle=89.429076 text={G1} box(359.99712,0.32469933,163.33361",367.7002",89.429076) || # text(0.0028790655,-0.32469933) || textangle=89.429076 text={G2} box(0.0028790655,-0.32469933,163.33361",367.7002",89.429076) saods9/ds9/template/mmt/megacam/megacam-amp.tpl000644 000765 000000 00000020176 10271504030 021751 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.0 # Filename: /home/joye/templates/sao/megacam.fits[IM1] global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source wcs0;fk5 # composite(0,0,0) || point(0,0) || # point=boxcircle # text(359.83689,-0.19976359) || textangle=90 text={A1} box(359.83692,-0.19974141,81.586975",367.7002",90) || # text(359.83689,-0.17705651) || textangle=90 text={A2} box(359.83692,-0.17703433,81.586975",367.7002",90) || # text(359.83689,-0.15266411) || textangle=90 text={A3} box(359.83691,-0.15264196,81.586975",367.7002",90) || # text(359.83689,-0.12995693) || textangle=90 text={A4} box(359.83691,-0.12993478,81.586975",367.7002",90) || # text(359.8369,-0.10556443) || textangle=90 text={A5} box(359.83692,-0.10554228,81.586975",367.7002",90) || # text(359.83689,-0.082857155) || textangle=90 text={A6} box(359.83691,-0.082835001,81.586975",367.7002",90) || # text(359.8369,-0.058464655) || textangle=90 text={A7} box(359.83692,-0.058442401,81.586975",367.7002",90) || # text(359.8369,-0.035757276) || textangle=90 text={A8} box(359.83692,-0.035735122,81.586975",367.7002",90) || # text(359.83689,-0.011364703) || textangle=90 text={A9} box(359.83692,-0.011342522,81.586975",367.7002",90) || # text(359.83689,0.011342576) || textangle=90 text={A10} box(359.83692,0.011364757,81.586975",367.7002",90) || # text(359.83689,0.035735176) || textangle=90 text={A11} box(359.83691,0.03575733,81.586975",367.7002",90) || # text(359.83689,0.058442456) || textangle=90 text={A12} box(359.83691,0.05846461,81.586975",367.7002",90) || # text(359.8369,0.082835056) || textangle=90 text={A13} box(359.83692,0.08285721,81.586975",367.7002",90) || # text(359.83689,0.10554233) || textangle=90 text={A14} box(359.83691,0.10556449,81.586975",367.7002",90) || # text(359.8369,0.12993483) || textangle=90 text={A15} box(359.83692,0.12995699,81.586975",367.7002",90) || # text(359.8369,0.15264201) || textangle=90 text={A16} box(359.83692,0.15266417,81.586975",367.7002",90) || # text(359.83689,0.17703439) || textangle=90 text={A17} box(359.83691,0.17705654,81.586975",367.7002",90) || # text(359.83689,0.19974147) || textangle=90 text={A18} box(359.83692,0.19976365,81.586975",367.7002",90) || # text(359.94828,-0.19976436) || textangle=90 text={A19} box(359.94832,-0.19974215,81.586975",367.7002",90) || # text(359.94828,-0.17705718) || textangle=90 text={A20} box(359.94832,-0.17703497,81.586975",367.7002",90) || # text(359.94828,-0.15266468) || textangle=90 text={A21} box(359.94832,-0.15264247,81.586975",367.7002",90) || # text(359.94828,-0.1299574) || textangle=90 text={A22} box(359.94832,-0.12993529,81.586975",367.7002",90) || # text(359.94827,-0.10556483) || textangle=90 text={A23} box(359.94832,-0.10554269,81.586975",367.7002",90) || # text(359.94828,-0.082857522) || textangle=90 text={A24} box(359.94832,-0.082835313,81.586975",367.7002",90) || # text(359.94827,-0.05846485) || textangle=90 text={A25} box(359.94832,-0.058442613,81.586975",367.7002",90) || # text(359.94828,-0.035757443) || textangle=90 text={A26} box(359.94832,-0.035735333,81.586975",367.7002",90) || # text(359.94828,-0.01136477) || textangle=90 text={A27} box(359.94833,-0.011342533,81.586975",367.7002",90) || # text(359.94828,0.011342636) || textangle=90 text={A28} box(359.94832,0.011364846,81.586975",367.7002",90) || # text(359.94828,0.035735309) || textangle=90 text={A29} box(359.94833,0.035757546,81.586975",367.7002",90) || # text(359.94828,0.058442715) || textangle=90 text={A30} box(359.94832,0.058464925,81.586975",367.7002",90) || # text(359.94828,0.082835388) || textangle=90 text={A31} box(359.94833,0.082857525,81.586975",367.7002",90) || # text(359.94827,0.10554267) || textangle=90 text={A32} box(359.94832,0.1055649,81.586975",367.7002",90) || # text(359.94828,0.12993527) || textangle=90 text={A33} box(359.94833,0.1299575,81.586975",367.7002",90) || # text(359.94828,0.15264255) || textangle=90 text={A34} box(359.94833,0.15266468,81.586975",367.7002",90) || # text(359.94828,0.17703505) || textangle=90 text={A35} box(359.94833,0.17705728,81.586975",367.7002",90) || # text(359.94828,0.19974223) || textangle=90 text={A36} box(359.94833,0.19976436,81.586975",367.7002",90) || # text(0.051677255,-0.19976435) || textangle=90 text={A37} box(0.051707189,-0.19974217,81.586975",367.7002",90) || # text(0.051684011,-0.17705714) || textangle=90 text={A38} box(0.051703946,-0.17703499,81.586975",367.7002",90) || # text(0.051686072,-0.15266464) || textangle=90 text={A39} box(0.051706007,-0.15264249,81.586975",367.7002",90) || # text(0.051682828,-0.12995746) || textangle=90 text={A40} box(0.051702762,-0.12993531,81.586975",367.7002",90) || # text(0.051684887,-0.10556486) || textangle=90 text={A41} box(0.051704821,-0.10554261,81.586975",367.7002",90) || # text(0.05168164,-0.082857485) || textangle=90 text={A42} box(0.051701574,-0.082835329,81.586975",367.7002",90) || # text(0.051683696,-0.058464784) || textangle=90 text={A43} box(0.05170363,-0.058442629,81.586975",367.7002",90) || # text(0.051680447,-0.035757505) || textangle=90 text={A44} box(0.051700381,-0.03573525,81.586975",367.7002",90) || # text(0.051682501,-0.011364805) || textangle=90 text={A45} box(0.051702435,-0.011342549,81.586975",367.7002",90) || # text(0.05167925,0.011342574) || textangle=90 text={A46} box(0.051699184,0.01136483,81.586975",367.7002",90) || # text(0.051681302,0.035735274) || textangle=90 text={A47} box(0.051701235,0.03575753,81.586975",367.7002",90) || # text(0.051678048,0.058442653) || textangle=90 text={A48} box(0.051707979,0.058464837,81.586975",367.7002",90) || # text(0.051680098,0.082835354) || textangle=90 text={A49} box(0.051700031,0.082857509,81.586975",367.7002",90) || # text(0.051686839,0.10554266) || textangle=90 text={A50} box(0.051706772,0.10556492,81.586975",367.7002",90) || # text(0.051678889,0.12993533) || textangle=90 text={A51} box(0.051708819,0.12995752,81.586975",367.7002",90) || # text(0.051685628,0.15264254) || textangle=90 text={A52} box(0.051705561,0.1526647,81.586975",367.7002",90) || # text(0.051677676,0.17703501) || textangle=90 text={A53} box(0.051707605,0.1770572,81.586975",367.7002",90) || # text(0.051684413,0.19974222) || textangle=90 text={A54} box(0.051704345,0.19976437,81.586975",367.7002",90) || # text(0.16309024,-0.19976357) || textangle=90 text={A55} box(0.16311018,-0.19974141,81.586975",367.7002",90) || # text(0.16308605,-0.17705659) || textangle=90 text={A56} box(0.16311598,-0.17703431,81.586975",367.7002",90) || # text(0.16308709,-0.15266409) || textangle=90 text={A57} box(0.16310702,-0.15264193,81.586975",367.7002",90) || # text(0.16309289,-0.12995698) || textangle=90 text={A58} box(0.16311283,-0.12993483,81.586975",367.7002",90) || # text(0.16309393,-0.10556448) || textangle=90 text={A59} box(0.16311386,-0.10554223,81.586975",367.7002",90) || # text(0.16308973,-0.082857204) || textangle=90 text={A60} box(0.16310967,-0.082835048,81.586975",367.7002",90) || # text(0.16309077,-0.058464604) || textangle=90 text={A61} box(0.1631107,-0.058442447,81.586975",367.7002",90) || # text(0.16308657,-0.035757325) || textangle=90 text={A62} box(0.1631165,-0.03573514,81.586975",367.7002",90) || # text(0.1630876,-0.011364725) || textangle=90 text={A63} box(0.16310754,-0.011342568,81.586975",367.7002",90) || # text(0.1630934,0.011342583) || textangle=90 text={A64} box(0.16311333,0.011364739,81.586975",367.7002",90) || # text(0.16309443,0.035735183) || textangle=90 text={A65} box(0.16311436,0.035757339,81.586975",367.7002",90) || # text(0.16309023,0.058442462) || textangle=90 text={A66} box(0.16311016,0.058464618,81.586975",367.7002",90) || # text(0.16309125,0.082835062) || textangle=90 text={A67} box(0.16311119,0.082857219,81.586975",367.7002",90) || # text(0.16308705,0.10554234) || textangle=90 text={A68} box(0.16310698,0.1055645,81.586975",367.7002",90) || # text(0.16308807,0.12993484) || textangle=90 text={A69} box(0.16310801,0.129957,81.586975",367.7002",90) || # text(0.16309386,0.15264205) || textangle=90 text={A70} box(0.1631138,0.1526642,81.586975",367.7002",90) || # text(0.16308489,0.17703442) || textangle=90 text={A71} box(0.16311482,0.17705661,81.586975",367.7002",90) || # text(0.16309068,0.19974143) || textangle=90 text={A72} box(0.16311061,0.19976368,81.586975",367.7002",90) saods9/ds9/template/mmt/megacam/megacam-chip-guide.tpl000644 000765 000000 00000011655 11075735605 023235 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.0 # Filename: /tmp/dss1224085352034269.fits.gz global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source wcs0;fk5 # composite(0,0,0) || composite=1 point(0,0) || # point=boxcircle # text(359.83879,-0.19000008) || textangle=89.429076 text={C1} box(359.83881,-0.19002199,163.33361",367.7002",89.429076) || # text(359.83831,-0.14290288) || textangle=89.429076 text={C2} box(359.83833,-0.14292488,163.33361",367.7002",89.429076) || # text(359.83784,-0.095805501) || textangle=89.429076 text={C3} box(359.83787,-0.095827401,163.33361",367.7002",89.429076) || # text(359.83737,-0.048708098) || textangle=89.429076 text={C4} box(359.83739,-0.048729996,163.33361",367.7002",89.429076) || # text(359.8369,-0.0016104951) || textangle=89.429076 text={C5} box(359.83692,-0.0016323935,163.33361",367.7002",89.429076) || # text(359.83644,0.045487183) || textangle=89.429076 text={C6} box(359.83646,0.045465284,163.33361",367.7002",89.429076) || # text(359.83596,0.092584587) || textangle=89.429076 text={C7} box(359.83598,0.09256259,163.33361",367.7002",89.429076) || # text(359.8355,0.13968217) || textangle=89.429076 text={C8} box(359.83551,0.13966,163.33361",367.7002",89.429076) || # text(359.83503,0.18677928) || textangle=89.429076 text={C9} box(359.83505,0.18675738,163.33361",367.7002",89.429076) || # text(359.95017,-0.1888932) || textangle=89.429076 text={C10} box(359.9502,-0.188915,163.33361",367.7002",89.429076) || # text(359.94969,-0.1417959) || textangle=89.429076 text={C11} box(359.94971,-0.1418178,163.33361",367.7002",89.429076) || # text(359.94922,-0.094698394) || textangle=89.429076 text={C12} box(359.94924,-0.094720293,163.33361",367.7002",89.429076) || # text(359.94875,-0.047600518) || textangle=89.429076 text={C13} box(359.94878,-0.047622515,163.33361",367.7002",89.429076) || # text(359.94828,-0.00050291415) || textangle=89.429076 text={C14} box(359.9483,-0.00052481167,163.33361",367.7002",89.429076) || # text(359.94781,0.046594788) || textangle=89.429076 text={C15} box(359.94783,0.046572792,163.33361",367.7002",89.429076) || # text(359.94734,0.093692567) || textangle=89.429076 text={C16} box(359.94736,0.09367067,163.33361",367.7002",89.429076) || # text(359.94687,0.14079007) || textangle=89.429076 text={C17} box(359.94689,0.14076818,163.33361",367.7002",89.429076) || # text(359.94642,0.18788765) || textangle=89.429076 text={C18} box(359.94644,0.18786575,163.33361",367.7002",89.429076) || # text(0.053560184,-0.18786505) || textangle=89.429076 text={C19} box(0.053590399,-0.18788685,163.33361",367.7002",89.429076) || # text(0.053088973,-0.14076769) || textangle=89.429076 text={C20} box(0.053119188,-0.1407895,163.33361",367.7002",89.429076) || # text(0.052617761,-0.093670143) || textangle=89.429076 text={C21} box(0.052647975,-0.093691943,163.33361",367.7002",89.429076) || # text(0.052156546,-0.046572288) || textangle=89.429076 text={C22} box(0.052176763,-0.046594288,163.33361",367.7002",89.429076) || # text(0.051685335,0.00052536623) || textangle=89.429076 text={C23} box(0.051705551,0.00050346653,163.33361",367.7002",89.429076) || # text(0.051214124,0.047623121) || textangle=89.429076 text={C24} box(0.05123434,0.047601121,163.33361",367.7002",89.429076) || # text(0.050742913,0.094720775) || textangle=89.429076 text={C25} box(0.050763127,0.094698876,163.33361",367.7002",89.429076) || # text(0.0502717,0.14181833) || textangle=89.429076 text={C26} box(0.050291915,0.14179643,163.33361",367.7002",89.429076) || # text(0.049800489,0.18891568) || textangle=89.429076 text={C27} box(0.049820703,0.18889379,163.33361",367.7002",89.429076) || # text(0.1649667,-0.18675652) || textangle=89.429076 text={C28} box(0.16498692,-0.18677841,163.33361",367.7002",89.429076) || # text(0.16449352,-0.13965928) || textangle=89.429076 text={C29} box(0.16451373,-0.13968127,163.33361",367.7002",89.429076) || # text(0.16402034,-0.092561943) || textangle=89.429076 text={C30} box(0.16405055,-0.092583842,163.33361",367.7002",89.429076) || # text(0.16355716,-0.045464409) || textangle=89.429076 text={C31} box(0.16357738,-0.045486307,163.33361",367.7002",89.429076) || # text(0.16308398,0.001633126) || textangle=89.429076 text={C32} box(0.16310419,0.0016112271,163.33361",367.7002",89.429076) || # text(0.16261079,0.04873076) || textangle=89.429076 text={C33} box(0.16264101,0.048708862,163.33361",367.7002",89.429076) || # text(0.16214762,0.095828296) || textangle=89.429076 text={C34} box(0.16216783,0.095806296,163.33361",367.7002",89.429076) || # text(0.16167444,0.14292563) || textangle=89.429076 text={C35} box(0.16169464,0.14290364,163.33361",367.7002",89.429076) || # text(0.16120125,0.19002276) || textangle=89.429076 text={C36} box(0.16122147,0.19000087,163.33361",367.7002",89.429076) || # text(359.9993,0.32469933) || textangle=89.429076 text={G1} box(359.9993,0.32469933,163.33361",364",89.429076) || # text(0.0007,-0.32469933) || textangle=89.429076 text={G2} box(0.0007,-0.32469933,163.33361",364",89.429076) saods9/ds9/template/mmt/megacam/megacam-chip.tpl000644 000765 000000 00000010270 10271504030 022111 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.0 # Filename: /home/joye/templates/sao/megacam.fits[IM1] global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source wcs0;fk5 # composite(0,0,0) || point(0,0) || # point=boxcircle # text(359.8369,-0.1883876) || textangle=90 text={C1} box(359.83692,-0.18840971,163.33361",367.7002",90) || # text(359.8369,-0.141288) || textangle=90 text={C2} box(359.83692,-0.14131021,163.33361",367.7002",90) || # text(359.83689,-0.094188304) || textangle=90 text={C3} box(359.83692,-0.094210505,163.33361",367.7002",90) || # text(359.83689,-0.047088504) || textangle=90 text={C4} box(359.83691,-0.047110605,163.33361",367.7002",90) || # text(359.8369,1.1396249e-05) || textangle=90 text={C5} box(359.83692,-1.0704976e-05,163.33361",367.7002",90) || # text(359.8369,0.047111296) || textangle=90 text={C6} box(359.83692,0.047089195,163.33361",367.7002",90) || # text(359.83689,0.094211197) || textangle=90 text={C7} box(359.83691,0.094188996,163.33361",367.7002",90) || # text(359.8369,0.1413109) || textangle=90 text={C8} box(359.83692,0.1412887,163.33361",367.7002",90) || # text(359.8369,0.1884104) || textangle=90 text={C9} box(359.83692,0.1883883,163.33361",367.7002",90) || # text(359.94828,-0.1883883) || textangle=90 text={C10} box(359.94831,-0.1884104,163.33361",367.7002",90) || # text(359.94828,-0.1412886) || textangle=90 text={C11} box(359.9483,-0.1413107,163.33361",367.7002",90) || # text(359.94828,-0.0941887) || textangle=90 text={C12} box(359.9483,-0.094210801,163.33361",367.7002",90) || # text(359.94828,-0.047088601) || textangle=90 text={C13} box(359.9483,-0.047110801,163.33361",367.7002",90) || # text(359.94828,1.1399465e-05) || textangle=90 text={C14} box(359.9483,-1.0700924e-05,163.33361",367.7002",90) || # text(359.94828,0.047111499) || textangle=90 text={C15} box(359.9483,0.047089299,163.33361",367.7002",90) || # text(359.94828,0.0942115) || textangle=90 text={C16} box(359.9483,0.094189399,163.33361",367.7002",90) || # text(359.94828,0.1413114) || textangle=90 text={C17} box(359.9483,0.1412893,163.33361",367.7002",90) || # text(359.94829,0.1884111) || textangle=90 text={C18} box(359.94831,0.188389,163.33361",367.7002",90) || # text(0.051681678,-0.1883883) || textangle=90 text={C19} box(0.051711674,-0.1884104,163.33361",367.7002",90) || # text(0.051680764,-0.1412886) || textangle=90 text={C20} box(0.051710759,-0.1413107,163.33361",367.7002",90) || # text(0.051679849,-0.094188702) || textangle=90 text={C21} box(0.051709844,-0.094210801,163.33361",367.7002",90) || # text(0.051688932,-0.047088601) || textangle=90 text={C22} box(0.051708928,-0.047110801,163.33361",367.7002",90) || # text(0.051688017,1.1398494e-05) || textangle=90 text={C23} box(0.051708013,-1.0701118e-05,163.33361",367.7002",90) || # text(0.051687103,0.047111498) || textangle=90 text={C24} box(0.051707098,0.047089299,163.33361",367.7002",90) || # text(0.051686188,0.094211499) || textangle=90 text={C25} box(0.051706183,0.094189399,163.33361",367.7002",90) || # text(0.051685273,0.1413114) || textangle=90 text={C26} box(0.051705268,0.1412893,163.33361",367.7002",90) || # text(0.051684358,0.1884111) || textangle=90 text={C27} box(0.051704353,0.188389,163.33361",367.7002",90) || # text(0.16309374,-0.18838761) || textangle=90 text={C28} box(0.16311374,-0.1884097,163.33361",367.7002",90) || # text(0.16309085,-0.14128801) || textangle=90 text={C29} box(0.16311085,-0.1413102,163.33361",367.7002",90) || # text(0.16308797,-0.094188306) || textangle=90 text={C30} box(0.16311796,-0.094210504,163.33361",367.7002",90) || # text(0.16309508,-0.047088505) || textangle=90 text={C31} box(0.16311508,-0.047110604,163.33361",367.7002",90) || # text(0.16309219,1.1394411e-05) || textangle=90 text={C32} box(0.16311219,-1.0704364e-05,163.33361",367.7002",90) || # text(0.1630893,0.047111394) || textangle=90 text={C33} box(0.1631193,0.047089196,163.33361",367.7002",90) || # text(0.16309642,0.094211195) || textangle=90 text={C34} box(0.16311641,0.094188996,163.33361",367.7002",90) || # text(0.16309353,0.14131089) || textangle=90 text={C35} box(0.16311352,0.1412887,163.33361",367.7002",90) || # text(0.16309064,0.18841039) || textangle=90 text={C36} box(0.16311064,0.1883883,163.33361",367.7002",90) saods9/ds9/template/mmt/hecto/hectochelle.tpl000644 000765 000000 00000000351 10270004706 021570 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.0 global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source wcs0;fk5 # composite(0,0,0) || point(0,0) || # point=boxcircle circle(0,0,1800") saods9/ds9/template/mmt/hecto/hectospec.tpl000644 000765 000000 00000000351 10270004706 021266 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.0 global color=green font="helvetica 10 normal" select=1 highlite=1 edit=1 move=1 delete=1 include=1 fixed=0 source wcs0;fk5 # composite(0,0,0) || point(0,0) || # point=boxcircle circle(0,0,1800") saods9/ds9/template/heasarc/suzaku/000755 000765 000000 00000000000 13012655541 017630 5ustar00joyewheel000000 000000 saods9/ds9/template/heasarc/suzaku/hxd.tpl000644 000765 000000 00000001522 11476230566 021144 0ustar00joyewheel000000 000000 # Created with aemkreg version 6.1 with Euler angles (0, 90, 0) global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 wcs0;fk5 # composite(0,0,0) || composite=1 polygon( 0.563355, -0.621657,359.436645, -0.621657,359.436652, 0.504992, 0.563348, 0.504992) || #text={PIN (FULL)} polygon(360.000000, -0.340000,359.718333, -0.058333, 0.000000, 0.223333, 0.281667, -0.058333) || #text={PIN (FWHM)} polygon( 4.574921, -4.618431,355.425079, -4.618431,355.425574, 4.501888, 4.574426, 4.501888) || #text={GSO (FULL)} polygon(360.000000, -2.340833,357.717499, -0.058318, 0.000000, 2.224167, 2.282501, -0.058318) || #text={GSO (FWHM)} polygon( 0.008333, -0.066667,359.991667, -0.066667,359.991667, -0.050000, 0.008333, -0.050000) #text={HXD-nominal} saods9/ds9/template/heasarc/suzaku/xis.tpl000644 000765 000000 00000000553 11476230566 021167 0ustar00joyewheel000000 000000 # Created with aemkreg version 6.1 with Euler angles (0, 90, 0) global color=blue dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 wcs0;fk5 # composite(0,0,0) || composite=1 polygon( 0.150000, -0.150000,359.850000, -0.150000,359.850000, 0.150000, 0.150000, 0.150000) #text=XIS saods9/ds9/template/heasarc/suzaku/xrs.tpl000644 000765 000000 00000006742 11476230566 021206 0ustar00joyewheel000000 000000 # Created with aemkreg version 6.1 with Euler angles (0, 90, 0) global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 wcs0;fk5 # composite(0,0,0) || composite=1 polygon( 0.008047, 0.016399, 0.008047, 0.024344, 0.000102, 0.024344, 0.000102, 0.016399) || #text=XRS polygon( 0.008047, 0.008251, 0.008047, 0.016196, 0.000102, 0.016196, 0.000102, 0.008251) || #text=XRS polygon( 0.024344, 0.008251, 0.024344, 0.016196, 0.016399, 0.016196, 0.016399, 0.008251) || #text=XRS polygon( 0.016196, 0.000102, 0.016196, 0.008047, 0.008251, 0.008047, 0.008251, 0.000102) || #text=XRS polygon( 0.024344, 0.000102, 0.024344, 0.008047, 0.016399, 0.008047, 0.016399, 0.000102) || #text=XRS polygon( 0.008047, 0.000102, 0.008047, 0.008047, 0.000102, 0.008047, 0.000102, 0.000102) || #text=XRS polygon( 0.008047, -0.008047, 0.008047, -0.000102, 0.000102, -0.000102, 0.000102, -0.008047) || #text=XRS polygon( 0.008047, -0.024344, 0.008047, -0.016399, 0.000102, -0.016399, 0.000102, -0.024344) || #text=XRS polygon( 0.008047, -0.016196, 0.008047, -0.008251, 0.000102, -0.008251, 0.000102, -0.016196) || #text=XRS polygon( 0.016196, -0.024344, 0.016196, -0.016399, 0.008251, -0.016399, 0.008251, -0.024344) || #text=XRS polygon( 0.016196, -0.016196, 0.016196, -0.008251, 0.008251, -0.008251, 0.008251, -0.016196) || #text=XRS polygon( 0.024344, -0.016196, 0.024344, -0.008251, 0.016399, -0.008251, 0.016399, -0.016196) || #text=XRS polygon( 0.016196, -0.008047, 0.016196, -0.000102, 0.008251, -0.000102, 0.008251, -0.008047) || #text=XRS polygon( 0.024344, -0.008047, 0.024344, -0.000102, 0.016399, -0.000102, 0.016399, -0.008047) || #text=XRS polygon(359.999898, -0.024344,359.999898, -0.016399,359.991953, -0.016399,359.991953, -0.024344) || #text=XRS polygon(359.999898, -0.016196,359.999898, -0.008251,359.991953, -0.008251,359.991953, -0.016196) || #text=XRS polygon(359.991749, -0.024344,359.991749, -0.016399,359.983804, -0.016399,359.983804, -0.024344) || #text=XRS polygon(359.991749, -0.016196,359.991749, -0.008251,359.983804, -0.008251,359.983804, -0.016196) || #text=XRS polygon(359.983601, -0.016196,359.983601, -0.008251,359.975656, -0.008251,359.975656, -0.016196) || #text=XRS polygon(359.991749, -0.008047,359.991749, -0.000102,359.983804, -0.000102,359.983804, -0.008047) || #text=XRS polygon(359.983601, -0.008047,359.983601, -0.000102,359.975656, -0.000102,359.975656, -0.008047) || #text=XRS polygon(359.999898, -0.008047,359.999898, -0.000102,359.991953, -0.000102,359.991953, -0.008047) || #text=XRS polygon(359.999898, 0.000102,359.999898, 0.008047,359.991953, 0.008047,359.991953, 0.000102) || #text=XRS polygon(359.999898, 0.016399,359.999898, 0.024344,359.991953, 0.024344,359.991953, 0.016399) || #text=XRS polygon(359.999898, 0.008251,359.999898, 0.016196,359.991953, 0.016196,359.991953, 0.008251) || #text=XRS polygon(359.991749, 0.016399,359.991749, 0.024344,359.983804, 0.024344,359.983804, 0.016399) || #text=XRS polygon(359.991749, 0.008251,359.991749, 0.016196,359.983804, 0.016196,359.983804, 0.008251) || #text=XRS polygon(359.983601, 0.008251,359.983601, 0.016196,359.975656, 0.016196,359.975656, 0.008251) || #text=XRS polygon(359.991749, 0.000102,359.991749, 0.008047,359.983804, 0.008047,359.983804, 0.000102) || #text=XRS polygon(359.983601, 0.000102,359.983601, 0.008047,359.975656, 0.008047,359.975656, 0.000102) #text=XRS saods9/ds9/template/chandra/acis/000755 000765 000000 00000000000 13012655541 017217 5ustar00joyewheel000000 000000 saods9/ds9/template/chandra/hrc/000755 000765 000000 00000000000 13012655541 017054 5ustar00joyewheel000000 000000 saods9/ds9/template/chandra/hrc/hrc-i.tpl000644 000765 000000 00000001673 11446443665 020621 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.1 # Filename: /tmp/ds9sao26241407288736.fits.gz global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 wcs0;fk5 # composite(0,0,359.45114) || composite=0 point(359.99932,0.0042101979) || # point=boxcircle color=blue point(0.00069740655,0.0082266505) || # point=boxcircle box(0.00069740655,0.0082266505,40",40",0.0074458119) || # color=red line(0.00069392696,-0.01677324,0.00070029419,0.033226372) || # line=0 0 color=red line(359.9757,0.0082303192,0.025697186,0.0082236331) || # line=0 0 color=red # text(0.0060229964,-0.071730321) || textangle=359.45857 color=blue text={I0} polygon(359.99635,-0.35905082,359.63404,0.0033523352,359.99665,0.36586903,0.35895968,0.0034650549) || # color=blue polygon(359.99531,-0.3931907,359.57097,0.031258645,359.99542,0.45559694,0.4197573,0.031147222) # color=blue dashlist=12 4 background saods9/ds9/template/chandra/hrc/hrc-s.tpl000644 000765 000000 00000003767 11446443665 020641 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.1 # Filename: /tmp/ds9sao26241407288736.fits.gz global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 wcs0;fk5 # composite(0,0,359.45114) || composite=0 point(0.014345364,-0.0013056111) || # point=boxcircle color=blue point(0.016219966,0.0012246581) || # point=boxcircle box(0.016219966,0.0012246581,40",40",0.0074458106) || # color=red line(0.016216487,-0.023775231,0.016222854,0.02622438) || # line=0 0 color=red line(359.99122,0.0012283276,0.041219741,0.0012216413) || # line=0 0 color=red # text(359.38538,0.0030653744) || textangle=359.45857 color=blue text={S1} polygon(359.14343,0.056577828,359.14354,-0.050535114,359.68674,-0.049942976,359.68662,0.057169491) || # color=blue line(359.14351,-0.019991269,359.6867,-0.019398968) || # line=0 0 color=blue polygon(359.08396,0.077760121,359.08412,-0.072286681,359.6868,-0.071629351,359.68663,0.078416884) || # color=blue background # text(359.98814,0.0037220871) || textangle=359.45857 color=blue text={S2} polygon(359.70851,0.057193071,359.70863,-0.049919757,0.27053203,-0.049307389,0.27041232,0.057805635) || # color=blue line(359.7086,-0.019374933,359.92699,-0.019136806) || # line=0 0 color=blue line(359.92699,-0.019136806,359.9269,0.057431375) || # line=0 0 color=blue line(0.10661832,0.057626818,0.1067037,-0.01894101) || # line=0 0 color=blue line(0.1067037,-0.01894101,0.27049777,-0.018762924) || # line=0 0 color=blue polygon(359.68663,0.078416884,359.6868,-0.071629351,0.28965388,-0.070972867,0.28948516,0.079073122) || # color=blue background # text(0.59092858,0.0043780574) || textangle=359.45857 color=blue text={S3} polygon(0.29539512,0.057832417,0.29551495,-0.049280661,0.8367598,-0.048690494,0.83664301,0.058421797) || # color=blue line(0.29548067,-0.018735466,0.83672616,-0.018146798) || # line=0 0 color=blue polygon(0.28948516,0.079073122,0.28965388,-0.070972867,0.89236821,-0.070316746,0.89220504,0.079728383) # color=blue background saods9/ds9/template/chandra/acis/acis-i.tpl000644 000765 000000 00000002571 11446443664 021124 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.1 # Filename: /tmp/ds9sao26241407288736.fits.gz global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 wcs0;fk5 # composite(0,0,359.45114) || composite=0 point(359.99565,0.0059387181) || # point=boxcircle color=blue point(359.99369,0.0057314379) || # point=boxcircle box(359.99369,0.0057314379,16",16",0.0074458093) || # color=red line(359.99369,-0.019268453,359.9937,0.03073116) || # line=0 0 color=red line(359.96869,0.0057351065,0.018691898,0.0057284211) || # line=0 0 color=red # text(0.074983471,-0.07503056) || textangle=359.45857 color=blue text={I0} polygon(0.14468917,-0.14493171,0.14506091,-0.0051482778,0.0052770566,-0.0051292868,0.0049055019,-0.14491342) || # color=blue # text(359.93236,-0.075069338) || textangle=359.45857 color=blue text={I1} polygon(359.86231,-0.0051675813,359.86264,-0.14495208,0.0024209693,-0.14496979,0.0020857765,-0.0051863415) || # color=blue # text(0.075029991,0.0678101) || textangle=359.45857 color=blue text={I2} polygon(0.14508996,-0.0020934155,0.14475484,0.13769617,0.0049709953,0.13771371,0.0053064433,-0.0020753216) || # color=blue # text(359.93241,0.067857426) || textangle=359.45857 color=blue text={I3} polygon(359.86271,0.13776073,359.86234,-0.0020285164,0.0021152286,-0.0020463747,0.0024869566,0.13774255) # color=blue saods9/ds9/template/chandra/acis/acis-is.tpl000644 000765 000000 00000005025 11446443664 021304 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.1 # Filename: /tmp/ds9sao26241407288736.fits.gz global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 wcs0;fk5 # composite(0,0,359.45114) || composite=0 point(359.9814,-0.1158516) || # point=boxcircle color=blue point(359.97944,-0.11605888) || # point=boxcircle box(359.97944,-0.11605888,16",16",0.0074458169) || # color=red line(359.97944,-0.14105864,359.97944,-0.091059238) || # line=0 0 color=red line(359.95444,-0.11605518,0.0044416507,-0.1160619) || # line=0 0 color=red # text(0.060733243,-0.19682027) || textangle=359.45857 color=blue text={I0} polygon(0.13043901,-0.26672034,0.13081075,-0.12693824,359.99103,-0.12691956,359.99066,-0.26670229) || # color=blue # text(359.91811,-0.19685894) || textangle=359.45857 color=blue text={I1} polygon(359.84806,-0.12695743,359.84839,-0.26674043,359.98817,-0.26675865,359.98784,-0.12697661) || # color=blue # text(0.060779763,-0.053980247) || textangle=359.45857 color=blue text={I2} polygon(0.13083979,-0.12388339,0.13050467,0.015906345,359.99072,0.015923489,359.99106,-0.12386561) || # color=blue # text(359.91816,-0.053932908) || textangle=359.45857 color=blue text={I3} polygon(359.84846,0.015970851,359.84809,-0.12381838,359.98786,-0.12383666,359.98824,0.015952329) || # color=blue # text(0.37184311,0.1320915) || textangle=359.45857 color=blue text={S0} polygon(0.44178599,0.20209913,0.30184873,0.20204633,0.30189968,0.062083348,0.4418371,0.062137092) || # color=blue dashlist=12 4 background # text(0.22927653,0.13201944) || textangle=359.45857 color=blue text={S1} polygon(0.2991992,0.20204725,0.15925574,0.2019529,0.15935471,0.061990276,0.29929739,0.062090227) || # color=blue dashlist=12 4 background # text(0.086742871,0.13196478) || textangle=359.45857 color=blue text={S2} polygon(0.15667073,0.20199168,0.016716491,0.20189768,0.016814458,0.061935721,0.15676886,0.062034932) || # color=blue # text(359.94399,0.13190556) || textangle=359.45857 color=blue text={S3} polygon(0.013935284,0.20191224,359.87399,0.20185577,359.87404,0.061899917,0.013991488,0.061955169) || # color=blue # text(359.8016,0.13185239) || textangle=359.45857 color=blue text={S4} polygon(359.87155,0.20185484,359.7316,0.2018065,359.73165,0.061850174,359.8716,0.061898904) || # color=blue dashlist=12 4 background # text(359.65917,0.13179423) || textangle=359.45857 color=blue text={S5} polygon(359.72912,0.20179225,359.58918,0.20175502,359.58922,0.061799638,359.72916,0.061830852) # color=blue dashlist=12 4 background saods9/ds9/template/chandra/acis/acis-s.tpl000644 000765 000000 00000003373 11446443664 021137 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.1 # Filename: /tmp/ds9sao26241407288736.fits.gz global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 wcs0;fk5 # composite(0,0,359.45114) || composite=0 point(359.97589,-0.00023858801) || # point=boxcircle color=blue point(359.97739,-0.00030415722) || # point=boxcircle box(359.97739,-0.00030415722,16",16",0.0074458058) || # color=red line(359.97738,-0.025304045,359.97739,0.024695564) || # line=0 0 color=red line(359.95239,-0.00030048775,0.0023881862,-0.00030717384) || # line=0 0 color=red # text(0.36595192,0.00027268306) || textangle=359.45857 color=blue text={S0} polygon(0.4358959,0.070278402,0.29595769,0.070227238,0.29600903,-0.069733324,0.4359469,-0.069682246) || # color=blue # text(0.22338589,0.00020314963) || textangle=359.45857 color=blue text={S1} polygon(0.29330794,0.070228032,0.1533645,0.070135307,0.15346356,-0.069824861,0.29340664,-0.069726563) || # color=blue # text(0.080851968,0.00014900597) || textangle=359.45857 color=blue text={S2} polygon(0.15078032,0.070173966,0.010825204,0.070081577,0.01092379,-0.06987889,0.15087857,-0.069781319) || # color=blue # text(359.9381,8.9273906e-05) || textangle=359.45857 color=blue text={S3} polygon(0.0080444743,0.070095011,359.8681,0.070039132,359.86815,-0.069915191,0.0081003229,-0.069859569) || # color=blue # text(359.79571,3.6603168e-05) || textangle=359.45857 color=blue text={S4} polygon(359.86566,0.070038097,359.72571,0.069988331,359.72576,-0.069965427,359.86571,-0.069916317) || # color=blue # text(359.65328,-2.3084464e-05) || textangle=359.45857 color=blue text={S5} polygon(359.72323,0.069974963,359.58329,0.069936296,359.58333,-0.070018472,359.72327,-0.069984864) # color=blue saods9/ds9/template/chandra/acis/acis-si.tpl000644 000765 000000 00000005035 11446443664 021305 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.1 # Filename: /tmp/ds9sao26241407288736.fits.gz global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 wcs0;fk5 # composite(0,0,359.45114) || composite=0 point(359.98115,0.082070413) || # point=boxcircle color=blue point(359.98265,0.082004845) || # point=boxcircle box(359.98265,0.082004845,16",16",0.0074458153) || # color=red line(359.98265,0.057004991,359.98265,0.1070045) || # line=0 0 color=red line(359.95765,0.082008495,0.0076502475,0.082001831) || # line=0 0 color=red # text(0.060103564,-0.24632926) || textangle=359.45857 color=blue text={I0} polygon(0.12980967,-0.3162311,0.13018093,-0.17644548,359.9904,-0.17642695,359.99003,-0.31621219) || # color=blue # text(359.91749,-0.24636747) || textangle=359.45857 color=blue text={I1} polygon(359.84743,-0.17646563,359.84776,-0.31625111,359.98754,-0.31626967,359.98721,-0.17648316) || # color=blue # text(0.060150801,-0.1034866) || textangle=359.45857 color=blue text={I2} polygon(0.13021067,-0.17339142,0.12987474,-0.033600335,359.99009,-0.033582341,359.99043,-0.17337279) || # color=blue # text(359.91753,-0.10343879) || textangle=359.45857 color=blue text={I3} polygon(359.84783,-0.033535754,359.84746,-0.17332537,359.98724,-0.17334399,359.98761,-0.033553613) || # color=blue # text(0.37121376,0.08257996) || textangle=359.45857 color=blue text={S0} polygon(0.44115766,0.15258465,0.30121961,0.1525348,0.30127095,0.012574598,0.44120866,0.012624389) || # color=blue dashlist=12 4 background # text(0.22864787,0.082511499) || textangle=359.45857 color=blue text={S1} polygon(0.29856987,0.15253562,0.15862653,0.15244371,0.15872558,0.012483867,0.29866856,0.012581379) || # color=blue dashlist=12 4 background # text(0.086114019,0.082457918) || textangle=359.45857 color=blue text={S2} polygon(0.15604234,0.15248238,0.016087265,0.15239031,0.016185851,0.012430134,0.15614059,0.01252742) || # color=blue # text(359.94336,0.082398238) || textangle=359.45857 color=blue text={S3} polygon(0.013306535,0.15240374,359.87336,0.15234768,359.87341,0.01239362,0.013362384,0.012449456) || # color=blue # text(359.80097,0.082345111) || textangle=359.45857 color=blue text={S4} polygon(359.87092,0.15234664,359.73097,0.15229619,359.73102,0.012342662,359.87097,0.012392486) || # color=blue dashlist=12 4 background # text(359.65854,0.082284459) || textangle=359.45857 color=blue text={S5} polygon(359.7285,0.15228281,359.58855,0.15224296,359.58859,0.012288386,359.72853,0.012323208) # color=blue dashlist=12 4 background saods9/ds9/msgs/cs.msg000644 000765 000000 00000134561 12741217134 015165 0ustar00joyewheel000000 000000 ::msgcat::mcset cs {2D} ::msgcat::mcset cs {3D} ::msgcat::mcset cs {A postscript generation error has occurred} [encoding convertfrom iso8859-2 {Chyba pøi generování postscriptu}] ::msgcat::mcset cs {AIP} ::msgcat::mcset cs {Abort} [encoding convertfrom iso8859-2 {Pøeru¹it}] ::msgcat::mcset cs {About SAOImage DS9} [encoding convertfrom iso8859-2 {O programu SAOImage DS9}] ::msgcat::mcset cs {About} [encoding convertfrom iso8859-2 {O programu}] ::msgcat::mcset cs {Acknowledgment} [encoding convertfrom iso8859-2 {Podìkování}] ::msgcat::mcset cs {Add} [encoding convertfrom iso8859-2 {Pøidat}] ::msgcat::mcset cs {Advanced} [encoding convertfrom iso8859-2 {Dal¹í nastavení}] ::msgcat::mcset cs {Aligned} ::msgcat::mcset cs {Align} [encoding convertfrom iso8859-2 {Zarovnat}] ::msgcat::mcset cs {All Columns} [encoding convertfrom iso8859-2 {V¹echny sloupce}] ::msgcat::mcset cs {All Rows} [encoding convertfrom iso8859-2 {V¹echny øádky}] ::msgcat::mcset cs {All} [encoding convertfrom iso8859-2 {V¹e}] ::msgcat::mcset cs {Always save files during Backup} [encoding convertfrom iso8859-2 {V¾dy ulo¾it soubory pøi zálohování}] ::msgcat::mcset cs {Amplifier} [encoding convertfrom iso8859-2 {Zesilovaè}] ::msgcat::mcset cs {An error has occurred during backup} [encoding convertfrom iso8859-2 {Chyba pøi poøizování zálohy}] ::msgcat::mcset cs {An error has occurred during restore} [encoding convertfrom iso8859-2 {Chyba pøi obnovì zálohy}] ::msgcat::mcset cs {An error has occurred invoking the Analysis task} [encoding convertfrom iso8859-2 {Chyba pøi spou¹tìní Analýzy}] ::msgcat::mcset cs {An error has occurred while creating image.} [encoding convertfrom iso8859-2 {Chyba pøi vytváøení obrázku.}] ::msgcat::mcset cs {An error has occurred while creating the image. Please be sure that the ds9 window is in the upper left corner of the default screen and the entire window is visible.} [encoding convertfrom iso8859-2 {Chyba pøi vytváøení obrázku. Prosím ujistìte se ¾e okno s DS9tkou je ve vrchním levém rohu výchozí obrazovky a ¾e je celé viditelné.}] ::msgcat::mcset cs {An error has occurred while creating the image. Please be sure that the entire image window is visible on the screen.} [encoding convertfrom iso8859-2 {Chyba pøi vytváøení obrázku. Prosím ujistìte se na obrazovce je zobrazené celé okno s obrázkem}] ::msgcat::mcset cs {An error has occurred while printing} [encoding convertfrom iso8859-2 {Pøi tisku se vyskytla chyba}] ::msgcat::mcset cs {An error has occurred while reading image.} [encoding convertfrom iso8859-2 {Chyba pøi ètení obrázku.}] ::msgcat::mcset cs {An error has occurred while saving} [encoding convertfrom iso8859-2 {Chyba pøi ukládání souboru}] ::msgcat::mcset cs {An error has occurred while updating VO server list} ::msgcat::mcset cs {An error has occurred while writing image.} ::msgcat::mcset cs {An internal error has been detected} [encoding convertfrom iso8859-2 {Byla detekována vnitøní chyba programu}] ::msgcat::mcset cs {Analysis Command Log} [encoding convertfrom iso8859-2 {Poøizovat záznam analytických pøíkazù}] ::msgcat::mcset cs {Analysis Commands} [encoding convertfrom iso8859-2 {Analytické pøíkazy}] ::msgcat::mcset cs {Analysis File} [encoding convertfrom iso8859-2 {Analytický soubor}] ::msgcat::mcset cs {Analysis Log} [encoding convertfrom iso8859-2 {Záznam èinnosti analytický pøíkazù}] ::msgcat::mcset cs {Analysis} [encoding convertfrom iso8859-2 {Analýza}] ::msgcat::mcset cs {Angle Complement} [encoding convertfrom iso8859-2 {Doplnìk úhlu}] ::msgcat::mcset cs {Angles} [encoding convertfrom iso8859-2 {Úhly}] ::msgcat::mcset cs {Angle} [encoding convertfrom iso8859-2 {Úhel}] ::msgcat::mcset cs {Annuli} [encoding convertfrom iso8859-2 {Kruhù}] ::msgcat::mcset cs {Annulus} [encoding convertfrom iso8859-2 {Kruh}] ::msgcat::mcset cs {Apply} [encoding convertfrom iso8859-2 {Pou¾ít}] ::msgcat::mcset cs {ArcMin} [encoding convertfrom iso8859-2 {úhlových minut}] ::msgcat::mcset cs {ArcSec} [encoding convertfrom iso8859-2 {úhlových sekund}] ::msgcat::mcset cs {Architecture} [encoding convertfrom iso8859-2 {Architektura}] ::msgcat::mcset cs {Archives} ::msgcat::mcset cs {Array} ::msgcat::mcset cs {Arrow} [encoding convertfrom iso8859-2 {©ipka}] ::msgcat::mcset cs {Astronomy} [encoding convertfrom iso8859-2 {Astronomie}] ::msgcat::mcset cs {At Startup} [encoding convertfrom iso8859-2 {Pøi spu¹tìní}] ::msgcat::mcset cs {At least 2 different catalogs are required} ::msgcat::mcset cs {Auto Centroid} [encoding convertfrom iso8859-2 {Automatické centrování}] ::msgcat::mcset cs {Auto Plot 2D} [encoding convertfrom iso8859-2 {Automatický 2D graf}] ::msgcat::mcset cs {Auto Plot 3D} [encoding convertfrom iso8859-2 {Automatický 3D graf}] ::msgcat::mcset cs {Auto Plot Statistics} ::msgcat::mcset cs {Auto Plot} [encoding convertfrom iso8859-2 {Automatický graf}] ::msgcat::mcset cs {Autoload FITS Regions} [encoding convertfrom iso8859-2 {Automaticky nahrát FITS oblasti}] ::msgcat::mcset cs {Autoload} [encoding convertfrom iso8859-2 {Automatické nahrávání}] ::msgcat::mcset cs {Automatic} [encoding convertfrom iso8859-2 {Automatické}] ::msgcat::mcset cs {Average} [encoding convertfrom iso8859-2 {Prùmìr}] ::msgcat::mcset cs {Axes Number} ::msgcat::mcset cs {Axes Order} ::msgcat::mcset cs {Axes Title} ::msgcat::mcset cs {Axes} [encoding convertfrom iso8859-2 {Osy}] ::msgcat::mcset cs {Axis Length} [encoding convertfrom iso8859-2 {Délka osy}] ::msgcat::mcset cs {Axis Numbers} [encoding convertfrom iso8859-2 {Èíslování osy}] ::msgcat::mcset cs {Axis Title} ::msgcat::mcset cs {Axis} [encoding convertfrom iso8859-2 {Osy}] ::msgcat::mcset cs {Azimuth} [encoding convertfrom iso8859-2 {Azimut}] ::msgcat::mcset cs {Background Color} [encoding convertfrom iso8859-2 {Barva pozadí}] ::msgcat::mcset cs {Background} [encoding convertfrom iso8859-2 {Pozadí}] ::msgcat::mcset cs {Backup} [encoding convertfrom iso8859-2 {Záloha}] ::msgcat::mcset cs {Back} [encoding convertfrom iso8859-2 {Zpìt}] ::msgcat::mcset cs {Bar Plot Tool} ::msgcat::mcset cs {Bias} ::msgcat::mcset cs {Bin 3rd Column} [encoding convertfrom iso8859-2 {Binuj tøetí sloupec}] ::msgcat::mcset cs {Bin Center} [encoding convertfrom iso8859-2 {Binuj støed}] ::msgcat::mcset cs {Bin Columns} [encoding convertfrom iso8859-2 {Binuj sloupce}] ::msgcat::mcset cs {Bin Filter} [encoding convertfrom iso8859-2 {Filtr binování}] ::msgcat::mcset cs {Bin Fit} ::msgcat::mcset cs {Bin In} ::msgcat::mcset cs {Bin Out} ::msgcat::mcset cs {Binning Parameters} [encoding convertfrom iso8859-2 {Parametry binování}] ::msgcat::mcset cs {Bin} ::msgcat::mcset cs {Black} [encoding convertfrom iso8859-2 {Èerná}] ::msgcat::mcset cs {Blank/Inf/NaN Color} [encoding convertfrom iso8859-2 {Barva nedefinovaných pixelù}] ::msgcat::mcset cs {Blink Frames} [encoding convertfrom iso8859-2 {Problikávej snímky}] ::msgcat::mcset cs {Blink Interval} [encoding convertfrom iso8859-2 {Interval problikávání snímkù}] ::msgcat::mcset cs {Blink} [encoding convertfrom iso8859-2 {Problikávat}] ::msgcat::mcset cs {Block Fit} ::msgcat::mcset cs {Block In} [encoding convertfrom iso8859-2 {Zmen¹it}] ::msgcat::mcset cs {Block Out} [encoding convertfrom iso8859-2 {Zvìt¹it}] ::msgcat::mcset cs {Block Parameters} ::msgcat::mcset cs {Block} ::msgcat::mcset cs {Blue} [encoding convertfrom iso8859-2 {Modrá}] ::msgcat::mcset cs {Bold} [encoding convertfrom iso8859-2 {Tuènì}] ::msgcat::mcset cs {Border} [encoding convertfrom iso8859-2 {Okraj}] ::msgcat::mcset cs {Bottom} ::msgcat::mcset cs {Box Annulus} ::msgcat::mcset cs {Box Panda} ::msgcat::mcset cs {BoxCircle} ::msgcat::mcset cs {Boxcar} ::msgcat::mcset cs {Box} [encoding convertfrom iso8859-2 {Obdélník}] ::msgcat::mcset cs {Broadcast} ::msgcat::mcset cs {Browser} [encoding convertfrom iso8859-2 {Prohlí¾eè}] ::msgcat::mcset cs {Browse} [encoding convertfrom iso8859-2 {Prohlí¾et}] ::msgcat::mcset cs {Buffer} ::msgcat::mcset cs {Buttonbar} ::msgcat::mcset cs {Buttons} [encoding convertfrom iso8859-2 {Tlaèítka}] ::msgcat::mcset cs {Bytes} ::msgcat::mcset cs {CMYK} ::msgcat::mcset cs {Can Delete} ::msgcat::mcset cs {Can Edit} ::msgcat::mcset cs {Can Move} ::msgcat::mcset cs {Can Rotate} ::msgcat::mcset cs {Cancelled} ::msgcat::mcset cs {Cancel} [encoding convertfrom iso8859-2 {Zru¹it}] ::msgcat::mcset cs {Cap} ::msgcat::mcset cs {Catalog Server} [encoding convertfrom iso8859-2 {Katalogový server}] ::msgcat::mcset cs {Catalog Tool} [encoding convertfrom iso8859-2 {Katalogový nástroj}] ::msgcat::mcset cs {Catalogs} [encoding convertfrom iso8859-2 {Katalogy}] ::msgcat::mcset cs {Catalog} [encoding convertfrom iso8859-2 {Katalog}] ::msgcat::mcset cs {Catrom} ::msgcat::mcset cs {Cat} ::msgcat::mcset cs {Center Image} [encoding convertfrom iso8859-2 {Vycentruj obrázek}] ::msgcat::mcset cs {Center Non-modal Dialogs} ::msgcat::mcset cs {Center} [encoding convertfrom iso8859-2 {Støed}] ::msgcat::mcset cs {Centroid Parameters} [encoding convertfrom iso8859-2 {Parametry centroidu}] ::msgcat::mcset cs {Centroid} [encoding convertfrom iso8859-2 {Vystøedit}] ::msgcat::mcset cs {Circle} [encoding convertfrom iso8859-2 {Kru¾nice}] ::msgcat::mcset cs {Clear All} [encoding convertfrom iso8859-2 {Vyma¾ v¹e}] ::msgcat::mcset cs {Clear Analysis Commands} [encoding convertfrom iso8859-2 {Vyma¾ analytické pøíkazy}] ::msgcat::mcset cs {Clear Cache} ::msgcat::mcset cs {Clear Data} ::msgcat::mcset cs {Clear External Analysis Commands?} ::msgcat::mcset cs {Clear Filter} [encoding convertfrom iso8859-2 {Vynuluvoat filtr}] ::msgcat::mcset cs {Clear Frame} [encoding convertfrom iso8859-2 {Vyèistit snímek}] ::msgcat::mcset cs {Clear Preferences?} [encoding convertfrom iso8859-2 {Smazat nastavení?}] ::msgcat::mcset cs {Clear Preferences} [encoding convertfrom iso8859-2 {Smazat nastavení}] ::msgcat::mcset cs {Clear} [encoding convertfrom iso8859-2 {Vyèistit}] ::msgcat::mcset cs {Click to Center} [encoding convertfrom iso8859-2 {Klinout na centrování}] ::msgcat::mcset cs {Close} [encoding convertfrom iso8859-2 {Zavøít}] ::msgcat::mcset cs {Colorbar Size} [encoding convertfrom iso8859-2 {Velikost colorbaru}] ::msgcat::mcset cs {Colorbar} [encoding convertfrom iso8859-2 {©kálování barev}] ::msgcat::mcset cs {Colormap Parameters} ::msgcat::mcset cs {Colormap} ::msgcat::mcset cs {Color} [encoding convertfrom iso8859-2 {Barva}] ::msgcat::mcset cs {Columns} [encoding convertfrom iso8859-2 {Sloupce}] ::msgcat::mcset cs {Column} [encoding convertfrom iso8859-2 {Sploupec}] ::msgcat::mcset cs {Command not allowed} ::msgcat::mcset cs {Command} [encoding convertfrom iso8859-2 {Pøíkaz}] ::msgcat::mcset cs {Compass} [encoding convertfrom iso8859-2 {Kompas}] ::msgcat::mcset cs {Composite Region} [encoding convertfrom iso8859-2 {Spojit oblasti}] ::msgcat::mcset cs {Composite} ::msgcat::mcset cs {Compression} [encoding convertfrom iso8859-2 {Komprese}] ::msgcat::mcset cs {Configure} [encoding convertfrom iso8859-2 {Konfigurace}] ::msgcat::mcset cs {Connect Directly} ::msgcat::mcset cs {Connect SAMP} ::msgcat::mcset cs {Connect Using Web Proxy} ::msgcat::mcset cs {Connect} [encoding convertfrom iso8859-2 {Pøipoji}] ::msgcat::mcset cs {Console} ::msgcat::mcset cs {Contacting Image Server} ::msgcat::mcset cs {Contour Parameters} [encoding convertfrom iso8859-2 {Parametry obrysu}] ::msgcat::mcset cs {Contours} [encoding convertfrom iso8859-2 {Obrysy}] ::msgcat::mcset cs {Contour} [encoding convertfrom iso8859-2 {Obrys}] ::msgcat::mcset cs {Contrast} [encoding convertfrom iso8859-2 {Kontrast}] ::msgcat::mcset cs {Convert to Polygons} [encoding convertfrom iso8859-2 {Zmìnit na obdélníky}] ::msgcat::mcset cs {Coordinate Grid Parameters} [encoding convertfrom iso8859-2 {Nastavení møí¾ky}] ::msgcat::mcset cs {Coordinate Grid} [encoding convertfrom iso8859-2 {Møí¾ka}] ::msgcat::mcset cs {Coordinate System} [encoding convertfrom iso8859-2 {Systém koordinátù}] ::msgcat::mcset cs {Coordinates} [encoding convertfrom iso8859-2 {Koordináty}] ::msgcat::mcset cs {Coordinate} [encoding convertfrom iso8859-2 {Koordinát}] ::msgcat::mcset cs {Copy Contours} ::msgcat::mcset cs {Copy to Regions} [encoding convertfrom iso8859-2 {Kopíruj do oblastí}] ::msgcat::mcset cs {Copy} [encoding convertfrom iso8859-2 {Kopíruj}] ::msgcat::mcset cs {Create Movie} [encoding convertfrom iso8859-2 {Vytvoøit video}] ::msgcat::mcset cs {Create New Frame on Download} ::msgcat::mcset cs {Create} [encoding convertfrom iso8859-2 {Vytvoøit}] ::msgcat::mcset cs {Crop Parameters} [encoding convertfrom iso8859-2 {Parametry oøezávání}] ::msgcat::mcset cs {Crop} [encoding convertfrom iso8859-2 {Výøez}] ::msgcat::mcset cs {Crosshair Parameters} ::msgcat::mcset cs {Crosshair To} [encoding convertfrom iso8859-2 {Zamìøovaè na}] ::msgcat::mcset cs {Crosshair} [encoding convertfrom iso8859-2 {Zamìøovaè}] ::msgcat::mcset cs {Cross} [encoding convertfrom iso8859-2 {Køí¾}] ::msgcat::mcset cs {Cubehelix} ::msgcat::mcset cs {Cube} [encoding convertfrom iso8859-2 {Krychle}] ::msgcat::mcset cs {Cubic} ::msgcat::mcset cs {Current Frame} [encoding convertfrom iso8859-2 {Souèasný obrázek}] ::msgcat::mcset cs {Current Range} [encoding convertfrom iso8859-2 {Souèasný rozsah}] ::msgcat::mcset cs {Current} [encoding convertfrom iso8859-2 {Souèasný}] ::msgcat::mcset cs {Cursor} [encoding convertfrom iso8859-2 {Kurzor}] ::msgcat::mcset cs {Cut} [encoding convertfrom iso8859-2 {Vyøíznout}] ::msgcat::mcset cs {Cyan} [encoding convertfrom iso8859-2 {Azurová}] ::msgcat::mcset cs {DPI} ::msgcat::mcset cs {DS9 has detected a newer version of a backup file and therefore will not process this file.} [encoding convertfrom iso8859-2 {Program na¹el novou verzi zálo¾ního souboru a tedy tento soubor nebude zpracován.}] ::msgcat::mcset cs {DS9 has detected a newer version of a preferences file.} ::msgcat::mcset cs {DS9 has detected an older backup file, do you wish to continue?} [encoding convertfrom iso8859-2 {DS9 detekovala starou verzi zálo¾ního souboru, chcete pokraèovat?}] ::msgcat::mcset cs {DS9 has detected an older preferences file, do you wish to update?} [encoding convertfrom iso8859-2 {Starý konfiguraèní soubor, chcete ho zaktualizovat?}] ::msgcat::mcset cs {DS9 will complete the initialization process} [encoding convertfrom iso8859-2 {DS9 dokonèí inticializaèní proces}] ::msgcat::mcset cs {Dash} ::msgcat::mcset cs {Data Format} [encoding convertfrom iso8859-2 {Formát dat}] ::msgcat::mcset cs {Dataset Name} ::msgcat::mcset cs {Dataset} [encoding convertfrom iso8859-2 {Soubor dat}] ::msgcat::mcset cs {Data} ::msgcat::mcset cs {Decrease} [encoding convertfrom iso8859-2 {Zmen¹it}] ::msgcat::mcset cs {Default All Files} [encoding convertfrom iso8859-2 {Vychozí pro v¹echny soubory}] ::msgcat::mcset cs {Default Format} ::msgcat::mcset cs {Default Length} ::msgcat::mcset cs {Default} [encoding convertfrom iso8859-2 {Výchozí}] ::msgcat::mcset cs {Degrees} [encoding convertfrom iso8859-2 {Stupnì}] ::msgcat::mcset cs {Delete All Frames?} [encoding convertfrom iso8859-2 {Smazat v¹echny snímky?}] ::msgcat::mcset cs {Delete All Frames} [encoding convertfrom iso8859-2 {Smazat v¹echny snímky}] ::msgcat::mcset cs {Delete All Groups?} [encoding convertfrom iso8859-2 {Smazat v¹echny skupiny?}] ::msgcat::mcset cs {Delete All Groups} [encoding convertfrom iso8859-2 {Smazat v¹echny skupiny}] ::msgcat::mcset cs {Delete All Regions?} [encoding convertfrom iso8859-2 {Smazat v¹echny oblasti?}] ::msgcat::mcset cs {Delete All Regions} [encoding convertfrom iso8859-2 {Smazat v¹echny oblasti}] ::msgcat::mcset cs {Delete All} [encoding convertfrom iso8859-2 {Smazat v¹e}] ::msgcat::mcset cs {Delete Color Tags} ::msgcat::mcset cs {Delete Frame} [encoding convertfrom iso8859-2 {Smazat snímek}] ::msgcat::mcset cs {Delete Group} [encoding convertfrom iso8859-2 {Smazat skupiny}] ::msgcat::mcset cs {Delete Selected Regions} [encoding convertfrom iso8859-2 {Smazat vybrané oblasti}] ::msgcat::mcset cs {Delete} [encoding convertfrom iso8859-2 {Smazat}] ::msgcat::mcset cs {Depth} [encoding convertfrom iso8859-2 {Hloubka}] ::msgcat::mcset cs {Detector} [encoding convertfrom iso8859-2 {Detektor}] ::msgcat::mcset cs {Dialog Box} [encoding convertfrom iso8859-2 {Dialogové okno}] ::msgcat::mcset cs {Diamond} [encoding convertfrom iso8859-2 {Diamant}] ::msgcat::mcset cs {Dimension} [encoding convertfrom iso8859-2 {Rozmìr}] ::msgcat::mcset cs {Direction} ::msgcat::mcset cs {Disconnect} ::msgcat::mcset cs {Display Header} ::msgcat::mcset cs {Display Size} [encoding convertfrom iso8859-2 {Velikost displeje}] ::msgcat::mcset cs {Dissolve} ::msgcat::mcset cs {Distance} [encoding convertfrom iso8859-2 {Vzdálenost}] ::msgcat::mcset cs {Done} ::msgcat::mcset cs {Download Colormap} ::msgcat::mcset cs {Download VOTABLE format if available} ::msgcat::mcset cs {Drag to Center} ::msgcat::mcset cs {Duplicate Data} ::msgcat::mcset cs {East} [encoding convertfrom iso8859-2 {Východ}] ::msgcat::mcset cs {Ecliptic} [encoding convertfrom iso8859-2 {Ekliptikální}] ::msgcat::mcset cs {Edit Group Name} ::msgcat::mcset cs {Edit} [encoding convertfrom iso8859-2 {Úpravy}] ::msgcat::mcset cs {Elevation} ::msgcat::mcset cs {Ellipse Annulus} ::msgcat::mcset cs {Ellipse Panda} ::msgcat::mcset cs {Ellipse} [encoding convertfrom iso8859-2 {Elipsa}] ::msgcat::mcset cs {Elliptical Annulus} ::msgcat::mcset cs {Elliptical Panda} ::msgcat::mcset cs {Enable Confirmation Dialogs} ::msgcat::mcset cs {Enable} [encoding convertfrom iso8859-2 {Povolit}] ::msgcat::mcset cs {End} [encoding convertfrom iso8859-2 {Ukonèit}] ::msgcat::mcset cs {Enter Color} [encoding convertfrom iso8859-2 {Zadejte barvu}] ::msgcat::mcset cs {Enter Font Size} ::msgcat::mcset cs {Enter Group Name} ::msgcat::mcset cs {Enter Search Expression} ::msgcat::mcset cs {Enter URL} ::msgcat::mcset cs {Entry} ::msgcat::mcset cs {Equal Area} ::msgcat::mcset cs {Equal Distance} ::msgcat::mcset cs {Equal Spacing} ::msgcat::mcset cs {Equal Value} ::msgcat::mcset cs {Error code was returned} ::msgcat::mcset cs {Error} ::msgcat::mcset cs {Examine Frame} ::msgcat::mcset cs {Examine} [encoding convertfrom iso8859-2 {Prozkoumat}] ::msgcat::mcset cs {Exam} ::msgcat::mcset cs {Exclude} ::msgcat::mcset cs {Exit} [encoding convertfrom iso8859-2 {Ukonèi}] ::msgcat::mcset cs {Export Array} ::msgcat::mcset cs {Export} [encoding convertfrom iso8859-2 {Ulo¾it jako}] ::msgcat::mcset cs {Extention} ::msgcat::mcset cs {Exterior Axes} ::msgcat::mcset cs {Exterior Numerics} ::msgcat::mcset cs {FAQ} ::msgcat::mcset cs {FK4} ::msgcat::mcset cs {FK5} ::msgcat::mcset cs {Factor} [encoding convertfrom iso8859-2 {Faktor}] ::msgcat::mcset cs {File not Found or Unable to load FITS data MIME type} [encoding convertfrom iso8859-2 {Soubor nenalezen nebo není mo¾né nahrát daný FITS MIME typ}] ::msgcat::mcset cs {Filename} [encoding convertfrom iso8859-2 {Název souboru}] ::msgcat::mcset cs {File} [encoding convertfrom iso8859-2 {Soubor}] ::msgcat::mcset cs {Fill} ::msgcat::mcset cs {Filter} [encoding convertfrom iso8859-2 {Filtr}] ::msgcat::mcset cs {Find Next} [encoding convertfrom iso8859-2 {Najít dal¹í}] ::msgcat::mcset cs {Find} [encoding convertfrom iso8859-2 {Najít}] ::msgcat::mcset cs {First Frame} [encoding convertfrom iso8859-2 {První snímek}] ::msgcat::mcset cs {First} [encoding convertfrom iso8859-2 {První}] ::msgcat::mcset cs {Fits} ::msgcat::mcset cs {Fixed in Size} ::msgcat::mcset cs {Flat} ::msgcat::mcset cs {Flip} ::msgcat::mcset cs {Font} [encoding convertfrom iso8859-2 {Znak}] ::msgcat::mcset cs {For more information, use --help} [encoding convertfrom iso8859-2 {Pro více informací, pou¾ijte --help}] ::msgcat::mcset cs {Format} [encoding convertfrom iso8859-2 {Formát}] ::msgcat::mcset cs {Forward} [encoding convertfrom iso8859-2 {Vpøed}] ::msgcat::mcset cs {Found} [encoding convertfrom iso8859-2 {Nalezeno}] ::msgcat::mcset cs {Frame Information} [encoding convertfrom iso8859-2 {Informace o snímku}] ::msgcat::mcset cs {Frame Parameters} [encoding convertfrom iso8859-2 {Parametry snímku}] ::msgcat::mcset cs {Frames} [encoding convertfrom iso8859-2 {Snímky}] ::msgcat::mcset cs {Frame} [encoding convertfrom iso8859-2 {Snímek}] ::msgcat::mcset cs {From} [encoding convertfrom iso8859-2 {Od}] ::msgcat::mcset cs {Front} [encoding convertfrom iso8859-2 {První}] ::msgcat::mcset cs {Full Range} [encoding convertfrom iso8859-2 {Plný rozsah}] ::msgcat::mcset cs {Function} [encoding convertfrom iso8859-2 {Funkce}] ::msgcat::mcset cs {GUI Font} [encoding convertfrom iso8859-2 {Font GUI}] ::msgcat::mcset cs {Galactic} [encoding convertfrom iso8859-2 {Galaktické}] ::msgcat::mcset cs {Gap} ::msgcat::mcset cs {Gaussian} ::msgcat::mcset cs {General} ::msgcat::mcset cs {Generate} [encoding convertfrom iso8859-2 {Vygeneruj}] ::msgcat::mcset cs {Generating Regions} ::msgcat::mcset cs {Get Information} [encoding convertfrom iso8859-2 {Získej informace}] ::msgcat::mcset cs {Gist} ::msgcat::mcset cs {Global Properties} ::msgcat::mcset cs {Global} ::msgcat::mcset cs {Goto Frame} [encoding convertfrom iso8859-2 {Bì¾ na snímek}] ::msgcat::mcset cs {Graph Horz} ::msgcat::mcset cs {Graph Vert} ::msgcat::mcset cs {Graphics} ::msgcat::mcset cs {Graphs} [encoding convertfrom iso8859-2 {Grafy}] ::msgcat::mcset cs {Graph} [encoding convertfrom iso8859-2 {Graf}] ::msgcat::mcset cs {Grayscale} [encoding convertfrom iso8859-2 {Stupnì ¹edi}] ::msgcat::mcset cs {Green} [encoding convertfrom iso8859-2 {Zelená}] ::msgcat::mcset cs {Grid Gap} ::msgcat::mcset cs {Grid} [encoding convertfrom iso8859-2 {Møí¾ka}] ::msgcat::mcset cs {Groove} ::msgcat::mcset cs {Groups} [encoding convertfrom iso8859-2 {Skupiny}] ::msgcat::mcset cs {HTTP} ::msgcat::mcset cs {Header} [encoding convertfrom iso8859-2 {Hlavièka}] ::msgcat::mcset cs {Height} [encoding convertfrom iso8859-2 {Vý¹ka}] ::msgcat::mcset cs {Help Desk} [encoding convertfrom iso8859-2 {Podpora}] ::msgcat::mcset cs {Help Me Choose} ::msgcat::mcset cs {Help} [encoding convertfrom iso8859-2 {Nápovìda}] ::msgcat::mcset cs {Hide All} [encoding convertfrom iso8859-2 {Skryj v¹echny}] ::msgcat::mcset cs {Highlite} ::msgcat::mcset cs {High} [encoding convertfrom iso8859-2 {Vysoký}] ::msgcat::mcset cs {Histogram Equalization} [encoding convertfrom iso8859-2 {Vyrovnání histogramu}] ::msgcat::mcset cs {Histogram} ::msgcat::mcset cs {Horizontal Graph} [encoding convertfrom iso8859-2 {Horizontální graf}] ::msgcat::mcset cs {Horizontal Layout} [encoding convertfrom iso8859-2 {Horizontální rozlo¾ení}] ::msgcat::mcset cs {Horizontal} ::msgcat::mcset cs {IAU Location Code} ::msgcat::mcset cs {ICRS} ::msgcat::mcset cs {Identification} ::msgcat::mcset cs {If} ::msgcat::mcset cs {Image Servers} ::msgcat::mcset cs {Image} [encoding convertfrom iso8859-2 {Obrázek}] ::msgcat::mcset cs {Import Array} ::msgcat::mcset cs {Import} ::msgcat::mcset cs {Include} ::msgcat::mcset cs {Increase} ::msgcat::mcset cs {Information Panel} [encoding convertfrom iso8859-2 {Informaèní panel}] ::msgcat::mcset cs {Information} [encoding convertfrom iso8859-2 {Detaily}] ::msgcat::mcset cs {Initialize XPA} ::msgcat::mcset cs {Inner} ::msgcat::mcset cs {Instrument FOV} [encoding convertfrom iso8859-2 {Zorné pole dalekohledù}] ::msgcat::mcset cs {Interior Axes} ::msgcat::mcset cs {Interior Numerics} ::msgcat::mcset cs {Internal Parse Error} ::msgcat::mcset cs {Interval} ::msgcat::mcset cs {Invalid Column Name} ::msgcat::mcset cs {Invalid formated multipart/mixed mime type message} ::msgcat::mcset cs {Invert Colormap} ::msgcat::mcset cs {Invert Selection} [encoding convertfrom iso8859-2 {Vybrat doplnìk}] ::msgcat::mcset cs {Invert} [encoding convertfrom iso8859-2 {Pøeklopit}] ::msgcat::mcset cs {Italic} [encoding convertfrom iso8859-2 {Kurzíva}] ::msgcat::mcset cs {Items Found} ::msgcat::mcset cs {Iteration} ::msgcat::mcset cs {JPEG Quality Factor} [encoding convertfrom iso8859-2 {Kvalita JPEGu}] ::msgcat::mcset cs {Keep-Alive} ::msgcat::mcset cs {Kernel} [encoding convertfrom iso8859-2 {Kernel}] ::msgcat::mcset cs {Keyboard Shortcuts} [encoding convertfrom iso8859-2 {Klávesnicové zkratky}] ::msgcat::mcset cs {Keyboard} [encoding convertfrom iso8859-2 {Klávesnice}] ::msgcat::mcset cs {Keyword} ::msgcat::mcset cs {Labels} [encoding convertfrom iso8859-2 {Oznaèení}] ::msgcat::mcset cs {Label} [encoding convertfrom iso8859-2 {Oznaèení}] ::msgcat::mcset cs {Landscape} [encoding convertfrom iso8859-2 {Horizontálnì}] ::msgcat::mcset cs {Language} [encoding convertfrom iso8859-2 {Jazyk}] ::msgcat::mcset cs {Last Frame} [encoding convertfrom iso8859-2 {Poslední snímek}] ::msgcat::mcset cs {Last} [encoding convertfrom iso8859-2 {Poslední}] ::msgcat::mcset cs {Layout Horz} ::msgcat::mcset cs {Layout Vert} ::msgcat::mcset cs {Layout} [encoding convertfrom iso8859-2 {Rozvr¾ení}] ::msgcat::mcset cs {Left} [encoding convertfrom iso8859-2 {Vlevo}] ::msgcat::mcset cs {Legal} ::msgcat::mcset cs {Legend Title} ::msgcat::mcset cs {Legend} ::msgcat::mcset cs {Length} [encoding convertfrom iso8859-2 {Délka}] ::msgcat::mcset cs {Letter} ::msgcat::mcset cs {Levels} [encoding convertfrom iso8859-2 {Úrovnì}] ::msgcat::mcset cs {Level} [encoding convertfrom iso8859-2 {Úroveò}] ::msgcat::mcset cs {Limits} ::msgcat::mcset cs {Line Plot Tool} ::msgcat::mcset cs {Linear} [encoding convertfrom iso8859-2 {Linární}] ::msgcat::mcset cs {Line} ::msgcat::mcset cs {List Data} ::msgcat::mcset cs {List Regions} [encoding convertfrom iso8859-2 {Seznam oblastí}] ::msgcat::mcset cs {List} [encoding convertfrom iso8859-2 {Seznam}] ::msgcat::mcset cs {Load Analysis Commands} [encoding convertfrom iso8859-2 {Nahrát analytické pøíkazy}] ::msgcat::mcset cs {Load Color Tags} ::msgcat::mcset cs {Load Colormap} ::msgcat::mcset cs {Load Configuration} [encoding convertfrom iso8859-2 {Nahraj konfiguraci}] ::msgcat::mcset cs {Load Contour Levels} ::msgcat::mcset cs {Load Contours} ::msgcat::mcset cs {Load Contrast/Bias} ::msgcat::mcset cs {Load Data} ::msgcat::mcset cs {Load Mosaic} ::msgcat::mcset cs {Load Regions} [encoding convertfrom iso8859-2 {Nahrát oblasti}] ::msgcat::mcset cs {Load Template} ::msgcat::mcset cs {Load into All Frames} ::msgcat::mcset cs {Load into Current Frame} ::msgcat::mcset cs {Loading Catalog} ::msgcat::mcset cs {Loading} ::msgcat::mcset cs {Load} [encoding convertfrom iso8859-2 {Nahrát}] ::msgcat::mcset cs {Local} ::msgcat::mcset cs {Lock Axes} ::msgcat::mcset cs {Lock Bin} ::msgcat::mcset cs {Lock Color} ::msgcat::mcset cs {Lock Crop Amplifier} ::msgcat::mcset cs {Lock Crop Detector} ::msgcat::mcset cs {Lock Crop Image} ::msgcat::mcset cs {Lock Crop None} ::msgcat::mcset cs {Lock Crop Physical} ::msgcat::mcset cs {Lock Crop WCS} ::msgcat::mcset cs {Lock Crosshair Amplifier} ::msgcat::mcset cs {Lock Crosshair Detector} ::msgcat::mcset cs {Lock Crosshair Image} ::msgcat::mcset cs {Lock Crosshair None} ::msgcat::mcset cs {Lock Crosshair Physical} ::msgcat::mcset cs {Lock Crosshair WCS} ::msgcat::mcset cs {Lock Frame Amplifier} ::msgcat::mcset cs {Lock Frame Detector} ::msgcat::mcset cs {Lock Frame Image} ::msgcat::mcset cs {Lock Frame None} ::msgcat::mcset cs {Lock Frame Physical} ::msgcat::mcset cs {Lock Frame WCS} ::msgcat::mcset cs {Lock Limits} ::msgcat::mcset cs {Lock Scale} ::msgcat::mcset cs {Lock Slice Image} ::msgcat::mcset cs {Lock Slice None} ::msgcat::mcset cs {Lock Slice WCS} ::msgcat::mcset cs {Lock Smooth} ::msgcat::mcset cs {Lock} [encoding convertfrom iso8859-2 {Synchronizovat}] ::msgcat::mcset cs {Log Exponent} [encoding convertfrom iso8859-2 {Numerus logaritmu}] ::msgcat::mcset cs {Log} [encoding convertfrom iso8859-2 {Logaritmické}] ::msgcat::mcset cs {Low High} [encoding convertfrom iso8859-2 {Nejmen¹í Nejvìt¹í}] ::msgcat::mcset cs {Lower Left Back} ::msgcat::mcset cs {Lower Left Front} ::msgcat::mcset cs {Lower Right Back} ::msgcat::mcset cs {Lower Right Front} ::msgcat::mcset cs {Low} ::msgcat::mcset cs {MIP} ::msgcat::mcset cs {Magenta} ::msgcat::mcset cs {Magnification} ::msgcat::mcset cs {Magnifier} [encoding convertfrom iso8859-2 {Zvìt¹ovaè}] ::msgcat::mcset cs {Major} ::msgcat::mcset cs {Manual} ::msgcat::mcset cs {Mask Parameters} [encoding convertfrom iso8859-2 {Nastavení masky}] ::msgcat::mcset cs {Match Axes} ::msgcat::mcset cs {Match Bin} [encoding convertfrom iso8859-2 {Zarovnat bin}] ::msgcat::mcset cs {Match Catalog requires at least 1 row per catalog} ::msgcat::mcset cs {Match Color} [encoding convertfrom iso8859-2 {Sladit barvu}] ::msgcat::mcset cs {Match Crop Amplifier} ::msgcat::mcset cs {Match Crop Detector} ::msgcat::mcset cs {Match Crop Image} ::msgcat::mcset cs {Match Crop Physical} ::msgcat::mcset cs {Match Crop WCS} ::msgcat::mcset cs {Match Crosshair Amplifier} ::msgcat::mcset cs {Match Crosshair Detector} ::msgcat::mcset cs {Match Crosshair Image} ::msgcat::mcset cs {Match Crosshair Physical} ::msgcat::mcset cs {Match Crosshair WCS} ::msgcat::mcset cs {Match Frame Amplifier} ::msgcat::mcset cs {Match Frame Detector} ::msgcat::mcset cs {Match Frame Image} ::msgcat::mcset cs {Match Frame Physical} ::msgcat::mcset cs {Match Frame WCS} ::msgcat::mcset cs {Match Limits} ::msgcat::mcset cs {Match Scale} [encoding convertfrom iso8859-2 {Zarovnat ¹kálování}] ::msgcat::mcset cs {Match Slice Image} ::msgcat::mcset cs {Match Slice WCS} ::msgcat::mcset cs {Match Smooth} ::msgcat::mcset cs {Match} [encoding convertfrom iso8859-2 {Zarovnat}] ::msgcat::mcset cs {Math Function} ::msgcat::mcset cs {Matplotlib} ::msgcat::mcset cs {Max Rows} ::msgcat::mcset cs {Maximum} ::msgcat::mcset cs {Max} ::msgcat::mcset cs {Menus and Buttons} ::msgcat::mcset cs {Menu} [encoding convertfrom iso8859-2 {Nabídka}] ::msgcat::mcset cs {Message Log} ::msgcat::mcset cs {Method} ::msgcat::mcset cs {Min Max Parameters} ::msgcat::mcset cs {Min Max} [encoding convertfrom iso8859-2 {Minimum Maximum}] ::msgcat::mcset cs {Minimum} ::msgcat::mcset cs {Minor} ::msgcat::mcset cs {Minutes} ::msgcat::mcset cs {Min} ::msgcat::mcset cs {Mission} ::msgcat::mcset cs {Mode} ::msgcat::mcset cs {Mosaic IRAF Segment} ::msgcat::mcset cs {Mosaic IRAF} ::msgcat::mcset cs {Mosaic WCS Segment} ::msgcat::mcset cs {Mosaic WCS} ::msgcat::mcset cs {Mosaic WFPC2} ::msgcat::mcset cs {Mosaic} ::msgcat::mcset cs {Mouse Click Epsilon} ::msgcat::mcset cs {Mouse Wheel Bin} ::msgcat::mcset cs {Mouse Wheel Zoom} ::msgcat::mcset cs {Mouse and Keyboard} ::msgcat::mcset cs {Move Back} ::msgcat::mcset cs {Move First} ::msgcat::mcset cs {Move Forward} ::msgcat::mcset cs {Move Frame} [encoding convertfrom iso8859-2 {Pøesunout snímek}] ::msgcat::mcset cs {Move Last} ::msgcat::mcset cs {Move to Back} [encoding convertfrom iso8859-2 {Pøesunout vzad}] ::msgcat::mcset cs {Move to Front} [encoding convertfrom iso8859-2 {Pøesunout vpøed}] ::msgcat::mcset cs {Movie} ::msgcat::mcset cs {Multiple Extension Cube} ::msgcat::mcset cs {Multiple Extension Frames} ::msgcat::mcset cs {Multiple WCS} [encoding convertfrom iso8859-2 {Multi WCS}] ::msgcat::mcset cs {NRRD} ::msgcat::mcset cs {Name Resolution} [encoding convertfrom iso8859-2 {Vyhledání objektu}] ::msgcat::mcset cs {Name Server} ::msgcat::mcset cs {Name or Designation} ::msgcat::mcset cs {Name} [encoding convertfrom iso8859-2 {Název}] ::msgcat::mcset cs {Native Dialog} ::msgcat::mcset cs {New Features} [encoding convertfrom iso8859-2 {Nové vlasnosti}] ::msgcat::mcset cs {New Frame 3D} [encoding convertfrom iso8859-2 {Nový 3D snímek}] ::msgcat::mcset cs {New Frame RGB} [encoding convertfrom iso8859-2 {Nový barevný RGB snímek}] ::msgcat::mcset cs {New Frame each Time} ::msgcat::mcset cs {New Frame} [encoding convertfrom iso8859-2 {Nový snímek}] ::msgcat::mcset cs {New Group} [encoding convertfrom iso8859-2 {Nová skupina}] ::msgcat::mcset cs {New} [encoding convertfrom iso8859-2 {Nový}] ::msgcat::mcset cs {Next Frame} [encoding convertfrom iso8859-2 {Dal¹í snímek}] ::msgcat::mcset cs {Next} [encoding convertfrom iso8859-2 {Dal¹í}] ::msgcat::mcset cs {No Catalog specified} ::msgcat::mcset cs {No Data Available} ::msgcat::mcset cs {No Items Found} ::msgcat::mcset cs {No current frame} ::msgcat::mcset cs {Non-zero} ::msgcat::mcset cs {None} [encoding convertfrom iso8859-2 {Nic}] ::msgcat::mcset cs {Normal} ::msgcat::mcset cs {North} [encoding convertfrom iso8859-2 {Sever}] ::msgcat::mcset cs {Not Found} ::msgcat::mcset cs {Not Supported} ::msgcat::mcset cs {Number of Samples} ::msgcat::mcset cs {Number of Threads} ::msgcat::mcset cs {Number of Ticks} ::msgcat::mcset cs {Number} [encoding convertfrom iso8859-2 {Èíslo}] ::msgcat::mcset cs {Numerics} ::msgcat::mcset cs {OK} [encoding convertfrom iso8859-2 {Budi¾}] ::msgcat::mcset cs {Object} [encoding convertfrom iso8859-2 {Objekt}] ::msgcat::mcset cs {Open File} [encoding convertfrom iso8859-2 {Otevøít soubor}] ::msgcat::mcset cs {Open TCL Console} [encoding convertfrom iso8859-2 {Otevøít konzoly TCL}] ::msgcat::mcset cs {Open URL} [encoding convertfrom iso8859-2 {Otevøít URL}] ::msgcat::mcset cs {Open as} ::msgcat::mcset cs {Open} [encoding convertfrom iso8859-2 {Otevøít}] ::msgcat::mcset cs {Operator} ::msgcat::mcset cs {Orientation} ::msgcat::mcset cs {Origin} ::msgcat::mcset cs {Oscillate} ::msgcat::mcset cs {Other Color} ::msgcat::mcset cs {Other Font Size} ::msgcat::mcset cs {Other} ::msgcat::mcset cs {Outer} ::msgcat::mcset cs {Overlap} ::msgcat::mcset cs {PS Page Setup} ::msgcat::mcset cs {PS Print} ::msgcat::mcset cs {Page Setup} [encoding convertfrom iso8859-2 {Vlastnosti tisku}] ::msgcat::mcset cs {Page Source} ::msgcat::mcset cs {Pan To} ::msgcat::mcset cs {Pan Zoom Rotate Parameters} [encoding convertfrom iso8859-2 {Parametry prohlí¾ení a zvìt¹ení}] ::msgcat::mcset cs {Pan Zoom} ::msgcat::mcset cs {Pan then Zoom} ::msgcat::mcset cs {Panda} ::msgcat::mcset cs {Panner} [encoding convertfrom iso8859-2 {Náhled snímku}] ::msgcat::mcset cs {Pan} [encoding convertfrom iso8859-2 {Posun}] ::msgcat::mcset cs {Parameters} ::msgcat::mcset cs {Password} ::msgcat::mcset cs {Paste Contours} ::msgcat::mcset cs {Paste} [encoding convertfrom iso8859-2 {Vlo¾it}] ::msgcat::mcset cs {Physical} [encoding convertfrom iso8859-2 {Fyzické}] ::msgcat::mcset cs {Pixel Distribution} ::msgcat::mcset cs {Pixel Size} ::msgcat::mcset cs {Pixel Table} [encoding convertfrom iso8859-2 {Pixel tabulka}] ::msgcat::mcset cs {Pixels} ::msgcat::mcset cs {Play} ::msgcat::mcset cs {Please Select a Region} ::msgcat::mcset cs {Please change the file's permission to disable other users write access. Use anyway?} ::msgcat::mcset cs {Please specify width, height, and either name or (ra,dec)} ::msgcat::mcset cs {Plot 2D} ::msgcat::mcset cs {Plot 3D} ::msgcat::mcset cs {Plot Title} ::msgcat::mcset cs {Plotting Regions} ::msgcat::mcset cs {Plot} ::msgcat::mcset cs {Plus} ::msgcat::mcset cs {Pointer} [encoding convertfrom iso8859-2 {Ukazatel}] ::msgcat::mcset cs {Points} ::msgcat::mcset cs {Point} ::msgcat::mcset cs {Polygon} ::msgcat::mcset cs {Portrait} ::msgcat::mcset cs {Poster} ::msgcat::mcset cs {Postscript Page Setup} ::msgcat::mcset cs {Postscript Print} ::msgcat::mcset cs {Postscript} ::msgcat::mcset cs {Power} [encoding convertfrom iso8859-2 {Mocninové}] ::msgcat::mcset cs {Preferences} [encoding convertfrom iso8859-2 {Nastavení}] ::msgcat::mcset cs {Preserve During Load} [encoding convertfrom iso8859-2 {Zachovej pøi otevøení}] ::msgcat::mcset cs {Previous Frame} [encoding convertfrom iso8859-2 {Pøede¹lí snímek}] ::msgcat::mcset cs {Previous} [encoding convertfrom iso8859-2 {Pøedchozí}] ::msgcat::mcset cs {Prev} ::msgcat::mcset cs {Print Coordinates} ::msgcat::mcset cs {Print To} ::msgcat::mcset cs {Printer} ::msgcat::mcset cs {Print} [encoding convertfrom iso8859-2 {Vytisknout}] ::msgcat::mcset cs {Projection} ::msgcat::mcset cs {Properties} [encoding convertfrom iso8859-2 {Vlastnosti}] ::msgcat::mcset cs {Property} ::msgcat::mcset cs {Proxy Host} ::msgcat::mcset cs {Proxy Port} ::msgcat::mcset cs {Publication} ::msgcat::mcset cs {Quadratic} ::msgcat::mcset cs {RGB Array} ::msgcat::mcset cs {RGB Cube} ::msgcat::mcset cs {RGB Image} ::msgcat::mcset cs {RGB} ::msgcat::mcset cs {Radial Profile} ::msgcat::mcset cs {Radial} ::msgcat::mcset cs {Radius} ::msgcat::mcset cs {Raised} ::msgcat::mcset cs {Range} ::msgcat::mcset cs {Redo} ::msgcat::mcset cs {Red} ::msgcat::mcset cs {Reference Manual} [encoding convertfrom iso8859-2 {Seznam pøíkazù}] ::msgcat::mcset cs {Reference} ::msgcat::mcset cs {Refresh Frame} [encoding convertfrom iso8859-2 {Obnov snímek}] ::msgcat::mcset cs {Refresh} ::msgcat::mcset cs {Region Parameters} [encoding convertfrom iso8859-2 {Parametry oblastí}] ::msgcat::mcset cs {Region} [encoding convertfrom iso8859-2 {Oblasti}] ::msgcat::mcset cs {Release Notes} [encoding convertfrom iso8859-2 {Informace o vydání}] ::msgcat::mcset cs {Release} ::msgcat::mcset cs {Relief} ::msgcat::mcset cs {Reload} ::msgcat::mcset cs {Render} ::msgcat::mcset cs {Repeat} ::msgcat::mcset cs {Reset Colormap} ::msgcat::mcset cs {Reset Frame} [encoding convertfrom iso8859-2 {Vynulovat nastavení snímku}] ::msgcat::mcset cs {Reset} ::msgcat::mcset cs {Restore} [encoding convertfrom iso8859-2 {Obnovit}] ::msgcat::mcset cs {Retrieve} ::msgcat::mcset cs {Return} ::msgcat::mcset cs {Right} ::msgcat::mcset cs {Roman} ::msgcat::mcset cs {Rotate} {Rotovat} ::msgcat::mcset cs {Rows} ::msgcat::mcset cs {Row} ::msgcat::mcset cs {Ruler} ::msgcat::mcset cs {SAMP Image} ::msgcat::mcset cs {SAMP Table} ::msgcat::mcset cs {SAMP: already connected} ::msgcat::mcset cs {SAMP: internal error} ::msgcat::mcset cs {SAMP: not connected} ::msgcat::mcset cs {SAMP: unable to locate HUB} ::msgcat::mcset cs {SAMP} ::msgcat::mcset cs {Sample Increment} ::msgcat::mcset cs {Sample Parameters} ::msgcat::mcset cs {Samples per Line} ::msgcat::mcset cs {Sample} ::msgcat::mcset cs {Save 3D Movie} ::msgcat::mcset cs {Save Color Tags} ::msgcat::mcset cs {Save Colormap} ::msgcat::mcset cs {Save Configuration} ::msgcat::mcset cs {Save Contour Levels} ::msgcat::mcset cs {Save Contours} ::msgcat::mcset cs {Save Contrast/Bias} ::msgcat::mcset cs {Save Data} ::msgcat::mcset cs {Save Image on Download} ::msgcat::mcset cs {Save Image} [encoding convertfrom iso8859-2 {Ulo¾it snímek}] ::msgcat::mcset cs {Save Regions} [encoding convertfrom iso8859-2 {Ulo¾it oblasti}] ::msgcat::mcset cs {Save Template} [encoding convertfrom iso8859-2 {Ulo¾it ¹ablony}] ::msgcat::mcset cs {Save as} ::msgcat::mcset cs {Save} [encoding convertfrom iso8859-2 {Ulo¾it}] ::msgcat::mcset cs {Scale Parameters} [encoding convertfrom iso8859-2 {Parametry ¹kálování}] ::msgcat::mcset cs {Scale and Limits} ::msgcat::mcset cs {Scale} [encoding convertfrom iso8859-2 {©kálování}] ::msgcat::mcset cs {Scan} ::msgcat::mcset cs {Scatter Plot Tool} ::msgcat::mcset cs {Scope} ::msgcat::mcset cs {Search for Catalogs} ::msgcat::mcset cs {Searching for catalogs} ::msgcat::mcset cs {Seconds} ::msgcat::mcset cs {Segment} ::msgcat::mcset cs {Select All} [encoding convertfrom iso8859-2 {Vybrat v¹echny}] ::msgcat::mcset cs {Select Coordinate System } ::msgcat::mcset cs {Select None} [encoding convertfrom iso8859-2 {Zru¹it výbìr}] ::msgcat::mcset cs {Select} ::msgcat::mcset cs {Send} ::msgcat::mcset cs {Server} ::msgcat::mcset cs {Sexagesimal} [encoding convertfrom iso8859-2 {©edesátkové}] ::msgcat::mcset cs {Shape} [encoding convertfrom iso8859-2 {Tvar}] ::msgcat::mcset cs {Show All} [encoding convertfrom iso8859-2 {Zobrazit v¹e}] ::msgcat::mcset cs {Show Command} ::msgcat::mcset cs {Show Compass} ::msgcat::mcset cs {Show Text} ::msgcat::mcset cs {Show/Hide Frames} [encoding convertfrom iso8859-2 {Zobrazit/skrýt snímky}] ::msgcat::mcset cs {Show} ::msgcat::mcset cs {Simple Cross} ::msgcat::mcset cs {Simple Plus} ::msgcat::mcset cs {Single Frame} [encoding convertfrom iso8859-2 {Jeden snímek}] ::msgcat::mcset cs {Single} [encoding convertfrom iso8859-2 {jeden}] ::msgcat::mcset cs {Sites} ::msgcat::mcset cs {Size/Radius} ::msgcat::mcset cs {Size} ::msgcat::mcset cs {Skip First} ::msgcat::mcset cs {Slice} ::msgcat::mcset cs {Smooth Parameters} [encoding convertfrom iso8859-2 {Nastavení vyhlazení}] ::msgcat::mcset cs {Smoothness} ::msgcat::mcset cs {Smooth} [encoding convertfrom iso8859-2 {Vyhlazení}] ::msgcat::mcset cs {Solid} ::msgcat::mcset cs {Sorry, DS9 does not support} ::msgcat::mcset cs {Sorry, DS9 requires a Truecolor8, Truecolor16, Truecolor24 visual be available} ::msgcat::mcset cs {Sort} ::msgcat::mcset cs {Source TCL} ::msgcat::mcset cs {Source} ::msgcat::mcset cs {Space Equal Distance} ::msgcat::mcset cs {Space Equal Value} ::msgcat::mcset cs {Spacing} ::msgcat::mcset cs {Sqrt} ::msgcat::mcset cs {Square Root} [encoding convertfrom iso8859-2 {Odmocninové}] ::msgcat::mcset cs {Squared} ::msgcat::mcset cs {Square} ::msgcat::mcset cs {Stacked} ::msgcat::mcset cs {Starbase} ::msgcat::mcset cs {Startup} ::msgcat::mcset cs {Start} ::msgcat::mcset cs {Statistics} ::msgcat::mcset cs {Stats} ::msgcat::mcset cs {Status} ::msgcat::mcset cs {Step} ::msgcat::mcset cs {Stop} ::msgcat::mcset cs {Story of SAOImage DS9} [encoding convertfrom iso8859-2 {Pøíbìh SAOImage DS9}] ::msgcat::mcset cs {Story} ::msgcat::mcset cs {Sum} ::msgcat::mcset cs {Sunken} ::msgcat::mcset cs {Symbol Editor} ::msgcat::mcset cs {Symbol} ::msgcat::mcset cs {Tab-Separated-Value} ::msgcat::mcset cs {Table} ::msgcat::mcset cs {Tabloid} ::msgcat::mcset cs {Tag Color} ::msgcat::mcset cs {Task} ::msgcat::mcset cs {Template} [encoding convertfrom iso8859-2 {©ablona}] ::msgcat::mcset cs {Text Font} ::msgcat::mcset cs {Text} ::msgcat::mcset cs {Then} ::msgcat::mcset cs {Thickness} ::msgcat::mcset cs {This analysis task is already running. Do you wish to kill it?} ::msgcat::mcset cs {This function is not available.} ::msgcat::mcset cs {This function is not currently supported for this port.} ::msgcat::mcset cs {Tickmarks} ::msgcat::mcset cs {Tile Frames} [encoding convertfrom iso8859-2 {Snímky do dla¾dic}] ::msgcat::mcset cs {Tile Parameters} [encoding convertfrom iso8859-2 {Parametry dla¾dic}] ::msgcat::mcset cs {Tile} [encoding convertfrom iso8859-2 {Dla¾dice}] ::msgcat::mcset cs {Times} ::msgcat::mcset cs {Title} ::msgcat::mcset cs {Tophat} ::msgcat::mcset cs {Topographic} ::msgcat::mcset cs {Top} ::msgcat::mcset cs {To} ::msgcat::mcset cs {Transparency} ::msgcat::mcset cs {Triangle} ::msgcat::mcset cs {Type} ::msgcat::mcset cs {URL} ::msgcat::mcset cs {Unable to connect directly: using Web Proxy} ::msgcat::mcset cs {Unable to determine date of observation} ::msgcat::mcset cs {Unable to determine time of observation} ::msgcat::mcset cs {Unable to evaluate filter} ::msgcat::mcset cs {Unable to find SIAP window} ::msgcat::mcset cs {Unable to find URL column} ::msgcat::mcset cs {Unable to find catalog window} ::msgcat::mcset cs {Unable to find plot window} ::msgcat::mcset cs {Unable to load RGB image into a non-rgb frame} ::msgcat::mcset cs {Unable to load region file} ::msgcat::mcset cs {Unable to load} ::msgcat::mcset cs {Unable to locate URL} ::msgcat::mcset cs {Unable to match target with XPA Mime request} ::msgcat::mcset cs {Unable to open file} ::msgcat::mcset cs {Unable to process Analysis file} ::msgcat::mcset cs {Unable to save RGB image from a non-rgb frame} ::msgcat::mcset cs {Undo} [encoding convertfrom iso8859-2 {Zpìt}] ::msgcat::mcset cs {Unique} ::msgcat::mcset cs {Unists} ::msgcat::mcset cs {Units} ::msgcat::mcset cs {Unknown Colormap} ::msgcat::mcset cs {Unknown command} ::msgcat::mcset cs {Update Filter} ::msgcat::mcset cs {Update Group} ::msgcat::mcset cs {Update from Current Crosshair} ::msgcat::mcset cs {Update from Current Frame} ::msgcat::mcset cs {Update} ::msgcat::mcset cs {Upper Left Back} ::msgcat::mcset cs {Upper Left Front} ::msgcat::mcset cs {Upper Right Back} ::msgcat::mcset cs {Upper Right Front} ::msgcat::mcset cs {Use Authentication} ::msgcat::mcset cs {Use Current Frame on Download} ::msgcat::mcset cs {Use Internal Web Browser} ::msgcat::mcset cs {Use Proxy} ::msgcat::mcset cs {User Manual} [encoding convertfrom iso8859-2 {U¾ivatelský manuál}] ::msgcat::mcset cs {Username} ::msgcat::mcset cs {User} [encoding convertfrom iso8859-2 {U¾ivatelské}] ::msgcat::mcset cs {Use} [encoding convertfrom iso8859-2 {Pou¾ívat}] ::msgcat::mcset cs {VO Server} ::msgcat::mcset cs {VO} ::msgcat::mcset cs {Value} [encoding convertfrom iso8859-2 {Hodnota}] ::msgcat::mcset cs {Vector} ::msgcat::mcset cs {Vertical Graph} [encoding convertfrom iso8859-2 {Vertikální graf}] ::msgcat::mcset cs {Vertical Layout} [encoding convertfrom iso8859-2 {Vertikální rozlo¾ení}] ::msgcat::mcset cs {Vertical Text} ::msgcat::mcset cs {Vertical} ::msgcat::mcset cs {View} [encoding convertfrom iso8859-2 {Zobrazit}] ::msgcat::mcset cs {Virtual Observatory} [encoding convertfrom iso8859-2 {Virtuální Observatoø}] ::msgcat::mcset cs {WCS Parameters} [encoding convertfrom iso8859-2 {Detaily WCS}] ::msgcat::mcset cs {WCS} ::msgcat::mcset cs {Wavelength} ::msgcat::mcset cs {Web Browser} [encoding convertfrom iso8859-2 {Prohlí¾eè}] ::msgcat::mcset cs {White} ::msgcat::mcset cs {Width} [encoding convertfrom iso8859-2 {Tlou¹»ka}] ::msgcat::mcset cs {Window} ::msgcat::mcset cs {Words matching title, description} ::msgcat::mcset cs {X Axis Title} ::msgcat::mcset cs {X Grid} ::msgcat::mcset cs {XPA Information} ::msgcat::mcset cs {XPA not initialized} [encoding convertfrom iso8859-2] ::msgcat::mcset cs {XPA unable to verify hostname, setting XPA_METHOD to LOCAL} ::msgcat::mcset cs {XPA} ::msgcat::mcset cs {X} ::msgcat::mcset cs {Y Axis Title} ::msgcat::mcset cs {Y Grid} ::msgcat::mcset cs {Yellow} [encoding convertfrom iso8859-2 {®lutá}] ::msgcat::mcset cs {Y} ::msgcat::mcset cs {Z Axis Scale} ::msgcat::mcset cs {ZScale Parameters} [encoding convertfrom iso8859-2 {Parametry ZScale}] ::msgcat::mcset cs {Zero} [encoding convertfrom iso8859-2 {Nula}] ::msgcat::mcset cs {Zoom Fit} ::msgcat::mcset cs {Zoom In} [encoding convertfrom iso8859-2 {Zvìt¹it}] ::msgcat::mcset cs {Zoom Out} [encoding convertfrom iso8859-2 {Zmen¹it}] ::msgcat::mcset cs {Zoom} [encoding convertfrom iso8859-2 {Zvìt¹ení}] ::msgcat::mcset cs {and} ::msgcat::mcset cs {blue} [encoding convertfrom iso8859-2 {modrá}] ::msgcat::mcset cs {b} ::msgcat::mcset cs {color} [encoding convertfrom iso8859-2 {barva}] ::msgcat::mcset cs {cool} [encoding convertfrom iso8859-2 {chlad}] ::msgcat::mcset cs {green} [encoding convertfrom iso8859-2 {zelená}] ::msgcat::mcset cs {grey} [encoding convertfrom iso8859-2 {¹edá}] ::msgcat::mcset cs {g} ::msgcat::mcset cs {h5utils} ::msgcat::mcset cs {heat} [encoding convertfrom iso8859-2 {horko}] ::msgcat::mcset cs {not} ::msgcat::mcset cs {only} ::msgcat::mcset cs {or center of data} ::msgcat::mcset cs {rainbow} [encoding convertfrom iso8859-2 {duha}] ::msgcat::mcset cs {red} [encoding convertfrom iso8859-2 {èervená}] ::msgcat::mcset cs {rows of data have been downloaded. More may be available. You may wish to adjust the maximum allowed} [encoding convertfrom iso8859-2 {øádkù dat. Více jich mù¾e být k dispozici. Zkuste zmìnit povolené maximum}] ::msgcat::mcset cs {r} ::msgcat::mcset cs {staircase} [encoding convertfrom iso8859-2 {schodi¹tì}] ::msgcat::mcset cs {standard} ::msgcat::mcset cs {x} ::msgcat::mcset cs {} saods9/ds9/msgs/da.msg000644 000765 000000 00000117741 12741217134 015145 0ustar00joyewheel000000 000000 ::msgcat::mcset da {2D} ::msgcat::mcset da {3D} ::msgcat::mcset da {A postscript generation error has occurred} [encoding convertfrom iso8859-1 {En fejl er opstået under postscript generering}] ::msgcat::mcset da {AIP} ::msgcat::mcset da {Abort} ::msgcat::mcset da {About SAOImage DS9} {Om SAOImage DS9} ::msgcat::mcset da {About} {Om} ::msgcat::mcset da {Acknowledgment} {Tak} ::msgcat::mcset da {Add} [encoding convertfrom iso8859-1 {Tilføj}] ::msgcat::mcset da {Advanced} {Avanceret} ::msgcat::mcset da {Aligned} ::msgcat::mcset da {Align} {Juster} ::msgcat::mcset da {All Columns} {Alle søjler} ::msgcat::mcset da {All Rows} [encoding convertfrom iso8859-1 {Alle rækker}] ::msgcat::mcset da {All} {Alle} ::msgcat::mcset da {Always save files during Backup} ::msgcat::mcset da {Amplifier} [encoding convertfrom iso8859-1 {Forstærker}] ::msgcat::mcset da {An error has occurred during backup} ::msgcat::mcset da {An error has occurred during restore} ::msgcat::mcset da {An error has occurred invoking the Analysis task} [encoding convertfrom iso8859-1 {Fejl opstået ved kald til analyse program}] ::msgcat::mcset da {An error has occurred while creating image.} ::msgcat::mcset da {An error has occurred while creating the image. Please be sure that the ds9 window is in the upper left corner of the default screen and the entire window is visible.} ::msgcat::mcset da {An error has occurred while creating the image. Please be sure that the entire image window is visible on the screen.} ::msgcat::mcset da {An error has occurred while printing} [encoding convertfrom iso8859-1 {Fejl opstået under udskrivning}] ::msgcat::mcset da {An error has occurred while reading image.} ::msgcat::mcset da {An error has occurred while saving} [encoding convertfrom iso8859-1 {Fejl opstået under gemning}] ::msgcat::mcset da {An error has occurred while updating VO server list} ::msgcat::mcset da {An error has occurred while writing image.} ::msgcat::mcset da {An internal error has been detected} ::msgcat::mcset da {Analysis Command Log} {Analyse kommando logbog} ::msgcat::mcset da {Analysis Commands} [encoding convertfrom iso8859-1 {Analyse muligheder}] ::msgcat::mcset da {Analysis File} ::msgcat::mcset da {Analysis Log} ::msgcat::mcset da {Analysis} {Analyse} ::msgcat::mcset da {Angle Complement} [encoding convertfrom iso8859-1 {Komplementærvinkel}] ::msgcat::mcset da {Angles} {Vinkler} ::msgcat::mcset da {Angle} {Vinkel} ::msgcat::mcset da {Annuli} {Ringforme} ::msgcat::mcset da {Annulus} {Ringform} ::msgcat::mcset da {Apply} {Anvend} ::msgcat::mcset da {ArcMin} {Bueminutter} ::msgcat::mcset da {ArcSec} {Buesekunder} ::msgcat::mcset da {Architecture} {Arkitektur} ::msgcat::mcset da {Archives} ::msgcat::mcset da {Array} ::msgcat::mcset da {Arrow} {Pil} ::msgcat::mcset da {Astronomy} ::msgcat::mcset da {At Startup} ::msgcat::mcset da {At least 2 different catalogs are required} ::msgcat::mcset da {Auto Centroid} {Automatisk centroide} ::msgcat::mcset da {Auto Plot 2D} ::msgcat::mcset da {Auto Plot 3D} ::msgcat::mcset da {Auto Plot Statistics} ::msgcat::mcset da {Auto Plot} ::msgcat::mcset da {Autoload FITS Regions} [encoding convertfrom iso8859-1 {Indlæs automatisk FITS regioner}] ::msgcat::mcset da {Autoload} ::msgcat::mcset da {Automatic} {Automatisk} ::msgcat::mcset da {Average} [encoding convertfrom iso8859-1 {Middelværdi}] ::msgcat::mcset da {Axes Number} ::msgcat::mcset da {Axes Order} ::msgcat::mcset da {Axes Title} ::msgcat::mcset da {Axes} {Akser} ::msgcat::mcset da {Axis Length} [encoding convertfrom iso8859-1 {Akse længde}] ::msgcat::mcset da {Axis Numbers} {Akse tal} ::msgcat::mcset da {Axis Title} ::msgcat::mcset da {Axis} {Akser} ::msgcat::mcset da {Azimuth} ::msgcat::mcset da {Background Color} {Baggrunds farve} ::msgcat::mcset da {Background} {Baggrund} ::msgcat::mcset da {Backup} ::msgcat::mcset da {Back} {Tilbage} ::msgcat::mcset da {Bar Plot Tool} ::msgcat::mcset da {Bias} {Bias} ::msgcat::mcset da {Bin 3rd Column} [encoding convertfrom iso8859-1 {Bin 3dje søjle}] ::msgcat::mcset da {Bin Center} {Bin center} ::msgcat::mcset da {Bin Columns} [encoding convertfrom iso8859-1 {Bin søjler}] ::msgcat::mcset da {Bin Filter} {Bin filter} ::msgcat::mcset da {Bin Fit} ::msgcat::mcset da {Bin In} ::msgcat::mcset da {Bin Out} ::msgcat::mcset da {Binning Parameters} {Parameter binning} ::msgcat::mcset da {Bin} {Bin} ::msgcat::mcset da {Black} {Sort} ::msgcat::mcset da {Blank/Inf/NaN Color} {Blank/Inf/NaN farve} ::msgcat::mcset da {Blink Frames} {Blink rammer} ::msgcat::mcset da {Blink Interval} {Blinke interval} ::msgcat::mcset da {Blink} {Blink} ::msgcat::mcset da {Block Fit} ::msgcat::mcset da {Block In} {Bin ind} ::msgcat::mcset da {Block Out} {Bin ud} ::msgcat::mcset da {Block Parameters} ::msgcat::mcset da {Block} {Bin} ::msgcat::mcset da {Blue} [encoding convertfrom iso8859-1 {Blå}] ::msgcat::mcset da {Bold} {Fed} ::msgcat::mcset da {Border} {Kant} ::msgcat::mcset da {Bottom} ::msgcat::mcset da {Box Annulus} {Kasseformet ringform} ::msgcat::mcset da {Box Panda} {Kasseformet panda} ::msgcat::mcset da {BoxCircle} ::msgcat::mcset da {Boxcar} {Kvadratisk kernel} ::msgcat::mcset da {Box} {Kasse} ::msgcat::mcset da {Broadcast} ::msgcat::mcset da {Browser} ::msgcat::mcset da {Browse} ::msgcat::mcset da {Buffer} ::msgcat::mcset da {Buttonbar} ::msgcat::mcset da {Buttons} {Knapper} ::msgcat::mcset da {Bytes} ::msgcat::mcset da {CMYK} ::msgcat::mcset da {Can Delete} [encoding convertfrom iso8859-1 {Må slette}] ::msgcat::mcset da {Can Edit} [encoding convertfrom iso8859-1 {Må redigere}] ::msgcat::mcset da {Can Move} [encoding convertfrom iso8859-1 {Må flytte}] ::msgcat::mcset da {Can Rotate} [encoding convertfrom iso8859-1 {Må rotere}] ::msgcat::mcset da {Cancelled} ::msgcat::mcset da {Cancel} {Slet} ::msgcat::mcset da {Cap} ::msgcat::mcset da {Catalog Server} {Katalog server} ::msgcat::mcset da {Catalog Tool} {Katalog funktion} ::msgcat::mcset da {Catalogs} {Kataloger} ::msgcat::mcset da {Catalog} {Katalog} ::msgcat::mcset da {Catrom} ::msgcat::mcset da {Cat} ::msgcat::mcset da {Center Image} {Centrer billedet} ::msgcat::mcset da {Center Non-modal Dialogs} ::msgcat::mcset da {Center} {Centrer} ::msgcat::mcset da {Centroid Parameters} ::msgcat::mcset da {Centroid} {Centroide} ::msgcat::mcset da {Circle} {Cirkel} ::msgcat::mcset da {Clear All} {Fjern alt} ::msgcat::mcset da {Clear Analysis Commands} {Fjern analyse funktioner} ::msgcat::mcset da {Clear Cache} [encoding convertfrom iso8859-1 {Tøm cache}] ::msgcat::mcset da {Clear Data} {Fjern data} ::msgcat::mcset da {Clear External Analysis Commands?} [encoding convertfrom iso8859-1 {Ryd ekstern analyse kommandoer?}] ::msgcat::mcset da {Clear Filter} {Fjern filter} ::msgcat::mcset da {Clear Frame} {Ryd ramme} ::msgcat::mcset da {Clear Preferences?} {Nulstil foretrukne?} ::msgcat::mcset da {Clear Preferences} {Nulstil foretrukne} ::msgcat::mcset da {Clear} {Fjern} ::msgcat::mcset da {Click to Center} {Klik for centrering} ::msgcat::mcset da {Close} {Luk} ::msgcat::mcset da {Colorbar Size} ::msgcat::mcset da {Colorbar} {Farvekode} ::msgcat::mcset da {Colormap Parameters} {Farvetabel parametre} ::msgcat::mcset da {Colormap} {Farvetabel} ::msgcat::mcset da {Color} {Farve} ::msgcat::mcset da {Columns} [encoding convertfrom iso8859-1 {Søjler}] ::msgcat::mcset da {Column} [encoding convertfrom iso8859-1 {Søjle}] ::msgcat::mcset da {Command not allowed} ::msgcat::mcset da {Command} ::msgcat::mcset da {Compass} {Kompas} ::msgcat::mcset da {Composite Region} ::msgcat::mcset da {Composite} {Sammensat} ::msgcat::mcset da {Compression} {Komprimer} ::msgcat::mcset da {Configure} {Konfigurer} ::msgcat::mcset da {Connect Directly} {Tilslut direkte} ::msgcat::mcset da {Connect SAMP} ::msgcat::mcset da {Connect Using Web Proxy} {Tilslut via web proxy} ::msgcat::mcset da {Connect} ::msgcat::mcset da {Console} {konsol} ::msgcat::mcset da {Contacting Image Server} ::msgcat::mcset da {Contour Parameters} {Kontur parametre} ::msgcat::mcset da {Contours} {Konturer} ::msgcat::mcset da {Contour} {Konturer} ::msgcat::mcset da {Contrast} {Kontrast} ::msgcat::mcset da {Convert to Polygons} {Omdan til poygoner} ::msgcat::mcset da {Coordinate Grid Parameters} {Koordinatnetparametre} ::msgcat::mcset da {Coordinate Grid} {Koordinatnet} ::msgcat::mcset da {Coordinate System} {Koordinat system} ::msgcat::mcset da {Coordinates} {Koordinater} ::msgcat::mcset da {Coordinate} {Koordinat} ::msgcat::mcset da {Copy Contours} {Kopier konturer} ::msgcat::mcset da {Copy to Regions} {kopier til regioner} ::msgcat::mcset da {Copy} {Kopier} ::msgcat::mcset da {Create Movie} ::msgcat::mcset da {Create New Frame on Download} {Dan en ny ramme under hentning} ::msgcat::mcset da {Create} ::msgcat::mcset da {Crop Parameters} ::msgcat::mcset da {Crop} ::msgcat::mcset da {Crosshair Parameters} ::msgcat::mcset da {Crosshair To} [encoding convertfrom iso8859-1 {Trådkors til}] ::msgcat::mcset da {Crosshair} [encoding convertfrom iso8859-1 {Trådkors}] ::msgcat::mcset da {Cross} {Kryds} ::msgcat::mcset da {Cubehelix} ::msgcat::mcset da {Cube} ::msgcat::mcset da {Cubic} ::msgcat::mcset da {Current Frame} {Denne ramme} ::msgcat::mcset da {Current Range} {Dette interval} ::msgcat::mcset da {Current} {Denne} ::msgcat::mcset da {Cursor} ::msgcat::mcset da {Cut} [encoding convertfrom iso8859-1 {Beskær}] ::msgcat::mcset da {Cyan} {Cyan} ::msgcat::mcset da {DPI} ::msgcat::mcset da {DS9 has detected a newer version of a backup file and therefore will not process this file.} ::msgcat::mcset da {DS9 has detected a newer version of a preferences file.} ::msgcat::mcset da {DS9 has detected an older backup file, do you wish to continue?} ::msgcat::mcset da {DS9 has detected an older preferences file, do you wish to update?} [encoding convertfrom iso8859-1 {DS9 har fundet en ældre fil med foretrukne indstillinger, ønsker du at opdatere?}] ::msgcat::mcset da {DS9 will complete the initialization process} [encoding convertfrom iso8859-1 {DS9 vil fuldføre initialiserings processen}] ::msgcat::mcset da {Dash} {streg} ::msgcat::mcset da {Data Format} {Dataformat} ::msgcat::mcset da {Dataset Name} ::msgcat::mcset da {Dataset} [encoding convertfrom iso8859-1 {Datasæt}] ::msgcat::mcset da {Data} ::msgcat::mcset da {Decrease} {Aftag} ::msgcat::mcset da {Default All Files} ::msgcat::mcset da {Default Format} ::msgcat::mcset da {Default Length} ::msgcat::mcset da {Default} {Standard} ::msgcat::mcset da {Degrees} {Grader} ::msgcat::mcset da {Delete All Frames?} {Slet alle rammer?} ::msgcat::mcset da {Delete All Frames} {Slet alle rammer} ::msgcat::mcset da {Delete All Groups?} {Slet alle grupper?} ::msgcat::mcset da {Delete All Groups} {Slet alle grupper} ::msgcat::mcset da {Delete All Regions?} {Slet alle områder?} ::msgcat::mcset da {Delete All Regions} {Slet alle områder} ::msgcat::mcset da {Delete All} {Slet alt} ::msgcat::mcset da {Delete Color Tags} ::msgcat::mcset da {Delete Frame} {Slet denne ramme} ::msgcat::mcset da {Delete Group} {Slet gruppe} ::msgcat::mcset da {Delete Selected Regions} [encoding convertfrom iso8859-1 {Slet valgte områder}] ::msgcat::mcset da {Delete} {Slet} ::msgcat::mcset da {Depth} {Dybde} ::msgcat::mcset da {Detector} {Detektor} ::msgcat::mcset da {Dialog Box} {Dialog vindue} ::msgcat::mcset da {Diamond} {Ruder} ::msgcat::mcset da {Dimension} {Dimension} ::msgcat::mcset da {Direction} ::msgcat::mcset da {Disconnect} ::msgcat::mcset da {Display Header} ::msgcat::mcset da {Display Size} [encoding convertfrom iso8859-1 {Vis størrelse}] ::msgcat::mcset da {Dissolve} [encoding convertfrom iso8859-1 {Opløs}] ::msgcat::mcset da {Distance} ::msgcat::mcset da {Done} ::msgcat::mcset da {Download Colormap} ::msgcat::mcset da {Download VOTABLE format if available} ::msgcat::mcset da {Drag to Center} [encoding convertfrom iso8859-1 {Træk til center}] ::msgcat::mcset da {Duplicate Data} ::msgcat::mcset da {East} [encoding convertfrom iso8859-1 {Øst}] ::msgcat::mcset da {Ecliptic} {Ekliptisk} ::msgcat::mcset da {Edit Group Name} {Rediger gruppe navn} ::msgcat::mcset da {Edit} {Rediger} ::msgcat::mcset da {Elevation} {Stigning} ::msgcat::mcset da {Ellipse Annulus} ::msgcat::mcset da {Ellipse Panda} {Ellipse Panda} ::msgcat::mcset da {Ellipse} {Ellipse} ::msgcat::mcset da {Elliptical Annulus} {Elliptisk ringform} ::msgcat::mcset da {Elliptical Panda} {Elliptisk pandaform} ::msgcat::mcset da {Enable Confirmation Dialogs} [encoding convertfrom iso8859-1 {Aktiver bekræftelsesdialoger}] ::msgcat::mcset da {Enable} ::msgcat::mcset da {End} {Afslut} ::msgcat::mcset da {Enter Color} {Angiv farve} ::msgcat::mcset da {Enter Font Size} ::msgcat::mcset da {Enter Group Name} {Indtast gruppenavn} ::msgcat::mcset da {Enter Search Expression} [encoding convertfrom iso8859-1 {Angiv søgeudtryk}] ::msgcat::mcset da {Enter URL} ::msgcat::mcset da {Entry} ::msgcat::mcset da {Equal Area} {Samme areal} ::msgcat::mcset da {Equal Distance} {Samme afstand} ::msgcat::mcset da {Equal Spacing} ::msgcat::mcset da {Equal Value} ::msgcat::mcset da {Error code was returned} {Fejlkode blev returneret} ::msgcat::mcset da {Error} {Fejl} ::msgcat::mcset da {Examine Frame} [encoding convertfrom iso8859-1 {Undersøg ramme}] ::msgcat::mcset da {Examine} [encoding convertfrom iso8859-1 {Undersøg}] ::msgcat::mcset da {Exam} ::msgcat::mcset da {Exclude} {Udelad} ::msgcat::mcset da {Exit} {Luk} ::msgcat::mcset da {Export Array} ::msgcat::mcset da {Export} ::msgcat::mcset da {Extention} ::msgcat::mcset da {Exterior Axes} {Udvendige akser} ::msgcat::mcset da {Exterior Numerics} {Udvendige tal} ::msgcat::mcset da {FAQ} [encoding convertfrom iso8859-1 {Ofte Stillede Spørgsmål}] ::msgcat::mcset da {FK4} ::msgcat::mcset da {FK5} ::msgcat::mcset da {Factor} ::msgcat::mcset da {File not Found or Unable to load FITS data MIME type} [encoding convertfrom iso8859-1 {Filen blev ikke fundet, eller det var ikke muligt at åbne FITS data MIME filtype}] ::msgcat::mcset da {Filename} {Filnavn} ::msgcat::mcset da {File} {Fil} ::msgcat::mcset da {Fill} ::msgcat::mcset da {Filter} {Filter} ::msgcat::mcset da {Find Next} [encoding convertfrom iso8859-1 {Find næste}] ::msgcat::mcset da {Find} {Find} ::msgcat::mcset da {First Frame} [encoding convertfrom iso8859-1 {Første ramme}] ::msgcat::mcset da {First} [encoding convertfrom iso8859-1 {Første}] ::msgcat::mcset da {Fits} ::msgcat::mcset da {Fixed in Size} [encoding convertfrom iso8859-1 {Fastlåst størrelse}] ::msgcat::mcset da {Flat} ::msgcat::mcset da {Flip} ::msgcat::mcset da {Font} {Skrifttype} ::msgcat::mcset da {For more information, use --help} ::msgcat::mcset da {Format} {Format} ::msgcat::mcset da {Forward} {Videre} ::msgcat::mcset da {Found} {Fundet} ::msgcat::mcset da {Frame Information} {Information for ramme} ::msgcat::mcset da {Frame Parameters} ::msgcat::mcset da {Frames} ::msgcat::mcset da {Frame} {Ramme} ::msgcat::mcset da {From} ::msgcat::mcset da {Front} {Foran} ::msgcat::mcset da {Full Range} {Hele intervallet} ::msgcat::mcset da {Function} {Funktion} ::msgcat::mcset da {GUI Font} ::msgcat::mcset da {Galactic} {Galaktisk} ::msgcat::mcset da {Gap} ::msgcat::mcset da {Gaussian} {Gaussisk} ::msgcat::mcset da {General} {Generel} ::msgcat::mcset da {Generate} {Opret} ::msgcat::mcset da {Generating Regions} [encoding convertfrom iso8859-1 {danner områder}] ::msgcat::mcset da {Get Information} {Hent information} ::msgcat::mcset da {Gist} ::msgcat::mcset da {Global Properties} ::msgcat::mcset da {Global} {Global} ::msgcat::mcset da {Goto Frame} [encoding convertfrom iso8859-1 {Gå til ramme}] ::msgcat::mcset da {Graph Horz} {vandret graf} ::msgcat::mcset da {Graph Vert} {lodret graf} ::msgcat::mcset da {Graphics} {Grafisk} ::msgcat::mcset da {Graphs} ::msgcat::mcset da {Graph} {graf} ::msgcat::mcset da {Grayscale} [encoding convertfrom iso8859-1 {Gråskala}] ::msgcat::mcset da {Green} [encoding convertfrom iso8859-1 {Grøn}] ::msgcat::mcset da {Grid Gap} {Mellemrum i nettet} ::msgcat::mcset da {Grid} {Net} ::msgcat::mcset da {Groove} ::msgcat::mcset da {Groups} {Gupper} ::msgcat::mcset da {HTTP} {HTTP} ::msgcat::mcset da {Header} {Hovede} ::msgcat::mcset da {Height} [encoding convertfrom iso8859-1 {Højde}] ::msgcat::mcset da {Help Desk} [encoding convertfrom iso8859-1 {Hjælp}] ::msgcat::mcset da {Help Me Choose} [encoding convertfrom iso8859-1 {Hjælp mig at vælge}] ::msgcat::mcset da {Help} [encoding convertfrom iso8859-1 {Hjælp}] ::msgcat::mcset da {Hide All} {Gem alle} ::msgcat::mcset da {Highlite} ::msgcat::mcset da {High} [encoding convertfrom iso8859-1 {Høj}] ::msgcat::mcset da {Histogram Equalization} {Histogram udligning} ::msgcat::mcset da {Histogram} {Histogram} ::msgcat::mcset da {Horizontal Graph} {Vandret graf} ::msgcat::mcset da {Horizontal Layout} {Vandret layout} ::msgcat::mcset da {Horizontal} ::msgcat::mcset da {IAU Location Code} ::msgcat::mcset da {ICRS} ::msgcat::mcset da {Identification} {Identifikation} ::msgcat::mcset da {If} {Hvis} ::msgcat::mcset da {Image Servers} ::msgcat::mcset da {Image} {Billed} ::msgcat::mcset da {Import Array} ::msgcat::mcset da {Import} ::msgcat::mcset da {Include} {Inkluder} ::msgcat::mcset da {Increase} [encoding convertfrom iso8859-1 {Forøg}] ::msgcat::mcset da {Information Panel} {Informations panel} ::msgcat::mcset da {Information} {Information} ::msgcat::mcset da {Initialize XPA} {Initialiser XPA} ::msgcat::mcset da {Inner} {Indre} ::msgcat::mcset da {Instrument FOV} {Instrument FOV} ::msgcat::mcset da {Interior Axes} {Indre akser} ::msgcat::mcset da {Interior Numerics} {Indre tal} ::msgcat::mcset da {Internal Parse Error} ::msgcat::mcset da {Interval} {Interval} ::msgcat::mcset da {Invalid Column Name} ::msgcat::mcset da {Invalid formated multipart/mixed mime type message} {Forkert formatteret opdelt eller blandet mime type meddelelse} ::msgcat::mcset da {Invert Colormap} {Vend farvetabel} ::msgcat::mcset da {Invert Selection} {Inverter valg} ::msgcat::mcset da {Invert} {Inverter} ::msgcat::mcset da {Italic} {Kursiv} ::msgcat::mcset da {Items Found} {Emner fundet} ::msgcat::mcset da {Iteration} ::msgcat::mcset da {JPEG Quality Factor} {JPEG kvalitetsfaktor} ::msgcat::mcset da {Keep-Alive} ::msgcat::mcset da {Kernel} ::msgcat::mcset da {Keyboard Shortcuts} {Tastatur genveje} ::msgcat::mcset da {Keyboard} {Tastatur} ::msgcat::mcset da {Keyword} ::msgcat::mcset da {Labels} {Etiketter} ::msgcat::mcset da {Label} {Etikette} ::msgcat::mcset da {Landscape} {Landskab} ::msgcat::mcset da {Language} {Sprog} ::msgcat::mcset da {Last Frame} {Sidste ramme} ::msgcat::mcset da {Last} {Sidste} ::msgcat::mcset da {Layout Horz} ::msgcat::mcset da {Layout Vert} ::msgcat::mcset da {Layout} ::msgcat::mcset da {Left} ::msgcat::mcset da {Legal} ::msgcat::mcset da {Legend Title} ::msgcat::mcset da {Legend} ::msgcat::mcset da {Length} [encoding convertfrom iso8859-1 {Længde}] ::msgcat::mcset da {Letter} ::msgcat::mcset da {Levels} {Niveauer} ::msgcat::mcset da {Level} {Niveau} ::msgcat::mcset da {Limits} [encoding convertfrom iso8859-1 {Grænser}] ::msgcat::mcset da {Line Plot Tool} ::msgcat::mcset da {Linear} [encoding convertfrom iso8859-1 {Lineær}] ::msgcat::mcset da {Line} {Linie} ::msgcat::mcset da {List Data} ::msgcat::mcset da {List Regions} [encoding convertfrom iso8859-1 {Vis områder}] ::msgcat::mcset da {List} {Liste} ::msgcat::mcset da {Load Analysis Commands} [encoding convertfrom iso8859-1 {Indlæs analyse funktioner}] ::msgcat::mcset da {Load Color Tags} ::msgcat::mcset da {Load Colormap} [encoding convertfrom iso8859-1 {Indlæs farvekort}] ::msgcat::mcset da {Load Configuration} [encoding convertfrom iso8859-1 {Indlæs konfiguration}] ::msgcat::mcset da {Load Contour Levels} [encoding convertfrom iso8859-1 {Indlæs konturniveauer}] ::msgcat::mcset da {Load Contours} [encoding convertfrom iso8859-1 {indlæs konturer}] ::msgcat::mcset da {Load Contrast/Bias} [encoding convertfrom iso8859-1 {Indlæs kontrast/bias}] ::msgcat::mcset da {Load Data} [encoding convertfrom iso8859-1 {Indlæs data}] ::msgcat::mcset da {Load Mosaic} [encoding convertfrom iso8859-1 {Indlæs mosaik}] ::msgcat::mcset da {Load Regions} [encoding convertfrom iso8859-1 {Indlæs områder}] ::msgcat::mcset da {Load Template} [encoding convertfrom iso8859-1 {Indlæs skabelon}] ::msgcat::mcset da {Load into All Frames} ::msgcat::mcset da {Load into Current Frame} ::msgcat::mcset da {Loading Catalog} ::msgcat::mcset da {Loading} ::msgcat::mcset da {Load} [encoding convertfrom iso8859-1 {Indlæs}] ::msgcat::mcset da {Local} {Lokal} ::msgcat::mcset da {Lock Axes} ::msgcat::mcset da {Lock Bin} ::msgcat::mcset da {Lock Color} ::msgcat::mcset da {Lock Crop Amplifier} ::msgcat::mcset da {Lock Crop Detector} ::msgcat::mcset da {Lock Crop Image} ::msgcat::mcset da {Lock Crop None} ::msgcat::mcset da {Lock Crop Physical} ::msgcat::mcset da {Lock Crop WCS} ::msgcat::mcset da {Lock Crosshair Amplifier} ::msgcat::mcset da {Lock Crosshair Detector} ::msgcat::mcset da {Lock Crosshair Image} ::msgcat::mcset da {Lock Crosshair None} ::msgcat::mcset da {Lock Crosshair Physical} ::msgcat::mcset da {Lock Crosshair WCS} ::msgcat::mcset da {Lock Frame Amplifier} ::msgcat::mcset da {Lock Frame Detector} ::msgcat::mcset da {Lock Frame Image} ::msgcat::mcset da {Lock Frame None} ::msgcat::mcset da {Lock Frame Physical} ::msgcat::mcset da {Lock Frame WCS} ::msgcat::mcset da {Lock Limits} ::msgcat::mcset da {Lock Scale} ::msgcat::mcset da {Lock Slice Image} ::msgcat::mcset da {Lock Slice None} ::msgcat::mcset da {Lock Slice WCS} ::msgcat::mcset da {Lock Smooth} ::msgcat::mcset da {Lock} [encoding convertfrom iso8859-1 {Lås}] ::msgcat::mcset da {Log Exponent} ::msgcat::mcset da {Log} ::msgcat::mcset da {Low High} [encoding convertfrom iso8859-1 {Lav høj}] ::msgcat::mcset da {Lower Left Back} ::msgcat::mcset da {Lower Left Front} ::msgcat::mcset da {Lower Right Back} ::msgcat::mcset da {Lower Right Front} ::msgcat::mcset da {Low} {lav} ::msgcat::mcset da {MIP} ::msgcat::mcset da {Magenta} ::msgcat::mcset da {Magnification} ::msgcat::mcset da {Magnifier} [encoding convertfrom iso8859-1 {Forstørrelse}] ::msgcat::mcset da {Major} ::msgcat::mcset da {Manual} ::msgcat::mcset da {Mask Parameters} {Maske parametre} ::msgcat::mcset da {Match Axes} ::msgcat::mcset da {Match Bin} ::msgcat::mcset da {Match Catalog requires at least 1 row per catalog} ::msgcat::mcset da {Match Color} ::msgcat::mcset da {Match Crop Amplifier} ::msgcat::mcset da {Match Crop Detector} ::msgcat::mcset da {Match Crop Image} ::msgcat::mcset da {Match Crop Physical} ::msgcat::mcset da {Match Crop WCS} ::msgcat::mcset da {Match Crosshair Amplifier} ::msgcat::mcset da {Match Crosshair Detector} ::msgcat::mcset da {Match Crosshair Image} ::msgcat::mcset da {Match Crosshair Physical} ::msgcat::mcset da {Match Crosshair WCS} ::msgcat::mcset da {Match Frame Amplifier} ::msgcat::mcset da {Match Frame Detector} ::msgcat::mcset da {Match Frame Image} ::msgcat::mcset da {Match Frame Physical} ::msgcat::mcset da {Match Frame WCS} ::msgcat::mcset da {Match Limits} ::msgcat::mcset da {Match Scale} ::msgcat::mcset da {Match Slice Image} ::msgcat::mcset da {Match Slice WCS} ::msgcat::mcset da {Match Smooth} ::msgcat::mcset da {Match} ::msgcat::mcset da {Math Function} {Matematisk funktion} ::msgcat::mcset da {Matplotlib} ::msgcat::mcset da {Max Rows} {Maks antal rækker} ::msgcat::mcset da {Maximum} ::msgcat::mcset da {Max} {Maks} ::msgcat::mcset da {Menus and Buttons} ::msgcat::mcset da {Menu} ::msgcat::mcset da {Message Log} ::msgcat::mcset da {Method} {Metode} ::msgcat::mcset da {Min Max Parameters} ::msgcat::mcset da {Min Max} {Min Maks} ::msgcat::mcset da {Minimum} ::msgcat::mcset da {Minor} ::msgcat::mcset da {Minutes} ::msgcat::mcset da {Min} ::msgcat::mcset da {Mission} ::msgcat::mcset da {Mode} ::msgcat::mcset da {Mosaic IRAF Segment} ::msgcat::mcset da {Mosaic IRAF} ::msgcat::mcset da {Mosaic WCS Segment} ::msgcat::mcset da {Mosaic WCS} ::msgcat::mcset da {Mosaic WFPC2} ::msgcat::mcset da {Mosaic} ::msgcat::mcset da {Mouse Click Epsilon} ::msgcat::mcset da {Mouse Wheel Bin} ::msgcat::mcset da {Mouse Wheel Zoom} ::msgcat::mcset da {Mouse and Keyboard} ::msgcat::mcset da {Move Back} {flyt tilbage} ::msgcat::mcset da {Move First} {flyt forrest} ::msgcat::mcset da {Move Forward} {flyt frem} ::msgcat::mcset da {Move Frame} ::msgcat::mcset da {Move Last} {flyt sidst} ::msgcat::mcset da {Move to Back} {Bag} ::msgcat::mcset da {Move to Front} {Foran} ::msgcat::mcset da {Movie} ::msgcat::mcset da {Multiple Extension Cube} ::msgcat::mcset da {Multiple Extension Frames} ::msgcat::mcset da {Multiple WCS} {Multipel WCS} ::msgcat::mcset da {NRRD} ::msgcat::mcset da {Name Resolution} [encoding convertfrom iso8859-1 {Navnesøgning}] ::msgcat::mcset da {Name Server} {Navneserver} ::msgcat::mcset da {Name or Designation} {navn eller beskrivelse} ::msgcat::mcset da {Name} ::msgcat::mcset da {Native Dialog} {Oprindelig dialog} ::msgcat::mcset da {New Features} {Nye egenskaber} ::msgcat::mcset da {New Frame 3D} {Ny ramme 3D} ::msgcat::mcset da {New Frame RGB} {Ny ramme (RGB)} ::msgcat::mcset da {New Frame each Time} {Ny ramme hver gang} ::msgcat::mcset da {New Frame} {Ny ramme} ::msgcat::mcset da {New Group} {Ny gruppe} ::msgcat::mcset da {New} {Ny} ::msgcat::mcset da {Next Frame} [encoding convertfrom iso8859-1 {Næste ramme}] ::msgcat::mcset da {Next} [encoding convertfrom iso8859-1 {Næste}] ::msgcat::mcset da {No Catalog specified} {Intet katalog er specificeret} ::msgcat::mcset da {No Data Available} ::msgcat::mcset da {No Items Found} {Ingen emner er fundet} ::msgcat::mcset da {No current frame} ::msgcat::mcset da {Non-zero} {ikke-nul} ::msgcat::mcset da {None} [encoding convertfrom iso8859-1 {Ingen}] ::msgcat::mcset da {Normal} {Normal} ::msgcat::mcset da {North} {Nord} ::msgcat::mcset da {Not Found} ::msgcat::mcset da {Not Supported} ::msgcat::mcset da {Number of Samples} {Antal} ::msgcat::mcset da {Number of Threads} ::msgcat::mcset da {Number of Ticks} ::msgcat::mcset da {Number} {Antal} ::msgcat::mcset da {Numerics} {Talværdier} ::msgcat::mcset da {OK} ::msgcat::mcset da {Object} {Objekt} ::msgcat::mcset da {Open File} {Åben fil} ::msgcat::mcset da {Open TCL Console} [encoding convertfrom iso8859-1 {Åben TCL konsol}] ::msgcat::mcset da {Open URL} [encoding convertfrom iso8859-1 {Åben URL}] ::msgcat::mcset da {Open as} ::msgcat::mcset da {Open} [encoding convertfrom iso8859-1 {Åben}] ::msgcat::mcset da {Operator} ::msgcat::mcset da {Orientation} {Orientering} ::msgcat::mcset da {Origin} ::msgcat::mcset da {Oscillate} ::msgcat::mcset da {Other Color} ::msgcat::mcset da {Other Font Size} ::msgcat::mcset da {Other} {Anden} ::msgcat::mcset da {Outer} {Ydre} ::msgcat::mcset da {Overlap} ::msgcat::mcset da {PS Page Setup} {PS side opsætning} ::msgcat::mcset da {PS Print} {PS udskrift} ::msgcat::mcset da {Page Setup} [encoding convertfrom iso8859-1 {Side opsætning}] ::msgcat::mcset da {Page Source} {Side kilde} ::msgcat::mcset da {Pan To} {Flyt til} ::msgcat::mcset da {Pan Zoom Rotate Parameters} [encoding convertfrom iso8859-1 {Flyt Zoom Rotér parametre}] ::msgcat::mcset da {Pan Zoom} {Flyt Zoom} ::msgcat::mcset da {Pan then Zoom} {Flyt og derefter zoom} ::msgcat::mcset da {Panda} ::msgcat::mcset da {Panner} {Oversigtskort} ::msgcat::mcset da {Pan} {Flyt} ::msgcat::mcset da {Parameters} {Parametre} ::msgcat::mcset da {Password} {Kodeord} ::msgcat::mcset da {Paste Contours} {Indsæt konturer} ::msgcat::mcset da {Paste} [encoding convertfrom iso8859-1 {Sæt ind}] ::msgcat::mcset da {Physical} {Fysisk} ::msgcat::mcset da {Pixel Distribution} {Pixelfordeling} ::msgcat::mcset da {Pixel Size} [encoding convertfrom iso8859-1 {Pixelstørrelse}] ::msgcat::mcset da {Pixel Table} {Pixel tabel} ::msgcat::mcset da {Pixels} {Pixler} ::msgcat::mcset da {Play} {Afspil} ::msgcat::mcset da {Please Select a Region} ::msgcat::mcset da {Please change the file's permission to disable other users write access. Use anyway?} ::msgcat::mcset da {Please specify width, height, and either name or (ra,dec)} [encoding convertfrom iso8859-1 {angiv venligst bredde, højde, og enten navn eller (ra,dec)}] ::msgcat::mcset da {Plot 2D} ::msgcat::mcset da {Plot 3D} ::msgcat::mcset da {Plot Title} {Plot titel} ::msgcat::mcset da {Plotting Regions} [encoding convertfrom iso8859-1 {Plotte områder}] ::msgcat::mcset da {Plot} ::msgcat::mcset da {Plus} ::msgcat::mcset da {Pointer} {Pegepil} ::msgcat::mcset da {Points} {Punkter} ::msgcat::mcset da {Point} {Punkt} ::msgcat::mcset da {Polygon} {Polygon} ::msgcat::mcset da {Portrait} [encoding convertfrom iso8859-1 {Portræt}] ::msgcat::mcset da {Poster} {Plakat} ::msgcat::mcset da {Postscript Page Setup} [encoding convertfrom iso8859-1 {Postscript side opsætning}] ::msgcat::mcset da {Postscript Print} {Postscript udskriv} ::msgcat::mcset da {Postscript} ::msgcat::mcset da {Power} {Potenslov} ::msgcat::mcset da {Preferences} {Foretrukne} ::msgcat::mcset da {Preserve During Load} [encoding convertfrom iso8859-1 {Bevar under indlæsning}] ::msgcat::mcset da {Previous Frame} [encoding convertfrom iso8859-1 {Foregående ramme}] ::msgcat::mcset da {Previous} [encoding convertfrom iso8859-1 {Foregående}] ::msgcat::mcset da {Prev} ::msgcat::mcset da {Print Coordinates} {Udskriv koordinater} ::msgcat::mcset da {Print To} {Udskriv til} ::msgcat::mcset da {Printer} {Printer} ::msgcat::mcset da {Print} {Udskriv} ::msgcat::mcset da {Projection} {Projektion} ::msgcat::mcset da {Properties} {Egenskaber} ::msgcat::mcset da {Property} {Egenskab} ::msgcat::mcset da {Proxy Host} ::msgcat::mcset da {Proxy Port} ::msgcat::mcset da {Publication} {Publikation} ::msgcat::mcset da {Quadratic} {Kvadratisk} ::msgcat::mcset da {RGB Array} ::msgcat::mcset da {RGB Cube} ::msgcat::mcset da {RGB Image} ::msgcat::mcset da {RGB} ::msgcat::mcset da {Radial Profile} ::msgcat::mcset da {Radial} ::msgcat::mcset da {Radius} ::msgcat::mcset da {Raised} ::msgcat::mcset da {Range} ::msgcat::mcset da {Redo} {Gentag sidste} ::msgcat::mcset da {Red} [encoding convertfrom iso8859-1 {Rød}] ::msgcat::mcset da {Reference Manual} ::msgcat::mcset da {Reference} ::msgcat::mcset da {Refresh Frame} {Opdater ramme} ::msgcat::mcset da {Refresh} {Opdater} ::msgcat::mcset da {Region Parameters} ::msgcat::mcset da {Region} [encoding convertfrom iso8859-1 {Område}] ::msgcat::mcset da {Release Notes} {Frigvelsesnoter} ::msgcat::mcset da {Release} {Frigivelsesnoter} ::msgcat::mcset da {Relief} ::msgcat::mcset da {Reload} {Genhent} ::msgcat::mcset da {Render} ::msgcat::mcset da {Repeat} ::msgcat::mcset da {Reset Colormap} {Nulstil farvetabel} ::msgcat::mcset da {Reset Frame} {Nulstil ramme} ::msgcat::mcset da {Reset} {Nulstil} ::msgcat::mcset da {Restore} ::msgcat::mcset da {Retrieve} {Hent} ::msgcat::mcset da {Return} ::msgcat::mcset da {Right} ::msgcat::mcset da {Roman} ::msgcat::mcset da {Rotate} {Roter} ::msgcat::mcset da {Rows} [encoding convertfrom iso8859-1 {Rækker}] ::msgcat::mcset da {Row} ::msgcat::mcset da {Ruler} {Lineal} ::msgcat::mcset da {SAMP Image} ::msgcat::mcset da {SAMP Table} ::msgcat::mcset da {SAMP: already connected} ::msgcat::mcset da {SAMP: internal error} ::msgcat::mcset da {SAMP: not connected} ::msgcat::mcset da {SAMP: unable to locate HUB} ::msgcat::mcset da {SAMP} ::msgcat::mcset da {Sample Increment} ::msgcat::mcset da {Sample Parameters} ::msgcat::mcset da {Samples per Line} {Udvalg per linie} ::msgcat::mcset da {Sample} ::msgcat::mcset da {Save 3D Movie} ::msgcat::mcset da {Save Color Tags} ::msgcat::mcset da {Save Colormap} {gem farvekort} ::msgcat::mcset da {Save Configuration} {Gem konfiguration} ::msgcat::mcset da {Save Contour Levels} {Gem konturniveauer} ::msgcat::mcset da {Save Contours} {Gem konturer} ::msgcat::mcset da {Save Contrast/Bias} {Gem kontrast/bias} ::msgcat::mcset da {Save Data} {Gem data} ::msgcat::mcset da {Save Image on Download} ::msgcat::mcset da {Save Image} {Gem billede} ::msgcat::mcset da {Save Regions} [encoding convertfrom iso8859-1 {Gem områder}] ::msgcat::mcset da {Save Template} {Gem skabelon} ::msgcat::mcset da {Save as} ::msgcat::mcset da {Save} {Gem} ::msgcat::mcset da {Scale Parameters} {Skala parametre} ::msgcat::mcset da {Scale and Limits} ::msgcat::mcset da {Scale} {Skala} ::msgcat::mcset da {Scan} {skan} ::msgcat::mcset da {Scatter Plot Tool} ::msgcat::mcset da {Scope} [encoding convertfrom iso8859-1 {Gældende}] ::msgcat::mcset da {Search for Catalogs} [encoding convertfrom iso8859-1 {søg efter kataloger}] ::msgcat::mcset da {Searching for catalogs} [encoding convertfrom iso8859-1 {søger efter kataloger}] ::msgcat::mcset da {Seconds} {Sekunder} ::msgcat::mcset da {Segment} ::msgcat::mcset da {Select All} [encoding convertfrom iso8859-1 {Vælg alle}] ::msgcat::mcset da {Select Coordinate System } [encoding convertfrom iso8859-1 {vælg koordinat system}] ::msgcat::mcset da {Select None} [encoding convertfrom iso8859-1 {Vælg ingen}] ::msgcat::mcset da {Select} ::msgcat::mcset da {Send} ::msgcat::mcset da {Server} {Server} ::msgcat::mcset da {Sexagesimal} ::msgcat::mcset da {Shape} {Form} ::msgcat::mcset da {Show All} {Vis alle} ::msgcat::mcset da {Show Command} ::msgcat::mcset da {Show Compass} ::msgcat::mcset da {Show Text} {Vis tekst} ::msgcat::mcset da {Show/Hide Frames} {Vis/skjul rammer} ::msgcat::mcset da {Show} {Vis} ::msgcat::mcset da {Simple Cross} ::msgcat::mcset da {Simple Plus} ::msgcat::mcset da {Single Frame} {Enkel ramme} ::msgcat::mcset da {Single} {Enkel} ::msgcat::mcset da {Sites} ::msgcat::mcset da {Size/Radius} [encoding convertfrom iso8859-1 {Størrelse/Radius}] ::msgcat::mcset da {Size} {Størrelse} ::msgcat::mcset da {Skip First} [encoding convertfrom iso8859-1 {Overspring første}] ::msgcat::mcset da {Slice} ::msgcat::mcset da {Smooth Parameters} {Udglatningsparametre} ::msgcat::mcset da {Smoothness} ::msgcat::mcset da {Smooth} {Udglat} ::msgcat::mcset da {Solid} ::msgcat::mcset da {Sorry, DS9 does not support} [encoding convertfrom iso8859-1 {DS9 understøtter ikke}] ::msgcat::mcset da {Sorry, DS9 requires a Truecolor8, Truecolor16, Truecolor24 visual be available} ::msgcat::mcset da {Sort} {Sorter} ::msgcat::mcset da {Source TCL} {Kilde TCL} ::msgcat::mcset da {Source} {Kilde} ::msgcat::mcset da {Space Equal Distance} ::msgcat::mcset da {Space Equal Value} ::msgcat::mcset da {Spacing} {Mellemrum} ::msgcat::mcset da {Sqrt} ::msgcat::mcset da {Square Root} {Kvadratrod} ::msgcat::mcset da {Squared} {Kvadratisk} ::msgcat::mcset da {Square} ::msgcat::mcset da {Stacked} ::msgcat::mcset da {Starbase} ::msgcat::mcset da {Startup} ::msgcat::mcset da {Start} ::msgcat::mcset da {Statistics} ::msgcat::mcset da {Stats} ::msgcat::mcset da {Status} ::msgcat::mcset da {Step} {Trin} ::msgcat::mcset da {Stop} ::msgcat::mcset da {Story of SAOImage DS9} ::msgcat::mcset da {Story} ::msgcat::mcset da {Sum} ::msgcat::mcset da {Sunken} ::msgcat::mcset da {Symbol Editor} ::msgcat::mcset da {Symbol} ::msgcat::mcset da {Tab-Separated-Value} ::msgcat::mcset da {Table} ::msgcat::mcset da {Tabloid} ::msgcat::mcset da {Tag Color} ::msgcat::mcset da {Task} ::msgcat::mcset da {Template} ::msgcat::mcset da {Text Font} ::msgcat::mcset da {Text} {Tekst} ::msgcat::mcset da {Then} [encoding convertfrom iso8859-1 {Så}] ::msgcat::mcset da {Thickness} {Tykkelse} ::msgcat::mcset da {This analysis task is already running. Do you wish to kill it?} {Denne analyseopgave kører allerede - skal den stoppes?} ::msgcat::mcset da {This function is not available.} ::msgcat::mcset da {This function is not currently supported for this port.} ::msgcat::mcset da {Tickmarks} {Afmærkninger} ::msgcat::mcset da {Tile Frames} {Mosaik rammer} ::msgcat::mcset da {Tile Parameters} {Mosaik parametre} ::msgcat::mcset da {Tile} {Mosaik} ::msgcat::mcset da {Times} ::msgcat::mcset da {Title} {Titel} ::msgcat::mcset da {Tophat} ::msgcat::mcset da {Topographic} ::msgcat::mcset da {Top} ::msgcat::mcset da {To} {Til} ::msgcat::mcset da {Transparency} ::msgcat::mcset da {Triangle} ::msgcat::mcset da {Type} ::msgcat::mcset da {URL} ::msgcat::mcset da {Unable to connect directly: using Web Proxy} ::msgcat::mcset da {Unable to determine date of observation} ::msgcat::mcset da {Unable to determine time of observation} ::msgcat::mcset da {Unable to evaluate filter} {kan ikke bestemme filter} ::msgcat::mcset da {Unable to find SIAP window} ::msgcat::mcset da {Unable to find URL column} ::msgcat::mcset da {Unable to find catalog window} {Kan ikke finde katalog vinduet} ::msgcat::mcset da {Unable to find plot window} {kan ikke finde plotte vinduet} ::msgcat::mcset da {Unable to load RGB image into a non-rgb frame} {Kan ikke hente et RGB billede ind i en ikke-RGB ramme} ::msgcat::mcset da {Unable to load region file} ::msgcat::mcset da {Unable to load} {Kan ikke hente} ::msgcat::mcset da {Unable to locate URL} {Kan ikke finde URL} ::msgcat::mcset da {Unable to match target with XPA Mime request} ::msgcat::mcset da {Unable to open file} [encoding convertfrom iso8859-1 {Kan ikke åbne fil}] ::msgcat::mcset da {Unable to process Analysis file} ::msgcat::mcset da {Unable to save RGB image from a non-rgb frame} ::msgcat::mcset da {Undo} {Fortryd} ::msgcat::mcset da {Unique} ::msgcat::mcset da {Unists} ::msgcat::mcset da {Units} {Enheder} ::msgcat::mcset da {Unknown Colormap} ::msgcat::mcset da {Unknown command} ::msgcat::mcset da {Update Filter} ::msgcat::mcset da {Update Group} {Opdater gruppe} ::msgcat::mcset da {Update from Current Crosshair} [encoding convertfrom iso8859-1 {Opdater fra nuværende trådkors}] ::msgcat::mcset da {Update from Current Frame} [encoding convertfrom iso8859-1 {Opdater fra nuværende ramme}] ::msgcat::mcset da {Update} {Opdater} ::msgcat::mcset da {Upper Left Back} ::msgcat::mcset da {Upper Left Front} ::msgcat::mcset da {Upper Right Back} ::msgcat::mcset da {Upper Right Front} ::msgcat::mcset da {Use Authentication} [encoding convertfrom iso8859-1 {Anvend bekræftelse}] ::msgcat::mcset da {Use Current Frame on Download} {Brug nuværende ramme til download} ::msgcat::mcset da {Use Internal Web Browser} {Brug intern web browser} ::msgcat::mcset da {Use Proxy} {Anvend proxy} ::msgcat::mcset da {User Manual} ::msgcat::mcset da {Username} {Brugernavn} ::msgcat::mcset da {User} {Brugerdefineret} ::msgcat::mcset da {Use} {Anvend} ::msgcat::mcset da {VO Server} ::msgcat::mcset da {VO} ::msgcat::mcset da {Value} [encoding convertfrom iso8859-1 {Værdi}] ::msgcat::mcset da {Vector} {Vektor} ::msgcat::mcset da {Vertical Graph} {Lodret graf} ::msgcat::mcset da {Vertical Layout} {Lodret layoyt} ::msgcat::mcset da {Vertical Text} {Lodret tekst} ::msgcat::mcset da {Vertical} ::msgcat::mcset da {View} {Vis} ::msgcat::mcset da {Virtual Observatory} {Virtuelt Observatorium} ::msgcat::mcset da {WCS Parameters} ::msgcat::mcset da {WCS} ::msgcat::mcset da {Wavelength} [encoding convertfrom iso8859-1 {Bølgelængde}] ::msgcat::mcset da {Web Browser} ::msgcat::mcset da {White} {Hvid} ::msgcat::mcset da {Width} {Bredde} ::msgcat::mcset da {Window} ::msgcat::mcset da {Words matching title, description} {Ord tilpasset titel, beskrivelse } ::msgcat::mcset da {X Axis Title} ::msgcat::mcset da {X Grid} ::msgcat::mcset da {XPA Information} {XPA information} ::msgcat::mcset da {XPA not initialized} {XPA ikke startet} ::msgcat::mcset da {XPA unable to verify hostname, setting XPA_METHOD to LOCAL} ::msgcat::mcset da {XPA} ::msgcat::mcset da {X} ::msgcat::mcset da {Y Axis Title} ::msgcat::mcset da {Y Grid} ::msgcat::mcset da {Yellow} {Gul} ::msgcat::mcset da {Y} ::msgcat::mcset da {Z Axis Scale} ::msgcat::mcset da {ZScale Parameters} ::msgcat::mcset da {Zero} {Nul} ::msgcat::mcset da {Zoom Fit} ::msgcat::mcset da {Zoom In} {Zoom ind} ::msgcat::mcset da {Zoom Out} {Zoom ud} ::msgcat::mcset da {Zoom} ::msgcat::mcset da {and} ::msgcat::mcset da {blue} ::msgcat::mcset da {b} ::msgcat::mcset da {color} ::msgcat::mcset da {cool} ::msgcat::mcset da {green} ::msgcat::mcset da {grey} [encoding convertfrom iso8859-1 {grå}] ::msgcat::mcset da {g} ::msgcat::mcset da {h5utils} ::msgcat::mcset da {heat} ::msgcat::mcset da {not} ::msgcat::mcset da {only} ::msgcat::mcset da {or center of data} {eller center for data} ::msgcat::mcset da {rainbow} {regnbue} ::msgcat::mcset da {red} ::msgcat::mcset da {rows of data have been downloaded. More may be available. You may wish to adjust the maximum allowed} [encoding convertfrom iso8859-1 {rækker af data er blevet hentet. Der kan være flere tilgængelige. Du bør måske ændre det maksimalt tilladte antal}] ::msgcat::mcset da {r} ::msgcat::mcset da {staircase} {trappe} ::msgcat::mcset da {standard} ::msgcat::mcset da {x} ::msgcat::mcset da {} saods9/ds9/msgs/de.msg000644 000765 000000 00000116273 12741217134 015150 0ustar00joyewheel000000 000000 ::msgcat::mcset de {2D} ::msgcat::mcset de {3D} ::msgcat::mcset de {A postscript generation error has occurred} {Beim Erstellen von Postscript ist ein Fehler aufgetreten} ::msgcat::mcset de {AIP} ::msgcat::mcset de {Abort} ::msgcat::mcset de {About SAOImage DS9} [encoding convertfrom iso8859-1 {Über SAOImage DS9}] ::msgcat::mcset de {About} [encoding convertfrom iso8859-1 {Über}] ::msgcat::mcset de {Acknowledgment} {Danksagung} ::msgcat::mcset de {Add} [encoding convertfrom iso8859-1 {Hinzufügen}] ::msgcat::mcset de {Advanced} {Erweitert} ::msgcat::mcset de {Aligned} ::msgcat::mcset de {Align} {Ausrichten} ::msgcat::mcset de {All Columns} {Alle spalten} ::msgcat::mcset de {All Rows} {Alle zeilen} ::msgcat::mcset de {All} {Alles} ::msgcat::mcset de {Always save files during Backup} ::msgcat::mcset de {Amplifier} [encoding convertfrom iso8859-1 {Verstärker}] ::msgcat::mcset de {An error has occurred during backup} ::msgcat::mcset de {An error has occurred during restore} ::msgcat::mcset de {An error has occurred invoking the Analysis task} {Beim Aufrufen des Analysetasks ist ein Fehler aufgetreten} ::msgcat::mcset de {An error has occurred while creating image.} ::msgcat::mcset de {An error has occurred while creating the image. Please be sure that the ds9 window is in the upper left corner of the default screen and the entire window is visible.} ::msgcat::mcset de {An error has occurred while creating the image. Please be sure that the entire image window is visible on the screen.} ::msgcat::mcset de {An error has occurred while printing} {Beim Drucken ist ein Fehler aufgetreten} ::msgcat::mcset de {An error has occurred while reading image.} ::msgcat::mcset de {An error has occurred while saving} {Beim Speichern ist ein Fehler aufgetreten} ::msgcat::mcset de {An error has occurred while updating VO server list} ::msgcat::mcset de {An error has occurred while writing image.} ::msgcat::mcset de {An internal error has been detected} ::msgcat::mcset de {Analysis Command Log} {Analysebefehlslog} ::msgcat::mcset de {Analysis Commands} ::msgcat::mcset de {Analysis File} ::msgcat::mcset de {Analysis Log} ::msgcat::mcset de {Analysis} {Analyse} ::msgcat::mcset de {Angle Complement} {Komplementwinkel} ::msgcat::mcset de {Angles} {Winkel} ::msgcat::mcset de {Angle} {Winkel} ::msgcat::mcset de {Annuli} {Kreisringe} ::msgcat::mcset de {Annulus} {Kreisring} ::msgcat::mcset de {Apply} {Anwenden} ::msgcat::mcset de {ArcMin} {Bogenminute} ::msgcat::mcset de {ArcSec} {Bogensekunde} ::msgcat::mcset de {Architecture} {Architektur} ::msgcat::mcset de {Archives} ::msgcat::mcset de {Array} ::msgcat::mcset de {Arrow} {Pfeil} ::msgcat::mcset de {Astronomy} ::msgcat::mcset de {At Startup} ::msgcat::mcset de {At least 2 different catalogs are required} ::msgcat::mcset de {Auto Centroid} ::msgcat::mcset de {Auto Plot 2D} ::msgcat::mcset de {Auto Plot 3D} ::msgcat::mcset de {Auto Plot Statistics} ::msgcat::mcset de {Auto Plot} ::msgcat::mcset de {Autoload FITS Regions} {FITS-Regionen autom. laden} ::msgcat::mcset de {Autoload} ::msgcat::mcset de {Automatic} {Automatisch} ::msgcat::mcset de {Average} {Mitteln} ::msgcat::mcset de {Axes Number} ::msgcat::mcset de {Axes Order} ::msgcat::mcset de {Axes Title} ::msgcat::mcset de {Axes} {Achsen} ::msgcat::mcset de {Axis Length} [encoding convertfrom iso8859-1 {Achsenlänge}] ::msgcat::mcset de {Axis Numbers} {Achsenziffern} ::msgcat::mcset de {Axis Title} ::msgcat::mcset de {Axis} {Achse} ::msgcat::mcset de {Azimuth} ::msgcat::mcset de {Background Color} {Hintergrundfarbe} ::msgcat::mcset de {Background} {Hintergrund} ::msgcat::mcset de {Backup} ::msgcat::mcset de {Back} [encoding convertfrom iso8859-1 {Zurück}] ::msgcat::mcset de {Bar Plot Tool} ::msgcat::mcset de {Bias} ::msgcat::mcset de {Bin 3rd Column} {Bin 3. Spalte} ::msgcat::mcset de {Bin Center} {Bin Zentrum} ::msgcat::mcset de {Bin Columns} {Bin Spalten} ::msgcat::mcset de {Bin Filter} ::msgcat::mcset de {Bin Fit} ::msgcat::mcset de {Bin In} ::msgcat::mcset de {Bin Out} ::msgcat::mcset de {Binning Parameters} {Binparameter} ::msgcat::mcset de {Bin} ::msgcat::mcset de {Black} {Schwarz} ::msgcat::mcset de {Blank/Inf/NaN Color} {Leer/Inf/Nan Farbe} ::msgcat::mcset de {Blink Frames} {Blinkende rahmen} ::msgcat::mcset de {Blink Interval} {Blinkinterval} ::msgcat::mcset de {Blink} {Blinken} ::msgcat::mcset de {Block Fit} ::msgcat::mcset de {Block In} {Bin ein} ::msgcat::mcset de {Block Out} {Bin aus} ::msgcat::mcset de {Block Parameters} ::msgcat::mcset de {Block} {Bin} ::msgcat::mcset de {Blue} {Blau} ::msgcat::mcset de {Bold} {Fett} ::msgcat::mcset de {Border} {Begrenzung} ::msgcat::mcset de {Bottom} ::msgcat::mcset de {Box Annulus} {Viereck ring} ::msgcat::mcset de {Box Panda} {Viereckiger panda} ::msgcat::mcset de {BoxCircle} ::msgcat::mcset de {Boxcar} ::msgcat::mcset de {Box} {Viereck} ::msgcat::mcset de {Broadcast} ::msgcat::mcset de {Browser} ::msgcat::mcset de {Browse} [encoding convertfrom iso8859-1 {Auswählen}] ::msgcat::mcset de {Buffer} {Puffer} ::msgcat::mcset de {Buttonbar} ::msgcat::mcset de {Buttons} [encoding convertfrom iso8859-1 {Schaltflächen}] ::msgcat::mcset de {Bytes} ::msgcat::mcset de {CMYK} ::msgcat::mcset de {Can Delete} {Kann löschen} ::msgcat::mcset de {Can Edit} {Kann bearbeiten} ::msgcat::mcset de {Can Move} {Kann bewegen} ::msgcat::mcset de {Can Rotate} {Kann rotieren} ::msgcat::mcset de {Cancelled} ::msgcat::mcset de {Cancel} {Abbrechen} ::msgcat::mcset de {Cap} ::msgcat::mcset de {Catalog Server} {Katalogserver} ::msgcat::mcset de {Catalog Tool} {Katalogwerkzeug} ::msgcat::mcset de {Catalogs} {Kataloge} ::msgcat::mcset de {Catalog} {Katalog} ::msgcat::mcset de {Catrom} ::msgcat::mcset de {Cat} ::msgcat::mcset de {Center Image} {Bild zentrieren} ::msgcat::mcset de {Center Non-modal Dialogs} ::msgcat::mcset de {Center} {Mittelpunkt} ::msgcat::mcset de {Centroid Parameters} ::msgcat::mcset de {Centroid} ::msgcat::mcset de {Circle} {Kreis} ::msgcat::mcset de {Clear All} [encoding convertfrom iso8859-1 {Alle löschen}] ::msgcat::mcset de {Clear Analysis Commands} [encoding convertfrom iso8859-1 {Analysebefehle löschen}] ::msgcat::mcset de {Clear Cache} [encoding convertfrom iso8859-1 {Cache löschen}] ::msgcat::mcset de {Clear Data} [encoding convertfrom iso8859-1 {Daten löschen}] ::msgcat::mcset de {Clear External Analysis Commands?} [encoding convertfrom iso8859-1 {Externe Analysebefehle löschen?}] ::msgcat::mcset de {Clear Filter} [encoding convertfrom iso8859-1 {Filter löschen}] ::msgcat::mcset de {Clear Frame} {Rahmen freigeben} ::msgcat::mcset de {Clear Preferences?} [encoding convertfrom iso8859-1 {Voreinstellungen löschen?}] ::msgcat::mcset de {Clear Preferences} [encoding convertfrom iso8859-1 {Voreinstellungen löschen}] ::msgcat::mcset de {Clear} [encoding convertfrom iso8859-1 {Löschen}] ::msgcat::mcset de {Click to Center} {Klicken zum Zentrieren} ::msgcat::mcset de {Close} [encoding convertfrom iso8859-1 {Schließen}] ::msgcat::mcset de {Colorbar Size} ::msgcat::mcset de {Colorbar} {Farbbalken} ::msgcat::mcset de {Colormap Parameters} {Farbpalettenparameter} ::msgcat::mcset de {Colormap} ::msgcat::mcset de {Color} {Farbe} ::msgcat::mcset de {Columns} {Spalten} ::msgcat::mcset de {Column} {Spalte} ::msgcat::mcset de {Command not allowed} ::msgcat::mcset de {Command} ::msgcat::mcset de {Compass} {Kompass} ::msgcat::mcset de {Composite Region} ::msgcat::mcset de {Composite} ::msgcat::mcset de {Compression} {Kompression} ::msgcat::mcset de {Configure} {Konfigurieren} ::msgcat::mcset de {Connect Directly} {Direkt verbinden} ::msgcat::mcset de {Connect SAMP} ::msgcat::mcset de {Connect Using Web Proxy} [encoding convertfrom iso8859-1 {Für Verbindung Webproxy verwenden}] ::msgcat::mcset de {Connect} ::msgcat::mcset de {Console} ::msgcat::mcset de {Contacting Image Server} ::msgcat::mcset de {Contour Parameters} {Konturenparameter} ::msgcat::mcset de {Contours} {Konturen} ::msgcat::mcset de {Contour} ::msgcat::mcset de {Contrast} {Kontrast} ::msgcat::mcset de {Convert to Polygons} {Zu Polygonen konvertieren} ::msgcat::mcset de {Coordinate Grid Parameters} {Koordinatennetzparameter} ::msgcat::mcset de {Coordinate Grid} {Koordinatennetz} ::msgcat::mcset de {Coordinate System} {Koordinatensystem} ::msgcat::mcset de {Coordinates} ::msgcat::mcset de {Coordinate} {Koordinaten} ::msgcat::mcset de {Copy Contours} {Konturen kopieren} ::msgcat::mcset de {Copy to Regions} {Zu Regionen kopieren} ::msgcat::mcset de {Copy} {Kopieren} ::msgcat::mcset de {Create Movie} ::msgcat::mcset de {Create New Frame on Download} {Neuen rahmen bei Download} ::msgcat::mcset de {Create} ::msgcat::mcset de {Crop Parameters} ::msgcat::mcset de {Crop} ::msgcat::mcset de {Crosshair Parameters} ::msgcat::mcset de {Crosshair To} {Fadenkreuz auf} ::msgcat::mcset de {Crosshair} {Fadenkreuz} ::msgcat::mcset de {Cross} {Kreuz} ::msgcat::mcset de {Cubehelix} ::msgcat::mcset de {Cube} ::msgcat::mcset de {Cubic} ::msgcat::mcset de {Current Frame} {Aktueller rahmen} ::msgcat::mcset de {Current Range} {Aktueller bereich} ::msgcat::mcset de {Current} {Aktuell} ::msgcat::mcset de {Cursor} {Zeiger} ::msgcat::mcset de {Cut} {Ausschneiden} ::msgcat::mcset de {Cyan} {Zyan} ::msgcat::mcset de {DPI} ::msgcat::mcset de {DS9 has detected a newer version of a backup file and therefore will not process this file.} ::msgcat::mcset de {DS9 has detected a newer version of a preferences file.} ::msgcat::mcset de {DS9 has detected an older backup file, do you wish to continue?} ::msgcat::mcset de {DS9 has detected an older preferences file, do you wish to update?} [encoding convertfrom iso8859-1 {DS9 hat ein ältere Einstellungsdatei erkannt, möchten Sie aktualisieren?}] ::msgcat::mcset de {DS9 will complete the initialization process} [encoding convertfrom iso8859-1 {DS9 wird den Initialisierungsprozeß vervollständigen}] ::msgcat::mcset de {Dash} {Gestrichelt} ::msgcat::mcset de {Data Format} {Datenformat} ::msgcat::mcset de {Dataset Name} ::msgcat::mcset de {Dataset} {Datensatz} ::msgcat::mcset de {Data} ::msgcat::mcset de {Decrease} {Absteigend} ::msgcat::mcset de {Default All Files} ::msgcat::mcset de {Default Format} ::msgcat::mcset de {Default Length} ::msgcat::mcset de {Default} {Standard} ::msgcat::mcset de {Degrees} {Grad} ::msgcat::mcset de {Delete All Frames?} [encoding convertfrom iso8859-1 {Alle rahmen löschen?}] ::msgcat::mcset de {Delete All Frames} [encoding convertfrom iso8859-1 {Alle rahmen löschen}] ::msgcat::mcset de {Delete All Groups?} [encoding convertfrom iso8859-1 {Alle Gruppen löschen?}] ::msgcat::mcset de {Delete All Groups} [encoding convertfrom iso8859-1 {Alle Gruppen löschen}] ::msgcat::mcset de {Delete All Regions?} [encoding convertfrom iso8859-1 {Alle Regionen löschen?}] ::msgcat::mcset de {Delete All Regions} [encoding convertfrom iso8859-1 {Alle Regionen löschen}] ::msgcat::mcset de {Delete All} ::msgcat::mcset de {Delete Color Tags} ::msgcat::mcset de {Delete Frame} [encoding convertfrom iso8859-1 {Rahmen löschen}] ::msgcat::mcset de {Delete Group} [encoding convertfrom iso8859-1 {Gruppe löschen}] ::msgcat::mcset de {Delete Selected Regions} [encoding convertfrom iso8859-1 {Ausgewählte Regionen löschen}] ::msgcat::mcset de {Delete} [encoding convertfrom iso8859-1 {Löschen}] ::msgcat::mcset de {Depth} {Tiefe} ::msgcat::mcset de {Detector} {Detektor} ::msgcat::mcset de {Dialog Box} {Dialogbox} ::msgcat::mcset de {Diamond} {Raute} ::msgcat::mcset de {Dimension} ::msgcat::mcset de {Direction} ::msgcat::mcset de {Disconnect} ::msgcat::mcset de {Display Header} ::msgcat::mcset de {Display Size} [encoding convertfrom iso8859-1 {Größe zeigen}] ::msgcat::mcset de {Dissolve} ::msgcat::mcset de {Distance} ::msgcat::mcset de {Done} ::msgcat::mcset de {Download Colormap} ::msgcat::mcset de {Download VOTABLE format if available} ::msgcat::mcset de {Drag to Center} {Ziehen zum zentrieren} ::msgcat::mcset de {Duplicate Data} ::msgcat::mcset de {East} {Osten} ::msgcat::mcset de {Ecliptic} {Ekliptisch} ::msgcat::mcset de {Edit Group Name} {Gruppenname bearbeiten} ::msgcat::mcset de {Edit} {Bearbeiten} ::msgcat::mcset de {Elevation} ::msgcat::mcset de {Ellipse Annulus} ::msgcat::mcset de {Ellipse Panda} {Ellipsen Panda} ::msgcat::mcset de {Ellipse} ::msgcat::mcset de {Elliptical Annulus} {Elliptischer Kreisring} ::msgcat::mcset de {Elliptical Panda} {Elliptischer Panda} ::msgcat::mcset de {Enable Confirmation Dialogs} [encoding convertfrom iso8859-1 {Bestätigungsdialoge einschalten}] ::msgcat::mcset de {Enable} ::msgcat::mcset de {End} {Ende} ::msgcat::mcset de {Enter Color} ::msgcat::mcset de {Enter Font Size} ::msgcat::mcset de {Enter Group Name} {Gruppenname eingeben} ::msgcat::mcset de {Enter Search Expression} ::msgcat::mcset de {Enter URL} ::msgcat::mcset de {Entry} ::msgcat::mcset de {Equal Area} [encoding convertfrom iso8859-1 {Gleiche Fläche}] ::msgcat::mcset de {Equal Distance} {Gleicher Abstand} ::msgcat::mcset de {Equal Spacing} ::msgcat::mcset de {Equal Value} ::msgcat::mcset de {Error code was returned} [encoding convertfrom iso8859-1 {Fehlercode wurde zurückgegeben}] ::msgcat::mcset de {Error} {Fehler} ::msgcat::mcset de {Examine Frame} {Rahmen inspizieren} ::msgcat::mcset de {Examine} {Inspizieren} ::msgcat::mcset de {Exam} ::msgcat::mcset de {Exclude} {Ausschliessen} ::msgcat::mcset de {Exit} [encoding convertfrom iso8859-1 {Schließen}] ::msgcat::mcset de {Export Array} ::msgcat::mcset de {Export} ::msgcat::mcset de {Extention} ::msgcat::mcset de {Exterior Axes} [encoding convertfrom iso8859-1 {Äußere Achsen}] ::msgcat::mcset de {Exterior Numerics} [encoding convertfrom iso8859-1 {Äußere Ziffern}] ::msgcat::mcset de {FAQ} ::msgcat::mcset de {FK4} ::msgcat::mcset de {FK5} ::msgcat::mcset de {Factor} ::msgcat::mcset de {File not Found or Unable to load FITS data MIME type} [encoding convertfrom iso8859-1 {Datei nicht gefunden oder nicht möglich FITS-Daten MIME-Type zu laden}] ::msgcat::mcset de {Filename} {Dateiname} ::msgcat::mcset de {File} {Datei} ::msgcat::mcset de {Fill} ::msgcat::mcset de {Filter} ::msgcat::mcset de {Find Next} [encoding convertfrom iso8859-1 {Nächsten finden}] ::msgcat::mcset de {Find} {Suchen} ::msgcat::mcset de {First Frame} {Erster rahmen} ::msgcat::mcset de {First} {Erster} ::msgcat::mcset de {Fits} ::msgcat::mcset de {Fixed in Size} [encoding convertfrom iso8859-1 {Feste Größe}] ::msgcat::mcset de {Flat} ::msgcat::mcset de {Flip} ::msgcat::mcset de {Font} ::msgcat::mcset de {For more information, use --help} ::msgcat::mcset de {Format} ::msgcat::mcset de {Forward} [encoding convertfrom iso8859-1 {Vorwärts}] ::msgcat::mcset de {Found} {Gefunden} ::msgcat::mcset de {Frame Information} {Rahmeninformation} ::msgcat::mcset de {Frame Parameters} ::msgcat::mcset de {Frames} ::msgcat::mcset de {Frame} {Rahmen} ::msgcat::mcset de {From} ::msgcat::mcset de {Front} {Vor} ::msgcat::mcset de {Full Range} {Ganzer Bereich} ::msgcat::mcset de {Function} {Funktion} ::msgcat::mcset de {GUI Font} ::msgcat::mcset de {Galactic} {Galaktisch} ::msgcat::mcset de {Gap} ::msgcat::mcset de {Gaussian} {Gauss} ::msgcat::mcset de {General} {Allgemein} ::msgcat::mcset de {Generate} {Herstellen} ::msgcat::mcset de {Generating Regions} {Regionen erstellen} ::msgcat::mcset de {Get Information} {Informationen} ::msgcat::mcset de {Gist} ::msgcat::mcset de {Global Properties} ::msgcat::mcset de {Global} ::msgcat::mcset de {Goto Frame} ::msgcat::mcset de {Graph Horz} ::msgcat::mcset de {Graph Vert} ::msgcat::mcset de {Graphics} {Grafik} ::msgcat::mcset de {Graphs} ::msgcat::mcset de {Graph} ::msgcat::mcset de {Grayscale} {Graustufen} ::msgcat::mcset de {Green} [encoding convertfrom iso8859-1 {Grün}] ::msgcat::mcset de {Grid Gap} {Gitterabstand} ::msgcat::mcset de {Grid} {Gitter} ::msgcat::mcset de {Groove} ::msgcat::mcset de {Groups} {Gruppen} ::msgcat::mcset de {HTTP} ::msgcat::mcset de {Header} {Dateikopf} ::msgcat::mcset de {Height} [encoding convertfrom iso8859-1 {Höhe}] ::msgcat::mcset de {Help Desk} {Hilfestelle} ::msgcat::mcset de {Help Me Choose} [encoding convertfrom iso8859-1 {Hilf mir auswählen}] ::msgcat::mcset de {Help} {Hilfe} ::msgcat::mcset de {Hide All} {Alle verstecken} ::msgcat::mcset de {Highlite} ::msgcat::mcset de {High} {Hoch} ::msgcat::mcset de {Histogram Equalization} {Histogrammausgleich} ::msgcat::mcset de {Histogram} {Histogramm} ::msgcat::mcset de {Horizontal Graph} {Horizontaldarstellung} ::msgcat::mcset de {Horizontal Layout} {Horizontales Layout} ::msgcat::mcset de {Horizontal} ::msgcat::mcset de {IAU Location Code} ::msgcat::mcset de {ICRS} ::msgcat::mcset de {Identification} {Kennzeichnung} ::msgcat::mcset de {If} {Wenn} ::msgcat::mcset de {Image Servers} ::msgcat::mcset de {Image} {Bild} ::msgcat::mcset de {Import Array} ::msgcat::mcset de {Import} ::msgcat::mcset de {Include} {Einschliessen} ::msgcat::mcset de {Increase} {Aufsteigend} ::msgcat::mcset de {Information Panel} {Informationsfeld} ::msgcat::mcset de {Information} {Informations} ::msgcat::mcset de {Initialize XPA} {XPA initialisieren} ::msgcat::mcset de {Inner} {Innerer} ::msgcat::mcset de {Instrument FOV} {Instrumentensichtfeld} ::msgcat::mcset de {Interior Axes} {Innere Achsen} ::msgcat::mcset de {Interior Numerics} {Innere Ziffern} ::msgcat::mcset de {Internal Parse Error} ::msgcat::mcset de {Interval} {Intervall} ::msgcat::mcset de {Invalid Column Name} ::msgcat::mcset de {Invalid formated multipart/mixed mime type message} [encoding convertfrom iso8859-1 {Ungültig formatierter multipart/mixed MIME-Type}] ::msgcat::mcset de {Invert Colormap} {Farbpalette invertieren} ::msgcat::mcset de {Invert Selection} {Auswahl umkehren} ::msgcat::mcset de {Invert} {Invertieren} ::msgcat::mcset de {Italic} {Kursiv} ::msgcat::mcset de {Items Found} ::msgcat::mcset de {Iteration} ::msgcat::mcset de {JPEG Quality Factor} [encoding convertfrom iso8859-1 {JPEG Qualitätsfaktor}] ::msgcat::mcset de {Keep-Alive} ::msgcat::mcset de {Kernel} ::msgcat::mcset de {Keyboard Shortcuts} {Tastatur-Shortcuts} ::msgcat::mcset de {Keyboard} {Tastatur} ::msgcat::mcset de {Keyword} ::msgcat::mcset de {Labels} {Beschriftung} ::msgcat::mcset de {Label} ::msgcat::mcset de {Landscape} {Horizontal} ::msgcat::mcset de {Language} {Sprache} ::msgcat::mcset de {Last Frame} {Letzter rahmen} ::msgcat::mcset de {Last} {Letzter} ::msgcat::mcset de {Layout Horz} ::msgcat::mcset de {Layout Vert} ::msgcat::mcset de {Layout} ::msgcat::mcset de {Left} ::msgcat::mcset de {Legal} ::msgcat::mcset de {Legend Title} ::msgcat::mcset de {Legend} ::msgcat::mcset de {Length} [encoding convertfrom iso8859-1 {Länge}] ::msgcat::mcset de {Letter} ::msgcat::mcset de {Levels} {Niveaus} ::msgcat::mcset de {Level} {Niveau} ::msgcat::mcset de {Limits} {Grenzen} ::msgcat::mcset de {Line Plot Tool} ::msgcat::mcset de {Linear} ::msgcat::mcset de {Line} {Linie} ::msgcat::mcset de {List Data} ::msgcat::mcset de {List Regions} {Regionen auflisten} ::msgcat::mcset de {List} {Auflisten} ::msgcat::mcset de {Load Analysis Commands} {Analysebefehle laden} ::msgcat::mcset de {Load Color Tags} ::msgcat::mcset de {Load Colormap} {Farbpalette laden} ::msgcat::mcset de {Load Configuration} {Konfiguration laden} ::msgcat::mcset de {Load Contour Levels} {Kontourniveaus laden} ::msgcat::mcset de {Load Contours} {Konturen laden} ::msgcat::mcset de {Load Contrast/Bias} {Kontrast/Bias laden} ::msgcat::mcset de {Load Data} {Daten laden} ::msgcat::mcset de {Load Mosaic} {Mosaic laden} ::msgcat::mcset de {Load Regions} {Regionen laden} ::msgcat::mcset de {Load Template} {Vorlage laden} ::msgcat::mcset de {Load into All Frames} ::msgcat::mcset de {Load into Current Frame} ::msgcat::mcset de {Loading Catalog} ::msgcat::mcset de {Loading} ::msgcat::mcset de {Load} {Laden} ::msgcat::mcset de {Local} {Lokal} ::msgcat::mcset de {Lock Axes} ::msgcat::mcset de {Lock Bin} ::msgcat::mcset de {Lock Color} ::msgcat::mcset de {Lock Crop Amplifier} ::msgcat::mcset de {Lock Crop Detector} ::msgcat::mcset de {Lock Crop Image} ::msgcat::mcset de {Lock Crop None} ::msgcat::mcset de {Lock Crop Physical} ::msgcat::mcset de {Lock Crop WCS} ::msgcat::mcset de {Lock Crosshair Amplifier} ::msgcat::mcset de {Lock Crosshair Detector} ::msgcat::mcset de {Lock Crosshair Image} ::msgcat::mcset de {Lock Crosshair None} ::msgcat::mcset de {Lock Crosshair Physical} ::msgcat::mcset de {Lock Crosshair WCS} ::msgcat::mcset de {Lock Frame Amplifier} ::msgcat::mcset de {Lock Frame Detector} ::msgcat::mcset de {Lock Frame Image} ::msgcat::mcset de {Lock Frame None} ::msgcat::mcset de {Lock Frame Physical} ::msgcat::mcset de {Lock Frame WCS} ::msgcat::mcset de {Lock Limits} ::msgcat::mcset de {Lock Scale} ::msgcat::mcset de {Lock Slice Image} ::msgcat::mcset de {Lock Slice None} ::msgcat::mcset de {Lock Slice WCS} ::msgcat::mcset de {Lock Smooth} ::msgcat::mcset de {Lock} {Arretieren} ::msgcat::mcset de {Log Exponent} ::msgcat::mcset de {Log} ::msgcat::mcset de {Low High} {Niedrig Hoch} ::msgcat::mcset de {Lower Left Back} ::msgcat::mcset de {Lower Left Front} ::msgcat::mcset de {Lower Right Back} ::msgcat::mcset de {Lower Right Front} ::msgcat::mcset de {Low} {Niedrig} ::msgcat::mcset de {MIP} ::msgcat::mcset de {Magenta} ::msgcat::mcset de {Magnification} ::msgcat::mcset de {Magnifier} [encoding convertfrom iso8859-1 {Vergrößerungsglas}] ::msgcat::mcset de {Major} [encoding convertfrom iso8859-1 {Groß}] ::msgcat::mcset de {Manual} {Manuell} ::msgcat::mcset de {Mask Parameters} {Maskenparameter} ::msgcat::mcset de {Match Axes} ::msgcat::mcset de {Match Bin} ::msgcat::mcset de {Match Catalog requires at least 1 row per catalog} ::msgcat::mcset de {Match Color} ::msgcat::mcset de {Match Crop Amplifier} ::msgcat::mcset de {Match Crop Detector} ::msgcat::mcset de {Match Crop Image} ::msgcat::mcset de {Match Crop Physical} ::msgcat::mcset de {Match Crop WCS} ::msgcat::mcset de {Match Crosshair Amplifier} ::msgcat::mcset de {Match Crosshair Detector} ::msgcat::mcset de {Match Crosshair Image} ::msgcat::mcset de {Match Crosshair Physical} ::msgcat::mcset de {Match Crosshair WCS} ::msgcat::mcset de {Match Frame Amplifier} ::msgcat::mcset de {Match Frame Detector} ::msgcat::mcset de {Match Frame Image} ::msgcat::mcset de {Match Frame Physical} ::msgcat::mcset de {Match Frame WCS} ::msgcat::mcset de {Match Limits} ::msgcat::mcset de {Match Scale} ::msgcat::mcset de {Match Slice Image} ::msgcat::mcset de {Match Slice WCS} ::msgcat::mcset de {Match Smooth} ::msgcat::mcset de {Match} ::msgcat::mcset de {Math Function} {Math. Funktion} ::msgcat::mcset de {Matplotlib} ::msgcat::mcset de {Max Rows} {Max. Reihen} ::msgcat::mcset de {Maximum} ::msgcat::mcset de {Max} ::msgcat::mcset de {Menus and Buttons} ::msgcat::mcset de {Menu} ::msgcat::mcset de {Message Log} ::msgcat::mcset de {Method} {Methode} ::msgcat::mcset de {Min Max Parameters} ::msgcat::mcset de {Min Max} ::msgcat::mcset de {Minimum} ::msgcat::mcset de {Minor} {Gering} ::msgcat::mcset de {Minutes} ::msgcat::mcset de {Min} ::msgcat::mcset de {Mission} ::msgcat::mcset de {Mode} ::msgcat::mcset de {Mosaic IRAF Segment} ::msgcat::mcset de {Mosaic IRAF} ::msgcat::mcset de {Mosaic WCS Segment} ::msgcat::mcset de {Mosaic WCS} ::msgcat::mcset de {Mosaic WFPC2} ::msgcat::mcset de {Mosaic} ::msgcat::mcset de {Mouse Click Epsilon} ::msgcat::mcset de {Mouse Wheel Bin} ::msgcat::mcset de {Mouse Wheel Zoom} ::msgcat::mcset de {Mouse and Keyboard} ::msgcat::mcset de {Move Back} ::msgcat::mcset de {Move First} ::msgcat::mcset de {Move Forward} ::msgcat::mcset de {Move Frame} ::msgcat::mcset de {Move Last} ::msgcat::mcset de {Move to Back} {Nach hinten} ::msgcat::mcset de {Move to Front} {Nach vorne} ::msgcat::mcset de {Movie} ::msgcat::mcset de {Multiple Extension Cube} ::msgcat::mcset de {Multiple Extension Frames} ::msgcat::mcset de {Multiple WCS} {Mehrere WCS} ::msgcat::mcset de {NRRD} ::msgcat::mcset de {Name Resolution} {Namensbestimmung} ::msgcat::mcset de {Name Server} ::msgcat::mcset de {Name or Designation} {Name oder Bezeichnung} ::msgcat::mcset de {Name} ::msgcat::mcset de {Native Dialog} {Systemnativer Dialog} ::msgcat::mcset de {New Features} {Neue Eigenschaften} ::msgcat::mcset de {New Frame 3D} ::msgcat::mcset de {New Frame RGB} {Neuer RGB rahmen} ::msgcat::mcset de {New Frame each Time} {Neuer rahmen jedes Mal} ::msgcat::mcset de {New Frame} {Neuer rahmen} ::msgcat::mcset de {New Group} {Neue Gruppe} ::msgcat::mcset de {New} {Neu} ::msgcat::mcset de {Next Frame} [encoding convertfrom iso8859-1 {Nächster rahmen}] ::msgcat::mcset de {Next} [encoding convertfrom iso8859-1 {Nächster}] ::msgcat::mcset de {No Catalog specified} {Keine Katalog spezifiziert} ::msgcat::mcset de {No Data Available} ::msgcat::mcset de {No Items Found} {Keine Objekte gefunden} ::msgcat::mcset de {No current frame} ::msgcat::mcset de {Non-zero} ::msgcat::mcset de {None} {Kein} ::msgcat::mcset de {Normal} ::msgcat::mcset de {North} {Norden} ::msgcat::mcset de {Not Found} ::msgcat::mcset de {Not Supported} ::msgcat::mcset de {Number of Samples} {Anzahl der Stichproben} ::msgcat::mcset de {Number of Threads} ::msgcat::mcset de {Number of Ticks} ::msgcat::mcset de {Number} {Zahl} ::msgcat::mcset de {Numerics} ::msgcat::mcset de {OK} ::msgcat::mcset de {Object} {Objekt} ::msgcat::mcset de {Open File} [encoding convertfrom iso8859-1 {Datei öffnen}] ::msgcat::mcset de {Open TCL Console} ::msgcat::mcset de {Open URL} [encoding convertfrom iso8859-1 {URL Öffnen}] ::msgcat::mcset de {Open as} ::msgcat::mcset de {Open} [encoding convertfrom iso8859-1 {Öffnen}] ::msgcat::mcset de {Operator} ::msgcat::mcset de {Orientation} {Orientierung} ::msgcat::mcset de {Origin} ::msgcat::mcset de {Oscillate} ::msgcat::mcset de {Other Color} ::msgcat::mcset de {Other Font Size} ::msgcat::mcset de {Other} {Andere} ::msgcat::mcset de {Outer} [encoding convertfrom iso8859-1 {Äußerer}] ::msgcat::mcset de {Overlap} ::msgcat::mcset de {PS Page Setup} ::msgcat::mcset de {PS Print} ::msgcat::mcset de {Page Setup} {Seitensetup} ::msgcat::mcset de {Page Source} {Seitenquelle} ::msgcat::mcset de {Pan To} {Ausrichten auf} ::msgcat::mcset de {Pan Zoom Rotate Parameters} {Ausrichten zoomen rotieren} ::msgcat::mcset de {Pan Zoom} ::msgcat::mcset de {Pan then Zoom} {Ausrichten dann Zoomen} ::msgcat::mcset de {Panda} ::msgcat::mcset de {Panner} [encoding convertfrom iso8859-1 {Übersichtsfeld}] ::msgcat::mcset de {Pan} {Ausrichtung} ::msgcat::mcset de {Parameters} {Parameter} ::msgcat::mcset de {Password} {Passwort} ::msgcat::mcset de {Paste Contours} [encoding convertfrom iso8859-1 {Konturen einfügen}] ::msgcat::mcset de {Paste} [encoding convertfrom iso8859-1 {Einfügen}] ::msgcat::mcset de {Physical} {Physikalisch} ::msgcat::mcset de {Pixel Distribution} {Pixelverteilung} ::msgcat::mcset de {Pixel Size} [encoding convertfrom iso8859-1 {Pixelgröße}] ::msgcat::mcset de {Pixel Table} {Pixeltabelle} ::msgcat::mcset de {Pixels} {Pixel} ::msgcat::mcset de {Play} {Abspielen} ::msgcat::mcset de {Please Select a Region} ::msgcat::mcset de {Please change the file's permission to disable other users write access. Use anyway?} ::msgcat::mcset de {Please specify width, height, and either name or (ra,dec)} [encoding convertfrom iso8859-1 {Bitte Weite, Höhe und entweder Namen oder (RA,Dec) angeben}] ::msgcat::mcset de {Plot 2D} ::msgcat::mcset de {Plot 3D} ::msgcat::mcset de {Plot Title} {Titel drucken} ::msgcat::mcset de {Plotting Regions} {Regionen drucken} ::msgcat::mcset de {Plot} ::msgcat::mcset de {Plus} ::msgcat::mcset de {Pointer} {Zeiger} ::msgcat::mcset de {Points} {Punkte} ::msgcat::mcset de {Point} {Punkt} ::msgcat::mcset de {Polygon} ::msgcat::mcset de {Portrait} {Vertikal} ::msgcat::mcset de {Poster} ::msgcat::mcset de {Postscript Page Setup} ::msgcat::mcset de {Postscript Print} ::msgcat::mcset de {Postscript} ::msgcat::mcset de {Power} {Exp} ::msgcat::mcset de {Preferences} {Einstellungen} ::msgcat::mcset de {Preserve During Load} {Beim Laden beibehalten} ::msgcat::mcset de {Previous Frame} {Vorheriger rahmen} ::msgcat::mcset de {Previous} {Vorheriger} ::msgcat::mcset de {Prev} ::msgcat::mcset de {Print Coordinates} {Koordinaten drucken} ::msgcat::mcset de {Print To} {Drucken} ::msgcat::mcset de {Printer} {Drucker} ::msgcat::mcset de {Print} {Drucken} ::msgcat::mcset de {Projection} {Projektion} ::msgcat::mcset de {Properties} {Eigenschaften} ::msgcat::mcset de {Property} {Eigenschaften} ::msgcat::mcset de {Proxy Host} ::msgcat::mcset de {Proxy Port} ::msgcat::mcset de {Publication} [encoding convertfrom iso8859-1 {Veröffentlichung}] ::msgcat::mcset de {Quadratic} {Quadratisch} ::msgcat::mcset de {RGB Array} ::msgcat::mcset de {RGB Cube} ::msgcat::mcset de {RGB Image} ::msgcat::mcset de {RGB} ::msgcat::mcset de {Radial Profile} ::msgcat::mcset de {Radial} ::msgcat::mcset de {Radius} ::msgcat::mcset de {Raised} ::msgcat::mcset de {Range} ::msgcat::mcset de {Redo} {Wiederholen} ::msgcat::mcset de {Red} {Rot} ::msgcat::mcset de {Reference Manual} {Referenzhandbuch} ::msgcat::mcset de {Reference} {Referenz} ::msgcat::mcset de {Refresh Frame} {Rahmen erneuern} ::msgcat::mcset de {Refresh} ::msgcat::mcset de {Region Parameters} ::msgcat::mcset de {Region} ::msgcat::mcset de {Release Notes} {Versionshinweise} ::msgcat::mcset de {Release} {Version} ::msgcat::mcset de {Relief} ::msgcat::mcset de {Reload} {Wieder laden} ::msgcat::mcset de {Render} ::msgcat::mcset de {Repeat} ::msgcat::mcset de {Reset Colormap} [encoding convertfrom iso8859-1 {Farbpalette zurücksetzen}] ::msgcat::mcset de {Reset Frame} [encoding convertfrom iso8859-1 {Rahmen zurücksetzen}] ::msgcat::mcset de {Reset} ::msgcat::mcset de {Restore} ::msgcat::mcset de {Retrieve} {Suchen} ::msgcat::mcset de {Return} ::msgcat::mcset de {Right} ::msgcat::mcset de {Roman} ::msgcat::mcset de {Rotate} {Rotieren} ::msgcat::mcset de {Rows} {Reihen} ::msgcat::mcset de {Row} ::msgcat::mcset de {Ruler} {Lineal} ::msgcat::mcset de {SAMP Image} ::msgcat::mcset de {SAMP Table} ::msgcat::mcset de {SAMP: already connected} ::msgcat::mcset de {SAMP: internal error} ::msgcat::mcset de {SAMP: not connected} ::msgcat::mcset de {SAMP: unable to locate HUB} ::msgcat::mcset de {SAMP} ::msgcat::mcset de {Sample Increment} ::msgcat::mcset de {Sample Parameters} ::msgcat::mcset de {Samples per Line} {Stichproben pro Linie} ::msgcat::mcset de {Sample} ::msgcat::mcset de {Save 3D Movie} ::msgcat::mcset de {Save Color Tags} ::msgcat::mcset de {Save Colormap} {Farbpalette speichern} ::msgcat::mcset de {Save Configuration} {Konfiguration speichern} ::msgcat::mcset de {Save Contour Levels} {Konturniveaus speichern} ::msgcat::mcset de {Save Contours} {Konturen speichern} ::msgcat::mcset de {Save Contrast/Bias} {Kontrast/Bias speichern} ::msgcat::mcset de {Save Data} {Daten speichern} ::msgcat::mcset de {Save Image on Download} ::msgcat::mcset de {Save Image} {Bild speichern} ::msgcat::mcset de {Save Regions} {Regionen speichern} ::msgcat::mcset de {Save Template} {Vorlage speichern} ::msgcat::mcset de {Save as} ::msgcat::mcset de {Save} {Speichern} ::msgcat::mcset de {Scale Parameters} {Skalierungsparameter} ::msgcat::mcset de {Scale and Limits} ::msgcat::mcset de {Scale} {Skalierung} ::msgcat::mcset de {Scan} {Abtastung} ::msgcat::mcset de {Scatter Plot Tool} ::msgcat::mcset de {Scope} {Anwendungsbereich} ::msgcat::mcset de {Search for Catalogs} {Nach Katalogen suchen} ::msgcat::mcset de {Searching for catalogs} {Suche nach Katalogen} ::msgcat::mcset de {Seconds} {Sekunden} ::msgcat::mcset de {Segment} ::msgcat::mcset de {Select All} [encoding convertfrom iso8859-1 {Alle auswählen}] ::msgcat::mcset de {Select Coordinate System } [encoding convertfrom iso8859-1 {Koordinatensystem auswählen}] ::msgcat::mcset de {Select None} [encoding convertfrom iso8859-1 {Nichts auswählen}] ::msgcat::mcset de {Select} ::msgcat::mcset de {Send} ::msgcat::mcset de {Server} ::msgcat::mcset de {Sexagesimal} ::msgcat::mcset de {Shape} {Form} ::msgcat::mcset de {Show All} {Alle zeigen} ::msgcat::mcset de {Show Command} ::msgcat::mcset de {Show Compass} ::msgcat::mcset de {Show Text} ::msgcat::mcset de {Show/Hide Frames} {Rahmen zeigen/verstecken} ::msgcat::mcset de {Show} ::msgcat::mcset de {Simple Cross} ::msgcat::mcset de {Simple Plus} ::msgcat::mcset de {Single Frame} {Einzelner rahmen} ::msgcat::mcset de {Single} {Einzeln} ::msgcat::mcset de {Sites} ::msgcat::mcset de {Size/Radius} [encoding convertfrom iso8859-1 {Größe/Radius}] ::msgcat::mcset de {Size} [encoding convertfrom iso8859-1 {Größe}] ::msgcat::mcset de {Skip First} [encoding convertfrom iso8859-1 {Erste überspringen}] ::msgcat::mcset de {Slice} ::msgcat::mcset de {Smooth Parameters} [encoding convertfrom iso8859-1 {Glättungsparameter}] ::msgcat::mcset de {Smoothness} ::msgcat::mcset de {Smooth} [encoding convertfrom iso8859-1 {Glätten}] ::msgcat::mcset de {Solid} ::msgcat::mcset de {Sorry, DS9 does not support} [encoding convertfrom iso8859-1 {Sorry, DS9 unterstützt nicht}] ::msgcat::mcset de {Sorry, DS9 requires a Truecolor8, Truecolor16, Truecolor24 visual be available} ::msgcat::mcset de {Sort} {Sortieren} ::msgcat::mcset de {Source TCL} ::msgcat::mcset de {Source} {Quelle} ::msgcat::mcset de {Space Equal Distance} ::msgcat::mcset de {Space Equal Value} ::msgcat::mcset de {Spacing} {Intervall} ::msgcat::mcset de {Sqrt} ::msgcat::mcset de {Square Root} {Wurzel} ::msgcat::mcset de {Squared} {Quadratisch} ::msgcat::mcset de {Square} ::msgcat::mcset de {Stacked} ::msgcat::mcset de {Starbase} ::msgcat::mcset de {Startup} ::msgcat::mcset de {Start} ::msgcat::mcset de {Statistics} ::msgcat::mcset de {Stats} ::msgcat::mcset de {Status} ::msgcat::mcset de {Step} {Stufe} ::msgcat::mcset de {Stop} ::msgcat::mcset de {Story of SAOImage DS9} ::msgcat::mcset de {Story} ::msgcat::mcset de {Sum} {Summieren} ::msgcat::mcset de {Sunken} ::msgcat::mcset de {Symbol Editor} ::msgcat::mcset de {Symbol} ::msgcat::mcset de {Tab-Separated-Value} ::msgcat::mcset de {Table} ::msgcat::mcset de {Tabloid} ::msgcat::mcset de {Tag Color} ::msgcat::mcset de {Task} ::msgcat::mcset de {Template} ::msgcat::mcset de {Text Font} ::msgcat::mcset de {Text} ::msgcat::mcset de {Then} {dann} ::msgcat::mcset de {Thickness} {Dicke} ::msgcat::mcset de {This analysis task is already running. Do you wish to kill it?} [encoding convertfrom iso8859-1 {Diese Analyse läuft bereits. Soll sie beendet werden?}] ::msgcat::mcset de {This function is not available.} ::msgcat::mcset de {This function is not currently supported for this port.} ::msgcat::mcset de {Tickmarks} {Achsenstriche} ::msgcat::mcset de {Tile Frames} {Gekachelte rahmen} ::msgcat::mcset de {Tile Parameters} ::msgcat::mcset de {Tile} {Kacheln} ::msgcat::mcset de {Times} ::msgcat::mcset de {Title} {Titel} ::msgcat::mcset de {Tophat} ::msgcat::mcset de {Topographic} ::msgcat::mcset de {Top} ::msgcat::mcset de {To} {Nach} ::msgcat::mcset de {Transparency} ::msgcat::mcset de {Triangle} ::msgcat::mcset de {Type} {Typ} ::msgcat::mcset de {URL} ::msgcat::mcset de {Unable to connect directly: using Web Proxy} ::msgcat::mcset de {Unable to determine date of observation} ::msgcat::mcset de {Unable to determine time of observation} ::msgcat::mcset de {Unable to evaluate filter} [encoding convertfrom iso8859-1 {Nicht möglich Filter zu evaluieren}] ::msgcat::mcset de {Unable to find SIAP window} ::msgcat::mcset de {Unable to find URL column} ::msgcat::mcset de {Unable to find catalog window} [encoding convertfrom iso8859-1 {Nicht möglich Katalogfenster zu finden}] ::msgcat::mcset de {Unable to find plot window} [encoding convertfrom iso8859-1 {Nicht möglich Plotfenster zu finden}] ::msgcat::mcset de {Unable to load RGB image into a non-rgb frame} [encoding convertfrom iso8859-1 {Nicht möglich RGB-Bild in nicht-RGB-rahmen zu laden}] ::msgcat::mcset de {Unable to load region file} ::msgcat::mcset de {Unable to load} [encoding convertfrom iso8859-1 {Nicht möglich zu laden}] ::msgcat::mcset de {Unable to locate URL} [encoding convertfrom iso8859-1 {Nicht möglich URL zu finden}] ::msgcat::mcset de {Unable to match target with XPA Mime request} ::msgcat::mcset de {Unable to open file} [encoding convertfrom iso8859-1 {Nicht möglich Datei zu öffnen}] ::msgcat::mcset de {Unable to process Analysis file} ::msgcat::mcset de {Unable to save RGB image from a non-rgb frame} ::msgcat::mcset de {Undo} [encoding convertfrom iso8859-1 {Rückgängig}] ::msgcat::mcset de {Unique} ::msgcat::mcset de {Unists} ::msgcat::mcset de {Units} {Einheiten} ::msgcat::mcset de {Unknown Colormap} ::msgcat::mcset de {Unknown command} ::msgcat::mcset de {Update Filter} ::msgcat::mcset de {Update Group} {Gruppe aktualisieren} ::msgcat::mcset de {Update from Current Crosshair} {Vom aktuellen Fadenkreuz aktualisieren} ::msgcat::mcset de {Update from Current Frame} {Vom aktuellen rahmen aktualisieren} ::msgcat::mcset de {Update} {Aktualisieren} ::msgcat::mcset de {Upper Left Back} ::msgcat::mcset de {Upper Left Front} ::msgcat::mcset de {Upper Right Back} ::msgcat::mcset de {Upper Right Front} ::msgcat::mcset de {Use Authentication} {Authentifizierung verwenden} ::msgcat::mcset de {Use Current Frame on Download} {Aktuellen rahmen bei Download verwenden} ::msgcat::mcset de {Use Internal Web Browser} {Internen Webbrowser verwenden} ::msgcat::mcset de {Use Proxy} {Proxy verwenden} ::msgcat::mcset de {User Manual} ::msgcat::mcset de {Username} {Login} ::msgcat::mcset de {User} {Benutzer} ::msgcat::mcset de {Use} {Benutze} ::msgcat::mcset de {VO Server} ::msgcat::mcset de {VO} ::msgcat::mcset de {Value} {Wert} ::msgcat::mcset de {Vector} {Vektor} ::msgcat::mcset de {Vertical Graph} {Vertikaldarstellung} ::msgcat::mcset de {Vertical Layout} {Vertikales layout} ::msgcat::mcset de {Vertical Text} {Vertikaler text} ::msgcat::mcset de {Vertical} ::msgcat::mcset de {View} {Ansicht} ::msgcat::mcset de {Virtual Observatory} ::msgcat::mcset de {WCS Parameters} ::msgcat::mcset de {WCS} ::msgcat::mcset de {Wavelength} [encoding convertfrom iso8859-1 {Wellenlänge}] ::msgcat::mcset de {Web Browser} {Webbrowser} ::msgcat::mcset de {White} [encoding convertfrom iso8859-1 {Weiß}] ::msgcat::mcset de {Width} {Breite} ::msgcat::mcset de {Window} ::msgcat::mcset de {Words matching title, description} {Worte im Titel, Bezeichnung} ::msgcat::mcset de {X Axis Title} ::msgcat::mcset de {X Grid} ::msgcat::mcset de {XPA Information} ::msgcat::mcset de {XPA not initialized} {XPA nicht initialisiert} ::msgcat::mcset de {XPA unable to verify hostname, setting XPA_METHOD to LOCAL} ::msgcat::mcset de {XPA} ::msgcat::mcset de {X} ::msgcat::mcset de {Y Axis Title} ::msgcat::mcset de {Y Grid} ::msgcat::mcset de {Yellow} {Gelb} ::msgcat::mcset de {Y} ::msgcat::mcset de {Z Axis Scale} ::msgcat::mcset de {ZScale Parameters} ::msgcat::mcset de {Zero} ::msgcat::mcset de {Zoom Fit} ::msgcat::mcset de {Zoom In} {Hineinzoomen} ::msgcat::mcset de {Zoom Out} {Herauszoomen} ::msgcat::mcset de {Zoom} ::msgcat::mcset de {and} ::msgcat::mcset de {blue} ::msgcat::mcset de {b} ::msgcat::mcset de {color} ::msgcat::mcset de {cool} ::msgcat::mcset de {green} ::msgcat::mcset de {grey} ::msgcat::mcset de {g} ::msgcat::mcset de {h5utils} ::msgcat::mcset de {heat} ::msgcat::mcset de {not} ::msgcat::mcset de {only} ::msgcat::mcset de {or center of data} {oder Zentrum der Daten} ::msgcat::mcset de {rainbow} ::msgcat::mcset de {red} ::msgcat::mcset de {rows of data have been downloaded. More may be available. You may wish to adjust the maximum allowed} [encoding convertfrom iso8859-1 {Datenreihen wurden heruntergeladen. Mehr sind vielleicht verfügbar. Sie können die maximale Anzahl anpassen.}] ::msgcat::mcset de {r} ::msgcat::mcset de {staircase} ::msgcat::mcset de {standard} ::msgcat::mcset de {x} ::msgcat::mcset de {} saods9/ds9/msgs/es.msg000644 000765 000000 00000124336 12741217134 015166 0ustar00joyewheel000000 000000 ::msgcat::mcset es {2D} ::msgcat::mcset es {3D} ::msgcat::mcset es {A postscript generation error has occurred} [encoding convertfrom iso8859-1 {Un error ha ocurrido en la generación del fichero postscript}] ::msgcat::mcset es {AIP} ::msgcat::mcset es {Abort} ::msgcat::mcset es {About SAOImage DS9} {Acerca de SAOImage DS9} ::msgcat::mcset es {About} {Acerca de} ::msgcat::mcset es {Acknowledgment} {Reconocimientos} ::msgcat::mcset es {Add} {Agregar} ::msgcat::mcset es {Advanced} {Avanzado} ::msgcat::mcset es {Aligned} ::msgcat::mcset es {Align} {Alinear} ::msgcat::mcset es {All Columns} {Todas las columnas} ::msgcat::mcset es {All Rows} {Todas las filas} ::msgcat::mcset es {All} {Todas} ::msgcat::mcset es {Always save files during Backup} ::msgcat::mcset es {Amplifier} {Amplificador} ::msgcat::mcset es {An error has occurred during backup} ::msgcat::mcset es {An error has occurred during restore} ::msgcat::mcset es {An error has occurred invoking the Analysis task} [encoding convertfrom iso8859-1 {Un error ha ocurrido mientras se invocaba la tarea de análisis}] ::msgcat::mcset es {An error has occurred while creating image.} ::msgcat::mcset es {An error has occurred while creating the image. Please be sure that the ds9 window is in the upper left corner of the default screen and the entire window is visible.} ::msgcat::mcset es {An error has occurred while creating the image. Please be sure that the entire image window is visible on the screen.} ::msgcat::mcset es {An error has occurred while printing} {Un error ha ocurrido al imprimir} ::msgcat::mcset es {An error has occurred while reading image.} ::msgcat::mcset es {An error has occurred while saving} {Un error ha ocurrido al guardar} ::msgcat::mcset es {An error has occurred while updating VO server list} ::msgcat::mcset es {An error has occurred while writing image.} ::msgcat::mcset es {An internal error has been detected} ::msgcat::mcset es {Analysis Command Log} [encoding convertfrom iso8859-1 {Log de instrucciones de análisis}] ::msgcat::mcset es {Analysis Commands} [encoding convertfrom iso8859-1 {Comandos de análisis}] ::msgcat::mcset es {Analysis File} ::msgcat::mcset es {Analysis Log} ::msgcat::mcset es {Analysis} [encoding convertfrom iso8859-1 {Análisis}] ::msgcat::mcset es {Angle Complement} [encoding convertfrom iso8859-1 {Ángulo complementario}] ::msgcat::mcset es {Angles} [encoding convertfrom iso8859-1 {Ángulos}] ::msgcat::mcset es {Angle} [encoding convertfrom iso8859-1 {Ángulo}] ::msgcat::mcset es {Annuli} [encoding convertfrom iso8859-1 {Ánulos}] ::msgcat::mcset es {Annulus} {Corona} ::msgcat::mcset es {Apply} {Aplicar} ::msgcat::mcset es {ArcMin} {MinArc} ::msgcat::mcset es {ArcSec} {SegArc} ::msgcat::mcset es {Architecture} {Arquitectura} ::msgcat::mcset es {Archives} ::msgcat::mcset es {Array} ::msgcat::mcset es {Arrow} {Flecha} ::msgcat::mcset es {Astronomy} ::msgcat::mcset es {At Startup} ::msgcat::mcset es {At least 2 different catalogs are required} ::msgcat::mcset es {Auto Centroid} {Auto Centroide} ::msgcat::mcset es {Auto Plot 2D} ::msgcat::mcset es {Auto Plot 3D} ::msgcat::mcset es {Auto Plot Statistics} ::msgcat::mcset es {Auto Plot} ::msgcat::mcset es {Autoload FITS Regions} {Autocargar regiones FITS} ::msgcat::mcset es {Autoload} ::msgcat::mcset es {Automatic} [encoding convertfrom iso8859-1 {Automático}] ::msgcat::mcset es {Average} {Promedio} ::msgcat::mcset es {Axes Number} ::msgcat::mcset es {Axes Order} ::msgcat::mcset es {Axes Title} ::msgcat::mcset es {Axes} {Ejes} ::msgcat::mcset es {Axis Length} {Longitud del eje} ::msgcat::mcset es {Axis Numbers} [encoding convertfrom iso8859-1 {Números de los ejes}] ::msgcat::mcset es {Axis Title} ::msgcat::mcset es {Axis} {Eje} ::msgcat::mcset es {Azimuth} ::msgcat::mcset es {Background Color} {Color de fondo} ::msgcat::mcset es {Background} {Fondo} ::msgcat::mcset es {Backup} ::msgcat::mcset es {Back} [encoding convertfrom iso8859-1 {Para atrás}] ::msgcat::mcset es {Bar Plot Tool} ::msgcat::mcset es {Bias} ::msgcat::mcset es {Bin 3rd Column} {Bin tercera columna} ::msgcat::mcset es {Bin Center} {Centro del bin} ::msgcat::mcset es {Bin Columns} {Columnas del bin} ::msgcat::mcset es {Bin Filter} {Filtro del bin} ::msgcat::mcset es {Bin Fit} ::msgcat::mcset es {Bin In} ::msgcat::mcset es {Bin Out} ::msgcat::mcset es {Binning Parameters} [encoding convertfrom iso8859-1 {Parámetros de resolución}] ::msgcat::mcset es {Bin} ::msgcat::mcset es {Black} {Negro} ::msgcat::mcset es {Blank/Inf/NaN Color} {Color en blanco/Inf/NaN} ::msgcat::mcset es {Blink Frames} {Parpadear Marcos} ::msgcat::mcset es {Blink Interval} {Intervalo de parpadeo} ::msgcat::mcset es {Blink} {Parpadear} ::msgcat::mcset es {Block Fit} ::msgcat::mcset es {Block In} {Bin a} ::msgcat::mcset es {Block Out} {Bin de} ::msgcat::mcset es {Block Parameters} ::msgcat::mcset es {Block} {Bin} ::msgcat::mcset es {Blue} {Azul} ::msgcat::mcset es {Bold} {Negrilla} ::msgcat::mcset es {Border} {Borde} ::msgcat::mcset es {Bottom} ::msgcat::mcset es {Box Annulus} {Caja con caja inscrita} ::msgcat::mcset es {Box Panda} {Caja con caja inscrita segmetada} ::msgcat::mcset es {BoxCircle} ::msgcat::mcset es {Boxcar} ::msgcat::mcset es {Box} {Casilla} ::msgcat::mcset es {Broadcast} ::msgcat::mcset es {Browser} ::msgcat::mcset es {Browse} ::msgcat::mcset es {Buffer} ::msgcat::mcset es {Buttonbar} ::msgcat::mcset es {Buttons} {Teclas} ::msgcat::mcset es {Bytes} ::msgcat::mcset es {CMYK} ::msgcat::mcset es {Can Delete} {Puede suprimir} ::msgcat::mcset es {Can Edit} {Puede editar} ::msgcat::mcset es {Can Move} {Puede mover} ::msgcat::mcset es {Can Rotate} {Puede rotar} ::msgcat::mcset es {Cancelled} ::msgcat::mcset es {Cancel} {Cancelar} ::msgcat::mcset es {Cap} ::msgcat::mcset es {Catalog Server} [encoding convertfrom iso8859-1 {Servidor de catálogo}] ::msgcat::mcset es {Catalog Tool} [encoding convertfrom iso8859-1 {Herramienta de catálogo}] ::msgcat::mcset es {Catalogs} [encoding convertfrom iso8859-1 {Catálogos}] ::msgcat::mcset es {Catalog} [encoding convertfrom iso8859-1 {Catálogo}] ::msgcat::mcset es {Catrom} ::msgcat::mcset es {Cat} ::msgcat::mcset es {Center Image} {Centrar imagen} ::msgcat::mcset es {Center Non-modal Dialogs} ::msgcat::mcset es {Center} {Centrar} ::msgcat::mcset es {Centroid Parameters} [encoding convertfrom iso8859-1 {Párametros del centroide}] ::msgcat::mcset es {Centroid} {Centroide} ::msgcat::mcset es {Circle} [encoding convertfrom iso8859-1 {Círculo}] ::msgcat::mcset es {Clear All} {Despejar todos} ::msgcat::mcset es {Clear Analysis Commands} {Borrar las instrucciones de análisis} ::msgcat::mcset es {Clear Cache} {Limpiar cache} ::msgcat::mcset es {Clear Data} {Limpiar de datos} ::msgcat::mcset es {Clear External Analysis Commands?} [encoding convertfrom iso8859-1 {¿Borrar las instrucciones externas de análisis?}] ::msgcat::mcset es {Clear Filter} {Borrar filtro} ::msgcat::mcset es {Clear Frame} {Despejar marco} ::msgcat::mcset es {Clear Preferences?} [encoding convertfrom iso8859-1 {¿Limpiar las preferencias?}] ::msgcat::mcset es {Clear Preferences} {Limpiar las preferencias} ::msgcat::mcset es {Clear} {Vaciar} ::msgcat::mcset es {Click to Center} {Clic para centrar} ::msgcat::mcset es {Close} {Cerrar} ::msgcat::mcset es {Colorbar Size} ::msgcat::mcset es {Colorbar} {Barra de colores} ::msgcat::mcset es {Colormap Parameters} [encoding convertfrom iso8859-1 {Parámetros del mapa de colores}] ::msgcat::mcset es {Colormap} {Mapa de colores} ::msgcat::mcset es {Color} ::msgcat::mcset es {Columns} {Columnas} ::msgcat::mcset es {Column} {Columna} ::msgcat::mcset es {Command not allowed} ::msgcat::mcset es {Command} ::msgcat::mcset es {Compass} [encoding convertfrom iso8859-1 {Compás}] ::msgcat::mcset es {Composite Region} ::msgcat::mcset es {Composite} {Compuesto} ::msgcat::mcset es {Compression} [encoding convertfrom iso8859-1 {Compresión}] ::msgcat::mcset es {Configure} {Configurar} ::msgcat::mcset es {Connect Directly} {Conecta directamente} ::msgcat::mcset es {Connect SAMP} ::msgcat::mcset es {Connect Using Web Proxy} {Conecta, usa Web Proxy} ::msgcat::mcset es {Connect} ::msgcat::mcset es {Console} ::msgcat::mcset es {Contacting Image Server} ::msgcat::mcset es {Contour Parameters} [encoding convertfrom iso8859-1 {Parámetros de contorno}] ::msgcat::mcset es {Contours} {Contornos} ::msgcat::mcset es {Contour} ::msgcat::mcset es {Contrast} {Contraste} ::msgcat::mcset es {Convert to Polygons} [encoding convertfrom iso8859-1 {Convertir a polígonos}] ::msgcat::mcset es {Coordinate Grid Parameters} [encoding convertfrom iso8859-1 {Parámetros de la cuadrícula de coordenadas}] ::msgcat::mcset es {Coordinate Grid} [encoding convertfrom iso8859-1 {Cuadrícula de coordenadas}] ::msgcat::mcset es {Coordinate System} {Sistema de coordenadas} ::msgcat::mcset es {Coordinates} {Coordenadas} ::msgcat::mcset es {Coordinate} {Coordenada} ::msgcat::mcset es {Copy Contours} {Copiar contornos} ::msgcat::mcset es {Copy to Regions} {Copiar a regiones} ::msgcat::mcset es {Copy} {Copiar} ::msgcat::mcset es {Create Movie} ::msgcat::mcset es {Create New Frame on Download} {Crear un nuevo marco al transferir} ::msgcat::mcset es {Create} ::msgcat::mcset es {Crop Parameters} ::msgcat::mcset es {Crop} ::msgcat::mcset es {Crosshair Parameters} ::msgcat::mcset es {Crosshair To} {Localizar con punto de mira} ::msgcat::mcset es {Crosshair} {Punto de mira} ::msgcat::mcset es {Cross} {Cruz} ::msgcat::mcset es {Cubehelix} ::msgcat::mcset es {Cube} ::msgcat::mcset es {Cubic} ::msgcat::mcset es {Current Frame} {Marco actual} ::msgcat::mcset es {Current Range} {Rango actual} ::msgcat::mcset es {Current} {Actual} ::msgcat::mcset es {Cursor} ::msgcat::mcset es {Cut} {Corte} ::msgcat::mcset es {Cyan} {Cian} ::msgcat::mcset es {DPI} ::msgcat::mcset es {DS9 has detected a newer version of a backup file and therefore will not process this file.} ::msgcat::mcset es {DS9 has detected a newer version of a preferences file.} ::msgcat::mcset es {DS9 has detected an older backup file, do you wish to continue?} ::msgcat::mcset es {DS9 has detected an older preferences file, do you wish to update?} [encoding convertfrom iso8859-1 {DS9 ha detectado un fichero de preferencias más antiguo, ¿Desea actualizarlo?}] ::msgcat::mcset es {DS9 will complete the initialization process} [encoding convertfrom iso8859-1 {DS9 completará el proceso de inicialización}] ::msgcat::mcset es {Dash} [encoding convertfrom iso8859-1 {Guión}] ::msgcat::mcset es {Data Format} {Formato de los datos} ::msgcat::mcset es {Dataset Name} ::msgcat::mcset es {Dataset} {Conjunto de datos} ::msgcat::mcset es {Data} ::msgcat::mcset es {Decrease} [encoding convertfrom iso8859-1 {Disminución}] ::msgcat::mcset es {Default All Files} ::msgcat::mcset es {Default Format} ::msgcat::mcset es {Default Length} ::msgcat::mcset es {Default} {Por defecto} ::msgcat::mcset es {Degrees} {Grados} ::msgcat::mcset es {Delete All Frames?} [encoding convertfrom iso8859-1 {¿Borrar todos los marcos?}] ::msgcat::mcset es {Delete All Frames} {Borrar todos los marcos} ::msgcat::mcset es {Delete All Groups?} [encoding convertfrom iso8859-1 {¿Borrar todos los grupos?}] ::msgcat::mcset es {Delete All Groups} {Borrar todos los grupos} ::msgcat::mcset es {Delete All Regions?} [encoding convertfrom iso8859-1 {¿Borrar todas las regiones?}] ::msgcat::mcset es {Delete All Regions} {Borrar todas las regiones} ::msgcat::mcset es {Delete All} ::msgcat::mcset es {Delete Color Tags} ::msgcat::mcset es {Delete Frame} {Borrar marco} ::msgcat::mcset es {Delete Group} {Borrar grupo} ::msgcat::mcset es {Delete Selected Regions} {Borrar regiones seleccionadas} ::msgcat::mcset es {Delete} {Borrar} ::msgcat::mcset es {Depth} {Profundidad} ::msgcat::mcset es {Detector} ::msgcat::mcset es {Dialog Box} [encoding convertfrom iso8859-1 {Caja de diálogo}] ::msgcat::mcset es {Diamond} {Diamante} ::msgcat::mcset es {Dimension} [encoding convertfrom iso8859-1 {Dimensión}] ::msgcat::mcset es {Direction} ::msgcat::mcset es {Disconnect} ::msgcat::mcset es {Display Header} ::msgcat::mcset es {Display Size} [encoding convertfrom iso8859-1 {Mostrar el tamaño}] ::msgcat::mcset es {Dissolve} {Disolver} ::msgcat::mcset es {Distance} ::msgcat::mcset es {Done} ::msgcat::mcset es {Download Colormap} ::msgcat::mcset es {Download VOTABLE format if available} ::msgcat::mcset es {Drag to Center} {Arrastrar para centrar} ::msgcat::mcset es {Duplicate Data} ::msgcat::mcset es {East} {Este} ::msgcat::mcset es {Ecliptic} [encoding convertfrom iso8859-1 {Eclíptica}] ::msgcat::mcset es {Edit Group Name} {Editar el nombre del grupo} ::msgcat::mcset es {Edit} {Editar} ::msgcat::mcset es {Elevation} [encoding convertfrom iso8859-1 {Elevación}] ::msgcat::mcset es {Ellipse Annulus} ::msgcat::mcset es {Ellipse Panda} {Elipse con elipse inscrita segmentada} ::msgcat::mcset es {Ellipse} {Elipse} ::msgcat::mcset es {Elliptical Annulus} {Elipse con elipse inscrita} ::msgcat::mcset es {Elliptical Panda} [encoding convertfrom iso8859-1 {Elipse con elipse inscrita segmentada}] ::msgcat::mcset es {Enable Confirmation Dialogs} [encoding convertfrom iso8859-1 {Habilitar los diálogos de confirmación}] ::msgcat::mcset es {Enable} ::msgcat::mcset es {End} ::msgcat::mcset es {Enter Color} {Entrar color} ::msgcat::mcset es {Enter Font Size} ::msgcat::mcset es {Enter Group Name} {Entrar nombre de grupo} ::msgcat::mcset es {Enter Search Expression} [encoding convertfrom iso8859-1 {Entrar expresión de búsqueda}] ::msgcat::mcset es {Enter URL} ::msgcat::mcset es {Entry} {Entrada} ::msgcat::mcset es {Equal Area} {Misma área} ::msgcat::mcset es {Equal Distance} {Misma distancia} ::msgcat::mcset es {Equal Spacing} ::msgcat::mcset es {Equal Value} ::msgcat::mcset es {Error code was returned} [encoding convertfrom iso8859-1 {Error de código fue regresado}] ::msgcat::mcset es {Error} ::msgcat::mcset es {Examine Frame} {Examinar marco} ::msgcat::mcset es {Examine} {Examinar} ::msgcat::mcset es {Exam} ::msgcat::mcset es {Exclude} {Excluir} ::msgcat::mcset es {Exit} {Salir} ::msgcat::mcset es {Export Array} ::msgcat::mcset es {Export} ::msgcat::mcset es {Extention} ::msgcat::mcset es {Exterior Axes} {Ejes exteriores} ::msgcat::mcset es {Exterior Numerics} {Numeración exterior} ::msgcat::mcset es {FAQ} ::msgcat::mcset es {FK4} ::msgcat::mcset es {FK5} ::msgcat::mcset es {Factor} ::msgcat::mcset es {File not Found or Unable to load FITS data MIME type} {Fichero no hallado o incapaz de cargar datos FITS de tipo MIME} ::msgcat::mcset es {Filename} {Nombre del fichero} ::msgcat::mcset es {File} {Fichero} ::msgcat::mcset es {Fill} ::msgcat::mcset es {Filter} {Filtro} ::msgcat::mcset es {Find Next} {Hallar la siguiente} ::msgcat::mcset es {Find} {Hallar} ::msgcat::mcset es {First Frame} {Primer Marco} ::msgcat::mcset es {First} {Primer} ::msgcat::mcset es {Fits} ::msgcat::mcset es {Fixed in Size} [encoding convertfrom iso8859-1 {Fijado en tamaño}] ::msgcat::mcset es {Flat} ::msgcat::mcset es {Flip} ::msgcat::mcset es {Font} {Fuente} ::msgcat::mcset es {For more information, use --help} ::msgcat::mcset es {Format} {Formato} ::msgcat::mcset es {Forward} {Hacia adelante} ::msgcat::mcset es {Found} {Hallado} ::msgcat::mcset es {Frame Information} [encoding convertfrom iso8859-1 {Información del marco}] ::msgcat::mcset es {Frame Parameters} ::msgcat::mcset es {Frames} ::msgcat::mcset es {Frame} {Marco} ::msgcat::mcset es {From} ::msgcat::mcset es {Front} {Al frente} ::msgcat::mcset es {Full Range} {Rango completo} ::msgcat::mcset es {Function} [encoding convertfrom iso8859-1 {Función}] ::msgcat::mcset es {GUI Font} ::msgcat::mcset es {Galactic} [encoding convertfrom iso8859-1 {Galáctico}] ::msgcat::mcset es {Gap} ::msgcat::mcset es {Gaussian} {Gausiana} ::msgcat::mcset es {General} ::msgcat::mcset es {Generate} {Generar} ::msgcat::mcset es {Generating Regions} {Generando regiones} ::msgcat::mcset es {Get Information} [encoding convertfrom iso8859-1 {Obtener información}] ::msgcat::mcset es {Gist} ::msgcat::mcset es {Global Properties} ::msgcat::mcset es {Global} ::msgcat::mcset es {Goto Frame} ::msgcat::mcset es {Graph Horz} ::msgcat::mcset es {Graph Vert} ::msgcat::mcset es {Graphics} [encoding convertfrom iso8859-1 {Gráficos}] ::msgcat::mcset es {Graphs} ::msgcat::mcset es {Graph} [encoding convertfrom iso8859-1 {Gráfica}] ::msgcat::mcset es {Grayscale} {Escala de grises} ::msgcat::mcset es {Green} {Verde} ::msgcat::mcset es {Grid Gap} [encoding convertfrom iso8859-1 {Espaciado de la cuadrícula}] ::msgcat::mcset es {Grid} [encoding convertfrom iso8859-1 {Cuadrícula}] ::msgcat::mcset es {Groove} ::msgcat::mcset es {Groups} {Grupos} ::msgcat::mcset es {HTTP} ::msgcat::mcset es {Header} {Cabecera} ::msgcat::mcset es {Height} {Altura} ::msgcat::mcset es {Help Desk} {Mesa de ayuda} ::msgcat::mcset es {Help Me Choose} {Ayudame a escoger} ::msgcat::mcset es {Help} {Ayuda} ::msgcat::mcset es {Hide All} {Ocultar todos} ::msgcat::mcset es {Highlite} ::msgcat::mcset es {High} {Alto} ::msgcat::mcset es {Histogram Equalization} [encoding convertfrom iso8859-1 {Ecualización de histograma}] ::msgcat::mcset es {Histogram} {Histograma} ::msgcat::mcset es {Horizontal Graph} [encoding convertfrom iso8859-1 {Gráfica horizontal}] ::msgcat::mcset es {Horizontal Layout} [encoding convertfrom iso8859-1 {Distribución horizontal}] ::msgcat::mcset es {Horizontal} ::msgcat::mcset es {IAU Location Code} ::msgcat::mcset es {ICRS} ::msgcat::mcset es {Identification} {Identificación} ::msgcat::mcset es {If} {Si} ::msgcat::mcset es {Image Servers} ::msgcat::mcset es {Image} {Imagen} ::msgcat::mcset es {Import Array} ::msgcat::mcset es {Import} ::msgcat::mcset es {Include} {Incluir} ::msgcat::mcset es {Increase} {Aumento} ::msgcat::mcset es {Information Panel} [encoding convertfrom iso8859-1 {Panel de información}] ::msgcat::mcset es {Information} [encoding convertfrom iso8859-1 {Información}] ::msgcat::mcset es {Initialize XPA} {Inicializar XPA} ::msgcat::mcset es {Inner} {Interior} ::msgcat::mcset es {Instrument FOV} {Campo visual del instrumento} ::msgcat::mcset es {Interior Axes} {Ejes interiores} ::msgcat::mcset es {Interior Numerics} [encoding convertfrom iso8859-1 {Numeración interior}] ::msgcat::mcset es {Internal Parse Error} ::msgcat::mcset es {Interval} {Intervalo} ::msgcat::mcset es {Invalid Column Name} ::msgcat::mcset es {Invalid formated multipart/mixed mime type message} ::msgcat::mcset es {Invert Colormap} {Invertir mapa de colores} ::msgcat::mcset es {Invert Selection} [encoding convertfrom iso8859-1 {Invertir selección}] ::msgcat::mcset es {Invert} {Invertir} ::msgcat::mcset es {Italic} [encoding convertfrom iso8859-1 {Itálica}] ::msgcat::mcset es {Items Found} [encoding convertfrom iso8859-1 {Artículos hallados}] ::msgcat::mcset es {Iteration} [encoding convertfrom iso8859-1 {Iteración}] ::msgcat::mcset es {JPEG Quality Factor} {Factor de calidad JPEG} ::msgcat::mcset es {Keep-Alive} ::msgcat::mcset es {Kernel} ::msgcat::mcset es {Keyboard Shortcuts} {Atajos con el teclado} ::msgcat::mcset es {Keyboard} {Teclado} ::msgcat::mcset es {Keyword} ::msgcat::mcset es {Labels} {Etiquetas} ::msgcat::mcset es {Label} {Etiqueta} ::msgcat::mcset es {Landscape} {Apaisado} ::msgcat::mcset es {Language} {Idioma} ::msgcat::mcset es {Last Frame} [encoding convertfrom iso8859-1 {Último marco}] ::msgcat::mcset es {Last} [encoding convertfrom iso8859-1 {Último}] ::msgcat::mcset es {Layout Horz} ::msgcat::mcset es {Layout Vert} ::msgcat::mcset es {Layout} ::msgcat::mcset es {Left} ::msgcat::mcset es {Legal} ::msgcat::mcset es {Legend Title} ::msgcat::mcset es {Legend} ::msgcat::mcset es {Length} {Longitud} ::msgcat::mcset es {Letter} ::msgcat::mcset es {Levels} {Niveles} ::msgcat::mcset es {Level} {Nivel} ::msgcat::mcset es {Limits} [encoding convertfrom iso8859-1 {Límites}] ::msgcat::mcset es {Line Plot Tool} ::msgcat::mcset es {Linear} {Lineal} ::msgcat::mcset es {Line} [encoding convertfrom iso8859-1 {Línea}] ::msgcat::mcset es {List Data} ::msgcat::mcset es {List Regions} {Listar regiones} ::msgcat::mcset es {List} {Listar} ::msgcat::mcset es {Load Analysis Commands} [encoding convertfrom iso8859-1 {Cargar las instrucciones de análisis}] ::msgcat::mcset es {Load Color Tags} ::msgcat::mcset es {Load Colormap} {Cargar mapa de colores} ::msgcat::mcset es {Load Configuration} [encoding convertfrom iso8859-1 {Cargar configuración}] ::msgcat::mcset es {Load Contour Levels} {Cargar niveles de contorno} ::msgcat::mcset es {Load Contours} {Cargar contornos} ::msgcat::mcset es {Load Contrast/Bias} {Cargar contraste/Bias} ::msgcat::mcset es {Load Data} {Cargar datos} ::msgcat::mcset es {Load Mosaic} {Cargar mosaico} ::msgcat::mcset es {Load Regions} {Cargar regiones} ::msgcat::mcset es {Load Template} {Cargar modelo} ::msgcat::mcset es {Load into All Frames} ::msgcat::mcset es {Load into Current Frame} ::msgcat::mcset es {Loading Catalog} ::msgcat::mcset es {Loading} ::msgcat::mcset es {Load} {Cargar} ::msgcat::mcset es {Local} ::msgcat::mcset es {Lock Axes} ::msgcat::mcset es {Lock Bin} ::msgcat::mcset es {Lock Color} ::msgcat::mcset es {Lock Crop Amplifier} ::msgcat::mcset es {Lock Crop Detector} ::msgcat::mcset es {Lock Crop Image} ::msgcat::mcset es {Lock Crop None} ::msgcat::mcset es {Lock Crop Physical} ::msgcat::mcset es {Lock Crop WCS} ::msgcat::mcset es {Lock Crosshair Amplifier} ::msgcat::mcset es {Lock Crosshair Detector} ::msgcat::mcset es {Lock Crosshair Image} ::msgcat::mcset es {Lock Crosshair None} ::msgcat::mcset es {Lock Crosshair Physical} ::msgcat::mcset es {Lock Crosshair WCS} ::msgcat::mcset es {Lock Frame Amplifier} ::msgcat::mcset es {Lock Frame Detector} ::msgcat::mcset es {Lock Frame Image} ::msgcat::mcset es {Lock Frame None} ::msgcat::mcset es {Lock Frame Physical} ::msgcat::mcset es {Lock Frame WCS} ::msgcat::mcset es {Lock Limits} ::msgcat::mcset es {Lock Scale} ::msgcat::mcset es {Lock Slice Image} ::msgcat::mcset es {Lock Slice None} ::msgcat::mcset es {Lock Slice WCS} ::msgcat::mcset es {Lock Smooth} ::msgcat::mcset es {Lock} {Bloquear} ::msgcat::mcset es {Log Exponent} ::msgcat::mcset es {Log} ::msgcat::mcset es {Low High} {Bajo Alto} ::msgcat::mcset es {Lower Left Back} ::msgcat::mcset es {Lower Left Front} ::msgcat::mcset es {Lower Right Back} ::msgcat::mcset es {Lower Right Front} ::msgcat::mcset es {Low} {Bajo} ::msgcat::mcset es {MIP} ::msgcat::mcset es {Magenta} ::msgcat::mcset es {Magnification} ::msgcat::mcset es {Magnifier} {Ventanilla magnificadora} ::msgcat::mcset es {Major} {Mayor} ::msgcat::mcset es {Manual} ::msgcat::mcset es {Mask Parameters} [encoding convertfrom iso8859-1 {Parámetros de mascara}] ::msgcat::mcset es {Match Axes} ::msgcat::mcset es {Match Bin} ::msgcat::mcset es {Match Catalog requires at least 1 row per catalog} ::msgcat::mcset es {Match Color} ::msgcat::mcset es {Match Crop Amplifier} ::msgcat::mcset es {Match Crop Detector} ::msgcat::mcset es {Match Crop Image} ::msgcat::mcset es {Match Crop Physical} ::msgcat::mcset es {Match Crop WCS} ::msgcat::mcset es {Match Crosshair Amplifier} ::msgcat::mcset es {Match Crosshair Detector} ::msgcat::mcset es {Match Crosshair Image} ::msgcat::mcset es {Match Crosshair Physical} ::msgcat::mcset es {Match Crosshair WCS} ::msgcat::mcset es {Match Frame Amplifier} ::msgcat::mcset es {Match Frame Detector} ::msgcat::mcset es {Match Frame Image} ::msgcat::mcset es {Match Frame Physical} ::msgcat::mcset es {Match Frame WCS} ::msgcat::mcset es {Match Limits} ::msgcat::mcset es {Match Scale} ::msgcat::mcset es {Match Slice Image} ::msgcat::mcset es {Match Slice WCS} ::msgcat::mcset es {Match Smooth} ::msgcat::mcset es {Match} ::msgcat::mcset es {Math Function} [encoding convertfrom iso8859-1 {Función matemática}] ::msgcat::mcset es {Matplotlib} ::msgcat::mcset es {Max Rows} [encoding convertfrom iso8859-1 {Máx filas}] ::msgcat::mcset es {Maximum} ::msgcat::mcset es {Max} [encoding convertfrom iso8859-1 {Máx}] ::msgcat::mcset es {Menus and Buttons} ::msgcat::mcset es {Menu} ::msgcat::mcset es {Message Log} ::msgcat::mcset es {Method} [encoding convertfrom iso8859-1 {Método}] ::msgcat::mcset es {Min Max Parameters} ::msgcat::mcset es {Min Max} [encoding convertfrom iso8859-1 {Mín Máx}] ::msgcat::mcset es {Minimum} ::msgcat::mcset es {Minor} {Menor} ::msgcat::mcset es {Minutes} ::msgcat::mcset es {Min} [encoding convertfrom iso8859-1 {Mín}] ::msgcat::mcset es {Mission} [encoding convertfrom iso8859-1 {Misión}] ::msgcat::mcset es {Mode} ::msgcat::mcset es {Mosaic IRAF Segment} ::msgcat::mcset es {Mosaic IRAF} ::msgcat::mcset es {Mosaic WCS Segment} ::msgcat::mcset es {Mosaic WCS} ::msgcat::mcset es {Mosaic WFPC2} ::msgcat::mcset es {Mosaic} ::msgcat::mcset es {Mouse Click Epsilon} ::msgcat::mcset es {Mouse Wheel Bin} ::msgcat::mcset es {Mouse Wheel Zoom} ::msgcat::mcset es {Mouse and Keyboard} ::msgcat::mcset es {Move Back} [encoding convertfrom iso8859-1 {Mover atrás}] ::msgcat::mcset es {Move First} {Mover al primero} ::msgcat::mcset es {Move Forward} {Mover adelante} ::msgcat::mcset es {Move Frame} ::msgcat::mcset es {Move Last} [encoding convertfrom iso8859-1 {Mover al Último}] ::msgcat::mcset es {Move to Back} [encoding convertfrom iso8859-1 {Poner detrás}] ::msgcat::mcset es {Move to Front} {Poner delante} ::msgcat::mcset es {Movie} ::msgcat::mcset es {Multiple Extension Cube} ::msgcat::mcset es {Multiple Extension Frames} ::msgcat::mcset es {Multiple WCS} [encoding convertfrom iso8859-1 {Múltiple WCS}] ::msgcat::mcset es {NRRD} ::msgcat::mcset es {Name Resolution} [encoding convertfrom iso8859-1 {Conversión a coordenadas}] ::msgcat::mcset es {Name Server} {Nombre del servidor} ::msgcat::mcset es {Name or Designation} [encoding convertfrom iso8859-1 {Nombre o designación}] ::msgcat::mcset es {Name} ::msgcat::mcset es {Native Dialog} [encoding convertfrom iso8859-1 {Diálogo nativo}] ::msgcat::mcset es {New Features} [encoding convertfrom iso8859-1 {Nuevas características}] ::msgcat::mcset es {New Frame 3D} {Nuevo Marco 3D} ::msgcat::mcset es {New Frame RGB} {Nuevo marco RGB} ::msgcat::mcset es {New Frame each Time} {Nuevo marco cada vez} ::msgcat::mcset es {New Frame} {Nuevo marco} ::msgcat::mcset es {New Group} {Nuevo grupo} ::msgcat::mcset es {New} {Nuevo} ::msgcat::mcset es {Next Frame} {Siguiente Marco} ::msgcat::mcset es {Next} {Siguiente} ::msgcat::mcset es {No Catalog specified} [encoding convertfrom iso8859-1 {No se ha especificado el catálogo}] ::msgcat::mcset es {No Data Available} ::msgcat::mcset es {No Items Found} [encoding convertfrom iso8859-1 {Artículos no encontrados}] ::msgcat::mcset es {No current frame} ::msgcat::mcset es {Non-zero} {No nulo} ::msgcat::mcset es {None} {Nada} ::msgcat::mcset es {Normal} ::msgcat::mcset es {North} {Norte} ::msgcat::mcset es {Not Found} ::msgcat::mcset es {Not Supported} ::msgcat::mcset es {Number of Samples} [encoding convertfrom iso8859-1 {Número de muestreos}] ::msgcat::mcset es {Number of Threads} ::msgcat::mcset es {Number of Ticks} ::msgcat::mcset es {Number} [encoding convertfrom iso8859-1 {Número}] ::msgcat::mcset es {Numerics} [encoding convertfrom iso8859-1 {Numeración}] ::msgcat::mcset es {OK} {Vale} ::msgcat::mcset es {Object} {Objeto} ::msgcat::mcset es {Open File} {Abrir fichero} ::msgcat::mcset es {Open TCL Console} {Abrir consola TCL} ::msgcat::mcset es {Open URL} {Abrir URL} ::msgcat::mcset es {Open as} ::msgcat::mcset es {Open} {Abrir} ::msgcat::mcset es {Operator} {Operador} ::msgcat::mcset es {Orientation} [encoding convertfrom iso8859-1 {Orientación}] ::msgcat::mcset es {Origin} ::msgcat::mcset es {Oscillate} ::msgcat::mcset es {Other Color} ::msgcat::mcset es {Other Font Size} ::msgcat::mcset es {Other} {Otro} ::msgcat::mcset es {Outer} {Exterior} ::msgcat::mcset es {Overlap} ::msgcat::mcset es {PS Page Setup} [encoding convertfrom iso8859-1 {Setup para Página PS}] ::msgcat::mcset es {PS Print} {Imprimir PS} ::msgcat::mcset es {Page Setup} [encoding convertfrom iso8859-1 {Formato de página}] ::msgcat::mcset es {Page Source} [encoding convertfrom iso8859-1 {Fuente HTML de la página}] ::msgcat::mcset es {Pan To} {Trasladar a} ::msgcat::mcset es {Pan Zoom Rotate Parameters} [encoding convertfrom iso8859-1 {Parámetros de traslación, Zoom y rotación}] ::msgcat::mcset es {Pan Zoom} ::msgcat::mcset es {Pan then Zoom} [encoding convertfrom iso8859-1 {Trasladar y después Zoom}] ::msgcat::mcset es {Panda} {Corona segmentada} ::msgcat::mcset es {Panner} [encoding convertfrom iso8859-1 {Ventanilla panorámica}] ::msgcat::mcset es {Pan} {Trasladar} ::msgcat::mcset es {Parameters} [encoding convertfrom iso8859-1 {Parámetros}] ::msgcat::mcset es {Password} [encoding convertfrom iso8859-1 {Contraseña}] ::msgcat::mcset es {Paste Contours} {Pegar contornos} ::msgcat::mcset es {Paste} {Pegar} ::msgcat::mcset es {Physical} [encoding convertfrom iso8859-1 {Física}] ::msgcat::mcset es {Pixel Distribution} [encoding convertfrom iso8859-1 {Distribución por píxeles}] ::msgcat::mcset es {Pixel Size} [encoding convertfrom iso8859-1 {Tamaño del píxel}] ::msgcat::mcset es {Pixel Table} [encoding convertfrom iso8859-1 {Tabla en píxeles}] ::msgcat::mcset es {Pixels} [encoding convertfrom iso8859-1 {Píxeles}] ::msgcat::mcset es {Play} ::msgcat::mcset es {Please Select a Region} ::msgcat::mcset es {Please change the file's permission to disable other users write access. Use anyway?} ::msgcat::mcset es {Please specify width, height, and either name or (ra,dec)} {Por farvor, especifique el ancho, altura, y nombre o (A.R.,Dec.)} ::msgcat::mcset es {Plot 2D} ::msgcat::mcset es {Plot 3D} ::msgcat::mcset es {Plot Title} [encoding convertfrom iso8859-1 {Título de la gráfica}] ::msgcat::mcset es {Plotting Regions} {Dibujando regiones} ::msgcat::mcset es {Plot} ::msgcat::mcset es {Plus} [encoding convertfrom iso8859-1 {Más}] ::msgcat::mcset es {Pointer} {Indicador} ::msgcat::mcset es {Points} [encoding convertfrom iso8859-1 {Posición}] ::msgcat::mcset es {Point} [encoding convertfrom iso8859-1 {Posición}] ::msgcat::mcset es {Polygon} [encoding convertfrom iso8859-1 {Polígono}] ::msgcat::mcset es {Portrait} ::msgcat::mcset es {Poster} [encoding convertfrom iso8859-1 {Póster}] ::msgcat::mcset es {Postscript Page Setup} [encoding convertfrom iso8859-1 {Setup para Página Postscript}] ::msgcat::mcset es {Postscript Print} {Imprimir Postscript} ::msgcat::mcset es {Postscript} ::msgcat::mcset es {Power} {Potencia} ::msgcat::mcset es {Preferences} {Preferencias} ::msgcat::mcset es {Preserve During Load} {Conservar mientras se carga} ::msgcat::mcset es {Previous Frame} {Marco Previo} ::msgcat::mcset es {Previous} {Previo} ::msgcat::mcset es {Prev} ::msgcat::mcset es {Print Coordinates} {Imprimir coordenadas} ::msgcat::mcset es {Print To} {Imprimir en} ::msgcat::mcset es {Printer} {Impresora} ::msgcat::mcset es {Print} {Imprimir} ::msgcat::mcset es {Projection} [encoding convertfrom iso8859-1 {Proyección}] ::msgcat::mcset es {Properties} {Propiedades} ::msgcat::mcset es {Property} {Propiedad} ::msgcat::mcset es {Proxy Host} ::msgcat::mcset es {Proxy Port} ::msgcat::mcset es {Publication} [encoding convertfrom iso8859-1 {Publicación}] ::msgcat::mcset es {Quadratic} [encoding convertfrom iso8859-1 {Cuadrático}] ::msgcat::mcset es {RGB Array} ::msgcat::mcset es {RGB Cube} ::msgcat::mcset es {RGB Image} ::msgcat::mcset es {RGB} ::msgcat::mcset es {Radial Profile} ::msgcat::mcset es {Radial} ::msgcat::mcset es {Radius} {Radio} ::msgcat::mcset es {Raised} ::msgcat::mcset es {Range} ::msgcat::mcset es {Redo} {Rehacer} ::msgcat::mcset es {Red} {Rojo} ::msgcat::mcset es {Reference Manual} {Manual de referencia} ::msgcat::mcset es {Reference} {Manual} ::msgcat::mcset es {Refresh Frame} {Refrescar marco} ::msgcat::mcset es {Refresh} {Refrescar} ::msgcat::mcset es {Region Parameters} ::msgcat::mcset es {Region} [encoding convertfrom iso8859-1 {Región}] ::msgcat::mcset es {Release Notes} [encoding convertfrom iso8859-1 {Notas de esta versión}] ::msgcat::mcset es {Release} [encoding convertfrom iso8859-1 {Versión}] ::msgcat::mcset es {Relief} ::msgcat::mcset es {Reload} {Recargar} ::msgcat::mcset es {Render} ::msgcat::mcset es {Repeat} ::msgcat::mcset es {Reset Colormap} {Restaurar el mapa de colores} ::msgcat::mcset es {Reset Frame} {Restaurar Marco} ::msgcat::mcset es {Reset} ::msgcat::mcset es {Restore} ::msgcat::mcset es {Retrieve} {Localizar y leer} ::msgcat::mcset es {Return} ::msgcat::mcset es {Right} ::msgcat::mcset es {Roman} ::msgcat::mcset es {Rotate} {Rotar} ::msgcat::mcset es {Rows} {Filas} ::msgcat::mcset es {Row} ::msgcat::mcset es {Ruler} {Regla} ::msgcat::mcset es {SAMP Image} ::msgcat::mcset es {SAMP Table} ::msgcat::mcset es {SAMP: already connected} ::msgcat::mcset es {SAMP: internal error} ::msgcat::mcset es {SAMP: not connected} ::msgcat::mcset es {SAMP: unable to locate HUB} ::msgcat::mcset es {SAMP} ::msgcat::mcset es {Sample Increment} ::msgcat::mcset es {Sample Parameters} ::msgcat::mcset es {Samples per Line} [encoding convertfrom iso8859-1 {Muestreos por línea}] ::msgcat::mcset es {Sample} ::msgcat::mcset es {Save 3D Movie} ::msgcat::mcset es {Save Color Tags} ::msgcat::mcset es {Save Colormap} {Guardar mapa de colores} ::msgcat::mcset es {Save Configuration} [encoding convertfrom iso8859-1 {Guardar configuración}] ::msgcat::mcset es {Save Contour Levels} {Guardar niveles de contorno} ::msgcat::mcset es {Save Contours} {Guardar contornos} ::msgcat::mcset es {Save Contrast/Bias} {Guardar contraste/Bias} ::msgcat::mcset es {Save Data} {Guardar datos} ::msgcat::mcset es {Save Image on Download} ::msgcat::mcset es {Save Image} {Guardar imagen} ::msgcat::mcset es {Save Regions} {Guardar regiones} ::msgcat::mcset es {Save Template} {Guardar modelo} ::msgcat::mcset es {Save as} ::msgcat::mcset es {Save} {Guardar} ::msgcat::mcset es {Scale Parameters} [encoding convertfrom iso8859-1 {Párametros de escala}] ::msgcat::mcset es {Scale and Limits} ::msgcat::mcset es {Scale} {Escala} ::msgcat::mcset es {Scan} {Escanear} ::msgcat::mcset es {Scatter Plot Tool} ::msgcat::mcset es {Scope} {Alcance} ::msgcat::mcset es {Search for Catalogs} [encoding convertfrom iso8859-1 {Buscar por catálogos}] ::msgcat::mcset es {Searching for catalogs} [encoding convertfrom iso8859-1 {Buscando por catálogos}] ::msgcat::mcset es {Seconds} {Segundos} ::msgcat::mcset es {Segment} ::msgcat::mcset es {Select All} {Seleccionar todos} ::msgcat::mcset es {Select Coordinate System } {Seleccionar el sistema de coordenadas} ::msgcat::mcset es {Select None} {Seleccionar nada} ::msgcat::mcset es {Select} ::msgcat::mcset es {Send} ::msgcat::mcset es {Server} {Servidor} ::msgcat::mcset es {Sexagesimal} ::msgcat::mcset es {Shape} {Forma} ::msgcat::mcset es {Show All} {Mostrarlos todos} ::msgcat::mcset es {Show Command} ::msgcat::mcset es {Show Compass} ::msgcat::mcset es {Show Text} {Mostrar Texto} ::msgcat::mcset es {Show/Hide Frames} {Mostar/ocultar marcos} ::msgcat::mcset es {Show} {Mostrar} ::msgcat::mcset es {Simple Cross} ::msgcat::mcset es {Simple Plus} ::msgcat::mcset es {Single Frame} [encoding convertfrom iso8859-1 {Un único marco}] ::msgcat::mcset es {Single} [encoding convertfrom iso8859-1 {Único}] ::msgcat::mcset es {Sites} ::msgcat::mcset es {Size/Radius} [encoding convertfrom iso8859-1 {Tamaño/Radio}] ::msgcat::mcset es {Size} [encoding convertfrom iso8859-1 {Tamaño}] ::msgcat::mcset es {Skip First} {Omitir primeros} ::msgcat::mcset es {Slice} ::msgcat::mcset es {Smooth Parameters} [encoding convertfrom iso8859-1 {Parámetros de suavizado}] ::msgcat::mcset es {Smoothness} ::msgcat::mcset es {Smooth} {Suavizar} ::msgcat::mcset es {Solid} ::msgcat::mcset es {Sorry, DS9 does not support} {Lo siento, DS9 no admite} ::msgcat::mcset es {Sorry, DS9 requires a Truecolor8, Truecolor16, Truecolor24 visual be available} ::msgcat::mcset es {Sort} {Clasificar} ::msgcat::mcset es {Source TCL} [encoding convertfrom iso8859-1 {Leer código TCL}] ::msgcat::mcset es {Source} {Fuente} ::msgcat::mcset es {Space Equal Distance} ::msgcat::mcset es {Space Equal Value} ::msgcat::mcset es {Spacing} {Espaciado} ::msgcat::mcset es {Sqrt} ::msgcat::mcset es {Square Root} [encoding convertfrom iso8859-1 {Raíz cuadrada}] ::msgcat::mcset es {Squared} {Al cuadrado} ::msgcat::mcset es {Square} ::msgcat::mcset es {Stacked} ::msgcat::mcset es {Starbase} ::msgcat::mcset es {Startup} ::msgcat::mcset es {Start} {Empezar} ::msgcat::mcset es {Statistics} ::msgcat::mcset es {Stats} ::msgcat::mcset es {Status} {Estado} ::msgcat::mcset es {Step} {Escalonado} ::msgcat::mcset es {Stop} {Parar} ::msgcat::mcset es {Story of SAOImage DS9} ::msgcat::mcset es {Story} ::msgcat::mcset es {Sum} {Suma} ::msgcat::mcset es {Sunken} ::msgcat::mcset es {Symbol Editor} [encoding convertfrom iso8859-1 {Editor de símbolos}] ::msgcat::mcset es {Symbol} [encoding convertfrom iso8859-1 {Símbolo}] ::msgcat::mcset es {Tab-Separated-Value} ::msgcat::mcset es {Table} ::msgcat::mcset es {Tabloid} ::msgcat::mcset es {Tag Color} ::msgcat::mcset es {Task} ::msgcat::mcset es {Template} ::msgcat::mcset es {Text Font} ::msgcat::mcset es {Text} {Texto} ::msgcat::mcset es {Then} {Entonces} ::msgcat::mcset es {Thickness} {Grosor} ::msgcat::mcset es {This analysis task is already running. Do you wish to kill it?} [encoding convertfrom iso8859-1 {Esta tarea para el análisis ya está siendo ejecutada. ¿Desea interrumpirla?}] ::msgcat::mcset es {This function is not available.} ::msgcat::mcset es {This function is not currently supported for this port.} ::msgcat::mcset es {Tickmarks} {Marcas} ::msgcat::mcset es {Tile Frames} {Alicatar los marcos} ::msgcat::mcset es {Tile Parameters} [encoding convertfrom iso8859-1 {Parámetros de alicatado}] ::msgcat::mcset es {Tile} {Tejar} ::msgcat::mcset es {Times} ::msgcat::mcset es {Title} [encoding convertfrom iso8859-1 {Título}] ::msgcat::mcset es {Tophat} ::msgcat::mcset es {Topographic} ::msgcat::mcset es {Top} ::msgcat::mcset es {To} {A} ::msgcat::mcset es {Transparency} ::msgcat::mcset es {Triangle} ::msgcat::mcset es {Type} {Clase} ::msgcat::mcset es {URL} ::msgcat::mcset es {Unable to connect directly: using Web Proxy} ::msgcat::mcset es {Unable to determine date of observation} ::msgcat::mcset es {Unable to determine time of observation} ::msgcat::mcset es {Unable to evaluate filter} {Incapaz de evaluar el filtro} ::msgcat::mcset es {Unable to find SIAP window} ::msgcat::mcset es {Unable to find URL column} ::msgcat::mcset es {Unable to find catalog window} [encoding convertfrom iso8859-1 {Incapaz de hallar la ventana de catálogo}] ::msgcat::mcset es {Unable to find plot window} [encoding convertfrom iso8859-1 {Incapaz de hallar la ventana gráfica}] ::msgcat::mcset es {Unable to load RGB image into a non-rgb frame} {Incapaz de cargar imagen RGB en un marco no RGB} ::msgcat::mcset es {Unable to load region file} ::msgcat::mcset es {Unable to load} {Incapaz de cargar} ::msgcat::mcset es {Unable to locate URL} {Incapaz de localizar URL} ::msgcat::mcset es {Unable to match target with XPA Mime request} ::msgcat::mcset es {Unable to open file} {Incapaz de abrir fichero} ::msgcat::mcset es {Unable to process Analysis file} ::msgcat::mcset es {Unable to save RGB image from a non-rgb frame} ::msgcat::mcset es {Undo} {Deshacer} ::msgcat::mcset es {Unique} ::msgcat::mcset es {Unists} ::msgcat::mcset es {Units} {Unidades} ::msgcat::mcset es {Unknown Colormap} ::msgcat::mcset es {Unknown command} ::msgcat::mcset es {Update Filter} ::msgcat::mcset es {Update Group} {Actualizar grupo} ::msgcat::mcset es {Update from Current Crosshair} {Actualizar a partir del punto de mira actual} ::msgcat::mcset es {Update from Current Frame} {Actualizar a partir del marco actual} ::msgcat::mcset es {Update} {Actualizar} ::msgcat::mcset es {Upper Left Back} ::msgcat::mcset es {Upper Left Front} ::msgcat::mcset es {Upper Right Back} ::msgcat::mcset es {Upper Right Front} ::msgcat::mcset es {Use Authentication} [encoding convertfrom iso8859-1 {Usa autenticación}] ::msgcat::mcset es {Use Current Frame on Download} {Usar marco actual al transferir} ::msgcat::mcset es {Use Internal Web Browser} {Usar Web Browser interno} ::msgcat::mcset es {Use Proxy} {Usar Proxy} ::msgcat::mcset es {User Manual} ::msgcat::mcset es {Username} {Nombre de usuario} ::msgcat::mcset es {User} {Usuario} ::msgcat::mcset es {Use} {Usa} ::msgcat::mcset es {VO Server} ::msgcat::mcset es {VO} ::msgcat::mcset es {Value} {Valor} ::msgcat::mcset es {Vector} ::msgcat::mcset es {Vertical Graph} [encoding convertfrom iso8859-1 {Gráfica vertical}] ::msgcat::mcset es {Vertical Layout} [encoding convertfrom iso8859-1 {Distribución vertical}] ::msgcat::mcset es {Vertical Text} {Texto vertical} ::msgcat::mcset es {Vertical} ::msgcat::mcset es {View} {Ver} ::msgcat::mcset es {Virtual Observatory} {Observatorio Virtual} ::msgcat::mcset es {WCS Parameters} ::msgcat::mcset es {WCS} ::msgcat::mcset es {Wavelength} {Longitud de onda} ::msgcat::mcset es {Web Browser} ::msgcat::mcset es {White} {Blanco} ::msgcat::mcset es {Width} {Ancho} ::msgcat::mcset es {Window} ::msgcat::mcset es {Words matching title, description} [encoding convertfrom iso8859-1 {Palabras que coincidan con el título, descripción}] ::msgcat::mcset es {X Axis Title} ::msgcat::mcset es {X Grid} ::msgcat::mcset es {XPA Information} [encoding convertfrom iso8859-1 {Información XPA}] ::msgcat::mcset es {XPA not initialized} {XPA no inicializado} ::msgcat::mcset es {XPA unable to verify hostname, setting XPA_METHOD to LOCAL} ::msgcat::mcset es {XPA} ::msgcat::mcset es {X} ::msgcat::mcset es {Y Axis Title} ::msgcat::mcset es {Y Grid} ::msgcat::mcset es {Yellow} {Amarillo} ::msgcat::mcset es {Y} ::msgcat::mcset es {Z Axis Scale} ::msgcat::mcset es {ZScale Parameters} [encoding convertfrom iso8859-1 {Parámetros de la escala Z}] ::msgcat::mcset es {Zero} ::msgcat::mcset es {Zoom Fit} ::msgcat::mcset es {Zoom In} {Aumentar} ::msgcat::mcset es {Zoom Out} {Reducir} ::msgcat::mcset es {Zoom} {Zoom} ::msgcat::mcset es {and} ::msgcat::mcset es {blue} ::msgcat::mcset es {b} ::msgcat::mcset es {color} ::msgcat::mcset es {cool} ::msgcat::mcset es {green} ::msgcat::mcset es {grey} {gris} ::msgcat::mcset es {g} ::msgcat::mcset es {h5utils} ::msgcat::mcset es {heat} ::msgcat::mcset es {not} ::msgcat::mcset es {only} ::msgcat::mcset es {or center of data} {o centro de los datos} ::msgcat::mcset es {rainbow} ::msgcat::mcset es {red} ::msgcat::mcset es {rows of data have been downloaded. More may be available. You may wish to adjust the maximum allowed} [encoding convertfrom iso8859-1 {Filas de datos transferidas. Puede que haya más disponibles. Quizá quiera ajustar el máximo permitido.}] ::msgcat::mcset es {r} ::msgcat::mcset es {staircase} ::msgcat::mcset es {standard} [encoding convertfrom iso8859-1 {estándar}] ::msgcat::mcset es {x} ::msgcat::mcset es {} saods9/ds9/msgs/fr.msg000644 000765 000000 00000114333 12741217134 015162 0ustar00joyewheel000000 000000 ::msgcat::mcset fr {2D} ::msgcat::mcset fr {3D} ::msgcat::mcset fr {A postscript generation error has occurred} [encoding convertfrom iso8859-1 {Une erreur de génération de postscript s'est produite}] ::msgcat::mcset fr {AIP} ::msgcat::mcset fr {Abort} ::msgcat::mcset fr {About SAOImage DS9} [encoding convertfrom iso8859-1 {À propos de SAOImage DS9}] ::msgcat::mcset fr {About} [encoding convertfrom iso8859-1 {À propos de}] ::msgcat::mcset fr {Acknowledgment} {Remerciement} ::msgcat::mcset fr {Add} {Ajouter} ::msgcat::mcset fr {Advanced} [encoding convertfrom iso8859-1 {Avancé}] ::msgcat::mcset fr {Aligned} ::msgcat::mcset fr {Align} {Aligner} ::msgcat::mcset fr {All Columns} {Toutes les colonnes} ::msgcat::mcset fr {All Rows} [encoding convertfrom iso8859-1 {Toutes les rangées}] ::msgcat::mcset fr {All} {Tous} ::msgcat::mcset fr {Always save files during Backup} ::msgcat::mcset fr {Amplifier} {Amplificateur} ::msgcat::mcset fr {An error has occurred during backup} ::msgcat::mcset fr {An error has occurred during restore} ::msgcat::mcset fr {An error has occurred invoking the Analysis task} [encoding convertfrom iso8859-1 {Une erreur s'est produite en invoquant la tâche d'analyse}] ::msgcat::mcset fr {An error has occurred while creating image.} ::msgcat::mcset fr {An error has occurred while creating the image. Please be sure that the ds9 window is in the upper left corner of the default screen and the entire window is visible.} ::msgcat::mcset fr {An error has occurred while creating the image. Please be sure that the entire image window is visible on the screen.} ::msgcat::mcset fr {An error has occurred while printing} {Une erreur s'est produite pendant l'impression} ::msgcat::mcset fr {An error has occurred while reading image.} ::msgcat::mcset fr {An error has occurred while saving} {Une erreur s'est produite pendant la sauvegarde} ::msgcat::mcset fr {An error has occurred while updating VO server list} ::msgcat::mcset fr {An error has occurred while writing image.} ::msgcat::mcset fr {An internal error has been detected} ::msgcat::mcset fr {Analysis Command Log} {Enregistrement des commandes d'analyse} ::msgcat::mcset fr {Analysis Commands} ::msgcat::mcset fr {Analysis File} ::msgcat::mcset fr {Analysis Log} ::msgcat::mcset fr {Analysis} {Analyse} ::msgcat::mcset fr {Angle Complement} [encoding convertfrom iso8859-1 {Complément d'angle}] ::msgcat::mcset fr {Angles} {Angles} ::msgcat::mcset fr {Angle} {Angle} ::msgcat::mcset fr {Annuli} {Anneaux} ::msgcat::mcset fr {Annulus} {Anneau} ::msgcat::mcset fr {Apply} {Appliquer} ::msgcat::mcset fr {ArcMin} ::msgcat::mcset fr {ArcSec} ::msgcat::mcset fr {Architecture} ::msgcat::mcset fr {Archives} ::msgcat::mcset fr {Array} ::msgcat::mcset fr {Arrow} [encoding convertfrom iso8859-1 {Flèche}] ::msgcat::mcset fr {Astronomy} ::msgcat::mcset fr {At Startup} ::msgcat::mcset fr {At least 2 different catalogs are required} ::msgcat::mcset fr {Auto Centroid} ::msgcat::mcset fr {Auto Plot 2D} ::msgcat::mcset fr {Auto Plot 3D} ::msgcat::mcset fr {Auto Plot Statistics} ::msgcat::mcset fr {Auto Plot} ::msgcat::mcset fr {Autoload FITS Regions} [encoding convertfrom iso8859-1 {Autochargement des régions FITS}] ::msgcat::mcset fr {Autoload} ::msgcat::mcset fr {Automatic} {Automatique} ::msgcat::mcset fr {Average} {Moyenne} ::msgcat::mcset fr {Axes Number} ::msgcat::mcset fr {Axes Order} ::msgcat::mcset fr {Axes Title} ::msgcat::mcset fr {Axes} ::msgcat::mcset fr {Axis Length} {Longueur de l'axe} ::msgcat::mcset fr {Axis Numbers} [encoding convertfrom iso8859-1 {Échelle de l'axe}] ::msgcat::mcset fr {Axis Title} ::msgcat::mcset fr {Axis} {Axe} ::msgcat::mcset fr {Azimuth} ::msgcat::mcset fr {Background Color} {Couleur de fond} ::msgcat::mcset fr {Background} {Fond} ::msgcat::mcset fr {Backup} ::msgcat::mcset fr {Back} {Retour} ::msgcat::mcset fr {Bar Plot Tool} ::msgcat::mcset fr {Bias} {Biais} ::msgcat::mcset fr {Bin 3rd Column} [encoding convertfrom iso8859-1 {3ème colonne de bin}] ::msgcat::mcset fr {Bin Center} {Centre de bin} ::msgcat::mcset fr {Bin Columns} {Colonnes de bin} ::msgcat::mcset fr {Bin Filter} {Filtre de bin} ::msgcat::mcset fr {Bin Fit} ::msgcat::mcset fr {Bin In} ::msgcat::mcset fr {Bin Out} ::msgcat::mcset fr {Binning Parameters} [encoding convertfrom iso8859-1 {Paramètres de bin}] ::msgcat::mcset fr {Bin} ::msgcat::mcset fr {Black} {Noir} ::msgcat::mcset fr {Blank/Inf/NaN Color} {Blanc/Inf/NaN Couleur} ::msgcat::mcset fr {Blink Frames} [encoding convertfrom iso8859-1 {Clignotement des fenêtres}] ::msgcat::mcset fr {Blink Interval} {Intervalle de clignotement} ::msgcat::mcset fr {Blink} {Clignotement} ::msgcat::mcset fr {Block Fit} ::msgcat::mcset fr {Block In} [encoding convertfrom iso8859-1 {Bin à}] ::msgcat::mcset fr {Block Out} {Bin de} ::msgcat::mcset fr {Block Parameters} ::msgcat::mcset fr {Block} {Bin} ::msgcat::mcset fr {Blue} {Bleu} ::msgcat::mcset fr {Bold} {Gras} ::msgcat::mcset fr {Border} {Bordure} ::msgcat::mcset fr {Bottom} ::msgcat::mcset fr {Box Annulus} [encoding convertfrom iso8859-1 {Anneau de boîte}] ::msgcat::mcset fr {Box Panda} ::msgcat::mcset fr {BoxCircle} ::msgcat::mcset fr {Boxcar} ::msgcat::mcset fr {Box} [encoding convertfrom iso8859-1 {Boîte}] ::msgcat::mcset fr {Broadcast} ::msgcat::mcset fr {Browser} ::msgcat::mcset fr {Browse} {Parcourir} ::msgcat::mcset fr {Buffer} {Tampon} ::msgcat::mcset fr {Buttonbar} ::msgcat::mcset fr {Buttons} {Boutons} ::msgcat::mcset fr {Bytes} {Octets} ::msgcat::mcset fr {CMYK} ::msgcat::mcset fr {Can Delete} {Peut effacer} ::msgcat::mcset fr {Can Edit} [encoding convertfrom iso8859-1 {Peut éditer}] ::msgcat::mcset fr {Can Move} [encoding convertfrom iso8859-1 {Peut déplacer}] ::msgcat::mcset fr {Can Rotate} {Peut tourner} ::msgcat::mcset fr {Cancelled} ::msgcat::mcset fr {Cancel} {Annuler} ::msgcat::mcset fr {Cap} ::msgcat::mcset fr {Catalog Server} {Serveur de catalogue} ::msgcat::mcset fr {Catalog Tool} {Outil de catalogue} ::msgcat::mcset fr {Catalogs} {Catalogues} ::msgcat::mcset fr {Catalog} {Catalogue} ::msgcat::mcset fr {Catrom} ::msgcat::mcset fr {Cat} ::msgcat::mcset fr {Center Image} {Centrer l'image} ::msgcat::mcset fr {Center Non-modal Dialogs} ::msgcat::mcset fr {Center} {Centrer} ::msgcat::mcset fr {Centroid Parameters} ::msgcat::mcset fr {Centroid} ::msgcat::mcset fr {Circle} {Cercle} ::msgcat::mcset fr {Clear All} {Tout effacer} ::msgcat::mcset fr {Clear Analysis Commands} {Effacer les commandes d'analyse} ::msgcat::mcset fr {Clear Cache} {Effacer le cache} ::msgcat::mcset fr {Clear Data} [encoding convertfrom iso8859-1 {Effacer les données}] ::msgcat::mcset fr {Clear External Analysis Commands?} {Effacer les commandes d'analyse externes ?} ::msgcat::mcset fr {Clear Filter} {Effacer le filtre} ::msgcat::mcset fr {Clear Frame} [encoding convertfrom iso8859-1 {Effacer la fenêtre}] ::msgcat::mcset fr {Clear Preferences?} [encoding convertfrom iso8859-1 {Effacer les préférences ?}] ::msgcat::mcset fr {Clear Preferences} [encoding convertfrom iso8859-1 {Effacer les préférences}] ::msgcat::mcset fr {Clear} {Effacer} ::msgcat::mcset fr {Click to Center} {Cliquer pour centrer} ::msgcat::mcset fr {Close} {Fermer} ::msgcat::mcset fr {Colorbar Size} ::msgcat::mcset fr {Colorbar} {Barre de couleurs} ::msgcat::mcset fr {Colormap Parameters} [encoding convertfrom iso8859-1 {Paramètres de carte de couleurs}] ::msgcat::mcset fr {Colormap} {Carte de couleurs} ::msgcat::mcset fr {Color} {Couleur} ::msgcat::mcset fr {Columns} {Colonnes} ::msgcat::mcset fr {Column} {Colonne} ::msgcat::mcset fr {Command not allowed} ::msgcat::mcset fr {Command} ::msgcat::mcset fr {Compass} {Boussole} ::msgcat::mcset fr {Composite Region} ::msgcat::mcset fr {Composite} ::msgcat::mcset fr {Compression} ::msgcat::mcset fr {Configure} {Configurer} ::msgcat::mcset fr {Connect Directly} {Connexion directe} ::msgcat::mcset fr {Connect SAMP} ::msgcat::mcset fr {Connect Using Web Proxy} {Connexion par proxy web} ::msgcat::mcset fr {Connect} ::msgcat::mcset fr {Console} ::msgcat::mcset fr {Contacting Image Server} ::msgcat::mcset fr {Contour Parameters} [encoding convertfrom iso8859-1 {Paramètres de contour}] ::msgcat::mcset fr {Contours} ::msgcat::mcset fr {Contour} ::msgcat::mcset fr {Contrast} {Contraste} ::msgcat::mcset fr {Convert to Polygons} {Convertir en polygones} ::msgcat::mcset fr {Coordinate Grid Parameters} [encoding convertfrom iso8859-1 {Paramètres de grille de coordonnées}] ::msgcat::mcset fr {Coordinate Grid} [encoding convertfrom iso8859-1 {Grille de coordonnées}] ::msgcat::mcset fr {Coordinate System} [encoding convertfrom iso8859-1 {Système de coordonnées}] ::msgcat::mcset fr {Coordinates} ::msgcat::mcset fr {Coordinate} [encoding convertfrom iso8859-1 {Coordonnée}] ::msgcat::mcset fr {Copy Contours} {Copier les contours} ::msgcat::mcset fr {Copy to Regions} [encoding convertfrom iso8859-1 {Copier vers Régions}] ::msgcat::mcset fr {Copy} {Copier} ::msgcat::mcset fr {Create Movie} ::msgcat::mcset fr {Create New Frame on Download} [encoding convertfrom iso8859-1 {Créer une nouvelle fenêtre au téléchargement}] ::msgcat::mcset fr {Create} ::msgcat::mcset fr {Crop Parameters} ::msgcat::mcset fr {Crop} ::msgcat::mcset fr {Crosshair Parameters} ::msgcat::mcset fr {Crosshair To} [encoding convertfrom iso8859-1 {Réticule vers}] ::msgcat::mcset fr {Crosshair} [encoding convertfrom iso8859-1 {Réticule}] ::msgcat::mcset fr {Cross} {Croisement} ::msgcat::mcset fr {Cubehelix} ::msgcat::mcset fr {Cube} ::msgcat::mcset fr {Cubic} ::msgcat::mcset fr {Current Frame} {Fenêtre courante} ::msgcat::mcset fr {Current Range} {Intervalle courant} ::msgcat::mcset fr {Current} {Courant} ::msgcat::mcset fr {Cursor} {Curseur} ::msgcat::mcset fr {Cut} {Couper} ::msgcat::mcset fr {Cyan} ::msgcat::mcset fr {DPI} ::msgcat::mcset fr {DS9 has detected a newer version of a backup file and therefore will not process this file.} ::msgcat::mcset fr {DS9 has detected a newer version of a preferences file.} ::msgcat::mcset fr {DS9 has detected an older backup file, do you wish to continue?} ::msgcat::mcset fr {DS9 has detected an older preferences file, do you wish to update?} [encoding convertfrom iso8859-1 {DS9 a détecté une vielle version du fichier de préférences, voulez vous la mettre à jour ?}] ::msgcat::mcset fr {DS9 will complete the initialization process} {DS9 va terminer le processus d'initialisation} ::msgcat::mcset fr {Dash} {Tiret} ::msgcat::mcset fr {Data Format} [encoding convertfrom iso8859-1 {Format de données}] ::msgcat::mcset fr {Dataset Name} ::msgcat::mcset fr {Dataset} [encoding convertfrom iso8859-1 {Ensemble de données}] ::msgcat::mcset fr {Data} ::msgcat::mcset fr {Decrease} {Diminuer} ::msgcat::mcset fr {Default All Files} ::msgcat::mcset fr {Default Format} ::msgcat::mcset fr {Default Length} ::msgcat::mcset fr {Default} {Defaut} ::msgcat::mcset fr {Degrees} [encoding convertfrom iso8859-1 {Degrés}] ::msgcat::mcset fr {Delete All Frames?} [encoding convertfrom iso8859-1 {Supprimer toutes les fenêtres ?}] ::msgcat::mcset fr {Delete All Frames} [encoding convertfrom iso8859-1 {Supprimer toutes les fenêtres}] ::msgcat::mcset fr {Delete All Groups?} {Supprimer tous les groupes ?} ::msgcat::mcset fr {Delete All Groups} {Supprimer tous les groupes} ::msgcat::mcset fr {Delete All Regions?} [encoding convertfrom iso8859-1 {Supprimer toutes les régions ?}] ::msgcat::mcset fr {Delete All Regions} [encoding convertfrom iso8859-1 {Supprimer toutes les régions}] ::msgcat::mcset fr {Delete All} ::msgcat::mcset fr {Delete Color Tags} ::msgcat::mcset fr {Delete Frame} [encoding convertfrom iso8859-1 {Supprimer la fenêtre}] ::msgcat::mcset fr {Delete Group} {Supprimer le groupe} ::msgcat::mcset fr {Delete Selected Regions} [encoding convertfrom iso8859-1 {Supprimer les régions séléctionnées}] ::msgcat::mcset fr {Delete} {Supprimer} ::msgcat::mcset fr {Depth} {Profondeur} ::msgcat::mcset fr {Detector} {Detecteur} ::msgcat::mcset fr {Dialog Box} [encoding convertfrom iso8859-1 {Boîte de dialogue}] ::msgcat::mcset fr {Diamond} {Losange} ::msgcat::mcset fr {Dimension} {Dimention} ::msgcat::mcset fr {Direction} ::msgcat::mcset fr {Disconnect} ::msgcat::mcset fr {Display Header} ::msgcat::mcset fr {Display Size} {Afficher la taille} ::msgcat::mcset fr {Dissolve} ::msgcat::mcset fr {Distance} ::msgcat::mcset fr {Done} ::msgcat::mcset fr {Download Colormap} ::msgcat::mcset fr {Download VOTABLE format if available} ::msgcat::mcset fr {Drag to Center} {Glisser au centre} ::msgcat::mcset fr {Duplicate Data} ::msgcat::mcset fr {East} {Est} ::msgcat::mcset fr {Ecliptic} {Ecliptiques} ::msgcat::mcset fr {Edit Group Name} {Editer le nom du groupe} ::msgcat::mcset fr {Edit} [encoding convertfrom iso8859-1 {Édition}] ::msgcat::mcset fr {Elevation} ::msgcat::mcset fr {Ellipse Annulus} ::msgcat::mcset fr {Ellipse Panda} {Ellipse Panda} ::msgcat::mcset fr {Ellipse} {Ellipse} ::msgcat::mcset fr {Elliptical Annulus} {Anneau elliptique} ::msgcat::mcset fr {Elliptical Panda} {Panda elliptique} ::msgcat::mcset fr {Enable Confirmation Dialogs} {Utiliser les dialogues de confirmation} ::msgcat::mcset fr {Enable} ::msgcat::mcset fr {End} {Fin} ::msgcat::mcset fr {Enter Color} ::msgcat::mcset fr {Enter Font Size} ::msgcat::mcset fr {Enter Group Name} {Entrer le nom du groupe} ::msgcat::mcset fr {Enter Search Expression} ::msgcat::mcset fr {Enter URL} ::msgcat::mcset fr {Entry} ::msgcat::mcset fr {Equal Area} {Egale surface} ::msgcat::mcset fr {Equal Distance} {Egale distance} ::msgcat::mcset fr {Equal Spacing} ::msgcat::mcset fr {Equal Value} ::msgcat::mcset fr {Error code was returned} [encoding convertfrom iso8859-1 {Un code d'erreur a été renvoyé}] ::msgcat::mcset fr {Error} {Erreur} ::msgcat::mcset fr {Examine Frame} [encoding convertfrom iso8859-1 {Examiner la fenêtre}] ::msgcat::mcset fr {Examine} {Examiner} ::msgcat::mcset fr {Exam} ::msgcat::mcset fr {Exclude} {Exclure} ::msgcat::mcset fr {Exit} {Sortie} ::msgcat::mcset fr {Export Array} ::msgcat::mcset fr {Export} ::msgcat::mcset fr {Extention} ::msgcat::mcset fr {Exterior Axes} {Axes exterieurs} ::msgcat::mcset fr {Exterior Numerics} {Chiffres exterieurs} ::msgcat::mcset fr {FAQ} {Foire-Aux-Questions} ::msgcat::mcset fr {FK4} ::msgcat::mcset fr {FK5} ::msgcat::mcset fr {Factor} ::msgcat::mcset fr {File not Found or Unable to load FITS data MIME type} [encoding convertfrom iso8859-1 {Fichier non trouvé, ou impossible d'utiliser le type MIME des données FITS}] ::msgcat::mcset fr {Filename} {NomDuFichier} ::msgcat::mcset fr {File} {Fichier} ::msgcat::mcset fr {Fill} ::msgcat::mcset fr {Filter} {Filtre} ::msgcat::mcset fr {Find Next} {Trouver le suivant} ::msgcat::mcset fr {Find} {Trouver} ::msgcat::mcset fr {First Frame} [encoding convertfrom iso8859-1 {Première fenêtre}] ::msgcat::mcset fr {First} {Premier} ::msgcat::mcset fr {Fits} ::msgcat::mcset fr {Fixed in Size} [encoding convertfrom iso8859-1 {Taille fixée}] ::msgcat::mcset fr {Flat} ::msgcat::mcset fr {Flip} ::msgcat::mcset fr {Font} {Police} ::msgcat::mcset fr {For more information, use --help} ::msgcat::mcset fr {Format} ::msgcat::mcset fr {Forward} {En avant} ::msgcat::mcset fr {Found} {Trouvé} ::msgcat::mcset fr {Frame Information} [encoding convertfrom iso8859-1 {Information de la fenêtre }] ::msgcat::mcset fr {Frame Parameters} ::msgcat::mcset fr {Frames} ::msgcat::mcset fr {Frame} [encoding convertfrom iso8859-1 {Fenêtre}] ::msgcat::mcset fr {From} ::msgcat::mcset fr {Front} {Avant} ::msgcat::mcset fr {Full Range} ::msgcat::mcset fr {Function} {Fonction} ::msgcat::mcset fr {GUI Font} ::msgcat::mcset fr {Galactic} {Galactiques} ::msgcat::mcset fr {Gap} ::msgcat::mcset fr {Gaussian} {Gaussien} ::msgcat::mcset fr {General} [encoding convertfrom iso8859-1 {Général}] ::msgcat::mcset fr {Generate} [encoding convertfrom iso8859-1 {Générer}] ::msgcat::mcset fr {Generating Regions} [encoding convertfrom iso8859-1 {Création des régions}] ::msgcat::mcset fr {Get Information} [encoding convertfrom iso8859-1 {Récuperer l'information}] ::msgcat::mcset fr {Gist} ::msgcat::mcset fr {Global Properties} ::msgcat::mcset fr {Global} {Global} ::msgcat::mcset fr {Goto Frame} [encoding convertfrom iso8859-1 {Aller à la fenêtre}] ::msgcat::mcset fr {Graph Horz} ::msgcat::mcset fr {Graph Vert} ::msgcat::mcset fr {Graphics} {Graphiques} ::msgcat::mcset fr {Graphs} ::msgcat::mcset fr {Graph} {Graph} ::msgcat::mcset fr {Grayscale} {Niveaux de gris} ::msgcat::mcset fr {Green} {Vert} ::msgcat::mcset fr {Grid Gap} {Espacement de la grille} ::msgcat::mcset fr {Grid} {Grille} ::msgcat::mcset fr {Groove} ::msgcat::mcset fr {Groups} {Groupes} ::msgcat::mcset fr {HTTP} ::msgcat::mcset fr {Header} [encoding convertfrom iso8859-1 {Entête}] ::msgcat::mcset fr {Height} {Hauteur} ::msgcat::mcset fr {Help Desk} {Contacts} ::msgcat::mcset fr {Help Me Choose} {Aider moi} ::msgcat::mcset fr {Help} {Aide} ::msgcat::mcset fr {Hide All} {Cacher tous} ::msgcat::mcset fr {Highlite} ::msgcat::mcset fr {High} {Haut} ::msgcat::mcset fr {Histogram Equalization} {Egalisation via Histogramme} ::msgcat::mcset fr {Histogram} {Histogramme} ::msgcat::mcset fr {Horizontal Graph} {Graphique Horizontal} ::msgcat::mcset fr {Horizontal Layout} {Mise en page Horizontale} ::msgcat::mcset fr {Horizontal} ::msgcat::mcset fr {IAU Location Code} ::msgcat::mcset fr {ICRS} ::msgcat::mcset fr {Identification} ::msgcat::mcset fr {If} {Si} ::msgcat::mcset fr {Image Servers} ::msgcat::mcset fr {Image} ::msgcat::mcset fr {Import Array} ::msgcat::mcset fr {Import} ::msgcat::mcset fr {Include} {Inclure} ::msgcat::mcset fr {Increase} {Augmenter} ::msgcat::mcset fr {Information Panel} {Panneau de reseignement} ::msgcat::mcset fr {Information} {Reseignement} ::msgcat::mcset fr {Initialize XPA} {Initialiser XPA} ::msgcat::mcset fr {Inner} [encoding convertfrom iso8859-1 {Intérieur}] ::msgcat::mcset fr {Instrument FOV} {Profondeur de champ de l'instrument} ::msgcat::mcset fr {Interior Axes} [encoding convertfrom iso8859-1 {Axes intérieur}] ::msgcat::mcset fr {Interior Numerics} [encoding convertfrom iso8859-1 {Chiffres intérieur}] ::msgcat::mcset fr {Internal Parse Error} ::msgcat::mcset fr {Interval} {Intervalle} ::msgcat::mcset fr {Invalid Column Name} ::msgcat::mcset fr {Invalid formated multipart/mixed mime type message} {Message invalide de genre mixte/multipart} ::msgcat::mcset fr {Invert Colormap} {Plan de couleur inverti} ::msgcat::mcset fr {Invert Selection} {Selection inverti} ::msgcat::mcset fr {Invert} {Invertir} ::msgcat::mcset fr {Italic} {Italique} ::msgcat::mcset fr {Items Found} [encoding convertfrom iso8859-1 {Articles trouvés}] ::msgcat::mcset fr {Iteration} ::msgcat::mcset fr {JPEG Quality Factor} [encoding convertfrom iso8859-1 {Le facteur de qualité JPEG}] ::msgcat::mcset fr {Keep-Alive} ::msgcat::mcset fr {Kernel} ::msgcat::mcset fr {Keyboard Shortcuts} {Raccourcis du clavier} ::msgcat::mcset fr {Keyboard} {Clavier} ::msgcat::mcset fr {Keyword} ::msgcat::mcset fr {Labels} {Étiquettes} ::msgcat::mcset fr {Label} {Étiquette} ::msgcat::mcset fr {Landscape} {Paysage} ::msgcat::mcset fr {Language} {Langue} ::msgcat::mcset fr {Last Frame} [encoding convertfrom iso8859-1 {Dernière fenêtre}] ::msgcat::mcset fr {Last} {Dernier} ::msgcat::mcset fr {Layout Horz} ::msgcat::mcset fr {Layout Vert} ::msgcat::mcset fr {Layout} ::msgcat::mcset fr {Left} ::msgcat::mcset fr {Legal} {Legale} ::msgcat::mcset fr {Legend Title} ::msgcat::mcset fr {Legend} ::msgcat::mcset fr {Length} {Longeur} ::msgcat::mcset fr {Letter} {Lettre} ::msgcat::mcset fr {Levels} {Niveaux} ::msgcat::mcset fr {Level} {Niveau} ::msgcat::mcset fr {Limits} {Limites} ::msgcat::mcset fr {Line Plot Tool} ::msgcat::mcset fr {Linear} [encoding convertfrom iso8859-1 {Linéaire}] ::msgcat::mcset fr {Line} {Ligne} ::msgcat::mcset fr {List Data} ::msgcat::mcset fr {List Regions} [encoding convertfrom iso8859-1 {Énumérer les régions}] ::msgcat::mcset fr {List} [encoding convertfrom iso8859-1 {Énumérer}] ::msgcat::mcset fr {Load Analysis Commands} {Charger le commandes d'analyse} ::msgcat::mcset fr {Load Color Tags} ::msgcat::mcset fr {Load Colormap} {Charger le plan de couleur} ::msgcat::mcset fr {Load Configuration} {Charger la configuration} ::msgcat::mcset fr {Load Contour Levels} {Charger les niveaux de contour} ::msgcat::mcset fr {Load Contours} {Charger les contours} ::msgcat::mcset fr {Load Contrast/Bias} {Charger le contraste/inclination} ::msgcat::mcset fr {Load Data} [encoding convertfrom iso8859-1 {Charger les données}] ::msgcat::mcset fr {Load Mosaic} [encoding convertfrom iso8859-1 {Charger le mosaïque}] ::msgcat::mcset fr {Load Regions} [encoding convertfrom iso8859-1 {Charger les régions}] ::msgcat::mcset fr {Load Template} {Charger le patron} ::msgcat::mcset fr {Load into All Frames} ::msgcat::mcset fr {Load into Current Frame} ::msgcat::mcset fr {Loading Catalog} ::msgcat::mcset fr {Loading} ::msgcat::mcset fr {Load} {Charger} ::msgcat::mcset fr {Local} {Locale} ::msgcat::mcset fr {Lock Axes} ::msgcat::mcset fr {Lock Bin} ::msgcat::mcset fr {Lock Color} ::msgcat::mcset fr {Lock Crop Amplifier} ::msgcat::mcset fr {Lock Crop Detector} ::msgcat::mcset fr {Lock Crop Image} ::msgcat::mcset fr {Lock Crop None} ::msgcat::mcset fr {Lock Crop Physical} ::msgcat::mcset fr {Lock Crop WCS} ::msgcat::mcset fr {Lock Crosshair Amplifier} ::msgcat::mcset fr {Lock Crosshair Detector} ::msgcat::mcset fr {Lock Crosshair Image} ::msgcat::mcset fr {Lock Crosshair None} ::msgcat::mcset fr {Lock Crosshair Physical} ::msgcat::mcset fr {Lock Crosshair WCS} ::msgcat::mcset fr {Lock Frame Amplifier} ::msgcat::mcset fr {Lock Frame Detector} ::msgcat::mcset fr {Lock Frame Image} ::msgcat::mcset fr {Lock Frame None} ::msgcat::mcset fr {Lock Frame Physical} ::msgcat::mcset fr {Lock Frame WCS} ::msgcat::mcset fr {Lock Limits} ::msgcat::mcset fr {Lock Scale} ::msgcat::mcset fr {Lock Slice Image} ::msgcat::mcset fr {Lock Slice None} ::msgcat::mcset fr {Lock Slice WCS} ::msgcat::mcset fr {Lock Smooth} ::msgcat::mcset fr {Lock} {Verrouiller} ::msgcat::mcset fr {Log Exponent} ::msgcat::mcset fr {Log} ::msgcat::mcset fr {Low High} {Haut bas} ::msgcat::mcset fr {Lower Left Back} ::msgcat::mcset fr {Lower Left Front} ::msgcat::mcset fr {Lower Right Back} ::msgcat::mcset fr {Lower Right Front} ::msgcat::mcset fr {Low} {Bas} ::msgcat::mcset fr {MIP} ::msgcat::mcset fr {Magenta} ::msgcat::mcset fr {Magnification} ::msgcat::mcset fr {Magnifier} {Magnificateur} ::msgcat::mcset fr {Major} {Majeure} ::msgcat::mcset fr {Manual} ::msgcat::mcset fr {Mask Parameters} [encoding convertfrom iso8859-1 {Paramètres de masque}] ::msgcat::mcset fr {Match Axes} ::msgcat::mcset fr {Match Bin} ::msgcat::mcset fr {Match Catalog requires at least 1 row per catalog} ::msgcat::mcset fr {Match Color} ::msgcat::mcset fr {Match Crop Amplifier} ::msgcat::mcset fr {Match Crop Detector} ::msgcat::mcset fr {Match Crop Image} ::msgcat::mcset fr {Match Crop Physical} ::msgcat::mcset fr {Match Crop WCS} ::msgcat::mcset fr {Match Crosshair Amplifier} ::msgcat::mcset fr {Match Crosshair Detector} ::msgcat::mcset fr {Match Crosshair Image} ::msgcat::mcset fr {Match Crosshair Physical} ::msgcat::mcset fr {Match Crosshair WCS} ::msgcat::mcset fr {Match Frame Amplifier} ::msgcat::mcset fr {Match Frame Detector} ::msgcat::mcset fr {Match Frame Image} ::msgcat::mcset fr {Match Frame Physical} ::msgcat::mcset fr {Match Frame WCS} ::msgcat::mcset fr {Match Limits} ::msgcat::mcset fr {Match Scale} ::msgcat::mcset fr {Match Slice Image} ::msgcat::mcset fr {Match Slice WCS} ::msgcat::mcset fr {Match Smooth} ::msgcat::mcset fr {Match} ::msgcat::mcset fr {Math Function} {Fonction mathématique} ::msgcat::mcset fr {Matplotlib} ::msgcat::mcset fr {Max Rows} [encoding convertfrom iso8859-1 {Maximum de rangées}] ::msgcat::mcset fr {Maximum} ::msgcat::mcset fr {Max} {Maximum} ::msgcat::mcset fr {Menus and Buttons} ::msgcat::mcset fr {Menu} ::msgcat::mcset fr {Message Log} ::msgcat::mcset fr {Method} [encoding convertfrom iso8859-1 {Méthode}] ::msgcat::mcset fr {Min Max Parameters} ::msgcat::mcset fr {Min Max} ::msgcat::mcset fr {Minimum} ::msgcat::mcset fr {Minor} {Mineure} ::msgcat::mcset fr {Minutes} ::msgcat::mcset fr {Min} {Minimum} ::msgcat::mcset fr {Mission} ::msgcat::mcset fr {Mode} ::msgcat::mcset fr {Mosaic IRAF Segment} ::msgcat::mcset fr {Mosaic IRAF} ::msgcat::mcset fr {Mosaic WCS Segment} ::msgcat::mcset fr {Mosaic WCS} ::msgcat::mcset fr {Mosaic WFPC2} ::msgcat::mcset fr {Mosaic} ::msgcat::mcset fr {Mouse Click Epsilon} ::msgcat::mcset fr {Mouse Wheel Bin} ::msgcat::mcset fr {Mouse Wheel Zoom} ::msgcat::mcset fr {Mouse and Keyboard} ::msgcat::mcset fr {Move Back} ::msgcat::mcset fr {Move First} ::msgcat::mcset fr {Move Forward} ::msgcat::mcset fr {Move Frame} ::msgcat::mcset fr {Move Last} ::msgcat::mcset fr {Move to Back} [encoding convertfrom iso8859-1 {Bouger vers arrière}] ::msgcat::mcset fr {Move to Front} {Bouger vers le devant} ::msgcat::mcset fr {Movie} ::msgcat::mcset fr {Multiple Extension Cube} ::msgcat::mcset fr {Multiple Extension Frames} ::msgcat::mcset fr {Multiple WCS} ::msgcat::mcset fr {NRRD} ::msgcat::mcset fr {Name Resolution} [encoding convertfrom iso8859-1 {Nom de la résolution}] ::msgcat::mcset fr {Name Server} {Nom du Serveur} ::msgcat::mcset fr {Name or Designation} [encoding convertfrom iso8859-1 {Nom ou Désignation}] ::msgcat::mcset fr {Name} ::msgcat::mcset fr {Native Dialog} ::msgcat::mcset fr {New Features} {Nouvelles options} ::msgcat::mcset fr {New Frame 3D} ::msgcat::mcset fr {New Frame RGB} [encoding convertfrom iso8859-1 {Nouvelle fenêtre RGB}] ::msgcat::mcset fr {New Frame each Time} [encoding convertfrom iso8859-1 {Nouvelle fenêtre à chaque fois}] ::msgcat::mcset fr {New Frame} [encoding convertfrom iso8859-1 {Nouvelle fenêtre}] ::msgcat::mcset fr {New Group} {Nouveau groupe} ::msgcat::mcset fr {New} {Nouveau} ::msgcat::mcset fr {Next Frame} [encoding convertfrom iso8859-1 {Fenêtre suivante}] ::msgcat::mcset fr {Next} {Suivant} ::msgcat::mcset fr {No Catalog specified} [encoding convertfrom iso8859-1 {Pas de Catalogue spécifié}] ::msgcat::mcset fr {No Data Available} ::msgcat::mcset fr {No Items Found} [encoding convertfrom iso8859-1 {Pas trouvé}] ::msgcat::mcset fr {No current frame} ::msgcat::mcset fr {Non-zero} ::msgcat::mcset fr {None} {Rien} ::msgcat::mcset fr {Normal} ::msgcat::mcset fr {North} {Nord} ::msgcat::mcset fr {Not Found} ::msgcat::mcset fr {Not Supported} ::msgcat::mcset fr {Number of Samples} [encoding convertfrom iso8859-1 {Nombre d'échantillons}] ::msgcat::mcset fr {Number of Threads} ::msgcat::mcset fr {Number of Ticks} ::msgcat::mcset fr {Number} {Nombre} ::msgcat::mcset fr {Numerics} {Chiffres} ::msgcat::mcset fr {OK} ::msgcat::mcset fr {Object} {Objet} ::msgcat::mcset fr {Open File} {Ouvrir fichier} ::msgcat::mcset fr {Open TCL Console} ::msgcat::mcset fr {Open URL} {Ouvrir un URL} ::msgcat::mcset fr {Open as} ::msgcat::mcset fr {Open} {Ouvrir} ::msgcat::mcset fr {Operator} {Operateur} ::msgcat::mcset fr {Orientation} ::msgcat::mcset fr {Origin} ::msgcat::mcset fr {Oscillate} ::msgcat::mcset fr {Other Color} ::msgcat::mcset fr {Other Font Size} ::msgcat::mcset fr {Other} {Autre} ::msgcat::mcset fr {Outer} {Externe} ::msgcat::mcset fr {Overlap} ::msgcat::mcset fr {PS Page Setup} ::msgcat::mcset fr {PS Print} ::msgcat::mcset fr {Page Setup} {Configurer la Page} ::msgcat::mcset fr {Page Source} {Source de la Page} ::msgcat::mcset fr {Pan To} ::msgcat::mcset fr {Pan Zoom Rotate Parameters} ::msgcat::mcset fr {Pan Zoom} ::msgcat::mcset fr {Pan then Zoom} ::msgcat::mcset fr {Panda} ::msgcat::mcset fr {Panner} ::msgcat::mcset fr {Pan} ::msgcat::mcset fr {Parameters} [encoding convertfrom iso8859-1 {Paramètres}] ::msgcat::mcset fr {Password} {Mot de passe} ::msgcat::mcset fr {Paste Contours} {Coller les contours} ::msgcat::mcset fr {Paste} {Coller} ::msgcat::mcset fr {Physical} {Physique} ::msgcat::mcset fr {Pixel Distribution} {Distribution des pixels} ::msgcat::mcset fr {Pixel Size} {Taille des pixels} ::msgcat::mcset fr {Pixel Table} {Table des pixels} ::msgcat::mcset fr {Pixels} ::msgcat::mcset fr {Play} {Jouer} ::msgcat::mcset fr {Please Select a Region} ::msgcat::mcset fr {Please change the file's permission to disable other users write access. Use anyway?} ::msgcat::mcset fr {Please specify width, height, and either name or (ra,dec)} {Specifiez largeur, longeur, et autre noms possibles ou (ra,dec)} ::msgcat::mcset fr {Plot 2D} ::msgcat::mcset fr {Plot 3D} ::msgcat::mcset fr {Plot Title} {Ecrire le titre} ::msgcat::mcset fr {Plotting Regions} [encoding convertfrom iso8859-1 {Tracer les régions}] ::msgcat::mcset fr {Plot} {Dessiner} ::msgcat::mcset fr {Plus} ::msgcat::mcset fr {Pointer} {Pointeur} ::msgcat::mcset fr {Points} ::msgcat::mcset fr {Point} ::msgcat::mcset fr {Polygon} {Polygone} ::msgcat::mcset fr {Portrait} ::msgcat::mcset fr {Poster} ::msgcat::mcset fr {Postscript Page Setup} ::msgcat::mcset fr {Postscript Print} ::msgcat::mcset fr {Postscript} ::msgcat::mcset fr {Power} {Puissance} ::msgcat::mcset fr {Preferences} [encoding convertfrom iso8859-1 {Préférences}] ::msgcat::mcset fr {Preserve During Load} [encoding convertfrom iso8859-1 {Préserver pendant le chargement}] ::msgcat::mcset fr {Previous Frame} [encoding convertfrom iso8859-1 {Fenêtre précédente}] ::msgcat::mcset fr {Previous} [encoding convertfrom iso8859-1 {Précédent}] ::msgcat::mcset fr {Prev} ::msgcat::mcset fr {Print Coordinates} {Imprimer les coordonnees} ::msgcat::mcset fr {Print To} {Imprimer dans} ::msgcat::mcset fr {Printer} {L'imprimante} ::msgcat::mcset fr {Print} {Imprimer} ::msgcat::mcset fr {Projection} ::msgcat::mcset fr {Properties} [encoding convertfrom iso8859-1 {Propriétés}] ::msgcat::mcset fr {Property} [encoding convertfrom iso8859-1 {Propriété}] ::msgcat::mcset fr {Proxy Host} ::msgcat::mcset fr {Proxy Port} ::msgcat::mcset fr {Publication} ::msgcat::mcset fr {Quadratic} ::msgcat::mcset fr {RGB Array} ::msgcat::mcset fr {RGB Cube} ::msgcat::mcset fr {RGB Image} ::msgcat::mcset fr {RGB} ::msgcat::mcset fr {Radial Profile} ::msgcat::mcset fr {Radial} ::msgcat::mcset fr {Radius} ::msgcat::mcset fr {Raised} ::msgcat::mcset fr {Range} ::msgcat::mcset fr {Redo} {Refaire} ::msgcat::mcset fr {Red} ::msgcat::mcset fr {Reference Manual} ::msgcat::mcset fr {Reference} ::msgcat::mcset fr {Refresh Frame} ::msgcat::mcset fr {Refresh} ::msgcat::mcset fr {Region Parameters} ::msgcat::mcset fr {Region} [encoding convertfrom iso8859-1 {Région}] ::msgcat::mcset fr {Release Notes} ::msgcat::mcset fr {Release} ::msgcat::mcset fr {Relief} ::msgcat::mcset fr {Reload} ::msgcat::mcset fr {Render} ::msgcat::mcset fr {Repeat} ::msgcat::mcset fr {Reset Colormap} ::msgcat::mcset fr {Reset Frame} ::msgcat::mcset fr {Reset} ::msgcat::mcset fr {Restore} ::msgcat::mcset fr {Retrieve} ::msgcat::mcset fr {Return} ::msgcat::mcset fr {Right} ::msgcat::mcset fr {Roman} ::msgcat::mcset fr {Rotate} ::msgcat::mcset fr {Rows} ::msgcat::mcset fr {Row} ::msgcat::mcset fr {Ruler} ::msgcat::mcset fr {SAMP Image} ::msgcat::mcset fr {SAMP Table} ::msgcat::mcset fr {SAMP: already connected} ::msgcat::mcset fr {SAMP: internal error} ::msgcat::mcset fr {SAMP: not connected} ::msgcat::mcset fr {SAMP: unable to locate HUB} ::msgcat::mcset fr {SAMP} ::msgcat::mcset fr {Sample Increment} ::msgcat::mcset fr {Sample Parameters} ::msgcat::mcset fr {Samples per Line} ::msgcat::mcset fr {Sample} ::msgcat::mcset fr {Save 3D Movie} ::msgcat::mcset fr {Save Color Tags} ::msgcat::mcset fr {Save Colormap} ::msgcat::mcset fr {Save Configuration} ::msgcat::mcset fr {Save Contour Levels} ::msgcat::mcset fr {Save Contours} ::msgcat::mcset fr {Save Contrast/Bias} ::msgcat::mcset fr {Save Data} ::msgcat::mcset fr {Save Image on Download} ::msgcat::mcset fr {Save Image} ::msgcat::mcset fr {Save Regions} ::msgcat::mcset fr {Save Template} ::msgcat::mcset fr {Save as} ::msgcat::mcset fr {Save} {Enregistrer} ::msgcat::mcset fr {Scale Parameters} ::msgcat::mcset fr {Scale and Limits} ::msgcat::mcset fr {Scale} ::msgcat::mcset fr {Scan} ::msgcat::mcset fr {Scatter Plot Tool} ::msgcat::mcset fr {Scope} ::msgcat::mcset fr {Search for Catalogs} ::msgcat::mcset fr {Searching for catalogs} ::msgcat::mcset fr {Seconds} ::msgcat::mcset fr {Segment} ::msgcat::mcset fr {Select All} ::msgcat::mcset fr {Select Coordinate System } ::msgcat::mcset fr {Select None} ::msgcat::mcset fr {Select} ::msgcat::mcset fr {Send} ::msgcat::mcset fr {Server} ::msgcat::mcset fr {Sexagesimal} ::msgcat::mcset fr {Shape} ::msgcat::mcset fr {Show All} {Montrer tous} ::msgcat::mcset fr {Show Command} ::msgcat::mcset fr {Show Compass} ::msgcat::mcset fr {Show Text} ::msgcat::mcset fr {Show/Hide Frames} [encoding convertfrom iso8859-1 {Montrer/Cacher les fenêtres}] ::msgcat::mcset fr {Show} ::msgcat::mcset fr {Simple Cross} ::msgcat::mcset fr {Simple Plus} ::msgcat::mcset fr {Single Frame} ::msgcat::mcset fr {Single} ::msgcat::mcset fr {Sites} ::msgcat::mcset fr {Size/Radius} ::msgcat::mcset fr {Size} ::msgcat::mcset fr {Skip First} ::msgcat::mcset fr {Slice} ::msgcat::mcset fr {Smooth Parameters} ::msgcat::mcset fr {Smoothness} ::msgcat::mcset fr {Smooth} ::msgcat::mcset fr {Solid} ::msgcat::mcset fr {Sorry, DS9 does not support} ::msgcat::mcset fr {Sorry, DS9 requires a Truecolor8, Truecolor16, Truecolor24 visual be available} ::msgcat::mcset fr {Sort} ::msgcat::mcset fr {Source TCL} ::msgcat::mcset fr {Source} ::msgcat::mcset fr {Space Equal Distance} ::msgcat::mcset fr {Space Equal Value} ::msgcat::mcset fr {Spacing} ::msgcat::mcset fr {Sqrt} ::msgcat::mcset fr {Square Root} ::msgcat::mcset fr {Squared} ::msgcat::mcset fr {Square} ::msgcat::mcset fr {Stacked} ::msgcat::mcset fr {Starbase} ::msgcat::mcset fr {Startup} ::msgcat::mcset fr {Start} ::msgcat::mcset fr {Statistics} ::msgcat::mcset fr {Stats} ::msgcat::mcset fr {Status} ::msgcat::mcset fr {Step} ::msgcat::mcset fr {Stop} ::msgcat::mcset fr {Story of SAOImage DS9} ::msgcat::mcset fr {Story} ::msgcat::mcset fr {Sum} ::msgcat::mcset fr {Sunken} ::msgcat::mcset fr {Symbol Editor} ::msgcat::mcset fr {Symbol} ::msgcat::mcset fr {Tab-Separated-Value} ::msgcat::mcset fr {Table} ::msgcat::mcset fr {Tabloid} ::msgcat::mcset fr {Tag Color} ::msgcat::mcset fr {Task} ::msgcat::mcset fr {Template} ::msgcat::mcset fr {Text Font} ::msgcat::mcset fr {Text} {Texte} ::msgcat::mcset fr {Then} ::msgcat::mcset fr {Thickness} ::msgcat::mcset fr {This analysis task is already running. Do you wish to kill it?} ::msgcat::mcset fr {This function is not available.} ::msgcat::mcset fr {This function is not currently supported for this port.} ::msgcat::mcset fr {Tickmarks} ::msgcat::mcset fr {Tile Frames} ::msgcat::mcset fr {Tile Parameters} ::msgcat::mcset fr {Tile} ::msgcat::mcset fr {Times} ::msgcat::mcset fr {Title} ::msgcat::mcset fr {Tophat} ::msgcat::mcset fr {Topographic} ::msgcat::mcset fr {Top} ::msgcat::mcset fr {To} ::msgcat::mcset fr {Transparency} ::msgcat::mcset fr {Triangle} ::msgcat::mcset fr {Type} ::msgcat::mcset fr {URL} ::msgcat::mcset fr {Unable to connect directly: using Web Proxy} ::msgcat::mcset fr {Unable to determine date of observation} ::msgcat::mcset fr {Unable to determine time of observation} ::msgcat::mcset fr {Unable to evaluate filter} ::msgcat::mcset fr {Unable to find SIAP window} ::msgcat::mcset fr {Unable to find URL column} ::msgcat::mcset fr {Unable to find catalog window} ::msgcat::mcset fr {Unable to find plot window} ::msgcat::mcset fr {Unable to load RGB image into a non-rgb frame} ::msgcat::mcset fr {Unable to load region file} ::msgcat::mcset fr {Unable to load} ::msgcat::mcset fr {Unable to locate URL} ::msgcat::mcset fr {Unable to match target with XPA Mime request} ::msgcat::mcset fr {Unable to open file} ::msgcat::mcset fr {Unable to process Analysis file} ::msgcat::mcset fr {Unable to save RGB image from a non-rgb frame} ::msgcat::mcset fr {Undo} [encoding convertfrom iso8859-1 {Défaire}] ::msgcat::mcset fr {Unique} ::msgcat::mcset fr {Unists} ::msgcat::mcset fr {Units} ::msgcat::mcset fr {Unknown Colormap} ::msgcat::mcset fr {Unknown command} ::msgcat::mcset fr {Update Filter} ::msgcat::mcset fr {Update Group} ::msgcat::mcset fr {Update from Current Crosshair} ::msgcat::mcset fr {Update from Current Frame} ::msgcat::mcset fr {Update} ::msgcat::mcset fr {Upper Left Back} ::msgcat::mcset fr {Upper Left Front} ::msgcat::mcset fr {Upper Right Back} ::msgcat::mcset fr {Upper Right Front} ::msgcat::mcset fr {Use Authentication} ::msgcat::mcset fr {Use Current Frame on Download} ::msgcat::mcset fr {Use Internal Web Browser} ::msgcat::mcset fr {Use Proxy} ::msgcat::mcset fr {User Manual} ::msgcat::mcset fr {Username} ::msgcat::mcset fr {User} ::msgcat::mcset fr {Use} ::msgcat::mcset fr {VO Server} ::msgcat::mcset fr {VO} ::msgcat::mcset fr {Value} ::msgcat::mcset fr {Vector} ::msgcat::mcset fr {Vertical Graph} ::msgcat::mcset fr {Vertical Layout} ::msgcat::mcset fr {Vertical Text} ::msgcat::mcset fr {Vertical} ::msgcat::mcset fr {View} {Affichage} ::msgcat::mcset fr {Virtual Observatory} ::msgcat::mcset fr {WCS Parameters} ::msgcat::mcset fr {WCS} ::msgcat::mcset fr {Wavelength} ::msgcat::mcset fr {Web Browser} ::msgcat::mcset fr {White} ::msgcat::mcset fr {Width} ::msgcat::mcset fr {Window} ::msgcat::mcset fr {Words matching title, description} ::msgcat::mcset fr {X Axis Title} ::msgcat::mcset fr {X Grid} ::msgcat::mcset fr {XPA Information} ::msgcat::mcset fr {XPA not initialized} ::msgcat::mcset fr {XPA unable to verify hostname, setting XPA_METHOD to LOCAL} ::msgcat::mcset fr {XPA} ::msgcat::mcset fr {X} ::msgcat::mcset fr {Y Axis Title} ::msgcat::mcset fr {Y Grid} ::msgcat::mcset fr {Yellow} ::msgcat::mcset fr {Y} ::msgcat::mcset fr {Z Axis Scale} ::msgcat::mcset fr {ZScale Parameters} ::msgcat::mcset fr {Zero} ::msgcat::mcset fr {Zoom Fit} ::msgcat::mcset fr {Zoom In} ::msgcat::mcset fr {Zoom Out} ::msgcat::mcset fr {Zoom} ::msgcat::mcset fr {and} ::msgcat::mcset fr {blue} ::msgcat::mcset fr {b} ::msgcat::mcset fr {color} ::msgcat::mcset fr {cool} ::msgcat::mcset fr {green} ::msgcat::mcset fr {grey} ::msgcat::mcset fr {g} ::msgcat::mcset fr {h5utils} ::msgcat::mcset fr {heat} ::msgcat::mcset fr {not} ::msgcat::mcset fr {only} ::msgcat::mcset fr {or center of data} ::msgcat::mcset fr {rainbow} ::msgcat::mcset fr {red} ::msgcat::mcset fr {rows of data have been downloaded. More may be available. You may wish to adjust the maximum allowed} ::msgcat::mcset fr {r} ::msgcat::mcset fr {staircase} ::msgcat::mcset fr {standard} ::msgcat::mcset fr {x} ::msgcat::mcset fr {} saods9/ds9/msgs/ja.msg000644 000765 000000 00000212557 12741217134 015154 0ustar00joyewheel000000 000000 ::msgcat::mcset ja {2D} ::msgcat::mcset ja {3D} [encoding convertfrom euc-jp "\x33\xbc\xa1\xb8\xb5"] ::msgcat::mcset ja {A postscript generation error has occurred} [encoding convertfrom euc-jp "\xa5\xdd\xa5\xb9\xa5\xc8\xa5\xb9\xa5\xaf\xa5\xea\xa5\xd7\xa5\xc8\xa5\xd5\xa5\xa1\xa5\xa4\xa5\xeb\xba\xee\xc0\xae\xa4\xcb\xbc\xba\xc7\xd4\xa4\xb7\xa4\xde\xa4\xb7\xa4\xbf\xa1\xa3"] ::msgcat::mcset ja {AIP} ::msgcat::mcset ja {Abort} ::msgcat::mcset ja {About SAOImage DS9} [encoding convertfrom euc-jp "\x53\x41\x4f\x49\x6d\x61\x67\x65\x20\x44\x53\x39\x20\xa4\xcb\xa4\xc4\xa4\xa4\xa4\xc6"] ::msgcat::mcset ja {About} [encoding convertfrom euc-jp "\x44\x53\x39\x20\xa4\xcb\xa4\xc4\xa4\xa4\xa4\xc6"] ::msgcat::mcset ja {Acknowledgment} [encoding convertfrom euc-jp "\xbc\xd5\xbc\xad"] ::msgcat::mcset ja {Add} [encoding convertfrom euc-jp "\xc4\xc9\xb2\xc3"] ::msgcat::mcset ja {Advanced} [encoding convertfrom euc-jp "\xb9\xe2\xc5\xd9\xa4\xca\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Aligned} ::msgcat::mcset ja {Align} [encoding convertfrom euc-jp "\xc0\xb0\xce\xf3"] ::msgcat::mcset ja {All Columns} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xa4\xce\xce\xf3"] ::msgcat::mcset ja {All Rows} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xa4\xce\xb9\xd4"] ::msgcat::mcset ja {All} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6"] ::msgcat::mcset ja {Always save files during Backup} ::msgcat::mcset ja {Amplifier} [encoding convertfrom euc-jp "\xc1\xfd\xc9\xfd\xb4\xef\xba\xc2\xc9\xb8"] ::msgcat::mcset ja {An error has occurred during backup} ::msgcat::mcset ja {An error has occurred during restore} ::msgcat::mcset ja {An error has occurred invoking the Analysis task} [encoding convertfrom euc-jp "\xb2\xf2\xc0\xcf\xa5\xbf\xa5\xb9\xa5\xaf\xa4\xce\xb5\xaf\xc6\xb0\xa4\xcb\xbc\xba\xc7\xd4\xa4\xb7\xa4\xde\xa4\xb7\xa4\xbf\xa1\xa3"] ::msgcat::mcset ja {An error has occurred while creating image.} ::msgcat::mcset ja {An error has occurred while creating the image. Please be sure that the ds9 window is in the upper left corner of the default screen and the entire window is visible.} ::msgcat::mcset ja {An error has occurred while creating the image. Please be sure that the entire image window is visible on the screen.} ::msgcat::mcset ja {An error has occurred while printing} [encoding convertfrom euc-jp "\xb0\xf5\xba\xfe\xa4\xcb\xbc\xba\xc7\xd4\xa4\xb7\xa4\xde\xa4\xb7\xa4\xbf\xa1\xa3"] ::msgcat::mcset ja {An error has occurred while reading image.} ::msgcat::mcset ja {An error has occurred while saving} [encoding convertfrom euc-jp "\xca\xdd\xc2\xb8\xa4\xcb\xbc\xba\xc7\xd4\xa4\xb7\xa4\xde\xa4\xb7\xa4\xbf\xa1\xa3"] ::msgcat::mcset ja {An error has occurred while updating VO server list} ::msgcat::mcset ja {An error has occurred while writing image.} ::msgcat::mcset ja {An internal error has been detected} ::msgcat::mcset ja {Analysis Command Log} [encoding convertfrom euc-jp "\xb2\xf2\xc0\xcf\xa5\xb3\xa5\xde\xa5\xf3\xa5\xc9\xa4\xce\xb5\xad\xcf\xbf"] ::msgcat::mcset ja {Analysis Commands} [encoding convertfrom euc-jp "\xb2\xf2\xc0\xcf\xa5\xb3\xa5\xde\xa5\xf3\xa5\xc9"] ::msgcat::mcset ja {Analysis File} ::msgcat::mcset ja {Analysis Log} ::msgcat::mcset ja {Analysis} [encoding convertfrom euc-jp "\xb2\xf2\xc0\xcf"] ::msgcat::mcset ja {Angle Complement} [encoding convertfrom euc-jp "\xca\xe4\xb3\xd1"] ::msgcat::mcset ja {Angles} [encoding convertfrom euc-jp "\xb3\xd1\xc5\xd9"] ::msgcat::mcset ja {Angle} [encoding convertfrom euc-jp "\xb3\xd1\xc5\xd9"] ::msgcat::mcset ja {Annuli} [encoding convertfrom euc-jp "\xc3\xe6\xc8\xb4\xa4\xad\xb1\xdf"] ::msgcat::mcset ja {Annulus} [encoding convertfrom euc-jp "\xc3\xe6\xc8\xb4\xa4\xad\xb1\xdf"] ::msgcat::mcset ja {Apply} [encoding convertfrom euc-jp "\xc5\xac\xcd\xd1"] ::msgcat::mcset ja {ArcMin} [encoding convertfrom euc-jp "\xca\xac"] ::msgcat::mcset ja {ArcSec} [encoding convertfrom euc-jp "\xc9\xc3"] ::msgcat::mcset ja {Architecture} [encoding convertfrom euc-jp "\xa5\xa2\xa1\xbc\xa5\xad\xa5\xc6\xa5\xaf\xa5\xc1\xa5\xe3"] ::msgcat::mcset ja {Archives} ::msgcat::mcset ja {Array} ::msgcat::mcset ja {Arrow} [encoding convertfrom euc-jp "\xcc\xf0\xb0\xf5"] ::msgcat::mcset ja {Astronomy} [encoding convertfrom euc-jp "\xc5\xb7\xca\xb8\xb3\xd8"] ::msgcat::mcset ja {At Startup} ::msgcat::mcset ja {At least 2 different catalogs are required} ::msgcat::mcset ja {Auto Centroid} [encoding convertfrom euc-jp "\xbc\xab\xc6\xb0\xc3\xe6\xbf\xb4\xb9\xe7\xa4\xef\xa4\xbb"] ::msgcat::mcset ja {Auto Plot 2D} ::msgcat::mcset ja {Auto Plot 3D} ::msgcat::mcset ja {Auto Plot Statistics} ::msgcat::mcset ja {Auto Plot} ::msgcat::mcset ja {Autoload FITS Regions} [encoding convertfrom euc-jp "\xce\xce\xb0\xe8\xa4\xce\xbc\xab\xc6\xb0\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Autoload} ::msgcat::mcset ja {Automatic} [encoding convertfrom euc-jp "\xbc\xab\xc6\xb0"] ::msgcat::mcset ja {Average} [encoding convertfrom euc-jp "\xca\xbf\xb6\xd1"] ::msgcat::mcset ja {Axes Number} ::msgcat::mcset ja {Axes Order} ::msgcat::mcset ja {Axes Title} ::msgcat::mcset ja {Axes} [encoding convertfrom euc-jp "\xbc\xb4"] ::msgcat::mcset ja {Axis Length} [encoding convertfrom euc-jp "\xbc\xb4\xa4\xce\xc4\xb9\xa4\xb5"] ::msgcat::mcset ja {Axis Numbers} [encoding convertfrom euc-jp "\xbc\xb4\xa4\xce\xbf\xf4\xc3\xcd"] ::msgcat::mcset ja {Axis Title} ::msgcat::mcset ja {Axis} [encoding convertfrom euc-jp "\xbc\xb4"] ::msgcat::mcset ja {Azimuth} [encoding convertfrom euc-jp "\xca\xfd\xb0\xcc\xb3\xd1"] ::msgcat::mcset ja {Background Color} [encoding convertfrom euc-jp "\xc7\xd8\xb7\xca\xbf\xa7"] ::msgcat::mcset ja {Background} [encoding convertfrom euc-jp "\xa5\xd0\xa5\xc3\xa5\xaf\xa5\xb0\xa5\xe9\xa5\xa6\xa5\xf3\xa5\xc9\xce\xce\xb0\xe8"] ::msgcat::mcset ja {Backup} ::msgcat::mcset ja {Back} [encoding convertfrom euc-jp "\xc1\xb0"] ::msgcat::mcset ja {Bar Plot Tool} ::msgcat::mcset ja {Bias} [encoding convertfrom euc-jp "\xa5\xd0\xa5\xa4\xa5\xa2\xa5\xb9"] ::msgcat::mcset ja {Bin 3rd Column} [encoding convertfrom euc-jp "\xc2\xe8\xa3\xb3\xa4\xce\xce\xf3\xa4\xf2\xa5\xd3\xa5\xf3\xa4\xde\xa4\xc8\xa4\xe1"] ::msgcat::mcset ja {Bin Center} [encoding convertfrom euc-jp "\xa5\xd3\xa5\xf3\xa4\xde\xa4\xc8\xa4\xe1\xa4\xce\xc3\xe6\xbf\xb4"] ::msgcat::mcset ja {Bin Columns} [encoding convertfrom euc-jp "\xa5\xd3\xa5\xf3\xa4\xde\xa4\xc8\xa4\xe1\xa4\xb9\xa4\xeb\xce\xf3"] ::msgcat::mcset ja {Bin Filter} [encoding convertfrom euc-jp "\xa5\xd3\xa5\xf3\xa4\xde\xa4\xc8\xa4\xe1\xa4\xce\xb9\xca\xa4\xea\xb9\xfe\xa4\xdf\xbe\xf2\xb7\xef"] ::msgcat::mcset ja {Bin Fit} ::msgcat::mcset ja {Bin In} ::msgcat::mcset ja {Bin Out} ::msgcat::mcset ja {Binning Parameters} [encoding convertfrom euc-jp "\xa5\xd3\xa5\xf3\xa4\xde\xa4\xc8\xa4\xe1\xa4\xce\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Bin} [encoding convertfrom euc-jp "\xa5\xd3\xa5\xf3\xa4\xde\xa4\xc8\xa4\xe1"] ::msgcat::mcset ja {Black} [encoding convertfrom euc-jp "\xb9\xf5\xbf\xa7"] ::msgcat::mcset ja {Blank/Inf/NaN Color} [encoding convertfrom euc-jp "\xcc\xa4\xc4\xea\xb5\xc1\xc3\xcd\x28\x42\x6c\x61\x6e\x6b\x2f\x49\x6e\x66\x2f\x4e\x61\x4e\x29\xa4\xce\xbf\xa7"] ::msgcat::mcset ja {Blink Frames} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xf2\xa5\xd6\xa5\xea\xa5\xf3\xa5\xaf"] ::msgcat::mcset ja {Blink Interval} [encoding convertfrom euc-jp "\xa5\xd6\xa5\xea\xa5\xf3\xa5\xaf\xa4\xce\xb4\xd6\xb3\xd6"] ::msgcat::mcset ja {Blink} [encoding convertfrom euc-jp "\xa5\xd6\xa5\xea\xa5\xf3\xa5\xaf"] ::msgcat::mcset ja {Block Fit} ::msgcat::mcset ja {Block In} [encoding convertfrom euc-jp "\xa5\xd6\xa5\xed\xa5\xc3\xa5\xaf\xa4\xf2\xba\xd9\xa4\xab\xa4\xaf"] ::msgcat::mcset ja {Block Out} [encoding convertfrom euc-jp "\xa5\xd6\xa5\xed\xa5\xc3\xa5\xaf\xa4\xf2\xb9\xd3\xa4\xaf"] ::msgcat::mcset ja {Block Parameters} ::msgcat::mcset ja {Block} [encoding convertfrom euc-jp "\xa5\xd6\xa5\xed\xa5\xc3\xa5\xaf"] ::msgcat::mcset ja {Blue} [encoding convertfrom euc-jp "\xc0\xc4\xbf\xa7"] ::msgcat::mcset ja {Bold} [encoding convertfrom euc-jp "\xc2\xc0\xbb\xfa"] ::msgcat::mcset ja {Border} [encoding convertfrom euc-jp "\xcf\xc8\xc0\xfe"] ::msgcat::mcset ja {Bottom} ::msgcat::mcset ja {Box Annulus} [encoding convertfrom euc-jp "\xc3\xe6\xc8\xb4\xa4\xad\xbb\xcd\xb3\xd1\xb7\xc1"] ::msgcat::mcset ja {Box Panda} [encoding convertfrom euc-jp "\xc9\xf4\xca\xac\xbb\xcd\xb3\xd1\xb7\xc1"] ::msgcat::mcset ja {BoxCircle} ::msgcat::mcset ja {Boxcar} [encoding convertfrom euc-jp "\xa5\xdc\xa5\xc3\xa5\xaf\xa5\xb9\xa5\xab\xa1\xbc"] ::msgcat::mcset ja {Box} [encoding convertfrom euc-jp "\xbb\xcd\xb3\xd1\xb7\xc1"] ::msgcat::mcset ja {Broadcast} ::msgcat::mcset ja {Browser} ::msgcat::mcset ja {Browse} [encoding convertfrom euc-jp "\xbb\xb2\xbe\xc8"] ::msgcat::mcset ja {Buffer} [encoding convertfrom euc-jp "\xa5\xd0\xa5\xc3\xa5\xd5\xa5\xa1"] ::msgcat::mcset ja {Buttonbar} [encoding convertfrom euc-jp "\xa5\xdc\xa5\xbf\xa5\xf3\xa5\xd0\xa1\xbc"] ::msgcat::mcset ja {Buttons} [encoding convertfrom euc-jp "\xa5\xdc\xa5\xbf\xa5\xf3"] ::msgcat::mcset ja {Bytes} [encoding convertfrom euc-jp "\xa5\xd0\xa5\xa4\xa5\xc8"] ::msgcat::mcset ja {CMYK} [encoding convertfrom euc-jp "\x43\x4d\x59\x4b\xbf\xa7"] ::msgcat::mcset ja {Can Delete} [encoding convertfrom euc-jp "\xba\xef\xbd\xfc\xb2\xc4"] ::msgcat::mcset ja {Can Edit} [encoding convertfrom euc-jp "\xca\xd4\xbd\xb8\xb2\xc4"] ::msgcat::mcset ja {Can Move} [encoding convertfrom euc-jp "\xb0\xdc\xc6\xb0\xb2\xc4"] ::msgcat::mcset ja {Can Rotate} [encoding convertfrom euc-jp "\xb2\xf3\xc5\xbe\xb2\xc4"] ::msgcat::mcset ja {Cancelled} ::msgcat::mcset ja {Cancel} [encoding convertfrom euc-jp "\xbc\xe8\xa4\xea\xbe\xc3\xa4\xb7"] ::msgcat::mcset ja {Cap} ::msgcat::mcset ja {Catalog Server} [encoding convertfrom euc-jp "\xa5\xab\xa5\xbf\xa5\xed\xa5\xb0\xb8\xa1\xba\xf7\xa5\xb5\xa1\xbc\xa5\xd0\xa1\xbc"] ::msgcat::mcset ja {Catalog Tool} [encoding convertfrom euc-jp "\xa5\xab\xa5\xbf\xa5\xed\xa5\xb0\xa5\xc4\xa1\xbc\xa5\xeb"] ::msgcat::mcset ja {Catalogs} [encoding convertfrom euc-jp "\xa5\xab\xa5\xbf\xa5\xed\xa5\xb0"] ::msgcat::mcset ja {Catalog} [encoding convertfrom euc-jp "\xa5\xab\xa5\xbf\xa5\xed\xa5\xb0"] ::msgcat::mcset ja {Catrom} ::msgcat::mcset ja {Cat} ::msgcat::mcset ja {Center Image} [encoding convertfrom euc-jp "\xa5\xa4\xa5\xe1\xa1\xbc\xa5\xb8\xa4\xf2\xc3\xe6\xbf\xb4\xa4\xcb"] ::msgcat::mcset ja {Center Non-modal Dialogs} ::msgcat::mcset ja {Center} [encoding convertfrom euc-jp "\xc3\xe6\xbf\xb4"] ::msgcat::mcset ja {Centroid Parameters} [encoding convertfrom euc-jp "\xc3\xe6\xbf\xb4\xb9\xe7\xa4\xef\xa4\xbb\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Centroid} ::msgcat::mcset ja {Circle} [encoding convertfrom euc-jp "\xb1\xdf"] ::msgcat::mcset ja {Clear All} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Clear Analysis Commands} [encoding convertfrom euc-jp "\xb2\xf2\xc0\xcf\xa5\xb3\xa5\xde\xa5\xf3\xa5\xc9\xa4\xf2\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Clear Cache} [encoding convertfrom euc-jp "\xa5\xad\xa5\xe3\xa5\xc3\xa5\xb7\xa5\xe5\xa4\xf2\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Clear Data} [encoding convertfrom euc-jp "\xa5\xc7\xa1\xbc\xa5\xbf\xa4\xf2\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Clear External Analysis Commands?} [encoding convertfrom euc-jp "\xb3\xb0\xc9\xf4\xb2\xf2\xc0\xcf\xa5\xb3\xa5\xde\xa5\xf3\xa5\xc9\xa4\xf2\xbe\xc3\xb5\xee\xa4\xb7\xa4\xde\xa4\xb9\xa4\xab\x3f"] ::msgcat::mcset ja {Clear Filter} [encoding convertfrom euc-jp "\xb9\xca\xa4\xea\xb9\xfe\xa4\xdf\xbe\xf2\xb7\xef\xa4\xf2\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Clear Frame} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xf2\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Clear Preferences?} [encoding convertfrom euc-jp "\xc0\xdf\xc4\xea\xa4\xf2\xbe\xc3\xb5\xee\xa4\xb7\xa4\xde\xa4\xb9\xa4\xab\x3f"] ::msgcat::mcset ja {Clear Preferences} [encoding convertfrom euc-jp "\xc0\xdf\xc4\xea\xa4\xf2\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Clear} [encoding convertfrom euc-jp "\xa5\xaf\xa5\xea\xa5\xa2"] ::msgcat::mcset ja {Click to Center} [encoding convertfrom euc-jp "\xa5\xaf\xa5\xea\xa5\xc3\xa5\xaf\xb0\xcc\xc3\xd6\xa4\xf2\xc3\xe6\xbf\xb4"] ::msgcat::mcset ja {Close} [encoding convertfrom euc-jp "\xca\xc4\xa4\xb8\xa4\xeb"] ::msgcat::mcset ja {Colorbar Size} ::msgcat::mcset ja {Colorbar} [encoding convertfrom euc-jp "\xc7\xdb\xbf\xa7\xcb\xc0"] ::msgcat::mcset ja {Colormap Parameters} [encoding convertfrom euc-jp "\xbf\xa7\xc4\xb4\xa4\xce\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Colormap} [encoding convertfrom euc-jp "\xbf\xa7\xc4\xb4"] ::msgcat::mcset ja {Color} [encoding convertfrom euc-jp "\xbf\xa7"] ::msgcat::mcset ja {Columns} [encoding convertfrom euc-jp "\xce\xf3"] ::msgcat::mcset ja {Column} [encoding convertfrom euc-jp "\xce\xf3"] ::msgcat::mcset ja {Command not allowed} ::msgcat::mcset ja {Command} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xde\xa5\xf3\xa5\xc9"] ::msgcat::mcset ja {Compass} [encoding convertfrom euc-jp "\xca\xfd\xb0\xcc\xbc\xa7\xc0\xd0"] ::msgcat::mcset ja {Composite Region} [encoding convertfrom euc-jp "\xca\xa3\xb9\xe7\xce\xce\xb0\xe8"] ::msgcat::mcset ja {Composite} ::msgcat::mcset ja {Compression} [encoding convertfrom euc-jp "\xb0\xb5\xbd\xcc"] ::msgcat::mcset ja {Configure} [encoding convertfrom euc-jp "\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Connect Directly} [encoding convertfrom euc-jp "\xc4\xbe\xc0\xdc\xc0\xdc\xc2\xb3"] ::msgcat::mcset ja {Connect SAMP} ::msgcat::mcset ja {Connect Using Web Proxy} [encoding convertfrom euc-jp "\x57\x65\x62\x20\xa5\xd7\xa5\xed\xa5\xad\xa5\xb7\xa4\xf2\xb2\xf0\xa4\xb7\xa4\xc6\xc0\xdc\xc2\xb3"] ::msgcat::mcset ja {Connect} [encoding convertfrom euc-jp "\xc0\xdc\xc2\xb3"] ::msgcat::mcset ja {Console} ::msgcat::mcset ja {Contacting Image Server} ::msgcat::mcset ja {Contour Parameters} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xf3\xa5\xc8\xa5\xa2\xa4\xce\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Contours} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xf3\xa5\xc8\xa5\xa2"] ::msgcat::mcset ja {Contour} ::msgcat::mcset ja {Contrast} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xf3\xa5\xc8\xa5\xe9\xa5\xb9\xa5\xc8"] ::msgcat::mcset ja {Convert to Polygons} [encoding convertfrom euc-jp "\xc2\xbf\xb3\xd1\xb7\xc1\xa4\xcb\xca\xd1\xb4\xb9"] ::msgcat::mcset ja {Coordinate Grid Parameters} [encoding convertfrom euc-jp "\xba\xc2\xc9\xb8\xa5\xb0\xa5\xea\xa5\xc3\xa5\xc9\xa4\xce\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Coordinate Grid} [encoding convertfrom euc-jp "\xba\xc2\xc9\xb8\xa5\xb0\xa5\xea\xa5\xc3\xa5\xc9"] ::msgcat::mcset ja {Coordinate System} [encoding convertfrom euc-jp "\xba\xc2\xc9\xb8\xb7\xcf"] ::msgcat::mcset ja {Coordinates} [encoding convertfrom euc-jp "\xba\xc2\xc9\xb8"] ::msgcat::mcset ja {Coordinate} [encoding convertfrom euc-jp "\xba\xc2\xc9\xb8"] ::msgcat::mcset ja {Copy Contours} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xf3\xa5\xc8\xa5\xa2\xa4\xf2\xa5\xb3\xa5\xd4\xa1\xbc"] ::msgcat::mcset ja {Copy to Regions} [encoding convertfrom euc-jp "\xce\xce\xb0\xe8\xa4\xcb\xa5\xb3\xa5\xd4\xa1\xbc"] ::msgcat::mcset ja {Copy} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xd4\xa1\xbc"] ::msgcat::mcset ja {Create Movie} ::msgcat::mcset ja {Create New Frame on Download} [encoding convertfrom euc-jp "\xa5\xc0\xa5\xa6\xa5\xf3\xa5\xed\xa1\xbc\xa5\xc9\xbb\xfe\xa4\xcb\xbf\xb7\xa4\xb7\xa4\xa4\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xf2\xba\xee\xc0\xae"] ::msgcat::mcset ja {Create} [encoding convertfrom euc-jp "\xba\xee\xc0\xae"] ::msgcat::mcset ja {Crop Parameters} ::msgcat::mcset ja {Crop} ::msgcat::mcset ja {Crosshair Parameters} ::msgcat::mcset ja {Crosshair To} [encoding convertfrom euc-jp "\xa4\xbd\xa4\xb3\xa4\xcb\xbd\xbd\xbb\xfa\xc0\xfe"] ::msgcat::mcset ja {Crosshair} [encoding convertfrom euc-jp "\xbd\xbd\xbb\xfa\xa5\xab\xa1\xbc\xa5\xbd\xa5\xeb"] ::msgcat::mcset ja {Cross} [encoding convertfrom euc-jp "\xbd\xbd\xbb\xfa"] ::msgcat::mcset ja {Cubehelix} ::msgcat::mcset ja {Cube} ::msgcat::mcset ja {Cubic} ::msgcat::mcset ja {Current Frame} [encoding convertfrom euc-jp "\xc1\xaa\xc2\xf2\xc3\xe6\xa4\xce\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {Current Range} [encoding convertfrom euc-jp "\xc1\xaa\xc2\xf2\xc3\xe6\xa4\xce\xc8\xcf\xb0\xcf"] ::msgcat::mcset ja {Current} [encoding convertfrom euc-jp "\xc1\xaa\xc2\xf2\xc3\xe6"] ::msgcat::mcset ja {Cursor} [encoding convertfrom euc-jp "\xa5\xab\xa1\xbc\xa5\xbd\xa5\xeb"] ::msgcat::mcset ja {Cut} [encoding convertfrom euc-jp "\xc0\xda\xa4\xea\xbc\xe8\xa4\xea"] ::msgcat::mcset ja {Cyan} [encoding convertfrom euc-jp "\xbf\xe5\xbf\xa7"] ::msgcat::mcset ja {DPI} ::msgcat::mcset ja {DS9 has detected a newer version of a backup file and therefore will not process this file.} ::msgcat::mcset ja {DS9 has detected a newer version of a preferences file.} ::msgcat::mcset ja {DS9 has detected an older backup file, do you wish to continue?} ::msgcat::mcset ja {DS9 has detected an older preferences file, do you wish to update?} [encoding convertfrom euc-jp "\xb8\xc5\xa4\xa4\xa5\xd0\xa1\xbc\xa5\xb8\xa5\xe7\xa5\xf3\xa4\xce\xc0\xdf\xc4\xea\xa5\xd5\xa5\xa1\xa5\xa4\xa5\xeb\xa4\xac\xb8\xab\xa4\xc4\xa4\xab\xa4\xea\xa4\xde\xa4\xb7\xa4\xbf\xa1\xa3\xb9\xb9\xbf\xb7\xa4\xb7\xa4\xde\xa4\xb9\xa4\xab\x3f"] ::msgcat::mcset ja {DS9 will complete the initialization process} [encoding convertfrom euc-jp "\xbd\xe9\xb4\xfc\xb2\xbd\xa4\xf2\xb4\xb0\xce\xbb\xa4\xb7\xa4\xde\xa4\xb9\xa1\xa3"] ::msgcat::mcset ja {Dash} [encoding convertfrom euc-jp "\xc7\xcb\xc0\xfe"] ::msgcat::mcset ja {Data Format} [encoding convertfrom euc-jp "\xa5\xc7\xa1\xbc\xa5\xbf\xb7\xc1\xbc\xb0"] ::msgcat::mcset ja {Dataset Name} ::msgcat::mcset ja {Dataset} [encoding convertfrom euc-jp "\xa5\xc7\xa1\xbc\xa5\xbf\xa5\xbb\xa5\xc3\xa5\xc8"] ::msgcat::mcset ja {Data} ::msgcat::mcset ja {Decrease} [encoding convertfrom euc-jp "\xb9\xdf\xbd\xe7"] ::msgcat::mcset ja {Default All Files} ::msgcat::mcset ja {Default Format} ::msgcat::mcset ja {Default Length} ::msgcat::mcset ja {Default} [encoding convertfrom euc-jp "\xc9\xb8\xbd\xe0"] ::msgcat::mcset ja {Degrees} [encoding convertfrom euc-jp "\xc5\xd9"] ::msgcat::mcset ja {Delete All Frames?} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xa4\xce\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xf2\xbe\xc3\xb5\xee\xa4\xb7\xa4\xde\xa4\xb9\xa4\xab\x3f"] ::msgcat::mcset ja {Delete All Frames} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xa4\xce\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xf2\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Delete All Groups?} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xa4\xce\xa5\xb0\xa5\xeb\xa1\xbc\xa5\xd7\xa4\xf2\xbe\xc3\xb5\xee\xa4\xb7\xa4\xde\xa4\xb9\xa4\xab\x3f"] ::msgcat::mcset ja {Delete All Groups} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xa4\xce\xa5\xb0\xa5\xeb\xa1\xbc\xa5\xd7\xa4\xf2\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Delete All Regions?} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xa4\xce\xce\xce\xb0\xe8\xa4\xf2\xbe\xc3\xb5\xee\xa4\xb7\xa4\xde\xa4\xb9\xa4\xab\x3f"] ::msgcat::mcset ja {Delete All Regions} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xa4\xce\xce\xce\xb0\xe8\xa4\xf2\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Delete All} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xa4\xf2\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Delete Color Tags} ::msgcat::mcset ja {Delete Frame} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xf2\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Delete Group} [encoding convertfrom euc-jp "\xa5\xb0\xa5\xeb\xa1\xbc\xa5\xd7\xa4\xf2\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Delete Selected Regions} [encoding convertfrom euc-jp "\xc1\xaa\xc2\xf2\xa4\xb7\xa4\xbf\xce\xce\xb0\xe8\xa4\xf2\xba\xef\xbd\xfc"] ::msgcat::mcset ja {Delete} [encoding convertfrom euc-jp "\xbe\xc3\xb5\xee"] ::msgcat::mcset ja {Depth} [encoding convertfrom euc-jp "\xbf\xbc\xa4\xb5"] ::msgcat::mcset ja {Detector} [encoding convertfrom euc-jp "\xb8\xa1\xbd\xd0\xb4\xef\xba\xc2\xc9\xb8"] ::msgcat::mcset ja {Dialog Box} [encoding convertfrom euc-jp "\xa5\xdd\xa5\xc3\xa5\xd7\xa5\xa2\xa5\xc3\xa5\xd7\xa5\xe1\xa5\xcb\xa5\xe5\xa1\xbc"] ::msgcat::mcset ja {Diamond} [encoding convertfrom euc-jp "\xc9\xa9\xb7\xc1"] ::msgcat::mcset ja {Dimension} [encoding convertfrom euc-jp "\xbc\xa1\xb8\xb5"] ::msgcat::mcset ja {Direction} ::msgcat::mcset ja {Disconnect} [encoding convertfrom euc-jp "\xc0\xdc\xc2\xb3\xbd\xaa\xce\xbb"] ::msgcat::mcset ja {Display Header} ::msgcat::mcset ja {Display Size} [encoding convertfrom euc-jp "\xa5\xb5\xa5\xa4\xa5\xba\xa4\xf2\xc9\xbd\xbc\xa8"] ::msgcat::mcset ja {Dissolve} [encoding convertfrom euc-jp "\xca\xac\xb2\xf2"] ::msgcat::mcset ja {Distance} ::msgcat::mcset ja {Done} ::msgcat::mcset ja {Download Colormap} ::msgcat::mcset ja {Download VOTABLE format if available} [encoding convertfrom euc-jp "\x56\x4f\x54\x41\x42\x4c\x45\x20\xb7\xc1\xbc\xb0\xa4\xac\xa4\xa2\xa4\xec\xa4\xd0\xa5\xc0\xa5\xa6\xa5\xf3\xa5\xed\xa1\xbc\xa5\xc9"] ::msgcat::mcset ja {Drag to Center} [encoding convertfrom euc-jp "\xc3\xe6\xbf\xb4\xa4\xcb\xa5\xc9\xa5\xe9\xa5\xc3\xa5\xb0"] ::msgcat::mcset ja {Duplicate Data} ::msgcat::mcset ja {East} [encoding convertfrom euc-jp "\xc5\xec"] ::msgcat::mcset ja {Ecliptic} [encoding convertfrom euc-jp "\xb2\xab\xc6\xbb\xba\xc2\xc9\xb8"] ::msgcat::mcset ja {Edit Group Name} [encoding convertfrom euc-jp "\xa5\xb0\xa5\xeb\xa1\xbc\xa5\xd7\xcc\xbe\xa4\xf2\xca\xd1\xb9\xb9"] ::msgcat::mcset ja {Edit} [encoding convertfrom euc-jp "\xca\xd4\xbd\xb8"] ::msgcat::mcset ja {Elevation} [encoding convertfrom euc-jp "\xb9\xe2\xc5\xd9"] ::msgcat::mcset ja {Ellipse Annulus} ::msgcat::mcset ja {Ellipse Panda} [encoding convertfrom euc-jp "\xc9\xf4\xca\xac\xc2\xca\xb1\xdf"] ::msgcat::mcset ja {Ellipse} [encoding convertfrom euc-jp "\xc2\xca\xb1\xdf"] ::msgcat::mcset ja {Elliptical Annulus} [encoding convertfrom euc-jp "\xc3\xe6\xc8\xb4\xa4\xad\xc2\xca\xb1\xdf"] ::msgcat::mcset ja {Elliptical Panda} [encoding convertfrom euc-jp "\xc3\xe6\xc8\xb4\xa4\xad\xc9\xf4\xca\xac\xc2\xca\xb1\xdf"] ::msgcat::mcset ja {Enable Confirmation Dialogs} [encoding convertfrom euc-jp "\xb3\xce\xc7\xa7\xa5\xe1\xa5\xc3\xa5\xbb\xa1\xbc\xa5\xb8\xa4\xf2\xc9\xbd\xbc\xa8"] ::msgcat::mcset ja {Enable} ::msgcat::mcset ja {End} [encoding convertfrom euc-jp "\xbd\xaa\xce\xbb"] ::msgcat::mcset ja {Enter Color} [encoding convertfrom euc-jp "\xbf\xa7\xa4\xf2\xc6\xfe\xce\xcf"] ::msgcat::mcset ja {Enter Font Size} ::msgcat::mcset ja {Enter Group Name} [encoding convertfrom euc-jp "\xa5\xb0\xa5\xeb\xa1\xbc\xa5\xd7\xcc\xbe\xa4\xf2\xc6\xfe\xce\xcf"] ::msgcat::mcset ja {Enter Search Expression} [encoding convertfrom euc-jp "\xb8\xa1\xba\xf7\xbe\xf2\xb7\xef\xa4\xf2\xc6\xfe\xce\xcf"] ::msgcat::mcset ja {Enter URL} ::msgcat::mcset ja {Entry} ::msgcat::mcset ja {Equal Area} [encoding convertfrom euc-jp "\xc5\xf9\xcc\xcc\xc0\xd1"] ::msgcat::mcset ja {Equal Distance} [encoding convertfrom euc-jp "\xc5\xf9\xb5\xf7\xce\xa5"] ::msgcat::mcset ja {Equal Spacing} ::msgcat::mcset ja {Equal Value} ::msgcat::mcset ja {Error code was returned} [encoding convertfrom euc-jp "\xa5\xa8\xa5\xe9\xa1\xbc\xa5\xb3\xa1\xbc\xa5\xc9\xa4\xac\xca\xd6\xa4\xb5\xa4\xec\xa4\xde\xa4\xb7\xa4\xbf\xa1\xa3"] ::msgcat::mcset ja {Error} [encoding convertfrom euc-jp "\xa5\xa8\xa5\xe9\xa1\xbc"] ::msgcat::mcset ja {Examine Frame} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xf2\xbe\xdc\xba\xd9\xc9\xbd\xbc\xa8"] ::msgcat::mcset ja {Examine} [encoding convertfrom euc-jp "\xbe\xdc\xba\xd9\xc9\xbd\xbc\xa8"] ::msgcat::mcset ja {Exam} ::msgcat::mcset ja {Exclude} [encoding convertfrom euc-jp "\xb3\xb0\xc2\xa6"] ::msgcat::mcset ja {Exit} [encoding convertfrom euc-jp "\xbd\xaa\xce\xbb"] ::msgcat::mcset ja {Export Array} ::msgcat::mcset ja {Export} ::msgcat::mcset ja {Extention} ::msgcat::mcset ja {Exterior Axes} [encoding convertfrom euc-jp "\xbc\xb4\xa4\xf2\xb3\xb0\xc2\xa6\xa4\xcb"] ::msgcat::mcset ja {Exterior Numerics} [encoding convertfrom euc-jp "\xbf\xf4\xc3\xcd\xa4\xf2\xb3\xb0\xc2\xa6\xa4\xcb"] ::msgcat::mcset ja {FAQ} [encoding convertfrom euc-jp "\xa4\xe8\xa4\xaf\xa4\xa2\xa4\xeb\xbc\xc1\xcc\xe4\xa4\xc8\xc5\xfa\xa4\xa8"] ::msgcat::mcset ja {FK4} ::msgcat::mcset ja {FK5} ::msgcat::mcset ja {Factor} ::msgcat::mcset ja {File not Found or Unable to load FITS data MIME type} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xa1\xa5\xa4\xa5\xeb\xa4\xac\xb8\xab\xa4\xc4\xa4\xab\xa4\xea\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3\xa4\xde\xa4\xbf\xa4\xcf\xa1\xa2\x46\x49\x54\x53\x20\xa5\xc7\xa1\xbc\xa5\xbf\xa4\xac\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xe1\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3"] ::msgcat::mcset ja {Filename} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xa1\xa5\xa4\xa5\xeb\xcc\xbe"] ::msgcat::mcset ja {File} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xa1\xa5\xa4\xa5\xeb"] ::msgcat::mcset ja {Fill} ::msgcat::mcset ja {Filter} [encoding convertfrom euc-jp "\xb9\xca\xa4\xea\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Find Next} [encoding convertfrom euc-jp "\xbc\xa1\xa4\xf2\xb8\xa1\xba\xf7"] ::msgcat::mcset ja {Find} [encoding convertfrom euc-jp "\xb8\xa1\xba\xf7"] ::msgcat::mcset ja {First Frame} [encoding convertfrom euc-jp "\xba\xc7\xbd\xe9\xa4\xce\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {First} [encoding convertfrom euc-jp "\xba\xc7\xbd\xe9"] ::msgcat::mcset ja {Fits} ::msgcat::mcset ja {Fixed in Size} [encoding convertfrom euc-jp "\xa5\xb5\xa5\xa4\xa5\xba\xb8\xc7\xc4\xea"] ::msgcat::mcset ja {Flat} ::msgcat::mcset ja {Flip} ::msgcat::mcset ja {Font} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xa9\xa5\xf3\xa5\xc8"] ::msgcat::mcset ja {For more information, use --help} [encoding convertfrom euc-jp "\xbe\xdc\xa4\xb7\xa4\xaf\xa4\xcf\x20\x2d\x2d\x68\x65\x6c\x70\x20\xa5\xaa\xa5\xd7\xa5\xb7\xa5\xe7\xa5\xf3\xa4\xc7\xa1\xa3"] ::msgcat::mcset ja {Format} [encoding convertfrom euc-jp "\xb7\xc1\xbc\xb0"] ::msgcat::mcset ja {Forward} [encoding convertfrom euc-jp "\xbc\xa1"] ::msgcat::mcset ja {Found} ::msgcat::mcset ja {Frame Information} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xce\xbe\xf0\xca\xf3"] ::msgcat::mcset ja {Frame Parameters} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xce\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Frames} ::msgcat::mcset ja {Frame} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {From} ::msgcat::mcset ja {Front} [encoding convertfrom euc-jp "\xc1\xb4\xcc\xcc"] ::msgcat::mcset ja {Full Range} [encoding convertfrom euc-jp "\xc1\xb4\xc8\xcf\xb0\xcf"] ::msgcat::mcset ja {Function} [encoding convertfrom euc-jp "\xb4\xd8\xbf\xf4"] ::msgcat::mcset ja {GUI Font} ::msgcat::mcset ja {Galactic} [encoding convertfrom euc-jp "\xb6\xe4\xb2\xcf\xba\xc2\xc9\xb8"] ::msgcat::mcset ja {Gap} ::msgcat::mcset ja {Gaussian} [encoding convertfrom euc-jp "\xa5\xac\xa5\xa6\xa5\xb7\xa5\xa2\xa5\xf3"] ::msgcat::mcset ja {General} [encoding convertfrom euc-jp "\xb0\xec\xc8\xcc"] ::msgcat::mcset ja {Generate} [encoding convertfrom euc-jp "\xc0\xb8\xc0\xae"] ::msgcat::mcset ja {Generating Regions} [encoding convertfrom euc-jp "\xce\xce\xb0\xe8\xa4\xf2\xba\xee\xc0\xae\xc3\xe6"] ::msgcat::mcset ja {Get Information} [encoding convertfrom euc-jp "\xbe\xf0\xca\xf3\xa4\xf2\xbc\xe8\xc6\xc0"] ::msgcat::mcset ja {Gist} ::msgcat::mcset ja {Global Properties} [encoding convertfrom euc-jp "\xa5\xb0\xa5\xed\xa1\xbc\xa5\xd0\xa5\xeb\xa5\xd7\xa5\xed\xa5\xd1\xa5\xc6\xa5\xa3"] ::msgcat::mcset ja {Global} [encoding convertfrom euc-jp "\xa5\xb0\xa5\xed\xa1\xbc\xa5\xd0\xa5\xeb"] ::msgcat::mcset ja {Goto Frame} [encoding convertfrom euc-jp "\xbb\xd8\xc4\xea\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xcb\xb0\xdc\xc6\xb0"] ::msgcat::mcset ja {Graph Horz} [encoding convertfrom euc-jp "\xb2\xa3\xc3\xc7\xcc\xcc\xbf\xde"] ::msgcat::mcset ja {Graph Vert} [encoding convertfrom euc-jp "\xbd\xc4\xc3\xc7\xcc\xcc\xbf\xde"] ::msgcat::mcset ja {Graphics} ::msgcat::mcset ja {Graphs} ::msgcat::mcset ja {Graph} [encoding convertfrom euc-jp "\xa5\xb0\xa5\xe9\xa5\xd5"] ::msgcat::mcset ja {Grayscale} [encoding convertfrom euc-jp "\xa5\xb0\xa5\xec\xa1\xbc\xa5\xb9\xa5\xb1\xa1\xbc\xa5\xeb"] ::msgcat::mcset ja {Green} [encoding convertfrom euc-jp "\xce\xd0\xbf\xa7"] ::msgcat::mcset ja {Grid Gap} [encoding convertfrom euc-jp "\xa5\xb0\xa5\xea\xa5\xc3\xa5\xc9\xa4\xce\xb4\xd6\xb3\xd6"] ::msgcat::mcset ja {Grid} [encoding convertfrom euc-jp "\xa5\xb0\xa5\xea\xa5\xc3\xa5\xc9"] ::msgcat::mcset ja {Groove} ::msgcat::mcset ja {Groups} [encoding convertfrom euc-jp "\xa5\xb0\xa5\xeb\xa1\xbc\xa5\xd7"] ::msgcat::mcset ja {HTTP} [encoding convertfrom euc-jp "\x48\x54\x54\x50"] ::msgcat::mcset ja {Header} [encoding convertfrom euc-jp "\xa5\xd8\xa5\xc3\xa5\xc0"] ::msgcat::mcset ja {Height} [encoding convertfrom euc-jp "\xb9\xe2\xa4\xb5"] ::msgcat::mcset ja {Help Desk} [encoding convertfrom euc-jp "\xa5\xd8\xa5\xeb\xa5\xd7\xa5\xc7\xa5\xb9\xa5\xaf"] ::msgcat::mcset ja {Help Me Choose} [encoding convertfrom euc-jp "\xc1\xaa\xc2\xf2\xa4\xce\xa5\xd2\xa5\xf3\xa5\xc8"] ::msgcat::mcset ja {Help} [encoding convertfrom euc-jp "\xa5\xd8\xa5\xeb\xa5\xd7"] ::msgcat::mcset ja {Hide All} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xc8\xf3\xc9\xbd\xbc\xa8"] ::msgcat::mcset ja {Highlite} ::msgcat::mcset ja {High} [encoding convertfrom euc-jp "\xbe\xe5\xb8\xc2"] ::msgcat::mcset ja {Histogram Equalization} [encoding convertfrom euc-jp "\xa5\xd2\xa5\xb9\xa5\xc8\xa5\xb0\xa5\xe9\xa5\xe0\xc5\xf9\xca\xac\xc9\xdb"] ::msgcat::mcset ja {Histogram} [encoding convertfrom euc-jp "\xa5\xd2\xa5\xb9\xa5\xc8\xa5\xb0\xa5\xe9\xa5\xe0"] ::msgcat::mcset ja {Horizontal Graph} [encoding convertfrom euc-jp "\xb2\xa3\xc3\xc7\xcc\xcc"] ::msgcat::mcset ja {Horizontal Layout} [encoding convertfrom euc-jp "\xb2\xe8\xc1\xfc\xa4\xce\xbe\xe5\xa4\xcb\xc7\xdb\xc3\xd6"] ::msgcat::mcset ja {Horizontal} ::msgcat::mcset ja {IAU Location Code} ::msgcat::mcset ja {ICRS} [encoding convertfrom euc-jp "\xb9\xf1\xba\xdd\xc5\xb7\xca\xb8\xbd\xe0\xb5\xf2\xb7\xcf"] ::msgcat::mcset ja {Identification} [encoding convertfrom euc-jp "\xc6\xb1\xc4\xea"] ::msgcat::mcset ja {If} [encoding convertfrom euc-jp "\xa4\xe2\xa4\xb7"] ::msgcat::mcset ja {Image Servers} ::msgcat::mcset ja {Image} [encoding convertfrom euc-jp "\xcf\xc0\xcd\xfd\xba\xc2\xc9\xb8"] ::msgcat::mcset ja {Import Array} ::msgcat::mcset ja {Import} ::msgcat::mcset ja {Include} [encoding convertfrom euc-jp "\xc6\xe2\xc2\xa6"] ::msgcat::mcset ja {Increase} [encoding convertfrom euc-jp "\xbe\xba\xbd\xe7"] ::msgcat::mcset ja {Information Panel} [encoding convertfrom euc-jp "\xbe\xf0\xca\xf3\xa5\xd1\xa5\xcd\xa5\xeb"] ::msgcat::mcset ja {Information} [encoding convertfrom euc-jp "\xbe\xf0\xca\xf3"] ::msgcat::mcset ja {Initialize XPA} [encoding convertfrom euc-jp "\x58\x50\x41\x20\xa4\xf2\xbd\xe9\xb4\xfc\xb2\xbd"] ::msgcat::mcset ja {Inner} [encoding convertfrom euc-jp "\xc6\xe2\xb7\xc2"] ::msgcat::mcset ja {Instrument FOV} [encoding convertfrom euc-jp "\xb8\xa1\xbd\xd0\xb4\xef\xa4\xce\xbb\xeb\xcc\xee"] ::msgcat::mcset ja {Interior Axes} [encoding convertfrom euc-jp "\xbc\xb4\xa4\xf2\xc6\xe2\xc2\xa6\xa4\xcb"] ::msgcat::mcset ja {Interior Numerics} [encoding convertfrom euc-jp "\xbf\xf4\xc3\xcd\xa4\xf2\xc6\xe2\xc2\xa6\xa4\xcb"] ::msgcat::mcset ja {Internal Parse Error} [encoding convertfrom euc-jp "\xc6\xe2\xc9\xf4\xb2\xf2\xbc\xe1\xa5\xa8\xa5\xe9\xa1\xbc"] ::msgcat::mcset ja {Interval} [encoding convertfrom euc-jp "\xb4\xd6\xb3\xd6"] ::msgcat::mcset ja {Invalid Column Name} ::msgcat::mcset ja {Invalid formated multipart/mixed mime type message} ::msgcat::mcset ja {Invert Colormap} [encoding convertfrom euc-jp "\xbf\xa7\xc4\xb4\xa4\xf2\xc8\xbf\xc5\xbe"] ::msgcat::mcset ja {Invert Selection} [encoding convertfrom euc-jp "\xc1\xaa\xc2\xf2\xa4\xf2\xc8\xbf\xc5\xbe"] ::msgcat::mcset ja {Invert} [encoding convertfrom euc-jp "\xc8\xbf\xc5\xbe"] ::msgcat::mcset ja {Italic} [encoding convertfrom euc-jp "\xa5\xa4\xa5\xbf\xa5\xea\xa5\xc3\xa5\xaf"] ::msgcat::mcset ja {Items Found} ::msgcat::mcset ja {Iteration} [encoding convertfrom euc-jp "\xb7\xab\xa4\xea\xca\xd6\xa4\xb7"] ::msgcat::mcset ja {JPEG Quality Factor} [encoding convertfrom euc-jp "\x4a\x50\x45\x47\xa4\xce\xc9\xca\xbc\xc1"] ::msgcat::mcset ja {Keep-Alive} ::msgcat::mcset ja {Kernel} ::msgcat::mcset ja {Keyboard Shortcuts} [encoding convertfrom euc-jp "\xa5\xb7\xa5\xe7\xa1\xbc\xa5\xc8\xa5\xab\xa5\xc3\xa5\xc8"] ::msgcat::mcset ja {Keyboard} [encoding convertfrom euc-jp "\xa5\xad\xa1\xbc\xa5\xdc\xa1\xbc\xa5\xc9"] ::msgcat::mcset ja {Keyword} ::msgcat::mcset ja {Labels} [encoding convertfrom euc-jp "\xa5\xe9\xa5\xd9\xa5\xeb"] ::msgcat::mcset ja {Label} [encoding convertfrom euc-jp "\xa5\xe9\xa5\xd9\xa5\xeb"] ::msgcat::mcset ja {Landscape} [encoding convertfrom euc-jp "\xb2\xa3\xc4\xb9"] ::msgcat::mcset ja {Language} [encoding convertfrom euc-jp "\xb8\xc0\xb8\xec"] ::msgcat::mcset ja {Last Frame} [encoding convertfrom euc-jp "\xba\xc7\xb8\xe5\xa4\xce\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {Last} [encoding convertfrom euc-jp "\xba\xc7\xb8\xe5"] ::msgcat::mcset ja {Layout Horz} [encoding convertfrom euc-jp "\xb2\xa3\xc7\xdb\xc3\xd6"] ::msgcat::mcset ja {Layout Vert} [encoding convertfrom euc-jp "\xbd\xc4\xc7\xdb\xc3\xd6"] ::msgcat::mcset ja {Layout} ::msgcat::mcset ja {Left} ::msgcat::mcset ja {Legal} [encoding convertfrom euc-jp "\xa5\xea\xa1\xbc\xa5\xac\xa5\xeb"] ::msgcat::mcset ja {Legend Title} ::msgcat::mcset ja {Legend} ::msgcat::mcset ja {Length} [encoding convertfrom euc-jp "\xc4\xb9\xa4\xb5"] ::msgcat::mcset ja {Letter} [encoding convertfrom euc-jp "\xa5\xec\xa5\xbf\xa1\xbc"] ::msgcat::mcset ja {Levels} [encoding convertfrom euc-jp "\xa5\xec\xa5\xd9\xa5\xeb"] ::msgcat::mcset ja {Level} [encoding convertfrom euc-jp "\xa5\xec\xa5\xd9\xa5\xeb"] ::msgcat::mcset ja {Limits} [encoding convertfrom euc-jp "\xbe\xe5\xb2\xbc\xb8\xc2"] ::msgcat::mcset ja {Line Plot Tool} ::msgcat::mcset ja {Linear} [encoding convertfrom euc-jp "\xc0\xfe\xb7\xc1"] ::msgcat::mcset ja {Line} [encoding convertfrom euc-jp "\xc0\xfe"] ::msgcat::mcset ja {List Data} ::msgcat::mcset ja {List Regions} [encoding convertfrom euc-jp "\xce\xce\xb0\xe8\xa4\xf2\xce\xf3\xb5\xf3"] ::msgcat::mcset ja {List} [encoding convertfrom euc-jp "\xce\xf3\xb5\xf3"] ::msgcat::mcset ja {Load Analysis Commands} [encoding convertfrom euc-jp "\xb2\xf2\xc0\xcf\xa5\xb3\xa5\xde\xa5\xf3\xa5\xc9\xa4\xce\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Load Color Tags} ::msgcat::mcset ja {Load Colormap} [encoding convertfrom euc-jp "\xbf\xa7\xc4\xb4\xa4\xce\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Load Configuration} [encoding convertfrom euc-jp "\xc0\xdf\xc4\xea\xa4\xce\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Load Contour Levels} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xf3\xa5\xc8\xa5\xa2\xa5\xec\xa5\xd9\xa5\xeb\xa4\xce\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Load Contours} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xf3\xa5\xc8\xa5\xa2\xa4\xce\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Load Contrast/Bias} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xf3\xa5\xc8\xa5\xe9\xa5\xb9\xa5\xc8\xa1\xa6\xa5\xd0\xa5\xa4\xa5\xa2\xa5\xb9\xa4\xce\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Load Data} [encoding convertfrom euc-jp "\xa5\xc7\xa1\xbc\xa5\xbf\xa4\xce\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Load Mosaic} [encoding convertfrom euc-jp "\xa5\xe2\xa5\xb6\xa5\xa4\xa5\xaf\xa4\xce\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Load Regions} [encoding convertfrom euc-jp "\xce\xce\xb0\xe8\xa4\xce\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Load Template} [encoding convertfrom euc-jp "\xbf\xf7\xb7\xc1\xa4\xce\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Load into All Frames} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xa4\xce\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xcb\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Load into Current Frame} [encoding convertfrom euc-jp "\xc1\xaa\xc2\xf2\xc3\xe6\xa4\xce\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xcb\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Loading Catalog} [encoding convertfrom euc-jp "\xa5\xab\xa5\xbf\xa5\xed\xa5\xb0\xa4\xf2\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf\xc3\xe6"] ::msgcat::mcset ja {Loading} [encoding convertfrom euc-jp "\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf\xc3\xe6"] ::msgcat::mcset ja {Load} [encoding convertfrom euc-jp "\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Local} [encoding convertfrom euc-jp "\xa5\xed\xa1\xbc\xa5\xab\xa5\xeb"] ::msgcat::mcset ja {Lock Axes} ::msgcat::mcset ja {Lock Bin} ::msgcat::mcset ja {Lock Color} ::msgcat::mcset ja {Lock Crop Amplifier} ::msgcat::mcset ja {Lock Crop Detector} ::msgcat::mcset ja {Lock Crop Image} ::msgcat::mcset ja {Lock Crop None} ::msgcat::mcset ja {Lock Crop Physical} ::msgcat::mcset ja {Lock Crop WCS} ::msgcat::mcset ja {Lock Crosshair Amplifier} ::msgcat::mcset ja {Lock Crosshair Detector} ::msgcat::mcset ja {Lock Crosshair Image} ::msgcat::mcset ja {Lock Crosshair None} ::msgcat::mcset ja {Lock Crosshair Physical} ::msgcat::mcset ja {Lock Crosshair WCS} ::msgcat::mcset ja {Lock Frame Amplifier} ::msgcat::mcset ja {Lock Frame Detector} ::msgcat::mcset ja {Lock Frame Image} ::msgcat::mcset ja {Lock Frame None} ::msgcat::mcset ja {Lock Frame Physical} ::msgcat::mcset ja {Lock Frame WCS} ::msgcat::mcset ja {Lock Limits} ::msgcat::mcset ja {Lock Scale} ::msgcat::mcset ja {Lock Slice Image} ::msgcat::mcset ja {Lock Slice None} ::msgcat::mcset ja {Lock Slice WCS} ::msgcat::mcset ja {Lock Smooth} ::msgcat::mcset ja {Lock} [encoding convertfrom euc-jp "\xb8\xc7\xc4\xea"] ::msgcat::mcset ja {Log Exponent} ::msgcat::mcset ja {Log} [encoding convertfrom euc-jp "\xc2\xd0\xbf\xf4"] ::msgcat::mcset ja {Low High} [encoding convertfrom euc-jp "\xbe\xe5\xb8\xc2\xa1\xa6\xb2\xbc\xb8\xc2"] ::msgcat::mcset ja {Lower Left Back} ::msgcat::mcset ja {Lower Left Front} ::msgcat::mcset ja {Lower Right Back} ::msgcat::mcset ja {Lower Right Front} ::msgcat::mcset ja {Low} [encoding convertfrom euc-jp "\xb2\xbc\xb8\xc2"] ::msgcat::mcset ja {MIP} ::msgcat::mcset ja {Magenta} [encoding convertfrom euc-jp "\xc5\xed\xbf\xa7"] ::msgcat::mcset ja {Magnification} ::msgcat::mcset ja {Magnifier} [encoding convertfrom euc-jp "\xb3\xc8\xc2\xe7\xbf\xde"] ::msgcat::mcset ja {Major} [encoding convertfrom euc-jp "\xc4\xb9\xbc\xb4"] ::msgcat::mcset ja {Manual} [encoding convertfrom euc-jp "\xbc\xea\xc6\xb0"] ::msgcat::mcset ja {Mask Parameters} [encoding convertfrom euc-jp "\xa5\xde\xa5\xb9\xa5\xaf\xa4\xce\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Match Axes} ::msgcat::mcset ja {Match Bin} ::msgcat::mcset ja {Match Catalog requires at least 1 row per catalog} ::msgcat::mcset ja {Match Color} ::msgcat::mcset ja {Match Crop Amplifier} ::msgcat::mcset ja {Match Crop Detector} ::msgcat::mcset ja {Match Crop Image} ::msgcat::mcset ja {Match Crop Physical} ::msgcat::mcset ja {Match Crop WCS} ::msgcat::mcset ja {Match Crosshair Amplifier} ::msgcat::mcset ja {Match Crosshair Detector} ::msgcat::mcset ja {Match Crosshair Image} ::msgcat::mcset ja {Match Crosshair Physical} ::msgcat::mcset ja {Match Crosshair WCS} ::msgcat::mcset ja {Match Frame Amplifier} ::msgcat::mcset ja {Match Frame Detector} ::msgcat::mcset ja {Match Frame Image} ::msgcat::mcset ja {Match Frame Physical} ::msgcat::mcset ja {Match Frame WCS} ::msgcat::mcset ja {Match Limits} ::msgcat::mcset ja {Match Scale} ::msgcat::mcset ja {Match Slice Image} ::msgcat::mcset ja {Match Slice WCS} ::msgcat::mcset ja {Match Smooth} ::msgcat::mcset ja {Match} ::msgcat::mcset ja {Math Function} [encoding convertfrom euc-jp "\xb4\xd8\xbf\xf4"] ::msgcat::mcset ja {Matplotlib} ::msgcat::mcset ja {Max Rows} [encoding convertfrom euc-jp "\xba\xc7\xc2\xe7\xb9\xd4\xbf\xf4"] ::msgcat::mcset ja {Maximum} ::msgcat::mcset ja {Max} [encoding convertfrom euc-jp "\xba\xc7\xc2\xe7"] ::msgcat::mcset ja {Menus and Buttons} ::msgcat::mcset ja {Menu} [encoding convertfrom euc-jp "\xa5\xe1\xa5\xcb\xa5\xe5\xa1\xbc"] ::msgcat::mcset ja {Message Log} [encoding convertfrom euc-jp "\xa5\xe1\xa5\xc3\xa5\xbb\xa1\xbc\xa5\xb8\xa4\xce\xb5\xad\xcf\xbf"] ::msgcat::mcset ja {Method} [encoding convertfrom euc-jp "\xb7\xd7\xbb\xbb\xcb\xa1"] ::msgcat::mcset ja {Min Max Parameters} ::msgcat::mcset ja {Min Max} [encoding convertfrom euc-jp "\xba\xc7\xc2\xe7\xa1\xa6\xba\xc7\xbe\xae"] ::msgcat::mcset ja {Minimum} ::msgcat::mcset ja {Minor} [encoding convertfrom euc-jp "\xc3\xbb\xbc\xb4"] ::msgcat::mcset ja {Minutes} ::msgcat::mcset ja {Min} [encoding convertfrom euc-jp "\xba\xc7\xbe\xae"] ::msgcat::mcset ja {Mission} [encoding convertfrom euc-jp "\xa5\xdf\xa5\xc3\xa5\xb7\xa5\xe7\xa5\xf3"] ::msgcat::mcset ja {Mode} ::msgcat::mcset ja {Mosaic IRAF Segment} ::msgcat::mcset ja {Mosaic IRAF} ::msgcat::mcset ja {Mosaic WCS Segment} ::msgcat::mcset ja {Mosaic WCS} ::msgcat::mcset ja {Mosaic WFPC2} ::msgcat::mcset ja {Mosaic} ::msgcat::mcset ja {Mouse Click Epsilon} ::msgcat::mcset ja {Mouse Wheel Bin} ::msgcat::mcset ja {Mouse Wheel Zoom} ::msgcat::mcset ja {Mouse and Keyboard} ::msgcat::mcset ja {Move Back} [encoding convertfrom euc-jp "\xc1\xb0\xa4\xcb\xb0\xdc\xc6\xb0"] ::msgcat::mcset ja {Move First} [encoding convertfrom euc-jp "\xba\xc7\xbd\xe9\xa4\xcb\xb0\xdc\xc6\xb0"] ::msgcat::mcset ja {Move Forward} [encoding convertfrom euc-jp "\xbc\xa1\xa4\xcb\xb0\xdc\xc6\xb0"] ::msgcat::mcset ja {Move Frame} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xf2\xb0\xdc\xc6\xb0"] ::msgcat::mcset ja {Move Last} [encoding convertfrom euc-jp "\xba\xc7\xb8\xe5\xa4\xcb\xb0\xdc\xc6\xb0"] ::msgcat::mcset ja {Move to Back} [encoding convertfrom euc-jp "\xc7\xd8\xcc\xcc\xa4\xcb\xb0\xdc\xc6\xb0"] ::msgcat::mcset ja {Move to Front} [encoding convertfrom euc-jp "\xc1\xb0\xcc\xcc\xa4\xcb\xb0\xdc\xc6\xb0"] ::msgcat::mcset ja {Movie} ::msgcat::mcset ja {Multiple Extension Cube} ::msgcat::mcset ja {Multiple Extension Frames} ::msgcat::mcset ja {Multiple WCS} [encoding convertfrom euc-jp "\xca\xa3\xbf\xf4\x57\x43\x53"] ::msgcat::mcset ja {NRRD} ::msgcat::mcset ja {Name Resolution} [encoding convertfrom euc-jp "\xcc\xbe\xc1\xb0\xa4\xc7\xb8\xa1\xba\xf7"] ::msgcat::mcset ja {Name Server} [encoding convertfrom euc-jp "\xc5\xb7\xc2\xce\xcc\xbe\xb8\xa1\xba\xf7\xa5\xb5\xa1\xbc\xa5\xd0\xa1\xbc"] ::msgcat::mcset ja {Name or Designation} [encoding convertfrom euc-jp "\xc5\xb7\xc2\xce\xcc\xbe"] ::msgcat::mcset ja {Name} ::msgcat::mcset ja {Native Dialog} ::msgcat::mcset ja {New Features} [encoding convertfrom euc-jp "\xbf\xb7\xa4\xb7\xa4\xa4\xb5\xa1\xc7\xbd"] ::msgcat::mcset ja {New Frame 3D} [encoding convertfrom euc-jp "\xbf\xb7\xa4\xb7\xa4\xa4\x33\x44\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {New Frame RGB} [encoding convertfrom euc-jp "\xbf\xb7\xa4\xb7\xa4\xa4\x52\x47\x42\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {New Frame each Time} [encoding convertfrom euc-jp "\xcb\xe8\xb2\xf3\xbf\xb7\xa4\xb7\xa4\xa4\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xba\xee\xc0\xae"] ::msgcat::mcset ja {New Frame} [encoding convertfrom euc-jp "\xbf\xb7\xa4\xb7\xa4\xa4\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {New Group} [encoding convertfrom euc-jp "\xbf\xb7\xa4\xb7\xa4\xa4\xa5\xb0\xa5\xeb\xa1\xbc\xa5\xd7"] ::msgcat::mcset ja {New} [encoding convertfrom euc-jp "\xbf\xb7\xb5\xac"] ::msgcat::mcset ja {Next Frame} [encoding convertfrom euc-jp "\xbc\xa1\xa4\xce\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {Next} [encoding convertfrom euc-jp "\xbf\xca\xa4\xe0"] ::msgcat::mcset ja {No Catalog specified} [encoding convertfrom euc-jp "\xa5\xab\xa5\xbf\xa5\xed\xa5\xb0\xa4\xac\xbb\xd8\xc4\xea\xa4\xb5\xa4\xec\xa4\xc6\xa4\xa4\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3"] ::msgcat::mcset ja {No Data Available} ::msgcat::mcset ja {No Items Found} [encoding convertfrom euc-jp "\xb8\xab\xa4\xc4\xa4\xab\xa4\xea\xa4\xde\xa4\xbb\xa4\xf3\xa4\xc7\xa4\xb7\xa4\xbf\xa1\xa3"] ::msgcat::mcset ja {No current frame} ::msgcat::mcset ja {Non-zero} [encoding convertfrom euc-jp "\xc8\xf3\xce\xed\xc3\xcd"] ::msgcat::mcset ja {None} [encoding convertfrom euc-jp "\xa4\xca\xa4\xb7"] ::msgcat::mcset ja {Normal} [encoding convertfrom euc-jp "\xc9\xb8\xbd\xe0"] ::msgcat::mcset ja {North} [encoding convertfrom euc-jp "\xcb\xcc"] ::msgcat::mcset ja {Not Found} ::msgcat::mcset ja {Not Supported} ::msgcat::mcset ja {Number of Samples} [encoding convertfrom euc-jp "\xa5\xb5\xa5\xf3\xa5\xd7\xa5\xeb\xa4\xce\xbf\xf4"] ::msgcat::mcset ja {Number of Threads} ::msgcat::mcset ja {Number of Ticks} ::msgcat::mcset ja {Number} [encoding convertfrom euc-jp "\xc8\xd6\xb9\xe6"] ::msgcat::mcset ja {Numerics} [encoding convertfrom euc-jp "\xbf\xf4\xc3\xcd"] ::msgcat::mcset ja {OK} [encoding convertfrom euc-jp "\xce\xbb\xb2\xf2"] ::msgcat::mcset ja {Object} [encoding convertfrom euc-jp "\xc5\xb7\xc2\xce\xcc\xbe"] ::msgcat::mcset ja {Open File} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xa1\xa5\xa4\xa5\xeb\xa4\xf2\xb3\xab\xa4\xaf"] ::msgcat::mcset ja {Open TCL Console} [encoding convertfrom euc-jp "\x54\x43\x4c\x20\xa5\xb3\xa5\xf3\xa5\xbd\xa1\xbc\xa5\xeb\xa4\xf2\xb3\xab\xa4\xaf"] ::msgcat::mcset ja {Open URL} [encoding convertfrom euc-jp "\x55\x52\x4c\x20\xa4\xf2\xb3\xab\xa4\xaf"] ::msgcat::mcset ja {Open as} ::msgcat::mcset ja {Open} [encoding convertfrom euc-jp "\xb3\xab\xa4\xaf"] ::msgcat::mcset ja {Operator} [encoding convertfrom euc-jp "\xb1\xe9\xbb\xbb\xbb\xd2"] ::msgcat::mcset ja {Orientation} [encoding convertfrom euc-jp "\xca\xfd\xb8\xfe"] ::msgcat::mcset ja {Origin} ::msgcat::mcset ja {Oscillate} ::msgcat::mcset ja {Other Color} ::msgcat::mcset ja {Other Font Size} ::msgcat::mcset ja {Other} [encoding convertfrom euc-jp "\xa4\xbd\xa4\xce\xc2\xbe"] ::msgcat::mcset ja {Outer} [encoding convertfrom euc-jp "\xb3\xb0\xb7\xc2"] ::msgcat::mcset ja {Overlap} ::msgcat::mcset ja {PS Page Setup} [encoding convertfrom euc-jp "\x50\x53\xa5\xda\xa1\xbc\xa5\xb8\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {PS Print} [encoding convertfrom euc-jp "\x50\x53\xb0\xf5\xba\xfe"] ::msgcat::mcset ja {Page Setup} [encoding convertfrom euc-jp "\xa5\xda\xa1\xbc\xa5\xb8\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Page Source} [encoding convertfrom euc-jp "\xa5\xda\xa1\xbc\xa5\xb8\xa4\xce\xa5\xbd\xa1\xbc\xa5\xb9"] ::msgcat::mcset ja {Pan To} [encoding convertfrom euc-jp "\xa4\xbd\xa4\xb3\xa4\xcb\xa5\xd1\xa5\xf3"] ::msgcat::mcset ja {Pan Zoom Rotate Parameters} [encoding convertfrom euc-jp "\xa5\xd1\xa5\xf3\xa1\xa6\xa5\xba\xa1\xbc\xa5\xe0\xa1\xa6\xb2\xf3\xc5\xbe\xa4\xce\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Pan Zoom} [encoding convertfrom euc-jp "\xa5\xd1\xa5\xf3\xa1\xa6\xa5\xba\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {Pan then Zoom} [encoding convertfrom euc-jp "\xa5\xd1\xa5\xf3\xa4\xce\xa4\xc1\xa5\xba\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {Panda} [encoding convertfrom euc-jp "\xc9\xf4\xca\xac\xb1\xdf"] ::msgcat::mcset ja {Panner} [encoding convertfrom euc-jp "\xc1\xb4\xc2\xce\xbf\xde"] ::msgcat::mcset ja {Pan} [encoding convertfrom euc-jp "\xa5\xd1\xa5\xf3"] ::msgcat::mcset ja {Parameters} [encoding convertfrom euc-jp "\xa5\xd1\xa5\xe9\xa5\xe1\xa1\xbc\xa5\xbf"] ::msgcat::mcset ja {Password} [encoding convertfrom euc-jp "\xa5\xd1\xa5\xb9\xa5\xef\xa1\xbc\xa5\xc9"] ::msgcat::mcset ja {Paste Contours} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xf3\xa5\xc8\xa5\xa2\xa4\xf2\xc5\xbd\xa4\xea\xc9\xd5\xa4\xb1"] ::msgcat::mcset ja {Paste} [encoding convertfrom euc-jp "\xc5\xbd\xa4\xea\xc9\xd5\xa4\xb1"] ::msgcat::mcset ja {Physical} [encoding convertfrom euc-jp "\xca\xaa\xcd\xfd\xba\xc2\xc9\xb8"] ::msgcat::mcset ja {Pixel Distribution} [encoding convertfrom euc-jp "\xa5\xd4\xa5\xaf\xa5\xbb\xa5\xeb\xc9\xd1\xc5\xd9\xca\xac\xc9\xdb"] ::msgcat::mcset ja {Pixel Size} [encoding convertfrom euc-jp "\xa5\xd4\xa5\xaf\xa5\xbb\xa5\xeb\xa5\xb5\xa5\xa4\xa5\xba"] ::msgcat::mcset ja {Pixel Table} [encoding convertfrom euc-jp "\xa5\xd4\xa5\xaf\xa5\xbb\xa5\xeb\xc9\xbd"] ::msgcat::mcset ja {Pixels} [encoding convertfrom euc-jp "\xa5\xd4\xa5\xaf\xa5\xbb\xa5\xeb"] ::msgcat::mcset ja {Play} [encoding convertfrom euc-jp "\xba\xc6\xc0\xb8"] ::msgcat::mcset ja {Please Select a Region} [encoding convertfrom euc-jp "\xce\xce\xb0\xe8\xa4\xf2\xbb\xd8\xc4\xea\xa4\xb7\xa4\xc6\xa4\xaf\xa4\xc0\xa4\xb5\xa4\xa4\xa1\xa3"] ::msgcat::mcset ja {Please change the file's permission to disable other users write access. Use anyway?} ::msgcat::mcset ja {Please specify width, height, and either name or (ra,dec)} [encoding convertfrom euc-jp "\xc9\xfd\xa1\xa2\xb9\xe2\xa4\xb5\xa1\xa2\xcc\xbe\xc1\xb0\xa4\xe2\xa4\xb7\xa4\xaf\xa4\xcf\x20\x28\x72\x61\x2c\x64\x65\x63\x29\x20\xa4\xf2\xbb\xd8\xc4\xea\xa4\xb7\xa4\xc6\xa4\xaf\xa4\xc0\xa4\xb5\xa4\xa4\xa1\xa3"] ::msgcat::mcset ja {Plot 2D} ::msgcat::mcset ja {Plot 3D} ::msgcat::mcset ja {Plot Title} [encoding convertfrom euc-jp "\xa5\xbf\xa5\xa4\xa5\xc8\xa5\xeb\xc9\xbd\xbc\xa8"] ::msgcat::mcset ja {Plotting Regions} [encoding convertfrom euc-jp "\xce\xce\xb0\xe8\xa4\xf2\xa5\xd7\xa5\xed\xa5\xc3\xa5\xc8\xa4\xb7\xa4\xc6\xa4\xa4\xa4\xde\xa4\xb9"] ::msgcat::mcset ja {Plot} [encoding convertfrom euc-jp "\xa5\xd7\xa5\xed\xa5\xc3\xa5\xc8"] ::msgcat::mcset ja {Plus} [encoding convertfrom euc-jp "\xa1\xdc"] ::msgcat::mcset ja {Pointer} [encoding convertfrom euc-jp "\xa5\xdd\xa5\xa4\xa5\xf3\xa5\xbf"] ::msgcat::mcset ja {Points} [encoding convertfrom euc-jp "\xc5\xc0"] ::msgcat::mcset ja {Point} [encoding convertfrom euc-jp "\xc5\xc0"] ::msgcat::mcset ja {Polygon} [encoding convertfrom euc-jp "\xc2\xbf\xb3\xd1\xb7\xc1"] ::msgcat::mcset ja {Portrait} [encoding convertfrom euc-jp "\xbd\xc4\xc4\xb9"] ::msgcat::mcset ja {Poster} [encoding convertfrom euc-jp "\xa5\xdd\xa5\xb9\xa5\xbf\xa1\xbc"] ::msgcat::mcset ja {Postscript Page Setup} [encoding convertfrom euc-jp "\xa5\xdd\xa5\xb9\xa5\xc8\xa5\xb9\xa5\xaf\xa5\xea\xa5\xd7\xa5\xc8\xa5\xda\xa1\xbc\xa5\xb8\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Postscript Print} [encoding convertfrom euc-jp "\xa5\xdd\xa5\xb9\xa5\xc8\xa5\xb9\xa5\xaf\xa5\xea\xa5\xd7\xa5\xc8\xb0\xf5\xba\xfe"] ::msgcat::mcset ja {Postscript} [encoding convertfrom euc-jp "\xa5\xdd\xa5\xb9\xa5\xc8\xa5\xb9\xa5\xaf\xa5\xea\xa5\xd7\xa5\xc8"] ::msgcat::mcset ja {Power} [encoding convertfrom euc-jp "\xd1\xd1\xbe\xe8"] ::msgcat::mcset ja {Preferences} [encoding convertfrom euc-jp "\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Preserve During Load} [encoding convertfrom euc-jp "\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf\xc3\xe6\xa4\xcb\xca\xdd\xbb\xfd"] ::msgcat::mcset ja {Previous Frame} [encoding convertfrom euc-jp "\xc1\xb0\xa4\xce\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {Previous} [encoding convertfrom euc-jp "\xcc\xe1\xa4\xeb"] ::msgcat::mcset ja {Prev} ::msgcat::mcset ja {Print Coordinates} [encoding convertfrom euc-jp "\xba\xc2\xc9\xb8\xa4\xf2\xb0\xf5\xba\xfe"] ::msgcat::mcset ja {Print To} [encoding convertfrom euc-jp "\xbd\xd0\xce\xcf\xc0\xe8"] ::msgcat::mcset ja {Printer} [encoding convertfrom euc-jp "\xa5\xd7\xa5\xea\xa5\xf3\xa5\xbf"] ::msgcat::mcset ja {Print} [encoding convertfrom euc-jp "\xb0\xf5\xba\xfe"] ::msgcat::mcset ja {Projection} [encoding convertfrom euc-jp "\xc0\xda\xc3\xc7\xcc\xcc"] ::msgcat::mcset ja {Properties} [encoding convertfrom euc-jp "\xc2\xb0\xc0\xad"] ::msgcat::mcset ja {Property} [encoding convertfrom euc-jp "\xc2\xb0\xc0\xad"] ::msgcat::mcset ja {Proxy Host} [encoding convertfrom euc-jp "\xa5\xd7\xa5\xed\xa5\xad\xa5\xb7\xa5\xb5\xa1\xbc\xa5\xd0\xa1\xbc"] ::msgcat::mcset ja {Proxy Port} [encoding convertfrom euc-jp "\xa5\xd7\xa5\xed\xa5\xad\xa5\xb7\xa5\xdd\xa1\xbc\xa5\xc8"] ::msgcat::mcset ja {Publication} [encoding convertfrom euc-jp "\xcf\xc0\xca\xb8"] ::msgcat::mcset ja {Quadratic} ::msgcat::mcset ja {RGB Array} ::msgcat::mcset ja {RGB Cube} ::msgcat::mcset ja {RGB Image} ::msgcat::mcset ja {RGB} [encoding convertfrom euc-jp "\x52\x47\x42\xbf\xa7"] ::msgcat::mcset ja {Radial Profile} ::msgcat::mcset ja {Radial} ::msgcat::mcset ja {Radius} [encoding convertfrom euc-jp "\xc8\xbe\xb7\xc2"] ::msgcat::mcset ja {Raised} ::msgcat::mcset ja {Range} ::msgcat::mcset ja {Redo} [encoding convertfrom euc-jp "\xa4\xe2\xa4\xa6\xb0\xec\xc5\xd9"] ::msgcat::mcset ja {Red} [encoding convertfrom euc-jp "\xc0\xd6\xbf\xa7"] ::msgcat::mcset ja {Reference Manual} [encoding convertfrom euc-jp "\xa5\xea\xa5\xd5\xa5\xa1\xa5\xec\xa5\xf3\xa5\xb9\xa5\xde\xa5\xcb\xa5\xe5\xa5\xa2\xa5\xeb"] ::msgcat::mcset ja {Reference} [encoding convertfrom euc-jp "\xa5\xea\xa5\xd5\xa5\xa1\xa5\xec\xa5\xf3\xa5\xb9"] ::msgcat::mcset ja {Refresh Frame} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xf2\xba\xc6\xc9\xc1\xb2\xe8"] ::msgcat::mcset ja {Refresh} [encoding convertfrom euc-jp "\xba\xc6\xc9\xc1\xb2\xe8"] ::msgcat::mcset ja {Region Parameters} [encoding convertfrom euc-jp "\xce\xce\xb0\xe8\xa4\xce\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Region} [encoding convertfrom euc-jp "\xce\xce\xb0\xe8"] ::msgcat::mcset ja {Release Notes} [encoding convertfrom euc-jp "\xa5\xea\xa5\xea\xa1\xbc\xa5\xb9\xa5\xce\xa1\xbc\xa5\xc8"] ::msgcat::mcset ja {Release} [encoding convertfrom euc-jp "\xa5\xea\xa5\xea\xa1\xbc\xa5\xb9"] ::msgcat::mcset ja {Relief} ::msgcat::mcset ja {Reload} [encoding convertfrom euc-jp "\xba\xc6\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xdf"] ::msgcat::mcset ja {Render} ::msgcat::mcset ja {Repeat} ::msgcat::mcset ja {Reset Colormap} [encoding convertfrom euc-jp "\xbf\xa7\xc4\xb4\xa4\xf2\xa5\xea\xa5\xbb\xa5\xc3\xa5\xc8"] ::msgcat::mcset ja {Reset Frame} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xf2\xa5\xea\xa5\xbb\xa5\xc3\xa5\xc8"] ::msgcat::mcset ja {Reset} [encoding convertfrom euc-jp "\xa5\xea\xa5\xbb\xa5\xc3\xa5\xc8"] ::msgcat::mcset ja {Restore} ::msgcat::mcset ja {Retrieve} [encoding convertfrom euc-jp "\xb8\xa1\xba\xf7"] ::msgcat::mcset ja {Return} ::msgcat::mcset ja {Right} ::msgcat::mcset ja {Roman} ::msgcat::mcset ja {Rotate} [encoding convertfrom euc-jp "\xb2\xf3\xc5\xbe"] ::msgcat::mcset ja {Rows} [encoding convertfrom euc-jp "\xb9\xd4"] ::msgcat::mcset ja {Row} ::msgcat::mcset ja {Ruler} [encoding convertfrom euc-jp "\xa4\xe2\xa4\xce\xa4\xb5\xa4\xb7"] ::msgcat::mcset ja {SAMP Image} ::msgcat::mcset ja {SAMP Table} ::msgcat::mcset ja {SAMP: already connected} [encoding convertfrom euc-jp "\x53\x41\x4d\x50\x3a\x20\xc0\xdc\xc2\xb3\xa4\xba\xa4\xdf"] ::msgcat::mcset ja {SAMP: internal error} [encoding convertfrom euc-jp "\x53\x41\x4d\x50\x3a\x20\xc6\xe2\xc9\xf4\xa5\xa8\xa5\xe9\xa1\xbc"] ::msgcat::mcset ja {SAMP: not connected} [encoding convertfrom euc-jp "\x53\x41\x4d\x50\x3a\x20\xcc\xa4\xc0\xdc\xc2\xb3"] ::msgcat::mcset ja {SAMP: unable to locate HUB} [encoding convertfrom euc-jp "\x53\x41\x4d\x50\x3a\x20\x48\x55\x42\x20\xa4\xf2\xb8\xab\xa4\xc4\xa4\xb1\xa4\xe9\xa4\xec\xa4\xde\xa4\xbb\xa4\xf3"] ::msgcat::mcset ja {SAMP} [encoding convertfrom euc-jp "\x53\x41\x4d\x50"] ::msgcat::mcset ja {Sample Increment} ::msgcat::mcset ja {Sample Parameters} ::msgcat::mcset ja {Samples per Line} [encoding convertfrom euc-jp "\xa3\xb1\xb9\xd4\xa4\xa2\xa4\xbf\xa4\xea\xa4\xce\xa5\xb5\xa5\xf3\xa5\xd7\xa5\xeb"] ::msgcat::mcset ja {Sample} ::msgcat::mcset ja {Save 3D Movie} ::msgcat::mcset ja {Save Color Tags} ::msgcat::mcset ja {Save Colormap} [encoding convertfrom euc-jp "\xbf\xa7\xc4\xb4\xa4\xf2\xca\xdd\xc2\xb8"] ::msgcat::mcset ja {Save Configuration} [encoding convertfrom euc-jp "\xc0\xdf\xc4\xea\xa4\xf2\xca\xdd\xc2\xb8"] ::msgcat::mcset ja {Save Contour Levels} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xf3\xa5\xc8\xa5\xa2\xa5\xec\xa5\xd9\xa5\xeb\xa4\xf2\xca\xdd\xc2\xb8"] ::msgcat::mcset ja {Save Contours} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xf3\xa5\xc8\xa5\xa2\xa4\xf2\xca\xdd\xc2\xb8"] ::msgcat::mcset ja {Save Contrast/Bias} [encoding convertfrom euc-jp "\xa5\xb3\xa5\xf3\xa5\xc8\xa5\xe9\xa5\xb9\xa5\xc8\xa1\xa6\xa5\xd0\xa5\xa4\xa5\xa2\xa5\xb9\xa4\xf2\xca\xdd\xc2\xb8"] ::msgcat::mcset ja {Save Data} [encoding convertfrom euc-jp "\xa5\xc7\xa1\xbc\xa5\xbf\xa4\xf2\xca\xdd\xc2\xb8"] ::msgcat::mcset ja {Save Image on Download} ::msgcat::mcset ja {Save Image} [encoding convertfrom euc-jp "\xa5\xa4\xa5\xe1\xa1\xbc\xa5\xb8\xa4\xf2\xca\xdd\xc2\xb8"] ::msgcat::mcset ja {Save Regions} [encoding convertfrom euc-jp "\xce\xce\xb0\xe8\xa4\xf2\xca\xdd\xc2\xb8"] ::msgcat::mcset ja {Save Template} [encoding convertfrom euc-jp "\xbf\xf7\xb7\xc1\xa4\xf2\xca\xdd\xc2\xb8"] ::msgcat::mcset ja {Save as} ::msgcat::mcset ja {Save} [encoding convertfrom euc-jp "\xca\xdd\xc2\xb8"] ::msgcat::mcset ja {Scale Parameters} [encoding convertfrom euc-jp "\xa5\xb9\xa5\xb1\xa1\xbc\xa5\xeb\xa4\xce\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Scale and Limits} ::msgcat::mcset ja {Scale} [encoding convertfrom euc-jp "\xa5\xb9\xa5\xb1\xa1\xbc\xa5\xeb"] ::msgcat::mcset ja {Scan} [encoding convertfrom euc-jp "\xa5\xb9\xa5\xad\xa5\xe3\xa5\xf3"] ::msgcat::mcset ja {Scatter Plot Tool} ::msgcat::mcset ja {Scope} [encoding convertfrom euc-jp "\xa5\xb9\xa5\xb3\xa1\xbc\xa5\xd7"] ::msgcat::mcset ja {Search for Catalogs} [encoding convertfrom euc-jp "\xa5\xab\xa5\xbf\xa5\xed\xa5\xb0\xa4\xf2\xb8\xa1\xba\xf7"] ::msgcat::mcset ja {Searching for catalogs} [encoding convertfrom euc-jp "\xa5\xab\xa5\xbf\xa5\xed\xa5\xb0\xa4\xf2\xb8\xa1\xba\xf7\xc3\xe6"] ::msgcat::mcset ja {Seconds} [encoding convertfrom euc-jp "\xc9\xc3"] ::msgcat::mcset ja {Segment} ::msgcat::mcset ja {Select All} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xc1\xaa\xc2\xf2"] ::msgcat::mcset ja {Select Coordinate System } [encoding convertfrom euc-jp "\xba\xc2\xc9\xb8\xb7\xcf\xa4\xf2\xc1\xaa\xc2\xf2"] ::msgcat::mcset ja {Select None} [encoding convertfrom euc-jp "\xc1\xaa\xc2\xf2\xa4\xf2\xb2\xf2\xbd\xfc"] ::msgcat::mcset ja {Select} ::msgcat::mcset ja {Send} [encoding convertfrom euc-jp "\xc1\xf7\xbf\xae"] ::msgcat::mcset ja {Server} [encoding convertfrom euc-jp "\xa5\xb5\xa1\xbc\xa5\xd0\xa1\xbc"] ::msgcat::mcset ja {Sexagesimal} [encoding convertfrom euc-jp "\xbb\xfe\xca\xac\xc9\xc3"] ::msgcat::mcset ja {Shape} [encoding convertfrom euc-jp "\xb7\xc1"] ::msgcat::mcset ja {Show All} [encoding convertfrom euc-jp "\xc1\xb4\xa4\xc6\xc9\xbd\xbc\xa8"] ::msgcat::mcset ja {Show Command} ::msgcat::mcset ja {Show Compass} ::msgcat::mcset ja {Show Text} [encoding convertfrom euc-jp "\xca\xb8\xbb\xfa\xa4\xf2\xc9\xbd\xbc\xa8"] ::msgcat::mcset ja {Show/Hide Frames} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xce\xc9\xbd\xbc\xa8\x2f\xc8\xf3\xc9\xbd\xbc\xa8"] ::msgcat::mcset ja {Show} [encoding convertfrom euc-jp "\xc9\xbd\xbc\xa8"] ::msgcat::mcset ja {Simple Cross} ::msgcat::mcset ja {Simple Plus} ::msgcat::mcset ja {Single Frame} [encoding convertfrom euc-jp "\xc3\xb1\xb0\xec\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {Single} [encoding convertfrom euc-jp "\xc3\xb1\xb0\xec"] ::msgcat::mcset ja {Sites} ::msgcat::mcset ja {Size/Radius} [encoding convertfrom euc-jp "\xc2\xe7\xa4\xad\xa4\xb5\x2f\xc8\xbe\xb7\xc2"] ::msgcat::mcset ja {Size} [encoding convertfrom euc-jp "\xc2\xe7\xa4\xad\xa4\xb5"] ::msgcat::mcset ja {Skip First} ::msgcat::mcset ja {Slice} ::msgcat::mcset ja {Smooth Parameters} [encoding convertfrom euc-jp "\xca\xbf\xb3\xea\xb2\xbd\xa4\xce\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Smoothness} ::msgcat::mcset ja {Smooth} [encoding convertfrom euc-jp "\xca\xbf\xb3\xea\xb2\xbd"] ::msgcat::mcset ja {Solid} ::msgcat::mcset ja {Sorry, DS9 does not support} [encoding convertfrom euc-jp "\x44\x53\x39\x20\xa4\xc7\xa5\xb5\xa5\xdd\xa1\xbc\xa5\xc8\xa4\xb5\xa4\xec\xa4\xc6\xa4\xa4\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3"] ::msgcat::mcset ja {Sorry, DS9 requires a Truecolor8, Truecolor16, Truecolor24 visual be available} ::msgcat::mcset ja {Sort} [encoding convertfrom euc-jp "\xca\xc2\xa4\xd9\xc2\xd8\xa4\xa8"] ::msgcat::mcset ja {Source TCL} [encoding convertfrom euc-jp "\x54\x43\x4c\x20\xa4\xf2\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xe0"] ::msgcat::mcset ja {Source} [encoding convertfrom euc-jp "\xa5\xbd\xa1\xbc\xa5\xb9\xce\xce\xb0\xe8"] ::msgcat::mcset ja {Space Equal Distance} ::msgcat::mcset ja {Space Equal Value} ::msgcat::mcset ja {Spacing} ::msgcat::mcset ja {Sqrt} ::msgcat::mcset ja {Square Root} [encoding convertfrom euc-jp "\xca\xbf\xca\xfd\xba\xac"] ::msgcat::mcset ja {Squared} [encoding convertfrom euc-jp "\xca\xbf\xca\xfd"] ::msgcat::mcset ja {Square} ::msgcat::mcset ja {Stacked} ::msgcat::mcset ja {Starbase} ::msgcat::mcset ja {Startup} ::msgcat::mcset ja {Start} [encoding convertfrom euc-jp "\xb3\xab\xbb\xcf"] ::msgcat::mcset ja {Statistics} ::msgcat::mcset ja {Stats} ::msgcat::mcset ja {Status} [encoding convertfrom euc-jp "\xbe\xf5\xc2\xd6"] ::msgcat::mcset ja {Step} [encoding convertfrom euc-jp "\xa5\xb9\xa5\xc6\xa5\xc3\xa5\xd7"] ::msgcat::mcset ja {Stop} [encoding convertfrom euc-jp "\xbd\xaa\xce\xbb"] ::msgcat::mcset ja {Story of SAOImage DS9} ::msgcat::mcset ja {Story} ::msgcat::mcset ja {Sum} [encoding convertfrom euc-jp "\xb9\xe7\xb7\xd7"] ::msgcat::mcset ja {Sunken} ::msgcat::mcset ja {Symbol Editor} [encoding convertfrom euc-jp "\xb5\xad\xb9\xe6\xa4\xce\xca\xd4\xbd\xb8"] ::msgcat::mcset ja {Symbol} [encoding convertfrom euc-jp "\xb5\xad\xb9\xe6"] ::msgcat::mcset ja {Tab-Separated-Value} [encoding convertfrom euc-jp "\xa5\xbf\xa5\xd6\xca\xac\xb3\xe4\xb5\xad\xcb\xa1"] ::msgcat::mcset ja {Table} ::msgcat::mcset ja {Tabloid} [encoding convertfrom euc-jp "\xa5\xbf\xa5\xd6\xa5\xed\xa5\xa4\xa5\xc9"] ::msgcat::mcset ja {Tag Color} ::msgcat::mcset ja {Task} ::msgcat::mcset ja {Template} [encoding convertfrom euc-jp "\xbf\xf7\xb7\xc1"] ::msgcat::mcset ja {Text Font} ::msgcat::mcset ja {Text} [encoding convertfrom euc-jp "\xca\xb8\xbb\xfa"] ::msgcat::mcset ja {Then} [encoding convertfrom euc-jp "\xa4\xca\xa4\xe9"] ::msgcat::mcset ja {Thickness} [encoding convertfrom euc-jp "\xc2\xc0\xa4\xb5"] ::msgcat::mcset ja {This analysis task is already running. Do you wish to kill it?} [encoding convertfrom euc-jp "\xa4\xb3\xa4\xce\xb2\xf2\xc0\xcf\xa5\xbf\xa5\xb9\xa5\xaf\xa4\xcf\xa4\xb9\xa4\xc7\xa4\xcb\xbc\xc2\xb9\xd4\xc3\xe6\xa4\xc7\xa4\xb9\xa1\xa3\xc3\xe6\xc3\xc7\xa4\xb7\xa4\xde\xa4\xb9\xa4\xab\x3f"] ::msgcat::mcset ja {This function is not available.} ::msgcat::mcset ja {This function is not currently supported for this port.} ::msgcat::mcset ja {Tickmarks} [encoding convertfrom euc-jp "\xcc\xdc\xc0\xb9\xa4\xea"] ::msgcat::mcset ja {Tile Frames} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xf2\xca\xc2\xa4\xd9\xa4\xeb"] ::msgcat::mcset ja {Tile Parameters} [encoding convertfrom euc-jp "\xca\xc2\xa4\xd9\xca\xfd\xa4\xce\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Tile} [encoding convertfrom euc-jp "\xca\xc2\xa4\xd9\xa4\xc6\xc9\xbd\xbc\xa8"] ::msgcat::mcset ja {Times} ::msgcat::mcset ja {Title} [encoding convertfrom euc-jp "\xa5\xbf\xa5\xa4\xa5\xc8\xa5\xeb"] ::msgcat::mcset ja {Tophat} [encoding convertfrom euc-jp "\xa5\xc8\xa5\xc3\xa5\xd7\xa5\xcf\xa5\xc3\xa5\xc8"] ::msgcat::mcset ja {Topographic} ::msgcat::mcset ja {Top} ::msgcat::mcset ja {To} ::msgcat::mcset ja {Transparency} [encoding convertfrom euc-jp "\xc6\xa9\xcc\xc0"] ::msgcat::mcset ja {Triangle} ::msgcat::mcset ja {Type} [encoding convertfrom euc-jp "\xbc\xef\xce\xe0"] ::msgcat::mcset ja {URL} ::msgcat::mcset ja {Unable to connect directly: using Web Proxy} ::msgcat::mcset ja {Unable to determine date of observation} ::msgcat::mcset ja {Unable to determine time of observation} ::msgcat::mcset ja {Unable to evaluate filter} [encoding convertfrom euc-jp "\xb9\xca\xa4\xea\xb9\xfe\xa4\xdf\xbe\xf2\xb7\xef\xa4\xac\xc9\xbe\xb2\xc1\xa4\xc7\xa4\xad\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3"] ::msgcat::mcset ja {Unable to find SIAP window} ::msgcat::mcset ja {Unable to find URL column} ::msgcat::mcset ja {Unable to find catalog window} [encoding convertfrom euc-jp "\xa5\xab\xa5\xbf\xa5\xed\xa5\xb0\xa5\xa6\xa5\xa3\xa5\xf3\xa5\xc9\xa5\xa6\xa4\xac\xb8\xab\xa4\xc4\xa4\xab\xa4\xea\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3"] ::msgcat::mcset ja {Unable to find plot window} [encoding convertfrom euc-jp "\xa5\xd7\xa5\xed\xa5\xc3\xa5\xc8\xa5\xa6\xa5\xa3\xa5\xf3\xa5\xc9\xa5\xa6\xa4\xac\xb8\xab\xa4\xc4\xa4\xab\xa4\xea\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3"] ::msgcat::mcset ja {Unable to load RGB image into a non-rgb frame} [encoding convertfrom euc-jp "\x52\x42\x47\xa5\xa4\xa5\xe1\xa1\xbc\xa5\xb8\xa4\xf2\xc8\xf3\x52\x47\x42\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xcb\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xe1\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3"] ::msgcat::mcset ja {Unable to load region file} [encoding convertfrom euc-jp "\xce\xce\xb0\xe8\xa5\xd5\xa5\xa1\xa5\xa4\xa5\xeb\xa4\xf2\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xe1\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3"] ::msgcat::mcset ja {Unable to load} [encoding convertfrom euc-jp "\xc6\xc9\xa4\xdf\xb9\xfe\xa4\xe1\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3"] ::msgcat::mcset ja {Unable to locate URL} [encoding convertfrom euc-jp "\x55\x52\x4c\xa4\xf2\xc6\xc3\xc4\xea\xa4\xc7\xa4\xad\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3"] ::msgcat::mcset ja {Unable to match target with XPA Mime request} ::msgcat::mcset ja {Unable to open file} [encoding convertfrom euc-jp "\xa5\xd5\xa5\xa1\xa5\xa4\xa5\xeb\xa4\xf2\xb3\xab\xa4\xb1\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3"] ::msgcat::mcset ja {Unable to process Analysis file} ::msgcat::mcset ja {Unable to save RGB image from a non-rgb frame} ::msgcat::mcset ja {Undo} [encoding convertfrom euc-jp "\xa4\xe4\xa4\xea\xc4\xbe\xa4\xb7"] ::msgcat::mcset ja {Unique} ::msgcat::mcset ja {Unists} ::msgcat::mcset ja {Units} [encoding convertfrom euc-jp "\xc3\xb1\xb0\xcc"] ::msgcat::mcset ja {Unknown Colormap} [encoding convertfrom euc-jp "\xa5\xb5\xa5\xdd\xa1\xbc\xa5\xc8\xa4\xb5\xa4\xec\xa4\xca\xa4\xa4\xc7\xdb\xbf\xa7"] ::msgcat::mcset ja {Unknown command} [encoding convertfrom euc-jp "\xa5\xb5\xa5\xdd\xa1\xbc\xa5\xc8\xa4\xb5\xa4\xec\xa4\xca\xa4\xa4\xa5\xb3\xa5\xde\xa5\xf3\xa5\xc9"] ::msgcat::mcset ja {Update Filter} [encoding convertfrom euc-jp "\xb8\xa1\xba\xf7\xbe\xf2\xb7\xef\xa4\xf2\xb9\xb9\xbf\xb7"] ::msgcat::mcset ja {Update Group} [encoding convertfrom euc-jp "\xa5\xb0\xa5\xeb\xa1\xbc\xa5\xd7\xa4\xf2\xb9\xb9\xbf\xb7"] ::msgcat::mcset ja {Update from Current Crosshair} [encoding convertfrom euc-jp "\xb8\xbd\xba\xdf\xa4\xce\xbd\xbd\xbb\xfa\xa5\xab\xa1\xbc\xa5\xbd\xa5\xeb\xb0\xcc\xc3\xd6\xa4\xab\xa4\xe9\xb9\xb9\xbf\xb7"] ::msgcat::mcset ja {Update from Current Frame} [encoding convertfrom euc-jp "\xb8\xbd\xba\xdf\xa4\xce\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xab\xa4\xe9\xb9\xb9\xbf\xb7"] ::msgcat::mcset ja {Update} [encoding convertfrom euc-jp "\xb9\xb9\xbf\xb7"] ::msgcat::mcset ja {Upper Left Back} ::msgcat::mcset ja {Upper Left Front} ::msgcat::mcset ja {Upper Right Back} ::msgcat::mcset ja {Upper Right Front} ::msgcat::mcset ja {Use Authentication} [encoding convertfrom euc-jp "\xc7\xa7\xbe\xda\xa4\xf2\xbb\xc8\xcd\xd1"] ::msgcat::mcset ja {Use Current Frame on Download} [encoding convertfrom euc-jp "\xa5\xc0\xa5\xa6\xa5\xf3\xa5\xed\xa1\xbc\xa5\xc9\xbb\xfe\xa4\xcb\xc1\xaa\xc2\xf2\xc3\xe6\xa4\xce\xa5\xd5\xa5\xec\xa1\xbc\xa5\xe0\xa4\xf2\xbb\xc8\xcd\xd1"] ::msgcat::mcset ja {Use Internal Web Browser} [encoding convertfrom euc-jp "\xc6\xe2\xc9\xf4\xa5\xd6\xa5\xe9\xa5\xa6\xa5\xb6\xa4\xf2\xbb\xc8\xcd\xd1"] ::msgcat::mcset ja {Use Proxy} [encoding convertfrom euc-jp "\xa5\xd7\xa5\xed\xa5\xad\xa5\xb7\xa4\xf2\xbb\xc8\xcd\xd1"] ::msgcat::mcset ja {User Manual} [encoding convertfrom euc-jp "\xa5\xe6\xa1\xbc\xa5\xb6\xa1\xbc\xa5\xde\xa5\xcb\xa5\xe5\xa5\xa2\xa5\xeb"] ::msgcat::mcset ja {Username} [encoding convertfrom euc-jp "\xa5\xe6\xa1\xbc\xa5\xb6\xa1\xbc\xcc\xbe"] ::msgcat::mcset ja {User} [encoding convertfrom euc-jp "\xa5\xe6\xa1\xbc\xa5\xb6\xa1\xbc"] ::msgcat::mcset ja {Use} [encoding convertfrom euc-jp "\xbb\xc8\xcd\xd1"] ::msgcat::mcset ja {VO Server} ::msgcat::mcset ja {VO} [encoding convertfrom euc-jp "\xb2\xbe\xc1\xdb\xc5\xb7\xca\xb8\xc2\xe6"] ::msgcat::mcset ja {Value} [encoding convertfrom euc-jp "\xc3\xcd"] ::msgcat::mcset ja {Vector} [encoding convertfrom euc-jp "\xa5\xd9\xa5\xaf\xa5\xc8\xa5\xeb"] ::msgcat::mcset ja {Vertical Graph} [encoding convertfrom euc-jp "\xbd\xc4\xc3\xc7\xcc\xcc"] ::msgcat::mcset ja {Vertical Layout} [encoding convertfrom euc-jp "\xb2\xe8\xcc\xcc\xa4\xce\xba\xb8\xa4\xcb\xc7\xdb\xc3\xd6"] ::msgcat::mcset ja {Vertical Text} ::msgcat::mcset ja {Vertical} ::msgcat::mcset ja {View} [encoding convertfrom euc-jp "\xc9\xbd\xbc\xa8"] ::msgcat::mcset ja {Virtual Observatory} [encoding convertfrom euc-jp "\xb2\xbe\xc1\xdb\xc5\xb7\xca\xb8\xc2\xe6"] ::msgcat::mcset ja {WCS Parameters} ::msgcat::mcset ja {WCS} ::msgcat::mcset ja {Wavelength} [encoding convertfrom euc-jp "\xc7\xc8\xc4\xb9"] ::msgcat::mcset ja {Web Browser} [encoding convertfrom euc-jp "\xa5\xd6\xa5\xe9\xa5\xa6\xa5\xb6"] ::msgcat::mcset ja {White} [encoding convertfrom euc-jp "\xc7\xf2\xbf\xa7"] ::msgcat::mcset ja {Width} [encoding convertfrom euc-jp "\xc9\xfd"] ::msgcat::mcset ja {Window} ::msgcat::mcset ja {Words matching title, description} ::msgcat::mcset ja {X Axis Title} ::msgcat::mcset ja {X Grid} ::msgcat::mcset ja {XPA Information} [encoding convertfrom euc-jp "\x58\x50\x41\xa4\xce\xbe\xf0\xca\xf3"] ::msgcat::mcset ja {XPA not initialized} [encoding convertfrom euc-jp "\x58\x50\x41\x20\xa4\xac\xbd\xe9\xb4\xfc\xb2\xbd\xa4\xb5\xa4\xec\xa4\xc6\xa4\xa4\xa4\xde\xa4\xbb\xa4\xf3\xa1\xa3"] ::msgcat::mcset ja {XPA unable to verify hostname, setting XPA_METHOD to LOCAL} ::msgcat::mcset ja {XPA} [encoding convertfrom euc-jp "\x58\x50\x41"] ::msgcat::mcset ja {X} ::msgcat::mcset ja {Y Axis Title} ::msgcat::mcset ja {Y Grid} ::msgcat::mcset ja {Yellow} [encoding convertfrom euc-jp "\xb2\xab\xbf\xa7"] ::msgcat::mcset ja {Y} ::msgcat::mcset ja {Z Axis Scale} ::msgcat::mcset ja {ZScale Parameters} [encoding convertfrom euc-jp "\x5a\xa5\xb9\xa5\xb1\xa1\xbc\xa5\xeb\xa4\xce\xc0\xdf\xc4\xea"] ::msgcat::mcset ja {Zero} [encoding convertfrom euc-jp "\xce\xed"] ::msgcat::mcset ja {Zoom Fit} ::msgcat::mcset ja {Zoom In} [encoding convertfrom euc-jp "\xb3\xc8\xc2\xe7"] ::msgcat::mcset ja {Zoom Out} [encoding convertfrom euc-jp "\xbd\xcc\xbe\xae"] ::msgcat::mcset ja {Zoom} [encoding convertfrom euc-jp "\xa5\xba\xa1\xbc\xa5\xe0"] ::msgcat::mcset ja {and} ::msgcat::mcset ja {blue} ::msgcat::mcset ja {b} ::msgcat::mcset ja {color} ::msgcat::mcset ja {cool} ::msgcat::mcset ja {green} ::msgcat::mcset ja {grey} ::msgcat::mcset ja {g} ::msgcat::mcset ja {h5utils} ::msgcat::mcset ja {heat} ::msgcat::mcset ja {not} ::msgcat::mcset ja {only} ::msgcat::mcset ja {or center of data} [encoding convertfrom euc-jp "\xa4\xe2\xa4\xb7\xa4\xaf\xa4\xcf\xa5\xc7\xa1\xbc\xa5\xbf\xa4\xce\xc3\xe6\xbf\xb4"] ::msgcat::mcset ja {rainbow} ::msgcat::mcset ja {red} ::msgcat::mcset ja {rows of data have been downloaded. More may be available. You may wish to adjust the maximum allowed} [encoding convertfrom euc-jp "\xb9\xd4\xa4\xce\xa5\xc7\xa1\xbc\xa5\xbf\xa4\xac\xa5\xc0\xa5\xa6\xa5\xf3\xa5\xed\xa1\xbc\xa5\xc9\xa4\xb5\xa4\xec\xa4\xde\xa4\xb7\xa4\xbf\xa1\xa3\xa4\xb5\xa4\xe9\xa4\xcb\xa5\xc0\xa5\xa6\xa5\xf3\xa5\xed\xa1\xbc\xa5\xc9\xa4\xb9\xa4\xeb\xbe\xec\xb9\xe7\xa4\xcf\xa1\xa2\xba\xc7\xc2\xe7\xb9\xd4\xbf\xf4\xa4\xf2\xc0\xdf\xc4\xea\xa4\xb7\xa4\xca\xa4\xaa\xa4\xb7\xa4\xc6\xa4\xaf\xa4\xc0\xa4\xb5\xa4\xa4\xa1\xa3"] ::msgcat::mcset ja {r} ::msgcat::mcset ja {staircase} ::msgcat::mcset ja {standard} ::msgcat::mcset ja {x} ::msgcat::mcset ja {} saods9/ds9/msgs/pt.msg000644 000765 000000 00000120316 12741217134 015174 0ustar00joyewheel000000 000000 ::msgcat::mcset pt {2D} ::msgcat::mcset pt {3D} ::msgcat::mcset pt {A postscript generation error has occurred} {Um erro ocorreu ao gerar o postscript} ::msgcat::mcset pt {AIP} ::msgcat::mcset pt {Abort} ::msgcat::mcset pt {About SAOImage DS9} {Sobre o SAOImage DS9} ::msgcat::mcset pt {About} {Sobre} ::msgcat::mcset pt {Acknowledgment} [encoding convertfrom iso8859-1 {Créditos}] ::msgcat::mcset pt {Add} {Adicionar} ::msgcat::mcset pt {Advanced} [encoding convertfrom iso8859-1 {Avançado}] ::msgcat::mcset pt {Aligned} ::msgcat::mcset pt {Align} {Alinhar} ::msgcat::mcset pt {All Columns} {Todas as colunas} ::msgcat::mcset pt {All Rows} {Todas as linhas} ::msgcat::mcset pt {All} {Tudo} ::msgcat::mcset pt {Always save files during Backup} ::msgcat::mcset pt {Amplifier} {Aplificador} ::msgcat::mcset pt {An error has occurred during backup} ::msgcat::mcset pt {An error has occurred during restore} ::msgcat::mcset pt {An error has occurred invoking the Analysis task} [encoding convertfrom iso8859-1 {Um erro ocorreu ao chamar a tarefa de Análise}] ::msgcat::mcset pt {An error has occurred while creating image.} ::msgcat::mcset pt {An error has occurred while creating the image. Please be sure that the ds9 window is in the upper left corner of the default screen and the entire window is visible.} ::msgcat::mcset pt {An error has occurred while creating the image. Please be sure that the entire image window is visible on the screen.} ::msgcat::mcset pt {An error has occurred while printing} {Um erro ocorreu ao imprimir} ::msgcat::mcset pt {An error has occurred while reading image.} ::msgcat::mcset pt {An error has occurred while saving} {Um erro ocorreu ao salvar} ::msgcat::mcset pt {An error has occurred while updating VO server list} ::msgcat::mcset pt {An error has occurred while writing image.} ::msgcat::mcset pt {An internal error has been detected} ::msgcat::mcset pt {Analysis Command Log} [encoding convertfrom iso8859-1 {Registro de Comandos de Análise}] ::msgcat::mcset pt {Analysis Commands} ::msgcat::mcset pt {Analysis File} ::msgcat::mcset pt {Analysis Log} ::msgcat::mcset pt {Analysis} [encoding convertfrom iso8859-1 {Análise}] ::msgcat::mcset pt {Angle Complement} [encoding convertfrom iso8859-1 {Complemento do ângulo}] ::msgcat::mcset pt {Angles} [encoding convertfrom iso8859-1 {Ângulos}] ::msgcat::mcset pt {Angle} [encoding convertfrom iso8859-1 {Ângulo}] ::msgcat::mcset pt {Annuli} {Annuli} ::msgcat::mcset pt {Annulus} {Annulus} ::msgcat::mcset pt {Apply} {Aplicar} ::msgcat::mcset pt {ArcMin} ::msgcat::mcset pt {ArcSec} ::msgcat::mcset pt {Architecture} {Arquitetura} ::msgcat::mcset pt {Archives} ::msgcat::mcset pt {Array} ::msgcat::mcset pt {Arrow} {Seta} ::msgcat::mcset pt {Astronomy} ::msgcat::mcset pt {At Startup} ::msgcat::mcset pt {At least 2 different catalogs are required} ::msgcat::mcset pt {Auto Centroid} ::msgcat::mcset pt {Auto Plot 2D} ::msgcat::mcset pt {Auto Plot 3D} ::msgcat::mcset pt {Auto Plot Statistics} ::msgcat::mcset pt {Auto Plot} ::msgcat::mcset pt {Autoload FITS Regions} [encoding convertfrom iso8859-1 {Auto-carregar regiões FITS}] ::msgcat::mcset pt {Autoload} ::msgcat::mcset pt {Automatic} [encoding convertfrom iso8859-1 {Automático}] ::msgcat::mcset pt {Average} [encoding convertfrom iso8859-1 {Média}] ::msgcat::mcset pt {Axes Number} ::msgcat::mcset pt {Axes Order} ::msgcat::mcset pt {Axes Title} ::msgcat::mcset pt {Axes} {Eixos} ::msgcat::mcset pt {Axis Length} {Tamanho do eixo} ::msgcat::mcset pt {Axis Numbers} [encoding convertfrom iso8859-1 {Numeração do eixo}] ::msgcat::mcset pt {Axis Title} ::msgcat::mcset pt {Axis} {Eixo} ::msgcat::mcset pt {Azimuth} ::msgcat::mcset pt {Background Color} {Cor de fundo} ::msgcat::mcset pt {Background} {Fundo} ::msgcat::mcset pt {Backup} ::msgcat::mcset pt {Back} {Anterior} ::msgcat::mcset pt {Bar Plot Tool} ::msgcat::mcset pt {Bias} ::msgcat::mcset pt {Bin 3rd Column} {Bin terceira coluna} ::msgcat::mcset pt {Bin Center} {Centro do Bin} ::msgcat::mcset pt {Bin Columns} {Binar colunas} ::msgcat::mcset pt {Bin Filter} {Filtro do Bin} ::msgcat::mcset pt {Bin Fit} ::msgcat::mcset pt {Bin In} ::msgcat::mcset pt {Bin Out} ::msgcat::mcset pt {Binning Parameters} [encoding convertfrom iso8859-1 {Parâmetros de Binning}] ::msgcat::mcset pt {Bin} ::msgcat::mcset pt {Black} {Preto} ::msgcat::mcset pt {Blank/Inf/NaN Color} {Cor Preto/Inf/NaN} ::msgcat::mcset pt {Blink Frames} {Blinkar quadros} ::msgcat::mcset pt {Blink Interval} {Intervalo de Blink} ::msgcat::mcset pt {Blink} ::msgcat::mcset pt {Block Fit} ::msgcat::mcset pt {Block In} {Bin em} ::msgcat::mcset pt {Block Out} {Bin partir} ::msgcat::mcset pt {Block Parameters} ::msgcat::mcset pt {Block} {Bin} ::msgcat::mcset pt {Blue} {Azul} ::msgcat::mcset pt {Bold} {Negrito} ::msgcat::mcset pt {Border} {Borda} ::msgcat::mcset pt {Bottom} ::msgcat::mcset pt {Box Annulus} {Annulus da Caixa} ::msgcat::mcset pt {Box Panda} {Panda Caixa} ::msgcat::mcset pt {BoxCircle} ::msgcat::mcset pt {Boxcar} ::msgcat::mcset pt {Box} {Caixa} ::msgcat::mcset pt {Broadcast} ::msgcat::mcset pt {Browser} ::msgcat::mcset pt {Browse} {Navegar} ::msgcat::mcset pt {Buffer} ::msgcat::mcset pt {Buttonbar} ::msgcat::mcset pt {Buttons} {Botoes} ::msgcat::mcset pt {Bytes} ::msgcat::mcset pt {CMYK} ::msgcat::mcset pt {Can Delete} {Pode Apagar} ::msgcat::mcset pt {Can Edit} {Pode Editar} ::msgcat::mcset pt {Can Move} {Pode Mover} ::msgcat::mcset pt {Can Rotate} {Pode Rodar} ::msgcat::mcset pt {Cancelled} ::msgcat::mcset pt {Cancel} {Cancelar} ::msgcat::mcset pt {Cap} ::msgcat::mcset pt {Catalog Server} [encoding convertfrom iso8859-1 {Servidor do Catálogo}] ::msgcat::mcset pt {Catalog Tool} [encoding convertfrom iso8859-1 {Ferramenta de Catálogos}] ::msgcat::mcset pt {Catalogs} [encoding convertfrom iso8859-1 {Catálogos}] ::msgcat::mcset pt {Catalog} [encoding convertfrom iso8859-1 {Catálogo}] ::msgcat::mcset pt {Catrom} ::msgcat::mcset pt {Cat} ::msgcat::mcset pt {Center Image} {Centralizar Imagem} ::msgcat::mcset pt {Center Non-modal Dialogs} ::msgcat::mcset pt {Center} {Centro} ::msgcat::mcset pt {Centroid Parameters} ::msgcat::mcset pt {Centroid} ::msgcat::mcset pt {Circle} {Circulo} ::msgcat::mcset pt {Clear All} {Limpar tudo} ::msgcat::mcset pt {Clear Analysis Commands} [encoding convertfrom iso8859-1 {Limpar Comandos de Análise}] ::msgcat::mcset pt {Clear Cache} {Limpar cache} ::msgcat::mcset pt {Clear Data} {Limpar dados} ::msgcat::mcset pt {Clear External Analysis Commands?} {Limpar Comandos de Análise Externos?} ::msgcat::mcset pt {Clear Filter} {Limpar Filtro} ::msgcat::mcset pt {Clear Frame} {Limpar Frame} ::msgcat::mcset pt {Clear Preferences?} [encoding convertfrom iso8859-1 {Limpar preferências?}] ::msgcat::mcset pt {Clear Preferences} [encoding convertfrom iso8859-1 {Limpar preferências}] ::msgcat::mcset pt {Clear} {Limpar} ::msgcat::mcset pt {Click to Center} {Clique para centralizar} ::msgcat::mcset pt {Close} {Fechar} ::msgcat::mcset pt {Colorbar Size} ::msgcat::mcset pt {Colorbar} {Barra de Cores} ::msgcat::mcset pt {Colormap Parameters} [encoding convertfrom iso8859-1 {Parâmetros do Mapa de Cores}] ::msgcat::mcset pt {Colormap} {Mapa de Cores} ::msgcat::mcset pt {Color} {Cor} ::msgcat::mcset pt {Columns} {Colunas} ::msgcat::mcset pt {Column} {Coluna} ::msgcat::mcset pt {Command not allowed} ::msgcat::mcset pt {Command} ::msgcat::mcset pt {Compass} {Compasso} ::msgcat::mcset pt {Composite Region} ::msgcat::mcset pt {Composite} ::msgcat::mcset pt {Compression} [encoding convertfrom iso8859-1 {Compressão}] ::msgcat::mcset pt {Configure} {Configurar} ::msgcat::mcset pt {Connect Directly} {Conectar diretamente} ::msgcat::mcset pt {Connect SAMP} ::msgcat::mcset pt {Connect Using Web Proxy} {Connectar usando Proxy Web} ::msgcat::mcset pt {Connect} ::msgcat::mcset pt {Console} ::msgcat::mcset pt {Contacting Image Server} ::msgcat::mcset pt {Contour Parameters} [encoding convertfrom iso8859-1 {Parâmetros de contorno}] ::msgcat::mcset pt {Contours} {Contornos} ::msgcat::mcset pt {Contour} ::msgcat::mcset pt {Contrast} {Contraste} ::msgcat::mcset pt {Convert to Polygons} [encoding convertfrom iso8859-1 {Converter para polígonos}] ::msgcat::mcset pt {Coordinate Grid Parameters} [encoding convertfrom iso8859-1 {Parâmetros do Grid de Coordenadas}] ::msgcat::mcset pt {Coordinate Grid} {Grid de Coordenadas} ::msgcat::mcset pt {Coordinate System} {Sistema de Coordenadas} ::msgcat::mcset pt {Coordinates} ::msgcat::mcset pt {Coordinate} {Coordenada} ::msgcat::mcset pt {Copy Contours} {Copiar Contornos} ::msgcat::mcset pt {Copy to Regions} [encoding convertfrom iso8859-1 {Copiar para Regiões}] ::msgcat::mcset pt {Copy} {Copiar} ::msgcat::mcset pt {Create Movie} ::msgcat::mcset pt {Create New Frame on Download} {Criar novo Frame ao carregar} ::msgcat::mcset pt {Create} ::msgcat::mcset pt {Crop Parameters} ::msgcat::mcset pt {Crop} ::msgcat::mcset pt {Crosshair Parameters} ::msgcat::mcset pt {Crosshair To} {Cruz para} ::msgcat::mcset pt {Crosshair} {Cruz} ::msgcat::mcset pt {Cross} {Cruz} ::msgcat::mcset pt {Cubehelix} ::msgcat::mcset pt {Cube} ::msgcat::mcset pt {Cubic} ::msgcat::mcset pt {Current Frame} {Frame atual} ::msgcat::mcset pt {Current Range} {Intervalo atual} ::msgcat::mcset pt {Current} {Atual} ::msgcat::mcset pt {Cursor} ::msgcat::mcset pt {Cut} {Cortar} ::msgcat::mcset pt {Cyan} {Ciano} ::msgcat::mcset pt {DPI} ::msgcat::mcset pt {DS9 has detected a newer version of a backup file and therefore will not process this file.} ::msgcat::mcset pt {DS9 has detected a newer version of a preferences file.} ::msgcat::mcset pt {DS9 has detected an older backup file, do you wish to continue?} ::msgcat::mcset pt {DS9 has detected an older preferences file, do you wish to update?} [encoding convertfrom iso8859-1 {O DS9 detectou um arquivo de preferências antigo, você deseja atualizar?}] ::msgcat::mcset pt {DS9 will complete the initialization process} [encoding convertfrom iso8859-1 {O DS9 completou o processo de inicialização}] ::msgcat::mcset pt {Dash} [encoding convertfrom iso8859-1 {Traço}] ::msgcat::mcset pt {Data Format} {Formato de dados} ::msgcat::mcset pt {Dataset Name} ::msgcat::mcset pt {Dataset} {Conjunto de dados} ::msgcat::mcset pt {Data} ::msgcat::mcset pt {Decrease} {Diminuir} ::msgcat::mcset pt {Default All Files} ::msgcat::mcset pt {Default Format} ::msgcat::mcset pt {Default Length} ::msgcat::mcset pt {Default} [encoding convertfrom iso8859-1 {Padrão}] ::msgcat::mcset pt {Degrees} {Graus} ::msgcat::mcset pt {Delete All Frames?} {Apagar todos Frames?} ::msgcat::mcset pt {Delete All Frames} {Apagar todos Frames} ::msgcat::mcset pt {Delete All Groups?} {Apagar todos os grupos?} ::msgcat::mcset pt {Delete All Groups} {Apagar todos os grupos} ::msgcat::mcset pt {Delete All Regions?} {Apagar todas as Regiões?} ::msgcat::mcset pt {Delete All Regions} {Apagar todas as Regiões} ::msgcat::mcset pt {Delete All} ::msgcat::mcset pt {Delete Color Tags} ::msgcat::mcset pt {Delete Frame} {Apague o Frame} ::msgcat::mcset pt {Delete Group} {Apague o Grupo} ::msgcat::mcset pt {Delete Selected Regions} [encoding convertfrom iso8859-1 {Apagar Regiões Selecionadas}] ::msgcat::mcset pt {Delete} {Apagar} ::msgcat::mcset pt {Depth} {Profundidade} ::msgcat::mcset pt {Detector} ::msgcat::mcset pt {Dialog Box} {Box de dialog} ::msgcat::mcset pt {Diamond} {Diamante} ::msgcat::mcset pt {Dimension} [encoding convertfrom iso8859-1 {Dimensão}] ::msgcat::mcset pt {Direction} ::msgcat::mcset pt {Disconnect} ::msgcat::mcset pt {Display Header} ::msgcat::mcset pt {Display Size} {Mostar tamanho} ::msgcat::mcset pt {Dissolve} ::msgcat::mcset pt {Distance} ::msgcat::mcset pt {Done} ::msgcat::mcset pt {Download Colormap} ::msgcat::mcset pt {Download VOTABLE format if available} ::msgcat::mcset pt {Drag to Center} {Arrate para centralizar} ::msgcat::mcset pt {Duplicate Data} ::msgcat::mcset pt {East} {Leste} ::msgcat::mcset pt {Ecliptic} {Ecliptico} ::msgcat::mcset pt {Edit Group Name} {Editar nome do Grupo} ::msgcat::mcset pt {Edit} {Editar} ::msgcat::mcset pt {Elevation} ::msgcat::mcset pt {Ellipse Annulus} ::msgcat::mcset pt {Ellipse Panda} ::msgcat::mcset pt {Ellipse} {Elipse} ::msgcat::mcset pt {Elliptical Annulus} {Annulus Elipse} ::msgcat::mcset pt {Elliptical Panda} [encoding convertfrom iso8859-1 {Panda Elíptico}] ::msgcat::mcset pt {Enable Confirmation Dialogs} {} ::msgcat::mcset pt {Enable} ::msgcat::mcset pt {End} {Fim} ::msgcat::mcset pt {Enter Color} ::msgcat::mcset pt {Enter Font Size} ::msgcat::mcset pt {Enter Group Name} {Entre o nome do Grupo} ::msgcat::mcset pt {Enter Search Expression} ::msgcat::mcset pt {Enter URL} ::msgcat::mcset pt {Entry} ::msgcat::mcset pt {Equal Area} [encoding convertfrom iso8859-1 {Área Igual}] ::msgcat::mcset pt {Equal Distance} [encoding convertfrom iso8859-1 {Distância Igual}] ::msgcat::mcset pt {Equal Spacing} ::msgcat::mcset pt {Equal Value} ::msgcat::mcset pt {Error code was returned} [encoding convertfrom iso8859-1 {Retornou código de erro}] ::msgcat::mcset pt {Error} {Erro} ::msgcat::mcset pt {Examine Frame} {Examinar Frame} ::msgcat::mcset pt {Examine} {Examinar} ::msgcat::mcset pt {Exam} ::msgcat::mcset pt {Exclude} {Excluir} ::msgcat::mcset pt {Exit} {Sair} ::msgcat::mcset pt {Export Array} ::msgcat::mcset pt {Export} ::msgcat::mcset pt {Extention} ::msgcat::mcset pt {Exterior Axes} {Eixos exteriores} ::msgcat::mcset pt {Exterior Numerics} [encoding convertfrom iso8859-1 {Numeração exterior}] ::msgcat::mcset pt {FAQ} ::msgcat::mcset pt {FK4} ::msgcat::mcset pt {FK5} ::msgcat::mcset pt {Factor} ::msgcat::mcset pt {File not Found or Unable to load FITS data MIME type} [encoding convertfrom iso8859-1 {Arquivo não encontrado ou incapaz de carregar dados FITS do tipo MIME}] ::msgcat::mcset pt {Filename} {Nome de Arquivo} ::msgcat::mcset pt {File} {Arquivo} ::msgcat::mcset pt {Fill} ::msgcat::mcset pt {Filter} {Filtro} ::msgcat::mcset pt {Find Next} [encoding convertfrom iso8859-1 {Encontrar próximo}] ::msgcat::mcset pt {Find} {Encontrado} ::msgcat::mcset pt {First Frame} ::msgcat::mcset pt {First} {Primeiro} ::msgcat::mcset pt {Fits} ::msgcat::mcset pt {Fixed in Size} {Fixa em tamanho} ::msgcat::mcset pt {Flat} ::msgcat::mcset pt {Flip} ::msgcat::mcset pt {Font} {Fonte} ::msgcat::mcset pt {For more information, use --help} ::msgcat::mcset pt {Format} {Formato} ::msgcat::mcset pt {Forward} {Frente} ::msgcat::mcset pt {Found} {Encontrado} ::msgcat::mcset pt {Frame Information} [encoding convertfrom iso8859-1 {Informação do Frame}] ::msgcat::mcset pt {Frame Parameters} ::msgcat::mcset pt {Frames} ::msgcat::mcset pt {Frame} {Frame} ::msgcat::mcset pt {From} ::msgcat::mcset pt {Front} {Frente} ::msgcat::mcset pt {Full Range} {Intervalo completo} ::msgcat::mcset pt {Function} [encoding convertfrom iso8859-1 {Função}] ::msgcat::mcset pt {GUI Font} ::msgcat::mcset pt {Galactic} [encoding convertfrom iso8859-1 {Galáctico}] ::msgcat::mcset pt {Gap} ::msgcat::mcset pt {Gaussian} {Gaussiano} ::msgcat::mcset pt {General} {Geral} ::msgcat::mcset pt {Generate} {Gerar} ::msgcat::mcset pt {Generating Regions} [encoding convertfrom iso8859-1 {Gerando regiões}] ::msgcat::mcset pt {Get Information} [encoding convertfrom iso8859-1 {Obter informações}] ::msgcat::mcset pt {Gist} ::msgcat::mcset pt {Global Properties} ::msgcat::mcset pt {Global} ::msgcat::mcset pt {Goto Frame} ::msgcat::mcset pt {Graph Horz} ::msgcat::mcset pt {Graph Vert} ::msgcat::mcset pt {Graphics} [encoding convertfrom iso8859-1 {Gráficos}] ::msgcat::mcset pt {Graphs} ::msgcat::mcset pt {Graph} [encoding convertfrom iso8859-1 {Gráfico}] ::msgcat::mcset pt {Grayscale} {Tons de cinza} ::msgcat::mcset pt {Green} {Verde} ::msgcat::mcset pt {Grid Gap} ::msgcat::mcset pt {Grid} {Grade} ::msgcat::mcset pt {Groove} ::msgcat::mcset pt {Groups} {Grupos} ::msgcat::mcset pt {HTTP} ::msgcat::mcset pt {Header} [encoding convertfrom iso8859-1 {Cabeçário}] ::msgcat::mcset pt {Height} {Altura} ::msgcat::mcset pt {Help Desk} {Centro de ajuda} ::msgcat::mcset pt {Help Me Choose} {Ajude-me escolher} ::msgcat::mcset pt {Help} {Ajuda} ::msgcat::mcset pt {Hide All} {Esconda tudo} ::msgcat::mcset pt {Highlite} ::msgcat::mcset pt {High} {Alto} ::msgcat::mcset pt {Histogram Equalization} [encoding convertfrom iso8859-1 {Equalização de Histograma}] ::msgcat::mcset pt {Histogram} {Histograma} ::msgcat::mcset pt {Horizontal Graph} [encoding convertfrom iso8859-1 {Gráfico Horizontal}] ::msgcat::mcset pt {Horizontal Layout} {Layout Horizontal} ::msgcat::mcset pt {Horizontal} ::msgcat::mcset pt {IAU Location Code} ::msgcat::mcset pt {ICRS} ::msgcat::mcset pt {Identification} [encoding convertfrom iso8859-1 {Identificação}] ::msgcat::mcset pt {If} {Se} ::msgcat::mcset pt {Image Servers} ::msgcat::mcset pt {Image} {Imagem} ::msgcat::mcset pt {Import Array} ::msgcat::mcset pt {Import} ::msgcat::mcset pt {Include} {Incluir} ::msgcat::mcset pt {Increase} {Aumento} ::msgcat::mcset pt {Information Panel} [encoding convertfrom iso8859-1 {Painel de informação}] ::msgcat::mcset pt {Information} [encoding convertfrom iso8859-1 {Informação}] ::msgcat::mcset pt {Initialize XPA} {Inicialize XPA} ::msgcat::mcset pt {Inner} {Interno} ::msgcat::mcset pt {Instrument FOV} {FOV do instrumento} ::msgcat::mcset pt {Interior Axes} {Eixos Interiores} ::msgcat::mcset pt {Interior Numerics} [encoding convertfrom iso8859-1 {Numeração Interior}] ::msgcat::mcset pt {Internal Parse Error} ::msgcat::mcset pt {Interval} {Intervalo} ::msgcat::mcset pt {Invalid Column Name} ::msgcat::mcset pt {Invalid formated multipart/mixed mime type message} [encoding convertfrom iso8859-1 {Mensagem tipo MIME multiparte/mista em formato inválido}] ::msgcat::mcset pt {Invert Colormap} {Inverter mapa de cores} ::msgcat::mcset pt {Invert Selection} [encoding convertfrom iso8859-1 {Inverter Seleção}] ::msgcat::mcset pt {Invert} {Inverter} ::msgcat::mcset pt {Italic} [encoding convertfrom iso8859-1 {Itálico}] ::msgcat::mcset pt {Items Found} [encoding convertfrom iso8859-1 {Ítens Encontrados}] ::msgcat::mcset pt {Iteration} ::msgcat::mcset pt {JPEG Quality Factor} {Fator de qualidade JPEG} ::msgcat::mcset pt {Keep-Alive} ::msgcat::mcset pt {Kernel} ::msgcat::mcset pt {Keyboard Shortcuts} {Atalhos do teclado} ::msgcat::mcset pt {Keyboard} {Teclado} ::msgcat::mcset pt {Keyword} ::msgcat::mcset pt {Labels} {Legendas} ::msgcat::mcset pt {Label} {Legenda} ::msgcat::mcset pt {Landscape} {Paisagem} ::msgcat::mcset pt {Language} [encoding convertfrom iso8859-1 {Língua}] ::msgcat::mcset pt {Last Frame} ::msgcat::mcset pt {Last} [encoding convertfrom iso8859-1 {Último}] ::msgcat::mcset pt {Layout Horz} ::msgcat::mcset pt {Layout Vert} ::msgcat::mcset pt {Layout} ::msgcat::mcset pt {Left} ::msgcat::mcset pt {Legal} ::msgcat::mcset pt {Legend Title} ::msgcat::mcset pt {Legend} ::msgcat::mcset pt {Length} {Comprimento} ::msgcat::mcset pt {Letter} {Carta} ::msgcat::mcset pt {Levels} [encoding convertfrom iso8859-1 {Níveis}] ::msgcat::mcset pt {Level} {Nível} ::msgcat::mcset pt {Limits} {Limiter} ::msgcat::mcset pt {Line Plot Tool} ::msgcat::mcset pt {Linear} ::msgcat::mcset pt {Line} {Linha} ::msgcat::mcset pt {List Data} ::msgcat::mcset pt {List Regions} [encoding convertfrom iso8859-1 {Listar Regiões}] ::msgcat::mcset pt {List} {Listar} ::msgcat::mcset pt {Load Analysis Commands} [encoding convertfrom iso8859-1 {Ler Comandos de Análise}] ::msgcat::mcset pt {Load Color Tags} ::msgcat::mcset pt {Load Colormap} {Carregar Mapa de Cores} ::msgcat::mcset pt {Load Configuration} [encoding convertfrom iso8859-1 {Carregar Configuração}] ::msgcat::mcset pt {Load Contour Levels} [encoding convertfrom iso8859-1 {Carregar Níveis de Contorno}] ::msgcat::mcset pt {Load Contours} {Carregar Contornos} ::msgcat::mcset pt {Load Contrast/Bias} {Carregar Contraste/Bias} ::msgcat::mcset pt {Load Data} {Carregar Dados} ::msgcat::mcset pt {Load Mosaic} {Carregar Mosaico} ::msgcat::mcset pt {Load Regions} [encoding convertfrom iso8859-1 {Carregar Regiões}] ::msgcat::mcset pt {Load Template} {Carregar Template} ::msgcat::mcset pt {Load into All Frames} ::msgcat::mcset pt {Load into Current Frame} ::msgcat::mcset pt {Loading Catalog} ::msgcat::mcset pt {Loading} ::msgcat::mcset pt {Load} {Carregar} ::msgcat::mcset pt {Local} ::msgcat::mcset pt {Lock Axes} ::msgcat::mcset pt {Lock Bin} ::msgcat::mcset pt {Lock Color} ::msgcat::mcset pt {Lock Crop Amplifier} ::msgcat::mcset pt {Lock Crop Detector} ::msgcat::mcset pt {Lock Crop Image} ::msgcat::mcset pt {Lock Crop None} ::msgcat::mcset pt {Lock Crop Physical} ::msgcat::mcset pt {Lock Crop WCS} ::msgcat::mcset pt {Lock Crosshair Amplifier} ::msgcat::mcset pt {Lock Crosshair Detector} ::msgcat::mcset pt {Lock Crosshair Image} ::msgcat::mcset pt {Lock Crosshair None} ::msgcat::mcset pt {Lock Crosshair Physical} ::msgcat::mcset pt {Lock Crosshair WCS} ::msgcat::mcset pt {Lock Frame Amplifier} ::msgcat::mcset pt {Lock Frame Detector} ::msgcat::mcset pt {Lock Frame Image} ::msgcat::mcset pt {Lock Frame None} ::msgcat::mcset pt {Lock Frame Physical} ::msgcat::mcset pt {Lock Frame WCS} ::msgcat::mcset pt {Lock Limits} ::msgcat::mcset pt {Lock Scale} ::msgcat::mcset pt {Lock Slice Image} ::msgcat::mcset pt {Lock Slice None} ::msgcat::mcset pt {Lock Slice WCS} ::msgcat::mcset pt {Lock Smooth} ::msgcat::mcset pt {Lock} {Travar} ::msgcat::mcset pt {Log Exponent} ::msgcat::mcset pt {Log} ::msgcat::mcset pt {Low High} {Baixo Alto} ::msgcat::mcset pt {Lower Left Back} ::msgcat::mcset pt {Lower Left Front} ::msgcat::mcset pt {Lower Right Back} ::msgcat::mcset pt {Lower Right Front} ::msgcat::mcset pt {Low} {Baixo} ::msgcat::mcset pt {MIP} ::msgcat::mcset pt {Magenta} {Magenta} ::msgcat::mcset pt {Magnification} ::msgcat::mcset pt {Magnifier} {Lente} ::msgcat::mcset pt {Major} ::msgcat::mcset pt {Manual} ::msgcat::mcset pt {Mask Parameters} [encoding convertfrom iso8859-1 {Parâmetros da máscara}] ::msgcat::mcset pt {Match Axes} ::msgcat::mcset pt {Match Bin} ::msgcat::mcset pt {Match Catalog requires at least 1 row per catalog} ::msgcat::mcset pt {Match Color} ::msgcat::mcset pt {Match Crop Amplifier} ::msgcat::mcset pt {Match Crop Detector} ::msgcat::mcset pt {Match Crop Image} ::msgcat::mcset pt {Match Crop Physical} ::msgcat::mcset pt {Match Crop WCS} ::msgcat::mcset pt {Match Crosshair Amplifier} ::msgcat::mcset pt {Match Crosshair Detector} ::msgcat::mcset pt {Match Crosshair Image} ::msgcat::mcset pt {Match Crosshair Physical} ::msgcat::mcset pt {Match Crosshair WCS} ::msgcat::mcset pt {Match Frame Amplifier} ::msgcat::mcset pt {Match Frame Detector} ::msgcat::mcset pt {Match Frame Image} ::msgcat::mcset pt {Match Frame Physical} ::msgcat::mcset pt {Match Frame WCS} ::msgcat::mcset pt {Match Limits} ::msgcat::mcset pt {Match Scale} ::msgcat::mcset pt {Match Slice Image} ::msgcat::mcset pt {Match Slice WCS} ::msgcat::mcset pt {Match Smooth} ::msgcat::mcset pt {Match} ::msgcat::mcset pt {Math Function} [encoding convertfrom iso8859-1 {Função Matemática}] ::msgcat::mcset pt {Matplotlib} ::msgcat::mcset pt {Max Rows} [encoding convertfrom iso8859-1 {Máximas linhas}] ::msgcat::mcset pt {Maximum} ::msgcat::mcset pt {Max} [encoding convertfrom iso8859-1 {Máximo}] ::msgcat::mcset pt {Menus and Buttons} ::msgcat::mcset pt {Menu} ::msgcat::mcset pt {Message Log} ::msgcat::mcset pt {Method} [encoding convertfrom iso8859-1 {Método}] ::msgcat::mcset pt {Min Max Parameters} ::msgcat::mcset pt {Min Max} [encoding convertfrom iso8859-1 {Min Máx}] ::msgcat::mcset pt {Minimum} ::msgcat::mcset pt {Minor} {Menor} ::msgcat::mcset pt {Minutes} ::msgcat::mcset pt {Min} ::msgcat::mcset pt {Mission} [encoding convertfrom iso8859-1 {Missão}] ::msgcat::mcset pt {Mode} ::msgcat::mcset pt {Mosaic IRAF Segment} ::msgcat::mcset pt {Mosaic IRAF} ::msgcat::mcset pt {Mosaic WCS Segment} ::msgcat::mcset pt {Mosaic WCS} ::msgcat::mcset pt {Mosaic WFPC2} ::msgcat::mcset pt {Mosaic} ::msgcat::mcset pt {Mouse Click Epsilon} ::msgcat::mcset pt {Mouse Wheel Bin} ::msgcat::mcset pt {Mouse Wheel Zoom} ::msgcat::mcset pt {Mouse and Keyboard} ::msgcat::mcset pt {Move Back} ::msgcat::mcset pt {Move First} ::msgcat::mcset pt {Move Forward} ::msgcat::mcset pt {Move Frame} ::msgcat::mcset pt {Move Last} ::msgcat::mcset pt {Move to Back} [encoding convertfrom iso8859-1 {Move para trás}] ::msgcat::mcset pt {Move to Front} {Mover para frente} ::msgcat::mcset pt {Movie} ::msgcat::mcset pt {Multiple Extension Cube} ::msgcat::mcset pt {Multiple Extension Frames} ::msgcat::mcset pt {Multiple WCS} {Multiplos WCS} ::msgcat::mcset pt {NRRD} ::msgcat::mcset pt {Name Resolution} {Resolver o Nome} ::msgcat::mcset pt {Name Server} {Servidor de Nomes} ::msgcat::mcset pt {Name or Designation} [encoding convertfrom iso8859-1 {Nome ou designação}] ::msgcat::mcset pt {Name} ::msgcat::mcset pt {Native Dialog} {Dialog Nativo} ::msgcat::mcset pt {New Features} {Novo} ::msgcat::mcset pt {New Frame 3D} ::msgcat::mcset pt {New Frame RGB} {Novo Frame RGB} ::msgcat::mcset pt {New Frame each Time} ::msgcat::mcset pt {New Frame} {Novo frame} ::msgcat::mcset pt {New Group} {Novo grupo} ::msgcat::mcset pt {New} {Novo} ::msgcat::mcset pt {Next Frame} ::msgcat::mcset pt {Next} [encoding convertfrom iso8859-1 {Próximo}] ::msgcat::mcset pt {No Catalog specified} [encoding convertfrom iso8859-1 {Nenhum catálogo especificado}] ::msgcat::mcset pt {No Data Available} ::msgcat::mcset pt {No Items Found} [encoding convertfrom iso8859-1 {Nenhum ítem encontrado}] ::msgcat::mcset pt {No current frame} ::msgcat::mcset pt {Non-zero} ::msgcat::mcset pt {None} {Nenhum} ::msgcat::mcset pt {Normal} ::msgcat::mcset pt {North} {Norte} ::msgcat::mcset pt {Not Found} ::msgcat::mcset pt {Not Supported} ::msgcat::mcset pt {Number of Samples} ::msgcat::mcset pt {Number of Threads} ::msgcat::mcset pt {Number of Ticks} ::msgcat::mcset pt {Number} [encoding convertfrom iso8859-1 {Número}] ::msgcat::mcset pt {Numerics} ::msgcat::mcset pt {OK} ::msgcat::mcset pt {Object} {Objeto} ::msgcat::mcset pt {Open File} {Abrir Arquivo} ::msgcat::mcset pt {Open TCL Console} ::msgcat::mcset pt {Open URL} {Abrir URL} ::msgcat::mcset pt {Open as} ::msgcat::mcset pt {Open} {Abrir} ::msgcat::mcset pt {Operator} {Operador} ::msgcat::mcset pt {Orientation} [encoding convertfrom iso8859-1 {Orientação}] ::msgcat::mcset pt {Origin} ::msgcat::mcset pt {Oscillate} ::msgcat::mcset pt {Other Color} ::msgcat::mcset pt {Other Font Size} ::msgcat::mcset pt {Other} {Outro} ::msgcat::mcset pt {Outer} {Fora} ::msgcat::mcset pt {Overlap} ::msgcat::mcset pt {PS Page Setup} ::msgcat::mcset pt {PS Print} ::msgcat::mcset pt {Page Setup} [encoding convertfrom iso8859-1 {Configuracoes de página}] ::msgcat::mcset pt {Page Source} [encoding convertfrom iso8859-1 {Fonte da página}] ::msgcat::mcset pt {Pan To} ::msgcat::mcset pt {Pan Zoom Rotate Parameters} ::msgcat::mcset pt {Pan Zoom} ::msgcat::mcset pt {Pan then Zoom} ::msgcat::mcset pt {Panda} {Panda} ::msgcat::mcset pt {Panner} ::msgcat::mcset pt {Pan} ::msgcat::mcset pt {Parameters} [encoding convertfrom iso8859-1 {Parâmetros}] ::msgcat::mcset pt {Password} {Senha} ::msgcat::mcset pt {Paste Contours} {Colar Contornos} ::msgcat::mcset pt {Paste} {Colar} ::msgcat::mcset pt {Physical} [encoding convertfrom iso8859-1 {Físico}] ::msgcat::mcset pt {Pixel Distribution} [encoding convertfrom iso8859-1 {Distribuição de Pixels}] ::msgcat::mcset pt {Pixel Size} {Tamanho do Pixel} ::msgcat::mcset pt {Pixel Table} {Tabela de Pixels} ::msgcat::mcset pt {Pixels} ::msgcat::mcset pt {Play} {Execute} ::msgcat::mcset pt {Please Select a Region} ::msgcat::mcset pt {Please change the file's permission to disable other users write access. Use anyway?} ::msgcat::mcset pt {Please specify width, height, and either name or (ra,dec)} ::msgcat::mcset pt {Plot 2D} ::msgcat::mcset pt {Plot 3D} ::msgcat::mcset pt {Plot Title} [encoding convertfrom iso8859-1 {Título}] ::msgcat::mcset pt {Plotting Regions} ::msgcat::mcset pt {Plot} ::msgcat::mcset pt {Plus} {Mais} ::msgcat::mcset pt {Pointer} {Ponteiro} ::msgcat::mcset pt {Points} {Pntos} ::msgcat::mcset pt {Point} {Ponto} ::msgcat::mcset pt {Polygon} [encoding convertfrom iso8859-1 {Polígono}] ::msgcat::mcset pt {Portrait} {Retrato} ::msgcat::mcset pt {Poster} ::msgcat::mcset pt {Postscript Page Setup} ::msgcat::mcset pt {Postscript Print} ::msgcat::mcset pt {Postscript} ::msgcat::mcset pt {Power} [encoding convertfrom iso8859-1 {Potência}] ::msgcat::mcset pt {Preferences} [encoding convertfrom iso8859-1 {Preferências}] ::msgcat::mcset pt {Preserve During Load} {Preservar durante a carga} ::msgcat::mcset pt {Previous Frame} ::msgcat::mcset pt {Previous} {Anterior} ::msgcat::mcset pt {Prev} ::msgcat::mcset pt {Print Coordinates} {Imprimir Coordenadas} ::msgcat::mcset pt {Print To} {Imprimir Para} ::msgcat::mcset pt {Printer} {Impressora} ::msgcat::mcset pt {Print} {Imprimir} ::msgcat::mcset pt {Projection} [encoding convertfrom iso8859-1 {Projeção}] ::msgcat::mcset pt {Properties} {Propriedades} ::msgcat::mcset pt {Property} {Propriedade} ::msgcat::mcset pt {Proxy Host} {Host Proxy} ::msgcat::mcset pt {Proxy Port} {Porta do Proxy} ::msgcat::mcset pt {Publication} [encoding convertfrom iso8859-1 {Publicação}] ::msgcat::mcset pt {Quadratic} [encoding convertfrom iso8859-1 {Quadrático}] ::msgcat::mcset pt {RGB Array} ::msgcat::mcset pt {RGB Cube} ::msgcat::mcset pt {RGB Image} ::msgcat::mcset pt {RGB} ::msgcat::mcset pt {Radial Profile} ::msgcat::mcset pt {Radial} ::msgcat::mcset pt {Radius} {Raio} ::msgcat::mcset pt {Raised} ::msgcat::mcset pt {Range} ::msgcat::mcset pt {Redo} {Refazer} ::msgcat::mcset pt {Red} {Vermelho} ::msgcat::mcset pt {Reference Manual} [encoding convertfrom iso8859-1 {Manual de referência}] ::msgcat::mcset pt {Reference} [encoding convertfrom iso8859-1 {Referência}] ::msgcat::mcset pt {Refresh Frame} {Recarregar Frame} ::msgcat::mcset pt {Refresh} ::msgcat::mcset pt {Region Parameters} ::msgcat::mcset pt {Region} [encoding convertfrom iso8859-1 {Região}] ::msgcat::mcset pt {Release Notes} [encoding convertfrom iso8859-1 {Notas das Versão}] ::msgcat::mcset pt {Release} [encoding convertfrom iso8859-1 {Versão}] ::msgcat::mcset pt {Relief} ::msgcat::mcset pt {Reload} {Recarregar} ::msgcat::mcset pt {Render} ::msgcat::mcset pt {Repeat} ::msgcat::mcset pt {Reset Colormap} {Reiniciar mapa de cores} ::msgcat::mcset pt {Reset Frame} {Reiniciar Frame} ::msgcat::mcset pt {Reset} ::msgcat::mcset pt {Restore} ::msgcat::mcset pt {Retrieve} {Receber} ::msgcat::mcset pt {Return} ::msgcat::mcset pt {Right} ::msgcat::mcset pt {Roman} ::msgcat::mcset pt {Rotate} {Rodar} ::msgcat::mcset pt {Rows} {Linhas} ::msgcat::mcset pt {Row} ::msgcat::mcset pt {Ruler} [encoding convertfrom iso8859-1 {Régua}] ::msgcat::mcset pt {SAMP Image} ::msgcat::mcset pt {SAMP Table} ::msgcat::mcset pt {SAMP: already connected} ::msgcat::mcset pt {SAMP: internal error} ::msgcat::mcset pt {SAMP: not connected} ::msgcat::mcset pt {SAMP: unable to locate HUB} ::msgcat::mcset pt {SAMP} ::msgcat::mcset pt {Sample Increment} ::msgcat::mcset pt {Sample Parameters} ::msgcat::mcset pt {Samples per Line} {Amostras por Linha} ::msgcat::mcset pt {Sample} ::msgcat::mcset pt {Save 3D Movie} ::msgcat::mcset pt {Save Color Tags} ::msgcat::mcset pt {Save Colormap} {Salvar Mapa de Cores} ::msgcat::mcset pt {Save Configuration} [encoding convertfrom iso8859-1 {Salvar Configuração}] ::msgcat::mcset pt {Save Contour Levels} {Salvar Níveis de Contorno} ::msgcat::mcset pt {Save Contours} {Salvar Contornos} ::msgcat::mcset pt {Save Contrast/Bias} {Salvar Contraste/Bias} ::msgcat::mcset pt {Save Data} {Salvar Dados} ::msgcat::mcset pt {Save Image on Download} ::msgcat::mcset pt {Save Image} {Salvar Imagem} ::msgcat::mcset pt {Save Regions} [encoding convertfrom iso8859-1 {Salvar Regiões}] ::msgcat::mcset pt {Save Template} ::msgcat::mcset pt {Save as} ::msgcat::mcset pt {Save} {Salvar} ::msgcat::mcset pt {Scale Parameters} [encoding convertfrom iso8859-1 {Parâmetros da Escala}] ::msgcat::mcset pt {Scale and Limits} ::msgcat::mcset pt {Scale} {Escala} ::msgcat::mcset pt {Scan} ::msgcat::mcset pt {Scatter Plot Tool} ::msgcat::mcset pt {Scope} {Escopo} ::msgcat::mcset pt {Search for Catalogs} [encoding convertfrom iso8859-1 {Buscar Catálogos}] ::msgcat::mcset pt {Searching for catalogs} [encoding convertfrom iso8859-1 {Buscando Catálogos}] ::msgcat::mcset pt {Seconds} {Segundos} ::msgcat::mcset pt {Segment} ::msgcat::mcset pt {Select All} {Selecionar tudo} ::msgcat::mcset pt {Select Coordinate System } {Selecionar Sistema de Coordenadas} ::msgcat::mcset pt {Select None} {Selecionar Nada} ::msgcat::mcset pt {Select} ::msgcat::mcset pt {Send} ::msgcat::mcset pt {Server} {Servidor} ::msgcat::mcset pt {Sexagesimal} ::msgcat::mcset pt {Shape} {Formato} ::msgcat::mcset pt {Show All} {Mostre todos} ::msgcat::mcset pt {Show Command} ::msgcat::mcset pt {Show Compass} ::msgcat::mcset pt {Show Text} ::msgcat::mcset pt {Show/Hide Frames} {Mostra/Esconde Frames} ::msgcat::mcset pt {Show} {Mostrar} ::msgcat::mcset pt {Simple Cross} ::msgcat::mcset pt {Simple Plus} ::msgcat::mcset pt {Single Frame} [encoding convertfrom iso8859-1 {Frame Único}] ::msgcat::mcset pt {Single} [encoding convertfrom iso8859-1 {Único}] ::msgcat::mcset pt {Sites} ::msgcat::mcset pt {Size/Radius} {Tamanho/Raio} ::msgcat::mcset pt {Size} {Tamanho} ::msgcat::mcset pt {Skip First} {Pular Primeiro} ::msgcat::mcset pt {Slice} ::msgcat::mcset pt {Smooth Parameters} [encoding convertfrom iso8859-1 {Parâmetros da Suavização}] ::msgcat::mcset pt {Smoothness} ::msgcat::mcset pt {Smooth} {Suavizar} ::msgcat::mcset pt {Solid} ::msgcat::mcset pt {Sorry, DS9 does not support} [encoding convertfrom iso8859-1 {Perdão, o DS9 não suporta}] ::msgcat::mcset pt {Sorry, DS9 requires a Truecolor8, Truecolor16, Truecolor24 visual be available} ::msgcat::mcset pt {Sort} {Organizar} ::msgcat::mcset pt {Source TCL} [encoding convertfrom iso8859-1 {Código TCL}] ::msgcat::mcset pt {Source} {Fonte} ::msgcat::mcset pt {Space Equal Distance} ::msgcat::mcset pt {Space Equal Value} ::msgcat::mcset pt {Spacing} [encoding convertfrom iso8859-1 {Espaçamento}] ::msgcat::mcset pt {Sqrt} ::msgcat::mcset pt {Square Root} {Raiz Quadrada} ::msgcat::mcset pt {Squared} {Quadrado} ::msgcat::mcset pt {Square} ::msgcat::mcset pt {Stacked} ::msgcat::mcset pt {Starbase} ::msgcat::mcset pt {Startup} ::msgcat::mcset pt {Start} {Iniciar} ::msgcat::mcset pt {Statistics} ::msgcat::mcset pt {Stats} ::msgcat::mcset pt {Status} {Estado} ::msgcat::mcset pt {Step} {Passo} ::msgcat::mcset pt {Stop} {Parar} ::msgcat::mcset pt {Story of SAOImage DS9} ::msgcat::mcset pt {Story} ::msgcat::mcset pt {Sum} {Soma} ::msgcat::mcset pt {Sunken} ::msgcat::mcset pt {Symbol Editor} ::msgcat::mcset pt {Symbol} [encoding convertfrom iso8859-1 {Símbolo}] ::msgcat::mcset pt {Tab-Separated-Value} ::msgcat::mcset pt {Table} ::msgcat::mcset pt {Tabloid} [encoding convertfrom iso8859-1 {Tablóide}] ::msgcat::mcset pt {Tag Color} ::msgcat::mcset pt {Task} ::msgcat::mcset pt {Template} ::msgcat::mcset pt {Text Font} ::msgcat::mcset pt {Text} {Texto} ::msgcat::mcset pt {Then} [encoding convertfrom iso8859-1 {Então}] ::msgcat::mcset pt {Thickness} {Expessura} ::msgcat::mcset pt {This analysis task is already running. Do you wish to kill it?} [encoding convertfrom iso8859-1 {Esta análise já está sendo executada. Você deseja parar?}] ::msgcat::mcset pt {This function is not available.} ::msgcat::mcset pt {This function is not currently supported for this port.} ::msgcat::mcset pt {Tickmarks} ::msgcat::mcset pt {Tile Frames} ::msgcat::mcset pt {Tile Parameters} ::msgcat::mcset pt {Tile} ::msgcat::mcset pt {Times} ::msgcat::mcset pt {Title} [encoding convertfrom iso8859-1 {Título}] ::msgcat::mcset pt {Tophat} ::msgcat::mcset pt {Topographic} ::msgcat::mcset pt {Top} ::msgcat::mcset pt {To} {Para} ::msgcat::mcset pt {Transparency} ::msgcat::mcset pt {Triangle} ::msgcat::mcset pt {Type} {Tipo} ::msgcat::mcset pt {URL} ::msgcat::mcset pt {Unable to connect directly: using Web Proxy} ::msgcat::mcset pt {Unable to determine date of observation} ::msgcat::mcset pt {Unable to determine time of observation} ::msgcat::mcset pt {Unable to evaluate filter} {Incapaz de calcular filtro} ::msgcat::mcset pt {Unable to find SIAP window} ::msgcat::mcset pt {Unable to find URL column} ::msgcat::mcset pt {Unable to find catalog window} [encoding convertfrom iso8859-1 {Incapaz de encontrar janela do catálogo}] ::msgcat::mcset pt {Unable to find plot window} [encoding convertfrom iso8859-1 {Incapaz de encontrar janela de gráfico}] ::msgcat::mcset pt {Unable to load RGB image into a non-rgb frame} [encoding convertfrom iso8859-1 {Incapaz de carregar imagem RGB em um frame não RGB}] ::msgcat::mcset pt {Unable to load region file} ::msgcat::mcset pt {Unable to load} {Incapaz de carregar} ::msgcat::mcset pt {Unable to locate URL} {Incapaz de localizar URL} ::msgcat::mcset pt {Unable to match target with XPA Mime request} ::msgcat::mcset pt {Unable to open file} {Incapaz de abrir arquivo} ::msgcat::mcset pt {Unable to process Analysis file} ::msgcat::mcset pt {Unable to save RGB image from a non-rgb frame} ::msgcat::mcset pt {Undo} {Voltar} ::msgcat::mcset pt {Unique} ::msgcat::mcset pt {Unists} ::msgcat::mcset pt {Units} {Unidades} ::msgcat::mcset pt {Unknown Colormap} ::msgcat::mcset pt {Unknown command} ::msgcat::mcset pt {Update Filter} ::msgcat::mcset pt {Update Group} {Atualizar Grupo} ::msgcat::mcset pt {Update from Current Crosshair} {Atualizar da Cruz Atual} ::msgcat::mcset pt {Update from Current Frame} {Atualizar do Frame Atual} ::msgcat::mcset pt {Update} {Atualizar} ::msgcat::mcset pt {Upper Left Back} ::msgcat::mcset pt {Upper Left Front} ::msgcat::mcset pt {Upper Right Back} ::msgcat::mcset pt {Upper Right Front} ::msgcat::mcset pt {Use Authentication} [encoding convertfrom iso8859-1 {Utilizar Autenticação}] ::msgcat::mcset pt {Use Current Frame on Download} {Utilizar Frame Atual ao Descarregar} ::msgcat::mcset pt {Use Internal Web Browser} {Utilizar Navegador Web Interno} ::msgcat::mcset pt {Use Proxy} {Utilizar Proxy} ::msgcat::mcset pt {User Manual} ::msgcat::mcset pt {Username} [encoding convertfrom iso8859-1 {Nome de usuário}] ::msgcat::mcset pt {User} [encoding convertfrom iso8859-1 {Usuário}] ::msgcat::mcset pt {Use} {Usar} ::msgcat::mcset pt {VO Server} ::msgcat::mcset pt {VO} ::msgcat::mcset pt {Value} {Valor} ::msgcat::mcset pt {Vector} {Vetor} ::msgcat::mcset pt {Vertical Graph} [encoding convertfrom iso8859-1 {Gráfico Vertical}] ::msgcat::mcset pt {Vertical Layout} {Layout Vertical} ::msgcat::mcset pt {Vertical Text} {Texto Vertical} ::msgcat::mcset pt {Vertical} ::msgcat::mcset pt {View} {Visualizar} ::msgcat::mcset pt {Virtual Observatory} [encoding convertfrom iso8859-1 {Observatório Virtual}] ::msgcat::mcset pt {WCS Parameters} ::msgcat::mcset pt {WCS} ::msgcat::mcset pt {Wavelength} {Comprimento de Onda} ::msgcat::mcset pt {Web Browser} {Navegador Web} ::msgcat::mcset pt {White} {Branco} ::msgcat::mcset pt {Width} {Largura} ::msgcat::mcset pt {Window} ::msgcat::mcset pt {Words matching title, description} ::msgcat::mcset pt {X Axis Title} ::msgcat::mcset pt {X Grid} ::msgcat::mcset pt {XPA Information} [encoding convertfrom iso8859-1 {Informação sobre o XPA}] ::msgcat::mcset pt {XPA not initialized} [encoding convertfrom iso8859-1 {XPA não inicializado}] ::msgcat::mcset pt {XPA unable to verify hostname, setting XPA_METHOD to LOCAL} ::msgcat::mcset pt {XPA} ::msgcat::mcset pt {X} ::msgcat::mcset pt {Y Axis Title} ::msgcat::mcset pt {Y Grid} ::msgcat::mcset pt {Yellow} {Amarelo} ::msgcat::mcset pt {Y} ::msgcat::mcset pt {Z Axis Scale} ::msgcat::mcset pt {ZScale Parameters} [encoding convertfrom iso8859-1 {Parâmetros da escala Z}] ::msgcat::mcset pt {Zero} ::msgcat::mcset pt {Zoom Fit} ::msgcat::mcset pt {Zoom In} {Aumentar} ::msgcat::mcset pt {Zoom Out} {Diminuir} ::msgcat::mcset pt {Zoom} {Fator} ::msgcat::mcset pt {and} ::msgcat::mcset pt {blue} ::msgcat::mcset pt {b} ::msgcat::mcset pt {color} ::msgcat::mcset pt {cool} ::msgcat::mcset pt {green} ::msgcat::mcset pt {grey} ::msgcat::mcset pt {g} ::msgcat::mcset pt {h5utils} ::msgcat::mcset pt {heat} ::msgcat::mcset pt {not} ::msgcat::mcset pt {only} ::msgcat::mcset pt {or center of data} {ou centro dos dados} ::msgcat::mcset pt {rainbow} ::msgcat::mcset pt {red} ::msgcat::mcset pt {rows of data have been downloaded. More may be available. You may wish to adjust the maximum allowed} [encoding convertfrom iso8859-1 {colunas de dados foram descarregadas. Mais podem estar disponíveis. Você pode querer ajustar o máximo permitido}] ::msgcat::mcset pt {r} ::msgcat::mcset pt {staircase} ::msgcat::mcset pt {standard} ::msgcat::mcset pt {x} ::msgcat::mcset pt {} saods9/ds9/msgs/zh.msg000644 000765 000000 00000111467 12741217134 015201 0ustar00joyewheel000000 000000 ::msgcat::mcset zh {2D} ::msgcat::mcset zh {3D} ::msgcat::mcset zh {A postscript generation error has occurred} ::msgcat::mcset zh {AIP} ::msgcat::mcset zh {Abort} ::msgcat::mcset zh {About SAOImage DS9} ::msgcat::mcset zh {About} [encoding convertfrom big5 "\xC3\xF6 \xA9\xF3"] ::msgcat::mcset zh {Acknowledgment} ::msgcat::mcset zh {Add} ::msgcat::mcset zh {Advanced} ::msgcat::mcset zh {Aligned} ::msgcat::mcset zh {Align} [encoding convertfrom big5 "\xB9\xEF \xBB\xF4 \xA4\xE8 \xA6\xEC"] ::msgcat::mcset zh {All Columns} ::msgcat::mcset zh {All Rows} ::msgcat::mcset zh {All} ::msgcat::mcset zh {Always save files during Backup} ::msgcat::mcset zh {Amplifier} ::msgcat::mcset zh {An error has occurred during backup} ::msgcat::mcset zh {An error has occurred during restore} ::msgcat::mcset zh {An error has occurred invoking the Analysis task} ::msgcat::mcset zh {An error has occurred while creating image.} ::msgcat::mcset zh {An error has occurred while creating the image. Please be sure that the ds9 window is in the upper left corner of the default screen and the entire window is visible.} ::msgcat::mcset zh {An error has occurred while creating the image. Please be sure that the entire image window is visible on the screen.} ::msgcat::mcset zh {An error has occurred while printing} ::msgcat::mcset zh {An error has occurred while reading image.} ::msgcat::mcset zh {An error has occurred while saving} ::msgcat::mcset zh {An error has occurred while updating VO server list} ::msgcat::mcset zh {An error has occurred while writing image.} ::msgcat::mcset zh {An internal error has been detected} ::msgcat::mcset zh {Analysis Command Log} ::msgcat::mcset zh {Analysis Commands} ::msgcat::mcset zh {Analysis File} ::msgcat::mcset zh {Analysis Log} ::msgcat::mcset zh {Analysis} [encoding convertfrom big5 "\xA4\xC0 \xAA\x52"] ::msgcat::mcset zh {Angle Complement} ::msgcat::mcset zh {Angles} ::msgcat::mcset zh {Angle} ::msgcat::mcset zh {Annuli} ::msgcat::mcset zh {Annulus} [encoding convertfrom big5 "\xB6\xEA \xB0\xE9"] ::msgcat::mcset zh {Apply} ::msgcat::mcset zh {ArcMin} ::msgcat::mcset zh {ArcSec} ::msgcat::mcset zh {Architecture} ::msgcat::mcset zh {Archives} ::msgcat::mcset zh {Array} ::msgcat::mcset zh {Arrow} ::msgcat::mcset zh {Astronomy} ::msgcat::mcset zh {At Startup} ::msgcat::mcset zh {At least 2 different catalogs are required} ::msgcat::mcset zh {Auto Centroid} ::msgcat::mcset zh {Auto Plot 2D} ::msgcat::mcset zh {Auto Plot 3D} ::msgcat::mcset zh {Auto Plot Statistics} ::msgcat::mcset zh {Auto Plot} ::msgcat::mcset zh {Autoload FITS Regions} ::msgcat::mcset zh {Autoload} ::msgcat::mcset zh {Automatic} ::msgcat::mcset zh {Average} ::msgcat::mcset zh {Axes Number} ::msgcat::mcset zh {Axes Order} ::msgcat::mcset zh {Axes Title} ::msgcat::mcset zh {Axes} ::msgcat::mcset zh {Axis Length} ::msgcat::mcset zh {Axis Numbers} ::msgcat::mcset zh {Axis Title} ::msgcat::mcset zh {Axis} ::msgcat::mcset zh {Azimuth} ::msgcat::mcset zh {Background Color} ::msgcat::mcset zh {Background} ::msgcat::mcset zh {Backup} ::msgcat::mcset zh {Back} ::msgcat::mcset zh {Bar Plot Tool} ::msgcat::mcset zh {Bias} ::msgcat::mcset zh {Bin 3rd Column} ::msgcat::mcset zh {Bin Center} ::msgcat::mcset zh {Bin Columns} ::msgcat::mcset zh {Bin Filter} ::msgcat::mcset zh {Bin Fit} ::msgcat::mcset zh {Bin In} ::msgcat::mcset zh {Bin Out} ::msgcat::mcset zh {Binning Parameters} ::msgcat::mcset zh {Bin} ::msgcat::mcset zh {Black} [encoding convertfrom big5 "\xB6\xC2 \xA6\xE2"] ::msgcat::mcset zh {Blank/Inf/NaN Color} ::msgcat::mcset zh {Blink Frames} ::msgcat::mcset zh {Blink Interval} ::msgcat::mcset zh {Blink} ::msgcat::mcset zh {Block Fit} ::msgcat::mcset zh {Block In} ::msgcat::mcset zh {Block Out} ::msgcat::mcset zh {Block Parameters} ::msgcat::mcset zh {Block} ::msgcat::mcset zh {Blue} ::msgcat::mcset zh {Bold} ::msgcat::mcset zh {Border} ::msgcat::mcset zh {Bottom} ::msgcat::mcset zh {Box Annulus} [encoding convertfrom big5 "\xA4\xE8 \xA7\xCE \xB0\xE9"] ::msgcat::mcset zh {Box Panda} ::msgcat::mcset zh {BoxCircle} ::msgcat::mcset zh {Boxcar} ::msgcat::mcset zh {Box} [encoding convertfrom big5 "\xA4\xE8 \xA7\xCE"] ::msgcat::mcset zh {Broadcast} ::msgcat::mcset zh {Browser} ::msgcat::mcset zh {Browse} ::msgcat::mcset zh {Buffer} ::msgcat::mcset zh {Buttonbar} ::msgcat::mcset zh {Buttons} [encoding convertfrom big5 "\xAB\xF6 \xB6\x73 \xA6\x43"] ::msgcat::mcset zh {Bytes} ::msgcat::mcset zh {CMYK} ::msgcat::mcset zh {Can Delete} [encoding convertfrom big5 "\xA5\x69 \xA5\x48 \xA7\x52 \xB0\xA3"] ::msgcat::mcset zh {Can Edit} [encoding convertfrom big5 "\xA5\x69 \xA5\x48 \xBD\x73 \xBF\xE8"] ::msgcat::mcset zh {Can Move} [encoding convertfrom big5 "\xA5\x69 \xA5\x48 \xB2\xBE \xB0\xCA"] ::msgcat::mcset zh {Can Rotate} [encoding convertfrom big5 "\xA5\x69 \xA5\x48 \xB1\xDB \xC2\xE0"] ::msgcat::mcset zh {Cancelled} ::msgcat::mcset zh {Cancel} ::msgcat::mcset zh {Cap} ::msgcat::mcset zh {Catalog Server} ::msgcat::mcset zh {Catalog Tool} ::msgcat::mcset zh {Catalogs} [encoding convertfrom big5 "\xB8\xEA \xAE\xC6 \xAA\xED"] ::msgcat::mcset zh {Catalog} ::msgcat::mcset zh {Catrom} ::msgcat::mcset zh {Cat} ::msgcat::mcset zh {Center Image} [encoding convertfrom big5 "\xBC\x76 \xB9\xB3 \xB8\x6D \xA4\xA4"] ::msgcat::mcset zh {Center Non-modal Dialogs} ::msgcat::mcset zh {Center} ::msgcat::mcset zh {Centroid Parameters} [encoding convertfrom big5 "\xA4\xA4 \xA4\xDF \xB0\xD1 \xBC\xC6"] ::msgcat::mcset zh {Centroid} ::msgcat::mcset zh {Circle} [encoding convertfrom big5 "\xB6\xEA \xA7\xCE"] ::msgcat::mcset zh {Clear All} ::msgcat::mcset zh {Clear Analysis Commands} ::msgcat::mcset zh {Clear Cache} ::msgcat::mcset zh {Clear Data} ::msgcat::mcset zh {Clear External Analysis Commands?} ::msgcat::mcset zh {Clear Filter} ::msgcat::mcset zh {Clear Frame} [encoding convertfrom big5 "\xB2\x4D \xB0\xA3 \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {Clear Preferences?} ::msgcat::mcset zh {Clear Preferences} ::msgcat::mcset zh {Clear} [encoding convertfrom big5 "\xB2\x4D \xB0\xA3"] ::msgcat::mcset zh {Click to Center} ::msgcat::mcset zh {Close} ::msgcat::mcset zh {Colorbar Size} ::msgcat::mcset zh {Colorbar} [encoding convertfrom big5 "\xA6\xE2 \xB6\xA5 \xB9\xCF \xA8\xD2"] ::msgcat::mcset zh {Colormap Parameters} [encoding convertfrom big5 "\xC3\x43 \xA6\xE2 \xB0\xD1 \xBC\xC6"] ::msgcat::mcset zh {Colormap} ::msgcat::mcset zh {Color} [encoding convertfrom big5 "\xC3\x43 \xA6\xE2"] ::msgcat::mcset zh {Columns} [encoding convertfrom big5 "\xA4\xE8 \xA6\xEC"] ::msgcat::mcset zh {Column} ::msgcat::mcset zh {Command not allowed} ::msgcat::mcset zh {Command} ::msgcat::mcset zh {Compass} ::msgcat::mcset zh {Composite Region} [encoding convertfrom big5 "\xB2\x56 \xA6\x58 \xB0\xCF \xB0\xEC"] ::msgcat::mcset zh {Composite} ::msgcat::mcset zh {Compression} ::msgcat::mcset zh {Configure} ::msgcat::mcset zh {Connect Directly} ::msgcat::mcset zh {Connect SAMP} ::msgcat::mcset zh {Connect Using Web Proxy} ::msgcat::mcset zh {Connect} ::msgcat::mcset zh {Console} ::msgcat::mcset zh {Contacting Image Server} ::msgcat::mcset zh {Contour Parameters} [encoding convertfrom big5 "\xB5\xA5 \xAD\xC8 \xBD\x75 \xB0\xD1 \xBC\xC6"] ::msgcat::mcset zh {Contours} [encoding convertfrom big5 "\xB5\xA5 \xAD\xC8 \xBD\x75"] ::msgcat::mcset zh {Contour} ::msgcat::mcset zh {Contrast} ::msgcat::mcset zh {Convert to Polygons} ::msgcat::mcset zh {Coordinate Grid Parameters} [encoding convertfrom big5 "\xAE\x79 \xBC\xD0 \xAE\xE6 \xBD\x75 \xB0\xD1 \xBC\xC6"] ::msgcat::mcset zh {Coordinate Grid} [encoding convertfrom big5 "\xAE\x79 \xBC\xD0 \xAE\xE6 \xBD\x75"] ::msgcat::mcset zh {Coordinate System} ::msgcat::mcset zh {Coordinates} ::msgcat::mcset zh {Coordinate} ::msgcat::mcset zh {Copy Contours} ::msgcat::mcset zh {Copy to Regions} ::msgcat::mcset zh {Copy} ::msgcat::mcset zh {Create Movie} ::msgcat::mcset zh {Create New Frame on Download} ::msgcat::mcset zh {Create} [encoding convertfrom big5 "\xBB\x73 \xB3\x79"] ::msgcat::mcset zh {Crop Parameters} ::msgcat::mcset zh {Crop} ::msgcat::mcset zh {Crosshair Parameters} ::msgcat::mcset zh {Crosshair To} ::msgcat::mcset zh {Crosshair} ::msgcat::mcset zh {Cross} ::msgcat::mcset zh {Cubehelix} ::msgcat::mcset zh {Cube} ::msgcat::mcset zh {Cubic} ::msgcat::mcset zh {Current Frame} ::msgcat::mcset zh {Current Range} ::msgcat::mcset zh {Current} ::msgcat::mcset zh {Cursor} ::msgcat::mcset zh {Cut} ::msgcat::mcset zh {Cyan} [encoding convertfrom big5 "\xAB\x43 \xA6\xE2"] ::msgcat::mcset zh {DPI} ::msgcat::mcset zh {DS9 has detected a newer version of a backup file and therefore will not process this file.} ::msgcat::mcset zh {DS9 has detected a newer version of a preferences file.} ::msgcat::mcset zh {DS9 has detected an older backup file, do you wish to continue?} ::msgcat::mcset zh {DS9 has detected an older preferences file, do you wish to update?} ::msgcat::mcset zh {DS9 will complete the initialization process} ::msgcat::mcset zh {Dash} [encoding convertfrom big5 "\xB5\xEA \xBD\x75"] ::msgcat::mcset zh {Data Format} ::msgcat::mcset zh {Dataset Name} ::msgcat::mcset zh {Dataset} ::msgcat::mcset zh {Data} ::msgcat::mcset zh {Decrease} ::msgcat::mcset zh {Default All Files} ::msgcat::mcset zh {Default Format} ::msgcat::mcset zh {Default Length} ::msgcat::mcset zh {Default} ::msgcat::mcset zh {Degrees} ::msgcat::mcset zh {Delete All Frames?} ::msgcat::mcset zh {Delete All Frames} [encoding convertfrom big5 "\xA7\x52 \xB0\xA3 \xA9\xD2 \xA6\xB3 \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {Delete All Groups?} ::msgcat::mcset zh {Delete All Groups} ::msgcat::mcset zh {Delete All Regions?} ::msgcat::mcset zh {Delete All Regions} [encoding convertfrom big5 "\xA7\x52 \xB0\xA3 \xA5\xEF \xB3\xA1 \xB0\xCF \xB0\xEC"] ::msgcat::mcset zh {Delete All} ::msgcat::mcset zh {Delete Color Tags} ::msgcat::mcset zh {Delete Frame} [encoding convertfrom big5 "\xA7\x52 \xB0\xA3 \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {Delete Group} ::msgcat::mcset zh {Delete Selected Regions} [encoding convertfrom big5 "\xA7\x52 \xB0\xA3 \xBF\xEF \xA8\xFA \xB0\xCF \xB0\xEC"] ::msgcat::mcset zh {Delete} [encoding convertfrom big5 "\xA7\x52 \xB0\xA3"] ::msgcat::mcset zh {Depth} ::msgcat::mcset zh {Detector} ::msgcat::mcset zh {Dialog Box} ::msgcat::mcset zh {Diamond} ::msgcat::mcset zh {Dimension} ::msgcat::mcset zh {Direction} ::msgcat::mcset zh {Disconnect} ::msgcat::mcset zh {Display Header} ::msgcat::mcset zh {Display Size} ::msgcat::mcset zh {Dissolve} [encoding convertfrom big5 "\xB8\xD1 \xB4\xB2"] ::msgcat::mcset zh {Distance} ::msgcat::mcset zh {Done} ::msgcat::mcset zh {Download Colormap} ::msgcat::mcset zh {Download VOTABLE format if available} ::msgcat::mcset zh {Drag to Center} ::msgcat::mcset zh {Duplicate Data} ::msgcat::mcset zh {East} ::msgcat::mcset zh {Ecliptic} ::msgcat::mcset zh {Edit Group Name} ::msgcat::mcset zh {Edit} [encoding convertfrom big5 "\xBD\x73 \xBF\xE8"] ::msgcat::mcset zh {Elevation} ::msgcat::mcset zh {Ellipse Annulus} ::msgcat::mcset zh {Ellipse Panda} ::msgcat::mcset zh {Ellipse} [encoding convertfrom big5 "\xBE\xF2 \xB6\xEA \xA7\xCE"] ::msgcat::mcset zh {Elliptical Annulus} [encoding convertfrom big5 "\xBE\xF2 \xB6\xEA \xB0\xE9"] ::msgcat::mcset zh {Elliptical Panda} ::msgcat::mcset zh {Enable Confirmation Dialogs} ::msgcat::mcset zh {Enable} ::msgcat::mcset zh {End} ::msgcat::mcset zh {Enter Color} ::msgcat::mcset zh {Enter Font Size} ::msgcat::mcset zh {Enter Group Name} ::msgcat::mcset zh {Enter Search Expression} ::msgcat::mcset zh {Enter URL} ::msgcat::mcset zh {Entry} ::msgcat::mcset zh {Equal Area} ::msgcat::mcset zh {Equal Distance} ::msgcat::mcset zh {Equal Spacing} ::msgcat::mcset zh {Equal Value} ::msgcat::mcset zh {Error code was returned} ::msgcat::mcset zh {Error} ::msgcat::mcset zh {Examine Frame} ::msgcat::mcset zh {Examine} [encoding convertfrom big5 "\xA9\xF1 \xA4\x6A \xC0\xCB \xB5\xF8"] ::msgcat::mcset zh {Exam} ::msgcat::mcset zh {Exclude} ::msgcat::mcset zh {Exit} [encoding convertfrom big5 "\xC2\xF7 \xB6\x7D"] ::msgcat::mcset zh {Export Array} ::msgcat::mcset zh {Export} ::msgcat::mcset zh {Extention} ::msgcat::mcset zh {Exterior Axes} ::msgcat::mcset zh {Exterior Numerics} ::msgcat::mcset zh {FAQ} ::msgcat::mcset zh {FK4} ::msgcat::mcset zh {FK5} ::msgcat::mcset zh {Factor} ::msgcat::mcset zh {File not Found or Unable to load FITS data MIME type} ::msgcat::mcset zh {Filename} [encoding convertfrom big5 "\xC0\xC9 \xAE\xD7 \xA6\x57 \xBA\xD9"] ::msgcat::mcset zh {File} [encoding convertfrom big5 "\xC0\xC9 \xAE\xD7"] ::msgcat::mcset zh {Fill} ::msgcat::mcset zh {Filter} ::msgcat::mcset zh {Find Next} ::msgcat::mcset zh {Find} ::msgcat::mcset zh {First Frame} [encoding convertfrom big5 "\xB3\xCC \xA4\x57 \xBC\x68 \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {First} ::msgcat::mcset zh {Fits} ::msgcat::mcset zh {Fixed in Size} [encoding convertfrom big5 "\xA9\x54 \xA9\x77 \xA4\x6A \xA4\x70"] ::msgcat::mcset zh {Flat} ::msgcat::mcset zh {Flip} ::msgcat::mcset zh {Font} ::msgcat::mcset zh {For more information, use --help} ::msgcat::mcset zh {Format} ::msgcat::mcset zh {Forward} ::msgcat::mcset zh {Found} ::msgcat::mcset zh {Frame Information} [encoding convertfrom big5 "\xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1 \xB8\xEA \xB0\x54"] ::msgcat::mcset zh {Frame Parameters} [encoding convertfrom big5 "\xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1 \xB0\xD1 \xBC\xC6"] ::msgcat::mcset zh {Frames} ::msgcat::mcset zh {Frame} [encoding convertfrom big5 "\xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {From} ::msgcat::mcset zh {Front} ::msgcat::mcset zh {Full Range} ::msgcat::mcset zh {Function} ::msgcat::mcset zh {GUI Font} ::msgcat::mcset zh {Galactic} ::msgcat::mcset zh {Gap} ::msgcat::mcset zh {Gaussian} ::msgcat::mcset zh {General} ::msgcat::mcset zh {Generate} ::msgcat::mcset zh {Generating Regions} ::msgcat::mcset zh {Get Information} [encoding convertfrom big5 "\xB8\xFC \xA4\x4A \xB0\x54 \xAE\xA7"] ::msgcat::mcset zh {Gist} ::msgcat::mcset zh {Global Properties} ::msgcat::mcset zh {Global} ::msgcat::mcset zh {Goto Frame} [encoding convertfrom big5 "\xA8\xEC \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {Graph Horz} ::msgcat::mcset zh {Graph Vert} ::msgcat::mcset zh {Graphics} ::msgcat::mcset zh {Graphs} ::msgcat::mcset zh {Graph} ::msgcat::mcset zh {Grayscale} ::msgcat::mcset zh {Green} ::msgcat::mcset zh {Grid Gap} ::msgcat::mcset zh {Grid} ::msgcat::mcset zh {Groove} ::msgcat::mcset zh {Groups} ::msgcat::mcset zh {HTTP} ::msgcat::mcset zh {Header} ::msgcat::mcset zh {Height} ::msgcat::mcset zh {Help Desk} ::msgcat::mcset zh {Help Me Choose} ::msgcat::mcset zh {Help} [encoding convertfrom big5 "\xBB\xA1 \xA9\xFA"] ::msgcat::mcset zh {Hide All} [encoding convertfrom big5 "\xC1\xF4 \xC2\xC3 \xA5\xFE \xB3\xA1"] ::msgcat::mcset zh {Highlite} ::msgcat::mcset zh {High} ::msgcat::mcset zh {Histogram Equalization} ::msgcat::mcset zh {Histogram} ::msgcat::mcset zh {Horizontal Graph} ::msgcat::mcset zh {Horizontal Layout} ::msgcat::mcset zh {Horizontal} [encoding convertfrom big5 "\xA4\xF4 \xA5\xAD"] ::msgcat::mcset zh {IAU Location Code} ::msgcat::mcset zh {ICRS} ::msgcat::mcset zh {Identification} ::msgcat::mcset zh {If} ::msgcat::mcset zh {Image Servers} ::msgcat::mcset zh {Image} ::msgcat::mcset zh {Import Array} ::msgcat::mcset zh {Import} ::msgcat::mcset zh {Include} ::msgcat::mcset zh {Increase} ::msgcat::mcset zh {Information Panel} [encoding convertfrom big5 "\xB8\xEA \xB0\x54 \xA6\x43"] ::msgcat::mcset zh {Information} [encoding convertfrom big5 "\xB8\xEA \xB0\x54"] ::msgcat::mcset zh {Initialize XPA} ::msgcat::mcset zh {Inner} ::msgcat::mcset zh {Instrument FOV} ::msgcat::mcset zh {Interior Axes} ::msgcat::mcset zh {Interior Numerics} ::msgcat::mcset zh {Internal Parse Error} ::msgcat::mcset zh {Interval} ::msgcat::mcset zh {Invalid Column Name} ::msgcat::mcset zh {Invalid formated multipart/mixed mime type message} ::msgcat::mcset zh {Invert Colormap} [encoding convertfrom big5 "\xA6\xE2 \xB1\x6D \xA4\xCF \xA6\x56"] ::msgcat::mcset zh {Invert Selection} [encoding convertfrom big5 "\xA4\xCF \xA6\x56 \xBF\xEF \xA8\xFA"] ::msgcat::mcset zh {Invert} ::msgcat::mcset zh {Italic} ::msgcat::mcset zh {Items Found} ::msgcat::mcset zh {Iteration} ::msgcat::mcset zh {JPEG Quality Factor} ::msgcat::mcset zh {Keep-Alive} ::msgcat::mcset zh {Kernel} ::msgcat::mcset zh {Keyboard Shortcuts} ::msgcat::mcset zh {Keyboard} ::msgcat::mcset zh {Keyword} ::msgcat::mcset zh {Labels} ::msgcat::mcset zh {Label} ::msgcat::mcset zh {Landscape} ::msgcat::mcset zh {Language} ::msgcat::mcset zh {Last Frame} [encoding convertfrom big5 "\xB3\xCC \xA9\xB3 \xBC\x68 \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {Last} ::msgcat::mcset zh {Layout Horz} ::msgcat::mcset zh {Layout Vert} ::msgcat::mcset zh {Layout} ::msgcat::mcset zh {Left} ::msgcat::mcset zh {Legal} ::msgcat::mcset zh {Legend Title} ::msgcat::mcset zh {Legend} ::msgcat::mcset zh {Length} ::msgcat::mcset zh {Letter} ::msgcat::mcset zh {Levels} ::msgcat::mcset zh {Level} ::msgcat::mcset zh {Limits} ::msgcat::mcset zh {Line Plot Tool} ::msgcat::mcset zh {Linear} [encoding convertfrom big5 "\xBD\x75 \xA9\xCA"] ::msgcat::mcset zh {Line} [encoding convertfrom big5 "\xAA\xBD \xBD\x75"] ::msgcat::mcset zh {List Data} ::msgcat::mcset zh {List Regions} [encoding convertfrom big5 "\xA6\x43 \xA5\x58 \xB0\xCF \xB0\xEC"] ::msgcat::mcset zh {List} ::msgcat::mcset zh {Load Analysis Commands} ::msgcat::mcset zh {Load Color Tags} ::msgcat::mcset zh {Load Colormap} ::msgcat::mcset zh {Load Configuration} ::msgcat::mcset zh {Load Contour Levels} ::msgcat::mcset zh {Load Contours} ::msgcat::mcset zh {Load Contrast/Bias} ::msgcat::mcset zh {Load Data} ::msgcat::mcset zh {Load Mosaic} ::msgcat::mcset zh {Load Regions} [encoding convertfrom big5 "\xB8\xFC \xA4\x4A \xB0\xCF \xB0\xEC"] ::msgcat::mcset zh {Load Template} ::msgcat::mcset zh {Load into All Frames} ::msgcat::mcset zh {Load into Current Frame} ::msgcat::mcset zh {Loading Catalog} ::msgcat::mcset zh {Loading} ::msgcat::mcset zh {Load} [encoding convertfrom big5 "\xB8\xFC \xA4\x4A"] ::msgcat::mcset zh {Local} ::msgcat::mcset zh {Lock Axes} ::msgcat::mcset zh {Lock Bin} ::msgcat::mcset zh {Lock Color} ::msgcat::mcset zh {Lock Crop Amplifier} ::msgcat::mcset zh {Lock Crop Detector} ::msgcat::mcset zh {Lock Crop Image} ::msgcat::mcset zh {Lock Crop None} ::msgcat::mcset zh {Lock Crop Physical} ::msgcat::mcset zh {Lock Crop WCS} ::msgcat::mcset zh {Lock Crosshair Amplifier} ::msgcat::mcset zh {Lock Crosshair Detector} ::msgcat::mcset zh {Lock Crosshair Image} ::msgcat::mcset zh {Lock Crosshair None} ::msgcat::mcset zh {Lock Crosshair Physical} ::msgcat::mcset zh {Lock Crosshair WCS} ::msgcat::mcset zh {Lock Frame Amplifier} ::msgcat::mcset zh {Lock Frame Detector} ::msgcat::mcset zh {Lock Frame Image} ::msgcat::mcset zh {Lock Frame None} ::msgcat::mcset zh {Lock Frame Physical} ::msgcat::mcset zh {Lock Frame WCS} ::msgcat::mcset zh {Lock Limits} ::msgcat::mcset zh {Lock Scale} ::msgcat::mcset zh {Lock Slice Image} ::msgcat::mcset zh {Lock Slice None} ::msgcat::mcset zh {Lock Slice WCS} ::msgcat::mcset zh {Lock Smooth} ::msgcat::mcset zh {Lock} ::msgcat::mcset zh {Log Exponent} ::msgcat::mcset zh {Log} [encoding convertfrom big5 "\xB9\xEF \xBC\xC6"] ::msgcat::mcset zh {Low High} ::msgcat::mcset zh {Lower Left Back} ::msgcat::mcset zh {Lower Left Front} ::msgcat::mcset zh {Lower Right Back} ::msgcat::mcset zh {Lower Right Front} ::msgcat::mcset zh {Low} ::msgcat::mcset zh {MIP} ::msgcat::mcset zh {Magenta} [encoding convertfrom big5 "\xAC\xF5 \xB5\xB5 \xA6\xE2"] ::msgcat::mcset zh {Magnification} ::msgcat::mcset zh {Magnifier} [encoding convertfrom big5 "\xA9\xF1 \xA4\x6A \xC3\xE8 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {Major} ::msgcat::mcset zh {Manual} ::msgcat::mcset zh {Mask Parameters} ::msgcat::mcset zh {Match Axes} ::msgcat::mcset zh {Match Bin} ::msgcat::mcset zh {Match Catalog requires at least 1 row per catalog} ::msgcat::mcset zh {Match Color} ::msgcat::mcset zh {Match Crop Amplifier} ::msgcat::mcset zh {Match Crop Detector} ::msgcat::mcset zh {Match Crop Image} ::msgcat::mcset zh {Match Crop Physical} ::msgcat::mcset zh {Match Crop WCS} ::msgcat::mcset zh {Match Crosshair Amplifier} ::msgcat::mcset zh {Match Crosshair Detector} ::msgcat::mcset zh {Match Crosshair Image} ::msgcat::mcset zh {Match Crosshair Physical} ::msgcat::mcset zh {Match Crosshair WCS} ::msgcat::mcset zh {Match Frame Amplifier} ::msgcat::mcset zh {Match Frame Detector} ::msgcat::mcset zh {Match Frame Image} ::msgcat::mcset zh {Match Frame Physical} ::msgcat::mcset zh {Match Frame WCS} ::msgcat::mcset zh {Match Limits} ::msgcat::mcset zh {Match Scale} ::msgcat::mcset zh {Match Slice Image} ::msgcat::mcset zh {Match Slice WCS} ::msgcat::mcset zh {Match Smooth} ::msgcat::mcset zh {Match} ::msgcat::mcset zh {Math Function} ::msgcat::mcset zh {Matplotlib} ::msgcat::mcset zh {Max Rows} ::msgcat::mcset zh {Maximum} ::msgcat::mcset zh {Max} ::msgcat::mcset zh {Menus and Buttons} ::msgcat::mcset zh {Menu} ::msgcat::mcset zh {Message Log} ::msgcat::mcset zh {Method} ::msgcat::mcset zh {Min Max Parameters} ::msgcat::mcset zh {Min Max} ::msgcat::mcset zh {Minimum} ::msgcat::mcset zh {Minor} ::msgcat::mcset zh {Minutes} ::msgcat::mcset zh {Min} ::msgcat::mcset zh {Mission} ::msgcat::mcset zh {Mode} ::msgcat::mcset zh {Mosaic IRAF Segment} ::msgcat::mcset zh {Mosaic IRAF} ::msgcat::mcset zh {Mosaic WCS Segment} ::msgcat::mcset zh {Mosaic WCS} ::msgcat::mcset zh {Mosaic WFPC2} ::msgcat::mcset zh {Mosaic} ::msgcat::mcset zh {Mouse Click Epsilon} ::msgcat::mcset zh {Mouse Wheel Bin} ::msgcat::mcset zh {Mouse Wheel Zoom} ::msgcat::mcset zh {Mouse and Keyboard} ::msgcat::mcset zh {Move Back} ::msgcat::mcset zh {Move First} ::msgcat::mcset zh {Move Forward} ::msgcat::mcset zh {Move Frame} [encoding convertfrom big5 "\xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1 \xB6\xB6 \xA7\xC7"] ::msgcat::mcset zh {Move Last} ::msgcat::mcset zh {Move to Back} ::msgcat::mcset zh {Move to Front} ::msgcat::mcset zh {Movie} ::msgcat::mcset zh {Multiple Extension Cube} ::msgcat::mcset zh {Multiple Extension Frames} ::msgcat::mcset zh {Multiple WCS} ::msgcat::mcset zh {NRRD} ::msgcat::mcset zh {Name Resolution} ::msgcat::mcset zh {Name Server} ::msgcat::mcset zh {Name or Designation} ::msgcat::mcset zh {Name} ::msgcat::mcset zh {Native Dialog} ::msgcat::mcset zh {New Features} ::msgcat::mcset zh {New Frame 3D} ::msgcat::mcset zh {New Frame RGB} ::msgcat::mcset zh {New Frame each Time} ::msgcat::mcset zh {New Frame} [encoding convertfrom big5 "\xB7\x73 \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {New Group} ::msgcat::mcset zh {New} ::msgcat::mcset zh {Next Frame} [encoding convertfrom big5 "\xAB\xE1 \xA4\x40 \xBC\x68 \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {Next} ::msgcat::mcset zh {No Catalog specified} ::msgcat::mcset zh {No Data Available} ::msgcat::mcset zh {No Items Found} ::msgcat::mcset zh {No current frame} ::msgcat::mcset zh {Non-zero} ::msgcat::mcset zh {None} ::msgcat::mcset zh {Normal} ::msgcat::mcset zh {North} ::msgcat::mcset zh {Not Found} ::msgcat::mcset zh {Not Supported} ::msgcat::mcset zh {Number of Samples} ::msgcat::mcset zh {Number of Threads} ::msgcat::mcset zh {Number of Ticks} ::msgcat::mcset zh {Number} ::msgcat::mcset zh {Numerics} [encoding convertfrom big5 "\xBC\xC6 \xAD\xC8"] ::msgcat::mcset zh {OK} ::msgcat::mcset zh {Object} [encoding convertfrom big5 "\xA4\xD1 \xC5\xE9 \xA6\x57 \xBA\xD9"] ::msgcat::mcset zh {Open File} ::msgcat::mcset zh {Open TCL Console} ::msgcat::mcset zh {Open URL} ::msgcat::mcset zh {Open as} ::msgcat::mcset zh {Open} [encoding convertfrom big5 "\xB6\x7D \xB1\xD2"] ::msgcat::mcset zh {Operator} ::msgcat::mcset zh {Orientation} [encoding convertfrom big5 "\xA4\xE8 \xA6\x56"] ::msgcat::mcset zh {Origin} ::msgcat::mcset zh {Oscillate} ::msgcat::mcset zh {Other Color} ::msgcat::mcset zh {Other Font Size} ::msgcat::mcset zh {Other} [encoding convertfrom big5 "\xA8\xE4 \xA5\xA6"] ::msgcat::mcset zh {Outer} ::msgcat::mcset zh {Overlap} ::msgcat::mcset zh {PS Page Setup} ::msgcat::mcset zh {PS Print} ::msgcat::mcset zh {Page Setup} ::msgcat::mcset zh {Page Source} ::msgcat::mcset zh {Pan To} ::msgcat::mcset zh {Pan Zoom Rotate Parameters} [encoding convertfrom big5 "\xC1\x59 \xA9\xF1 \xB1\xDB \xC2\xE0 \xB0\xD1 \xBC\xC6"] ::msgcat::mcset zh {Pan Zoom} ::msgcat::mcset zh {Pan then Zoom} ::msgcat::mcset zh {Panda} ::msgcat::mcset zh {Panner} [encoding convertfrom big5 "\xC1\x59 \xB9\xCF"] ::msgcat::mcset zh {Pan} ::msgcat::mcset zh {Parameters} ::msgcat::mcset zh {Password} ::msgcat::mcset zh {Paste Contours} ::msgcat::mcset zh {Paste} ::msgcat::mcset zh {Physical} ::msgcat::mcset zh {Pixel Distribution} ::msgcat::mcset zh {Pixel Size} ::msgcat::mcset zh {Pixel Table} ::msgcat::mcset zh {Pixels} ::msgcat::mcset zh {Play} ::msgcat::mcset zh {Please Select a Region} ::msgcat::mcset zh {Please change the file's permission to disable other users write access. Use anyway?} ::msgcat::mcset zh {Please specify width, height, and either name or (ra,dec)} ::msgcat::mcset zh {Plot 2D} ::msgcat::mcset zh {Plot 3D} ::msgcat::mcset zh {Plot Title} ::msgcat::mcset zh {Plotting Regions} ::msgcat::mcset zh {Plot} ::msgcat::mcset zh {Plus} ::msgcat::mcset zh {Pointer} ::msgcat::mcset zh {Points} ::msgcat::mcset zh {Point} ::msgcat::mcset zh {Polygon} [encoding convertfrom big5 "\xA6\x68 \xA8\xA4 \xA7\xCE"] ::msgcat::mcset zh {Portrait} ::msgcat::mcset zh {Poster} ::msgcat::mcset zh {Postscript Page Setup} ::msgcat::mcset zh {Postscript Print} ::msgcat::mcset zh {Postscript} ::msgcat::mcset zh {Power} [encoding convertfrom big5 "\xAB\xFC \xBC\xC6"] ::msgcat::mcset zh {Preferences} [encoding convertfrom big5 "\xB0\xBE \xA6\x6E \xB3\x5D \xA9\x77"] ::msgcat::mcset zh {Preserve During Load} ::msgcat::mcset zh {Previous Frame} [encoding convertfrom big5 "\xAB\x65 \xA4\x40 \xBC\x68 \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {Previous} ::msgcat::mcset zh {Prev} ::msgcat::mcset zh {Print Coordinates} ::msgcat::mcset zh {Print To} ::msgcat::mcset zh {Printer} ::msgcat::mcset zh {Print} [encoding convertfrom big5 "\xA6\x43 \xA6\x4C"] ::msgcat::mcset zh {Projection} ::msgcat::mcset zh {Properties} [encoding convertfrom big5 "\xA6\x43 \xA6\x4C"] ::msgcat::mcset zh {Property} ::msgcat::mcset zh {Proxy Host} ::msgcat::mcset zh {Proxy Port} ::msgcat::mcset zh {Publication} ::msgcat::mcset zh {Quadratic} ::msgcat::mcset zh {RGB Array} ::msgcat::mcset zh {RGB Cube} ::msgcat::mcset zh {RGB Image} ::msgcat::mcset zh {RGB} ::msgcat::mcset zh {Radial Profile} ::msgcat::mcset zh {Radial} ::msgcat::mcset zh {Radius} ::msgcat::mcset zh {Raised} ::msgcat::mcset zh {Range} ::msgcat::mcset zh {Redo} ::msgcat::mcset zh {Red} ::msgcat::mcset zh {Reference Manual} ::msgcat::mcset zh {Reference} ::msgcat::mcset zh {Refresh Frame} [encoding convertfrom big5 "\xAD\xAB \xB7\x73 \xBE\xE3 \xB2\x7A \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {Refresh} ::msgcat::mcset zh {Region Parameters} [encoding convertfrom big5 "\xB0\xCF \xB0\xEC \xB0\xD1\xBC\xC6"] ::msgcat::mcset zh {Region} [encoding convertfrom big5 "\xB0\xCF \xB0\xEC"] ::msgcat::mcset zh {Release Notes} ::msgcat::mcset zh {Release} ::msgcat::mcset zh {Relief} ::msgcat::mcset zh {Reload} ::msgcat::mcset zh {Render} ::msgcat::mcset zh {Repeat} ::msgcat::mcset zh {Reset Colormap} [encoding convertfrom big5 "\xAD\xAB \xB3\x5D \xC3\x43 \xA6\xF2"] ::msgcat::mcset zh {Reset Frame} [encoding convertfrom big5 "\xAD\xAB \xB3\x5D \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {Reset} ::msgcat::mcset zh {Restore} ::msgcat::mcset zh {Retrieve} ::msgcat::mcset zh {Return} ::msgcat::mcset zh {Right} ::msgcat::mcset zh {Roman} ::msgcat::mcset zh {Rotate} [encoding convertfrom big5 "\xB1\xDB \xC2\xE0"] ::msgcat::mcset zh {Rows} ::msgcat::mcset zh {Row} ::msgcat::mcset zh {Ruler} [encoding convertfrom big5 "\xA4\xD8 \xB3\x57"] ::msgcat::mcset zh {SAMP Image} ::msgcat::mcset zh {SAMP Table} ::msgcat::mcset zh {SAMP: already connected} ::msgcat::mcset zh {SAMP: internal error} ::msgcat::mcset zh {SAMP: not connected} ::msgcat::mcset zh {SAMP: unable to locate HUB} ::msgcat::mcset zh {SAMP} ::msgcat::mcset zh {Sample Increment} ::msgcat::mcset zh {Sample Parameters} ::msgcat::mcset zh {Samples per Line} ::msgcat::mcset zh {Sample} ::msgcat::mcset zh {Save 3D Movie} ::msgcat::mcset zh {Save Color Tags} ::msgcat::mcset zh {Save Colormap} ::msgcat::mcset zh {Save Configuration} ::msgcat::mcset zh {Save Contour Levels} ::msgcat::mcset zh {Save Contours} ::msgcat::mcset zh {Save Contrast/Bias} ::msgcat::mcset zh {Save Data} ::msgcat::mcset zh {Save Image on Download} ::msgcat::mcset zh {Save Image} [encoding convertfrom big5 "\xC0\x78 \xA6\x73 \xBC\x76 \xB9\xB3"] ::msgcat::mcset zh {Save Regions} [encoding convertfrom big5 "\xC0\x78 \xA6\x73 \xB0\xCF \xB0\xEC"] ::msgcat::mcset zh {Save Template} ::msgcat::mcset zh {Save as} ::msgcat::mcset zh {Save} [encoding convertfrom big5 "\xC0\x78 \xA6\x73"] ::msgcat::mcset zh {Scale Parameters} [encoding convertfrom big5 "\xA6\xE2 \xB6\xA5 \xB0\xD1 \xBC\xC6"] ::msgcat::mcset zh {Scale and Limits} ::msgcat::mcset zh {Scale} [encoding convertfrom big5 "\xA6\xE2 \xB6\xA5"] ::msgcat::mcset zh {Scan} ::msgcat::mcset zh {Scatter Plot Tool} ::msgcat::mcset zh {Scope} ::msgcat::mcset zh {Search for Catalogs} ::msgcat::mcset zh {Searching for catalogs} ::msgcat::mcset zh {Seconds} ::msgcat::mcset zh {Segment} ::msgcat::mcset zh {Select All} [encoding convertfrom big5 "\xBF\xEF \xA8\xFA \xA5\xFE \xB3\xA1"] ::msgcat::mcset zh {Select Coordinate System } ::msgcat::mcset zh {Select None} [encoding convertfrom big5 "\xA8\xFA \xAE\xF8 \xBF\xEF \xA8\xFA"] ::msgcat::mcset zh {Select} ::msgcat::mcset zh {Send} ::msgcat::mcset zh {Server} ::msgcat::mcset zh {Sexagesimal} ::msgcat::mcset zh {Shape} [encoding convertfrom big5 "\xA7\xCE \xAA\xAC"] ::msgcat::mcset zh {Show All} [encoding convertfrom big5 "\xC5\xE3 \xA5\xDC \xA5\xFE \xB3\xA1"] ::msgcat::mcset zh {Show Command} ::msgcat::mcset zh {Show Compass} ::msgcat::mcset zh {Show Text} ::msgcat::mcset zh {Show/Hide Frames} ::msgcat::mcset zh {Show} [encoding convertfrom big5 "\xC5\xE3 \xA5\xDC"] ::msgcat::mcset zh {Simple Cross} ::msgcat::mcset zh {Simple Plus} ::msgcat::mcset zh {Single Frame} [encoding convertfrom big5 "\xB3\xE6 \xA4\x40 \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {Single} [encoding convertfrom big5 "\xB3\xE6 \xA4\x40"] ::msgcat::mcset zh {Sites} ::msgcat::mcset zh {Size/Radius} ::msgcat::mcset zh {Size} ::msgcat::mcset zh {Skip First} ::msgcat::mcset zh {Slice} ::msgcat::mcset zh {Smooth Parameters} ::msgcat::mcset zh {Smoothness} ::msgcat::mcset zh {Smooth} ::msgcat::mcset zh {Solid} ::msgcat::mcset zh {Sorry, DS9 does not support} ::msgcat::mcset zh {Sorry, DS9 requires a Truecolor8, Truecolor16, Truecolor24 visual be available} ::msgcat::mcset zh {Sort} ::msgcat::mcset zh {Source TCL} ::msgcat::mcset zh {Source} ::msgcat::mcset zh {Space Equal Distance} ::msgcat::mcset zh {Space Equal Value} ::msgcat::mcset zh {Spacing} ::msgcat::mcset zh {Sqrt} ::msgcat::mcset zh {Square Root} ::msgcat::mcset zh {Squared} ::msgcat::mcset zh {Square} ::msgcat::mcset zh {Stacked} ::msgcat::mcset zh {Starbase} ::msgcat::mcset zh {Startup} ::msgcat::mcset zh {Start} ::msgcat::mcset zh {Statistics} ::msgcat::mcset zh {Stats} ::msgcat::mcset zh {Status} ::msgcat::mcset zh {Step} ::msgcat::mcset zh {Stop} ::msgcat::mcset zh {Story of SAOImage DS9} ::msgcat::mcset zh {Story} ::msgcat::mcset zh {Sum} ::msgcat::mcset zh {Sunken} ::msgcat::mcset zh {Symbol Editor} ::msgcat::mcset zh {Symbol} ::msgcat::mcset zh {Tab-Separated-Value} ::msgcat::mcset zh {Table} ::msgcat::mcset zh {Tabloid} ::msgcat::mcset zh {Tag Color} ::msgcat::mcset zh {Task} ::msgcat::mcset zh {Template} [encoding convertfrom big5 "\xBC\xCB \xA5\xBB"] ::msgcat::mcset zh {Text Font} ::msgcat::mcset zh {Text} [encoding convertfrom big5 "\xA4\xE5 \xA6\x72"] ::msgcat::mcset zh {Then} ::msgcat::mcset zh {Thickness} ::msgcat::mcset zh {This analysis task is already running. Do you wish to kill it?} ::msgcat::mcset zh {This function is not available.} ::msgcat::mcset zh {This function is not currently supported for this port.} ::msgcat::mcset zh {Tickmarks} ::msgcat::mcset zh {Tile Frames} [encoding convertfrom big5 "\xA6\x58 \xAD\xAB \xBC\x76 \xB9\xB3 \xB5\xF8 \xB5\xA1"] ::msgcat::mcset zh {Tile Parameters} ::msgcat::mcset zh {Tile} [encoding convertfrom big5 "\xA6\x58 \xAD\xAB"] ::msgcat::mcset zh {Times} ::msgcat::mcset zh {Title} ::msgcat::mcset zh {Tophat} ::msgcat::mcset zh {Topographic} ::msgcat::mcset zh {Top} ::msgcat::mcset zh {To} ::msgcat::mcset zh {Transparency} ::msgcat::mcset zh {Triangle} ::msgcat::mcset zh {Type} ::msgcat::mcset zh {URL} ::msgcat::mcset zh {Unable to connect directly: using Web Proxy} ::msgcat::mcset zh {Unable to determine date of observation} ::msgcat::mcset zh {Unable to determine time of observation} ::msgcat::mcset zh {Unable to evaluate filter} ::msgcat::mcset zh {Unable to find SIAP window} ::msgcat::mcset zh {Unable to find URL column} ::msgcat::mcset zh {Unable to find catalog window} ::msgcat::mcset zh {Unable to find plot window} ::msgcat::mcset zh {Unable to load RGB image into a non-rgb frame} ::msgcat::mcset zh {Unable to load region file} ::msgcat::mcset zh {Unable to load} ::msgcat::mcset zh {Unable to locate URL} ::msgcat::mcset zh {Unable to match target with XPA Mime request} ::msgcat::mcset zh {Unable to open file} ::msgcat::mcset zh {Unable to process Analysis file} ::msgcat::mcset zh {Unable to save RGB image from a non-rgb frame} ::msgcat::mcset zh {Undo} ::msgcat::mcset zh {Unique} ::msgcat::mcset zh {Unists} ::msgcat::mcset zh {Units} ::msgcat::mcset zh {Unknown Colormap} ::msgcat::mcset zh {Unknown command} ::msgcat::mcset zh {Update Filter} ::msgcat::mcset zh {Update Group} ::msgcat::mcset zh {Update from Current Crosshair} ::msgcat::mcset zh {Update from Current Frame} ::msgcat::mcset zh {Update} ::msgcat::mcset zh {Upper Left Back} ::msgcat::mcset zh {Upper Left Front} ::msgcat::mcset zh {Upper Right Back} ::msgcat::mcset zh {Upper Right Front} ::msgcat::mcset zh {Use Authentication} ::msgcat::mcset zh {Use Current Frame on Download} ::msgcat::mcset zh {Use Internal Web Browser} ::msgcat::mcset zh {Use Proxy} ::msgcat::mcset zh {User Manual} ::msgcat::mcset zh {Username} ::msgcat::mcset zh {User} ::msgcat::mcset zh {Use} ::msgcat::mcset zh {VO Server} ::msgcat::mcset zh {VO} ::msgcat::mcset zh {Value} ::msgcat::mcset zh {Vector} [encoding convertfrom big5 "\xA6\x56 \xB6\x71"] ::msgcat::mcset zh {Vertical Graph} ::msgcat::mcset zh {Vertical Layout} ::msgcat::mcset zh {Vertical Text} ::msgcat::mcset zh {Vertical} [encoding convertfrom big5 "\xAB\xAB \xAA\xBD"] ::msgcat::mcset zh {View} [encoding convertfrom big5 "\xC0\xCB \xB5\xF8"] ::msgcat::mcset zh {Virtual Observatory} ::msgcat::mcset zh {WCS Parameters} ::msgcat::mcset zh {WCS} [encoding convertfrom big5 "\xA7\x79 \xBC\xD0"] ::msgcat::mcset zh {Wavelength} ::msgcat::mcset zh {Web Browser} ::msgcat::mcset zh {White} [encoding convertfrom big5 "\xA5\xD5 \xA6\xE2"] ::msgcat::mcset zh {Width} [encoding convertfrom big5 "\xBC\x65 \xAB\xD7"] ::msgcat::mcset zh {Window} ::msgcat::mcset zh {Words matching title, description} ::msgcat::mcset zh {X Axis Title} ::msgcat::mcset zh {X Grid} ::msgcat::mcset zh {XPA Information} ::msgcat::mcset zh {XPA not initialized} ::msgcat::mcset zh {XPA unable to verify hostname, setting XPA_METHOD to LOCAL} ::msgcat::mcset zh {XPA} ::msgcat::mcset zh {X} ::msgcat::mcset zh {Y Axis Title} ::msgcat::mcset zh {Y Grid} ::msgcat::mcset zh {Yellow} [encoding convertfrom big5 "\xB6\xC0 \xA6\xE2"] ::msgcat::mcset zh {Y} ::msgcat::mcset zh {Z Axis Scale} ::msgcat::mcset zh {ZScale Parameters} ::msgcat::mcset zh {Zero} ::msgcat::mcset zh {Zoom Fit} ::msgcat::mcset zh {Zoom In} [encoding convertfrom big5 "\xA9\xF1 \xA4\x6A"] ::msgcat::mcset zh {Zoom Out} [encoding convertfrom big5 "\xC1\x59 \xA4\x70"] ::msgcat::mcset zh {Zoom} [encoding convertfrom big5 "\xC1\x59 \xA9\xF1"] ::msgcat::mcset zh {and} ::msgcat::mcset zh {blue} [encoding convertfrom big5 "\xC2\xC5"] ::msgcat::mcset zh {b} ::msgcat::mcset zh {color} ::msgcat::mcset zh {cool} ::msgcat::mcset zh {green} [encoding convertfrom big5 "\xBA\xF1"] ::msgcat::mcset zh {grey} [encoding convertfrom big5 "\xA6\xC7"] ::msgcat::mcset zh {g} ::msgcat::mcset zh {h5utils} ::msgcat::mcset zh {heat} ::msgcat::mcset zh {not} ::msgcat::mcset zh {only} ::msgcat::mcset zh {or center of data} ::msgcat::mcset zh {rainbow} ::msgcat::mcset zh {red} [encoding convertfrom big5 "\xAC\xF5"] ::msgcat::mcset zh {rows of data have been downloaded. More may be available. You may wish to adjust the maximum allowed} ::msgcat::mcset zh {r} ::msgcat::mcset zh {staircase} ::msgcat::mcset zh {standard} ::msgcat::mcset zh {x} ::msgcat::mcset zh {} saods9/ds9/library/2mass.tcl000644 000765 000000 00000006453 12741011522 016263 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc 2MASSDef {} { global twomass global itwomass set itwomass(top) .twomass set itwomass(mb) .twomassmb set twomass(sky) fk5 set twomass(rformat) arcmin set twomass(width) 15 set twomass(height) 15 set twomass(mode) new set twomass(save) 0 set twomass(survey) j } proc 2MASSDialog {} { global twomass global itwomass global wcs if {[winfo exists $itwomass(top)]} { raise $itwomass(top) return } set varname dtwomass upvar #0 $varname var global $varname set var(top) $itwomass(top) set var(mb) $itwomass(mb) set var(sky) $twomass(sky) set var(skyformat) $wcs(skyformat) set var(rformat) $twomass(rformat) set var(width) $twomass(width) set var(height) $twomass(height) # not used set var(width,pixels) 300 set var(height,pixels) 300 set var(mode) $twomass(mode) set var(save) $twomass(save) set var(survey) $twomass(survey) IMGSVRInit $varname "IPAC-2MASS [msgcat::mc {Server}]" \ 2MASSExec 2MASSAck ARDone ARError $var(mb) add cascade -label Survey -menu $var(mb).survey menu $var(mb).survey $var(mb).survey add radiobutton -label {2MASS (J Band)} \ -variable ${varname}(survey) -value j $var(mb).survey add radiobutton -label {2MASS (H Band)} \ -variable ${varname}(survey) -value h $var(mb).survey add radiobutton -label {2MASS (K Band)} \ -variable ${varname}(survey) -value k IMGSVRUpdate $varname } proc 2MASSExec {varname} { upvar #0 $varname var global $varname if {$var(save)} { set var(fn) [SaveFileDialog savefitsfbox] if {$var(fn) == {}} { ARDone $varname return } } else { set var(fn) [tmpnam {.fits.gz}] } # size - convert to arcsec switch -- $var(rformat) { degrees { set ww [expr $var(width)*60.*60.] set hh [expr $var(height)*60.*60.] } arcmin { set ww [expr $var(width)*60.] set hh [expr $var(height)*60.] } arcsec { set ww $var(width) set hh $var(height) } } # now to radius set rr [expr sqrt($ww*$ww+$hh*$hh)/2.] if {$rr>1024} { set rr 1024 } set foo "$var(x) $var(y)" set var(query) [http::formatQuery objstr $foo size $rr band $var(survey)] set url "http://irsa.ipac.caltech.edu/cgi-bin/Oasis/2MASSImg/nph-2massimg" IMGSVRGetURL $varname $url } proc 2MASSAck {varname} { upvar #0 $varname var global $varname set msg {Acknowledgments for the 2MASS This publication makes use of data products from the Two Micron All Sky Survey, which is a joint project of the University of Massachusetts and the Infrared Processing and Analysis Center/California Institute of Technology, funded by the National Aeronautics and Space Administration and the National Science Foundation. } SimpleTextDialog "${varname}ack" [msgcat::mc {Acknowledgment}] \ 80 40 insert top $msg } # Process Cmds proc Process2MASSCmd {varname iname} { upvar $varname var upvar $iname i 2MASSDialog IMGSVRProcessCmd $varname $iname dtwomass } proc ProcessSend2MASSCmd {proc id param} { 2MASSDialog IMGSVRProcessSendCmd $proc $id $param dtwomass } saods9/ds9/library/3d.tcl000644 000765 000000 00000033325 12710211333 015540 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc 3DDef {} { global threed global ithreed global pthreed set ithreed(top) .threed set ithreed(mb) .threedmb set ithreed(status) 0 set threed(az) 0 set threed(el) 0 set threed(scale) 1 set threed(method) mip set threed(background) none set threed(highlite) 1 set threed(highlite,color) cyan set threed(border) 1 set threed(border,color) blue set threed(compass) 0 set threed(compass,color) green array set pthreed [array get threed] unset pthreed(az) unset pthreed(el) } # used by backup proc 3DDialog {} { global threed global ithreed global ds9 # see if we already have a window visible if {[winfo exists $ithreed(top)]} { raise $ithreed(top) return } # create the 3d window set w $ithreed(top) set mb $ithreed(mb) Toplevel $w $mb 6 [msgcat::mc {3D}] 3DDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit $mb add cascade -label [msgcat::mc {Render}] -menu $mb.render $mb add cascade -label [msgcat::mc {Highlite}] -menu $mb.highlite $mb add cascade -label [msgcat::mc {Border}] -menu $mb.border # $mb add cascade -label [msgcat::mc {Compass}] -menu $mb.compass menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] -command 3DApplyDialog $mb.file add command -label [msgcat::mc {Reset}] -command 3DResetDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] -command 3DDestroyDialog EditMenu $mb ithreed menu $mb.render $mb.render add radiobutton -label [msgcat::mc {MIP}] \ -variable threed(method) -value {mip} -command 3DRenderMethod $mb.render add radiobutton -label [msgcat::mc {AIP}] \ -variable threed(method) -value {aip} -command 3DRenderMethod $mb.render add separator $mb.render add radiobutton -label [msgcat::mc {None}] \ -variable threed(background) -value {none} -command 3DBackground $mb.render add radiobutton -label [msgcat::mc {Azimuth}] \ -variable threed(background) -value {azimuth} -command 3DBackground $mb.render add radiobutton -label [msgcat::mc {Elevation}] \ -variable threed(background) -value {elevation} -command 3DBackground menu $mb.highlite $mb.highlite add checkbutton -label [msgcat::mc {Show}] \ -variable threed(highlite) -command 3DHighlite $mb.highlite add separator $mb.highlite add cascade -label [msgcat::mc {Color}] \ -menu $mb.highlite.color ColorMenu $mb.highlite.color threed highlite,color 3DHighliteColor menu $mb.border $mb.border add checkbutton -label [msgcat::mc {Show}] \ -variable threed(border) -command 3DBorder $mb.border add separator $mb.border add cascade -label [msgcat::mc {Color}] \ -menu $mb.border.color ColorMenu $mb.border.color threed border,color 3DBorderColor menu $mb.compass $mb.compass add checkbutton -label [msgcat::mc {Show}] -variable threed(compass) -command 3DCompass $mb.compass add separator $mb.compass add cascade -label [msgcat::mc {Color}] -menu $mb.compass.color ColorMenu $mb.compass.color threed compass,color 3DCompassColor # Param set f [ttk::frame $w.param] slider $f.elslider -90 90 [msgcat::mc {Elevation}] threed(el) \ [list 3DViewMotion] slider $f.azslider -180 180 [msgcat::mc {Azimuth}] threed(az) \ [list 3DViewMotion] bind $f.elslider.slider {3DViewButton} bind $f.elslider.slider {3DViewRelease} bind $f.azslider.slider {3DViewButton} bind $f.azslider.slider {3DViewRelease} grid $f.azslider -padx 2 -pady 2 -sticky ew grid $f.elslider -padx 2 -pady 2 -sticky ew grid columnconfigure $f 0 -weight 1 # for order of focus raise $f.elslider # Scale set f [ttk::frame $w.scale] ttk::label $f.tscale -text [msgcat::mc {Z Axis Scale}] ttk::entry $f.scale -textvariable threed(scale) -width 7 grid $f.tscale $f.scale -padx 2 -pady 2 -sticky ew # Status set f [ttk::frame $w.status] ttk::label $f.tstatus -text [msgcat::mc {Status}] ttk::progressbar $f.status -variable ithreed(status) -length 350 grid $f.tstatus $f.status -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] -command 3DApplyDialog ttk::button $f.reset -text [msgcat::mc {Reset}] -command 3DResetDialog ttk::button $f.close -text [msgcat::mc {Close}] -command 3DDestroyDialog pack $f.apply $f.reset $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal ttk::separator $w.sep2 -orient horizontal ttk::separator $w.sep3 -orient horizontal pack $w.buttons $w.sep $w.status $w.sep2 -side bottom -fill x pack $w.param $w.sep3 $w.scale -side top -fill x Update3DDialog } proc 3DDestroyDialog {} { global threed global ithreed if {[winfo exists $ithreed(top)]} { destroy $ithreed(top) destroy $ithreed(mb) } } proc 3DApplyDialog {} { global threed global current global grid if {$current(frame) != {}} { $current(frame) 3d view $threed(az) $threed(el) $current(frame) 3d scale $threed(scale) if {$grid(view)} { GridUpdateCurrent } } } proc 3DResetDialog {} { global threed set threed(az) 0 set threed(el) 0 3DViewPoint set threed(scale) 1 3DScale } proc Update3DDialog {} { global threed global ithreed global current global debug if {$debug(tcl,update)} { puts stderr "Update3DDialog" } set w $ithreed(top) if {[winfo exists $ithreed(top)] && $current(frame) != {}} { set rr [$current(frame) get 3d view] set threed(az) [lindex $rr 0] set threed(el) [lindex $rr 1] set threed(scale) [$current(frame) get 3d scale] set threed(method) [$current(frame) get 3d method] set threed(background) [$current(frame) get 3d background] set threed(highlite) [$current(frame) get 3d highlite] set threed(highlite,color) [$current(frame) get 3d highlite color] set threed(border) [$current(frame) get 3d border] set threed(border,color) [$current(frame) get 3d border color] set threed(compass) [$current(frame) get 3d compass] set threed(compass,color) [$current(frame) get 3d compass color] } } proc 3DBackup {ch which} { puts $ch "$which 3d view [$which get 3d view]" puts $ch "$which 3d scale [$which get 3d scale]" puts $ch "$which 3d method [$which get 3d method]" puts $ch "$which 3d highlite [$which get 3d highlite]" puts $ch "$which 3d border [$which get 3d border]" puts $ch "$which 3d background [$which get 3d background]" # this must come after panto and blockto puts $ch "$which 3d view point [$which get 3d view point]" } proc 3DViewPoint {} { global threed global current global grid if {$current(frame) != {}} { $current(frame) 3d view $threed(az) $threed(el) if {$grid(view)} { GridUpdateCurrent } } } proc 3DViewButton {} { global threed global current if {$current(frame) != {}} { $current(frame) 3d view begin $threed(az) $threed(el) } } proc 3DViewMotion {} { global threed global current if {$current(frame) != {}} { $current(frame) 3d view motion $threed(az) $threed(el) } } proc 3DViewRelease {} { global threed global current if {$current(frame) != {}} { $current(frame) 3d view end $threed(az) $threed(el) } } proc 3DScale {} { global threed global current global grid if {$current(frame) != {}} { $current(frame) 3d scale $threed(scale) if {$grid(view)} { GridUpdateCurrent } } } proc 3DRenderMethod {} { global threed global current if {$current(frame) != {}} { $current(frame) 3d method $threed(method) } } proc 3DHighlite {} { global threed global current if {$current(frame) != {}} { $current(frame) 3d highlite $threed(highlite) } } proc 3DHighliteColor {} { global threed global current if {$current(frame) != {}} { $current(frame) 3d highlite color $threed(highlite,color) } } proc 3DBorder {} { global threed global current if {$current(frame) != {}} { $current(frame) 3d border $threed(border) } } proc 3DBorderColor {} { global threed global current if {$current(frame) != {}} { $current(frame) 3d border color $threed(border,color) } } proc 3DCompass {} { global threed global current if {$current(frame) != {}} { $current(frame) 3d compass $threed(compass) } } proc 3DCompassColor {} { global threed global current if {$current(frame) != {}} { $current(frame) 3d compass color $threed(compass,color) } } proc 3DBackground {} { global threed global current if {$current(frame) != {}} { $current(frame) 3d background $threed(background) } } # Prefs proc PrefsDialog3d {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {3D}] lappend dprefs(tabs) [ttk::frame $w.threed] set f [ttk::labelframe $w.threed.misc -text [msgcat::mc {Render}]] ttk::label $f.tmethod -text [msgcat::mc {Method}] ttk::menubutton $f.method -textvariable pthreed(method) \ -menu $f.method.menu ttk::label $f.tbackground -text [msgcat::mc {Background}] ttk::menubutton $f.background -textvariable pthreed(background) \ -menu $f.background.menu grid $f.tmethod $f.method -padx 2 -pady 2 -sticky w grid $f.tbackground $f.background -padx 2 -pady 2 -sticky w set m $f.method.menu menu $m $m add radiobutton -label [msgcat::mc {MIP}] \ -variable pthreed(method) -value {mip} $m add radiobutton -label [msgcat::mc {AIP}] \ -variable pthreed(method) -value {aip} set m $f.background.menu menu $m $m add radiobutton -label [msgcat::mc {None}] \ -variable pthreed(background) -value {none} $m add radiobutton -label [msgcat::mc {Azimuth}] \ -variable pthreed(background) -value {azimuth} $m add radiobutton -label [msgcat::mc {Elevation}] \ -variable pthreed(background) -value {elevation} set f [ttk::labelframe $w.threed.highlite -text [msgcat::mc {Highlite}]] ttk::checkbutton $f.show -text [msgcat::mc {Show}] \ -variable pthreed(highlite) ttk::label $f.tcolor -text [msgcat::mc {Color}] ColorMenuButton $f.color pthreed highlite,color {} grid $f.show -padx 2 -pady 2 -sticky w grid $f.tcolor $f.color -padx 2 -pady 2 -sticky w set f [ttk::labelframe $w.threed.border -text [msgcat::mc {Border}]] ttk::checkbutton $f.show -text [msgcat::mc {Show}] \ -variable pthreed(border) ttk::label $f.tcolor -text [msgcat::mc {Color}] ColorMenuButton $f.color pthreed border,color {} grid $f.show -padx 2 -pady 2 -sticky w grid $f.tcolor $f.color -padx 2 -pady 2 -sticky w # set f [ttk::labelframe $w.threed.compass -text [msgcat::mc {Compass}]] # ttk::checkbutton $f.show -text [msgcat::mc {Show}] -variable pthreed(compass) # ttk::label $f.tcolor -text [msgcat::mc {Color}] # ColorMenuButton $f.color pthreed compass,color {} grid $f.show -padx 2 -pady 2 -sticky w grid $f.tcolor $f.color -padx 2 -pady 2 -sticky w pack $w.threed.misc $w.threed.highlite $w.threed.border \ -side top -fill both -expand true } proc Process3DCmd {varname iname} { upvar $varname var upvar $iname i global threed 3DDialog switch -- [string tolower [lindex $var $i]] { open {} close {3DDestroyDialog} az { incr i set threed(az) [lindex $var $i] 3DViewPoint } el { incr i set threed(el) [lindex $var $i] 3DViewPoint } view - vp { incr i set threed(az) [lindex $var $i] incr i set threed(el) [lindex $var $i] 3DViewPoint } scale { incr i set threed(scale) [lindex $var $i] 3DScale } method { incr i set threed(method) [lindex $var $i] 3DRenderMethod } background { incr i set threed(background) [lindex $var $i] 3DBackground } highlite { incr i switch [string tolower [lindex $var $i]] { color { incr i set threed(highlite,color) [lindex $var $i] 3DHighliteColor } default { set threed(highlite) [FromYesNo [lindex $var $i]] 3DHighlite } } } border { incr i switch [string tolower [lindex $var $i]] { color { incr i set threed(border,color) [lindex $var $i] 3DBorderColor } default { set threed(border) [FromYesNo [lindex $var $i]] 3DBorder } } } compass { incr i switch [string tolower [lindex $var $i]] { color { incr i set threed(compass,color) [lindex $var $i] 3DCompassColor } default { set threed(compass) [FromYesNo [lindex $var $i]] 3DCompass } } } default {Create3DFrame; incr i -1} } } proc ProcessSend3DCmd {proc id param} { global threed switch -- [string tolower [lindex $param 0]] { az {$proc $id "$threed(az)\n"} el {$proc $id "$threed(el)\n"} view - vp {$proc $id "$threed(az) $threed(el)\n"} scale {$proc $id "$threed(scale)\n"} method {$proc $id "$threed(method)\n"} background {$proc $id "$threed(background)\n"} highlite { switch [string tolower [lindex $param 1]] { color {$proc $id "$threed(highlite,color)\n"} default {$proc $id [ToYesNo $threed(highlite)]} } } border { switch [string tolower [lindex $param 1]] { color {$proc $id "$threed(border,color)\n"} default {$proc $id [ToYesNo $threed(border)]} } } compass { switch [string tolower [lindex $param 1]] { color {$proc $id "$threed(compass,color)\n"} default {$proc $id [ToYesNo $threed(compass)]} } } } } saods9/ds9/library/analysis.tcl000644 000765 000000 00000121224 12737003126 017061 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc AnalysisDef {} { global ianalysis global panalysis global ds9 set ianalysis(menu,count) 0 set ianalysis(menu,hmenu,count) 0 set ianalysis(menu,hmenu) {} set ianalysis(bind,count) 0 set ianalysis(param,count) 0 set ianalysis(param,seq) 0 set ianalysis(file) ".$ds9(app).ans" set ianalysis(alt) ".$ds9(app).analysis" # prefs only set panalysis(log) 0 set panalysis(autoload) 1 set panalysis(user) {} set panalysis(user2) {} set panalysis(user3) {} set panalysis(user4) {} } proc OpenAnalysisMenu {} { set fn [OpenFileDialog analysisfbox] if {$fn != {}} { ProcessAnalysisFile $fn } } proc ClearAnalysisMenu {} { global pds9 if {$pds9(confirm)} { if {[tk_messageBox -type okcancel -icon question -message [msgcat::mc {Clear External Analysis Commands?}]] != {ok}} { return } } ClearAnalysis } # Analysis Menu Delete proc ClearAnalysis {} { global ds9 global ianalysis # is something loaded? if {$ianalysis(menu,count) == 0} { return } # delete cascade menus for {set ii 0} {$ii<$ianalysis(menu,hmenu,count)} {incr ii} { destroy [lindex $ianalysis(menu,hmenu) $ii] } set ianalysis(menu,hmenu) {} set ianalysis(menu,hmenu,count) 0 # clear menu $ds9(mb).analysis delete $ds9(menu,size,analysis) end for {set ii 0} {$ii<$ianalysis(menu,count)} {incr ii} { unset ianalysis(menu,$ii,parent) unset ianalysis(menu,$ii,item) unset ianalysis(menu,$ii,template) unset ianalysis(menu,$ii,cmd) unset ianalysis(menu,$ii,inuse) unset ianalysis(menu,$ii,var) } set ianalysis(menu,count) 0 # clear all bindings, first foreach ff $ds9(frames) { for {set ii 0} {$ii<$ianalysis(bind,count)} {incr ii} { $ds9(canvas) bind $ff "$ianalysis(bind,$ii,item)" {} } } # clear bindings for {set ii 0} {$ii<$ianalysis(bind,count)} {incr ii} { unset ianalysis(bind,$ii,item) unset ianalysis(bind,$ii,template) unset ianalysis(bind,$ii,cmd) unset ianalysis(bind,$ii,inuse) } set ianalysis(bind,count) 0 # clear params for {set ii 0} {$ii<$ianalysis(param,count)} {incr ii} { for {set jj 0} {$jj<$ianalysis(param,$ii,count)} {incr jj} { unset ianalysis(param,$ii,$jj,var) unset ianalysis(param,$ii,$jj,type) unset ianalysis(param,$ii,$jj,title) unset ianalysis(param,$ii,$jj,default) unset ianalysis(param,$ii,$jj,last) unset ianalysis(param,$ii,$jj,value) unset ianalysis(param,$ii,$jj,info) } unset ianalysis(param,$ii,count) unset ianalysis(param,$ii) } set ianalysis(param,count) 0 } proc InitAnalysisFile {} { global ianalysis global panalysis global ds9 set done {} # autoload if {$panalysis(autoload)} { foreach dir [list {.} "[GetEnvHome]/bin" {/usr/local/bin} {/opt/local/bin} {/soft/saord/bin}] { foreach fn [glob -directory $dir -nocomplain "*.ds9"] { if {[file exists $fn]} { ProcessAnalysisFile $fn lappend done $fn } } } } # default name ds9.ans # backward compatible ds9.analysis foreach ff {{.} {~}} { foreach gg {{} {.}} { foreach ext {{ans} {analysis}} { set fn "$ff/$gg$ds9(app).$ext" if {[file exists $fn]} { if {[lsearch $done $fn] == -1} { ProcessAnalysisFile $fn lappend done $fn } } } } } # user specified foreach ii {{user} {user2} {user3} {user4}} { if {[info exists panalysis($ii)]} { set fn $panalysis($ii) if {[file exists $fn]} { if {[lsearch $done $fn] == -1} { ProcessAnalysisFile $fn lappend done $fn } } } } UpdateAnalysisMenu } proc ProcessAnalysisFile {fn} { global env # check for simple file if {[file exists "$fn"] && [file isfile "$fn"] && ![file executable "$fn"] && ![file isdirectory "$fn"]} { set ch [open $fn r] set data [read $ch] close $ch if {![ProcessAnalysis data]} { Error "[msgcat::mc {Unable to process Analysis file}] $fn" return } # add directory to path set env(PATH) "[file dirname $fn]:$env(PATH)" } else { Error "[msgcat::mc {Unable to open file}] $fn" } } proc ProcessAnalysis {varname} { upvar $varname var global ds9 global ianalysis # simple check for ascii data if {![string is ascii $var]} { return 0 } set state 1 set baseparent $ds9(mb).analysis set currentparent $baseparent set parentstack $baseparent $baseparent add separator set lines [split $var \n] set l [llength $lines] for {set ii 0} {$ii<$l} {incr ii} { set line [string trim [lindex $lines $ii]] # eat empty lines and comments for all except help if {$state != 6} { # empty line if {[string length $line] == 0} continue # comments if {[string range $line 0 0] == "\#"} continue # strip any end of line comments set id [string first "\#" $line] if {$id > 0} { set line [string range $line 0 [expr $id-1]] } } switch -- $state { 1 { # param if {[lindex $line 0] == {param}} { if {[lindex $line 1] != {}} { set ianalysis(param,$ianalysis(param,count)) \ [lindex $line 1] set ianalysis(param,$ianalysis(param,count),count) 0 set state 5 } continue } # help if {[lindex $line 0] == {help}} { set id [string first " " $line] if {$id > 0} { set item [string range $line [expr $id+1] end] } else { set item Help } set i $ianalysis(menu,count) set ianalysis(menu,$i,parent) $currentparent set ianalysis(menu,$i,item) $item set ianalysis(menu,$i,template) {*} set ianalysis(menu,$i,cmd) {help} set ianalysis(menu,$i,inuse) 0 set ianalysis(menu,$i,var) {} $currentparent add command -label $item \ -command [list AnalysisTask $i menu] set state 6 continue } # hmenu if {[lindex $line 0] == {hmenu}} { set id [string first " " $line] if {$id > 0} { set item [string range $line [expr $id+1] end] } else { set item Tasks } # make the menu label unique set nmenu "$currentparent.hmenu$ianalysis(menu,hmenu,count)" lappend ianalysis(menu,hmenu) $nmenu incr ianalysis(menu,hmenu,count) menu $nmenu $currentparent add cascade -label "$item" -menu $nmenu set currentparent $nmenu lappend parentstack $currentparent continue } # end hmenu if {[lindex $line 0] == {endhmenu} || [lindex $line 0] == {end}} { set parentstack [lreplace $parentstack end end] set currentparent [lindex $parentstack end] continue } if {[lindex $line 0] == {---}} { $currentparent add separator continue } # assume new command set item "$line" set template {} set type {} set cmd {} set state 2 } 2 { set template "$line" set state 3 } 3 { set type "$line" set state 4 } 4 { set cmd "$line" if {$item != {} && $template != {} && $type != {} && $cmd != {}} { switch -- [lindex $type 0] { bind { set b [lindex $type 1] if {$b != {}} { set i $ianalysis(bind,count) set ianalysis(bind,$i,item) "<$b>" set ianalysis(bind,$i,template) "$template" set ianalysis(bind,$i,cmd) "$cmd" set ianalysis(bind,$i,inuse) 0 incr ianalysis(bind,count) } } web { set i $ianalysis(menu,count) set ianalysis(menu,$i,parent) $currentparent set ianalysis(menu,$i,item) $item set ianalysis(menu,$i,template) "$template" set ianalysis(menu,$i,cmd) {web} set ianalysis(menu,$i,inuse) 0 set ianalysis(menu,$i,var) "$cmd" $currentparent add command -label "$item" \ -command [list AnalysisTask $i menu] incr ianalysis(menu,count) } menu { set i $ianalysis(menu,count) set ianalysis(menu,$i,parent) $currentparent set ianalysis(menu,$i,item) "$item" set ianalysis(menu,$i,template) "$template" set ianalysis(menu,$i,cmd) "$cmd" set ianalysis(menu,$i,inuse) 0 set ianalysis(menu,$i,var) {} $currentparent add check -label "$item" \ -command [list AnalysisTask $i menu] \ -variable ianalysis(menu,$i,inuse) \ -selectcolor green incr ianalysis(menu,count) } default { # something really wrong here, abort return 0 } } } set state 1 } 5 { # end param if {[lindex $line 0] == {endparam} || [lindex $line 0] == {end}} { incr ianalysis(param,count) set state 1 continue } if {[string range $line 0 0] == {@}} { ParseIRAFParam [string range $line 1 end] continue } set i $ianalysis(param,count) set j $ianalysis(param,$i,count) set ianalysis(param,$i,$j,var) [lindex $line 0] set ianalysis(param,$i,$j,type) [lindex $line 1] set ianalysis(param,$i,$j,title) [lindex $line 2] # default can contain the full menu 'aaa|bbb|ccc' set ianalysis(param,$i,$j,default) [lindex $line 3] # set last to first item set ianalysis(param,$i,$j,last) \ [lindex [split [lindex $line 3] |] 0] # and set value to last set ianalysis(param,$i,$j,value) \ $ianalysis(param,$i,$j,last) set ianalysis(param,$i,$j,info) [lindex $line 4] incr ianalysis(param,$i,count) } 6 { # end help if {[lindex $line 0] == {endhelp} || [lindex $line 0] == {end}} { incr ianalysis(menu,count) set state 1 continue } set i $ianalysis(menu,count) append ianalysis(menu,$i,var) "$line\n" } } } # events UnBindEventsCanvas BindEventsCanvas UpdateAnalysisMenu return 1 } proc AnalysisTask {i which {frame {}} {x 0} {y 0} {sync 0}} { global ianalysis global current if {$frame == {}} { set frame $current(frame) } switch -- $ianalysis($which,$i,cmd) { help { AnalysisText "at${which}${i}" $ianalysis($which,$i,item) \ $ianalysis($which,$i,var) insert } web { if {$frame != {}} { AnalysisWebDoit $i $which $frame $x $y $sync } } default { if {$frame != {}} { AnalysisTaskDoit $i $which $frame $x $y $sync } } } } proc AnalysisWebDoit {i which frame x y sync} { global ianalysis global panalysis set cmd "$ianalysis($which,$i,var)" # do select macro expansion # escaped macros SetEscapedMacros cmd # $xpa_method ParseXPAMethodMacro cmd # $xpa ParseXPAMacro cmd # $vo_method ParseVOMethodMacro cmd # $xdim,$ydim,$bitpix ParseXYBitpixMacro cmd $frame # $filename[$regions] ParseFilenameRegionMacro cmd $frame # $filename ParseFilenameMacro cmd $frame # $filedialog ParseFileDialogMacro cmd # $regions ParseRegionMacro cmd $frame # $env ParseEnvMacro cmd # $pan ParsePanMacro cmd $frame # $value ParseValueMacro cmd $frame $x $y # $x,$y ParseXYMacro cmd $frame $x $y # $z ParseZMacro cmd $frame # escaped macros UnsetEscapedMacros cmd if {$panalysis(log)} { SimpleTextDialog acmd [msgcat::mc {Analysis Commands}] \ 80 20 append bottom "$cmd\n" } HVAnalysisCmd "at${which}${i}" "$ianalysis($which,$i,item)" "$cmd" $sync } proc AnalysisTaskDoit {i which frame x y sync} { global ianalysis global pds9 if {[info exists ianalysis($which,$i,pid)]} { set ianalysis($which,$i,inuse) 1 if {$pds9(confirm)} { if {[tk_messageBox -type okcancel -icon question -message [msgcat::mc {This analysis task is already running. Do you wish to kill it?}]] != {ok}} { return } } if {[info exists ianalysis($which,$i,pid)]} { if {$ianalysis($which,$i,pid)>0} { eval "exec kill -9 $ianalysis($which,$i,pid)" } else { HVAnalysisCancel $which $i } } return } # don't turn on til task has started set ianalysis($which,$i,inuse) 0 set ianalysis($which,$i,start) {} set ianalysis($which,$i,start,fn) {} set ianalysis($which,$i,start,url) {} set ianalysis($which,$i,finish) {} set ianalysis($which,$i,result) {} set ianalysis($which,$i,plot,title) {} set ianalysis($which,$i,plot,xaxis) {} set ianalysis($which,$i,plot,yaxis) {} set ianalysis($which,$i,plot,dim) 2 set ianalysis($which,$i,image) {} set cmd $ianalysis($which,$i,cmd) # escaped macros SetEscapedMacros cmd # $data ParseDataMacro cmd $which $i # $xpa_method ParseXPAMethodMacro cmd # $xpa ParseXPAMacro cmd # $vo_method ParseVOMethodMacro cmd # $xdim,$ydim,$bitpix ParseXYBitpixMacro cmd $frame # $filename[$regions] ParseFilenameRegionMacro cmd $frame # $filename ParseFilenameMacro cmd $frame # $filedialog ParseFileDialogMacro cmd # $regions ParseRegionMacro cmd $frame # $env ParseEnvMacro cmd # $cen ParsePanMacro cmd $frame # $value ParseValueMacro cmd $frame $x $y # $x,$y ParseXYMacro cmd $frame $x $y # $z ParseZMacro cmd $frame # $message if {![ParseMessageMacro cmd]} { AnalysisTaskEnd $which $i return } # $entry if {![ParseEntryMacro cmd]} { AnalysisTaskEnd $which $i return } # $param if {![ParseParamMacro cmd]} { AnalysisTaskEnd $which $i return } # $text ParseTextMacro cmd $which $i # $plot ParsePlotMacro cmd $which $i # $null ParseNullMacro cmd $which $i # $url ParseURLMacro cmd $which $i # $geturl # do this next to last ParseGetURLMacro cmd $which $i # $image # do this last ParseImageMacro cmd $which $i # escaped macros UnsetEscapedMacros cmd # ok, we are off and running set ianalysis($which,$i,inuse) 1 switch -- $ianalysis($which,$i,start) { geturl { AnalysisGetURL $which $i $sync } default { AnalysisPipe $which $i $cmd $sync } } } proc AnalysisPipe {which i cmd sync} { global ianalysis global panalysis global current switch -- $ianalysis($which,$i,start) { data {$current(frame) save fits image file "\{$ianalysis($which,$i,start,fn)\}"} url {GetFileURL $ianalysis($which,$i,start,url) ianalysis($which,$i,start,fn)} } # last step, change all '][' into ',' so that multiple filters work right regsub -all {\]\[} $cmd "," cmd # log the command, if necessary if {$panalysis(log)} { SimpleTextDialog acmd [msgcat::mc {Analysis Commands}] \ 80 20 append bottom "$cmd\n" } switch -- $ianalysis($which,$i,finish) { null { # nothing is returned, so there is aways an error, # however, the command will be executed. catch {open "| $cmd"} global errorInfo set errorInfo {} AnalysisTaskEnd $which $i return } default { if {[catch {set ch [open "| $cmd"]}]} { Error [msgcat::mc {An error has occurred invoking the Analysis task}] AnalysisTaskEnd $which $i return } set ianalysis($which,$i,pid) [pid $ch] switch -- $ianalysis($which,$i,finish) { image { switch -- $ianalysis($which,$i,image) { new {CreateFrame} rgb {CreateRGBFrame} 3d {Create3DFrame} current {} } global loadParam set loadParam(load,type) channel set loadParam(load,layer) {} set loadParam(channel,name) $ch set loadParam(file,type) fits set loadParam(file,mode) {} set loadParam(file,name) \ "[string tolower [lindex $ianalysis($which,$i,item) 0]].fits" StartLoad ProcessLoad FinishLoad AnalysisTaskEnd $which $i } default { if {$sync} { AnalysisReaderAppend $ch $which $i AnalysisReaderFinish $ch $which $i } else { fileevent $ch readable \ [list AnalysisReader $ch $which $i] fconfigure $ch -blocking 0 -buffering none } } } } } } proc AnalysisReader {ch which i} { global ianalysis if {[eof $ch]} { AnalysisReaderFinish $ch $which $i return } AnalysisReaderAppend $ch $which $i } proc AnalysisReaderAppend {ch which i} { global ianalysis set r [read $ch] # for real-time update switch -- $ianalysis($which,$i,finish) { text { AnalysisText "at${which}${i}" $ianalysis($which,$i,item) $r append global debug if {$debug(tcl,idletasks)} { puts stderr "AnalysisReader" } update idletasks } } append ianalysis($which,$i,result) $r } proc AnalysisReaderFinish {ch which i} { global ianalysis catch {close $ch} switch -- $ianalysis($which,$i,finish) { null - image - text {} plot { PlotLine "at${which}${i}" \ $ianalysis($which,$i,item) \ $ianalysis($which,$i,plot,title) \ $ianalysis($which,$i,plot,xaxis) \ $ianalysis($which,$i,plot,yaxis) \ $ianalysis($which,$i,plot,dim) \ $ianalysis($which,$i,result) } plotstdin { AnalysisPlotStdin line "at${which}${i}" $ianalysis($which,$i,item) \ $ianalysis($which,$i,result) } default {puts stdout $ianalysis($which,$i,result)} } AnalysisTaskEnd $which $i } proc AnalysisPlotStdin {type w wtt result} { # if no result, just return if {$result == {}} { return } # check for $ERROR set id [string first {$ERROR} $result] if {$id >= 0} { AnalysisText "${w}e" $wtt \ [string range $result [expr $id+1] end] append return } # check for ERROR: set id [string first {ERROR:} $result] if {$id >= 0} { AnalysisText "${w}e" $wtt [string range $result $id end] append return } # check for $BEGINTEXT/$ENDTEXT # assume each is followed by a \n, so skip it if {[string range $result 0 9] == {$BEGINTEXT}} { set eid [string first {$ENDTEXT} $result] if {$eid > 0} { AnalysisText "${w}t" $wtt \ [string range $result 11 [expr $eid-1]] append set result [string range $result [expr $eid+9] end] } else { # looks like all text AnalysisText "${w}t" $wtt [string range $result 11 end] append return } } # now find the title, x axis label, y axis label, and dimension set id [string first "\n" $result] set tt [string range $result 0 $id] set rr [string range $result [expr $id+1] end] set l [llength $tt] set t [join [lrange $tt 0 [expr $l-4]]] set x [lindex $tt [expr $l-3]] set y [lindex $tt [expr $l-2]] set d [lindex $tt [expr $l-1]] if {$d != {} && $rr != {}} { switch $type { line {PlotLine $w $wtt $t $x $y $d $rr} bar {PlotBar $w $wtt $t $x $y $d $rr} scatter {PlotScatter $w $wtt $t $x $y $d $rr} } } else { Error "[msgcat::mc {Error}] [string range $tt 0 40]" } } proc AnalysisGetURL {which i sync} { global ianalysis global panalysis if {![ParseURL $ianalysis($which,$i,start,url) r]} { Error [msgcat::mc {An error has occurred invoking the Analysis task}] AnalysisTaskEnd $which $i return } # format all spaces and brackets set url {} regsub -all { } $ianalysis($which,$i,start,url) "%20" url regsub -all {\[} $url "%5B" url regsub -all {\]} $url "%5D" url if {$panalysis(log)} { SimpleTextDialog acmd [msgcat::mc {Analysis Commands}] \ 80 20 append bottom "$url\n" } set ianalysis($which,$i,pid) -1 HVAnalysisURL $which $i $url $sync } proc AnalysisProcessGetURL {which i result} { global ianalysis set ianalysis($which,$i,result) $result switch -- $ianalysis($which,$i,finish) { text {AnalysisText "at${which}${i}" $ianalysis($which,$i,item) \ $ianalysis($which,$i,result) append} plot {PlotLine "at${which}${i}" \ $ianalysis($which,$i,item) \ $ianalysis($which,$i,plot,title) \ $ianalysis($which,$i,plot,xaxis) \ $ianalysis($which,$i,plot,yaxis) \ $ianalysis($which,$i,plot,dim) \ $ianalysis($which,$i,result)} plotstdin {AnalysisPlotStdin line "at${which}${i}" \ $ianalysis($which,$i,item) \ $ianalysis($which,$i,result)} image { set fn "[string tolower [lindex $ianalysis($which,$i,item) 0]].fits" LoadVar result $fn {} {} } default {Error $ianalysis($which,$i,result)} } } proc AnalysisTaskEnd {which i} { global ianalysis set ianalysis($which,$i,inuse) 0 if {$ianalysis($which,$i,start,fn) != {}} { if {[file exists $ianalysis($which,$i,start,fn)]} { catch {file delete -force $ianalysis($which,$i,start,fn)} } } if {[info exists ianalysis($which,$i,pid)]} { unset ianalysis($which,$i,pid) } unset ianalysis($which,$i,start) unset ianalysis($which,$i,start,fn) unset ianalysis($which,$i,start,url) unset ianalysis($which,$i,finish) unset ianalysis($which,$i,result) unset ianalysis($which,$i,plot,title) unset ianalysis($which,$i,plot,xaxis) unset ianalysis($which,$i,plot,yaxis) unset ianalysis($which,$i,plot,dim) unset ianalysis($which,$i,image) } proc SetEscapedMacros {cmdname} { upvar $cmdname cmd global xpa set seq "WaJaWaJaW" if {[regexp {\$\$} $cmd]} { # fill with tempory sequence regsub -all {\$\$} $cmd $seq cmd } } proc UnsetEscapedMacros {cmdname} { upvar $cmdname cmd global xpa set seq "WaJaWaJaW" if {[regexp $seq $cmd]} { # reset to $ regsub -all $seq $cmd {\$} cmd } } proc ParseDataMacro {cmdname which i} { upvar $cmdname cmd global ianalysis set exp {\$data.?\|} if {[regexp $exp $cmd]} { set ianalysis($which,$i,start) data set ianalysis($which,$i,start,fn) [tmpnam {.fits}] regsub $exp $cmd "cat \{$ianalysis($which,$i,start,fn)\} |" cmd } } proc ParseVOMethodMacro {cmdname} { upvar $cmdname cmd global pvo if {[regexp {\$vo_method} $cmd]} { regsub -all {\$vo_method} $cmd $pvo(method) cmd } } proc ParseXPAMethodMacro {cmdname} { upvar $cmdname cmd global ds9 if {[regexp {\$xpa_method} $cmd]} { regsub -all {\$xpa_method} $cmd [XPAMethod] cmd } } proc ParseXPAMacro {cmdname} { upvar $cmdname cmd global ds9 if {[regexp {\$xpa} $cmd]} { regsub -all {\$xpa} $cmd $ds9(title) cmd } } proc ParseXYBitpixMacro {cmdname frame} { upvar $cmdname cmd if {$frame != {}} { if {[regexp {\$width} $cmd]} { regsub -all {\$width} $cmd [$frame get fits width] cmd } if {[regexp {\$height} $cmd]} { regsub -all {\$height} $cmd [$frame get fits height] cmd } if {[regexp {\$depth} $cmd]} { regsub -all {\$depth} $cmd [$frame get fits depth 2] cmd } if {[regexp {\$bitpix} $cmd]} { regsub -all {\$bitpix} $cmd [$frame get fits bitpix] cmd } if {[regexp {\$xdim} $cmd]} { regsub -all {\$xdim} $cmd [$frame get fits width] cmd } if {[regexp {\$ydim} $cmd]} { regsub -all {\$ydim} $cmd [$frame get fits height] cmd } } } proc ParseFilenameRegionMacro {cmdname frame} { upvar $cmdname cmd set exp {(\$filename)\[(\$regions\(([^)]*)\))\]} while {[regexp $exp $cmd foo fn reg pp]} { set type ds9 set prop {} set sys physical set sky fk5 set format degrees # default for mosaics if {$frame != {}} { if {[$frame has fits mosaic]} { set sys wcs } } foreach p [split $pp ,] { switch -- $p { ds9 - ciao - saotng - saoimage - pros - xy {set type $p} include {append prop {include = yes }} exclude {append prop {include = no }} source {append prop {source = yes }} background {append prop {source = no }} image - physical - detector - amplifier wcs - wcsa - wcsb - wcsc - wcsd - wcse - wcsf - wcsg - wcsh - wcsi - wcsj - wcsk - wcsl - wcsm - wcsn - wcso - wcsp - wcsq - wcsr - wcss - wcst - wcsu - wcsv - wcsw - wcsx - wcsy - wcsz {set sys $p} fk4 - b1950 - fk5 - j2000 - icrs - galactic - ecliptic { if {"$sys"=="physical"} { set sys wcs } set sky $p } hms {set format sexagesimal} sexagesimal - degrees {set format $p} } } SubstFilenameRegion cmd $frame $exp $type $prop $sys $sky $format } set exp {(\$filename)\[(\$regions)\]} while {[regexp $exp $cmd foo fn reg]} { set type ds9 set prop {} set sys physical set sky fk5 set format degrees # default for mosaics if {$frame != {}} { if {[$frame has fits mosaic]} { set sys wcs } } SubstFilenameRegion cmd $frame $exp $type $prop $sys $sky $format } } proc SubstFilenameRegion {cmdname frame exp type prop sys sky format} { upvar $cmdname cmd global ianalysis set fn [$frame get fits file name full] set region [string trimright [$frame marker list $type $sys $sky $format yes $prop] ";"] if {$region != {}} { set sub {} foreach f $fn { append sub "$f\[$region\] " } } else { set sub $fn } # substitute # ok, we need to check the length if {[string length $region] > 256} { # since we are writing to a file, # we don't have to worry about quoting # special characters set fn [tmpnam {.reg}] incr ianalysis(param,seq) if {![catch {set ch [open "$fn" w]}]} { puts $ch "$sub" close $ch } regsub $exp $cmd "\@$fn" cmd } else { CleanFileName sub regsub $exp $cmd $sub cmd } } proc ParseFilenameMacro {cmdname frame} { upvar $cmdname cmd set exp {\$filename\(([^)]*)\)} if {[regexp $exp $cmd foo pp]} { switch $pp { root - root,base { set sub [join [$frame get fits file name root base]] CleanFileName sub regsub -all $exp $cmd $sub cmd } full - full,base { set sub [join [$frame get fits file name full base]] CleanFileName sub regsub -all $exp $cmd $sub cmd } } } set exp {\$filename} if {[regexp $exp $cmd]} { set sub [join [$frame get fits file name full]] CleanFileName sub regsub -all $exp $cmd $sub cmd } } proc ParseFileDialogMacro {cmdname} { upvar $cmdname cmd set exp {\$filedialog\(open\)} if {[regexp $exp $cmd]} { set sub [OpenFileDialog analysisparamfbox] regsub -all $exp $cmd $sub cmd } set exp {\$filedialog\(save\)} if {[regexp $exp $cmd]} { set sub [SaveFileDialog analysisparamfbox] regsub -all $exp $cmd $sub cmd } } proc CleanFileName {varname} { upvar $varname sub # we have to quote {"}, else problems down the road regsub -all {\"} $sub {\\"} sub # we have to quote {&}, else problems down the road regsub -all {\&} $sub {\\&} sub } proc ParseRegionMacro {cmdname frame} { upvar $cmdname cmd set exp {\$regions\(([^)]*)\)} while {[regexp $exp $cmd foo pp]} { set type ds9 set prop {} set sys physical set sky fk5 set format degrees # default for mosaics if {$frame != {}} { if {[$frame has fits mosaic]} { set sys wcs } } foreach p [split $pp ,] { switch -- $p { ds9 - ciao - saotng - saoimage - pros - xy {set type $p} include {append prop {include = yes }} exclude {append prop {include = no }} source {append prop {source = yes }} background {append prop {source = no }} image - physical - detector - amplifier - wcs - wcsa - wcsb - wcsc - wcsd - wcse - wcsf - wcsg - wcsh - wcsi - wcsj - wcsk - wcsl - wcsm - wcsn - wcso - wcsp - wcsq - wcsr - wcss - wcst - wcsu - wcsv - wcsw - wcsx - wcsy - wcsz {set sys $p} fk4 - b1950 - fk5 - j2000 - icrs - galactic - ecliptic { if {"$sys"=="physical"} { set sys wcs } set sky $p } hms {set format sexagesimal} sexagesimal - degrees {set format $p} } } SubstRegion cmd $frame $exp $type $prop $sys $sky $format } # SAOtng format set exp {\$((|include|exclude|source|background)_)?regions(_(|degrees|hms|pixels))?} while {[regexp $exp $cmd foo a prop b sys]} { # check valid props switch -- $prop { include {set prop {include = yes}} exclude {set prop {include = no}} source {set prop {source = yes}} background {set prop {source = no}} default {set prop {}} } # check valid coordinate systems set sky fk5 switch -- $sys { degrees {set sys wcs; set format degrees} hms {set sys wcs; set format sexagesimal} pixels - default {set sys physical; set format degrees} } SubstRegion cmd $frame $exp ds9 $prop $sys $sky $format } } proc SubstRegion {cmdname frame exp type prop sys sky format} { upvar $cmdname cmd global ianalysis # get any regions set region [string trimright [$frame marker list $type $sys $sky $format yes $prop] ";"] # substitute # ok, we need to check the length if {[string length $region] > 8192} { # since we are writing to a file, we don't have to worry about quoting # special characters set fn [tmpnam {.reg}] incr ianalysis(param,seq) if {![catch {set ch [open "$fn" w]}]} { puts $ch "$region" close $ch } regsub $exp $cmd "\@$fn" cmd } else { # we have to quote {"}, else problems down the road regsub -all {\"} $region {\\"} region # we have to quote {&}, else problems down the road regsub -all {\&} $region {\\&} region regsub $exp $cmd $region cmd } } proc ParseEnvMacro {cmdname} { upvar $cmdname cmd global env set exp {\$env\(([^)]*)\)} if {[regexp $exp $cmd foo ee]} { if {[info exists env($ee)]} { regsub -all $exp $cmd "$env($ee)" cmd } else { regsub -all $exp $cmd {} cmd } } } proc ParsePanMacro {cmdname frame} { upvar $cmdname cmd set exp {\$pan\(([^)]*)\)} if {[regexp $exp $cmd foo pp]} { set sys physical set sky fk5 set format degrees foreach p [split $pp ,] { switch -- $p { image - physical - detector - amplifier - wcs - wcsa - wcsb - wcsc - wcsd - wcse - wcsf - wcsg - wcsh - wcsi - wcsj - wcsk - wcsl - wcsm - wcsn - wcso - wcsp - wcsq - wcsr - wcss - wcst - wcsu - wcsv - wcsw - wcsx - wcsy - wcsz {set sys $p} fk4 - b1950 - fk5 - j2000 - icrs - galactic - ecliptic {set sky $p; set sys wcs} hms {set format sexagesimal} sexagesimal - degrees {set format $p} } } set coord [$frame get cursor $sys $sky $format] regsub -all $exp $cmd "[lindex $coord 0],[lindex $coord 1]" cmd return } # no args set exp {\$pan} if {[regexp $exp $cmd foo1]} { set coord [$frame get cursor physical] regsub -all $exp $cmd "[lindex $coord 0],[lindex $coord 1]" cmd } } proc ParseValueMacro {cmdname frame x y} { upvar $cmdname cmd # menu items will not have a frame arg if {$frame == {}} { return } set exp1 {\$value} if {[regexp $exp1 $cmd foo]} { set vv [$frame get value canvas $x $y] regsub -all $exp1 $cmd "$vv" cmd } } proc ParseXYMacro {cmdname frame x y} { upvar $cmdname cmd # menu items will not have a frame arg if {$frame == {}} { return } set exp1 {\$x\(([^)]*)\)} set exp2 {\$y\(([^)]*)\)} if {[regexp $exp1 $cmd foo pp] && [regexp $exp2 $cmd foo2 pp2]} { set sys physical set sky fk5 set format degrees foreach p [split $pp ,] { switch -- $p { image - physical - detector - amplifier - wcs - wcsa - wcsb - wcsc - wcsd - wcse - wcsf - wcsg - wcsh - wcsi - wcsj - wcsk - wcsl - wcsm - wcsn - wcso - wcsp - wcsq - wcsr - wcss - wcst - wcsu - wcsv - wcsw - wcsx - wcsy - wcsz {set sys $p} fk4 - b1950 - fk5 - j2000 - icrs - galactic - ecliptic {set sky $p; set sys wcs} hms {set format sexagesimal} sexagesimal - degrees {set format $p} } } switch -- $sys { image - physical - detector - amplifier {set coord [$frame get coordinates $x $y $sys]} default {set coord [$frame get coordinates $x $y $sys $sky $format]} } regsub -all $exp1 $cmd [lindex $coord 0] cmd regsub -all $exp2 $cmd [lindex $coord 1] cmd return } # no args set exp1 {\$x} set exp2 {\$y} if {[regexp $exp1 $cmd foo1] && [regexp $exp2 $cmd foo2]} { set coord [$frame get coordinates $x $y physical] regsub -all $exp1 $cmd [lindex $coord 0] cmd regsub -all $exp2 $cmd [lindex $coord 1] cmd } } proc ParseZMacro {cmdname frame} { upvar $cmdname cmd # menu items will not have a frame arg if {$frame == {}} { return } set sl [$frame get fits slice] # args set exp1 {\$z\(([^)]*)\)} if {[regexp $exp1 $cmd foo pp]} { set sys $pp set coord [$frame get coordinates $sl image $sys 2] regsub -all $exp1 $cmd "$coord" cmd return } # no args # look for '$z"' set exp1 {\$z\"} if {[regexp $exp1 $cmd foo1]} { regsub -all $exp1 $cmd "$sl\"" cmd } # look for "$z " set exp1 {\$z\s} if {[regexp $exp1 $cmd foo1]} { regsub -all $exp1 $cmd "$sl " cmd } } proc ParseMessageMacro {cmdname} { upvar $cmdname cmd # two args set exp {\|?.?\$message\((ok|okcancel|yesno),([^)]*)\).?\|?} while {[regexp $exp $cmd foo type message]} { regsub $exp $cmd {} cmd if {![AnalysisMessage $type $message]} { return 0 } } # one args set exp {\|?.?\$message\(([^)]*)\).?\|?} while {[regexp $exp $cmd foo message]} { regsub $exp $cmd {} cmd AnalysisMessage ok $message } return 1 } proc ParseEntryMacro {cmdname} { upvar $cmdname cmd # one args set exp {\|?.?\$entry\(([^)]*)\).?\|?} while {[regexp $exp $cmd foo message]} { set result {} if {![AnalysisEntry $message result]} { return 0 } regsub $exp $cmd $result cmd } return 1 } proc ParseParamMacro {cmdname} { upvar $cmdname cmd global ianalysis set exp {\$param\(([^)]*)\).?;?} while {[regexp $exp $cmd foo param]} { regsub $exp $cmd {} cmd if {![AnalysisParam cmd $param]} { return 0 } } return 1 } proc ParseTextMacro {cmdname which i} { upvar $cmdname cmd global ianalysis set exp1 {\|.?\$text} set exp2 {\|\&.?\$text} if {[regexp $exp1 $cmd]} { regsub $exp1 $cmd {} cmd set ianalysis($which,$i,finish) text } elseif {[regexp $exp2 $cmd]} { regsub $exp2 $cmd { 2>@ stdout} cmd set ianalysis($which,$i,finish) text } } proc ParseNullMacro {cmdname which i} { upvar $cmdname cmd global ianalysis set exp {\|.?\$null} if {[regexp $exp $cmd]} { regsub $exp $cmd {} cmd set ianalysis($which,$i,finish) null } } proc ParsePlotMacro {cmdname which i} { upvar $cmdname cmd global ianalysis set exp {\|.?\$plot\(([^,]+),([^,]+),([^,]+),([^)]+)\)} if {[regexp $exp $cmd foo \ ianalysis($which,$i,plot,title) \ ianalysis($which,$i,plot,xaxis) \ ianalysis($which,$i,plot,yaxis) \ ianalysis($which,$i,plot,dim)]} { regsub $exp $cmd {} cmd set ianalysis($which,$i,finish) plot } set exp {\|.?\$plot\(stdin\)} if {[regexp $exp $cmd]} { regsub $exp $cmd {} cmd set ianalysis($which,$i,finish) plotstdin } set exp {\|.?\$plot} if {[regexp $exp $cmd]} { regsub $exp $cmd {} cmd set ianalysis($which,$i,finish) plot } } proc ParseURLMacro {cmdname which i} { upvar $cmdname cmd global ianalysis set exp {\$url\((.*)\) \|} if {[regexp $exp $cmd foo ianalysis($which,$i,start,url)]} { set ianalysis($which,$i,start) url set ianalysis($which,$i,start,fn) [tmpnam {.fits}] regsub $exp $cmd "cat \{$ianalysis($which,$i,start,fn)\} |" cmd } } proc ParseGetURLMacro {cmdname which i} { upvar $cmdname cmd global ianalysis set exp {\$geturl\((.*)\)} if {[regexp $exp $cmd foo ianalysis($which,$i,start,url)]} { set ianalysis($which,$i,start) geturl set ianalysis($which,$i,start,fn) [tmpnam {.fits}] regsub $exp $cmd {} cmd } } proc ParseImageMacro {cmdname which i} { upvar $cmdname cmd global ianalysis set exp {\|.?\$image\(([^)]*)\)} if {[regexp $exp $cmd foo ianalysis($which,$i,image)]} { regsub $exp $cmd {} cmd set ianalysis($which,$i,finish) image } set exp {\|.?\$image} if {[regexp $exp $cmd]} { regsub $exp $cmd {} cmd set ianalysis($which,$i,finish) image } } proc AnalysisText {tt title txt method} { if {$txt != {} && $txt != "\n"} { SimpleTextDialog ${tt}txt $title 80 20 $method bottom $txt } } proc AnalysisMessage {type message} { if {$type == {}} { set type ok } switch -- [tk_messageBox -message $message -type $type] { ok {return 1} yes {return 1} cancel {return 0} default {return 0} } } proc AnalysisEntry {message resultvar} { upvar $resultvar result return [EntryDialog [msgcat::mc {Entry}] $message 60 result] } proc AnalysisPrefOpen {varname} { upvar $varname var FileLast analysisfbox $var set var [OpenFileDialog analysisfbox] } # Cmds proc ProcessAnalysisCmd {varname iname buf fn} { upvar $varname var upvar $iname i global ime global ianalysis switch -- [string tolower [lindex $var $i]] { message { incr i switch [string tolower [lindex $var $i]] { ok - okcancel - retrycancel - yesno - yesnocancel { AnalysisMessage [lindex $var $i] [lindex $var [expr $i+1]] incr i } default { AnalysisMessage ok [lindex $var $i] } } } text { if {$buf != {}} { AnalysisText apXPA Analysis $buf append } elseif {$fn != {}} { if {[file exists $fn]} { set ch [open $fn r] set txt [read $ch] close $ch AnalysisText apXPA Analysis $txt append } } else { incr i AnalysisText apXPA Analysis [lindex $var $i] append } } plot { # for backward compatibility # used by chandra-ed # use xpa plot instead incr i if {$buf != {}} { ProcessAnalysisPlotCmd $varname $iname $buf } elseif {$fn != {}} { if {[file exists $fn]} { set ch [open $fn r] set rr [read $ch] close $ch ProcessAnalysisPlotCmd $varname $iname $rr } } else { ProcessAnalysisPlotCmd $varname $iname {} } } load { if {$buf != {}} { ProcessAnalysis buf } elseif {$fn != {}} { ProcessAnalysisFile $fn } else { incr i ProcessAnalysisFile [lindex $var $i] } } clear { ClearAnalysis incr i switch -- [lindex $var $i] { load { if {$buf != {}} { ProcessAnalysis buf } elseif {$fn != {}} { ProcessAnalysisFile $fn } else { incr i ProcessAnalysisFile [lindex $var $i] } } default {incr i -1} } } mode { incr i switch -- [lindex $var $i] { stats - statistics {set ime(task) stats} hist - histogram {set ime(task) hist} radial - radialprofile {set ime(task) radial} 2d - plot2d {set ime(task) plot2d} 3d - plot3d {set ime(task) plot3d} } ProcessRealizeDS9 IMEChangeTask } task { incr i if {[string is integer [lindex $var $i]]} { AnalysisTask [lindex $var $i] menu } else { # invoke by name for {set ii 0} {$ii<$ianalysis(menu,count)} {incr ii} { if {[string equal -nocase $ianalysis(menu,$ii,item) [lindex $var $i]]} { AnalysisTask $ii menu } } } } default { if {[string is integer [lindex $var $i]]} { AnalysisTask [lindex $var $i] menu } else { ProcessAnalysisFile [lindex $var $i] } } } } proc ProcessAnalysisPlotCmd {varname iname buf} { upvar 2 $varname var upvar 2 $iname i global iap switch -- [string tolower [lindex $var $i]] { stdin {AnalysisPlotStdin line $iap(tt) {} $buf} default { PlotLine $iap(tt) Plot \ [lindex $var [expr $i+0]] \ [lindex $var [expr $i+1]] \ [lindex $var [expr $i+2]] \ [lindex $var [expr $i+3]] \ $buf incr i 3 } } } proc ProcessSendAnalysisCmd {proc id param sock fn} { global ianalysis global ime set result {} switch -- [string tolower [lindex $param 0]] { entry { AnalysisEntry [lrange $param 1 end] result append result "\n" $proc $id $result } mode {$proc $id "$ime(task)\n"} task { # invoke by name for {set ii 0} {$ii<$ianalysis(menu,count)} {incr ii} { append result "$ii $ianalysis(menu,$ii,item)\n" } $proc $id $result } lock {$proc $id "$ime(lock)\n"} default { for {set i 0} {$i<$ianalysis(menu,count)} {incr i} { append result "\#$i menu" append result "\n$ianalysis(menu,$i,item)" append result "\n$ianalysis(menu,$i,template)" if {$ianalysis(menu,$i,cmd) != {web}} { append result "\nmenu" append result "\n$ianalysis(menu,$i,cmd)" } else { append result "\n$ianalysis(menu,$i,cmd)" append result "\n$ianalysis(menu,$i,var)" } append result "\n\n" } for {set i 0} {$i<$ianalysis(bind,count)} {incr i} { set key [string range $ianalysis(bind,$i,item) 1 1] append result "\#$i bind" append result "\nbind key $ianalysis(bind,$i,item)" append result "\n$ianalysis(bind,$i,template)" append result "\nbind $key" append result "\n$ianalysis(bind,$i,cmd)" append result "\n\n" } ProcessSend $proc $id $sock $fn {.ans} $result } } } saods9/ds9/library/analysisparam.tcl000644 000765 000000 00000010665 12705445646 020124 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc AnalysisParam {strname param} { upvar $strname str global ianalysis global ed global ds9 global pds9 # find it for {set i 0} {$i<$ianalysis(param,count)} {incr i} { if {$ianalysis(param,$i) == "$param"} { break } } if {$i == $ianalysis(param,count)} { return } set w {.param} set ed(ok) 0 DialogCreate $w $param ed(ok) # Param set f [ttk::frame $w.param] for {set j 0} {$j<$ianalysis(param,$i,count)} {incr j} { set ianalysis(param,$i,$j,value) $ianalysis(param,$i,$j,last) ttk::label $f.l$j -text "$ianalysis(param,$i,$j,title)" switch -- $ianalysis(param,$i,$j,type) { entry { ttk::entry $f.a$j \ -textvariable ianalysis(param,$i,$j,value) \ -width 40 } checkbox { ttk::checkbutton $f.a$j -text {} \ -variable ianalysis(param,$i,$j,value) } menu { set l [split $ianalysis(param,$i,$j,default) |] ttk::menubutton $f.a$j \ -text "$ianalysis(param,$i,$j,value)" \ -menu $f.a$j.menu set m [menu $f.a$j.menu] for {set k 0} {$k<[llength $l]} {incr k} { $m add command -label [lindex $l $k] \ -command "AnalysisParamMenu ianalysis(param,$i,$j,value) [lindex $l $k] $f.a$j" } } } ttk::label $f.i$j -text "$ianalysis(param,$i,$j,info)" \ -font "{$ds9(times)} $pds9(font,size) normal italic" grid $f.l$j $f.a$j $f.i$j -padx 2 -pady 2 -sticky w } # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) $w.buttons.ok DialogDismiss $w if {$ed(ok)} { for {set j 0} {$j<$ianalysis(param,$i,count)} {incr j} { set exp "\\\$$ianalysis(param,$i,$j,var)" if {[regexp $exp $str]} { regsub -all $exp $str "$ianalysis(param,$i,$j,value)" str } set ianalysis(param,$i,$j,last) $ianalysis(param,$i,$j,value) } } set rr $ed(ok) unset ed return $rr } proc AnalysisParamMenu {varname value menu} { upvar $varname var set var $value $menu configure -text $value } proc ParseIRAFParam {filename} { global ianalysis global env # we are only concerned with unix like os set uparm {} if {[info exists env(UPARM)]} { set uparm "$env(UPARM)/$filename" } set iraf {} if {[info exists env(HOME)]} { set iraf "$env(HOME)/$filename" } if {[file exists "$filename"]} { catch {set ch [open "$filename"]} } elseif {[file exists "$uparm"]} { catch {set ch [open "$uparm"]} } elseif {[file exists "$iraf"]} { catch {set ch [open "$iraf"]} } else { return } set i $ianalysis(param,count) while {[gets $ch line] >= 0} { set exp {([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)} if {[regexp $exp $line foo p1 p2 p3 p4 p5 p6 p7]} { if {$p1 != {mode}} { regsub -all {\"} $p4 {} p4 regsub -all {\"} $p7 {} p7 set j $ianalysis(param,$i,count) set ianalysis(param,$i,$j,var) "$p1" if {$p3 == {h}} { set ianalysis(param,$i,$j,title) "(${p1})" } else { set ianalysis(param,$i,$j,title) "$p1" } set ianalysis(param,$i,$j,info) "$p7" incr ianalysis(param,$i,count) switch -- $p2 { b { set ianalysis(param,$i,$j,type) checkbox set ianalysis(param,$i,$j,default) [FromYesNo $p4] set ianalysis(param,$i,$j,last) [FromYesNo $p4] set ianalysis(param,$i,$j,value) [FromYesNo $p4] } s { if {$p5 != {}} { set ianalysis(param,$i,$j,type) menu set ianalysis(param,$i,$j,default) "$p5" } else { set ianalysis(param,$i,$j,type) entry set ianalysis(param,$i,$j,default) "$p4" } set ianalysis(param,$i,$j,last) "$p4" set ianalysis(param,$i,$j,value) "$p4" } default { set ianalysis(param,$i,$j,type) entry set ianalysis(param,$i,$j,default) "$p4" set ianalysis(param,$i,$j,last) "$p4" set ianalysis(param,$i,$j,value) "$p4" } } } } } close $ch } saods9/ds9/library/annulus.tcl000644 000765 000000 00000011123 12705445646 016733 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc AnnulusDialog {varname} { upvar #0 $varname var global $varname global pmarker # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # variables set rr [$var(frame) get wcs] set var(dcoord) [lindex $rr 0] set var(dformat) $pmarker(dformat) AdjustCoordSystem $varname dcoord set var(method) dist # procs set var(which) annulus set var(proc,apply) AnnulusApply set var(proc,close) AnnulusClose set var(proc,generate) AnnulusGenerate set var(proc,coordCB) AnnulusCoordCB set var(proc,editCB) AnnulusEditCB set var(proc,distCB) AnnulusDistCB # base MarkerBaseAnnulusDialog $varname # menus MarkerBaseAnnulusMethodMenu $varname # analysis $var(mb) add cascade -label [msgcat::mc {Analysis}] -menu $var(mb).analysis menu $var(mb).analysis MarkerAnalysisStatsDialog $varname MarkerAnalysisRadialDialog $varname # callbacks $var(frame) marker $var(id) callback edit AnnulusEditCB $varname $var(frame) marker $var(id) callback end edit AnnulusEditCB $varname set f $var(top).param # Annuli ttk::label $f.tinner -text [msgcat::mc {Inner}] ttk::label $f.touter -text [msgcat::mc {Outer}] ttk::label $f.tradius -text [msgcat::mc {Radius}] ttk::entry $f.inner -textvariable ${varname}(inner) -width 13 ttk::entry $f.outer -textvariable ${varname}(outer) -width 13 DistMenuButton $f.uradius $varname dcoord 1 dformat \ [list AnnulusDistCB $varname] DistMenuEnable $f.uradius.menu $varname dcoord 1 dformat ttk::label $f.tannuli -text [msgcat::mc {Annuli}] ttk::entry $f.annuli -textvariable ${varname}(annuli) -width 13 grid x $f.tinner $f.touter -padx 2 -pady 2 -sticky w grid $f.tradius $f.inner $f.outer $f.uradius -padx 2 -pady 2 -sticky w grid $f.tannuli $f.annuli -padx 2 -pady 2 -sticky w # Radius set f [ttk::labelframe $var(top).radius -text [msgcat::mc {Radius}] \ -padding 2] set var(annulitxt) [text $f.txt \ -height 10 \ -width 15 \ -wrap none \ -font [font actual TkDefaultFont] \ -yscrollcommand [list $f.yscroll set] \ ] ttk::scrollbar $f.yscroll -command [list $var(annulitxt) yview] \ -orient vertical grid $var(annulitxt) $f.yscroll -sticky news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 # Radius Fini grid $var(top).radius -row 0 -column 1 -sticky news grid rowconfigure $var(top) 0 -weight 1 grid columnconfigure $var(top) 1 -weight 1 # init - do this last AnnulusDistCB $varname } # actions proc AnnulusClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback edit AnnulusEditCB $var(frame) marker $var(id) delete callback end edit AnnulusEditCB MarkerBaseCenterClose $varname } proc AnnulusApply {varname} { upvar #0 $varname var global $varname set levels {} regsub -all "\n" "[$var(annulitxt) get 1.0 end]" " " levels # and trim any trailing spaces set levels [string trimright $levels " "] if {$levels != {}} { $var(frame) marker $var(id) annulus radius "\{$levels\}" \ $var(dcoord) $var(dformat) } MarkerBaseCenterApply $varname } proc AnnulusGenerate {varname} { upvar #0 $varname var global $varname MarkerBaseAnnulusGenerateCircle $varname } # callbacks proc AnnulusCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "AnnulusCoordCB" } MarkerAnalysisRadialSystem $varname MarkerAnalysisStatsSystem $varname MarkerBaseCoordCB $varname MarkerBaseCenterMoveCB $varname } proc AnnulusEditCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "AnnulusEditCB" } set t [$var(frame) get marker $var(id) annulus radius \ $var(dcoord) $var(dformat)] set last [expr [llength $t]-1] set var(inner) [lindex $t 0] set var(outer) [lindex $t $last] set var(annuli) $last $var(annulitxt) delete 1.0 end $var(annulitxt) insert end "$t" } proc AnnulusDistCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "AnnulusDistCB" } AnnulusEditCB $varname } saods9/ds9/library/ar.tcl000644 000765 000000 00000011217 12722133544 015642 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ARInit {varname next} { upvar #0 $varname var global $varname set var(sync) 0 set var(proc,next) $next set var(name) {} set var(x) {} set var(y) {} set var(status) {} } proc ARApply {varname} { upvar #0 $varname var global $varname ARStatus $varname {} $var(mb).file entryconfig [msgcat::mc {Retrieve}] -state disabled $var(mb).file entryconfig [msgcat::mc {Cancel}] -state normal $var(apply) configure -state disabled $var(cancel) configure -state normal } proc ARCancel {varname} { upvar #0 $varname var global $varname # set state to 0 so that we don't process the finish proc set var(active) 0 if {[info exists var(token)]} { http::reset $var(token) } } proc ARDestroy {varname} { upvar #0 $varname var global $varname ARCancel $varname if {[winfo exists $var(top)]} { destroy $var(top) destroy $var(mb) } unset $varname } proc ARReset {varname} { upvar #0 $varname var global $varname set var(active) 0 if {[info exists var(token)]} { http::cleanup $var(token) unset var(token) } $var(mb).file entryconfig [msgcat::mc {Retrieve}] -state normal $var(mb).file entryconfig [msgcat::mc {Cancel}] -state disabled $var(apply) configure -state normal $var(cancel) configure -state disabled } proc ARDone {varname} { upvar #0 $varname var global $varname set var(status) [msgcat::mc {Done}] ARReset $varname } proc ARCancelled {varname} { upvar #0 $varname var global $varname set var(status) [msgcat::mc {Cancelled}] ARReset $varname } proc ARError {varname message} { upvar #0 $varname var global $varname set var(status) [string range $message 0 80] ARReset $varname } proc ARStatus {varname message} { upvar #0 $varname var global $varname set var(status) [string range $message 0 80] } proc ARClear {varname} { upvar #0 $varname var global $varname set var(name) {} set var(x) {} set var(y) {} set var(status) {} } proc ARCoord {varname} { upvar #0 $varname var global $varname global ds9 global pds9 switch -- $var(sky) { fk4 - fk5 - icrs { $var(xname) configure -text "\u03b1" \ -font "$ds9(times) $pds9(font,size)" $var(yname) configure -text "\u03b4" \ -font "$ds9(times) $pds9(font,size)" } galactic { $var(xname) configure -text {l} \ -font "{$ds9(times)} $pds9(font,size) normal italic" $var(yname) configure -text {b} \ -font "{$ds9(times)} $pds9(font,size) normal italic" } ecliptic { $var(xname) configure -text "\u03bb" \ -font "$ds9(times) $pds9(font,size)" $var(yname) configure -text "\u03b2" \ -font "$ds9(times) $pds9(font,size)" } } } proc AREditMenu {varname} { upvar #0 $varname var global $varname global ds9 $var(mb) add cascade -label [msgcat::mc {Edit}] -menu $var(mb).edit EditMenu $var(mb) $varname $var(mb).edit add separator $var(mb).edit add command -label [msgcat::mc {Clear}] \ -command "ARClear $varname" } proc ARSkyFormat {w varname} { upvar #0 $varname var global $varname set ${varname}(skyformat,msg) [msgcat::mc $var(skyformat)] ttk::menubutton $w -textvariable ${varname}(skyformat,msg) -menu $w.menu menu $w.menu $w.menu add radiobutton -label [msgcat::mc {Degrees}] \ -variable ${varname}(skyformat) -value degrees \ -command "ARSkyFormatMenu $varname" $w.menu add radiobutton -label {Sexagesimal} \ -variable ${varname}(skyformat) -value sexagesimal \ -command "ARSkyFormatMenu $varname" } proc ARSkyFormatMenu {varname} { upvar #0 $varname var global $varname set ${varname}(skyformat,msg) $var(skyformat) } proc ARRFormat {w varname} { upvar #0 $varname var global $varname set ${varname}(rformat,msg) [msgcat::mc $var(rformat)] ttk::menubutton $w -textvariable ${varname}(rformat,msg) -menu $w.menu menu $w.menu $w.menu add radiobutton -label [msgcat::mc {Degrees}] \ -variable ${varname}(rformat) -value degrees \ -command "ARRFormatMenu $varname" $w.menu add radiobutton -label [msgcat::mc {ArcMin}] \ -variable ${varname}(rformat) -value arcmin \ -command "ARRFormatMenu $varname" $w.menu add radiobutton -label [msgcat::mc {ArcSec}] \ -variable ${varname}(rformat) -value arcsec \ -command "ARRFormatMenu $varname" } proc ARRFormatMenu {varname} { upvar #0 $varname var global $varname set ${varname}(rformat,msg) $var(rformat) } saods9/ds9/library/array.tcl000644 000765 000000 00000006017 12705445646 016372 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ImportArrayFile {fn layer} { global loadParam set loadParam(file,type) array set loadParam(file,mode) {} set loadParam(load,type) mmapincr set loadParam(file,name) $fn set loadParam(load,layer) $layer # check for stdin/gz ConvertArrayFile ProcessLoad } proc ImportArrayAlloc {path fn layer} { global loadParam set loadParam(file,type) array set loadParam(file,mode) {} set loadParam(load,type) allocgz set loadParam(file,name) $fn set loadParam(file,fn) $path set loadParam(load,layer) $layer ProcessLoad } proc ImportArraySocket {sock fn layer} { global loadParam set loadParam(file,type) array set loadParam(file,mode) {} set loadParam(load,type) socketgz set loadParam(file,name) $fn set loadParam(socket,id) $sock set loadParam(load,layer) $layer return [ProcessLoad 0] } proc ExportArrayFile {fn opt} { global current if {$fn == {} || $current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save array file "\{$fn\}" $opt } proc ExportArraySocket {sock opt} { global current if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save array socket $sock $opt } proc ProcessArrayCmd {varname iname sock fn} { upvar $varname var upvar $iname i if {[ProcessArrayBackwardCmd $varname $iname $sock $fn]} { return } global loadParam global current set layer {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i set layer mask } slice { incr i # not suppported } } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa if {![ImportArraySocket $sock $param $layer]} { InitError xpa ImportArrayFile $param $layer } } else { # comm if {$fn != {}} { ImportArrayAlloc $fn $param $layer } else { ImportArrayFile $param $layer } } FinishLoad } proc ProcessSendArrayCmd {proc id param sock fn} { global current if {$current(frame) == {}} { return } set opt [string tolower [lindex $param 0]] if {$sock != {}} { # xpa ExportArraySocket $sock $opt } elseif {$fn != {}} { # comm ExportArrayFile $fn $opt $proc $id {} $fn } } # backward compatibility proc ProcessArrayBackwardCmd {varname iname sock fn} { upvar 2 $varname var upvar 2 $iname i set vvar $var set ii $i switch -- [string tolower [lindex $var $i]] { rgb { set vvar [lreplace $var 0 0] ProcessRGBArrayCmd vvar ii $sock $fn return 1 } new { switch -- [string tolower [lindex $var [expr $i+1]]] { rgb { set vvar [lreplace $var 1 1] ProcessRGBArrayCmd vvar ii $sock $fn return 1 } } } } return 0 } saods9/ds9/library/backup.tcl000644 000765 000000 00000046156 12746745247 016536 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc BackupDialog {} { set fn [SaveFileDialog backupfbox] if {[string length $fn] != 0} { Backup $fn } } proc Backup {fn} { global ds9 global current # script, always overwrite if present if {[catch {set ch [open $fn w]}]} { Error [msgcat::mc {An error has occurred during backup}] return } # aux directory, create if needed set dir "${fn}.dir" if {[file exists $dir]} { if {![file isdirectory $dir]} { Error [msgcat::mc {An error has occurred during backup}] return } } else { if {[catch {file mkdir $dir}]} { Error [msgcat::mc {An error has occurred during backup}] return } } # update any tags if {$current(frame) != {}} { $current(frame) colorbar tag "\{[$current(colorbar) get tag]\}" } # check for newer backup version puts $ch "global ds9" puts $ch "set vv [lindex $ds9(version) 0]" puts $ch "\# this is a check for to ensure a match between the" puts $ch "\# current ds9 version matches the prefs version" puts $ch "switch -- \[string compare \$vv \[lindex \$ds9(version)\ 0\]\] {" puts $ch " -1 {" puts $ch " if {\[tk_messageBox -type yesno -icon question -message \[msgcat::mc {DS9 has detected an older backup file, do you wish to continue?}\]\] == {no}} {" puts $ch " return" puts $ch " }" puts $ch " }" puts $ch " 0 {}" puts $ch " 1 {" puts $ch " tk_messageBox -type ok -icon warning -message \[msgcat::mc {DS9 has detected a newer version of a backup file and therefore will not process this file.}\]" puts $ch " return" puts $ch " }" puts $ch "}" # and file find proc puts $ch "proc BackupFindFile {varname} {" puts $ch " upvar \$varname var" puts $ch "" puts $ch " set id \[string first \"\\\[\" \$var(file,name)\]" puts $ch " if {\$id > 0} {" puts $ch " set fn \[string range \$var(file,name) 0 \[expr \$id-1\]\]" puts $ch " set ext \[string range \$var(file,name) \$id end\]" puts $ch " } else {" puts $ch " set fn \$var(file,name)" puts $ch " set ext {}" puts $ch " }" puts $ch "" puts $ch " if {!\[file exists \$fn\]} {" puts $ch " Error \"\[msgcat::mc {Unable to load}\] \$fn\"" puts $ch " global fitsfbox" puts $ch " set fn \[OpenFileDialog fitsfbox\]" puts $ch " if {\$fn == {}} {" puts $ch " Error \[msgcat::mc {An error has occurred during restore}\]" puts $ch " return 0" puts $ch " }" puts $ch " if {!\[file exists \$fn\]} {" puts $ch " Error \[msgcat::mc {An error has occurred during restore}\]" puts $ch " return 0" puts $ch " }" puts $ch " set var(file,name) \"\$fn\$ext\"" puts $ch " }" puts $ch "" puts $ch " return 1" puts $ch "}" # Panner PannerBackup $ch # Colorbar ColorbarBackupCmaps $ch $dir ColorbarBackup $ch colorbar ColorbarBackup $ch colorbarrgb # Frames foreach ff $ds9(frames) { if {![$ff has iis]} { BackupFrame $ch $ff $dir } } # Geometry BackupGUI $ch # User Plots PlotBackup $ch $dir # all done close $ch } proc RestoreDialog {} { set fn [OpenFileDialog backupfbox] if {[string length $fn] != 0} { Restore $fn } } proc Restore {fn} { global ds9 global pds9 if {[string length $fn] == 0} { return } # clear all frames DeleteAllFrames # kill all image server dialogs foreach dlg [list dtwomass dsao deso dstsci dvla dnvss dskyview dvlss] { global $dlg if {[array exists $dlg]} { ARDestroy $dlg } } # kill all simple text dialogs global istxt foreach varname $istxt(dialogs) { SimpleTextDestroy $varname } # kill all cats global icat foreach varname $icat(cats) { CATDestroy $varname } # kill all plots global iap foreach varname $iap(windows) { PlotDestroy $varname } set dir [file dirname $fn] set ffn [lindex [file split $fn] end] set cd [pwd] cd $dir # fix a problem with 6.1.2 global prefs set rr $prefs(version) # ok, this is a major kludge to fix a major booboo. # Beta versions generated backup save sets with vv set to # something like '7.4b7'. We need to remove the 'b7' part. set src {} if {![catch {set ch [open "$ffn" r]}]} { set src [read $ch] close $ch } else { Error [msgcat::mc {An error has occurred during restore}] return } set aa [string first {set vv } $src] set bb [string first {# this is} $src] if {$aa != -1 && $bb != -1 && $aa < $bb} { set bb [expr $bb -2] set ver [string range $src $aa $bb] set ll [string first {b} $ver] if {$ll != -1} { set ll [expr $ll -1] set src [string replace $src $aa $bb [string range $ver 0 $ll]] } } else { Error [msgcat::mc {An error has occurred during restore}] return } # and load the world if {[catch {eval $src}]} { Error [msgcat::mc {An error has occurred during restore}] global debug if {$debug(tcl,restore)} { global errorInfo puts stderr "$errorInfo" } return } # historical note, vv contains version number of save set originator if {![info exists vv]} { set vv [lindex $ds9(version) 0] } # fix 6.1.2 if {$vv == {6.1.2}} { set prefs(version) $rr } # fix any prefs FixPrefs $vv # reset standard dialog switch $ds9(wm) { x11 {set pds9(dialog) motif} aqua - win32 {set pds9(dialog) native} } # return to start dir cd $cd # and update it UpdateGraphGrid LayoutOrient UpdateActiveFrames ChangeMode UpdateDS9 } proc BackupFrame {ch which dir} { set fdir [file join $dir $which] set rdir "./[lindex [file split $dir] end]/$which" # create dir if needed if {![file isdirectory $fdir]} { if {[catch {file mkdir $fdir}]} { Error [msgcat::mc {An error has occurred during backup}] return } } # frame set type [$which get type] puts $ch "CreateNameNumberFrame $which $type" switch -- $type { base {BackupFrameLoad $ch $which $fdir $rdir {}} 3d { BackupFrameLoad $ch $which $fdir $rdir {} puts $ch "3DDialog" } rgb { foreach cc {{} red green blue} { BackupFrameLoad $ch $which $fdir $rdir $cc } puts $ch "RGBDialog" } } MagnifierFrameBackup $ch $which ColorFrameBackup $ch $which ColormapFrameBackup $ch $which DS9Backup $ch $which CubeBackup $ch $which RGBBackup $ch $which BinBackup $ch $which ScaleBackup $ch $which PanZoomBackup $ch $which # Block need to be before Crop BlockBackup $ch $which CropBackup $ch $which # must be after Pan and Block 3DBackup $ch $which MarkerBackup $ch $which $fdir $rdir CentroidBackup $ch $which WCSBackup $ch $which $fdir $rdir MaskBackup $ch $which SmoothBackup $ch $which ContourBackup $ch $which $fdir $rdir GridBackup $ch $which CATBackup $ch $which $fdir $rdir } proc BackupFrameLoad {ch which fdir rdir channel} { set base $which$channel set seq 1 set varname $base global $varname if {![info exists $varname]} { # special case set varname "$base.$seq" global $varname } while {[info exists $varname]} { if {$channel != {}} { puts $ch "$which rgb channel $channel" } array set param [array get $varname] switch $param(load,type) { mmap - mmapincr - smmap - shared - sshared { if {![BackupFrameLoadMMap param $fdir $rdir]} { Error [msgcat::mc {An error has occurred during backup}] return } } alloc - allocgz { if {![BackupFrameLoadMMap param $fdir $rdir]} { BackupFrameLoadAlloc $which param $fdir $rdir } } channel - socket - socketgz - var {BackupFrameLoadAlloc $which param $fdir $rdir} photo { if {[BackupFrameLoadMMap param $fdir $rdir]} { puts $ch "global bcktmp" puts $ch "if {\[catch {image create photo -file $param(file,name)} bcktmp\]} {" puts $ch "Error \[msgcat::mc {An error has occurred during restore}\]" puts $ch "return" puts $ch "}" } else { BackupFrameLoadAlloc $which param $fdir $rdir } } } puts $ch "global loadParam" puts $ch "array set loadParam \[list [array get param]\]" switch $param(load,type) { photo { puts $ch "set loadParam(var,name) \$bcktmp" } } puts $ch "if \[BackupFindFile loadParam\] {" puts $ch " ProcessLoad" puts $ch "}" switch $param(load,type) { photo { puts $ch "image delete \$bcktmp" } } incr seq set varname "$base.$seq" global $varname } } proc BackupFrameLoadMMap {varname fdir rdir} { upvar $varname param global pds9 set id [string first "\[" $param(file,name)] if {$id > 0} { set fn [string range $param(file,name) 0 [expr $id-1]] set ext [string range $param(file,name) $id end] } else { set fn $param(file,name) set ext {} } if {![file exists $fn]} { return 0 } # special case, we use 'stdin' for input from stdin, ignore if {$fn == {stdin}} { return 0 } if {$pds9(backup)} { # look for sym links switch [file type $fn] { file {} link {set fn [file readlink $fn]} default { return 0 } } set src [lindex [file split $fn] end] if {![file exists [file join $fdir $src]]} { if {[catch {file copy $fn $fdir}]} { return 0 } } set param(file,name) "$rdir/[lindex [file split $fn] end]$ext" } else { if {[file pathtype $param(file,name)] == {relative}} { set param(file,name) [file join [pwd] $param(file,name)] } } # special case: mmap to allocgz via ConvertFitsFile/ConvertArrayFile if {[info exists param(file,fn)]} { set param(file,fn) $param(file,name) } return 1 } proc BackupFrameLoadAlloc {which varname fdir rdir} { upvar $varname param set ff [$which get fits file name root base] set id [string first "\[" $ff] if {$id > 0} { set fn [string range $ff 0 [expr $id-1]] } else { set fn $ff } if {$ff == {}} { set ff ds9.fits set fn ds9.fits } set ffn [file join $fdir $fn] switch $param(file,type) { fits { switch $param(file,mode) { {} { if {[$which has fits bin]} { $which save fits table file \"$ffn\" } else { $which save fits image file \"$ffn\" } } {rgb cube} {$which save fits rgb cube file \"$ffn\"} {rgb image} {$which save fits rgb image file \"$ffn\"} {ext cube} {$which save fits image file \"$ffn\"} default { if {[string range $param(file,mode) 0 5] == {mosaic}} { $which save fits mosaic image file "\{$ffn\}" } } } } array { switch $param(file,mode) { {} {$which save fits image file \"$ffn\"} {rgb cube} {$which save fits rgb cube file \"$ffn\"} } } nrrd {$which save fits image file \"$ffn\"} photo { switch -- [$which get type] { base - 3d {$which save fits image file \"$ffn\"} rgb { $which save fits rgb cube file \"$ffn\" set param(file,mode) {rgb cube} } } } } set param(load,type) mmapincr set param(file,type) fits # use $fn as we are not saving multiple extentions if present set param(file,name) "[file join $rdir $fn]" } proc BackupGUI {ch} { # Basic global pds9 puts $ch "global pds9" puts $ch "array set pds9 \{ [array get pds9] \}" global current puts $ch "global current" puts $ch "array set current \{ [array get current] \}" global pcurrent puts $ch "global pcurrent" puts $ch "array set pcurrent \{ [array get pcurrent] \}" global view puts $ch "global view" puts $ch "array set view \{ [array get view] \}" global pview puts $ch "global pview" puts $ch "array set pview \{ [array get pview] \}" global canvas puts $ch "global canvas" puts $ch "array set canvas \{ [array get canvas] \}" global phttp puts $ch "global phttp" puts $ch "array set phttp \{ [array get phttp] \}" global pbuttons puts $ch "global pbuttons" puts $ch "array set pbuttons \{ [array get pbuttons] \}" global ppanner puts $ch "global ppanner" puts $ch "array set ppanner \{ [array get ppanner] \}" global pmagnifier puts $ch "global pmagnifier" puts $ch "array set pmagnifier \{ [array get pmagnifier] \}" global colorbar puts $ch "global colorbar" puts $ch "array set colorbar \{ [array get colorbar] \}" global saveimage puts $ch "global saveimage" puts $ch "array set saveimage \{ [array get saveimage] \}" # don't save prefs(version), keep the current, not the save set version # removed after 6.1.2 # global prefs # puts $ch "global prefs" # puts $ch "array set prefs \{ [array get prefs] \}" global debug puts $ch "global debug" puts $ch "array set debug \{ [array get debug] \}" # File global ps puts $ch "global ps" puts $ch "array set ps \{ [array get ps] \}" global pps puts $ch "global pps" puts $ch "array set pps \{ [array get pps] \}" # Frame global rgb puts $ch "global rgb" puts $ch "array set rgb \{ [array get rgb] \}" global threed puts $ch "global threed" puts $ch "array set threed \{ [array get threed] \}" global blink puts $ch "global blink" puts $ch "array set blink \{ [array get blink] \}" global pblink puts $ch "global pblink" puts $ch "array set pblink \{ [array get pblink] \}" global tile puts $ch "global tile" puts $ch "array set tile \{ [array get tile] \}" global ptile puts $ch "global ptile" puts $ch "array set ptile \{ [array get ptile] \}" global crosshair puts $ch "global crosshair" puts $ch "array set crosshair \{ [array get crosshair] \}" global cube puts $ch "global cube" puts $ch "array set cube \{ [array get cube] \}" # Bin global bin puts $ch "global bin" puts $ch "array set bin \{ [array get bin] \}" global pbin puts $ch "global pbin" puts $ch "array set pbin \{ [array get pbin] \}" # Zoom global panzoom puts $ch "global panzoom" puts $ch "array set panzoom \{ [array get panzoom] \}" global ppanzoom puts $ch "global ppanzoom" puts $ch "array set ppanzoom \{ [array get ppanzoom] \}" # Crop global crop puts $ch "global crop" puts $ch "array set crop \{ [array get crop] \}" # Scale global scale puts $ch "global scale" puts $ch "array set scale \{ [array get scale] \}" global pscale puts $ch "global pscale" puts $ch "array set pscale \{ [array get pscale] \}" global minmax puts $ch "global minmax" puts $ch "array set minmax \{ [array get minmax] \}" global pminmax puts $ch "global pminmax" puts $ch "array set pminmax \{ [array get pminmax] \}" global zscale puts $ch "global zscale" puts $ch "array set zscale \{ [array get zscale] \}" global pzscale puts $ch "global pzscale" puts $ch "array set pzscale \{ [array get pzscale] \}" # Region global marker puts $ch "global marker" puts $ch "array set marker \{ [array get marker] \}" global pmarker puts $ch "global pmarker" puts $ch "array set pmarker \{ [array get pmarker] \}" global centroid puts $ch "global centroid" puts $ch "array set centroid \{ [array get centroid] \}" # WCS global wcs puts $ch "global wcs" puts $ch "array set wcs \{ [array get wcs] \}" global pwcs puts $ch "global pwcs" puts $ch "array set pwcs \{ [array get pwcs] \}" # Analysis global ime puts $ch "global ime" puts $ch "array set ime \{ [array get ime] \}" global pime puts $ch "global pime" puts $ch "array set pime \{ [array get pime] \}" global pgraph puts $ch "global pgraph" puts $ch "array set pgraph \{ [array get pgraph] \}" global pcoord puts $ch "global pcoord" puts $ch "array set pcoord \{ [array get pcoord] \}" global pexamine puts $ch "global pexamine" puts $ch "array set pexamine \{ [array get pexamine] \}" global pixel puts $ch "global pixel" puts $ch "array set pixel \{ [array get pixel] \}" global mask puts $ch "global mask" puts $ch "array set mask \{ [array get mask] \}" global pmask puts $ch "global pmask" puts $ch "array set pmask \{ [array get pmask] \}" global contour puts $ch "global contour" puts $ch "array set contour \{ [array get contour] \}" global pcontour puts $ch "global pcontour" puts $ch "array set pcontour \{ [array get pcontour] \}" global grid puts $ch "global grid" puts $ch "array set grid \{ [array get grid] \}" global pgrid puts $ch "global pgrid" puts $ch "array set pgrid \{ [array get pgrid] \}" global block puts $ch "global block" puts $ch "array set block \{ [array get block] \}" global pblock puts $ch "global pblock" puts $ch "array set pblock \{ [array get pblock] \}" global smooth puts $ch "global smooth" puts $ch "array set smooth \{ [array get smooth] \}" global psmooth puts $ch "global psmooth" puts $ch "array set psmooth \{ [array get psmooth] \}" global pnres puts $ch "global pnres" puts $ch "array set pnres \{ [array get pnres] \}" global sao puts $ch "global sao" puts $ch "array set sao \{ [array get sao] \}" global eso puts $ch "global eso" puts $ch "array set eso \{ [array get eso] \}" global stsci puts $ch "global stsci" puts $ch "array set stsci \{ [array get stsci] \}" global twomass puts $ch "global twomass" puts $ch "array set twomass \{ [array get twomass] \}" global nvss puts $ch "global nvss" puts $ch "array set nvss \{ [array get nvss] \}" global vlss puts $ch "global vlss" puts $ch "array set vlss \{ [array get vlss] \}" global skyview puts $ch "global skyview" puts $ch "array set skyview \{ [array get skyview] \}" global cat puts $ch "global cat" puts $ch "array set cat \{ [array get cat] \}" global pcat puts $ch "global pcat" puts $ch "array set pcat \{ [array get pcat] \}" global vla puts $ch "global vla" puts $ch "array set vla \{ [array get vla] \}" global pvo puts $ch "global pvo" puts $ch "array set pvo \{ [array get pvo] \}" global pap puts $ch "global pap" puts $ch "array set pap \{ [array get pap] \}" global panalysis puts $ch "global panalysis" puts $ch "array set panalysis \{ [array get panalysis] \}" global active puts $ch "global active" puts $ch "array set active \{ [array get active] \}" } proc ProcessBackupCmd {varname iname} { upvar $varname var upvar $iname i set fn [lindex $var $i] if {$fn != {}} { FileLast backupfbox $fn Backup $fn } else { Error [msgcat::mc {Unable to open file}] } } proc ProcessRestoreCmd {varname iname} { upvar $varname var upvar $iname i set fn [lindex $var $i] if {$fn != {}} { FileLast backupfbox $fn Restore $fn } else { Error [msgcat::mc {Unable to open file}] } } saods9/ds9/library/bin.tcl000644 000765 000000 00000051314 12705445646 016024 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc BinDef {} { global bin global ibin global pbin global tcl_platform set ibin(top) .bl set ibin(mb) .blmb set bin(lock) 0 set bin(function) sum set bin(factor) { 1 1 } set bin(depth) 1 set bin(buffersize) 1024 array set pbin [array get bin] # prefs only set pbin(wheel) 0 set pbin(wheel,factor) 1.2 # special case switch -- $tcl_platform(os) { Darwin { switch [lindex [split $tcl_platform(osVersion) {.}] 0] { 11 {set pbin(wheel,factor) 1.01} } } } } proc Bin {bx by} { global current if {$current(frame) != {}} { BinFrame $current(frame) $bx $by } } proc BinFrame {which bx by} { global bin global current global rgb RGBEvalLock rgb(lock,bin) $which [list $which bin factor $bx $by] if {$which == $current(frame)} { set bin(factor) "[$current(frame) get bin factor]" } UpdateBin } proc BinAbout {x y} { global bin global current global rgb if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,bin) [list $current(frame) bin about $x $y] UpdateBin } } proc BinAboutCenter {} { global bin global current global rgb if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,bin) [list $current(frame) bin about center] UpdateBin } } proc BinCols {x y z} { global bin global current global rgb if {$current(frame) != {}} { if {![$current(frame) has bin column $x]} { Error "[msgcat::mc {Invalid Column Name}] $x" return } if {![$current(frame) has bin column $y]} { Error "[msgcat::mc {Invalid Column Name}] $y" return } if {$z!={""}} { if {![$current(frame) has bin column $z]} { Error "[msgcat::mc {Invalid Column Name}] $z" return } } RGBEvalLockCurrent rgb(lock,bin) "$current(frame) bin cols \{$x\} \{$y\} \{$z\}" UpdateBin } } proc BinFilter {str} { global bin global current global rgb if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,bin) "$current(frame) bin filter \{\{$str\}\}" UpdateBin } } proc BinToFit {} { global current global bin global rgb if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,bin) [list $current(frame) bin to fit] set bin(factor) "[$current(frame) get bin factor]" UpdateBin } } proc ChangeBinFactor {} { global bin global current global rgb if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,bin) [list $current(frame) bin factor to $bin(factor)] UpdateBin } } proc ChangeBinDepth {} { global bin global current global rgb if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,bin) [list $current(frame) bin depth $bin(depth)] UpdateBin } } proc ChangeBinFunction {} { global bin global current global rgb if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,bin) [list $current(frame) bin function $bin(function)] UpdateBin } } proc ChangeBinBufferSize {} { global bin global current global rgb if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,bin) [list $current(frame) bin buffer size $bin(buffersize)] UpdateBin } } proc UpdateBin {} { global current global debug if {$debug(tcl,update)} { puts stderr "UpdateBin" } LockBinCurrent UpdateBinDialog UpdateCrosshairDialog UpdateCropDialog UpdateCubeDialog UpdateScaleDialog UpdateContourScale UpdateContourDialog UpdateWCSDialog UpdateGraphXAxis $current(frame) UpdateGraphYAxis $current(frame) UpdateMain } proc BinDialog {} { global bin global ibin global dbin global ds9 # see if we already have a window visible if {[winfo exists $ibin(top)]} { raise $ibin(top) return } # create the window set w $ibin(top) set mb $ibin(mb) Toplevel $w $mb 6 [msgcat::mc {Binning Parameters}] BinDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit $mb add cascade -label [msgcat::mc {Method}] -menu $mb.method $mb add cascade -label [msgcat::mc {Bin}] -menu $mb.bin $mb add cascade -label [msgcat::mc {Buffer}] -menu $mb.buffer menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] \ -command BinApplyDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Update Filter}] \ -command BinUpdateFilterDialog $mb.file add command -label [msgcat::mc {Clear Filter}] \ -command BinClearFilterDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command BinDestroyDialog EditMenu $mb ibin menu $mb.method $mb.method add radiobutton -label [msgcat::mc {Average}] \ -variable bin(function) -value average -command ChangeBinFunction $mb.method add radiobutton -label [msgcat::mc {Sum}] \ -variable bin(function) -value sum -command ChangeBinFunction menu $mb.bin $mb.bin add command -label [msgcat::mc {Bin In}] \ -command {Bin .5 .5} $mb.bin add command -label [msgcat::mc {Bin Out}] \ -command {Bin 2 2} $mb.bin add command -label [msgcat::mc {Bin Fit}] \ -command BinToFit $mb.bin add separator $mb.bin add radiobutton -label "[msgcat::mc {Bin}] 1" \ -variable bin(factor) -value { 1 1 } -command ChangeBinFactor $mb.bin add radiobutton -label "[msgcat::mc {Bin}] 2" \ -variable bin(factor) -value { 2 2 } -command ChangeBinFactor $mb.bin add radiobutton -label "[msgcat::mc {Bin}] 4" \ -variable bin(factor) -value { 4 4 } -command ChangeBinFactor $mb.bin add radiobutton -label "[msgcat::mc {Bin}] 8" \ -variable bin(factor) -value { 8 8 } -command ChangeBinFactor $mb.bin add radiobutton -label "[msgcat::mc {Bin}] 16" \ -variable bin(factor) -value { 16 16 } -command ChangeBinFactor $mb.bin add radiobutton -label "[msgcat::mc {Bin}] 32" \ -variable bin(factor) -value { 32 32 } -command ChangeBinFactor $mb.bin add radiobutton -label "[msgcat::mc {Bin}] 64" \ -variable bin(factor) -value { 64 64 } -command ChangeBinFactor $mb.bin add radiobutton -label "[msgcat::mc {Bin}] 128" \ -variable bin(factor) -value { 128 128 } -command ChangeBinFactor $mb.bin add radiobutton -label "[msgcat::mc {Bin}] 256" \ -variable bin(factor) -value { 256 256 } -command ChangeBinFactor menu $mb.buffer $mb.buffer add radiobutton -label {128x128} \ -variable bin(buffersize) -value 128 -command ChangeBinBufferSize $mb.buffer add radiobutton -label {256x256} \ -variable bin(buffersize) -value 256 -command ChangeBinBufferSize $mb.buffer add radiobutton -label {512x512} \ -variable bin(buffersize) -value 512 -command ChangeBinBufferSize $mb.buffer add radiobutton -label {1024x1024} \ -variable bin(buffersize) -value 1024 -command ChangeBinBufferSize $mb.buffer add radiobutton -label {2048x2048} \ -variable bin(buffersize) -value 2048 -command ChangeBinBufferSize $mb.buffer add radiobutton -label {4096x4096} \ -variable bin(buffersize) -value 4096 -command ChangeBinBufferSize $mb.buffer add radiobutton -label {8192x8192} \ -variable bin(buffersize) -value 8192 -command ChangeBinBufferSize # Columns set f [ttk::labelframe $w.cols -text [msgcat::mc {Bin Columns}] -padding 2] ttk::label $f.title -text [msgcat::mc {Column}] ttk::label $f.titlefactor -text [msgcat::mc {Bin}] ttk::label $f.titlemin -text [msgcat::mc {Min}] ttk::label $f.titlemax -text [msgcat::mc {Max}] ttk::menubutton $f.x -textvariable dbin(xcol) -menu $f.x.m -width 10 ttk::entry $f.xfactor -textvariable dbin(factor,x) -width 8 ttk::label $f.xmin -textvariable dbin(xcol,min) -width 12 -relief groove ttk::label $f.xmax -textvariable dbin(xcol,max) -width 12 -relief groove ttk::menubutton $f.y -textvariable dbin(ycol) -menu $f.y.m -width 10 ttk::entry $f.yfactor -textvariable dbin(factor,y) -width 8 ttk::label $f.ymin -textvariable dbin(ycol,min) -width 12 -relief groove ttk::label $f.ymax -textvariable dbin(ycol,max) -width 12 -relief groove grid $f.title $f.titlefactor $f.titlemin $f.titlemax -padx 2 -pady 2 grid $f.x $f.xfactor $f.xmin $f.xmax -padx 2 -pady 2 grid $f.y $f.yfactor $f.ymin $f.ymax -padx 2 -pady 2 # Center set f [ttk::labelframe $w.center -text [msgcat::mc {Bin Center}] -padding 2] ttk::entry $f.x -textvariable dbin(x) -width 12 ttk::entry $f.y -textvariable dbin(y) -width 12 ttk::checkbutton $f.auto -text [msgcat::mc {or center of data}] \ -variable dbin(auto) grid $f.x $f.y $f.auto -padx 2 -pady 2 # Filter set f [ttk::labelframe $w.filter -text [msgcat::mc {Bin Filter}] -padding 2] set dbin(filter,entry) \ [ttk::entry $f.filter -textvariable dbin(filter) -width 40] grid $f.filter -padx 2 -pady 2 # Bin 3rd Column set f [ttk::labelframe $w.z -text [msgcat::mc {Bin 3rd Column}] -padding 2] ttk::label $f.title -text [msgcat::mc {Column}] ttk::label $f.titledepth -text [msgcat::mc {Depth}] ttk::label $f.titlemin -text [msgcat::mc {Min}] ttk::label $f.titlemax -text [msgcat::mc {Max}] ttk::menubutton $f.z -textvariable dbin(zcol) -menu $f.z.m -width 10 ttk::entry $f.depth -textvariable dbin(depth) -width 8 ttk::entry $f.min -textvariable dbin(zcol,min) -width 12 ttk::entry $f.max -textvariable dbin(zcol,max) -width 12 grid $f.title $f.titledepth $f.titlemin $f.titlemax -padx 2 -pady 2 grid $f.z $f.depth $f.min $f.max -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] -command BinApplyDialog ttk::button $f.update -text [msgcat::mc {Update Filter}] \ -command BinUpdateFilterDialog ttk::button $f.clear -text [msgcat::mc {Clear Filter}] \ -command BinClearFilterDialog ttk::button $f.close -text [msgcat::mc {Close}] -command BinDestroyDialog pack $f.apply $f.update $f.clear $f.close \ -side left -expand true -padx 2 -pady 4 # Fini grid $w.cols -sticky news grid $w.center -sticky news grid $w.filter -sticky news grid $w.z -sticky news grid $w.buttons -sticky ew grid rowconfigure $w 0 -weight 1 grid rowconfigure $w 1 -weight 1 grid rowconfigure $w 2 -weight 1 grid rowconfigure $w 3 -weight 1 grid columnconfigure $w 0 -weight 1 $w.cols.xfactor select range 0 end set dbin(auto) 0 set dbin(minmax) 1 UpdateBinDialog } proc PopUp {b m l cmd} { global ds9 destroy $m menu $m -tearoff 0 set cnt -1 for {set ii 0} {$ii<[llength $l]} {incr ii} { $m add command -label [lindex $l $ii] \ -command "global dbin;set $b [lindex $l $ii]; $cmd" # wrap if needed incr cnt if {$cnt>=$ds9(menu,size,wrap)} { set cnt 0 $m entryconfig $ii -columnbreak 1 } } } proc BlankPopUp {m} { destroy $m menu $m -tearoff 0 } proc UpdateBinDialog {} { global bin global ibin global dbin global current global debug if {$debug(tcl,update)} { puts stderr "UpdateBinDialog" } if {![winfo exists $ibin(top)]} { return } if {$current(frame) == {}} { return } set w $ibin(top) set bf "[$current(frame) get bin factor]" set dbin(factor,x) [lindex $bf 0] set dbin(factor,y) [lindex $bf 1] set dbin(depth) [$current(frame) get bin depth] if {[$current(frame) has fits bin]} { set cols [$current(frame) get bin cols] set colslist "[$current(frame) get bin list]" set dbin(xcol) [lindex $cols 0] set dbin(ycol) [lindex $cols 1] PopUp dbin(xcol) $w.cols.x.m $colslist UpdateXCol PopUp dbin(ycol) $w.cols.y.m $colslist UpdateYCol set mm [$current(frame) get bin cols minmax \{$dbin(xcol)\}] set dbin(xcol,min) [lindex $mm 0] set dbin(xcol,max) [lindex $mm 1] set mm [$current(frame) get bin cols minmax \{$dbin(ycol)\}] set dbin(ycol,min) [lindex $mm 0] set dbin(ycol,max) [lindex $mm 1] set cursor [$current(frame) get bin cursor] set dbin(x) [lindex $cursor 0] set dbin(y) [lindex $cursor 1] set dbin(filter) [$current(frame) get bin filter] set dbin(zcol) [lindex $cols 2] PopUp dbin(zcol) $w.z.z.m $colslist UpdateZCol set mm [$current(frame) get bin cols dim \{$dbin(zcol)\}] set dbin(zcol,min) [lindex $mm 0] set dbin(zcol,max) [lindex $mm 1] } else { set dbin(xcol) {} set dbin(xcol,min) {} set dbin(xcol,max) {} set dbin(ycol) {} set dbin(ycol,min) {} set dbin(ycol,max) {} set dbin(x) {} set dbin(y) {} set dbin(filter) {} set dbin(zcol) {} set dbin(zcol,min) {} set dbin(zcol,max) {} BlankPopUp $w.cols.x.m BlankPopUp $w.cols.y.m BlankPopUp $w.z.z.m } } proc UpdateXCol {} { global current global dbin if {$current(frame) != {} && [$current(frame) has fits bin] && $dbin(xcol) != {}} { set mm [$current(frame) get bin cols minmax \{$dbin(xcol)\}] set dbin(xcol,min) [lindex $mm 0] set dbin(xcol,max) [lindex $mm 1] } else { set dbin(xcol,min) {} set dbin(xcol,max) {} } } proc UpdateYCol {} { global current global dbin if {$current(frame) != {} && [$current(frame) has fits bin] && $dbin(ycol) != {}} { set mm [$current(frame) get bin cols minmax \{$dbin(ycol)\}] set dbin(ycol,min) [lindex $mm 0] set dbin(ycol,max) [lindex $mm 1] } else { set dbin(ycol,min) {} set dbin(ycol,max) {} } } proc UpdateZCol {} { global current global dbin if {$current(frame) != {} && [$current(frame) has fits bin] && $dbin(zcol) != {}} { if {$dbin(minmax)} { set mm [$current(frame) get bin cols dim \{$dbin(zcol)\}] set dbin(zcol,min) [lindex $mm 0] set dbin(zcol,max) [lindex $mm 1] } } else { set dbin(zcol,min) {} set dbin(zcol,max) {} } } proc BinApplyDialog {} { global bin global dbin global current global rgb if {$current(frame) == {}} { # reset set dbin(auto) 0 return } # clean up filter if needed set dbin(filter) [string trimleft $dbin(filter)] set dbin(filter) [string trimright $dbin(filter)] # delete any markers if needed if {[$current(frame) has fits bin]} { set foo [$current(frame) get bin cols] set xcol [lindex $foo 0] set ycol [lindex $foo 1] if {$xcol != $dbin(xcol) || $ycol != $dbin(ycol)} { $current(frame) marker delete all } } if {$dbin(depth)>1} { CubeDialog if {$dbin(auto)} { if {$dbin(factor,x) != {} && $dbin(factor,y) != {} && $dbin(depth) != {} && $dbin(zcol,min) != {} && $dbin(zcol,max) != {} && $dbin(xcol) != {} && $dbin(ycol) != {} && $dbin(zcol) != {}} { RGBEvalLockCurrent rgb(lock,bin) \ [list $current(frame) bin to $dbin(factor,x) $dbin(factor,y) $dbin(depth) $dbin(zcol,min) $dbin(zcol,max) about center \{$dbin(xcol)\} \{$dbin(ycol)\} \{$dbin(zcol)\} \{$dbin(filter)\}] } } else { if {$dbin(factor,x) != {} && $dbin(factor,y) != {} && $dbin(depth) != {} && $dbin(zcol,min) != {} && $dbin(zcol,max) != {} && $dbin(x) != {} && $dbin(y) != {} && $dbin(xcol) != {} && $dbin(ycol) != {} && $dbin(zcol) != {}} { RGBEvalLockCurrent rgb(lock,bin) \ [list $current(frame) bin to $dbin(factor,x) $dbin(factor,y) $dbin(depth) $dbin(zcol,min) $dbin(zcol,max) about $dbin(x) $dbin(y) \{$dbin(xcol)\} \{$dbin(ycol)\} \{$dbin(zcol)\} \{$dbin(filter)\}] } } } else { if {$dbin(auto)} { if {$dbin(factor,x) != {} && $dbin(factor,y) != {} && $dbin(xcol) != {} && $dbin(ycol) != {}} { RGBEvalLockCurrent rgb(lock,bin) \ [list $current(frame) bin to $dbin(factor,x) $dbin(factor,y) about center \{$dbin(xcol)\} \{$dbin(ycol)\} \{$dbin(filter)\}] } } else { if {$dbin(factor,x) != {} && $dbin(factor,y) != {} && $dbin(x) != {} && $dbin(y) != {} && $dbin(xcol) != {} && $dbin(ycol) != {}} { RGBEvalLockCurrent rgb(lock,bin) \ [list $current(frame) bin to $dbin(factor,x) $dbin(factor,y) about $dbin(x) $dbin(y) \{$dbin(xcol)\} \{$dbin(ycol)\} \{$dbin(filter)\}] } } } UpdateScaleMenu UpdateBinMenu UpdateBin # reset set dbin(auto) 0 } proc BinUpdateFilterDialog {} { global dbin global current $dbin(filter,entry) delete 0 end if {$current(frame) != {}} { $dbin(filter,entry) insert 0 \ [$current(frame) marker list ds9 physical fk5 degrees yes] } } proc BinClearFilterDialog {} { global dbin $dbin(filter,entry) delete 0 end } proc BinDestroyDialog {} { global ibin global dbin if {[winfo exists $ibin(top)]} { destroy $ibin(top) destroy $ibin(mb) } unset dbin } proc MatchBinCurrent {} { global current if {$current(frame) != {}} { MatchBin $current(frame) } } proc MatchBin {which} { global ds9 global rgb set factor [$which get bin factor] set depth [$which get bin depth] set filter [$which get bin filter] set size [$which get bin buffer size] set function [$which get bin function] set cols [$which get bin cols] foreach ff $ds9(frames) { if {$ff != $which} { RGBEvalLock rgb(lock,bin) $ff [list $ff bin factor to $factor] RGBEvalLock rgb(lock,bin) $ff [list $ff bin depth $depth] RGBEvalLock rgb(lock,bin) $ff "$ff bin filter \{\{$filter\}\}" RGBEvalLock rgb(lock,bin) $ff [list $ff bin buffer size $size] RGBEvalLock rgb(lock,bin) $ff [list $ff bin function $function] RGBEvalLock rgb(lock,bin) $ff "$ff bin cols \{\{[lindex $cols 0]\}\} \{\{[lindex $cols 1]\}\} \{\{[lindex $cols 2]\}\}" } } } proc LockBinCurrent {} { global current if {$current(frame) != {}} { LockBin $current(frame) } } proc LockBin {which} { global bin if {$bin(lock)} { MatchBin $which } } proc BinBackup {ch which} { switch [$which get type] { base - 3d {BinBackupBase $ch $which} rgb {BinBackupRGB $ch $which} } } proc BinBackupBase {ch which} { puts $ch "$which bin factor to [$which get bin factor]" puts $ch "$which bin depth [$which get bin depth]" puts $ch "$which bin filter \{\"[$which get bin filter]\"\}" puts $ch "$which bin buffer size [$which get bin buffer size]" set pos [$which get bin cursor] if {$pos != {}} { puts $ch "$which bin about $pos" } puts $ch "$which bin function [$which get bin function]" set cols [$which get bin cols] if {$cols != {}} { puts $ch "$which bin cols \{\"[lindex $cols 0]\"\} \{\"[lindex $cols 1]\"\} \{\"[lindex $cols 2]\"\} " } } proc BinBackupRGB {ch which} { set sav [$which get rgb channel] foreach cc {red green blue} { $which rgb channel $cc puts $ch "$which rgb channel $cc" BinBackupBase $ch $which } $which rgb channel $sav puts $ch "$which rgb channel $sav" } # Process Cmds proc ProcessBinCmd {varname iname} { upvar $varname var upvar $iname i global bin switch -- [string tolower [lindex $var $i]] { close {BinDestroyDialog} open {BinDialog} match {MatchBinCurrent} lock { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set bin(lock) [FromYesNo [lindex $var $i]] } else { set bin(lock) 1 incr i -1 } LockBinCurrent } about { incr i switch [lindex $var $i] { center { BinAboutCenter } default { BinAbout [lindex $var [expr $i+0]] [lindex $var [expr $i+1]] incr i } } } buffersize { incr i set bin(buffersize) [lindex $var $i] ChangeBinBufferSize } cols { BinCols \"[lindex $var [expr $i+1]]\" \"[lindex $var [expr $i+2]]\" \"\" incr i 2 } colsz { BinCols \"[lindex $var [expr $i+1]]\" \"[lindex $var [expr $i+2]]\" \"[lindex $var [expr $i+3]]\" incr i 3 } factor { incr i set bx [lindex $var $i] set by [lindex $var [expr $i+1]] # note: the spaces are needed so that the menus are in sync if {$by != {} && [string is double $by]} { set bin(factor) " $bx $by " incr i } else { set bin(factor) " $bx $bx " } ChangeBinFactor } depth { incr i set bin(depth) [lindex $var $i] ChangeBinDepth } filter { incr i BinFilter [lindex $var $i] } function { incr i set bin(function) [string tolower [lindex $var $i]] ChangeBinFunction } in {Bin .5 .5} out {Bin 2 2} to { # eat the 'fit' incr i BinToFit } } } proc ProcessSendBinCmd {proc id param} { global bin global current switch -- [string tolower [lindex $param 0]] { lock {$proc $id [ToYesNo $bin(lock)]} about { if {$current(frame) != {}} { $proc $id "[$current(frame) get bin cursor]\n" } } buffersize {$proc $id "$bin(buffersize)\n"} cols { if {$current(frame) != {}} { $proc $id "[$current(frame) get bin cols]\n" } } factor {$proc $id "$bin(factor)\n"} depth {$proc $id "$bin(depth)\n"} filter { if {$current(frame) != {}} { $proc $id "[$current(frame) get bin filter]\n" } } function {$proc $id "$bin(function)\n"} } } saods9/ds9/library/block.tcl000644 000765 000000 00000017363 12705445646 016354 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc BlockDef {} { global iblock global block global pblock set iblock(top) .blk set iblock(mb) .blkmb set block(lock) 0 set block(factor) { 1 1 } array set pblock [array get block] } proc BlockToFit {} { global block global current if {$current(frame) != {}} { SetWatchCursor RGBEvalLockCurrent rgb(lock,block) [list $current(frame) block to fit] ResetWatchCursor set block(factor) [$current(frame) get block factor] UpdateBlock } } proc ChangeBlock {} { global block global current if {$current(frame) != {}} { SetWatchCursor RGBEvalLockCurrent rgb(lock,block) [list $current(frame) block to $block(factor)] ResetWatchCursor UpdateBlock } } proc Block {bx by} { global block global current if {$current(frame) != {}} { SetWatchCursor RGBEvalLockCurrent rgb(lock,block) [list $current(frame) block $bx $by] set block(factor) [$current(frame) get block factor] ResetWatchCursor UpdateBlock } } proc UpdateBlock {} { global current LockBlockCurrent UpdateBlockDialog UpdateCrosshairDialog UpdateCropDialog UpdateCubeDialog UpdateScaleDialog UpdateContourScale UpdateContourDialog UpdateWCSDialog UpdateGraphXAxis $current(frame) UpdateGraphYAxis $current(frame) UpdateMain UpdateHeaderDialog } proc BlockDialog {} { global block global iblock global dblock global ds9 global current # see if we already have a window visible if {[winfo exists $iblock(top)]} { raise $iblock(top) return } # create the window set w $iblock(top) set mb $iblock(mb) Toplevel $w $mb 6 [msgcat::mc {Block Parameters}] \ BlockDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit $mb add cascade -label [msgcat::mc {Block}] -menu $mb.block menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] \ -command BlockApplyDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command BlockDestroyDialog EditMenu $mb iblock menu $mb.block $mb.block add command -label [msgcat::mc {Block In}] -command {Block .5 .5} $mb.block add command -label [msgcat::mc {Block Out}] -command {Block 2 2} $mb.block add command -label [msgcat::mc {Block Fit}] -command BlockToFit $mb.block add separator $mb.block add radiobutton -label "[msgcat::mc {Block}] 1" \ -variable block(factor) -value { 1 1 } -command ChangeBlock $mb.block add radiobutton -label "[msgcat::mc {Block}] 2" \ -variable block(factor) -value { 2 2 } -command ChangeBlock $mb.block add radiobutton -label "[msgcat::mc {Block}] 4" \ -variable block(factor) -value { 4 4 } -command ChangeBlock $mb.block add radiobutton -label "[msgcat::mc {Block}] 8" \ -variable block(factor) -value { 8 8 } -command ChangeBlock $mb.block add radiobutton -label "[msgcat::mc {Block}] 16" \ -variable block(factor) -value { 16 16 } -command ChangeBlock $mb.block add radiobutton -label "[msgcat::mc {Block}] 32" \ -variable block(factor) -value { 32 32 } -command ChangeBlock # Param set f [ttk::frame $w.param] ttk::label $f.blocktitle -text [msgcat::mc {Block}] ttk::entry $f.blockx -textvariable dblock(x) -width 14 ttk::entry $f.blocky -textvariable dblock(y) -width 14 grid $f.blocktitle $f.blockx $f.blocky -padx 2 -pady 2 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] -command BlockApplyDialog ttk::button $f.close -text [msgcat::mc {Close}] \ -command BlockDestroyDialog pack $f.apply $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true $w.param.blockx select range 0 end UpdateBlockDialog } proc BlockApplyDialog {} { global block global iblock global dblock global current if {$current(frame) != {}} { set block(factor) "$dblock(x) $dblock(y)" RGBEvalLockCurrent rgb(lock,block) [list $current(frame) block to $block(factor)] LockFrameCurrent UpdateGraphXAxis $current(frame) UpdateBlockDialog RefreshInfoBox $current(frame) } } proc BlockDestroyDialog {} { global iblock global dblock if {[winfo exists $iblock(top)]} { destroy $iblock(top) destroy $iblock(mb) } unset dblock } proc UpdateBlockDialog {} { global block global iblock global dblock global current global debug if {$debug(tcl,update)} { puts stderr "UpdateBlockDialog" } if {![winfo exists $iblock(top)]} { return } if {$current(frame) != {}} { set zz [$current(frame) get block factor] set dblock(x) [lindex $zz 0] set dblock(y) [lindex $zz 1] } else { set dblock(x) {} set dblock(y) {} } } proc UpdateBlockMenu {} { global block global current global debug if {$debug(tcl,update)} { puts stderr "UpdateBlockMenu" } if {$current(frame) != {}} { set block(factor) [$current(frame) get block factor] } } proc MatchBlockCurrent {} { global current if {$current(frame) != {}} { MatchBlock $current(frame) } } proc MatchBlock {which} { global ds9 global rgb set factor [$which get block factor] foreach ff $ds9(frames) { if {$ff != $which} { RGBEvalLock rgb(lock,block) $ff [list $ff block to $factor] } } } proc LockBlockCurrent {} { global current if {$current(frame) != {}} { LockBlock $current(frame) } } proc LockBlock {which} { global block if {$block(lock)} { MatchBlock $which } } proc BlockBackup {ch which} { switch [$which get type] { base - 3d {BlockBackupBase $ch $which} rgb {BlockBackupRGB $ch $which} } } proc BlockBackupBase {ch which} { set factor [$which get block factor] puts $ch "$which block to $factor" } proc BlockBackupRGB {ch which} { set sav [$which get rgb channel] foreach cc {red green blue} { $which rgb channel $cc puts $ch "$which rgb channel $cc" BlockBackupBase $ch $which } $which rgb channel $sav puts $ch "$which rgb channel $sav" } proc ProcessBlockCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized ProcessRealizeDS9 global block switch -- [string tolower [lindex $var $i]] { open {BlockDialog} close {BlockDestroyDialog} match {MatchBlockCurrent} lock { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set block(lock) [FromYesNo [lindex $var $i]] } else { set block(lock) 1 incr i -1 } LockBlockCurrent } in {Block .5 .5} out {Block 2 2} to { switch -- [string tolower [lindex $var [expr $i+1]]] { fit { BlockToFit incr i } default { set b1 [lindex $var [expr $i+1]] set b2 [lindex $var [expr $i+2]] if {[string is double $b2] && $b2 != {}} { set block(factor) " $b1 $b2 " incr i 2 } else { set block(factor) " $b1 $b1 " incr i } ChangeBlock } } } default { set b1 [lindex $var $i] set b2 [lindex $var [expr $i+1]] if {[string is double $b2] && $b2 != {}} { Block $b1 $b2 incr i } else { Block $b1 $b1 } } } } proc ProcessSendBlockCmd {proc id param} { global block switch -- [lindex $param 0] { lock {$proc $id [ToYesNo $block(lock)]} default { set z1 [lindex $block(factor) 0] set z2 [lindex $block(factor) 1] if {$z1 != $z2} { $proc $id "$block(factor)\n" } else { $proc $id "$z1\n" } } } } saods9/ds9/library/box.tcl000644 000765 000000 00000006164 12705445646 016047 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc BoxDialog {varname} { upvar #0 $varname var global $varname global pmarker # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # variables set rr [$var(frame) get wcs] set var(dcoord) [lindex $rr 0] set var(dformat) $pmarker(dformat) AdjustCoordSystem $varname dcoord # procs set var(proc,apply) BoxApply set var(proc,close) BoxClose set var(proc,coordCB) BoxCoordCB # base MarkerBaseCenterDialog $varname # analysis $var(mb) add cascade -label [msgcat::mc {Analysis}] -menu $var(mb).analysis menu $var(mb).analysis MarkerAnalysisStatsDialog $varname MarkerAnalysisHistogramDialog $varname MarkerAnalysisPlot3dDialog $varname # init BoxEditCB $varname MarkerBaseCenterRotateCB $varname # callbacks $var(frame) marker $var(id) callback edit BoxEditCB $varname $var(frame) marker $var(id) callback rotate \ MarkerBaseCenterRotateCB $varname set f $var(top).param # Radius ttk::label $f.tradius -text Size ttk::entry $f.radius1 -textvariable ${varname}(radius1) -width 13 ttk::entry $f.radius2 -textvariable ${varname}(radius2) -width 13 DistMenuButton $f.uradius $varname dcoord 1 dformat \ [list BoxEditCB $varname] DistMenuEnable $f.uradius.menu $varname dcoord 1 dformat # Angle ttk::label $f.tangle -text [msgcat::mc {Angle}] ttk::entry $f.angle -textvariable ${varname}(angle) -width 13 ttk::label $f.uangle -text [msgcat::mc {Degrees}] grid $f.tradius $f.radius1 $f.radius2 $f.uradius -padx 2 -pady 2 -sticky w grid $f.tangle $f.angle $f.uangle -padx 2 -pady 2 -sticky w } # actions proc BoxClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback edit BoxEditCB $var(frame) marker $var(id) delete callback rotate MarkerBaseCenterRotateCB MarkerBaseCenterClose $varname } proc BoxApply {varname} { upvar #0 $varname var global $varname if {$var(radius1) != {} && $var(radius2) !={}} { $var(frame) marker $var(id) box radius \ $var(radius1) $var(radius2) $var(dcoord) $var(dformat) } MarkerBaseCenterRotate $varname MarkerBaseCenterApply $varname } # callbacks proc BoxCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "BoxCoordCB" } MarkerAnalysisStatsSystem $varname MarkerAnalysisPlot3dSystem $varname MarkerBaseCoordCB $varname MarkerBaseCenterMoveCB $varname MarkerBaseCenterRotateCB $varname } proc BoxEditCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "BoxEditCB" } set r [$var(frame) get marker $var(id) box radius \ $var(dcoord) $var(dformat)] set var(radius1) [lindex $r 0] set var(radius2) [lindex $r 1] } saods9/ds9/library/boxannulus.tcl000644 000765 000000 00000001475 12705445646 017455 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc BoxAnnulusDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # procs set var(which) boxannulus set var(proc,apply) MarkerBaseAnnulusRectApply set var(proc,close) MarkerBaseAnnulusRectClose set var(proc,generate) MarkerBaseAnnulusGenerateBox set var(proc,coordCB) MarkerBaseAnnulusRectCoordCB set var(proc,editCB) MarkerBaseAnnulusRectEditCB set var(proc,distCB) MarkerBaseAnnulusRectDistCB # base MarkerBaseAnnulusRectDialog $varname size Width Height } saods9/ds9/library/bpanda.tcl000644 000765 000000 00000001702 12705445646 016475 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc BpandaDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # procs set var(which) bpanda set var(proc,apply) MarkerBasePandaRectApply set var(proc,close) MarkerBasePandaRectClose set var(proc,generate) BpandaGenerate set var(proc,coordCB) MarkerBasePandaRectCoordCB set var(proc,editCB) MarkerBasePandaRectEditCB set var(proc,distCB) MarkerBasePandaRectDistCB # base panda rect dialog MarkerBasePandaRectDialog $varname } proc BpandaGenerate {varname} { upvar #0 $varname var global $varname MarkerBaseAnnulusGenerateBox $varname MarkerBasePandaGenerateAngles $varname } saods9/ds9/library/buttons.tcl000644 000765 000000 00000017313 12705445646 016753 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ButtonsDef {} { global pbuttons # TButtonBar class bindings ttk::copyBindings TButton TButtonBar bind TButtonBar {} bind TButtonBar {} ButtonsFileDef ButtonsEditDef ButtonsViewDef ButtonsFrameDef ButtonsBinDef ButtonsZoomDef ButtonsScaleDef ButtonsColorDef ButtonsRegionDef ButtonsWCSDef ButtonsAnalysisDef ButtonsHelpDef } proc CreateButtons {} { global ds9 global buttons set ds9(buttons) [ttk::frame $ds9(main).buttons] set ds9(buttons,sep) [ttk::separator $ds9(main).sbuttons -orient horizontal] set buttons(majorPrev) $ds9(buttons).file set buttons(majorCurrent) $ds9(buttons).file ttk::frame $ds9(buttons).major RadioButton $ds9(buttons).major.file \ [string tolower [msgcat::mc {File}]] \ buttons(majorCurrent) $ds9(buttons).file MajorButton RadioButton $ds9(buttons).major.edit \ [string tolower [msgcat::mc {Edit}]] \ buttons(majorCurrent) $ds9(buttons).edit MajorButton RadioButton $ds9(buttons).major.view \ [string tolower [msgcat::mc {View}]] \ buttons(majorCurrent) $ds9(buttons).view MajorButton RadioButton $ds9(buttons).major.frame \ [string tolower [msgcat::mc {Frame}]] \ buttons(majorCurrent) $ds9(buttons).frame MajorButton RadioButton $ds9(buttons).major.bin \ [string tolower [msgcat::mc {Bin}]] \ buttons(majorCurrent) $ds9(buttons).bin MajorButton RadioButton $ds9(buttons).major.zoom \ [string tolower [msgcat::mc {Zoom}]] \ buttons(majorCurrent) $ds9(buttons).zoom MajorButton RadioButton $ds9(buttons).major.scale \ [string tolower [msgcat::mc {Scale}]] \ buttons(majorCurrent) $ds9(buttons).scale MajorButton RadioButton $ds9(buttons).major.color \ [string tolower [msgcat::mc {Color}]] \ buttons(majorCurrent) $ds9(buttons).color MajorButton RadioButton $ds9(buttons).major.region \ [string tolower [msgcat::mc {Region}]] \ buttons(majorCurrent) $ds9(buttons).region MajorButton RadioButton $ds9(buttons).major.wcs \ [string tolower [msgcat::mc {WCS}]] \ buttons(majorCurrent) $ds9(buttons).wcs MajorButton RadioButton $ds9(buttons).major.analysis \ [string tolower [msgcat::mc {Analysis}]] \ buttons(majorCurrent) $ds9(buttons).analysis MajorButton RadioButton $ds9(buttons).major.help \ [string tolower [msgcat::mc {Help}]] \ buttons(majorCurrent) $ds9(buttons).help MajorButton global pbuttons array set pbuttons { major,file 1 major,edit 1 major,view 1 major,frame 1 major,bin 1 major,zoom 1 major,scale 1 major,color 1 major,region 1 major,wcs 1 major,analysis 1 major,help 1 } set buttons(major) " $ds9(buttons).major.file pbuttons(major,file) $ds9(buttons).major.edit pbuttons(major,edit) $ds9(buttons).major.view pbuttons(major,view) $ds9(buttons).major.frame pbuttons(major,frame) $ds9(buttons).major.bin pbuttons(major,bin) $ds9(buttons).major.zoom pbuttons(major,zoom) $ds9(buttons).major.scale pbuttons(major,scale) $ds9(buttons).major.color pbuttons(major,color) $ds9(buttons).major.region pbuttons(major,region) $ds9(buttons).major.wcs pbuttons(major,wcs) $ds9(buttons).major.analysis pbuttons(major,analysis) $ds9(buttons).major.help pbuttons(major,help) " CreateButtonsFile CreateButtonsEdit CreateButtonsView CreateButtonsFrame CreateButtonsBin CreateButtonsZoom CreateButtonsScale CreateButtonsColor CreateButtonsRegion CreateButtonsWCS CreateButtonsAnalysis CreateButtonsHelp LayoutButtons } proc ButtonButton {button text cmd} { ttk::button $button \ -class TButtonBar \ -text $text \ -command $cmd \ -width -1 \ -takefocus 0 } proc RadioButton {button text varname value cmd} { ttk::button $button \ -class TButtonBar \ -text $text \ -width -1 \ -takefocus 0 \ -command "RadioButtonSim $button $varname \{$value\} \{$cmd\}" # setup trace on $varname, so that all buttons that use this variable # will be updated when the variable is changed uplevel #0 trace variable $varname w \ [list "RadioButtonCB $button \{$value\}"] # setup event so that anytime the button is redrawn, # it is updated bind $button "ButtonMap %W $varname" } proc CheckButton {button text varname cmd} { ttk::button $button \ -class TButtonBar \ -text $text \ -width -1 \ -takefocus 0 \ -command "CheckButtonSim $button $varname \{$cmd\}" uplevel #0 trace variable $varname w [list "CheckButtonCB $button"] bind $button "ButtonMap %W $varname" } proc ButtonMap {button varname} { upvar #0 $varname var set vv $var # delay slightly, I don't know why this is needed after 10 [list set $varname $vv] } proc RadioButtonSim {button varname value cmd} { uplevel #0 [list set $varname $value] eval $cmd } proc RadioButtonCB {button value varname id op} { upvar #0 $varname var global $varname global ds9 if {[$button cget -state] != {disabled}} { switch $ds9(wm) { x11 { if {$var($id) == $value} { $button configure -state active } else { $button configure -state normal } } aqua - win32 { if {$var($id) == $value} { $button configure -default active } else { $button configure -default normal } } } } } proc CheckButtonSim {button varname cmd} { upvar #0 $varname var uplevel #0 [list set $varname [expr !$var]] eval $cmd } proc CheckButtonCB {button varname id op} { upvar #0 $varname var global $varname global ds9 if {[$button cget -state] != {disabled}} { switch $ds9(wm) { x11 { if {$var($id)} { $button configure -state active } else { $button configure -state normal } } aqua - win32 { if {$var($id)} { $button configure -default active } else { $button configure -default normal } } } } } proc LayoutButtons {} { global ds9 global buttons global view pack forget $ds9(buttons).major switch $view(layout) { horizontal { $ds9(buttons) configure -width 0 pack propagate $ds9(buttons) on pack $ds9(buttons).major -side top -fill x -expand true } vertical { $ds9(buttons) configure -width 125 pack propagate $ds9(buttons) off pack $ds9(buttons).major -side top -fill x -expand true -anchor n } } UpdateButtons buttons(major) UpdateButtons buttons(file) UpdateButtons buttons(edit) UpdateButtons buttons(view) UpdateButtons buttons(frame) UpdateButtons buttons(bin) UpdateButtons buttons(zoom) UpdateButtons buttons(scale) UpdateButtons buttons(color) UpdateButtons buttons(region) UpdateButtons buttons(wcs) UpdateButtons buttons(analysis) UpdateButtons buttons(help) MajorButton } proc MajorButton {} { global buttons global view pack forget $buttons(majorPrev) switch $view(layout) { horizontal { pack $buttons(majorCurrent) -side top -fill x -expand true } vertical { pack $buttons(majorCurrent) -side bottom -fill x -expand true -anchor s } } set buttons(majorPrev) $buttons(majorCurrent) } proc UpdateButtons {varname} { upvar #0 $varname var foreach {which what} $var { pack forget $which } foreach {which what} $var { ShowButton $which $what } } proc ShowButton {which varname} { upvar #0 $varname var global view if {$var} { switch $view(layout) { horizontal {pack $which -side left -fill both -expand true} vertical {pack $which -side top -fill both -expand true} } } } saods9/ds9/library/cat.tcl000644 000765 000000 00000117022 12741224015 016003 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CATDef {} { global cat global icat global pcat global wcs set icat(cats) {} set icat(rformat) arcmin set icat(width) 15 set icat(height) 15 set icat(max) 5000 set icat(allrows) 1 set icat(allcols) 0 set icat(show) 1 set icat(edit) 0 set icat(panto) 1 set icat(minrows) 20 set icat(mincols) 10 set icat(key) {} set icat(key,update) {} set icat(match1) {} set icat(match2) {} set icat(return) 1and2 set icat(error) 5 set icat(eformat) arcsec set icat(function) 1and2 set icat(unique) 1 set icat(def) { \ {- {Database} db} \ {{NED} catned ned ned} \ {{SIMBAD} catsimbad simbad simbad} \ {{DENIS} catdenis cds {B/denis}} \ {{SkyBot} catskybot skybot skybot} \ {- {Optical} opt} \ {{ASCC-2.5} catascss cds {I/280A/ascc01}} \ {{AAVSO} cataavso cds {B/vsx}} \ {{Carlsberg Meridian 14} catcmc cds {I/304}}\ {{GSC 1.2} catgsc1 cds {I/254/out}} \ {{GSC 2.2} catgsc2 cds {I/271/out}} \ {{GSC 2.3} catgsc3 cds {I/305/out}} \ {{AC 2000.2} catac cds {I/275/ac2002}} \ {{NOMAD} catnomad cds {I/297/out}} \ {{PPMX} catppmx cds {I/312}} \ {{SAO J2000} catsao cds {I/131A/sao}} \ {{SDSS Release 5} catsdss5 cds {II/276}} \ {{SDSS Release 6} catsdss6 cds {II/282}} \ {{SDSS Release 7} catsdss7 cds {II/294}} \ {{SDSS Release 8} catsdss8 cds {II/306}} \ {{SDSS Release 9} catsdss9 cds {V/139}} \ {{Tycho-2} cattycho cds {I/259/tyc2}} \ {{USNO-A2.0} catua2 cds {I/252/out}} \ {{USNO-B1.0} catub1 cds {I/284/out}} \ {{USNO UCAC2} catucac2 cds {I/289/out}} \ {{USNO UCAC2 Bright Star Sup} catucac2sup cds {I/294A}} \ {{USNO UCAC3} catucac3 cds {I/315}} \ {{USNO UCAC4} catucac4 cds {I/322A}} \ {{USNO URAT1} caturat1 cds {I/329}} \ {- {Infrared} ir} \ {{2MASS Point Sources} cat2mass cds {II/246/out}}\ {{IRAS Point Sources} catiras cds {II/125}}\ {- {High Energy} hea} \ {{Chandra Source} catcsc cxc {Current Release}} {{2XMMi Source} catxmm cds {IX/40/xmm2is}} \ {{Second ROSAT PSPC} catrosat cds {IX/30}} \ {- {Radio} radio} \ {{FIRST Survey} catfirst cds {VIII/71/first}} \ {{NVSS} catnvss cds {VIII/65/nvss}} \ {- {Observation Logs} log} \ {{Chandra Archive} catchandralog cds {B/chandra/chandra}} \ {{CFHT Exposures} catcfhtlog cds {B/cfht/chfht}} \ {{ESO Science Archive} catesolog cds {B/eso/safcat}} \ {{HST Archive} cathstlog cds {B/hst/hstlog}} \ {{XMM Observation} catxmmlog cds {B/xmm/xmmlog}} \ } set cat(id) 0 set cat(sym,font,msg) {} # prefs only set pcat(server) cds set pcat(loc) 500 set pcat(sym,shape) {circle point} set pcat(sym,color) green set pcat(sym,width) 1 set pcat(sym,dash) 0 set pcat(sym,units) physical set pcat(sym,font) helvetica set pcat(sym,font,size) 10 set pcat(sym,font,weight) normal set pcat(sym,font,slant) roman set pcat(vot) 1 } # Load via HTTP proc CATGetURL {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATGetURL $varname $var(url)?$var(query)" } ARStatus $varname [msgcat::mc {Loading}] global ihttp if {$var(sync)} { if {![catch {set var(token) [http::geturl $var(url) \ -query $var(query) \ -timeout $ihttp(timeout) \ -headers "[ProxyHTTP]"] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 CATGetURLFinish $varname $var(token) } else { ARError $varname "[msgcat::mc {Unable to locate URL}] $var(url)" } } else { if {![catch {set var(token) [http::geturl $var(url) \ -query $var(query) \ -timeout $ihttp(timeout) \ -command \ [list CATGetURLFinish $varname] \ -headers "[ProxyHTTP]"] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 } else { ARError $varname "[msgcat::mc {Unable to locate URL}] $var(url)" } } } proc CATGetURLIncr {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATGetURLIncr $varname $var(url)?$var(query)" } ARStatus $varname [msgcat::mc {Loading}] global ihttp if {$var(sync)} { if {![catch {set var(token) [http::geturl $var(url) \ -query $var(query) \ -timeout $ihttp(timeout) \ -handler \ [list $var(proc,reader) $var(catdb)] \ -headers "[ProxyHTTP]"] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 CATGetURLFinish $varname $var(token) } else { ARError $varname "[msgcat::mc {Unable to locate URL}] $var(url)" } } else { if {![catch {set var(token) [http::geturl $var(url) \ -query $var(query) \ -timeout $ihttp(timeout) \ -handler \ [list $var(proc,reader) $var(catdb)] \ -command \ [list CATGetURLFinish $varname] \ -headers "[ProxyHTTP]"] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 } else { ARError $varname "[msgcat::mc {Unable to locate URL}] $var(url)" } } } proc CATGetURLFinish {varname token} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATGetURLFinish $varname" } if {!($var(active))} { ARCancelled $varname return } upvar #0 $token t # Code set code [http::ncode $token] # Meta set meta $t(meta) # Log it HTTPLog $token # Result? switch -- $code { {} - 200 - 203 - 404 - 503 { if {[info exist ${varname}(proc,parser)]} { eval [list $var(proc,parser) $var(catdb) $token] } ARDone $varname eval $var(proc,done) $varname } 201 - 300 - 301 - 302 - 303 - 305 - 307 { foreach {name value} $meta { if {[regexp -nocase ^location$ $name]} { global debug if {$debug(tcl,cat)} { puts stderr "CATGetURLFinish redirect $code to $value" } # clean up and resubmit http::cleanup $token unset var(token) set var(url) $value eval $var(proc,load) $varname } } } default {ARError $varname "[msgcat::mc {Error code was returned}] $code"} } } proc CATLoad {varname} { upvar #0 $varname var global $varname # clear previous db global $var(catdb) if {[info exists $var(catdb)]} { unset $var(catdb) } global debug if {$debug(tcl,cat)} { puts stderr "CATLoad $varname $var(url)?$var(query)" } set var(proc,done) CATLoadDone set var(proc,load) CATLoad CATGetURL $varname return } proc CATLoadIncr {varname} { upvar #0 $varname var global $varname # clear previous db global $var(catdb) if {[info exists $var(catdb)]} { unset $var(catdb) } global debug if {$debug(tcl,cat)} { puts stderr "CATLoadIncr $varname $var(url)?$var(query)" } set var(proc,done) CATLoadDone set var(proc,load) CATLoadIncr CATGetURLIncr $varname return } proc CATLoadDone {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATLoadDone $varname" } CATSortMenu $varname CATConfigCols $varname CATColsMenu $varname CATTable $varname CATDialogUpdate $varname } # Load via File proc CATLoadSBFile {varname} { upvar #0 $varname var global $varname set fn [OpenFileDialog catfbox] if {$fn != {}} { CATLoadFn $varname $fn starbase_read } } proc CATLoadVOTFile {varname} { upvar #0 $varname var global $varname set fn [OpenFileDialog catvotfbox] if {$fn != {}} { CATLoadFn $varname $fn VOTRead } } proc CATLoadTSVFile {varname} { upvar #0 $varname var global $varname set fn [OpenFileDialog cattsvfbox] if {$fn != {}} { CATLoadFn $varname $fn TSVRead } } # used by backup proc CATLoadFn {varname fn reader} { upvar #0 $varname var global $varname global $var(catdb) global debug if {$debug(tcl,cat)} { puts stderr "CATLoadFn $varname $fn $reader" } ARStatus $varname [msgcat::mc {Loading Catalog}] CATOff $varname CATSet $varname {} {} $fn set var(name) {} set var(x) {} set var(y) {} set var(width) {} set var(height) {} if {[file exists $fn]} { $reader $var(catdb) $fn } else { Error "[msgcat::mc {Unable to open file}] $fn" return } ARDone $varname CATLoadDone $varname } # Save via File proc CATSaveSBFile {varname} { set fn [SaveFileDialog catfbox] CATSaveFn $varname $fn starbase_write } proc CATSaveVOTFile {varname} { set fn [SaveFileDialog catvotfbox] CATSaveFn $varname $fn VOTWrite } proc CATSaveTSVFile {varname} { set fn [SaveFileDialog cattsvfbox] CATSaveFn $varname $fn TSVWrite } proc CATSaveFn {varname fn writer} { upvar #0 $varname var global $varname global $var(tbldb) if {$fn == {}} { return } # do we have a db? if {![CATValidDB $var(tbldb)]} { return } $writer $var(tbldb) $fn ARDone $varname } # Other procedures proc CATStatusRows {varname rowlist} { upvar #0 $varname var global $varname # rowlist start at 1 if {[llength $rowlist]>0} { ARStatus $varname "[msgcat::mc {Row}] [join $rowlist {,}]" } else { ARStatus $varname {} } } proc CATOff {varname} { upvar #0 $varname var global $varname global $var(catdb) if {[info exists $var(catdb)]} { unset $var(catdb) } global $var(tbldb) if {[info exists $var(tbldb)]} { unset $var(tbldb) } set db $var(tbldb) set ${db}(Nrows) {} $var(tbl) selection clear all if {[info commands $var(frame)] != {}} { if {[$var(frame) has fits]} { $var(frame) marker catalog $varname delete } } CATSortMenu $varname CATColsMenu $varname set var(filter) {} set var(sort) {} set var(colx) {} set var(coly) {} set var(blink) 0 # plot window? if {$var(plot)} { PlotDestroy $var(plot,var) set var(plot) 0 set var(plot,var) {} set var(plot,x) {} set var(plot,xerr) {} set var(plot,y) {} set var(plot,yerr) {} } CATDialogUpdate $varname } # used by backup proc CATTable {varname} { upvar #0 $varname var global $varname global $var(catdb) global icat global debug if {$debug(tcl,cat)} { puts stderr "CATTable $varname" } if {![CATValidDB $var(catdb)]} { return } # delete any previous tbldb set db ${varname}tbldb global $db if {[info exists $db]} { unset $db } # clear the selection $var(tbl) selection clear all # clear regions if {[info commands $var(frame)] != {}} { if {[$var(frame) has fits]} { $var(frame) marker catalog $varname delete } } if {$var(filter) == {} && $var(sort) == {}} { set var(tbldb) $var(catdb) } else { set var(tbldb) ${varname}tbldb global $var(tbldb) if {![CATFltSort $varname]} { Error "[msgcat::mc {Unable to evaluate filter}] $var(filter)" if {[info exists $var(tbldb)]} { unset $var(tbldb) } set var(tbldb) $var(catdb) } } global $var(tbldb) $var(tbl) configure -variable $var(tbldb) $var(found) configure -textvariable ${var(tbldb)}(Nrows) # starbase_writefp $var(catdb) stdout # starbase_writefp $var(tbldb) stdout if {[starbase_nrows $var(tbldb)] == 0} { ARStatus $varname [msgcat::mc {No Items Found}] return } set nc [starbase_ncols $var(tbldb)] if { $nc > $icat(mincols)} { $var(tbl) configure -cols $nc } else { $var(tbl) configure -cols $icat(mincols) } # add header set nr [expr [starbase_nrows $var(tbldb)]+1] if {$nr > $icat(minrows)} { $var(tbl) configure -rows $nr } else { $var(tbl) configure -rows $icat(minrows) } CATGenerate $varname # regenerate the plot if needed if {$var(plot)} { CATPlotGenerate $varname } set nr [starbase_nrows $var(tbldb)] if {$nr >= $var(max) && !$var(allrows)} { ARStatus $varname "$nr [msgcat::mc {rows of data have been downloaded. More may be available. You may wish to adjust the maximum allowed}]" } } proc CATGenerate {varname} { upvar #0 $varname var global $varname global $var(tbldb) global debug if {$debug(tcl,cat)} { puts stderr "CATGenerate $varname" } # do we have a db? if {![CATValidDB $var(tbldb)]} { return } ARStatus $varname [msgcat::mc {Plotting Regions}] # delete any previous if {[info commands $var(frame)] != {}} { if {[$var(frame) has fits]} { $var(frame) marker catalog $varname delete } } if {$var(show)} { global reg set reg {} CATReg $varname {} 1 reg if {[info commands $var(frame)] != {}} { if {[$var(frame) has fits]} { if {[catch {$var(frame) marker catalog command ds9 var reg}]} { ARError $varname "[msgcat::mc {Internal Parse Error}]" return } } } } ARStatus $varname [msgcat::mc Done] } proc CATGenerateRegions {varname} { upvar #0 $varname var global $varname global $var(tbldb) global debug if {$debug(tcl,cat)} { puts stderr "CATGenerateRegions $varname" } # do we have a db? if {![CATValidDB $var(tbldb)]} { return } ARStatus $varname [msgcat::mc {Generating Regions}] global reg set reg {} CATReg $varname {} 0 reg if {[info commands $var(frame)] != {}} { if {[$var(frame) has fits]} { if {[catch {$var(frame) marker command ds9 var reg}]} { ARError $varname "[msgcat::mc {Internal Parse Error}]" return } } } ARStatus $varname [msgcat::mc Done] } proc CATGenerateUpdate {varname row} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATGenerateUpdate $varname $row" } if {[info commands $var(frame)] == {}} { return } if {![$var(frame) has fits]} { return } set id [$var(frame) get marker catalog "\{${varname}.${row}\}" id] set sel [$var(frame) get marker catalog $id select] set hh [$var(frame) get marker catalog $id highlite] $var(frame) marker catalog "\{${varname}.${row}\}" delete global reg set reg {} CATReg $varname $row 1 reg if {$reg != {}} { $var(frame) marker catalog command ds9 var reg set id [$var(frame) get marker catalog "\{${varname}.${row}\}" id] if {$sel} { $var(frame) marker catalog "\{${varname}.${row}\}" select } if {$hh} { $var(frame) marker catalog "\{${varname}.${row}\}" highlite } } unset reg } proc CATSet {varname format catalog title} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATSet $varname :$format:$catalog:$title:" } set var(format) $format set var(catalog) $catalog set var(title) $title set var(filter) {} set var(colx) {} set var(coly) {} set var(sort) {} set var(sort,dir) "-increasing" } proc CATValidDB {varname} { upvar #0 $varname var global $varname if {[info exists var(Nrows)] && [info exists var(Ncols)] && [info exists var(HLines)] && [info exists var(Header)]} { return 1 } else { return 0 } } proc CATAnalysisMenu {} { global icat global ds9 set mm "$ds9(mb).analysis.cat" set nn {} foreach ff $icat(def) { set ll [lindex $ff 0] set ww [lindex $ff 1] set ss [lindex $ff 2] set cc [lindex $ff 3] if {$ll != {-}} { $mm.$nn add command -label $ll \ -command [list CATDialog $ww $ss $cc $ll apply] } else { set nn "$ss" menu $mm.$nn $mm add cascade -label $ww -menu $mm.$nn } } } proc CATServerMenu {varname} { upvar #0 $varname var global $varname $var(mb) add cascade -label [msgcat::mc {Catalog Server}] \ -menu $var(mb).server menu $var(mb).server $var(mb).server add radiobutton -label {CDS, Strasbourg France} \ -variable ${varname}(server) -value cds $var(mb).server add radiobutton -label {CFA, Boston USA} \ -variable ${varname}(server) -value sao $var(mb).server add radiobutton -label {CADC, Canada} \ -variable ${varname}(server) -value cadc $var(mb).server add radiobutton -label {ADAC, Tokyo Japan} \ -variable ${varname}(server) -value adac $var(mb).server add radiobutton -label {IUCAA, Pune India} \ -variable ${varname}(server) -value iucaa $var(mb).server add radiobutton -label {INASAN, Russia} \ -variable ${varname}(server) -value inasan $var(mb).server add radiobutton -label {BEJING, China} \ -variable ${varname}(server) -value bejing $var(mb).server add radiobutton -label {CAMBRIDGE, UK} \ -variable ${varname}(server) -value cambridge $var(mb).server add radiobutton -label {UKIRT, Hawaii USA} \ -variable ${varname}(server) -value ukirt } proc CATSortMenu {varname} { upvar #0 $varname var global $varname global $var(catdb) global ds9 set m $var(sortmenu).menu catch {destroy $m} menu $m -tearoff 0 $m add command -label {} -command "CATSortCmd $varname {}" if {[CATValidDB $var(catdb)]} { set cnt -1 foreach col [starbase_columns $var(catdb)] { $m add command -label $col -command "CATSortCmd $varname \{$col\}" # wrap if needed incr cnt if {$cnt>=$ds9(menu,size,wrap)} { set cnt 0 $m entryconfig $col -columnbreak 1 } } } } proc CATSortCmd {varname val} { upvar #0 $varname var global $varname set ${varname}(sort) $val CATTable $varname } # backward backup compatibility version 6.1 proc CATRADECMenu {varname} { CATColsMenu $varname } # used by backup proc CATColsMenu {varname} { upvar #0 $varname var global $varname global $var(catdb) global ds9 set m $var(ramenu).menu catch {destroy $m} menu $m -tearoff 0 if {[CATValidDB $var(catdb)]} { set cnt -1 foreach col [starbase_columns $var(catdb)] { $m add command -label $col -command "CATColXCmd $varname \{$col\}" # wrap if needed incr cnt if {$cnt>=$ds9(menu,size,wrap)} { set cnt 0 $m entryconfig $col -columnbreak 1 } } } set m $var(decmenu).menu catch {destroy $m} menu $m -tearoff 0 if {[CATValidDB $var(catdb)]} { set cnt -1 foreach col [starbase_columns $var(catdb)] { $m add command -label $col -command "CATColYCmd $varname \{$col\}" # wrap if needed incr cnt if {$cnt>=$ds9(menu,size,wrap)} { set cnt 0 $m entryconfig $col -columnbreak 1 } } } } proc CATColXCmd {varname val} { upvar #0 $varname var global $varname set ${varname}(colx) $val CATGenerate $varname } proc CATColYCmd {varname val} { upvar #0 $varname var global $varname set ${varname}(coly) $val CATGenerate $varname } proc CATColsCmd {varname} { upvar #0 $varname var global $varname CATColsUpdate $varname CATGenerate $varname } proc CATConfigCols {varname} { upvar #0 $varname var global $varname global $var(catdb) set var(colx) {} set var(coly) {} if {![CATValidDB $var(catdb)]} { return } if {[starbase_ncols $var(catdb)] < 2} { return } # determine psystem/psky if present in cat header # psystem has already been adjusted based on loaded fits at menu creation switch -- $var(psystem) { image - physical - amplifier - detector { set cols { "X" "Y" } foreach {colx coly} $cols { if {!([lsearch [starbase_columns $var(catdb)] $colx] == -1) && !([lsearch [starbase_columns $var(catdb)] $coly] == -1)} { set var(colx) $colx set var(coly) $coly return } # try lower case set colx [string tolower $colx] set coly [string tolower $coly] if {!([lsearch [starbase_columns $var(catdb)] $colx] == -1) && !([lsearch [starbase_columns $var(catdb)] $coly] == -1)} { set var(colx) $colx set var(coly) $coly return } } # default set var(colx) [starbase_colname $var(catdb) 1] set var(coly) [starbase_colname $var(catdb) 2] return } default { if {[info commands $var(frame)] == {}} { # linear set var(colx) [starbase_colname $var(catdb) 1] set var(coly) [starbase_colname $var(catdb) 2] return } elseif {![$var(frame) has wcs equatorial $var(psystem)]} { # linear set var(colx) [starbase_colname $var(catdb) 1] set var(coly) [starbase_colname $var(catdb) 2] return } else { if {![catch {starbase_hdrget $var(catdb) equinox} sys]} { switch -- $sys { 1950.0 - B1950 { set var(psystem) wcs set var(psky) fk4 } 2000.0 - J2000 { set var(psystem) wcs set var(psky) fk5 } } } switch -- $var(psky) { fk5 - icrs { set cols { "_RAJ2000" "_DEJ2000" "_RAJ2000" "_DECJ2000" "RAJ2000" "DEJ2000" "RAJ2000" "DECJ2000" "RA_J2000" "DE_J2000" "RA_J2000" "DEC_J2000" "RA (J2000)" "Dec (J2000)" "RA" "DEC" "RA" "DECL" "RA" "Dec" "RA(deg)" "DEC(deg)" } if {[CATConfigColsSearch $varname $cols]} { return } # next, look for an UCD (via VOTABLE) set db $var(catdb) upvar #0 $db T for {set cc 0} {$cc < $T(Ncols)} {incr cc} { if {[info exists ${db}(Ucd)]} { switch -- [string tolower [string range [lindex $T(Ucd) $cc] 0 8]] { pos.eq.ra {set var(colx) [lindex $T(Header) $cc]} pos.eq.de {set var(coly) [lindex $T(Header) $cc]} } } } if {$var(colx) != {} && $var(coly) != {}} { return } } fk4 { set cols { "_RAB1950" "_DEB1950" "RA_B1950" "DEC_B1950" "RA (B1950)" "Dec (1950)" "RA" "DEC" "RA" "DECL" "RA" "Dec" "RA(deg)" "DEC(deg)" } if {[CATConfigColsSearch $varname $cols]} { return } } galactic { set cols { "_GLON" "_GLAT" "LON" "LAT" "LON.Gal(deg)" "LAT.Gal(deg)" } if {[CATConfigColsSearch $varname $cols]} { return } } ecliptic { set cols { "_ELON" "_ELAT" "LON.Ecl(deg)" "LAT.Ecl(deg)" } if {[CATConfigColsSearch $varname $cols]} { return } } } # default set var(colx) [starbase_colname $var(catdb) 1] set var(coly) [starbase_colname $var(catdb) 2] } } } } proc CATConfigColsSearch {varname cols} { upvar #0 $varname var global $varname global $var(catdb) foreach {colx coly} $cols { if {!([lsearch [starbase_columns $var(catdb)] $colx] == -1) && !([lsearch [starbase_columns $var(catdb)] $coly] == -1)} { set var(colx) $colx set var(coly) $coly return 1 } # try lower case set colx [string tolower $colx] set coly [string tolower $coly] if {!([lsearch [starbase_columns $var(catdb)] $colx] == -1) && !([lsearch [starbase_columns $var(catdb)] $coly] == -1)} { set var(colx) $colx set var(coly) $coly return 1 } } return 0 } # Other interface proc CATTool {} { CATDialog cattool {} {} [msgcat::mc {Catalog Tool}] none } proc CATClearFrame {} { global current if {$current(frame) != {}} { $current(frame) marker catalog delete all } } proc CATUpdateWCS {} { global icat global current if {$current(frame) != {}} { $current(frame) marker catalog delete all foreach varname $icat(cats) { upvar #0 $varname var global $varname CATGenerate $varname # regenerate the plot if needed if {$var(plot)} { CATPlotGenerate $varname } } } } proc CATUpdateFont {} { global icat foreach varname $icat(cats) { upvar #0 $varname var global $varname $var(tbl) configure -font [font actual TkDefaultFont] } } proc CATBackup {ch which fdir rdir} { global icat foreach varname $icat(cats) { upvar #0 $varname var global $varname if {$var(frame) == $which} { set catdb ${varname}catdb global $catdb puts $ch "CATDialog $varname {} {} {} none" if {[starbase_nrows $var(catdb)]>500} { # external file set fn $fdir/${varname}.cat set rfn $rdir/${varname}.cat catch {file delete -force $fn} CATSaveFn $varname "$fn" VOTWrite puts $ch "CATLoadFn $varname \"$rfn\" VOTRead" } else { # internal var puts $ch "global $catdb" puts $ch "array set $catdb \{ [array get $catdb] \}" } puts $ch "global $varname" puts $ch "array set $varname \{ [array get $varname] \}" set symdb ${varname}symdb global $symdb puts $ch "global $symdb" puts $ch "array set $symdb \{ [array get $symdb] \}" puts $ch "CATColsMenu $varname" puts $ch "CATTable $varname" } } } proc PrefsDialogCatalog {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Catalogs}] lappend dprefs(tabs) [ttk::frame $w.cat] # Catalog set f [ttk::labelframe $w.cat.param -text [msgcat::mc {Catalogs}]] ttk::label $f.stitle -text [msgcat::mc {Server}] ttk::menubutton $f.svr -textvariable pcat(server) -menu $f.svr.menu ttk::label $f.shtitle -text [msgcat::mc {Shape}] ttk::menubutton $f.shape -textvariable pcat(sym,shape) -menu $f.shape.menu ttk::checkbutton $f.vot -variable pcat(vot) \ -text [msgcat::mc {Download VOTABLE format if available}] ttk::label $f.loctitle -text [msgcat::mc {IAU Location Code}] ttk::entry $f.loc -textvariable pcat(loc) -width 7 global pcat ttk::label $f.ctitle -text [msgcat::mc {Color}] ColorMenuButton $f.color pcat sym,color {} ttk::label $f.cwidth -text [msgcat::mc {Width}] WidthDashMenuButton $f.width pcat sym,width sym,dash {} {} ttk::label $f.ftitle -text [msgcat::mc {Font}] FontMenuButton $f.font pcat sym,font sym,font,size \ sym,font,weight, sym,font,slant {} menu $f.svr.menu $f.svr.menu add radiobutton -label {CDS} \ -variable pcat(server) -value cds $f.svr.menu add radiobutton -label {SAO} \ -variable pcat(server) -value sao $f.svr.menu add radiobutton -label {CADC} \ -variable pcat(server) -value cadc $f.svr.menu add radiobutton -label {ADAC} \ -variable pcat(server) -value adac $f.svr.menu add radiobutton -label {IUCAA} \ -variable pcat(server) -value iucaa $f.svr.menu add radiobutton -label {BEJING} \ -variable pcat(server) -value bejing $f.svr.menu add radiobutton -label {CAMBRIDGE UK} \ -variable pcat(server) -value cambridge $f.svr.menu add radiobutton -label {UKIRT HAWAII} \ -variable pcat(server) -value ukirt menu $f.shape.menu $f.shape.menu add radiobutton -label [msgcat::mc {Circle}] \ -variable pcat(sym,shape) -value circle $f.shape.menu add radiobutton -label [msgcat::mc {Ellipse}] \ -variable pcat(sym,shape) -value ellipse $f.shape.menu add radiobutton -label [msgcat::mc {Box}] \ -variable pcat(sym,shape) -value box $f.shape.menu add radiobutton -label [msgcat::mc {Text}] \ -variable pcat(sym,shape) -value text $f.shape.menu add cascade -label [msgcat::mc {Point}] \ -menu $f.shape.menu.point menu $f.shape.menu.point $f.shape.menu.point add radiobutton -label [msgcat::mc {Circle}] \ -variable pcat(sym,shape) -value {circle point} $f.shape.menu.point add radiobutton -label [msgcat::mc {Box}] \ -variable pcat(sym,shape) -value {box point} $f.shape.menu.point add radiobutton -label [msgcat::mc {Diamond}] \ -variable pcat(sym,shape) -value {diamond point} $f.shape.menu.point add radiobutton -label [msgcat::mc {Cross}] \ -variable pcat(sym,shape) -value {cross point} $f.shape.menu.point add radiobutton -label [msgcat::mc {X}] \ -variable pcat(sym,shape) -value {x point} $f.shape.menu.point add radiobutton -label [msgcat::mc {Arrow}] \ -variable pcat(sym,shape) -value {arrow point} $f.shape.menu.point add radiobutton -label [msgcat::mc {BoxCircle}] \ -variable pcat(sym,shape) -value {boxcircle point} $f.shape.menu.point add separator grid $f.stitle $f.svr -padx 2 -pady 2 -sticky w grid $f.shtitle $f.shape -padx 2 -pady 2 -sticky w grid $f.ctitle $f.color -padx 2 -pady 2 -sticky w grid $f.cwidth $f.width -padx 2 -pady 2 -sticky w grid $f.ftitle $f.font -padx 2 -pady 2 -sticky w grid $f.loctitle - - $f.loc -padx 2 -pady 2 -sticky w grid $f.vot - - - -padx 2 -pady 2 -sticky w pack $f -side top -fill both -expand true } # Process Cmds proc ProcessCatalogCmd {varname iname} { upvar $varname var upvar $iname i global icat # we need to be realized ProcessRealizeDS9 set item [string tolower [lindex $var $i]] switch -- $item { {} {CATTool} file - import - load { incr i set reader VOTRead switch -- [lindex $var $i] { xml - vot {incr i; set reader VOTRead} sb - starbase {incr i; set reader starbase_read} csv - tsv {incr i; set reader TSVRead} } set fn [lindex $var $i] if {$fn != {}} { CATDialog cattool {} {} {} none CATLoadFn [lindex $icat(cats) end] $fn $reader FileLast catfbox $fn } } allcols - allrows - cancel - clear - close - coordinate - crosshair - dec - edit - export - filter - header - hide - location - match - maxrows - name - panto - plot - print - psky - psystem - ra - regions - retrieve - samp - save - server - show - size - sky - skyformat - sort - symbol - system - update - x - y {ProcessCatalog $varname $iname [lindex $icat(cats) end]} default { # another command if {[string range $item 0 0] == "-"} { CATTool incr i -1 return } # existing cat or load new one? set ref $item # backward compatibility if {[string range $ref 0 2] == {cat}} { set ref [string range $ref 3 end] } incr i set item [string tolower [lindex $var $i]] switch -- $item { file - import - load {incr i -1} allcols - allrows - cancel - clear - close - coordinate - crosshair - dec - edit - export - filter - header - hide - location - match - maxrows - name - panto - plot - print - psky - psystem - ra - regions - retrieve - samp - save - server - show - size - sky - skyformat - sort - symbol - system - update - x - y {ProcessCatalog $varname $iname cat${ref}} default { # ok, new catalog incr i -1 set item [string tolower [lindex $var $i]] # backward compatibility switch $item { cds {incr i; set item [string tolower [lindex $var $i]]} cxc {set item csc} } # see if its from our list of cats foreach mm $icat(def) { set ll [lindex $mm 0] set ww [lindex $mm 1] set ss [lindex $mm 2] set cc [lindex $mm 3] if {$ll != {-} && "cat${item}" == $ww} { CATDialog $ww $ss $cc $ll sync return } } # not a default, assume other name CATDialog catcds cds $item $item sync } } } } } proc ProcessCatalog {varname iname cvarname} { upvar 2 $varname var upvar 2 $iname i global icat global pcat global current # we should have a catalog now global $cvarname upvar #0 $cvarname cvar if {![info exists cvar(top)]} { Error "[msgcat::mc {Unable to find catalog window}] $cvarname" return } if {![winfo exists $cvar(top)]} { Error "[msgcat:: mc {Unable to find catalog window}] $cvarname" return } # now, process it set item [string tolower [lindex $var $i]] switch -- $item { allrows {set cvar(allrows) 1} allcols {set cvar(allcols) 1} cancel {ARCancel $cvarname} clear {CATOff $cvarname} close {CATDestroy $cvarname} coordinate { incr i set cvar(x) [lindex $var $i] incr i set cvar(y) [lindex $var $i] incr i set cvar(sky) [lindex $var $i] } crosshair {CATCrosshair $cvarname} edit { incr i set cvar(edit) [FromYesNo [lindex $var $i]] CATEdit $cvarname } export - save { incr i set writer VOTWrite switch -- [lindex $var $i] { xml - vot {incr i; set writer VOTWrite} sb - starbase {incr i; set writer starbase_write} csv - tsv {incr i; set writer TSVWrite} } set fn [lindex $var $i] CATSaveFn $cvarname $fn $writer FileLast catfbox $fn } filter { incr i set item [lindex $var $i] switch -- $item { load { incr i set fn [lindex $var $i] if {[catch {open $fn r} fp]} { Error "[msgcat::mc {Unable to open file}] $fn: $fp" return } set flt [read -nonewline $fp] catch {regsub {\n} $flt " " $flt} set cvar(filter) [string trim $flt] catch {close $fp} } default { set cvar(filter) $item } } CATTable $cvarname } header {CATHeader $cvarname} hide { set cvar(show) 0 CATGenerate $cvarname } location { incr i set cvar(loc) [lindex $var $i] CATGenerate $cvarname } match { incr i set item [lindex $var $i] switch -- $item { error { incr i set icat(error) [lindex $var $i] incr i set icat(eformat) [lindex $var $i] } function {incr i; set icat(function) [lindex $var $i]} unique {incr i; set icat(unique) [FromYesNo [lindex $var $i]]} return {incr i; set icat(return) [lindex $var $i]} default { set icat(match1) "cat[lindex $var $i]" incr i set icat(match2) "cat[lindex $var $i]" CATMatch $current(frame) $icat(match1) $icat(match2) } } } maxrows { incr i set cvar(max) [lindex $var $i] } name { incr i set cvar(name) [lindex $var $i] } panto { incr i set cvar(panto) [FromYesNo [lindex $var $i]] } plot { incr i set cvar(plot,x) [lindex $var $i] incr i set cvar(plot,y) [lindex $var $i] incr i set cvar(plot,xerr) [lindex $var $i] incr i set cvar(plot,yerr) [lindex $var $i] CATPlotGenerate $cvarname } print {CATPrint $cvarname} psky { incr i set cvar(psky) [lindex $var $i] CATGenerate $cvarname } psystem { incr i set cvar(psystem) [lindex $var $i] CATGenerate $cvarname } regions {CATGenerateRegions $cvarname} retrieve - retreive {CATApply $cvarname 1} samp { global ds9 global samp incr i switch -- [string tolower [lindex $var $i]] { send { incr i set name [string tolower [lindex $var $i]] if {[info exists samp]} { foreach arg $samp(apps,votable) { foreach {key val} $arg { if {[string tolower $val] == $name} { SAMPSendTableLoadVotable $key $cvarname break } } } } else { Error [msgcat::mc {SAMP: not connected}] } } broadcast {SAMPSendTableLoadVotable {} $cvarname} default { SAMPSendTableLoadVotable {} $cvarname incr i -1 } } } server { incr i set cvar(server) [lindex $var $i] } size { incr i set cvar(width) [lindex $var $i] incr i set cvar(height) [lindex $var $i] incr i set cvar(rformat) [lindex $var $i] set cvar(rformat,msg) $cvar(rformat) } show { set cvar(show) 1 CATGenerate $cvarname } sky { incr i set cvar(sky) [lindex $var $i] CoordMenuButtonCmd $cvarname system sky \ [list CATWCSMenuUpdate $cvarname] } skyformat { incr i set cvar(skyformat) [lindex $var $i] } sort { incr i set cvar(sort) [lindex $var $i] incr i switch -- [lindex $var $i] { incr { set cvar(sort,dir) "-increasing" } decr { set cvar(sort,dir) "-decreasing" } } CATTable $cvarname } symbol { global $cvar(symdb) set row 1 incr i if {[string is integer [lindex $var $i]]} { set row [lindex $var $i] incr i } switch -- [lindex $var $i] { add { set row [expr [starbase_nrows $cvar(symdb)]+1] starbase_rowins $cvar(symdb) $row starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) shape] $pcat(sym,shape) starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) color] $pcat(sym,color) starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) width] $pcat(sym,width) starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) font] $pcat(sym,font) starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) fontsize] \ $pcat(sym,font,size) starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) fontweight] \ $pcat(sym,font,weight) starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) fontslant] \ $pcat(sym,font,slant) starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) units] $pcat(sym,units) CATGenerate $cvarname } angle { incr i starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) angle] [lindex $var $i] CATGenerate $cvarname } color { incr i starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) color] [lindex $var $i] CATGenerate $cvarname } condition { incr i starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) condition] \ [lindex $var $i] CATGenerate $cvarname } font { incr i starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) font] [lindex $var $i] CATGenerate $cvarname } fontsize { incr i starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) fontsize] [lindex $var $i] CATGenerate $cvarname } fontweight { incr i starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) fontweight] \ [lindex $var $i] CATGenerate $cvarname } fontslant { incr i starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) fontslant] \ [lindex $var $i] CATGenerate $cvarname } load { incr i set fn [lindex $var $i] if {[file exists $fn]} { starbase_read $cvar(symdb) $fn CATGenerate $cvarname } else { Error "[msgcat::mc {Unable to open file}] $fn" return } } remove { starbase_rowdel $cvar(symdb) $row CATGenerate $cvarname } save { incr i starbase_write $cvar(symdb) [lindex $var $i] } size { incr i starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) size] [lindex $var $i] CATGenerate $cvarname } size2 { incr i starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) size2] [lindex $var $i] CATGenerate $cvarname } shape { incr i starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) shape] [lindex $var $i] CATGenerate $cvarname } text { incr i starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) text] [lindex $var $i] CATGenerate $cvarname } units { incr i starbase_set $cvar(symdb) $row \ [starbase_colnum $cvar(symdb) units] [lindex $var $i] CATGenerate $cvarname } } } system { incr i set cvar(system) [lindex $var $i] CoordMenuButtonCmd $cvarname system sky \ [list CATWCSMenuUpdate $cvarname] } update {CATUpdate $cvarname} x - ra { incr i set cvar(colx) [lindex $var $i] CATGenerate $cvarname } y - dec { incr i set cvar(coly) [lindex $var $i] CATGenerate $cvarname } } } proc ProcessSendCatalogCmd {proc id param sock fn} { global icat set cc [lindex $icat(cats) end] switch -- [string tolower [lindex $param 0]] { header {} default { set cc [lindex $param 0] set param [lreplace $param 0 0] } } switch -- [string tolower [lindex $param 0]] { {} {$proc $id "$icat(cats)\n"} header {ProcessSend $proc $id $sock $fn {.txt} "[CATGetHeader $cc]\n"} } } saods9/ds9/library/catcds.tcl000644 000765 000000 00000011713 12737750066 016514 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CATCDS {varname} { upvar #0 $varname var global $varname global pcat global debug if {$debug(tcl,cat)} { puts stderr "CATCDS $varname" } # go for votable or tsv if {$pcat(vot)} { set var(proc,parser) VOTParse } else { set var(proc,reader) CATCDSReader } # url set site [CATCDSURL $var(server)] set cgidir {viz-bin} if {$pcat(vot)} { set script {votable} } else { set script {asu-tsv} } set var(url) "http://$site/$cgidir/$script" # query switch $var(skyformat) { degrees { set xx $var(x) set yy $var(y) } sexagesimal { switch -- $var(sky) { fk4 - fk5 - icrs {set xx [h2d [Sex2H $var(x)]]} galactic - ecliptic {set xx [Sex2D $var(x)]} } set yy [Sex2D $var(y)] } } if {$yy>0} { set yy "+$yy" } switch -- $var(sky) { fk4 {set eq "B1950"} fk5 - icrs {set eq "J2000"} galactic {set eq "Gal"} ecliptic {set eq "Ecl"} } switch -- $var(rformat) { degrees {set cr "-c.rd"} arcmin {set cr "-c.rm"} arcsec {set cr "-c.rs"} } set ww $var(width) set hh $var(height) set rr [expr sqrt($ww*$ww+$hh*$hh)/2.] set query [http::formatQuery -source $var(catalog) -c $xx$yy -c.eq $eq $cr $rr -oc.form dec] if {$pcat(vot)} { append query "&[http::formatQuery -out.form VOTable]" } else { append query "&[http::formatQuery -out.form Tab-Separated-Values]" } switch -- $var(psky) { fk4 {append query "&[http::formatQuery -out.add _RAB,_DEB]"} fk5 - icrs {append query "&[http::formatQuery -out.add _RAJ,_DEJ]"} galactic {append query "&[http::formatQuery -out.add _GLON,_GLAT]"} ecliptic {append query "&[http::formatQuery -out.add _ELON,_ELAT]"} } # options if {!$var(allrows)} { append query "&-out.max=$var(max)" } if {$var(allcols)} { append query "&-out.all" } # url?query set var(query) $query if {$pcat(vot)} { CATLoad $varname } else { CATLoadIncr $varname } } proc CATCDSReader {t sock token} { upvar #0 $t T global $t set result 0 if { ![info exists ${t}(state)] } { set T(state) 0 } switch -- $T(state) { 0 { # init db fconfigure $sock -blocking 1 set T(Nrows) 0 set T(Ncols) 0 set T(Header) {} set T(HLines) 0 set T(state) 1 } 1 { # process header incr ${t}(HLines) set n $T(HLines) if {[gets $sock line] == -1} { set T(state) -1 set T(HLines) [expr $T(HLines) - 1] set T(Nrows) 0 set T(Ncols) 0 return 0 } set result [string length "$line"] set T(H_$n) $line if {[regexp -- {^ *(-)+ *(\t *(-)+ *)*} $line]} { # remove units line, but save first unset T(H_$n) incr ${t}(HLines) -1 incr n -1 set units $T(H_$n) set T(H_$n) $line # clean up header column name set hh $T(H_[expr $n-1]) regsub -all {\[} $hh {} hh regsub -all {\]} $hh {} hh set T(H_[expr $n-1]) $hh # cols set T(Header) [split $T(H_[expr $n-1]) "\t"] set T(Unit) [split $units "\t"] set T(Dashes) [split $T(H_$n) "\t"] set T(Ndshs) [llength $T(Dashes)] starbase_colmap $t set T(state) 2 } } 2 { # process table if {[gets $sock line] == -1} { set T(state) 0 } else { set result [string length "$line"] set line [string trim $line] if {$line != {}} { # check for beginning of another table if {[string range $line 0 0] == "#"} { set T(state) 3 return $result } # check for garbage at start of line if {![string is double [lindex $line 0]]} { set T(state) 3 return $result } # ok, save it incr ${t}(Nrows) set r $T(Nrows) set NCols [starbase_ncols $t] set c 1 foreach val [split $line "\t"] { set T($r,$c) $val incr c } for {} {$c <= $NCols} {incr c} { set T($r,$c) {} } } } } 3 { # finished, eat everything else if {[gets $sock line] == -1} { set T(state) 0 } } } return $result } proc CATCDSURL {server} { switch -- $server { cds {return {vizier.u-strasbg.fr}} sao {return {vizier.cfa.harvard.edu}} cadc {return {vizier.hia.nrc.ca}} adac {return {vizier.nao.ac.jp}} iucaa {return {vizier.iucaa.ernet.in}} inasan {return {vizier.inasan.ru}} bejing {return {data.bao.ac.cn}} cambridge {return {vizier.ast.cam.ac.uk}} ukirt {return {www.ukirt.jach.hawaii.edu}} } } proc CATCDSAck {varname} { upvar #0 $varname var global $varname set msg {Acknowledgments for CDS This research has made use of the VizieR catalogue access tool, CDS, Strasbourg, France. VizieR is a joint effort of CDS (Centre de Données astronomiques de Strasbourg) and ESA-ESRIN (Information Systems Division). } SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \ 80 10 insert top $msg } saods9/ds9/library/catcdssrch.tcl000644 000765 000000 00000024701 12705445646 017375 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CATCDSSrchDef {} { global icatcdssrch set icatcdssrch(minrows) 11 set icatcdssrch(mincols) 2 set icatcdssrch(list,wave,param) {-kw.Wavelength} set icatcdssrch(list,wave) [list none Radio IR optical UV EUV X-ray Gamma-ray] set icatcdssrch(list,mission,param) {-kw.Mission} set icatcdssrch(list,mission) [list none AKARI ANS ASCA BeppoSAX CGRO Chandra COBE Copernicus CoRoT Einstein ESO EUVE EXOSAT FAUST Fermi FUSE GALEX GINGA GRANAT Herschel HEAO Hipparcos HST HUT INTEGRAL IRAS ISO IUE Kepler MSX OAO-2 ORFEUS Planck ROSAT RXTE SAS-1 SAS-2 SMM SOHO Spitzer STEREO Suzaku Swift TD1 UIT ULYSSES WISE WMAP WUPPE XMM] set icatcdssrch(list,astro,param) {-kw.Astronomy} set icatcdssrch(list,astro) [list none Abundances Ages AGN Associations Atomic_Data Binaries:cataclysmic Binaries:eclipsing Binaries:spectroscopic BL_Lac_objects Blue_objects Clusters_of_galaxies Constellations Diameters Earth Ephemerides Equivalent_widths Extinction Galaxies Galaxies:Markarian Galaxies:spectra Globular_Clusters Gravitational_lensing HII_regions Interstellar_Medium Magnetic_fields Masers Masses Models Multiple_Stars Nebulae Nonstellar Novae Obs_Log Open_Clusters Orbits Parallaxes Photometry Photometry:intermediate-band Photometry:narrow-band Photometry:surface Photometry:wide-band Planetary_Nebulae Planets+Asteroids Polarization Positional_Data Proper_Motions Pulsars QSOs Redshifts Rotational_Velocities Seyfert_Galaxies Spectral_Classification Spectrophotometry Spectroscopy Stars Stars:early-typeStars:Emission Stars:late-type Stars:peculiar Stars:variable Stars:white_dwarf Stars:WR Sun SuperNovae SuperNovae_Remnants Velocities YSOs] } proc CATCDSSrchLoadFile {varname} { upvar #0 $varname var global $varname global $var(catdb) global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrchLoad $varname" } if {[info exists $var(catdb)]} { unset $var(catdb) } set fn [OpenFileDialog catcdssrchfbox] if {$fn != {}} { if {[file exists $fn]} { starbase_read $var(catdb) $fn } else { Error "[msgcat::mc {Unable to open file}] $fn" return } CATCDSSrchTable $varname } } proc CATCDSSrchSaveFile {varname} { upvar #0 $varname var global $varname global $var(catdb) set fn [SaveFileDialog catcdssrchfbox] if {$fn != {}} { starbase_write $var(catdb) $fn } } proc CATCDSSrchClear {varname} { upvar #0 $varname var global $varname global $var(catdb) if {[info exists $var(catdb)]} { unset $var(catdb) } } proc CATCDSSrchCatalog {varname} { upvar #0 $varname var global $varname global $var(catdb) global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrchCatalog $varname" } set row 0 foreach ss [$var(tbl) curselection] { set rr [lindex [split $ss ,] 0] if {$rr != $row} { set id [starbase_get $var(catdb) $rr 1] set title [starbase_get $var(catdb) $rr 2] if {$id != {}} { # can't use id, it may have / or + CATDialog catcds cds $id $title apply } set row $rr } } } proc CATCDSSrch {varname} { upvar #0 $varname var global $varname global pcat global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrch $varname" } # go for votable or tsv if {$pcat(vot)} { set var(proc,parser) CATCDSSrchVOTParse } else { set var(proc,reader) CATCDSSrchReader } #url set site [CATCDSURL $var(server)] set cgidir {viz-bin} if {$pcat(vot)} { set script {votable} } else { set script {asu-tsv} } set var(url) "http://$site/$cgidir/$script" # defaults set query {-meta} append query "&[http::formatQuery -out.max 1000]" if {$pcat(vot)} { append query "&[http::formatQuery -out.form VOTable]" } else { append query "&[http::formatQuery -out.form Tab-Separated-Values]" } if {$var(source) != {}} { append query "&[http::formatQuery -source $var(source)]" } if {$var(words) !={}} { append query "&[http::formatQuery -words $var(words)]" } if {$var(wave) !={}} { append query "&[http::formatQuery $var(list,wave,param) $var(wave)]" } if {$var(mission) !={}} { append query "&[http::formatQuery $var(list,mission,param) $var(mission)]" } if {$var(astro) !={}} { append query "&[http::formatQuery $var(list,astro,param) $var(astro)]" } set var(query) $query if {$pcat(vot)} { CATCDSSrchLoad $varname } else { CATCDSSrchLoadIncr $varname } } proc CATCDSSrchLoad {varname} { upvar #0 $varname var global $varname global $var(catdb) global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrchLoad $varname" } if {[info exists $var(catdb)]} { unset $var(catdb) } set var(proc,done) CATCDSSrchDone set var(proc,load) CATCDSSrchLoad CATGetURL $varname return } proc CATCDSSrchLoadIncr {varname} { upvar #0 $varname var global $varname global $var(catdb) global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrchLoadIncr $varname" } if {[info exists $var(catdb)]} { unset $var(catdb) } set var(proc,done) CATCDSSrchDone set var(proc,load) CATCDSSrchLoadIncr CATGetURLIncr $varname return } proc CATCDSSrchDone {varname} { upvar #0 $varname var global $varname CATCDSSrchTable $varname } proc CATCDSSrchReader {t sock token} { upvar #0 $t T global $t set result 0 if { ![info exists ${t}(state)] } { set T(state) 0 } switch -- $T(state) { 0 { # init db fconfigure $sock -blocking 1 set T(Nrows) 0 set T(Ncols) 0 set T(Header) {} set T(HLines) 0 # create header incr ${t}(HLines) set n $T(HLines) set T(H_$n) "Resource\tDescription" set T(Header) [split $T(H_$n) "\t"] incr ${t}(HLines) set n $T(HLines) set T(H_$n) "--------\t-----------" set T(Dashes) [split $T(H_$n) "\t"] set T(Ndshs) [llength $T(Dashes)] starbase_colmap $t set T(state) 1 } 1 { # process RESOURCE if {[gets $sock line] == -1} { set T(state) 0 return $result } set result [string length "$line"] set line [string trim $line] if {$line != {}} { switch -- [string range $line 0 4] { "#RESO" { incr ${t}(Nrows) set r $T(Nrows) set T($r,1) {} set T($r,2) {} set T(state) 2 } } } } 2 { # process Description if {[gets $sock line] == -1} { set T(state) 0 return $result } set result [string length "$line"] set line [string trim $line] set r $T(Nrows) if {$line != {}} { switch -- [string range $line 0 4] { "#Name" { set T($r,1) [string trim [lindex [split $line {:}] 1]] set T(state) 3 } } } } 3 { # new style process description if {[gets $sock line] == -1} { set T(state) 0 return $result } set result [string length "$line"] set line [string trim $line] if {$line != {}} { switch -- [string range $line 0 4] { "#Titl" { # eat it } default { set r $T(Nrows) if {$r>0} { set val [string trim [string range $line 5 end]] catch {set T($r,2) "$val"} set T(state) 1 } } } } } } return $result } proc CATCDSSrchVOTParse {t token} { upvar #0 $t T global $t global debug if {$debug(tcl,cat)} { set fp [open debug.xml w] puts $fp [http::data $token] close $fp } set xml [xml::parser \ -characterdatacommand [list CATCDSSrchVOTCharCB $t] \ -elementstartcommand [list CATCDSSrchVOTElemStartCB $t] \ -elementendcommand [list CATCDSSrchVOTElemEndCB $t] \ -ignorewhitespace 1 \ ] set T(tree,state) {} set T(tree,prev) {} if {[catch {$xml parse [http::data $token]} err]} { if {$debug(tcl,cat)} { puts stderr "CATCDSSrchVOTParse: $err" } } $xml free } proc CATCDSSrchVOTCharCB {t data} { upvar #0 $t T global $t global debug switch -- $T(tree,state) { DESCRIPTION { set data [string trim $data] if {$data != {}} { switch -- $T(tree,prev) { RESOURCE { set r $T(Nrows) set T($r,2) [lindex [split $data "\n"] 0] set T(tree,prev) {} } } } } } # sometimes, we get a bogus call, (ignore whitespace does not work) set T(tree,state) {} return {} } proc CATCDSSrchVOTElemStartCB {t name attlist args} { upvar #0 $t T global $t global debug switch -- $name { VOTABLE { # init db set T(Nrows) 0 set T(Ncols) 0 set T(Header) {} set T(HLines) 0 # create header incr ${t}(HLines) set n $T(HLines) set T(H_$n) "Resource\tDescription" set T(Header) [split $T(H_$n) "\t"] incr ${t}(HLines) set n $T(HLines) set T(H_$n) "--------\t-----------" set T(Dashes) [regsub -all {[A-Za-z0-9]} $T(H_$n) {-}] set T(Ndshs) [llength $T(Header)] starbase_colmap $t } RESOURCE { set fname {} set id {} set type {} foreach {key value} $attlist { switch -- [string tolower $key] { name {set fname "$value"} id {set id "$value"} type {set type $value} } } incr ${t}(Nrows) set r $T(Nrows) set T($r,1) $fname set T($r,2) {} set T(tree,prev) $name } } set ${t}(tree,state) $name return {} } proc CATCDSSrchVOTElemEndCB {t name args} { upvar #0 $t T global $t global debug # we can't count on this being called for all end-tags switch -- $name { VOTABLE { # ok, we're done return -code break } } return {} } proc CATCDSSrchTable {varname} { upvar #0 $varname var global $varname global $var(catdb) global icatcdssrch global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrchTable $varname" } # starbase_writefp $var(catdb) stdout global $var(catdb) $var(tbl) configure -variable $var(catdb) if {[starbase_nrows $var(catdb)] == 0} { ARStatus $varname [msgcat::mc {No Items Found}] return } set nc [starbase_ncols $var(catdb)] $var(tbl) configure -cols $nc # add header row set nr [expr [starbase_nrows $var(catdb)]+1] if {$nr > $icatcdssrch(minrows)} { $var(tbl) configure -rows $nr } else { $var(tbl) configure -rows $icatcdssrch(minrows) } ARStatus $varname "[starbase_nrows $var(catdb)] [msgcat::mc {Items Found}]" } saods9/ds9/library/catcdssrchdialog.tcl000644 000765 000000 00000030621 12737527657 020563 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CATCDSSrchDialog {varname} { upvar #0 $varname var global $varname global ds9 global pcat global icatcdssrch global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrchDialog $varname" } # main dialog set var(top) ".${varname}" set var(mb) ".${varname}mb" if {[winfo exists $var(top)]} { raise $var(top) return } # defaults # maybe modified if pcat(vot) set var(list,wave,param) $icatcdssrch(list,wave,param) set var(list,wave) $icatcdssrch(list,wave) set var(list,mission,param) $icatcdssrch(list,mission,param) set var(list,mission) $icatcdssrch(list,mission) set var(list,astro,param) $icatcdssrch(list,astro,param) set var(list,astro) $icatcdssrch(list,astro) # AR variables set var(status) {} set var(sync) 0 # CATCDSSrch variables set var(catdb) ${varname}catdb set var(server) $pcat(server) set var(source) {} set var(words) {} set var(wave) {} set var(mission) {} set var(astro) {} # create the window set w $var(top) set mb $var(mb) Toplevel $w $mb 7 [msgcat::mc {Search for Catalogs}] \ "CATCDSSrchDestroy $varname" # file $mb add cascade -label [msgcat::mc {File}] -menu $mb.file menu $mb.file $mb.file add command -label [msgcat::mc {Retrieve}] \ -command "CATCDSSrchApply $varname" $mb.file add command -label [msgcat::mc {Cancel}] \ -command "ARCancel $varname" $mb.file add command -label [msgcat::mc {Load}] \ -command "CATCDSSrchCatalog $varname" $mb.file add command -label [msgcat::mc {Clear}] \ -command "CATCDSSrchClear $varname" $mb.file add separator $mb.file add command -label "[msgcat::mc {Load}]..." \ -command "CATCDSSrchLoadFile $varname" $mb.file add command -label "[msgcat::mc {Save}]..." \ -command "CATCDSSrchSaveFile $varname" $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command "CATCDSSrchDestroy $varname" # edit AREditMenu $varname # catalog server CATServerMenu $varname # Param set f [ttk::frame $w.param] ttk::frame $f.name ttk::frame $f.words ttk::frame $f.srch pack $f.name -side top -fill x -expand true pack $f.words -side top -fill x -expand true pack $f.srch -side bottom -fill both -expand true # param name ttk::label $f.name.title -text [msgcat::mc {Name or Designation}] ttk::entry $f.name.source -textvariable ${varname}(source) pack $f.name.title -side top -anchor w -padx 2 -pady 2 pack $f.name.source -side top -anchor w -padx 2 -pady 2 -fill x -expand true # param keywords ttk::label $f.words.title \ -text [msgcat::mc {Words matching title, description}] ttk::entry $f.words.key -textvariable ${varname}(words) -width 45 pack $f.words.title -side top -anchor w -padx 2 -pady 2 pack $f.words.key -side top -anchor w -padx 2 -pady 2 -fill x -expand true # param search ttk::frame $f.srch.wave ttk::frame $f.srch.mission ttk::frame $f.srch.astro pack $f.srch.wave $f.srch.mission $f.srch.astro \ -side left -fill both -expand true -padx 2 -pady 2 # param search wave ttk::frame $f.srch.wave.f ttk::label $f.srch.wave.title -text [msgcat::mc {Wavelength}] pack $f.srch.wave.title -side top -anchor w pack $f.srch.wave.f -side bottom -fill both -expand true \ -anchor w -padx 2 -pady 2 ttk::scrollbar $f.srch.wave.f.scroll \ -command [list $f.srch.wave.f.list yview] set ${varname}(listbox,wave) [listbox $f.srch.wave.f.list \ -yscroll \ [list $f.srch.wave.f.scroll set] \ -setgrid true \ -selectmode browse \ -exportselection 0 \ -listvariable ${varname}(list,wave)] grid $f.srch.wave.f.list $f.srch.wave.f.scroll -sticky news grid rowconfigure $f.srch.wave.f 0 -weight 1 grid columnconfigure $f.srch.wave.f 0 -weight 1 # param search mission ttk::frame $f.srch.mission.f ttk::label $f.srch.mission.title -text [msgcat::mc {Mission}] pack $f.srch.mission.title -side top -anchor w pack $f.srch.mission.f -side bottom -fill both -expand true \ -anchor w -padx 2 -pady 2 ttk::scrollbar $f.srch.mission.f.scroll \ -command [list $f.srch.mission.f.list yview] set ${varname}(listbox,mission) [listbox $f.srch.mission.f.list \ -yscroll \ [list $f.srch.mission.f.scroll set] \ -setgrid true \ -selectmode browse \ -exportselection 0 \ -listvariable ${varname}(list,mission)] grid $f.srch.mission.f.list $f.srch.mission.f.scroll \ -sticky news grid rowconfigure $f.srch.mission.f 0 -weight 1 grid columnconfigure $f.srch.mission.f 0 -weight 1 # param search astro ttk::frame $f.srch.astro.f ttk::label $f.srch.astro.title -text [msgcat::mc {Astronomy}] pack $f.srch.astro.title -side top -anchor w pack $f.srch.astro.f -side bottom -fill both -expand true \ -anchor w -padx 2 -pady 2 ttk::scrollbar $f.srch.astro.f.scroll \ -command [list $f.srch.astro.f.list yview] set ${varname}(listbox,astro) [listbox $f.srch.astro.f.list \ -yscroll \ [list $f.srch.astro.f.scroll set] \ -setgrid true \ -selectmode browse \ -exportselection 0 \ -listvariable ${varname}(list,astro)] grid $f.srch.astro.f.list $f.srch.astro.f.scroll -sticky news grid rowconfigure $f.srch.astro.f 0 -weight 1 grid columnconfigure $f.srch.astro.f 0 -weight 1 # Table set f [ttk::frame $w.tbl] set var(tbl) [table $f.t \ -state disabled \ -usecommand 0 \ -variable $var(catdb) \ -colorigin 1 \ -roworigin 0 \ -cols $icatcdssrch(mincols) \ -rows $icatcdssrch(minrows) \ -colstretchmode all \ -width -1 \ -height -1 \ -maxwidth 400 \ -maxheight 190 \ -titlerows 1 \ -xscrollcommand [list $f.xscroll set]\ -yscrollcommand [list $f.yscroll set]\ -selecttype row \ -selectmode extended \ -anchor w \ -font [font actual TkDefaultFont] ] ttk::scrollbar $f.yscroll -command [list $var(tbl) yview] \ -orient vertical ttk::scrollbar $f.xscroll -command [list $var(tbl) xview] \ -orient horizontal grid $var(tbl) $f.yscroll -sticky news grid $f.xscroll -stick news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 # Status set f [ttk::frame $w.status] ttk::label $f.title -text [msgcat::mc {Status}] ttk::label $f.item -textvariable ${varname}(status) pack $f.title $f.item -side left -anchor w -padx 2 -pady 2 # Buttons set f [ttk::frame $w.buttons] set var(apply) [ttk::button $f.apply \ -text [msgcat::mc {Retrieve}] \ -command "CATCDSSrchApply $varname"] set var(cancel) [ttk::button $f.cancel \ -text [msgcat::mc {Cancel}] \ -command "ARCancel $varname" -state disabled] ttk::button $f.catalog -text [msgcat::mc {Load}] \ -command "CATCDSSrchCatalog $varname" ttk::button $f.clear -text [msgcat::mc {Clear}] \ -command "CATCDSSrchClear $varname" ttk::button $f.close -text [msgcat::mc {Close}] \ -command "CATCDSSrchDestroy $varname" pack $f.apply $f.cancel $f.catalog $f.clear $f.close \ -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal ttk::separator $w.stbl -orient horizontal ttk::separator $w.sstatus -orient horizontal pack $w.buttons $w.sstatus $w.status $w.stbl -side bottom -fill x pack $w.param $w.sep -side top -fill x pack $w.tbl -side top -fill both -expand true ARStatus $varname {} # initialize $var(listbox,wave) selection set 0 $var(listbox,mission) selection set 0 $var(listbox,astro) selection set 0 $w.param.name.source select range 0 end } proc CATCDSSrchApply {varname} { upvar #0 $varname var global $varname global icatcdssrch global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrchApply $varname" } set id [$var(listbox,wave) curselection] if {$id > 0} { set var(wave) [lindex $var(list,wave) $id] } else { set var(wave) {} } set id [$var(listbox,mission) curselection] if {$id > 0} { set var(mission) [lindex $var(list,mission) $id] } else { set var(mission) {} } set id [$var(listbox,astro) curselection] if {$id > 0} { set var(astro) [lindex $var(list,astro) $id] } else { set var(astro) {} } ARApply $varname ARStatus $varname [msgcat::mc {Searching for catalogs}] CATCDSSrch $varname } proc CATCDSSrchDestroy {varname} { upvar #0 $varname var global $varname global $var(catdb) global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrchDestroy $varname" } if {[info exists $var(catdb)]} { unset $var(catdb) } ARDestroy $varname } proc CATCDSSrchConfig {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrchConfig $varname" } set site [CATCDSURL $var(server)] set cgidir {viz-bin} set script {votable} set var(url) "http://$site/$cgidir/$script" set var(query) [http::formatQuery -meta.aladin all] CATCDSSrchConfigLoad $varname return } proc CATCDSSrchConfigLoad {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrchConfigLoad $varname" } set var(proc,parser) CATCDSSrchConfigParse set var(proc,done) CATCDSSrchConfigDone set var(proc,load) CATCDSSrchConfigLoad CATGetURL $varname return } proc CATCDSSrchConfigDone {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrchConfigDone $varname" } CATCDSSrchConfigParse } proc CATCDSSrchConfigParse {t token} { upvar #0 $t T global $t global debug global debug if {$debug(tcl,cat)} { puts stderr "CATCDSSrchConfigParse" } if {$debug(tcl,cat)} { set fp [open debug.xml w] puts $fp [http::data $token] close $fp } set xml [xml::parser \ -elementstartcommand [list CATCDSSrchConfigElemStartCB $t] \ -elementendcommand [list CATCDSSrchConfigElemEndCB $t] \ -ignorewhitespace 1 \ ] set T(tree,enable) 0 set T(tree,state) {} if {[catch {$xml parse [http::data $token]} err]} { if {$debug(tcl,cat)} { puts stderr "CATCDSSrchConfigParse: $err" } } unset ${t}(tree,enable) unset ${t}(tree,state) $xml free } proc CATCDSSrchConfigElemStartCB {t name attlist args} { upvar #0 $t T global $t global debug # hardcoded set varname catcdssrch1 upvar #0 $varname var global $varname switch -- $name { RESOURCE { set id {} set type {} foreach {key value} $attlist { switch -- [string tolower $key] { type {set type "$value"} id {set id "$value"} } } if {[string tolower $id] == "vizier"} { set T(tree,enable) 1 set ${varname}(list,wave) [list none] set ${varname}(list,mission) [list none] set ${varname}(list,astro) [list none] } } PARAM { if {$T(tree,enable)} { set id {} set fname {} foreach {key value} $attlist { switch -- [string tolower $key] { name {set fname "$value"} id {set id "$value"} } } set T(tree,state) [string trim [string tolower $id]] switch -- $T(tree,state) { wavelength {set ${varname}(list,wave,param) $fname} mission {set ${varname}(list,mission,param) $fname} astronomy {set ${varname}(list,astro,param) $fname} } } } VALUES {} OPTION { if {$T(tree,enable)} { set item {} foreach {key value} $attlist { switch -- [string tolower $key] { value {set item "$value"} } } if {$item != {}} { global icatcdssrch switch -- $T(tree,state) { wavelength {lappend ${varname}(list,wave) $item} mission {lappend ${varname}(list,mission) $item} astronomy {lappend ${varname}(list,astro) $item} } } } } } return {} } proc CATCDSSrchConfigElemEndCB {t name args} { upvar #0 $t T global $t global debug # we can't count on this being called for all end-tags switch -- $name { RESOURCE { # ok, we're done set T(tree,enable) 0 return -code break } } return {} } saods9/ds9/library/catcmd.tcl000644 000765 000000 00000035620 12705445646 016511 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Table Commands proc CATSelectCmd {varname ss rc} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATSelectCmd $varname $ss $rc" } if {$var(edit)} { CATSelectEditCmd $varname $ss $rc } else { CATSelectBrowseCmd $varname $ss $rc } } proc CATSelectEditCmd {varname ss rc} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATSelectEditCmd $varname $rc" } if {[info commands $var(frame)] == {}} { return } if {![$var(frame) has fits]} { return } $var(frame) marker catalog $varname unselect set last [lindex [split $ss ,] 0] set next [lindex [split $rc ,] 0] if {[string is integer -strict $last]} { CATGenerateUpdate $varname $last } if {[string is integer -strict $next]} { set mk "\{${varname}.${next}\}" CATPanTo $varname $mk $var(frame) marker catalog $mk select } } proc CATSelectBrowseCmd {varname ss rc} { upvar #0 $varname var global $varname # starts at 1 global debug if {$debug(tcl,cat)} { puts stderr "CATSelectBrowseCmd $varname ss=$ss rc=$rc" } global $var(catdb) if {![CATValidDB $var(catdb)]} { return } if {[info commands $var(frame)] == {}} { return } if {![$var(frame) has fits]} { return } $var(frame) marker catalog $varname unhighlite # init timer vars set var(blink,count) 0 set var(blink,marker) {} # now see the current selection set last [lindex [split $ss ,] 0] set row [lindex [split $rc ,] 0] # needed for plot, status, samp # starts at 0 set rowlist {} foreach sel [$var(tbl) curselection] { set rr [lindex [split $sel ,] 0] lappend rowlist $rr } set rowlist [lsort -unique $rowlist] # kludge # tktable can return bogus numbers if arrow keys are used # try to fix if {$row == 0} { set row 1 } if {[llength $rowlist] <= 1} { set rowlist $row } foreach rr $rowlist { lappend ${varname}(blink,marker) "\{${varname}.${rr}\}" } # status CATStatusRows $varname $rowlist # plot if {$var(plot)} { PlotHighliteElement $var(plot,var) $rowlist } # samp SAMPSendTableRowListCmd $varname $rowlist # panto CATPanTo $varname [lindex $var(blink,marker) 0] # start timer, if needed if {!$var(blink)} { set var(blink) 1 CATSelectTimer $varname } } proc CATSelectRows {varname src rowlist} { upvar #0 $varname var global $varname # just in case? set rowlist [lsort -unique $rowlist] # rows start at 1 global debug if {$debug(tcl,cat)} { puts stderr "CATSelectRows $varname $src $rowlist" } if {![info exists ${varname}(top)]} { return } global $var(catdb) if {![CATValidDB $var(catdb)]} { return } # rowlist can be empty if {$rowlist == {}} { if {[info exists ${varname}(tbl)]} { $var(tbl) selection clear all } $var(frame) marker catalog $varname unhighlite return } if {[info exists ${varname}(tbl)]} { $var(tbl) selection clear all foreach rr $rowlist { $var(tbl) selection set $rr,1 } $var(tbl) see [lindex $rowlist 0],1 } $var(frame) marker catalog $varname unhighlite # init timer vars set var(blink,count) 0 set var(blink,marker) {} foreach rr $rowlist { lappend ${varname}(blink,marker) "\{${varname}.${rr}\}" } # status CATStatusRows $varname $rowlist # source of call switch $src { samp { if {$var(plot)} { PlotHighliteElement $var(plot,var) $rowlist } } plot { SAMPSendTableRowListCmd $varname $rowlist } } # panto CATPanTo $varname [lindex $var(blink,marker) 0] # start timer, if needed if {!$var(blink)} { set var(blink) 1 CATSelectTimer $varname } } proc CATPanTo {varname mk} { upvar #0 $varname var global $varname if {[info commands $var(frame)] == {}} { return } if {![$var(frame) has fits]} { return } # pan to first region if {$var(panto) && $mk != {}} { set tt [$var(frame) get marker catalog $mk tag] if {$tt!={}} { set cc [$var(frame) get marker catalog $tt center \ $var(psystem) $var(psky)] PanToFrame $var(frame) [lindex $cc 0] [lindex $cc 1] \ $var(psystem) $var(psky) } } } proc CATSelectTimer {varname} { upvar #0 $varname var global $varname switch -- $var(blink) { 0 { set var(blink) 0 set var(blink,count) 0 set var(blink,marker) {} } 1 { foreach mm $var(blink,marker) { if {[info commands $var(frame)] != {}} { if {[$var(frame) has fits]} { $var(frame) marker catalog $mm highlite } } } incr ${varname}(blink,count) if {$var(blink,count) < 5} { set var(blink) 2 } else { set var(blink) 0 } after 250 [list CATSelectTimer $varname] } 2 { foreach mm $var(blink,marker) { if {[info commands $var(frame)] != {}} { if {[$var(frame) has fits]} { $var(frame) marker catalog $mm unhighlite } } } set var(blink) 1 after 250 [list CATSelectTimer $varname] } } } # Marker Callbacks # call backs can't call other procs proc CATHighliteCB {tag id} { global debug if {$debug(tcl,cat)} { puts stderr "CATHighliteCB $tag $id" } set t [split $tag .] set varname [lindex $t 0] set row [lindex $t 1] upvar #0 $varname var global $varname if {![info exists ${varname}(top)]} { return } if {!$var(blink)} { if {[info exists ${varname}(tbl)]} { $var(tbl) selection set $row,1 $var(tbl) see $row,1 } } } proc CATUnhighliteCB {tag id} { global debug if {$debug(tcl,cat)} { puts stderr "CATUnhighliteCB $tag $id" } set t [split $tag .] set varname [lindex $t 0] set row [lindex $t 1] upvar #0 $varname var global $varname if {![info exists ${varname}(top)]} { return } if {!$var(blink)} { if {[info exists ${varname}(tbl)]} { $var(tbl) selection clear $row,1 } } } proc CATEditCB {tag id} { global debug if {$debug(tcl,cat)} { puts stderr "CATEditCB $tag $id" } if {[info commands $var(frame)] == {}} { return } if {![$var(frame) has fits]} { return } set t [split $tag .] set varname [lindex $t 0] set row [lindex $t 1] set szcol [lindex $t 2] set sz2col [lindex $t 3] set units [lindex $t 4] set angcol [lindex $t 5] upvar #0 $varname var global $varname global $var(tbldb) if {![info exists ${varname}(top)]} { return } if {[info commands $var(frame)] == {}} { return } if {![$var(frame) has fits]} { return } # shape set shape [$var(frame) get marker catalog $id type] # skyformat switch -- $units { degrees - arcmin - arcsec { set skyformat $units } default { set skyformat degrees } } # get center and format switch $shape { circle { if {$szcol>0} { set rr [$var(frame) get marker catalog $id $shape radius \ $var(psystem) $skyformat] starbase_set $var(tbldb) $row $szcol $rr } } ellipse - box { if {$szcol>0 && $sz2col>0} { set rr [$var(frame) get marker catalog $id $shape radius \ $var(psystem) $skyformat] starbase_set $var(tbldb) $row $szcol [lindex $rr 0] starbase_set $var(tbldb) $row $sz2col [lindex $rr 1] } } vector { if {$szcol>0} { set ll [$var(frame) get marker catalog $id $shape length \ $var(psystem) $skyformat] starbase_set $var(tbldb) $row $szcol $ll } if {$angcol>0} { set ang [$var(frame) get marker catalog $id angle \ $var(psystem) $p(sky)] starbase_set $var(tbldb) $row $angcol $ang } } default {} } } proc CATMoveCB {tag id} { global debug if {$debug(tcl,cat)} { puts stderr "CATMoveCB $tag $id" } if {[info commands $var(frame)] == {}} { return } if {![$var(frame) has fits]} { return } set t [split $tag .] set varname [lindex $t 0] set row [lindex $t 1] upvar #0 $varname var global $varname global $var(tbldb) if {![info exists ${varname}(top)]} { return } # center set coord [$var(frame) get marker catalog $id center \ $var(psystem) $var(sky) degrees] starbase_set $var(tbldb) $row [starbase_colnum $var(tbldb) $var(colx)] \ [lindex $coord 0] starbase_set $var(tbldb) $row [starbase_colnum $var(tbldb) $var(coly)] \ [lindex $coord 1] } proc CATRotateCB {tag id} { global debug if {$debug(tcl,cat)} { puts stderr "CATRotateCB $tag $id" } global debug if {$debug(tcl,cat)} { puts stderr "CATMoveCB $tag $id" } if {[info commands $var(frame)] == {}} { return } if {![$var(frame) has fits]} { return } set t [split $tag .] set varname [lindex $t 0] set row [lindex $t 1] set angcol [lindex $t 2] upvar #0 $varname var global $varname global $var(tbldb) if {[info commands $var(frame)] == {}} { return } if {![info exists ${varname}(top)]} { return } # shape set shape [$var(frame) get marker catalog $id type] # get center and format switch $shape { ellipse - box { if {$angcol>0} { set ang [$var(frame) get marker catalog $id angle \ $var(psystem) $var(sky)] starbase_set $var(tbldb) $row $angcol $ang } } default {} } } proc CATDeleteCB {tag id} { global debug if {$debug(tcl,cat)} { puts stderr "CATDeleteCB $tag $id" } } # Tcl Commands proc CATButton {which x y} { global imarker global debug if {$debug(tcl,cat)} { puts stderr "CATButton $which $x $y" } # if nothing is loaded, abort if {![$which has fits]} { return } # see if we are on a handle set h [$which get marker catalog handle $x $y] set id [lindex $h 0] set imarker(handle) [lindex $h 1] if {$imarker(handle)} { $which marker catalog $id edit begin $imarker(handle) set imarker(motion) beginEdit return } # else, see if we are on a segment of a polygon set h [$which get marker catalog polygon segment $x $y] set id [lindex $h 0] set segment [lindex $h 1] if {$segment} { $which marker catalog $id create polygon vertex $segment $x $y $which marker catalog $id edit begin $imarker(handle) set imarker(handle) [expr 4+$segment+1] set imarker(motion) beginEdit return } # else, see if we are on a marker set id [$which get marker catalog id $x $y] if {$id != 0} { # select if {[$which get marker catalog $id property select]} { $which marker catalog select only $x $y $which marker catalog move begin $x $y set imarker(motion) beginMove return } # highlite if {[$which get marker catalog $id property highlite]} { $which marker catalog $id highlite only $which marker catalog $id move back set imarker(motion) none return } } # see if any markers are selected if {[$which get marker catalog select number]>0} { $which marker catalog unselect all set imarker(motion) none return } # see if any markers are selected if {[$which get marker catalog highlite number]>0} { $which marker catalog unhighlite all set imarker(motion) none return } set imarker(motion) none set imarker(handle) -1 } proc CATShift {which x y} { global imarker global debug if {$debug(tcl,cat)} { puts stderr "CATShift $which $x $y" } # if nothing is loaded, abort if {![$which has fits]} { return } # see if we are on a handle set h [$which get marker catalog handle $x $y] set id [lindex $h 0] set imarker(handle) [lindex $h 1] if {$imarker(handle)} { $which marker catalog $id rotate begin set imarker(motion) beginRotate return } # else, see if we are on a marker if {[$which marker catalog select toggle $x $y]} { $which marker catalog move begin $x $y set imarker(motion) beginMove return } if {[$which marker catalog highlite toggle $x $y]} { set imarker(motion) none return } # else, start a region select $which region catalog select begin $x $y # $which region catalog highlite begin $x $y set imarker(motion) shiftregion } proc CATMotion {which x y} { global imarker global debug if {$debug(tcl,cat)} { puts stderr "CATMotion $which $x $y" } # if nothing is loaded, abort if {![$which has fits]} { return } switch -- $imarker(motion) { none {} beginMove - move { $which marker catalog move motion $x $y set imarker(motion) move } beginEdit - edit { $which marker catalog edit motion $x $y $imarker(handle) set imarker(motion) edit } beginRotate - rotate { $which marker catalog rotate motion $x $y $imarker(handle) set imarker(motion) rotate } region - shiftregion { $which region catalog select motion $x $y # $which region catalog highlite motion $x $y } } } proc CATRelease {which x y} { global imarker global samp global debug if {$debug(tcl,cat)} { puts stderr "CATRelease $which $x $y" } # if nothing is loaded, abort if {![$which has fits]} { return } switch -- $imarker(motion) { none {} beginMove - beginRotate {} beginEdit {} move {$which marker catalog move end} edit {$which marker catalog edit end} rotate {$which marker catalog rotate end} region { $which region catalog select end $which region catalog catalog highlite end } shiftregion { $which region catalog select shift end $which region catalog highlite shift end } } set imarker(motion) none set imarker(handle) -1 # plot, stats, samp set rr {} foreach mm [$which get marker catalog highlite] { lappend rr [string trim [lindex [$which get marker catalog $mm tag] 1]] } if {$rr != {}} { set rr [lsort $rr] set varname {} set rowlist {} foreach ss $rr { set tt [split $ss {.}] set varr [lindex $tt 0] set row [lindex $tt 1] if {$varname != $varr} { # dump what we have if {$varname != {}} { upvar #0 $varname var global $varname # status CATStatusRows $varname $rowlist # plot if {$var(plot)} { PlotHighliteElement $var(plot,var) $rowlist } # samp if {[info exists samp]} { if {$samp(apps,votable) != {}} { SAMPSendTableRowListCmd $varname $rowlist } } } # now a new list set varname $varr set rowlist {} } lappend rowlist $row } if {$varname != {}} { upvar #0 $varname var global $varname # status CATStatusRows $varname $rowlist #plot if {$var(plot)} { PlotHighliteElement $var(plot,var) $rowlist } # samp if {[info exists samp]} { if {$samp(apps,votable) != {}} { SAMPSendTableRowListCmd $varname $rowlist } } } } } saods9/ds9/library/catcxc.tcl000644 000765 000000 00000017622 12737750066 016525 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CATCXC {varname} { upvar #0 $varname var global $varname global pcat global debug if {$debug(tcl,cat)} { puts stderr "CATCXC $varname" } # go for votable or tsv if {$pcat(vot)} { CATCXCVOT $varname } else { CATCXCTSV $varname } } proc CATCXCVOT {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATCXCVOT $varname" } set var(proc,parser) VOTParse # coord (degrees) switch $var(skyformat) { degrees { set xx $var(x) set yy $var(y) } sexagesimal { set xx [h2d [Sex2H $var(x)]] set yy [Sex2D $var(y)] } } # size (degrees) switch $var(rformat) { degrees { set ww $var(width) set hh $var(height) } arcmin { set ww [expr $var(width)/60.] set hh [expr $var(height)/60.] } arcsec { set ww [expr $var(width)/60./60.] set hh [expr $var(height)/60./60.] } } # now to radius set rr [expr sqrt($ww*$ww+$hh*$hh)/2.] # output if {$var(allcols)} { set type 3 } else { set type 2 } # query set var(query) [http::formatQuery RA $xx DEC $yy SR $rr VERB $type] set var(url) "http://cda.cfa.harvard.edu/cscvo/coneSearch" CATLoad $varname } proc CATCXCTSV {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATCXCTSV $varname" } set var(proc,reader) CATCXCReader # coord (degrees) switch $var(skyformat) { degrees { set xx $var(x) set yy $var(y) } sexagesimal { switch -- $var(sky) { fk4 - fk5 - icrs {set xx [h2d [Sex2H $var(x)]]} galactic - ecliptic {set xx [Sex2D $var(x)]} } set yy [Sex2D $var(y)] } } # size (arcmin) switch $var(rformat) { degrees { set ww [expr $var(width)*60.] set hh [expr $var(height)*60.] } arcmin { set ww $var(width) set hh $var(height) } arcsec { set ww [expr $var(width)/60.] set hh [expr $var(height)/60.] } } # now to radius set rr [expr sqrt($ww*$ww+$hh*$hh)/2.] # output if {$var(allcols)} { set type observation } else { set type master } # query set var(query) "ra=$xx&dec=$yy&sr=$rr&type=$type" # rows if {!$var(allrows)} { append var(query) "&rows=$var(max)" } set var(url) "http://cda.cfa.harvard.edu/cscds9/coneSearch" CATLoadIncr $varname } proc CATCXCReader {t sock token} { upvar #0 $t T global $t set result 0 if { ![info exists ${t}(state)] } { set T(state) 0 } switch -- $T(state) { 0 { # init db fconfigure $sock -blocking 1 set T(Nrows) 0 set T(Ncols) 0 set T(Header) {} set T(HLines) 0 set T(state) 1 } 1 { # process header if {[gets $sock line] == -1} { set T(Nrows) 0 set T(Ncols) 0 set T(Header) {} set T(HLines) 0 set T(state) -1 return $result } set result [string length "$line"] incr ${t}(HLines) set n $T(HLines) set T(H_$n) $line if {[regexp -- {^ *(-)+ *(\t *(-)+ *)*} $line]} { # clean up header column name set hh $T(H_[expr $n-1]) regsub -all {\[} $hh {} hh regsub -all {\]} $hh {} hh set T(H_[expr $n-1]) $hh # cols set T(Header) [split $T(H_[expr $n-1]) "\t"] set T(Dashes) [split $T(H_$n) "\t"] set T(Ndshs) [llength $T(Dashes)] starbase_colmap $t set T(state) 2 # these are hard coded set T(Id) $T(Header) set T(DataType) {} set T(ArraySize) {} set T(Unit) {} set T(Ucd) {} # name lappend T(DataType) {char} lappend T(ArraySize) {*} lappend T(Unit) {} lappend T(Ucd) {} # ra lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {deg} lappend T(Ucd) {pos.eq.ra;meta.main} # dec lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {deg} lappend T(Ucd) {pos.eq.dec;meta.main} # err_ellipse_r0 lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # err_ellipse_r1 lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # err_ellipse_ang lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {deg} lappend T(Ucd) {} # conf_flag lappend T(DataType) {boolean} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # extent_flag lappend T(DataType) {boolean} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # sat_src_flag lappend T(DataType) {boolean} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # flux_aper90_b lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # flux_aper90_hilim_b lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # flux_aper90_lolim_b lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # significance lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # hard_hm lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # hard_ms lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # var_intra_index_b lappend T(DataType) {int} lappend T(ArraySize) {} lappend T(Unit) {} # var_inter_index_b lappend T(DataType) {int} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} if {[llength $T(Header)] > 17} { # obsid lappend T(DataType) {int} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # ra_aper lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {deg} lappend T(Ucd) {} # dec_aper lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {deg} lappend T(Ucd) {} # mjr_axis_aper lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # mnr_axis_aper lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {} lappend T(Ucd) {} # pos_angle_aper lappend T(DataType) {float} lappend T(ArraySize) {} lappend T(Unit) {deg} lappend T(Ucd) {} } } } 2 { # process table if {[gets $sock line] == -1} { set T(state) 0 } else { set result [string length "$line"] set line [string trim $line] if {$line != {}} { # ok, save it incr ${t}(Nrows) set r $T(Nrows) set NCols [starbase_ncols $t] set c 1 foreach val [split $line "\t"] { set T($r,$c) $val incr c } for {} {$c <= $NCols} {incr c} { set T($r,$c) {} } } } } } return $result } proc CATCXCAck {varname} { upvar #0 $varname var global $varname set msg {Acknowledgments for CXC Request for Acknowledgment of Use of the Chandra Source Catalog Users are kindly requested to acknowledge in the acknowledgment section of any resulting publications their use of the Chandra Source Catalog. This will help us greatly to keep track of catalog usage, information that is essential for providing full accountability of our work and services, as well as for planning future services. The following language is suggested: This research has made use of data obtained from the Chandra Source Catalog, provided by the Chandra X-ray Center (CXC) as part of the Chandra Data Archive. We would like to remind you that it is also very helpful for us if you could include Dataset Identifiers in the manuscript. The Dataset Identifier for the Chandra Source Catalog is: ADS/Sa.CXO#CSC } SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \ 80 10 insert top $msg } saods9/ds9/library/catdialog.tcl000644 000765 000000 00000107472 12741203161 017172 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # used by backup proc CATDialog {varname format catalog title action} { global cat global icat global pcat global ds9 global pds9 global wcs # first determine if aready in use, then increment if {[lsearch $icat(cats) $varname] >= 0} { incr cat(id) append varname $cat(id) } upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATDialog $varname:$format:$catalog:$title:$action" } # main dialog set var(top) ".${varname}" set var(mb) ".${varname}mb" if {[winfo exists $var(top)]} { raise $var(top) return } global current if {$current(frame) == {}} { return } # AR variables ARInit $varname CATServer # CAT variables lappend icat(cats) $varname set var(catdb) ${varname}catdb set var(tbldb) ${varname}tbldb set var(symdb) ${varname}symdb set var(symdl) ${varname}symdl set var(fltdl) ${varname}fltdl set var(frame) $current(frame) set var(server) $pcat(server) set var(loc) $pcat(loc) set var(system) $wcs(system) set var(sky) $wcs(sky) set var(skyformat) $wcs(skyformat) set var(rformat) $icat(rformat) set var(width) $icat(width) set var(height) $icat(height) set var(max) $icat(max) set var(allrows) $icat(allrows) set var(allcols) $icat(allcols) set var(show) $icat(show) set var(edit) $icat(edit) set var(panto) $icat(panto) set var(psystem) $var(system) set var(psky) $var(sky) set var(blink) 0 set var(blink,count) 0 set var(blink,marker) {} set var(plot) 0 set var(plot,var) {} set var(plot,x) {} set var(plot,xerr) {} set var(plot,y) {} set var(plot,yerr) {} CATSet $varname $format $catalog $title CATSymDBInit $varname # create the window set w $var(top) set mb $var(mb) set tt $title Toplevel $w $mb 7 $tt "CATDestroy $varname" $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit CATServerMenu $varname NSVRServerMenu $varname $mb add cascade -label [msgcat::mc {Symbol}] -menu $mb.symbol $mb add cascade -label [msgcat::mc {Preferences}] -menu $mb.prefs # file menu $mb.file $mb.file add command -label "[msgcat::mc {Load}]..." \ -command [list CATLoadVOTFile $varname] $mb.file add command -label "[msgcat::mc {Save}]..." \ -command [list CATSaveVOTFile $varname] $mb.file add separator $mb.file add cascade -label [msgcat::mc {Import}] -menu $mb.file.import $mb.file add cascade -label [msgcat::mc {Export}] -menu $mb.file.export $mb.file add separator $mb.file add command -label [msgcat::mc {Retrieve}] \ -command [list CATApply $varname 0] $mb.file add command -label [msgcat::mc {Cancel}] \ -command [list ARCancel $varname] $mb.file add separator $mb.file add command -label [msgcat::mc {Filter}] \ -command [list CATTable $varname] $mb.file add command -label [msgcat::mc {Clear}] \ -command [list CATOff $varname] $mb.file add separator $mb.file add checkbutton -label [msgcat::mc {Show}] \ -variable ${varname}(show) -command [list CATGenerate $varname] $mb.file add checkbutton -label [msgcat::mc {Edit}] \ -variable ${varname}(edit) -command [list CATEdit $varname] $mb.file add separator $mb.file add cascade -label [msgcat::mc {SAMP}] -menu $mb.file.samp $mb.file add command -label [msgcat::mc {Plot}] \ -command [list CATPlot $varname] $mb.file add separator $mb.file add command -label "[msgcat::mc {Display Header}]..." \ -command [list CATHeader $varname] $mb.file add command -label [msgcat::mc {Acknowledgment}] \ -command [list CATAck $varname] $mb.file add separator $mb.file add command -label [msgcat::mc {Update from Current Frame}] \ -command [list CATUpdate $varname] $mb.file add command \ -label [msgcat::mc {Update from Current Crosshair}] \ -command [list CATCrosshair $varname] $mb.file add separator $mb.file add command -label [msgcat::mc {Copy to Regions}] \ -command [list CATGenerateRegions $varname] $mb.file add separator $mb.file add command -label "[msgcat::mc {Print}]..." \ -command [list CATPrint $varname] $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command [list CATDestroy $varname] # Import menu $mb.file.import $mb.file.import add command -label "[msgcat::mc {Starbase}]..." \ -command [list CATLoadSBFile $varname] $mb.file.import add command -label "[msgcat::mc {Tab-Separated-Value}]..." \ -command [list CATLoadTSVFile $varname] # Export menu $mb.file.export $mb.file.export add command -label "[msgcat::mc {Starbase}]..." \ -command [list CATSaveSBFile $varname] $mb.file.export add command -label "[msgcat::mc {Tab-Separated-Value}]..." \ -command [list CATSaveTSVFile $varname] # SAMP menu $mb.file.samp $mb.file.samp add command -label [msgcat::mc {Connect}] \ -command SAMPConnect $mb.file.samp add command -label [msgcat::mc {Disconnect}] \ -command SAMPDisconnect $mb.file.samp add separator $mb.file.samp add cascade -label [msgcat::mc {Send}] \ -menu $mb.file.samp.send menu $mb.file.samp.send $mb.file.samp.send add command -label [msgcat::mc {Broadcast}] \ -command [list SAMPSendTableLoadVotable {} $varname] $mb.file.samp.send add separator # edit menu $mb.edit $mb.edit add command -label [msgcat::mc {Cut}] \ -command "CATCut $varname" -accelerator "${ds9(ctrl)}X" $mb.edit add command -label [msgcat::mc {Copy}] \ -command "CATCopy $varname" -accelerator "${ds9(ctrl)}C" $mb.edit add command -label [msgcat::mc {Paste}] \ -command "EntryPaste $var(top)" -accelerator "${ds9(ctrl)}V" $mb.edit add separator $mb.edit add command -label [msgcat::mc {Clear}] \ -command [list ARClear $varname] # symbol global $var(symdb) set flt $var(symdb) set sn [starbase_colnum $var(symdb) shape] set cn [starbase_colnum $var(symdb) color] set wn [starbase_colnum $var(symdb) width] set dn [starbase_colnum $var(symdb) dash] set fn [starbase_colnum $var(symdb) font] set fs [starbase_colnum $var(symdb) fontsize] set fw [starbase_colnum $var(symdb) fontweight] set fl [starbase_colnum $var(symdb) fontslant] menu $mb.symbol $mb.symbol add cascade -label [msgcat::mc {Shape}] -menu $mb.symbol.shape $mb.symbol add cascade -label [msgcat::mc {Color}] -menu $mb.symbol.color $mb.symbol add cascade -label [msgcat::mc {Width}] -menu $mb.symbol.width $mb.symbol add cascade -label [msgcat::mc {Font}] -menu $mb.symbol.font $mb.symbol add separator $mb.symbol add command -label "[msgcat::mc {Advanced}]..." \ -command [list CATSymDialog $varname] menu $mb.symbol.shape $mb.symbol.shape add radiobutton -label [msgcat::mc {Circle}] \ -variable ${flt}(1,$sn) -value circle \ -command [list CATGenerate $varname] $mb.symbol.shape add radiobutton -label [msgcat::mc {Ellipse}] \ -variable ${flt}(1,$sn) -value ellipse \ -command [list CATGenerate $varname] $mb.symbol.shape add radiobutton -label [msgcat::mc {Box}] \ -variable ${flt}(1,$sn) -value box \ -command [list CATGenerate $varname] $mb.symbol.shape add radiobutton -label [msgcat::mc {Text}] \ -variable ${flt}(1,$sn) -value text \ -command [list CATGenerate $varname] $mb.symbol.shape add cascade -label [msgcat::mc {Point}] \ -menu $mb.symbol.shape.point menu $mb.symbol.shape.point $mb.symbol.shape.point add radiobutton -label [msgcat::mc {Circle}] \ -variable ${flt}(1,$sn) -value {circle point} \ -command [list CATGenerate $varname] $mb.symbol.shape.point add radiobutton -label [msgcat::mc {Box}] \ -variable ${flt}(1,$sn) -value {box point} \ -command [list CATGenerate $varname] $mb.symbol.shape.point add radiobutton -label [msgcat::mc {Diamond}] \ -variable ${flt}(1,$sn) -value {diamond point} \ -command [list CATGenerate $varname] $mb.symbol.shape.point add radiobutton -label [msgcat::mc {Cross}] \ -variable ${flt}(1,$sn) -value {cross point} \ -command [list CATGenerate $varname] $mb.symbol.shape.point add radiobutton -label [msgcat::mc {X}] \ -variable ${flt}(1,$sn) -value {x point} \ -command [list CATGenerate $varname] $mb.symbol.shape.point add radiobutton -label [msgcat::mc {Arrow}] \ -variable ${flt}(1,$sn) -value {arrow point} \ -command [list CATGenerate $varname] $mb.symbol.shape.point add radiobutton -label [msgcat::mc {BoxCircle}]\ -variable ${flt}(1,$sn) -value {boxcircle point} \ -command [list CATGenerate $varname] ColorMenu $mb.symbol.color $flt 1,$cn [list CATGenerate $varname] WidthDashMenu $mb.symbol.width $flt 1,$wn 1,$dn \ [list CATGenerate $varname] [list CATGenerate $varname] FontMenu $mb.symbol.font $flt 1,$fn 1,$fs 1,$fw 1,$fl \ [list CATGenerate $varname] menu $mb.prefs $mb.prefs add checkbutton -label [msgcat::mc {Pan To}] \ -variable ${varname}(panto) $mb.prefs add separator $mb.prefs add checkbutton -label [msgcat::mc {All Rows}] \ -variable ${varname}(allrows) $mb.prefs add checkbutton -label [msgcat::mc {All Columns}] \ -variable ${varname}(allcols) # Catalog set f [ttk::labelframe $w.cat -text [msgcat::mc {Catalog}] -padding 2] ttk::label $f.ttitle -text [msgcat::mc {Name}] ttk::label $f.title -textvariable ${varname}(title) \ -relief groove -width 60 -anchor w ttk::label $f.tcat -text [msgcat::mc {Identification}] ttk::label $f.cat -textvariable ${varname}(catalog) \ -relief groove -width 60 -anchor w ttk::label $f.tref -text [msgcat::mc {Reference}] ttk::label $f.ref -text [string range $varname 3 end] \ -relief groove -width 13 -anchor w ttk::label $f.loctitle -text [msgcat::mc {IAU Location Code}] ttk::entry $f.loc -textvariable ${varname}(loc) -width 7 grid $f.ttitle $f.title -padx 2 -pady 2 -sticky w grid $f.tcat $f.cat -padx 2 -pady 2 -sticky w grid $f.tref $f.ref -padx 2 -pady 2 -sticky w grid $f.loctitle $f.loc -padx 2 -pady 2 -sticky w # Object set f [ttk::labelframe $w.obj -text [msgcat::mc {Object}] -padding 2] ttk::label $f.nametitle -text [msgcat::mc {Name}] ttk::entry $f.name -textvariable ${varname}(name) -width 60 set var(xname) [ttk::label $f.xtitle -text {} -width 1] ttk::entry $f.x -textvariable ${varname}(x) -width 14 set var(yname) [ttk::label $f.ytitle -text {} -width 1] ttk::entry $f.y -textvariable ${varname}(y) -width 14 CoordMenuButton $f.coord $varname system 0 sky skyformat \ [list CATWCSMenuUpdate $varname] CoordMenuEnable $f.coord.menu $varname system 0 sky skyformat ttk::button $f.update -text [msgcat::mc {Update}] \ -command [list CATUpdate $varname] ttk::label $f.wtitle -text [msgcat::mc {Width}] ttk::entry $f.w -textvariable ${varname}(width) -width 14 ttk::label $f.htitle -text [msgcat::mc {Height}] ttk::entry $f.h -textvariable ${varname}(height) -width 14 ARRFormat $f.rformat $varname grid $f.nametitle $f.name - - - - -padx 2 -pady 2 -sticky w grid $f.xtitle $f.x $f.ytitle $f.y $f.coord $f.update \ -padx 2 -pady 2 -sticky w grid $f.wtitle $f.w $f.htitle $f.h $f.rformat -padx 2 -pady 2 -sticky w # Param set f [ttk::labelframe $w.param -text [msgcat::mc {Table}] -padding 2] ttk::label $f.mfilter -text [msgcat::mc {Filter}] ttk::entry $f.filter -textvariable ${varname}(filter) -width 50 ttk::button $f.bfilter -text [msgcat::mc {Edit}] \ -command [list CATEditDialog $varname filter $var(catdb)] ttk::label $f.msort -text [msgcat::mc {Sort}] set var(sortmenu) [ttk::menubutton $f.sort \ -textvariable ${varname}(sort) \ -menu $f.sort.menu -width 14] ttk::radiobutton $f.isort -text [msgcat::mc {Increase}] \ -variable ${varname}(sort,dir) -value "-increasing" \ -command [list CATTable $varname] ttk::radiobutton $f.dsort -text [msgcat::mc {Decrease}] \ -variable ${varname}(sort,dir) -value "-decreasing" \ -command [list CATTable $varname] ttk::label $f.mtitle -text [msgcat::mc {Max Rows}] ttk::entry $f.max -textvariable ${varname}(max) -width 14 ttk::label $f.ftitle -text [msgcat::mc {Found}] set var(found) [ttk::label $f.found \ -width 14 -relief groove -anchor w] set var(raname) [ttk::label $f.ra -text {} -width 3] set var(ramenu) [ttk::menubutton $f.ram -textvariable \ ${varname}(colx) -menu $f.ram.menu -width 14] set var(decname) [ttk::label $f.dec -text {} -width 3] set var(decmenu) [ttk::menubutton $f.decm -textvariable \ ${varname}(coly) -menu $f.decm.menu -width 14] CoordMenuButton $f.pcoord $varname psystem 1 psky {} \ [list CATColsCmd $varname] CoordMenuEnable $f.pcoord.menu $varname psystem 1 psky {} grid $f.mfilter $f.filter - - $f.bfilter \ -padx 2 -pady 2 -sticky w grid $f.msort $f.sort $f.isort $f.dsort \ -padx 2 -pady 2 -sticky w grid $f.mtitle $f.max $f.ftitle $f.found \ -padx 2 -pady 2 -sticky w grid $var(raname) $var(ramenu) $var(decname) $var(decmenu) $f.pcoord \ -padx 2 -pady 2 -sticky w # Table set f [ttk::frame $w.tbl] set var(tbl) [table $f.t \ -state disabled \ -usecommand 0 \ -variable $var(tbldb) \ -colorigin 1 \ -roworigin 0 \ -cols $icat(mincols) \ -rows $icat(minrows) \ -width -1 \ -height -1 \ -maxwidth 300 \ -maxheight 300 \ -titlerows 1 \ -xscrollcommand [list $f.xscroll set]\ -yscrollcommand [list $f.yscroll set]\ -selecttype row \ -selectmode extended \ -anchor w \ -font [font actual TkDefaultFont] \ -browsecommand [list CATSelectCmd $varname %s %S] \ ] ttk::scrollbar $f.yscroll -command [list $var(tbl) yview] -orient vertical ttk::scrollbar $f.xscroll -command [list $var(tbl) xview] -orient horizontal grid $var(tbl) $f.yscroll -sticky news grid $f.xscroll -stick news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 # Status set f [ttk::frame $w.status] ttk::label $f.title -text [msgcat::mc {Status}] ttk::label $f.item -textvariable ${varname}(status) grid $f.title $f.item -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ButtonButton $f.load [msgcat::mc {Load}] [list CATLoadVOTFile $varname] ButtonButton $f.save [msgcat::mc {Save}] [list CATSaveVOTFile $varname] set var(apply) [ttk::button $f.apply \ -text [msgcat::mc {Retrieve}] \ -command "CATApply $varname 0"] set var(cancel) [ttk::button $f.cancel -text \ [msgcat::mc {Cancel}] \ -command "ARCancel $varname" -state disabled] ttk::button $f.filter -text [msgcat::mc {Filter}] \ -command [list CATTable $varname] ttk::button $f.clear -text [msgcat::mc {Clear}] \ -command [list CATOff $varname] set var(samp) [ttk::button $f.samp \ -text [msgcat::mc {SAMP}] \ -command "SAMPSendTableLoadVotable {} $varname"] ttk::button $f.plot -text [msgcat::mc {Plot}] \ -command [list CATPlot $varname] ttk::button $f.close -text [msgcat::mc {Close}] \ -command [list CATDestroy $varname] pack $f.apply $f.cancel $f.filter $f.clear $f.samp $f.plot $f.close \ -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.stbl -orient horizontal ttk::separator $w.sstatus -orient horizontal pack $w.buttons $w.sstatus $w.status $w.stbl -side bottom -fill x pack $w.cat $w.obj $w.param -side top -fill x pack $w.tbl -side top -fill both -expand true # needs to go after sort menu button is defined CATSortMenu $varname CATColsMenu $varname CATColsUpdate $varname switch $var(format) { cds {$mb entryconfig [msgcat::mc {Catalog Server}] -state normal} cxc - ned - skybot - sdss - simbad { $mb entryconfig [msgcat::mc {Catalog Server}] -state disabled } } ARCoord $varname CATUpdate $varname CATDialogUpdate $varname ARStatus $varname {} switch -- $action { apply {CATApply $varname 0} sync {CATApply $varname 1} none {} } # return the actual varname return $varname } proc CATDialogUpdate {varname} { upvar #0 $varname var global $varname global ds9 global samp global debug if {$debug(tcl,cat)} { puts stderr "CATDialogUpdate $varname" } # do we have a db? if {[CATValidDB $var(tbldb)]} { $var(mb).file entryconfig [msgcat::mc {Filter}] -state normal $var(mb).file entryconfig [msgcat::mc {Clear}] -state normal $var(mb).file entryconfig [msgcat::mc {Plot}] -state normal $var(mb).file entryconfig "[msgcat::mc {Display Header}]..." \ -state normal $var(mb).file entryconfig [msgcat::mc {Copy to Regions}] -state normal $var(mb).file entryconfig "[msgcat::mc {Print}]..." -state normal $var(top).buttons.filter configure -state normal $var(top).buttons.clear configure -state normal $var(top).buttons.plot configure -state normal } else { $var(mb).file entryconfig [msgcat::mc {Filter}] -state disabled $var(mb).file entryconfig [msgcat::mc {Clear}] -state disabled $var(mb).file entryconfig [msgcat::mc {Plot}] -state disabled $var(mb).file entryconfig "[msgcat::mc {Display Header}]..." \ -state disabled $var(mb).file entryconfig [msgcat::mc {Copy to Regions}] -stat disabled $var(mb).file entryconfig "[msgcat::mc {Print}]..." -state disabled $var(top).buttons.filter configure -state disabled $var(top).buttons.clear configure -state disabled $var(top).buttons.plot configure -state disabled } set m $var(mb).file.samp set ss [expr $ds9(menu,start)+2] if {[info exists samp]} { # menu $m entryconfig [msgcat::mc {Send}] -state normal $m entryconfig [msgcat::mc {Connect}] -state disabled $m entryconfig [msgcat::mc {Disconnect}] -state normal if {[$m.send index end] >= $ss} { $m.send delete $ss end } foreach args $samp(apps,votable) { foreach {id name} $args { $m.send add command -label $name \ -command "SAMPSendTableLoadVotable $id $varname" } } # button $var(samp) configure -state normal } else { # menu $m entryconfig [msgcat::mc {Send}] -state disabled $m entryconfig [msgcat::mc {Connect}] -state normal $m entryconfig [msgcat::mc {Disconnect}] -state disabled # button $var(samp) configure -state disabled } } proc CATAck {varname} { upvar #0 $varname var global $varname switch $var(format) { cds {CATCDSAck $varname} cxc {CATCXCAck $varname} ned {CATNEDAck $varname} skybot {CATSkyBotAck $varname} sdss {CATSDSSAck $varname} simbad {CATSIMBADAck $varname} } } proc CATApply {varname sync} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATApply $varname $sync" } if {$var(catalog) == {}} { Error [msgcat::mc {No Catalog specified}] return } set var(sync) $sync ARApply $varname if {$var(name) != {}} { set var(sky) fk5 CoordMenuButtonCmd $varname system sky {} CATWCSMenuUpdate $varname NSVRServer $varname } else { CATServer $varname } } proc CATCopy {varname} { upvar #0 $varname var global $varname set w [focus -displayof $var(top)] if {$w == $var(tbl)} { CATCopyTable $varname } else { EntryCopy $var(top) } } proc CATCut {varname} { upvar #0 $varname var global $varname set w [focus -displayof $var(top)] if {$w == $var(tbl)} { CATCopyTable $varname } else { EntryCut $var(top) } } proc CATCopyTable {varname} { upvar #0 $varname var global $varname set w [focus -displayof $var(top)] set sel [$var(tbl) curselection] set data {} set row [lindex [split [lindex $sel 0] ,] 0] foreach ss $sel { set rr [lindex [split $ss ,] 0] if {$rr != $row} { append data "\n" set row $rr } else { if {$data != {}} { append data "\t" } } append data "[$var(tbl) get $ss]" } append data "\n" clipboard clear -displayof $w clipboard append -displayof $w $data } proc CATCrosshair {varname} { upvar #0 $varname var global $varname if {[info commands $var(frame)] == {}} { return } if {![$var(frame) has fits]} { return } if {[$var(frame) has wcs equatorial $var(system)]} { set coord [$var(frame) get crosshair \ $var(system) $var(sky) $var(skyformat)] set var(x) [lindex $coord 0] set var(y) [lindex $coord 1] set var(name) {} } } proc CATDestroy {varname} { upvar #0 $varname var global $varname global $var(catdb) global $var(tbldb) global $var(symdb) global $var(symdl) global icat global debug if {$debug(tcl,cat)} { puts stderr "CATDestroy $varname" } # stop timer if needed if {$var(blink)} { set var(blink) 0 after cancel [list CATSelectTimer $varname] } # frame may have been deleted if {[info commands $var(frame)] != {}} { # unhighlite any makers if {[$var(frame) has fits]} { $var(frame) marker catalog $varname unhighlite } } upvar #0 $var(symdl) svar if {[info exists svar(top)]} { if {[winfo exists $svar(top)]} { CATSymDestroy $var(symdl) } } if {[info exists $var(symdb)]} { unset $var(symdb) } if {[info exists $var(tbldb)]} { unset $var(tbldb) } if {[info exists $var(catdb)]} { unset $var(catdb) } set ii [lsearch $icat(cats) $varname] if {$ii>=0} { set icat(cats) [lreplace $icat(cats) $ii $ii] } # plot window? if {$var(plot)} { PlotDestroy $var(plot,var) } ARDestroy $varname } proc CATEdit {varname} { upvar #0 $varname var global $varname global $var(tbldb) if {[info commands $var(frame)] == {}} { return } if {![$var(frame) has fits]} { return } $var(frame) marker catalog unselect all $var(frame) marker catalog unhighlite all CATGenerate $varname # regenerate the plot if needed if {$var(plot)} { CATPlotGenerate $varname } if {$var(edit)} { $var(tbl) configure \ -state normal \ -selectmode single } else { $var(tbl) configure \ -state disabled \ -selectmode extended } } proc CATGetHeader {varname} { upvar #0 $varname var global $varname global $var(tbldb) set t $var(tbldb) upvar #0 $t T if {[CATValidDB $var(tbldb)]} { set hdr {} # header set nl [expr $T(HLines)-2] for {set ll 1} {$ll <= $nl} {incr ll} { append hdr "$T(H_$ll)\n" } append hdr "\n" # dump cols stats set nc $T(Ncols) for {set cc 1} {$cc <= $nc} {incr cc} { append hdr "# name=[lindex $T(Header) [expr $cc-1]] " if {[info exists ${t}(DataType)]} { append hdr "datatype=[lindex $T(DataType) [expr $cc-1]] " } if {[info exists ${t}(Id)]} { if {[lindex $T(Id) [expr $cc-1]] != {}} { append hdr "id=[lindex $T(Id) [expr $cc-1]] " } } if {[info exists ${t}(ArraySize)]} { if {[lindex $T(ArraySize) [expr $cc-1]] != {}} { append hdr "arraysize=[lindex $T(ArraySize) [expr $cc-1]] " } } if {[info exists ${t}(Width)]} { if {[lindex $T(Width) [expr $cc-1]] != {}} { append hdr "width=[lindex $T(Width) [expr $cc-1]] " } } if {[info exists ${t}(Precision)]} { if {[lindex $T(Precision) [expr $cc-1]] != {}} { append hdr "precision=[lindex $T(Precision) [expr $cc-1]] " } } if {[info exists ${t}(Unit)]} { if {[lindex $T(Unit) [expr $cc-1]] != {}} { append hdr "unit=[lindex $T(Unit) [expr $cc-1]] " } } if {[info exists ${t}(Ref)]} { if {[lindex $T(Ref) [expr $cc-1]] != {}} { append hdr "ref=[lindex $T(Ref) [expr $cc-1]] " } } if {[info exists ${t}(Ucd)]} { if {[lindex $T(Ucd) [expr $cc-1]] != {}} { append hdr "ucd=[lindex $T(Ucd) [expr $cc-1]] " } } if {[info exists ${t}(Description)]} { if {[lindex $T(Description) [expr $cc-1]] != {}} { append hdr "[lindex $T(Description) [expr $cc-1]] " } } append hdr "\n" } return $hdr } return {} } proc CATHeader {varname} { upvar #0 $varname var global $varname global $var(tbldb) SimpleTextDialog ${varname}hdr "$var(title) [msgcat::mc {Header}]" \ 80 20 insert top [CATGetHeader $varname] } proc CATKey {which key} { global icat global ds9 set icat(key) $key set icat(key,update) {} $which marker catalog key foreach rr $icat(key,update) { eval "CATGenerateUpdate [lindex $rr 0] [lindex $rr 1]" } set icat(key) {} set icat(key,update) {} } proc CATPageSetup {varname} { upvar #0 $varname var global $varname global ds9 switch $ds9(wm) { x11 - aqua {} win32 {win32 pm pagesetup} } } proc CATPrint {varname} { upvar #0 $varname var global $varname global $var(tbldb) global ds9 switch $ds9(wm) { x11 - aqua - win32 {CATPSPrint $varname} wwin32 {win32 pm print text [::textutil::tabify::untabify2 [starbase_write_ $var(tbldb)] 12]} } } proc CATPSPrint {varname} { upvar #0 $varname var global $varname if {[PRPrintDialog]} { if {[catch {CATPostScript $varname} printError]} { Error "[msgcat::mc {An error has occurred while printing}] $printError" } } } proc CATPostScript {varname} { upvar #0 $varname var global $varname global $var(tbldb) global ps if {$ps(dest) == "file"} { set ch [open "| cat > $ps(filename,txt)" w] } else { set ch [open "| $ps(cmd)" w] } starbase_writefp $var(tbldb) $ch close $ch } proc CATServer {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATServer $varname" } if {($var(x) != {}) && ($var(y) != {}) && ($var(width) != {}) && ($var(height) != {})} { ARStatus $varname "Searching [string range $var(title) 0 50]" switch $var(format) { cds {CATCDS $varname} cxc {CATCXC $varname} ned {CATNED $varname} skybot {CATSkyBot $varname} sdss {CATSDSS $varname} simbad {CATSIMBAD $varname} } } else { ARError $varname [msgcat::mc {Please specify width, height, and either name or (ra,dec)}] } } proc CATUpdate {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATUpdate $varname" } if {[info commands $var(frame)] == {}} { return } if {![$var(frame) has fits]} { return } if {[$var(frame) has wcs equatorial $var(system)]} { set coord [$var(frame) get fits center \ $var(system) $var(sky) $var(skyformat)] set var(x) [lindex $coord 0] set var(y) [lindex $coord 1] set size [$var(frame) get fits size \ $var(system) $var(sky) $var(rformat)] set var(width) [lindex $size 0] set var(height) [lindex $size 1] set var(name) {} } } proc CATWCSMenuUpdate {varname} { upvar #0 $varname var global $varname ARCoord $varname set var(psystem) $var(system) set var(psky) $var(sky) CoordMenuButtonCmd $varname psystem psky {} CATColsUpdate $varname } proc CATColsUpdate {varname} { upvar #0 $varname var global $varname global ds9 global pds9 switch $var(psystem) { image - physical - detector - amplifier { $var(raname) configure -text {X} \ -font [font actual TkDefaultFont] $var(decname) configure -text {Y} \ -font [font actual TkDefaultFont] } default { if {[$var(frame) has wcs equatorial $var(psystem)]} { switch $var(psky) { fk4 - fk5 - icrs { $var(raname) configure -text "\u03b1" \ -font "$ds9(times) $pds9(font,size)" $var(decname) configure -text "\u03b4" \ -font "$ds9(times) $pds9(font,size)" } galactic { $var(raname) configure -text {l} \ -font "{$ds9(times)} $pds9(font,size) normal italic" $var(decname) configure -text {b} \ -font "{$ds9(times)} $pds9(font,size) normal italic" } ecliptic { $var(raname) configure -text "\u03bb" \ -font "$ds9(times) $pds9(font,size)" $var(decname) configure -text "\u03b2" \ -font "$ds9(times) $pds9(font,size)" } } } else { $var(raname) configure -text {X} \ -font [font actual TkDefaultFont] $var(decname) configure -text {Y} \ -font [font actual TkDefaultFont] } } } } # Edit Dialog proc CATEditDialog {varname which db} { upvar #0 $varname var global $varname global ds9 global ed set w ".${varname}edit" set mb ".${varname}editmb" set ed(ok) 0 set ed(text) $w.param.txt DialogCreate $w [msgcat::mc {Edit}] ed(ok) $w configure -menu $mb menu $mb # file $mb add cascade -label [msgcat::mc {File}] -menu $mb.file menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] \ -command {set ed(ok) 1} $mb.file add command -label [msgcat::mc {Clear}] \ -command CATEditClear $mb.file add separator $mb.file add command -label "[msgcat::mc {Load}]..." \ -command CATEditLoad $mb.file add command -label "[msgcat::mc {Save}]..." \ -command CATEditSave $mb.file add separator $mb.file add command -label [msgcat::mc {Cancel}] \ -command {set ed(ok) 0} # edit $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit menu $mb.edit $mb.edit add command -label [msgcat::mc {Undo}] \ -command "$ed(text) edit undo" -accelerator "${ds9(ctrl)}Z" $mb.edit add command -label [msgcat::mc {Redo}] \ -command "$ed(text) edit redo" -accelerator "${ds9(shiftctrl)}Z" $mb.edit add separator $mb.edit add command -label [msgcat::mc {Cut}] \ -command "tk_textCut $ed(text)" -accelerator "${ds9(ctrl)}X" $mb.edit add command -label [msgcat::mc {Copy}] \ -command "tk_textCopy $ed(text)" -accelerator "${ds9(ctrl)}C" $mb.edit add command -label [msgcat::mc {Paste}] \ -command "tk_textPaste $ed(text)" -accelerator "${ds9(ctrl)}V" global $db # column $mb add cascade -label [msgcat::mc {Column}] -menu $mb.col if {[info exists $mb.col]} { destroy $mb.col } menu $mb.col if {[CATValidDB $db]} { set cnt -1 foreach col [starbase_columns $db] { $mb.col add command -label "$col" \ -command "$ed(text) insert insert \{\$$col\}" # wrap if needed incr cnt if {$cnt>=$ds9(menu,size,wrap)} { set cnt 0 $mb.col entryconfig $col -columnbreak 1 } } } # operator $mb add cascade -label [msgcat::mc {Operator}] -menu $mb.op menu $mb.op $mb.op add command -label {-} \ -command "$ed(text) insert insert {-}" $mb.op add command -label {!} \ -command "$ed(text) insert insert {!}" $mb.op add command -label {(} \ -command "$ed(text) insert insert {(}" $mb.op add command -label {)} \ -command "$ed(text) insert insert {)}" $mb.op add separator $mb.op add command -label {*} \ -command "$ed(text) insert insert {*}" $mb.op add command -label {/} \ -command "$ed(text) insert insert {/}" $mb.op add command -label {%} \ -command "$ed(text) insert insert {%}" $mb.op add command -label {+} \ -command "$ed(text) insert insert {+}" $mb.op add command -label {-} \ -command "$ed(text) insert insert {-}" $mb.op add separator $mb.op add command -label {<} \ -command "$ed(text) insert insert {<}" $mb.op add command -label {>} \ -command "$ed(text) insert insert {>}" $mb.op add command -label {<=} \ -command "$ed(text) insert insert {<=}" $mb.op add command -label {>=} \ -command "$ed(text) insert insert {>=}" $mb.op add command -label {==} \ -command "$ed(text) insert insert {==}" $mb.op add command -label {!=} \ -command "$ed(text) insert insert {!=}" $mb.op add separator $mb.op add command -label {&&} \ -command "$ed(text) insert insert {&&}" $mb.op add command -label {||} \ -command "$ed(text) insert insert {||}" # operator $mb add cascade -label [msgcat::mc {Math Function}] -menu $mb.math menu $mb.math $mb.math add command -label {acos} \ -command "$ed(text) insert insert {acos()}" $mb.math add command -label {asin} \ -command "$ed(text) insert insert {asin()}" $mb.math add command -label {atan} \ -command "$ed(text) insert insert {atan()}" $mb.math add command -label {atan2} \ -command "$ed(text) insert insert {atan2(,)}" $mb.math add command -label {ceil} \ -command "$ed(text) insert insert {ceil()}" $mb.math add command -label {cos} \ -command "$ed(text) insert insert {cos()}" $mb.math add command -label {cosh} \ -command "$ed(text) insert insert {cosh()}" $mb.math add command -label {exp} \ -command "$ed(text) insert insert {exp()}" $mb.math add command -label {floor} \ -command "$ed(text) insert insert {floor()}" $mb.math add command -label {fmod} \ -command "$ed(text) insert insert {fmod(,)}" $mb.math add command -label {hypot} \ -command "$ed(text) insert insert {hypot(,)}" $mb.math add command -label {log} \ -command "$ed(text) insert insert {log()}" $mb.math add command -label {log10} \ -command "$ed(text) insert insert {log10()}" $mb.math add command -label {pow} \ -command "$ed(text) insert insert {pow(,)}" $mb.math add command -label {sin} \ -command "$ed(text) insert insert {sin()}" $mb.math add command -label {sinh} \ -command "$ed(text) insert insert {sinh()}" $mb.math add command -label {sqrt} \ -command "$ed(text) insert insert {sqrt()}" $mb.math add command -label {tan} \ -command "$ed(text) insert insert {tan()}" $mb.math add command -label {tanh} \ -command "$ed(text) insert insert {tanh()}" $mb.math add command -label {abs} \ -command "$ed(text) insert insert {abs()}" $mb.math add command -label {double} \ -command "$ed(text) insert insert {double()}" $mb.math add command -label {int} \ -command "$ed(text) insert insert {int()}" $mb.math add command -label {round} \ -command "$ed(text) insert insert {round()}" # Text set f [ttk::frame $w.param] text $f.txt \ -height 10 \ -width 60 \ -yscrollcommand "$f.yscroll set" \ -xscrollcommand "$f.xscroll set" \ -undo true \ -wrap none ttk::scrollbar $f.yscroll -command [list $ed(text) yview] \ -orient vertical ttk::scrollbar $f.xscroll -command [list $ed(text) xview] \ -orient horizontal grid $ed(text) $f.yscroll -sticky news grid $f.xscroll -stick news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.clear -text [msgcat::mc {Clear}] -command CATEditClear ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.clear $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.param -side top -fill both -expand true pack $w.buttons $w.sep -side bottom -fill x $ed(text) insert end $var($which) $ed(text) see end DialogCenter $w DialogWait $w ed(ok) $w.buttons.ok if {$ed(ok)} { set flt [$ed(text) get 1.0 end] catch {regsub {\n} $flt " " flt} set var($which) [string trim $flt] } DialogDismiss $w destroy $mb set rr $ed(ok) unset ed return $rr } proc CATEditClear {} { global ed $ed(text) delete 1.0 end } proc CATEditSave {} { global ed set fn [SaveFileDialog catfltfbox] if {$fn != {}} { if {[catch {open $fn w} fp]} { Error "[msgcat::mc {Unable to open file}] $fn: $fp" return } set flt [$ed(text) get 1.0 end] catch {regsub {\n} $flt " " flt} puts $fp [string trim $flt] catch {close $fp} } } proc CATEditLoad {} { global ed set fn [OpenFileDialog catfltfbox] if {$fn != {}} { if {[catch {open $fn r} fp]} { Error "[msgcat::mc {Unable to open file}] $fn: $fp" return } $ed(text) delete 1.0 end $ed(text) insert end [read -nonewline $fp] $ed(text) see end catch {close $fp} } } proc UpdateCATDialog {} { global icat foreach varname $icat(cats) { CATDialogUpdate $varname } } saods9/ds9/library/catflt.tcl000644 000765 000000 00000006010 12705445646 016522 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CATFltSort {varname} { upvar #0 $varname var global $varname global $var(catdb) global $var(tbldb) upvar #0 $var(catdb) catsrc upvar #0 $var(tbldb) catdest # create header set catdest(Header) $catsrc(Header) starbase_colmap catdest set catdest(Ndshs) [llength $catdest(Header)] set catdest(Nrows) 0 set catdest(HLines) $catsrc(HLines) set catdest(Dashes) $catsrc(Dashes) # optional if {[info exists catsrc(DataType)]} { set catdest(DataType) $catsrc(DataType) } if {[info exists catsrc(Id)]} { set catdest(Id) $catsrc(Id) } if {[info exists catsrc(ArraySize)]} { set catdest(ArraySize) $catsrc(ArraySize) } if {[info exists catsrc(Width)]} { set catdest(Width) $catsrc(Width) } if {[info exists catsrc(Precision)]} { set catdest(Precision) $catsrc(Precision) } if {[info exists catsrc(Unit)]} { set catdest(Unit) $catsrc(Unit) } if {[info exists catsrc(Ref)]} { set catdest(Ref) $catsrc(Ref) } if {[info exists catsrc(Ucd)]} { set catdest(Ucd) $catsrc(Ucd) } if {[info exists catsrc(Description)]} { set catdest(Description) $catsrc(Description) } for {set ii 1} {$ii<=$catsrc(HLines)} {incr ii} { set catdest(H_$ii) $catsrc(H_$ii) } for {set jj 1} {$jj<=$catsrc(Ncols)} {incr jj} { set catdest(0,$jj) $catsrc(0,$jj) } # sort? set order {} if {$var(sort) != {}} { set col $catsrc($var(sort)) for {set ii 1} {$ii<=$catsrc(Nrows)} {incr ii} { set val $catsrc($ii,$col) # if blank, set to 0 if {$val == {}} { set val 0 } lappend order "[list $ii $val]" } # first try as real, if error, then ascii if {[catch {lsort $var(sort,dir) -real -index 1 $order} oo]} { set oo [lsort $var(sort,dir) -ascii -index 1 $order] } set order $oo } else { for {set ii 1} {$ii<=$catsrc(Nrows)} {incr ii} { lappend order "[list $ii {}]" } } # data set kk 0 for {set ii 1} {$ii<=$catsrc(Nrows)} {incr ii} { set id [lindex [lindex $order [expr $ii-1]] 0] # now filter set pass 1 if {$var(filter) != {}} { # eval all colnames foreach col $catsrc(Header) { set col [string trim $col] set val $catsrc($id,$catsrc($col)) # here's a tough one-- # what to do if the column is blank # for now, just set it to '0' if {[string trim "$val"] == {}} { set val 0 } eval "set \{$col\} \{$val\}" } # subst any columv vars if {[catch {subst $var(filter)} ff]} { return 0 } # evaluate filter if {[catch {expr $ff} result]} { return 0 } # do we keep the row? if {!$result} { set pass 0 } } if {$pass} { incr kk for {set jj 1} {$jj<=$catsrc(Ncols)} {incr jj} { set catdest($kk,$jj) $catsrc($id,$jj) } } } # success set catdest(Nrows) $kk return 1 } saods9/ds9/library/catmatch.tcl000644 000765 000000 00000041141 12705445646 017035 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CATMatchFrame {} { global icat global current # find all cats for frame set cats {} foreach varname $icat(cats) { upvar #0 $varname var global $varname if {$var(frame) == $current(frame)} { lappend cats $varname } } if {[llength $cats] < 2} { Warning [msgcat::mc {At least 2 different catalogs are required}] return } if {[CATMatchDialog $cats]} { if {$icat(match1) != {} && $icat(match2) != {} && $icat(match1) != $icat(match2)} { CATMatch $current(frame) $icat(match1) $icat(match2) } else { Warning [msgcat::mc {At least 2 different catalogs are required}] } } } proc CATMatchDialog {cats} { global ds9 global ed global icat set w {.catmat} set mb {.catmatmb} set ed(top) $w set ed(mb) $mb set ed(ok) 0 set ed(match1) [lindex $cats 0] set varname $ed(match1) upvar #0 $varname var global $varname set ed(match1,msg) $var(title) set ed(match2) [lindex $cats 1] set varname $ed(match2) upvar #0 $varname var global $varname set ed(match2,msg) $var(title) set ed(error) $icat(error) set ed(rformat) $icat(eformat) set ed(function) $icat(function) set ed(unique) $icat(unique) set ed(return) $icat(return) DialogCreate $w [msgcat::mc {Match}] ed(ok) $w configure -menu $mb menu $mb # file $mb add cascade -label [msgcat::mc {File}] -menu $mb.file menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] -command {set ed(ok) 1} $mb.file add command -label [msgcat::mc {Cancel}] -command {set ed(ok) 0} # edit $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit EditMenu $mb ed # param set f [ttk::frame $w.param] ttk::label $f.tmatch -text [msgcat::mc {Match}] ttk::menubutton $f.match1 -textvariable ed(match1,msg) -menu $f.match1.menu ttk::label $f.tand -text [msgcat::mc {and}] ttk::menubutton $f.match2 -textvariable ed(match2,msg) -menu $f.match2.menu CATMatchDialogCatsMenu $f match1 $cats CATMatchDialogCatsMenu $f match2 $cats ttk::label $f.terror -text [msgcat::mc {Error}] ttk::entry $f.error -textvariable ed(error) -width 14 ARRFormat $f.eformat ed ttk::label $f.tfunction -text [msgcat::mc {Function}] ttk::menubutton $f.function -textvariable ed(function,msg) \ -menu $f.function.menu menu $f.function.menu -tearoff 0 $f.function.menu add radiobutton -variable ed(function) \ -label "1 [msgcat::mc {and}] 2" \ -value 1and2 -command [list CATMatchDialogFunctionMenu $f] $f.function.menu add radiobutton -variable ed(function) \ -label "1 [msgcat::mc {not}] 2" \ -value 1not2 -command [list CATMatchDialogFunctionMenu $f] $f.function.menu add radiobutton -variable ed(function) \ -label "2 [msgcat::mc {not}] 1" \ -value 2not1 -command [list CATMatchDialogFunctionMenu $f] ttk::checkbutton $f.unique -text [msgcat::mc {Unique}] -variable ed(unique) ttk::label $f.treturn -text [msgcat::mc {Return}] ttk::menubutton $f.return -textvariable ed(return,msg) \ -menu $f.return.menu menu $f.return.menu -tearoff 0 $f.return.menu add radiobutton -variable ed(return) \ -label "1 [msgcat::mc {and}] 2" \ -value 1and2 -command [list CATMatchDialogReturnMenu $f] $f.return.menu add radiobutton -variable ed(return) \ -label "1 [msgcat::mc {only}]" \ -value 1only -command [list CATMatchDialogReturnMenu $f] $f.return.menu add radiobutton -variable ed(return) \ -label "2 [msgcat::mc {only}]" \ -value 2only -command [list CATMatchDialogReturnMenu $f] grid $f.tmatch $f.match1 $f.tand $f.match2 -padx 2 -pady 2 -sticky ew grid $f.terror $f.error x $f.eformat -padx 2 -pady 2 -sticky w grid $f.tfunction $f.function x $f.unique -padx 2 -pady 2 -sticky ew grid $f.treturn $f.return -padx 2 -pady 2 -sticky ew # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.param -side top -fill both -expand true pack $w.buttons $w.sep -side bottom -fill x CATMatchDialogFunctionMenu $w.param CATMatchDialogReturnMenu $w.param DialogCenter $w DialogWait $w ed(ok) $w.buttons.ok if {$ed(ok)} { set icat(match1) $ed(match1) set icat(match2) $ed(match2) set icat(error) $ed(error) set icat(eformat) $ed(rformat) set icat(function) $ed(function) set icat(unique) $ed(unique) set icat(return) $ed(return) } DialogDismiss $w destroy $mb set rr $ed(ok) unset ed return $rr } proc CATMatchDialogFunctionMenu {f} { global ed switch $ed(function) { 1and2 { $f.unique configure -state normal $f.return configure -state normal set ed(function,msg) "1 [msgcat::mc {and}] 2" } 1not2 { $f.unique configure -state disabled $f.return configure -state disabled set ed(function,msg) "1 [msgcat::mc {not}] 2" } 2not1 { $f.unique configure -state disabled $f.return configure -state disabled set ed(function,msg) "2 [msgcat::mc {not}] 1" } } } proc CATMatchDialogReturnMenu {f} { global ed switch $ed(return) { 1and2 { set ed(return,msg) "1 [msgcat::mc {and}] 2" } 1only { set ed(return,msg) "1 [msgcat::mc {only}]" } 2only { set ed(return,msg) "2 [msgcat::mc {only}]" } } } proc CATMatchDialogCatsMenu {f which cats} { global ed set m $f.$which.menu menu $m -tearoff 0 foreach varname $cats { upvar #0 $varname var global $varname $m add radiobutton -variable ed($which) -label $var(title) \ -value $varname -command [list set ed($which,msg) $var(title)] } } proc CATMatch {frame varname1 varname2} { global icat global debug if {$debug(tcl,cat)} { puts stderr "CATMatch $frame $varname1 $varname2" } upvar #0 $varname1 var1 global $varname1 global $var1(tbldb) set t1 $var1(tbldb) upvar #0 $t1 T1 upvar #0 $varname2 var2 global $varname2 global $var2(tbldb) set t2 $var2(tbldb) upvar #0 $t2 T2 if {![CATValidDB $var1(tbldb)] || ![CATValidDB $var2(tbldb)]} { return } if {$T1(Nrows)==0 || $T2(Nrows)==0} { Warning [msgcat::mc {Match Catalog requires at least 1 row per catalog}] return } # cat1 set nrows1 [starbase_nrows $var1(tbldb)] set cols1 [starbase_columns $var1(tbldb)] set colx1 [starbase_colnum $var1(tbldb) $var1(colx)] set coly1 [starbase_colnum $var1(tbldb) $var1(coly)] set nrows2 [starbase_nrows $var2(tbldb)] set cols2 [starbase_columns $var2(tbldb)] set colx2 [starbase_colnum $var2(tbldb) $var2(colx)] set coly2 [starbase_colnum $var2(tbldb) $var2(coly)] global xx1 yy1 global xx2 yy2 global rr set xx1 {} set yy1 {} set xx2 {} set yy2 {} set rr {} for {set ii 1} {$ii <= $nrows1} {incr ii} { lappend xx1 [starbase_get $var1(tbldb) $ii $colx1] lappend yy1 [starbase_get $var1(tbldb) $ii $coly1] } for {set jj 1} {$jj <= $nrows2} {incr jj} { lappend xx2 [starbase_get $var2(tbldb) $jj $colx2] lappend yy2 [starbase_get $var2(tbldb) $jj $coly2] } global current $current(frame) match xx1 yy1 $var1(system) $var1(sky) \ xx2 yy2 $var2(system) $var2(sky) \ $icat(error) $var1(system) $icat(eformat) rr switch $icat(function) { 1and2 { if {$icat(unique)} { set aa [lsort -index 0 -integer -unique $rr] set rr [lsort -index 1 -integer -unique $aa] } else { set rr [lsort -index 0 -integer $rr] } } 1not2 {} 2not1 {} } if {[llength $rr] == 0} { Info [msgcat::mc {No Items Found}] return } switch $icat(function) { 1and2 { switch $icat(return) { 1and2 {CATMatchAnd1and2 $varname1 $varname2 rr} 1only {CATMatchAnd1only $varname1 $varname2 rr} 2only {CATMatchAnd2only $varname1 $varname2 rr} } } 1not2 {CATMatchNot $varname1 $varname2 rr} 2not1 {CATMatchNot $varname2 $varname1 rr} } } proc CATMatchAnd1and2 {varname1 varname2 rrname} { upvar $rrname rr upvar #0 $varname1 var1 global $varname1 global $var1(tbldb) set t1 $var1(tbldb) upvar #0 $t1 T1 upvar #0 $varname2 var2 global $varname2 global $var2(tbldb) set t2 $var2(tbldb) upvar #0 $t2 T2 set varname [CATDialog catmatch {} {} {} none] upvar #0 $varname var global $varname global $var(catdb) set db $var(catdb) upvar #0 $db T ARStatus $varname [msgcat::mc {Loading Catalog}] CATOff $varname CATSet $varname {} "$var1(catalog) and $var2(catalog)" \ "$var1(title) and $var2(title)" set var(name) {} set var(x) {} set var(y) {} set var(width) {} set var(height) {} # required set T(Header) $T1(Header) foreach ll $T2(Header) { # make cols unique lappend T(Header) "2_$ll" } set T(Dashes) [regsub -all {[A-Za-z0-9]} $T(Header) {-}] set T(Ndshs) [expr $T1(Ndshs)+$T2(Ndshs)] set T(H_1) $T(Header) set T(H_2) $T(Dashes) set T(HLines) 2 set T(Nrows) 0 starbase_colmap T # optional if {[info exists ${t1}(DataType)]} { set T(DataType) $T1(DataType) if {[info exists ${t2}(DataType)]} { append T(DataType) " $T2(DataType)" } } if {[info exists ${t1}(Id)]} { set T(Id) $T1(Id) if {[info exists ${t2}(Id)]} { append T(Id) " $T2(Id)" } } if {[info exists ${t1}(ArraySize)]} { set T(ArraySize) $T1(ArraySize) if {[info exists ${t2}(ArraySize)]} { append T(ArraySize) " $T2(ArraySize)" } } if {[info exists ${t1}(Width)]} { set T(Width) $T1(Width) if {[info exists ${t2}(Width)]} { append T(Width) " $T2(Width)" } } if {[info exists ${t1}(Precision)]} { set T(Precision) $T1(Precision) if {[info exists ${t2}(Precision)]} { append T(Precision) " $T2(Precision)" } } if {[info exists ${t1}(Unit)]} { set T(Unit) "$T1(Unit) " if {[info exists ${t2}(Unit)]} { append T(Unit) " $T2(Unit)" } } if {[info exists ${t1}(Ref)]} { set T(Ref) $T1(Ref) if {[info exists ${t2}(Ref)]} { append T(Ref) " $T2(Ref)" } } if {[info exists ${t1}(Ucd)]} { set T(Ucd) $T1(Ucd) if {[info exists ${t2}(Ucd)]} { append T(Ucd) " $T2(Ucd)" } } if {[info exists ${t1}(Description)]} { set T(Description) $T1(Description) if {[info exists ${t2}(Description)]} { append T(Description) " $T2(Description)" } } set ll 0 foreach {r1 r2} [join $rr] { incr ll for {set ii 1} {$ii<=$T1(Ncols)} {incr ii} { set T($ll,$ii) $T1($r1,$ii) } for {set jj 1} {$jj<=$T2(Ncols)} {incr jj} { set T($ll,[expr $ii+$jj-1]) $T2($r2,$jj) } incr T(Nrows) } ARDone $varname CATLoadDone $varname } proc CATMatchAnd1only {varname1 varname2 rrname} { upvar $rrname rr upvar #0 $varname1 var1 global $varname1 global $var1(tbldb) set t1 $var1(tbldb) upvar #0 $t1 T1 upvar #0 $varname2 var2 global $varname2 global $var2(tbldb) set t2 $var2(tbldb) upvar #0 $t2 T2 set varname [CATDialog catmatch {} {} {} none] upvar #0 $varname var global $varname global $var(catdb) set db $var(catdb) upvar #0 $db T ARStatus $varname [msgcat::mc {Loading Catalog}] CATOff $varname CATSet $varname {} "$var1(catalog) and $var2(catalog)" \ "$var1(title) and $var2(title)" set var(name) {} set var(x) {} set var(y) {} set var(width) {} set var(height) {} # required set T(Header) $T1(Header) set T(Dashes) $T1(Dashes) set T(Ndshs) $T1(Ndshs) set T(HLines) $T1(HLines) for {set ii 1} {$ii<=$T1(HLines)} {incr ii} { set T(H_$ii) $T1(H_$ii) } set T(Nrows) 0 starbase_colmap T # optional if {[info exists ${t1}(DataType)]} { set T(DataType) $T1(DataType) } if {[info exists ${t1}(Id)]} { set T(Id) $T1(Id) } if {[info exists ${t1}(ArraySize)]} { set T(ArraySize) $T1(ArraySize) } if {[info exists ${t1}(Width)]} { set T(Width) $T1(Width) } if {[info exists ${t1}(Precision)]} { set T(Precision) $T1(Precision) } if {[info exists ${t1}(Unit)]} { set T(Unit) $T1(Unit) } if {[info exists ${t1}(Ref)]} { set T(Ref) $T1(Ref) } if {[info exists ${t1}(Ucd)]} { set T(Ucd) $T1(Ucd) } if {[info exists ${t1}(Description)]} { set T(Description) $T1(Description) } set ll 0 foreach {r1 r2} [join $rr] { incr ll for {set ii 1} {$ii<=$T1(Ncols)} {incr ii} { set T($ll,$ii) $T1($r1,$ii) } incr T(Nrows) } ARDone $varname CATLoadDone $varname } proc CATMatchAnd2only {varname1 varname2 rrname} { upvar $rrname rr upvar #0 $varname1 var1 global $varname1 global $var1(tbldb) set t1 $var1(tbldb) upvar #0 $t1 T1 upvar #0 $varname2 var2 global $varname2 global $var2(tbldb) set t2 $var2(tbldb) upvar #0 $t2 T2 set varname [CATDialog catmatch {} {} {} none] upvar #0 $varname var global $varname global $var(catdb) set db $var(catdb) upvar #0 $db T ARStatus $varname [msgcat::mc {Loading Catalog}] CATOff $varname CATSet $varname {} "$var1(catalog) and $var2(catalog)" \ "$var1(title) and $var2(title)" set var(name) {} set var(x) {} set var(y) {} set var(width) {} set var(height) {} # required set T(Header) $T2(Header) set T(Dashes) $T2(Dashes) set T(Ndshs) $T2(Ndshs) set T(HLines) $T2(HLines) for {set ii 1} {$ii<=$T2(HLines)} {incr ii} { set T(H_$ii) $T2(H_$ii) } set T(Nrows) 0 starbase_colmap T # optional if {[info exists ${t2}(DataType)]} { set T(DataType) $T2(DataType) } if {[info exists ${t2}(Id)]} { set T(Id) $T2(Id) } if {[info exists ${t2}(ArraySize)]} { set T(ArraySize) $T2(ArraySize) } if {[info exists ${t2}(Width)]} { set T(Width) $T2(Width) } if {[info exists ${t2}(Precision)]} { set T(Precision) $T2(Precision) } if {[info exists ${t2}(Unit)]} { set T(Unit) $T2(Unit) } if {[info exists ${t2}(Ref)]} { set T(Ref) $T2(Ref) } if {[info exists ${t2}(Ucd)]} { set T(Ucd) $T2(Ucd) } if {[info exists ${t2}(Description)]} { set T(Description) $T2(Description) } set ll 0 foreach {r1 r2} [join $rr] { incr ll for {set ii 1} {$ii<=$T2(Ncols)} {incr ii} { set T($ll,$ii) $T2($r2,$ii) } incr T(Nrows) } ARDone $varname CATLoadDone $varname } proc CATMatchNot {varname1 varname2 rrname} { upvar $rrname rr upvar #0 $varname1 var1 global $varname1 global $var1(tbldb) set t1 $var1(tbldb) upvar #0 $t1 T1 upvar #0 $varname2 var2 global $varname2 global $var2(tbldb) set t2 $var2(tbldb) upvar #0 $t2 T2 set varname [CATDialog catmatch {} {} {} none] upvar #0 $varname var global $varname global $var(catdb) set db $var(catdb) upvar #0 $db T ARStatus $varname [msgcat::mc {Loading Catalog}] CATOff $varname CATSet $varname {} "$var1(catalog) and not $var2(catalog)" \ "$var1(title) and not $var2(title)" set var(name) {} set var(x) {} set var(y) {} set var(width) {} set var(height) {} # required set T(Header) $T1(Header) set T(Dashes) $T1(Dashes) set T(Ndshs) $T1(Ndshs) set T(HLines) $T1(HLines) for {set ii 1} {$ii<=$T1(HLines)} {incr ii} { set T(H_$ii) $T1(H_$ii) } set T(Nrows) 0 starbase_colmap T # optional if {[info exists ${t1}(DataType)]} { set T(DataType) $T1(DataType) } if {[info exists ${t1}(Id)]} { set T(Id) $T1(Id) } if {[info exists ${t1}(ArraySize)]} { set T(ArraySize) $T1(ArraySize) } if {[info exists ${t1}(Width)]} { set T(Width) $T1(Width) } if {[info exists ${t1}(Precision)]} { set T(Precision) $T1(Precision) } if {[info exists ${t1}(Unit)]} { set T(Unit) $T1(Unit) } if {[info exists ${t1}(Ref)]} { set T(Ref) $T1(Ref) } if {[info exists ${t1}(Ucd)]} { set T(Ucd) $T1(Ucd) } if {[info exists ${t1}(Description)]} { set T(Description) $T1(Description) } set ss {} foreach {r1 r2} [join $rr] { lappend ss $r1 } set ss [lsort -integer -unique $ss] set ll 0 for {set jj 1} {$jj<=$T1(Nrows)} {incr jj} { if {[lsearch -integer -sorted $ss $jj] == -1} { incr ll for {set ii 1} {$ii<=$T1(Ncols)} {incr ii} { set T($ll,$ii) $T1($jj,$ii) } incr T(Nrows) } } ARDone $varname CATLoadDone $varname } saods9/ds9/library/catned.tcl000644 000765 000000 00000007444 12737750066 016517 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CATNED {varname} { upvar #0 $varname var global $varname global pcat global debug if {$debug(tcl,cat)} { puts stderr "CATNED $varname" } # parser if {$pcat(vot)} { set var(proc,parser) VOTParse } else { set var(proc,reader) CATNEDReader } # query switch $var(skyformat) { degrees { set xx $var(x) set yy $var(y) } sexagesimal { switch -- $var(sky) { fk4 - fk5 - icrs {set xx [h2d [Sex2H $var(x)]]} galactic - ecliptic {set xx [Sex2D $var(x)]} } set yy [Sex2D $var(y)] } } switch -- $var(rformat) { degrees { set ww $var(width) set hh $var(height) } arcmin { set ww [expr $var(width)/60.] set hh [expr $var(height)/60.] } arcsec { set ww [expr $var(width)/60./60.] set hh [expr $var(height)/60./60.] } } set rr [expr sqrt($ww*$ww+$hh*$hh)/2.] if {$pcat(vot)} { set out "xml_main" } else { set out "ascii_tab" } switch -- $var(sky) { fk4 { set sky "Equatorial" set eq "B1950.0" } fk5 - icrs { set sky "Equatorial" set eq "J2000.0" } galactic { set sky "Galactic" set eq {} } ecliptic { set sky "Ecliptic" set eq {} } } switch -- $var(psky) { fk4 { set psky "Equatorial" set peq "B1950.0" } fk5 - icrs { set psky "Equatorial" set peq "J2000.0" } galactic { set psky "Galactic" set peq {} } ecliptic { set psky "Ecliptic" set peq {} } } # url set var(query) {} set query [http::formatQuery search_type "Near Position Search" RA $xx DEC $yy SR $rr of $out in_csys $sky in_equinox $eq out_csys $psky out_equinox $peq] set var(url) "http://ned.ipac.caltech.edu/cgi-bin/nph-objsearch?$query" if {$pcat(vot)} { CATLoad $varname } else { CATLoadIncr $varname } } proc CATNEDReader {t sock token} { upvar #0 $t T global $t set result 0 if { ![info exists ${t}(state)] } { set T(state) 0 } switch -- $T(state) { 0 { # init db fconfigure $sock -blocking 1 set T(Nrows) 0 set T(Ncols) 0 set T(Header) {} set T(HLines) 0 set T(state) 1 } 1 { # process header if {[gets $sock line] == -1} { set T(Nrows) 0 set T(Ncols) 0 set T(Header) {} set T(HLines) 0 set T(state) -1 return $result } set result [string length "$line"] # start of data? if {[string range $line 0 2] == {No.}} { # cols incr ${t}(HLines) set n $T(HLines) set T(H_$n) $line set T(Header) [split $T(H_$n) "\t"] # dashes set T(Dashes) [regsub -all {[A-Za-z0-9]} $T(H_$n) {-}] set T(Ndshs) [llength $T(Dashes)] starbase_colmap $t set T(state) 2 } } 2 { # process table if {[gets $sock line] == -1} { set T(state) 0 } else { set result [string length "$line"] set line [string trim $line] if {$line != {}} { # ok, save it incr ${t}(Nrows) set r $T(Nrows) set NCols [starbase_ncols $t] set c 1 foreach val [split $line "\t"] { set T($r,$c) $val incr c } for {} {$c <= $NCols} {incr c} { set T($r,$c) {} } } } } } return $result } proc CATNEDAck {varname} { upvar #0 $varname var global $varname set msg {Acknowledgments for NED This research has made use of the NASA/IPAC Extragalactic Database (NED) which is operated by the Jet Propulsion Laboratory, California Institute of Technology, under contract with the National Aeronautics and Space Administration. } SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \ 80 10 insert top $msg } saods9/ds9/library/catopt.tcl000644 000765 000000 00000002316 12705445646 016544 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # sample CATKeyCB # Allow the user to define callbacks to be called when # the user presses a key with selected regions while in edit mode. if {0} { # add to CATReg # callback=key CATKeyCB {${varname}.\${ii}.a} proc CATKeyCB {tag id} { global icat global debug if {$debug(tcl,cat)} { puts stderr "CATKeyCB $tag $id" } set t [split $tag .] set varname [lindex $t 0] set row [lindex $t 1] set key [lindex $t 2] upvar #0 $varname var global $varname global $var(tbldb) if {![info exists ${varname}(top)]} { return } if {$icat(key) == $key} { switch -- $key { a { puts stderr "Key: $key $row" return # column name 'TooManySrcs' set tcol [starbase_colnum $var(tbldb) {TooManySrcs}] # toggle between '0' and '1' set tt [starbase_get $var(tbldb) $row $tcol] if {$tt == {1}} { starbase_set $var(tbldb) $row $tcol {0} } else { starbase_set $var(tbldb) $row $tcol {1} } lappend icat(key,update) [list $varname $row] } } } } } saods9/ds9/library/catplot.tcl000644 000765 000000 00000013364 12705445646 016725 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CATPlot {varname} { upvar #0 $varname var global $varname # do we have a db? if {![CATValidDB $var(tbldb)]} { return } if {$var(plot,x) == {}} { set var(plot,x) "\$$var(colx)" } if {$var(plot,y) == {}} { set var(plot,y) "\$$var(coly)" } if {[CATPlotDialog $varname]} { if {$var(plot,x) != {} && $var(plot,y) != {}} { CATPlotGenerate $varname } } } proc CATPlotGenerate {varname} { upvar #0 $varname var global $varname if {$var(plot,xerr) == {} && $var(plot,yerr) == {}} { set dim xy } elseif {$var(plot,xerr) != {} && $var(plot,yerr) == {}} { set dim xyex } elseif {$var(plot,xerr) == {} && $var(plot,yerr) != {}} { set dim xyey } else { set dim xyexey } global $var(tbldb) set nrows [starbase_nrows $var(tbldb)] set cols [starbase_columns $var(tbldb)] set rr {} for {set ii 1} {$ii <= $nrows} {incr ii} { foreach col $cols { set val [starbase_get $var(tbldb) $ii \ [starbase_colnum $var(tbldb) $col]] # here's a tough one-- what to do if the col is blank # for now, just set it to '0' if {[string trim "$val"] == {}} { set val 0 } eval "set \{$col\} \{$val\}" } switch $dim { xy {append rr [subst "$var(plot,x), $var(plot,y)\n"]} xyex {append rr [subst "$var(plot,x), $var(plot,y), $var(plot,xerr)\n"]} xyey {append rr [subst "$var(plot,x), $var(plot,y), $var(plot,yerr)\n"]} xyexey {append rr [subst "$var(plot,x), $var(plot,y), $var(plot,xerr), $var(plot,yerr)\n"]} } } set xtitle [regsub -all {\$*} $var(plot,x) {}] set ytitle [regsub -all {\$*} $var(plot,y) {}] set vvarname plot${varname} upvar #0 $vvarname vvar global $vvarname set ping [PlotPing $vvarname] if {!$ping} { PlotScatterDialog $vvarname $var(title) {} {} {} set vvar(callback) "CATSelectRows $varname plot" set var(plot) 1 set var(plot,var) $vvarname } PlotClearData $vvarname PlotDataSet $vvarname $dim $rr PlotTitle $vvarname $var(title) $xtitle $ytitle $vvar(proc,updategraph) $vvarname PlotStats $vvarname PlotList $vvarname } proc CATPlotDialog {varname} { upvar #0 $varname var global $varname global ds9 global ed2 set w ".${varname}plot" set mb ".${varname}plotmb" set ed2(ok) 0 set ed2(x) $var(plot,x) set ed2(xerr) $var(plot,xerr) set ed2(y) $var(plot,y) set ed2(yerr) $var(plot,yerr) DialogCreate $w [msgcat::mc {Plot}] ed2(ok) $w configure -menu $mb menu $mb # file $mb add cascade -label [msgcat::mc {File}] -menu $mb.file menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] -command {set ed2(ok) 1} $mb.file add command -label [msgcat::mc {Cancel}] -command {set ed2(ok) 0} # edit $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit EditMenu $mb $varname # param set f [ttk::frame $w.param] ttk::label $f.taxis -text {Axis} ttk::label $f.terr -text {Error} ttk::label $f.tx -text {X} ttk::entry $f.x -textvariable ed2(x) -width 21 ttk::button $f.bx -text [msgcat::mc {Edit}] \ -command "CATEditDialog ed2 x $var(catdb)" ttk::entry $f.xerr -textvariable ed2(xerr) -width 21 ttk::button $f.bxerr -text [msgcat::mc {Edit}] \ -command "CATEditDialog ed2 xerr $var(catdb)" ttk::menubutton $f.mx -text {Cols} -menu $f.mx.menu ttk::menubutton $f.mxerr -text {Cols} -menu $f.mxerr.menu CATPlotDialogColsMenu $varname $f.mx x CATPlotDialogColsMenu $varname $f.mxerr xerr ttk::label $f.ty -text {Y} ttk::entry $f.y -textvariable ed2(y) -width 21 ttk::button $f.by -text [msgcat::mc {Edit}] \ -command "CATEditDialog ed2 y $var(catdb)" ttk::entry $f.yerr -textvariable ed2(yerr) -width 21 ttk::button $f.byerr -text [msgcat::mc {Edit}] \ -command "CATEditDialog ed2 yerr $var(catdb)" ttk::menubutton $f.my -text {Cols} -menu $f.my.menu ttk::menubutton $f.myerr -text {Cols} -menu $f.myerr.menu CATPlotDialogColsMenu $varname $f.my y CATPlotDialogColsMenu $varname $f.myerr yerr grid x $f.taxis x $f.terr -padx 2 -pady 2 -sticky ew grid $f.tx $f.x $f.bx $f.xerr $f.bxerr -padx 2 -pady 2 -sticky ew grid x $f.mx x $f.mxerr -padx 2 -pady 2 -sticky ew grid $f.ty $f.y $f.by $f.yerr $f.byerr -padx 2 -pady 2 -sticky ew grid x $f.my x $f.myerr -padx 2 -pady 2 -sticky ew # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed2(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed2(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed2(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.param -side top -fill both -expand true pack $w.buttons $w.sep -side bottom -fill x DialogCenter $w DialogWait $w ed2(ok) $w.buttons.ok if {$ed2(ok)} { set var(plot,x) $ed2(x) set var(plot,xerr) $ed2(xerr) set var(plot,y) $ed2(y) set var(plot,yerr) $ed2(yerr) } DialogDismiss $w destroy $mb set rr $ed2(ok) unset ed2 return $rr } proc CATPlotDialogColsMenu {varname f ww} { upvar #0 $varname var global $varname global $var(catdb) global ed2 global ds9 set m $f.menu menu $m -tearoff 0 if {[CATValidDB $var(catdb)]} { set cnt -1 foreach col [starbase_columns $var(catdb)] { $m add command -label $col -command "set ed2($ww) \\$$col" # wrap if needed incr cnt if {$cnt>=$ds9(menu,size,wrap)} { set cnt 0 $m entryconfig $col -columnbreak 1 } } } } saods9/ds9/library/catreg.tcl000644 000765 000000 00000024243 12705445646 016522 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # catreg -- convert catalog table into region string proc CATReg {varname row interactive resultname} { upvar $resultname result upvar #0 $varname var global $varname global $var(tbldb) global $var(symdb) # init result set result {} # How to process each field of a filter # ------------------------------------- # condition: subst/expr # shape: constant # color: constant # width: constant # dash: constant # font: constant # fontsize: constant # fontweight: constant # fontslant: constant # text: subst # size1: expr # size2: expr # angle: expr # valid cols? if {$var(colx) == {} || $var(coly) == {}} { return } set colx [starbase_colnum $var(tbldb) $var(colx)] set coly [starbase_colnum $var(tbldb) $var(coly)] # do we have formats for colx and coly? if {[catch {starbase_hdrget $var(tbldb) UFMT} ff]} { set ff {} global errorInfo set errorInfo {} } set xformat [lindex $ff 0] set yformat [lindex $ff 1] # else, do we have T(Units), i.e. votable set db $var(tbldb) upvar #0 $db T if {[info exists T(Unit)]} { set xformat [string trim [lindex $T(Unit) [expr $colx-1]] {"}] set yformat [string trim [lindex $T(Unit) [expr $coly-1]] {"}] } # process prologue append result "# Region file format: DS9 version 4.0\n" # for speed... # tbldb set nrows [starbase_nrows $var(tbldb)] set cols [starbase_columns $var(tbldb)] # system switch $var(psystem) { image - physical - detector - amplifier {set sys $var(psystem)} default {set sys "$var(psystem); $var(psky)"} } # symdb set snrows [starbase_nrows $var(symdb)] set sncond [starbase_colnum $var(symdb) condition] set snshape [starbase_colnum $var(symdb) shape] set sncolor [starbase_colnum $var(symdb) color] set snwidth [starbase_colnum $var(symdb) width] set sndash [starbase_colnum $var(symdb) dash] set snfont [starbase_colnum $var(symdb) font] set snfontsize [starbase_colnum $var(symdb) fontsize] set snfontweight [starbase_colnum $var(symdb) fontweight] set snfontslant [starbase_colnum $var(symdb) fontslant] set sntext [starbase_colnum $var(symdb) text] set snsize [starbase_colnum $var(symdb) size] set snsize2 [starbase_colnum $var(symdb) size2] set snunits [starbase_colnum $var(symdb) units] set snangle [starbase_colnum $var(symdb) angle] # for each row in the catalog table ... if {[string is integer -strict $row]} { set start $row set end $row } else { set start 1 set end $nrows } # look for need to eval colnames (only used for conditionals and text set doEval 0 for {set jj 1} {$jj <= $snrows} {incr jj} { set cond [starbase_get $var(symdb) $jj $sncond] set text [starbase_get $var(symdb) $jj $sntext] set sz [starbase_get $var(symdb) $jj $snsize] set sz2 [starbase_get $var(symdb) $jj $snsize2] set angle [starbase_get $var(symdb) $jj $snangle] if {$cond!={} || $text!={} || $sz!={} || $sz2!={} || $angle!={}} { set doEval 1 } } for {set ii $start} {$ii <= $end} {incr ii} { if {$doEval} { # define each colunm variable foreach col $cols { set val [starbase_get $var(tbldb) $ii \ [starbase_colnum $var(tbldb) $col]] # here's a tough one-- what to do if the col is blank # for now, just set it to '0' if {[string trim "$val"] == {}} { set val 0 } eval "set \{$col\} \{$val\}" } } # look through each filter for {set jj 1} {$jj <= $snrows} {incr jj} { # eval condition set cond [starbase_get $var(symdb) $jj $sncond] if {$cond != {}} { set found 0 # subst any column vars if {[catch {subst $cond} cc]} { Error "Unable to evaluate condition $cc" return } # evaluate filter if {[catch {expr $cc} found]} { Error "Unable to evaluate condition $cc" return } } else { set found 1 } # if not true, goto the next filter if {!$found} { continue } # shape set shape [starbase_get $var(symdb) $jj $snshape] if {$shape == {}} { set shape circle } # xx set xx [starbase_get $var(tbldb) $ii $colx] switch $xformat { {h:m:s} - {d:m:s} {set xx [uformat $xformat d $xx]} } # yy set yy [starbase_get $var(tbldb) $ii $coly] if {$yformat == {d:m:s}} { set yy [uformat $yformat d $yy] } # size/angle set szcol {} set sz2col {} set angcol {} set units [starbase_get $var(symdb) $jj $snunits] switch -- $units { image {set unitval i} physical {set unitval p} degrees {set unitval d} arcmin {set unitval {'}} arcsec {set unitval {"}} default {set unitval p} } switch -- $shape { text - point - {circle point} - {box point} - {diamond point} - {cross point} - {x point} - {arrow point} - {boxcircle point} {set size {}} circle { set sz [starbase_get $var(symdb) $jj $snsize] set szcolnm [string range $sz 1 end] if {[lsearch -exact $cols $szcolnm] != -1} { set szcol [starbase_colnum $var(tbldb) $szcolnm] } if {$sz != {}} { if {[catch {expr $sz} ss]} { Error "Unable to evaluate size $sz" return } else { set sz $ss } } else { set sz 5 } set size "${sz}${unitval}" } vector { set sz [starbase_get $var(symdb) $jj $snsize] set szcolnm [string range $sz 1 end] if {[lsearch -exact $cols $szcolnm] != -1} { set szcol [starbase_colnum $var(tbldb) $szcolnm] } if {$sz != {}} { if {[catch {expr $sz} ss]} { Error "Unable to evaluate size $sz" return } else { set sz $ss } } else { set sz 5 } set angle [starbase_get $var(symdb) $jj $snangle] set angcolnm [string range $angle 1 end] if {[lsearch -exact $cols $angcolnm] != -1} { set angcol [starbase_colnum $var(tbldb) $angcolnm] } if {$angle != {}} { if {[catch {expr $angle} aa]} { Error "Unable to evaluate angle $angle" return } else { set angle $aa } } else { set angle 0 } set size "${sz}${unitval} ${angle}" } ellipse - box { # size set sz [starbase_get $var(symdb) $jj $snsize] set szcolnm [string range $sz 1 end] if {[lsearch -exact $cols $szcolnm] != -1} { set szcol [starbase_colnum $var(tbldb) $szcolnm] } if {$sz != {}} { if {[catch {expr $sz} ss]} { Error "Unable to evaluate size $sz" return } else { set sz $ss } } else { set sz 5 } # size2 set sz2 [starbase_get $var(symdb) $jj $snsize2] set sz2colnm [string range $sz2 1 end] if {[lsearch -exact $cols $sz2colnm] != -1} { set sz2col [starbase_colnum $var(tbldb) $sz2colnm] } if {$sz2 != {}} { if {[catch {expr $sz2} ss]} { Error "Unable to evaluate size $sz2" return } else { set sz2 $ss } } else { set sz2 5 } # angle set angle [starbase_get $var(symdb) $jj $snangle] set angcolnm [string range $angle 1 end] if {[lsearch -exact $cols $angcolnm] != -1} { set angcol [starbase_colnum $var(tbldb) $angcolnm] } if {$angle != {}} { if {[catch {expr $angle} aa]} { Error "Unable to evaluate angle $angle" return } else { set angle $aa } } else { set angle 0 } # put it all together set size "${sz}${unitval} ${sz2}${unitval} ${angle}" } } # color set color [starbase_get $var(symdb) $jj $sncolor] if {$color == {}} { set color green } # width set width [starbase_get $var(symdb) $jj $snwidth] if {$width == {}} { set width 1 } # dash set dash [starbase_get $var(symdb) $jj $sndash] if {$dash == {}} { set dash 0 } #font set font [starbase_get $var(symdb) $jj $snfont] if {$font == {}} { set font helvetica } set fontsize [starbase_get $var(symdb) $jj $snfontsize] if {$fontsize == {}} { set fontsize 10 } set fontweight [starbase_get $var(symdb) $jj $snfontweight] if {$fontweight == {}} { set fontweight normal } set fontslant [starbase_get $var(symdb) $jj $snfontslant] if {$fontslant == {}} { set fontslant roman } # text set text [starbase_get $var(symdb) $jj $sntext] if {$text != {}} { if {[catch {subst $text} tt]} { Error "Unable to evaluate text $text" return } else { set text $tt } } if {$shape == {text} && $text == {}} { set text "$ii" } # final substitution and append result # init result for substitutions if {$interactive} { if {$var(edit)} { set template "\${sys};\${shape}(\${xx} \${yy} \${size}) # color=\${color} width=\${width} dash=\${dash} font=\{${font} ${fontsize} ${fontweight} ${fontslant}\} text=\{\${text}\} tag={${varname}} tag={${varname}.\${ii}} select=1 edit=1 move=1 rotate=1 delete=1 highlite=0 callback=select CATHighliteCB {${varname}.\${ii}} callback=unselect CATUnhighliteCB {${varname}.\${ii}} callback=edit CATEditCB {${varname}.\${ii}.\${szcol}.\${sz2col}.\${units}.\${angcol}} callback=move CATMoveCB {${varname}.\${ii}} callback=rotate CATRotateCB {${varname}.\${ii}.\${angcol}} callback=delete CATDeleteCB {${varname}.\${ii}}\n" } else { set template "\${sys};\${shape}(\${xx} \${yy} \${size}) # color=\${color} width=\${width} dash=\${dash} font=\{${font} ${fontsize} ${fontweight} ${fontslant}\} text=\{\${text}\} tag={${varname}} tag={${varname}.\${ii}} select=0 edit=0 move=0 rotate=0 delete=1 highlite=1 callback=delete CATDeleteCB {${varname}.\${ii}} callback=highlite CATHighliteCB {${varname}.\${ii}} callback=unhighlite CATUnhighliteCB {${varname}.\${ii}}\n" } } else { set template "\${sys};\${shape}(\${xx} \${yy} \${size}) # color=\${color} width=\${width} dash=\${dash} text=\{\${text}\} tag=$varname\n" } append result [subst $template] # ok, we are done break } } } saods9/ds9/library/catsdss.tcl000644 000765 000000 00000007564 12705445646 016730 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CATSDSS {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,cat)} { puts stderr "CATSDSS $varname" } set var(proc,reader) CATSDSSReader # coord (degrees) switch $var(skyformat) { degrees { set xx $var(x) set yy $var(y) } sexagesimal { set xx [h2d [Sex2H $var(x)]] set yy [Sex2D $var(y)] } } # size (arcmin) switch $var(rformat) { degrees { set ww [expr $var(width)*60.] set hh [expr $var(height)*60.] } arcmin { set ww $var(width) set hh $var(height) } arcsec { set ww [expr $var(width)/60.] set hh [expr $var(height)/60.] } } # now to radius set rr [expr sqrt($ww*$ww+$hh*$hh)/2.] set query {} append query "ra=$xx&" append query "dec=$yy&" append query "radius=$rr&" # append query "min_ra=[expr $xx-$ww/2.]&max_ra=[expr $xx+$ww/2.]&" # append query "min_dec=[expr $yy-$hh/2.]&max_dec=[expr $yy+$hh/2.]&" # output if {$var(allrows)} { append query "entries=all&" } else { append query "topnum=$var(max)&" } append query "format=csv&" set var(url) "http://cas.sdss.org/astrodr${var(catalog)}/en/tools/search/x_radial.asp?$query" set var(query) {} CATLoadIncr $varname } proc CATSDSSReader {t sock token} { upvar #0 $t T global $t set result 0 if { ![info exists ${t}(state)] } { set T(state) 0 } switch -- $T(state) { 0 { # init db fconfigure $sock -blocking 1 set T(Nrows) 0 set T(Ncols) 0 set T(Header) {} set T(HLines) 0 set T(state) 1 } 1 { # process header if {[gets $sock line] == -1} { return } if {[string equal $line "No objects have been found"]} { return } # cols incr ${t}(HLines) set n $T(HLines) set result [string length "$line"] set T(H_$n) $line set T(Header) [split $T(H_$n) ","] # dashes set T(Dashes) [regsub -all {[A-Za-z0-9]} $T(H_$n) {-}] set T(Ndshs) [llength $T(Dashes)] starbase_colmap $t set T(state) 2 } 2 { # process table if {[gets $sock line] == -1} { set T(state) 0 } else { set result [string length "$line"] set line [string trim $line] if {$line != {}} { # ok, save it incr ${t}(Nrows) set r $T(Nrows) set NCols [starbase_ncols $t] set c 1 foreach val [split $line ","] { set T($r,$c) $val incr c } for {} {$c <= $NCols} {incr c} { set T($r,$c) {} } } } } } return $result } proc CATSDSSAck {varname} { upvar #0 $varname var global $varname set msg {Acknowledgments for SDSS Funding for the Sloan Digital Sky Survey (SDSS) has been provided by the Alfred P. Sloan Foundation, the Participating Institutions, the National Aeronautics and Space Administration, the National Science Foundation, the U.S. Department of Energy, the Japanese Monbukagakusho, and the Max Planck Society. The SDSS Web site is http://www.sdss.org/. The SDSS is managed by the Astrophysical Research Consortium (ARC) for the Participating Institutions. The Participating Institutions are The University of Chicago, Fermilab, the Institute for Advanced Study, the Japan Participation Group, The Johns Hopkins University, the Korean Scientist Group, Los Alamos National Laboratory, the Max-Planck-Institute for Astronomy (MPIA), the Max-Planck-Institute for Astrophysics (MPA), New Mexico State University, University of Pittsburgh, University of Portsmouth, Princeton University, the United States Naval Observatory, and the University of Washington. } SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \ 80 10 insert top $msg } saods9/ds9/library/catsimbad.tcl000644 000765 000000 00000011036 12737750066 017200 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CATSIMBAD {varname} { upvar #0 $varname var global $varname global pcat global debug if {$debug(tcl,cat)} { puts stderr "CATSIMBAD $varname" } # parser if {$pcat(vot)} { set var(proc,parser) CATSIMBADParse } else { set var(proc,reader) CATSIMBADReader } # query set qq {} if {$pcat(vot)} { append qq "output script=off\n" append qq "output console=off\n" } if {$pcat(vot)} { append qq "votable v1 " } else { append qq "format object f1 " } switch -- $var(psky) { fk4 {set psky "FK4;1950;1950"} fk5 {set psky "FK5;2000;2000"} icrs {set psky "ICRS"} galactic {set psky "GAL"} ecliptic {set psky "ECL"} } if {$pcat(vot)} { append qq "{ coo(d;$psky), main_id, otype(S), pmra, pmdec, plx, z_value, flux(B), flux(V), sp }\n" append qq "votable open v1\n" } else { append qq {"%COO(d;A)\t%COO(d;D)\t%IDLIST(1)\t%OTYPE(S)\t%PM(A)\t%PM(D)\t%PLX(V)\t%RV(Z)\t%FLUXLIST(B;F)\t%FLUXLIST(V;F)\t%SP(S)\n"} append qq "\n" } switch $var(skyformat) { degrees { set xx $var(x) set yy $var(y) } sexagesimal { switch -- $var(sky) { fk4 - fk5 - icrs {set xx [h2d [Sex2H $var(x)]]} galactic - ecliptic {set xx [Sex2D $var(x)]} } set yy [Sex2D $var(y)] } } append qq "query coo $xx " if {$yy>0} { append qq "+$yy" } else { append qq "$yy" } set ww $var(width) set hh $var(height) set rr [expr sqrt($ww*$ww+$hh*$hh)/2.] append qq " radius=$rr" switch -- $var(rformat) { degrees {append qq "d"} arcmin {append qq "m"} arcsec {append qq "s"} } switch -- $var(sky) { fk4 {append qq " frame=FK4 epoch=B1950 equinox=1950"} fk5 {append qq " frame=FK5 epoch=J2000 equinox=2000"} icrs {append qq " frame=ICRS"} galactic {append qq " frame=GAL"} ecliptic {append qq " frame=ECL"} } if {$pcat(vot)} { append qq "\nvotable close\n" } else { append qq "\n" } # url set var(url) "http://simbad.u-strasbg.fr/simbad/sim-script" set var(query) [http::formatQuery script $qq] if {$pcat(vot)} { CATLoad $varname } else { CATLoadIncr $varname } } proc CATSIMBADParse {t token} { upvar #0 $t T global $t global debug # we can't trust simbad to turn off any error messages variable $token upvar 0 $token state set id [string first { 1 && $var(row) <= $nr} { starbase_rowdel $var(symdb) $var(row) set var(row) {} } } CATSymClear $varname CATSymTable $varname } proc CATSymSave {varname} { upvar #0 $varname var global $varname global $var(symdb) set fn [SaveFileDialog catsymfbox] if {$fn != {}} { starbase_write $var(symdb) $fn } } proc CATSymLoad {varname} { upvar #0 $varname var global $varname global $var(symdb) set fn [OpenFileDialog catsymfbox] if {$fn != {}} { if {[file exists $fn]} { if {[info exists $var(symdb)]} { unset $var(symdb) } starbase_read $var(symdb) $fn CATSymUpdate $varname } else { Error "[msgcat::mc {Unable to open file}] $fn" return } } } proc CATSymClear {varname} { upvar #0 $varname var global $varname $var(tbl) selection clear all set var(row) {} set var(condition) {} set var(shape) {} set var(color) {} set var(width) {} set var(dash) {} set var(font) {} set var(font,size) {} set var(font,weight) {} set var(font,slant) {} set var(text) {} set var(size) {} set var(size2) {} set var(units) {} set var(angle) {} } # Support proc CATSymDBInit {varname} { upvar #0 $varname var global $varname global $var(symdb) global pcat if {[info exists $var(symdb)]} { unset $var(symdb) } starbase_new $var(symdb) condition shape color width dash \ font fontsize fontweight fontslant text size size2 units angle starbase_rowins $var(symdb) 1 starbase_set $var(symdb) 1 \ [starbase_colnum $var(symdb) shape] $pcat(sym,shape) starbase_set $var(symdb) 1 \ [starbase_colnum $var(symdb) color] $pcat(sym,color) starbase_set $var(symdb) 1 \ [starbase_colnum $var(symdb) width] $pcat(sym,width) starbase_set $var(symdb) 1 \ [starbase_colnum $var(symdb) dash] $pcat(sym,dash) starbase_set $var(symdb) 1 \ [starbase_colnum $var(symdb) font] $pcat(sym,font) starbase_set $var(symdb) 1 \ [starbase_colnum $var(symdb) fontsize] $pcat(sym,font,size) starbase_set $var(symdb) 1 \ [starbase_colnum $var(symdb) fontweight] $pcat(sym,font,weight) starbase_set $var(symdb) 1 \ [starbase_colnum $var(symdb) fontslant] $pcat(sym,font,slant) starbase_set $var(symdb) 1 \ [starbase_colnum $var(symdb) units] $pcat(sym,units) } proc CATSymUpdate {varname} { upvar #0 $varname var global $varname CATGenerate $var(parent) } proc CATSymTable {varname} { upvar #0 $varname var global $varname global $var(symdb) global icatsym set nc [starbase_ncols $var(symdb)] if { $nc > $icatsym(mincols)} { $var(tbl) configure -cols $nc } else { $var(tbl) configure -cols $icatsym(mincols) } # add header row set nr [expr [starbase_nrows $var(symdb)]+1] if {$nr > $icatsym(minrows)} { $var(tbl) configure -rows $nr } else { $var(tbl) configure -rows $icatsym(minrows) } } proc CATSymSelectCB {varname} { upvar #0 $varname var global $varname global $var(symdb) set ss "[$var(tbl) curselection]" set var(row) [string trim [lindex [split $ss ,] 0]] if {$var(row) != {}} { if {$var(row) <= [starbase_nrows $var(symdb)]} { set var(condition) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) condition]] set var(shape) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) shape]] set var(color) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) color]] set var(width) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) width]] set var(dash) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) dash]] set var(font) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) font]] set var(font,size) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) fontsize]] set var(font,weight) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) fontweight]] set var(font,slant) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) fontslant]] set var(text) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) text]] set var(size) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) size]] set var(size2) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) size2]] set var(units) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) units]] set var(angle) [starbase_get $var(symdb) $var(row) \ [starbase_colnum $var(symdb) angle]] return } } CATSymClear $varname } saods9/ds9/library/catvot.tcl000644 000765 000000 00000002542 12737750714 016553 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # SAMP proc CATVOTURL {url catalog title} { if {[string length $url] == 0} { return } ParseURL $url r switch -- $r(scheme) { ftp {CATVOTFTP $r(authority) $r(path)} file {CATVOTFile $r(path)} http - default {CATVOTHTTP $url $catalog $title} } } proc CATVOTFTP {host path} { global loadParam global ds9 global debug set ftp [ftp::Open $host "ftp" "-ds9@" -mode passive] if {$ftp > -1} { set fn [tmpnam [file extension $path]] set ftp::VERBOSE $debug(tcl,ftp) set "ftp::ftp${ftp}(Output)" FTPLog ftp::Type $ftp binary if {[ftp::Get $ftp $path $fn]} { CATVOTFile $fn } ftp::Close $ftp if {[file exists $fn]} { catch {file delete -force $fn} } } } proc CATVOTHTTP {url catalog title} { global icat CATDialog catvot {} $catalog $title none set varname [lindex $icat(cats) end] upvar #0 $varname var global $varname set ${varname}(query) {} set ${varname}(url) $url set ${varname}(proc,parser) VOTParse CATLoad $varname } proc CATVOTFile {fn} { global icat CATDialog catvot {} {} {} none if {$fn != {}} { CATLoadFn [lindex $icat(cats) end] $fn VOTRead } } saods9/ds9/library/centroid.tcl000644 000765 000000 00000005655 12705445646 017072 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CentroidDef {} { global centroid global icentroid set icentroid(top) .centroid set icentroid(mb) .centroidmb } proc CentroidDialog {} { global centroid global icentroid global ds9 # see if we already have a window visible if {[winfo exists $icentroid(top)]} { raise $icentroid(top) return } # create the window set w $icentroid(top) set mb $icentroid(mb) Toplevel $w $mb 6 [msgcat::mc {Centroid Parameters}] CentroidDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] \ -command CentroidApplyDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command CentroidDestroyDialog EditMenu $mb icentroid UpdateCentroidDialog # Param set f [ttk::frame $w.param] slider $f.islider 1 100 [msgcat::mc {Iteration}] \ marker(centroid,iteration) [list CentroidApplyDialog] slider $f.rslider 0 50 [msgcat::mc {Radius}] \ marker(centroid,radius) [list CentroidApplyDialog] grid $f.islider -padx 2 -pady 2 -sticky ew grid $f.rslider -padx 2 -pady 2 -sticky ew grid columnconfigure $f 0 -weight 1 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] \ -command CentroidApplyDialog ttk::button $f.close -text [msgcat::mc {Close}] \ -command CentroidDestroyDialog pack $f.apply $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true } proc CentroidDestroyDialog {} { global icentroid if {[winfo exists $icentroid(top)]} { destroy $icentroid(top) destroy $icentroid(mb) } } proc CentroidApplyDialog {} { global current global marker if {$current(frame) != {}} { $current(frame) marker centroid radius $marker(centroid,radius) $current(frame) marker centroid iteration $marker(centroid,iteration) } } proc UpdateCentroidDialog {} { global centroid global icentroid global current global marker global debug if {$debug(tcl,update)} { puts stderr "UpdateCentroidDialog" } if {[winfo exists $icentroid(top)]} { if {$current(frame) != {}} { set marker(centroid,radius) \ [$current(frame) get marker centroid radius] set marker(centroid,iteration) \ [$current(frame) get marker centroid iteration] } } } proc CentroidBackup {ch which} { puts $ch "$which marker centroid radius [$which get marker centroid radius]" puts $ch "$which marker centroid iteration [$which get marker centroid iteration]" } saods9/ds9/library/circle.tcl000644 000765 000000 00000004705 12705445646 016517 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CircleDialog {varname} { upvar #0 $varname var global $varname global pmarker # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # variables set rr [$var(frame) get wcs] set var(dcoord) [lindex $rr 0] set var(dformat) $pmarker(dformat) AdjustCoordSystem $varname dcoord # procs set var(proc,apply) CircleApply set var(proc,close) CircleClose set var(proc,coordCB) CircleCoordCB # base MarkerBaseCenterDialog $varname # analysis $var(mb) add cascade -label [msgcat::mc {Analysis}] -menu $var(mb).analysis menu $var(mb).analysis MarkerAnalysisStatsDialog $varname MarkerAnalysisHistogramDialog $varname MarkerAnalysisPlot3dDialog $varname # init CircleEditCB $varname # callbacks $var(frame) marker $var(id) callback edit CircleEditCB $varname set f $var(top).param # Radius ttk::label $f.tradius -text [msgcat::mc {Radius}] ttk::entry $f.radius -textvariable ${varname}(radius) -width 13 DistMenuButton $f.uradius $varname dcoord 1 dformat \ [list CircleEditCB $varname] DistMenuEnable $f.uradius.menu $varname dcoord 1 dformat grid $f.tradius $f.radius $f.uradius -padx 2 -pady 2 -sticky w } # actions proc CircleClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback edit CircleEditCB MarkerBaseCenterClose $varname } proc CircleApply {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) circle radius $var(radius) \ $var(dcoord) $var(dformat) MarkerBaseCenterApply $varname } # callbacks proc CircleCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "CircleCoordCB" } MarkerAnalysisStatsSystem $varname MarkerAnalysisPlot3dSystem $varname MarkerBaseCoordCB $varname MarkerBaseCenterMoveCB $varname } proc CircleEditCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "CircleEditCB" } set var(radius) [$var(frame) get marker $var(id) circle radius \ $var(dcoord) $var(dformat)] } saods9/ds9/library/colorbar.tcl000644 000765 000000 00000105740 12705445646 017062 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ColorbarDef {} { global colorbar global icolorbar global pcolorbar global ds9 set icolorbar(top) .clrbar set icolorbar(mb) .clrbarmb set icolorbar(vertical,width) 75 set icolorbar(horizontal,height) 45 set icolorbar(num) 1024 set icolorbar(start) $ds9(menu,start) set icolorbar(end) 0 set icolorbar(count) 0 set icolorbar(h5) 0 set icolorbar(h5,fn) [list h5_autumn.sao h5_bluered.sao h5_bone.sao h5_cool.sao h5_copper.sao h5_dkbluered.sao h5_gray.sao h5_green.sao h5_hot.sao h5_hsv.sao h5_jet.sao h5_pink.sao h5_spring.sao h5_summer.sao h5_winter.sao h5_yarg.sao h5_yellow.sao ] set icolorbar(matplotlib) 0 set icolorbar(matplotlib,fn) [list viridis.lut] set icolorbar(cubehelix) 0 set icolorbar(cubehelix,fn) [list ch05m151008.sao ch05m151010.sao ch05m151012.sao ch05m151410.sao ch05p151010.sao ch20m151010.sao - cubehelix0.sao cubehelix1.sao] set icolorbar(gist) 0 set icolorbar(gist,fn) [list gist_earth.sao gist_heat.sao gist_rainbow.sao gist_yarg.sao gist_gray.sao gist_ncar.sao gist_stern.sao] set icolorbar(topo) 0 set icolorbar(topo,fn) [list tpglarf.sao tpglhcf.sao tpglhwf.sao tpglpof.sao tpglarm.sao tpglhcm.sao tpglhwm.sao tpglpom.sao] set icolorbar(user) 0 set icolorbar(user,fn) {} set colorbar(lock) 0 set colorbar(size) 20 set colorbar(ticks) 11 set colorbar(map) grey set colorbar(invert) 0 set colorbar(numerics) 1 set colorbar(space) 0 set colorbar(orientation) horizontal set colorbar(tag) red set colorbar(font) helvetica set colorbar(font,size) 9 set colorbar(font,weight) normal set colorbar(font,slant) roman array set pcolorbar [array get colorbar] } proc CreateColorbar {} { global icolorbar global ds9 global canvas global view $ds9(canvas) create colorbar$ds9(visual)$ds9(depth) \ -colors 2048 \ -tag colorbar \ -anchor nw \ -helvetica $ds9(helvetica) \ -courier $ds9(courier) \ -times $ds9(times) $ds9(canvas) bind colorbar [list ColorbarMotion %x %y] $ds9(canvas) bind colorbar [list ColorbarEnter %x %y] $ds9(canvas) bind colorbar [list ColorbarLeave] $ds9(canvas) bind colorbar [list ColorbarButton1 %x %y] $ds9(canvas) bind colorbar [list ColorbarMotion1 %x %y] $ds9(canvas) bind colorbar [list ColorbarRelease1 %x %y] $ds9(canvas) bind colorbar [list ColorbarDouble1 %x %y] $ds9(canvas) bind colorbar \ [list ColorbarDoubleRelease1 %x %y] $ds9(canvas) bind colorbar [list ColorbarKey %K %A %x %y] $ds9(canvas) bind colorbar \ [list ColorbarKeyRelease %K %A %x %y] $ds9(canvas) create colorbarrgb$ds9(visual)$ds9(depth) \ -colors 2048 \ -tag colorbarrgb \ -anchor nw \ -helvetica $ds9(helvetica) \ -courier $ds9(courier) \ -times $ds9(times) $ds9(canvas) bind colorbarrgb [list ColorbarMotion %x %y] $ds9(canvas) bind colorbarrgb [list ColorbarEnter %x %y] $ds9(canvas) bind colorbarrgb [list ColorbarLeave] LayoutColorbar } proc InitColorbar {} { global colorbar global current set current(colorbar) colorbar $current(colorbar) map "{$colorbar(map)}" $current(colorbar) invert $colorbar(invert) } proc ResetColormap {} { global colorbar global current global rgb $current(colorbar) reset if {$current(frame) != {} } { RGBEvalLockCurrent rgb(lock,colorbar) [list $current(frame) colormap [$current(colorbar) get colormap]] set colorbar(invert) [$current(colorbar) get invert] } LockColorCurrent UpdateColorDialog } proc LoadColormap {} { LoadColormapFile [OpenFileDialog colorbarfbox] } # used by backup proc LoadColormapFile {filename} { global colorbar global icolorbar global current global ds9 if {$filename != {}} { colorbar load "\{$filename\}" set id [colorbar get id] set colorbar(map) [colorbar get name] $ds9(mb).color.user add radiobutton \ -label "$colorbar(map)" \ -variable colorbar(map) \ -command [list ChangeColormapID $id] if {[winfo exists $icolorbar(top)]} { $icolorbar(mb).colormap.user add radiobutton \ -label "$colorbar(map)" \ -variable colorbar(map) \ -command [list ChangeColormapID $id] } incr icolorbar(count) ChangeColormapID $id } } proc SaveColormap {} { FileLast colorbarfbox [colorbar get file name] SaveColormapFile [SaveFileDialog colorbarfbox] } proc SaveColormapFile {filename} { if {$filename != {}} { colorbar save "\{$filename\}" } } proc LoadContrastBias {} { global dcolorbar set filename [OpenFileDialog contrastbiasfbox] if {$filename != {}} { if {![catch {set ch [open $filename r]}]} { set ll [gets $ch] close $ch set dcolorbar(contrast) [lindex $ll 0] set dcolorbar(bias) [lindex $ll 1] ApplyColormap } } } proc SaveContrastBias {} { global dcolorbar set filename [SaveFileDialog contrastbiasfbox] if {$filename != {}} { if {![catch {set ch [open $filename w]}]} { puts $ch "$dcolorbar(contrast) $dcolorbar(bias)" close $ch } } } proc ColorbarEnter {x y} { global current global ds9 global debug if {$debug(tcl,events)} { puts stderr "ColorbarEnter" } # check to see if this event was generated while processing other events if {$ds9(b1) || $ds9(sb1) || $ds9(cb1) || $ds9(csb1) || $ds9(b2) || $ds9(b3)} { return } $ds9(canvas) focus $current(colorbar) switch -- $current(colorbar) { colorbar {UpdateFrameInfoBox base} colorbarrgb {UpdateFrameInfoBox rgb} } } proc ColorbarLeave {} { global current global ds9 global debug if {$debug(tcl,events)} { puts stderr "ColorbarLeave" } # check to see if this event was generated while processing other events if {$ds9(b1) || $ds9(sb1) || $ds9(cb1) || $ds9(csb1) || $ds9(b2) || $ds9(b3)} { return } $ds9(canvas) focus {} ClearInfoBoxCoords } proc ColorbarMotion {x y} { global current global infobox global debug if {$debug(tcl,events)} { puts stderr "ColorbarMotion $x $y" } switch -- $current(colorbar) { colorbar { set infobox(value) [$current(colorbar) get value $x $y] } colorbarrgb { set vv [$current(colorbar) get value $x $y] switch -- $current(rgb) { red {set infobox(value,red) $vv} green {set infobox(value,green) $vv} blue {set infobox(value,blue) $vv} } } } } proc ColorbarKey {K A xx yy} { global current global ds9 # MacOSX and Ubuntu returns bogus values in xx,yy # calculate our own values set xx [expr {[winfo pointerx $ds9(canvas)] - [winfo rootx $ds9(canvas)]}] set yy [expr {[winfo pointery $ds9(canvas)] - [winfo rooty $ds9(canvas)]}] global debug if {$debug(tcl,events)} { puts stderr "ColorbarKey $K $A $xx $yy" } switch -- $current(mode) { colorbar { switch -- $K { Delete - BackSpace { $current(colorbar) tag delete $xx $yy if {$current(frame) != {}} { $current(frame) colormap [$current(colorbar) get colormap] } } } } } } proc ColorbarKeyRelease {K A xx yy} { global current global ds9 # MacOSX and Ubuntu returns bogus values in xx,yy # calculate our own values set xx [expr {[winfo pointerx $ds9(canvas)] - [winfo rootx $ds9(canvas)]}] set yy [expr {[winfo pointery $ds9(canvas)] - [winfo rooty $ds9(canvas)]}] global debug if {$debug(tcl,events)} { puts stderr "ColorbarKeyRelease $K $A $xx $yy" } } proc ColorbarButton1 {x y} { global icolorbar global colorbar global ds9 global current global icursor global debug if {$debug(tcl,events)} { puts stderr "ColorbarButton1" } # let others know that the mouse is down set ds9(b1) 1 # turn off blinking cursor if {$icursor(timer)} { catch {after cancel $icursor(id)} set icursor(id) 0 } # are we on a tag? else create switch -- $current(mode) { colorbar {$current(colorbar) tag edit begin $x $y $colorbar(tag)} } } proc ColorbarMotion1 {x y} { global icolorbar global current global ds9 global debug if {$debug(tcl,events)} { puts stderr "ColorbarMotion1" } # abort if we are here by accident (such as a double click) if {($ds9(b1) == 0) && ($ds9(sb1) == 0) && ($ds9(cb1) == 0) && ($ds9(csb1) == 0)} { return } switch -- $current(mode) { colorbar { $current(colorbar) tag edit motion $x $y if {$current(frame) != {}} { $current(frame) colormap [$current(colorbar) get colormap] } } } } proc ColorbarRelease1 {x y} { global icolorbar global current global icursor global ds9 global debug if {$debug(tcl,events)} { puts stderr "ColorbarRelease1" } # abort if we are here by accident (such as a double click) if {($ds9(b1) == 0) && ($ds9(sb1) == 0) && ($ds9(cb1) == 0) && ($ds9(csb1) == 0)} { return } # and turn on blinking cursor if needed if {$icursor(timer)} { CursorTimer } switch -- $current(mode) { colorbar { $current(colorbar) tag edit end $x $y if {$current(frame) != {}} { $current(frame) colormap [$current(colorbar) get colormap] } } } # let others know that the mouse is up set ds9(b1) 0 set ds9(sb1) 0 set ds9(cb1) 0 set ds9(csb1) 0 } proc ColorbarDouble1 {x y} { global current global debug if {$debug(tcl,events)} { puts stderr "ColorbarDouble1" } switch -- $current(mode) { colorbar {ColorTagDialog $x $y} } } proc ColorbarDoubleRelease1 {x y} { global current global debug if {$debug(tcl,events)} { puts stderr "ColorbarDoubleRelease1" } } proc ColorbarButton3 {x y} { global icolorbar global current global rgb global icursor # turn off blinking cursor if {$icursor(timer)} { catch {after cancel $icursor(id)} set icursor(id) 0 } if {$current(frame) != {}} { # we need to hold the current frame, since we may be blinking set icolorbar(frame) $current(frame) $icolorbar(frame) colormap begin } } proc ColorbarMotion3 {x y} { global icolorbar global current global canvas # X sets bias set bias [expr double($x)/$canvas(width)] # Y sets contrast set contrast [expr double($y)/$canvas(height) * 10] RGBEvalLockColorbar [list $current(colorbar) adjust $contrast $bias] if {$icolorbar(frame) != {}} { # only update the current colorbar frame $icolorbar(frame) colormap motion [$current(colorbar) get colormap] } UpdateColorDialog } proc ColorbarRelease3 {x y} { global icolorbar global current global rgb global icursor # and turn on blinking cursor if needed if {$icursor(timer)} { CursorTimer } # only update the current colorbar frame if {$icolorbar(frame) != {}} { $icolorbar(frame) colormap end set icolorbar(frame) {} } LockColorCurrent UpdateColorDialog } proc ChangeColormapID {id} { global colorbar global current colorbar map $id if {$current(frame) != {} } { $current(frame) colormap [colorbar get colormap] set colorbar(map) [colorbar get name] set colorbar(invert) [colorbar get invert] } LockColorCurrent UpdateColorDialog } proc MatchColorCurrent {} { global current if {$current(frame) != {}} { MatchColor $current(frame) } } proc MatchColor {which} { global ds9 global current global colorbar set tt [$which get type] foreach ff $ds9(frames) { if {$ff != $which} { switch -- [$ff get type] { base - 3d { if {$tt != {rgb}} { $ff colormap [colorbar get colormap] } } rgb { if {$tt == {rgb}} { $ff colormap [colorbarrgb get colormap] } } } } } } proc LockColorCurrent {} { global current if {$current(frame) != {}} { LockColor $current(frame) } } proc LockColor {which} { global colorbar if {$colorbar(lock)} { MatchColor $which } } proc InvertColorbar {} { global colorbar global current $current(colorbar) invert $colorbar(invert) if {$current(frame) != {} } { $current(frame) colormap [$current(colorbar) get colormap] } LockColorCurrent UpdateColorDialog } proc UpdateColormapLevel {} { global icolorbar global current global debug if {$debug(tcl,update)} { puts stderr "UpdateColormapLevel" } if {$current(frame) != {}} { $current(colorbar) colormap level \ [$current(frame) get colormap level $icolorbar(num)] } else { $current(colorbar) colormap level } } proc UpdateColormapLevelMosaic {which x y sys} { global icolorbar global current global current global scale global debug if {$debug(tcl,update)} { puts stderr "UpdateColormapLevelMosaic" } if {$current(frame) == {}} { $current(colorbar) colormap level return } if {($current(frame) == $which) && ($scale(scope) == "local") && [$which has fits mosaic]} { set ext [$which get fits ext $sys $x $y] if {$current(ext) != $ext} { $current(colorbar) colormap level \ [$current(frame) get colormap level $icolorbar(num) $sys $x $y] } set current(ext) $ext } else { set current(ext) {} } } proc ColorFrameBackup {ch which} { puts $ch "$which colorbar tag \"\{[$which get colorbar tag]\}\"" puts $ch "colorbar tag \"\{[$which get colorbar tag]\}\"" } proc ColorbarSizeDialog {} { global colorbar global ds9 switch $ds9(wm) { x11 - win32 { if {[EntryDialog [msgcat::mc {Colorbar}] [msgcat::mc {Size}] 10 colorbar(size)]} { UpdateView } } aqua { # we have a race condition here. the main window needs focus # back from the dialog before UpdateView is run, otherwise, # our pretty blue buttons are not activated if {[EntryDialog [msgcat::mc {Colorbar}] [msgcat::mc {Size}] 10 colorbar(size)]} { after 100 UpdateView } } } } proc TicksDialog {} { global colorbar global ds9 switch $ds9(wm) { x11 - win32 { if {[EntryDialog [msgcat::mc {Colorbar}] [msgcat::mc {Number of Ticks}] 10 colorbar(ticks)]} { UpdateView } } aqua { # we have a race condition here. the main window needs focus # back from the dialog before UpdateView is run, otherwise, # our pretty blue buttons are not activated if {[EntryDialog [msgcat::mc {Colorbar}] [msgcat::mc {Number of Ticks}] 10 colorbar(ticks)]} { after 100 UpdateView } } } } proc OpenColorTag {} { LoadColorTag [OpenFileDialog colortagfbox] } proc LoadColorTag {fn} { global current if {$fn != {}} { $current(colorbar) tag load "\{$fn\}" if {$current(frame) != {}} { $current(frame) colormap [$current(colorbar) get colormap] } } } proc SaveColorTag {} { global current set fn [SaveFileDialog colortagfbox] if {$fn != {}} { $current(colorbar) tag save "\{$fn\}" } } proc DeleteColorTag {} { global current $current(colorbar) tag delete if {$current(frame) != {}} { $current(frame) colormap [$current(colorbar) get colormap] } } proc ColorTagDialog {x y} { global ds9 global current global colorbar global ed2 set w {.ctagd} set rr [$current(colorbar) get tag $x $y] set ed2(ok) 0 set ed2(id) [lindex $rr 0] set ed2(start) [lindex $rr 1] set ed2(stop) [lindex $rr 2] set ed2(color) [lindex $rr 3] DialogCreate $w [msgcat::mc {Color}] ed2(ok) # Param set f [ttk::frame $w.param] ttk::label $f.tstart -text [msgcat::mc {Start}] ttk::entry $f.start -textvariable ed2(start) -width 10 ttk::label $f.tstop -text [msgcat::mc {Stop}] ttk::entry $f.stop -textvariable ed2(stop) -width 10 ttk::label $f.tcolor -text [msgcat::mc {Color}] ColorMenuButton $f.color ed2 color {} grid $f.tstart $f.start -padx 2 -pady 2 -sticky w grid $f.tstop $f.stop -padx 2 -pady 2 -sticky w grid $f.tcolor $f.color -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed2(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed2(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed2(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed2(ok) DialogDismiss $w if {$ed2(ok)} { $current(colorbar) tag $ed2(id) $ed2(start) $ed2(stop) $ed2(color) if {$current(frame) != {}} { $current(frame) colormap [$current(colorbar) get colormap] } } set rr $ed2(ok) unset ed2 return $rr } proc ColormapDialog {} { global colorbar global icolorbar global dcolorbar global ds9 # see if we already have a window visible if {[winfo exists $icolorbar(top)]} { raise $icolorbar(top) return } # create the window set w $icolorbar(top) set mb $icolorbar(mb) Toplevel $w $mb 6 [msgcat::mc {Colormap Parameters}] ColormapDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit $mb add cascade -label [msgcat::mc {Colormap}] -menu $mb.colormap $mb add cascade -label [msgcat::mc {Color}] -menu $mb.color menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] \ -command ApplyColormap $mb.file add separator $mb.file add command -label "[msgcat::mc {Load Colormap}]..." \ -command LoadColormap $mb.file add command -label "[msgcat::mc {Save Colormap}]..." \ -command SaveColormap $mb.file add separator $mb.file add command -label "[msgcat::mc {Download Colormap}]..." \ -command {HV cpt CPT-CITY http://soliton.vm.bytemark.co.uk/pub/cpt-city} $mb.file add separator $mb.file add command -label "[msgcat::mc {Load Contrast/Bias}]..."\ -command LoadContrastBias $mb.file add command -label "[msgcat::mc {Save Contrast/Bias}]..." \ -command SaveContrastBias $mb.file add separator $mb.file add command -label "[msgcat::mc {Load Color Tags}]..."\ -command OpenColorTag $mb.file add command -label "[msgcat::mc {Save Color Tags}]..." \ -command SaveColorTag $mb.file add command -label "[msgcat::mc {Delete Color Tags}]..." \ -command DeleteColorTag $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command ColormapDestroyDialog EditMenu $mb icolorbar ColorMenu $mb.color colorbar tag {} menu $mb.colormap menu $mb.colormap.h5 menu $mb.colormap.matplotlib menu $mb.colormap.cubehelix menu $mb.colormap.gist menu $mb.colormap.topo menu $mb.colormap.user set id [colorbar list id] ColormapCreateMenu id $mb.colormap \ 0 $icolorbar(end) ColormapCreateMenu id $mb.colormap.h5 \ $icolorbar(h5) $icolorbar(matplotlib) ColormapCreateMenu id $mb.colormap.matplotlib \ $icolorbar(matplotlib) $icolorbar(cubehelix) ColormapCreateMenu id $mb.colormap.cubehelix \ $icolorbar(cubehelix) $icolorbar(gist) ColormapCreateMenu id $mb.colormap.gist \ $icolorbar(gist) $icolorbar(topo) ColormapCreateMenu id $mb.colormap.topo \ $icolorbar(topo) $icolorbar(user) ColormapCreateMenu id $mb.colormap.user \ $icolorbar(user) $icolorbar(count) $mb.colormap add separator $mb.colormap add cascade -label [msgcat::mc {h5utils}] \ -menu $mb.colormap.h5 $mb.colormap add cascade -label [msgcat::mc {Matplotlib}] \ -menu $mb.colormap.matplotlib $mb.colormap add cascade -label [msgcat::mc {Cubehelix}] \ -menu $mb.colormap.cubehelix $mb.colormap add cascade -label [msgcat::mc {Gist}] \ -menu $mb.colormap.gist $mb.colormap add cascade -label [msgcat::mc {Topographic}] \ -menu $mb.colormap.topo $mb.colormap add cascade -label [msgcat::mc {User}] \ -menu $mb.colormap.user $mb.colormap add separator $mb.colormap add checkbutton \ -label [msgcat::mc {Invert Colormap}] \ -variable colorbar(invert) -command InvertColorbar $mb.colormap add command -label [msgcat::mc {Reset Colormap}] \ -command ResetColormap UpdateColorDialog # Param set f [ttk::frame $w.param] slider $f.cslider 0. 10. [msgcat::mc {Contrast}] \ dcolorbar(contrast) [list AdjustColormap] slider $f.bslider 0. 1. [msgcat::mc {Bias}] \ dcolorbar(bias) [list AdjustColormap] grid $f.cslider -padx 2 -pady 2 -sticky ew grid $f.bslider -padx 2 -pady 2 -sticky ew grid columnconfigure $f 0 -weight 1 bind $f.cslider.slider BeginAdjustColormap bind $f.cslider.slider EndAdjustColormap bind $f.bslider.slider BeginAdjustColormap bind $f.bslider.slider EndAdjustColormap # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] \ -command ApplyColormap ttk::button $f.close -text [msgcat::mc {Close}] \ -command ColormapDestroyDialog pack $f.apply $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true } proc ColormapCreateMenu {varname which start stop} { upvar $varname var for {set ii $start} {$ii<$stop} {incr ii} { set jj [lindex $var $ii] set name [colorbar get name $jj] $which add radiobutton \ -label [msgcat::mc $name] \ -variable colorbar(map) -value $name \ -command "ChangeColormapID $jj" } } proc ColormapDestroyDialog {} { global icolorbar global dcolorbar if {[winfo exists $icolorbar(top)]} { destroy $icolorbar(top) destroy $icolorbar(mb) } unset dcolorbar } proc ApplyColormap {} { global dcolorbar global current global rgb RGBEvalLockColorbar [list $current(colorbar) adjust $dcolorbar(contrast) $dcolorbar(bias)] if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,colorbar) [list $current(frame) colormap [$current(colorbar) get colormap]] LockColorCurrent } } proc BeginAdjustColormap {} { global icolorbar global current global rgb set icolorbar(adjustok) 1 if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,colorbar) [list $current(frame) colormap begin] } } proc AdjustColormap {} { global icolorbar global dcolorbar global current global rgb if {[info exists icolorbar(adjustok)]} { RGBEvalLockColorbar [list $current(colorbar) adjust $dcolorbar(contrast) $dcolorbar(bias)] if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,colorbar) [list $current(frame) colormap motion [$current(colorbar) get colormap]] } } } proc EndAdjustColormap {} { global icolorbar global current global rgb if {[info exists icolorbar(adjustok)]} { unset icolorbar(adjustok) if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,colorbar) [list $current(frame) colormap end] LockColorCurrent } } } proc UpdateColorDialog {} { global icolorbar global dcolorbar global current global debug if {$debug(tcl,update)} { puts stderr "UpdateColorDialog" } if {[winfo exists $icolorbar(top)]} { set dcolorbar(contrast) [$current(colorbar) get contrast] set dcolorbar(bias) [$current(colorbar) get bias] set end [expr $icolorbar(end)+$icolorbar(start)] if {$current(frame) != {}} { switch -- [$current(frame) get type] { base - 3d { $icolorbar(mb).file entryconfig \ "[msgcat::mc {Load Colormap}]..." -state normal $icolorbar(mb).file entryconfig \ "[msgcat::mc {Save Colormap}]..." -state normal for {set ii $icolorbar(start)} {$ii<$end} {incr ii} { $icolorbar(mb).colormap entryconfig $ii -state normal } $icolorbar(mb).colormap entryconfig \ [msgcat::mc {h5utils}] -state normal $icolorbar(mb).colormap entryconfig \ [msgcat::mc {Matplotlib}] -state normal $icolorbar(mb).colormap entryconfig \ [msgcat::mc {Cubehelix}] -state normal $icolorbar(mb).colormap entryconfig \ [msgcat::mc {Gist}] -state normal $icolorbar(mb).colormap entryconfig \ [msgcat::mc {Topographic}] -state normal $icolorbar(mb).colormap entryconfig \ [msgcat::mc {User}] -state normal } rgb { $icolorbar(mb).file entryconfig \ "[msgcat::mc {Load Colormap}]..." -state disabled $icolorbar(mb).file entryconfig \ "[msgcat::mc {Save Colormap}]..." -state disabled for {set ii $icolorbar(start)} {$ii<$end} {incr ii} { $icolorbar(mb).colormap entryconfig $ii -state disabled } $icolorbar(mb).colormap entryconfig \ [msgcat::mc {h5utils}] -state disabled $icolorbar(mb).colormap entryconfig \ [msgcat::mc {Matplotlib}] -state disabled $icolorbar(mb).colormap entryconfig \ [msgcat::mc {Cubehelix}] -state disabled $icolorbar(mb).colormap entryconfig \ [msgcat::mc {Gist}] -state disabled $icolorbar(mb).colormap entryconfig \ [msgcat::mc {Topographic}] -state disabled $icolorbar(mb).colormap entryconfig \ [msgcat::mc {User}] -state disabled } } } else { $icolorbar(mb).file entryconfig \ "[msgcat::mc {Load Colormap}]..." -state normal $icolorbar(mb).file entryconfig \ "[msgcat::mc {Save Colormap}]..." -state normal for {set ii $icolorbar(start)} {$ii<$end} {incr ii} { $icolorbar(mb).colormap entryconfig $ii -state normal } $icolorbar(mb).colormap entryconfig [msgcat::mc {h5utils}] \ -state normal $icolorbar(mb).colormap entryconfig [msgcat::mc {Matplotlib}] \ -state normal $icolorbar(mb).colormap entryconfig [msgcat::mc {Cubehelix}] \ -state normal $icolorbar(mb).colormap entryconfig [msgcat::mc {Gist}] \ -state normal $icolorbar(mb).colormap entryconfig [msgcat::mc {Topographic}] \ -state normal $icolorbar(mb).colormap entryconfig [msgcat::mc {User}] \ -state normal } } } proc LayoutColorbar {} { global colorbar global icolorbar global ds9 global canvas colorbar configure \ -size $colorbar(size) \ -ticks $colorbar(ticks) \ -numerics $colorbar(numerics) \ -space $colorbar(space) \ -font $colorbar(font) \ -fontsize $colorbar(font,size) \ -fontweight $colorbar(font,weight) \ -fontslant $colorbar(font,slant) \ colorbarrgb configure \ -size $colorbar(size) \ -ticks $colorbar(ticks) \ -numerics $colorbar(numerics) \ -space $colorbar(space) \ -font $colorbar(font) \ -fontsize $colorbar(font,size) \ -fontweight $colorbar(font,weight) \ -fontslant $colorbar(font,slant) \ switch -- $colorbar(orientation) { horizontal { set xx 0 set yy [expr $canvas(height) + $canvas(gap)] colorbar configure -x $xx -y $yy \ -width $canvas(width) \ -height $icolorbar(horizontal,height) \ -orientation 0 colorbarrgb configure -x $xx -y $yy \ -width $canvas(width) \ -height $icolorbar(horizontal,height) \ -orientation 0 } vertical { set xx [expr $canvas(width) + $canvas(gap)] set yy 0 colorbar configure -x $xx -y $yy \ -width $icolorbar(vertical,width) \ -height $canvas(height) \ -orientation 1 colorbarrgb configure -x $xx -y $yy \ -width $icolorbar(vertical,width) \ -height $canvas(height) \ -orientation 1 } } } proc ColorbarBackup {ch which} { global colorbar puts $ch "$which configure -size $colorbar(size)" puts $ch "$which configure -ticks $colorbar(ticks)" puts $ch "$which configure -numerics $colorbar(numerics)" puts $ch "$which configure -space $colorbar(space)" switch $colorbar(orientation) { horizontal {puts $ch "$which configure -orientation 0"} vertical {puts $ch "$which configure -orientation 1"} } puts $ch "$which configure -font $colorbar(font)" puts $ch "$which configure -fontsize $colorbar(font,size)" puts $ch "$which configure -fontweight $colorbar(font,weight)" puts $ch "$which configure -fontslant $colorbar(font,slant)" puts $ch "$which colorbar [$which get colorbar]" puts $ch "$which tag \"\{[$which get tag]\}\"" } proc ColormapFrameBackup {ch which} { switch -- [$which get type] { base - 3d { puts $ch "set sav \[colorbar get colorbar\]" puts $ch "colorbar colorbar [$which get colorbar]" puts $ch "$which colormap \[colorbar get colormap\]" puts $ch "colorbar colorbar \$sav" } rgb { puts $ch "set sav \[colorbarrgb get colorbar\]" puts $ch "colorbarrgb colorbar [$which get colorbar]" puts $ch "$which colormap \[colorbarrgb get colormap\]" puts $ch "colorbarrgb colorbar \$sav" } } } proc ColorbarBackupCmaps {ch dir} { global icolorbar set rdir "./[lindex [file split $dir] end]" # delete old cmaps foreach ff [glob -directory $dir -nocomplain "*.sao"] { catch {file delete -force $ff} } foreach ff [glob -directory $dir -nocomplain "*.lut"] { catch {file delete -force $ff} } # save any loaded cmaps set id [colorbar list id] if {$icolorbar(user)<[llength $id]} { for {set ii $icolorbar(user)} {$ii<[llength $id]} {incr ii} { set which [lindex $id $ii] set nn [lindex [file split [colorbar get file name $which]] end] colorbar save $which \"[file join $dir $nn]\" puts $ch "LoadColormapFile \"[file join $rdir $nn]\"" } } } # Process Cmds proc ProcessCmapCmd {varname iname} { upvar $varname var upvar $iname i global colorbar global current global ds9 global current global rgb # we need to be realized ProcessRealizeDS9 switch -- [string tolower [lindex $var $i]] { open {ColormapDialog} close {ColormapDestroyDialog} match { # backward compatibility MatchColorCurrent } lock { # backward compatibility incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set colorbar(lock) [FromYesNo [lindex $var $i]] } else { set colorbar(lock) 1 incr i -1 } LockColorCurrent } load - file { incr i set fn [lindex $var $i] LoadColormapFile $fn FileLast colormapfbox $fn } save { incr i set fn [lindex $var $i] SaveColormapFile $fn FileLast colormapfbox $fn } invert { incr i set colorbar(invert) [FromYesNo [lindex $var $i]] InvertColorbar } tag { incr i set item [string tolower [lindex $var $i]] switch $item { load {incr i; LoadColorTag [lindex $var $i]} save {incr i; $current(colorbar) tag save [lindex $var $i]} delete {DeleteColorTag} } } value { incr i set c [lindex $var $i] incr i set b [lindex $var $i] if {$current(frame) != {}} { RGBEvalLockColorbar [list $current(colorbar) adjust $c $b] RGBEvalLockCurrent rgb(lock,colorbar) [list $current(frame) colormap begin] RGBEvalLockCurrent rgb(lock,colorbar) [list $current(frame) colormap motion [$current(colorbar) get colormap]] RGBEvalLockCurrent rgb(lock,colorbar) [list $current(frame) colormap end] } LockColorCurrent UpdateColorDialog } default { switch -- [$current(frame) get type] { base - 3d { set cmap [lindex $var $i] # common variants on spellings switch -- [string tolower $cmap] { gray {set cmap grey} } set id [colorbar list id] set found 0 foreach ii $id { set title [colorbar get name $ii] if {[string equal -nocase $title $cmap]} { set colorbar(map) $title colorbar map "{$colorbar(map)}" $current(frame) colormap [colorbar get colormap] set colorbar(invert) [colorbar get invert] set found 1 break } } if {!$found} { Error "[msgcat::mc {Unknown Colormap}] $cmap" } } rgb {} } LockColorCurrent UpdateColorDialog } } } proc ProcessSendCmapCmd {proc id param} { global colorbar global current switch -- [string tolower $param] { file {$proc $id "[$current(colorbar) get file name]\n"} invert {$proc $id [ToYesNo $colorbar(invert)]} value {$proc $id "[$current(colorbar) get contrast] [$current(colorbar) get bias]\n"} lock {$proc $id [ToYesNo $colorbar(lock)]} {} {$proc $id "[$current(colorbar) get name]\n"} } } proc ProcessColorbarCmd {varname iname} { upvar $varname var upvar $iname i global colorbar global view set item [string tolower [lindex $var $i]] switch -- $item { match { # backward compatibility MatchColorCurrent } lock { # backward compatibility incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set colorbar(lock) [FromYesNo [lindex $var $i]] } else { set colorbar(lock) 1 incr i -1 } LockColorCurrent } numerics { incr i set yesno [string tolower [lindex $var $i]] set colorbar(numerics) [FromYesNo $yesno] UpdateView } space { incr i switch -- [string tolower [lindex $var $i]] { value {set item 1} default {set item 0} } set colorbar(space) $item UpdateView } font { incr i set item [string tolower [lindex $var $i]] set colorbar(font) $item UpdateView } fontsize { incr i set item [lindex $var $i] set colorbar(font,size) $item UpdateView } fontweight { incr i set item [string tolower [lindex $var $i]] set colorbar(font,weight) $item UpdateView } fontslant { incr i set item [string tolower [lindex $var $i]] set colorbar(font,slant) $item UpdateView } fontstyle { # backward compatibility incr i set item [string tolower [lindex $var $i]] switch $item { normal { set colorbar(font,weight) normal set colorbar(font,slant) roman } bold { set colorbar(font,weight) bold set colorbar(font,slant) roman } italic { set colorbar(font,weight) normal set colorbar(font,slant) italic } } UpdateView } orientation { incr i set item [string tolower [lindex $var $i]] set colorbar(orientation) $item UpdateView } vertical - horizontal { set colorbar(orientation) $item UpdateView } size { incr i set item [lindex $var $i] set colorbar(size) $item UpdateView } ticks { incr i set item [lindex $var $i] set colorbar(ticks) $item UpdateView } default { set yesno [string tolower [lindex $var $i]] set view(colorbar) [FromYesNo $yesno] UpdateView } } } proc ProcessSendColorbarCmd {proc id param} { global colorbar global view switch -- [string tolower [lindex $param 0]] { lock { #backward compatibility $proc $id [ToYesNo $colorbar(lock)] } orientation {$proc $id "$colorbar(orientation)\n"} numerics {$proc $id [ToYesNo $colorbar(numerics)]} space { if {$colorbar(space)} { $proc $id "value\n" } else { $proc $id "distance\n" } } font {$proc $id "$colorbar(font)\n"} fontsize {$proc $id "$colorbar(font,size)\n"} fontstyle - fontweight {$proc $id "$colorbar(font,weight)\n"} fontslant {$proc $id "$colorbar(font,slant)\n"} size {$proc $id "$colorbar(size)\n"} ticks {$proc $id "$colorbar(ticks)\n"} default {$proc $id [ToYesNo $view(colorbar)]} } } saods9/ds9/library/comm.tcl000644 000765 000000 00000025155 12740775513 016211 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # used to access ProcessSend*Cmd via tcl proc CommReturn {id rr} { return "$id $rr" } proc CommSet {fn paramlist {safemode 0}} { global debug if {$debug(tcl,hv) || $debug(tcl,samp)} { puts stderr "CommSet:$fn:$paramlist:$safemode" } set cmd [lindex $paramlist 0] set param [lrange $paramlist 1 end] set len 0 set i 0 catch { switch -- $cmd { 2mass {Process2MASSCmd param i} 3d {Process3DCmd param i} about {} align {ProcessAlignCmd param i} analysis {ProcessAnalysisCmd param i {} $fn} array {ProcessArrayCmd param i {} $fn} bg - background {ProcessBgCmd param i} backup {ProcessBackupCmd param i} blink {ProcessBlinkCmd param i} bin {ProcessBinCmd param i} block {ProcessBlockCmd param i} cat - catalog {ProcessCatalogCmd param i} cd {ProcessCDCmd param i} cmap {ProcessCmapCmd param i} colorbar {ProcessColorbarCmd param i} console {ProcessConsoleCmd param i} contours - contour {ProcessContourCmd param i} crop {ProcessCropCmd param i} crosshair {ProcessCrosshairCmd param i} cursor {ProcessCursorCmd param i} data {} datacube - cube {ProcessCubeCmd param i} dss - dsssao {ProcessSAOCmd param i} dsseso {ProcessESOCmd param i} dssstsci {ProcessSTSCICmd param i} envi {ProcessENVICmd param i {} $fn} export {ProcessExportCmd param i} file {ProcessFileCmd param i {} {} {}} fits {ProcessFitsCmd param i {} $fn} frame {ProcessFrameCmd param i} gif {ProcessGIFCmd param i {} $fn} grid {ProcessGridCmd param i} header {ProcessHeaderCmd param i} height {ProcessHeightCmd param i} iconify {ProcessIconifyCmd param i} iexam - imexam {} iis {ProcessIISCmd param i} irafalign { # backward compatibility ProcessIRAFAlignCmd param i } jpg - jpeg {ProcessJPEGCmd param i {} $fn} lock {ProcessLockCmd param i} lower {ProcessLowerCmd param i} magnifier {ProcessMagnifierCmd param i} mask {ProcessMaskCmd param i} match {ProcessMatchCmd param i} mecube {ProcessMECubeCmd param i {} $fn} minmax {ProcessMinMaxCmd param i} mode {ProcessModeCmd param i} mosaic {ProcessMosaicCmd param i {} $fn} mosaicimage {ProcessMosaicImageCmd param i {} $fn} mosaicwcs { # backward compatibility ProcessMosaicWCSCmd param i {} $fn } mosaiciraf { # backward compatibility ProcessMosaicIRAFCmd param i {} $fn } mosaicimagewcs { # backward compatibility ProcessMosaicImageWCSCmd param i {} $fn } mosaicimageiraf { # backward compatibility ProcessMosaicImageIRAFCmd param i {} $fn } mosaicimagewfpc2 { # backward compatibility ProcessMosaicImageWFPC2Cmd param i {} $fn } savempeg - movie {ProcessMovieCmd param i} memf - multiframe {ProcessMultiFrameCmd param i {} $fn} nameserver {ProcessNRESCmd param i} nan {ProcessNanCmd param i} nrrd {ProcessNRRDCmd param i {} $fn} nvss {ProcessNVSSCmd param i} orient {ProcessOrientCmd param i} {page setup} - pagesetup {ProcessPageSetupCmd param i} pspagesetup {ProcessPSPageSetupCmd param i} pan {ProcessPanCmd param i} pixeltable {ProcessPixelTableCmd param i} plot {ProcessPlotCmd param i {} $fn} png {ProcessPNGCmd param i {} $fn} prefs {ProcessPrefsCmd param i} preserve {ProcessPreserveCmd param i} print { if {$safemode} { Error [msgcat::mc {Command not allowed}] } else { ProcessPrintCmd param i } } psprint { if {$safemode} { Error [msgcat::mc {Command not allowed}] } else { ProcessPSPrintCmd param i } } exit - quit {ProcessQuitCmd param i} raise {ProcessRaiseCmd param i} restore {ProcessRestoreCmd param i} region - regions {ProcessRegionsCmd param i {} $fn} rgb {ProcessRGBCmd param i} rgbarray {ProcessRGBArrayCmd param i {} $fn} rgbcube {ProcessRGBCubeCmd param i {} $fn} rgbimage {ProcessRGBImageCmd param i {} $fn} rotate {ProcessRotateCmd param i} samp {ProcessSAMPCmd param i} save - savefits {ProcessSaveCmd param i} saveimage {ProcessSaveImageCmd param i} scale {ProcessScaleCmd param i} sfits { # backward compatibility ProcessSFitsCmd param i {} $fn } sia {ProcessSIACmd param i} single {ProcessSingleCmd param i} shm {ProcessShmCmd param i 0} skyview {ProcessSkyViewCmd param i} sleep {ProcessSleepCmd param i} smosaic { # backward compatibility ProcessSMosaicCmd param i {} $fn } smosaicwcs { # backward compatibility ProcessSMosaicWCSCmd param i {} $fn } smosaiciraf { # backward compatibility ProcessSMosaicIRAFCmd param i {} $fn } smooth {ProcessSmoothCmd param i} source { if {$safemode} { Error [msgcat::mc {Command not allowed}] } else { ProcessSourceCmd param i } } srgbcube {ProcessSRGBCubeCmd param i {} $fn} tcl { if {$safemode} { Error [msgcat::mc {Command not allowed}] } else { ProcessTclCmd param i {} $fn } } theme { # backward compatibility ProcessThemeCmd param i } threads {ProcessThreadsCmd param i} tif - tiff {ProcessTIFFCmd param i {} $fn} tile {ProcessTileCmd param i} update {ProcessUpdateCmd param i} url {ProcessURLFitsCmd param i} version {} view {ProcessViewCmd param i} vla - first {ProcessVLACmd param i} vlss {ProcessVLSSCmd param i} vo {ProcessVOCmd param i} wcs {ProcessWCSCmd param i {} $fn} web {ProcessWebCmd param i} width {ProcessWidthCmd param i} zoom {ProcessZoomCmd param i} zscale {ProcessZScaleCmd param i} default {Error "[msgcat::mc {Unknown command}]: $cmd"} } } } proc CommGet {proc id paramlist fn} { global debug if {$debug(tcl,samp)} { puts stderr "CommGet:$proc:$id:$paramlist:$fn" } set cmd [lindex $paramlist 0] set param [lrange $paramlist 1 end] catch { switch -- $cmd { 2mass {ProcessSend2MASSCmd $proc $id $param} 3d {ProcessSend3DCmd $proc $id $param} about {ProcessSendAboutCmd $proc $id $param {} $fn} align {ProcessSendAlignCmd $proc $id $param} analysis {ProcessSendAnalysisCmd $proc $id $param {} $fn} array {ProcessSendArrayCmd $proc $id $param {} $fn} bg - background {ProcessSendBgCmd $proc $id $param} blink {ProcessSendBlinkCmd $proc $id $param} bin {ProcessSendBinCmd $proc $id $param} block {ProcessSendBlockCmd $proc $id $param} cat - catalog {ProcessSendCatalogCmd $proc $id $param {} $fn} cd {ProcessSendCDCmd $proc $id $param} cmap {ProcessSendCmapCmd $proc $id $param} colorbar {ProcessSendColorbarCmd $proc $id $param} console {} contours - contour {ProcessSendContourCmd $proc $id $param {} $fn} crop {ProcessSendCropCmd $proc $id $param} crosshair {ProcessSendCrosshairCmd $proc $id $param} cursor {} data {ProcessSendDataCmd $proc $id $param {} $fn} datacube - cube {ProcessSendCubeCmd $proc $id $param} dss - dsssao {ProcessSendSAOCmd $proc $id $param} dsseso {ProcessSendESOCmd $proc $id $param} dssstsci {ProcessSendSTSCICmd $proc $id $param} envi {} exit {} export {} file {ProcessSendFileCmd $proc $id $param} fits {ProcessSendFitsCmd $proc $id $param {} $fn} frame {ProcessSendFrameCmd $proc $id $param} gif {ProcessSendGIFCmd $proc $id $param {} $fn} grid {ProcessSendGridCmd $proc $id $param} header {} height {ProcessSendHeightCmd $proc $id $param} iconify {ProcessSendIconifyCmd $proc $id $param} iexam - imexam {ProcessSendIExamCmd $proc $id $param} iis {ProcessSendIISCmd $proc $id $param} irafalign { # backward compatibility ProcessSendIRAFAlignCmd $proc $id $param } jpg - jpeg {ProcessSendJPEGCmd $proc $id $param {} $fn} lock {ProcessSendLockCmd $proc $id $param} lower {} magnifier {ProcessSendMagnifierCmd $proc $id $param} mask {ProcessSendMaskCmd $proc $id $param} match {} mecube {ProcessSendMECubeCmd $proc $id $param {} $fn} minmax {ProcessSendMinMaxCmd $proc $id $param} mode {ProcessSendModeCmd $proc $id $param} mosaic {ProcessSendMosaicCmd $proc $id $param {} $fn} mosaicimage {ProcessSendMosaicImageCmd $proc $id $param {} $fn} mosaicwcs { # backward compatibility ProcessSendMosaicWCSCmd $proc $id $param {} $fn } mosaiciraf { # backward compatibility } mosaicimagewcs { # backward compatibility ProcessSendMosaicImageWCSCmd $proc $id $param {} $fn } mosaicimageiraf { # backward compatibility } mosaicimagewfpc2 { # backward compatibility } savempeg - movie {} memf - multiframe {} nameserver {ProcessSendNRESCmd $proc $id $param} nan {ProcessSendNanCmd $proc $id $param} nrrd {ProcessSendNRRDCmd $proc $id $param {} $fn} nvss {ProcessSendNVSSCmd $proc $id $param} orient {ProcessSendOrientCmd $proc $id $param} {page setup} - pagesetup {ProcessSendPageSetupCmd $proc $id $param} pan {ProcessSendPanCmd $proc $id $param} pixeltable {ProcessSendPixelTableCmd $proc $id $param {} $fn} plot {ProcessSendPlotCmd $proc $id $param} png {ProcessSendPNGCmd $proc $id $param {} $fn} prefs {ProcessSendPrefsCmd $proc $id $param} preserve {ProcessSendPreserveCmd $proc $id $param} pspagesetup {ProcessSendPSPageSetupCmd $proc $id $param} print {ProcessSendPrintCmd $proc $id $param} psprint {ProcessSendPSPrintCmd $proc $id $param} exit - quit {} raise {} region - regions {ProcessSendRegionsCmd $proc $id $param {} $fn} rgb {ProcessSendRGBCmd $proc $id $param} rgbarray {ProcessSendRGBArrayCmd $proc $id $param {} $fn} rgbcube {ProcessSendRGBCubeCmd $proc $id $param {} $fn} rgbimage {ProcessSendRGBImageCmd $proc $id $param {} $fn} rotate {ProcessSendRotateCmd $proc $id $param} samp {} save - savefits {} saveimage {} scale {ProcessSendScaleCmd $proc $id $param} sfits { # backward compatibility } single {ProcessSendSingleCmd $proc $id $param} shm {ProcessSendShmCmd $proc $id $param} skyview {ProcessSendSkyViewCmd $proc $id $param} smosaic { # backward compatibility } smosaiciraf { # backward compatibility } smosaicwcs { # backward compatibility } smooth {ProcessSendSmoothCmd $proc $id $param} source {} srgbcube {} tcl {} theme { # backward compatibility ProcessSendThemeCmd $proc $id $param } threads {ProcessSendThreadsCmd $proc $id $param} tif - tiff {ProcessSendTIFFCmd $proc $id $param {} $fn} tile {ProcessSendTileCmd $proc $id $param} update {} url {} version {ProcessSendVersionCmd $proc $id $param} view {ProcessSendViewCmd $proc $id $param} vla - first {ProcessSendVLACmd $proc $id $param} vlss {ProcessSendVLSSCmd $proc $id $param} vo {ProcessSendVOCmd $proc $id $param} wcs {ProcessSendWCSCmd $proc $id $param} web {ProcessSendWebCmd $proc $id $param} width {ProcessSendWidthCmd $proc $id $param} zscale {ProcessSendZScaleCmd $proc $id $param} zoom {ProcessSendZoomCmd $proc $id $param} default { Error "[msgcat::mc {Unknown command}]: $cmd" $proc $id {} } } } } saods9/ds9/library/command.tcl000644 000765 000000 00000047134 12740775513 016675 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc BadVisualError {} { global ds9 Error [msgcat::mc {Sorry, DS9 requires a Truecolor8, Truecolor16, Truecolor24 visual be available}] exit } proc ProcessCommandLineFirst {} { global argc global argv global icolorbar global ds9 global pds9 set i 0 while {$i < $argc} { set item [lindex $argv $i] switch -- $item { -help { puts "For more information, use --help" QuitDS9 } -debug {incr i; ProcessDebugTclCmd argv i} -private { # backward compatibility } -title { incr i set ds9(title) [lindex $argv $i] set t "SAOImage $ds9(title)" wm title $ds9(top) "$t" wm iconname $ds9(top) "$t" } -language { incr i set pds9(language) [lindex $argv $i] set pds9(language,name) [LanguageToName $pds9(language)] } -msg { incr i set pds9(language,dir) [lindex $argv $i] } -xpa {incr i; ProcessXPAFirstCmd argv i} } incr i } } proc ProcessCommandLine {} { global argc global argv ProcessCommand $argv $argc } proc ds9Cmd {argv} { ProcessCommand $argv [llength $argv] } proc ProcessCommand {argv argc} { global ds9 global pds9 global help global current global contour global colorbar global debug global wcs global view global grid global bin global scale global minmax global zscale global iis global file set file(type) fits set file(mode) {} set file(layer) {} set file(mosaic) wcs set load 0 set noopts 0 set i 0 # Note: -help is processed previously for fv (temporary) set item {} while {$i < $argc} { set item [lindex $argv $i] switch -- $item { -- {set noopts 1} -? - -help - --help {HelpCommand} -version { ProcessSendVersionCmd puts stdout {} QuitDS9 } -2mass {incr i; Process2MASSCmd argv i} -3d - -3D {incr i; Process3DCmd argv i} -about {ProcessSendAboutCmd puts stdout {} {} {}} -align {incr i; ProcessAlignCmd argv i} -analysis {incr i; ProcessAnalysisCmd argv i {} {}} -array {set file(type) array} -asinh {set scale(type) asinh; ChangeScale} -bg - -background {incr i; ProcessBgCmd argv i} -backup {incr i; ProcessBackupCmd argv i} -bin {incr i; ProcessBinCmd argv i} -block {incr i; ProcessBlockCmd argv i} -blink {incr i; ProcessBlinkCmd argv i} -blue {set current(rgb) blue; RGBChannel} -cat - -catalog {incr i; ProcessCatalogCmd argv i} -cd {incr i; ProcessCDCmd argv i} -cmap {incr i; ProcessCmapCmd argv i} -colorbar {incr i; ProcessColorbarCmd argv i} -console {ProcessConsoleCmd argv i} -contours - -contour {incr i; ProcessContourCmd argv i} -nocontour {set contour(view) 0; ContourUpdate} -crop {incr i; ProcessCropCmd argv i} -crosshair {incr i; ProcessCrosshairCmd argv i} -cursor {incr i; ProcessCursorCmd argv i} -datacube - -cube {incr i; ProcessCubeCmd argv i} -debug {incr i; ProcessDebugCmd argv i} -dss - -dsssao {incr i; ProcessSAOCmd argv i} -dsseso {incr i; ProcessESOCmd argv i} -dssstsci {incr i; ProcessSTSCICmd argv i} -envi {set file(type) envi} -export {incr i; ProcessExportCmd argv i} -exit - -quit {ProcessQuitCmd argv i} -frame {incr i; ProcessFrameCmd argv i} -fifo { incr i set fifo [lindex $argv $i] if {$fifo!="none"} { set iis(ififo) ${fifo}i set iis(ofifo) ${fifo}o } else { set iis(ififo) none set iis(ofifo) none } } -fifo_only { set iis(port) 0 set iis(unix) none } -file - -fits {set file(type) fits; CommandFitsCmd argv i} -geometry { # already processed } -gif {set file(type) gif} -green {set current(rgb) green; RGBChannel} -grid {incr i; ProcessGridCmd argv i} -nogrid {set grid(view) 0; GridUpdateCurrent} -header {incr i; ProcessHeaderCmd argv i} -height {incr i; ProcessHeightCmd argv i} -histequ {set scale(type) histequ; ChangeScale} -horzgraph { # backward compatibility set view(graph,horz) 1 UpdateView } -nohorzgraph { # backward compatibility set view(graph,horz) 0 UpdateView } -iconify {incr i; ProcessIconifyCmd argv i} -iis {incr i; ProcessIISCmd argv i} -info { # backward compatibility set view(info) 1 UpdateView } -noinfo { # backward compatibility set view(info) 0 UpdateView } -invert {set colorbar(invert) 1; InvertColorbar} -jpg - -jpeg {set file(type) jpeg} -language { # already processed incr i } -lock {incr i; ProcessLockCmd argv i} -linear {set scale(type) linear; ChangeScale} -log {set scale(type) log; ChangeScale} -lower {ProcessLowerCmd argv i} -magnifier {incr i; ProcessMagnifierCmd argv i} -nomagnifier { # backward compatibility set view(magnifier) 0 UpdateView } -mask {incr i; set file(layer) [ProcessMaskCmd argv i]} -nomask {set file(layer) {}} -match {incr i; ProcessMatchCmd argv i} -mecube {set file(type) mecube} -memf - -multiframe {set file(type) multiframe} -minmax {incr i; ProcessMinMaxCmd argv i} -minmaxmode { # backward compatibility incr i set minmax(mode) [lindex $argv $i] } -minmaxsample { # backward compatibility incr i set minmax(sample) [lindex $argv $i] } -mode {incr i; ProcessModeCmd argv i} -mosaic { set file(type) mosaic CommandMosaicCmd argv i } -mosaicimage { set file(type) mosaicimage CommandMosaicImageCmd argv i } -mosaicimageiraf { # backward compatibility set file(type) mosaicimage set file(mosaic) iraf } -mosaicimagewcs { # backward compatibility set file(type) mosaicimage set file(mosaic) wcs } -mosaicimagewfpc2 { # backward compatibility set file(type) mosaicimage set file(mosaic) wfpc2 } -mosaiciraf { # backward compatibility set file(type) mosaic set file(mosaic) iraf } -mosaicwcs { # backward compatibility set file(type) mosaic set file(mosaic) wcs } -savempeg - -movie {incr i; ProcessMovieCmd argv i} -msg { # already processed incr i } -nameserver {incr i; ProcessNRESCmd argv i} -nan {incr i; ProcessNanCmd argv i} -nrrd {set file(type) nrrd} -nvss {incr i; ProcessNVSSCmd argv i} -orient {incr i; ProcessOrientCmd argv i} -pagesetup {incr i; ProcessPageSetupCmd argv i} -pspagesetup {incr i; ProcessPSPageSetupCmd argv i} -pan {incr i; ProcessPanCmd argv i} -panner { # backward compatibility set view(panner) 1 UpdateView } -nopanner { # backward compatibility set view(panner) 0 UpdateView } -photo { # backward compatibility set file(type) tiff } -pixeltable {incr i; ProcessPixelTableCmd argv i} -nopixeltable {PixelTableDestroyDialog} -plot {incr i; ProcessPlotCmd argv i {} {}} -png {set file(type) png} -port {incr i; set iis(port) [lindex $argv $i]} -inet_only - -port_only { set iis(ififo) none set iis(ofifo) none set iis(unix) none } -pow {set scale(type) pow; ChangeScale} -prefs {incr i; ProcessPrefsCmd argv i} -preserve {incr i; ProcessPreserveCmd argv i} -print {incr i; ProcessPrintCmd argv i} -psprint {incr i; ProcessPSPrintCmd argv i} -private { #already processed } -raise {ProcessRaiseCmd argv i} -red {set current(rgb) red; RGBChannel} -region - -regions - -regionfile {incr i; ProcessRegionsCmd argv i {} {}} -restore {incr i; ProcessRestoreCmd argv i} -rgb {incr i; ProcessRGBCmd argv i} -rgbcube {set file(type) rgbcube} -srgbcube { # backward compatibility set file(type) srgbcube } -rgbimage {set file(type) rgbimage} -rgbarray {set file(type) rgbarray} -rotate {incr i; ProcessRotateCmd argv i} -samp {incr i; ProcessSAMPCmd argv i} -savefits - -save {incr i; ProcessSaveCmd argv i} -saveimage {incr i; ProcessSaveImageCmd argv i} -scale - -ztrans {incr i; ProcessScaleCmd argv i} -scalelims - -scalelimits { #backward compatibility incr i set scale(min) [lindex $argv $i] incr i set scale(max) [lindex $argv $i] ChangeScaleLimit } -scalemode { #backward compatibility incr i set scale(mode) [string tolower [lindex $argv $i]] ChangeScaleMode } -scalescope { #backward compatibility incr i set scale(scope) [string tolower [lindex $argv $i]] ChangeScaleScope } -sfits { # backward compatibility set file(type) sfits CommandSFitsCmd argv i } -sia {incr i; ProcessSIACmd argv i} -shm {incr i; ProcessShmCmd argv i 1} -single {ProcessSingleCmd argv i} -sinh {set scale(type) sinh; ChangeScale} -skyview {incr i; ProcessSkyViewCmd argv i} -sleep {incr i; ProcessSleepCmd argv i} -slice {set file(mode) slice} -noslice {set file(mode) {}} -smooth {incr i; ProcessSmoothCmd argv i} -smosaic { # backward compatibility set file(type) smosaic CommandMosaicCmd argv i } -smosaiciraf { # backward compatibility set file(type) smosaic set file(mosaic) iraf } -smosaicwcs { # backward compatibility set file(type) smosaic set file(mosaic) wcs } -squared {set scale(type) squared; ChangeScale} -sqrt {set scale(type) sqrt; ChangeScale} -source {incr i; ProcessSourceCmd argv i} -tcl {incr i; ; ProcessTclCmd argv i {} {}} -theme { # backward compatibility incr i; ProcessThemeCmd argv i } -threads {incr i; ProcessThreadsCmd argv i} -tif - -tiff {set file(type) tiff} -tile {incr i; ProcessTileCmd argv i} -title { #already processed incr i } -unix {incr i; set iis(unix) [lindex $argv $i]} -unix_only { set iis(ififo) none set iis(ofifo) none set iis(port) 0 } -url {set file(type) url} -update {incr i; ProcessUpdateCmd argv i} -vertgraph { #backward compatibility set view(graph,vert) 1 UpdateView } -novertgraph { #backward compatibility set view(graph,vert) 0 UpdateView } -view {incr i; ProcessViewCmd argv i} -visual { #already processed } -vla - -first {incr i; ProcessVLACmd argv i} -vlss {incr i; ProcessVLSSCmd argv i} -vo {incr i; ProcessVOCmd argv i} -wcs {incr i; ProcessWCSCmd argv i {} {}} -wcsformat { #backward compatibility incr i set wcs(format,) [lindex $argv $i] } -web {incr i; ProcessWebCmd argv i} -width {incr i; ProcessWidthCmd argv i} -xpa {incr i; ProcessXPACmd argv i} -z1 { #backward compatibility incr i set scale(min) [lindex $argv $i] ChangeScaleLimit } -z2 { #backward compatibility incr i set scale(max) [lindex $argv $i] ChangeScaleLimit } -zscale {incr i; ProcessZScaleCmd argv i} -zmax {set scale(mode) zmax; ChangeScaleMode} -zoom {incr i; ProcessZoomCmd argv i} default { # allow abc, -, and -[foo] but not -abc if {!$noopts && [regexp -- {^-[a-zA-Z]+} $item]} { puts stderr "[msgcat::mc {Unknown command}]: $item" puts stderr "[msgcat::mc {For more information, use --help}]" return } if {$load == 0} { StartLoad incr load } switch $ds9(wm) { x11 - aqua {CommandLineLoad $item argv i} win32 { # if win32 and envoked via DOS shell # we must expand wildcards ourselves if {[catch {glob $item} fns]} { # cygwin/double click/DOS Shell no wildcards CommandLineLoad $item argv i } else { # DOS Shell with wildcards foreach fn $fns { CommandLineLoad $fn argv i } } } } FinishLoadPre } } incr i } if {$load != 0} { FinishLoadPost } } proc CommandLineLoad {item argvname iname} { upvar $argvname argv upvar $iname i global file global current if {$current(frame) != {}} { switch -- [$current(frame) get type] { base {CommandLineLoadBase $item $argvname $iname} rgb {CommandLineLoadRGB $item $argvname $iname} 3d {CommandLineLoad3D $item $argvname $iname} } } else { CommandLineLoadBase $item $argvname $iname } SetFileLast $file(type) $item } proc CommandLineLoadBase {item argvname iname} { upvar 2 $argvname argv upvar 2 $iname i global file global ds9 switch -- $file(type) { fits { # under windows, a double click on a # data file comes here MultiLoad $file(layer) $file(mode) LoadFitsFile $item $file(layer) $file(mode) } url { MultiLoad $file(layer) $file(mode) LoadURLFits $item $file(layer) $file(mode) } rgbimage { CreateRGBFrame LoadRGBImageFile $item } rgbcube { CreateRGBFrame LoadRGBCubeFile $item } mecube { MultiLoad LoadMECubeFile $item } multiframe { MultiLoad LoadMultiFrameFile $item } mosaicimage { MultiLoad $file(layer) switch -- $file(mosaic) { iraf {LoadMosaicImageIRAFFile $item $file(layer)} wfpc2 {LoadMosaicImageWFPC2File $item} default {LoadMosaicImageWCSFile $item $file(layer) $file(mosaic)} } } mosaic { switch -- $file(mosaic) { iraf {LoadMosaicIRAFFile $item $file(layer)} default {LoadMosaicWCSFile $item $file(layer) $file(mosaic)} } } sfits { #backward compatibility incr i MultiLoad $file(layer) $file(mode) LoadSFitsFile $item [lindex $argv $i] $file(layer) $file(mode) } srgbcube { #backward compatibility CreateRGBFrame incr i LoadSRGBCubeFile $item [lindex $argv $i] } smosaic { #backward compatibility incr i switch -- $file(mosaic) { iraf {LoadSMosaicIRAFFile $item [lindex $argv $i] $file(layer)} default {LoadSMosaicWCSFile $item [lindex $argv $i] $file(layer) $file(mosaic)} } } array { MultiLoad $file(layer) ImportArrayFile $item $file(layer) } rgbarray { CreateRGBFrame ImportRGBArrayFile $item } nrrd { MultiLoad $file(layer) ImportNRRDFile $item $file(layer) } envi { MultiLoad set fn $item set fn2 [lindex $argv [expr $i+1]] if {$fn2 == {} || [string range $fn2 0 0] == {-}} { set fn2 [FindENVIDataFile $fn] } else { incr i } ImportENVIFile $fn $fn2 } gif - tiff - jpeg - png { MultiLoad {} $file(mode) ImportPhotoFile $item $file(mode) } } } proc CommandLineLoadRGB {item argvname iname} { upvar 2 $argvname argv upvar 2 $iname i global file switch -- $file(type) { fits {LoadFitsFile $item {} $file(mode)} url {LoadURLFits $item {} $file(mode)} rgbimage { MultiLoadRGB LoadRGBImageFile $item } rgbcube { MultiLoadRGB LoadRGBCubeFile $item } mecube {LoadMECubeFile $item} multiframe { # not supported } mosaicimage { switch -- $file(mosaic) { iraf {LoadMosaicImageIRAFFile $item {}} wfpc2 {LoadMosaicImageWFPC2File $item} default {LoadMosaicImageWCSFile $item {} $file(mosaic)} } } mosaic { switch -- $file(mosaic) { iraf {LoadMosaicIRAFFile $item {}} default {LoadMosaicWCSFile $item {} $file(mosaic)} } } sfits { #backward compatibility incr i LoadSFitsFile $item [lindex $argv $i] {} $file(mode) } srgbcube { #backward compatibility MultiLoadRGB incr i LoadSRGBCubeFile $item [lindex $argv $i] } smosaic { #backward compatibility incr i switch -- $file(mosaic) { iraf {LoadMosaicIRAFSFitsFile $item [lindex $argv $i] {}} default {LoadMosaicWCSSFitsFile $item [lindex $argv $i] {} $file(mosaic)} } } array {ImportArrayFile $item {}} rgbarray { MultiLoadRGB ImportRGBArrayFile $item } nrrd {ImportNRRDFile $item {}} envi {} gif - tiff - jpeg - png { MultiLoadRGB ImportPhotoFile $item $file(mode) } } } proc CommandLineLoad3D {item argvname iname} { upvar 2 $argvname argv upvar 2 $iname i global file switch -- $file(type) { fits { MultiLoad {} $file(mode) LoadFitsFile $item {} $file(mode) } url { MultiLoad {} $file(mode) LoadURLFits $item {} $file(mode) } rgbimage { CreateRGBFrame LoadRGBImageFile $item } rgbcube { CreateRGBFrame LoadRGBCubeFile $item } mecube { MultiLoad LoadMECubeFile $item } multiframe { MultiLoad LoadMultiFrameFile $item } mosaicimage { MultiLoad switch -- $file(mosaic) { iraf {LoadMosaicImageIRAFFile $item {}} wfpc2 {LoadMosaicImageWFPC2File $item} default {LoadMosaicImageWCSFile $item {} $file(mosaic)} } } mosaic { switch -- $file(mosaic) { iraf {LoadMosaicIRAFFile $item {}} default {LoadMosaicWCSFile $item {} $file(mosaic)} } } sfits { #backward compatibility incr i MultiLoad {} $file(mode) LoadSFitsFile $item [lindex $argv $i] {} $file(mode) } srgbcube { #backward compatibility CreateRGBFrame incr i LoadSRGBCubeFile $item [lindex $argv $i] } smosaic { #backward compatibility incr i switch -- $file(mosaic) { iraf {LoadMosaicIRAFSFitsFile $item [lindex $argv $i] {}} default {LoadMosaicWCSSFitsFile $item [lindex $argv $i] {} $file(mosaic)} } } array { MultiLoad ImportArrayFile $item {} } rgbarray { CreateRGBFrame ImportRGBArrayFile $item } nrrd { MultiLoad ImportNRRDFile $item {} } envi { set fn $item set fn2 [lindex $argv [expr $i+1]] if {$fn2 == {} || [string range $fn2 0 0] == {-}} { set fn2 [FindENVIDataFile $fn] } else { incr i } ImportENVIFile $fn $fn2 } gif - tiff - jpeg - png { MultiLoad {} $file(mode) ImportPhotoFile $item $file(mode) } } } proc CommandFitsCmd {varname iname} { upvar $varname var upvar $iname i global file set item [string tolower [lindex $var [expr $i+1]]] switch -- $item { mosaicimage - mosaic { set file(type) $item incr i set item [string tolower [lindex $var [expr $i+1]]] switch -- $item { wfpc2 {incr i; set file(mosaic) wfpc2} default {CommandMosaicType $item $iname} } } mecube - multiframe - rgbcube - rgbimage { set file(type) $item incr i } } } proc CommandSFitsCmd {varname iname} { upvar $varname var upvar $iname i global file set item [string tolower [lindex $var [expr $i+1]]] switch -- $item { mosaic { set file(type) smosaic incr i set item [string tolower [lindex $var [expr $i+1]]] switch -- $item { wfpc2 {incr i; set file(mosaic) wfpc2} default {CommandMosaicType $item $iname} } } rgbcube { set file(type) srgbcube incr i } } } proc CommandMosaicImageCmd {varname iname} { upvar $varname var upvar $iname i global file set item [string tolower [lindex $var [expr $i+1]]] switch -- $item { wfpc2 {incr i; set file(mosaic) wfpc2} default {CommandMosaicType $item $iname} } } proc CommandMosaicCmd {varname iname} { upvar $varname var upvar $iname i global file set item [string tolower [lindex $var [expr $i+1]]] CommandMosaicType $item $iname } proc CommandMosaicType {sys iname} { upvar 2 $iname i global file switch $sys { iraf - wcs - wcsa - wcsb - wcsc - wcsd - wcse - wcsf - wcsg - wcsh - wcsi - wcsj - wcsk - wcsl - wcsm - wcsn - wcso - wcsp - wcsq - wcsr - wcss - wcst - wcsu - wcsv - wcsw - wcsx - wcsy - wcsz { incr i set file(mosaic) $sys } default {set file(mosaic) wcs} } } saods9/ds9/library/compass.tcl000644 000765 000000 00000004707 12705445646 016725 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CompassDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # variables set arrows [$var(frame) get marker $var(id) compass arrow] set var(narrow) [lindex $arrows 0] set var(earrow) [lindex $arrows 1] set labels [$var(frame) get marker $var(id) compass label] set var(north) [lindex $labels 0] set var(east) [lindex $labels 1] set s [$var(frame) get marker $var(id) compass system] set var(system) [lindex $s 0] set var(sky) [lindex $s 1] set var(skyformat) degrees # procs set var(which) compass set var(proc,apply) CompassApply set var(proc,close) CompassClose set var(proc,coordCB) CompassCoordCB # base MarkerBaseCenterDialog $varname set f $var(top).param # Labels ttk::label $f.ntitle -text [msgcat::mc {North}] ttk::entry $f.north -textvariable ${varname}(north) -width 13 ttk::checkbutton $f.narrow -variable ${varname}(narrow) \ -text [msgcat::mc {Arrow}] -command "CompassArrow $varname" ttk::label $f.etitle -text [msgcat::mc {East}] ttk::entry $f.east -textvariable ${varname}(east) -width 13 ttk::checkbutton $f.earrow -variable ${varname}(earrow) \ -text [msgcat::mc {Arrow}] -command "CompassArrow $varname" grid $f.ntitle $f.north $f.narrow -padx 2 -pady 2 -sticky w grid $f.etitle $f.east $f.earrow -padx 2 -pady 2 -sticky w } # actions proc CompassClose {varname} { upvar #0 $varname var global $varname MarkerBaseCenterClose $varname } proc CompassApply {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) compass label "\{$var(north)\}" "\{$var(east)\}" MarkerBaseCenterApply $varname } proc CompassArrow {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) compass arrow $var(narrow) $var(earrow) } # callbacks proc CompassCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "CompassCoordCB" } MarkerBaseCoordCB $varname MarkerBaseCenterMoveCB $varname $var(frame) marker $var(id) compass system $var(system) $var(sky) } saods9/ds9/library/composite.tcl000644 000765 000000 00000006164 12705445646 017261 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CompositeDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # variables set var(global) [$var(frame) get marker $var(id) composite global] # procs set var(proc,apply) CompositeApply set var(proc,close) CompositeClose set var(proc,coordCB) CompositeCoordCB # base MarkerBaseCenterDialog $varname # init MarkerBaseCenterRotateCB $varname # callbacks $var(frame) marker $var(id) callback rotate CompositeRotateCB $varname set f $var(top).param # Angle ttk::label $f.tangle -text [msgcat::mc {Angle}] ttk::entry $f.angle -textvariable ${varname}(angle) -width 13 ttk::label $f.uangle -text [msgcat::mc {Degrees}] ttk::label $f.tcomp -text [msgcat::mc {Angle Complement}] ttk::label $f.comp -textvariable ${varname}(comp) -width 13 -anchor w ttk::label $f.ucomp -text [msgcat::mc {Degrees}] # Global ttk::label $f.tglobal -text [msgcat::mc {Global Properties}] ttk::checkbutton $f.global -variable ${varname}(global) \ -command "CompositeGlobal $varname" grid $f.tangle $f.angle x $f.uangle -padx 2 -pady 2 -sticky w grid $f.tcomp $f.comp x $f.ucomp -padx 2 -pady 2 -sticky w grid $f.tglobal $f.global -padx 2 -pady 2 -sticky w CompositeCompAngle $varname } # actions proc CompositeClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback rotate CompositeRotateCB MarkerBaseCenterClose $varname } proc CompositeApply {varname} { upvar #0 $varname var global $varname CompositeRotate $varname MarkerBaseCenterApply $varname } proc CompositeRotate {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) angle $var(angle) $var(system) $var(sky) CompositeCompAngle $varname } proc CompositeCompAngle {varname} { upvar #0 $varname var global $varname set comp [expr 360-$var(angle)] if {[::math::fuzzy::tge $comp 360]} { set comp [expr $comp - 360] } if {[::math::fuzzy::tlt $comp 0]} { set comp [expr $comp + 360] } set var(comp) $comp } proc CompositeGlobal {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) composite global $var(global) } # callbacks proc CompositeCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "CompositeCoordCB" } MarkerBaseCoordCB $varname MarkerBaseCenterMoveCB $varname MarkerBaseCenterRotateCB $varname } proc CompositeRotateCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "CompositeRotateCB" } set var(angle) [$var(frame) get marker $var(id) angle \ $var(system) $var(sky)] CompositeCompAngle $varname } saods9/ds9/library/contour.tcl000644 000765 000000 00000101570 12766030733 016737 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ContourDef {} { global contour global icontour global pcontour set icontour(top) .ct set icontour(mb) .ctmb set contour(view) 0 set contour(copy) {} set contour(color) green set contour(width) 1 set contour(dash) 0 set contour(method) block set contour(smooth) 4 set contour(numlevel) 5 set contour(scale) linear set contour(mode) minmax set contour(log) 1000 set contour(min) {} set contour(max) {} # used for command line options # example % ds9 -contour log foo.fits -zscale -contour # .. contour scale is log, not zscale set contour(init,scale) 0 set contour(init,mode) 0 set contour(init,limits) 0 set pcontour(view) $contour(view) set pcontour(method) $contour(method) set pcontour(color) $contour(color) set pcontour(width) $contour(width) set pcontour(dash) $contour(dash) set pcontour(smooth) $contour(smooth) set pcontour(numlevel) $contour(numlevel) } proc ContourUpdate {} { global contour global icontour global dcontour global current if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } if {!$contour(view)} { $current(frame) contour delete return } ContourCheckParams if {[winfo exists $icontour(top)]} { set levels [$dcontour(txt) get 1.0 end] # remove endl and trim regsub -all "\n" $levels " " levels set levels [string trimright $levels " "] if {$levels == {}} { ContourGenerateDialog set levels [$dcontour(txt) get 1.0 end] # remove endl and trim regsub -all "\n" $levels " " levels set levels [string trimright $levels " "] } if {$levels != {} && [ContourCheckMinMax]} { $current(frame) contour create \ $contour(color) $contour(width) $contour(dash) \ $contour(method) $contour(numlevel) $contour(smooth) \ $contour(scale) $contour(log) $contour(mode) \ $contour(min) $contour(max) \ "\"$levels\"" } } else { set contour(scale) [$current(frame) get colorscale] set contour(log) [$current(frame) get colorscale log] set contour(mode) [$current(frame) get clip mode] set limits [$current(frame) get clip $contour(mode)] set contour(min) [lindex $limits 0] set contour(max) [lindex $limits 1] if {[ContourCheckMinMax]} { $current(frame) contour create \ $contour(color) $contour(width) $contour(dash) \ $contour(method) $contour(numlevel) $contour(smooth) \ $contour(scale) $contour(log) $contour(mode) \ $contour(min) $contour(max) \ "{}" } } } proc ContourCheckParams {} { global contour if {$contour(smooth) < 1} { set contour(smooth) 1 } if {$contour(numlevel) < 1} { set contour(numlevel) 1 } } proc ContourCheckMinMax {} { global contour if {$contour(min) != {} && $contour(max) != {} && !($contour(min) eq "nan") && !($contour(max) eq "nan") && [string is double $contour(min)] && [string is double $contour(max)] } { return 1 } else { return 0 } } proc ContourDialog {} { global contour global icontour global dcontour global current global ds9 # see if we already have a ctr window visible if {[winfo exists $icontour(top)]} { raise $icontour(top) return } # create the contour window set w $icontour(top) set mb $icontour(mb) Toplevel $w $mb 6 [msgcat::mc {Contour Parameters}] ContourDestroyDialog # local variables $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit $mb add cascade -label [msgcat::mc {Color}] -menu $mb.color $mb add cascade -label [msgcat::mc {Width}] -menu $mb.width $mb add cascade -label [msgcat::mc {Scale}] -menu $mb.scale $mb add cascade -label [msgcat::mc {Limits}] -menu $mb.limit $mb add cascade -label [msgcat::mc {Method}] -menu $mb.method menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] \ -command ContourApplyDialog $mb.file add command -label [msgcat::mc {Generate}] \ -command ContourGenerateDialog $mb.file add command -label [msgcat::mc {Clear}] \ -command ContourOffDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Copy Contours}] \ -command ContourCCopyDialog $mb.file add command -label "[msgcat::mc {Paste Contours}]..." \ -command ContourCPasteDialog $mb.file add separator $mb.file add command -label "[msgcat::mc {Load Contours}]..." \ -command ContourLoadDialog $mb.file add command -label "[msgcat::mc {Save Contours}]..." \ -command ContourSaveDialog $mb.file add separator $mb.file add command -label "[msgcat::mc {Load Contour Levels}]..." \ -command ContourLoadLevels $mb.file add command -label "[msgcat::mc {Save Contour Levels}]..." \ -command ContourSaveLevels $mb.file add separator $mb.file add command -label [msgcat::mc {Convert to Polygons}] \ -command Contour2Polygons $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command ContourDestroyDialog menu $mb.edit $mb.edit add command -label [msgcat::mc {Cut}] \ -command ContourCutDialog -accelerator "${ds9(ctrl)}X" $mb.edit add command -label [msgcat::mc {Copy}] \ -command ContourCopyDialog -accelerator "${ds9(ctrl)}C" $mb.edit add command -label [msgcat::mc {Paste}] \ -command ContourPasteDialog -accelerator "${ds9(ctrl)}V" ColorMenu $mb.color contour color {} WidthDashMenu $mb.width contour width dash {} {} menu $mb.scale $mb.scale add radiobutton -label [msgcat::mc {Linear}] \ -variable contour(scale) -value linear $mb.scale add radiobutton -label [msgcat::mc {Log}] \ -variable contour(scale) -value log $mb.scale add radiobutton -label [msgcat::mc {Power}] \ -variable contour(scale) -value pow $mb.scale add radiobutton -label [msgcat::mc {Square Root}] \ -variable contour(scale) -value sqrt $mb.scale add radiobutton -label [msgcat::mc {Squared}] \ -variable contour(scale) -value squared $mb.scale add radiobutton -label {ASINH} \ -variable contour(scale) -value asinh $mb.scale add radiobutton -label {SINH} \ -variable contour(scale) -value sinh $mb.scale add radiobutton \ -label [msgcat::mc {Histogram Equalization}] \ -variable contour(scale) -value histequ $mb.scale add separator $mb.scale add command -label "[msgcat::mc {Log Exponent}]..." \ -command ContourLogDialog menu $mb.limit $mb.limit add radiobutton -label [msgcat::mc {Min Max}] \ -variable contour(mode) -value minmax -command ContourModeDialog $mb.limit add separator $mb.limit add radiobutton -label {99.5%} \ -variable contour(mode) -value 99.5 -command ContourModeDialog $mb.limit add radiobutton -label {99%} \ -variable contour(mode) -value 99 -command ContourModeDialog $mb.limit add radiobutton -label {98%} \ -variable contour(mode) -value 98 -command ContourModeDialog $mb.limit add radiobutton -label {95%} \ -variable contour(mode) -value 95 -command ContourModeDialog $mb.limit add radiobutton -label {90%} \ -variable contour(mode) -value 90 -command ContourModeDialog $mb.limit add separator $mb.limit add radiobutton -label {ZScale} \ -variable contour(mode) -value zscale -command ContourModeDialog $mb.limit add radiobutton -label {ZMax} \ -variable contour(mode) -value zmax -command ContourModeDialog $mb.limit add radiobutton -label [msgcat::mc {User}] \ -variable contour(mode) -value user -command ContourModeDialog menu $mb.method $mb.method add radiobutton -label [msgcat::mc {Block}] \ -variable contour(method) -value block $mb.method add radiobutton -label [msgcat::mc {Smooth}] \ -variable contour(method) -value smooth # Param set f [ttk::labelframe $w.param -text [msgcat::mc {Contour}] -padding 2] slider $f.nslider 0 50 [msgcat::mc {Levels}] contour(numlevel) {} slider $f.rslider 0 32 [msgcat::mc {Smoothness}] contour(smooth) {} ttk::label $f.title -text [msgcat::mc {Limits}] ttk::label $f.ltitle -text [msgcat::mc {Low}] ttk::entry $f.low -textvariable contour(min) -width 10 ttk::label $f.htitle -text [msgcat::mc {High}] ttk::entry $f.high -textvariable contour(max) -width 10 grid $f.nslider -columnspan 6 -padx 2 -pady 2 grid $f.rslider -columnspan 6 -padx 2 -pady 2 grid $f.title $f.ltitle $f.low $f.htitle $f.high -padx 2 -pady 2 # Levels set f [ttk::labelframe $w.levels -text [msgcat::mc {Levels}] -padding 2] set dcontour(txt) [text $f.text \ -wrap none \ -width 15 \ -height 10 \ -font [font actual TkDefaultFont] \ -yscrollcommand [list $f.yscroll set] \ ] ttk::scrollbar $f.yscroll -command [list $dcontour(txt) yview] \ -orient vertical grid $f.text $f.yscroll -sticky news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] \ -command ContourApplyDialog ttk::button $f.generate -text [msgcat::mc {Generate}] \ -command ContourGenerateDialog ttk::button $f.clear -text [msgcat::mc {Clear}] \ -command ContourOffDialog ttk::button $f.close -text [msgcat::mc {Close}] \ -command ContourDestroyDialog pack $f.apply $f.generate $f.clear $f.close \ -side left -expand true -padx 2 -pady 4 # Fini grid $w.param $w.levels -sticky news grid $w.buttons - -sticky ew grid rowconfigure $w 0 -weight 1 grid columnconfigure $w 1 -weight 1 UpdateContourDialog } proc ContourApplyDialog {} { global contour set contour(view) 1 ContourUpdate } proc ContourDestroyDialog {} { global contour global icontour global dcontour if {[winfo exists $icontour(top)]} { destroy $icontour(top) destroy $icontour(mb) } unset dcontour } proc ContourGenerateDialog {} { global contour global dcontour global current ContourCheckParams $dcontour(txt) delete 1.0 end if {$current(frame) != {}} { if {([$current(frame) has fits]) && [ContourCheckMinMax]} { set ll [$current(frame) get colorscale level $contour(numlevel) \ $contour(min) $contour(max) \ $contour(scale) $contour(log)] regsub -all " " "$ll" "\n" ll $dcontour(txt) insert end "$ll" } } } proc ContourOffDialog {} { global contour global current set contour(view) 0 if {$current(frame) != {}} { $current(frame) contour delete $current(frame) contour delete aux } UpdateContourScale UpdateContourDialog } proc ContourCutDialog {} { global icontour global dcontour if {[winfo exists $icontour(top)]} { set w [focus -displayof $icontour(top)] if {$w == $dcontour(txt)} { tk_textCut $w } else { EntryCut $icontour(top) } } } proc ContourCopyDialog {} { global icontour global dcontour if {[winfo exists $icontour(top)]} { set w [focus -displayof $icontour(top)] if {$w == $dcontour(txt)} { tk_textCopy $w } else { EntryCopy $icontour(top) } } } proc ContourPasteDialog {} { global icontour global dcontour if {[winfo exists $icontour(top)]} { set w [focus -displayof $icontour(top)] if {$w == $dcontour(txt)} { tk_textPaste $w } else { EntryPaste $icontour(top) } } } proc ContourCCopyDialog {} { global contour global current set contour(copy) $current(frame) UpdateContourDialog } proc ContourCPasteDialog {} { global ds9 global current global contour global ed if {$current(frame) == {} || $contour(copy) == {}} { return } set w {.ctld} set ed(ok) 0 set ed(system) wcs set ed(sky) fk5 set ed(color) green set ed(width) 1 set ed(dash) 0 set ed(frame) $current(frame) set ed(original) 0 SetCoordSystem ed system sky {} AdjustCoordSystem ed system DialogCreate $w [msgcat::mc {Contour Paste}] ed(ok) # Param set f [ttk::frame $w.param1] ttk::checkbutton $f.original -text [msgcat::mc {Use Original Color/Width}] -variable ed(original) grid $f.original -padx 2 -pady 2 -sticky w set f [ttk::frame $w.param] ttk::label $f.coordtitle -text [msgcat::mc {Coordinate System}] CoordMenuButton $f.coordbutton ed system 1 {} {} {} CoordMenuEnable $f.coordbutton.menu ed system 1 {} {} ttk::label $f.colortitle -text [msgcat::mc {Color}] ColorMenuButton $f.colorbutton ed color {} ttk::label $f.widthtitle -text [msgcat::mc {Width}] ttk::menubutton $f.widthbutton -textvariable ed(width) \ -menu $f.widthbutton.menu WidthDashMenu $f.widthbutton.menu ed width dash {} {} grid $f.coordtitle $f.coordbutton -padx 2 -pady 2 -sticky w grid $f.colortitle $f.colorbutton -padx 2 -pady 2 -sticky w grid $f.widthtitle $f.widthbutton -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal ttk::separator $w.sep2 -orient horizontal pack $w.buttons $w.sep -side bottom -fill x # pack $w.param1 $w.sep2 $w.param2 -side top -fill both -expand true pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w if {$ed(ok)} { set ed(color) [string tolower $ed(color)] if {$current(frame) == $contour(copy)} { set ed(system) physical } set cc [$contour(copy) get contour $ed(system) fk5] if {$ed(original)} { $current(frame) contour paste cc } else { $current(frame) contour paste cc $ed(color) $ed(width) $ed(dash) } UpdateContourDialog } set rr $ed(ok) unset ed return $rr } proc ContourModeDialog {} { global current global contour if {$current(frame) != {}} { set limits [$current(frame) get clip $contour(mode)] set contour(min) [lindex $limits 0] set contour(max) [lindex $limits 1] } } proc ContourLoadLevels {} { set fn [OpenFileDialog contourlevlfbox] ContourLoadLevelsNow $fn } proc ContourLoadLevelsNow {fn} { global dcontour if {$fn == {}} { return } $dcontour(txt) delete 1.0 end set ch [open $fn r] if {[file extension $fn] == {.lev}} { $dcontour(txt) insert end [read $ch] } else { ContourLoadLevelsNew $ch } close $ch } proc ContourLoadLevelsNew {ch} { global dcontour while {[gets $ch line] != -1} { set aa [split $line {= }] regsub -all {[{}]} $aa {} aa regsub -all { +} $aa { } aa set aa [string trim $aa] if {![string compare -nocase [lindex $aa 0] {level}]} { set value [string trim [lindex $aa 1]] if {[string is double $value]} { $dcontour(txt) insert end "$value\n" } } } } proc ContourSaveLevels {} { set fn [SaveFileDialog contourlevsfbox] ContourSaveLevelsNow $fn } proc ContourSaveLevelsNow {fn} { global dcontour if {$fn == {}} { return } set id [open $fn w] puts -nonewline $id "[$dcontour(txt) get 1.0 end]" close $id } proc ContourSaveDialog {} { global ds9 global current global contour global ed global wcs set fn [SaveFileDialog contoursfbox] if {$fn == {} || $current(frame) == {}} { return } set w {.ctld} set ed(ok) 0 set ed(system) wcs set ed(sky) fk5 set ed(skyformat) degrees set ed(frame) $current(frame) SetCoordSystem ed system sky {} AdjustCoordSystem ed system DialogCreate $w [msgcat::mc {Contour Save}] ed(ok) # Param set f [ttk::frame $w.param] ttk::label $f.coordtitle -text [msgcat::mc {Coordinate System}] CoordMenuButton $f.coordbutton ed system 1 sky skyformat {} CoordMenuEnable $f.coordbutton.menu ed system 1 sky skyformat grid $f.coordtitle $f.coordbutton -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w if {$ed(ok)} { switch -- $ed(system) { image - physical - detector - amplifier {} default { if {![$current(frame) has wcs $ed(system)]} { Error "[msgcat::mc {Invalid WCS}] $ed(system)" return $ed(ok) } } } $current(frame) contour save "\{$fn\}" $ed(system) $ed(sky) UpdateContourDialog } set rr $ed(ok) unset ed return $rr } proc ContourLoadDialog {} { global ds9 global current global contour global ed set fn [OpenFileDialog contourlfbox] if {$fn == {} || $current(frame) == {}} { return } set w {.ctld} set ed(ok) 0 set ed(color) green set ed(width) 1 set ed(dash) 0 set ed(frame) $current(frame) set ed(original) 0 if {[file extension $fn] == {.con}} { ContourLoadOldDialog $fn } else { ContourLoadNewDialog $fn } } proc ContourLoadOldDialog {fn} { global ds9 global current global contour global ed set w {.ctld} set ed(ok) 0 set ed(system) wcs set ed(sky) fk5 set ed(color) green set ed(width) 1 set ed(dash) 0 set ed(frame) $current(frame) SetCoordSystem ed system sky {} AdjustCoordSystem ed system DialogCreate $w [msgcat::mc {Contour Paste}] ed(ok) # Param set f [ttk::frame $w.param] ttk::label $f.coordtitle -text [msgcat::mc {Coordinate System}] CoordMenuButton $f.coordbutton ed system 1 {} {} {} CoordMenuEnable $f.coordbutton.menu ed system 1 {} {} ttk::label $f.colortitle -text [msgcat::mc {Color}] ColorMenuButton $f.colorbutton ed color {} ttk::label $f.widthtitle -text [msgcat::mc {Width}] ttk::menubutton $f.widthbutton -textvariable ed(width) \ -menu $f.widthbutton.menu WidthDashMenu $f.widthbutton.menu ed width dash {} {} grid $f.coordtitle $f.coordbutton -padx 2 -pady 2 -sticky w grid $f.colortitle $f.colorbutton -padx 2 -pady 2 -sticky w grid $f.widthtitle $f.widthbutton -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w if {$ed(ok)} { set ed(color) [string tolower $ed(color)] $current(frame) contour load $ed(color) $ed(width) $ed(dash) \ "\{$fn\}" $ed(system) $ed(sky) UpdateContourDialog } set rr $ed(ok) unset ed return $rr } proc ContourLoadNewDialog {fn} { global ds9 global current global contour global ed set w {.ctld} set ed(ok) 0 set ed(color) green set ed(width) 1 set ed(dash) 0 set ed(frame) $current(frame) set ed(original) 0 DialogCreate $w [msgcat::mc {Contour Paste}] ed(ok) # Param set f [ttk::frame $w.param1] ttk::checkbutton $f.original -text [msgcat::mc {Use Original Color/Width}] \ -variable ed(original) grid $f.original -padx 2 -pady 2 -sticky w set f [ttk::frame $w.param2] ttk::label $f.colortitle -text [msgcat::mc {Color}] ColorMenuButton $f.colorbutton ed color {} ttk::label $f.widthtitle -text [msgcat::mc {Width}] ttk::menubutton $f.widthbutton -textvariable ed(width) \ -menu $f.widthbutton.menu WidthDashMenu $f.widthbutton.menu ed width dash {} {} grid $f.colortitle $f.colorbutton -padx 2 -pady 2 -sticky w grid $f.widthtitle $f.widthbutton -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal ttk::separator $w.sep2 -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param1 $w.sep2 $w.param2 -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w if {$ed(ok)} { set ed(color) [string tolower $ed(color)] if {$ed(original)} { $current(frame) contour load "\{$fn\}" } else { $current(frame) contour load "\{$fn\}" \ $ed(color) $ed(width) $ed(dash) } UpdateContourDialog } set rr $ed(ok) unset ed return $rr } proc Contour2Polygons {} { global current global contour if {$current(frame) != {}} { $current(frame) contour create polygon $current(frame) contour delete } } proc UpdateContourMenu {} { global contour global current global debug if {$debug(tcl,update)} { puts stderr "UpdateContourMenu" } if {($current(frame) == {})} { return } if {![$current(frame) has fits]} { return } set contour(view) [$current(frame) has contour] if {[$current(frame) has contour]} { set contour(color) [$current(frame) get contour color] set contour(width) [$current(frame) get contour width] set contour(dash) [$current(frame) get contour dash] set contour(method) [$current(frame) get contour method] set contour(smooth) [$current(frame) get contour smooth] set contour(numlevel) [$current(frame) get contour number level] } UpdateContourScale } proc UpdateContourScale {} { global contour global current global ds9 global debug if {$debug(tcl,update)} { puts stderr "UpdateContourScale" } if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } if {[$current(frame) has contour]} { set contour(scale) [$current(frame) get contour colorscale] set contour(mode) [$current(frame) get contour clip mode] set contour(log) [$current(frame) get contour colorscale log] set limits [$current(frame) get contour clip] set contour(min) [lindex $limits 0] set contour(max) [lindex $limits 1] } else { if {!($ds9(init) && $contour(init,scale))} { set contour(scale) [$current(frame) get colorscale] set contour(log) [$current(frame) get colorscale log] } if {!($ds9(init) && $contour(init,mode))} { set contour(mode) [$current(frame) get clip mode] } if {!($ds9(init) && $contour(init,limits))} { set limits [$current(frame) get clip $contour(mode)] set contour(min) [lindex $limits 0] set contour(max) [lindex $limits 1] } } } proc UpdateContourDialog {} { global contour global icontour global dcontour global current global debug if {$debug(tcl,update)} { puts stderr "UpdateContourDialog" } if {![winfo exists $icontour(top)]} { return } if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } if {[$current(frame) has contour]} { set levels [$current(frame) get contour level] regsub -all "\n" "$levels" " " levels set levels [join $levels "\n"] if {$levels != {}} { $dcontour(txt) delete 1.0 end $dcontour(txt) insert end $levels } else { ContourGenerateDialog } } else { ContourGenerateDialog } } proc ContourLogDialog {} { global contour EntryDialog [msgcat::mc {Scale}] [msgcat::mc {Log Exponent}] 10 contour(log) } proc ContourBackup {ch which fdir rdir} { switch [$which get type] { base - 3d {ContourBackupBase $ch $which $fdir $rdir} rgb {ContourBackupRGB $ch $which $fdir $rdir} } } proc ContourBackupBase {ch which fdir rdir} { if {[$which has contour]} { set color [$which get contour color] set width [$which get contour width] set dash [$which get contour dash] set method [$which get contour method] set numlevel [$which get contour number level] set smooth [$which get contour smooth] set scale [$which get contour colorscale] set log [$which get contour colorscale log] set mode [$which get contour clip mode] set limits [$which get contour clip] set levels [$which get contour level] puts $ch "$which contour create $color $width $dash $method $numlevel $smooth $scale $log $mode $limits \{\"$levels\"\}" } # delete old contours foreach ff [glob -directory $fdir -nocomplain "aux*.ctr"] { catch {file delete -force $ff} } if {[$which has contour aux]} { set fn $fdir/aux.ctr set rfn $rdir/aux.ctr $which contour save aux \"$fn\" physical fk5 puts $ch "$which contour load \{\"$rfn\"\}" } } proc ContourBackupRGB {ch which fdir rdir} { set sav [$which get rgb channel] foreach cc {red green blue} { $which rgb channel $cc puts $ch "$which rgb channel $cc" ContourBackupBase $ch $which $fdir $rdir } $which rgb channel $sav puts $ch "$which rgb channel $sav" } proc PrefsDialogContour {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Contours}] lappend dprefs(tabs) [ttk::frame $w.contour] set f [ttk::labelframe $w.contour.param -text [msgcat::mc {Contours}]] ttk::label $f.mtitle -text [msgcat::mc {Method}] ttk::menubutton $f.method -textvariable pcontour(method) \ -menu $f.method.menu global pcontour ttk::label $f.ctitle -text [msgcat::mc {Color}] ColorMenuButton $f.color pcontour color {} ttk::label $f.wtitle -text [msgcat::mc {Width}] ttk::menubutton $f.width -textvariable pcontour(width) -menu $f.width.menu WidthDashMenu $f.width.menu pcontour width dash {} {} grid $f.mtitle $f.method -padx 2 -pady 2 -sticky w grid $f.ctitle $f.color -padx 2 -pady 2 -sticky w grid $f.wtitle $f.width -padx 2 -pady 2 -sticky w set m $f.method.menu menu $m $m add radiobutton -label [msgcat::mc {Block}] \ -variable pcontour(method) -value block $m add radiobutton -label [msgcat::mc {Smooth}] \ -variable pcontour(method) -value smooth pack $f -side top -fill both -expand true } proc ProcessContourCmd {varname iname} { upvar $varname var upvar $iname i global contour global current # we need to be realized ProcessRealizeDS9 switch -- [string tolower [lindex $var $i]] { open {ContourDialog} close {ContourDestroyDialog} clear {ContourOffDialog} load { incr i set fn [lindex $var $i] # backward compatibility incr i set sys [lindex $var $i] incr i set sky [lindex $var $i] incr i set color [lindex $var $i] incr i set width [lindex $var $i] incr i set dash [lindex $var $i] incr i [ProcessContourFix sys sky color width dash] if {$fn != {}} { if {[file extension $fn] == {.con}} { $current(frame) contour load $color $width $dash "\{$fn\}" $sys $sky } else { $current(frame) contour load "\{$fn\}" $color $width $dash } } FileLast contourlfbox $fn UpdateContourDialog } save { incr i set fn [lindex $var $i] incr i set sys [lindex $var $i] incr i set sky [lindex $var $i] # Backward compatibility incr i set color {} incr i set width {} incr i set dash {} incr i [ProcessContourFix sys sky color width dash] if {$fn != {}} { $current(frame) contour save "\{$fn\}" $sys $sky } FileLast contoursfbox $fn } convert {Contour2Polygons} loadlevels { ContourDialog incr i ContourLoadLevelsNow [lindex $var $i] ContourUpdate } savelevels { ContourDialog incr i ContourSaveLevelsNow [lindex $var $i] } copy {ContourCCopyDialog} paste { incr i set sys [lindex $var $i] incr i set sky [lindex $var $i] incr i # backward compatibility set color [lindex $var $i] incr i set width [lindex $var $i] incr i set dash [lindex $var $i] incr i [ProcessContourFix sys sky color width dash] if {$current(frame) != {} && $contour(copy) != {}} { set cc [$contour(copy) get contour $sys $sky] $current(frame) contour paste cc $color $width $dash } } color { ContourDialog incr i set contour(color) [lindex $var $i] ContourUpdate } width { ContourDialog incr i set contour(width) [lindex $var $i] ContourUpdate } dash { ContourDialog incr i set contour(dash) [FromYesNo [lindex $var $i]] ContourUpdate } smooth { ContourDialog incr i set contour(smooth) [lindex $var $i] ContourGenerateDialog ContourUpdate } method { ContourDialog incr i set contour(method) [lindex $var $i] ContourGenerateDialog ContourUpdate } nlevels { ContourDialog incr i set contour(numlevel) [lindex $var $i] ContourGenerateDialog ContourUpdate } scale { set contour(init,scale) 1 ContourDialog incr i set contour(scale) [string tolower [lindex $var $i]] ContourGenerateDialog ContourUpdate } log { set contour(init,scale) 1 ContourDialog incr i switch -- [string tolower [lindex $var $i]] { exp { incr i set contour(log) [string tolower [lindex $var $i]] } default { incr i -1 set contour(log) [string tolower [lindex $var $i]] } } ContourGenerateDialog ContourUpdate } mode { set contour(init,mode) 1 ContourDialog incr i set contour(mode) [lindex $var $i] ContourModeDialog ContourGenerateDialog ContourUpdate } limits { set contour(init,limits) 1 ContourDialog incr i set contour(min) [lindex $var $i] incr i set contour(max) [lindex $var $i] ContourGenerateDialog ContourUpdate } levels { ContourDialog global dcontour $dcontour(txt) delete 1.0 end incr i $dcontour(txt) insert end [lindex $var $i] ContourUpdate } generate { ContourDialog ContourGenerateDialog ContourUpdate } yes - true - on - 1 - no - false - off - 0 { set contour(view) [FromYesNo [lindex $var $i]] ContourUpdate } default { set contour(view) 1 ContourUpdate incr i -1 } } } proc ProcessContourFix {sysname skyname colorname widthname dashname} { upvar $sysname sys upvar $skyname sky upvar $colorname color upvar $widthname width upvar $dashname dash global current set rr 0 # sys switch -- $sys { image - physical - detector - amplifier - wcs - wcsa - wcsb - wcsc - wcsd - wcse - wcsf - wcsg - wcsh - wcsi - wcsj - wcsk - wcsl - wcsm - wcsn - wcso - wcsp - wcsq - wcsr - wcss - wcst - wcsu - wcsv - wcsw - wcsx - wcsy - wcsz {} default { set dash $width set width $color set color $sky set sky $sys if {[$current(frame) has wcs wcs]} { set sys wcs } else { set sys physical } incr rr -1 } } # sky switch -- $sky { fk4 - b1950 - fk5 - j2000 - icrs - galactic - ecliptic {} default { set dash $width set width $color set color $sky set sky fk5 incr rr -1 } } # color if {[string range $color 0 0] == {-} || $color == {}} { set color {} set width {} set dash {} return -3 } switch -- $color { white - black - red - green - blue - cyan - magenta - yellow {} default { if {[string range $color 0 0] != "#"} { set dash $width set width $color set color green incr rr -1 } } } # width if {![string is integer $width]} { set dash $width set width 1 incr rr -1 } # dash switch -- $dash { yes - no - on - off - true - false - 0 - 1 {set dash [FromYesNo $dash]} default { set dash 0 incr rr -1 } } return $rr } proc ProcessSendContourCmd {proc id param sock fn} { global contour switch -- [lindex $param 0] { {} {$proc $id [ToYesNo $contour(view)]} color {$proc $id "$contour(color)\n"} width {$proc $id "$contour(width)\n"} dash {$proc $id [ToYesNo $contour(dash)]} smooth {$proc $id "$contour(smooth)\n"} method {$proc $id "$contour(method)\n"} nlevels {$proc $id "$contour(numlevel)\n"} scale {$proc $id "$contour(scale)\n"} log - {log exp} {$proc $id "$contour(log)\n"} mode {$proc $id "$contour(mode)\n"} limits {$proc $id "$contour(min) $contour(max)\n"} levels { global dcontour ContourDialog $proc $id "[$dcontour(txt) get 1.0 end]" } default { global current if {$current(frame) != {}} { ProcessSend $proc $id $sock $fn {.ctr} \ [$current(frame) get contour [lindex $param 0] [lindex $param 1]] } } } } saods9/ds9/library/convert.tcl000644 000765 000000 00000011567 12705445646 016742 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 set M_PI 3.14159265358979323846 # hours to degrees proc h2d {h} { return [expr ($h + 0.0) * 15.0] } # degrees to hours proc d2h {d} { return [expr ($d + 0.0) / 15.0] } # degrees to radians -- returns 0 <= r < PI proc d2r {d} { global M_PI while {[::math::fuzzy::tge $d 360.0]} { set d [expr $d - 360.0] } return [expr ($d + 0.0) * ($M_PI / 360.0)] } # radians to degrees -- returns 0 <= d < PI proc r2d {r} { global M_PI while {[::math::fuzzy::tge $r $M_PI]} { set r [expr $r - $M_PI] } return [expr ($r + 0.0) * (360.0 / $M_PI)] } # # strtod -- convert string to double # # Supports sexagesimal values: # 12:30:45.6 12h30m45.6s 12d30m45.6s "12 30 45.6" # Supports 12.5d (degrees) 12.5r (radians) # # A hidden global _strtod returns the number of arguments in the input. # if this value is 3 or 4, then hms or dms was input. This can be used # to determine that hms was input for ra so that you can convert hours # to degrees. # # set _strtod 0 proc strtod {d} { global _strtod set d [string trim $d] set d [string trimleft $d 0] if { $d == {} } { set d 0 } if { [string first - $d] >= 0 } { set sign "-" regsub -all -- "-" $d {} d } elseif { [string first + $d] >= 0 } { set sign {} regsub -all -- {\+} $d {} d } else { set sign {} } regsub -all {[ \t]*[hms][ \t]*} $d ":" d set arglist [split $d ": "] set _strtod 0 foreach arg $arglist { set args($_strtod) [string trimleft $arg 0] if { $args($_strtod) == {} } { set args($_strtod) 0 } incr _strtod } switch $_strtod { 2 { error "ERROR: strtod h:m:s|d:m:s|d" } 3 { set d [expr double($args(0)) + 0.0]; set m [expr double($args(1)) + 0.0]; set s [expr double($args(2)) + 0.0]; } 4 { set d [expr double($args(0)) + 0.0]; set m [expr double($args(1)) + 0.0]; set s [expr double($args(2)) + 0.0]; } default { set c [string range $d end end] if { $c == "r" } { set d [string trimright $d r] set d [r2d $d] } elseif { $c == "d" } { set d [string trimright $d d] } set m 0 set s 0 } } set val [expr $d + ($m / 60.0) + ($s / 3600.0)] # we don't want this. it rounds off to a precision of 6, which can # cause problems with h:m:s to degree convertions # set val [format "%s%g" $sign $val] set val "$sign$val" return $val } # # _uformat -- primative unit format converter to convert a float to a string # output format can be: # # or : (output in sexagesimal) or d (output in decimal) # proc _uformat {oformat value} { if { $value < 0.0 } { set sign "-" set d [expr -$value] } else { set sign {} set d $value } switch $oformat { {#} { set m [expr ($d - (int($d))) * 60] if { $m < 0 } { set m 0.0 } set s [expr ($m - (int($m))) * 60] if { $s < 0 } { set s 0.0 } return [format "%s%d %d %.3f" \ $sign [expr int($d)] [expr int($m)] $s] } : { set m [expr ($d - (int($d))) * 60] if { $m < 0 } { set m 0.0 } set s [expr ($m - (int($m))) * 60] if { $s < 0 } { set s 0.0 } return [format "%s%d:%d:%.3f" \ $sign [expr int($d)] [expr int($m)] $s] } d { return [format "%s%f" $sign $d] } } } # # uformat -- unit format converter # # uformat input_format output_format value # # where input format can be: # h (hours) d (degrees) m (minutes) s (seconds) # and output format can be the same, with a suffix of: # # or : (output in sexagesimal) or d (output in decimal) # proc uformat {iformat oformat value} { set itype [string index $iformat 0] set otype [string index $oformat 0] set oform [string index $oformat 1] if { $oform == {} } { set oform d } set value [strtod $value] switch $itype { h { switch $otype { h {return [_uformat $oform $value]} d {return [_uformat $oform [h2d $value]]} m {return [_uformat $oform [h2d $value]*60]} s {return [_uformat $oform [h2d $value]*60*60]} } } d { switch $otype { h {return [_uformat $oform [d2h $value]]} d {return [_uformat $oform $value]} m {return [_uformat $oform [expr $value*60]]} s {return [_uformat $oform [expr $value*60*60]]} } } m { switch $otype { h {return [_uformat $oform [d2h $value/60]]} d {return [_uformat $oform [expr $value/60]]} m {return [_uformat $oform $value]} s {return [_uformat $oform [expr $value*60]]} } } s { switch $otype { h {return [_uformat $oform [h2d $value/60/60]]} d {return [_uformat $oform [expr $value/60/60]]} m {return [_uformat $oform [expr $value/60]]} s {return [_uformat $oform $value]} } } } } saods9/ds9/library/coord.tcl000644 000765 000000 00000011606 12705445646 016362 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CoordDef {} { global pcoord # prefs only set pcoord(filename) 0 set pcoord(value) 1 set pcoord(image) 1 set pcoord(physical) 0 set pcoord(amplifier) 0 set pcoord(detector) 0 set pcoord(wcs) 1 foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} { set "pcoord(wcs$l)" 0 } } proc SetCoordSystem {varname system sky skyformat} { upvar #0 $varname var global $varname global current switch $var(system) { image - physical - detector - amplifier {} default { if {$current(frame) != {}} { set rr [$current(frame) get wcs] set var($system) [lindex $rr 0] if {$sky != {}} { set var($sky) [lindex $rr 1] } if {$skyformat != {}} { set var($skyformat) [lindex $rr 2] } } } } } proc AdjustCoordSystem {varname system} { upvar #0 $varname var global $varname global current switch -- $var($system) { image - physical - amplifier - detector {} wcs { if {$current(frame) != {}} { if {![$current(frame) has wcs $var($system)]} { set ${varname}($system) physical } } } default { if {$current(frame) != {}} { if {![$current(frame) has wcs $var($system)]} { if {[$current(frame) has wcs wcs]} { set ${varname}($system) wcs } else { set ${varname}($system) physical } } } } } } proc AdjustCoordSystem3d {varname system} { upvar #0 $varname var global $varname global current switch -- $var($system) { image {} wcs { if {$current(frame) != {}} { if {![$current(frame) has wcs 3d $var($system)]} { set ${varname}($system) image } } } default { if {$current(frame) != {}} { if {![$current(frame) has wcs 3d $var($system)]} { if {[$current(frame) has wcs wcs]} { set ${varname}($system) wcs } else { set ${varname}($system) image } } } } } } proc DisplayCoordDialog {which x y} { global pcoord global wcs set r {} if {$pcoord(filename)} { append r "[$which get fits file name full]" } foreach l {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { if {"$pcoord(wcs$l)" && [$which has wcs "wcs$l"]} { set cd "[$which get coordinates $x $y wcs$l $wcs(sky) $wcs(skyformat)]" if {[$which has wcs equatorial "wcs$l"]} { append r " [lindex $cd 0] [lindex $cd 1] $wcs(sky)" } else { set name [$which get wcs name "wcs$l"] if {$name != {}} { append r " [lindex $cd 0] [lindex $cd 1] $name" } else { append r " [lindex $cd 0] [lindex $cd 1] [lindex $cd 3]" } } } } if {$pcoord(detector) && [$which has detector]} { append r " [$which get coordinates $x $y detector] detector" } if {$pcoord(amplifier) && [$which has amplifier]} { append r " [$which get coordinates $x $y amplifier] amplifier" } if {$pcoord(physical) && [$which has physical]} { append r " [$which get coordinates $x $y physical] physical" } if {$pcoord(image)} { append r " [$which get coordinates $x $y image]" } if {$pcoord(value)} { append r " [$which get value canvas $x $y]" } append r " \n" SimpleTextDialog coordtxt [msgcat::mc {Coordinates}] \ 80 20 append bottom "$r" } proc PrefsDialogCoord {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Print Coordinates}] lappend dprefs(tabs) [ttk::frame $w.coord] # Print set f [ttk::labelframe $w.coord.print -text [msgcat::mc {Print}]] ttk::checkbutton $f.filename -text [msgcat::mc {Filename}] \ -variable pcoord(filename) ttk::checkbutton $f.value -text [msgcat::mc {Value}] \ -variable pcoord(value) ttk::checkbutton $f.wcs -text [msgcat::mc {WCS}] -variable pcoord(wcs) ttk::menubutton $f.mwcs -text [msgcat::mc {Multiple WCS}] -menu $f.mwcs.menu ttk::checkbutton $f.image -text [msgcat::mc {Image}] \ -variable pcoord(image) ttk::checkbutton $f.physical -text [msgcat::mc {Physical}] \ -variable pcoord(physical) ttk::checkbutton $f.amplifier -text [msgcat::mc {Amplifier}] \ -variable pcoord(amplifier) ttk::checkbutton $f.detector -text [msgcat::mc {Detector}] \ -variable pcoord(detector) set m $f.mwcs.menu menu $m foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} { $m add checkbutton -label "[msgcat::mc {WCS}] $l" \ -variable "pcoord(wcs$l)" } grid $f.filename -padx 2 -pady 2 -sticky w grid $f.value -padx 2 -pady 2 -sticky w grid $f.wcs $f.mwcs -padx 2 -pady 2 -sticky w grid $f.image -padx 2 -pady 2 -sticky w grid $f.physical -padx 2 -pady 2 -sticky w grid $f.amplifier -padx 2 -pady 2 -sticky w grid $f.detector -padx 2 -pady 2 -sticky w pack $w.coord.print -side top -fill both -expand true } saods9/ds9/library/cpanda.tcl000644 000765 000000 00000006120 12705445646 016475 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PandaDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # procs set var(which) panda set var(proc,apply) PandaApply set var(proc,close) PandaClose set var(proc,generate) PandaGenerate set var(proc,coordCB) PandaCoordCB set var(proc,editCB) PandaEditCB set var(proc,distCB) PandaDistCB # base panda dialog MarkerBasePandaDialog $varname set f $var(top).param # Radius ttk::label $f.tinner -text [msgcat::mc {Inner}] ttk::label $f.touter -text [msgcat::mc {Outer}] ttk::label $f.tradius -text [msgcat::mc {Radius}] ttk::entry $f.inner -textvariable ${varname}(inner) -width 13 ttk::entry $f.outer -textvariable ${varname}(outer) -width 13 DistMenuButton $f.uradius $varname dcoord 1 dformat \ [list $var(proc,distCB) $varname] DistMenuEnable $f.uradius.menu $varname dcoord 1 dformat # Annuli ttk::label $f.tannuli -text [msgcat::mc {Annuli}] ttk::entry $f.annuli -textvariable ${varname}(annuli) -width 13 grid x $f.tinner $f.touter -padx 2 -pady 2 -sticky w grid $f.tradius $f.inner $f.outer $f.uradius -padx 2 -pady 2 -sticky w grid $f.tannuli $f.annuli -padx 2 -pady 2 -sticky w # init - do this last PandaDistCB $varname } # actions proc PandaClose {varname} { upvar #0 $varname var global $varname MarkerBasePandaClose $varname } proc PandaApply {varname} { upvar #0 $varname var global $varname MarkerBasePandaApply $varname } proc PandaGenerate {varname} { upvar #0 $varname var global $varname MarkerBaseAnnulusGenerateCircle $varname MarkerBasePandaGenerateAngles $varname } # callbacks proc PandaCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "PandaCoordCB" } MarkerBasePandaCoordCB $varname } proc PandaEditCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "PandaEditCB" } set t [$var(frame) get marker $var(id) panda radius \ $var(dcoord) $var(dformat)] set last [expr [llength $t]-1] set var(inner) [lindex $t 0] set var(outer) [lindex $t $last] set var(annuli) $last $var(annulitxt) delete 1.0 end $var(annulitxt) insert end "$t" set a [$var(frame) get marker $var(id) panda angle $var(system) $var(sky)] set last [expr [llength $a]-1] set var(ang1) [lindex $a 0] set var(ang2) [lindex $a $last] set var(angnum) $last $var(angtxt) delete 1.0 end $var(angtxt) insert end "$a" } proc PandaDistCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "PandaDistCB" } MarkerBasePandaDistCB $varname } saods9/ds9/library/crop.tcl000644 000765 000000 00000025251 12745727001 016210 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CropDef {} { global crop global icrop set icrop(top) .cr set icrop(mb) .crmb set crop(lock) none set crop(system) wcs set crop(sky) fk5 set crop(skyformat) degrees set crop(dcoord) wcs set crop(dformat) degrees set crop(rcoord) wcs } proc CropReset {} { global current if {$current(frame) != {}} { $current(frame) crop UpdateCrop $current(frame) } } proc CropButton {which x y} { global rgb RGBEvalLock rgb(lock,crop) $which [list $which crop begin $x $y] } proc CropMotion {which x y} { $which crop motion $x $y } proc CropRelease {which x y} { global rgb RGBEvalLock rgb(lock,crop) $which [list $which crop end $x $y] UpdateCrop $which } proc Crop3dButton {which x y zz} { $which crop 3d begin $x $y $zz } proc Crop3dMotion {which x y zz} { $which crop 3d motion $x $y $zz } proc Crop3dRelease {which x y zz} { $which crop 3d end $x $y $zz UpdateCrop $which } proc UpdateCrop {which} { global current global debug if {$debug(tcl,update)} { puts stderr "UpdateCrop" } LockCrop $which UpdateCropDialog UpdateCubeDialog UpdateContourScale UpdateContourDialog UpdateScaleDialog GridUpdateZoom UpdateGraphXAxis $which UpdateGraphYAxis $which UpdateInfoBoxBase UpdateMain } proc CropDialog {} { global crop global icrop global dcrop global ds9 global current # see if we already have a window visible if {[winfo exists $icrop(top)]} { raise $icrop(top) return } # create the window set w $icrop(top) set mb $icrop(mb) Toplevel $w $mb 6 [msgcat::mc {Crop Parameters}] \ CropDestroyDialog # for CoordMenuButton set crop(frame) $current(frame) $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] -command CropApplyDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Reset}] -command CropReset $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] -command CropDestroyDialog EditMenu $mb icrop # Param set f [ttk::frame $w.param] ttk::label $f.title -text [msgcat::mc {Center}] ttk::entry $f.x -textvariable dcrop(x) -width 14 ttk::entry $f.y -textvariable dcrop(y) -width 14 set dcrop(cb) $f.center CoordMenuButton $dcrop(cb) crop system 1 sky skyformat UpdateCropDialog ttk::label $f.stitle -text [msgcat::mc {Size}] ttk::entry $f.w -textvariable dcrop(w) -width 14 ttk::entry $f.h -textvariable dcrop(h) -width 14 set dcrop(db) $f.size DistMenuButton $dcrop(db) crop dcoord 1 dformat UpdateCropDialog ttk::label $f.rtitle -text [msgcat::mc {3D}] ttk::entry $f.from -textvariable dcrop(zmin) -width 14 ttk::entry $f.to -textvariable dcrop(zmax) -width 14 set dcrop(rb) $f.range CoordMenuButton $dcrop(rb) crop rcoord 2 {} {} UpdateCropDialog grid $f.title $f.x $f.y $dcrop(cb) -padx 2 -pady 2 grid $f.stitle $f.w $f.h $dcrop(db) -padx 2 -pady 2 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] -command CropApplyDialog ttk::button $f.reset -text [msgcat::mc {Reset}] -command CropReset ttk::button $f.close -text [msgcat::mc {Close}] \ -command CropDestroyDialog pack $f.apply $f.reset $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true $w.param.x select range 0 end UpdateCropDialog } proc CropApplyDialog {} { global crop global icrop global dcrop global current if {$current(frame) != {}} { $current(frame) crop center $dcrop(x) $dcrop(y) \ $crop(system) $crop(sky) \ $dcrop(w) $dcrop(h) $crop(dcoord) $crop(dformat) if {[$current(frame) has fits cube]} { $current(frame) crop 3d $dcrop(zmin) $dcrop(zmax) $crop(rcoord) } UpdateCrop $current(frame) } } proc CropDestroyDialog {} { global icrop global dcrop if {[winfo exists $icrop(top)]} { destroy $icrop(top) destroy $icrop(mb) } unset dcrop } proc UpdateCropMenu {} { # can be changed by wcs SetCoordSystem crop system sky skyformat } proc UpdateCropDialog {} { global crop global icrop global dcrop global current global debug if {$debug(tcl,update)} { puts stderr "UpdateCropDialog" } if {![winfo exists $icrop(top)]} { return } set w $icrop(top) if {$current(frame) != {}} { set crop(frame) $current(frame) if {[$current(frame) has fits]} { # now make sure we have the coord systems AdjustCoordSystem crop system CoordMenuEnable $dcrop(cb).menu crop system 1 sky skyformat CoordMenuButtonCmd crop system sky {} AdjustCoordSystem crop dcoord DistMenuEnable $dcrop(db).menu crop dcoord 1 dformat DistMenuButtonCmd crop dcoord dformat {} AdjustCoordSystem3d crop rcoord CoordMenuEnable $dcrop(rb).menu crop rcoord 2 {} {} CoordMenuButtonCmd crop rcoord {} {} set rr [$current(frame) get crop center \ $crop(system) $crop(sky) $crop(skyformat) \ $crop(dcoord) $crop(dformat)] set dcrop(x) [lindex $rr 0] set dcrop(y) [lindex $rr 1] set dcrop(w) [lindex $rr 2] set dcrop(h) [lindex $rr 3] if {[$current(frame) has fits cube]} { set ss [$current(frame) get crop 3d $crop(rcoord)] set dcrop(zmin) [lindex $ss 0] set dcrop(zmax) [lindex $ss 1] grid $w.param.rtitle $w.param.from $w.param.to $dcrop(rb) \ -padx 2 -pady 2 } else { set dcrop(zmin) {} set dcrop(zmax) {} grid forget $w.param.rtitle $w.param.from $w.param.to $dcrop(rb) } return } } grid forget $w.param.rtitle $w.param.from $w.param.to $dcrop(rb) CoordMenuReset $dcrop(cb).menu crop system 1 sky skyformat DistMenuReset $dcrop(db).menu crop dcoord 1 dformat CoordMenuReset $dcrop(rb).menu crop rcoord 2 {} {} set dcrop(x) {} set dcrop(y) {} set dcrop(w) {} set dcrop(h) {} set dcrop(zmin) {} set dcrop(zmax) {} } proc MatchCropCurrent {sys} { global current if {$current(frame) != {}} { MatchCrop $current(frame) $sys } } proc MatchCrop {which sys} { global ds9 global rgb # make sure matrices have been updated RealizeDS9 set tt [$which has crop] set datasec [$which get datasec] if {$tt} { switch -- $sys { image - physical - amplifier - detector { set rr [$which get crop center $sys fk5 degrees $sys degrees] set r(x) [lindex $rr 0] set r(y) [lindex $rr 1] set r(w) [lindex $rr 2] set r(h) [lindex $rr 3] set qq [$which get crop 3d image] foreach ff $ds9(frames) { if {$ff != $which} { RGBEvalLock rgb(lock,crop) $ff [list $ff datasec $datasec] RGBEvalLock rgb(lock,crop) $ff [list $ff crop center $r(x) $r(y) $sys fk5 $r(w) $r(h) $sys degrees] RGBEvalLock rgb(lock,crop) $ff [list $ff crop 3d $qq image] } } } wcs { set ss [lindex [$which get wcs] 0] if {[$which has wcs $ss]} { set rr [$which get crop center $ss fk5 degrees $ss degrees] set r(x) [lindex $rr 0] set r(y) [lindex $rr 1] set r(w) [lindex $rr 2] set r(h) [lindex $rr 3] set qq [$which get crop 3d $ss] foreach ff $ds9(frames) { if {$ff != $which} { if {[$ff has wcs $ss]} { RGBEvalLock rgb(lock,crop) $ff [list $ff crop center $r(x) $r(y) $ss fk5 $r(w) $r(h) $ss degrees] RGBEvalLock rgb(lock,crop) $ff [list $ff crop 3d $qq $ss] } } } } } } } else { foreach ff $ds9(frames) { if {$ff != $which} { RGBEvalLock rgb(lock,crop) $ff [list $ff crop] RGBEvalLock rgb(lock,crop) $ff [list $ff crop 3d] } } } } proc LockCropCurrent {} { global current if {$current(frame) != {}} { LockCrop $current(frame) } } proc LockCrop {which} { global crop switch -- $crop(lock) { none {} default {MatchCrop $which $crop(lock)} } } proc CropBackup {ch which} { switch [$which get type] { base - 3d {CropBackupBase $ch $which} rgb {CropBackupRGB $ch $which} } } proc CropBackupBase {ch which} { if {[$which has crop]} { if {[$which has fits]} { set rr [$which get crop physical fk5 degrees] puts $ch "$which crop $rr physical fk5" if {[$which has fits cube]} { set ss [$which get crop 3d image] puts $ch "$which crop 3d $ss image" } } } } proc CropBackupRGB {ch which} { set sav [$which get rgb channel] foreach cc {red green blue} { $which rgb channel $cc puts $ch "$which rgb channel $cc" CropBackupBase $ch $which } $which rgb channel $sav puts $ch "$which rgb channel $sav" } # Process Cmds proc ProcessCropCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized ProcessRealizeDS9 global crop global current switch -- [string tolower [lindex $var $i]] { match { incr i MatchCropCurrent [lindex $var $i] } lock { incr i set crop(lock) [lindex $var $i] LockCropCurrent } open {CropDialog} close {CropDestroyDialog} reset {CropReset} 3d { incr i 1 set zmin [lindex $var [expr $i+0]] set zmax [lindex $var [expr $i+1]] set sys [lindex $var [expr $i+2]] incr i 1 incr i [FixSpecSystem sys physical] $current(frame) crop 3d $zmin $zmax $sys } default { set x [lindex $var [expr $i+0]] set y [lindex $var [expr $i+1]] set w [lindex $var [expr $i+2]] set h [lindex $var [expr $i+3]] set sys [lindex $var [expr $i+4]] set sky [lindex $var [expr $i+5]] set dformat [lindex $var [expr $i+6]] incr i 3 incr i [FixSpec sys sky dformat physical fk5 degrees] $current(frame) crop center $x $y $sys $sky $w $h $sys $dformat } } } proc ProcessSendCropCmd {proc id param} { global crop global current switch -- [string tolower [lindex $param 0]] { lock {$proc $id "$crop(lock)\n"} 3d { set sys [lindex $param 1] FixSpecSystem sys physical if {$current(frame) != {}} { $proc $id "[$current(frame) get crop 3d $sys]\n" } } default { set sys [lindex $param 0] set sky [lindex $param 1] set format [lindex $param 2] set dformat [lindex $param 3] FixSpec sys sky format physical fk5 degrees if {$current(frame) != {}} { $proc $id "[$current(frame) get crop center $sys $sky $format $sys $dformat]\n" } } } } saods9/ds9/library/crosshair.tcl000644 000765 000000 00000015523 12750203255 017237 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CrosshairDef {} { global crosshair global icrosshair set icrosshair(top) .ch set icrosshair(mb) .chmb set crosshair(lock) none # set via wcs() set crosshair(system) wcs set crosshair(sky) fk5 set crosshair(skyformat) degrees } proc CrosshairButton {which x y} { global ds9 global crosshair $which crosshair canvas $x $y UpdateCrosshairDialog LockCrosshair $which } proc CrosshairArrowKey {which x y} { global ds9 global crosshair $which crosshair warp $x $y UpdateCrosshairDialog LockCrosshair $which set coord [$which get crosshair canvas] set X [lindex $coord 0] set Y [lindex $coord 1] UpdateColormapLevelMosaic $which $X $Y canvas UpdateInfoBox $which $X $Y canvas UpdatePixelTableDialog $which $X $Y canvas UpdateGraph $which $X $Y canvas } proc CrosshairTo {x y sys sky} { global crosshair global current global ds9 set current(mode) crosshair ChangeMode if {$current(frame) != {}} { $current(frame) crosshair $sys $sky $x $y set coord [$current(frame) get crosshair canvas] UpdateColormapLevelMosaic $current(frame) \ [lindex $coord 0] [lindex $coord 1] canvas UpdateInfoBox $current(frame) \ [lindex $coord 0] [lindex $coord 1] canvas if {$crosshair(lock) != "none"} { set coord [$current(frame) get crosshair $crosshair(lock)] foreach f $ds9(frames) { if {$f != $current(frame) && [$f has system $crosshair(lock)]} { $f crosshair $crosshair(lock) $coord } } } } } proc MatchCrosshairCurrent {sys} { global current if {$current(frame) != {}} { MatchCrosshair $current(frame) $sys } } proc MatchCrosshair {which sys} { global crosshair global ds9 global current if {$current(mode) != {crosshair}} { return } switch -- $sys { image - physical - amplifier - detector { set coord [$which get crosshair $sys] foreach ff $ds9(frames) { if {$ff != $which} { $ff crosshair $sys $coord } } } wcs { set ss [lindex [$which get wcs] 0] if {[$which has wcs $ss]} { set coord [$which get crosshair $ss] foreach ff $ds9(frames) { if {$ff != $which} { if {[$ff has wcs $ss]} { $ff crosshair $ss $coord } } } } } } } proc LockCrosshairCurrent {} { global current if {$current(frame) != {}} { LockCrosshair $current(frame) } } proc LockCrosshair {which} { global crosshair switch -- $crosshair(lock) { none {} default {MatchCrosshair $which $crosshair(lock)} } } proc CrosshairDialog {} { global crosshair global icrosshair global dcrosshair global current # see if we already have a window visible if {[winfo exists $icrosshair(top)]} { raise $icrosshair(top) return } # create the window set w $icrosshair(top) set mb $icrosshair(mb) Toplevel $w $mb 6 [msgcat::mc {Crosshair Parameters}] \ CrosshairDestroyDialog # for CoordMenuButton set crosshair(frame) $current(frame) $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] \ -command CrosshairApplyDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command CrosshairDestroyDialog EditMenu $mb icrosshair # Param set f [ttk::frame $w.param] ttk::label $f.title -text [msgcat::mc {Crosshair}] ttk::entry $f.x -textvariable dcrosshair(x) -width 14 ttk::entry $f.y -textvariable dcrosshair(y) -width 14 set dcrosshair(cb) $f.system CoordMenuButton $dcrosshair(cb) crosshair system 1 sky skyformat \ UpdateCrosshairDialog grid $f.title $f.x $f.y $f.system -padx 2 -pady 2 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] \ -command CrosshairApplyDialog ttk::button $f.close -text [msgcat::mc {Close}] \ -command CrosshairDestroyDialog pack $f.apply $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true $w.param.x select range 0 end UpdateCrosshairDialog } proc CrosshairApplyDialog {} { global crosshair global dcrosshair CrosshairTo $dcrosshair(x) $dcrosshair(y) $crosshair(system) $crosshair(sky) } proc CrosshairDestroyDialog {} { global icrosshair global dcrosshair if {[winfo exists $icrosshair(top)]} { destroy $icrosshair(top) destroy $icrosshair(mb) } unset dcrosshair } proc UpdateCrosshairDialog {} { global crosshair global icrosshair global dcrosshair global current global debug if {$debug(tcl,update)} { puts stderr "UpdateCrosshairDialog" } if {![winfo exists $icrosshair(top)]} { return } if {$current(frame) != {}} { set crosshair(frame) $current(frame) if {[$current(frame) has fits]} { # now make sure we have the coord systems AdjustCoordSystem crosshair system CoordMenuEnable $dcrosshair(cb).menu crosshair system 1 sky skyformat CoordMenuButtonCmd crosshair system sky {} } else { CoordMenuReset $dcrosshair(cb).menu crosshair system 1 sky skyformat } } if {$current(frame) != {}} { set coord [$current(frame) get crosshair $crosshair(system) \ $crosshair(sky) $crosshair(skyformat)] set dcrosshair(x) [lindex $coord 0] set dcrosshair(y) [lindex $coord 1] } else { set dcrosshair(x) {} set dcrosshair(y) {} } } proc ProcessCrosshairCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized ProcessRealizeDS9 switch -- [string tolower [lindex $var $i]] { match { incr i MatchCrosshairCurrent [lindex $var $i] } lock { incr i set crosshair(lock) [lindex $var $i] LockCrosshairCurrent } default { set x [lindex $var [expr $i+0]] set y [lindex $var [expr $i+1]] set sys [lindex $var [expr $i+2]] set sky [lindex $var [expr $i+3]] set format {} incr i 1 incr i [FixSpec sys sky format physical fk5 degrees] CrosshairTo $x $y $sys $sky UpdateCrosshairDialog } } } proc ProcessSendCrosshairCmd {proc id param} { global crosshair global current switch -- [string tolower $param] { lock {$proc $id "$crosshair(lock)\n"} default { set sys [lindex $param 0] set sky [lindex $param 1] set format [lindex $param 2] FixSpec sys sky format physical fk5 degrees if {$current(frame) != {}} { $proc $id "[$current(frame) get crosshair $sys $sky $format]\n" } } } } saods9/ds9/library/cube.tcl000644 000765 000000 00000044722 12705445646 016177 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CubeDef {} { global icube global cube set icube(top) .cube set icube(mb) .cubemb set icube(id) 0 set cube(lock) none set cube(lock,axes) 0 # needs work, at high values, but cropped, causes problems # set cube(format) {%.5g} # axes cnt starts at 0 set cube(axis) 2 set cube(system) wcs set cube(axes) 123 } proc MatchCubeCurrent {sys} { global current if {$current(frame) != {}} { MatchCube $current(frame) $sys } } proc MatchCube {which sys} { global cube global ds9 global rgb set naxes [$which get fits naxes] for {set ii 2} {$ii<$naxes} {incr ii} { set slice($ii) [$which get fits slice $ii $sys] } foreach ff $ds9(frames) { if {$ff != $which} { for {set ii 2} {$ii<$naxes} {incr ii} { RGBEvalLock rgb(lock,slice) $ff "$ff update fits slice $ii $slice($ii) $sys" } } } } proc LockCubeCurrent {} { global current if {$current(frame) != {}} { LockCube $current(frame) } } proc LockCube {which} { global cube switch -- $cube(lock) { none {} default {MatchCube $which $cube(lock)} } } proc CubeSlice {slice} { global dcube global cube global current global rgb RGBEvalLockCurrent rgb(lock,slice) "$current(frame) update fits slice $cube(axis) $slice" set dcube(image,$cube(axis)) $slice set dcube(wcs,$cube(axis)) [$current(frame) get coordinates $slice image $cube(system) $cube(axis)] UpdateCube } proc CubeStop {} { global icube if {$icube(id)>0} { after cancel $icube(id) set icube(id) 0 } } proc CubePlay {} { global icube if {$icube(id) == 0} { CubeTimer } } proc CubeTimer {} { global icube global dcube global cube global current global blink global rgb if {$current(frame) != {}} { if {[$current(frame) has fits]} { set slice [$current(frame) get fits slice $cube(axis)] if {$cube(axis)==2} { # get cropped version set ss [$current(frame) get crop 3d image] set first [lindex $ss 0] set last [lindex $ss 1] } else { set first 1 set last [$current(frame) get fits depth $cube(axis)] } if {$slice == $last} { set slice $first } else { set slice [expr $slice+1] } CubeSlice $slice } else { set dcube(image,$cube(axis)) 1 set dcube(wcs,$cube(axis)) 1 } UpdateCube } set icube(id) [after $blink(interval) CubeTimer] } proc CubeFirst {} { global dcube global cube global current global rgb CubeStop if {$current(frame) != {}} { if {[$current(frame) has fits]} { if {$cube(axis)==2} { # get cropped version set ss [$current(frame) get crop 3d image] set first [lindex $ss 0] } else { set first 1 } CubeSlice $first } else { set dcube(image,$cube(axis)) 1 set dcube(wcs,$cube(axis)) 1 } UpdateCube } } proc CubePrev {} { global dcube global cube global current global rgb CubeStop if {$current(frame) != {}} { if {[$current(frame) has fits]} { set slice [$current(frame) get fits slice $cube(axis)] if {$cube(axis)==2} { # get cropped version set ss [$current(frame) get crop 3d image] set first [lindex $ss 0] set last [lindex $ss 1] } else { set first 1 set last [$current(frame) get fits depth $cube(axis)] } if {$slice == $first} { set slice $last } else { set slice [expr $slice-1] } CubeSlice $slice } else { set dcube(image,$cube(axis)) 1 set dcube(wcs,$cube(axis)) 1 } UpdateCube } } proc CubeNext {} { global dcube global cube global current global rgb CubeStop if {$current(frame) != {}} { if {[$current(frame) has fits]} { set slice [$current(frame) get fits slice $cube(axis)] if {$cube(axis)==2} { # get cropped version set ss [$current(frame) get crop 3d image] set first [lindex $ss 0] set last [lindex $ss 1] } else { set first 1 set last [$current(frame) get fits depth $cube(axis)] } if {$slice == $last} { set slice $first } else { set slice [expr $slice+1] } CubeSlice $slice } else { set dcube(image,$cube(axis)) 1 set dcube(wcs,$cube(axis)) 1 } UpdateCube } } proc CubeLast {} { global dcube global cube global current global rgb CubeStop if {$current(frame) != {}} { if {[$current(frame) has fits]} { if {$cube(axis)==2} { # get cropped version set ss [$current(frame) get crop 3d image] set last [lindex $ss 1] } else { set last [$current(frame) get fits depth $cube(axis)] } CubeSlice $last } else { set dcube(image,$cube(axis)) 1 set dcube(wcs,$cube(axis)) 1 } UpdateCube } } proc CubeApply {ii} { global dcube global cube global current global rgb CubeStop if {$current(frame) != {}} { if {[$current(frame) has fits]} { set ss [expr int([$current(frame) get coordinates $dcube(wcs,$ii) $cube(system) image $cube(axis)])] if {$ss<1} { set ss 1 } set depth [$current(frame) get fits depth $ii] if {$ss>$depth} { set ss $depth } set dcube(image,$ii) $ss set dcube(wcs,$ii) [$current(frame) get coordinates $dcube(image,$ii) image $cube(system) $cube(axis)] RGBEvalLockCurrent rgb(lock,slice) "$current(frame) update fits slice $ii $ss" } else { set dcube(image,$cube(axis)) 1 set dcube(wcs,$cube(axis)) 1 } UpdateCube } } proc UpdateCube {} { global current LockCubeCurrent UpdateScaleDialog UpdateContourScale UpdateContourDialog UpdateGraphYAxis $current(frame) UpdateInfoBoxBase UpdateMain } # used by backup proc CubeDialog {} { global icube global dcube global cube global current global ds9 global blink # see if we already have a window visible if {[winfo exists $icube(top)]} { raise $icube(top) return } # create the cube window set w $icube(top) set mb $icube(mb) Toplevel $w $mb 6 [msgcat::mc {Cube}] CubeDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit $mb add cascade -label [msgcat::mc {Interval}] -menu $mb.blink $mb add cascade -label [msgcat::mc {Coordinate}] -menu $mb.coord $mb add cascade -label [msgcat::mc {Axes Order}] -menu $mb.axes menu $mb.file $mb.file add command -label [msgcat::mc {First}] -command CubeFirst $mb.file add command -label [msgcat::mc {Previous}] -command CubePrev $mb.file add command -label [msgcat::mc {Stop}] -command CubeStop $mb.file add command -label [msgcat::mc {Play}] -command CubePlay $mb.file add command -label [msgcat::mc {Next}] -command CubeNext $mb.file add command -label [msgcat::mc {Last}] -command CubeLast $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command CubeDestroyDialog EditMenu $mb icube menu $mb.blink $mb.blink add radiobutton -label ".125 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 125 $mb.blink add radiobutton -label ".25 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 250 $mb.blink add radiobutton -label ".5 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 500 $mb.blink add radiobutton -label "1 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 1000 $mb.blink add radiobutton -label "2 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 2000 $mb.blink add radiobutton -label "4 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 4000 $mb.blink add radiobutton -label "8 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 8000 CoordMenu $mb.coord cube system 2 {} {} UpdateCubeDialog menu $mb.axes $mb.axes add radiobutton -label {1 2 3} -variable cube(axes) \ -value 123 -command CubeAxes $mb.axes add radiobutton -label {1 3 2} -variable cube(axes) \ -value 132 -command CubeAxes $mb.axes add radiobutton -label {2 1 3} -variable cube(axes) \ -value 213 -command CubeAxes $mb.axes add radiobutton -label {2 3 1} -variable cube(axes) \ -value 231 -command CubeAxes $mb.axes add radiobutton -label {3 1 2} -variable cube(axes) \ -value 312 -command CubeAxes $mb.axes add radiobutton -label {3 2 1} -variable cube(axes) \ -value 321 -command CubeAxes # Param set f [ttk::frame $w.param] set dcube(taxis) [ttk::label $f.taxis -text [msgcat::mc {Axis}]] set dcube(tslice) [ttk::label $f.tslice -text [msgcat::mc {Slice}]] set dcube(twcs) [ttk::label $f.twcs -textvariable dcube(vcoord) \ -anchor center] for {set ii 2} {$ii<$ds9(FTY_MAXAXES)} {incr ii} { set dcube(chk,$ii) [ttk::radiobutton $f.chk$ii \ -text [expr $ii+1] \ -variable cube(axis) \ -value $ii] set dcube(lslice,$ii) [ttk::label $f.slice$ii \ -textvariable dcube(image,$ii) \ -width 5 -anchor center] set dcube(sslice,$ii) [slider $f.scale$ii 0 100 {} \ dcube(wcs,$ii) [list CubeApply $ii] 4 10] } # Buttons set f [ttk::frame $w.buttons] ttk::button $f.first -text [msgcat::mc {First}] -width -6 -command CubeFirst ttk::button $f.prev -text [msgcat::mc {Previous}] -width -6 \ -command CubePrev ttk::button $f.stop -text [msgcat::mc {Stop}] -width -6 -command CubeStop ttk::button $f.play -text [msgcat::mc {Play}] -width -6 -command CubePlay ttk::button $f.next -text [msgcat::mc {Next}] -width -6 -command CubeNext ttk::button $f.last -text [msgcat::mc {Last}] -width -6 -command CubeLast pack $f.first $f.prev $f.stop $f.play $f.next $f.last \ -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true UpdateCubeDialog } proc CubeDestroyDialog {} { global icube global dcube CubeStop if {[winfo exists $icube(top)]} { destroy $icube(top) destroy $icube(mb) } unset dcube } proc UpdateCubeMenu {} { global cube global current global debug if {$debug(tcl,update)} { puts stderr "UpdateCubeMenu" } if {$current(frame) != {}} { set cube(axes) [$current(frame) get cube axes] } # can be changed by wcs SetCoordSystem cube system {} {} } proc UpdateCubeDialog {} { global icube global dcube global cube global current global ds9 global debug if {$debug(tcl,update)} { puts stderr "UpdateCubeDialog" } CubeStop if {![winfo exists $icube(top)]} { return } if {$current(frame) != {}} { if {[$current(frame) has fits]} { # now make sure we have the coord systems AdjustCoordSystem3d cube system CoordMenuEnable $icube(mb).coord cube system 2 {} {} } else { CoordMenuReset $icube(mb).coord cube system 2 {} {} } } # get number of axes if {$current(frame) != {}} { set naxes [$current(frame) get fits naxes] } else { set naxes 2 } # set from/to set depth 1 if {$naxes == 2} { set dcube(from,2) 1 set dcube(to,2) 1 } else { for {set ii 2} {$ii<$naxes} {incr ii} { set dcube(from,$ii) 1 set dcube(to,$ii) 1 if {$ii==2} { # get cropped version set ss [$current(frame) get crop 3d $cube(system)] set dcube(from,$ii) [lindex $ss 0] set dcube(to,$ii) [lindex $ss 1] } else { set depth [$current(frame) get fits depth $ii] set dcube(from,$ii) [$current(frame) get coordinates 1 image $cube(system) $ii] set dcube(to,$ii) [$current(frame) get coordinates $depth image $cube(system) $ii] } } } # forget everything grid forget $dcube(tslice) $dcube(taxis) $dcube(twcs) for {set ii 2} {$ii<$ds9(FTY_MAXAXES)} {incr ii} { grid forget $dcube(chk,$ii) $dcube(sslice,$ii) $dcube(lslice,$ii) } # show it if {$naxes <= 3} { # special chase, no checkbox grid columnconfigure $icube(top).param 1 -weight 1 grid columnconfigure $icube(top).param 2 -weight 0 grid $dcube(tslice) $dcube(twcs) -padx 2 -pady 2 -sticky ew grid $dcube(lslice,2) $dcube(sslice,2) -padx 2 -pady 2 -sticky ew } else { grid columnconfigure $icube(top).param 1 -weight 0 grid columnconfigure $icube(top).param 2 -weight 1 grid $dcube(taxis) $dcube(tslice) $dcube(twcs) \ -padx 2 -pady 2 -sticky ew for {set ii 2} {$ii<$naxes} {incr ii} { grid $dcube(chk,$ii) $dcube(lslice,$ii) \ $dcube(sslice,$ii) -padx 2 -pady 2 -sticky ew } } # set intervals if {$naxes == 2} { SliderMinMax $dcube(sslice,2) $dcube(from,2) $dcube(to,2) 4 set dcube(vcoord) $cube(system) } else { for {set ii 2} {$ii<$naxes} {incr ii} { set dcube(vcoord) $cube(system) switch $cube(system) { image { set dcube(from,$ii) [expr int($dcube(from,$ii))] set dcube(to,$ii) [expr int($dcube(to,$ii))] } default { set w [string range $cube(system) 3 3] set key "CTYPE[expr $cube(axis)+1]$w" set tt [string trim [$current(frame) get fits header keyword \{$key\}]] if {$tt != {}} { set dcube(vcoord) $tt } } } SliderMinMax $dcube(sslice,$ii) $dcube(from,$ii) $dcube(to,$ii) 4 } } # reset cube(axis) if needed if {$cube(axis) > [expr $naxes-1]} { set cube(axis) [expr $naxes-1] if {$cube(axis) < 2} { set cube(axis) 2 } } # we must do this after the scale has been configured if {$naxes == 2} { set dcube(image,2) 1 set dcube(wcs,2) 1 } else { for {set ii 2} {$ii<$naxes} {incr ii} { set slice [$current(frame) get fits slice $ii] set dcube(image,$ii) $slice set dcube(wcs,$ii) [$current(frame) get coordinates $slice image $cube(system) $ii] } } } proc CubeBackup {ch which} { switch [$which get type] { base - 3d {CubeBackupBase $ch $which} rgb {CubeBackupRGB $ch $which} } } proc CubeBackupBase {ch which} { global ds9 set axes [$which get cube axes] puts $ch "$which cube axes $axes" if {[$which has fits cube]} { for {set ii 2} {$ii<$ds9(FTY_MAXAXES)} {incr ii} { set depth [$which get fits depth $ii] if {$depth>1} { puts $ch "$which update fits slice $ii [$which get fits slice $ii]" } else { break } } puts $ch "CubeDialog" } } proc CubeBackupRGB {ch which} { set sav [$which get rgb channel] foreach cc {red green blue} { $which rgb channel $cc puts $ch "$which rgb channel $cc" CubeBackupBase $ch $which } $which rgb channel $sav puts $ch "$which rgb channel $sav" } proc MatchAxesCurrent {} { global current if {$current(frame) != {}} { MatchAxes $current(frame) } } proc MatchAxes {which} { global cube global ds9 global rgb global grid set axes [$which get cube axes] foreach ff $ds9(frames) { if {$ff != $which} { RGBEvalLock rgb(lock,axes) $ff "$ff cube axes $axes" # grid if {[$ff has grid]} { array set ogrid [array get grid] array set grid [$ff get grid var] GridUpdate $ff array set grid [array get ogrid] } } } } proc LockAxesCurrent {} { global current if {$current(frame) != {}} { LockAxes $current(frame) } } proc LockAxes {which} { global cube if {$cube(lock,axes)} { MatchAxes $which } } proc CubeAxes {} { global cube global current global rgb if {$current(frame) != {}} { SetWatchCursor RGBEvalLockCurrent rgb(lock,axes) \ "$current(frame) cube axes $cube(axes)" ResetWatchCursor LockAxesCurrent UpdateHeaderDialog UpdateWCS UpdateDS9 UpdateMain } } # Process Cmds proc ProcessCubeCmd {varname iname} { upvar $varname var upvar $iname i global cube global dcube global blink global current global rgb CubeDialog switch -- [string tolower [lindex $var $i]] { match { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { switch -- [lindex $var $i] { {} {MatchCubeCurrent image} default {MatchCubeCurrent [lindex $var $i]} } } else { MatchCubeCurrent image incr i -1 } } lock { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { switch -- [lindex $var $i] { {} - yes - 1 {set cube(lock) image} no - 0 {set cube(lock) none} default {set cube(lock) [lindex $var $i]} } } else { set cube(lock) image incr i -1 } LockCubeCurrent } open {} close {CubeDestroyDialog} play {CubePlay} stop {CubeStop} next {CubeNext} prev {CubePrev} first {CubeFirst} last {CubeLast} interval { incr i set blink(interval) [expr int([lindex $var $i]*1000)] } axis { incr i; set item [lindex $var $i] if {[string is integer $item]} { set cube(axis) [expr $item-1] if {$cube(axis) < 2} { set cube(axis) 2 } } } axes - order { incr i; switch -- [string tolower [lindex $var $i]] { lock { incr i; if {!([string range [lindex $var $i] 0 0] == "-")} { set cube(lock,axes) [FromYesNo [lindex $var $i]] } else { set cube(lock,axes) 1 incr i -1 } LockAxesCurrent } default { set cube(axes) [lindex $var $i] CubeAxes } } } default { # defaults set ss [lindex $var $i] set sys image set axis 2 # sys set item [lindex $var [expr $i+1]] if {$item != {}} { if {!([string range $item 0 0] == "-")} { incr i if {[string is integer $item]} { set axis [expr $item-1] } else { set sys $item } # axis set item [lindex $var [expr $i+1]] if {$item != {}} { if {!([string range $item 0 0] == "-")} { incr i if {[string is integer $item]} { set axis [expr $item-1] } } } } } if {[string is double $ss]} { set dcube(wcs,$axis) $ss set cube(system) $sys set cube(axis) $axis if {$cube(axis) < 2} { set cube(axis) 2 } CubeApply $cube(axis) } } } } proc ProcessSendCubeCmd {proc id param} { global cube global current global blink switch -- [string tolower [lindex $param 0]] { lock {$proc $id "$cube(lock)\n"} axes - order { switch -- [string tolower [lindex $param 1]] { lock {$proc $id [ToYesNo $cube(lock,axes)]} default {$proc $id "$cube(axes)\n"} } } interval {$proc $id "[expr $blink(interval)/1000.]\n"} axis {$proc $id "$cube(axis)\n"} default { if {$current(frame) != {}} { $proc $id "[$current(frame) get fits slice $cube(axis)]\n" } else { $proc $id "1\n" } } } } saods9/ds9/library/debug.tcl000644 000765 000000 00000016154 12721633532 016334 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc DebugDef {} { global debug set debug(tcl,events) 0 set debug(tcl,update) 0 set debug(tcl,idletasks) 0 set debug(tcl,layout) 0 set debug(tcl,info) 0 set debug(tcl,marker) 0 set debug(tcl,hv) 0 set debug(tcl,cat) 0 set debug(tcl,sia) 0 set debug(tcl,ime) 0 set debug(tcl,samp) 0 set debug(tcl,grid) 0 set debug(tcl,restore) 0 set debug(tcl,http) 0 set debug(tcl,ftp) 0 set debug(tcl,xpa) 0 set debug(tcl,image) 0 set debug(tksao,ast) 0 set debug(tksao,mosaic) 0 set debug(tksao,parser) 0 set debug(tksao,perf) 0 set debug(tksao,wcs) 0 set debug(tksao,bin) 0 set debug(tksao,block) 0 set debug(tksao,compress) 0 set debug(tksao,gz) 0 set debug(tksao,rgb) 0 set debug(tksao,crop) 0 set debug(iis) 0 } proc Debug {which varname} { upvar $varname var global current if {$current(frame) != {}} { $current(frame) debug $which $var } } proc DebugMenu {} { global ds9 global debug if {[winfo exists $ds9(mb).debug]} { return } $ds9(mb) add cascade -label {Debug} -menu $ds9(mb).debug menu $ds9(mb).debug $ds9(mb).debug add cascade -label {Tcl} -menu $ds9(mb).debug.tcl $ds9(mb).debug add cascade -label {TKSAO} -menu $ds9(mb).debug.tksao $ds9(mb).debug add cascade -label {IIS} -menu $ds9(mb).debug.iis menu $ds9(mb).debug.tcl $ds9(mb).debug.tcl add checkbutton -label {Events} \ -variable debug(tcl,events) $ds9(mb).debug.tcl add checkbutton -label {Update} \ -variable debug(tcl,update) $ds9(mb).debug.tcl add checkbutton -label {Idletasks} \ -variable debug(tcl,idletasks) $ds9(mb).debug.tcl add checkbutton -label {Layout} \ -variable debug(tcl,layout) $ds9(mb).debug.tcl add checkbutton -label {Info} \ -variable debug(tcl,info) $ds9(mb).debug.tcl add checkbutton -label {Marker} \ -variable debug(tcl,marker) $ds9(mb).debug.tcl add checkbutton -label {HV} \ -variable debug(tcl,hv) $ds9(mb).debug.tcl add checkbutton -label {Catalog} \ -variable debug(tcl,cat) $ds9(mb).debug.tcl add checkbutton -label {SIA} \ -variable debug(tcl,sia) $ds9(mb).debug.tcl add checkbutton -label {IME} \ -variable debug(tcl,ime) $ds9(mb).debug.tcl add checkbutton -label {SAMP} \ -variable debug(tcl,samp) $ds9(mb).debug.tcl add checkbutton -label {Grid} \ -variable debug(tcl,grid) $ds9(mb).debug.tcl add checkbutton -label {Restore} \ -variable debug(tcl,restore) $ds9(mb).debug.tcl add checkbutton -label {HTTP} \ -variable debug(tcl,http) $ds9(mb).debug.tcl add checkbutton -label {FTP} \ -variable debug(tcl,ftp) $ds9(mb).debug.tcl add checkbutton -label {XPA} \ -variable debug(tcl,xpa) $ds9(mb).debug.tcl add checkbutton -label {IMAGE} \ -variable debug(tcl,image) menu $ds9(mb).debug.tksao $ds9(mb).debug.tksao add checkbutton -label {AST} \ -variable debug(tksao,ast) \ -command "Debug ast debug(tksao,ast)" $ds9(mb).debug.tksao add checkbutton -label {Mosaic} \ -variable debug(tksao,mosaic) \ -command "Debug mosaic debug(tksao,mosaic)" $ds9(mb).debug.tksao add checkbutton -label {Parser} \ -variable debug(tksao,parser) \ -command "Debug parser debug(tksao,parser)" $ds9(mb).debug.tksao add checkbutton -label {Perf} \ -variable debug(tksao,perf) \ -command "Debug perf debug(tksao,perf)" $ds9(mb).debug.tksao add checkbutton -label {WCS} \ -variable debug(tksao,wcs) \ -command "Debug wcs debug(tksao,wcs)" $ds9(mb).debug.tksao add checkbutton -label {Bin} \ -variable debug(tksao,bin) \ -command "Debug bin debug(tksao,bin)" $ds9(mb).debug.tksao add checkbutton -label {Block} \ -variable debug(tksao,block) \ -command "Debug block debug(tksao,block)" $ds9(mb).debug.tksao add checkbutton -label {Compress} \ -variable debug(tksao,compress) \ -command "Debug compress debug(tksao,compress)" $ds9(mb).debug.tksao add checkbutton -label {GZ} \ -variable debug(tksao,gz) \ -command "Debug gz debug(tksao,gz)" $ds9(mb).debug.tksao add checkbutton -label {RGB} \ -variable debug(tksao,rgb) \ -command "Debug rgb debug(tksao,rgb)" $ds9(mb).debug.tksao add checkbutton -label {Crop} \ -variable debug(tksao,crop) \ -command "Debug crop debug(tksao,crop)" menu $ds9(mb).debug.iis $ds9(mb).debug.iis add checkbutton -label {IIS} \ -variable debug(iis) -command IISDebug } proc DumpURL {varname} { upvar $varname r puts stderr "r(scheme)=$r(scheme)" puts stderr "r(authority)=$r(authority)" puts stderr "r(path)=$r(path)" puts stderr "r(query)=$r(query)" puts stderr "r(fragment)=$r(fragment)" } proc DumpCallStack {} { for {set x [expr [info level]-1]} {$x>0} {incr x -1} { puts stderr "$x: [info level $x]" } } proc DumpArray {varname} { upvar $varname var global $varname foreach f [array names $varname] { puts stderr "${varname}($f) = $var($f)" } } # Process Cmds proc ProcessDebugTclCmd {varname iname} { upvar $varname var upvar $iname i # default debug dialog if {[info proc bgerror] != {}} { rename bgerror {} } global debug switch -- [string tolower [lindex $var $i]] { events {set debug(tcl,events) 1} update {set debug(tcl,update) 1} idletasks {set debug(tcl,idletasks) 1} layout {set debug(tcl,layout) 1} info {set debug(tcl,info) 1} marker {set debug(tcl,marker) 1} hv {set debug(tcl,hv) 1} cat {set debug(tcl,cat) 1} sia {set debug(tcl,sia) 1} ime {set debug(tcl,ime) 1} samp {set debug(tcl,samp) 1} grid {set debug(tcl,grid) 1} restore {set debug(tcl,restore) 1} http {set debug(tcl,http) 1} ftp {set debug(tcl,ftp) 1} xpa {set debug(tcl,xpa) 1} image { set debug(tcl,hv) 1 set debug(tcl,http) 1 set debug(tcl,image) 1 } } } proc ProcessDebugCmd {varname iname} { upvar $varname var upvar $iname i DebugMenu global debug switch -- [string tolower [lindex $var $i]] { ast { set debug(tksao,ast) 1 Debug ast debug(tksao,ast) } mosaic { set debug(tksao,mosaic) 1 Debug mosaic debug(tksao,mosaic) } parser { set debug(tksao,parser) 1 Debug parser debug(tksao,parser) } perf { set debug(tksao,perf) 1 Debug perf debug(tksao,perf) } wcs { set debug(tksao,wcs) 1 Debug wcs debug(tksao,wcs) } bin { set debug(tksao,bin) 1 Debug bin debug(tksao,bin) } block { set debug(tksao,block) 1 Debug block debug(tksao,block) } compress { set debug(tksao,compress) 1 Debug compress debug(tksao,compress) } gz { set debug(tksao,gz) 1 Debug gz debug(tksao,gz) } iis { set debug(iis) 1 IISDebug } rgb { set debug(tksao,rgb) 1 Debug rgb debug(tksao,rgb) } crop { set debug(tksao,crop) 1 Debug crop debug(tksao,crop) } events - update - idletasks - layout - info - marker - watch - hv - cat - sia - ime - samp - grid - restore - http - ftp - xpa - image {} default { incr ${iname} -1 } } } saods9/ds9/library/dialog.tcl000644 000765 000000 00000032355 12705445646 016517 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc DialogCreate {top title varname} { global ds9 eval {toplevel $top} switch $ds9(wm) { x11 - win32 {} aqua { ::tk::unsupported::MacWindowStyle style $top document "closeBox fullZoom collapseBox resizable" } } wm title $top "$title" wm iconname $top "$title" upvar #0 varname var wm protocol $top WM_DELETE_WINDOW "set $varname 1" } proc DialogCenter {w} { global ds9 ::tk::PlaceWindow $w widget $ds9(top) } proc DialogWait {top varname {focus {}}} { upvar $varname var if {[string length $focus] == 0} { set focus $top } set old [focus -displayof $top] focus $focus catch {tkwait visibility $top} catch {grab $top} tkwait variable $varname catch {grab release $top} focus $old # reset errorInfo global errorInfo set errorInfo {} } proc DialogDismiss {w} { destroy $w } # Simple List Box proc SLBDialog {varname title width} { upvar $varname var global ed set w {.slb} set ed(ok) 0 DialogCreate $w $title ed(ok) # Lists set f [ttk::frame $w.ed] ttk::scrollbar $f.scroll -command "$f.box yview" set ed(listbox) [listbox $f.box \ -yscroll "$f.scroll set" \ -setgrid 1 \ -selectmode single] grid $f.box $f.scroll -sticky news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] \ -command {set ed(ok) 1} ttk::button $f.cancel -text [msgcat::mc {Cancel}] \ -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.ed -side top -fill both -expand true # init for {set i 1} {$i <= $var(count)} {incr i} { $w.ed.box insert end $var($i,item) } $w.ed.box selection set 0 bind $w {set ed(ok) 1} bind $w {set ed(ok) 1} bind $w "SLBArrow $ed(listbox) -1" bind $w "SLBArrow $ed(listbox) 1" DialogCenter $w DialogWait $w ed(ok) $w.buttons.ok if {$ed(ok)} { set i [expr [$ed(listbox) curselection]+1] if {$i > 0 && $i <= $var(count)} { set var(item) $var($i,item) set var(value) $var($i,value) } } DialogDismiss $w set rr $ed(ok) unset ed return $rr } proc SLBArrow {lb dir} { set which [$lb curselection] if {$which == {}} { set which 0 } set end [$lb index end] $lb selection clear 0 end incr which $dir if {$which < 0} { set which 0 } if {$which >= $end} { set which [expr $end -1] } $lb selection set $which } # Entry Dialog proc EntryDialog {title message size varname} { upvar $varname var global ds9 global ed set w {.entry} set mb {.entrymb} set ed(top) $w set ed(ok) 0 set ed(text) $var DialogCreate $w $title ed(ok) $w configure -menu $mb menu $mb $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit EditMenu $mb ed # Param set f [ttk::frame $w.param] ttk::label $f.title -text $message ttk::entry $f.txt -textvariable ed(text) -width $size if {$size < 30} { grid $f.title $f.txt -padx 2 -pady 2 } else { grid $f.title -padx 2 -pady 2 -sticky w grid $f.txt -padx 2 -pady 2 } # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w $w.param.txt select range 0 end DialogWait $w ed(ok) $w.param.txt if {$ed(ok)} { set var $ed(text) } DialogDismiss $w destroy $mb set rr $ed(ok) unset ed return $rr } # Entry Cut/Copy/Paste proc EntryCut {top} { set w [focus -displayof $top] if {![catch {set data [string range [$w get] [$w index sel.first] [expr {[$w index sel.last] - 1}]]}]} { clipboard clear -displayof $w clipboard append -displayof $w $data $w delete sel.first sel.last } } proc EntryCopy {top} { set w [focus -displayof $top] if {![catch {set data [string range [$w get] [$w index sel.first] [expr {[$w index sel.last] - 1}]]}]} { clipboard clear -displayof $w clipboard append -displayof $w $data } } proc EntryPaste {top} { set w [focus -displayof $top] catch {$w delete sel.first sel.last} if {![catch {$w insert insert [GetSelection $w]}]} { tk::EntrySeeInsert $w } } proc GetSelection {w} { if { ![catch {selection get -displayof $w -type UTF8_STRING} txt] || ![catch {selection get -displayof $w} txt] || ![catch {selection get -displayof $w -selection CLIPBOARD} txt] } { return $txt } } # Simple Text Dialog proc SimpleTextDef {} { global istxt set istxt(dialogs) {} } proc SimpleTextDialog {varname title width height action pos txt {destroyCB {}} {destroyParam {}}} { upvar #0 $varname var global $varname global istxt global ds9 global pds9 set var(top) ".${varname}" set var(mb) ".${varname}mb" if {[winfo exists $var(top)]} { raise $var(top) } else { # create window Toplevel $var(top) $var(mb) 7 $title "SimpleTextDestroy $varname" lappend istxt(dialogs) $varname set var(search) {} set var(destroyCB) $destroyCB set var(destroyParam) $destroyParam set var(font) $pds9(text,font) set var(font,size) $pds9(text,font,size) set var(font,weight) $pds9(text,font,weight) set var(font,slant) $pds9(text,font,slant) $var(mb) add cascade -label [msgcat::mc {File}] -menu $var(mb).file menu $var(mb).file $var(mb).file add command -label "[msgcat::mc {Save}]..." \ -command "SimpleTextSave $varname" switch $ds9(wm) { x11 - aqua - win32 { $var(mb).file add separator $var(mb).file add command -label "[msgcat::mc {Print}]..." \ -command "SimpleTextPrint $varname" } } $var(mb).file add separator $var(mb).file add command -label [msgcat::mc {Close}] \ -command "SimpleTextDestroy $varname" $var(mb) add cascade -label [msgcat::mc {Edit}] -menu $var(mb).edit menu $var(mb).edit $var(mb).edit add command -label [msgcat::mc {Cut}] \ -command "SimpleTextCut $varname" -accelerator "${ds9(ctrl)}X" $var(mb).edit add command -label [msgcat::mc {Copy}] \ -command "SimpleTextCopy $varname" -accelerator "${ds9(ctrl)}C" $var(mb).edit add command -label [msgcat::mc {Paste}] \ -state disabled -accelerator "${ds9(ctrl)}V" $var(mb).edit add command -label [msgcat::mc {Clear}] \ -command "SimpleTextClear $varname" $var(mb).edit add separator $var(mb).edit add command -label [msgcat::mc {Select All}] \ -command "SimpleTextSelectAll $varname" $var(mb).edit add command -label [msgcat::mc {Select None}] \ -command "SimpleTextSelectNone $varname" $var(mb).edit add separator switch $ds9(wm) { x11 - win32 { $var(mb).edit add command -label "[msgcat::mc {Find}]..." \ -command "SimpleTextFind $varname" \ -accelerator "${ds9(ctrl)}F" } aqua { # Known bug in Tk, can't have dialogs invoked by accelerator $var(mb).edit add command -label "[msgcat::mc {Find}]..." \ -command "SimpleTextFind $varname" } } $var(mb).edit add command -label [msgcat::mc {Find Next}] \ -command "SimpleTextFindNext $varname" -accelerator "${ds9(ctrl)}G" $var(mb) add cascade -label [msgcat::mc {Font}] -menu $var(mb).font FontMenu $var(mb).font $varname font font,size font,weight font,slant \ [list SimpleTextFont $varname] # create the text and scroll widgets set var(text) [text $var(top).text -height $height -width $width \ -wrap none \ -yscrollcommand [list $var(top).yscroll set] \ -xscrollcommand [list $var(top).xscroll set] \ ] ttk::scrollbar $var(top).yscroll -command [list $var(text) yview] \ -orient vertical ttk::scrollbar $var(top).xscroll -command [list $var(text) xview] \ -orient horizontal grid $var(text) $var(top).yscroll -sticky news grid $var(top).xscroll -stick news grid rowconfigure $var(top) 0 -weight 1 grid columnconfigure $var(top) 0 -weight 1 # Bindings switch $ds9(wm) { x11 - win32 { bind $var(top) <> [list SimpleTextFind $varname] } aqua { # Known bug in Tk, can't have dialogs invoked by accelerator } } bind $var(top) <> [list SimpleTextFindNext $varname] # some window managers need a hint raise $var(top) } $var(text) configure -state normal if {$action != {append}} { $var(text) delete 1.0 end } $var(text) insert end "$txt" switch -- $pos { top {$var(text) see 1.0} bottom {$var(text) see end} } SimpleTextFont $varname } proc SimpleTextDestroy {varname} { global istxt upvar #0 $varname var global $varname if {$var(destroyCB) != {}} { eval $var(destroyCB) $var(destroyParam) } if {[winfo exists $var(top)]} { destroy $var(top) destroy $var(mb) } set ii [lsearch $istxt(dialogs) $varname] if {$ii>=0} { set istxt(dialogs) [lreplace $istxt(dialogs) $ii $ii] } unset $varname } proc SimpleTextFont {varname} { upvar #0 $varname var global $varname global ds9 $var(text) configure -font \ "{$ds9($var(font))} $var(font,size) $var(font,weight) $var(font,slant)" } proc SimpleTextUpdateFont {} { global istxt global pds9 foreach varname $istxt(dialogs) { upvar #0 $varname var global $varname set var(font) $pds9(text,font) set var(font,size) $pds9(text,font,size) set var(font,weight) $pds9(text,font,weight) set var(font,slant) $pds9(text,font,slant) SimpleTextFont $varname } } proc SimpleTextCut {varname} { upvar #0 $varname var global $varname tk_textCut $var(text) } proc SimpleTextCopy {varname} { upvar #0 $varname var global $varname tk_textCopy $var(text) } proc SimpleTextClear {varname} { upvar #0 $varname var global $varname $var(text) configure -state normal $var(text) delete 1.0 end $var(text) configure -state disabled } proc SimpleTextSelectAll {varname} { upvar #0 $varname var global $varname $var(text) tag add sel 1.0 end } proc SimpleTextSelectNone {varname} { upvar #0 $varname var global $varname $var(text) tag remove sel 1.0 end } proc SimpleTextFind {varname} { upvar #0 $varname var global $varname $var(text) tag remove sel 1.0 end set result "$var(search)" if {[EntryDialog [msgcat::mc {Search}] [msgcat::mc {Enter Search Expression}] 40 result]} { set var(search) "$result" set start [$var(text) search -nocase -count cnt \ -regexp -- $result 1.0 end] if {$start != {}} { $var(text) tag add sel $start "$start + $cnt chars" $var(text) see $start } else { Error "$var(search) [msgcat::mc {Not Found}]" } } } proc SimpleTextFindNext {varname} { upvar #0 $varname var global $varname if {$var(search) != {}} { if {[$var(text) tag ranges sel] != {}} { set ss {sel.last} } else { set ss {1.0} } set start [$var(text) search -nocase -count cnt \ -regexp -- $var(search) $ss end] if {$start != {}} { $var(text) tag remove sel 1.0 end $var(text) tag add sel $start "$start + $cnt chars" $var(text) see $start } else { # wrap set start [$var(text) search -nocase -count cnt \ -regexp -- $var(search) 1.0 end] if {$start != {}} { $var(text) tag remove sel 1.0 end $var(text) tag add sel $start "$start + $cnt chars" $var(text) see $start } else { Error "$var(search) [msgcat::mc {Not Found}]" } } } } proc SimpleTextPrint {varname} { upvar #0 $varname var global $varname global ds9 switch $ds9(wm) { x11 - aqua - win32 {SimpleTextPSPrint $varname} wwin32 {win32 pm print text [$var(text) get 1.0 end]} } } proc SimpleTextPSPrint {varname} { upvar #0 $varname var global $varname if {[PRPrintDialog]} { if {[catch {SimpleTextPostScript $varname} printError]} { Error "[msgcat::mc {An error has occurred while printing}] $printError" } } } proc SimpleTextPostScript {varname} { upvar #0 $varname var global $varname global ps if {$ps(dest) == "file"} { set ch [open "| cat > $ps(filename,txt)" w] } else { set ch [open "| $ps(cmd)" w] } puts -nonewline $ch [$var(text) get 1.0 end] close $ch } proc SimpleTextPageSetup {varname} { upvar #0 $varname var global $varname global ds9 switch $ds9(wm) { x11 - aqua - win32 {} wwin32 {win32 pm pagesetup} } } proc SimpleTextSave {varname} { upvar #0 $varname var global $varname set filename [SaveFileDialog textfbox] if {$filename != {}} { if {[catch {set ch [open "| cat > \"$filename\"" w]}]} { Error [msgcat::mc {An error has occurred while saving}] return } puts -nonewline $ch [$var(text) get 1.0 end] close $ch } } saods9/ds9/library/ds9.tcl000755 000765 000000 00000027265 13005666665 015766 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" proc DS9Def {} { global ds9 global pds9 set ds9(title) "$ds9(app)" # for beta version, MUST have space set ds9(version) {7.5} set ds9(top) . set ds9(mb) .mb set ds9(visual) {} set ds9(depth) 8 set ds9(FTY_MAXAXES) 10 set ds9(threads) [GetNumCores] set ds9(helvetica) [font configure TkDefaultFont -family] set ds9(courier) [font configure TkFixedFont -family] switch $ds9(wm) { x11 { set ds9(times) serif # These look better if normal weight font configure TkCaptionFont -weight normal font configure TkHeadingFont -weight normal } aqua {set ds9(times) times} win32 {set ds9(times) times} } set ds9(main) {} set ds9(image) {} set ds9(canvas) {} set ds9(panel) {} set ds9(info) {} set ds9(panner) {} set ds9(magnifier) {} set ds9(buttons) {} set ds9(graph,sp) {} set ds9(graph,horz) {} set ds9(graph,vert) {} set ds9(frames) {} set ds9(active) {} set ds9(active,num) 0 set ds9(lock) 0 set ds9(next) {} set ds9(next,num) 1 set ds9(last) {} set ds9(event,opendoc) {} set ds9(event,printdoc) {} set ds9(tmpdir) {} switch $ds9(wm) { x11 - win32 {set ds9(menu,start) 1} aqua {set ds9(menu,start) 0} } set ds9(menu,size,frame,goto) [expr $ds9(menu,start)+0] set ds9(menu,size,frame,active) [expr $ds9(menu,start)+3] set ds9(menu,size,analysis) [expr $ds9(menu,start)+35] set ds9(menu,size,wrap) 20 set ds9(display) single set ds9(bg) white set ds9(array,x) 512 set ds9(array,y) 512 set ds9(array,bitpix) -32 set ds9(array,skip) 0 set ds9(array,arch) bigendian set ds9(row) -1 set ds9(freeze) 0 set ds9(b1) 0 set ds9(b2) 0 set ds9(b3) 0 set ds9(sb1) 0 set ds9(sb2) 0 set ds9(sb3) 0 set ds9(cb1) 0 set ds9(cb2) 0 set ds9(cb3) 0 set ds9(csb1) 0 set ds9(csb2) 0 set ds9(csb3) 0 set ds9(modifier) 0 set ds9(ext,file) ".$ds9(app).fil" set ds9(ext,alt) ".$ds9(app).file" set ds9(msg) {} set ds9(msg,level) info set ds9(msg,src) {} set ds9(msg,timeout) 1000 switch $ds9(wm) { x11 - win32 { set ds9(ctrl) "Control-" set ds9(shiftctrl) "Shift-Control-" } aqua { set ds9(ctrl) "Command-" set ds9(shiftctrl) "Shift-Command-" } } # prefs only InitDefaultFont InitDefaultTextFont set pds9(backup) 1 set pds9(automarker) 1 set pds9(xpa) 1 set pds9(samp) 1 set pds9(confirm) 1 set pds9(bg) white set pds9(nan) white set pds9(iraf) 1 switch $ds9(wm) { x11 {set pds9(dialog) motif} aqua - win32 {set pds9(dialog) native} } set pds9(dialog,center) 0 set pds9(dialog,all) 0 set pds9(language) locale set pds9(language,name) [LanguageToName $pds9(language)] set pds9(language,dir) {} } # if we have a problem at this point, dump simple message and exit if {[catch {tk windowingsystem} ds9(wm)]} { puts stderr "Unable to initialize window system." exit } # who are we? set ds9(app) [file tail [info nameofexecutable]] # Themes are now hardcoded switch $ds9(wm) { x11 { # set bg for non ttk widgets set bg [ttk::style lookup "." -background] # standard widgets option add {*Text.Background} $bg option add {*Listbox.Background} $bg option add {*PlotBackground} $bg # ttk widgets ttk::style configure TLabel -borderwidth 2 -padding 1 ttk::style configure TEntry -fieldbackground $bg -padding 1 } aqua { # set bg for non ttk widgets set bg [ttk::style lookup "." -background] # standard widgets option add {*PlotBackground} $bg } win32 {ttk::style theme use xpnative} } switch $ds9(wm) { x11 { # set to absolute path so that if -cd command is used, # so we can still find our files set ds9(root) [file normalize [file join [pwd] zvfsmntpt]] if {![namespace exists msgcat]} { source $ds9(root)/tcl8/8.5/msgcat-1.5.2.tm } if {![namespace exists http]} { source $ds9(root)/tcl8/8.6/http-2.8.9.tm source $ds9(root)/library/htp.tcl } source $ds9(root)/tk8.6/tearoff.tcl source $ds9(root)/tk8.6/comdlg.tcl source $ds9(root)/tk8.6/focus.tcl source $ds9(root)/tk8.6/mkpsenc.tcl source $ds9(root)/tk8.6/msgbox.tcl source $ds9(root)/tk8.6/optMenu.tcl source $ds9(root)/tk8.6/unsupported.tcl source $ds9(root)/tcllib/base64/base64.tcl source $ds9(root)/tcllib/log/log.tcl source $ds9(root)/tcllib/ftp/ftp.tcl source $ds9(root)/tcllib/textutil/repeat.tcl source $ds9(root)/tcllib/textutil/tabify.tcl source $ds9(root)/tcllib/math/fuzzy.tcl source $ds9(root)/tkcon/tkcon.tcl source $ds9(root)/tkblt/graph.tcl source $ds9(root)/library/source.tcl # fix ::tk and msgcat rename ::tk::msgcat::mc {} rename ::tk::msgcat::mcmax {} namespace import ::msgcat::mc namespace import ::msgcat::mcmax ::msgcat::mcload [file join $::tk_library msgs] # fix ::tk::dialog::file set ::tk::dialog::file::showHiddenVar 0 set ::tk::dialog::file::showHiddenBtn 1 } aqua { # set to absolute path set ds9(root) [file normalize [file dirname [file dirname $argv0]]] set bb [file dirname [file dirname $ds9(root)]] set auto_path [list $ds9(root) $bb/Tcl.framework/Resources $bb/Tcl.framework/Resources/Scripts $bb/Tk.framework/Resources $bb/Tk.framework/Resources/Scripts $bb/Tk.framework/Resources/Scripts/ttk] package require msgcat package require http source $ds9(root)/library/htp.tcl package require base64 package require log package require ftp package require textutil package require math package require tkcon package require Tkblt package require DS9 proc ::tk::mac::ShowPreferences {} { PrefsDialog } proc ::tk::mac::ReopenApplication {} { if {[wm state .] eq "withdrawn"} { wm state . normal } else { wm deiconify . } raise . } proc ::tk::mac::OpenDocument {args} { global ds9 set ds9(event,opendoc) $args if {!$ds9(init)} { MacOSXOpenDocEvent 1 } } proc ::tk::mac::PrintDocument {args} { global ds9 set ds9(event,printdoc) $args if {!$ds9(init)} { MacOSXPrintDocEvent 0 } } proc ::tk::mac::Quit {args} { QuitDS9 } proc ::tk::mac::ShowHelp {args} { HelpRef } } win32 { set ds9(root) [file dirname [file dirname $argv0]] set auto_path [list $ds9(root) $ds9(root)/tcl8.6 $ds9(root)/tk8.6 $ds9(root)/tk8.6/ttk] package require msgcat package require http source $ds9(root)/library/htp.tcl package require base64 package require log package require ftp package require textutil package require math package require tkcon package require Tkblt package require DS9 proc checkdns {a b {c {}}} { return 0 } } } # Define Variables DS9Def 2MASSDef 3DDef AnalysisDef BinDef BlinkDef BlockDef ButtonsDef CanvasDef CATDef CATSymDef CATCDSSrchDef CentroidDef ColorbarDef ContourDef CoordDef CrosshairDef CubeDef CurrentDef CursorDef DebugDef ESODef ExamineDef ExportDef GraphDef GridDef GroupDef HelpDef HTTPDef HVDef IExamDef IISDef IMEDef MagnifierDef MarkerDef MaskDef MinMaxDef MovieDef NRESDef NVSSDef PannerDef PanZoomDef CropDef PixelDef PlotDef PrefsDef PSDef RGBDef SAMPDef SAODef SaveDef SaveImageDef ScaleDef SIADef SimpleTextDef SkyViewDef SmoothDef STSCIDef TemplateDef TileDef ViewDef VLADef VLSSDef VODef WCSDef ZScaleDef # let's start set ds9(init) 1 # set up signal trap # not supported under windows switch $tcl_platform(platform) { unix {signal add SIGINT QuitDS9} windows {} } # environment vars # we don't want to see any error messages if xpa is not available if { [info exists env(XPA_VERBOSITY)] == 0 } { set env(XPA_VERBOSITY) 0 } # set filter ptype to contained (default is process) set env(FILTER_PTYPE) c # set filter error proc so it will not kill ds9 set env(GERROR) 0 # Events event add <> <${ds9(ctrl)}o> event add <> <${ds9(ctrl)}s> event add <> <${ds9(ctrl)}P> event add <> <${ds9(ctrl)}p> event add <> <${ds9(ctrl)}a> event add <> <${ds9(ctrl)}f> event add <> <${ds9(ctrl)}g> # Init Temporary Dir before prefs InitTempDir # Init the filter compiler InitFilterCompiler # Load any preferences here, before we do any real work LoadPrefs # set fonts SetDefaultFont false SetDefaultTextFont false switch $ds9(wm) { x11 - win32 {} aqua { ::tk::unsupported::MacWindowStyle style $ds9(top) document "closeBox fullZoom collapseBox resizable" # we need to map the top window so we can get the proper truecolor masks update idletasks } } # We want to withdraw the window til everything is ready to go wm withdraw $ds9(top) wm title $ds9(top) "SAOImage $ds9(title)" wm iconname $ds9(top) "SAOImage $ds9(title)" wm protocol $ds9(top) WM_DELETE_WINDOW QuitDS9 # we need to set certain variables before anything else # such as color, title, language ProcessCommandLineFirst # initialize language switch $pds9(language) { locale { switch $ds9(wm) { x11 { foreach ee {LC_MESSAGES LC_ALL LANG} { if {[info exists env($ee)]} { set ll [string tolower [string range $env($ee) 0 1]] if {[SetLanguage $ll]} { break } } } } aqua { foreach ll [MacOSXGetLocale] { if {[SetLanguage $ll]} { break } } } win32 {} } } default {SetLanguage $pds9(language)} } # set the visual set ds9(visual) [winfo visual .] set ds9(depth) [winfo depth .] switch $ds9(wm) { x11 { if {$ds9(depth)==15} { set ds9(depth) 16 } if {$ds9(depth)==32} { set ds9(depth) 24 } } aqua { if {$ds9(depth)==15} { set ds9(depth) 16 } } win32 { if {$ds9(depth)==32} { set ds9(depth) 24 } } } switch -- $ds9(visual)$ds9(depth) { truecolor8 {} truecolor16 {} truecolor24 {} default {BadVisualError} } # create our main frame set ds9(main) [ttk::frame ${ds9(top)}ds9] pack $ds9(main) -fill both -expand true # Create image canvas CreateCanvas # Create Colorbar-- Create this first, so in case of a private colormap, # gui colors will be allocated in the new colormap, not the default colormap CreateColorbar # Create other parts of the display CreateMenuBar CreateInfoPanel CreatePanner CreateMagnifier CreateButtons CreateGraphs # Make sure that the wm knows when to swap in the colormap (if needed) wm colormapwindows . "$ds9(main) $ds9(canvas)" # Initialize the display InitColorbar InitPanner InitDialogBox # Set our current state of things ChangeMode # force a update, then layout update ConfigureView # our first frame CreateFrame # do this last so we don't get an ConfigureView event InitCanvas # ok, ready to show the window wm deiconify $ds9(top) update # Init external File Formats # we want this before processing the command line InitExternalFile # Init analysis file formats InitAnalysisFile # Configure HTTP ConfigHTTP # SAMP InitSAMP # XPA # don't start xpa for windows switch $ds9(wm) { x11 - aqua {InitXPA} win32 {} } # and process any command line items # we want to see something before any fits files are loaded ProcessCommandLine # Initialize IIS # after command line options to set port/fifo/unix... catch {IISInit} # any os events received? switch $ds9(wm) { x11 - win32 {} aqua { MacOSXOpenDocEvent 0 MacOSXPrintDocEvent 1 } } # Load any initalization tcl code SourceInitFileDir {.ini} # do we have the correct prefs file? CheckPrefs # kludge for aqua. We need to trigger the trap to update buttons vars switch $ds9(wm) { x11 - win32 {} aqua { set current(display) $current(display) set colorbar(map) $colorbar(map) } } # start error monitor after $ds9(msg,timeout) [list ErrorTimer] # ok, we're done set ds9(init) 0 saods9/ds9/library/ellipse.tcl000644 000765 000000 00000006266 12705445646 016717 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc EllipseDialog {varname} { upvar #0 $varname var global $varname global pmarker # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # variables set rr [$var(frame) get wcs] set var(dcoord) [lindex $rr 0] set var(dformat) $pmarker(dformat) AdjustCoordSystem $varname dcoord # procs set var(proc,apply) EllipseApply set var(proc,close) EllipseClose set var(proc,coordCB) EllipseCoordCB # base MarkerBaseCenterDialog $varname # analysis $var(mb) add cascade -label [msgcat::mc {Analysis}] -menu $var(mb).analysis menu $var(mb).analysis MarkerAnalysisStatsDialog $varname MarkerAnalysisHistogramDialog $varname MarkerAnalysisPlot3dDialog $varname # init EllipseEditCB $varname MarkerBaseCenterRotateCB $varname # callbacks $var(frame) marker $var(id) callback edit EllipseEditCB $varname $var(frame) marker $var(id) callback rotate \ MarkerBaseCenterRotateCB $varname set f $var(top).param # Radius ttk::label $f.tradius -text Radius ttk::entry $f.radius1 -textvariable ${varname}(radius1) -width 13 ttk::entry $f.radius2 -textvariable ${varname}(radius2) -width 13 DistMenuButton $f.uradius $varname dcoord 1 dformat \ [list EllipseEditCB $varname] DistMenuEnable $f.uradius.menu $varname dcoord 1 dformat # Angle ttk::label $f.tangle -text [msgcat::mc {Angle}] ttk::entry $f.angle -textvariable ${varname}(angle) -width 13 ttk::label $f.uangle -text [msgcat::mc {Degrees}] grid $f.tradius $f.radius1 $f.radius2 $f.uradius -padx 2 -pady 2 -sticky w grid $f.tangle $f.angle $f.uangle -padx 2 -pady 2 -sticky w } # actions proc EllipseClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback edit EllipseEditCB $var(frame) marker $var(id) delete callback rotate MarkerBaseCenterRotateCB MarkerBaseCenterClose $varname } proc EllipseApply {varname} { upvar #0 $varname var global $varname if {$var(radius1) != {} && $var(radius2) !={}} { $var(frame) marker $var(id) ellipse radius \ $var(radius1) $var(radius2) $var(dcoord) $var(dformat) } MarkerBaseCenterRotate $varname MarkerBaseCenterApply $varname } # callbacks proc EllipseCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "EllipseCoordCB" } MarkerAnalysisStatsSystem $varname MarkerAnalysisPlot3dSystem $varname MarkerBaseCoordCB $varname MarkerBaseCenterMoveCB $varname MarkerBaseCenterRotateCB $varname } proc EllipseEditCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "EllipseEditCB" } set r [$var(frame) get marker $var(id) ellipse radius \ $var(dcoord) $var(dformat)] set var(radius1) [lindex $r 0] set var(radius2) [lindex $r 1] } saods9/ds9/library/ellipseannulus.tcl000644 000765 000000 00000001512 12705445646 020312 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc EllipseAnnulusDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # procs set var(which) ellipseannulus set var(proc,apply) MarkerBaseAnnulusRectApply set var(proc,close) MarkerBaseAnnulusRectClose set var(proc,generate) MarkerBaseAnnulusGenerateEllipse set var(proc,coordCB) MarkerBaseAnnulusRectCoordCB set var(proc,editCB) MarkerBaseAnnulusRectEditCB set var(proc,distCB) MarkerBaseAnnulusRectDistCB # base MarkerBaseAnnulusRectDialog $varname radius Major Minor } saods9/ds9/library/envi.tcl000644 000765 000000 00000003303 12705445646 016210 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ImportENVIFile {hdr fn} { global loadParam set loadParam(file,type) envi set loadParam(file,mode) {} set loadParam(load,type) smmap set loadParam(file,name) $fn set loadParam(file,header) $hdr set loadParam(load,layer) {} ProcessLoad } proc ExportENVIFile {hdr fn opt} { global current if {$fn == {} || $current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save envi file "\{$hdr\}" "\{$fn\}" $opt } proc ProcessENVICmd {varname iname sock fn} { upvar $varname var upvar $iname i global loadParam global current set layer {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i # not supported } slice { incr i # not supported } } StartLoad if {$sock != {}} { # xpa if {0} { # not supported } else { set fn [lindex $var $i] set fn2 [lindex $var [expr $i+1]] if {$fn2 == {}} { set fn2 [FindENVIDataFile $fn] } ImportENVIFile $fn $fn2 } } else { # comm if {0} { # not supported } else { set fn [lindex $var $i] set fn2 [lindex $var [expr $i+1]] if {$fn2 == {}} { set fn2 [FindENVIDataFile $fn] } ImportENVIFile $fn $fn2 } } FinishLoad } proc FindENVIDataFile {fn} { set rn [file rootname $fn] foreach ff {{bil} {bip} {bsq} {raw} {cube}} { set fn2 "$rn.$ff" if {[file exists $fn2]} { return $fn2 } } return {} } saods9/ds9/library/epanda.tcl000644 000765 000000 00000001721 12705445646 016501 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc EpandaDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # procs set var(which) epanda set var(proc,apply) MarkerBasePandaRectApply set var(proc,close) MarkerBasePandaRectClose set var(proc,generate) EpandaGenerate set var(proc,coordCB) MarkerBasePandaRectCoordCB set var(proc,editCB) MarkerBasePandaRectEditCB set var(proc,distCB) MarkerBasePandaRectDistCB # base panda rect dialog MarkerBasePandaRectDialog $varname } # actions proc EpandaGenerate {varname} { upvar #0 $varname var global $varname MarkerBaseAnnulusGenerateEllipse $varname MarkerBasePandaGenerateAngles $varname } saods9/ds9/library/error.tcl000644 000765 000000 00000002726 12735544325 016405 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # capture general errors # this only captures gui errors, not xpa errors proc bgerror {err} { tk_messageBox -type ok -icon error \ -message "[msgcat::mc {An internal error has been detected}] $err" } # force capture xpa/samp/hv/interactive errors proc InitError {which} { global ds9 set ds9(msg) {} set ds9(msg,level) info set ds9(msg,src) $which global errorInfo set errorInfo {} } proc Info {message} { ProcessMessage info $message } proc Warning {message} { ProcessMessage warning $message } # used by backup proc Error {message} { ProcessMessage error $message } proc ProcessMessage {level message} { global ds9 global pds9 set ds9(msg,level) $level switch -- $ds9(msg,src) { xpa - hv - samp {set ds9(msg) $message} default { if {$pds9(confirm)} { tk_messageBox -message $message -type ok -icon $level } } } } # here is where errors from within the canvas widgets # will try to get our attention. # XPA, HV, and SAMP will have already seen any problems proc ErrorTimer {} { global ds9 global pds9 if {$ds9(msg) != {}} { if {$pds9(confirm)} { tk_messageBox -message $ds9(msg) -type ok -icon $ds9(msg,level) } InitError tcl } # set again after $ds9(msg,timeout) ErrorTimer } saods9/ds9/library/eso.tcl000644 000765 000000 00000011063 12741011522 016015 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ESODef {} { global eso global ieso set ieso(top) .eso set ieso(mb) .esomb set eso(sky) fk5 set eso(rformat) arcmin set eso(width) 15 set eso(height) 15 set eso(mode) new set eso(save) 0 set eso(survey) {DSS1} } proc ESODialog {} { global eso global ieso global wcs if {[winfo exists $ieso(top)]} { raise $ieso(top) return } set varname deso upvar #0 $varname var global $varname set var(top) $ieso(top) set var(mb) $ieso(mb) set var(sky) $eso(sky) set var(skyformat) $wcs(skyformat) set var(rformat) $eso(rformat) set var(width) $eso(width) set var(height) $eso(height) # not used set var(width,pixels) 300 set var(height,pixels) 300 set var(survey) $eso(survey) set var(mode) $eso(mode) set var(save) $eso(save) set w $var(top) IMGSVRInit $varname "ESO-DSS [msgcat::mc {Server}]" \ ESOExec ESOAck ARDone ARError $var(mb) add cascade -label Survey -menu $var(mb).survey menu $var(mb).survey # these must be Caps, the server will not accept lower case $var(mb).survey add radiobutton -label {DSS1} \ -variable ${varname}(survey) -value DSS1 $var(mb).survey add radiobutton -label {DSS2-red} \ -variable ${varname}(survey) -value DSS2-red $var(mb).survey add radiobutton -label {DSS2-blue} \ -variable ${varname}(survey) -value DSS2-blue $var(mb).survey add radiobutton -label {DSS2-infrared} \ -variable ${varname}(survey) -value DSS2-infrared IMGSVRUpdate $varname } proc ESOExec {varname} { upvar #0 $varname var global $varname if {$var(save)} { set mime "application/x-fits" set var(fn) [SaveFileDialog savefitsfbox] if {$var(fn) == {}} { ARDone $varname return } } else { set mime "display/gz-fits" set var(fn) [tmpnam {.fits.gz}] } # size - convert to arcmin switch -- $var(rformat) { degrees { set ww [expr $var(width)*60.] set hh [expr $var(height)*60.] } arcmin { set ww $var(width) set hh $var(height) } arcsec { set ww [expr $var(width)/60.] set hh [expr $var(height)/60.] } } if {$ww>60} { set ww 60 } if {$hh>60} { set hh 60 } # query set query [http::formatQuery ra $var(x) dec $var(y) equinox J2000 x $ww y $hh mime-type $mime Sky-Survey $var(survey)] # Load image # we can't use -query because eso needs a GET not a POST set var(query) {} set url "http://archive.eso.org/dss/dss?$query" IMGSVRGetURL $varname $url } proc ESOAck {varname} { upvar #0 $varname var global $varname set msg {Acknowledgments for the ESO The Digitized Sky Surveys were produced at the Space Telescope Science Institute under U.S. Government grant NAG W-2166. The images of these surveys are based on photographic data obtained using the Oschin Schmidt Telescope on Palomar Mountain and the UK Schmidt Telescope. The plates were processed into the present compressed digital form with the permission of these institutions. The National Geographic Society - Palomar Observatory Sky Atlas (POSS-I) was made by the California Institute of Technology with grants from the National Geographic Society. The Second Palomar Observatory Sky Survey (POSS-II) was made by the California Institute of Technology with funds from the National Science Foundation, the National Geographic Society, the Sloan Foundation, the Samuel Oschin Foundation, and the Eastman Kodak Corporation. The Oschin Schmidt Telescope is operated by the California Institute of Technology and Palomar Observatory. The UK Schmidt Telescope was operated by the Royal Observatory Edinburgh, with funding from the UK Science and Engineering Research Council (later the UK Particle Physics and Astronomy Research Council), until 1988 June, and thereafter by the Anglo-Australian Observatory. The blue plates of the southern Sky Atlas and its Equatorial Extension (together known as the SERC-J), as well as the Equatorial Red (ER), and the Second Epoch [red] Survey (SES) were all taken with the UK Schmidt. } SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \ 80 40 insert top $msg } # Process Cmds proc ProcessESOCmd {varname iname} { upvar $varname var upvar $iname i ESODialog IMGSVRProcessCmd $varname $iname deso } proc ProcessSendESOCmd {proc id param} { ESODialog IMGSVRProcessSendCmd $proc $id $param deso } saods9/ds9/library/examine.tcl000644 000765 000000 00000017246 12705445647 016711 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ExamineDef {} { global pexamine # prefs only set pexamine(mode) new set pexamine(zoom) 4 } proc ExamineButton {which x y} { if {![$which has fits]} { return } switch -- [$which get type] { base {ExamineButtonBase $which $x $y} rgb {ExamineButtonRGB $which $x $y} 3d {ExamineButton3D $which $x $y} } } proc ExamineButtonBase {which x y} { global current global ds9 global pexamine # this code will not handle mosaics. # current coord set coord [$which get coordinates $x $y physical] # find filename/slice set fn [$which get fits file name full canvas $x $y] for {set ii 2} {$ii<$ds9(FTY_MAXAXES)} {incr ii} { set slice($ii) [$which get fits slice $ii] } # so the new frame will have all of the parent frame when created set ds9(next) $which GotoFrame # create frame if needed switch -- $pexamine(mode) { new {CreateFrame} one { if {[info exists pexamine(one)]} { if {$which == $pexamine(one)} { # do nothing, we clicked in the examine frame return } DeleteSingleFrame $pexamine(one) CreateFrame set pexamine(one) $current(frame) } else { CreateFrame set pexamine(one) $current(frame) } } } # go to tile mode in case set current(display) tile DisplayMode # load data LoadFitsFile $fn {} {} RealizeDS9 # set slice for {set ii 2} {$ii<$ds9(FTY_MAXAXES)} {incr ii} { $current(frame) update fits slice $ii $slice($ii) } # zoom to about if {[$current(frame) has fits bin]} { set bf "[$current(frame) get bin factor]" set bx [expr [lindex $bf 0]/$pexamine(zoom)] set by [expr [lindex $bf 1]/$pexamine(zoom)] $current(frame) bin factor to $bx $by about \ [lindex $coord 0] [lindex $coord 1] } else { $current(frame) zoom $pexamine(zoom) $pexamine(zoom) \ about physical [lindex $coord 0] [lindex $coord 1] } # back to original frame set ds9(next) $which GotoFrame # update any dialogs UpdateDS9 } proc ExamineButtonRGB {which x y} { global current global ds9 global pexamine # this code is far from perfect. It assumes data is loaded into the red # and it is the keychannel. Furthermore, it assumes either images or bin # tables are loaded into each channel, but not both. # this code will not handle mosaics. # save current channel set channel [$which get rgb channel] # current coord $which rgb channel red set coord [$which get coordinates $x $y physical] # find filename/slice foreach cc {red green blue} { $which rgb channel $cc set fn($cc) [$which get fits file name full canvas $x $y] for {set ii 2} {$ii<$ds9(FTY_MAXAXES)} {incr ii} { set slice($cc,$ii) [$which get fits slice $ii] } } # so the new frame will have all of the parent frame when created set ds9(next) $which GotoFrame # create frame if needed switch -- $pexamine(mode) { new {CreateRGBFrame} one { if {[info exists pexamine(one)]} { if {$which == $pexamine(one)} { # do nothing, we clicked in the examine frame return } DeleteSingleFrame $pexamine(one) CreateRGBFrame set pexamine(one) $current(frame) } else { CreateRGBFrame set pexamine(one) $current(frame) } } } # go to tile mode in case set current(display) tile DisplayMode # load data foreach cc {red green blue} { $current(frame) rgb channel $cc if {$fn($cc) != {}} { LoadFitsFile $fn($cc) {} {} } } RealizeDS9 # set slice foreach cc {red green blue} { $current(frame) rgb channel $cc for {set ii 2} {$ii<$ds9(FTY_MAXAXES)} {incr ii} { $current(frame) update fits slice $ii $slice($cc,$ii) } } # zoom to about $current(frame) rgb channel red if {[$current(frame) has fits bin]} { foreach cc {red green blue} { $which rgb channel $cc $current(frame) rgb channel $cc set bf "[$current(frame) get bin factor]" set bx [expr [lindex $bf 0]/$pexamine(zoom)] set by [expr [lindex $bf 1]/$pexamine(zoom)] $current(frame) bin factor to $bx $by about \ [lindex $coord 0] [lindex $coord 1] } } else { $current(frame) zoom $pexamine(zoom) $pexamine(zoom) \ about image [lindex $coord 0] [lindex $coord 1] } # set channel $current(frame) rgb channel $channel # back to original frame set ds9(next) $which GotoFrame $current(frame) rgb channel $channel # update any dialogs UpdateDS9 } proc ExamineButton3D {which x y} { global current global ds9 global pexamine # this code will not handle mosaics. # current coord set coord [$which get coordinates $x $y physical] # find filename/slice set fn [$which get fits file name full canvas $x $y] for {set ii 2} {$ii<$ds9(FTY_MAXAXES)} {incr ii} { set slice($ii) [$which get fits slice $ii] } # and 3d info set rr [$current(frame) get 3d view] set az [lindex $rr 0] set el [lindex $rr 1] set method [$current(frame) get 3d method] # so the new frame will have all of the parent frame when created set ds9(next) $which GotoFrame # create frame if needed switch -- $pexamine(mode) { new {Create3DFrame} one { if {[info exists pexamine(one)]} { if {$which == $pexamine(one)} { # do nothing, we clicked in the examine frame return } DeleteSingleFrame $pexamine(one) Create3DFrame set pexamine(one) $current(frame) } else { Create3DFrame set pexamine(one) $current(frame) } } } # go to tile mode in case set current(display) tile DisplayMode # load data LoadFitsFile $fn {} {} RealizeDS9 # set slice for {set ii 2} {$ii<$ds9(FTY_MAXAXES)} {incr ii} { $current(frame) update fits slice $ii $slice($ii) } # zoom to about if {[$current(frame) has fits bin]} { set bf "[$current(frame) get bin factor]" set bx [expr [lindex $bf 0]/$pexamine(zoom)] set by [expr [lindex $bf 1]/$pexamine(zoom)] $current(frame) bin factor to $bx $by about \ [lindex $coord 0] [lindex $coord 1] } else { $current(frame) zoom $pexamine(zoom) $pexamine(zoom) \ about physical [lindex $coord 0] [lindex $coord 1] } # set 3d $current(frame) 3d view $az $el $current(frame) 3d method $method # back to original frame set ds9(next) $which GotoFrame # update any dialogs UpdateDS9 } # Prefs proc PrefsDialogExamine {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Examine}] lappend dprefs(tabs) [ttk::frame $w.examine] # Examine set f [ttk::labelframe $w.examine.mode -text [msgcat::mc {Mode}]] ttk::radiobutton $f.new -text [msgcat::mc {New Frame each Time}] \ -variable pexamine(mode) -value new ttk::radiobutton $f.one -text [msgcat::mc {Examine Frame}] \ -variable pexamine(mode) -value one grid $f.new -padx 2 -pady 2 -sticky w grid $f.one -padx 2 -pady 2 -sticky w set f [ttk::labelframe $w.examine.mag -text [msgcat::mc {Magnification}]] ttk::radiobutton $f.x1 -text {1x} -variable pexamine(zoom) -value 1 ttk::radiobutton $f.x2 -text {2x} -variable pexamine(zoom) -value 2 ttk::radiobutton $f.x4 -text {4x} -variable pexamine(zoom) -value 4 ttk::radiobutton $f.x8 -text {8x} -variable pexamine(zoom) -value 8 ttk::radiobutton $f.x16 -text {16x} -variable pexamine(zoom) -value 16 grid $f.x1 $f.x2 $f.x4 $f.x8 $f.x16 -padx 2 -pady 2 -sticky w pack $w.examine.mode $w.examine.mag -side top -fill both -expand true } saods9/ds9/library/export.tcl000644 000765 000000 00000020465 12705445647 016601 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ExportDef {} { global export set export(array,endian) native set export(nrrd,endian) native set export(envi,endian) native set export(jpeg,quality) 75 set export(tiff,compress) none } proc Export {fn format fn2} { global export switch $format { array {ExportArrayFile $fn $export(array,endian)} rgbarray {ExportRGBArrayFile $fn $export(array,endian)} nrrd {ExportNRRDFile $fn $export(nrrd,endian)} envi {ExportENVIFile $fn $fn2 $export(envi,endian)} gif {ExportPhotoFile $fn $format {}} tiff {ExportPhotoFile $fn $format $export(tiff,compress)} jpeg {ExportPhotoFile $fn $format $export(jpeg,quality)} png {ExportPhotoFile $fn $format {}} } } # Process Cmds proc ProcessExportCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized ProcessRealizeDS9 set format {} set fn [lindex $var $i] set fn2 {} if {$fn == {}} { return } switch -- $fn { array - rgbarray - nrrd - envi - gif - tiff - jpeg - png { set format $fn set fn {} incr i } jpg { set format jpeg set fn {} incr i } tif { set format tiff set fn {} incr i } } # one last time if {$fn == {}} { set fn [lindex $var $i] if {$fn == {}} { return } } if {$format == {}} { set format [ExtToFormat $fn] } global export set param [string tolower [lindex $var [expr $i+1]]] switch $format { array - rgbarray { switch $param { native - big - bigendian - little - littleendian { set export(array,endian) $param incr i } } } nrrd { switch $param { native - big - bigendian - little - littleendian { set export(nrrd,endian) $param incr i } } } envi { switch $param { {} {set fn2 "[file rootname $fn].bsq"} native - big - bigendian - little - littleendian { set fn2 "[file rootname $fn].bsq" set export(envi,endian) $param incr i } default { if {[string range $param 0 0] == {-}} { set fn2 "[file rootname $fn].bsq" } else { set fn2 $param incr i set param [string tolower [lindex $var [expr $i+1]]] switch $param { native - big - bigendian - little - littleendian { set export(envi,endian) $param incr i } } } } } } gif {} jpeg { if {$param != {} && [string is integer $param]} { set export(jpeg,quality) $param incr i } } tiff { switch $param { none - jpeg - packbits - deflate { set export(tiff,compress) $param incr i } } } png {} } global arrayfbox global rgbarrayfbox global giffbox global jpegfbox global tifffbox global pngfbox global nrrdfbox global envifbox global envi2fbox switch -- $format { array {FileLast arrayfbox $fn} rgbarray {FileLast rgbarrayfbox $fn} nrrd {FileLast nrrdfbox $fn} envi { FileLast envifbox $fn FileLast envi2fbox $fn2 } gif {FileLast giffbox $fn} jpeg {FileLast jpegfbox $fn} tiff {FileLast tifffbox $fn} png {FileLast pngfbox $fn} } Export $fn $format $fn2 } # Support proc ExportDialog {format} { global export global arrayfbox global rgbarrayfbox global nrrdfbox global envifbox global envi2fbox global giffbox global jpegfbox global tifffbox global pngfbox switch -- $format { array {set fn [SaveFileDialog arrayfbox]} rgbarray {set fn [SaveFileDialog rgbarrayfbox]} nrrd {set fn [SaveFileDialog nrrdfbox]} envi {set fn [SaveFileDialog envifbox]} gif {set fn [SaveFileDialog giffbox]} jpeg {set fn [SaveFileDialog jpegfbox]} tiff {set fn [SaveFileDialog tifffbox]} png {set fn [SaveFileDialog pngfbox]} } set fn2 {} if {$fn != {}} { set ok 1 switch -- $format { array {set ok [ArrayExportDialog export(array,endian)]} rgbarray {} nrrd {set ok [ArrayExportDialog export(nrrd,endian)]} envi { set fn2 "[file rootname $fn].bsq" SetFileLast envi2 $fn2 # set fn2 [SaveFileDialog envi2fbox] # if {$fn2 == {}} { # set ok 0 # } if {$ok} { set ok [ArrayExportDialog export(envi,endian)] } } gif {} jpeg {set ok [JPEGExportDialog export(jpeg,quality)]} tiff {set ok [TIFFExportDialog export(tiff,compress)]} png {} } if {$ok} { Export $fn $format $fn2 } } } proc ArrayExportDialog {varname} { upvar $varname var global ed2 set w {.arr} set ed2(ok) 0 set ed2(arch) $var DialogCreate $w [msgcat::mc {Export Array}] ed2(ok) # Arch set f [ttk::labelframe $w.arch -text [msgcat::mc {Architecture}] -padding 2] ttk::radiobutton $f.native -text {Native} -variable ed2(arch) \ -value native ttk::radiobutton $f.big -text {Big-Endian} -variable ed2(arch) \ -value big ttk::radiobutton $f.little -text {Little-Endian} -variable ed2(arch) \ -value little grid $f.native -padx 2 -pady 2 -sticky w grid $f.big -padx 2 -pady 2 -sticky w grid $f.little -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed2(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed2(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed2(ok) 1} # Fini grid $w.arch -sticky news grid $w.buttons -sticky ew grid rowconfigure $w 0 -weight 1 grid columnconfigure $w 0 -weight 1 DialogCenter $w DialogWait $w ed2(ok) DialogDismiss $w if {$ed2(ok)} { set var $ed2(arch) } set rr $ed2(ok) unset ed2 return $rr } proc TIFFExportDialog {varname} { upvar $varname var global ed2 set w {.savetiff} set ed2(ok) 0 set ed2(compress) $var DialogCreate $w {TIFF} ed2(ok) # Param set f [ttk::frame $w.param] ttk::label $f.title -text [msgcat::mc {Compression}] ttk::radiobutton $f.none -text [msgcat::mc {None}] \ -variable ed2(compress) -value none ttk::radiobutton $f.jpeg -text {JPEG} \ -variable ed2(compress) -value jpeg ttk::radiobutton $f.packbits -text {Packbits} \ -variable ed2(compress) -value packbits ttk::radiobutton $f.deflate -text {Deflate} \ -variable ed2(compress) -value deflate grid $f.title -padx 2 -pady 2 -sticky w grid $f.none -padx 2 -pady 2 -sticky w grid $f.jpeg -padx 2 -pady 2 -sticky w grid $f.packbits -padx 2 -pady 2 -sticky w grid $f.deflate -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed2(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed2(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed2(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed2(ok) DialogDismiss $w if {$ed2(ok)} { set var $ed2(compress) } set rr $ed2(ok) unset ed2 return $rr } proc JPEGExportDialog {varname} { upvar $varname var global ed2 set w {.savejpeg} set ed2(ok) 0 set ed2(quality) $var DialogCreate $w {JPEG} ed2(ok) # Param set f [ttk::frame $w.param] slider $f.squality 0 100 [msgcat::mc {JPEG Quality Factor}] \ ed2(quality) {} grid $f.squality -padx 2 -pady 2 -sticky ew grid columnconfigure $f 0 -weight 1 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed2(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed2(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed2(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed2(ok) DialogDismiss $w if {$ed2(ok)} { set var $ed2(quality) } set rr $ed2(ok) unset ed2 return $rr } saods9/ds9/library/external.tcl000644 000765 000000 00000002375 12705445647 017102 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc InitExternalFile {} { global ds9 if {[file exists "./$ds9(ext,file)"]} { ProcessExternalFile "./$ds9(ext,file)" } elseif {[file exists "./$ds9(ext,alt)"]} { ProcessExternalFile "./$ds9(ext,alt)" } elseif {[file exists "~/$ds9(ext,file)"]} { ProcessExternalFile "~/$ds9(ext,file)" } elseif {[file exists "~/$ds9(ext,alt)"]} { ProcessExternalFile "~/$ds9(ext,alt)" } } proc ProcessExternalFile {fn} { global extFits set status 1 if {[file exists "$fn"]} { set id [open $fn r] while {[gets $id line] >= 0} { # empty line if {[string length $line] == 0} continue # comments if {[string range $line 0 0] == "\#"} continue # else switch -- $status { 1 { # eat the line set template {} set status 2 } 2 { set template "$line" set status 3 } 3 { # eat the line set status 4 } 4 { if {"$template" != {} && "$line" != {}} { foreach t $template { set extFits($t) "$line" } } set status 1 } } } close $id } } saods9/ds9/library/file.tcl000644 000765 000000 00000015636 12705445647 016203 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # backward compatibility proc ProcessFileCmd {varname iname sock ch fn} { upvar $varname var upvar $iname i set vvar $var set ii $i set zero $i set one [expr $i+1] set two [expr $i+2] set three [expr $i+3] switch -- [string tolower [lindex $var $zero]] { new { switch -- [string tolower [lindex $var $one]] { slice {ProcessFitsCmd vvar ii $sock $fn} fits { set vvar [lreplace $var $one $one] ProcessFitsCmd vvar ii $sock $fn } sfits { set vvar [lreplace $var $one $one] ProcessSFitsCmd vvar ii $sock $fn } rgbimage { set vvar [lreplace $var $one $one] ProcessRGBImageCmd vvar ii $sock $fn } rgbcube { set vvar [lreplace $var $one $one] ProcessRGBCubeCmd vvar ii $sock $fn } srgbcube { set vvar [lreplace $var $one $one] ProcessSRGBCubeCmd vvar ii $sock $fn } mecube { set vvar [lreplace $var $one $one] ProcessMECubeCmd vvar ii $sock $fn } memf - multiframe { set vvar [lreplace $var $one $one] ProcessMultiFrameCmd vvar ii $sock $fn } mosaicimage { set vvar [lreplace $var $one $one] ProcessMosaicImageCmd vvar ii $sock $fn } mosaicimagewcs { set vvar [lreplace $var $one $one] ProcessMosaicImageWCSCmd vvar ii $sock $fn } mosaicimageiraf { set vvar [lreplace $var $one $one] ProcessMosaicImageIRAFCmd vvar ii $sock $fn } mosaicimagewfpc2 { set vvar [lreplace $var $one $one] ProcessMosaicImageWFPC2Cmd vvar ii $sock $fn } mosaic { set vvar [lreplace $var $one $one] ProcessMosaicCmd vvar ii $sock $fn } mosaicwcs { set vvar [lreplace $var $one $one] ProcessMosaicWCSCmd vvar ii $sock $fn } mosaiciraf { set vvar [lreplace $var $one $one] ProcessMosaicIRAFCmd vvar ii $sock $fn } smosaic { set vvar [lreplace $var $one $one] ProcessSMosaicCmd vvar ii $sock $fn } smosaicwcs { set vvar [lreplace $var $one $one] ProcessSMosaicWCSCmd vvar ii $sock $fn } smosaiciraf { set vvar [lreplace $var $one $one] ProcessSMosaicIRAFCmd vvar ii $sock $fn } url { set vvar [lreplace $var $one $one] ProcessURLFitsCmd vvar ii } array { set vvar [lreplace $var $one $one] ProcessArrayCmd vvar ii $sock $fn } rgbarray { set vvar [lreplace $var $one $one] ProcessRGBArrayCmd vvar ii $sock $fn } photo { set vvar [lreplace $var $one $one] ProcessTIFFCmd vvar ii $ch $fn } default {ProcessFitsCmd vvar ii $sock $fn} } } mask { switch -- [string tolower [lindex $var $one]] { fits { set vvar [lreplace $var $one $one] ProcessFitsCmd vvar ii $sock $fn } sfits { set vvar [lreplace $var $one $one] ProcessSFitsCmd vvar ii $sock $fn } mosaicimage { set vvar [lreplace $var $one $one] ProcessMosaicImageCmd vvar ii $sock $fn } mosaicimagewcs { set vvar [lreplace $var $one $one] ProcessMosaicImageWCSCmd vvar ii $sock $fn } mosaicimageiraf { set vvar [lreplace $var $one $one] ProcessMosaicImageIRAFCmd vvar ii $sock $fn } mosaicimagewfpc2 { set vvar [lreplace $var $one $one] ProcessMosaicImageWFPC2Cmd vvar ii $sock $fn } mosaic { set vvar [lreplace $var $one $one] ProcessMosaicCmd vvar ii $sock $fn } mosaicwcs { set vvar [lreplace $var $one $one] ProcessMosaicWCSCmd vvar ii $sock $fn } mosaiciraf { set vvar [lreplace $var $one $one] ProcessMosaicIRAFCmd vvar ii $sock $fn } smosaic { set vvar [lreplace $var $one $one] ProcessSMosaicCmd vvar ii $sock $fn } smosaicwcs { set vvar [lreplace $var $one $one] ProcessSMosaicWCSCmd vvar ii $sock $fn } smosaiciraf { set vvar [lreplace $var $one $one] ProcessSMosaicIRAFCmd vvar ii $sock $fn } array { set vvar [lreplace $var $one $one] ProcessArrayCmd vvar ii $sock $fn } default {ProcessFitsCmd vvar ii $sock $fn} } } slice {ProcessFitsCmd vvar ii $sock $fn} fits { set vvar [lreplace $var $zero $zero] ProcessFitsCmd vvar ii $sock $fn } sfits { set vvar [lreplace $var $zero $zero] ProcessSFitsCmd vvar ii $sock $fn } rgbimage { set vvar [lreplace $var $zero $zero] ProcessRGBImageCmd vvar ii $sock $fn } rgbcube { set vvar [lreplace $var $zero $zero] ProcessRGBCubeCmd vvar ii $sock $fn } srgbcube { set vvar [lreplace $var $zero $zero] ProcessSRGBCubeCmd vvar ii $sock $fn } mecube { set vvar [lreplace $var $zero $zero] ProcessMECubeCmd vvar ii $sock $fn } memf - multiframe { set vvar [lreplace $var $zero $zero] ProcessMultiFrameCmd vvar ii $sock $fn } mosaicimage { set vvar [lreplace $var $zero $zero] ProcessMosaicImageCmd vvar ii $sock $fn } mosaicimagewcs { set vvar [lreplace $var $zero $zero] ProcessMosaicImageWCSCmd vvar ii $sock $fn } mosaicimageiraf { set vvar [lreplace $var $zero $zero] ProcessMosaicImageIRAFCmd vvar ii $sock $fn } mosaicimagewfpc2 { set vvar [lreplace $var $zero $zero] ProcessMosaicImageWFPC2Cmd vvar ii $sock $fn } mosaic { set vvar [lreplace $var $zero $zero] ProcessMosaicCmd vvar ii $sock $fn } mosaicwcs { set vvar [lreplace $var $zero $zero] ProcessMosaicWCSCmd vvar ii $sock $fn } mosaiciraf { set vvar [lreplace $var $zero $zero] ProcessMosaicIRAFCmd vvar ii $sock $fn } smosaic { set vvar [lreplace $var $zero $zero] ProcessSMosaicCmd vvar ii $sock $fn } smosaicwcs { set vvar [lreplace $var $zero $zero] ProcessSMosaicWCSCmd vvar ii $sock $fn } smosaiciraf { set vvar [lreplace $var $zero $zero] ProcessSMosaicIRAFCmd vvar ii $sock $fn } url { set vvar [lreplace $var $zero $zero] ProcessURLFitsCmd vvar ii } array { set vvar [lreplace $var $zero $zero] ProcessArrayCmd vvar ii $sock $fn } rgbarray { set vvar [lreplace $var $zero $zero] ProcessRGBArrayCmd vvar ii $sock $fn } photo { set vvar [lreplace $var $zero $zero] ProcessTIFFCmd vvar ii $ch $fn } save { set which image set fn {} switch -- [string tolower [lindex $var $one]] { resample { set which resample switch -- [string tolower [lindex $var $two]] { gz { # ignore set fn [lindex $var $three] } default {set fn [lindex $var $two]} } } gz { # ignore set fn [lindex $var $two] } default {set fn [lindex $var $one]} } SaveFitsFile $which $fn } default {ProcessFitsCmd vvar ii $sock $fn} } } proc ProcessSendFileCmd {proc id param} { global current if {$current(frame) != {}} { $proc $id "[$current(frame) get fits file name full]\n" } } saods9/ds9/library/fits.tcl000644 000765 000000 00000020615 12705445647 016222 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadFitsFile {fn layer mode} { global loadParam global current global pds9 global marker set loadParam(file,type) fits set loadParam(file,mode) $mode set loadParam(load,type) mmapincr set loadParam(file,name) $fn set loadParam(load,layer) $layer ConvertFitsFile # save load type, since ProcessLoad will clear loadParam if {$loadParam(load,type) == "mmapincr"} { set mmap 1 } else { set mmap 0 } ProcessLoad # now autoload markers if {$pds9(automarker) && $mmap} { # now, load fits[REGION] if present set id [string first "\[" $fn] if {$id > 0} { set base [string range $fn 0 [expr $id-1]] } else { set base $fn } set reg "${base}\[REGION\]" if {[$current(frame) fitsy has ext "\"$reg\""]} { RealizeDS9 catch { $current(frame) marker load fits "\"$reg\"" $marker(color) $marker(dashlist) $marker(width) "\{$marker(font) $marker(font,size) $marker(font,weight) $marker(font,slant)\}" } } } } proc LoadFitsAlloc {path fn layer mode} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) $mode set loadParam(load,type) allocgz set loadParam(file,name) $fn set loadParam(file,fn) $path set loadParam(load,layer) $layer ProcessLoad } proc LoadFitsSocket {sock fn layer mode} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) $mode set loadParam(load,type) socketgz set loadParam(file,name) $fn set loadParam(socket,id) $sock set loadParam(load,layer) $layer return [ProcessLoad 0] } proc SaveFitsFile {which fn} { global current if {$fn == {} || $current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save fits $which file "\{$fn\}" } proc SaveFitsSocket {which sock} { global current if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save fits $which socket $sock } proc ProcessFitsCmd {varname iname sock fn} { upvar $varname var upvar $iname i if {[ProcessFitsBackwardCmd $varname $iname $sock $fn]} { return } global loadParam global current set layer {} set mode {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i set layer mask } slice { incr i set mode slice } } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa if {![LoadFitsSocket $sock $param $layer $mode]} { InitError xpa LoadFitsFile $param $layer $mode } } else { # comm if {$fn != {}} { LoadFitsAlloc $fn $param $layer $mode } else { LoadFitsFile $param $layer $mode } } FinishLoad } proc ProcessSendFitsCmd {proc id param sock fn} { global current if {$current(frame) == {}} { return } set which image switch -- [string tolower [lindex $param 0]] { width { $proc $id "[$current(frame) get fits width]\n" return } height { $proc $id "[$current(frame) get fits height]\n" return } depth { $proc $id "[$current(frame) get fits depth 2]\n" return } bitpix { $proc $id "[$current(frame) get fits bitpix]\n" return } size { set sys [lindex $param 1] set sky [lindex $param 2] set format [lindex $param 3] if {$sys == {} && $sky == {} && $format == {}} { $proc $id "[$current(frame) get fits size]\n" } else { FixSpec sys sky format image fk5 degrees $proc $id "[$current(frame) get fits size $sys $sky $format]\n" } return } header { switch -- [llength $param] { 1 {ProcessSend $proc $id {} $fn {.txt} "[$current(frame) get fits header 1]\n"} 2 {ProcessSend $proc $id {} $fn {.txt} "[$current(frame) get fits header [lindex $param 1]]\n"} 3 { set key [lindex $param 2] set key [string trim $key \'] set key [string trim $key \{] set key [string trim $key \}] $proc $id "[string trim [$current(frame) get fits header keyword \{$key\}]]\n" } 4 { set key [lindex $param 3] set key [string trim $key \'] set key [string trim $key \{] set key [string trim $key \}] $proc $id "[string trim [$current(frame) get fits header [lindex $param 1] keyword \{$key\}]]\n" } } return } type { if {[$current(frame) has fits bin]} { $proc $id "table\n" } else { $proc $id "image\n" } return } table {set which table} image {} slice {set which slice} resample {set which resample} } if {$sock != {}} { # xpa SaveFitsSocket $which $sock } elseif {$fn != {}} { # comm SaveFitsFile $which $fn $proc $id {} $fn } } # backward compatibility proc ProcessFitsBackwardCmd {varname iname sock fn} { upvar 2 $varname var upvar 2 $iname i set vvar $var set ii $i switch -- [string tolower [lindex $var $i]] { new { switch -- [string tolower [lindex $var [expr $i+1]]] { rgbimage { set vvar [lreplace $var 1 1] ProcessRGBImageCmd vvar ii $sock $fn return 1 } rgbcube { set vvar [lreplace $var 1 1] ProcessRGBCubeCmd vvar ii $sock $fn return 1 } datacube - mecube - medatacube { set vvar [lreplace $var 1 1] ProcessMECubeCmd vvar ii $sock $fn return 1 } mosaicimage { set vvar [lreplace $var 1 1] ProcessMosaicImageCmd vvar ii $sock $fn return 1 } mosaicimagewcs { set vvar [lreplace $var 1 1] ProcessMosaicImageWCSCmd vvar ii $sock $fn return 1 } mosaicimageiraf { set vvar [lreplace $var 1 1] ProcessMosaicImageIRAFCmd vvar ii $sock $fn return 1 } mosaicimagewfpc2 { set vvar [lreplace $var 1 1] ProcessMosaicImageWFPC2Cmd vvar ii $sock $fn return 1 } mosaic { set vvar [lreplace $var 1 1] ProcessMosaicCmd vvar ii $sock $fn return 1 } mosaicwcs { set vvar [lreplace $var 1 1] ProcessMosaicWCSCmd vvar ii $sock $fn return 1 } mosaiciraf { set vvar [lreplace $var 1 1] ProcessMosaicIRAFCmd vvar ii $sock $fn return 1 } } } mask { switch -- [string tolower [lindex $var [expr $i+1]]] { mosaicimage { set vvar [lreplace $var 1 1] ProcessMosaicImageCmd vvar ii $sock $fn return 1 } mosaicimagewcs { set vvar [lreplace $var 1 1] ProcessMosaicImageWCSCmd vvar ii $sock $fn return 1 } mosaicimageiraf { set vvar [lreplace $var 1 1] ProcessMosaicImageIRAFCmd vvar ii $sock $fn return 1 } mosaicimagewfpc2 { set vvar [lreplace $var 1 1] ProcessMosaicImageWFPC2Cmd vvar ii $sock $fn return 1 } mosaic { set vvar [lreplace $var 1 1] ProcessMosaicCmd vvar ii $sock $fn return 1 } mosaicwcs { set vvar [lreplace $var 1 1] ProcessMosaicWCSCmd vvar ii $sock $fn return 1 } mosaiciraf { set vvar [lreplace $var 1 1] ProcessMosaicIRAFCmd vvar ii $sock $fn return 1 } } } datacube - mecube - medatacube { set vvar [lreplace $var 0 0] ProcessMECubeCmd vvar ii $sock $fn return 1 } memf - multiframe { set vvar [lreplace $var 0 0] ProcessMultiFrameCmd vvar ii $sock $fn return 1 } rgbimage { set vvar [lreplace $var 0 0] ProcessRGBImageCmd vvar ii $sock $fn return 1 } rgbcube { set vvar [lreplace $var 0 0] ProcessRGBCubeCmd vvar ii $sock $fn return 1 } mosaicimage { set vvar [lreplace $var 0 0] ProcessMosaicImageCmd vvar ii $sock $fn return 1 } mosaicimagewcs { set vvar [lreplace $var 0 0] ProcessMosaicImageWCSCmd vvar ii $sock $fn return 1 } mosaicimageiraf { set vvar [lreplace $var 0 0] ProcessMosaicImageIRAFCmd vvar ii $sock $fn return 1 } mosaicimagewfpc2 { set vvar [lreplace $var 0 0] ProcessMosaicImageWFPC2Cmd vvar ii $sock $fn return 1 } mosaic { set vvar [lreplace $var 0 0] ProcessMosaicCmd vvar ii $sock $fn return 1 } mosaicwcs { set vvar [lreplace $var 0 0] ProcessMosaicWCSCmd vvar ii $sock $fn return 1 } mosaiciraf { set vvar [lreplace $var 0 0] ProcessMosaicIRAFCmd vvar ii $sock $fn return 1 } } return 0 } saods9/ds9/library/frame.tcl000644 000765 000000 00000151551 13002503726 016333 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Public Procedures proc CreateFrame {} { CreateNamedFrame base } proc CreateRGBFrame {} { CreateNamedFrame rgb RGBDialog } proc Create3DFrame {} { CreateNamedFrame 3d 3DDialog } proc CreateNamedFrame {type} { global ds9 # find the first open slot set num $ds9(next,num) while {1} { set which "Frame$num" if {[lsearch $ds9(frames) $which]==-1} { CreateNameNumberFrame $which $type set ds9(next,num) [expr $num+1] return } incr num } } proc CreateGotoFrame {num type} { global ds9 global active set which "Frame$num" if {[lsearch $ds9(frames) $which]==-1} { CreateNameNumberFrame $which $type set ds9(next,num) [expr $num+1] } else { if {$active($which)==0} { set active($which) 1 UpdateActiveFrames } set ds9(next) $which GotoFrame } } # used by backup proc CreateNameNumberFrame {which type} { global ds9 global pds9 global active global current global ipanner global ppanner global imagnifier global pmagnifier global bin global wcs global colorbar global scale global minmax global zscale global marker global pmarker global centroid global panzoom global block global smooth global pthreed global threed global cube set ds9(next) $which # update frame lists lappend ds9(frames) $ds9(next) lappend ds9(active) $ds9(next) set ds9(active,num) [llength $ds9(active)] set active($ds9(next)) 1 # and create the frame switch -- $type { base { $ds9(canvas) create frame$ds9(visual)$ds9(depth) \ -command $ds9(next) $ds9(next) colormap [colorbar get colormap] } rgb { $ds9(canvas) create framergb$ds9(visual)$ds9(depth) \ -command $ds9(next) $ds9(next) colormap [colorbarrgb get colormap] } 3d { $ds9(canvas) create frame3d$ds9(visual)$ds9(depth) \ -command $ds9(next) $ds9(next) colormap [colorbar get colormap] } } $ds9(next) configure -x 0 -y 0 \ -anchor nw \ -tag $ds9(next) \ -helvetica $ds9(helvetica) \ -courier $ds9(courier) \ -times $ds9(times) $ds9(next) threads $ds9(threads) $ds9(next) panner 'panner' $ipanner(size) $ipanner(size) $ds9(next) magnifier 'magnifier' $imagnifier(size) $imagnifier(size) $ds9(next) magnifier zoom $pmagnifier(zoom) $ds9(next) magnifier graphics $pmagnifier(region) $ds9(next) magnifier cursor $pmagnifier(cursor) $ds9(next) zoom to $current(zoom) $ds9(next) rotate to $current(rotate) $ds9(next) orient $current(orient) $ds9(next) wcs align $current(align) $ds9(next) pan preserve $panzoom(preserve) # set so prefs (pwcs) will work # may cause other problems, but can't remember why $ds9(next) wcs $wcs(system) $wcs(sky) $wcs(skyformat) $ds9(next) datasec $scale(datasec) $ds9(next) bg color $pds9(bg) $ds9(next) nan color $pds9(nan) $ds9(next) iraf align $pds9(iraf) $ds9(next) marker epsilon $pmarker(epsilon) $ds9(next) marker show $marker(show) $ds9(next) marker show text $marker(show,text) $ds9(next) marker centroid auto $marker(centroid,auto) $ds9(next) marker centroid radius $marker(centroid,radius) $ds9(next) marker centroid iteration $marker(centroid,iteration) $ds9(next) marker preserve $marker(preserve) # Frame type items switch -- [$ds9(next) get type] { base - rgb {} 3d { $ds9(next) 3d method $pthreed(method) $ds9(next) 3d background $pthreed(background) $ds9(next) 3d border $pthreed(border) $ds9(next) 3d border color $pthreed(border,color) $ds9(next) 3d compass $pthreed(compass) $ds9(next) 3d compass color $pthreed(compass,color) $ds9(next) 3d highlite $pthreed(highlite) $ds9(next) 3d highlite color $pthreed(highlite,color) } } # channel dependent items switch -- [$ds9(next) get type] { base - 3d { $ds9(next) colorscale $scale(type) $ds9(next) colorscale log $scale(log) $ds9(next) clip scope $scale(scope) $ds9(next) clip mode $scale(mode) $ds9(next) clip minmax $minmax(sample) $minmax(mode) $ds9(next) clip user $scale(min) $scale(max) $ds9(next) clip zscale \ $zscale(contrast) $zscale(sample) $zscale(line) $ds9(next) datasec $scale(datasec) $ds9(next) bin function $bin(function) $ds9(next) bin factor to $bin(factor) $ds9(next) bin depth $bin(depth) $ds9(next) bin buffer size $bin(buffersize) $ds9(next) block to $block(factor) $ds9(next) cube axes $cube(axes) if {$smooth(view)} { $ds9(next) smooth $smooth(function) $smooth(radius) } } rgb { foreach c {red green blue} { $ds9(next) rgb channel $c $ds9(next) colorscale $scale(type) $ds9(next) colorscale log $scale(log) $ds9(next) clip scope $scale(scope) $ds9(next) clip mode $scale(mode) $ds9(next) clip minmax $minmax(sample) $minmax(mode) $ds9(next) clip user $scale(min) $scale(max) $ds9(next) clip zscale \ $zscale(contrast) $zscale(sample) $zscale(line) $ds9(next) datasec $scale(datasec) $ds9(next) bin function $bin(function) $ds9(next) bin factor to $bin(factor) $ds9(next) bin depth $bin(depth) $ds9(next) bin buffer size $bin(buffersize) $ds9(next) block to $block(factor) $ds9(next) cube axes $cube(axes) if {$smooth(view)} { $ds9(next) smooth $smooth(function) $smooth(radius) } } $ds9(next) rgb channel red } } switch $current(mode) { crosshair - analysis { $ds9(next) crosshair on } } UpdateFrameMenuItems UpdateDS9Static if {$current(frame) != {}} { $current(frame) colorbar tag "\{[$current(colorbar) get tag]\}" } set current(frame) $ds9(next) set ds9(next) {} DisplayMode } proc DeleteAllFramesMenu {} { global pds9 if {$pds9(confirm)} { if {[tk_messageBox -type okcancel -icon question -message [msgcat::mc {Delete All Frames?}]] != {ok}} { return } } DeleteAllFrames } proc DeleteCurrentFrame {} { global current if {$current(frame) != {}} { DeleteSingleFrame $current(frame) } } proc DeleteAllFrames {} { global ds9 foreach ff $ds9(frames) { DeleteFrame $ff } set ds9(next,num) 1 UpdateFrameMenuItems UpdateActiveFrames UpdateDS9Static ClearInfoBox PixelTableClearDialog ClearGraphData } proc DeleteSingleFrame {which} { DeleteFrame $which UpdateFrameMenuItems UpdateActiveFrames UpdateDS9Static PixelTableClearDialog ClearGraphData } proc DeleteFrame {which} { global ds9 global active global current global contour global marker # clear any loaded images ClearFrame $which # contour copy if {$contour(copy) == $which} { set contour(copy) {} } # marker copy if {$marker(copy) == $which} { set marker(copy) {} } # delete canvas widget $ds9(canvas) delete $which # setup for next frame set ii [lsearch $ds9(active) $which] if {$ii>0} { set ds9(next) [lindex $ds9(active) [expr $ii-1]] set ds9(active) [lreplace $ds9(active) $ii $ii] set ds9(active,num) [llength $ds9(active)] unset active($which) } else { set ds9(next) {} } # delete it from the frame list set ii [lsearch $ds9(frames) $which] set ds9(frames) [lreplace $ds9(frames) $ii $ii] } proc UpdateCurrentFrame {} { global current UpdateFrame $current(frame) } proc UpdateAllFrame {} { global ds9 foreach f $ds9(frames) { UpdateFrame $f } } proc UpdateFrame {which} { if {$which != {}} { $which update } } # Event Processing proc BindEventsFrame {which} { global ds9 global debug if {$debug(tcl,events)} { puts stderr "BindEventsFrame $which" } $ds9(canvas) bind $which [list MotionFrame $which %x %y] $ds9(canvas) bind $which \ [list ShiftMotionFrame $which %x %y] $ds9(canvas) bind $which \ [list ControlMotionFrame $which %x %y] $ds9(canvas) bind $which [list EnterFrame $which %x %y] $ds9(canvas) bind $which [list LeaveFrame $which] $ds9(canvas) bind $which [list Button1Frame $which %x %y] $ds9(canvas) bind $which \ [list ShiftButton1Frame $which %x %y] $ds9(canvas) bind $which \ [list ControlButton1Frame $which %x %y] $ds9(canvas) bind $which \ [list ControlShiftButton1Frame $which %x %y] $ds9(canvas) bind $which [list Motion1Frame $which %x %y] $ds9(canvas) bind $which \ [list Release1Frame $which %x %y] $ds9(canvas) bind $which [list Double1Frame $which %x %y] $ds9(canvas) bind $which \ [list DoubleRelease1Frame $which %x %y] switch $ds9(wm) { x11 - win32 { $ds9(canvas) bind $which \ [list Button2Frame $which %x %y] $ds9(canvas) bind $which \ [list ShiftButton2Frame $which %x %y] $ds9(canvas) bind $which \ [list Motion2Frame $which %x %y] $ds9(canvas) bind $which \ [list Release2Frame $which %x %y] } aqua { # swap button-2 and button-3 on the mighty mouse $ds9(canvas) bind $which \ [list Button2Frame $which %x %y] $ds9(canvas) bind $which \ [list ShiftButton2Frame $which %x %y] $ds9(canvas) bind $which \ [list Motion2Frame $which %x %y] $ds9(canvas) bind $which \ [list Release2Frame $which %x %y] # x11 option key emulation $ds9(canvas) bind $which \ [list Button2Frame $which %x %y] $ds9(canvas) bind $which \ [list Motion2Frame $which %x %y] $ds9(canvas) bind $which \ [list Release2Frame $which %x %y] # x11 command key emulation # we need this to eat the Button-1 events # so it passes to the canvas $ds9(canvas) bind $which {set foo bar} $ds9(canvas) bind $which {set foo bar} $ds9(canvas) bind $which {set foo bar} } } switch $ds9(wm) { x11 { $ds9(canvas) bind $which \ [list Button4Frame $which %x %y] $ds9(canvas) bind $which \ [list Button5Frame $which %x %y] } aqua - win32 {} } BindEventsFrameKey $which } proc BindEventsFrameKey {which} { global ds9 global ianalysis global debug if {$debug(tcl,events)} { puts stderr "BindEventsFrameKey $which" } $ds9(canvas) bind $which [list KeyFrame $which %K %A %x %y] $ds9(canvas) bind $which \ [list KeyReleaseFrame $which %K %A %x %y] for {set i 0} {$i<$ianalysis(bind,count)} {incr i} { $ds9(canvas) bind $which "$ianalysis(bind,$i,item)" \ [list AnalysisTask $i bind $which %x %y] } } proc UnBindEventsFrame {which} { global ds9 global debug if {$debug(tcl,events)} { puts stderr "UnBindEventsFrame $which" } $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} switch $ds9(wm) { x11 - win32 { $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} } aqua { $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} } } switch $ds9(wm) { x11 { $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} } aqua - win32 {} } UnBindEventsFrameKey $which } proc UnBindEventsFrameKey {which} { global ds9 global ianalysis global debug if {$debug(tcl,events)} { puts stderr "UnBindEventsFrameKey $which" } $ds9(canvas) bind $which {} $ds9(canvas) bind $which {} for {set i 0} {$i<$ianalysis(bind,count)} {incr i} { $ds9(canvas) bind $which "$ianalysis(bind,$i,item)" {} } } proc EnterFrame {which x y} { global ds9 global current global view global debug if {$debug(tcl,events)} { puts stderr "EnterFrame $which" } # check to see if this event was generated while processing other events if {$ds9(b1) || $ds9(sb1) || $ds9(cb1) || $ds9(csb1) || $ds9(b2) || $ds9(b3)} { return } $ds9(canvas) focus $which switch -- $current(mode) { crosshair - analysis { set coord [$which get crosshair canvas] set x [lindex $coord 0] set y [lindex $coord 1] } none - pointer - region - catalog - pan - zoom - rotate - crop - colorbar - examine - iexam {} } EnterInfoBox $which UpdateInfoBox $which $x $y canvas UpdatePixelTableDialog $which $x $y canvas UpdateGraph $which $x $y canvas UpdateGraphXAxis $which UpdateGraphYAxis $which UpdateMagnifier $which $x $y if {$view(magnifier)} { # don't turn on the magnifier until we've finished the init process # this a real problem with 3d frames if {!$ds9(init)} { $which magnifier on } } UpdateEditMenu } proc LeaveFrame {which} { global ds9 global current global debug if {$debug(tcl,events)} { puts stderr "LeaveFrame $which" } # check to see if this event was generated while processing other events if {$ds9(b1) || $ds9(sb1) || $ds9(cb1) || $ds9(csb1) || $ds9(b2) || $ds9(b3)} { return } $ds9(canvas) focus {} switch -- $current(mode) { crosshair - analysis {} none - pointer - region - colorbar - pan - zoom - rotate - crop - catalog - examine - iexam { LeaveInfoBox PixelTableClearDialog ClearGraphData } } $which magnifier off magnifier clear } proc MotionFrame {which x y} { global debug if {$debug(tcl,events)} { puts stderr "MotionFrame $which" } DoMotion $which $x $y sizing fleur } proc ShiftMotionFrame {which x y} { global debug if {$debug(tcl,events)} { puts stderr "ShiftMotionFrame $which" } DoMotion $which $x $y exchange fleur } proc ControlMotionFrame {which x y} { global debug if {$debug(tcl,events)} { puts stderr "ControlMotionFrame $which" } DoMotion $which $x $y sizing draped_box } proc DoMotion {which x y cursor1 cursor2} { global ds9 global current # if button 3 is down, ignore this event, we are doing something already if {$ds9(b3) || $ds9(b2)} { return } switch -- $current(mode) { pointer - region - catalog - analysis { if {$which == $current(frame)} { MarkerCursor $which $x $y $cursor1 $cursor2 } UpdateColormapLevelMosaic $which $x $y canvas UpdateInfoBox $which $x $y canvas UpdatePixelTableDialog $which $x $y canvas UpdateGraph $which $x $y canvas } none - colorbar - pan - zoom - rotate - crop - examine - iexam { UpdateColormapLevelMosaic $which $x $y canvas UpdateInfoBox $which $x $y canvas UpdatePixelTableDialog $which $x $y canvas UpdateGraph $which $x $y canvas } crosshair {} } UpdateMagnifier $which $x $y } proc Button1Frame {which x y} { global ds9 global current global imarker global debug if {$debug(tcl,events)} { puts stderr "Button1Frame $which" } # let others know that the mouse is down set ds9(b1) 1 switch -- $current(mode) { none { if {$which == $current(frame)} { } else { # we need this cause MarkerMotion maybe called, # and we don't want it set imarker(motion) none set imarker(handle) -1 set ds9(next) $which GotoFrame } UpdateMagnifier $which $x $y } pointer - region { if {$which == $current(frame)} { MarkerButton $which $x $y } else { # we need this cause MarkerMotion maybe called, # and we don't want it set imarker(motion) none set imarker(handle) -1 set ds9(next) $which GotoFrame } UpdateMagnifier $which $x $y } crosshair { CrosshairButton $which $x $y UpdateColormapLevelMosaic $which $x $y canvas UpdateInfoBox $which $x $y canvas UpdatePixelTableDialog $which $x $y canvas UpdateGraph $which $x $y canvas UpdateMagnifier $which $x $y } colorbar { ColorbarButton3 $x $y } pan { PanButton $which $x $y UpdateMagnifier $which $x $y } zoom { ZoomButton $which $x $y UpdateMagnifier $which $x $y } rotate {RotateButton $which $x $y} crop { CropButton $which $x $y UpdateMagnifier $which $x $y } catalog { if {$which == $current(frame)} { CATButton $which $x $y } else { # we need this cause MarkerMotion maybe called, # and we don't want it set imarker(motion) none set imarker(handle) -1 set ds9(next) $which GotoFrame } UpdateMagnifier $which $x $y } analysis { IMEButton $which $x $y UpdateColormapLevelMosaic $which $x $y canvas UpdateInfoBox $which $x $y canvas UpdatePixelTableDialog $which $x $y canvas UpdateGraph $which $x $y canvas UpdateMagnifier $which $x $y } examine {ExamineButton $which $x $y} iexam {IExamButton $which $x $y} } } proc ShiftButton1Frame {which x y} { global ds9 global current global debug if {$debug(tcl,events)} { puts stderr "ShiftButton1Frame $which" } # let others know that the mouse is down set ds9(sb1) 1 switch -- $current(mode) { none {} pointer - region { if {$which == $current(frame)} { MarkerShift $which $x $y } UpdateMagnifier $which $x $y } crosshair {} colorbar {} pan {} zoom {ZoomShift $which} rotate - crop { Crop3dButton $which $x $y 0 UpdateMagnifier $which $x $y } catalog { if {$which == $current(frame)} { CATShift $which $x $y } UpdateMagnifier $which $x $y } analysis { IMEShift $which $x $y UpdateMagnifier $which $x $y } examine - iexam {} } } proc ControlButton1Frame {which x y} { global ds9 global current global imarker global debug if {$debug(tcl,events)} { puts stderr "ControlButton1Frame $which" } # let others know that the mouse is down set ds9(cb1) 1 switch -- $current(mode) { none {} pointer - region - catalog { if {$which == $current(frame)} { MarkerControl $which $x $y } else { # we need this cause MarkerMotion maybe called, # and we don't want it set imarker(motion) none set imarker(handle) -1 } UpdateMagnifier $which $x $y } crosshair - colorbar - pan - zoom - rotate {} crop { Crop3dButton $which $x $y 1 UpdateMagnifier $which $x $y } analysis {} examine - iexam {} } } proc ControlShiftButton1Frame {which x y} { global ds9 global current global imarker global debug if {$debug(tcl,events)} { puts stderr "ControlShiftButton1Frame $which" } # let others know that the mouse is down set ds9(csb1) 1 switch -- $current(mode) { none {} pointer - region - catalog { if {$which == $current(frame)} { MarkerControlShift $which $x $y } else { # we need this cause MarkerMotion maybe called, # and we don't want it set imarker(motion) none set imarker(handle) -1 } UpdateMagnifier $which $x $y } crosshair - colorbar - pan - zoom - rotate - crop - analysis {} examine - iexam {} } } proc Motion1Frame {which x y} { global ds9 global current global debug if {$debug(tcl,events)} { puts stderr "Motion1Frame $which $x $y $ds9(b1) $ds9(sb1) $ds9(cb1)" } # abort if we are here by accident (such as a double click) if {($ds9(b1) == 0) && ($ds9(sb1) == 0) && ($ds9(cb1) == 0) && ($ds9(csb1) == 0)} { return } switch -- $current(mode) { none {UpdateMagnifier $which $x $y} pointer - region { if {$which == $current(frame)} { MarkerMotion $which $x $y } UpdateInfoBox $which $x $y canvas UpdatePixelTableDialog $which $x $y canvas UpdateGraph $which $x $y canvas UpdateMagnifier $which $x $y } crosshair { if {$ds9(b1)} { CrosshairButton $which $x $y UpdateColormapLevelMosaic $which $x $y canvas UpdateInfoBox $which $x $y canvas UpdatePixelTableDialog $which $x $y canvas UpdateGraph $which $x $y canvas UpdateMagnifier $which $x $y } } colorbar { if {$ds9(b1)} { ColorbarMotion3 $x $y } } pan { if {$ds9(b1)} { PanMotion $which $x $y UpdateMagnifier $which $x $y } } zoom {UpdateMagnifier $which $x $y} rotate { if {$ds9(b1)} { RotateMotion $which $x $y } } crop { if {$ds9(b1)} { CropMotion $which $x $y } if {$ds9(sb1)} { Crop3dMotion $which $x $y 0 } if {$ds9(cb1)} { Crop3dMotion $which $x $y 1 } UpdateMagnifier $which $x $y } catalog { if {$which == $current(frame)} { CATMotion $which $x $y } UpdateInfoBox $which $x $y canvas UpdatePixelTableDialog $which $x $y canvas UpdateGraph $which $x $y canvas UpdateMagnifier $which $x $y } analysis { IMEMotion $which $x $y UpdateColormapLevelMosaic $which $x $y canvas UpdateInfoBox $which $x $y canvas UpdatePixelTableDialog $which $x $y canvas UpdateGraph $which $x $y canvas UpdateMagnifier $which $x $y } examine - iexam {} } } proc Release1Frame {which x y} { global ds9 global current global debug if {$debug(tcl,events)} { puts stderr "Release1Frame $which" } # abort if we are here by accident (such as a double click) if {($ds9(b1) == 0) && ($ds9(sb1) == 0) && ($ds9(cb1) == 0) && ($ds9(csb1) == 0)} { return } switch -- $current(mode) { pointer - region { if {$which == $current(frame)} { MarkerRelease $which $x $y } } crosshair { if {$ds9(b1)} { CrosshairButton $which $x $y UpdateColormapLevelMosaic $which $x $y canvas UpdateInfoBox $which $x $y canvas UpdatePixelTableDialog $which $x $y canvas UpdateGraph $which $x $y canvas } } colorbar { if {$ds9(b1)} { ColorbarRelease3 $x $y } } pan { if {$ds9(b1)} { PanRelease $which $x $y } } zoom {} rotate { if {$ds9(b1)} { RotateRelease $which $x $y } } crop { if {$ds9(b1)} { CropRelease $which $x $y } if {$ds9(sb1)} { Crop3dRelease $which $x $y 0 } if {$ds9(cb1)} { Crop3dRelease $which $x $y 1 } } catalog { if {$which == $current(frame)} { CATRelease $which $x $y } } none {} analysis { IMERelease $which $x $y } examine - iexam {} } # let others know that the mouse is up set ds9(b1) 0 set ds9(sb1) 0 set ds9(cb1) 0 set ds9(csb1) 0 UpdateEditMenu UpdateMagnifier $which $x $y } proc Double1Frame {which x y} { global current global debug if {$debug(tcl,events)} { puts stderr "Double1Frame $which" } switch -- $current(mode) { pointer - region { if {$which == $current(frame)} { MarkerDouble $which $x $y UpdateMagnifier $which $x $y } } none - crosshair - colorbar - pan - zoom - rotate - crop - catalog {} analysis { IMEDouble $which $x $y UpdateMagnifier $which $x $y } examine - iexam {} } } proc DoubleRelease1Frame {which x y} { global current global debug if {$debug(tcl,events)} { puts stderr "DoubleRelease1Frame $which" } switch -- $current(mode) { none - pointer - region - crosshair - colorbar - pan - zoom - rotate - crop - catalog - analysis - examine - iexam {} } UpdateEditMenu UpdateMagnifier $which $x $y } proc Button2Frame {which x y} { global ds9 global debug if {$debug(tcl,events)} { puts stderr "Button2Frame" } set ds9(b2) 1 PanButton $which $x $y } proc ShiftButton2Frame {which x y} { global ds9 global debug if {$debug(tcl,events)} { puts stderr "ShiftButton2Frame $which" } set ds9(sb2) 1 } proc Motion2Frame {which x y} { global debug if {$debug(tcl,events)} { puts stderr "Motion2Frame $which" } PanMotion $which $x $y } proc Release2Frame {which x y} { global ds9 global debug if {$debug(tcl,events)} { puts stderr "Release2Frame $which" } PanRelease $which $x $y # let others know that the mouse is up set ds9(b2) 0 set ds9(sb2) 0 } proc Button4Frame {which x y} { global ppanzoom global pbin global debug if {$debug(tcl,events)} { puts stderr "Button4Frame $which $x $y" } if {[$which has fits bin]} { if {$pbin(wheel)} { set zz $pbin(wheel,factor) BinFrame $which $zz $zz return } } if {$ppanzoom(wheel)} { set zz [expr 1./$ppanzoom(wheel,factor)] ZoomFrame $which $zz $zz } } proc Button5Frame {which x y} { global ppanzoom global pbin global debug if {$debug(tcl,events)} { puts stderr "Button5Frame $which $x $y" } if {[$which has fits bin]} { if {$pbin(wheel)} { set zz [expr 1./$pbin(wheel,factor)] BinFrame $which $zz $zz return } } if {$ppanzoom(wheel)} { set zz $ppanzoom(wheel,factor) ZoomFrame $which $zz $zz } } # used by aqua and win32 proc MouseWheelFrame {X Y dd} { global ds9 global view global debug if {$debug(tcl,events)} { puts stderr "MouseWheel $X $Y $dd" } # macosx returns main window coords in X,Y switch $ds9(wm) { x11 - win32 {} aqua { switch $view(layout) { horizontal { set aa [winfo height $ds9(main)] set bb [winfo height $ds9(image)] set Y [expr $Y-$aa+$bb] } vertical { set aa [winfo width $ds9(main)] set bb [winfo width $ds9(image)] set X [expr $X-$aa+$bb] } } } } set id [$ds9(canvas) find closest $X $Y] set which [lindex [$ds9(canvas) gettags $id] 0] if {[string equal -length 5 {Frame} $which]} { set orig [$ds9(canvas) coords $which] set x [expr $X-int([lindex $orig 0])] set y [expr $Y-int([lindex $orig 1])] if {$dd>0} { Button5Frame $which $x $y } else { Button4Frame $which $x $y } } } proc KeyFrame {which K A xx yy} { global ds9 global current # MacOSX and Ubuntu returns bogus values in xx,yy # calculate our own values set xx [expr {[winfo pointerx $ds9(canvas)] - [winfo rootx $ds9(canvas)]}] set yy [expr {[winfo pointery $ds9(canvas)] - [winfo rooty $ds9(canvas)]}] global debug if {$debug(tcl,events)} { puts stderr "KeyFrame $which $K $A $xx $yy" } if {$K == {Control_R} || $K == {Control_L} || $K == {Meta_R} || $K == {Meta_L} || $K == {Alt_R} || $K == {Alt_L} || $K == {Super_R} || $K == {Super_L} || $K == {??}} { set ds9(modifier) 1 return } # modal bindings switch -- $current(mode) { none { switch -- $K { c { if {!$ds9(modifier)} { DisplayCoordDialog $which $xx $yy } } plus {CubeNext} minus {CubePrev} Up - k {$which warp 0 -1} Down - j {$which warp 0 1} Left - h {$which warp -1 0} Right - l {$which warp 1 0} } } pointer - region { switch -- $K { c { if {!$ds9(modifier)} { DisplayCoordDialog $which $xx $yy } } plus {CubeNext} minus {CubePrev} Delete - BackSpace {MarkerDeleteKey $which $xx $yy} Up - k {MarkerArrowKey $which 0 -1} Down - j {MarkerArrowKey $which 0 1} Left - h {MarkerArrowKey $which -1 0} Right - l {MarkerArrowKey $which 1 0} i {$which marker property include 1 $xx $yy} e {$which marker property include 0 $xx $yy} s {$which marker property source 1 $xx $yy} b {$which marker property source 0 $xx $yy} g {GroupCreate} G {GroupCreateSilent} } } crosshair { switch -- $K { c { if {!$ds9(modifier)} { DisplayCoordDialog $which $xx $yy } } plus {CubeNext} minus {CubePrev} Up - k {CrosshairArrowKey $which 0 -1} Down - j {CrosshairArrowKey $which 0 1} Left - h {CrosshairArrowKey $which -1 0} Right - l {CrosshairArrowKey $which 1 0} } } pan { switch -- $K { Up - k {Pan 0 1 canvas} Down - j {Pan 0 -1 canvas} Left - h {Pan 1 0 canvas} Right - l {Pan -1 0 canvas} } UpdateMagnifier $which $xx $yy } catalog { switch -- $K { Up - k {MarkerArrowKey $which 0 -1} Down - j {MarkerArrowKey $which 0 1} Left - h {MarkerArrowKey $which -1 0} Right - l {MarkerArrowKey $which 1 0} } CATKey $which $K } analysis { switch -- $K { plus {CubeNext} minus {CubePrev} Up {IMEArrowKey $which 0 -1} Down {IMEArrowKey $which 0 1} Left {IMEArrowKey $which -1 0} Right {IMEArrowKey $which 1 0} default {IMEKey $which $K $xx $yy} } } iexam {IExamKey $which $K $xx $yy} colorbar - zoom - rotate - crop - examine {} } UpdateEditMenu } proc KeyReleaseFrame {which K A xx yy} { global ds9 # MacOSX and Ubuntu returns bogus values in xx,yy # calculate our own values set xx [expr {[winfo pointerx $ds9(canvas)] - [winfo rootx $ds9(canvas)]}] set yy [expr {[winfo pointery $ds9(canvas)] - [winfo rooty $ds9(canvas)]}] global debug if {$debug(tcl,events)} { puts stderr "KeyReleaseFrame $which $K $A $xx $yy" } if {$K == {Control_R} || $K == {Control_L} || $K == {Meta_R} || $K == {Meta_L} || $K == {Alt_R} || $K == {Alt_L} || $K == {Super_R} || $K == {Super_L}} { set ds9(modifier) 0 } } # Other Public Routines proc CopyFrame {} { global current switch -- $current(mode) { pointer - region {MarkerCopy} } } proc CutFrame {} { global current switch -- $current(mode) { pointer - region {MarkerCut} } } proc PasteFrame {} { global current switch -- $current(mode) { pointer - region {MarkerPaste} } } proc UndoFrame {} { global current switch -- $current(mode) { pointer - region {MarkerUndo} } } proc FirstFrame {} { global ds9 set ds9(next) [lindex $ds9(active) 0] GotoFrame } proc PrevFrame {} { global ds9 global current set ii [lsearch $ds9(active) $current(frame)] if {$ii>0} { set ds9(next) [lindex $ds9(active) [expr $ii-1]] } else { set ds9(next) [lindex $ds9(active) [expr $ds9(active,num)-1]] } GotoFrame } proc NextFrame {} { global ds9 global current set ii [lsearch $ds9(active) $current(frame)] if {$ii < [expr $ds9(active,num)-1]} { set ds9(next) [lindex $ds9(active) [expr $ii+1]] } else { set ds9(next) [lindex $ds9(active) 0] } GotoFrame } proc LastFrame {} { global ds9 set ds9(next) [lindex $ds9(active) [expr $ds9(active,num)-1]] GotoFrame } proc MoveFirstFrame {} { global ds9 global current set i [lsearch $ds9(frames) $current(frame)] set ds9(frames) [lreplace $ds9(frames) $i $i] set ds9(frames) [linsert $ds9(frames) 0 $current(frame)] UpdateFrameMenuItems UpdateActiveFrames } proc MovePrevFrame {} { global ds9 global current set i [lsearch $ds9(frames) $current(frame)] set ds9(frames) [lreplace $ds9(frames) $i $i] if {$i>0} { set ds9(frames) [linsert $ds9(frames) [expr $i-1] $current(frame)] } else { set ds9(frames) [linsert $ds9(frames) end $current(frame)] } UpdateFrameMenuItems UpdateActiveFrames } proc MoveNextFrame {} { global ds9 global current set i [lsearch $ds9(frames) $current(frame)] set ds9(frames) [lreplace $ds9(frames) $i $i] set last [llength $ds9(frames)] if {$i<$last} { set ds9(frames) [linsert $ds9(frames) [expr $i+1] $current(frame)] } else { set ds9(frames) [linsert $ds9(frames) 0 $current(frame)] } UpdateFrameMenuItems UpdateActiveFrames } proc MoveLastFrame {} { global ds9 global current set i [lsearch $ds9(frames) $current(frame)] set ds9(frames) [lreplace $ds9(frames) $i $i] set ds9(frames) [linsert $ds9(frames) end $current(frame)] UpdateFrameMenuItems UpdateActiveFrames } proc UpdateActiveFrames {} { global ds9 global active global current global debug if {$debug(tcl,update)} { puts stderr "UpdateActiveFrames" } # reset active list set ds9(active) {} set ds9(active,num) 0 foreach f $ds9(frames) { if {$active($f)} { lappend ds9(active) $f $ds9(mb).frame.goto entryconfig \ "[msgcat::mc {Frame}] [string range $f 5 end]" -state normal } else { $ds9(mb).frame.goto entryconfig \ "[msgcat::mc {Frame}] [string range $f 5 end]" -state disabled } } set ds9(active,num) [llength $ds9(active)] # New layout if needed if {$ds9(active,num) > 0} { if {[lsearch $ds9(active) $current(frame)] == -1} { if {$ds9(next) != {}} { set current(frame) $ds9(next) } else { set current(frame) [lindex $ds9(active) 0] set ds9(next) $current(frame) } } } DisplayMode } proc ActiveFrameAll {} { global ds9 global active foreach f $ds9(frames) { set active($f) 1 } UpdateActiveFrames } proc ActiveFrameNone {} { global ds9 global active foreach f $ds9(frames) { set active($f) 0 } UpdateActiveFrames } proc GotoFrame {} { global ds9 global current global active if {$current(frame) != {} && $current(frame) != $ds9(next)} { $current(frame) highlite off $current(frame) panner off switch -- $ds9(display) { blink - single { $current(frame) hide UnBindEventsFrame $current(frame) } tile {} } } if {$current(frame) != $ds9(next)} { if {$current(frame) != {}} { $current(frame) colorbar tag "\{[$current(colorbar) get tag]\}" } set current(frame) $ds9(next) set ds9(next) {} FrameToFront } } proc DisplayMode {} { global ds9 global current global tile global blink global iblink switch -- $current(display) { single {set ds9(display) $current(display)} tile { if {$ds9(active,num) > 1} { set ds9(display) $current(display) } else { switch -- $tile(grid,mode) { automatic {set ds9(display) single} manual {set ds9(display) $current(display)} } } } blink { if {$ds9(active,num) > 1} { set ds9(display) $current(display) } else { set ds9(display) single } } } switch -- $ds9(display) { single - tile { # turn off blink if on if {$iblink(id)>0} { after cancel $iblink(id) set iblink(id) 0 set iblink(index) -1 } LayoutFrames } blink { # ignore if we are already blinking if {$iblink(id)==0} { LayoutFrames BlinkTimer } } } } proc BlinkTimer {} { global blink global iblink global ds9 if {$ds9(active,num) > 0} { incr iblink(index) if {$iblink(index) >= $ds9(active,num)} { set iblink(index) 0 } set ds9(next) [lindex $ds9(active) $iblink(index)] GotoFrame } set iblink(id) [after $blink(interval) BlinkTimer] } proc ResetCurrentFrame {} { global current ResetFrame $current(frame) } proc ResetAllFrame {} { global ds9 foreach f $ds9(frames) { ResetFrame $f } } proc ResetFrame {which} { if {$which != {}} { if {[$which has iis]} { IISCursorModeCmd 0 } $which reset RefreshInfoBox $which PixelTableClearDialog ClearGraphData LockFrame $which UpdatePanZoomDialog UpdateCrosshairDialog UpdateCropDialog GridUpdateZoom UpdateZoomMenu UpdateScaleMenu UpdateScaleDialog UpdateGraphXAxis $which UpdateGraphYAxis $which SAMPSendCoordPointAtSkyCmd $which } } proc ClearCurrentFrame {} { global current ClearFrame $current(frame) ClearInfoBox PixelTableClearDialog ClearGraphData UpdateDS9 } proc ClearAllFrame {} { global ds9 foreach f $ds9(frames) { ClearFrame $f } ClearInfoBox PixelTableClearDialog ClearGraphData UpdateDS9 } proc ClearFrame {which} { if {$which == {}} { return } DestroyHeader $which $which clear # delete saved loadParams foreach cc {{} red green blue} { set varname $which$cc global $varname if {[info exists $varname]} { unset $varname } } } # Private Procedures proc FrameToFront {} { global ds9 global current global view global colorbar global blink set which $current(frame) # process proper colorbar switch -- [$which get type] { base - 3d { if {$view(colorbar)} { colorbar show } else { colorbar hide } colorbarrgb hide set current(colorbar) colorbar colorbar colorbar [$which get colorbar] colorbar tag "\{[$which get colorbar tag]\}" set colorbar(map) [colorbar get name] $ds9(canvas) raise colorbar colorbarrgb } rgb { colorbar hide if {$view(colorbar)} { colorbarrgb show } else { colorbarrgb hide } set current(colorbar) colorbarrgb colorbarrgb colorbar [$which get colorbar] colorbarrgb rgb channel [$which get rgb channel] $ds9(canvas) raise colorbarrgb colorbar } } set colorbar(invert) [$current(colorbar) get invert] $ds9(canvas) raise $which $which show switch -- $ds9(display) { single - blink { if {!$ds9(freeze)} { BindEventsFrame $which } } tile {$which highlite on} } if {$view(panner)} { $which panner on } UpdateDS9 } proc TileDialog {} { global tile global itile global dtile global ds9 # see if we already have a window visible if {[winfo exists $itile(top)]} { raise $itile(top) return } # create window set w $itile(top) set mb $itile(mb) Toplevel $w $mb 6 [msgcat::mc {Tile Parameters}] TileDestroyDialog set dtile(mode) $tile(grid,mode) set dtile(dir) $tile(grid,dir) set dtile(row) $tile(grid,row) set dtile(col) $tile(grid,col) set dtile(gap) $tile(grid,gap) $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] -command TileApplyDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] -command TileDestroyDialog EditMenu $mb itile # Grid set f [ttk::labelframe $w.grid -text [msgcat::mc {Grid}] -padding 2] ttk::radiobutton $f.auto -text [msgcat::mc {Automatic}] \ -variable dtile(mode) -value automatic ttk::radiobutton $f.manual -text [msgcat::mc {Manual}] \ -variable dtile(mode) -value manual grid $f.auto $f.manual -padx 2 -pady 2 -sticky w # Grid Direction set f [ttk::labelframe $w.dir -text [msgcat::mc {Direction}] -padding 2] ttk::radiobutton $f.x -text [msgcat::mc {X}] \ -variable dtile(dir) -value x ttk::radiobutton $f.y -text [msgcat::mc {Y}] \ -variable dtile(dir) -value y grid $f.x $f.y -padx 2 -pady 2 -sticky w # Layout set f [ttk::labelframe $w.layout -text [msgcat::mc {Layout}] -padding 2] ttk::label $f.tcol -text [msgcat::mc {Columns}] ttk::label $f.trow -text [msgcat::mc {Rows}] ttk::entry $f.col -textvariable dtile(col) -width 6 ttk::label $f.tx -text {x} ttk::entry $f.row -textvariable dtile(row) -width 6 grid $f.tcol x $f.trow -padx 2 -pady 2 -sticky w grid $f.col $f.tx $f.row -padx 2 -pady 2 -sticky w # Gap set f [ttk::labelframe $w.gap -text [msgcat::mc {Gap}] -padding 2] ttk::entry $f.gap -textvariable dtile(gap) -width 6 ttk::label $f.ugap -text [msgcat::mc {Pixels}] grid $f.gap - $f.ugap -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] -command TileApplyDialog ttk::button $f.close -text [msgcat::mc {Close}] -command TileDestroyDialog pack $f.apply $f.close -side left -expand true -padx 2 -pady 4 # Fini grid $w.grid -sticky news grid $w.dir -sticky news grid $w.layout -sticky news grid $w.gap -sticky news grid $w.buttons -sticky ew grid rowconfigure $w 0 -weight 1 grid rowconfigure $w 1 -weight 1 grid rowconfigure $w 2 -weight 1 grid rowconfigure $w 3 -weight 1 grid columnconfigure $w 0 -weight 1 } proc TileDestroyDialog {} { global itile global dtile if {[winfo exists $itile(top)]} { destroy $itile(top) destroy $itile(mb) } unset dtile } proc TileApplyDialog {} { global tile global dtile set tile(mode) grid set tile(grid,mode) $dtile(mode) set tile(grid,dir) $dtile(dir) set tile(grid,row) $dtile(row) set tile(grid,col) $dtile(col) set tile(grid,gap) $dtile(gap) DisplayMode } # Process Cmds proc ProcessFrameCmd {varname iname} { upvar $varname var upvar $iname i global current global active global panzoom catch { switch -- [string tolower [lindex $var $i]] { match { incr i MatchFrameCurrent [lindex $var $i] } lock { incr i set panzoom(lock) [lindex $var $i] LockFrameCurrent } center { incr i switch -- [lindex $var $i] { all {CenterAllFrame} {} {CenterCurrentFrame; incr i -1} default { if {[string is integer [lindex $var $i]]} { set f "Frame[lindex $var $i]" CenterFrame $f } else { CenterCurrentFrame; incr i -1 } } } } clear { incr i switch -- [lindex $var $i] { all {ClearAllFrame} {} {ClearCurrentFrame; incr i -1} default { if {[string is integer [lindex $var $i]]} { set f "Frame[lindex $var $i]" ClearFrame $f } else { ClearCurrentFrame; incr i -1 } } } } delete { incr i switch -- [lindex $var $i] { all {DeleteAllFrames} {} {DeleteCurrentFrame; incr i -1} default { if {[string is integer [lindex $var $i]]} { set f "Frame[lindex $var $i]" DeleteSingleFrame $f } else { DeleteCurrentFrame; incr i -1 } } } } new { incr i switch -- [lindex $var $i] { rgb {CreateRGBFrame} 3d {Create3DFrame} default {CreateFrame; incr i -1} } } reset { incr i switch -- [lindex $var $i] { all {ResetAllFrame} {} {ResetCurrentFrame; incr i -1} default { if {[string is integer [lindex $var $i]]} { set f "Frame[lindex $var $i]" ResetFrame $f } else { ResetCurrentFrame; incr i -1 } } } } refresh { incr i switch -- [lindex $var $i] { all {UpdateAllFrame} {} {UpdateCurrentFrame; incr i -1} default { if {[string is integer [lindex $var $i]]} { set f "Frame[lindex $var $i]" UpdateFrame $f } else { UpdateCurrentFrame; incr i -1 } } } } hide { incr i switch -- [lindex $var $i] { all {ActiveFrameNone} {} { set active($current(frame)) 0 UpdateActiveFrames incr i -1 } default { if {[string is integer [lindex $var $i]]} { set f "Frame[lindex $var $i]" set active($f) 0 UpdateActiveFrames } else { set active($current(frame)) 0 UpdateActiveFrames incr i -1 } } } } show { incr i switch -- [lindex $var $i] { all {ActiveFrameAll} default { if {[string is integer [lindex $var $i]]} { set f "Frame[lindex $var $i]" set active($f) 1 UpdateActiveFrames } else { incr i -1 } } } } move { incr i switch -- [lindex $var $i] { first {MoveFirstFrame} back {MovePrevFrame} forward {MoveNextFrame} last {MoveLastFrame} } } first {FirstFrame} prev {PrevFrame} next {NextFrame} last {LastFrame} frameno {incr i; CreateGotoFrame [lindex $var $i] base} default {CreateGotoFrame [lindex $var $i] base} } } } proc ProcessSendFrameCmd {proc id param} { global ds9 global current global rgb global panzoom switch -- [lindex $param 0] { lock {$proc $id "$panzoom(lock)\n"} active { set r {} foreach f $ds9(active) { append r "[string range $f 5 end] " } $proc $id "$r\n" } all { set r {} foreach f $ds9(frames) { append r "[string range $f 5 end] " } $proc $id "$r\n" } has { if {$current(frame) == {}} { Error [msgcat::mc {No current frame}] return } switch [lindex $param 1] { amplifier - datamin - datasec - detector - grid - iis - irafmin - physical - smooth {$proc $id [ToYesNo [$current(frame) has [lindex $param 1]]]} contour { switch [lindex $param 2] { aux {$proc $id [ToYesNo [$current(frame) has contour aux]]} default {$proc $id [ToYesNo [$current(frame) has contour]]} } } fits { switch [lindex $param 2] { bin - cube - mosaic {$proc $id [ToYesNo [$current(frame) has fits [lindex $param 2]]]} default {$proc $id [ToYesNo [$current(frame) has fits]]} } } marker { switch [lindex $param 2] { highlite - paste - select - undo {$proc $id [ToYesNo [$current(frame) has marker [lindex $param 2]]]} } } system {$proc $id [ToYesNo [$current(frame) has system [lindex $param 2]]]} wcs { switch [lindex $param 2] { equatorial - linear {$proc $id [ToYesNo [$current(frame) has wcs [lindex $param 2] [lindex $param 3]]]} default {$proc $id [ToYesNo [$current(frame) has wcs [lindex $param 2]]]} } } } } default {$proc $id "[string range $current(frame) 5 end]\n"} } } proc ProcessSingleCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized ProcessRealizeDS9 global current set current(display) single DisplayMode } proc ProcessSendSingleCmd {proc id param} { global current if {$current(display) == "single"} { $proc $id [ToYesNo 1] } else { $proc $id [ToYesNo 0] } } proc ProcessTileCmd {varname iname} { upvar $varname var upvar $iname i global current global tile switch -- [string tolower [lindex $var $i]] { mode { incr i set tile(mode) [lindex $var $i] } grid { incr i switch -- [string tolower [lindex $var $i]] { mode { incr i set tile(grid,mode) [lindex $var $i] } direction { incr i set tile(grid,dir) [lindex $var $i] } layout { incr i set tile(grid,col) [lindex $var $i] incr i set tile(grid,row) [lindex $var $i] set tile(grid,mode) {manual} } gap { incr i set tile(grid,gap) [lindex $var $i] } default { if {[string range [lindex $var $i] 0 0] != {-}} { set tile(mode) grid } else { incr i -1 } } } } column { set tile(mode) column } row { set tile(mode) row } yes - true - on - 1 - no - false - off - 0 { if {[FromYesNo [lindex $var $i]]} { set current(display) tile } else { set current(display) single } } default { set current(display) tile incr i -1 } } DisplayMode } proc ProcessSendTileCmd {proc id param} { global current global tile switch -- [lindex $param 0] { mode {$proc $id "$tile(mode)\n"} grid { switch -- [lindex $param 1] { mode {$proc $id "$tile(grid,mode)\n"} direction {$proc $id "$tile(grid,dir)\n"} layout {$proc $id "$tile(grid,col) $tile(grid,row)\n"} gap {$proc $id "$tile(grid,gap)\n"} } } default { if {$current(display)=="tile"} { $proc $id [ToYesNo 1] } else { $proc $id [ToYesNo 0] } } } } proc ProcessBlinkCmd {varname iname} { upvar $varname var upvar $iname i global current global blink switch -- [string tolower [lindex $var $i]] { interval { incr i set blink(interval) [expr int([lindex $var $i]*1000)] } yes - true - on - 1 - no - false - off - 0 { if {[FromYesNo [lindex $var $i]]} { set current(display) blink } else { set current(display) single } } default { set current(display) blink incr i -1 } } DisplayMode } proc ProcessSendBlinkCmd {proc id param} { global current global blink switch -- [lindex $param 0] { interval {$proc $id "[expr $blink(interval)/1000.]\n"} default { if {$current(display) == {blink}} { $proc $id [ToYesNo 1] } else { $proc $id [ToYesNo 0] } } } } proc ProcessLockCmd {varname iname} { upvar $varname var upvar $iname i global panzoom global crop global crosshair global cube global ime global bin global scale global colorbar global block global smooth # we need to be realized ProcessRealizeDS9 switch -- [string tolower [lindex $var $i]] { frame - frames { incr i set panzoom(lock) [lindex $var $i] LockFrameCurrent } crosshair - crosshairs { incr i set crosshair(lock) [lindex $var $i] LockCrosshairCurrent } crop { incr i set crop(lock) [lindex $var $i] LockCropCurrent } slice - cube - datacube { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { switch -- [lindex $var $i] { {} - yes - 1 {set cube(lock) image} no - 0 {set cube(lock) none} default {set cube(lock) [lindex $var $i]} } } else { set cube(lock) image incr i -1 } LockCubeCurrent } bin { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set bin(lock) [FromYesNo [lindex $var $i]] } else { set bin(lock) 1 incr i -1 } LockBinCurrent } axes - order { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set cube(lock,axes) [FromYesNo [lindex $var $i]] } else { set cube(lock,axes) 1 incr i -1 } LockAxesCurrent } scale - scales { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set scale(lock) [FromYesNo [lindex $var $i]] } else { set scale(lock) 1 incr i -1 } LockScaleCurrent } limits - scalelimits { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set scale(lock,limits) [FromYesNo [lindex $var $i]] } else { set scale(lock,limits) 1 incr i -1 } LockScaleLimitsCurrent } color - colormap - colorbar - colorbars { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set colorbar(lock) [FromYesNo [lindex $var $i]] } else { set colorbar(lock) 1 incr i -1 } LockColorCurrent } block { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set block(lock) [FromYesNo [lindex $var $i]] } else { set block(lock) 1 incr i -1 } LockBlockCurrent } smooth { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set smooth(lock) [FromYesNo [lindex $var $i]] } else { set smooth(lock) 1 incr i -1 } LockSmoothCurrent } } } proc ProcessSendLockCmd {proc id param} { global panzoom global crop global crosshair global cube global ime global bin global scale global colorbar global block global smooth switch -- [lindex $param 0] { frame - frames {$proc $id "$panzoom(lock)\n"} crosshair - crosshairs {$proc $id "$crosshair(lock)\n"} crop {$proc $id "$crop(lock)\n"} slice - cube - datacube {$proc $id "$cube(lock)\n"} analysis {$proc $id "$ime(lock)\n"} bin {$proc $id [ToYesNo $bin(lock)]} axes - order {$proc $id [ToYesNo $cube(lock,axes)]} scale - scales {$proc $id [ToYesNo $scale(lock)]} limits - scalelimits {$proc $id [ToYesNo $scale(lock,limits)]} color - colormap - colorbar - colorbars {$proc $id [ToYesNo $colorbar(lock)]} block {$proc $id [ToYesNo $block(lock)]} smooth {$proc $id [ToYesNo $smooth(lock)]} } } proc ProcessMatchCmd {varname iname} { upvar $varname var upvar $iname i global current # we need to be realized ProcessRealizeDS9 switch -- [string tolower [lindex $var $i]] { frame - frames { incr i MatchFrameCurrent [lindex $var $i] } crosshair - crosshairs { incr i MatchCrosshairCurrent [lindex $var $i] } crop { incr i MatchCropCurrent [lindex $var $i] } slice - cube - datacube { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { switch -- [lindex $var $i] { {} {MatchCubeCurrent image} default {MatchCubeCurrent [lindex $var $i]} } } else { MatchCubeCurrent image incr i -1 } } bin {MatchBinCurrent} axes - order {MatchAxesCurrent} scale - scales {MatchScaleCurrent} limits - scalelimits {MatchScaleLimitsCurrent} color - colormap - colorbar - colorbars {MatchColorCurrent} block {MatchBlockCurrent} smooth {MatchSmoothCurrent} } } saods9/ds9/library/graph.tcl000644 000765 000000 00000025073 12750173644 016354 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc GraphDef {} { global igraph global pgraph set igraph(horz,id) 0 set igraph(vert,id) 0 set igraph(size) 150 set igraph(gap,x) 50 set igraph(gap,y) 25 set igraph(x,min) 0 set igraph(x,max) 10 set igraph(y,min) 1 set igraph(y,max) 100 global graphHorzX graphHorzY global graphVertX graphVertY global histX histY blt::vector create graphHorzX graphHorzY blt::vector create graphVertX graphVertY blt::vector create histX histY # prefs only set pgraph(horz,grid) 1 set pgraph(horz,log) false set pgraph(vert,grid) 1 set pgraph(vert,log) false } proc CreateGraphs {} { global igraph global ds9 global canvas # Horizontal Graph set ds9(graph,horz) [blt::graph $ds9(main).horz \ -width $canvas(width) -height $igraph(size) \ -takefocus 0 \ -background $ds9(bg) \ -highlightthickness 0 \ -plotborderwidth 2 \ -plotrelief groove \ -plotbackground $ds9(bg) \ -font [font actual TkDefaultFont] \ ] # we need to manually set the element foreground color, i.e. use graph fg set fgcolor [$ds9(graph,horz) cget -foreground] $ds9(graph,horz) legend configure -hide yes $ds9(graph,horz) crosshairs configure -color green $ds9(graph,horz) xaxis configure -hide no -showticks no -bg $ds9(bg) $ds9(graph,horz) x2axis configure -hide yes $ds9(graph,horz) yaxis configure -hide yes $ds9(graph,horz) y2axis configure -hide no -bg $ds9(bg) \ -tickfont [font actual TkDefaultFont] $ds9(graph,horz) element create line1 -xdata graphHorzX -ydata graphHorzY \ -color $fgcolor -symbol none bind $ds9(graph,horz) [list EnterGraph $ds9(graph,horz) 1] bind $ds9(graph,horz) [list LeaveGraph $ds9(graph,horz)] bind $ds9(graph,horz) \ [list MotionGraph $ds9(graph,horz) %x %y 1] bind $ds9(graph,horz) \ [list MotionGraph $ds9(graph,horz) %x %y 1] bind $ds9(graph,horz) [list ArrowKeyGraph $ds9(graph,horz) 0 -1 1] bind $ds9(graph,horz) [list ArrowKeyGraph $ds9(graph,horz) 0 1 1] bind $ds9(graph,horz) [list ArrowKeyGraph $ds9(graph,horz) -1 0 1] bind $ds9(graph,horz) [list ArrowKeyGraph $ds9(graph,horz) 1 0 1] # Vertical Graph set ds9(graph,vert) [blt::graph $ds9(main).vert \ -width $igraph(size) -height $canvas(height) \ -invertxy yes \ -takefocus 0 \ -background $ds9(bg) \ -highlightthickness 0 \ -plotrelief groove \ -plotborderwidth 2 \ -plotbackground $ds9(bg) ] $ds9(graph,vert) legend configure -hide yes $ds9(graph,vert) crosshairs configure -color green $ds9(graph,vert) xaxis configure -hide yes -descending yes $ds9(graph,vert) x2axis configure -hide no -descending yes \ -showticks no -bg $ds9(bg) $ds9(graph,vert) yaxis configure -hide no -descending yes \ -bg $ds9(bg) -tickfont [font actual TkDefaultFont] $ds9(graph,vert) y2axis configure -hide yes -descending yes $ds9(graph,vert) element create line1 -xdata graphVertX -ydata graphVertY \ -color $fgcolor -symbol none bind $ds9(graph,vert) [list EnterGraph $ds9(graph,vert) 0] bind $ds9(graph,vert) [list LeaveGraph $ds9(graph,vert)] bind $ds9(graph,vert) \ [list MotionGraph $ds9(graph,vert) %x %y 0] bind $ds9(graph,vert) \ [list MotionGraph $ds9(graph,vert) %x %y 0] bind $ds9(graph,vert) [list ArrowKeyGraph $ds9(graph,vert) 0 -1 0] bind $ds9(graph,vert) [list ArrowKeyGraph $ds9(graph,vert) 0 1 0] bind $ds9(graph,vert) [list ArrowKeyGraph $ds9(graph,vert) -1 0 0] bind $ds9(graph,vert) [list ArrowKeyGraph $ds9(graph,vert) 1 0 0] UpdateGraphGrid } proc UpdateGraphFont {} { global ds9 $ds9(graph,horz) y2axis configure -tickfont [font actual TkDefaultFont] $ds9(graph,vert) yaxis configure -tickfont [font actual TkDefaultFont] } proc UpdateGraphGrid {} { global pgraph global ds9 $ds9(graph,horz) xaxis configure -grid $pgraph(horz,grid) -tickdefault 4 $ds9(graph,horz) y2axis configure -grid $pgraph(horz,grid) $ds9(graph,vert) x2axis configure -grid $pgraph(vert,grid) $ds9(graph,vert) yaxis configure -grid $pgraph(vert,grid) -tickdefault 4 } proc UpdateGraphXAxis {which} { global ds9 global view global debug if {$debug(tcl,update)} { puts stderr "UpdateGraphXAxis" } if {$view(graph,horz)} { UpdateGraphXAxisHV $which $ds9(graph,horz) graphHorzX graphHorzY 1 } if {$view(graph,vert)} { UpdateGraphXAxisHV $which $ds9(graph,vert) graphVertX graphVertY 0 } } proc UpdateGraphXAxisHV {which what vectorX vectorY cut} { global igraph global graphHorzX graphHorzY global graphVertX graphVertY if {$which != {}} { set xMin [expr "$$vectorX\(min\)"] set xMax [expr "$$vectorX\(max\)"] $what xaxis configure -min $xMin -max $xMax $what x2axis configure -min $xMin -max $xMax } else { $what xaxis configure -min $igraph(x,min) -max $igraph(x,max) $what x2axis configure -min $igraph(x,min) -max $igraph(x,max) } } proc UpdateGraphYAxis {which} { global pgraph global ds9 global view global debug if {$debug(tcl,update)} { puts stderr "UpdateGraphYAxis" } if {$view(graph,horz)} { UpdateGraphYAxisHV $which $ds9(graph,horz) $pgraph(horz,log) } if {$view(graph,vert)} { UpdateGraphYAxisHV $which $ds9(graph,vert) $pgraph(vert,log) } } proc UpdateGraphYAxisHV {which what log} { global igraph if {$which != {}} { set minmax [$which get clip] set yMin [lindex $minmax 0] set yMax [lindex $minmax 1] # must use .eq. since "nan" is a legal double value if {$yMin eq "nan" || $yMax eq "nan"} { set yMin 0 set yMax 1 } if {$yMin >= $yMax} { set yMax [expr $yMin + 1] } $what yaxis configure -min $yMin -max $yMax -logscale $log -tickdefault 4 $what y2axis configure -min $yMin -max $yMax -logscale $log -tickdefault 4 } else { $what yaxis configure -min $igraph(y,min) -max $igraph(y,max) \ -logscale $log -tickdefault 4 $what y2axis configure -min $igraph(y,min) -max $igraph(y,max) \ -logscale $log -tickdefault 4 } } proc ShowGraphData {which} { global ds9 global view if {$view(graph,horz)} { ShowGraphDataHV $which $ds9(graph,horz) } if {$view(graph,vert)} { ShowGraphDataHV $which $ds9(graph,vert) } } proc ShowGraphDataHV {which what} { if {$which != {}} { if {[$which has fits]} { $what element configure line1 -hide no } else { $what element configure line1 -hide yes } } else { $what element configure line1 -hide yes } } proc ClearGraphData {} { global ds9 global view if {$view(graph,horz)} { $ds9(graph,horz) element configure line1 -hide yes } if {$view(graph,vert)} { $ds9(graph,vert) element configure line1 -hide yes } } proc UpdateGraph {which x y sys} { global ds9 global view if {[$which has fits]} { if {$view(graph,horz)} { $which get horizontal cut graphHorzX graphHorzY $x $y $sys $ds9(graph,horz) element configure line1 -hide no } if {$view(graph,vert)} { $which get vertical cut graphVertX graphVertY $x $y $sys $ds9(graph,vert) element configure line1 -hide no } } } proc EnterGraph {which horz} { global current focus $which $which crosshairs on if {$current(frame) != {}} { switch $current(mode) { crosshair - analysis { set x [$which crosshairs cget -x] set y [$which crosshairs cget -y] set coord [$current(frame) get crosshair canvas] set X [lindex $coord 0] set Y [lindex $coord 1] if {$horz} { EnterInfoBox $current(frame) UpdateInfoBox $current(frame) $x $Y canvas UpdatePixelTableDialog $current(frame) $x $Y canvas } else { EnterInfoBox $current(frame) UpdateInfoBox $current(frame) $X $y canvas UpdatePixelTableDialog $current(frame) $X $y canvas } } } } } proc LeaveGraph {which} { focus {} $which crosshairs off LeaveInfoBox PixelTableClearDialog } proc MotionGraph {which x y horz} { global current $which crosshairs configure -x $x -y $y if {$current(frame) != {}} { switch $current(mode) { crosshair - analysis { set coord [$current(frame) get crosshair canvas] set X [lindex $coord 0] set Y [lindex $coord 1] if {$horz} { UpdateInfoBox $current(frame) $x $Y canvas UpdatePixelTableDialog $current(frame) $x $Y canvas } else { UpdateInfoBox $current(frame) $X $y canvas UpdatePixelTableDialog $current(frame) $X $y canvas } } } } } proc ArrowKeyGraph {which x y horz} { set cx [$which crosshairs cget -x] set cy [$which crosshairs cget -y] set cx [expr $cx+$x] set cy [expr $cy+$y] MotionGraph $which $cx $cy $horz } proc LayoutGraphs {} { global igraph global ds9 global canvas global view global colorbar global icolorbar set cbh [expr $view(colorbar) && \ [string equal $colorbar(orientation) {horizontal}]] set cbv [expr $view(colorbar) && \ [string equal $colorbar(orientation) {vertical}]] set grh [expr $view(graph,horz)] set grv [expr $view(graph,vert)] if {$grh} { set xx 0 set yy [expr $canvas(height) + $canvas(gap)] if {$cbh} { incr yy $icolorbar(horizontal,height) } if {$grv && !$cbh} { incr yy $igraph(gap,y) } if {$igraph(horz,id) == 0} { set igraph(horz,id) [$ds9(canvas) create window $xx $yy \ -window $ds9(graph,horz) -anchor nw] } else { $ds9(canvas) coords $igraph(horz,id) $xx $yy } set ww [expr $canvas(width)+$igraph(gap,x)] $ds9(graph,horz) configure -width $ww } else { if {$igraph(horz,id)>0} { $ds9(canvas) delete $igraph(horz,id) set igraph(horz,id) 0 } } if {$grv} { set yy 0 set xx [expr $canvas(width) + $canvas(gap)] if {$cbv} { incr xx $icolorbar(vertical,width) } if {$grh && !$cbv} { incr xx $igraph(gap,x) } if {$igraph(vert,id) == 0} { set igraph(vert,id) [$ds9(canvas) create window $xx $yy \ -window $ds9(graph,vert) -anchor nw] } else { $ds9(canvas) coords $igraph(vert,id) $xx $yy } set hh [expr $canvas(height)+$igraph(gap,y)] $ds9(graph,vert) configure -height $hh } else { if {$igraph(vert,id)>0} { $ds9(canvas) delete $igraph(vert,id) set igraph(vert,id) 0 } } } saods9/ds9/library/grid.tcl000644 000765 000000 00000122402 12705445647 016177 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc GridDef {} { global igrid global grid global pgrid set igrid(top) .grid set igrid(mb) .gridmb set grid(view) 0 array set pgrid [array get grid] GridDefault } proc GridDefault {} { global grid set grid(type) analysis set grid(system) wcs set grid(sky) fk5 set grid(skyformat) sexagesimal set grid(grid) 1 set grid(grid,color) blue set grid(grid,width) 1 set grid(grid,style) 0 set grid(grid,gap1) {} set grid(grid,gap2) {} set grid(grid,gap3) {} set grid(grid,gapunit1) {} set grid(grid,gapunit2) {} set grid(grid,gapunit3) {} set grid(axes) 1 set grid(axes,color) red set grid(axes,width) 1 set grid(axes,style) 0 set grid(axes,type) interior set grid(axes,origin) lll set grid(tick) 1 set grid(tick,color) white set grid(tick,width) 1 set grid(tick,style) 0 set grid(border) 1 set grid(border,color) blue set grid(border,width) 1 set grid(border,style) 0 set grid(format1) {} set grid(format2) {} set grid(numlab) 1 set grid(numlab,font) helvetica set grid(numlab,size) 10 set grid(numlab,weight) normal set grid(numlab,slant) roman set grid(numlab,color) green set grid(numlab,gap1) {} set grid(numlab,gap2) {} set grid(numlab,gap3) {} set grid(numlab,type) interior set grid(numlab,vertical) 0 set grid(title) 1 set grid(title,text) {} set grid(title,def) 1 set grid(title,gap) {} set grid(title,font) helvetica set grid(title,size) 12 set grid(title,weight) normal set grid(title,slant) roman set grid(title,color) black set grid(textlab) 1 set grid(textlab,text1) {} set grid(textlab,text2) {} set grid(textlab,def1) 1 set grid(textlab,def2) 1 set grid(textlab,gap1) {} set grid(textlab,gap2) {} set grid(textlab,font) helvetica set grid(textlab,size) 10 set grid(textlab,weight) normal set grid(textlab,slant) roman set grid(textlab,color) black } proc GridUpdateCurrent {} { global current if {$current(frame) != {}} { GridUpdate $current(frame) } } proc GridUpdate {which} { global grid GridAdjustOptions $which if {$grid(view) && [$which has fits]} { $which grid create $grid(system) $grid(sky) \ $grid(skyformat) $grid(type) \ [GridBuildOptions $which] "\"[array get grid]\"" } else { $which grid delete } } proc GridUpdateZoom {} { global grid if {$grid(type) == "publication"} { GridUpdateCurrent } } proc GridAdjustOptions {which} { global grid if {$which != {}} { if {[$which has fits]} { # change values if needed for coordmenu AdjustCoordSystem grid system } } set grid(grid,gapunit1) pixels set grid(grid,gapunit2) pixels set grid(grid,gapunit3) pixels # adjust units switch -- $grid(system) { image - physical - amplifier - detector {} default { if {$which != {}} { if {[$which has wcs celestrial $grid(system)]} { set grid(grid,gapunit1) degrees set grid(grid,gapunit2) degrees } if {[$which has wcs 3d $grid(system)]} { set tt [string trim [$which get fits header keyword CTYPE3]] if {$tt != {}} { set grid(grid,gapunit3) $tt } } } } } } proc GridBuildOptions {which} { global grid global current set opt "\"" # Grid append opt " Grid=$grid(grid)," append opt " Colour(grid)=[GridColor2Ast $grid(grid,color)]," append opt " Width(grid)=$grid(grid,width)," append opt " Style(grid)=$grid(grid,style)," # Axes append opt " DrawAxes=$grid(axes)," append opt " Colour(axes)=[GridColor2Ast $grid(axes,color)]," append opt " Width(axes)=$grid(axes,width)," append opt " Style(axes)=$grid(axes,style)," # Format if {$grid(format1) != {}} { append opt " Format(1)=$grid(format1)," } else { set ff [GridDefaultFormat1] if {$ff != {}} { append opt " Format(1)=$ff," } } if {$grid(format2) != {}} { append opt " Format(2)=$grid(format2)," } else { set ff [GridDefaultFormat2] if {$ff != {}} { append opt " Format(2)=$ff," } } # Ticks if {!$grid(tick)} { append opt " MajTickLen=0," append opt " MinTick(1)=0," append opt " MinTick(2)=0," switch -- $grid(type) { analysis {} publication { switch -- [$which get type] { base - rgb {} 3d {append opt " MinTick(3)=0,"} } } } } append opt " Colour(ticks)=[GridColor2Ast $grid(tick,color)]," append opt " Width(ticks)=$grid(tick,width)," append opt " Style(ticks)=$grid(tick,style)," # Border append opt " Border=$grid(border)," append opt " Colour(border)=[GridColor2Ast $grid(border,color)]," append opt " Width(border)=$grid(border,width)," append opt " Style(border)=$grid(border,style)," # Labels append opt " Labelling=$grid(axes,type)," switch -- [$which get type] { base - rgb {append opt " LabelUp=$grid(numlab,vertical),"} 3d {append opt " LabelUp=1,"} } # NumLab append opt " NumLab=$grid(numlab)," set opt "$opt Font(numlab)=[GridFont2Ast $grid(numlab,font) $grid(numlab,weight) $grid(numlab,slant)]," append opt " Size(numlab)=$grid(numlab,size)," append opt " Colour(numlab)=[GridColor2Ast $grid(numlab,color)]," # TextLab switch -- $grid(type) { analysis {append opt " TextLab=0,"} publication { switch -- [$which get type] { base - rgb {append opt " TextLab=$grid(textlab),"} 3d {append opt " TextLab=0,"} } } } if {!$grid(textlab,def1)} { append opt " Label(1)=[GridStripComma $grid(textlab,text1)] ," } if {!$grid(textlab,def2)} { append opt " Label(2)=[GridStripComma $grid(textlab,text2)] ," } set opt "$opt Font(textlab)=[GridFont2Ast $grid(textlab,font) $grid(textlab,weight) $grid(textlab,slant)]," append opt " Size(textlab)=$grid(textlab,size)," append opt " Colour(textlab)=[GridColor2Ast $grid(textlab,color)]," # Title switch -- $grid(type) { analysis {append opt " DrawTitle=0,"} publication { switch -- [$which get type] { base - rgb {append opt " DrawTitle=$grid(title),"} 3d {append opt " DrawTitle=0,"} } } } if {$grid(title,def)} { set t [GridStripComma "[$which get fits object name]"] if {$t != {}} { append opt " Title=$t ," } } else { set t [GridStripComma "$grid(title,text)"] if {$t != {}} { append opt " Title=$t ," } } set opt "$opt Font(title)=[GridFont2Ast $grid(title,font) $grid(title,weight) $grid(title,slant)]," append opt " Size(title)=$grid(title,size)," append opt " Colour(title)=[GridColor2Ast $grid(title,color)]," # Grid Spacing if {$grid(grid,gap1) != {}} { if {$grid(grid,gapunit1) == "degrees"} { append opt " Gap(1)=[expr 3.14159/180.*$grid(grid,gap1)]," } else { append opt " Gap(1)=$grid(grid,gap1)," } } if {$grid(grid,gap2) != {}} { if {$grid(grid,gapunit2) == "degrees"} { append opt " Gap(2)=[expr 3.14159/180.*$grid(grid,gap2)]," } else { append opt " Gap(2)=$grid(grid,gap2)," } } switch -- [$which get type] { base - rgb {} 3d { if {$grid(grid,gap3) != {}} { if {$grid(grid,gapunit3) == "degrees"} { append opt " Gap(3)=[expr 3.14159/180.*$grid(grid,gap3)]," } else { append opt " Gap(3)=$grid(grid,gap3)," } } } } # axes numerics set flip 0 set numx 0 set numy 0 switch -- $grid(type) { analysis { switch -- [$which get type] { base - rgb { set numx -.03 set numy -.03 } 3d {} } } publication { switch -- [$which get type] { base - rgb { set numx -.02 set numy -.01 switch -- $grid(axes,type) { interior {} exterior { switch -- $grid(numlab,type) { interior {} exterior {set flip 1} } } } } 3d {} } } } # override if {$grid(numlab,gap1) != {}} { set numx [expr -$grid(numlab,gap1)/100.] } if {$grid(numlab,gap2) != {}} { set numy [expr -$grid(numlab,gap2)/100.] } if {$grid(numlab,gap3) != {}} { set numy [expr -$grid(numlab,gap3)/100.] } if {$flip} { set numx [expr -$numx] set numy [expr -$numy] } append opt " NumLabGap(1)=$numx," append opt " NumLabGap(2)=$numy," # Label gaps switch -- $grid(type) { analysis { set axisx 0 set axisy 0 set title 0 } publication { if {$grid(textlab,gap1) != {}} { set axisx [expr $grid(textlab,gap1)/100.] } else { set axisx 0 } if {$grid(textlab,gap2) != {}} { set axisy [expr $grid(textlab,gap2)/100.] } else { set axisy .1 } if {$grid(title,gap) != {}} { set title [expr $grid(title,gap)/100.] } else { set title .30 } } } append opt " TextLabGap(1)=$axisx," append opt " TextLabGap(2)=$axisy," append opt " TitleGap=[expr -1-$title]," # Orientation switch -- [$which get type] { base - rgb { append opt " Edge(1)=top," append opt " Edge(2)=left," } 3d { switch -- $grid(type) { analysis { append opt " Edge(1)=bottom," append opt " Edge(2)=left," } publication { append opt " RootCorner=$grid(axes,origin)," } } } } # 3D Normal switch -- $grid(type) { analysis {} publication { switch -- [$which get type] { base - rgb {} 3d {append opt " Norm(1)=0, Norm(2)=0, Norm(3)=-1,"} } } } # The End append opt " \"" global debug if {$debug(tcl,grid)} { puts stderr "GridBuildOptions" puts stderr "$opt" } return $opt } proc GridAst2Color {ast} { switch -- $ast { 0 {return {black}} 1 {return white} 2 {return red} 3 {return green} 4 {return blue} 5 {return cyan} 6 {return magenta} 7 {return yellow} 16777215 {return {white}} 16711680 {return {red}} 65280 {return {green}} 255 {return {blue}} 65535 {return {cyan}} 16711935 {return {magenta}} 16776960 {return {yellow}} default {return "#[format %x $ast]"} } } proc GridColor2Ast {which} { switch -- $which { black {return [expr 0x000000]} white {return [expr 0xffffff]} red {return [expr 0xff0000]} green {return [expr 0x00ff00]} blue {return [expr 0x0000ff]} cyan {return [expr 0x00ffff]} magenta {return [expr 0xff00ff]} yellow {return [expr 0xffff00]} default { if {[string range $which 0 0] == "#"} { return [expr 0x[string range $which 1 end]] } else { return [expr $which] } } } } proc GridAst2Font {ast fnvar fwvar fsvar} { upvar $fnvar fn upvar $fwvar fw upvar $fsvar fs switch -- $ast { 0 - 2 - 3 {set fn "helvetica"; set fw "normal"; set fs "roman"} 1 {set fn "times"; set fw "normal"; set fs "roman"} 4 {set fn "courier"; set fw "normal"; set fs "roman"} 10 - 12 - 13 {set fn "helvetica"; set fw "bold"; set fs "roman"} 11 {set fn "times"; set fw "bold"; set fs "roman"} 14 {set fn "courier"; set fw "bold"; set fs "roman"} 20 - 22 - 23 {set fn "helvetica"; set fw "normal"; set fs "italic"} 21 {set fn "times"; set fw "normal"; set fs "italic"} 24 {set fn "courier"; set fw "normal"; set fs "italic"} 30 - 32 - 33 {set fn "helvetica"; set fw "bold"; set fs "italic"} 31 {set fn "times"; set fw "bold"; set fs "italic"} 34 {set fn "courier"; set fw "bold"; set fs "italic"} default {set fn "helvetica"; set fw "normal"; set fs "roman"} } } proc GridFont2Ast {fn fw fs} { if {$fn == "times" && $fw == "normal" && $fs == "roman"} { return 1; } elseif {$fn == "helvetica" && $fw == "normal" && $fs == "roman"} { return 2; } elseif {$fn == "courier" && $fw == "normal" && $fs == "roman"} { return 4; } elseif {$fn == "times" && $fw == "bold" && $fs == "roman"} { return 11; } elseif {$fn == "helvetica" && $fw == "bold" && $fs == "roman"} { return 12; } elseif {$fn == "courier" && $fw == "bold" && $fs == "roman"} { return 14; } elseif {$fn == "times" && $fw == "normal" && $fs == "italic"} { return 21; } elseif {$fn == "helvetica" && $fw == "normal" && $fs == "italic"} { return 22; } elseif {$fn == "courier" && $fw == "normal" && $fs == "italic"} { return 24; } elseif {$fn == "times" && $fw == "bold" && $fs == "italic"} { return 31; } elseif {$fn == "helvetica" && $fw == "bold" && $fs == "italic"} { return 32; } elseif {$fn == "courier" && $fw == "bold" && $fs == "italic"} { return 34; } else { return 2; } } proc GridDialog {} { global igrid global grid global current global ds9 # see if we already have a window visible if {[winfo exists $igrid(top)]} { raise $igrid(top) return } # create the window set w $igrid(top) set mb $igrid(mb) Toplevel $w $mb 6 [msgcat::mc {Coordinate Grid Parameters}] \ GridDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit $mb add cascade -label [msgcat::mc {Type}] -menu $mb.type $mb add cascade -label [msgcat::mc {Coordinate}] -menu $mb.coord $mb add cascade -label [msgcat::mc {Grid}] -menu $mb.grid $mb add cascade -label [msgcat::mc {Axes}] -menu $mb.axes $mb add cascade -label [msgcat::mc {Numerics}] -menu $mb.numlab $mb add cascade -label [msgcat::mc {Labels}] -menu $mb.textlab $mb add cascade -label [msgcat::mc {Tickmarks}] -menu $mb.tick $mb add cascade -label [msgcat::mc {Title}] -menu $mb.title $mb add cascade -label [msgcat::mc {Border}] -menu $mb.border # File menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] -command GridApplyDialog $mb.file add command -label [msgcat::mc {Reset}] -command GridResetDialog $mb.file add command -label [msgcat::mc {Clear}] -command GridClearDialog $mb.file add separator $mb.file add command -label "[msgcat::mc {Load Configuration}]..." \ -command GridLoadDialog $mb.file add command -label "[msgcat::mc {Save Configuration}]..." \ -command GridSaveDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] -command GridDestroyDialog # Edit EditMenu $mb igrid # Type menu $mb.type $mb.type add radiobutton -label [msgcat::mc {Analysis}] \ -variable grid(type) -value analysis -command GridApplyDialog $mb.type add radiobutton -label [msgcat::mc {Publication}] \ -variable grid(type) -value publication -command GridApplyDialog $mb.type add separator $mb.type add radiobutton -label [msgcat::mc {Interior Axes}] \ -variable grid(axes,type) -value interior -command GridApplyDialog $mb.type add radiobutton -label [msgcat::mc {Exterior Axes}] \ -variable grid(axes,type) -value exterior -command GridApplyDialog $mb.type add separator $mb.type add radiobutton -label [msgcat::mc {Interior Numerics}] \ -variable grid(numlab,type) -value interior -command GridApplyDialog $mb.type add radiobutton -label [msgcat::mc {Exterior Numerics}] \ -variable grid(numlab,type) -value exterior -command GridApplyDialog $mb.type add separator $mb.type add checkbutton -label [msgcat::mc {Vertical Text}] \ -variable grid(numlab,vertical) -command GridApplyDialog # Coordinate CoordMenu $mb.coord grid system 1 sky skyformat GridApplyDialog # Grid menu $mb.grid $mb.grid add checkbutton -label [msgcat::mc {Show}] \ -variable grid(grid) -command GridApplyDialog $mb.grid add separator $mb.grid add cascade -label [msgcat::mc {Color}] -menu $mb.grid.color $mb.grid add cascade -label [msgcat::mc {Line}] -menu $mb.grid.line ColorMenu $mb.grid.color grid grid,color GridApplyDialog GridCreateLineMenu $mb.grid.line grid,width grid,style # Axes menu $mb.axes $mb.axes add checkbutton -label [msgcat::mc {Show}] \ -variable grid(axes) -command GridApplyDialog $mb.axes add separator $mb.axes add cascade -label [msgcat::mc {Color}] -menu $mb.axes.color $mb.axes add cascade -label [msgcat::mc {Line}] -menu $mb.axes.line $mb.axes add separator $mb.axes add cascade -label [msgcat::mc {Origin}] -menu $mb.axes.origin ColorMenu $mb.axes.color grid axes,color GridApplyDialog GridCreateLineMenu $mb.axes.line axes,width axes,style menu $mb.axes.origin $mb.axes.origin add radiobutton -label [msgcat::mc {Lower Left Front}] \ -variable grid(axes,origin) -value lll -command GridApplyDialog $mb.axes.origin add radiobutton -label [msgcat::mc {Lower Right Front}] \ -variable grid(axes,origin) -value ull -command GridApplyDialog $mb.axes.origin add radiobutton -label [msgcat::mc {Upper Right Front}] \ -variable grid(axes,origin) -value uul -command GridApplyDialog $mb.axes.origin add radiobutton -label [msgcat::mc {Upper Left Front}] \ -variable grid(axes,origin) -value lul -command GridApplyDialog $mb.axes.origin add separator $mb.axes.origin add radiobutton -label [msgcat::mc {Lower Left Back}] \ -variable grid(axes,origin) -value llu -command GridApplyDialog $mb.axes.origin add radiobutton -label [msgcat::mc {Lower Right Back}] \ -variable grid(axes,origin) -value ulu -command GridApplyDialog $mb.axes.origin add radiobutton -label [msgcat::mc {Upper Right Back}] \ -variable grid(axes,origin) -value uuu -command GridApplyDialog $mb.axes.origin add radiobutton -label [msgcat::mc {Upper Left Back}] \ -variable grid(axes,origin) -value luu -command GridApplyDialog # Numerics menu $mb.numlab $mb.numlab add checkbutton -label [msgcat::mc {Show}] \ -variable grid(numlab) -command GridApplyDialog $mb.numlab add separator $mb.numlab add cascade -label [msgcat::mc {Color}] \ -menu $mb.numlab.color $mb.numlab add cascade -label [msgcat::mc {Font}] \ -menu $mb.numlab.font ColorMenu $mb.numlab.color grid numlab,color GridApplyDialog FontMenu $mb.numlab.font \ grid numlab,font numlab,size numlab,weight numlab,slant \ GridApplyDialog # Labels menu $mb.textlab $mb.textlab add checkbutton -label [msgcat::mc {Show}] \ -variable grid(textlab) -command GridApplyDialog $mb.textlab add separator $mb.textlab add cascade -label [msgcat::mc {Color}] \ -menu $mb.textlab.color $mb.textlab add cascade -label [msgcat::mc {Font}] \ -menu $mb.textlab.font ColorMenu $mb.textlab.color grid textlab,color GridApplyDialog FontMenu $mb.textlab.font \ grid textlab,font textlab,size textlab,weight textlab,slant \ GridApplyDialog # Tickmarks menu $mb.tick $mb.tick add checkbutton -label [msgcat::mc {Show}] \ -variable grid(tick) -command GridApplyDialog $mb.tick add separator $mb.tick add cascade -label [msgcat::mc {Color}] \ -menu $mb.tick.color $mb.tick add cascade -label [msgcat::mc {Line}] \ -menu $mb.tick.line ColorMenu $mb.tick.color grid tick,color GridApplyDialog GridCreateLineMenu $mb.tick.line tick,width tick,style # Title menu $mb.title $mb.title add checkbutton -label [msgcat::mc {Show}] \ -variable grid(title) -command GridApplyDialog $mb.title add separator $mb.title add cascade -label [msgcat::mc {Color}] -menu $mb.title.color $mb.title add cascade -label [msgcat::mc {Font}] -menu $mb.title.font ColorMenu $mb.title.color grid title,color GridApplyDialog FontMenu $mb.title.font \ grid title,font title,size title,weight title,slant \ GridApplyDialog # Border menu $mb.border $mb.border add checkbutton -label [msgcat::mc {Show}] \ -variable grid(border) -command GridApplyDialog $mb.border add separator $mb.border add cascade -label [msgcat::mc {Color}] -menu $mb.border.color $mb.border add cascade -label [msgcat::mc {Line}] -menu $mb.border.line ColorMenu $mb.border.color grid border,color GridApplyDialog GridCreateLineMenu $mb.border.line border,width border,style # Labels set f [ttk::labelframe $w.label -text [msgcat::mc {Labels}] -padding 2] ttk::label $f.label -text [msgcat::mc {Title}] ttk::entry $f.title -textvariable grid(title,text) \ -width 60 ttk::checkbutton $f.default -text [msgcat::mc {Default}] \ -variable grid(title,def) -command GridApplyDialog ttk::label $f.label1 -text "[msgcat::mc {Axis}] 1" ttk::entry $f.title1 -textvariable grid(textlab,text1) \ -width 60 ttk::checkbutton $f.default1 -text [msgcat::mc {Default}] \ -variable grid(textlab,def1) -command GridApplyDialog ttk::label $f.label2 -text "[msgcat::mc {Axis}] 2" ttk::entry $f.title2 -textvariable grid(textlab,text2) \ -width 60 ttk::checkbutton $f.default2 -text [msgcat::mc {Default}] \ -variable grid(textlab,def2) -command GridApplyDialog grid $f.label $f.title $f.default -padx 2 -pady 2 -sticky ew grid $f.label1 $f.title1 $f.default1 -padx 2 -pady 2 -sticky ew grid $f.label2 $f.title2 $f.default2 -padx 2 -pady 2 -sticky ew grid columnconfigure $f 1 -weight 1 # Params set f [ttk::labelframe $w.param -text [msgcat::mc {Spacing}] -padding 2] ttk::label $f.lspace -text "[msgcat::mc {Label}] %" ttk::label $f.ngap -text "[msgcat::mc {Numerics}] %" ttk::label $f.lformat -text [msgcat::mc {Format}] ttk::label $f.lgap -text [msgcat::mc {Grid Gap}] ttk::label $f.titlet -text [msgcat::mc {Title}] ttk::entry $f.spacet -textvariable grid(title,gap) \ -width 8 ttk::label $f.title1 -text "[msgcat::mc {Axis}] 1" ttk::entry $f.tspace1 -textvariable grid(textlab,gap1) -width 8 ttk::entry $f.nspace1 -textvariable grid(numlab,gap1) -width 8 ttk::entry $f.format1 -textvariable grid(format1) -width 8 ttk::entry $f.gap1 -textvariable grid(grid,gap1) -width 8 ttk::label $f.gapunit1 -textvariable grid(grid,gapunit1) ttk::label $f.title2 -text "[msgcat::mc {Axis}] 2" ttk::entry $f.tspace2 -textvariable grid(textlab,gap2) -width 8 ttk::entry $f.nspace2 -textvariable grid(numlab,gap2) -width 8 ttk::entry $f.format2 -textvariable grid(format2) -width 8 ttk::entry $f.gap2 -textvariable grid(grid,gap2) -width 8 ttk::label $f.gapunit2 -textvariable grid(grid,gapunit2) ttk::label $f.title3 -text "[msgcat::mc {Axis}] 3" ttk::entry $f.nspace3 -textvariable grid(numlab,gap3) -width 8 ttk::entry $f.format3 -textvariable grid(format3) -width 8 ttk::entry $f.gap3 -textvariable grid(grid,gap3) -width 8 ttk::label $f.gapunit3 -textvariable grid(grid,gapunit3) grid x $f.lspace $f.ngap $f.lformat $f.lgap -padx 2 -pady 2 -sticky w grid $f.titlet $f.spacet -padx 2 -pady 2 -sticky w grid $f.title1 $f.tspace1 $f.nspace1 $f.format1 $f.gap1 $f.gapunit1 \ -padx 2 -pady 2 -sticky w grid $f.title2 $f.tspace2 $f.nspace2 $f.format2 $f.gap2 $f.gapunit2 \ -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] -command GridApplyDialog ttk::button $f.reset -text [msgcat::mc {Reset}] -command GridResetDialog ttk::button $f.clear -text [msgcat::mc {Clear}] -command GridClearDialog ttk::button $f.close -text [msgcat::mc {Close}] -command GridDestroyDialog pack $f.apply $f.reset $f.clear $f.close -side left -expand true \ -padx 2 -pady 4 bind $w "GridApplyDialog" # Fini grid $w.label -sticky news grid $w.param -sticky news grid $w.buttons -sticky ew grid rowconfigure $w 0 -weight 1 grid rowconfigure $w 1 -weight 1 grid columnconfigure $w 0 -weight 1 # some window managers need a hint raise $w UpdateGridDialog } proc GridApplyDialog {} { global grid set grid(view) 1 GridUpdateCurrent } proc GridResetDialog {} { GridDefault GridUpdateCurrent } proc GridClearDialog {} { global grid set grid(view) 0 GridUpdateCurrent } proc GridDestroyDialog {} { global igrid if {[winfo exists $igrid(top)]} { destroy $igrid(top) destroy $igrid(mb) } } proc UpdateGridMenu {} { global grid global current global wcs global debug if {$debug(tcl,update)} { puts stderr "UpdateGridMenu" } if {($current(frame) == {})} { return } # set menu if {[$current(frame) has fits]} { set grid(view) [$current(frame) has grid] } # reassign system and format if {[$current(frame) has fits] && [$current(frame) has grid]} { set ll [$current(frame) get grid] set grid(system) [lindex $ll 0] set grid(sky) [lindex $ll 1] set grid(skyformat) [lindex $ll 2] set grid(type) [lindex $ll 3] # fix for grids create with old backup command if {[$current(frame) get grid var] == {}} { $current(frame) grid delete $current(frame) grid create $grid(system) $grid(sky) \ $grid(skyformat) $grid(type) \ [GridBuildOptions $current(frame)] "\"[array get grid]\"" } array set grid [$current(frame) get grid var] } else { # can be changed by wcs SetCoordSystem grid system sky skyformat } } proc UpdateGridDialog {} { global current global igrid global grid set mb $igrid(mb) global debug if {$debug(tcl,update)} { puts stderr "UpdateGridDialog" } GridAdjustOptions $current(frame) if {[winfo exists $igrid(top)]} { set f $igrid(top).label set g $igrid(top).param if {$current(frame) != {}} { switch -- [$current(frame) get type] { base - rgb { $mb entryconfig [msgcat::mc {Labels}] -state normal $mb entryconfig [msgcat::mc {Title}] -state normal $mb.type entryconfig [msgcat::mc {Interior Numerics}] \ -state normal $mb.type entryconfig [msgcat::mc {Exterior Numerics}] \ -state normal $mb.type entryconfig [msgcat::mc {Vertical Text}] \ -state normal $mb.axes entryconfig [msgcat::mc {Origin}] \ -state disable $f.label configure -state normal $f.title configure -state normal $f.default configure -state normal $f.label1 configure -state normal $f.title1 configure -state normal $f.default1 configure -state normal $f.label2 configure -state normal $f.title2 configure -state normal $f.default2 configure -state normal $g.lspace configure -state normal $g.spacet configure -state normal $g.tspace1 configure -state normal $g.tspace2 configure -state normal grid forget $g.title3 $g.nspace3 $g.format3 $g.gap3 \ $g.gapunit3 } 3d { $mb entryconfig [msgcat::mc {Labels}] -state disabled $mb entryconfig [msgcat::mc {Title}] -state disabled $mb.type entryconfig [msgcat::mc {Interior Numerics}] \ -state disabled $mb.type entryconfig [msgcat::mc {Exterior Numerics}] \ -state disabled $mb.type entryconfig [msgcat::mc {Vertical Text}] \ -state disabled $mb.axes entryconfig [msgcat::mc {Origin}] -state normal $f.label configure -state disabled $f.title configure -state disabled $f.default configure -state disabled $f.label1 configure -state disabled $f.title1 configure -state disabled $f.default1 configure -state disabled $f.label2 configure -state disabled $f.title2 configure -state disabled $f.default2 configure -state disabled $g.lspace configure -state disabled $g.spacet configure -state disabled $g.tspace1 configure -state disabled $g.tspace2 configure -state disabled grid $g.title3 x $g.nspace3 $g.format3 $g.gap3 $g.gapunit3 \ -padx 2 -pady 2 -sticky w } } set grid(frame) $current(frame) if {[$current(frame) has fits]} { CoordMenuEnable $igrid(mb).coord grid system 1 sky skyformat } else { CoordMenuReset $igrid(mb).coord grid system 1 sky skyformat } } } } proc GridCreateLineMenu {which width dash} { global igrid global grid WidthDashMenu $which grid $width $dash GridApplyDialog GridApplyDialog } proc GridLoadDialog {} { GridLoad [OpenFileDialog gridfbox] } proc GridLoad {filename} { global grid if {$filename != {}} { source $filename } # backward compatibility FixFontVar grid(numlab,weight) grid(numlab,slant) grid(numlab,style) FixFontVar grid(textlab,weight) grid(textlab,slant) grid(textlab,style) FixFontVar grid(title,weight) grid(title,slant) grid(title,style) set grid(view) 1 GridUpdateCurrent } proc GridSaveDialog {} { GridSave [SaveFileDialog gridfbox] } proc GridSave {filename} { global grid if {$filename != {}} { set file [open $filename w] puts $file "global grid" puts $file "array set grid \{ [array get grid] \}" close $file } } proc GridStripComma {str} { # strip ',' set t {} regsub -all "," "$str" " " t return $t } proc GridDefaultFormat1 {} { global grid global current switch $grid(system) { image - physical - detector - amplifier {return {}} default { if {[$current(frame) has wcs equatorial $grid(system)]} { switch $grid(sky) { fk4 - fk5 - icrs { switch $grid(skyformat) { degrees {return {d.3}} sexagesimal {return {hms.1}} hms {return {lhms.1}} } } galactic - ecliptic { switch $grid(skyformat) { degrees {return {d.3}} sexagesimal {return {dms.1}} hms {return {ldms}} } } } return {} } if {[$current(frame) has wcs celestrial $grid(system)]} { switch $grid(skyformat) { degrees {return {d.3}} sexagesimal {return {dms.1}} hms {return {ldms}} } return {} } } } } proc GridDefaultFormat2 {} { global grid global current switch $grid(system) { image - physical - detector - amplifier {return {}} default { if {[$current(frame) has wcs equatorial $grid(system)]} { switch $grid(sky) { fk4 - fk5 - icrs { switch $grid(skyformat) { degrees {return {d.3}} sexagesimal {return {dms.1}} hms {return {ldms.1}} } } galactic - ecliptic { switch $grid(skyformat) { degrees {return {d.3}} sexagesimal {return {dms.1}} hms {return {ldms}} } } } return {} } if {[$current(frame) has wcs celestrial $grid(system)]} { switch $grid(skyformat) { degrees {return {d.3}} sexagesimal {return {dms.1}} hms {return {ldms}} } return {} } } } } proc GridBackup {ch which} { global grid if {[$which has grid]} { set ll [$which get grid] set system [lindex $ll 0] set sky [lindex $ll 1] set skyformat [lindex $ll 2] set type [lindex $ll 3] set opts [$which get grid option] set vars [array get grid] puts $ch "$which grid create $system $sky $skyformat $type \{\"$opts\"\} \{\"$vars\"\}" } } # Process Cmds proc ProcessGridCmd {varname iname} { upvar $varname var upvar $iname i global grid switch -- [string tolower [lindex $var $i]] { open {GridDialog} close {GridDestroyDialog} yes - true - on - 1 - no - false - off - 0 { set grid(view) [FromYesNo [lindex $var $i]] GridUpdateCurrent } type { incr i switch -- [string tolower [lindex $var $i]] { axes { # backward compatible incr i; set grid(axes,type) [lindex $var $i] } numerics { # backward compatible incr i; set grid(numlab,type) [lindex $var $i] } default {set grid(type) [lindex $var $i]} } GridUpdateCurrent } system {incr i; set grid(system) [lindex $var $i]; GridUpdateCurrent} sky {incr i set grid(sky) [string tolower [lindex $var $i]] GridUpdateCurrent } skyformat { incr i switch -- [string tolower [lindex $var $i]] { deg - degree - degrees {set grid(skyformat) degrees} default {set grid(skyformat) [string tolower [lindex $var $i]]} } GridUpdateCurrent } grid { incr i switch -- [string tolower [lindex $var $i]] { color {incr i; set grid(grid,color) [lindex $var $i]} width {incr i; set grid(grid,width) [lindex $var $i]} style {incr i; set grid(grid,style) [lindex $var $i]} gap1 {incr i; set grid(grid,gap1) [lindex $var $i]} gap2 {incr i; set grid(grid,gap2) [lindex $var $i]} gap3 {incr i; set grid(grid,gap3) [lindex $var $i]} default {set grid(grid) [FromYesNo [lindex $var $i]]} } GridUpdateCurrent } axes { incr i switch -- [string tolower [lindex $var $i]] { color {incr i; set grid(axes,color) [lindex $var $i]} width {incr i; set grid(axes,width) [lindex $var $i]} style {incr i; set grid(axes,style) [lindex $var $i]} type {incr i; set grid(axes,type) [lindex $var $i]} origin {incr i; set grid(axes,origin) [lindex $var $i]} default {set grid(axes) [FromYesNo [lindex $var $i]]} } GridUpdateCurrent } format1 { incr i; set grid(format1) [lindex $var $i] GridUpdateCurrent } format2 { incr i; set grid(format2) [lindex $var $i] GridUpdateCurrent } tickmark - tickmarks - tick { incr i switch -- [string tolower [lindex $var $i]] { color {incr i; set grid(tick,color) [lindex $var $i]} width {incr i; set grid(tick,width) [lindex $var $i]} style {incr i; set grid(tick,style) [lindex $var $i]} default {set grid(tick) [FromYesNo [lindex $var $i]]} } GridUpdateCurrent } border { incr i switch -- [string tolower [lindex $var $i]] { color {incr i; set grid(border,color) [lindex $var $i]} width {incr i; set grid(border,width) [lindex $var $i]} style {incr i; set grid(border,style) [lindex $var $i]} default {set grid(border) [FromYesNo [lindex $var $i]]} } GridUpdateCurrent } numeric - numerics - numlab { incr i switch -- [string tolower [lindex $var $i]] { font {incr i; set grid(numlab,font) [lindex $var $i]} fontsize {incr i; set grid(numlab,size) [lindex $var $i]} fontweight {incr i; set grid(numlab,weight) [lindex $var $i]} fontslant {incr i; set grid(numlab,slant) [lindex $var $i]} fontstyle { incr i switch [lindex $var $i] { normal { set grid(numlab,weight) normal set grid(numlab,slant) roman } bold { set grid(numlab,weight) bold set grid(numlab,slant) roman } italic { set grid(numlab,weight) normal set grid(numlab,slant) italic } } } color {incr i; set grid(numlab,color) [lindex $var $i]} gap1 {incr i; set grid(numlab,gap1) [lindex $var $i]} gap2 {incr i; set grid(numlab,gap2) [lindex $var $i]} gap3 {incr i; set grid(numlab,gap3) [lindex $var $i]} type {incr i; set grid(numlab,type) [lindex $var $i]} vertical {incr i; set grid(numlab,vertical) [FromYesNo [lindex $var $i]]} default {set grid(numlab) [FromYesNo [lindex $var $i]]} } GridUpdateCurrent } title { incr i switch -- [string tolower [lindex $var $i]] { text {incr i; set grid(title,text) [lindex $var $i]} def {incr i; set grid(title,def) [FromYesNo [lindex $var $i]]} gap {incr i; set grid(title,gap) [lindex $var $i]} font {incr i; set grid(title,font) [lindex $var $i]} fontsize {incr i; set grid(title,size) [lindex $var $i]} fontweight {incr i; set grid(title,weight) [lindex $var $i]} fontslant {incr i; set grid(title,slant) [lindex $var $i]} fontstyle { incr i switch [lindex $var $i] { normal { set grid(title,weight) normal set grid(title,slant) roman } bold { set grid(title,weight) bold set grid(title,slant) roman } italic { set grid(title,weight) normal set grid(title,slant) italic } } } color {incr i; set grid(title,color) [lindex $var $i]} default {set grid(title) [FromYesNo [lindex $var $i]]} } GridUpdateCurrent } label - labels - textlab { incr i switch -- [string tolower [lindex $var $i]] { text1 {incr i; set grid(textlab,text1) [lindex $var $i]} text2 {incr i; set grid(textlab,text2) [lindex $var $i]} def1 {incr i; set grid(textlab,def1) [FromYesNo [lindex $var $i]]} def2 {incr i; set grid(textlab,def2) [FromYesNo [lindex $var $i]]} gap1 {incr i; set grid(textlab,gap1) [lindex $var $i]} gap2 {incr i; set grid(textlab,gap2) [lindex $var $i]} font {incr i; set grid(textlab,font) [lindex $var $i]} fontsize {incr i; set grid(textlab,size) [lindex $var $i]} fontweight {incr i; set grid(textlab,weight) [lindex $var $i]} fontslant {incr i; set grid(textlab,slant) [lindex $var $i]} fontstyle { incr i switch [lindex $var $i] { normal { set grid(textlab,weight) normal set grid(textlab,slant) roman } bold { set grid(textlab,weight) bold set grid(textlab,slant) roman } italic { set grid(textlab,weight) normal set grid(textlab,slant) italic } } } color {incr i; set grid(textlab,color) [lindex $var $i]} default {set grid(textlab) [FromYesNo [lindex $var $i]]} } GridUpdateCurrent } view { # backward compatable incr i switch -- [string tolower [lindex $var $i]] { grid {incr i; set grid(grid) [FromYesNo [lindex $var $i]]} axes { incr i switch -- [string tolower [lindex $var $i]] { numbers {incr i; set grid(numlab) \ [FromYesNo [lindex $var $i]]} tickmarks {incr i; set grid(tick) \ [FromYesNo [lindex $var $i]]} label {incr i; set grid(textlab) \ [FromYesNo [lindex $var $i]]} default {set grid(axes) [FromYesNo [lindex $var $i]]} } } title {incr i; set grid(title) [FromYesNo [lindex $var $i]]} border {incr i; set grid(border) [FromYesNo [lindex $var $i]]} vertical { incr i set grid(numlab,vertical) [FromYesNo [lindex $var $i]] } } GridUpdateCurrent } reset {GridResetDialog} load { incr i set fn [lindex $var $i] FileLast gridfbox $fn GridLoad $fn } save { incr i set fn [lindex $var $i] FileLast gridfbox $fn GridSave $fn } default { set grid(view) 1 GridUpdateCurrent incr i -1 } } } proc ProcessSendGridCmd {proc id param} { global grid switch -- [lindex $param 0] { type { switch -- [lindex $param 1] { axes { # backward compatible $proc $id "$grid(axes,type)\n" } numerics { # backward compatible $proc $id "$grid(numlab,type)\n" } default {$proc $id "$grid(type)\n"} } } system {$proc $id "$grid(system)\n"} sky {$proc $id "$grid(sky)\n"} skyformat {$proc $id "$grid(skyformat)\n"} grid { switch -- [lindex $param 1] { color {$proc $id "$grid(grid,color)\n"} width {$proc $id "$grid(grid,width)\n"} style {$proc $id "$grid(grid,style)\n"} gap1 {$proc $id "$grid(grid,gap1)\n"} gap2 {$proc $id "$grid(grid,gap2)\n"} gap3 {$proc $id "$grid(grid,gap3)\n"} default {$proc $id [ToYesNo $grid(grid)]} } } axes { switch -- [lindex $param 1] { color {$proc $id "$grid(axes,color)\n"} width {$proc $id "$grid(axes,width)\n"} style {$proc $id "$grid(axes,style)\n"} type {$proc $id "$grid(axes,type)\n"} origin {$proc $id "$grid(axes,origin)\n"} default {$proc $id [ToYesNo $grid(axes)]} } } format1 {$proc $id "$grid(format1)\n"} format2 {$proc $id "$grid(format2)\n"} tickmark - tickmarks - tick { switch -- [lindex $param 1] { color {$proc $id "$grid(tick,color)\n"} width {$proc $id "$grid(tick,width)\n"} style {$proc $id "$grid(tick,style)\n"} default {$proc $id [ToYesNo $grid(tick)]} } } border { switch -- [lindex $param 1] { color {$proc $id "$grid(border,color)\n"} width {$proc $id "$grid(border,width)\n"} style {$proc $id "$grid(border,style)\n"} default {$proc $id [ToYesNo $grid(border)]} } } numeric - numerics - numlab { switch -- [lindex $param 1] { font {$proc $id "$grid(numlab,font)\n"} fontsize {$proc $id "$grid(numlab,size)\n"} fontstyle - fontweight {$proc $id "$grid(numlab,weight)\n"} fontslant {$proc $id "$grid(numlab,slant)\n"} color {$proc $id "$grid(numlab,color)\n"} gap1 {$proc $id "$grid(numlab,gap1)\n"} gap2 {$proc $id "$grid(numlab,gap2)\n"} gap3 {$proc $id "$grid(numlab,gap3)\n"} type {$proc $id "$grid(numlab,type)\n"} vertical {$proc $id "$grid(numlab,vertical)\n"} default {$proc $id [ToYesNo $grid(numlab)]} } } title { switch -- [lindex $param 1] { text {$proc $id "$grid(title,text)\n"} def {$proc $id [ToYesNo $grid(title,def)]} gap {$proc $id "$grid(title,gap)\n"} font {$proc $id "$grid(title,font)\n"} fontsize {$proc $id "$grid(title,size)\n"} fontstyle - fontweight {$proc $id "$grid(title,weight)\n"} fontslant {$proc $id "$grid(title,slant)\n"} color {$proc $id "$grid(title,color)\n"} default {$proc $id [ToYesNo $grid(title)]} } } label - labels - textlab { switch -- [lindex $param 1] { text1 {$proc $id "$grid(textlab,text1)\n"} text2 {$proc $id "$grid(textlab,text2)\n"} def1 {$proc $id [ToYesNo $grid(textlab,def1)]} def2 {$proc $id [ToYesNo $grid(textlab,def2)]} gap1 {$proc $id "$grid(textlab,gap1)\n"} gap2 {$proc $id "$grid(textlab,gap2)\n"} font {$proc $id "$grid(textlab,font)\n"} fontsize {$proc $id "$grid(textlab,size)\n"} fontstyle - fontweight {$proc $id "$grid(textlab,weight)\n"} fontslant {$proc $id "$grid(textlab,slant)\n"} color {$proc $id "$grid(textlab,color)\n"} default {$proc $id [ToYesNo $grid(textlab)]} } } view { # backward compatible switch -- [lindex $param 1] { grid {$proc $id [ToYesNo $grid(grid)]} axes { switch -- [lindex $param 2] { numbers {$proc $id [ToYesNo $grid(numlab)]} tickmarks {$proc $id [ToYesNo $grid(tick)]} label {$proc $id [ToYesNo $grid(textlab)]} default {$proc $id [ToYesNo $grid(axes)]} } } title {$proc $id [ToYesNo $grid(title)]} border {$proc $id [ToYesNo $grid(border)]} vertical {$proc $id [ToYesNo $grid(numlab,vertical)]} } } default {$proc $id [ToYesNo $grid(view)]} } } saods9/ds9/library/group.tcl000644 000765 000000 00000011430 12705445647 016404 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc GroupDef {} { global igroup global dgroup set igroup(top) .grp set igroup(mb) .grpmb set dgroup(list) {} } proc GroupCreate {} { global current if {$current(frame) != {}} { set name [$current(frame) get marker tag default name] if {[EntryDialog [msgcat::mc {New Group}] [msgcat::mc {Enter Group Name}] 30 name]} { $current(frame) marker tag "\{$name\}" UpdateGroupDialog } } } proc GroupCreateSilent {} { global current if {$current(frame) != {}} { set name [$current(frame) get marker tag default name] $current(frame) marker tag "\{$name\}" UpdateGroupDialog } } proc GroupDialog {} { global ds9 global igroup global dgroup # see if we already have a window visible if {[winfo exists $igroup(top)]} { raise $igroup(top) return } # create the window set w $igroup(top) set mb $igroup(mb) Toplevel $w $mb 6 [msgcat::mc {Groups}] GroupDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file menu $mb.file $mb.file add command -label [msgcat::mc {Update Group}] \ -command GroupUpdateDialog $mb.file add separator $mb.file add command -label [msgcat::mc {New Group}] \ -command GroupCreate $mb.file add command -label [msgcat::mc {Edit Group Name}] \ -command GroupEditDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Delete Group}] \ -command GroupDeleteDialog $mb.file add command -label [msgcat::mc {Delete All Groups}] \ -command GroupDeleteAllDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command GroupDestroyDialog # List set f [ttk::frame $w.param] ttk::scrollbar $f.scroll -command [list $f.box yview] -orient vertical set dgroup(list) [listbox $f.box \ -yscroll [list $f.scroll set] \ -setgrid true \ -selectmode multiple \ ] grid $f.box $f.scroll -sticky news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 bind $dgroup(list) <> GroupButtonDialog # Buttons set f [ttk::frame $w.buttons] ttk::button $f.update -text [msgcat::mc {Update}] \ -command GroupUpdateDialog ttk::button $f.close -text [msgcat::mc {Close}] \ -command GroupDestroyDialog pack $f.update $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -fill both -expand true UpdateGroupDialog } proc GroupButtonDialog {} { global dgroup global current if {$current(frame) != {}} { $current(frame) marker unselect all set rr [$dgroup(list) curselection] foreach ii $rr { if {[string length $ii] != 0} { $current(frame) marker "\{[$dgroup(list) get $ii]\}" select } } } } proc GroupDestroyDialog {} { global igroup if {[winfo exists $igroup(top)]} { destroy $igroup(top) destroy $igroup(mb) } } proc GroupUpdateDialog {} { global dgroup global current if {$current(frame) != {}} { set ll [$dgroup(list) curselection] if {[string length $ll] != 0} { $current(frame) marker tag update "\{[$dgroup(list) get $ll]\}" } } } proc GroupEditDialog {} { global dgroup global current if {$current(frame) != {}} { set i [$dgroup(list) curselection] if {[string length $i] != 0} { set which [$dgroup(list) get $i] if {[EntryDialog [msgcat::mc {Group Name}] [msgcat::mc {Enter Group Name}] 40 which]} { $current(frame) marker tag edit "\{[$dgroup(list) get $i]\}" "\{$which\}" UpdateGroupDialog } } } } proc GroupDeleteDialog {} { global dgroup global current if {$current(frame) != {}} { set i [$dgroup(list) curselection] if {[string length $i] != 0} { set which [$dgroup(list) get $i] $current(frame) marker tag delete "\{$which\}" UpdateGroupDialog } } } proc GroupDeleteAllDialog {} { global current global pds9 if {$current(frame) != {}} { if {$pds9(confirm)} { if {[tk_messageBox -type okcancel -icon question -message \ [msgcat::mc {Delete All Groups?}]] != {ok}} { return } } $current(frame) marker tag delete all UpdateGroupDialog } } proc UpdateGroupDialog {} { global igroup global dgroup global current global debug if {$debug(tcl,update)} { puts stderr "UpdateGroupDialog" } if {[winfo exists $igroup(top)]} { # clear the list $dgroup(list) delete 0 end if {$current(frame) != {}} { set grps [lsort [$current(frame) get marker tag all]] foreach f $grps { $dgroup(list) insert end $f } } } } saods9/ds9/library/header.tcl000644 000765 000000 00000010176 12710154032 016463 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc DisplayHeaderMenu {} { global current # possible cases # image primary # image xtension # compressed primary # compressed xtension # bin table xtension # hpx xtension # cube primary # cube xtension # multiple xtension cube # multiple file cube # mosaic extension # mosaic image xtension # mosaic cube xtension # mosaic image cube xtension set cnt [$current(frame) get fits count] if {$cnt > 0} { set slb(count) 0 # check for primary set fn [$current(frame) get fits file name 1] set xten \ [string trim [$current(frame) get fits header 1 keyword {XTENSION}]] if {$xten != {}} { set bb [string first {[} $fn] if {$bb>0} { set pn [string range $fn 0 [expr $bb-1]] } else { set pn "primary" } incr slb(count) set slb($slb(count),item) $pn set slb($slb(count),value) -1 } set last {} for {set ii 1} {$ii <= $cnt} {incr ii} { set fn [$current(frame) get fits file name $ii] set bb [string first {[} $fn] if {$bb<0} { set nn [$current(frame) get fits ext $ii] if {$nn > 0} { set fn "$fn\[\]" } } if {$fn != $last} { incr slb(count) set slb($slb(count),item) $fn set slb($slb(count),value) $ii set last $fn } } if {$slb(count) <= 1} { DisplayHeader $current(frame) 1 $fn } else { if {[SLBDialog slb {Select Header} 40]} { DisplayHeader $current(frame) $slb(value) $slb(item) } } } } proc DisplayHeader {frame id title} { global current set varname "hd-$frame-$id" upvar #0 $varname var global $varname SimpleTextDialog $varname $title 80 40 insert top \ [$current(frame) get fits header $id] # create a special text tag for keywords $var(text) tag configure keyword -foreground blue # color tag keywords set stop [$var(text) index end] for {set ii 1.0} {$ii<$stop} {set ii [expr $ii+1]} { $var(text) tag add keyword $ii "$ii +8 chars" } } proc UpdateHeaderDialog {} { global current set frame $current(frame) set cnt 1 if {[$frame has fits mosaic]} { set cnt [$frame get fits count] } for {set id 1} {$id <= $cnt} {incr id} { set varname "hd-$frame-$id" upvar #0 $varname var global $varname if {![info exists var(top)]} { continue } if {![winfo exists $var(top)]} { continue } $var(text) delete 1.0 end $var(text) insert end [$frame get fits header $id] # color tag keywords set stop [$var(text) index end] for {set ii 1.0} {$ii<$stop} {set ii [expr $ii+1]} { $var(text) tag add keyword $ii "$ii +8 chars" } } } proc DestroyHeader {frame} { set cnt 1 if {[$frame has fits mosaic]} { set cnt [$frame get fits count] } for {set id 1} {$id <= $cnt} {incr id} { set varname "hd-$frame-$id" upvar #0 $varname var global $varname if {[info exists $varname]} { if {[winfo exists $var(top)]} { SimpleTextDestroy $varname } } } } proc ProcessHeaderCmd {varname iname} { upvar $varname var upvar $iname i set item [string tolower [lindex $var $i]] switch -- $item { close - save {incr i} } if {[lindex $var $i] != {} && [string is integer [lindex $var $i]]} { set jj [lindex $var $i] incr i } else { set jj 1 } global current if {$current(frame) != {}} { switch -- $item { close { set vvarname "hd[string range $current(frame) end end]-$jj" upvar #0 $vvarname vvar global $vvarname if {[info exists vvar(top)]} { SimpleTextDestroy $vvarname } incr i -1 } save { set fn [lindex $var $i] if {$fn != {}} { if {[catch {set ch [open "| cat > \"$fn\"" w]}]} { Error [msgcat::mc {An error has occurred while saving}] return } puts -nonewline $ch [$current(frame) get fits header $jj] close $ch } } default { catch {DisplayHeader $current(frame) $jj \ [$current(frame) get fits file name $jj]} incr i -1 } } } } saods9/ds9/library/help.tcl000644 000765 000000 00000005413 12705445647 016204 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc HelpDef {} { global help global ds9 set help(refman) "$ds9(root)/doc/ref/index.html" set help(command) "$ds9(root)/doc/ref/command.html" set help(userman) "$ds9(root)/doc/user/index.html" set help(keyboard) "$ds9(root)/doc/ref/keyboard.html" set help(faq) "$ds9(root)/doc/faq.html" set help(new) "$ds9(root)/doc/new.html" set help(release) "$ds9(root)/doc/release/r7.0.html" set help(helpdesk) "$ds9(root)/doc/helpdesk.html" set help(story) "$ds9(root)/doc/story.html" set help(ack) "$ds9(root)/doc/acknowledgment.html" set help(vo) "$ds9(root)/doc/ref/vo.html" set help(authors) "William Joye (Smithsonian Astrophysical Observatory)\nEric Mandel (Smithsonian Astrophysical Observatory)\nSteve Murray (Smithsonian Astrophysical Observatory)\n" set help(about) "SAOImage DS9\nVersion $ds9(version)\n\nAuthors\n$help(authors)\nSAOImage DS9 development has been made possible by funding from NASA's Applied Information Systems Research Program, Chandra X-ray Science Center (CXC), and the High Energy Astrophysics Science Archive Center (HEASARC). Additional funding was provided by the JWST Mission office at Space Telescope Science Institute to improve capabilities for 3D data visualization.\n\nColormaps\nh5utils: Steven Johnson (MIT)\nViridis: Eric Firing (UW)\nCubehelix: Dave Green (Cavendish)\nGist: David Munro (LLNL)\nTopographic: Tom Patterson (US National Park Service) " } proc HelpRef {} { global help HV hlpref [msgcat::mc {Reference Manual}] $help(refman) } proc HelpCommand {} { global help HV hlpcmd [msgcat::mc {Command}] $help(command) } proc HelpUser {} { global help HV hlpuser [msgcat::mc {User Manual}] $help(userman) } proc HelpKeyboard {} { global help HV hlpkeyboard [msgcat::mc {Keyboard Shortcuts}] $help(keyboard) } proc HelpFAQ {} { global help HV hlpfaq [msgcat::mc {FAQ}] $help(faq) } proc HelpNew {} { global help HV hlpnew [msgcat::mc {New Features}] $help(new) } proc HelpRelease {} { global help HV hlprelease [msgcat::mc {Release Notes}] $help(release) } proc HelpDesk {} { global help HV hlpdsk [msgcat::mc {Help Desk}] $help(helpdesk) } proc HelpStory {} { global help HV hlpstory [msgcat::mc {Story of SAOImage DS9}] $help(story) } proc HelpAck {} { global help HV hlpack [msgcat::mc {Acknowledgment}] $help(ack) } proc HelpVO {} { global help HV hlvo [msgcat::mc {Virtual Observatory}] $help(vo) } proc ProcessSendAboutCmd {proc id param sock fn} { global help ProcessSend $proc $id $sock $fn {.txt} "$help(about)\n" } saods9/ds9/library/htp.tcl000644 000765 000000 00000001027 12745736030 016035 0ustar00joyewheel000000 000000 # Needed because some sites return 'x-fits' (CADC) in Content-Encoding proc http::ContentEncoding {token} { upvar 0 $token state set r {} if {[info exists state(coding)]} { foreach coding [split $state(coding) ,] { switch -exact -- $coding { deflate { lappend r inflate } gzip - x-gzip { lappend r gunzip } compress - x-compress { lappend r decompress } identity {} x-fits {} default { # just do nothing # return -code error "unsupported content-encoding \"$coding\"" } } } } return $r } saods9/ds9/library/http.tcl000644 000765 000000 00000003403 12705445647 016230 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc HTTPDef {} { global ihttp global phttp # 1 minute set ihttp(timeout) 60000 # prefs only set phttp(proxy) 0 set phttp(proxy,host) {} set phttp(proxy,port) {} set phttp(auth) 0 set phttp(auth,user) {} set phttp(auth,passwd) {} } proc PrefsDialogHTTP {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {HTTP}] lappend dprefs(tabs) [ttk::frame $w.http] set f [ttk::labelframe $w.http.params -text [msgcat::mc {HTTP}]] ttk::label $f.tproxy -text [msgcat::mc {Use Proxy}] ttk::checkbutton $f.proxy -variable phttp(proxy) ttk::label $f.thost -text [msgcat::mc {Proxy Host}] ttk::entry $f.host -textvariable phttp(proxy,host) -width 50 ttk::label $f.tport -text [msgcat::mc {Proxy Port}] ttk::entry $f.port -textvariable phttp(proxy,port) -width 10 ttk::label $f.tauth -text [msgcat::mc {Use Authentication}] ttk::checkbutton $f.auth -variable phttp(auth) ttk::label $f.tuser -text [msgcat::mc {Username}] ttk::entry $f.user -textvariable phttp(auth,user) -width 30 ttk::label $f.tpasswd -text [msgcat::mc {Password}] ttk::entry $f.passwd -textvariable phttp(auth,passwd) -show "*" -width 10 grid $f.tproxy $f.proxy -padx 2 -pady 2 -sticky w grid $f.thost $f.host -padx 2 -pady 2 -sticky w grid $f.tport $f.port -padx 2 -pady 2 -sticky w grid $f.tauth $f.auth -padx 2 -pady 2 -sticky w grid $f.tuser $f.user -padx 2 -pady 2 -sticky w grid $f.tpasswd $f.passwd -padx 2 -pady 2 -sticky w pack $f -side top -fill both -expand true } saods9/ds9/library/hv.tcl000644 000765 000000 00000053213 12741000205 015643 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc HVDef {} { global ihv set ihv(unique) 0 set ihv(windows) {} } # Public proc HV {varname title url {init {}} {sync 0}} { upvar #0 $varname var global $varname global ds9 global ihv global debug if {$debug(tcl,hv)} { puts stderr "HV $varname $title $url $init $sync" } set var(top) ".${varname}" set var(mb) ".${varname}mb" set w $var(top) set mb $var(mb) # see if we already have a window visible if {[winfo exists $w]} { raise $w } else { # add it to our xpa list lappend ihv(windows) $varname set var(widget) {} set var(status) {} set var(sync) $sync set var(frame) new set var(save) 0 set var(title) "$title" set var(copy) {} set var(search) {} set var(search,start) 0 set var(active) 0 set var(index) 0 set var(font) $ds9(times) switch $ds9(wm) { x11 {set var(font,size) 10} aqua {set var(font,size) 16} win32 {set var(font,size) 14} } set var(font,weight) normal set var(font,slant) roman set var(init) $init set var(cookies) {} set var(images,forward) ${varname}forward set var(images,back) ${varname}back set var(images,reload) ${varname}reload set var(images,stop) ${varname}stop set var(images,gray) ${varname}gray # init some vars HVClearAll $varname set var(delete) 0 # create window Toplevel $w $mb 7 $title "HVDestroy $varname" $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit $mb add cascade -label [msgcat::mc {View}] -menu $mb.view $mb add cascade -label [msgcat::mc {Frame}] -menu $mb.frame menu $mb.file $mb.file add command -label [msgcat::mc {Open URL}] \ -command "HVURLDialogCmd $varname" $mb.file add command -label [msgcat::mc {Open File}] \ -command "HVFileDialogCmd $varname" $mb.file add separator $mb.file add command -label [msgcat::mc {Clear}] \ -command "HVClearCmd $varname" $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command "HVDestroy $varname" menu $mb.edit $mb.edit add command -label [msgcat::mc {Cut}] \ -state disabled -accelerator "${ds9(ctrl)}X" $mb.edit add command -label [msgcat::mc {Copy}] \ -command "HVCopyCmd $varname" -accelerator "${ds9(ctrl)}C" $mb.edit add command -label [msgcat::mc {Paste}] \ -state disabled -accelerator "${ds9(ctrl)}V" $mb.edit add separator switch $ds9(wm) { x11 - win32 { $mb.edit add command -label "[msgcat::mc {Find}]..." \ -command "HVFindCmd $varname" -accelerator "${ds9(ctrl)}F" } aqua { # Known bug in Tk, can't have dialogs invoked by accelerator $mb.edit add command -label "[msgcat::mc {Find}]..." \ -command "HVFindCmd $varname" } } $mb.edit add command -label [msgcat::mc {Find Next}] \ -command "HVFindNextCmd $varname" -accelerator "${ds9(ctrl)}G" $mb.edit add separator $mb.edit add command -label [msgcat::mc {Clear Cache}] \ -command "HVClearCache $varname" menu $mb.view $mb.view add command -label [msgcat::mc {Back}] \ -command "HVBackCmd $varname" $mb.view add command -label [msgcat::mc {Forward}] \ -command "HVForwardCmd $varname" $mb.view add separator $mb.view add command -label [msgcat::mc {Stop}] \ -command "HVStopCmd $varname" $mb.view add command -label [msgcat::mc {Reload}] \ -command "HVReloadCmd $varname" $mb.view add separator $mb.view add command -label [msgcat::mc {Page Source}] \ -command "HVPageSourceCmd $varname" menu $mb.frame $mb.frame add checkbutton \ -label [msgcat::mc {Save Image on Download}] \ -variable ${varname}(save) $mb.frame add separator $mb.frame add radiobutton \ -label [msgcat::mc {Create New Frame on Download}] \ -variable ${varname}(frame) -value new $mb.frame add radiobutton \ -label [msgcat::mc {Use Current Frame on Download}] \ -variable ${varname}(frame) -value current image create photo $var(images,back) -data {R0lGODlhDwANAKL/AM///8DAwJD//y/I/y+X/y9n/wAAAAAAACH5BAEAAAEALAAAAAAPAA0AAAM0GLq2/qE0+AqYVFmB6eZFKEoRIAyCaaYCYWxDLM9uYBAxoe/7dA8ug3AoZOg6mRsyuUxmEgA7} image create photo $var(images,forward) -data {R0lGODlhDwANAKL/AM///8DAwJD//y/I/y+X/y9n/wAAAAAAACH5BAEAAAEALAAAAAAPAA0AAAM3GLpa/K8YSMuYlBVwV/kgCAhdsAFoig7ktA1wLA9SQdw4DkuB4f8/Ag2TMRB4GYUBmewRm09FAgA7} image create photo $var(images,stop) -data {R0lGODlhDQANALP/AP///1Lq81I5Of+EhCEAAHsAAMYAAP+UQv9zCHuMjP8AMf8AKf+MnK1CSv8QIQAAACH5BAEAAAEALAAAAAANAA0AAARWMMjUTC1J6ubOQYdiCBuIIMuiiCT1OWu6Ys05AMPC4ItBGB8dYMdI+RoHR4qY6v1CwlvRcEQ4brndwFAgJAwIRdPIzVTEYiqXJBEU1FQCW5Mg2O0ZSQQAOw==} image create photo $var(images,reload) -data {R0lGODlhDAANALP/AP///zk5OVJSUoSEhKWlpcDAwP//1v//xr3erZTOezGcEFKtSimce3NzezkxOQAAACH5BAEAAAUALAAAAAAMAA0AAARRcJBJyRilEMC5AcjQaB1wHMYkCFuXLKDQONsBLIuynEBAGAcJAnYy0AyGBOLENPg4qGUISTMdEIoEg4A6ohK6BND4YyqBqCdyve453vB44BEBADs=} image create photo $var(images,gray) -data {R0lGODdhPAA+APAAALi4uAAAACwAAAAAPAA+AAACQISPqcvtD6OctNqLs968+w+G4kiW5omm6sq27gvH8kzX9o3n+s73/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNFgsAO} # Buttons set f [ttk::frame $w.buttons] ttk::button $f.back -image $var(images,back) -takefocus 0 \ -command "HVBackCmd $varname" ttk::button $f.forward -image $var(images,forward) -takefocus 0 \ -command "HVForwardCmd $varname" ttk::button $f.stop -image $var(images,stop) -takefocus 0 \ -command "HVStopCmd $varname" ttk::button $f.reload -image $var(images,reload) -takefocus 0 \ -command "HVReloadCmd $varname" pack $f.back $f.forward $f.stop $f.reload -side left # Param set f [ttk::frame $w.param] set var(widget) [html $f.html \ -yscrollcommand "$f.yscroll set" \ -xscrollcommand "$f.xscroll set" \ -padx 5 \ -pady 9 \ -formcommand "HVFormCB $varname" \ -imagecommand "HVImageCB $varname" \ -scriptcommand "HVScriptCB $varname"\ -appletcommand "HVAppletCB $varname" \ -framecommand "HVFrameCB $varname" \ -underlinehyperlinks 1 \ -bg white \ -width 640 \ -height 512 \ -fontcommand "HVFontCB $varname" \ -tablerelief raised \ ] $var(widget) token handler {NOSCRIPT} "HVNoScriptCB $varname" $var(widget) token handler {/NOSCRIPT} "HVNoScriptCB $varname" ttk::scrollbar $f.yscroll -orient vertical \ -command "$f.html yview" ttk::scrollbar $f.xscroll -orient horizontal \ -command "$f.html xview" grid $f.html $f.yscroll -sticky news grid $f.xscroll -stick news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 bind $var(widget).x "HVMotion $varname %x %y" bind $var(widget).x "HVButton1 $varname %x %y" bind $var(widget).x "HVMotion1 $varname %x %y" bind $var(widget).x "HVRelease1 $varname %x %y" bind $w "$f.html yview scroll -1 units" bind $w "$f.html yview scroll 1 units" bind $w "$f.html xview scroll 1 units" bind $w "$f.html xview scroll -1 units" bind $w <> "HVCopyCmd $varname" switch $ds9(wm) { x11 { bind $w "HVMouseWheel $varname 1" bind $w "HVMouseWheel $varname -1" bind $w <> [list HVFindCmd $varname] } aqua { bind $w "HVMouseWheel $varname %D" # Known bug in Tk, can't have dialogs invoked by accelerator } win32 { bind $w "HVMouseWheel $varname %D" bind $w <> [list HVFindCmd $varname] } } bind $w <> [list HVFindNextCmd $varname] # Status set f [ttk::frame $w.status] ttk::label $f.status -textvariable ${varname}(status) \ -width 120 -anchor w pack $f.status -side left # Fini ttk::separator $w.sep -orient horizontal pack $w.status $w.sep -side bottom -fill x pack $w.buttons -side top -fill x pack $w.param -side top -fill both -expand true # we have a problem with the html widget. first time thur, some # structures are not allocated/initialized. if we first display # a blank page, all seems ok $var(widget) clear $var(widget) parse "\n\n
\n
\n\n" global debug if {$debug(tcl,idletasks)} { puts stderr "HV" } update idletasks } selection handle $w [list HVExportSelection $varname] if {$url != {}} { # no need to resolve HVLoadURL $varname $url {} $var(sync) } } # Bindings proc HVMotion {varname x y} { upvar #0 $varname var global $varname global ds9 set url [$var(widget) href $x $y] if {[string length $url] > 0} { switch $ds9(wm) { x11 - win32 {$var(widget) configure -cursor hand2} aqua {$var(widget) configure -cursor pointinghand} } } else { $var(widget) configure -cursor {} } HVStatus $varname $url } proc HVButton1 {varname x y} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVButton1" } $var(widget) selection clear set var(sel,x) -1 set var(sel,y) -1 HVClearIndex $varname $var(index) set url [$var(widget) href $x $y] if {[string length $url] != 0} { HVResolveURL $varname $url } else { set var(sel,x) $x set var(sel,y) $y } } proc HVMotion1 {varname x y} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVMotion1" } if {$var(sel,x) != -1 && $var(sel,y) != -1} { $var(widget) selection set @$var(sel,x),$var(sel,y) @$x,$y } } proc HVRelease1 {varname x y} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVRelease1" } if {$var(sel,x) != -1 && $var(sel,y) != -1} { set var(copy) [$var(widget) text ascii @$var(sel,x),$var(sel,y) @$x,$y] selection own -command [list HVLostSelection $varname] $var(top) } } proc HVMouseWheel {varname cnt} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVMouseWheel" } $var(widget) yview scroll [expr -$cnt] units } # Commands proc HVClearCmd {varname} { upvar #0 $varname var global $varname # clear the widge and all images $var(widget) clear HVClearCache $varname HVClearAll $varname } proc HVCopyCmd {varname} { upvar #0 $varname var global $varname clipboard clear -displayof $var(top) clipboard append -displayof $var(top) $var(copy) } proc HVExportSelection {varname offset bytes} { upvar #0 $varname var global $varname if {$var(copy) != {}} { return [string range $var(copy) $offset [expr $offset+$bytes]] } } proc HVLostSelection {varname} { upvar #0 $varname var global $varname $var(widget) selection clear set var(copy) {} } proc HVURLDialogCmd {varname} { upvar #0 $varname var global $varname global debug set url "$var(url)" if {[EntryDialog [msgcat::mc {URL}] [msgcat::mc {Enter URL}] 80 url]} { if {[string length $url] == 0} { return } ParseURL $url r switch -- $r(scheme) { {} { # append 'http://' if needed if {[string range $r(path) 0 0] == "/"} { set url "http:/$url" } else { set url "http://$url" } if {$debug(tcl,hv)} { puts stderr "HVURLDialogCmd new $url" } } } # clear the base $var(widget) config -base {} HVClearIndex $varname 0 HVClearAll $varname # no need to resolve HVLoadURL $varname $url {} } } proc HVFileDialogCmd {varname} { upvar #0 $varname var global $varname global debug set fn [OpenFileDialog hvhtmlfbox] if {"$fn" != {}} { HVFileDialog $varname "$fn" } } proc HVFileDialog {varname fn} { upvar #0 $varname var global $varname global debug # clear the base $var(widget) config -base {} HVClearIndex $varname 0 HVClearAll $varname # no need to resolve HVLoadURL $varname "$fn" {} } proc HVBackCmd {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVBackCmd index $var(index)" } incr ${varname}(index) -1 if {[info exists ${varname}(index,$var(index))]} { set url [lindex $var(index,$var(index)) 0] set query [lindex $var(index,$var(index)) 1] if {$debug(tcl,hv)} { puts stderr "HVBackCmd :$var(index):$url:$query:" } # clear the base $var(widget) config -base {} # HVGotoHTML will incr the index again incr ${varname}(index) -1 # no need to resolve HVLoadURL $varname $url $query $var(sync) } else { incr ${varname}(index) } } proc HVFind {varname} { upvar #0 $varname var global $varname set toks [$var(widget) token list 1.0 end] set aa -1 set bb 0 set cc -1 set dd 0 set id -1 set ss $var(search,start) while {$ss<[llength $toks] && $cc==-1} { set pat [lindex $var(search) 0] set id [lsearch -glob -start $ss $toks "Text *$pat*"] if {$id != -1} { set ok 1 set aa $id set ss $id set tt [string first $pat [lindex [lindex $toks $aa] 1]] if {$tt != -1} { set bb $tt } for {set ii 1} {$ii<[llength $var(search)]} {incr ii} { set pat [lindex $var(search) $ii] set str [lindex [lindex $toks [expr $id+$ii*2]] 1] if {[string compare -length [string length $pat] $pat $str]} { incr ss set ok 0 break } } if {$ok} { set cc [expr $aa+([llength $var(search)]-1)*2] set tt [string last $pat [lindex [lindex $toks $cc] 1]] if {$tt != -1} { set dd [expr $tt+[string length $pat]] } } } else { break } } if {$aa == -1 || $cc == -1} { return 0 } else { set var(search,start) [expr $cc+1] $var(widget) selection set "[expr $aa+1].$bb" "[expr $cc+1].$dd" $var(widget) yview text "[expr $aa+1].$bb" return 1 } } proc HVFindCmd {varname} { upvar #0 $varname var global $varname set result "$var(search)" if {[EntryDialog [msgcat::mc {Search}] [msgcat::mc {Enter Search Expression}] 40 result]} { set var(search) "$result" set var(search,start) 0 $var(widget) selection clear if {![HVFind $varname]} { Error "$var(search) [msgcat::mc {Not Found}]" } } } proc HVFindNextCmd {varname} { upvar #0 $varname var global $varname if {$var(search,start) == 0} { HVFindCmd $varname } else { if {![HVFind $varname]} { # wrap set var(search,start) 0 if {![HVFind $varname]} { Error "$var(search) [msgcat::mc {Not Found}]" } } } } proc HVForwardCmd {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVForwardCmd $var(index)" } incr ${varname}(index) if {[info exists ${varname}(index,$var(index))]} { set url [lindex $var(index,$var(index)) 0] set query [lindex $var(index,$var(index)) 1] if {$debug(tcl,hv)} { puts stderr "HVForwardCmd :$var(index):$url:$query:" } # clear the base $var(widget) config -base {} # HVGotoHTML will incr the index again incr ${varname}(index) -1 # no need to resolve HVLoadURL $varname $url $query $var(sync) } else { incr ${varname}(index) -1 } } proc HVGotoCmd {varname nn} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVGotoCmd $nn" } set var(index) $nn if {[info exists ${varname}(index,$var(index))]} { set url [lindex $var(index,$var(index)) 0] set query [lindex $var(index,$var(index)) 1] if {$debug(tcl,hv)} { puts stderr "HVGotoCmd :$var(index):$url:$query:" } # clear the base $var(widget) config -base {} # HVGotoHTML will incr the index again incr ${varname}(index) -1 # no need to resolve HVLoadURL $varname $url $query $var(sync) } else { incr ${varname}(index) } } proc HVReloadCmd {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVReloadCmd" } # clear the base $var(widget) config -base {} # HVGotoHTML will incr the index again incr ${varname}(index) -1 # no need to resolve HVLoadURL $varname $var(url) $var(query) $var(sync) } proc HVStopCmd {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "\n*** HVStopCmd ***\n" } HVCancel $varname } proc HVPageSourceCmd {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVPageSourceCmd" } SimpleTextDialog ${varname}txt $var(url) 80 20 insert top $var(data) } proc HVArchUserCmd {varname title url} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVArchUserCmd" } if {[string length $url] == 0} { return } ParseURL $url r switch -- $r(scheme) { {} { # append 'http://' if needed if {[string range $r(path) 0 0] == "/"} { set url "http:/$url" } else { set url "http://$url" } if {$debug(tcl,hv)} { puts stderr "HVArchUserCmd new $url" } } } HV $varname $title $url } proc HVAnalysisCmd {varname title url sync} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVAnalysisCmd $varname $title $url $sync" } if {[string length $url] == 0} { HV $varname "$title" {} {} $sync } else { ParseURL $url r switch -- $r(scheme) { {} { # append 'http://' if needed if {[string range $r(path) 0 0] == "/"} { set url "http:/$url" } else { set url "http://$url" } if {$debug(tcl,hv)} { puts stderr "HVAnalysisCmd new $url" } } } HV $varname "$title" $url {} $sync } } proc HVAnalysisURL {which i url sync} { set varname "at${which}${i}" global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVAnalysisURL $which $i $url" } set ${varname}(cookies) {} set ${varname}(sync) $sync HVClearAll $varname HVSetAnalysis $varname 1 $which $i HVLoadURL $varname $url {} $sync } proc HVAnalysisCancel {which i} { set varname "at${which}${i}" global $varname HVCancel $varname } # Archive Servers proc HVArchChandraChaser {} { global current set coord {} if {$current(frame) != {}} { if {[$current(frame) has wcs equatorial wcs]} { set coord [$current(frame) get fits center wcs fk5 degrees] set size \ [expr [lindex [$current(frame) get fits size wcs fk5 arcmin] 0]/2.] } } set l {} if {[string length $coord] != 0} { lappend l "1 lon [lindex $coord 0]" lappend l "1 lat [lindex $coord 1]" lappend l "1 radius $size" } global hvchandrachaser HV hvchandrachaser {Chandra Chaser} http://cda.harvard.edu/chaser/mainEntry.do $l } proc HVArchChandraPop {} { global current set coord {} if {$current(frame) != {}} { if {[$current(frame) has wcs equatorial wcs]} { set coord [$current(frame) get fits center wcs fk5 degrees] set size \ [expr [lindex [$current(frame) get fits size wcs fk5 arcmin] 0]/2.] } } set l {} if {[string length $coord] != 0} { lappend l "1 lon [lindex $coord 0]" lappend l "1 lat [lindex $coord 1]" lappend l "1 radius $size" lappend l "1 searchBy position" } global hvchandrapop HV hvchandrapop {Chandra Popular} http://cda.harvard.edu/pop/mainEntry.do $l } proc HVArchChandraFTP {} { global current set ra {} set dec {} set wid {} if {$current(frame) != {}} { if {[$current(frame) has wcs equatorial wcs]} { set coord [$current(frame) get fits center wcs fk5 sexagesimal] set ra [lindex $coord 0] set dec [lindex $coord 1] set wid [lindex [$current(frame) get fits size wcs fk5 degrees] 0] } } set l {} if {[string length $ra] != 0} { lappend l "1 ra \{$ra\}" lappend l "1 dec \{$dec\}" lappend l "1 wid \{$wid\}" } global hvchandraftp HV hvchandraftp {Chandra FTP} \ http://www.cfa.harvard.edu/archive/chandra/search $l } # Other # Process Cmds proc ProcessWebCmd {varname iname} { global ihv set w {hvweb} upvar $varname var upvar $iname i # determine which web browser window switch -- [string tolower [lindex $var $i]] { new { incr i set ii [lsearch $ihv(windows) $w] if {$ii>=0} { append w $ihv(unique) incr ihv(unique) } } close - clear - click {set w [lindex $ihv(windows) end]} default { set ii [lsearch $ihv(windows) [lindex $var $i]] if {$ii>=0} { set w [lindex $var $i] incr i } } } switch -- [string tolower [lindex $var $i]] { close {HVDestroy $w} clear {HVClearCmd $w} click { set vvarname $w upvar #0 $vvarname vvar global $vvarname incr i switch -- [string tolower [lindex $var $i]] { back {HVBackCmd $vvarname} forward {HVForwardCmd $vvarname} stop {HVStopCmd $vvarname} reload {HVReloadCmd $vvarname} default { set id [lindex $var $i] if {![info exists vvar(widget)]} { return } set tokens [$vvar(widget) token list 1.0 end] set cnt 0 for {set ii 0} {$ii<[llength $tokens]} {incr ii} { set tok [lindex $tokens $ii] if {[string tolower [lindex $tok 0]] == "markup" && [string tolower [lindex $tok 2]] == "href"} { set url [lindex $tok 3] incr cnt if {$cnt == $id} { HVResolveURL $vvarname [$vvar(widget) resolve $url] break; } } } } } } default { set url [lindex $var $i] if {[string length $url] == 0} { HV $w Web {} {} 1 } else { ParseURL $url r switch -- $r(scheme) { {} { # append 'http://' if needed if {[string range $r(path) 0 0] == "/"} { set url "http:/$url" } else { set url "http://$url" } } } HV $w Web $url {} 1 } } } } proc ProcessSendWebCmd {proc id param} { global ihv $proc $id "$ihv(windows)\n" } saods9/ds9/library/hvform.tcl000644 000765 000000 00000031545 12705445647 016562 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc HVFormCB {varname n cmd args} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVFormCB $varname $n $cmd $args" } switch -- [string tolower $cmd] { form {HVFormForm $varname $n args} flush {HVFormFlush $varname $n args} input {HVFormInput $varname $n args} select {HVFormSelect $varname $n args} textarea {HVFormTextArea $varname $n args} } } proc HVFormForm {varname n a} { upvar #0 $varname var global $varname upvar $a args global debug if {$debug(tcl,hv)} { puts stderr "HVFormForm $n $args" } # try to clean up lose vars from previous forms HVFormFlush $varname $n {} set aa [lindex $args 2] set var(form,$n,action) [lindex $args 0] set var(form,$n,method) [HVattrs method $aa get] if {$debug(tcl,hv)} { puts stderr "HVFormForm method $var(form,$n,method)" puts stderr "HVFormForm action $var(form,$n,action)" } } proc HVFormFlush {varname n a} { upvar #0 $varname var global $varname upvar $a args global debug if {$debug(tcl,hv)} { puts stderr "HVFormFlush $n" } # unset all var(form,$n,*) foreach x [array names $varname "form,$n,*"] { unset ${varname}($x) } bind $var(top) {} } proc HVFormInput {varname n a} { upvar #0 $varname var global $varname upvar $a args global debug set path [lindex $args 0] set attrs [lindex $args 1] if {$debug(tcl,hv)} { puts stderr "HVFormInput $n $path $attrs" } set id [lindex [split $path .] end] set type [HVattrs type $attrs {}] set disabled [HVattrs disabled $attrs normal] set readonly [HVattrs readonly $attrs normal] switch -- [string tolower $type] { checkbox { set name [HVattrs name $attrs var] set value [HVattrs value $attrs on] set checked [HVattrs checked $attrs nochecked] set var(form,$n,name,$id) $name if {$checked != "nochecked"} { set var(form,$n,var,$id) $value } else { set var(form,$n,var,$id) {} } set var(form,$n,init,$id) $$var(form,$n,var,$id) ttk::checkbutton $path -variable ${varname}(form,$n,var,$id) \ -onvalue $value -offvalue {} -state $disabled } radio { set name [HVattrs name $attrs var] # we need this so that all share the same variable set id $name set value [HVattrs value $attrs on] set checked [HVattrs checked $attrs nochecked] set var(form,$n,name,$id) $name if {$checked != "nochecked"} { set var(form,$n,var,$id) $value set var(form,$n,init,$id) $var(form,$n,var,$id) } # override init value foreach f $var(init) { if {$n == [lindex $f 0] && $name == [lindex $f 1] && $value == [lindex $f 2]} { set var(form,$n,var,$id) $value set var(form,$n,init,$id) $var(form,$n,var,$id) } } ttk::radiobutton $path -variable ${varname}(form,$n,var,$id) \ -value $value -state $disabled } button { set name [HVattrs name $attrs submit] set value [HVattrs value $attrs "Submit"] ttk::button $path -text $value \ -command "HVSubmitForm $varname $n \{$name\} \{$value\}" } submit { set name [HVattrs name $attrs submit] set value [HVattrs value $attrs "Submit"] ttk::button $path -text $value \ -command "HVSubmitForm $varname $n \{$name\} \{$value\}" bind $var(top) \ "HVSubmitForm $varname $n \{$name\} \{$value\}" } reset { set name [HVattrs name $attrs reset] set value [HVattrs value $attrs "Reset"] ttk::button $path -text $value -command "HVResetForm $varname $n" } image { set name [HVattrs name $attrs submit] set value [HVattrs value $attrs "Submit"] set src [HVattrs src $attrs {}] set img [HVImageCB $varname [$var(widget) resolve $src]] if {$img != "$var(images,gray)"} { ttk::button $path -image $img \ -command "HVSubmitForm $varname $n \{$name\} \{$value\}" } else { ttk::button $path -text $value -state $disabled \ -command "HVSubmitForm $varname $n \{$name\} \{$value\}" } return } hidden { set name [HVattrs name $attrs var] set value [HVattrs value $attrs {}] set var(form,$n,name,$id) $name set var(form,$n,var,$id) $value } password { set name [HVattrs name $attrs var] set value [HVattrs value $attrs {}] set size [HVattrs size $attrs 20] set var(form,$n,name,$id) $name set var(form,$n,var,$id) $value set var(form,$n,init,$id) $var(form,$n,var,$id) ttk::entry $path -textvariable ${varname}(form,$n,var,$id) \ -width $size -show "*" -state $readonly } file { set name [HVattrs name $attrs var] set value [HVattrs value $attrs {}] set size [HVattrs size $attrs 20] set var(form,$n,name,$id) $name set var(form,$n,var,$id) [HVInitVar $varname $n $name $value] set var(form,$n,init,$id) $var(form,$n,var,$id) ttk::entry $path -textvariable ${varname}(form,$n,var,$id) \ -width $size -state $readonly } text - default { set name [HVattrs name $attrs var] set value [HVattrs value $attrs {}] set size [HVattrs size $attrs 20] set var(form,$n,name,$id) $name set var(form,$n,var,$id) [HVInitVar $varname $n $name $value] set var(form,$n,init,$id) $var(form,$n,var,$id) ttk::entry $path -textvariable ${varname}(form,$n,var,$id) \ -width $size -state $readonly } } } proc HVFormSelect {varname n a} { upvar #0 $varname var global $varname upvar $a args global ds9 global debug set path [lindex $args 0] set attrs [lindex $args 1] set choices [lindex $args 2] set initial [lindex $args 3] if {$debug(tcl,hv)} { puts stderr "HVFormSelect :$n:$path:$attrs:$choices:$initial:" } set id [lindex [split $path .] end] set name [HVattrs name $attrs var] set size [HVattrs size $attrs 0] set multiple [HVattrs multiple $attrs single] if {[string length $multiple] == 0} { set multiple multiple } switch -- $multiple { single { set var(form,$n,name,$id) $name ttk::menubutton $path -textvariable ${varname}(form,$n,single,$id) \ -menu $path.m menu $path.m -tearoff 0 set l 0 set first 1 foreach f $choices { set i [lindex $f 0] set v [lindex $f 1] set m [lindex $f 2] if {[string length $v] == 0} { set v $m } if {$i || $first} { set var(form,$n,var,$id) $v set var(form,$n,init,$id) $v set var(form,$n,single,$id) $m set var(form,$n,singleinit,$id) $m set first 0 } if {[string length $m]>$l} { set l [string length $m] } $path.m add command -label $m -command \ "upvar #0 $varname var; set var(form,$n,var,$id) \"$v\"; set var(form,$n,single,$id) \"$m\"" } # override init value foreach f $var(init) { if {$n == [lindex $f 0] && $name == [lindex $f 1]} { set v [lindex $f 2] set m [lindex $f 3] set var(form,$n,var,$id) $v set var(form,$n,init,$id) $v set var(form,$n,single,$id) $m set var(form,$n,singleinit,$id) $m } } $path configure -width $l } multiple { set var(form,$n,name,$id) $name set var(form,$n,multivar,$id) {} set var(form,$n,multiinit,$id) {} set var(form,$n,multimenu,$id) {} set l 0 set long {} set ii 0 foreach f $choices { if {[lindex $f 0]} { lappend var(form,$n,multiinit,$id) $ii } set foo [lindex $f 1] if {[string length $foo] == 0} { set foo [lindex $f 2] } lappend var(form,$n,multivar,$id) $foo lappend var(form,$n,multimenu,$id) [lindex $f 2] set m [lindex $f 2] if {[string length $m]>$l} { set long $m set l [string length $m] } incr ii } set var(form,$n,multiple,$id) $path # we have a problem # the frame we create will not resize itself based on the # interior size of the listbox and the scrollbar # so, we need to set the frame size by hand set font "$var(font) $var(font,size) $var(font,weight) $var(font,slant)" ttk::frame $path ttk::scrollbar $path.scroll -command "$path.list yview" listbox $path.list -selectmode multiple \ -width 0 -height $size \ -listvar ${varname}(form,$n,multimenu,$id) \ -font $font \ -yscroll "$path.scroll set" \ -exportselection false set w [expr [font measure $font $long]+30] set h [expr $size*[font metrics $font -linespace]] $path configure -width $w -height $h pack $path.list $path.scroll -side left -fill y -expand 1 foreach ii $var(form,$n,multiinit,$id) { $path.list selection set $ii } } } } proc HVFormTextArea {varname n a} { upvar #0 $varname var global $varname upvar $a args set path [lindex $args 0] set attrs [lindex $args 1] set initial [string range [lindex $args 2] 1 end] global debug if {$debug(tcl,hv)} { puts stderr "HVFormTextArea $n $path $attrs $initial" } set id [lindex [split $path .] end] set name [HVattrs name $attrs var] set rows [HVattrs rows $attrs 4] set cols [HVattrs cols $attrs 20] set readonly [HVattrs disabled $attrs normal] # update initial set initial [HVInitVar $varname $n $name $initial] text $path -height $rows -width $cols -wrap none -state $readonly $path insert end $initial set var(form,$n,name,$id) $name set var(form,$n,var,$id) $initial set var(form,$n,init,$id) $var(form,$n,var,$id) set var(form,$n,textarea,$id) $path } proc HVattrs {k l def} { # break list up into key/value pairs set key {} set value {} set w 1 foreach f $l { if {$w} { lappend key [string tolower $f] set w 0 } else { lappend value $f set w 1 } } set a [lsearch -exact $key [string tolower $k]] if {$a>=0} { return [lindex $value $a] } else { return $def } } proc HVSubmitForm {varname n name value} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVSubmitForm $n" } bind $var(top) {} # update textareas foreach x [array names $varname "form,$n,textarea,*"] { set f [split $x ,] set id [lindex $f 3] set path $var($x) set var(form,$n,var,$id) [$path get 1.0 end] } set query {} # append button name=value append query "[http::formatQuery $name $value]&" # append normal vars foreach x [array names $varname "form,$n,var,*"] { set f [split $x ,] set id [lindex $f 3] set v [string trim $var($x)] if {[string length $v] != 0} { append query "[http::formatQuery $var(form,$n,name,$id) $v]&" } } # append multiple select foreach x [array names $varname "form,$n,multiple,*"] { set f [split $x ,] set id [lindex $f 3] set path $var($x) set iii [$path.list curselection] foreach ii $iii { set v [string trim [lindex $var(form,$n,multivar,$id) $ii]] if {[string length $v] != 0} { append query "[http::formatQuery $var(form,$n,name,$id) $v]&" } } } # remove last '&' set query [string trimright $query &] HVClearIndex $varname $var(index) # and do it # already resolved switch -- [string tolower $var(form,$n,method)] { get {HVLoadURL $varname "$var(form,$n,action)?$query" {} $var(sync)} post {HVLoadURL $varname "$var(form,$n,action)" "$query" $var(sync)} } } proc HVResetForm {varname n} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVResetForm $n" } foreach x [array names $varname "form,$n,init,*"] { set f [split $x ,] set var(form,$n,var,[lindex $f 3]) $var($x) } #update single select foreach x [array names $varname "form,$n,singleinit,*"] { set f [split $x ,] set var(form,$n,single,[lindex $f 3]) $var($x) } # update multiple select foreach x [array names $varname "form,$n,multiinit,*"] { set f [split $x ,] set path $var(form,$n,multiple,[lindex $f 3]) $path.list selection clear 0 foreach ii $var($x) { $path.list selection set $ii } } # update textareas foreach x [array names $varname "form,$n,textarea,*"] { set f [split $x ,] set path $var($x) $path delete 1.0 end $path insert end $var(form,$n,init,[lindex $f 3]) } } proc HVInitVar {varname n name def} { upvar #0 $varname var global $varname foreach f $var(init) { if {$n == [lindex $f 0] && $name == [lindex $f 1]} { return [lindex $f 2] } } return $def } proc HVFixHTMLForm {varname} { upvar #0 $varname var global $varname global debug if {[regexp -nocase {
]*} $var(data) r]} { if {![regexp -nocase {action=} $r]} { if {$debug(tcl,hv)} { puts stderr "HVFixFormHTML action fixed" } set rr "$r action=[$var(widget) cget -base]" regsub -nocase {]*} $var(data) $rr var(data) } } } saods9/ds9/library/hvsup.tcl000644 000765 000000 00000124313 12737246647 016426 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc HVCancel {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVCancel" } # set state to 0 so that we don't process the finish proc set var(active) 0 # stop any refresh if {$var(refresh,id)>0} { after cancel $var(refresh,id) set var(refresh,id) 0 } # analysis if {$var(analysis)} { AnalysisTaskEnd $var(analysis,which) $var(analysis,i) HVSetAnalysis $varname 0 {} 0 } # clean up HVClearTmpFile $varname if {[info exists var(token)]} { http::reset $var(token) } if {[info exists var(widget)]} { $var(widget) configure -cursor {} } } proc HVDestroy {varname} { upvar #0 $varname var global $varname global ihv global debug if {$debug(tcl,hv)} { puts stderr "HVDestroy" } HVCancel $varname # clear the widge and all images $var(widget) clear # clear image cache foreach x [array names $varname "images,*"] { image delete $var($x) unset ${varname}($x) } # clear cache HVClearCache $varname # destroy the window and menubar if {[winfo exists $var(top)]} { destroy $var(top) destroy $var(mb) } # delete it from the xpa list set ii [lsearch $ihv(windows) $varname] if {$ii>=0} { set ihv(windows) [lreplace $ihv(windows) $ii $ii] } # clear varname unset $varname } proc HVReset {varname} { upvar #0 $varname var global $varname set var(active) 0 if {[info exists var(token)]} { global debug if {$debug(tcl,hv)} { puts stderr "HVReset ***cleanup***" } http::cleanup $var(token) unset var(token) } } proc HVDone {varname} { upvar #0 $varname var global $varname HVStatus $varname {} HVReset $varname } proc HVCancelled {varname} { upvar #0 $varname var global $varname HVStatus $varname {} HVReset $varname } proc HVError {varname err} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVError $err" } HVReset $varname Error $err } proc HVStatus {varname message} { upvar #0 $varname var global $varname set var(status) $message } proc HVResolveURL {varname url} { upvar #0 $varname var global $varname global debug global pvo if {$debug(tcl,hv)} { puts stderr "HVResolveURL $varname $url" } set sync $var(sync) # sub xpa method set exp {%40%40XPA_METHOD%40%40|@@XPA_METHOD@@} if {[regexp $exp $url]} { regsub -all $exp $url [XPAMethod] url if {$debug(tcl,hv)} { puts stderr "HVResolveURL XPA_METHOD $url" } } # sub vo method set exp {%40%40VO_METHOD%40%40|@@VO_METHOD@@} if {[regexp $exp $url]} { regsub -all $exp $url $pvo(method) url if {$debug(tcl,hv)} { puts stderr "HVResolveURL VO_METHOD $url" } } # if pvo(method) is xpa, HV has to be async if {$pvo(method) == {xpa}} { set sync 0 } # some old sites have a problem with '?' in the query not encoded ParseURL $url rr if {$rr(query) != {}} { if {[regsub -all {\?} $rr(query) {%25} query]} { set newurl "$rr(scheme)://$rr(authority)$rr(path)?$query" if {$rr(fragment) != {}} { append newurl "#$rr(fragment)" } HVLoadURL $varname $newurl {} $sync } else { HVLoadURL $varname $url {} $sync } } else { HVLoadURL $varname $url {} $sync } } # this is the main entry point, everybody calls here proc HVLoadURL {varname url query {sync 0}} { upvar #0 $varname var global $varname # this assumes the url has been already resolved global debug if {$debug(tcl,hv)} { puts stderr "HVLoadURL :$varname:$url:$query:$sync:" } # do we have anything? if {$url == {}} { return } HVStatus $varname {} # parse url ParseURL $url r if {$debug(tcl,hv)} { puts stderr "HVLoadURL |$r(scheme)|$r(authority)|$r(path)|$r(query)|$r(fragment)|$query|" } switch -- $r(scheme) { file - {} {HVProcessURLFile $varname $url $query r} ftp {HVProcessURLFTP $varname $url $query r} http {HVProcessURLHTTP $varname $url $query r $sync} default {HVError $varname "[msgcat::mc {Sorry, DS9 does not support}] $r(scheme)"} } } proc HVProcessURLFile {varname url query rr} { upvar #0 $varname var global $varname upvar $rr r global ds9 global debug if {$debug(tcl,hv)} { puts stderr "HVProcessURLFile" } if {[file exists $r(path)]} { if {[file isdirectory $r(path)]} { HVSetURL $varname $url {} {} HVSetResult $varname 200 "text/html" HVSetData $varname \ [HVFileHtmlList $r(path) [HVDirList $r(path)]] {} set var(delete) 0 HVParse $varname } else { HVSetURL $varname $url {} $r(fragment) set var(delete) 0 HVLoadFile $varname $r(path) } } } proc HVProcessURLFTP {varname url query rr} { upvar #0 $varname var global $varname upvar $rr r global ds9 global debug if {$debug(tcl,hv)} { puts stderr "HVProcessURLFTP" DumpURL r } set fn [tmpnam [file extension $r(path)]] set ftp [ftp::Open $r(authority) "ftp" "-ds9@" -mode passive] if {$ftp > -1} { # first try to get as file set ftp::VERBOSE $debug(tcl,ftp) set "ftp::ftp${ftp}(Output)" FTPLog ftp::Type $ftp binary if {[ftp::Get $ftp $r(path) "$fn"]} { ftp::Close $ftp if {$debug(tcl,hv)} { puts stderr "HVProcessURLFTP get $fn" } HVSetURL $varname $url {} $r(fragment) set var(delete) 1 HVLoadFile $varname "$fn" HVClearTmpFile $varname } else { # from the prev attempt catch {file delete -force "$fn"} # is it a dir or file that could not be download? if {[file extension $r(path)] == {}} { if {$debug(tcl,hv)} { puts stderr "HVProcessURLFTP list" } # now as a directory set list [ftp::List $ftp $r(path)] ftp::Close $ftp HVSetURL $varname $url {} {} HVSetResult $varname 200 "text/html" HVSetData $varname [HVFTPHtmlList $r(authority) $r(path) $list] {} set var(delete) 0 HVParse $varname } else { HVError $varname "[msgcat::mc {Unable to open file}] $r(path)" return } } } } proc HVProcessURLHTTP {varname url query rr sync} { upvar #0 $varname var global $varname upvar $rr r global ds9 global debug if {$debug(tcl,hv)} { puts stderr "HVProcessURLHTTP" } # stop any refresh if {[info exists ${varname}(refresh,id)]} { if {$var(refresh,id)>0} { after cancel $var(refresh,id) } } # do we already have it in cache? if {[info exists ${varname}(cache,file,$url,$query)]} { # has it expired? if {($var(cache,expire,$url,$query) == 0) || ($var(cache,expire,$url,$query) > [clock seconds])} { # just in case if {[file exists $var(cache,file,$url,$query)]} { # ok, to it if {$debug(tcl,hv)} { puts stderr "HVProcessURLHTTP found $url at $var(cache,file,$url,$query)" } HVSetURL $varname $url $query $r(fragment) set var(delete) 0 HVSetResult $varname 200 $var(cache,mime,$url,$query) HVSetData $varname {} $var(cache,file,$url,$query) HVParse $varname return } } # expired or invalid, clean up if {$debug(tcl,hv)} { puts stderr "HVProcessURLHTTP expired or invalid $var(cache,file,$url,$query)" } catch {file delete $var(cache,file,$url,$query)} unset var(cache,file,$url,$query) unset var(cache,mime,$url,$query) unset var(cache,expire,$url,$query) } HVSetURL $varname $url $query $r(fragment) HVSetResult $varname {} {} HVSetData $varname {} {} set var(ch) {} # do we have html? if so, use a var ParseURL $url r # geturl as file set var(fn) [tmpnam {.http}] if {[catch {open "$var(fn)" w} ${varname}(ch)]} { HVError $varname "[msgcat::mc {Unable to open file}] $var(fn)" return } # disable timeouts for analysis global ihttp set timeout $ihttp(timeout) if {$var(analysis)} { set timeout 0 } if {$sync} { if {![catch {set var(token) [http::geturl $url \ -query "$query" \ -timeout $timeout \ -headers "[HVHTTPHeader $varname]" \ -progress [list HVProgress $varname] \ -binary 1 \ -channel $var(ch)] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 set var(delete) 1 HVProcessURLHTTPFinish $varname $var(token) } else { catch {close $var(ch)} HVError $varname "[msgcat::mc {Unable to locate URL}] $url" } } else { if {![catch {set var(token) [http::geturl $url \ -query "$query" \ -timeout $timeout \ -headers "[HVHTTPHeader $varname]" \ -progress [list HVProgress $varname] \ -binary 1 \ -channel $var(ch) \ -command [list HVProcessURLHTTPFinish $varname]] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 set var(delete) 1 } else { catch {close $var(ch)} HVError $varname "[msgcat::mc {Unable to locate URL}] $url" } } } proc HVProcessURLHTTPFinish {varname token} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVProcessURLHTTPFinish" } catch {close $var(ch)} if {!($var(active))} { HVCancelled $varname return } upvar #0 $token t # Code set var(code) [http::ncode $token] # Meta set var(meta) $t(meta) # Cache defaults set var(cache) 1 set var(cache,images) 1 set var(expire) 0 HVParseMeta $varname # Log it HTTPLog $token # Result? switch -- $var(code) { 200 - 203 - 404 - 503 { if {$var(cache)} { if {$debug(tcl,hv)} { puts stderr "HVProcessURLHTTPFinish cacheing:$var(url),$var(query):$var(fn)" } set url $var(url) set query $var(query) set var(cache,file,$url,$query) $var(fn) set var(cache,mime,$url,$query) $var(mime) set var(cache,expire,$url,$query) $var(expire) set var(delete) 0 } HVParse $varname HVDone $varname } 201 - 300 - 301 - 302 - 303 - 305 - 307 { foreach {name value} $var(meta) { if {[regexp -nocase ^location$ $name]} { global debug if {$debug(tcl,hv)} { puts stderr "HVProcessURLHTTPFinish redirect $var(code) to $value" } # clean up and resubmit http::cleanup $token unset var(token) HVClearTmpFile $varname if {[info exists var(widget)]} { HVLoadURL $varname [$var(widget) resolve $value] {} $var(sync) } else { HVLoadURL $varname $value {} $var(sync) } } } } default {HVError $varname "HTTP [msgcat::mc {Error}] $var(code)"} } } proc HVHTTPHeader {varname} { upvar #0 $varname var global $varname set domain {} ParseURL $var(url) rr regexp {[^:]*} $rr(authority) domain set result "[ProxyHTTP]" foreach cc $var(cookies) { if {$domain == [lindex $cc 2]} { append result " Cookie [lindex $cc 0]=[lindex $cc 3]" } } global debug if {$debug(tcl,hv)} { puts stderr "HVHTTPHeader:$result" } return $result } proc HVParseMeta {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVParseMeta: $var(meta)" } foreach {name value} $var(meta) { switch -- [string tolower $name] { content-type { regexp -nocase {([^;]*);?(.*)} $value foo \ ${varname}(mime) ${varname}(mime,param) set var(mime) [string tolower $var(mime)] } content-length {} content-encoding { switch -- [string tolower $value] { gzip - x-gzip {set var(encoding) gzip} bzip2 {set var(encoding) bzip2} compress - Z {set var(encoding) compress} pack - z {set var(encoding) pack} default {} } } content-transfer-encoding { switch -- [string tolower $value] { binary - base64 {set var(transfer) [string tolower $value]} default {} } } refresh { set f [split $value \;] set var(refresh,time) [lindex $f 0] set var(refresh,url) [string range [lindex $f 1] 4 end] if {$var(refresh,url) != {} & $var(refresh,time) != {}} { set var(refresh,id) [after [expr $var(refresh,time)*1000] "HVLoadURL $varname \{$var(refresh,url)\} {} $var(sync)"] } else { set var(refresh,id) 0 } } expires { if {[catch {set ss [clock scan $value]}]} { set var(cache) 0 } else { set var(cache) 1 set var(expire) $ss } } cache-control { foreach cc [split $value {,}] { foreach {nn vv} [split $cc {=}] { switch $nn { public {set var(cache) 1} private {set var(cache) 1} no-cache {set var(cache) 0} no-store {set var(cache) 1} s-maxage - min-fresh - max-age { set var(cache) 1 set var(expire) \ [expr [file mtime $var(fn)]+$vv] } max-stale {} no-transform {} only-if-cached {} cache-extension {} must-revalidate {} proxy-revalidate {} } } } } pragma { switch $value { no-cache {set var(cache) 0} } } last-modified { } if-none-match { } set-cookie { set cname {} set cpath {/} set cdomain {} set cvalue {} ParseURL $var(url) rr regexp {[^:]*} $rr(authority) cdomain foreach cc [split $value {;}] { foreach {nn vv} [split $cc {=}] { switch [string tolower [string trim $nn]] { httponly {} expires {} path {set cpath $vv} domain {set cdomain $vv} {} {append cvalue {=}} default { if {$nn != {}} { set cname $nn set cvalue $vv } } } } } if {$cname != {}} { lappend ${varname}(cookies) [list $cname $cpath $cdomain $cvalue] } } } } if {$debug(tcl,hv)} { puts stderr "HVParseMeta Content-Type:$var(mime):$var(mime,param):" puts stderr "HVParseMeta Content-Encoding:$var(encoding):" puts stderr "HVParseMeta Content-Transfer-Encoding:$var(transfer):" puts stderr "HVParseMeta Refresh:$var(refresh,time):$var(refresh,url):" puts stderr "HVParseMeta Cache:$var(cache)" puts stderr "HVParseMeta Expires:$var(expire)" puts stderr "HVParseMeta Cookies:$var(cookies)" } } proc HVLoadFile {varname path} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVLoadFile $path" } HVSetResult $varname 200 {} HVSetData $varname {} $path # content-encoding switch -- [string tolower [file extension $path]] { .gz { set path [file rootname $path] set var(encoding) gzip } .bz2 { set path [file rootname $path] set var(encoding) bzip2 } .Z { set path [file rootname $path] set var(encoding) compress } .z { set path [file rootname $path] set var(encoding) pack } } switch -- [string tolower [file extension $path]] { .html - .htm {set var(mime) "text/html"} .gif {set var(mime) "image/gif"} .jpeg - .jpg {set var(mime) "image/jpeg"} .tiff - .tif {set var(mime) "image/tiff"} .png {set var(mime) "image/png"} .fits - .fit - .fts {set var(mime) "image/fits"} .ftz - .fits.gz - .fgz { set var(mime) "image/fits" set var(encoding) "gzip" } .text - .txt {set var(mime) "text/plain"} .multi { set var(mime) "multipart/mixed" set var(xpa,target) "*:*" if {[file exists "$path"]} { set ch [open "$path" r] if {[gets $ch line] >= 0} { set var(mime,param) "Content-Type: multipart/mixed; Boundary=[string range $line 2 end]" } catch {close $ch} } } .sao {set var(mime) "text/x-cmap-sao"} default { switch -- $var(encoding) { gzip - bzip2 - compress - pack {set var(mime) "application/octet-stream"} default {set var(mime) "text/plain"} } } } HVParse $varname } proc HVParse {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVParse" } switch -- $var(mime) { "multipart/alternative" - "multipart/parallel" - "multipart/digest" - "multipart/related" - "multipart/signed" - "multipart/encrypted" - "multipart/report" {} "multipart/x-mixed-replace" - "multipart/mixed" { HVParseMulti $varname HVClearCache $varname } default {HVParseSingle $varname} } if {$var(analysis)} { AnalysisTaskEnd $var(analysis,which) $var(analysis,i) HVSetAnalysis $varname 0 {} 0 } } proc HVParseMulti {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVParseMulti" } # do it now, to be restored later if {[info exists var(index)]} { incr ${varname}(index) set var(index,$var(index)) [list $var(url) $var(query)] set index $var(index) } set fn $var(fn) set del $var(delete) if {[file exists "$var(fn)"]} { if {[catch {open "$var(fn)" r} ch]} { HVError $varname "[msgcat::mc {Unable to open file}] $var(fn)" return } } set boundary [HVParseMimeParam $varname "boundary"] if {[string equal "$boundary" {}]} { HVError $varname [msgcat::mc {Invalid formated multipart/mixed mime type message}] return } set state 1 set var(ch) {} HVSetResult $varname 200 {} HVSetData $varname {} {} while {[gets $ch line] >= 0} { if {$debug(tcl,hv)} { puts stderr "HVParseMulti $state:$line" } switch -- $state { 1 { # boundary if {[string equal "--$boundary" $line]} { set state 2 } } 2 { # header if {[string length $line] == 0} { HVParseMeta $varname # save to a file set var(fn) [tmpnam {.http}] set var(delete) 1 if {[catch {open "$var(fn)" w} ${varname}(ch)]} { HVError $varname "[msgcat::mc {Unable to open file}] $var(fn)" return } switch $var(transfer) { binary - base64 { fconfigure $var(ch) \ -translation binary -encoding binary } } set state 3 } else { if {[regexp -nocase {^([^:]+):(.+)$} $line x key value]} { lappend var(meta) $key [string trim $value] } } } 3 { # body if {[string equal "--$boundary" $line]} { catch {close $var(ch)} HVParseSingle $varname HVClearTmpFile $varname set var(ch) {} HVSetResult $varname 200 {} # we want to preserve var(text) # HVSetData $varname {} {} set var(data) {} set var(fn) {} set state 2 } elseif {[string equal "--$boundary--" $line]} { catch {close $var(ch)} catch {close $ch} HVParseSingle $varname HVClearTmpFile $varname # reset file values set var(fn) $fn set var(delete) $del if {[info exists var(index)]} { # reset index set var(index) $index HVClearIndex $varname $index } return } else { switch $var(transfer) { binary {puts -nonewline $var(ch) $line} base64 { puts -nonewline $var(ch) [base64::decode $line] } default {puts $var(ch) $line} } } } } } # clean up catch {close $ch} set var(fn) $fn } proc HVParseSingle {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVParseSingle $var(url)" } switch -- $var(mime) { "text/html" - "text/plain" - "application/octet-stream" { # its never fails, someone can't get there mime types correct. # Override the mime type based on path ParseURL $var(url) r set path [file tail $r(path)] # set content-encoding switch -- [file extension $path] { .gz { set path [file rootname $path] set var(encoding) gzip } .bz2 { set path [file rootname $path] set var(encoding) bzip2 } .Z { set path [file rootname $path] set var(encoding) compress } .z { set path [file rootname $path] set var(encoding) pack } } # set Content-Type switch -- [file extension $path] { .html - .htm {set var(mime) "text/html"} .gif {set var(mime) "image/gif"} .jpeg - .jpg {set var(mime) "image/jpeg"} .tiff - .tif {set var(mime) "image/tiff"} .png {set var(mime) "image/png"} .fits - .fit - .fts {set var(mime) "image/fits"} .ftz - .fgz { set var(mime) "image/fits" set var(encoding) "gzip" } .xml - .vot - .votable {set var(mime) "text/xml"} .text - .txt {set var(mime) "text/plain"} .sao {set var(mime) "text/x-cmap-sao"} } } } switch -- $var(mime) { "text/html" {HVParseHTML $varname} "text/plain" {HVParseText $varname} "application/octet-stream" {HVParseSave $varname} "image/gif" - "image/jpeg" - "image/tiff" - "image/png" {HVParseImg $varname} "image/fits" - "application/fits" {HVParseFITS $varname} "application/fits-image" - "application/fits-table" - "application/fits-group" {HVParseFITS $varname} "image/x-fits" - "binary/x-fits" - "application/x-fits" {HVParseFITS $varname} "image/fits-hcompress" - "image/x-fits-h" {HVParseFITS $varname} "image/x-gfits" - "binary/x-gfits" - "image/gz-fits" - "application/x-gzip" - "display/gz-fits" { set var(encoding) gzip HVParseFITS $varname } "image/bz2-fits" - "display/bz2-fits" { set var(encoding) bzip2 HVParseFITS $varname } "image/x-cfits" - "binary/x-cfits" { set var(encoding) compress HVParseFITS $varname } "image/x-zfits" - "binary/x-zfits" { set var(encoding) pack HVParseFITS $varname } "text/xml" - "application/xml" - "application/x-votable+xml" {HVParseVOT $varname} "x-xpa/xpaget" {} "x-xpa/xpaset" {HVParseXPASet $varname} "x-xpa/xpainfo" {} "x-xpa/xpaaccess" {} "text/x-cmap-sao" {HVParseColormap $varname} default {HVParseSave $varname} } } proc HVParseText {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVParseText" } if {[string length $var(data)] == 0} { if {[file exists "$var(fn)"]} { if {[catch {open "$var(fn)" r} ch]} { HVError $varname "[msgcat::mc {Unable to open file}] $var(fn)" return } set var(data) [read $ch] close $ch } } if {$var(analysis)} { if {$debug(tcl,hv)} { puts stderr "HVParseText Analysis" } AnalysisProcessGetURL $var(analysis,which) $var(analysis,i) $var(data) } else { append var(text) $var(data) set var(data) \ "\n\n$var(text)\n\n" HVSetResult $varname 200 "text/html" HVParseHTML $varname } HVClearCache $varname } proc HVParseHTML {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVParseHTML" } if {[string length $var(data)] == 0} { if {[file exists "$var(fn)"]} { if {[catch {open "$var(fn)" r} ch]} { HVError $varname "[msgcat::mc {Unable to open file}] $var(fn)" return } set var(data) [read $ch] close $ch } } # figure out the base # we don't want any query or fragments ParseURL $var(url) r set base {} # scheme switch $r(scheme) { http {append base "$r(scheme)://"} ftp {} file {} } # authority if {[string length $r(authority)] != 0} { append base "$r(authority)" } # path if {[string length $r(path)] != 0} { append base "$r(path)" } else { append base "/" } # query if {[string length $r(query)] != 0} { append base "?$r(query)" } # spaces? # regsub { } $base {\ } base $var(widget) config -base $base if {$debug(tcl,hv)} { DumpURL r puts stderr "HVParseHTML base [$var(widget) cget -base]" } # we have a valid html $var(widget) clear # fix forms with no action HVFixHTMLForm $varname # and now, parse it $var(widget) parse $var(data) HVGotoHTML $varname } proc HVParseImg {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVParseImg $var(url)" } if {$var(save)} { switch -- $var(mime) { "image/gif" {set fn [SaveFileDialog giffbox]} "image/jpeg" {set fn [SaveFileDialog jpegfbox]} "image/tiff" {set fn [SaveFileDialog tifffbox]} "image/png" {set fn [SaveFileDialog pngfbox]} } if {[string length "$fn"] != 0} { if {![catch {file rename -force "$var(fn)" "$fn"}]} { set var(fn) "$fn" set var(delete) 0 } } } switch -- $var(frame) { new {MultiLoadBase} current {} } ImportPhotoFile $var(fn) {} HVClearTmpFile $varname HVClearAll $varname HVUpdateDialog $varname } proc HVParseFITS {varname} { upvar #0 $varname var global $varname global ds9 global debug if {$var(save)} { switch -- $var(encoding) { gzip {FileLast savefitsfbox "ds9.fits.gz"} bzip2 {FileLast savefitsfbox "ds9.fits.bz2"} compress {FileLast savefitsfbox "ds9.fits.Z"} pack {FileLast savefitsfbox "ds9.fits.z"} default {FileLast savefitsfbox "ds9.fits"} } set fn [SaveFileDialog savefitsfbox] if {[string length "$fn"] != 0} { if {![catch {file rename -force "$var(fn)" "$fn"}]} { set var(fn) "$fn" set var(delete) 0 } } } switch -- $var(frame) { new {MultiLoadBase} current {} } StartLoad global loadParam set loadParam(load,type) allocgz set loadParam(load,layer) {} set loadParam(file,type) fits set loadParam(file,mode) {} set loadParam(file,name) "$var(fn)" set loadParam(file,fn) $loadParam(file,name) # may have to convert the file, based on content-encoding switch -- "$var(encoding)" { bzip2 { catch {set ch [open "| bunzip2 < $var(fn) " r]} set loadParam(load,type) channel set loadParam(channel,name) $ch } compress { catch {set ch [open "| uncompress < $var(fn) " r]} set loadParam(load,type) channel set loadParam(channel,name) $ch } pack { catch {set ch [open "| pcat $var(fn) " r]} set loadParam(load,type) channel set loadParam(channel,name) $ch } } ProcessLoad FinishLoad HVClearTmpFile $varname HVClearAll $varname HVUpdateDialog $varname } proc HVParseColormap {varname} { upvar #0 $varname var global $varname global ds9 global debug if {$debug(tcl,hv)} { puts stderr "HVParseColormap" } set fn [HVParseMimeParam $varname "name"] if {$fn == {}} { ParseURL $var(url) r set fn [file tail $r(path)] } if {![catch {file rename -force $var(fn) $ds9(tmpdir)/$fn}]} { LoadColormapFile $ds9(tmpdir)/$fn } HVClearAll $varname HVUpdateDialog $varname } proc HVParseVOT {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVParseVOT" } if {[file exists "$var(fn)"]} { CATVOTFile "$var(fn)" } HVClearTmpFile $varname HVClearAll $varname HVUpdateDialog $varname } proc HVParseSave {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVParseSave" } set fn [HVParseMimeParam $varname "name"] if {$fn == {}} { ParseURL $var(url) r set fn [file tail $r(path)] } FileLast savefitsfbox $fn set fn [SaveFileDialog savefitsfbox] if {[string length "$fn"] != 0} { if {![catch {file rename -force "$var(fn)" "$fn"}]} { set var(delete) 0 } } HVClearAll $varname HVUpdateDialog $varname } proc HVParseXPASet {varname} { upvar #0 $varname var global $varname global ds9 global debug if {$debug(tcl,hv)} { puts stderr "HVParseXPASet: [HVParseMimeParam $varname paramlist]" } if {[info exists var(xpa,target)]} { set target $var(xpa,target) } else { set target [HVParseMimeParam $varname target] } if {$target == "$ds9(title)" || $target == "DS9:*" || $target == "DS9:$ds9(title)" || $target == "*:$ds9(title)" || $target == "*:*" || $target == [XPAMethod]} { InitError hv CommSet $var(fn) [HVParseMimeParam $varname paramlist] 1 } else { HVError $varname "[msgcat::mc {Unable to match target with XPA Mime request}] $url" } } proc HVGotoHTML {varname} { upvar #0 $varname var global $varname incr ${varname}(index) set var(index,$var(index)) [list $var(url) $var(query)] global debug if {$debug(tcl,hv)} { puts stderr "HVGotoHTML $var(index) |$var(url)|$var(query)|$var(fragment)|" } if {[string length $var(fragment)] != 0} { if {$debug(tcl,idletasks)} { puts stderr "HVGotoHTML" } update idletasks $var(widget) yview $var(fragment) } else { $var(widget) yview moveto 0 } HVUpdateDialog $varname } proc HVClearCache {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVClearCache $varname" } foreach x [array names $varname "cache,file,*"] { catch {file delete $var($x)} } foreach x [array names $varname "cache,*"] { unset ${varname}($x) } } proc HVClearIndex {varname n} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVClearIndex $varname $n" } foreach x [array names $varname "index,*"] { set f [split $x ,] if {[lindex $f 1] > $n} { unset ${varname}($x) } } set var(index) $n } proc HVClearTmpFile {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVClearTmpFile" } if {$var(delete) && [string length "$var(fn)"] != 0} { if {[file exists "$var(fn)"]} { if {$debug(tcl,hv)} { puts stderr "HVClearTmpFile delete $var(fn)" } file delete "$var(fn)" } set var(fn) {} set var(delete) 0 } } proc HVUpdateDialog {varname} { upvar #0 $varname var global $varname # in case we've set the cursor $var(widget) configure -cursor {} global debug if {$debug(tcl,hv)} { puts stderr "HVUpdateDialog\n" } set id $var(index) set id [incr id -1] if {[info exists ${varname}(index,$id)]} { $var(mb).view entryconfig [msgcat::mc {Back}] -state normal } else { $var(mb).view entryconfig [msgcat::mc {Back}] -state disabled } set id $var(index) set id [incr id 1] if {[info exists ${varname}(index,$id)]} { $var(mb).view entryconfig [msgcat::mc {Forward}] -state normal } else { $var(mb).view entryconfig [msgcat::mc {Forward}] -state disabled } } proc HVRefresh {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVRefresh" } set var(delete) 0 HVParse $varname } proc HVProgress {varname token totalsize currentsize} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVProgress:$varname" } if {$totalsize != 0} { HVStatus $varname "$currentsize bytes of $totalsize bytes [expr int(double($currentsize)/$totalsize*100)]%" } else { HVStatus $varname "$currentsize bytes" } } proc HVFTPHtmlList {host path list} { global debug if {$debug(tcl,hv)} { puts stderr "HVFTPHtmlList $host $path" } if {[string range $path end end] != "/"} { append path {/} } set html {} append html "\n" append html "\n" append html "Index of $path on $host\n" append html "\n" append html "\n" append html "

Index on $path on $host

\n" append html "
\n" append html "
\n"
    foreach l $list {
	switch -- [llength $l] {
	    8 {set offset 4}
	    9 {set offset 5}
	    10 {set offset 4}
	    11 {set offset 5}
	    default {set offset 5}
	}

	set ii [lindex $l [expr $offset+3]]
	switch -- [string range $l 0 0] {
	    d {
		set new "$ii"
	    }
	    l {
		set new "$ii"
	    }
	    default {
		set new "$ii"
	    }
	}

	regsub $ii $l $new l
	append html "$l\n"
    }
    append html "
\n" append html "\n" append html "\n" return $html } proc HVFileHtmlList {path list} { global debug if {$debug(tcl,hv)} { puts stderr "HVFileHtmlList $path" } if {[string range $path end end] != "/"} { append path {/} } set html {} append html "\n" append html "\n" append html "Index of $path\n" append html "\n" append html "\n" append html "

Index on $path

\n" append html "
\n" append html "
\n"
    foreach l $list {
	switch -- [llength $l] {
	    8 {set offset 4}
	    9 {set offset 5}
	    10 {set offset 4}
	    11 {set offset 5}
	    default {set offset 5}
	}

	set ii [lindex $l [expr $offset+3]]
	switch -- [string range $l 0 0] {
	    d {
		set new "$ii"
	    }
	    l {
		set new "$ii"
	    }
	    default {
		set new "$ii"
	    }
	}

	regsub $ii $l $new l
	append html "$l\n"
    }
    append html "
\n" append html "\n" append html "\n" return $html } proc HVDirList {path} { global debug if {$debug(tcl,hv)} { puts stderr "HVDirList $path" } return [split [exec ls -l $path] \n] } proc HVSetURL {varname url query fragment} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVSetURL $url $query $fragment" } set var(url) $url set var(query) $query set var(fragment) $fragment } proc HVSetResult {varname code mime} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVSetResult $code $mime" } set var(code) $code set var(meta) {} set var(mime) $mime set var(mime,param) {} set var(cache) 0 set var(cache,images) 1 set var(expire) 0 set var(encoding) {} set var(transfer) {} set var(refresh,time) 0 set var(refresh,url) {} set var(refresh,id) 0 } proc HVSetData {varname data fn} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVSetData $fn" } set var(data) $data set var(text) {} set var(fn) "$fn" } proc HVSetAnalysis {varname aa which ii} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVSetAnalysis" } set var(analysis) $aa set var(analysis,which) $which set var(analysis,i) $ii } proc HVClearAll {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVClearAll" } HVSetURL $varname {} {} {} HVSetResult $varname {} {} HVSetData $varname {} {} HVSetAnalysis $varname 0 {} 0 } # CallBacks proc HVImageCB {varname args} { upvar #0 $varname var global $varname global ds9 global debug if {$debug(tcl,hv)} { puts stderr "HVImageCB $varname args: $args" } set url [lindex $args 0] if {$debug(tcl,hv)} { puts stderr "HVImageCB url: $url" } # do we have anything? if {[string length $url] == 0} { return } # do we have a width/height? set aa [lindex $args 3] set width [HVattrs width $aa 0] set height [HVattrs height $aa 0] set src [HVattrs src $aa 0] # check for percent (100%) in width/height if {![string is integer $width]} { set width 0 } if {![string is integer $height]} { set height 0 } if {$debug(tcl,hv)} { puts stderr "HVImageCB src: $width $height $src" } # we have a problem in that htmlwidget will not properly resolve a windows # file name, there for we may have a bad file name url # double check with the src attribute global tcl_platform switch $tcl_platform(platform) { unix {} windows { ParseURL $url r switch -- $r(scheme) { {} - file { if {![file exists $url]} { # bad, try src if {[file exists $src]} { set url $src } } } } } } set img [HVImageURL $varname $url $width $height] if {[string length $img] != 0} { return $img } else { if {$debug(tcl,hv)} { puts stderr "HVImageCB FAIL $url" } return $var(images,gray) } } proc HVImageURL {varname url width height} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVImageURL $varname $url $width $height" } # do we already have the image? if {[info exists ${varname}(images,$url)]} { if {$debug(tcl,hv)} { puts stderr "HVImageURL found image a $url" } return $var(images,$url) } ParseURL $url r set fn {} switch -- $r(scheme) { {} - file { if {[file exists $r(path)]} { # can't use -file for zvfs # catch {image create photo -file $r(path)} img set ch [open $r(path) r] fconfigure $ch -translation binary -encoding binary set dd [read $ch] close $ch unset ch catch {image create photo -data "$dd"} img unset dd } } ftp { set fn [tmpnam [file extension $r(path)]] set ftp [ftp::Open $r(authority) "ftp" "-ds9@" -mode passive] if {$ftp > -1} { set ftp::VERBOSE $debug(tcl,ftp) set "ftp::ftp${ftp}(Output)" FTPLog ftp::Type $ftp binary if {[ftp::Get $ftp $r(path) "$fn"]} { ftp::Close $ftp if {[file size "$fn"] == 0} { catch {file delete -force "$fn"} return {} } if {[catch {image create photo -file "$fn"} img]} { catch {file delete -force "$fn"} return {} } } } } http { set ch {} set fn [tmpnam [file extension $r(path)]] for {set ii 5} {$ii>0} {incr ii -1} { if {[catch {open "$fn" w} ch]} { HVError $varname "[msgcat::mc {Unable to open file}] $fn" return {} } global ihttp if {[catch {set token \ [http::geturl $url \ -timeout $ihttp(timeout) \ -progress [list HVProgress $varname] \ -channel $ch \ -binary 1 \ -headers "[HVHTTPHeader $varname]" \ ]}]} { # if there is a problem, just bail set ii 0 continue } # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} catch {close $ch} upvar #0 $token t set code [http::ncode $token] set meta $t(meta) # result? switch -- $code { 200 - 203 - 503 {set ii 0} 201 - 300 - 301 - 302 - 303 - 305 - 307 { foreach {name value} $meta { if {[regexp -nocase ^location$ $name]} { global debug if {$debug(tcl,hv)} { puts stderr "HVImageURL redirect $code to $value" } # clean up and resubmit set url $value http::cleanup $token catch {file delete -force "$fn"} } } } default { # in general, we don't want to know about this if {$debug(tcl,hv)} { puts stderr "HVImageURL HTTP Error: $code" } set ii 0 } } } catch {http::cleanup $token} if {[file size "$fn"] == 0} { catch {file delete -force "$fn"} return {} } if {[catch {image create photo -file "$fn"} img]} { catch {file delete -force "$fn"} return {} } } } # do we have an img? if {![info exists img]} { return {} } if {$debug(tcl,hv)} { puts stderr "HVImageURL got image $img" } # adjust image size if needed if {$width != 0 || $height != 0} { set iw [image width $img] set ih [image height $img] set doit 1 # check for one dimension of 0. calculate to maintain aspect ratio if {$width == 0} { set width [expr $iw*$height/$ih] # see if we have a bad resample dimension set wf [expr double($iw)*$height/$ih] if {$width != $wf} { if {$debug(tcl,hv)} { puts stderr "HVImageURL abort resample image $img width $wf" } set doit 0 } } if {$height == 0} { set height [expr $ih*$width/$iw] # see if we have a bad resample dimension set hf [expr double($ih)*$width/$iw] if {$height != $hf} { if {$debug(tcl,hv)} { puts stderr \ "HVImageURL abort resample image $img height $hf" } set doit 0 } } # check to resample if {$doit && ($width != $iw || $height != $ih)} { if {$debug(tcl,hv)} { puts stderr "HVImageURL resample image $iw->$width $ih->$height" } set img2 \ [image create photo -width $width -height $height] if {[catch {blt::winop image resample $img $img2 box} ]} { # just use existing img if {$debug(tcl,hv)} { puts stderr "HVImageURL error resample image $img" } } else { set tmp $img set img $img2 catch {image delete $tmp} } } } # delete any tmp files if {"$fn" != {}} { catch {file delete -force "$fn"} } if {$var(cache,images)} { set var(images,$url) $img } return $img } proc HVFontCB {varname sz args} { upvar #0 $varname var global $varname global ds9 global debug if {$debug(tcl,hv)} { puts stderr "HVFontCB $varname $sz $args" } set family $var(font) set size $var(font,size) set weight $var(font,weight) set slant $var(font,slant) global ds9 foreach ff [concat [lindex $args 0]] { switch -- $ff { fixed { set family $ds9(courier) set sz [expr $sz-1] } bold {set weight bold} italic {set slant italic} } } switch -- $sz { 0 {incr size -3} 1 {incr size -2} 2 {incr size -1} 3 {} 4 {incr size 6} 5 {incr size 12} 6 {incr size 24} 7 {incr size 36} } if {$debug(tcl,hv)} { puts stderr "HVFontCB \{$family\} $size $weight $slant" } return "\{$family\} $size $weight $slant" } proc HVNoScriptCB {varname n tag args} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { # puts stderr "HVNoScriptCB $varname $n $tag $args" } } proc HVScriptCB {varname args} { upvar #0 $varname var global debug if {$debug(tcl,hv)} { # puts stderr "HVScriptCB $varname $args" } } proc HVFrameCB {varname args} { upvar #0 $varname var global $varname if {$debug(tcl,hv)} { puts stderr "HVFrameCB $varname $args" } } proc HVAppletCB {varname w args} { upvar #0 $varname var global $varname global debug if {$debug(tcl,hv)} { puts stderr "HVAppletCB $varname $w $args" } } proc HVParseMimeParam {varname key} { upvar #0 $varname var global $varname foreach {pp} [split $var(mime,param) {;}] { set id [string first {=} $pp] set name [string trim [string range $pp 0 [expr $id-1]]] set value [string trim [string range $pp [expr $id+1] end]] if {[string equal -nocase $name $key]} { return [string trim $value {"'}] } } return {} } saods9/ds9/library/iexam.tcl000644 000765 000000 00000007177 12705445647 016370 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc IExamDef {} { global iexam set iexam(button) 0 set iexam(key) 0 set iexam(any) 0 set iexam(frame) {} set iexam(x) {} set iexam(y) {} set iexam(event) {} set iexam(mode) {} } proc IExamButton {which xx yy} { global iexam global imarker if {$iexam(button) || $iexam(any)} { # we need this cause MarkerMotion maybe called, # and we don't want it set imarker(motion) none set imarker(handle) -1 set iexam(frame) $which set iexam(x) $xx set iexam(y) $yy if {$iexam(any)} { set iexam(event) {<1>} } set iexam(button) 0 set iexam(any) 0 } } proc IExamKey {which K xx yy} { global iexam if {$iexam(key) || $iexam(any)} { set iexam(frame) $which set iexam(x) $xx set iexam(y) $yy set iexam(event) $K set iexam(key) 0 set iexam(any) 0 } } proc ProcessSendIExamCmd {proc id param} { global iexam global icursor global current set iexam(frame) {} set iexam(x) {} set iexam(y) {} set iexam(event) {} set iexam(mode) $current(mode) set current(mode) iexam set iexam(button) 0 set iexam(key) 0 set iexam(any) 0 # turn on blinking cursor set icursor(timer) 1 CursorTimer switch -- [string tolower [lindex $param 0]] { button { set iexam(button) 1 set varname {iexam(button)} set param [join [lreplace $param 0 0]] } key { set iexam(key) 1 set varname {iexam(key)} set param [join [lreplace $param 0 0]] } any { set iexam(any) 1 set varname {iexam(any)} set param [join [lreplace $param 0 0]] } default { set iexam(button) 1 set varname {iexam(button)} } } switch -- [string tolower [lindex $param 0]] { value - data { vwait $varname set w [lindex $param 1] set h [lindex $param 2] if {$w == {}} { set w 1 } if {$h == {}} { set h 1 } $proc $id "$iexam(event) [$iexam(frame) get data canvas $iexam(x) $iexam(y) $w $h]\n" } coordinate { set sys [lindex $param 1] set sky [lindex $param 2] set skyformat [lindex $param 3] switch -- $skyformat { {} {set skyformat degrees} } switch -- $sky { {} {set sky fk5} } switch -- $sys { {} {set sys physical} fk4 - fk5 - icrs - galactic - ecliptic {set sky $sys; set sys wcs} } vwait $varname $proc $id "$iexam(event) [$iexam(frame) get coordinates $iexam(x) $iexam(y) $sys $sky $skyformat]\n" } {} { vwait $varname $proc $id "$iexam(event) [$iexam(frame) get coordinates $iexam(x) $iexam(y) image fk5 degrees]\n" } default { vwait $varname set cmd $param # $width,$height,$depth,$bitpix ParseXYBitpixMacro cmd $iexam(frame) # $filename[$regions] ParseFilenameRegionMacro cmd $iexam(frame) # $filename ParseFilenameMacro cmd $iexam(frame) # $regions ParseRegionMacro cmd $iexam(frame) # $env ParseEnvMacro cmd # $pan ParsePanMacro cmd $iexam(frame) # $value ParseValueMacro cmd $iexam(frame) $iexam(x) $iexam(y) # $x,$y ParseXYMacro cmd $iexam(frame) $iexam(x) $iexam(y) # $z ParseZMacro cmd $iexam(frame) $proc $id "$iexam(event) $cmd\n" } } # turn off blinking cursor set icursor(timer) 0 set current(mode) $iexam(mode) set iexam(button) 0 set iexam(key) 0 set iexam(frame) {} set iexam(x) {} set iexam(y) {} set iexam(event) {} set iexam(mode) {} } saods9/ds9/library/iis.tcl000644 000765 000000 00000017102 12705445647 016036 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc IISDef {} { global iis # all internal set iis(state) 0 set iis(width) 512 set iis(height) 512 set iis(x) -1 set iis(y) -1 set iis(frame) {} set iis(ififo) "/dev/imt1i" set iis(ofifo) "/dev/imt1o" set iis(port) 5137 set iis(unix) "/tmp/.IMT%d" } proc IISInit {} { global iis global debug if {$debug(iis)} { puts stderr "IISInit:" } iis open $iis(ififo) $iis(ofifo) $iis(port) $iis(unix) } proc IISClose {} { global debug if {$debug(iis)} { puts stderr "IISClose:" } iis close } proc IISDebug {} { global debug iis debug $debug(iis) } # Callbacks proc IISInitializeCmd {w h} { global iis global debug if {$debug(iis)} { puts stderr "IISInitializeCmd: $w $h" } # default frame size set iis(width) $w set iis(height) $h } proc IISInitFrameCmd {which} { global debug if {$debug(iis)} { puts stderr "IISInitFrameCmd: $which" } } proc IISSetDisplayFrameCmd {which w h} { global iis global debug if {$debug(iis)} { puts stderr "IISSetDisplayFrameCmd: $which $w $h" } IISGotoFrame $which IISLoadFrame $which } proc IISSetRefFrameCmd {which} { global iis global ds9 global debug if {$debug(iis)} { puts stderr "IISSetRefFrameCmd: $which" } if {[lsearch $ds9(frames) Frame$which] == -1} { return {[NOSUCHFRAME]} } if {[Frame$which has iis]} { return {} } set filename [Frame$which get iis file name $iis(x) $iis(y)] if {![string equal [string index $filename 0] "/"] } { set filename [file join [pwd] $filename] } return "$filename 1. 0. 0. 1. 0. 0. 1. 32767. 1." } proc IISEraseFrameCmd {which} { global debug if {$debug(iis)} { puts stderr "IISEraseFrameCmd: $which" } Frame$which iis erase IISResetTimer $which } proc IISMessageCmd {message} { global current global debug if {$debug(iis)} { puts stderr "IISMessageCmd: $message" } $current(frame) iis message "\"$message\"" RefreshInfoBox $current(frame) } proc IISWritePixelsCmd {which ptr x y dx dy} { global debug if {$debug(iis)} { # puts stderr "IISWritePixelsCmd: $which $x $y $dx $dy" } Frame$which iis set $ptr $x $y $dx $dy IISResetTimer $which } proc IISReadPixelsCmd {which ptr x y dx dy} { global current global debug if {$debug(iis)} { # puts stderr "IISReadPixelsCmd: $which $x $y $dx $dy" } if {$which > 0} { Frame$which get iis $ptr $x $y $dx $dy } else { $current(frame) get iis $ptr $x $y $dx $dy } # IISResetTimer $which } proc IISWCSCmd {which a b c d e f z1 z2 zt} { global debug if {$debug(iis)} { puts stderr "IISWCSCmd: $which $a $b $c $d $e $f $z1 $z2 $zt" } # if there is a change in config, we are not told until now if {$which > 0} { IISLoadFrame $which Frame$which iis wcs $a $b $c $d $e $f $z1 $z2 $zt } } proc IISSetCursorPosCmd {x y} { global current global debug if {$debug(iis)} { puts stderr "***IISSetCursorPosCmd: $x $y" } $current(frame) iis cursor $x $y image } proc IISGetCursorPosCmd {} { global current global debug if {$debug(iis)} { puts stderr "***IISGetCursorPosCmd:" } if {[$current(frame) has iis]} { # assume frame name 'Framexxx' set num [string range $current(frame) 5 end] return "[$current(frame) get iis cursor] $num" } else { # default to first frame return "1 1 0" } } proc IISCursorModeCmd {state} { global iis global current global icursor global ds9 global debug if {$debug(iis)} { puts stderr "IISCursorModeCmd: $iis(state)=$state $current(frame)=$iis(frame)" } if {$state != $iis(state)} { # iis(frame) may have been deleted if {[lsearch $ds9(frames) $iis(frame)] == -1} { set iis(frame) {} } if {$iis(frame) == {}} { set which $current(frame) } else { set which $iis(frame) } set iis(state) $state $which iis cursor mode $state if {$state} { bind $ds9(canvas) [list IISCursorKey %K %A %x %y] bind $ds9(canvas) {} UnBindEventsFrameKey $which if {$icursor(timer,abort)} { set icursor(timer,abort) 0 set icursor(timer) 1 } else { set icursor(timer) 1 CursorTimer } } else { bind $ds9(canvas) {} bind $ds9(canvas) {ToggleBindEvents} BindEventsFrameKey $which set icursor(timer,abort) 1 set icursor(timer) 0 set iis(frame) [lindex [$ds9(canvas) gettags current] 0] } } } proc IISLoadFrame {which} { global iis global ds9 global debug if {$debug(iis)} { puts stderr "IISLoadFrame: $which" } if {$which > 0} { if {(![Frame$which has iis]) || \ ([Frame$which get fits width] != $iis(width)) || \ ([Frame$which get fits height] != $iis(height))} { StartLoad Frame$which iis new $iis(width) $iis(height) FinishLoad } else { # make sure any previous data is rendered Frame$which update now } } } proc IISGotoFrame {which} { global current global debug if {$debug(iis)} { puts stderr "IISGotoFrame: $which" } if {$which > 0} { if {$current(frame) != "Frame$which"} { CreateGotoFrame $which base } } } proc IISResetTimer {which} { global iis if {![info exists iis(timer$which)]} { after 500 IISTimer $which } set iis(timer$which) 1 } proc IISTimer {which} { global iis if {$iis(timer$which)} { after 500 IISTimer $which set iis(timer$which) 0 } else { if {$which > 0} { Frame$which iis update # re-execute FinishLoad again since we are finally done loading FinishLoad } unset iis(timer$which) } } proc IISCursorKey {sym key xx yy} { global current global iis global ds9 # MacOSX and Ubuntu returns bogus values in xx,yy # calculate our own values set xx [expr {[winfo pointerx $ds9(canvas)] - [winfo rootx $ds9(canvas)]}] set yy [expr {[winfo pointery $ds9(canvas)] - [winfo rooty $ds9(canvas)]}] global debug if {$debug(iis)} { puts stderr "IISCursorKey: $sym $key $xx $yy" } set which [lindex [$ds9(canvas) gettags current] 0] if {$which == {}} { return } set iis(x) $xx set iis(y) $yy switch -- $sym { Up {$which warp 0 -1} Down {$which warp 0 1} Left {$which warp -1 0} Right {$which warp 1 0} default { if {$key!={}} { set num [string range $which end end] set coord [$which get coordinates $xx $yy physical] if {$coord == {}} { switch -- $key { : - q {set coord "0 0"} default {return} } } $which iis cursor $xx $yy canvas iis retcur [lindex $coord 0] [lindex $coord 1] $key $num } } } } # Cmds proc ProcessIISCmd {varname iname} { upvar $varname var upvar $iname i global current switch -- [string tolower [lindex $var $i]] { filename { if {[string is integer [lindex $var [expr $i+2]]]} { if {$current(frame) != {}} { $current(frame) iis set file name \ [lindex $var [expr $i+1]] [lindex $var [expr $i+2]] } incr i 2 } else { if {$current(frame) != {}} { $current(frame) iis set file name [lindex $var [expr $i+1]] } incr i } } } } proc ProcessSendIISCmd {proc id param} { global current switch -- [string tolower [lindex $param 0]] { filename { if {$current(frame) != {}} { $proc $id \ "[$current(frame) get iis file name [lindex $param 1]]\n" } } } } saods9/ds9/library/ime.tcl000644 000765 000000 00000026256 12705445647 016036 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc IMEDef {} { global iime global ime global pime set ime(task) stats set ime(shape) circle array set pime [array get ime] } proc IMEChangeTask {} { global current if {$current(frame) == {}} { return } if {$current(mode) != {analysis}} { return } UpdateTaskMenu IMEChangeShape } proc IMEChangeShape {} { global ime global ds9 global current switch $ime(task) { stats - hist { switch $ime(shape) { circle - ellipse - box - polygon {} default {set ime(shape) circle} } } radial { switch $ime(shape) { annulus - ellipseannulus - boxannulus {} default {set ime(shape) annulus} } } plot2d {} plot3d { switch $ime(shape) { circle - ellipse - box - polygon - point {} default {set ime(shape) point} } } } foreach ff $ds9(frames) { $ff marker analysis unselect all set coord [$ff get crosshair canvas] set XX [lindex $coord 0] set YY [lindex $coord 1] $ff analysis shape $ime(shape) $XX $YY if {$current(frame) == $ff} { IMEDoTask $current(frame) } } } proc IMEDoTask {which} { global ime if {![$which has fits]} { return } switch $ime(task) { stats {IMEStatsTask $which} hist {IMEHistTask $which} radial {IMERadialTask $which} plot2d {IMEPlot2DTask $which} plot3d {IMEPlot3DTask $which} } } proc IMEKey {which K xx yy} { global ime # always available switch $K { question { IMEHelp return } } if {![$which has fits]} { return } switch $K { a { # FWHM (Aperture Sum) } b { # Box Coords? } c { # Column Cut } d { # remap (Load Display) set ime(task) plot3d IMEKeyTask $which $xx $yy } e { # remap (Contour) } f { # remap (Redraw) } g { # remap (Graphics Cursor) } h { set ime(task) hist IMEKeyTask $which $xx $yy } i { # remap (Image Cursor) } j { # Line Guassian Fit } k { # Col Gaussian Fit } l { # Line Cut } m { set ime(task) stats IMEKeyTask $which $xx $yy } n { # remap (Next Frame) } o { # remap (Overplot) } p { # remap (Prev Frame) } q { # remap (Quit) } r { set ime(task) radial IMEKeyTask $which $xx $yy } s { # Surface Plot } t { # remap (Output Image) } u { # Vector Plot } v { set ime(task) plot2d IMEKeyTask $which $xx $yy } w { # remap (Toggle Logfile) } x { # Print coords/values } y { # remap (Set Origin) } z { # Print value grid } , { # Quick Profile Photometry } . { # Quick Radial Profile Plot and Fit } } } proc IMEKeyTask {which xx yy} { global ime $which crosshair canvas $xx $yy $which analysis shape $ime(shape) $xx $yy IMEDoTask $which UpdateColormapLevelMosaic $which $xx $yy canvas UpdateInfoBox $which $xx $yy canvas UpdatePixelTableDialog $which $xx $yy canvas UpdateGraph $which $xx $yy canvas } proc IMEButton {which xx yy} { global ime global imarker global debug if {$debug(tcl,ime)} { puts stderr "IMEButton $which $xx $yy" } # see if we are on a handle set hh [$which get marker analysis handle $xx $yy] set id [lindex $hh 0] set imarker(handle) [lindex $hh 1] if {$imarker(handle)} { $which marker analysis $id edit begin $imarker(handle) set imarker(motion) beginEdit return } # else, see if we are on a segment of a polygon set hh [$which get marker analysis polygon segment $xx $yy] set id [lindex $hh 0] set segment [lindex $hh 1] if {$segment} { $which marker analysis $id create polygon vertex $segment $xx $yy $which marker analysis $id edit begin $imarker(handle) set imarker(handle) [expr 4+$segment+1] set imarker(motion) beginEdit return } # see if any markers are selected if {[$which get marker analysis select number]>0} { # else, see if we are on a marker if {[$which get marker analysis id $xx $yy]} { $which marker analysis $id move begin set imarker(motion) beginMove return } else { $which marker analysis unselect all set imarker(motion) none return } } $which marker analysis $id move begin set imarker(motion) beginMove $which crosshair canvas $xx $yy $which analysis shape $ime(shape) $xx $yy IMEDoTask $which } proc IMEShift {which xx yy} { global ime global imarker global debug if {$debug(tcl,ime)} { puts stderr "IMEShift $which $xx $yy" } # see if we are on a handle set hh [$which get marker analysis handle $xx $yy] set id [lindex $hh 0] set imarker(handle) [lindex $hh 1] if {$imarker(handle)} { $which marker analysis $id rotate begin set imarker(motion) beginRotate } } proc IMEDouble {which xx yy} { global ime global imarker global debug if {$debug(tcl,ime)} { puts stderr "IMEDouble $which $xx $yy" } if {[$which get marker analysis id $xx $yy]} { $which marker analysis select only $xx $yy } } proc IMEMotion {which xx yy} { global ime global imarker global debug if {$debug(tcl,ime)} { puts stderr "IMEMotion $which $xx $yy" } switch -- $imarker(motion) { none {} beginMove - move { $which marker analysis move motion $x $y set imarker(motion) move $which crosshair canvas $xx $yy $which analysis shape $ime(shape) $xx $yy IMEDoTask $which } beginEdit - edit { set imarker(motion) edit $which marker analysis edit motion $xx $yy $imarker(handle) IMEDoTask $which } beginRotate - rotate { set imarker(motion) rotate $which marker analysis rotate motion $xx $yy $imarker(handle) IMEDoTask $which } region - shiftregion {} } } proc IMERelease {which xx yy} { global ime global imarker global debug if {$debug(tcl,ime)} { puts stderr "IMERelease $which $xx $yy" } switch -- $imarker(motion) { none {} beginMove - beginRotate {} beginEdit {} move { $which marker analysis move end IMEDoTask $which } edit { $which marker analysis edit end IMEDoTask $which } rotate { $which marker analysis rotate end IMEDoTask $which } region - shiftregion {} } set imarker(motion) none set imarker(handle) -1 } proc IMEArrowKey {which xx yy} { global ime global ds9 global debug if {$debug(tcl,ime)} { puts stderr "IMEArrow $which $xx $yy" } $which crosshair warp $xx $yy set coord [$which get crosshair canvas] set XX [lindex $coord 0] set YY [lindex $coord 1] $which analysis shape $ime(shape) $XX $YY IMEDoTask $which UpdateColormapLevelMosaic $which $XX $YY canvas UpdateInfoBox $which $XX $YY canvas UpdatePixelTableDialog $which $XX $YY canvas UpdateGraph $which $XX $YY canvas } proc IMEHelp {} { global ime set rr "\tAnalysis Help\n\n?\tPrint Help\nd\tPlot 3D\nm\tStatistics\nv\tPlot 2D\n" SimpleTextDialog imehlp "Analysis Help" 80 20 insert top $rr } proc IMEStatsTask {which} { global ime set rr [$which get marker analysis hide analysis stats physical fk5] SimpleTextDialog "imestat" "Statistics" 80 20 insert top $rr } proc IMEHistTask {which} { global iime global ime set id 0 set varname imehist global $varname upvar #0 $varname var set vvarname analysishist upvar #0 $vvarname vvar global $vvarname set xdata ${vvarname}x set ydata ${vvarname}y global $xdata $ydata set ping [PlotPing $vvarname] if {!$ping} { PlotLineDialog $vvarname Histogram {} Values Counts set vvar(manage) 0 set vvar(dim) xy set vvar(xdata) $xdata set vvar(ydata) $ydata blt::vector create $xdata $ydata } $which get marker analysis hide analysis histogram $xdata $ydata 512 if {!$ping} { PlotExternal $vvarname set vvar(smooth) step set vvar(fill) 1 $vvar(proc,updateelement) $vvarname $vvar(proc,updategraph) $vvarname } PlotStats $vvarname PlotList $vvarname } proc IMERadialTask {which} { global iime global ime set varname imerad global $varname upvar #0 $varname var set vvarname analysisrad upvar #0 $vvarname vvar global $vvarname set vvar(system) physical set xdata ${vvarname}x set ydata ${vvarname}y set yedata ${vvarname}ye global $xdata $ydata $yedata set ping [PlotPing $vvarname] if {!$ping} { PlotLineDialog $vvarname "Radial Profile" {} physical {} MarkerAnalysisRadialAxisTitle $vvarname set vvar(manage) 0 set vvar(dim) xyey set vvar(xdata) $xdata set vvar(ydata) $ydata set vvar(yedata) $yedata blt::vector create $xdata $ydata $yedata } $which get marker analysis hide analysis radial $xdata $ydata $yedata physical if {!$ping} { PlotExternal $vvarname $vvar(proc,updateelement) $vvarname $vvar(proc,updategraph) $vvarname } PlotStats $vvarname PlotList $vvarname } proc IMEPlot2DTask {which} { global iime global ime set varname imeplot2d global $varname upvar #0 $varname var set vvarname analysisplot2d upvar #0 $vvarname vvar global $vvarname set vvar(system) physical set vvar(sky) fk5 set vvar(method) average set xdata ${vvarname}x set ydata ${vvarname}y set xcdata ${vvarname}xc set ycdata ${vvarname}yc global $xdata $ydata $xcdata $ycdata set ping [PlotPing $vvarname] if {!$ping} { PlotLineDialog $vvarname Plot2D {} physical Counts MarkerAnalysisPlot2dXAxisTitle $vvarname MarkerAnalysisPlot2dYAxisTitle $vvarname # setup our own formatting set vvar(graph,format) 0 set vvar(xcdata) $xcdata set vvar(ycdata) $ycdata $vvar(graph) xaxis configure \ -command "MarkerAnalysisPlot2dXAxis $vvarname" set vvar(manage) 0 set vvar(dim) xy set vvar(xdata) $xdata set vvar(ydata) $ydata blt::vector create $xdata $ydata $xcdata $ycdata } $which get marker analysis hide analysis plot2d $xdata $ydata $xcdata $ycdata physical fk5 average if {!$ping} { PlotExternal $vvarname $vvar(proc,updateelement) $vvarname $vvar(proc,updategraph) $vvarname } PlotStats $vvarname PlotList $vvarname } proc IMEPlot3DTask {which} { global iime global ime set varname imeplot3d global $varname upvar #0 $varname var set vvarname analysisplot3d upvar #0 $vvarname vvar global $vvarname set vvar(system) image set vvar(method) average set xdata ${vvarname}x set ydata ${vvarname}y global $xdata $ydata set ping [PlotPing $vvarname] if {!$ping} { PlotLineDialog $vvarname Plot3D {} image Counts MarkerAnalysisPlot3dXAxisTitle $vvarname MarkerAnalysisPlot3dYAxisTitle $vvarname set vvar(manage) 0 set vvar(dim) xy set vvar(xdata) $xdata set vvar(ydata) $ydata blt::vector create $xdata $ydata } $which get marker analysis hide analysis plot3d $xdata $ydata physical average if {!$ping} { PlotExternal $vvarname $vvar(proc,updateelement) $vvarname $vvar(proc,updategraph) $vvarname } PlotStats $vvarname PlotList $vvarname } saods9/ds9/library/imgsvr.tcl000644 000765 000000 00000033563 12741011522 016547 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc IMGSVRInit {varname title exec ack done error} { upvar #0 $varname var global $varname global ds9 global pds9 # AR variables ARInit $varname IMGSVRServer # IMG variables set var(proc,exec) $exec set var(proc,ack) $ack set var(proc,done) $done set var(proc,error) $error # create the window set w $var(top) set mb $var(mb) Toplevel $w $mb 6 $title "ARDestroy $varname" $mb add cascade -label [msgcat::mc {File}] -menu $mb.file menu $mb.file $mb.file add command -label [msgcat::mc {Retrieve}] \ -command "IMGSVRApply $varname 0" $mb.file add command -label [msgcat::mc {Cancel}] \ -command "ARCancel $varname" $mb.file add separator $mb.file add command -label [msgcat::mc {Update from Current Frame}] \ -command "IMGSVRUpdate $varname" $mb.file add command \ -label [msgcat::mc {Update from Current Crosshair}] \ -command "IMGSVRCrosshair $varname" $mb.file add separator $mb.file add command -label [msgcat::mc {Acknowledgment}] \ -command "IMGSVRAck $varname" $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command "ARDestroy $varname" AREditMenu $varname NSVRServerMenu $varname $mb add cascade -label [msgcat::mc {Preferences}] -menu $mb.prefs menu $mb.prefs $mb.prefs add checkbutton -label [msgcat::mc {Save Image on Download}] \ -variable ${varname}(save) $mb.prefs add separator $mb.prefs add radiobutton -label [msgcat::mc {New Frame}] \ -variable ${varname}(mode) -value new $mb.prefs add radiobutton -label [msgcat::mc {Current Frame}] \ -variable ${varname}(mode) -value current # Param set f [ttk::frame $w.param] ttk::label $f.nametitle -text [msgcat::mc {Object}] ttk::entry $f.name -textvariable ${varname}(name) -width 50 ttk::label $f.sky -textvariable ${varname}(sky) -anchor w set var(xname) [ttk::label $f.xtitle -text {} -width 1] ttk::entry $f.x -textvariable ${varname}(x) -width 14 set var(yname) [ttk::label $f.ytitle -text {} -width 1] ttk::entry $f.y -textvariable ${varname}(y) -width 14 ARSkyFormat $f.skyformat $varname ttk::label $f.wtitle -text [msgcat::mc {Width}] ttk::entry $f.w -textvariable ${varname}(width) -width 14 ttk::label $f.htitle -text [msgcat::mc {Height}] ttk::entry $f.h -textvariable ${varname}(height) -width 14 ARRFormat $f.format $varname grid $f.nametitle x $f.name - - - - -padx 2 -pady 2 -sticky ew grid $f.sky $f.xtitle $f.x $f.ytitle $f.y $f.skyformat \ -padx 2 -pady 2 -sticky w grid $f.wtitle x $f.w $f.htitle $f.h $f.format -padx 2 -pady 2 -sticky w # Status set f [ttk::frame $w.status] ttk::label $f.title -text [msgcat::mc {Status}] ttk::label $f.item -textvariable ${varname}(status) grid $f.title $f.item -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] set var(apply) [ttk::button $f.apply -text [msgcat::mc {Retrieve}] \ -command "IMGSVRApply $varname 0"] set var(cancel) [ttk::button $f.cancel -text [msgcat::mc {Cancel}] \ -command "ARCancel $varname" -state disabled] ttk::button $f.close -text [msgcat::mc {Close}] \ -command "ARDestroy $varname" pack $f.apply $f.cancel $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal ttk::separator $w.sep2 -orient horizontal pack $w.buttons $w.sep $w.status $w.sep2 -side bottom -fill x pack $w.param -side top -fill both -expand true ARCoord $varname ARStatus $varname {} } proc IMGSVRApply {varname sync} { upvar #0 $varname var global $varname global debug if {$debug(tcl,image)} { puts stderr "IMGSVRApply $varname $sync" } set var(sync) $sync ARApply $varname if {($var(name) != {})} { set var(sky) fk5 ARCoord $varname NSVRServer $varname } else { IMGSVRServer $varname } } proc IMGSVRAck {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,image)} { puts stderr "IMGSVRAck $varname" } eval "$var(proc,ack) $varname" } proc IMGSVRUpdate {varname} { upvar #0 $varname var global $varname global current global wcs global debug if {$debug(tcl,image)} { puts stderr "IMGSVRUpdate $varname" } if {[winfo exists $var(top)]} { set var(name) {} if {$current(frame) != {} } { if {[$current(frame) has wcs equatorial $wcs(system)]} { set coord [$current(frame) get fits center \ $wcs(system) $var(sky) $var(skyformat)] set var(x) [lindex $coord 0] set var(y) [lindex $coord 1] set size [$current(frame) get fits size \ $wcs(system) $var(sky) $var(rformat)] set var(width) [lindex $size 0] set var(height) [lindex $size 1] return } } else { set var(x) {} set var(y) {} set var(width) {} set var(height) {} } } } proc IMGSVRCrosshair {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,image)} { puts stderr "IMGSVRCrosshair $varname" } global current global wcs if {[winfo exists $var(top)]} { set var(name) {} if {$current(frame) != {} } { if {[$current(frame) has wcs equatorial $wcs(system)]} { set coord [$current(frame) get crosshair \ $wcs(system) $var(sky) $var(skyformat)] set var(x) [lindex $coord 0] set var(y) [lindex $coord 1] return } } set var(x) {} set var(y) {} } } proc IMGSVRServer {varname} { upvar #0 $varname var global $varname global current global debug if {$debug(tcl,image)} { puts stderr "IMGSVRServer $varname" } if {($var(x) != {}) && ($var(y) != {}) && ($var(width) != {}) && ($var(height) != {})} { ARStatus $varname [msgcat::mc {Contacting Image Server}] eval [list $var(proc,exec) $varname] } else { eval [list $var(proc,error) $varname [msgcat::mc {Please specify width, height, and either name or (ra,dec)}]] } } proc IMGSVRGetURL {varname url} { upvar #0 $varname var global $varname global debug if {$debug(tcl,image)} { puts stderr "IMGSVRGetURL $varname $url $var(query)" } set var(ch) [open "$var(fn)" w] global ihttp if {$var(sync)} { if {![catch {set var(token) [http::geturl $url \ -timeout $ihttp(timeout) \ -channel $var(ch) \ -progress \ [list IMGSVRProgress $varname] \ -binary 1 \ -headers "[ProxyHTTP]" \ -query "$var(query)"] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 IMGSVRGetURLFinish $varname $var(token) } else { catch {close $var(ch)} eval [list $var(proc,error) $varname "[msgcat::mc {Unable to locate URL}] $url"] } } else { if {![catch {set var(token) [http::geturl $url \ -timeout $ihttp(timeout) \ -channel $var(ch) \ -command \ [list IMGSVRGetURLFinish $varname] \ -progress \ [list IMGSVRProgress $varname] \ -binary 1 \ -headers "[ProxyHTTP]" \ -query "$var(query)"] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 } else { catch {close $var(ch)} eval [list $var(proc,error) $varname "[msgcat::mc {Unable to locate URL}] $url"] } } } proc IMGSVRGetURLFinish {varname token} { upvar #0 $varname var global $varname global debug if {$debug(tcl,image)} { puts stderr "IMGSVRGetURLFinish $varname" } global current global ds9 global loadParam catch {close $var(ch)} if {!($var(active))} { ARCancelled $varname return } upvar #0 $token t # Code set var(code) [http::ncode $token] # Meta set var(meta) $t(meta) # Mime-type # we want to strip and extra info after ';' regexp -nocase {([^;])*} $t(type) var(mime) # Content-Encoding set var(encoding) {} foreach {name value} $var(meta) { if {[regexp -nocase ^content-encoding $name]} { switch -- [string tolower $value] { compress - bzip2 {set var(encoding) bzip2} Z {set var(encoding) compress} pack - z {set var(encoding) pack} default {} } } } HTTPLog $token # Result? switch -- $var(code) { 200 - 203 {IMGSVRParse $varname} 201 - 300 - 301 - 302 - 303 - 305 - 307 { foreach {name value} $var(meta) { if {[regexp -nocase ^location$ $name]} { global debug if {$debug(tcl,image)} { puts stderr "IMGSVRGetURLFinish redirect $var(code) to $value" } # clean up and resubmit http::cleanup $token unset var(token) IMGSVRGetURL $varname $value } } } default { eval [list $var(proc,error) $varname "[msgcat::mc {Error code was returned}] $var(code)"] } } } proc IMGSVRParse {varname} { upvar #0 $varname var global $varname global current global ds9 global loadParam global debug if {$debug(tcl,image)} { puts stderr "IMGSVRParse: $varname : fn $var(fn) : code $var(code) : meta $var(meta) : mime $var(mime) : encoding $var(encoding)" } switch -- [string tolower $var(mime)] { "application/octet-stream" { # its never fails, someone can't get there mime types correct. # Override the mime type based on path switch -- [file extension $var(fn)] { .bz2 {set var(encoding) bzip2} .Z {set var(encoding) compress} .z {set var(encoding) pack} } } "image/fits" - "application/fits" {} "application/fits-image" - "application/fits-table" - "application/fits-group" {} "image/x-fits" - "binary/x-fits" - "application/x-fits" {} "image/x-gfits" - "binary/x-gfits" - "image/gz-fits" - "application/x-gzip" - "display/gz-fits" {} "image/fits-hcompress" - "image/x-fits-h" {} "image/bz2-fits" - "display/bz2-fits" {set var(encoding) bzip2} "image/x-cfits" - "binary/x-cfits" {set var(encoding) compress} "image/x-zfits" - "binary/x-zfits" {set var(encoding) pack} "text/html" - "text/plain" - default { # NOTE: error notices may come as text/html eval [list $var(proc,error) $varname [msgcat::mc {No Data Available}]] return } } switch -- $var(mode) { new {MultiLoadBase} current {} } StartLoad # alloc it because we are going to delete it after load set loadParam(load,type) allocgz set loadParam(load,layer) {} set loadParam(file,type) fits set loadParam(file,mode) {} set loadParam(file,name) $var(fn) set loadParam(file,fn) $loadParam(file,name) # may have to convert the file, based on content-encoding switch -- "$var(encoding)" { bzip2 { catch {set ch [open "| bunzip2 < $var(fn) " r]} set loadParam(load,type) channel set loadParam(channel,name) $ch } compress { catch {set ch [open "| uncompress < $var(fn) " r]} set loadParam(load,type) channel set loadParam(channel,name) $ch } pack { catch {set ch [open "| pcat $var(fn) " r]} set loadParam(load,type) channel set loadParam(channel,name) $ch } } ProcessLoad FinishLoad if {!$var(save)} { if {[file exists $var(fn)]} { catch {file delete -force $var(fn)} } } $var(proc,done) $varname } proc IMGSVRProgress {varname token totalsize currentsize} { upvar #0 $varname var global $varname # sometimes we get nothing if {$totalsize == {} || $currentsize == {}} { ARStatus $varname {} } elseif {$totalsize != 0} { ARStatus $varname "$currentsize bytes of $totalsize bytes [expr int(double($currentsize)/$totalsize*100)]%" } else { ARStatus $varname "$currentsize bytes" } } proc IMGSVRProcessCmd {varname iname vvarname} { upvar 2 $varname var upvar 2 $iname i upvar #0 $vvarname vvar switch -- [string tolower [lindex $var $i]] { {} { if {$vvar(name) != {} || ($vvar(x) != {} && $vvar(y) != {})} { IMGSVRApply $vvarname 1 } } open {} close {ARDestroy $vvarname} save { incr i set vvar(save) [FromYesNo [lindex $var $i]] } frame { incr i set vvar(mode) [string tolower [lindex $var $i]] } survey { incr i set vvar(survey) [lindex $var $i] } size { incr i set vvar(width) [lindex $var $i] incr i set vvar(height) [lindex $var $i] incr i if {[lindex $var $i] != {} && \ [string range [lindex $var $i] 0 0] != {-}} { set vvar(rformat) [lindex $var $i] set vvar(rformat,msg) $vvar(rformat) } else { incr i -1 } } pixels { incr i set vvar(width,pixels) [lindex $var $i] incr i set vvar(height,pixels) [lindex $var $i] } update { incr i switch [string tolower [lindex $var $i]] { frame {IMGSVRUpdate $vvarname} crosshair {IMGSVRCrosshair $vvarname} } IMGSVRApply $vvarname 1 } coord { incr i set vvar(x) [lindex $var $i] incr i set vvar(y) [lindex $var $i] incr i if {[lindex $var $i] != {} && \ [string range [lindex $var $i] 0 0] != {-}} { set vvar(skyformat) [lindex $var $i] set vvar(skyformat,msg) $vvar(skyformat) } else { incr i -1 } IMGSVRApply $vvarname 1 } name { incr i set vvar(name) [lindex $var $i] if {$vvar(name) != {}} { IMGSVRApply $vvarname 1 } } default { set vvar(name) [lindex $var $i] if {$vvar(name) != {}} { IMGSVRApply $vvarname 1 } } } } proc IMGSVRProcessSendCmd {proc id param vvarname} { upvar #0 $vvarname vvar switch -- [string tolower [lindex $param 0]] { save {$proc $id [ToYesNo $vvar(save)]} frame {$proc $id "$vvar(mode)\n"} survey {$proc $id "$vvar(survey)\n"} size {$proc $id "$vvar(width) $vvar(height) $vvar(rformat)\n"} pixels {$proc $id "$vvar(width,pixels) $vvar(height,pixels)\n"} coord {$proc $id "$vvar(x) $vvar(y) $vvar(skyformat)\n"} name - default {$proc $id "$vvar(name)\n"} } } saods9/ds9/library/import.tcl000644 000765 000000 00000013737 12705445647 016576 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc Import {fn format layer mode fn2} { global current if {$fn == {}} { return } StartLoad switch -- $format { array {ImportArrayFile $fn $layer} rgbarray { switch -- [$current(frame) get type] { base - 3d {CreateRGBFrame} rgb {} } ImportRGBArrayFile $fn } nrrd {ImportNRRDFile $fn $layer} envi {ImportENVIFile $fn $fn2} gif - tiff - jpeg - png {ImportPhotoFile $fn $mode} } FinishLoad } # Support proc ImportDialog {format {layer {}} {mode {}}} { global arrayfbox global rgbarrayfbox global nrrdfbox global envifbox global envi2fbox global giffbox global jpegfbox global tifffbox global pngfbox switch -- $format { array {set fn [OpenFileDialog arrayfbox]} rgbarray {set fn [OpenFileDialog rgbarrayfbox]} nrrd {set fn [OpenFileDialog nrrdfbox]} envi {set fn [OpenFileDialog envifbox]} gif {set fn [OpenFileDialog giffbox]} jpeg {set fn [OpenFileDialog jpegfbox]} tiff {set fn [OpenFileDialog tifffbox]} png {set fn [OpenFileDialog pngfbox]} } set fn2 {} if {$fn != {}} { set ok 1 switch -- $format { array { # do we have an array spec tag'd on if {![regexp -nocase {(.*)(\[.*\])} $fn foo base ext]} { set ext {} set ok [ArrayImportDialog 1 ext] if {$ok} { append fn "$ext" } } } rgbarray { # do we have an array spec tag'd on if {![regexp -nocase {(.*)(\[.*\])} $fn foo base ext]} { set ext {} set ok [ArrayImportDialog 3 ext] if {$ok} { append fn "$ext" } } } envi { set fn2 [FindENVIDataFile $fn] if {$fn2 == {}} { set fn2 "[file rootname $fn].bsq" SetFileLast envi2 $fn2 set fn2 [OpenFileDialog envi2fbox] if {$fn2 == {}} { set ok 0 } } } nrrd - gif - jpeg - tiff - png {} } if {$ok} { Import $fn $format $layer $mode $fn2 } } } proc ArrayImportDialog {depth varname} { upvar $varname var global env global ed global ds9 set w {.arr} set ed(ok) 0 set ed(x) $ds9(array,x) set ed(y) $ds9(array,y) set ed(z) $depth set ed(bitpix) $ds9(array,bitpix) set ed(skip) $ds9(array,skip) set ed(arch) $ds9(array,arch) if {[info exists env(DS9_ARRAY)]} { if {[regexp {.*(dims.?=)([0-9]+)} $env(DS9_ARRAY) foo f1 item]} { set ed(x) $item set ed(y) $item } if {[regexp {.*(dim.?=)([0-9]+)} $env(DS9_ARRAY) foo f1 item]} { set ed(x) $item set ed(y) $item } if {[regexp {.*(xdim.?=)([0-9]+)} $env(DS9_ARRAY) foo f1 item]} { set ed(x) $item } if {[regexp {.*(ydim.?=)([0-9]+)} $env(DS9_ARRAY) foo f1 item]} { set ed(y) $item } if {[regexp {.*(zdim.?=)([0-9]+)} $env(DS9_ARRAY) foo f1 item]} { set ed(z) $item } if {[regexp {.*(bitpix.?=)(-?[0-9]+)} $env(DS9_ARRAY) foo f1 item]} { set ed(bitpix) $item } if {[regexp {.*(skip.?=)(-?[0-9]+)} $env(DS9_ARRAY) foo f1 item]} { set ed(skip) $item } if {[regexp {.*arch.?=bigendian} $env(DS9_ARRAY) foo item]} { set ed(arch) $item } if {[regexp {.*arch.?=littleendian} $env(DS9_ARRAY) foo item]} { set ed(arch) $item } } DialogCreate $w [msgcat::mc {Import Array}] ed(ok) # Dim set f [ttk::labelframe $w.dim -text [msgcat::mc {Dimension}] -padding 2] ttk::entry $f.x -textvariable ed(x) -width 6 ttk::entry $f.y -textvariable ed(y) -width 6 ttk::entry $f.z -textvariable ed(z) -width 6 grid $f.x $f.y $f.z -padx 2 -pady 2 -sticky w # Bitpix set f [ttk::labelframe $w.bitpix -text [msgcat::mc {Pixel Size}] -padding 2] ttk::radiobutton $f.char -text {Char} -variable ed(bitpix) -value 8 ttk::radiobutton $f.short -text {Short} -variable ed(bitpix) -value 16 ttk::radiobutton $f.ushort -text {UShort} -variable ed(bitpix) -value -16 ttk::radiobutton $f.long -text {Long} -variable ed(bitpix) -value 32 ttk::radiobutton $f.float -text {Float} -variable ed(bitpix) -value -32 ttk::radiobutton $f.double -text {Double} -variable ed(bitpix) -value -64 grid $f.char -padx 2 -pady 2 -sticky w grid $f.short $f.ushort $f.long -padx 2 -pady 2 -sticky w grid $f.float $f.double -padx 2 -pady 2 -sticky w # Skip set f [ttk::labelframe $w.skip -text [msgcat::mc {Header}] -padding 2] ttk::label $f.t1 -text [msgcat::mc {Skip First}] ttk::label $f.t2 -text [msgcat::mc {Bytes}] ttk::entry $f.skip -textvariable ed(skip) -width 6 grid $f.t1 $f.skip $f.t2 -padx 2 -pady 2 -sticky w # Arch set f [ttk::labelframe $w.arch -text [msgcat::mc {Architecture}] -padding 2] ttk::radiobutton $f.big -text {Big-Endian} -variable ed(arch) \ -value bigendian ttk::radiobutton $f.little -text {Little-Endian} -variable ed(arch) \ -value littleendian grid $f.big $f.little -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini grid $w.dim -sticky news grid $w.bitpix -sticky news grid $w.skip -sticky news grid $w.arch -sticky news grid $w.buttons -sticky ew grid rowconfigure $w 0 -weight 1 grid rowconfigure $w 1 -weight 1 grid rowconfigure $w 2 -weight 1 grid rowconfigure $w 3 -weight 1 grid columnconfigure $w 0 -weight 1 DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w if {$ed(ok)} { set ds9(array,x) $ed(x) set ds9(array,y) $ed(y) set ds9(array,bitpix) $ed(bitpix) set ds9(array,skip) $ed(skip) set ds9(array,arch) $ed(arch) set var "\[xdim=$ed(x),ydim=$ed(y),zdim=$ed(z),bitpix=$ed(bitpix),skip=$ed(skip),arch=$ed(arch)\]" } set rr $ed(ok) unset ed return $rr } saods9/ds9/library/info.tcl000644 000765 000000 00000105317 12753143330 016176 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CreateInfoPanel {} { global ds9 global pds9 global view global infobox # Panel Frame set ds9(panel) [ttk::frame $ds9(main).panel] set ds9(panel,sep) [ttk::separator $ds9(main).spanel -orient horizontal] # Info set ds9(info) [ttk::frame $ds9(panel).info] ttk::frame $ds9(info).dummy ttk::label $ds9(info).fileTitle -text [msgcat::mc {File}] ttk::label $ds9(info).fileValue -relief groove \ -textvariable infobox(filename) ttk::label $ds9(info).objTitle -text [msgcat::mc {Object}] ttk::label $ds9(info).objValue -relief groove \ -textvariable infobox(object) ttk::entry $ds9(info).keyWord -textvariable view(info,keyvalue) ttk::label $ds9(info).keyValue -relief groove \ -textvariable infobox(keyvalue) ttk::label $ds9(info).minTitle -text [msgcat::mc {Minimum}] ttk::label $ds9(info).minValue -relief groove \ -textvariable infobox(min) -anchor center ttk::label $ds9(info).minXLabel -text {X} ttk::label $ds9(info).minXValue -relief groove \ -textvariable infobox(min,x) -anchor center ttk::label $ds9(info).minYLabel -text {Y} ttk::label $ds9(info).minYValue -relief groove \ -textvariable infobox(min,y) -anchor center ttk::label $ds9(info).maxTitle -text [msgcat::mc {Maximum}] ttk::label $ds9(info).maxValue -relief groove \ -textvariable infobox(max) -anchor center ttk::label $ds9(info).maxXLabel -text {X} ttk::label $ds9(info).maxXValue -relief groove \ -textvariable infobox(max,x) -anchor center ttk::label $ds9(info).maxYLabel -text {Y} ttk::label $ds9(info).maxYValue -relief groove \ -textvariable infobox(max,y) -anchor center ttk::label $ds9(info).lowhighTitle \ -text "[msgcat::mc {Low}] [msgcat::mc {High}]" ttk::label $ds9(info).lowValue -relief groove \ -textvariable infobox(low) -anchor center ttk::label $ds9(info).highValue -relief groove \ -textvariable infobox(high) -anchor center ttk::label $ds9(info).valueTitle -text [msgcat::mc {Value}] ttk::label $ds9(info).value -relief groove \ -textvariable infobox(value) -anchor center ttk::label $ds9(info).valueRTitle -text [msgcat::mc {r}] ttk::label $ds9(info).valueR -relief groove \ -textvariable infobox(value,red) -anchor center ttk::label $ds9(info).valueGTitle -text [msgcat::mc {g}] ttk::label $ds9(info).valueG -relief groove \ -textvariable infobox(value,green) -anchor center ttk::label $ds9(info).valueBTitle -text [msgcat::mc {b}] ttk::label $ds9(info).valueB -relief groove \ -textvariable infobox(value,blue) -anchor center ttk::label $ds9(info).bunitTitle -text [msgcat::mc {Units}] ttk::label $ds9(info).bunitValue -relief groove \ -textvariable infobox(bunit) foreach ll {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { set infobox(wcs$ll,sys) "[msgcat::mc {WCS}] $ll" ttk::label $ds9(info).wcsLabel$ll -textvariable infobox(wcs$ll,sys) set infobox(wcs$ll,x,nm) [ttk::label $ds9(info).wcsXLabel$ll -text {}] ttk::label $ds9(info).wcsXValue$ll -relief groove \ -textvariable infobox(wcs$ll,x) -anchor center set infobox(wcs$ll,y,nm) [ttk::label $ds9(info).wcsYLabel$ll -text {}] ttk::label $ds9(info).wcsYValue$ll -relief groove \ -textvariable infobox(wcs$ll,y) -anchor center set infobox(wcs$ll,z,nm) [ttk::label $ds9(info).wcsZLabel$ll -text {}] ttk::label $ds9(info).wcsZValue$ll -relief groove \ -textvariable infobox(wcs$ll,z) -anchor center } ttk::label $ds9(info).detectorTitle -text [msgcat::mc {Detector}] ttk::label $ds9(info).detectorXLabel -text {X} ttk::label $ds9(info).detectorXValue -relief groove \ -textvariable infobox(detector,x) -anchor center ttk::label $ds9(info).detectorYLabel -text {Y} ttk::label $ds9(info).detectorYValue -relief groove \ -textvariable infobox(detector,y) -anchor center ttk::label $ds9(info).detectorZLabel -text {Z} ttk::label $ds9(info).detectorZValue -relief groove \ -textvariable infobox(detector,z) -anchor center ttk::label $ds9(info).amplifierTitle -text [msgcat::mc {Amplifier}] ttk::label $ds9(info).amplifierXLabel -text {X} ttk::label $ds9(info).amplifierXValue -relief groove \ -textvariable infobox(amplifier,x) -anchor center ttk::label $ds9(info).amplifierYLabel -text {Y} ttk::label $ds9(info).amplifierYValue -relief groove \ -textvariable infobox(amplifier,y) -anchor center ttk::label $ds9(info).amplifierZLabel -text {Z} ttk::label $ds9(info).amplifierZValue -relief groove \ -textvariable infobox(amplifier,z) -anchor center ttk::label $ds9(info).physicalTitle -text [msgcat::mc {Physical}] ttk::label $ds9(info).physicalXLabel -text {X} ttk::label $ds9(info).physicalXValue -relief groove \ -textvariable infobox(physical,x) -anchor center ttk::label $ds9(info).physicalYLabel -text {Y} ttk::label $ds9(info).physicalYValue -relief groove \ -textvariable infobox(physical,y) -anchor center ttk::label $ds9(info).physicalZLabel -text {Z} ttk::label $ds9(info).physicalZValue -relief groove \ -textvariable infobox(physical,z) -anchor center ttk::label $ds9(info).imageTitle -text [msgcat::mc {Image}] ttk::label $ds9(info).imageXLabel -text {X} ttk::label $ds9(info).imageXValue -relief groove \ -textvariable infobox(image,x) -anchor center ttk::label $ds9(info).imageYLabel -text {Y} ttk::label $ds9(info).imageYValue -relief groove \ -textvariable infobox(image,y) -anchor center ttk::label $ds9(info).imageZLabel -text {Z} ttk::label $ds9(info).imageZValue -relief groove \ -textvariable infobox(image,z) -anchor center ttk::label $ds9(info).frame -textvariable infobox(frame) \ -width [expr [string length [msgcat::mc {Frame}]]+4] ttk::label $ds9(info).zoomtitle -text [msgcat::mc {x}] ttk::label $ds9(info).zoomValue -relief groove \ -textvariable infobox(zoom) -anchor center ttk::label $ds9(info).angleTitle -text {°} ttk::label $ds9(info).angleValue -relief groove \ -textvariable infobox(angle) -anchor center } proc UpdateFrameInfoBox {which} { global ds9 global view global debug if {$debug(tcl,events)} { puts stderr "UpdateFrameInfoBox" } switch -- $which { base { grid forget $ds9(info).valueRTitle $ds9(info).valueR \ $ds9(info).valueGTitle $ds9(info).valueG \ $ds9(info).valueBTitle $ds9(info).valueB switch -- $view(layout) { vertical { grid $ds9(info).value \ -row $ds9(info,row,value) \ -column 1 -padx 2 -sticky w } horizontal { grid $ds9(info).value \ -row $ds9(info,row,value) \ -column 2 -padx 2 -sticky w } } foreach ll {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { grid forget $ds9(info).wcsZLabel$ll grid forget $ds9(info).wcsZValue$ll } grid forget $ds9(info).detectorZLabel $ds9(info).detectorZValue grid forget $ds9(info).amplifierZLabel $ds9(info).amplifierZValue grid forget $ds9(info).physicalZLabel $ds9(info).physicalZValue grid forget $ds9(info).imageZLabel $ds9(info).imageZValue } rgb { grid forget $ds9(info).value switch $view(layout) { vertical { grid $ds9(info).valueRTitle \ -row $ds9(info,row,value,red) \ -column 0 -sticky w grid $ds9(info).valueR -row $ds9(info,row,value,red) \ -column 1 -padx 2 -sticky w grid $ds9(info).valueGTitle \ -row $ds9(info,row,value,green) \ -column 0 -sticky w grid $ds9(info).valueG \ -row $ds9(info,row,value,green) \ -column 1 -padx 2 -sticky w grid $ds9(info).valueBTitle \ -row $ds9(info,row,value,blue) \ -column 0 -sticky w grid $ds9(info).valueB \ -row $ds9(info,row,value,blue) \ -column 1 -padx 2 -sticky w } horizontal { grid $ds9(info).valueRTitle \ -row $ds9(info,row,value,red) \ -column 1 -sticky w grid $ds9(info).valueR \ -row $ds9(info,row,value,red) \ -column 2 -padx 2 -sticky w grid $ds9(info).valueGTitle \ -row $ds9(info,row,value,green) \ -column 3 -sticky w grid $ds9(info).valueG \ -row $ds9(info,row,value,green) \ -column 4 -padx 2 -sticky w grid $ds9(info).valueBTitle \ -row $ds9(info,row,value,blue) \ -column 5 -sticky w grid $ds9(info).valueB \ -row $ds9(info,row,value,blue) \ -column 6 -padx 2 -sticky w } } foreach ll {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { grid forget $ds9(info).wcsZLabel$ll grid forget $ds9(info).wcsZValue$ll } grid forget $ds9(info).detectorZLabel $ds9(info).detectorZValue grid forget $ds9(info).amplifierZLabel $ds9(info).amplifierZValue grid forget $ds9(info).physicalZLabel $ds9(info).physicalZValue grid forget $ds9(info).imageZLabel $ds9(info).imageZValue } 3d { grid forget $ds9(info).valueRTitle $ds9(info).valueR \ $ds9(info).valueGTitle $ds9(info).valueG \ $ds9(info).valueBTitle $ds9(info).valueB switch -- $view(layout) { vertical { grid $ds9(info).value -row $ds9(info,row,value) \ -column 1 -padx 2 -sticky w foreach ll {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { if {$view(info,wcs$ll)} { grid $ds9(info).wcsZLabel$ll \ -row $ds9(info,row,wcs$ll) \ -column 0 -sticky w grid $ds9(info).wcsZValue$ll \ -row $ds9(info,row,wcs$ll) \ -column 1 -padx 2 incr row } else { grid forget $ds9(info).wcsZLabel$ll grid forget $ds9(info).wcsZValue$ll } } if {$view(info,detector)} { grid $ds9(info).detectorZLabel \ -row $ds9(info,row,detector) \ -column 0 -sticky w grid $ds9(info).detectorZValue \ -row $ds9(info,row,detector) \ -column 1 -padx 2 } else { grid forget $ds9(info).detectorZLabel \ $ds9(info).detectorZValue } if {$view(info,amplifier)} { grid $ds9(info).amplifierZLabel \ -row $ds9(info,row,amplifier) \ -column 0 -sticky w grid $ds9(info).amplifierZValue \ -row $ds9(info,row,amplifier) \ -column 1 -padx 2 } else { grid forget $ds9(info).amplifierZLabel \ $ds9(info).amplifierZValue } if {$view(info,physical)} { grid $ds9(info).physicalZLabel \ -row $ds9(info,row,physical) \ -column 0 -sticky w grid $ds9(info).physicalZValue \ -row $ds9(info,row,physical) \ -column 1 -padx 2 } else { grid forget $ds9(info).physicalZLabel \ $ds9(info).physicalZValue } if {$view(info,image)} { grid $ds9(info).imageZLabel \ -row $ds9(info,row,image) \ -column 0 -sticky w grid $ds9(info).imageZValue \ -row $ds9(info,row,image) \ -column 1 -padx 2 } else { grid forget $ds9(info).imageZLabel \ $ds9(info).imageZValue } } horizontal { grid $ds9(info).value -row $ds9(info,row,value) \ -column 2 -padx 2 -sticky w foreach ll {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { if {$view(info,wcs$ll)} { grid $ds9(info).wcsZLabel$ll \ -row $ds9(info,row,wcs$ll) \ -column 5 -sticky w grid $ds9(info).wcsZValue$ll \ -row $ds9(info,row,wcs$ll) \ -column 6 -padx 2 incr row } else { grid forget $ds9(info).wcsZLabel$ll grid forget $ds9(info).wcsZValue$ll } } if {$view(info,detector)} { grid $ds9(info).detectorZLabel \ -row $ds9(info,row,detector) \ -column 5 -sticky w grid $ds9(info).detectorZValue \ -row $ds9(info,row,detector) \ -column 6 -padx 2 } else { grid forget $ds9(info).detectorZLabel \ $ds9(info).detectorZValue } if {$view(info,amplifier)} { grid $ds9(info).amplifierZLabel \ -row $ds9(info,row,amplifier) \ -column 5 -sticky w grid $ds9(info).amplifierZValue \ -row $ds9(info,row,amplifier) \ -column 6 -padx 2 } else { grid forget $ds9(info).amplifierZLabel \ $ds9(info).amplifierZValue } if {$view(info,physical)} { grid $ds9(info).physicalZLabel \ -row $ds9(info,row,physical) \ -column 5 -sticky w grid $ds9(info).physicalZValue \ -row $ds9(info,row,physical) \ -column 6 -padx 2 } else { grid forget $ds9(info).physicalZLabel \ $ds9(info).physicalZValue } if {$view(info,image)} { grid $ds9(info).imageZLabel \ -row $ds9(info,row,image) \ -column 5 -sticky w grid $ds9(info).imageZValue \ -row $ds9(info,row,image) \ -column 6 -padx 2 } else { grid forget $ds9(info).imageZLabel \ $ds9(info).imageZValue } } } } } } proc EnterInfoBox {which} { global infobox global debug if {$debug(tcl,events)} { puts stderr "EnterInfo $which" } UpdateFrameInfoBox [$which get type] UpdateWCSInfoBox $which set infobox(frame) "[msgcat::mc {Frame}] [string range $which 5 end]" set infobox(angle) [$which get rotate] set z [$which get zoom] set z1 [lindex $z 0] set z2 [lindex $z 1] if {$z1 != $z2} { set infobox(zoom) "$z1 $z2" } else { set infobox(zoom) $z1 } } proc LeaveInfoBox {} { global current global debug if {$debug(tcl,events)} { puts stderr "LeaveInfoBox" } ClearInfoBoxCoords } proc ClearInfoBox {} { global infobox global debug if {$debug(tcl,info)} { puts stderr "ClearInfoBox" } set infobox(filename) {} set infobox(object) {} set infobox(keyvalue) {} set infobox(bunit) {} set infobox(min) {} set infobox(min,x) {} set infobox(min,y) {} set infobox(max) {} set infobox(max,x) {} set infobox(max,y) {} set infobox(low) {} set infobox(high) {} ClearInfoBoxCoords set infobox(frame) [msgcat::mc {Frame}] set infobox(zoom) {} set infobox(angle) {} } proc ClearInfoBoxCoords {} { global infobox global debug if {$debug(tcl,info)} { puts stderr "ClearInfoBoxCoords" } set infobox(value) {} set infobox(value,red) {} set infobox(value,green) {} set infobox(value,blue) {} foreach ll {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { set infobox(wcs$ll,sys) "WCS $ll" $infobox(wcs$ll,x,nm) configure -text {} $infobox(wcs$ll,y,nm) configure -text {} $infobox(wcs$ll,z,nm) configure -text {} set infobox(wcs$ll,x) {} set infobox(wcs$ll,y) {} set infobox(wcs$ll,z) {} } set infobox(detector,x) {} set infobox(detector,y) {} set infobox(detector,z) {} set infobox(amplifier,x) {} set infobox(amplifier,y) {} set infobox(amplifier,z) {} set infobox(physical,x) {} set infobox(physical,y) {} set infobox(physical,z) {} set infobox(image,x) {} set infobox(image,y) {} set infobox(image,z) {} } proc RefreshInfoBox {which} { global current global debug if {$debug(tcl,info)} { puts stderr "RefreshInfoBox" } if {$which != {}} { switch -- $current(mode) { crosshair - analysis { set coord [$which get crosshair canvas] set x [lindex $coord 0] set y [lindex $coord 1] EnterInfoBox $which UpdateInfoBox $which $x $y canvas } none - pointer - region - colorbar - pan - zoom - rotate - crop - catalog - examine - iexam { EnterInfoBox $which ClearInfoBoxCoords } } } return } proc UpdateInfoBoxBase {} { global debug if {$debug(tcl,info)} { puts stderr "UpdateInfoBoxBase" } global current global infobox if {$current(frame) != {}} { $current(frame) get info infobox } } proc UpdateInfoBox {which x y sys} { global debug if {$debug(tcl,info)} { puts stderr "UpdateInfoBox $sys" } global ds9 global pds9 global infobox global view $which get info $sys $x $y infobox set infobox(bunit) [$which get fits header keyword BUNIT] if {$view(info,keyvalue) != ""} { set infobox(keyvalue) \ [$which get fits header keyword \'$view(info,keyvalue)\'] } else { set infobox(keyvalue) {} } # windows fonts can be larger, causing a layout event switch $ds9(wm) { x11 - aqua {set fsz $pds9(font,size)} win32 {set fsz [expr $pds9(font,size)-3]} } foreach ll {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { if {$view(info,wcs$ll)} { if {![$which has fits]} { set infobox(wcs$ll,sys) "WCS $ll" $infobox(wcs$ll,x,nm) configure -text {} $infobox(wcs$ll,y,nm) configure -text {} } elseif {[$which has wcs equatorial wcs$ll]} { switch -- $infobox(wcs$ll,sys) { fk4 - fk5 - icrs { $infobox(wcs$ll,x,nm) configure -text "\u03b1" \ -font "$ds9(times) $fsz" $infobox(wcs$ll,y,nm) configure -text "\u03b4" \ -font "$ds9(times) $fsz" } galactic { $infobox(wcs$ll,x,nm) configure -text {l} \ -font "{$ds9(times)} $pds9(font,size) normal italic" $infobox(wcs$ll,y,nm) configure -text {b} \ -font "{$ds9(times)} $pds9(font,size) normal italic" } ecliptic { $infobox(wcs$ll,x,nm) configure -text "\u03bb" \ -font "$ds9(times) $fsz" $infobox(wcs$ll,y,nm) configure -text "\u03b2" \ -font "$ds9(times) $fsz" } } } elseif {[$which has wcs celestrial wcs$ll]} { set infobox(wcs$ll,sys) "WCS $ll" $infobox(wcs$ll,x,nm) configure -text {l} \ -font "{$ds9(times)} $pds9(font,size) normal italic" $infobox(wcs$ll,y,nm) configure -text {b} \ -font "{$ds9(times)} $pds9(font,size) normal italic" } else { set infobox(wcs$ll,sys) "WCS $ll" $infobox(wcs$ll,x,nm) configure -text {x} \ -font "{$ds9(times)} $pds9(font,size) normal italic" $infobox(wcs$ll,y,nm) configure -text {y} \ -font "{$ds9(times)} $pds9(font,size) normal italic" } } } } proc LayoutInfoPanel {} { global ds9 global view # reset grid columnconfigure $ds9(info) 7 -weight 0 if {$ds9(row) > -1} { grid rowconfigure $ds9(info) $ds9(row) -weight 0 set ds9(row) -1 } # layout switch $view(layout) { vertical {LayoutInfoPanelVert} horizontal {LayoutInfoPanelHorz} } } proc LayoutInfoPanelHorz {} { global ds9 global view set ww 12 set row 0 # also adjust layout.tcl CanvasDef switch $ds9(wm) { x11 {set xx 42} aqua {set xx 40} win32 {set xx 40} } grid columnconfigure $ds9(info) 7 -weight 1 # filename if {$view(info,filename)} { $ds9(info).fileValue configure -width $xx grid $ds9(info).fileTitle -row $row -column 0 -sticky w grid $ds9(info).fileValue -row $row -column 2 -padx 2 \ -sticky ew -columnspan 6 incr row } else { grid forget $ds9(info).fileTitle grid forget $ds9(info).fileValue } # object if {$view(info,object)} { $ds9(info).objValue configure -width $xx grid $ds9(info).objTitle -row $row -column 0 -sticky w grid $ds9(info).objValue -row $row -column 2 -padx 2 \ -sticky ew -columnspan 6 incr row } else { grid forget $ds9(info).objTitle grid forget $ds9(info).objValue } # keyword if {$view(info,keyword)} { $ds9(info).keyWord configure -width $ww $ds9(info).keyValue configure -width $xx grid $ds9(info).keyWord -row $row -column 0 -sticky w grid $ds9(info).keyValue -row $row -column 2 -padx 2 \ -sticky w -columnspan 6 incr row } else { grid forget $ds9(info).keyWord grid forget $ds9(info).keyValue } # minmax if {$view(info,minmax)} { $ds9(info).minValue configure -width $ww $ds9(info).minXValue configure -width $ww $ds9(info).minYValue configure -width $ww grid $ds9(info).minTitle -row $row -column 0 -sticky w grid $ds9(info).minXLabel -row $row -column 1 -padx 2 -sticky w grid $ds9(info).minXValue -row $row -column 2 -padx 2 -sticky w grid $ds9(info).minYLabel -row $row -column 3 -padx 2 -sticky w grid $ds9(info).minYValue -row $row -column 4 -padx 2 -sticky w grid $ds9(info).minValue -row $row -column 6 -padx 2 -sticky w incr row $ds9(info).maxValue configure -width $ww $ds9(info).maxXValue configure -width $ww $ds9(info).maxYValue configure -width $ww grid $ds9(info).maxTitle -row $row -column 0 -sticky w grid $ds9(info).maxXLabel -row $row -column 1 -padx 2 -sticky w grid $ds9(info).maxXValue -row $row -column 2 -padx 2 -sticky w grid $ds9(info).maxYLabel -row $row -column 3 -padx 2 -sticky w grid $ds9(info).maxYValue -row $row -column 4 -padx 2 -sticky w grid $ds9(info).maxValue -row $row -column 6 -padx 2 -sticky w incr row } else { grid forget $ds9(info).minTitle grid forget $ds9(info).minValue grid forget $ds9(info).minXLabel grid forget $ds9(info).minXValue grid forget $ds9(info).minYLabel grid forget $ds9(info).minYValue grid forget $ds9(info).maxTitle grid forget $ds9(info).maxValue grid forget $ds9(info).maxXLabel grid forget $ds9(info).maxXValue grid forget $ds9(info).maxYLabel grid forget $ds9(info).maxYValue } # lowhigh if {$view(info,lowhigh)} { $ds9(info).lowValue configure -width $ww $ds9(info).highValue configure -width $ww grid $ds9(info).lowhighTitle -row $row -column 0 -sticky w grid $ds9(info).lowValue -row $row -column 2 -padx 2 -sticky w grid $ds9(info).highValue -row $row -column 4 -padx 2 -sticky w incr row } else { grid forget $ds9(info).lowhighTitle grid forget $ds9(info).lowValue grid forget $ds9(info).highValue } # value $ds9(info).value configure -width $ww $ds9(info).valueR configure -width $ww $ds9(info).valueG configure -width $ww $ds9(info).valueB configure -width $ww grid $ds9(info).valueTitle -row $row -column 0 -sticky w set ds9(info,row,value) $row set ds9(info,row,value,red) $row set ds9(info,row,value,green) $row set ds9(info,row,value,blue) $row incr row UpdateFrameInfoBox base # unit if {$view(info,bunit)} { $ds9(info).bunitValue configure -width $ww grid $ds9(info).bunitTitle -row $row -column 0 -sticky w grid $ds9(info).bunitValue -row $row -column 2 -padx 2 -sticky w incr row } else { grid forget $ds9(info).bunitTitle grid forget $ds9(info).bunitValue } # wcs foreach ll {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { $ds9(info).wcsLabel$ll configure -width $ww $ds9(info).wcsXValue$ll configure -width $ww $ds9(info).wcsYValue$ll configure -width $ww $ds9(info).wcsZValue$ll configure -width $ww if {$view(info,wcs$ll)} { grid $ds9(info).wcsLabel$ll -row $row -column 0 -sticky w grid $ds9(info).wcsXLabel$ll -row $row -column 1 -sticky w grid $ds9(info).wcsXValue$ll -row $row -column 2 -padx 2 grid $ds9(info).wcsYLabel$ll -row $row -column 3 -sticky w grid $ds9(info).wcsYValue$ll -row $row -column 4 -padx 2 set ds9(info,row,wcs$ll) $row incr row } else { grid forget $ds9(info).wcsLabel$ll grid forget $ds9(info).wcsXLabel$ll grid forget $ds9(info).wcsXValue$ll grid forget $ds9(info).wcsYLabel$ll grid forget $ds9(info).wcsYValue$ll } } # detector if {$view(info,detector)} { $ds9(info).detectorXValue configure -width $ww $ds9(info).detectorYValue configure -width $ww $ds9(info).detectorZValue configure -width $ww grid $ds9(info).detectorTitle -row $row -column 0 -sticky w grid $ds9(info).detectorXLabel -row $row -column 1 -sticky w grid $ds9(info).detectorXValue -row $row -column 2 -padx 2 grid $ds9(info).detectorYLabel -row $row -column 3 -sticky w grid $ds9(info).detectorYValue -row $row -column 4 -padx 2 set ds9(info,row,detector) $row incr row } else { grid forget $ds9(info).detectorTitle grid forget $ds9(info).detectorXLabel grid forget $ds9(info).detectorXValue grid forget $ds9(info).detectorYLabel grid forget $ds9(info).detectorYValue } # amplifier if {$view(info,amplifier)} { $ds9(info).amplifierXValue configure -width $ww $ds9(info).amplifierYValue configure -width $ww $ds9(info).amplifierZValue configure -width $ww grid $ds9(info).amplifierTitle -row $row -column 0 -sticky w grid $ds9(info).amplifierXLabel -row $row -column 1 -sticky w grid $ds9(info).amplifierXValue -row $row -column 2 -padx 2 grid $ds9(info).amplifierYLabel -row $row -column 3 -sticky w grid $ds9(info).amplifierYValue -row $row -column 4 -padx 2 set ds9(info,row,amplifier) $row incr row } else { grid forget $ds9(info).amplifierTitle grid forget $ds9(info).amplifierXLabel grid forget $ds9(info).amplifierXValue grid forget $ds9(info).amplifierYLabel grid forget $ds9(info).amplifierYValue } # physical if {$view(info,physical)} { $ds9(info).physicalXValue configure -width $ww $ds9(info).physicalYValue configure -width $ww $ds9(info).physicalZValue configure -width $ww grid $ds9(info).physicalTitle -row $row -column 0 -sticky w grid $ds9(info).physicalXLabel -row $row -column 1 -sticky w grid $ds9(info).physicalXValue -row $row -column 2 -padx 2 grid $ds9(info).physicalYLabel -row $row -column 3 -sticky w grid $ds9(info).physicalYValue -row $row -column 4 -padx 2 set ds9(info,row,physical) $row incr row } else { grid forget $ds9(info).physicalTitle grid forget $ds9(info).physicalXLabel grid forget $ds9(info).physicalXValue grid forget $ds9(info).physicalYLabel grid forget $ds9(info).physicalYValue } # image if {$view(info,image)} { $ds9(info).imageXValue configure -width $ww $ds9(info).imageYValue configure -width $ww $ds9(info).imageZValue configure -width $ww grid $ds9(info).imageTitle -row $row -column 0 -sticky w grid $ds9(info).imageXLabel -row $row -column 1 -sticky w grid $ds9(info).imageXValue -row $row -column 2 -padx 2 grid $ds9(info).imageYLabel -row $row -column 3 -sticky w grid $ds9(info).imageYValue -row $row -column 4 -padx 2 set ds9(info,row,image) $row incr row } else { grid forget $ds9(info).imageTitle grid forget $ds9(info).imageXLabel grid forget $ds9(info).imageXValue grid forget $ds9(info).imageYLabel grid forget $ds9(info).imageYValue } # frame, zoom, angle if {$view(info,frame)} { $ds9(info).zoomValue configure -width $ww $ds9(info).angleValue configure -width $ww grid $ds9(info).frame -row $row -column 0 -sticky w grid $ds9(info).zoomtitle -row $row -column 1 -sticky w grid $ds9(info).zoomValue -row $row -column 2 -padx 2 -sticky w grid $ds9(info).angleValue -row $row -column 4 -padx 2 -sticky w grid $ds9(info).angleTitle -row $row -column 5 -sticky w incr row } else { grid forget $ds9(info).frame grid forget $ds9(info).zoomtitle grid forget $ds9(info).zoomValue grid forget $ds9(info).angleTitle grid forget $ds9(info).angleValue } # dummy grid forget $ds9(info).dummy } proc LayoutInfoPanelVert {} { global ds9 global view set ww 13 set row 0 # filename if {$view(info,filename)} { $ds9(info).fileValue configure -width $ww grid $ds9(info).fileTitle -row $row -column 1 -sticky w incr row grid $ds9(info).fileValue -row $row -column 1 -padx 2 -sticky w incr row } else { grid forget $ds9(info).fileTitle grid forget $ds9(info).fileValue } # object if {$view(info,object)} { $ds9(info).objValue configure -width $ww grid $ds9(info).objTitle -row $row -column 1 -sticky w incr row grid $ds9(info).objValue -row $row -column 1 -padx 2 -sticky w incr row } else { grid forget $ds9(info).objTitle grid forget $ds9(info).objValue } # keyword if {$view(info,keyword)} { $ds9(info).keyWord configure -width $ww $ds9(info).keyValue configure -width $ww grid $ds9(info).keyWord -row $row -column 1 -sticky w incr row grid $ds9(info).keyValue -row $row -column 1 -padx 2 -sticky w incr row } else { grid forget $ds9(info).keyWord grid forget $ds9(info).keyValue } # minmax if {$view(info,minmax)} { $ds9(info).minValue configure -width $ww $ds9(info).minXValue configure -width $ww $ds9(info).minYValue configure -width $ww grid $ds9(info).minTitle -row $row -column 1 -sticky w incr row grid $ds9(info).minXLabel -row $row -column 0 -sticky e grid $ds9(info).minXValue -row $row -column 1 -padx 2 -sticky w incr row grid $ds9(info).minYLabel -row $row -column 0 -sticky e grid $ds9(info).minYValue -row $row -column 1 -padx 2 -sticky w incr row grid $ds9(info).minValue -row $row -column 1 -padx 2 -sticky w incr row $ds9(info).maxXValue configure -width $ww $ds9(info).maxValue configure -width $ww $ds9(info).maxYValue configure -width $ww grid $ds9(info).maxTitle -row $row -column 1 -sticky w incr row grid $ds9(info).maxXLabel -row $row -column 0 -sticky e grid $ds9(info).maxXValue -row $row -column 1 -padx 2 -sticky w incr row grid $ds9(info).maxYLabel -row $row -column 0 -sticky e grid $ds9(info).maxYValue -row $row -column 1 -padx 2 -sticky w incr row grid $ds9(info).maxValue -row $row -column 1 -padx 2 -sticky w incr row } else { grid forget $ds9(info).minTitle grid forget $ds9(info).minValue grid forget $ds9(info).minXValue grid forget $ds9(info).minYValue grid forget $ds9(info).maxTitle grid forget $ds9(info).maxValue grid forget $ds9(info).maxXValue grid forget $ds9(info).maxYValue } # lowhigh if {$view(info,lowhigh)} { $ds9(info).lowValue configure -width $ww $ds9(info).highValue configure -width $ww grid $ds9(info).lowhighTitle -row $row -column 1 -sticky w incr row grid $ds9(info).lowValue -row $row -column 1 -padx 2 -sticky w incr row grid $ds9(info).highValue -row $row -column 1 -padx 2 -sticky w incr row } else { grid forget $ds9(info).lowhighTitle grid forget $ds9(info).lowValue grid forget $ds9(info).highValue } # value $ds9(info).value configure -width $ww $ds9(info).valueR configure -width $ww $ds9(info).valueG configure -width $ww $ds9(info).valueB configure -width $ww grid $ds9(info).valueTitle -row $row -column 1 -sticky w incr row set ds9(info,row,value) $row set ds9(info,row,value,red) $row incr row set ds9(info,row,value,green) $row incr row set ds9(info,row,value,blue) $row incr row UpdateFrameInfoBox base # units if {$view(info,bunit)} { $ds9(info).bunitValue configure -width $ww grid $ds9(info).bunitTitle -row $row -column 1 -sticky w incr row grid $ds9(info).bunitValue -row $row -column 1 -padx 2 -sticky w incr row } else { grid forget $ds9(info).bunitTitle grid forget $ds9(info).bunitValue } # wcs foreach ll {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { $ds9(info).wcsLabel$ll configure -width $ww $ds9(info).wcsXValue$ll configure -width $ww $ds9(info).wcsYValue$ll configure -width $ww $ds9(info).wcsZValue$ll configure -width $ww if {$view(info,wcs$ll)} { grid $ds9(info).wcsLabel$ll -row $row -column 1 -sticky ew incr row grid $ds9(info).wcsXLabel$ll -row $row -column 0 -sticky e grid $ds9(info).wcsXValue$ll -row $row -column 1 -padx 2 incr row grid $ds9(info).wcsYLabel$ll -row $row -column 0 -sticky e grid $ds9(info).wcsYValue$ll -row $row -column 1 -padx 2 incr row set ds9(info,row,wcs$ll) $row incr row } else { grid forget $ds9(info).wcsLabel$ll grid forget $ds9(info).wcsXLabel$ll grid forget $ds9(info).wcsXValue$ll grid forget $ds9(info).wcsYLabel$ll grid forget $ds9(info).wcsYValue$ll } } # detector if {$view(info,detector)} { $ds9(info).detectorXValue configure -width $ww $ds9(info).detectorYValue configure -width $ww $ds9(info).detectorZValue configure -width $ww grid $ds9(info).detectorTitle -row $row -column 1 -sticky ew incr row grid $ds9(info).detectorXLabel -row $row -column 0 -sticky e grid $ds9(info).detectorXValue -row $row -column 1 -padx 2 incr row grid $ds9(info).detectorYLabel -row $row -column 0 -sticky e grid $ds9(info).detectorYValue -row $row -column 1 -padx 2 incr row set ds9(info,row,detector) $row incr row } else { grid forget $ds9(info).detectorTitle grid forget $ds9(info).detectorXLabel grid forget $ds9(info).detectorXValue grid forget $ds9(info).detectorYLabel grid forget $ds9(info).detectorYValue } # amplifier if {$view(info,amplifier)} { $ds9(info).amplifierXValue configure -width $ww $ds9(info).amplifierYValue configure -width $ww $ds9(info).amplifierZValue configure -width $ww grid $ds9(info).amplifierTitle -row $row -column 1 -sticky ew incr row grid $ds9(info).amplifierXLabel -row $row -column 0 -sticky e grid $ds9(info).amplifierXValue -row $row -column 1 -padx 2 incr row grid $ds9(info).amplifierYLabel -row $row -column 0 -sticky e grid $ds9(info).amplifierYValue -row $row -column 1 -padx 2 incr row set ds9(info,row,amplifier) $row incr row } else { grid forget $ds9(info).amplifierTitle grid forget $ds9(info).amplifierXLabel grid forget $ds9(info).amplifierXValue grid forget $ds9(info).amplifierYLabel grid forget $ds9(info).amplifierYValue } # physical if {$view(info,physical)} { $ds9(info).physicalXValue configure -width $ww $ds9(info).physicalYValue configure -width $ww $ds9(info).physicalZValue configure -width $ww grid $ds9(info).physicalTitle -row $row -column 1 -sticky ew incr row grid $ds9(info).physicalXLabel -row $row -column 0 -sticky e grid $ds9(info).physicalXValue -row $row -column 1 -padx 2 incr row grid $ds9(info).physicalYLabel -row $row -column 0 -sticky e grid $ds9(info).physicalYValue -row $row -column 1 -padx 2 incr row set ds9(info,row,physical) $row incr row } else { grid forget $ds9(info).physicalTitle grid forget $ds9(info).physicalXLabel grid forget $ds9(info).physicalXValue grid forget $ds9(info).physicalYLabel grid forget $ds9(info).physicalYValue } # image if {$view(info,image)} { $ds9(info).imageXValue configure -width $ww $ds9(info).imageYValue configure -width $ww $ds9(info).imageZValue configure -width $ww grid $ds9(info).imageTitle -row $row -column 1 -sticky ew incr row grid $ds9(info).imageXLabel -row $row -column 0 -sticky e grid $ds9(info).imageXValue -row $row -column 1 -padx 2 incr row grid $ds9(info).imageYLabel -row $row -column 0 -sticky e grid $ds9(info).imageYValue -row $row -column 1 -padx 2 incr row set ds9(info,row,image) $row incr row } else { grid forget $ds9(info).imageTitle grid forget $ds9(info).imageXLabel grid forget $ds9(info).imageXValue grid forget $ds9(info).imageYLabel grid forget $ds9(info).imageYValue } # frame, zoom, angle if {$view(info,frame)} { $ds9(info).zoomValue configure -width $ww $ds9(info).angleValue configure -width $ww grid $ds9(info).frame -row $row -column 1 -sticky ew incr row grid $ds9(info).zoomtitle -row $row -column 0 -sticky e grid $ds9(info).zoomValue -row $row -column 1 -padx 2 incr row grid $ds9(info).angleTitle -row $row -column 0 -sticky e grid $ds9(info).angleValue -row $row -column 1 -padx 2 incr row } else { grid forget $ds9(info).frame grid forget $ds9(info).zoomtitle grid forget $ds9(info).zoomValue grid forget $ds9(info).angleTitle grid forget $ds9(info).angleValue } # dummy global ds9 set ds9(row) $row grid $ds9(info).dummy -row $row -column 1 grid rowconfigure $ds9(info) $row -weight 1 } saods9/ds9/library/layout.tcl000644 000765 000000 00000055323 13012655351 016561 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CanvasDef {} { global canvas global icanvas global ds9 # also adjust info.tcl LayoutInfoPanelHorz switch $ds9(wm) { x11 {set icanvas(horz,width) 738} aqua {set icanvas(horz,width) 777} win32 {set icanvas(horz,width) 740} } set icanvas(horz,height) 480 set icanvas(vert,width) 640 set icanvas(vert,height) 640 set canvas(width) $icanvas(horz,width) set canvas(height) $icanvas(horz,height) set canvas(gap) 4 switch $ds9(wm) { x11 { # this is not fool proof. it does not take into account redirecting # the DISPLAY. There must be a better way. global tcl_platform switch -- $tcl_platform(os) { Darwin {set canvas(gap,bottom) 14} default {set canvas(gap,bottom) 0} } } aqua {set canvas(gap,bottom) 14} win32 {set canvas(gap,bottom) 0} } } proc BlinkDef {} { global blink global iblink global pblink set iblink(id) 0 set iblink(index) -1 set blink(interval) 500 array set pblink [array get blink] } proc TileDef {} { global tile global itile global ptile set itile(top) .tile set itile(mb) .tilemb set tile(mode) grid set tile(grid,row) 10 set tile(grid,col) 10 set tile(grid,mode) automatic set tile(grid,dir) x set tile(grid,gap) 4 array set ptile [array get tile] } proc ViewDef {} { global view global pview set view(layout) horizontal set view(info) 1 set view(panner) 1 set view(magnifier) 1 set view(buttons) 1 set view(colorbar) 1 set view(graph,horz) 0 set view(graph,vert) 0 set view(info,filename) 1 set view(info,object) 1 set view(info,keyvalue) {} set view(info,keyword) 0 set view(info,minmax) 0 set view(info,minmax,xy) 0 set view(info,lowhigh) 0 set view(info,bunit) 0 set view(info,wcs) 1 foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} { set "view(info,wcs$l)" 0 } set view(info,detector) 0 set view(info,amplifier) 0 set view(info,physical) 1 set view(info,image) 1 set view(info,frame) 1 array set pview [array get view] } # canvas proc CreateCanvas {} { global ds9 global canvas LayoutViewAdjust diff set ww [expr $canvas(width)+$diff(x)] set hh [expr $canvas(height)+$diff(y)] global debug if {$debug(tcl,layout)} { puts stderr "CreateCanvas $canvas(width) $canvas(height) ${ww}x${hh}" } set ds9(image) [ttk::frame $ds9(main).f] set ds9(canvas) [canvas $ds9(image).c -width $ww -height $hh \ -highlightthickness 0 -insertofftime 0 -bg $ds9(bg)] grid rowconfigure $ds9(image) 0 -weight 1 grid columnconfigure $ds9(image) 0 -weight 1 grid $ds9(canvas) -row 0 -column 0 -sticky news # extra space for window tab if {$canvas(gap,bottom)>0} { set f [frame $ds9(image).b -width 1 -height $canvas(gap,bottom) \ -bg $ds9(bg)] grid $f -row 1 -column 0 -sticky ew } # needed to realize window so Layout routines will work grid $ds9(image) } proc InitCanvas {} { global ds9 # Bindings bind $ds9(canvas) [list NextFrame] bind $ds9(canvas) [list PrevFrame] switch $ds9(wm) { x11 {bind $ds9(canvas) [list PrevFrame]} aqua - win32 {} } bind $ds9(canvas) [list ConfigureView] switch $ds9(wm) { x11 - aqua { bind $ds9(canvas) [list focus $ds9(canvas)] bind $ds9(canvas) [list focus {}] } win32 {} } switch $ds9(wm) { x11 {} aqua - win32 {bind $ds9(canvas) [list MouseWheelFrame %x %y %D]} } # backward compatible bindings switch $ds9(wm) { x11 - win32 { bind $ds9(canvas) {Button3Canvas %x %y} bind $ds9(canvas) {Motion3Canvas %x %y} bind $ds9(canvas) {Release3Canvas %x %y} } aqua { # swap button-2 and button-3 on the mighty mouse bind $ds9(canvas) {Button3Canvas %x %y} bind $ds9(canvas) {Motion3Canvas %x %y} bind $ds9(canvas) {Release3Canvas %x %y} # x11 command key emulation bind $ds9(canvas) {Button3Canvas %x %y} bind $ds9(canvas) {Motion3Canvas %x %y} bind $ds9(canvas) {Release3Canvas %x %y} } } # freeze bind $ds9(canvas) {ToggleBindEvents} } proc Button3Canvas {x y} { global ds9 global debug if {$debug(tcl,events)} { puts stderr "Button3Canvas" } set ds9(b3) 1 ColorbarButton3 $x $y } proc Motion3Canvas {x y} { global debug if {$debug(tcl,events)} { puts stderr "Motion3Canvas" } ColorbarMotion3 $x $y } proc Release3Canvas {x y} { global ds9 global debug if {$debug(tcl,events)} { puts stderr "Release3Canvas" } set ds9(b3) 0 ColorbarRelease3 $x $y } proc UnBindEventsCanvas {} { global ds9 foreach f $ds9(active) { UnBindEventsFrame $f } } proc BindEventsCanvas {} { global ds9 global current switch -- $ds9(display) { single - blink {BindEventsFrame $current(frame)} tile { foreach f $ds9(active) { BindEventsFrame $f } } } } # view proc ConfigureView {} { global ds9 global canvas global debug if {$debug(tcl,layout)} { puts stderr "ConfigureView old $canvas(width) $canvas(height)" } # calculate ds9(canvas) size LayoutViewAdjust diff # adjust window size set canvas(width) [expr [winfo width $ds9(canvas)]-$diff(x)] set canvas(height) [expr [winfo height $ds9(canvas)]-$diff(y)] if {$debug(tcl,layout)} { puts stderr "ConfigureView new $canvas(width) $canvas(height)" } LayoutView } proc UpdateView {} { global ds9 global canvas # note: assume canvas(width) and canvas(height) have been set to desired # values. global debug if {$debug(tcl,layout)} { puts stderr "UpdateView to $canvas(width) x $canvas(height)" } # save current size set wo [winfo width $ds9(top)] set ho [winfo height $ds9(top)] # calculate ds9(canvas) size LayoutViewAdjust diff # adjust window size set ww [expr $canvas(width)+$diff(x)] set hh [expr $canvas(height)+$diff(y)] # determine how much to change set wc [winfo width $ds9(canvas)] set hc [winfo height $ds9(canvas)] set wt [winfo width $ds9(top)] set ht [winfo height $ds9(top)] if {$debug(tcl,layout)} { puts stderr "UpdateView before ds9(top) $wt x $ht" } set w [expr $ww - $wc + $wt] set h [expr $hh - $hc + $ht] if {$debug(tcl,layout)} { puts stderr "UpdateView after ds9(top) $w x $h" } # change window size wm geometry $ds9(top) ${w}x${h} LayoutView } proc LayoutView {} { global view global debug if {$debug(tcl,layout)} { puts stderr "LayoutView" } switch $view(layout) { horizontal {LayoutViewHorz} vertical {LayoutViewVert} } LayoutInfoPanel LayoutButtons LayoutFrames LayoutColorbar LayoutGraphs } proc LayoutViewAdjust {varname} { upvar $varname var global debug if {$debug(tcl,layout)} { puts stderr "LayoutViewAdjust" } global view global colorbar global icolorbar global igraph global canvas global ds9 set var(x) 0 set var(y) 0 set cbh [expr $view(colorbar) && \ [string equal $colorbar(orientation) {horizontal}]] set cbv [expr $view(colorbar) && \ [string equal $colorbar(orientation) {vertical}]] set grh $view(graph,horz) set grv $view(graph,vert) if {$colorbar(numerics)} { # ww horizontal: tickgap set ww 12 # hh vertical: approx number of numerals to display set hh 7 # can't trust 'tk scaling' switch $ds9(wm) { x11 - win32 { set scaling [tk scaling] if {$scaling == Inf} { set scaling 1.334 } } aqua {set scaling 1.4} } set icolorbar(horizontal,height) \ [expr int($colorbar(size) + $colorbar(font,size)*$scaling+$ww)] set icolorbar(vertical,width) \ [expr $colorbar(size) + $colorbar(font,size)*$hh] } else { set icolorbar(horizontal,height) [expr $colorbar(size) +2] set icolorbar(vertical,width) [expr $colorbar(size) +2] } # basics if {$cbh} { incr var(y) $icolorbar(horizontal,height) } if {$cbv} { incr var(x) $icolorbar(vertical,width) } if {$grh} { incr var(y) $igraph(size) } if {$grv} { incr var(x) $igraph(size) } # canvas gap if {$cbh || $grh} { incr var(y) $canvas(gap) } if {$cbv || $grv} { incr var(x) $canvas(gap) } # graph gap if {$grv && !$cbh} { incr var(y) $igraph(gap,y) } if {$grh && !$cbv} { incr var(x) $igraph(gap,x) } global debug if {$debug(tcl,layout)} { puts stderr "LayoutViewAdjust $var(x) $var(y)" } } proc LayoutOrient {} { global ds9 global canvas global debug if {$debug(tcl,layout)} { puts stderr "LayoutOrient" } # save original canvas size set ww $canvas(width) set hh $canvas(height) # horizontal grid rowconfigure $ds9(main) 4 -weight 0 grid columnconfigure $ds9(main) 0 -weight 0 # vertical grid rowconfigure $ds9(main) 0 -weight 0 grid columnconfigure $ds9(main) 4 -weight 0 grid forget $ds9(panel) grid forget $ds9(panel,sep) grid forget $ds9(buttons) grid forget $ds9(buttons,sep) grid forget $ds9(image) pack forget $ds9(info) pack forget $ds9(panner) pack forget $ds9(magnifier) UpdateView update # restore original canvas size set canvas(width) $ww set canvas(height) $hh UpdateView } proc LayoutViewHorz {} { global ds9 global current global view # canvas grid rowconfigure $ds9(main) 4 -weight 1 grid columnconfigure $ds9(main) 0 -weight 1 grid $ds9(image) -row 4 -column 0 -sticky news # info panel if {$view(info) || $view(magnifier) || $view(panner)} { grid $ds9(panel) -row 0 -column 0 -sticky ew -columnspan 3 $ds9(panel,sep) configure -orient horizontal grid $ds9(panel,sep) -row 1 -column 0 -sticky ew -columnspan 3 } else { grid forget $ds9(panel) grid forget $ds9(panel,sep) } if {$view(info)} { pack $ds9(info) -side left -anchor nw -padx 2 -pady 2 \ -fill x -expand true } else { pack forget $ds9(info) } if {$view(panner)} { pack $ds9(panner) -side right -padx 2 -pady 2 } else { pack forget $ds9(panner) } if {$view(magnifier)} { pack $ds9(magnifier) -side right -padx 2 -pady 2 if {$view(panner)} { pack $ds9(magnifier) -before $ds9(panner) } } else { pack forget $ds9(magnifier) } # buttons if {$view(buttons)} { grid $ds9(buttons) -row 2 -sticky ew -columnspan 3 $ds9(buttons,sep) configure -orient horizontal grid $ds9(buttons,sep) -row 3 -column 0 -sticky ew -columnspan 3 } else { grid forget $ds9(buttons) grid forget $ds9(buttons,sep) } } proc LayoutViewVert {} { global ds9 global current global view # canvas grid rowconfigure $ds9(main) 0 -weight 1 grid columnconfigure $ds9(main) 4 -weight 1 grid $ds9(image) -row 0 -column 4 -sticky news # info panel if {$view(info) || $view(magnifier) || $view(panner)} { grid $ds9(panel) -row 0 -column 0 -sticky ns $ds9(panel,sep) configure -orient vertical grid $ds9(panel,sep) -row 0 -column 1 -sticky ns } else { grid forget $ds9(panel) grid forget $ds9(panel,sep) } if {$view(magnifier)} { pack $ds9(magnifier) -side top -padx 2 -pady 2 } else { pack forget $ds9(magnifier) } if {$view(info)} { pack $ds9(info) -side top -padx 2 -pady 2 -fill y -expand true if {$view(magnifier)} { pack $ds9(info) -after $ds9(magnifier) } } else { pack forget $ds9(info) } if {$view(panner)} { pack $ds9(panner) -side bottom -padx 2 -pady 2 } else { pack forget $ds9(panner) } # buttons if {$view(buttons)} { grid $ds9(buttons) -row 0 -column 2 -sticky ns $ds9(buttons,sep) configure -orient vertical grid $ds9(buttons,sep) -row 0 -column 3 -sticky ns } else { grid forget $ds9(buttons) grid forget $ds9(buttons,sep) } } proc LayoutFrames {} { global ds9 global current global tile global view global colorbar # turn everything off foreach f $ds9(frames) { $f hide $f highlite off $f panner off $f magnifier off UnBindEventsFrame $f } if {$ds9(active,num) > 0} { switch -- $ds9(display) { single {TileOne} tile { switch -- $tile(mode) { row {TileRect 1 $ds9(active,num) $tile(grid,gap)} column {TileRect $ds9(active,num) 1 $tile(grid,gap)} grid { switch -- $tile(grid,mode) { automatic { TileRect [expr int(sqrt($ds9(active,num)-1))+1] \ [expr int(sqrt($ds9(active,num))+.5)] \ $tile(grid,gap) } manual { TileRect \ $tile(grid,col) \ $tile(grid,row) \ $tile(grid,gap) } } } } } blink {TileOne} } } else { set current(frame) {} set ds9(next) {} # panner if {$view(panner)} { panner clear } # magnifier if {$view(magnifier)} { magnifier clear } # process proper colorbar colorbar show colorbarrgb hide $ds9(canvas) raise colorbar colorbarrgb set current(colorbar) colorbar set colorbar(map) [colorbar get name] set colorbar(invert) [colorbar get invert] # update menus/dialogs UpdateDS9 } } # This procedure is called when we have only 1 frames to display proc TileOne {} { global ds9 global view global current global canvas global colorbar set ww $canvas(width) set hh $canvas(height) set xx 0 set yy 0 foreach f $ds9(active) { $f configure -x $xx -y $yy -width $ww -height $hh -anchor nw } # only show the current frame $current(frame) show FrameToFront } proc TileRect {numx numy gap} { global view global canvas global tile set ww $canvas(width) set hh $canvas(height) set w [expr int(($ww-$gap*($numx-1))/$numx)] set h [expr int(($hh-$gap*($numy-1))/$numy)] switch $tile(grid,dir) { x { for {set jj 0} {$jj<$numy} {incr jj} { for {set ii 0} {$ii<$numx} {incr ii} { set nn [expr $jj*$numx + $ii] set x($nn) [expr ($w+$gap)*$ii] set y($nn) [expr ($h+$gap)*$jj] } } } y { for {set ii 0} {$ii<$numx} {incr ii} { for {set jj 0} {$jj<$numy} {incr jj} { set nn [expr $ii*$numy + $jj] set x($nn) [expr ($w+$gap)*$ii] set y($nn) [expr ($h+$gap)*$jj] } } } } TileIt $w $h x y [expr $numx*$numy] } proc TileIt {ww hh xvar yvar nn} { upvar $xvar x upvar $yvar y global ds9 global current set ii 0 foreach ff $ds9(active) { if {$ii<$nn} { $ff configure -x $x($ii) -y $y($ii) \ -width $ww -height $hh -anchor nw $ff show $ds9(canvas) raise $ff if {!$ds9(freeze)} { BindEventsFrame $ff } } incr ii } # if manual grid, current frame could be not included if {$current(frame) != {}} { $current(frame) colorbar tag "\{[$current(colorbar) get tag]\}" } if {$ds9(active,num) > $nn} { set current(frame) [lindex $ds9(active) 0] } FrameToFront } proc DisplayDefaultDialog {} { global canvas global ed set w {.defdpy} set ed(ok) 0 set ed(x) $canvas(width) set ed(y) $canvas(height) DialogCreate $w [msgcat::mc {Display Size}] ed(ok) # Param set f [ttk::frame $w.param] ttk::label $f.xTitle -text {X} ttk::label $f.yTitle -text {Y} ttk::entry $f.x -textvariable ed(x) -width 10 ttk::entry $f.y -textvariable ed(y) -width 10 ttk::label $f.xunit -text [msgcat::mc {Pixels}] ttk::label $f.yunit -text [msgcat::mc {Pixels}] grid $f.xTitle $f.x $f.xunit -padx 2 -pady 2 -sticky w grid $f.yTitle $f.y $f.yunit -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w $w.param.x select range 0 end DialogWait $w ed(ok) $w.param.x DialogDismiss $w if {$ed(ok)} { set canvas(width) $ed(x) set canvas(height) $ed(y) UpdateView } set rr $ed(ok) unset ed return $rr } proc ViewHorzCmd {} { global canvas global icanvas set canvas(width) $icanvas(horz,width) set canvas(height) $icanvas(horz,height) LayoutOrient } proc ViewVertCmd {} { global canvas global icanvas set canvas(width) $icanvas(vert,width) set canvas(height) $icanvas(vert,height) LayoutOrient } # Process Cmds proc ProcessHeightCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized # can't use ProcessRealize RealizeDS9 global canvas set canvas(height) [lindex $var $i] UpdateView } proc ProcessSendHeightCmd {proc id param} { global canvas $proc $id "$canvas(height)\n" } proc ProcessWidthCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized # can't use ProcessRealize RealizeDS9 global canvas set canvas(width) [lindex $var $i] UpdateView } proc ProcessSendWidthCmd {proc id param} { global canvas $proc $id "$canvas(width)\n" } proc ProcessViewCmd {varname iname} { upvar $varname var upvar $iname i global view global rgb global canvas global icanvas set item [string tolower [lindex $var $i]] switch -- $item { layout { incr i set item [string tolower [lindex $var $i]] switch -- $item { horizontal { set view(layout) $item ViewHorzCmd } vertical { set view(layout) $item ViewVertCmd } } } keyvalue { incr i set view(info,keyvalue) [lindex $var $i] } horizontal { # backward compatibility set view(layout) $item ViewHorzCmd } vertical { # backward compatibility set view(layout) $item ViewVertCmd } default { set yesno [lindex $var [expr $i+1]] switch -- $yesno { 1 - 0 - yes - no - on - off - true - false {incr i} default { set yesno 1 } } switch -- $item { info - panner - magnifier - buttons - colorbar {set view($item) [FromYesNo $yesno]} colorbarnumerics { # backward compatibility set colorbar(numerics) [FromYesNo $yesno] } graph { incr i set item [string tolower [lindex $var $i]] switch -- $item { horizontal { set yesno [lindex $var [expr $i+1]] switch -- $yesno { 1 - 0 - yes - no - on - off - true - false {incr i} default { set yesno 1 } } set view(graph,horz) [FromYesNo $yesno] } vertical { set yesno [lindex $var [expr $i+1]] switch -- $yesno { 1 - 0 - yes - no - on - off - true - false {incr i} default { set yesno 1 } } set view(graph,vert) [FromYesNo $yesno] } } } horzgraph { # backward compatibility set view(graph,horz) [FromYesNo $yesno] } vertgraph { # backward compatibility set view(graph,vert) [FromYesNo $yesno] } filename - object - keyword - minmax - lowhigh - units - detector - amplifier - physical - image - wcs - wcsa - wcsb - wcsc - wcsd - wcse - wcsf - wcsg - wcsh - wcsi - wcsj - wcsk - wcsl - wcsm - wcsn - wcso - wcsp - wcsq - wcsr - wcss - wcst - wcsu - wcsv - wcsw - wcsx - wcsy - wcsz - frame {set view(info,$item) [FromYesNo $yesno]} red - green - blue {set rgb($item) [FromYesNo $yesno]; RGBView} } UpdateView } } } proc ProcessSendViewCmd {proc id param} { global view switch -- [string tolower [lindex $param 0]] { layout {$proc $id "$view(layout)\n"} keyvalue {$proc $id "$view(info,keyvalue)\n"} info {$proc $id [ToYesNo $view(info)]} panner {$proc $id [ToYesNo $view(panner)]} magnifier {$proc $id [ToYesNo $view(magnifier)]} buttons {$proc $id [ToYesNo $view(buttons)]} colorbar {$proc $id [ToYesNo $view(colorbar)]} colorbarnumerics { # backward compatibility $proc $id [ToYesNo $colorbar(numerics)] } graph { switch -- [string tolower [lindex $param 1]] { horizontal {$proc $id [ToYesNo $view(graph,horz)]} vertical {$proc $id [ToYesNo $view(graph,vert)]} } } horzgraph { # backward compatibility $proc $id [ToYesNo $view(graph,horz)] } vertgraph { # backward compatibility $proc $id [ToYesNo $view(graph,vert)] } filename {$proc $id [ToYesNo $view(info,filename)]} object {$proc $id [ToYesNo $view(info,object)]} keyword {$proc $id [ToYesNo $view(info,keyword)]} minmax {$proc $id [ToYesNo $view(info,minmax)]} minmaxxy {$proc $id [ToYesNo $view(info,minmax,xy)]} lowhigh {$proc $id [ToYesNo $view(info,lowhigh)]} units {$proc $id [ToYesNo $view(info,bunit)]} detector {$proc $id [ToYesNo $view(info,detector)]} amplifier {$proc $id [ToYesNo $view(info,amplifier)]} physical {$proc $id [ToYesNo $view(info,physical)]} image {$proc $id [ToYesNo $view(info,image)]} wcs {$proc $id [ToYesNo $view(info,wcs)]} wcsa {$proc $id [ToYesNo $view(info,wcsa)]} wcsb {$proc $id [ToYesNo $view(info,wcsb)]} wcsc {$proc $id [ToYesNo $view(info,wcsc)]} wcsd {$proc $id [ToYesNo $view(info,wcsd)]} wcse {$proc $id [ToYesNo $view(info,wcse)]} wcsf {$proc $id [ToYesNo $view(info,wcsf)]} wcsg {$proc $id [ToYesNo $view(info,wcsg)]} wcsh {$proc $id [ToYesNo $view(info,wcsh)]} wcsi {$proc $id [ToYesNo $view(info,wcsi)]} wcsj {$proc $id [ToYesNo $view(info,wcsj)]} wcsk {$proc $id [ToYesNo $view(info,wcsk)]} wcsl {$proc $id [ToYesNo $view(info,wcsl)]} wcsm {$proc $id [ToYesNo $view(info,wcsm)]} wcsn {$proc $id [ToYesNo $view(info,wcsn)]} wcso {$proc $id [ToYesNo $view(info,wcso)]} wcsp {$proc $id [ToYesNo $view(info,wcsp)]} wcsq {$proc $id [ToYesNo $view(info,wcsq)]} wcsr {$proc $id [ToYesNo $view(info,wcsr)]} wcss {$proc $id [ToYesNo $view(info,wcss)]} wcst {$proc $id [ToYesNo $view(info,wcst)]} wcsu {$proc $id [ToYesNo $view(info,wcsu)]} wcsv {$proc $id [ToYesNo $view(info,wcsv)]} wcsw {$proc $id [ToYesNo $view(info,wcsw)]} wcsx {$proc $id [ToYesNo $view(info,wcsx)]} wcsy {$proc $id [ToYesNo $view(info,wcsy)]} wcsz {$proc $id [ToYesNo $view(info,wcsz)]} frame {$proc $id [ToYesNo $view(info,frame)]} default { # backward compatibility $proc $id "$view(layout)\n" } } } saods9/ds9/library/line.tcl000644 000765 000000 00000005314 12705445647 016203 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LineDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # variables set arrows [$var(frame) get marker $var(id) line arrow] set var(p1arrow) [lindex $arrows 0] set var(p2arrow) [lindex $arrows 1] # procs set var(which) line set var(proc,apply) LineApply set var(proc,coordCB) LineCoordCB set var(proc,editCB) LineEditCB set var(proc,distCB) LineDistCB # base MarkerBaseLineDialog $varname 375 150 # raise plot? global marker set var(plot2d) $marker(plot2d) # analysis $var(mb) add cascade -label [msgcat::mc {Analysis}] -menu $var(mb).analysis menu $var(mb).analysis # plot2d MarkerAnalysisPlot2dDialog $varname set f $var(top).param # Arrows ttk::label $f.tarrow -text [msgcat::mc {Arrow}] ttk::checkbutton $f.p1arrow -variable ${varname}(p1arrow) \ -text [msgcat::mc {Left}] -command "LineArrow $varname" ttk::checkbutton $f.p2arrow -variable ${varname}(p2arrow) \ -text [msgcat::mc {Right}] -command "LineArrow $varname" grid $f.tarrow $f.p1arrow $f.p2arrow -padx 2 -pady 2 -sticky w } # actions proc LineApply {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) line point $var(system) $var(sky) \ $var(x) $var(y) $var(x2) $var(y2) MarkerBaseLineApply $varname } # support proc LineArrow {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) line arrow $var(p1arrow) $var(p2arrow) } # callbacks proc LineCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "LineCoordCB" } MarkerAnalysisPlot2dSystem $varname MarkerBaseCoordCB $varname LineEditCB $varname } proc LineEditCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "LineEditCB" } MarkerBaseLineEditCB $varname set var(dist) [$var(frame) get marker $var(id) line length \ $var(dcoord) $var(dformat)] set var(angle) [$var(frame) get marker $var(id) angle \ $var(system) $var(sky)] } proc LineDistCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "LineDistCB" } set var(dist) [$var(frame) get marker $var(id) line length \ $var(dcoord) $var(dformat)] } saods9/ds9/library/load.tcl000644 000765 000000 00000025554 12705445647 016203 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MultiLoad {{layer {}} {mode {}}} { global ds9 global current global debug if {$debug(tcl,layout)} { puts stderr "MultiLoad" } if {$layer != {} || $mode != {}} { return } if {$current(frame) != {}} { if {![$current(frame) has fits]} { return } switch -- [$current(frame) get type] { base - 3d {CreateFrame} rgb {} } } else { CreateFrame return } # go into tile mode if more than one set cnt [llength $ds9(frames)] if {$cnt > 1 && $current(display) != "tile"} { set current(display) tile DisplayMode } } proc MultiLoadBase {} { global ds9 global current global debug if {$debug(tcl,layout)} { puts stderr "MultiLoadBase" } if {$current(frame) != {}} { if {![$current(frame) has fits]} { return } CreateFrame } else { CreateFrame return } # go into tile mode if more than one set cnt [llength $ds9(frames)] if {$cnt > 1 && $current(display) != "tile"} { set current(display) tile DisplayMode } } proc MultiLoadRGB {} { global ds9 global current global debug if {$debug(tcl,layout)} { puts stderr "MultiLoadRGB" } if {$current(frame) != {}} { if {![$current(frame) has fits]} { return } CreateRGBFrame } else { CreateRGBFrame return } # go into tile mode if more than one set cnt [llength $ds9(frames)] if {$cnt > 1 && $current(display) != "tile"} { set current(display) tile DisplayMode } } # used by backup proc ProcessLoad {{err 1}} { global current global loadParam global ds9 # restrict load type for windows switch $ds9(wm) { x11 - aqua {} win32 { switch -- $loadParam(load,type) { alloc - allocgz - channel - var - photo {} mmap - mmapincr { set loadParam(load,type) allocgz set loadParam(file,fn) $loadParam(file,name) } smmap - shared - sshared - socket - socketgz {Error "[msgcat::mc {This function is not currently supported for this port.}]"} } } } if {[catch { switch -- $loadParam(load,type) { alloc - allocgz {$current(frame) load $loadParam(file,type) \ $loadParam(file,mode) \ \{$loadParam(file,name)\} \ $loadParam(load,type) \ \{$loadParam(file,fn)\} \ $loadParam(load,layer)} channel { fconfigure $loadParam(channel,name) -translation binary \ -encoding binary $current(frame) load $loadParam(file,type) \ $loadParam(file,mode) \ \{$loadParam(file,name)\} \ $loadParam(load,type) \ $loadParam(channel,name) \ $loadParam(load,layer) # clean up catch {close $loadParam(channel,name)} } mmap - mmapincr {$current(frame) load $loadParam(file,type) \ $loadParam(file,mode) \ \{$loadParam(file,name)\} \ $loadParam(load,type) \ $loadParam(load,layer)} smmap {$current(frame) load $loadParam(file,type) \ $loadParam(file,mode) \ \{$loadParam(file,header)\} \ \{$loadParam(file,name)\} \ $loadParam(load,type) \ $loadParam(load,layer)} shared {$current(frame) load $loadParam(file,type) \ $loadParam(file,mode) \ \{$loadParam(file,name)\} \ $loadParam(load,type) \ $loadParam(shared,idtype) \ $loadParam(shared,id) \ $loadParam(load,layer)} sshared {$current(frame) load $loadParam(file,type) \ $loadParam(file,mode) \ \{$loadParam(file,name)\} \ $loadParam(load,type) \ $loadParam(shared,idtype) \ $loadParam(shared,hdr) \ $loadParam(shared,id) \ $loadParam(load,layer)} socket - socketgz {$current(frame) load $loadParam(file,type) \ $loadParam(file,mode) \ \{$loadParam(file,name)\} \ $loadParam(load,type) \ $loadParam(socket,id) \ $loadParam(load,layer)} var {$current(frame) load $loadParam(file,type) \ $loadParam(file,mode) \ \{$loadParam(file,name)\} \ $loadParam(load,type) \ $loadParam(var,name) \ $loadParam(load,layer)} photo {$current(frame) load $loadParam(file,type) \ $loadParam(file,mode) \ $loadParam(var,name) \{$loadParam(file,name)\} } } } rr]} { if {$err} { Error "[msgcat::mc {Unable to load}] $loadParam(file,type) $loadParam(file,mode) $loadParam(file,name)" } return 0 } # save loadParam if {$loadParam(load,layer) == {}} { switch -- [$current(frame) get type] { base - 3d {ProcessLoadSaveParams $current(frame)} rgb { switch -- $loadParam(file,mode) { {rgb image} - {rgb cube} {ProcessLoadSaveParams $current(frame)} default { ProcessLoadSaveParams \ "$current(frame)[$current(frame) get rgb channel]" } } } } } unset loadParam return 1 } proc ProcessLoadSaveParams {varname} { global loadParam global current switch $loadParam(file,mode) { slice - {mosaic wcs} - {mosaic iraf} { # special case global $varname if {[info exists $varname]} { set varname "$varname.[$current(frame) get fits count]" } } } global $varname if {[info exists $varname]} { unset $varname } array set $varname [array get loadParam] # always save absolute path upvar #0 $varname var if {[file pathtype $var(file,name)] == {relative}} { set var(file,name) [file join [pwd] $var(file,name)] } } proc StartLoad {} { } proc FinishLoadPre {} { global loadParam global current global threed UpdateWCS # generate grid so updatemenu is correct GridUpdateCurrent # generate contour so updatemenu is correct UpdateContourScale ContourUpdate # just in case, frame may have been deleted before FinishLoad during startup if {$current(frame) == {}} { return } # if header(s) were open, remove them DestroyHeader $current(frame) # Cube? if {[$current(frame) has fits cube]} { CubeDialog } } proc FinishLoadPost {} { UpdateDS9 } proc FinishLoad {} { FinishLoadPre FinishLoadPost } proc IsLocalFile {fn} { # strip any brackets set aa [string first "\[" $fn] if {$aa > 0} { set fn [string range $fn 0 [expr $aa-1]] } if {![file exists $fn]} { return 0 } if {![file isfile $fn]} { return 0 } if {[file isdirectory $fn]} { return 0 } if {[file readable $fn]} { return 1 } else { return 0 } } proc ConvertFitsFile {} { foreach t {Stdin ExternalFits GzipFile BZip2File CompressFile PackFile} { if {[$t]} { return } } } proc ConvertArrayFile {} { foreach t {Stdin GzipFile BZip2File CompressFile PackFile} { if {[$t]} { return } } } # File Types proc Stdin {} { global loadParam # find -, -[], -[foo] but not -abc if {[regexp -- {^-(\[.*)?$} $loadParam(file,name)]} { set loadParam(load,type) allocgz set loadParam(file,name) "stdin[string range $loadParam(file,name) 1 end]" set loadParam(file,fn) $loadParam(file,name) return 1 } elseif {[string range $loadParam(file,name) 0 4] == "stdin" || [string range $loadParam(file,name) 0 4] == "STDIN"} { set loadParam(load,type) allocgz set loadParam(file,name) "stdin[string range $loadParam(file,name) 5 end]" set loadParam(file,fn) $loadParam(file,name) return 1 } return 0 } proc BZip2File {} { global loadParam if { [regexp {(.*)\.bz2($|\[)} $loadParam(file,name) matched root] } { if {[catch {set ch [open "| bunzip2 < $root.bz2 " r]}]} { return 0 } set loadParam(load,type) channel set loadParam(channel,name) $ch return 1 } return 0 } proc CompressFile {} { global loadParam if {[regexp {(.*)\.Z($|\[)} $loadParam(file,name) matched root]} { if {[catch {set ch [open "| uncompress < $root.Z " r]}]} { return 0 } set loadParam(load,type) channel set loadParam(channel,name) $ch return 1 } return 0 } proc PackFile {} { global loadParam if {[regexp {(.*)\.z($|\[)} $loadParam(file,name) matched root]} { if {[catch {set ch [open "| pcat $root.z " r]}]} { return 0 } set loadParam(load,type) channel set loadParam(channel,name) $ch return 1 } return 0 } proc GzipFile {} { global loadParam set fn $loadParam(file,name) set id [string first "\[" $fn] if {$id > 0} { set fn [string range $fn 0 [expr $id-1]] } catch { set ch [open $fn r] fconfigure $ch -encoding binary -translation binary set bb [read $ch 2] close $ch binary scan $bb H4 cc if {$cc == {1f8b}} { set loadParam(load,type) allocgz set loadParam(file,fn) $loadParam(file,name) return 1 } } return 0 } proc ExternalFits {} { global loadParam global extFits foreach id [array names extFits] { if {[string match $id "$loadParam(file,name)"]} { regsub -all {\$filename} $extFits($id) "$loadParam(file,name)" \ result set cmd "| $result" if {[catch {set ch [open "$cmd" r]} err]} { Error "open $cmd failed: $err" return 0 } set loadParam(load,type) channel set loadParam(channel,name) $ch return 1 } } return 0 } # Preserve proc ProcessPreserveCmd {varname iname} { upvar $varname var upvar $iname i global ds9 global scale global panzoom global marker switch -- [string tolower [lindex $var $i]] { pan { incr i set panzoom(preserve) [FromYesNo [lindex $var $i]] PreservePan } marker - regions { incr i set marker(preserve) [FromYesNo [lindex $var $i]] MarkerPreserve } } } proc ProcessSendPreserveCmd {proc id param} { global scale global panzoom global marker switch -- [string tolower $param] { scale { # backward compatibility $proc $id "no\n" } pan {$proc $id [ToYesNo $panzoom(preserve)]} regions {$proc $id [ToYesNo $marker(preserve)]} } } # Update proc ProcessUpdateCmd {varname iname} { upvar $varname var upvar $iname i global current global ds9 if {$current(frame) == {}} { return } if {[lindex $var $i] != {} && [string range [lindex $var $i] 0 0] != {-}} { switch -- [string tolower [lindex $var $i]] { on - yes - no - off { # backward compatibility } now { if {[string is integer [lindex $var [expr $i+1]]]} { $current(frame) update now \ [lindex $var [expr $i+1]] \ [lindex $var [expr $i+2]] [lindex $var [expr $i+3]] \ [lindex $var [expr $i+4]] [lindex $var [expr $i+5]] incr i 5 } else { $current(frame) update now } } {} { $current(frame) update incr i -1 } default { $current(frame) update \ [lindex $var $i] \ [lindex $var [expr $i+1]] [lindex $var [expr $i+2]] \ [lindex $var [expr $i+3]] [lindex $var [expr $i+4]] incr i 4 } } } else { $current(frame) update incr i -1 } } saods9/ds9/library/macosx.tcl000644 000765 000000 00000002706 12705445647 016550 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MacOSXOpenDocEvent {fc} { global ds9 if {$ds9(event,opendoc) != {}} { StartLoad foreach f $ds9(event,opendoc) { MultiLoad LoadFitsFile $f {} {} FileLast fitsfbox $f } FinishLoad } } proc MacOSXPrintDocEvent {bye} { global ds9 if {$ds9(event,printdoc) != {}} { set fc 0 foreach f $ds9(event,printdoc) { RealizeDS9 StartLoad MultiLoad LoadFitsFile $f {} {} FileLast fitsfbox $f FinishLoad PostScript } if {$bye} { Quit } } } proc MacOSXGetLocale {} { return [macosx locale] } #proc MacOSXPrint {} { # global ds9 # # we need to be realized # RealizeDS9 # need the colorbar levels updated # UpdateColormapLevel # # if {[macosx pm print begin [winfo width $ds9(canvas)] [winfo height $ds9(canvas)] yes]} { # foreach f $ds9(frames) { # $f macosx print # } # colorbar macosx print # colorbarrgb macosx print # macosx pm print end # } #} #proc MacOSXPrintPre {} { # global ds9 # if {[macosx pm print begin [winfo width $ds9(canvas)] [winfo height $ds9(canvas)] no]} { # foreach f $ds9(frames) { # $f macosx print # } # colorbar macosx print # colorbarrgb macosx print # macosx pm print end # } #} #proc MacOSXPageSetup {} { # macosx pm pagesetup #} saods9/ds9/library/magnifier.tcl000644 000765 000000 00000010561 12705445647 017215 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CreateMagnifier {} { global imagnifier global ds9 set ds9(magnifier) [canvas $ds9(panel).mag -width $imagnifier(size) \ -height $imagnifier(size) \ -relief groove \ -borderwidth 2 \ -highlightthickness 0 \ -insertofftime 0 \ -takefocus 0] $ds9(magnifier) create magnifier$ds9(visual) \ -width $imagnifier(size) \ -height $imagnifier(size) \ -command magnifier \ -tag magnifier \ -helvetica $ds9(helvetica) \ -courier $ds9(courier) \ -times $ds9(times) } proc MagnifierDef {} { global imagnifier global pmagnifier set imagnifier(size) 128 # prefs only set pmagnifier(cursor) 1 set pmagnifier(zoom) 4 set pmagnifier(region) 1 set pmagnifier(color) white } proc UpdateMagnifier {which x y} { global view if {$view(magnifier)} { $which magnifier update $x $y } } proc MagnifierFrameBackup {ch which} { global pmagnifier puts $ch "$which magnifier graphics $pmagnifier(region)" puts $ch "$which magnifier cursor $pmagnifier(cursor)" puts $ch "$which magnifier zoom $pmagnifier(zoom)" puts $ch "$which magnifier color $pmagnifier(color)" } # Prefs Cmds proc MagnifierRegion {} { global pmagnifier global ds9 foreach ff $ds9(frames) { $ff magnifier graphics $pmagnifier(region) } } proc MagnifierCursor {} { global pmagnifier global ds9 foreach ff $ds9(frames) { $ff magnifier cursor $pmagnifier(cursor) } } proc MagnifierZoom {} { global pmagnifier global ds9 foreach ff $ds9(frames) { $ff magnifier zoom $pmagnifier(zoom) } } proc MagnifierColor {} { global pmagnifier global ds9 foreach ff $ds9(frames) { $ff magnifier color $pmagnifier(color) } } # Prefs proc PrefsDialogMagnifier {} { global dprefs global pmagnifier set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Magnifier}] lappend dprefs(tabs) [ttk::frame $w.magnifier] set f [ttk::labelframe $w.magnifier.param -text [msgcat::mc {Magnifier}]] ttk::label $f.tshow -text [msgcat::mc {Show}] ttk::checkbutton $f.graphics -text [msgcat::mc {Graphics}] \ -variable pmagnifier(region) -command MagnifierRegion ttk::checkbutton $f.cursor -text [msgcat::mc {Cursor}] \ -variable pmagnifier(cursor) -command MagnifierCursor ttk::label $f.tcolor -text [msgcat::mc {Color}] ColorMenuButton $f.color pmagnifier color MagnifierColor ttk::label $f.tx -text [msgcat::mc {Magnification}] ttk::radiobutton $f.x1 -text {1x} \ -variable pmagnifier(zoom) -value 1 -command MagnifierZoom ttk::radiobutton $f.x2 -text {2x} \ -variable pmagnifier(zoom) -value 2 -command MagnifierZoom ttk::radiobutton $f.x4 -text {4x} \ -variable pmagnifier(zoom) -value 4 -command MagnifierZoom ttk::radiobutton $f.x8 -text {8x} \ -variable pmagnifier(zoom) -value 8 -command MagnifierZoom ttk::radiobutton $f.x16 -text {16x} \ -variable pmagnifier(zoom) -value 16 -command MagnifierZoom grid $f.tshow $f.graphics - $f.cursor - -padx 2 -pady 2 -sticky w grid $f.tcolor $f.color - - -padx 2 -pady 2 -sticky w grid $f.tx $f.x1 $f.x2 $f.x4 $f.x8 $f.x16 -padx 2 -pady 2 -sticky w pack $f -side top -fill both -expand true } # Process Cmds proc ProcessMagnifierCmd {varname iname} { upvar $varname var upvar $iname i global pmagnifier global view switch -- [string tolower [lindex $var $i]] { color { incr i set pmagnifier(color) [lindex $var $i] MagnifierColor } zoom { incr i set pmagnifier(zoom) [lindex $var $i] MagnifierZoom } cursor { incr i set pmagnifier(cursor) [FromYesNo [lindex $var $i]] MagnifierCursor } region { incr i set pmagnifier(region) [FromYesNo [lindex $var $i]] MagnifierRegion } default { # backward compatibility set view(magnifier) 1 UpdateView incr i -1 } } } proc ProcessSendMagnifierCmd {proc id param} { global pmagnifier switch -- [string tolower [lindex $param 0]] { color {$proc $id "$pmagnifier(color)\n"} zoom {$proc $id "$pmagnifier(zoom)\n"} cursor {$proc $id [ToYesNo $pmagnifier(cursor)]} region {$proc $id [ToYesNo $pmagnifier(region)]} } } saods9/ds9/library/Makefile000644 000765 000000 00000005524 12640305511 016172 0ustar00joyewheel000000 000000 SCRIPTS = \ 2mass.tcl \ 3d.tcl \ array.tcl \ analysis.tcl \ analysisparam.tcl \ annulus.tcl \ ar.tcl \ backup.tcl \ bin.tcl \ box.tcl \ boxannulus.tcl \ bpanda.tcl \ buttons.tcl \ cat.tcl \ catcds.tcl \ catcdssrch.tcl \ catcdssrchdialog.tcl \ catcmd.tcl \ catcxc.tcl \ catdialog.tcl \ catflt.tcl \ catmatch.tcl \ catned.tcl \ catopt.tcl \ catplot.tcl \ catreg.tcl \ catsdss.tcl \ catsimbad.tcl \ catskybot.tcl \ catsym.tcl \ cattsv.tcl \ catvot.tcl \ centroid.tcl \ circle.tcl \ colorbar.tcl \ comm.tcl \ command.tcl \ compass.tcl \ composite.tcl \ contour.tcl \ convert.tcl \ coord.tcl \ cpanda.tcl \ crop.tcl \ crosshair.tcl \ cube.tcl \ debug.tcl \ dialog.tcl \ ellipse.tcl \ ellipseannulus.tcl \ envi.tcl \ epanda.tcl \ error.tcl \ eso.tcl \ examine.tcl \ export.tcl \ external.tcl \ file.tcl \ fits.tcl \ frame.tcl \ graph.tcl \ grid.tcl \ group.tcl \ header.tcl \ help.tcl \ http.tcl \ hv.tcl \ hvform.tcl \ hvsup.tcl \ iis.tcl \ imexam.tcl \ imgsvr.tcl \ import.tcl \ info.tcl \ layout.tcl \ line.tcl \ load.tcl \ magnifier.tcl \ marker.tcl \ markeranalysispanda.tcl \ markeranalysisplot2d.tcl \ markeranalysisplot3d.tcl \ markeranalysisradial.tcl \ markeranalysisstats.tcl \ markerbase.tcl \ markerbaseannulus.tcl \ markerbaseannulusrect.tcl \ markerbasecenter.tcl \ markerbaseline.tcl \ markerbasepanda.tcl \ markerbasepandarect.tcl \ markerdialog.tcl \ mask.tcl \ manalysis.tcl \ mbin.tcl \ mcolor.tcl \ mecube.tcl \ medit.tcl \ menu.tcl \ mfile.tcl \ mframe.tcl \ mhelp.tcl \ macosx.tcl \ macosxextra.tcl \ mosaicimage.tcl \ mosaicimageiraf.tcl \ mosaicimagewcs.tcl \ mosaicimagewfpc2.tcl \ mosaic.tcl \ mosaiciraf.tcl \ mosaicwcs.tcl \ movie.tcl \ mregion.tcl \ mscale.tcl \ multiframe.tcl \ mview.tcl \ mwcs.tcl \ mzoom.tcl \ nameres.tcl \ nrrd.tcl \ nsvr.tcl \ nvss.tcl \ pagesetup.tcl \ panner.tcl \ panzoom.tcl \ pixel.tcl \ photo.tcl \ plot.tcl \ plotbar.tcl \ plotdialog.tcl \ plotelement.tcl \ plotline.tcl \ plotprint.tcl \ plotprocess.tcl \ plotscatter.tcl \ point.tcl \ polygon.tcl \ prefs.tcl \ prefsdialog.tcl \ print.tcl \ projection.tcl \ open.tcl \ rgb.tcl \ rgbarray.tcl \ rgbcube.tcl \ rgbimage.tcl \ ruler.tcl \ samp.tcl \ sao.tcl \ save.tcl \ saveimage.tcl \ scale.tcl \ segment.tcl \ sfits.tcl \ shm.tcl \ skyview.tcl \ slider.tcl \ smosaic.tcl \ smosaiciraf.tcl \ smosaicwcs.tcl \ smooth.tcl \ source.tcl \ srgbcube.tcl \ starbase.tcl \ stdfbox.tcl \ stsci.tcl \ template.tcl \ text.tcl \ tkfbox.tcl \ url.tcl \ util.tcl \ var.tcl \ vector.tcl \ vla.tcl \ vo.tcl \ wcs.tcl \ win32.tcl \ xmfbox.tcl \ xpa.tcl .PHONY : msgs clean msgs : grep 'msgcat::mc' $(SCRIPTS) | cut -d[ -f2 | sed -e 's/::mc/::mcset AAA /' -e 's/]/ ""/' | sort | uniq > ../msgs/tmpl.tcl clean : $(RM) core *~ *# saods9/ds9/library/manalysis.tcl000644 000765 000000 00000053420 12741232554 017244 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc AnalysisMainMenu {} { global ds9 # WARNING: this is a variable length menu. # Be sure to update ds9(menu,size,analysis) menu $ds9(mb).analysis # IME # $ds9(mb).analysis add cascade -label [msgcat::mc {Task}] # -menu $ds9(mb).analysis.task # $ds9(mb).analysis add separator $ds9(mb).analysis add command -label "[msgcat::mc {Pixel Table}]..." \ -command PixelTableDialog $ds9(mb).analysis add command -label "[msgcat::mc {Mask Parameters}]..." \ -command MaskDialog $ds9(mb).analysis add separator $ds9(mb).analysis add checkbutton -label [msgcat::mc {Contours}] \ -variable contour(view) -command ContourUpdate $ds9(mb).analysis add command -label "[msgcat::mc {Contour Parameters}]..."\ -command ContourDialog $ds9(mb).analysis add separator $ds9(mb).analysis add checkbutton -label [msgcat::mc {Coordinate Grid}] \ -variable grid(view) -command GridUpdateCurrent $ds9(mb).analysis add command \ -label "[msgcat::mc {Coordinate Grid Parameters}]..." \ -command GridDialog $ds9(mb).analysis add separator $ds9(mb).analysis add cascade -label [msgcat::mc {Block}] \ -menu $ds9(mb).analysis.block $ds9(mb).analysis add command -label "[msgcat::mc {Block Parameters}]..."\ -command BlockDialog $ds9(mb).analysis add separator $ds9(mb).analysis add checkbutton -label [msgcat::mc {Smooth}] \ -variable smooth(view) -command SmoothUpdate $ds9(mb).analysis add command -label "[msgcat::mc {Smooth Parameters}]..." \ -command SmoothDialog $ds9(mb).analysis add separator $ds9(mb).analysis add command \ -label "[msgcat::mc {Crosshair Parameters}]..." \ -command CrosshairDialog $ds9(mb).analysis add separator $ds9(mb).analysis add command -label "[msgcat::mc {Name Resolution}]..." \ -command NRESDialog $ds9(mb).analysis add separator $ds9(mb).analysis add cascade -label [msgcat::mc {Image Servers}] \ -menu $ds9(mb).analysis.image $ds9(mb).analysis add cascade -label [msgcat::mc {Archives}] \ -menu $ds9(mb).analysis.arch $ds9(mb).analysis add cascade -label [msgcat::mc {Catalogs}] \ -menu $ds9(mb).analysis.cat $ds9(mb).analysis add separator $ds9(mb).analysis add command -label "[msgcat::mc {Catalog Tool}]..." \ -command CATTool $ds9(mb).analysis add command -label "[msgcat::mc {Line Plot Tool}]..." \ -command PlotLineTool $ds9(mb).analysis add command -label "[msgcat::mc {Bar Plot Tool}]..." \ -command PlotBarTool $ds9(mb).analysis add command -label "[msgcat::mc {Scatter Plot Tool}]..." \ -command PlotScatterTool $ds9(mb).analysis add separator $ds9(mb).analysis add command \ -label "[msgcat::mc {Virtual Observatory}]..."\ -command VODialog $ds9(mb).analysis add command -label "[msgcat::mc {Web Browser}]..." \ -command {HV web Web {}} $ds9(mb).analysis add separator $ds9(mb).analysis add checkbutton \ -label [msgcat::mc {Analysis Command Log}] \ -variable panalysis(log) $ds9(mb).analysis add separator $ds9(mb).analysis add command \ -label "[msgcat::mc {Load Analysis Commands}]..." \ -command OpenAnalysisMenu $ds9(mb).analysis add command \ -label [msgcat::mc {Clear Analysis Commands}] \ -command ClearAnalysisMenu menu $ds9(mb).analysis.task $ds9(mb).analysis.task add radiobutton -label [msgcat::mc {Statistics}] \ -variable ime(task) -value stats -command IMEChangeTask $ds9(mb).analysis.task add radiobutton -label [msgcat::mc {Histogram}] \ -variable ime(task) -value hist -command IMEChangeTask $ds9(mb).analysis.task add radiobutton \ -label [msgcat::mc {Radial Profile}] \ -variable ime(task) -value radial -command IMEChangeTask $ds9(mb).analysis.task add radiobutton -label [msgcat::mc {Plot 2D}] \ -variable ime(task) -value plot2d -command IMEChangeTask $ds9(mb).analysis.task add radiobutton -label [msgcat::mc {Plot 3D}] \ -variable ime(task) -value plot3d -command IMEChangeTask $ds9(mb).analysis.task add separator $ds9(mb).analysis.task add radiobutton -label [msgcat::mc {Circle}] \ -variable ime(shape) -value circle -command IMEChangeShape $ds9(mb).analysis.task add radiobutton -label [msgcat::mc {Ellipse}] \ -variable ime(shape) -value ellipse -command IMEChangeShape $ds9(mb).analysis.task add radiobutton -label [msgcat::mc {Box}] \ -variable ime(shape) -value box -command IMEChangeShape $ds9(mb).analysis.task add radiobutton -label [msgcat::mc {Polygon}] \ -variable ime(shape) -value polygon -command IMEChangeShape $ds9(mb).analysis.task add separator $ds9(mb).analysis.task add radiobutton -label [msgcat::mc {Point}] \ -variable ime(shape) -value point -command IMEChangeShape $ds9(mb).analysis.task add separator $ds9(mb).analysis.task add radiobutton -label [msgcat::mc {Annulus}] \ -variable ime(shape) -value annulus -command IMEChangeShape $ds9(mb).analysis.task add radiobutton \ -label [msgcat::mc {Ellipse Annulus}] \ -variable ime(shape) -value ellipseannulus -command IMEChangeShape $ds9(mb).analysis.task add radiobutton -label [msgcat::mc {Box Annulus}] \ -variable ime(shape) -value boxannulus -command IMEChangeShape menu $ds9(mb).analysis.block $ds9(mb).analysis.block add command -label [msgcat::mc {Block In}] \ -command {Block .5 .5} $ds9(mb).analysis.block add command -label [msgcat::mc {Block Out}] \ -command {Block 2 2} $ds9(mb).analysis.block add command -label [msgcat::mc {Block Fit}] \ -command BlockToFit $ds9(mb).analysis.block add separator $ds9(mb).analysis.block add radiobutton -label "[msgcat::mc {Block}] 1" \ -variable block(factor) -value { 1 1 } -command ChangeBlock $ds9(mb).analysis.block add radiobutton -label "[msgcat::mc {Block}] 2" \ -variable block(factor) -value { 2 2 } -command ChangeBlock $ds9(mb).analysis.block add radiobutton -label "[msgcat::mc {Block}] 4" \ -variable block(factor) -value { 4 4 } -command ChangeBlock $ds9(mb).analysis.block add radiobutton -label "[msgcat::mc {Block}] 8" \ -variable block(factor) -value { 8 8 } -command ChangeBlock $ds9(mb).analysis.block add radiobutton -label "[msgcat::mc {Block}] 16" \ -variable block(factor) -value { 16 16 } -command ChangeBlock $ds9(mb).analysis.block add radiobutton -label "[msgcat::mc {Block}] 32" \ -variable block(factor) -value { 32 32 } -command ChangeBlock menu $ds9(mb).analysis.image $ds9(mb).analysis.image add command \ -label {DSS (SAO)} -command SAODialog $ds9(mb).analysis.image add command \ -label {DSS (ESO} -command ESODialog $ds9(mb).analysis.image add command \ -label {DSS (STSCI)} -command STSCIDialog $ds9(mb).analysis.image add separator $ds9(mb).analysis.image add command \ -label {2MASS (NASA/IPAC)} -command 2MASSDialog $ds9(mb).analysis.image add command \ -label {VLA (NRAO)} -command VLADialog $ds9(mb).analysis.image add command \ -label {NVSS (NRAO)} -command NVSSDialog $ds9(mb).analysis.image add command \ -label {NLSS (NRAO)} -command VLSSDialog $ds9(mb).analysis.image add separator $ds9(mb).analysis.image add command \ -label {SkyView (NASA/HEASARC)} -command SkyViewDialog menu $ds9(mb).analysis.arch $ds9(mb).analysis.arch add cascade -label {Chandra (NASA/CXC)} \ -menu $ds9(mb).analysis.arch.chandra $ds9(mb).analysis.arch add separator SIAAnalysisMenu $ds9(mb).analysis.arch menu $ds9(mb).analysis.arch.chandra $ds9(mb).analysis.arch.chandra add command \ -label {Chaser} -command HVArchChandraChaser $ds9(mb).analysis.arch.chandra add command \ -label {Fast Image} -command HVArchChandraPop $ds9(mb).analysis.arch.chandra add command \ -label {Public FTP} -command HVArchChandraFTP menu $ds9(mb).analysis.arch.simbad $ds9(mb).analysis.arch.simbad add command -label {SAO} \ -command HVArchSIMBADSAO $ds9(mb).analysis.arch.simbad add command -label {CDS} \ -command HVArchSIMBADCDS menu $ds9(mb).analysis.arch.ads $ds9(mb).analysis.arch.ads add command -label {SAO} \ -command HVArchADSSAO $ds9(mb).analysis.arch.ads add command -label {CDS} \ -command HVArchADSCDS menu $ds9(mb).analysis.cat $ds9(mb).analysis.cat add command \ -label [msgcat::mc {Search for Catalogs}] \ -command "CATCDSSrchDialog catcdssrch1" $ds9(mb).analysis.cat add command -label [msgcat::mc {Clear All}] \ -command CATClearFrame $ds9(mb).analysis.cat add command -label [msgcat::mc {Match}] \ -command CATMatchFrame $ds9(mb).analysis.cat add separator CATAnalysisMenu } proc PrefsDialogAnalysisMenu {w} { global ds9 set f [ttk::labelframe $w.manalysis -text [msgcat::mc {Analysis}]] ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu PrefsDialogButtonbarAnalysis $f.buttonbar grid $f.menu $f.buttonbar -padx 2 -pady 2 set m $f.menu.menu menu $m # IME # $m add cascade -label [msgcat::mc {Task}] # -menu $m.task # $m add separator $m add checkbutton -label [msgcat::mc {Contours}] \ -variable pcontour(view) $m add checkbutton -label [msgcat::mc {Coordinate Grid}] \ -variable pgrid(view) $m add separator $m add cascade -label [msgcat::mc {Block}] \ -menu $m.block $m add checkbutton -label [msgcat::mc {Smooth}] \ -variable psmooth(view) menu $m.task $m.task add radiobutton -label [msgcat::mc {Statistics}] \ -variable pime(task) -value stats $m.task add radiobutton -label [msgcat::mc {Histogram}] \ -variable pime(task) -value hist $m.task add radiobutton -label [msgcat::mc {Radial Profile}] \ -variable pime(task) -value radial $m.task add radiobutton -label [msgcat::mc {Plot 2D}] \ -variable pime(task) -value plot2d $m.task add radiobutton -label [msgcat::mc {Plot 3D}] \ -variable pime(task) -value plot3d menu $m.block $m.block add radiobutton -label "[msgcat::mc {Block}] 1" \ -variable pblock(factor) -value { 1 1 } $m.block add radiobutton -label "[msgcat::mc {Block}] 2" \ -variable pblock(factor) -value { 2 2 } $m.block add radiobutton -label "[msgcat::mc {Block}] 4" \ -variable pblock(factor) -value { 4 4 } $m.block add radiobutton -label "[msgcat::mc {Block}] 8" \ -variable pblock(factor) -value { 8 8 } $m.block add radiobutton -label "[msgcat::mc {Block}] 16" \ -variable pblock(factor) -value { 16 16 } $m.block add radiobutton -label "[msgcat::mc {Block}] 32" \ -variable pblock(factor) -value { 32 32 } pack $f -side top -fill both -expand true } # Buttons proc ButtonsAnalysisDef {} { global pbuttons array set pbuttons { analysis,contours 1 analysis,grid 1 analysis,smooth 1 analysis,bin 1 analysis,bout 1 analysis,bfit 1 analysis,b1 1 analysis,b2 1 analysis,b4 1 analysis,b8 0 analysis,b16 0 analysis,b32 0 } # IME # analysis,none 1 # analysis,stats 1 # analysis,hist 1 # analysis,radial 1 # analysis,plot2d 1 # analysis,plot3d 1 } proc CreateButtonsAnalysis {} { global buttons global ds9 ttk::frame $ds9(buttons).analysis # IME # RadioButton $ds9(buttons).analysis.stats # [string tolower [msgcat::mc {Stats}]] # ime(task) stats IMEChangeTask # RadioButton $ds9(buttons).analysis.hist # [string tolower [msgcat::mc {Histogram}]] # ime(task) hist IMEChangeTask # RadioButton $ds9(buttons).analysis.radial # [string tolower [msgcat::mc {Radial}]] # ime(task) radial IMEChangeTask # RadioButton $ds9(buttons).analysis.plot2d # [string tolower [msgcat::mc {Plot 2D}]] # ime(task) plot2d IMEChangeTask # RadioButton $ds9(buttons).analysis.plot3d # [string tolower [msgcat::mc {Plot 3D}]] # ime(task) plot3d IMEChangeTask CheckButton $ds9(buttons).analysis.contours \ [string tolower [msgcat::mc {Contours}]] \ contour(view) ContourUpdate CheckButton $ds9(buttons).analysis.grid \ [string tolower [msgcat::mc {Grid}]] \ grid(view) GridUpdateCurrent ButtonButton $ds9(buttons).analysis.bin \ [string tolower [msgcat::mc {Block In}]] {Block .5 .5} ButtonButton $ds9(buttons).analysis.bout \ [string tolower [msgcat::mc {Block Out}]] {Block 2 2} ButtonButton $ds9(buttons).analysis.bfit \ [string tolower [msgcat::mc {Block Fit}]] BlockToFit RadioButton $ds9(buttons).analysis.b1 \ "[string tolower [msgcat::mc {Block}]] 1" \ block(factor) { 1 1 } ChangeBlock RadioButton $ds9(buttons).analysis.b2 \ "[string tolower [msgcat::mc {Block}]] 2" \ block(factor) { 2 2 } ChangeBlock RadioButton $ds9(buttons).analysis.b4 \ "[string tolower [msgcat::mc {Block}]] 4" \ block(factor) { 4 4 } ChangeBlock RadioButton $ds9(buttons).analysis.b8 \ "[string tolower [msgcat::mc {Block}]] 8" \ block(factor) { 8 8 } ChangeBlock RadioButton $ds9(buttons).analysis.b16 \ "[string tolower [msgcat::mc {Block}]] 16" \ block(factor) { 16 16 } ChangeBlock RadioButton $ds9(buttons).analysis.b32 \ "[string tolower [msgcat::mc {Block}]] 32" \ block(factor) { 32 32 } ChangeBlock CheckButton $ds9(buttons).analysis.smooth \ [string tolower [msgcat::mc {Smooth}]] \ smooth(view) SmoothUpdate set buttons(analysis) " $ds9(buttons).analysis.contours pbuttons(analysis,contours) $ds9(buttons).analysis.grid pbuttons(analysis,grid) $ds9(buttons).analysis.bin pbuttons(analysis,bin) $ds9(buttons).analysis.bout pbuttons(analysis,bout) $ds9(buttons).analysis.bfit pbuttons(analysis,bfit) $ds9(buttons).analysis.b1 pbuttons(analysis,b1) $ds9(buttons).analysis.b2 pbuttons(analysis,b2) $ds9(buttons).analysis.b4 pbuttons(analysis,b4) $ds9(buttons).analysis.b8 pbuttons(analysis,b8) $ds9(buttons).analysis.b16 pbuttons(analysis,b16) $ds9(buttons).analysis.b32 pbuttons(analysis,b32) $ds9(buttons).analysis.smooth pbuttons(analysis,smooth) " # IME # $ds9(buttons).analysis.stats pbuttons(analysis,stats) # $ds9(buttons).analysis.hist pbuttons(analysis,hist) # $ds9(buttons).analysis.radial pbuttons(analysis,radial) # $ds9(buttons).analysis.plot2d pbuttons(analysis,plot2d) # $ds9(buttons).analysis.plot3d pbuttons(analysis,plot3d) } proc PrefsDialogButtonbarAnalysis {f} { global ds9 global buttons global pbuttons ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu set m $f.menu menu $m # IME # $m add checkbutton -label [msgcat::mc {Statistics}] # -variable pbuttons(analysis,stats) # -command {UpdateButtons buttons(analysis)} # $m add checkbutton -label [msgcat::mc {Histogram}] # -variable pbuttons(analysis,hist) # -command {UpdateButtons buttons(analysis)} # $m add checkbutton -label [msgcat::mc {Radial Profile}] # -variable pbuttons(analysis,radial) # -command {UpdateButtons buttons(analysis)} # $m add checkbutton -label [msgcat::mc {Plot 2D}] # -variable pbuttons(analysis,plot2d) # -command {UpdateButtons buttons(analysis)} # $m add checkbutton -label [msgcat::mc {Plot 3D}] # -variable pbuttons(analysis,plot3d) # -command {UpdateButtons buttons(analysis)} # $m add separator $m add checkbutton -label [msgcat::mc {Contours}] \ -variable pbuttons(analysis,contours) \ -command {UpdateButtons buttons(analysis)} $m add checkbutton -label [msgcat::mc {Grid}] \ -variable pbuttons(analysis,grid) \ -command {UpdateButtons buttons(analysis)} $m add separator $m add checkbutton -label [msgcat::mc {Block In}] \ -variable pbuttons(analysis,bin) \ -command {UpdateButtons buttons(analysis)} $m add checkbutton -label [msgcat::mc {Block Out}] \ -variable pbuttons(analysis,bout) \ -command {UpdateButtons buttons(analysis)} $m add checkbutton -label [msgcat::mc {Block Fit}] \ -variable pbuttons(analysis,bfit) \ -command {UpdateButtons buttons(analysis)} $m add checkbutton -label "[msgcat::mc {Block}] 1" \ -variable pbuttons(analysis,b1) \ -command {UpdateButtons buttons(analysis)} $m add checkbutton -label "[msgcat::mc {Block}] 2" \ -variable pbuttons(analysis,b2) \ -command {UpdateButtons buttons(analysis)} $m add checkbutton -label "[msgcat::mc {Block}] 4" \ -variable pbuttons(analysis,b4) \ -command {UpdateButtons buttons(analysis)} $m add checkbutton -label "[msgcat::mc {Block}] 8" \ -variable pbuttons(analysis,b8) \ -command {UpdateButtons buttons(analysis)} $m add checkbutton -label "[msgcat::mc {Block}] 16" \ -variable pbuttons(analysis,b16) \ -command {UpdateButtons buttons(analysis)} $m add checkbutton -label "[msgcat::mc {Block}] 32" \ -variable pbuttons(analysis,b32) \ -command {UpdateButtons buttons(analysis)} $m add separator $m add checkbutton -label [msgcat::mc {Smooth}] \ -variable pbuttons(analysis,smooth) \ -command {UpdateButtons buttons(analysis)} } proc UpdateAnalysisMenuStatic {} { global ds9 global debug if {$debug(tcl,update)} { puts stderr "UpdateAnalysisMenuStatic" } if {$ds9(active,num) > 0} { $ds9(mb) entryconfig [msgcat::mc {Analysis}] -state normal } else { $ds9(mb) entryconfig [msgcat::mc {Analysis}] -state disabled } } proc UpdateAnalysisMenu {} { global ds9 global current global ianalysis global debug if {$debug(tcl,update)} { puts stderr "UpdateAnalysisMenu" } if {$current(frame) != {}} { for {set ii 0} {$ii<$ianalysis(menu,count)} {incr ii} { if {[$current(frame) has fits]} { set fn [$current(frame) get fits file name 1] } else { set fn {none} } # disable by default $ianalysis(menu,$ii,parent) entryconfig $ianalysis(menu,$ii,item) \ -state disabled foreach tt $ianalysis(menu,$ii,template) { if {[regexp ".$tt" $fn]} { $ianalysis(menu,$ii,parent) entryconfig \ $ianalysis(menu,$ii,item) -state normal break } } } } } proc PrefsDialogAnalysis {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Analysis}] lappend dprefs(tabs) [ttk::frame $w.analysis] set f [ttk::labelframe $w.analysis.file \ -text [msgcat::mc {Analysis File}]] ttk::checkbutton $f.auto -text [msgcat::mc {Autoload}] \ -variable panalysis(autoload) ttk::entry $f.pre -textvariable panalysis(user) -width 60 ttk::button $f.browse -text [msgcat::mc {Browse}] \ -command "AnalysisPrefOpen panalysis(user)" ttk::entry $f.pre2 -textvariable panalysis(user2) -width 60 ttk::button $f.browse2 -text [msgcat::mc {Browse}] \ -command "AnalysisPrefOpen panalysis(user2)" ttk::entry $f.pre3 -textvariable panalysis(user3) -width 60 ttk::button $f.browse3 -text [msgcat::mc {Browse}] \ -command "AnalysisPrefOpen panalysis(user3)" ttk::entry $f.pre4 -textvariable panalysis(user4) -width 60 ttk::button $f.browse4 -text [msgcat::mc {Browse}] \ -command "AnalysisPrefOpen panalysis(user4)" grid $f.auto -padx 2 -pady 2 -sticky w grid $f.pre $f.browse -padx 2 -pady 2 -sticky w grid $f.pre2 $f.browse2 -padx 2 -pady 2 -sticky w grid $f.pre3 $f.browse3 -padx 2 -pady 2 -sticky w grid $f.pre4 $f.browse4 -padx 2 -pady 2 -sticky w set f [ttk::labelframe $w.analysis.log -text [msgcat::mc {Analysis Log}]] ttk::checkbutton $f.log -text [msgcat::mc {Show Command}] \ -variable panalysis(log) grid $f.log -padx 2 -pady 2 -sticky w pack $w.analysis.file $w.analysis.log -side top -fill both -expand true } # Support proc UpdateTaskMenu {} { global ds9 global ime switch $ime(task) { stats - hist { $ds9(mb).analysis.task entryconfig [msgcat::mc {Circle}] \ -state normal $ds9(mb).analysis.task entryconfig [msgcat::mc {Ellipse}] \ -state normal $ds9(mb).analysis.task entryconfig [msgcat::mc {Box}] \ -state normal $ds9(mb).analysis.task entryconfig [msgcat::mc {Polygon}] \ -state normal $ds9(mb).analysis.task entryconfig [msgcat::mc {Point}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Annulus}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Ellipse Annulus}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Box Annulus}] \ -state disabled } radial { $ds9(mb).analysis.task entryconfig [msgcat::mc {Circle}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Ellipse}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Box}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Polygon}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Point}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Annulus}] \ -state normal $ds9(mb).analysis.task entryconfig [msgcat::mc {Ellipse Annulus}] \ -state normal $ds9(mb).analysis.task entryconfig [msgcat::mc {Box Annulus}] \ -state normal } plot2d { $ds9(mb).analysis.task entryconfig [msgcat::mc {Circle}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Ellipse}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Box}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Polygon}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Point}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Annulus}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Ellipse Annulus}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Box Annulus}] \ -state disabled } plot3d { $ds9(mb).analysis.task entryconfig [msgcat::mc {Circle}] \ -state normal $ds9(mb).analysis.task entryconfig [msgcat::mc {Ellipse}] \ -state normal $ds9(mb).analysis.task entryconfig [msgcat::mc {Box}] \ -state normal $ds9(mb).analysis.task entryconfig [msgcat::mc {Polygon}] \ -state normal $ds9(mb).analysis.task entryconfig [msgcat::mc {Point}] \ -state normal $ds9(mb).analysis.task entryconfig [msgcat::mc {Annulus}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Ellipse Annulus}] \ -state disabled $ds9(mb).analysis.task entryconfig [msgcat::mc {Box Annulus}] \ -state disabled } } } saods9/ds9/library/marker.tcl000644 000765 000000 00000131543 13002503642 016516 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerDef {} { global marker global imarker global pmarker set imarker(id) -1 set imarker(x) -1 set imarker(y) -1 set imarker(motion) none set imarker(handle) -1 set imarker(prefix,dialog) {mkr} set imarker(prefix,plot3d) {plot3d} set imarker(prefix,plot2d) {plot2d} set imarker(prefix,stats) {stats} set imarker(prefix,radial) {radial} set imarker(prefix,panda) {panda} set imarker(prefix,histogram) {hist} set marker(show) 1 set marker(show,text) 1 set marker(centroid,auto) 0 set marker(centroid,iteration) 30 set marker(centroid,radius) 10 set marker(shape) circle set marker(color) green set marker(dashlist) {8 3} set marker(width) 1 set marker(dash) 0 set marker(fixed) 0 set marker(edit) 1 set marker(move) 1 set marker(rotate) 1 set marker(delete) 1 set marker(include) 1 set marker(source) 1 set marker(font) helvetica set marker(font,size) 10 set marker(font,weight) normal set marker(font,slant) roman set marker(preserve) 0 set marker(plot2d) 0 set marker(plot3d) 0 set marker(stats) 0 set marker(copy) {} set marker(copy,system) {} set marker(maxdialog) 48 set marker(load) current set marker(format) ds9 # these are only used for save/load/list and are set from current wcs values set marker(system) physical set marker(sky) fk5 set marker(skyformat) degrees set marker(strip) 0 array set pmarker [array get marker] unset pmarker(copy) unset pmarker(copy,system) unset pmarker(maxdialog) unset pmarker(load) unset pmarker(system) unset pmarker(sky) unset pmarker(skyformat) unset pmarker(strip) set pmarker(epsilon) 3 set pmarker(dformat) degrees set pmarker(circle,radius) 20 set pmarker(annulus,inner) 15 set pmarker(annulus,outer) 30 set pmarker(annulus,annuli) 1 set pmarker(panda,inner) 15 set pmarker(panda,outer) 30 set pmarker(panda,annuli) 1 set pmarker(panda,ang1) 0 set pmarker(panda,ang2) 360 set pmarker(panda,angnum) 4 set pmarker(ellipse,radius1) 40 set pmarker(ellipse,radius2) 20 set pmarker(ellipseannulus,radius1) 40 set pmarker(ellipseannulus,radius2) 20 set pmarker(ellipseannulus,radius3) 60 set pmarker(ellipseannulus,annuli) 1 set pmarker(epanda,radius1) 40 set pmarker(epanda,radius2) 20 set pmarker(epanda,radius3) 60 set pmarker(epanda,annuli) 1 set pmarker(epanda,ang1) 0 set pmarker(epanda,ang2) 360 set pmarker(epanda,angnum) 4 set pmarker(box,radius1) 80 set pmarker(box,radius2) 40 set pmarker(boxannulus,radius1) 80 set pmarker(boxannulus,radius2) 40 set pmarker(boxannulus,radius3) 120 set pmarker(boxannulus,annuli) 1 set pmarker(bpanda,radius1) 80 set pmarker(bpanda,radius2) 40 set pmarker(bpanda,radius3) 120 set pmarker(bpanda,annuli) 1 set pmarker(bpanda,ang1) 0 set pmarker(bpanda,ang2) 360 set pmarker(bpanda,angnum) 4 set pmarker(compass,radius) 40 set pmarker(polygon,width) 20 set pmarker(polygon,height) 20 set pmarker(projection,thick) 0 set pmarker(point,size) 11 set pmarker(segment,length) 20 } # procs shared between region and catalog mode proc MarkerControl {which x y} { global imarker global current # if nothing is loaded, abort if {![$which has fits]} { return } # we need this cause MarkerMotion maybe called, # and we don't want it set imarker(motion) none set imarker(handle) -1 set id [$which get marker $current(mode) id $x $y] if {$id} { # are we on a selected annulus? if {[$which get marker $current(mode) select $x $y] == $id} { switch -- [$which get marker $current(mode) $id type] { annulus { set imarker(handle) \ [$which marker $current(mode) $id create annulus radius $x $y] $which marker $current(mode) $id edit begin $imarker(handle) set imarker(motion) edit } panda { set imarker(handle) \ [$which marker $current(mode) $id create panda radius $x $y] $which marker $current(mode) $id edit begin $imarker(handle) set imarker(motion) edit } ellipseannulus { set imarker(handle) \ [$which marker $current(mode) $id create ellipseannulus radius $x $y] $which marker $current(mode) $id edit begin $imarker(handle) set imarker(motion) edit } epanda { set imarker(handle) \ [$which marker $current(mode) $id create epanda radius $x $y] $which marker $current(mode) $id edit begin $imarker(handle) set imarker(motion) edit } boxannulus { set imarker(handle) \ [$which marker $current(mode) $id create boxannulus radius $x $y] $which marker $current(mode) $id edit begin $imarker(handle) set imarker(motion) edit } bpanda { set imarker(handle) \ [$which marker $current(mode) $id create bpanda radius $x $y] $which marker $current(mode) $id edit begin $imarker(handle) set imarker(motion) edit } } } } } proc MarkerControlShift {which x y} { global imarker global current # if nothing is loaded, abort if {![$which has fits]} { return } # we need this cause MarkerMotion maybe called, # and we don't want it set imarker(motion) none set imarker(handle) -1 set id [$which get marker $current(mode) id $x $y] if {$id} { # are we on a selected annulus? if {[$which get marker $current(mode) select $x $y] == $id} { switch -- [$which get marker $current(mode) $id type] { panda { set imarker(handle) \ [$which marker $current(mode) $id create panda angle $x $y] $which marker $current(mode) $id edit begin $imarker(handle) set imarker(motion) edit } epanda { set imarker(handle) \ [$which marker $current(mode) $id create epanda angle $x $y] $which marker $current(mode) $id edit begin $imarker(handle) set imarker(motion) edit } bpanda { set imarker(handle) \ [$which marker $current(mode) $id create bpanda angle $x $y] $which marker $current(mode) $id edit begin $imarker(handle) set imarker(motion) edit } } } } } proc MarkerCursor {which x y handleCursor overCursor} { global current # if nothing is loaded, abort if {![$which has fits]} { return } # are we over any selected marker handles? # remember, handles are outside of a marker set h [$which get marker $current(mode) handle $x $y] set id [lindex $h 0] set handle [lindex $h 1] if {$handle} { if {$handle < 5} { # edit/rotate handle SetCursor $handleCursor } else { # polygon/segment/annulus vertex SetCursor dotbox } return } # else, see if we are on a segement of a polygon/segment set h [$which get marker $current(mode) polygon segment $x $y] if {[lindex $h 0]} { SetCursor draped_box return } set h [$which get marker $current(mode) segment segment $x $y] if {[lindex $h 0]} { SetCursor draped_box return } # are we over a marker? set id [$which get marker $current(mode) select $x $y] if {$id} { # are we on a selected annulus and control key down? switch -- [$which get marker $current(mode) $id type] { annulus - panda - ellipseannulus - epanda - boxannulus - bpanda {SetCursor $overCursor} default {SetCursor fleur} } return } # else, set no cursor SetCursor {} } proc MarkerArrowKey {which x y} { global current $which warp $x $y $which marker $current(mode) move $x $y } # Marker only proc MarkerButton {which x y} { global marker global imarker global itemplate global ds9 # if nothing is loaded, abort if {![$which has fits]} { return } # see if we are on a handle set h [$which get marker handle $x $y] set id [lindex $h 0] set imarker(handle) [lindex $h 1] if {$imarker(handle)} { $which marker $id edit begin $imarker(handle) set imarker(motion) beginEdit return } # else, see if we are on a segment of a polygon set h [$which get marker polygon segment $x $y] set id [lindex $h 0] set segment [lindex $h 1] if {$segment} { $which marker $id create polygon vertex $segment $x $y $which marker $id edit begin $imarker(handle) set imarker(handle) [expr 4+$segment+1] set imarker(motion) beginEdit return } # else, see if we are on a segment of a segment set h [$which get marker segment segment $x $y] set id [lindex $h 0] set segment [lindex $h 1] if {$segment} { $which marker $id create segment vertex $segment $x $y $which marker $id edit begin $imarker(handle) set imarker(handle) [expr 4+$segment+1] set imarker(motion) beginEdit return } # else, see if we are on a marker if {[$which get marker id $x $y]} { $which marker select only $x $y $which marker move begin $x $y set imarker(motion) beginMove UpdateRegionMenu return } # see if any markers are selected if {[$which get marker select number]>0} { $which marker unselect all set imarker(motion) none UpdateRegionMenu return } # else, create a marker set imarker(handle) 0 set imarker(motion) none switch -- $marker(shape) { circle - annulus - panda - ellipse - ellipseannulus - epanda - box - boxannulus - bpanda - polygon - line - vector - projection - segment - text - ruler - compass - {circle point} - {box point} - {diamond point} - {cross point} - {x point} - {arrow point} - {boxcircle point} {MarkerCreateShape $which $x $y} default { set fn "$ds9(root)/template/$itemplate($marker(shape))" set ch [open $fn r] global vardata set vardata [read $ch] close $ch $which marker create template var vardata $x $y } } } proc MarkerShift {which x y} { global imarker # if nothing is loaded, abort if {![$which has fits]} { return } # see if we are on a handle set h [$which get marker handle $x $y] set id [lindex $h 0] set imarker(handle) [lindex $h 1] if {$imarker(handle)} { $which marker $id rotate begin set imarker(motion) beginRotate return } # else, see if we are on a marker if {[$which marker select toggle $x $y]} { UpdateRegionMenu $which marker move begin $x $y set imarker(motion) beginMove return } # else, start a region select $which region select begin $x $y set imarker(motion) shiftregion } proc MarkerMotion {which x y} { global imarker # if nothing is loaded, abort if {![$which has fits]} { return } switch -- $imarker(motion) { none {} beginCreate - create { $which marker edit motion $x $y $imarker(handle) set imarker(motion) create } beginMove - move { $which marker move motion $x $y set imarker(motion) move } beginEdit - edit { $which marker edit motion $x $y $imarker(handle) set imarker(motion) edit } beginRotate - rotate { $which marker rotate motion $x $y $imarker(handle) set imarker(motion) rotate } region - shiftregion {$which region select motion $x $y} } } proc MarkerRelease {which x y} { global marker global imarker global current # if nothing is loaded, abort if {![$which has fits]} { return } switch -- $imarker(motion) { none {} beginCreate { # the user has just clicked, so resize to make visible or delete # assumes imarker(id) from create $which marker edit end MarkerDefault $which if {$imarker(id)>=0} { if {$marker(centroid,auto)} { $which marker centroid $imarker(id) } MarkerReleaseCB $which } set imarker(id) -1 set imarker(x) -1 set imarker(y) -1 } create { $which marker edit end # determine if this is an accident and just create the default set diffx [expr $x-$imarker(x)] set diffy [expr $y-$imarker(y)] if {[expr sqrt($diffx*$diffx + $diffy*$diffy)]<2} { MarkerDefault $which } if {$imarker(id)>=0} { if {$marker(centroid,auto)} { $which marker centroid $imarker(id) } MarkerReleaseCB $which } set imarker(id) -1 set imarker(x) -1 set imarker(y) -1 } beginMove - beginRotate {} beginEdit {} move { $which marker move end if {$marker(centroid,auto)} { $which marker centroid } } edit { $which marker edit end if {$marker(centroid,auto)} { $which marker centroid } } rotate { $which marker rotate end if {$marker(centroid,auto)} { $which marker centroid } } region {$which region select end} shiftregion {$which region select shift end} } set imarker(motion) none set imarker(handle) -1 } proc MarkerReleaseCB {which} { global marker global imarker global current # special callbacks switch [$which get marker $imarker(id) type] { projection {MarkerAnalysisPlot2d $which $imarker(id) 1} line - vector { if {$marker(plot2d)} { MarkerAnalysisPlot2d $which $imarker(id) 1 } } circle - ellipse - box - polygon - point { if {$marker(plot3d)} { MarkerAnalysisPlot3d $which $imarker(id) 1 } if {$marker(stats)} { MarkerAnalysisStats $which $imarker(id) 1 } } } } proc MarkerDouble {which x y} { global imarker # if nothing is loaded, abort if {![$which has fits]} { return } set id [$which get marker id $x $y] if {$id} { if {[$which get marker $id PROPERTY SELECT]} { MarkerDialog $which $id switch [$which get marker $id type] { projection - line - vector - circle - ellipse - box - polygon - point { set vvarname proj${id}${which} upvar #0 $vvarname vvar global $vvarname PlotRaise $vvarname } } } } } proc MarkerCreateShape {which x y} { global marker global imarker global pmarker global current global wcs # for compass/ruler global ed set ed(system) $wcs(system) set ed(sky) $wcs(sky) AdjustCoordSystem ed system set ed(dformat) $pmarker(dformat) set cmd "$which marker create $marker(shape) $x $y" switch -- $marker(shape) { circle {append cmd " 0"} annulus {append cmd " .001 .002 $pmarker(annulus,annuli)"} panda {append cmd " $pmarker(panda,ang1) $pmarker(panda,ang2) $pmarker(panda,angnum) .001 .002 $pmarker(panda,annuli)"} ellipse {append cmd " 0 0"} ellipseannulus {append cmd " .001 .001 .002 $pmarker(ellipseannulus,annuli)"} epanda {append cmd " $pmarker(epanda,ang1) $pmarker(epanda,ang2) $pmarker(epanda,angnum) .001 .001 .002 $pmarker(epanda,annuli)"} box {append cmd " 0 0"} boxannulus {append cmd " .002 .002 .004 $pmarker(boxannulus,annuli)"} bpanda {append cmd " $pmarker(bpanda,ang1) $pmarker(bpanda,ang2) $pmarker(bpanda,angnum) .001 .001 .002 $pmarker(bpanda,annuli)"} polygon {append cmd " .001 .001"} line {append cmd " $x $y"} vector {append cmd " $x $y"} projection {append cmd " $x $y $pmarker(projection,thick) "} segment {append cmd " .001 .001"} text { set txt "Region" set r [EntryDialog "Text Region" "Enter Text:" 40 txt] if {$r == 1 && $txt != {}} { append cmd " 0 text = \{\{$txt\}\}" } else { return } } ruler {append cmd " $x $y $ed(system) $ed(sky) $ed(system) $ed(dformat)"} compass {append cmd " 15 $ed(system) $ed(sky) "} {circle point} - {box point} - {diamond point} - {cross point} - {x point} - {arrow point} - {boxcircle point} {append cmd " $pmarker(point,size)"} } append cmd " color = $marker(color)" append cmd " width = $marker(width)" append cmd " font = \{\"$marker(font) $marker(font,size) $marker(font,weight) $marker(font,slant)\"\}" append cmd " dash = $marker(dash)" append cmd " fixed = $marker(fixed)" append cmd " edit = $marker(edit)" append cmd " move = $marker(move)" append cmd " rotate = $marker(rotate)" append cmd " delete = $marker(delete)" append cmd " include = $marker(include)" append cmd " source = $marker(source)" $which marker unselect all set imarker(id) [eval $cmd] set imarker(motion) beginCreate set imarker(x) $x set imarker(y) $y switch -- $marker(shape) { circle - annulus - panda - ellipse - ellipseannulus - epanda - box - boxannulus - bpanda - compass - polygon - segment { set imarker(handle) 1 $which marker $imarker(id) edit begin $imarker(handle) } line - vector - ruler - projection { set imarker(handle) 2 $which marker $imarker(id) edit begin $imarker(handle) } } } proc MarkerDefault {which} { global imarker global pmarker global current # scale the default size to take into account the current set z1 double([lindex $current(zoom) 0]) set z2 double([lindex $current(zoom) 1]) if {$z1>$z2} { set zz $z1 } else { set zz $z2 } set item [$which get marker $imarker(id) type] switch -- $item { circle { $which marker $imarker(id) circle radius \ [expr ($pmarker(circle,radius)/$zz)] \ image degrees } annulus { $which marker $imarker(id) annulus radius \ [expr ($pmarker(annulus,inner)/$zz)] \ [expr ($pmarker(annulus,outer)/$zz)] \ $pmarker(annulus,annuli) image degrees } panda { $which marker $imarker(id) panda edit \ $pmarker(panda,ang1) $pmarker(panda,ang2) \ $pmarker(panda,angnum) \ [expr ($pmarker(panda,inner)/$zz)] \ [expr ($pmarker(panda,outer)/$zz)] \ $pmarker(panda,annuli) image } ellipse { $which marker $imarker(id) ellipse radius \ [expr ($pmarker(ellipse,radius1)/$z1)] \ [expr ($pmarker(ellipse,radius2)/$z2)] \ image degrees } ellipseannulus { $which marker $imarker(id) ellipseannulus radius \ [expr ($pmarker(ellipseannulus,radius1)/$z1)] \ [expr ($pmarker(ellipseannulus,radius2)/$z2)] \ [expr ($pmarker(ellipseannulus,radius3)/$z1)] \ $pmarker(ellipseannulus,annuli) image } epanda { $which marker $imarker(id) epanda edit \ $pmarker(epanda,ang1) $pmarker(epanda,ang2) \ $pmarker(epanda,angnum) \ [expr ($pmarker(epanda,radius1)/$z1)] \ [expr ($pmarker(epanda,radius2)/$z2)] \ [expr ($pmarker(epanda,radius3)/$z1)] \ $pmarker(epanda,annuli) image } box { $which marker $imarker(id) box radius \ [expr ($pmarker(box,radius1)/$z1)] \ [expr ($pmarker(box,radius2)/$z2)] \ image degrees } boxannulus { $which marker $imarker(id) boxannulus radius \ [expr ($pmarker(boxannulus,radius1)/$z1)] \ [expr ($pmarker(boxannulus,radius2)/$z2)] \ [expr ($pmarker(boxannulus,radius3)/$z1)] \ $pmarker(boxannulus,annuli) image } bpanda { $which marker $imarker(id) bpanda edit \ $pmarker(bpanda,ang1) $pmarker(bpanda,ang2) \ $pmarker(bpanda,angnum) \ [expr ($pmarker(bpanda,radius1)/$z1)] \ [expr ($pmarker(bpanda,radius2)/$z2)] \ [expr ($pmarker(bpanda,radius3)/$z1)] \ $pmarker(bpanda,annuli) image } compass { $which marker $imarker(id) compass radius \ $pmarker(compass,radius) image degrees } polygon { $which marker $imarker(id) polygon reset \ [expr ($pmarker(polygon,width)/$z1)] \ [expr ($pmarker(polygon,height)/$z2)] \ image degrees } segment { $which marker $imarker(id) segment reset \ [expr ($pmarker(segment,length)/$z1)] \ [expr ($pmarker(segment,length)/$z2)] \ image degrees } line - vector - ruler - projection { $which marker $imarker(id) delete set imarker(id) -1 set imarker(x) -1 set imarker(y) -1 } } } proc MarkerDeleteKey {which x y} { # if nothing is loaded, abort if {![$which has fits]} { return } # see if we are on a polygon/segment set h [$which get marker handle $x $y] set id [lindex $h 0] set handle [lindex $h 1] set t [$which get marker $id type] switch -- $t { polygon - segment - annulus - panda - ellipseannulus - epanda - boxannulus - bpanda { if {$handle > 4} { switch -- $t { polygon {$which marker $id delete polygon vertex $handle} segment {$which marker $id delete segment vertex $handle} annulus {$which marker $id delete annulus $handle} panda {$which marker $id delete panda $handle} ellipseannulus {$which marker $id delete \ ellipseannulus $handle} epanda {$which marker $id delete epanda $handle} boxannulus {$which marker $id delete boxannulus $handle} bpanda {$which marker $id delete bpanda $handle} } } else { # delete polygon/segment $which marker delete UpdateGroupDialog } } default { # delete marker $which marker delete UpdateGroupDialog } } } proc MarkerEpsilon {} { global ds9 global pmarker foreach ff $ds9(frames) { $ff marker epsilon $pmarker(epsilon) } } proc MarkerShow {} { global current global marker if {$current(frame) != {}} { $current(frame) marker show $marker(show) } } proc MarkerShowText {} { global current global marker if {$current(frame) != {}} { $current(frame) marker show text $marker(show,text) } } proc MarkerPreserve {} { global current global marker if {$current(frame) != {}} { $current(frame) marker preserve $marker(preserve) } } proc MarkerCentroid {} { global current if {$current(frame) != {}} { $current(frame) marker centroid } } proc MarkerCentroidAuto {} { global current global marker if {$current(frame) != {}} { $current(frame) marker centroid auto $marker(centroid,auto) } } proc MarkerCentroidRadius {} { global current global marker if {$current(frame) != {}} { $current(frame) marker centroid radius $marker(centroid,radius) } } proc MarkerCentroidIteration {} { global current global marker if {$current(frame) != {}} { $current(frame) marker centroid iteration $marker(centroid,iteration) } } proc MarkerFront {} { global current if {$current(frame) != {}} { $current(frame) marker move front } } proc MarkerBack {} { global current if {$current(frame) != {}} { $current(frame) marker move back $current(frame) marker unselect all } } proc MarkerSelectAll {} { global current if {$current(frame) != {}} { $current(frame) marker select all } UpdateEditMenu } proc MarkerUnselectAll {} { global current if {$current(frame) != {}} { $current(frame) marker unselect all } UpdateEditMenu } proc MarkerSelectInvert {} { global current if {$current(frame) != {}} { $current(frame) marker select toggle } UpdateEditMenu } proc MarkerDeleteSelect {} { global current if {$current(frame) != {}} { $current(frame) marker delete UpdateGroupDialog } UpdateEditMenu } proc MarkerDeleteAllMenu {} { global current global pds9 if {$pds9(confirm)} { if {[tk_messageBox -type okcancel -icon question -message [msgcat::mc {Delete All Regions?}]] != {ok}} { return } } MarkerDeleteAll } proc MarkerDeleteAll {} { global current if {$current(frame) != {}} { $current(frame) marker delete all UpdateGroupDialog } UpdateEditMenu } proc MarkerColor {} { global current global marker if {$current(frame) != {}} { $current(frame) marker color $marker(color) } } proc MarkerWidth {} { global current global marker if {$current(frame) != {}} { $current(frame) marker width $marker(width) } } proc MarkerProp {prop} { global current global marker if {$current(frame) != {}} { $current(frame) marker property $prop $marker($prop) } } proc MarkerFont {} { global current global marker if {$current(frame) != {}} { $current(frame) marker font \"$marker(font) $marker(font,size) $marker(font,weight) $marker(font,slant)\" } } proc MarkerList {} { global current global marker if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } if {[MarkerSaveDialog [msgcat::mc {List Regions}]]} { SimpleTextDialog markertxt [msgcat::mc {Region}] 80 20 insert top \ [$current(frame) marker list $marker(format) $marker(system) \ $marker(sky) $marker(skyformat) $marker(strip)] } } proc MarkerLoad {} { global ds9 global current global marker if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } set fns [OpenFileDialog markerfbox] if {$fns != {}} { if {[MarkerLoadDialog]} { switch -- $marker(load) { current {set frames $current(frame)} all {set frames $ds9(frames)} } MarkerLoadFrames $fns $frames \ $marker(format) $marker(system) $marker(sky) } } } proc MarkerLoadFrames {str frames format sys sky} { if {$str == {}} { return } if {[catch {glob $str} fns]} { # reset errors, we don't want to hear about it InitError tcl # could be an unique name, i.e. foo[bar], just try to load foreach fr $frames { if {[catch {MarkerLoadFile $str $fr $format $sys $sky}]} { return } } } else { foreach fn $fns { foreach fr $frames { if {[catch {MarkerLoadFile $fn $fr $format $sys $sky}]} { return } } } } } proc MarkerLoadFile {filename which format sys sky} { global current global marker if {$filename == {}} { return } if {![$which has fits]} { return } # determine if its a fits file # first, strip the filename if {![regexp -nocase {(.*)(\[.*\])} $filename foo base ext]} { set base $filename set ext {} } if {[catch {open $base} fd]} { Error [msgcat::mc {Unable to load region file}] return -code error } set ll [read $fd 9] close $fd # is it a fits file? if {$ll == "SIMPLE ="} { # see if we need to add an extension if {$ext == {}} { set filename "$base\[REGION\]" } # open it if {[catch {$which marker load fits "\{$filename\}" $marker(color) $marker(dashlist) $marker(width) "\{$marker(font) $marker(font,size) $marker(font,weight) $marker(font,slant)\}"}]} { if {$ext == {}} { # ok now try the first extension set filename "$base\[1\]" if {[catch {$which marker load fits "\{$filename\}" $marker(color) $marker(dashlist) $marker(width) "\{$marker(font) $marker(font,size) $marker(font,weight) $marker(font,slant)\}"}]} { Error [msgcat::mc {Unable to load region file}] return -code error } # reset errors, we don't want to hear about it InitError tcl } else { Error [msgcat::mc {Unable to load region file}] return -code error } } } else { # no, its ascii if {[catch {$which marker load $format "\{$filename\}" $sys $sky}]} { Error [msgcat::mc {Unable to load region file}] return -code error } } FileLast markerfbox $filename UpdateGroupDialog } proc MarkerSave {} { global current global marker if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } set filename [SaveFileDialog markerfbox] if {$filename == {}} { return } if {[MarkerSaveDialog [msgcat::mc {Save Regions}]]} { $current(frame) marker save "\{$filename\}" \ $marker(format) $marker(system) $marker(sky) \ $marker(skyformat) $marker(strip) } } proc MarkerInfo {} { global current global marker global pds9 if {$current(frame) != {}} { set ll [$current(frame) get marker select] if {$ll != {}} { set ii 0 foreach dd $ll { incr ii if {$ii > $marker(maxdialog)} { return } MarkerDialog $current(frame) $dd } } else { if {$pds9(confirm)} { tk_messageBox -type ok -icon info -message [msgcat::mc {Please Select a Region}] } } } } proc MarkerDialog {frame id} { global imarker set varname ${imarker(prefix,dialog)}${id}${frame} global $varname upvar #0 $varname var set var(frame) $frame set var(id) $id set var(top) ".${varname}" set var(mb) ".${varname}mb" switch -- [$frame get marker $id type] { circle {CircleDialog $varname} annulus {AnnulusDialog $varname} panda {PandaDialog $varname} ellipse {EllipseDialog $varname} ellipseannulus {EllipseAnnulusDialog $varname} epanda {EpandaDialog $varname} box {BoxDialog $varname} boxannulus {BoxAnnulusDialog $varname} bpanda {BpandaDialog $varname} polygon {PolygonDialog $varname} line {LineDialog $varname} vector {VectorDialog $varname} projection {ProjectionDialog $varname} segment {SegmentDialog $varname} text {TextDialog $varname} ruler {RulerDialog $varname} compass {CompassDialog $varname} point {PointDialog $varname} composite {CompositeDialog $varname} } } proc MarkerCopy {} { global current global marker global wcs if {$current(frame) != {}} { $current(frame) marker copy set marker(copy) $current(frame) set marker(copy,system) $wcs(system) } UpdateEditMenu } proc MarkerCut {} { global current global marker global wcs if {$current(frame) != {}} { $current(frame) marker cut set marker(copy) $current(frame) set marker(copy,system) $wcs(system) } UpdateEditMenu UpdateGroupDialog } proc MarkerUndo {} { global current if {$current(frame) != {}} { $current(frame) marker undo } UpdateEditMenu UpdateGroupDialog } proc MarkerPaste {} { global current global marker global wcs # if nothing is loaded, abort if {$current(frame) == {}} { return } if {$marker(copy) == {} || $marker(copy,system) == {}} { return } if {(![$current(frame) has fits]) || (![$marker(copy) has fits])} { return } # same frame? if {$current(frame) == $marker(copy)} { # use internal $current(frame) marker paste } else { global cmd # do we have a valid wcs? if {[$marker(copy) has wcs $marker(copy,system)] && [$current(frame) has wcs $marker(copy,system)]} { # do we have an equatorial wcs? if {[$marker(copy) has wcs equatorial $marker(copy,system)] && [$current(frame) has wcs equatorial $marker(copy,system)]} { # then use wcs set cmd "[$marker(copy) marker paste $marker(copy,system)]" } else { # mix of equatorial and non-equatorial wcs, use physical set cmd "[$marker(copy) marker paste physical]" } } else { # default, use physical set cmd "[$marker(copy) marker paste physical]" } $current(frame) marker command ds9 var cmd unset cmd } UpdateEditMenu UpdateGroupDialog } proc CompositeCreate {} { global current global marker if {$current(frame) != {}} { set cmd "$current(frame) marker create composite" append cmd " color = $marker(color)" append cmd " width = $marker(width)" append cmd " font = \{\"$marker(font) $marker(font,size) $marker(font,weight) $marker(font,slant)\"\}" append cmd " dash = $marker(dash)" append cmd " edit = $marker(edit)" append cmd " move = $marker(move)" append cmd " rotate = $marker(rotate)" append cmd " delete = $marker(delete)" append cmd " fixed = $marker(fixed)" append cmd " include = $marker(include)" append cmd " source = $marker(source)" eval $cmd } } proc CompositeDelete {} { global current if {$current(frame) != {}} { $current(frame) marker composite delete } } proc MarkerBackup {ch which fdir rdir} { if {[$which get marker number] > 0} { set fn $fdir/ds9.reg set rfn $rdir/ds9.reg catch {file delete -force $fn} if {[$which has wcs equatorial wcs]} { $which marker save \"$fn\" ds9 wcs fk5 degrees 0 } else { $which marker save \"$fn\" ds9 physical fk5 degrees 0 } puts $ch "$which marker load ds9 \{\"$rfn\"\}" } } # Process Cmds proc ProcessRegionsCmd {varname iname sock fn} { upvar $varname var upvar $iname i global ds9 global current global marker global pmarker # we need to be realized ProcessRealizeDS9 switch -- [string tolower [lindex $var $i]] { epsilon { incr i set pmarker(epsilon) [lindex $var $i] MarkerEpsilon } show { incr i set marker(show) [FromYesNo [lindex $var $i]] MarkerShow } showtext { incr i set marker(show,text) [FromYesNo [lindex $var $i]] MarkerShowText } getinfo {MarkerInfo} centroid { incr i switch -- [string tolower [lindex $var $i]] { auto { incr i set marker(centroid,auto) [FromYesNo [lindex $var $i]] MarkerCentroidAuto } radius { incr i set marker(centroid,radius) [lindex $var $i] MarkerCentroidRadius } iteration { incr i set marker(centroid,iteration) [lindex $var $i] MarkerCentroidIteration } default { incr i -1 MarkerCentroid } } } autocentroid { # backward compatibilty incr i set marker(centroid,auto) [FromYesNo [lindex $var $i]] MarkerCentroidAuto } movefront {MarkerFront} moveback {MarkerBack} move { incr i switch -- [string tolower [lindex $var $i]] { front {MarkerFront} back {MarkerBack} } } selectall {MarkerSelectAll} selectnone {MarkerUnselectAll} select { incr i switch -- [string tolower [lindex $var $i]] { group { # backward compatibility, use group <> select incr i if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker "\{[lindex $var $i]\}" select } } } all {MarkerSelectAll} none {MarkerUnselectAll} invert {MarkerSelectInvert} } } deleteall {MarkerDeleteAll} delete { incr i switch -- [string tolower [lindex $var $i]] { select {MarkerDeleteSelect} all {MarkerDeleteAll} } } format { incr i set marker(format) [string tolower [lindex $var $i]] } coord - system { # for backward compatibility incr i switch -- [string tolower [lindex $var $i]] { fk4 - b1950 - fk5 - j2000 - icrs - galactic - ecliptic { incr i set marker(system) wcs set marker(sky) [string tolower [lindex $var $i]] } default {set marker(system) [string tolower [lindex $var $i]]} } } sky { incr i set marker(sky) [string tolower [lindex $var $i]] } coordformat - skyformat { incr i switch -- [string tolower [lindex $var $i]] { deg - degree - degrees {set marker(skyformat) degrees} default { set marker(skyformat) [string tolower [lindex $var $i]] } } } strip { incr i set marker(strip) [FromYesNo [lindex $var $i]] } delim { incr i if {[lindex $var $i] != "nl"} { set marker(strip) 1 } else { set marker(strip) 0 } } shape { incr i set marker(shape) [string tolower [lindex $var $i]] } color { incr i set marker(color) [string tolower [lindex $var $i]] MarkerColor } width { incr i set marker(width) [lindex $var $i] MarkerWidth } fixed { incr i set marker(fixed) [FromYesNo [lindex $var $i]] MarkerProp fixed } edit { incr i set marker(edit) [FromYesNo [lindex $var $i]] MarkerProp edit } rotate { incr i set marker(rotate) [FromYesNo [lindex $var $i]] MarkerProp rotate } delete { incr i set marker(delete) [FromYesNo [lindex $var $i]] MarkerProp delete } include { set marker(include) 1 MarkerProp include } exclude { set marker(include) 0 MarkerProp include } source { set marker(source) 1 MarkerProp source } background { set marker(source) 0 MarkerProp source } tag - tags - group - groups { incr i if {[string tolower [lindex $var $i]] == {new}} { if {$current(frame) != {}} { if {[$current(frame) has fits]} { set name [$current(frame) get marker tag default name] $current(frame) marker tag "\{$name\}" UpdateGroupDialog } } } else { set tag "\{[lindex $var $i]\}" incr i switch -- [string tolower [lindex $var $i]] { new { if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker tag $tag UpdateGroupDialog } } } update { if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker tag update $tag UpdateGroupDialog } } } delete { if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker $tag delete UpdateGroupDialog } } } select { if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker $tag select } } } color { incr i if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker $tag color \ [string tolower [lindex $var $i]] } } } copy { if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker $tag copy } } } cut { if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker $tag cut } } } font { incr i if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker $tag font \ "\{[lindex $var $i]\}" } } } move { if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker $tag move \ [lindex $var [expr $i+1]] \ [lindex $var [expr $i+2]] } } incr i 2 } movefront { if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker $tag move front } } } moveback { if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker $tag move back } } } property { if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker $tag property \ [lindex $var [expr $i+1]] \ [lindex $var [expr $i+2]] } } incr i 2 } } } } copy {MarkerCopy} cut {MarkerCut} paste { set marker(paste,system) [string tolower [lindex $var [expr $i+1]]] switch -- $marker(paste,system) { image - physical - detector - amplifier - wcs - wcsa - wcsb - wcsc - wcsd - wcse - wcsf - wcsg - wcsh - wcsi - wcsj - wcsk - wcsl - wcsm - wcsn - wcso - wcsp - wcsq - wcsr - wcss - wcst - wcsu - wcsv - wcsw - wcsx - wcsy - wcsz {} default {set marker(paste,system) wcs} } # backward compatibility if {[string range [lindex $var [expr $i+2]] 0 0] == {-}} { incr i 1 } else { incr i 2 } MarkerPaste } undo {MarkerUndo} composite {CompositeCreate} desolve - dissove {CompositeDelete} template { incr i set ff [lindex $var $i] incr i switch -- [string tolower [lindex $var $i]] { at { incr i set ra [lindex $var $i] incr i set dec [lindex $var $i] incr i set sys [string tolower [lindex $var $i]] incr i set sky [string tolower [lindex $var $i]] switch -- $sys { fk4 - fk5 - icrs - galatic - ecliptic { set sky $sys set sys wcs incr i -1 } } LoadTemplateMarkerAt $ff $ra $dec $sys $sky FileLast templatefbox $ff } default { LoadTemplateMarker $ff FileLast templatefbox $ff incr i -1 } } } savetemplate { incr i set ff [lindex $var $i] if {$ff != {}} { if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker save template "\{$ff\}" } } FileLast templatefbox $ff } } command { incr i if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker command $marker(format) \ "\{[lindex $var $i]\}" } } UpdateGroupDialog } list { incr i switch -- [string tolower [lindex $var $i]] { close {SimpleTextDestroy markertxt} default { if {$current(frame) != {}} { if {[$current(frame) has fits]} { SimpleTextDialog markertxt [msgcat::mc {Region}] \ 80 20 insert top \ [$current(frame) marker list $marker(format) \ $marker(system) $marker(sky) \ $marker(skyformat) $marker(strip)] } } incr i -1 } } } save { incr i set ff [lindex $var $i] if {$ff == {}} { return } if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker save "\{$ff\}" \ $marker(format) $marker(system) $marker(sky) \ $marker(skyformat) $marker(strip) } } FileLast markerfbox $ff } file - load { incr i switch -- [string tolower [lindex $var $i]] { all { incr i set frames $ds9(frames) } default { set frames $current(frame) } } MarkerLoadFrames [lindex $var $i] $frames \ $marker(format) $marker(system) $marker(sky) } default { set format $marker(format) set sys $marker(system) set sky $marker(sky) while {[string range [lindex $var $i] 0 0] == "-"} { switch -- [string tolower [lindex $var $i]] { -format { incr i set format [lindex $var $i] } -sys - -coord - -system { incr i # for backward compatibility switch -- [lindex $var $i] { fk4 - fk5 - icrs - galactic - ecliptic { set sys wcs set sky [lindex $var $i] } default { set sys [lindex $var $i] } } } -sky { incr i set sky [lindex $var $i] } default { Error "Illegal option: [lindex $var $i]" return } } incr i } if {$sock != {}} { # xpa path if {[lindex $var $i] != {}} { MarkerLoadFrames [lindex $var $i] $current(frame) \ $format $sys $sky } else { # fits regions files not supported if {$current(frame) != {}} { if {[$current(frame) has fits]} { $current(frame) marker load $format $sock $sys $sky } } UpdateGroupDialog } } elseif {$fn != {}} { # samp path if {[lindex $var $i] != {}} { MarkerLoadFrames [lindex $var $i] $current(frame) \ $format $sys $sky } else { MarkerLoadFrames $fn $current(frame) \ $format $sys $sky } } else { # this will open a fits regions file MarkerLoadFrames [lindex $var $i] $current(frame) \ $format $sys $sky } } } } proc ProcessSendRegionsCmd {proc id param sock fn} { global current global marker global pmarker if {$current(frame) == {}} { return } switch -- [lindex $param 0] { epsilon {$proc $id "$pmarker(epsilon)\n"} show {$proc $id [ToYesNo $marker(show)]} showtext {$proc $id [ToYesNo $marker(show,text)]} centroid { switch -- [lindex $param 1] { auto {$proc $id [ToYesNo $marker(centroid,auto)]} radius {$proc $id "$marker(centroid,radius)\n"} iteration {$proc $id "$marker(centroid,iteration)\n"} } } autocentroid {$proc $id [ToYesNo $marker(centroid,auto)]} format {$proc $id "$marker(format)\n"} coord - system {$proc $id "$marker(system)\n"} sky {$proc $id "$marker(sky)\n"} coordformat - skyformat {$proc $id "$marker(skyformat)\n"} strip {$proc $id [ToYesNo $marker(strip)]} delim { if {$marker(strip)} { $proc $id "semicolon\n" } else { $proc $id "nl\n" } } shape {$proc $id "$marker(shape)\n"} color {$proc $id "$marker(color)\n"} width {$proc $id "$marker(width)\n"} tag - tags - group - groups {$proc $id "[lsort [$current(frame) get marker tag all]]\n"} default { set format $marker(format) set sys $marker(system) set sky $marker(sky) set skyformat $marker(skyformat) set strip $marker(strip) set select {} set props {} set tags {} set i 0 set l [llength $param] while {$i < $l} { switch -- [lindex $param $i] { -format {incr i; set format [lindex $param $i]} -sys - -coord - -system { incr i # for backward compatibility switch -- [lindex $param $i] { fk4 - fk5 - icrs - galactic - ecliptic { set sys wcs set sky [lindex $param $i] } default {set sys [lindex $param $i]} } } -sky {incr i; set sky [lindex $param $i]} -coordformat - -skyformat { incr i switch -- [lindex $param $i] { deg - degree - degrees {set skyformat degrees} default {set skyformat [lindex $param $i]} } } -strip { incr i; set strip [FromYesNo [lindex $param $i]] } -delim { incr i; if {[lindex $param $i] != "nl"} { set strip 1 } else { set strip 0 } } include {append props " include = 1"} exclude {append props " include = 0"} source {append props " source = 1"} background {append props " source = 0"} selected {set select "select"} -prop { append props " [lindex $param [expr $i+1]] = [lindex $param [expr $i+2]]" incr i 2 } -tag - -group { incr i append tags "tag = \{[lindex $param $i]\}" } } incr i } switch -- $format { xml {set ext {.xml}} default {set ext {.rgn}} } ProcessSend $proc $id $sock $fn $ext \ [$current(frame) marker list $select $format \ $sys $sky $skyformat $strip $props $tags] } } } saods9/ds9/library/markeranalysishist.tcl000644 000765 000000 00000005063 12705445647 021172 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerAnalysisHistogramDialog {varname} { upvar #0 $varname var global $varname global imarker set id $var(id) set frame $var(frame) set vvarname ${imarker(prefix,histogram)}${id}${frame} upvar #0 $vvarname vvar global $vvarname set var(histogram) [info exists ${vvarname}(top)] $var(mb).analysis add checkbutton -label [msgcat::mc {Histogram}] \ -variable ${varname}(histogram) \ -command "MarkerAnalysisHistogramCmd $varname" } # support proc MarkerAnalysisHistogramCmd {varname} { upvar #0 $varname var global $varname MarkerAnalysisHistogram $var(frame) $var(id) $var(histogram) } proc MarkerAnalysisHistogram {frame id plot} { global imarker $frame marker $id analysis histogram $plot if {$plot} { MarkerAnalysisHistogramCB $frame $id set vvarname ${imarker(prefix,histogram)}${id}${frame} upvar #0 $vvarname vvar global $vvarname PlotRaise $vvarname } else { MarkerAnalysisHistogramDeleteCB $frame $id } } # hardcoded marker.C proc MarkerAnalysisHistogramCB {frame id} { global imarker set varname ${imarker(prefix,dialog)}${id}${frame} global $varname upvar #0 $varname var set vvarname ${imarker(prefix,histogram)}${id}${frame} upvar #0 $vvarname vvar global $vvarname set vvar(frame) $frame set vvar(id) $id set vvar(nbins) 512 set xdata ${vvarname}x set ydata ${vvarname}y global $xdata $ydata set ping [PlotPing $vvarname] if {!$ping} { set tt [string totitle [$frame get marker $id type]] PlotLineDialog $vvarname $tt Histogram Values Counts set vvar(manage) 0 set vvar(dim) xy set vvar(xdata) $xdata set vvar(ydata) $ydata blt::vector create $xdata $ydata } $frame get marker $id analysis histogram $xdata $ydata $vvar(nbins) if {!$ping} { PlotExternal $vvarname set vvar(smooth) step set vvar(fill) 1 $vvar(proc,updateelement) $vvarname $vvar(proc,updategraph) $vvarname } PlotStats $vvarname PlotList $vvarname } # hardcoded marker.C proc MarkerAnalysisHistogramDeleteCB {frame id} { # this routine could be called by the region # after the dialog has been deleted global imarker set vvarname ${imarker(prefix,histogram)}${id}${frame} upvar #0 $vvarname vvar global $vvarname # clear any errors global errorInfo set errorInfo {} PlotDestroy $vvarname } saods9/ds9/library/markeranalysispanda.tcl000644 000765 000000 00000007151 12705445647 021306 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerAnalysisPandaDialog {varname} { upvar #0 $varname var global $varname global imarker set id $var(id) set frame $var(frame) set vvarname ${imarker(prefix,panda)}${id}${frame} upvar #0 $vvarname vvar global $vvarname set var(panda) [info exists ${vvarname}(top)] $var(mb).analysis add checkbutton -label [msgcat::mc {Radial Profile}] \ -variable ${varname}(panda) \ -command "MarkerAnalysisPandaCmd $varname" } proc MarkerAnalysisPandaCmd {varname} { upvar #0 $varname var global $varname MarkerAnalysisPanda $var(frame) $var(id) $var(panda) } proc MarkerAnalysisPanda {frame id panda} { global imarker $frame marker $id analysis panda $panda if {$panda} { MarkerAnalysisPandaCB $frame $id set vvarname ${imarker(prefix,panda)}${id}${frame} upvar #0 $vvarname vvar global $vvarname PlotRaise $vvarname } else { MarkerAnalysisPandaDeleteCB $frame $id } } proc MarkerAnalysisPandaSystem {varname} { upvar #0 $varname var global $varname global imarker set frame $var(frame) set id $var(id) set vvarname ${imarker(prefix,panda)}${id}${frame} upvar #0 $vvarname vvar global $vvarname if {[info exists var(panda)]} { if {$var(panda)} { MarkerAnalysisPandaCB $var(frame) $var(id) MarkerAnalysisPandaAxisTitle $vvarname } } } # hardcoded marker.C proc MarkerAnalysisPandaCB {frame id} { global imarker set varname ${imarker(prefix,dialog)}${id}${frame} global $varname upvar #0 $varname var set vvarname ${imarker(prefix,panda)}${id}${frame} upvar #0 $vvarname vvar global $vvarname set vvar(frame) $frame set vvar(id) $id if {[info exists var(system)]} { set vvar(system) $var(system) set sys $var(system) } elseif {[info exists vvar(system)]} { set sys $vvar(system) } else { global wcs set vvar(system) $wcs(system) set sys $wcs(system) } set ping [PlotPing $vvarname] if {!$ping} { set tt [string totitle [$frame get marker $id type]] PlotLineDialog $vvarname $tt "Radial Profile" $sys {} MarkerAnalysisPandaAxisTitle $vvarname } PlotClearData $vvarname PlotDataSet $vvarname 3 [$frame get marker $id analysis panda $sys] $vvar(proc,updategraph) $vvarname PlotStats $vvarname PlotList $vvarname } proc MarkerAnalysisPandaDeleteCB {frame id} { # this routine could be called by the region # after the dialog has been deleted global imarker set vvarname ${imarker(prefix,panda)}${id}${frame} upvar #0 $vvarname vvar global $vvarname # clear any errors global errorInfo set errorInfo {} PlotDestroy $vvarname } proc MarkerAnalysisPandaAxisTitle {vvarname} { upvar #0 $vvarname vvar global $vvarname switch -- $vvar(system) { image - physical - amplifier - detector { set xtitle "Avg Radius (pixels)" set ytitle "Surface Brightness (cnts/pixels**2)" } default { if {[$vvar(frame) has wcs equatorial $vvar(system)]} { set xtitle "Avg Radius (arcsecs)" set ytitle "Surface Brightness (cnts/arcsec**2)" } else { set xtitle "Avg Radius (pixels)" set ytitle "Surface Brightness (cnts/pixels**2)" } } } # set for plot code set vvar(axis,x,title) $xtitle set vvar(axis,y,title) $ytitle # update now (may not make it into plot code) $vvar(graph) xaxis configure -title $xtitle $vvar(graph) yaxis configure -title $ytitle } saods9/ds9/library/markeranalysisplot2d.tcl000644 000765 000000 00000014346 12705445647 021433 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # support proc MarkerAnalysisPlot2dDialog {varname} { upvar #0 $varname var global $varname global imarker set id $var(id) set frame $var(frame) set vvarname ${imarker(prefix,plot2d)}${id}${frame} upvar #0 $vvarname vvar global $vvarname set var(plot2d) [info exists ${vvarname}(top)] set var(method) average $var(mb).analysis add checkbutton -label [msgcat::mc {Plot 2D}] \ -variable ${varname}(plot2d) \ -command "MarkerAnalysisPlot2dCmd $varname" $var(mb).analysis add separator $var(mb).analysis add cascade \ -label [msgcat::mc {Method}] \ -menu $var(mb).analysis.method menu $var(mb).analysis.method $var(mb).analysis.method add radiobutton \ -label [msgcat::mc {Average}] \ -variable ${varname}(method) -value average \ -command "MarkerAnalysisPlot2dMethod $varname" $var(mb).analysis.method add radiobutton \ -label [msgcat::mc {Sum}] \ -variable ${varname}(method) -value sum \ -command "MarkerAnalysisPlot2dMethod $varname" } proc MarkerAnalysisPlot2dCmd {varname} { upvar #0 $varname var global $varname MarkerAnalysisPlot2d $var(frame) $var(id) $var(plot2d) } proc MarkerAnalysisPlot2d {frame id plot} { global imarker $frame marker $id analysis plot2d $plot if {$plot} { MarkerAnalysisPlot2dCB $frame $id set vvarname ${imarker(prefix,plot2d)}${id}${frame} upvar #0 $vvarname vvar global $vvarname PlotRaise $vvarname } else { MarkerAnalysisPlot2dDeleteCB $frame $id } } proc MarkerAnalysisPlot2dMethod {varname} { upvar #0 $varname var global $varname global imarker set frame $var(frame) set id $var(id) set vvarname ${imarker(prefix,plot2d)}${id}${frame} upvar #0 $vvarname vvar global $vvarname if {[info exists var(plot2d)]} { if {$var(plot2d)} { MarkerAnalysisPlot2dCB $var(frame) $var(id) MarkerAnalysisPlot2dYAxisTitle $vvarname } } } proc MarkerAnalysisPlot2dSystem {varname} { upvar #0 $varname var global $varname global imarker set frame $var(frame) set id $var(id) set vvarname ${imarker(prefix,plot2d)}${id}${frame} upvar #0 $vvarname vvar global $vvarname if {[info exists var(plot2d)]} { if {$var(plot2d)} { MarkerAnalysisPlot2dCB $var(frame) $var(id) MarkerAnalysisPlot2dXAxisTitle $vvarname } } } # hardcoded marker.C proc MarkerAnalysisPlot2dCB {frame id} { global imarker set varname ${imarker(prefix,dialog)}${id}${frame} global $varname upvar #0 $varname var set vvarname ${imarker(prefix,plot2d)}${id}${frame} upvar #0 $vvarname vvar global $vvarname set vvar(frame) $frame set vvar(id) $id if {[info exists var(system)]} { set vvar(system) $var(system) set sys $var(system) } elseif {[info exists vvar(system)]} { set sys $vvar(system) } else { global wcs set vvar(system) $wcs(system) set sys $wcs(system) } if {[info exists var(sky)]} { set vvar(sky) $var(sky) set sky $var(sky) } elseif {[info exists vvar(sky)]} { set sky $vvar(sky) } else { global wcs set sky $wcs(sky) } if {[info exists var(method)]} { set vvar(method) $var(method) set method $var(method) } elseif {[info exists vvar(method)]} { set method $vvar(method) } else { set vvar(method) average set method average } set xdata ${vvarname}x set ydata ${vvarname}y set xcdata ${vvarname}xc set ycdata ${vvarname}yc global $xdata $ydata $xcdata $ycdata set ping [PlotPing $vvarname] if {!$ping} { set tt [string totitle [$frame get marker $id type]] PlotLineDialog $vvarname $tt Plot2D $sys Counts MarkerAnalysisPlot2dXAxisTitle $vvarname MarkerAnalysisPlot2dYAxisTitle $vvarname # setup our own formatting set vvar(graph,format) 0 set vvar(xcdata) $xcdata set vvar(ycdata) $ycdata $vvar(graph) xaxis configure \ -command "MarkerAnalysisPlot2dXAxis $vvarname" set vvar(manage) 0 set vvar(dim) xy set vvar(xdata) $xdata set vvar(ydata) $ydata blt::vector create $xdata $ydata $xcdata $ycdata } $frame get marker $id analysis plot2d $xdata $ydata $xcdata $ycdata \ $sys $sky $method if {!$ping} { PlotExternal $vvarname $vvar(proc,updateelement) $vvarname $vvar(proc,updategraph) $vvarname } PlotStats $vvarname PlotList $vvarname } proc MarkerAnalysisPlot2dDeleteCB {frame id} { # this routine could be called by the region # after the dialog has been deleted global imarker set vvarname ${imarker(prefix,plot2d)}${id}${frame} upvar #0 $vvarname vvar global $vvarname set xcdata ${vvarname}xc set ycdata ${vvarname}yc # clear extra vectors global $xcdata $ycdata catch {blt::vector destroy $xcdata $ycdata} # clear any errors global errorInfo set errorInfo {} PlotDestroy $vvarname } proc MarkerAnalysisPlot2dXAxisTitle {vvarname} { upvar #0 $vvarname vvar global $vvarname switch -- $vvar(system) { image - physical - amplifier - detector {set xtitle "$vvar(system)"} default { if {[$vvar(frame) has wcs equatorial $vvar(system)]} { set xtitle "$vvar(system)" } else { set xtitle "[$vvar(frame) get wcs name $vvar(system)]" } } } # set for plot code set vvar(axis,x,title) $xtitle # update now (may not make it into plot code) $vvar(graph) xaxis configure -title $xtitle } proc MarkerAnalysisPlot2dYAxisTitle {vvarname} { upvar #0 $vvarname vvar global $vvarname # set for plot code set vvar(axis,y,title) "Counts [string totitle $vvar(method)]" # update now (may not make it into plot code) $vvar(graph) yaxis configure -title $vvar(axis,y,title) } proc MarkerAnalysisPlot2dXAxis {vvarname w xx} { upvar #0 $vvarname vvar global $vvarname set x [expr $xx-1] global $vvar(xcdata) $vvar(ycdata) # sometimes, $x equals $vvar(xcdata) length set ll [$vvar(xcdata) length] if {($ll>=1) && ($x>=0) && ($x<$ll)} { set a [format "%6.3f" [expr "$$vvar(xcdata)\($x\)"]] set b [format "%6.3f" [expr "$$vvar(ycdata)\($x\)"]] return "$a\n$b" } else { return {} } } saods9/ds9/library/markeranalysisplot3d.tcl000644 000765 000000 00000012310 12705445647 021421 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerAnalysisPlot3dDialog {varname} { upvar #0 $varname var global $varname global imarker set id $var(id) set frame $var(frame) set vvarname ${imarker(prefix,plot3d)}${id}${frame} upvar #0 $vvarname vvar global $vvarname set var(plot3d) [info exists ${vvarname}(top)] set var(method) average $var(mb).analysis add checkbutton -label [msgcat::mc {Plot 3D}] \ -variable ${varname}(plot3d) \ -command "MarkerAnalysisPlot3dCmd $varname" $var(mb).analysis add separator $var(mb).analysis add cascade \ -label [msgcat::mc {Method}] \ -menu $var(mb).analysis.method menu $var(mb).analysis.method $var(mb).analysis.method add radiobutton \ -label [msgcat::mc {Average}] \ -variable ${varname}(method) -value average \ -command "MarkerAnalysisPlot3dMethod $varname" $var(mb).analysis.method add radiobutton \ -label [msgcat::mc {Sum}] \ -variable ${varname}(method) -value sum \ -command "MarkerAnalysisPlot3dMethod $varname" } # support proc MarkerAnalysisPlot3dCmd {varname} { upvar #0 $varname var global $varname MarkerAnalysisPlot3d $var(frame) $var(id) $var(plot3d) } proc MarkerAnalysisPlot3d {frame id plot} { global imarker $frame marker $id analysis plot3d $plot if {$plot} { MarkerAnalysisPlot3dCB $frame $id set vvarname ${imarker(prefix,plot3d)}${id}${frame} upvar #0 $vvarname vvar global $vvarname PlotRaise $vvarname } else { MarkerAnalysisPlot3dDeleteCB $frame $id } } proc MarkerAnalysisPlot3dMethod {varname} { upvar #0 $varname var global $varname global imarker set frame $var(frame) set id $var(id) set vvarname ${imarker(prefix,plot3d)}${id}${frame} upvar #0 $vvarname vvar global $vvarname if {[info exists var(plot3d)]} { if {$var(plot3d)} { MarkerAnalysisPlot3dCB $frame $id MarkerAnalysisPlot3dYAxisTitle $vvarname } } } proc MarkerAnalysisPlot3dSystem {varname} { upvar #0 $varname var global $varname global imarker set frame $var(frame) set id $var(id) set vvarname ${imarker(prefix,plot3d)}${id}${frame} upvar #0 $vvarname vvar global $vvarname if {[info exists var(plot3d)]} { if {$var(plot3d)} { MarkerAnalysisPlot3dCB $frame $id MarkerAnalysisPlot3dXAxisTitle $vvarname } } } # hardcoded marker.C proc MarkerAnalysisPlot3dCB {frame id} { global imarker set varname ${imarker(prefix,dialog)}${id}${frame} global $varname upvar #0 $varname var set vvarname ${imarker(prefix,plot3d)}${id}${frame} upvar #0 $vvarname vvar global $vvarname set vvar(frame) $frame set vvar(id) $id if {[info exists var(system)]} { set vvar(system) $var(system) set sys $var(system) } elseif {[info exists vvar(system)]} { set sys $vvar(system) } else { global wcs set vvar(system) $wcs(system) set sys $wcs(system) } if {[info exists var(method)]} { set vvar(method) $var(method) set method $var(method) } elseif {[info exists vvar(method)]} { set method $vvar(method) } else { set vvar(method) average set method average } set xdata ${vvarname}x set ydata ${vvarname}y global $xdata $ydata set ping [PlotPing $vvarname] if {!$ping} { set tt [string totitle [$frame get marker $id type]] PlotLineDialog $vvarname $tt Plot3D $sys Counts MarkerAnalysisPlot3dXAxisTitle $vvarname MarkerAnalysisPlot3dYAxisTitle $vvarname set vvar(manage) 0 set vvar(dim) xy set vvar(xdata) $xdata set vvar(ydata) $ydata blt::vector create $xdata $ydata } $frame get marker $id analysis plot3d $xdata $ydata $sys $method if {!$ping} { PlotExternal $vvarname $vvar(proc,updateelement) $vvarname $vvar(proc,updategraph) $vvarname } PlotStats $vvarname PlotList $vvarname } # hardcoded marker.C proc MarkerAnalysisPlot3dDeleteCB {frame id} { # this routine could be called by the region # after the dialog has been deleted global imarker set vvarname ${imarker(prefix,plot3d)}${id}${frame} upvar #0 $vvarname vvar global $vvarname # clear any errors global errorInfo set errorInfo {} PlotDestroy $vvarname } proc MarkerAnalysisPlot3dXAxisTitle {vvarname} { upvar #0 $vvarname vvar global $vvarname switch -- $vvar(system) { image - physical - amplifier - detector {set xtitle "$vvar(system)"} default { set w [string range $vvar(system) 3 3] set tt [string trim [$vvar(frame) get fits header keyword \{CTYPE3$w\}]] if {$tt != {}} { set xtitle "$tt" } else { set xtitle "$vvar(system)" } } } # set for plot code set vvar(axis,x,title) $xtitle # update now (may not make it into plot code) $vvar(graph) xaxis configure -title $xtitle } proc MarkerAnalysisPlot3dYAxisTitle {vvarname} { upvar #0 $vvarname vvar global $vvarname # set for plot code set vvar(axis,y,title) "Counts [string totitle $vvar(method)]" # update now (may not make it into plot code) $vvar(graph) yaxis configure -title $vvar(axis,y,title) } saods9/ds9/library/markeranalysisradial.tcl000644 000765 000000 00000010035 12705445647 021452 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerAnalysisRadialDialog {varname} { upvar #0 $varname var global $varname global imarker set id $var(id) set frame $var(frame) set vvarname ${imarker(prefix,radial)}${id}${frame} upvar #0 $vvarname vvar global $vvarname set var(radial) [info exists ${vvarname}(top)] $var(mb).analysis add checkbutton -label [msgcat::mc {Radial Profile}] \ -variable ${varname}(radial) \ -command "MarkerAnalysisRadialCmd $varname" } proc MarkerAnalysisRadialCmd {varname} { upvar #0 $varname var global $varname MarkerAnalysisRadial $var(frame) $var(id) $var(radial) } proc MarkerAnalysisRadial {frame id radial} { global imarker $frame marker $id analysis radial $radial if {$radial} { MarkerAnalysisRadialCB $frame $id set vvarname ${imarker(prefix,radial)}${id}${frame} upvar #0 $vvarname vvar global $vvarname PlotRaise $vvarname } else { MarkerAnalysisRadialDeleteCB $frame $id } } proc MarkerAnalysisRadialSystem {varname} { upvar #0 $varname var global $varname global imarker set frame $var(frame) set id $var(id) set vvarname ${imarker(prefix,radial)}${id}${frame} upvar #0 $vvarname vvar global $vvarname if {[info exists var(radial)]} { if {$var(radial)} { MarkerAnalysisRadialCB $var(frame) $var(id) MarkerAnalysisRadialAxisTitle $vvarname } } } # hardcoded marker.C proc MarkerAnalysisRadialCB {frame id} { global imarker set varname ${imarker(prefix,dialog)}${id}${frame} global $varname upvar #0 $varname var set vvarname ${imarker(prefix,radial)}${id}${frame} upvar #0 $vvarname vvar global $vvarname set vvar(frame) $frame set vvar(id) $id if {[info exists var(system)]} { set vvar(system) $var(system) set sys $var(system) } elseif {[info exists vvar(system)]} { set sys $vvar(system) } else { global wcs set vvar(system) $wcs(system) set sys $wcs(system) } set xdata ${imarker(prefix,radial)}${id}${frame}x set ydata ${imarker(prefix,radial)}${id}${frame}y set yedata ${imarker(prefix,radial)}${id}${frame}ye global $xdata $ydata $yedata set ping [PlotPing $vvarname] if {!$ping} { set tt [string totitle [$frame get marker $id type]] PlotLineDialog $vvarname $tt "Radial Profile" $sys {} MarkerAnalysisRadialAxisTitle $vvarname set vvar(manage) 0 set vvar(dim) xyey set vvar(xdata) $xdata set vvar(ydata) $ydata set vvar(yedata) $yedata blt::vector create $xdata $ydata $yedata } $frame get marker $id analysis radial $xdata $ydata $yedata $sys if {!$ping} { PlotExternal $vvarname $vvar(proc,updateelement) $vvarname $vvar(proc,updategraph) $vvarname } PlotStats $vvarname PlotList $vvarname } proc MarkerAnalysisRadialDeleteCB {frame id} { # this routine could be called by the region # after the dialog has been deleted global imarker set vvarname ${imarker(prefix,radial)}${id}${frame} upvar #0 $vvarname vvar global $vvarname # clear any errors global errorInfo set errorInfo {} PlotDestroy $vvarname } proc MarkerAnalysisRadialAxisTitle {vvarname} { upvar #0 $vvarname vvar global $vvarname switch -- $vvar(system) { image - physical - amplifier - detector { set xtitle "Avg Radius (pixels)" set ytitle "Surface Brightness (cnts/pixels**2)" } default { if {[$vvar(frame) has wcs equatorial $vvar(system)]} { set xtitle "Avg Radius (arcsecs)" set ytitle "Surface Brightness (cnts/arcsec**2)" } else { set xtitle "Avg Radius (pixels)" set ytitle "Surface Brightness (cnts/pixels**2)" } } } # set for plot code set vvar(axis,x,title) $xtitle set vvar(axis,y,title) $ytitle # update now (may not make it into plot code) $vvar(graph) xaxis configure -title $xtitle $vvar(graph) yaxis configure -title $ytitle } saods9/ds9/library/markeranalysisstats.tcl000644 000765 000000 00000004423 12705445647 021360 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerAnalysisStatsDialog {varname} { upvar #0 $varname var global $varname global imarker set frame $var(frame) set id $var(id) set vvarname ${imarker(prefix,stats)}${id}${frame} upvar #0 $vvarname vvar global $vvarname set var(stats) [info exists ${vvarname}(top)] $var(mb).analysis add checkbutton \ -label [msgcat::mc {Statistics}] \ -variable ${varname}(stats) \ -command "MarkerAnalysisStatsCmd $varname" } proc MarkerAnalysisStatsCmd {varname} { upvar #0 $varname var global $varname MarkerAnalysisStats $var(frame) $var(id) $var(stats) } proc MarkerAnalysisStats {frame id stats} { $frame marker $id analysis stats $stats if {$stats} { MarkerAnalysisStatsCB $frame $id } else { MarkerAnalysisStatsDeleteCB $frame $id } } proc MarkerAnalysisStatsSystem {varname} { upvar #0 $varname var global $varname if {[info exists var(stats)]} { if {$var(stats)} { MarkerAnalysisStatsCB $var(frame) $var(id) } } } # hardcoded marker.C proc MarkerAnalysisStatsCB {frame id} { global imarker set varname ${imarker(prefix,dialog)}${id}${frame} global $varname upvar #0 $varname var set vvarname ${imarker(prefix,stats)}${id}${frame} upvar #0 $vvarname vvar global $vvarname if {[info exists var(system)]} { set vvar(system) $var(system) set sys $var(system) } elseif {[info exists vvar(system)]} { set sys $vvar(system) } else { global wcs set sys $wcs(system) } if {[info exists var(sky)]} { set vvar(sky) $var(sky) set sky $var(sky) } elseif {[info exists vvar(sky)]} { set sky $vvar(sky) } else { global wcs set sky $wcs(sky) } set tt [string totitle [$frame get marker $id type]] set rr [$frame get marker $id analysis stats $sys $sky] SimpleTextDialog $vvarname $tt 80 20 insert top $rr } proc MarkerAnalysisStatsDeleteCB {frame id} { global imarker set vvarname ${imarker(prefix,stats)}${id}${frame} upvar #0 $vvarname vvar global $vvarname if {[info exists $vvarname]} { SimpleTextDestroy $vvarname } } saods9/ds9/library/markerbase.tcl000644 000765 000000 00000022267 12705445647 017376 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerBaseDialog {varname} { upvar #0 $varname var global $varname set tt [$var(frame) get marker $var(id) type] switch -- [lindex $tt 1] { point {set type "[string totitle [lindex $tt 0]] [string totitle [lindex $tt 1]]"} {} {set type [string totitle [lindex $tt 0]]} } # variables - some may already be initialized (compass,ruler) if {![info exists var(system)]} { set rr [$var(frame) get wcs] set var(system) [lindex $rr 0] set var(sky) [lindex $rr 1] set var(skyformat) [lindex $rr 2] } AdjustCoordSystem $varname system # init MarkerBaseTextCB $varname MarkerBaseColorCB $varname MarkerBaseLineWidthCB $varname MarkerBasePropertyCB $varname MarkerBaseFontCB $varname $var(proc,coordCB) $varname # callbacks $var(frame) marker $var(id) callback delete MarkerBaseDeleteCB $varname $var(frame) marker $var(id) callback text MarkerBaseTextCB $varname $var(frame) marker $var(id) callback color MarkerBaseColorCB $varname $var(frame) marker $var(id) callback width MarkerBaseLineWidthCB $varname $var(frame) marker $var(id) callback property MarkerBasePropertyCB $varname $var(frame) marker $var(id) callback font MarkerBaseFontCB $varname # window Toplevel $var(top) $var(mb) 6 [msgcat::mc "$type"] \ "$var(proc,close) $varname" # menus MarkerBaseMenu $varname MarkerBaseFileMenu $varname EditMenu $var(mb) $varname ColorMenu $var(mb).color $varname color [list MarkerBaseColor $varname] WidthDashMenu $var(mb).width $varname linewidth dash \ [list MarkerBaseLineWidth $varname] \ [list MarkerBaseProperty $varname dash] MarkerBasePropertyMenu $varname FontMenu $var(mb).font $varname font font,size font,weight \ font,slant [list MarkerBaseFont $varname] # Param set f [ttk::frame $var(top).param] ttk::label $f.tid -text [msgcat::mc {Number}] ttk::label $f.id -text "$var(id)" ttk::label $f.ttext -text [msgcat::mc {Text}] ttk::entry $f.text -textvariable ${varname}(text) -width 45 grid $f.tid $f.id -padx 2 -pady 2 -sticky w grid $f.ttext $f.text - - - -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $var(top).buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] \ -command "$var(proc,apply) $varname" ttk::button $f.close -text [msgcat::mc {Close}] \ -command "$var(proc,close) $varname" pack $f.apply $f.close -side left -expand true -padx 2 -pady 4 bind $var(top) "$var(proc,apply) $varname" # Fini ttk::separator $var(top).sep -orient horizontal pack $var(top).buttons $var(top).sep -side bottom -fill x pack $var(top).param -side top -fill both -expand true # some window managers need a hint raise $var(top) } # actions proc MarkerBaseClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback delete MarkerBaseDeleteCB $var(frame) marker $var(id) delete callback text MarkerBaseTextCB $var(frame) marker $var(id) delete callback color MarkerBaseColorCB $var(frame) marker $var(id) delete callback width MarkerBaseLineWidthCB $var(frame) marker $var(id) delete callback property MarkerBasePropertyCB $var(frame) marker $var(id) delete callback font MarkerBaseFontCB MarkerBaseDeleteCB $varname unset $varname } proc MarkerBaseApply {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) text \{$var(text)\} UpdateRegionMenu } proc MarkerBaseColor {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) color $var(color) } proc MarkerBaseLineWidth {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) width $var(linewidth) } proc MarkerBaseProperty {varname prop} { upvar #0 $varname var global $varname $var(frame) marker $var(id) property $prop $var($prop) } proc MarkerBaseFont {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) font \ \"$var(font) $var(font,size) $var(font,weight) $var(font,slant)\" } # callbacks proc MarkerBaseDeleteCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBaseDeleteCB" } # variables foreach m [array names marker] { set mm [split $m ,] if {[lindex $mm 0] == $var(frame) && [lindex $mm 1] == $var(id)} { unset marker($m) } } # destroy the window and menubar if {[winfo exists $var(top)]} { destroy $var(top) destroy $var(mb) } } proc MarkerBaseTextCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBaseTextCB" } set var(text) [$var(frame) get marker $var(id) text] } proc MarkerBaseColorCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBaseColorCB" } set var(color) [$var(frame) get marker $var(id) color] } proc MarkerBaseLineWidthCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBaseLineWidthCB" } set var(linewidth) [$var(frame) get marker $var(id) width] } proc MarkerBasePropertyCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBasePropertyCB" } set var(dash) [$var(frame) get marker $var(id) property dash] set var(fixed) [$var(frame) get marker $var(id) property fixed] set var(edit) [$var(frame) get marker $var(id) property edit] set var(move) [$var(frame) get marker $var(id) property move] set var(rotate) [$var(frame) get marker $var(id) property rotate] set var(delete) [$var(frame) get marker $var(id) property delete] set var(include) [$var(frame) get marker $var(id) property include] set var(source) [$var(frame) get marker $var(id) property source] } proc MarkerBaseFontCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBaseFontCB" } set f [$var(frame) get marker $var(id) font] set var(font) [lindex $f 0] set var(font,size) [lindex $f 1] set var(font,weight) [lindex $f 2] set var(font,slant) [lindex $f 3] } proc MarkerBaseCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBaseCoordCB" } AdjustCoordSystem $varname system } # menus proc MarkerBaseMenu {varname} { upvar #0 $varname var global $varname $var(mb) add cascade -label [msgcat::mc {File}] -menu $var(mb).file $var(mb) add cascade -label [msgcat::mc {Edit}] -menu $var(mb).edit $var(mb) add cascade -label [msgcat::mc {Color}] -menu $var(mb).color $var(mb) add cascade -label [msgcat::mc {Width}] -menu $var(mb).width $var(mb) add cascade -label [msgcat::mc {Property}] -menu $var(mb).properties $var(mb) add cascade -label [msgcat::mc {Font}] -menu $var(mb).font } proc MarkerBaseFileMenu {varname} { upvar #0 $varname var global $varname menu $var(mb).file $var(mb).file add command -label [msgcat::mc {Apply}] \ -command "$var(proc,apply) $varname" $var(mb).file add separator $var(mb).file add command -label [msgcat::mc {Close}] \ -command "$var(proc,close) $varname" } proc MarkerBasePropertyMenu {varname} { upvar #0 $varname var global $varname menu $var(mb).properties $var(mb).properties add checkbutton -label [msgcat::mc {Fixed in Size}] \ -variable ${varname}(fixed) \ -command "MarkerBaseProperty $varname fixed" $var(mb).properties add separator $var(mb).properties add checkbutton -label [msgcat::mc {Can Edit}] \ -variable ${varname}(edit) \ -command "MarkerBaseProperty $varname edit" $var(mb).properties add checkbutton -label [msgcat::mc {Can Move}] \ -variable ${varname}(move) \ -command "MarkerBaseProperty $varname move" $var(mb).properties add checkbutton -label [msgcat::mc {Can Rotate}] \ -variable ${varname}(rotate) \ -command "MarkerBaseProperty $varname rotate" $var(mb).properties add checkbutton -label [msgcat::mc {Can Delete}] \ -variable ${varname}(delete) \ -command "MarkerBaseProperty $varname delete" $var(mb).properties add separator $var(mb).properties add radiobutton -label [msgcat::mc {Include}] \ -variable ${varname}(include) -value 1 \ -command "MarkerBaseProperty $varname include" $var(mb).properties add radiobutton -label [msgcat::mc {Exclude}] \ -variable ${varname}(include) -value 0 \ -command "MarkerBaseProperty $varname include" $var(mb).properties add separator $var(mb).properties add radiobutton -label [msgcat::mc {Source}] \ -variable ${varname}(source) -value 1 \ -command "MarkerBaseProperty $varname source" $var(mb).properties add radiobutton -label [msgcat::mc {Background}] \ -variable ${varname}(source) -value 0 \ -command "MarkerBaseProperty $varname source" } saods9/ds9/library/markerbaseannulus.tcl000644 000765 000000 00000017220 12705445647 020775 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerBaseAnnulusDialog {varname} { upvar #0 $varname var global $varname set t [$var(frame) get marker $var(id) type] switch -- $t { ellipseannulus {set type "Ellipse Annulus"} boxannulus {set type "Box Annulus"} default {set type [string totitle $t]} } # variables set rr [$var(frame) get wcs] set var(system) [lindex $rr 0] set var(sky) [lindex $rr 1] set var(skyformat) [lindex $rr 2] AdjustCoordSystem $varname system set var(x) 0 set var(y) 0 # init MarkerBaseTextCB $varname MarkerBaseColorCB $varname MarkerBaseLineWidthCB $varname MarkerBasePropertyCB $varname MarkerBaseFontCB $varname $var(proc,coordCB) $varname MarkerBaseCenterMoveCB $varname # callbacks $var(frame) marker $var(id) callback delete MarkerBaseDeleteCB $varname $var(frame) marker $var(id) callback text MarkerBaseTextCB $varname $var(frame) marker $var(id) callback color MarkerBaseColorCB $varname $var(frame) marker $var(id) callback width MarkerBaseLineWidthCB $varname $var(frame) marker $var(id) callback property MarkerBasePropertyCB $varname $var(frame) marker $var(id) callback font MarkerBaseFontCB $varname $var(frame) marker $var(id) callback move MarkerBaseCenterMoveCB $varname # window Toplevel $var(top) $var(mb) 6 [msgcat::mc "$type"] \ "$var(proc,close) $varname" # menus MarkerBaseMenu $varname MarkerBaseAnnulusFileMenu $varname EditMenu $var(mb) $varname ColorMenu $var(mb).color $varname color [list MarkerBaseColor $varname] WidthDashMenu $var(mb).width $varname linewidth dash \ [list MarkerBaseLineWidth $varname] \ [list MarkerBaseProperty $varname dash] MarkerBasePropertyMenu $varname FontMenu $var(mb).font $varname font font,size font,weight \ font,slant [list MarkerBaseFont $varname] # Param set f [ttk::labelframe $var(top).param -text [msgcat::mc "Parameters"] \ -padding 2] ttk::label $f.tid -text [msgcat::mc {Number}] ttk::label $f.id -text "$var(id)" ttk::label $f.ttext -text [msgcat::mc {Text}] ttk::entry $f.text -textvariable ${varname}(text) -width 45 ttk::label $f.tcenter -text [msgcat::mc {Center}] ttk::entry $f.centerx -textvariable ${varname}(x) -width 13 ttk::entry $f.centery -textvariable ${varname}(y) -width 13 CoordMenuButton $f.ucenter $varname system 1 sky skyformat \ [list $var(proc,coordCB) $varname] CoordMenuEnable $f.ucenter.menu $varname system 1 sky skyformat grid $f.tid $f.id -padx 2 -pady 2 -sticky w grid $f.ttext $f.text - - - -padx 2 -pady 2 -sticky w grid $f.tcenter $f.centerx $f.centery $f.ucenter \ -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $var(top).buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] \ -command "$var(proc,apply) $varname" ttk::button $f.generate -text [msgcat::mc {Generate}] \ -command "$var(proc,generate) $varname" ttk::button $f.close -text [msgcat::mc {Close}] \ -command "$var(proc,close) $varname" pack $f.apply $f.generate $f.close -side left -expand true -padx 2 -pady 4 bind $var(top) "$var(proc,apply) $varname" # Fini grid $var(top).param -sticky news grid $var(top).buttons - - -sticky ew # some window managers need a hint raise $var(top) } proc MarkerBaseAnnulusFileMenu {varname} { upvar #0 $varname var global $varname menu $var(mb).file $var(mb).file add command -label [msgcat::mc {Apply}] \ -command "$var(proc,apply) $varname" $var(mb).file add command -label [msgcat::mc {Generate}] \ -command "$var(proc,generate) $varname" $var(mb).file add separator $var(mb).file add command -label [msgcat::mc {Close}] \ -command "$var(proc,close) $varname" } proc MarkerBaseAnnulusMethodMenu {varname} { upvar #0 $varname var global $varname $var(mb) add cascade -label [msgcat::mc {Method}] -menu $var(mb).method menu $var(mb).method $var(mb).method add radiobutton -label [msgcat::mc {Equal Distance}] \ -variable ${varname}(method) -value dist $var(mb).method add radiobutton -label [msgcat::mc {Equal Area}] \ -variable ${varname}(method) -value area } proc MarkerBaseAnnulusGenerateCircle {varname} { upvar #0 $varname var global $varname $var(annulitxt) delete 1.0 end if {$var(annuli) < 1} { set var(annuli) 1 } set inner $var(inner) set outer $var(outer) set annuli $var(annuli) if {($inner != {}) && ($outer != {}) && ($annuli != {})} { switch -- $var(method) { dist { for {set i 0} {$i<=$annuli} {incr i} { $var(annulitxt) insert end \ "[expr ((($outer-$inner)/double($annuli))*$i)+$inner]\n" } } area { set pi 3.14159265358979323846 set area [expr $pi*(($outer*$outer)-($inner*$inner))/$annuli] set r0 $inner $var(annulitxt) insert end "$r0\n" for {set i 0} {$i<$annuli} {incr i} { set r1 [expr sqrt(($area+($pi*$r0*$r0))/$pi)] $var(annulitxt) insert end \ [format "%.4f\n" $r1] set r0 $r1 } } } } } proc MarkerBaseAnnulusGenerateEllipse {varname} { upvar #0 $varname var global $varname $var(annulitxt) delete 1.0 end if {$var(annuli) < 1} { set var(annuli) 1 } set radius1 $var(radius1) set radius2 $var(radius2) set radius3 $var(radius3) set annuli $var(annuli) if {($radius1 != {}) && ($radius2 != {}) && \ ($radius3 != {}) && ($annuli != {})} { switch -- $var(method) { dist { for {set i 0} {$i<=$annuli} {incr i} { set major [expr ((($radius1-$radius3)/double($annuli))*$i)\ +$radius3] set minor [expr $major*$radius2/$radius1] $var(annulitxt) insert end "$major $minor\n" } } area { set pi 3.14159265358979323846 set r [expr double($radius2)/$radius1] set area [expr $pi*(($radius1*$radius2)-($radius3*$radius3*$r))\ /$annuli] set major0 $radius3 set minor0 [expr $radius3*$r] $var(annulitxt) insert end "$major0 $minor0\n" for {set i 0} {$i<$annuli} {incr i} { set major1 [expr sqrt(($area+($pi*$major0*$minor0)) / \ ($pi*$r))] set minor1 [expr $major1*$r] $var(annulitxt) insert end \ [format "%.4f %.4f\n" $major1 $minor1] set major0 $major1 set minor0 $minor1 } } } } } proc MarkerBaseAnnulusGenerateBox {varname} { upvar #0 $varname var global $varname $var(annulitxt) delete 1.0 end if {$var(annuli) < 1} { set var(annuli) 1 } set radius1 $var(radius1) set radius2 $var(radius2) set radius3 $var(radius3) set annuli $var(annuli) if {($radius1 != {}) && ($radius2 != {}) && \ ($radius3 != {}) && ($annuli != {})} { if {$radius1<=0} { set radius1 1 } if {$radius2<=0} { set radius2 1 } switch -- $var(method) { dist { for {set i 0} {$i<=$annuli} {incr i} { set major [expr ((($radius1-$radius3)/$annuli)*$i)+$radius3] set minor [expr $major*$radius2/$radius1] $var(annulitxt) insert end "$major $minor\n" } } area { set r [expr double($radius2)/$radius1] set area [expr (($radius1*$radius2)-($radius3*$radius3*$r)) \ /$annuli] set major0 $radius3 set minor0 [expr $radius3*$r] $var(annulitxt) insert end "$major0 $minor0\n" for {set i 0} {$i<$annuli} {incr i} { set major1 [expr sqrt(($area+($major0*$minor0))/$r)] set minor1 [expr $major1*$r] $var(annulitxt) insert end \ [format "%.4f %.4f\n" $major1 $minor1] set major0 $major1 set minor0 $minor1 } } } } } saods9/ds9/library/markerbaseannulusrect.tcl000644 000765 000000 00000012477 12705445647 021664 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerBaseAnnulusRectDialog {varname unit major minor} { upvar #0 $varname var global $varname global pmarker set unit2 [string totitle $unit] # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # variables set rr [$var(frame) get wcs] set var(dcoord) [lindex $rr 0] set var(dformat) $pmarker(dformat) AdjustCoordSystem $varname dcoord set var(method) dist # base MarkerBaseAnnulusDialog $varname # menus MarkerBaseAnnulusMethodMenu $varname # analysis $var(mb) add cascade -label [msgcat::mc {Analysis}] -menu $var(mb).analysis menu $var(mb).analysis MarkerAnalysisStatsDialog $varname MarkerAnalysisRadialDialog $varname # callbacks # $var(frame) marker $var(id) callback move $var(proc,editCB) $varname $var(frame) marker $var(id) callback edit $var(proc,editCB) $varname $var(frame) marker $var(id) callback end edit $var(proc,editCB) $varname $var(frame) marker $var(id) callback rotate MarkerBaseCenterRotateCB $varname set f $var(top).param # Radius ttk::label $f.majorTitle -text $major ttk::label $f.minorTitle -text $minor ttk::label $f.outerTitle -text [msgcat::mc "Outer"] ttk::entry $f.radius1 -textvariable ${varname}(radius1) -width 13 ttk::entry $f.radius2 -textvariable ${varname}(radius2) -width 13 DistMenuButton $f.uradius $varname dcoord 1 dformat \ [list $var(proc,distCB) $varname] DistMenuEnable $f.uradius.menu $varname dcoord 1 dformat ttk::label $f.innerTitle -text [msgcat::mc "Inner"] ttk::entry $f.radius3 -textvariable ${varname}(radius3) -width 13 # Annulus ttk::label $f.tannuli -text [msgcat::mc {Annuli}] ttk::entry $f.vannuli -textvariable ${varname}(annuli) -width 13 # Angle ttk::label $f.tangle -text [msgcat::mc {Angle}] ttk::entry $f.vangle -textvariable ${varname}(angle) -width 13 ttk::label $f.uangle -text [msgcat::mc {Degrees}] grid x $f.majorTitle $f.minorTitle -padx 2 -pady 2 -sticky w grid $f.outerTitle $f.radius1 $f.radius2 $f.uradius \ -padx 2 -pady 2 -sticky w grid $f.innerTitle $f.radius3 -padx 2 -pady 2 -sticky w grid $f.tannuli $f.vannuli -padx 2 -pady 2 -sticky w grid $f.tangle $f.vangle $f.uangle -padx 2 -pady 2 -sticky w # Annuli set f [ttk::labelframe $var(top).annuli -text [msgcat::mc {Annuli}] \ -padding 2] set var(annulitxt) [text $f.txt \ -height 10 \ -width 15 \ -wrap none \ -font [font actual TkDefaultFont] \ -yscrollcommand [list $f.yscroll set] \ ] ttk::scrollbar $f.yscroll -command [list $var(annulitxt) yview] \ -orient vertical grid $var(annulitxt) $f.yscroll -sticky news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 # Fini grid $var(top).annuli -row 0 -column 1 -sticky news grid rowconfigure $var(top) 0 -weight 1 grid columnconfigure $var(top) 1 -weight 1 # init - do this last $var(proc,distCB) $varname MarkerBaseCenterRotateCB $varname } # actions proc MarkerBaseAnnulusRectClose {varname} { upvar #0 $varname var global $varname # $var(frame) marker $var(id) delete callback move $var(proc,editCB) $var(frame) marker $var(id) delete callback edit $var(proc,editCB) $var(frame) marker $var(id) delete callback end edit $var(proc,editCB) $var(frame) marker $var(id) delete callback rotate MarkerBaseCenterRotateCB MarkerBaseCenterClose $varname } proc MarkerBaseAnnulusRectApply {varname} { upvar #0 $varname var global $varname set levels {} regsub -all "\n" "[$var(annulitxt) get 1.0 end]" " " levels # and trim any trailing spaces set levels [string trimright $levels " "] if {$levels != {}} { $var(frame) marker $var(id) $var(which) radius "\{$levels\}" \ $var(dcoord) $var(dformat) } MarkerBaseCenterRotate $varname MarkerBaseCenterApply $varname } # callbacks proc MarkerBaseAnnulusRectCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBaseAnnulusRectCoordCB" } MarkerAnalysisRadialSystem $varname MarkerAnalysisStatsSystem $varname MarkerBaseCoordCB $varname MarkerBaseCenterMoveCB $varname MarkerBaseCenterRotateCB $varname } proc MarkerBaseAnnulusRectEditCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBaseAnnulusRectEditCB" } set t [$var(frame) get marker $var(id) $var(which) radius \ $var(dcoord) $var(dformat)] set last [llength $t] set var(annuli) [expr $last/2-1] set var(radius1) [lindex $t [expr $last-2]] set var(radius2) [lindex $t [expr $last-1]] set var(radius3) [lindex $t 0] $var(annulitxt) delete 1.0 end $var(annulitxt) insert end "$t" } proc MarkerBaseAnnulusRectDistCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBaseAnnulusRectDistCB" } $var(proc,editCB) $varname } saods9/ds9/library/markerbasecenter.tcl000644 000765 000000 00000004167 12705445647 020576 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerBaseCenterDialog {varname} { upvar #0 $varname var global $varname # variables set var(x) 0 set var(y) 0 # base MarkerBaseDialog $varname # init MarkerBaseCenterMoveCB $varname # callbacks $var(frame) marker $var(id) callback move MarkerBaseCenterMoveCB $varname set f $var(top).param # Center ttk::label $f.tcenter -text [msgcat::mc {Center}] ttk::entry $f.centerx -textvariable ${varname}(x) -width 13 ttk::entry $f.centery -textvariable ${varname}(y) -width 13 CoordMenuButton $f.ucenter $varname system 1 sky skyformat \ [list $var(proc,coordCB) $varname] CoordMenuEnable $f.ucenter.menu $varname system 1 sky skyformat grid $f.tcenter $f.centerx $f.centery $f.ucenter -padx 2 -pady 2 -sticky w } proc MarkerBaseCenterClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback move MarkerBaseCenterMoveCB MarkerBaseClose $varname } proc MarkerBaseCenterApply {varname} { upvar #0 $varname var global $varname if {$var(x) != {} && $var(y) != {}} { $var(frame) marker $var(id) move to $var(system) $var(sky) \ $var(x) $var(y) } MarkerBaseApply $varname } proc MarkerBaseCenterRotate {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) angle $var(angle) $var(system) $var(sky) } # callbacks proc MarkerBaseCenterMoveCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBaseCenterMoveCB" } set center [$var(frame) get marker $var(id) center $var(system) $var(sky) \ $var(skyformat)] set var(x) [lindex $center 0] set var(y) [lindex $center 1] } proc MarkerBaseCenterRotateCB {varname {dummy {}}} { upvar #0 $varname var global $varname set var(angle) [$var(frame) get marker $var(id) angle \ $var(system) $var(sky)] } saods9/ds9/library/markerbaseline.tcl000644 000765 000000 00000005523 12705445647 020242 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerBaseLineDialog {varname width height} { upvar #0 $varname var global $varname global pmarker # variables - some may already initialized (ruler) if {![info exists ${varname}(dcoord)]} { set rr [$var(frame) get wcs] set var(dcoord) [lindex $rr 0] set var(dformat) $pmarker(dformat) } AdjustCoordSystem $varname dcoord # procs set var(proc,close) MarkerBaseLineClose # base MarkerBaseDialog $varname # init $var(proc,distCB) $varname # callbacks $var(frame) marker $var(id) callback move "$var(proc,editCB)" $varname $var(frame) marker $var(id) callback edit "$var(proc,editCB)" $varname set f $var(top).param # Points ttk::label $f.title -text [msgcat::mc {Points}] ttk::entry $f.x -textvariable ${varname}(x) -width 13 ttk::entry $f.y -textvariable ${varname}(y) -width 13 CoordMenuButton $f.coord $varname system 1 sky skyformat \ [list $var(proc,coordCB) $varname] CoordMenuEnable $f.coord.menu $varname system 1 sky skyformat ttk::entry $f.x2 -textvariable ${varname}(x2) -width 13 ttk::entry $f.y2 -textvariable ${varname}(y2) -width 13 # Length ttk::label $f.dtitle -text [msgcat::mc {Length}] ttk::label $f.dist -textvariable ${varname}(dist) \ -relief groove -width 12 DistMenuButton $f.udist $varname dcoord 1 dformat \ [list $var(proc,distCB) $varname] DistMenuEnable $f.udist.menu $varname dcoord 1 dformat # Angle ttk::label $f.tangle -text [msgcat::mc {Angle}] ttk::label $f.angle -textvariable ${varname}(angle) \ -relief groove -width 12 ttk::label $f.uangle -text [msgcat::mc {Degrees}] grid $f.title $f.x $f.y $f.coord -padx 2 -pady 2 -sticky w grid x $f.x2 $f.y2 -padx 2 -pady 2 -sticky w grid $f.dtitle $f.dist $f.udist -padx 2 -pady 2 -sticky w grid $f.tangle $f.angle $f.uangle -padx 2 -pady 2 -sticky w } proc MarkerBaseLineClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback move "$var(proc,editCB)" $var(frame) marker $var(id) delete callback edit "$var(proc,editCB)" MarkerBaseClose $varname } proc MarkerBaseLineApply {varname} { upvar #0 $varname var global $varname MarkerBaseApply $varname } proc MarkerBaseLineEditCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBaseLineEditCB" } set p [$var(frame) get marker $var(id) $var(which) point $var(system) \ $var(sky) $var(skyformat)] set var(x) [lindex $p 0] set var(y) [lindex $p 1] set var(x2) [lindex $p 2] set var(y2) [lindex $p 3] } saods9/ds9/library/markerbasepanda.tcl000644 000765 000000 00000013124 12705445647 020372 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerBasePandaDialog {varname} { upvar #0 $varname var global $varname global pmarker # variables set rr [$var(frame) get wcs] set var(dcoord) [lindex $rr 0] set var(dformat) $pmarker(dformat) AdjustCoordSystem $varname dcoord set var(method) dist set var(init) 0 # base MarkerBaseAnnulusDialog $varname # menus MarkerBaseAnnulusMethodMenu $varname # analysis $var(mb) add cascade -label [msgcat::mc {Analysis}] -menu $var(mb).analysis menu $var(mb).analysis MarkerAnalysisStatsDialog $varname MarkerAnalysisPandaDialog $varname # callbacks # $var(frame) marker $var(id) callback move $var(proc,editCB) $varname $var(frame) marker $var(id) callback edit $var(proc,editCB) $varname $var(frame) marker $var(id) callback end edit $var(proc,editCB) $varname set f $var(top).param # Angles ttk::label $f.tang1 -text [msgcat::mc {Start}] ttk::label $f.tang2 -text [msgcat::mc {End}] ttk::label $f.tangles -text [msgcat::mc {Angles}] ttk::entry $f.ang1 -textvariable ${varname}(ang1) -width 13 ttk::entry $f.ang2 -textvariable ${varname}(ang2) -width 13 ttk::label $f.uangles -text [msgcat::mc {Degrees}] ttk::label $f.tangnum -text [msgcat::mc {Number}] ttk::entry $f.angnum -textvariable ${varname}(angnum) -width 13 grid x $f.tang1 $f.tang2 -padx 2 -pady 2 -sticky w grid $f.tangles $f.ang1 $f.ang2 $f.uangles -padx 2 -pady 2 -sticky w grid $f.tangnum $f.angnum -padx 2 -pady 2 -sticky w # Radius set f [ttk::labelframe $var(top).radius -text [msgcat::mc {Radius}] \ -padding 2] set var(annulitxt) [text $f.txt \ -height 15 \ -width 15 \ -wrap none \ -font [font actual TkDefaultFont] \ -yscrollcommand [list $f.yscroll set] \ ] ttk::scrollbar $f.yscroll -command [list $var(annulitxt) yview] \ -orient vertical grid $var(annulitxt) $f.yscroll -sticky news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 # Radius Fini grid $var(top).radius -row 0 -column 1 -sticky news grid rowconfigure $var(top) 0 -weight 1 grid columnconfigure $var(top) 1 -weight 1 # Angles set f [ttk::labelframe $var(top).angles -text [msgcat::mc {Angles}] \ -padding 2] set var(angtxt) [text $f.txt \ -height 15 \ -width 15 \ -wrap none \ -font [font actual TkDefaultFont] \ -yscrollcommand [list $f.yscroll set] \ ] ttk::scrollbar $f.yscroll -command [list $var(angtxt) yview] \ -orient vertical grid $var(angtxt) $f.yscroll -sticky news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 # Angles Fini grid $var(top).angles -row 0 -column 2 -sticky news grid rowconfigure $var(top) 0 -weight 1 grid columnconfigure $var(top) 2 -weight 1 set var(init) 1 } # actions proc MarkerBasePandaClose {varname} { upvar #0 $varname var global $varname # $var(frame) marker $var(id) delete callback move $var(proc,editCB) $var(frame) marker $var(id) delete callback edit $var(proc,editCB) $var(frame) marker $var(id) delete callback end edit $var(proc,editCB) MarkerBaseCenterClose $varname } proc MarkerBasePandaApply {varname} { upvar #0 $varname var global $varname set levels {} regsub -all "\n" "[$var(annulitxt) get 1.0 end]" " " levels # and trim any trailing spaces set levels [string trimright $levels " "] set angles {} regsub -all "\n" "[$var(angtxt) get 1.0 end]" " " angles # and trim any trailing spaces set angles [string trimright $angles " "] if {($levels != {}) && ($angles != {})} { $var(frame) marker $var(id) $var(which) edit \ "\{$angles\}" "\{$levels\}" $var(system) $var(sky) \ $var(dcoord) $var(dformat) } MarkerBaseCenterApply $varname } proc MarkerBasePandaGenerateAngles {varname} { upvar #0 $varname var global $varname $var(angtxt) delete 1.0 end set ang1 $var(ang1) set ang2 $var(ang2) set angnum $var(angnum) if {($ang1 != {}) && ($ang2 != {}) && ($angnum != {})} { # normalize between 0 <= ang < 360 if {[::math::fuzzy::tgt $ang1 0]} { while {[::math::fuzzy::tge $ang1 360]} { set ang1 [expr $ang1-360] } } else { while {[::math::fuzzy::tlt $ang1 0]} { set ang1 [expr $ang1+360] } } if {[::math::fuzzy::tgt $ang2 0]} { while {[::math::fuzzy::tge $ang2 360]} { set ang2 [expr $ang2-360] } } else { while {[::math::fuzzy::tlt $ang2 0]} { set ang2 [expr $ang2+360] } } # with ang2 > ang1 while {[::math::fuzzy::tge $ang1 $ang2]} { set ang2 [expr $ang2+360] } for {set i 0} {$i<=$angnum} {incr i} { set v [expr ((($ang2-$ang1)/double($angnum))*$i)+$ang1] $var(angtxt) insert end "$v\n" } } } # callbacks proc MarkerBasePandaCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBasePandaCoordCB" } MarkerAnalysisPandaSystem $varname MarkerAnalysisStatsSystem $varname MarkerBaseCoordCB $varname MarkerBaseCenterMoveCB $varname if {$var(init)} { $var(proc,editCB) $varname } } proc MarkerBasePandaDistCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBasePandaDistCB" } $var(proc,editCB) $varname } saods9/ds9/library/markerbasepandarect.tcl000644 000765 000000 00000006741 12750431736 021251 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerBasePandaRectDialog {varname} { upvar #0 $varname var global $varname # base panda dialog MarkerBasePandaDialog $varname # callbacks $var(frame) marker $var(id) callback rotate \ MarkerBaseCenterRotateCB $varname set f $var(top).param # Radius ttk::label $f.tmajor -text [msgcat::mc {Major}] ttk::label $f.tminor -text [msgcat::mc {Minor}] ttk::label $f.touter -text [msgcat::mc {Outer}] ttk::entry $f.radius1 -textvariable ${varname}(radius1) -width 13 ttk::entry $f.radius2 -textvariable ${varname}(radius2) -width 13 DistMenuButton $f.uradius $varname dcoord 1 dformat \ [list $var(proc,distCB) $varname] DistMenuEnable $f.uradius.menu $varname dcoord 1 dformat ttk::label $f.tinner -text [msgcat::mc {Inner}] ttk::entry $f.radius3 -textvariable ${varname}(radius3) -width 13 # Annuli ttk::label $f.tannuli -text [msgcat::mc {Annuli}] ttk::entry $f.annuli -textvariable ${varname}(annuli) -width 13 grid x $f.tmajor $f.tminor -padx 2 -pady 2 -sticky w grid $f.touter $f.radius1 $f.radius2 $f.uradius -padx 2 -pady 2 -sticky w grid $f.tinner $f.radius3 -padx 2 -pady 2 -sticky w grid $f.tannuli $f.annuli -padx 2 -pady 2 -sticky w # Angle ttk::label $f.tangle -text [msgcat::mc {Angle}] ttk::entry $f.angle -textvariable ${varname}(angle) -width 13 ttk::label $f.uangle -text [msgcat::mc {Degrees}] grid $f.tangle $f.angle $f.uangle -padx 2 -pady 2 -sticky w # init - do this last $var(proc,distCB) $varname MarkerBaseCenterRotateCB $varname } # actions proc MarkerBasePandaRectClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback rotate MarkerBaseCenterRotateCB MarkerBasePandaClose $varname } proc MarkerBasePandaRectApply {varname} { upvar #0 $varname var global $varname MarkerBasePandaApply $varname MarkerBaseCenterRotate $varname } # callbacks proc MarkerBasePandaRectCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBasePandaRectCoordCB" } MarkerBasePandaCoordCB $varname MarkerBaseCenterRotateCB $varname } proc MarkerBasePandaRectEditCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBasePandaRectEditCB" } set t [$var(frame) get marker $var(id) $var(which) radius \ $var(dcoord) $var(dformat)] set last [llength $t] set var(annuli) [expr $last/2-1] set var(radius1) [lindex $t [expr $last-2]] set var(radius2) [lindex $t [expr $last-1]] set var(radius3) [lindex $t 0] $var(annulitxt) delete 1.0 end $var(annulitxt) insert end "$t" set a [$var(frame) get marker $var(id) $var(which) angle \ $var(system) $var(sky)] set last [expr [llength $a]-1] set var(ang1) [lindex $a 0] set var(ang2) [lindex $a $last] set var(angnum) $last $var(angtxt) delete 1.0 end $var(angtxt) insert end "$a" } proc MarkerBasePandaRectDistCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "MarkerBasePandaRectDistCB" } MarkerBasePandaDistCB $varname } saods9/ds9/library/markerdialog.tcl000644 000765 000000 00000020422 12705445647 017712 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MarkerLoadDialog {} { global marker global ed global current global wcs set w {.mkd} set ed(ok) 0 set ed(format) $marker(format) set ed(load) $marker(load) set ed(frame) $current(frame) set ed(system) $wcs(system) set ed(sky) $wcs(sky) set ed(skyformat) $wcs(skyformat) AdjustCoordSystem ed system DialogCreate $w [msgcat::mc {Load Regions}] ed(ok) # Param set f [ttk::frame $w.param] ttk::label $f.formattitle -text [msgcat::mc {Format}] set m $f.formatbutton.menu ttk::menubutton $f.formatbutton -textvariable ed(format) -menu $m ttk::label $f.coordtitle -text [msgcat::mc {Coordinate System}] set ed(cb) $f.coordbutton CoordMenuButton $ed(cb) ed system 1 sky skyformat {} ttk::radiobutton $f.current -text [msgcat::mc {Load into Current Frame}] \ -variable ed(load) -value current ttk::radiobutton $f.all -text [msgcat::mc {Load into All Frames}] \ -variable ed(load) -value all menu $m $m add radiobutton -label {DS9/Funtools} -variable ed(format) -value ds9 \ -command UpdateMarkerLoadDialog $m add radiobutton -label {XML} -variable ed(format) -value xml \ -command UpdateMarkerLoadDialog $m add radiobutton -label {CIAO} -variable ed(format) -value ciao \ -command UpdateMarkerLoadDialog $m add radiobutton -label {SAOtng} -variable ed(format) -value saotng \ -command UpdateMarkerLoadDialog $m add radiobutton -label {SAOimage} -variable ed(format) -value saoimage \ -command UpdateMarkerLoadDialog $m add radiobutton -label {IRAF PROS} -variable ed(format) -value pros \ -command UpdateMarkerLoadDialog $m add radiobutton -label {X Y} -variable ed(format) -value xy \ -command UpdateMarkerLoadDialog grid $f.formattitle $f.formatbutton -padx 2 -pady 2 -sticky w grid $f.coordtitle $f.coordbutton -padx 2 -pady 2 -sticky w grid $f.current - -padx 2 -pady 2 -sticky w grid $f.all - -padx 2 -pady 2 -sticky w # Button set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true UpdateMarkerLoadDialog DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w if {$ed(ok)} { set marker(format) $ed(format) set marker(system) $ed(system) set marker(sky) $ed(sky) set marker(skyformat) $ed(skyformat) set marker(load) $ed(load) } set rr $ed(ok) unset ed return $rr } proc UpdateMarkerLoadDialog {} { global ed global current set mm $ed(cb).menu set ed(frame) $current(frame) CoordMenuEnable $mm ed system 1 sky skyformat switch -- $ed(format) { xy {$ed(cb) configure -state normal} default {$ed(cb) configure -state disabled} } AdjustCoordSystem ed system CoordMenuButtonCmd ed system sky {} } proc MarkerSaveDialog {title} { global marker global ed global current global wcs set w {.mkd} set ed(ok) 0 set ed(format) $marker(format) set ed(frame) $current(frame) set ed(system) $wcs(system) set ed(sky) $wcs(sky) set ed(skyformat) $wcs(skyformat) AdjustCoordSystem ed system DialogCreate $w $title ed(ok) # Param set f [ttk::frame $w.param] ttk::label $f.formattitle -text [msgcat::mc {Format}] set m $f.formatbutton.menu ttk::menubutton $f.formatbutton -textvariable ed(format) -menu $m ttk::label $f.coordtitle -text [msgcat::mc {Coordinate System}] set ed(cb) $f.coordbutton CoordMenuButton $ed(cb) ed system 1 sky skyformat UpdateMarkerSaveDialog menu $m $m add radiobutton -label {DS9/Funtools} -variable ed(format) -value ds9 \ -command UpdateMarkerSaveDialog $m add radiobutton -label {XML} -variable ed(format) -value xml \ -command UpdateMarkerSaveDialog $m add radiobutton -label {CIAO} -variable ed(format) -value ciao \ -command UpdateMarkerSaveDialog $m add radiobutton -label {SAOtng} -variable ed(format) -value saotng \ -command UpdateMarkerSaveDialog $m add radiobutton -label {SAOimage} -variable ed(format) -value saoimage \ -command UpdateMarkerSaveDialog $m add radiobutton -label {IRAF PROS} -variable ed(format) -value pros \ -command UpdateMarkerSaveDialog $m add radiobutton -label {X Y} -variable ed(format) -value xy \ -command UpdateMarkerSaveDialog grid $f.formattitle $f.formatbutton -padx 2 -pady 2 -sticky w grid $f.coordtitle $f.coordbutton -padx 2 -pady 2 -sticky w # Button set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true UpdateMarkerSaveDialog DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w if {$ed(ok)} { set marker(format) $ed(format) set marker(system) $ed(system) set marker(sky) $ed(sky) set marker(skyformat) $ed(skyformat) } set rr $ed(ok) unset ed return $rr } proc UpdateMarkerSaveDialog {} { global ed global current set mm $ed(cb).menu set ed(frame) $current(frame) CoordMenuEnable $mm ed system 1 sky skyformat switch -- $ed(format) { ds9 - xml - xy {} ciao { switch -- $ed(system) { detector - amplifier - physical - image {set ed(system) physical} wcs - default {set ed(system) wcs} } set ed(sky) fk5 set ed(skyformat) sexagesimal $mm entryconfig [msgcat::mc {Multiple WCS}] -state disabled $mm entryconfig [msgcat::mc {Image}] -state disabled $mm entryconfig [msgcat::mc {Amplifier}] -state disabled $mm entryconfig [msgcat::mc {Detector}] -state disabled $mm entryconfig [msgcat::mc {FK4}] -state disabled $mm entryconfig [msgcat::mc {ICRS}] -state disabled $mm entryconfig [msgcat::mc {Galactic}] -state disabled $mm entryconfig [msgcat::mc {Ecliptic}] -state disabled $mm entryconfig [msgcat::mc {Degrees}] -state disabled } saotng { switch -- $ed(system) { detector - amplifier - image - physical {set ed(system) image} wcs - default {set ed(system) wcs} } $mm entryconfig [msgcat::mc {Multiple WCS}] -state disabled $mm entryconfig [msgcat::mc {Physical}] -state disabled $mm entryconfig [msgcat::mc {Amplifier}] -state disabled $mm entryconfig [msgcat::mc {Detector}] -state disabled } saoimage { set ed(system) image $mm entryconfig [msgcat::mc {WCS}] -state disabled $mm entryconfig [msgcat::mc {Multiple WCS}] -state disabled $mm entryconfig [msgcat::mc {Physical}] -state disabled $mm entryconfig [msgcat::mc {Amplifier}] -state disabled $mm entryconfig [msgcat::mc {Detector}] -state disabled $mm entryconfig [msgcat::mc {FK4}] -state disabled $mm entryconfig [msgcat::mc {FK5}] -state disabled $mm entryconfig [msgcat::mc {ICRS}] -state disabled $mm entryconfig [msgcat::mc {Galactic}] -state disabled $mm entryconfig [msgcat::mc {Ecliptic}] -state disabled $mm entryconfig [msgcat::mc {Degrees}] -state disabled $mm entryconfig {Sexagesimal} -state disabled } pros { switch -- $ed(system) { detector - physical - amplifier {set ed(system) physical} image {} wcs - default {set ed(system) wcs} } if {$ed(sky) == {icrs}} { set ed(sky) fk5 } $mm entryconfig [msgcat::mc {Multiple WCS}] -state disabled $mm entryconfig [msgcat::mc {Amplifier}] -state disabled $mm entryconfig [msgcat::mc {Detector}] -state disabled $mm entryconfig [msgcat::mc {ICRS}] -state disabled } } AdjustCoordSystem ed system CoordMenuButtonCmd ed system sky {} } saods9/ds9/library/mask.tcl000644 000765 000000 00000015725 12705445647 016216 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MaskDef {} { global mask global imask global pmask set imask(top) .msk set imask(mb) .mskmb set mask(color) red set mask(mark) 1 set mask(transparency) 0 array set pmask [array get mask] } proc MaskTransparency {} { global mask global current if {$current(frame) != {}} { $current(frame) mask transparency $mask(transparency) } } proc MaskClear {} { global current if {$current(frame) != {}} { $current(frame) mask clear } } proc MaskDialog {} { global mask global imask global current global ds9 # see if we already have a ctr window visible if {[winfo exists $imask(top)]} { raise $imask(top) return } # create the mask window set w $imask(top) set mb $imask(mb) Toplevel $w $mb 6 [msgcat::mc {Mask Parameters}] MaskDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit menu $mb.file $mb.file add command -label "[msgcat::mc {Open}]..." \ -command [list OpenDialog fits mask] $mb.file add cascade -label [msgcat::mc {Open as}] \ -menu $mb.file.open $mb.file add separator $mb.file add cascade -label [msgcat::mc {Import}] \ -menu $mb.file.import $mb.file add separator $mb.file add command -label [msgcat::mc {Apply}] -command MaskApplyDialog $mb.file add command -label [msgcat::mc {Clear}] -command MaskClear $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] -command MaskDestroyDialog menu $mb.file.open $mb.file.open add command \ -label "[msgcat::mc {Mosaic WCS}]..." \ -command [list OpenDialog mosaicimagewcs mask] $mb.file.open add command \ -label "[msgcat::mc {Mosaic WCS Segment}]..." \ -command [list OpenDialog mosaicwcs mask] $mb.file.open add command \ -label "[msgcat::mc {Mosaic IRAF}]..." \ -command [list OpenDialog mosaicimageiraf mask] $mb.file.open add command \ -label "[msgcat::mc {Mosaic IRAF Segment}]..." \ -command [list OpenDialog mosaiciraf mask] menu $mb.file.import $mb.file.import add command \ -label "[msgcat::mc {Array}]..." \ -command [list ImportDialog array mask] $mb.file.import add command \ -label "[msgcat::mc {NRRD}]..." \ -command [list ImportDialog nrrd mask] EditMenu $mb imask # Param set f [ttk::frame $w.param] slider $f.slider 0 100 [msgcat::mc {Transparency}] \ mask(transparency) [list MaskTransparency] grid $f.slider -padx 2 -pady 2 -sticky ew grid columnconfigure $f 0 -weight 1 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] -command MaskApplyDialog ttk::button $f.clear -text [msgcat::mc {Clear}] -command MaskClear ttk::button $f.close -text [msgcat::mc {Close}] -command MaskDestroyDialog pack $f.apply $f.clear $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true } proc MaskApplyDialog {} { global mask MaskTransparency } proc MaskDestroyDialog {} { global imask if {[winfo exists $imask(top)]} { destroy $imask(top) destroy $imask(mb) } } proc UpdateMaskMenu {} { global mask global current global ds9 global debug if {$debug(tcl,update)} { puts stderr "UpdateMaskMenu" } if {$current(frame) == {}} { return } set mask(color) [$current(frame) get mask color] set mask(mark) [$current(frame) get mask mark] set mask(transparency) [$current(frame) get mask transparency] switch -- [$current(frame) get type] { base { $ds9(mb).analysis entryconfig \ "[msgcat::mc {Mask Parameters}]..." -state normal } 3d - rgb { $ds9(mb).analysis entryconfig \ "[msgcat::mc {Mask Parameters}]..." -state disabled } } } proc MaskLoad {} { global current global mask set rr [MaskParamsDialog] if {$current(frame) != {}} { if {$rr} { $current(frame) mask color $mask(color) $current(frame) mask mark $mask(mark) } } return $rr } proc MaskParamsDialog {} { global mask global ed set w {.mskd} set ed(ok) 0 set ed(color) $mask(color) set ed(mark) $mask(mark) DialogCreate $w [msgcat::mc {Mask Parameters}] ed(ok) # Param set f [ttk::frame $w.param] ttk::label $f.colortitle -text [msgcat::mc {Color}] ColorMenuButton $f.colorbutton ed color {} ttk::label $f.marktitle -text [msgcat::mc {Block}] ttk::radiobutton $f.markz -text [msgcat::mc {Zero}] \ -variable ed(mark) -value 0 ttk::radiobutton $f.marknz -text [msgcat::mc {Non-zero}] \ -variable ed(mark) -value 1 ttk::label $f.marktitle2 -text [msgcat::mc {Value}] grid $f.colortitle $f.colorbutton - -padx 2 -pady 2 -sticky w grid $f.marktitle $f.markz $f.marknz $f.marktitle2 -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w if {$ed(ok)} { set mask(color) [string tolower $ed(color)] set mask(mark) $ed(mark) } set rr $ed(ok) unset ed return $rr } proc MaskBackup {ch which} { puts $ch "$which mask color [$which get mask color]" puts $ch "$which mask mark [$which get mask mark]" puts $ch "$which mask transparency [$which get mask transparency]" } proc ProcessMaskCmd {varname iname} { upvar $varname var upvar $iname i global mask global current set rr {} switch -- [string tolower [lindex $var $i]] { open {MaskDialog} close {MaskDestroyDialog} color { incr i set mask(color) [lindex $var $i] if {$current(frame) != {}} { $current(frame) mask color $mask(color) } } mark { incr i set mask(mark) [lindex $var $i] if {$current(frame) != {}} { $current(frame) mask mark $mask(mark) } } transparency { incr i set mask(transparency) [lindex $var $i] if {$current(frame) != {}} { $current(frame) mask transparency $mask(transparency) } MaskTransparency } clear { MaskClear } default { set rr mask incr i -1 } } return $rr } proc ProcessSendMaskCmd {proc id param} { global mask switch -- [string tolower $param] { color {$proc $id "$mask(color)\n"} mark {$proc $id "$mask(mark)\n"} transparency {$proc $id "$mask(transparency)\n"} } } saods9/ds9/library/mbin.tcl000644 000765 000000 00000031313 12705445647 016177 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Menu proc BinMainMenu {} { global ds9 menu $ds9(mb).bin $ds9(mb).bin add radiobutton -label [msgcat::mc {Average}] \ -variable bin(function) -value average -command ChangeBinFunction $ds9(mb).bin add radiobutton -label [msgcat::mc {Sum}] \ -variable bin(function) -value sum -command ChangeBinFunction $ds9(mb).bin add separator $ds9(mb).bin add command -label [msgcat::mc {Bin In}] \ -command {Bin .5 .5} $ds9(mb).bin add command -label [msgcat::mc {Bin Out}] \ -command {Bin 2 2} $ds9(mb).bin add command -label [msgcat::mc {Bin Fit}] \ -command BinToFit $ds9(mb).bin add separator $ds9(mb).bin add radiobutton -label "[msgcat::mc {Bin}] 1" \ -variable bin(factor) -value { 1 1 } -command ChangeBinFactor $ds9(mb).bin add radiobutton -label "[msgcat::mc {Bin}] 2" \ -variable bin(factor) -value { 2 2 } -command ChangeBinFactor $ds9(mb).bin add radiobutton -label "[msgcat::mc {Bin}] 4" \ -variable bin(factor) -value { 4 4 } -command ChangeBinFactor $ds9(mb).bin add radiobutton -label "[msgcat::mc {Bin}] 8" \ -variable bin(factor) -value { 8 8 } -command ChangeBinFactor $ds9(mb).bin add radiobutton -label "[msgcat::mc {Bin}] 16" \ -variable bin(factor) -value { 16 16 } -command ChangeBinFactor $ds9(mb).bin add radiobutton -label "[msgcat::mc {Bin}] 32" \ -variable bin(factor) -value { 32 32 } -command ChangeBinFactor $ds9(mb).bin add radiobutton -label "[msgcat::mc {Bin}] 64" \ -variable bin(factor) -value { 64 64 } -command ChangeBinFactor $ds9(mb).bin add radiobutton -label "[msgcat::mc {Bin}] 128" \ -variable bin(factor) -value { 128 128 } -command ChangeBinFactor $ds9(mb).bin add radiobutton -label "[msgcat::mc {Bin}] 256" \ -variable bin(factor) -value { 256 256 } -command ChangeBinFactor $ds9(mb).bin add separator $ds9(mb).bin add radiobutton -label {128x128} \ -variable bin(buffersize) -value 128 -command ChangeBinBufferSize $ds9(mb).bin add radiobutton -label {256x256} \ -variable bin(buffersize) -value 256 -command ChangeBinBufferSize $ds9(mb).bin add radiobutton -label {512x512} \ -variable bin(buffersize) -value 512 -command ChangeBinBufferSize $ds9(mb).bin add radiobutton -label {1024x1024} \ -variable bin(buffersize) -value 1024 -command ChangeBinBufferSize $ds9(mb).bin add radiobutton -label {2048x2048} \ -variable bin(buffersize) -value 2048 -command ChangeBinBufferSize $ds9(mb).bin add radiobutton -label {4096x4096} \ -variable bin(buffersize) -value 4096 -command ChangeBinBufferSize $ds9(mb).bin add radiobutton -label {8192x8192} \ -variable bin(buffersize) -value 8192 -command ChangeBinBufferSize $ds9(mb).bin add separator $ds9(mb).bin add command -label "[msgcat::mc {Binning Parameters}]..." \ -command BinDialog } proc PrefsDialogBinMenu {w} { set f [ttk::labelframe $w.mbin -text [msgcat::mc {Bin}]] ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu PrefsDialogButtonbarBin $f.buttonbar grid $f.menu $f.buttonbar -padx 2 -pady 2 set m $f.menu.menu menu $m $m add radiobutton -label [msgcat::mc {Average}] \ -variable pbin(function) -value average $m add radiobutton -label [msgcat::mc {Sum}] \ -variable pbin(function) -value sum $m add separator $m add radiobutton -label "[msgcat::mc {Bin}] 1" \ -variable pbin(factor) -value { 1 1 } $m add radiobutton -label "[msgcat::mc {Bin}] 2" \ -variable pbin(factor) -value { 2 2 } $m add radiobutton -label "[msgcat::mc {Bin}] 4" \ -variable pbin(factor) -value { 4 4 } $m add radiobutton -label "[msgcat::mc {Bin}] 8" \ -variable pbin(factor) -value { 8 8 } $m add radiobutton -label "[msgcat::mc {Bin}] 16" \ -variable pbin(factor) -value { 16 16 } $m add radiobutton -label "[msgcat::mc {Bin}] 32" \ -variable pbin(factor) -value { 32 32 } $m add radiobutton -label "[msgcat::mc {Bin}] 64" \ -variable pbin(factor) -value { 64 64 } $m add radiobutton -label "[msgcat::mc {Bin}] 128" \ -variable pbin(factor) -value { 128 128 } $m add radiobutton -label "[msgcat::mc {Bin}] 256" \ -variable pbin(factor) -value { 256 256 } $m add separator $m add radiobutton -label {128x128} -variable pbin(buffersize) -value 128 $m add radiobutton -label {256x256} -variable pbin(buffersize) -value 256 $m add radiobutton -label {512x512} -variable pbin(buffersize) -value 512 $m add radiobutton -label {1024x1204} -variable pbin(buffersize) -value 1024 $m add radiobutton -label {2048x2048} -variable pbin(buffersize) -value 2048 $m add radiobutton -label {4096x4096} -variable pbin(buffersize) -value 4096 $m add radiobutton -label {8192x8192} -variable pbin(buffersize) -value 8192 pack $f -side top -fill both -expand true } proc PrefsDialogBin {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Bin}] lappend dprefs(tabs) [ttk::frame $w.bin] # Mouse set f [ttk::labelframe $w.bin.mouse -text [msgcat::mc {Mouse Wheel Bin}]] ttk::checkbutton $f.click -text [msgcat::mc {Enable}] \ -variable pbin(wheel) ttk::label $f.title2 -text [msgcat::mc {Factor}] ttk::entry $f.factor -textvariable pbin(wheel,factor) -width 10 grid $f.click $f.title2 $f.factor -padx 2 -pady 2 -sticky w pack $w.bin.mouse -side top -fill both -expand true } # Buttons proc ButtonsBinDef {} { global pbuttons array set pbuttons { bin,average 0 bin,sum 0 bin,in 1 bin,out 1 bin,fit 1 bin,1 1 bin,2 1 bin,4 1 bin,8 1 bin,16 1 bin,32 1 bin,64 1 bin,128 0 bin,256 0 bin,128x 0 bin,256x 0 bin,512x 0 bin,1024x 0 bin,2048x 0 bin,4096x 0 bin,8192x 0 bin,params 0 } } proc CreateButtonsBin {} { global buttons global ds9 ttk::frame $ds9(buttons).bin RadioButton $ds9(buttons).bin.average \ [string tolower [msgcat::mc {Average}]] \ bin(function) average ChangeBinFunction RadioButton $ds9(buttons).bin.sum \ [string tolower [msgcat::mc {Sum}]] \ bin(function) sum ChangeBinFunction ButtonButton $ds9(buttons).bin.in \ [string tolower [msgcat::mc {Bin In}]] {Bin .5 .5} ButtonButton $ds9(buttons).bin.out \ [string tolower [msgcat::mc {Bin Out}]] {Bin 2 2} ButtonButton $ds9(buttons).bin.fit \ [string tolower [msgcat::mc {Bin Fit}]] BinToFit RadioButton $ds9(buttons).bin.1 \ "[string tolower [msgcat::mc {Bin}]] 1" \ bin(factor) { 1 1 } ChangeBinFactor RadioButton $ds9(buttons).bin.2 \ "[string tolower [msgcat::mc {Bin}]] 2" \ bin(factor) { 2 2 } ChangeBinFactor RadioButton $ds9(buttons).bin.4 \ "[string tolower [msgcat::mc {Bin}]] 4" \ bin(factor) { 4 4 } ChangeBinFactor RadioButton $ds9(buttons).bin.8 \ "[string tolower [msgcat::mc {Bin}]] 8" \ bin(factor) { 8 8 } ChangeBinFactor RadioButton $ds9(buttons).bin.16 \ "[string tolower [msgcat::mc {Bin}]] 16" \ bin(factor) { 16 16 } ChangeBinFactor RadioButton $ds9(buttons).bin.32 \ "[string tolower [msgcat::mc {Bin}]] 32" \ bin(factor) { 32 32 } ChangeBinFactor RadioButton $ds9(buttons).bin.64 \ "[string tolower [msgcat::mc {Bin}]] 64" \ bin(factor) { 64 64 } ChangeBinFactor RadioButton $ds9(buttons).bin.128 \ "[string tolower [msgcat::mc {Bin}]] 128" \ bin(factor) { 128 128 } ChangeBinFactor RadioButton $ds9(buttons).bin.256 \ "[string tolower [msgcat::mc {Bin}]] 256" \ bin(factor) { 256 256 } ChangeBinFactor RadioButton $ds9(buttons).bin.128x {128x128} \ bin(buffersize) 128 ChangeBinBufferSize RadioButton $ds9(buttons).bin.256x {256x256} \ bin(buffersize) 256 ChangeBinBufferSize RadioButton $ds9(buttons).bin.512x {512x512} \ bin(buffersize) 512 ChangeBinBufferSize RadioButton $ds9(buttons).bin.1024x {1024x1024} \ bin(buffersize) 1024 ChangeBinBufferSize RadioButton $ds9(buttons).bin.2048x {2048x2048} \ bin(buffersize) 2048 ChangeBinBufferSize RadioButton $ds9(buttons).bin.4096x {4096x4096} \ bin(buffersize) 4096 ChangeBinBufferSize RadioButton $ds9(buttons).bin.8192x {8192x8192} \ bin(buffersize) 8192 ChangeBinBufferSize ButtonButton $ds9(buttons).bin.params \ [string tolower [msgcat::mc {Parameters}]] BinDialog set buttons(bin) " $ds9(buttons).bin.average pbuttons(bin,average) $ds9(buttons).bin.sum pbuttons(bin,sum) $ds9(buttons).bin.in pbuttons(bin,in) $ds9(buttons).bin.out pbuttons(bin,out) $ds9(buttons).bin.fit pbuttons(bin,fit) $ds9(buttons).bin.1 pbuttons(bin,1) $ds9(buttons).bin.2 pbuttons(bin,2) $ds9(buttons).bin.4 pbuttons(bin,4) $ds9(buttons).bin.8 pbuttons(bin,8) $ds9(buttons).bin.16 pbuttons(bin,16) $ds9(buttons).bin.32 pbuttons(bin,32) $ds9(buttons).bin.64 pbuttons(bin,64) $ds9(buttons).bin.128 pbuttons(bin,128) $ds9(buttons).bin.256 pbuttons(bin,256) $ds9(buttons).bin.128x pbuttons(bin,128x) $ds9(buttons).bin.256x pbuttons(bin,256x) $ds9(buttons).bin.512x pbuttons(bin,512x) $ds9(buttons).bin.1024x pbuttons(bin,1024x) $ds9(buttons).bin.2048x pbuttons(bin,2048x) $ds9(buttons).bin.4096x pbuttons(bin,4096x) $ds9(buttons).bin.8192x pbuttons(bin,8192x) $ds9(buttons).bin.params pbuttons(bin,params) " } proc PrefsDialogButtonbarBin {f} { global buttons global pbuttons ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu set m $f.menu menu $m $m add checkbutton -label [msgcat::mc {Average}] \ -variable pbuttons(bin,average) -command {UpdateButtons buttons(bin)} $m add checkbutton -label [msgcat::mc {Sum}] \ -variable pbuttons(bin,sum) -command {UpdateButtons buttons(bin)} $m add separator $m add checkbutton -label [msgcat::mc {Bin In}] \ -variable pbuttons(bin,in) -command {UpdateButtons buttons(bin)} $m add checkbutton -label [msgcat::mc {Bin Out}] \ -variable pbuttons(bin,out) -command {UpdateButtons buttons(bin)} $m add checkbutton -label [msgcat::mc {Bin Fit}] \ -variable pbuttons(bin,fit) -command {UpdateButtons buttons(bin)} $m add separator $m add checkbutton -label "[msgcat::mc {Bin}] 1" \ -variable pbuttons(bin,1) -command {UpdateButtons buttons(bin)} $m add checkbutton -label "[msgcat::mc {Bin}] 2" \ -variable pbuttons(bin,2) -command {UpdateButtons buttons(bin)} $m add checkbutton -label "[msgcat::mc {Bin}] 4" \ -variable pbuttons(bin,4) -command {UpdateButtons buttons(bin)} $m add checkbutton -label "[msgcat::mc {Bin}] 8" \ -variable pbuttons(bin,8) -command {UpdateButtons buttons(bin)} $m add checkbutton -label "[msgcat::mc {Bin}] 16" \ -variable pbuttons(bin,16) -command {UpdateButtons buttons(bin)} $m add checkbutton -label "[msgcat::mc {Bin}] 32" \ -variable pbuttons(bin,32) -command {UpdateButtons buttons(bin)} $m add checkbutton -label "[msgcat::mc {Bin}] 64" \ -variable pbuttons(bin,64) -command {UpdateButtons buttons(bin)} $m add checkbutton -label "[msgcat::mc {Bin}] 128" \ -variable pbuttons(bin,128) -command {UpdateButtons buttons(bin)} $m add checkbutton -label "[msgcat::mc {Bin}] 256" \ -variable pbuttons(bin,256) -command {UpdateButtons buttons(bin)} $m add separator $m add checkbutton -label {128x128} \ -variable pbuttons(bin,128x) -command {UpdateButtons buttons(bin)} $m add checkbutton -label {256x256} \ -variable pbuttons(bin,256x) -command {UpdateButtons buttons(bin)} $m add checkbutton -label {512x512} \ -variable pbuttons(bin,512x) -command {UpdateButtons buttons(bin)} $m add checkbutton -label {1024x1204} \ -variable pbuttons(bin,1024x) -command {UpdateButtons buttons(bin)} $m add checkbutton -label {2048x2048} \ -variable pbuttons(bin,2048x) -command {UpdateButtons buttons(bin)} $m add checkbutton -label {4096x4096} \ -variable pbuttons(bin,4096x) -command {UpdateButtons buttons(bin)} $m add checkbutton -label {8192x8192} \ -variable pbuttons(bin,8192x) -command {UpdateButtons buttons(bin)} $m add separator $m add checkbutton -label "[msgcat::mc {Binning Parameters}]..." \ -variable pbuttons(bin,params) -command {UpdateButtons buttons(bin)} } # Support proc UpdateBinMenu {} { global ds9 global current global bin global debug if {$debug(tcl,update)} { puts stderr "UpdateBinMenu" } if {$current(frame) != {}} { if {[$current(frame) has fits]} { if {[$current(frame) has fits bin]} { $ds9(mb) entryconfig [msgcat::mc {Bin}] -state normal } else { $ds9(mb) entryconfig [msgcat::mc {Bin}] -state disabled } } else { $ds9(mb) entryconfig [msgcat::mc {Bin}] -state normal } set bin(function) [$current(frame) get bin function] set bin(factor) "[$current(frame) get bin factor]" set bin(depth) [$current(frame) get bin depth] set bin(buffersize) [$current(frame) get bin buffer size] } else { $ds9(mb) entryconfig [msgcat::mc {Bin}] -state disabled } } saods9/ds9/library/mcolor.tcl000644 000765 000000 00000036154 12705445647 016555 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Menus # Default colormap names # [msgcat::mc {grey}] # [msgcat::mc {red}] # [msgcat::mc {green}] # [msgcat::mc {blue}] # [msgcat::mc {heat}] # [msgcat::mc {cool}] # [msgcat::mc {rainbow}] # [msgcat::mc {standard}] # [msgcat::mc {staircase}] # [msgcat::mc {color}] proc ColorMainMenu {} { global colorbar global icolorbar global ds9 menu $ds9(mb).color set id [colorbar list id] # base foreach jj $id { set name [colorbar get name $jj] $ds9(mb).color add radiobutton \ -label [msgcat::mc $name] \ -variable colorbar(map) -value $name \ -command "ChangeColormapID $jj" incr icolorbar(count) } set icolorbar(end) $icolorbar(count) set icolorbar(h5) $icolorbar(count) set icolorbar(matplotlib) $icolorbar(count) set icolorbar(cubehelix) $icolorbar(count) set icolorbar(gist) $icolorbar(count) set icolorbar(topo) $icolorbar(count) set icolorbar(user) $icolorbar(count) $ds9(mb).color add separator $ds9(mb).color add cascade -label [msgcat::mc {h5utils}] \ -menu $ds9(mb).color.h5 $ds9(mb).color add cascade -label [msgcat::mc {Matplotlib}] \ -menu $ds9(mb).color.matplotlib $ds9(mb).color add cascade -label [msgcat::mc {Cubehelix}] \ -menu $ds9(mb).color.cubehelix $ds9(mb).color add cascade -label [msgcat::mc {Gist}] \ -menu $ds9(mb).color.gist $ds9(mb).color add cascade -label [msgcat::mc {Topographic}] \ -menu $ds9(mb).color.topo $ds9(mb).color add cascade -label [msgcat::mc {User}] \ -menu $ds9(mb).color.user $ds9(mb).color add separator $ds9(mb).color add checkbutton -label [msgcat::mc {Invert Colormap}] \ -variable colorbar(invert) -command InvertColorbar $ds9(mb).color add command -label [msgcat::mc {Reset Colormap}] \ -command ResetColormap $ds9(mb).color add separator $ds9(mb).color add cascade -label [msgcat::mc {Colorbar}] \ -menu $ds9(mb).color.colorbar $ds9(mb).color add separator $ds9(mb).color add command -label "[msgcat::mc {Colormap Parameters}]..." \ -command ColormapDialog menu $ds9(mb).color.h5 menu $ds9(mb).color.matplotlib menu $ds9(mb).color.cubehelix menu $ds9(mb).color.gist menu $ds9(mb).color.topo menu $ds9(mb).color.user menu $ds9(mb).color.colorbar $ds9(mb).color.colorbar add cascade -label [msgcat::mc {Orientation}] \ -menu $ds9(mb).color.colorbar.orient $ds9(mb).color.colorbar add cascade -label [msgcat::mc {Numerics}] \ -menu $ds9(mb).color.colorbar.numerics $ds9(mb).color.colorbar add cascade -label [msgcat::mc {Font}] \ -menu $ds9(mb).color.colorbar.cb $ds9(mb).color.colorbar add separator $ds9(mb).color.colorbar add command \ -label "[msgcat::mc {Size}]..." \ -command ColorbarSizeDialog $ds9(mb).color.colorbar add command \ -label "[msgcat::mc {Number of Ticks}]..." \ -command TicksDialog menu $ds9(mb).color.colorbar.orient $ds9(mb).color.colorbar.orient add radiobutton \ -label [msgcat::mc {Horizontal}] -variable colorbar(orientation) \ -value horizontal -command UpdateView $ds9(mb).color.colorbar.orient add radiobutton \ -label [msgcat::mc {Vertical}] -variable colorbar(orientation) \ -value vertical -command UpdateView menu $ds9(mb).color.colorbar.numerics $ds9(mb).color.colorbar.numerics add checkbutton \ -label [msgcat::mc {Show}] -variable colorbar(numerics) \ -command UpdateView $ds9(mb).color.colorbar.numerics add separator $ds9(mb).color.colorbar.numerics add radiobutton \ -label [msgcat::mc {Space Equal Value}] -variable colorbar(space) \ -value 1 -command UpdateView $ds9(mb).color.colorbar.numerics add radiobutton \ -label [msgcat::mc {Space Equal Distance}] -variable colorbar(space) \ -value 0 -command UpdateView FontMenu $ds9(mb).color.colorbar.cb colorbar font font,size font,weight \ font,slant UpdateView CreateExColorMenu h5 CreateExColorMenu matplotlib CreateExColorMenu cubehelix CreateExColorMenu gist CreateExColorMenu topo CreateExColorMenu user } proc CreateExColorMenu {which} { global ds9 global icolorbar # save start location set icolorbar($which) $icolorbar(count) foreach fn $icolorbar($which,fn) { if {[lindex $fn 0] == {-}} { $ds9(mb).color.$which add separator } else { set ch [open "$ds9(root)/cmaps/$fn" r] global vardata set vardata [read $ch] close $ch colorbar load var "\{$fn\}" vardata set id [colorbar get id] set map [colorbar get name] incr icolorbar(count) $ds9(mb).color.$which add radiobutton \ -label "$map" \ -variable colorbar(map) \ -command [list ChangeColormapID $id] } } } proc PrefsDialogColorMenu {w} { global colorbar global icolorbar global pcolorbar set f [ttk::labelframe $w.mcolor -text [msgcat::mc {Color}]] ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu PrefsDialogButtonbarColor $f.buttonbar grid $f.menu $f.buttonbar -padx 2 -pady 2 -sticky w set m $f.menu.menu menu $m set id [colorbar list id] # base for {set ii 0} {$ii<$icolorbar(end)} {incr ii} { set jj [lindex $id $ii] set name [colorbar get name $jj] $m add radiobutton -label [msgcat::mc $name] \ -variable pcolorbar(map) -value $name } $m add separator $m add checkbutton -label [msgcat::mc {Invert Colormap}] \ -variable pcolorbar(invert) $m add separator $m add cascade -label [msgcat::mc {Colorbar}] -menu $m.colorbar menu $m.colorbar $m.colorbar add cascade -label [msgcat::mc {Orientation}] \ -menu $m.colorbar.orient $m.colorbar add cascade -label [msgcat::mc {Numerics}] \ -menu $m.colorbar.numerics $m.colorbar add cascade -label [msgcat::mc {Font}] \ -menu $m.colorbar.cb menu $m.colorbar.orient $m.colorbar.orient add radiobutton -label [msgcat::mc {Horizontal}] \ -variable pcolorbar(orientation) -value horizontal $m.colorbar.orient add radiobutton -label [msgcat::mc {Vertical}] \ -variable pcolorbar(orientation) -value vertical menu $m.colorbar.numerics $m.colorbar.numerics add checkbutton -label [msgcat::mc {Show}] \ -variable pcolorbar(numerics) $m.colorbar.numerics add separator $m.colorbar.numerics add radiobutton \ -label [msgcat::mc {Space Equal Value}] \ -variable pcolorbar(space) -value 1 $m.colorbar.numerics add radiobutton \ -label [msgcat::mc {Space Equal Distance}] \ -variable pcolorbar(space) -value 0 FontMenu $m.colorbar.cb pcolorbar font font,size font,weight \ font,slant {} pack $f -side top -fill both -expand true } proc PrefsDialogColor {} { global dprefs global colorbar global icolorbar global pcolorbar set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Color}] lappend dprefs(tabs) [ttk::frame $w.color] set f [ttk::labelframe $w.color.colorbar -text [msgcat::mc {Colorbar}]] ttk::label $f.tsize -text [msgcat::mc {Colorbar Size}] ttk::entry $f.size -textvariable pcolorbar(size) -width 10 ttk::label $f.tticks -text [msgcat::mc {Number of Ticks}] ttk::entry $f.ticks -textvariable pcolorbar(ticks) -width 10 ttk::label $f.tcolor -text [msgcat::mc {Tag Color}] ColorMenuButton $f.color pcolorbar tag {} grid $f.tsize $f.size -padx 2 -pady 2 -sticky w grid $f.tticks $f.ticks -padx 2 -pady 2 -sticky w grid $f.tcolor $f.color -padx 2 -pady 2 -sticky w pack $f -side top -fill both -expand true } # Buttons proc ButtonsColorDef {} { global pbuttons # we have a chicken or the egg problem # the colorbar has not been defined yet, but we must define vars # before prefs are processed, so hard code all default cmaps array set pbuttons { color,grey 1 color,red 0 color,green 0 color,blue 0 color,a 1 color,b 1 color,bb 1 color,he 1 color,i8 1 color,aips0 1 color,sls 0 color,hsv 0 color,heat 1 color,cool 1 color,rainbow 1 color,standard 0 color,staircase 0 color,color 0 color,invert 0 color,reset 0 color,horz 0 color,vert 0 color,numerics 0 color,numvalue 0 color,numspace 0 color,params 0 } } proc CreateButtonsColor {} { global buttons global ds9 global colorbar global icolorbar ttk::frame $ds9(buttons).color set id [colorbar list id] # base for {set ii 0} {$ii<$icolorbar(end)} {incr ii} { set jj [lindex $id $ii] set name [colorbar get name $jj] RadioButton $ds9(buttons).color.$name [msgcat::mc $name] \ colorbar(map) $name "ChangeColormapID $jj" } CheckButton $ds9(buttons).color.invert \ [string tolower [msgcat::mc {Invert}]] colorbar(invert) InvertColorbar ButtonButton $ds9(buttons).color.reset \ [string tolower [msgcat::mc {Reset}]] ResetColormap RadioButton $ds9(buttons).color.horz \ [string tolower [msgcat::mc {Horizontal}]] \ colorbar(orientation) horizontal UpdateView RadioButton $ds9(buttons).color.vert \ [string tolower [msgcat::mc {Vertical}]] \ colorbar(orientation) vertical UpdateView CheckButton $ds9(buttons).color.numerics \ [string tolower [msgcat::mc {Numerics}]] \ colorbar(numerics) UpdateView RadioButton $ds9(buttons).color.numvalue \ [string tolower [msgcat::mc {Value}]] \ colorbar(space) 1 UpdateView RadioButton $ds9(buttons).color.numspace \ [string tolower [msgcat::mc {Distance}]] \ colorbar(space) 0 UpdateView ButtonButton $ds9(buttons).color.params \ [string tolower [msgcat::mc {Parameters}]] ColormapDialog set buttons(color) {} set id [colorbar list id] # base for {set ii 0} {$ii<$icolorbar(end)} {incr ii} { set jj [lindex $id $ii] set name [colorbar get name $jj] append buttons(color) "$ds9(buttons).color.$name pbuttons(color,$name) " } append buttons(color) "$ds9(buttons).color.invert pbuttons(color,invert) " append buttons(color) "$ds9(buttons).color.reset pbuttons(color,reset) " append buttons(color) "$ds9(buttons).color.horz pbuttons(color,horz) " append buttons(color) "$ds9(buttons).color.vert pbuttons(color,vert) " append buttons(color) "$ds9(buttons).color.numerics pbuttons(color,numerics) " append buttons(color) "$ds9(buttons).color.numvalue pbuttons(color,numvalue) " append buttons(color) "$ds9(buttons).color.numspace pbuttons(color,numspace) " append buttons(color) "$ds9(buttons).color.params pbuttons(color,params) " } proc PrefsDialogButtonbarColor {f} { global icolorbar global buttons global pbuttons ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu set m $f.menu menu $m set id [colorbar list id] # base for {set ii 0} {$ii<$icolorbar(end)} {incr ii} { set jj [lindex $id $ii] set name [colorbar get name $jj] $m add checkbutton -label [msgcat::mc $name] \ -variable pbuttons(color,$name) \ -command {UpdateButtons buttons(color)} } $m add separator $m add checkbutton -label [msgcat::mc {Invert Colormap}] \ -variable pbuttons(color,invert) \ -command {UpdateButtons buttons(color)} $m add checkbutton -label [msgcat::mc {Reset Colormap}] \ -variable pbuttons(color,reset) \ -command {UpdateButtons buttons(color)} $m add separator $m add cascade -label [msgcat::mc {Colorbar}] -menu $m.colorbar $m add separator $m add checkbutton -label "[msgcat::mc {Colormap Parameters}]..." \ -variable pbuttons(color,params) \ -command {UpdateButtons buttons(color)} menu $m.colorbar $m.colorbar add cascade -label [msgcat::mc {Orientation}] \ -menu $m.colorbar.orient $m.colorbar add cascade -label [msgcat::mc {Numerics}] \ -menu $m.colorbar.numerics menu $m.colorbar.orient $m.colorbar.orient add checkbutton -label [msgcat::mc {Horizontal}] \ -variable pbuttons(color,horz) \ -command {UpdateButtons buttons(color)} $m.colorbar.orient add checkbutton -label [msgcat::mc {Vertical}] \ -variable pbuttons(color,vert) \ -command {UpdateButtons buttons(color)} menu $m.colorbar.numerics $m.colorbar.numerics add checkbutton -label [msgcat::mc {Show}] \ -variable pbuttons(color,numerics) \ -command {UpdateButtons buttons(color)} $m.colorbar.numerics add separator $m.colorbar.numerics add checkbutton -label [msgcat::mc {Equal Value}] \ -variable pbuttons(color,numvalue) \ -command {UpdateButtons buttons(color)} $m.colorbar.numerics add checkbutton -label [msgcat::mc {Equal Spacing}] \ -variable pbuttons(color,numspace) \ -command {UpdateButtons buttons(color)} } # Support proc UpdateColorMenu {} { global icolorbar global ds9 global current global buttons global debug if {$debug(tcl,update)} { puts stderr "UpdateColorMenu" } set end [expr $icolorbar(end)+$icolorbar(start)] if {$current(frame) != {}} { switch [$current(frame) get type] { base - 3d { # menus # base for {set ii $icolorbar(start)} {$ii<$end} {incr ii} { $ds9(mb).color entryconfig $ii -state normal } $ds9(mb).color entryconfig [msgcat::mc {h5utils}] \ -state normal $ds9(mb).color entryconfig [msgcat::mc {Matplotlib}] \ -state normal $ds9(mb).color entryconfig [msgcat::mc {Cubehelix}] \ -state normal $ds9(mb).color entryconfig [msgcat::mc {Gist}] \ -state normal $ds9(mb).color entryconfig [msgcat::mc {Topographic}] \ -state normal $ds9(mb).color entryconfig [msgcat::mc {User}] \ -state normal # buttons set id [colorbar list id] # base for {set ii 0} {$ii<$icolorbar(end)} {incr ii} { set jj [lindex $id $ii] set name [colorbar get name $jj] $ds9(buttons).color.$name configure -state normal } } rgb { # menus # base for {set ii $icolorbar(start)} {$ii<$end} {incr ii} { $ds9(mb).color entryconfig $ii -state disabled } $ds9(mb).color entryconfig [msgcat::mc {h5utils}] \ -state disabled $ds9(mb).color entryconfig [msgcat::mc {Matplotlib}] \ -state disabled $ds9(mb).color entryconfig [msgcat::mc {Cubehelix}] \ -state disabled $ds9(mb).color entryconfig [msgcat::mc {Gist}] \ -state disabled $ds9(mb).color entryconfig [msgcat::mc {Topographic}] \ -state disabled $ds9(mb).color entryconfig [msgcat::mc {User}] \ -state disable # buttons set id [colorbar list id] # base for {set ii 0} {$ii<$icolorbar(end)} {incr ii} { set jj [lindex $id $ii] set name [colorbar get name $jj] $ds9(buttons).color.$name configure -state disabled } } } } else { # menus # base for {set ii $icolorbar(start)} {$ii<$end} {incr ii} { $ds9(mb).color entryconfig $ii -state normal } $ds9(mb).color entryconfig [msgcat::mc {h5utils}] -state normal $ds9(mb).color entryconfig [msgcat::mc {Matplotlib}] -state normal $ds9(mb).color entryconfig [msgcat::mc {Cubehelix}] -state normal $ds9(mb).color entryconfig [msgcat::mc {Gist}] -state normal $ds9(mb).color entryconfig [msgcat::mc {Topographic}] -state normal $ds9(mb).color entryconfig [msgcat::mc {User}] -state normal # buttons set id [colorbar list id] # base for {set ii 0} {$ii<$icolorbar(end)} {incr ii} { set jj [lindex $id $ii] set name [colorbar get name $jj] $ds9(buttons).color.$name configure -state normal } } } saods9/ds9/library/mecube.tcl000644 000765 000000 00000004515 12705445647 016516 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadMECubeFile {fn} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {ext cube} set loadParam(load,type) mmapincr set loadParam(file,name) $fn # mask not supported set loadParam(load,layer) {} ConvertFitsFile ProcessLoad } proc LoadMECubeAlloc {path fn} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {ext cube} set loadParam(load,type) allocgz set loadParam(file,name) $fn set loadParam(file,fn) $path # mask not supported set loadParam(load,layer) {} ProcessLoad } proc LoadMECubeSocket {sock fn} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {ext cube} set loadParam(load,type) socketgz set loadParam(file,name) $fn set loadParam(socket,id) $sock # mask not supported set loadParam(load,layer) {} return [ProcessLoad 0] } proc SaveMECubeFile {fn} { global current if {$fn == {} || $current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save fits ext cube file "\{$fn\}" } proc SaveMECubeSocket {sock} { global current if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save fits ext cube socket $sock } proc ProcessMECubeCmd {varname iname sock fn} { upvar $varname var upvar $iname i switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i # not supported } slice { incr i # not supported } } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa if {![LoadMECubeSocket $sock $param]} { InitError xpa LoadMECubeFile $param } } else { # comm if {$fn != {}} { LoadMECubeAlloc $fn $param } else { LoadMECubeFile $param } } FinishLoad } proc ProcessSendMECubeCmd {proc id param sock fn} { global current if {$current(frame) == {}} { return } if {$sock != {}} { # xpa SaveMECubeSocket $sock } elseif {$fn != {}} { # comm SaveMECubeFile $fn $proc $id {} $fn } } saods9/ds9/library/medit.tcl000644 000765 000000 00000025271 12705445647 016362 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Menus proc EditMainMenu {} { global ds9 global current menu $ds9(mb).edit $ds9(mb).edit add command -label [msgcat::mc {Undo}] -command UndoFrame \ -accelerator "${ds9(ctrl)}Z" $ds9(mb).edit add separator $ds9(mb).edit add command -label [msgcat::mc {Cut}] -command CutFrame \ -accelerator "${ds9(ctrl)}X" $ds9(mb).edit add command -label [msgcat::mc {Copy}] -command CopyFrame \ -accelerator "${ds9(ctrl)}C" $ds9(mb).edit add command -label [msgcat::mc {Paste}] -command PasteFrame \ -accelerator "${ds9(ctrl)}V" $ds9(mb).edit add separator $ds9(mb).edit add radiobutton -label [msgcat::mc {None}] \ -variable current(mode) -value none -command ChangeMode $ds9(mb).edit add radiobutton -label [msgcat::mc {Region}] \ -variable current(mode) -value region -command ChangeMode $ds9(mb).edit add radiobutton -label [msgcat::mc {Crosshair}] \ -variable current(mode) -value crosshair -command ChangeMode $ds9(mb).edit add radiobutton -label [msgcat::mc {Colorbar}] \ -variable current(mode) -value colorbar -command ChangeMode $ds9(mb).edit add radiobutton -label [msgcat::mc {Pan}] \ -variable current(mode) -value pan -command ChangeMode $ds9(mb).edit add radiobutton -label [msgcat::mc {Zoom}] \ -variable current(mode) -value zoom -command ChangeMode $ds9(mb).edit add radiobutton -label [msgcat::mc {Rotate}] \ -variable current(mode) -value rotate -command ChangeMode $ds9(mb).edit add radiobutton -label [msgcat::mc {Crop}] \ -variable current(mode) -value crop -command ChangeMode $ds9(mb).edit add radiobutton -label [msgcat::mc {Catalog}] \ -variable current(mode) -value catalog -command ChangeMode # IME # $ds9(mb).edit add radiobutton -label [msgcat::mc {Analysis}] # -variable current(mode) -value analysis -command ChangeMode $ds9(mb).edit add radiobutton -label [msgcat::mc {Examine}] \ -variable current(mode) -value examine -command ChangeMode switch $ds9(wm) { x11 - win32 { $ds9(mb).edit add separator $ds9(mb).edit add command -label "[msgcat::mc {Preferences}]..." \ -command PrefsDialog } aqua {} } # Bindings bind $ds9(top) <> UndoFrame bind $ds9(top) <> CutFrame bind $ds9(top) <> CopyFrame bind $ds9(top) <> PasteFrame } proc PrefsDialogEditMenu {w} { global ds9 set f [ttk::labelframe $w.medit -text [msgcat::mc {Edit}]] ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu PrefsDialogButtonbarEdit $f.buttonbar grid $f.menu $f.buttonbar -padx 2 -pady 2 set m $f.menu.menu menu $m $m add radiobutton -label [msgcat::mc {None}] \ -variable pcurrent(mode) -value none $m add radiobutton -label [msgcat::mc {Region}] \ -variable pcurrent(mode) -value region $m add radiobutton -label [msgcat::mc {Crosshair}] \ -variable pcurrent(mode) -value crosshair $m add radiobutton -label [msgcat::mc {Colorbar}] \ -variable pcurrent(mode) -value colorbar $m add radiobutton -label [msgcat::mc {Pan}] \ -variable pcurrent(mode) -value pan $m add radiobutton -label [msgcat::mc {Zoom}] \ -variable pcurrent(mode) -value zoom $m add radiobutton -label [msgcat::mc {Rotate}] \ -variable pcurrent(mode) -value rotate $m add radiobutton -label [msgcat::mc {Crop}] \ -variable pcurrent(mode) -value crop $m add radiobutton -label [msgcat::mc {Catalog}] \ -variable pcurrent(mode) -value catalog # IME # $m add radiobutton -label [msgcat::mc {Analysis}] # -variable pcurrent(mode) -value analysis $m add radiobutton -label [msgcat::mc {Examine}] \ -variable pcurrent(mode) -value examine pack $f -side top -fill both -expand true } # Buttons proc ButtonsEditDef {} { global pbuttons array set pbuttons { edit,undo 0 edit,cut 0 edit,copy 0 edit,paste 0 edit,none 1 edit,region 1 edit,crosshair 1 edit,colorbar 1 edit,pan 1 edit,zoom 1 edit,rotate 1 edit,crop 1 edit,catalog 1 edit,examine 1 edit,prefs 0 } # IME # edit,analysis 1 } proc CreateButtonsEdit {} { global buttons global ds9 global current ttk::frame $ds9(buttons).edit ButtonButton $ds9(buttons).edit.undo \ [string tolower [msgcat::mc {Undo}]] UndoFrame ButtonButton $ds9(buttons).edit.cut \ [string tolower [msgcat::mc {Cut}]] CutFrame ButtonButton $ds9(buttons).edit.copy \ [string tolower [msgcat::mc {Copy}]] CopyFrame ButtonButton $ds9(buttons).edit.paste \ [string tolower [msgcat::mc {Paste}]] PasteFrame RadioButton $ds9(buttons).edit.none \ [string tolower [msgcat::mc {None}]] \ current(mode) none ChangeMode RadioButton $ds9(buttons).edit.region \ [string tolower [msgcat::mc {Region}]] \ current(mode) region ChangeMode RadioButton $ds9(buttons).edit.crosshair \ [string tolower [msgcat::mc {Cross}]] \ current(mode) crosshair ChangeMode RadioButton $ds9(buttons).edit.colorbar \ [string tolower [msgcat::mc {Colorbar}]] \ current(mode) colorbar ChangeMode RadioButton $ds9(buttons).edit.pan \ [string tolower [msgcat::mc {Pan}]] \ current(mode) pan ChangeMode RadioButton $ds9(buttons).edit.zoom \ [string tolower [msgcat::mc {Zoom}]] \ current(mode) zoom ChangeMode RadioButton $ds9(buttons).edit.rotate \ [string tolower [msgcat::mc {Rotate}]] \ current(mode) rotate ChangeMode RadioButton $ds9(buttons).edit.crop \ [string tolower [msgcat::mc {Crop}]] \ current(mode) crop ChangeMode RadioButton $ds9(buttons).edit.catalog \ [string tolower [msgcat::mc {Cat}]] \ current(mode) catalog ChangeMode # IME # RadioButton $ds9(buttons).edit.analysis # [string tolower [msgcat::mc {Analysis}]] # current(mode) analysis ChangeMode RadioButton $ds9(buttons).edit.examine \ [string tolower [msgcat::mc {Exam}]] \ current(mode) examine ChangeMode ButtonButton $ds9(buttons).edit.prefs \ [string tolower [msgcat::mc {Preferences}]] PrefsDialog set buttons(edit) " $ds9(buttons).edit.undo pbuttons(edit,undo) $ds9(buttons).edit.cut pbuttons(edit,cut) $ds9(buttons).edit.copy pbuttons(edit,copy) $ds9(buttons).edit.paste pbuttons(edit,paste) $ds9(buttons).edit.none pbuttons(edit,none) $ds9(buttons).edit.region pbuttons(edit,region) $ds9(buttons).edit.crosshair pbuttons(edit,crosshair) $ds9(buttons).edit.colorbar pbuttons(edit,colorbar) $ds9(buttons).edit.pan pbuttons(edit,pan) $ds9(buttons).edit.zoom pbuttons(edit,zoom) $ds9(buttons).edit.rotate pbuttons(edit,rotate) $ds9(buttons).edit.crop pbuttons(edit,crop) $ds9(buttons).edit.catalog pbuttons(edit,catalog) $ds9(buttons).edit.examine pbuttons(edit,examine) $ds9(buttons).edit.prefs pbuttons(edit,prefs) " # IME # $ds9(buttons).edit.analysis pbuttons(edit,analysis) } proc PrefsDialogButtonbarEdit {f} { global ds9 global buttons global pbuttons ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu set m $f.menu menu $m $m add checkbutton -label [msgcat::mc {Undo}] \ -variable pbuttons(edit,undo) -command {UpdateButtons buttons(edit)} $m add separator $m add checkbutton -label [msgcat::mc {Cut}] \ -variable pbuttons(edit,cut) -command {UpdateButtons buttons(edit)} $m add checkbutton -label [msgcat::mc {Copy}] \ -variable pbuttons(edit,copy) -command {UpdateButtons buttons(edit)} $m add checkbutton -label [msgcat::mc {Paste}] \ -variable pbuttons(edit,paste) -command {UpdateButtons buttons(edit)} $m add separator $m add checkbutton -label [msgcat::mc {None}] \ -variable pbuttons(edit,none) -command {UpdateButtons buttons(edit)} $m add checkbutton -label [msgcat::mc {Region}] \ -variable pbuttons(edit,region) -command {UpdateButtons buttons(edit)} $m add checkbutton -label [msgcat::mc {Crosshair}] \ -variable pbuttons(edit,crosshair) -command {UpdateButtons buttons(edit)} $m add checkbutton -label [msgcat::mc {Colorbar}] \ -variable pbuttons(edit,colorbar) -command {UpdateButtons buttons(edit)} $m add checkbutton -label [msgcat::mc {Pan}] \ -variable pbuttons(edit,pan) -command {UpdateButtons buttons(edit)} $m add checkbutton -label [msgcat::mc {Zoom}] \ -variable pbuttons(edit,zoom) -command {UpdateButtons buttons(edit)} $m add checkbutton -label [msgcat::mc {Rotate}] \ -variable pbuttons(edit,rotate) -command {UpdateButtons buttons(edit)} $m add checkbutton -label [msgcat::mc {Crop}] \ -variable pbuttons(edit,crop) -command {UpdateButtons buttons(edit)} $m add checkbutton -label [msgcat::mc {Catalog}] \ -variable pbuttons(edit,catalog) -command {UpdateButtons buttons(edit)} # IME # $m add checkbutton -label [msgcat::mc {Analysis}] # -variable pbuttons(edit,analysis) -command {UpdateButtons buttons(edit)} $m add checkbutton -label [msgcat::mc {Examine}] \ -variable pbuttons(edit,examine) -command {UpdateButtons buttons(edit)} $m add separator $m add checkbutton -label [msgcat::mc {Preferences}] \ -variable pbuttons(edit,prefs) -command {UpdateButtons buttons(edit)} } # Support proc UpdateEditMenu {} { global ds9 global current global marker global debug if {$debug(tcl,update)} { puts stderr "UpdateEditMenu" } switch -- $current(mode) { pointer - region { if {$current(frame) != {}} { set l [$current(frame) has marker undo] if {$l != {}} { $ds9(mb).edit entryconfig [msgcat::mc {Undo}] \ -state normal } else { $ds9(mb).edit entryconfig [msgcat::mc {Undo}] \ -state disabled } if {[$current(frame) has marker select]} { $ds9(mb).edit entryconfig [msgcat::mc {Cut}] \ -state normal $ds9(mb).edit entryconfig [msgcat::mc {Copy}] \ -state normal } else { $ds9(mb).edit entryconfig [msgcat::mc {Cut}] \ -state disabled $ds9(mb).edit entryconfig [msgcat::mc {Copy}] \ -state disabled } if {$marker(copy) != {} } { if {[$marker(copy) has marker paste]} { $ds9(mb).edit entryconfig [msgcat::mc {Paste}] \ -state normal } else { $ds9(mb).edit entryconfig [msgcat::mc {Paste}] \ -state disabled } } else { $ds9(mb).edit entryconfig [msgcat::mc {Paste}] \ -state disabled } } else { $ds9(mb).edit entryconfig [msgcat::mc {Undo}] -state disabled $ds9(mb).edit entryconfig [msgcat::mc {Cut}] -state disabled $ds9(mb).edit entryconfig [msgcat::mc {Copy}] -state disabled $ds9(mb).edit entryconfig [msgcat::mc {Paste}] -state disabled } } none - crosshair - colorbar - pan - zoom - rotate - crop - catalog - analysis - examine - iexam {$ds9(mb).edit entryconfig [msgcat::mc {Undo}] -state disabled} } } saods9/ds9/library/menu.tcl000644 000765 000000 00000043345 12705445647 016226 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CreateMenuBar {} { global ds9 # we need this first, before the configure command menu $ds9(mb) AppleMenu $ds9(mb) $ds9(top) configure -menu $ds9(mb) $ds9(mb) add cascade -label [msgcat::mc {File}] -menu $ds9(mb).file $ds9(mb) add cascade -label [msgcat::mc {Edit}] -menu $ds9(mb).edit $ds9(mb) add cascade -label [msgcat::mc {View}] -menu $ds9(mb).view $ds9(mb) add cascade -label [msgcat::mc {Frame}] -menu $ds9(mb).frame $ds9(mb) add cascade -label [msgcat::mc {Bin}] -menu $ds9(mb).bin $ds9(mb) add cascade -label [msgcat::mc {Zoom}] -menu $ds9(mb).zoom $ds9(mb) add cascade -label [msgcat::mc {Scale}] -menu $ds9(mb).scale $ds9(mb) add cascade -label [msgcat::mc {Color}] -menu $ds9(mb).color $ds9(mb) add cascade -label [msgcat::mc {Region}] -menu $ds9(mb).region $ds9(mb) add cascade -label [msgcat::mc {WCS}] -menu $ds9(mb).wcs $ds9(mb) add cascade -label [msgcat::mc {Analysis}] -menu $ds9(mb).analysis FileMainMenu EditMainMenu ViewMainMenu FrameMainMenu BinMainMenu ZoomMainMenu ScaleMainMenu ColorMainMenu RegionMainMenu WCSMainMenu AnalysisMainMenu HelpMainMenu } proc AppleMenu {mb} { global ds9 switch $ds9(wm) { x11 - win32 {} aqua { # apple menu menu $mb.apple $mb add cascade -menu $mb.apple $mb.apple add command \ -label [msgcat::mc {About SAOImage DS9}] \ -command AboutBox # -command ::tk::mac::standardAboutPanel } } } # CoordMenu proc CoordMenu {w varname system other sky skyformat cmd} { upvar #0 $varname var global $varname menu $w $w add radiobutton -label [msgcat::mc {WCS}] \ -variable ${varname}($system) -value wcs -command $cmd $w add cascade -label [msgcat::mc {Multiple WCS}] -menu $w.wcs menu $w.wcs foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} { $w.wcs add radiobutton -label "[msgcat::mc {WCS}] $l" \ -variable ${varname}($system) -value "wcs$l" -command $cmd } switch -- $other { 1 { $w add separator $w add radiobutton -label [msgcat::mc {Image}] \ -variable ${varname}($system) -value image -command $cmd $w add radiobutton -label [msgcat::mc {Physical}] \ -variable ${varname}($system) -value physical -command $cmd $w add radiobutton -label [msgcat::mc {Amplifier}] \ -variable ${varname}($system) -value amplifier -command $cmd $w add radiobutton -label [msgcat::mc {Detector}] \ -variable ${varname}($system) -value detector -command $cmd } 2 { $w add separator $w add radiobutton -label [msgcat::mc {Image}] \ -variable ${varname}($system) -value image -command $cmd } } if {$sky != {}} { $w add separator $w add radiobutton -label [msgcat::mc {FK4}] \ -variable ${varname}($sky) -value fk4 -command $cmd $w add radiobutton -label [msgcat::mc {FK5}] \ -variable ${varname}($sky) -value fk5 -command $cmd $w add radiobutton -label [msgcat::mc {ICRS}] \ -variable ${varname}($sky) -value icrs -command $cmd $w add radiobutton -label [msgcat::mc {Galactic}] \ -variable ${varname}($sky) -value galactic -command $cmd $w add radiobutton -label [msgcat::mc {Ecliptic}] \ -variable ${varname}($sky) -value ecliptic -command $cmd } if {$skyformat != {}} { $w add separator $w add radiobutton -label [msgcat::mc {Degrees}] \ -variable ${varname}($skyformat) -value degrees -command $cmd $w add radiobutton -label {Sexagesimal} \ -variable ${varname}($skyformat) -value sexagesimal -command $cmd } } proc CoordMenuButton {w varname system other sky skyformat cmd} { upvar #0 $varname var global $varname CoordMenuButtonCmd $varname $system $sky {} ttk::menubutton $w -textvariable ${varname}($system,msg) -menu $w.menu CoordMenu $w.menu $varname $system $other $sky $skyformat \ [list CoordMenuButtonCmd $varname $system $sky $cmd] } proc CoordMenuButtonCmd {varname system sky cmd} { upvar #0 $varname var global $varname set ${varname}($system,msg) [msgcat::mc $var($system)] if {$sky != {}} { switch -- $var($system) { image - physical - amplifier - detector {} default { if {[info exists var(frame)]} { if {$var(frame) != {}} { if {[$var(frame) has wcs equatorial $var($system)]} { set ${varname}($system,msg) [msgcat::mc $var($sky)] } } } } } } if {$cmd != {}} { eval $cmd } } proc CoordMenuEnable {w varname system other sky skyformat} { upvar #0 $varname var global $varname if {![info exists var(frame)]} { return } if {$var(frame) == {}} { return } if {[$var(frame) has wcs wcs]} { $w entryconfig [msgcat::mc {WCS}] -state normal } else { $w entryconfig [msgcat::mc {WCS}] -state disabled } $w entryconfig [msgcat::mc {Multiple WCS}] -state normal foreach ll {a b c d e f g h i j k l m n o p q r s t u v w x y z} { if {[$var(frame) has wcs "wcs${ll}"]} { $w.wcs entryconfig "[msgcat::mc {WCS}] $ll" -state normal } else { $w.wcs entryconfig "[msgcat::mc {WCS}] $ll" -state disabled } } switch -- $other { 1 { $w entryconfig [msgcat::mc {Image}] -state normal $w entryconfig [msgcat::mc {Physical}] -state normal $w entryconfig [msgcat::mc {Amplifier}] -state normal $w entryconfig [msgcat::mc {Detector}] -state normal } 2 { $w entryconfig [msgcat::mc {Image}] -state normal } } if {$sky != {}} { if {[$var(frame) has wcs equatorial $var($system)]} { $w entryconfig [msgcat::mc {FK4}] -state normal $w entryconfig [msgcat::mc {FK5}] -state normal $w entryconfig [msgcat::mc {ICRS}] -state normal $w entryconfig [msgcat::mc {Galactic}] -state normal $w entryconfig [msgcat::mc {Ecliptic}] -state normal } else { $w entryconfig [msgcat::mc {FK4}] -state disabled $w entryconfig [msgcat::mc {FK5}] -state disabled $w entryconfig [msgcat::mc {ICRS}] -state disabled $w entryconfig [msgcat::mc {Galactic}] -state disabled $w entryconfig [msgcat::mc {Ecliptic}] -state disabled } } if {$skyformat != {}} { if {[$var(frame) has wcs celestrial $var($system)]} { $w entryconfig [msgcat::mc {Degrees}] -state normal $w entryconfig {Sexagesimal} -state normal } else { $w entryconfig [msgcat::mc {Degrees}] -state disabled $w entryconfig {Sexagesimal} -state disabled } } } proc CoordMenuReset {w varname system other sky skyformat} { upvar #0 $varname var global $varname $w entryconfig [msgcat::mc {WCS}] -state normal $w entryconfig [msgcat::mc {Multiple WCS}] -state normal foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} { $w.wcs entryconfig "[msgcat::mc {WCS}] $l" -state normal } switch -- $other { 1 { $w entryconfig [msgcat::mc {Image}] -state normal $w entryconfig [msgcat::mc {Physical}] -state normal $w entryconfig [msgcat::mc {Amplifier}] -state normal $w entryconfig [msgcat::mc {Detector}] -state normal } 2 { $w entryconfig [msgcat::mc {Image}] -state normal } } if {$sky != {}} { $w entryconfig [msgcat::mc {FK4}] -state normal $w entryconfig [msgcat::mc {FK5}] -state normal $w entryconfig [msgcat::mc {ICRS}] -state normal $w entryconfig [msgcat::mc {Galactic}] -state normal $w entryconfig [msgcat::mc {Ecliptic}] -state normal } if {$skyformat != {}} { $w entryconfig [msgcat::mc {Degrees}] -state normal $w entryconfig {Sexagesimal} -state normal } } # DistMenu proc DistMenu {w varname system other format cmd} { upvar #0 $varname var global $varname menu $w $w add radiobutton -label [msgcat::mc {WCS}] \ -variable ${varname}($system) -value wcs -command $cmd $w add cascade -label [msgcat::mc {Multiple WCS}] \ -menu $w.wcs menu $w.wcs foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} { $w.wcs add radiobutton -label "[msgcat::mc {WCS}] $l" \ -variable ${varname}($system) -value "wcs$l" -command $cmd } if {$other} { $w add separator $w add radiobutton -label [msgcat::mc {Image}] \ -variable ${varname}($system) -value image -command $cmd $w add radiobutton -label [msgcat::mc {Physical}] \ -variable ${varname}($system) -value physical -command $cmd $w add radiobutton -label [msgcat::mc {Amplifier}] \ -variable ${varname}($system) -value amplifier -command $cmd $w add radiobutton -label [msgcat::mc {Detector}] \ -variable ${varname}($system) -value detector -command $cmd } if {$format != {}} { $w add separator $w add radiobutton -label [msgcat::mc {Degrees}] \ -variable ${varname}($format) -value degrees -command $cmd $w add radiobutton -label [msgcat::mc {ArcMin}] \ -variable ${varname}($format) -value arcmin -command $cmd $w add radiobutton -label [msgcat::mc {ArcSec}] \ -variable ${varname}($format) -value arcsec -command $cmd } } proc DistMenuButton {w varname system other format cmd} { upvar #0 $varname var global $varname DistMenuButtonCmd $varname $system $format {} ttk::menubutton $w -textvariable ${varname}($system,msg) -menu $w.menu DistMenu $w.menu $varname $system $other $format \ [list DistMenuButtonCmd $varname $system $format $cmd] } proc DistMenuButtonCmd {varname system format cmd} { upvar #0 $varname var global $varname set ${varname}($system,msg) [msgcat::mc $var($system)] if {$format != {}} { switch -- $var($system) { image - physical - amplifier - detector {} default { if {[info exists var(frame)]} { if {$var(frame) != {}} { if {[$var(frame) has wcs equatorial $var($system)]} { set ${varname}($system,msg) [msgcat::mc $var($format)] } } } } } } if {$cmd != {}} { eval $cmd } } proc DistMenuEnable {w varname system other format} { upvar #0 $varname var global $varname if {![info exists var(frame)]} { return } if {$var(frame) == {}} { return } if {[$var(frame) has wcs wcs]} { $w entryconfig [msgcat::mc {WCS}] -state normal } else { $w entryconfig [msgcat::mc {WCS}] -state disabled } $w entryconfig [msgcat::mc {Multiple WCS}] -state normal foreach ll {a b c d e f g h i j k l m n o p q r s t u v w x y z} { if {[$var(frame) has wcs "wcs${ll}"]} { $w.wcs entryconfig "[msgcat::mc {WCS}] $ll" -state normal } else { $w.wcs entryconfig "[msgcat::mc {WCS}] $ll" -state disabled } } if {$other} { $w entryconfig [msgcat::mc {Image}] -state normal $w entryconfig [msgcat::mc {Physical}] -state normal $w entryconfig [msgcat::mc {Amplifier}] -state normal $w entryconfig [msgcat::mc {Detector}] -state normal } if {$format != {}} { if {[$var(frame) has wcs celestrial $var($system)]} { $w entryconfig [msgcat::mc {Degrees}] -state normal $w entryconfig [msgcat::mc {ArcMin}] -state normal $w entryconfig [msgcat::mc {ArcSec}] -state normal } else { $w entryconfig [msgcat::mc {Degrees}] -state disabled $w entryconfig [msgcat::mc {ArcMin}] -state disabled $w entryconfig [msgcat::mc {ArcSec}] -state disabled } } } proc DistMenuReset {w varname system other format} { upvar #0 $varname var global $varname $w entryconfig [msgcat::mc {WCS}] -state normal $w entryconfig [msgcat::mc {Multiple WCS}] -state normal foreach ll {a b c d e f g h i j k l m n o p q r s t u v w x y z} { $w.wcs entryconfig "[msgcat::mc {WCS}] $ll" -state normal } if {$other} { $w entryconfig [msgcat::mc {Image}] -state normal $w entryconfig [msgcat::mc {Physical}] -state normal $w entryconfig [msgcat::mc {Amplifier}] -state normal $w entryconfig [msgcat::mc {Detector}] -state normal } if {$format != {}} { $w entryconfig [msgcat::mc {Degrees}] -state normal $w entryconfig [msgcat::mc {ArcMin}] -state normal $w entryconfig [msgcat::mc {ArcSec}] -state normal } } # EditMenu proc EditMenu {mb varname} { upvar #0 $varname var global $varname global ds9 menu $mb.edit $mb.edit add command -label [msgcat::mc {Cut}] \ -command "EntryCut $var(top)" -accelerator "${ds9(ctrl)}X" $mb.edit add command -label [msgcat::mc {Copy}] \ -command "EntryCopy $var(top)" -accelerator "${ds9(ctrl)}C" $mb.edit add command -label [msgcat::mc {Paste}] \ -command "EntryPaste $var(top)" -accelerator "${ds9(ctrl)}V" } # ColorMenu proc ColorMenu {w varname color cmd} { upvar #0 $varname var global $varname menu $w $w add radiobutton -label [msgcat::mc {Black}] \ -variable ${varname}($color) -value black -command $cmd $w add radiobutton -label [msgcat::mc {White}] \ -variable ${varname}($color) -value white -command $cmd $w add radiobutton -label [msgcat::mc {Red}] \ -variable ${varname}($color) -value red -command $cmd $w add radiobutton -label [msgcat::mc {Green}] \ -variable ${varname}($color) -value green -command $cmd $w add radiobutton -label [msgcat::mc {Blue}] \ -variable ${varname}($color) -value blue -command $cmd $w add radiobutton -label [msgcat::mc {Cyan}] \ -variable ${varname}($color) -value cyan -command $cmd $w add radiobutton -label [msgcat::mc {Magenta}] \ -variable ${varname}($color) -value magenta -command $cmd $w add radiobutton -label [msgcat::mc {Yellow}] \ -variable ${varname}($color) -value yellow -command $cmd $w add separator $w add command -label "[msgcat::mc {Other Color}]..." \ -command [list ColorMenuOther $varname $color $cmd] } proc ColorMenuOther {varname color cmd} { upvar #0 $varname var global $varname if {[EntryDialog [msgcat::mc {Color}] [msgcat::mc {Enter Color}] 20 ${varname}($color)]} { eval $cmd } } proc ColorMenuButton {w varname color cmd} { upvar #0 $varname var global $varname ttk::menubutton $w -textvariable ${varname}($color) -menu $w.menu ColorMenu $w.menu $varname $color $cmd } # FontMenu proc FontMenu {w varname font size weight slant cmd} { upvar #0 $varname var global $varname menu $w $w add radiobutton -label {Times} -variable ${varname}($font) \ -value times -command $cmd $w add radiobutton -label {Helvetica} -variable ${varname}($font) \ -value helvetica -command $cmd $w add radiobutton -label {Courier} -variable ${varname}($font) \ -value courier -command $cmd $w add separator $w add radiobutton -label {9} -variable ${varname}($size) \ -value 9 -command $cmd $w add radiobutton -label {10} -variable ${varname}($size) \ -value 10 -command $cmd $w add radiobutton -label {12} -variable ${varname}($size) \ -value 12 -command $cmd $w add radiobutton -label {14} -variable ${varname}($size) \ -value 14 -command $cmd $w add radiobutton -label {16} -variable ${varname}($size) \ -value 16 -command $cmd $w add radiobutton -label {20} -variable ${varname}($size) \ -value 20 -command $cmd $w add radiobutton -label {24} -variable ${varname}($size) \ -value 24 -command $cmd $w add radiobutton -label {30} -variable ${varname}($size) \ -value 30 -command $cmd $w add radiobutton -label {36} -variable ${varname}($size) \ -value 36 -command $cmd $w add radiobutton -label {72} -variable ${varname}($size) \ -value 72 -command $cmd $w add separator $w add command -label "[msgcat::mc {Other Font Size}]..." \ -command [list FontMenuSize $varname $size $cmd] $w add separator $w add radiobutton -label [msgcat::mc {Normal}] \ -variable ${varname}($weight) -value normal -command $cmd $w add radiobutton -label [msgcat::mc {Bold}] \ -variable ${varname}($weight) -value bold -command $cmd $w add separator $w add radiobutton -label [msgcat::mc {Roman}] \ -variable ${varname}($slant) -value roman -command $cmd $w add radiobutton -label [msgcat::mc {Italic}] \ -variable ${varname}($slant) -value italic -command $cmd } proc FontMenuSize {varname size cmd} { upvar #0 $varname var global $varname if {[EntryDialog [msgcat::mc {Font Size}] [msgcat::mc {Enter Font Size}] 20 ${varname}($size)]} { eval $cmd } } proc FontMenuButton {w varname font size weight slant cmd} { upvar #0 $varname var global $varname ttk::menubutton $w -textvariable ${varname}($font) -menu $w.menu FontMenu $w.menu $varname $font $size $weight $slant $cmd } # WidthDashMenu proc WidthDashMenu {w varname width dash cmd1 cmd2} { upvar #0 $varname var global $varname menu $w $w add radiobutton -label {1} -variable ${varname}($width) \ -value 1 -command $cmd1 $w add radiobutton -label {2} -variable ${varname}($width) \ -value 2 -command $cmd1 $w add radiobutton -label {3} -variable ${varname}($width) \ -value 3 -command $cmd1 $w add radiobutton -label {4} -variable ${varname}($width) \ -value 4 -command $cmd1 if {$dash != {}} { $w add separator $w add checkbutton -label [msgcat::mc {Dash}] \ -variable ${varname}($dash) -command $cmd2 } } proc WidthDashMenuButton {w varname width dash cmd1 cmd2} { upvar #0 $varname var global $varname ttk::menubutton $w -textvariable ${varname}($width) -menu $w.menu WidthDashMenu $w.menu $varname $width $dash $cmd1 $cmd2 } # Prefs proc PrefsDialogMenu {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Menus and Buttons}] lappend dprefs(tabs) [ttk::frame $w.menu] PrefsDialogFileMenu $w.menu PrefsDialogEditMenu $w.menu PrefsDialogViewMenu $w.menu PrefsDialogFrameMenu $w.menu PrefsDialogBinMenu $w.menu PrefsDialogZoomMenu $w.menu PrefsDialogScaleMenu $w.menu PrefsDialogColorMenu $w.menu PrefsDialogRegionMenu $w.menu PrefsDialogWCSMenu $w.menu PrefsDialogAnalysisMenu $w.menu PrefsDialogHelpMenu $w.menu } saods9/ds9/library/mfile.tcl000644 000765 000000 00000057553 12705445647 016364 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Menus proc FileMainMenu {} { global ds9 menu $ds9(mb).file $ds9(mb).file add command -label "[msgcat::mc {Open}]..." \ -command [list OpenDialog fits] -accelerator "${ds9(ctrl)}O" $ds9(mb).file add cascade -label [msgcat::mc {Open as}] \ -menu $ds9(mb).file.open $ds9(mb).file add separator $ds9(mb).file add command -label "[msgcat::mc {Save}]..." \ -command [list SaveDialog fits] -accelerator "${ds9(ctrl)}S" $ds9(mb).file add cascade -label [msgcat::mc {Save as}] \ -menu $ds9(mb).file.save $ds9(mb).file add separator $ds9(mb).file add cascade -label [msgcat::mc {Import}] \ -menu $ds9(mb).file.import $ds9(mb).file add cascade -label [msgcat::mc {Export}] \ -menu $ds9(mb).file.export $ds9(mb).file add separator $ds9(mb).file add cascade -label [msgcat::mc {Save Image}] \ -menu $ds9(mb).file.saveimage $ds9(mb).file add command -label "[msgcat::mc {Create Movie}]..." \ -command MovieDialog $ds9(mb).file add separator $ds9(mb).file add command -label "[msgcat::mc {Backup}]..." \ -command BackupDialog $ds9(mb).file add command -label "[msgcat::mc {Restore}]..." \ -command RestoreDialog $ds9(mb).file add separator $ds9(mb).file add command -label "[msgcat::mc {Display Header}]..." \ -command DisplayHeaderMenu $ds9(mb).file add cascade -label [msgcat::mc {Preserve During Load}] \ -menu $ds9(mb).file.preserve $ds9(mb).file add separator $ds9(mb).file add cascade -label [msgcat::mc {XPA}] \ -menu $ds9(mb).file.xpa $ds9(mb).file add cascade -label [msgcat::mc {SAMP}] \ -menu $ds9(mb).file.samp $ds9(mb).file add separator $ds9(mb).file add command -label "[msgcat::mc {Open TCL Console}]..." \ -command OpenConsole $ds9(mb).file add command -label "[msgcat::mc {Source TCL}]..." \ -command OpenSource $ds9(mb).file add separator switch $ds9(wm) { x11 - win32 { $ds9(mb).file add command -label "[msgcat::mc {Page Setup}]..." \ -command PSPageSetup -accelerator "${ds9(shiftctrl)}P" $ds9(mb).file add command -label "[msgcat::mc {Print}]..." \ -command PSPrint -accelerator "${ds9(ctrl)}P" } aqua { # accelerators don't work with dialog box $ds9(mb).file add command -label "[msgcat::mc {Page Setup}]..." \ -command PSPageSetup $ds9(mb).file add command -label "[msgcat::mc {Print}]..." \ -command PSPrint # $ds9(mb).file add command -label "[msgcat::mc {Postscript Page Setup}]..." -command PSPageSetup # $ds9(mb).file add command -label "[msgcat::mc {Postscript Print}]..." -command PSPrint # $ds9(mb).file add separator # $ds9(mb).file add command -label "[msgcat::mc {Page Setup}]..." -command MacOSXPageSetup # $ds9(mb).file add command -label "[msgcat::mc {Print}]..." -command MacOSXPrint } } switch $ds9(wm) { x11 - win32 { $ds9(mb).file add separator $ds9(mb).file add command \ -label [msgcat::mc {Exit}] -command QuitDS9 } aqua {} } # File Open Menu menu $ds9(mb).file.open $ds9(mb).file.open add command -label "[msgcat::mc {Slice}]..." \ -command [list OpenDialog fits {} slice] $ds9(mb).file.open add separator $ds9(mb).file.open add command \ -label "[msgcat::mc {RGB Image}]..." \ -command [list OpenDialog rgbimage] $ds9(mb).file.open add command \ -label "[msgcat::mc {RGB Cube}]..."\ -command [list OpenDialog rgbcube] $ds9(mb).file.open add separator $ds9(mb).file.open add command \ -label "[msgcat::mc {Multiple Extension Cube}]..." \ -command [list OpenDialog mecube] $ds9(mb).file.open add command \ -label "[msgcat::mc {Multiple Extension Frames}]..." \ -command [list OpenDialog multiframe] $ds9(mb).file.open add separator $ds9(mb).file.open add command \ -label "[msgcat::mc {Mosaic WCS}]..." \ -command [list OpenDialog mosaicimagewcs] $ds9(mb).file.open add command \ -label "[msgcat::mc {Mosaic WCS Segment}]..." \ -command [list OpenDialog mosaicwcs] $ds9(mb).file.open add command \ -label "[msgcat::mc {Mosaic IRAF}]..." \ -command [list OpenDialog mosaicimageiraf] $ds9(mb).file.open add command \ -label "[msgcat::mc {Mosaic IRAF Segment}]..." \ -command [list OpenDialog mosaiciraf] $ds9(mb).file.open add command \ -label "[msgcat::mc {Mosaic WFPC2}]..." \ -command [list OpenDialog mosaicimagewfpc2] $ds9(mb).file.open add separator $ds9(mb).file.open add command \ -label "[msgcat::mc {URL}]..." \ -command [list OpenURLFits] # File Save Menu menu $ds9(mb).file.save $ds9(mb).file.save add command -label "[msgcat::mc {Slice}]..." \ -command [list SaveDialog slice] $ds9(mb).file.save add separator $ds9(mb).file.save add command \ -label "[msgcat::mc {RGB Image}]..." \ -command [list SaveDialog rgbimage] $ds9(mb).file.save add command \ -label "[msgcat::mc {RGB Cube}]..."\ -command [list SaveDialog rgbcube] $ds9(mb).file.save add separator $ds9(mb).file.save add command \ -label "[msgcat::mc {Multiple Extension Cube}]..." \ -command [list SaveDialog mecube] $ds9(mb).file.save add separator $ds9(mb).file.save add command \ -label "[msgcat::mc {Mosaic WCS}]..." \ -command [list SaveDialog mosaicimagewcs] $ds9(mb).file.save add command \ -label "[msgcat::mc {Mosaic WCS Segment}]..." \ -command [list SaveDialog mosaicwcs] # File Import Menu menu $ds9(mb).file.import $ds9(mb).file.import add cascade -label [msgcat::mc {Slice}] \ -menu $ds9(mb).file.import.slice $ds9(mb).file.import add separator $ds9(mb).file.import add command -label "[msgcat::mc {Array}]..." \ -command [list ImportDialog array] $ds9(mb).file.import add command -label {NRRD...} \ -command [list ImportDialog nrrd] $ds9(mb).file.import add command -label {ENVI...} \ -command [list ImportDialog envi] $ds9(mb).file.import add separator $ds9(mb).file.import add command -label "[msgcat::mc {RGB Array}]..." \ -command [list ImportDialog rgbarray] $ds9(mb).file.import add separator $ds9(mb).file.import add command -label {GIF...} \ -command [list ImportDialog gif] $ds9(mb).file.import add command -label {TIFF...} \ -command [list ImportDialog tiff] $ds9(mb).file.import add command -label {JPEG...} \ -command [list ImportDialog jpeg] $ds9(mb).file.import add command -label {PNG...} \ -command [list ImportDialog png] # File Import Slice Menu menu $ds9(mb).file.import.slice $ds9(mb).file.import.slice add command -label {GIF...} \ -command [list ImportDialog gif {} slice] $ds9(mb).file.import.slice add command -label {TIFF...} \ -command [list ImportDialog tiff {} slice] $ds9(mb).file.import.slice add command -label {JPEG...} \ -command [list ImportDialog jpeg {} slice] $ds9(mb).file.import.slice add command -label {PNG...} \ -command [list ImportDialog png {} slice] # File Export Menu menu $ds9(mb).file.export $ds9(mb).file.export add command -label "[msgcat::mc {Array}]..." \ -command [list ExportDialog array] $ds9(mb).file.export add command -label {NRRD...} \ -command [list ExportDialog nrrd] $ds9(mb).file.export add command -label {ENVI...} \ -command [list ExportDialog envi] $ds9(mb).file.export add separator $ds9(mb).file.export add command -label "[msgcat::mc {RGB Array}]..." \ -command [list ExportDialog rgbarray] $ds9(mb).file.export add separator $ds9(mb).file.export add command -label {GIF...} \ -command [list ExportDialog gif] $ds9(mb).file.export add command -label {TIFF...} \ -command [list ExportDialog tiff] $ds9(mb).file.export add command -label {JPEG...} \ -command [list ExportDialog jpeg] $ds9(mb).file.export add command -label {PNG...} \ -command [list ExportDialog png] # File Saveimage Menu menu $ds9(mb).file.saveimage $ds9(mb).file.saveimage add command -label {FITS...} \ -command [list SaveImageDialog fits] $ds9(mb).file.saveimage add command -label {EPS...} \ -command [list SaveImageDialog eps] $ds9(mb).file.saveimage add command -label {GIF...} \ -command [list SaveImageDialog gif] $ds9(mb).file.saveimage add command -label {TIFF...} \ -command [list SaveImageDialog tiff] $ds9(mb).file.saveimage add command -label {JPEG...} \ -command [list SaveImageDialog jpeg] $ds9(mb).file.saveimage add command -label {PNG...} \ -command [list SaveImageDialog png] # File Preserve Menu menu $ds9(mb).file.preserve $ds9(mb).file.preserve add checkbutton -label [msgcat::mc {Pan}] \ -variable panzoom(preserve) -command PreservePan $ds9(mb).file.preserve add checkbutton -label [msgcat::mc {Region}] \ -variable marker(preserve) -command MarkerPreserve menu $ds9(mb).file.samp $ds9(mb).file.samp add command -label [msgcat::mc {Connect}] \ -command SAMPConnect $ds9(mb).file.samp add command -label [msgcat::mc {Disconnect}] \ -command SAMPDisconnect $ds9(mb).file.samp add separator $ds9(mb).file.samp add cascade -label [msgcat::mc {Image}] \ -menu $ds9(mb).file.samp.image $ds9(mb).file.samp add cascade -label [msgcat::mc {Table}] \ -menu $ds9(mb).file.samp.table menu $ds9(mb).file.samp.image $ds9(mb).file.samp.image add command -label [msgcat::mc {Broadcast}] \ -command "SAMPSendImageLoadFits {}" $ds9(mb).file.samp.image add separator menu $ds9(mb).file.samp.table $ds9(mb).file.samp.table add command -label [msgcat::mc {Broadcast}] \ -command "SAMPSendTableLoadFits {}" $ds9(mb).file.samp.table add separator menu $ds9(mb).file.xpa $ds9(mb).file.xpa add command -label "[msgcat::mc {Information}]..." \ -command XPAInfo $ds9(mb).file.xpa add separator $ds9(mb).file.xpa add command -label [msgcat::mc {Connect}] \ -command XPAConnect $ds9(mb).file.xpa add command -label [msgcat::mc {Disconnect}] \ -command XPADisconnect # Bindings bind $ds9(top) <> [list OpenDialog fits] bind $ds9(top) <> [list SaveDialog fits] switch $ds9(wm) { x11 - win32 { bind $ds9(top) <> PSPageSetup bind $ds9(top) <> PSPrint } aqua { # Known bug in Tk, can't have dialogs invoked by accelerator } } } proc PrefsDialogFileMenu {w} { set f [ttk::labelframe $w.mfile -text [msgcat::mc {File}]] ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu PrefsDialogButtonbarFile $f.buttonbar grid $f.menu $f.buttonbar -padx 2 -pady 2 set m $f.menu.menu menu $m $m add cascade -label [msgcat::mc {Preserve During Load}] \ -menu $m.preserve global pscale global ppanzoom global pmarker menu $m.preserve $m.preserve add checkbutton -label [msgcat::mc {Pan}] \ -variable ppanzoom(preserve) $m.preserve add checkbutton -label [msgcat::mc {Region}] \ -variable pmarker(preserve) pack $f -side top -fill both -expand true } # Buttons proc ButtonsFileDef {} { global pbuttons array set pbuttons { file,open 1 file,save 1 file,movie 0 file,backup 0 file,restore 0 file,header 1 file,xpa,info 0 file,samp,image 0 file,samp,table 0 file,console 0 file,tcl 0 file,pspage 0 file,psprint 0 file,page 1 file,print 1 file,exit 1 } } proc CreateButtonsFile {} { global ds9 global buttons ttk::frame $ds9(buttons).file ButtonButton $ds9(buttons).file.open \ [string tolower [msgcat::mc {Open}]] \ [list OpenDialog fits] ButtonButton $ds9(buttons).file.save \ [string tolower [msgcat::mc {Save}]] \ [list SaveDialog fits] ButtonButton $ds9(buttons).file.movie \ [string tolower [msgcat::mc {Create Movie}]] MovieDialog ButtonButton $ds9(buttons).file.backup \ [string tolower [msgcat::mc {Backup}]] BackupDialog ButtonButton $ds9(buttons).file.restore \ [string tolower [msgcat::mc {Restore}]] RestoreDialog ButtonButton $ds9(buttons).file.header \ [string tolower [msgcat::mc {Header}]] DisplayHeaderMenu ButtonButton $ds9(buttons).file.xpainfo \ [string tolower {XPA Info}] XPAInfo ButtonButton $ds9(buttons).file.sampimage \ [string tolower [msgcat::mc {SAMP Image}]] "SAMPSendImageLoadFits {}" ButtonButton $ds9(buttons).file.samptable \ [string tolower [msgcat::mc {SAMP Table}]] "SAMPSendTableLoadFits {}" ButtonButton $ds9(buttons).file.console \ [string tolower [msgcat::mc {Console}]] OpenConsole ButtonButton $ds9(buttons).file.tcl \ [string tolower {TCL}] OpenSource ButtonButton $ds9(buttons).file.pspage \ [string tolower [msgcat::mc {PS Page Setup}]] PSPageSetup ButtonButton $ds9(buttons).file.psprint \ [string tolower [msgcat::mc {PS Print}]] PSPrint switch $ds9(wm) { x11 - win32 { ButtonButton $ds9(buttons).file.page \ [string tolower [msgcat::mc {Page Setup}]] PSPageSetup ButtonButton $ds9(buttons).file.print \ [string tolower [msgcat::mc {Print}]] PSPrint } aqua { ButtonButton $ds9(buttons).file.page \ [string tolower [msgcat::mc {Page Setup}]] PSPageSetup ButtonButton $ds9(buttons).file.print \ [string tolower [msgcat::mc {Print}]] PSPrint # ButtonButton $ds9(buttons).file.page [string tolower [msgcat::mc {Page Setup}]] MacOSXPageSetup # ButtonButton $ds9(buttons).file.print [string tolower [msgcat::mc {Print}]] MacOSXPrint } } ButtonButton $ds9(buttons).file.exit \ [string tolower [msgcat::mc {Exit}]] QuitDS9 set buttons(file) " $ds9(buttons).file.open pbuttons(file,open) $ds9(buttons).file.save pbuttons(file,save) $ds9(buttons).file.movie pbuttons(file,movie) $ds9(buttons).file.backup pbuttons(file,backup) $ds9(buttons).file.restore pbuttons(file,restore) $ds9(buttons).file.header pbuttons(file,header) $ds9(buttons).file.xpainfo pbuttons(file,xpa,info) $ds9(buttons).file.sampimage pbuttons(file,samp,image) $ds9(buttons).file.samptable pbuttons(file,samp,table) $ds9(buttons).file.console pbuttons(file,console) $ds9(buttons).file.tcl pbuttons(file,tcl) $ds9(buttons).file.pspage pbuttons(file,pspage) $ds9(buttons).file.psprint pbuttons(file,psprint) $ds9(buttons).file.page pbuttons(file,page) $ds9(buttons).file.print pbuttons(file,print) $ds9(buttons).file.exit pbuttons(file,exit) " } proc PrefsDialogButtonbarFile {f} { global buttons global pbuttons global ds9 ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu set m $f.menu menu $m $m add checkbutton -label "[msgcat::mc {Open}]..." \ -variable pbuttons(file,open) -command {UpdateButtons buttons(file)} $m add checkbutton -label "[msgcat::mc {Save}]..." \ -variable pbuttons(file,save) -command {UpdateButtons buttons(file)} $m add separator $m add checkbutton -label "[msgcat::mc {Create Movie}]..." \ -variable pbuttons(file,movie) -command {UpdateButtons buttons(file)} $m add separator $m add checkbutton -label "[msgcat::mc {Backup}]..." \ -variable pbuttons(file,backup) -command {UpdateButtons buttons(file)} $m add checkbutton -label "[msgcat::mc {Restore}]..." \ -variable pbuttons(file,restore) -command {UpdateButtons buttons(file)} $m add separator $m add checkbutton -label "[msgcat::mc {Display Header}]..." \ -variable pbuttons(file,header) -command {UpdateButtons buttons(file)} $m add separator $m add cascade -label [msgcat::mc {XPA}] -menu $m.xpa $m add cascade -label [msgcat::mc {SAMP}] -menu $m.samp $m add separator $m add checkbutton -label "[msgcat::mc {Open TCL Console}]..." \ -variable pbuttons(file,console) -command {UpdateButtons buttons(file)} $m add checkbutton -label "[msgcat::mc {Source TCL}]..." \ -variable pbuttons(file,tcl) -command {UpdateButtons buttons(file)} $m add separator switch $ds9(wm) { x11 - win32 { $m add checkbutton \ -label "[msgcat::mc {Page Setup}]..." \ -variable pbuttons(file,page) \ -command {UpdateButtons buttons(file)} $m add checkbutton \ -label "[msgcat::mc {Print}]..." \ -variable pbuttons(file,print) \ -command {UpdateButtons buttons(file)} } aqua { $m add checkbutton \ -label "[msgcat::mc {Page Setup}]..." \ -variable pbuttons(file,page) \ -command {UpdateButtons buttons(file)} $m add checkbutton \ -label "[msgcat::mc {Print}]..." \ -variable pbuttons(file,print) \ -command {UpdateButtons buttons(file)} # $m add checkbutton -label "[msgcat::mc {Postscript Page Setup}]..." -variable pbuttons(file,pspage) -command {UpdateButtons buttons(file)} # $m add checkbutton -label "[msgcat::mc {Postscript Print}]..." -variable pbuttons(file,psprint) -command {UpdateButtons buttons(file)} # $m add separator # $m add checkbutton -label "[msgcat::mc {Page Setup}]..." -variable pbuttons(file,page) -command {UpdateButtons buttons(file)} # $m add checkbutton -label "[msgcat::mc {Print}]..." -variable pbuttons(file,print) -command {UpdateButtons buttons(file)} } } $m add separator $m add checkbutton -label [msgcat::mc {Exit}] \ -variable pbuttons(file,exit) -command {UpdateButtons buttons(filew)} menu $m.xpa $m.xpa add checkbutton -label "[msgcat::mc {Information}]..." \ -variable pbuttons(file,xpa,info) \ -command {UpdateButtons buttons(file)} menu $m.samp $m.samp add checkbutton -label [msgcat::mc {Image}] \ -variable pbuttons(file,samp,image) \ -command {UpdateButtons buttons(file)} $m.samp add checkbutton -label [msgcat::mc {Table}] \ -variable pbuttons(file,samp,table) \ -command {UpdateButtons buttons(file)} } # Support proc UpdateFileMenuStatic {} { global ds9 global debug if {$debug(tcl,update)} { puts stderr "UpdateFileMenuStatic" } if {$ds9(active,num) > 0} { $ds9(mb).file entryconfig "[msgcat::mc {Open}]..." \ -state normal $ds9(mb).file entryconfig [msgcat::mc {Open as}] \ -state normal $ds9(mb).file entryconfig [msgcat::mc {Import}] \ -state normal $ds9(buttons).file.open configure -state normal } else { $ds9(mb).file entryconfig "[msgcat::mc {Open}]..." \ -state disabled $ds9(mb).file entryconfig [msgcat::mc {Open as}] \ -state disabled $ds9(mb).file entryconfig [msgcat::mc {Import}] \ -state disabled $ds9(buttons).file.open configure -state disabled } } proc UpdateFileMenu {} { global ds9 global current global samp global xpa global debug if {$debug(tcl,update)} { puts stderr "UpdateFileMenu" } set mm $ds9(mb).file set bb $ds9(buttons).file if {$current(frame) != {}} { if {[$current(frame) has fits]} { $mm entryconfig "[msgcat::mc {Save}]..." -state normal $mm entryconfig [msgcat::mc {Save as}] -state normal $mm entryconfig [msgcat::mc {Export}] -state normal $mm entryconfig [msgcat::mc {Save Image}] -state normal $mm entryconfig "[msgcat::mc {Create Movie}]..." -state normal $mm entryconfig "[msgcat::mc {Display Header}]..." -state normal if {[$current(frame) has fits mosaic]} { $mm.save entryconfig "[msgcat::mc {Mosaic WCS}]..." -state normal $mm.save entryconfig "[msgcat::mc {Mosaic WCS Segment}]..." -state normal } else { $mm.save entryconfig "[msgcat::mc {Mosaic WCS}]..." -state disabled $mm.save entryconfig "[msgcat::mc {Mosaic WCS Segment}]..." -state disabled } $bb.save configure -state normal $bb.movie configure -state normal $bb.header configure -state normal } else { $mm entryconfig "[msgcat::mc {Save}]..." -state disabled $mm entryconfig [msgcat::mc {Save as}] -state disabled $mm entryconfig [msgcat::mc {Export}] -state disabled $mm entryconfig [msgcat::mc {Save Image}] -state disabled $mm entryconfig "[msgcat::mc {Create Movie}]..." -state disabled $mm entryconfig "[msgcat::mc {Display Header}]..." -state disabled $bb.save configure -state disabled $bb.movie configure -state disabled $bb.header configure -state disabled } switch -- [$current(frame) get type] { base { $mm.open entryconfig \ "[msgcat::mc {RGB Image}]..." -state disabled $mm.open entryconfig \ "[msgcat::mc {RGB Cube}]..." -state disabled $mm.save entryconfig \ "[msgcat::mc {RGB Image}]..." -state disabled $mm.save entryconfig \ "[msgcat::mc {RGB Cube}]..." -state disabled $mm.import entryconfig \ "[msgcat::mc {RGB Array}]..." -state disabled $mm.export entryconfig \ "[msgcat::mc {RGB Array}]..." -state disabled } rgb { $mm.open entryconfig \ "[msgcat::mc {RGB Image}]..." -state normal $mm.open entryconfig \ "[msgcat::mc {RGB Cube}]..." -state normal $mm.save entryconfig \ "[msgcat::mc {RGB Image}]..." -state normal $mm.save entryconfig \ "[msgcat::mc {RGB Cube}]..." -state normal $mm.import entryconfig \ "[msgcat::mc {RGB Array}]..." -state normal $mm.export entryconfig \ "[msgcat::mc {RGB Array}]..." -state normal } 3d { $mm.open entryconfig \ "[msgcat::mc {RGB Image}]..." -state disabled $mm.open entryconfig \ "[msgcat::mc {RGB Cube}]..." -state disabled $mm.save entryconfig \ "[msgcat::mc {RGB Image}]..." -state disabled $mm.save entryconfig \ "[msgcat::mc {RGB Cube}]..." -state disabled $mm.import entryconfig \ "[msgcat::mc {RGB Array}]..." -state disabled $mm.export entryconfig \ "[msgcat::mc {RGB Array}]..." -state disabled } } if {[info exists samp]} { set ss [expr $ds9(menu,start)+2] if {[$current(frame) has fits]} { $mm.samp entryconfig [msgcat::mc {Image}] \ -state normal if {[$mm.samp.image index end] >= $ss} { $mm.samp.image delete $ss end } foreach args $samp(apps,image) { foreach {id name} $args { $mm.samp.image add command -label $name \ -command "SAMPSendImageLoadFits $id" } } $bb.sampimage configure -state normal if {[$current(frame) has fits bin]} { $mm.samp entryconfig [msgcat::mc {Table}] -state normal if {[$mm.samp.table index end] >= $ss} { $mm.samp.table delete $ss end } foreach args $samp(apps,table) { foreach {id name} $args { $mm.samp.table add command -label $name \ -command "SAMPSendTableLoadFits $id" } } $bb.samptable configure -state normal } else { $mm.samp entryconfig [msgcat::mc {Table}] -state disabled $bb.samptable configure -state disabled } } else { $mm.samp entryconfig [msgcat::mc {Image}] -state disabled $mm.samp entryconfig [msgcat::mc {Table}] -state disabled $bb.sampimage configure -state disabled $bb.samptable configure -state disabled } } else { $mm.samp entryconfig [msgcat::mc {Image}] -state disabled $mm.samp entryconfig [msgcat::mc {Table}] -state disabled $bb.sampimage configure -state disabled $bb.samptable configure -state disabled } } else { $mm entryconfig "[msgcat::mc {Save}]..." -state disabled $mm entryconfig [msgcat::mc {Save as}] -state disabled $mm entryconfig [msgcat::mc {Export}] -state disabled $mm entryconfig [msgcat::mc {Save Image}] -state disabled $mm entryconfig "[msgcat::mc {Create Movie}]..." -state disabled $mm entryconfig "[msgcat::mc {Display Header}]..." -state disabled $bb.save configure -state disabled $bb.movie configure -state disabled $bb.header configure -state disabled $mm.samp entryconfig [msgcat::mc {Image}] -state disabled $mm.samp entryconfig [msgcat::mc {Table}] -state disabled $bb.sampimage configure -state disabled $bb.samptable configure -state disabled } # XPA if {[info exists xpa]} { $mm.xpa entryconfig "[msgcat::mc {Information}]..." -state normal $mm.xpa entryconfig [msgcat::mc {Disconnect}] -state normal } else { $mm.xpa entryconfig "[msgcat::mc {Information}]..." -state disabled $mm.xpa entryconfig [msgcat::mc {Disconnect}] -state disabled } # SAMP if {[info exists samp]} { $mm.samp entryconfig [msgcat::mc {Connect}] -state disabled $mm.samp entryconfig [msgcat::mc {Disconnect}] -state normal } else { $mm.samp entryconfig [msgcat::mc {Connect}] -state normal $mm.samp entryconfig [msgcat::mc {Disconnect}] -state disabled } } saods9/ds9/library/mframe.tcl000644 000765 000000 00000145132 12705445647 016526 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Menus proc FrameMainMenu {} { global ds9 global current menu $ds9(mb).frame $ds9(mb).frame add command -label [msgcat::mc {New Frame}] \ -command CreateFrame $ds9(mb).frame add command -label [msgcat::mc {New Frame RGB}] \ -command CreateRGBFrame $ds9(mb).frame add command -label [msgcat::mc {New Frame 3D}] \ -command Create3DFrame $ds9(mb).frame add separator $ds9(mb).frame add command -label [msgcat::mc {Delete Frame}] \ -command DeleteCurrentFrame $ds9(mb).frame add command -label [msgcat::mc {Delete All Frames}] \ -command DeleteAllFramesMenu $ds9(mb).frame add separator $ds9(mb).frame add command -label [msgcat::mc {Clear Frame}] \ -command ClearCurrentFrame $ds9(mb).frame add command -label [msgcat::mc {Reset Frame}] \ -command ResetCurrentFrame $ds9(mb).frame add command -label [msgcat::mc {Refresh Frame}] \ -command UpdateCurrentFrame $ds9(mb).frame add separator $ds9(mb).frame add radiobutton -label [msgcat::mc {Single Frame}] \ -variable current(display) -value single -command DisplayMode $ds9(mb).frame add radiobutton -label [msgcat::mc {Tile Frames}] \ -variable current(display) -value tile -command DisplayMode $ds9(mb).frame add radiobutton -label [msgcat::mc {Blink Frames}] \ -variable current(display) -value blink -command DisplayMode $ds9(mb).frame add separator $ds9(mb).frame add cascade -label [msgcat::mc {Match}] \ -menu $ds9(mb).frame.match $ds9(mb).frame add cascade -label [msgcat::mc {Lock}] \ -menu $ds9(mb).frame.lock $ds9(mb).frame add separator $ds9(mb).frame add cascade -label [msgcat::mc {Goto Frame}] \ -menu $ds9(mb).frame.goto $ds9(mb).frame add cascade -label [msgcat::mc {Show/Hide Frames}] \ -menu $ds9(mb).frame.active $ds9(mb).frame add cascade -label [msgcat::mc {Move Frame}] \ -menu $ds9(mb).frame.move $ds9(mb).frame add separator $ds9(mb).frame add command -label [msgcat::mc {First Frame}] \ -command FirstFrame $ds9(mb).frame add command -label [msgcat::mc {Previous Frame}] \ -command PrevFrame $ds9(mb).frame add command -label [msgcat::mc {Next Frame}] \ -command NextFrame $ds9(mb).frame add command -label [msgcat::mc {Last Frame}] \ -command LastFrame $ds9(mb).frame add separator $ds9(mb).frame add command -label "[msgcat::mc {Cube}]..." \ -command CubeDialog $ds9(mb).frame add command -label "[msgcat::mc {RGB}]..." \ -command RGBDialog $ds9(mb).frame add command -label "[msgcat::mc {3D}]..." \ -command 3DDialog $ds9(mb).frame add separator $ds9(mb).frame add cascade -label [msgcat::mc {Frame Parameters}] \ -menu $ds9(mb).frame.params # match menu $ds9(mb).frame.match $ds9(mb).frame.match add cascade -label [msgcat::mc {Frame}] \ -menu $ds9(mb).frame.match.frame $ds9(mb).frame.match add cascade -label [msgcat::mc {Crosshair}] \ -menu $ds9(mb).frame.match.crosshair $ds9(mb).frame.match add cascade -label [msgcat::mc {Crop}] \ -menu $ds9(mb).frame.match.crop $ds9(mb).frame.match add cascade -label [msgcat::mc {Slice}] \ -menu $ds9(mb).frame.match.cube $ds9(mb).frame.match add command -label [msgcat::mc {Bin}] \ -command MatchBinCurrent $ds9(mb).frame.match add command -label [msgcat::mc {Axes Order}] \ -command MatchAxesCurrent $ds9(mb).frame.match add command -label [msgcat::mc {Scale}] \ -command MatchScaleCurrent $ds9(mb).frame.match add command -label [msgcat::mc {Scale and Limits}] \ -command MatchScaleLimitsCurrent $ds9(mb).frame.match add command -label [msgcat::mc {Colorbar}] \ -command MatchColorCurrent $ds9(mb).frame.match add command -label [msgcat::mc {Block}] \ -command MatchBlockCurrent $ds9(mb).frame.match add command -label [msgcat::mc {Smooth}] \ -command MatchSmoothCurrent menu $ds9(mb).frame.match.frame $ds9(mb).frame.match.frame add command -label [msgcat::mc {WCS}] \ -command {MatchFrameCurrent wcs} $ds9(mb).frame.match.frame add separator $ds9(mb).frame.match.frame add command -label [msgcat::mc {Image}] \ -command {MatchFrameCurrent image} $ds9(mb).frame.match.frame add command -label [msgcat::mc {Physical}] \ -command {MatchFrameCurrent physical} $ds9(mb).frame.match.frame add command -label [msgcat::mc {Amplifier}] \ -command {MatchFrameCurrent amplifier} $ds9(mb).frame.match.frame add command -label [msgcat::mc {Detector}] \ -command {MatchFrameCurrent detector} menu $ds9(mb).frame.match.crosshair $ds9(mb).frame.match.crosshair add command -label [msgcat::mc {WCS}] \ -command {MatchCrosshairCurrent wcs} $ds9(mb).frame.match.crosshair add separator $ds9(mb).frame.match.crosshair add command -label [msgcat::mc {Image}] \ -command {MatchCrosshairCurrent image} $ds9(mb).frame.match.crosshair add command -label [msgcat::mc {Physical}] \ -command {MatchCrosshairCurrent physical} $ds9(mb).frame.match.crosshair add command -label [msgcat::mc {Amplifier}] \ -command {MatchCrosshairCurrent amplifier} $ds9(mb).frame.match.crosshair add command -label [msgcat::mc {Detector}] \ -command {MatchCrosshairCurrent detector} menu $ds9(mb).frame.match.crop $ds9(mb).frame.match.crop add command -label [msgcat::mc {WCS}] \ -command {MatchCropCurrent wcs} $ds9(mb).frame.match.crop add separator $ds9(mb).frame.match.crop add command -label [msgcat::mc {Image}] \ -command {MatchCropCurrent image} $ds9(mb).frame.match.crop add command -label [msgcat::mc {Physical}] \ -command {MatchCropCurrent physical} $ds9(mb).frame.match.crop add command -label [msgcat::mc {Amplifier}] \ -command {MatchCropCurrent amplifier} $ds9(mb).frame.match.crop add command -label [msgcat::mc {Detector}] \ -command {MatchCropCurrent detector} menu $ds9(mb).frame.match.cube $ds9(mb).frame.match.cube add command -label [msgcat::mc {WCS}] \ -command {MatchCubeCurrent wcs} $ds9(mb).frame.match.cube add separator $ds9(mb).frame.match.cube add command -label [msgcat::mc {Image}] \ -command {MatchCubeCurrent image} # lock menu $ds9(mb).frame.lock $ds9(mb).frame.lock add cascade -label [msgcat::mc {Frame}] \ -menu $ds9(mb).frame.lock.frame $ds9(mb).frame.lock add cascade -label [msgcat::mc {Crosshair}] \ -menu $ds9(mb).frame.lock.crosshair $ds9(mb).frame.lock add cascade -label [msgcat::mc {Crop}] \ -menu $ds9(mb).frame.lock.crop $ds9(mb).frame.lock add cascade -label [msgcat::mc {Slice}] \ -menu $ds9(mb).frame.lock.cube $ds9(mb).frame.lock add checkbutton -label [msgcat::mc {Bin}] \ -variable bin(lock) -command {LockBinCurrent} $ds9(mb).frame.lock add checkbutton -label [msgcat::mc {Axes Order}] \ -variable cube(lock,axes) -command {LockAxesCurrent} $ds9(mb).frame.lock add checkbutton -label [msgcat::mc {Scale}] \ -variable scale(lock) -command {LockScaleCurrent} $ds9(mb).frame.lock add checkbutton -label [msgcat::mc {Scale and Limits}] \ -variable scale(lock,limits) -command {LockScaleLimitsCurrent} $ds9(mb).frame.lock add checkbutton -label [msgcat::mc {Colorbar}] \ -variable colorbar(lock) -command {LockColorCurrent} $ds9(mb).frame.lock add checkbutton -label [msgcat::mc {Block}] \ -variable block(lock) -command {LockBlockCurrent} $ds9(mb).frame.lock add checkbutton -label [msgcat::mc {Smooth}] \ -variable smooth(lock) -command {LockSmoothCurrent} menu $ds9(mb).frame.lock.frame $ds9(mb).frame.lock.frame add radiobutton -label [msgcat::mc {None}] \ -variable panzoom(lock) -value none -command LockFrameCurrent $ds9(mb).frame.lock.frame add separator $ds9(mb).frame.lock.frame add radiobutton -label [msgcat::mc {WCS}] \ -variable panzoom(lock) -value wcs -command LockFrameCurrent $ds9(mb).frame.lock.frame add separator $ds9(mb).frame.lock.frame add radiobutton -label [msgcat::mc {Image}] \ -variable panzoom(lock) -value image -command LockFrameCurrent $ds9(mb).frame.lock.frame add radiobutton -label [msgcat::mc {Physical}] \ -variable panzoom(lock) -value physical -command LockFrameCurrent $ds9(mb).frame.lock.frame add radiobutton -label [msgcat::mc {Amplifier}] \ -variable panzoom(lock) -value amplifier -command LockFrameCurrent $ds9(mb).frame.lock.frame add radiobutton -label [msgcat::mc {Detector}] \ -variable panzoom(lock) -value detector -command LockFrameCurrent menu $ds9(mb).frame.lock.crosshair $ds9(mb).frame.lock.crosshair add radiobutton \ -label [msgcat::mc {None}] -variable crosshair(lock) \ -value none -command LockCrosshairCurrent $ds9(mb).frame.lock.crosshair add separator $ds9(mb).frame.lock.crosshair add radiobutton \ -label [msgcat::mc {WCS}] -variable crosshair(lock) \ -value wcs -command LockCrosshairCurrent $ds9(mb).frame.lock.crosshair add separator $ds9(mb).frame.lock.crosshair add radiobutton \ -label [msgcat::mc {Image}] -variable crosshair(lock) \ -value image -command LockCrosshairCurrent $ds9(mb).frame.lock.crosshair add radiobutton \ -label [msgcat::mc {Physical}] -variable crosshair(lock) \ -value physical -command LockCrosshairCurrent $ds9(mb).frame.lock.crosshair add radiobutton \ -label [msgcat::mc {Amplifier}] -variable crosshair(lock) \ -value amplifier -command LockCrosshairCurrent $ds9(mb).frame.lock.crosshair add radiobutton \ -label [msgcat::mc {Detector}] -variable crosshair(lock) \ -value detector -command LockCrosshairCurrent menu $ds9(mb).frame.lock.crop $ds9(mb).frame.lock.crop add radiobutton -label [msgcat::mc {None}] \ -variable crop(lock) -value none -command LockCropCurrent $ds9(mb).frame.lock.crop add separator $ds9(mb).frame.lock.crop add radiobutton -label [msgcat::mc {WCS}] \ -variable crop(lock) -value wcs -command LockCropCurrent $ds9(mb).frame.lock.crop add separator $ds9(mb).frame.lock.crop add radiobutton -label [msgcat::mc {Image}] \ -variable crop(lock) -value image -command LockCropCurrent $ds9(mb).frame.lock.crop add radiobutton -label [msgcat::mc {Physical}] \ -variable crop(lock) -value physical -command LockCropCurrent $ds9(mb).frame.lock.crop add radiobutton -label [msgcat::mc {Amplifier}] \ -variable crop(lock) -value amplifier -command LockCropCurrent $ds9(mb).frame.lock.crop add radiobutton -label [msgcat::mc {Detector}] \ -variable crop(lock) -value detector -command LockCropCurrent menu $ds9(mb).frame.lock.cube $ds9(mb).frame.lock.cube add radiobutton -label [msgcat::mc {None}] \ -variable cube(lock) -value none -command LockCubeCurrent $ds9(mb).frame.lock.cube add separator $ds9(mb).frame.lock.cube add radiobutton -label [msgcat::mc {WCS}] \ -variable cube(lock) -value wcs -command LockCubeCurrent $ds9(mb).frame.lock.cube add separator $ds9(mb).frame.lock.cube add radiobutton -label [msgcat::mc {Image}] \ -variable cube(lock) -value image -command LockCubeCurrent # active menu $ds9(mb).frame.active $ds9(mb).frame.active add command -label [msgcat::mc {Show All}] \ -command ActiveFrameAll $ds9(mb).frame.active add command -label [msgcat::mc {Hide All}] \ -command ActiveFrameNone $ds9(mb).frame.active add separator # move menu $ds9(mb).frame.move $ds9(mb).frame.move add command -label [msgcat::mc {First}] \ -command MoveFirstFrame $ds9(mb).frame.move add command -label [msgcat::mc {Back}] \ -command MovePrevFrame $ds9(mb).frame.move add command -label [msgcat::mc {Forward}] \ -command MoveNextFrame $ds9(mb).frame.move add command -label [msgcat::mc {Last}] \ -command MoveLastFrame menu $ds9(mb).frame.goto # params menu $ds9(mb).frame.params $ds9(mb).frame.params add cascade -label [msgcat::mc {Tile}] \ -menu $ds9(mb).frame.params.tile $ds9(mb).frame.params add cascade -label [msgcat::mc {Blink Interval}] \ -menu $ds9(mb).frame.params.blink $ds9(mb).frame.params add command -label [msgcat::mc {Display Size}] \ -command DisplayDefaultDialog menu $ds9(mb).frame.params.tile $ds9(mb).frame.params.tile add radiobutton -label [msgcat::mc {Grid}] \ -variable tile(mode) -value grid -command DisplayMode $ds9(mb).frame.params.tile add radiobutton -label [msgcat::mc {Columns}] \ -variable tile(mode) -value column -command DisplayMode $ds9(mb).frame.params.tile add radiobutton -label [msgcat::mc {Rows}] \ -variable tile(mode) -value row -command DisplayMode $ds9(mb).frame.params.tile add separator $ds9(mb).frame.params.tile add command \ -label "[msgcat::mc {Tile Parameters}]..." -command TileDialog menu $ds9(mb).frame.params.blink $ds9(mb).frame.params.blink add radiobutton \ -label ".125 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 125 $ds9(mb).frame.params.blink add radiobutton \ -label ".25 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 250 $ds9(mb).frame.params.blink add radiobutton \ -label ".5 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 500 $ds9(mb).frame.params.blink add radiobutton \ -label "1 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 1000 $ds9(mb).frame.params.blink add radiobutton \ -label "2 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 2000 $ds9(mb).frame.params.blink add radiobutton \ -label "4 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 4000 $ds9(mb).frame.params.blink add radiobutton \ -label "8 [msgcat::mc {Seconds}]" \ -variable blink(interval) -value 8000 } proc PrefsDialogFrameMenu {w} { set f [ttk::labelframe $w.mframe -text [msgcat::mc {Frame}]] ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu PrefsDialogButtonbarFrame $f.buttonbar grid $f.menu $f.buttonbar -padx 2 -pady 2 set m $f.menu.menu menu $m $m add radiobutton -label [msgcat::mc {Single Frame}] \ -variable pcurrent(display) -value single $m add radiobutton -label [msgcat::mc {Tile Frames}] \ -variable pcurrent(display) -value tile $m add radiobutton -label [msgcat::mc {Blink Frames}] \ -variable pcurrent(display) -value blink $m add separator $m add cascade -label [msgcat::mc {Frame Parameters}] \ -menu $m.params menu $m.params $m.params add cascade -label [msgcat::mc {Tile}] \ -menu $m.params.tile $m.params add cascade -label [msgcat::mc {Blink Interval}] \ -menu $m.params.blink menu $m.params.tile $m.params.tile add radiobutton -label [msgcat::mc {Grid}] \ -variable ptile(mode) -value grid $m.params.tile add radiobutton -label [msgcat::mc {Columns}] \ -variable ptile(mode) -value column $m.params.tile add radiobutton -label [msgcat::mc {Rows}] \ -variable ptile(mode) -value row menu $m.params.blink $m.params.blink add radiobutton -label ".125 [msgcat::mc {Seconds}]" \ -variable pblink(interval) -value 125 $m.params.blink add radiobutton -label ".25 [msgcat::mc {Seconds}]" \ -variable pblink(interval) -value 250 $m.params.blink add radiobutton -label ".5 [msgcat::mc {Seconds}]" \ -variable pblink(interval) -value 500 $m.params.blink add radiobutton -label "1 [msgcat::mc {Seconds}]" \ -variable pblink(interval) -value 1000 $m.params.blink add radiobutton -label "2 [msgcat::mc {Seconds}]" \ -variable pblink(interval) -value 2000 $m.params.blink add radiobutton -label "4 [msgcat::mc {Seconds}]" \ -variable pblink(interval) -value 4000 $m.params.blink add radiobutton -label "8 [msgcat::mc {Seconds}]" \ -variable pblink(interval) -value 8000 pack $f -side top -fill both -expand true } # Buttons proc ButtonsFrameDef {} { global pbuttons array set pbuttons { frame,new 1 frame,newrgb 1 frame,new3d 1 frame,delete 1 frame,deleteall 0 frame,clear 1 frame,reset 0 frame,refresh 0 frame,single 1 frame,tile 1 frame,blink 1 frame,match,bin 0 frame,match,axes 0 frame,match,scale 0 frame,match,scalelimits 0 frame,match,color 0 frame,match,smooth 0 frame,match,frame,wcs 0 frame,match,frame,image 0 frame,match,frame,physical 0 frame,match,frame,detector 0 frame,match,frame,amplifier 0 frame,match,crosshair,wcs 0 frame,match,crosshair,image 0 frame,match,crosshair,physical 0 frame,match,crosshair,detector 0 frame,match,crosshair,amplifier 0 frame,match,crop,wcs 0 frame,match,crop,image 0 frame,match,crop,physical 0 frame,match,crop,detector 0 frame,match,crop,amplifier 0 frame,match,cube,wcs 0 frame,match,cube,image 0 frame,lock,bin 0 frame,lock,axes 0 frame,lock,scale 0 frame,lock,scalelimits 0 frame,lock,color 0 frame,lock,smooth 0 frame,lock,frame,none 0 frame,lock,frame,wcs 0 frame,lock,frame,image 0 frame,lock,frame,physical 0 frame,lock,frame,detector 0 frame,lock,frame,amplifier 0 frame,lock,crosshair,none 0 frame,lock,crosshair,wcs 0 frame,lock,crosshair,image 0 frame,lock,crosshair,physical 0 frame,lock,crosshair,detector 0 frame,lock,crosshair,amplifier 0 frame,lock,crop,none 0 frame,lock,crop,wcs 0 frame,lock,crop,image 0 frame,lock,crop,physical 0 frame,lock,crop,detector 0 frame,lock,crop,amplifier 0 frame,lock,cube,none 0 frame,lock,cube,wcs 0 frame,lock,cube,image 0 frame,movefirst 0 frame,moveprev 0 frame,movenext 0 frame,movelast 0 frame,first 1 frame,prev 1 frame,next 1 frame,last 1 frame,cube 0 frame,rgb 0 frame,3d 0 frame,size 0 } } proc CreateButtonsFrame {} { global buttons global ds9 global current ttk::frame $ds9(buttons).frame ButtonButton $ds9(buttons).frame.new \ [string tolower [msgcat::mc {New}]] CreateFrame ButtonButton $ds9(buttons).frame.newrgb \ [string tolower [msgcat::mc {RGB}]] CreateRGBFrame ButtonButton $ds9(buttons).frame.new3d \ [string tolower [msgcat::mc {3D}]] Create3DFrame ButtonButton $ds9(buttons).frame.delete \ [string tolower [msgcat::mc {Delete}]] DeleteCurrentFrame ButtonButton $ds9(buttons).frame.deleteall \ [string tolower [msgcat::mc {Delete All}]] DeleteAllFramesMenu ButtonButton $ds9(buttons).frame.clear \ [string tolower [msgcat::mc {Clear}]] ClearCurrentFrame ButtonButton $ds9(buttons).frame.reset \ [string tolower [msgcat::mc {Reset}]] ResetCurrentFrame ButtonButton $ds9(buttons).frame.refresh \ [string tolower [msgcat::mc {Refresh}]] UpdateCurrentFrame RadioButton $ds9(buttons).frame.single \ [string tolower [msgcat::mc {Single}]] \ current(display) single DisplayMode RadioButton $ds9(buttons).frame.tile \ [string tolower [msgcat::mc {Tile}]] \ current(display) tile DisplayMode RadioButton $ds9(buttons).frame.blink \ [string tolower [msgcat::mc {Blink}]] \ current(display) blink DisplayMode ButtonButton $ds9(buttons).frame.matchbin \ [string tolower [msgcat::mc {Match Bin}]] MatchBinCurrent ButtonButton $ds9(buttons).frame.matchaxes \ [string tolower [msgcat::mc {Match Axes}]] MatchAxesCurrent ButtonButton $ds9(buttons).frame.matchscale \ [string tolower [msgcat::mc {Match Scale}]] MatchScaleCurrent ButtonButton $ds9(buttons).frame.matchscalelimits \ [string tolower [msgcat::mc {Match Limits}]] \ MatchScaleLimitsCurrent ButtonButton $ds9(buttons).frame.matchcolor \ [string tolower [msgcat::mc {Match Color}]] MatchColorCurrent ButtonButton $ds9(buttons).frame.matchsmooth \ [string tolower [msgcat::mc {Match Smooth}]] MatchSmoothCurrent ButtonButton $ds9(buttons).frame.matchframewcs \ [string tolower [msgcat::mc {Match Frame WCS}]] \ {MatchFrameCurrent wcs} ButtonButton $ds9(buttons).frame.matchframeimage \ [string tolower [msgcat::mc {Match Frame Image}]] \ {MatchFrameCurrent image} ButtonButton $ds9(buttons).frame.matchframephysical \ [string tolower [msgcat::mc {Match Frame Physical}]] \ {MatchFrameCurrent physical} ButtonButton $ds9(buttons).frame.matchframedetector \ [string tolower [msgcat::mc {Match Frame Detector}]] \ {MatchFrameCurrent detector} ButtonButton $ds9(buttons).frame.matchframeamplifier \ [string tolower [msgcat::mc {Match Frame Amplifier}]] \ {MatchFrameCurrent amplifier} ButtonButton $ds9(buttons).frame.matchcrosshairwcs \ [string tolower [msgcat::mc {Match Crosshair WCS}]] \ {MatchCrosshairCurrent wcs} ButtonButton $ds9(buttons).frame.matchcrosshairimage \ [string tolower [msgcat::mc {Match Crosshair Image}]] \ {MatchCrosshairCurrent image} ButtonButton $ds9(buttons).frame.matchcrosshairphysical \ [string tolower [msgcat::mc {Match Crosshair Physical}]] \ {MatchCrosshairCurrent physical} ButtonButton $ds9(buttons).frame.matchcrosshairdetector \ [string tolower [msgcat::mc {Match Crosshair Detector}]] \ {MatchCrosshairCurrent detector} ButtonButton $ds9(buttons).frame.matchcrosshairamplifier \ [string tolower [msgcat::mc {Match Crosshair Amplifier}]] \ {MatchCrosshairCurrent amplifier} ButtonButton $ds9(buttons).frame.matchcropwcs \ [string tolower [msgcat::mc {Match Crop WCS}]] \ {MatchCropCurrent wcs} ButtonButton $ds9(buttons).frame.matchcropimage \ [string tolower [msgcat::mc {Match Crop Image}]] \ {MatchCropCurrent image} ButtonButton $ds9(buttons).frame.matchcropphysical \ [string tolower [msgcat::mc {Match Crop Physical}]] \ {MatchCropCurrent physical} ButtonButton $ds9(buttons).frame.matchcropdetector \ [string tolower [msgcat::mc {Match Crop Detector}]] \ {MatchCropCurrent detector} ButtonButton $ds9(buttons).frame.matchcropamplifier \ [string tolower [msgcat::mc {Match Crop Amplifier}]] \ {MatchCropCurrent amplifier} ButtonButton $ds9(buttons).frame.matchcubewcs \ [string tolower [msgcat::mc {Match Slice WCS}]] \ {MatchCubeCurrent wcs} ButtonButton $ds9(buttons).frame.matchcubeimage \ [string tolower [msgcat::mc {Match Slice Image}]] \ {MatchCubeCurrent image} CheckButton $ds9(buttons).frame.lockbin \ [string tolower [msgcat::mc {Lock Bin}]] bin(lock) LockBinCurrent CheckButton $ds9(buttons).frame.lockaxes \ [string tolower [msgcat::mc {Lock Axes}]] \ cube(lock,axes) LockAxesCurrent CheckButton $ds9(buttons).frame.lockscale \ [string tolower [msgcat::mc {Lock Scale}]] scale(lock) LockScaleCurrent CheckButton $ds9(buttons).frame.lockscalelimits \ [string tolower [msgcat::mc {Lock Limits}]] \ scale(lock,limits) LockScaleLimitsCurrent CheckButton $ds9(buttons).frame.lockcolor \ [string tolower [msgcat::mc {Lock Color}]] color(lock) LockColorCurrent CheckButton $ds9(buttons).frame.locksmooth \ [string tolower [msgcat::mc {Lock Smooth}]] \ smooth(lock) LockSmoothCurrent RadioButton $ds9(buttons).frame.lockframenone \ [string tolower [msgcat::mc {Lock Frame None}]] \ panzoom(lock) none LockFrameCurrent RadioButton $ds9(buttons).frame.lockframewcs \ [string tolower [msgcat::mc {Lock Frame WCS}]] \ panzoom(lock) wcs LockFrameCurrent RadioButton $ds9(buttons).frame.lockframeimage \ [string tolower [msgcat::mc {Lock Frame Image}]] \ panzoom(lock) image LockFrameCurrent RadioButton $ds9(buttons).frame.lockframephysical \ [string tolower [msgcat::mc {Lock Frame Physical}]] \ panzoom(lock) physical LockFrameCurrent RadioButton $ds9(buttons).frame.lockframedetector \ [string tolower [msgcat::mc {Lock Frame Detector}]] \ panzoom(lock) detector LockFrameCurrent RadioButton $ds9(buttons).frame.lockframeamplifier \ [string tolower [msgcat::mc {Lock Frame Amplifier}]] \ panzoom(lock) amplifier LockFrameCurrent RadioButton $ds9(buttons).frame.lockcrosshairnone \ [string tolower [msgcat::mc {Lock Crosshair None}]] \ crosshair(lock) none LockCrosshairCurrent RadioButton $ds9(buttons).frame.lockcrosshairwcs \ [string tolower [msgcat::mc {Lock Crosshair WCS}]] \ crosshair(lock) wcs LockCrosshairCurrent RadioButton $ds9(buttons).frame.lockcrosshairimage \ [string tolower [msgcat::mc {Lock Crosshair Image}]] \ crosshair(lock) image LockCrosshairCurrent RadioButton $ds9(buttons).frame.lockcrosshairphysical \ [string tolower [msgcat::mc {Lock Crosshair Physical}]] \ crosshair(lock) physical LockCrosshairCurrent RadioButton $ds9(buttons).frame.lockcrosshairdetector \ [string tolower [msgcat::mc {Lock Crosshair Detector}]] \ crosshair(lock) detector LockCrosshairCurrent RadioButton $ds9(buttons).frame.lockcrosshairamplifier \ [string tolower [msgcat::mc {Lock Crosshair Amplifier}]] \ crosshair(lock) amplifier LockCrosshairCurrent RadioButton $ds9(buttons).frame.lockcropnone \ [string tolower [msgcat::mc {Lock Crop None}]] \ crop(lock) none LockCropCurrent RadioButton $ds9(buttons).frame.lockcropwcs \ [string tolower [msgcat::mc {Lock Crop WCS}]] \ crop(lock) wcs LockCropCurrent RadioButton $ds9(buttons).frame.lockcropimage \ [string tolower [msgcat::mc {Lock Crop Image}]] \ crop(lock) image LockCropCurrent RadioButton $ds9(buttons).frame.lockcropphysical \ [string tolower [msgcat::mc {Lock Crop Physical}]] \ crop(lock) physical LockCropCurrent RadioButton $ds9(buttons).frame.lockcropdetector \ [string tolower [msgcat::mc {Lock Crop Detector}]] \ crop(lock) detector LockCropCurrent RadioButton $ds9(buttons).frame.lockcropamplifier \ [string tolower [msgcat::mc {Lock Crop Amplifier}]] \ crop(lock) amplifier LockCropCurrent RadioButton $ds9(buttons).frame.lockcubenone \ [string tolower [msgcat::mc {Lock Slice None}]] \ cube(lock) none LockCubeCurrent RadioButton $ds9(buttons).frame.lockcubewcs \ [string tolower [msgcat::mc {Lock Slice WCS}]] \ cube(lock) wcs LockCubeCurrent RadioButton $ds9(buttons).frame.lockcubeimage \ [string tolower [msgcat::mc {Lock Slice Image}]] \ cube(lock) image LockCubeCurrent ButtonButton $ds9(buttons).frame.movefirst \ [string tolower [msgcat::mc {Move First}]] MoveFirstFrame ButtonButton $ds9(buttons).frame.moveprev \ [string tolower [msgcat::mc {Move Back}]] MovePrevFrame ButtonButton $ds9(buttons).frame.movenext \ [string tolower [msgcat::mc {Move Forward}]] MoveNextFrame ButtonButton $ds9(buttons).frame.movelast \ [string tolower [msgcat::mc {Move Last}]] MoveLastFrame ButtonButton $ds9(buttons).frame.first \ [string tolower [msgcat::mc {First}]] FirstFrame ButtonButton $ds9(buttons).frame.prev \ [string tolower [msgcat::mc {Prev}]] PrevFrame ButtonButton $ds9(buttons).frame.next \ [string tolower [msgcat::mc {Next}]] NextFrame ButtonButton $ds9(buttons).frame.last \ [string tolower [msgcat::mc {Last}]] LastFrame ButtonButton $ds9(buttons).frame.cube \ [string tolower "[msgcat::mc {Cube}]..."] CubeDialog ButtonButton $ds9(buttons).frame.rgb \ [string tolower "[msgcat::mc {RGB}]..."] RGBDialog ButtonButton $ds9(buttons).frame.3d \ [string tolower "[msgcat::mc {3D}]..."] 3DDialog ButtonButton $ds9(buttons).frame.size \ [string tolower [msgcat::mc {Size}]] DisplayDefaultDialog set buttons(frame) " $ds9(buttons).frame.new pbuttons(frame,new) $ds9(buttons).frame.newrgb pbuttons(frame,newrgb) $ds9(buttons).frame.new3d pbuttons(frame,new3d) $ds9(buttons).frame.delete pbuttons(frame,delete) $ds9(buttons).frame.deleteall pbuttons(frame,deleteall) $ds9(buttons).frame.clear pbuttons(frame,clear) $ds9(buttons).frame.reset pbuttons(frame,reset) $ds9(buttons).frame.refresh pbuttons(frame,refresh) $ds9(buttons).frame.single pbuttons(frame,single) $ds9(buttons).frame.tile pbuttons(frame,tile) $ds9(buttons).frame.blink pbuttons(frame,blink) $ds9(buttons).frame.matchbin pbuttons(frame,match,bin) $ds9(buttons).frame.matchaxes pbuttons(frame,match,axes) $ds9(buttons).frame.matchscale pbuttons(frame,match,scale) $ds9(buttons).frame.matchscalelimits pbuttons(frame,match,scalelimits) $ds9(buttons).frame.matchcolor pbuttons(frame,match,color) $ds9(buttons).frame.matchsmooth pbuttons(frame,match,smooth) $ds9(buttons).frame.matchframewcs pbuttons(frame,match,frame,wcs) $ds9(buttons).frame.matchframeimage pbuttons(frame,match,frame,image) $ds9(buttons).frame.matchframephysical pbuttons(frame,match,frame,physical) $ds9(buttons).frame.matchframedetector pbuttons(frame,match,frame,detector) $ds9(buttons).frame.matchframeamplifier pbuttons(frame,match,frame,amplifier) $ds9(buttons).frame.matchcrosshairwcs pbuttons(frame,match,crosshair,wcs) $ds9(buttons).frame.matchcrosshairimage pbuttons(frame,match,crosshair,image) $ds9(buttons).frame.matchcrosshairphysical pbuttons(frame,match,crosshair,physical) $ds9(buttons).frame.matchcrosshairdetector pbuttons(frame,match,crosshair,detector) $ds9(buttons).frame.matchcrosshairamplifier pbuttons(frame,match,crosshair,amplifier) $ds9(buttons).frame.matchcropwcs pbuttons(frame,match,crop,wcs) $ds9(buttons).frame.matchcropimage pbuttons(frame,match,crop,image) $ds9(buttons).frame.matchcropphysical pbuttons(frame,match,crop,physical) $ds9(buttons).frame.matchcropdetector pbuttons(frame,match,crop,detector) $ds9(buttons).frame.matchcropamplifier pbuttons(frame,match,crop,amplifier) $ds9(buttons).frame.matchcubewcs pbuttons(frame,match,cube,wcs) $ds9(buttons).frame.matchcubeimage pbuttons(frame,match,cube,image) $ds9(buttons).frame.lockbin pbuttons(frame,lock,bin) $ds9(buttons).frame.lockaxes pbuttons(frame,lock,axes) $ds9(buttons).frame.lockscale pbuttons(frame,lock,scale) $ds9(buttons).frame.lockscalelimits pbuttons(frame,lock,scalelimits) $ds9(buttons).frame.lockcolor pbuttons(frame,lock,color) $ds9(buttons).frame.locksmooth pbuttons(frame,lock,smooth) $ds9(buttons).frame.lockframenone pbuttons(frame,lock,frame,none) $ds9(buttons).frame.lockframewcs pbuttons(frame,lock,frame,wcs) $ds9(buttons).frame.lockframeimage pbuttons(frame,lock,frame,image) $ds9(buttons).frame.lockframephysical pbuttons(frame,lock,frame,physical) $ds9(buttons).frame.lockframedetector pbuttons(frame,lock,frame,detector) $ds9(buttons).frame.lockframeamplifier pbuttons(frame,lock,frame,amplifier) $ds9(buttons).frame.lockcrosshairnone pbuttons(frame,lock,crosshair,none) $ds9(buttons).frame.lockcrosshairwcs pbuttons(frame,lock,crosshair,wcs) $ds9(buttons).frame.lockcrosshairimage pbuttons(frame,lock,crosshair,image) $ds9(buttons).frame.lockcrosshairphysical pbuttons(frame,lock,crosshair,physical) $ds9(buttons).frame.lockcrosshairdetector pbuttons(frame,lock,crosshair,detector) $ds9(buttons).frame.lockcrosshairamplifier pbuttons(frame,lock,crosshair,amplifier) $ds9(buttons).frame.lockcropnone pbuttons(frame,lock,crop,none) $ds9(buttons).frame.lockcropwcs pbuttons(frame,lock,crop,wcs) $ds9(buttons).frame.lockcropimage pbuttons(frame,lock,crop,image) $ds9(buttons).frame.lockcropphysical pbuttons(frame,lock,crop,physical) $ds9(buttons).frame.lockcropdetector pbuttons(frame,lock,crop,detector) $ds9(buttons).frame.lockcropamplifier pbuttons(frame,lock,crop,amplifier) $ds9(buttons).frame.lockcubenone pbuttons(frame,lock,cube,none) $ds9(buttons).frame.lockcubewcs pbuttons(frame,lock,cube,wcs) $ds9(buttons).frame.lockcubeimage pbuttons(frame,lock,cube,image) $ds9(buttons).frame.movefirst pbuttons(frame,movefirst) $ds9(buttons).frame.moveprev pbuttons(frame,moveprev) $ds9(buttons).frame.movenext pbuttons(frame,movenext) $ds9(buttons).frame.movelast pbuttons(frame,movelast) $ds9(buttons).frame.first pbuttons(frame,first) $ds9(buttons).frame.prev pbuttons(frame,prev) $ds9(buttons).frame.next pbuttons(frame,next) $ds9(buttons).frame.last pbuttons(frame,last) $ds9(buttons).frame.cube pbuttons(frame,cube) $ds9(buttons).frame.rgb pbuttons(frame,rgb) $ds9(buttons).frame.3d pbuttons(frame,3d) $ds9(buttons).frame.size pbuttons(frame,size) " } proc PrefsDialogButtonbarFrame {f} { global buttons global pbuttons global ds9 ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu set m $f.menu menu $m $m add checkbutton -label [msgcat::mc {New Frame}] \ -variable pbuttons(frame,new) -command {UpdateButtons buttons(frame)} $m add checkbutton -label [msgcat::mc {New Frame RGB}] \ -variable pbuttons(frame,newrgb) -command {UpdateButtons buttons(frame)} $m add checkbutton -label [msgcat::mc {New Frame 3D}] \ -variable pbuttons(frame,new3d) -command {UpdateButtons buttons(frame)} $m add separator $m add checkbutton -label [msgcat::mc {Delete Frame}] \ -variable pbuttons(frame,delete) -command {UpdateButtons buttons(frame)} $m add checkbutton -label [msgcat::mc {Delete All Frames}] \ -variable pbuttons(frame,deleteall) -command {UpdateButtons buttons(frame)} $m add separator $m add checkbutton -label [msgcat::mc {Clear Frame}] \ -variable pbuttons(frame,clear) -command {UpdateButtons buttons(frame)} $m add checkbutton -label [msgcat::mc {Reset Frame}] \ -variable pbuttons(frame,reset) -command {UpdateButtons buttons(frame)} $m add checkbutton -label [msgcat::mc {Refresh Frame}] \ -variable pbuttons(frame,refresh) -command {UpdateButtons buttons(frame)} $m add separator $m add checkbutton -label [msgcat::mc {Single Frame}] \ -variable pbuttons(frame,single) -command {UpdateButtons buttons(frame)} $m add checkbutton -label [msgcat::mc {Tile Frames}] \ -variable pbuttons(frame,tile) -command {UpdateButtons buttons(frame)} $m add checkbutton -label [msgcat::mc {Blink Frames}] \ -variable pbuttons(frame,blink) -command {UpdateButtons buttons(frame)} $m add separator $m add cascade -label [msgcat::mc {Match}] -menu $m.match $m add cascade -label [msgcat::mc {Lock}] -menu $m.lock $m add separator $m add cascade -label [msgcat::mc {Move Frame}] -menu $m.move $m add separator $m add checkbutton -label [msgcat::mc {First Frame}] \ -variable pbuttons(frame,first) -command {UpdateButtons buttons(frame)} $m add checkbutton -label [msgcat::mc {Previous Frame}] \ -variable pbuttons(frame,prev) -command {UpdateButtons buttons(frame)} $m add checkbutton -label [msgcat::mc {Next Frame}] \ -variable pbuttons(frame,next) -command {UpdateButtons buttons(frame)} $m add checkbutton -label [msgcat::mc {Last Frame}] \ -variable pbuttons(frame,last) -command {UpdateButtons buttons(frame)} $m add separator $m add checkbutton -label "[msgcat::mc {Cube}]..." \ -variable pbuttons(frame,cube) -command {UpdateButtons buttons(frame)} $m add checkbutton -label "[msgcat::mc {RGB}]..." \ -variable pbuttons(frame,rgb) -command {UpdateButtons buttons(frame)} $m add checkbutton -label "[msgcat::mc {3D}]..." \ -variable pbuttons(frame,3d) -command {UpdateButtons buttons(frame)} $m add separator $m add cascade -label [msgcat::mc {Frame Parameters}] -menu $m.params # match menu $m.match $m.match add cascade -label [msgcat::mc {Frame}] \ -menu $m.match.frame $m.match add cascade -label [msgcat::mc {Crosshair}] \ -menu $m.match.crosshair $m.match add cascade -label [msgcat::mc {Crop}] \ -menu $m.match.crop $m.match add cascade -label [msgcat::mc {Slice}] \ -menu $m.match.cube $m.match add checkbutton -label [msgcat::mc {Bin}] \ -variable pbuttons(frame,match,bin) \ -command {UpdateButtons buttons(frame)} $m.match add checkbutton -label [msgcat::mc {Axes Order}] \ -variable pbuttons(frame,match,axes) \ -command {UpdateButtons buttons(frame)} $m.match add checkbutton -label [msgcat::mc {Scale}] \ -variable pbuttons(frame,match,scale) \ -command {UpdateButtons buttons(frame)} $m.match add checkbutton -label [msgcat::mc {Scale and Limits}] \ -variable pbuttons(frame,match,scalelimits) \ -command {UpdateButtons buttons(frame)} $m.match add checkbutton -label [msgcat::mc {Color}] \ -variable pbuttons(frame,match,color) \ -command {UpdateButtons buttons(frame)} $m.match add checkbutton -label [msgcat::mc {Smooth}] \ -variable pbuttons(frame,match,smooth) \ -command {UpdateButtons buttons(frame)} menu $m.match.frame $m.match.frame add checkbutton -label [msgcat::mc {WCS}] \ -variable pbuttons(frame,match,frame,wcs) \ -command {UpdateButtons buttons(frame)} $m.match.frame add separator $m.match.frame add checkbutton -label [msgcat::mc {Image}] \ -variable pbuttons(frame,match,frame,image) \ -command {UpdateButtons buttons(frame)} $m.match.frame add checkbutton -label [msgcat::mc {Physical}] \ -variable pbuttons(frame,match,frame,physical) \ -command {UpdateButtons buttons(frame)} $m.match.frame add checkbutton -label [msgcat::mc {Detector}] \ -variable pbuttons(frame,match,frame,detector) \ -command {UpdateButtons buttons(frame)} $m.match.frame add checkbutton -label [msgcat::mc {Amplifier}] \ -variable pbuttons(frame,match,frame,amplifier) \ -command {UpdateButtons buttons(frame)} menu $m.match.crosshair $m.match.crosshair add checkbutton -label [msgcat::mc {WCS}] \ -variable pbuttons(frame,match,crosshair,wcs) \ -command {UpdateButtons buttons(frame)} $m.match.crosshair add separator $m.match.crosshair add checkbutton -label [msgcat::mc {Image}] \ -variable pbuttons(frame,match,crosshair,image) \ -command {UpdateButtons buttons(frame)} $m.match.crosshair add checkbutton -label [msgcat::mc {Physical}] \ -variable pbuttons(frame,match,crosshair,physical) \ -command {UpdateButtons buttons(frame)} $m.match.crosshair add checkbutton -label [msgcat::mc {Detector}] \ -variable pbuttons(frame,match,crosshair,detector) \ -command {UpdateButtons buttons(frame)} $m.match.crosshair add checkbutton -label [msgcat::mc {Amplifier}] \ -variable pbuttons(frame,match,crosshair,amplifier) \ -command {UpdateButtons buttons(frame)} menu $m.match.crop $m.match.crop add checkbutton -label [msgcat::mc {WCS}] \ -variable pbuttons(frame,match,crop,wcs) \ -command {UpdateButtons buttons(frame)} $m.match.crop add separator $m.match.crop add checkbutton -label [msgcat::mc {Image}] \ -variable pbuttons(frame,match,crop,image) \ -command {UpdateButtons buttons(frame)} $m.match.crop add checkbutton -label [msgcat::mc {Physical}] \ -variable pbuttons(frame,match,crop,physical) \ -command {UpdateButtons buttons(frame)} $m.match.crop add checkbutton -label [msgcat::mc {Detector}] \ -variable pbuttons(frame,match,crop,detector) \ -command {UpdateButtons buttons(frame)} $m.match.crop add checkbutton -label [msgcat::mc {Amplifier}] \ -variable pbuttons(frame,match,crop,amplifier) \ -command {UpdateButtons buttons(frame)} menu $m.match.cube $m.match.cube add checkbutton -label [msgcat::mc {WCS}] \ -variable pbuttons(frame,match,cube,wcs) \ -command {UpdateButtons buttons(frame)} $m.match.cube add separator $m.match.cube add checkbutton -label [msgcat::mc {Image}] \ -variable pbuttons(frame,match,cube,image) \ -command {UpdateButtons buttons(frame)} # lock menu $m.lock $m.lock add cascade -label [msgcat::mc {Frame}] \ -menu $m.lock.frame $m.lock add cascade -label [msgcat::mc {Crosshair}] \ -menu $m.lock.crosshair $m.lock add cascade -label [msgcat::mc {Crop}] \ -menu $m.lock.crop $m.lock add cascade -label [msgcat::mc {Slice}] \ -menu $m.lock.cube $m.lock add checkbutton -label [msgcat::mc {Bin}] \ -variable pbuttons(frame,lock,bin) \ -command {UpdateButtons buttons(frame)} $m.lock add checkbutton -label [msgcat::mc {Axes Order}] \ -variable pbuttons(frame,lock,axes) \ -command {UpdateButtons buttons(frame)} $m.lock add checkbutton -label [msgcat::mc {Scale}] \ -variable pbuttons(frame,lock,scale) \ -command {UpdateButtons buttons(frame)} $m.lock add checkbutton -label [msgcat::mc {Scale and Limits}] \ -variable pbuttons(frame,lock,scalelimits) \ -command {UpdateButtons buttons(frame)} $m.lock add checkbutton -label [msgcat::mc {Color}] \ -variable pbuttons(frame,lock,color) \ -command {UpdateButtons buttons(frame)} $m.lock add checkbutton -label [msgcat::mc {Smooth}] \ -variable pbuttons(frame,lock,smooth) \ -command {UpdateButtons buttons(frame)} menu $m.lock.frame $m.lock.frame add checkbutton -label [msgcat::mc {None}] \ -variable pbuttons(frame,lock,frame,none) \ -command {UpdateButtons buttons(frame)} $m.lock.frame add separator $m.lock.frame add checkbutton -label [msgcat::mc {WCS}] \ -variable pbuttons(frame,lock,frame,wcs) \ -command {UpdateButtons buttons(frame)} $m.lock.frame add separator $m.lock.frame add checkbutton -label [msgcat::mc {Image}] \ -variable pbuttons(frame,lock,frame,image) \ -command {UpdateButtons buttons(frame)} $m.lock.frame add checkbutton -label [msgcat::mc {Physical}] \ -variable pbuttons(frame,lock,frame,physical) \ -command {UpdateButtons buttons(frame)} $m.lock.frame add checkbutton -label [msgcat::mc {Detector}] \ -variable pbuttons(frame,lock,frame,detector) \ -command {UpdateButtons buttons(frame)} $m.lock.frame add checkbutton -label [msgcat::mc {Amplifier}] \ -variable pbuttons(frame,lock,frame,amplifier) \ -command {UpdateButtons buttons(frame)} menu $m.lock.crosshair $m.lock.crosshair add checkbutton -label [msgcat::mc {None}] \ -variable pbuttons(frame,lock,crosshair,none) \ -command {UpdateButtons buttons(frame)} $m.lock.crosshair add separator $m.lock.crosshair add checkbutton -label [msgcat::mc {WCS}] \ -variable pbuttons(frame,lock,crosshair,wcs) \ -command {UpdateButtons buttons(frame)} $m.lock.crosshair add separator $m.lock.crosshair add checkbutton -label [msgcat::mc {Image}] \ -variable pbuttons(frame,lock,crosshair,image) \ -command {UpdateButtons buttons(frame)} $m.lock.crosshair add checkbutton -label [msgcat::mc {Physical}] \ -variable pbuttons(frame,lock,crosshair,physical) \ -command {UpdateButtons buttons(frame)} $m.lock.crosshair add checkbutton -label [msgcat::mc {Detector}] \ -variable pbuttons(frame,lock,crosshair,detector) \ -command {UpdateButtons buttons(frame)} $m.lock.crosshair add checkbutton -label [msgcat::mc {Amplifier}] \ -variable pbuttons(frame,lock,crosshair,amplifier) \ -command {UpdateButtons buttons(frame)} menu $m.lock.crop $m.lock.crop add checkbutton -label [msgcat::mc {None}] \ -variable pbuttons(frame,lock,crop,none) \ -command {UpdateButtons buttons(frame)} $m.lock.crop add separator $m.lock.crop add checkbutton -label [msgcat::mc {WCS}] \ -variable pbuttons(frame,lock,crop,wcs) \ -command {UpdateButtons buttons(frame)} $m.lock.crop add separator $m.lock.crop add checkbutton -label [msgcat::mc {Image}] \ -variable pbuttons(frame,lock,crop,image) \ -command {UpdateButtons buttons(frame)} $m.lock.crop add checkbutton -label [msgcat::mc {Physical}] \ -variable pbuttons(frame,lock,crop,physical) \ -command {UpdateButtons buttons(frame)} $m.lock.crop add checkbutton -label [msgcat::mc {Detector}] \ -variable pbuttons(frame,lock,crop,detector) \ -command {UpdateButtons buttons(frame)} $m.lock.crop add checkbutton -label [msgcat::mc {Amplifier}] \ -variable pbuttons(frame,lock,crop,amplifier) \ -command {UpdateButtons buttons(frame)} menu $m.lock.cube $m.lock.cube add checkbutton -label [msgcat::mc {None}] \ -variable pbuttons(frame,lock,cube,none) \ -command {UpdateButtons buttons(frame)} $m.lock.cube add separator $m.lock.cube add checkbutton -label [msgcat::mc {WCS}] \ -variable pbuttons(frame,lock,cube,wcs) \ -command {UpdateButtons buttons(frame)} $m.lock.cube add separator $m.lock.cube add checkbutton -label [msgcat::mc {Image}] \ -variable pbuttons(frame,lock,cube,image) \ -command {UpdateButtons buttons(frame)} # move menu $m.move $m.move add checkbutton -label [msgcat::mc {First}] \ -variable pbuttons(frame,movefirst) \ -command {UpdateButtons buttons(frame)} $m.move add checkbutton -label [msgcat::mc {Back}] \ -variable pbuttons(frame,moveprev) \ -command {UpdateButtons buttons(frame)} $m.move add checkbutton -label [msgcat::mc {Forward}] \ -variable pbuttons(frame,movenext) \ -command {UpdateButtons buttons(frame)} $m.move add checkbutton -label [msgcat::mc {Last}] \ -variable pbuttons(frame,movelast) \ -command {UpdateButtons buttons(frame)} # params menu $m.params $m.params add checkbutton -label [msgcat::mc {Display Size}] \ -variable pbuttons(frame,size) -command {UpdateButtons buttons(frame)} } # Support proc UpdateFrameMenuStatic {} { global ds9 global debug if {$debug(tcl,update)} { puts stderr "UpdateFrameMenuStatic" } $ds9(mb).frame entryconfig [msgcat::mc {New Frame RGB}] -state normal $ds9(buttons).frame.newrgb configure -state normal if {$ds9(active,num) > 0} { $ds9(mb).frame entryconfig [msgcat::mc {Delete Frame}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Delete All Frames}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Clear Frame}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Reset Frame}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Refresh Frame}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Single Frame}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Tile Frames}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Blink Frames}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Match}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Lock}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Move Frame}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {First Frame}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Previous Frame}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Next Frame}] -state normal $ds9(mb).frame entryconfig [msgcat::mc {Last Frame}] -state normal $ds9(buttons).frame.delete configure -state normal $ds9(buttons).frame.deleteall configure -state normal $ds9(buttons).frame.clear configure -state normal $ds9(buttons).frame.reset configure -state normal $ds9(buttons).frame.refresh configure -state normal $ds9(buttons).frame.single configure -state normal $ds9(buttons).frame.tile configure -state normal $ds9(buttons).frame.blink configure -state normal $ds9(buttons).frame.movefirst configure -state normal $ds9(buttons).frame.moveprev configure -state normal $ds9(buttons).frame.movenext configure -state normal $ds9(buttons).frame.movelast configure -state normal $ds9(buttons).frame.first configure -state normal $ds9(buttons).frame.prev configure -state normal $ds9(buttons).frame.next configure -state normal $ds9(buttons).frame.last configure -state normal } else { $ds9(mb).frame entryconfig [msgcat::mc {Delete Frame}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Delete All Frames}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Clear Frame}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Reset Frame}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Refresh Frame}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Single Frame}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Tile Frames}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Blink Frames}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Match}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Lock}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Move Frame}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {First Frame}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Previous Frame}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Next Frame}] -state disabled $ds9(mb).frame entryconfig [msgcat::mc {Last Frame}] -state disabled $ds9(buttons).frame.delete configure -state disabled $ds9(buttons).frame.deleteall configure -state disabled $ds9(buttons).frame.clear configure -state disabled $ds9(buttons).frame.reset configure -state disabled $ds9(buttons).frame.refresh configure -state disabled $ds9(buttons).frame.single configure -state disabled $ds9(buttons).frame.tile configure -state disabled $ds9(buttons).frame.blink configure -state disabled $ds9(buttons).frame.movefirst configure -state disabled $ds9(buttons).frame.moveprev configure -state disabled $ds9(buttons).frame.movenext configure -state disabled $ds9(buttons).frame.movelast configure -state disabled $ds9(buttons).frame.first configure -state disabled $ds9(buttons).frame.prev configure -state disabled $ds9(buttons).frame.next configure -state disabled $ds9(buttons).frame.last configure -state disabled } } proc UpdateFrameMenu {} { global ds9 global current global debug if {$debug(tcl,update)} { puts stderr "UpdateFrameMenu" } if {$current(frame) != {}} { $ds9(mb).frame entryconfig "[msgcat::mc {Cube}]..." \ -state normal $ds9(buttons).frame.cube configure -state normal switch -- [$current(frame) get type] { base { $ds9(mb).frame entryconfig "[msgcat::mc {RGB}]..." \ -state disabled $ds9(mb).frame entryconfig "[msgcat::mc {3D}]..." \ -state normal $ds9(buttons).frame.rgb configure -state disabled $ds9(buttons).frame.3d configure -state normal } rgb { $ds9(mb).frame entryconfig "[msgcat::mc {RGB}]..." \ -state normal $ds9(mb).frame entryconfig "[msgcat::mc {3D}]..." \ -state disabled $ds9(buttons).frame.rgb configure -state normal $ds9(buttons).frame.3d configure -state disabled } 3d { $ds9(mb).frame entryconfig "[msgcat::mc {RGB}]..." \ -state disabled $ds9(mb).frame entryconfig "[msgcat::mc {3D}]..." \ -state normal $ds9(buttons).frame.rgb configure -state disabled $ds9(buttons).frame.3d configure -state normal } } } else { $ds9(mb).frame entryconfig "[msgcat::mc {Cube}]..." \ -state disabled $ds9(mb).frame entryconfig "[msgcat::mc {RGB}]..." \ -state disabled $ds9(mb).frame entryconfig "[msgcat::mc {3D}]..." \ -state disabled $ds9(buttons).frame.cube configure -state disabled $ds9(buttons).frame.rgb configure -state disabled $ds9(buttons).frame.3d configure -state disabled } } proc UpdateFrameMenuItems {} { global ds9 global debug if {$debug(tcl,update)} { puts stderr "UpdateFrameMenuItems" } # Goto Frame Menu if {[$ds9(mb).frame.goto index end] >= $ds9(menu,size,frame,goto)} { $ds9(mb).frame.goto delete $ds9(menu,size,frame,goto) end } set cnt $ds9(menu,size,frame,goto) foreach f $ds9(frames) { set which "[msgcat::mc {Frame}] [string range $f 5 end]" $ds9(mb).frame.goto add radiobutton -label $which \ -variable ds9(next) -value $f -command GotoFrame # wrap if needed incr cnt if {$cnt>=$ds9(menu,size,wrap)} { set cnt 1 $ds9(mb).frame.goto entryconfig $which -columnbreak 1 } } # Active Frame Menu if {[$ds9(mb).frame.active index end] >= $ds9(menu,size,frame,active)} { $ds9(mb).frame.active delete $ds9(menu,size,frame,active) end } set cnt $ds9(menu,size,frame,active) foreach f $ds9(frames) { set which "[msgcat::mc {Frame}] [string range $f 5 end]" $ds9(mb).frame.active add checkbutton -label $which \ -variable active($f) -command UpdateActiveFrames # wrap if needed incr cnt if {$cnt>=$ds9(menu,size,wrap)} { set cnt 1 $ds9(mb).frame.active entryconfig $which -columnbreak 1 } } } saods9/ds9/library/mhelp.tcl000644 000765 000000 00000012216 12705445647 016360 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Menu proc HelpMainMenu {} { global ds9 switch $ds9(wm) { x11 - win32 {} aqua { # window menu menu $ds9(mb).window $ds9(mb) add cascade -label [msgcat::mc {Window}] \ -menu $ds9(mb).window } } $ds9(mb) add cascade -label [msgcat::mc {Help}] -menu $ds9(mb).help menu $ds9(mb).help switch $ds9(wm) { x11 - win32 { $ds9(mb).help add command -label [msgcat::mc {Reference Manual}]\ -command HelpRef } aqua {} } $ds9(mb).help add command -label [msgcat::mc {User Manual}]\ -command HelpUser $ds9(mb).help add command -label [msgcat::mc {Mouse and Keyboard}] \ -command HelpKeyboard $ds9(mb).help add separator $ds9(mb).help add command -label [msgcat::mc {FAQ}] \ -command HelpFAQ $ds9(mb).help add command -label [msgcat::mc {New Features}] \ -command HelpNew $ds9(mb).help add command -label [msgcat::mc {Release Notes}] \ -command HelpRelease $ds9(mb).help add command -label [msgcat::mc {Help Desk}] \ -command HelpDesk $ds9(mb).help add separator $ds9(mb).help add command -label [msgcat::mc {Story of SAOImage DS9}] \ -command HelpStory $ds9(mb).help add command -label [msgcat::mc {Acknowledgment}] \ -command HelpAck switch $ds9(wm) { x11 - win32 { $ds9(mb).help add separator $ds9(mb).help add command \ -label "[msgcat::mc {About SAOImage DS9}]..." \ -command AboutBox } aqua {} } } proc PrefsDialogHelpMenu {w} { set f [ttk::labelframe $w.mhelp -text [msgcat::mc {Help}]] PrefsDialogButtonbarHelp $f.buttonbar grid $f.buttonbar -padx 2 -pady 2 -sticky w pack $f -side top -fill both -expand true } # Buttons proc ButtonsHelpDef {} { global pbuttons array set pbuttons { help,ref 1 help,user 1 help,keyboard 1 help,faq 0 help,new 0 help,release 1 help,desk 1 help,story 0 help,ack 1 help,about 1 } } proc CreateButtonsHelp {} { global buttons global ds9 ttk::frame $ds9(buttons).help ButtonButton $ds9(buttons).help.ref \ [string tolower [msgcat::mc {Reference}]] HelpRef ButtonButton $ds9(buttons).help.user \ [string tolower [msgcat::mc {User}]] HelpUser ButtonButton $ds9(buttons).help.keyboard \ [string tolower [msgcat::mc {Keyboard}]] HelpKeyboard ButtonButton $ds9(buttons).help.faq \ [string tolower [msgcat::mc {FAQ}]] HelpFAQ ButtonButton $ds9(buttons).help.new \ [string tolower [msgcat::mc {New Features}]] HelpNew ButtonButton $ds9(buttons).help.release \ [string tolower [msgcat::mc {Release}]] HelpRelease ButtonButton $ds9(buttons).help.desk \ [string tolower [msgcat::mc {Help Desk}]] HelpDesk ButtonButton $ds9(buttons).help.story \ [string tolower [msgcat::mc {Story}]] HelpStory ButtonButton $ds9(buttons).help.ack \ [string tolower [msgcat::mc {Acknowledgment}]] HelpAck ButtonButton $ds9(buttons).help.about \ [string tolower [msgcat::mc {About}]] AboutBox set buttons(help) " $ds9(buttons).help.ref pbuttons(help,ref) $ds9(buttons).help.user pbuttons(help,user) $ds9(buttons).help.keyboard pbuttons(help,keyboard) $ds9(buttons).help.faq pbuttons(help,faq) $ds9(buttons).help.new pbuttons(help,new) $ds9(buttons).help.release pbuttons(help,release) $ds9(buttons).help.desk pbuttons(help,desk) $ds9(buttons).help.story pbuttons(help,story) $ds9(buttons).help.ack pbuttons(help,ack) $ds9(buttons).help.about pbuttons(help,about) " } proc PrefsDialogButtonbarHelp {f} { global buttons global pbuttons ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu set m $f.menu menu $m $m add checkbutton -label [msgcat::mc {Reference Manual}]\ -variable pbuttons(help,ref) -command {UpdateButtons buttons(help)} $m add checkbutton -label [msgcat::mc {User Manual}]\ -variable pbuttons(help,user) -command {UpdateButtons buttons(help)} $m add checkbutton -label [msgcat::mc {Mouse and Keyboard}] \ -variable pbuttons(help,keyboard) -command {UpdateButtons buttons(help)} $m add separator $m add checkbutton -label [msgcat::mc {FAQ}] \ -variable pbuttons(help,faq) -command {UpdateButtons buttons(help)} $m add checkbutton -label [msgcat::mc {New Features}] \ -variable pbuttons(help,new) -command {UpdateButtons buttons(help)} $m add checkbutton -label [msgcat::mc {Release Notes}] \ -variable pbuttons(help,release) -command {UpdateButtons buttons(help)} $m add checkbutton -label [msgcat::mc {Help Desk}] \ -variable pbuttons(help,desk) -command {UpdateButtons buttons(help)} $m add separator $m add checkbutton -label [msgcat::mc {Story of SAOImage DS9}] \ -variable pbuttons(help,story) -command {UpdateButtons buttons(help)} $m add checkbutton -label [msgcat::mc {Acknowledgment}] \ -variable pbuttons(help,ack) -command {UpdateButtons buttons(help)} $m add separator $m add checkbutton -label "[msgcat::mc {About SAOImage DS9}]..." \ -variable pbuttons(help,about) -command {UpdateButtons buttons(help)} } saods9/ds9/library/mosaic.tcl000644 000765 000000 00000001436 12705445647 016530 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ProcessMosaicCmd {varname iname sock fn} { upvar $varname var upvar $iname i set vvar $var set ii $i switch -- [string tolower [lindex $var $i]] { iraf { incr ii ProcessMosaicIRAFCmd vvar ii $sock $fn } wfpc2 {} default {ProcessMosaicWCSCmd vvar ii $sock $fn} } } proc ProcessSendMosaicCmd {proc id param sock fn} { switch -- [string tolower [lindex $param 0]] { iraf {} wfpc2 {} wcs { set param [lindex $param 1 end] ProcessSendMosaicWCSCmd $proc $id $param $sock $fn } default {ProcessSendMosaicWCSCmd $proc $id $param $sock $fn} } } saods9/ds9/library/mosaicimage.tcl000644 000765 000000 00000001575 12705445647 017537 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ProcessMosaicImageCmd {varname iname sock fn} { upvar $varname var upvar $iname i set vvar $var set ii $i switch -- [string tolower [lindex $var $i]] { iraf { incr ii ProcessMosaicImageIRAFCmd vvar ii $sock $fn } wfpc2 { incr ii ProcessMosaicImageWFPC2Cmd vvar ii $sock $fn } default {ProcessMosaicImageWCSCmd vvar ii $sock $fn} } } proc ProcessSendMosaicImageCmd {proc id param sock fn} { switch -- [string tolower [lindex $param 0]] { iraf {} wfpc2 {} wcs { set param [lindex $param 1 end] ProcessSendMosaicImageWCSCmd $proc $id $param $sock $fn } default {ProcessSendMosaicImageWCSCmd $proc $id $param $sock $fn} } } saods9/ds9/library/mosaicimageiraf.tcl000644 000765 000000 00000003453 12705445647 020376 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadMosaicImageIRAFFile {fn layer} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {mosaic image iraf} set loadParam(load,type) mmapincr set loadParam(file,name) $fn set loadParam(load,layer) $layer ConvertFitsFile ProcessLoad } proc LoadMosaicImageIRAFAlloc {path fn layer} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {mosaic image iraf} set loadParam(load,type) allocgz set loadParam(file,name) $fn set loadParam(file,fn) $path set loadParam(load,layer) $layer ProcessLoad } proc LoadMosaicImageIRAFSocket {sock fn layer} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {mosaic image iraf} set loadParam(load,type) socketgz set loadParam(file,name) $fn set loadParam(socket,id) $sock set loadParam(load,layer) $layer return [ProcessLoad 0] } proc ProcessMosaicImageIRAFCmd {varname iname sock fn} { upvar $varname var upvar $iname i global loadParam global current set layer {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i set layer mask } slice { incr i # not supported } } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa if {![LoadMosaicImageIRAFSocket $sock $param $layer]} { InitError xpa LoadMosaicImageIRAFFile $param $layer } } else { # comm if {$fn != {}} { LoadMosaicImageIRAFAlloc $fn $param $layer } else { LoadMosaicImageIRAFFile $param $layer } } FinishLoad } saods9/ds9/library/mosaicimagewcs.tcl000644 000765 000000 00000005252 12705445647 020250 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadMosaicImageWCSFile {fn layer sys} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) [list mosaic image $sys] set loadParam(load,type) mmapincr set loadParam(file,name) $fn set loadParam(load,layer) $layer ConvertFitsFile ProcessLoad } proc LoadMosaicImageWCSAlloc {path fn layer sys} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) [list mosaic image $sys] set loadParam(load,type) allocgz set loadParam(file,name) $fn set loadParam(file,fn) $path set loadParam(load,layer) $layer ProcessLoad } proc LoadMosaicImageWCSSocket {sock fn layer sys} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) [list mosaic image $sys] set loadParam(load,type) socketgz set loadParam(file,name) $fn set loadParam(socket,id) $sock set loadParam(load,layer) $layer return [ProcessLoad 0] } proc SaveMosaicImageWCSFile {fn} { global current if {$fn == {} || $current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save fits mosaic image file "\{$fn\}" } proc SaveMosaicImageWCSSocket {sock} { global current if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save fits mosaic image socket $sock } proc ProcessMosaicImageWCSCmd {varname iname sock fn} { upvar $varname var upvar $iname i global loadParam global current set layer {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i set layer mask } slice { incr i # not supported } } if {[string range [lindex $var $i] 0 2] == {wcs}} { set opt [lindex $var $i] incr i } else { set opt wcs } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa if {![LoadMosaicImageWCSSocket $sock $param $layer $opt]} { InitError xpa LoadMosaicImageWCSFile $param $layer $opt } } else { # comm if {$fn != {}} { LoadMosaicImageWCSAlloc $fn $param $layer $opt } else { LoadMosaicImageWCSFile $param $layer $opt } } FinishLoad } proc ProcessSendMosaicImageWCSCmd {proc id param sock fn} { global current if {$current(frame) == {}} { return } if {$sock != {}} { # xpa SaveMosaicImageWCSSocket $sock } elseif {$fn != {}} { # comm SaveMosaicImageWCSFile $fn $proc $id {} $fn } } saods9/ds9/library/mosaicimagewfpc2.tcl000644 000765 000000 00000003473 12705445647 020500 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadMosaicImageWFPC2File {fn} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {mosaic image wfpc2} set loadParam(load,type) mmapincr set loadParam(file,name) $fn # mask not supported set loadParam(load,layer) {} ConvertFitsFile ProcessLoad } proc LoadMosaicImageWFPC2Alloc {path fn} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {mosaic image wfpc2} set loadParam(load,type) allocgz set loadParam(file,name) $fn set loadParam(file,fn) $path # mask not supported set loadParam(load,layer) {} ProcessLoad } proc LoadMosaicImageWFPC2Socket {sock fn} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {mosaic image wfpc2} set loadParam(load,type) socketgz set loadParam(file,name) $fn set loadParam(socket,id) $sock # mask not supported set loadParam(load,layer) {} return [ProcessLoad 0] } proc ProcessMosaicImageWFPC2Cmd {varname iname sock fn} { upvar $varname var upvar $iname i global loadParam global current switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i # not supported } slice { incr i # not supported } } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa if {![LoadMosaicImageWFPC2Socket $sock $param]} { InitError xpa LoadMosaicImageWFPC2File $param } } else { # comm if {$fn != {}} { LoadMosaicImageWFPC2Alloc $fn $param } else { LoadMosaicImageWFPC2File $param } } FinishLoad } saods9/ds9/library/mosaiciraf.tcl000644 000765 000000 00000003361 12705445647 017371 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadMosaicIRAFFile {fn layer} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {mosaic iraf} set loadParam(load,type) mmapincr set loadParam(file,name) $fn set loadParam(load,layer) $layer ConvertFitsFile ProcessLoad } proc LoadMosaicIRAFAlloc {path fn layer} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {mosaic iraf} set loadParam(load,type) allocgz set loadParam(file,name) $fn set loadParam(file,fn) $path set loadParam(load,layer) $layer ProcessLoad } proc LoadMosaicIRAFSocket {sock fn layer} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {mosaic iraf} set loadParam(load,type) socketgz set loadParam(file,name) $fn set loadParam(socket,id) $sock set loadParam(load,layer) $layer return [ProcessLoad 0] } proc ProcessMosaicIRAFCmd {varname iname sock fn} { upvar $varname var upvar $iname i global loadParam global current set layer {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i set layer mask } slice { incr i # not supported } } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa if {![LoadMosaicIRAFSocket $sock $param $layer]} { InitError xpa LoadMosaicIRAFFile $param $layer } } else { # comm if {$fn != {}} { LoadMosaicIRAFAlloc $fn $param $layer } else { LoadMosaicIRAFFile $param $layer } } FinishLoad } saods9/ds9/library/mosaicwcs.tcl000644 000765 000000 00000005324 12705445647 017245 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadMosaicWCSFile {fn layer sys} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) [list mosaic $sys] set loadParam(load,type) mmapincr set loadParam(file,name) $fn set loadParam(load,layer) $layer ConvertFitsFile ProcessLoad } proc LoadMosaicWCSAlloc {path fn layer sys} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) [list mosaic $sys] set loadParam(load,type) allocgz set loadParam(file,name) $fn set loadParam(file,fn) $path set loadParam(load,layer) $layer ProcessLoad } proc LoadMosaicWCSSocket {sock fn layer sys} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) [list mosaic $sys] set loadParam(load,type) socketgz set loadParam(file,name) $fn set loadParam(socket,id) $sock set loadParam(load,layer) $layer return [ProcessLoad 0] } proc SaveMosaicWCSFile {fn opt} { global current if {$fn == {} || $current(frame) == {}} { return } if {![$current(frame) has fits]} { return } if {$opt == {}} { set opt 1 } $current(frame) save fits mosaic file "\{$fn\}" $opt } proc SaveMosaicWCSSocket {sock opt} { global current if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } if {$opt == {}} { set opt 1 } $current(frame) save fits mosaic socket $sock $opt } proc ProcessMosaicWCSCmd {varname iname sock fn} { upvar $varname var upvar $iname i global loadParam global current set layer {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i set layer mask } slice { incr i # not supported } } if {[string range [lindex $var $i] 0 2] == {wcs}} { set opt [lindex $var $i] incr i } else { set opt wcs } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa if {![LoadMosaicWCSSocket $sock $param $layer $opt]} { InitError xpa LoadMosaicWCSFile $param $layer $opt } } else { # comm if {$fn != {}} { LoadMosaicWCSAlloc $fn $param $layer $opt } else { LoadMosaicWCSFile $param $layer $opt } } FinishLoad } proc ProcessSendMosaicWCSCmd {proc id param sock fn} { global current if {$current(frame) == {}} { return } set opt [lindex $param 0] if {$sock != {}} { # xpa SaveMosaicWCSSocket $sock $opt } elseif {$fn != {}} { # comm SaveMosaicWCSFile $fn $opt $proc $id {} $fn } } saods9/ds9/library/movie.tcl000644 000765 000000 00000027704 12705445647 016402 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc MovieDef {} { global imovie global movie global tcl_platform set imovie(top) .moviestatus set imovie(mb) .moviestatusmb set movie(action) slice # must be >=5, or sometimes will generate bad data set movie(quality) 5 set movie(num) 24 set movie(az,from) 45 set movie(az,to) -45 set movie(el,from) 30 set movie(el,to) 30 set movie(sl,from) 1 set movie(sl,to) 1 set movie(repeat) oscillate set movie(repeat,num) 0 set movie(status) 0 set movie(abort) 0 set aa [msgcat::mc {An error has occurred while creating the image. Please be sure that the entire image window is visible on the screen.}] set bb [msgcat::mc {An error has occurred while creating the image. Please be sure that the ds9 window is in the upper left corner of the default screen and the entire window is visible.}] switch $tcl_platform(os) { Darwin { switch [lindex [split $tcl_platform(osVersion) {.}] 0] { 10 - 11 {set movie(error) $bb} 8 - 9 - default {set movie(error) $aa} } } default {set movie(error) $aa} } } proc MovieDialog {} { global movie global mpegfbox global ed global current set w {.movie} set ed(ok) 0 set ed(action) $movie(action) DialogCreate $w [msgcat::mc {Create Movie}] ed(ok) # Param set f [ttk::frame $w.param] ttk::label $f.title -text [msgcat::mc {Format}] ttk::radiobutton $f.slice -text {Slice Movie} \ -variable ed(action) -value slice ttk::radiobutton $f.frame -text {Frames Movie} \ -variable ed(action) -value frame ttk::radiobutton $f.3d -text {3D Movie} \ -variable ed(action) -value 3d grid $f.slice -padx 2 -pady 2 -sticky w grid $f.frame -padx 2 -pady 2 -sticky w grid $f.3d -padx 2 -pady 2 -sticky w switch [$current(frame) get type] { base - rgb {$f.3d configure -state disabled} 3d {$f.3d configure -state normal} } # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w if {$ed(ok)} { set movie(action) $ed(action) set fn [SaveFileDialog mpegfbox] if {$fn != {}} { set ok 1 switch $movie(action) { slice - frame {} 3d {set ok [Movie3dDialog]} } if {$ok} { Movie $fn } } } set rr $ed(ok) unset ed return $rr } proc Movie {fn} { global ds9 global movie global current global saveimage if {$fn == {} || ![$current(frame) has fits]} { return } switch $ds9(wm) { x11 {} aqua - win32 { Error $saveimage(error) return } } # besure we are on top raise $ds9(top) # we need single mode if {$ds9(display) != {single}} { set modesav $ds9(display) set current(display) single DisplayMode } switch $movie(action) { slice {MovieSlice $fn} frame {MovieFrame $fn} 3d {Movie3d $fn} } if {[info exists modesav]} { set current(display) $modesav DisplayMode } } proc MovieSlice {fn} { global current global movie global cube set depth [$current(frame) get fits depth $cube(axis)] set slice [$current(frame) get fits slice $cube(axis)] if {$cube(axis)==2} { set ss [$current(frame) get crop 3d image] set from [lindex $ss 0] set to [lindex $ss 1] } else { set from 1 set to [$current(frame) get fits depth $cube(axis)] } # loop thru cube set movie(first) 1 for {set ii $from} {$ii <= $to} {incr ii} { $current(frame) update fits slice $cube(axis) $ii if {[MoviePhoto $fn]} { break } } mpeg close # reset current slice $current(frame) update fits slice $cube(axis) $slice } proc MovieFrame {fn} { global ds9 global current global movie # loop thru all active frames set movie(first) 1 set framesav $current(frame) foreach ff $ds9(active) { set ds9(next) $ff GotoFrame if {[MoviePhoto $fn]} { break } } mpeg close set ds9(next) $framesav GotoFrame } proc Movie3d {fn} { global movie global current global cube set slice [$current(frame) get fits slice $cube(axis)] set vp [$current(frame) get 3d view] set azincr [expr 1.*($movie(az,to)-$movie(az,from))/$movie(num)] set elincr [expr 1.*($movie(el,to)-$movie(el,from))/$movie(num)] set slincr [expr 1.*($movie(sl,to)-$movie(sl,from))/$movie(num)] # loop over az/el/slice set movie(status) 0 set movie(abort) 0 set movie(first) 1 set az $movie(az,from) set el $movie(el,from) set sl $movie(sl,from) for {set rr 0} {$rr<=$movie(repeat,num)} {incr rr} { for {set nn 0} {$nn<=$movie(num)} {incr nn} { MovieStatusDialog if {$movie(abort)} { break } set movie(status) [expr 1.*$nn/$movie(num)*100] update idletasks $current(frame) 3d view $az $el $current(frame) update fits slice $cube(axis) [expr int($sl)] if {[MoviePhoto $fn]} { break } set az [expr $az+$azincr] set el [expr $el+$elincr] set sl [expr $sl+$slincr] } switch $movie(repeat) { repeat { set az $movie(az,from) set el $movie(el,from) set sl $movie(sl,from) } oscillate { set azincr [expr -$azincr] set elincr [expr -$elincr] set slincr [expr -$slincr] } } } mpeg close MovieStatusDestroyDialog # reset $current(frame) 3d view $vp $current(frame) update fits slice $cube(axis) $slice Update3DDialog UpdateCubeDialog } # Support proc MoviePhoto {fn} { global ds9 global movie global current # yes, we need this UpdateDS9 RealizeDS9 1 set rr [catch {image create photo -format window -data $ds9(canvas)} ph] if {$rr} { Error $movie(error) return $rr } if {$movie(first)} { set w [image width $ph] set h [image height $ph] mpeg create "$fn" $w $h 25 1 $movie(quality) set movie(first) 0 } mpeg add $ph image delete $ph return 0 } proc Movie3dDialog {} { global movie global ed2 global current global cube set w {.movie3d} set ed2(ok) 0 set ed2(num) $movie(num) set ed2(az,from) $movie(az,from) set ed2(az,to) $movie(az,to) set ed2(el,from) $movie(el,from) set ed2(el,to) $movie(el,to) set ed2(sl,from) [$current(frame) get fits slice $cube(axis)] set ed2(sl,to) $ed2(sl,from) set ed2(repeat) $movie(repeat) set ed2(repeat,num) $movie(repeat,num) DialogCreate $w [msgcat::mc {Save 3D Movie}] ed2(ok) # Param set f [ttk::frame $w.param] ttk::label $f.tnum -text [msgcat::mc {Number}] ttk::entry $f.num -textvariable ed2(num) -width 7 ttk::label $f.tframes -text [msgcat::mc {Frames}] ttk::label $f.taz -text [msgcat::mc {Azimuth}] ttk::label $f.tazfrom -text [msgcat::mc {From}] ttk::entry $f.azfrom -textvariable ed2(az,from) -width 7 ttk::label $f.tazto -text [msgcat::mc {To}] ttk::entry $f.azto -textvariable ed2(az,to) -width 7 ttk::label $f.tel -text [msgcat::mc {Elevation}] ttk::label $f.telfrom -text [msgcat::mc {From}] ttk::entry $f.elfrom -textvariable ed2(el,from) -width 7 ttk::label $f.telto -text [msgcat::mc {To}] ttk::entry $f.elto -textvariable ed2(el,to) -width 7 ttk::label $f.tsl -text [msgcat::mc {Slice}] ttk::label $f.tslfrom -text [msgcat::mc {From}] ttk::entry $f.slfrom -textvariable ed2(sl,from) -width 7 ttk::label $f.tslto -text [msgcat::mc {To}] ttk::entry $f.slto -textvariable ed2(sl,to) -width 7 ttk::radiobutton $f.repeat -text [msgcat::mc {Repeat}] \ -variable ed2(repeat) -value repeat ttk::radiobutton $f.oscillate -text [msgcat::mc {Oscillate}] \ -variable ed2(repeat) -value oscillate ttk::entry $f.repeatnum -textvariable ed2(repeat,num) -width 7 ttk::label $f.ttimes -text [msgcat::mc {Times}] grid $f.tnum x $f.num $f.tframes -padx 2 -pady 2 -sticky w grid $f.taz $f.tazfrom $f.azfrom $f.tazto $f.azto -padx 2 -pady 2 -sticky w grid $f.tel $f.telfrom $f.elfrom $f.telto $f.elto -padx 2 -pady 2 -sticky w grid $f.tsl $f.tslfrom $f.slfrom $f.tslto $f.slto -padx 2 -pady 2 -sticky w grid $f.oscillate x $f.repeatnum $f.ttimes -padx 2 -pady 2 -sticky w grid $f.repeat -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed2(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed2(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed2(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed2(ok) DialogDismiss $w if {$ed2(ok)} { set movie(num) $ed2(num) set movie(az,from) $ed2(az,from) set movie(az,to) $ed2(az,to) set movie(el,from) $ed2(el,from) set movie(el,to) $ed2(el,to) set movie(sl,from) $ed2(sl,from) set movie(sl,to) $ed2(sl,to) set movie(repeat) $ed2(repeat) set movie(repeat,num) $ed2(repeat,num) } set rr $ed2(ok) unset ed2 return $rr } proc MovieStatusDialog {} { global imovie global movie # see if we already have a window visible if {[winfo exists $imovie(top)]} { raise $imovie(top) return } # create the 3d window set w $imovie(top) set mb $imovie(mb) Toplevel $w $mb 6 [msgcat::mc {Movie}] MovieStatusDestroyDialog raise $imovie(top) # Status set f [ttk::frame $w.param] ttk::label $f.tstatus -text [msgcat::mc {Status}] ttk::progressbar $f.status -variable movie(status) -length 350 grid $f.tstatus $f.status -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.abort -text [msgcat::mc {Abort}] \ -command MovieStatusAbortDialog pack $f.abort -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill x } proc MovieStatusDestroyDialog {} { global movie global imovie if {[winfo exists $imovie(top)]} { destroy $imovie(top) destroy $imovie(mb) } } proc MovieStatusAbortDialog {} { global movie set movie(abort) 1 } # Process Cmds proc ProcessMovieCmd {varname iname} { upvar $varname var upvar $iname i global movie # we need to be realized # already implemented # ProcessRealizeDS9 set item [string tolower [lindex $var $i]] switch -- $item { slice - frame - 3d { set movie(action) $item incr i } default { # backward compatibility set movie(action) frame } } set fn [lindex $var $i] set go 1 while {$go} { incr i set item [string tolower [lindex $var $i]] switch -- $item { number { incr i set movie(num) [lindex $var $i] } azfrom { incr i set movie(az,from) [lindex $var $i] } azto { incr i set movie(az,to) [lindex $var $i] } elfrom { incr i set movie(el,from) [lindex $var $i] } elto { incr i set movie(el,to) [lindex $var $i] } slfrom { incr i set movie(sl,from) [lindex $var $i] } slto { incr i set movie(sl,to) [lindex $var $i] } oscillate { incr i set movie(repeat) oscillate set movie(repeat,num) [lindex $var $i] } repeat { incr i set movie(repeat) repeat set movie(repeat,num) [lindex $var $i] } default { incr i -1 set go 0 } } } Movie $fn } saods9/ds9/library/mregion.tcl000644 000765 000000 00000127623 12705445647 016724 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Menus proc RegionMainMenu {} { global ds9 global marker menu $ds9(mb).region $ds9(mb).region add command -label "[msgcat::mc {Get Information}]..." \ -command MarkerInfo $ds9(mb).region add separator $ds9(mb).region add cascade -label [msgcat::mc {Shape}] \ -menu $ds9(mb).region.shape $ds9(mb).region add cascade -label [msgcat::mc {Composite Region}] \ -menu $ds9(mb).region.composite $ds9(mb).region add cascade -label [msgcat::mc {Instrument FOV}] \ -menu $ds9(mb).region.fov $ds9(mb).region add cascade -label [msgcat::mc {Template}] \ -menu $ds9(mb).region.template $ds9(mb).region add separator $ds9(mb).region add cascade -label [msgcat::mc {Color}] \ -menu $ds9(mb).region.color $ds9(mb).region add cascade -label [msgcat::mc {Width}] \ -menu $ds9(mb).region.width $ds9(mb).region add cascade -label [msgcat::mc {Properties}] \ -menu $ds9(mb).region.properties $ds9(mb).region add cascade -label [msgcat::mc {Font}] \ -menu $ds9(mb).region.font $ds9(mb).region add separator $ds9(mb).region add command -label [msgcat::mc {Centroid}] \ -command MarkerCentroid $ds9(mb).region add command -label [msgcat::mc {Move to Front}] \ -command MarkerFront $ds9(mb).region add command -label [msgcat::mc {Move to Back}] \ -command MarkerBack $ds9(mb).region add separator $ds9(mb).region add command -label [msgcat::mc {Select All}] \ -command MarkerSelectAll -accelerator "${ds9(ctrl)}A" $ds9(mb).region add command -label [msgcat::mc {Select None}] \ -command MarkerUnselectAll $ds9(mb).region add command -label [msgcat::mc {Invert Selection}] \ -command MarkerSelectInvert $ds9(mb).region add separator $ds9(mb).region add command -label [msgcat::mc {Delete Selected Regions}] \ -command MarkerDeleteSelect $ds9(mb).region add command -label [msgcat::mc {Delete All Regions}] \ -command MarkerDeleteAllMenu $ds9(mb).region add separator $ds9(mb).region add command -label [msgcat::mc {New Group}] \ -command GroupCreate $ds9(mb).region add command -label "[msgcat::mc {Groups}]..." \ -command GroupDialog $ds9(mb).region add separator $ds9(mb).region add command -label "[msgcat::mc {List Regions}]..." \ -command MarkerList $ds9(mb).region add command -label "[msgcat::mc {Load Regions}]..." \ -command MarkerLoad $ds9(mb).region add command -label "[msgcat::mc {Save Regions}]..." \ -command MarkerSave $ds9(mb).region add separator $ds9(mb).region add cascade -label [msgcat::mc {Region Parameters}] \ -menu $ds9(mb).region.params menu $ds9(mb).region.shape $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Circle}] \ -variable marker(shape) -value circle $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Ellipse}] \ -variable marker(shape) -value ellipse $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Box}] \ -variable marker(shape) -value box $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Polygon}] \ -variable marker(shape) -value polygon $ds9(mb).region.shape add separator $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Line}] \ -variable marker(shape) -value line $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Vector}] \ -variable marker(shape) -value vector $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Projection}] \ -variable marker(shape) -value projection $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Segment}] \ -variable marker(shape) -value segment $ds9(mb).region.shape add separator $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Text}] \ -variable marker(shape) -value text $ds9(mb).region.shape add cascade -label [msgcat::mc {Point}] \ -menu $ds9(mb).region.shape.point $ds9(mb).region.shape add separator $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Ruler}] \ -variable marker(shape) -value ruler $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Compass}] \ -variable marker(shape) -value compass $ds9(mb).region.shape add separator $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Annulus}] \ -variable marker(shape) -value annulus $ds9(mb).region.shape add radiobutton \ -label [msgcat::mc {Elliptical Annulus}] \ -variable marker(shape) -value ellipseannulus $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Box Annulus}] \ -variable marker(shape) -value boxannulus $ds9(mb).region.shape add separator $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Panda}] \ -variable marker(shape) -value panda $ds9(mb).region.shape add radiobutton \ -label [msgcat::mc {Elliptical Panda}]\ -variable marker(shape) -value epanda $ds9(mb).region.shape add radiobutton -label [msgcat::mc {Box Panda}] \ -variable marker(shape) -value bpanda menu $ds9(mb).region.shape.point $ds9(mb).region.shape.point add radiobutton -label [msgcat::mc {Circle}] \ -variable marker(shape) -value {circle point} $ds9(mb).region.shape.point add radiobutton -label [msgcat::mc {Box}] \ -variable marker(shape) -value {box point} $ds9(mb).region.shape.point add radiobutton -label [msgcat::mc {Diamond}] \ -variable marker(shape) -value {diamond point} $ds9(mb).region.shape.point add radiobutton -label [msgcat::mc {Cross}] \ -variable marker(shape) -value {cross point} $ds9(mb).region.shape.point add radiobutton -label [msgcat::mc {X}] \ -variable marker(shape) -value {x point} $ds9(mb).region.shape.point add radiobutton -label [msgcat::mc {Arrow}] \ -variable marker(shape) -value {arrow point} $ds9(mb).region.shape.point add radiobutton -label [msgcat::mc {BoxCircle}]\ -variable marker(shape) -value {boxcircle point} menu $ds9(mb).region.composite $ds9(mb).region.composite add command -label [msgcat::mc {Create}] \ -command CompositeCreate $ds9(mb).region.composite add command -label [msgcat::mc {Dissolve}] \ -command CompositeDelete CreateFOVMenu menu $ds9(mb).region.template $ds9(mb).region.template add command -label "[msgcat::mc {Load}]..." \ -command OpenTemplateMarker $ds9(mb).region.template add command -label "[msgcat::mc {Save}]..." \ -command SaveAsTemplateMarker ColorMenu $ds9(mb).region.color marker color MarkerColor WidthDashMenu $ds9(mb).region.width marker width dash \ MarkerWidth [list MarkerProp dash] menu $ds9(mb).region.properties $ds9(mb).region.properties add checkbutton \ -label [msgcat::mc {Fixed in Size}] \ -variable marker(fixed) -command {MarkerProp fixed} $ds9(mb).region.properties add separator $ds9(mb).region.properties add checkbutton \ -label [msgcat::mc {Can Edit}] \ -variable marker(edit) -command {MarkerProp edit} $ds9(mb).region.properties add checkbutton \ -label [msgcat::mc {Can Move}] \ -variable marker(move) -command {MarkerProp move} $ds9(mb).region.properties add checkbutton \ -label [msgcat::mc {Can Rotate}] \ -variable marker(rotate) -command {MarkerProp rotate} $ds9(mb).region.properties add checkbutton \ -label [msgcat::mc {Can Delete}] \ -variable marker(delete) -command {MarkerProp delete} $ds9(mb).region.properties add separator $ds9(mb).region.properties add radiobutton \ -label [msgcat::mc {Include}] \ -variable marker(include) -value 1 -command {MarkerProp include} $ds9(mb).region.properties add radiobutton \ -label [msgcat::mc {Exclude}] \ -variable marker(include) -value 0 -command {MarkerProp include} $ds9(mb).region.properties add separator $ds9(mb).region.properties add radiobutton \ -label [msgcat::mc {Source}] \ -variable marker(source) -value 1 -command {MarkerProp source} $ds9(mb).region.properties add radiobutton \ -label [msgcat::mc {Background}] \ -variable marker(source) -value 0 -command {MarkerProp source} FontMenu $ds9(mb).region.font marker font font,size font,weight \ font,slant MarkerFont menu $ds9(mb).region.params $ds9(mb).region.params add checkbutton \ -label [msgcat::mc {Show}] \ -variable marker(show) -command MarkerShow $ds9(mb).region.params add checkbutton \ -label [msgcat::mc {Show Text}] \ -variable marker(show,text) -command MarkerShowText $ds9(mb).region.params add separator $ds9(mb).region.params add checkbutton \ -label [msgcat::mc {Auto Plot 2D}] -variable marker(plot2d) $ds9(mb).region.params add checkbutton \ -label [msgcat::mc {Auto Plot 3D}] -variable marker(plot3d) $ds9(mb).region.params add checkbutton \ -label [msgcat::mc {Auto Plot Statistics}] -variable marker(stats) $ds9(mb).region.params add separator $ds9(mb).region.params add checkbutton \ -label [msgcat::mc {Auto Centroid}] \ -variable marker(centroid,auto) -command MarkerCentroidAuto $ds9(mb).region.params add command \ -label "[msgcat::mc {Centroid Parameters}]..." \ -command CentroidDialog # Bindings bind $ds9(top) <> MarkerSelectAll } proc PrefsDialogRegionMenu {w} { set f [ttk::labelframe $w.mregion -text [msgcat::mc {Region}]] ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu PrefsDialogButtonbarRegion $f.buttonbar grid $f.menu $f.buttonbar -padx 2 -pady 2 -sticky w set m $f.menu.menu menu $m $m add cascade -label [msgcat::mc {Shape}] -menu $m.shape $m add separator $m add cascade -label [msgcat::mc {Color}] -menu $m.color $m add cascade -label [msgcat::mc {Width}] -menu $m.width $m add cascade -label [msgcat::mc {Properties}] -menu $m.properties $m add cascade -label [msgcat::mc {Font}] -menu $m.font $m add separator $m add cascade -label [msgcat::mc {Region Parameters}] -menu $m.params menu $m.shape $m.shape add radiobutton -label [msgcat::mc {Circle}] \ -variable pmarker(shape) -value circle $m.shape add radiobutton -label [msgcat::mc {Ellipse}] \ -variable pmarker(shape) -value ellipse $m.shape add radiobutton -label [msgcat::mc {Box}] \ -variable pmarker(shape) -value box $m.shape add radiobutton -label [msgcat::mc {Polygon}] \ -variable pmarker(shape) -value polygon $m.shape add separator $m.shape add radiobutton -label [msgcat::mc {Line}] \ -variable pmarker(shape) -value line $m.shape add radiobutton -label [msgcat::mc {Vector}] \ -variable pmarker(shape) -value vector $m.shape add radiobutton -label [msgcat::mc {Projection}] \ -variable pmarker(shape) -value projection $m.shape add radiobutton -label [msgcat::mc {Segment}] \ -variable pmarker(shape) -value segment $m.shape add separator $m.shape add radiobutton -label [msgcat::mc {Text}] \ -variable pmarker(shape) -value text $m.shape add cascade -label [msgcat::mc {Point}] \ -menu $m.shape.point $m.shape add separator $m.shape add radiobutton -label [msgcat::mc {Ruler}] \ -variable pmarker(shape) -value ruler $m.shape add radiobutton -label [msgcat::mc {Compass}] \ -variable pmarker(shape) -value compass $m.shape add separator $m.shape add radiobutton -label [msgcat::mc {Annulus}] \ -variable pmarker(shape) -value annulus $m.shape add radiobutton -label [msgcat::mc {Elliptical Annulus}] \ -variable pmarker(shape) -value ellipseannulus $m.shape add radiobutton -label [msgcat::mc {Box Annulus}] \ -variable pmarker(shape) -value boxannulus $m.shape add separator $m.shape add radiobutton -label [msgcat::mc {Panda}] \ -variable pmarker(shape) -value panda $m.shape add radiobutton -label [msgcat::mc {Elliptical Panda}] \ -variable pmarker(shape) -value epanda $m.shape add radiobutton -label [msgcat::mc {Box Panda}] \ -variable pmarker(shape) -value bpanda menu $m.shape.point $m.shape.point add radiobutton -label [msgcat::mc {Circle}] \ -variable pmarker(shape) -value {circle point} $m.shape.point add radiobutton -label [msgcat::mc {Box}] \ -variable pmarker(shape) -value {box point} $m.shape.point add radiobutton -label [msgcat::mc {Diamond}] \ -variable pmarker(shape) -value {diamond point} $m.shape.point add radiobutton -label [msgcat::mc {Cross}] \ -variable pmarker(shape) -value {cross point} $m.shape.point add radiobutton -label [msgcat::mc {X}] \ -variable pmarker(shape) -value {x point} $m.shape.point add radiobutton -label [msgcat::mc {Arrow}] \ -variable pmarker(shape) -value {arrow point} $m.shape.point add radiobutton -label [msgcat::mc {BoxCircle}]\ -variable pmarker(shape) -value {boxcircle point} ColorMenu $m.color pmarker color {} WidthDashMenu $m.width pmarker width dash {} {} menu $m.properties $m.properties add checkbutton -label [msgcat::mc {Fixed in Size}] \ -variable pmarker(fixed) $m.properties add separator $m.properties add checkbutton -label [msgcat::mc {Can Edit}] \ -variable pmarker(edit) $m.properties add checkbutton -label [msgcat::mc {Can Move}] \ -variable pmarker(move) $m.properties add checkbutton -label [msgcat::mc {Can Rotate}] \ -variable pmarker(rotate) $m.properties add checkbutton -label [msgcat::mc {Can Delete}] \ -variable pmarker(delete) $m.properties add separator $m.properties add radiobutton -label [msgcat::mc {Include}] \ -variable pmarker(include) -value 1 $m.properties add radiobutton -label [msgcat::mc {Exclude}] \ -variable pmarker(include) -value 0 $m.properties add separator $m.properties add radiobutton -label [msgcat::mc {Source}] \ -variable pmarker(source) -value 1 $m.properties add radiobutton -label [msgcat::mc {Background}] \ -variable pmarker(source) -value 0 FontMenu $m.font pmarker font font,size font,weight font,slant {} menu $m.params $m.params add checkbutton -label [msgcat::mc {Show}] \ -variable pmarker(show) $m.params add checkbutton -label [msgcat::mc {Show Text}] \ -variable pmarker(show,text) $m.params add separator $m.params add checkbutton -label [msgcat::mc {Auto Centroid}] \ -variable pmarker(centroid,auto) pack $f -side top -fill both -expand true } proc PrefsDialogRegion {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Region}] lappend dprefs(tabs) [ttk::frame $w.region] # Format set f [ttk::labelframe $w.region.format -text [msgcat::mc {Default Format}]] ttk::menubutton $f.format -textvariable pmarker(format) \ -menu $f.format.menu grid $f.format -padx 2 -pady 2 -sticky w menu $f.format.menu $f.format.menu add radiobutton -label {DS9/Funtools} \ -variable pmarker(format) -value ds9 $f.format.menu add radiobutton -label {XML} \ -variable pmarker(format) -value xml $f.format.menu add radiobutton -label {CIAO} \ -variable pmarker(format) -value ciao $f.format.menu add radiobutton -label {SAOtng} \ -variable pmarker(format) -value saotng $f.format.menu add radiobutton -label {SAOimage} \ -variable pmarker(format) -value saoimage $f.format.menu add radiobutton -label {IRAF PROS} \ -variable pmarker(format) -value pros $f.format.menu add radiobutton -label {X Y} \ -variable pmarker(format) -value xy # Length set f [ttk::labelframe $w.region.dformat \ -text [msgcat::mc {Default Length}]] ttk::menubutton $f.dformat -textvariable pmarker(dformat) \ -menu $f.dformat.menu grid $f.dformat -padx 2 -pady 2 -sticky w menu $f.dformat.menu $f.dformat.menu add radiobutton -label {Degrees} \ -variable pmarker(dformat) -value degrees $f.dformat.menu add radiobutton -label {ArcMin} \ -variable pmarker(dformat) -value arcmin $f.dformat.menu add radiobutton -label {ArcSec} \ -variable pmarker(dformat) -value arcsec # Epsilon set f [ttk::labelframe $w.region.epsilon \ -text [msgcat::mc {Mouse Click Epsilon}]] ttk::label $f.title -text [msgcat::mc {Pixels}] ttk::menubutton $f.epsilon -textvariable pmarker(epsilon) \ -menu $f.epsilon.menu grid $f.title $f.epsilon -padx 2 -pady 2 -sticky w menu $f.epsilon.menu $f.epsilon.menu add radiobutton -label {2} -variable pmarker(epsilon) \ -value 2 -command MarkerEpsilon $f.epsilon.menu add radiobutton -label {3} -variable pmarker(epsilon) \ -value 3 -command MarkerEpsilon $f.epsilon.menu add radiobutton -label {4} -variable pmarker(epsilon) \ -value 4 -command MarkerEpsilon $f.epsilon.menu add radiobutton -label {5} -variable pmarker(epsilon) \ -value 5 -command MarkerEpsilon $f.epsilon.menu add radiobutton -label {6} -variable pmarker(epsilon) \ -value 6 -command MarkerEpsilon $f.epsilon.menu add radiobutton -label {8} -variable pmarker(epsilon) \ -value 8 -command MarkerEpsilon $f.epsilon.menu add radiobutton -label {10} -variable pmarker(epsilon) \ -value 10 -command MarkerEpsilon grid $f.title $f.epsilon -padx 2 -pady 2 -sticky w # Centroid set f [ttk::labelframe $w.region.centroid -text [msgcat::mc {Centroid}]] ttk::label $f.ititle -text [msgcat::mc {Iteration}] ttk::entry $f.iteration -textvariable pmarker(centroid,iteration) -width 10 ttk::label $f.rtitle -text [msgcat::mc {Radius}] ttk::entry $f.radius -textvariable pmarker(centroid,radius) -width 10 grid $f.ititle $f.iteration $f.rtitle $f.radius -padx 2 -pady 2 -sticky w # Plots set f [ttk::labelframe $w.region.plot -text [msgcat::mc {Auto Plot}]] ttk::checkbutton $f.2d -text [msgcat::mc {2D}] -variable pmarker(plot2d) ttk::checkbutton $f.3d -text [msgcat::mc {3D}] -variable pmarker(plot3d) ttk::checkbutton $f.stats -text [msgcat::mc {Statistics}] \ -variable pmarker(stats) grid $f.2d $f.3d -padx 2 -pady 2 -sticky w grid $f.stats -padx 2 -pady 2 -sticky w # Circle set f [ttk::labelframe $w.region.circle -text [msgcat::mc {Circle}]] ttk::label $f.title -text [msgcat::mc {Radius}] ttk::entry $f.radius -textvariable pmarker(circle,radius) -width 10 ttk::label $f.unit -text [msgcat::mc {Image}] grid $f.title $f.radius $f.unit -padx 2 -pady 2 -sticky w # Ellipse set f [ttk::labelframe $w.region.ellipse -text [msgcat::mc {Ellipse}]] ttk::label $f.title -text "Radius 1" ttk::entry $f.radius1 -textvariable pmarker(ellipse,radius1) -width 10 ttk::label $f.unit -text [msgcat::mc {Image}] ttk::label $f.title2 -text "Radius 2" ttk::entry $f.radius2 -textvariable pmarker(ellipse,radius2) -width 10 ttk::label $f.unit2 -text [msgcat::mc {Image}] grid $f.title $f.radius1 $f.unit -padx 2 -pady 2 -sticky w grid $f.title2 $f.radius2 $f.unit2 -padx 2 -pady 2 -sticky w # Box set f [ttk::labelframe $w.region.box -text [msgcat::mc {Box}]] ttk::label $f.title -text "Size 1" ttk::entry $f.radius1 -textvariable pmarker(box,radius1) -width 10 ttk::label $f.unit -text [msgcat::mc {Image}] ttk::label $f.title2 -text "Size 2" ttk::entry $f.radius2 -textvariable pmarker(box,radius2) -width 10 ttk::label $f.unit2 -text [msgcat::mc {Image}] grid $f.title $f.radius1 $f.unit -padx 2 -pady 2 -sticky w grid $f.title2 $f.radius2 $f.unit2 -padx 2 -pady 2 -sticky w # Projection set f [ttk::labelframe $w.region.projection -text [msgcat::mc {Projection}]] ttk::label $f.title -text [msgcat::mc {Thickness}] ttk::entry $f.thick -textvariable pmarker(projection,thick) -width 10 ttk::label $f.unit -text [msgcat::mc {Image}] grid $f.title $f.thick $f.unit -padx 2 -pady 2 -sticky w # Point set f [ttk::labelframe $w.region.point -text [msgcat::mc {Point}]] ttk::label $f.title -text [msgcat::mc {Size}] ttk::entry $f.size -textvariable pmarker(point,size) -width 10 ttk::label $f.unit -text [msgcat::mc {Pixels}] grid $f.title $f.size $f.unit -padx 2 -pady 2 -sticky w pack $w.region.format $w.region.dformat $w.region.epsilon \ $w.region.centroid $w.region.plot \ $w.region.circle $w.region.ellipse \ $w.region.box $w.region.projection $w.region.point \ -side top -fill both -expand true } proc PrefsDialogAnnulus {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Annulus}] lappend dprefs(tabs) [ttk::frame $w.annulus] # Annulus set f [ttk::labelframe $w.annulus.annulus -text [msgcat::mc {Annulus}]] ttk::label $f.innerTitle -text [msgcat::mc {Inner}] ttk::label $f.outerTitle -text [msgcat::mc {Outer}] ttk::label $f.radiusTitle -text [msgcat::mc {Radius}] ttk::entry $f.inner -textvariable pmarker(annulus,inner) -width 10 ttk::entry $f.outer -textvariable pmarker(annulus,outer) -width 10 ttk::label $f.unit -text [msgcat::mc {Image}] ttk::label $f.annuliTitle -text [msgcat::mc {Annuli}] ttk::entry $f.annuli -textvariable pmarker(annulus,annuli) -width 10 grid x $f.innerTitle $f.outerTitle -padx 2 -pady 2 -sticky w grid $f.radiusTitle $f.inner $f.outer $f.unit -padx 2 -pady 2 -sticky w grid $f.annuliTitle $f.annuli -padx 2 -pady 2 -sticky w # Ellipse Annulus set f [ttk::labelframe $w.annulus.ellipseannulus \ -text [msgcat::mc {Elliptical Annulus}]] ttk::label $f.majorTitle -text [msgcat::mc {Major}] ttk::label $f.minorTitle -text [msgcat::mc {Minor}] ttk::label $f.innerTitle -text [msgcat::mc {Inner}] ttk::entry $f.radius1 -textvariable pmarker(ellipseannulus,radius1) \ -width 10 ttk::entry $f.radius2 -textvariable pmarker(ellipseannulus,radius2) \ -width 10 ttk::label $f.unit -text [msgcat::mc {Image}] ttk::label $f.outerTitle -text [msgcat::mc {Outer}] ttk::entry $f.radius3 -textvariable pmarker(ellipseannulus,radius3) \ -width 10 ttk::label $f.annuliTitle -text [msgcat::mc {Annuli}] ttk::entry $f.annuli -textvariable pmarker(ellipseannulus,annuli) -width 10 grid x $f.majorTitle $f.minorTitle -padx 2 -pady 2 -sticky w grid $f.innerTitle $f.radius1 $f.radius2 $f.unit -padx 2 -pady 2 -sticky w grid $f.outerTitle $f.radius3 -padx 2 -pady 2 -sticky w grid $f.annuliTitle $f.annuli -padx 2 -pady 2 -sticky w # Box Annulus set f [ttk::labelframe $w.annulus.boxannulus \ -text [msgcat::mc {Box Annulus}]] ttk::label $f.majorTitle -text [msgcat::mc {Width}] ttk::label $f.minorTitle -text [msgcat::mc {Height}] ttk::label $f.innerTitle -text [msgcat::mc {Inner}] ttk::entry $f.radius1 -textvariable pmarker(boxannulus,radius1) -width 10 ttk::entry $f.radius2 -textvariable pmarker(boxannulus,radius2) -width 10 ttk::label $f.unit -text [msgcat::mc {Image}] ttk::label $f.outerTitle -text [msgcat::mc {Outer}] ttk::entry $f.radius3 -textvariable pmarker(boxannulus,radius3) -width 10 ttk::label $f.annuliTitle -text [msgcat::mc {Annuli}] ttk::entry $f.annuli -textvariable pmarker(boxannulus,annuli) -width 10 grid x $f.majorTitle $f.minorTitle -padx 2 -pady 2 -sticky w grid $f.innerTitle $f.radius1 $f.radius2 $f.unit -padx 2 -pady 2 -sticky w grid $f.outerTitle $f.radius3 -padx 2 -pady 2 -sticky w grid $f.annuliTitle $f.annuli -padx 2 -pady 2 -sticky w pack $w.annulus.annulus $w.annulus.ellipseannulus $w.annulus.boxannulus \ -side top -fill both -expand true } proc PrefsDialogPanda {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Panda}] lappend dprefs(tabs) [ttk::frame $w.panda] # Panda set f [ttk::labelframe $w.panda.panda -text [msgcat::mc {Panda}]] ttk::label $f.innerTitle -text [msgcat::mc {Inner}] ttk::label $f.outerTitle -text [msgcat::mc {Outer}] ttk::label $f.radiusTitle -text [msgcat::mc {Radius}] ttk::entry $f.inner -textvariable pmarker(panda,inner) -width 10 ttk::entry $f.outer -textvariable pmarker(panda,outer) -width 10 ttk::label $f.unit -text [msgcat::mc {Image}] ttk::label $f.annuliTitle -text [msgcat::mc {Annuli}] ttk::entry $f.annuli -textvariable pmarker(panda,annuli) -width 10 grid x $f.innerTitle $f.outerTitle -padx 2 -pady 2 -sticky w grid $f.radiusTitle $f.inner $f.outer $f.unit -padx 2 -pady 2 -sticky w grid $f.annuliTitle $f.annuli -padx 2 -pady 2 -sticky w ttk::label $f.ang1Title -text [msgcat::mc {Start}] ttk::label $f.ang2Title -text [msgcat::mc {Stop}] ttk::label $f.angTitle -text [msgcat::mc {Angles}] ttk::entry $f.ang1 -textvariable pmarker(panda,ang1) -width 10 ttk::entry $f.ang2 -textvariable pmarker(panda,ang2) -width 10 ttk::label $f.angunit -text [msgcat::mc {Degrees}] ttk::label $f.angnumTitle -text [msgcat::mc {Number}] ttk::entry $f.angnum -textvariable pmarker(panda,angnum) -width 10 grid x $f.ang1Title $f.ang2Title -padx 2 -pady 2 -sticky w grid $f.angTitle $f.ang1 $f.ang2 $f.angunit -padx 2 -pady 2 -sticky w grid $f.angnumTitle $f.angnum -padx 2 -pady 2 -sticky w # Elliptical Panda set f [ttk::labelframe $w.panda.epanda \ -text [msgcat::mc {Elliptical Panda}]] ttk::label $f.majorTitle -text [msgcat::mc {Major}] ttk::label $f.minorTitle -text [msgcat::mc {Minor}] ttk::label $f.innerTitle -text [msgcat::mc {Inner}] ttk::entry $f.radius1 -textvariable pmarker(epanda,radius1) -width 10 ttk::entry $f.radius2 -textvariable pmarker(epanda,radius2) -width 10 ttk::label $f.unit -text [msgcat::mc {Image}] ttk::label $f.outerTitle -text [msgcat::mc {Outer}] ttk::entry $f.radius3 -textvariable pmarker(epanda,radius3) -width 10 ttk::label $f.annuliTitle -text [msgcat::mc {Annuli}] ttk::entry $f.annuli -textvariable pmarker(epanda,annuli) -width 10 grid x $f.majorTitle $f.minorTitle -padx 2 -pady 2 -sticky w grid $f.innerTitle $f.radius1 $f.radius2 $f.unit -padx 2 -pady 2 -sticky w grid $f.outerTitle $f.radius3 -padx 2 -pady 2 -sticky w grid $f.annuliTitle $f.annuli -padx 2 -pady 2 -sticky w ttk::label $f.ang1Title -text [msgcat::mc {Start}] ttk::label $f.ang2Title -text [msgcat::mc {Stop}] ttk::label $f.angTitle -text [msgcat::mc {Angles}] ttk::entry $f.ang1 -textvariable pmarker(epanda,ang1) -width 10 ttk::entry $f.ang2 -textvariable pmarker(epanda,ang2) -width 10 ttk::label $f.angunit -text [msgcat::mc {Degrees}] ttk::label $f.angnumTitle -text [msgcat::mc {Number}] ttk::entry $f.angnum -textvariable pmarker(epanda,angnum) -width 10 grid x $f.ang1Title $f.ang2Title -padx 2 -pady 2 -sticky w grid $f.angTitle $f.ang1 $f.ang2 $f.angunit -padx 2 -pady 2 -sticky w grid $f.angnumTitle $f.angnum -padx 2 -pady 2 -sticky w # Default Box Panda set f [ttk::labelframe $w.panda.bpanda -text [msgcat::mc {Box Panda}]] ttk::label $f.majorTitle -text [msgcat::mc {Major}] ttk::label $f.minorTitle -text [msgcat::mc {Minor}] ttk::label $f.innerTitle -text [msgcat::mc {Inner}] ttk::entry $f.radius1 -textvariable pmarker(bpanda,radius1) -width 10 ttk::entry $f.radius2 -textvariable pmarker(bpanda,radius2) -width 10 ttk::label $f.unit -text [msgcat::mc {Image}] ttk::label $f.outerTitle -text [msgcat::mc {Outer}] ttk::entry $f.radius3 -textvariable pmarker(bpanda,radius3) -width 10 ttk::label $f.annuliTitle -text [msgcat::mc {Annuli}] ttk::entry $f.annuli -textvariable pmarker(bpanda,annuli) -width 10 grid x $f.majorTitle $f.minorTitle -padx 2 -pady 2 -sticky w grid $f.innerTitle $f.radius1 $f.radius2 $f.unit -padx 2 -pady 2 -sticky w grid $f.outerTitle $f.radius3 -padx 2 -pady 2 -sticky w grid $f.annuliTitle $f.annuli -padx 2 -pady 2 -sticky w ttk::label $f.ang1Title -text [msgcat::mc {Start}] ttk::label $f.ang2Title -text [msgcat::mc {Stop}] ttk::label $f.angTitle -text [msgcat::mc {Angles}] ttk::entry $f.ang1 -textvariable pmarker(bpanda,ang1) -width 10 ttk::entry $f.ang2 -textvariable pmarker(bpanda,ang2) -width 10 ttk::label $f.angunit -text [msgcat::mc {Degrees}] ttk::label $f.angnumTitle -text [msgcat::mc {Number}] ttk::entry $f.angnum -textvariable pmarker(bpanda,angnum) -width 10 grid x $f.ang1Title $f.ang2Title -padx 2 -pady 2 -sticky w grid $f.angTitle $f.ang1 $f.ang2 $f.angunit -padx 2 -pady 2 -sticky w grid $f.angnumTitle $f.angnum -padx 2 -pady 2 -sticky w pack $w.panda.panda $w.panda.epanda $w.panda.bpanda \ -side top -fill both -expand true } # Buttons proc ButtonsRegionDef {} { global pbuttons array set pbuttons { region,info 1 region,circle 0 region,ellipse 0 region,box 0 region,polygon 0 region,line 0 region,vector 0 region,projection 0 region,segment 0 region,text 0 region,point 0 region,ruler 0 region,compass 0 region,annulus 0 region,ellipseannulus 0 region,boxannulus 0 region,panda 0 region,epanda 0 region,bpanda 0 region,create 0 region,dissolve 0 region,loadtemplate 0 region,savetemplate 0 region,centroid 0 region,front 1 region,back 1 region,all 1 region,none 1 region,invert 0 region,delete 1 region,deleteall 0 region,newgroup 0 region,group 0 region,list 1 region,load 1 region,save 1 region,show 0 region,showtext 0 region,autocentroid 0 } } proc CreateButtonsRegion {} { global buttons global ds9 ttk::frame $ds9(buttons).region ButtonButton $ds9(buttons).region.info \ [string tolower [msgcat::mc {Information}]] MarkerInfo RadioButton $ds9(buttons).region.circle \ [string tolower [msgcat::mc {Circle}]] \ marker(shape) circle {} RadioButton $ds9(buttons).region.ellipse \ [string tolower [msgcat::mc {Ellipse}]] \ marker(shape) ellipse {} RadioButton $ds9(buttons).region.box \ [string tolower [msgcat::mc {Box}]] \ marker(shape) box {} RadioButton $ds9(buttons).region.polygon \ [string tolower [msgcat::mc {Polygon}]] \ marker(shape) polygon {} RadioButton $ds9(buttons).region.line \ [string tolower [msgcat::mc {Line}]] \ marker(shape) line {} RadioButton $ds9(buttons).region.vector \ [string tolower [msgcat::mc {Vector}]] \ marker(shape) vector {} RadioButton $ds9(buttons).region.projection \ [string tolower [msgcat::mc {Projection}]] \ marker(shape) projection {} RadioButton $ds9(buttons).region.segment \ [string tolower [msgcat::mc {Segment}]] \ marker(shape) segment {} RadioButton $ds9(buttons).region.text \ [string tolower [msgcat::mc {Text}]] \ marker(shape) text {} RadioButton $ds9(buttons).region.point \ [string tolower [msgcat::mc {Point}]] \ marker(shape) {circle point} {} RadioButton $ds9(buttons).region.ruler \ [string tolower [msgcat::mc {Ruler}]] \ marker(shape) ruler {} RadioButton $ds9(buttons).region.compass \ [string tolower [msgcat::mc {Compass}]] \ marker(shape) compass {} RadioButton $ds9(buttons).region.annulus \ [string tolower [msgcat::mc {Annulus}]] \ marker(shape) annulus {} RadioButton $ds9(buttons).region.ellipseannulus \ [string tolower [msgcat::mc {Elliptical Annulus}]] \ marker(shape) ellipseannulus {} RadioButton $ds9(buttons).region.boxannulus \ [string tolower [msgcat::mc {Box Annulus}]] \ marker(shape) boxannulus {} RadioButton $ds9(buttons).region.panda \ [string tolower [msgcat::mc {Panda}]] \ marker(shape) panda {} RadioButton $ds9(buttons).region.epanda \ [string tolower [msgcat::mc {Ellipse Panda}]] \ marker(shape) epanda {} RadioButton $ds9(buttons).region.bpanda \ [string tolower [msgcat::mc {Box Panda}]] \ marker(shape) bpanda {} ButtonButton $ds9(buttons).region.create \ [string tolower [msgcat::mc {Composite}]] CompositeCreate ButtonButton $ds9(buttons).region.dissolve \ [string tolower [msgcat::mc {Dissolve}]] CompositeDelete ButtonButton $ds9(buttons).region.loadtemplate \ [string tolower [msgcat::mc {Load Template}]] OpenTemplateMarker ButtonButton $ds9(buttons).region.savetemplate \ [string tolower [msgcat::mc {Save Template}]] SaveAsTemplateMarker ButtonButton $ds9(buttons).region.centroid \ [string tolower [msgcat::mc {Centroid}]] MarkerCentroid ButtonButton $ds9(buttons).region.front \ [string tolower [msgcat::mc {Front}]] MarkerFront ButtonButton $ds9(buttons).region.back \ [string tolower [msgcat::mc {Back}]] MarkerBack ButtonButton $ds9(buttons).region.all \ [string tolower [msgcat::mc {All}]] MarkerSelectAll ButtonButton $ds9(buttons).region.none \ [string tolower [msgcat::mc {None}]] MarkerUnselectAll ButtonButton $ds9(buttons).region.invert \ [string tolower [msgcat::mc {Invert}]] MarkerSelectInvert ButtonButton $ds9(buttons).region.delete \ [string tolower [msgcat::mc {Delete}]] MarkerDeleteSelect ButtonButton $ds9(buttons).region.deleteall \ [string tolower [msgcat::mc {Delete All}]] MarkerDeleteAllMenu ButtonButton $ds9(buttons).region.newgroup \ [string tolower [msgcat::mc {New Group}]] GroupCreate ButtonButton $ds9(buttons).region.group \ [string tolower [msgcat::mc {Groups}]] GroupDialog ButtonButton $ds9(buttons).region.list \ [string tolower [msgcat::mc {List}]] MarkerList ButtonButton $ds9(buttons).region.load \ [string tolower [msgcat::mc {Load}]] MarkerLoad ButtonButton $ds9(buttons).region.save \ [string tolower [msgcat::mc {Save}]] MarkerSave CheckButton $ds9(buttons).region.show \ [string tolower [msgcat::mc {Show}]] \ marker(show) MarkerShow CheckButton $ds9(buttons).region.showtext \ [string tolower [msgcat::mc {Show Text}]] \ marker(show,text) MarkerShowText CheckButton $ds9(buttons).region.autocentroid \ [string tolower [msgcat::mc {Auto Centroid}]] \ marker(centroid,auto) MarkerCentroidAuto set buttons(region) " $ds9(buttons).region.info pbuttons(region,info) $ds9(buttons).region.circle pbuttons(region,circle) $ds9(buttons).region.ellipse pbuttons(region,ellipse) $ds9(buttons).region.box pbuttons(region,box) $ds9(buttons).region.polygon pbuttons(region,polygon) $ds9(buttons).region.line pbuttons(region,line) $ds9(buttons).region.vector pbuttons(region,vector) $ds9(buttons).region.projection pbuttons(region,projection) $ds9(buttons).region.segment pbuttons(region,segment) $ds9(buttons).region.text pbuttons(region,text) $ds9(buttons).region.point pbuttons(region,point) $ds9(buttons).region.ruler pbuttons(region,ruler) $ds9(buttons).region.compass pbuttons(region,compass) $ds9(buttons).region.annulus pbuttons(region,annulus) $ds9(buttons).region.ellipseannulus pbuttons(region,ellipseannulus) $ds9(buttons).region.boxannulus pbuttons(region,boxannulus) $ds9(buttons).region.panda pbuttons(region,panda) $ds9(buttons).region.epanda pbuttons(region,epanda) $ds9(buttons).region.bpanda pbuttons(region,bpanda) $ds9(buttons).region.create pbuttons(region,create) $ds9(buttons).region.dissolve pbuttons(region,dissolve) $ds9(buttons).region.loadtemplate pbuttons(region,loadtemplate) $ds9(buttons).region.savetemplate pbuttons(region,savetemplate) $ds9(buttons).region.centroid pbuttons(region,centroid) $ds9(buttons).region.front pbuttons(region,front) $ds9(buttons).region.back pbuttons(region,back) $ds9(buttons).region.all pbuttons(region,all) $ds9(buttons).region.none pbuttons(region,none) $ds9(buttons).region.invert pbuttons(region,invert) $ds9(buttons).region.delete pbuttons(region,delete) $ds9(buttons).region.deleteall pbuttons(region,deleteall) $ds9(buttons).region.newgroup pbuttons(region,newgroup) $ds9(buttons).region.group pbuttons(region,group) $ds9(buttons).region.list pbuttons(region,list) $ds9(buttons).region.load pbuttons(region,load) $ds9(buttons).region.save pbuttons(region,save) $ds9(buttons).region.show pbuttons(region,show) $ds9(buttons).region.showtext pbuttons(region,showtext) $ds9(buttons).region.autocentroid pbuttons(region,autocentroid) " } proc PrefsDialogButtonbarRegion {f} { global buttons global pbuttons ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu set m $f.menu menu $m $m add checkbutton -label "[msgcat::mc {Get Information}]..." \ -variable pbuttons(region,info) \ -command {UpdateButtons buttons(region)} $m add separator $m add cascade -label [msgcat::mc {Shape}] -menu $m.shape $m add cascade -label [msgcat::mc {Composite Region}] -menu $m.composite $m add cascade -label [msgcat::mc {Template}] -menu $m.template $m add separator $m add checkbutton -label [msgcat::mc {Centroid}] \ -variable pbuttons(region,centroid) \ -command {UpdateButtons buttons(region)} $m add checkbutton -label [msgcat::mc {Move to Front}] \ -variable pbuttons(region,front) \ -command {UpdateButtons buttons(region)} $m add checkbutton -label [msgcat::mc {Move to Back}] \ -variable pbuttons(region,back) \ -command {UpdateButtons buttons(region)} $m add separator $m add checkbutton -label [msgcat::mc {Select All}] \ -variable pbuttons(region,all) \ -command {UpdateButtons buttons(region)} $m add checkbutton -label [msgcat::mc {Select None}] \ -variable pbuttons(region,none) \ -command {UpdateButtons buttons(region)} $m add checkbutton -label [msgcat::mc {Invert Selection}] \ -variable pbuttons(region,invert) \ -command {UpdateButtons buttons(region)} $m add separator $m add checkbutton -label [msgcat::mc {Delete Selected Regions}] \ -variable pbuttons(region,delete) \ -command {UpdateButtons buttons(region)} $m add checkbutton -label [msgcat::mc {Delete All Regions}] \ -variable pbuttons(region,deleteall) \ -command {UpdateButtons buttons(region)} $m add separator $m add checkbutton -label [msgcat::mc {New Group}] \ -variable pbuttons(region,newgroup) \ -command {UpdateButtons buttons(region)} $m add checkbutton -label "[msgcat::mc {Groups}]..." \ -variable pbuttons(region,group) \ -command {UpdateButtons buttons(region)} $m add separator $m add checkbutton -label "[msgcat::mc {List Regions}]..." \ -variable pbuttons(region,list) \ -command {UpdateButtons buttons(region)} $m add checkbutton -label "[msgcat::mc {Load Regions}]..." \ -variable pbuttons(region,load) \ -command {UpdateButtons buttons(region)} $m add checkbutton -label "[msgcat::mc {Save Regions}]..." \ -variable pbuttons(region,save) \ -command {UpdateButtons buttons(region)} $m add separator $m add cascade -label [msgcat::mc {Region Parameters}] -menu $m.params menu $m.shape $m.shape add checkbutton -label [msgcat::mc {Circle}] \ -variable pbuttons(region,circle) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Ellipse}] \ -variable pbuttons(region,ellipse) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Box}] \ -variable pbuttons(region,box) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Polygon}] \ -variable pbuttons(region,polygon) \ -command {UpdateButtons buttons(region)} $m.shape add separator $m.shape add checkbutton -label [msgcat::mc {Line}] \ -variable pbuttons(region,line) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Vector}] \ -variable pbuttons(region,vector) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Projection}] \ -variable pbuttons(region,projection) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Segment}] \ -variable pbuttons(region,segment) \ -command {UpdateButtons buttons(region)} $m.shape add separator $m.shape add checkbutton -label [msgcat::mc {Text}] \ -variable pbuttons(region,text) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Point}] \ -variable pbuttons(region,point) \ -command {UpdateButtons buttons(region)} $m.shape add separator $m.shape add checkbutton -label [msgcat::mc {Ruler}] \ -variable pbuttons(region,ruler) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Compass}] \ -variable pbuttons(region,compass) \ -command {UpdateButtons buttons(region)} $m.shape add separator $m.shape add checkbutton -label [msgcat::mc {Annulus}] \ -variable pbuttons(region,annulus) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Elliptical Annulus}] \ -variable pbuttons(region,ellipseannulus) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Box Annulus}] \ -variable pbuttons(region,boxannulus) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Panda}] \ -variable pbuttons(region,panda) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Elliptical Panda}]\ -variable pbuttons(region,epanda) \ -command {UpdateButtons buttons(region)} $m.shape add checkbutton -label [msgcat::mc {Box Panda}] \ -variable pbuttons(region,bpanda) \ -command {UpdateButtons buttons(region)} menu $m.composite $m.composite add checkbutton -label [msgcat::mc {Create}] \ -variable pbuttons(region,create) \ -command {UpdateButtons buttons(region)} $m.composite add checkbutton -label [msgcat::mc {Dissolve}] \ -variable pbuttons(region,dissolve) \ -command {UpdateButtons buttons(region)} menu $m.template $m.template add checkbutton -label "[msgcat::mc {Load}]..." \ -variable pbuttons(region,loadtemplate) \ -command {UpdateButtons buttons(region)} $m.template add checkbutton -label "[msgcat::mc {Save}]..." \ -variable pbuttons(region,savetemplate) \ -command {UpdateButtons buttons(region)} menu $m.params $m.params add checkbutton -label [msgcat::mc {Show}] \ -variable pbuttons(region,show) \ -command {UpdateButtons buttons(region)} $m.params add checkbutton -label [msgcat::mc {Show Text}] \ -variable pbuttons(region,showtext) \ -command {UpdateButtons buttons(region)} $m.params add separator $m.params add checkbutton -label [msgcat::mc {Auto Centroid}] \ -variable pbuttons(region,autocentroid) \ -command {UpdateButtons buttons(region)} } # Support proc UpdateRegionMenu {} { global current global marker global pmarker global ds9 if {$current(frame) != {}} { $ds9(mb) entryconfig [msgcat::mc {Region}] -state normal set marker(show) [$current(frame) get marker show] set marker(show,text) [$current(frame) get marker show text] set marker(centroid,auto) [$current(frame) get marker centroid auto] set marker(centroid,radius) [$current(frame) get marker centroid radius] set marker(centroid,iteration) \ [$current(frame) get marker centroid iteration] set marker(preserve) [$current(frame) get marker preserve] switch -- $current(mode) { pointer - region { if {[$current(frame) get marker select number] == 1} { set marker(color) \ [$current(frame) get marker color] set marker(width) \ [$current(frame) get marker width] set marker(dash) \ [$current(frame) get marker property dash] set marker(fixed) \ [$current(frame) get marker property fixed] set marker(edit) \ [$current(frame) get marker property edit] set marker(move) \ [$current(frame) get marker property move] set marker(rotate) \ [$current(frame) get marker property rotate] set marker(delete) \ [$current(frame) get marker property delete] set marker(include) \ [$current(frame) get marker property include] set marker(source) \ [$current(frame) get marker property source] set f [$current(frame) get marker font] set marker(font) [lindex $f 0] set marker(font,size) [lindex $f 1] set marker(font,weight) [lindex $f 2] set marker(font,slant) [lindex $f 3] } else { # defaults set marker(color) $pmarker(color) set marker(width) $pmarker(width) set marker(dash) $pmarker(dash) set marker(fixed) $pmarker(fixed) set marker(edit) $pmarker(edit) set marker(move) $pmarker(move) set marker(rotate) $pmarker(rotate) set marker(delete) $pmarker(delete) set marker(include) $pmarker(include) set marker(source) $pmarker(source) set marker(font) $pmarker(font) set marker(font,size) $pmarker(font,size) set marker(font,weight) $pmarker(font,weight) set marker(font,slant) $pmarker(font,slant) } } } } else { $ds9(mb) entryconfig [msgcat::mc {Region}] -state disabled } } saods9/ds9/library/mscale.tcl000644 000765 000000 00000041572 12705445647 016526 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Menu proc ScaleMainMenu {} { global ds9 menu $ds9(mb).scale $ds9(mb).scale add radiobutton -label [msgcat::mc {Linear}] \ -variable scale(type) -command ChangeScale -value linear $ds9(mb).scale add radiobutton -label [msgcat::mc {Log}] \ -variable scale(type) -command ChangeScale -value log $ds9(mb).scale add radiobutton -label [msgcat::mc {Power}] \ -variable scale(type) -command ChangeScale -value pow $ds9(mb).scale add radiobutton -label [msgcat::mc {Square Root}] \ -variable scale(type) -command ChangeScale -value sqrt $ds9(mb).scale add radiobutton -label [msgcat::mc {Squared}] \ -variable scale(type) -command ChangeScale -value squared $ds9(mb).scale add radiobutton -label {ASINH} \ -variable scale(type) -command ChangeScale -value asinh $ds9(mb).scale add radiobutton -label {SINH} \ -variable scale(type) -command ChangeScale -value sinh $ds9(mb).scale add radiobutton \ -label [msgcat::mc {Histogram Equalization}] \ -variable scale(type) -command ChangeScale -value histequ $ds9(mb).scale add separator $ds9(mb).scale add command -label "[msgcat::mc {Log Exponent}]..." \ -command ScaleLogDialog $ds9(mb).scale add separator $ds9(mb).scale add radiobutton -label [msgcat::mc {Min Max}] \ -variable scale(mode) -command ChangeScaleMode -value minmax $ds9(mb).scale add radiobutton -label {99.5%} \ -variable scale(mode) -command ChangeScaleMode -value 99.5 $ds9(mb).scale add radiobutton -label {99%} \ -variable scale(mode) -command ChangeScaleMode -value 99 $ds9(mb).scale add radiobutton -label {98%} \ -variable scale(mode) -command ChangeScaleMode -value 98 $ds9(mb).scale add radiobutton -label {97%} \ -variable scale(mode) -command ChangeScaleMode -value 97 $ds9(mb).scale add radiobutton -label {96%} \ -variable scale(mode) -command ChangeScaleMode -value 96 $ds9(mb).scale add radiobutton -label {95%} \ -variable scale(mode) -command ChangeScaleMode -value 95 $ds9(mb).scale add radiobutton -label {92.5%} \ -variable scale(mode) -command ChangeScaleMode -value 92.5 $ds9(mb).scale add radiobutton -label {90%} \ -variable scale(mode) -command ChangeScaleMode -value 90 $ds9(mb).scale add radiobutton -label {ZScale} \ -variable scale(mode) -command ChangeScaleMode -value zscale $ds9(mb).scale add radiobutton -label {ZMax} \ -variable scale(mode) -command ChangeScaleMode -value zmax $ds9(mb).scale add radiobutton -label [msgcat::mc {User}] \ -variable scale(mode) -command ChangeScaleMode -value user $ds9(mb).scale add separator $ds9(mb).scale add radiobutton -label [msgcat::mc {Global}] \ -variable scale(scope) -command ChangeScaleScope -value global $ds9(mb).scale add radiobutton -label [msgcat::mc {Local}] \ -variable scale(scope) -command ChangeScaleScope -value local $ds9(mb).scale add separator $ds9(mb).scale add cascade -label [msgcat::mc {Min Max}] \ -menu $ds9(mb).scale.minmax $ds9(mb).scale add command -label {ZScale...} -command ZScaleDialog $ds9(mb).scale add separator $ds9(mb).scale add checkbutton -label "[msgcat::mc {Use}] DATASEC" \ -variable scale(datasec) -command ChangeDATASEC $ds9(mb).scale add separator $ds9(mb).scale add command -label "[msgcat::mc {Scale Parameters}]..." \ -command ScaleDialog menu $ds9(mb).scale.minmax $ds9(mb).scale.minmax add radiobutton -label [msgcat::mc {Scan}] \ -variable minmax(mode) -value scan -command ChangeMinMax $ds9(mb).scale.minmax add radiobutton -label [msgcat::mc {Sample}] \ -variable minmax(mode) -value sample -command ChangeMinMax $ds9(mb).scale.minmax add radiobutton -label {DATAMIN DATAMAX} \ -variable minmax(mode) -value datamin -command ChangeMinMax $ds9(mb).scale.minmax add radiobutton -label {IRAF-MIN IRAF-MAX} \ -variable minmax(mode) -value irafmin -command ChangeMinMax $ds9(mb).scale.minmax add separator $ds9(mb).scale.minmax add command \ -label "[msgcat::mc {Sample Parameters}]..." -command MinMaxDialog } proc PrefsDialogScaleMenu {w} { set f [ttk::labelframe $w.mscale -text [msgcat::mc {Scale}]] ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu PrefsDialogButtonbarScale $f.buttonbar grid $f.menu $f.buttonbar -padx 2 -pady 2 -sticky w set m $f.menu.menu menu $m $m add radiobutton -label [msgcat::mc {Linear}] \ -variable pscale(type) -value linear $m add radiobutton -label [msgcat::mc {Log}] \ -variable pscale(type) -value log $m add radiobutton -label [msgcat::mc {Power}] \ -variable pscale(type) -value pow $m add radiobutton -label [msgcat::mc {Square Root}]\ -variable pscale(type) -value sqrt $m add radiobutton -label [msgcat::mc {Squared}] \ -variable pscale(type) -value squared $m add radiobutton -label {ASINH} \ -variable pscale(type) -value asinh $m add radiobutton -label {SINH} \ -variable pscale(type) -value sinh $m add radiobutton -label [msgcat::mc {Histogram Equalization}] \ -variable pscale(type) -value histequ $m add separator $m add radiobutton -label [msgcat::mc {Min Max}] \ -variable pscale(mode) -value minmax $m add radiobutton -label {99.5%} -variable pscale(mode) -value 99.5 $m add radiobutton -label {99%} -variable pscale(mode) -value 99 $m add radiobutton -label {98%} -variable pscale(mode) -value 98 $m add radiobutton -label {97%} -variable pscale(mode) -value 97 $m add radiobutton -label {96%} -variable pscale(mode) -value 96 $m add radiobutton -label {95%} -variable pscale(mode) -value 95 $m add radiobutton -label {92.5%} -variable pscale(mode) -value 92.5 $m add radiobutton -label {90%} -variable pscale(mode) -value 90 $m add radiobutton -label {ZScale} -variable pscale(mode) -value zscale $m add radiobutton -label {ZMax} -variable pscale(mode) -value zmax $m add radiobutton -label [msgcat::mc {User}] \ -variable pscale(mode) -value user $m add separator $m add radiobutton -label [msgcat::mc {Global}] \ -variable pscale(scope) -value global $m add radiobutton -label [msgcat::mc {Local}] \ -variable pscale(scope) -value local $m add separator $m add cascade -label [msgcat::mc {Min Max}] -menu $m.minmax $m add separator $m add checkbutton -label "[msgcat::mc {Use}] DATASEC" \ -variable pscale(datasec) menu $m.minmax $m.minmax add radiobutton -label [msgcat::mc {Scan}] \ -variable pminmax(mode) -value scan $m.minmax add radiobutton -label [msgcat::mc {Sample}] \ -variable pminmax(mode) -value sample $m.minmax add radiobutton -label {DATAMIN DATAMAX} \ -variable pminmax(mode) -value datamin $m.minmax add radiobutton -label {IRAF-MIN IRAF-MAX} \ -variable pminmax(mode) -value irafmin pack $f -side top -fill both -expand true } proc PrefsDialogScale {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Scale}] lappend dprefs(tabs) [ttk::frame $w.scale] # Log set f [ttk::labelframe $w.scale.log -text [msgcat::mc {Log Exponent}]] ttk::entry $f.log -textvariable pscale(log) -width 10 grid $f.log -padx 2 -pady 2 -sticky w # MinMax set f [ttk::labelframe $w.scale.minmax \ -text [msgcat::mc {Min Max Parameters}]] slider $f.ssample 0 1000 [msgcat::mc {Sample Increment}] \ pminmax(sample) {} grid $f.ssample -padx 2 -pady 2 -sticky ew grid columnconfigure $f 0 -weight 1 # Zscale set f [ttk::labelframe $w.scale.zscale \ -text [msgcat::mc {ZScale Parameters}]] slider $f.scontrast 0. 1. [msgcat::mc {Contrast}] \ pzscale(contrast) {} slider $f.ssize 0 1000 [msgcat::mc {Number of Samples}] \ pzscale(sample) {} slider $f.sline 0 500 [msgcat::mc {Samples per Line}] \ pzscale(line) {} grid $f.scontrast -padx 2 -pady 2 -sticky ew grid $f.ssize -padx 2 -pady 2 -sticky ew grid $f.sline -padx 2 -pady 2 -sticky ew grid columnconfigure $f 0 -weight 1 pack $w.scale.log $w.scale.minmax $w.scale.zscale -side top -fill both -expand true } # Buttons proc ButtonsScaleDef {} { global pbuttons array set pbuttons { scale,linear 1 scale,log 1 scale,pow 1 scale,sqrt 1 scale,squared 1 scale,asinh 1 scale,sinh 1 scale,hist 1 scale,minmax 1 scale,995 0 scale,99 0 scale,98 0 scale,97 0 scale,96 0 scale,95 0 scale,925 0 scale,90 0 scale,zscale 1 scale,zmax 0 scale,user 0 scale,global 0 scale,local 0 scale,datasec 0 scale,params 0 } } proc CreateButtonsScale {} { global buttons global ds9 global scale ttk::frame $ds9(buttons).scale RadioButton $ds9(buttons).scale.linear \ [string tolower [msgcat::mc {Linear}]] \ scale(type) linear ChangeScale RadioButton $ds9(buttons).scale.log \ [string tolower [msgcat::mc {Log}]] \ scale(type) log ChangeScale RadioButton $ds9(buttons).scale.pow \ [string tolower [msgcat::mc {Power}]] \ scale(type) pow ChangeScale RadioButton $ds9(buttons).scale.sqrt \ [string tolower [msgcat::mc {Sqrt}]] \ scale(type) sqrt ChangeScale RadioButton $ds9(buttons).scale.squared \ [string tolower [msgcat::mc {Squared}]] \ scale(type) squared ChangeScale RadioButton $ds9(buttons).scale.asinh \ [string tolower {ASINH}] \ scale(type) asinh ChangeScale RadioButton $ds9(buttons).scale.sinh \ [string tolower {SINH}] \ scale(type) sinh ChangeScale RadioButton $ds9(buttons).scale.hist \ [string tolower [msgcat::mc {Histogram}]] \ scale(type) histequ ChangeScale RadioButton $ds9(buttons).scale.minmax \ [string tolower [msgcat::mc {Min Max}]] \ scale(mode) minmax ChangeScaleMode RadioButton $ds9(buttons).scale.995 {99.5%} scale(mode) 99.5 ChangeScaleMode RadioButton $ds9(buttons).scale.99 {99%} scale(mode) 99 ChangeScaleMode RadioButton $ds9(buttons).scale.98 {98%} scale(mode) 98 ChangeScaleMode RadioButton $ds9(buttons).scale.97 {97%} scale(mode) 97 ChangeScaleMode RadioButton $ds9(buttons).scale.96 {96%} scale(mode) 96 ChangeScaleMode RadioButton $ds9(buttons).scale.95 {95%} scale(mode) 95 ChangeScaleMode RadioButton $ds9(buttons).scale.925 {92.5%} scale(mode) 92.5 ChangeScaleMode RadioButton $ds9(buttons).scale.90 {90%} scale(mode) 90 ChangeScaleMode RadioButton $ds9(buttons).scale.zscale {zscale} \ scale(mode) zscale ChangeScaleMode RadioButton $ds9(buttons).scale.zmax {zmax} \ scale(mode) zmax ChangeScaleMode RadioButton $ds9(buttons).scale.user \ [string tolower [msgcat::mc {User}]] \ scale(mode) user ChangeScaleMode RadioButton $ds9(buttons).scale.global \ [string tolower [msgcat::mc {Global}]] \ scale(scope) global ChangeScaleScope RadioButton $ds9(buttons).scale.local \ [string tolower [msgcat::mc {Local}]] \ scale(scope) local ChangeScaleScope CheckButton $ds9(buttons).scale.datasec {datasec} \ scale(datasec) ChangeDATASEC ButtonButton $ds9(buttons).scale.params \ [string tolower [msgcat::mc {Parameters}]] ScaleDialog set buttons(scale) " $ds9(buttons).scale.linear pbuttons(scale,linear) $ds9(buttons).scale.log pbuttons(scale,log) $ds9(buttons).scale.pow pbuttons(scale,pow) $ds9(buttons).scale.sqrt pbuttons(scale,sqrt) $ds9(buttons).scale.squared pbuttons(scale,squared) $ds9(buttons).scale.asinh pbuttons(scale,asinh) $ds9(buttons).scale.sinh pbuttons(scale,sinh) $ds9(buttons).scale.hist pbuttons(scale,hist) $ds9(buttons).scale.minmax pbuttons(scale,minmax) $ds9(buttons).scale.995 pbuttons(scale,995) $ds9(buttons).scale.99 pbuttons(scale,99) $ds9(buttons).scale.98 pbuttons(scale,98) $ds9(buttons).scale.97 pbuttons(scale,97) $ds9(buttons).scale.96 pbuttons(scale,96) $ds9(buttons).scale.95 pbuttons(scale,95) $ds9(buttons).scale.925 pbuttons(scale,925) $ds9(buttons).scale.90 pbuttons(scale,90) $ds9(buttons).scale.zscale pbuttons(scale,zscale) $ds9(buttons).scale.zmax pbuttons(scale,zmax) $ds9(buttons).scale.user pbuttons(scale,user) $ds9(buttons).scale.global pbuttons(scale,global) $ds9(buttons).scale.local pbuttons(scale,local) $ds9(buttons).scale.datasec pbuttons(scale,datasec) $ds9(buttons).scale.params pbuttons(scale,params) " } proc PrefsDialogButtonbarScale {f} { global buttons global pbuttons ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu set m $f.menu menu $m $m add checkbutton -label [msgcat::mc {Linear}] \ -variable pbuttons(scale,linear) -command {UpdateButtons buttons(scale)} $m add checkbutton -label [msgcat::mc {Log}] \ -variable pbuttons(scale,log) -command {UpdateButtons buttons(scale)} $m add checkbutton -label [msgcat::mc {Power}] \ -variable pbuttons(scale,pow) -command {UpdateButtons buttons(scale)} $m add checkbutton -label [msgcat::mc {Square Root}] \ -variable pbuttons(scale,sqrt) -command {UpdateButtons buttons(scale)} $m add checkbutton -label [msgcat::mc {Squared}] \ -variable pbuttons(scale,squared) -command {UpdateButtons buttons(scale)} $m add checkbutton -label {ASINH} \ -variable pbuttons(scale,asinh) -command {UpdateButtons buttons(scale)} $m add checkbutton -label {SINH} \ -variable pbuttons(scale,sinh) -command {UpdateButtons buttons(scale)} $m add checkbutton -label [msgcat::mc {Histogram Equalization}] \ -variable pbuttons(scale,hist) -command {UpdateButtons buttons(scale)} $m add separator $m add checkbutton -label [msgcat::mc {Min Max}] \ -variable pbuttons(scale,minmax) -command {UpdateButtons buttons(scale)} $m add checkbutton -label {99.5%} \ -variable pbuttons(scale,995) -command {UpdateButtons buttons(scale)} $m add checkbutton -label {99%} \ -variable pbuttons(scale,99) -command {UpdateButtons buttons(scale)} $m add checkbutton -label {98%} \ -variable pbuttons(scale,98) -command {UpdateButtons buttons(scale)} $m add checkbutton -label {97%} \ -variable pbuttons(scale,97) -command {UpdateButtons buttons(scale)} $m add checkbutton -label {96%} \ -variable pbuttons(scale,96) -command {UpdateButtons buttons(scale)} $m add checkbutton -label {95%} \ -variable pbuttons(scale,95) -command {UpdateButtons buttons(scale)} $m add checkbutton -label {92.5%} \ -variable pbuttons(scale,925) -command {UpdateButtons buttons(scale)} $m add checkbutton -label {90%} \ -variable pbuttons(scale,90) -command {UpdateButtons buttons(scale)} $m add checkbutton -label {ZScale} \ -variable pbuttons(scale,zscale) -command {UpdateButtons buttons(scale)} $m add checkbutton -label {ZMax} \ -variable pbuttons(scale,zmax) -command {UpdateButtons buttons(scale)} $m add checkbutton -label [msgcat::mc {User}] \ -variable pbuttons(scale,user) -command {UpdateButtons buttons(scale)} $m add separator $m add checkbutton -label [msgcat::mc {Global}] \ -variable pbuttons(scale,global) -command {UpdateButtons buttons(scale)} $m add checkbutton -label [msgcat::mc {Local}] \ -variable pbuttons(scale,local) -command {UpdateButtons buttons(scale)} $m add separator $m add checkbutton -label "[msgcat::mc {Use}] DATASEC" \ -variable pbuttons(scale,datasec) -command {UpdateButtons buttons(scale)} $m add separator $m add checkbutton -label "[msgcat::mc {Scale Parameters}]..." \ -variable pbuttons(scale,params) -command {UpdateButtons buttons(scale)} } # Support proc UpdateScaleMenu {} { global ds9 global current global scale global debug if {$debug(tcl,update)} { puts stderr "UpdateScaleMenu" } if {$current(frame) != {}} { if {![$current(frame) has iis]} { $ds9(mb) entryconfig [msgcat::mc {Scale}] -state normal set scale(type) [$current(frame) get colorscale] set scale(log) [$current(frame) get colorscale log] set scale(scope) [$current(frame) get clip scope] set scale(mode) [$current(frame) get clip mode] set scale(datasec) [$current(frame) get datasec] set minmax(sample) [$current(frame) get clip minmax sample] set minmax(mode) [$current(frame) get clip minmax mode] set zscale(contrast) [$current(frame) get clip zscale contrast] set zscale(sample) [$current(frame) get clip zscale sample] set zscale(line) [$current(frame) get clip zscale line] # DATAMIN/MAX IRAFMIN/MAX if {[$current(frame) has fits]} { if {[$current(frame) has datamin]} { $ds9(mb).scale.minmax entryconfig {DATAMIN DATAMAX} \ -state normal } else { $ds9(mb).scale.minmax entryconfig {DATAMIN DATAMAX} \ -state disabled } if {[$current(frame) has irafmin]} { $ds9(mb).scale.minmax entryconfig {IRAF-MIN IRAF-MAX} \ -state normal } else { $ds9(mb).scale.minmax entryconfig {IRAF-MIN IRAF-MAX} \ -state disabled } } else { $ds9(mb).scale.minmax entryconfig {DATAMIN DATAMAX} \ -state normal $ds9(mb).scale.minmax entryconfig {IRAF-MIN IRAF-MAX} \ -state normal } } else { $ds9(mb) entryconfig [msgcat::mc {Scale}] -state disabled } } else { $ds9(mb) entryconfig [msgcat::mc {Scale}] -state disabled } } saods9/ds9/library/multiframe.tcl000644 000765 000000 00000006453 12737007354 017420 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadMultiFrameFile {fn} { set path {} if {[string range $fn 0 4] == "stdin" || [string range $fn 0 4] == "STDIN" || [string range $fn 0 0] == "-"} { set path [tmpnam {.fits}] catch { set ch [open "$path" w] fconfigure stdin -translation binary -encoding binary fconfigure $ch -translation binary -encoding binary puts -nonewline $ch [read stdin] close $ch } } LoadMultiFrameAlloc $path $fn } proc LoadMultiFrameSocket {sock fn} { set path [tmpnam {.fits}] catch { set ch [open "$path" w] fconfigure $ch -translation binary -encoding binary fconfigure $sock -translation binary -encoding binary puts -nonewline $ch [read $sock] close $ch } set rr [LoadMultiFrameAlloc $path $fn] if {!$rr} { if {$path != {}} { catch {file delete -force $path} } } return $rr } proc LoadMultiFrameAlloc {path fn} { global loadParam global current global ds9 set ext 0 set cnt 0 set did 0 set need 0 # start with new frame? if {$current(frame) != {}} { switch -- [$current(frame) get type] { base { if {[$current(frame) has fits]} { CreateFrame set did 1 } } rgb - 3d { CreateFrame set did 1 } } } else { CreateFrame } while {1} { # create a new frame if {$need} { CreateFrame set did 1 } # ProcessLoad will clear loadParam each time set loadParam(file,type) fits set loadParam(file,mode) {} if {$path != {}} { set loadParam(load,type) allocgz set loadParam(file,name) "stdin\[$ext\]" set loadParam(file,fn) "$path\[$ext\]" } else { set loadParam(load,type) mmapincr set loadParam(file,name) "$fn\[$ext\]" } set loadParam(load,layer) {} if {![ProcessLoad 0]} { if {$ext} { InitError xpa if {$did} { DeleteCurrentFrame incr ds9(next,num) -1 } if {!$cnt} { Error "[msgcat::mc {Unable to load}] $loadParam(file,type) $loadParam(file,mode) $loadParam(file,name)" return 0 } break; } } else { # ignore any bin tables if {![$current(frame) has fits bin]} { incr cnt set need 1 } else { set need 0 } } incr ext } if {$path != {}} { catch {file delete -force $path} } # go into tile mode if more than one if {$cnt && $current(display) != "tile"} { set current(display) tile DisplayMode } return 1 } proc ProcessMultiFrameCmd {varname iname sock fn} { upvar $varname var upvar $iname i switch -- [string tolower [lindex $var $i]] { new { incr i # not supported } mask { incr i # not supported } slice { incr i # not supported } } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS { if {![LoadMultiFrameSocket $sock $param]} { InitError xpa LoadMultiFrameFile $param } } {Windows NT} {LoadMultiFrameFile $param} } } else { # comm if {$fn != {}} { LoadMultiFrameAlloc $fn $param } else { LoadMultiFrameFile $param } } FinishLoad } saods9/ds9/library/mview.tcl000644 000765 000000 00000033645 12705445647 016413 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Menus proc ViewMainMenu {} { global ds9 menu $ds9(mb).view $ds9(mb).view add radiobutton -label [msgcat::mc {Horizontal Layout}] \ -variable view(layout) -value horizontal -command {ViewHorzCmd} $ds9(mb).view add radiobutton -label [msgcat::mc {Vertical Layout}] \ -variable view(layout) -value vertical -command {ViewVertCmd} $ds9(mb).view add separator $ds9(mb).view add checkbutton -label [msgcat::mc {Information Panel}] \ -variable view(info) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Panner}] \ -variable view(panner) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Magnifier}] \ -variable view(magnifier) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Buttons}] \ -variable view(buttons) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Colorbar}] \ -variable view(colorbar) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Horizontal Graph}] \ -variable view(graph,horz) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Vertical Graph}] \ -variable view(graph,vert) -command UpdateView $ds9(mb).view add separator $ds9(mb).view add checkbutton -label [msgcat::mc {Filename}] \ -variable view(info,filename) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Object}] \ -variable view(info,object) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Keyword}] \ -variable view(info,keyword) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Min Max}] \ -variable view(info,minmax) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Low High}] \ -variable view(info,lowhigh) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Units}] \ -variable view(info,bunit) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {WCS}] \ -variable view(info,wcs) -command UpdateView $ds9(mb).view add cascade -label [msgcat::mc {Multiple WCS}] \ -menu $ds9(mb).view.mwcs $ds9(mb).view add checkbutton -label [msgcat::mc {Image}] \ -variable view(info,image) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Physical}] \ -variable view(info,physical) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Amplifier}] \ -variable view(info,amplifier) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Detector}] \ -variable view(info,detector) -command UpdateView $ds9(mb).view add checkbutton -label [msgcat::mc {Frame Information}] \ -variable view(info,frame) -command UpdateView # View Info Panel WCS menu $ds9(mb).view.mwcs foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} { $ds9(mb).view.mwcs add checkbutton \ -label "[msgcat::mc {WCS}] $l" \ -variable "view(info,wcs$l)" \ -command UpdateView } } proc PrefsDialogViewMenu {w} { set f [ttk::labelframe $w.mview -text [msgcat::mc {View}]] ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu PrefsDialogButtonbarView $f.buttonbar grid $f.menu $f.buttonbar -padx 2 -pady 2 set m $f.menu.menu menu $m $m add radiobutton -label [msgcat::mc {Horizontal Layout}] \ -variable pview(layout) -value horizontal $m add radiobutton -label [msgcat::mc {Vertical Layout}] \ -variable pview(layout) -value vertical $m add separator $m add checkbutton -label [msgcat::mc {Information Panel}] \ -variable pview(info) $m add checkbutton -label [msgcat::mc {Panner}] \ -variable pview(panner) $m add checkbutton -label [msgcat::mc {Magnifier}] \ -variable pview(magnifier) $m add checkbutton -label [msgcat::mc {Buttons}] \ -variable pview(buttons) $m add checkbutton -label [msgcat::mc {Colorbar}] \ -variable pview(colorbar) $m add checkbutton -label [msgcat::mc {Horizontal Graph}] \ -variable pview(graph,horz) $m add checkbutton -label [msgcat::mc {Vertical Graph}] \ -variable pview(graph,vert) $m add separator $m add checkbutton -label [msgcat::mc {Filename}] \ -variable pview(info,filename) $m add checkbutton -label [msgcat::mc {Object}] \ -variable pview(info,object) $m add checkbutton -label [msgcat::mc {Keyword}] \ -variable pview(info,keyword) $m add checkbutton -label [msgcat::mc {Min Max}] \ -variable pview(info,minmax) $m add checkbutton -label [msgcat::mc {Low High}] \ -variable pview(info,lowhigh) $m add checkbutton -label [msgcat::mc {Units}] \ -variable pview(info,bunit) $m add checkbutton -label [msgcat::mc {WCS}] \ -variable pview(info,wcs) $m add cascade -label [msgcat::mc {Multiple WCS}] -menu $m.wcs $m add checkbutton -label [msgcat::mc {Image}] \ -variable pview(info,image) $m add checkbutton -label [msgcat::mc {Physical}] \ -variable pview(info,physical) $m add checkbutton -label [msgcat::mc {Amplifier}] \ -variable pview(info,amplifier) $m add checkbutton -label [msgcat::mc {Detector}] \ -variable pview(info,detector) $m add checkbutton -label [msgcat::mc {Frame Information}]\ -variable pview(info,frame) menu $m.wcs foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} { $m.wcs add checkbutton -label "[msgcat::mc {WCS}] $l" \ -variable "pview(info,wcs$l)" } pack $f -side top -fill both -expand true } proc PrefsDialogGraph {} { global dprefs global ds9 global pds9 global pmagnifier global current set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Graphs}] lappend dprefs(tabs) [ttk::frame $w.graph] set f [ttk::labelframe $w.graph.horz -text [msgcat::mc {Horizontal}]] ttk::label $f.htitle -text [msgcat::mc {Default}] ttk::checkbutton $f.hgrid -text [msgcat::mc {Grid}] \ -variable pgraph(horz,grid) -command UpdateGraphGrid ttk::radiobutton $f.hlinear -text [msgcat::mc {Linear}] \ -variable pgraph(horz,log) -value false \ -command "UpdateGraphYAxis $current(frame)" ttk::radiobutton $f.hlog -text [msgcat::mc {Log}] \ -variable pgraph(horz,log) -value true \ -command "UpdateGraphYAxis $current(frame)" grid $f.htitle $f.hgrid $f.hlinear $f.hlog -padx 2 -pady 2 -sticky w set f [ttk::labelframe $w.graph.vert -text [msgcat::mc {Vertical}]] ttk::label $f.vtitle -text [msgcat::mc {Default}] ttk::checkbutton $f.vgrid -text [msgcat::mc {Grid}] \ -variable pgraph(vert,grid) -command UpdateGraphGrid ttk::radiobutton $f.vlinear -text [msgcat::mc {Linear}] \ -variable pgraph(vert,log) -value false \ -command "UpdateGraphYAxis $current(frame)" ttk::radiobutton $f.vlog -text [msgcat::mc {Log}] \ -variable pgraph(vert,log) -value true \ -command "UpdateGraphYAxis $current(frame)" grid $f.vtitle $f.vgrid $f.vlinear $f.vlog -padx 2 -pady 2 -sticky w pack $w.graph.horz $w.graph.vert -side top -fill both -expand true } # Buttons proc ButtonsViewDef {} { global pbuttons array set pbuttons { view,horizontal 0 view,vertical 0 view,info 1 view,panner 1 view,magnifier 1 view,buttons 1 view,colorbar 1 view,graphhorz 1 view,graphvert 1 view,filename 0 view,object 0 view,minmax 0 view,lowhigh 0 view,bunit 0 view,wcs 0 view,image 0 view,physical 0 view,amplifier 0 view,detector 0 view,frame 0 } } proc CreateButtonsView {} { global buttons global ds9 global view ttk::frame $ds9(buttons).view RadioButton $ds9(buttons).view.horizontal \ [string tolower [msgcat::mc {Layout Horz}]] \ view(layout) horizontal {ViewHorzCmd} RadioButton $ds9(buttons).view.vertical \ [string tolower [msgcat::mc {Layout Vert}]] \ view(layout) vertical {ViewVertCmd} CheckButton $ds9(buttons).view.info \ [string tolower [msgcat::mc {Information}]] \ view(info) UpdateView CheckButton $ds9(buttons).view.panner \ [string tolower [msgcat::mc {Panner}]] \ view(panner) UpdateView CheckButton $ds9(buttons).view.magnifier \ [string tolower [msgcat::mc {Magnifier}]] \ view(magnifier) UpdateView CheckButton $ds9(buttons).view.buttons \ [string tolower [msgcat::mc {Buttons}]] \ view(buttons) UpdateView CheckButton $ds9(buttons).view.colorbar \ [string tolower [msgcat::mc {Colorbar}]] \ view(colorbar) UpdateView CheckButton $ds9(buttons).view.graphhorz \ [string tolower [msgcat::mc {Graph Horz}]] \ view(graph,horz) UpdateView CheckButton $ds9(buttons).view.graphvert \ [string tolower [msgcat::mc {Graph Vert}]] \ view(graph,vert) UpdateView CheckButton $ds9(buttons).view.filename \ [string tolower [msgcat::mc {Filename}]] \ view(info,filename) UpdateView CheckButton $ds9(buttons).view.object \ [string tolower [msgcat::mc {Object}]] \ view(info,object) UpdateView CheckButton $ds9(buttons).view.keyword \ [string tolower [msgcat::mc {Keyword}]] \ view(info,keyword) UpdateView CheckButton $ds9(buttons).view.minmax \ [string tolower [msgcat::mc {Min Max}]] \ view(info,minmax) UpdateView CheckButton $ds9(buttons).view.lowhigh \ [string tolower [msgcat::mc {Low High}]] \ view(info,lowhigh) UpdateView CheckButton $ds9(buttons).view.bunit \ [string tolower [msgcat::mc {Units}]] \ view(info,bunit) UpdateView CheckButton $ds9(buttons).view.wcs \ [string tolower [msgcat::mc {WCS}]] \ view(info,wcs) UpdateView CheckButton $ds9(buttons).view.image \ [string tolower [msgcat::mc {Image}]] \ view(info,image) UpdateView CheckButton $ds9(buttons).view.physical \ [string tolower [msgcat::mc {Physical}]] \ view(info,physical) UpdateView CheckButton $ds9(buttons).view.amplifier \ [string tolower [msgcat::mc {Amplifier}]] \ view(info,amplifier) UpdateView CheckButton $ds9(buttons).view.detector \ [string tolower [msgcat::mc {Detector}]] \ view(info,detector) UpdateView CheckButton $ds9(buttons).view.frame \ [string tolower [msgcat::mc {Frame}]] \ view(info,frame) UpdateView set buttons(view) " $ds9(buttons).view.horizontal pbuttons(view,horizontal) $ds9(buttons).view.vertical pbuttons(view,vertical) $ds9(buttons).view.info pbuttons(view,info) $ds9(buttons).view.panner pbuttons(view,panner) $ds9(buttons).view.magnifier pbuttons(view,magnifier) $ds9(buttons).view.buttons pbuttons(view,buttons) $ds9(buttons).view.colorbar pbuttons(view,colorbar) $ds9(buttons).view.graphhorz pbuttons(view,graphhorz) $ds9(buttons).view.graphvert pbuttons(view,graphvert) $ds9(buttons).view.filename pbuttons(view,filename) $ds9(buttons).view.object pbuttons(view,object) $ds9(buttons).view.minmax pbuttons(view,minmax) $ds9(buttons).view.lowhigh pbuttons(view,lowhigh) $ds9(buttons).view.bunit pbuttons(view,bunit) $ds9(buttons).view.wcs pbuttons(view,wcs) $ds9(buttons).view.image pbuttons(view,image) $ds9(buttons).view.physical pbuttons(view,physical) $ds9(buttons).view.amplifier pbuttons(view,amplifier) $ds9(buttons).view.detector pbuttons(view,detector) $ds9(buttons).view.frame pbuttons(view,frame) " } proc PrefsDialogButtonbarView {f} { global buttons global pbuttons ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu set m $f.menu menu $m $m add checkbutton -label [msgcat::mc {Horizontal Layout}] \ -variable pbuttons(view,horizontal) \ -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Vertical Layout}] \ -variable pbuttons(view,vertical) \ -command {UpdateButtons buttons(view)} $m add separator $m add checkbutton -label [msgcat::mc {Information Panel}] \ -variable pbuttons(view,info) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Panner}] \ -variable pbuttons(view,panner) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Magnifier}] \ -variable pbuttons(view,magnifier) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Buttons}] \ -variable pbuttons(view,buttons) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Colorbar}] \ -variable pbuttons(view,colorbar) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Horizontal Graph}] \ -variable pbuttons(view,graphhorz) \ -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Vertical Graph}] \ -variable pbuttons(view,graphvert) \ -command {UpdateButtons buttons(view)} $m add separator $m add checkbutton -label [msgcat::mc {Filename}] \ -variable pbuttons(view,filename) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Object}] \ -variable pbuttons(view,object) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Min Max}] \ -variable pbuttons(view,minmax) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Low High}] \ -variable pbuttons(view,lowhigh) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Unists}] \ -variable pbuttons(view,bunit) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {WCS}] \ -variable pbuttons(view,wcs) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Image}] \ -variable pbuttons(view,image) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Physical}] \ -variable pbuttons(view,physical) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Amplifier}] \ -variable pbuttons(view,amplifier) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Detector}] \ -variable pbuttons(view,detector) -command {UpdateButtons buttons(view)} $m add checkbutton -label [msgcat::mc {Frame Information}] \ -variable pbuttons(view,frame) -command {UpdateButtons buttons(view)} } saods9/ds9/library/mwcs.tcl000644 000765 000000 00000007660 12705445647 016233 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Menu proc WCSMainMenu {} { global ds9 global wcs CoordMenu $ds9(mb).wcs wcs system 0 sky skyformat UpdateWCS $ds9(mb).wcs add separator $ds9(mb).wcs add command -label "[msgcat::mc {WCS Parameters}]..." \ -command WCSDialog } proc UpdateWCSMenu {} { global wcs global ds9 global current global bin global debug if {$debug(tcl,update)} { puts stderr "UpdateWCSMenu" } if {$current(frame) != {}} { $ds9(mb) entryconfig [msgcat::mc {WCS}] -state normal set ww [$current(frame) get wcs] set wcs(system) [lindex $ww 0] set wcs(sky) [lindex $ww 1] set wcs(skyformat) [lindex $ww 2] set wcs(frame) $current(frame) if {[$current(frame) has fits]} { CoordMenuEnable $ds9(mb).wcs wcs system 0 sky skyformat } else { CoordMenuReset $ds9(mb).wcs wcs system 0 sky skyformat } UpdateWCSInfoBox $current(frame) } else { $ds9(mb) entryconfig [msgcat::mc {WCS}] -state disabled } } proc PrefsDialogWCSMenu {w} { set f [ttk::labelframe $w.mwcs -text [msgcat::mc {WCS}]] ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu PrefsDialogButtonbarWCS $f.buttonbar grid $f.menu $f.buttonbar -padx 2 -pady 2 -sticky w CoordMenu $f.menu.menu pwcs system 0 sky skyformat {} pack $f -side top -fill both -expand true } # Buttons proc ButtonsWCSDef {} { global pbuttons array set pbuttons { wcs,fk4 1 wcs,fk5 1 wcs,icrs 1 wcs,galactic 1 wcs,ecliptic 1 wcs,degrees 1 wcs,sexagesimal 1 } } proc CreateButtonsWCS {} { global buttons global ds9 global wcs ttk::frame $ds9(buttons).wcs RadioButton $ds9(buttons).wcs.fk4 {fk4} \ wcs(sky) fk4 UpdateWCS RadioButton $ds9(buttons).wcs.fk5 {fk5} \ wcs(sky) fk5 UpdateWCS RadioButton $ds9(buttons).wcs.icrs \ [string tolower [msgcat::mc {ICRS}]] \ wcs(sky) icrs UpdateWCS RadioButton $ds9(buttons).wcs.galactic \ [string tolower [msgcat::mc {Galactic}]] \ wcs(sky) galactic UpdateWCS RadioButton $ds9(buttons).wcs.ecliptic \ [string tolower [msgcat::mc {Ecliptic}]] \ wcs(sky) ecliptic UpdateWCS RadioButton $ds9(buttons).wcs.degrees \ [string tolower [msgcat::mc {Degrees}]] \ wcs(skyformat) degrees UpdateWCS RadioButton $ds9(buttons).wcs.sexagesimal {sexagesimal} \ wcs(skyformat) sexagesimal UpdateWCS set buttons(wcs) " $ds9(buttons).wcs.fk4 pbuttons(wcs,fk4) $ds9(buttons).wcs.fk5 pbuttons(wcs,fk5) $ds9(buttons).wcs.icrs pbuttons(wcs,icrs) $ds9(buttons).wcs.galactic pbuttons(wcs,galactic) $ds9(buttons).wcs.ecliptic pbuttons(wcs,ecliptic) $ds9(buttons).wcs.degrees pbuttons(wcs,degrees) $ds9(buttons).wcs.sexagesimal pbuttons(wcs,sexagesimal) " } proc PrefsDialogButtonbarWCS {f} { global buttons global pbuttons ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu set m $f.menu menu $m $m add checkbutton -label [msgcat::mc {FK4}] \ -variable pbuttons(wcs,fk4) -command {UpdateButtons buttons(wcs)} $m add checkbutton -label [msgcat::mc {FK5}] \ -variable pbuttons(wcs,fk5) -command {UpdateButtons buttons(wcs)} $m add checkbutton -label [msgcat::mc {ICRS}] \ -variable pbuttons(wcs,icrs) -command {UpdateButtons buttons(wcs)} $m add checkbutton -label [msgcat::mc {Galactic}] \ -variable pbuttons(wcs,galactic) -command {UpdateButtons buttons(wcs)} $m add checkbutton -label [msgcat::mc {Ecliptic}] \ -variable pbuttons(wcs,ecliptic) -command {UpdateButtons buttons(wcs)} $m add separator $m add checkbutton -label [msgcat::mc {Degrees}] \ -variable pbuttons(wcs,degrees) -command {UpdateButtons buttons(wcs)} $m add checkbutton -label [msgcat::mc {Sexagesimal}] \ -variable pbuttons(wcs,sexagesimal) -command {UpdateButtons buttons(wcs)} } saods9/ds9/library/mzoom.tcl000644 000765 000000 00000037113 12705445647 016417 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # Menus proc ZoomMainMenu {} { global ds9 menu $ds9(mb).zoom $ds9(mb).zoom add command -label [msgcat::mc {Center Image}] \ -command CenterCurrentFrame $ds9(mb).zoom add checkbutton -label [msgcat::mc {Align}] \ -variable current(align) -command AlignWCSFrame $ds9(mb).zoom add separator $ds9(mb).zoom add command -label [msgcat::mc {Zoom In}] \ -command {Zoom 2 2} $ds9(mb).zoom add command -label [msgcat::mc {Zoom Out}] \ -command {Zoom .5 .5} $ds9(mb).zoom add command -label [msgcat::mc {Zoom Fit}] \ -command ZoomToFit $ds9(mb).zoom add separator $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Zoom}] 1/32" \ -variable current(zoom) -value { 0.03125 0.03125 } -command ChangeZoom $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Zoom}] 1/16" \ -variable current(zoom) -value { 0.0625 0.0625 } -command ChangeZoom $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Zoom}] 1/8" \ -variable current(zoom) -value { 0.125 0.125 } -command ChangeZoom $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Zoom}] 1/4" \ -variable current(zoom) -value { 0.25 0.25 } -command ChangeZoom $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Zoom}] 1/2" \ -variable current(zoom) -value { 0.5 0.5 } -command ChangeZoom $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Zoom}] 1" \ -variable current(zoom) -value { 1 1 } -command ChangeZoom $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Zoom}] 2" \ -variable current(zoom) -value { 2 2 } -command ChangeZoom $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Zoom}] 4" \ -variable current(zoom) -value { 4 4 } -command ChangeZoom $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Zoom}] 8" \ -variable current(zoom) -value { 8 8 } -command ChangeZoom $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Zoom}] 16" \ -variable current(zoom) -value { 16 16 } -command ChangeZoom $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Zoom}] 32" \ -variable current(zoom) -value { 32 32 } -command ChangeZoom $ds9(mb).zoom add separator $ds9(mb).zoom add radiobutton -label [msgcat::mc {None}] \ -variable current(orient) -value none -command ChangeOrient $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Invert}] X" \ -variable current(orient) -value x -command ChangeOrient $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Invert}] Y" \ -variable current(orient) -value y -command ChangeOrient $ds9(mb).zoom add radiobutton -label "[msgcat::mc {Invert}] XY" \ -variable current(orient) -value xy -command ChangeOrient $ds9(mb).zoom add separator $ds9(mb).zoom add radiobutton -label "0 [msgcat::mc {Degrees}]" \ -variable current(rotate) -value 0 -command ChangeRotate $ds9(mb).zoom add radiobutton -label "90 [msgcat::mc {Degrees}]" \ -variable current(rotate) -value 90 -command ChangeRotate $ds9(mb).zoom add radiobutton -label "180 [msgcat::mc {Degrees}]" \ -variable current(rotate) -value 180 -command ChangeRotate $ds9(mb).zoom add radiobutton -label "270 [msgcat::mc {Degrees}]" \ -variable current(rotate) -value 270 -command ChangeRotate $ds9(mb).zoom add separator $ds9(mb).zoom add command -label "[msgcat::mc {Crop Parameters}]..." \ -command CropDialog $ds9(mb).zoom add separator $ds9(mb).zoom add command \ -label "[msgcat::mc {Pan Zoom Rotate Parameters}]..." \ -command PanZoomDialog } proc PrefsDialogZoomMenu {w} { set f [ttk::labelframe $w.mzoom -text [msgcat::mc {Zoom}]] ttk::menubutton $f.menu -text [msgcat::mc {Menu}] -menu $f.menu.menu PrefsDialogButtonbarZoom $f.buttonbar grid $f.menu $f.buttonbar -padx 2 -pady 2 set m $f.menu.menu menu $m $m add checkbutton -label [msgcat::mc {Align}] \ -variable pcurrent(align) $m add separator $m add radiobutton -label "[msgcat::mc {Zoom}] 1/32" \ -variable pcurrent(zoom) -value { 0.03125 0.03125 } $m add radiobutton -label "[msgcat::mc {Zoom}] 1/16" \ -variable pcurrent(zoom) -value { 0.0625 0.0625 } $m add radiobutton -label "[msgcat::mc {Zoom}] 1/8" \ -variable pcurrent(zoom) -value { 0.125 0.125 } $m add radiobutton -label "[msgcat::mc {Zoom}] 1/4" \ -variable pcurrent(zoom) -value { 0.25 0.25 } $m add radiobutton -label "[msgcat::mc {Zoom}] 1/2" \ -variable pcurrent(zoom) -value { 0.5 0.5 } $m add radiobutton -label "[msgcat::mc {Zoom}] 1" \ -variable pcurrent(zoom) -value { 1 1 } $m add radiobutton -label "[msgcat::mc {Zoom}] 2" \ -variable pcurrent(zoom) -value { 2 2 } $m add radiobutton -label "[msgcat::mc {Zoom}] 4" \ -variable pcurrent(zoom) -value { 4 4 } $m add radiobutton -label "[msgcat::mc {Zoom}] 8" \ -variable pcurrent(zoom) -value { 8 8 } $m add radiobutton -label "[msgcat::mc {Zoom}] 16" \ -variable pcurrent(zoom) -value { 16 16 } $m add radiobutton -label "[msgcat::mc {Zoom}] 32" \ -variable pcurrent(zoom) -value { 32 32 } $m add separator $m add radiobutton -label [msgcat::mc {None}] \ -variable pcurrent(orient) -value none $m add radiobutton -label "[msgcat::mc {Invert}] X" \ -variable pcurrent(orient) -value x $m add radiobutton -label "[msgcat::mc {Invert}] Y" \ -variable pcurrent(orient) -value y $m add radiobutton -label "[msgcat::mc {Invert}] XY" \ -variable pcurrent(orient) -value xy $m add separator $m add radiobutton -label "0 [msgcat::mc {Degrees}]" \ -variable pcurrent(rotate) -value 0 $m add radiobutton -label "90 [msgcat::mc {Degrees}]" \ -variable pcurrent(rotate) -value 90 $m add radiobutton -label "180 [msgcat::mc {Degrees}]" \ -variable pcurrent(rotate) -value 180 $m add radiobutton -label "270 [msgcat::mc {Degrees}]" \ -variable pcurrent(rotate) -value 270 pack $f -side top -fill both -expand true } proc PrefsDialogZoom {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Zoom}] lappend dprefs(tabs) [ttk::frame $w.zoom] # PanZoom set f [ttk::labelframe $w.zoom.panzoom -text [msgcat::mc {Pan Zoom}]] ttk::radiobutton $f.click -text [msgcat::mc {Click to Center}] \ -variable ppanzoom(mode) -value click ttk::radiobutton $f.drag -text [msgcat::mc {Drag to Center}] \ -variable ppanzoom(mode) -value drag ttk::radiobutton $f.panzoom -text [msgcat::mc {Pan then Zoom}] \ -variable ppanzoom(mode) -value panzoom grid $f.click $f.drag $f.panzoom -padx 2 -pady 2 -sticky w # Mouse set f [ttk::labelframe $w.zoom.mouse -text [msgcat::mc {Mouse Wheel Zoom}]] ttk::checkbutton $f.click -text [msgcat::mc {Enable}] \ -variable ppanzoom(wheel) ttk::label $f.title2 -text [msgcat::mc {Factor}] ttk::entry $f.factor -textvariable ppanzoom(wheel,factor) -width 10 grid $f.click $f.title2 $f.factor -padx 2 -pady 2 -sticky w pack $w.zoom.panzoom $w.zoom.mouse -side top -fill both -expand true } # Buttons proc ButtonsZoomDef {} { global pbuttons array set pbuttons { zoom,center 0 zoom,align 0 zoom,in 1 zoom,out 1 zoom,fit 1 zoom,i32 0 zoom,i16 0 zoom,i8 0 zoom,i4 1 zoom,i2 1 zoom,1 1 zoom,2 1 zoom,4 1 zoom,8 0 zoom,16 0 zoom,32 0 zoom,none 0 zoom,x 0 zoom,y 0 zoom,xy 0 zoom,0 0 zoom,90 0 zoom,180 0 zoom,270 0 zoom,crop 0 zoom,params 0 } } proc CreateButtonsZoom {} { global buttons global ds9 ttk::frame $ds9(buttons).zoom ButtonButton $ds9(buttons).zoom.center \ [string tolower [msgcat::mc {Center}]] CenterCurrentFrame CheckButton $ds9(buttons).zoom.align \ [msgcat::mc {Align}] current(align) AlignWCSFrame ButtonButton $ds9(buttons).zoom.in \ [string tolower [msgcat::mc {Zoom In}]] {Zoom 2 2} ButtonButton $ds9(buttons).zoom.out \ [string tolower [msgcat::mc {Zoom Out}]] {Zoom .5 .5} ButtonButton $ds9(buttons).zoom.fit \ [string tolower [msgcat::mc {Zoom Fit}]] ZoomToFit RadioButton $ds9(buttons).zoom.i32 \ "[string tolower [msgcat::mc {Zoom}]] 1/32" \ current(zoom) { 0.03125 0.03125 } ChangeZoom RadioButton $ds9(buttons).zoom.i16 \ "[string tolower [msgcat::mc {Zoom}]] 1/16" \ current(zoom) { 0.0625 0.0625 } ChangeZoom RadioButton $ds9(buttons).zoom.i8 \ "[string tolower [msgcat::mc {Zoom}]] 1/8" \ current(zoom) { 0.125 0.125 } ChangeZoom RadioButton $ds9(buttons).zoom.i4 \ "[string tolower [msgcat::mc {Zoom}]] 1/4" \ current(zoom) { 0.25 0.25 } ChangeZoom RadioButton $ds9(buttons).zoom.i2 \ "[string tolower [msgcat::mc {Zoom}]] 1/2" \ current(zoom) { 0.5 0.5 } ChangeZoom RadioButton $ds9(buttons).zoom.1 \ "[string tolower [msgcat::mc {Zoom}]] 1" \ current(zoom) { 1 1 } ChangeZoom RadioButton $ds9(buttons).zoom.2 \ "[string tolower [msgcat::mc {Zoom}]] 2" \ current(zoom) { 2 2 } ChangeZoom RadioButton $ds9(buttons).zoom.4 \ "[string tolower [msgcat::mc {Zoom}]] 4" \ current(zoom) { 4 4 } ChangeZoom RadioButton $ds9(buttons).zoom.8 \ "[string tolower [msgcat::mc {Zoom}]] 8" \ current(zoom) { 8 8 } ChangeZoom RadioButton $ds9(buttons).zoom.16 \ "[string tolower [msgcat::mc {Zoom}]] 16" \ current(zoom) { 16 16 } ChangeZoom RadioButton $ds9(buttons).zoom.32 \ "[string tolower [msgcat::mc {Zoom}]] 32" \ current(zoom) { 32 32 } ChangeZoom RadioButton $ds9(buttons).zoom.none \ [string tolower [msgcat::mc {None}]] \ current(orient) none ChangeOrient RadioButton $ds9(buttons).zoom.x {x} current(orient) x ChangeOrient RadioButton $ds9(buttons).zoom.y {y} current(orient) y ChangeOrient RadioButton $ds9(buttons).zoom.xy {xy} current(orient) xy ChangeOrient RadioButton $ds9(buttons).zoom.0 {0} current(rotate) 0 ChangeRotate RadioButton $ds9(buttons).zoom.90 {90} current(rotate) 90 ChangeRotate RadioButton $ds9(buttons).zoom.180 {180} current(rotate) 180 ChangeRotate RadioButton $ds9(buttons).zoom.270 {270} current(rotate) 270 ChangeRotate ButtonButton $ds9(buttons).zoom.crop \ [string tolower [msgcat::mc {Crop}]] CropDialog ButtonButton $ds9(buttons).zoom.params \ [string tolower [msgcat::mc {Parameters}]] PanZoomDialog set buttons(zoom) " $ds9(buttons).zoom.center pbuttons(zoom,center) $ds9(buttons).zoom.align pbuttons(zoom,align) $ds9(buttons).zoom.in pbuttons(zoom,in) $ds9(buttons).zoom.out pbuttons(zoom,out) $ds9(buttons).zoom.fit pbuttons(zoom,fit) $ds9(buttons).zoom.i32 pbuttons(zoom,i32) $ds9(buttons).zoom.i16 pbuttons(zoom,i16) $ds9(buttons).zoom.i8 pbuttons(zoom,i8) $ds9(buttons).zoom.i4 pbuttons(zoom,i4) $ds9(buttons).zoom.i2 pbuttons(zoom,i2) $ds9(buttons).zoom.1 pbuttons(zoom,1) $ds9(buttons).zoom.2 pbuttons(zoom,2) $ds9(buttons).zoom.4 pbuttons(zoom,4) $ds9(buttons).zoom.8 pbuttons(zoom,8) $ds9(buttons).zoom.16 pbuttons(zoom,16) $ds9(buttons).zoom.32 pbuttons(zoom,32) $ds9(buttons).zoom.none pbuttons(zoom,none) $ds9(buttons).zoom.x pbuttons(zoom,x) $ds9(buttons).zoom.y pbuttons(zoom,y) $ds9(buttons).zoom.xy pbuttons(zoom,xy) $ds9(buttons).zoom.0 pbuttons(zoom,0) $ds9(buttons).zoom.90 pbuttons(zoom,90) $ds9(buttons).zoom.180 pbuttons(zoom,180) $ds9(buttons).zoom.270 pbuttons(zoom,270) $ds9(buttons).zoom.crop pbuttons(zoom,crop) $ds9(buttons).zoom.params pbuttons(zoom,params) " } proc PrefsDialogButtonbarZoom {f} { global buttons global pbuttons ttk::menubutton $f -text [msgcat::mc {Buttonbar}] -menu $f.menu set m $f.menu menu $m $m add checkbutton -label [msgcat::mc {Center Image}] \ -variable pbuttons(zoom,center) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label [msgcat::mc {Align}] \ -variable pbuttons(zoom,align) -command {UpdateButtons buttons(zoom)} $m add separator $m add checkbutton -label [msgcat::mc {Zoom In}] \ -variable pbuttons(zoom,in) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label [msgcat::mc {Zoom Out}] \ -variable pbuttons(zoom,out) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label [msgcat::mc {Zoom Fit}] \ -variable pbuttons(zoom,fit) -command {UpdateButtons buttons(zoom)} $m add separator $m add checkbutton -label "[msgcat::mc {Zoom}] 1/32" \ -variable pbuttons(zoom,i32) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Zoom}] 1/16" \ -variable pbuttons(zoom,i16) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Zoom}] 1/8" \ -variable pbuttons(zoom,i8) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Zoom}] 1/4" \ -variable pbuttons(zoom,i4) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Zoom}] 1/2" \ -variable pbuttons(zoom,i2) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Zoom}] 1" \ -variable pbuttons(zoom,1) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Zoom}] 2" \ -variable pbuttons(zoom,2) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Zoom}] 4" \ -variable pbuttons(zoom,4) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Zoom}] 8" \ -variable pbuttons(zoom,8) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Zoom}] 16" \ -variable pbuttons(zoom,16) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Zoom}] 32" \ -variable pbuttons(zoom,32) -command {UpdateButtons buttons(zoom)} $m add separator $m add checkbutton -label [msgcat::mc {None}] \ -variable pbuttons(zoom,none) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Invert}] X" \ -variable pbuttons(zoom,x) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Invert}] Y" \ -variable pbuttons(zoom,y) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "[msgcat::mc {Invert}] XY" \ -variable pbuttons(zoom,xy) -command {UpdateButtons buttons(zoom)} $m add separator $m add checkbutton -label "0 [msgcat::mc {Degrees}]" \ -variable pbuttons(zoom,0) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "90 [msgcat::mc {Degrees}]" \ -variable pbuttons(zoom,90) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "180 [msgcat::mc {Degrees}]" \ -variable pbuttons(zoom,180) -command {UpdateButtons buttons(zoom)} $m add checkbutton -label "270 [msgcat::mc {Degrees}]" \ -variable pbuttons(zoom,270) -command {UpdateButtons buttons(zoom)} $m add separator $m add checkbutton -label "[msgcat::mc {Crop Parameters}]..." \ -variable pbuttons(zoom,crop) -command {UpdateButtons buttons(zoom)} $m add separator $m add checkbutton -label "[msgcat::mc {Pan Zoom Rotate Parameters}]..." \ -variable pbuttons(zoom,params) -command {UpdateButtons buttons(zoom)} } # Support proc UpdateZoomMenuStatic {} { global ds9 global debug if {$debug(tcl,update)} { puts stderr "UpdateZoomMenuStatic" } if {$ds9(active,num) > 0} { $ds9(mb) entryconfig [msgcat::mc {Zoom}] -state normal } else { $ds9(mb) entryconfig [msgcat::mc {Zoom}] -state disabled } } proc UpdateZoomMenu {} { global ds9 global current global panzoom global debug if {$debug(tcl,update)} { puts stderr "UpdateZoomMenu" } if {$current(frame) == {}} { $ds9(mb).zoom entryconfig [msgcat::mc {Align}] -state disabled } else { $ds9(mb).zoom entryconfig [msgcat::mc {Align}] -state normal set panzoom(preserve) [$current(frame) get pan preserve] set current(zoom) [$current(frame) get zoom] set current(rotate) [$current(frame) get rotate] set current(orient) [$current(frame) get orient] set current(align) [$current(frame) get wcs align] } } saods9/ds9/library/nameres.tcl000644 000765 000000 00000013622 12737541622 016702 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc NRESDef {} { global nres global inres global pnres set inres(top) .nres set inres(mb) .nresmb # set via wcs() set nres(system) wcs set nres(sky) fk5 set nres(skyformat) degrees # prefs only set pnres(server) simbad-cds } proc NRESApply {varname sync} { upvar #0 $varname var global $varname set var(sync) $sync ARApply $varname if {$var(name)!={}} { NSVRServer $varname } else { ARError $varname "Please specify an Object Name" } } proc NRESDialog {} { global nres global inres global ds9 global pds9 if {[winfo exists $inres(top)]} { raise $inres(top) return } set varname dnres upvar #0 $varname var global $varname # AR variables ARInit $varname {} # Variables set var(top) $inres(top) set var(mb) $inres(mb) set var(system) $nres(system) set var(sky) $nres(sky) set var(skyformat) $nres(skyformat) # create the window set w $var(top) set mb $var(mb) Toplevel $w $mb 6 [msgcat::mc {Name Resolution}] "ARDestroy $varname" # file $mb add cascade -label File -menu $mb.file menu $mb.file $mb.file add command -label [msgcat::mc {Retrieve}] \ -command "NRESApply $varname 0" $mb.file add command -label [msgcat::mc {Cancel}] \ -command "ARCancel $varname" $mb.file add separator $mb.file add command -label [msgcat::mc {Pan To}] \ -command "NRESPan $varname" $mb.file add command -label [msgcat::mc {Crosshair To}] \ -command "NRESCrosshair $varname" $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command "ARDestroy $varname" # edit AREditMenu $varname # name server NSVRServerMenu $varname # Param set f [ttk::frame $w.param] ttk::label $f.nametitle -text [msgcat::mc {Object}] ttk::entry $f.name -textvariable ${varname}(name) -width 48 ttk::label $f.sky -textvariable ${varname}(sky) -anchor w set var(xname) [ttk::label $f.xtitle -text {} -width 1] ttk::label $f.x -textvariable ${varname}(x) -width 14 -relief groove set var(yname) [ttk::label $f.ytitle -text {} -width 1] ttk::label $f.y -textvariable ${varname}(y) -width 14 -relief groove ARSkyFormat $f.skyformat $varname grid $f.nametitle x $f.name - - - - -padx 2 -pady 2 -sticky w grid $f.sky $f.xtitle $f.x $f.ytitle $f.y $f.skyformat \ -padx 2 -pady 2 -sticky w # Status set f [ttk::frame $w.status] ttk::label $f.tstatus -text [msgcat::mc {Status}] ttk::label $f.status -textvariable ${varname}(status) grid $f.tstatus $f.status -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] set var(apply) [ttk::button $f.apply -text [msgcat::mc {Retrieve}] \ -command "NRESApply $varname 0"] set var(cancel) [ttk::button $f.cancel -text [msgcat::mc {Cancel}] \ -command "ARCancel $varname" -state disabled] ttk::button $f.close -text [msgcat::mc {Close}] \ -command "ARDestroy $varname" pack $f.apply $f.cancel $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal ttk::separator $w.sep2 -orient horizontal pack $w.buttons $w.sep $w.status $w.sep2 -side bottom -fill x pack $w.param -side top -fill both -expand true ARCoord $varname ARStatus $varname {} } proc NRESPan {varname} { upvar #0 $varname var global $varname if {($var(x) != {}) && ($var(y) != {})} { PanTo $var(x) $var(y) $var(system) $var(sky) } } proc NRESCrosshair {varname} { upvar #0 $varname var global $varname global current if {($current(frame) != {})} { if {[$current(frame) has wcs equatorial $var(system)]} { if {($var(x) != {}) && ($var(y) != {})} { set current(mode) crosshair ChangeMode $current(frame) crosshair \ $var(system) $var(sky) $var(x) $var(y) } } } } # Prefs proc PrefsDialogNRES {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Name Server}] lappend dprefs(tabs) [ttk::frame $w.namesvr] set f [ttk::labelframe $w.namesvr.params -text [msgcat::mc {Name Server}]] ttk::label $f.tsvr -text [msgcat::mc {Default}] ttk::menubutton $f.svr -textvariable pnres(server) -menu $f.svr.menu menu $f.svr.menu NSVRServerMenuItems $f.svr.menu grid $f.tsvr $f.svr -padx 2 -pady 2 -sticky w pack $f -side top -fill both -expand true } # Process Cmds proc ProcessNRESCmd {varname iname} { upvar $varname var upvar $iname i set vvarname dnres upvar #0 $vvarname vvar global $vvarname global nres global pnres NRESDialog switch -- [string tolower [lindex $var $i]] { {} - open {} close {ARDestroy $vvarname} server { incr i set pnres(server) [lindex $var $i] } pan {NRESPan $vvarname} crosshair {NRESCrosshair $vvarname} format - skyformat { incr i switch -- [string tolower [lindex $var $i]] { deg - degree - degrees { set vvar(skyformat) degrees set vvar(skyformat,msg) $vvar(skyformat) } default { set vvar(skyformat) [string tolower [lindex $var $i]] set vvar(skyformat,msg) $vvar(skyformat) } } } name { incr i set vvar(name) [lindex $var $i] NRESApply $vvarname 1 } default { set vvar(name) [lindex $var $i] NRESApply $vvarname 1 } } } proc ProcessSendNRESCmd {proc id param} { global nres global pnres global dnres NRESDialog switch -- [string tolower [lindex $param 0]] { server {$proc $id "$pnres(server)\n"} format - skyformat {$proc $id "$dnres(skyformat)\n"} name - {} {$proc $id "$dnres(name)\n"} default { set dnres(name) [lindex $param 0] NRESApply dnres 1 $proc $id "$dnres(x) $dnres(y)\n" } } } saods9/ds9/library/nrrd.tcl000644 000765 000000 00000005167 12705445647 016227 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ImportNRRDFile {fn layer} { global loadParam set loadParam(file,type) nrrd set loadParam(file,mode) {} set loadParam(load,layer) $layer # find stdin if {[string range $fn 0 4] == "stdin" || [string range $fn 0 4] == "STDIN" || [string range $fn 0 0] == "-"} { set loadParam(load,type) alloc set loadParam(file,name) stdin set loadParam(file,fn) $loadParam(file,name) } else { set loadParam(load,type) mmap set loadParam(file,name) $fn } ProcessLoad } proc ImportNRRDAlloc {path fn layer} { global loadParam set loadParam(file,type) nrrd set loadParam(file,mode) {} set loadParam(load,type) alloc set loadParam(file,name) $fn set loadParam(file,fn) $path set loadParam(load,layer) $layer ProcessLoad } proc ImportNRRDSocket {sock fn layer} { global loadParam set loadParam(file,type) nrrd set loadParam(file,mode) {} set loadParam(load,type) socket set loadParam(file,name) $fn set loadParam(socket,id) $sock set loadParam(load,layer) $layer return [ProcessLoad 0] } proc ExportNRRDFile {fn opt} { global current if {$fn == {} || $current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save nrrd file "\{$fn\}" $opt } proc ExportNRRDSocket {sock opt} { global current if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save nrrd socket $sock $opt } proc ProcessNRRDCmd {varname iname sock fn} { upvar $varname var upvar $iname i global loadParam global current set layer {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i set layer mask } slice { incr i # not supported } } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa if {![ImportNRRDSocket $sock $param $layer]} { InitError xpa ImportNRRDFile $param $layer } } else { # comm if {$fn != {}} { ImportNRRDAlloc $fn $param $layer } else { ImportNRRDFile $param $layer } } FinishLoad } proc ProcessSendNRRDCmd {proc id param sock fn} { global current if {$current(frame) == {}} { return } set opt [string tolower [lindex $param 0]] if {$sock != {}} { # xpa ExportNRRDSocket $sock $opt } elseif {$fn != {}} { # comm ExportNRRDFile $fn $opt $proc $id {} $fn } } saods9/ds9/library/nsvr.tcl000644 000765 000000 00000013504 12737545120 016234 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc NSVRServer {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,image)} { puts stderr "NSVRServer $varname" } global nres global pnres ARStatus $varname "Looking up $var(name)" set ss [split $pnres(server) {-}] switch -- [lindex $ss 1] { eso - sao {set var(url) {http://vizier.cfa.harvard.edu/viz-bin/nph-sesame}} cds {set var(url) {http://cdsweb.u-strasbg.fr/cgi-bin/nph-sesame}} } append ${varname}(url) {/-ox} switch -- [lindex $ss 0] { ned {append ${varname}(url) {/N}} simbad {append ${varname}(url) {/S}} vizier {append ${varname}(url) {/V}} } set var(query) [http::formatQuery $var(name)] NSVRGetURL $varname $var(url) } proc NSVRGetURL {varname url} { upvar #0 $varname var global $varname global debug if {$debug(tcl,image)} { puts stderr "NSVRGetURL $varname $url $var(query)" } set var(ra) {} set var(dec) {} set var(pos) {} global ihttp # -query will not work, do it manually if {$var(sync)} { if {![catch {set var(token) [http::geturl $url?$var(query) \ -timeout $ihttp(timeout) \ -headers "[ProxyHTTP]"] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 NSVRGetURLFinish $varname $var(token) } else { ARError $varname "[msgcat::mc {Unable to locate URL}] $url" } } else { if {![catch {set var(token) [http::geturl $url?$var(query) \ -timeout $ihttp(timeout) \ -command \ [list NSVRGetURLFinish $varname] \ -headers "[ProxyHTTP]"] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 } else { ARError $varname "[msgcat::mc {Unable to locate URL}] $url" } } } proc NSVRGetURLFinish {varname token} { upvar #0 $varname var global $varname global debug if {$debug(tcl,image)} { puts stderr "NSVRGetURLFinish $varname" } if {!($var(active))} { ARCancelled $varname return } upvar #0 $token t # Code set code [http::ncode $token] # Meta set meta $t(meta) # Log it HTTPLog $token # Result? switch -- $code { 200 - 203 - 404 - 503 {NSVRSESAME $varname} 201 - 300 - 301 - 302 - 303 - 305 - 307 { foreach {name value} $meta { if {[regexp -nocase ^location$ $name]} { global debug if {$debug(tcl,image)} { puts stderr "NSVRGetURLFinish redirect $code to $value" } # clean up and resubmit http::cleanup $token unset var(token) # strip query from url set value [lindex [split $value {?}] 0] NSVRGetURL $varname $value } } } default {ARError $varname "[msgcat::mc {Error code was returned}] $code"} } } proc NSVRSESAME {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,image)} { puts stderr "NSVRSESAME $varname" } set pp [xml::parser \ -characterdatacommand [list NSVRSESAMECharCB $varname]\ -elementstartcommand [list NSVRSESAMEElemStartCB $varname] \ -elementendcommand [list NSVRSESAMEElemEndCB $varname] \ -ignorewhitespace 1 \ ] set var(parse) {} if {[catch {$pp parse [http::data $var(token)]} err]} { $pp free NSVRParse $varname {} {} return } switch -- $var(skyformat) { degrees { if {$var(ra) != {} && $var(dec) != {}} { NSVRParse $varname $var(ra) $var(dec) } else { NSVRParse $varname {} {} } } sexagesimal { if {$var(pos) != {}} { # can have extra space chars, must clean up set ss [split [string trim $var(pos)]] NSVRParse $varname [lindex $ss 0] [lindex $ss end] } else { NSVRParse $varname {} {} } } } } proc NSVRSESAMECharCB {t data} { upvar #0 $t T global $t set state [lindex $T(parse) end] set prev [lindex $T(parse) end-1] switch -- $state { jpos { set T(pos) $data } jradeg { set T(ra) $data } jdedeg { set T(dec) $data } } return {} } proc NSVRSESAMEElemStartCB {t name attlist args} { upvar #0 $t T global $t lappend ${t}(parse) $name return {} } proc NSVRSESAMEElemEndCB {t name args} { upvar #0 $t T global $t set ${t}(parse) [lreplace $T(parse) end end] return {} } proc NSVRParse {varname x y} { upvar #0 $varname var global $varname global debug if {$debug(tcl,image)} { puts stderr "NSVRParse $varname $x $y" } set var(x) $x set var(y) $y if {($var(x) == {}) || ($var(y) == {})} { set var(x) {} set var(y) {} ARStatus $varname "$var(name) not found" ARReset $varname } else { if {$var(proc,next) != {}} { if {[info exists var(token)]} { http::cleanup $var(token) unset var(token) } eval $var(proc,next) $varname } else { ARDone $varname } } } proc NSVRServerMenu {varname} { upvar #0 $varname var global $varname $var(mb) add cascade -label [msgcat::mc {Name Server}] -menu $var(mb).name menu $var(mb).name NSVRServerMenuItems $var(mb).name } proc NSVRServerMenuItems {mm} { global nres $mm add radiobutton -label {NED@SAO} -variable pnres(server) \ -value ned-sao $mm add radiobutton -label {NED@CDS} -variable pnres(server) \ -value ned-cds $mm add separator $mm add radiobutton -label {SIMBAD@SAO} -variable pnres(server) \ -value simbad-sao $mm add radiobutton -label {SIMBAD@CDS} -variable pnres(server) \ -value simbad-cds $mm add separator $mm add radiobutton -label {VIZIER@SAO} -variable pnres(server) \ -value vizier-sao $mm add radiobutton -label {VIZIER@CDS} -variable pnres(server) \ -value vizier-cds } saods9/ds9/library/nvss.tcl000644 000765 000000 00000011113 12741011522 016214 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc NVSSDef {} { global nvss global invss set invss(top) .nvss set invss(mb) .nvssmb set nvss(sky) fk5 set nvss(rformat) arcmin set nvss(width) 15 set nvss(height) 15 set nvss(mode) new set nvss(save) 0 set nvss(survey) nvss } proc NVSSDialog {} { global nvss global invss global wcs if {[winfo exists $invss(top)]} { raise $invss(top) return } set varname dnvss upvar #0 $varname var global $varname set var(top) $invss(top) set var(mb) $invss(mb) set var(sky) $nvss(sky) set var(skyformat) $wcs(skyformat) set var(rformat) $nvss(rformat) set var(width) $nvss(width) set var(height) $nvss(height) # not used set var(width,pixels) 300 set var(height,pixels) 300 set var(mode) $nvss(mode) set var(save) $nvss(save) set var(survey) $nvss(survey) set w $var(top) IMGSVRInit $varname "NVSS [msgcat::mc {Server}]" \ NVSSExec NVSSAck ARDone ARError IMGSVRUpdate $varname } proc NVSSExec {varname} { upvar #0 $varname var global $varname if {$var(save)} { set var(fn) [SaveFileDialog savefitsfbox] if {$var(fn) == {}} { ARDone $varname return } } else { set var(fn) [tmpnam {.fits}] } # skyformat switch -- $var(skyformat) { degrees { set xx [uformat d h: $var(x)] set yy [uformat d d: $var(y)] } sexagesimal { set xx $var(x) set yy $var(y) } } regsub -all {:} $xx { } xx regsub -all {:} $yy { } yy # size - degrees switch -- $var(rformat) { degrees { set ww [expr $var(width)] set hh [expr $var(height)] } arcmin { set ww [expr $var(width)/60.] set hh [expr $var(height)/60.] } arcsec { set ww [expr $var(width)/60./60.] set hh [expr $var(height)/60./60.] } } set var(query) [http::formatQuery submit Submit! Equinox J2000 PolType I RA $xx Dec $yy Size "$ww $hh" Cells "15.0 15.0" MAPROJ SIN Type image/x-fits rotate "0.0"] # set var(query) [http::formatQuery .submit "Extract the Cutout" RA "$xx $yy" Equinox J2000 ImageSize $rr MaxInt 10 .cgifields ImageType ImageType "FITS Image"] set url "http://www.cv.nrao.edu/cgi-bin/postage.pl" IMGSVRGetURL $varname $url } proc NVSSAck {varname} { upvar #0 $varname var global $varname set msg {Acknowledgments for the NRAO VLA Sky Survey This major undertaking has received the generous technical and scientific support of many individuals. The NRAO staff has provided extremely valuable assistance in many aspects of the observations themselves and in the area of software support; in particular, we are grateful to Rick Perley, Ken Sowinski, Barry Clark, and Bill Cotton in this regard. The support of the NRAO Director, Paul van den Bout, and the yeoman service provided by Frazer Owen as Chair of the Survey Oversight Committee are also greatly appreciated. We also thank the members of the Oversight Committee (Ken Chambers, Eric Feigelson, Jackie Hewitt, Gillian Knapp, and Rogier Windhorst) for their time and wise counsel in this enterprise. Acknowledgment is also due our colleagues who are involved in the ongoing NVSS effort, including Richard McMahon and Isobel Hook. This work is supported in part under the auspices of the Department of Energy by Lawrence Livermore National Laboratory under contract No. W-7405-ENG-48 and the Institute for Geophysics and Planetary Physics, whose director Charles Alcock has been particularly supportive. We also acknowledge a generous planning grant from the CalSpace Institute; support from the STScI archive group, STScI director Bob Williams, and the STScI Director's Discretionary Research Fund; computing resources from Columbia University; a grant from the National Science Foundation; a gift of computing equipment from Sun Microsystems; a NATO travel grant to support our collaboration with Richard McMahon; and an award from the National Geographic Society which, in the spirit of their support 40 years ago for the Palomar Observatory Sky Survey, will be providing funds to continue our charting of the Universe. } SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \ 80 40 insert top $msg } # Process Cmds proc ProcessNVSSCmd {varname iname} { upvar $varname var upvar $iname i NVSSDialog IMGSVRProcessCmd $varname $iname dnvss } proc ProcessSendNVSSCmd {proc id param} { NVSSDialog IMGSVRProcessSendCmd $proc $id $param dnvss } saods9/ds9/library/open.tcl000644 000765 000000 00000005336 12705445647 016221 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc Open {fn format layer mode sys} { if {$fn == {}} { return } StartLoad switch -- $format { fits {LoadFitsFile $fn $layer $mode} mosaicimagewcs {LoadMosaicImageWCSFile $fn $layer $sys} mosaicimageiraf {LoadMosaicImageIRAFFile $fn $layer} mosaicimagewfpc2 {LoadMosaicImageWFPC2File $fn} mosaicwcs {LoadMosaicWCSFile $fn $layer $sys} mosaiciraf {LoadMosaicIRAFFile $fn $layer} mecube {LoadMECubeFile $fn} multiframe {LoadMultiFrameFile $fn} rgbimage {LoadRGBImageFile $fn} rgbcube {LoadRGBCubeFile $fn} } FinishLoad } # Support proc OpenDialog {format {layer {}} {mode {}}} { global current global fitsfbox set fn [OpenFileDialog fitsfbox] # just in case (could be invoked via a menu keyshortcut) if {$current(frame) == {}} { CreateFrame } set sys wcs if {$fn != {}} { set ok 1 switch -- $format { mosaicimagewcs {set ok [MosaicWCSDialog sys]} mosaicwcs {set ok [MosaicWCSDialog sys]} } if {$ok} { switch -- $layer { mask {set ok [MaskLoad]} } } if {$ok} { Open $fn $format $layer $mode $sys } } } proc MosaicWCSDialog {varname} { upvar $varname var global ed set w {.wcs} set ed(ok) 0 set ed(sys) wcs set ed(label) WCS DialogCreate $w [msgcat::mc {Load Mosaic}] ed(ok) # Param set f [ttk::frame $w.param] ttk::label $f.title -text [msgcat::mc {Select Coordinate System }] ttk::menubutton $f.sys -textvariable ed(label) \ -menu $f.sys.m -width 10 menu $f.sys.m $f.sys.m add radiobutton -label [msgcat::mc {WCS}] \ -variable ed(sys) -value "wcs" -command [list set ed(label) WCS] $f.sys.m add separator foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} { $f.sys.m add radiobutton -variable ed(sys) \ -label "[msgcat::mc {WCS}] $l" \ -value "wcs$l" \ -command [list set ed(label) "[msgcat::mc {WCS}] $l"] } grid $f.title $f.sys # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w if {$ed(ok)} { set var $ed(sys) } set rr $ed(ok) unset ed return $rr } saods9/ds9/library/pagesetup.tcl000644 000765 000000 00000014503 12705445647 017251 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PSPageSetup {} { global ps global ed set ed(ok) 0 array set ed [array get ps] set w {.pagesetup} DialogCreate $w [msgcat::mc {Page Setup}] ed(ok) # Layout set f [ttk::labelframe $w.layout -text {Layout}] ttk::label $f.torient -text [msgcat::mc {Orientation}] ttk::radiobutton $f.portrait -text [msgcat::mc {Portrait}] \ -variable ed(orient) -value portrait ttk::radiobutton $f.landscape -text [msgcat::mc {Landscape}] \ -variable ed(orient) -value landscape ttk::label $f.tscale -text [msgcat::mc {Scale}] ttk::entry $f.scale -textvariable ed(scale) -width 7 ttk::label $f.uscale -text {%} grid $f.torient $f.portrait $f.landscape -padx 2 -pady 2 -sticky w grid $f.tscale $f.scale $f.uscale -padx 2 -pady 2 -sticky w # Page Size set f [ttk::labelframe $w.size -text {Page Size}] ttk::radiobutton $f.letter -text "[msgcat::mc {Letter}](8.5 x 11 in)"\ -variable ed(size) -value letter ttk::radiobutton $f.legal -text "[msgcat::mc {Legal}](8.5 x 14 in)"\ -variable ed(size) -value legal ttk::radiobutton $f.tabloid -text "[msgcat::mc {Tabloid}](11 x 17 in)"\ -variable ed(size) -value tabloid ttk::radiobutton $f.poster -text "[msgcat::mc {Poster}](36 x 48 in)"\ -variable ed(size) -value poster ttk::radiobutton $f.a4 -text {A4(210 x 297 mm)} \ -variable ed(size) -value a4 ttk::radiobutton $f.other -text "[msgcat::mc {Other}] (inches)" \ -variable ed(size) -value other ttk::radiobutton $f.othermm -text "[msgcat::mc {Other}] (mm)" \ -variable ed(size) -value othermm ttk::label $f.title3 -text [msgcat::mc {Width}] ttk::entry $f.width -textvariable ed(width) -width 10 ttk::label $f.title4 -text [msgcat::mc {Height}] ttk::entry $f.height -textvariable ed(height) -width 10 grid $f.letter -padx 2 -pady 2 -sticky w grid $f.legal -padx 2 -pady 2 -sticky w grid $f.tabloid -padx 2 -pady 2 -sticky w grid $f.poster -padx 2 -pady 2 -sticky w grid $f.a4 -padx 2 -pady 2 -sticky w grid $f.other $f.title3 $f.width -padx 2 -pady 2 -sticky w grid $f.othermm $f.title4 $f.height -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini grid $w.layout -sticky news grid $w.size -sticky news grid $w.buttons -sticky ew grid rowconfigure $w 0 -weight 1 grid rowconfigure $w 1 -weight 1 grid columnconfigure $w 0 -weight 1 DialogCenter $w DialogWait $w ed(ok) $w.buttons.ok DialogDismiss $w if {$ed(ok)} { array set ps [array get ed] } set rr $ed(ok) unset ed return $rr } proc PrefsDialogPageSetup {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Page Setup}] lappend dprefs(tabs) [ttk::frame $w.pagesetup] # Layout set f [ttk::labelframe $w.pagesetup.layout -text {Layout}] ttk::label $f.torient -text [msgcat::mc {Orientation}] ttk::radiobutton $f.portrait -text [msgcat::mc {Portrait}] \ -variable pps(orient) -value portrait ttk::radiobutton $f.landscape -text [msgcat::mc {Landscape}] \ -variable pps(orient) -value landscape ttk::label $f.tscale -text [msgcat::mc {Scale}] ttk::entry $f.scale -textvariable pps(scale) -width 7 ttk::label $f.uscale -text {%} grid $f.torient $f.portrait $f.landscape -padx 2 -pady 2 -sticky w grid $f.tscale $f.scale $f.uscale -padx 2 -pady 2 -sticky w # Page Size set f [ttk::labelframe $w.pagesetup.size -text {Page Size}] ttk::radiobutton $f.letter -text "[msgcat::mc {Letter}](8.5 x 11 in)"\ -variable pps(size) -value letter ttk::radiobutton $f.legal -text "[msgcat::mc {Legal}](8.5 x 14 in)"\ -variable pps(size) -value legal ttk::radiobutton $f.tabloid -text "[msgcat::mc {Tabloid}](11 x 17 in)"\ -variable pps(size) -value tabloid ttk::radiobutton $f.poster -text "[msgcat::mc {Poster}](36 x 48 in)"\ -variable pps(size) -value poster ttk::radiobutton $f.a4 -text {A4(210 x 297 mm)} \ -variable pps(size) -value a4 ttk::radiobutton $f.other -text "[msgcat::mc {Other}] (inches)" \ -variable pps(size) -value other ttk::radiobutton $f.othermm -text "[msgcat::mc {Other}] (mm)" \ -variable pps(size) -value othermm ttk::label $f.title3 -text [msgcat::mc {Width}] ttk::entry $f.width -textvariable pps(width) -width 10 ttk::label $f.title4 -text [msgcat::mc {Height}] ttk::entry $f.height -textvariable pps(height) -width 10 grid $f.letter -padx 2 -pady 2 -sticky w grid $f.legal -padx 2 -pady 2 -sticky w grid $f.tabloid -padx 2 -pady 2 -sticky w grid $f.poster -padx 2 -pady 2 -sticky w grid $f.a4 -padx 2 -pady 2 -sticky w grid $f.other $f.title3 $f.width -padx 2 -pady 2 -sticky w grid $f.othermm $f.title4 $f.height -padx 2 -pady 2 -sticky w pack $w.pagesetup.layout $w.pagesetup.size \ -side top -fill both -expand true } # Process Cmds proc ProcessPageSetupCmd {varname iname} { upvar $varname var upvar $iname i global ds9 switch $ds9(wm) { x11 - win32 {ProcessPSPageSetupCmd var i} aqua { ProcessPSPageSetupCmd var i # MacOSXPageSetup } wwin32 {Win32PageSetup} } } proc ProcessSendPageSetupCmd {proc id param} { global ds9 switch $ds9(wm) { x11 {ProcessSendPSPageSetupCmd $proc $id $param} aqua - win32 {} } } proc ProcessPSPageSetupCmd {varname iname} { upvar $varname var upvar $iname i global ps switch -- [string tolower [lindex $var $i]] { orientation - orient {incr i; set ps(orient) [string tolower [lindex $var $i]]} pagescale - scale {incr i; set ps(scale) [lindex $var $i]} pagesize - size {incr i; set ps(size) [string tolower [lindex $var $i]] } } } proc ProcessSendPSPageSetupCmd {proc id param} { global ps switch -- [string tolower $param] { orientation - orient {$proc $id "$ps(orient)\n"} pagescale - scale {$proc $id "$ps(scale)\n"} pagesize - size {$proc $id "$ps(size)\n"} } } saods9/ds9/library/panner.tcl000644 000765 000000 00000014373 12750173644 016537 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CreatePanner {} { global ipanner global ds9 set ds9(panner) [canvas $ds9(panel).pan -width $ipanner(size) \ -height $ipanner(size) \ -relief groove \ -borderwidth 2 \ -highlightthickness 0 \ -insertofftime 0 \ -takefocus 0] $ds9(panner) create panner$ds9(visual) \ -width $ipanner(size) \ -height $ipanner(size) \ -command panner \ -tag panner \ -helvetica $ds9(helvetica) \ -courier $ds9(courier) \ -times $ds9(times) } proc PannerDef {} { global ipanner global ppanner set ipanner(size) 128 # prefs only set ppanner(compass) 1 } proc InitPanner {} { global ds9 global ppanner # other bindings BindEventsPanner bind $ds9(panner) [list NextFrame] bind $ds9(panner) [list PrevFrame] switch $ds9(wm) { x11 {bind $ds9(panner) [list PrevFrame]} aqua - win32 {} } switch $ds9(wm) { x11 - aqua { bind $ds9(panner) [list focus $ds9(panner)] bind $ds9(panner) [list focus {}] } win32 {} } # compass panner compass $ppanner(compass) } proc BindEventsPanner {} { global ds9 $ds9(panner) bind panner [list EnterPanner %x %y] $ds9(panner) bind panner [list LeavePanner] $ds9(panner) bind panner [list MotionPanner %x %y] $ds9(panner) bind panner [list Button1Panner %x %y] $ds9(panner) bind panner [list Motion1Panner %x %y] $ds9(panner) bind panner [list Release1Panner %x %y] switch $ds9(wm) { x11 - win32 { $ds9(panner) bind panner \ [list Release2Panner %x %y] } aqua { $ds9(panner) bind panner \ [list Release2Panner %x %y] } } $ds9(panner) bind panner [list ArrowKeyPanner 0 -1] $ds9(panner) bind panner [list ArrowKeyPanner 0 1] $ds9(panner) bind panner [list ArrowKeyPanner -1 0] $ds9(panner) bind panner [list ArrowKeyPanner 1 0] } proc UnBindEventsPanner {} { global ds9 $ds9(panner) bind panner {} $ds9(panner) bind panner {} $ds9(panner) bind panner {} $ds9(panner) bind panner {} $ds9(panner) bind panner {} $ds9(panner) bind panner {} switch $ds9(wm) { x11 - win32 {$ds9(panner) bind panner {}} aqua {$ds9(panner) bind panner {}} } $ds9(panner) bind panner {} $ds9(panner) bind panner {} $ds9(panner) bind panner {} $ds9(panner) bind panner {} } proc EnterPanner {x y} { global ds9 global current global debug if {$debug(tcl,events)} { puts stderr "EnterPanner" } switch $ds9(wm) { x11 - aqua { focus $ds9(panner) $ds9(panner) focus panner } win32 {} } if {$current(frame) != {}} { EnterInfoBox $current(frame) UpdateInfoBox $current(frame) $x $y panner UpdatePixelTableDialog $current(frame) $x $y panner UpdateGraph $current(frame) $x $y panner } } proc LeavePanner {} { global ds9 global debug if {$debug(tcl,events)} { puts stderr "LeavePanner" } panner highlite off switch $ds9(wm) { x11 - aqua { $ds9(panner) focus {} focus {} } win32 {} } LeaveInfoBox PixelTableClearDialog ClearGraphData } proc MotionPanner {x y} { global current global debug if {$debug(tcl,events)} { puts stderr "MotionPanner" } panner highlite $x $y if {$current(frame) != {}} { UpdateColormapLevelMosaic $current(frame) $x $y panner UpdateInfoBox $current(frame) $x $y panner UpdatePixelTableDialog $current(frame) $x $y panner UpdateGraph $current(frame) $x $y panner } } proc Button1Panner {x y} { global ds9 global debug if {$debug(tcl,events)} { puts stderr "Button1Panner" } panner pan begin $x $y } proc Motion1Panner {x y} { global ds9 global current global debug if {$debug(tcl,events)} { puts stderr "Motion1Panner" } panner pan motion $x $y if {$current(frame) != {}} { UpdateColormapLevelMosaic $current(frame) $x $y panner UpdateInfoBox $current(frame) $x $y panner UpdatePixelTableDialog $current(frame) $x $y panner UpdateGraph $current(frame) $x $y panner } } proc Release1Panner {x y} { global ds9 global current global debug if {$debug(tcl,events)} { puts stderr "Release1Panner" } if {$current(frame) != {}} { panner pan end $x $y $current(frame) pan bbox [panner get bbox] UpdateColormapLevelMosaic $current(frame) $x $y panner UpdateInfoBox $current(frame) $x $y panner UpdatePixelTableDialog $current(frame) $x $y panner UpdateGraph $current(frame) $x $y panner LockFrameCurrent UpdateGraphXAxis $current(frame) UpdatePanZoomDialog SAMPSendCoordPointAtSkyCmd $current(frame) } } proc Release2Panner {x y} { global ds9 global current if {$current(frame) != {}} { panner pan to $x $y $current(frame) pan bbox [panner get bbox] UpdateColormapLevelMosaic $current(frame) $x $y panner UpdateInfoBox $current(frame) $x $y panner UpdatePixelTableDialog $current(frame) $x $y panner UpdateGraph $current(frame) $x $y panner LockFrameCurrent UpdateGraphXAxis $current(frame) UpdatePanZoomDialog SAMPSendCoordPointAtSkyCmd $current(frame) } } proc ArrowKeyPanner {x y} { global current panner warp $x $y SAMPSendCoordPointAtSkyCmd $current(frame) } proc PannerBackup {ch} { global ppanner puts $ch "panner compass $ppanner(compass)" } # Prefs proc PrefsDialogPanner {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Panner}] lappend dprefs(tabs) [ttk::frame $w.panner] set f [ttk::labelframe $w.panner.param -text [msgcat::mc {Panner}]] ttk::checkbutton $f.compass \ -text [msgcat::mc {Show Compass}] \ -variable ppanner(compass) -command PrefsPannerCompass grid $f.compass -padx 2 -pady 2 -sticky w pack $f -side top -fill both -expand true } proc PrefsPannerCompass {} { global ppanner panner compass $ppanner(compass) } saods9/ds9/library/panzoom.tcl000644 000765 000000 00000045336 12750203255 016732 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PanZoomDef {} { global panzoom global ipanzoom global ppanzoom global tcl_platform set ipanzoom(top) .pz set ipanzoom(mb) .pzmb set ipanzoom(speed) 512 set ipanzoom(x) 0 set ipanzoom(last) {0 0} set ipanzoom(state) 1 set panzoom(preserve) 0 set panzoom(lock) none # set via wcs() set panzoom(system) wcs set panzoom(sky) fk5 set panzoom(skyformat) degrees set ppanzoom(preserve) $panzoom(preserve) # prefs only set ppanzoom(mode) click set ppanzoom(wheel) 1 set ppanzoom(wheel,factor) 1.2 # special case switch -- $tcl_platform(os) { Darwin { switch [lindex [split $tcl_platform(osVersion) {.}] 0] { 11 {set ppanzoom(wheel,factor) 1.01} } } } } # Pan proc CenterCurrentFrame {} { global current CenterFrame $current(frame) } proc CenterAllFrame {} { global ds9 foreach ff $ds9(frames) { CenterFrame $ff } } proc CenterFrame {which} { if {$which != {}} { $which center UpdatePan $which UpdateZoomMenu } } proc Pan {x y sys {sky {}}} { global current if {$current(frame) != {}} { switch -- $sys { canvas {$current(frame) pan $x $y} default {$current(frame) pan $sys $sky $x $y} } UpdatePan $current(frame) } } proc PanTo {x y sys sky} { global current PanToFrame $current(frame) $x $y $sys $sky } proc PanToFrame {which x y sys sky} { global current if {$which != {}} { $which pan to $sys $sky $x $y UpdatePan $which } } proc PanButton {which x y} { global ppanzoom switch -- $ppanzoom(mode) { click {} drag {$which pan motion begin $x $y} panzoom {} } } proc PanMotion {which x y} { global ppanzoom switch -- $ppanzoom(mode) { click {} drag {$which pan motion $x $y} panzoom {} } } proc PanRelease {which x y} { global panzoom global ipanzoom global ppanzoom global current switch -- $ppanzoom(mode) { click {$which pan to $x $y} drag {$which pan motion end $x $y} panzoom { if {$ipanzoom(last) != "$x $y"} { set ipanzoom(state) 1 } switch -- $ipanzoom(state) { 1 { $which pan to $x $y $which update now set cc [$which get cursor canvas] set xx [expr int([lindex $cc 0])] set yy [expr int([lindex $cc 1])] $which warp to $xx $yy set ipanzoom(last) "$xx $yy" set z [$current(frame) get zoom] if {$z < 2} { set ipanzoom(state) 2 } elseif {$z < 4} { set ipanzoom(state) 3 } elseif {$z < 8} { set ipanzoom(state) 4 } else { set ipanzoom(state) 5 } } 2 { $which zoom to 2 2 about $x $y set ipanzoom(state) 3 } 3 { $which zoom to 4 4 about $x $y set ipanzoom(state) 4 } 4 { $which zoom to 8 8 about $x $y set ipanzoom(state) 5 } 5 { $which zoom to 1 1 about $x $y set ipanzoom(state) 2 } } if {$which == $current(frame)} { set current(zoom) [$current(frame) get zoom] } } } UpdatePan $which } proc PreservePan {} { global current global panzoom if {$current(frame) != {}} { $current(frame) pan preserve $panzoom(preserve) } } proc UpdatePan {which} { LockFrame $which UpdateGraphXAxis $which UpdatePanZoomDialog SAMPSendCoordPointAtSkyCmd $which } # Zoom proc ZoomToFit {} { global current global grid if {$current(frame) != {}} { # we need to update the grid because titles are zoom dependant if {$grid(view) && $grid(type) == "publication"} { # recalculate to make room for labels $current(frame) zoom to fit .8 set current(zoom) [$current(frame) get zoom] } else { $current(frame) zoom to fit set current(zoom) [$current(frame) get zoom] } UpdateZoom $current(frame) } } proc ChangeZoom {} { global current if {$current(frame) != {}} { $current(frame) zoom to $current(zoom) UpdateZoom $current(frame) } } proc Zoom {zx zy} { global current if {$current(frame) != {}} { ZoomFrame $current(frame) $zx $zy } } proc ZoomFrame {which zx zy} { global current $which zoom $zx $zy if {$which == $current(frame)} { set current(zoom) [$current(frame) get zoom] } UpdateZoom $which } proc ZoomButton {which x y} { global current $which zoom 2 2 about $x $y if {$current(frame) == $which} { set current(zoom) [$current(frame) get zoom] } UpdateZoom $which } proc ZoomShift {which} { global current $which zoom .5 .5 if {$current(frame) == $which} { set current(zoom) [$current(frame) get zoom] } UpdateZoom $which } proc UpdateZoom {which} { LockFrame $which UpdateGraphXAxis $which UpdatePanZoomDialog GridUpdateZoom RefreshInfoBox $which } # Orient proc ChangeOrient {} { global current if {$current(frame) != {}} { $current(frame) orient $current(orient) UpdateRotate $current(frame) } } # Rotate proc Rotate {value} { global current if {$current(frame) != {}} { $current(frame) rotate $value set current(rotate) [$current(frame) get rotate] UpdateRotate $current(frame) } } proc ChangeRotate {} { global current if {$current(frame) != {}} { $current(frame) rotate to $current(rotate) UpdateRotate $current(frame) } } proc RotateButton {which x y} { global ipanzoom $which rotate motion begin set ipanzoom(x) $x } proc RotateMotion {which x y} { global current global ipanzoom global icursor $which rotate motion [expr double($ipanzoom(x)-$x)/$ipanzoom(speed) * 180.] if {$current(frame) == $which} { set current(rotate) [$which get rotate] } RefreshInfoBox $which } proc RotateRelease {which x y} { global current $which rotate motion end if {$current(frame) == $which} { set current(rotate) [$which get rotate] } UpdateRotate $which } proc UpdateRotate {which} { LockFrame $which UpdateGraphXAxis $which UpdatePanZoomDialog RefreshInfoBox $which } proc PanZoomDialog {} { global panzoom global ipanzoom global dpanzoom global ds9 global current # see if we already have a window visible if {[winfo exists $ipanzoom(top)]} { raise $ipanzoom(top) return } # create the window set w $ipanzoom(top) set mb $ipanzoom(mb) Toplevel $w $mb 6 [msgcat::mc {Pan Zoom Rotate Parameters}] \ PanZoomDestroyDialog # for CoordMenuButton set panzoom(frame) $current(frame) $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit $mb add cascade -label [msgcat::mc {Pan}] -menu $mb.pan $mb add cascade -label [msgcat::mc {Zoom}] -menu $mb.zoom $mb add cascade -label [msgcat::mc {Orientation}] -menu $mb.orient $mb add cascade -label [msgcat::mc {Rotate}] -menu $mb.rotate menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] \ -command PanZoomApplyDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command PanZoomDestroyDialog EditMenu $mb ipanzoom menu $mb.pan $mb.pan add command -label [msgcat::mc {Center Image}] \ -command CenterCurrentFrame $mb.pan add checkbutton -label [msgcat::mc {Align}] \ -variable current(align) -command AlignWCSFrame menu $mb.zoom $mb.zoom add command -label [msgcat::mc {Zoom In}] -command {Zoom 2 2} $mb.zoom add command -label [msgcat::mc {Zoom Out}] -command {Zoom .5 .5} $mb.zoom add command -label [msgcat::mc {Zoom Fit}] -command ZoomToFit $mb.zoom add separator $mb.zoom add radiobutton -label "[msgcat::mc {Zoom}] 1/32" \ -variable current(zoom) -value { 0.03125 0.03125 } -command ChangeZoom $mb.zoom add radiobutton -label "[msgcat::mc {Zoom}] 1/16" \ -variable current(zoom) -value { 0.0625 0.0625 } -command ChangeZoom $mb.zoom add radiobutton -label "[msgcat::mc {Zoom}] 1/8" \ -variable current(zoom) -value { 0.125 0.125 } -command ChangeZoom $mb.zoom add radiobutton -label "[msgcat::mc {Zoom}] 1/4" \ -variable current(zoom) -value { 0.25 0.25 } -command ChangeZoom $mb.zoom add radiobutton -label "[msgcat::mc {Zoom}] 1/2" \ -variable current(zoom) -value { 0.5 0.5 } -command ChangeZoom $mb.zoom add radiobutton -label "[msgcat::mc {Zoom}] 1" \ -variable current(zoom) -value { 1 1 } -command ChangeZoom $mb.zoom add radiobutton -label "[msgcat::mc {Zoom}] 2" \ -variable current(zoom) -value { 2 2 } -command ChangeZoom $mb.zoom add radiobutton -label "[msgcat::mc {Zoom}] 4" \ -variable current(zoom) -value { 4 4 } -command ChangeZoom $mb.zoom add radiobutton -label "[msgcat::mc {Zoom}] 8" \ -variable current(zoom) -value { 8 8 } -command ChangeZoom $mb.zoom add radiobutton -label "[msgcat::mc {Zoom}] 16" \ -variable current(zoom) -value { 16 16 } -command ChangeZoom $mb.zoom add radiobutton -label "[msgcat::mc {Zoom}] 32" \ -variable current(zoom) -value { 32 32 } -command ChangeZoom menu $mb.orient $mb.orient add radiobutton -label [msgcat::mc {None}] \ -variable current(orient) -value none -command ChangeOrient $mb.orient add radiobutton -label "[msgcat::mc {Invert}] X" \ -variable current(orient) -value x -command ChangeOrient $mb.orient add radiobutton -label "[msgcat::mc {Invert}] Y" \ -variable current(orient) -value y -command ChangeOrient $mb.orient add radiobutton -label "[msgcat::mc {Invert}] XY" \ -variable current(orient) -value xy -command ChangeOrient menu $mb.rotate $mb.rotate add radiobutton -label "0 [msgcat::mc {Degrees}]" \ -variable current(rotate) -value 0 -command ChangeRotate $mb.rotate add radiobutton -label "90 [msgcat::mc {Degrees}]" \ -variable current(rotate) -value 90 -command ChangeRotate $mb.rotate add radiobutton -label "180 [msgcat::mc {Degrees}]" \ -variable current(rotate) -value 180 -command ChangeRotate $mb.rotate add radiobutton -label "270 [msgcat::mc {Degrees}]" \ -variable current(rotate) -value 270 -command ChangeRotate # Param set f [ttk::frame $w.param] ttk::label $f.zoomtitle -text [msgcat::mc {Zoom}] ttk::entry $f.zoomx -textvariable dpanzoom(zoom,x) -width 14 ttk::entry $f.zoomy -textvariable dpanzoom(zoom,y) -width 14 ttk::label $f.rottitle -text [msgcat::mc {Rotate}] ttk::entry $f.rotvalue -textvariable dpanzoom(rotate) -width 14 ttk::label $f.rottitle2 -text [msgcat::mc {Degrees}] ttk::label $f.pantitle -text [msgcat::mc {Pan}] ttk::entry $f.panx -textvariable dpanzoom(x) -width 14 ttk::entry $f.pany -textvariable dpanzoom(y) -width 14 set dpanzoom(cb) $f.pansystem CoordMenuButton $dpanzoom(cb) panzoom system 1 sky skyformat \ UpdatePanZoomDialog grid $f.zoomtitle $f.zoomx $f.zoomy -padx 2 -pady 2 grid $f.rottitle $f.rotvalue $f.rottitle2 -padx 2 -pady 2 -sticky w grid $f.pantitle $f.panx $f.pany $f.pansystem -padx 2 -pady 2 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] -command PanZoomApplyDialog ttk::button $f.close -text [msgcat::mc {Close}] \ -command PanZoomDestroyDialog pack $f.apply $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true $w.param.zoomx select range 0 end UpdatePanZoomDialog } proc PanZoomApplyDialog {} { global panzoom global ipanzoom global dpanzoom global current if {$current(frame) != {}} { set current(zoom) "$dpanzoom(zoom,x) $dpanzoom(zoom,y)" set current(rotate) $dpanzoom(rotate) $current(frame) zoom to $current(zoom) about \ $panzoom(system) $panzoom(sky) $dpanzoom(x) $dpanzoom(y) $current(frame) rotate to $current(rotate) LockFrameCurrent UpdateGraphXAxis $current(frame) UpdatePanZoomDialog GridUpdateZoom RefreshInfoBox $current(frame) UpdateZoomMenu SAMPSendCoordPointAtSkyCmd $current(frame) } } proc PanZoomDestroyDialog {} { global ipanzoom global dpanzoom if {[winfo exists $ipanzoom(top)]} { destroy $ipanzoom(top) destroy $ipanzoom(mb) } unset dpanzoom } proc UpdatePanZoomMenu {} { # can be changed by wcs SetCoordSystem panzoom system sky skyformat } proc UpdatePanZoomDialog {} { global panzoom global ipanzoom global dpanzoom global current global debug if {$debug(tcl,update)} { puts stderr "UpdatePanZoomDialog" } if {![winfo exists $ipanzoom(top)]} { return } if {$current(frame) != {}} { set panzoom(frame) $current(frame) if {[$current(frame) has fits]} { # now make sure we have the coord systems AdjustCoordSystem panzoom system CoordMenuEnable $dpanzoom(cb).menu panzoom system 1 sky skyformat CoordMenuButtonCmd panzoom system sky {} } else { CoordMenuReset $dpanzoom(cb).menu panzoom system 1 sky skyformat } } if {$current(frame) != {}} { set zz [$current(frame) get zoom] set dpanzoom(zoom,x) [lindex $zz 0] set dpanzoom(zoom,y) [lindex $zz 1] set dpanzoom(rotate) [$current(frame) get rotate] set coord [$current(frame) get cursor $panzoom(system) \ $panzoom(sky) $panzoom(skyformat)] set dpanzoom(x) [lindex $coord 0] set dpanzoom(y) [lindex $coord 1] } else { set dpanzoom(zoom,x) {} set dpanzoom(zoom,y) {} set dpanzoom(rotate) {} set dpanzoom(x) {} set dpanzoom(y) {} } } # Other proc AlignWCSFrame {} { global current global ds9 if {$current(frame) != {}} { $current(frame) wcs align $current(align) LockFrameCurrent UpdateGraphXAxis $current(frame) UpdatePanZoomDialog } } proc MatchFrameCurrent {sys} { global current if {$current(frame) != {}} { MatchFrame $current(frame) $sys } } proc MatchFrame {which sys} { global ds9 global current # NO-make sure matrices have been updated # really messes up mousewheel events, just assume all is good # RealizeDS9 switch -- $sys { image - physical - amplifier - detector { set current(align) 0 $which wcs align 0 set pan [$which get cursor $sys] set zoom [$which get zoom] set rotate [$which get rotate] set orient [$which get orient] foreach ff $ds9(frames) { if {$ff != $which} { $ff pan to $sys $pan $ff zoom to $zoom $ff rotate to $rotate $ff orient $orient $ff wcs align 0 } } } wcs { set www [$which get wcs] set sys [lindex $www 0] set sky [lindex $www 1] if {[$which has wcs $sys]} { set current(align) 1 $which wcs align 1 set align [$which get wcs align pointer] set pan [$which get cursor $sys FK5] set zoom [$which get zoom] set rotate [$which get rotate] set orient [$which get orient] foreach ff $ds9(frames) { if {$ff != $which} { if {[$ff has wcs $sys]} { $ff pan to $sys FK5 $pan $ff zoom to $zoom $ff rotate to $rotate $ff orient $orient $ff wcs align $align } } } } } } } proc LockFrameCurrent {} { global current if {$current(frame) != {}} { LockFrame $current(frame) } } proc LockFrame {which} { global panzoom switch -- $panzoom(lock) { none {} default {MatchFrame $which $panzoom(lock)} } } # Backup proc PanZoomBackup {ch which} { puts $ch "$which pan preserve [$which get pan preserve]" puts $ch "$which pan to physical [$which get cursor physical]" puts $ch "$which zoom to [$which get zoom]" puts $ch "$which rotate to [$which get rotate]" puts $ch "$which orient [$which get orient]" puts $ch "$which wcs align [$which get wcs align]" } # Process Cmds proc ProcessPanCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized ProcessRealizeDS9 switch -- [string tolower [lindex $var $i]] { open {PanZoomDialog} close {PanZoomDestroyDialog} to { set x [lindex $var [expr $i+1]] set y [lindex $var [expr $i+2]] set sys [lindex $var [expr $i+3]] set sky [lindex $var [expr $i+4]] set format {} incr i 2 incr i [FixSpec sys sky format physical fk5 degrees] PanTo $x $y $sys $sky } default { set x [lindex $var [expr $i+0]] set y [lindex $var [expr $i+1]] set sys [lindex $var [expr $i+2]] set sky [lindex $var [expr $i+3]] set format {} incr i 1 incr i [FixSpec sys sky format physical fk5 degrees] Pan $x $y $sys $sky } } } proc ProcessSendPanCmd {proc id param} { global current set sys [lindex $param 0] set sky [lindex $param 1] set format [lindex $param 2] FixSpec sys sky format physical fk5 degrees if {$current(frame) != {}} { $proc $id "[$current(frame) get cursor $sys $sky $format]\n" } } proc ProcessZoomCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized ProcessRealizeDS9 global current switch -- [string tolower [lindex $var $i]] { open {PanZoomDialog} close {PanZoomDestroyDialog} in {Zoom 2 2} out {Zoom .5 .5} to { switch -- [string tolower [lindex $var [expr $i+1]]] { fit { ZoomToFit incr i } default { set z1 [lindex $var [expr $i+1]] set z2 [lindex $var [expr $i+2]] if {[string is double $z2] && $z2 != {}} { set current(zoom) " $z1 $z2 " incr i 2 } else { set current(zoom) " $z1 $z1 " incr i } ChangeZoom } } } default { set z1 [lindex $var $i] set z2 [lindex $var [expr $i+1]] if {[string is double $z2] && $z2 != {}} { Zoom $z1 $z2 incr i } else { Zoom $z1 $z1 } } } } proc ProcessSendZoomCmd {proc id param} { global current set z1 [lindex $current(zoom) 0] set z2 [lindex $current(zoom) 1] if {$z1 != $z2} { $proc $id "$current(zoom)\n" } else { $proc $id "$z1\n" } } proc ProcessOrientCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized ProcessRealizeDS9 global current switch -- [string tolower [lindex $var $i]] { open {PanZoomDialog} close {PanZoomDestroyDialog} default { set current(orient) [string tolower [lindex $var $i]] ChangeOrient } } } proc ProcessSendOrientCmd {proc id param} { global current $proc $id "$current(orient)\n" } proc ProcessRotateCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized ProcessRealizeDS9 global current switch -- [string tolower [lindex $var $i]] { open {PanZoomDialog} close {PanZoomDestroyDialog} to { set current(rotate) [lindex $var [expr $i+1]] ChangeRotate incr i } default {Rotate [lindex $var $i]} } } proc ProcessSendRotateCmd {proc id param} { global current $proc $id "$current(rotate)\n" } saods9/ds9/library/photo.tcl000644 000765 000000 00000013626 12705445647 016412 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ImportPhotoFile {fn mode} { global loadParam set loadParam(file,type) photo set loadParam(file,mode) $mode set loadParam(load,type) photo # find stdin if {[string range $fn 0 4] == "stdin" || [string range $fn 0 4] == "STDIN" || [string range $fn 0 0] == "-"} { fconfigure stdin -translation binary -encoding binary if {[catch {image create photo -data [read -nonewline stdin]} ph]} { Error [msgcat::mc {An error has occurred while reading image.}] return } set loadParam(file,name) stdin } else { if {[catch {image create photo -file $fn} ph]} { Error [msgcat::mc {An error has occurred while reading image.}] return } set loadParam(file,name) $fn } set loadParam(var,name) $ph # mask not supported set loadParam(load,layer) {} ProcessLoad image delete $ph } proc ImportPhotoAlloc {path fn mode} { global loadParam set loadParam(file,type) photo set loadParam(file,mode) $mode set loadParam(load,type) photo if {[catch {image create photo -file $path} ph]} { Error [msgcat::mc {An error has occurred while reading image.}] return } set loadParam(file,name) $fn set loadParam(var,name) $ph # mask not supported set loadParam(load,layer) {} ProcessLoad image delete $ph } proc ImportPhotoSocket {ch fn mode} { global loadParam set loadParam(file,type) photo set loadParam(file,mode) $mode set loadParam(load,type) photo set loadParam(file,name) $fn fconfigure $ch -translation binary -encoding binary if {[catch {image create photo -data [read $ch]} ph]} { Error [msgcat::mc {An error has occurred while reading image.}] return 0 } set loadParam(var,name) $ph # mask not supported set loadParam(load,layer) {} set rr [ProcessLoad 0] image delete $ph return $rr } proc ExportPhotoFile {fn format opt} { global export global current if {$fn == {} || $current(frame) == {}} { return } if {![$current(frame) has fits]} { return } if {[catch {image create photo} ph]} { Error [msgcat::mc {An error has occurred while creating image.}] return } $current(frame) save photo $ph set ff $format switch -- $format { jpeg { if {$opt == {}} { set opt $export(jpeg,quality) } set ff [list $format -quality $opt] } tiff { if {$opt == {}} { set opt $export(tiff,compress) } set ff [list $format -compression $opt] } } if {[catch {$ph write $fn -format $ff}]} { Error [msgcat::mc {An error has occurred while writing image.}] } image delete $ph } proc ExportPhotoSocket {ch format opt} { global export global current if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } if {[catch {image create photo} ph]} { Error [msgcat::mc {An error has occurred while creating image.}] return } $current(frame) save photo $ph fconfigure $ch -translation binary -encoding binary set ff $format switch -- $format { jpeg { if {$opt == {}} { set opt $export(jpeg,quality) } set ff [list $format -quality $opt] } tiff { if {$opt == {}} { set opt $export(tiff,compress) } set ff [list $format -compression $opt] } } if {[catch {$ph data -format $ff} data]} { Error [msgcat::mc {An error has occurred while writing image.}] return } puts -nonewline $ch [base64::decode $data] image delete $ph } # Process Cmds proc ProcessGIFCmd {varname iname ch fn} { upvar $varname var upvar $iname i ProcessPhotoCmd $varname $iname $ch $fn } proc ProcessJPEGCmd {varname iname ch fn} { upvar $varname var upvar $iname i ProcessPhotoCmd $varname $iname $ch $fn } proc ProcessPNGCmd {varname iname ch fn} { upvar $varname var upvar $iname i ProcessPhotoCmd $varname $iname $ch $fn } proc ProcessTIFFCmd {varname iname ch fn} { upvar $varname var upvar $iname i ProcessPhotoCmd $varname $iname $ch $fn } proc ProcessPhotoCmd {varname iname ch fn} { upvar 2 $varname var upvar 2 $iname i global loadParam global current set mode {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i # not supported } slice { incr i set mode slice } } set param [lindex $var $i] StartLoad if {$ch != {}} { # xpa global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS { if {![ImportPhotoSocket $ch $param $mode]} { InitError xpa ImportPhotoFile $param $mode } } {Windows NT} {ImportPhotoFile $param $mode} } } else { # comm if {$fn != {}} { ImportPhotoAlloc $fn $param $mode } else { ImportPhotoFile $param $mode } } FinishLoad } proc ProcessSendGIFCmd {proc id param ch fn} { global current ProcessSendPhotoCmd gif $proc $id $param $ch $fn } proc ProcessSendJPEGCmd {proc id param ch fn} { global current ProcessSendPhotoCmd jpeg $proc $id $param $ch $fn } proc ProcessSendPNGCmd {proc id param ch fn} { global current ProcessSendPhotoCmd png $proc $id $param $ch $fn } proc ProcessSendTIFFCmd {proc id param ch fn} { global current ProcessSendPhotoCmd tiff $proc $id $param $ch $fn } proc ProcessSendPhotoCmd {format proc id param ch fn} { global current global export if {$current(frame) == {}} { return } set opt [string tolower [lindex $param 0]] if {$ch != {}} { # xpa global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS {ExportPhotoSocket $ch $format $opt} {Windows NT} {} } } elseif {$fn != {}} { # comm ExportPhotoFile $fn $format $opt $proc $id {} $fn } } saods9/ds9/library/pixel.tcl000644 000765 000000 00000014756 12705445647 016407 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PixelDef {} { global pixel global ipixel global dpixel global ppixel set ipixel(top) .pixel set ipixel(mb) .pixelmb set ipixel(max) 13 set pixel(size) 5 array set ppixel [array get pixel] set dpixel(copy) {} set dpixel(tbl) {} } proc UpdatePixelTableDialog {which x y sys} { global pixel global ipixel global dpixel if {[winfo exists $ipixel(top)]} { $which get pixel table $sys $x $y $pixel(size) $pixel(size) dpixel } } proc PixelTableDialog {} { global pixel global ipixel global dpixel global ds9 if {[winfo exists $ipixel(top)]} { raise $ipixel(top) return } # create the pixel table window set w $ipixel(top) set mb $ipixel(mb) Toplevel $w $mb 6 [msgcat::mc {Pixel Table}] PixelTableDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit $mb add cascade -label [msgcat::mc {Size}] -menu $mb.size menu $mb.file $mb.file add command -label "[msgcat::mc {Save}]..." \ -command PixelTableSaveDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command PixelTableDestroyDialog menu $mb.edit $mb.edit add command -label [msgcat::mc {Cut}] \ -state disabled -accelerator "${ds9(ctrl)}X" $mb.edit add command -label [msgcat::mc {Copy}] \ -command PixelTableCopyDialog -accelerator "${ds9(ctrl)}C" $mb.edit add command -label [msgcat::mc {Paste}] \ -state disabled -accelerator "${ds9(ctrl)}V" menu $mb.size for {set ii 3} {$ii<=$ipixel(max)} {incr ii 2} { $mb.size add radiobutton -label "${ii}x${ii}" -variable pixel(size) \ -value $ii -command PixelTableConfigure } set f [ttk::frame $w.tbl] set dpixel(tbl) [table $f.t \ -state disabled \ -anchor w \ -font [font actual TkDefaultFont] \ -variable dpixel \ -usecommand 0 \ -maxwidth 1200 \ ] $dpixel(tbl) tag col coord 0 $dpixel(tbl) tag row coord 0 $dpixel(tbl) tag configure coord -foreground blue $dpixel(tbl) tag configure center -foreground red grid $f.t -sticky news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 set f [ttk::frame $w.buttons] ttk::button $w.buttons.close -text [msgcat::mc {Close}] \ -command PixelTableDestroyDialog pack $w.buttons.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.tbl -side top -fill both -expand true selection handle $w PixelTableExportSelection PixelTableConfigure # dummy info for {set jj 0} {$jj<=$pixel(size)} {incr jj} { for {set ii 0} {$ii<=$pixel(size)} {incr ii} { set dpixel($ii,$jj) {} } } } proc PixelTableDestroyDialog {} { global ipixel global dpixel if {[winfo exists $ipixel(top)]} { destroy $ipixel(top) destroy $ipixel(mb) } if {[info exists dpixel]} { unset dpixel } } proc PixelTableCopyDialog {} { global ipixel global dpixel set dpixel(copy) [PixelTableRender] selection own -command PixelTableLostSelection $ipixel(top) clipboard clear clipboard append $dpixel(copy) } proc PixelTableClearDialog {} { global pixel global ipixel global dpixel global dpixel if {[winfo exists $ipixel(top)]} { for {set jj 0} {$jj<=$pixel(size)} {incr jj} { for {set ii 0} {$ii<=$pixel(size)} {incr ii} { set dpixel($ii,$jj) {} } } } } proc PixelTableSaveDialog {} { set filename [SaveFileDialog pixelfbox] if {$filename != {}} { set file [open $filename w] puts -nonewline $file [PixelTableRender] close $file } } # support proc PixelTableConfigure {} { global pixel global ipixel global dpixel set ss [expr $pixel(size)+1] $dpixel(tbl) configure -rows $ss -cols $ss for {set ii 1} {$ii<=$ipixel(max)} {incr ii} { $dpixel(tbl) tag cell {} $ii,$ii } set hh [expr int($ss/2.)] $dpixel(tbl) tag cell center $hh,$hh } proc PixelTableRender {} { global pixel global dpixel set rr {} # col header append rr " " for {set ii 1} {$ii<=$pixel(size)} {incr ii} { set msg [format "%12s" $dpixel(0,${ii})] append rr "$msg" } append rr "\n" append rr " " for {set ii 1} {$ii<=$pixel(size)} {incr ii} { append rr " -----------" } append rr "\n" # body for {set jj 1} {$jj<=$pixel(size)} {incr jj} { set msg [format "%10s" $dpixel(${jj},0)] append rr "$msg |" for {set ii 1} {$ii<=$pixel(size)} {incr ii} { set msg [format "%12.11s" $dpixel($jj,$ii)] append rr "$msg" } append rr "\n" } return $rr } proc PixelTableExportSelection {offset bytes} { global dpixel if {$dpixel(copy) != {}} { return [string range $dpixel(copy) $offset [expr $offset+$bytes]] } } proc PixelTableLostSelection {} { global dpixel set dpixel(copy) {} } proc PrefsDialogPixelTable {} { global dprefs global ppixel set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Pixel Table}] lappend dprefs(tabs) [ttk::frame $w.pixel] set f [ttk::labelframe $w.pixel.param -text [msgcat::mc {Pixel Table}]] ttk::label $f.tsize -text [msgcat::mc {Size}] PrefsDialogPixelTableButtonCmd $ppixel(size) ttk::menubutton $f.size -textvariable dprefs(pixeltable,msg) \ -menu $f.size.menu global ipixel set m $f.size.menu menu $m for {set ii 3} {$ii<=$ipixel(max)} {incr ii 2} { $m add radiobutton -label "${ii}x${ii}" -variable ppixel(size) \ -value $ii -command [list PrefsDialogPixelTableButtonCmd $ii] } grid $f.tsize $f.size -padx 2 -pady 2 -sticky w pack $f -side top -fill both -expand true } proc PrefsDialogPixelTableButtonCmd {ii} { global dprefs global pixel set dprefs(pixeltable,msg) "${ii}x${ii}" } proc ProcessPixelTableCmd {varname iname} { upvar $varname var upvar $iname i switch -- [string tolower [lindex $var $i]] { open - yes - true - on - 1 {PixelTableDialog} close - no - false - off - 0 {PixelTableDestroyDialog} default { PixelTableDialog incr i -1 } } } proc ProcessSendPixelTableCmd {proc id param sock fn} { PixelTableDialog ProcessSend $proc $id $sock $fn {.txt} [PixelTableRender] } saods9/ds9/library/plot.tcl000644 000765 000000 00000103026 12705445647 016231 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PlotDef {} { global pap global iap set iap(tt) {ap} set iap(windows) {} set iap(unique) 0 set pap(graph,title) {} set pap(graph,title,family) helvetica set pap(graph,title,size) 12 set pap(graph,title,weight) normal set pap(graph,title,slant) roman set pap(legend) 0 set pap(legend,title) Legend set pap(legend,position) right set pap(legend,title,family) helvetica set pap(legend,title,size) 10 set pap(legend,title,weight) normal set pap(legend,title,slant) roman set pap(legend,font,family) helvetica set pap(legend,font,size) 9 set pap(legend,font,weight) normal set pap(legend,font,slant) roman set pap(axis,x,title) {} set pap(axis,x,grid) 1 set pap(axis,x,log) 0 set pap(axis,x,flip) 0 set pap(axis,x,auto) 1 set pap(axis,x,min) {} set pap(axis,x,max) {} set pap(axis,x,format) {} set pap(axis,y,title) {} set pap(axis,y,grid) 1 set pap(axis,y,log) 0 set pap(axis,y,flip) 0 set pap(axis,y,auto) 1 set pap(axis,y,min) {} set pap(axis,y,max) {} set pap(axis,y,format) {} set pap(axis,title,family) helvetica set pap(axis,title,size) 9 set pap(axis,title,weight) normal set pap(axis,title,slant) roman set pap(axis,font,family) helvetica set pap(axis,font,size) 9 set pap(axis,font,weight) normal set pap(axis,font,slant) roman set pap(show) 1 set pap(shape,symbol) none set pap(shape,fill) 1 set pap(shape,color) red set pap(smooth) linear set pap(color) black set pap(fill) 0 set pap(fill,color) black set pap(width) 1 set pap(dash) 0 set pap(error) 1 set pap(error,cap) 0 set pap(error,color) red set pap(error,width) 1 set pap(bar,relief) raised set pap(bar,mode) normal } proc PlotAxisFormat {varname axis w nn} { upvar #0 $varname var global $varname return [format $var(axis,$axis,format) $nn] } proc PlotClearData {varname} { upvar #0 $varname var global $varname global ds9 if {$var(data,total) == 0} { return } # first set can be external set clear $var(1,manage) for {set nn 1} {$nn<=$var(data,total)} {incr nn} { if {$var($nn,manage)} { # delete elements foreach el [$var(graph) element names] { set f [split $el -] if {[lindex $f 1] == $nn} { $var(graph) element delete $el } } # destroy vectors blt::vector destroy $var($nn,xdata) $var($nn,ydata) switch $var($nn,dim) { xy {} xyex {blt::vector destroy $var($nn,xedata)} xyey {blt::vector destroy $var($nn,yedata)} xyexey {blt::vector destroy $var($nn,xedata) $var($nn,yedata)} } foreach x [array names $varname] { set f [split $x ,] if {([lindex $f 0] == $nn)} { unset ${varname}($x) } } } } if {$clear} { set var(data,total) 0 set var(data,current) 0 set var(name) {} set var(xdata) {} set var(ydata) {} set var(xedata) {} set var(yedata) {} # reset other variables set var(axis,x,auto) 1 set var(axis,x,min) {} set var(axis,x,max) {} set var(axis,x,format) {} set var(axis,y,auto) 1 set var(axis,y,min) {} set var(axis,y,max) {} set var(axis,y,format) {} $var(mb).select delete $ds9(menu,start) end $var(proc,updategraph) $varname PlotStats $varname PlotList $varname } else { set var(data,total) 1 set var(data,current) 1 $var(mb).select delete [expr $ds9(menu,start)+1] end PlotCurrentData $varname $var(proc,updategraph) $varname } } proc PlotCurrentData {varname} { upvar #0 $varname var global $varname if {$var(data,total) > 0} { set nn $var(data,current) set var(manage) $var($nn,manage) set var(dim) $var($nn,dim) set var(xdata) $var($nn,xdata) set var(ydata) $var($nn,ydata) set var(xedata) $var($nn,xedata) set var(yedata) $var($nn,yedata) PlotSetVar $varname $nn } PlotStats $varname PlotList $varname } proc PlotDataSet {varname dim data} { upvar #0 $varname var global $varname switch -- $dim { 4 { # first data set PlotDataSetOne $varname "4.1" $data # set color set cc $var(color) set var(color) [PlotNextColor $var(color)] # second data set PlotDataSetOne $varname "4.2" $data set var(color) $cc } 5 { # first data set PlotDataSetOne $varname "5.1" $data # set color set cc $var(color) set var(color) [PlotNextColor $var(color)] # second data set PlotDataSetOne $varname "5.2" $data set var(color) $cc } default {PlotDataSetOne $varname $dim $data} } } proc PlotDataSetOne {varname dim data} { upvar #0 $varname var global $varname # look for no data if {[string length $data] == 0} { return } # total length set ll [llength $data] set ii 0 while {$ii<$ll} { # incr count incr ${varname}(data,total) set nn $var(data,total) set var(data,current) $nn # new vector names set xdata ap${varname}xx${nn} set ydata ap${varname}yy${nn} set xedata ap${varname}xe${nn} set yedata ap${varname}ye${nn} # basics xy set var(manage) 1 set var(name) "Dataset $nn" set var(xdata) $xdata set var(ydata) $ydata global $var(xdata) $var(ydata) blt::vector create $var(xdata) $var(ydata) # substitute all separtors regsub -all {[\n\r\t, ]+} $data { } data # remove all non-numeric data regsub -all {[^0-9.e\- ]+} $data {} data set ox [lindex $data $ii] set x {} set y {} set xe {} set ye {} switch -- $dim { 2 - xy { set var(dim) xy set var(xedata) {} set var(yedata) {} for {} {$ii<$ll} {incr ii 2} { set tx [lindex $data $ii] if {$var(seq)} { if {$ox<=$tx} { set ox $tx lappend x $tx lappend y [lindex $data [expr $ii+1]] } else { break } } else { lappend x $tx lappend y [lindex $data [expr $ii+1]] } } $var(xdata) set $x $var(ydata) set $y } xyex { set var(dim) xyex set var(xedata) $xedata set var(yedata) {} global $var(xedata) blt::vector create $var(xedata) for {} {$ii<$ll} {incr ii 3} { set tx [lindex $data $ii] if {$var(seq)} { if {$ox<=$tx} { set ox $tx lappend x $tx lappend y [lindex $data [expr $ii+1]] lappend xe [lindex $data [expr $ii+2]] } else { break } } else { lappend x $tx lappend y [lindex $data [expr $ii+1]] lappend xe [lindex $data [expr $ii+2]] } } $var(xdata) set $x $var(ydata) set $y $var(xedata) set $xe } 3 - xyey { set var(dim) xyey set var(xedata) {} set var(yedata) $yedata global $var(yedata) blt::vector create $var(yedata) for {} {$ii<$ll} {incr ii 3} { set tx [lindex $data $ii] if {$var(seq)} { if {$ox<=$tx} { set ox $tx lappend x $tx lappend y [lindex $data [expr $ii+1]] lappend ye [lindex $data [expr $ii+2]] } else { break } } else { lappend x $tx lappend y [lindex $data [expr $ii+1]] lappend ye [lindex $data [expr $ii+2]] } } $var(xdata) set $x $var(ydata) set $y $var(yedata) set $ye } xyexey { set var(dim) xyexey set var(xedata) $xedata set var(yedata) $yedata global $var(xedata) $var(yedata) blt::vector create $var(xedata) $var(yedata) for {} {$ii<$ll} {incr ii 4} { set tx [lindex $data $ii] if {$var(seq)} { if {$ox<=$tx} { set ox $tx lappend x $tx lappend y [lindex $data [expr $ii+1]] lappend xe [lindex $data [expr $ii+2]] lappend ye [lindex $data [expr $ii+3]] } else { break } } else { lappend x $tx lappend y [lindex $data [expr $ii+1]] lappend xe [lindex $data [expr $ii+2]] lappend ye [lindex $data [expr $ii+3]] } } $var(xdata) set $x $var(ydata) set $y $var(xedata) set $xe $var(yedata) set $ye } 4.1 { set var(dim) xyey set var(xedata) {} set var(yedata) $yedata global $var(yedata) blt::vector create $var(yedata) for {} {$ii<$ll} {incr ii 4} { set tx [lindex $data $ii] if {$var(seq)} { if {$ox<=$tx} { set ox $tx lappend x $tx lappend y [lindex $data [expr $ii+1]] lappend ye [lindex $data [expr $ii+2]] } else { break } } else { lappend x $tx lappend y [lindex $data [expr $ii+1]] lappend ye [lindex $data [expr $ii+2]] } } $var(xdata) set $x $var(ydata) set $y $var(yedata) set $ye } 4.2 { set var(dim) xy set var(xedata) {} set var(yedata) {} for {} {$ii<$ll} {incr ii 4} { set tx [lindex $data $ii] if {$var(seq)} { if {$ox<=$tx} { set ox $tx lappend x $tx lappend y [lindex $data [expr $ii+3]] } else { break } } else { lappend x $tx lappend y [lindex $data [expr $ii+3]] } } $var(xdata) set $x $var(ydata) set $y } 5.1 { set var(dim) xyey set var(xedata) {} set var(yedata) $yedata global $var(yedata) blt::vector create $var(yedata) for {} {$ii<$ll} {incr ii 5} { set tx [lindex $data $ii] if {$var(seq)} { if {$ox<=$tx} { set ox $tx lappend x $tx lappend y [lindex $data [expr $ii+1]] lappend ye [lindex $data [expr $ii+2]] } else { break } } else { lappend x $tx lappend y [lindex $data [expr $ii+1]] lappend ye [lindex $data [expr $ii+2]] } } $var(xdata) set $x $var(ydata) set $y $var(yedata) set $ye } 5.2 { set var(dim) xyey set var(xedata) {} set var(yedata) $yedata global $var(yedata) blt::vector create $var(yedata) for {} {$ii<$ll} {incr ii 5} { set tx [lindex $data $ii] if {$var(seq)} { if {$ox<=$tx} { set ox $tx lappend x $tx lappend y [lindex $data [expr $ii+3]] lappend ye [lindex $data [expr $ii+4]] } else { break } } else { lappend x $tx lappend y [lindex $data [expr $ii+3]] lappend ye [lindex $data [expr $ii+4]] } } $var(xdata) set $x $var(ydata) set $y $var(yedata) set $ye } } set var($nn,manage) 1 set var($nn,dim) $var(dim) set var($nn,xdata) $var(xdata) set var($nn,ydata) $var(ydata) set var($nn,xedata) $var(xedata) set var($nn,yedata) $var(yedata) PlotGetVar $varname $nn # update data set menu $var(mb).select add radiobutton -label "$var(name)" \ -variable ${varname}(data,current) -value $nn \ -command [list PlotCurrentData $varname] PlotCreateElement $varname $var(proc,updateelement) $varname } } proc PlotDupData {varname mm} { upvar #0 $varname var global $varname if {$var(data,total) == 0} { return } # incr count incr ${varname}(data,total) set nn $var(data,total) set pp [expr $nn-1] # new vector names set var($nn,name) "Dataset $nn" set var($nn,xdata) ap${varname}xx${nn} set var($nn,ydata) ap${varname}yy${nn} set var($nn,xedata) ap${varname}xe${nn} set var($nn,yedata) ap${varname}ye${nn} global $var($mm,xdata) $var($mm,ydata) $var($mm,xedata) $var($mm,yedata) global $var($nn,xdata) $var($nn,ydata) $var($nn,xedata) $var($nn,yedata) $var($mm,xdata) dup $var($nn,xdata) $var($mm,ydata) dup $var($nn,ydata) if {$var($mm,xedata) != {}} { $var($mm,xedata) dup $var($nn,xedata) } else { set var($nn,xedata) {} } if {$var($mm,yedata) != {}} { $var($mm,yedata) dup $var($nn,yedata) } else { set var($nn,yedata) {} } set var($nn,manage) 1 set var($nn,dim) $var($mm,dim) set var($nn,show) $var($mm,show) set var($nn,shape,symbol) $var($mm,shape,symbol) set var($nn,shape,fill) $var($mm,shape,fill) set var($nn,shape,color) $var($mm,shape,color) set var($nn,smooth) $var($mm,smooth) set var($nn,color) [PlotNextColor $var($mm,color)] set var($nn,fill) $var($mm,fill) set var($nn,fill,color) [PlotNextColor $var($mm,fill,color)] set var($nn,width) $var($mm,width) set var($nn,dash) $var($mm,dash) set var($nn,error) $var($mm,error) set var($nn,error,cap) $var($mm,error,cap) set var($nn,error,color) $var($mm,error,color) set var($nn,error,width) $var($mm,error,width) set var($nn,bar,relief) $var($mm,bar,relief) # update data set menu $var(mb).select add radiobutton -label "$var($nn,name)" \ -variable ${varname}(data,current) -value $nn \ -command [list PlotCurrentData $varname] # make current set var(data,current) $nn set var(manage) $var($nn,manage) set var(dim) $var($nn,dim) set var(xdata) $var($nn,xdata) set var(ydata) $var($nn,ydata) set var(xedata) $var($nn,xedata) set var(yedata) $var($nn,yedata) PlotSetVar $varname $nn PlotCreateElement $varname $var(proc,updateelement) $varname $var(proc,updategraph) $varname PlotStats $varname PlotList $varname } proc PlotDestroy {varname} { upvar #0 $varname var global $varname global iap # see if it still is around if {![PlotPing $varname]} { return } for {set nn 1} {$nn<=$var(data,total)} {incr nn} { switch $var($nn,dim) { xy { blt::vector destroy $var($nn,xdata) $var($nn,ydata) } xyex { blt::vector destroy $var($nn,xdata) $var($nn,ydata) \ $var($nn,xedata) } xyey { blt::vector destroy $var($nn,xdata) $var($nn,ydata) \ $var($nn,yedata) } xyexey { blt::vector destroy $var($nn,xdata) $var($nn,ydata) \ $var($nn,xedata) $var($nn,yedata) } } } destroy $var(top) destroy $var(mb) # stats window? if {$var(stats)} { SimpleTextDestroy "${varname}stats" } # list window? if {$var(list)} { SimpleTextDestroy "${varname}list" } # delete it from the xpa list set ii [lsearch $iap(windows) $varname] if {$ii>=0} { set iap(windows) [lreplace $iap(windows) $ii $ii] } unset $varname } proc PlotExternal {varname} { upvar #0 $varname var global $varname # incr count incr ${varname}(data,total) set nn $var(data,total) set var(data,current) $nn set var(name) "Dataset $nn" set var($nn,manage) $var(manage) set var($nn,dim) $var(dim) set var($nn,xdata) $var(xdata) set var($nn,ydata) $var(ydata) set var($nn,xedata) $var(xedata) set var($nn,yedata) $var(yedata) PlotGetVar $varname $nn # update data set menu $var(mb).select add radiobutton -label "[msgcat::mc {Dataset}] $nn" \ -variable ${varname}(data,current) -value $nn \ -command "PlotCurrentData $varname" PlotCreateElement $varname } proc PlotList {varname} { upvar #0 $varname var global $varname if {!$var(list)} { return } set rr [PlotListGenerate $varname] SimpleTextDialog "${varname}list" [msgcat::mc {Data}] \ 40 20 insert top $rr PlotListDestroyCB $varname } proc PlotListGenerate {varname} { upvar #0 $varname var global $varname set rr {} if {$var(xdata) != {}} { global $var(xdata) $var(ydata) $var(xedata) $var(yedata) set ll [$var(xdata) length] set xx [$var(xdata) range] set yy [$var(ydata) range] switch $var(dim) { xy { for {set ii 0} {$ii<$ll} {incr ii} { append rr "[lindex $xx $ii] [lindex $yy $ii]\n" } } xyex { set xe [$var(xedata) range] for {set ii 0} {$ii<$ll} {incr ii} { append rr "[lindex $xx $ii] [lindex $yy $ii] [lindex $xe $ii]\n" } } xyey { set ye [$var(yedata) range] for {set ii 0} {$ii<$ll} {incr ii} { append rr "[lindex $xx $ii] [lindex $yy $ii] [lindex $ye $ii]\n" } } xyexey { set xe [$var(xedata) range] set ye [$var(yedata) range] for {set ii 0} {$ii<$ll} {incr ii} { append rr "[lindex $xx $ii] [lindex $yy $ii] [lindex $xe $ii] [lindex $ye $ii]\n" } } } } return $rr } proc PlotListDestroyCB {varname} { upvar #0 $varname var global $varname set var(list) 0 } proc PlotLoadConfig {varname} { upvar #0 $varname var global $varname PlotLoadConfigFile $varname [OpenFileDialog apconfigfbox] } # used by backup proc PlotLoadConfigFile {varname filename} { upvar #0 $varname var global $varname if {$filename != {}} { source $filename array set $varname [array get analysisplot] unset analysisplot # backward compatibility FixVar ${varname}(axis,x,grid) ${varname}(graph,x,grid) FixVar ${varname}(axis,x,log) ${varname}(graph,x,log) FixVar ${varname}(axis,x,flip) ${varname}(graph,x,flip) FixVar ${varname}(axis,y,grid) ${varname}(graph,y,grid) FixVar ${varname}(axis,y,log) ${varname}(graph,y,log) FixVar ${varname}(axis,y,flip) ${varname}(graph,y,flip) FixVar ${varname}(graph,title,family) ${varname}(titleFont) FixVar ${varname}(graph,title,size) ${varname}(titleSize) FixVar ${varname}(graph,title,weight) ${varname}(titleWeight) FixVar ${varname}(graph,title,slant) ${varname}(titleSlant) FixVar ${varname}(axis,title,family) ${varname}(textlabFont) FixVar ${varname}(axis,title,size) ${varname}(textlabSize) FixVar ${varname}(axis,title,weight) ${varname}(textlabWeight) FixVar ${varname}(axis,title,slant) ${varname}(textlabSlant) FixVar ${varname}(axis,font,family) ${varname}(numlabFont) FixVar ${varname}(axis,font,size) ${varname}(numlabSize) FixVar ${varname}(axis,font,weight) ${varname}(numlabWeight) FixVar ${varname}(axis,font,slant) ${varname}(numlabSlant) FixVar ${varname}(show) ${varname}(linear) FixVar ${varname}(shape,color) ${varname}(discrete,color) FixVar ${varname}(shape,fill) ${varname}(discrete,fill) FixVar ${varname}(width) ${varname}(linear,width) FixVar ${varname}(color) ${varname}(linear,color) if {[info exists ${varname}(linear,dash)]} { set var(linear,dash) [FromYesNo $var(linear,dash)] } FixVar ${varname}(dash) ${varname}(linear,dash) if {[info exists ${varname}(discrete)]} { if {$var(discrete)} { FixVar ${varname}(shape,symbol) ${varname}(discrete,symbol) } else { FixVarRm ${varname}(discrete,symbol) } } FixVarRm ${varname}(bar) FixVarRm ${varname}(bar,color) FixVarRm ${varname}(discrete) FixVarRm ${varname}(quadratic) FixVarRm ${varname}(quadratic,width) FixVarRm ${varname}(quadratic,color) FixVarRm ${varname}(quadratic,dash) FixVarRm ${varname}(step) FixVarRm ${varname}(step,color) FixVarRm ${varname}(step,dash) FixVarRm ${varname}(step,width) if {[info exists var(grid)]} { set var(axis,x,grid) $var(grid) set var(axis,y,grid) $var(grid) unset var(grid) } if {[info exists var(format)]} { set var(graph,format) $var(format) set var(axis,x,format) $var(format,x) set var(axis,y,format) $var(format,y) unset var(format) unset var(format,x) unset var(format,y) } if {[info exists var(grid,log)]} { switch $var(grid,log) { linearlinear { set var(axis,x,log) 0 set var(axis,y,log) 0 } linearlog { set var(axis,x,log) 0 set var(axis,y,log) 1 } loglinear { set var(axis,x,log) 1 set var(axis,y,log) 0 } loglog { set var(axis,x,log) 1 set var(axis,y,log) 1 } } unset var(grid,log) } $var(proc,updategraph) $varname $var(proc,updateelement) $varname } } proc PlotLoadData {varname} { upvar #0 $varname var global $varname set filename [OpenFileDialog apdatafbox] if {$filename != {}} { set dim xy if {[PlotDataFormatDialog dim]} { PlotLoadDataFile $varname $filename $dim } } } # used by backup proc PlotLoadDataFile {varname filename dim} { upvar #0 $varname var global $varname set ch [open $filename] set data [read $ch] close $ch PlotRaise $varname PlotDataSet $varname $dim $data $var(proc,updategraph) $varname PlotStats $varname PlotList $varname } proc PlotNextColor {which} { switch -- $which { black {return red} red {return green} green {return blue} blue {return cyan} cyan {return magenta} magenta {return yellow} yellow {return black} white {return white} default {return red} } } proc PlotPing {varname} { upvar #0 $varname var global $varname if {[info exists var(top)]} { if {[winfo exists $var(top)]} { return 1 } } return 0 } proc PlotRaise {varname} { upvar #0 $varname var global $varname if {[PlotPing $varname]} { raise $var(top) return 1 } return 0 } proc PlotSaveConfig {varname} { upvar #0 $varname var global $varname PlotSaveConfigFile $varname [SaveFileDialog apconfigfbox] } proc PlotSaveConfigFile {varname filename} { upvar #0 $varname var global $varname if {$filename == {}} { return } set ch [open $filename w] set analysisplot(graph,title) $var(graph,title) set analysisplot(graph,title,family) $var(graph,title,family) set analysisplot(graph,title,size) $var(graph,title,size) set analysisplot(graph,title,weight) $var(graph,title,weight) set analysisplot(graph,title,slant) $var(graph,title,slant) set analysisplot(legend) $var(legend) set analysisplot(legend,title) $var(legend,title) set analysisplot(legend,position) $var(legend,position) set analysisplot(legend,title,family) $var(legend,title,family) set analysisplot(legend,title,size) $var(legend,title,size) set analysisplot(legend,title,weight) $var(legend,title,weight) set analysisplot(legend,title,slant) $var(legend,title,slant) set analysisplot(legend,font,family) $var(legend,font,family) set analysisplot(legend,font,size) $var(legend,font,size) set analysisplot(legend,font,weight) $var(legend,font,weight) set analysisplot(legend,font,slant) $var(legend,font,slant) set analysisplot(axis,x,title) $var(axis,x,title) set analysisplot(axis,x,grid) $var(axis,x,grid) set analysisplot(axis,x,log) $var(axis,x,log) set analysisplot(axis,x,flip) $var(axis,x,flip) set analysisplot(axis,x,auto) $var(axis,x,auto) set analysisplot(axis,x,min) $var(axis,x,min) set analysisplot(axis,x,max) $var(axis,x,max) set analysisplot(axis,x,format) $var(axis,x,format) set analysisplot(axis,y,title) $var(axis,y,title) set analysisplot(axis,y,grid) $var(axis,y,grid) set analysisplot(axis,y,log) $var(axis,y,log) set analysisplot(axis,y,flip) $var(axis,y,flip) set analysisplot(axis,y,auto) $var(axis,y,auto) set analysisplot(axis,y,min) $var(axis,y,min) set analysisplot(axis,y,max) $var(axis,y,max) set analysisplot(axis,y,format) $var(axis,y,format) set analysisplot(axis,title,family) $var(axis,title,family) set analysisplot(axis,title,size) $var(axis,title,size) set analysisplot(axis,title,weight) $var(axis,title,weight) set analysisplot(axis,title,slant) $var(axis,title,slant) set analysisplot(axis,font,family) $var(axis,font,family) set analysisplot(axis,font,size) $var(axis,font,size) set analysisplot(axis,font,weight) $var(axis,font,weight) set analysisplot(axis,font,slant) $var(axis,font,slant) set analysisplot(show) $var(show) set analysisplot(shape,symbol) $var(shape,symbol) set analysisplot(shape,fill) $var(shape,fill) set analysisplot(shape,color) $var(shape,color) set analysisplot(smooth) $var(smooth) set analysisplot(color) $var(color) set analysisplot(fill) $var(fill) set analysisplot(fill,color) $var(fill,color) set analysisplot(width) $var(width) set analysisplot(dash) $var(dash) set analysisplot(error) $var(error) set analysisplot(error,cap) $var(error,cap) set analysisplot(error,color) $var(error,color) set analysisplot(error,width) $var(error,width) set analysisplot(bar,relief) $var(bar,relief) set analysisplot(bar,mode) $var(bar,mode) puts $ch "array set analysisplot \{ [array get analysisplot] \}" close $ch } proc PlotSaveData {varname} { upvar #0 $varname var global $varname if {$var(xdata) == {}} { return } PlotSaveDataFile $varname [SaveFileDialog apdatafbox] } proc PlotSaveDataFile {varname filename} { upvar #0 $varname var global $varname if {$var(xdata) == {}} { return } if {$filename == {}} { return } global $var(xdata) $var(ydata) $var(xedata) $var(yedata) set ll [$var(xdata) length] set xx [$var(xdata) range] set yy [$var(ydata) range] set ch [open $filename w] switch $var(dim) { xy { for {set ii 0} {$ii<$ll} {incr ii} { puts $ch "[lindex $xx $ii] [lindex $yy $ii]" } } xyex { set xe [$var(xedata) range] for {set ii 0} {$ii<$ll} {incr ii} { puts $ch "[lindex $xx $ii] [lindex $yy $ii] [lindex $xe $ii]" } } xyey { set ye [$var(yedata) range] for {set ii 0} {$ii<$ll} {incr ii} { puts $ch "[lindex $xx $ii] [lindex $yy $ii] [lindex $ye $ii]" } } xyexey { set xe [$var(xedata) range] set ye [$var(yedata) range] for {set ii 0} {$ii<$ll} {incr ii} { puts $ch "[lindex $xx $ii] [lindex $yy $ii] [lindex $xe $ii] [lindex $ye $ii]" } } } close $ch PlotRaise $varname } proc PlotStats {varname} { upvar #0 $varname var global $varname if {!$var(stats)} { return } set rr [PlotStatsGenerate $varname] SimpleTextDialog "${varname}stats" [msgcat::mc {Statistics}] \ 40 20 insert top $rr PlotStatsDestroyCB $varname } proc PlotStatsGenerate {varname} { upvar #0 $varname var global $varname set min {} set max {} set mean {} set median {} set varr {} set sdev {} if {$var(ydata) != {}} { if {[$var(ydata) length] > 0} { set min [format "%6.3f" [blt::vector expr min($var(ydata))]] set max [format "%6.3f" [blt::vector expr max($var(ydata))]] set mean [format "%6.3f" [blt::vector expr mean($var(ydata))]] set median [format "%6.3f" [blt::vector expr median($var(ydata))]] set varr [format "%6.3f" [expr [blt::vector expr var($var(ydata))]]] set sdev [format "%6.3f" [expr [blt::vector expr sdev($var(ydata))]]] } } set rr {} append rr "min $min\n" append rr "max $max\n" append rr "mean $mean\n" append rr "median $median\n" append rr "var $varr\n" append rr "sdev $sdev\n" return $rr } proc PlotStatsDestroyCB {varname} { upvar #0 $varname var global $varname set var(stats) 0 } proc PlotTitle {varname title xaxis yaxis} { upvar #0 $varname var global $varname set var(graph,title) "$title" set var(axis,x,title) "$xaxis" set var(axis,y,title) "$yaxis" } proc PlotUpdateGraph {varname} { upvar #0 $varname var global $varname global ds9 if {$var(axis,x,auto)} { set xmin {} set xmax {} } else { set xmin $var(axis,x,min) set xmax $var(axis,x,max) } if {$var(axis,y,auto)} { set ymin {} set ymax {} } else { set ymin $var(axis,y,min) set ymax $var(axis,y,max) } $var(graph) xaxis configure -min $xmin -max $xmax \ -descending $var(axis,x,flip) $var(graph) yaxis configure -min $ymin -max $ymax \ -descending $var(axis,y,flip) if {$var(graph,format)} { if {$var(axis,x,format) != {}} { $var(graph) xaxis configure \ -command [list PlotAxisFormat $varname x] } else { $var(graph) xaxis configure -command {} } if {$var(axis,y,format) != {}} { $var(graph) yaxis configure \ -command [list PlotAxisFormat $varname y] } else { $var(graph) yaxis configure -command {} } } # Menus if {$var(xdata) != {}} { $var(mb).file entryconfig "[msgcat::mc {Save Data}]..." -state normal $var(mb).file entryconfig [msgcat::mc {Clear Data}] -state normal $var(mb).file entryconfig [msgcat::mc {Statistics}] -state normal $var(mb).file entryconfig [msgcat::mc {List Data}] -state normal if {$var(1,manage)} { $var(mb).file entryconfig [msgcat::mc {Duplicate Data}] \ -state disabled } else { $var(mb).file entryconfig [msgcat::mc {Duplicate Data}] \ -state normal } } else { $var(mb).file entryconfig "[msgcat::mc {Save Data}]..." -state disabled $var(mb).file entryconfig [msgcat::mc {Clear Data}] -state disabled $var(mb).file entryconfig [msgcat::mc {Duplicate Data}] -state disabled $var(mb).file entryconfig [msgcat::mc {Statistics}] -state disabled $var(mb).file entryconfig [msgcat::mc {List Data}] -state disabled } # Graph $var(graph) configure -plotpadx 0 -plotpady 0 \ -title $var(graph,title) \ -font "{$ds9($var(graph,title,family))} $var(graph,title,size) $var(graph,title,weight) $var(graph,title,slant)" $var(graph) xaxis configure \ -grid $var(axis,x,grid) -logscale $var(axis,x,log) \ -title $var(axis,x,title) \ -tickfont "{$ds9($var(axis,font,family))} $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ -titlefont "{$ds9($var(axis,title,family))} $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" $var(graph) yaxis configure \ -grid $var(axis,y,grid) -logscale $var(axis,y,log) \ -title $var(axis,y,title) \ -tickfont "{$ds9($var(axis,font,family))} $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ -titlefont "{$ds9($var(axis,title,family))} $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" $var(graph) legend configure -hide [expr !$var(legend)] \ -position $var(legend,position) -title $var(legend,title) \ -font "{$ds9($var(legend,font,family))} $var(legend,font,size) $var(legend,font,weight) $var(legend,font,slant)" \ -titlefont "{$ds9($var(legend,title,family))} $var(legend,title,size) $var(legend,title,weight) $var(legend,title,slant)" } proc PlotCreateElement {varname} { upvar #0 $varname var global $varname # warning: uses current vars if {$var(data,total) == 0} { return } # delete current elements set nn $var(data,current) foreach el [$var(graph) element names] { set f [split $el -] if {[lindex $f 1] == $nn} { $var(graph) element delete $el } } global $var(xdata) $var(ydata) $var(graph) element create "d-${nn}" -xdata $var(xdata) -ydata $var(ydata) if {$var(xedata) != {}} { if {[$var(xedata) length] != 0} { $var(graph) element configure "d-${nn}" -xerror $var(xedata) } } if {$var(yedata) != {}} { if {[$var(yedata) length] != 0} { $var(graph) element configure "d-${nn}" -yerror $var(yedata) } } } proc PlotColorMenu {w varname color cmd} { upvar #0 $varname var global $varname menu $w $w add radiobutton -label [msgcat::mc {Black}] \ -variable ${varname}($color) -value black -command $cmd $w add radiobutton -label [msgcat::mc {White}] \ -variable ${varname}($color) -value white -command $cmd $w add radiobutton -label [msgcat::mc {Red}] \ -variable ${varname}($color) -value red -command $cmd $w add radiobutton -label [msgcat::mc {Green}] \ -variable ${varname}($color) -value green -command $cmd $w add radiobutton -label [msgcat::mc {Blue}] \ -variable ${varname}($color) -value blue -command $cmd $w add radiobutton -label [msgcat::mc {Cyan}] \ -variable ${varname}($color) -value cyan -command $cmd $w add radiobutton -label [msgcat::mc {Magenta}] \ -variable ${varname}($color) -value magenta -command $cmd $w add radiobutton -label [msgcat::mc {Yellow}] \ -variable ${varname}($color) -value yellow -command $cmd $w add separator $w add command -label "[msgcat::mc {Other Color}]..." \ -command [list ColorMenuOther $varname $color $cmd] } proc PlotSetVar {varname nn} { upvar #0 $varname var global $varname set var(name) $var($nn,name) set var(show) $var($nn,show) set var(shape,symbol) $var($nn,shape,symbol) set var(shape,fill) $var($nn,shape,fill) set var(shape,color) $var($nn,shape,color) set var(smooth) $var($nn,smooth) set var(color) $var($nn,color) set var(fill) $var($nn,fill) set var(fill,color) $var($nn,fill,color) set var(width) $var($nn,width) set var(dash) $var($nn,dash) set var(error) $var($nn,error) set var(error,cap) $var($nn,error,cap) set var(error,color) $var($nn,error,color) set var(error,width) $var($nn,error,width) set var(bar,relief) $var($nn,bar,relief) } proc PlotGetVar {varname nn} { upvar #0 $varname var global $varname set var($nn,name) $var(name) set var($nn,show) $var(show) set var($nn,shape,symbol) $var(shape,symbol) set var($nn,shape,fill) $var(shape,fill) set var($nn,shape,color) $var(shape,color) set var($nn,smooth) $var(smooth) set var($nn,color) $var(color) set var($nn,fill) $var(fill) set var($nn,fill,color) $var(fill,color) set var($nn,width) $var(width) set var($nn,dash) $var(dash) set var($nn,error) $var(error) set var($nn,error,cap) $var(error,cap) set var($nn,error,color) $var(error,color) set var($nn,error,width) $var(error,width) set var($nn,bar,relief) $var(bar,relief) } proc PlotBackup {ch dir} { global iap set rdir "./[lindex [file split $dir] end]" # only save ap plots foreach tt $iap(windows) { if {[string range $tt 0 1] == {ap}} { set fdir [file join $dir $tt] set varname $tt upvar #0 $varname var global $varname # create dir if needed if {![file isdirectory $fdir]} { if {[catch {file mkdir $fdir}]} { Error [msgcat::mc {An error has occurred during backup}] return } } switch $var(type) { line {puts $ch "PlotLineTool"} bar {puts $ch "PlotBarTool"} scatter {puts $ch "PlotScatterTool"} } set save $var(data,current) for {set ii 1} {$ii<=$var(data,total)} {incr ii} { set ${varname}(data,current) $ii PlotCurrentData $varname PlotSaveDataFile $varname "$fdir/plot$ii.dat" PlotSaveConfigFile $varname "$fdir/plot$ii.plt" puts $ch "PlotLoadDataFile $varname $fdir/plot$ii.dat $var(dim)" puts $ch "PlotLoadConfigFile $varname $fdir/plot$ii.plt" } set ${varname}(data,current) $save PlotCurrentData $varname } } } saods9/ds9/library/plotbar.tcl000644 000765 000000 00000013576 12705445647 016730 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # used by backup proc PlotBarTool {} { global iap PlotBar $iap(tt) [msgcat::mc {Bar Plot Tool}] {} {} {} 2 {} } proc PlotBar {tt wtt title xaxis yaxis dim data} { global iap # make the window name unique set ii [lsearch $iap(windows) $tt] if {$ii>=0} { incr iap(unique) append tt $iap(unique) } # set the window title if none if {$wtt == {}} { set wtt $tt } set varname $tt upvar #0 $varname var global $varname PlotBarProc $varname PlotDialog $varname $wtt $title $xaxis $yaxis PlotDialogBar $varname PlotDataSet $varname $dim $data $var(proc,updategraph) $varname PlotStats $varname PlotList $varname } proc PlotBarDialog {varname wtt title xaxis yaxis} { upvar #0 $varname var global $varname PlotBarProc $varname PlotDialog $varname $wtt $title $xaxis $yaxis PlotDialogBar $varname } proc PlotBarProc {varname} { upvar #0 $varname var global $varname set var(proc,updategraph) PlotBarUpdateGraph set var(proc,updateelement) PlotBarUpdateElement set var(proc,highlite) PlotBarHighliteElement set var(proc,button) PlotBarButton } proc PlotDialogBar {varname} { upvar #0 $varname var global $varname global ds9 set var(seq) 1 # Graph $var(mb).graph add separator $var(mb).graph add cascade -label "[msgcat::mc {Mode}]..." \ -menu $var(mb).graph.mode # Graph Mode menu $var(mb).graph.mode $var(mb).graph.mode add radiobutton -label [msgcat::mc {Normal}] \ -variable ${varname}(bar,mode) -value normal \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.mode add radiobutton -label [msgcat::mc {Stacked}] \ -variable ${varname}(bar,mode) -value stacked \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.mode add radiobutton -label [msgcat::mc {Aligned}] \ -variable ${varname}(bar,mode) -value aligned \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.mode add radiobutton -label [msgcat::mc {Overlap}] \ -variable ${varname}(bar,mode) -value overlap \ -command [list $var(proc,updategraph) $varname] # Dataset $var(mb).dataset add checkbutton -label [msgcat::mc {Show}] \ -variable ${varname}(show) \ -command [list PlotBarUpdateElement $varname] $var(mb).dataset add separator $var(mb).dataset add cascade -label [msgcat::mc {Color}] \ -menu $var(mb).dataset.color $var(mb).dataset add cascade -label [msgcat::mc {Relief}] \ -menu $var(mb).dataset.relief $var(mb).dataset add cascade -label [msgcat::mc {Error}] \ -menu $var(mb).dataset.error $var(mb).dataset add separator $var(mb).dataset add command -label "[msgcat::mc {Name}]..." \ -command [list DatasetNameDialog $varname] PlotColorMenu $var(mb).dataset.color $varname color \ [list PlotBarUpdateElement $varname] # Relief menu $var(mb).dataset.relief $var(mb).dataset.relief add radiobutton -label [msgcat::mc {Flat}] \ -variable ${varname}(bar,relief) -value flat \ -command [list PlotBarUpdateElement $varname] $var(mb).dataset.relief add radiobutton -label [msgcat::mc {Sunken}] \ -variable ${varname}(bar,relief) -value sunken \ -command [list PlotBarUpdateElement $varname] $var(mb).dataset.relief add radiobutton -label [msgcat::mc {Raised}] \ -variable ${varname}(bar,relief) -value raised \ -command [list PlotBarUpdateElement $varname] $var(mb).dataset.relief add radiobutton -label [msgcat::mc {Solid}] \ -variable ${varname}(bar,relief) -value solid \ -command [list PlotBarUpdateElement $varname] $var(mb).dataset.relief add radiobutton -label [msgcat::mc {Groove}] \ -variable ${varname}(bar,relief) -value groove \ -command [list PlotBarUpdateElement $varname] # Error menu $var(mb).dataset.error $var(mb).dataset.error add checkbutton -label [msgcat::mc {Show}] \ -variable ${varname}(error) \ -command [list PlotBarUpdateElement $varname] $var(mb).dataset.error add checkbutton -label [msgcat::mc {Cap}] \ -variable ${varname}(error,cap) \ -command [list PlotBarUpdateElement $varname] $var(mb).dataset.error add separator $var(mb).dataset.error add cascade -label [msgcat::mc {Color}] \ -menu $var(mb).dataset.error.color $var(mb).dataset.error add cascade -label [msgcat::mc {Width}] \ -menu $var(mb).dataset.error.width PlotColorMenu $var(mb).dataset.error.color $varname error,color \ [list PlotBarUpdateElement $varname] WidthDashMenu $var(mb).dataset.error.width $varname error,width {} \ [list PlotBarUpdateElement $varname] {} # graph set var(type) bar set var(graph) [blt::barchart $var(top).bar \ -width 600 \ -height 500 \ -highlightthickness 0 \ ] $var(graph) xaxis configure -grid no -stepsize 0 $var(graph) yaxis configure -grid yes pack $var(graph) -expand yes -fill both PlotChangeMode $varname } proc PlotBarUpdateGraph {varname} { upvar #0 $varname var global $varname PlotUpdateGraph $varname $var(graph) configure -barmode $var(bar,mode) } proc PlotBarUpdateElement {varname} { upvar #0 $varname var global $varname set nn $var(data,current) PlotGetVar $varname $nn if {$var(error)} { set show both } else { set show none } if {$var(error,cap)} { set cap [expr $var(error,width)+3] } else { set cap 0 } $var(graph) element configure "d-${nn}" \ -label $var(name) -hide [expr !$var(show)] \ -relief $var(bar,relief) -color $var(color) \ -showerrorbars $show -errorbarcolor $var(error,color) \ -errorbarwidth $var(error,width) -errorbarcap $cap } proc PlotBarButton {varname x y} { upvar #0 $varname var global $varname } proc PlotBarHighliteElement {varname rowlist} { upvar #0 $varname var global $varname } saods9/ds9/library/plotdialog.tcl000644 000765 000000 00000041501 12705445647 017410 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PlotDialog {varname wtt title xaxis yaxis} { upvar #0 $varname var global $varname global ds9 global pap if {[PlotRaise $varname]} { return } # add it to our xpa list global iap lappend iap(windows) $varname set var(top) ".${varname}" set var(mb) ".${varname}mb" set var(stats) 0 set var(list) 0 set var(mode) zoom set var(callback) {} set var(data,total) 0 set var(data,current) 0 set var(name) {} set var(xdata) {} set var(ydata) {} set var(xedata) {} set var(yedata) {} array set $varname [array get pap] set var(graph,title) "$title" set var(axis,x,title) "$xaxis" set var(axis,y,title) "$yaxis" # can be turned off for external line plots set var(graph,format) 1 # create window Toplevel $var(top) $var(mb) 7 $wtt [list PlotDestroy $varname] $var(mb) add cascade -label [msgcat::mc {File}] -menu $var(mb).file $var(mb) add cascade -label [msgcat::mc {Edit}] -menu $var(mb).edit $var(mb) add cascade -label [msgcat::mc {Graph}] -menu $var(mb).graph $var(mb) add cascade -label [msgcat::mc {Dataset}] -menu $var(mb).dataset $var(mb) add cascade -label [msgcat::mc {Select}] -menu $var(mb).select menu $var(mb).file $var(mb).file add command -label "[msgcat::mc {Load Data}]..." \ -command [list PlotLoadData $varname] $var(mb).file add command -label "[msgcat::mc {Save Data}]..." \ -command [list PlotSaveData $varname] $var(mb).file add command -label [msgcat::mc {Clear Data}] \ -command [list PlotClearData $varname] $var(mb).file add separator $var(mb).file add command -label [msgcat::mc {Duplicate Data}] \ -command [list PlotDupData $varname 1] $var(mb).file add separator $var(mb).file add command -label [msgcat::mc {Statistics}] \ -command "set ${varname}(stats) 1; PlotStats $varname" $var(mb).file add command -label [msgcat::mc {List Data}] \ -command "set ${varname}(list) 1; PlotList $varname" $var(mb).file add separator $var(mb).file add command -label "[msgcat::mc {Load Configuration}]..." \ -command [list PlotLoadConfig $varname] $var(mb).file add command -label "[msgcat::mc {Save Configuration}]..." \ -command [list PlotSaveConfig $varname] $var(mb).file add separator switch $ds9(wm) { x11 - win32 { $var(mb).file add command \ -label "[msgcat::mc {Page Setup}]..." \ -command PSPageSetup $var(mb).file add command -label "[msgcat::mc {Print}]..." \ -command [list PlotPSPrint $varname] } aqua { $var(mb).file add command \ -label "[msgcat::mc {Page Setup}]..." \ -command PSPageSetup $var(mb).file add command -label "[msgcat::mc {Print}]..." \ -command [list PlotPSPrint $varname] # $var(mb).file add command -label "[msgcat::mc {Postscript Page Setup}]..." -command PSPageSetup # $var(mb).file add command -label "[msgcat::mc {Postscript Print}]..." -command [list PlotPSPrint $varname] } } $var(mb).file add separator $var(mb).file add command -label [msgcat::mc {Close}] \ -command [list PlotDestroy $varname] menu $var(mb).edit $var(mb).edit add command -label [msgcat::mc {Cut}] \ -state disabled -accelerator "${ds9(ctrl)}X" $var(mb).edit add command -label [msgcat::mc {Copy}] \ -state disabled -accelerator "${ds9(ctrl)}C" $var(mb).edit add command -label [msgcat::mc {Paste}] \ -state disabled -accelerator "${ds9(ctrl)}V" $var(mb).edit add command -label [msgcat::mc {Clear}] \ -state disabled $var(mb).edit add separator $var(mb).edit add radiobutton -label [msgcat::mc {Pointer}] \ -variable ${varname}(mode) -value pointer \ -command [list PlotChangeMode $varname] $var(mb).edit add radiobutton -label [msgcat::mc {Zoom}] \ -variable ${varname}(mode) -value zoom \ -command [list PlotChangeMode $varname] # Graph menu $var(mb).graph $var(mb).graph add cascade -label [msgcat::mc {Axes}] \ -menu $var(mb).graph.axes $var(mb).graph add cascade -label [msgcat::mc {Legend}] \ -menu $var(mb).graph.legend $var(mb).graph add cascade -label [msgcat::mc {Font}] \ -menu $var(mb).graph.font $var(mb).graph add separator $var(mb).graph add command -label "[msgcat::mc {Title}]..." \ -command [list PlotTitleDialog $varname] menu $var(mb).graph.axes $var(mb).graph.axes add checkbutton -label [msgcat::mc {X Grid}] \ -variable ${varname}(axis,x,grid) \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.axes add checkbutton -label [msgcat::mc {Log}] \ -variable ${varname}(axis,x,log) \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.axes add checkbutton -label [msgcat::mc {Flip}] \ -variable ${varname}(axis,x,flip) \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.axes add separator $var(mb).graph.axes add checkbutton -label [msgcat::mc {Y Grid}] \ -variable ${varname}(axis,y,grid) \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.axes add checkbutton -label [msgcat::mc {Log}] \ -variable ${varname}(axis,y,log) \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.axes add checkbutton -label [msgcat::mc {Flip}] \ -variable ${varname}(axis,y,flip) \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.axes add separator $var(mb).graph.axes add command -label "[msgcat::mc {Range}]..." \ -command [list PlotRangeDialog $varname] menu $var(mb).graph.legend $var(mb).graph.legend add checkbutton -label [msgcat::mc {Show}] \ -variable ${varname}(legend) \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.legend add separator $var(mb).graph.legend add radiobutton -label [msgcat::mc {Right}] \ -variable ${varname}(legend,position) -value right \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.legend add radiobutton -label [msgcat::mc {Left}] \ -variable ${varname}(legend,position) -value left \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.legend add radiobutton -label [msgcat::mc {Top}] \ -variable ${varname}(legend,position) -value top \ -command [list $var(proc,updategraph) $varname] $var(mb).graph.legend add radiobutton -label [msgcat::mc {Bottom}] \ -variable ${varname}(legend,position) -value bottom \ -command [list $var(proc,updategraph) $varname] menu $var(mb).graph.font $var(mb).graph.font add cascade -label [msgcat::mc {Title}] \ -menu $var(mb).graph.font.title $var(mb).graph.font add cascade -label [msgcat::mc {Axes Title}] \ -menu $var(mb).graph.font.textlab $var(mb).graph.font add cascade -label [msgcat::mc {Axes Number}] \ -menu $var(mb).graph.font.numlab $var(mb).graph.font add cascade -label [msgcat::mc {Legend Title}] \ -menu $var(mb).graph.font.legendtitle $var(mb).graph.font add cascade -label [msgcat::mc {Legend}] \ -menu $var(mb).graph.font.legend FontMenu $var(mb).graph.font.title $varname graph,title,family graph,title,size graph,title,weight graph,title,slant [list $var(proc,updategraph) $varname] FontMenu $var(mb).graph.font.textlab $varname axis,title,family axis,title,size axis,title,weight axis,title,slant [list $var(proc,updategraph) $varname] FontMenu $var(mb).graph.font.numlab $varname axis,font,family axis,font,size axis,font,weight axis,font,slant [list $var(proc,updategraph) $varname] FontMenu $var(mb).graph.font.legendtitle $varname legend,title,family legend,title,size legend,title,weight legend,title,slant [list $var(proc,updategraph) $varname] FontMenu $var(mb).graph.font.legend $varname legend,font,family legend,font,size legend,font,weight legend,font,slant [list $var(proc,updategraph) $varname] # dataset menu $var(mb).dataset # select menu $var(mb).select } proc PlotChangeMode {varname} { upvar #0 $varname var global $varname global ds9 blt::RemoveBindTag $var(graph) zoom-$var(graph) bind $var(graph) <1> {} switch $var(mode) { pointer {bind $var(graph) <1> [list PlotButton $varname %x %y]} zoom { switch $ds9(wm) { x11 - win32 {Blt_ZoomStack $var(graph) -mode release} aqua {Blt_ZoomStack $var(graph) -mode release -button "ButtonPress-2"} } } } } proc PlotDataFormatDialog {xarname} { upvar $xarname xar global ed set w {.apdata} set ed(ok) 0 set ed(dim) $xar DialogCreate $w [msgcat::mc {Data Format}] ed(ok) # Param set f [ttk::frame $w.param] ttk::label $f.title -text [msgcat::mc {Data Format}] ttk::radiobutton $f.xy -text {X Y} -variable ed(dim) -value xy ttk::radiobutton $f.xyex -text {X Y XErr} -variable ed(dim) -value xyex ttk::radiobutton $f.xyey -text {X Y YErr} -variable ed(dim) -value xyey ttk::radiobutton $f.xyexey -text {X Y XErr YErr} -variable ed(dim) \ -value xyexey grid $f.title -padx 2 -pady 2 -sticky w grid $f.xy -padx 2 -pady 2 -sticky w grid $f.xyex -padx 2 -pady 2 -sticky w grid $f.xyey -padx 2 -pady 2 -sticky w grid $f.xyexey -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) $w.param.xy DialogDismiss $w if {$ed(ok)} { set xar $ed(dim) } set rr $ed(ok) unset ed return $rr } proc PlotRangeDialog {varname} { upvar #0 $varname var global $varname global ed set w {.aptitle} set ed(ok) 0 set ed(x,auto) $var(axis,x,auto) set ed(x,min) $var(axis,x,min) set ed(x,max) $var(axis,x,max) set ed(x,format) $var(axis,x,format) set ed(y,auto) $var(axis,y,auto) set ed(y,min) $var(axis,y,min) set ed(y,max) $var(axis,y,max) set ed(y,format) $var(axis,y,format) DialogCreate $w [msgcat::mc {Range}] ed(ok) # Param set f [ttk::frame $w.param] ttk::label $f.t -text [msgcat::mc {Axis}] ttk::label $f.tto -text [msgcat::mc {To}] ttk::label $f.tfrom -text [msgcat::mc {From}] ttk::label $f.tformat -text [msgcat::mc {Format}] ttk::label $f.tauto -text [msgcat::mc {Automatic}] ttk::label $f.x -text [msgcat::mc {X}] ttk::entry $f.xmin -textvariable ed(x,min) -width 12 ttk::entry $f.xmax -textvariable ed(x,max) -width 12 ttk::entry $f.xformat -textvariable ed(x,format) -width 8 ttk::checkbutton $f.xauto -variable ed(x,auto) ttk::label $f.y -text [msgcat::mc {Y}] ttk::entry $f.ymin -textvariable ed(y,min) -width 12 ttk::entry $f.ymax -textvariable ed(y,max) -width 12 ttk::entry $f.yformat -textvariable ed(y,format) -width 8 ttk::checkbutton $f.yauto -variable ed(y,auto) grid $f.t $f.tfrom $f.tto $f.tformat $f.tauto -padx 2 -pady 2 -sticky w grid $f.x $f.xmin $f.xmax $f.xformat $f.xauto -padx 2 -pady 2 -sticky w grid $f.y $f.ymin $f.ymax $f.yformat $f.yauto -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) $w.param.xmin DialogDismiss $w if {$ed(ok)} { set var(axis,x,auto) $ed(x,auto) set var(axis,x,min) $ed(x,min) set var(axis,x,max) $ed(x,max) set var(axis,x,format) $ed(x,format) set var(axis,y,auto) $ed(y,auto) set var(axis,y,min) $ed(y,min) set var(axis,y,max) $ed(y,max) set var(axis,y,format) $ed(y,format) $var(proc,updategraph) $varname } set rr $ed(ok) unset ed return $rr } proc PlotTitleDialog {varname} { upvar #0 $varname var global $varname global ed set w {.aptitle} set ed(ok) 0 set ed(graph,title) $var(graph,title) set ed(axis,x,title) $var(axis,x,title) set ed(axis,y,title) $var(axis,y,title) set ed(legend,title) $var(legend,title) DialogCreate $w [msgcat::mc {Title}] ed(ok) # Param set f [ttk::frame $w.param] ttk::label $f.label -text [msgcat::mc {Plot Title}] ttk::entry $f.title -textvariable ed(graph,title) -width 30 ttk::label $f.xlabel -text [msgcat::mc {X Axis Title}] ttk::entry $f.xtitle -textvariable ed(axis,x,title) -width 30 ttk::label $f.ylabel -text [msgcat::mc {Y Axis Title}] ttk::entry $f.ytitle -textvariable ed(axis,y,title) -width 30 ttk::label $f.legendlabel -text [msgcat::mc {Legend Title}] ttk::entry $f.legendtitle -textvariable ed(legend,title) -width 30 grid $f.label $f.title -padx 2 -pady 2 -sticky ew grid $f.xlabel $f.xtitle -padx 2 -pady 2 -sticky ew grid $f.ylabel $f.ytitle -padx 2 -pady 2 -sticky ew grid $f.legendlabel $f.legendtitle -padx 2 -pady 2 -sticky ew grid columnconfigure $f 1 -weight 1 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) $w.param.title DialogDismiss $w if {$ed(ok)} { set var(graph,title) $ed(graph,title) set var(axis,x,title) $ed(axis,x,title) set var(axis,y,title) $ed(axis,y,title) set var(legend,title) $ed(legend,title) $var(proc,updategraph) $varname } set rr $ed(ok) unset ed return $rr } proc DatasetNameDialog {varname} { upvar #0 $varname var global $varname global ed set w {.aptitle} set ed(ok) 0 set ed(name) $var(name) DialogCreate $w [msgcat::mc {Dataset}] ed(ok) # Param set f [ttk::frame $w.param] ttk::label $f.label -text [msgcat::mc {Dataset Name}] ttk::entry $f.name -textvariable ed(name) -width 30 grid $f.label $f.name -padx 2 -pady 2 -sticky ew grid columnconfigure $f 1 -weight 1 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) $w.param.name DialogDismiss $w if {$ed(ok)} { $var(mb).select entryconfig "$var(name)" -label "$ed(name)" set var(name) $ed(name) $var(proc,updateelement) $varname } set rr $ed(ok) unset ed return $rr } proc PlotButton {varname x y} { upvar #0 $varname var global $varname $var(proc,button) $varname $x $y } proc PlotLineShapeMenu {which var} { menu $which $which add radiobutton -label [msgcat::mc {None}] \ -variable $var -value none $which add radiobutton -label [msgcat::mc {Circle}] \ -variable $var -value circle $which add radiobutton -label [msgcat::mc {Square}] \ -variable $var -value square $which add radiobutton -label [msgcat::mc {Diamond}] \ -variable $var -value diamond $which add radiobutton -label [msgcat::mc {Plus}] \ -variable $var -value plus $which add radiobutton -label [msgcat::mc {Cross}] \ -variable $var -value cross $which add radiobutton -label [msgcat::mc {Simple Plus}] \ -variable $var -value splus $which add radiobutton -label [msgcat::mc {Simple Cross}] \ -variable $var -value scross $which add radiobutton -label [msgcat::mc {Triangle}] \ -variable $var -value triangle $which add radiobutton -label [msgcat::mc {Arrow}] \ -variable $var -value arrow } proc PlotLineSmoothMenu {which var} { menu $which $which add radiobutton -label [msgcat::mc {Step}] \ -variable $var -value step $which add radiobutton -label [msgcat::mc {Linear}] \ -variable $var -value linear $which add radiobutton -label [msgcat::mc {Cubic}] \ -variable $var -value cubic $which add radiobutton -label [msgcat::mc {Quadratic}] \ -variable $var -value quadratic $which add radiobutton -label [msgcat::mc {Catrom}] \ -variable $var -value catrom } saods9/ds9/library/plotelement.tcl000644 000765 000000 00000000663 12705445647 017606 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PlotHighliteElement {varname rowlist} { upvar #0 $varname var global $varname # rowlist starts at 1 set result {} foreach rr $rowlist { append result "[expr $rr-1] " } $var(proc,highlite) $varname $result } saods9/ds9/library/plotline.tcl000644 000765 000000 00000020534 12705445647 017103 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # used by backup proc PlotLineTool {} { global iap PlotLine $iap(tt) [msgcat::mc {Line Plot Tool}] {} {} {} 2 {} } proc PlotLine {tt wtt title xaxis yaxis dim data} { global iap # make the window name unique set ii [lsearch $iap(windows) $tt] if {$ii>=0} { incr iap(unique) append tt $iap(unique) } # set the window title if none if {$wtt == {}} { set wtt $tt } set varname $tt upvar #0 $varname var global $varname PlotLineProc $varname PlotDialog $varname $wtt $title $xaxis $yaxis PlotDialogLine $varname PlotDataSet $varname $dim $data $var(proc,updategraph) $varname PlotStats $varname PlotList $varname } proc PlotLineDialog {varname wtt title xaxis yaxis} { upvar #0 $varname var global $varname PlotLineProc $varname PlotDialog $varname $wtt $title $xaxis $yaxis PlotDialogLine $varname } proc PlotLineProc {varname} { upvar #0 $varname var global $varname set var(proc,updategraph) PlotUpdateGraph set var(proc,updateelement) PlotLineUpdateElement set var(proc,highlite) PlotLineHighliteElement set var(proc,button) PlotLineButton } proc PlotDialogLine {varname} { upvar #0 $varname var global $varname global ds9 set var(seq) 1 # Dataset $var(mb).dataset add checkbutton -label [msgcat::mc {Show}] \ -variable ${varname}(show) \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset add separator $var(mb).dataset add cascade -label [msgcat::mc {Shape}] \ -menu $var(mb).dataset.shape $var(mb).dataset add cascade -label [msgcat::mc {Smooth}] \ -menu $var(mb).dataset.smooth $var(mb).dataset add cascade -label [msgcat::mc {Color}] \ -menu $var(mb).dataset.color $var(mb).dataset add cascade -label [msgcat::mc {Width}] \ -menu $var(mb).dataset.width $var(mb).dataset add cascade -label [msgcat::mc {Fill}] \ -menu $var(mb).dataset.fill $var(mb).dataset add cascade -label [msgcat::mc {Error}] \ -menu $var(mb).dataset.error $var(mb).dataset add separator $var(mb).dataset add command -label "[msgcat::mc {Name}]..." \ -command [list DatasetNameDialog $varname] # Shape menu $var(mb).dataset.shape $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {None}] \ -variable ${varname}(shape,symbol) -value none \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Circle}] \ -variable ${varname}(shape,symbol) -value circle \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Square}] \ -variable ${varname}(shape,symbol) -value square \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Diamond}] \ -variable ${varname}(shape,symbol) -value diamond \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Plus}] \ -variable ${varname}(shape,symbol) -value plus \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Cross}] \ -variable ${varname}(shape,symbol) -value cross \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Simple Plus}] \ -variable ${varname}(shape,symbol) -value splus \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Simple Cross}] \ -variable ${varname}(shape,symbol) -value scross \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Triangle}] \ -variable ${varname}(shape,symbol) -value triangle \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Arrow}] \ -variable ${varname}(shape,symbol) -value arrow \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.shape add separator $var(mb).dataset.shape add checkbutton \ -label [msgcat::mc {Fill}] \ -variable ${varname}(shape,fill) \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.shape add cascade -label [msgcat::mc {Color}] \ -menu $var(mb).dataset.shape.color PlotColorMenu $var(mb).dataset.shape.color $varname shape,color \ [list PlotLineUpdateElement $varname] # Smooth menu $var(mb).dataset.smooth $var(mb).dataset.smooth add radiobutton \ -label [msgcat::mc {Step}] \ -variable ${varname}(smooth) -value step \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.smooth add radiobutton \ -label [msgcat::mc {Linear}] \ -variable ${varname}(smooth) -value linear \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.smooth add radiobutton \ -label [msgcat::mc {Cubic}] \ -variable ${varname}(smooth) -value cubic \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.smooth add radiobutton \ -label [msgcat::mc {Quadratic}] \ -variable ${varname}(smooth) -value quadratic \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.smooth add radiobutton \ -label [msgcat::mc {Catrom}] \ -variable ${varname}(smooth) -value catrom \ -command [list PlotLineUpdateElement $varname] # Color PlotColorMenu $var(mb).dataset.color $varname color \ [list PlotLineUpdateElement $varname] # Width WidthDashMenu $var(mb).dataset.width $varname width dash \ [list PlotLineUpdateElement $varname] \ [list PlotLineUpdateElement $varname] # Fill menu $var(mb).dataset.fill $var(mb).dataset.fill add checkbutton \ -label [msgcat::mc {Show}] \ -variable ${varname}(fill) \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.fill add separator $var(mb).dataset.fill add cascade -label [msgcat::mc {Color}] \ -menu $var(mb).dataset.fill.color PlotColorMenu $var(mb).dataset.fill.color $varname fill,color \ [list PlotLineUpdateElement $varname] # Error menu $var(mb).dataset.error $var(mb).dataset.error add checkbutton -label [msgcat::mc {Show}] \ -variable ${varname}(error) \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.error add checkbutton -label [msgcat::mc {Cap}] \ -variable ${varname}(error,cap) \ -command [list PlotLineUpdateElement $varname] $var(mb).dataset.error add separator $var(mb).dataset.error add cascade -label [msgcat::mc {Color}] \ -menu $var(mb).dataset.error.color $var(mb).dataset.error add cascade -label [msgcat::mc {Width}] \ -menu $var(mb).dataset.error.width PlotColorMenu $var(mb).dataset.error.color $varname error,color \ [list PlotLineUpdateElement $varname] WidthDashMenu $var(mb).dataset.error.width $varname error,width {} \ [list PlotLineUpdateElement $varname] {} # graph set var(type) line set var(graph) [blt::graph $var(top).line \ -width 600 \ -height 500 \ -highlightthickness 0 \ ] pack $var(graph) -expand yes -fill both PlotChangeMode $varname } proc PlotLineUpdateElement {varname} { upvar #0 $varname var global $varname # warning: uses current vars if {$var(data,total) == 0} { return } set nn $var(data,current) PlotGetVar $varname $nn if {$var(fill)} { set fillClr $var(fill,color) } else { set fillClr {} } if {$var(shape,fill)} { set clr $var(shape,color) } else { set clr {} } if {$var(dash)} { set dash {8 3} } else { set dash { } } if {$var(error)} { set show both } else { set show none } if {$var(error,cap)} { set cap [expr $var(error,width)+3] } else { set cap 0 } $var(graph) element configure "d-${nn}" \ -label $var(name) -hide [expr !$var(show)] \ -symbol $var(shape,symbol) -fill $clr -scalesymbols no \ -pixels 5 -outline $var(shape,color) \ -smooth $var(smooth) \ -color $var(color) -areabackground $fillClr \ -linewidth $var(width) -dashes $dash \ -showerrorbars $show -errorbarcolor $var(error,color) \ -errorbarwidth $var(error,width) -errorbarcap $cap } proc PlotLineButton {varname x y} { upvar #0 $varname var global $varname } proc PlotLineHighliteElement {varname rowlist} { upvar #0 $varname var global $varname } saods9/ds9/library/plotprint.tcl000644 000765 000000 00000010031 13012655351 017262 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PlotPSPrint {varname} { upvar #0 $varname var global $varname if {[PlotPrintDialog]} { if {[catch {PlotPostScript $varname} printError]} { Error "[msgcat::mc {An error has occurred while printing}] $printError" } } } proc PlotPostScript {varname} { upvar #0 $varname var global $varname global ps global ds9 # set postscript fonts $var(graph) configure \ -font "$var(graph,title,family) $var(graph,title,size) $var(graph,title,weight) $var(graph,title,slant)" $var(graph) xaxis configure \ -tickfont "$var(axis,font,family) $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ -titlefont "$var(axis,title,family) $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" $var(graph) yaxis configure \ -tickfont "$var(axis,font,family) $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ -titlefont "$var(axis,title,family) $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" $var(graph) legend configure \ -font "$var(legend,font,family) $var(legend,font,size) $var(legend,font,weight) $var(legend,font,slant)" \ -titlefont "$var(legend,title,family) $var(legend,title,size) $var(legend,title,weight) $var(legend,title,slant)" set options "-decorations false" # Color switch -- $ps(color) { rgb - cmyk {append options " -greyscale no"} gray {append options " -greyscale yes"} } # can't trust 'tk scaling' switch $ds9(wm) { x11 - win32 { set scaling [tk scaling] if {$scaling == Inf} { set scaling 1.334 } } aqua {set scaling 1.4} } # Size set ww [expr [winfo width $var(top)]*$ps(scale)/100./$scaling] set hh [expr [winfo height $var(top)]*$ps(scale)/100./$scaling] append options " -width $ww -height $hh" # Page size switch -- $ps(size) { letter {append options " -paperwidth 8.5i -paperheight 11.i"} legal {append options " -paperwidth 8.5i -paperheight 14.i"} tabloid {append options " -paperwidth 11i -paperheight 17.i"} poster {append options " -paperwidth 36.i -paperheight 48.i"} a4 {append options " -paperwidth 195m -paperheight 282m"} other { if {$ps(width) != {} && $ps(height) != {}} { set pgww "[append ps(width) i]" set pghh "[append ps(height) i]" append options " -paperwidth $pgww -paperheight pghh" } } othermm { if {$ps(width) != {} && $ps(height) != {}} { set pgww "[append ps(width) m]" set pghh "[append ps(height) m]" append options " -paperwidth $pgww -paperheight pghh" } } } # Orientation switch -- $ps(orient) { portrait {append options " -landscape false"} landscape {append options " -landscape true"} } if {$ps(dest) == "file" && $ps(filename) != {}} { eval $var(graph) postscript output $ps(filename) $options } else { set ch [open "| $ps(cmd)" w] puts $ch [eval $var(graph) postscript output $options] close $ch } # reset fonts $var(graph) configure \ -font "{$ds9($var(graph,title,family))} $var(graph,title,size) $var(graph,title,weight) $var(graph,title,slant)" $var(graph) xaxis configure \ -tickfont "{$ds9($var(axis,font,family))} $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ -titlefont "{$ds9($var(axis,title,family))} $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" $var(graph) yaxis configure \ -tickfont "{$ds9($var(axis,font,family))} $var(axis,font,size) $var(axis,font,weight) $var(axis,font,slant)" \ -titlefont "{$ds9($var(axis,title,family))} $var(axis,title,size) $var(axis,title,weight) $var(axis,title,slant)" $var(graph) legend configure \ -font "{$ds9($var(legend,font,family))} $var(legend,font,size) $var(legend,font,weight) $var(legend,font,slant)" \ -titlefont "{$ds9($var(legend,title,family))} $var(legend,title,size) $var(legend,title,weight) $var(legend,title,slant)" } saods9/ds9/library/plotprocess.tcl000644 000765 000000 00000070345 12705445650 017631 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PrefsDialogPlot {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Plot}] lappend dprefs(tabs) [ttk::frame $w.plot] # Grid set f [ttk::labelframe $w.plot.grid -text [msgcat::mc {Grid}]] ttk::label $f.ttitle -text [msgcat::mc {Title}] FontMenuButton $f.title pap graph,title,family graph,title,size graph,title,weight graph,title,slant {} grid $f.ttitle $f.title -padx 2 -pady 2 -sticky w # Axis set f [ttk::labelframe $w.plot.axis -text [msgcat::mc {Axis}]] ttk::label $f.xtitle -text [msgcat::mc {X}] ttk::checkbutton $f.x -text [msgcat::mc {Grid}] -variable pap(axis,x,grid) ttk::radiobutton $f.xlinear -text [msgcat::mc {Linear}] \ -variable pap(axis,x,log) -value 0 ttk::radiobutton $f.xlog -text [msgcat::mc {Log}] \ -variable pap(axis,x,log) -value 1 ttk::label $f.ytitle -text [msgcat::mc {Y}] ttk::checkbutton $f.y -text [msgcat::mc {Grid}] -variable pap(axis,y,grid) ttk::radiobutton $f.ylinear -text [msgcat::mc {Linear}] \ -variable pap(axis,y,log) -value 0 ttk::radiobutton $f.ylog -text [msgcat::mc {Log}] \ -variable pap(axis,y,log) -value 1 ttk::label $f.ttextlab -text [msgcat::mc {Axis Title}] FontMenuButton $f.textlab pap axis,title,family axis,title,size axis,title,weight axis,title,slant {} ttk::label $f.tnumlab -text [msgcat::mc {Axis Numbers}] FontMenuButton $f.numlab pap axis,font,family axis,font,size axis,font,weight axis,font,slant {} grid $f.xtitle $f.x $f.xlinear $f.xlog -padx 2 -pady 2 -sticky w grid $f.ytitle $f.y $f.ylinear $f.ylog -padx 2 -pady 2 -sticky w grid $f.ttextlab $f.textlab -padx 2 -pady 2 -sticky w grid $f.tnumlab $f.numlab -padx 2 -pady 2 -sticky w # Dataset set f [ttk::labelframe $w.plot.dataset -text [msgcat::mc {Dataset}]] # Show ttk::checkbutton $f.show -text [msgcat::mc {Show}] -variable pap(show) grid $f.show -padx 2 -pady 2 -sticky w # Shape ttk::label $f.shapetitle -text [msgcat::mc {Shape}] ttk::menubutton $f.shape -textvariable pap(shape,symbol) \ -menu $f.shape.menu PlotLineShapeMenu $f.shape.menu pap(shape,symbol) ttk::checkbutton $f.shapefill -text [msgcat::mc {Fill}] \ -variable pap(shape,fill) ColorMenuButton $f.shapecolor pap shape,color {} grid $f.shapetitle $f.shape $f.shapefill $f.shapecolor \ -padx 2 -pady 2 -sticky w # Smooth ttk::label $f.smoothtitle -text [msgcat::mc {Smooth}] ttk::menubutton $f.smooth -textvariable pap(smooth) \ -menu $f.smooth.menu PlotLineSmoothMenu $f.smooth.menu pap(smooth) grid $f.smoothtitle $f.smooth -padx 2 -pady 2 -sticky w # Color ttk::label $f.colortitle -text [msgcat::mc {Color}] ColorMenuButton $f.color pap color {} grid $f.colortitle $f.color -padx 2 -pady 2 -sticky w # Width ttk::label $f.widthtitle -text [msgcat::mc {Width}] ttk::menubutton $f.width -textvariable pap(width) -menu $f.width.menu WidthDashMenu $f.width.menu pap width dash {} {} grid $f.widthtitle $f.width -padx 2 -pady 2 -sticky w # Error ttk::label $f.errortitle -text [msgcat::mc {Error}] ttk::checkbutton $f.error -text [msgcat::mc {Show}] \ -variable pap(error) ttk::checkbutton $f.errorcap -text [msgcat::mc {Cap}] \ -variable pap(error,cap) ColorMenuButton $f.errorcolor pap error,color {} ttk::menubutton $f.errorwidth -textvariable pap(error,width) \ -menu $f.errorwidth.menu WidthDashMenu $f.errorwidth.menu pap width dash {} {} grid $f.errortitle $f.error $f.errorcap $f.errorcolor $f.errorwidth \ -padx 2 -pady 2 -sticky w pack $w.plot.grid $w.plot.axis $w.plot.dataset \ -side top -fill both -expand true } proc ProcessPlotCmd {xarname iname buf fn} { upvar $xarname xar upvar $iname i global iap set varname $iap(tt) set id 0 # check for next command line option if {[string range [lindex $xar $i] 0 0] != {-}} { # determine which plot switch -- [string tolower [lindex $xar $i]] { {} - bar - scatter - new {} data - load - save - clear - dup - duplicate - stats - statistics - list - loadconfig - saveconfig - page - pagesetup - print - close - mode - axis - legend - font - title - show - color - fill - fillcolor - error - errorbar - barmode - name - shape - relief - smooth - width - dash - dataset - select - graph - line - view { set varname [lindex $iap(windows) end] set id [lsearch $iap(windows) $varname] } default { set varname [lindex $xar $i] set id [lsearch $iap(windows) $varname] incr i } } } # we better have a tt by now if {$id == -1} { Error "[msgcat::mc {Unable to find plot window}] $varname" return } upvar #0 $varname var global $varname # check for next command line option if {[string range [lindex $xar $i] 0 0] != {-}} { # now, process plot command switch -- [string tolower [lindex $xar $i]] { {} - bar - scatter { if {$buf != {}} { ProcessPlotNew $varname $xarname $iname $buf } elseif {$fn != {}} { if {[file exists $fn]} { set ch [open $fn r] set txt [read $ch] close $ch ProcessPlotNew $varname $xarname $iname $txt } } else { ProcessPlotNew $varname $xarname $iname {} } } new { incr i switch -- [lindex $xar $i] { name { set varname [lindex $xar [expr $i+1]] incr i 2 } } if {$buf != {}} { ProcessPlotNew $varname $xarname $iname $buf } elseif {$fn != {}} { if {[file exists $fn]} { set ch [open $fn r] set txt [read $ch] close $ch ProcessPlotNew $varname $xarname $iname $txt } } else { ProcessPlotNew $varname $xarname $iname {} } } data { incr i if {$buf != {}} { ProcessPlotData $varname $xarname $iname $buf } elseif {$fn != {}} { if {[file exists $fn]} { set ch [open $fn r] set txt [read $ch] close $ch ProcessPlotData $varname $xarname $iname $txt } } } load { # File Menu set ff [lindex $xar [expr $i+1]] set dim [lindex $xar [expr $i+2]] incr i 2 PlotLoadDataFile $varname $ff $dim FileLast apdatafbox $ff } save { # File Menu incr i set ff [lindex $xar $i] PlotSaveDataFile $varname $ff FileLast apdatafbox $ff } clear { # File Menu PlotClearData $varname } dup - duplicate { # File Menu incr i set mm [lindex $xar $i] if {$mm == {}} { set mm 1 } elseif {![string is integer $mm]} { set mm 1 incr i -1 } PlotDupData $varname $mm } stats - statistics { # File Menu set var(stats) 1 PlotStats $varname } list { # File Menu set var(list) 1 PlotList $varname } loadconfig { # File Menu incr i set ff [lindex $xar $i] PlotLoadConfigFile $varname $ff FileLast apconfigfbox $ff } saveconfig { # File Menu incr i set ff [lindex $xar $i] PlotSaveConfigFile $varname $ff FileLast apconfigfbox $ff } page - pagesetup { # File Menu incr i ProcessPlotPageSetup $varname $xarname $iname } print { # File Menu incr i ProcessPlotPrint $varname $xarname $iname } close { # File Menu PlotDestroy $varname } mode { # Edit Menu incr i set var(mode) [lindex $xar $i] PlotChangeMode $varname } axis { # Graph Menu incr i ProcessPlotAxis $varname $xarname $iname } legend { # Graph Menu incr i ProcessPlotLegend $varname $xarname $iname } font { # Graph Menu incr i ProcessPlotFont $varname $xarname $iname } title { # Graph Menu incr i ProcessPlotTitle $varname $xarname $iname } barmode { incr i set var(bar,mode) [lindex $xar $i] $var(proc,updategraph) $varname } show { # Dataset Menu incr i set var(show) [FromYesNo [lindex $xar $i]] $var(proc,updateelement) $varname } color { incr i ProcessPlotColor $varname $xarname $iname } fill { incr i set var(fill) [FromYesNo [lindex $xar $i]] $var(proc,updateelement) $varname } fillcolor { incr i set var(fill,color) [lindex $xar $i] $var(proc,updateelement) $varname } error - errorbar { # Dataset Menu incr i ProcessPlotErrorBar $varname $xarname $iname } name { # Dataset Menu incr i set var(name) [lindex $xar $i] $var(proc,updateelement) $varname } shape { # Dataset Line Menu incr i ProcessPlotShape $varname $xarname $iname } relief { # Dataset Bar Menu incr i set var(bar,relief) [lindex $xar $i] $var(proc,updateelement) $varname } smooth { # Dataset Line Menu incr i set var(smooth) [lindex $xar $i] $var(proc,updateelement) $varname } width { # Dataset Line Menu incr i set var(width) [lindex $xar $i] $var(proc,updateelement) $varname } dash { # Dataset Line Menu incr i set var(dash) [FromYesNo [lindex $xar $i]] $var(proc,updateelement) $varname } dataset - select { # Select Menu incr i set var(data,current) [lindex $xar $i] PlotCurrentData $varname } graph { # backward compatibility incr i ProcessPlotGraph $varname $xarname $iname } line { # backward compatibility incr i ProcessPlotLine $varname $xarname $iname } view { # backward compatibility incr i ProcessPlotView $varname $xarname $iname } } } else { ProcessPlotNew $varname $xarname $iname {} } # force update update idletasks } proc ProcessPlotNew {varname xarname iname buf} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i # check for next command line option if {[string range [lindex $xar $i] 0 0] != {-}} { switch -- [string tolower [lindex $xar $i]] { line {incr i; ProcessPlotNewOne line $varname $xarname $iname $buf} bar {incr i;ProcessPlotNewOne bar $varname $xarname $iname $buf} scatter { incr i ProcessPlotNewOne scatter $varname $xarname $iname $buf } default {ProcessPlotNewOne line $varname $xarname $iname $buf} } } else { PlotLine $varname {} {} {} {} xy $buf incr i -1 } } proc ProcessPlotNewOne {which varname xarname iname buf} { upvar #0 $varname var global $varname upvar 3 $xarname xar upvar 3 $iname i if {[string range [lindex $xar $i] 0 0] != {-}} { switch -- [string tolower [lindex $xar $i]] { stdin {incr i; AnalysisPlotStdin $which $varname {} $buf} {} { switch $which { line {PlotLine $varname {} {} {} {} xy $buf} bar {PlotBar $varname {} {} {} {} xy $buf} scatter {PlotScatter $varname {} {} {} {} xy $buf} } } default { switch $which { line { PlotLine $varname {} \ [lindex $xar $i] \ [lindex $xar [expr $i+1]] \ [lindex $xar [expr $i+2]] \ [lindex $xar [expr $i+3]] \ $buf } bar { PlotBar $varname {} \ [lindex $xar $i] \ [lindex $xar [expr $i+1]] \ [lindex $xar [expr $i+2]] \ [lindex $xar [expr $i+3]] \ $buf } scatter { PlotScatter $varname {} \ [lindex $xar $i] \ [lindex $xar [expr $i+1]] \ [lindex $xar [expr $i+2]] \ [lindex $xar [expr $i+3]] \ $buf } } incr i 3 } } } else { switch $which { line {PlotLine $varname {} {} {} {} xy $buf} bar {PlotBar $varname {} {} {} {} xy $buf} scatter {PlotScatter $varname {} {} {} {} xy $buf} } incr i -1 } } proc ProcessPlotData {varname xarname iname buf} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i PlotRaise $varname PlotDataSet $varname [lindex $xar $i] $buf $var(proc,updategraph) $varname PlotStats $varname PlotList $varname } # File Menu proc ProcessPlotPrint {varname xarname iname} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i global ps global current switch -- [string tolower [lindex $xar $i]] { destination {incr i; set ps(dest) [lindex $xar $i]} command {incr i; set ps(cmd) [lindex $xar $i]} filename {incr i; set ps(filename) [lindex $xar $i] } palette - color {incr i; set ps(color) [lindex $xar $i] } {} {PlotPostScript $varname} default {incr i -1; PlotPostScript $varname} } } proc ProcessPlotPageSetup {varname xarname iname} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i global ps switch -- [string tolower [lindex $xar $i]] { orientation - orient {incr i; set ps(orient) [lindex $xar $i]} pagesize - size {incr i; set ps(size) [lindex $xar $i] } } } # Graph Menu proc ProcessPlotAxis {varname xarname iname} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i switch -- [string tolower [lindex $xar $i]] { x { incr i switch -- [string tolower [lindex $xar $i]] { grid {incr i; set var(axis,x,grid) [FromYesNo [lindex $xar $i]]} log {incr i; set var(axis,x,log) [FromYesNo [lindex $xar $i]]} flip {incr i; set var(axis,x,flip) [FromYesNo [lindex $xar $i]]} auto {incr i; set var(axis,x,auto) [FromYesNo [lindex $xar $i]]} min {incr i; set var(axis,x,min) [lindex $xar $i]} max {incr i; set var(axis,x,max) [lindex $xar $i]} format {incr i; set var(axis,x,format) [lindex $xar $i]} } } y { incr i switch -- [string tolower [lindex $xar $i]] { grid {incr i; set var(axis,y,grid) [FromYesNo [lindex $xar $i]]} log {incr i; set var(axis,y,log) [FromYesNo [lindex $xar $i]]} flip {incr i; set var(axis,y,flip) [FromYesNo [lindex $xar $i]]} auto {incr i; set var(axis,y,auto) [FromYesNo [lindex $xar $i]]} min {incr i; set var(axis,y,min) [lindex $xar $i]} max {incr i; set var(axis,y,max) [lindex $xar $i]} format {incr i; set var(axis,y,format) [lindex $xar $i]} } } } $var(proc,updategraph) $varname } proc ProcessPlotLegend {varname xarname iname} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i switch -- [string tolower [lindex $xar $i]] { position {incr i; set var(legend,position) [lindex $xar $i]} default {set var(legend) [FromYesNo [lindex $xar $i]]} } $var(proc,updategraph) $varname } proc ProcessPlotFont {varname xarname iname} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i switch -- [string tolower [lindex $xar $i]] { title { incr i switch -- [string tolower [lindex $xar $i]] { family - font {incr i; set var(graph,title,family) [lindex $xar $i]} size {incr i; set var(graph,title,size) [lindex $xar $i]} weight {incr i; set var(graph,title,weight) [lindex $xar $i]} slant {incr i; set var(graph,title,slant) [lindex $xar $i]} style { incr i switch [string tolower [lindex $xar $i]] { normal { set var(graph,title,weight) normal set var(graph,title,slant) roman } bold { set var(graph,title,weight) bold set var(graph,title,slant) roman } italic { set var(graph,title,weight) normal set var(graph,title,slant) italic } } } } } axestitle - labels { incr i switch -- [string tolower [lindex $xar $i]] { family - font {incr i; set var(axis,title,family) [lindex $xar $i]} size {incr i; set var(axis,title,size) [lindex $xar $i]} weight {incr i; set var(axis,title,weight) [lindex $xar $i]} slant {incr i; set var(axis,title,slant) [lindex $xar $i]} style { incr i switch [string tolower [lindex $xar $i]] { normal { set var(axis,title,weight) normal set var(axis,title,slant) roman } bold { set var(axis,title,weight) bold set var(axis,title,slant) roman } italic { set var(axis,title,weight) normal set var(axis,title,slant) italic } } } } } axesnumbers - numbers { incr i switch -- [string tolower [lindex $xar $i]] { family - font {incr i; set var(axis,font,family) [lindex $xar $i]} size {incr i; set var(axis,font,size) [lindex $xar $i]} weight {incr i; set var(axis,font,weight) [lindex $xar $i]} slant {incr i; set var(axis,font,slant) [lindex $xar $i]} style { incr i switch [string tolower [lindex $xar $i]] { normal { set var(axis,font,weight) normal set var(axis,font,slant) roman } bold { set var(axis,font,weight) bold set var(axis,font,slant) roman } italic { set var(axis,font,weight) normal set var(axis,font,slant) italic } } } } } legendtitle { incr i switch -- [string tolower [lindex $xar $i]] { family - font {incr i; set var(legend,title,family) [lindex $xar $i]} size {incr i; set var(legend,title,size) [lindex $xar $i]} weight {incr i; set var(legend,title,weight) [lindex $xar $i]} slant {incr i; set var(legend,title,slant) [lindex $xar $i]} } } legend { incr i switch -- [string tolower [lindex $xar $i]] { family - font {incr i; set var(legend,font,family) [lindex $xar $i]} size {incr i; set var(legend,font,size) [lindex $xar $i]} weight {incr i; set var(legend,font,weight) [lindex $xar $i]} slant {incr i; set var(legend,font,slant) [lindex $xar $i]} } } } $var(proc,updategraph) $varname } proc ProcessPlotTitle {varname xarname iname} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i switch -- [string tolower [lindex $xar $i]] { x - xaxis {incr i; set var(axis,x,title) [lindex $xar $i]} y - yaxis {incr i; set var(axis,y,title) [lindex $xar $i]} legend {incr i; set var(legend,title) [lindex $xar $i]} default {set var(graph,title) [lindex $xar $i]} } $var(proc,updategraph) $varname } proc ProcessPlotErrorBar {varname xarname iname} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i switch -- [string tolower [lindex $xar $i]] { cap {incr i; set var(error,cap) [FromYesNo [lindex $xar $i]]} color {incr i; set var(error,color) [lindex $xar $i]} width {incr i; set var(error,width) [lindex $xar $i]} default {set var(error) [FromYesNo [lindex $xar $i]]} } $var(proc,updateelement) $varname } # Dataset Menu proc ProcessPlotShape {varname xarname iname} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i switch -- [string tolower [lindex $xar $i]] { fill {incr i; set var(shape,fill) [FromYesNo [lindex $xar $i]]} color {incr i; set var(shape,color) [lindex $xar $i]} default {set var(shape,symbol) [lindex $xar $i]} } $var(proc,updateelement) $varname } proc ProcessPlotColor {varname xarname iname} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i switch -- [string tolower [lindex $xar $i]] { discrete - line - linear - step - quadratic - bar { # backward compatibility incr i set var(color) [lindex $xar $i] } error - errorbar { # backward compatibility incr i set var(error,color) [lindex $xar $i] } default { # Dataset Menu set var(color) [lindex $xar $i] } } $var(proc,updateelement) $varname } # backward compatibility proc ProcessPlotGraph {varname xarname iname} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i switch -- [string tolower [lindex $xar $i]] { grid { incr i; switch -- [string tolower [lindex $xar $i]] { x {incr i; set var(axis,x,grid) [FromYesNo [lindex $xar $i]]} y {incr i; set var(axis,y,grid) [FromYesNo [lindex $xar $i]]} default { # backward compatibility set var(axis,y,grid) [FromYesNo [lindex $xar $i]] set var(axis,x,grid) [FromYesNo [lindex $xar $i]] } } } log { incr i; switch -- [string tolower [lindex $xar $i]] { x {incr i; set var(axis,x,log) [FromYesNo [lindex $xar $i]]} y {incr i; set var(axis,y,log) [FromYesNo [lindex $xar $i]]} } } flip { incr i; switch -- [string tolower [lindex $xar $i]] { x {incr i; set var(axis,x,flip) [FromYesNo [lindex $xar $i]]} y {incr i; set var(axis,y,flip) [FromYesNo [lindex $xar $i]]} } } format { incr i switch -- [string tolower [lindex $xar $i]] { x {incr i; set var(axis,x,format) [lindex $xar $i]} y {incr i; set var(axis,y,format) [lindex $xar $i]} } } range { incr i switch -- [string tolower [lindex $xar $i]] { x { incr i switch -- [string tolower [lindex $xar $i]] { auto { incr i set var(axis,x,auto) [FromYesNo [lindex $xar $i]] } min {incr i; set var(axis,x,min) [lindex $xar $i]} max {incr i; set var(axis,x,max) [lindex $xar $i]} } } y { incr i switch -- [string tolower [lindex $xar $i]] { auto { incr i set var(axis,y,auto) [FromYesNo [lindex $xar $i]] } min {incr i; set var(axis,y,min) [lindex $xar $i]} max {incr i; set var(axis,y,max) [lindex $xar $i]} } } } } labels { incr i switch -- [string tolower [lindex $xar $i]] { title {incr i; set var(graph,title) [lindex $xar $i]} xaxis {incr i; set var(axis,x,title) [lindex $xar $i]} yaxis {incr i; set var(axis,y,title) [lindex $xar $i]} legend {incr i; set var(legend,title) [lindex $xar $i]} } } type { # backward compatibility incr i switch -- [string tolower [lindex $xar $i]] { line - bar {} } } scale { # backward compatibility incr i switch -- [string tolower [lindex $xar $i]] { linearlinear { set var(axis,x,log) 0 set var(axis,y,log) 0 } linearlog { set var(axis,x,log) 0 set var(axis,y,log) 1 } loglinear { set var(axis,x,log) 1 set var(axis,y,log) 0 } loglog { set var(axis,x,log) 1 set var(axis,y,log) 1 } } } } $var(proc,updategraph) $varname } # backward compatibility proc ProcessPlotView {varname xarname iname} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i switch -- [string tolower [lindex $xar $i]] { discrete { incr i set var(show) [FromYesNo [lindex $xar $i]] } line - linear { incr i if {[FromYesNo [lindex $xar $i]]} { set var(show) 1 set var(smooth) linear } } step { incr i if {[FromYesNo [lindex $xar $i]]} { set var(show) 1 set var(smooth) step } } quadratic { incr i if {[FromYesNo [lindex $xar $i]]} { set var(show) 1 set var(smooth) quadratic } } error - errorbar { incr i set var(error) [FromYesNo [lindex $xar $i]] } } $var(proc,updateelement) $varname } # backward compatibility proc ProcessPlotLine {varname xarname iname} { upvar #0 $varname var global $varname upvar 2 $xarname xar upvar 2 $iname i switch -- [string tolower [lindex $xar $i]] { discrete { incr i set var(shape,symbol) [lindex $xar $i] } line - linear - step - quadratic - error - errorbar { incr i switch -- [string tolower [lindex $xar $i]] { width { incr i set var(width) [lindex $xar $i] } dash { incr i set var(dash) [FromYesNo [lindex $xar $i]] } style { incr i set var(error) 1 } } } } $var(proc,updateelement) $varname } proc ProcessSendPlotCmd {proc id param} { global iap set i 0 # determine which plot switch -- [string tolower [lindex $param $i]] { {} - stats - statistics - list - mode - axis - legend - font - title - barmode - show - color - error - errorbar - name - shape - relief - smooth - width - dash - dataset - select { set varname [lindex $iap(windows) end] set idd [lsearch $iap(windows) $varname] } default { set varname [lindex $param $i] set idd [lsearch $iap(windows) $varname] incr i } } # we better have a tt by now if {$idd == -1} { Error "[msgcat::mc {Unable to find plot window}] $varname" return } upvar #0 $varname var global $varname # now, process plot command switch -- [string tolower [lindex $param $i]] { {} {$proc $id "$iap(windows)\n"} stats - statistics {$proc $id "[PlotStatsGenerate $varname]"} list {$proc $id "[PlotListGenerate $varname]"} mode {$proc $id "$var(mode)\n"} axis { incr i switch -- [string tolower [lindex $param $i]] { x { incr i switch -- [string tolower [lindex $param $i]] { grid {$proc $id [ToYesNo $var(axis,x,grid)]} log {$proc $id [ToYesNo $var(axis,x,log)]} flip {$proc $id [ToYesNo $var(axis,x,flip)]} auto {$proc $id [ToYesNo $var(axis,x,auto)]} min {$proc $id "$var(axis,x,min)\n"} max {$proc $id "$var(axis,x,max)\n"} format {$proc $id "$var(axis,x,format)\n"} } } y { incr i switch -- [string tolower [lindex $param $i]] { grid {$proc $id [ToYesNo $var(axis,y,grid)]} log {$proc $id [ToYesNo $var(axis,y,log)]} flip {$proc $id [ToYesNo $var(axis,y,flip)]} auto {$proc $id [ToYesNo $var(axis,y,auto)]} min {$proc $id "$var(axis,y,min)\n"} max {$proc $id "$var(axis,y,max)\n"} format {$proc $id "$var(axis,y,format)\n"} } } } } legend { incr i switch -- [string tolower [lindex $param $i]] { position {$proc $id "$var(legend,position)\n"} default {$proc $id [ToYesNo $var(legend)]} } } font { incr i switch -- [string tolower [lindex $param $i]] { title { incr i switch -- [string tolower [lindex $param $i]] { family - font {$proc $id "$var(graph,title,family)\n"} size {$proc $id "$var(graph,title,size)\n"} weight {$proc $id "$var(graph,title,weight)\n"} slant {$proc $id "$var(graph,title,slant)\n"} } } axestitle - labels { incr i switch -- [string tolower [lindex $param $i]] { family - font {$proc $id "$var(axis,title,family)\n"} size {$proc $id "$var(axis,title,size)\n"} weight {$proc $id "$var(axis,title,weight)\n"} slant {$proc $id "$var(axis,title,slant)\n"} } } axesnumbers - numbers { incr i switch -- [string tolower [lindex $param $i]] { family - font {$proc $id "$var(axis,font,family)\n"} size {$proc $id "$var(axis,font,size)\n"} weight {$proc $id "$var(axis,font,weight)\n"} slant {$proc $id "$var(axis,font,slant)\n"} } } legendtitle { incr i switch -- [string tolower [lindex $param $i]] { family - font {$proc $id "$var(legend,title,family)\n"} size {$proc $id "$var(legend,title,size)\n"} weight {$proc $id "$var(legend,title,weight)\n"} slant {$proc $id "$var(legend,title,slant)\n"} } } legend { incr i switch -- [string tolower [lindex $param $i]] { family - font {$proc $id "$var(legend,font,family)\n"} size {$proc $id "$var(legend,font,size)\n"} weight {$proc $id "$var(legend,font,weight)\n"} slant {$proc $id "$var(legend,font,slant)\n"} } } } } title { incr i switch -- [string tolower [lindex $param $i]] { x - xaxis {$proc $id "$var(axis,x,title)\n"} y - yaxis {$proc $id "$var(axis,y,title)\n"} legend {$proc $id "$var(legend,title)\n"} default {$proc $id "$var(graph,title)\n"} } } barmode {$proc $id "$var(bar,mode)\n"} show {$proc $id [ToYesNo $var(show)]} color {$proc $id "$var(color)\n"} fill {$proc $id [ToYesNo $var(fill)]} fillcolor {$proc $id "$var(fill,color)\n"} error - errorbar { incr i switch -- [string tolower [lindex $param $i]] { cap {$proc $id [ToYesNo $var(error,cap)]} color {$proc $id "$var(error,color)\n"} width {$proc $id "$var(error,width)\n"} default {$proc $id [ToYesNo $var(error)]} } } name {$proc $id "$var(name)\n"} shape { incr i switch -- [string tolower [lindex $param $i]] { fill {$proc $id [ToYesNo $var(shape,fill)]} color {$proc $id "$var(shape,color)\n"} default {$proc $id "$var(shape,symbol)\n"} } } relief {$proc $id "$var(bar,relief)\n"} smooth {$proc $id "$var(smooth)\n"} width {$proc $id "$var(width)\n"} dash {$proc $id [ToYesNo $var(dash)]} dataset - select {$proc $id "$var(data,current)\n"} } } saods9/ds9/library/plotscatter.tcl000644 000765 000000 00000016107 12705445650 017614 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # used by backup proc PlotScatterTool {} { global iap PlotScatter $iap(tt) [msgcat::mc {Scatter Plot Tool}] {} {} {} 2 {} } proc PlotScatter {tt wtt title xaxis yaxis dim data} { global iap # make the window name unique set ii [lsearch $iap(windows) $tt] if {$ii>=0} { incr iap(unique) append tt $iap(unique) } # set the window title if none if {$wtt == {}} { set wtt $tt } set varname $tt upvar #0 $varname var global $varname PlotScatterProc $varname PlotDialog $varname $wtt $title $xaxis $yaxis PlotDialogScatter $varname PlotDataSet $varname $dim $data $var(proc,updategraph) $varname PlotStats $varname PlotList $varname } proc PlotScatterDialog {varname wtt title xaxis yaxis} { upvar #0 $varname var global $varname PlotScatterProc $varname PlotDialog $varname $wtt $title $xaxis $yaxis PlotDialogScatter $varname } proc PlotScatterProc {varname} { upvar #0 $varname var global $varname set var(proc,updategraph) PlotUpdateGraph set var(proc,updateelement) PlotScatterUpdateElement set var(proc,highlite) PlotScatterHighliteElement set var(proc,button) PlotScatterButton } proc PlotDialogScatter {varname} { upvar #0 $varname var global $varname global ds9 set var(seq) 0 # Dataset $var(mb).dataset add checkbutton -label [msgcat::mc {Show}] \ -variable ${varname}(show) \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset add separator $var(mb).dataset add cascade -label [msgcat::mc {Shape}] \ -menu $var(mb).dataset.shape $var(mb).dataset add cascade -label [msgcat::mc {Error}] \ -menu $var(mb).dataset.error $var(mb).dataset add separator $var(mb).dataset add command -label "[msgcat::mc {Name}]..." \ -command [list DatasetNameDialog $varname] # Shape menu $var(mb).dataset.shape $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Circle}] \ -variable ${varname}(shape,symbol) -value circle \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Square}] \ -variable ${varname}(shape,symbol) -value square \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Diamond}] \ -variable ${varname}(shape,symbol) -value diamond \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Plus}] \ -variable ${varname}(shape,symbol) -value plus \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Cross}] \ -variable ${varname}(shape,symbol) -value cross \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Simple Plus}] \ -variable ${varname}(shape,symbol) -value splus \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Simple Cross}] \ -variable ${varname}(shape,symbol) -value scross \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Triangle}] \ -variable ${varname}(shape,symbol) -value triangle \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset.shape add radiobutton \ -label [msgcat::mc {Arrow}] \ -variable ${varname}(shape,symbol) -value arrow \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset.shape add separator $var(mb).dataset.shape add checkbutton \ -label [msgcat::mc {Fill}] \ -variable ${varname}(shape,fill) \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset.shape add cascade -label [msgcat::mc {Color}] \ -menu $var(mb).dataset.shape.color # Color PlotColorMenu $var(mb).dataset.shape.color $varname shape,color \ [list PlotScatterUpdateElement $varname] # Error menu $var(mb).dataset.error $var(mb).dataset.error add checkbutton -label [msgcat::mc {Show}] \ -variable ${varname}(error) \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset.error add checkbutton -label [msgcat::mc {Cap}] \ -variable ${varname}(error,cap) \ -command [list PlotScatterUpdateElement $varname] $var(mb).dataset.error add separator $var(mb).dataset.error add cascade -label [msgcat::mc {Color}] \ -menu $var(mb).dataset.error.color $var(mb).dataset.error add cascade -label [msgcat::mc {Width}] \ -menu $var(mb).dataset.error.width PlotColorMenu $var(mb).dataset.error.color $varname error,color \ [list PlotScatterUpdateElement $varname] WidthDashMenu $var(mb).dataset.error.width $varname error,width {} \ [list PlotScatterUpdateElement $varname] {} # graph set var(type) scatter set var(graph) [blt::graph $var(top).scatter \ -width 600 \ -height 500 \ -highlightthickness 0 \ ] pack $var(graph) -expand yes -fill both PlotChangeMode $varname } proc PlotScatterUpdateElement {varname} { upvar #0 $varname var global $varname # warning: uses current vars if {$var(data,total) == 0} { return } set nn $var(data,current) PlotGetVar $varname $nn if {$var(shape,symbol) == "none"} { set var(shape,symbol) circle } if {$var(shape,fill)} { set clr $var(shape,color) } else { set clr {} } if {$var(error)} { set show both } else { set show none } if {$var(error,cap)} { set cap [expr $var(error,width)+3] } else { set cap 0 } $var(graph) element configure "d-${nn}" \ -label "$var(name)" -hide [expr !$var(show)] \ -symbol $var(shape,symbol) \ -fill $clr -outline $var(shape,color) \ -linewidth 0 -pixels 5 -scalesymbols no \ -showerrorbars $show -errorbarcolor $var(error,color) \ -errorbarwidth $var(error,width) -errorbarcap $cap $var(graph) pen configure active -color blue \ -symbol $var(shape,symbol) \ -linewidth 0 -pixels 5 \ -showerrorbars $show -errorbarcolor $var(error,color) \ -errorbarwidth $var(error,width) -errorbarcap $cap } proc PlotScatterButton {varname x y} { upvar #0 $varname var global $varname if {$var(data,total) == 0} { return } if {$var(callback) == {}} { return } set rr [$var(graph) element closest $x $y] set elem [lindex $rr 1] set row [lindex $rr 3] if {$elem != {}} { if {$row != {}} { $var(graph) element deactivate $elem $var(graph) element activate $elem $row # rows start at 1 eval "$var(callback) [expr $row+1]" } else { $var(graph) element deactivate $elem eval "$var(callback) {}" } } } proc PlotScatterHighliteElement {varname rowlist} { upvar #0 $varname var global $varname if {$var(data,total) == 0} { return } if {$var(show)} { $var(graph) element deactivate d-1 if {$rowlist != {}} { # can have multiple rows eval "$var(graph) element activate d-1 $rowlist" } } } saods9/ds9/library/point.tcl000644 000765 000000 00000005637 12705445650 016407 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PointDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # procs set var(proc,apply) PointApply set var(proc,close) PointClose set var(proc,coordCB) PointCoordCB # base MarkerBaseCenterDialog $varname # menus $var(mb) add cascade -label [msgcat::mc {Shape}] -menu $var(mb).shape menu $var(mb).shape $var(mb).shape add radiobutton -label [msgcat::mc {Circle}] \ -variable ${varname}(shape) -value circle \ -command "PointShape $varname" $var(mb).shape add radiobutton -label [msgcat::mc {Box}] \ -variable ${varname}(shape) -value box \ -command "PointShape $varname" $var(mb).shape add radiobutton -label [msgcat::mc {Diamond}] \ -variable ${varname}(shape) -value diamond \ -command "PointShape $varname" $var(mb).shape add radiobutton -label [msgcat::mc {Cross}] \ -variable ${varname}(shape) -value cross \ -command "PointShape $varname" $var(mb).shape add radiobutton -label [msgcat::mc {X}] \ -variable ${varname}(shape) -value x \ -command "PointShape $varname" $var(mb).shape add radiobutton -label [msgcat::mc {Arrow}] \ -variable ${varname}(shape) -value arrow \ -command "PointShape $varname" $var(mb).shape add radiobutton -label [msgcat::mc {BoxCircle}] \ -variable ${varname}(shape) -value boxcircle \ -command "PointShape $varname" # analysis $var(mb) add cascade -label [msgcat::mc {Analysis}] -menu $var(mb).analysis menu $var(mb).analysis # plot3d MarkerAnalysisPlot3dDialog $varname # init set var(shape) [$var(frame) get marker $var(id) point shape] set var(size) [$var(frame) get marker $var(id) point size] set f $var(top).param # size ttk::label $f.tsize -text [msgcat::mc {Size}] ttk::entry $f.size -textvariable ${varname}(size) -width 13 ttk::label $f.usize -text [msgcat::mc {Pixels}] grid $f.tsize $f.size $f.usize -padx 2 -pady 2 -sticky w } # actions proc PointClose {varname} { upvar #0 $varname var global $varname MarkerBaseCenterClose $varname } proc PointApply {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) point size $var(size) MarkerBaseCenterApply $varname } # callbacks proc PointCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "PointCoordCB" } MarkerAnalysisPlot3dSystem $varname MarkerBaseCoordCB $varname MarkerBaseCenterMoveCB $varname } # support proc PointShape {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) point shape $var(shape) } saods9/ds9/library/polygon.tcl000644 000765 000000 00000003665 12705445650 016744 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PolygonDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # procs set var(proc,apply) PolygonApply set var(proc,close) PolygonClose set var(proc,coordCB) PolygonCoordCB # base MarkerBaseCenterDialog $varname # analysis $var(mb) add cascade -label [msgcat::mc {Analysis}] -menu $var(mb).analysis menu $var(mb).analysis MarkerAnalysisStatsDialog $varname MarkerAnalysisHistogramDialog $varname MarkerAnalysisPlot3dDialog $varname # init MarkerBaseCenterRotateCB $varname # callbacks $var(frame) marker $var(id) callback rotate MarkerBaseCenterRotateCB $varname set f $var(top).param # Angle ttk::label $f.tangle -text [msgcat::mc {Angle}] ttk::entry $f.angle -textvariable ${varname}(angle) -width 13 ttk::label $f.uangle -text [msgcat::mc {Degrees}] grid $f.tangle $f.angle $f.uangle -padx 2 -pady 2 -sticky w } # actions proc PolygonClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback rotate MarkerBaseCenterRotateCB MarkerBaseCenterClose $varname } proc PolygonApply {varname} { upvar #0 $varname var global $varname MarkerBaseCenterRotate $varname MarkerBaseCenterApply $varname } # callbacks proc PolygonCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "PolygonCoordCB" } MarkerAnalysisStatsSystem $varname MarkerAnalysisPlot3dSystem $varname MarkerBaseCoordCB $varname MarkerBaseCenterMoveCB $varname MarkerBaseCenterRotateCB $varname } saods9/ds9/library/prefs.tcl000644 000765 000000 00000066334 12746745247 016410 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PrefsDef {} { global prefs global iprefs global ds9 set iprefs(top) .pf set iprefs(mb) .pfmb set iprefs(tabs) {} set prefs(ext) {.prf} set prefs(version) [lindex $ds9(version) 0] set prefs(dir) [file join [GetEnvHome] ".$ds9(app)"] set prefs(fn) [file join $prefs(dir) "$ds9(app).$prefs(version)$prefs(ext)"] } proc LoadPrefs {} { global ds9 global prefs if {[file exist $prefs(dir)] && [file isdirectory $prefs(dir)]} { # new style # look for current version switch -- [SourceInitFile $prefs(fn)] { 1 { # success FixPrefs $prefs(version) } 0 { # found and failed to execute } -1 { # look for prev version set major [lindex [split $prefs(version) {.}] 0] set minor [lindex [split $prefs(version) {.}] 1] if {$minor>0} { set minor [expr $minor-1] } else { set major [expr $minor-1] set minor 9 } set fn [file join $prefs(dir) "$ds9(app).${major}.${minor}$prefs(ext)"] if {[SourceInitFile $fn] == 1} { FixPrefs $prefs(version) } } } } else { # ok, try old style if {[SourceInitFileDir $prefs(ext)]} { # ok, this is a major kludge to fix a major booboo. # Beta versions generated prefs with version set to # something like '7.4b7'. We need to remove the 'b7' part. set ll [string first {b} $prefs(version)] if {$ll != -1} { set ll [expr $ll -1] set prefs(version) [string range $prefs(version) 0 $ll] } FixPrefs $prefs(version) } } } proc CheckPrefs {} { global ds9 global prefs set rr [string compare $prefs(version) [lindex $ds9(version) 0]] switch $rr { -1 { if {[tk_messageBox -type yesno -icon question -message [msgcat::mc {DS9 has detected an older preferences file, do you wish to update?}]] == {yes}} { SavePrefs } } 0 {} 1 { tk_messageBox -type ok -icon warning -message [msgcat::mc {DS9 has detected a newer version of a preferences file.}] } } } proc ClearPrefs {} { global ds9 global prefs if {[file exist $prefs(dir)] && [file isdirectory $prefs(dir)]} { # clear new style if {[file exist $prefs(fn)]} { catch {file delete -force $prefs(fn)} } } else { # make sure old prefs files are removed foreach pp {{.} {}} { set fn $pp$ds9(app)$prefs(ext) foreach dir [list {.} [GetEnvHome]] { set ff [file join $dir $fn] if {[file exist $ff]} { catch {file delete -force $ff} return } } } } } proc SavePrefs {} { global tcl_platform global ds9 global prefs ClearPrefs # new style prefs file # mkdir if needed catch {file mkdir $prefs(dir)} if {![file exist $prefs(dir)] || ![file isdirectory $prefs(dir)]} { # something is wrong, just bail Error [msgcat::mc {An error has occurred while saving}] return } # open prefs file if {[catch {set ch [open $prefs(fn) w]}]} { Error [msgcat::mc {An error has occurred while saving}] return } switch $tcl_platform(platform) { unix {file attributes $prefs(fn) -permissions "rw-r--r--"} windows {} } puts $ch "global ds9" puts $ch "global prefs" puts $ch "set prefs(version) [lindex $ds9(version) 0]" # check for wrong prefs puts $ch "\# this is a check for to ensure a match between the" puts $ch "\# current ds9 version matches the prefs version" puts $ch "if {\[string compare \$prefs(version) \[lindex \$ds9(version)\ 0\]] == 1} {" puts $ch " return" puts $ch "}" # Basic global pds9 puts $ch "global pds9" puts $ch "array set pds9 \{ [array get pds9] \}" global current global pcurrent puts $ch "global current" puts $ch "global pcurrent" puts $ch "array set pcurrent \{ [array get pcurrent] \}" puts $ch {array set current [array get pcurrent]} global view global pview puts $ch "global view" puts $ch "global pview" puts $ch "array set pview \{ [array get pview] \}" puts $ch {array set view [array get pview]} global phttp puts $ch "global phttp" puts $ch "array set phttp \{ [array get phttp] \}" global pbuttons puts $ch "global pbuttons" puts $ch "array set pbuttons \{ [array get pbuttons] \}" global ppanner puts $ch "global ppanner" puts $ch "array set ppanner \{ [array get ppanner] \}" global pmagnifier puts $ch "global pmagnifier" puts $ch "array set pmagnifier \{ [array get pmagnifier] \}" # File global ps global pps puts $ch "global ps" puts $ch "global pps" puts $ch "array set pps \{ [array get pps] \}" puts $ch {array set ps [array get pps]} global pr global ppr puts $ch "global pr" puts $ch "global ppr" puts $ch "array set ppr \{ [array get ppr] \}" puts $ch {array set pr [array get ppr]} # Frame global blink global pblink puts $ch "global blink" puts $ch "global pblink" puts $ch "array set pblink \{ [array get pblink] \}" puts $ch {array set blink [array get pblink]} global tile global ptile puts $ch "global tile" puts $ch "global ptile" puts $ch "array set ptile \{ [array get ptile] \}" puts $ch {array set tile [array get ptile]} global threed global pthreed puts $ch "global threed" puts $ch "global pthreed" puts $ch "array set pthreed \{ [array get pthreed] \}" puts $ch {array set threed [array get pthreed]} # Bin global bin global pbin puts $ch "global bin" puts $ch "global pbin" puts $ch "array set pbin \{ [array get pbin] \}" puts $ch {array set bin [array get pbin]} # Zoom global panzoom global ppanzoom puts $ch "global panzoom" puts $ch "global ppanzoom" puts $ch "array set ppanzoom \{ [array get ppanzoom] \}" puts $ch {array set panzoom [array get ppanzoom]} # Scale global scale global pscale puts $ch "global scale" puts $ch "global pscale" puts $ch "array set pscale \{ [array get pscale] \}" puts $ch {array set scale [array get pscale]} global minmax global pminmax puts $ch "global minmax" puts $ch "global pminmax" puts $ch "array set pminmax \{ [array get pminmax] \}" puts $ch {array set minmax [array get pminmax]} global zscale global pzscale puts $ch "global zscale" puts $ch "global pzscale" puts $ch "array set pzscale \{ [array get pzscale] \}" puts $ch {array set zscale [array get pzscale]} # Region global marker global pmarker puts $ch "global marker" puts $ch "global pmarker" puts $ch "array set pmarker \{ [array get pmarker] \}" puts $ch {array set marker [array get pmarker]} # WCS global wcs global pwcs puts $ch "global wcs" puts $ch "global pwcs" puts $ch "array set pwcs \{ [array get pwcs] \}" puts $ch {array set wcs [array get pwcs]} # Analysis global ime global pime puts $ch "global pime" puts $ch "array set pime \{ [array get pime] \}" puts $ch {array set ime [array get pime]} global pgraph puts $ch "global pgraph" puts $ch "array set pgraph \{ [array get pgraph] \}" global pcoord puts $ch "global pcoord" puts $ch "array set pcoord \{ [array get pcoord] \}" global pexamine puts $ch "global pexamine" puts $ch "array set pexamine \{ [array get pexamine] \}" global pixel global ppixel puts $ch "global pixel" puts $ch "global ppixel" puts $ch "array set ppixel \{ [array get ppixel] \}" puts $ch {array set pixel [array get ppixel]} global mask global pmask puts $ch "global mask" puts $ch "global pmask" puts $ch "array set pmask \{ [array get pmask] \}" puts $ch {array set mask [array get pmask]} global contour global pcontour puts $ch "global contour" puts $ch "global pcontour" puts $ch "array set pcontour \{ [array get pcontour] \}" puts $ch {array set contour [array get pcontour]} global grid global pgrid puts $ch "global grid" puts $ch "global pgrid" puts $ch "array set pgrid \{ [array get pgrid] \}" puts $ch {array set grid [array get pgrid]} global block global pblock puts $ch "global block" puts $ch "global pblock" puts $ch "array set pblock \{ [array get pblock] \}" puts $ch {array set block [array get pblock]} global smooth global psmooth puts $ch "global smooth" puts $ch "global psmooth" puts $ch "array set psmooth \{ [array get psmooth] \}" puts $ch {array set smooth [array get psmooth]} global pnres puts $ch "global pnres" puts $ch "array set pnres \{ [array get pnres] \}" global pcat puts $ch "global pcat" puts $ch "array set pcat \{ [array get pcat] \}" global pvo puts $ch "global pvo" puts $ch "array set pvo \{ [array get pvo] \}" global pap puts $ch "global pap" puts $ch "array set pap \{ [array get pap] \}" global panalysis puts $ch "global panalysis" puts $ch "array set panalysis \{ [array get panalysis] \}" # Other puts $ch "" puts $ch "\# Colorbar prefs" global colorbar global pcolorbar puts $ch "global colorbar" puts $ch "global pcolorbar" puts $ch "array set pcolorbar \{ [array get pcolorbar] \}" puts $ch {array set colorbar [array get pcolorbar]} # and close close $ch } # Backward Compatibility proc FixVar {varname ovarname} { global aa bb set aa $varname set bb $ovarname uplevel #0 { if {[info exists $bb]} { set $aa [expr $$bb] unset $bb } } } proc FixVarRm {ovarname} { global aa set aa $ovarname uplevel #0 { if {[info exists $aa]} { unset $aa } } } proc FixFontVar {weightname slantname stylename} { global aa bb cc set aa $weightname set bb $slantname set cc $stylename uplevel #0 { if {[info exists $cc]} { switch [expr $$cc] { normal { set $aa normal set $bb roman } bold { set $aa bold set $bb roman } italic { set $aa normal set $bb italic } } unset $cc } } } # we only support 6.x and higher proc FixPrefs {version} { set major [lindex [split $version {.}] 0] if {$major == {5}} { set version 5.x } switch $version { 5.x { FixPrefs5.xto6.0 FixPrefs6.0to6.1 FixPrefs6.1to6.2 FixPrefs6.2to7.0 FixPrefs7.0to7.1 FixPrefs7.1to7.2 FixPrefs7.2to7.3 } 6.0 { FixPrefs6.0to6.1 FixPrefs6.1to6.2 FixPrefs6.2to7.0 FixPrefs7.0to7.1 FixPrefs7.1to7.2 FixPrefs7.2to7.3 } 6.1 - 6.1.1 - 6.1.2 { FixPrefs6.1to6.2 FixPrefs6.2to7.0 FixPrefs7.0to7.1 FixPrefs7.1to7.2 FixPrefs7.2to7.3 } 6.2 { FixPrefs6.2to7.0 FixPrefs7.0to7.1 FixPrefs7.1to7.2 FixPrefs7.2to7.3 } 7.0 { FixPrefs7.0to7.1 FixPrefs7.1to7.2 FixPrefs7.2to7.3 } 7.1 { FixPrefs7.1to7.2 FixPrefs7.2to7.3 } 7.2 { FixPrefs7.2to7.3 } 7.3 - 7.3.1 - 7.3.2 { } 7.4 { } 7.5 { FixPrefs7.4to7.5 } } } proc FixPrefs7.4to7.5 {} { FixVarRm pds9(threads) } proc FixPrefs7.2to7.3 {} { global current if {$current(mode) == {pointer}} { set current(mode) region } FixVar pbuttons(edit,region) pbuttons(edit,pointer) FixVar pbuttons(frame,match,cube,image) pbuttons(frame,match,cube) FixVar pbuttons(frame,lock,cube,image) pbuttons(frame,lock,cube) FixVar pap(axis,x,grid) pap(graph,x,grid) FixVar pap(axis,x,log) pap(graph,x,log) FixVar pap(axis,x,flip) pap(graph,x,flip) FixVar pap(axis,y,grid) pap(graph,y,grid) FixVar pap(axis,y,log) pap(graph,y,log) FixVar pap(axis,y,flip) pap(graph,y,flip) FixVar pap(graph,title,family) pap(titleFont) FixVar pap(graph,title,size) pap(titleSize) FixVar pap(graph,title,weight) pap(titleWeight) FixVar pap(graph,title,slant) pap(titleSlant) FixVar pap(axis,title,family) pap(textlabFont) FixVar pap(axis,title,size) pap(textlabSize) FixVar pap(axis,title,weight) pap(textlabWeight) FixVar pap(axis,title,slant) pap(textlabSlant) FixVar pap(axis,font,family) pap(numlabFont) FixVar pap(axis,font,size) pap(numlabSize) FixVar pap(axis,font,weight) pap(numlabWeight) FixVar pap(axis,font,slant) pap(numlabSlant) FixVar pap(show) pap(linear) FixVar pap(shape,color) pap(discrete,color) FixVar pap(shape,fill) pap(discrete,fill) FixVar pap(width) pap(linear,width) FixVar pap(color) pap(linear,color) if {[info exists pap(linear,dash)]} { set pap(linear,dash) [FromYesNo $pap(linear,dash)] } FixVar pap(dash) pap(linear,dash) if {[info exists pap(discrete)]} { if {$pap(discrete)} { FixVar pap(shape,symbol) pap(discrete,symbol) } else { FixVarRm pap(discrete,symbol) } } FixVarRm pap(bar) FixVarRm pap(bar,color) FixVarRm pap(discrete) FixVarRm pap(linear,dash) FixVarRm pap(quadratic) FixVarRm pap(quadratic,width) FixVarRm pap(quadratic,color) FixVarRm pap(quadratic,dash) FixVarRm pap(step) FixVarRm pap(step,color) FixVarRm pap(step,dash) FixVarRm pap(step,width) } proc FixPrefs7.1to7.2 {} { FixVar pbuttons(file,xpa,info) pbuttons(file,xpa) FixVar pcurrent(align) pwcs(align) } proc FixPrefs7.0to7.1 {} { global pap if {[info exists pap(grid)]} { set pap(grid,x) $pap(grid) set pap(grid,y) $pap(grid) switch $pap(grid,log) { linearlinear { set pap(grid,xlog) 0 set pap(grid,ylog) 0 } linearlog { set pap(grid,xlog) 0 set pap(grid,ylog) 1 } loglinear { set pap(grid,xlog) 1 set pap(grid,ylog) 0 } loglog { set pap(grid,xlog) 1 set pap(grid,ylog) 1 } } unset pap(grid) unset pap(grid,log) } } proc FixPrefs6.2to7.0 {} { global ps global pps switch $pps(scale) { scaled - fixed { set ps(scale) 100 set pps(scale) 100 } } global colorbar global pcolorbar set colorbar(map) [string tolower $colorbar(map)] set pcolorbar(map) [string tolower $pcolorbar(map)] FixVar pbuttons(frame,match,frame,wcs) pbuttons(frame,matchframe,wcs) FixVar pbuttons(frame,match,frame,image) pbuttons(frame,matchframe,image) FixVar pbuttons(frame,match,frame,physical) pbuttons(frame,matchframe,physical) FixVar pbuttons(frame,match,frame,amplifier) pbuttons(frame,matchframe,amplifier) FixVar pbuttons(frame,match,frame,detector) pbuttons(frame,matchframe,detector) FixVar pbuttons(bin,match) pbuttons(frame,matchbin) FixVar pbuttons(scale,match) pbuttons(frame,matchscale) FixVar pbuttons(color,match) pbuttons(frame,matchcolor) FixVar ppanner(compass) ppanner(compass,image) FixVarRm ppanner(compass,wcs,system) FixVarRm ppanner(compass,wcs,sky) global pmarker FixVarRm pmarker(dialog,system) FixVarRm pmarker(dialog,sky) FixVarRm pmarker(dialog,skyformat) FixVarRm pmarker(dialog,dist,system) FixVarRm pmarker(dialog,dist,format) # mousewheel MacOSX Lion global tcl_platform global ppanzoom global pbin switch -- $tcl_platform(os) { Darwin { switch [lindex [split $tcl_platform(osVersion) {.}] 0] { 11 { set ppanzoom(wheel,factor) 1.01 set pbin(wheel,factor) 1.01 } } } } global pcoord FixVarRm pcoord(sky) FixVarRm pcoord(skyformat) } proc FixPrefs6.1to6.2 {} { FixVar pbuttons(frame,matchframe,wcs) pbuttons(frame,matchframe) global pds9 switch -- $pds9(font) { helvetica - courier - times {} default {set pds9(font) helvetica} } switch -- $pds9(font,size) { 10 {set pds9(font,size) 9} } FixVar pmarker(centroid,auto) pmarker(autocentroid) FixVarRm marker(autocentroid) FixFontVar pds9(font,weight) pds9(font,slant) pds9(font,style) FixFontVar pmarker(font,weight) pmarker(font,slant) pmarker(font,style) FixFontVar pcolorbar(font,weight) pcolorbar(font,slant) \ pcolorbar(font,style) } proc FixPrefs6.0to6.1 {} { # ds9 FixVar pds9(automarker) ds9(automarker) FixVar pds9(xpa) ds9(xpa) FixVar pds9(samp) ds9(samp,auto) FixVar pds9(confirm) ds9(confirm) FixVar pds9(bg) ds9(bg,color) FixVar pds9(nan) ds9(nan,color) FixVar pds9(dialog) ds9(dialog) FixVar pds9(language) ds9(language) FixVar pds9(language,name) ds9(language,name) FixVar pds9(language,dir) ds9(language,dir) FixVar pds9(font) ds9(font) FixVar pds9(font,size) ds9(font,size) FixVar pds9(font,style) ds9(font,style) FixVar pcurrent(display) ds9(display,user) FixVar pcurrent(mode) pds9(mode) # note: versions 5.3 to 6.0 have array set ds9 [array get pds9] # which will set following ds9(var), so delete FixVarRm ds9(samp) FixVarRm ds9(backup) FixVarRm ds9(nan) # which will overwrite the following ds9(var), so reset global ds9 set ds9(bg) white # analysis FixVar panalysis(user) ds9(analysis,user) FixVar panalysis(user2) ds9(analysis,user2) FixVar panalysis(user3) ds9(analysis,user3) FixVar panalysis(user4) ds9(analysis,user4) global analysis catch {unset analysis} # magnifier FixVar pmagnifier(region) magnifier(region) FixVar pmagnifier(zoom) magnifier(zoom) FixVar pmagnifier(cursor) magnifier(cursor) global magnifier catch {unset magnifier} # panner FixVar ppanner(compass,image) panner(compass,image) FixVar ppanner(compass,wcs) panner(compass,wcs) FixVar ppanner(compass,wcs,system) panner(compass,wcs,system) FixVar ppanner(compass,wcs,sky) panner(compass,wcs,sky) global panner catch {unset panner} # examine FixVar pexamine(mode) examine(mode) FixVar pexamine(zoom) examine(zoom) global examine catch {unset examine} # vo FixVar pvo(server) vo(server) FixVar pvo(hv) vo(hv) FixVar pvo(method) vo(method) FixVar pvo(delay) vo(delay) global vo catch {unset vo} # http FixVar phttp(proxy) http(proxy) FixVar phttp(proxy,host) http(proxy,host) FixVar phttp(proxy,port) http(proxy,port) FixVar phttp(auth) http(auth) FixVar phttp(auth,user) http(auth,user) FixVar phttp(auth,passwd) http(auth,passwd) global http catch {unset http} # nres FixVar pnres(server) nres(server) # graph FixVar pgraph(horz,grid) graph(horz,grid) FixVar pgraph(horz,log) graph(horz,log) FixVar pgraph(vert,grid) graph(vert,grid) FixVar pgraph(vert,log) graph(vert,log) global graph catch {unset graph} # cat FixVar pcat(server) cat(server) FixVar pcat(sym,shape) cat(sym,shape) FixVar pcat(sym,color) cat(sym,color) FixVar pcat(vot) cat(vot) # contour FixVarRm pcontour(color,msg) # coords global coord catch {unset coord} # scale FixVarRm pscale(min) FixVarRm pscale(max) FixVarRm pscale(xaxis) FixVarRm pscale(yaxis) # marker FixVarRm pmarker(maxdialog) FixVarRm pmarker(load) FixVarRm pmarker(paste,system) FixVarRm pmarker(paste,sky) FixVarRm pmarker(system) FixVarRm pmarker(sky) FixVarRm pmarker(skyformat) FixVarRm pmarker(strip) FixVarRm marker(dialog,system) FixVarRm marker(dialog,sky) FixVarRm marker(dialog,skyformat) FixVarRm marker(dialog,dist,system) FixVarRm marker(dialog,dist,format) FixVarRm marker(circle,radius) FixVarRm marker(annulus,inner) FixVarRm marker(annulus,outer) FixVarRm marker(annulus,annuli) FixVarRm marker(panda,inner) FixVarRm marker(panda,outer) FixVarRm marker(panda,annuli) FixVarRm marker(panda,ang1) FixVarRm marker(panda,ang2) FixVarRm marker(panda,angnum) FixVarRm marker(ellipse,radius1) FixVarRm marker(ellipse,radius2) FixVarRm marker(ellipseannulus,radius1) FixVarRm marker(ellipseannulus,radius2) FixVarRm marker(ellipseannulus,radius3) FixVarRm marker(ellipseannulus,annuli) FixVarRm marker(epanda,radius1) FixVarRm marker(epanda,radius2) FixVarRm marker(epanda,radius3) FixVarRm marker(epanda,annuli) FixVarRm marker(epanda,ang1) FixVarRm marker(epanda,ang2) FixVarRm marker(epanda,angnum) FixVarRm marker(box,radius1) FixVarRm marker(box,radius2) FixVarRm marker(boxannulus,radius1) FixVarRm marker(boxannulus,radius2) FixVarRm marker(boxannulus,radius3) FixVarRm marker(boxannulus,annuli) FixVarRm marker(bpanda,radius1) FixVarRm marker(bpanda,radius2) FixVarRm marker(bpanda,radius3) FixVarRm marker(bpanda,annuli) FixVarRm marker(bpanda,ang1) FixVarRm marker(bpanda,ang2) FixVarRm marker(bpanda,angnum) FixVarRm marker(polygon,width) FixVarRm marker(polygon,height) FixVarRm marker(projection,thick) FixVarRm marker(compass,radius) FixVarRm marker(point,size) } proc FixPrefs5.xto6.0 {} { FixVar pap(grid) prefs(ap,grid) FixVar pap(grid,log) prefs(ap,grid,log) FixVar pap(discrete) prefs(ap,discrete) FixVar pap(discrete,symbol) prefs(ap,discrete,symbol) FixVar pap(discrete,color) prefs(ap,discrete,color) FixVar pap(linear) prefs(ap,linear) FixVar pap(linear,width) prefs(ap,linear,width) FixVar pap(linear,color) prefs(ap,linear,color) FixVar pap(linear,dash) prefs(ap,linear,dash) FixVar pap(step) prefs(ap,step) FixVar pap(step,width) prefs(ap,step,width) FixVar pap(step,color) prefs(ap,step,color) FixVar pap(step,dash) prefs(ap,step,dash) FixVar pap(quadratic) prefs(ap,quadratic) FixVar pap(quadratic,width) prefs(ap,quadratic,width) FixVar pap(quadratic,color) prefs(ap,quadratic,color) FixVar pap(quadratic,dash) prefs(ap,quadratic,dash) FixVar pap(error,color) prefs(ap,error,color) FixVar pap(error,width) prefs(ap,error,width) FixVar pap(error,style) prefs(ap,error,style) FixVar pap(titleFont) prefs(ap,titleFont) FixVar pap(titleSize) prefs(ap,titleSize) FixVar pap(titleStyle) prefs(ap,titleStyle) FixVar pap(textlabFont) prefs(ap,textlabFont) FixVar pap(textlabSize) prefs(ap,textlabSize) FixVar pap(textlabStyle) prefs(ap,textlabStyle) FixVar pap(numlabFont) prefs(ap,numlabFont) FixVar pap(numlabSize) prefs(ap,numlabSize) FixVar pap(numlabStyle) prefs(ap,numlabStyle) FixVar pcurrent(zoom) prefs(zoom) FixVar pcurrent(orient) prefs(orient) FixVar pcurrent(rotate) prefs(rotate) FixVar panalysis(log) prefs(analysis,log) FixVar pds9(mode) prefs(ds9,mode) FixVar pblink(interval) prefs(blink,interval) FixVar ptile(mode) prefs(tile,mode) FixVar pcolorbar(map) prefs(colorbar,map) FixVar pcolorbar(invert) prefs(colorbar,invert) FixVar pmarker(shape) prefs(marker,shape) FixVar pmarker(color) prefs(marker,color) FixVar pmarker(width) prefs(marker,width) FixVar pmarker(fixed) prefs(marker,fixed) FixVar pmarker(edit) prefs(marker,edit) FixVar pmarker(move) prefs(marker,move) FixVar pmarker(rotate) prefs(marker,rotate) FixVar pmarker(delete) prefs(marker,delete) FixVar pmarker(include) prefs(marker,include) FixVar pmarker(source) prefs(marker,source) FixVar pmarker(font) prefs(marker,font) FixVar pmarker(font,size) prefs(marker,font,size) FixVar pmarker(font,style) prefs(marker,font,style) FixVar pmarker(format) prefs(marker,format) FixVar pmarker(strip) prefs(marker,strip) FixVar pmarker(system) prefs(marker,system) FixVar pmarker(sky) prefs(marker,sky) FixVar pmarker(skyformat) prefs(marker,skyformat) FixVarRm prefs(marker,wcs) FixVarRm marker(wcs) FixVarRm marker(polygon,width) FixVarRm marker(polygon,height) FixVar pmarker(dialog,system) marker(dialog,system) FixVar pmarker(dialog,sky) marker(dialog,sky) FixVar pmarker(dialog,skyformat) marker(dialog,skyformat) FixVar pmarker(dialog,dist,system) marker(dialog,dist,system) FixVar pmarker(dialog,dist,format) marker(dialog,dist,format) FixVar pmarker(circle,radius) marker(circle,radius) FixVar pmarker(annulus,inner) marker(annulus,inner) FixVar pmarker(annulus,outer) marker(annulus,outer) FixVar pmarker(annulus,annuli) marker(annulus,annuli) FixVar pmarker(panda,inner) marker(panda,inner) FixVar pmarker(panda,outer) marker(panda,outer) FixVar pmarker(panda,annuli) marker(panda,annuli) FixVar pmarker(panda,ang1) marker(panda,ang1) FixVar pmarker(panda,ang2) marker(panda,ang2) FixVar pmarker(panda,angnum) marker(panda,angnum) FixVar pmarker(ellipse,radius1) marker(ellipse,radius1) FixVar pmarker(ellipse,radius2) marker(ellipse,radius2) FixVar pmarker(ellipseannulus,radius1) marker(ellipseannulus,radius1) FixVar pmarker(ellipseannulus,radius2) marker(ellipseannulus,radius2) FixVar pmarker(ellipseannulus,radius3) marker(ellipseannulus,radius3) FixVar pmarker(ellipseannulus,annuli) marker(ellipseannulus,annuli) FixVar pmarker(epanda,radius1) marker(epanda,radius1) FixVar pmarker(epanda,radius2) marker(epanda,radius2) FixVar pmarker(epanda,radius3) marker(epanda,radius3) FixVar pmarker(epanda,annuli) marker(epanda,annuli) FixVar pmarker(epanda,ang1) marker(epanda,ang1) FixVar pmarker(epanda,ang2) marker(epanda,ang2) FixVar pmarker(epanda,angnum) marker(epanda,angnum) FixVar pmarker(box,radius1) marker(box,radius1) FixVar pmarker(box,radius2) marker(box,radius2) FixVar pmarker(boxannulus,radius1) marker(boxannulus,radius1) FixVar pmarker(boxannulus,radius2) marker(boxannulus,radius2) FixVar pmarker(boxannulus,radius3) marker(boxannulus,radius3) FixVar pmarker(boxannulus,annuli) marker(boxannulus,annuli) FixVar pmarker(bpanda,radius1) marker(bpanda,radius1) FixVar pmarker(bpanda,radius2) marker(bpanda,radius2) FixVar pmarker(bpanda,radius3) marker(bpanda,radius3) FixVar pmarker(bpanda,annuli) marker(bpanda,annuli) FixVar pmarker(bpanda,ang1) marker(bpanda,ang1) FixVar pmarker(bpanda,ang2) marker(bpanda,ang2) FixVar pmarker(bpanda,angnum) marker(bpanda,angnum) FixVar pmarker(projection,thick) marker(projection,thick) FixVar pmarker(point,size) marker(point,size) # buttons global buttons global pbuttons if {[info exists buttons(file,about)]} { foreach nn [array names buttons] { set aa [split $nn ,] if {[lindex $aa 1] != {}} { switch [lindex $aa 0] { file - edit - view - frame - bin - zoom - scale - color - region - wcs - help { set pbuttons($nn) $buttons($nn) unset buttons($nn) } } } } FixVar pbuttons(scale,995) buttons(scale,99.5) FixVar pbuttons(scale,925) buttons(scale,92.5) FixVar pbuttons(zoom,i32) buttons(zoom,1/32) FixVar pbuttons(zoom,i16) buttons(zoom,1/16) FixVar pbuttons(zoom,i8) buttons(zoom,1/8) FixVar pbuttons(zoom,i4) buttons(zoom,1/4) FixVar pbuttons(zoom,i2) buttons(zoom,1/2) FixVarRm pbuttons(scale,92.5) FixVarRm pbuttons(scale,99.5) FixVarRm pbuttons(zoom,1/32) FixVarRm pbuttons(zoom,1/16) FixVarRm pbuttons(zoom,1/8) FixVarRm pbuttons(zoom,1/4) FixVarRm pbuttons(zoom,1/2) } } saods9/ds9/library/prefsdialog.tcl000644 000765 000000 00000021531 12705445650 017544 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PrefsDialog {{which {}}} { global ds9 global iprefs global dprefs # see if we already have a window visible if {[winfo exists $iprefs(top)]} { raise $iprefs(top) return } # create the window set w $iprefs(top) set mb $iprefs(mb) Toplevel $w $mb 6 [msgcat::mc {Preferences}] PrefsDialogSave $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit menu $mb.file $mb.file add command -label [msgcat::mc {Clear Preferences}] \ -command PrefsDialogClear $mb.file add separator $mb.file add command -label [msgcat::mc {Save}] -command PrefsDialogSave $mb.file add command -label [msgcat::mc {Close}] -command PrefsDialogClose EditMenu $mb iprefs # List set f [ttk::frame $w.param] ttk::scrollbar $f.scroll -command [list $f.box yview] set dprefs(list) [listbox $f.box \ -yscroll [list $f.scroll set] \ -selectmode browse \ -setgrid true \ -width 18 -height 28 \ ] grid $f.box $f.scroll -sticky news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 2 -weight 1 bind $dprefs(list) <> [list PrefsDialogListUpdate] set dprefs(tab) $f set dprefs(tabs) {} PrefsDialogGeneral PrefsDialogStartup PrefsDialogMenu PrefsDialogPanner PrefsDialogMagnifier PrefsDialog3d PrefsDialogGraph PrefsDialogScale PrefsDialogColor PrefsDialogBin PrefsDialogZoom PrefsDialogRegion PrefsDialogAnnulus PrefsDialogPanda PrefsDialogAnalysis PrefsDialogPixelTable PrefsDialogContour PrefsDialogSmooth PrefsDialogCatalog PrefsDialogNRES PrefsDialogPlot PrefsDialogVO PrefsDialogPrint PrefsDialogPageSetup PrefsDialogCoord PrefsDialogExamine PrefsDialogHTTP # Buttons set f [ttk::frame $w.buttons] ttk::button $f.save -text [msgcat::mc {Save}] \ -command PrefsDialogSave ttk::button $f.close -text [msgcat::mc {Close}] \ -command PrefsDialogClose ttk::button $f.clear -text [msgcat::mc {Clear Preferences}] \ -command PrefsDialogClear pack $f.clear $f.save $f.close \ -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -fill both -expand true # http is hard coded to be last switch $which { http {$dprefs(list) selection set end} default {$dprefs(list) selection set 0} } PrefsDialogListUpdate } proc PrefsDialogListUpdate {} { global dprefs set which [$dprefs(list) curselection] if {$which == {}} { set which 0 } foreach tab $dprefs(tabs) { grid forget $tab } grid [lindex $dprefs(tabs) $which] -row 0 -column 2 -sticky new } proc PrefsDialogSave {} { global iprefs if {[winfo exists $iprefs(top)]} { destroy $iprefs(top) destroy $iprefs(mb) } SavePrefs } proc PrefsDialogClose {} { global iprefs global dprefs if {[winfo exists $iprefs(top)]} { destroy $iprefs(top) destroy $iprefs(mb) } unset dprefs } proc PrefsDialogClear {} { global iprefs global dprefs global pds9 if {$pds9(confirm)} { if {[tk_messageBox -type okcancel -icon question -message [msgcat::mc {Clear Preferences?}]] != {ok}} { return } } ClearPrefs PrefsDialogClose } # Pref Frames proc PrefsDialogGeneral {} { global dprefs global ds9 global pds9 global pmagnifier set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {General}] lappend dprefs(tabs) [ttk::frame $w.general] # General set f [ttk::labelframe $w.general.misc -text [msgcat::mc {General}]] ttk::checkbutton $f.backup \ -text [msgcat::mc {Always save files during Backup}] \ -variable pds9(backup) ttk::checkbutton $f.auto -text [msgcat::mc {Autoload FITS Regions}] \ -variable pds9(automarker) ttk::checkbutton $f.confirm \ -text [msgcat::mc {Enable Confirmation Dialogs}] \ -variable pds9(confirm) ttk::label $f.tthreads -text [msgcat::mc {Number of Threads}] ttk::entry $f.threads -textvariable ds9(threads) \ -validate focusout -validatecommand ChangeThreads -width 8 grid $f.backup -padx 2 -pady 2 -sticky w grid $f.auto -padx 2 -pady 2 -sticky w grid $f.confirm -padx 2 -pady 2 -sticky w grid $f.tthreads $f.threads -padx 2 -pady 2 -sticky w # Language set f [ttk::labelframe $w.general.lang -text [msgcat::mc {Language}]] ttk::menubutton $f.lang -textvariable pds9(language,name) -menu $f.lang.menu set m $f.lang.menu menu $m $m add radiobutton -label [LanguageToName locale] \ -variable pds9(language,name) -command "set pds9(language) locale" $m add separator $m add radiobutton -label [LanguageToName cs] \ -variable pds9(language,name) -command "set pds9(language) cs" $m add radiobutton -label [LanguageToName da] \ -variable pds9(language,name) -command "set pds9(language) da" $m add radiobutton -label [LanguageToName de] \ -variable pds9(language,name) -command "set pds9(language) de" $m add radiobutton -label [LanguageToName en] \ -variable pds9(language,name) -command "set pds9(language) en" $m add radiobutton -label [LanguageToName es] \ -variable pds9(language,name) -command "set pds9(language) es" $m add radiobutton -label [LanguageToName fr] \ -variable pds9(language,name) -command "set pds9(language) fr" $m add radiobutton -label [LanguageToName ja] \ -variable pds9(language,name) -command "set pds9(language) ja" $m add radiobutton -label [LanguageToName pt] \ -variable pds9(language,name) -command "set pds9(language) pt" $m add radiobutton -label [LanguageToName zh] \ -variable pds9(language,name) -command "set pds9(language) zh" grid $f.lang -padx 2 -pady 2 -sticky w # GUI Font set f [ttk::labelframe $w.general.font -text [msgcat::mc {GUI Font}]] FontMenuButton $f.font pds9 font \ font,size font,weight font,slant \ [list SetDefaultFont true] ttk::button $f.reset -text [msgcat::mc {Reset}] \ -command ResetDefaultFont grid $f.font $f.reset -padx 2 -pady 2 -sticky w # Text Font set f [ttk::labelframe $w.general.textfont -text [msgcat::mc {Text Font}]] FontMenuButton $f.textfont pds9 text,font \ text,font,size text,font,weight text,font,slant \ [list SetDefaultTextFont true] ttk::button $f.textreset -text [msgcat::mc {Reset}] \ -command ResetDefaultTextFont grid $f.textfont $f.textreset -padx 2 -pady 2 -sticky w # Color set f [ttk::labelframe $w.general.color -text [msgcat::mc {Color}]] ttk::label $f.tbg -text [msgcat::mc {Background Color}] ColorMenuButton $f.bg pds9 bg PrefsBgColor ttk::label $f.tnan -text [msgcat::mc {Blank/Inf/NaN Color}] ColorMenuButton $f.nan pds9 nan PrefsNanColor grid $f.tbg $f.bg -padx 2 -pady 2 -sticky w grid $f.tnan $f.nan -padx 2 -pady 2 -sticky w # Mosaic set f [ttk::labelframe $w.general.mosaic -text [msgcat::mc {Mosaic}]] ttk::checkbutton $f.align -text {IRAF DETSEC Align} -variable pds9(iraf) \ -command PrefsIRAFAlign grid $f.align -padx 2 -pady 2 -sticky w # Dialog Box set f [ttk::labelframe $w.general.box -text [msgcat::mc {Dialog Box}]] ttk::radiobutton $f.motif -text {Motif} -variable pds9(dialog) \ -value motif ttk::radiobutton $f.windows -text {Windows} -variable pds9(dialog) \ -value windows grid $f.motif $f.windows -padx 2 -pady 2 -sticky w switch $ds9(wm) { x11 {} aqua - win32 { ttk::radiobutton $f.native -text [msgcat::mc {Native Dialog}] \ -variable pds9(dialog) -value native grid $f.native -row 0 -column 2 -padx 2 -pady 2 -sticky w } } ttk::checkbutton $f.center -text [msgcat::mc {Center Non-modal Dialogs}] \ -variable pds9(dialog,center) ttk::checkbutton $f.all -text [msgcat::mc {Default All Files}] \ -variable pds9(dialog,all) grid $f.center - -padx 2 -pady 2 -sticky w grid $f.all - -padx 2 -pady 2 -sticky w pack $w.general.misc $w.general.lang $w.general.font \ $w.general.textfont $w.general.color $w.general.mosaic \ $w.general.box \ -side top -fill both -expand true } proc PrefsDialogStartup {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Startup}] lappend dprefs(tabs) [ttk::frame $w.startup] set f [ttk::labelframe $w.startup.params -text [msgcat::mc {At Startup}]] ttk::checkbutton $f.xpa -text [msgcat::mc {Initialize XPA}] \ -variable pds9(xpa) ttk::checkbutton $f.samp -text [msgcat::mc {Connect SAMP}] \ -variable pds9(samp) grid $f.xpa -padx 2 -pady 2 -sticky w grid $f.samp -padx 2 -pady 2 -sticky w pack $f -side top -fill both -expand true -anchor nw } saods9/ds9/library/print.tcl000644 000765 000000 00000040161 12744440116 016374 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc PSDef {} { global ds9 global ps global pps set ps(dest) printer set ps(cmd) {lp} set ps(filename) {ds9.ps} set ps(filename,txt) {ds9.txt} set ps(color) rgb set ps(level) 2 set ps(resolution) 150 set ps(orient) portrait set ps(scale) 100 set ps(size) letter set ps(width) 8.5 set ps(height) 11 array set pps [array get ps] } # Print procs proc PSPrint {} { if {[PSPrintDialog ps]} { if {[catch {PostScript} printError]} { Error "[msgcat::mc {An error has occurred while printing}] $printError" } } } proc PostScript {} { global ds9 global ps global view global canvas global colorbar global current # we need to be realized RealizeDS9 # need the colorbar levels updated UpdateColormapLevel set options {} # Orientation switch -- $ps(orient) { portrait {append options " -rotate false"} landscape {append options " -rotate true"} } # Page size # reduce size to .95 for backward compatibility set width [winfo width $ds9(canvas)] set height [winfo height $ds9(canvas)] set xx [expr $width*(1- (100./$ps(scale)/.95))/2.] set yy [expr $height*(1- (100./$ps(scale)/.95))/2.] set ww [expr $width*100./$ps(scale)/.95] set hh [expr $height*100./$ps(scale)/.95] append options " -x $xx -y $yy -width $ww -height $hh" switch -- $ps(size) { letter {PostScriptPageSize 4.25 5.5 7.5 10. i options} legal {PostScriptPageSize 4.25 7. 7.5 13. i options} tabloid {PostScriptPageSize 5.5 8.5 10. 16. i options} poster {PostScriptPageSize 18. 24. 35. 47. i options} a4 {PostScriptPageSize 105 148.5 185 272 m options} other { if {$ps(width) != {} && $ps(height) != {}} { set pxx [expr double($ps(width))/2.] set pyy [expr double($ps(height))/2.] set pww [expr $ps(width)-1.] set phh [expr $ps(height)-1.] PostScriptPageSize $pxx $pyy $pww $phh i options } } othermm { if {$ps(width) != {} && $ps(height) != {}} { set pxx [expr double($ps(width))/2.] set pyy [expr double($ps(height))/2.] set pww [expr $ps(width)-1.] set phh [expr $ps(height)-1.] PostScriptPageSize $pxx $pyy $pww $phh m options } } } # Printer vs File set channel {} switch -- $ps(dest) { "file" { append options " -file \{$ps(filename)\}" } "printer" { set channel [open "| $ps(cmd)" w] append options " -channel $channel" } } # resolution switch $ps(resolution) { screen - Screen - SCREEN {set res 96} default {set res $ps(resolution)} } # set color specific postscript options colorbar postscript level $ps(level) colorbar postscript colorspace $ps(color) colorbar postscript resolution $res colorbarrgb postscript level $ps(level) colorbarrgb postscript colorspace $ps(color) colorbarrgb postscript resolution $res # set frame specific postscript options foreach ff $ds9(frames) { $ff postscript level $ps(level) $ff postscript colorspace $ps(color) $ff postscript resolution $res } # graphs if {$view(graph,vert)} { $ds9(graph,vert) configure -plotbackground white -bg white } if {$view(graph,horz)} { $ds9(graph,horz) configure -plotbackground white -bg white } # now invoke canvas postscript command if {[catch {eval $ds9(canvas) postscript $options} rr]} { Error "[msgcat::mc {A postscript generation error has occurred}] $rr" } switch -- $ps(dest) { "file" {} "printer" { if {$channel != {}} { close $channel } } } # reset graphs if {$view(graph,vert)} { $ds9(graph,vert) configure -plotbackground $ds9(bg) -bg $ds9(bg) } if {$view(graph,horz)} { $ds9(graph,horz) configure -plotbackground $ds9(bg) -bg $ds9(bg) } } proc EPS {fn} { global ds9 global ps global view global canvas global colorbar global current # we need to be realized RealizeDS9 # need the colorbar levels updated UpdateColormapLevel set color rgb set level 2 set resolution 72 set options {} # Page size set width [winfo width $ds9(canvas)] set height [winfo height $ds9(canvas)] append options " -pagex 0 -pagey 0 -pageanchor sw" if ($width>$height) { append options " -pagewidth $width" } else { append options " -pageheight $height" } # File append options " -file \{$fn\}" # set color specific postscript options colorbar postscript level $level colorbar postscript colorspace $color colorbar postscript resolution $resolution colorbarrgb postscript level $level colorbarrgb postscript colorspace $color colorbarrgb postscript resolution $resolution # set frame specific postscript options foreach ff $ds9(frames) { $ff postscript level $level $ff postscript colorspace $color $ff postscript resolution $resolution } # graphs if {$view(graph,vert)} { $ds9(graph,vert) configure -plotbackground white -bg white } if {$view(graph,horz)} { $ds9(graph,horz) configure -plotbackground white -bg white } # now invoke canvas postscript command if {[catch {eval $ds9(canvas) postscript $options} rr]} { Error "[msgcat::mc {A postscript generation error has occurred}] $rr" } # reset graphs if {$view(graph,vert)} { $ds9(graph,vert) configure -plotbackground $ds9(bg) -bg $ds9(bg) } if {$view(graph,horz)} { $ds9(graph,horz) configure -plotbackground $ds9(bg) -bg $ds9(bg) } } proc PostScriptPageSize {xx yy ww hh unit optname} { upvar $optname options global ds9 global ps append options " -pagex $xx$unit -pagey $yy$unit" set width [winfo width $ds9(canvas)] set height [winfo height $ds9(canvas)] switch -- $ps(orient) { portrait { if {[expr double($ww)/$width] < [expr double($hh)/$height]} { append options " -pagewidth $ww$unit" } else { append options " -pageheight $hh$unit" } } landscape { if {[expr double($ww)/$width] > [expr double($hh)/$height]} { append options " -pageheight $ww$unit" } else { append options " -pagewidth $hh$unit" } } } } # Print Dialog procs proc PSPrintDialog {which} { global ps global ed set ed(ok) 0 array set ed [array get ps] set w {.print} DialogCreate $w [msgcat::mc {Print}] ed(ok) # PrintTo set f [ttk::labelframe $w.pt -text [msgcat::mc {Print To}]] ttk::radiobutton $f.printer -text [msgcat::mc {Printer}] \ -variable ed(dest) -value printer ttk::label $f.tcmd -text [msgcat::mc {Command}] ttk::entry $f.cmd -textvariable ed(cmd) -width 20 ttk::radiobutton $f.file -text [msgcat::mc {File}] \ -variable ed(dest) -value file ttk::label $f.tname -text [msgcat::mc {Name}] ttk::entry $f.name -textvariable ed(filename) -width 20 ttk::button $f.browse -text [msgcat::mc {Browse}] \ -command "PSPrintBrowse ed(filename)" grid $f.printer $f.tcmd $f.cmd -padx 2 -pady 2 -sticky ew grid $f.file $f.tname $f.name $f.browse -padx 2 -pady 2 -sticky ew grid columnconfigure $f 2 -weight 1 # Options set f [ttk::labelframe $w.ps -text [msgcat::mc {Postscript}]] ttk::label $f.color -text [msgcat::mc {Color}] ttk::radiobutton $f.rgb -text [msgcat::mc {RGB}] \ -variable ed(color) -value rgb ttk::radiobutton $f.cmyk -text [msgcat::mc {CMYK}] \ -variable ed(color) -value cmyk ttk::radiobutton $f.gray -text [msgcat::mc {Grayscale}] \ -variable ed(color) -value gray ttk::label $f.level -text [msgcat::mc {Level}] ttk::radiobutton $f.level1 -text "[msgcat::mc {Level}] 1" \ -variable ed(level) -value 1 ttk::radiobutton $f.level2 -text "[msgcat::mc {Level}] 2" \ -variable ed(level) -value 2 ttk::radiobutton $f.level3 -text "[msgcat::mc {Level}] 3" \ -variable ed(level) -value 3 ttk::label $f.dpi -text [msgcat::mc {DPI}] tk_optionMenu $f.resolution ed(resolution) 72 Screen 96 144 150 225 300 600 1200 grid $f.color $f.rgb $f.cmyk $f.gray -padx 2 -pady 2 -sticky w grid $f.level $f.level3 $f.level2 $f.level1 -padx 2 -pady 2 -sticky w grid $f.dpi $f.resolution -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini grid $w.pt -sticky news grid $w.ps -sticky news grid $w.buttons -sticky ew grid rowconfigure $w 0 -weight 1 grid rowconfigure $w 1 -weight 1 grid columnconfigure $w 0 -weight 1 DialogCenter $w DialogWait $w ed(ok) $w.buttons.ok DialogDismiss $w if {$ed(ok)} { array set ps [array get ed] } set rr $ed(ok) unset ed return $rr } proc PSPrintBrowse {varname} { upvar $varname var FileLast pssavfbox $var set var [SaveFileDialog pssavfbox] } # Used for plots proc PlotPrintDialog {} { global ps global ed set ed(ok) 0 array set ed [array get ps] set w {.print} DialogCreate $w [msgcat::mc {Print}] ed(ok) # PrintTo set f [ttk::labelframe $w.pt -text [msgcat::mc {Print To}]] ttk::radiobutton $f.printer -text [msgcat::mc {Printer}] \ -variable ed(dest) -value printer ttk::label $f.tcmd -text [msgcat::mc {Command}] ttk::entry $f.cmd -textvariable ed(cmd) -width 20 ttk::radiobutton $f.file -text [msgcat::mc {File}] \ -variable ed(dest) -value file ttk::label $f.tname -text [msgcat::mc {Name}] ttk::entry $f.name -textvariable ed(filename) -width 20 ttk::button $f.browse -text [msgcat::mc {Browse}] \ -command "PlotPrintBrowse ed(filename)" grid $f.printer $f.tcmd $f.cmd -padx 2 -pady 2 -sticky ew grid $f.file $f.tname $f.name $f.browse -padx 2 -pady 2 -sticky ew grid columnconfigure $f 2 -weight 1 # Options set f [ttk::labelframe $w.ps -text [msgcat::mc {Postscript}]] ttk::label $f.color -text [msgcat::mc {Color}] ttk::radiobutton $f.rgb -text [msgcat::mc {RGB}] \ -variable ed(color) -value rgb ttk::radiobutton $f.gray -text [msgcat::mc {Grayscale}] \ -variable ed(color) -value gray grid $f.color $f.rgb $f.gray -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini grid $w.pt -sticky news grid $w.ps -sticky news grid $w.buttons -sticky ew grid rowconfigure $w 0 -weight 1 grid rowconfigure $w 1 -weight 1 grid columnconfigure $w 0 -weight 1 DialogCenter $w DialogWait $w ed(ok) $w.buttons.ok DialogDismiss $w if {$ed(ok)} { array set ps [array get ed] } set rr $ed(ok) unset ed return $rr } proc PlotPrintBrowse {varname} { upvar $varname var FileLast apsavfbox $var set var [SaveFileDialog apsavfbox] } # Used for SimpleText and Catalog proc PRPrintDialog {} { global ps global ed set ed(ok) 0 array set ed [array get ps] set w {.print} DialogCreate $w [msgcat::mc {Print}] ed(ok) # PrintTo set f [ttk::labelframe $w.pt -text [msgcat::mc {Print To}]] ttk::radiobutton $f.printer -text [msgcat::mc {Printer}] \ -variable ed(dest) -value printer ttk::label $f.tcmd -text [msgcat::mc {Command}] ttk::entry $f.cmd -textvariable ed(cmd) -width 20 ttk::radiobutton $f.file -text [msgcat::mc {File}] \ -variable ed(dest) -value file ttk::label $f.tname -text [msgcat::mc {Name}] ttk::entry $f.name -textvariable ed(filename,txt) -width 20 ttk::button $f.browse -text [msgcat::mc {Browse}] \ -command "PRPrintBrowse ed(filename,txt)" grid $f.printer $f.tcmd $f.cmd -padx 2 -pady 2 -sticky ew grid $f.file $f.tname $f.name $f.browse -padx 2 -pady 2 -sticky ew grid columnconfigure $f 2 -weight 1 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini grid $w.pt -sticky news grid $w.buttons -sticky ew grid rowconfigure $w 0 -weight 1 grid columnconfigure $w 0 -weight 1 DialogCenter $w DialogWait $w ed(ok) $w.buttons.ok DialogDismiss $w if {$ed(ok)} { array set ps [array get ed] } set rr $ed(ok) unset ed return $rr } proc PRPrintBrowse {varname} { upvar $varname var FileLast prsavfbox $var set var [SaveFileDialog prsavfbox] } proc PrefsDialogPrint {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Postscript}] lappend dprefs(tabs) [ttk::frame $w.print] # PrintTo set f [ttk::labelframe $w.print.printto -text [msgcat::mc {Print To}]] ttk::radiobutton $f.printer -text [msgcat::mc {Printer}] \ -variable pps(dest) -value printer ttk::label $f.tcmd -text [msgcat::mc {Command}] ttk::entry $f.cmd -textvariable pps(cmd) -width 20 ttk::radiobutton $f.file -text [msgcat::mc {File}] \ -variable pps(dest) -value file ttk::label $f.tname -text [msgcat::mc {Name}] ttk::entry $f.name -textvariable pps(filename) -width 20 ttk::button $f.browse -text [msgcat::mc {Browse}] \ -command "PSPrintBrowse pps(filename)" grid $f.printer $f.tcmd $f.cmd -padx 2 -pady 2 -sticky w grid $f.file $f.tname $f.name $f.browse -padx 2 -pady 2 -sticky w # Options set f [ttk::labelframe $w.print.ps -text [msgcat::mc {Postscript}]] ttk::label $f.color -text [msgcat::mc {Color}] ttk::radiobutton $f.rgb -text [msgcat::mc {RGB}] \ -variable pps(color) -value rgb ttk::radiobutton $f.cmyk -text [msgcat::mc {CMYK}] \ -variable pps(color) -value cmyk ttk::radiobutton $f.gray -text [msgcat::mc {Grayscale}] \ -variable pps(color) -value gray ttk::label $f.level -text [msgcat::mc {Level}] ttk::radiobutton $f.level1 -text "[msgcat::mc {Level}] 1" \ -variable pps(level) -value 1 ttk::radiobutton $f.level2 -text "[msgcat::mc {Level}] 2" \ -variable pps(level) -value 2 ttk::radiobutton $f.level3 -text "[msgcat::mc {Level}] 3" \ -variable pps(level) -value 3 ttk::label $f.dpi -text [msgcat::mc {DPI}] tk_optionMenu $f.resolution pps(resolution) 72 Screen 96 144 150 225 300 600 1200 grid $f.color $f.rgb $f.cmyk $f.gray -padx 2 -pady 2 -sticky w grid $f.level $f.level3 $f.level2 $f.level1 -padx 2 -pady 2 -sticky w grid $f.dpi $f.resolution -padx 2 -pady 2 -sticky w pack $w.print.printto $w.print.ps \ -side top -fill both -expand true } # Process Cmds proc ProcessPrintCmd {varname iname} { upvar $varname var upvar $iname i global ds9 switch $ds9(wm) { x11 - aqua - win32 {ProcessPSPrintCmd var i} } } proc ProcessSendPrintCmd {proc id param} { global ds9 switch $ds9(wm) { x11 - aqua - win32 {ProcessSendPSPrintCmd $proc $id $param} } } proc ProcessPSPrintCmd {varname iname} { upvar $varname var upvar $iname i global ps switch -- [string tolower [lindex $var $i]] { destination {incr i; set ps(dest) [lindex $var $i]} command {incr i; set ps(cmd) [lindex $var $i]} filename {incr i; set ps(filename) [lindex $var $i]} palette - color {incr i; set ps(color) [lindex $var $i]} level {incr i; set ps(level) [lindex $var $i]} interpolate {incr i} resolution {incr i; set ps(resolution) [lindex $var $i]} {} {PostScript} default {incr i -1; PostScript} } } proc ProcessSendPSPrintCmd {proc id param} { global ps switch -- [string tolower $param] { destination {$proc $id "$ps(dest)\n"} command {$proc $id "$ps(cmd)\n"} filename {$proc $id "$ps(filename)\n"} palette - color {$proc $id "$ps(color)\n"} level {$proc $id "$ps(level)\n"} interpolate {$proc $id "0\n"} resolution {$proc $id "$ps(resolution)\n"} } } saods9/ds9/library/projection.tcl000644 000765 000000 00000005776 12705445650 017436 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ProjectionDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # variables set rr [$var(frame) get wcs] set var(tcoord) [lindex $rr 0] set var(tformat) degrees AdjustCoordSystem $varname tcoord # procs set var(which) projection set var(proc,apply) ProjectionApply set var(proc,coordCB) ProjectionCoordCB set var(proc,editCB) ProjectionEditCB set var(proc,distCB) ProjectionDistCB # base MarkerBaseLineDialog $varname 500 200 # analysis $var(mb) add cascade -label [msgcat::mc {Analysis}] -menu $var(mb).analysis menu $var(mb).analysis # plot2d MarkerAnalysisPlot2dDialog $varname # init ProjectionThickCB $varname set f $var(top).param # Thick ttk::label $f.tthick -text [msgcat::mc {Thickness}] ttk::entry $f.thick -textvariable ${varname}(thick) -width 13 DistMenuButton $f.uthick $varname tcoord 1 tformat \ [list ProjectionThickCB $varname] DistMenuEnable $f.uthick.menu $varname tcoord 1 tformat grid $f.tthick $f.thick $f.uthick -padx 2 -pady 2 -sticky w } # actions proc ProjectionApply {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) projection $var(system) $var(sky) \ $var(x) $var(y) $var(x2) $var(y2) \ $var(thick) $var(tcoord) $var(tformat) MarkerBaseLineApply $varname } # callbacks proc ProjectionCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "ProjectionCoordCB" } MarkerAnalysisPlot2dSystem $varname MarkerBaseCoordCB $varname ProjectionEditCB $varname } proc ProjectionEditCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "ProjectionEditCB" } MarkerBaseLineEditCB $varname set var(dist) [$var(frame) get marker $var(id) projection length \ $var(dcoord) $var(dformat)] set var(thick) [$var(frame) get marker $var(id) projection thick \ $var(tcoord) $var(tformat)] set var(angle) [$var(frame) get marker $var(id) angle \ $var(system) $var(sky)] } proc ProjectionDistCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "ProjectionDistCB" } set var(dist) [$var(frame) get marker $var(id) projection length \ $var(dcoord) $var(dformat)] } proc ProjectionThickCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "ProjectionThickCB" } set var(thick) [$var(frame) get marker $var(id) projection thick \ $var(tcoord) $var(tformat)] } saods9/ds9/library/rgb.tcl000644 000765 000000 00000021270 12705445650 016017 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc RGBDef {} { global rgb global irgb set irgb(top) .rgb set irgb(mb) .rgbmb set rgb(red) 1 set rgb(green) 1 set rgb(blue) 1 set rgb(system) wcs set rgb(lock,wcs) 0 set rgb(lock,crop) 0 set rgb(lock,slice) 0 set rgb(lock,bin) 0 set rgb(lock,axes) 0 set rgb(lock,scale) 0 set rgb(lock,scalelimits) 0 set rgb(lock,colorbar) 0 set rgb(lock,block) 0 set rgb(lock,smooth) 0 } proc RGBEvalLockCurrent {varname cmd} { global current global rgb global crop global cube global bin global scale global colorbar global block global smooth RGBEvalLock $varname $current(frame) $cmd } proc RGBEvalLock {varname which cmd} { upvar $varname var global rgb global crop global cube global bin global scale global colorbar global block global smooth if {$var && [$which get type] == {rgb}} { set ch [$which get rgb channel] foreach cc {red green blue} { $which rgb channel $cc eval $cmd } $which rgb channel $ch } else { eval $cmd } } proc RGBEvalLockColorbar {cmd} { global current global scale global rgb if {$rgb(lock,colorbar) && [$current(frame) get type] == {rgb}} { set ch $current(rgb) foreach c {red green blue} { colorbarrgb rgb channel $c eval $cmd } set current(rgb) $ch colorbarrgb rgb channel $current(rgb) } else { eval $cmd } } proc RGBChannel {} { global current if {$current(frame) != {}} { if {[$current(frame) get type] == {rgb}} { colorbarrgb rgb channel $current(rgb) } $current(frame) rgb channel $current(rgb) UpdateDS9 } } proc RGBView {} { global current global rgb if {$current(frame) != {}} { $current(frame) rgb view $rgb(red) $rgb(green) $rgb(blue) } } proc RGBSystem {} { global current global rgb if {$current(frame) != {}} { $current(frame) rgb system $rgb(system) } } # used by backup proc RGBDialog {} { global rgb global irgb global current global ds9 # see if we already have a window visible if {[winfo exists $irgb(top)]} { raise $irgb(top) return } # create the rgb window set w $irgb(top) set mb $irgb(mb) Toplevel $w $mb 6 [msgcat::mc {RGB}] RGBDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Align}] -menu $mb.align $mb add cascade -label [msgcat::mc {Lock}] -menu $mb.lock menu $mb.file $mb.file add command -label [msgcat::mc {Close}] -command RGBDestroyDialog CoordMenu $mb.align rgb system 1 {} {} RGBSystem menu $mb.lock $mb.lock add checkbutton -label [msgcat::mc {WCS}] \ -variable rgb(lock,wcs) $mb.lock add checkbutton -label [msgcat::mc {Crop}] \ -variable rgb(lock,crop) $mb.lock add checkbutton -label [msgcat::mc {Slice}] \ -variable rgb(lock,slice) $mb.lock add checkbutton -label [msgcat::mc {Bin}] \ -variable rgb(lock,bin) $mb.lock add checkbutton -label [msgcat::mc {Axes Order}] \ -variable rgb(lock,axes) $mb.lock add checkbutton -label [msgcat::mc {Scale}] \ -variable rgb(lock,scale) $mb.lock add checkbutton -label [msgcat::mc {Scale and Limits}] \ -variable rgb(lock,scalelimits) $mb.lock add checkbutton -label [msgcat::mc {Colorbar}] \ -variable rgb(lock,colorbar) $mb.lock add checkbutton -label [msgcat::mc {Block}] \ -variable rgb(lock,block) $mb.lock add checkbutton -label [msgcat::mc {Smooth}] \ -variable rgb(lock,smooth) # Param set f [ttk::frame $w.param] ttk::label $f.currenttitle -text [msgcat::mc {Current}] ttk::label $f.viewtitle -text [msgcat::mc {View}] ttk::label $f.redtitle -text [msgcat::mc {Red}] ttk::label $f.bluetitle -text [msgcat::mc {Blue}] ttk::label $f.greentitle -text [msgcat::mc {Green}] ttk::radiobutton $f.redcurrent -variable current(rgb) \ -value red -command RGBChannel ttk::radiobutton $f.greencurrent -variable current(rgb) \ -value green -command RGBChannel ttk::radiobutton $f.bluecurrent -variable current(rgb) \ -value blue -command RGBChannel ttk::checkbutton $f.redview -variable rgb(red) -command RGBView ttk::checkbutton $f.greenview -variable rgb(green) -command RGBView ttk::checkbutton $f.blueview -variable rgb(blue) -command RGBView grid x $f.currenttitle $f.viewtitle -padx 2 -pady 2 -sticky w grid $f.redtitle $f.redcurrent $f.redview -padx 2 -pady 2 -sticky w grid $f.greentitle $f.greencurrent $f.greenview -padx 2 -pady 2 -sticky w grid $f.bluetitle $f.bluecurrent $f.blueview -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.close -text [msgcat::mc {Close}] \ -command RGBDestroyDialog pack $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true } proc RGBDestroyDialog {} { global irgb if {[winfo exists $irgb(top)]} { destroy $irgb(top) destroy $irgb(mb) } } proc UpdateRGBMenu {} { # can be changed by wcs SetCoordSystem rgb system {} {} } proc UpdateRGBDialog {} { global rgb global irgb global current global debug if {$debug(tcl,update)} { puts stderr "UpdateRGBDialog" } if {![winfo exists $irgb(top)]} { return } if {$current(frame) != {}} { set rgb(frame) $current(frame) if {[$current(frame) has fits]} { # now make sure we have the coord systems AdjustCoordSystem rgb system CoordMenuEnable $irgb(mb).align rgb system 1 {} {} } else { CoordMenuReset $irgb(mb).align rgb system 1 {} {} } } if {$current(frame) != {}} { set current(rgb) [$current(frame) get rgb channel] set r [$current(frame) get rgb view] set rgb(red) [lindex $r 0] set rgb(green) [lindex $r 1] set rgb(blue) [lindex $r 2] set rgb(system) [$current(frame) get rgb system] } } proc RGBBackup {ch which} { puts $ch "$which rgb channel [$which get rgb channel]" puts $ch "$which rgb view [$which get rgb view]" puts $ch "$which rgb system [$which get rgb system]" } # Process Cmds proc ProcessRGBCmd {varname iname} { upvar $varname var upvar $iname i global current global rgb RGBDialog switch -- [string tolower [lindex $var $i]] { open {} close {RGBDestroyDialog} red - green - blue { set current(rgb) [string tolower [lindex $var $i]] RGBChannel } channel { incr i set current(rgb) [string tolower [lindex $var $i]] RGBChannel } lock { incr i set item [string tolower [lindex $var $i]] incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set rr [FromYesNo [lindex $var $i]] } else { set rr 1 incr i -1 } switch -- $item { wcs {set rgb(lock,wcs) $rr} crop {set rgb(lock,crop) $rr} slice {set rgb(lock,slice) $rr} bin {set rgb(lock,bin) $rr} axes - order {set rgb(lock,axes) $rr} scale {set rgb(lock,scale) $rr} limits - scalelimits {set rgb(lock,scalelimits) $rr} color - colormap - colorbar {set rgb(lock,colorbar) $rr} block {set rgb(lock,block) $rr} smooth {set rgb(lock,smooth) $rr} } } system { incr i set rgb(system) [string tolower [lindex $var $i]] RGBSystem } view { set w [lindex $var [expr $i+1]] set yesno [lindex $var [expr $i+2]] switch -- [string tolower $w] { red {set rgb(red) [FromYesNo $yesno]; RGBView} green {set rgb(green) [FromYesNo $yesno]; RGBView} blue {set rgb(blue) [FromYesNo $yesno]; RGBView} } incr i 2 } default { CreateRGBFrame incr i -1 } } } proc ProcessSendRGBCmd {proc id param} { global current global rgb switch -- [lindex $param 0] { channel {$proc $id "$current(rgb)\n"} lock { switch -- [string tolower [lindex $param 1]] { wcs {$proc $id [ToYesNo $rgb(lock,wcs)]} crop {$proc $id [ToYesNo $rgb(lock,crop)]} slice {$proc $id [ToYesNo $rgb(lock,slice)]} bin {$proc $id [ToYesNo $rgb(lock,bin)]} axes - order {$proc $id [ToYesNo $rgb(lock,axes)]} scale {$proc $id [ToYesNo $rgb(lock,scale)]} limits - scalelimits {$proc $id [ToYesNo $rgb(lock,scalelimits)]} colorbar {$proc $id [ToYesNo $rgb(lock,colorbar)]} block {$proc $id [ToYesNo $rgb(lock,block)]} smooth {$proc $id [ToYesNo $rgb(lock,smooth)]} } } system {$proc $id "$rgb(system)\n"} view { switch -- [lindex $param 1] { red {$proc $id [ToYesNo $rgb(red)]} green {$proc $id [ToYesNo $rgb(green)]} blue {$proc $id [ToYesNo $rgb(blue)]} } } } } saods9/ds9/library/rgbarray.tcl000644 000765 000000 00000007051 12705445650 017057 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ImportRGBArrayFile {fn} { global loadParam global current switch -- [$current(frame) get type] { base - 3d {return} rgb {} } set loadParam(file,type) array set loadParam(file,mode) {rgb cube} set loadParam(load,type) mmapincr # if no zdim is present, insert one set exp {.*\[.*zdim[ ]*=[ ]*[0-9]+} if {![regexp $exp $fn]} { set i [string last "\]" $fn] set fn "[string range $fn 0 [expr $i-1]],zdim=3\]" } set loadParam(file,name) $fn # mask not supported set loadParam(load,layer) {} # check for stdin/gz ConvertArrayFile ProcessLoad } proc ImportRGBArrayAlloc {path fn} { global loadParam global current switch -- [$current(frame) get type] { base - 3d {return} rgb {} } set loadParam(file,type) array set loadParam(file,mode) {rgb cube} set loadParam(load,type) allocgz # if no zdim is present, insert one set exp {.*\[.*zdim[ ]*=[ ]*[0-9]+} if {![regexp $exp $fn]} { set i [string last "\]" $fn] set fn "[string range $fn 0 [expr $i-1]],zdim=3\]" } if {![regexp $exp $path]} { set i [string last "\]" $path] set path "[string range $path 0 [expr $i-1]],zdim=3\]" } set loadParam(file,name) $fn set loadParam(file,fn) $path # mask not supported set loadParam(load,layer) {} ProcessLoad } proc ImportRGBArraySocket {sock fn} { global loadParam global current switch -- [$current(frame) get type] { base - 3d {return} rgb {} } set loadParam(file,type) array set loadParam(file,mode) {rgb cube} set loadParam(load,type) socketgz # if no zdim is present, insert one set exp {.*\[.*zdim[ ]*=[ ]*[0-9]+} if {![regexp $exp $fn]} { set i [string last "\]" $fn] set fn "[string range $fn 0 [expr $i-1]],zdim=3\]" } set loadParam(file,name) $fn set loadParam(socket,id) $sock # mask not supported set loadParam(load,layer) {} return [ProcessLoad 0] } proc ExportRGBArrayFile {fn opt} { global current if {$fn == {} || $current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save array rgb cube file "\{$fn\}" $opt } proc ExportRGBArraySocket {sock opt} { global current if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save array rgb cube socket $sock $opt } proc ProcessRGBArrayCmd {varname iname sock fn} { upvar $varname var upvar $iname i global loadParam global current switch -- [string tolower [lindex $var $i]] { new { incr i CreateRGBFrame } mask { incr i # not supported } slice { incr i # not supported } } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa if {![ImportRGBArraySocket $sock $param]} { InitError xpa ImportRGBArrayFile $param } } else { # comm if {$fn != {}} { ImportRGBArrayAlloc $fn $param } else { ImportRGBArrayFile $param } } FinishLoad } proc ProcessSendRGBArrayCmd {proc id param sock fn} { global current if {$current(frame) == {}} { return } set opt [string tolower [lindex $param 0]] if {$sock != {}} { # xpa ExportRGBArraySocket $sock $opt } elseif {$fn != {}} { # comm ExportRGBArrayFile $fn $opt $proc $id {} $fn } } saods9/ds9/library/rgbcube.tcl000644 000765 000000 00000005563 12705445650 016665 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadRGBCubeFile {fn} { global loadParam global current switch -- [$current(frame) get type] { base - 3d { Error [msgcat::mc {Unable to load RGB image into a non-rgb frame}] return } rgb {} } set loadParam(file,type) fits set loadParam(file,mode) {rgb cube} set loadParam(load,type) mmapincr set loadParam(file,name) $fn # mask not supported set loadParam(load,layer) {} ConvertFitsFile ProcessLoad } proc LoadRGBCubeAlloc {path fn} { global loadParam global current switch -- [$current(frame) get type] { base - 3d { Error [msgcat::mc {Unable to load RGB image into a non-rgb frame}] return } rgb {} } set loadParam(file,type) fits set loadParam(file,mode) {rgb cube} set loadParam(load,type) allocgz set loadParam(file,name) $fn set loadParam(file,fn) $path # mask not supported set loadParam(load,layer) {} ProcessLoad } proc LoadRGBCubeSocket {sock fn} { global loadParam global current switch -- [$current(frame) get type] { base - 3d { Error [msgcat::mc {Unable to load RGB image into a non-rgb frame}] return } rgb {} } set loadParam(file,type) fits set loadParam(file,mode) {rgb cube} set loadParam(load,type) socketgz set loadParam(file,name) $fn set loadParam(socket,id) $sock # mask not supported set loadParam(load,layer) {} return [ProcessLoad 0] } proc SaveRGBCubeFile {fn} { global current if {$fn == {} || $current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save fits rgb cube file "\{$fn\}" } proc SaveRGBCubeSocket {sock} { global current if {$current(frame) == {}} { return } if {![$current(frame) has fits]} { return } $current(frame) save fits rgb cube socket $sock } proc ProcessRGBCubeCmd {varname iname sock fn} { upvar $varname var upvar $iname i switch -- [string tolower [lindex $var $i]] { new { incr i CreateRGBFrame } mask { incr i # not supported } slice { incr i # not supported } } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa if {![LoadRGBCubeSocket $sock $param]} { InitError xpa LoadRGBCubeFile $param } } else { # comm if {$fn != {}} { LoadRGBCubeAlloc $fn $param } else { LoadRGBCubeFile $param } } FinishLoad } proc ProcessSendRGBCubeCmd {proc id param sock fn} { global current if {$current(frame) == {}} { return } if {$sock != {}} { # xpa SaveRGBCubeSocket $sock } elseif {$fn != {}} { # comm SaveRGBCubeFile $fn $proc $id {} $fn } } saods9/ds9/library/rgbimage.tcl000644 000765 000000 00000006303 12705445650 017022 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadRGBImageFile {fn} { global loadParam global current switch -- [$current(frame) get type] { base - 3d { Error [msgcat::mc {Unable to load RGB image into a non-rgb frame}] return } rgb {} } set loadParam(file,type) fits set loadParam(file,mode) {rgb image} set loadParam(load,type) mmapincr set loadParam(file,name) $fn # mask not supported set loadParam(load,layer) {} ConvertFitsFile ProcessLoad } proc LoadRGBImageAlloc {path fn} { global loadParam global current switch -- [$current(frame) get type] { base - 3d { Error [msgcat::mc {Unable to load RGB image into a non-rgb frame}] return } rgb {} } set loadParam(file,type) fits set loadParam(file,mode) {rgb image} set loadParam(load,type) allocgz set loadParam(file,name) $fn set loadParam(file,fn) $path # mask not supported set loadParam(load,layer) {} ProcessLoad } proc LoadRGBImageSocket {sock fn} { global loadParam global current switch -- [$current(frame) get type] { base - 3d { Error [msgcat::mc {Unable to load RGB image into a non-rgb frame}] return } rgb {} } set loadParam(file,type) fits set loadParam(file,mode) {rgb image} set loadParam(load,type) socketgz set loadParam(file,name) $fn set loadParam(socket,id) $sock # mask not supported set loadParam(load,layer) {} return [ProcessLoad 0] } proc SaveRGBImageFile {fn} { global current if {$fn == {} || $current(frame) == {}} { return } switch -- [$current(frame) get type] { base - 3d { Error [msgcat::mc {Unable to save RGB image from a non-rgb frame}] return } rgb {} } if {![$current(frame) has fits]} { return } $current(frame) save fits rgb image file "\{$fn\}" } proc SaveRGBImageSocket {sock} { global current if {$current(frame) == {}} { return } switch -- [$current(frame) get type] { base - 3d { Error [msgcat::mc {Unable to save RGB image from a non-rgb frame}] return } rgb {} } if {![$current(frame) has fits]} { return } $current(frame) save fits rgb image socket $sock } proc ProcessRGBImageCmd {varname iname sock fn} { upvar $varname var upvar $iname i switch -- [string tolower [lindex $var $i]] { new { incr i CreateRGBFrame } mask { incr i # not supported } slice { incr i # not supported } } set param [lindex $var $i] StartLoad if {$sock != {}} { # xpa if {![LoadRGBImageSocket $sock $param]} { InitError xpa LoadRGBImageFile $param } } else { # comm if {$fn != {}} { LoadRGBImageAlloc $fn $param } else { LoadRGBImageFile $param } } FinishLoad } proc ProcessSendRGBImageCmd {proc id param sock fn} { global current if {$current(frame) == {}} { return } if {$sock != {}} { # xpa SaveRGBImageSocket $sock } elseif {$fn != {}} { # comm SaveRGBImageFile $fn $proc $id {} $fn } } saods9/ds9/library/ruler.tcl000644 000765 000000 00000005325 12705445650 016401 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc RulerDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # variables set s [$var(frame) get marker $var(id) ruler system] set var(system) [lindex $s 0] set var(sky) [lindex $s 1] set var(skyformat) degrees set var(dcoord) [lindex $s 2] set var(dformat) [lindex $s 3] # procs set var(which) ruler set var(proc,apply) RulerApply set var(proc,coordCB) RulerCoordCB set var(proc,editCB) RulerEditCB set var(proc,distCB) RulerDistCB # base MarkerBaseLineDialog $varname 375 200 set f $var(top).param # Axis Length ttk::label $f.tlen -text [msgcat::mc {Axis Length}] ttk::label $f.rx -textvariable ${varname}(distx) -relief groove -width 12 ttk::label $f.ry -textvariable ${varname}(disty) -relief groove -width 12 ttk::label $f.ulen -textvariable ${varname}(dcoord,msg) grid $f.tlen $f.rx $f.ry $f.ulen -padx 2 -pady 2 -sticky w } # actions proc RulerApply {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) ruler point $var(system) $var(sky) \ $var(x) $var(y) $var(x2) $var(y2) MarkerBaseLineApply $varname } # callbacks proc RulerCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "RulerCoordCB" } MarkerBaseCoordCB $varname $var(frame) marker $var(id) ruler system $var(system) $var(sky) \ $var(dcoord) $var(dformat) RulerEditCB $varname } proc RulerEditCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "RulerEditCB" } MarkerBaseLineEditCB $varname set d [$var(frame) get marker $var(id) ruler length \ $var(dcoord) $var(dformat)] set var(dist) [lindex $d 0] set var(distx) [lindex $d 1] set var(disty) [lindex $d 2] set var(angle) [$var(frame) get marker $var(id) angle \ $var(system) $var(sky)] } proc RulerDistCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "RulerDistCB" } $var(frame) marker $var(id) ruler system $var(system) $var(sky) \ $var(dcoord) $var(dformat) set d [$var(frame) get marker $var(id) ruler length \ $var(dcoord) $var(dformat)] set var(dist) [lindex $d 0] set var(distx) [lindex $d 1] set var(disty) [lindex $d 2] } saods9/ds9/library/samp.tcl000644 000765 000000 00000106502 13002503557 016177 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc SAMPDef {} { global isamp set isamp(timeout) 1000 } proc InitSAMP {} { global pds9 if {$pds9(samp)} { catch {SAMPConnect 0} } } # Cmds proc SAMPConnect {{verbose 1}} { global ds9 global isamp global samp global sampmap global sampmap2 # connected? if {[info exists samp]} { if {$verbose} { Error [msgcat::mc {SAMP: already connected}] } return } # reset samp array catch {unset samp} set samp(apps,image) {} set samp(apps,table) {} set samp(apps,votable) {} # these are to try to prevent feedback problems with # other probgrams set samp(rcvd,lock) 0 set samp(send,lock) 0 # delete any old tmp files SAMPDelTmpFiles # can we find a hub? if {![SAMPParseHub]} { if {$verbose} { Error [msgcat::mc {SAMP: unable to locate HUB}] } catch {unset samp} return } # register set params [list "string $samp(secret)"] if {![SAMPSend {samp.hub.register} $params rr]} { if {$verbose} { Error [msgcat::mc {SAMP: internal error}] } catch {unset samp} return } set rr [lindex $rr 1] foreach ff $rr { foreach {key val} $ff { switch -- $key { samp.hub-id {set samp(hub) $val} samp.self-id {set samp(self) $val} samp.private-key {set samp(private) $val} } } } # declare metadata catch {unset sampmap} set sampmap(samp.name) {string "SAOImage DS9"} set sampmap(samp.description.text) {string "SAOImage DS9 is an astronomical visualization application"} set sampmap(samp.icon.url) {string "http://ds9.si.edu/doc/sun.gif"} set sampmap(samp.documentation.url) {string "http://ds9.si.edu/doc/ref/index.html"} set sampmap(home.page) {string "http://ds9.si.edu/"} set sampmap(author.name) {string "William Joye"} set sampmap(author.email) {string "saord@cfa.harvard.edu"} set sampmap(author.affiliation) {string "Smithsonian Astrophysical Observatory"} set sampmap(ds9.version) "string [lindex $ds9(version) 0]" set param1 [list "string $samp(private)"] set param2 [list "struct sampmap"] set params "$param1 $param2" if {![SAMPSend {samp.hub.declareMetadata} $params rr]} { if {$verbose} { Error [msgcat::mc {SAMP: internal error}] } catch {unset samp} return } # who are we set samp(port) [lindex [fconfigure [xmlrpc::serve 0] -sockname] 2] set samp(home) "[info hostname]:$samp(port)" # callback set param1 [list "string $samp(private)"] set param2 [list "string http://$samp(home)"] set params "$param1 $param2" if {![SAMPSend {samp.hub.setXmlrpcCallback} $params rr]} { if {$verbose} { Error [msgcat::mc {SAMP: internal error}] } catch {unset samp} return } # declare subscriptions catch {unset sampmap} catch {unset sampmap2} set sampmap(samp.app.ping) {struct mapPing} set sampmap(samp.hub.event.shutdown) {struct mapShutdown} set sampmap(samp.hub.event.register) {struct mapRegister} set sampmap(samp.hub.event.unregister) {struct mapUnregister} set sampmap(samp.hub.disconnect) {struct mapDisconnect} set sampmap(image.load.fits) {struct mapImageLoadFits} set sampmap(table.load.fits) {struct mapTableLoadFits} set sampmap(table.load.votable) {struct mapTableLoadVotable} set sampmap(table.highlight.row) {struct mapTableHighlightRow} set sampmap(table.select.rowList) {struct mapTableSelectRowList} set sampmap(coord.pointAt.sky) {struct mapCoordPointAtSky} set sampmap(client.env.get) {struct mapClientEnvGet} set sampmap(x-samp.affiliation.name) {struct mapAffiliationName} set sampmap(x-samp.affiliation.url) {struct mapAffiliationURL} set sampmap(x-samp.homepage.url) {struct mapHomepageURL} set sampmap(x-samp.releasenotes.url) {struct mapReleasenotesURL} set sampmap(x-samp.faq.url) {struct mapFAQURL} set sampmap(x-samp.authors) {struct mapAuthors} set sampmap(x-samp.release.version) {struct mapReleaseVersion} set sampmap(ds9.get) {struct mapDS9Get} set sampmap(ds9.set) {struct mapDS9Set} set sampmap(ds9.restricted-get) {struct sampmap2} set sampmap(ds9.restricted-set) {struct sampmap2} set sampmap2(x-samp.mostly-harmless) {string "1"} set param1 [list "string $samp(private)"] set param2 [list "struct sampmap"] set params "$param1 $param2" if {![SAMPSend {samp.hub.declareSubscriptions} $params rr]} { if {$verbose} { Error [msgcat::mc {SAMP: internal error}] } catch {unset samp} return } after $isamp(timeout) SAMPUpdate } proc SAMPDisconnect {} { global ds9 global samp # connected? if {![info exists samp]} { Error [msgcat::mc {SAMP: not connected}] return } # disconnect if {[info exists samp(private)]} { set params [list "string $samp(private)"] set rr {} SAMPSend {samp.hub.unregister} $params rr SAMPShutdown } UpdateFileMenu UpdateCATDialog } proc SAMPSendImageLoadFits {id} { global ds9 global current global isamp global samp global sampmap global sampmap2 global debug if {$debug(tcl,samp)} { puts stderr "SAMPSendImageLoadFits" } # connected? if {![info exists samp]} { Error [msgcat::mc {SAMP: not connected}] return } # are we locked? if {$samp(rcvd,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Rcvd locked" } return } # got something to send? if {![$current(frame) has fits]} { return } # save current frame set fn [tmpnam {.samp}] catch {$current(frame) save fits image file "\{$fn\}"} # name to use set fnb [$current(frame) get fits file name root base] if {[regexp {(.*)\[.*\]} $fnb aa bb]} { set fnb $bb } # cmd catch {unset sampmap} set sampmap(samp.mtype) {string "image.load.fits"} set sampmap(samp.params) {struct sampmap2} catch {unset sampmap2} set sampmap2(url) "string \"[XMLQuote file://localhost/$fn]\"" set sampmap2(name) "string \"[XMLQuote $fnb]\"" set param1 [list "string $samp(private)"] if {$id != {}} { set param2 [list "string $id"] } else { set param2 {} } set param3 [list "struct sampmap"] set params "$param1 $param2 $param3" if {$id != {}} { SAMPSend {samp.hub.notify} $params rr } else { SAMPSend {samp.hub.notifyAll} $params rr } # set lock set samp(send,lock) 1 after $isamp(timeout) SAMPClearSendLock } proc SAMPSendTableLoadFits {id} { global ds9 global current global isamp global samp global sampmap global sampmap2 global debug if {$debug(tcl,samp)} { puts stderr "SAMPSendTableLoadFits" } # connected? if {![info exists samp]} { Error [msgcat::mc {SAMP: not connected}] return } # are we locked? if {$samp(rcvd,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Rcvd locked" } return } # got something to send? if {![$current(frame) has fits] && [$current(frame) has fits bin]} { return } # save current frame set fn [tmpnam {.samp}] catch {$current(frame) save fits table file "\{$fn\}"} # name to use set fnb [$current(frame) get fits file name root base] if {[regexp {(.*)\[.*\]} $fnb aa bb]} { set fnb $bb } # cmd catch {unset sampmap} set sampmap(samp.mtype) {string "table.load.fits"} set sampmap(samp.params) {struct sampmap2} catch {unset sampmap2} set sampmap2(url) "string \"[XMLQuote file://localhost/$fn]\"" set sampmap2(name) "string \"[XMLQuote $fnb]\"" set param1 [list "string $samp(private)"] if {$id != {}} { set param2 [list "string $id"] } else { set param2 {} } set param3 [list "struct sampmap"] set params "$param1 $param2 $param3" if {$id != {}} { SAMPSend {samp.hub.notify} $params rr } else { SAMPSend {samp.hub.notifyAll} $params rr } # set lock set samp(send,lock) 1 after $isamp(timeout) SAMPClearSendLock } proc SAMPSendTableLoadVotable {id varname} { global ds9 global isamp global samp global sampmap global sampmap2 upvar #0 $varname var global $varname global debug if {$debug(tcl,samp)} { puts stderr "SAMPSendTableLoadVotable $id $varname" } # connected? if {![info exists samp]} { Error [msgcat::mc {SAMP: not connected}] return } # are we locked? if {$samp(rcvd,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Rcvd locked" } return } # remember set samp(icat,$varname$samp(port)) $varname set samp(ocat,$varname) $varname$samp(port) # save votable set fn [tmpnam {.samp}] CATSaveFn $varname $fn VOTWrite # cmd catch {unset sampmap} set sampmap(samp.mtype) {string "table.load.votable"} set sampmap(samp.params) {struct sampmap2} catch {unset sampmap2} set sampmap2(url) "string \"[XMLQuote file://localhost/$fn]\"" set sampmap2(table-id) "string [XMLQuote $varname$samp(port)]" set sampmap2(name) "string \"[XMLQuote $var(title)]\"" set param1 [list "string $samp(private)"] if {$id != {}} { set param2 [list "string $id"] } else { set param2 {} } set param3 [list "struct sampmap"] set params "$param1 $param2 $param3" if {$id != {}} { SAMPSend {samp.hub.notify} $params rr } else { SAMPSend {samp.hub.notifyAll} $params rr } # set lock set samp(send,lock) 1 after $isamp(timeout) SAMPClearSendLock } proc SAMPSendTableHighlightRow {id varname row} { global isamp global samp global sampmap global sampmap2 # row starts at 1 upvar #0 $varname var global $varname global debug if {$debug(tcl,samp)} { puts stderr "SAMPSendTableHighlightRow $samp(ocat,$varname) $row" } catch {unset sampmap} set sampmap(samp.mtype) {string "table.highlight.row"} set sampmap(samp.params) {struct sampmap2} catch {unset sampmap2} set sampmap2(table-id) "string [XMLQuote $samp(ocat,$varname)]" set sampmap2(row) "string [XMLQuote [expr $row-1]]" set param1 [list "string $samp(private)"] if {$id != {}} { set param2 [list "string $id"] } else { set param2 {} } set param3 [list "struct sampmap"] set params "$param1 $param2 $param3" if {$id != {}} { SAMPSend {samp.hub.notify} $params rr } else { SAMPSend {samp.hub.notifyAll} $params rr } # set lock set samp(send,lock) 1 after $isamp(timeout) SAMPClearSendLock } proc SAMPSendTableSelectRowList {id varname rows} { global isamp global samp global sampmap global sampmap2 # rows start at 1 upvar #0 $varname var global $varname global debug if {$debug(tcl,samp)} { puts stderr "SAMPSendTableSelectRowList $samp(ocat,$varname) $rows" } catch {unset sampmap} set sampmap(samp.mtype) {string "table.select.rowList"} set sampmap(samp.params) {struct sampmap2} catch {unset sampmap2} set sampmap2(table-id) "string [XMLQuote $samp(ocat,$varname)]" set ss {} foreach rr $rows { lappend ss "string [expr $rr-1]" } set sampmap2(row-list) [list array $ss] set param1 [list "string $samp(private)"] if {$id != {}} { set param2 [list "string $id"] } else { set param2 {} } set param3 [list "struct sampmap"] set params "$param1 $param2 $param3" if {$id != {}} { SAMPSend {samp.hub.notify} $params rr } else { SAMPSend {samp.hub.notifyAll} $params rr } # set lock set samp(send,lock) 1 after $isamp(timeout) SAMPClearSendLock } proc SAMPSendTableRowListCmd {varname rowlist} { global ds9 global samp # connected? if {![info exists samp]} { return } if {$samp(apps,votable) == {}} { return } # are we good? if {![info exists samp(ocat,$varname)]} { return } # are we locked? if {$samp(rcvd,lock)} { global debug if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Rcvd locked" } return } switch -- [llength $rowlist] { 0 {} 1 {SAMPSendTableHighlightRow {} $varname $rowlist} default {SAMPSendTableSelectRowList {} $varname $rowlist} } } proc SAMPSendCoordPointAtSky {id coord} { global isamp global samp global sampmap global sampmap2 global debug if {$debug(tcl,samp)} { puts stderr "SAMPSendCoordPointAtSky $id $coord" } catch {unset sampmap} set sampmap(samp.mtype) {string "coord.pointAt.sky"} set sampmap(samp.params) {struct sampmap2} catch {unset sampmap2} set sampmap2(ra) "string [XMLQuote [lindex $coord 0]]" set sampmap2(dec) "string [XMLQuote [lindex $coord 1]]" set param1 [list "string $samp(private)"] if {$id != {}} { set param2 [list "string $id"] } else { set param2 {} } set param3 [list "struct sampmap"] set params "$param1 $param2 $param3" if {$id != {}} { SAMPSend {samp.hub.notify} $params rr } else { SAMPSend {samp.hub.notifyAll} $params rr } # set lock set samp(send,lock) 1 after $isamp(timeout) SAMPClearSendLock } proc SAMPSendCoordPointAtSkyCmd {which} { global ds9 global samp # connected? if {![info exists samp]} { return } # are we locked? if {$samp(rcvd,lock)} { global debug if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Rcvd locked" } return } if {$samp(apps,image) == {} || $samp(apps,table) == {}} { return } if {[$which has wcs equatorial wcs]} { set coord [$which get coordinates [$which get cursor canvas] wcs fk5 degrees] if {$coord != {}} { SAMPSendCoordPointAtSky {} "$coord" } } } # Support proc SAMPShutdown {} { global ds9 global samp # delete any files SAMPDelTmpFiles # close the server socket if still up catch {close $xmlrpc::acceptfd} # update the menus set samp(apps,image) {} set samp(apps,table) {} set samp(apps,votable) {} UpdateFileMenu UpdateCATDialog # unset samp array catch {unset samp} } proc SAMPUpdate {} { # this routine is run after a delay since it needs to # call the hub for metadata # connected? we might have already disconnected. global samp if {![info exists samp]} { return } global debug if {$debug(tcl,samp)} { puts stderr "SAMPUpdate" } # image fits set param1 [list "string $samp(private)"] set param2 [list "string image.load.fits"] set params "$param1 $param2" if {![SAMPSend {samp.hub.getSubscribedClients} $params rr]} { return } set samp(apps,image) {} foreach arg [lindex $rr 1] { foreach {key val} $arg { if {$key != {}} { lappend samp(apps,image) [list $key [SAMPGetAppName $key]] } } } # table fits set param1 [list "string $samp(private)"] set param2 [list "string table.load.fits"] set params "$param1 $param2" if {![SAMPSend {samp.hub.getSubscribedClients} $params rr]} { return } set samp(apps,table) {} foreach arg [lindex $rr 1] { foreach {key val} $arg { if {$key != {}} { lappend samp(apps,table) [list $key [SAMPGetAppName $key]] } } } # votable set param1 [list "string $samp(private)"] set param2 [list "string table.load.votable"] set params "$param1 $param2" if {![SAMPSend {samp.hub.getSubscribedClients} $params rr]} { return } set samp(apps,votable) {} foreach arg [lindex $rr 1] { foreach {key val} $arg { if {$key != {}} { lappend samp(apps,votable) [list $key [SAMPGetAppName $key]] } } } if {$debug(tcl,samp)} { puts stderr "SAMPUpdate: image apps: $samp(apps,image)" puts stderr "SAMPUpdate: table apps: $samp(apps,table)" puts stderr "SAMPUpdate: votable apps: $samp(apps,votable)" } UpdateFileMenu UpdateCATDialog } proc SAMPSend {method params resultVar} { upvar $resultVar result global samp global debug if {$debug(tcl,samp)} { puts stderr "SAMPSend: $method $params" } if {[catch {set result [xmlrpc::call $samp(url) $samp(method) $method $params]}]} { if {$debug(tcl,samp)} { puts stderr "SAMPSend Error: $result" } return 0 } # reset error if needed # xmlrpc leaves error msgs InitError samp if {$debug(tcl,samp)} { puts stderr "SAMPSend Result: $result" } return 1 } proc SAMPReply {msgid status {result {}} {url {}} {error {}}} { global samp global sampmap global sampmap2 global sampmap3 global debug if {$debug(tcl,samp)} { puts stderr "SAMPReply:$msgid:$status:$result:$url:$error:" } catch {unset sampmap} catch {unset sampmap2} catch {unset sampmap3} switch -- $status { OK { set sampmap(samp.status) {string "samp.ok"} set sampmap(samp.result) {struct sampmap2} if {$result != {}} { set sampmap2(value) "string \"[XMLQuote $result]\"" } if {$url != {}} { set sampmap2(url) "string \"[XMLQuote $url]\"" } } WARNING { set sampmap(samp.status) {string "samp.warning"} set sampmap(samp.result) {struct sampmap2} set sampmap(samp.error) {struct sampmap3} if {$result != {}} { set sampmap2(value) "string \"[XMLQuote $result]\"" } if {$url != {}} { set sampmap2(url) "string \"[XMLQuote $url]\"" } set sampmap3(samp.errortxt) "string \"[XMLQuote $error]\"" } ERROR { set sampmap(samp.status) {string "samp.error"} set sampmap(samp.error) {struct sampmap3} set sampmap3(samp.errortxt) "string \"[XMLQuote $error]\"" } } set param1 [list "string $samp(private)"] set param2 [list "string $msgid"] set param3 [list "struct sampmap"] set params "$param1 $param2 $param3" if {![SAMPSend {samp.hub.reply} $params rr]} { return } } proc SAMPReplySimple {msgid str} { upvar $varname args global debug if {$debug(tcl,samp)} { puts stderr "SAMPReplySimple: $str" } global samp # are we locked? if {$samp(send,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Send locked" } return } SAMPReply $msgid OK "$str" } proc SAMPClearSendLock {} { global samp global debug if {$debug(tcl,samp)} { puts stderr "SAMPClearSendLock" } set samp(send,lock) 0 } # receiveNotification(string sender-id, map message) proc samp.client.receiveNotification {args} { global debug if {$debug(tcl,samp)} { puts stderr "SAMPReceivedNotification: $args" } set secret [lindex $args 0] set id [lindex $args 1] set map [lindex $args 2] set mtype {} set params {} foreach mm $map { foreach {key val} $mm { switch -- $key { samp.mtype {set mtype $val} samp.params {set params $val} } } } switch -- $mtype { samp.hub.event.shutdown { SAMPRcvdEventShutdown params } samp.hub.event.register { SAMPRcvdEventRegister params } samp.hub.event.unregister { SAMPRcvdEventUnregister params } samp.hub.disconnect { SAMPRcvdDisconnect params } image.load.fits { SAMPRcvdImageLoadFits params } table.load.fits { SAMPRcvdTableLoadFits params } table.load.votable { SAMPRcvdTableLoadVotable params } table.highlight.row { SAMPRcvdTableHighlightRow params } table.select.rowList { SAMPRcvdTableSelectRowList params } coord.pointAt.sky { SAMPRcvdCoordPointAtSky params } ds9.set { SAMPRcvdDS9Set {} params 0 } ds9.restricted-set { SAMPRcvdDS9Set {} params 1 } default { if {$debug(tcl,samp)} { puts stderr "SAMP samp.client.receiveNotification: bad mtype $mtype" } } } return {string OK} } # receiveCall(string sender-id, string msg-id, map message) proc samp.client.receiveCall {args} { global ds9 global debug if {$debug(tcl,samp)} { puts stderr "SAMPReceivedCall: $args" } set secret [lindex $args 0] set id [lindex $args 1] set msgid [lindex $args 2] set map [lindex $args 3] set mtype {} set params {} foreach mm $map { foreach {key val} $mm { switch -- $key { samp.mtype {set mtype $val} samp.params {set params $val} } } } switch -- $mtype { samp.app.ping { SAMPReply $msgid OK } image.load.fits { SAMPRcvdImageLoadFits params SAMPReply $msgid OK } table.load.fits { SAMPRcvdTableLoadFits params SAMPReply $msgid OK } table.load.votable { SAMPRcvdTableLoadVotable params SAMPReply $msgid OK } table.highlight.row { SAMPRcvdTableHighlightRow params SAMPReply $msgid OK } table.select.rowList { SAMPRcvdTableSelectRowList params SAMPReply $msgid OK } coord.pointAt.sky { SAMPRcvdCoordPointAtSky params SAMPReply $msgid OK } client.env.get { SAMPRcvdClientEnvGet $msgid params } x-samp.affiliation.name { SAMPReplySimple $msgid "SMITHSONIAN ASTROPHYSICAL OBSERVATORY" } x-samp.affiliation.url { SAMPReplySimple $msgid "https://www.cfa.harvard.edu/sao" } x-samp.homepage.url { SAMPReplySimple $msgid "http://ds9.si.edu" } x-samp.releasenotes.url { SAMPReplySimple $msgid OK "http://ds9.si.edu/doc/release/r7.0.html" } x-samp.faq.url { SAMPReplySimple $msgid OK "http://ds9.si.edu/doc/faq.html" } x-samp.authors { global help SAMPReplySimple $msgid OK "$help(authors)" } x-samp.release.version { SAMPReplySimple $msgid OK "$ds9(version)" } ds9.get { SAMPRcvdDS9Get $msgid params } ds9.set { SAMPRcvdDS9Set $msgid params 0 } ds9.restricted-get { SAMPRcvdDS9Get $msgid params } ds9.restricted-set { SAMPRcvdDS9Set $msgid params 1 } default { SAMPReply $msgid ERROR {} {} "[msgcat::mc {Unknown command}]: $mtype" if {$debug(tcl,samp)} { puts stderr "SAMP samp.client.receiveCall: bad mtype $mtype" } } } return {string OK} } # receiveResponse(string responder-id, string msg-tag, map response) proc samp.client.receiveResponse {args} { global debug if {$debug(tcl,samp)} { puts stderr "SAMPReceivedResponse: $args" } set msgtag [lindex $args 0] set value [lindex $args 1] set map [lindex $args 2] return {string OK} } # Support proc SAMPParseHub {} { global samp global env set fn {} if {[info exists env(SAMP_HUB)]} { if {$env(SAMP_HUB) != {}} { set exp {std-lockurl:(.*)} if {[regexp $exp $env(SAMP_HUB) dummy url]} { ParseURL $url rr switch -- $rr(scheme) { ftp { set fn [tmpnam {.samp}] GetFileFTP $rr(authority) $rr(path) $fn } file {set fn $rr(path)} http - default { set fn [tmpnam {.samp}] GetFileHTTP $url $fn } } } } } if {$fn == {}} { # look in home directory for .samp global tcl_platform switch $tcl_platform(platform) { unix { set fn [file join [GetEnvHome] {.samp}] } windows { set fn [file join "$env(HOMEDRIVE)$env(HOMEPATH)" {.samp}] } } } # no hub to be found if {![file exist $fn]} { return 0 } set samp(secret) {} set samp(url) {} set samp(metod) {} set fp [open $fn r] while {1} { if {[gets $fp line] == -1} { break } # skip any comments if {[string range $line 0 0] == "#"} { continue; } if {[regexp -nocase {samp.secret=(.*)} $line foo ss]} { set samp(secret) $ss } if {[regexp -nocase {samp.hub.xmlrpc.url=(.*)} $line foo url]} { if {[ParseURL $url r]} { set samp(url) $r(scheme)://$r(authority) set samp(method) [string range $r(path) 1 end] } } } catch {close $fp} if {$samp(secret) == {} || $samp(url) == {}} { SAMPDelTmpFiles return 0 } global debug if {$debug(tcl,samp)} { puts stderr "SAMPParseHub: $samp(secret) $samp(url) $samp(method)" } return 1 } proc SAMPGetAppName {id} { global samp global debug if {$debug(tcl,samp)} { puts stderr "SAMPGetAppName: $id" } set param1 [list "string $samp(private)"] set param2 [list "string $id"] set params "$param1 $param2" if {![SAMPSend {samp.hub.getMetadata} $params rr]} { return } set name {} foreach arg [lindex $rr 1] { foreach {key val} $arg { switch -- $key { samp.name {set name [XMLUnQuote $val]} } } } return $name } # CallBacks # Hub proc SAMPRcvdEventShutdown {varname} { upvar $varname args global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdEventShutdown: $args" } SAMPShutdown } proc SAMPRcvdEventRegister {varname} { upvar $varname args global isamp global samp global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdEventRegister: $args" } foreach arg $args { foreach {key val} $arg { switch -- $key { id { # check to see if its just us if {$samp(self) == $val} { return } } } } } # wait after $isamp(timeout) SAMPUpdate } proc SAMPRcvdEventUnregister {varname} { upvar $varname args global isamp global samp global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdEventUnregister: $args" } foreach arg $args { foreach {key val} $arg { switch -- $key { id { # check to see if its just us if {$samp(self) == $val} { return } } } } } # wait after $isamp(timeout) SAMPUpdate } proc SAMPRcvdDisconnect {varname} { upvar $varname args global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdDisconnect: $args" } set msg {} foreach arg $args { foreach {key val} $arg { switch -- $key { reason {set msg [XMLUnQuote $val]} } } } SAMPShutdown } # HTTPClient proc SAMPRcvdImageLoadFits {varname} { upvar $varname args global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdImageLoadFits: $args" } global current global samp # are we locked? if {$samp(send,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Send locked" } return } set url {} set imageid {} set name {} foreach arg $args { foreach {key val} $arg { switch -- $key { url {set url [XMLUnQuote $val]} image-id {set imageid [XMLUnQuote $val]} name {set name [XMLUnQuote $val]} } } } if {$debug(tcl,samp)} { puts stderr "SAMPRcvdImageLoadFits: $url $imageid $name" } if {$url != {}} { MultiLoad LoadURLFits $url {} {} } } proc SAMPRcvdTableLoadFits {varname} { upvar $varname args global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdTableLoadFits: $args" } global current global samp # are we locked? if {$samp(send,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Send locked" } return } set url {} set imageid {} set name {} foreach arg $args { foreach {key val} $arg { switch -- $key { url {set url [XMLUnQuote $val]} image-id {set imageid [XMLUnQuote $val]} name {set name [XMLUnQuote $val]} } } } if {$debug(tcl,samp)} { puts stderr "SAMPRcvdTableLoadFits: $url $imageid $name" } if {$url != {}} { MultiLoad LoadURLFits $url {} {} } } proc SAMPRcvdTableLoadVotable {varname} { upvar $varname args global samp global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdTableLoadVotable: $args" } # are we locked? if {$samp(send,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Send locked" } return } set url {} set tabid {} set name {} foreach arg $args { foreach {key val} $arg { switch -- $key { url {set url [XMLUnQuote $val]} table-id {set tabid [XMLUnQuote $val]} name {set name [XMLUnQuote $val]} } } } if {$debug(tcl,samp)} { puts stderr "SAMPRcvdTableLoadVotable: $url $tabid $name" } global icat if {$url != {}} { CATVOTURL $url $name $tabid if {$tabid != {}} { set catid [lindex $icat(cats) end] set samp(icat,$tabid) $catid set samp(ocat,$catid) $tabid } } } proc SAMPRcvdTableHighlightRow {varname} { upvar $varname args global samp global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdTableHighlightRow: $args" } # are we locked? if {$samp(send,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Send locked" } return } set url {} set tabid {} set row {} foreach arg $args { foreach {key val} $arg { switch -- $key { url {set url [XMLUnQuote $val]} table-id {set tabid [XMLUnQuote $val]} row {set row [XMLUnQuote $val]} } } } if {$debug(tcl,samp)} { puts stderr "SAMPRcvdTableHighlightRow: $url $tabid $row" } if {$tabid != {} && $row != {}} { if {[info exists samp(icat,$tabid)]} { CATSelectRows $samp(icat,$tabid) samp [expr $row+1] } } } proc SAMPRcvdTableSelectRowList {varname} { upvar $varname args global samp global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdTableSelectRowList: $args" } # are we locked? if {$samp(send,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Send locked" } return } set url {} set tabid {} set rowlist {} foreach arg $args { foreach {key val} $arg { switch -- $key { url {set url [XMLUnQuote $val]} table-id {set tabid [XMLUnQuote $val]} row-list { foreach rr [XMLUnQuote $val] { lappend rowlist [expr $rr+1] } } } } } if {$debug(tcl,samp)} { puts stderr "SAMPRcvdTableSelectRowList: $url $tabid $rowlist" } if {$tabid != {} && [llength $rowlist] != 0} { if {[info exists samp(icat,$tabid)]} { CATSelectRows $samp(icat,$tabid) samp $rowlist } } } proc SAMPRcvdCoordPointAtSky {varname} { upvar $varname args global samp global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdCoordPointAtSky: $args" } # are we locked? if {$samp(send,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Send locked" } return } set ra {} set dec {} foreach arg $args { foreach {key val} $arg { switch -- $key { ra {set ra [XMLUnQuote $val]} dec {set dec [XMLUnQuote $val]} } } } if {$debug(tcl,samp)} { puts stderr "SAMPRcvdCoordPointAtSky: $ra $dec" } global current if {$ra != {} && $dec != {} && [$current(frame) has wcs equatorial wcs]} { set samp(rcvd,lock) 1 PanTo $ra $dec wcs fk5 set samp(rcvd,lock) 0 } } proc SAMPRcvdClientEnvGet {msgid varname} { upvar $varname args global samp global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdClientEnvGet: $msgid $args" } # are we locked? if {$samp(send,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Send locked" } return } set name {} foreach arg $args { foreach {key val} $arg { switch -- $key { name {set name [XMLUnQuote $val]} } } } if {$debug(tcl,samp)} { puts stderr "SAMPRcvdClientEnvGet: $name" } global env if {[catch {set rr $env($name)}]} { SAMPReply $msgid ERROR {} {} [lindex [split $errorInfo "\n"] 0] global errorInfo set errorInfo {} } else { SAMPReply $msgid OK $rr } } proc SAMPRcvdDS9Set {msgid varname safemode} { upvar $varname args global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdDS9Set: $msgid $args $safemode" } global current global samp # are we locked? if {$samp(send,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Send locked" } return } set url {} set cmd {} foreach arg $args { foreach {key val} $arg { switch -- $key { url {set url [XMLUnQuote $val]} cmd {set cmd [XMLUnQuote $val]} } } } set fn {} InitError samp if {$url != {}} { set fn [tmpnam {.samp}] GetFileURL $url fn } CommSet $fn $cmd $safemode if {$msgid != {}} { SAMPRcvdDS9SetReply $msgid } } proc SAMPRcvdDS9SetReply {msgid} { global ds9 global icursor global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdDS9SetReply: $msgid" } global errorInfo if {$errorInfo != {} || $ds9(msg) != {}} { if {$ds9(msg) != {}} { switch $ds9(msg,level) { info - warning {SAMPReply $msgid OK $ds9(msg)} error - fatal {SAMPReply $msgid ERROR {} {} $ds9(msg)} } } else { SAMPReply $msgid ERROR {} {} [lindex [split $errorInfo "\n"] 0] } InitError samp } else { SAMPReply $msgid OK } } proc SAMPRcvdDS9Get {msgid varname} { upvar $varname args global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdDS9Get: $args" } global current global samp # are we locked? if {$samp(send,lock)} { if {$debug(tcl,samp)} { puts stderr "SAMP: ABORT Send locked" } return } set url {} set cmd {} foreach arg $args { foreach {key val} $arg { switch -- $key { url {set url [XMLUnQuote $val]} cmd {set cmd [XMLUnQuote $val]} } } } set fn [tmpnam {.samp}] InitError samp CommGet SAMPRcvdDS9GetReply $msgid $cmd $fn } proc SAMPRcvdDS9GetReply {msgid msg {fn {}}} { global ds9 global icursor global debug if {$debug(tcl,samp)} { puts stderr "SAMPRcvdDS9GetReply: $msgid $msg $fn" } global errorInfo if {$errorInfo != {} || $ds9(msg) != {}} { if {$ds9(msg) != {}} { switch $ds9(msg,level) { info - warning {SAMPReply $msgid OK $ds9(msg)} error - fatal {SAMPReply $msgid ERROR {} {} $ds9(msg)} } } else { SAMPReply $msgid ERROR {} {} [lindex [split $errorInfo "\n"] 0] } InitError samp } else { # be sure to white space any newlines, backslashes, and trim set value [string trim [string map {\n { } \\ {}} $msg]] # create url set url {} if {$fn != {}} { set url "file://localhost/$fn" } SAMPReply $msgid OK $value $url } } proc SAMPDelTmpFiles {} { global ds9 # delete any previous files foreach fn [glob -directory $ds9(tmpdir) -nocomplain {ds9*samp*}] { catch {file delete -force "$fn"} } } # Cmds proc ProcessSAMPCmd {varname iname} { upvar $varname var upvar $iname i global samp global ds9 global env # we need to be realized ProcessRealizeDS9 SAMPUpdate switch -- [string tolower [lindex $var $i]] { send { incr i switch -- [string tolower [lindex $var $i]] { image { incr i set name [string tolower [lindex $var $i]] if {[info exists samp]} { foreach arg $samp(apps,image) { foreach {key val} $arg { if {[string tolower $val] == $name} { SAMPSendImageLoadFits $key break } } } } else { Error [msgcat::mc {SAMP: not connected}] } } table { incr i set name [string tolower [lindex $var $i]] if {[info exists samp]} { foreach arg $samp(apps,table) { foreach {key val} $arg { if {[string tolower $val] == $name} { SAMPSendTableLoadFits $key break } } } } else { Error [msgcat::mc {SAMP: not connected}] } } default { set name [string tolower [lindex $var $i]] if {[info exists samp]} { foreach arg $samp(apps,image) { foreach {key val} $arg { if {[string tolower $val] == $name} { SAMPSendImageLoadFits $key break } } } } else { Error [msgcat::mc {SAMP: not connected}] } } } } broadcast { incr i switch -- [string tolower [lindex $var $i]] { image {SAMPSendImageLoadFits {}} table {SAMPSendTableLoadFits {}} default { incr i -1 SAMPSendImageLoadFits {} } } } connect {SAMPConnect} disconnect {SAMPDisconnect} default { if {[FromYesNo [lindex $var $i]]} { SAMPConnect } else { SAMPDisconnect } } } } saods9/ds9/library/sao.tcl000644 000765 000000 00000007135 12741011522 016016 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc SAODef {} { global sao global isao set isao(top) .sao set isao(mb) .saomb set sao(sky) fk5 set sao(rformat) arcmin set sao(width) 15 set sao(height) 15 set sao(mode) new set sao(save) 0 set sao(survey) dss } proc SAODialog {} { global sao global isao global wcs if {[winfo exists $isao(top)]} { raise $isao(top) return } set varname dsao upvar #0 $varname var global $varname set var(top) $isao(top) set var(mb) $isao(mb) set var(sky) $sao(sky) set var(skyformat) $wcs(skyformat) set var(rformat) $sao(rformat) set var(width) $sao(width) set var(height) $sao(height) # not used set var(width,pixels) 300 set var(height,pixels) 300 set var(mode) $sao(mode) set var(save) $sao(save) set var(survey) $sao(survey) set w $var(top) IMGSVRInit $varname "SAO-DSS [msgcat::mc {Server}]" \ SAOExec SAOAck ARDone ARError IMGSVRUpdate $varname } proc SAOExec {varname} { upvar #0 $varname var global $varname if {$var(save)} { set compress no set var(fn) [SaveFileDialog savefitsfbox] if {$var(fn) == {}} { ARDone $varname return } } else { set compress gzip set var(fn) [tmpnam {.fits.gz}] } # skyformat switch -- $var(skyformat) { degrees { set xx [uformat d h: $var(x)] set yy [uformat d d: $var(y)] } sexagesimal { set xx $var(x) set yy $var(y) } } # size - convert to arcmin switch -- $var(rformat) { degrees { set ww [expr $var(width)*60.] set hh [expr $var(height)*60.] } arcmin { set ww $var(width) set hh $var(height) } arcsec { set ww [expr $var(width)/60.] set hh [expr $var(height)/60.] } } if {$ww>60} { set ww 60 } if {$hh>60} { set hh 60 } # query set var(query) [http::formatQuery r $xx d $yy e J2000 w $ww h $ww c $compress] set url "http://www.cfa.harvard.edu/archive/dss" IMGSVRGetURL $varname $url } proc SAOAck {varname} { upvar #0 $varname var global $varname set msg {Acknowledgments for the DSS-SAO The Digitized Sky Surveys were produced at the Space Telescope Science Institute under U.S. Government grant NAG W-2166. The images of these surveys are based on photographic data obtained using the Oschin Schmidt Telescope on Palomar Mountain and the UK Schmidt Telescope. The plates were processed into the present compressed digital form with the permission of these institutions. The Oschin Schmidt Telescope is operated by the California Institute of Technology and Palomar Observatory. The UK Schmidt Telescope was operated by the Royal Observatory Edinburgh, with funding from the UK Science and Engineering Research Council (later the UK Particle Physics and Astronomy Research Council), until 1988 June, and thereafter by the Anglo-Australian Observatory. The blue plates of the southern Sky Atlas and its Equatorial Extension (together known as the SERC-J), as well as the Equatorial Red (ER), and the Second Epoch [red] Survey (SES) were all taken with the UK Schmidt. } SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \ 80 40 insert top $msg } # Process Cmds proc ProcessSAOCmd {varname iname} { upvar $varname var upvar $iname i SAODialog IMGSVRProcessCmd $varname $iname dsao } proc ProcessSendSAOCmd {proc id param} { SAODialog IMGSVRProcessSendCmd $proc $id $param dsao } saods9/ds9/library/save.tcl000644 000765 000000 00000011350 12705445650 016201 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc SaveDef {} { global savefits set savefits(type) image set savefits(mosaic) 1 } proc Save {format fn} { global savefits switch -- $format { fits {SaveFitsFile $savefits(type) $fn} sfits {} rgbimage {SaveRGBImageFile $fn} rgbcube {SaveRGBCubeFile $fn} srgbcube {} mecube {SaveMECubeFile $fn} multiframe {} mosaicimage - mosaicimagewcs {SaveMosaicImageWCSFile $fn} mosaicimageiraf {} mosaicimagewfpc {} mosaic - mosaicwcs {SaveMosaicWCSFile $fn $savefits(mosaic)} mosaiciraf {} smosaicwcs {} smosaiciraf {} } } # Process Cmds proc ProcessSaveCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized ProcessRealizeDS9 set format {} set fn [lindex $var $i] if {$fn == {}} { return } switch -- $fn { fits - sfits - rgbimage - rgbcube - srgbcube - mecube - multiframe - mosaicimagewcs - mosaicimageiraf - mosaicimagewfpc - mosaicwcs - mosaiciraf - smosaicwcs - smosaiciraf { set format $fn set fn {} incr i } mosaicimage - mosaic { set format $fn set fn {} incr i # eat any wcs if {[string range [lindex $var $i] 0 2] == {wcs}} { incr i } } } # one last time if {$fn == {}} { set fn [lindex $var $i] if {$fn == {}} { return } } if {$format == {}} { set format [ExtToFormat $fn] } global savefits set param [string tolower [lindex $var [expr $i+1]]] switch $format { fits { switch $param { slice - image - table { set savefits(type) $param incr i } default {set savefits(type) image} } } mosaic - mosaiciraf - mosaicwcs { if {[string is integer -strict $param]} { set savefits(mosaic) $param incr i } } } global savefitsfbox FileLast savefitsfbox $fn Save $format $fn } # Support proc SaveDialog {format} { global savefits global current set fn [SaveFileDialog savefitsfbox] set which image if {$fn != {}} { set ok 1 if {$current(frame) != {}} { switch -- $format { fits { if {[$current(frame) has fits bin]} { set ok [SaveParams savefits] } } slice { set format fits set savefits(type) slice } mosaicwcs - mosaiciraf { if {[$current(frame) has fits mosaic]} { set ok [SaveMosaicParams savefits] } } } } if {$ok} { Save $format $fn } } } proc SaveParams {varname} { upvar $varname var global ed2 set w {.savefits} set ed2(ok) 0 set ed2(type) $var(type) DialogCreate $w {Fits} ed2(ok) # Param set f [ttk::frame $w.param] ttk::label $f.tfits -text [msgcat::mc {Fits}] ttk::radiobutton $f.image -text [msgcat::mc {Image}] \ -variable ed2(type) -value image ttk::radiobutton $f.table -text {Table} \ -variable ed2(type) -value table grid $f.tfits $f.image $f.table -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed2(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed2(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed2(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed2(ok) DialogDismiss $w if {$ed2(ok)} { set var(type) $ed2(type) } set rr $ed2(ok) unset ed2 return $rr } proc SaveMosaicParams {varname} { upvar $varname var global ed2 set w {.savefits} set ed2(ok) 0 set ed2(mosaic) $var(mosaic) DialogCreate $w {Mosaic} ed2(ok) # Param set f [ttk::frame $w.param] ttk::label $f.tmosaic -text [msgcat::mc {Mosaic}] ttk::entry $f.mosaic -textvariable ed2(mosaic) -width 8 grid $f.tmosaic $f.mosaic -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed2(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed2(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed2(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed2(ok) DialogDismiss $w if {$ed2(ok)} { set var(mosaic) $ed2(mosaic) } set rr $ed2(ok) unset ed2 return $rr } saods9/ds9/library/saveimage.tcl000644 000765 000000 00000011743 12705445650 017212 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc SaveImageDef {} { global saveimage set saveimage(jpeg,quality) 75 set saveimage(tiff,compress) none set aa [msgcat::mc {An error has occurred while creating the image. Please be sure that the entire image window is visible on the screen.}] set bb [msgcat::mc {An error has occurred while creating the image. Please be sure that the ds9 window is in the upper left corner of the default screen and the entire window is visible.}] set cc [msgcat::mc {This function is not currently supported for this port.}] global ds9 switch $ds9(wm) { x11 { global tcl_platform switch $tcl_platform(os) { Darwin { switch [lindex [split $tcl_platform(osVersion) {.}] 0] { 10 - 11 {set saveimage(error) $bb} 8 - 9 - default {set saveimage(error) $aa} } } default {set saveimage(error) $aa} } } aqua - win32 {set saveimage(error) $cc} } } proc SaveImageDialog {format} { global saveimage global fitsfbox global epsfbox global giffbox global jpegfbox global tifffbox global pngfbox switch -- $format { fits {set fn [SaveFileDialog fitsfbox]} eps {set fn [SaveFileDialog epsfbox]} gif {set fn [SaveFileDialog giffbox]} jpeg {set fn [SaveFileDialog jpegfbox]} tiff {set fn [SaveFileDialog tifffbox]} png {set fn [SaveFileDialog pngfbox]} } if {$fn != {}} { set ok 1 switch -- $format { fits - eps - gif - png {} jpeg {set ok [JPEGExportDialog saveimage(jpeg,quality)]} tiff {set ok [TIFFExportDialog saveimage(tiff,compress)]} } if {$ok} { SaveImage $fn $format } } } proc SaveImage {fn format} { global ds9 global current global saveimage global cube if {$fn == {} || ![$current(frame) has fits]} { return } # besure we are on top raise $ds9(top) # and no highlite $current(frame) highlite off # and refresh screen RealizeDS9 switch -- $format { fits {$current(frame) save fits resample file "\{$fn\}"} eps {EPS $fn} gif - tiff - jpeg - png {SaveImagePhoto $fn $format} } # reset switch -- $ds9(display) { single - blink {} tile {$current(frame) highlite on} } # and refresh screen RealizeDS9 } # Support proc SaveImagePhoto {fn format} { global ds9 global saveimage switch $ds9(wm) { x11 {} aqua - win32 { Error $saveimage(error) return } } set rr [catch {image create photo -format window -data $ds9(canvas)} ph] if {$rr != 0} { Error $saveimage(error) } switch -- $format { gif - png {$ph write $fn -format $format} jpeg {$ph write $fn \ -format [list $format -quality $saveimage(jpeg,quality)]} tiff {$ph write $fn \ -format [list $format -compression $saveimage(tiff,compress)]} } image delete $ph } # Process Cmds proc ProcessSaveImageCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized # yes, really need this # ProcessRealizeDS9 UpdateDS9 RealizeDS9 set format {} set param {} set fn [lindex $var $i] if {$fn == {}} { return } # backward compatibility switch $fn { fits - eps - gif - tiff - jpeg - png { set format $fn set fn {} incr i } jpg { set format jpeg set fn {} incr i } tif { set format tiff set fn {} incr i } mpeg { # backward compatibility global movie incr i set fn [lindex $var $i] if {[string is integer -strict $fn]} { incr i set fn [lindex $var $i] } set movie(action) slice Movie $fn } } # try again if {$fn == {}} { set fn [lindex $var $i] if {$fn == {}} { return } if {[string is integer -strict $fn] || $fn == {none} || $fn == {jpeg} || $fn == {backbits} || $fn == {deflate}} { set param $fn set fn {} incr i } } # one last time if {$fn == {}} { set fn [lindex $var $i] if {$fn == {}} { return } } global saveimage if {$format == {}} { set format [ExtToFormat $fn] } if {$param == {}} { set param [string tolower [lindex $var [expr $i+1]]] switch $format { fits - eps - gif - png {} jpeg { if {[string is integer -strict $param]} { set saveimage(jpeg,quality) $param incr i } } tiff { switch $param { none - jpeg - packbits - deflate { set saveimage(tiff,compress) $param incr i } } } } } global fitsfbox global epsfbox global giffbox global jpegfbox global tifffbox global pngfbox switch -- $format { fits {FileLast fitsfbox $fn} eps {FileLast epsfbox $fn} gif {FileLast giffbox $fn} jpeg {FileLast jpegfbox $fn} tiff {FileLast tifffbox $fn} png {FileLast pngfbox $fn} } SaveImage $fn $format } saods9/ds9/library/scale.tcl000644 000765 000000 00000065071 12705445650 016343 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ScaleDef {} { global scale global iscale global pscale set iscale(top) .scale set iscale(mb) .scalemb set scale(min) 1 set scale(max) 100 set scale(xaxis) full set scale(yaxis) log set scale(bins) 512 set scale(lock) 0 set scale(lock,limits) 0 set scale(type) linear set scale(log) 1000 set scale(mode) minmax set scale(scope) local set scale(datasec) 1 set pscale(type) $scale(type) set pscale(log) $scale(log) set pscale(mode) $scale(mode) set pscale(scope) $scale(scope) set pscale(datasec) $scale(datasec) } proc MinMaxDef {} { global minmax global pminmax set minmax(mode) scan set minmax(sample) 25 array set pminmax [array get minmax] } proc ZScaleDef {} { global zscale global pzscale set zscale(contrast) .25 set zscale(sample) 600 set zscale(line) 120 array set pzscale [array get zscale] } proc ChangeDATASEC {} { global current global scale global rgb if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,scale) [list $current(frame) datasec $scale(datasec)] UpdateScale } } proc ChangeScale {} { global current global scale global rgb if {$current(frame) != {}} { if {[$current(frame) has iis]} { return {} } SetWatchCursor RGBEvalLockCurrent rgb(lock,scale) [list $current(frame) colorscale log $scale(log)] RGBEvalLockCurrent rgb(lock,scale) [list $current(frame) colorscale $scale(type)] ResetWatchCursor UpdateScale } } proc ChangeScaleMode {} { global current global scale global rgb if {$current(frame) != {}} { if {[$current(frame) has iis]} { return {} } SetWatchCursor RGBEvalLockCurrent rgb(lock,scale) [list $current(frame) clip mode $scale(mode)] ResetWatchCursor UpdateScale } } proc ChangeScaleLimit {} { global current global scale global rgb if {$current(frame) != {}} { if {[$current(frame) has iis]} { return {} } set scale(mode) user RGBEvalLockCurrent rgb(lock,scale) [list $current(frame) clip user $scale(min) $scale(max)] RGBEvalLockCurrent rgb(lock,scale) [list $current(frame) clip mode $scale(mode)] UpdateScale } } proc ChangeScaleScope {} { global current global scale global rgb if {$current(frame) != {}} { if {[$current(frame) has iis]} { return {} } SetWatchCursor RGBEvalLockCurrent rgb(lock,scale) [list $current(frame) clip scope $scale(scope)] ResetWatchCursor UpdateScale } } proc ChangeMinMax {} { global current global minmax global rgb if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,scale) \ [list $current(frame) clip minmax $minmax(sample) $minmax(mode)] UpdateScale } } proc ChangeZScale {} { global current global zscale global rgb if {$current(frame) != {}} { RGBEvalLockCurrent rgb(lock,scale) [list $current(frame) clip zscale $zscale(contrast) $zscale(sample) $zscale(line)] UpdateScale } } proc UpdateScale {} { global current global debug if {$debug(tcl,update)} { puts stderr "UpdateScale" } LockScaleCurrent LockScaleLimitsCurrent UpdateScaleMenu UpdateScaleDialog UpdateContourScale UpdateGraphYAxis $current(frame) UpdateInfoBoxBase UpdateMain } proc ScaleDialog {} { global scale global iscale global dscale global current global ds9 global minmax global canvas # see if we already have a window visible if {[winfo exists $iscale(top)]} { raise $iscale(top) return } # create the window set w $iscale(top) set mb $iscale(mb) Toplevel $w $mb 6 [msgcat::mc {Scale Parameters}] ScaleDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit $mb add cascade -label [msgcat::mc {Scale}] -menu $mb.scale $mb add cascade -label [msgcat::mc {Limits}] -menu $mb.limit $mb add cascade -label [msgcat::mc {Scope}] -menu $mb.scope $mb add cascade -label [msgcat::mc {Min Max}] -menu $mb.minmax $mb add cascade -label [msgcat::mc {Parameters}] -menu $mb.param $mb add cascade -label [msgcat::mc {Graph}] -menu $mb.graph menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] -command ScaleApplyDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] -command ScaleDestroyDialog EditMenu $mb iscale menu $mb.scale $mb.scale add radiobutton -label [msgcat::mc {Linear}] \ -variable scale(type) -command ChangeScale -value linear $mb.scale add radiobutton -label [msgcat::mc {Log}] \ -variable scale(type) -command ChangeScale -value log $mb.scale add radiobutton -label [msgcat::mc {Power}] \ -variable scale(type) -command ChangeScale -value pow $mb.scale add radiobutton -label [msgcat::mc {Square Root}] \ -variable scale(type) -command ChangeScale -value sqrt $mb.scale add radiobutton -label [msgcat::mc {Squared}] \ -variable scale(type) -command ChangeScale -value squared $mb.scale add radiobutton -label {ASINH} \ -variable scale(type) -command ChangeScale -value asinh $mb.scale add radiobutton -label {SINH} \ -variable scale(type) -command ChangeScale -value sinh $mb.scale add radiobutton -label [msgcat::mc {Histogram Equalization}] \ -variable scale(type) -command ChangeScale -value histequ $mb.scale add separator $mb.scale add command -label "[msgcat::mc {Log Exponent}]..." \ -command ScaleLogDialog menu $mb.limit $mb.limit add radiobutton -label [msgcat::mc {Min Max}] \ -variable scale(mode) -command ChangeScaleMode -value minmax $mb.limit add separator $mb.limit add radiobutton -label {99.5%} \ -variable scale(mode) -command ChangeScaleMode -value 99.5 $mb.limit add radiobutton -label {99%} \ -variable scale(mode) -command ChangeScaleMode -value 99 $mb.limit add radiobutton -label {98%} \ -variable scale(mode) -command ChangeScaleMode -value 98 $mb.limit add radiobutton -label {97%} \ -variable scale(mode) -command ChangeScaleMode -value 97 $mb.limit add radiobutton -label {96%} \ -variable scale(mode) -command ChangeScaleMode -value 96 $mb.limit add radiobutton -label {95%} \ -variable scale(mode) -command ChangeScaleMode -value 95 $mb.limit add radiobutton -label {92.5%} \ -variable scale(mode) -command ChangeScaleMode -value 92.5 $mb.limit add radiobutton -label {90%} \ -variable scale(mode) -command ChangeScaleMode -value 90 $mb.limit add separator $mb.limit add radiobutton -label {ZScale} \ -variable scale(mode) -command ChangeScaleMode -value zscale $mb.limit add radiobutton -label {ZMax} \ -variable scale(mode) -command ChangeScaleMode -value zmax $mb.limit add radiobutton -label [msgcat::mc {User}] \ -variable scale(mode) -command ChangeScaleMode -value user menu $mb.scope $mb.scope add radiobutton -label [msgcat::mc {Global}] \ -variable scale(scope) -command ChangeScaleScope -value global $mb.scope add radiobutton -label [msgcat::mc {Local}] \ -variable scale(scope) -command ChangeScaleScope -value local menu $mb.minmax $mb.minmax add radiobutton -label [msgcat::mc {Scan}] \ -variable minmax(mode) -value scan -command ChangeMinMax $mb.minmax add radiobutton -label [msgcat::mc {Sample}] \ -variable minmax(mode) -value sample -command ChangeMinMax $mb.minmax add radiobutton -label {DATAMIN DATAMAX} \ -variable minmax(mode) -value datamin -command ChangeMinMax $mb.minmax add radiobutton -label {IRAF-MIN IRAF-MAX} \ -variable minmax(mode) -value irafmin -command ChangeMinMax $mb.minmax add separator $mb.minmax add command -label "[msgcat::mc {Sample Parameters}]..." \ -command MinMaxDialog menu $mb.param $mb.param add checkbutton -label "[msgcat::mc {Use}] DATASEC" \ -variable scale(datasec) -command ChangeDATASEC $mb.param add separator $mb.param add command -label {ZScale...} -command ZScaleDialog menu $mb.graph $mb.graph add radiobutton -label [msgcat::mc {Linear}] \ -value linear -variable scale(yaxis) -command ScaleYAxisDialog $mb.graph add radiobutton -label [msgcat::mc {Log}] \ -value log -variable scale(yaxis) -command ScaleYAxisDialog $mb.graph add separator $mb.graph add radiobutton -label [msgcat::mc {Full Range}] \ -value full -variable scale(xaxis) -command ScaleXAxisDialog $mb.graph add radiobutton -label [msgcat::mc {Current Range}] \ -value current -variable scale(xaxis) -command ScaleXAxisDialog # Param set f [ttk::frame $w.param] # Graph set dscale(hist) [blt::graph $f.chart \ -width 500 \ -height 200 \ -title [msgcat::mc {Pixel Distribution}] \ -font [font actual TkDefaultFont] \ -plotrelief groove \ -plotborderwidth 2 \ ] $dscale(hist) legend configure -hide yes $dscale(hist) xaxis configure -hide yes -grid no -ticklength 3 \ -tickfont [font actual TkDefaultFont] $dscale(hist) yaxis configure -hide yes -grid yes -ticklength 3 \ -tickfont [font actual TkDefaultFont] set dscale(xdata) histX set dscale(ydata) histY blt::vector create $dscale(xdata) $dscale(ydata) $dscale(hist) element create bar1 -smooth step -areabackground black \ -xdata $dscale(xdata) -ydata $dscale(ydata) # Cut Lines $dscale(hist) marker bind min \ [list ScaleMotionDialog %x %y dscale(min)] $dscale(hist) marker bind max \ [list ScaleMotionDialog %x %y dscale(max)] $dscale(hist) marker bind up ScaleReleaseDialog set dscale(histmin) [$dscale(hist) marker create line -element bar1 \ -outline red -bindtags [list min up]] set dscale(histmax) [$dscale(hist) marker create line -element bar1 \ -outline green -bindtags [list max up]] # Cut Levels ttk::label $f.title -text [msgcat::mc {Limits}] ttk::label $f.ltitle -text [msgcat::mc {Low}] ttk::entry $f.lvalue -textvariable dscale(min) -width 13 ttk::label $f.htitle -text [msgcat::mc {High}] ttk::entry $f.hvalue -textvariable dscale(max) -width 13 pack $dscale(hist) -fill both -expand true pack $f.title $f.ltitle $f.lvalue $f.htitle $f.hvalue \ -side left -padx 2 -pady 2 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] -command ScaleApplyDialog ttk::button $f.close -text [msgcat::mc {Close}] -command ScaleDestroyDialog pack $f.apply $f.close -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true UpdateScaleDialog } proc ScaleApplyDialog {} { global scale global dscale global current global rgb if {$current(frame) != {} && $dscale(min) != {} && $dscale(max) != {}} { $dscale(hist) marker configure $dscale(histmin) \ -coords "$dscale(min) -Inf $dscale(min) Inf" $dscale(hist) marker configure $dscale(histmax) \ -coords "$dscale(max) -Inf $dscale(max) Inf" set scale(min) $dscale(min) set scale(max) $dscale(max) set scale(mode) user RGBEvalLockCurrent rgb(lock,scale) [list $current(frame) clip user $scale(min) $scale(max)] RGBEvalLockCurrent rgb(lock,scale) [list $current(frame) clip mode $scale(mode)] UpdateScale } } proc ScaleDestroyDialog {} { global scale global iscale global dscale if {[winfo exists $iscale(top)]} { destroy $iscale(top) destroy $iscale(mb) } blt::vector destroy $dscale(xdata) $dscale(ydata) unset dscale } proc ScaleMotionDialog {x y varname} { upvar $varname var global scale global dscale set var [lindex [$dscale(hist) invtransform $x $y] 0] if {$dscale(min) > $dscale(max)} { if {$varname == "dscale(min)"} { set var $dscale(max) } else { set var $dscale(min) } } $dscale(hist) marker configure $dscale(histmin) \ -coords "$dscale(min) -Inf $dscale(min) Inf" $dscale(hist) marker configure $dscale(histmax) \ -coords "$dscale(max) -Inf $dscale(max) Inf" } proc ScaleReleaseDialog {} { global scale global dscale global current global rgb if {$current(frame) != {} && $dscale(min) != {} && $dscale(max) != {}} { set scale(min) $dscale(min) set scale(max) $dscale(max) set scale(mode) user RGBEvalLockCurrent rgb(lock,scale) [list $current(frame) clip user $scale(min) $scale(max)] RGBEvalLockCurrent rgb(lock,scale) [list $current(frame) clip mode $scale(mode)] UpdateScale ScaleXAxisDialog } } proc UpdateScaleDialog {} { global scale global iscale global dscale global current global debug if {$debug(tcl,update)} { puts stderr "UpdateScaleDialog" } if {![winfo exists $iscale(top)]} { return } set dscale(min) {} set dscale(max) {} if {$current(frame) != {}} { set limits [$current(frame) get clip] set dscale(min) [lindex $limits 0] set dscale(max) [lindex $limits 1] # "nan" will not pass if {[$current(frame) has fits] && ![$current(frame) has iis] && ($dscale(min)<$dscale(max))} { set limits [$current(frame) get minmax] set dscale(minmin) [lindex $limits 0] set dscale(minmax) [lindex $limits 1] SetWatchCursor $current(frame) get histogram \ $dscale(xdata) $dscale(ydata) $scale(bins) ResetWatchCursor # we seem to need to do this so that the min/max values are known blt::vector expr min($dscale(ydata)) blt::vector expr max($dscale(ydata)) $dscale(hist) element configure bar1 -hide no $dscale(hist) xaxis configure -hide no $dscale(hist) yaxis configure -hide no -min 1 $dscale(hist) marker configure $dscale(histmin) \ -coords "$dscale(min) -Inf $dscale(min) Inf" $dscale(hist) marker configure $dscale(histmax) \ -coords "$dscale(max) -Inf $dscale(max) Inf" if {[$current(frame) has datamin]} { $iscale(mb).minmax \ entryconfig {DATAMIN DATAMAX} -state normal } else { $iscale(mb).minmax \ entryconfig {DATAMIN DATAMAX} -state disabled } if {[$current(frame) has irafmin]} { $iscale(mb).minmax \ entryconfig {IRAF-MIN IRAF-MAX} -state normal } else { $iscale(mb).minmax \ entryconfig {IRAF-MIN IRAF-MAX} -state disabled } ScaleYAxisDialog ScaleXAxisDialog return } } $dscale(hist) element configure bar1 -hide yes $dscale(hist) xaxis configure -hide yes $dscale(hist) yaxis configure -hide yes $iscale(mb) entryconfig [msgcat::mc {Scope}] -state normal $iscale(mb).minmax entryconfig {DATAMIN DATAMAX} -state normal $iscale(mb).minmax entryconfig {IRAF-MIN IRAF-MAX} -state normal } proc UpdateScaleDialogFont {} { global iscale global dscale if {![winfo exists $iscale(top)]} { return } $dscale(hist) configure -font [font actual TkDefaultFont] $dscale(hist) xaxis configure -tickfont [font actual TkDefaultFont] $dscale(hist) yaxis configure -tickfont [font actual TkDefaultFont] } proc ScaleYAxisDialog {} { global scale global dscale switch -- $scale(yaxis) { linear {$dscale(hist) yaxis configure -logscale 0 -min 0} log {$dscale(hist) yaxis configure -logscale 1 -min 1} } } proc ScaleXAxisDialog {} { global scale global dscale switch -- $scale(xaxis) { full { set width [expr abs(1.0*($dscale(minmax)-$dscale(minmin))/ \ [$dscale(xdata) length])] $dscale(hist) xaxis configure \ -min [expr $dscale(minmin)-$width] \ -max [expr $dscale(minmax)+$width] } current { set width [expr abs(1.0*($dscale(max)-$dscale(min))/ \ [$dscale(xdata) length])] if {[expr abs($dscale(max)-$dscale(min)) > 0]} { set diff [expr $dscale(max)-$dscale(min)] set per .10 set a [expr $dscale(min)-($diff*$per)] set b [expr $dscale(max)+($diff*$per)] $dscale(hist) xaxis configure -min $a -max $b } } } } proc ScaleLogDialog {} { global scale if {[EntryDialog [msgcat::mc {Scale}] [msgcat::mc {Log Exponent}] 10 scale(log)]} { ChangeScale } } proc MinMaxDialog {} { global minmax global ed set w {.sample} set ed(ok) 0 set ed(sample) $minmax(sample) DialogCreate $w [msgcat::mc {Sample Parameters}] ed(ok) # Param set f [ttk::frame $w.param] slider $f.ssample 0 100 [msgcat::mc {Sample Increment}] ed(sample) {} grid $f.ssample -padx 2 -pady 2 -sticky ew grid columnconfigure $f 0 -weight 1 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w if {$ed(ok)} { if {$ed(sample) == 0} { set ed(sample) 1 } set minmax(sample) $ed(sample) ChangeMinMax } unset ed } proc ZScaleDialog {} { global zscale global ed set w {.zscale} set ed(ok) 0 array set ed [array get zscale] DialogCreate $w "ZScale [msgcat::mc {Parameters}]" ed(ok) # Param set f [ttk::frame $w.param] slider $f.scontrast 0. 1. [msgcat::mc {Contrast}] ed(contrast) {} slider $f.ssize 0 1000 [msgcat::mc {Number of Samples}] ed(sample) {} slider $f.sline 0 500 [msgcat::mc {Samples per Line}] ed(line) {} grid $f.scontrast -padx 2 -pady 2 -sticky ew grid $f.ssize -padx 2 -pady 2 -sticky ew grid $f.sline -padx 2 -pady 2 -sticky ew grid columnconfigure $f 0 -weight 1 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active ttk::button $f.cancel -text [msgcat::mc {Cancel}] -command {set ed(ok) 0} pack $f.ok $f.cancel -side left -expand true -padx 2 -pady 4 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w if {$ed(ok)} { if {$ed(line) == 0} { set ed(line) 1 } array set zscale [array get ed] ChangeZScale } unset ed } proc MatchScaleCurrent {} { global current if {$current(frame) != {}} { MatchScale $current(frame) } } proc MatchScaleLimitsCurrent {} { global current if {$current(frame) != {}} { MatchScaleLimits $current(frame) } } proc MatchScale {which} { global ds9 global rgb global scale set type [$which get colorscale] set log [$which get colorscale log] set limits [$which get clip] set mode [$which get clip mode] set scope [$which get clip scope] set mmsample [$which get clip minmax sample] set mmmode [$which get clip minmax mode] set zscontrast [$which get clip zscale contrast] set zssample [$which get clip zscale sample] set zsline [$which get clip zscale line] foreach ff $ds9(frames) { if {$ff != $which} { RGBEvalLock rgb(lock,scale) $ff [list $ff colorscale $type] RGBEvalLock rgb(lock,scale) $ff [list $ff colorscale log $log] RGBEvalLock rgb(lock,scale) $ff [list $ff clip user $limits] RGBEvalLock rgb(lock,scale) $ff [list $ff clip mode $mode] RGBEvalLock rgb(lock,scale) $ff [list $ff clip scope $scope] RGBEvalLock rgb(lock,scale) $ff \ [list $ff clip minmax $mmsample $mmmode] RGBEvalLock rgb(lock,scale) $ff \ [list $ff clip zscale $zscontrast $zssample $zsline] } } } proc MatchScaleLimits {which} { global ds9 global rgb global scale set limits [$which get clip] set mode user set type [$which get colorscale] set log [$which get colorscale log] set scope [$which get clip scope] set mmmode [$which get clip minmax mode] set mmsample [$which get clip minmax sample] set zscontrast [$which get clip zscale contrast] set zssample [$which get clip zscale sample] set zsline [$which get clip zscale line] foreach ff $ds9(frames) { if {$ff != $which} { RGBEvalLock rgb(lock,scalelimits) $ff [list $ff colorscale $type] RGBEvalLock rgb(lock,scalelimits) $ff [list $ff colorscale log $log] RGBEvalLock rgb(lock,scalelimits) $ff [list $ff clip user $limits] RGBEvalLock rgb(lock,scalelimits) $ff [list $ff clip mode $mode] RGBEvalLock rgb(lock,scalelimits) $ff [list $ff clip scope $scope] RGBEvalLock rgb(lock,scalelimits) $ff \ [list $ff clip minmax $mmsample $mmmode] RGBEvalLock rgb(lock,scalelimits) $ff \ [list $ff clip zscale $zscontrast $zssample $zsline] } } } proc LockScaleCurrent {} { global current if {$current(frame) != {}} { LockScale $current(frame) } } proc LockScaleLimitsCurrent {} { global current if {$current(frame) != {}} { LockScaleLimits $current(frame) } } proc LockScale {which} { global scale if {$scale(lock)} { MatchScale $which } } proc LockScaleLimits {which} { global scale if {$scale(lock,limits)} { MatchScaleLimits $which } } proc ScaleBackup {ch which} { switch -- [$which get type] { base - 3d {ScaleBackupBase $ch $which} rgb {ScaleBackupRGB $ch $which} } } proc ScaleBackupBase {ch which} { puts $ch "$which colorscale [$which get colorscale]" puts $ch "$which colorscale log [$which get colorscale log]" puts $ch "$which datasec [$which get datasec]" puts $ch "$which clip user [$which get clip]" puts $ch "$which clip mode [$which get clip mode]" puts $ch "$which clip scope [$which get clip scope]" puts $ch "$which clip minmax mode [$which get clip minmax mode]" puts $ch "$which clip minmax sample [$which get clip minmax sample]" puts $ch "$which clip zscale contrast [$which get clip zscale contrast]" puts $ch "$which clip zscale sample [$which get clip zscale sample]" puts $ch "$which clip zscale line [$which get clip zscale line]" } proc ScaleBackupRGB {ch which} { set sav [$which get rgb channel] foreach cc {red green blue} { $which rgb channel $cc puts $ch "$which rgb channel $cc" ScaleBackupBase $ch $which } $which rgb channel $sav puts $ch "$which rgb channel $sav" } # Process Cmds proc ProcessScaleCmd {varname iname} { upvar $varname var upvar $iname i global scale switch -- [string tolower [lindex $var $i]] { match { incr i switch -- [string tolower [lindex $var $i]] { limits - scalelimits { MatchScaleLimitsCurrent } default { incr i -1 MatchScaleCurrent } } } lock { incr i switch -- [string tolower [lindex $var $i]] { limits - scalelimits { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set scale(lock,limits) [FromYesNo [lindex $var $i]] } else { set scale(lock,limits) 1 incr i -1 } LockScaleLimitsCurrent } default { if {!([string range [lindex $var $i] 0 0] == "-")} { set scale(lock) [FromYesNo [lindex $var $i]] } else { set scale(lock) 1 incr i -1 } LockScaleCurrent } } } open {ScaleDialog} close {ScaleDestroyDialog} linear - pow - sqrt - squared - asinh - sinh - histequ { set scale(type) [string tolower [lindex $var $i]] ChangeScale } log { incr i switch -- [string tolower [lindex $var $i]] { exp { incr i set scale(log) [string tolower [lindex $var $i]] ChangeScale } default { incr i -1 set scale(type) [string tolower [lindex $var $i]] ChangeScale } } } datasec { incr i set scale(datasec) [FromYesNo [lindex $var $i]] ChangeDATASEC } limits - scalelimits { incr i set scale(min) [lindex $var $i] incr i set scale(max) [lindex $var $i] ChangeScaleLimit } minmax - zscale - zmax - user { set scale(mode) [string tolower [lindex $var $i]] ChangeScaleMode } mode { incr i set scale(mode) [string tolower [lindex $var $i]] ChangeScaleMode } local - global { set scale(scope) [string tolower [lindex $var $i]] ChangeScaleScope } scope { incr i set scale(scope) [string tolower [lindex $var $i]] ChangeScaleScope } } } proc ProcessSendScaleCmd {proc id param} { global current global scale switch -- [string tolower $param] { lock {$proc $id [ToYesNo $scale(lock)]} {lock limits} {$proc $id [ToYesNo $scale(lock,limits)]} datasec {$proc $id "$scale(datasec)\n"} limits { if {$current(frame) != {}} { set lims [$current(frame) get clip] $proc $id "[lindex $lims 0] [lindex $lims 1]\n" } } mode {$proc $id "$scale(mode)\n"} scope {$proc $id "$scale(scope)\n"} log - {log exp} {$proc $id "$scale(log)\n"} default {$proc $id "$scale(type)\n"} } } proc ProcessMinMaxCmd {varname iname} { upvar $varname var upvar $iname i global minmax global scale switch -- [string tolower [lindex $var $i]] { auto { # backward compatibility set minmax(mode) scan ChangeMinMax } scan - sample - datamin - irafmin { set minmax(mode) [string tolower [lindex $var $i]] ChangeMinMax } mode { incr i set minmax(mode) [string tolower [lindex $var $i]] ChangeMinMax } interval { incr i set minmax(sample) [lindex $var $i] ChangeMinMax } default { # for backward compatibility set scale(mode) minmax ChangeScaleMode incr i -1 } } } proc ProcessSendMinMaxCmd {proc id param} { global minmax switch -- [string tolower $param] { mode {$proc $id "$minmax(mode)\n"} interval {$proc $id "$minmax(sample)\n"} default { # for backward compatibility $proc $id "$minmax(mode)\n" } } } proc ProcessZScaleCmd {varname iname} { upvar $varname var upvar $iname i global zscale global scale switch -- [string tolower [lindex $var $i]] { contrast { incr i set zscale(contrast) [lindex $var $i] ChangeZScale } sample { incr i set zscale(sample) [lindex $var $i] ChangeZScale } line { incr i set zscale(line) [lindex $var $i] ChangeZScale } default { # for backward compatibility set scale(mode) zscale ChangeScaleMode incr i -1 } } } proc ProcessSendZScaleCmd {proc id param} { global zscale switch -- [string tolower $param] { contrast {$proc $id "$zscale(contrast)\n"} sample {$proc $id "$zscale(sample)\n"} line {$proc $id "$zscale(line)\n"} } } saods9/ds9/library/segment.tcl000644 000765 000000 00000003160 12705445650 016705 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc SegmentDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # procs set var(proc,apply) SegmentApply set var(proc,close) SegmentClose set var(proc,coordCB) SegmentCoordCB # base MarkerBaseCenterDialog $varname # init MarkerBaseCenterRotateCB $varname # callbacks $var(frame) marker $var(id) callback rotate MarkerBaseCenterRotateCB $varname set f $var(top).param # Angle ttk::label $f.tangle -text [msgcat::mc {Angle}] ttk::entry $f.angle -textvariable ${varname}(angle) -width 13 ttk::label $f.uangle -text [msgcat::mc {Degrees}] grid $f.tangle $f.angle $f.uangle -padx 2 -pady 2 -sticky w } # actions proc SegmentClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback rotate MarkerBaseCenterRotateCB MarkerBaseCenterClose $varname } proc SegmentApply {varname} { upvar #0 $varname var global $varname MarkerBaseCenterRotate $varname MarkerBaseCenterApply $varname } # callbacks proc SegmentCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "SegmentCoordCB" } MarkerBaseCoordCB $varname MarkerBaseCenterMoveCB $varname MarkerBaseCenterRotateCB $varname } saods9/ds9/library/sfits.tcl000644 000765 000000 00000002220 12705445650 016367 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadSFitsFile {hdr fn layer mode} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) $mode set loadParam(load,type) smmap set loadParam(file,name) $fn set loadParam(file,header) $hdr set loadParam(load,layer) $layer ProcessLoad } proc ProcessSFitsCmd {varname iname sock fn} { upvar $varname var upvar $iname i global loadParam global current set layer {} set mode {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i set layer mask } slice { incr i set mode slice } } StartLoad if {$sock != {}} { # xpa if {0} { # not supported } else { LoadSFitsFile [lindex $var $i] [lindex $var [expr $i+1]] \ $layer $mode } } else { # comm if {0} { # not supported } else { LoadSFitsFile [lindex $var $i] [lindex $var [expr $i+1]] \ $layer $mode } } FinishLoad } saods9/ds9/library/shm.tcl000644 000765 000000 00000014543 12705445650 016041 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ProcessShmCmd {varname iname ml} { upvar $varname var upvar $iname i global loadParam global current global ds9 StartLoad set done 0 while {!$done} { # defaults set loadParam(load,type) shared set loadParam(file,type) fits set loadParam(file,mode) {} # mask not supported set loadParam(load,layer) {} set nn [lindex $var [expr $i+4]] if {$nn == {} || [string range $nn 0 0] == "-"} { set def 1 } else { set def 0 } switch -- [lindex $var $i] { key - shmid { if {$ml} { MultiLoad } set loadParam(shared,idtype) [lindex $var $i] set loadParam(shared,id) [lindex $var [expr $i+1]] set loadParam(file,name) [lindex $var [expr $i+2]] incr i 2 } fits { if {$ml} { MultiLoad } set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,id) [lindex $var [expr $i+2]] set loadParam(file,name) [lindex $var [expr $i+3]] incr i 3 } sfits { if {$ml} { MultiLoad } set loadParam(load,type) sshared set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,hdr) [lindex $var [expr $i+2]] set loadParam(shared,id) [lindex $var [expr $i+3]] set loadParam(file,name) [lindex $var [expr $i+4]] incr i 4 } mosaicimage { if {$ml} { MultiLoad } if {$def} { set loadParam(file,mode) {mosaic image iraf} set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,id) [lindex $var [expr $i+2]] set loadParam(file,name) [lindex $var [expr $i+3]] incr i 3 } else { set loadParam(file,mode) \ [list mosaic image [lindex $var [expr $i+1]]] set loadParam(shared,idtype) [lindex $var [expr $i+2]] set loadParam(shared,id) [lindex $var [expr $i+3]] set loadParam(file,name) [lindex $var [expr $i+4]] incr i 4 } } mosaic { if {$def} { set loadParam(file,mode) {mosaic iraf} set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,id) [lindex $var [expr $i+2]] set loadParam(file,name) [lindex $var [expr $i+3]] incr i 3 } else { set loadParam(file,mode) \ [list mosaic [lindex $var [expr $i+1]]] set loadParam(shared,idtype) [lindex $var [expr $i+2]] set loadParam(shared,id) [lindex $var [expr $i+3]] set loadParam(file,name) [lindex $var [expr $i+4]] incr i 4 } } smosaic { set loadParam(load,type) sshared set loadParam(file,mode) \ [list mosaic [lindex $var [expr $i+1]]] set loadParam(shared,idtype) [lindex $var [expr $i+2]] set loadParam(shared,hdr) [lindex $var [expr $i+3]] set loadParam(shared,id) [lindex $var [expr $i+4]] set loadParam(file,name) [lindex $var [expr $i+5]] incr i 5 } mosaicimageiraf { # backward compatibility if {$ml} { MultiLoad } set loadParam(file,mode) {mosaic image iraf} set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,id) [lindex $var [expr $i+2]] set loadParam(file,name) [lindex $var [expr $i+3]] incr i 3 } mosaiciraf { # backward compatibility set loadParam(file,mode) {mosaic iraf} set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,id) [lindex $var [expr $i+2]] set loadParam(file,name) [lindex $var [expr $i+3]] incr i 3 } mosaicimagewcs { # backward compatibility if {$ml} { MultiLoad } set loadParam(file,mode) {mosaic image wcs} set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,id) [lindex $var [expr $i+2]] set loadParam(file,name) [lindex $var [expr $i+3]] incr i 3 } mosaicwcs { # backward compatibility set loadParam(file,mode) {mosaic wcs} set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,id) [lindex $var [expr $i+2]] set loadParam(file,name) [lindex $var [expr $i+3]] incr i 3 } mosaicimagewfpc2 { # backward compatibility if {$ml} { MultiLoad } set loadParam(file,mode) {mosaic image wfpc2} set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,id) [lindex $var [expr $i+2]] set loadParam(file,name) [lindex $var [expr $i+3]] incr i 3 } rgbcube { if {$ml} { CreateRGBFrame } set loadParam(file,mode) {rgb cube} set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,id) [lindex $var [expr $i+2]] set loadParam(file,name) [lindex $var [expr $i+3]] incr i 3 } srgbcube { if {$ml} { CreateRGBFrame } set loadParam(load,type) sshared set loadParam(file,mode) {rgb cube} set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,hdr) [lindex $var [expr $i+2]] set loadParam(shared,id) [lindex $var [expr $i+3]] set loadParam(file,name) [lindex $var [expr $i+4]] incr i 4 } rgbimage { if {$ml} { CreateRGBFrame } set loadParam(file,mode) {rgb image} set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,id) [lindex $var [expr $i+2]] set loadParam(file,name) [lindex $var [expr $i+3]] incr i 3 } rgbarray { if {$ml} { CreateRGBFrame } set loadParam(file,type) array set loadParam(file,mode) {rgb cube} set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,id) [lindex $var [expr $i+2]] set loadParam(file,name) [lindex $var [expr $i+3]] incr i 3 } array { if {$ml} { MultiLoad } set loadParam(file,type) array set loadParam(shared,idtype) [lindex $var [expr $i+1]] set loadParam(shared,id) [lindex $var [expr $i+2]] set loadParam(file,name) [lindex $var [expr $i+3]] incr i 3 } default { if {$ml} { MultiLoad } set loadParam(shared,idtype) key set loadParam(shared,id) [lindex $var $i] set loadParam(file,name) [lindex $var [expr $i+1]] incr i 1 } } ProcessLoad # more to come? incr i if {([lindex $var $i] == "-shm") || ([lindex $var $i] == "shm")} { set done 0 incr i } else { set done 1 incr i -1 } } FinishLoad } proc ProcessSendShmCmd {proc id param} { global current if {$current(frame) != {}} { $proc $id "[$current(frame) get fits file name full]\n" } } saods9/ds9/library/sia.tcl000644 000765 000000 00000022677 12742204565 016034 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc SIADef {} { global sia global isia global psia global wcs set isia(sias) {} set isia(rformat) arcmin set isia(width) 15 set isia(height) 15 set isia(minrows) 20 set isia(mincols) 10 set isia(mode) new set isia(save) 0 set isia(def) { \ {{2MASS (NASA/IPAC)} \ sia2mass \ {http://irsa.ipac.caltech.edu/cgi-bin/2MASS/IM/nph-im_sia}\ {} \ post \ } \ {{AKARI (ISAS/JAXA)} \ siaakari \ {http://jvo.nao.ac.jp/skynode/do/siap/akari/fis_image_v1/1.0}\ {} \ post \ } \ {{Astro-Wise} \ siaastrowise \ {http://vo.astro-wise.org/SIAP}\ {VERB=2&FORM=VOTable&PROJECT=ALL&INSTRUMENT=ALL&} \ post \ } \ {{CADC} \ siacadc \ {http://www1.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/sia/query}\ {} \ post \ } \ {{Chandra (NASA/CXC)} \ siacxc \ {http://cda.harvard.edu/cxcsiap/queryImages}\ {} \ post \ } \ {{MAST (STSCI)} siamast \ {http://archive.stsci.edu/siap/search.php}\ {} \ post \ } \ {{SDSS DR12} \ siasdss \ {http://skyserver.sdss.org/SkyserverWS/dr12/SIAP/getSIAP}\ {} \ get \ } \ {{SkyView (NASA/HEASARC)} \ siaskyview \ {http://skyview.gsfc.nasa.gov/cgi-bin/vo/sia.pl}\ {} \ post \ } \ {{TGSSADR (GMRT)} \ siatgssadr \ {http://vo.astron.nl/tgssadr/q_fits/imgs/siap.xml}\ {} \ post \ } \ } # {{NASA/CXC Chandra} \ # siacxc \ # {http://cda.harvard.edu/cxcsiap/queryImages}\ # {} \ # post \ # } \ # {{MPE/MPG ROSAT} siarosat \ # {http://gavo.mpe.mpg.de/rosat/SIAP} \ # {action=queryImage&siap=siap.service.rosat&} \ # get \ # } \ } proc SIAAnalysisMenu {mb} { global isia global ds9 foreach ff $isia(def) { set title [lindex $ff 0] set vars [lindex $ff 1] set url [lindex $ff 2] set opts [lindex $ff 3] set method [lindex $ff 4] $mb add command -label $title \ -command [list SIADialog $vars $title $url $opts $method apply] } } proc SIAGetURL {varname url2} { upvar #0 $varname var global $varname global debug if {$debug(tcl,sia)} { puts stderr "SIAGetURL $varname $var(method) $url2?$var(query2)" } ARStatus $varname [msgcat::mc {Loading}] # geturl --method does not work switch $var(method) { get { set url $url2?$var(query2) set query {} } default { set url $url2 set query $var(query2) } } global ihttp if {$var(sync)} { if {![catch {set var(token) [http::geturl $url \ -query $query \ -timeout $ihttp(timeout) \ -headers "[ProxyHTTP]"] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 SIAGetURLFinish $varname $var(token) } else { SIAError $varname "[msgcat::mc {Unable to locate URL}] $url2" } } else { if {![catch {set var(token) [http::geturl $url \ -query $query \ -timeout $ihttp(timeout) \ -command \ [list SIAGetURLFinish $varname] \ -headers "[ProxyHTTP]"] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 } else { SIAError $varname "[msgcat::mc {Unable to locate URL}] $url2" } } } proc SIAGetURLFinish {varname token} { upvar #0 $varname var global $varname global debug if {$debug(tcl,sia)} { puts stderr "SIAGetURLFinish $varname" } if {!($var(active))} { SIACancelled $varname return } upvar #0 $token t # Code set code [http::ncode $token] # Meta set meta $t(meta) # Log it HTTPLog $token # Result? switch -- $code { {} - 200 - 203 - 404 - 503 { VOTParse $var(tbldb) $token SIADone $varname SIALoadDone $varname } 201 - 300 - 301 - 302 - 303 - 305 - 307 { foreach {name value} $meta { if {[regexp -nocase ^location$ $name]} { global debug if {$debug(tcl,sia)} { puts stderr "SIAGetURLFinish redirect $code to $value" } # clean up and resubmit http::cleanup $token unset var(token) SIAGetURL $varname $value } } } default { SIAError $varname "[msgcat::mc {Error code was returned}] $code" } } } proc SIALoad {varname} { upvar #0 $varname var global $varname # clear previous db global $var(tbldb) if {[info exists $var(tbldb)]} { unset $var(tbldb) } global debug if {$debug(tcl,sia)} { puts stderr "SIALoad $varname $var(url2)?$var(query2)" } SIAGetURL $varname $var(url2) return } proc SIALoadDone {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,sia)} { puts stderr "SIALoadDone $varname" } SIATable $varname SIADialogUpdate $varname } proc SIAOff {varname} { upvar #0 $varname var global $varname global $var(tbldb) if {[info exists $var(tbldb)]} { unset $var(tbldb) } set db $var(tbldb) set ${db}(Nrows) {} $var(tbl) selection clear all SIADialogUpdate $varname } proc SIATable {varname} { upvar #0 $varname var global $varname global $var(tbldb) global isia global debug if {$debug(tcl,sia)} { puts stderr "SIATable $varname" } if {![CATValidDB $var(tbldb)]} { return } # clear the selection $var(tbl) selection clear all global $var(tbldb) $var(found) configure -textvariable ${var(tbldb)}(Nrows) # starbase_writefp $var(tbldb) stdout if {[starbase_nrows $var(tbldb)] == 0} { ARStatus $varname [msgcat::mc {No Items Found}] return } set nc [starbase_ncols $var(tbldb)] if { $nc > $isia(mincols)} { $var(tbl) configure -cols $nc } else { $var(tbl) configure -cols $isia(mincols) } # add header set nr [expr [starbase_nrows $var(tbldb)]+1] if {$nr > $isia(minrows)} { $var(tbl) configure -rows $nr } else { $var(tbl) configure -rows $isia(minrows) } } # Process Cmds proc ProcessSIACmd {varname iname} { upvar $varname var upvar $iname i global isia # we need to be realized ProcessRealizeDS9 set item [string tolower [lindex $var $i]] switch -- $item { cancel - clear - close - coordinate - crosshair - export - name - print - retreive - retrieve - save - size - sky - skyformat - system - update {ProcessSIA $varname $iname [lindex $isia(sias) end]} default { # existing sia or load new one? set ref $item incr i set item [string tolower [lindex $var $i]] switch -- $item { cancel - clear - close - coordinate - crosshair - export - name - print - retreive - retrieve - save - size - sky - skyformat - system - update {ProcessSIA $varname $iname sia${ref}} default { # ok, new sia incr i -1 set item [string tolower [lindex $var $i]] # see if its from our list of sias foreach mm $isia(def) { set title [lindex $mm 0] set vars [lindex $mm 1] set url [lindex $mm 2] set opts [lindex $mm 3] set method [lindex $mm 4] if {$title != {-} && "sia${item}" == $vars} { SIADialog $vars $title $url $opts $method sync return } } } } } } } proc ProcessSIA {varname iname cvarname} { upvar 2 $varname var upvar 2 $iname i global isia global psia global current # we should have a sia now global $cvarname upvar #0 $cvarname cvar if {![info exists cvar(top)]} { Error "[msgcat::mc {Unable to find SIAP window}] $cvarname" return } if {![winfo exists $cvar(top)]} { Error "[msgcat:: mc {Unable to find SIAP window}] $cvarname" return } # now, process it set item [string tolower [lindex $var $i]] switch -- $item { cancel {ARCancel $cvarname} clear {SIAOff $cvarname} close {SIADestroy $cvarname} coordinate { incr i set cvar(x) [lindex $var $i] incr i set cvar(y) [lindex $var $i] incr i set cvar(sky) [lindex $var $i] } crosshair {IMGSVRCrosshair $cvarname} export - save { incr i set writer VOTWrite switch -- [lindex $var $i] { xml - vot {incr i; set writer VOTWrite} sb - starbase {incr i; set writer starbase_write} csv - tsv {incr i; set writer TSVWrite} } set fn [lindex $var $i] CATSaveFn $cvarname $fn $writer FileLast catfbox $fn } name { incr i set cvar(name) [lindex $var $i] } print {CATPrint $cvarname} retrieve - retreive {SIAApply $cvarname 1} size { incr i set cvar(width) [lindex $var $i] incr i set cvar(height) [lindex $var $i] incr i set cvar(rformat) [lindex $var $i] set cvar(rformat,msg) $cvar(rformat) } sky { incr i set cvar(sky) [lindex $var $i] CoordMenuButtonCmd $cvarname system sky \ [list SIAWCSMenuUpdate $cvarname] } skyformat { incr i set cvar(skyformat) [lindex $var $i] } system { incr i set cvar(system) [lindex $var $i] CoordMenuButtonCmd $cvarname system sky \ [list SIAWCSMenuUpdate $cvarname] } update {IMGSVRUpdate $cvarname} } } proc ProcessSendSIACmd {proc id param sock fn} { global isia $proc $id "$isia(sias)\n" } saods9/ds9/library/siadialog.tcl000644 000765 000000 00000030370 12741224015 017170 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # used by backup proc SIADialog {varname title url opts method action} { global sia global isia global psia global ds9 global wcs upvar #0 $varname var global $varname global debug if {$debug(tcl,sia)} { puts stderr "SIADialog $varname:$title:$url:$opts:$action:$method" } # main dialog set var(top) ".${varname}" set var(mb) ".${varname}mb" if {[winfo exists $var(top)]} { raise $var(top) return } global current if {$current(frame) == {}} { return } # AR variables ARInit $varname IMGSVRServer # IMG variables set var(proc,done) SIADone set var(proc,exec) SIAVOT1 set var(proc,error) SIAError # SIA variables lappend isia(sias) $varname set var(tbldb) ${varname}db set var(system) $wcs(system) set var(sky) $wcs(sky) set var(skyformat) $wcs(skyformat) set var(rformat) $isia(rformat) set var(width) $isia(width) set var(height) $isia(height) set var(save) $isia(save) set var(mode) $isia(mode) set var(url2) $url set var(title) $title set var(opts) $opts set var(method) $method # create the window set w $var(top) set mb $var(mb) set tt $title Toplevel $w $mb 7 $tt "SIADestroy $varname" $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit NSVRServerMenu $varname $mb add cascade -label [msgcat::mc {Preferences}] -menu $mb.prefs # file menu $mb.file $mb.file add command -label "[msgcat::mc {Save}]..." \ -command [list CATSaveVOTFile $varname] $mb.file add separator $mb.file add cascade -label [msgcat::mc {Export}] -menu $mb.file.export $mb.file add separator $mb.file add command -label [msgcat::mc {Retrieve}] \ -command [list SIAApply $varname 0] $mb.file add command -label [msgcat::mc {Cancel}] \ -command [list ARCancel $varname] $mb.file add separator $mb.file add command -label [msgcat::mc {Load}] \ -command [list SIAImageCmd $varname] $mb.file add command -label [msgcat::mc {Clear}] \ -command [list SIAOff $varname] $mb.file add separator $mb.file add command -label [msgcat::mc {Update from Current Frame}] \ -command [list IMGSVRUpdate $varname] $mb.file add command \ -label [msgcat::mc {Update from Current Crosshair}] \ -command [list IMGSVRCrosshair $varname] $mb.file add separator $mb.file add command -label "[msgcat::mc {Print}]..." \ -command [list CATPrint $varname] $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command [list SIADestroy $varname] # Export menu $mb.file.export $mb.file.export add command -label "[msgcat::mc {Starbase}]..." \ -command [list CATSaveSBFile $varname] $mb.file.export add command -label "[msgcat::mc {Tab-Separated-Value}]..." \ -command [list CATSaveTSVFile $varname] # edit menu $mb.edit $mb.edit add command -label [msgcat::mc {Cut}] \ -command "CATCut $varname" -accelerator "${ds9(ctrl)}X" $mb.edit add command -label [msgcat::mc {Copy}] \ -command "CATCopy $varname" -accelerator "${ds9(ctrl)}C" $mb.edit add command -label [msgcat::mc {Paste}] \ -command "EntryPaste $var(top)" -accelerator "${ds9(ctrl)}V" $mb.edit add separator $mb.edit add command -label [msgcat::mc {Clear}] \ -command [list ARClear $varname] # prefs menu $mb.prefs $mb.prefs add checkbutton -label [msgcat::mc {Save Image on Download}] \ -variable ${varname}(save) $mb.prefs add separator $mb.prefs add radiobutton -label [msgcat::mc {New Frame}] \ -variable ${varname}(mode) -value new $mb.prefs add radiobutton -label [msgcat::mc {Current Frame}] \ -variable ${varname}(mode) -value current # Object set f [ttk::labelframe $w.obj -text [msgcat::mc {Object}] -padding 2] ttk::label $f.nametitle -text [msgcat::mc {Name}] ttk::entry $f.name -textvariable ${varname}(name) -width 60 set var(xname) [ttk::label $f.xtitle -text {} -width 1] ttk::entry $f.x -textvariable ${varname}(x) -width 14 set var(yname) [ttk::label $f.ytitle -text {} -width 1] ttk::entry $f.y -textvariable ${varname}(y) -width 14 CoordMenuButton $f.coord $varname system 0 sky skyformat \ [list SIAWCSMenuUpdate $varname] CoordMenuEnable $f.coord.menu $varname system 0 sky skyformat ttk::label $f.wtitle -text [msgcat::mc {Width}] ttk::entry $f.w -textvariable ${varname}(width) -width 14 ttk::label $f.htitle -text [msgcat::mc {Height}] ttk::entry $f.h -textvariable ${varname}(height) -width 14 ARRFormat $f.rformat $varname grid $f.nametitle $f.name - - - - -padx 2 -pady 2 -sticky w grid $f.xtitle $f.x $f.ytitle $f.y $f.coord -padx 2 -pady 2 -sticky w grid $f.wtitle $f.w $f.htitle $f.h $f.rformat -padx 2 -pady 2 -sticky w # Param set f [ttk::labelframe $w.param -text [msgcat::mc {Table}] -padding 2] ttk::label $f.ftitle -text [msgcat::mc {Found}] set var(found) [ttk::label $f.found \ -width 14 -relief groove -anchor w] grid $f.ftitle $f.found -padx 2 -pady 2 -sticky w # Table set f [ttk::frame $w.tbl] set var(tbl) [table $f.t \ -state disabled \ -usecommand 0 \ -variable $var(tbldb) \ -colorigin 1 \ -roworigin 0 \ -cols $isia(mincols) \ -rows $isia(minrows) \ -width -1 \ -height -1 \ -maxwidth 300 \ -maxheight 300 \ -titlerows 1 \ -xscrollcommand [list $f.xscroll set]\ -yscrollcommand [list $f.yscroll set]\ -selecttype row \ -selectmode single \ -anchor w \ -font [font actual TkDefaultFont] \ -browsecommand [list SIASelectCmd $varname %s %S] \ ] ttk::scrollbar $f.yscroll -command [list $var(tbl) yview] -orient vertical ttk::scrollbar $f.xscroll -command [list $var(tbl) xview] -orient horizontal grid $var(tbl) $f.yscroll -sticky news grid $f.xscroll -stick news grid rowconfigure $f 0 -weight 1 grid columnconfigure $f 0 -weight 1 # Status set f [ttk::frame $w.status] ttk::label $f.title -text [msgcat::mc {Status}] ttk::label $f.item -textvariable ${varname}(status) grid $f.title $f.item -padx 2 -pady 2 -sticky w # Buttons set f [ttk::frame $w.buttons] set var(apply) [ttk::button $f.apply \ -text [msgcat::mc {Retrieve}] \ -command [list SIAApply $varname 0]] set var(cancel) [ttk::button $f.cancel -text \ [msgcat::mc {Cancel}] \ -command [list ARCancel $varname] \ -state disabled] set var(load) [ttk::button $f.load \ -text [msgcat::mc {Load}] \ -command [list SIAImageCmd $varname]] ttk::button $f.clear -text [msgcat::mc {Clear}] \ -command [list SIAOff $varname] ttk::button $f.close -text [msgcat::mc {Close}] \ -command [list SIADestroy $varname] pack $f.apply $f.cancel $f.load $f.clear $f.close \ -side left -expand true -padx 2 -pady 4 # Fini ttk::separator $w.stbl -orient horizontal ttk::separator $w.sstatus -orient horizontal pack $w.buttons $w.sstatus $w.status $w.stbl -side bottom -fill x pack $w.obj $w.param -side top -fill x pack $w.tbl -side top -fill both -expand true ARCoord $varname IMGSVRUpdate $varname SIADialogUpdate $varname ARStatus $varname {} switch -- $action { apply {SIAApply $varname 0} sync {SIAApply $varname 1} none {} } # return the actual varname return $varname } proc SIAApply {varname sync} { upvar #0 $varname var global $varname global debug if {$debug(tcl,sia)} { puts stderr "SIAApply $varname $sync" } set var(sync) $sync ARApply $varname $var(mb).file entryconfig [msgcat::mc {Load}] -state disabled $var(load) configure -state disabled if {$var(name) != {}} { set var(sky) fk5 CoordMenuButtonCmd $varname system sky {} SIAWCSMenuUpdate $varname NSVRServer $varname } else { IMGSVRServer $varname } } proc SIADestroy {varname} { upvar #0 $varname var global $varname global $var(tbldb) global isia global debug if {$debug(tcl,sia)} { puts stderr "SIADestroy $varname" } if {[info exists $var(tbldb)]} { unset $var(tbldb) } set ii [lsearch $isia(sias) $varname] if {$ii>=0} { set isia(sias) [lreplace $isia(sias) $ii $ii] } ARDestroy $varname } proc SIAApplyLoad {varname} { upvar #0 $varname var global $varname ARApply $varname $var(mb).file entryconfig [msgcat::mc {Load}] -state disabled $var(load) configure -state disabled } proc SIADone {varname} { upvar #0 $varname var global $varname ARDone $varname $var(mb).file entryconfig [msgcat::mc {Load}] -state normal $var(load) configure -state normal } proc SIACancelled {varname} { upvar #0 $varname var global $varname ARCancelled $varname $var(mb).file entryconfig [msgcat::mc {Load}] -state normal $var(load) configure -state normal } proc SIAError {varname message} { upvar #0 $varname var global $varname ARError $varname $message $var(mb).file entryconfig [msgcat::mc {Load}] -state normal $var(load) configure -state normal } proc SIADialogUpdate {varname} { upvar #0 $varname var global $varname global ds9 global samp global debug if {$debug(tcl,sia)} { puts stderr "SIADialogUpdate $varname" } # do we have a db? if {[CATValidDB $var(tbldb)]} { $var(mb).file entryconfig [msgcat::mc {Clear}] -state normal $var(mb).file entryconfig "[msgcat::mc {Print}]..." -state normal $var(top).buttons.clear configure -state normal } else { $var(mb).file entryconfig [msgcat::mc {Clear}] -state disabled $var(mb).file entryconfig "[msgcat::mc {Print}]..." -state disabled $var(top).buttons.clear configure -state disabled } } proc SIAImageCmd {varname} { upvar #0 $varname var global $varname global ds9 global debug if {$debug(tcl,sia)} { puts stderr "SIAImage $varname" } global $var(tbldb) if {![CATValidDB $var(tbldb)]} { return } set rowlist {} foreach sel [$var(tbl) curselection] { set rr [lindex [split $sel ,] 0] lappend rowlist $rr } set rowlist [lsort -unique $rowlist] set col [expr [lsearch [subst $${varname}db(Ucd)] {VOX:Image_AccessReference}] +1] if {$col == 0} { ARError $varname [msgcat::mc {Unable to find URL column}] return } if {$rowlist != {}} { set url [starbase_get $var(tbldb) $rowlist $col] SIAApplyLoad $varname ParseURL $url r switch -- $r(scheme) { http { if {$var(save)} { set var(fn) [SaveFileDialog savefitsfbox] if {$var(fn) == {}} { SIADone $varname return } } else { set var(fn) [tmpnam [file extension $r(path)]] } set var(query) {} IMGSVRGetURL $varname $url } default { SIAError $varname "$r(scheme) [msgcat::mc {Not Supported}]" return } } } } proc SIASelectCmd {varname ss rc} { upvar #0 $varname var global $varname # starts at 1 global debug if {$debug(tcl,sia)} { puts stderr "SIASelectCmd $varname ss=$ss rc=$rc" } } proc SIAVOT1 {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,sia)} { puts stderr "SIAVOT1 $varname" } # coord (degrees) switch $var(skyformat) { degrees { set xx $var(x) set yy $var(y) } sexagesimal { set xx [h2d [Sex2H $var(x)]] set yy [Sex2D $var(y)] } } # size (degrees) switch $var(rformat) { degrees { set ww $var(width) set hh $var(height) } arcmin { set ww [expr $var(width)/60.] set hh [expr $var(height)/60.] } arcsec { set ww [expr $var(width)/60./60.] set hh [expr $var(height)/60./60.] } } # now to radius set rr [expr sqrt($ww*$ww+$hh*$hh)/2.] # query set var(query2) "$var(opts)[http::formatQuery POS "$xx,$yy" SIZE $rr FORMAT image/fits]" SIALoad $varname } proc SIAWCSMenuUpdate {varname} { upvar #0 $varname var global $varname ARCoord $varname set var(psystem) $var(system) set var(psky) $var(sky) CoordMenuButtonCmd $varname psystem psky {} } saods9/ds9/library/skyview.tcl000644 000765 000000 00000054767 12741510014 016752 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc SkyViewDef {} { global skyview global iskyview set iskyview(top) .skyview set iskyview(mb) .skyviewmb set skyview(sky) fk5 set skyview(rformat) arcsec set skyview(width) 300 set skyview(height) 300 set skyview(width,pixels) 300 set skyview(height,pixels) 300 set skyview(mode) new set skyview(save) 0 set skyview(survey) dss } proc SkyViewDialog {} { global skyview global iskyview global wcs if {[winfo exists $iskyview(top)]} { raise $iskyview(top) return } global debug if {$debug(tcl,image)} { puts stderr "SkyViewDialog" } set varname dskyview upvar #0 $varname var global $varname set var(top) $iskyview(top) set var(mb) $iskyview(mb) set var(sky) $skyview(sky) set var(skyformat) $wcs(skyformat) set var(rformat) $skyview(rformat) set var(width) $skyview(width) set var(height) $skyview(height) set var(width,pixels) $skyview(width,pixels) set var(height,pixels) $skyview(height,pixels) set var(mode) $skyview(mode) set var(save) $skyview(save) set var(survey) $skyview(survey) set w $var(top) IMGSVRInit $varname "HEASARC-SkyView [msgcat::mc {Server}]" \ SkyViewExec SkyViewAck ARDone ARError # pixels size set f $w.param ttk::label $f.pimage -text [msgcat::mc {Image}] ttk::entry $f.pw -textvariable ${varname}(width,pixels) -width 14 ttk::entry $f.ph -textvariable ${varname}(height,pixels) -width 14 ttk::label $f.ptitle -text [msgcat::mc {Pixels}] grid $f.pimage x $f.pw x $f.ph $f.ptitle -padx 2 -pady 2 -sticky w menu $var(mb).survey $var(mb) add cascade -label Survey -menu $var(mb).survey $var(mb).survey add cascade -label {Gamma Ray} \ -menu $var(mb).survey.gamma $var(mb).survey add cascade -label {Hard X-ray} \ -menu $var(mb).survey.hard $var(mb).survey add cascade -label {X-ray: Swift BAT} \ -menu $var(mb).survey.bat $var(mb).survey add cascade -label {Soft X-ray} \ -menu $var(mb).survey.soft $var(mb).survey add cascade -label {Diffuse X-ray} \ -menu $var(mb).survey.diffuse $var(mb).survey add cascade -label {UV} \ -menu $var(mb).survey.uv $var(mb).survey add cascade -label {Optical: DSS} \ -menu $var(mb).survey.dss $var(mb).survey add cascade -label {Optical: SDSS} \ -menu $var(mb).survey.sdss $var(mb).survey add cascade -label {Other Optical} \ -menu $var(mb).survey.other $var(mb).survey add cascade -label {IR: IRAS} \ -menu $var(mb).survey.iras $var(mb).survey add cascade -label {IR: 2MASS} \ -menu $var(mb).survey.ir2mass $var(mb).survey add cascade -label {IR: UKIDSS} \ -menu $var(mb).survey.irukidss $var(mb).survey add cascade -label {IR: WISE} \ -menu $var(mb).survey.irwise $var(mb).survey add cascade -label {IR: AKARI} \ -menu $var(mb).survey.irakari $var(mb).survey add cascade -label {IR: Planck} \ -menu $var(mb).survey.planck $var(mb).survey add cascade -label {IR: WMAP/COBE} \ -menu $var(mb).survey.wmap $var(mb).survey add cascade -label {Radio: Ghz} \ -menu $var(mb).survey.radioghz $var(mb).survey add cascade -label {Radio: Mhz} \ -menu $var(mb).survey.radiomhz $var(mb).survey add cascade -label {All: GOODS/HDF/CDF} \ -menu $var(mb).survey.goods set f $var(mb).survey.gamma menu $f $f add radiobutton -label {Fermi 5} \ -variable ${varname}(survey) -value {Fermi 5} $f add radiobutton -label {Fermi 4} \ -variable ${varname}(survey) -value {Fermi 4} $f add radiobutton -label {Fermi 3} \ -variable ${varname}(survey) -value {Fermi 3} $f add radiobutton -label {Fermi 2} \ -variable ${varname}(survey) -value {Fermi 2} $f add radiobutton -label {Fermi 1} \ -variable ${varname}(survey) -value {Fermi 1} $f add separator $f add radiobutton -label {EGRET (3D)} \ -variable ${varname}(survey) -value {EGRET (3D)} $f add radiobutton -label {EGRET <100 Mev} \ -variable ${varname}(survey) -value {EGRET <100 Mev} $f add radiobutton -label {EGRET >100 Mev} \ -variable ${varname}(survey) -value {EGRET >100 Mev} $f add separator $f add radiobutton -label {COMPTEL} \ -variable ${varname}(survey) -value {COMPTEL} set f $var(mb).survey.hard menu $f $f add radiobutton -label {INT GAL 17-35 Flux} \ -variable ${varname}(survey) -value {INT GAL 17-35 Flux} $f add radiobutton -label {INT GAL 17-60 Flux} \ -variable ${varname}(survey) -value {INT GAL 17-60 Flux} $f add radiobutton -label {INT GAL 35-80 Flux} \ -variable ${varname}(survey) -value {INT GAL 35-80 Flux} $f add separator $f add radiobutton -label {INTEGRAL/SPI GC} \ -variable ${varname}(survey) -value {INTEGRAL/SPI GC} $f add radiobutton -label {GRANAT/SIGMA} \ -variable ${varname}(survey) -value {GRANAT/SIGMA} $f add separator $f add radiobutton -label {RXTE Allsky 3-8keV Flux} \ -variable ${varname}(survey) -value {RXTE Allsky 3-8keV Flux} $f add radiobutton -label {RXTE Allsky 3-20keV Flux} \ -variable ${varname}(survey) -value {RXTE Allsky 3-20keV Flux} $f add radiobutton -label {RXTE Allsky 8-20keV Flux} \ -variable ${varname}(survey) -value {RXTE Allsky 8-20keV Flux} set f $var(mb).survey.bat menu $f $f add radiobutton -label {BAT SNR 14-195} \ -variable ${varname}(survey) -value {BAT SNR 14-195} $f add radiobutton -label {BAT SNR 14-20} \ -variable ${varname}(survey) -value {BAT SNR 14-20} $f add radiobutton -label {BAT SNR 20-24} \ -variable ${varname}(survey) -value {BAT SNR 20-24} $f add radiobutton -label {BAT SNR 24-35} \ -variable ${varname}(survey) -value {BAT SNR 24-35} $f add radiobutton -label {BAT SNR 35-50} \ -variable ${varname}(survey) -value {BAT SNR 35-50} $f add radiobutton -label {BAT SNR 50-75} \ -variable ${varname}(survey) -value {BAT SNR 50-75} $f add radiobutton -label {BAT SNR 75-100} \ -variable ${varname}(survey) -value {BAT SNR 75-100} $f add radiobutton -label {BAT SNR 100-150} \ -variable ${varname}(survey) -value {BAT SNR 100-150} $f add radiobutton -label {BAT SNR 150-195} \ -variable ${varname}(survey) -value {BAT SNR 150-195} set f $var(mb).survey.soft menu $f $f add radiobutton -label {RASS-Cnt Soft} \ -variable ${varname}(survey) -value {RASS-Cnt Soft} $f add radiobutton -label {RASS-Cnt Hard} \ -variable ${varname}(survey) -value {RASS-Cnt Hard} $f add radiobutton -label {RASS-Cnt Broad} \ -variable ${varname}(survey) -value {RASS-Cnt Broad} $f add separator $f add radiobutton -label {PSPC 2.0 Deg-Int} \ -variable ${varname}(survey) -value {PSPC 2.0 Deg-Int} $f add radiobutton -label {PSPC 1.0 Deg-Int} \ -variable ${varname}(survey) -value {PSPC 1.0 Deg-Int} $f add radiobutton -label {PSPC 0.6 Deg-Int} \ -variable ${varname}(survey) -value {PSPC 0.6 Deg-Int} $f add separator $f add radiobutton -label {HRI} \ -variable ${varname}(survey) -value {HRI} $f add radiobutton -label {HEAO 1 A-2} \ -variable ${varname}(survey) -value {HEAO 1 A-2} set f $var(mb).survey.diffuse menu $f $f add radiobutton -label {RASS Background 1} \ -variable ${varname}(survey) -value {RASS Background 1} $f add radiobutton -label {RASS Background 2} \ -variable ${varname}(survey) -value {RASS Background 2} $f add radiobutton -label {RASS Background 3} \ -variable ${varname}(survey) -value {RASS Background 3} $f add radiobutton -label {RASS Background 4} \ -variable ${varname}(survey) -value {RASS Background 4} $f add radiobutton -label {RASS Background 5} \ -variable ${varname}(survey) -value {RASS Background 5} $f add radiobutton -label {RASS Background 6} \ -variable ${varname}(survey) -value {RASS Background 6} $f add radiobutton -label {RASS Background 7} \ -variable ${varname}(survey) -value {RASS Background 7} set f $var(mb).survey.uv menu $f $f add radiobutton -label {GALEX Near UV} \ -variable ${varname}(survey) -value {GALEX Near UV} $f add radiobutton -label {GALEX Far UV} \ -variable ${varname}(survey) -value {GALEX Far UV} $f add separator $f add radiobutton -label {ROSAT WFC F1} \ -variable ${varname}(survey) -value {ROSAT WFC F1} $f add radiobutton -label {ROSAT WFC F2} \ -variable ${varname}(survey) -value {ROSAT WFC F2} $f add separator $f add radiobutton -label {EUVE 171 A} \ -variable ${varname}(survey) -value {EUVE 171 A} $f add radiobutton -label {EUVE 405 A} \ -variable ${varname}(survey) -value {EUVE 405 A} $f add radiobutton -label {EUVE 555 A} \ -variable ${varname}(survey) -value {EUVE 555 A} set f $var(mb).survey.dss menu $f $f add radiobutton -label {DSS} \ -variable ${varname}(survey) -value {DSS} $f add separator $f add radiobutton -label {DSS1 Blue} \ -variable ${varname}(survey) -value {DSS1 Blue} $f add radiobutton -label {DSS1 Red} \ -variable ${varname}(survey) -value {DSS1 Red} $f add separator $f add radiobutton -label {DSS2 Red} \ -variable ${varname}(survey) -value {DSS2 Red} $f add radiobutton -label {DSS2 Blue} \ -variable ${varname}(survey) -value {DSS2 Blue} $f add separator $f add radiobutton -label {DSS2 IR} \ -variable ${varname}(survey) -value {DSS2 IR} set f $var(mb).survey.sdss menu $f $f add radiobutton -label {SDSSg} \ -variable ${varname}(survey) -value {SDSSg} $f add radiobutton -label {SDSSi} \ -variable ${varname}(survey) -value {SDSSi} $f add radiobutton -label {SDSSr} \ -variable ${varname}(survey) -value {SDSSr} $f add radiobutton -label {SDSSu} \ -variable ${varname}(survey) -value {SDSSu} $f add radiobutton -label {SDSSz} \ -variable ${varname}(survey) -value {SDSSz} $f add separator $f add radiobutton -label {SDSSdr7g} \ -variable ${varname}(survey) -value {SDSSdr7g} $f add radiobutton -label {SDSSdr7i} \ -variable ${varname}(survey) -value {SDSSdr7i} $f add radiobutton -label {SDSSdr7r} \ -variable ${varname}(survey) -value {SDSSdr7r} $f add radiobutton -label {SDSSdr7u} \ -variable ${varname}(survey) -value {SDSSdr7u} $f add radiobutton -label {SDSSdr7z} \ -variable ${varname}(survey) -value {SDSSdr7z} set f $var(mb).survey.other menu $f $f add radiobutton -label {Mellinger Red} \ -variable ${varname}(survey) -value {Mellinger Red} $f add radiobutton -label {Mellinger Green} \ -variable ${varname}(survey) -value {Mellinger Green} $f add radiobutton -label {Mellinger Blue} \ -variable ${varname}(survey) -value {Mellinger Blue} $f add separator $f add radiobutton -label {NEAT} \ -variable ${varname}(survey) -value {NEAT} $f add radiobutton -label {H-Alpha Comp} \ -variable ${varname}(survey) -value {H-Alpha Comp} $f add separator $f add radiobutton -label {SHASSA H} \ -variable ${varname}(survey) -value {SHASSA H} $f add radiobutton -label {SHASSA CC} \ -variable ${varname}(survey) -value {SHASSA CC} $f add radiobutton -label {SHASSA C} \ -variable ${varname}(survey) -value {SHASSA C} $f add radiobutton -label {SHASSA Sm} \ -variable ${varname}(survey) -value {SHASSA Sm} set f $var(mb).survey.iras menu $f $f add radiobutton -label {IRIS 12} \ -variable ${varname}(survey) -value {IRIS 12} $f add radiobutton -label {IRIS 25} \ -variable ${varname}(survey) -value {IRIS 25} $f add radiobutton -label {IRIS 60} \ -variable ${varname}(survey) -value {IRIS 160} $f add radiobutton -label {IRIS 100} \ -variable ${varname}(survey) -value {IRIS 100} $f add separator $f add radiobutton -label {SFD100m} \ -variable ${varname}(survey) -value {SFD100m} $f add radiobutton -label {SFD Dust Map} \ -variable ${varname}(survey) -value {SFD Dust Map} $f add separator $f add radiobutton -label {IRAS 12 micron} \ -variable ${varname}(survey) -value {IRAS 12 micron} $f add radiobutton -label {IRAS 25 micron} \ -variable ${varname}(survey) -value {IRAS 25 micron} $f add radiobutton -label {IRAS 60 micron} \ -variable ${varname}(survey) -value {IRAS 60 micron} $f add radiobutton -label {IRAS 100 micron} \ -variable ${varname}(survey) -value {IRAS 100 micron} set f $var(mb).survey.ir2mass menu $f $f add radiobutton -label {2MASS-J} \ -variable ${varname}(survey) -value {2MASS-J} $f add radiobutton -label {2MASS-H} \ -variable ${varname}(survey) -value {2MASS-H} $f add radiobutton -label {2MASS-K} \ -variable ${varname}(survey) -value {2MASS-K} set f $var(mb).survey.irukidss menu $f $f add radiobutton -label {UKIDSS-Y} \ -variable ${varname}(survey) -value {UKIDSS-Y} $f add radiobutton -label {UKIDSS-J} \ -variable ${varname}(survey) -value {UKIDSS-J} $f add radiobutton -label {UKIDSS-H} \ -variable ${varname}(survey) -value {UKIDSS-H} $f add radiobutton -label {UKIDSS-K} \ -variable ${varname}(survey) -value {UKIDSS-K} set f $var(mb).survey.irwise menu $f $f add radiobutton -label {WISE 3.4} \ -variable ${varname}(survey) -value {WISE 3.4} $f add radiobutton -label {WISE 4.6} \ -variable ${varname}(survey) -value {WISE 4.6} $f add radiobutton -label {WISE 12} \ -variable ${varname}(survey) -value {WISE 12} $f add radiobutton -label {WISE 22} \ -variable ${varname}(survey) -value {WISE 22} set f $var(mb).survey.irakari menu $f $f add radiobutton -label {AKARI N60} \ -variable ${varname}(survey) -value {AKARI N60} $f add radiobutton -label {AKARI WIDE-S} \ -variable ${varname}(survey) -value {AKARI WIDE-S} $f add radiobutton -label {AKARI WIDE-L} \ -variable ${varname}(survey) -value {AKARI WIDE-L} $f add radiobutton -label {AKARI N160} \ -variable ${varname}(survey) -value {AKARI N160} set f $var(mb).survey.planck menu $f $f add radiobutton -label {Planck 857} \ -variable ${varname}(survey) -value {Planck 857} $f add radiobutton -label {Planck 545} \ -variable ${varname}(survey) -value {Planck 545} $f add radiobutton -label {Planck 353} \ -variable ${varname}(survey) -value {Planck 353} $f add radiobutton -label {Planck 217} \ -variable ${varname}(survey) -value {Planck 217} $f add radiobutton -label {Planck 143} \ -variable ${varname}(survey) -value {Planck 143} $f add radiobutton -label {Planck 100} \ -variable ${varname}(survey) -value {Planck 100} $f add radiobutton -label {Planck 070} \ -variable ${varname}(survey) -value {Planck 070} $f add radiobutton -label {Planck 044} \ -variable ${varname}(survey) -value {Planck 044} $f add radiobutton -label {Planck 030} \ -variable ${varname}(survey) -value {Planck 030} set f $var(mb).survey.wmap menu $f $f add radiobutton -label {WMAP Ka} \ -variable ${varname}(survey) -value {WMAP Ka} $f add radiobutton -label {WMAP K} \ -variable ${varname}(survey) -value {WMAP K} $f add radiobutton -label {WMAP Q} \ -variable ${varname}(survey) -value {WMAP Q} $f add radiobutton -label {WMAP V} \ -variable ${varname}(survey) -value {WMAP V} $f add radiobutton -label {WMAP W} \ -variable ${varname}(survey) -value {WMAP W} $f add separator $f add radiobutton -label {COBE DIRBE/AAM} \ -variable ${varname}(survey) -value cobeaam $f add radiobutton -label {COBE DIRBE/ZSMA} \ -variable ${varname}(survey) -value cobezsma set f $var(mb).survey.radioghz menu $f $f add radiobutton -label {CO} \ -variable ${varname}(survey) -value {CO} $f add radiobutton -label {GB6 (4850MHZ)} \ -variable ${varname}(survey) -value {GB6 (4850MHZ)} $f add radiobutton -label {VLA FIRST (1.4 GHz)} \ -variable ${varname}(survey) -value {VLA FIRST (1.4 GHz)} $f add radiobutton -label {NVSS} \ -variable ${varname}(survey) -value {NVSS} $f add radiobutton -label {Stripe82VLA} \ -variable ${varname}(survey) -value {Stripe82VLA} $f add radiobutton -label {1420MHz (Bonn)} \ -variable ${varname}(survey) -value {1420MHz (Bonn)} $f add radiobutton -label {nH} \ -variable ${varname}(survey) -value {nH} set f $var(mb).survey.radiomhz menu $f $f add radiobutton -label {SUMSS 843 MHz} \ -variable ${varname}(survey) -value {SUMSS 843 MHz} $f add radiobutton -label {0408MHz} \ -variable ${varname}(survey) -value {0408MHz} $f add radiobutton -label {WENSS} \ -variable ${varname}(survey) -value {WENSS} $f add radiobutton -label {TGSS ADR1} \ -variable ${varname}(survey) -value {TGSS ADR1} $f add radiobutton -label {VLSSr} \ -variable ${varname}(survey) -value {VLSSr} $f add radiobutton -label {0035MHz} \ -variable ${varname}(survey) -value {0035MHz} set f $var(mb).survey.goods menu $f $f add radiobutton -label {GOODS: Chandra ACIS HB} \ -variable ${varname}(survey) -value {GOODS: Chandra ACIS HB} $f add radiobutton -label {GOODS: Chandra ACIS FB} \ -variable ${varname}(survey) -value {GOODS: Chandra ACIS FB} $f add radiobutton -label {GOODS: Chandra ACIS SB} \ -variable ${varname}(survey) -value {GOODS: Chandra ACIS SB} $f add separator $f add radiobutton -label {GOODS: VLT VIMOS U} \ -variable ${varname}(survey) -value {GOODS: VLT VIMOS U} $f add radiobutton -label {GOODS: VLT VIMOS R} \ -variable ${varname}(survey) -value {GOODS: VLT VIMOS R} $f add separator $f add radiobutton -label {GOODS: HST ACS B} \ -variable ${varname}(survey) -value {GOODS: HST ACS B} $f add radiobutton -label {GOODS: HST ACS V} \ -variable ${varname}(survey) -value {GOODS: HST ACS V} $f add radiobutton -label {GOODS: HST ACS I} \ -variable ${varname}(survey) -value {GOODS: HST ACS I} $f add radiobutton -label {GOODS: HST ACS Z} \ -variable ${varname}(survey) -value {GOODS: HST ACS Z} $f add separator $f add radiobutton -label {Hawaii HDF U} \ -variable ${varname}(survey) -value {Hawaii HDF U} $f add radiobutton -label {Hawaii HDF B} \ -variable ${varname}(survey) -value {Hawaii HDF B} $f add radiobutton -label {Hawaii HDF V0201} \ -variable ${varname}(survey) -value {Hawaii HDF V0201} $f add radiobutton -label {Hawaii HDF V0401} \ -variable ${varname}(survey) -value {Hawaii HDF V0401} $f add radiobutton -label {Hawaii HDF R} \ -variable ${varname}(survey) -value {Hawaii HDF R} $f add radiobutton -label {Hawaii HDF I} \ -variable ${varname}(survey) -value {Hawaii HDF I} $f add radiobutton -label {Hawaii HDF Z} \ -variable ${varname}(survey) -value {Hawaii HDF Z} $f add radiobutton -label {Hawaii HDF HK} \ -variable ${varname}(survey) -value {Hawaii HDF HK} $f add separator $f add radiobutton -label {GOODS: HST NICMOS} \ -variable ${varname}(survey) -value {GOODS: HST NICMOS} $f add radiobutton -label {GOODS: VLT ISAAC J} \ -variable ${varname}(survey) -value {GOODS: VLT ISAAC J} $f add radiobutton -label {GOODS: VLT ISAAC H} \ -variable ${varname}(survey) -value {GOODS: VLT ISAAC H} $f add radiobutton -label {GOODS: VLT ISAAC Ks} \ -variable ${varname}(survey) -value {GOODS: VLT ISAAC Ks} $f add radiobutton -label {HUDF: VLT ISAAC Ks} \ -variable ${varname}(survey) -value {HUDF: VLT ISAAC Ks} $f add separator $f add radiobutton -label {GOODS: Spitzer IRAC 3.6} \ -variable ${varname}(survey) -value {GOODS: Spitzer IRAC 3.6} $f add radiobutton -label {GOODS: Spitzer IRAC 4.5} \ -variable ${varname}(survey) -value {GOODS: Spitzer IRAC 4.5} $f add radiobutton -label {GOODS: Spitzer IRAC 5.8} \ -variable ${varname}(survey) -value {GOODS: Spitzer IRAC 5.8} $f add radiobutton -label {GOODS: Spitzer IRAC 8.0} \ -variable ${varname}(survey) -value {GOODS: Spitzer IRAC 8.0} $f add radiobutton -label {GOODS: Spitzer MIPS 24} \ -variable ${varname}(survey) -value {GOODS: Spitzer MIPS 24} $f add separator $f add radiobutton -label {GOODS: Herschel 100} \ -variable ${varname}(survey) -value {GOODS: Herschel 100} $f add radiobutton -label {GOODS: Herschel 100} \ -variable ${varname}(survey) -value {GOODS: Herschel 100} $f add radiobutton -label {GOODS: Herschel 250} \ -variable ${varname}(survey) -value {GOODS: Herschel 250} $f add radiobutton -label {GOODS: Herschel 350} \ -variable ${varname}(survey) -value {GOODS: Herschel 350} $f add radiobutton -label {GOODS: Herschel 500} \ -variable ${varname}(survey) -value {GOODS: Herschel 500} $f add separator $f add radiobutton -label {CDFS: LESS} \ -variable ${varname}(survey) -value {CDFS: LESS} $f add radiobutton -label {GOODS: VLA North} \ -variable ${varname}(survey) -value {GOODS: VLA North} IMGSVRUpdate $varname } proc SkyViewExec {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,image)} { puts stderr "SkyViewExec $varname" } if {$var(save)} { set var(fn) [SaveFileDialog savefitsfbox] if {$var(fn) == {}} { ARDone $varname return } } else { set var(fn) [tmpnam {.fits}] } # skyformat switch -- $var(skyformat) { degrees { set xx $var(x) set yy $var(y) } sexagesimal { set xx [h2d [Sex2H $var(x)]] set yy [Sex2D $var(y)] } } # size - convert to arcsec switch -- $var(rformat) { degrees { set ww $var(width) set hh $var(height) } arcmin { set ww [expr $var(width)/60.] set hh [expr $var(height)/60.] } arcsec { set ww [expr $var(width)/60./60.] set hh [expr $var(height)/60./60.] } } if {$ww>5} { set ww 5 } if {$hh>5} { set hh 5 } # now average set rr [expr ($ww+$hh)/2.] # query set var(query) [http::formatQuery Position $xx,$yy Survey $var(survey) Size $ww,$hh Pixels $var(width,pixels),$var(height,pixels) Return FITS] set url "http://skyview.gsfc.nasa.gov/cgi-bin/images" IMGSVRGetURL $varname $url } proc SkyViewAck {varname} { upvar #0 $varname var global $varname global debug if {$debug(tcl,image)} { puts stderr "SkyViewAck $varname" } set msg {Acknowledgments for the Skyview SkyView has been developed with generous support from the NASA AISR and ADP programs (P.I. Thomas A. McGlynn) under the auspices of the High Energy Astrophysics Science Archive Research Center (HEASARC) at the NASA/ GSFC Astrophysics Science Division. We gratefully acknowledge the support of NASA and contributors of SkyView surveys. Maintained by: Laura McDonald lmm@skyview.gsfc.nasa.gov } SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \ 80 40 insert top $msg } # Process Cmds proc ProcessSkyViewCmd {varname iname} { upvar $varname var upvar $iname i SkyViewDialog IMGSVRProcessCmd $varname $iname dskyview } proc ProcessSendSkyViewCmd {proc id param} { SkyViewDialog IMGSVRProcessSendCmd $proc $id $param dskyview } saods9/ds9/library/slider.tcl000644 000765 000000 00000003412 12705445650 016525 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc slider {w from to label varname cmd {num {5}} {width {7}}} { ttk::frame $w ttk::scale $w.slider \ -length 300 \ -orient horizontal \ -variable $varname \ -takefocus 0 \ -command [list SliderCmd $w $varname $cmd] ttk::label $w.label -text $label ttk::entry $w.entry -textvariable $varname -width $width grid $w.label -sticky w -columnspan $num grid $w.slider -row 1 -columnspan $num -padx 2 -pady 2 -sticky news grid $w.entry -row 1 -column $num -padx 2 -pady 2 for {set ii 0} {$ii<$num} {incr ii} { ttk::label $w.t$ii -width $width -anchor center grid $w.t$ii -row 2 -column $ii grid columnconfigure $w $ii -weight 1 } grid rowconfigure $w 1 -weight 1 grid columnconfigure $w 0 -weight 1 grid rowconfigure $w 2 -weight 1 bind $w.entry $cmd SliderMinMax $w $from $to $num return $w } proc SliderMinMax {w from to num} { $w.slider configure -from $from -to $to if {$from == $to} { for {set ii 0} {$ii<$num} {incr ii} { $w.t$ii configure -text {} } } else { for {set ii 0} {$ii<$num} {incr ii} { set vv [expr ($to*1.-$from)/($num-1)*$ii + $from] if {[string is integer $from] && [string is integer $to]} { set vv [expr int($vv)] } else { set vv [format {%.5g} $vv] } $w.t$ii configure -text $vv } } } proc SliderCmd {w varname cmd vv} { upvar $varname var set from [$w.slider cget -from] set to [$w.slider cget -to] if {[string is integer $from] && [string is integer $to]} { set var [expr int($vv)] } if {$cmd != {}} { eval $cmd } } saods9/ds9/library/smooth.tcl000644 000765 000000 00000015643 12705445650 016565 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc SmoothDef {} { global smooth global ismooth global psmooth set ismooth(top) .sm set ismooth(mb) .smmb set smooth(lock) 0 set smooth(view) 0 set smooth(function) gaussian set smooth(radius) 3 array set psmooth [array get smooth] } proc SmoothUpdate {} { global smooth global current global rgb if {$current(frame) != {}} { SetWatchCursor if {$smooth(view)} { RGBEvalLockCurrent rgb(lock,smooth) [list $current(frame) smooth $smooth(function) $smooth(radius)] } else { RGBEvalLockCurrent rgb(lock,smooth) [list $current(frame) smooth delete] } ResetWatchCursor } LockSmoothCurrent UpdateCubeDialog UpdateContourScale UpdateContourDialog UpdateScaleDialog UpdateGraphXAxis $current(frame) UpdateMain } proc SmoothDialog {} { global ds9 global smooth global ismooth # see if we already have a window visible if {[winfo exists $ismooth(top)]} { raise $ismooth(top) return } # create the window set w $ismooth(top) set mb $ismooth(mb) Toplevel $w $mb 6 [msgcat::mc {Smooth Parameters}] SmoothDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] -command SmoothApplyDialog $mb.file add command -label [msgcat::mc {Clear}] -command SmoothOffDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command SmoothDestroyDialog EditMenu $mb ismooth # Function set f [ttk::labelframe $w.func -text [msgcat::mc {Function}] -padding 2] ttk::radiobutton $f.boxcar -text [msgcat::mc {Boxcar}] \ -variable smooth(function) -value boxcar ttk::radiobutton $f.tophat -text [msgcat::mc {Tophat}] \ -variable smooth(function) -value tophat ttk::radiobutton $f.gaussian -text [msgcat::mc {Gaussian}] \ -variable smooth(function) -value gaussian grid $f.boxcar $f.tophat $f.gaussian -padx 2 -pady 2 # Kernal set f [ttk::labelframe $w.rad -text [msgcat::mc {Kernel}] -padding 2] slider $f.slider 1 20 {Radius} smooth(radius) {} grid $f.slider -padx 2 -pady 2 -sticky ew grid columnconfigure $f 0 -weight 1 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] -command SmoothApplyDialog ttk::button $f.clear -text [msgcat::mc {Clear}] -command SmoothOffDialog ttk::button $f.close -text [msgcat::mc {Close}] -command SmoothDestroyDialog pack $f.apply $f.clear $f.close -side left -expand true -padx 2 -pady 4 # Fini grid $w.func -sticky news grid $w.rad -sticky news grid $w.buttons -sticky ew grid rowconfigure $w 0 -weight 1 grid rowconfigure $w 1 -weight 1 grid columnconfigure $w 0 -weight 1 } proc SmoothApplyDialog {} { global smooth set smooth(view) 1 SmoothUpdate } proc SmoothDestroyDialog {} { global ismooth if {[winfo exists $ismooth(top)]} { destroy $ismooth(top) destroy $ismooth(mb) } } proc SmoothOffDialog {} { global smooth set smooth(view) 0 SmoothUpdate } proc UpdateSmoothMenu {} { global smooth global current global debug if {$debug(tcl,update)} { puts stderr "UpdateSmoothMenu" } if {$current(frame) != {}} { set smooth(view) [$current(frame) has smooth] set smooth(function) [$current(frame) get smooth function] set smooth(radius) [$current(frame) get smooth radius] } } proc MatchSmoothCurrent {} { global current if {$current(frame) != {}} { MatchSmooth $current(frame) } } proc MatchSmooth {which} { global ds9 global rgb set view [$which has smooth] set function [$which get smooth function] set radius [$which get smooth radius] foreach ff $ds9(frames) { if {$ff != $which} { if {$view} { RGBEvalLock rgb(lock,smooth) $ff [list $ff smooth $function $radius] } else { RGBEvalLock rgb(lock,smooth) $ff [list $ff smooth delete] } } } } proc LockSmoothCurrent {} { global current if {$current(frame) != {}} { LockSmooth $current(frame) } } proc LockSmooth {which} { global smooth if {$smooth(lock)} { MatchSmooth $which } } proc SmoothBackup {ch which} { switch [$which get type] { base - 3d {SmoothBackupBase $ch $which} rgb {SmoothBackupRGB $ch $which} } } proc SmoothBackupBase {ch which} { if {[$which has smooth]} { set function [$which get smooth function] set radius [$which get smooth radius] puts $ch "$which smooth $function $radius" } } proc SmoothBackupRGB {ch which} { set sav [$which get rgb channel] foreach cc {red green blue} { $which rgb channel $cc puts $ch "$which rgb channel $cc" SmoothBackupBase $ch $which } $which rgb channel $sav puts $ch "$which rgb channel $sav" } proc PrefsDialogSmooth {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {Smooth}] lappend dprefs(tabs) [ttk::frame $w.smooth] set f [ttk::labelframe $w.smooth.param -text [msgcat::mc {Smooth}]] ttk::label $f.title -text [msgcat::mc {Function}] ttk::menubutton $f.function -textvariable psmooth(function) \ -menu $f.function.menu menu $f.function.menu $f.function.menu add radiobutton -label [msgcat::mc {Boxcar}] \ -variable psmooth(function) -value boxcar $f.function.menu add radiobutton -label [msgcat::mc {Tophat}] \ -variable psmooth(function) -value tophat $f.function.menu add radiobutton -label [msgcat::mc {Gaussian}] \ -variable psmooth(function) -value gaussian grid $f.title $f.function -padx 2 -pady 2 -sticky w pack $f -side top -fill both -expand true } proc ProcessSmoothCmd {varname iname} { upvar $varname var upvar $iname i global smooth switch -- [string tolower [lindex $var $i]] { open {SmoothDialog} close {SmoothDestroyDialog} match {MatchSmoothCurrent} lock { incr i if {!([string range [lindex $var $i] 0 0] == "-")} { set smooth(lock) [FromYesNo [lindex $var $i]] } else { set smooth(lock) 1 incr i -1 } LockSmoothCurrent } radius { incr i set smooth(radius) [lindex $var $i] SmoothUpdate } function { incr i set smooth(function) [lindex $var $i] SmoothUpdate } yes - true - on - 1 - no - false - off - 0 { set smooth(view) [FromYesNo [lindex $var $i]] SmoothUpdate } default { set smooth(view) 1 SmoothUpdate incr i -1 } } } proc ProcessSendSmoothCmd {proc id param} { global smooth switch -- [lindex $param 0] { lock {$proc $id [ToYesNo $smooth(lock)]} function {$proc $id "$smooth(function)\n"} radius {$proc $id "$smooth(radius)\n"} default {$proc $id [ToYesNo $smooth(view)]} } } saods9/ds9/library/smosaic.tcl000644 000765 000000 00000001110 12705445650 016672 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc ProcessSMosaicCmd {varname iname sock fn} { upvar $varname var upvar $iname i set vvar $var set ii $i switch -- [string tolower [lindex $var $i]] { iraf { incr ii ProcessSMosaicIRAFCmd vvar ii $sock $fn } {} { set vvar [linsert $var $i wcs] ProcessSMosaicWCSCmd vvar ii $sock $fn } default {ProcessSMosaicWCSCmd vvar ii $sock $fn} } } saods9/ds9/library/smosaiciraf.tcl000644 000765 000000 00000002374 12705445650 017551 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadSMosaicIRAFFile {hdr fn layer} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) {mosaic iraf} set loadParam(load,type) smmap set loadParam(file,name) $fn set loadParam(file,header) $hdr set loadParam(load,layer) $layer ProcessLoad } proc ProcessSMosaicIRAFCmd {varname iname sock fn layer} { upvar $varname var upvar $iname i global loadParam global current set layer {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i set layer mask } slice { incr i # not supported } } set opt [lindex $var $i] if {$opt != {}} { incr i } else { set opt wcs } StartLoad if {$sock != {}} { # xpa if {0} { # not supported } else { LoadSMosaicIRAFFile [lindex $var $i] [lindex $var [expr $i+1]] \ $layer $opt } } else { # comm if {0} { # not supported } else { LoadSMosaicIRAFFile [lindex $var $i] [lindex $var [expr $i+1]] \ $layer $opt } } FinishLoad } saods9/ds9/library/smosaicwcs.tcl000644 000765 000000 00000002377 12705445650 017427 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadSMosaicWCSFitsFile {hdr fn layer sys} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) [list mosaic $sys] set loadParam(load,type) smmap set loadParam(file,name) $fn set loadParam(file,header) $hdr set loadParam(load,layer) $layer ProcessLoad } proc ProcessSMosaicWCSCmd {varname iname sock fn} { upvar $varname var upvar $iname i global loadParam global current set layer {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i set layer mask } slice { incr i # not supported } } set opt [lindex $var $i] if {$opt != {}} { incr i } else { set opt wcs } StartLoad if {$sock != {}} { # xpa if {0} { # not supported } else { LoadSMosaicWCSFile [lindex $var $i] [lindex $var [expr $i+1]] \ $layer $opt } } else { # comm if {0} { # not supported } else { LoadSMosaicWCSFile [lindex $var $i] [lindex $var [expr $i+1]] \ $layer $opt } } FinishLoad } saods9/ds9/library/source.tcl000644 000765 000000 00000016207 12741215246 016545 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 source $ds9(root)/library/2mass.tcl source $ds9(root)/library/3d.tcl source $ds9(root)/library/array.tcl source $ds9(root)/library/analysis.tcl source $ds9(root)/library/analysisparam.tcl source $ds9(root)/library/annulus.tcl source $ds9(root)/library/ar.tcl source $ds9(root)/library/backup.tcl source $ds9(root)/library/bin.tcl source $ds9(root)/library/block.tcl source $ds9(root)/library/box.tcl source $ds9(root)/library/boxannulus.tcl source $ds9(root)/library/bpanda.tcl source $ds9(root)/library/buttons.tcl source $ds9(root)/library/cat.tcl source $ds9(root)/library/catcds.tcl source $ds9(root)/library/catcdssrch.tcl source $ds9(root)/library/catcdssrchdialog.tcl source $ds9(root)/library/catcmd.tcl source $ds9(root)/library/catcxc.tcl source $ds9(root)/library/catdialog.tcl source $ds9(root)/library/catflt.tcl source $ds9(root)/library/catmatch.tcl source $ds9(root)/library/catned.tcl source $ds9(root)/library/catopt.tcl source $ds9(root)/library/catplot.tcl source $ds9(root)/library/catreg.tcl source $ds9(root)/library/catsdss.tcl source $ds9(root)/library/catsimbad.tcl source $ds9(root)/library/catskybot.tcl source $ds9(root)/library/catsym.tcl source $ds9(root)/library/catvot.tcl source $ds9(root)/library/centroid.tcl source $ds9(root)/library/circle.tcl source $ds9(root)/library/colorbar.tcl source $ds9(root)/library/comm.tcl source $ds9(root)/library/command.tcl source $ds9(root)/library/compass.tcl source $ds9(root)/library/composite.tcl source $ds9(root)/library/contour.tcl source $ds9(root)/library/convert.tcl source $ds9(root)/library/coord.tcl source $ds9(root)/library/cpanda.tcl source $ds9(root)/library/crop.tcl source $ds9(root)/library/crosshair.tcl source $ds9(root)/library/cube.tcl source $ds9(root)/library/debug.tcl source $ds9(root)/library/dialog.tcl source $ds9(root)/library/ellipse.tcl source $ds9(root)/library/ellipseannulus.tcl source $ds9(root)/library/envi.tcl source $ds9(root)/library/epanda.tcl source $ds9(root)/library/error.tcl source $ds9(root)/library/eso.tcl source $ds9(root)/library/examine.tcl source $ds9(root)/library/export.tcl source $ds9(root)/library/external.tcl source $ds9(root)/library/file.tcl source $ds9(root)/library/fits.tcl source $ds9(root)/library/frame.tcl source $ds9(root)/library/graph.tcl source $ds9(root)/library/grid.tcl source $ds9(root)/library/group.tcl source $ds9(root)/library/header.tcl source $ds9(root)/library/help.tcl source $ds9(root)/library/http.tcl source $ds9(root)/library/hv.tcl source $ds9(root)/library/hvform.tcl source $ds9(root)/library/hvsup.tcl source $ds9(root)/library/iexam.tcl source $ds9(root)/library/iis.tcl source $ds9(root)/library/ime.tcl source $ds9(root)/library/imgsvr.tcl source $ds9(root)/library/import.tcl source $ds9(root)/library/info.tcl source $ds9(root)/library/layout.tcl source $ds9(root)/library/line.tcl source $ds9(root)/library/load.tcl source $ds9(root)/library/magnifier.tcl source $ds9(root)/library/marker.tcl source $ds9(root)/library/markeranalysishist.tcl source $ds9(root)/library/markeranalysispanda.tcl source $ds9(root)/library/markeranalysisplot2d.tcl source $ds9(root)/library/markeranalysisplot3d.tcl source $ds9(root)/library/markeranalysisradial.tcl source $ds9(root)/library/markeranalysisstats.tcl source $ds9(root)/library/markerbase.tcl source $ds9(root)/library/markerbaseannulus.tcl source $ds9(root)/library/markerbaseannulusrect.tcl source $ds9(root)/library/markerbasecenter.tcl source $ds9(root)/library/markerbaseline.tcl source $ds9(root)/library/markerbasepanda.tcl source $ds9(root)/library/markerbasepandarect.tcl source $ds9(root)/library/markerdialog.tcl source $ds9(root)/library/mask.tcl source $ds9(root)/library/manalysis.tcl source $ds9(root)/library/mbin.tcl source $ds9(root)/library/mcolor.tcl source $ds9(root)/library/mecube.tcl source $ds9(root)/library/medit.tcl source $ds9(root)/library/menu.tcl source $ds9(root)/library/mfile.tcl source $ds9(root)/library/mframe.tcl source $ds9(root)/library/mhelp.tcl source $ds9(root)/library/mosaicimage.tcl source $ds9(root)/library/mosaicimageiraf.tcl source $ds9(root)/library/mosaicimagewcs.tcl source $ds9(root)/library/mosaicimagewfpc2.tcl source $ds9(root)/library/mosaic.tcl source $ds9(root)/library/mosaiciraf.tcl source $ds9(root)/library/mosaicwcs.tcl source $ds9(root)/library/movie.tcl source $ds9(root)/library/mregion.tcl source $ds9(root)/library/mscale.tcl source $ds9(root)/library/multiframe.tcl source $ds9(root)/library/mview.tcl source $ds9(root)/library/mwcs.tcl source $ds9(root)/library/mzoom.tcl source $ds9(root)/library/nameres.tcl source $ds9(root)/library/nsvr.tcl source $ds9(root)/library/nrrd.tcl source $ds9(root)/library/nvss.tcl source $ds9(root)/library/open.tcl source $ds9(root)/library/pagesetup.tcl source $ds9(root)/library/panner.tcl source $ds9(root)/library/panzoom.tcl source $ds9(root)/library/photo.tcl source $ds9(root)/library/pixel.tcl source $ds9(root)/library/plot.tcl source $ds9(root)/library/plotbar.tcl source $ds9(root)/library/plotdialog.tcl source $ds9(root)/library/plotelement.tcl source $ds9(root)/library/plotline.tcl source $ds9(root)/library/plotprint.tcl source $ds9(root)/library/plotprocess.tcl source $ds9(root)/library/plotscatter.tcl source $ds9(root)/library/point.tcl source $ds9(root)/library/polygon.tcl source $ds9(root)/library/prefs.tcl source $ds9(root)/library/prefsdialog.tcl source $ds9(root)/library/print.tcl source $ds9(root)/library/projection.tcl source $ds9(root)/library/rgb.tcl source $ds9(root)/library/rgbarray.tcl source $ds9(root)/library/rgbcube.tcl source $ds9(root)/library/rgbimage.tcl source $ds9(root)/library/ruler.tcl source $ds9(root)/library/samp.tcl source $ds9(root)/library/sao.tcl source $ds9(root)/library/save.tcl source $ds9(root)/library/saveimage.tcl source $ds9(root)/library/scale.tcl source $ds9(root)/library/sia.tcl source $ds9(root)/library/siadialog.tcl source $ds9(root)/library/segment.tcl source $ds9(root)/library/sfits.tcl source $ds9(root)/library/shm.tcl source $ds9(root)/library/skyview.tcl source $ds9(root)/library/slider.tcl source $ds9(root)/library/smosaic.tcl source $ds9(root)/library/smosaiciraf.tcl source $ds9(root)/library/smosaicwcs.tcl source $ds9(root)/library/smooth.tcl source $ds9(root)/library/srgbcube.tcl source $ds9(root)/library/starbase.tcl source $ds9(root)/library/stdfbox.tcl source $ds9(root)/library/stsci.tcl source $ds9(root)/library/template.tcl source $ds9(root)/library/text.tcl source $ds9(root)/library/tkfbox.tcl source $ds9(root)/library/tsv.tcl source $ds9(root)/library/url.tcl source $ds9(root)/library/util.tcl source $ds9(root)/library/var.tcl source $ds9(root)/library/vector.tcl source $ds9(root)/library/vla.tcl source $ds9(root)/library/vlss.tcl source $ds9(root)/library/vo.tcl source $ds9(root)/library/vot.tcl source $ds9(root)/library/wcs.tcl source $ds9(root)/library/xmfbox.tcl source $ds9(root)/library/xmlrpc.tcl source $ds9(root)/library/xpa.tcl switch [tk windowingsystem] { x11 {} aqua {source $ds9(root)/library/macosx.tcl} win32 {source $ds9(root)/library/win32.tcl} } saods9/ds9/library/srgbcube.tcl000644 000765 000000 00000002366 12705445650 017046 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadSRGBCubeFile {hdr fn} { global loadParam global current switch -- [$current(frame) get type] { base - 3d { Error [msgcat::mc {Unable to load RGB image into a non-rgb frame}] return } rgb {} } set loadParam(file,type) fits set loadParam(file,mode) {rgb cube} set loadParam(load,type) smmap set loadParam(file,name) $fn set loadParam(file,header) $hdr # mask not supported set loadParam(load,layer) {} ProcessLoad } proc ProcessSRGBCubeCmd {varname iname sock fn} { upvar $varname var upvar $iname i switch -- [string tolower [lindex $var $i]] { new { incr i CreateRGBFrame } mask { incr i # not supported } slice { incr i # not supported } } StartLoad if {$sock != {}} { # xpa if {0} { # not supported } else { LoadSRGBCubeFile [lindex $var $i] [lindex $var [expr $i+1]] } } else { # comm if {0} { # not supported } else { LoadSRGBCubeFile [lindex $var $i] [lindex $var [expr $i+1]] } } FinishLoad } saods9/ds9/library/starbase.tcl000644 000765 000000 00000025445 12705445650 017061 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # #### # # starbase.tcl -- Tcl interface to starbase # # #### # Starbase Tables Interface # set starbase_debug 0 proc Starbase {} { global Starbase return $Starbase(version) } set Starbase(version) "Starbase Tcl Driver 1.0" proc starbase_nrows { D } { upvar $D data; return $data(Nrows) } proc starbase_ncols { D } { upvar $D data; return $data(Ncols) } proc starbase_get { D row col } { upvar $D data; return $data($row,$col) } proc starbase_set { D row col val } { upvar $D data; set data($row,$col) $val; } proc starbase_colname { D num } { upvar $D data; return $data(0,$num) } #proc starbase_columns { D } { upvar $D data; return $data(Header) } proc starbase_colnum { D name } { upvar $D data; return $data($name) } proc starbase_columns {t} { upvar $t T set row {} set Ncols $T(Ncols) for { set c 1 } { $c <= $Ncols } { incr c } { lappend row $T(0,$c) } return $row } proc starbase_init { t } { upvar t T set T(Nrows) 0 set T(Ncols) 0 set T(Header) "" } # Set up a starbase data array for use with ted # proc starbase_driver { Dr } { upvar $Dr driver set driver(nrows) starbase_nrows set driver(ncols) starbase_ncols set driver(get) starbase_get set driver(set) starbase_set set driver(colname) starbase_colname set driver(colnum) starbase_colnum set driver(columns) starbase_columns set driver(colins) starbase_colins set driver(coldel) starbase_coldel set driver(colapp) starbase_colapp set driver(rowins) starbase_rowins set driver(rowdel) starbase_rowdel set driver(rowapp) starbase_rowapp } starbase_driver Starbase proc starbase_new { t args } { upvar $t T set T(Header) $args set T(Ndshs) [llength $T(Header)] set T(HLines) 2 starbase_colmap T set T(Nrows) 0 } proc starbase_colmap { h } { upvar $h H set c 0 foreach column $H(Header) { incr c set column [string trim $column] set H($column) $c set H(0,$c) $column } set H(Ncols) $c } proc starbase_coldel { t here } { upvar $t T set Ncols $T(Ncols) set T(Header) [lreplace $T(Header) [expr $here - 1] [expr $here - 1] starbase_colmap T for { set row 1 } { $row <= $T(Nrows) } { incr row } { for { set col $here } { $col < $Ncols } { incr col } { if { [catch { set val $T($row,[expr $col + 1]) }] } { set T($row,$col) "" } else { set T($row,$col) $val } } } } proc starbase_colins { t name here } { upvar $t T if { [info exists $T(Header)] == 0 } { set T(Header) $name } else { set T(Header) [linsert $T(Header) [expr $here - 1] $name] } starbase_colmap T for { set row 1 } { $row <= $T(Nrows) } { incr row } { for { set col $T(Ncol) } { $col > $here } { incr col -1 } { if { [catch { set val $T($row,[expr $col - 1]) }] } { set T($row,$col) "" } else { set T($row,$col) $val } } } for { set row 1 } { $row <= $T(Nrows) } { incr row } { set T($row,$here) "" } } proc starbase_header { h fp } { upvar $h H global starbase_line set N 1 if { [info exists starbase_line] } { set line $starbase_line set n 1 set H(H_$n) $line if { [regexp -- {^ *(-)+ *(\t *(-)+ *)*} $line] } break if { $n >= 2 } { set ind [string first "\t" $H(H_[expr $n-1])] if { $ind >= 0 } { set name [string range $H(H_[expr $n-1]) 0 [expr $ind - 1]] incr ind set H(H_$name) [string range $H(H_[expr $n-1]) $ind end] set H(N_$name) [expr $n-1] } # set l [split $H(H_[expr $n-1]) "\t"] # if { [llength $l] > 1 } { # set name [lindex $l 0] # set H(H_$name) [lrange $l 1 end] # set H(N_$name) [expr $n-1] # } } unset starbase_line set N 2 } for { set n $N } { [set eof [gets $fp line]] != -1 } { incr n } { set H(H_$n) $line if { [regexp -- {^ *(-)+ *(\t *(-)+ *)*} $line] } break if { $n >= 2 } { set ind [string first "\t" $H(H_[expr $n-1])] if { $ind >= 0 } { set name [string range $H(H_[expr $n-1]) 0 [expr $ind - 1]] incr ind set H(H_$name) [string range $H(H_[expr $n-1]) $ind end] set H(N_$name) [expr $n-1] } # set l [split $H(H_[expr $n-1]) "\t"] # if { [llength $l] > 1 } { # set name [lindex $l 0] # set H(H_$name) [lrange $l 1 end] # set H(N_$name) [expr $n-1] # } } } if { $eof == -1 } { error "ERROR: in starbase_header: unexpected eof" } set H(H_$n) $line set H(HLines) $n set H(Header) [split $H(H_[expr $n-1]) "\t"] set H(Dashes) [split $H(H_$n) "\t"] set H(Ndshs) [llength $H(Dashes)] starbase_colmap H return H(Header) } proc starbase_hdrget { h name } { upvar $h H return $H(H_$name) } proc starbase_hdrset { h name value } { upvar #0 $h H if { ![info exists H(H_$name)] } { set n [incr H(HLines)] set H(H_[expr $n-0]) $H(H_[expr $n-1]) set H(H_[expr $n-1]) $H(H_[expr $n-2]) set H(N_$name) [expr $n-2] } set H(H_$name) $value set H(H_$H(N_$name)) "$name $value" } proc starbase_hdrput { h fp } { upvar $h H if { ![info exists H(HLines)] || ($H(HLines) == 0) } { return } set nl [expr $H(HLines) - 2] for { set l 1 } { $l <= $nl } { incr l } { puts $fp $H(H_$l) } if { ![info exists H(Ncols)] || ($H(Ncols) == 0) } { return } set nc $H(Ncols) for { set c 1 } { $c <= $nc } { incr c } { puts -nonewline $fp "$H(0,$c)" if { $c != $nc } { puts -nonewline $fp "\t" } else { puts -nonewline $fp "\n" } } for { set c 1 } { $c <= $nc } { incr c } { set len [string length $H(0,$c)] for { set d 1 } { $d <= $len } { incr d } { puts -nonewline $fp "-" } if { $c != $nc } { puts -nonewline $fp "\t" } else { puts -nonewline $fp "\n" } } } proc starbase_hdrput_ { h varname } { upvar $h H upvar $varname var if { ![info exists H(HLines)] || ($H(HLines) == 0) } { return } set nl [expr $H(HLines) - 2] for { set l 1 } { $l <= $nl } { incr l } { append var "$H(H_$l)\n" } if { ![info exists H(Ncols)] || ($H(Ncols) == 0) } { return } set nc $H(Ncols) for { set c 1 } { $c <= $nc } { incr c } { append var "$H(0,$c)" if { $c != $nc } { append var "\t" } else { append var "\n" } } for { set c 1 } { $c <= $nc } { incr c } { set len [string length $H(0,$c)] for { set d 1 } { $d <= $len } { incr d } { append var "-" } if { $c != $nc } { append var "\t" } else { append var "\n" } } } proc starbase_readfp { t fp } { upvar $t T starbase_header T $fp set NCols [starbase_ncols T] for { set r 1 } { [gets $fp line] != -1 } { incr r } { if { [string index $line 0] == "\f" } { global starbase_line set starbase_line [string range $line 1 end] break } set c 1 foreach val [split $line "\t"] { set T($r,$c) [string trim $val] incr c } for { } { $c <= $NCols } { incr c } { set T($r,$c) {} } } set T(Nrows) [expr $r-1] } proc starbase_read { t file } { upvar $t T set fp [open $file] starbase_readfp T $fp close $fp set T(filename) $file } proc starbase_writefp { t fp } { upvar $t T starbase_hdrput T $fp if { ![info exists T(Nrows)] || ($T(Nrows) == 0) } { return } set nr $T(Nrows) set nc $T(Ncols) for { set r 1 } { $r <= $nr } { incr r } { for { set c 1 } { $c < $nc } { incr c } { if { [catch { set val $T($r,$c) }] } { set val "" } puts -nonewline $fp "$val " } if { [catch { set val $T($r,$c) }] } { set val "" } puts $fp $val } } proc starbase_write { t file } { upvar $t T set fp [open $file w] starbase_writefp T $fp close $fp } proc starbase_write_ { t } { upvar $t T set rr {} starbase_hdrput_ T rr if { ![info exists T(Nrows)] || ($T(Nrows) == 0) } { return } set nr $T(Nrows) set nc $T(Ncols) for { set r 1 } { $r <= $nr } { incr r } { for { set c 1 } { $c < $nc } { incr c } { if { [catch { set val $T($r,$c) }] } { set val "" } append rr "$val " } if { [catch { set val $T($r,$c) }] } { set val "" } append rr "$val\n" } return $rr } proc starbase_rowins { t row } { upvar $t T incr T(Nrows) set nr $T(Nrows) set nc $T(Ncols) for { set r $nr } { $r > $row } { set r [expr $r-1] } { for { set c 1 } { $c <= $nc } { incr c } { if { [catch { set val $T([expr $r-1],$c) }] } { set val "" } set T($r,$c) $val } } for { set c 1 } { $c <= $nc } { incr c } { set T($r,$c) "" } } proc starbase_rowdel { t row } { upvar $t T incr T(Nrows) -1 set nr $T(Nrows) set nc $T(Ncols) for { set r $row } { $r <= $nr } { incr r } { for { set c 1 } { $c <= $nc } { incr c } { if { [catch { set val $T([expr $r+1],$c) }] } { set val "" } set T($r,$c) $val } } for { set c 1 } { $c <= $nc } { incr c } { set T($r,$c) "" } } proc starbase_httpreader { t wait sock http } { global $t global starbase_debug upvar #0 $wait W upvar #0 $t T set T(http) $http if { ![info exists T(state)] } { error "ERROR: starbase_httpreader not properly initialized" } switch -- $T(state) { 0 { fconfigure $sock -blocking 1 set T(state) 1 set T(Nrows) 0 set T(HLines) 0 } 1 { incr ${t}(HLines) set n $T(HLines) if { [gets $sock line] == -1 } { set T(state) -1 set T(HLines) [expr $T(HLines) - 1] set T(Nrows) 0 return } set T(H_$n) $line set l [split $line] if { [llength $l] > 1 } { set T(H_[lindex $l 0]) [lrange $l 1 end] } set T(H_$n) $line if { [regexp -- {^ *(-)+ *(\t *(-)+ *)*} $line] } { set T(Header) [split $T(H_[expr $n-1]) "\t"] set T(Dashes) [split $T(H_$n) "\t"] set T(Ndshs) [llength $T(Dashes)] starbase_colmap T set T(state) 2 } } 2 { if { [gets $sock line] == -1 } { set T(state) 0 } else { if { $starbase_debug } { puts [format "starbase_httpreader: %s" $line] } incr ${t}(Nrows) set r $T(Nrows) set NCols [starbase_ncols T] set c 1 foreach val [split $line "\t"] { set T($r,$c) $val incr c } for { } { $c <= $NCols } { incr c } { set T($r,$c) {} } } } default { error "ERROR: unknown switch in starbase_httpreader" } } } proc starbase_cancel { t wait http } { upvar #0 $wait W upvar #0 $t T # set T(state) 0 set W 1 } proc starbase_http { t url wait } { upvar #0 $t T set T(state) 0 set T(http) [http::geturl $url \ -handler [list starbase_httpreader $t $wait] \ -command [list starbase_cancel $t $wait]] } proc starbase_httpkill { t } { upvar #0 $t T http::reset $T(http) } saods9/ds9/library/stdfbox.tcl000644 000765 000000 00000030402 12764304414 016710 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # do this after the language has been defined and the prefs sourced proc InitDialogBox {} { global ds9 global pds9 global env global fitsurl set fitsurl {} global fitsfbox set fitsfbox(file) {ds9.fits} set fitsfbox(dir) {} set fitsfbox(types) [list \ [list {FITS} {*.fits}] \ [list {FITS} {*.FITS}] \ [list {FITS} {*.fit}] \ [list {FITS} {*.FIT}] \ [list {FITS} {*.fts}] \ [list {FITS} {*.FTS}] \ [list {FITS} {*.ds}] \ [list {FITS} {*.DS}] \ [list {FITS} {*.fits.gz}] \ [list {FITS} {*.fits.bz2}] \ [list {FITS} {*.fits.Z}] \ [list {FITS} {*.fits.z}] \ [list {FITS} {*.fitz}] \ [list {FITS} {*.FITZ}] \ [list {FITS} {*.ftz}] \ [list {FITS} {*.FTZ}] \ [list {FITS} {*.fz}] \ [list {FITS} {*.FZ}] \ ] global savefitsfbox set savefitsfbox(file) {ds9.fits} set savefitsfbox(dir) {} set savefitsfbox(types) [list \ [list {FITS} {*.fits}] \ [list {FITS} {*.fit}] \ [list {FITS} {*.fts}] \ [list {FITS} {*.fits.gz}] \ [list {FITS} {*.fits.bz2}] \ [list {FITS} {*.fits.Z}] \ [list {FITS} {*.fits.z}] \ ] global epsfbox set epsfbox(file) {ds9.eps} set epsfbox(dir) {} set epsfbox(types) [list \ [list {EPS} {*.eps}] \ ] global arrayfbox set arrayfbox(file) {ds9.arr} set arrayfbox(dir) {} set arrayfbox(types) [list \ [list [::msgcat::mc {Array}] {*.arr}] \ ] global rgbarrayfbox set rgbarrayfbox(file) {ds9.rgb} set rgbarrayfbox(dir) {} set rgbarrayfbox(types) [list \ [list [::msgcat::mc {RGB Array}] {*.rgb}] \ ] global nrrdfbox set nrrdfbox(file) {ds9.nrrd} set nrrdfbox(dir) {} set nrrdfbox(types) [list \ [list {NRRD} {*.nrrd}] \ ] global envifbox set envifbox(file) {ds9.hdr} set envifbox(dir) {} set envifbox(types) [list \ [list {ENVI} {*.hdr}] \ ] global envi2fbox set envi2fbox(file) {ds9.bsq} set envi2fbox(dir) {} set envi2fbox(types) [list \ [list {ENVI2} {*.bil}] \ [list {ENVI2} {*.bip}] \ [list {ENVI2} {*.bsq}] \ [list {ENVI2} {*.cube}] \ ] global giffbox set giffbox(file) {ds9.gif} set giffbox(dir) {} set giffbox(types) [list \ [list {GIF} {*.gif}] \ ] global jpegfbox set jpegfbox(file) {ds9.jpeg} set jpegfbox(dir) {} set jpegfbox(types) [list \ [list {JPEG} {*.jpeg}] \ [list {JPEG} {*.jpg}] \ ] global tifffbox set tifffbox(file) {ds9.tiff} set tifffbox(dir) {} set tifffbox(types) [list \ [list {TIFF} {*.tiff}] \ [list {TIFF} {*.tif}] \ ] global pngfbox set pngfbox(file) {ds9.png} set pngfbox(dir) {} set pngfbox(types) [list \ [list {PNG} {*.png}] \ ] global mpegfbox set mpegfbox(file) {ds9.mpeg} set mpegfbox(dir) {} set mpegfbox(types) [list \ [list {MPEG} {*.mpeg}] \ [list {MPEG} {*.mpg}] \ ] global pixelfbox set pixelfbox(file) {ds9.pix} set pixelfbox(dir) {} set pixelfbox(types) [list \ [list {PIX} {*.pix}] \ ] global markerfbox set markerfbox(file) {ds9.reg} set markerfbox(dir) {} set markerfbox(types) [list \ [list {REG} {*.reg}] \ [list {FITS} {*.fits}] \ [list {XML} {*.xml}] \ ] global templatefbox set templatefbox(file) {ds9.tpl} set templatefbox(dir) {} set templatefbox(types) \ [list [list {TPL} {*.tpl}] [list [::msgcat::mc {All}] {*}] ] global colorbarfbox set colorbarfbox(file) {ds9.sao} set colorbarfbox(dir) {} set colorbarfbox(types) [list \ [list [::msgcat::mc {Colormap}] {*.sao}] \ [list [::msgcat::mc {Colormap}] {*.lut}] \ ] global contrastbiasfbox set contrastbiasfbox(file) {ds9.cb} set contrastbiasfbox(dir) {} set contrastbiasfbox(types) [list \ [list {CB} {*.cb}] \ ] global colortagfbox set colortagfbox(file) {ds9.tag} set colortagfbox(dir) {} set colortagfbox(types) [list \ [list {Colortag} {*.tag}] \ ] global pssavfbox set pssavfbox(file) {ds9.ps} set pssavfbox(dir) {} set pssavfbox(types) [list \ [list {PS} {*.ps}] \ ] global prsavfbox set prsavfbox(file) {ds9.txt} set prsavfbox(dir) {} set prsavfbox(types) [list \ [list {TXT} {*.txt}] \ ] # contour load global contourlfbox set contourlfbox(file) {ds9.ctr} set contourlfbox(dir) {} set contourlfbox(types) [list \ [list {CTR} {*.ctr}] \ [list {CON} {*.con}] \ ] # contour save global contoursfbox set contoursfbox(file) {ds9.ctr} set contoursfbox(dir) {} set contoursfbox(types) [list \ [list {CTR} {*.ctr}] \ ] # contour level load global contourlevlfbox set contourlevlfbox(file) {ds9.ctr} set contourlevlfbox(dir) {} set contourlevlfbox(types) [list \ [list {CTR} {*.ctr}] \ [list {LEV} {*.lev}] \ ] # contour level save global contourlevsfbox set contourlevsfbox(file) {ds9.lev} set contourlevsfbox(dir) {} set contourlevsfbox(types) [list \ [list {LEV} {*.lev}] \ ] global gridfbox set gridfbox(file) {ds9.grd} set gridfbox(dir) {} set gridfbox(types) [list \ [list {GRD} {*.grd}] \ ] global catfbox set catfbox(file) {ds9.cat} set catfbox(dir) {} set catfbox(types) [list \ [list [::msgcat::mc {Catalog}] {*.cat}] \ [list [::msgcat::mc {Catalog}] {*.rdb}] \ ] global cattsvfbox set cattsvfbox(file) {ds9.tsv} set cattsvfbox(dir) {} set cattsvfbox(types) [list \ [list [::msgcat::mc {Catalog}] {*.tsv}] \ [list [::msgcat::mc {Catalog}] {*.csv}] \ ] global catvotfbox set catvotfbox(file) {ds9.xml} set catvotfbox(dir) {} set catvotfbox(types) [list \ [list [::msgcat::mc {Catalog}] {*.xml}] \ [list [::msgcat::mc {Catalog}] {*.vot}] \ [list [::msgcat::mc {Catalog}] {*.votable}] \ ] global catfltfbox set catfltfbox(file) {ds9.flt} set catfltfbox(dir) {} set catfltfbox(types) [list \ [list {FLT} {*.flt}] \ ] global catsymfbox set catsymfbox(file) {ds9.sym} set catsymfbox(dir) {} set catsymfbox(types) [list \ [list {SYM} {*.sym}] \ ] global catcdssrchfbox set catcdssrchfbox(file) {ds9.cds} set catcdssrchfbox(dir) {} set catcdssrchfbox(types) [list \ [list {CDS} {*.cds}] \ ] global analysisfbox set analysisfbox(file) {ds9.ans} set analysisfbox(dir) {} set analysisfbox(types) [list \ [list [::msgcat::mc {Analysis}] {*.ans}] \ [list [::msgcat::mc {Analysis}] {*.ds9}] \ ] global analysisparamfbox set analysisparamfbox(file) {} set analysisparamfbox(dir) {} set analysisparamfbox(types) [list \ ] global apsavfbox set apsavfbox(file) {ds9.ps} set apsavfbox(dir) {} set apsavfbox(types) [list \ [list {PS} {*.ps}] \ ] global apdatafbox set apdatafbox(file) {ds9.dat} set apdatafbox(dir) {} set apdatafbox(types) [list \ [list {DAT} {*.dat}] \ ] global apconfigfbox set apconfigfbox(file) {ds9.plt} set apconfigfbox(dir) {} set apconfigfbox(types) [list \ [list {PLT} {*.plt}] \ ] global textfbox set textfbox(file) {ds9.txt} set textfbox(dir) {} set textfbox(types) [list \ [list {TXT} {*.txt}] \ ] global tclfbox set tclfbox(file) {ds9.tcl} set tclfbox(dir) {} set tclfbox(types) [list \ [list {TCL} {*.tcl}] \ ] global hvhtmlfbox set hvhtmlfbox(file) {ds9.html} set hvhtmlfbox(dir) {} set hvhtmlfbox(types) [list \ [list {HTML} {*.html}] \ [list {HTML} {*.htm}] \ ] global wcsfbox set wcsfbox(file) {ds9.wcs} set wcsfbox(dir) {} set wcsfbox(types) [list \ [list {WCS} {*.wcs}] \ ] global backupfbox set backupfbox(file) {ds9.bck} set backupfbox(dir) {} set backupfbox(types) [list \ [list {BCK} {*.bck}] \ ] } proc SetFileLast {format item} { switch $format { mecube - multiframe - mosaic - mosaicimage - rgbcube - rgbimage - fits {FileLast fitsfbox $item} array {FileLast arrayfbox $item} rgbarray {FileLast rgbarrayfbox $item} envi {FileLast envifbox $item} envi2 {FileLast envi2fbox $item} gif {FileLast giffbox $item} jpeg {FileLast jpegfbox $item} nrrd {FileLast nrrdfbox $item} tiff {FileLast tifffbox $item} png {FileLast pngfbox $item} sfits - srgbcube - sfits - smosaic - url {} } } proc ExtToFormat {fn} { switch -- [file extension $fn] { .fits - .FITS - .fit - .FIT - .fts - .FTS - .ds - .DS - .fits.gz - .fits.bz2 - .fits.Z - .fits.z - .fitz - .FITZ - .ftz - .FTZ - .fz - .FZ {return fits} .arr - .array {return array} .rgb {return rgbarray} .nrrd {return nrrd} .eps - .epsf {return eps} .gif - .giff {return gif} .jpg - .jpeg {return jpeg} .tif - .tiff {return tiff} .png {return png} .mpg - .mpeg {return mpeg} .hdr - .bil - .bip - .bsq - .cube {return envi} } } # used by backup proc OpenFileDialog {varname} { return [FileDialog $varname tk_getOpenFile] } proc SaveFileDialog {varname} { return [FileDialog $varname tk_getSaveFile] } proc FileDialog {varname which} { global pds9 switch -- $pds9(dialog) { motif {return [FileDialogMotif $varname $which]} windows {return [FileDialogWindows $varname $which]} native {return [FileDialogNative $varname $which]} } } proc FileDialogMotif {varname which} { upvar #0 $varname var global ds9 global pds9 switch -- $which { tk_getOpenFile {set type open} tk_getSaveFile {set type save} } if {$pds9(dialog,all)} { set types [linsert $var(types) 0 [list [::msgcat::mc {All}] {*}]] } else { set types [linsert $var(types) end [list [::msgcat::mc {All}] {*}]] } set result [::tk::MotifFDialog $type \ -filetypes $types \ -initialdir $var(dir) \ -initialfile $var(file) \ -parent $ds9(top)] if {$result != {}} { set var(file) [file tail $result] set var(dir) [file dirname $result] } return $result } proc FileDialogWindows {varname which} { upvar #0 $varname var global ds9 global pds9 switch -- $which { tk_getOpenFile {set type open} tk_getSaveFile {set type save} } if {$pds9(dialog,all)} { set types [linsert $var(types) 0 [list [::msgcat::mc {All}] {*}]] } else { set types [linsert $var(types) end [list [::msgcat::mc {All}] {*}]] } set result [::tk::dialog::file:: $type \ -filetypes $types \ -initialdir $var(dir) \ -initialfile $var(file) \ -parent $ds9(top)] if {$result != {}} { set var(file) [file tail $result] set var(dir) [file dirname $result] } return $result } proc FileDialogNative {varname which} { upvar #0 $varname var global ds9 global pds9 if {$pds9(dialog,all)} { set types [linsert $var(types) 0 [list [::msgcat::mc {All}] {*}]] } else { set types [linsert $var(types) end [list [::msgcat::mc {All}] {*}]] } if {[catch {$which \ -filetypes $types \ -initialdir $var(dir) \ -initialfile $var(file) \ -parent $ds9(top)} result]} { # must have a bad file name, just clear and try again set var(file) {} set var(dir) {} if {[catch {$which \ -filetypes $types \ -parent $ds9(top)} result]} { #ok, something is really wrong catch {$which -parent $ds9(top)} result } } if {$result != {}} { set var(file) [file tail $result] set var(dir) [file dirname $result] } return $result } proc FileLast {varname fn} { upvar #0 $varname var global ds9 switch $ds9(wm) { x11 { set var(file) [file tail $fn] set var(dir) [file dirname $fn] } aqua { # don't conflict with native dialog } win32 {} } } saods9/ds9/library/stsci.tcl000644 000765 000000 00000012207 12741011522 016355 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc STSCIDef {} { global stsci global istsci set istsci(top) .stsci set istsci(mb) .stscimb set stsci(sky) fk5 set stsci(rformat) arcmin set stsci(width) 15 set stsci(height) 15 set stsci(mode) new set stsci(save) 0 set stsci(survey) {all} } proc STSCIDialog {} { global stsci global istsci global wcs if {[winfo exists $istsci(top)]} { raise $istsci(top) return } set varname dstscii upvar #0 $varname var global $varname set var(top) $istsci(top) set var(mb) $istsci(mb) set var(sky) $stsci(sky) set var(skyformat) $wcs(skyformat) set var(rformat) $stsci(rformat) set var(width) $stsci(width) set var(height) $stsci(height) # not used set var(width,pixels) 300 set var(height,pixels) 300 set var(mode) $stsci(mode) set var(save) $stsci(save) set var(survey) $stsci(survey) set w $var(top) IMGSVRInit $varname "STSCI-DSS [msgcat::mc {Server}]" \ STSCIExec STSCIAck ARDone ARError menu $var(mb).survey $var(mb) add cascade -label Survey -menu $var(mb).survey $var(mb).survey add radiobutton -label {POSS2/UKSTU Red} \ -variable ${varname}(survey) -value poss2ukstu_red $var(mb).survey add radiobutton -label {POSS2/UKSTU Infrared} \ -variable ${varname}(survey) -value poss2ukstu_ir $var(mb).survey add radiobutton -label {POSS2/UKSTU Blue} \ -variable ${varname}(survey) -value poss2ukstu_blue $var(mb).survey add radiobutton \ -label {POSS1 (First Generation) Blue} \ -variable ${varname}(survey) -value poss1_blue $var(mb).survey add radiobutton \ -label {POSS1 (First Generation) Red} \ -variable ${varname}(survey) -value poss1_red $var(mb).survey add radiobutton \ -label {Best of a combined list of all plates} \ -variable ${varname}(survey) -value all $var(mb).survey add radiobutton \ -label {Quick-V Survey} \ -variable ${varname}(survey) -value quickv $var(mb).survey add radiobutton \ -label {HST Phase 2 Target Positioning (GSC 2)} \ -variable ${varname}(survey) -value phase2_gsc2 $var(mb).survey add radiobutton \ -label {HST Phase 2 Target Positioning (GSC 1)} \ -variable ${varname}(survey) -value phase2_gsc1 IMGSVRUpdate $varname } proc STSCIExec {varname} { upvar #0 $varname var global $varname if {$var(save)} { set compress none set var(fn) [SaveFileDialog savefitsfbox] if {$var(fn) == {}} { ARDone $varname return } } else { set compress gz set var(fn) [tmpnam {.fits.gz}] } # size - convert to arcmin switch -- $var(rformat) { degrees { set ww [expr $var(width)*60.] set hh [expr $var(height)*60.] } arcmin { set ww $var(width) set hh $var(height) } arcsec { set ww [expr $var(width)/60.] set hh [expr $var(height)/60.] } } if {$ww>60} { set ww 60 } if {$hh>60} { set hh 60 } # query set var(query) [http::formatQuery r $var(x) d $var(y) e J2000 w $ww h $hh f fits c $compress v $var(survey)] set url "http://stdatu.stsci.edu/cgi-bin/dss_search" IMGSVRGetURL $varname $url } proc STSCIAck {varname} { upvar #0 $varname var global $varname set msg {Acknowledgments for the DSS-STSCI The Digitized Sky Surveys were produced at the Space Telescope Science Institute under U.S. Government grant NAG W-2166. The images of these surveys are based on photographic data obtained using the Oschin Schmidt Telescope on Palomar Mountain and the UK Schmidt Telescope. The plates were processed into the present compressed digital form with the permission of these institutions. The National Geographic Society - Palomar Observatory Sky Atlas (POSS-I) was made by the California Institute of Technology with grants from the National Geographic Society. The Second Palomar Observatory Sky Survey (POSS-II) was made by the California Institute of Technology with funds from the National Science Foundation, the National Geographic Society, the Sloan Foundation, the Samuel Oschin Foundation, and the Eastman Kodak Corporation. The Oschin Schmidt Telescope is operated by the California Institute of Technology and Palomar Observatory. The UK Schmidt Telescope was operated by the Royal Observatory Edinburgh, with funding from the UK Science and Engineering Research Council (later the UK Particle Physics and Astronomy Research Council), until 1988 June, and thereafter by the Anglo-Australian Observatory. The blue plates of the southern Sky Atlas and its Equatorial Extension (together known as the SERC-J), as well as the Equatorial Red (ER), and the Second Epoch [red] Survey (SES) were all taken with the UK Schmidt. } SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \ 80 40 insert top $msg } # Process Cmds proc ProcessSTSCICmd {varname iname} { upvar $varname var upvar $iname i STSCIDialog IMGSVRProcessCmd $varname $iname dstscii } proc ProcessSendSTSCICmd {proc id param} { STSCIDialog IMGSVRProcessSendCmd $proc $id $param dstscii } saods9/ds9/library/template.tcl000644 000765 000000 00000006774 12705445650 017074 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc TemplateDef {} { global itemplate # chandra set itemplate(chandra,acis,acis-i) {chandra/acis/acis-i.tpl} set itemplate(chandra,acis,acis-s) {chandra/acis/acis-s.tpl} set itemplate(chandra,acis,acis-is) {chandra/acis/acis-is.tpl} set itemplate(chandra,acis,acis-si) {chandra/acis/acis-si.tpl} set itemplate(chandra,hrc,hrc-i) {chandra/hrc/hrc-i.tpl} set itemplate(chandra,hrc,hrc-s) {chandra/hrc/hrc-s.tpl} # xmm set itemplate(xmm,epicmos1) {xmm/epicmos1.tpl} set itemplate(xmm,epicmos2) {xmm/epicmos2.tpl} set itemplate(xmm,epicpn) {xmm/epicpn.tpl} # heasarc # suzaku set itemplate(heasarc,suzaku,hxd) {heasarc/suzaku/hxd.tpl} set itemplate(heasarc,suzaku,xis) {heasarc/suzaku/xis.tpl} set itemplate(heasarc,suzaku,xrs) {heasarc/suzaku/xrs.tpl} # mmt # megacam set itemplate(mmt,megacam,megacam-amp) {mmt/megacam/megacam-amp.tpl} set itemplate(mmt,megacam,megacam-amp-guide) {mmt/megacam/megacam-amp-guide.tpl} set itemplate(mmt,megacam,megacam-chip) {mmt/megacam/megacam-chip.tpl} set itemplate(mmt,megacam,megacam-chip-guide) {mmt/megacam/megacam-chip-guide.tpl} # hecto set itemplate(mmt,hecto,hectospec) {mmt/hecto/hectospec.tpl} set itemplate(mmt,hecto,hectochelle) {mmt/hecto/hectochelle.tpl} # mmirs set itemplate(mmt,mmirs,image) {mmt/mmirs/image.tpl} set itemplate(mmt,mmirs,longslit) {mmt/mmirs/longslit.tpl} set itemplate(mmt,mmirs,mask) {mmt/mmirs/mask.tpl} # others set itemplate(mmt,swirc) {mmt/swirc.tpl} set itemplate(mmt,binospec) {mmt/binospec.tpl} } proc CreateFOVMenu {} { global ds9 global itemplate global marker set mm $ds9(mb).region.fov menu $mm set l0 {} set l1 {} set l2 {} foreach t [lsort [array names itemplate]] { set tt [split $t ","] set t0 [lindex $tt 0] set t1 [lindex $tt 1] set t2 [lindex $tt 2] if {$l0 != $t0} { menu $mm.$t0 $mm add cascade -label [string toupper $t0] -menu $mm.$t0 set l0 $t0 set l1 {} set l2 {} } if {$l1 != $t1} { if {$t2 != {}} { menu $mm.$t0.$t1 $mm.$t0 add cascade -label [string toupper $t1] \ -menu $mm.$t0.$t1 set l1 $t1 set l2 {} } else { $mm.$t0 add radiobutton \ -label [string toupper $t1] -variable marker(shape) \ -value $t continue } } $mm.$t0.$t1 add radiobutton -label [string toupper $t2] \ -variable marker(shape) -value $t } } proc OpenTemplateMarker {} { LoadTemplateMarker [OpenFileDialog templatefbox] } proc LoadTemplateMarker {fn} { global ds9 global current if {$current(frame) != {} && $fn != {}} { set cc [$ds9(canvas) coords $current(frame)] set ww [lindex [$current(frame) configure -width] 4] set hh [lindex [$current(frame) configure -height] 4] set xx [expr [lindex $cc 0]+$ww/2.0] set yy [expr [lindex $cc 1]+$hh/2.0] catch {$current(frame) marker create template "\{$fn\}" $xx $yy} } } proc LoadTemplateMarkerAt {fn ra dec sys sky} { global current if {$current(frame) != {} && $fn != {}} { catch {$current(frame) marker create template "\{$fn\}" $sys $sky $ra $dec} } } proc SaveAsTemplateMarker {} { global current if {$current(frame) != {}} { set fn [SaveFileDialog templatefbox] if {$fn != {}} { $current(frame) marker save template "\{$fn\}" } } } saods9/ds9/library/text.tcl000644 000765 000000 00000004061 12705445650 016230 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc TextDialog {varname} { upvar #0 $varname var global $varname # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # variables set var(canrotate) [$var(frame) get marker $var(id) text rotate] # procs set var(which) text set var(proc,apply) TextApply set var(proc,close) TextClose set var(proc,coordCB) TextCoordCB # base MarkerBaseCenterDialog $varname # init MarkerBaseCenterRotateCB $varname # callbacks $var(frame) marker $var(id) callback rotate MarkerBaseCenterRotateCB \ $varname set f $var(top).param # Angle ttk::label $f.tangle -text [msgcat::mc {Angle}] ttk::entry $f.angle -textvariable ${varname}(angle) -width 13 ttk::label $f.uangle -text [msgcat::mc {Degrees}] # Rotate ttk::label $f.trotate -text [msgcat::mc {Rotate}] ttk::checkbutton $f.rotate -variable ${varname}(canrotate) \ -command "TextRotate $varname" grid $f.tangle $f.angle $f.uangle -padx 2 -pady 2 -sticky w grid $f.trotate $f.rotate -padx 2 -pady 2 -sticky w } # actions proc TextClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback rotate MarkerBaseCenterRotateCB MarkerBaseCenterClose $varname } proc TextApply {varname} { upvar #0 $varname var global $varname MarkerBaseCenterRotate $varname MarkerBaseCenterApply $varname } proc TextRotate {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) text rotate $var(canrotate) } # callbacks proc TextCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "TextCoordCB" } MarkerBaseCoordCB $varname MarkerBaseCenterMoveCB $varname MarkerBaseCenterRotateCB $varname } saods9/ds9/library/tkfbox.tcl000644 000765 000000 00000113134 12745705303 016541 0ustar00joyewheel000000 000000 # tkfbox.tcl -- # # Implements the "TK" standard file selection dialog box. This dialog # box is used on the Unix platforms whenever the tk_strictMotif flag is # not set. # # The "TK" standard file selection dialog box is similar to the file # selection dialog box on Win95(TM). The user can navigate the # directories by clicking on the folder icons or by selecting the # "Directory" option menu. The user can select files by clicking on the # file icons or by entering a filename in the "Filename:" entry. # # Copyright (c) 1994-1998 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # namespace eval ::tk::dialog {} namespace eval ::tk::dialog::file { namespace import -force ::tk::msgcat::* variable showHiddenBtn 0 variable showHiddenVar 1 # Create the images if they did not already exist. if {![info exists ::tk::Priv(updirImage)]} { set ::tk::Priv(updirImage) [image create photo -data { iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABmJLR0QA/gD+AP7rGN SCAAAACXBIWXMAAA3WAAAN1gGQb3mcAAAACXZwQWcAAAAWAAAAFgDcxelYAAAENUlE QVQ4y7WUbWiVZRjHf/f9POcc9+Kc5bC2aIq5sGG0XnTzNU13zAIlFMNc9CEhTCKwCC JIgt7AglaR0RcrolAKg14+GBbiGL6xZiYyy63cmzvu7MVznnOe537rw7bDyvlBoT/c n+6L3/3nf13XLZLJJP+HfICysjKvqqpq+rWKysvLR1tbW+11g+fPn/+bEGIe4KYqCs Owu66u7oG2trah6wJrrRc0NTVhjME5h7Vj5pxzCCE4duxYZUdHx/aGhoZmgJ+yb+wF uCO19RmAffv25f8LFslkktraWtvU1CS6u7vRWmOtxVpbAPu+T0tLS04pFU/J34Wd3S cdFtlfZWeZBU4IcaS5uXn1ZLAEMMY4ay1aa4wx/zpKKYIgoL6+vmjxqoXe5ZLTcsPq bTyycjODpe1y3WMrvDAMV14jCuW0VhhjiJQpOJ5w7Zwjk8/y9R+vsHHNNq6oFMrkeX BxI+8d2sktap3YvOPD0lRQrH+Z81fE7t3WB4gihVKazsuaA20aKSUgAG/seQdy2l6W 37+EyopqTv39I6HJUT2zlnlza2jLdgiTaxwmDov6alLHcZUTzXPGGAauWJbfO4dHl9 bgJs3HyfNf0N4ZsOa+jbT3/ownY/hO09p1kBULtjBw+Tvq7xzwauds4dWPDleAcP5E xlprgtBRUZRgYCRPTzoHwEi2g6OnX+eFrW/RM9qBE4p43CeTz5ATaU6nDrFm2cPs/+ E1SopqkZ7MFJqntXZaa7IKppckwIEvJbg8LWd28OT6nVihCPQQ8UScWCLGqO4hXuQx qDtJ204eWrqWb1ufRspwtABWaqx5gRKUFSdwDnxPcuLcyyxbuIyaqntIBV34MY9YzC Owg+S9YeJFkniRpGPkCLMrZzG3+jbktA/KClMxFoUhiKC0OAbAhd79CO8i6xe/STyW 4O7KVRgUJ/sP0heeJV4kEVKw/vZd40sFKxat4mLvp6VLdvnb/XHHGGPIKwBBpC1/9n 3DpfRZnn9/AwCxRII9O79kVPdjvByxuET6Ai8mePeTt4lyheXzhOSpCcdWa00uckTG kckbGu76nEhbIm2xznH4VB3OWYaiXqQn8GKSWGIMHuXyPL76LBcupmhp69pz4uMnXi w4VloTGcdQRtGdzmHs1f+RdYZslMZJhzUOHVnceN1ooEiP5JUzdqCQMWCD0JCIeQzn NNpO+clhrCYf5rC+A2cxWmDUWG2oHEOZMEKIwclgMnnLrTeXUV7sUzpNXgU9DmijWV v9LEKCkAIhKIBnlvpks6F21qUZ31u/sbExPa9h0/RzwzMov2nGlG5TmW1YOzzlnSfL mVnyGf19Q7lwZHBp+1fPtflAIgiC7389n9qkihP+lWyeqfUO15ZwQTqlw9H+o2cOvN QJCAHEgEqgYnI0NyALjAJdyWQy7wMa6AEujUdzo3LjcAXwD/XCTKIRjWytAAAAJXRF WHRjcmVhdGUtZGF0ZQAyMDA5LTA0LTA2VDIxOjI1OjQxLTAzOjAw8s+uCAAAACV0RV h0bW9kaWZ5LWRhdGUAMjAwOC0wMS0wM1QxNTowODoyMS0wMjowMJEc/44AAAAZdEVY dFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC }] } if {![info exists ::tk::Priv(folderImage)]} { set ::tk::Priv(folderImage) [image create photo -data { iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiA AAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBl Lm9yZ5vuPBoAAAHCSURBVDiNpZAxa5NRFIafc+9XLCni4BC6FBycMnbrLpkcgtDVX6 C70D/g4lZX/4coxLlgxFkpiiSSUGm/JiXfveee45AmNlhawXc53HvPee55X+l2u/yP qt3d3Tfu/viatwt3fzIYDI5uBJhZr9fr3TMzzAx3B+D09PR+v98/7HQ6z5fNOWdCCG U4HH6s67oAVDlnV1UmkwmllBUkhMD29nYHeLuEAkyn06qU8qqu64MrgIyqYmZrkHa7 3drc3KTVahFjJITAaDRiPB4/XFlQVVMtHH5IzJo/P4EA4MyB+erWPQB7++zs7ccYvl U5Z08pMW2cl88eIXLZeDUpXzsBkNQ5eP1+p0opmaoCTgzw6fjs6gLLsp58FB60t0Dc K1Ul54yIEIMQ43Uj68pquDmCeJVztpwzuBNE2LgBoMVpslHMCUEAFgDVxQbzVAiA+a K5uGPmmDtZF3VpoUm2ArhqQaRiUjcMf81p1G60UEVhcjZfAFTVUkrgkS+jc06mDX9n vq4YhJ9nlxZExMwMEaHJRutOdWuIIsJFUoBSuTvHJ4YIfP46unV4qdlsjsBRZRtb/X fHd5+C8+P7+J8BIoxFwovfRxYhnhxjpzEAAAAASUVORK5CYII= }] } if {![info exists ::tk::Priv(fileImage)]} { set ::tk::Priv(fileImage) [image create photo -data { iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gva eTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QQWFA84umAmQgAAANpJREFU OMutkj1uhDAQhb8HSLtbISGfgZ+zbJkix0HmFhwhUdocBnMBGvqtTIqIFSReWKK8ai x73nwzHrVt+zEMwwvH9FrX9TsA1trpqKy10+yUzME4jnjvAZB0LzXHkojjmDRNVyh3 A+89zrlVwlKSqKrqVy/J8lAUxSZBSMny4ZLgp54iyPM8UPHGNJ2IomibAKDv+9VlWZ bABbgB5/0WQgSSkC4PF2JF4JzbHN430c4vhAm0TyCJruuClefph4yCBCGT3T3Isoy/ KDHGfDZNcz2SZIx547/0BVRRX7n8uT/sAAAAAElFTkSuQmCC }] } } # ::tk::dialog::file:: -- # # Implements the TK file selection dialog. This dialog is used when the # tk_strictMotif flag is set to false. This procedure shouldn't be # called directly. Call tk_getOpenFile or tk_getSaveFile instead. # # Arguments: # type "open" or "save" # args Options parsed by the procedure. # proc ::tk::dialog::file:: {type args} { variable ::tk::Priv variable showHiddenBtn set dataName __tk_filedialog upvar ::tk::dialog::file::$dataName data Config $dataName $type $args if {$data(-parent) eq "."} { set w .$dataName } else { set w $data(-parent).$dataName } # (re)create the dialog box if necessary # if {![winfo exists $w]} { Create $w TkFDialog } elseif {[winfo class $w] ne "TkFDialog"} { destroy $w Create $w TkFDialog } else { set data(dirMenuBtn) $w.contents.f1.menu set data(dirMenu) $w.contents.f1.menu.menu set data(upBtn) $w.contents.f1.up set data(icons) $w.contents.icons set data(ent) $w.contents.f2.ent set data(typeMenuLab) $w.contents.f2.lab2 set data(typeMenuBtn) $w.contents.f2.menu set data(typeMenu) $data(typeMenuBtn).m set data(okBtn) $w.contents.f2.ok set data(cancelBtn) $w.contents.f2.cancel set data(hiddenBtn) $w.contents.f2.hidden SetSelectMode $w $data(-multiple) } if {$showHiddenBtn} { $data(hiddenBtn) configure -state normal grid $data(hiddenBtn) } else { $data(hiddenBtn) configure -state disabled grid remove $data(hiddenBtn) } # Make sure subseqent uses of this dialog are independent [Bug 845189] unset -nocomplain data(extUsed) # Dialog boxes should be transient with respect to their parent, so that # they will always stay on top of their parent window. However, some # window managers will create the window as withdrawn if the parent window # is withdrawn or iconified. Combined with the grab we put on the window, # this can hang the entire application. Therefore we only make the dialog # transient if the parent is viewable. if {[winfo viewable [winfo toplevel $data(-parent)]]} { wm transient $w $data(-parent) } # Add traces on the selectPath variable # trace add variable data(selectPath) write \ [list ::tk::dialog::file::SetPath $w] $data(dirMenuBtn) configure \ -textvariable ::tk::dialog::file::${dataName}(selectPath) # Cleanup previous menu # $data(typeMenu) delete 0 end $data(typeMenuBtn) configure -state normal -text "" # Initialize the file types menu # if {[llength $data(-filetypes)]} { # Default type and name to first entry set initialtype [lindex $data(-filetypes) 0] set initialTypeName [lindex $initialtype 0] if {$data(-typevariable) ne ""} { upvar #0 $data(-typevariable) typeVariable if {[info exists typeVariable]} { set initialTypeName $typeVariable } } foreach type $data(-filetypes) { set title [lindex $type 0] set filter [lindex $type 1] $data(typeMenu) add command -label $title \ -command [list ::tk::dialog::file::SetFilter $w $type] # [string first] avoids glob-pattern char issues if {[string first ${initialTypeName} $title] == 0} { set initialtype $type } } SetFilter $w $initialtype $data(typeMenuBtn) configure -state normal $data(typeMenuLab) configure -state normal } else { set data(filter) "*" $data(typeMenuBtn) configure -state disabled -takefocus 0 $data(typeMenuLab) configure -state disabled } UpdateWhenIdle $w # Withdraw the window, then update all the geometry information # so we know how big it wants to be, then center the window in the # display (Motif style) and de-iconify it. ::tk::PlaceWindow $w widget $data(-parent) wm title $w $data(-title) # Set a grab and claim the focus too. ::tk::SetFocusGrab $w $data(ent) $data(ent) delete 0 end $data(ent) insert 0 $data(selectFile) $data(ent) selection range 0 end $data(ent) icursor end # Wait for the user to respond, then restore the focus and return the # index of the selected button. Restore the focus before deleting the # window, since otherwise the window manager may take the focus away so we # can't redirect it. Finally, restore any grab that was in effect. vwait ::tk::Priv(selectFilePath) ::tk::RestoreFocusGrab $w $data(ent) withdraw # Cleanup traces on selectPath variable # foreach trace [trace info variable data(selectPath)] { trace remove variable data(selectPath) {*}$trace } $data(dirMenuBtn) configure -textvariable {} return $Priv(selectFilePath) } # ::tk::dialog::file::Config -- # # Configures the TK filedialog according to the argument list # proc ::tk::dialog::file::Config {dataName type argList} { upvar ::tk::dialog::file::$dataName data set data(type) $type # 0: Delete all variable that were set on data(selectPath) the # last time the file dialog is used. The traces may cause troubles # if the dialog is now used with a different -parent option. foreach trace [trace info variable data(selectPath)] { trace remove variable data(selectPath) {*}$trace } # 1: the configuration specs # set specs { {-defaultextension "" "" ""} {-filetypes "" "" ""} {-initialdir "" "" ""} {-initialfile "" "" ""} {-parent "" "" "."} {-title "" "" ""} {-typevariable "" "" ""} } # The "-multiple" option is only available for the "open" file dialog. # if {$type eq "open"} { lappend specs {-multiple "" "" "0"} } # The "-confirmoverwrite" option is only for the "save" file dialog. # if {$type eq "save"} { lappend specs {-confirmoverwrite "" "" "1"} } # 2: default values depending on the type of the dialog # if {![info exists data(selectPath)]} { # first time the dialog has been popped up set data(selectPath) [pwd] set data(selectFile) "" } # 3: parse the arguments # tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList if {$data(-title) eq ""} { if {$type eq "open"} { set data(-title) [mc "Open"] } else { set data(-title) [mc "Save As"] } } # 4: set the default directory and selection according to the -initial # settings # if {$data(-initialdir) ne ""} { # Ensure that initialdir is an absolute path name. if {[file isdirectory $data(-initialdir)]} { set old [pwd] cd $data(-initialdir) set data(selectPath) [pwd] cd $old } else { set data(selectPath) [pwd] } } set data(selectFile) $data(-initialfile) # 5. Parse the -filetypes option # set data(-filetypes) [::tk::FDGetFileTypes $data(-filetypes)] if {![winfo exists $data(-parent)]} { return -code error -errorcode [list TK LOOKUP WINDOW $data(-parent)] \ "bad window path name \"$data(-parent)\"" } # Set -multiple to a one or zero value (not other boolean types like # "yes") so we can use it in tests more easily. if {$type eq "save"} { set data(-multiple) 0 } elseif {$data(-multiple)} { set data(-multiple) 1 } else { set data(-multiple) 0 } } proc ::tk::dialog::file::Create {w class} { set dataName [lindex [split $w .] end] upvar ::tk::dialog::file::$dataName data variable ::tk::Priv global tk_library toplevel $w -class $class if {[tk windowingsystem] eq "x11"} {wm attributes $w -type dialog} pack [ttk::frame $w.contents] -expand 1 -fill both #set w $w.contents # f1: the frame with the directory option menu # set f1 [ttk::frame $w.contents.f1] bind [::tk::AmpWidget ttk::label $f1.lab -text [mc "&Directory:"]] \ <> [list focus $f1.menu] set data(dirMenuBtn) $f1.menu if {![info exists data(selectPath)]} { set data(selectPath) "" } set data(dirMenu) $f1.menu.menu ttk::menubutton $f1.menu -menu $data(dirMenu) -direction flush \ -textvariable [format %s(selectPath) ::tk::dialog::file::$dataName] menu $data(dirMenu) -tearoff 0 $data(dirMenu) add radiobutton -label "" -variable \ [format %s(selectPath) ::tk::dialog::file::$dataName] set data(upBtn) [ttk::button $f1.up] $data(upBtn) configure -image $Priv(updirImage) $f1.menu configure -takefocus 1;# -highlightthickness 2 pack $data(upBtn) -side right -padx 4 -fill both pack $f1.lab -side left -padx 4 -fill both pack $f1.menu -expand yes -fill both -padx 4 # data(icons): the IconList that list the files and directories. # if {$class eq "TkFDialog"} { if { $data(-multiple) } { set fNameCaption [mc "File &names:"] } else { set fNameCaption [mc "File &name:"] } set fTypeCaption [mc "Files of &type:"] set iconListCommand [list ::tk::dialog::file::OkCmd $w] } else { set fNameCaption [mc "&Selection:"] set iconListCommand [list ::tk::dialog::file::chooseDir::DblClick $w] } set data(icons) [::tk::IconList $w.contents.icons \ -command $iconListCommand -multiple $data(-multiple)] bind $data(icons) <> \ [list ::tk::dialog::file::ListBrowse $w] # f2: the frame with the OK button, cancel button, "file name" field # and file types field. # set f2 [ttk::frame $w.contents.f2] bind [::tk::AmpWidget ttk::label $f2.lab -text $fNameCaption -anchor e]\ <> [list focus $f2.ent] # -pady 0 set data(ent) [ttk::entry $f2.ent] # The font to use for the icons. The default Canvas font on Unix is just # deviant. set ::tk::$w.contents.icons(font) [$data(ent) cget -font] # Make the file types bits only if this is a File Dialog if {$class eq "TkFDialog"} { set data(typeMenuLab) [::tk::AmpWidget ttk::label $f2.lab2 \ -text $fTypeCaption -anchor e] # -pady [$f2.lab cget -pady] set data(typeMenuBtn) [ttk::menubutton $f2.menu \ -menu $f2.menu.m] # -indicatoron 1 set data(typeMenu) [menu $data(typeMenuBtn).m -tearoff 0] # $data(typeMenuBtn) configure -takefocus 1 -relief raised -anchor w bind $data(typeMenuLab) <> [list \ focus $data(typeMenuBtn)] } # The hidden button is displayed when ::tk::dialog::file::showHiddenBtn is # true. Create it disabled so the binding doesn't trigger if it isn't # shown. if {$class eq "TkFDialog"} { set text [mc "Show &Hidden Files and Directories"] } else { set text [mc "Show &Hidden Directories"] } set data(hiddenBtn) [::tk::AmpWidget ttk::checkbutton $f2.hidden \ -text $text -state disabled \ -variable ::tk::dialog::file::showHiddenVar \ -command [list ::tk::dialog::file::UpdateWhenIdle $w]] # -anchor w -padx 3 # the okBtn is created after the typeMenu so that the keyboard traversal # is in the right order, and add binding so that we find out when the # dialog is destroyed by the user (added here instead of to the overall # window so no confusion about how much gets called; exactly # once will do). [Bug 987169] set data(okBtn) [::tk::AmpWidget ttk::button $f2.ok \ -text [mc "&OK"] -default active];# -pady 3] bind $data(okBtn) [list ::tk::dialog::file::Destroyed $w] set data(cancelBtn) [::tk::AmpWidget ttk::button $f2.cancel \ -text [mc "&Cancel"] -default normal];# -pady 3] # grid the widgets in f2 # grid $f2.lab $f2.ent $data(okBtn) -padx 4 -pady 3 -sticky ew grid configure $f2.ent -padx 2 if {$class eq "TkFDialog"} { grid $data(typeMenuLab) $data(typeMenuBtn) $data(cancelBtn) \ -padx 4 -sticky ew grid configure $data(typeMenuBtn) -padx 0 grid $data(hiddenBtn) -columnspan 2 -padx 4 -sticky ew } else { grid $data(hiddenBtn) - $data(cancelBtn) -padx 4 -sticky ew } grid columnconfigure $f2 1 -weight 1 # Pack all the frames together. We are done with widget construction. # pack $f1 -side top -fill x -pady 4 pack $f2 -side bottom -pady 4 -fill x pack $data(icons) -expand yes -fill both -padx 4 -pady 1 # Set up the event handlers that are common to Directory and File Dialogs # wm protocol $w WM_DELETE_WINDOW [list ::tk::dialog::file::CancelCmd $w] $data(upBtn) configure -command [list ::tk::dialog::file::UpDirCmd $w] $data(cancelBtn) configure -command [list ::tk::dialog::file::CancelCmd $w] bind $w [list $data(cancelBtn) invoke] bind $w [list tk::AltKeyInDialog $w %A] # Set up event handlers specific to File or Directory Dialogs # if {$class eq "TkFDialog"} { bind $data(ent) [list ::tk::dialog::file::ActivateEnt $w] $data(okBtn) configure -command [list ::tk::dialog::file::OkCmd $w] bind $w [format { if {[%s cget -state] eq "normal"} { focus %s } } $data(typeMenuBtn) $data(typeMenuBtn)] } else { set okCmd [list ::tk::dialog::file::chooseDir::OkCmd $w] bind $data(ent) $okCmd $data(okBtn) configure -command $okCmd bind $w [list focus $data(ent)] bind $w [list $data(okBtn) invoke] } bind $w [list $data(hiddenBtn) invoke] bind $data(ent) [list ::tk::dialog::file::CompleteEnt $w] # Build the focus group for all the entries # ::tk::FocusGroup_Create $w ::tk::FocusGroup_BindIn $w $data(ent) [list \ ::tk::dialog::file::EntFocusIn $w] ::tk::FocusGroup_BindOut $w $data(ent) [list \ ::tk::dialog::file::EntFocusOut $w] } # ::tk::dialog::file::SetSelectMode -- # # Set the select mode of the dialog to single select or multi-select. # # Arguments: # w The dialog path. # multi 1 if the dialog is multi-select; 0 otherwise. # # Results: # None. proc ::tk::dialog::file::SetSelectMode {w multi} { set dataName __tk_filedialog upvar ::tk::dialog::file::$dataName data if { $multi } { set fNameCaption [mc "File &names:"] } else { set fNameCaption [mc "File &name:"] } set iconListCommand [list ::tk::dialog::file::OkCmd $w] ::tk::SetAmpText $w.contents.f2.lab $fNameCaption $data(icons) configure -multiple $multi -command $iconListCommand return } # ::tk::dialog::file::UpdateWhenIdle -- # # Creates an idle event handler which updates the dialog in idle time. # This is important because loading the directory may take a long time # and we don't want to load the same directory for multiple times due to # multiple concurrent events. # proc ::tk::dialog::file::UpdateWhenIdle {w} { upvar ::tk::dialog::file::[winfo name $w] data if {[info exists data(updateId)]} { return } set data(updateId) [after idle [list ::tk::dialog::file::Update $w]] } # ::tk::dialog::file::Update -- # # Loads the files and directories into the IconList widget. Also sets up # the directory option menu for quick access to parent directories. # proc ::tk::dialog::file::Update {w} { # This proc may be called within an idle handler. Make sure that the # window has not been destroyed before this proc is called if {![winfo exists $w]} { return } set class [winfo class $w] if {($class ne "TkFDialog") && ($class ne "TkChooseDir")} { return } set dataName [winfo name $w] upvar ::tk::dialog::file::$dataName data variable ::tk::Priv variable showHiddenVar global tk_library unset -nocomplain data(updateId) set folder $Priv(folderImage) set file $Priv(fileImage) set appPWD [pwd] if {[catch { cd $data(selectPath) }]} then { # We cannot change directory to $data(selectPath). $data(selectPath) # should have been checked before ::tk::dialog::file::Update is # called, so we normally won't come to here. Anyways, give an error # and abort action. tk_messageBox -type ok -parent $w -icon warning -message [mc \ "Cannot change to the directory \"%1\$s\".\nPermission denied."\ $data(selectPath)] cd $appPWD return } # Turn on the busy cursor. BUG?? We haven't disabled X events, though, # so the user may still click and cause havoc ... # set entCursor [$data(ent) cget -cursor] set dlgCursor [$w cget -cursor] $data(ent) configure -cursor watch $w configure -cursor watch update idletasks $data(icons) deleteall set showHidden $showHiddenVar # Make the dir list. Note that using an explicit [pwd] (instead of '.') is # better in some VFS cases. $data(icons) add $folder [GlobFiltered [pwd] d 1] if {$class eq "TkFDialog"} { # Make the file list if this is a File Dialog, selecting all but # 'd'irectory type files. # $data(icons) add $file [GlobFiltered [pwd] {f b c l p s}] } # Update the Directory: option menu # set list "" set dir "" foreach subdir [file split $data(selectPath)] { set dir [file join $dir $subdir] lappend list $dir } $data(dirMenu) delete 0 end set var [format %s(selectPath) ::tk::dialog::file::$dataName] foreach path $list { $data(dirMenu) add command -label $path -command [list set $var $path] } # Restore the PWD to the application's PWD # cd $appPWD if {$class eq "TkFDialog"} { # Restore the Open/Save Button if this is a File Dialog # if {$data(type) eq "open"} { ::tk::SetAmpText $data(okBtn) [mc "&Open"] } else { ::tk::SetAmpText $data(okBtn) [mc "&Save"] } } # turn off the busy cursor. # $data(ent) configure -cursor $entCursor $w configure -cursor $dlgCursor } # ::tk::dialog::file::SetPathSilently -- # # Sets data(selectPath) without invoking the trace procedure # proc ::tk::dialog::file::SetPathSilently {w path} { upvar ::tk::dialog::file::[winfo name $w] data set cb [list ::tk::dialog::file::SetPath $w] trace remove variable data(selectPath) write $cb set data(selectPath) $path trace add variable data(selectPath) write $cb } # This proc gets called whenever data(selectPath) is set # proc ::tk::dialog::file::SetPath {w name1 name2 op} { if {[winfo exists $w]} { upvar ::tk::dialog::file::[winfo name $w] data UpdateWhenIdle $w # On directory dialogs, we keep the entry in sync with the currentdir. if {[winfo class $w] eq "TkChooseDir"} { $data(ent) delete 0 end $data(ent) insert end $data(selectPath) } } } # This proc gets called whenever data(filter) is set # proc ::tk::dialog::file::SetFilter {w type} { upvar ::tk::dialog::file::[winfo name $w] data set data(filterType) $type set data(filter) [lindex $type 1] $data(typeMenuBtn) configure -text [lindex $type 0] ;#-indicatoron 1 # If we aren't using a default extension, use the one suppled by the # filter. if {![info exists data(extUsed)]} { if {[string length $data(-defaultextension)]} { set data(extUsed) 1 } else { set data(extUsed) 0 } } if {!$data(extUsed)} { # Get the first extension in the list that matches {^\*\.\w+$} and # remove all * from the filter. set index [lsearch -regexp $data(filter) {^\*\.\w+$}] if {$index >= 0} { set data(-defaultextension) \ [string trimleft [lindex $data(filter) $index] "*"] } else { # Couldn't find anything! Reset to a safe default... set data(-defaultextension) "" } } $data(icons) see 0 UpdateWhenIdle $w } # tk::dialog::file::ResolveFile -- # # Interpret the user's text input in a file selection dialog. Performs: # # (1) ~ substitution # (2) resolve all instances of . and .. # (3) check for non-existent files/directories # (4) check for chdir permissions # (5) conversion of environment variable references to their # contents (once only) # # Arguments: # context: the current directory you are in # text: the text entered by the user # defaultext: the default extension to add to files with no extension # expandEnv: whether to expand environment variables (yes by default) # # Return vaue: # [list $flag $directory $file] # # flag = OK : valid input # = PATTERN : valid directory/pattern # = PATH : the directory does not exist # = FILE : the directory exists by the file doesn't exist # = CHDIR : Cannot change to the directory # = ERROR : Invalid entry # # directory : valid only if flag = OK or PATTERN or FILE # file : valid only if flag = OK or PATTERN # # directory may not be the same as context, because text may contain a # subdirectory name # proc ::tk::dialog::file::ResolveFile {context text defaultext {expandEnv 1}} { set appPWD [pwd] set path [JoinFile $context $text] # If the file has no extension, append the default. Be careful not to do # this for directories, otherwise typing a dirname in the box will give # back "dirname.extension" instead of trying to change dir. if { ![file isdirectory $path] && ([file ext $path] eq "") && ![string match {$*} [file tail $path]] } then { set path "$path$defaultext" } # we want to strip any filtering/ext/blocking instructions # from the file name set aa [string first "\[" $path] if {$aa > 0} { set fn [string range $path 0 [expr $aa-1]] } else { set fn $path } if {[catch {file exists $fn}]} { # This "if" block can be safely removed if the following code stop # generating errors. # # file exists ~nonsuchuser # return [list ERROR $path ""] } if {[file exists $fn]} { if {[file isdirectory $path]} { if {[catch {cd $path}]} { return [list CHDIR $path ""] } set directory [pwd] set file "" set flag OK cd $appPWD } else { if {[catch {cd [file dirname $path]}]} { return [list CHDIR [file dirname $path] ""] } set directory [pwd] set file [file tail $path] set flag OK cd $appPWD } } else { set dirname [file dirname $path] if {[file exists $dirname]} { if {[catch {cd $dirname}]} { return [list CHDIR $dirname ""] } set directory [pwd] cd $appPWD set file [file tail $path] # It's nothing else, so check to see if it is an env-reference if {$expandEnv && [string match {$*} $file]} { set var [string range $file 1 end] if {[info exist ::env($var)]} { return [ResolveFile $context $::env($var) $defaultext 0] } } if {[regexp {[*?]} $file]} { set flag PATTERN } else { set flag FILE } } else { set directory $dirname set file [file tail $path] set flag PATH # It's nothing else, so check to see if it is an env-reference if {$expandEnv && [string match {$*} $file]} { set var [string range $file 1 end] if {[info exist ::env($var)]} { return [ResolveFile $context $::env($var) $defaultext 0] } } } } return [list $flag $directory $file] } # Gets called when the entry box gets keyboard focus. We clear the selection # from the icon list . This way the user can be certain that the input in the # entry box is the selection. # proc ::tk::dialog::file::EntFocusIn {w} { upvar ::tk::dialog::file::[winfo name $w] data if {[$data(ent) get] ne ""} { $data(ent) selection range 0 end $data(ent) icursor end } else { $data(ent) selection clear } if {[winfo class $w] eq "TkFDialog"} { # If this is a File Dialog, make sure the buttons are labeled right. if {$data(type) eq "open"} { ::tk::SetAmpText $data(okBtn) [mc "&Open"] } else { ::tk::SetAmpText $data(okBtn) [mc "&Save"] } } } proc ::tk::dialog::file::EntFocusOut {w} { upvar ::tk::dialog::file::[winfo name $w] data $data(ent) selection clear } # Gets called when user presses Return in the "File name" entry. # proc ::tk::dialog::file::ActivateEnt {w} { upvar ::tk::dialog::file::[winfo name $w] data set text [$data(ent) get] if {$data(-multiple)} { foreach t $text { VerifyFileName $w $t } } else { VerifyFileName $w $text } } # Verification procedure # proc ::tk::dialog::file::VerifyFileName {w filename} { upvar ::tk::dialog::file::[winfo name $w] data set list [ResolveFile $data(selectPath) $filename $data(-defaultextension)] foreach {flag path file} $list { break } switch -- $flag { OK { if {$file eq ""} { # user has entered an existing (sub)directory set data(selectPath) $path $data(ent) delete 0 end } else { SetPathSilently $w $path if {$data(-multiple)} { lappend data(selectFile) $file } else { set data(selectFile) $file } Done $w } } PATTERN { set data(selectPath) $path set data(filter) $file } FILE { if {$data(type) eq "open"} { tk_messageBox -icon warning -type ok -parent $w \ -message [mc "File \"%1\$s\" does not exist." \ [file join $path $file]] $data(ent) selection range 0 end $data(ent) icursor end } else { SetPathSilently $w $path if {$data(-multiple)} { lappend data(selectFile) $file } else { set data(selectFile) $file } Done $w } } PATH { tk_messageBox -icon warning -type ok -parent $w \ -message [mc "Directory \"%1\$s\" does not exist." $path] $data(ent) selection range 0 end $data(ent) icursor end } CHDIR { tk_messageBox -type ok -parent $w -icon warning -message \ [mc "Cannot change to the directory\ \"%1\$s\".\nPermission denied." $path] $data(ent) selection range 0 end $data(ent) icursor end } ERROR { tk_messageBox -type ok -parent $w -icon warning -message \ [mc "Invalid file name \"%1\$s\"." $path] $data(ent) selection range 0 end $data(ent) icursor end } } } # Gets called when user presses the Alt-s or Alt-o keys. # proc ::tk::dialog::file::InvokeBtn {w key} { upvar ::tk::dialog::file::[winfo name $w] data if {[$data(okBtn) cget -text] eq $key} { $data(okBtn) invoke } } # Gets called when user presses the "parent directory" button # proc ::tk::dialog::file::UpDirCmd {w} { upvar ::tk::dialog::file::[winfo name $w] data if {$data(selectPath) ne "/"} { set data(selectPath) [file dirname $data(selectPath)] } } # Join a file name to a path name. The "file join" command will break if the # filename begins with ~ # proc ::tk::dialog::file::JoinFile {path file} { if {[string match {~*} $file] && [file exists $path/$file]} { return [file join $path ./$file] } else { return [file join $path $file] } } # Gets called when user presses the "OK" button # proc ::tk::dialog::file::OkCmd {w} { upvar ::tk::dialog::file::[winfo name $w] data set filenames {} foreach item [$data(icons) selection get] { lappend filenames [$data(icons) get $item] } if { ([llength $filenames] && !$data(-multiple)) || ($data(-multiple) && ([llength $filenames] == 1)) } then { set filename [lindex $filenames 0] set file [JoinFile $data(selectPath) $filename] if {[file isdirectory $file]} { ListInvoke $w [list $filename] return } } ActivateEnt $w } # Gets called when user presses the "Cancel" button # proc ::tk::dialog::file::CancelCmd {w} { upvar ::tk::dialog::file::[winfo name $w] data variable ::tk::Priv bind $data(okBtn) {} set Priv(selectFilePath) "" } # Gets called when user destroys the dialog directly [Bug 987169] # proc ::tk::dialog::file::Destroyed {w} { upvar ::tk::dialog::file::[winfo name $w] data variable ::tk::Priv set Priv(selectFilePath) "" } # Gets called when user browses the IconList widget (dragging mouse, arrow # keys, etc) # proc ::tk::dialog::file::ListBrowse {w} { upvar ::tk::dialog::file::[winfo name $w] data set text {} foreach item [$data(icons) selection get] { lappend text [$data(icons) get $item] } if {[llength $text] == 0} { return } if {$data(-multiple)} { set newtext {} foreach file $text { set fullfile [JoinFile $data(selectPath) $file] if { ![file isdirectory $fullfile] } { lappend newtext $file } } set text $newtext set isDir 0 } else { set text [lindex $text 0] set file [JoinFile $data(selectPath) $text] set isDir [file isdirectory $file] } if {!$isDir} { $data(ent) delete 0 end $data(ent) insert 0 $text if {[winfo class $w] eq "TkFDialog"} { if {$data(type) eq "open"} { ::tk::SetAmpText $data(okBtn) [mc "&Open"] } else { ::tk::SetAmpText $data(okBtn) [mc "&Save"] } } } elseif {[winfo class $w] eq "TkFDialog"} { ::tk::SetAmpText $data(okBtn) [mc "&Open"] } } # Gets called when user invokes the IconList widget (double-click, Return key, # etc) # proc ::tk::dialog::file::ListInvoke {w filenames} { upvar ::tk::dialog::file::[winfo name $w] data if {[llength $filenames] == 0} { return } set file [JoinFile $data(selectPath) [lindex $filenames 0]] set class [winfo class $w] if {$class eq "TkChooseDir" || [file isdirectory $file]} { set appPWD [pwd] if {[catch {cd $file}]} { tk_messageBox -type ok -parent $w -icon warning -message \ [mc "Cannot change to the directory \"%1\$s\".\nPermission denied." $file] } else { cd $appPWD set data(selectPath) $file } } else { if {$data(-multiple)} { set data(selectFile) $filenames } else { set data(selectFile) $file } Done $w } } # ::tk::dialog::file::Done -- # # Gets called when user has input a valid filename. Pops up a dialog # box to confirm selection when necessary. Sets the # tk::Priv(selectFilePath) variable, which will break the "vwait" loop # in ::tk::dialog::file:: and return the selected filename to the script # that calls tk_getOpenFile or tk_getSaveFile # proc ::tk::dialog::file::Done {w {selectFilePath ""}} { upvar ::tk::dialog::file::[winfo name $w] data variable ::tk::Priv if {$selectFilePath eq ""} { if {$data(-multiple)} { set selectFilePath {} foreach f $data(selectFile) { lappend selectFilePath [JoinFile $data(selectPath) $f] } } else { set selectFilePath [JoinFile $data(selectPath) $data(selectFile)] } set Priv(selectFile) $data(selectFile) set Priv(selectPath) $data(selectPath) if {($data(type) eq "save") && $data(-confirmoverwrite) && [file exists $selectFilePath]} { set reply [tk_messageBox -icon warning -type yesno -parent $w \ -message [mc "File \"%1\$s\" already exists.\nDo you want\ to overwrite it?" $selectFilePath]] if {$reply eq "no"} { return } } if { [info exists data(-typevariable)] && $data(-typevariable) ne "" && [info exists data(-filetypes)] && [llength $data(-filetypes)] && [info exists data(filterType)] && $data(filterType) ne "" } then { upvar #0 $data(-typevariable) typeVariable set typeVariable [lindex $data(filterType) 0] } } bind $data(okBtn) {} set Priv(selectFilePath) $selectFilePath } # ::tk::dialog::file::GlobFiltered -- # # Gets called to do globbing, returning the results and filtering them # according to the current filter (and removing the entries for '.' and # '..' which are never shown). Deals with evil cases such as where the # user is supplying a filter which is an invalid list or where it has an # unbalanced brace. The resulting list will be dictionary sorted. # # Arguments: # dir Which directory to search # type List of filetypes to look for ('d' or 'f b c l p s') # overrideFilter Whether to ignore the filter for this search. # # NB: Assumes that the caller has mapped the state variable to 'data'. # proc ::tk::dialog::file::GlobFiltered {dir type {overrideFilter 0}} { variable showHiddenVar upvar 1 data(filter) filter if {$filter eq "*" || $overrideFilter} { set patterns [list *] if {$showHiddenVar} { lappend patterns .* } } elseif {[string is list $filter]} { set patterns $filter } else { # Invalid list; assume we can use non-whitespace sequences as words set patterns [regexp -inline -all {\S+} $filter] } set opts [list -tails -directory $dir -type $type -nocomplain] set result {} catch { # We have a catch because we might have a really bad pattern (e.g., # with an unbalanced brace); even [glob -nocomplain] doesn't like it. # Using a catch ensures that it just means we match nothing instead of # throwing a nasty error at the user... foreach f [glob {*}$opts -- {*}$patterns] { if {$f eq "." || $f eq ".."} { continue } # See ticket [1641721], $f might be a link pointing to a dir if {$type != "d" && [file isdir [file join $dir $f]]} { continue } lappend result $f } } return [lsort -dictionary -unique $result] } proc ::tk::dialog::file::CompleteEnt {w} { upvar ::tk::dialog::file::[winfo name $w] data set f [$data(ent) get] if {$data(-multiple)} { if {![string is list $f] || [llength $f] != 1} { return -code break } set f [lindex $f 0] } # Get list of matching filenames and dirnames set files [if {[winfo class $w] eq "TkFDialog"} { GlobFiltered $data(selectPath) {f b c l p s} }] set dirs2 {} foreach d [GlobFiltered $data(selectPath) d] {lappend dirs2 $d/} set targets [concat \ [lsearch -glob -all -inline $files $f*] \ [lsearch -glob -all -inline $dirs2 $f*]] if {[llength $targets] == 1} { # We have a winner! set f [lindex $targets 0] } elseif {$f in $targets || [llength $targets] == 0} { if {[string length $f] > 0} { bell } return } elseif {[llength $targets] > 1} { # Multiple possibles if {[string length $f] == 0} { return } set t0 [lindex $targets 0] for {set len [string length $t0]} {$len>0} {} { set allmatch 1 foreach s $targets { if {![string equal -length $len $s $t0]} { set allmatch 0 break } } incr len -1 if {$allmatch} break } set f [string range $t0 0 $len] } if {$data(-multiple)} { set f [list $f] } $data(ent) delete 0 end $data(ent) insert 0 $f return -code break } saods9/ds9/library/tsv.tcl000644 000765 000000 00000005643 12741217134 016061 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc TSVRead {t fn} { upvar #0 $t T global $t global debug if {$debug(tcl,cat) || $debug(tcl,sia)} { puts stderr "TSVRead" } if {$fn == {}} { return } catch { set fp [open $fn r] # init db set T(Nrows) 0 set T(Ncols) 0 set T(Header) {} set T(HLines) 0 # ok, get first non comment line while (true) { if {[gets $fp line] == -1} { return } # skip any comments if {[string range $line 0 0] != "#"} { break; } } # reduce number of spaces regsub -all { +} $line { } line # strip any quotes regsub -all {\"} $line {} line # determine separator if {[llength [split $line "\t"]] > 1} { set ss "\t" } elseif {[llength [split $line ","]] > 1} { set ss "," } elseif {[llength [split $line ":"]] > 1} { set ss ":" } else { set ss " " } # determine header set first {} set foo [split $line $ss] if {([string is integer [lindex $foo 0]] || [string is double [lindex $foo 0]]) && ([string is integer [lindex $foo 1]] || [string is double [lindex $foo 1]])} { # determine num cols set cnt [llength $foo] # we need to build an header set first $line set line "X${ss}Y" for {set ii 2} {$ii<$cnt} {incr ii} { append line "${ss}column[expr $ii+3]" } } # process header # cols incr ${t}(HLines) set n $T(HLines) set T(H_$n) $line set T(Header) [split $T(H_$n) $ss] # dashes set T(Dashes) [regsub -all {[A-Za-z0-9]} $T(H_$n) {-}] set T(Ndshs) [llength $T(Dashes)] starbase_colmap $t # process table if {$first == {}} { gets $fp line } else { set line $first } while {![eof $fp]} { # skip any comments if {[string range $line 0 0] == "#"} { set line {} } # reduce number of spaces regsub -all { +} $line { } line set line [string trim $line] # do we have something? if {$line != {}} { # ok, save it incr ${t}(Nrows) set r $T(Nrows) set NCols [starbase_ncols $t] set c 1 foreach val [split $line $ss] { set T($r,$c) $val incr c } for {} {$c <= $NCols} {incr c} { set T($r,$c) {} } } gets $fp line } close $fp } } proc TSVWrite {t fn} { upvar #0 $t T global $t global debug if {$debug(tcl,cat) || $debug(tcl,sia)} { puts stderr "TSVWrite" } if {$fn == {}} { return } set fp [open $fn w] set nr $T(Nrows) set nc $T(Ncols) # header for {set cc 1} {$cc < $nc} {incr cc} { puts -nonewline $fp "[lindex $T(Header) [expr $cc-1]]\t" } puts $fp "[lindex $T(Header) [expr $nc-1]]" # data for {set rr 1} {$rr <= $nr} {incr rr} { for {set cc 1} {$cc < $nc} {incr cc} { puts -nonewline $fp "$T($rr,$cc)\t" } puts $fp "$T($rr,$nc)" } close $fp } saods9/ds9/library/url.tcl000644 000765 000000 00000015067 12745736030 016055 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 # get generic file via url # used by Analysis and SAMP proc GetFileURL {url fname} { upvar $fname fn ParseURL $url rr switch -- $rr(scheme) { ftp {GetFileFTP $rr(authority) $rr(path) $fn} file {set fn $rr(path)} http - default {GetFileHTTP $url $fn} } } proc GetFileFTP {host path fn} { global debug set ftp [ftp::Open $host {ftp} {-ds9@} -mode passive] if {$ftp > -1} { set ftp::VERBOSE $debug(tcl,ftp) set "ftp::ftp${ftp}(Output)" FTPLog ftp::Type $ftp binary ftp::Get $ftp $path $fn ftp::Close $ftp # clear error from tcllib ftp global errorInfo set errorInfo {} } } proc GetFileHTTP {url fn} { global ihttp set ch [open $fn w] if {[catch {http::geturl $url \ -timeout $ihttp(timeout) \ -channel $ch \ -binary 1 \ -headers "[ProxyHTTP]"} token]} { close $ch return } # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} close $ch if {[info exists token]} { HTTPLog $token http::cleanup $token } } # Load fits via url # sync with redirection # used by command line, SAMP, SIA proc OpenURLFits {{layer {}} {mode {}}} { global fitsurl set url $fitsurl if {[EntryDialog [msgcat::mc {URL}] [msgcat::mc {Enter URL}] 80 url]} { StartLoad LoadURLFits $url $layer $mode FinishLoad set fitsurl $url } } proc LoadURLFits {url layer mode} { if {[string length $url] == 0} { return } ParseURL $url r switch -- $r(scheme) { ftp {LoadURLFitsFTP $r(authority) $r(path) $layer $mode} file {LoadURLFitsFile $r(path) $layer $mode} http - default {LoadURLFitsHTTP $url $layer $mode} } } proc LoadURLFitsFTP {host path layer mode} { global loadParam global ds9 global debug set ftp [ftp::Open $host "ftp" "-ds9@" -mode passive] if {$ftp > -1} { set fn [tmpnam [file extension $path]] set ftp::VERBOSE $debug(tcl,ftp) set "ftp::ftp${ftp}(Output)" FTPLog ftp::Type $ftp binary if {[ftp::Get $ftp $path $fn]} { LoadURLFitsFile $fn $layer $mode } ftp::Close $ftp if {[file exists $fn]} { catch {file delete -force $fn} } } } proc LoadURLFitsFile {fn layer mode} { global loadParam # alloc it because we can't assume it will last set loadParam(file,type) fits set loadParam(file,mode) $mode set loadParam(load,type) allocgz set loadParam(file,name) $fn set loadParam(file,fn) $loadParam(file,name) set loadParam(load,layer) $layer ProcessLoad } proc LoadURLFitsHTTP {url layer mode} { global ds9 global ihttp ParseURL $url r set fn [tmpnam [file extension $r(path)]] set ch [open $fn w] set token [http::geturl $url \ -timeout $ihttp(timeout) \ -channel $ch \ -binary 1 \ -headers "[ProxyHTTP]"] # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} catch {close $ch} upvar #0 $token t # Code set code [http::ncode $token] # Meta set meta $t(meta) # Mime-type # we want to strip and extra info after ';' regexp -nocase {([^;])*} $t(type) mime # Content-Encoding set encoding {} foreach {name value} $meta { if {[regexp -nocase ^content-encoding $name]} { switch -- [string tolower $value] { compress - bzip2 {set encoding bzip2} Z {set encoding compress} pack - z {set encoding pack} default {} } } } HTTPLog $token # Result? switch -- $code { 200 - 203 {} 201 - 300 - 301 - 302 - 303 - 305 - 307 { foreach {name value} $meta { if {[regexp -nocase ^location$ $name]} { global debug if {$debug(tcl,http)} { puts stderr "LoadURLFitsHTTP redirect $code to $value" } # clean up and resubmit http::cleanup $token unset token if {[file exists $fn]} { catch {file delete -force $fn} } set url $value LoadURLFitsHTTP $url $layer $mode return } } } default { Error "HTTP [msgcat::mc {Error}] $code" return } } http::cleanup $token global debug if {$debug(tcl,http)} { puts stderr "LoadURLFitsHTTP: fn $fn : code $code : meta $meta : mime $mime : encoding $encoding" } switch -- [string tolower $mime] { "application/octet-stream" { # its never fails, someone can't get there mime types correct. # Override the mime type based on path switch -- [file extension $fn] { .bz2 {set var(encoding) bzip2} .Z {set var(encoding) compress} .z {set var(encoding) pack} } } "image/fits" - "application/fits" {} "application/fits-image" - "application/fits-table" - "application/fits-group" {} "image/x-fits" - "binary/x-fits" - "application/x-fits" {} "image/x-gfits" - "binary/x-gfits" - "image/gz-fits" - "application/x-gzip" - "display/gz-fits" {} "image/fits-hcompress" - "image/x-fits-h" {} "image/bz2-fits" - "display/bz2-fits" {set encoding bzip2} "image/x-cfits" - "binary/x-cfits" {set encoding compress} "image/x-zfits" - "binary/x-zfits" {set encoding pack} "text/html" - "text/plain" - default { Error "[msgcat::mc {File not Found or Unable to load FITS data MIME type}] $mime" return } } # alloc it because we are going to delete it after load StartLoad global loadParam set loadParam(file,type) fits set loadParam(file,mode) $mode set loadParam(load,type) allocgz set loadParam(file,name) $fn set loadParam(file,fn) $loadParam(file,name) set loadParam(load,layer) $layer # may have to convert the file, based on content-encoding switch -- "$encoding" { bzip2 { catch {set ch [open "| bunzip2 < $fn " r]} set loadParam(load,type) channel set loadParam(channel,name) $ch } compress { catch {set ch [open "| uncompress < $fn " r]} set loadParam(load,type) channel set loadParam(channel,name) $ch } pack { catch {set ch [open "| pcat $fn " r]} set loadParam(load,type) channel set loadParam(channel,name) $ch } } ProcessLoad FinishLoad if {[file exists $fn]} { catch {file delete -force $fn} } } proc ProcessURLFitsCmd {varname iname} { upvar $varname var upvar $iname i set layer {} set mode {} switch -- [string tolower [lindex $var $i]] { new { incr i CreateFrame } mask { incr i set layer mask } slice { incr i set mode slice } } LoadURLFits [lindex $var $i] $layer $mode } saods9/ds9/library/util.tcl000644 000765 000000 00000070252 13002503455 016213 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc CurrentDef {} { global current global pcurrent global ds9 set current(frame) {} set current(ext) {} set current(colorbar) {} set current(cursor) {} set current(rgb) red set current(display) single set current(mode) none set current(zoom) { 1 1 } set current(rotate) 0 set current(orient) none set current(align) 0 set pcurrent(display) $current(display) set pcurrent(mode) $current(mode) set pcurrent(zoom) $current(zoom) set pcurrent(rotate) $current(rotate) set pcurrent(orient) $current(orient) set pcurrent(align) $current(align) } proc CursorDef {} { global icursor set icursor(save) {} set icursor(id) 0 set icursor(timer) 0 set icursor(timer,abort) 0 } proc GetNumCores {} { global tcl_platform global env switch $tcl_platform(os) { Linux { if {![catch {open "/proc/cpuinfo"} f]} { set cores [regexp -all -line {^processor\s} [read $f]] close $f if {$cores > 0} { return $cores } } } Darwin { if {![catch {exec sysctl -n "hw.ncpu"} cores]} { return $cores } } {Windows NT} { return $env(NUMBER_OF_PROCESSORS) } } return 1 } proc UpdateDS9Static {} { # This routine is only called when an frame is added or deleted # we only change menu items which require at least one frame global debug if {$debug(tcl,update)} { puts stderr "UpdateDS9Static begin..." } UpdateFileMenuStatic UpdateFrameMenuStatic UpdateZoomMenuStatic UpdateAnalysisMenuStatic if {$debug(tcl,update)} { puts stderr "UpdateDS9Static end...\n" } } proc UpdateDS9 {} { global ds9 global current # This routine is called when ever there is a state change within ds9 # for example, a image is loaded, current(frame) is changed, etc global debug if {$debug(tcl,update)} { puts stderr "UpdateDS9 begin..." } UpdateFileMenu UpdateEditMenu UpdateFrameMenu UpdateBinMenu UpdateZoomMenu UpdateScaleMenu UpdateColorMenu UpdateRegionMenu # wcs(system) set here UpdateWCSMenu UpdateAnalysisMenu UpdateTaskMenu UpdateMaskMenu UpdateContourMenu UpdateGridMenu UpdateBlockMenu UpdateSmoothMenu UpdateCubeMenu UpdateRGBMenu UpdatePanZoomMenu UpdateBinDialog UpdatePanZoomDialog UpdateCrosshairDialog UpdateCropDialog UpdateScaleDialog UpdateColorDialog UpdateWCSDialog UpdateGroupDialog UpdateCATDialog UpdateCentroidDialog UpdateCubeDialog UpdateRGBDialog Update3DDialog UpdateContourDialog UpdateGridDialog UpdateGraphXAxis $current(frame) UpdateGraphYAxis $current(frame) RefreshInfoBox $current(frame) UpdateColormapLevel if {$debug(tcl,update)} { puts stderr "UpdateDS9 end...\n" } } # changes to other dialogs can affect the infobox and pixeltable proc UpdateMain {} { global current global debug if {$debug(tcl,update)} { puts stderr "UpdateMain" } RefreshInfoBox $current(frame) UpdateColormapLevel switch -- $current(mode) { crosshair - analysis { if {$current(frame) != {}} { set coord [$current(frame) get crosshair canvas] set x [lindex $coord 0] set y [lindex $coord 1] # just in case we hae a mosaic UpdateColormapLevelMosaic $current(frame) $x $y canvas UpdatePixelTableDialog $current(frame) $x $y canvas UpdateGraph $current(frame) $x $y canvas } } none - pointer - region - catalog - colorbar - pan - zoom - rotate - crop - examine - iexam {} } } proc ProcessSend {proc id sock fn ext rr} { if {$sock != {}} { # not implemented } elseif {$fn != {}} { append fn $ext set ch [open $fn w] puts $ch $rr close $ch $proc $id {} $fn } else { $proc $id $rr } } proc Toplevel {w mb style title proc} { global ds9 toplevel $w switch $ds9(wm) { x11 {} aqua { switch $style { 6 {::tk::unsupported::MacWindowStyle style $w document "closeBox collapseBox"} 7 {::tk::unsupported::MacWindowStyle style $w document "closeBox fullZoom collapseBox resizable"} } } win32 {} } wm title $w $title wm iconname $w $title wm group $w $ds9(top) wm protocol $w WM_DELETE_WINDOW $proc # we need this first, before the configure command menu $mb AppleMenu $mb $w configure -menu $mb global pds9 if {$pds9(dialog,center)} { DialogCenter $w } } proc SourceInitFileDir {ext} { global ds9 foreach pp {{.} {}} { set fn $pp$ds9(app)$ext set ff [file join [GetEnvHome] $fn] switch [SourceInitFile $ff] { 1 {return 1} default {return 0} } } return 0 } proc SourceInitFile {fn} { global tcl_platform # do this cause old scripts may assume access during source command global ds9 if {[file exist $fn] && [file isfile $fn]} { # check permissions switch $tcl_platform(platform) { unix { set pp [split [file attributes $fn -perm] {}] if {![ValidReadOnly [lindex $pp 3]] || ![ValidReadOnly [lindex $pp 4]]} { set msg "[msgcat::mc {Invalid file permissions detected}]: $fn [msgcat::mc {Please change the file's permission to disable other users write access. Use anyway?}]" if {[tk_messageBox -type yesno -icon question -message $msg] != {yes}} { # failed to execute return 0 } } } windows {} } # can't make this a debug command line option # prefs set before options parsed if {[catch {source $fn}]} { Error "[msgcat::mc {An error has occurred while executing}] $fn. [msgcat::mc {DS9 will complete the initialization process}]" # failed to execute return 0 } # success execute return 1 } # not found return -1 } proc ValidReadOnly {perm} { if {[string is integer $perm]} { switch $perm { 0 - 1 - 4 - 5 {return 1} default {return 0} } } return 0; } proc LanguageToName {which} { switch $which { locale {return {Locale}} cs {return "\u010Cesky"} da {return {Dansk}} de {return {Deutsch}} en {return {English}} es {return {Español}} fr {return {Français}} ja {return [encoding convertfrom euc-jp "\xc6\xfc\xcb\xdc\xb8\xec"]} pt {return {Português}} zh {return [encoding convertfrom big5 "\xA4\xA4\xA4\xE5"]} } } proc SetLanguage {ll} { global ds9 global pds9 set pds9(language,name) [LanguageToName $ll] set x 0 msgcat::mclocale $ll msgcat::mcload [file join $::tk_library msgs] # we need to find if we support this language if {[msgcat::mcload [file join $ds9(root) msgs]]} { incr x } if {$pds9(language,dir) != {}} { if {[msgcat::mcload $pds9(language,dir)]} { incr x } } # if english, always return found if {[string equal [string range $ll 0 1] {en}]} { incr x } if {$x} { return 1 } else { return 0 } } proc GetEnvHome {} { global env global tcl_platform switch $tcl_platform(platform) { unix { if {[info exists env(HOME)]} { return $env(HOME) } } windows { if {[info exists env(HOME)]} { set hh [file normalize [file nativename $env(HOME)]] if {[file isdirectory $hh]} { return $hh } } # this is just a backup, the above should always work if {[info exists env(HOMEDRIVE)] && [info exists env(HOMEPATH)]} { return "$env(HOMEDRIVE)$env(HOMEPATH)" } } } return {} } proc InitTempDir {} { global ds9 global env # check environment vars first # windows is very picky as to file name format if {[info exists env(TEMP)]} { set ds9(tmpdir) [file normalize [file nativename $env(TEMP)]] } elseif {[info exists env(TMP)]} { set ds9(tmpdir) [file normalize [file nativename $env(TMP)]] } # nothing so far, go with defaults if {$ds9(tmpdir) == {}} { global tcl_platform switch $tcl_platform(platform) { unix {set ds9(tmpdir) "/tmp"} windows {set ds9(tmpdir) "C:/WINDOWS/Temp"} } } # see if it is valid, else current directory if {![file isdirectory $ds9(tmpdir)]} { set ds9(tmpdir) {.} } } proc tmpnam {ext} { global ds9 for {set ii 0} {$ii<10} {incr ii} { set fn "$ds9(tmpdir)/ds9[clock clicks]$ext" if {![file exists $fn]} { return $fn } } # give up return "$ds9(tmpdir)/ds9$ext" } # which compiler do we use for filtering? proc InitFilterCompiler {} { global ds9 global env global argv0 # if the user did not explicitly specify one ... if {![info exists env(FILTER_CC)]} { switch -- $ds9(wm) { x11 {} aqua { if {![file exists /usr/bin/gcc]} { # pcc is hardwired to be installed in /tmp set pccroot "/tmp/pcc" set pcc "$pccroot/bin/pcc" set tar "pcc-i386-snowleopard.tar.gz" if {[file readable "$ds9(root)/$tar"]} { exec cp "$ds9(root)/$tar" "/tmp/$tar" exec tar xfPz "/tmp/$tar" -C /tmp exec rm -f "/tmp/$tar" } if {[file exists $pcc]} { set env(FILTER_CC) $pcc set env(FILTER_CFLAGS) "-isystem $pccroot/lib/pcc" set env(PATH) "$pccroot/bin:$env(PATH)" } } } win32 { set tcc [file join [file dirname $argv0] tcc/tcc.exe] if {[file exists $tcc]} { set env(FILTER_CC) [file nativename [file attributes [file normalize $tcc] -shortname]] set env(FILTER_TMPDIR) [file nativename [file attributes [file normalize $ds9(tmpdir)] -shortname]] } } } } } proc ToYesNo {value} { if {$value == 1} { return "yes\n" } else { return "no\n" } } proc FromYesNo {value} { set v [string tolower $value] if {$v == "no" || $v == "false" || $v == "off" || $v == 0} { return 0 } else { return 1 } } proc ProcessRealizeDS9 {} { global ds9 global current # this can really slow down scripts so use ds9(last) # to remember last update if {$ds9(last) != $current(frame)} { RealizeDS9 set ds9(last) $current(frame) } } proc RealizeDS9 {{preserve 0}} { # this has to come first, to realize the canvas global debug if {$debug(tcl,idletasks)} { puts stderr "RealizeDS9" } # update all frames global ds9 foreach ff $ds9(frames) { if {$preserve} { $ff 3d preserve } $ff update now } # idletasks fails for windows. we need to process all events to make # sure all windows are realized # update idletasks update } proc Sex2H {str} { scan $str "%d:%d:%f" h m s return [expr $h+($m/60.)+($s/(60.*60.))] } proc Sex2Hs {str} { scan $str "%d %d %f" h m s return [expr $h+($m/60.)+($s/(60.*60.))] } proc Sex2D {str} { set sign 1 set degree 0 set min 0 set sec 0 scan $str "%d:%f:%f" degree min sec if {$degree != 0} { if {$degree < 0} { set sign -1 } } else { if {[string range $str 0 0] == {-}} { set sign -1 } } return [expr $sign * (abs($degree)+($min/60.)+($sec/(60.*60.)))] } proc SetCursor {cursor} { global ds9 global iis global current # if init phase, don't change cursor if {$ds9(init)} { return } # if iis cursor mode, don't change cursor if {$iis(state)} { return } if {($current(cursor) != $cursor)} { set current(cursor) $cursor if {$cursor != {}} { $ds9(canvas) configure -cursor $cursor } else { $ds9(canvas) configure -cursor {} } } } proc SetWatchCursor {} { global ds9 global icursor # we don't want to update during initialization if {$ds9(init)} { return } set icursor(save) [$ds9(canvas) cget -cursor] $ds9(canvas) configure -cursor {} $ds9(main) configure -cursor watch update } proc ResetWatchCursor {} { global ds9 global icursor # we don't want to update during initialization if {$ds9(init)} { return } $ds9(main) configure -cursor {} $ds9(canvas) configure -cursor $icursor(save) } proc CursorTimer {} { global ds9 global icursor switch -- $icursor(timer) { 0 { set icursor(timer,abort) 0 set icursor(timer) 0 set icursor(id) 0 $ds9(canvas) configure -cursor {} } 1 { $ds9(canvas) configure -cursor circle set icursor(timer) 2 set icursor(id) [after 1000 CursorTimer] } 2 { $ds9(canvas) configure -cursor dot set icursor(timer) 1 set icursor(id) [after 1000 CursorTimer] } } } proc AboutBox {} { global help global ds9 global ed set w {.abt} set ed(ok) 0 DialogCreate $w [msgcat::mc {About SAOImage DS9}] ed(ok) # Param set f [frame $w.param -background white] canvas $f.c -background white -height 450 -width 500 pack $f.c -fill both -expand true # can't use -file for zvfs # set ed(sun) [image create photo -format gif -file $ds9(root)/doc/sun.gif] set ch [open $ds9(root)/doc/sun.gif r] fconfigure $ch -translation binary -encoding binary set dd [read $ch] close $ch unset ch set ed(sun) [image create photo -format gif -data "$dd"] unset dd $f.c create image 0 0 -image $ed(sun) -anchor nw $f.c create text 120 22 -text $help(about) -anchor nw -width 350 # Buttons set f [ttk::frame $w.buttons] ttk::button $f.ok -text [msgcat::mc {OK}] -command {set ed(ok) 1} \ -default active pack $f.ok -padx 2 -pady 2 bind $w {set ed(ok) 1} # Fini ttk::separator $w.sep -orient horizontal pack $w.buttons $w.sep -side bottom -fill x pack $w.param -side top -fill both -expand true DialogCenter $w DialogWait $w ed(ok) DialogDismiss $w image delete $ed(sun) unset ed } proc QuitDS9 {} { global ds9 # shutdown SAMP global samp if {[info exists samp]} { catch {SAMPDisconnect} } # close IIS ports catch {IISClose} # close out XPA global xpa if {[info exists xpa]} { catch {xpafree $xpa} } # close all HV windows, they may have tmp files global ihv foreach hh $ihv(windows) { if {[winfo exists $hh]} { catch {HVDestroy $hh} } } focus {} exit } proc OpenSource {} { set filename [OpenFileDialog tclfbox] if {$filename != {}} { uplevel #0 "source \{$filename\}" } } proc OpenConsole {} { if {[winfo exists ".tkcon"]} { tkcon show } else { set ::tkcon::OPT(exec) {} set ::tkcon::OPT(font) [font actual TkFixedFont] tkcon::Init } } proc ToggleBindEvents {} { global ds9 if {$ds9(freeze)} { set ds9(freeze) 0 BindEventsCanvas BindEventsPanner } else { set ds9(freeze) 1 UnBindEventsCanvas UnBindEventsPanner } } proc ChangeMode {} { global ds9 global current bind $ds9(canvas) {} bind $ds9(canvas) {} bind $ds9(canvas) {} foreach ff $ds9(frames) { $ff crosshair off $ff analysis reset $ff marker catalog unselect all $ff marker catalog unhighlite all $ff marker unselect all $ff marker unhighlite all } UpdateRegionMenu RefreshInfoBox $current(frame) PixelTableClearDialog ClearGraphData switch -- $current(mode) { none - pointer - region - catalog {SetCursor {}} crosshair { foreach ff $ds9(frames) { $ff crosshair on } SetCursor crosshair } colorbar {SetCursor center_ptr} zoom {SetCursor sizing} pan {SetCursor fleur} rotate {SetCursor exchange} crop {SetCursor {}} analysis { foreach ff $ds9(frames) { $ff crosshair on } SetCursor crosshair IMEChangeShape } examine {SetCursor target} iexam {} } } # Font procs proc InitDefaultFont {} { global ds9 global pds9 set pds9(font) helvetica set pds9(font,weight) normal set pds9(font,slant) roman switch $ds9(wm) { x11 {set pds9(font,size) 9} aqua {set pds9(font,size) 13} win32 {set pds9(font,size) 10} } } proc InitDefaultTextFont {} { global ds9 global pds9 set pds9(text,font) courier set pds9(text,font,weight) normal set pds9(text,font,slant) roman switch $ds9(wm) { x11 {set pds9(text,font,size) 9} aqua {set pds9(text,font,size) 12} win32 {set pds9(text,font,size) 10} } } proc ResetDefaultFont {} { InitDefaultFont SetDefaultFont true } proc ResetDefaultTextFont {} { InitDefaultTextFont SetDefaultTextFont true } proc SetDefaultFont {which} { global ds9 global pds9 font configure TkDefaultFont -family $ds9($pds9(font)) \ -size $pds9(font,size) -weight $pds9(font,weight) \ -slant $pds9(font,slant) switch $ds9(wm) { x11 { font configure TkMenuFont -family $ds9($pds9(font)) \ -size $pds9(font,size) -weight $pds9(font,weight) \ -slant $pds9(font,slant) } aqua - win32 { # can't change font defs, see font configure doc } } if {$which} { UpdateScaleDialogFont UpdateGraphFont CATUpdateFont } } proc SetDefaultTextFont {which} { global ds9 global pds9 font configure TkFixedFont -family $ds9($pds9(text,font)) \ -size $pds9(text,font,size) -weight $pds9(text,font,weight) \ -slant $pds9(text,font,slant) if {$which} { SimpleTextUpdateFont } } proc PrefsBgColor {} { global ds9 global pds9 foreach ff $ds9(frames) { $ff bg color $pds9(bg) } } proc PrefsNanColor {} { global ds9 global pds9 foreach ff $ds9(frames) { $ff nan color $pds9(nan) } } proc ChangeThreads {} { global ds9 foreach ff $ds9(frames) { $ff threads $ds9(threads) } } proc PrefsIRAFAlign {} { global ds9 global pds9 foreach ff $ds9(frames) { $ff iraf align $pds9(iraf) } } proc DisplayLog {item} { SimpleTextDialog ftptxt [msgcat::mc {Message Log}] 80 40 append bottom $item } proc ParseURL {url varname} { upvar $varname r set r(scheme) {} set r(authority) {} set r(path) {} set r(query) {} set r(fragment) {} set exp {^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?} if {![regexp -nocase $exp $url x a r(scheme) c r(authority) r(path) f r(query) h r(fragment)]} { return 0 } # check for windows disk drives global tcl_platform switch $tcl_platform(platform) { unix { switch -- $r(scheme) { ftp { # strip any username/passwd set id [string first {@} $r(authority)] if { $id != -1} { set r(authority) [string range $r(authority) [expr $id+1] end] } } } } windows { switch -- $r(scheme) { {} - ftp - http - file { if {[regexp {/([A-Z]:)(/.*)} $r(path) a b c]} { set r(path) "$b$c" } } default { set r(path) "$r(scheme):$r(path)" set r(scheme) {} } } } } return 1 } proc BreakUp {str} { set r {} set l [string length $str] for {set i 0} {$i < $l} {incr i} { set c [string index $str $i] append r $c if {$c=="\}"} { append r "\n" } } return $r } proc InPath {which} { global env global tcl_platform switch $tcl_platform(platform) { unix { set target ${which} set paths [split $env(PATH) :] } windows { set target ${which}.exe set paths [split $env(PATH) \;] } } foreach p $paths { if {[file executable [file join $p $target]]} { return 1 } } return 0 } proc FTPLog {s msg state} { global debug if {$debug(tcl,ftp)} { DisplayLog "$s $msg $state\n" } } proc HTTPLog {token} { global debug if {$debug(tcl,http)} { upvar #0 $token t DisplayLog "url: $t(url)\n" DisplayLog "http: $t(http)\n" DisplayLog "type: $t(type)\n" DisplayLog "currentsize: $t(currentsize)\n" DisplayLog "totalsize: $t(totalsize)\n" DisplayLog "status: $t(status)\n" if {[info exists t(error)]} { DisplayLog "error: $t(error)\n" } DisplayLog "meta: [BreakUp $t(meta)]\n" } } proc ConfigHTTP {} { global phttp # set the User-Agent http::config -useragent ds9 # set the proxy if requested if {$phttp(proxy)} { http::config -proxyhost $phttp(proxy,host) -proxyport $phttp(proxy,port) } } proc ProxyHTTP {} { global phttp set auth {} if {$phttp(proxy) && $phttp(auth)} { set auth [list "Proxy-Authorization" [concat "Basic" [base64::encode $phttp(auth,user):$phttp(auth,passwd)]]] } return $auth } proc FixSpec {sysname skyname formatname defsys defsky defformat} { upvar $sysname sys upvar $skyname sky upvar $formatname format set rr 0 switch -- $sys { image - physical - detector - amplifier - wcs - wcsa - wcsb - wcsc - wcsd - wcse - wcsf - wcsg - wcsh - wcsi - wcsj - wcsk - wcsl - wcsm - wcsn - wcso - wcsp - wcsq - wcsr - wcss - wcst - wcsu - wcsv - wcsw - wcsx - wcsy - wcsz {incr rr} fk4 - b1950 - fk5 - j2000 - icrs - galactic - ecliptic { set format $sky set sky $sys set sys wcs } default { set format $sky set sky $sys set sys $defsys } } switch -- $sky { fk4 - b1950 - fk5 - j2000 - icrs - galactic - ecliptic {incr rr} default { set format $sky set sky $defsky } } switch -- $format { degrees - arcmin - arcsec - sexagesimal {incr rr} default { set format $defformat } } return $rr } proc FixSpecSystem {sysname defsys} { upvar $sysname sys set rr 0 switch -- $sys { image - physical - detector - amplifier - wcs - wcsa - wcsb - wcsc - wcsd - wcse - wcsf - wcsg - wcsh - wcsi - wcsj - wcsk - wcsl - wcsm - wcsn - wcso - wcsp - wcsq - wcsr - wcss - wcst - wcsu - wcsv - wcsw - wcsx - wcsy - wcsz {incr rr} default { set sys $defsys } } return $rr } proc DS9Backup {ch which} { global pds9 puts $ch "$which bg color $pds9(bg)" puts $ch "$which nan color $pds9(nan)" } # Process Cmds proc ProcessPrefsCmd {varname iname} { upvar $varname var upvar $iname i global pds9 global ds9 switch -- [string tolower [lindex $var $i]] { clear {ClearPrefs} bgcolor { # backward compatibility incr i set pds9(bg) [lindex $var $i] PrefsBgColor } nancolor { # backward compatibility incr i set pds9(nan) [lindex $var $i] PrefsNanColor } threads { # backward compatibility incr i set ds9(threads) [lindex $var $i] ChangeThreads } irafalign { incr i set pds9(iraf) [FromYesNo [lindex $var $i]] PrefsIRAFAlign } } } proc ProcessSendPrefsCmd {proc id param} { global pds9 global ds9 # backward compatibility switch -- [string tolower [lindex $param 0]] { bgcolor {$proc $id "$pds9(bg)\n"} nancolor {$proc $id "$pds9(nan)\n"} threads {$proc $id "$ds9(threads)\n"} irafalign {$proc $id [ToYesNo $pds9(iraf)]} } } proc ProcessBgCmd {varname iname} { upvar $varname var upvar $iname i global pds9 set pds9(bg) [lindex $var $i] PrefsBgColor } proc ProcessSendBgCmd {proc id param} { global pds9 $proc $id "$pds9(bg)\n" } proc ProcessNanCmd {varname iname} { upvar $varname var upvar $iname i global pds9 set pds9(nan) [lindex $var $i] PrefsNanColor } proc ProcessSendNanCmd {proc id param} { global pds9 $proc $id "$pds9(nan)\n" } proc ProcessThreadsCmd {varname iname} { upvar $varname var upvar $iname i global ds9 set ds9(threads) [lindex $var $i] ChangeThreads } proc ProcessSendThreadsCmd {proc id param} { global ds9 $proc $id "$ds9(threads)\n" } proc ProcessIRAFAlignCmd {varname iname} { upvar $varname var upvar $iname i global pds9 set pds9(iraf) [FromYesNo [lindex $var $i]] PrefsIRAFAlign } proc ProcessSendIRAFAlignCmd {proc id param} { global pds9 $proc $id [ToYesNo $pds9(iraf)] } proc ProcessCDCmd {varname iname} { upvar $varname var upvar $iname i cd [lindex $var $i] } proc ProcessSendCDCmd {proc id param} { $proc $id "[pwd]\n" } proc ProcessConsoleCmd {varname iname} { upvar $varname var upvar $iname i OpenConsole # ignore error message about ActiveTcl global ds9 InitError $ds9(msg,src) } proc ProcessCursorCmd {varname iname} { upvar $varname var upvar $iname i global current if {$current(frame) != {}} { set x [lindex $var $i] incr i set y [lindex $var $i] switch -- $current(mode) { none {$current(frame) warp $x $y} pointer - region {MarkerArrowKey $current(frame) $x $y} catalog {MarkerArrowKey $current(frame) $x $y} crosshair {CrosshairArrowKey $current(frame) $x $y} colorbar {} pan {Pan $x $y canvas} zoom - rotate - crop {} analysis {IMEArrowKey $current(frame) $x $y} examine - iexam {} } } } proc ProcessSendDataCmd {proc id param sock fn} { global cube global blink global current if {$current(frame) != {}} { set sys [lindex $param 0] set sky [lindex $param 1] set x [lindex $param 2] set y [lindex $param 3] set w [lindex $param 4] set h [lindex $param 5] set strip [lindex $param 6] switch -- $sys { image - physical - detector - amplifier { set strip $h set h $w set w $y set y $x set x $sky set sky fk5 } fk4 - b1950 - fk5 - j2000 - icrs - galactic - ecliptic { set strip $h set h $w set w $y set y $x set x $sky set sky $sys set sys wcs } } set strip [FromYesNo $strip] $current(frame) get data $sys $sky $x $y $w $h rr set ss {} foreach ii [array names rr] { if {$strip} { append ss "$rr($ii)\n" } else { append ss "$ii = $rr($ii)\n" } } ProcessSend $proc $id $sock $fn {.dat} $ss } } proc ProcessIconifyCmd {varname iname} { upvar $varname var upvar $iname i global ds9 switch -- [string tolower [lindex $var $i]] { yes - true - on - 1 {wm iconify $ds9(top)} no - false - off - 0 {wm deiconify $ds9(top)} default { wm iconify $ds9(top) incr i -1 } } } proc ProcessSendIconifyCmd {proc id param} { global ds9 if {[wm state $ds9(top)] == "normal"} { $proc $id "no\n" } else { $proc $id "yes\n" } } proc ProcessLowerCmd {varname iname} { upvar $varname var upvar $iname i global ds9 lower $ds9(top) } proc ProcessModeCmd {varname iname} { upvar $varname var upvar $iname i global current set current(mode) [string tolower [lindex $var $i]] # backward compatibility switch $current(mode) { pointer {set current(mode) region} } ChangeMode } proc ProcessQuitCmd {varname iname} { upvar $varname var upvar $iname i QuitDS9 } proc ProcessSendModeCmd {proc id param} { global current $proc $id "$current(mode)\n" } proc ProcessRaiseCmd {varname iname} { upvar $varname var upvar $iname i global ds9 raise $ds9(top) } proc ProcessSleepCmd {varname iname} { upvar $varname var upvar $iname i # yes, we need this UpdateDS9 RealizeDS9 set sec 1 if {[lindex $var $i] != {} && [string range [lindex $var $i] 0 0] != {-}} { set sec [lindex $var $i] } else { incr i -1 } after [expr int($sec*1000)] } proc ProcessSourceCmd {varname iname} { upvar $varname var upvar $iname i # we need to be realized # you never know what someone will try to do ProcessRealizeDS9 set fn [lindex $var $i] uplevel #0 "source $fn" } proc ProcessTclCmd {varname iname buf fn} { upvar $varname var upvar $iname i # backward compatibility switch -- [string tolower [lindex $var $i]] { yes - true - on - 1 - no - false - off - 0 { return } } if {$buf != {}} { uplevel #0 $buf } elseif {$fn != {}} { if {[file exists $fn]} { set ch [open $fn r] set cmd [read $ch] close $ch uplevel #0 $cmd } } elseif {[lindex $var $i] != {}} { # special case uplevel #0 [lindex $var $i] } } # backward compatibility proc ProcessThemeCmd {varname iname} { upvar $varname var upvar $iname i } # backward compatibility proc ProcessSendThemeCmd {proc id param} { global pds9 $proc $id "native\n" } proc ProcessSendVersionCmd {proc id param} { global ds9 $proc $id "$ds9(title) [lindex $ds9(version) 0]\n" } proc XMLQuote {val} { return [string map {& & < < > > \' ' \" "} $val] } proc XMLUnQuote {val} { return [string map {& & < < > > ' \' " \"} $val] } saods9/ds9/library/var.tcl000644 000765 000000 00000000773 12705445650 016042 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc LoadVar {varname fn layer mode} { global loadParam set loadParam(file,type) fits set loadParam(file,mode) $mode set loadParam(load,type) var set loadParam(var,name) $varname set loadParam(file,name) "$fn" # mask not supported set loadParam(load,layer) {} ProcessLoad } saods9/ds9/library/vector.tcl000644 000765 000000 00000010230 12705445650 016541 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc VectorDialog {varname} { upvar #0 $varname var global $varname global pmarker # see if we already have a header window visible if {[winfo exists $var(top)]} { raise $var(top) return } # variables set rr [$var(frame) get wcs] set var(dcoord) [lindex $rr 0] set var(dformat) $pmarker(dformat) AdjustCoordSystem $varname dcoord set var(arrow) [$var(frame) get marker $var(id) vector arrow] # procs set var(which) vector set var(proc,apply) VectorApply set var(proc,close) VectorClose set var(proc,coordCB) VectorCoordCB set var(proc,editCB) VectorEditCB set var(proc,distCB) VectorDistCB # base MarkerBaseDialog $varname # analysis $var(mb) add cascade -label [msgcat::mc {Analysis}] -menu $var(mb).analysis menu $var(mb).analysis # plot2d MarkerAnalysisPlot2dDialog $varname # raise plot? global marker set var(plot2d) $marker(plot2d) # init VectorDistCB $varname # callbacks $var(frame) marker $var(id) callback move "VectorEditCB" $varname $var(frame) marker $var(id) callback edit "VectorEditCB" $varname set f $var(top).param # Point ttk::label $f.tpt -text [msgcat::mc {Point}] ttk::entry $f.x -textvariable ${varname}(x) -width 13 ttk::entry $f.y -textvariable ${varname}(y) -width 13 CoordMenuButton $f.upt $varname system 1 sky skyformat \ [list $var(proc,coordCB) $varname] # Length ttk::label $f.tdist -text [msgcat::mc {Length}] ttk::entry $f.dist -textvariable ${varname}(dist) -width 13 DistMenuButton $f.udist $varname dcoord 1 dformat \ [list VectorDistCB $varname] DistMenuEnable $f.udist.menu $varname dcoord 1 dformat # Angle ttk::label $f.tangle -text [msgcat::mc {Angle}] ttk::entry $f.angle -textvariable ${varname}(angle) -width 13 ttk::label $f.uangle -text [msgcat::mc {Degrees}] # Arrow ttk::label $f.tarrow -text [msgcat::mc {Arrow}] ttk::checkbutton $f.arrow -variable ${varname}(arrow) \ -command "VectorArrow $varname" grid $f.tpt $f.x $f.y $f.upt -padx 2 -pady 2 -sticky w grid $f.tdist $f.dist $f.udist -padx 2 -pady 2 -sticky w grid $f.tangle $f.angle $f.uangle -padx 2 -pady 2 -sticky w grid $f.tarrow $f.arrow -padx 2 -pady 2 -sticky w } # actions proc VectorClose {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) delete callback move "VectorEditCB" $var(frame) marker $var(id) delete callback edit "VectorEditCB" MarkerBaseClose $varname } proc VectorApply {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) vector point $var(system) $var(sky) \ $var(x) $var(y) $var(dcoord) $var(dformat) $var(dist) $var(angle) MarkerBaseLineApply $varname } proc VectorArrow {varname} { upvar #0 $varname var global $varname $var(frame) marker $var(id) vector arrow $var(arrow) } # callbacks proc VectorCoordCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "VectorCoordCB" } MarkerAnalysisPlot2dSystem $varname MarkerBaseCoordCB $varname VectorEditCB $varname } proc VectorEditCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "VectorEditCB" } set p [$var(frame) get marker $var(id) vector point \ $var(system) $var(sky) $var(skyformat)] set var(x) [lindex $p 0] set var(y) [lindex $p 1] set var(dist) [$var(frame) get marker $var(id) vector length \ $var(dcoord) $var(dformat)] set var(angle) [$var(frame) get marker $var(id) angle \ $var(system) $var(sky)] } proc VectorDistCB {varname {dummy {}}} { upvar #0 $varname var global $varname global debug if {$debug(tcl,marker)} { puts stderr "VectorDistCB" } set var(dist) [$var(frame) get marker $var(id) vector length \ $var(dcoord) $var(dformat)] } saods9/ds9/library/vla.tcl000644 000765 000000 00000011411 12741011522 016006 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc VLADef {} { global vla global ivla set ivla(top) .vla set ivla(mb) .vlatmb set vla(sky) fk5 set vla(rformat) arcmin set vla(width) 15 set vla(height) 15 set vla(mode) new set vla(save) 0 set vla(survey) first } proc VLADialog {} { global vla global ivla global wcs if {[winfo exists $ivla(top)]} { raise $ivla(top) return } set varname dvla upvar #0 $varname var global $varname set var(top) $ivla(top) set var(mb) $ivla(mb) set var(sky) $vla(sky) set var(skyformat) $wcs(skyformat) set var(rformat) $vla(rformat) set var(width) $vla(width) set var(height) $vla(height) # not used set var(width,pixels) 300 set var(height,pixels) 300 set var(mode) $vla(mode) set var(save) $vla(save) set var(survey) $vla(survey) set w $var(top) IMGSVRInit $varname "VLA [msgcat::mc {Server}]" \ VLAExec VLAAck ARDone ARError menu $var(mb).survey $var(mb) add cascade -label Survey -menu $var(mb).survey $var(mb).survey add radiobutton -label {First} \ -variable ${varname}(survey) -value first $var(mb).survey add radiobutton -label {Stripe 82} \ -variable ${varname}(survey) -value stripe82 $var(mb).survey add radiobutton -label {GPS} \ -variable ${varname}(survey) -value gps IMGSVRUpdate $varname } proc VLAExec {varname} { upvar #0 $varname var global $varname if {$var(save)} { set var(fn) [SaveFileDialog savefitsfbox] if {$var(fn) == {}} { ARDone $varname return } } else { set var(fn) [tmpnam {.fits}] } # skyformat switch -- $var(skyformat) { degrees { set xx [uformat d h: $var(x)] set yy [uformat d d: $var(y)] } sexagesimal { set xx $var(x) set yy $var(y) } } # size - convert to arcmin switch -- $var(rformat) { degrees { set ww [expr $var(width)*60.] set hh [expr $var(height)*60.] } arcmin { set ww $var(width) set hh $var(height) } arcsec { set ww [expr $var(width)/60.] set hh [expr $var(height)/60.] } } # now to radius set rr [expr sqrt($ww*$ww+$hh*$hh)/2.] if {$rr>60} { set rr 60 } set var(query) [http::formatQuery .submit "Extract the Cutout" RA "$xx $yy" Equinox J2000 ImageSize $rr MaxInt 10 .cgifields ImageType ImageType "FITS Image"] set url "http://third.ucllnl.org/cgi-bin/$var(survey)cutout" IMGSVRGetURL $varname $url } proc VLAAck {varname} { upvar #0 $varname var global $varname set msg {Acknowledgments for the VLA This major undertaking has received the generous technical and scientific support of many individuals. The NRAO staff has provided extremely valuable assistance in many aspects of the observations themselves and in the area of software support; in particular, we are grateful to Rick Perley, Ken Sowinski, Barry Clark, and Bill Cotton in this regard. The support of the NRAO Director, Paul van den Bout, and the yeoman service provided by Frazer Owen as Chair of the Survey Oversight Committee are also greatly appreciated. We also thank the members of the Oversight Committee (Ken Chambers, Eric Feigelson, Jackie Hewitt, Gillian Knapp, and Rogier Windhorst) for their time and wise counsel in this enterprise. Acknowledgment is also due our colleagues who are involved in the ongoing FIRST effort, including Richard McMahon and Isobel Hook. This work is supported in part under the auspices of the Department of Energy by Lawrence Livermore National Laboratory under contract No. W-7405-ENG-48 and the Institute for Geophysics and Planetary Physics, whose director Charles Alcock has been particularly supportive. We also acknowledge a generous planning grant from the CalSpace Institute; support from the STScI archive group, STScI director Bob Williams, and the STScI Director's Discretionary Research Fund; computing resources from Columbia University; a grant from the National Science Foundation; a gift of computing equipment from Sun Microsystems; a NATO travel grant to support our collaboration with Richard McMahon; and an award from the National Geographic Society which, in the spirit of their support 40 years ago for the Palomar Observatory Sky Survey, will be providing funds to continue our charting of the Universe. } SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \ 80 40 insert top $msg } # Process Cmds proc ProcessVLACmd {varname iname} { upvar $varname var upvar $iname i VLADialog IMGSVRProcessCmd $varname $iname dvla } proc ProcessSendVLACmd {proc id param} { VLADialog IMGSVRProcessSendCmd $proc $id $param dvla } saods9/ds9/library/vlss.tcl000644 000765 000000 00000005333 12741011522 016221 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc VLSSDef {} { global vlss global ivlss set ivlss(top) .vlss set ivlss(mb) .vlsstmb set vlss(sky) fk5 set vlss(rformat) arcmin set vlss(width) 15 set vlss(height) 15 set vlss(mode) new set vlss(save) 0 } proc VLSSDialog {} { global vlss global ivlss global wcs if {[winfo exists $ivlss(top)]} { raise $ivlss(top) return } set varname dvlss upvar #0 $varname var global $varname set var(top) $ivlss(top) set var(mb) $ivlss(mb) set var(sky) $vlss(sky) set var(skyformat) $wcs(skyformat) set var(rformat) $vlss(rformat) set var(width) $vlss(width) set var(height) $vlss(height) # not used set var(width,pixels) 300 set var(height,pixels) 300 set var(mode) $vlss(mode) set var(save) $vlss(save) set w $var(top) IMGSVRInit $varname "VLSS [msgcat::mc {Server}]" \ VLSSExec VLSSAck ARDone ARError IMGSVRUpdate $varname } proc VLSSExec {varname} { upvar #0 $varname var global $varname if {$var(save)} { set var(fn) [SaveFileDialog savefitsfbox] if {$var(fn) == {}} { ARDone $varname return } } else { set var(fn) [tmpnam {.fits}] } # skyformat switch -- $var(skyformat) { degrees { set xx [uformat d h: $var(x)] set yy [uformat d d: $var(y)] } sexagesimal { set xx $var(x) set yy $var(y) } } regsub -all {:} $xx { } xx regsub -all {:} $yy { } yy # size - convert to arcmin switch -- $var(rformat) { degrees { set ww $var(width) set hh $var(height) } arcmin { set ww [expr $var(width)/60.] set hh [expr $var(height)/60.] } arcsec { set ww [expr $var(width)/60./60.] set hh [expr $var(height)/60./60.] } } set var(query) [http::formatQuery submit Submit Equinox J2000 RA $xx Dec $yy Size "$ww $hh" Cells "25.0 25.0" MAPROJ SIN rotate 0.0 Type image/x-fits] set url "http://www.cv.nrao.edu/cgi-bin/newVLSSpostage.pl" IMGSVRGetURL $varname $url } proc VLSSAck {varname} { upvar #0 $varname var global $varname set msg {Acknowledgments for the VLSS The VLSS survey is being carried out by the NRAO and the Naval Research Lab. } SimpleTextDialog ${varname}ack [msgcat::mc {Acknowledgment}] \ 80 40 insert top $msg } # Process Cmds proc ProcessVLSSCmd {varname iname} { upvar $varname var upvar $iname i VLSSDialog IMGSVRProcessCmd $varname $iname dvlss } proc ProcessSendVLSSCmd {proc id param} { VLSSDialog IMGSVRProcessSendCmd $proc $id $param dvlss } saods9/ds9/library/vo.tcl000644 000765 000000 00000032570 12737746706 015711 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc VODef {} { global ivo global pvo set ivo(top) .vo set ivo(mb) .vomb set ivo(server,host) {} set ivo(server,title) {} set ivo(server,url) {} set ivo(server,button) {} set ivo(ka,id) {} # prefs only set pvo(server) {http://cxc.harvard.edu/chandraed/list.txt} set pvo(hv) 1 set pvo(method) mime set pvo(delay) 15 } proc VOKeepAlive {doka} { global ivo global pvo global xpa # if not xpa, return if {$pvo(method) != {xpa}} { return } # if keep-alive turned off, return if {$pvo(delay) <= 0} { return } # count the connections set n 0 for {set ii 0} {$ii < [llength $ivo(server,button)]} {incr ii} { if {$ivo(b$ii)} { incr n break } } # no connections => kill existing keep-alive, if necessary if {$n == 0} { if {$ivo(ka,id) != {}} { after cancel $ivo(ka,id) set ivo(ka,id) {} } } else { # yes connections # send a keep-alive, if necessary if {$doka} { # puts [format "send keepalive: %s (%d)" [exec date] $pvo(delay)] xpanskeepalive $xpa } # arrange for the next one set ivo(ka,id) [after [expr $pvo(delay) * 60 * 1000] VOKeepAlive 1] } } proc VOCancel {varname} { upvar #0 $varname var global $varname # set state to 0 so that we don't process the finish proc set var(active) 0 if {[info exists var(token)]} { http::reset $var(token) } } proc VODestroy {varname} { upvar #0 $varname var global $varname VOCancel $varname if {[winfo exists $var(top)]} { destroy $var(top) destroy $var(mb) } unset $varname } proc VOReset {varname} { upvar #0 $varname var global $varname set var(active) 0 if {[info exists var(token)]} { http::cleanup $var(token) unset var(token) } } proc VODone {varname} { upvar #0 $varname var global $varname VOReset $varname } proc VOCancelled {varname} { upvar #0 $varname var global $varname VOReset $varname } proc VOError {varname message} { upvar #0 $varname var global $varname Error $message VOReset $varname } proc VODialog {{sync 0}} { global ivo global pvo global ds9 if {[winfo exists $ivo(top)]} { raise $ivo(top) return } set varname voi upvar #0 $varname var global $varname # variables set var(top) $ivo(top) set var(mb) $ivo(mb) set var(sync) $sync set var(url) {} # create the window set w $var(top) set mb $var(mb) Toplevel $w $mb 6 [msgcat::mc {Virtual Observatory}] "VODestroy $varname" $mb add cascade -label [msgcat::mc {File}] -menu $mb.file menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] \ -command "VOApply $varname" $mb.file add command -label [msgcat::mc {Cancel}] \ -command "VOCancel $varname" $mb.file add separator $mb.file add command -label [msgcat::mc {Help Me Choose}] \ -command HelpVO $mb.file add command -label [msgcat::mc {Configure}] \ -command [list PrefsDialog http] $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] \ -command "VODestroy $varname" # Sites ttk::labelframe $w.param -text [msgcat::mc {Sites}] -padding 2 # Browser set f [ttk::labelframe $w.opt -text [msgcat::mc {Browser}] -padding 2] set var(hv,button) [ttk::checkbutton $w.opt.hv \ -text [msgcat::mc {Use Internal Web Browser}] \ -variable pvo(hv) \ -command SavePrefs] ttk::radiobutton $w.opt.xpa \ -text [msgcat::mc {Connect Directly}] \ -variable pvo(method) -value xpa -command PrefsVOMethod ttk::radiobutton $w.opt.http \ -text [msgcat::mc {Connect Using Web Proxy}] \ -variable pvo(method) -value mime -command PrefsVOMethod grid $w.opt.hv -padx 2 -pady 2 -sticky w grid $w.opt.xpa $w.opt.http -padx 2 -pady 2 -sticky w set f [ttk::frame $w.buttons] ttk::button $f.help -text [msgcat::mc {Help Me Choose}] \ -command HelpVO ttk::button $f.proxy -text [msgcat::mc {Configure}] \ -command [list PrefsDialog http] ttk::button $f.close -text [msgcat::mc {Close}] \ -command "VODestroy $varname" pack $f.help $f.proxy $f.close -side left -expand true -padx 2 -pady 4 # Fini grid $w.param -sticky news grid $w.opt -sticky news grid $w.buttons -sticky ew grid rowconfigure $w 0 -weight 1 grid rowconfigure $w 1 -weight 1 grid columnconfigure $w 0 -weight 1 if {[string length $ivo(server,host)] == 0} { VOApply $varname } else { set l [llength $ivo(server,host)] for {set ii 0} {$ii<$l} {incr ii} { set b [lindex $ivo(server,button) $ii] ttk::checkbutton $b -text "[lindex $ivo(server,title) $ii] ([lindex $ivo(server,url) $ii])" -variable ivo(b$ii) -command "VOCheck $varname $ii" pack $b -anchor w -padx 2 -pady 2 } } } proc VOApply {varname} { upvar #0 $varname var global $varname global ivo global pvo global xpa set w $var(top) # delete old servers for {set ii 0} {$ii < [llength $ivo(server,button)]} {incr ii} { catch {xparemote $xpa [lindex $ivo(server,host) $ii] - -proxy} catch {destroy [lindex $ivo(server,button) $ii]} catch {unset ivo(b$ii)} } set ivo(server,host) {} set ivo(server,title) {} set ivo(server,url) {} set ivo(server,button) {} VOFindServer $varname if {$var(url) != {}} { VOLoad $varname } else { VOLoadDefault $varname } # start or stop the keep-alive, as needed VOKeepAlive 0 } proc VOLoadDefault {varname} { upvar #0 $varname var global $varname # hardcode VOError $varname "Unable to access VO server list, please verify internet connection. Using default list." set rr {chandra-ed.cfa.harvard.edu:28571 CFA Chandra-Ed Archive Server http://chandra-ed.cfa.harvard.edu/archive.html xray1.physics.rutgers.edu:28571 Rutgers Primary MOOC X-ray Analysis Server http://xray1.physics.rutgers.edu/archive.html rinzai.rutgers.edu:28571 Rutgers X-ray Analysis Server #2 http://rinzai.rutgers.edu/archive.html} VOParse $varname $rr } proc VOFindServer {varname} { upvar #0 $varname var global $varname global pvo if {[VOCheckServer $varname $pvo(server)]} { return } if {[VOCheckServer $varname {http://cxc.harvard.edu/chandraed/list.txt}]} { return } if {[VOCheckServer $varname {http://cxc.harvard.edu/chandraed/test.txt}]} { return } if {[VOCheckServer $varname {http://chandra-ed.rutgers.edu/vo/list.txt}]} { return } if {[VOCheckServer $varname {http://chandra-ed.cfa.harvard.edu/vo/list.txt}]} { return } } proc VOCheckServer {varname url} { upvar #0 $varname var global $varname ParseURL $url rr set var(url) $url if {[checkdns $rr(authority) 3 1] == 0} { set var(url) $url return 1 } else { set var(url) {} return 0 } } proc VOLoad {varname} { upvar #0 $varname var global $varname global ihttp if {$var(sync)} { if {![catch {set var(token) [http::geturl $var(url) \ -timeout $ihttp(timeout) \ -headers "[ProxyHTTP]"] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 VOFinish $varname $var(token) } else { VOLoadDefault $varname } } else { if {![catch {set var(token) [http::geturl $var(url) \ -timeout $ihttp(timeout) \ -command [list VOFinish $varname] \ -headers "[ProxyHTTP]"] }]} { # reset errorInfo (may be set in http::geturl) global errorInfo set errorInfo {} set var(active) 1 } else { VOLoadDefault $varname } } } proc VOFinish {varname token} { upvar #0 $varname var global $varname if {!($var(active))} { VOCancelled $varname return } upvar #0 $token t # Code set code [http::ncode $token] # Meta set meta $t(meta) # Log it HTTPLog $token # Result? switch -- $code { 200 - 203 - 503 { VOParse $varname [http::data $var(token)] VODone $varname } 201 - 300 - 301 - 302 - 303 - 305 - 307 { foreach {name value} $meta { if {[regexp -nocase ^location$ $name]} { global debug if {$debug(tcl,http)} { puts stderr "VOFinish redirect $code to $value" } # clean up and resubmit http::cleanup $token unset var(token) set var(url) $value VOLoad $varname } } } default {VOError $varname [msgcat::mc {An error has occurred while updating VO server list}]} } } proc VOParse {varname rr} { upvar #0 $varname var global $varname global ivo set w $var(top) set data [string trimright $rr \n] set lines [split $data \n] set len [llength $lines] for {set ii 0} {$ii<$len} {incr ii} { set line [lindex $lines $ii] set b "$w.param.b$ii" set ll [split $line \t] lappend ivo(server,host) [lindex $ll 0] lappend ivo(server,title) [lindex $ll 1] lappend ivo(server,url) [lindex $ll 2] lappend ivo(server,button) $b set ivo(b$ii) 0 ttk::checkbutton $b -text "[lindex $ivo(server,title) $ii] ([lindex $ivo(server,url) $ii])" -variable ivo(b$ii) -command "VOCheck $varname $ii" pack $b -anchor w -padx 2 -pady 2 } } proc VOCheck {varname ii} { upvar #0 $varname var global $varname global ivo global pvo global xpa set w $var(top) set b "$w.param.b$ii" if {$ivo(b$ii)} { switch $pvo(method) { mime {} xpa { if {[info exists xpa]} { if {[catch {xparemote $xpa [lindex $ivo(server,host) $ii] + -proxy}]} { Info [msgcat::mc {Unable to connect directly: using Web Proxy}] set pvo(method) mime } } } } if {$pvo(hv)} { set url [lindex $ivo(server,url) $ii] ParseURL $url r HV "vo$ii" "$r(authority)" $url {} $var(sync) } } else { switch $pvo(method) { mime {} xpa { catch {xparemote $xpa [lindex $var(server,host) $ii] - -proxy} } } } # start or stop the keep-alive, as needed VOKeepAlive 0 } proc PrefsVOMethod {} { global pvo switch $pvo(method) { mime {set pvo(hv) 1} xpa {} } } proc PrefsDialogVO {} { global dprefs set w $dprefs(tab) $dprefs(list) insert end [msgcat::mc {VO}] lappend dprefs(tabs) [ttk::frame $w.vo] # Browser set f [ttk::labelframe $w.vo.browser -text [msgcat::mc {Browser}]] ttk::checkbutton $f.web -text [msgcat::mc {Use Internal Web Browser}] \ -variable pvo(hv) ttk::radiobutton $f.xpa -text [msgcat::mc {Connect Directly}] \ -variable pvo(method) -value xpa -command PrefsVOMethod ttk::radiobutton $f.mime -text [msgcat::mc {Connect Using Web Proxy}] \ -variable pvo(method) -value mime -command PrefsVOMethod grid $f.web -padx 2 -pady 2 -sticky w grid $f.xpa $f.mime -padx 2 -pady 2 -sticky w # Server set f [ttk::labelframe $w.vo.server -text [msgcat::mc {VO Server}]] ttk::label $f.stitle -text [msgcat::mc {Default}] ttk::entry $f.server -textvariable pvo(server) -width 50 grid $f.stitle $f.server -padx 2 -pady 2 -sticky w # Keep-Alive set f [ttk::labelframe $w.vo.keep -text [msgcat::mc {Keep-Alive}]] ttk::label $f.dtitle -text [msgcat::mc {Minutes}] ttk::entry $f.delay -textvariable pvo(delay) -width 5 grid $f.dtitle $f.delay -padx 2 -pady 2 -sticky w pack $w.vo.browser $w.vo.server $w.vo.keep -side top -fill both -expand true } proc ProcessVOCmd {varname iname} { upvar $varname var upvar $iname i set vvarname voi upvar #0 $vvarname vvar global $vvarname global ivo global pvo switch -- [string tolower [lindex $var $i]] { open {VODialog} close {VODestroy $vvarname} method { incr i set pvo(method) [lindex $var $i] } server { incr i set pvo(server) [lindex $var $i] } internal { incr i set pvo(hv) [FromYesNo [lindex $var $i]] } delay { incr i set pvo(delay) [lindex $var $i] } connect { incr i VODialog 1 # find best match set ii [lsearch $ivo(server,url) "*[lindex $var $i]*"] if {$ii>=0} { set ivo(b$ii) 1 VOCheck $vvarname $ii } } disconnect { incr i VODialog 1 # find best match set ii [lsearch $ivo(server,url) "*[lindex $var $i]*"] if {$ii>=0} { set ivo(b$ii) 0 VOCheck $vvarname $ii } } default { VODialog 1 # find best match set ii [lsearch $ivo(server,url) "*[lindex $var $i]*"] if {$ii>=0} { set ivo(b$ii) 1 VOCheck $vvarname $ii } } } } proc ProcessSendVOCmd {proc id param} { global ivo global pvo switch -- [string tolower $param] { method {$proc $id "$pvo(method)\n"} server {$proc $id "$pvo(server)\n"} internal {$proc $id [ToYesNo $pvo(hv)]} delay {$proc $id "$pvo(delay)\n"} connect { # current connections set len [llength $ivo(server,button)] set rr {} for {set ii 0} {$ii<$len} {incr ii} { if {$ivo(b$ii)} { append rr "[lindex $ivo(server,host) $ii] [lindex $ivo(server,title) $ii] [lindex $ivo(server,url) $ii] $ivo(b$ii)\n" } } $proc $id $rr } default { VODialog 1 # all possible connections set len [llength $ivo(server,button)] set rr {} for {set ii 0} {$ii<$len} {incr ii} { append rr "[lindex $ivo(server,host) $ii] [lindex $ivo(server,title) $ii] [lindex $ivo(server,url) $ii] $ivo(b$ii)\n" } $proc $id $rr } } } saods9/ds9/library/vot.tcl000644 000765 000000 00000017141 12737750714 016064 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc VOTParse {t token} { upvar #0 $t T global $t global debug global debug if {$debug(tcl,cat) || $debug(tcl,sia)} { puts stderr "VOTParse" } # set fp [open debug.xml w] # puts $fp [http::data $token] # close $fp set xml [xml::parser \ -characterdatacommand [list VOTCharCB $t] \ -elementstartcommand [list VOTElemStartCB $t] \ -elementendcommand [list VOTElemEndCB $t] \ -ignorewhitespace 1 \ ] set T(tree,state) {} set T(tree,prev) {} if {[catch {$xml parse [http::data $token]} err]} { if {$debug(tcl,cat) || $debug(tcl,sia)} { puts stderr "VOTParse: $err" } } $xml free } proc VOTRead {t fn} { upvar #0 $t T global $t global debug if {$debug(tcl,cat) || $debug(tcl,sia)} { puts stderr "VOTRead" } if {$fn == {}} { return } catch { set fp [open $fn r] set xml [xml::parser \ -characterdatacommand [list VOTCharCB $t]\ -elementstartcommand [list VOTElemStartCB $t] \ -elementendcommand [list VOTElemEndCB $t] \ -ignorewhitespace 1 \ ] set T(tree,state) {} set T(tree,prev) {} if {[catch {$xml parse [read $fp]} err]} { if {$debug(tcl,cat) || $debug(tcl,sia)} { puts stderr "VOTRead: $err" } } $xml free close $fp } } proc VOTWrite {t fn} { upvar #0 $t T global $t global debug if {$debug(tcl,cat) || $debug(tcl,sia)} { puts stderr "VOTWrite" } if {$fn == {}} { return } set fp [open $fn w] set nr $T(Nrows) set nc $T(Ncols) puts $fp {} puts $fp {} puts $fp {} puts $fp {} # header puts -nonewline $fp {} set nh [expr $T(HLines)-1] for {set hh 1} {$hh < $nh} {incr hh} { puts $fp [XMLQuote "$T(H_$hh)"] } puts $fp {} # cols for {set cc 1} {$cc <= $nc} {incr cc} { puts -nonewline $fp {} if {[info exists ${t}(Description)]} { if {[lindex $T(Description) [expr $cc-1]] != {}} { puts -nonewline $fp {} puts -nonewline $fp "[XMLQuote [lindex $T(Description) [expr $cc-1]]]" puts $fp {} } } puts $fp {} } # data puts $fp {} puts $fp {} for {set rr 1} {$rr <= $nr} {incr rr} { puts -nonewline $fp {} for {set cc 1} {$cc <= $nc} {incr cc} { puts -nonewline $fp "" } puts $fp {} } # clean up puts $fp {} puts $fp {} puts $fp {
[XMLQuote $T($rr,$cc)]
} puts $fp {
} puts $fp {
} close $fp } # Callbacks proc VOTCharCB {t data} { upvar #0 $t T global $t global debug switch -- $T(tree,state) { TD { set r $T(Nrows) set c $T(cnt) set T($r,$c) [string trim $data] } DESCRIPTION { set data [string trim $data] if {$data != {}} { switch -- $T(tree,prev) { VOTABLE - RESOURCE - TABLE { foreach ll [split [string trim $data] "\n"] { incr ${t}(HLines) set n $T(HLines) if {[string range $ll 0 0] == {#}} { set T(H_$n) "$ll" } else { set T(H_$n) "# $ll" } } } FIELD { set T(Description) \ [lreplace $T(Description) end end $data] } } } } } # sometimes, we get a bogus call, (ignore whitespace does not work) set T(tree,state) {} return {} } proc VOTElemStartCB {t name attlist args} { upvar #0 $t T global $t global debug switch -- $name { VOTABLE { # init db set T(Nrows) 0 set T(Ncols) 0 set T(Header) {} set T(HLines) 0 set T(tree,prev) $name } FIELD { set fname {} set id {} set datatype {} set arraysize {} set width {} set precision {} set unit {} set ref {} set ucd {} foreach {key value} $attlist { switch -- [string tolower $key] { name {set fname "$value"} id {set id "$value"} datatype {set datatype $value} arraysize {set arraysize $value} width {set width $value} precision {set precision $value} unit {set unit "$value"} ref {set ref "$value"} ucd {set ucd "$value"} } } if {$fname != {}} { lappend ${t}(Header) "$fname" } else { lappend ${t}(Header) "$id" } lappend ${t}(Id) "$id" lappend ${t}(DataType) $datatype lappend ${t}(ArraySize) $arraysize lappend ${t}(Width) $width lappend ${t}(Precision) $precision lappend ${t}(Unit) "$unit" lappend ${t}(Ref) "$ref" lappend ${t}(Ucd) "$ucd" # filled in later lappend ${t}(Description) {} set T(tree,prev) $name } TABLEDATA { # ok, we now need to build the header incr ${t}(HLines) set n $T(HLines) set T(H_$n) [join $T(Header)] set T(Dashes) [regsub -all {[A-Za-z0-9]} $T(H_$n) {-}] set T(Ndshs) [llength $T(Header)] incr ${t}(HLines) set n $T(HLines) set T(H_$n) [join $T(Dashes)] starbase_colmap $t } TR { incr ${t}(Nrows) set T(cnt) 0 } TD { incr ${t}(cnt) set r $T(Nrows) set c $T(cnt) set T($r,$c) {} } RESOURCE - TABLE { set T(tree,prev) $name } FIELDref - DESCRIPTION - COOSYS - PARAM - PARAMref - INFO - LINK - GROUP - DATA - BINARY - STREAM - FITS - VALUES - MIN - MAX - OPTION - DEFINITIONS {} default {return -code error} } set ${t}(tree,state) $name return {} } proc VOTElemEndCB {t name args} { upvar #0 $t T global $t global debug # we can't count on this being called for all end-tags switch -- $name { TABLEDATA { # ok, we're done return -code break } VOTABLE - FIELD - FIELDref - TR - TD - RESOURCE - TABLE - DESCRIPTION - COOSYS - PARAM - PARAMref - INFO - LINK - GROUP - DATA - BINARY - STREAM - FITS - VALUES - MIN - MAX - OPTION - DEFINITIONS {} default {return -code error} } return {} } saods9/ds9/library/wcs.tcl000644 000765 000000 00000077215 12734275432 016054 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc WCSDef {} { global wcs global pwcs global iwcs set iwcs(top) .wcs set iwcs(mb) .wcsmb set wcs(system) wcs set wcs(sky) fk5 set wcs(skyformat) sexagesimal array set pwcs [array get wcs] } proc UpdateWCS {} { global wcs global ds9 global current # frame if {$current(frame) != {}} { $current(frame) wcs $wcs(system) $wcs(sky) $wcs(skyformat) AlignWCSFrame set wcs(frame) $current(frame) if {[$current(frame) has fits]} { CoordMenuEnable $ds9(mb).wcs wcs system 0 sky skyformat } else { CoordMenuReset $ds9(mb).wcs wcs system 0 sky skyformat } UpdateWCSInfoBox $current(frame) } # grid global grid set grid(system) $wcs(system) set grid(sky) $wcs(sky) set grid(skyformat) $wcs(skyformat) GridUpdateCurrent # panzoom dialog global panzoom set panzoom(system) $wcs(system) set panzoom(sky) $wcs(sky) set panzoom(skyformat) $wcs(skyformat) UpdatePanZoomDialog # crosshair dialog global crosshair set crosshair(system) $wcs(system) set crosshair(sky) $wcs(sky) set crosshair(skyformat) $wcs(skyformat) UpdateCrosshairDialog # crop dialog global crop set crop(system) $wcs(system) set crop(sky) $wcs(sky) set crop(skyformat) $wcs(skyformat) UpdateCropDialog # cube global cube set cube(system) $wcs(system) UpdateCubeDialog # rgb global rgb set rgb(system) $wcs(system) RGBSystem # regions global marker set marker(system) $wcs(system) set marker(sky) $wcs(sky) set marker(skyformat) $wcs(skyformat) AdjustCoordSystem marker system } proc UpdateWCSInfoBox {which} { global wcs global view # if one wcs coord system is visible, change it set cnt 0 set vv {} foreach ll {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { if {$view(info,wcs$ll)} { incr cnt set vv wcs$ll } } if {$cnt == 1} { set ww [lindex [$which get wcs] 0] if {$view(info,$vv) != $view(info,$ww)} { foreach ll {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { set view(info,wcs$ll) 0 } set view(info,$ww) 1 LayoutInfoPanel } } } proc WCSBackup {ch which fdir rdir} { # simple case puts $ch "$which wcs [$which get wcs]" if {[$which has wcs alt]} { set fn $fdir/ds9.wcs set rfn $rdir/ds9.wcs catch {file delete -force $fn} WCSToVar [$which get fits header wcs 1] WCSSaveFile $fn puts $ch "WCSLoadFile $rfn" puts $ch "$which wcs replace text 1 \\\{\[WCSFromVar\]\\\}" } } proc WCSDialog {} { global wcs global iwcs global dwcs global ds9 # see if we already have a window visible if {[winfo exists $iwcs(top)]} { raise $iwcs(top) return } # create the window set w $iwcs(top) set mb $iwcs(mb) # vars set dwcs(system) $wcs(system) set dwcs(ext) 1 set dwcs(prev) {} Toplevel $w $mb 6 [msgcat::mc {WCS Parameters}] WCSDestroyDialog $mb add cascade -label [msgcat::mc {File}] -menu $mb.file $mb add cascade -label [msgcat::mc {Edit}] -menu $mb.edit $mb add cascade -label [msgcat::mc {WCS}] -menu $mb.wcs $mb add cascade -label [msgcat::mc {Extention}] -menu $mb.ext menu $mb.file $mb.file add command -label [msgcat::mc {Apply}] -command WCSApplyDialog $mb.file add command -label [msgcat::mc {Reset}] -command WCSResetDialog $mb.file add separator $mb.file add command -label "[msgcat::mc {Load}]..." -command WCSLoadDialog $mb.file add command -label "[msgcat::mc {Save}]..." -command WCSSaveDialog $mb.file add separator $mb.file add command -label [msgcat::mc {Close}] -command WCSDestroyDialog EditMenu $mb iwcs menu $mb.wcs $mb.wcs add radiobutton -label [msgcat::mc {WCS}] \ -variable dwcs(system) -value wcs -command ConfigWCSDialog $mb.wcs add separator foreach l {a b c d e f g h i j k l m n o p q r s t u v w x y z} { $mb.wcs add radiobutton -label "[msgcat::mc {WCS}] $l" \ -variable dwcs(system) -value "wcs$l" -command ConfigWCSDialog } # configured later menu $mb.ext # Param set tt [ttk::notebook $w.param] set base [ttk::frame $tt.base] set pv00 [ttk::frame $tt.pv00] set pv12 [ttk::frame $tt.pv12] set pv24 [ttk::frame $tt.pv24] set ab0 [ttk::frame $tt.ab0] set ab2 [ttk::frame $tt.ab2] set ab4 [ttk::frame $tt.ab4] set apbp0 [ttk::frame $tt.apbp0] set apbp2 [ttk::frame $tt.apbp2] set apbp4 [ttk::frame $tt.apbp4] $tt add $base -text {Keyword} $tt add $pv00 -text {PVi_00} $tt add $pv12 -text {PVi_12} $tt add $pv24 -text {PVi_24} $tt add $ab0 -text {A_0} $tt add $ab2 -text {A_2} $tt add $ab4 -text {A_4} $tt add $apbp0 -text {AP_0} $tt add $apbp2 -text {AP_2} $tt add $apbp4 -text {AP_4} $tt select $base ttk::label $base.tmjdobs -text "MJD-OBS" ttk::entry $base.mjdobs -textvariable dwcs(mjd-obs) -width 14 ttk::label $base.tdateobs -text "DATE-OBS" ttk::entry $base.dateobs -textvariable dwcs(date-obs) -width 14 ttk::label $base.tdate -text "DATE" ttk::entry $base.date -textvariable dwcs(date) -width 14 ttk::label $base.tepoch -text "EPOCH" ttk::entry $base.epoch -textvariable dwcs(epoch) -width 14 foreach aa {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { set bb [string toupper $aa] ttk::label $base.twcsname${aa} -text "WCSNAME${bb}" ttk::entry $base.wcsname${aa} \ -textvariable dwcs(wcsname${aa}) -width 14 ttk::label $base.tradesys${aa} -text "RADESYS${bb}" ttk::entry $base.radesys${aa} \ -textvariable dwcs(radesys${aa}) -width 14 ttk::label $base.tequinox${aa} -text "EQUINOX${bb}" ttk::entry $base.equinox${aa} \ -textvariable dwcs(equinox${aa}) -width 14 ttk::label $base.tlatpole${aa} -text "LATPOLE${bb}" ttk::entry $base.latpole${aa} \ -textvariable dwcs(latpole${aa}) -width 14 ttk::label $base.tlonpole${aa} -text "LONPOLE${bb}" ttk::entry $base.lonpole${aa} \ -textvariable dwcs(lonpole${aa}) -width 14 for {set ii 1} {$ii<=3} {incr ii} { ttk::label $base.tctype${ii}${aa} -text "CTYPE${ii}${bb}" ttk::entry $base.ctype${ii}${aa} \ -textvariable dwcs(ctype${ii}${aa}) -width 14 ttk::label $base.tcrpix${ii}${aa} -text "CRPIX${ii}${bb}" ttk::entry $base.crpix${ii}${aa} \ -textvariable dwcs(crpix${ii}${aa}) -width 14 ttk::label $base.tcrval${ii}${aa} -text "CRVAL${ii}${bb}" ttk::entry $base.crval${ii}${aa} \ -textvariable dwcs(crval${ii}${aa}) -width 14 ttk::label $base.tcunit${ii}${aa} -text "CUNIT${ii}${bb}" ttk::entry $base.cunit${ii}${aa} \ -textvariable dwcs(cunit${ii}${aa}) -width 14 ttk::label $base.tcdelt${ii}${aa} -text "CDELT${ii}${bb}" ttk::entry $base.cdelt${ii}${aa} \ -textvariable dwcs(cdelt${ii}${aa}) -width 14 } for {set ii 1} {$ii<=2} {incr ii} { for {set jj 1} {$jj<=2} {incr jj} { ttk::label $base.tcd${ii}_${jj}${aa} -text "CD${ii}_${jj}${bb}" ttk::entry $base.cd${ii}_${jj}${aa} \ -textvariable dwcs(cd${ii}_${jj}${aa}) -width 14 } for {set jj 1} {$jj<=2} {incr jj} { ttk::label $base.tpc${ii}_${jj}${aa} \ -text "PC${ii}_${jj}${bb}" ttk::entry $base.pc${ii}_${jj}${aa} \ -textvariable dwcs(pc${ii}_${jj}${aa}) -width 14 } for {set mm 0} {$mm<12} {incr mm} { ttk::label $pv00.tpv${ii}_${mm}${aa} \ -text "PV${ii}_${mm}${bb}" ttk::entry $pv00.pv${ii}_${mm}${aa} \ -textvariable dwcs(pv${ii}_${mm}${aa}) -width 14 } for {set mm 12} {$mm<24} {incr mm} { ttk::label $pv12.tpv${ii}_${mm}${aa} \ -text "PV${ii}_${mm}${bb}" ttk::entry $pv12.pv${ii}_${mm}${aa} \ -textvariable dwcs(pv${ii}_${mm}${aa}) -width 14 } for {set mm 24} {$mm<36} {incr mm} { ttk::label $pv24.tpv${ii}_${mm}${aa} \ -text "PV${ii}_${mm}${bb}" ttk::entry $pv24.pv${ii}_${mm}${aa} \ -textvariable dwcs(pv${ii}_${mm}${aa}) -width 14 } } ttk::label $base.tcd3_3${aa} -text "CD3_3${bb}" ttk::entry $base.cd3_3${aa} -textvariable dwcs(cd3_3${aa}) -width 14 ttk::label $base.tpc3_3${aa} -text "PC3_3${bb}" ttk::entry $base.pc3_3${aa} -textvariable dwcs(pc3_3${aa}) -width 14 } # only in primary ttk::label $ab0.ta -text "A_ORDER" ttk::entry $ab0.a -textvariable dwcs(a_order) -width 14 for {set mm 0} {$mm<2} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { ttk::label $ab0.ta_${mm}_${nn} -text "A_${mm}_${nn}" ttk::entry $ab0.a_${mm}_${nn} \ -textvariable dwcs(a_${mm}_${nn}) -width 14 } } for {set mm 2} {$mm<4} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { ttk::label $ab2.ta_${mm}_${nn} -text "A_${mm}_${nn}" ttk::entry $ab2.a_${mm}_${nn} \ -textvariable dwcs(a_${mm}_${nn}) -width 14 } } for {set mm 4} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { ttk::label $ab4.ta_${mm}_${nn} -text "A_${mm}_${nn}" ttk::entry $ab4.a_${mm}_${nn} \ -textvariable dwcs(a_${mm}_${nn}) -width 14 } } ttk::label $ab0.tb -text "B_ORDER" ttk::entry $ab0.b -textvariable dwcs(b_order) -width 14 for {set mm 0} {$mm<2} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { ttk::label $ab0.tb_${mm}_${nn} -text "B_${mm}_${nn}" ttk::entry $ab0.b_${mm}_${nn} \ -textvariable dwcs(b_${mm}_${nn}) -width 14 } } for {set mm 2} {$mm<4} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { ttk::label $ab2.tb_${mm}_${nn} -text "B_${mm}_${nn}" ttk::entry $ab2.b_${mm}_${nn} \ -textvariable dwcs(b_${mm}_${nn}) -width 14 } } for {set mm 4} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { ttk::label $ab4.tb_${mm}_${nn} -text "B_${mm}_${nn}" ttk::entry $ab4.b_${mm}_${nn} \ -textvariable dwcs(b_${mm}_${nn}) -width 14 } } ttk::label $apbp0.tap -text "AP_ORDER" ttk::entry $apbp0.ap -textvariable dwcs(ap_order) -width 14 for {set mm 0} {$mm<2} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { ttk::label $apbp0.tap_${mm}_${nn} -text "AP_${mm}_${nn}" ttk::entry $apbp0.ap_${mm}_${nn} \ -textvariable dwcs(ap_${mm}_${nn}) -width 14 } } for {set mm 2} {$mm<4} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { ttk::label $apbp2.tap_${mm}_${nn} -text "AP_${mm}_${nn}" ttk::entry $apbp2.ap_${mm}_${nn} \ -textvariable dwcs(ap_${mm}_${nn}) -width 14 } } for {set mm 4} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { ttk::label $apbp4.tap_${mm}_${nn} -text "AP_${mm}_${nn}" ttk::entry $apbp4.ap_${mm}_${nn} \ -textvariable dwcs(ap_${mm}_${nn}) -width 14 } } ttk::label $apbp0.tbp -text "BP_ORDER" ttk::entry $apbp0.bp -textvariable dwcs(bp_order) -width 14 for {set mm 0} {$mm<2} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { ttk::label $apbp0.tbp_${mm}_${nn} -text "BP_${mm}_${nn}" ttk::entry $apbp0.bp_${mm}_${nn} \ -textvariable dwcs(bp_${mm}_${nn}) -width 14 } } for {set mm 2} {$mm<4} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { ttk::label $apbp2.tbp_${mm}_${nn} -text "BP_${mm}_${nn}" ttk::entry $apbp2.bp_${mm}_${nn} \ -textvariable dwcs(bp_${mm}_${nn}) -width 14 } } for {set mm 4} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { ttk::label $apbp4.tbp_${mm}_${nn} -text "BP_${mm}_${nn}" ttk::entry $apbp4.bp_${mm}_${nn} \ -textvariable dwcs(bp_${mm}_${nn}) -width 14 } } # Buttons set f [ttk::frame $w.buttons] ttk::button $f.apply -text [msgcat::mc {Apply}] -command WCSApplyDialog ttk::button $f.reset -text [msgcat::mc {Reset}] -command WCSResetDialog ttk::button $f.close -text [msgcat::mc {Close}] -command WCSDestroyDialog pack $f.apply $f.reset $f.close -side left -expand true -padx 2 -pady 4 # Fini pack $w.buttons -side bottom -fill x pack $w.param -side top -fill both -expand true ConfigWCSDialog UpdateWCSDialog } proc WCSApplyDialog {} { global dwcs global current global rgb if {$current(frame) != {}} { RGBEvalLock rgb(lock,wcs) $current(frame) "$current(frame) wcs replace text $dwcs(ext) \{\{[WCSFromVar]\}\}" UpdateWCS CATUpdateWCS } } proc WCSResetDialog {} { global dwcs global current global rgb if {$current(frame) != {}} { RGBEvalLock rgb(lock,wcs) $current(frame) [list $current(frame) wcs reset $dwcs(ext)] UpdateWCS CATUpdateWCS UpdateWCSDialog } } proc WCSDestroyDialog {} { global iwcs global dwcs if {[winfo exists $iwcs(top)]} { destroy $iwcs(top) destroy $iwcs(mb) } unset dwcs } proc WCSSaveDialog {} { global dwcs set fn [SaveFileDialog wcsfbox] WCSSaveFile $fn } # used by backup proc WCSSaveFile {fn} { if {[catch {open $fn w} fp]} { Error "[msgcat::mc {Unable to open file}] $fn: $fp" return } puts $fp [WCSFromVar] catch {close $fp} } proc WCSLoadDialog {} { global dwcs set fn [OpenFileDialog wcsfbox] WCSLoadFile $fn } # used by backup proc WCSLoadFile {fn} { if {$fn != {}} { if {[catch {open $fn r} fp]} { Error "[msgcat::mc {Unable to open file}] $fn: $fp" return } WCSToVar [read -nonewline $fp] catch {close $fp} } } proc UpdateWCSDialog {} { global iwcs global current global debug if {$debug(tcl,update)} { puts stderr "UpdateWCSDialog" } if {![winfo exists $iwcs(top)]} { return } ConfigWCSDialogExtMenu UpdateWCSVars } proc UpdateWCSVars {} { global dwcs global current if {$current(frame) != {}} { if {[$current(frame) has fits]} { WCSToVar [$current(frame) get fits header wcs $dwcs(ext)] return } } WCSToVar {} } proc ConfigWCSDialog {{force {0}}} { global wcs global iwcs global dwcs global current global debug if {$debug(tcl,update)} { puts stderr "ConfigWCSDialog" } if {![winfo exists $iwcs(top)]} { return } # do we need to re-grid wcs vars? if {!$force && $dwcs(prev) == $dwcs(system)} { return } set tt $iwcs(top).param set base $tt.base set pv00 $tt.pv00 set pv12 $tt.pv12 set pv24 $tt.pv24 set ab0 $tt.ab0 set ab2 $tt.ab2 set ab4 $tt.ab4 set apbp0 $tt.apbp0 set apbp2 $tt.apbp2 set apbp4 $tt.apbp4 grid forget $base.tmjdobs $base.mjdobs grid forget $base.tdateobs $base.dateobs grid forget $base.tdate $base.date grid forget $base.tepoch $base.epoch # forget current sys vars set aa [string tolower [string range $dwcs(prev) 3 3]] grid forget $base.twcsname${aa} $base.wcsname${aa} grid forget $base.tradesys${aa} $base.radesys${aa} grid forget $base.tequinox${aa} $base.equinox${aa} grid forget $base.tlatpole${aa} $base.latpole${aa} grid forget $base.tlonpole${aa} $base.lonpole${aa} for {set ii 1} {$ii<=3} {incr ii} { grid forget $base.tctype${ii}${aa} $base.ctype${ii}${aa} grid forget $base.tcunit${ii}${aa} $base.cunit${ii}${aa} grid forget $base.tcrpix${ii}${aa} $base.crpix${ii}${aa} grid forget $base.tcrval${ii}${aa} $base.crval${ii}${aa} grid forget $base.tcdelt${ii}${aa} $base.cdelt${ii}${aa} } for {set ii 1} {$ii<=2} {incr ii} { for {set jj 1} {$jj<=2} {incr jj} { grid forget $base.tcd${ii}_${jj}${aa} $base.cd${ii}_${jj}${aa} grid forget $base.tpc${ii}_${jj}${aa} $base.pc${ii}_${jj}${aa} } for {set mm 0} {$mm<12} {incr mm} { grid forget $pv00.tpv${ii}_${mm}${aa} $pv00.pv${ii}_${mm}${aa} } for {set mm 12} {$mm<24} {incr mm} { grid forget $pv12.tpv${ii}_${mm}${aa} $pv12.pv${ii}_${mm}${aa} } for {set mm 24} {$mm<36} {incr mm} { grid forget $pv24.tpv${ii}_${mm}${aa} $pv24.pv${ii}_${mm}${aa} } } grid forget $base.tcd3_3${aa} $base.cd3_3${aa} grid forget $base.tpc3_3${aa} $base.pc3_3${aa} # only in primary grid forget $ab0.ta $ab0.a for {set mm 0} {$mm<2} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid forget $ab0.ta_${mm}_${nn} $ab0.a_${mm}_${nn} } } for {set mm 2} {$mm<4} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid forget $ab2.ta_${mm}_${nn} $ab2.a_${mm}_${nn} } } for {set mm 4} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid forget $ab4.ta_${mm}_${nn} $ab4.a_${mm}_${nn} } } grid forget $ab0.tb $ab0.b for {set mm 0} {$mm<2} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid forget $ab0.tb_${mm}_${nn} $ab0.b_${mm}_${nn} } } for {set mm 2} {$mm<4} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid forget $ab2.tb_${mm}_${nn} $ab2.b_${mm}_${nn} } } for {set mm 4} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid forget $ab4.tb_${mm}_${nn} $ab4.b_${mm}_${nn} } } grid forget $apbp0.tap $apbp0.ap for {set mm 0} {$mm<2} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid forget $apbp0.tap_${mm}_${nn} $apbp0.ap_${mm}_${nn} } } for {set mm 2} {$mm<4} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid forget $apbp2.tap_${mm}_${nn} $apbp2.ap_${mm}_${nn} } } for {set mm 4} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid forget $apbp4.tap_${mm}_${nn} $apbp4.ap_${mm}_${nn} } } grid forget $apbp0.tbp $apbp0.bp for {set mm 0} {$mm<2} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid forget $apbp0.tbp_${mm}_${nn} $apbp0.bp_${mm}_${nn} } } for {set mm 2} {$mm<4} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid forget $apbp2.tbp_${mm}_${nn} $apbp2.bp_${mm}_${nn} } } for {set mm 4} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid forget $apbp4.tbp_${mm}_${nn} $apbp4.bp_${mm}_${nn} } } # display new sys vars set dwcs(prev) $dwcs(system) set aa [string tolower [string range $dwcs(system) 3 3]] grid $base.twcsname${aa} $base.wcsname${aa} -padx 2 -pady 2 -sticky w grid $base.tradesys${aa} $base.radesys${aa} -padx 2 -pady 2 -sticky w grid $base.tequinox${aa} $base.equinox${aa} \ $base.tepoch $base.epoch -padx 2 -pady 2 -sticky w grid $base.tmjdobs $base.mjdobs \ $base.tdateobs $base.dateobs \ $base.tdate $base.date \ -padx 2 -pady 2 -sticky w grid $base.tctype1${aa} $base.ctype1${aa} \ $base.tctype2${aa} $base.ctype2${aa} \ $base.tctype3${aa} $base.ctype3${aa} \ -padx 2 -pady 2 -sticky w grid $base.tcrpix1${aa} $base.crpix1${aa} \ $base.tcrpix2${aa} $base.crpix2${aa} \ $base.tcrpix3${aa} $base.crpix3${aa} \ -padx 2 -pady 2 -sticky w grid $base.tcrval1${aa} $base.crval1${aa} \ $base.tcrval2${aa} $base.crval2${aa} \ $base.tcrval3${aa} $base.crval3${aa} \ -padx 2 -pady 2 -sticky w grid $base.tcunit1${aa} $base.cunit1${aa} \ $base.tcunit2${aa} $base.cunit2${aa} \ $base.tcunit3${aa} $base.cunit3${aa} \ -padx 2 -pady 2 -sticky w grid $base.tcdelt1${aa} $base.cdelt1${aa} \ $base.tcdelt2${aa} $base.cdelt2${aa} \ $base.tcdelt3${aa} $base.cdelt3${aa} \ -padx 2 -pady 2 -sticky w grid $base.tcd1_1${aa} $base.cd1_1${aa} \ $base.tcd2_1${aa} $base.cd2_1${aa} \ -padx 2 -pady 2 -sticky w grid $base.tcd1_2${aa} $base.cd1_2${aa} \ $base.tcd2_2${aa} $base.cd2_2${aa} \ $base.tcd3_3${aa} $base.cd3_3${aa} \ -padx 2 -pady 2 -sticky w grid $base.tpc1_1${aa} $base.pc1_1${aa} \ $base.tpc2_1${aa} $base.pc2_1${aa} \ -padx 2 -pady 2 -sticky w grid $base.tpc1_2${aa} $base.pc1_2${aa} \ $base.tpc2_2${aa} $base.pc2_2${aa} \ $base.tpc3_3${aa} $base.pc3_3${aa} \ -padx 2 -pady 2 -sticky w grid $base.tlatpole${aa} $base.latpole${aa} \ $base.tlonpole${aa} $base.lonpole${aa} -padx 2 -pady 2 -sticky w for {set mm 0} {$mm<12} {incr mm} { grid $pv00.tpv1_${mm}${aa} $pv00.pv1_${mm}${aa} \ $pv00.tpv2_${mm}${aa} $pv00.pv2_${mm}${aa} \ -padx 2 -pady 2 -sticky w } for {set mm 12} {$mm<24} {incr mm} { grid $pv12.tpv1_${mm}${aa} $pv12.pv1_${mm}${aa} \ $pv12.tpv2_${mm}${aa} $pv12.pv2_${mm}${aa} \ -padx 2 -pady 2 -sticky w } for {set mm 24} {$mm<36} {incr mm} { grid $pv24.tpv1_${mm}${aa} $pv24.pv1_${mm}${aa} \ $pv24.tpv2_${mm}${aa} $pv24.pv2_${mm}${aa} \ -padx 2 -pady 2 -sticky w } # only in primary grid $ab0.ta $ab0.a $ab0.tb $ab0.b -padx 2 -pady 2 -sticky w for {set mm 0} {$mm<2} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid $ab0.ta_${mm}_${nn} $ab0.a_${mm}_${nn} \ $ab0.tb_${mm}_${nn} $ab0.b_${mm}_${nn} \ -padx 2 -pady 2 -sticky w } } for {set mm 2} {$mm<4} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid $ab2.ta_${mm}_${nn} $ab2.a_${mm}_${nn} \ $ab2.tb_${mm}_${nn} $ab2.b_${mm}_${nn} \ -padx 2 -pady 2 -sticky w } } for {set mm 4} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid $ab4.ta_${mm}_${nn} $ab4.a_${mm}_${nn} \ $ab4.tb_${mm}_${nn} $ab4.b_${mm}_${nn} \ -padx 2 -pady 2 -sticky w } } grid $apbp0.tap $apbp0.ap $apbp0.tbp $apbp0.bp -padx 2 -pady 2 -sticky w for {set mm 0} {$mm<2} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid $apbp0.tap_${mm}_${nn} $apbp0.ap_${mm}_${nn} \ $apbp0.tbp_${mm}_${nn} $apbp0.bp_${mm}_${nn} \ -padx 2 -pady 2 -sticky w } } for {set mm 2} {$mm<4} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid $apbp2.tap_${mm}_${nn} $apbp2.ap_${mm}_${nn} \ $apbp2.tbp_${mm}_${nn} $apbp2.bp_${mm}_${nn} \ -padx 2 -pady 2 -sticky w } } for {set mm 4} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { grid $apbp4.tap_${mm}_${nn} $apbp4.ap_${mm}_${nn} \ $apbp4.tbp_${mm}_${nn} $apbp4.bp_${mm}_${nn} \ -padx 2 -pady 2 -sticky w } } } proc ConfigWCSDialogExtMenu {} { global iwcs global dwcs global ds9 global current $iwcs(mb).ext delete $ds9(menu,start) end set dwcs(ext) 1 set nn 0 set last {} set cnt [$current(frame) get fits count] for {set ii 1} {$ii <= $cnt} {incr ii} { set fn [$current(frame) get fits file name $ii] if {$fn != $last} { incr nn set item($nn) $fn set val($nn) $ii set last $fn } } if {$nn > 1} { $iwcs(mb) entryconfig [msgcat::mc {Extention}] -state normal for {set ii 1} {$ii<=$nn} {incr ii} { $iwcs(mb).ext add radiobutton -label $item($ii) \ -variable dwcs(ext) -value $val($ii) -command UpdateWCSVars } } else { $iwcs(mb) entryconfig [msgcat::mc {Extention}] -state disabled } } # used by backup proc WCSToVar {txt} { global wcs global dwcs global iwcs # clear all set dwcs(mjd-obs) {} set dwcs(date-obs) {} set dwcs(date) {} set dwcs(epoch) {} foreach aa {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { set dwcs(wcsname${aa}) {} set dwcs(radesys${aa}) {} set dwcs(equinox${aa}) {} set dwcs(latpole${aa}) {} set dwcs(lonpole${aa}) {} for {set ii 1} {$ii<=3} {incr ii} { set dwcs(ctype${ii}${aa}) {} set dwcs(cunit${ii}${aa}) {} set dwcs(crpix${ii}${aa}) {} set dwcs(crval${ii}${aa}) {} set dwcs(cdelt${ii}${aa}) {} } for {set ii 1} {$ii<=2} {incr ii} { for {set jj 1} {$jj<=2} {incr jj} { set dwcs(cd${ii}_${jj}${aa}) {} set dwcs(pc${ii}_${jj}${aa}) {} } for {set mm 0} {$mm<36} {incr mm} { set dwcs(pv${ii}_${mm}${aa}) {} } } set dwcs(cd3_3${aa}) {} set dwcs(pc3_3${aa}) {} } # primary only set dwcs(a_order) {} for {set mm 0} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { set dwcs(a_${mm}_${nn}) {} } } set dwcs(b_order) {} for {set mm 0} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { set dwcs(b_${mm}_${nn}) {} } } set dwcs(ap_order) {} for {set mm 0} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { set dwcs(ap_${mm}_${nn}) {} } } set dwcs(bp_order) {} for {set mm 0} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { set dwcs(bp_${mm}_${nn}) {} } } set lines [split $txt "\n"] # check for fits header, do it the hard way if {[llength $lines] == 1} { set lines {} while {"$txt" != {}} { lappend lines "[string range $txt 0 79]" set txt "[string replace $txt 0 79]" } } for {set ll 0} {$ll<[llength $lines]} {incr ll} { set line [lindex $lines $ll] set pp [split $line {=}] set key [string tolower [string trim [lindex $pp 0]]] # drop comments # some keywords can have '/' in the value (such as a date) # try the easy approach first set ee [lindex $pp 1] set dd [split $ee {/}] switch [llength $dd] { 0 - 1 - 2 {set aa [lindex $dd 0]} default { set ff [string first { /} $ee] if {$ff > 0} { set aa [string range $ee 0 $ff] } else { set aa [lindex $dd 0] } } } # drop any white space set bb [string trim $aa] # drop any single quotes set cc [string trim $bb {'}] # drop any white space set val [string trim $cc] # sanity check if {$key == {longpole}} { set key lonpole } if {$key == {radecsys}} { set key radesys } switch [string range $key 0 6] { mjd-obs - date-ob { set dwcs($key) $val } } switch [string range $key 0 5] { wcsnam - radesy - equino - latpol - lonpol - ctype1 - ctype2 - ctype3 - cunit1 - cunit2 - cunit3 - crpix1 - crpix2 - crpix3 - crval1 - crval2 - crval3 - cdelt1 - cdelt2 - cdelt3 - cd3_3 - pc3_3 - a_orde - b_orde - ap_ord - bp_ord { set dwcs($key) $val } } switch [string range $key 0 3] { epoc - date - cd1_ - cd1_ - cd2_ - cd2_ - pc1_ - pc1_ - pc2_ - pc2_ - pv1_ - pv2_ { set dwcs($key) $val } } switch [string range $key 0 2] { ap_ - bp_ { set dwcs($key) $val } } switch [string range $key 0 1] { a_ - b_ { set dwcs($key) $val } } } } # used by backup proc WCSFromVar {} { global wcs global dwcs global iwcs set rr {} if {$dwcs(mjd-obs) != {}} { append rr "MJD-OBS = $dwcs(mjd-obs)\n" } if {$dwcs(date-obs) != {}} { append rr "DATE-OBS = '$dwcs(date-obs)'\n" } if {$dwcs(date) != {}} { append rr "DATE = '$dwcs(date)'\n" } if {$dwcs(epoch) != {}} { append rr "EPOCH = $dwcs(epoch)\n" } foreach aa {{} a b c d e f g h i j k l m n o p q r s t u v w x y z} { set bb [string toupper $aa] if {$dwcs(wcsname${aa}) != {}} { append rr "WCSNAME${bb} = '$dwcs(wcsname${aa})'\n" } if {$dwcs(radesys${aa}) != {}} { append rr "RADESYS${bb} = '$dwcs(radesys${aa})'\n" } if {$dwcs(equinox${aa}) != {}} { append rr "EQUINOX${bb} = $dwcs(equinox${aa})\n" } if {$dwcs(latpole${aa}) != {}} { append rr "LATPOLE${bb} = $dwcs(latpole${aa})\n" } if {$dwcs(lonpole${aa}) != {}} { append rr "LONPOLE${bb} = $dwcs(lonpole${aa})\n" } for {set ii 1} {$ii<=3} {incr ii} { if {$dwcs(ctype${ii}${aa}) != {}} { append rr "CTYPE${ii}${bb} = '$dwcs(ctype${ii}${aa})'\n" } if {$dwcs(cunit${ii}${aa}) != {}} { append rr "CUNIT${ii}${bb} = '$dwcs(cunit${ii}${aa})'\n" } if {$dwcs(crpix${ii}${aa}) != {}} { append rr "CRPIX${ii}${bb} = $dwcs(crpix${ii}${aa})\n" } if {$dwcs(crval${ii}${aa}) != {}} { append rr "CRVAL${ii}${bb} = $dwcs(crval${ii}${aa})\n" } if {$dwcs(cdelt${ii}${aa}) != {}} { append rr "CDELT${ii}${bb} = $dwcs(cdelt${ii}${aa})\n" } } for {set ii 1} {$ii<=2} {incr ii} { for {set jj 1} {$jj<=2} {incr jj} { if {$dwcs(cd${ii}_${jj}${aa}) != {}} { append rr "CD${ii}_${jj}${bb} = $dwcs(cd${ii}_${jj}${aa})\n" } if {$dwcs(pc${ii}_${jj}${aa}) != {}} { append rr "PC${ii}_${jj}${bb} = $dwcs(pc${ii}_${jj}${aa})\n" } } for {set mm 0} {$mm<36} {incr mm} { if {$dwcs(pv${ii}_${mm}${aa}) != {}} { append rr "PV${ii}_${mm}${bb} = $dwcs(pv${ii}_${mm}${aa})\n" } } } if {$dwcs(cd3_3${aa}) != {}} { append rr "CD3_3${bb} = $dwcs(cd3_3${aa})\n" } if {$dwcs(pc3_3${aa}) != {}} { append rr "PC3_3${bb} = $dwcs(pc3_3${aa})\n" } } if {$dwcs(a_order) != {}} { append rr "A_ORDER = $dwcs(a_order)\n" } for {set mm 0} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { if {$dwcs(a_${mm}_${nn}) != {}} { append rr "A_${mm}_${nn} = $dwcs(a_${mm}_${nn})\n" } } } if {$dwcs(b_order) != {}} { append rr "B_ORDER = $dwcs(b_order)\n" } for {set mm 0} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { if {$dwcs(b_${mm}_${nn}) != {}} { append rr "B_${mm}_${nn} = $dwcs(b_${mm}_${nn})\n" } } } if {$dwcs(ap_order) != {}} { append rr "AP_ORDER = $dwcs(ap_order)\n" } for {set mm 0} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { if {$dwcs(ap_${mm}_${nn}) != {}} { append rr "AP_${mm}_${nn} = $dwcs(ap_${mm}_${nn})\n" } } } if {$dwcs(bp_order) != {}} { append rr "BP_ORDER = $dwcs(bp_order)\n" } for {set mm 0} {$mm<6} {incr mm} { for {set nn 0} {$nn<6} {incr nn} { if {$dwcs(bp_${mm}_${nn}) != {}} { append rr "BP_${mm}_${nn} = $dwcs(bp_${mm}_${nn})\n" } } } return $rr } # Process Cmds proc ProcessWCSCmd {varname iname sock fn} { upvar $varname var upvar $iname i global wcs global current global rgb set item [string tolower [lindex $var $i]] switch -- $item { open {WCSDialog} close {WCSDestroyDialog} system { incr i set wcs(system) [string tolower [lindex $var $i]] UpdateWCS } sky { incr i set wcs(sky) [string tolower [lindex $var $i]] UpdateWCS } format - skyformat { incr i switch -- [string tolower [lindex $var $i]] { deg - degree - degrees {set wcs(skyformat) degrees} default {set wcs(skyformat) [string tolower [lindex $var $i]]} } UpdateWCS } align { incr i set current(align) [FromYesNo [lindex $var $i]] AlignWCSFrame } reset { set ext 1 set nn [lindex $var [expr $i+1]] if {[string is integer -strict $nn]} { incr i set ext $nn } RGBEvalLock rgb(lock,wcs) $current(frame) [list $current(frame) wcs reset $ext] UpdateWCS } replace - append { set ext 1 set nn [lindex $var [expr $i+1]] if {[string is integer -strict $nn]} { incr i set ext $nn } if {$sock != {}} { incr i if {[lindex $var $i] == {}} { RGBEvalLock rgb(lock,wcs) $current(frame) [list $current(frame) wcs $item $ext $sock] incr i -1 } else { RGBEvalLock rgb(lock,wcs) $current(frame) "$current(frame) wcs $item $ext \{\{[lindex $var $i]\}\}" } } elseif {$fn != {}} { RGBEvalLock rgb(lock,wcs) $current(frame) "$current(frame) wcs $item $ext \{\{$fn\}\}" } else { incr i if {[lindex $var $i] == "file"} { incr i } RGBEvalLock rgb(lock,wcs) $current(frame) "$current(frame) wcs $item $ext \{\{[lindex $var $i]\}\}" } UpdateWCS } fk4 - fk5 - icrs - galactic - ecliptic { set wcs(sky) $item UpdateWCS } degrees - sexagesimal { set wcs(skyformat) $item UpdateWCS } wcs - wcsa - wcsb - wcsc - wcsd - wcse - wcsf - wcsg - wcsh - wcsi - wcsj - wcsk - wcsl - wcsm - wcsn - wcso - wcsp - wcsq - wcsr - wcss - wcst - wcsu - wcsv - wcsw - wcsx - wcsy - wcsz { set wcs(system) $item UpdateWCS } } } proc ProcessSendWCSCmd {proc id param} { global current global wcs switch -- [string tolower $param] { align {$proc $id [ToYesNo $current(align)]} system {$proc $id "$wcs(system)\n"} sky {$proc $id "$wcs(sky)\n"} format - skyformat {$proc $id "$wcs(skyformat)\n"} default {$proc $id "$wcs(system)\n"} } } # backward compatibilty proc ProcessAlignCmd {varname iname} { upvar $varname var upvar $iname i global current switch -- [string tolower [lindex $var $i]] { yes - true - on - 1 - no - false - off - 0 { set current(align) [FromYesNo [lindex $var $i]] AlignWCSFrame } default { set current(align) 1 AlignWCSFrame incr i -1 } } } proc ProcessSendAlignCmd {proc id param} { global current $proc $id [ToYesNo $current(align)] } saods9/ds9/library/win32.tcl000755 000765 000000 00000001136 12705445650 016211 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc Win32Print {} { global ds9 # we need to be realized RealizeDS9 # need the colorbar levels updated UpdateColormapLevel if {[win32 pm print begin [winfo width $ds9(canvas)] [winfo height $ds9(canvas)] yes]} { foreach f $ds9(frames) { $f win32 print } colorbar win32 print colorbarrgb win32 print win32 pm print end } } proc Win32PageSetup {} { win32 pm pagesetup } saods9/ds9/library/xmfbox.tcl000644 000765 000000 00000063422 12745705303 016553 0ustar00joyewheel000000 000000 # xmfbox.tcl -- # # Implements the "Motif" style file selection dialog for the # Unix platform. This implementation is used only if the # "::tk_strictMotif" flag is set. # # Copyright (c) 1996 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Scriptics Corporation # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. namespace eval ::tk::dialog {} namespace eval ::tk::dialog::file {} # ::tk::MotifFDialog -- # # Implements a file dialog similar to the standard Motif file # selection box. # # Arguments: # type "open" or "save" # args Options parsed by the procedure. # # Results: # When -multiple is set to 0, this returns the absolute pathname # of the selected file. (NOTE: This is not the same as a single # element list.) # # When -multiple is set to > 0, this returns a Tcl list of absolute # pathnames. The argument for -multiple is ignored, but for consistency # with Windows it defines the maximum amount of memory to allocate for # the returned filenames. proc ::tk::MotifFDialog {type args} { variable ::tk::Priv set dataName __tk_filedialog upvar ::tk::dialog::file::$dataName data set w [MotifFDialog_Create $dataName $type $args] # Set a grab and claim the focus too. ::tk::SetFocusGrab $w $data(sEnt) $data(sEnt) selection range 0 end # Wait for the user to respond, then restore the focus and # return the index of the selected button. Restore the focus # before deleting the window, since otherwise the window manager # may take the focus away so we can't redirect it. Finally, # restore any grab that was in effect. vwait ::tk::Priv(selectFilePath) set result $Priv(selectFilePath) ::tk::RestoreFocusGrab $w $data(sEnt) withdraw return $result } # ::tk::MotifFDialog_Create -- # # Creates the Motif file dialog (if it doesn't exist yet) and # initialize the internal data structure associated with the # dialog. # # This procedure is used by ::tk::MotifFDialog to create the # dialog. It's also used by the test suite to test the Motif # file dialog implementation. User code shouldn't call this # procedure directly. # # Arguments: # dataName Name of the global "data" array for the file dialog. # type "Save" or "Open" # argList Options parsed by the procedure. # # Results: # Pathname of the file dialog. proc ::tk::MotifFDialog_Create {dataName type argList} { upvar ::tk::dialog::file::$dataName data MotifFDialog_Config $dataName $type $argList if {$data(-parent) eq "."} { set w .$dataName } else { set w $data(-parent).$dataName } # (re)create the dialog box if necessary # if {![winfo exists $w]} { MotifFDialog_BuildUI $w } elseif {[winfo class $w] ne "TkMotifFDialog"} { destroy $w MotifFDialog_BuildUI $w } else { set data(fEnt) $w.top.f1.ent set data(dList) $w.top.f2.a.l set data(fList) $w.top.f2.b.l set data(sEnt) $w.top.f3.ent set data(okBtn) $w.bot.ok set data(filterBtn) $w.bot.filter set data(cancelBtn) $w.bot.cancel } MotifFDialog_SetListMode $w # Dialog boxes should be transient with respect to their parent, # so that they will always stay on top of their parent window. However, # some window managers will create the window as withdrawn if the parent # window is withdrawn or iconified. Combined with the grab we put on the # window, this can hang the entire application. Therefore we only make # the dialog transient if the parent is viewable. if {[winfo viewable [winfo toplevel $data(-parent)]] } { wm transient $w $data(-parent) } MotifFDialog_FileTypes $w MotifFDialog_Update $w # Withdraw the window, then update all the geometry information # so we know how big it wants to be, then center the window in the # display (Motif style) and de-iconify it. ::tk::PlaceWindow $w wm title $w $data(-title) return $w } # ::tk::MotifFDialog_FileTypes -- # # Checks the -filetypes option. If present this adds a list of radio- # buttons to pick the file types from. # # Arguments: # w Pathname of the tk_get*File dialogue. # # Results: # none proc ::tk::MotifFDialog_FileTypes {w} { upvar ::tk::dialog::file::[winfo name $w] data set f $w.top.f3.types destroy $f # No file types: use "*" as the filter and display no radio-buttons if {$data(-filetypes) eq ""} { set data(filter) * return } # The filetypes radiobuttons # set data(fileType) $data(-defaulttype) # Default type to first entry set initialTypeName [lindex $data(-filetypes) 0 0] if {$data(-typevariable) ne ""} { upvar #0 $data(-typevariable) typeVariable if {[info exists typeVariable]} { set initialTypeName $typeVariable } } set ix 0 set data(fileType) 0 foreach fltr $data(-filetypes) { set fname [lindex $fltr 0] if {[string first $initialTypeName $fname] == 0} { set data(fileType) $ix break } incr ix } MotifFDialog_SetFilter $w [lindex $data(-filetypes) $data(fileType)] #don't produce radiobuttons for only one filetype if {[llength $data(-filetypes)] == 1} { return } ttk::frame $f set cnt 0 if {$data(-filetypes) ne {}} { foreach type $data(-filetypes) { set title [lindex [lindex $type 0] 0] set filter [lindex $type 1] ttk::radiobutton $f.b$cnt \ -text $title \ -variable ::tk::dialog::file::[winfo name $w](fileType) \ -value $cnt \ -command [list tk::MotifFDialog_SetFilter $w $type] pack $f.b$cnt -side left incr cnt } } $f.b$data(fileType) invoke pack $f -side bottom -fill both return } # This proc gets called whenever data(filter) is set # proc ::tk::MotifFDialog_SetFilter {w type} { upvar ::tk::dialog::file::[winfo name $w] data variable ::tk::Priv set data(filter) [lindex $type 1] set Priv(selectFileType) [lindex [lindex $type 0] 0] MotifFDialog_Update $w } # ::tk::MotifFDialog_Config -- # # Iterates over the optional arguments to determine the option # values for the Motif file dialog; gives default values to # unspecified options. # # Arguments: # dataName The name of the global variable in which # data for the file dialog is stored. # type "Save" or "Open" # argList Options parsed by the procedure. proc ::tk::MotifFDialog_Config {dataName type argList} { upvar ::tk::dialog::file::$dataName data set data(type) $type # 1: the configuration specs # set specs { {-defaultextension "" "" ""} {-filetypes "" "" ""} {-initialdir "" "" ""} {-initialfile "" "" ""} {-parent "" "" "."} {-title "" "" ""} {-typevariable "" "" ""} } if {$type eq "open"} { lappend specs {-multiple "" "" "0"} } if {$type eq "save"} { lappend specs {-confirmoverwrite "" "" "1"} } set data(-multiple) 0 set data(-confirmoverwrite) 1 # 2: default values depending on the type of the dialog # if {![info exists data(selectPath)]} { # first time the dialog has been popped up set data(selectPath) [pwd] set data(selectFile) "" } # 3: parse the arguments # tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList if {$data(-title) eq ""} { if {$type eq "open"} { if {$data(-multiple) != 0} { set data(-title) "[mc {Open Multiple Files}]" } else { set data(-title) [mc "Open"] } } else { set data(-title) [mc "Save As"] } } # 4: set the default directory and selection according to the -initial # settings # if {$data(-initialdir) ne ""} { if {[file isdirectory $data(-initialdir)]} { set data(selectPath) [lindex [glob $data(-initialdir)] 0] } else { set data(selectPath) [pwd] } # Convert the initialdir to an absolute path name. set old [pwd] cd $data(selectPath) set data(selectPath) [pwd] cd $old } set data(selectFile) $data(-initialfile) # 5. Parse the -filetypes option. It is not used by the motif # file dialog, but we check for validity of the value to make sure # the application code also runs fine with the TK file dialog. # set data(-filetypes) [::tk::FDGetFileTypes $data(-filetypes)] if {![info exists data(filter)]} { set data(filter) * } if {![winfo exists $data(-parent)]} { return -code error -errorcode [list TK LOOKUP WINDOW $data(-parent)] \ "bad window path name \"$data(-parent)\"" } } # ::tk::MotifFDialog_BuildUI -- # # Builds the UI components of the Motif file dialog. # # Arguments: # w Pathname of the dialog to build. # # Results: # None. proc ::tk::MotifFDialog_BuildUI {w} { set dataName [lindex [split $w .] end] upvar ::tk::dialog::file::$dataName data # Create the dialog toplevel and internal frames. # toplevel $w -class TkMotifFDialog set top [ttk::frame $w.top -relief raised -borderwidth 1] set bot [ttk::frame $w.bot -relief raised -borderwidth 1] pack $w.bot -side bottom -fill x pack $w.top -side top -expand yes -fill both set f1 [ttk::frame $top.f1] set f2 [ttk::frame $top.f2] set f3 [ttk::frame $top.f3] pack $f1 -side top -fill x pack $f3 -side bottom -fill x pack $f2 -expand yes -fill both set f2a [ttk::frame $f2.a] set f2b [ttk::frame $f2.b] grid $f2a -row 0 -column 0 -rowspan 1 -columnspan 1 -padx 4 -pady 4 \ -sticky news grid $f2b -row 0 -column 1 -rowspan 1 -columnspan 1 -padx 4 -pady 4 \ -sticky news grid rowconfigure $f2 0 -minsize 0 -weight 1 grid columnconfigure $f2 0 -minsize 0 -weight 1 grid columnconfigure $f2 1 -minsize 150 -weight 2 # The Filter box # bind [::tk::AmpWidget ttk::label $f1.lab -text [mc "Fil&ter:"] -anchor w] \ <> [list focus $f1.ent] ttk::entry $f1.ent pack $f1.lab -side top -fill x -padx 6 -pady 4 pack $f1.ent -side top -fill x -padx 4 -pady 0 set data(fEnt) $f1.ent # The file and directory lists # set data(dList) [MotifFDialog_MakeSList $w $f2a \ [mc "&Directory:"] DList] set data(fList) [MotifFDialog_MakeSList $w $f2b \ [mc "Fi&les:"] FList] # The Selection box # bind [::tk::AmpWidget ttk::label $f3.lab -text [mc "&Selection:"] -anchor w] \ <> [list focus $f3.ent] ttk::entry $f3.ent pack $f3.lab -side top -fill x -padx 6 -pady 0 pack $f3.ent -side top -fill x -padx 4 -pady 4 set data(sEnt) $f3.ent # The buttons # set maxWidth [::tk::mcmaxamp &OK &Filter &Cancel] set maxWidth [expr {$maxWidth<6?6:$maxWidth}] set data(okBtn) [::tk::AmpWidget ttk::button $bot.ok -text [mc "&OK"] \ -width $maxWidth \ -command [list tk::MotifFDialog_OkCmd $w]] set data(filterBtn) [::tk::AmpWidget ttk::button $bot.filter -text [mc "&Filter"] \ -width $maxWidth \ -command [list tk::MotifFDialog_FilterCmd $w]] set data(cancelBtn) [::tk::AmpWidget ttk::button $bot.cancel -text [mc "&Cancel"] \ -width $maxWidth \ -command [list tk::MotifFDialog_CancelCmd $w]] pack $bot.ok $bot.filter $bot.cancel -padx 10 -pady 10 -expand yes \ -side left # Create the bindings: # bind $w [list ::tk::AltKeyInDialog $w %A] bind $data(fEnt) [list tk::MotifFDialog_ActivateFEnt $w] bind $data(sEnt) [list tk::MotifFDialog_ActivateSEnt $w] bind $w [list tk::MotifFDialog_CancelCmd $w] bind $w.bot {set ::tk::Priv(selectFilePath) {}} wm protocol $w WM_DELETE_WINDOW [list tk::MotifFDialog_CancelCmd $w] } proc ::tk::MotifFDialog_SetListMode {w} { upvar ::tk::dialog::file::[winfo name $w] data if {$data(-multiple) != 0} { set selectmode extended } else { set selectmode browse } set f $w.top.f2.b $f.l configure -selectmode $selectmode } # ::tk::MotifFDialog_MakeSList -- # # Create a scrolled-listbox and set the keyboard accelerator # bindings so that the list selection follows what the user # types. # # Arguments: # w Pathname of the dialog box. # f Frame widget inside which to create the scrolled # listbox. This frame widget already exists. # label The string to display on top of the listbox. # under Sets the -under option of the label. # cmdPrefix Specifies procedures to call when the listbox is # browsed or activated. proc ::tk::MotifFDialog_MakeSList {w f label cmdPrefix} { bind [::tk::AmpWidget ttk::label $f.lab -text $label -anchor w] \ <> [list focus $f.l] listbox $f.l -width 12 -height 5 -exportselection 0\ -xscrollcommand [list $f.h set] -yscrollcommand [list $f.v set] ttk::scrollbar $f.v -orient vertical -takefocus 0 -command [list $f.l yview] ttk::scrollbar $f.h -orient horizontal -takefocus 0 -command [list $f.l xview] grid $f.lab -row 0 -column 0 -sticky news -rowspan 1 -columnspan 2 \ -padx 2 -pady 2 grid $f.l -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky news grid $f.v -row 1 -column 1 -rowspan 1 -columnspan 1 -sticky news grid $f.h -row 2 -column 0 -rowspan 1 -columnspan 1 -sticky news grid rowconfigure $f 0 -weight 0 -minsize 0 grid rowconfigure $f 1 -weight 1 -minsize 0 grid columnconfigure $f 0 -weight 1 -minsize 0 # bindings for the listboxes # set list $f.l bind $list <> [list tk::MotifFDialog_Browse$cmdPrefix $w] bind $list \ [list tk::MotifFDialog_Activate$cmdPrefix $w] bind $list "tk::MotifFDialog_Browse$cmdPrefix [list $w]; \ tk::MotifFDialog_Activate$cmdPrefix [list $w]" bindtags $list [list Listbox $list [winfo toplevel $list] all] ListBoxKeyAccel_Set $list return $f.l } # ::tk::MotifFDialog_InterpFilter -- # # Interpret the string in the filter entry into two components: # the directory and the pattern. If the string is a relative # pathname, give a warning to the user and restore the pattern # to original. # # Arguments: # w pathname of the dialog box. # # Results: # A list of two elements. The first element is the directory # specified # by the filter. The second element is the filter # pattern itself. proc ::tk::MotifFDialog_InterpFilter {w} { upvar ::tk::dialog::file::[winfo name $w] data set text [string trim [$data(fEnt) get]] # Perform tilde substitution # set badTilde 0 if {[string index $text 0] eq "~"} { set list [file split $text] set tilde [lindex $list 0] if {[catch {set tilde [glob $tilde]}]} { set badTilde 1 } else { set text [eval file join [concat $tilde [lrange $list 1 end]]] } } # If the string is a relative pathname, combine it # with the current selectPath. set relative 0 if {[file pathtype $text] eq "relative"} { set relative 1 } elseif {$badTilde} { set relative 1 } if {$relative} { tk_messageBox -icon warning -type ok \ -message "\"$text\" must be an absolute pathname" $data(fEnt) delete 0 end $data(fEnt) insert 0 [::tk::dialog::file::JoinFile $data(selectPath) \ $data(filter)] return [list $data(selectPath) $data(filter)] } set resolved [::tk::dialog::file::JoinFile [file dirname $text] [file tail $text]] if {[file isdirectory $resolved]} { set dir $resolved set fil $data(filter) } else { set dir [file dirname $resolved] set fil [file tail $resolved] } return [list $dir $fil] } # ::tk::MotifFDialog_Update # # Load the files and synchronize the "filter" and "selection" fields # boxes. # # Arguments: # w pathname of the dialog box. # # Results: # None. proc ::tk::MotifFDialog_Update {w} { upvar ::tk::dialog::file::[winfo name $w] data $data(fEnt) delete 0 end $data(fEnt) insert 0 \ [::tk::dialog::file::JoinFile $data(selectPath) $data(filter)] $data(sEnt) delete 0 end $data(sEnt) insert 0 [::tk::dialog::file::JoinFile $data(selectPath) \ $data(selectFile)] MotifFDialog_LoadFiles $w } # ::tk::MotifFDialog_LoadFiles -- # # Loads the files and directories into the two listboxes according # to the filter setting. # # Arguments: # w pathname of the dialog box. # # Results: # None. proc ::tk::MotifFDialog_LoadFiles {w} { upvar ::tk::dialog::file::[winfo name $w] data $data(dList) delete 0 end $data(fList) delete 0 end set appPWD [pwd] if {[catch {cd $data(selectPath)}]} { cd $appPWD $data(dList) insert end ".." return } # Make the dir and file lists # # For speed we only have one glob, which reduces the file system # calls (good for slow NFS networks). # # We also do two smaller sorts (files + dirs) instead of one large sort, # which gives a small speed increase. # set top 0 set dlist "" set flist "" foreach f [glob -nocomplain .* *] { if {[file isdir ./$f]} { lappend dlist $f } else { foreach pat $data(filter) { if {[string match $pat $f]} { if {[string match .* $f]} { incr top } lappend flist $f break } } } } eval [list $data(dList) insert end] [lsort -dictionary $dlist] eval [list $data(fList) insert end] [lsort -dictionary $flist] # The user probably doesn't want to see the . files. We adjust the view # so that the listbox displays all the non-dot files $data(fList) yview $top cd $appPWD } # ::tk::MotifFDialog_BrowseDList -- # # This procedure is called when the directory list is browsed # (clicked-over) by the user. # # Arguments: # w The pathname of the dialog box. # # Results: # None. proc ::tk::MotifFDialog_BrowseDList {w} { upvar ::tk::dialog::file::[winfo name $w] data focus $data(dList) if {[$data(dList) curselection] eq ""} { return } set subdir [$data(dList) get [$data(dList) curselection]] if {$subdir eq ""} { return } $data(fList) selection clear 0 end set list [MotifFDialog_InterpFilter $w] set data(filter) [lindex $list 1] switch -- $subdir { . { set newSpec [::tk::dialog::file::JoinFile $data(selectPath) $data(filter)] } .. { set newSpec [::tk::dialog::file::JoinFile [file dirname $data(selectPath)] \ $data(filter)] } default { set newSpec [::tk::dialog::file::JoinFile [::tk::dialog::file::JoinFile \ $data(selectPath) $subdir] $data(filter)] } } $data(fEnt) delete 0 end $data(fEnt) insert 0 $newSpec } # ::tk::MotifFDialog_ActivateDList -- # # This procedure is called when the directory list is activated # (double-clicked) by the user. # # Arguments: # w The pathname of the dialog box. # # Results: # None. proc ::tk::MotifFDialog_ActivateDList {w} { upvar ::tk::dialog::file::[winfo name $w] data if {[$data(dList) curselection] eq ""} { return } set subdir [$data(dList) get [$data(dList) curselection]] if {$subdir eq ""} { return } $data(fList) selection clear 0 end switch -- $subdir { . { set newDir $data(selectPath) } .. { set newDir [file dirname $data(selectPath)] } default { set newDir [::tk::dialog::file::JoinFile $data(selectPath) $subdir] } } set data(selectPath) $newDir MotifFDialog_Update $w if {$subdir ne ".."} { $data(dList) selection set 0 $data(dList) activate 0 } else { $data(dList) selection set 1 $data(dList) activate 1 } } # ::tk::MotifFDialog_BrowseFList -- # # This procedure is called when the file list is browsed # (clicked-over) by the user. # # Arguments: # w The pathname of the dialog box. # # Results: # None. proc ::tk::MotifFDialog_BrowseFList {w} { upvar ::tk::dialog::file::[winfo name $w] data focus $data(fList) set data(selectFile) "" foreach item [$data(fList) curselection] { lappend data(selectFile) [$data(fList) get $item] } if {[llength $data(selectFile)] == 0} { return } $data(dList) selection clear 0 end $data(fEnt) delete 0 end $data(fEnt) insert 0 [::tk::dialog::file::JoinFile $data(selectPath) \ $data(filter)] # $data(fEnt) xview end # if it's a multiple selection box, just put in the filenames # otherwise put in the full path as usual $data(sEnt) delete 0 end if {$data(-multiple) != 0} { $data(sEnt) insert 0 $data(selectFile) } else { $data(sEnt) insert 0 [::tk::dialog::file::JoinFile $data(selectPath) \ [lindex $data(selectFile) 0]] } # $data(sEnt) xview end } # ::tk::MotifFDialog_ActivateFList -- # # This procedure is called when the file list is activated # (double-clicked) by the user. # # Arguments: # w The pathname of the dialog box. # # Results: # None. proc ::tk::MotifFDialog_ActivateFList {w} { upvar ::tk::dialog::file::[winfo name $w] data if {[$data(fList) curselection] eq ""} { return } set data(selectFile) [$data(fList) get [$data(fList) curselection]] if {$data(selectFile) eq ""} { return } else { MotifFDialog_ActivateSEnt $w } } # ::tk::MotifFDialog_ActivateFEnt -- # # This procedure is called when the user presses Return inside # the "filter" entry. It updates the dialog according to the # text inside the filter entry. # # Arguments: # w The pathname of the dialog box. # # Results: # None. proc ::tk::MotifFDialog_ActivateFEnt {w} { upvar ::tk::dialog::file::[winfo name $w] data set list [MotifFDialog_InterpFilter $w] set data(selectPath) [lindex $list 0] set data(filter) [lindex $list 1] MotifFDialog_Update $w } # ::tk::MotifFDialog_ActivateSEnt -- # # This procedure is called when the user presses Return inside # the "selection" entry. It sets the ::tk::Priv(selectFilePath) # variable so that the vwait loop in tk::MotifFDialog will be # terminated. # # Arguments: # w The pathname of the dialog box. # # Results: # None. proc ::tk::MotifFDialog_ActivateSEnt {w} { variable ::tk::Priv upvar ::tk::dialog::file::[winfo name $w] data set selectFilePath [string trim [$data(sEnt) get]] if {$selectFilePath eq ""} { MotifFDialog_FilterCmd $w return } if {$data(-multiple) == 0} { set selectFilePath [list $selectFilePath] } if {[file isdirectory [lindex $selectFilePath 0]]} { set data(selectPath) [lindex [glob $selectFilePath] 0] set data(selectFile) "" MotifFDialog_Update $w return } set newFileList "" foreach item $selectFilePath { if {[file pathtype $item] ne "absolute"} { set item [file join $data(selectPath) $item] } elseif {![file exists [file dirname $item]]} { tk_messageBox -icon warning -type ok \ -message [mc {Directory "%1$s" does not exist.} \ [file dirname $item]] return } # we want to strip any filtering/ext/blocking instructions # from the file name set aa [string first "\[" $item] if {$aa > 0} { set fn [string range $item 0 [expr $aa-1]] } else { set fn $item } if {![file exists $fn]} { if {$data(type) eq "open"} { tk_messageBox -icon warning -type ok \ -message [mc {File "%1$s" does not exist.} $fn] return } } elseif {$data(type) eq "save" && $data(-confirmoverwrite)} { set message [format %s%s \ [mc "File \"%1\$s\" already exists.\n\n" $selectFilePath] \ [mc {Replace existing file?}]] set answer [tk_messageBox -icon warning -type yesno \ -message $message] if {$answer eq "no"} { return } } lappend newFileList $item } # Return selected filter if {[info exists data(-typevariable)] && $data(-typevariable) ne "" && [info exists data(-filetypes)] && $data(-filetypes) ne ""} { upvar #0 $data(-typevariable) typeVariable set typeVariable [lindex $data(-filetypes) $data(fileType) 0] } if {$data(-multiple) != 0} { set Priv(selectFilePath) $newFileList } else { set Priv(selectFilePath) [lindex $newFileList 0] } # Set selectFile and selectPath to first item in list set Priv(selectFile) [file tail [lindex $newFileList 0]] set Priv(selectPath) [file dirname [lindex $newFileList 0]] } proc ::tk::MotifFDialog_OkCmd {w} { upvar ::tk::dialog::file::[winfo name $w] data MotifFDialog_ActivateSEnt $w } proc ::tk::MotifFDialog_FilterCmd {w} { upvar ::tk::dialog::file::[winfo name $w] data MotifFDialog_ActivateFEnt $w } proc ::tk::MotifFDialog_CancelCmd {w} { variable ::tk::Priv set Priv(selectFilePath) "" set Priv(selectFile) "" set Priv(selectPath) "" } proc ::tk::ListBoxKeyAccel_Set {w} { bind Listbox "" bind $w [list tk::ListBoxKeyAccel_Unset $w] bind $w [list tk::ListBoxKeyAccel_Key $w %A] } proc ::tk::ListBoxKeyAccel_Unset {w} { variable ::tk::Priv catch {after cancel $Priv(lbAccel,$w,afterId)} unset -nocomplain Priv(lbAccel,$w) Priv(lbAccel,$w,afterId) } # ::tk::ListBoxKeyAccel_Key-- # # This procedure maintains a list of recently entered keystrokes # over a listbox widget. It arranges an idle event to move the # selection of the listbox to the entry that begins with the # keystrokes. # # Arguments: # w The pathname of the listbox. # key The key which the user just pressed. # # Results: # None. proc ::tk::ListBoxKeyAccel_Key {w key} { variable ::tk::Priv if { $key eq "" } { return } append Priv(lbAccel,$w) $key ListBoxKeyAccel_Goto $w $Priv(lbAccel,$w) catch { after cancel $Priv(lbAccel,$w,afterId) } set Priv(lbAccel,$w,afterId) [after 500 \ [list tk::ListBoxKeyAccel_Reset $w]] } proc ::tk::ListBoxKeyAccel_Goto {w string} { variable ::tk::Priv set string [string tolower $string] set end [$w index end] set theIndex -1 for {set i 0} {$i < $end} {incr i} { set item [string tolower [$w get $i]] if {[string compare $string $item] >= 0} { set theIndex $i } if {[string compare $string $item] <= 0} { set theIndex $i break } } if {$theIndex >= 0} { $w selection clear 0 end $w selection set $theIndex $theIndex $w activate $theIndex $w see $theIndex event generate $w <> } } proc ::tk::ListBoxKeyAccel_Reset {w} { variable ::tk::Priv unset -nocomplain Priv(lbAccel,$w) } proc ::tk_getFileType {} { variable ::tk::Priv return $Priv(selectFileType) } saods9/ds9/library/xmlrpc.tcl000644 000765 000000 00000055056 12735544325 016565 0ustar00joyewheel000000 000000 # xmlrpc0.3 # Written by Eric Yeh # # Server API: # xmlrpc::serve # Note: all callable functions should be defined in the global scope # # Client API: # xmlrpc::call url methodName params # url is of the form "http://hostname:port" # methodName is the name of the method to call # and params is a list of arguments to the method # where each argument is a "typed tcl" value defined below # xmlrpc::buildRequest # return an XML-RPC client request # xmlrpc::marshall # return a marshalled "typed tcl" value # xmlrpc::unmarshall # return an unmarshalled "typed tcl" value # xmlrpc::assoc # return a cons of a list if the key matches # # Typed Tcl values: # Because Tcl has no types for variables, all values will be represented # as a 2 element tuple of the form: # {type, value} where value is the original value # and type is a string describing its type. # Valid types (case sensitive, must be lowercase): # int # boolean # string # double # dateTime.iso8601 # base64 # struct # array # Note: # When marshalling dictionaries(tcl arrays), tcl has no # way of creating unnamed dictionaries. Therefore, # the way to use a dictionary is to create it as normal, # and refer to its name in the "tcl type". # For example: # set dict(first) {string eric} # xmlrpc::marshall {struct dict} # # the marshall procedure will attempt to "find" dict # using upvar(yuck!) and checking the global scope. # # Unmarshalling of a dictionary results in a 2 element # list of the form (remaining, alist) # where remaining is unused marshalled data (should be empty) # and alist is an A-list. # An A-list has the form: # {key, datum} where key is the key and datum is its value. # The method "assoc" is provided to access information from # this data structure. It behaves like the LISP assoc, in that # it will return the (key, datum) pair if a match is found. # TODO: # -currently server functions can't return dictionaries # -add more error handling # -Check for [{}] in unmarshalling # -Empty dictionaries package provide xmlrpc 0.3 namespace eval xmlrpc { namespace export call buildRequest marshall unmarshall assoc namespace export serve variable READSIZE 4096; # read size variable WS "\[ |\n|\t\|\r]"; # WhiteSpace variable W "\[^ |\n|\t\]"; # a word with no spaces variable DIGIT "\[0-9\]"; # Digit variable response ""; # response to return variable acceptfd ""; # socket to listen on variable DEBUG 0; # debug } # Given a port, create a new socket # and start listening on it # proc xmlrpc::serve {port} { variable acceptfd set acceptfd [socket -server xmlrpc::serveOnce $port] return $acceptfd } # Accept a new connection # proc xmlrpc::serveOnce {sock addr port} { variable READSIZE debug "in serveOnce: addr: $addr" debug "in serveOnce: port: $port" fconfigure $sock -translation {lf lf} -buffersize $READSIZE fconfigure $sock -blocking off fileevent $sock readable [list xmlrpc::doRequest $sock] } # Given a socket, # Handle an XML-RPC request # proc xmlrpc::doRequest {sock} { variable WS set res [readHeader $sock] set headerStatus [lindex $res 0]; # Header + Status set body [lindex $res 1]; # Body, if any set RE "\[^\n\]+\n(.*)" if {![regexp $RE $headerStatus {} header]} { return [errReturn "Malformed Request"] } set body [getBody $sock $header $body] set RE "<\?xml.version=."; # xml version append RE "\[^\?\]+.\?>$WS*"; # version number append RE "$WS*"; # methodCall tag append RE ""; # methodName tag append RE "(\[a-zA-Z0-9_:\/\\.\]+)"; # method Name append RE "$WS*"; # end methodName tag append RE "(.*)"; # parameters, if any append RE ".*"; # end methodCall tag if {![regexp $RE $body {} mname params]} { return [errReturn "Malformed methodCall"] } set args {} set param [string range $params 8 end] set param [string trim $param] while {[string range $param 0 6] == "" || [string range $param 0 7] == ""} { # check for empty element if {[string range $param 0 7] == ""} { lappend args {} set param [string range $param 8 end] set param [string trim $param] continue } set param [string range $param 7 end] set param [string trim $param] set res [unmarshall $param] set param [lindex $res 0] set el [lindex $res 1] lappend args $el if {[string range $param 0 7] != ""} { return [errReturn "Invalid End Param"] } set param [string range $param 8 end] set param [string trim $param] } if {$param != ""} { return [errReturn "Invalid End Params"] } if {[catch {set result [eval ::$mname $args]}]} { set response [buildFault 100 "eval() failed"] } else { set response [buildResponse $result] } debug "in doRequest: response:\n$response" puts -nonewline $sock $response flush $sock catch {close $sock} } # Given a "typed tcl" value, # build an XML-RPC response # proc buildResponse {result} { # build the body set body "\n" append body "\n" append body "\t\n" append body "\t\t\n" append body [xmlrpc::marshall $result 3 2] append body "\n\t\t\n" append body "\t\n" append body "\n" set lenbod [string length $body] # build the header set header "HTTP/1.1 200 OK\n" append header "Content-Type: text/xml\n" append header "Content-length: $lenbod\n" set response "$header\n$body" return $response #return [string trim $response] } # Given an error code (integer) # and an errmsg (string) # build an XML-RPC fault # proc buildFault {errcode errmsg} { set err(faultCode) [list int $errcode] set err(faultString) [list string $errmsg] # build the body set body "\n" append body "\n" append body "\t\n" append body [xmlrpc::marshall {struct err} 2] append body "\t\n" append body "\n" set lenbod [string length $body] # build the header set header "HTTP/1.1 200 OK\n" append header "Content-Type: text/xml\n" append header "Content-length: $lenbod\n" set response "$header\n$body" return [string trim $response] } # send an XML-RPC request # proc xmlrpc::call {url method methodName params {ntabs 4} {distance 3}} { variable READSIZE variable response global readdone global xmlcall set readdone 0 set xmlcall 1 set RE {http://([^:]+):([0-9]+)} if {![regexp $RE $url {} host port]} { return [errReturn "Malformed URL"] } set sock [socket $host $port] fconfigure $sock -translation {lf lf} -buffersize $READSIZE fconfigure $sock -blocking off if {[catch {set request [buildRequest $method $methodName $params $ntabs $distance]}]} { return } puts -nonewline $sock $request flush $sock fileevent $sock readable [list xmlrpc::getResponse $sock] vwait readdone catch {close $sock} if {$readdone > 0} { return $response } else { return [errReturn "xmlrpc::call failed"] } } # Given a socket to read on, # get and parse the response from the server # proc xmlrpc::getResponse {sock} { variable response global readdone set res [readHeader $sock] set headerStatus [lindex $res 0]; # Header + Status set body [lindex $res 1]; # Body, if any set header [parseHTTPCode $headerStatus] set body [getBody $sock $header $body] set response [parseResponse $body] set readdone 1 } # Given a socket to read on, # a string of header information # and a string, body, # return a string representing the entire body # proc xmlrpc::getBody {sock header body} { set res [parseHTTPHeaders $header] set headersl [lindex $res 1]; # A-list of headers set expLenl [assoc "Content-Length" $headersl] if {$expLenl == {}} { return [errReturn "No Content-Length found"] } set expLen [lindex $expLenl 1] set body [readBody $body $expLen $sock] return $body } # Given a socket to read on, # Return a 2 element list of the form: # {header, body} where both are strings # Note: header will include the first line which is the status # proc xmlrpc::readHeader {sock} { set buffer "" while {1} { if {[catch {set buff [nbRead $sock]}]} { return [errReturn "Premature eof"] } append buffer $buff set nindex [string first "\n\n" $buffer] if {$nindex > 0} { break } set bindex [string first "\r\n\r\n" $buffer] if {$bindex > 0} { break } } if {$nindex > 0} { set header [string range $buffer 0 [expr $nindex - 1]] set body [string range $buffer [expr $nindex + 2] end] } elseif {$bindex > 0} { set header [string range $buffer 0 [expr $bindex - 1]] set body [string range $buffer [expr $bindex + 4] end] } return [list $header $body] } # Given the body buffer, # the number of bytes expected in the body (Content-Length) # and a socket to read on, # return the entire body buffer # proc xmlrpc::readBody {body expLen sock} { set newbody $body while {1} { if {[catch {set buff [nbRead $sock]}]} { return [errReturn "Premature eof"] } append newbody $buff set bodLen [string length $newbody] if {$bodLen == $expLen} { break } elseif {$bodLen > $expLen} { return [errReturn "Content-length:$expLen does not match Body Length:$bodLen"] } } return $newbody } # Given a string, str, # check the HTTP status # and return the unused portion of str # proc xmlrpc::parseHTTPCode {str} { variable DIGIT set RE "HTTP/"; # HTTP message append RE "($DIGIT+\\.*$DIGIT*)."; # version append RE "($DIGIT+)."; # status code append RE "(\[^\n\]+)\n(.*)"; # status message if {![regexp $RE $str {} vern status code rest]} { return [errReturn "Unrecognized HTTP code:\n$str"] } if {$status != "200"} { return [errReturn "Bad HTTP status: $status"] } return $rest } # Given a string, str, # return a 2 element list of the form: # {remaining, alist} # where remaining is the unused portion of str # and alist is an A-list of header information # proc xmlrpc::parseHTTPHeaders {str} { set headers {} set remain {} set remainp 0 set RE {([^:]+):(.*)} set parts [split $str "\n"] foreach {part} $parts { if {$part == "" && !$remainp} { set remainp 1 continue } if {$remainp} { lappend remain $part continue } if {![regexp $RE $part {} key value]} { return [errReturn "Unrecognized HTTP Header format: $part"] } set value [string trim $value] lappend headers [list $key $value] } set rest [join $remain "\n"] return [list $rest $headers] } # Given a string, str # parse the response from the server # returning the unmarshalled data # proc xmlrpc::parseResponse {str} { variable WS set RE "<\?xml.version=."; # xml version append RE "(\[^\?\]+).\?>$WS*"; # version number append RE "$WS*"; # method response tag append RE "$WS*"; # params tag append RE "$WS*"; # param tag append RE "(.*)"; # value append RE "$WS*"; # end param tag append RE "$WS*"; # end params tag append RE ""; # end method response tag if {![regexp $RE $str {} vern value]} { set RE "<\?xml.version=."; # xml version append RE "(\[^\?\]+).\?>$WS*"; # version number append RE "$WS*"; # method response tag append RE "$WS*"; # fault tag append RE "(.*)$WS*"; # fault values append RE "$WS*"; # end fault tag append RE ""; # end method response tag if {![regexp $RE $str {} vern value]} { return [errReturn "Unrecognized response from server"] } } set result [unmarshall $value] return $result } # Given a non-blocking file descriptor, fd # do a read # proc xmlrpc::nbRead {fd} { variable READSIZE fileevent $fd readable "" set buffer "" while {1} { if {[eof $fd]} { catch {close $fd} break } set temp [read $fd $READSIZE] if {$temp == ""} { break } append buffer $temp } return $buffer } # Given a methodName, # and a list of parameters, # return an XML-RPC request # proc xmlrpc::buildRequest {method methodName params {ntabs 4} {distance 2}} { # build the body set body "\n" append body "\n" append body "\t$methodName\n" if {$params != {}} { append body "\t\t\n" foreach {param} $params { append body "\t\t\t\n" append body [xmlrpc::marshall $param $ntabs $distance] append body "\n\t\t\t\n" } append body "\t\t\n" } append body "\n" # set body [regsub -all "\n" $body "\r\n"] set lenbod [string length $body] # build the header set header "POST /$method HTTP/1.0\n" append header "Content-Type: text/xml\n" append header "Content-length: $lenbod\n" # set header [regsub -all "\n" $header "\r\n"] # set request "$header\r\n$body" set request "$header\n$body" return $request } # Given a "typed tcl" value # return the marshalled representation # proc xmlrpc::marshall {param {ntabs 0} {distance 1}} { if {![validParam $param]} { return [errReturn "Malformed Parameter: $param"] } set strtabs "" for {set x 0} {$x < $ntabs} {incr x} { append strtabs "\t" } set type [lindex $param 0] set val [lindex $param 1] if {$type == "int"} { return "$strtabs$val" } elseif {$type == "i4"} { return "$strtabs$val" } elseif {$type == "boolean"} { return "$strtabs$val" } elseif {$type == "string"} { return "$strtabs$val" } elseif {$type == "double"} { return "$strtabs$val" } elseif {$type == "dateTime.iso8601"} { return "$strtabs$val" } elseif {$type == "base64"} { return "$strtabs$val" } elseif {$type == "struct"} { # get the original caller's scope upvar $distance $val dict # try the global scope if {![array exists dict]} { upvar #0 $val dict } set str "$strtabs\n" append str "$strtabs\t\n" foreach {k v} [array get dict] { append str "$strtabs\t\t\n" append str "$strtabs\t\t\t$k\n" append str [marshall $v [expr $ntabs + 3] [expr $distance + 1]] append str "\n$strtabs\t\t\n" } append str "$strtabs\t\n" append str "$strtabs\n" return $str } elseif {$type == "array"} { set str "$strtabs\n" append str "$strtabs\t\n" append str "$strtabs\t\t\n" foreach el $val { append str [marshall $el [expr $ntabs + 3] [expr $distance + 1]] append str "\n" } append str "$strtabs\t\t\n" append str "$strtabs\t\n" append str "$strtabs\n" return $str } else { return [errReturn "Unknown type: $type"] } } # Given a value param, # return 1 if it a valid parameter # return 0 if not # A valid parameter is a 2 element tuple # proc xmlrpc::validParam {param} { if {[llength $param] != 2} { return 0 } return 1 } # Given a marshalled value, # unmarshall it and return it # proc xmlrpc::unmarshall {str} { set str [string trim $str] if {[string range $str 0 6] != ""} { # check for empty element if {[string range $str 0 7] != ""} { return [errReturn "Bad value tag"] } set rest [string range $str 8 end] set rest [string trim $rest] return [list $rest {}] } set str [string range $str 7 end] set str [string trimleft $str] set RE {<([^>]+)>} if {![regexp $RE $str {} btag]} { return [errReturn "No beginning tag found: $str"] } if {$btag == "int" || $btag == "i4"} { set res [umInt $str] } elseif {$btag== "boolean"} { set res [umBool $str] } elseif {$btag == "string"} { set res [umString $str] } elseif {$btag == "double"} { set res [umDouble $str] } elseif {$btag == "dateTime.iso8601"} { set res [umDateTime $str] } elseif {$btag == "base64"} { set res [umBase64 $str] } elseif {$btag == "array"} { set res [umArray $str] } elseif {$btag == "struct"} { set res [umStruct $str] } else { #check for empty element if {[string range $btag 0 1]=={/}} { set id [string first "]" $str ] if {$id != -1} { set rest [string range $str $id end] set rest [string trim $rest] return [list $rest {}] } } # return [errReturn "Unknown type: $str"] # assume string set id [string first "<" $str ] if {$id != -1} { set vv [string range $str 0 [expr $id-1]] set rr [string range $str $id end] set str "${vv}${rr}" set res [umString $str] } else { return [errReturn "Unknown type: $str"] } } set rest [lindex $res 0] set val [lindex $res 1] if {[string range $rest 0 7] != ""} { return [errReturn "Invalid close of value tag"] } set rest [string range $rest 8 end] set rest [string trim $rest] return [list $rest $val] } proc xmlrpc::umInt {str} { variable WS variable DIGIT set RE "<(int|i4)>$WS*"; # int tag append RE "(-*)($DIGIT+)$WS*"; # int value append RE "$WS*"; # end int tag append RE "(.*)"; # leftover if {![regexp $RE $str {} tag negp digits engtag rest]} { return [errReturn "Invalid Integer"] } if {$negp != ""} { set digits [expr -1 * $digits] } else { set digits [expr 1 * $digits] } set rest [string trim $rest] return [list $rest $digits] } proc xmlrpc::umBool {str} { variable WS set RE "$WS*"; # boolean tag append RE "(0|1)$WS*"; # boolean value append RE "$WS*"; # end boolean tag append RE "(.*)"; # leftover if {![regexp $RE $str {} bool rest]} { return [errReturn "Invalid Boolean"] } set rest [string trim $rest] return [list $rest $bool] } proc xmlrpc::umString {str} { variable WS set RE ""; # string tag append RE "(\[^<\]*)"; # string value append RE "$WS*"; # end string tag append RE "(.*)"; # leftover if {![regexp $RE $str {} s rest]} { return [errReturn "Invalid String"] } set rest [string trim $rest] return [list $rest $s] } proc xmlrpc::umDouble {str} { variable WS variable DIGIT set RE "$WS*"; # double tag append RE "(-*)($DIGIT*\.?$DIGIT*)$WS*"; # double value append RE "$WS*"; # end double tag append RE "(.*)"; # leftover if {![regexp $RE $str {} negp d rest]} { return [errReturn "Invalid Double"] } if {$negp != ""} { set d [expr -1 * $d] } else { set d [expr 1 * $d] } set rest [string trim $rest] return [list $rest $d] } proc xmlrpc::umDateTime {str} { variable WS variable DIGIT set RE "$WS*"; # dateTime tag append RE "($DIGIT+T$DIGIT+:$DIGIT+:$DIGIT+)$WS*"; # dateTime value append RE "$WS*"; # end string tag append RE "(.*)"; # leftover if {![regexp $RE $str {} dateTime rest]} { return [errReturn "Invalid DateTime"] } set rest [string trim $rest] return [list $rest $dateTime] } proc xmlrpc::umBase64 {str} { variable WS set RE ""; # string tag append RE "(\[^<\]*)"; # string value append RE "$WS*"; # end string tag append RE "(.*)"; # leftover if {![regexp $RE $str {} s rest]} { return [errReturn "Invalid Base64"] } set rest [string trim $rest] return [list $rest $s] } proc xmlrpc::umArray {str} { variable WS set RE "$WS*"; # array tag append RE "$WS*"; # data tag append RE "(.*)"; # leftover if {![regexp $RE $str {} rest]} { return [errReturn "Invalid Array"] } set l {} while {[string range $rest 0 6] == ""} { set res [unmarshall $rest] set rest [lindex $res 0] set el [lindex $res 1] lappend l $el } set REAREND "$WS*"; # end data tag append REAREND "$WS*"; # end array tag append REAREND "(.*)"; # leftover if {![regexp $REAREND $rest {} leftover]} { return [errReturn "Invalid End Array"] } return [list $leftover $l] } proc xmlrpc::umStruct {str} { variable WS variable W if {[string range $str 0 7] != ""} { return [errReturn "Invalid Struct"] } set RE "$WS*"; # name tag append RE "($W+?)$WS*"; # key append RE "$WS*"; # end name tag append RE "(.*)"; # value tag set l {} set str [string range $str 8 end] set str [string trim $str] while {[string range $str 0 7] == ""} { set str [string range $str 8 end] set str [string trim $str] if {![regexp $RE $str {} key val]} { return [errReturn "Invalid Struct Member"] } set res [unmarshall $val] set str [lindex $res 0] set el [lindex $res 1] lappend l [list $key $el] if {[string range $str 0 8] != ""} { return [errReturn "Invalid End Struct Member"] } set str [string range $str 9 end] set str [string trim $str] } if {[string range $str 0 8] != ""} { return [errReturn "Invalid End Struct"] } set str [string range $str 9 end] set str [string trim $str] return [list $str $l] } # Given a key, and a list of elements where each element is of the form: # {key, datum}, return {key, datum} if the requested key matches # a key in the list. # Returns the first match found in the list. # Return {} on failure # proc xmlrpc::assoc {key list} { foreach {cons} $list { set tkey [lindex $cons 0] if {[string tolower $key] == [string tolower $tkey]} { return $cons } } return {} } proc xmlrpc::warn {msg} { puts stderr $msg } proc xmlrpc::debug {msg} { variable DEBUG if {$DEBUG} { puts "$msg" } } proc xmlrpc::errReturn {msg} { warn $msg return -code error } proc xmlrpc::test {} { set person(first) {string "eric m"} set person(last) {string yeh} set employed(programmer) {struct person} #set xml [marshall {struct employed}] #set w [list {int 1}] #set q [list "array \{$w\}" {int 2} {string eric}] #puts [marshall "array \{$q\}"] #set xml [marshall {array {{int 1} {string {hello everybody}}}}] set xml [marshall {struct person}] debug "xml:\n$xml" set data [unmarshall $xml] debug "data: $data" set data [lindex $data 1] debug "data: $data" puts [assoc "first" $data] } #proc bgerror {error} { # global xmlcall # if {$xmlcall} { # global readdone # set readdone -1 # set xmlcall 0 # } #} #xmlrpc::test saods9/ds9/library/xpa.tcl000644 000765 000000 00000137040 12740775513 016043 0ustar00joyewheel000000 000000 # Copyright (C) 1999-2016 # Smithsonian Astrophysical Observatory, Cambridge, MA, USA # For conditions of distribution and use, see copyright notice in "copyright" package provide DS9 1.0 proc InitXPA {} { global ds9 global pds9 global env if {!$pds9(xpa)} { return } # this is needed # if there is a problem (usually with VPN), XPA will hang # so preempt and set to local before XPAINIT if {[info exists env(XPA_METHOD)]} { if {$env(XPA_METHOD) != {local}} { if {[checkdns {} 5]} { set env(XPA_METHOD) local Error [msgcat::mc {XPA unable to verify hostname, setting XPA_METHOD to LOCAL}] } } } else { if {[checkdns {} 5]} { set env(XPA_METHOD) local Error [msgcat::mc {XPA unable to verify hostname, setting XPA_METHOD to LOCAL}] } } switch -- $ds9(wm) { x11 - win32 {} aqua {set env(PATH) "$ds9(root):$env(PATH)"} } catch {CreateXPA} UpdateFileMenu } proc CreateXPA {} { global xpa global ds9 set xpa [xpacmdnew "DS9" $ds9(title)] xpacmdadd $xpa 2mass \ {} \ XPASend2MASS {} {} \ XPARcvd2MASS {} "fillbuf=false" xpacmdadd $xpa 3d \ {} \ XPASend3D {} {} \ XPARcvd3D {} "fillbuf=false" xpacmdadd $xpa 3D \ {} \ XPASend3D {} {} \ XPARcvd3D {} "fillbuf=false" xpacmdadd $xpa about \ {} \ XPASendAbout {} {} \ {} {} {} xpacmdadd $xpa align \ {} \ XPASendAlign {} {} \ XPARcvdAlign {} {} xpacmdadd $xpa analysis \ {} \ XPASendAnalysis {} {} \ XPARcvdAnalysis {} {} xpacmdadd $xpa array \ {} \ XPASendArray {} {} \ XPARcvdArray {} "fillbuf=false" xpacmdadd $xpa background \ {} \ XPASendBg {} {} \ XPARcvdBg {} {} xpacmdadd $xpa backup \ {} \ {} {} {} \ XPARcvdBackup {} {} xpacmdadd $xpa bg \ {} \ XPASendBg {} {} \ XPARcvdBg {} {} xpacmdadd $xpa blink \ {} \ XPASendBlink {} {} \ XPARcvdBlink {} "fillbuf=false" xpacmdadd $xpa bin \ {} \ XPASendBin {} {} \ XPARcvdBin {} "fillbuf=false" xpacmdadd $xpa block \ {} \ XPASendBlock {} {} \ XPARcvdBlock {} "fillbuf=false" xpacmdadd $xpa cat \ {} \ XPASendCAT {} {} \ XPARcvdCAT {} "fillbuf=false" xpacmdadd $xpa catalog \ {} \ XPASendCAT {} {} \ XPARcvdCAT {} "fillbuf=false" xpacmdadd $xpa cd \ {} \ XPASendCD {} {} \ XPARcvdCD {} "fillbuf=false" xpacmdadd $xpa cmap \ {} \ XPASendCmap {} {} \ XPARcvdCmap {} "fillbuf=false" xpacmdadd $xpa colorbar \ {} \ XPASendColorbar {} {} \ XPARcvdColorbar {} "fillbuf=false" xpacmdadd $xpa console \ {} \ {} {} {} \ XPARcvdConsole {} "fillbuf=false" xpacmdadd $xpa contour \ {} \ XPASendContour {} {} \ XPARcvdContour {} "fillbuf=false" xpacmdadd $xpa contours \ {} \ XPASendContour {} {} \ XPARcvdContour {} "fillbuf=false" xpacmdadd $xpa crop \ {} \ XPASendCrop {} {} \ XPARcvdCrop {} "fillbuf=false" xpacmdadd $xpa crosshair \ {} \ XPASendCrosshair {} {} \ XPARcvdCrosshair {} "fillbuf=false" xpacmdadd $xpa cube \ {} \ XPASendCube {} {} \ XPARcvdCube {} "fillbuf=false" xpacmdadd $xpa cursor \ {} \ {} {} {} \ XPARcvdCursor {} "fillbuf=false" xpacmdadd $xpa data \ {} \ XPASendData {} {} \ {} {} {} xpacmdadd $xpa datacube \ {} \ XPASendCube {} {} \ XPARcvdCube {} "fillbuf=false" xpacmdadd $xpa dss \ {} \ XPASendSAO {} {} \ XPARcvdSAO {} "fillbuf=false" xpacmdadd $xpa dsssao \ {} \ XPASendSAO {} {} \ XPARcvdSAO {} "fillbuf=false" xpacmdadd $xpa dsseso \ {} \ XPASendESO {} {} \ XPARcvdESO {} "fillbuf=false" xpacmdadd $xpa dssstsci \ {} \ XPASendSTSCI {} {} \ XPARcvdSTSCI {} "fillbuf=false" xpacmdadd $xpa envi \ {} \ {} {} {} \ XPARcvdENVI {} "fillbuf=false" xpacmdadd $xpa exit \ {} \ {} {} {} \ XPARcvdExit {} "fillbuf=false" xpacmdadd $xpa export \ {} \ {} {} {} \ XPARcvdExport {} "fillbuf=false" xpacmdadd $xpa file \ {} \ XPASendFile {} {} \ XPARcvdFile {} "fillbuf=false" xpacmdadd $xpa first \ {} \ XPASendVLA {} {} \ XPARcvdVLA {} "fillbuf=false" xpacmdadd $xpa fits \ {} \ XPASendFits {} "fillbuf=false" \ XPARcvdFits {} "fillbuf=false" xpacmdadd $xpa frame \ {} \ XPASendFrame {} {} \ XPARcvdFrame {} "fillbuf=false" xpacmdadd $xpa gif \ {} \ XPASendGIF {} {} \ XPARcvdGIF {} "fillbuf=false" xpacmdadd $xpa grid \ {} \ XPASendGrid {} {} \ XPARcvdGrid {} "fillbuf=false" xpacmdadd $xpa header \ {} \ {} {} {} \ XPARcvdHeader {} "fillbuf=false" xpacmdadd $xpa height \ {} \ XPASendHeight {} {} \ XPARcvdHeight {} "fillbuf=false" xpacmdadd $xpa iconify \ {} \ XPASendIconify {} {} \ XPARcvdIconify {} "fillbuf=false" xpacmdadd $xpa iexam \ {} \ XPASendIExam {} {} \ {} {} {} xpacmdadd $xpa iis \ {} \ XPASendIIS {} {} \ XPARcvdIIS {} "fillbuf=false" # backward compatibility xpacmdadd $xpa imexam \ {} \ XPASendIExam {} {} \ {} {} {} xpacmdadd $xpa jpg \ {} \ XPASendJPEG {} {} \ XPARcvdJPEG {} "fillbuf=false" xpacmdadd $xpa jpeg \ {} \ XPASendJPEG {} {} \ XPARcvdJPEG {} "fillbuf=false" xpacmdadd $xpa lock \ {} \ XPASendLock {} {} \ XPARcvdLock {} "fillbuf=false" xpacmdadd $xpa lower \ {} \ {} {} {} \ XPARcvdLower {} "fillbuf=false" xpacmdadd $xpa magnifier \ {} \ XPASendMagnifier {} {} \ XPARcvdMagnifier {} "fillbuf=false" xpacmdadd $xpa mask \ {} \ XPASendMask {} {} \ XPARcvdMask {} "fillbuf=false" xpacmdadd $xpa match \ {} \ {} {} {} \ XPARcvdMatch {} "fillbuf=false" xpacmdadd $xpa mecube \ {} \ XPASendMECube {} "fillbuf=false" \ XPARcvdMECube {} "fillbuf=false" xpacmdadd $xpa memf \ {} \ {} {} {} \ XPARcvdMultiFrame {} "fillbuf=false" xpacmdadd $xpa minmax \ {} \ XPASendMinMax {} {} \ XPARcvdMinMax {} "fillbuf=false" xpacmdadd $xpa mode \ {} \ XPASendMode {} {} \ XPARcvdMode {} "fillbuf=false" xpacmdadd $xpa mosaic \ {} \ XPASendMosaic {} {} \ XPARcvdMosaic {} "fillbuf=false" xpacmdadd $xpa mosaicimage \ {} \ XPASendMosaicImage {} {} \ XPARcvdMosaicImage {} "fillbuf=false" # backward compatibility xpacmdadd $xpa mosaicwcs \ {} \ XPASendMosaicWCS {} {} \ XPARcvdMosaicWCS {} "fillbuf=false" # backward compatibility xpacmdadd $xpa mosaiciraf \ {} \ {} {} {} \ XPARcvdMosaicIRAF {} "fillbuf=false" # backward compatibility xpacmdadd $xpa mosaicimagewcs \ {} \ XPASendMosaicImageWCS {} {} \ XPARcvdMosaicImageWCS {} "fillbuf=false" # backward compatibility xpacmdadd $xpa mosaicimageiraf \ {} \ {} {} {} \ XPARcvdMosaicImageIRAF {} "fillbuf=false" # backward compatibility xpacmdadd $xpa mosaicimagewfpc2 \ {} \ {} {} {} \ XPARcvdMosaicImageWFPC2 {} "fillbuf=false" xpacmdadd $xpa multiframe \ {} \ {} {} {} \ XPARcvdMultiFrame {} "fillbuf=false" xpacmdadd $xpa movie \ {} \ {} {} {} \ XPARcvdMovie {} "fillbuf=false" xpacmdadd $xpa nameserver \ {} \ XPASendNRES {} {} \ XPARcvdNRES {} "fillbuf=false" xpacmdadd $xpa nan \ {} \ XPASendNan {} {} \ XPARcvdNan {} {} xpacmdadd $xpa nrrd \ {} \ XPASendNRRD {} {} \ XPARcvdNRRD {} "fillbuf=false" xpacmdadd $xpa nvss \ {} \ XPASendNVSS {} {} \ XPARcvdNVSS {} "fillbuf=false" xpacmdadd $xpa orient \ {} \ XPASendOrient {} {} \ XPARcvdOrient {} "fillbuf=false" xpacmdadd $xpa {page setup} \ {} \ XPASendPageSetup {} {} \ XPARcvdPageSetup {} "fillbuf=false" xpacmdadd $xpa pagesetup \ {} \ XPASendPageSetup {} {} \ XPARcvdPageSetup {} "fillbuf=false" xpacmdadd $xpa pspagesetup \ {} \ XPASendPSPageSetup {} {} \ XPARcvdPSPageSetup {} "fillbuf=false" xpacmdadd $xpa pan \ {} \ XPASendPan {} {} \ XPARcvdPan {} "fillbuf=false" xpacmdadd $xpa pixeltable \ {} \ XPASendPixelTable {} {} \ XPARcvdPixelTable {} "fillbuf=false" xpacmdadd $xpa plot \ {} \ XPASendPlot {} {} \ XPARcvdPlot {} {} xpacmdadd $xpa png \ {} \ XPASendPNG {} {} \ XPARcvdPNG {} "fillbuf=false" xpacmdadd $xpa prefs \ {} \ XPASendPrefs {} {} \ XPARcvdPrefs {} "fillbuf=false" xpacmdadd $xpa preserve \ {} \ XPASendPreserve {} {} \ XPARcvdPreserve {} "fillbuf=false" xpacmdadd $xpa print \ {} \ XPASendPrint {} {} \ XPARcvdPrint {} "fillbuf=false" xpacmdadd $xpa psprint \ {} \ XPASendPSPrint {} {} \ XPARcvdPSPrint {} "fillbuf=false" xpacmdadd $xpa quit \ {} \ {} {} {} \ XPARcvdExit {} "fillbuf=false" xpacmdadd $xpa raise \ {} \ {} {} {} \ XPARcvdRaise {} "fillbuf=false" xpacmdadd $xpa region \ {} \ XPASendRegions {} {} \ XPARcvdRegions {} "fillbuf=false" xpacmdadd $xpa regions \ {} \ XPASendRegions {} {} \ XPARcvdRegions {} "fillbuf=false" xpacmdadd $xpa restore \ {} \ {} {} {} \ XPARcvdRestore {} {} xpacmdadd $xpa rgb \ {} \ XPASendRGB {} {} \ XPARcvdRGB {} "fillbuf=false" xpacmdadd $xpa rgbarray \ {} \ XPASendRGBArray {} {} \ XPARcvdRGBArray {} "fillbuf=false" xpacmdadd $xpa rgbcube \ {} \ XPASendRGBCube {} {} \ XPARcvdRGBCube {} "fillbuf=false" xpacmdadd $xpa rgbimage \ {} \ XPASendRGBImage {} {} \ XPARcvdRGBImage {} "fillbuf=false" xpacmdadd $xpa rotate \ {} \ XPASendRotate {} {} \ XPARcvdRotate {} "fillbuf=false" xpacmdadd $xpa save \ {} \ {} {} {} \ XPARcvdSave {} "fillbuf=false" xpacmdadd $xpa saveimage \ {} \ {} {} {} \ XPARcvdSaveImage {} "fillbuf=false" # backward compatibility xpacmdadd $xpa savefits \ {} \ {} {} {} \ XPARcvdSave {} "fillbuf=false" # backward compatibility xpacmdadd $xpa savempeg \ {} \ {} {} {} \ XPARcvdMovie {} "fillbuf=false" xpacmdadd $xpa scale \ {} \ XPASendScale {} {} \ XPARcvdScale {} "fillbuf=false" # backward compatibility xpacmdadd $xpa sfits \ {} \ {} {} {} \ XPARcvdSFits {} "fillbuf=false" xpacmdadd $xpa sia \ {} \ XPASendSIA {} {} \ XPARcvdSIA {} "fillbuf=false" xpacmdadd $xpa single \ {} \ XPASendSingle {} {} \ XPARcvdSingle {} "fillbuf=false" xpacmdadd $xpa shm \ {} \ XPASendShm {} {} \ XPARcvdShm {} "fillbuf=false" xpacmdadd $xpa skyview \ {} \ XPASendSkyView {} {} \ XPARcvdSkyView {} "fillbuf=false" xpacmdadd $xpa sleep \ {} \ {} {} {} \ XPARcvdSleep {} "fillbuf=false" xpacmdadd $xpa slice \ {} \ XPASendCube {} {} \ XPARcvdCube {} "fillbuf=false" # backward compatibility xpacmdadd $xpa smosaic \ {} \ {} {} {} \ XPARcvdSMosaic {} "fillbuf=false" # backward compatibility xpacmdadd $xpa smosaicwcs \ {} \ {} {} {} \ XPARcvdSMosaicWCS {} "fillbuf=false" # backward compatibility xpacmdadd $xpa smosaiciraf \ {} \ {} {} {} \ XPARcvdSMosaicIRAF {} "fillbuf=false" xpacmdadd $xpa smooth \ {} \ XPASendSmooth {} {} \ XPARcvdSmooth {} "fillbuf=false" xpacmdadd $xpa source \ {} \ {} {} {} \ XPARcvdSource {} "fillbuf=false" # backward compatibility xpacmdadd $xpa srgbcube \ {} \ {} {} {} \ XPARcvdSRGBCube {} "fillbuf=false" xpacmdadd $xpa tcl \ {} \ {} {} {} \ XPARcvdTcl {} {} # backward compatibility xpacmdadd $xpa theme \ {} \ XPASendTheme {} {} \ XPARcvdTheme {} "fillbuf=false" xpacmdadd $xpa threads \ {} \ XPASendThreads {} {} \ XPARcvdThreads {} {} xpacmdadd $xpa tif \ {} \ XPASendTIFF {} {} \ XPARcvdTIFF {} "fillbuf=false" xpacmdadd $xpa tiff \ {} \ XPASendTIFF {} {} \ XPARcvdTIFF {} "fillbuf=false" xpacmdadd $xpa tile \ {} \ XPASendTile {} {} \ XPARcvdTile {} "fillbuf=false" xpacmdadd $xpa update \ {} \ {} {} {} \ XPARcvdUpdate {} "fillbuf=false" xpacmdadd $xpa url \ {} \ {} {} {} \ XPARcvdURLFits {} {} xpacmdadd $xpa version \ {} \ XPASendVersion {} {} \ {} {} {} xpacmdadd $xpa view \ {} \ XPASendView {} {} \ XPARcvdView {} "fillbuf=false" xpacmdadd $xpa vla \ {} \ XPASendVLA {} {} \ XPARcvdVLA {} "fillbuf=false" xpacmdadd $xpa vlss \ {} \ XPASendVLSS {} {} \ XPARcvdVLSS {} "fillbuf=false" xpacmdadd $xpa vo \ {} \ XPASendVO {} {} \ XPARcvdVO {} "fillbuf=false" xpacmdadd $xpa wcs \ {} \ XPASendWCS {} {} \ XPARcvdWCS {} "fillbuf=false" xpacmdadd $xpa web \ {} \ XPASendWeb {} {} \ XPARcvdWeb {} "fillbuf=false" xpacmdadd $xpa width \ {} \ XPASendWidth {} {} \ XPARcvdWidth {} "fillbuf=false" xpacmdadd $xpa xpa \ {} \ XPASendXPA {} {} \ XPARcvdXPA {} "fillbuf=false" xpacmdadd $xpa zscale \ {} \ XPASendZScale {} {} \ XPARcvdZScale {} "fillbuf=false" xpacmdadd $xpa zoom \ {} \ XPASendZoom {} {} \ XPARcvdZoom {} "fillbuf=false" } proc XPASend2MASS {xpa cdata param} { InitError xpa catch {ProcessSend2MASSCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvd2MASS {xpa cdata param buf len} { XPADebug "XPARcvd2MASS" $param InitError xpa catch {set i 0; Process2MASSCmd param i} XPACatchError $xpa } proc XPASend3D {xpa cdata param} { InitError xpa catch {ProcessSend3DCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvd3D {xpa cdata param buf len} { XPADebug "XPARcvd3D" $param InitError xpa catch {set i 0; Process3DCmd param i} XPACatchError $xpa } proc XPASendAbout {xpa cdata param} { InitError xpa catch {ProcessSendAboutCmd xpasetbuf $xpa $param {} {}} XPACatchError $xpa } proc XPASendAlign {xpa cdata param} { InitError xpa catch {ProcessSendAlignCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdAlign {xpa cdata param buf len} { XPADebug "XPARcvdAlign" $param InitError xpa catch {set i 0; ProcessAlignCmd param i} XPACatchError $xpa } proc XPASendAnalysis {xpa cdata param} { InitError xpa catch {ProcessSendAnalysisCmd xpasetbuf $xpa $param {} {}} XPACatchError $xpa } proc XPARcvdAnalysis {xpa cdata param buf len} { XPADebug "XPARcvdAnalysis" $param InitError xpa catch {set i 0; ProcessAnalysisCmd param i $buf {}} XPACatchError $xpa } proc XPASendArray {xpa cdata param} { InitError xpa catch {ProcessSendArrayCmd {} {} $param [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPARcvdArray {xpa cdata param buf len} { XPADebug "XPARcvdArray" $param InitError xpa catch {set i 0; ProcessArrayCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPASendBg {xpa cdata param} { InitError xpa catch {ProcessSendBgCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdBg {xpa cdata param buf len} { XPADebug "XPARcvdBg" $param InitError xpa catch {set i 0; ProcessBgCmd param i} XPACatchError $xpa } proc XPARcvdBackup {xpa cdata param buf len} { XPADebug "XPARcvdBackup" $param InitError xpa catch {set i 0; ProcessBackupCmd param i} XPACatchError $xpa } proc XPASendBlink {xpa cdata param} { InitError xpa catch {ProcessSendBlinkCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdBlink {xpa cdata param buf len} { XPADebug "XPARcvdBlink" $param InitError xpa catch {set i 0; ProcessBlinkCmd param i} XPACatchError $xpa } proc XPASendBin {xpa cdata param} { InitError xpa catch {ProcessSendBinCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdBin {xpa cdata param buf len} { XPADebug "XPARcvdBin" $param InitError xpa catch {set i 0; ProcessBinCmd param i} XPACatchError $xpa } proc XPASendBlock {xpa cdata param} { InitError xpa catch {ProcessSendBlockCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdBlock {xpa cdata param buf len} { XPADebug "XPARcvdBlock" $param InitError xpa catch {set i 0; ProcessBlockCmd param i} XPACatchError $xpa } proc XPASendCAT {xpa cdata param} { InitError xpa catch {ProcessSendCatalogCmd xpasetbuf $xpa $param {} {}} XPACatchError $xpa } proc XPARcvdCAT {xpa cdata param buf len} { XPADebug "XPARcvdCat" $param InitError xpa catch {set i 0; ProcessCatalogCmd param i} XPACatchError $xpa } proc XPASendCD {xpa cdata param} { InitError xpa catch {ProcessSendCDCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdCD {xpa cdata param buf len} { XPADebug "XPARcvdCD" $param InitError xpa catch {set i 0; ProcessCDCmd param i} XPACatchError $xpa } proc XPARcvdConsole {xpa cdata param buf len} { XPADebug "XPARcvdConsole" $param InitError xpa catch {set i 0; ProcessConsoleCmd param i} XPACatchError $xpa } proc XPASendContour {xpa cdata param} { InitError xpa catch {ProcessSendContourCmd xpasetbuf $xpa $param {} {}} XPACatchError $xpa } proc XPARcvdContour {xpa cdata param buf len} { XPADebug "XPARcvdContour" $param InitError xpa catch {set i 0; ProcessContourCmd param i} XPACatchError $xpa } proc XPASendCmap {xpa cdata param} { InitError xpa catch {ProcessSendCmapCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdCmap {xpa cdata param buf len} { XPADebug "XPARcvdCmap" $param InitError xpa catch {set i 0; ProcessCmapCmd param i} XPACatchError $xpa } proc XPASendColorbar {xpa cdata param} { InitError xpa catch {ProcessSendColorbarCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdColorbar {xpa cdata param buf len} { XPADebug "XPARcvdColorbar" $param InitError xpa catch {set i 0; ProcessColorbarCmd param i} XPACatchError $xpa } proc XPASendCrop {xpa cdata param} { InitError xpa catch {ProcessSendCropCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdCrop {xpa cdata param buf len} { XPADebug "XPARcvdCrop" $param InitError xpa catch {set i 0; ProcessCropCmd param i} XPACatchError $xpa } proc XPASendCrosshair {xpa cdata param} { InitError xpa catch {ProcessSendCrosshairCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdCrosshair {xpa cdata param buf len} { XPADebug "XPARcvdCrosshair" $param InitError xpa catch {set i 0; ProcessCrosshairCmd param i} XPACatchError $xpa } proc XPASendCube {xpa cdata param} { InitError xpa catch {ProcessSendCubeCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdCube {xpa cdata param buf len} { XPADebug "XPARcvdCube" $param InitError xpa catch {set i 0; ProcessCubeCmd param i} XPACatchError $xpa } proc XPARcvdCursor {xpa cdata param buf len} { XPADebug "XPARcvdCursor" $param InitError xpa catch {set i 0; ProcessCursorCmd param i} XPACatchError $xpa } proc XPASendData {xpa cdata param} { InitError xpa catch {ProcessSendDataCmd xpasetbuf $xpa $param {} {}} XPACatchError $xpa } proc XPASendSAO {xpa cdata param} { InitError xpa catch {ProcessSendSAOCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdSAO {xpa cdata param buf len} { XPADebug "XPARcvdSAO" $param InitError xpa catch {set i 0; ProcessSAOCmd param i} XPACatchError $xpa } proc XPASendESO {xpa cdata param} { InitError xpa catch {ProcessSendESOCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdESO {xpa cdata param buf len} { XPADebug "XPARcvdESO" $param InitError xpa catch {set i 0; ProcessESOCmd param i} XPACatchError $xpa } proc XPASendSTSCI {xpa cdata param} { InitError xpa catch {ProcessSendSTSCICmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdSTSCI {xpa cdata param buf len} { XPADebug "XPARcvdSTSCI" $param InitError xpa catch {set i 0; ProcessSTSCICmd param i} XPACatchError $xpa } proc XPARcvdENVI {xpa cdata param buf len} { XPADebug "XPARcvdENVI" $param InitError xpa catch {set i 0; ProcessENVICmd param i {} {}} XPACatchError $xpa } proc XPARcvdExit {xpa cdata param buf len} { XPADebug "XPARcvdExit" $param InitError xpa catch {set i 0; ProcessQuitCmd param i} XPACatchError $xpa } proc XPARcvdExport {xpa cdata param buf len} { XPADebug "XPARcvdExport" $param InitError xpa catch {set i 0; ProcessExportCmd param i} XPACatchError $xpa } proc XPASendFile {xpa cdata param} { InitError xpa catch {ProcessSendFileCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdFile {xpa cdata param buf len} { XPADebug "XPARcvdFile" $param InitError xpa catch { # do not send socket as it does not contain data, only filenames set i 0 global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS {ProcessFileCmd param i {} [xparec $xpa datachan] {}} {Windows NT} {ProcessFileCmd param i {} dummy {}} } } XPACatchError $xpa } proc XPASendFits {xpa cdata param} { InitError xpa catch {ProcessSendFitsCmd xpasetbuf $xpa $param [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPARcvdFits {xpa cdata param buf len} { XPADebug "XPARcvdFits" $param InitError xpa catch {set i 0; ProcessFitsCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPASendFrame {xpa cdata param} { InitError xpa catch {ProcessSendFrameCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdFrame {xpa cdata param buf len} { XPADebug "XPARcvdFrame" $param InitError xpa catch {set i 0; ProcessFrameCmd param i} XPACatchError $xpa } proc XPASendGIF {xpa cdata param} { InitError xpa catch { global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS {ProcessSendGIFCmd {} {} $param [xparec $xpa datachan] {}} {Windows NT} {ProcessSendGIFCmd {} {} $param dummy {}} } } XPACatchError $xpa } proc XPARcvdGIF {xpa cdata param buf len} { XPADebug "XPARcvdGIF" $param InitError xpa catch { set i 0 global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS {ProcessGIFCmd param i [xparec $xpa datachan] {}} {Windows NT} {ProcessGIFCmd param i dummy {}} } } XPACatchError $xpa } proc XPASendGrid {xpa cdata param} { InitError xpa catch {ProcessSendGridCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdGrid {xpa cdata param buf len} { XPADebug "XPARcvdGrid" $param InitError xpa catch {set i 0; ProcessGridCmd param i} XPACatchError $xpa } proc XPARcvdHeader {xpa cdata param buf len} { XPADebug "XPARcvdHeader" $param InitError xpa catch {set i 0; ProcessHeaderCmd param i} XPACatchError $xpa } proc XPASendHeight {xpa cdata param} { InitError xpa catch {ProcessSendHeightCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdHeight {xpa cdata param buf len} { XPADebug "XPARcvdHeight" $param InitError xpa catch {set i 0; ProcessHeightCmd param i} XPACatchError $xpa } proc XPASendIconify {xpa cdata param} { InitError xpa catch {ProcessSendIconifyCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdIconify {xpa cdata param buf len} { XPADebug "XPARcvdIconify" $param InitError xpa catch {set i 0; ProcessIconifyCmd param i} XPACatchError $xpa } proc XPASendIExam {xpa cdata param} { InitError xpa catch {ProcessSendIExamCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPASendIIS {xpa cdata param} { InitError xpa catch {ProcessSendIISCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdIIS {xpa cdata param buf len} { XPADebug "XPARcvdIIS" $param InitError xpa catch {set i 0; ProcessIISCmd param i} XPACatchError $xpa } proc XPASendJPEG {xpa cdata param} { InitError xpa catch { global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS {ProcessSendJPEGCmd {} {} $param [xparec $xpa datachan] {}} {Windows NT} {ProcessSendJPEGCmd {} {} $param dummy {}} } } XPACatchError $xpa } proc XPARcvdJPEG {xpa cdata param buf len} { XPADebug "XPARcvdJPEG" $param InitError xpa catch { set i 0 global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS {ProcessJPEGCmd param i [xparec $xpa datachan] {}} {Windows NT} {ProcessJPEGCmd param i dummy {}} } } XPACatchError $xpa } proc XPASendLock {xpa cdata param} { InitError xpa catch {ProcessSendLockCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdLock {xpa cdata param buf len} { XPADebug "XPARcvdLock" $param InitError xpa catch {set i 0; ProcessLockCmd param i} XPACatchError $xpa } proc XPARcvdLower {xpa cdata param buf len} { XPADebug "XPARcvdLower" $param InitError xpa catch {set i 0; ProcessLowerCmd param i} XPACatchError $xpa } proc XPASendMagnifier {xpa cdata param} { InitError xpa catch {ProcessSendMagnifierCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdMagnifier {xpa cdata param buf len} { XPADebug "XPARcvdMagnifier" $param InitError xpa catch {set i 0; ProcessMagnifierCmd param i} XPACatchError $xpa } proc XPASendMask {xpa cdata param} { InitError xpa catch {ProcessSendMaskCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdMask {xpa cdata param buf len} { XPADebug "XPARcvdMask" $param InitError xpa catch {set i 0; ProcessMaskCmd param i} XPACatchError $xpa } proc XPARcvdMatch {xpa cdata param buf len} { XPADebug "XPARcvdMatch" $param InitError xpa catch {set i 0; ProcessMatchCmd param i} XPACatchError $xpa } proc XPASendMECube {xpa cdata param} { InitError xpa catch {ProcessSendMECubeCmd xpasetbuf $xpa $param [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPARcvdMECube {xpa cdata param buf len} { XPADebug "XPARcvdMECube" $param InitError xpa catch {set i 0; ProcessMECubeCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPASendMinMax {xpa cdata param} { InitError xpa catch {ProcessSendMinMaxCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdMinMax {xpa cdata param buf len} { XPADebug "XPARcvdMinMax" $param InitError xpa catch {set i 0; ProcessMinMaxCmd param i} XPACatchError $xpa } proc XPASendMode {xpa cdata param} { InitError xpa catch {ProcessSendModeCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdMode {xpa cdata param buf len} { XPADebug "XPARcvdMode" $param InitError xpa catch {set i 0; ProcessModeCmd param i} XPACatchError $xpa } proc XPASendMosaic {xpa cdata param} { InitError xpa catch {ProcessSendMosaicCmd {} {} $param [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPARcvdMosaic {xpa cdata param buf len} { XPADebug "XPARcvdMosaic" $param InitError xpa catch {set i 0; ProcessMosaicCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPASendMosaicImage {xpa cdata param} { InitError xpa catch {ProcessSendMosaicImageCmd {} {} $param [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPARcvdMosaicImage {xpa cdata param buf len} { XPADebug "XPARcvdMosaicImage" $param InitError xpa catch {set i 0; ProcessMosaicImageCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } # backward compatibility proc XPASendMosaicWCS {xpa cdata param} { InitError xpa catch {ProcessSendMosaicWCSCmd {} {} $param [xparec $xpa datafd] {}} XPACatchError $xpa } # backward compatibility proc XPARcvdMosaicWCS {xpa cdata param buf len} { XPADebug "XPARcvdMosaicWCS" $param InitError xpa catch {set i 0; ProcessMosaicWCSCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } # backward compatibility proc XPARcvdMosaicIRAF {xpa cdata param buf len} { XPADebug "XPARcvdMosaicIRAF" $param InitError xpa catch {set i 0; ProcessMosaicIRAFCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } # backward compatibility proc XPASendMosaicImageWCS {xpa cdata param} { InitError xpa catch {ProcessSendMosaicImageWCSCmd {} {} $param [xparec $xpa datafd] {}} XPACatchError $xpa } # backward compatibility proc XPARcvdMosaicImageWCS {xpa cdata param buf len} { XPADebug "XPARcvdMosaicImageWCS" $param InitError xpa catch {set i 0; ProcessMosaicImageWCSCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } # backward compatibility proc XPARcvdMosaicImageIRAF {xpa cdata param buf len} { XPADebug "XPARcvdMosaicImageIRAF" $param InitError xpa catch {set i 0; ProcessMosaicImageIRAFCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } # backward compatibility proc XPARcvdMosaicImageWFPC2 {xpa cdata param buf len} { XPADebug "XPARcvdMosaicImageWFPC2" $param InitError xpa catch {set i 0; ProcessMosaicImageWFPC2Cmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPARcvdMovie {xpa cdata param buf len} { XPADebug "XPARcvdMovie" $param InitError xpa catch {set i 0; ProcessMovieCmd param i} XPACatchError $xpa } proc XPARcvdMultiFrame {xpa cdata param buf len} { XPADebug "XPARcvdMultiFrame" $param InitError xpa catch { set i 0 global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS {ProcessMultiFrameCmd param i [xparec $xpa datachan] {}} {Windows NT} {ProcessMultiFrameCmd param i dummy {}} } } XPACatchError $xpa } proc XPASendNan {xpa cdata param} { InitError xpa catch {ProcessSendNanCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdNan {xpa cdata param buf len} { XPADebug "XPARcvdNan" $param InitError xpa catch {set i 0; ProcessNanCmd param i} XPACatchError $xpa } proc XPASendNRES {xpa cdata param} { InitError xpa catch {ProcessSendNRESCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdNRES {xpa cdata param buf len} { XPADebug "XPARcvdNRES" $param InitError xpa catch {set i 0; ProcessNRESCmd param i} XPACatchError $xpa } proc XPASendNRRD {xpa cdata param} { InitError xpa catch {ProcessSendNRRDCmd {} {} $param [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPARcvdNRRD {xpa cdata param buf len} { XPADebug "XPARcvdNRRD" $param InitError xpa catch {set i 0; ProcessNRRDCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPASendNVSS {xpa cdata param} { InitError xpa catch {ProcessSendNVSSCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdNVSS {xpa cdata param buf len} { XPADebug "XPARcvdNVSS" $param InitError xpa catch {set i 0; ProcessNVSSCmd param i} XPACatchError $xpa } proc XPASendOrient {xpa cdata param} { InitError xpa catch {ProcessSendOrientCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdOrient {xpa cdata param buf len} { XPADebug "XPARcvdOrient" $param InitError xpa catch {set i 0; ProcessOrientCmd param i} XPACatchError $xpa } proc XPASendPageSetup {xpa cdata param} { InitError xpa catch {ProcessSendPageSetupCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdPageSetup {xpa cdata param buf len} { XPADebug "XPARcvdPageSetup" $param InitError xpa catch {set i 0; ProcessPageSetupCmd param i} XPACatchError $xpa } proc XPASendPSPageSetup {xpa cdata param} { InitError xpa catch {ProcessSendPSPageSetupCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdPSPageSetup {xpa cdata param buf len} { XPADebug "XPARcvdPSPageSetup" $param InitError xpa catch {set i 0; ProcessPSPageSetupCmd param i} XPACatchError $xpa } proc XPASendPan {xpa cdata param} { InitError xpa catch {ProcessSendPanCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdPan {xpa cdata param buf len} { XPADebug "XPARcvdPan" $param InitError xpa catch {set i 0; ProcessPanCmd param i} XPACatchError $xpa } proc XPASendPixelTable {xpa cdata param} { InitError xpa catch {ProcessSendPixelTableCmd xpasetbuf $xpa $param {} {}} XPACatchError $xpa } proc XPARcvdPixelTable {xpa cdata param buf len} { XPADebug "XPARcvdPixelTable" $param InitError xpa catch {set i 0; ProcessPixelTableCmd param i} XPACatchError $xpa } proc XPASendPlot {xpa cdata param} { InitError xpa catch {ProcessSendPlotCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdPlot {xpa cdata param buf len} { XPADebug "XPARcvdPlot" $param InitError xpa catch {set i 0; ProcessPlotCmd param i $buf {}} XPACatchError $xpa } proc XPASendPNG {xpa cdata param} { InitError xpa catch { global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS {ProcessSendPNGCmd {} {} $param [xparec $xpa datachan] {}} {Windows NT} {ProcessSendPNGCmd {} {} $param dummy {}} } } XPACatchError $xpa } proc XPARcvdPNG {xpa cdata param buf len} { XPADebug "XPARcvdPNG" $param InitError xpa catch { set i 0 global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS {ProcessPNGCmd param i [xparec $xpa datachan] {}} {Windows NT} {ProcessPNGCmd param i dummy {}} } } XPACatchError $xpa } proc XPASendPrefs {xpa cdata param} { InitError xpa catch {ProcessSendPrefsCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdPrefs {xpa cdata param buf len} { XPADebug "XPARcvdPrefs" $param InitError xpa catch {set i 0; ProcessPrefsCmd param i} XPACatchError $xpa } proc XPASendPreserve {xpa cdata param} { InitError xpa catch {ProcessSendPreserveCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdPreserve {xpa cdata param buf len} { XPADebug "XPARcvdPreserve" $param InitError xpa catch {set i 0; ProcessPreserveCmd param i} XPACatchError $xpa } proc XPASendPrint {xpa cdata param} { InitError xpa catch {ProcessSendPrintCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdPrint {xpa cdata param buf len} { XPADebug "XPARcvdPrint" $param InitError xpa catch { if {[XPAIsLocal]} { set i 0 ProcessPrintCmd param i } else { Error [msgcat::mc {This function is not available.}] } } XPACatchError $xpa } proc XPASendPSPrint {xpa cdata param} { InitError xpa catch {ProcessSendPSPrintCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdPSPrint {xpa cdata param buf len} { XPADebug "XPARcvdPSPrint" $param InitError xpa catch { if {[XPAIsLocal]} { set i 0 ProcessPSPrintCmd param i } else { Error [msgcat::mc {This function is not available.}] } } XPACatchError $xpa } proc XPARcvdRaise {xpa cdata param buf len} { XPADebug "XPARcvdRaise" $param InitError xpa catch {set i 0; ProcessRaiseCmd param i} XPACatchError $xpa } proc XPASendRegions {xpa cdata param} { InitError xpa catch {ProcessSendRegionsCmd xpasetbuf $xpa $param {} {}} XPACatchError $xpa } proc XPARcvdRegions {xpa cdata param buf len} { XPADebug "XPARcvdRegions" $param InitError xpa catch {set i 0; ProcessRegionsCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPARcvdRestore {xpa cdata param buf len} { XPADebug "XPARcvdRestore" $param InitError xpa catch {set i 0; ProcessRestoreCmd param i} XPACatchError $xpa } proc XPASendRGB {xpa cdata param} { InitError xpa catch {ProcessSendRGBCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdRGB {xpa cdata param buf len} { XPADebug "XPARcvdRGB" $param InitError xpa catch {set i 0; ProcessRGBCmd param i} XPACatchError $xpa } proc XPASendRGBArray {xpa cdata param} { InitError xpa catch {ProcessSendRGBArrayCmd {} {} $param [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPARcvdRGBArray {xpa cdata param buf len} { XPADebug "XPARcvdRGBArray" $param InitError xpa catch {set i 0; ProcessRGBArrayCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPASendRGBCube {xpa cdata param} { InitError xpa catch {ProcessSendRGBCubeCmd {} {} $param [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPARcvdRGBCube {xpa cdata param buf len} { XPADebug "XPARcvdRGBCube" $param InitError xpa catch {set i 0; ProcessRGBCubeCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPASendRGBImage {xpa cdata param} { InitError xpa catch {ProcessSendRGBImageCmd {} {} $param [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPARcvdRGBImage {xpa cdata param buf len} { XPADebug "XPARcvdRGBImage" $param InitError xpa catch {set i 0; ProcessRGBImageCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPASendRotate {xpa cdata param} { InitError xpa catch {ProcessSendRotateCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdRotate {xpa cdata param buf len} { XPADebug "XPARcvdRotate" $param InitError xpa catch {set i 0; ProcessRotateCmd param i} XPACatchError $xpa } proc XPARcvdSave {xpa cdata param buf len} { XPADebug "XPARcvdSave" $param InitError xpa catch {set i 0; ProcessSaveCmd param i} XPACatchError $xpa } proc XPARcvdSaveImage {xpa cdata param buf len} { XPADebug "XPARcvdSaveImage" $param InitError xpa catch {set i 0; ProcessSaveImageCmd param i} XPACatchError $xpa } proc XPASendScale {xpa cdata param} { InitError xpa catch {ProcessSendScaleCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdScale {xpa cdata param buf len} { XPADebug "XPARcvdScale" $param InitError xpa catch {set i 0; ProcessScaleCmd param i} XPACatchError $xpa } # backward compatibility proc XPARcvdSFits {xpa cdata param buf len} { XPADebug "XPARcvdSFits" $param InitError xpa catch {set i 0; ProcessSFitsCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPASendSIA {xpa cdata param} { InitError xpa catch {ProcessSendSIACmd xpasetbuf $xpa $param {} {}} XPACatchError $xpa } proc XPARcvdSIA {xpa cdata param buf len} { XPADebug "XPARcvdSIA" $param InitError xpa catch {set i 0; ProcessSIACmd param i} XPACatchError $xpa } proc XPASendSingle {xpa cdata param} { InitError xpa catch {ProcessSendSingleCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdSingle {xpa cdata param buf len} { XPADebug "XPARcvdSingle" $param InitError xpa catch {set i 0; ProcessSingleCmd param i} XPACatchError $xpa } proc XPASendShm {xpa cdata param} { InitError xpa catch {ProcessSendShmCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdShm {xpa cdata param buf len} { XPADebug "XPARcvdShm" $param InitError xpa catch {set i 0; ProcessShmCmd param i 0} XPACatchError $xpa } proc XPASendSkyView {xpa cdata param} { InitError xpa catch {ProcessSendSkyViewCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdSkyView {xpa cdata param buf len} { XPADebug "XPARcvdSkyView" $param InitError xpa catch {set i 0; ProcessSkyViewCmd param i} XPACatchError $xpa } proc XPARcvdSleep {xpa cdata param buf len} { XPADebug "XPARcvdSleep" $param InitError xpa catch {set i 0; ProcessSleepCmd param i} XPACatchError $xpa } # backward compatibility proc XPARcvdSMosaic {xpa cdata param buf len} { XPADebug "XPARcvdSMosaic" $param InitError xpa catch {set i 0; ProcessSMosaicCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } # backward compatibility proc XPARcvdSMosaicWCS {xpa cdata param buf len} { XPADebug "XPARcvdSMosaicWCS" $param InitError xpa catch {set i 0; ProcessSMosaicWCSCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } # backward compatibility proc XPARcvdSMosaicIRAF {xpa cdata param buf len} { XPADebug "XPARcvdSMosaicIRAF" $param InitError xpa catch {set i 0; ProcessSMosaicIRAFCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPASendSmooth {xpa cdata param} { InitError xpa catch {ProcessSendSmoothCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdSmooth {xpa cdata param buf len} { XPADebug "XPARcvdSmooth" $param InitError xpa catch {set i 0; ProcessSmoothCmd param i} XPACatchError $xpa } proc XPARcvdSource {xpa cdata param buf len} { XPADebug "XPARcvdSource" $param InitError xpa catch { if {[XPAIsLocal]} { set i 0 ProcessSourceCmd param i } else { Error [msgcat::mc {This function is not available.}] } } XPACatchError $xpa } # backward compatibility proc XPARcvdSRGBCube {xpa cdata param buf len} { XPADebug "XPARcvdSRGBCube" $param InitError xpa catch {set i 0; ProcessSRGBCubeCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPARcvdTcl {xpa cdata param buf len} { XPADebug "XPARcvdTcl" $param InitError xpa catch { if {[XPAIsLocal]} { set i 0 ProcessTclCmd param i $buf {} } else { Error [msgcat::mc {This function is not available.}] } } XPACatchError $xpa } # backward compatibility proc XPASendTheme {xpa cdata param} { InitError xpa catch {ProcessSendThemeCmd xpasetbuf $xpa $param} XPACatchError $xpa } # backward compatibility proc XPARcvdTheme {xpa cdata param buf len} { XPADebug "XPARcvdTheme" $param InitError xpa catch {set i 0; ProcessThemeCmd param i} XPACatchError $xpa } proc XPASendThreads {xpa cdata param} { InitError xpa catch {ProcessSendThreadsCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdThreads {xpa cdata param buf len} { XPADebug "XPARcvdThreads" $param InitError xpa catch {set i 0; ProcessThreadsCmd param i} XPACatchError $xpa } proc XPASendTIFF {xpa cdata param} { InitError xpa catch { global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS {ProcessSendTIFFCmd {} {} $param [xparec $xpa datachan] {}} {Windows NT} {ProcessSendTIFFCmd {} {} $param dummy {}} } } XPACatchError $xpa } proc XPARcvdTIFF {xpa cdata param buf len} { XPADebug "XPARcvdTIFF" $param InitError xpa catch { set i 0 global tcl_platform switch $tcl_platform(os) { Linux - Darwin - SunOS {ProcessTIFFCmd param i [xparec $xpa datachan] {}} {Windows NT} {ProcessTIFFCmd param i dummy {}} } } XPACatchError $xpa } proc XPASendTile {xpa cdata param} { InitError xpa catch {ProcessSendTileCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdTile {xpa cdata param buf len} { XPADebug "XPARcvdTile" $param InitError xpa catch {set i 0; ProcessTileCmd param i} XPACatchError $xpa } proc XPARcvdUpdate {xpa cdata param buf len} { XPADebug "XPARcvdUpdate" $param InitError xpa catch {set i 0; ProcessUpdateCmd param i} XPACatchError $xpa } proc XPARcvdURLFits {xpa cdata param buf len} { XPADebug "XPARcvdURLFits" $param InitError xpa catch {set i 0; ProcessURLFitsCmd param i} XPACatchError $xpa } proc XPASendVersion {xpa cdata param} { InitError xpa catch {ProcessSendVersionCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPASendView {xpa cdata param} { InitError xpa catch {ProcessSendViewCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdView {xpa cdata param buf len} { XPADebug "XPARcvdView" $param InitError xpa catch {set i 0; ProcessViewCmd param i} XPACatchError $xpa } proc XPASendVLA {xpa cdata param} { InitError xpa catch {ProcessSendVLACmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdVLA {xpa cdata param buf len} { XPADebug "XPARcvdVLA" $param InitError xpa catch {set i 0; ProcessVLACmd param i} XPACatchError $xpa } proc XPASendVLSS {xpa cdata param} { InitError xpa catch {ProcessSendVLSSCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdVLSS {xpa cdata param buf len} { XPADebug "XPARcvdVLSS" $param InitError xpa catch {set i 0; ProcessVLSSCmd param i} XPACatchError $xpa } proc XPASendVO {xpa cdata param} { InitError xpa catch {ProcessSendVOCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdVO {xpa cdata param buf len} { XPADebug "XPARcvdVO" $param InitError xpa catch {set i 0; ProcessVOCmd param i} # someone is setting the error state InitError xpa } proc XPASendWCS {xpa cdata param} { InitError xpa catch {ProcessSendWCSCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdWCS {xpa cdata param buf len} { XPADebug "XPARcvdWCS" $param InitError xpa catch {set i 0; ProcessWCSCmd param i [xparec $xpa datafd] {}} XPACatchError $xpa } proc XPASendWeb {xpa cdata param} { InitError xpa catch {ProcessSendWebCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdWeb {xpa cdata param buf len} { XPADebug "XPARcvdWeb" $param InitError xpa catch {set i 0; ProcessWebCmd param i} # someone is setting an error state InitError xpa } proc XPASendWidth {xpa cdata param} { InitError xpa catch {ProcessSendWidthCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdWidth {xpa cdata param buf len} { XPADebug "XPARcvdWidth" $param InitError xpa catch {set i 0; ProcessWidthCmd param i} XPACatchError $xpa } proc XPASendXPA {xpa cdata param} { InitError xpa catch {ProcessSendXPACmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdXPA {xpa cdata param buf len} { XPADebug "XPARcvdXPA" $param InitError xpa catch {set i 0; ProcessXPACmd param i} XPACatchError $xpa } proc XPASendZoom {xpa cdata param} { InitError xpa catch {ProcessSendZoomCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdZoom {xpa cdata param buf len} { XPADebug "XPARcvdZoom" $param InitError xpa catch {set i 0; ProcessZoomCmd param i} XPACatchError $xpa } proc XPASendZScale {xpa cdata param} { InitError xpa catch {ProcessSendZScaleCmd xpasetbuf $xpa $param} XPACatchError $xpa } proc XPARcvdZScale {xpa cdata param buf len} { XPADebug "XPARcvdZScale" $param InitError xpa catch {set i 0; ProcessZScaleCmd param i} XPACatchError $xpa } proc XPAConnect {} { global xpa if {[info exists xpa]} { catch {xpafree $xpa} unset xpa } InitXPA UpdateFileMenu } proc XPADisconnect {} { global xpa if {[info exists xpa]} { if {[catch {xpafree $xpa} result]} { Error "$result" } unset xpa } else { Error "[msgcat::mc {XPA not initialized}]" } UpdateFileMenu } proc XPAInfo {} { global xpa if {[info exists xpa]} { SimpleTextDialog xpatxt "[msgcat::mc {XPA Information}]" \ 80 20 append bottom "[XPAInfoResult]" } else { Error "[msgcat::mc {XPA not initialized}]" } } proc XPAInfoResult {} { global xpa set rr {} if {[info exists xpa]} { append rr "[format "XPA_VERSION:\t%s" [xparec $xpa version]]\n" append rr "[format "XPA_CLASS:\t%s" [xparec $xpa class]]\n" append rr "[format "XPA_NAME:\t%s" [xparec $xpa name]]\n" append rr "[format "XPA_METHOD:\t%s" [xparec $xpa method]]\n" } return $rr } # unwind xpa errors # requires catch {} to allow a check to take place proc XPADebug {which param} { global debug if {$debug(tcl,xpa)} { puts stderr "$which $param" } } proc XPACatchError {xpa} { global ds9 global icursor global errorInfo if {$errorInfo != {} || $ds9(msg) != {}} { if {$ds9(msg) != {}} { xpaerror $xpa $ds9(msg) } else { xpaerror $xpa [lindex [split $errorInfo "\n"] 0] } InitError xpa } } proc XPAMethod {} { global xpa if {[info exists xpa]} { return [xparec $xpa method] } else { return {} } } proc XPAIsLocal {} { global xpa global env if {[info exists env(XPA_METHOD)]} { switch $env(XPA_METHOD) { unix - local {return 1} } } return 0; } # Process Cmds proc ProcessXPAFirstCmd {varname iname} { upvar $varname var upvar $iname i global ds9 global pds9 global env switch -- [string tolower [lindex $var $i]] { unix - inet - local - localhost {set env(XPA_METHOD) [lindex $var $i]} noxpans {set env(XPA_NSREGISTER) false} yes - true - on - 1 - no - false - off - 0 {set pds9(xpa) [FromYesNo [lindex $var $i]]} } } proc ProcessXPACmd {varname iname} { upvar $varname var upvar $iname i global ds9 global pds9 switch -- [string tolower [lindex $var $i]] { tcl { # backward compatibility incr i } connect {XPAConnect} disconnect {XPADisconnect} info {XPAInfo} } } proc ProcessSendXPACmd {proc id param} { switch -- [string tolower [lindex $param 0]] { info {$proc $id [XPAInfoResult]} } } saods9/ds9/doc/acknowledgment.html000644 000765 000000 00000002706 12022177210 017517 0ustar00joyewheel000000 000000 DS9 Acknowledgment

SAOImage DS9 Acknowledgment

SAOImage DS9 development has been made possible by funding from the Chandra X-ray Science Center (CXC) (NAS8-03060) and the High Energy Astrophysics Science Archive Center (HEASARC) (NCC5-568). Additional funding was provided by the JWST Mission office at Space Telescope Science Institute (NAS-03127) to improve capabilities for 3-D data visualization.

If you have found SAOImage DS9 to be helpful in your research, the following acknowledgment would be appreciated

"This research has made use of SAOImage DS9, developed by Smithsonian Astrophysical Observatory"

or reference the following paper2003adass..12..489J

saods9/ds9/doc/faq.html000644 000765 000000 00000120267 12305173406 015276 0ustar00joyewheel000000 000000 DS9 FAQ

SAOImage DS9 FAQ

This FAQ is a new, on going project, and it is far from being complete. But as common questions on DS9 are received, the FAQ will be updated.

Contents

Copyright
General
Fonts
Linux
Windows
MacOSX
X11
IRAF
Coordinates
Regions
Printing
XPA
VO

Copyright

SAOImage DS9 is composed of approximately 20 open source packages, all of which are distributed under their own open source license agreements, usually GPL, LGPL, or BSD. In addition, several open source packages have been developed here at the Smithsonian Astrophysical Observatory, Cambridge, MA, USA and are distributed under the terms of the GNU General Public License as published by the Free Software Foundation. As long as you continue to adhere to the provisions of the licenses, you are free to distribute SAOImage DS9 along with your software.

The GNU site contains an excellent FAQ on the the dos and donts of GPL.

General

The web browser, catalog tool, image server, and other Analysis functions don't appear to work. Whats going on?

For a number of the Analysis functions, DS9 requires temporary disk space to download and store data. By default, this directory is defined by the TMP or TEMP environment variable. This is usually defined as /tmp for Linux and MacOSX users. For Windows users, this will vary, depending on which version of Windows you have. In any case, if the temp directory is not writable, or you have specified an invalid directory in the preferences, these functions will fail with a variety of error messages.

My system admin stripped the DS9 binary and now DS9 fails to start with the following error message:

Application initialization failed: Can't find a usable tk.tcl in the following directories...

DS9 is based on tcl/tk which is a scripting language which requires many support files. To create a stand alone application, we fool tcl/tk into thinking that it has a valid installation. To do this, DS9 is really an application, along with an zip archive attached. The first thing DS9 does is to create a virtual file system in memory and unpack that archive into memory. The application DS9 is already stripped of debugging symbols when built.

It appears that the strip command is stripping part of the archive, hence DS9 is unable to un-compress it. In summary, don't strip the DS9 binary and everything works fine.

When I open my FITS image, all I see is 'white'. Yet everything, including the color bar seems to work?

New with version 2.1, is support for the DATASEC keyword. This keyword specifies what portion of the image is valid data, for calculating min / max and for displaying. This is very important for images created from CCDs with over scan and bias strips. By default, this support is enabled. However, a number of fits images with this keyword, have invalid values. Therefor, when DS9 opens the image, it finds no valid data to display. To correct this problem, either disable DATASEC support, via the Scale menu, or correct the the value of DATASEC in the fits header. You can also change the default behavior by disabling DATASEC from the preferences menu.

Fonts

Where is the Symbol Font? How do I enter special characters into an entry dialog?

The concept of a separate SYMBOL font is no longer implemented with the latest OS font and scripting support, especially with scalable anti-alias fonts such as Xft for Linux. Most newer fonts (if not all) now have greek characters as part of the font. The greek chars start at unicode \u0391 for 'A' and \u03b1 for 'a'. Each OS has a tool used to build and copy a string of characters. Then use the Edit:Paste menu of DS9 to insert the character string.

Linux- Gnome: gucharmap
Linux- KDE: kcharselect
MacOSX: Character Viewer (Select Edit:Special Characters) Now click and drag the characters to a terminal window. Then select the string and select Edit:Copy.
Windows: Character Map (from Start button, select All Programs, Accessories, System Tools and then Character Map)

Linux

My /tmp directory is mounted -noexec and bin table filtering does not work.

Set the environment variable FILTER_TMPDIR to a directory that is both writable and can execute.

I have Red Hat 7, and I'm running KDE. The magnifier keeps going blank after a few seconds, what's going on?

The problem was in KDE. If the user has decided to hide the panel taskbar and  sets a delay time for when it appears if the mouse is moved to the panel  location, then it appears that KDE creates mouse events that fool DS9 into  thinking the mouse is outside and it blanks the magnifier. By turning off the  hide panel, the effect goes away. The alternative is to update to KDE2.1Beta  where this method of dealing with the hidden panel is not used and all is  well, as it was for KDE

I have FreeBSD. When I run ds9, I get the following error:   ELF binary type "0" not known Whats going on?

The solution was to use the brandelf utility on the file to ensure that the machine understood that it  was a Linux program.

% brandelf -t Linux (file name)

Windows

When I do Save Image, I get the same result (and this is true for either .gif, .jpeg, .tiff, .png and .ppm) : it saves only a stripe at the top of my image.

This problem seems to be caused by running DS9 in Windows XP compatibility mode. Please un-check the compatibility option in the properties dialog.

How can I open a FITS file with an extension name?

By default, the windows port of DS9 uses the Windows standard dialog box to open and save files. This can be a problem in that the native Windows dialog will not allow extensions to the file name, such as foo.fits[2]. You must use the Unix like standard dialogs to be able to specify an extension. Select Edit->Preferences->General:Dialogbox to change the default standard dialog.

Every time I create an auxiliary window in ds9, such as a Pixel Table, or Analysis Plot, it will retreat behind the main ds9 window. Then, when I bring the auxiliary window to the front and move the mouse out of it, it automatically goes behind the main ds9 window again. What can I do to fix things so that the auxiliary window stays on top of the ds9 window?

To fix things so that the auxiliary window stays on top of the ds9 window, do the following:

Go to the icon task bar at the bottom of the screen. Bring the auxiliary window to the front by clicking on its icon in the icon task bar. While the mouse still is on the aux window icon, press the mouse button, and keeping it pressed, move the mouse off the task bar. Release the mouse while off the task bar. The auxiliary window will now stay on top of the main ds9 window.

MacOSX

I can't invoke the 'Save Image' function from the MacOSX X11 version. I get an error message "An error has occurred while creating the image. Please make sure entire image is visible on screen."

Up until MacOSX 10.8 (Mountain Lion), Apple provided their own version of a X11 server. At first, it was based on XFree86 (X11R6.6) and available with versions up to MacOSX 10.4. Later with MacOSX versions 10.5 to 10.7, the Apple's X11 server was based upon X.org (X11R7.2).

The Apple version of X11 server for MacOSX 10.5 to 10.7 contains a bug which fails if you invoke certain X11 calls on a window if its location is not at 0,0 on the screen. Hence, within DS9, if you 'Save Image' and your window is not exactly in the upper left corner, it will fail.

Again, this only affects users of MacOSX 10.5 to 10.7.

Starting with MacOSX 10.8, Apple no longer provides a X11 window server. The user must go to the XQuartz site and download/install directly. The current version is 2.7.3.

When I invoke DS9 MacOSX Aqua from the command line, I get weird errors such as:

The document "foo.fits" could not be opened. SAOImage DS9 cannot open files in the "Flexible Image Transport System" format.

When opening MacOSX Aqua from the command line, it is better to use the OPEN application as opposed to specifying the binary directly. The OPEN application sets up the environment just as it is when a user double clicks.

# good
% open /Applications/SAOImage\ DS9.app foo.fits

# bad
% /Applications/SAOImage\ DS9.app/Contents/MacOS/ds9 bar.fits

How can I open a FITS file with an extension name?

By default, DS9 MacOSX Aqua uses the MacOSX standard dialog box to open and save files. This can be a problem in that the native MacOSX dialog will not allow extensions to the file name, such as foo.fits[2]. You must use the Unix like standard dialogs to be able to specify an extension. Select Edit->Preferences->General to change the default standard dialog.

How do I set my PATH environment variable under MacOSX for use with external analysis programs, such as funtools?

When you double click on a MacOSX application, it does not parse any shell startup files, such as ~/.profile. Instead, the environment is defined using a special environment file, .MacOSX/environment.plist. This file can be created with the MacOSX utility /Developer/Applications/PropertyListEditor.app. For further information, please click here.

X11

Is it possible to work in batch mode without a physical display?

DS9 is written as an interactive, window client program, and as a result, does require a window server to be available for rendering (X11, Windows, or MacOSX).

Therefore, using DS9 as a batch process can be cumbersome. We recommend using xvfb under X11. Just set up a virtual display buffer, reset your DISPLAY variable, then invoke DS9 with a number of command line options or use xpa from a shell script as a batch processor. Example:

% export DISPLAY=:1
% Xvfb :1 -screen 0 1024x768x16 &
% ds9 -file cmap.fits -zoom to fit -cmap b -grid skyformat degrees -grid yes -regions ../EMS-names.reg -saveimage png mytest.png -exit

When I start DS9, I get the following error message:

_X11TransSocketINETConnect: Can't get address for foo.bar.edu
couldn't connect to display "foo.bar.edu:0.0"  

DS9 is unable to determine a valid X11 Display server, because of a number of reasons. Most often this is seen when you have a laptop configured for a network, but is not physically connected. You need to set the DISPLAY environment variable to :0.0

$ xhost +
$ set DISPLAY=:0.0
$ export DISPLAY

Under Solaris, when I start DS9, my twm window manager crashes!

TWM distributed with X11R5 had a major bug, that was corrected around 1996. DS9 will trigger this bug, and will cause TWM to crash. If you are running Solaris, and have X11R5 installed, be sure that /usr/openwin/bin is in your path before X11R5/bin. This will insure that you are running the correct version of TWM .

When I run ds9 with the tvtwm window manager, sometimes the open file dialog box does not appear?

If you are running tvtwm, and you are currently viewing a virtual screen other than the first, when you open a file, the dialog box will appear in the first virtual screen, not your current. This is a bug with tvtwm and not ds9.

IRAF

I can't use more than 9 frames with the IMEXAMINE task?

The task IMEXAMINE can not be used with frame numbers greater than 9.

Can I display from IRAF to DS9 running under Windows or MacOSX?

Yes, DS9 for Windows and MacOSX is also a fully functional IRAF display server. To direct image output from IRAF to DS9 running under Windows or MacOSX, use the IMTDEV environment variable. For example, if the machine is named 'foo.bar.edu', define IMTDEV to the follow value before entering IRAF.

$ setenv IMTDEV inet:5137:foo.bar.edu
$ cl
cl> display dev$pix

I'm having problems with mscred task msczero?

DS9 now supports IRAF's new IIS image display protocol. However, there is one minor problem with the mscred task msczero. Before using msczero, issue the following command in the cl:

cl> set disable_wcs_maps=""
cl> flpr

I find that there is a frustrating delay in performing operations on images displayed from IRAF - there's a wait of a second or two before an image is (re)displayed, whereas saoimage reacts virtually instantly for the same type of operation. This makes running imexamine on a batch of images a pain, and using the mouse to change color gamma/bias to desired values basically impossible.

DS9 and saoimage are similar in speed when working with IRAF. In fact, DS9 uses  the same code to interface with IRAF as saoimage and ximtool. The only  difference is that DS9 is double buffered, whereas, saoimage and ximtool only  use a single buffer. So with saoimage and ximtool, you see incremental progress,  where DS9 will render the image all at one time. However, the overall time to  finish rendering should almost be the same.

DS9 runs in both 8 bit and 24 bit environments, but saoimage is restricted to 8 bit. If you are running DS9 and saoimage at the same time, then you must be in 8 bit mode. You should not see any  delay in changing the color bias/contrast between the two.

However, if you are running DS9 in 24 bit mode, then you will see slower  performance in changing the bias/contrast, as compared to 8 bit mode. Instead of  changing a color look up table, as in 8 bit mode, DS9 has to update every pixel  on the screen. If your cpu speed is slow, you can select the  Edit:Preferences:True Colorbar to tell DS9 not to update the entire screen,  only a part of the screen. This should only be needed if your machine is slower  than 200 MHz. Again saoimage does not even run in 24 bit mode, so there are no  comparisons.

I try to display an image from IRAF and I get the following error message:

Cannot open device (node!imtool,,512,512)

DS9 works the same way as ximtool, saoimage, and saotng. No special scripts  should be needed. If you have one of the above currently working, DS9 should  work out of the box.

IRAF can use one of three methods to communicate with DS9: fifo, socket, and unix  domain name. The DS9 defaults are:

fifo /dev/imt1
port 5137
unix /tmp/.IMT%d

If your IRAF configuration is set up different (i.e., a different port number, or  via a fifo), you need to tell DS9 how to communicate with iraf. DS9 uses the same  command line options as XIMTOOL:

-fifo
-fifo_only
-inet_only
-port
-port_only
-unix
-unix_only

I try to display an image, I see something, but it's corrupted and I get multiple error messages from DS9...

An IRAF image server (ximtool, saoimage, DS9, etc...) uses a configuration file  to specify the number of available buffers and their sizes. What actually passes  from IRAF is not the buffer size, but an index number into this file.

So when an image server starts (DS9), it will attempt to locate this file as  $HOME/.imtoolrc and /usr/local/lib/imtoolrc. If not found, it will look for shell  environment variables IMTOOLRC and imtoolrc, that contains the name of the configuration file.

If no configuration file is found, DS9 will assume the following default configuration:

 1  2  512  512  # imt1|imt512
 2  2  800  800  # imt2|imt800
 3  2 1024 1024  # imt3|imt1024
 4  1 1600 1600  # imt4|imt1600
 5  1 2048 2048  # imt5|imt2048
 6  1 4096 4096  # imt6|imt4096
 7  1 8192 8192  # imt7|imt8192
 8  1 1024 4096  # imt8|imt1x4
 9  2 1144  880  # imt9|imtfs full screen (1152x900 minus frame)
10  2 1144  764  # imt10|imtfs35 full screen at 35mm film aspect ratio
11  2  128  128  # imt11|imt128
12  2  256  256  # imt12|imt256
13  2  128 1056  # imt13|imttall128 tall & narrow for spectro.
14  2  256 1056  # imt14|imttall256 tall & wider for spectro.
15  2 1056  128  # imt15|imtwide128 wide & thin for spectro.
16  2 1056  256  # imt16|imtwide256 wide & fatter for spectro.
17  2 1008  648  # imt17|imtssy Solitaire fmt w/ imtool border
18  2 1024  680  # imt18|imtssn Solitaire fmt w/out imtool border
19  1 4096 1024  # imt19|imt4x1

If on the other hand, IRAF assumes a different buffer size, the image will appear corrupted and DS9 may issue a number of error messages.

Another problem is that this file must be in sync with dev$graphcap. If your  system administrator has made changes to graphcap, they must also be implemented in imtoolrc.

Here is a note from NOAO:

The messages means that there is no /usr/local/lib/imtoolrc file on the machine. This is created as a symlink to dev$imtoolrc by the iraf install script but only if the /usr/local/lib dir already exists on the machine. The fix is the create the dir and rerun the install script or else make the link by hand.  Users can also just copy dev$imtoolrc to $HOME/.imtoolrc and restart the server to also workaround it. Note that an existing .imtoolrc might define old frame buffer configs which might confuse things, so if the system file exists check for a private copy screwing things up.

Where do I find this .imtoolrc file?

Again, here a note from NOAO concerning this issue:

In a smooth installation the imtoolrc file is installed as a /usr/local/lib/imtoolrc symlink pointing to the dev$imtoolrc file in the iraf system.  This is normally what's used but XImtool (and DS9?) also allow a $HOME/.imtoolrc and IMTOOLRC environment variable defining the path as fallbacks.  There are several practical problems with  this:  for some reason (I'm trying to fix) the imtoolrc link won't be created if the /usr/local/lib directory doesn't exist when the install script is run on the machine, even though it's run as root and the file can be directory easily.  On PC-IRAF systems there is also a typo in the install script (extra logical or at line 515) which causes it to exit before the display setup is run (i.e. no /dev fifos or imtoolrc). If users don't catch this or see it in the README file they'll think everything went fine. Lastly, the local iraf admin might not have run the install script on the local iraf NFS client machine at all.

When I display an image from IRAF, the SCALE menu option is not active, Why?

When you display an image from IRAF into DS9, IRAF actually does the color scale  distribution. In Display, use the ztrans and z1,z2 parameters to set the upper/lower bounds and distribution. You can also use the zscale parameter to auto determine z1,z2.Here are the DISPLAY parameters in question:

ztrans=[linear|log|none|user]
z1=min
z2=max
zscale=[yes|no]

What actually is sent from IRAF to DS9 is one byte per pixel, values 0-200,  which already has applied both the upper and lower clipping bounds and the distribution. So this is why, the SCALE menu is disabled in DS9 when it receives a image from IRAF.

Coordinates

Why don't I see PHYSICAL/WCS/WCSA...WCSZ coordinates displayed when I load my image?

DS9 supports the following coordinate systems:

WCS Sky coords (fk4,fk5,icrs,galactic,ecliptic)
WCS Linear coords
Image (also known as Logical)
Physical (also known as CCD)
Detector
Amplifier  

DS9 uses the following FITS keywords in the header to define a coordinate system:  

Coordinate System Keyword Values
WCS / WCSA...WCSZ CRVAL,CRPIX,CRDELT,CD... (for images)
TCRVL,TCRPX,TCDLT,... (for tables)
Image none required
Physical WCSNAMEP='PHYSICAL' or LTMx_x/LTVx
Detector
DTMx_x/DTVx
Amplifier
ATMx_x/ATVx

If the required keywords are not present, values for those coordinates are not displayed.

Note: For PHYSICAL, DS9 will first look for an alternative WCS with WCSNAMEx='PHYSICAL'. If not found, DS9 will then look for the LTMx_x LTVx keywords.

Regions

How do I indicate distance on my printed images? 

You have two choices, the RULER region and the LINE region. The ruler region is mainly used for interactive measurements. For printed output, use the LINE region to create a distance indicator. In the line region dialog, there is a read-only entry that indicates the length in pixels, degrees, arcmin, or arcsec. Edit to the desired distance and enter the desired label, including ' or ", in the region text labile entry. You have the option of arrows at each end of the line.

Printing

I can make some wonderful color images in DS9 and save them as postscript files that look great, but often when I print them they appear washed out or very different than they do on the screen. My question then is what, if anything, can I do about this?

The problem is that you create an image on a display, which is the product of  RGB colors (red, green, and blue) and print the image on a printer, which is the  product of CMYK colors (cyan, yellow, magenta, and black). Furthermore, every  monitor is different in how it will display a certain color, and every printing  technology is different in how well it will reproduce that color. And finally,  the translation between RGB and CMYK is not symmetric, i.e. its not possible to  translate some colors back and forth.

It's possible to calibrate your monitor and your printer, to create a  translation matrix, to correct for problems outlined above (in the Macintosh  world, this is what ColorSync does). The idea is to apply a gamma correction to the output of DS9, so  that it will print much more in line with what you expect. To do this you'd need  special software and hardware, and its only valid for your monitor and your  printer.

In summary, its not worth it. Especially in the case of publication, such as ApJ,  where you have no idea on what printing technology will be used to reproduce  your image. So the only control you have is to calibrate your monitor and to  hope for the best.

However, there are some rules of thumb that might help. First, printers have a very hard time with blues and purples, as they tend to be washed out. Either avoid these colors, or over compensate these colors. 

ApJ has a good idea in that you send in both an electronic version and a hard copy of your color image. That way, they can manually adjust the printers to  try to match your output.

NOTE: Even though ApJ requests images in CMYK, we recommend RGB. From personal experience, if you send RGB, the printed results will be closer to the original.

We used DS9 to generate 300 dpi CMYK eps figures, as per the ApJ specifications, but the color scheme on  our proofs is wrong.  In the proofs, the violet is washed out and looks similar to the black, and the blue is not nearly as intense.

There are two issues here: first,  color printers are notorious for failure to reproduce blues and purples correctly. Second,  not all colors in RGB space can be reproduced correctly in CMYK space, blues being the prime example. Below is an excerpt from an industry pamphlet:

Be aware that it is possible to see colors in RGB that you can't make with CMYK. They are said to be "out of the CMYK color gamut". What happens is that the RGB-to-CMYK translator just gets as close as possible to the appearance of the original and that's as good as it can be. It's something that everyone in the industry puts up with. So it's best to select any colors you use for fonts or other design elements in your layout using CMYK definitions instead of RGB. That way, you will have a better idea of how they will appear in your printed piece. Here's a common example: many programs translate the 100% Blue in RGB into a somewhat purple-looking color in CMYK. We recommend a CMYK value of 100-65-0-0 to get a nice clean blue.

For this reason, you may wish to use the RGB color space or colormaps without deep blues and purples, such as BB or Heat.

XPA

How can I use XPA to display from a client machine to DS9 on a server machine?

Assuming you have direct IP reachability between the machines (i.e. one host can successfully connect() to the other), XPA does allow you to have an XPA-enabled server like DS9 on one machine and a client on another. To make this work, you need to do two things (let's assume DS9 is running on a machine called "server_host" and you want to send xpa commands from "client_host"):

  1. The XPA server program (i.e. DS9) must allow the client host to send XPA commands. Access can be permitted in one of two ways:
    1. Send the XPA server an acl request by running xpaset on the same host on which the server is running (i.e. on the server_host):

      % xpaset -p ds9 -acl client_host +

    2. For more permanent access, add permissions in ~acls.xpa:

      % cat > ~/acls.xpa
      DS9:ds9 client_host +

      You can check the acls for an XPA server using xpaget:

      % xpaget ds9 -acl

  2. On the client side, the client needs to communicate with the xpansname server program on the server machine to find the XPA server communication info. This also can be done in two ways:
    1. use the -i [host] switch to override XPA_NSINET for this execution (The default port is 14285):

      % xpaget -i 'server_host:14285' ds9


    2. Set the XPA_NSINET variable for more permanent selection of xpans on the server host:

      % setenv XPA_NSINET 'server_host:14285'

Once these two setup steps are performed, you should be able to send commands to DS9 and receive data from DS9. You can look at the xpaacl man page for more information.

I have a laptop, that most of the time, is connected to a network. DS9 runs fine. However, when I'm not connected to a network and I start DS9, it hangs. What's going on?

 DS9 uses XPA for interprocess communication. When DS9 starts, XPA initializes itself. XPA uses either IP sockets or UNIX sockets, based if your machine is configured to connect to the internet. In the case where your machine is configured for the internet, but you are not currently connected, XPA gets very confused. So, you can define a shell variable, XPA_METHOD, that tells XPA which method to use.

The following is from the XPA documentation:

Determines the socket connection method used by this session of XPA. The choices are: inet (to use INET or Internet-based sockets) and local (unix) (to use UNIX sockets). The default is INET. Using the inet method will allow access from other machines (subject to access controls) but using local will not. Local is most useful for private access and when the machine in question is not connected to the Internet

More information is available on XPA shell variables at: The XPA Environment

VO

I can't connect to any of the virtual observatories. What do I do now?

The DS9 help facility now contains a tutorial on how to configure DS9 to by pass network firewalls. See Virtual Observatory Reference for more information.

saods9/ds9/doc/helpdesk.html000644 000765 000000 00000001374 11425634103 016321 0ustar00joyewheel000000 000000 DS9 Help Desk

SAOImage DS9 Help Desk

If you encounter any problems or have suggestions with SAOImage DS9, please contact us:
saord @ cfa.harvard.edu

William Joye
Smithsonian Astrophysical Observatory
60 Garden St.
Cambridge, MA 02138 USA


saods9/ds9/doc/install.html000644 000765 000000 00000004544 11425634103 016172 0ustar00joyewheel000000 000000 DS9 Installation Instructions

SAOImage DS9 Installation Instructions

Solaris / Linux Installation

DS9 for Solaris and Linux is a self contained application and does not require any installation procedures or support files.
  1. Download DS9. This is a gzip'ed tar file.
  2. Use the following command line to extract DS9:
  3. $ gzcat ds9.<port>.<version>.tar.gz | tar -xvf -
  4. Move the DS9 executable into a directory in your path.

MacOSX

There are versions of DS9 for 10.4 (Tiger) and 10.5 (Leopard)
  1. Download DS9 for MacOSX. This is an universal application that contains binaries for both PPC and Intel Macs. Drag to your Applications folder.

Darwin

There are versions of DS9 for 10.4 (Tiger) and 10.5 (Leopard). Darwin is only recommended for experienced users of unix and linux. For other users, we recommend DS9 for MacOSX.

DS9 Darwin requires X11.  DS9 for Darwin is a unix executable and must be run from the command line of a Terminal window.
  1. Download DS9 for Darwin. This is a gzip'ed tar file.
  2. Open a Terminal window.
  3. Use the following command line to extract DS9:
  4. $ gzcat ds9.darwin<arch>.<version>.tar.gz | tar -xvf -
  5. (Optional) Move the DS9 executable into a directory in your path.

Windows 7/Vista/XP

  1. Download DS9 for Windows NT/2000/XP. This is a WinZip.exe install file.
  2. Execute the install file. DS9 will be installed by default in C:\Program Files\ds9. It will contain two files, the DS9 application and cygwin.dll.
  3. To run, go to C:\Program Files\ds9 and double click on the DS9 icon.
saods9/ds9/doc/new.html000644 000765 000000 00000040304 12413573626 015321 0ustar00joyewheel000000 000000 DS9 New Features

SAOImage DS9 Version 7 New Features

Version 7.3

64 bit Applications

DS9 now fully supports 64 bit applications across all platforms. New support for 64 bit MacOSX Aqua has been added, along with 64 bit Windows Cygwin.

2D Plots

New and improved GUI
Support for data set legend
Improvements in rendering
Error bar caps are now supported

Mouse Mode

The default mouse mode is now NONE and not REGION or POINTER. This prevents unwanted region creation went bringing the DS9 window to the front in most Window managers.

Other Enhancements

Improved rendering of rotated text
Support for ENVI data format
3D Image caching
3D Background Image rendering
Dramatic improvements in analysis speed of large 3D data sets
New Segment region

Version 7.2

FITS

DS9 now fully supports complex FITS images such as data cubes, multiple extension data cubes, mosaics, RGB images, and 3D images. In addition, DS9 can be use to create complex FITS images from multiple FITS files and other image formats. Furthermore, complex FITS images can be easily disassembled into individual images and saved in FITS or other image formats.

Common API

XPA and SAMP now share the same API as the command line interface. Backward compatibility is maintained to previous versions of DS9.

Other Enhancements

More robust handling of SEGV and SIGBUS events
DS9 now distinguishes between BLANK/NAN/INF values
saveimage now supports EPS
Support for NRRD (Nearly RAW Raster Data) data format
Added support for exporting RGB images in TIFF, JPEG, or PNG
Improvement for FITS compression support
Released under GPL v3

Version 7.1

Catalog Matching

DS9 now supports catalog matching. From the Catalog menu option, the user selects two currently loaded catalogs, an error radius, and matching function. The user may request all sources that are present in both catalogs, or in one catalog and not in the other. Each catalog need not to be specified in the same world coordinate system.

Enhanced Plot Tool

In addition to a Line Plot Tool, DS9 now supports additional Bar and Scatter Plots Tools. The GUI for the Plot Tools have been enhanced and new features have been added including statistics and data lists. Each Plot Tool supports multiple data sets and custom plotting options.

Catalog Scatter Plots

The user may now plot the results of two columns of a loaded catalog as a scatter plot. A selected region on the image will highlight the corresponding row and plot point. Likewise, a selected row or plot point will highlight the corresponding image region.

Interactive Region Analysis

DS9 regions now support interactive region analysis. The analysis tasks are enabled by selecting the Analysis Menu in a region's dialog box. Interactive analysis tasks includes statistics, data cuts in 2D and 3D, and radial profiles.

Other Enhancements

3D scaling along the z axis of data cubes
Lock/Match Smoothing option
WCS dialog support for non-linear projections such as TAN-SIP and SCAMP
Support for FITS files larger than 2Gb has been improved

Version 7.0

3-D Data Visualization

Previous versions of SAOImage DS9 would allow users to load 3-D data into traditional 2-D frames, and would allow users to step through successive z-dimension pixel slices of the data cube. To visualize 3-D data in DS9 v. 7.0, a new module, encompassed by the new Frame 3D option, allows users to load and view data cubes in multiple dimensions.

The new module implements a simple ray-trace algorithm. For each pixel on the screen, a ray is projected back into the view volume, based on the current viewing parameters, returning a data value if the ray intersects the FITS data cube. To determine the value returned, there are 2 methods available, Maximum Intensity Projection (MIP) and Average Intensity Projection (AIP). MIP returns the maximum value encountered, AIP returns an average of all values encountered. At this point, normal DS9 operations are applied, such as scaling, clipping and applying a color map.

Rendering time is independent of the actual data cube size. Instead, the time it takes to render is based on how many rays are needed to project the data cube upon the screen in the view volume and the current zoom factor. The new module requires no special hardware or graphical processor unit (GPU) and the rendering time is adequate for interactive GUI manipulation on most computers. The rendering engine is developed using the POSIX thread library, allowing multiple light weight processes to be spawned to complete an image in parallel. The number of threads actually generated is a user specified parameter. Since all modern hardware contain multiple CPU cores, the default value is 8 threads. For larger work stations, this number can be increase. For every doubling in the number of CPU cores available, rendering times decrease approximately 75%.

The new module is support on all hardware platforms currently supported by DS9, including 32-bit and 64-bit versions of Linux and MacOSX, and 32-bit versions of Windows and Solaris.

All 2-D graphics, regions, cross hairs, contours, and coordinate grids, are applied to the current slice, which is selected by the user. When the user wishes to match or lock a 2-D image and to a 3-D data cube, the current slice is used to determine the rendering solution. The user can crop the data cube for all 3 axes via the command line or the GUI. The new module also supports FITS event files binned into a data cube.

All printing support has been extended to the new 3-D module. The user may generate 3-D images in Postscript, JPEG, TIFF, and other formats, just as in the 2-D case. Furthermore, native printing is supported for the Windows version.

DS9 analysis macros have been enhanced to fully support the new 3-D module, allowing the user to invoke external analysis tasks based on the current view parameters and to return results back into DS9 in the form of text, plot, 2-D image, or 3-D image.

Funding for 3-D data visualization was provided by the JWST Mission office at Space Telescope Science Institute (NAS-03127)

Color Tags

The purpose of color tags are to highlight (or hide) certain values of data, regardless of the color map selected. The user creates, edits, and deletes color tags via the GUI. To create a color tag, enter the Colorbar Mode, and click once on the colorbar. This creates a default color tag. Click and drag to change the values. Click and drag on one side to increase or decrease the value. Double click to manually edit the values and color. Place the cursor over the color tag and press the delete key to delete it. From the color parameters dialog, the user can load, save, and delete all color tags for that frame.

Regions

Regions now support analysis tasks unique to each region type. In the menu of the region dialog, the Analysis menu will contain any type specific analysis tasks. The Circle, Ellipse, Box, Polygon, and Point regions now support interactive 1-D cuts along the 3rd axis of 3-D data cubes. The Line, Vector, and Projection regions support 2-D cuts through the current slice of 2-D and 3-D data. The Auto Plot option under the regions preferences can be used to specify if a plot is automatically generated when the region is created.

Analysis

DS9 analysis macros have been enhanced to fully support the new 3-D module, allowing the user to invoke external analysis tasks on the current slice of 3-D data cube. The macro $z is now supported for 3-D data. In support of Funtools, the PLANE keyword is supported.

Slice

DS9 now allows the user to load a 3-D data cube one slice at a time via the GUI or from the command line. Use the option -slice to specify that all following 2-D files are to be interpreted as a slice of a 3-D data cube.

Photo

DS9 can now load images in TIFF, JPEG, and PNG file format directly. When loaded into a Frame, the average of the luminosity is used. When loaded into a Frame RGB, each channel is loaded directly. Use the -photo command line option to specify that all following files are to be interpreted as a photo image.

Export

DS9 will export the current image in TIFF, JPEG, or PNG file format with the current colorbar parameters applied. The entire image is exported (not just the visible portion) at the native resolution.

Lock/Match

The support for the Lock/Match functionality of DS9 has been greatly enhanced. The user may choose to lock/match frames, the cross hair, cropping, the current slice, binning parameters, scale parameters, or color map parameters.

Crop

DS9 now supports cropping the current image, via the GUI, command line, or XPA/SAMP in both 2-D and 3-D. The user may specify a rectangular region of the image data as a center and width/height in any coordinate system via the Crop Dialog, or can interactively select the region of the image to display by clicking and dragging while in Crop Mode. For 3-D frames, the shift-click to change the front clip plane, and control-click to change the back clip plane. From the command line, cropping parameters can be specified in IRAF format.

ASINH Scale

A new scale function has been added, ashinh, based on the arc sinh function. This new function has similar properties as the log function, with a=10.

All new GUI

DS9 now supports basic GUI elements (buttons, menus, etc) via the native window manager API. Each port of DS9 will have a native look and feel of each hardware platform. DS9 will take advantage of the current user selected Theme if supported by the native windowing system.

Postscript

DS9 now generates identical postscript code for a particular image, regardless of which hardware platform was used to generate the image.

Catalogs

The user may now specify coordinates in any equatorial system (not just FK5) for a catalog search and receive results in any equatorial system, to be plotted or saved. Local catalogs in any equatorial system are now supported.

New WCS support

New WCS support for non-FITS WCS projections have been added to DS9: TNX, ZPX, SCAMP, SIP and HEALPIX.  The keyword WCSDEP is now supported.

Enhancements and improvements have been made in the support for the following FITS WCS projections: COD, COO, COE, COP, ZEA, and CAR.

DS9 now supports non-equatorial long/lat coordinate systems in the form of xLON/xLAT and xyLN/xyLT. This includes solar WCS HPLN/HPLT, HGLN/HGLT, and HRLN/HRLT systems.

DS9 now fully supports multiple alternative celestial WCS, if specified. All cut/paste/copy operations, catalog, image server, contour, regions, and coordinate grids will now use the default WCS as selected by the user, via the WCS menu item.

HEALPIX

DS9 now supports native HEALPIX maps, in both FITS binary table and ascii table form. Any table with keyword PIXTYPE=HEALPIX or NSIDE=x will be processed as an HEALPIX image. The user may specify HEALPIX parameters within the file specification to indicate RING (default) or NESTED order, Coordinate System (default is Unknown),  Quadrant (default is first), and Equator (default), North, or South layout. The appropriate WCS is generated for the image.

External Analysis Files

DS9 will now look for external analysis files in the following locations at start up: the current directory, $HOME/bin, /usr/local/bin, /opt/local/bin, and /soft/saord/bin in the form of *.ds9. If found, they will be automatically loaded. Users may disable this feature via the presences analysis panel. DS9 will continue to load ds9.ans and ds9.analysis if found, and users specified analysis files as before. DS9 will verify that the same analysis file is not loaded twice to avoid duplication of analysis menus.

For more detailed information, Please see Release Notes

saods9/ds9/doc/ref/000755 000765 000000 00000000000 13012655540 014405 5ustar00joyewheel000000 000000 saods9/ds9/doc/release/000755 000765 000000 00000000000 13012655540 015251 5ustar00joyewheel000000 000000 saods9/ds9/doc/story.html000644 000765 000000 00000006025 11556324124 015704 0ustar00joyewheel000000 000000 Story of SAOImage DS9

The Story of SAOImage DS9: How DS9 got its name

In 1990, Mike Van Hilst, at the Smithsonian Astrophysical Observatory, Center for Astrophysics, Harvard University, developed SAOImage. SAOImage was first implemented in X10, then reimplemented in X11. In fact, it was one of the first X11 based applications publicly made available. SAOImage was a brilliant program, implementing techniques in scientific visualization 20 years ago that are still being used by today's applications. Since Mike's departure from SAO, SAOImage has been maintained by Doug Mink.

In the mid 1990's, with the administrative support of Steve Murray, Eric Mandel developed SAOtng, or (SAOImage, The Next Generation), named after the Star Trek series. TNG was based on IRAF's XIMTOOL graphics libraries and Tcl. It explored new GUI interfaces and supported a new external analysis interface. In particular, it utilized XPA, (X11 Public Access, also written by Eric) which allowed TNG to be scripted via a shell, or from other application.

In 1998, while working with Eric, William Joye began a complete rewrite of TNG, based on the experience developed while supporting TNG. This project was funded by the NASA Applied Information Systems Research Program, under the title "Future Directions for Astronomical Image Display". For lack of a name, the new project was referred to as DS9, the logical extension of the Star Trek series. The name continues to be in use. Current funding is provided by the NASA High Energy Astrophysics Science Archive Center and the Chandra X-ray Science Center.

DS9 is a Tcl/Tk application. The GUI is implemented as a very thin layer of Tk. A number of Tk Canvas widgets in C++ were created to support all the functionality needed. Basically, all the real work is done in C++. DS9 inherited TNG's support of regions, XPA, external analysis support, and the general GUI. However, all the visualization techniques come directly from SAOImage.

The current version of DS9 is composed of the Tk widgets created along with support from about 20 other open source products (including Tcl/Tk, AST, BLT, HCompress, HTMLWidget, plio, rics, tcllib, tclxml, tkcon, tkimg, tktable, wcssubs, xmlrpc, XPA, zip, zlib, and zvfs). The distributed binaries consist of a self-contained self-extracting archive and application, which provides an independent Tcl/Tk environment without installation.

The first versions of SAOImage DS9 were made available in 1999. Since then, the popularity of DS9 has grown far beyond expectations.

saods9/ds9/doc/sun.gif000644 000765 000000 00000007042 10414777120 015132 0ustar00joyewheel000000 000000 GIF89adb÷ Ï¡Ç¡Ì¡Þ¢È£Ê£Õ¤É¥Ï¦Ê¦Ì¦Ê¦Ë¥Ê§È§Ê¦Í¥Â¦É§É¨Ë ¨Å ©Ï©À«Í«·®Ð#±Ñ(®ª3·Ó;³œJÀÙP·‰h¼voÍâÁc“ÆSœÝì£ÉF´Í8ÄëôÇÑ(ÔÔá×áõùêÙ ïÚðúýòÚõÛöÛöÛöÜ÷Û÷Û÷ýþøÛøÜúÜûþþþÿÿÿÞÿßÿÿÿ!ù?,dbþH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ#Â,P (A²d ‘,nx\9q‹":h p€@€8@€@ >ˆ(Á‚Ë£_ ±áÁMHM   S¥ÖäI¡ƒ*‘®ä±TƒÍ¨Y³"à ¢Ö´SmfÊBìÆ%:DÀ€¸Y €èÁá-à.¤¡à »wä ‘b…Š!*8œÀÀ 6sî‡ :<†E‡püí‰$©b tZ€âNtC:ºW·¹ÜY’>Sj€ÌV›¢þÏ¿e@©C“˜Ã¶YÑhÑÉœ©Ìîª:pÁßßË*.Ü©*à-ífyfÀn¬_FÀ ±€›îQ~+q*€0@•sŒy ãC bFšsh B ËëÖht 0DˆFÚµ«.yi×÷Nʱî¹_ÞltìZî§ò3"݈ý->ª)¯ìóm!¨`ùôì¯Jv.¯©VÀ6>$‚´‚0ÂÿÐ ù:£:Ž!LÕk_û0×›õQ§-‚‹.ï9„èð|ÀÁð„Ý)ôê¦ÀZL~³÷:Ó+ãé¯ZµÉ]Î臬”A`q&Ì¡;–¨ ±+þ\ÈÚl…i ÛÉ€nÞîð‰¸RÁãÄ'>/O7‹Á\RÊ„ÀA± ¶ÞýÅ3#„¢ñãèø$2°€ñq@lâ±@Ú"‚ ‹Š èYóNàü US#—Ä€§6¶é Rp˜ 3˜ÓÕ € ~dV´y¹°j…, "wX'ÐÀˆØš”)g)6ç AêNä¬o†u:›V¹C4щìC"“€ü!$yLû ûŠˆLb&3 $Î Ê&•Ñ-¤9-º€æ¬IÎÑ”>˜Á¸  ’%äØe`zYÍrZ³ˆ6þXA (9uÅ— AÁ¸W*SÚó ÔñA L\`Gê\ g¤mÛhSO„šÓ+{ÊÑ<`)Ê”÷žbÕ¦£õ™:AÎxó™+eé{B LlÆtzkãz7@åu2!àL\D à€ x &æOÍ9I†z †ü[IC²„°m7âc€SG`€Ç”0*¾fÙ‚Xuñ9€þ; bIX*Wv蔤 ¬ŠÕ¸ÎI*`T&¾ `w„ ¾Ë1çÊ1¨bQÏËÇœ*µŠ!`}u'ƒÅHh[5ª' Íæ ¿3mLsfÊ€„+,é¢RÿM °Õ€j¦)Ò&Ðì‡Ì>ÞÊ™ >(pU®J7‹e¾þ&ͼ ¼$È&õ5•¹^„È(LyͯûáîÀ¾-ƒÂÀËr›L ¯öþ–CI“’‘*°§ÐÞm4æoÅv œñó¸ªß‰.5ƒÔÇ%\Áès¼e%îW8Vw{w¢ 9Ùת²*ï¦}±'×qg­G'#4¡Aï‘mÄ‘Jô|«R4ßÑ#Û"0+PPoq2 E& -Ó8'ö½—3&òbx“ G€‚Á'³d»&&H„Ž'Ã,8†vò’ƒ'bfb!vÁiHdQ£}°#¬â*@‚CÓCZq‚¬!P±+Us5&A.HŽr"Ÿ·mÜCàƒ+Qps -l7<ÁA7u½ÇvÐuÅ' òþ’Sh·;‰RP4H"*@#`'/@†m£,ã}î!'è%h4"_Ø)rXàwˆ+ö!Ïm*à~;¢%¬Ò)P/sw%ƒ*•¨ª˜"`í-·Q„${"[2Ì@•¨¨Ø‹ Á"@­ SAOImage: Tutorials

SAOImage DS9: Tutorials

Below is a list of instructional tutorials which are currently available. This list is updated regularly as new material becomes available.

Exploring Advanced Features of SAOImage DS9
CFA Head Lunch Talk: May 5, 2009


saods9/ds9/doc/user/000755 000765 000000 00000000000 13012655540 014607 5ustar00joyewheel000000 000000 saods9/ds9/doc/user/binning/000755 000765 000000 00000000000 13012655540 016233 5ustar00joyewheel000000 000000 saods9/ds9/doc/user/catalogs/000755 000765 000000 00000000000 13012655540 016404 5ustar00joyewheel000000 000000 saods9/ds9/doc/user/contour/000755 000765 000000 00000000000 13012655540 016300 5ustar00joyewheel000000 000000 saods9/ds9/doc/user/gui/000755 000765 000000 00000000000 13012655540 015373 5ustar00joyewheel000000 000000 saods9/ds9/doc/user/index.html000644 000765 000000 00000003203 11332126233 016575 0ustar00joyewheel000000 000000 DS9 Users Manual

SAOImage DS9 Users Manual

The DS9 Users Manual leads the user step-by-step through many features of ds9, such as data binning and contours. For an in-depth description of all of ds9's capabilities, refer to the Reference Manual

If there are topics that you would like to see covered in the Users Manual, please email: saord @ cfa.harvard.edu.

saods9/ds9/doc/user/rgb/000755 000765 000000 00000000000 13012655540 015361 5ustar00joyewheel000000 000000 saods9/ds9/doc/user/scripts/000755 000765 000000 00000000000 13012655540 016276 5ustar00joyewheel000000 000000 saods9/ds9/doc/user/scripts/contour.png000644 000765 000000 00001363727 11332353406 020517 0ustar00joyewheel000000 000000 ‰PNG  IHDR:rB!ý–bKGDÿÿÿ ½§“ pHYs  šœtIMEÚ)¤¹,q IDATxÚìwX××Ç¿3Û ,K,€Xì1šØK,X¢HóSHôMl±$%‰Ýh,± –5v1Ñ(±‹Q¤©KÙ]¶ïûÇ0ëRT0͘ù<<º»sÛœ¹sÏœsϽC¨Õš'~Û¼ç^="Æ þNOö¿Å_{Ôå­¡ŒD^Aþ–¨×ëˆ^#§÷\V!g$ÂÀÀÀÀð RQV’‘t… @¯×«”JF" ÿeTÕrMµâ…ÉXžPlI¤^¯U)ªô:íóÓÉй<µJ¡VÊQW ²$IõU¯× Ô•N­ªQWZ•B]˜ÒL*àp8¹U,;Aæ¥èÔJ¢<³´¢ÊÞ§su^´Z¶Zîîæú”EEE•å¥<¾@¥THÄ+Ûç§×iµ¹ùZ¡ŒFµ²ª…»Û «(..©ª(å Ä”ú1èõ5ê Œt"6Ok—æ.ÂÀV>W¯ßL.)âYÚƒÖXF½V¨—i jI3o#sy^4*¥‡»‡ÃyaJ—ÇééOÀcÛÛÛ¿0=—ËmæèPX"3ôîn®\.÷…Yœ222`4Íì%6 ’6ÛÀÙÜÍÈQÊ+­,„‚¼lu5+²¦””%U™ŠgÇ[=ÍòÁa“¾nŽ|'%«°J¡bz0Ã’¨¡1‰ ‚ ’@£Ó“¦â›’…$‚RL´uE$ùT÷$OkÑìaö#^[¯­*Î`qø¾XSUÊ­.’ù©›Ý°zäsÙm¼œ[8Û’Q©P%§çç<‘ŒF¾nm}›³Y¬ŸÏÝ–W«©ôNv’@Ÿæ–"¾F«ËÈ/½›–§×¼\ìÚ·t»Ÿ^ô8Ïø÷q|÷ÍN~R1¿àIa•ÂhòœR°X¤‡“m+f|'·¨üzr¦Z«cz9ÃëA‚ 4D£A &=‹$ßéÒª~ª;©yÙ…e5ê$ £‘ «xÃÍÑ»¹Ý™ë)Jµ†Jܺ……ˆúê³*HZ·´ºP[Ýqb£­gÖ£ l½Ro$ô$WèàÁ®ÌªRkyÍ|8|á³N¡s]ý Ê+å–"­J™SP ‚-àqÚ·t{«sK’ î§f$>* Yl¯æv£û´ofkY^Q%ð»¶õ>u))þêCgé›üÊËJoiT,®àï½`@ô:ªÚh4Ö‹«£õÄÁºTVѱU •˜wìâ=€dú9ÿ_[Q–O£43ëŠÀf±ºxÖOö å‘V­æò]:è*ÜšÙt ðt°•l9| @çÖî}:ùiµÚ݇NÛ9»QU€ú£aÓU×m"O,»·—=8Ç‚®:ÿ‘QYÊelGžHRc˜ÕƒËa{¸ØI-…3¾Z_Z©är¹jµJÏñE{kKWÇüÂ[©¤kÏ•{-­lÞnÕÂÉf}ì‘ó‰Én.Í¢Æìêýî#Nc%â~=}ô£¬B½Áèêhý뵇lÙµ­g‘L¾óø•²Êê7Üum#µ‚@rzÁÉK÷K+ž.¶aoµg±Èì'eîÍlÒóJ¶»,òCü=;·vò9)YÅÇ/Þ+’=N±µ ií×Â1=¯D$àz,kÒ€.¾nvF#*Õ±'¯ùµhf+ý°ïÜÅÛ©Ëf…·£ù•;)%rC#m[†WW]$å²kBbcMz‚$Ò³ò–¬Ýiî‘êÚN£ª6ô5º ÒHÒUœ¿•f#µòh6yP—äô‚·»´Ôh4ó¾Ù ÓÖŒ¨„™uEý˦,Š5ªÐÊAiã¦,L3F¡Qp]쥎Ï9½ÞPXZ¥Rk#ßò¸ <-§8%ëIEU5‹d5w°v±—l?ß)ÐÏÍÉÎÝQJòDvR N÷ëåÛ+‡b%+ëI¹½•»£•VS3iD„¥ˆïê ¹yÿ±‡“tTŸ¶I)ÙùOJÞpp·9{+ËhDrjfnA¡¯»ó[¡AUUUgSÃú¶·³þ=ÑÕÉÁÙÞ*#+»ºª¬w‡.C{ø_½ý 3¯pD¿®$aØ}*Q¥3—à ð ô¼xã^y¥¢­oûÜ‚b^.v¡×ï>Jz”ik-‘çW:J ’ðórc ,­$ÕÊj©ˆW(«àðøÏRá ÿuÕhg`Í\í $–Þ`GhïæeJ#¶iV&«IR³PAÄSg VoØwæÖHÀßËÉÓÅ6¿°då{*ÕO?S{H‚@n"Ì­«F[]u¥NYf` Ä|‹©©ÒkÕl.ÿY'`.ßË”Ë+[8J=›Ùv ôº’”~èÜ]#ÁjãåT)W<Î.›?a K€ÛÝÇ…Aè F#Áâò…,6WI@§Õ˜{ûÁãí•Xˆ}[8þõ"›Ësw±·‘Tʪ² åŽQ"Ukõ6KÌ#›Iù±àqVÞ¶¿vïÒÞÓÍ ÃjádCP©5\.W¥Ö:Z‹%²ºRG’¤HÀw²“VÉ•{Sؾ^îläÕjY¥ÂÚÊÂÙÑîIi¹FoLzœwæÚ}7{k{k‰¼JÁb‘½Î`п–Q' ÿ=ëŠ@£­+$@Ö¤'逳ìÔǧ>=’$ŒFÔ®"³ ÌßË @N~!8'wÓQ‚$@’”³0 µ@}ªÓ¨*³ï@Z{j‹Ó+*Ê ¨ªÊ—HÜÚ°XœgœØlöåäìßï{¹:Ž~»‹§“5¡Sˆ¬ìZµp$`Ò§ _(âq9Þ®Ž7SräJ•“Ek÷¼J£T"t²•†ìü¢nÍÍ‹UV«Œ,®`ëtúªjµ…@’$Áa¡K@‹®É2*«ä”5f4ŒF#Aˆ/´0Y¦FÀø\^uõùk·eåUee¥:BÈe³A `0’%IA°€'¥•;Ž]²’>îN¡í‚ÙlöÙ[Y‡Ïß:†©aï°XDQi¹$ëÂÀÀÀðŠª+’ ’$=wE¤±&LÏQ;{$IÊh$jUÑ©¥ë›| Kʤfö’ÚÚï?{Ç¿F4jA€¨£®Œ}uá#R&õ Û8)x"yÆ5´„<_Sn+´skÐ÷Åb݃¼Þp³Ë+’ ¸ÜfvÒiYU•Aþ-Å^a‰L$àè—UÈ]m¬-…—î¤z8Ûþ/¬FA™µ¥‡³ÍµÛR³ò½½jOÙÁ"éF$‹ªœÃ&m,¹l2-3ÏÖΆ:«¼¢²² …·»óÔÑýœì%b•Z—ž[ÒÑÏ•ÇåV©ôÖ±µ à "¶aP¯ŽUr;‰³ƒÍÉó×òŠeb©#u™™îÎÀÀð/wÖ eÁ­ÝZ{Ôú©R¨÷ž¹]K—€¤Ò×ü‹ZóJ5š†Ö:A’¤‘Ê ÃÍ{·ó"`üzíN#›oëàÔÚÃqLŸ¶;NÞ0³öhueš»ªk ºŠ<¾ÜÐ<@âàÀÒ±…Ñ µG±HÀ«Òʪ–l±u}e4i¹%–|¸Ú[³HòÚíO_,Whßpµ¿—šwølJÖ‹Ý¥íaºY‹yn§•”½Õ¹•›ƒDQ­Ú}äÌ‘_¯°x"­‘UTZ!WTë †Â²Ê ¹Âh4V*ÕE¥åZ­N«Õ—Ȫ*ªr¥:áfª˜ËêÖ±MâýÌœ‚’òJy•BµëÄÕw{ù;Û[åç?±“µ:½Þ`¸z?K£©îÜÚ½WÇV¥åò 7’å %WlM’¤No¼p'Mè[y¹eæßH~L Õé ÖÙIÄÞ.6páFòѳWÄR;±€ãçê¦Öh㎜9ræ*W,esyuâÝþêªÆ¹Çå°¹¤Ñh0Ôá5Šœ´äæÞ­iDÂ@˜\~R©tÁÔQæêŠ$‰wÕÁAP!òF£ÑäoäpXU 墕›ZÂÅÛã`B²²ôÙ)w]ß0)¦šP ª…½FNíÔ{PQY¥Iç«Ë¸òl™ Bç6$‹mú™”=jÓ\3‹«ËÙŽ$·pv£ÑXYúD¥¬2èµÉáòk›WV˜E’,‘ÄšÍåFe¥L%¯[ÛóbEU™Z)7èõ$‹ÍZ-¬Ø\^eée•LleÇbsÊ‹òD kû¢ìT›maã¨SUË+ŠR‘¥µ²J¦¬”$Éæò4Õ ØÊÏ×»Z.“WȺ¶k5¨wç݇ÏÄ_{$±sÒkÕòŠRJ ƒ‘d³ù"‰ÈRÊæÔ, «–WTÉŠô:-›Ë3è´$‹ciã ×i+KŸ ‡'°ÚëõÚª²"½NËb±ø"‰@,asù4Ÿ^Y”•å-Ü]L»Z夫”UuÒÄ;gw§³,ƒÖÅʼn:¤Q)Ÿd¥Ö/ÖÑÍ›ËVUÉ Kd½Þ­y3G*ÎËT)«š{·1%ÎKKæðöÍ=ddd²–”ºRT–eÝ»Zc]™f· :®²P£ßÞ‹dsÌÍ:ƒ¥[¡¢BÂ'9Ш+žì=thŠ¥vBK©)|ƒ Y$‹eíèF$Éb±ØlOleK²Xl6—Åáê-uI @€Åâ$)²²Il¨%Ív.ž$‹M²X6ÍܨҸ\>OdA²Ø,[le'´i„FA°Zz8µõjg0è-EüÛ_º™Ìå[R{,²8\ƒÁ@ÿƒ XÔÄ€/¶dqyÔ¢£Ñ‚`‘,OÀáòM+«I‹C8\¾Iï“l6ãd``x¨Ù¤¢fHtpõ|®-FÖÙ¢‚'¹½ølÓ¨¿«…½K‹:É\¼[×ÊCæn¼šÈÀ§ö›KX:±X\6_LµÜ}F®°PK”Tiõ,[L<ˤ ¹<€WçG–Plþ•Ë{^H²XnÝô<ó•Ètb–ÈÂô›I‘²À®S]RzQFFºA£®V©r ˪´¤H,d±Ù$IR[?ëZ±ìú¿šÌ¯§¿°9LÇf``xÍàpùEÅ%Í]œ_˜²´´Œ`±I[«UWÉ––ÏO¯ÓédålÏÈ6—ººº¼°Š²2™‘`Ë´€úë®Xl’ei÷ õðÄXÀ«ÛÛÛ·lÙò…YT*Õ•+W\]]=<<þHÕ …âúõëÔçÎ;óùµ^¥-“Éþ Tëpýúuó•$õklL'ÿ㤤¤ˆD¢K—.¹¸¸xyyݼyS£ÑtîÜÙ¼“›.‡y— J¥/Wc#3&%%Éd²nݺ5Rª¨„á/Åü:>çî8wî\#oä:°Z´êèâé'WVwôkîhc©V«L7a„-[¶ˆÅât™L&“ÉÆŽìííýr§§R©:vìx÷î]ƒÁžž^PPеkWóq6''ÇÓÓó—_~iÛ¶mAAÁ[o½eggÜÈòçÌ™³páÂÙ³gS_§OŸþÍ7ßXYYq8??¿¿â‚Q5ÚØØPRòööþûÕÕ€~þùg—žž¾jÕ*‚ \\\8àìììääôre>|øÖ­[ÔImܸñûï¿7Iõ/%33sæÌ™×¯_///OLLܾ}»¿¿ÿ Ï"//¯gÏžb±¸{÷î¤öÅ‹¯_¿ÀÚµk EhhhqpÈ!>>>ÊÉŽ9r÷îÝB¡0==½ÁäìÙ³—/_îÝ»÷Ÿ%óC‡Mœ8±W¯^¡¡¡,ëÍ7ßœ0aÂ?þ8eÊ”7nDEE%''S—ãöíÛS¦Láóùééé;wîLKKëÖ­›é=/¤°°pîܹ_|ñEUUU#3NŸ>}ùòåÿ÷ÿטò8››Û©S'FüÕ˜zŽ››ÛsmÛVTT 4è…Þ½{·ZGTD:­º¼0· ¿J¥ÒÅ‹SŸ—,Y"—ËM‡4ÍŒ3¨ÏQQQ>>>M:É:˜J¦tïO?ýôé§ŸR_ÕjuEE…^¯‰‰pôèÑ>}ú´iÓ¦1%Oœ8ñòåËK–,™;wîÑ£G“’’æÌ™óøñãêêjß}÷]JJ €ž={>|ùòåUUU_|ñE||üÑ£GçÎKéÀûöíÛÔaŽú°qãÆ~ø!22rÙ²e#FŒHJJªSã˜1c–,Y`Ò¤IñññùùùíÛ·Ÿ8q"€/¾ø¢¤¤Àˆ#šúìܼysª ÷îÝ[³fÍ[o½UQQ¡Ñh¨s>|øÆ'MšÔ®]»F8eÊêC||ü‰'æÎ›ŸŸOµÀ—_~iccséҥݻw°°°ˆ‰‰9wî—˽|ùrFFF›6mÜÝÝ=J ý?‘üòË/›7o>|øýû÷CBBΟ?ß®]»:©ªªš3g•åÓO?5Ýè’%Kòóó4õ:.Y²ä§Ÿ~Ú¸qchhhŸ>} 333—-[F¥z£‰ÿû¿ÿ£õ(©N›6­}ûö666ñññ”pY©££#uá222Ö¬Y3kÖ¬:R°{÷îK—.Í;wÉ’%}ûö­®®®¨¨pãÆmÛ¶àñxË—/§2FEEmÛ¶ÍÉÉ)22òGIIIŸ~úiPPÐÂ… ?~œÇãÅÆÆÊårªÙsæÌÙ°aÃìÙ³‚Æî —““SXX¸víÚ5kÖÈåòœœœ5kÖ„……]¾|™ºlß¾=11€éî e¨ÛÊÔL·eŽ÷íÛwàÀ¦‘êèÑ£ñññZ´hÑHUÇð§Pçî0¿T7îÒ¥KXXØ Ëyɹ«ãÇ?~Üôõ½÷Þ»yófxxxuuõ¸qãÊËË_úÄnݺéèèøå—_Rî…ää丸¸òòò!C†h×®««k#K µ²²¢šzûöíÜÜܾ}ûÆÅÅ]½zuݺuK—.6lXÛ¶mçÎ{âĉS§NýüóÏæ5–——ÇÅÅ%''¿ôéœ?~ûöí£GŽ‹‹‹ŒŒ¬_cdddxx8ŸÏˆˆ ìÙ³ç¢E‹vïÞ=oÞ¼íÛ·‡‡‡;::FFFÞºuët—'OžÄÅÅ¥¥¥:ujýúõ›6m¢j49ÙÉ¥K—f̘1vìØiÓ¦1¢   <<<##côèÑ<øè£¬¬¬ÂÃÃ8ðé§Ÿ>|øð£>òôô|çwbbbÃÃÃ/]ºÑø»té2yò䯾úªwïÞ-Z´8sæLXXX}áŒ7îþýûááá2™lôèÑ&ÇÔâŋ׮]îîî>cÆŒK—.5©“[YYQöM=>Þt322âââ-Z4sæÌ¸¸8ó»¦R_ª\°`Appð¸qãââânß¾}áÂ…¸¸¸ŒŒŒˆˆ>Ÿ?mÚ´´´´¸¸¸qãÆ/]ºtݺu¬´ÿþÆ «ÿûæÍ›sssoß¾MÝVVVVcÇŽmݺutt´T*íÝ»÷òå˧NzæÌ™Æ;U*Õ´iÓ¼¼¼ÆŽëèèAõUªçlß¾}Þ¼y»wï^´hQÏž=Mw•·¤¤$..îáÇT9qqq‰‰‰Ë—/_¹reXX˜ŸŸßÌ™3Ïž=K VgÏž9s¦ŸŸ_XXØÊ•+—/_Îh‘¿‡úwõûíÛ·MýsÁ‚ü3ÕU~~~HHHHHÈ/¿üRÿ¦b³ÙR©”Ç㥦¦6ukŒ#GŽP%0 ªª*77×ÕÕuãÆu÷”ûÎÉÉI"‘4¾pg积oqpp0¹rss«ªª$‰X,.***))9~üxIIÉ{ï½gJß«W¯!C†DEE5õ Q§³sçNF£ÑÛÛ»  àúõëçÏŸwww7ÕàñãÇAAANNN™™™îîî~~~2™ìÉ“'éééF*• …Bª©Mj@rr2Õ†7nìÚµ«ÎóûòåË©)+³‘dgg:tĈÓ§Op¹Ü?Ev?þø£¿¿ÿñãÇÓÒÒV®\i®½|óÍ7\.·ÿþ®®®\.·Î6TjµšÅb±ÙM~W–IP§N”¸ÿþ|àääT'fáYh4“HïM¢hÕªõT1xðàñãÇoÞ¼Ùtˆ ˆ—“íùóç¥Ri«V­X¬¿ï}g………‰‰‰mÛ¶Ý¿ÿàÁƒ=øô¥,‹jÌÉ“'gϞݩS§»wïÖ/Ä$F‡¿­å}ûöýðÛšËÓÓóâÅ‹?þøã‚ ®^½J=¢8qâÁƒÁÁÁ­Zµ2¥lä]ör׺eË––––W®\éß¿¿P(¼yófppð³®{bbbIII¿~ýÖ¯_?cÆŒ>ø Gvvv©(!!ÁÊÊJ«ÕΟ?ßÎÎ.##ãÊ•+8Žé]G™™™QQQõç´H’ôôôtqq¹té’Z­îÒ¥ ‡Ã™?þüùónjӡC‡Aƒ™|¶ýúõëׯߊ+Fåää´eËFµü¬Y³¦[·n ƒ¦~‘Éd¦{Тֻ›¤,þ´@v//¯ØØØððð€€€—ßë÷,+íСCMzLîÝ»÷¸qãd2™——WCëÖ­[²dI@@€µµ5åZMKKÓjµŸ}öÙ±cÇlmm ðg‰h×®]ÉÉÉëÖ­£fÅ^5+0sæÌ€€€:×øï'...:::::zäÈ‘g½7oÞ7nÜåË—QoºÀÝ»w—.]š=gΜ–-[ÆÆÆöìÙ³~!±±±Ÿþy@@€¥¥e㫞8qbqqñ±cǨ.·jÕª¿í¬GŽd f?~|lllpp°§çÓ÷‘SÓTãÇoÙ²eLLLll¬Ý¹sç¾øâ çååÕµk×cÇŽ•”””””,]ºôÊ•++V¬˜½`Ágggêe2YÛÊä·´··ß»woRRRqqñ€LwïÞ={ö¬%UF‹ü=˜ß]»v­cî;88|õÕWݺuëÓ§Ï ‹"zœÚ¹ÏÐ'Å¥Ó†ú¸<ËjÉÊÊÒëõ¦U,™™™¬­­ œ…B!5W yóæBa£ßGi0˜2R¾///™LVTTäææ–““# ù|~II‰»»;Ç«¬¬¤j‹Å——Z­ÎÌÌ´µµµ±±¡j”H$ŽŽŽ999”ö’J¥ööö(_¹­­-uŽîîîMº6•••¦E]yyyJ¥ÒèOÕ( ©é+ÊéáááQZZJ#%[ª©Ô u6i!‹)£ÉðU«Õ999ŽŽŽåååÔu4ÕØHc<++Ë|-%JDÔ¨Êáp***¨y…:בÅbý©RM¥>[ZZRË8êG¯×§¥¥ Î‘jª©F**‰’j“®&ÕsLç¨×ëM:À\ª‰$55Õ`0hÖ¬™¥¥eJJŠ©©Ç\8¦žSGªF£‘êc</((hÆŒT—£îÊKfÊØ¼ys—––fêä$''G­V›_GÓ\2Õ€/GSG€ôôt‹eZI™––FÍ;š¤* M§L9¦s`4‡ 2oÞ<ÓÊ*S_­ÓåJJJ¨e—|>¿ñk7©Ë …B¥Rùü»cóæÍ+V¬ ÖóQrƒ~‘Òj"[gW­¨Ì¼{¹±êŠáU`ÿþý³fÍŠ‰‰‘J¥óæÍûàƒþ³ÒÉd³fÍJLLlR8"ë@ttôŠ+nß¾ýœG‡:êŠÍHá_ĻᆱR©Îž= `Ö¬Yÿe] 99™ ˆÝ»w3ºê_G›6mFŽÙ$ÿ<£®þeŒ?~üøñŒ„††6fã†W!C†452€Ùâ–á_£®uÅÀÀÀÀÀÀ¨+F]100000¼*ÔŠ Ôëõ§Nb„ÂÀÀÀÀð£×ëÍ•ÔÓO*•zïÞ½¦í^Eëêôéxë—~Û,ßA\%²óuÕ€ÐÐÐ|ço$I>.¨¸qðrꊡJ¥òæÍ›Œ^'ø|~ûöí90üë`ÔÕóP«ÕZ­¶K—.Œ(^ÿª_F]ýËE%Iwg00üK9uêÔСCë¼€œQW ¯ÔÛ¤ÌÑjµùùùŒdþèHÊf;;;SŸ 4 #“?ˆ££c×Ò>O]­]»Öôî] ///''§„„„I“&ÙÙÙ15QQQ±qãÆÎ;wëÖ­þÑüü|êÅÞ£F:zô(%Õ~ýúùûûSM)gΜùàÁƒ£Gàp8Ó§OpæÌ™7npss5j€ØØXÓ3pà@??¿o¿ýÖÏÏoàÀ6nÜ(‰Æ÷œŒ¦¦~ûí·T9Æ óòòz¹Ó×jµ+W®ô÷÷ïׯŸyϡαNbS>üðC…BÛ»wïvíÚÕ/9--íàÁƒ&Mšdþžl‡3jÔ(óŒYYYûöíëׯßÝ»wÍÇßI“&ضm[·nÝ:wîlj*‡Ã¡„cÎôéÓ³²²¨ØÙÙMš4)!!áÊ•+¦Ëñš!—ËïÞ½ûÒ—žÂü%¹×®]óññadò¡ÞèØXuµfÍ;;»™3gš«»‹/ÆÄÄ 0€QWæp8__ße¢V«?úè#ááák×®=|øðÒ¥KOŸ>ýñÇoÞ¼™ÍfSò1b€ÜÜܨ¨(77·Ξ=[.—wïÞ}Ö¬YÇwqq™?¾^¯ Û±cGVVÖÒ¥KPÁœ111...A 0`ýúõvvv®®®u2ªÕêèè诿þúþýûŸ}öÙš5kŽ=zøð᯾úê§Ÿ~:{öì®]»^î²jµÚ˜˜˜ &ôë×ïÛo¿Ý¼y³ù9zzzšRΛ7ªÑ$·üüü˜˜KKËÕUjjjLLÌ”)Sx<^LLL§N(a²X¬:³²²bbbwíÚe—››óóÏ?¯[·Î××—jjDDõÞ¨¨¨>}úŒ;@iié´iÓììì¨Ë¥V«»wï~êÔ©”””×R] ^¹{èÐ!à]`?ðÀîýIÅŽº%ë´ª@k@<Â< þÔÞ¸”Ñ_û—€*ºÆ, ï¹Ù)Ôgp¨ZOš4^,Îmß¾½B¡0vvvþôÓ @oêþ¶šet®]T%°§‰'5¡ž“Œg'{$Ôým1àM^Ýë<¦ì®ÎDàg”zØtxv½«€@kºæì§/Ç àm@ðôÖÏÏ/,,ŒzåºÑhl‚3ÐÖÖvðàÁÔç=z´oßÞ´0ëÑ£G&L`±Xz½~ÿþýÍ›7½](#FŒ(**2 ‘‘‘cÆŒ)))8p uú7n´³³[²dÉĉ}}}ÇŽ›m0ÞÿýI“&………%$$XYY©ÕêG=þüeË–­Zµ À‘#GBBB†îáá‘——·wïÞòòrSi .ܼy3€›7o:::nß¾½uëÖÔ W¯^Ý¡CWWWs©PÛ·ooii ÀÅÅÅÔ!U*ÕܹsW¬XѾ}{OOÏ©S§Ž5jðàÁ»ví …¦d&RRR L½mÚ´iÓ¦Mqq1OOO*}VVVbbbdddÿþýY,VDDÄ­[·¦L™âè蘒’ò÷ð{÷îíß¿¸¼,@avœŠÎ˜l ¿~¬7KðQí¯&¥ÀA@ýìÊ©Âã1 Š€€P €(† @ ¤ àWkz{_÷ÌTί@%±8ÔñÚ™Ÿ ü”4tè P€¡¡N66‚Ž;ÖRA••û÷ŸZP¬Àúˆ›YÔ­Zbvf‡Œõ~dѲêdfêJoÖlÈë ÷€5pŽ>îH¢ÝQ(ù@.ò+P™^»Šc5ç›`„ÔH_}TÀêP÷ƒñY1;ç€KtóšÕ¾ÊN”ó£­ÌrÌ.Ù­[·¾}ûjµZ++«&XW ERRu?§¦¦:99™ÔU§N†¾yóæ°°°Î;çå彯7ó¼yó”JåÅ‹wîÜ9uêT—ˆˆ??¿Ã‡ûí·‘‘‘›6mzôèQIIÉ|pêÔ©«W¯æää|ùå—¾¾¾»vírvv4hÐÈ‘#ãââê”,‹+**FŽ™““³jÕ*ooïÆxɽ½½§NZUUÕµk×E‹Q×uذa …¢IÛh¹¹¹©TªU«VíÝ»÷ðáÃõßBýûï¿O:uõêÕ&Lpvv?~üÛo¿]TTtïÞ=ggçäääÊÊJ’$ÍÏ€N§Û±cÇÊ•+wìØan3}ùå—¿þú+õ!::úÑ£Gl6{Ó¦M}úôùøãÛµkçãããêêºsçÎØØØÈÈÈÓ§O×iOyy9Õ!I’lÕª•ƒƒCqq±R©Ôét¹¹¹R©T"‘Ðh4T2&‘~þùç±±±îîîÏÈáÇçÌ™³}ûöU«V]¼xñ¿äձУ€zÀa4øøx€U½vàšýÂÀQ °òK@(ëÕë´ŽÀ1 ÈLS€-08Hë*!T /j‰=Pj6^o½Ôc6`pK Ñe+à(@,À†.ÜØhÖ°÷k5×Ç&sM(ÁsË£Õ<8èC€u¸N‹}C½,?'êýx°¥ž.h‹ÓèKu­ùßc!,;ÀP)&KQ, ø=R‡g™”üzUÔ¸=P¸…ghÔdü½(±ˆY¤â˜ÿ3Îw0¡ö/ »™[3-xÔË»ð|æÐ÷üþ›››»nÝ:³fͪ4;;{ß¾}¯·¢¢ˆ‰‰9vìØ¾}ûëš9sæÌ™3³²²¨¯ÁÁÁl6{èС ,ذaCË–-ë›,æÄÇ×8:"""&NœxñâÅ6†ªÀÉ“'úwï>|øpê¿¿zzºB¡h¼OoýúõÛ·o_±bEHHȳÒ$&&òxpp˜L6+98DÞ€è¤Àà®Y² @VÛÆ¢2R®«C€hœ|L@¤Óç(‚€Û€|ofý\6kªœVuupìÍ4å?Š;Иþ%2ûA.”˜<ñ­€*àÿÎ2ð.Žú7¹¢9C‘t^&ïàêÊ××wÆ Ï:ªR© ‡Îf¿æ†{öìY°`AdddEEÅóSNžÀ*@3@g¦«¨ßn)´u¢8õæILç$`m¦,™%;UoŽäP œ£›Jz@ ܺ׀S@o@ ¬Þ4«Â‚þÚÈx†ºâ\àXð  äÀÞw±q!*,ÜL@†]ƒ[)BSq§9vwlZu+ÞÄÖíøxt“3þuêêùøøøDEE}ûí·IIIÿûßÿ^ã[™ 狊ŠÚ¹sç‘#Gj9A6l8{öltt4õuõêÕ/^ܺu+‡ÃY½zuzzúóÕÕ÷ßß½{÷&©«3gÎìܹ³A{—²½ê¼=‹¸¸8[[Ûçë*½{÷ž0aÂøñãU*ÕÀûõëgkk7|øðj͸nß¾=::šÅb™ëª¢¢¢iÓ¦ :ôù§¹hÑ¢{÷îµnÝú믿Öh4?þøãÊ•+_x 'NŒˆˆÈÉÉ9pà@cNyùòåTEƒTVV®Y³†Íf÷îÝ{ìØ±Ó¦MûÏxSiÿÝ€ hdàÐ63;(œÇ€ 8˜ýN™,r³Ï¦·€p\`-°øHF`Ú–úÑ,ûXÀܵ~h´h ¸ ·Ì|ŒQÀ-Ú025UD×Ë€;p6³Lþƒî0¹©³€\À¦¡ºR€5´JÛDý¤ÃR!¨g_ ð^ã®Q$@Åv¬ë1ûþsBp›jR$ ð.eYQôˆßŸ€#èŸôvû±ÖãR±T=‰}í6t¿ÑEW¦ñäCZ\ͱM¾K÷³ô^ä¾€Z‹Qt²Y@KêÖ§»P±Ù9Ž¥ÅJÇk(€‡fÏ%/¥®,,,D"‘é«¥¥¥P(äñx‰„Åb9räƒ> )--¥¢´_c¾ûî»RÏò3fÌØ¶m[xxxHHõ<.$ ŸÏ?~üáÇûöí«T*?û쳞={ ê€-[¶ôíÛ7$$D.—ÇÄÄøûû>|xܸq!!!eeeGŽñöö^¹råŠ+8 ÓévïÞ- “’’f̘Áf³{õê5{ölƒÁššÚ»woµZùÎ;ïH$B¡@`` ½½½H$>|ø 3nÚ´‰ Ç Nsÿþýuö8îÔ©Ó‚ V¬X±qãF£ÑH…T8tèÐèÑ£M!é`ß¾}Ÿ|òIëÖ­oݺe*sÓ¦M–––×®]£›X,®y´æó% I’þþþ111ëׯÿæ›o† 6|øðøøx™L¶oß¾:«.$ÉÅ‹©’ù|þ™3g(@óæÍ•J¥i’L$¥§§›°k×.‹%‘Hx<å­5]A˜uvvÞ°aCtt45ضm[ó°ûÿz Z€ø€- "€}€ ð€ÚLýœ €x‰ÀQ ¨¢ãø@gN¿p <¡£~´µÓl@­g•”gØY/†Â%p¸Èì6ÓgYtÞ£ô‡Bº pè ´ú=#ºä©W‚VHB Æ9oÄ#ê8üm}i.š9'=Aa¡À„íø ÿ[ŒßMÓiç;”ƒœ®W´®éðp#IkÃÛñïXQe6;Bÿ&¾ù rNv…AT[mh€bú³_­æl…žEx©HŽ=´3KŽM×kÒñ*3ý×î9>ôÜUy# '¢×È©û }R\êÊ.=ˆÙâ¶ŽkèáÇ={ödvµø§ æç6oÞlšŸûG ;þük0M{üøñ#F˜ïjAuò .,Y²ࣀ# ”B`FÔM~(»y«YÈ€+à. Ò€^À6 ? ~&Û^Ô´Þ@P¼¬Œ Úbs²Ž€/pȪ­Ì&—`_EÂG@ ”ù€Ð ø.v›Y瀮ÀNóü«W¯¶±±1—êáÇ۵kצM3g©ÉzƒÔÕ’z­j0ÔÂÄ ÃobÓ^Ì™Ma´G”b­®FÓâàl& p&ܪ ]®³-tXHÇ à냸4YÍq§%ð|ÿ0ãYí áN~ðF‚Ü5D£2èï¡}³YÀ@ 0—>ºå7WWWLevëfcgiiéææf4T¬=x¹ZQ™y÷2³«ÃSt:ÝεnE''§º ÿÎ;׫W/©TúÔ~ãÆìììÿFб€ÀÊ%ð-0蜢î½@  \ø@6p0BŠ€ãô×úºÊžÎøÔÉM[0wèŒX` n@ (¼N@1àA;÷€XÚ?æ<¡Í,"À•:XŽÀ#x8øÐi@òGÀθ °¥W½‘YÆç£ÎÓŸÛ¢g§ìR3·×½~çцÀ¼iØÔ•v¸™ )}fÝé¶Í%~Åš-Ä10@ª¦ÂÍgO­ü:Â°Š‹IYžçPGÕ`•Ñ%[ae)Q®A5#ôئÿècøv|_¿¾\ºU:³È@ÑK÷NF]1Ô¢ÎJòú ËÿfZµjeZðûOa4'NœÈápþ3½À4X¿ÜÄ€°¥Í) €wè¥T@(0‚¶ºhŸS]œ[ú©ÿ ‘NÃz§v€/à‰Yö}€-`QãH€L “¶ŠˆÚ57Ì Õ!°§GO 3­®L%@|CË™ (ò€’Ú6ås!SWr³I8¯çŽæÃ ôLÁÚÝ81ŸÌ‚¶ŒåG홼† 2nœÿ:È%t‡Ø2Ô<*æs Ù9kKF:ÿ6@9n–a:ýˆ1ƒ„@>Rhu¥ÓAŽõcôöâS`Y*SèV5hA2êê/àÑ£GÉÉÉÿ‘“5í{fîŽ{štåÊ•¼ ÿ¸(þ8æ«¶_ÄH ¨âÒ,&0 Èë€ÎÀ%@jæìí}ºS§f³•ÂÉô:'zLÏ*ÐËä¹¢Ç}' Hl΀ $@_Úý("EÏ8—w£ œ ÌvÊÐÒz«¾Ù4Ø3nα†Öý•Høy.{â£ù¸ÕÚ¦ŒÞAÙøa'á«ÉÏ˨¾‘ÿÉI…¿øf£Æ ¨™˜i¾=ÅŸ£®^ìsuue^²ÌðÚðŒÝWùÀGÀf®¤#€šÞ]‚‚ô"§o5ð ä] `3½&7xBÏñP ³Å¿ÕÀpz¡±iwŒb T`ô(à P ‡.À/AǧÒøzÀ,Œ.šíõ0ø8”½€Ç´ÿM- ž:Ý lDÀO€T ÐfÑ"G60¡Î<–¹cÐV´lŸ˜)òŸ ÕxãÓåÕU@9=2;Ò ¤@ ì‹A¡#…Bé È9PJ§7GD¯àÕ,ôn•…øUØŠƒ VR1BoI5TWg£'°]ôvÆ÷ûÔÁ)î!SØ%5ƒ!Hj…xÒkÉõ<´Â  Äj Ô*Ú¦$ n¨rzºy‡äÑ¡‰Œºj:Ož<ùí·ß90¼6‚Î;×ü~ÜÌÔ•Šû,èÑ6p®’§¦-!Ê4‘3À7ô¬€Íõê*2Ûc}½!l`è5 ÝT ð¨måjtÀ à^@=¨ uX,ÝÔ À è¤O€¾@í't”@+ °›¹±µ…³ó9#ð€¶5Ô´~ ÙXÀˆLÍÓˆ»ô‡™ÀZÀ-¸ ÆT -0 åÀ¼]á‰@ýù:dbÎIl ÅlÊ[;‰ÒåÕø ŸPC™Q¯“œ«”câHìý!cÉï®+¶pzx‘á© ×t)iCùæ·˜˜Œ ± c¥6à@K ˜Y¯CÚ—0Ðþ^F]5—>}úÔíÿ‘ôôtooo¹¼þjßKÀj Ù/í»€p¤Õ• px ¸kf.˜cÜn.fêªIt.Ö€ˆÖ7@&­ý!ph <ªg€d\àM ØÌÌ|]ÌÔ € ÀH§õ“Çè£èÝoëH)¶žpþâ·„ptøøg€Àœ—*¡çC¼ùÂ!ç5x¼bâÏüío=3ûè÷õ^•ãOU"˸(xQ”Ä©VøxÖìŶýùA挺j”? dgx=¸y󦇇dzÿböY k=>ã@ T:`ðsýñ¸47‹R ™-Üü €¸[¯í£6´üè A§èèj`°ÐmºÞDPEO¹iiõ&€8GJ ¡Êõ‚X@ºYƒ¹5ðsmáüÅD/ÅK¤ÒÆ6•îÐ%k{>KW•OÙk$Å_­Æ¼®ÏÔ˜in–{ßx²~‘²çUã°­Ps_Péá@Ts1ëþï]F]100üEŒN›Í1Ü7;Ô¸M/¦¶´¸ÚP ù”š­ˆzÈ€M@P È€€8 ”V-æ¤ÑÛUP;)ØÒQæ&%‘J; pó@u:.e€Èd´e–EïüÄÎÐsH•Ï,6D 1ÓX›€ò†V4×9åû/¦àMïË©ïÁ3ÀNSè_Ô@î©;~³Þ¯·èg+¾6€Ú[ÇÙPÕ@ë<›¡©®KÆ£ÈBVRÍL|°D9€’ðkùÈboë¡~³Œ\|•ýù"ÞrQ  -Ëà@Yþƒ»Ú÷Fé­Ä÷0 €ìE «õtái \¬ÃGcÍÌn“6Ò/çz& 7@Ø LÉçÈ[¯×ïÛ·ÏÇÇ'$$ÄÕÕõáÇV­ZåààðàÁÓÍY³fõîÝ»±ú¾{÷îÝ»ÿoeƒÁpøða‡%K–TWW׎B¡HKK;v¬ƒƒCƒøá‡¼¼¼V­Z…„„´jÕjåÊ•ŒÑÆð*q€ÖUAÀ›øˆ>tÒl»Û®@k €ÞJG L怪€B@| Ð` ­{Ì~@p ^¨·ðiÌž+@Ž6ÔÔèN5†O‡zoTÀI`4àWŽ'€„Zºm€˜H@>í!T¥€A+?Ó™Õ@ u½­•†.À@ÀÀ‘>džÍ@dÙ@.àZçÏeF”ëÇ Œ$üÎøF  õG @[m‰§ Ô-ÙÖ>•HûsOr>-.²ƒ/°¤þX®B]/yRéŒB‰\´•úúçØ½ÕøÞIº…FÝâ¾zÒÝŠO%Å”&…k“ÞB‡tƒO¡Ê籞WÑïã»öPÃÚ  -b>ÄX˜J6ûcã’¶Åòýfv¸|©¨ IDAT‘©‘&û¬œ–ù_Eí7×4Úº:xðà¼yó¾øâ‹±cÇ.Z´hèС;vì0 Æh49rÄÙÙ¹]»vǧ4PvvöíÛ·ðx¼¾}û¸sçµU¹££cÇŽoܸQVVàÆ ¾‹ïUF¥RMŸ>½_¿~ gˆ‡>V¨à–Š¥§;”À®VÚcÈßÛÕ²ÿŽú£Ç#Õ¢8ñÂid¥ø™-1O$P±á^‚LÛ?K0ÏSWŸþyË–-©·¬.X°`ãÆ«V­¢†×­[·Æ+W®,[¶ì»ï¾;þüõë×gÏž­ÑhÚ·o¿uëÖE‹yyy}úé§þþþ"‘è×_]¾|yyy¹Z­——÷¯SW[¶lñôôܱcÇœ9söîÝÛ¾}û;v8yòd~~þ”)SÚ¶m»cÇŽˆˆˆ:{­.Z´hõêÕ}úôý–¬¬¬3gμýöÛL|<ëÊÅF¤ùpdtW¹ÙZ+K:€ð<J¯ç= œzçg ¸FoÇ÷ÀÎÐÚæI8ÖX‡OLËLÓ€7€À% I¯M%€b P…´:´pXµ—¾¬gð )PHWú4«ëí[hee¤--¯z nÑ›Ä×[¼uxû: Â/ú”M.5JùS%ð&Qó ½ýb„ç!é&æ~…”.äàgC@/RáÓ•Ö;¼è‰¬ÜfjßÌÜu1Mk·¾cr!ï "«ph1ì½Ö„B$qL€t`X?¨Àhñt›ü˜w a¡kjÙ÷»\-kj´ºaÿœ E’z•àÍ}Øì é+ÿeêê9xxxôèÑcëÖ­—/×ìÍœŸŸòäIê=å[·nݳgÏÛo¿}çÎeË–µlÙ288ØÎή[·nß|ó €Aƒýënß-[¶˜^"µgÏž/¿üR(ž>}zΜ9ÏÚ~ÕªU\ËcPYYù¿ÿýO,ÇÄÄ0êŠáU%È|Ñ‹á©!Ûd!É‘ˆÛ:Ú´òZ‡éCÕ@žÙë¡€3P¼ùT |]…Y§jÖç°‚€û@Œ²6@ rêy(àdE@”ѯÿè8{[ h¤“€$ZC›¿ê~?àô£™”Rt õ¦Üž¥®"hY_]%4 ðèÑ£€€€ÔÔT™L¦Ñh®^½:nܸ>ø`Ô¨Q ÅK¨_Ö®]kooßµk×»wïZ­V­V÷ìÙÓÐÐpÍš5¯¯ X üå¸û2¹úî+CsÈ„°J²¥;VƒZp\*~ÕÀ‚4/«Gœžƒ!š€îp¥˜åOPÀȇ¡ÃEAxI•¿*¸¦ € Œ‡½ … H…J’¾í …"ˆ…¦Pƒ¥žØ£~ÅX ±Ðà Ø€5˜ADCõIÊÿ(Üó¤Ê]¬rIy žL­úÛL,[­¤TóöIæ1¢|WW—ȾvÁ@wvhq' ×6i=¯QŽQݯý®>IiñØccëâÐfÙ^ñ!aC…¶Ö“-®{Y}W_ï¡è†\IÏPre´ù–°ŽÈ`òl´¯ÈÐIŒ]PåÏ™+¼¼¼gÏž9;;?~üØÀÀ Tô/""⥢àãÇ9räýû÷MLLJ•ËU*ÕÇœJ²S²²²T*•ƒƒÃ?å¿;hРÔÔÔRBîîÝ»{yy#GŽœ4é•tņ††›6mÚ´i“(¶»víÚÅ‹›˜˜DDDT ‡ø{£|jœS9ön’Œ“ÈÕ$NðdH–,Z¢–øÔ ‚C,ƒÇ°Ñk Ūç†K £e؃N`Ñ_³MMøÆ6ƒ„éMž)  Àl ì 2J(Æ €,HcØYn0H¢ÍéÛ_ 2#)ë$ªTª ÀÛÒ. {ðùÙÑÕRòÉÊË$– ƒBéX)yœÉôGØ`¹Ï*×%jJx(t’K«œ¢5ó>UL™¬{z¸$ç‹Qkfloês0AU]vˆq#êÈ$¡Vl‹uŽïç¬} yÅÅFu·4 ÿðlÔàKšÐ¦5¨]ó‡/"'Œ Z¡È5µ™ÔY–bO¼ Àc/P²È‹…”2ßÓœê/(ÕÌšJ¶ùKž™ÕJ6™sלë•ôèŒÕ?ûàŃE©Þʯ0W{öì¬Í¨Õäø0~3+ÜÌ2Ìȵ2±9H‡/½špõæé‰Mµò9Våáçõb>鈴,¼¾úkyÜ{²ˆZòceiRÒÄÌ·4 æÉeôߦÞ8š—3g"yW^Ö¾Ð,ôD~+ ,úÕæÊÂÂbÕªUHMM:tèÈ‘#V­Z}òÉ' ؽ{÷’%K:wî,JNT«VmùòågÏžMMM:uª8L/]ºôþýû‚ ,^¼¸k×®Àœ9s¬­­=<<ÄÔÁ  ЪU«ÒŸC† éСƒø=55SH€wÞy§~ýú/ìîêêúÉ'Ÿ4kÖÌÑѱC‡â.€Z­®+ðwÂû°©ìX€!œ…¶pL$ÛÓQ*+>-9d©Pzå´æpŒÀ_*výRyž&½qH‰æ†PWtÜz>9t¿2™¶Rݱ ˜Am‡¶’­ª!’ÚÓE˜7` œ”˜ÔÓdœ‡Æ¡²(“1" }EKxµ¬¾­Œ% $@"$¾Ú\ýɨ”OÐ^¬ u+ñ~߃ p`O:¾°md Ƭ$¸%c¶²ìÓ—·ç¿²™•:Çæ‹ýÆ53Ý_0È1ñ<#³¡¡®íyí¤U²\ Å¢)%–cÖ|íôÏuæö|øëg ,fL«?ûŠaîÊÕÕuìØ±úK5j$&¾°¨[·nݺuõ—´k×®]»v/lV~Ç¿?D[[Š·ß~ûU[vîܹ¼%vrr¯º¼%«@þN¸]nI†$ô5¡:˜HKï—eÁ@Š’åK!A$3c $su¥ÄC( 'ƒ’¥Ùø¯  ùpû¶ÇüùÞpoÝ:F:] :„ë‘Ø¦èUêdÂx÷ :4Ó´l–ª¾ÊSC©àG¸m%º©Raûh‰†µ1Ü€]zÁ±z9&ÿOؽ«B%ÂàsXVŽ€,+|ÅFŒ_ÃÇA(_ý’Üz}™RµoÅ5_—ÍA÷{~«âV]Óë¸Å©w—ï}GñU  ør¤ðÞ6tqx(ê$&–«YêÀG?r§3D‰éïeµØ°aChhè‘#G*þè¨À??Ÿð JH#úÙ°¥Y¶Æ”ŸúJê½ ± ¦ l8'‰tÜC8 =zVÚ·G£¹fbbVX¸°E‹U?HÉܑҖ*y{ È…0€à ·á¶t2ñ df ápr¡3ì€cz€-¡XŠË=-{D¤…¿ˆ%f[ýLƒ$ÉË”0S¼£`(ô/bUäsþÙ±ÆVgªcÿ*œ³hÛ…ôå˜Áø÷Û/DÓ0[ ëŸ{OË3¡ùb]J-ÆD²À³•%þ¡eQŽyAàZ_ënÉ¥)¾ÖnÓ~eP4kýÖêE.6'ý…¢¢¯|Û7h¯¸fõ=‘Ñ{¶p >¹ra“ O’÷”Öã¹¾¹Ž©½•Åme8:"5÷ N" ýº½‰Ù|)b%Ÿ˜#Éžý æjĈ#FŒøwÿƒóòòÒÓÓ+F² ü ðKñçþ/Sþµ¤ÏkÆÐ ¾‘¦Rl¡’D»n ÷ ¡\;¥ƒÑw`™ÀMˆg` [ad‚l„ŽúÁº˜vî,ž=ûجYrÉ&‰ÅÒÀl@)ùºB PÂ[02àÁ$˜ÐîC$COh7`&,kp‡'` 1p>…*Ð*•åóµGHx ±«Bž'’ µ‘›? pÍs!.ÈpIbý*gã?“¢TÉdX`”\’ž ÇX†06PeUKï;™ÔªŒ‰dÅm0»s%/ÒÉ uùZªŸ;ÕŒ[Ë3Õ{>«=`®óñz¦Ò•*4Èâí¾¬šûE—ÙßXЉE ­¦pp-À¼Ö²,SéiÛUðÓ+ä³”zà¹ûWöa3ÿ³ÌÕ999¥9¨À?nnnrùKÓŽ«AØ–PYr,Ä ˜#Ô€KÖ`'M™Ac°sH5ØCc¨®GÁ'¦§‹¦Îò`L‡DH…jðŒ+2ÆéX1ðjë×{EGãçG­Z¥Gt‡P ¼@¡§²Ä€Vrž  )¨ nPIOÕÞ $ºÛÙð>…ŽÞ•á2S¨!™+±7šC| ¨óòèÛŸ×$VÌÇ<ž·GQ¤¤*^V(ôЕ÷Gs«:cϰ"ã×ÇyU/w ¶/2~ŒËáª/®þ¤+³¶Ó÷ß4˜ñ6ÁHÃ!¬Û¥›¿V>ýS %{<2°±?—Aù—ÿõHNN622ú\¬B¡ð÷÷¯¸éÿUK€·ÊNG‰Q,}™]xC6Ô‘Êxg0ñÅÀ}(O€ºp_êHx IÐCoþ쥨 h¤ô÷—"fIßIiŠÏ`$Ãzð•k3Áóž`›Ç覺§'±ƒµéÈêò¡ïsBGhÉE Ó«åžøtŸÎ›ñÁ,:&c´$çaî‡%€F†V .ÆñIÉZûhŠÔ@ÛsçÝöWt,˜·vMU£ŽÍ¾unÐXTtTPÓ`Á'ÂÄú÷Â[,ðÓŒ[‚±šÑ´[v Ó2îS3ðX7ž‘‡Y?€+R©x)r+ÌÕKKKOOÏÿÈÅÊd²ÒÇ üÇ Áà9’uAòKÄ‘7r ~‚tJç Y Öp ”ÐGrªÄD 7¨ pWª1Ú£w81xø6t&´“Âtâf¡ ˆÝ³sTÜ4Œª‘ÍžƒÐTòíöKGl á˲Ñ9+h7! ÂÁ†ÂE½S]^®:³~4«Ë•G§C}(–zÃTZ"Ú½ºK@¤ó.þYs•;¥ïó$JˆƒRvûñRs%·)ÒÜo0|6jó=Èk8Œ§eŠa¼xàh³øÀa]ýôqÁ|| c5Jc>ÒÔ‘Lš“ËÅ] ZÖˆE«|²Ã|¢ÃÔßâyÛô›êR»Æ7ü¡²\¢Ž”QYGk‡ì`àMÅΨ5š-~ •ï¬ÔžƒNÍ„yàp¼;+C%sµ£ì P…wõÇÁÄÄÄÖÖö¿0ˆ·iÓF§ÓUÜôÿ*Ì!\¡C1¼'%Pœ“¦Žò¥"¤£LââVƒ оb0ƒšRõŒFå˨*-P]G ´†«p‚á;¨ ž _%E9ðÀ%Ž‹@f²%}á6\s(„‡P®Â X“¥‘ýL…; ™r8 ]  äÂG HæÍ&B.ü@n'ˆOèߨµNŠ ÊA§G{Qâ%Oîχ}®fËûÊ{È3/1…ZxÓŒü 7óìŠ7Ÿ?˜R+{äI£¥'‹Dհߥ†&7•y‡k}ûñe‘B8S6k$ßT±i˜vÂj]ïòƒo’kÌ—m˜~‚Â<p¡ ÓgoJŒ ;{1gŸŽ«þéá_jµú¿p™x5ÚB0ÄC<¼ ¡° ªÂS)²'NÞˆ+{Ĺ¢7àkðk¨·!¿lªECp֣ȫ ‘ZÖ*°‘ÑV ŒÀÚA\- ²uüß¦ÍÆÀ˜Ýà[)|0|ƒá<+ à x@,Ð;º¨º$z~û œ .<€—á $I,·÷¤ ¡ZA0äèÕ;’zà×z±b /eµˆ—¸¬J-•`OÇL¼ 4L—w¼ã™T7M)r{¡õB¸M;åÕή½ºã›› ÚÐÉôd;̤\IV*ÿùá”)( ª¦Ó(0L,®2i†Ýö·óøÉâ´?`KºÙ@Ê(céí¼ù~TðÉaÑL÷é2”ÝKX àã6d)‰3 ^•#I,í1Ç—±W<–èB~¹:pà@zzºXí ìÛ·¯°°pðàÁúÛDDDœ8q¢[·nÕªU«ø¯ÿ!HOOßµ«dšzÈ!–––}R¿ úå(âChn €âa4 ÕÛà3¨w!´`ßC]¨yPOŠž5©ñzPšÂF0ùßÛ·ƒÏVËÈ^#ÅÖj ¸ î œæònU.:]D·CÜë F` ™w@ 1"ý-l†¦p§3o4\ÊV`îpêƒ à€tÄòxæC-¸®#ÜÆàú² ÀWެå–XB©Ï1¿ÜÉ›QÏ”^ÏX:UÕÒhÝëòñUz¡¡‚:1OÖ¬ÌmòÀyMO»‰ãÃkÿð?Õ• JµH\ÀW+«TÏ©¤ÌKŠØzœ¥ý-Àúrv‹“—©;éšÕiOÀƒ r(œ‚ñaþݤÍF”È«gØ“Æð|ÿÛŠåV²ì¸¾3KÏ‘XÚWÍ K¹Þø@ã—öÝ+å·oß¾tés*­M›6­X±â…mÂÂÂæÍ›'Ê6VàÁ˜1c~øá‡ï¾ûîgØ+P¿ÅpT’wõTZÞl@+ Ó ‚s ‚lèFz3Iù’ "Pí šƒwVÖ$¶ØË™!Ǿƒ•ðÔ„@0%UàƒbNä³»{:8 5¡+<ŽP hïAHp 2`ªd«KEÄjè€äƒ¨!E"àPAã—½ÔC(*ÇtWju~‰ïwÃÿÖDV}~de!Ê—×|ßHƒ KóÐZj»ì?ãD4¶9¯\g›Yö§v„OÁÄR)ŸÛU~Ï ¼Ò\‰ÆiâĉÀ²eËf̘±yóæ~ýú¹¸¸?~¼¢C*ð7@iþÿì‚¶yPΰÞ¨ ýᜃ@xþÐîILb¨§.Ãy>w.9'ïè%°_(Éý¡ì†Ëä½Ï¹D¸9Ry°¾…"¸ž ÁpnÁlð‘´¿—< ;¸Ðrà¤Ã=p€Á0[¶H„`)ÒøBlª&ÄA&(%ç²ÀUøŸ,t 3.IøK„#Á.Šc«0yÑLÚœð7 ws^Ý+' ìÑW ÿسüßuz…µ˜ÏÙæÏ®‡£ÔhîYìß@ƒ¸ßy¯ V¯^ˆŠŠâãã ÌÍÍG8bĈV­ZµjÕªTÉ)<<\”ÃxöìÙÝ»w“’’:uê4lذ ¼ñÆ-Z´ip+ð‹¨W¯Þ©S§ú÷ï·sçΊ©À_ C! „ë0 N€­ÄÈwƒÞ‘‡ì\È…l) #6ACpƒc° žÁ+ÜÔPú@$¤Á?†©°–BH0“á2„hz}ƒ7t„p@âθ!’À là 8A:DZÑԒϸ¯c%4KÐ ¬á)„C܉ }‡$ \úÃ>È„{0F/Ë\&垈…8èZ®îp†÷^ÖÃ_K¼·Û@$ïKƒQÒÚRŸi2Œ†7e6L·ÓfU–UÍÑÜÒ âú‘ì §ZZ¥µ¼$ciO*™ä§Ë-5é|g¾õÉ5ã³ £M¬3e2[Át¤”—_åÆ"U]‰@ÄB¯Á£dϺVu“3‡žß‹ 9|7NM2p”·á –¹ŠÅså';ËϾUL*Ö¹¬˜/ke8+Fh{W=;¹@·í\ÂþÎÌùäð…t¬C/SüÒþï hÛ¶mé÷V­ZU©RåÀ®®®GÍÍÍÕj_Ù® Z­öéÓ§GÍÊÊÅ¢*ðšèرãåË—[´h1pàÀŠÞ¨À_ l†¸À:ˆ†ãRB˜@#Àª‚IBS¥c‚<¡ºÂiˆƒ·ÁZB𜃹ÐZÁèµAZh Ca•Œý®Îýêy#'JÎØO¡ Œ„2ÈPÀxšÃh ËĹ™lãØ c>tµpæÁqkþ •lp …‹’äGèÀ¬@»À\ô˜ì¡Ò¯]` (;FkËŽÔrÑ—a(NÕ~°Y°•j}µrú|À¸3²€'2dâG\Sse×'½CUV…;MºPÃeú2uª€¡äƒ:ÐIWn¨LJm—>2y±LØoº®ÝBið9‚ A†èë¬òÔŸ|¦kyY–à‚ è}ß{ÝöËò¬tm®²«ßw¡õuv÷fÔBt IWéqÒ–ûü¦` ðÙgŸÅÄÄ,^¼øöíÛsæÌ),,œ5kÖÆÃÃÃ_'±;###<<üwÞㄨ@þöhóŠŸõË:!àJi¡8ŒþOî¯~„È€<øÖA(¤ƒ%¼ ’+¶‚$ÂuPC†"Ø-РÑýûÓ»·“£Ã(¨ÃA€(ÁIÙà"Œ2Ë‘¦M6€¬Ô;ó –X£ \-{É[$WR„èYJDì†`– RØA)¿îOÀ—ƒ~níôžngµ¿õb`lO“¨×,;ö{¿Ý£:º™Ÿ«óÍ~ãñqšQXÃhÚß{ÉZÍâÙºvç FÉnú¸&âšÈÈE„Õ¬rt»åÇ;,\ÂÌ©Hü\"»¥¥eÿþý/^yò9'J£F¦M›6þü 5Â×Ç Aƒš6m:zô芮¨Àÿ’ËþÌnp2õè_EsU(ñÉŠá¬>Pµ,¡{¤Á}ð„w`¯´£(œ(æ¿}ßB<ÔV0\Ç,)0_*íDïÙóø¼yþ‰)~pª@w­À@?É1Ô½¡4pR —$fŸèûÀü )œC0‡4èF/‹Ju€È€š` áð.J³b"Š!b¥Ô‚×Á É™³„‘äêqV•â ÓÃðA·>QÍ@˜?Ž0º'P’Ñ—eZêùåJáS,/Õ‹/É÷£ÙÞšß„íë³ –a¨eøu¯=ãïé,„½¥ÊšoÝÁÎÀ1'qd6Ñ£6®,…g¶ŽÇûsêµL¿[Ò¶ä9‘ôhÅzƒ.‡íß™ûì'–`ŒÕÌYȆ8Bµ¤°â8ÑÖÂÉhz_`–”÷/¾Ö¼@c‘R¶W“¹222jÞ¼¹¡¡aƒ lllÌÍÍW®\¹hÑ¢'N,\¸000pþüù†††r¹ü›o¾éÔ©ÓÉ“'é| IDATlmmׯ_?wîÜ .ÄÇÇ—Ê Wà8zôè]»v%&&~óÍ7R¿Ëþ¼-•@•JÁŠ!#Þ–¢0ü1”6ð…´å8Xžàg¤e`&0¶€¯…€ šÐ´à_Íõ­/¿¨Ñ(@¦TÖ‡90La‰ŽvpI ¦ÀV0„}pTFe|ȇ“ R’}̇ŸÀBÄ#œ†]° D… W°ƒî ƒB„½’Ôd?¸&Ð Ôð¢¡PO»ä5QJ¯Þ^ÊòH{ÙÀA“‚€:‘fãb#‚,QÖGý<Šh}ÆÏüpz‘{²åe!G()z1¦hTŸÖßîû¶OŸÞÕô o°í»nO™±u Z¨—RR]f¦¥„ÀÈçL>`¤E·€++yxŠj,õn¾èºä(ZŸóiµ*'ÆTG,J-߯`Dq@¼Néß:NdPwâ¹C©¬R­rWýxW@Ë–-““K^¸”JåàÁƒKK¯ââʤyÄÄĈ_V¯^ ôíÛ·oß¾ÿþ_‹N:EFFVôCþÐIU«¥¨ .e9ßÎJ_–`û ª‚ü7  ¼·!: Hch »öC t—äzßU2Y%|÷í·½ÓÓ*ÅDW™>m[ß~2b帪±“ábÁá"Žk¸$c½‚l¦´É`#Á(Ø c@K¡BÀ‚¤ÚRJµÿt¬lè ?€ XC°”én y‡âØ*ƒ\0ƒ þÛI#~óa[9j½7Æs<ˆÏë[ù&Õ¦Žzº`Sz·+îQº¼R¬yR¬t÷<“—^­Ç~nÍÎŽ‘«Va÷KGÎGµ˜¿âÒ):4.Ii)ƒ<§¼ðy_Öyg¾QŒäà’ÅîM˜äSjŽ‘äI¼ 6\bx«E*P×(!ƒÄ—ÛÀ Üc¸-ÕiÝ’Ø"®CehÏ €;0nI2¾¾ ªã“Ï-ðСJJh|ÁÃ% · ñ‡ÆYjL´\1ÆÔ µ3)µ‰(¢–é|Uƒ*ì2IÒb˜r5\ƒGà߇ð|!6ƒ?ˆu÷5à;)¸× @œ¶8H‰‚Ñ’• „¯²Y$I¿~Êêµa—‡™Š½/c!*0ázºâ_ù•g¼uÕa—ÈåˆM¸ƒM¸ã“a5úN±†“Ç»ªŒ„Ý]sä:v¾,SïcGV™p¼€&eóɾÁúAô?Hõ u.xw¹PÙGyÐYTµ’yz Ö‹SÁ÷ŽÖéÊLÖµ¦HY ü+ ÕjÝÝÝ+W®ü_¸X¥R©R©þŠAQ§û%YÛär¹R©üÛŸ¦1Ãu0AŠé½ŸItyÝ!Äê5 Gô¤­Ã!¸.©>3 t\ñLd(è©¡|&§· 3µLÖ2 ÞpË#Ì”FDå’W1ÆõËÃ6 Õ(“É—‘¾ H¹ÇO:ˈע€] Ö° A-8†`'e…‚bÉô®5|%…ïDß+:B‚Óe3Dºú#¯sÏÁ\*+ôø2Œ¥Š+µÔor½ö øq9?Ô"ÊêåžØ%ê?Ô 8¢ÙÝ00ê·œ¶¾%W)Ÿý®êê†ZÙæF)ÖÙÕ2ÕJ Ô…˜XǘÌéo>ù@TŸ£éƒç­=TdR(€¦X·Âžz©Ü/ ² @C‘™ º½¥èR`¸föéÜI¨©Bc%gtw—eV«ºäæ:Ï<ùVÙ¥BÈlc“4ÌŠ ¯ŒVþÚaŽeW…¹ú•xöì™~vþ¿ …¢]»vÁbbbBCC-,,þ#keeõOн|ÎB6(AY €ÏÅ€¨ ª‚7˜Â)0„ÊPdpºA0D) 48!íX àÔ„N[4øA¼ _ƒ‡Žýà•dlx"ÇÚ„bðªLv:ö ÜœyV¨|LÕàBv:ç2ÙÜ„iw1²çN$9NÔˆ&BÀfWGˆà+tˆ‡ISÊŠÀêÁIÈ„!eC…}áK°€c`"•ˆÝ‚g'ÑÕ¿jé5[µ¥ï“¤ïD,»bIGŠFó9™Ë!pZo—RIVl¬ÕZƘšÆãX“Õ¬¤ ÔÅ:ä4¿ÿض’2½*ÀÎzÑ+Wg·*iø”ªbdѳ-£÷¬°?çýAÝSÖhlSjkÕ)U‚K.=A9¦„ú°fÝnÑŠ]½¾§§hÏCi EdÕÑp4‚`]fŸbÒ9B•†›¦s;+³xiAI³ý¯Û@+Iz¦Â\ýJT©R¥cÇŽ?Cáñ¯A||¼««kaaá_s8ooï üäµ¢££kÕª•››û·?ÓR²p;0€,hõá(h öB3p…&P .B+0€0È7ð‚{ÙÐ,àKðƒïà#8îp À žÉ™$°KÎQ~J®šaïNÍœ¼‰õ$þ\H£ö]ªU'˘9Ö†bïJx4ÉæÔR`Ïà<ô“Së 4ÔgÐ,!là48ÃI¨iemÒO± ¨ ¬ƒVЪÃù?2Ëí¥ØÆ/ŠÄËîøWÇdY²ã «¬Ï4Ìj’f{XT1ÆòR½¼†¬¯ÔѧŒ÷3Zèy„éòšÏsþX »Ä–¬_2žo¥yw¯P5¦¼¹*»ý­ÃNO¬¼½“¾¹2L·¨¾¾“fÐ.™ÀšÙ™Moɇ^çPN´¤ÎjÄ0yù¹†…Š—¶™ùÆõ¼»vl쪿P0Tåö:Uy¨$3foÀ·?“bRa®*ðÿ‡ððð#GŽôíÛwúôéC† Ù¿EŸüó!JOµ—ÒŠàCºÄßš&Íʨa%ÄC{x á¸%™«s5À >ƒ÷á‘Ä7x*à JõŒ©–ÄâBF T®B¤… 2°%Íz%jÙ÷´¯ÃŠÌqM#7‹(s¢m×Õ<Ôávà !ð à-˜­`lƒfðÌ@w_qí¥” 1±í¾äZE½^×ÀvÙ •R²¥†åBɲ–iÐU}O»’ Ær¬8 K¥hŸ‰ @Xâ­ûd¡lذ¬B§‡ÔÑo¦hã´ŒY ãoZòÌJŽ«u‹'¬»4ïQÿ/¤ßB†OQl­Ÿ4}zÁ¹·Òï(wìd|´µÑ—ÍÝïÆ ApKëA@…Yv‰,é§ú &ÅÅgk¯nE†8Ô^B/¹c6%358(æ1&Ц”š++IÒEt!SÛãøs3`~~~"""ÜÝÝ—-[$''׬YsÞ¼yÀ°aêV­*n#¾\ÿ Óéâãã—/_îîî*.\³f»»»¿¿@@€Ø9¥Ø»w¯»»{Æ Æ———7f̘Æ7iÒäÝwßÍÉy.$SPP0gÎ??¿fÍšuéÒ%333++«gÏžM›6mذá”)Sòó_’•táÂww÷5kÖ¤§§7oÞ< À××wùòåÅÅÅ<—×É“'ÿ$É`•J¥R©êÖ­{ôèÑmÛ¶ý-çææ>Üßßßßßøðá¹¹¹Ó¦MŸ7___ww÷Ë—/?õËÌŒ÷ôô6l˜¸dàÀâÆÞÞÞîîîúåí©©©~~~õë×_·nJ¥ºy󦧧g@@@:u.\¸ ½{÷Û©[·®»»{ZZÚåË—ÝÝÝ}}}z÷îý¯x®7ê}·9ÄÁ0ƒJ` ùæRf]d‚9Œ‚$h¹xqqDDvXØü°°ÕÓ¦‰;€: ÃHOÀ>5ä¨9G !\vàf>2‚jU"߉¤"Ì3¨.G‡«1EáÔÎÁr ȺGo¬M)(F¦ ùI( Ñèø¢eœ„\è Àlð†Nð#Èa웄“DØQ©Tq×ÚA2L…Q Òãb/’ò×Zˆ…›pîÈi&~däA¤DE¯Ë"æw#Ò¡$â‡BŽRŽR†FÚ>R EGŠŽ!ÒB0MÒU~¬&/ ý:¦f¡BÈqMÈ¡0! ݽz¹…éªt,ÒÑf'~Šã ¦NKtôÚßVm¿ÆeáÇË5òªG©«E©«…éê\Ç÷:¾wŒkÄ»éb>_Ö=Û4+ç­áÅ ;’Z;QA&öqTŠÖuÈ/$¤¹8@*X¡2@¥%Ô”>†Šw•——W§NC‡JêbbbrrrŠŠŠÂÂÂ{ôè1þüÈÈÈØØØÆûí·ÿˆ¿£V«={ö,àéé™ššš——÷‚v×ë¡“&MŠÍÉÉg¶RSSŽ?¾_¿~ ¦¦<)g½zõ|||æÌ™Ó¥K—ßÖ¥¯ÂéÓ§srröïߟ——'Ý%K–ÙÙÙ‹-:þ¼•••J¥ vss;þü™3gÒÓÓK'áD–¤¤¤™3gFGGeggÿôÓOžžžcÇŽÍËË Y¿~ýŒ37nܽ{÷Ö­[ïÞ½{øðáÝ»wÏÌ|Îé ú‹ S§NMNNáúõëÖÖÖË—/ÿkòSþ|€ È¡œ”(É[A7(€Åàõ†ŽÐv‚Ÿ5jÒ™3›$^¸Vp_TŒ‡&`$ä7lxÆÅ.)ödõ0ª[1& # –èêò8 ë;ÔoÆÕLl*‘QhòK4®…ª6UˆË&ó)md>$Gc’M -Z³[AÇ|³HÍrð à‰¹i[!&¨ -á,§Âñ1 –$Ò0„"©òì0†–_ŽžêÆš¶L=É;9¼¦jPÙ¶5•¸U>¨8ˆ ‹1Ðq¥¦¸@Ùk¯jÉG ãÁ¦ÆÍc­­­KG'‡îëlp1,+C•0è;M÷sŠU£ &/*f”“×ðLfìú'ORZiïÃÎá@BÝþß‚7nÜ8uêT«V­>ÿüs`Ïž=7oÞ?~|PPPݺu;tèð7ÿ;nÙ²eÅŠÞÞÞíÛ·?~ü¸ŸŸßo[­¬¬öíÛ'sâ’›7oîÙ³§W¯^°µµ –.]|èС 6¼ñÆgΜ¹zõêûï¿ïëë[·nÝo¾ùÆÌ̬zõêÍ›7&Ož \¾|9 ظq£““SûöíE3ö3˜}úŒ9rÑ¢E#FŒpqqy¡ÁË—/8p`÷îÝ7oÞìÓ§Ï¢E‹~É9sæØ±câ;ܧŸ~Ú´iÓ°°°°°0ñTÿ-FË ¤Ì [h ÷@ÖÐŒ J”Á²A E"Cnß¾76T·nqæL2A8˜È©- °²·?=thÜ<øÑ™3&œnÄ©š‘`‡³ 9JÔîÄdc%C0¥ G9ºTì-I/@Y—5æupzFš •YæØæc¦!&Ÿ s´æ|˜Ï*µe¤éê„ÑÅ ã9bÏàŒ‡ öB?S;ð,‘g€|ÁP"Œo éð[äúdÔ–ó‘äj•Äâ^-Q¸´3¼wŒ­-t% aäÂ¥O±ôÅ\ùèaâEC³*&ÙÏåí;“yûu–w´'êò,×eýóîËúîáòå®_i¨VÓ¤©|íúÀÛ{Š@&æ ‚ŒKÒëÓéBÕdÒóåo}&€–û |øèÑ£{õêU­ZµÒU³gÏÎËË«_¿~aa¡­­­¥¥eQQ‘˜66wîÜÒÖÖ®]ûÅ_lذ¡C‡UªT9þü”)S²³_¢i½yóæÒÀWi\N¼k}ûöm×®Ýܹs?ûì³#Fü©"™ñññ AAAmÚ´ùè£~§¹:räÈŽ;ÞÿýRðÉ'Ÿ:thóæÍM›6Š‹‹—,YÒ¢E ñy³°°Ø°aë26oÞÜ£Gúõëâíðõõ-¯×{8gg»´ƒ;`%à2zôOM›³¶¦k×´m;'(É‘á§"à r +‘Y„q%2ò1½à½/O–Öå¡9yw°Ñ"—a G›ŠƒE…(ÌÐÈái!K AN˜ÀYŽvO×gXðT¢gš4ˆÔëa _Àˆ¼SØ.²°æÃ=9+ÿצc(o®êð!ùż^ÓŠŒT2ZЭÓ!>]Õ`†´ú#Ég5W2ÌŒ6½wÂDcrÕWÏ\9£²cÅaø^pŒ“­•h«EZìi©¹ÌŸ£ÉÏgÚLÀ„ÐÞ”hg½‰*1WGXvˆY=„­š*Œè/š 5ùÙ¸f2t';"yÁjÚDÐÔ˜5jf<ã(œØâ;MysUºˆ¬?Æ\¹ººŽ3pttLMMg‡ òÓO?>>>>>>¢o±dÉ’ˆˆˆ¿¹¹200]ÀüüüV­ZÿQ-;;;÷é#þ!1bĵk׆Þ¢E‰LgéªÙ³gŸ?ÞÄÄ$**ªC‡ööö³fÍ ëÑ£GçÎ%¤Å›6mZ²dÉ–-[ÄSmРÁîݻŰÕùóçõºsçN…BÑ¿Q÷¹ôÇŒóÃ?Œ3fçÎýúõ‡é¥K—êoö'¡M›6¿§Woݺ5qâÄ„„ S§N-[¶\´hÑüùóׯ_áÂ…Rƒ¤ÕjOŸ>=hÐ ÀØØ¸´‡Ë#;;ûÚµksæÌqvvlmm_µñСCEO7###66ö…µééé7nÜèÙ³§£££þ=Ý´iÓ‰'þEæªdÖ®@¶ÞP$i^„Á˜XúZ«e+L38uúôý3gÌ  ÄAœƒ$h,ÐóúÑ¡W>u®¹³k× ÒËÖ„ä„Z:ŠA¦cb5Ö#A…Òˆb'’L)¬N”#6¦téÈ#[ÒÑC‹¼ qWñ¨Ob4NÖ˜$a(ð¾—4ä:&À‘P ´4-ÀÂEwåc²íà0+™¹7…&ªŸAž©Gì»á¯îõíÍ|•a—Øò£Y¼£õ†zió×(R+Y­Ìº´JlêÏ´u,^Dû]d`îf"‰Œü Ò}ÜñuÞî&¼9Ž{Î?·éº]Œ©GŒDÉí“ÀÛ¡|Ö…ÏÂÙþŒ«Âèýó«ÍÌÌDkT {{û•+Wúûû:thëÖ­+V¬¸uëÖ?å/¨Óébcc­¬¬”Jezzzqqqjjª««ëïoùĉ7nìÙ³§þ{}AAANNNçÎ,X :=¯|§}ú ™>}úŽ;J#«)))jµÚËËK*åñãǦ¦¦Z­vÓ¦M›7oSí7lØPXX(—Ë}||BCCóóócbblll\]]+Uªô§ömVVVfff~~þïÑöóó;wîÜ„ ¾þúëãÇ›™™­X±"((HßV‰}ell,š Ñz=yòÄÚÚÚÁÁ¡|›111¥—_TTkooÿÒ-+UªäââbeeU:I™˜˜èììljj*>9666âTe:uFŒ±`ÁþØEiù*V` "‹]KIÞ†A4´P@ì77êÔɇ­Br20 ƒ;¼{3¦71Þ²;ÆÖtZ1oÞòÿc: ¼H7aíìBÈkÉ= ó&\·$»:Úq¤‡÷¢y€—!¦®Bu9©äl×᪠N @Ç@ø V‚†%ÁtmOäu„F较¥ºPru5äY“TŒ« U܃ dAay>ò׆bDò¶—Ö2šQ¢Ìa!IJŠO'l¬Å¸v <Å^{ÔUôܵZõ†X2Ì ’mFÏIøn‚ð‘Qn€ ¹L¤ºH·cúlì's¯cqÓµF±Žb„ øš% “1ujÙhM•Ä4Û¸c;×8`ûy§pA¼ûªRò-ì“á’ÊÆÕüïC´RÀ¦n13¶2fÓö³ýQ9[¥Õ»ÆÒÚ•\iaÚŸ5wÈåòÝ»w÷êÕkèС­[·¶··ÿñÇsrrÜÝÝkÔ¨ñ7ÿ 6kÖ¬gÏžlÙ²åš5kÒÒÒ²²²¦L™òû[vrròôô¼qã†\.·´´lÔ¨0eÊ”ààà .Ô«WïîÝ»Z´hQ£F ww÷àà`KKK'''///àÝwß&Mš¤Óénܸ!Ö$¹»»?|øðã?ž={v|||5ªV­*:1bR€Ï|ðàA@@Àˆ# EPPÐÁƒoß¾íããcoo¿lÙ²»wïN:õéÓ§­[·V(FÇÚØØÄÅÅÍž=;44´Aƒ¿¹™L¦P(üüüòòòD55AA8þ¼(­âåååáá1`Àooï™3gŠ{edd4iÒDœ»*ßæ€zõêUø½wï^ÇŽ-ZÔ¢E‹‡]3s3ÖÔPS©ñ¬ŒêÞ–äT&1Ëg8 ÈÒ°k˹\äèdÜ=M½b¶˜2³ˆ ÐZÒNÉôDB$Èy¢£9<†+L› ³áC‡)°Üá´€gÆV#|šC ›ÔÔƒZ  œ•Y¿ ):†ÿ,¡YS‰«0 f–Y#@ÐT¦Ö¡Ÿ#;Û•z·JÎÈ0.;|@2:¹ËÛ«Â7}Ê–~\k ÄÊ TÓDC·iv »tšÇÀYæ·=÷ß«a?Ήƶ ¦aÕ«c^òjéÎÖÉÇb«)}BbAà Jlm,/™e Q'‘a—ùîsj¥»NXU IDAT„±q ÿ˜`^æWeJ²œú8#H¼.ÿÇÞyÆEqµmü¿K•^ATDE; bAc öÞbŒAMÔØ0FóhŒØò[ì)j^[ÔhD;vlDlØÞpÙewßãlV@¢è^¿ý0;í”9sî9÷¹Ïu¹ÔoQ­¶{NÞSKi^“õŒŒŒ´ÍRË–-…H6¡111ñõõuvv:v옕•Õ®]»-Z$$$¨ÕêaÆuîܹ‚¿‚:tÈÉÉ©_¿~çÎ¥Ré“'OJ˜e‘Éd©©©.../.H$’jÕªùúúš››;88Ô¯_?%%%==½[·n}ô‘pBƒ ºuëÖ¤I“´´´ôôô6mÚLž<¹víÚ...‰‰‰2™¬_¿~}ûö*ÜËË«I“&UªT144LOOOOO733ëÝ»·½½}||¼žžÞÈ‘#ýüü==½Ö­[»»»krbnnîëëÛ¯_¿J•*ÅÇÇ›››7ÎÓÓ³C‡Ož zØX‘÷¹„jUÈ5!?#)ªÚÄØ‘R ™Š8œnâfGÊa:ÅS5ë;äå‘­b Ò|nBJF•¹‰¬c)½Ô¤ƒ~ƒ{ {᜞@»³4¾Ì¥g«•õ¨/y~€a€ÂL$ÛM=׊A¿Ññ´^B IêsžýCÌŸJ}ÀñrOY %ƒ¤ŽÞÆžÖLïR)¹š½„†ñô9ÀÍ:_,È**âÕÏ=©Ùk?f…S?­-Řû8:EâKáS¸ ûÿiƒtvvîÔ©“‘‘‘ÐSeääŸ~\ ÈÏLz,é0`B+ÿÞ‰)i5ôSFzÿÝ¡q{dddܼy³}ûöï«Å‘#G:uêTF«²ŠšF…BQ¿~ýwÕbÏž=Æ «°$LB#?uêTppðßÛž@.È¡3×ChøÔS8 ž` Þp VÁ Ø §ásxÚA7 ?@ 'ÐÁ w%êê¤`ŸIåÚÄHQ©¦P©w«’œ‹i–¹²›^ 8ªP«ÉËäzRÚÁS%wU| gôÙ§â ÜQQ–€X‰òÄÚ–c @Ö> épì@ÅÙýt\Oî¯TË—/·µµíׯŸfíÄž={š6mZh¥:¾pt0>A_É?cÍj?Àþ…FW&äUá™|îM̨–À²yR§TÔ4¼IÛª5°;ú`Ñúœ&·Uƒ¶)o»ÖõÎé}¼ÚiY¿Û˾Ë|àʺaܪeˆàH,à‚òÙèêæ³ÑÕ"¨Ú‚]M¹åÀ ‘ò»Íyü6²fÁ¯p¼dÛ¶m.\haaáìì¬V«c²Ví<ó47ûÁµ3:V tÐá%q$ %cð épš3€!Ìà+°sPü Ú€ƒ+¸æb¬bò}–ª±P 6Ç08S¼’1ÐCï15íI6$ÿ ­ïa™‹’@V™:iœ+`4VóÄa)\SrKM,(`Lƒ[°¼Á–=¬“ÕàC8 '@q,%y&îTÊ0†Câög<[*uFäv²€¯‹:×á°EÅ»u˜Í(T!dQŸ&Rœ<ôî¡YCÙ–Çðq†ÔúkåïËåQ^ì“3ä(T¦WS¦Líªø.Uþ> É$íÖ`Õ’é©§Ê'/4Ì©J¢ Aã!¨ öåÓBÊj#€ ÜÈâ–o¦~<ƒw0þ?rFØüCîkĘ~X‰hb_:sõ÷ÈÍÍÕŽqx[QþÞªìììb:Þ2¼]4¾uÀ ŽÁ8PÀQ8(vôµÁþ#.²ùŒà&¸ÂN¸3 ¤BWØmD/%‰ Ba…>-È—Qó>_I 1CY“L[Òþ¤¹qJ¡–i]N&-Å-…G* X­à8Ø'’¿J°–ëÕäCs8 Má1œ4`ª‚!` &`YZáép,À!–•v¥I6ñ×ð(OŒ›P}qWå ¾ZÖ€T‚Mà^°A_Ê{¨" òÁÄ”†JšËØ!'•®p *CŽ ¢i ¦À™G†´2"AEª’Üâ“©ªâJU`‰ÕL–’÷à#%iRzÂw*l¥40'=“#÷á6œhÖ0\! ba ¥–=h–"m©£†8sf FÙ} Pi>hì:ólµïuñ1Ö|)ŒÏ$ð8kÛ©ÈW“óÈòÂ+)ÍybD:GnÖ/ð Êh±‰Okp´žÞŠÁ’‡–¬E5,C¥Šâr= lHÏív"·ãÔje|¢äb}6‡høöù{?5 ¥+ó¦´Ž•ù]8T U wqÛçU˜_ïC#¹zM˜šš ã:”.¬­­ßŠ-£ÅoðK8/öJNÐŽC8,VR}>.à*xË©§~6Z'e.XJ±VRÅ”¨*¸Ü¥À›ÇÜ3ÆR†¾ yMbîóy¬”Rɹ1_ÆqÌ€Õù˜C(LQñXÂpêj¾”QôÁÒ 5 {ËþlvçO-"p‡\j”¢Uh¢µ¨´àþÏyê:€íó§Å"r®ƒ·h®b ¼ðý6¶aÄŸŒ;®ZÓ@\Ë•©uçg0!ÏŒ,@ÍÓg¶n-Ø@ÓG|öHµ-Sz³®þÈl¾¥š¼œ Kd¯Ÿ^édS˃”wùŸ¿ ¬p¼ârž‘¿Ÿ…Õï³àg~řǢ6˜R+à Jé«›«v"3“Î\½–¹²··¯°QÈ¥ˆ“'O¶iÓ¦Ü&Z,--+W®üOÿ[ðÇôéÓçß ÏøJØ3à˜‚(@®ÂxÈ0Pã”ô5`’T êʘYÀØ¢"Ó€ºj2Õ˜çÒ:3dv¤æÒTMÊB­‡¸(é¢&Úššù\É`¹Š/òùúÁp=Ö)™¬f'tµšž2Là<4€Ž ƒë9 Sáƒà›¡ ü)ú6o€º¢W¹\ŸÍ­sЧØÚ‚Wé½Ó!ΣoòyAÄgò[žêÐî¬ü€Õ³õ $Ž#J”RTzò©œ¤ çó|¢0.%ÌZÈOßq¦éKk+ëœåˆwAôV&“•O»jµú]¨Ø¼¼¼·±X9(à=ȃ[`5à08B.Ä 褦†³”ÌÌd’j¾Ss®™aY€KQj”rl³°IÇVA×zl¸N>ÜVðÌÈ5$,*0r$,P³ÛóßBCpzéS œ p†Ÿ :)(´† ¡P ÀSØ Hhªæ’ÖÂçR„!D*ªg¢P‘ÌBƒ DêXH+6MÜc š¹O=äú¬öcÚiñKÊ-ñÌg7‘c-ÃPPYÜYðŒA? u–Dßå¸ÚûLÁ‚O \ÆÌoÔ÷«ÉëÝÏìp<»M„”ÊRô5OÔCê Öy4Š}.…66ü6š3r8IZ™× MÌ•FlE¡•Ï’«ú.Ý+›«-[¶hK¡÷ë×ï×_mÒ¤‰†û%ñã?V­ZUCˆWrŠ666Ý»w/·w®PŠ/ŸÕ—Á… )¬*Uªû÷ïØð€¶mÛº¹ Cf._¾|áÂA3I#l8xð`íepOŸ>´0Œ=:..î?„)bÆŽ[lŠoBV6lغukàÉ“'¿üòËk´œ’‘œœ¼{÷nooï JñÇÔ^Ñ5vìØ˜˜˜#GŽ|ðö}âãã÷í{¦'kaa1hÐ áq666ÂCùã?>|¸¹¹µmÛþB(´/H…H°‡îð+Xƒ=DÂSôe\Ô5 ­œ,°Ë"I‚5Ü•2@MF&ÉÖØÐò:rx¶R.©ð{‚<‡÷ ŽKè)åJÚÉIi­b'xAG¨ç ùHÍÂìÀ ÃmÈãçå?êƒ BÈÆRÞSRFr¶ÐBøbéu‹EeЬx›qÏuÔ ñÍÇLýá;øÉ ‘ë]£U–Aó,%mÄþ‰æ&œ‡" ½/£vÓtšÂËô-ØÛˆ/§êôP} ¨x¤öNÂLäT~ÚõP}þwH ¾oQLöÑš«¥•Ï’±ÚBñ´8%É3Ο?ãÆ††††††«W¯ž2eJPPÐÁƒ_õ¡ô‹ùóç¯_¿¾<_µB)Ξ={Ó¦M¥rçÈÈÈiӦݹs˜>}zXX°~ýúùóç U*0ÜQQQÓ¦M JLLœ2eJXX˜¡¡á–-[fΜùÜ×lNNPPÐþýû…ËÓÒÒ¦Nnhh¸lÙ²%K–›â›ùðÎÉ úí·g3Øééé¯×rJò‹ÈåBƒ½l£p~ËÐ$pZÃï`.|ÔKÈ% ¡L‚¡b‘šå ƒ§*©ˆÈ UÅh Û¥8ƒ#ô„ïÔd¨8?Ã/n)Q@eGŽÐ"á‚ižrÂõ˜vpj@¥¿Â¯öÂeh%Œ{”Íý«ðß±ËX·™^ÿà&?Á§ð©Ÿæã)WÌBnˆÜ𙬢\Ž|:ø¹ß^Ï7UhiɇG5jÔ(;;;NãÂ… …ñDZcǺtéröìYàæÍ›]ºt8ñØ¥K—.]º=ÔöíÛ…7\¸°K—.b·‘#G {„ Ëk×®½r加‡2iÒ$++«¹sç–ÊååY³f 6,%%%""BHkÓ¦MB• œ@‰‰‰6lÐ ?~ýúõ£Fª^½z¡: lܸñŠ+„Ëe2Ù‘#G<==Gemm½gÏžû÷ï_»v­C‡šßT«²²²Z¼xñîÝ»…ðñÇ·jժИæb„ Ư:‚X 6lÔ¨QÆÆÆ>\·n••Õ¬Y³–,Y"ìÜ¿ÿ/¢˜ÌÌÌ   ^½zÍŸ?Ô¨Q}ûöŒŒl׮ݨQ£222Ž?Û¯_¿îݻ߾}ûÆ:UÌ¡-Œ€,ˆ€“PÁæ'8A-ÃUôª°,UTÑg¨[¨.**Á<57Õ¸‚½ ‹ªŒ€|ø¬ª²"žeÐndñ¥’ƒ*~c±oÀ,&Nû£â#‘8µ Â#xÚB0€Þ¢¼ä51fä_ˆŸ°É‡pjýã»}|‚ù{¤‡ÞÓ[ÿ¡Þú%ëßg}[Ö·eŸgÅ)ñß zòóó±p¹\îàà˜˜¸yóæ={öøûûO™2åæÍ›wîÜiÚ´iLLÌŸþ™››;xðà‹/†‡‡;vìË/¿¬^½úÅ‹MMMW­ZràÀÁãääôçŸÞºu+<<<44400°X†ì²Fûöí7mÚôñÇ›™™8q¢råÊ¥rg[[[[[Û   'NÔ¯__ Y·´´œ={v~~¾ŸŸßW_}ejj§V««WƻܢE‹ððð#FÄÆÆj»þ€´´´¬¬¬!C†¤§§ûí·Gb„A£Fd2Ù­[·êׯãÆ^½z• í½€ÔÔÔäädXpÐÙÚÚuHFGGMš4©T©R‹-Ö­[·yóæŒŒŒ]»viNS©T¹¹¹×®]ëÕ«WRRÒ¡C‡tfçuñ& ÎWpo8K$˜çóÂA º0¶€nÈL(°F‘F%OàÌRó?ءϧ‰4€ëzœU3;‘9*¡tÍã ƒa£SÕ QÑ®‚zÂe5Gáô‚?! àT9Œ‡*0Â9ø¿²© G¨ BÕžþAØi ÍrŽÿ¾¸V 3¤È ¢ oàÌÞ£tK#׈T3ÃáO@!F,ÔÈäh8á€gáHúà éP꨹®äTJ&MÍA°‚h2XƒÁ"ÁŒÁ †A¨¡:( zA;¸à”Ö²Ó3ðöÒÓôø„Ÿ|ð½‹o.¾à‹Ú7Iå¡òPùžÅ÷®ø“ Gÿúõpbià¿¢ˆÿ4½C‡õêÕ[³fM³fÍzöì „„„ÄÇÇëë뇅…MœXx$7oÞ¼^½z…††æææþç?ÿÙ¼yóáÇßHùg̘qéÒ¥5kÖ4nÜØ××wìØ±&L(…Wöüù7N˜0AóuðàÁµk× ¢VfΜ™žžXXXöööcÇŽmѢŘ1c4çœ:ujóæÍS¦Lùæ›oÜÝÝ©‘w½{÷¼|ùùù€¥¥eÑ©ÔÔÔï¾û®[·nB,¢¦ÉuëÖMsNXXØ‘#GfΜ9oÞ¼ÀÀÀvíÚéìL)áä‰ëXsAÔ ‡«p ºAÈk=l!]M¦ ™nç’Á2àxH%E©ä$Ôƒá.° Þ‡¡à—àWȆ#0n@*ôCøNƒ ‰[ ÌájyU‚vº>Œ·w¶çÏ´ÑÒ‚ê#;ˆ${5rS0T¤<%Æ…GÁ$ñh}útîÜùܹsiiiAAAõë×ö>üÌ™3#GŽjÖ¬Ù¼ysAªM›6>>>ýû÷Ÿ4iRù3É:tÈÝݽqãÆ@ÇŽe2ÙéÓ§KÅ\Õ«WÏØØxĈfffAAA‰äÂ… ï¿ÿ¾L&ë߿Ϟ=5¾ÇØØØÝ»wwîܹV­Z'NÜ´iÓÇ7oÞ Ü»woûöíÆ Û´iSÿþýÛ´i·nݺZµj-Z´è¿ÿýï¡C‡îÝ»wòäI;;»áÇϜ9S“â[Ù6hÐ@`Šºxñâ¢E‹7nloo_ˆ{077÷ôéÓS¦L©Q£`kkëáá1eÊ”… fddìܹ¸råÊöíÛçÍ›·lÙ²ùóçŸ:u*&&æàÁƒ...cÇŽ;wî²eËjÕª5wî\ƒsçÎ 0    Gýû÷×Y¤¿C¤¸!ð!õ…ÉÐÝŽ/²‘³¶À½'´W1JÍÞ|’Á\ .Ã9øꨩ¦b)‚Ì>ð'|° Þƒo!zÃà ë!ÁrÈ£-„5L‰Ðžj¹ÅÊ !/×Ù˜(.È»º–¹ò}quE{pYË\y‰RÈ·Ds•»^ìžSªŸ¹:s´~çQ$^ÜZâ%µÅýóðë‹Os žúÒæÊë5Y-nÞ¼)‘H4ÓÒÒ„=ÚJnR©ÔÔÔT3G]³fÍ›7Ÿ=‰D"‘Hbcc…mÛ¶ Q…¿€0m lk•ç[U¨ŒBVKåΖ––Ë—//TÞðððB{|öÙg“'O–J¥=zôÐT¬`æ‡ &lkfk„¿cÇŽD 5{Цøf±lÙ²o¿ýV²_ºhÖ¬™¦AÚÙÙi¶ µUÀØØxÒ¤Iš¾Ÿààà H¥Ò‘#G>\ûТE‹43Xž½{÷V¨ŠýWAЕhŠz9±+Ž6`­G%ÛÕô‚p%Ã!úÃtø 2á>˜Àh «¤È$Ø)IQ£„` ౸äÖ~5ü m!$.à ÿÀÆÁÿÊËVéPîÎÀ¢½ŒffãÆ&LðððÐ~‡ ]¨ù[ôU×>óô/Êj© hy_ÔÙiï/”‡—†jpB Ô¸@"Á  \ ¸P ´ce…¥íA÷¡¬„ÎPGkú§Dœ8B:ŠÛ¿sd¨ÕÎÎÎUªTy kll¬ÍY¦P©Tš°É·‰äí$žin^‚m>$À`H„FP€zÃq )z,,`$èAÜ œƒ• ¡jȃñ0ž€ôA …ã`Ѓx°Õ²Ùrî9@¥¥¬ÒêrõÄ Áíf ýZˆ!vJñ’—_¦IK!ÞD%.Ÿ*vȨ%èÚ(ÅuT -u`™¸öIùü}(ñV:sU^xô葆ÿô­‡žžž¿¿ù¤õàÁƒw¤b---îÝwš‡‚qdÂp)| =ÕXð4„›ðÈ¡:xÀtøîC'Ìä¨}`. ;ØMANBøÃvøñ ö¶VdÇ_ZPøKq”xPtí„Æí¶Q÷ðURð¡˜\”ÀÄÖ…’ÃD¬›«EË"æÓQÔô*Ù¹ú8;;wîÜù0n”3Þ IDATâãã«V­Znjžžž^^^ȣG\\\Þ:½«h ‘ W 9ØÀ:‡ÿ@äAüéÐ îßÐ΋¶ÊF@É[Å;WÒ ËÞ®«è· :sõ÷P(oíôƒ.]ºTêT%#??_ñLœ>}ÚÅÅE÷i!Ý_°€†Rn‚¯ŠSðèA%Ø%Jiü P €%¸C.TƒC)Ðâ  \c¸ €)4SººÖ™+tÐA‡އ 7ÔÈadÀ X· Q4W‚Mê‰Ð €îC> ‚Pˆ‡\¸¹â¸jXÁþ7Z4[°‚!b7+lPÀ% F€šS èÝXÂhñª-âÒæöâñ®¸p­XÄÀ·âöfqC£Ð@ËS·NÜ9¸'^[Y‹óâÈ  |€R$(ÑF7Q•1],Úk¸IˆÞÈ’ËøJZfäíí=jÔ¨·ûu)TÆ&MšŒ7®ÔS)((øñǽ¼¼|||¼½½³³³e2Ù´iÓZ´hѪU«?üPã‚S*•¡¡¡õêÕûßÿþ§¹<77wèС­[·nѢŜ9sd2YVV–p·&Mš„††*•ÊóçÏ{zzúøø4lØ0**êÍÖjZZZ½zõ,X ü}üøq½zõ¾ýöÛROH&“Í™3§E‹­[·:thnnnNNNŸ>}¼½½›7o¾`Á‚üüüÌÌLŸÆïÞ½[Û¯›ííííãããååõã?DEE5lØÐÇÇÇÓÓóüùóÂãhÒ¤‰pNVV–Δ*b! Ô4U³nÃ8X ßWÆßˆÆZtéG!~ƒ8H(€½à5!îA.$pþbßhÑŒÀNÁ)­)Ô¤«HP‘ æDC4ÜպꞸÓLdôkTb*9âùÑbZ§D†_À ÜÁêj]â"jS¶ÞwZ‰hP\ºUÅ›hÊørE5_®Œ/7ºJMMµ³³‹‹‹ÓÓÓKLL|ò䉅……0C.į?xð@ 577¨Œ®_¿ž››ëæævýúuWWW‡Ó§O SnnnoD%¤Ô¨Qãþýû111µk×¾råJff¦““S©§³k×®yóæõìÙ³nݺÇïÚµë÷ßngg׸qãš5kΙ3øí·ß–/_žœœ,â øúë¯ÿý÷Û·oGGG¸ººnÙ²E¥R>}:$$dܸqžžž]ºtéÛ·ïÆ‡ Ò¥Km*÷70f×ׯR¥Ê­[·„~¿´”Y´±mÛ¶U«VíÙ³§Q£FÇߺukTTÔÑ£GãââŽ?>dÈ77·kkëÓ§OÏŸ?ÿƒ>¸r劳ó32·áǧ¦¦Þ¾}{íÚµS¦Liذa@@@»ví¶nÝ:f̘.]ºœ>}zܸqsæÌ™2eJãÆûõë§¡rסôð‹Ûy0~Jåè®ÅH+|àw…]`i …ZR¨ñZájþº‰«wÔ¸wïÞ‹/:99¥¤¤\¹r% ##cûöí‹-jҤɌ3ŒŒŒªV­zøðá+VLš4©M›6úúú6lX¾|¹……Å´iÓúõëwùòåÚµkýõ×666§ü7n7nܤI“zöì¹zõê1cÆ|ñÅ¥žJ½zõ~ûí·ˆˆˆuëÖ=zôðððpssÛ½{·©©©³³s‹ß|óÍ´iÓ´)nÿ°´´üúë¯:uê4bĈO?ý´]»v¢£2JQž4i’î­þ7c%Töp¶Boð„lx IpÜ 2ü­Åy,}è› †8qµµ‚J¢Ew›$ˆ{ÀÏF\h\)õE'[Mqt·Ï‰þ°øâRéPdO#1ÝÌâÎoÖE2ðT+-Æ%W\Î øŠ%©â%K,xuVªÈŠ~]ã6kíô…&¯o®€;vhÆ]»v]´hÑÉ“'—-[öóÏ?tèÐÁÖÖö‡~عs§‰‰ÉÝ»wwîÜ)ôËÀwß}gff¶hÑ¢ùóçòÉ'Ê\™™™-Y²döìÙ3gÎüì³ÏÊ”ÖÀÀÀØØQúK©T«T*a]ÎâÅ‹ƒ‚‚ÞŽèWW×>}ú„……EFFš››—©þî»ïvîÜéêê:a„?~|úôéåš   I“&Mž` Þ-’ºvÔâU ‡NZs6 Rp×rß æª•h®bÁG<ú¼;÷- ·§–ÈO1¨ÈžjbºÅ2´S¹%Nqiã(îcBP?Øç_¢àua ˜¢æê)²³w ·ÿˆ"ÏÅÅE¥R}øá‡ï¿ÿ¾ö~ccc09˜˜Ø¹sçü±b6¥ÄÄÄ‹/,ÓåœÍ›7é:}çÎnݺõéÓGP[_¸paýúõ Õä¿ŽŽŽÁÁÁ–––›6mÚ¼y³ |UFèØ±c÷îÝ—,Y²fÍooï_~ùeÔ¨QA÷ßÛ¶mC‡xÜuø7àè9dˆ¸ Y°jAQ·èÙà×u÷vãEîÙ³'((hݺu¾¾¾uëþ5›§R©’’’4«T©²k×®¬¬¬ÌÌÌÚµkW¨ò_¿~½OŸ>cÆŒ™?((ÈÓÓS©Tš™™ýKÛV•*U„š,k;áæææîîžýèÑ£ôôtSSS777 §TBBBµjÕŒ8èaŒ€[ (޼®ü¡Ô"ØUk9ÙôE…Ž|1¤X2…–`XªÖ}J@Ñ!”XÏSÜfŠgšŠ9IƒêâÑ„â±4H98òˬÞÒÁ®L(níììªW¯~ãÆ ƒV­ZÅÆÆ6nÜØÖÖöàÁƒÿ÷ÏBzZµjµcÇŽ“'OîÞ½ûæÍ›[¶l©^½zÅy-úöíëéé)ÌWmݺÕÉÉiÒ¤I[·–²ï;66öƒ>ðòòêÚµ«0Ìrvv®V­ÚÙ³g-,,ìííëÖ­;p 0jfÇŽcÆŒY¼x±µµµ““Óˆ#š6mjkk{ôèÑØØXggçêÕ« µzðàÁÛ·o7jÔÈÜÜÜÇÇ'!!áàÁƒÉÉɾ¾¾ïH¯V½zuggç .$&&ÚÚÚº»»ÿúë¯ .\¶lYTTT­Zµ¿ýöÛƒ.Y²äÞ½{^^^•*Uº~ýº¿¿ÿÂ… ›7o}ðàÁèèè XYYùúú&''xð \.oÕª•Î’”vŠ+!BÇ~9X!$ƒíï«Pµ"¹+’ Tó¹êæ` À0÷Å—ßÃLî×KqÖ˶¦Èžz"Ý"àSbDåʾÞ@ÛYÏ¥~‹jµÝsòžZJóš4¨§-Ì*—ËE{{û¶mÛš››ëééùúúº¸¸(ŠFõîÝ»nݺ>LKK›3gNbbb—.]6l˜’’2xðàÐÐЮ]»~öÙgOž<‰µ°°˜:ujEãˆÊبѳHJ…BѪU+Íh@&“¥¦¦º¸¸üC'¡M“&M?~ߺuë™3gººº A‰YYYýúõÓØ*aljmmݦM[[[¥R)hWZ[[ÇÄÄ(ŠQ£FuêÔ©C‡…jµS§NIIIñññ5kÖœ?¾0IöJ¸ÿ~­ZµJù S©tqqi×®žÞs”b™™™*•ÊÞÞþ²Z¸¸¸¸¸¸|hbb2iÒ¤úõëûûû ÕX­ZµùóçW­ZµY³fqqqñññ^^^_~ùåkdòÖ­[žžžò2¡ú.üÑ£GÚ"vÍ ¢¡.dB>T QqñY+€ÚóAÛ2G×®]MLL<<<4½Ä­[·ªV­ºfÍ­QFÆÚI$5¿ ÇŠÜÌ,žß“Yö‹+Ãqû‡Wûø[Ôãà󊛦*ÎÎÎ:u222²²²2ròÏG?.Päg&=–t0¡•ïÄ”´ú)£½_‚·êezäȑ˗/,_¾|ĈÿÞ¼ŒŒŒ›7o¶oßþ]`µ8räH§N²Æýû÷ EýúõßV‹={ö 6¬Â’0 üÔ©SÁÁÁ»"û Þ‡Š–­åË—ÛÚÚöë×OC½gÏž¦M›6l¨q7‚•/7ºÒ„Zh³–q êi( ÿntõªè¨jñ’ƒ?Ú¶m»páB gggµZ“µjç™§¹Ù®)eV ??¿7úûûËd²ôìÙSçÔÐAJ'ÿ¥ù– ­)g'òõÓgôðšù$-7f|öt'-Ü7ûât4§…Š*_˜Â4qû{1p¼ûžšÈ¸¢>äA8'^5CŽ…E²×@üŒgVÏ ,_:ßR6W‡~#2öe‡§OŸ¾ tå?ÐÉÉÉ)7½’7ˆwÆ·\üü_û"{*¬¹ÂHT–'öàˆ‚@Z{`¨5Þ*9[sZщ©ÖQ^‰¹ÖNM–Fˆ“…fZCC'­¢‚‰x´Øà‹­x“Šg®ž•éí’ OII‰‰‰yë;KKKƒòœbyüøqrrò[_±eÁ“ò®¢Táe÷FõìuxÐQÜþ RSS------ß…Â^»vÍÍÍ­|ÒzôèQÕªUߊՑ²—R%L®·]U•!5†)¢Â¡¢˜JÜ·‰G·æ/Y¬®EÆ^‰pVÜÞ­µ³òµŽjœ·Ä%Ϫ¦h][4âì±xTÛÝç#F¢Ç¼úb¸ à¡3W¯ ccc‡w¤°å9,677w*V__÷¢• žÀ’*Æâª` ÀU@^Ú_‚¼Ez q¼yè5pÑ2WŠ\{UË\• ç(/îhŒVº% ­Ä;ÇÇÕRtoyusõ!T:sõ:033srrÒ&œ}[áããSnB”ÖÖÖo§*üó8|øp@@€Nž±TqÆ·„H‡·|p­Ãß@­V¿ ³å¹¹¹å\Ìw¤bu†ªlPÁm•’Å¥¾R‘{0Á-œýüê1N<‡eˆ¼´ùZ´ôE!Ó"„½üºYÕŽæxm‹ Ñ¢å­Tœ¡Ñ°CÄqiAUq;ž¼(%enûöíÚë\>ÔÔÔ4kÖÌÝÝýõî®á3-Ó¬– d2ÙöíÛÝÜÜš7o^èÐÞ½{333Æ7lذ  à—_~ùûû;88$&&j,Ê­ŒÑÑÑ/^ìÚµëK*€„‡‡gfföïßÿWõõëׯ\¹XYYZSqçγgÏÆÆÆBVÏœ9s÷î] ZµjíÛ·/ú8töA‡WAìy7´1EŒü>aEŽj˜ w‹.¸ø×]ùÃq»ÆëfÕ>ÿÇå5,ñ&VZGçqxVÕ:M^Tä’"#¿øâ‹åË—çŠ(‹¤K—.1cÆÄ‰?þO €&“[¶l™8qb…eظqãÌ™3'Nœ¸sçÎB‡BCC'Ožœ››1mÚ´èèè%K–,]º4777,,lÆŒIII3fÌ ËÍÍ]ºté’%KÊ!Ã111Ó§OŸ8qâŒ3^²VW­ZU",¯ae§M›‘››;yòäÐP #±±±Ó§O?tèPnnî_|±qãÆÓ§OO:õæÍ›±±±S¦L9tèPÑÇ¡ë€uÐáÍâoÙœœE 6lÁ‚¿þúk@@ÀÇDœ?^&“͘1#<<\Ø£9* ’’’4'?|øœ>J»víZ·nýËгgO!‡NNN±±±K–,ÉÌÌ,”âÉ“'…¿ÝQxxøÞ½{çÌ™0gΜ½{÷ GËš½¢E‹/â&?|øpzzz```§NΟ?ÿàÁƒmÛ¶U©R%00°aÆ{÷îMKKÛ»woÆ «T©²mÛ¶rhqqq666{öìùóÏ? Ο?pòäɉ'Nœ8Q8gÁ‚¼}ûv@@ÀÞ½{µ‹B­Ž;¶ü[öƒΟ?ß©S§ÀÀÀôôôÇk%%%?~ÜÇÇ'00PÈçõë×£££{÷î=tèМ;w®èãÐu:èðfñ7Þ$…B‘’’"¸SN:uìØ1!òxÀ€ÖÖÖ[¶l éß¿ÿ¡C‡~úé'¥R¹qãÆ‘#Göë×ï÷ßß´iÓ‡~¸wïÞaÆխ[Wlmß¾ý½{÷´»o©TúÏ‹¡R©:4uêÔ™3g>ÜËËK;Ń6l̘1;vì߿Ϟ=¿øâ‹ 6 :´mÛ¶jµzãÆýû÷ïÚµëÑ£GË®º===ÿ-#--mĈƒnÛ¶­……E÷îÝg̘qâĉ˜˜˜Ÿ~ú©k×®úúúÕªU[±bÅîÝ» tÿþ}ÃWð­?þóÏ?ïß¿¿——W``àÚµkuï›ï áü€|- ¢µ ðg¶fÀTñètx¥pÙT-eÅÿŠ?ðŒ8C³âÖ¨9ƒÀúTëü`qFíUƒËäZ¥øË€ˆéZG5ÄŸÀhnÀ8qgÎ뛫èèhAXoéÒ¥€¹¹ù—_~9lØ0àĉÑÑÑ©©©ÙÙÙJ¥R¡PØÙÙdeeÙÙÙ™™™=yòD¡P¤§§çääDGGgeeedd”QÇ:xðàÀÀÀÑ£GéééFFFvvvFFFÙÙÙ¦¦¦vvvR©T˜ÈÉÉ111±µµU(J¥Rȹ`›uÐ|deeÅÅÅ8q";;[9oÞ¼fÍš µš››+—Ë«V­º~ýz휜œøøøèèháL]}êðN½=P ®3ÔÚŸ§u‚¹h4Á8ÊWOEã¢7q¯.Ñ:ª•H`¡ ”ów˰^u‰ªŠ;j"fÀü%ÕÿÛÑÀž={´C‚­Ú¶mÛçŸ>`Àí¡R HNN>pà@ýúõëׯ_McÛ¶mNNN>>>º·¤ÔkÕÉÉéÀ:tعs§F2ê%¥T*GõÚq4:è ƒ/e®^„åË—;88,\¸pþüù/£)îîî¾páÂM›6]ºt©Ô˰jÕª+V|÷ÝwÚ_÷ÿ¤¥¥Í›7O[|¹â`ùòåƒþnÞ¼yóæâ%…òóóCBBŠîïӧψ#¦OŸ^A®mذáöíÛÚr-:èP6°‚6Zݬ†%öÈ:-2ÛjÏ—ïåElÄKRŠ¡o ®âihÞÍ¢”ê²âÄÀ,D±$i®4á3A‹¯½Tð>X3„^°lÍ•àùñ÷÷ïܹsëÖ­KžKß°aÄ üýýïÝ»·xñâRoáááK–,ÑË­\¹rêÔ©BŠ6lpqq™5kÖ?üpàÀÌÌÌÐÐÐóçÏWF““³eË;;»Y³fEFFúûû§§§=ºuëÖ6lèÝ»·¿¿ÿ£G–,Yâââ²dÉ’o¾ùæâÅ‹ÑÑÑ»víªù=z´0M5jÔ¨þz¯š4i2~üø-[¶$$$|üñÇ圱֭[=:88xíÚµBŽ=züøñ¹sçN™2eõêÕ;vì–.]jeeuâĉO?ýÔÀÀ@¸0??¿Ðãx»;×Ñ£G áû:¼*jÖ¬yîܹ";íÃÃÇkíÐ|ŽÕR.6bŸ.ƒ)EŽÚçÜ+]–/[Q‰øé ôŽ_ÕDïhº¸¶ ÑnXXX¼ˆ= $½«§OŸJ¥R`c^^žžžžö_ÀÀÀ@¥R Túúú†††ùùù*•ªR¥Jr¹ÜØØX"‘hˆ· ÅV¨T*™LfhhøÚ«ˆòóó q1kbü„…Ì{LLL„¿FFFR©ôéÓ§BÎe2™Z­®Té¯5ne¡w¥V«5)jþÈd2aÙ¬ðWSÉ€‘‘‘žžžR©Ô SLLLJ÷­+ªwU´ÂÃÚÃÓ§O“’’oß¾-Hô~ðÁÚ H$ÚµJyé]) áþR©TЫšŠ¦hçM.— /‰¦‘}¯‡…Þ•ƒƒCTT”Îö¼”Jå!C4/Èž={ EÉêðJP©T­[·vtt|½«B]L¡þñEÝ¥¦wÓ×××X úV©Tú{^mäeO;3/ÊÛk(ð¾$‰vÞ´ÿÍ@¡Rèé镺•ú‡ `÷îÝ_~ùå¬Y³²³³«W¯^³fÍbÀAQ3SBÞ …ížw¡k000°¶¶nРFD[‡×û Õl;88˜šš4HW-ÿEÕ…t$L:ü# 8P"‘ܾ}~ï½÷tuòï‚™™™››[nn®®*J -[¶ÔÕg© +Ng®þ÷ïߺã·iii¯wá€^﨨¨BìYo%Êzí¹:¼#Й«¿‡³³³½½ý;ò¡]nS,‰ÄÝݽN:o}­J$’² 0ÓA¹Òá/X[[·nÝZ.—ëéé½ å-7[%h*•Êw¤bsrrto“:”¦¹200(4Û¬ƒ:è ƒo…cŸ3W7nÜ(6ÊNtÐAÊSr‹7Wfff…b—uÐAtÐá@*•f+4«‰Ÿ3WöööGŽySke|||ìììÌÍÍßì¼´Z­ÎÏÏW(fff…†¢ªj¥R©½ »ÂB©T qqfffoä±¾ñ ¼ òóóåry¥J•*¬¦h¯F¥RùôéSaUâ¿"ª¥>q¡cQ©To¼.ÔêäúYp¯s¥V«»wï^þ9«T©’ÀŒ®R©Þì¼tlllJJŠ———D"©€L7nÜÐ×ׯ[·.ÿUõˆˆWW×*Uª(•Ê7²åøñãžžž•+W.((ÐT(ø Œ†w“&MÚ³g»»{ïÞ½.\”’’²{÷î   µZ]§N;w®\¹Ò¢PŸãééYv£ö-[¶üþûïõëן;wî7ß|#Ôáo¿ý¨I7(((&&æ“O>9tèPÍš5ƒƒƒmllÊÕ(¼žžžE¿"¿ÿþ{ 88¸{÷î»víŠ-‹šZ¾|yõêÕƒƒƒ½½½¿ÿþûÄÄÄï¿ÿÞÛÛÛ××·Ð7N Y- Ÿ+W®|òÉ'VVVÚ' 6L£™Û©S'àðáÚõûöík×®]ãÆË-á¡¡Íš5,Xзoß——·èÞ½{9,ÈppphÖ¬Ù–-[ŠêÑ£‡ W_¦xüø±‡‡Çœ9s =Ç ‚>}ú´hÑâ“O>éÛ·¯¯¯ï°aÃ4‡jÖ¬) :+W®Ü½{÷¥K—z;Êó9jÞŽV­Z ^µW*ãW_}U¹rå²ËX·nÝ‚ƒƒííí¿úê«Ë—/wìØñÑ£GÚ'øúú¾Lpss+kU:u긹¹­]»Vóªž={655µGÇ×îg„OºîÝ»1bàÀݺuÜ'e+++__ߣGjöüþûïQQQwîÜ)$mjffæçç§qV,seeeµoßÿ³wßq^WÇþøŸÛØ¥maY–¾t^–®€VìX°DD7‰×(71&—DÍM1&~o¢&7jŠQ ˆº‚ ]z]Ê–ºlaaËïwÞûûjð^^ðØÝï÷gÎÌœ™93sΙZTT´{÷î//?Þ±cÇ©S§ÕŽšÕå®]»j®‡?Ö‰ÆÇÇ·ñN:µmÛ¶'N¼ï¾û.½ôÒ£>}î¹çÒÓÓsss7nŒfÍš}úÍ™>}zAAÁ!C’““»víºjÕªéÓ§ª~ê÷Á\rÉ%¿ÿýïïºë®† ¶iÓ¦Gõëן>}úOÔ+¯¼òÝwßÅÍ7ßü/Iý\¹¢¢"''§]»vÇ)ñUUU]ºtéß¿Ê%&&6iÒ¤S§N;vìÈÏÏ3fÌ׿þõ.]º|¢Íù—ÈËË«[·nRRÒqZà%¯®®nÑ¢ÅðáÃ/¸à‚;wæçç·oß~òäÉqqqõë×øàôžX·nÝ3äÌÀúõëŸÉgž™ä»Κ«]»öé=30>>þ ?3°N:ååågø™§KŽŸš3ãââ¾à™………ÿöoÿ6nܸË/¿<++ ÙÙÙ'=ÝœxFI¼æÌÀ“~¥øÈ‘# —.]úy Î Ì),ùÅßæ••mY>ïì©gqgqÿDrròÀ¿ýíogeemÞ¼ùøÃYž|ADEEEGŸG{–›gqgqââân»í¶SÙžð¿3gÎ-¥¿ÊÊÊ I¦²²òïC: éééA«eYYÙé¥äÓÈKIIAyyùHÞ±Ô&%%UWWíL§…€zõêUUU?Ÿ™\ ÄòòòäääÈ}TgåxüäÕªU«²²òÔïb<1´iÓ&xRRÒiY|"SSS««««ªªÎ¦§§u°HìQK«FO'è—„¨¨¨¸¸¸-ZœØãÕÕÕ'ñºúÊÊʦäsÑ üž=ä,ÔªUësQûEØòi.á³ë󡪪*ØH~&#..®yóæ'Q.'uëÖ=Åþþ‹(jUUÕ9ïõK";&&æÌ1,GQxt2011ñÌl¥ý—‚­¨]»vLLÌqne8íØ»wo\\\\\\íÚµƒÀYëÚòòòØØØ¯¨6b×®] qqq_mü—ؽ{w|||BBB­ZµÎª+>\\\W¯^½pVŽ'Ñ<µ;öX»ffÏ?5[PZZúU±q3gÎ=zt\\Ü¡C‡Žÿì¾ÿõ¨Ù[öÕF̘1ã’K. 4óxöÕ~%ðæ›oÖ êøwÐÿ/F^^Þ¶mÛ‚ÝÁÅÅÅ_wõU‘ãÌ™3kÎV p¶3ð,Îâ,Îâ,¾8ë®Îâ,Îâ,Îâÿª»*,,¬i >~ìÝ»÷T^üqGaß¾}ÁåÂgqzqðàÁ‚‚‚O»Xà¬%%%§±wìKšEEEglî±Æ’—––œÄdø—⮲²²&NœøyŸš8qbpH×Yœ<óÌ3ßøÆ7Îòá´cÚ´i™™™³gÏ>±Çïºë®=zœe#ž}öÙÌÌÌ3'Öç<òHffæ<ñËÃÓO?ýÐCá…^ÈÌÌ<‰õNÎ!L/¾øbQQ\sçñòåËß{ï½+®¸"==}Ë–-Ó¦M þ~÷Ýw¯_¿~æÌ™cÇŽmÖ¬Ùo~ó›Î;ÇÅÅíØ±£¬¬ìµ×^ Ê€§©HLL¼á†-Z4þük®¹æ¥—^jß¾ý¨Q£Žãï~÷» ´nݺfŒ§˜æ¢¢¢š; ¯¹æšÔÔÔ€«ˆ‹‹»ýöÛW­Z5gΜK.¹¤yóæÛ·oíµ×†Þ¹sçßüæ7A¼3jԨȻϻwïžššZPP°jÕª¸¸¸eË–Õ©SgäÈ‘¯½ö>QŽ˜?þ¢E‹^uîÜyøð᯽öZp+`÷îÝ tZ&Ì–-[‚–§FÕ«WïСC5¶lÙ²²²²¨¨(::zÿþý1115ÊËËC³fÍbbb¶nÝšœœ\QQQ\\ì9]xñÅëÔ©3~üxËÕ£ä¸{÷î—^z©ÿþ5 €:uêÜ|óÍ5óñµ×^kÞ¼ùñŸÕ}²$2mÚ´Q£F[P¯¹æLŸ>}óæÍ4GM«Úµk¥ä5/<|øðo~ó›àçH%þrûí·ïرcþüùx饗&Mš0§W¯^W;uêÌŽ·Þz«Aƒ§Þæ`Μ9«V­ æN¯^½ú÷ïÿÒK/¡W¯^3gÎLLL6lXAAÁ_þò—ÁƒoÞ¼yÏž=W­ZŒë–[n9õdæ©©©×\sM`n¸á†²²²€Ôž={¶jÕjûöíï¿ÿ>þú׿vïÞ=..î‹õˆôìšY¿~ýÏÛ+òì³Ï>þøãcÆŒY¼xñÿüÏÿôë×ïOúÓÞ½{fÏž={öìÞ{ï½¹¹¹Ý»wòÉ'÷ïß_YYùo|cèС-Z´7n\|||ïÞ½ß|óÍâââ«®ºêlĉÉ`íÚµ“&Mª®®nß¾ý£>š°~ýúÇ{lãÆ©©©O=õTëÖ­gÍšuÔïºë®Ù³g׌ñâ‹/>jGÛñ`ýúõÍÑÑÑŸ7eqï½÷Î;wРA/½ôÒ{ï½×¿ÿ{î¹gÏž=çœsÎüãƒîß¿ÿ¡‡ºà‚ 222–.]zûí·wïÞý­·Þúå/9zôè¹sçþýï6lXÍõ3>úèóÏ?á…~ãßHNNNKKûÁ~PZZÚ¢E‹¿ýíoŸ(ÇÚµkßÿýÉÉɳfÍzê©§âããKJJ~øá<óÌ3;w>='pIÊQ\Ý´iSzzúîÝ»óòòÒÒÒV¬X±wïÞ lݺuß¾}uëÖ]¾|y\\\||üÚµk+++k×®››»k×®”””… îß¿?>>~óæÍ‡>±{×®]›™™ì»ü\Ï®^½úõ×_ßµkWË–-¿ÿýï7lØpíÚµGqõå—_>JŽ<ðÀ¢E‹ªªªfÍšUVV6~üø{ï½·¬¬,33ó?øAuuunnîÃ?¼~ýúçž{®¤¤$ð‚'<¨ÏÛ|;oÞ¼»ï¾{ÕªU­[·~ì±Ç’’’¶oßþï|§GEEE?ÿùÏ;tèðúë¯?ùä“]ºtyúé§ÿøÇ?^rÉ%O<ñD¤’_~ùå5/üÞ÷¾÷òË/1bêÔ©3gÎ4hФI“6nÜØ³gÏ_üâ;vìèׯßܹs×­[wþùç7mÚôúë¯ÏÈÈ0`ÀM7Ý´zõê´´´‡zhݺuM›6}â‰'7n|œWE¢¸¸¸¨¨¨Y³f'¦¨O?ýôSO=µoß¾ÒÒÒçž{®[·n“'Oþûßÿ¾xñâçŸ~öìÙ|ðÁ…^xóÍ7¯X±¢yóæ?ùÉOª««;vìøöÛooÛ¶íŠ+®èÒ¥ËTÎÏ+Ç+V|ãßHHHhÓ¦ÍÃ?œ””´téÒÇ|âĉyyy7ß|sÇŽÿüç?¿úê«·Þzë{ï½·jÕªaÆ 4èN¹=ö‘“ 9räßþö· &ôë×oÑ¢EÁfM›6½é¦›Úµk7cÆŒ}ûöÍ;·K—.&LHNN® Ï#Ñ«W¯ôôô„„„óÎ;ï ‹-êׯ߄ ‚†øàï—_~ùرc·lÙ²råʹsçðÀ)))ßÿþ÷ÿó?ÿs„ 3fÌ;vìøñãxàÍ›7?ðÀãÇ;vìŒ3&L˜pî¹çfggïÛ·ïØ7oذ¡^½z&LÀÇ|àÀsÎ9§S§NqqqíÚµëÙ³g‹-‚+YQRR¸Ò¢¢¢-ZÔ«W¯¦””Ô²e˸¸¸ÈQO1FŽyÍ5×ìÚµëÃ?<–«_|ñ_ÿú×H9N›6-##㦛njÙ²%‚{õêÈqÖ¬YÁkg̘ñúë¯ÿà?8-ƒ>|øõ×_¿oß¾ììì^½z½ð wÞyçèÑ£7lذfÍš€Èn¸¡f8mÚ´æÍ›O˜0!##ã(»1mڴ¼¼¼Ÿÿüç?üpTTÔ¬Y³233'L˜Ð°aÃàÁsÏ=Ÿq#Ò˜1c®¸âŠüüüÓxìÐ7Þ8tèЕ+Wæää`ß¾}ñññAtXóú÷ïà 7rìØ±cpeÔi¹éiûöíË–-ËÊÊš0aB Ç[o½uàÀ&L¸ûî»/¼ðš0¨qãÆÁ•o£G>Y÷¬ž„·Ô©S窫®Šl¯¨W¯Þ)»ÈòKBfffä¯ÌÊʪ¬¬lÓ¦MpCöéã¦M›Þ{ï½»îºëßÿýß_|ñŘ˜˜ üìg?KIIÉÍÍMKKKMMÍÌÌœ>}úúõëwìØqõÕW¹”ÜÜܬ¬¬ŠŠŠ6mÚ|®»½£££W¬XqÝu×5hÐ`ãÆ‘èuêÔ)òŽ7.::ºM›6‰‰‰§ž3 (++›7oÞ–-[:uꔘ˜xèС ÄÇÇgº?>>þ¤ä.¾Ú´isÔÉH®Ö­[wøðáiii»víŠü?M›6­9ñ?ûÙÏ^|ñÅÄÄĦM›ÖXùœ®AµjÕªævù„„„þð‡999G…zõëלVï¿ÿ~VVÖáÇJº|øá‡+W®œ0aÂOúÓŸýìgMš4Á+¯¼òî»ï:t(ðÙÿíÛ·?õ7V…N:E¶Tdff¾ôÒKqqq‘rlÞ¼ù¹„÷¤#[Û´iÓ¨Q£¦M›þú׿¾à‚ RRR~ò“Ÿ~I8 ««ûï¿?///;;ûÛßþvÍwïÞ}اOŸ«¯¾ºOŸ>>ø`EËÎÎþãÿ8yòäÏUrÛ±cǤI“®»îºììì£.{=JŽS§N}ã7&OžÜ³gÏSÏ™½{÷–––öîÝ»nݺ+W®,))Y°`AÆ ‡zœw—””œ»¶#¹:qâÄ:uêdggßqÇGåy"¯lŸ4iRvvöO;yòäÈÿ–]VVöÌ3Ï4iÒäŽ;îØ³g®ºêªììì§Ÿ~ú¨&…š¹¼páÂÈ[:çÏŸÚ÷É5w¢££3T*--]¸pái¡yòäÉÙÙÙ“'O¾òÊ+×®];qâÄÌÌÌäää»îº+(FþK;ÚÜÕe—]V·nÝ)S¦äååõêÕëå—_.---..~ã7–/_~ýõ×§¥¥]~ùåóçÏŸ2eJaaáĉ;uêÔ¿ÿW_}5’ÝW_}5þû¿ÿ;77÷T²¾eË–#FŒ˜1cÆ”)SêÖ­{Ùe—_·nÝïÿû€Ôš1~ç;ßùÝï~w&µðþûïß}÷Ýk×®MNN¾ùæ›ÓÒÒÆ÷î»ïN™2åòË/ÏÍÍ1cFÀÕ† ¼Åõ×__ZZ:eÊ”|ðå—_þ\F999¹FŽãÆ+,,ܰaÃQr1bDFFÆ/ùËG}ôé§ŸŒÈ)FIIÉÒ¥K ããã7n\«V­ŒŒŒ¬_¿>)))66vÛ¶mŸý†òòò­[·:t(##ãLpTÇrµFއîÔ©Óïÿû›o¾yõêÕ¯¾újÐÔ´iÓÑ£GÏž={Ê”)wß}÷¦M›Î„äää<óÌ3 6¼è¢‹† Ò®]»ßüæ7³gÏH r€‘àæ›oÞ°aÔ)Sî¹çž£Z%W¬Xqûí·/\¸0Pï´´´«¯¾zÑ¢ES¦L¹ýöÛW¬XäÐæìÙ³'˜³fÍŠôO›6múío›‘‘1bĈÓÅ“… ¾úê«©ÇùÈèÑ£›4iòì³ÏnÙ²åSÛ®]»Áƒ¿ñÆS¦Lùæ7¿¹uëÖW^yeñâÅO>ùäc=öÎ;ïf'@¯^½ºuëö‡?üád­@¢F\uwÿ‘—åîn[xëµ—4iÒän>ž9sfiiiFFFllìÆ‘––Ö¸qã+V :4%%%???h&Á¥—^ŠU«V­[·nĈ³gÏÎÈÈZoÿñ$&&ž@;û¼OzãÆ~שSgÔ¨QO>ùä÷¿ÿýìììuëÖ5oÞ¼wïÞ5cD×®]Û¶m[Cê’%Krrr.ºè¢hµ˜6mÚèÑ£ƒs?o8_ZZZsïÙˆ#·oßþÑG¿FruöìÙ‘³ñ7ÞøÓ»wïȬËüùó  4wîÜOcaaa Çà+š7o^§NuëÖeeeuèÐáÆoüÙÏ~–ìºhÛ¶m×®]O@)kaª_¿þ‰ÝߟT¡’““k×®]QQ”’’RTT ?H©ÄÆÆ¦¦¦îÛ·¯¬¬,11qΜ9íÚµKOO?xð`b: ® •••ŸwßI Çþýû§¥¥½ñÆåj Ç:”––nß¾=HçÎ÷ìÙSXXxÑEåää,Y²$ÈmŽ3&Pò`>~ÁAUUU}ÞEÉ?þñë®»î¹çž ¾=PÈùóççç秤¤´jÕjÉ’%YYY}ôQbbâŠ+¾óï¼õÖ[;w>JÉk^XYYùÆo?gee¥¥¥Ö\T_3?úè£íÛ·_zé¥5\]¾|y|||NNΤI“^{íµ’’’³9"aª_¿þ Â4iÒ¤^xaݺuÙÙÙ:tèܹsà’k˜óió1X¯”——M˧RŽA´&&&&Ž1"°ä£F*//HÍÏÏ/** ÎOú‚æq̘19…%¿øÛ¼²’¢-ËçwuÚñÝÕQ¨qW'Ð,tÊÜÕ™€·Þzë{ßûÞ~ô£ž={fddÜxãO?ýôíwW'ŒÒ_èl IDATÒÒÙ³g·k×î¨Êå©tWg,NŠ»úŒŽÄûî»oýúõS§N}öÙgyä‘™3gµú//¼ðBஆ rÂ/9)îjÇŽuêÔùªÈñTâXwë,ŽAZZZ×®]Ï{hÎdŒ9rË–-<ò®ºêª“â«N/¢££ÏŠþ¤#11±k×®‘íÇâ¿þë¿.¹ä’`ÖóÏ?ÿåù*4hРk×®§÷v±fÍšuíÚõ:¼ÿÏ⬻úÜpà AÛèYüK|ík_ûÚ×¾ö¿f8 _$Ü>‹OCVVÖQ½KŸøŸzÆ7nܸÓË“‡z(8ýá,Ž7š<Ë‚³8‹³8‹³øê­®öï߇•FD«.\xZÒNû÷ï~زeËÇ|VUò²²·ß~û+=–¥K—'<ý/@Í,[±bÅ¿ì®ü¿€òòòšmFsæÌùªœ¥ûU‘cyüTw¹›ú+„˜˜˜¨¨¨ƒvéÒå+tmlllEEEZZÚW”í_âã㣢¢*++¿¢l‰ŽŽŽŠŠ:tèPûöíÏ„]z'QQQÁ Z·n}æÜ~zURR\ÒxVŽ'Ý<~ª»*++ûêÖý*++KJJ¾rdGnZ<‹È¸õ„oÐ8PUUõUÔÆÏFuuõÿ¾A}A>|ø+×ùù’cqqqdªìwõÿ1³¼¼6oFü-™T6‚Þ|ñQ]Z²:üµ>M8ž³ú‡PÈAŠØ}̧Égº/á¨&æOûÆó9Èû4£’Ï{Î[0ÆòèÎ^j6µCnMûèF1ì8ò =Øþ{¼êÂF"›ÔƒjH­GoÞù$…£>Ä^D|ãVØJ ÝXº±šº¡/àm*h>øièF]æ…¤žKI²†à›£¨mL ©¬&˜ÃèΫT|’eÎ'"’ÔFákЖÝt¢„Ýô¡˜ñ`[°ˆ^ä©«ÇŠ£i¼~cýRÛҌì5§;û¢EU™ùIº:޹¡®vc3ýx›äq˜¶GÊ1’«’WÒ ìc7•áÛZ±’Nl¥S„®¶§˨d7í"ÞÙƒåé‡àÁ^Ÿ9æ´=f>ÖÐy.é¼OËâÀŽÐt CÈÕ­¶2 u?çóf(Ç}GŠãÑ:‚Ô@å:ñ!­Yþ¯t© ), ¹º›AL=’9MhÈR02Zƒ*óB•«ñ` Xʱ#}Š®Æ3ÆH»ZÜ@Uò#„u”2ÔüÚŸ ì"•D6‡ÏN=’9",Àá®&Ð6ÂÊ…úô`ã1VîIŸ}ph¤±B\ÈU¨_¿þà .ÿdwõ¼¹{wÓéÅv Ȥ;»¨ä݈ ™Á*†°˜hš°$0O«õá/ bïùQcùH寃¬b$aUHù¥d³–ýd-ý‰¢6ícð`äA®÷ð'F±˜f|@+º³”<6°—*ºñöQÂa6ó1ëÉ¥/ó ŽºéH›èÀ|ö3Ÿ\2m ë9H[bYËҜ޼G99!¯‚"‘J[|Ò§¤“ÈôæmêQI]ªy‡T³žUÔ¥!)tä^JÉ 's"˜3„åŒ mϳŒþ,`# ÜÀ¢¨Ï'•Á|DCFð$9‡w#Äq”æÔ0ç(\ÝþšA;¹…4¤˜Å‡tî¢3%ìbõÈ¥!q¼Ç¶°“2²˜Ž,ac¨®hN%yÔ Åñïógú2‚ù¼Ï@6RʇDÓ‘Í, H6¶êŸBÆ8„d0ƒ©áìTh0±,á}jq5SÃ1¤Ö#•åœO6UÜH:)ÔáU>`$eñ.;hªô22XB»h!©M¬ç\Þ¥39äPº«¾Lu5xÕAšÓžE…¿8B7Є¹œOÑ'É£kB7ß‹?Ó™.”06a¸Ÿé¡÷Fˆ£+³#4çð Úp.3)¦ }ÙM þúÔ‹rc”œ*{ÉàOdP5¤°‰,à ø0ÚuÌ«²‰öìŒW-½Ú¢EI­’MSŠc%tf)éÊÛ”SBÞb ¦69Ä9Æ2Æò뺖٠dy4d9+ÙÆI}™M>qÌfë)¤!‰G–”ózÈÕ@ŽZðNŒK+­ œ÷¹<Ôœ!s"ø¿@â›H§9Çyp/j1/üµá0Z!tæƒÐ]­x­«}ÙØºuâ==öÞ†¾ðˆ Dd¿XV¸µ Š9L);V#ù0"Â:LaèÕײ7Â¥Ws(TnLŒP#¬cç1˜÷i@Vh›nb.ËÙÂ%¼¾³‚ìpÔ?峑^,`l(È=ì¦:âÁîb YÄJÙ¾³„lå fGîa¶ x Yìà2¢X2•”²™,&/äÉ`f0˜=ìãZ–Òr¸ŒyáÚè¿ØÊ0êHFœ<F£û˜DBLåG30Štã-ö1’iªNýXß­ò2Ìc<™ÏDÖP‰|Èa.çÍ|HEh;²)¤k(âM–‘I;ú°‹K™MCø˜íœË~^&™§ØÇV&²0äRÛhÀ”‡î2–SJM2p?ÃCNn#"ʘD}ê1–aü?ŠhÉÜÊk$²›äREnf®c=%\ÌPR:¿ÚÜÀ%dó&x—Vta)c™K{Æó"ù¬f+×Uí¿#¦À$³ˆ<ð iœÃvFðãÂ0ÿV‘ÄêІc)E\Î\6±'Öתü*JiŒöÕþÈ@„Ú2žE, CûÀ~­o”¦Õ–yªÙF’Ja'•TÖqˆýTQÂs)óØŠ£-™¬bs—¼Ëz~JSYÉ Zñ-©ÍVö„KÛJúñMÂo¬ ÍÙ¹<À\ÒiÏ ³Ÿ6œÃV®á5 8‡ÑtäŠÙÃ2Æñ<Íe,ˆÒˆ$š0( ÝzÑ—·CŬ"Ÿo1•íôeiè ÓYÅ’j‡Ic;‡ØN]ê°‰;èC³ÂWd ;ØÅøݸŠ|ޱ„KÙLj8‘7‡?Tð%aØ]ÁǤ҉%Œ`%±-´ÉMh®ü‚Øk/¥\GÍ1}ÛØC1k(à ºñRø»\Ц` »ØC9Õ”…_—ĽÄ™Þ8¢&Ã~ŠÃ‰<—=჆V.0kåጋe(+ÀUl`[éNI©õõ7×\ r”»z§¬¬ŒZ"–ÃD1„T¶³:Œ}jqIŒ +Y¼}¤‘-%žZT±† ˆÇ8Ø÷x˜—Øf'ÖDrYÈe”ñM6š­g-­©Ï!:1bVSD —1ˆÌ¬ ’jvóW6†BŠ¢ˆÛÉç6„k ù€å¢˜RÖQÌR6q±áêê 1ÜÇJ© ‚TÚ0|öR%!ÖuU~Ç~nãCz³>¤](`ø.uÙL¹»ÙÅF–²…xªhÁpvq˜×ÙÇǦœwéÍ^â·Vù9QŒd;³Iç‚Ðt® ‹Ù`;ØÆr¶“ÌOYH4;˜ÈlRéª~I˜NÙF.ChÍp¦q€í¬¡xš\ÊÉ¥.°š›YLKC,ªŠCAd™ÚØÛø˜F´`Sh?k° bUZÅ}´`.åä³œëøˆÑ\êŸì¢X>¸?œƒ‡éM.`={¸˜ÇÔ¾ÎGt¤#BµÉ ]Ô!6K4u(¥8üƯñ'ºÑ’w#r-%T¤¤¤|†»ÚVV¶ƒN¤Ó›í ç<°3FÃ0=Úˆ‡XÈ 4f=ÂLT'Mg ØG}FPáÉדÇë$Ð Ô¼`æìeùäÓˆÕ,¢-{ÙÂëaÈü6kXCsJiG Åìe&Õle.%ÜÎ~Þ YŸƤ‡y34ô{iHÕl¦#»ˆ¦»¨  T’N?–‡ ¬¡4¤{iO5ÿÆ[T“LeäVy7ôš{ÂÄT7Jx“Rö2€5T²•óBÝmÀ߉¦E2½(a8oËVŠ©¦çq#E\Ç~ÒÂÄEà 7Ñ•©¤˜ia”ô×P(ãI¥/yáòô\Þ ·=¬!‘…ôd-Y´£šK™E–ÑŠáÌ …ZŒá4b;ż°¨³ŽBZ°“ª0x/<²J±™D±“_€¾\Èj²‹þ”2,¬¹Lî–ÐV2–ÜB 7RÈ|:q[Èà6jS/4¾ìd8ÝYÆë4àeâ©Ã>ú“B uØÊ‡¾œ>ìæMp=k(g{Iay¨·KId…´¤]éÀ0òGúCpD^–Ñ””s.‰ñ-¸›Z4ç·$3+T¹ƒ¹µ²x‹½œÏï8DgÍ^êS‡†´ 'ÍÂüÒµì Ó'»Ž—CSUZɹˆá¼C[s€ ¢þtçÑ‘$Úó$•,cz´›ª½ÇŸÈãaV„IŽÝ”s–4æ{ì  ü""ͳv°“6sAXÌËc +ÌËázn;I\K=òhÁzöSAÃ0|©¤’64`7ØÍU¬§!ûYÏ^†‘KI çpy!ÊÆ( ØÉ•¼O4 Éã#ZðÓB…¯K6qÿE"™O%Ã(c$‹ÃìY ¿K9…¡ìjìj#¢Ã|Œ0ûõ}ÃÊËEl¡G8 …AÒ8Ú²–a ÅT‘ÂAÞärf0û“jÞ{ÙK,bñ4 óÌm9º€,'‰ó(gfèYD,‡R®¦¤ô¹úúK>Í](+û˜a–#ŠN¼ÑÝÔ½Ï “,à\Þ£6-¨&pcéH5«(§!åG¾GDju8Ëèź†±üv‡¹¯=ô‰(fྈÕî-4  ‡ÈçÛVZÓ‡¶lfNøŸÈßÁ9°+Ì•ŸË妄¦, Œ\Ë\FÓšºì y©ÎMTó&1Tr«èz j¶Eim|µ½ìç>ÖróÈce4äºÐ’x沞†tšë§š„9õ ¥…!18@iü„ÒI#“]d0‡•ôcÛèJgK"1Äs!sèI…au³‡èÊFâiÍÛ4àb Bn,ãC’hÊ Ö0üƒ*bé̾ˆð0Á:‡ÉÇH¹!mÉ 3“5É Kyn˜¼jÄXÒƒ& æ÷¬¡5 Tó9,ãY¢Ø.­¶Ñ…Vðú²öÄÒŠ?†%±ƒaDýðw3\6Q‹þ$„Q]kvÒŠW(á&j³9ô] ¡FÉ3øò&ùaÉaܶÇ-¬ç2öòïSÅ^r9È«¤s?Ë2RÃiT563šáƒAÀ[H'6Òˆ>4£1­Y A;L5)¬ #ßOÜ©³$l¸žbòÂåì|ȇlb 8ÀË,vMµR곿²š–Œ$‡s(£3³B§57¢âÙMÅûÔ§?ÓØÃ:rù26Ñ‘ºt& )£œÎìáæ°Ë`jÈŸ@Dz–4ö±œDZG7¶’Ë@°zÜL–ñºF¥Iµ-¡?ìj¯­XÉ2Y͹lgô§˜]DÑŠd²ƒ"Î%š®l#¸¼-—Ý  ÛiMçp ô…«Ã\å ʙLjòÒòˆ>†&äDÌÇnä†Ý 9td­zÛìHØæ²XöÕbChN«YN=†°ºì§.£9Lc0”VA›’2øêë‡|š»úáýu}ÉJ¶…ßWƒ]¡*[GƳ‰¾Ì%ŸÂ`!­(dB‡|ihGZ†ù´Jö°—kYAmք߸ƒŽa†¡kDê3X«Ö4QÎ[ä“ökµg'u8̨ß¶…|:p=+•Vcư€Böf,ËÙÊn³ Œ’¹‰¥Ôœ9™™ÄC!¥ü)LaçR%!J£j½èÏ{|LýèO>¥$’fz„Ëó*ÊΛ!¯J"F=>dT_ãŠÂ^ƒ5a­k«h ºäãhG‹ÙÍ0ÖQεü‰¥”RH £y•Ä0Ýt¯4d5iL)‹Éa èÎËlŒqOµ9aUÐQ›÷"t 'yìŒðUŽôUÎ'–1œ{da¯Šb°•8–„ñ.¦c©¢‡hÉ¿±[(a3u¨¦˜6$†®âFÞgsØR±Žt&ƒõlˆx0ŽéĆFµH¥+MX–ª©b*YaG·pÁ·™¨ kÇFºQ‡òiÍ¥ #• ØÂʰ+¡ Ï„³ãRJH¦=YÀv6PHåì¡=#¹’ašº˜á”ÐÚ²Ÿ[Éã}>b% ìe4=˜FÐã­0£PtdL,7†6·1¹ô&›,RJ£IfWèØ‚.ƒÕj³—¶0ŠfäÑ•õŒg*ˆæNð=‰ B´hƒ¢´¯ö‰æ"ŠÙÄ(ÖÐ-,SiÞÚ¬ãA¦2”î|¶h%É8ŸÚ…4|H. WùÛIg™äM1›™Ä<q¥ eÕ:SëÈ„A††ÅŽ},¥ Ø.ï>$>Œ†Ñ‹9TSÀ!¾ÉXúªÈÀ®‚ü°$ß=rÜA4ÉóÑ1rlÎ:òðÓâ8x2Â%J n0ª‘37•˨ϲ°Þ¼*XºßXA :Q²q/s-mÉc»)NIéwõõ>£vÕ€!,cDØ9Ö´ÏìïËÇ䇥³Ýì¡CxÝÔçbV†5Æ‚0]PÎ}\Öý6qEȬ±”²òBŸt©¡-ΧCXÏ(Þ£w“ÏÔ ½×6¶±>"up1ùôãU6‡8Èj–²²ÐWµ“ ¢¶-œu]:ª"80—bö‡9ñŸZFWT[K 0ŠT0Ÿ\®bSC¥I¤=‹¹ŠŒãØÉ6q˜¾¡8ªéæ—†%ÍODàÆv°›2òCþïà0‰ÑîŠv]µ¥¼Ç-t¦šËø˜ëiÄÛ!£ÚÓ˜é”rØ?;©‚o…­•;Éa¥ 1ãÈ ×‚=éμ#;qû‘=Hc™ÁÁ°^E #Ž=aM>èÙ–ÙWÑi¬ ã­ ïèÃ(f>êKHмÜzÖ±<œl¨Ãýü9ÔÒ?Óˆ6ôe©ÜÂ.–róhÍHf‘Ã5lâï\Ë2ºÐ– c½IäeÊèÁpˆ(‘ư°íð—¼Ézús’Îÿ‰Ì£¬c ßã7ì ß¡°êžÇZ–°„¾Ëߨêp±a;Àò0;†)#úb Ïû4âëlec„þýÇãø;kÉeØÄ4œ1¼OS¾NK†Æ¹­êŸ•ÿmàë¼v?K¢üpѰ›),§!ÁmÂoQÆnaH`=9Ä:Ö„i¥ôânÚÒœ™áƒkbýºÊ*fq>cH&–XÎåý«¹š$f…AÀøp´ŒbŠ) Å4&”Ò’X6r€.\~Æ AõkÛC+4à}àŸáì´¥ ÙÆ&ó£ÙL‡°7{"ciö£çi¢óCAj®dS„1 jª¢ŒÖ»Ú{ì!1,BW²7l‹Ïá VÒ–nla=?bz8¯ Ÿ!¼Ç‡äÐ èîc"ËÂåJ°hÞC*IÌä`Hê¨X÷Vù5‹Â’С””˜«¯¿¢Æ]qÕÝßýíÛ·üðåÇþó©©©D… 6§¹$âÂjm×7:²çâ®cÊnÑÄ„%Át&P—ºD…Éô‹èHmî$‹á¡±~”ËÃÿC2uI'6lJÁ£¤„¤^ɳü˜xRˆ¦ß û/äñˆž¨ŽÄP‹d. 5_§5K§ð(#Â0¡)7R—dîçqn¿å‡áÏ‘vc çD4å×ø9‰$ÒiL&†-ãÁ<Ì£íÙÊh^ã †0Œ„{G ØŠ‚}iÑbª5¦‰¤‘Ã;azê"ö“C32yÅÔ¢‚j>ûd2j‘ÉR–„;Lë…iAT3Š8†ÒŽÚDñeaúhSÃÆšÑ‘i´ çÕBZ±‹Ç'OR¥}”¯ÑvwºlyDq>«Â%Ë“A—pu$%ª¨¤!9t¡;)aè]Å6⨠ y9ÜQQ@mbè@·‡o³ø ÙÁà°»""ÿ(ìîfä‚}¾AÖ2ê³„Ž”2—ôàUš†»èþJû0«6‚J2YNbõ­²:JA”qÕþ_˜UÉnîàGÌ XFóˆ}'cXÏn¢ÙJ=.ãeQÆsŒa»¨K^Ó}Áƒ᠆ш(ªÂ¦²¯‡­4ײœ¦¡óÞÎG äÒ°U­Y”Õ.äC~ËUì¡íèG3žáûÜË\†‡EÊ•a¶öþ‡VT3µŒ#›xúó×à|2ÂÖä<–ÐŽhΡ#Åay¦6ç„«À ŠmùIH2’8¶0’\2ØC —†ý‡Aþö¼OséÆtš‡Ûfk³¤±ˆ­¼G¼OÑô¤}) 7¡|:²“jÖ°Ÿ{™ÌfV3'">œW™Go±ˆáüáôduØ@Šýÿ»Å«N£éÆÚO2þ?Æî;Ìêò\ûþgÍ0Ì }é¤7EštA,¨Q±`Ib4MbzÙéûMv²“ÖñÐîÖŽ«É˜u¦ ^ eYíá âDNGj ÇELìŒôÆ¡¡-£cÜëø ¿ÈѾ%ÿÉz³œÏò(ëéÅXVr1ÃcmÔŒž”1˜Š VM˜È %%—L›>öÿfºJ–ÉORÈÒœ§<§ôÙ’†Q3MÎáÔÄR:=ÃÉlX'Ê»“B­”ÛNŸN·óG)c4“y…|:1Ky—¼À`vQEOZÇT×›q,äÆi_X+ö•ãuã²íÉjSÔ!šÇ4–å87S?&ÎÚCÂN±õBaÌøUìJ‡•R\×;9Á~>ÇbÞ¡ùв{’Gn§(¶ØiÅVVp,n£“LbxÚeí§!C’~ˆÔáÆ0Þâ‡SHS±!£ŒÛ@'êÆ£XN¦ð eåÚŒ¢|#²ç[ÓI³Û#ãÒìyŒÐAZ3%ˆD_a Ë4ˆ”ó-vÒ#nô¦ÜE ûÉg`ìk[†}¹õl¡eÔñoæý@¨ˆQ,µÖ0•-¡˜Jãl#V³&1å$±ûUÌŽýâռǷéPŒä¸Ø³{ZQvaM£¶©Ì‰mzúÄi1ÔŽmw3–rÍy6žŽµ|‘—I!+£A›å–ðKn‹EØ9öq57…KæéÐ Ëa.c Ã9ú±’6K¹‚›©ÇS@~¸&N³œ~¬fõé˸â}ˆÞRŽÇ÷ãòhó&³8çy<Á‚БÄ'CC*¢·„îA¨æzz8ßJL&åD™¹?´¾I¿Þž¡¬äí¨s$íÒ.Ê7.£~Fû¬ÙÜIÇL`-Ó¸Œ÷Ù”ñõ|WeÏ÷ª7peδt8Ü„É5ÿÝèÈþ 椵uØÜE x›:³)ÊwM¸”š$cãXú…ìå7°ˆÆœŽÙahô/of=EIzVR2vÚôËþÙt5¿²òVVD}³&´•grÖÂYnææ0”K.ìWp=BÎPÄÄøÉ>²‡SQpØÒ—ØÏý,`*«9ÊØœ¶ç :ðz²ör‚¶\Ê"ÎF·¶7-XÀf.f`LZ©ˆœjMg)Ï35ÏଵÜÈúp†7âYJÖ–µÁ¿ÈU£u ¥á¦ÌæøòZó«Ã>uE”>ÍK´¤/°œN|2ê–‡ø,e'G ü{_2(æ¹át ô]èË 6W}/“x?ç¬þ9ä ©nS–9?»ÜË 4çòoq7g)¤ˆòZñ±Ê?Éz.g"OÒžöYÏó>wÑœE,`&¥q U|’ö¼ÍÞíQ‰Må²s”ÆJ".´r0q©e½• |ÀF*ùïðwpopÔ01‹#ôà®(VöNò9ÂÊÆûhÆk¼Áͱ\XíÜÍ\ná8ÿ`~|÷Ý9’¨Æô§ G¸›YìaÊ…³#!³J®Ç¤˜Hce{9£ü•¬¥‚á¡nO3Ùï˜$‹´&ÛÇuLä{”°žg8@SÞá,Ó˜ËR•ö©Y-²ç I7ð§P—Ldøk¹›ÿfk¬ùîå6:LJ&m× Æ1“‡ƒœYÅClçi*y›ƒüÔŠw8É¥!ИÍ1úЈñôa;ÿA]º°™1g«Éã2ª©áJæÇÇä6vq€c¡ÔßÂÌc¥e/e”SÎf°?*:‡© "Á)Ö‡ôW芅ä`NÁ Ƴ€¡´ ÖLBö¤á1-Ü3”ÇýÜ>~²&d/{¹‡×8Énvq6ú>Éñ²“Ñ×Oæ¹SAÀ©.)ùÄ´é]þÙtµ®²riOiôÎÄFª[ØNG^à‹!áßKªÚmæn 3êf â­àrnçzÎ… sWüÚÁy{ºÌç2ñ,-¨¦€ÃlйäúhVU°7:óÈ],ä~ÅãÑZLFÅ'ÃpöpsÖÓYÃ9dzq[ â'ÌæHp½ ÝpEü…õ¼G >}!R³‚S,aÕQ“lI hæëîl¦™lf9°’ ¬ñxRË©Ï^fSJ NӂޱKþ§&ð*ÝØÈ..âæ²/Mrùîi¡Á‰ó žìe'}y˜¹Œä?)çV~ÉÞ n¿d}“¯3Ÿe c=S9­é¬b“膠a­Ê+VPM•óUÄb>OËYZp„¥ì§åÁªIvæ³TÒŒ™ü2L$r”¼F—Ð#Žqaï…‹ <·{x‚›B,›¶,³¨KcÎqm£z”›¨¤†¹¡¥ÜÒÔĬëÎ9“Ñ0ß„¬E”¸µÆÛ'xŽnuVÅaÊê*8ª W_£_e%#˜Æ¯òdòôÊ:ËNêóyFq޽üœ¯ÅL?˜Ž, Õ3$ZSïs-/²…ö|žghLS*8Â+QQÊÂè#nŒšÁŸ˜Ä׸‚Å9ë÷Ó4e$ÛØÀg£Ù¼!¼ µÆÇÄ0[Bî`-SÙΧ8ÝóMþ ÜÂANŽd ÅQhÈi¦ó®gëxˆ÷h´Ì¾üœMœb»YÉÚ¯zÑŒ/°—bf²„cœe åìf¢þù.×r”[hD?æQ¬3}C‹ôñEvð Ë)à©åÿ -x=6”·3—Ÿ1bžecP°o`  ‚‡BkÓ‘ 18Å}Ì ëñ–G“©O„~}” 0–Õ,庰H§pqF·|d½Å„hW‹æNb&¥ÕF*Î×Pɪ0&§Kƒ¨Ô¥áñXÏh6„`½E8iÒ+ÉÖÒŠõô¤.Crœ^=¸”_F-å~åZç˜ÒÚp9‡sÎø˜(ŸÞÀ¶X84çRZRš”uqrNæøg“>¾öFq9×õtìÍÓwü¯@çu•ÖéYóO˜E1˘Ç)ne1¿¥#¢9£•8ccžñY5Ýj<ű‘þ,§c8…¿Ê™KÈ¿ÅÄÓ—ùŒ¦ä#1§ï8Œ™œ¡ Gù^€Œk¿E)m8Épބӹ¿‰%TNÞÏçèÈiŽq„Qt%K…ñØ?® †ÁR9† к‰QÉFîev,uküò+­?goÐ'{Þ.=ªÆÿ“Ñ#£_Ö9*šštê¼1yGS?e]@hzЕ´fç¸.ëÙó”Ίx5´¡ %ì qÀUÓ“[iÄ–àœme?‹sؘÅq#OÒ—i¼7À‹9CÕTzód"ʳ´a^ˆ¡¾È‹Ëñ—Œ÷sl7㬦߹$€–WÆ<—¡[øFÇ®º€Æ´b5—qŽL‹Æpi{:sE”³(ª·ðSªù [™ÃgY;­“ld`ˆ’ž +R ÇHw†DÓë$÷¡­K™¥¹#,â(aUª|{Œ`·q#Åìå^þÄÙè &×i§™CÇ7hƪظ§IâïÌaÃ)¤Ù…«ýñ ù8¹‡bvÓ%ç&?ÃEæÒ†Òh†§²žg?+ãhK!0;vEM¨âÁ€sæ¾…—£&†ÇäÚ>À3.$K¢c÷&ÝìQtã=ØD{*£cÒ€vqoˆÃûï””Tý Óï£w•ÄrÛ²2˜æŒa1¤kÓøØˆVÁ\x›|¦fmÈzÎì£[¨õ7Ò›ÓÑ“_jŽÒàÆîYp=Éç}Ú±ˆ+sÖVå4Œ‹ÅÜÆ{´ øüI®`¨ˆîe¬£Û(¡€«ÃÌtB–±)ˆX›ÆUûp^Í‹Œ§ˆÑÈim°T›îʨ@ï$ÐT ­ §£üý"•ñkIû£)¥þ, žïèhYmáJÎæpö®ª¤ihª(¦7Çr² SJ wÒˆ9äÓ¬QûfVee\—Õ&ë Ú°ˆsŒå”³‚}9;ªåÑã,c²Ž%ÿ<5`"MC¶- f¥9]«ÙqÀå\{¯:1@7¦ˆOОáy<ÎE”3˜I¼Î FRCGúМ7èD>ãYƸ aµ§†iÑONVåÌçÓ¬ »e>9ÈZ²%p>ÃXÀÚg½E;šŸòlt§.:åM&†|UÌ‹uYÇfй‚”ä»?{žH¹“Bn¢/%ŒcÜ|}´á­¨²ž;¡78š ®,_ÚÁTOk&›n$}y–ö§ˆy´¢%ûc ´û#Ö³ôŒdíãªãžïG½XA1×Å“Q2¹ï—n&]©%q}G ¶1%,Sï0:òPÖ°4¨BýÉD*¢ŽZAAuKù ã–<—gÑ—zö?Ëtf³œbЙ^Ìcy,¾ëÒ±³IA ýWkèż½á9!zL­ÄÝœáI)—*7ÍÖ)¡»¹Œ%|œùÁÐJ+¤z! (d0/s€úìa㨸PÿÒ!ä*«É§2¨¸z%B[9ÇèÀr:0•åüpúŽ;iuíð˜Ú‰ s3b˜ÄEœá£É²™êâЊ½«Ã‰¨´qMuŒSïêŠÿ_©Å¡X«ÖDËê$+(LÑnîŒn¢R¾mê„fhN!ë(¥!“XÍîàÅ]_š‡F“iwŒûµúA, G÷96†Ôðtìu–PÆ®ãóÙCIÑœa7™Xœ¥žlˆ¬&ó:5qÞî¡#§Œ¢^\6Þ¬euéÆlZq5¯&TOÖ“, 4ÑÇ(b3c3&åûxÖÁôœ´rñ OQ,à ›Y÷Ãríw¬mν†py¬R‡æð;&r€ùœ ‰íº:~^c%´ã~ žãf|˜NÚ€7i[«Cf~}Þ£yÈ ïMÞÒªÌù cÛÓȧ”òe^‰~Š­j¤µ$VÌrŒôˆOŸ MtΓɨŸ5ïóW2„¾üƒ¦åõŒÙó ÜíÒ£üMlåzžN[ûè`÷d»iÇf_ÏIp«êx*Ã’|ŽƒÁ-Ë£+¯³,¶¶iN/f0€fo_‰b½Y›s¢vç¨|'³“³|Àòh…!d kÂݱ! £ò|6cXÖ6q-kÀ+uü¨ÆFž ðÃÛ5ò¥ÒuŠ!Tñ7.¥2 MØÊ8ֱ͌çUV׸/‹hIŸŸ^ÍÓál´”TÀ¸3v~Û7µ:('céÇ2Ú0aïÇ¢ÐßÏN2¼Äƒ¼¨~TК½\G#fSÅ©(« u[Mtª2˜µ”r0–}íø>‡YFUL`©yEܹ}½y?½4tìsKoÚ²Ÿz\ËÂÌœ‹ß9ŠÕæS cgÌI½¹’7âÒì ò}e'¶æÀÐÓ´r3KèE}^ÊaõîbII£iÓ¯ûgÓU¿ÊÊn1?¯ íMÚ—MfW±4†žÁ>ÍŠÈÇZÆIŠù ‡™U—ÑgÚÁ9úøÏуá‹Jp¹ÚÏMĪûR€£Ô„áü Ë·aßJ?fQÂlÎò ~΂(;r’²ÐÐׂRJgzDp@#®d)7°3°žGyƒŒ ôòJ˜Ú#|Š¥ æjæoÉÚ‘5ŠYOÝÈ:~õG©ÉeQ±]ÅQ>à(¬g9‹rd¦å9”ÂëcõPÎ8Þç«Ô‰œ‚ë™Åtdk˜ÌÛ!ï,c7›9Ì*îÉøkFv³5V*™ÀëTr#˜Î7)ã>NÒâ´Öœ?¤š‹:M%ŸŠ(ŠÔ¡]Üú+ix¡Ò2éPž§]d ÝÊTòyƒ*¾FòÙÀ½YùÑC^Ê»ÁTÜÌ]ü[ÌOÏ0§iÂuÎv«èÃ\ޱ‚›y™CÜÁ«L ÆÿñŒæu äÍ ¿üm!-;ÃoÃy¹ˆ&]¸‘S)Iq¦‰.vw°Í¼Év¶BlgíÎú-»B ¹¶ìÈNg®a+e¬Ž3–CkKõîü×SÄÚh¹5 ÝYÆÝáe*™ÊrÆr —°!"uí:­Ô“À¡)? Æ(ÞŒDÍOx¨F93Ch°žñÓ¸2‚–ñYžà%6DA¢ ©æ×ñ\ LæÑ—™‘†ñ]Þæc¼O õ¨Ïåìb"ïÓÖ-=ÉÒ`š|è•0T1”0šWbl©ÃHVPHyè¨Ï²–ªx§­sÒ¤üœ¥ôäè ãJFOºŠÔúPgš²œjŠ8ÇI21×î ÆÇ¾@Ū’’êQ üqeåüÚ=ߌÊÌVnæi*kŸd ¹’«èüàÔE\ÏŒ‚º5¤D¥Œ ÿàVês:vNiÈ9‡“‚W‡j^1½YΤ,UuòÝÇžg_†«C:u„)4àlÌÁý¦"^U‘~û—EháÔh§¥xªTËeü,B#K¹•?ÇÄss(áoórã™A%õByWc¥6CTDè@ª®d9“gLžË²–Py!¤«öu&ú±gClÚ€‡˜ ºæl¥OÇ93DÌi-rŽ6ŒN‰\õå›ræ<&ê Z4°ƒŽ{t¼CǺ:6Ô±ƒ#©J›Ý$•`/°“ÿäPà ›R®là"6°–§ cØS;M¯e´jªëŽ`&•|R~ÊQaqÔr×ÓŒã´f~œdéH³~ªúNg7E%3©‡îfmXgš†&%}4fãküžü…oñ|Öþ¬ƒ|Š, ý£î±46ú5<n?ñ Óˆ#,áГ©\Å ºóßÔcmØ9KùÅyæi—=?2¶¡;›8ÈD iIî’Ûkð%~BW®eS4Ÿ>G+â&ÃÁð„m¸! ³ “Ÿz y3Z‰C"8C‹H‹Ï~¾Bö0Ÿi9 ”Ôp¥Áx¬“â;C!~Ž»x”s±"o@cöe{A˜“`AœÕ:tä0½c”;æ¹´B°&tæHlÿ××ÊØýœ¡0$3i°ú./Ƹzc´îZÑŠ£Ì‹Z/^ä`œ«TâJ,®šö\˜Â±9üõgb@NÛ’•4£=sùrIIƒiÓ‡ÖNW¢6]Ms†Æg2,š}[úçüüŽP e>’a?þ¿ÙÃ9:ÆO¦¡§SrÈ™øç(k(¥4Ìõ[iÀºH ÝHsšå<}«ã¬î¤ e<õüÔÍr:ÔÏÆ{G0Ÿ_qŒƒÌfô…gu<3ãä ˜ÜÊ:Ž1¯q…öçû43â+äŽ[c¦IwÎ|îä({è·ÇŸx1žŽL]iYv÷ÿÈ v'ÓãÜžà‰0BÕþ؉ ™èWç¼÷µ «´Ò'çC£Š {É“þ·)mqÜ9{âßGã3ü5jW™ÍynÍüÃþ?{ºÐž¼?ä*l~hwõFe岜´õl@¯¹|Cd½ç’/úFH³œÎÊÙp¶žÈQŠ×ffœeôg3ÝXMŸXzßË¥És½#ZæG<eZiÃîHÔí,óåTÑÞôc* pet¤*âPo¹ð’ŸŠÕ±H¿ÝÍ@êFë(ëÂÙ‡Ö,æT`¢>ÏvNE.øá%ßèXôRú\ãÐh5fMd© ôFkp;¯$¦dÖ:ÎÑ$rkRúó—© c$/§Uj¢œ=+¸D…¸<ë?¢’3Óø£Ýdf¿Ùla}®ÔC—GompºWůÿ¬r³Åck–«þõ_5ilfRè5çZNG¦ûBšóeö³/gÿt˜›™Â‹Ñ.NùL¹::z°*¤®»˜”µ•íÙ-¶G»ygÃ|z&¶¹U¡žŸÈBs”Ya«<ÉÞ˜x»pŠÏ±’~ à)åb–òuê3½!x9͆|]3Þ˞׌0œNü9º 7ðv¶Šœ‡y–ž¬ P‹Ø1¿É'©¤ݙɤ𤟳çƒVÓFdèO!7òãÈéÏótæ¦àâïàþÎÜq6šöéÉM9#«8Ì>ŽFçé‡äï\Ë4Þ¥-+FVF¾eZJŸæ8™Î´æ=ÊÙP+sŸtaÚKUX¤Õì3ä0b{ô6Î1ˆWYM/†E¼}kÆ„èc:—°FY%A39Í[ÉeÏÅ\M_êðÂI¥3o³„Ð!ÒËÖ²2*Q3¹ŒU¡¬ÛÇj&°,k{µ…5–³?ŒY)Ü.1)Š8À™ˆŠÍcÿ²…Ä_ß7ÿ &±œJ.ge U‡ÒhîöåxŠ/Š[ònwg2ïåèŠñsò\ ÿ‹Ô0/T¦Ÿ¥†•Ï©ÅÕ^š4–&ßdú°1v½#b@Ï! ´iÂjTÑžó·””ý‹bà?*+Ó#hYöFç)9ä¿Á±ˆ½‘Ó4b%„fOÌs•ÆÜ˜”¸/ÅÞp=§XËtë6¶FŠù²0š½K9¥Q.›d­ÚKR—½‘yúKÖÓ6d¬7ðV0 ŽÒ‡¼l•å<¦ {¿˜çëG{'¹õÕ IDAT®g=éÈ9Èœ‡¶æ#À“°6TLOãXÉ |ž5ÜxaDa2ä§ÏC»—þŒàMÖ²]°Z‡®wNèõ± ÇÔa¿ào!Ë©ú¥ëÙÊRnä·ù>•Q”mùgõ‡÷ý!ãç{4=z]«ÖüyOÅc±{ví|¿8}¦â2o\Róò×­÷v_gVò8í(‰WZÚÏ&Ÿ]Ô¼ŒñÑt¼…ytã™@îŽgm˜²—²“VlâW,£!E\Ì>Þd8CèBÓÙÀ(F†ë¶€½\Ë(6‘a*‡£Ö¿‘<Ç—"6z#w0›kEü$h7¿`!ã²¶eíæý ñÖg4/PÅYþÀÞû»d2—ñ{ö³y¼Íl:q)ÿE1ghîÔ:4åy>A)-ƒ&W¥¡DXoÄP6Ñ›ËØÁN}™Ç®àãßÚÉpº1•|Ž¥,â?8ÆÇxŽ2ú±–ü—Còz1íiǯYÏÎñùÀ¤®Crt‹ŽT!W²•jƲˆB¾9 ׳6*lóXà 싢РÀ̉P·ùÌ¥0”弯’|c2¶fÏÈ ¨Ç^¶0–ã9ЃЕ–¬ ÖpÂaÌa£XÈne“ØÆÁGiÕ¬à>^¨q${¢–xÿdÅä[O¶ë´f•ѱþËø>o0™jvpUˆÈwó)*)ŽHÃlÐãîb1×ñ&#©Š¥Øqá¢ýÙÎH~DAÔ–ÏO6åFž }àžÈÃ;—c¿©}'ŸÏS*ó•ì ŸsŒân¾"íÝg³êòqÞfKTYkÑnù&ÝiAÌy‘Dˆ¯²“ÑQ’Oû0ð4))ùÄ´é}þ…=m 6Æ–èp ×ʸ›c<Å\&ðXdë%çæˆœµU*Ê÷޶S;fQÃøä`MЬ;±†ÙÁ)ØÆÛ±XªÉé¥ COZ ž^#^žP;‚üIeg"»¥:g®êħÃùцC¼FJøû£—ö.Å´ ßò(àb'{èÀ†ˆ”®C²!Þr²dÈÄs’NÒ ÏPrGá1™:ë3ˆ îñSÄGWч¢8}ZìŠês 5\i=ïR"«ïeÉzÓ¢®Y—×ûݼù­³êùÑÖz÷ìj¾¥óñ'_Ïv«jÑ·ìäCåêÈ^5·yy·S¯ÝãLÓþìÝ©¬à9öÐ?’ >ЮÔV)ÏŲ¦oÅÒlS¡õ_ld3ß 㡈y|8hF½È04žð·8I)ƒhMMùIŒ× ãý0ûy‹^,?¾O M£ú´'¹›ßó*oÓ=&Èÿà;F–[Â;í&ŸÝÌco0F¤^2íã>nçûXÏýäÖ‹q¼À.¦ò ]Š>§%ÿM]®§*ù¥òÉh–õZøðRXó­¼G7Z‡ .ÑŦQÄÕ½2†GLÁ[!ZúÌz‘ãð{ò¸˜Éô¤Y¯k‚·]Ÿ!ôâ'ìåÕQ¥ø ¸vôcUÌ^ß`-Gíµ”´gë9?¶&ì•Õ1&ß^u™Rë jò´Ïž§mµË׃f¦}Öììy\Ó1ÖÒ/Š–“ÙJoþÆãŒ ˜¿ñ©<…YEa-šÈ|æ± DäõØÄ泋ÙÉ©H7¾šö™ó®€ƒ±=º››yœù´¦/g3s‚Ÿ0™Môdù¼B'G ío‘%=•mŒå¸“ýa*­á]އü²Œõ|ŒᎨäk<©6Tå“1-{þ»”ÄLv ûéËo¢ ‘ÍNÁ‘©}u˜·-ŒdGLéQÝÃNRÌÇéPƒØrj¸žæì¦h$”©“šÇMsFò.aÅÁñIb¢L/)Y;múø1]åff?Ìšœtç¼äŽÛ.WÂß- †s¸;;ƒ¶Ò$*l[¨¤cȆõ²$£”Eˆ¸ °ì¸P#[™c>ͧCô3úq;ûØIwNð)^ŒFåàHh‚“Ý9™Ù})§€;)a5%44‡‚0Z§ÐØhK{ÚÐ$GⱎÉñk;p/Pa’½(dK$ʧ-QG®í~_šq+õh‘’U¡ÝßN0 ßÀìy½åJÆ1CIž1!8LýÞžD›Û–ûOVð6MËXÐôwWuììc¶ìpþ¼ºÕ5'»í¿úÙúùKí|´É².§:—œ\Êz‡•çv:†Õ±Vætåte&{y“)”‡‚¿€ÌfqÀþÓvj!ÛºüŒR`)ÒʬYP—㌧uPB*èB¯®ŒãÍøöfÌÈÈd­âùˆ´x¦\œ§:ëÏ,ŽT£îÁ–Pl'§ÝWXÄ—‚ï¼té:.ä‹ñP²V±¹É§††Q??F£¨Ëž o¿~œüˆÞµQà`Џ?.åš<×emOÒ­¬%TЗ«9I'öÆ6w9õ¸˜£ÌábÖ2š[ÙÇ>晚5;꫉¼“Ç>¾Æ­œäi>IGöðêðéI!›ò ÌjÊbÎR—F¼F&˜;)¢6Tø˜¾¬d³.,ÒCx/îœÞÔ¥E¸eŽÓ)̵B¤Ûø)õCQ¹ëÆC—Ü]òvd=ãj¯08n 2ø¥µm×î1^=̲å&Ó6§¢¸³Á›_®å‘œ9æÂ6J‚›tc&­9Â*x„m”²™³´Ž*ý‰ lr^c¼(2’†²“n¼PR2yÚô~ÿbºªˆ,à+sâJwÄX0žü ³?’Ðn9%ÀùÐ+U·kgëÙÂàÖ°Á\Ä&6³“!4Œ©;7¤¹8Z…ɺ쌅sí\=€9‘`½-Çh•PT5 dw 0*8Io^ç –FÖên"Ÿúá!MÞlઘ'R¼÷z¾¹ä¿ë‚´þìgSh:÷Fc D$…!ÒmyTèÛÊõf­¡+mYKs ™j¾mâ.ÜC eÜÉq.ã½ÃŸp”w©Ã­®Ë{ð\m«~ÿ«ê>;;=ÿ™S³§ä YrcƒÃ?Y\§iM¯·/ìðÊÀ’?ÝXÑogÍõ32»Zæå]’-zÞÚ«èÆÎäþÐkHGö2’jœ˜ŒâEÎ6âfQ/ž¢Æ˜ôf¯²ˆntˆŽÂ gá}ºE8}bÊ(:Ê~ŠiÉ?’Š:㶬jþ‘s‰˜ÀE'ù&EL¦˜Rš„C«I Ò‡²‚׸–y&d4ÎjE%c#ý«3ç ړ欅íXÎñtBjö>k¨Ë‡íf •œf4g‚Šý»¸–r2%²£Ö³‘5ô§uÖYæqÕaËëE«B'êÆÁßd½È€žOï»’ǬÀZ¦ÖÑÚ2ŒwÙO?:…¹xY¤Ê½øàd M>¼Æ¡¼ÝÚˆ ¦Ó8–³_IÉsÔÇ šQšµ4T ÉÓvœ·XCËxLݦä|hTZá¥uzš“úg=Aº¥uFý|³çŸŸaÙO%ƒ˜<šO°„÷8”µšM/r)sx‡Žäó"sÃoÐóAàÒ ±:–ì)¾%½£m‘&þÆ‘.¿‘ú´ç׳00'i÷Ò>O1ÍØgu¥ ¦€JnÏ! Ô†¼”„f{w ’f'QñZ0Ÿ&1<ÖâKRòžË“S’@—œCÝòN*ÃîÙ8|)é–+Ž4ó"Gó¾èW%/ïzp‚²’’ÿÂw5«²2m6WRʦœtç$C¸‡²(Öæ” ÏPŸB®zðÞéÝ1næÙØ—iG¸S³wp,7†2ù‘ˆóUÎEhz[®ˆO<ÁW)¢WQÀ›Ñ*Ç¿ÅFç–Ó8¬¿NC^t>Š;¥B»P²²™Ádùo²›£ÜÌ‚1'cör6‡¬ëöRÁPþv<x5´£¿ãʰ»^Ì{\Æ3œâ—³Š­¦gÜ#y–åüO·¾yDS'BÒÂ` wöO#E%¥½Là0yŽk²®;³¶Iõƒo{ä–.ݸûÑO°ó×uƵëseÿÕ-l{²ßÞâ篮´9óµWÿüÇl6æ„׎)/¥5­XÎm, q]uN"x’í&uIŽp5ËèL1oq óSô5_áyvÑ‹‰Ìæ&þœûXÀÀ0w¯b$‡Ñ2ùHºPÍÒX´`.ë¸=@² ¯AÍ9†Ó›­ìc0x:€=)q2Cx‚åtåc,ãáˆ{ßÍî¦,"—P7B½cǰ—©d8Ãê†ïÉ ôálĆã6q˜Û8É·y<\[ø2¿Îù"7±!ŠÕŒ ÐæÖX|NÛ“¹œ<µô ‰AF`—ò›˜Ä˜Ô-g'¥iÞXƒ:Nµ.ð‡Ÿ,D×±‹[XÀNRÁíTЈ¶ÇP¦óNèö26*̵Oî—"ÀhÛù*}(åÉ >Ggá,¡#ÙÀC¼LcºÒ“?ÒŒÌf.çèAS>ˆù qåÓ]W›Ô¾™/°ƒî ã»´Lü‘HÓØL«x¬ŽE£½<‚m‹ ÂÎlåsaxª =p gù$[hÀj¾Ác ã’¶5›ÒÀL´ekjöë(a™áë8܈ç1ìßÀÚbUSèD½aLb6]¸(V–­é¬¢Úë80È)g¨à ?%“£\M Þ¡ü:gÓc\#Àõlf?e  ŸaB××xƒá-)ÉÏ®Œ»å3ßøã;Ÿøá3ßýɯ›5û7Ú15‚á“ÿ;‘gÑOFr‰œf9¡È_å74d7Ç꩘Œ£%uùN„Ã…!Í©=‘!¡}ìÉõ‘îÜ*p‚·ò Úq[NJw7n éÛCôcy|‹ CšãŠø_¿Ñ9Ç™ e—È·NzÐqŒà¾H­L¹æµRÑ ô¦8'ß½„§¸›aŒ¡ˆ|ZÓ(8xÍòLÍ÷pœœ®b|d`ßKÔ‡¢1š~à1~ÂôÂ`ß{sª34å»4 9£µmí•çùö¸º~›·©U¿Ýö¼Ø({î3ÙìŠlvaÍéûü¶è[%Ÿ¿®ëÏ Š¶Õéós}hö L;¾ÃMq9š]x®r_Mãoò¸)NT1©ƒA ã4bOs Oðåp¤}‡Ö9ÙMhIW~ÇïXÆB”<’{y„¢8«mø>7“ǯh›lªÍü±ø|™¥ ßçÒTÌɸ˜F´¤˜®L` Ó ÎûRÇ0Œ/Ò+$0ߥ-—9_¦­i Í®üš‰|š¯ÑGÄ_~œ¥†<@k:ñq.åq®ÚК?ð&2ˆ{YÂiO«¸“§p­ø"÷娊“þð*n` Eè{Zò;>ÁM ¦(æF¾Ok¾Ã×ñ¾Ç/JŠ˜öoÇäÇ¿;39Lõã!­½=ú0:¾{*®Ö‹ö~I É“½éŽˆiÿíù,­ù<-(¢7ÑïPBn§?Ÿe·P’у’¡I¤üdb ’É1H¤ eØßÆØè }—ïý¿„Ýg˜UçyöýßžÑ:Co¢ƒè @ ɨ‚ ²ªÕ\£ÇŽíرã'qIâʼn“¸(²-KV„„½÷Þ™¡÷6LŸYï‡5ÇVòXï>ôSö¬½Öuß÷uçÿdT|XÍi-²ô76ä úñ]nÊ2¦þ¤4q;ÖÍd–I±}!nìftärhEd}Ž_¦[|åíYΊôÉz–z´dr–x=}¬ZÄ•Ïþ3›G Fzwe\F'¾É¿0ŒQüS€þ,¿MX,Æó%òã)N]qO2”(àóšœÞí©OÓ¬ põVy&þ9¿§½øGÆ‘éÖíŸ6ì*~ì¯Üÿ­ÿuûcÿãtõÏee%\ nf--YÆJ™œÅç¾Ã\H/Îe%¿‚û9Lv…(#4mÐ$ftÍɉ-y[Å1'd-i`Ýô`=ÛXº‰V ¢9å9d´NêGšÒ’Vtg/Û(&‰>ì±æÖ½*K"x5£½_ä› ceœe81~lÌÞá@ªûÿòHõ~7æÉü$H3×цSÜCKjØÍ&uZäÆÐ‹]œ¤Wl‚F²„K4ã2ûèG!_™â¦0Œüp^%q}…†e óÜ|Ú–o;zJŸ•…ý›eJZÝ»¹sÅèógZä×Èí}:¯Õ¯{¬=½=ÿ£Ÿ¼QÒ qõ›_ó,›fØZòÈXÚ‡ýV4¢2ºÅ÷+ðIس«®¢”;™L'šgTfÔg kB—ÿ ="Á(á,O³‡•œ¡# SXÄZ¦–Äÿ8Oi8…E'êzŠiÀ 2Lg³è˜ØIz†‘n]Â72’½Yùp§(жæNJH;¦G½.¸_:GYL£¸“Ö|Ähže] ÞZG`l[^á¦t8šç‡µv³•qYTè4ìq?l§ ½¹È^aÍ£·¿%º^Et¦[¤÷=L5™À^L±IZšÓ®RšMÕ!µÀG‰ÛÄuQŽe´-Ó›¥€{ÎÆÀ§C‡”ÀЕå1Å<OÓÙèd. q#2lcrPCÓN5×Ñ‹}ú;*˜›ëI^à5Žs„CŒàP€CSNÒ‘À!¾OS>õ#¬ýËÃü.Ís"!3½gÞÉÒ7´|¥t…[΢ÈIHƒÍš,Ÿ5û‘Oiæ0œöÆêAÇÕ^½¯3ŸTv t¬( ÕA¯J3#j³N`iâõ€O²3†GØ®КýŽ^f;­Ã‹3˜3\ÇQVÓŸv‰â¤.ßsIØã›ò` 6&Ò;ÈÁè~ïAÕ)þEzE@_GÆršµ?Dcúp:.N{º~íêÅiFŠéĵtb&Õäñx„š÷ UËQú±‡qÜÂQÞ  7Ð(ZùiLøH.0<«­q(öi•ÜÃZ¾È5‘§ÐŠS àírLöæV;Ыù¨’Ë#vvþÒWË>³°jyÏ5]÷ŒÙ±'?oÙ/òÖÖm-Ê·mØÙò{Ã4ýúÛš’Ç5ôà(Ÿe3­ˆÒ»8³«Ô•uWBÚ t¡×™b3YÀnc ¯PÅý §!‡è¹À½yV,%ɱ7©ƒªQÿDÊ)àDžm莌K5u9dKÃ9{>Öõ±Ìࣤγ/v<[ÙOÞ‹oL]) AkzЀ7©N¼˜Ô™Nó[šÑš·8ÍšÑæ]sôLì'¿¨9ãÍ÷#0â“O YÈ{¥7'JÔ 4^HÝ‘¨û)ÕéñPâ]ýás¡þG}Ž2 4f y“#TÒ5ǡĎ&µæ|d щáœâßc\”Ð(~Boò¹Ë!DêJ§ ívÊ*hGψ—[œï'ù¥ qHt¥Rˆ×ÁUhÊ8†–x=AGgo.jm¤8ŸŠ|Þe‘s…‹Œ¤)Gé{Í'ØÏZЛ呒¼>fy#æÊciÅ㽘¦å-Š/»‡3´ 2\½zno YU]75ƒqæ˜C%-h‡Î4Û(›ž>žs ¤yÌï»Ó͈ 0<~ãIZrŒºó¥CDæ~ÀåÄK¼óÉ-{o>¢!Ã9N1]"ÇrMXjXÂ>*‚òs!¦çÓ$)J¢<Swë¦ùijOUÄ’ekµNј¯¬˜5{ö§,Wi Â{œ¦&«û|ŠÏÑùY7ܬ¨/©cWVCoZ–pn&Û’Ù”c{!KO’.ŽG-ñÏå¡ ßÏ_³žk)ˆ¿çtxi¯°Ÿàk8F+Zι.º%cèÃZêSAE8vÒ/¨²_7ÄAp7³ù}Ü1"N~‡|žÂÈ;GÁË9úåùa¢5K™šcVƈDwú°™|_Ù˜ÜqÈÝ?˹Xš×úšvKú\ºcQ›—&å×V¬l:ägÿqlñŸ›¹féµGßºíØ„}ÕßÿŠ©‹áõã¶í ûáJ¨¥8øªE±“XǨ¶O»O§c&Ñ78á"=éÄÊ8æôŽ‘Óq8ÎŽc#}cÕÌM,‹nL%ûÓ<ºˆÌºó¼cjm®5–›9³žo³ŠËLdýù0RW) Qkšƒu#OÄ1½;Çòd/«9EªÙ7ùŠ«ˆ\OÕúcz§åùj­×8Lç¸mfGÚÎGˆd“Óü&ä3™ A9ÁÙ<“k}Àð˜!=”øA£>ÁíTÄHÿ0õœ†J̦ˆyž­õý(‰XÔ4еŠå1O²ðZÌ諯±ü!ºÜååz,±7xmY:ÆrÖ³"ü:ӢРÏb%·1 øñóC†¾)6¦iã$‡;(åp\ÇÎûM¹‹]±²>Ü+±(¦ÒèLœ®~Mq~p.hÍXN7q0c7mktäKHèJ_±ŽË‘”x#+hË­ß•†1Îäkã q<«ØæG8Ñá®7ÏCiTº»YæCY¾Ã A÷( XiVyL7”W ÷ÇðéjñR|c~,'ã‘¿ÂANð:µ¨^‰ÀÉ5Y£–Ï³Š“Œ*(Ø8köCŸ²\5ÚØÕו0‚]¢w Eîfräw¤\íyô¥3“8ÊxÖÄaÿN–PÂ!a%#Š;'.ß®HoK‰k˜ÂèØµ] ÑAú ¥»Ug\Àžof—ÈXŽÓ‘<ÇË!èHeT屸= fj`²óìs¹—Åä0‹¶|ÈuqgÔð~ÇÝœJùÁÔk²ß寲…)ÔgWÌ«gÝÐ-yˆíÜJ=~Ū0p¼Ív°Ÿ‰å œæ-ƤJ0Ö°&´C(d5EÜ—ø0±!Ñ”~ MNü˜!Ìsk­Ÿzv·VÔÛõÙšK¿ªº©¤|×ä‹÷¿séÅgÆ^¬úòÏ?³~s· ÃÆ}ïÃFÎ|ùÕ²o}&¹÷ ÏŸW4Î/ŸP¹#²qq‘#<CþãT°“³d×”[ø0Âa?ä Ûù›xމ ám®g!GØOÕ…”ÿfqs®Ÿd J¼•‘Ÿgzm]S~1ëiL>Çcò_î&Öx­ÖD†ñmX`Ùg˜Á|fr#¿¦”oñ1x›KÜh•I4ÒèxÞfhâýˆqz—‰¬âW‘tc ™7ò6ë™Ê<RĬ¤O¬ÇÉp4ZñWø&óC±RÉvZð ¿cHøñ/ü0Ú¼O’Ã;<ÀýŒáï9È~n¤--ØÇ’Äfîæ ÍÉçݰ?ÖgóíǼ[¥µü_fñ!¿aD¢o†o4Ñ¡…|?‚âVs7gø,K)á<Ïd•*Yå‹Ì¤?SÀîÐâóÜÅghÁ}T²ŠÃì¤>—˜ÃÈå4÷3‘-, „3îd9µ±w<Æ!vPÁÓ,ç¶ò,Ó˜§Æ[Äb9¬ ý¥@ þ–•TÆ0åTÌ™Žqžiœ§ùlbI¶\áZ6SK û™Á(—)f=ûiÇ%ó6Ãm9„ Œbß ˜?<ÀÀÐhl‰advpOÛˆL(æEœæn¦óûØD6âo¨¥€[Cðys !–Ò;K"_›uyŠy”ÇÌ,7ì¹åÁF8Édêq‰g" ãú²š~ôeyAÁc³f÷û”åêhˆnÿÇëá=»›-Ñlɰ2¢9SŠ]ÚÙÍ«%ÑOkÀ»tŽŽÍ ¦°'@ÂeäÒ&tý«XÍX¦ÒžrŽ…þX¬ ©—+užn`7ù8déßòr–þ.Öqoj7“ÃC‘hМ²DŒß¡ ‡Î{¼K𷥂áí?D}þžùTD¡y‹Uq6½‰Nq7?Mýââ”°(¤A¿ªTN ÜÅ2žc'¹ÉãcºqˆÛùˆ6©î3´ÎûèI9wðÇÕ¬£1-ë™^íQ˜s·ï¯ÝñšÓ7e5Í<¹*çw_¬ú×­™¼,Q¿ë×>bÕø} ¿R½³AÍ?|=yö}Øèç¼\lYó(µi²NMðfJ²ÚUñä¤÷ú*F³‰†ÜÉ.2Œõ å$ÎÈc¹‰Ìmzʇý˜á…Äsõü¶Æµ.±>ô&ó#ܯÏòpÆã¼@SPËTr…™’•Ű”·‚S×”…|9T{x”]tã/§d}fÆ-”&,ïæyÁR;@W^á¶Ó5ØW)c «#\õ­ )g8D{^¤-×ò9úòkÎs Ìâ½9Ë\fòKŠ™Å#‘é7ˆjð;~DG~Hiê#f%ãù¹Âmlb%‹b‰ÚOýL]~MÓh«¦tà“úMhÂÇ\z‘Ïç¨ &u=ŽFöÂEò2S"nm]Va¹î“Äβ,˜çbæÄ\­/‡Ê©+E|‹6ìàiŠØIºæÀaúÅ|)WøUè8:÷qË·ò:7Ç­ûsjBAšÎ÷œ± IDATá¶³”m4æ^Þ$Ÿæt¦-5ÜÇn^ kXÇßq=Sνlc4c9ø´ëy7b(RÉô¾Ø‹b(E<Ísq3‚BÒãÝF4å½µd_PnS^Æ»lˆ‚Ü6 …M²ð¡'¬>ƒe4Êõ×5‰_³%ô¢³™ÁÌeNßrq°Ig4fñ“ÖÆïšÎfý/.kÚÝHm¤_6g»ÆB63­  õ¬Ùýÿãÿ÷«9ǘI¦©®=õÀŠÅ¿S–fñÂ')¥´ /ð­Œ`scDÙ–$"}G-»aÀÈÓIø(êGŠÄ¨¯’dêjéã”Ò?Z7"¿£†ùœem"Ô—Cw7W³&m1áïB!'™Bçã.üˆwãèÓ8:{©‚ódlmrÍ«1Y=!1 þ_Áð½Â*Ø8´Žï…õ¡ gy˜Ý´¡oDa:Ë訶éÂPÊ&NPÌù ±a!ókÍiP®×ù»69%ƒë=Óôý©¥ÍÎl¹7™°,½ª^nÅ• ;j²®2}‰U­ýøïu÷ü™ˆ0_õI2æø¬ŽÄp”ýô Š/fìϨ,Ÿ‰4a‹éI }¸.×͉b[zŒ‹LÍq$Ñ‘º°:Ç…ŒüÄÞÚº0ˆ#¬¥‚·AgZ§zŠŒ•‡ÇÃ`”z´Kù/úų}…;(¤-Û£MÔ2ˆm¨Ç‘a½—…œb~°´_̸1c/E”³ÌfMcøú;‚O?#˜Ù•t ûàI–„µñÿðÍØÜÔãyf°šŒàל¡TsmHTNEæ\ ±³54Í{XÇ`ŽFNÇyŽÐ÷( ŒÖÅ”–’qSއç)ä¬ SãYFðz’8L=ï2;cð>›\ 9Ë|ý8瘘5¨Xÿ Î^.SŸ^l¤+Ž”ßÄM^û4ãDªÄI¼L;^g7ý&rÕ.¶ÿŒã¬ ^eaDuœ§$phÒ†‹L¦5ãi¾[éÆIæs2â‡VEÏ-MÚFwšÒ8š®)ýò&vÆ–®íiÉvц†r=!üK3"ÆÇ[=õ<Q;UïYÌÒ”t^JmäUÖb•ή‚‡ê3"‚C×§ÏDóÄz:2’¶ÜËIÎ2’RÚÄŠ˜ >1˜–i=\ý>Ç®¼ŸÕµØÃñfžLŸöAåîÎ5¬)(Øþ)¾«ee×Ò/"wësg|äyl‰;›Ÿ‰;¯c³Ð;mè•ÕÖlBZüævRÜþ$ÀŽ7²)Ò]ë“a+͘ȇtˆ¿ðà'ת)¢-Ç8ÌHúp™‚X®Ò`Öúœb B ¹3 og#l´œ.Aƒ)ˆµœæ -8M•Y¢óQ;Rò%®£2âÛW°‰¡¡~7)Å`˜Èílä1jè®õn1èNíÖFàÞÞ\%uКÎ2ž3a1®¢[˜Tú³Še çt (ç&k¶'wÏOêu*=Ø(Yü§fCš—_ܪ¿Kc¶f–ŒJŽ0¹Èöž]àÿV{~(õ¡NL 8æžØ,ײ›é’¡I 3:%zħÐ%,ñ=cq:–ø]ÌSèÀýü8cpb=iReâhR×:ïEÿJŠƒùnl`p¥}Ñç9’èÂÃL¥/oq 0˜Š}ˆ\`{ßš‡*}^®;;hEí¢iÓ•û(¦˜s™º«}êªJ6§®’¡˜mlã‹ì¢9eÁ*LSws3åLå2gèÊZ°› ,¡3i€Œ4ÝnÝx>ÌæuzÐ< _E ƒÓ)ËH YŸÆ„æjÕÔŒ ‹ÙIoú2JšÓ‰…l àѼ@!%YOw­ÍžÖ!,§­ºä— ãØA.õyŠ·F}vÄn ÞY÷jëà?Í qÁ òƒ{RÄü@K ¶³t`/Wh—n܈¹a9¿Dgòy-+#´ òå‚ÍF#zQ"¯±ç8›Ñݹ¾šÔ•û31ëê¡Ïiï± ¿æ4}˜7¹™4#Ÿ öq)BšŠ¹“öÑë{/«Ņ&«k)c]¼ÕQtà¹Lb?Cò³Ÿj:Ó726ÓÒ[8ÀWiÄË‘§³‰-ô`ç#¯îHV1¿š¡ñ_q´ÚGÉ«±ìW·X°û­xGVåÍD+JØ‘Ö% >e¹êXV6?„•e1È9ÿUÄ|(ÛkUKn]ØÌ]œb[beNžò#¶3_çL4¸+²¤9d™:d‹ʸܺÖÿ¦ ïÔË:ÆMˆí¦Le ncgÖrUØCáæ»ÌÉøç>é`hNvñséÌêx«"Ôø\ÖuXKÂpš0“ƒeYJ÷xçéNóNú¶õ$·r‰BºóQP¥SAÇô¸†ÃØÀÁ,Òù1¾ÊûÔçtlZ/RL†{"Vãhe^æ"—¹ÌßòƒŠ.Uº×Þ’{6ûúgÜœ·àË•+÷ZÐÉ€Úä–er×ï1z§¿­ðoOJRþÖÁMl86»ŽìãÏRŸ¥!Ú›ÔÑzR»ÌüxÈOrŽ‹Í’:º|'^ÁâDAÌ{¯î“FGáþB€‹NQ’çž¯ÔØÍ7x™¯ÒœþÀêSN;°›ÉT2˜îü9à^÷q KS‡@ÆáÄ(ÞgWôSKòKìc"mÅtšgiÇ Hì&¡a„”¦íŽ$,ä~¶s;ÇÎÍ?;‡ôk+ø«8ƒäŽçŸ11ñÛ#æz:²§¹÷Û•ê<Á±à­}zÿjop’¡Lâ8s) :xk2y¾W«¯Òf|™¨‰›ü\ÜŸ£9Ëå<_¯õnˆ)R[ñ>ZÓÆ¼¨Üˈ|oàžÓ®lJŠIÉ…±W«Îª’©Ov?ý˜ÄÇñ)¤DÿÔ4’V€±ÑžMASYAKªxƒ+´c$8Æ6ÎQHÂ&¦3/´ —#4¹œÎôfíÕùMÆÁÄn:Ś݌É,àùò➧óÏôˆÒqU¿^a7©z»Š£¬g#§óü²Ö£Êíâ›qzNeMƒC󙉽NîeµºÀœ_õ<¥=]Ï^ç| XVp"”½YÓ¬ÓÌd Eñ±¦7yºìÈJ9/å!>¦ÍÀØ,4k*|ŠÕ”q íÙ•óB¤H§²ÃkYÇ¯Š‚‚/Κ=ì/-W?)++¦}Xšk#s/Ã6p ƒ8A m™J#òC_°›*nc8¯p*(±é ñ$ ëË¢Ò8k÷#FD££­º6N[$þ3 Á·³.r@R~vªŠ© x]%çÙÁá¸Ýñ ØÁ—1ðeY‰ò7Љé,æt|ã.Gÿ!ŸRzó8o0ƒm|›zsœ§ÙÂyγ‡s”ÇnJàšç+æ]Úó6wEwþhD86¡oS<ÖÎü9Ë9Û9ËR¶RHiÀ('³ƒóŠ1õGé:Ç%òù,ß¡o3‰×8¯d»õ»L/òÕÝUO¿jöSi}Ñ™|ÓÚùéP?Ýgñ5ª'ò"W‚RšêMöÄ5¼‘÷9DÕìb7.°B&óß4Èõ팢Äþ“·Ľ¬a'¯ïÙZWSgüJSfvDWa#KsÌÎQœ˜ÃI*i@¿å#Ú1“Õ<ÎëÜË:eLLü’ Šj{'¿ yUúa=G'ÆÒßq…ÍÌd ÃØÆ#ü9¡§x0Ø(]¸‹¶”ðÛÐ…ž{›ˆ%[Éã‘øÕ‘âD·ÄËì­çký&Rµ¶ñ4;ùÝÙÎCq‰¼ a·òïU×u–F3š#Ñ\ȉf|&ñçH;Ãpzñ=éÆÝ”ÑŠ;x<1”ë9J1O±“§)f1‹¸Ñæiwä(kù“´çŽ`n=CcÞŠ ¢PK7äL4”z°„GiÍâFV‡:…MŸ¡ =iÄrö…wb ³XAZ1‰|—r ùžgJ(¶òrXÐ÷J:ñ0K[èHW¦r7ýy!P c7ö:%”†Sêx„'$Ô#—k¨äŽˆ'½‘uÔ¤-ÊÄk˜ùâWhžñƒŒíl¦S}jiÈt6Ò–>Lá;ªèÉòx‡Ñ,¦ ²G¹‰EÄ[-å^–±9R÷QAnì}’hÍ ûçЀ§ÙÆÝ±¿H…¼-Iøë(jËzÊ‚aØ— Õ ¤–áË;Êß°Ÿ£4 ä„÷jÉ%æGƒ¨ý\f=«hòÄ}Cø€{#OëG´eVÝ𶢯?_ñË‹þ½“Ø¿/ô“ZÏ?ëò—ç¹ÜBÍݼÃÉh]ž IE§˜‹¤±†Ž1åN¿"X+¥PÞŽ‚¦‡ùˆátb%SÄ78GƒÄ֤λ€Ö¦)»3®ÍU/q˜‰üŠ'ØÇ Ê2:×ó«Zo««¡[Gg˜ÊhºpÁ”ÆÎgx„÷)£k;½J¼EÂZU+'˜­éªüG™ÇÇ=3 áÿO“8êó1«Ò™_ž?×Ö18:s–Ã\as¸Â?dì‰VØûüm¤Ðþ”1¼B}úÑ4ñFž7j þëQq:Ï3µþ2¶ðÆõäq=s8ÏLÄ09¹!‡BšrÖìä:Qc˜”ZÙ„¹—®ìã_y%€ô›8Î:*É0ˆé1pJYUÑ÷+O#”2>Ïï©¥†l¢5Ó9EwQÆwØÅ•àU°”õ>“›ƒäp‡C¸¸:º¦õ¸ŸZNò ýx‰^l§9})¦ˆüû#2æ ›"–!õuü5¼C9åÜÂÐŒÁ,b{ض‡KÜiŸWÕ :Κ}Ç_Z®JËÊŽ|R"ñ?^mâMµ ©>-Í z8¸#erWhmN!%Nãud>[ã!¹Í¢Z®O¯oxHSaá1ÊsêÚhk"[¤ƒ(b }Ë“ü½S=wضҟY*©Ü¬ax)¥L¢˜“ž”ŽIú³€Ï±$¶i—)ç>ŽÒ šUìe-¹]\ŒT§q1ÚµâÑ­ˆ´å"R:͘èJW.Óˆ­At.g,x749GbåH-5×K÷;l£)ÝEK6°,½d4Ê1%©;/¾ á(ú±>Ðgƒ¹Èq-óøïdýÆ” x$fû#âÎI» SÉe-Åü"²ûÒ¨õ¿ íõªcéMGcÞ¶!Ž)øcHX÷ÇÑ1N½y‰z\à4Ó9ÀQ’‘K‡¤.£ï]îæF*ø=¨  hËl†0M]ÚÅRV•ÔáÌG±!tâ”2’Ó9îHäS€i½3š$u¦õNœŠiùŸ˜H 9¾[cçØÈ%¤ž°Ð}]Éøzމ±ü¿™2Us4¤6G“Ä)áA^M Íq!©“¥<ÊêÓ¹Ö/ùãÙÅþš3Ñ©«\2¶äh”Ô©œsA}ñ:7„\°1ÇxŒ×éE)óÀB4”¡=GyÁŒå$]™ÏEª9Ë ¡pû,WÈe/rå$Þä8×sŒ&|ŽÃ¬øYÏ@Â'an9ô¯ÓŒ J©¨äÒ, ÷&ZPÀ½¹ü1©ÛôtŒŽÈª ¤³sü)Æg¨Ç^Zð›@ ?8¿ÓhÎ<í¨ 1zoÄh.fK³*×}‰­¼GM¸#&p6Ð}É¥KôRPÎiÅýnz³1Žã©•{`Ô«\údïYÌØÄ»ì¡)ƒYÃÅÈGN‘f'éÃ1ÒÖŠXB&¨4=ÉÚÐ?|l…ú5#œjgcœ_Ë)®PK_.0,טÄ/³†JãéB %ÜÀ:ªèH#úôŸ5{ô_Z®v–•-àzºfyûFAŒ|R’|I˜¥S"Ño¸HK1/à%-L%¯Å7ò1ã@Y¾&´d@Ä9Ÿe+¥\›eI+L‘šI]žaªNi„ã{‰b X:ˆT3oRf½ûy+Ö*ab8Luìnº† ø@ÌW®a6sXG J)ilJ¸›Ê0äÆßXŸZŽ2A1è:º =ôf(+h‡¿Áã.ŠèG1[#¿î §²‚TÒqeªzØrÞ‘le-g¹‰r^Œ+ÙŠ–77ëšÚ` M9D ÚÑš©f‹éö¸«¯/eij³v9ƒìùÏ\NÆ}Y¡3—XEÇ…¶£3#ð õÏ861•zÜË@> ©à¡ ,b!£x'@D±;©{¶0‘·9Ë©\wp#ȧ*Øqÿ‚ÒÍc%hÈêqMšÁÁáúÂõ929Z'u®²]´æ‰‹T…&E™ÜK*st˘ɮÄóp2¬¯èË.n`ëGéYé¶&£OâùŒ¯$®Äá~MF?^ެŠwʇ´`ùü4ÄiÓõIV†Ï÷Oá‘J2šæùJ­uôåtØhÎEíÞÏXÊYÄžˆ9øóÕ f2·27¦×2‰t¤#Í©dmÄ´]6#Æl Eqótçpl·F¼\^@xS%^>ë£UþË8žn (dcØŸ‰Tâéì9bNX†KB÷Ó‘[ãÄ0/ò.d=Ȣʥ ú´÷8ƒÜ\%^¡q„¬6£KÐúS¢B+vðVä›·a*koÓš1˜è©Ó¢iô{B…1…ëYNÓ+”…w(…}\¤(*ä` 9”µ\=ÎGlyz®ÝfátXÓ…½!•<˜Áµ<a çhKiœÞÒ®{*É ½t9Îöºb5GhέÌcERGA«âQ.²š¾œ`ËbÊЄ„ͧ>EjñRYYUa¡½ƒIœ§ãy2+ˆ=õö¥%{y B‹’§Ëq‰Ûø8¾ñk¡&?ÀÄðT–D&ýSYÔŒt!ÏO§Ý!à(û™Åް…il™Öµ¬¤†‘LaÛ¹ÈЍâ`‚YŒ0ïô=ÌfoŠš¥{¬^©Ù~G8×PΣ ´Á š0’w#Χ £x‹sÅäïcÙLгÌà ÿÈ!q™MÒ…]Œâ%ŽÑ…Òè&w%1ŒŒX}Ád;GkD¢ÌLÖq; "RZ&ð³ƒÖÕ–'ØÉÇ3–ÛéB-ð¯‘VÐ,"a$M&Ò’Ç8ÉŒH”8¼ûèʬˆ©½‡e‘±“Ötb-ÓyƒFLæ]±{èÅËŒe.‡ØÈòàû¥i2­y/¶ÛGXG}ÆÓˆ©¼M ëy ,ƒEœI¬ ªHÎÓ…u´c I=ofŒLtd8KÃT>!$‚ÅÔ²š¹&s9£y¢ ¹…-‘ Þ7B2p sØCûDS–q„[é™Ú¥Œ•“¼Î>Ï\IÙE‰Zú&æ3&Åó¸L^€ÖÒ‘;âmr0>Ž42{+׆(|+÷±‚wØ›ÔA÷„X·#Ïr˜Cy¾W[§¬ÙË, Cpߟ_EüæYNåùQm]—¾86)g͸-¨]¸%šáé×d û¸“½qGma6[9ÁH*8FKFE=Éz+yˆváNØW©àd¬‘“Â{ŠçâÊÏó`­or(öé^¡K¸$ÿ:Ú!#f!%(ÞÌk¬c7w°,T …ôb'K£Ár:² Ê#Õ´$vI7‘Oe¤tÅç|M¹4ClËYÅwè>°cUËq5;Éð³0£4¡5Gxÿ¢Œ þyÜÏzòq¸"ÒŒ€™læ¥Àœ ´×D>⛼ÁNj¨$‡¢f¬ lDŠú½‹&ü·ã4ÃÏØÂ2rrMN,c^\‡ÿ¥åD«vß ïmjzOqý”~Šó¬ç,;"ƒ|G|L{:ršºò£"î~ª˜ÃŒ¸éODãû!þ“x‡³¬ãå$™:š~ÊëÛÆÎÈÙÇt6q€Æ<ɯ¹‡ær'3‚ë“6vr-Ö—S¼J5õy”‰×ê–ø*#YÈQ¦óe^àOÜà ôd:o׺+Q•(àu¾Ë/™L[Þg 94 ÞÏyaÿjHœS2gFÒŠ†ÏZÆO8h†t5JKjUØÒ÷ó8ý¹>$Ý©ýqØ󒲨p\Ñõ©K:MJ›Í6qŽ%´æÎ|Vñ­Ú:Ì]|_D'p-/PÅP°Žãµ #¾õÎp¹}ƒEq6L«ˆ}Ÿ†´`R,]s"Ž6»vˆÌ‚PåÍdó¸&Fn)p¨†¦œgC”5íÿ0Œ˜Fo~ÏYÎsšåìd+k½ÉôèOæ)Þ!ŸÇù_£Œ–´ ËãW ”7˜À`†1‚ŹnËX—(å=Ð’¡ /Æ„‹ƒèQ)çÝ"Jb6;Ég+ý˜ÍˑԉI|&ίÅ\"¡7ݳDzéÁ«*Ì$-B2ö=c1[ÄjÎÒF±ç¾•Õ)ò/XÃm¬£sÙÌr†²–ÍFŽr#ƒ¹–ÛäÿÊ£Œ^`ËÕ«Ãæ˜O5M˜ÄrÎe´ úA𥒦u Šm$tc…ø”åjIYYßP ׄG2aþ:òâÎS/VׄÖì %çèCc¶ý¯¤¾1XÃgX¦šõ±] £b}Êã§|Īh¤×§èÂÆø éÊt3 MÁ,ö„C6¡W8[S{ºkH£E7†e¤5äñyš„0Õ±ñ¦Ò)ò«öЕ'¢¾¼ÈT~O †³—c1¨Ëá´Œ<ûw© âQîáǬ‰ÃÜÍl¤Õ|†~ÁЀñlæþØKNe7½8N':Ó™î¬ãôàã€{ÃLæ÷|Àuyºè\ê;|› .3„K”1 AÔÈ <Ì”è“ð4£ù<frЉLŽaÏò˜öc YË1‡tâëô¡$ÔÃ͸…K±:¤ÚçòaI+ÞãIuvãž8-£}ÆD&^fâ7¦¶”È׎Žl`m)æ~êqÅœç×!È\Ì-lå8YÏ[l¦e0¦Þ˜ƒY½¨ö!y­ ÀØU:â"ŽÒ ¬¡:æÄç"%.í V0’ET‡b}œÌª"ì ÉFÉ6¶É]ê¡MÚªlhðH[÷«II⟉Cp#(Ëójý’(ãÖø€òvðpÏÑ€žl.(¨÷)ËÕ²²²Ñl¦I ;N°:˜@x–Ê0á§cž^לÓt #B6¶²"k°¶õ“µcGh@×Dfv–Ò¥á¦.¤=ØØ’÷XE:†gþt@1r"a}PxÓÜ—’(…oÑ“ctŒºóº0$ºùKb·2”¬¤ª˜Ä›>h U¹îO4 5×|Êø"‹9¨Ð7‹ ²1”2%¼Sejâ{‡z´ŽÒç9ÆAzÄ;I ©Ò$]z/0‰/ò͸A{ò§ø»E—ùO帙¯Ö:\Z‡LlÆQ^ ¨îP憷ì»Gkæ„1n÷¦-®Ï-aôNái© àcNÒ.¢Ã"=à§‘µ‚÷ÂNŽò;éŸÔ¡,KiËÏÊôÉM´KF6õ™l¾]I³0M¯e ÇYH!?àíxðDzÁ¹Ú'JølÔßN´¡K_*3—ldü‘$¨l)ž¦GÈ‹gÚAZÇåâHØ©””@ IDATLú}ä10(e¹ú°¬le„zŒÏò-‰Û軜g1—¸“]a…råQúGÖrú•ƒiÄùøç°à^ `NÈÅ1j»16zibJþ'?ƒ|ž`NVŠL>õâ„Tš‹4ÃfGHþ/q‚}¡ÍÇSäq”ÃŒŠ”îô­®ç¸Ì¶h»g÷ñsJ(áöŒ[) ÁnÚ)îÔÎPÃçl<0+8ÊV¦QJsj8\¥4Ùd*»*Ëwu<ÂÑ+£(/¡F÷5ý¯¡!·Ðƒ÷éŸñ(oRZöóŒa;ÙÉmô`×2#¶/géSŽòîø-_ãý˜çgü8W^R—gsµ4a)‹¸å4 DÍÎp^ Ù¡ Ò>Â^懟3‰|–9ÑDjÆEÖ0šBV²›ÑIOUg=¨¡)à>šq#?ç,Ç{¹?ãl­·™›ëùÁ†HeÓB^QåƒežË“ÜÏ…”IŸñ÷9®$uºµW©bO\wÆ…ºÀ l¦=ÛƒÍzó9Ìc¼H3 |‰z‰ÿbnŒ`oI© Œæ¯³?pˆí)dǹ?@V¹¬`jŽ¡7&uÌ™šï3l©µ_résiÏ&nŒD·v¹†äøç¾WVÇ¿“ß$6ÒÐ/Ûˬ„U÷07(A[ÙÈ ŽñCÙÂDš…?ì6Þc#70…-k±†rÆeácÒ)ÎÜåä³:†ùù‘á46òRËqãå½ÜD¯ál7ƒ™N/öFY‹øŸaCÄË£!¶Š<>K e|™•T°šÛ¹žÿæcÎ09&ßi iêŒ|–©âH :Fï#iIK†Ó3ëé¨ ?ÁyÑ9j‹›#€â@–E'}àêG M•>é1£(ÏjÍå (åãVòlˆ>Òì«ãÜM}þÄOÂTÏ =Ú:ǬŒ^Ɇ}þ®Æ‡wª3þ7ç(›¸6 &d4•ô–`YÈwP•ü>}¹ºÊ ¼sšÔ—w[XÛú±‰/Ǿ$ðòÙÆ1Ns {© bw*ÜHS·ð="8n@”È cëéÏØÌ£,ç&Vp'㳄ø7ÞgPœÛšó´üîiö†ûr–ÿ*ôýlprÇÿŒÝwœÕå¹ïý÷šzzïU:*UDT°aÅ.±—ĘÄìlÓË9‰;õdgŸä•mb,±DA@Pzï½#ÌÀÀ ÌÌú?î¹xÆ'Oòþ²0kÖú­ßᆵûº¾ßÏ—i1i,™ay¼óê^g£ Öñ>{38/ó~G··!·XÆõµ!‡- pÑnD¦íÎ@B”FÀÕ{áÄ"n „ÿOŠãl敀͌¡}Ð\›ù 2-5÷2/2„Q¡¶J†ÛX„8] špÒ_dŒŒî_u9p7oÆá¦p¹1“S\Ï‹Á58Í~ZóvqK¸ r°îèuI,ëu¸›ñ<ÄO9TèÆ6&T*«ö­ù-o37Rê1Ÿ£ÜD7±…ûéÆ8¶±ŠŠ³.ãlïìÏ\ÃëœSèN§”)lg:•bEˆõ÷p'x‹hËna.‹hä‚ÁÄ;‡öÔå'<ßÚ¥ÜŬ¸¥W†›~L\ŽÒ’[8‹y|ÄôãÖHl¬ë1¼Oý`ÿŒeAPì&ò\ï !@»âºµvðZ›Ö:ØNUO~KÕWù1»XÄ™IU¦U»0Âá:±(Ø€3>2–6ÆH£.À_B¶°9ît6=ÍWøV$Ò¥&UYXõ7±•ãèšò0Ç×j“$ßý~*(âr>ŠÏÂ[ÆøH)åGF{}^`ëéÁTvqóéd²—ƒh¾.ºúɉ|1çZJ™ÊxîæñÂ-»ØLâ¢ÈLŸÀÕ¼8#ØÁ¥¼Í*¶S ÷Ÿ0œ]Ü‘ÛØ§&{,=0Ÿ>ÔáÓÐ4 ›íþàŽ^ÏF~ .IN/ÚGšèÝ|óÑáìÊl ?3káÒ“q~aÌ­—0”• ‹ÐÎ-Üɇ4ä£"?ôàú ûöo½WêüM6û¯ÛyLùf0±Ç¢—ú–«jå~Œ ¦û)úІýÅÅß¾iê ¶]Í)/o]Ñ)á·(Ü䉰ü™Ã¦ŠBŽÇ®¦ŠbúQ£š#Á¼ůc;YÉ<у#ü>fø‡Èó2§éÃ*Îã¬Z,Lÿ<Ĭ‚7XÂ!*) fR½HÁ9ùùµþ*²’õŒ JÅ—XD/úÅ.Ø‚U±(·"ÏxZ²œ{üü)‡Ê¼¡ˆÛø¢_W{#"!¥ére¤B´¤˜/RÉ,fÅnZ7”˜Í¥qj<ÉHǹ‡\̨Ãsa”IªÖñ´H<=ÆjœÓ9SŸ'XNÊ)aW3›·Âm–°~Y%Z3*Æ`Éü›F)Oý>.ç–§Aq‘ç3ÏñŠ9DC*ØMãp\~–2…·j!¸RÆc‚ONÌY™#'̬öGй”‹BíVh»ÆÔg}YÅF¶2/PÅñN†Fy˜ÔÿÍ™Íòý ¬v-{éA'ös{ù-h½û5áîšÎ†ª¬`ßàÕWý;M‚q#Åó¯Ë2Æó4 XÀm|LwFq€f²+btô'¹ŠY¼Q`x)™îL¡’F¼š<.u\“÷60ž‹9Áü E­åP î¿@–p“’žªå)†Ñš1ü…ϨÏûäj} Ì™–9’3–óÃXš’‚Ÿ¤'“béœH_^à^ZÇQ£[iB>‚Ò‹ï‹h{Ò+<È£¬¢Sؼ. ÉRâX¯ñežŸQ—õä"꩜¥Üó¡ÿÉNêsŠ9Êmñ{ÏbÓ‘uÕÏüwæ7†·úþœâ ·çzð‹éHc¶F2ò~:?¤1€WXÍA€ÜÅå¼Y+û­9›©Šžçv&Ñ'Ê‹C Ù‚Å1q( –<ÆQÄ~êGÚÜjn枤„UÌa'™Ê˜ð{àXPÄÎeq¸HSûc”Äþ1’= âÙÂ>Å.Æ'MCÞŒì/U~ð»ÎO½IÏ3VdSÊ”y®ïåO‘æÜ0ºY ˜Þ šRåÑ'+ ˜-©€+.Þö/Ò„såå¢UøÚÀÃlå6ö11èûVˆ»R™SŸñÌf—¨¡ŽžËŸAófA]<‹O8qÎiHv/sƒ¶Wazµá~Ç[§“4¡mCû– æ(~^<#Ö⃡8zŽ †Ø¶ˆH•>Œ¥;ƒB=8‹V|‘R5Œ¸Ãñƒmy†nÞÊQFQÈ-,­U-þ˜FÌe·³3æ]ÏveZBÿ{¨öç0šê€ê¦`Æ}œ éÒ(¸Þg+?äw™S™|ÀùsÇéVY£éIç o¦ÏE‘”š ƒ{c<$^3"ölyHiw0 óNÒ–ös#£Â4ŽÔã}u´/Òºº&tæL“sõøcHÝ:‡4¿¯ÒšüŠ%LŽjz e<̤hËì§’ïQºT𷰛٩ĉ]¶‹[2³³š-³’«©d= LGÅ¡çÁÈ^Ç à»q“§ Òñìà`è%Büp6Q@]ZÑÙGߨyç©óü!äü% gEŒqÔE™²8pìé,5ŽÑy÷Ó‰†´â—Ñ8:È,~À²œÁ9øuŒQ—²"&ôbÿ…™ :Æ/ê¯Ñkœ)RK£x"ÖœáT›ɶ¿å=†Ü®3‚û7›C•СþUòUVÄ›KÏ"gåíä\^bs€t[†Ç¼(°ý­ùŒI1ÍêIcVñ_|ŸEña3ú0i–œ ª¨9K¥ü‚OÃ(–4ý}âŸwĹ>MM¶©zOÜè´åPrOgR¼ùyl <¸þéPÇ©Bͪ\ËÊZ)Y 7<öà XL­ØIç°ý% gÊš™Êvކ°cÌ~“‡¡oÜrJöÒNMpÞÙ™¥…ZgVQ‡ gFö™™t§aóú“ñ§øŸ‘§uIž¾ì'Ÿtw”°šFt¡˜ß1ˆ9äá¨oÒµ=9£²ûZæE^ÌPÊ ¼‘14ÈkJW–ƒ£.Ÿp#ø÷(ɰžaô [ðeúóL~Œ•Ý#QÀc9Ûè˜sN¦e¼Oqà”vp!- «öANqYMËn\=Y=7T*+0,ó×Fų3ØÊ(d3ù5OÐ.XS÷êó¬¤%Ÿøzæç±µ7‰Tûáu½€í´âlŽsèLÜÚ@ê°Ÿ®œˆ„>±ÈÖ£o$ÊŸ¤)Ue–VùU”¼Œ5y{ØÈIJ¸œz±=ä/;8}y/Ð\_åSfÓŸ²8jДJ±•6 £}xžN¼1]•¼UkUiE=ƒW­ç±Y ­Jb„™âOæóNd¨îŽ^Î<®-?±è³Fs„î슈¸á?iZ«ô/g<ïÑ;¾—,Öþ„æô8©z§9kU&ß÷8® Dž=‹4¥Œ‘EyCiÖÛ!t/.>rÓÔ;þÙvõÛZyW»ã™LwFJ"èF_šG¾û™%fYhÇr¸AÔ à^RL$vÖM»"VÃóèÑÈ)×µ"ê‹.ܹl­õÓ¼$yžJYG!oЕú1q9¸ Z0–Ýœ ˜æ˜à1Ÿ¦#ƒÙÅ.¶Qaãi”+9ȇ4ÕÖz6þÃ^uæÇRFÒñ6²›/0:ø’/PÍâð®oa o²›ñlaˆæ]"ðtc´aûðXD£Þ)׳éX­U•ùôgeNÇB×gêG硜sÙͬ ®b=£(á&Þ£ªÈÔ¼·™Ã¦Pë­âE¨±@øœ×ç"&ð\N½t s®ÍjŽ|×szd5c•k©G >,t'ëÃ|:3üˆ©£XÈf°/âÒmœf-ÉBô·ÇÛø„™Í\Z°Õ´ŽöCK>euDP&å-Ôc9–²Ë(gûbg]È^°ŒJ¸,<¶¥¡&Ûñë̉謜Ž|•ÏK!¬ØÍ÷y—ötdCL͇³/0m¹ÕŒŽÝ"©×s€cŒæ›¢U–ÀƒûíBžUmM¥Ã&<©$í÷©¡ò!{) ÏHJ¢+–¸á ÂùY¨+/‰¦Q=úýDöËËOÇæv6F‚mQ ÛOow,m9ÁQîMÙȳÔá]J8Ì짃Âß“/±?F…)¤î_£ŠOúdr\ÏÍ,¦ V¤t’Øm ³zw:2‹;Yª ¾&ÊÔf˜,‚?’¥×3“MÞNÖј»YÁ[\ÍåÔØÌA>£Ãè™A¥)iíh™ \Äk”3%ŽŒ“xŠ é‘sI¡¾yÕì˼p,m¸23©œEqrغ 3?³ž[鯦ð·B¾ÂEl`r%3èÈëÌc"í˜ªŠ„¯|Œ½ô¥dv‘2‹(ËÜiñŒ«éRí•L?^¶ä!öp<Å]fZdn¡0ÃIsÛç£Ä¹ˆ/DHM㜥E¾š¯1{ôæ…ÈØÁ¡œcä Ý—3"ówN3†ïd~Ÿ77çx½+´åNzå¨öl¦/甹;ï8OЗ_5#Lj9cø [Ø&Ècôf”òËBålÌtgC4[s¯Ò‡¬àÓåXؼr\Cw¶QÉ0æPʽ¼ÆÎØw¿í-¶±=òD¶5üêˆÈªÊÌ×Zò!¥YÀ®¥>5ê.çyúsXÇ¥,æZ^ Þ÷òÔãBf#c ›8‹&l¤·2/$æ‹N.b3•±fó- CâøE¦QñÏ>Ÿ…xE¡®9UY ¬òšð,¦ ú¹é óˆäbº- mƒ¢Ò* s¤¤in[îf?7*ßmu7Kš;’fIIÖ{„Åd@¿€ïò±>Š·š$Í+âXRÊ®ââ£7M½éŸmWóË˧ĸhE öPÆ¿Óða>dl »„_jN¨-®ægA*lÆTžä í£Ýô§ÙÆn*©G®¤ŠEìâB^ç ‚œÝ†7èÌÎ ‹ÉApW$±1BÄÅQ·shæ‰SA@ïÏàÈßú,º…“x­–Óp.Šû{UÔ\u˜I»hÃÏ{XHF•©ö¤99¿¡;‹hÏ)šù1us;Ûy•Yt¦-ßgNsB@åµÈý[˜OPE97óçhŸþ’­‘Gõ2"Ýu?oÓ3v—«ƒÑ°4¼gþ´ £ß§yM{Ú`ú­‹”~=m´jŽr.³hIžŸEúe¢ ¥p£ˆÐ\”« ð.æÉA¾)°7‹9ÀÔÝASÞâð%ö†Ë8©õ²BCÙÁªYË:¾Îy<ŵ,ç^É×`ÖÓ…ûXÃb¦1š… eZDÏý0³ Ó³Žïç}“Ýäx†;rÊÀ|þJWÖ±–.4£k˜€79—Iá…¿™o3ž·I3Úämà¶PTö¡>“ƒ2Þœ-Œ)иÈEyç1žÑ9·e5ÛLO~ÎR±ž¶¼ÃƒÌânþÀÅ1^ý=•yK¸‚Îü”û9HŽçœjçefe>Îtä† –¾Ï}ô®Ð¤Âanà.®áEÞ£?ò×|àûQ~Á¸ µ¤Ðz–v0á¸9<Às…Ì`.²å™\f(/ð¿8H '˜Â¹Y,æ4Í¢“|%¸§ÙÌ å1ÆÐ$’µOÕž QPþnçì\Û/Åæ­ ·1™å?™óø]Âù+](¤œq4Ž0 dO>¼×µÁº½™Î|‡w™C®àhT–YÊíÌ‹NUJ÷hÇ&öÔZ/Lć0ö¥”êÏâAklzŠEKiI¦Sæ¾ÍÜxµ*îáT1vláÖdƒÉ¹ŒÅœbOйã0´¡ŠÌ WÖh§žS±™Ë‚4´ýó³¤1”ð¿Ès½ÿaÒÔ–R:ÇU­(.®÷ã»:C¦J’ªañ‡9ÀѰøoÝ…l`×ñ—Z¹… mpžÁ¬ M-çÖþÀÑÖœŒ çáë\ˇœ¸É´ êëPGiÓƒùá¥XA7*ØÀM ,ÒôåWüšA‘`–bŸÞ „Ö4§/]"´©­#R땨ÌbhΩœë8É_"Ž!…°¤ÎIž¹ô‰Ð™O@{Ó”h³´±A¢ëÃhv2!ƒ0CTq.ÈÇ ãÕ¼NŽRÂÅÜ©.ç䔸>ó]Ã>u#ÓXPó 6òçÓ“'ÉÎßèF3ZÓ‡>ÌÍ£iÁz.¢ „=nw$fý6‹ÓŠ7èÈü˜Šÿ¹ŽóhxʼœÓ¬@ßÌsg1ß`søbœEr73Yȧ<É^†r5kiÍûaHoE!Ýi_fU0 šRZ`¦A'éÏ«¼J[ž¤uÜ6YÇÛàÊXÄí´¤·Ðš&\p܆kp.[xš­Œ£4ÐyG˜Ç4> Ì z…î¦[ì*ø&;hÎ Nsv}–³Š^Ae»0Ì‚é&Í' 0ù[9#rÎÎj¦nâöN±ŠC#éx.%aLN•ÓL¥-4äwô¨eR¼ƒ³hYÀm"uóWq¦éÉÞÐ~ º3jÛ“lâzÇ[-« :^kCMÈiµ–²ô1Ï¡/ÛYǸž4ŒÖ´e>•t¡ÍÙÀâ¤*TœYÂiÚ3˜Þcx-ŽF+&9螣3GCžž 3-©*pIVãAìÆ¹¬á»¢Öl?x^X¡R@ש½]Í//¿‘eµÔ]éDcæSJ‡ÔŠaõÊž0|TR‡µ!0KBÉSlaR±Ê⫪ËvÎaSX£zRÊrÒ0Î+ãòÐ=WDO €¹œ>ñRó9WM§;Ýöq ìñŽ¥/çDçtÏç÷ªd8hE>áÚ˜ý¦£÷:ñ{8‡[ 5ÏŒ`(»™HÛFYÈÑŽ˜LYÞo(e s¨&Œ¦,[ö*0QÍ!ã­ðÿ&qvcŒß›"rôŽØÌ)±_vbK©œ—n9ÃØÂé ÷lãc50Ó4¬êLëé·® .N18H'pœ>T„ÊkÇ¢†˜ÌVĹê‡ÊÇìbs­ØE)·ñ_‘ ´˜q™Æd¼½¾×XI7Çø¶Ò-Æ“—F;¨ic·¯Ö€i´¥ŠY…nÍjêÁsXÄ^:PÈg Íi›éóö•¬à±‘)¬f@„ЋsR¾’³«ÀÅY?æšÌ³ì£=U”²‰þ<À ìehÁqVDGw#ØJCF¦vyxB•îºP0Nä/FÕ9€¦³†»É2g8+-Âw¿ŽÞ¬§ÇÊG\E5÷PÀ<öDÐß!nΙW (³Ÿ)ÿíÃB6äü!³·À¦ñÊ©f?·…UvUÌ_b@ˆf›†m/ Áó4QŒR”Ò8¸ˆ)|,+k R˜À}ì¤5¯ó=ž§==b“[”²Yc‹: KÆ™½jÝ™I%Í)b)çófNƒœú™²‡'^åö†ÿ²;_§w”\Ç8,†Vt ßUŽd «8Ì62’V|ÍÃÔ ëÎØØ?D_ç¿Yɬh«ÌŠ·:4ÖÕC‘´p„[#¼mr,Sgì}ETì-E ÷ŽáYSi´³´î•2=.~5G³ÿç_[Ð>¿Û¢ L.Õ$TkzšD¶—G»o4‡ ôΦ+ŸÐŸ=±wtâ³; Þñ.2žþÅÅÛþ…ÔbvyùÉ@9䣞JÉ•YE7z†½éNp5ƒº”4T×07>çˆÈX»9`‹ÉµWÌj¶r$pU‰®82 ž)ñý€9¦ô°“±¦œ €_RK‚q´ÖR›ªïqÌæ2°2f$ÛkU@ßaH-Yùn ‡ãÁÀ;õ¥#›"½ôcJYšsYfkÔ†›™Âæp'‹øÖž…aFYJ{6M² 73ƒãq vf:‹hC=f…²îPxZÏa-÷:‡+˜Fßïˆ,ã#ÁbHÖýD;- Ù’€j¿B•Tg% ÞÉPN¯ ñçŽÈ³¯dP'•– 8Êz¦ilK»8žó… ²ÇÛ, PV2w >o)­™@+6ü&c·ð§p%`/kØÄ!–ðÕ.ÉiZåÝÌ¢8®ã’œ™YM×ôh€ˆ*ÁFögð"[ø Ïp$ˆS{$Ìλ+´0)‚¡¯µvÃ)2C(ãSV<{gQÍ+QÎrJ¹Š×éÉÄРO¢Û¹†ƒ‘מš °ylåjÞŒƒêÀÝŽâd‘ÉyÿÏÏ IDATÉúPúÕ§m JÇ35ž7ã”P!°oq]¢ž]˜3Å];Ô?ÏîghÎ;\Ï~Æeæ¥xVÓ¥?ÌßN‘´Qc’.çç…Zg5!®—2½À¹9e™•áÆm=˜ma¿»5`"÷³“Ä„ï[ RÍj6òQlñ ›bÓ­þÑ'ï“™Z+Æ¡@Bg(y¾Ã³t¦oSĹ á@N/a+çó2sh•äšÜÀÇl¡oX¦® á&ñû€¤€Ýu|B9 ù2õèÍžäâØSSÇìw1Žº€•1[MíÁþþ¿™…sŒwØÊµ”PwÒ8ØçÇ¢:€ãÜÃZFð7¶ÅB}”󩮌ãŸW]•²5_¢·Xg j%oTó)]È38óvì ç3?bQÖ’´¥#û¸’åÁß_\|óMS‡ÿ³íjayùÆð!§ à´W ¯À¡@.~giD%R‡"SŸ—¢ûWί¬c1'hÀ¥<Ç.Gp¾m‹Ò£$ð‘éÈŸ tɆ݅¾ì¤, ájî¨Ö:µX…GÂI°‰é‘sº1óizÙ5ô¬k©®ãÏyÆöß qùf6ñ …ÜL!¥™—ÕX4RÀÄǬeG¸“§9ÅZÆ9òm†ómr|ÀQVs}ð™s)«#7+Åú]Ï@–RÆf¶Ñ€«2oò(‰ ùN@VöÅmw„~½7;ù#èħtÃú˜ÌßÈÍFê¾+uBž˜­_Šzp™DÓùfT»˜–iDŽùqhèF®ç§,gOôâú±#ìçji$« ¥o¡+™”Õ´ãæÑ7Fׇ©ËY¬c+3LÉy®È/ªmÏ|­Žó |C'D5™à[oÅwšÆÒC"¿*yä?æC¶pߌ!Ü—iËkñ,Ws;ÛÂà˜Úeyr!ä9Ö—äyˆAèSÊž¢+kYÅ1V3b¿á(k©ÂÂ4¦ÝÀq YRÇåý8„ßàk´¤]ð0¿ÁµLf(÷ðh„ §Øª"¾À'´äçÑ o>¤Rê…8ë4Ëù&ÝØH Ö±„±Œf5+9?B–[²1¸…G"Ba)ƒÂ:ùiœeOñY-¬ÁíLdãhÉjš§´þ7%¬ãtbq‘eõÍ|ÊQ¶³2¶QÆ.ng(³by/¤ˆ.¹·%0•'8P\\qÓÔÿÙvÕ©¼|whŽÕÚ]7ò>´‰¢o³ÉsgPý·Ö’*$¿wŠþ;ŸÕôæºÈªO o-5R/ˆüã*®¦g³žJnVáθG÷F‚íøˆR‹½[…ÃiÚÒ'àI¹ž^³G˜‘~0ïMZÇûŸÇsŒ¢³‡Ó±—ÑìåáÈ7Ì֤š#Īpð¥cÄzþ*¦ê€ÉñËh$mH½ø&ï³(Êœ¶|•Ó¬áNð2³8άˆëSŒùA7zç>eV\DðëWrq-£nÊ2O%ËuÑÒ,æ$ãaþÀj°“=·èW ^Î×’õ’ÛÙEn£.óxS4¦)MéÌ\zÓ/b,’Q½9ÃéíÞ¬boNœiÁVºp=Ïp%Çò5(ݱU°I m}uÈ? ¥Y ¾Í8þIÚþÛ Ïåõœ¿úQæmfPÎÁ”p‘y8§‚{8D•ÜÃØ°¨¯a_Ž4ÝÒ9ÄS¼Å1RmÃÏØF7î!1e¦Øt/ðõ¤ÑÊûOvrgÎgtà1ºòK–±—gØÊ `6öŠ$ø $óV&Ï3Ìe*JÊjJ„‰ìf\Øá‡ê©_Ϧ"߬VŸç)åõ˶‰ùÄ0. @Æ>ú„j±ålà»T±Þ,¢o†NúHh‹ëDjhËXÁx6Çé¶Y<K 4Íüšjzd»ùGYÌ`NÆ`is³zÝÜ÷¬!;¼ÝYy ½"{~ bØÖ=ç;e5%ÔßcB6’c8,“QNŽç¢êíË }™y‡s¹ž¿Ñ‰Ô ‹è©Èvº<ç@Î}¼CŽ^å5Ÿ´a8«È¢Ä™Í.‹›| ÃØUìÀ˜%ÁáZ2±Ò˜ÜËQ¦ð zÔ.%ä=N Ê|”$šqP+¦;ÛéA%÷ÇV‘òûÄaâôUã è’®œÍÛЃ½\ÂŽZý41CÙ&™whÊ$ò¡_ŠX“T‘·‹ ‰D×+6³×ɱ pºåq||ÍM%•\Éj®‰ˆ³}ñƒ“xŸf æ#ªÙD[ZÑ“i4&¸Ø“œ õD1ïq€óX˜Î5!÷ªšœy—Kˆz½¨âx¼&ðg…a®% h4ÕW8‡k™~ø}´à+a'ZÅýQpµ‰°†3ÃÛºXÊ ¬¢€†Ì¤ElÃèœiÁzÑšWhFßH×Ìc-§ ݔՀ¥Õu¸ÒpÐ×89=lŸ§ óZp¯ˆ;jWSªf[.õéœÃ¥ŒÅy´aA¤ªÄe¡ÐëÇ!V¦²Žb~ÕÉ Tr!MBز6³Ÿ¹EŠ2[«k¦Œ(g$;¹™³8H#Þ`) èM爭KŠÙ˘C Ò.g99H}η\]&s€~<ÕȾOОtˆ`ªÃ´È9ž¹!Ü 乡îÛEëÀót«Q$íiy/ߕ۷³¥aåf±Ÿ ü ®£U|i_àlfÓ»y:èJ“h™N`¬ ‰Ý\ò4f ûXAgfÒ˜N£'mBÄ” °{ ýG¦‚¥¬kåW'5¡Gx©ÈѦ¾U¡.ïs}ˆ²§¢ ”±>¦÷­‚—@bm8ü|Éû¥QÏåhZèüÌ\š`¯9í3íc4p4º]˜Kå©p L`U´XFÐ32HëämÇbñ "LdççaêŸ&Ò+ÅÑ™@ªØLCº0—fd‘w8žÙrZ1•2Ú°„~1%§O¡+3s©©#¬`o€6‡ˆ£1EÐÒÐö¹4f§9\×Ä1´<¦SÇc•;(d6=F]êÅÛ¾*Ó€öéLùÿKd/©µåì«Å(ÜÍÏ)b‡V݆预ýŒ ™™ˆLíàŽ‘jx<ÆKûÃl⻃ <…SÄQP#×FA”x€§kQØS¨U'C»!ï©-0š‡É²!±–'ÄõJÍܬÖýq7ǹ–u®ñ•XÇ“cñ\Þ¦/ƒYÄ9´ HÉ YJÛìÃz&0‡2ŽSÁÚ >¬úüE>ãñÃ…îɹ-³Œ% “ù(‚DK8Ȇì?c÷°µÈÔ¼Ÿ²„½Á€¿‰Î¬f›i]¸Ê¨ÔÒœojøÅ—">ãް‡„£ '¯…ú¨€¼4ôŽì¤ﳎýt`? ÝÂø®a“Ù~Z[†óGvs>?¤8ÀN. šYb¬¬ãXc½ë)>mcxšv’ÚA§{$€tŒ(Õ¥Ñ_šÃЃôáAšpœ?ó-úr6…¼È}ü&èÔÃéÊûÕn«¶œ™E^Î;N%Å6…aùa®LõG‘¯ç½Ä\Bžâ8³#¶“_°Š.¼A)íø–Ò22Ï›` MÃ~TEkþÊaJ2½XšŽqHíÖ?Ò¯Èòže o²‡/1+ìéªt§óFW¿ñ¤»[±Ã¾D xîÌbË8Î^ÆRi¿8Ä8z°‘ùz4V1‘tãc¾ Ý$Ñú˜ÍœÃ¬Bų_–™˜ yƒ«<ãíª¶±º¦¨½Ó,d¸‡ÐѺœ¦ãæQG¦êDx~óŸß«ÊØYˆ»Ã»%,d+ýØ—Y1¸‘gJÎÉB#3²Ÿ_±”A¸HÏõmŒcZDmufù@ËŸÍÞÈïþǽ*Í’÷ÇLz×2“jÆGÿ 3£á™:.C¨ÃOM{¶0›m!U;T%!.ÛÁº0¼®ëðbø,ÏÈ.å$9FÙ=‰-¿Ïr¦‡³>© ÉÃ,¨ÍN]©QßMŠÏ8S¼'Üía¾Ï«\±ªmùÓ#`­¢–èVÑ„íñEnßXÂqNQÄ=|…¿Æyÿ%NðL$;¼êþÅÌɳ—£|•°›Ù4d=ÙÀ1~Ï»¬gI?ÌËñ~ÀËë%06­#1=1oª™ ·†òjW­k•†4«yŒù\œ¹"ó8—ðg.¡:BèаPŽïE7¼ÃùŒeÜHcæäý…\±¡Ÿ±$@º_ˆ‡0½ïQÍ2®ç]¶3<”Z%¡N³·æ¡ÿÜÎü–n,áºø Iõ;×YThPÎÁÌ~̳´£1Oñ6uiÂü€Ó¯e Ôq_^{f°™ù˜óyœÑÁ[Í›‘øu¤ÒÆÓ> zÞË'Y½ê•Ü;·ÚÜÏw×Ôùðéü¡ÿdOÎ`®çlêÕ LH!àC¢+¸Œ+B”´$ØÈ(àMÎæ)ÆDIÔ˜ŽŒHÔLk–äÊõt¼òµÄVEu~Šäøoúsš1qÉ\ÊV–G"ÔUtà¯Y gk/ó8Á5vïQ»dLËéÇÃQ¼¦ û¹„GxŠÉµ¼·m¸4ìzµ1ÇÃ<Úƒ'(åwü&Î[·F¾ÒQ x‡!·»šKx‰“ü YC†²Œý4áfæÄ¬½4ùßY͵=ãŒ$It¥k˜ÍŒáž` %ôäë¼È¡h_ÎKAóú¨–²<­¥1îÍE}A^›7úˆÛ=åå»#‚³$€ª©Ç… 9ÍU1[M>ÔMg:#›£,r³òq¼UK QÅÚP?bã{ñó ðAYlæ3kÍ™²ZURʨí̽á¿YCû8ø7¥=Os+óYAžîôã`4…¯`W4‚RúY²ŽÏdv´’G lEÞïãu²ðü†&T’ãlÒ!vÓ+!"Ú–GAzF”ÉQÞâ¬çWÔcMÔ˜4/àÎæ§Í¯6­Úmãô9‡WxÃdÜÎÉZìê*ªè‚à+¢½s‚9¬ •üî8ð͉ó~úÇ5ÿC’¤J÷ÄÀ¦‚Öܪ߮lϬÈsorà ÝÖÐJ¦ÑG’÷0¯,vèOyˆmü%¢Š›³) ¦d+ä†B3ŽŽI@ݼi|‘u¾lš39næÖÌÊ©›SÊùˆvìa¿‚íoÙÄ–à“®¦”/³=“eöX–y“÷㤵6,ƒ/±^4äIî¦+Ë(f '9÷D4*?cOEÑ¥¬§5+éÂÿd{9)´Wð(Ëxš}Tñ»8ÌÌðl,á}®å‹9§szSY¤Y^ý ¬Ë¼ÀÛEžÌ+¦)íLX+»¾àwd³6ùý¥ùYzì!r…nåÿ#}gSÍ#P{CäÕæÈ©Ï—ø/±Ž1DoI)£˜L)#y•ü„ƒÌe2ýó>àC®Ï[N_ª˜È@pn ýäwah‚2/f´«˜Á»ì‰Áð™`øc±VTP8Í¢¨ËÅü³ØÆ:æp"^ó)fûiÀ>Þ‰'èúÞÆYÔ£??¨Ò>öy ïG4åS6SÁ ^§»Buæ†UI Ð?ö-ÙeÖžØ5Óÿ½íK_â$[¹€›ø }) 2ê÷…šò± YRþJFø,g\µÿd>#k"ù@Ús.k™Aƒóé®›Üú¿ŽËž2{çq$8¼>¿ WG m+ŽÓ㵦éÿV\즩Wü³íª¤¼|M­×ªb=õéÞ£´=ôãèç7žKxþó?xˆn‘jóÿ:á¶à†xs)K­ShQv†é§7e]nRÔíôÿ‡\çDßHa©‡°"„×qF¾˜“,åXX©wÒ‘Ól` ×Ó9´IÓ‚æcÚ‡sÙO?¶³£–lò þ5i]raÁû ÷°žçcýJ÷ܨBå™*pC~WÒ‘>”0ˆ'C$r˜걞¹ b7[*Ì®vyDW|‡ÁŒäS ÙÃpŽ„ÝòL¶S‚h4§ŒÔï=/LgˆÆ%n-äi*Y'Èlu9ßþ99û \žy.’­“Rf Ýxí 1ŒB2›!ôáY6²Š1œÍNÚð:}x‚" £X.ަy¿PF´§ -Ø›È7™5Ô£”7CN–ìÕÕ4åbšäÈéœYò‡sêæ´Ê4c7_eE@ŒŒ$ßÅaà]ÿ%¥¡×eL™«XÁóÁ@Iª§s¹ŸÙœ¤Í{QÏ&~èßy“Ætf9…t‹œÃóYOÿpÍ?ÈZþNÖÅØró“4¹À—³š Ø!”Ò;ÆÝyœ+š;\`t¥r>Ëi—Ù—·‹™µ™æîþ?|Ýwœ–å™þÿ÷ýÌ ½ HG)ÒAŠ€€€V°!TbM¬ÑT³É&_7Éfc’]³1Éw£YÝ4½ 6@QšôÞ{g¨Lîß÷œ¾Æo~›ç_ÀËgæ)÷}]×yžÇñ9h·˜£µkè{Mz¢žÍEšV[©e_«¬™j.Ÿî`7sˆ%4HÉKø8§SÄŠP‡V²:ÆSÙSà†´öä׉¢Ý’ãáX¸6€¿æJ±Jmýz-‹sîO­¦ hGYOcšS?¦Ú—×YÚre‡q>Ýã0·œ t ˆùÔg ÎA†‘PÁj2ƒ!t¤1ǹœRÚÓ˜­œfu ÈZ²‚}f7¯=¥,ä$ß0˜£´¥sŒQFÅpñ-ØC5W±‘%©mi­Å¸?³ê|8ùÀÀvç`lÌ¿'\üEUy¦_èÃ!D¬ûÄNŒe%ç…°pÍÈO½ñ–ÎÿÛvõtYÙø¨ßóaŸjH}ÕÙuörÕËÕeñ‡\؈!EÛðÅfqQH²CÓɸ"Ô1 žËhþ,äÏq« èF!§¹“ÆtàŸù=ÕALÏöÈ)·|"Fn™…¶†~A1Ï…ÿdèòà ­ã=~‰Æ¬¡×Ó¿²Ùce"™–d}ÜÏ{cV·ÖL`3ƒkÃÁzšy¬‰ÌŽì»œ ‹%\O¿p fg·7Ãb5”·Î\z…#dC)Ž0”ýñuì¦âʘÌgáÛͧYu•}¼7²ÆY:_$·f/ ôdfN”¤vSJk®`1¸†óc‡Ë®æs6"°¸”¾®QÂ’HæÎ"e?¡!-éÀ̸² ÉO"rŸÐœÃq>A»ØlÞ «_ Žd“ÅÔ!f°Ž) çÕÔŽTm¡Ù=9ˆe´c Á¡° OæCÖµÔ±ÂGim`tr‰–Æ¥µœ´kÂÈp¬oeWì”0Šõ$xµì§!Íq!WДéŒá0ÝØQèGyÛYàB^æ¢Äg©ALd/0„b$ðÕ,m£Œzlý»•ühüù ŽPŸ%ÜÆÂàÁ¯...»ñ–‰ÿÛvÕ«¬ì­È!>#÷Sá:º/*ªÉlf2åôdEÜÄ ÝázÉ$[{¸¥ÎÄQ®4°è‡4©mŠJ°4æ^ê<±Ã"¢*â±KXÀ$ö†«à+‘0{/‹¸< ÙKM9ÆéÀ)e¡´Çâû˜níÌ3˜!„¿LóCêìX]éÁ˜ø¬Î¡+ƒYG ~ÀÖX³2i\%óSos(Tøe_´ÜWpŠËy…IŒâCº‡éaCx¼2òæIÎgۘ͵,á4Ã#¯äbZ3†g½ \™jíõŽ<ðòÂà6•r53Â>™á'že_a(Ÿ°—mœ¤ŠŠÔ&†q+ïóYÜr[ø€EœËæRB+ºó‡8‹ èó?‰,†sx æç'¹†ŸÛhÇü¸­j¢g2œ—­ =ž×•—èÆgü–³Y”ÚÊ¥t¡ijÇRߤ9sy#9]r:¥>`41¿Ò…Õžb?“ØÃp~¥ãÿ˜·¸àTÿ3&–÷UÜ¥Y‹Ùwúç¥þ0ÆñÁÕæÕØÈÃ*Ž«xÅßV»o¶û–¸o¡û–)Ü`ñF®,ò@^CžM-ánÚå¬O4L5àE¾Ç9ìç]ñ]JRËé‘zœ4bð}~ü³ßÓŠ[ŸãŒgƒùZæšH½pôóø ¸£Ðùyÿ2¿J…ÂöQ^ÅñƬEÉ YZ·Õé8[dg¸šWÙ+L¶âµ¢çñ8b´‡2>ó3d`ò•ÑÎò¨ªø hRº ٌՑupš‰\ÁKlåޱ…›bpp($é{ÙÞLÙ¸7øAÛÒZ¼K%]Î vq,”bUÏÒXN2™ÝÜDïpj×}´á6ž óVûòwa™ž¥KüÆL›“mMÿ–Ö†Ô­S½Làe¦q†8t’ÊââÊ µøÏ²²”3™¯È‹y¯|q=ý KYÎx´p7“MgGIl¦?SéÍnfÇOø|ÁÍ0'«B2Õmý"WBœÍ‹hGi<ñ1Þ¥?à ´‚&\Î8–sI¸U2åXf×ÝÌù|F{¾Å þ‰{£4ÞÀ]qи‹Ç#™;cu¦3¿¦ Ôæã}.à9eûB:òÆÐ–‹iÎÃtËKž}"’ ÏÔ‘\®$ÉÎìã.v±ŒÉü&FwãhÓœÒ 9ÝÄ.–°‘;™HA0Ù¶±“͉Åù IDAT.NýwÀJN†4£$JÒ AYR‡eÕŠ¥üŽG™Ï ˜JBÃ)ÿϰ† ~ÇE¤L¤/KXÇÑØÎr4çIÖG#¢„y½¬¢͈Ø~V1šûø¿ã‘½ËfZð—r)+y”#4åñ¸>âE~Æ&&…{ô)Š[FEµÕü³‘3ÌÉŽS‰E N\S¨_Þ ò>33/gÎÐTGÞæ4¢¢ÈwjTD^ð þÌ{lg;%4 :Ãôá‘ìYAkÈ™ÉÌÛSàÕÄK©Ôð;ÊÕ–#or†Ÿr(<7 êûRjfªwêîœ/'ú§¹ê²4wü_s§^§B+´Ù'G ¹&ýpJzàßìkÁYåWm<ýjêæÅÞ›ž_Rä&¥þ¯ü$k‡{ª‹'/òäMž\æÉ‡ ¬oÖëå7þ éa¦:¤^g¿g-M¢ÏyÿÆYL¦‚©ä4s8Ä=<ûŒ¿8‚ÃiÁ÷ØNwöð7f1žg¹=èéæÜ¼µt“q m¹––ü…[YKkú°‰ÆÁÊ;C#n¦'ÙH9íêЛÇlx=å<#€vü1d™¦fNtíFÑ xZSé‘@Mõ]Íâx éÁå¡¥jqSôåC…:ó¼^K+ºq˜¶üç0(¶«:r”&P˜O# +Çš(tšRM÷Б›ØÎ.â5Ê¢öÊì@2’I §3.æÙÿ‡Ùìç(w×M rÖþ.K2^Þ\nâL ¹'‡ßt& 8X‡ãz ¿,.þøÆ[nýß¶«yeeÙœ£%ÇóÞ¤{m³” `cØÜ²#CwÆÈ\Dr”Ò0Î ]¨Šóõ©°Ù¶á_æU†Ó…×õÅÀ–\Ï^Š(ckhÁZ¦ñçòUfð×AÝƇèK=Fð_æÃˆÆ™‡â¼WjŸ€•Ðqôb8/rsHä/ I½ðx«% _ÉA^å)ñ4i,UGˆm&ŸŸ›°ãdÀÖìg —’ãEú²-¦Mø X”’Ôº4æñUNò&oÐ*Ì=?æ¹Ð^f蔕aù<3{ tˆ ½#ô nSfåÛTâۘ´c%[™/ #ciǨaU(©ÄŠ0–rðUž`å%ÜJëD÷¤6÷›èAß@—£ŒßÓ‹aÌåJG¾jkJÕf,õf>s(‹”Òf”ÐŒÙÎ[A xƒe>«¶{y“*þ‡{9M/^)0•E©?æ]Àºò/tg1kóÎc:;¿<0ï{´£5çr6sø0ñ“Ä4>â'œM úä|jI«D›D·*<ÅÖð'Îmê íª5çªý7Šý¯$¼ðÏ'&f·q°Â95®£~êP:ú—ɨݧõ©lü^Z¹ÏÑnÜ–Xžs¡-ŒÞ£º8÷î‹©YÁUêýH¿¹Ý—iÐTËíõVÝÚHó2KsîK½À)éÇÒs¥õŠÓ‹ËÓK(+vÕ¥ƒmí"©²@@ÃpV²™EÌãHô?ótøà¬_ò##}03¨Ž#EÇMå ^ÈÕ*÷ŒnK¤œOO¨ sþ‡Ìͳ›z¤\ºÍ몕M¦gSÍ1:SÉä¿}þ¸Œ$RHÎå83žc,çNÞg¿ÚˆÑ,D)Kºê7r“/w­böœÝhË¿[”bÙý˜íßëØO0­Á‘9ÉÕ‘ð9ŸÜλá0{Œõá”í°›Má=ŸÆQÞý‘—bŒ’rbF¢Ý‚žÚŠEtaëhJ¾ÌR C(XÀ{9W¥µ“‘•\Zg•k]G4ž•CÃ9C§àò ŽjçÿŽ/-.>ó·–•e¤†Œ‰~W¸2™Ç8vr†ÖÕy5ݨ!Ù¬¬K䨮â(]h@?ês,‹Îõöð½oäx¼™sã7ÖËé”ÖJÝJéÃι) €JÖGò²ðâõ£'éÇq¢9·r8c î¦ï2‚Ûž¸,ei V1„el¤"¼ YbáÄè+f ¦‚øpDß¶ˆ¾,¤U¤ol ýB–_Õ[Yž[FÏÛqS?ãCneÇ(Ï.ë\-¿ò٠˵Çn&1ØÊžÿ¿àQ_ÌÌ>ñnìˆÛ kˆ*³‹,óddó¢µ}!Ë­ù4çrž ™âÛÜ"»ÄQFí =ØÌrnf Ï$µŒÇVLaUd‘¬/pwêù¬+ðÝÔZ6RŸ¿ø¼ed+·à EÌJK>‰°íq!nìÆÅ¼×À”"ë³;Q“Ó+õA ®ZR–:Æ£¥ Ý™Nû^¹I Üžj“Aå 4„ÓànÎÆÊ"tf=s&¦f² çîå±³f"Æm´©p¸Zž‰|ÈNúDâøŠÈÚhÉE‰Þ‰µ'½[ã;‰ÿÈ™œ^:Û/HŽnø«;*.=lÐ^—ô°øPröÔÜw¶¤ÝKµlí'W$ùÊÔ²ÚýdVËÒ‘ø÷†ž=ZóD×r X‘Ó25Ÿ=\‘s[5Í->¥”y]á•kÌÿ‘ý­;βiªIh²–ð?gM ï²Y}g6s1U!&<ÊOXNŽ…<ì½È*|Œil£ ›é™ó­ÔGlg$Ã8H ÂãQ싸™ìâÖ3€¹aÿéu℆pyp²-‚?gÅ®ˆ”ÂKhM.¦‰Ÿx"Õ„Õa¹9ò¢¬P~5FòKÃjý?aUv ÖÑŽ³iÂ|Ð?kMâºíjÆA‹ˆá®TñTÀáZ†6»XÇnZqV°ºÑ,jµ™áè*¡‚ÞœË\'ö$&¦>e1E\@}°„3±t,¦;¯Çt.ûsÆ¥öǧº.Žn‡þN»Ð‡yœÅV†°ƒ¹p;+Ϲ4 CqñѰ]e¾«ÃñN2“óçš‹E­›»1œÃœˆØ‘¢/d"‹%gmG13¸–-t @í:&s’J²³NöüLL‘Þ‡1‚î¢M¨b&§"춈oØÇ¥ìc bÉÆèÄÚ#R¯Q?ôŸ c˜Èo™@žÕ”óešò._ 4Iöb>NŒI=ÏŽìSM,H]ÆzŠâîAþj¢Æ\Á"qëø!¯0œañVb{Þey‡8”xˆƒ¹…ÁÏá˜Þ¿&Âõœd /ePóÄÁ´ö¤|/Ó‚zt`3(OÍá1Ÿm´c`ú—ÿ0xoî£ïÓ5õ"Ÿq„vóÏcô¥o o®f»M'^æb°‚÷ÓÚ>ö`¯ÏvÓ…xö|º¦æèàüÇ]9¡üe?ÜäüÍé'/yo é—ÊwKÍiª¼PyU–ät^‰bÆì3½ÚšV.-Ò÷@º©)ýÍÁç¦f–šQà¡TkVÒ³°²_þ²_{u-õßL½Fgssum´}^g=—1ž¿ä´LLK½ëTlœ“‰¯¸,u˜–t¡-à0iZ»ñ|̵¼È'$ãjªhÆIºñ}§myK¨ŒùM©é_‡u´+˜j nÓ×ÖÆ1ï˜ÀqfÇ€ygW¦µ…owVÄ/‹“w7†²ŠMh?vT„ÖfÁÒìá‡@ï±µ£ ë˜ÏVö†X+cX´f[8|ûbøKüšKÌü‘…Òi[iÃXþH%÷RÉL¥9[ø)íøonæÉ Õš ̦ŒN%ü.ld 3iÏ‹œ¦˜ÿ`ïrÅ·ß‹Ëc7:ÅÐL£˜WšWEúð*Ã8Ƶ çCцe‰» Ýœ¯ éÅ{ÁLªbKêb–k|pøygs5OÓftetÆ-,ðËÄñt÷ÓnéáÙþ©5LåržcL8üO1$ŽºYØàäÄy‰Þ’4NWúò×Ðè§‚ñ\ÉHþÄ÷xš[¸­ÈÀ¼Ò„‘²œVtd“ÂË37PIg³—vЙ¦ l‡ÏWSN¯H3Ȉˆ'˜È¶T+~ê åÃÕÁþ¸'ravr<Õ6õaô¥Ê¸ëXFæßʲ)fÇî’I^§’BîçÚq3,²pDz‚„±Á]€…ŠøQ¹‹shÁ\®bM´CïeNT6ûiÅ×Ù v»˜ À:Ÿèp¸Ä¶1+$Ä›#›0kõeÑ1"uìeG©Z‡|ObV]\üÃoéÿ¶«¶ü£L¥Šz e·²— Ìç(Utäb^¢u^P;~É›QWÒ„)\€ê”ûè˪è/¢cä4f‘Ø]9I·°3Âva}HöÑžãlàÛüŠr†rk(îÎaBìLY†Þ>æ5®àMÖqkhÎø€—d•ÓvÚ‡¶2«™î§)Ÿ°›MÜÃjʨd]Ùë>ÏþÌ ÜYêÎOÝù¦;$w®Ižúç¢ïþ,ô¹ä趤ürÖ&¾Và{yKùW.rü)¥›é]`·ò ×¥Šx'ñLw÷TæÊç^èÑo¤½Úšý©Ç:™ÛÆ%‹* ·ßVã5^f<ã9R®m•Cõ5¨®y(¿â y¾ÝÜž6ŠŸÉuœ–tüJÚñS‡ëË÷¤)ó¹˜GèÀí<Â)ðS:ó7þo1™´æ?çm–smâ…îÏû ­¹.<Æšp%š2›'òþ˜èÊ&Æp†¾ìËíPa5›˜Ëüˆ¬ŠÄ êĪè(”‡EäPœÂ+c&Òƒ\¨Zð[ærsÙÅL¾)0Íùˆ“|‡Ftâx¶ã§W…в5¿S›wC¸Eq{œ×{qŠ‘ÖýY»ÃS˜Ooæ±’VÑ šJgÆGrt¦V½ŠWâ=þ ÿEÇa—q’Ù\é`ãUÓ‚Ÿ3Œ–l¥IlW5œæ$yòt‹ÖTi°â²ŸÙ1^ϵá ¢ÉTF££A:˜& ÎNÅÅÿquUÅA1’¼nƒ•¡ìIÇJ ;ÃOWY‡êý$Õt£G#2ê÷Œâr^g«)f8ƒ‚«˜íd=™EcÚ°)Üs‡êX»RŽSUç~B‰}‘Õ(€Ù¡l|X53[îÙÁÕ^Íx–ªdmÈßXé×ÙÒÿ¹*ïuêsNLbÖTþ3ºÒ&!‹絬‡;/^êyÜÁjî£>›–ã÷3”} 3Ò,†¨m™Ä <Ì:ºp:_ëQ+æÛ¬âì8Œ×µÁe1¼&˜l€Ô£—ú¸°Êi ZÑ@ßÇüì°“3¢‘zUÞàdR¢o2°±«¹z«‘ÅúpNßüà“ƒGçGtqÕòÒ¡‹+‡Ö5ï†1ÉSßKžºÒSwxj¿§î+xjlnë„js <@ÇTý"I3KÊü™Ÿp€ö´à¬ÔF3?'Ú¸*gÊ!æ|#µ8é³^|6yìêÜ˦Û&åöŸüzq³5Ee[²‹ph`3rÅú1‚Ö¤žšìîÍ.Z™]’]mh=Mû$+çœjàHIÉ ÙÁ9ì ¤Âù¼Èn.ä›Ìam3çb^×(î§tÿCÄõ9S;¹˜~›Ö¶²—óSÖЀÞqÞEg (ãïp•œ¢y’²˜˜¾‘ÜxS(¿®$G çmn5gXM{Îâ#†Gâ ÆÒ…Ñ¼É’àæÔg[( b΀&^Gƒh!îà:ÆÐ5®Ï™ógò|DÂ[œ›Ú•ÚI ë) òV&\êÏqÆòй’¥aÐlqˆ™7q {9ÉZ‡Ô`i¿:Ð…­¼M_^«ã ú|H„*Ð*>U±tâ¶h¶oŒŽ_'Z^ucÞJY˨À­ ).nuã-—ÿƒíª>—ªõUZÑ£ÎP$Û9ŽG•i?åHxö±5,%t£‚ÌUQØf=ÐÖ´àÝøv³ëlS¸Ð›2(ìýûê@²SߘճsCþ˜t .­8Œd¾«Œƒ¾;®ÈA àÓˆ{ÏTC%Áîüü‘}µçpŸRÁ.d-Gø ci¦¥¬Gú‡ÙJ>¶Õ½‰¨É¦¡1ß`E¬çÏ|+Ñ5§[Z+›¾–zô¢³¨G3Z1–9+šŸ«êp\>¿tÔI±Ê›+"2¸M€ðGð>7±‘,µALãÙØt{qYbX=ë*3‚  ’l%=e’ÝH™kªšâ Õ“¸0­¥ Hœ.pmJâžTŽ¿ÑšÊÈ6ý,ŽºÿšsAêå,q‘=¼ÈÙÌbqĵ4 \aû´6Æ©5ër†¥Ž³™FÜÄg´NýAÌe$-èLB #ø€7˜x«ž²J9ÚòÛDA¯¦FðKHÙÆ¶ä H4LUÓ)K;ä·ÑˆjÞOòQ+XË lÎ ôôc+œ)pWjxÒïéä†a©J¿;í…ÉvŸp^S Zæltà?ÿvî­‹¼u±÷.¥{R+rkB?ÞçåÄYT%:¥vçµ(p0ïD3cN9«©KiQãÂÄÅ9å©M.n))³/Ñ&5=¯1Ϧ§yü™ÜŸFŸûôåíï|½ÿæüÁ׊*K»—ÕüÕº!ÍÜ›×Úñ·þeù–ã8L÷H9¿"º/bܾ“!œ¢=—ð&ûé¹ÏCx/‚8úÖ‰_ÿüÑ;L„Ù*÷¹¸¡$âHz1‡>l¤Ní•&R–•ìe Í‹‹ÇÿªÅGeeg°½-z¸•Ñf]¿lêxTmï~¼Ðª/ª0„¢ïûô¤€%Tr+\ÍÂØcÊižÁ ˽ÜÅiÞüâÜ_§2¨âúˆ8ÿCÆ®q„«¶ JE;FÆ0sed•rSP!>‰'ÞÊ*F1™|D Oö}šskiºÏ ažÅðTÔ±Xõ§cÌ?³ä´Ly¸ŒOÂ[^É™D_Þ`EÜÉÖȪÙÎNEÖßi&1Ÿµœà—ÑòN# ºî‡¶¯Ž!¡:ZާcÀ³&6ÔƒQëdù­oG¸õ.¾z´²vžg$]Cùy)󸜧1Y]¶Äü.­VnàKœÃb¸*­-åû1Ÿ‰¸Æ´L= ÌÓ¼Âuu.†l x SØJŸ úq{êýÃzr;åm¶’N!pÏ<|¯fˆ¯TÿJ§˜I¶ðPÀR§3?wkù6o¤VSjÝ$ýiÊtâ·ld3“Rø˜ØA¾A3Šø”‰ÚýÆ÷jÒÿ¾Å;“ ÏôË{Ò‘Éö±°—…Ÿ®ùq^Bƒ´–fYÊ|vRÄÓLfaêe¦èZ£†³ijtÚ+ÜCÓû ôÌ×™›ðLêâjsöº*õ_§JzŽËWk_ÒÿÝI×Oûù±]­lxçä÷÷k\eÖuFT;™z;ç6U{™~ít=ewþ‰Ù|’úi¥6 ¥ÊʳTåÓ«ýè=·®ðr¹êîÔpç3&²¤;Ð@Ÿzž{Ñ­‡­)s Ë1x‚©;xƒk!)ƒ©¤](dQI· Ä¾˜5{ méê3fð)ø>#™ÃŠ€ng¶Š~Èô°Ìgâ3e;¥œÅ=B}5ÏÔ¹­n»ãP(·q”+¹–ÿKŸXX–ǤãD4Ð2“ò&„È{W³…S4ã¶s”k™ÃáåÏT¦#¢M70Ò+bÜË"¦Ð‰w ÜC5×҅죜[ØMßP‘Ü &YL×îà´•EžÑ¾øï¼Ë8Z2.Þ>¶†ƒhdtãšñPT)ûb›ÌÖœŠ¿Ûí*‚®yC*¿O‹‹Kn¼eÒÿ¶]}ZV6™}tbO ³þïªèég›Y£l+ûâß«ëìUߥ;Ýø9 ˜A)-ÙO 'v™Éü³ƒY‘@ø.ǃÛÑ%6óF‘ýUMB>~ã6SF}Æ0‰5ÜÌ»œæ†™õgZ¡;Ss‰4ƒGXS‡²<ä[‹ƒ{yàšºðѼÀ¿$ö¥>`3%lâëf,m)³Ã²S»û ÆpùPtÒ?`n ‰‡R‹Ù^)38Á5(Ð;Ñ7õ1íx°ÀÔÄôÔ×8‡òfÝø=ƒ˜Ï$>æ ã˜ÁeTkÜQó½÷ß¹ï,K¾¶8ùÚñôkK\Vàþ‡ìËñ‡Ôï÷º4¯ˆŠSùD‡ÄÇ¥3š‹\•WŸÓŒçBJ(o¦WÊý*­C{%çd^˼]4hæH=Ý+4iëœR}S}S%i­I£¾£ Û¾6®üþ­®}þ¯Tè8÷±ý'úíqçÿiVÖ+ñ|¹òÄ7õkÔOŒê£x·9kk,.ðRÓ+}µPÓ|[s²é¶ñm—÷:ùίÃÌw =la+6T>—æßªR7ëgÞ?üJîž±¹×ÿ)ýÑR?]mDY¿SµŸîü­tâ}Å+Ïbw^ g1€>%Çiž‹˜æ©ê ÍS39Áiýë'ŒÁçÙÌÎ\DKÎ GsMÌ“šÑ:FeY^çÐV3‚6”SþÅ­«3_ç=ް“79®–Ü’j&Ñ’ ©f-UìÍ×¾‘÷™C ágú,¬ÄÙÜqfÈçúD¾h†1kœÒó†'º M‚5óB¤¢\Ãωù*G"E¥š;8À#xú³é¾±v!†ôŨŒUv€fœ˜ž:›èªØ;Šƒ¡Ó™†”r­(©³Bváxí¶aa ó‹]\¼åÆ[nûT‹t¥Œ-äH MB×!¸Y`ÏP Ínqäz d½687Ž!ûCVÞ©K¢•n¢LY͂ث2­ÇJÚÑ–zuJ¢ì±Šú±Ê”2’¢ÀA 1-YÎNr,Y—áS© šCæ[ÌÔÄêœÞ©D×,ä‚tÊ›ÇfªhÃ.~^Âì¥JôHj‡F™-·K¸‹FÎ’}a›Ý׌(3!ô™çôŽøF²ÙÉkQ¬ä,.älöQ/¶³½9ÓsöŠ”È½ñÖV3œíTD`ö¦±& ¢y3§ë›Y¡ Õ"1>§Mj3¨Ç¹tå ¯ç5‹ Ò¹ìe<¯Ò…><ÅÍ|Æin iò&«‚=uÌRf±ƒ¬ÊË,VòµSÊø8F¾÷„‡/³ÐUr5[£ìÎL$GhËvZs9›XÉa¶0–¡ÜM)·3Ÿ>yÇ~OÎìä¯aYÍÖ²‘Ñ…oÅd8“Í”tà»ùeƒÞÊÿôÛlBEZkfͱœ/ÕÜõmÿµV~”·¦ùé¾´üd¹ïv¸Â•lnB…,áî*0·¾^å>nbpµ$ñýj¯Tê^íÍD›–zžv”¶y ‹nèúJ…MŒllÔ1Ow µ€&y™þ³R·j»hUà‚Ôq »hyRóœ©hnG wÓªÚ¨Ô¹êÉÌ©¥7Ì.mZâ¶AÝ÷þ¨DY⼤6˱œ+Cv;’ÇýƒkW£uÞ£,ïtÎuô E^eNëÔŠüîÅþúcívêÚ_vCÒ«E2ò@z<ïQÊ6d'˼ßpq¾hº^ûÒC3~ŸŸ°ÐÐ ¦V4ûé´ŠÉk|2Ž3Ld {ê›VhwM-—¤&HOåbq6wr"Žkõ"I| •LðñËxŽ>Ô¬²$zwa.â+‘ß‘e´ŠÅêNÒ>æîÇ¢QöÊ¥‘CŸ[Ù*wÇLó:‡Ý)ÑtÎ&Ñ!«þB…¯³€2Æ1†Maé=9ÒÚ1G9Ë9Ã%”qM`ÝÓØ~:±•§YÀ1êÑ„shÀæ:ËìPÚ±"úOµùD©6©V¼Æp^f5CèD)#Âà14N{›YK_7 _Mvì®â&Jø„ÅÅÍê* ÿnÔ”¹“RΜˆPkÊó´ã¬ˆ¹z&ô¾·òz<7uèzÓ¼ÛNì`ÿZ§ |!þ|)‹¾¸ 5 ýá©ÐödæŒøŒÆ¿' ³iÔã ØÃ¾HnÄJÑ–MœÅ—9 ºƒñ‡ Ì¢Wð!3Ri¢ŠAlçu†œ•¼ƒŸþQ&×Ä0vGt¨?7pù»ÑQ–ŵªŸ ‰DW^c ¹>$ )ä%zñÃɾ¯Õ4àj΄t*û³èÎÒé‹Ïz7ŽÙ—x[¹ŠÏXÃÆ£&PÃü˜_2"+¡Ísn¬ñò\Ã…{c/#Â}¼wÕÊ1¶²ˆw©¢'5<Ç'ŒH|#Ñ"ï-Æòºs=¥œ“‘/ ü8oeZQ¸‘Þ¼E ºD¤P£0Ÿõ =¸…Þ áŠ@ÓöæT»j<Â:šG‹x \—Ùy¢ÕÞ–qT°™\ÌjNðfô .ˆ˜óaÆ2f‘ œuÌÝÏçg´¥„/Õj:&-5a§Õ§Ü–7n ÝìÁÛ[¨ÊkxÒ±œ‚bíŽYš}‰Õ*O8HQê®Ì{¹Ày¯¤v'¾Ÿ:ÎÁæÚœñv·rÞ`Í ïœp1#x‰,aGf>gG =*µ­¶7oe5µð—&G·Óü”’{SklÊí¸´á÷6=µ©²DsNätbLÏnÖ“2ŸëS;èŸz,Ñ=g@MíácJª&u€¹\PèûÕ~^«ŠüÅ7µì•Ny'ysL²¼(Õ˜¯P™Ó%ç¡jõmZçÈp#ˬW›'WS"WæòêUÅXôo\À¨Ô'‰*.aàEŽÆEÞŒü2¢ßd-}ÙÂóÑOãæ=þ¤ ì‰Eé¦Ó9PKø1Ý)¬“!—=fEÐÒçLY×äsªêçaöƒëµß ^ÔÍäb]ý=]È…wðÖP]±Mh\éÌ b{~C—ȧîÊnÆFø<­ØAÓæeËgø:£ù¤Nž}f{³Ž’¢:¦0Y5’-VÏÔÑ[æ0$6éůš«ÜÆ0=Âß’ýõ4ÿîyü?ÕÕœ²²3œÏGLbUá…ÚÁ®°³•ñUÞ`‡Ãõíh¹¬ã.®df°GE¶Åv0¶ð«Yî@D–Ur?]brÞŒqÌg<éÿ¾›3ƒÓ‘#|{¸’î,c3R²‘ÝÑhÞn¾½ ˆ6TgºÑœ}죚ö±o¦JY ºw8ÑmÕqâ¸„ÏØ@o“p%{G†R¾cÉŒ¤„Aa”žZG&pƒ”0 kåújÞRNs9ÓëI·²>tó%|²Nuøeªùnð7×3,üsëÂ8V3šEô§”%,¢-ýiÄ60"­ýÐv±ƒ•ÔgË9ÍUAý¸•Ê,¹œ nOl(Ð'UÃÅÎåÃ,];1e¬dCÚ¾5Ž“2)­]˜ÞE¡ûSŸè3c2ý3O0žFp^Î`Vg5·{µà~¾È,N™XPÍ¡¾º”ÖìLŠÆÎ(Zâ¢Uã#?KTó‰È9Yû°>1–ûª]»Ö9>™rGNùÄ›í+Ïrï«~ýuªYÍY͇Íêð!?ÐiHü6tš^‚El_ÉÏ0–õL kà‘p>nf;³D>”XE3£¸‰¡v½œF&0…&ÐÄæòzX™ë9*'nH<ÞpÑ©çL`ا*N.e-Ajª„„Zši÷Ë\ 9\ÆÛ!¯}4LËÒFžÕ¬êÄνœ5ŒæÚ åÌ µ/麞Ó\ŲœV>ÖC¨¬¬üǹ«좕ma^Õ…­¡Ú®‚²áÇ\Bß %/¥ž.¬gU0×]ÌÞaW0*ç¬ FûõáE™Ï ޱ‚­aØ–Å-le3Ã)éUbÚ(„÷yü„l¡‘²(´ØÕg\’1-±œ>Âkôe>Û¸›_…¿õsž Ü©“!y–vm¼Ç, ÒSe ‹ø²““ìg-ßåh(è,æS,äfÚyÙü…ýÜÀÃÌàJz1Ÿü;¨æOq‡ãn3x+ŒÁ® ÓÁ÷›¹¦S#rIЯ[ùߤ”a¡ã£ž¾tc33Âáà"®åMYÊþpؙ̒ éßÃÛŒa—†úùyœeLæöñ9¾™X]äîÄ·øvïì'¹Ÿ>ÔºèV0ë¨æe&³…G"Ÿ-ra¬ÛξÈ`¶òAþ# Ä$^æ–³ƒYžû7nâNž @²Ôñq>ËvNF>S䫱-,a,¿á-ºG"æ)ag¸Šm\†g³4æ™W³§AuÜÁ`¼º«Ë*ÔÕÉäý'½˜[˜HÔìÒpYÖ¨1¢‚~->Ï•-êZä8‘¶$=¶%E½å~ÆŸb|Ÿ—Ó D>Qlhl4õg›³Íé_ØYÎb†zá÷½êò#r+CùEŸÈÞ¢Š›âŸ}­¨âÚdËÉ|ŠÕ|›Z¾nN¯ómVPË'¹4ò8]yŽ#|– ±' ˜ç3““ÜðQõa»1”!}”&î X¬-”ÿ=ðýúÚ±‘"êÙM7*Bùjz¥;”¨H:@Ãý¸•E¬¦ˆ»¨ãM¶q¥üŽ Å~ûEø×nb.OpŠ1ŒAøÔâ{"4Ed#}ƒ}7õÇo Qßô©ž¢–Ržå#!z‘¶NÜÁcab×Äͬ¤4ÊÓÙØ7©ç —3Š·‚Ÿ6%Æ¥ñá´8éRÎã ›) Ô‚vf±ƒiôç+••kÿA#ûâ––ó87Ôo¤E“BÛio>Dº“PÃ*òá›2ŒS1·%\>¶…hdjBKÛ‘ßf8ׄLYĬc £È0šA!ÐS’_f 7°›e|‘ º_C:ÍË³Ž£A$¼(´áIìL:6íÔç}*ØKxˆ^”ð¾î³Môa1óƒ!þŠP^|"e|0ðÀÞc4· õì0>M]CÏ3š³˜Eî§sCêYÈ›ÔF.`)›zèÓf7›hEƒ¨ ƒŸQv¬«x€žt§‰<˘Û¼üÅ\pjýÏ¥†4a ›¹‘&†2/[17±+xµŸä"¶1‰&š¨æô¢‘µŒ‰\‘tÀëb¾ ãªZ) 䟹“Û˜QjhÆÀØóTRÅÅÌâG±=dBÑp곪 ÍÐG˜ÍãKá~™ò-£¤CìŸX@ÌòÇð¢ à‘XC°meYäò¬‰^E>œ1-ö<93›ÊÈ%ìvÞ}&MÕëªåj_ÆoéÁ»‘³’¹ñ’äîQÝ UE.ÈÉfMˆÕÑØ[[«o&~ι#øûJ-qUÁ¬?Pˆ:”ÉÉtO|¿LSÖ%û4•8^nj«ÃÚßMÛãAO{a©Ö”ªšcב¿œ5a†}œ©Ž-âVfòezs6‡žÜWؼRF=Íaq8•Aˆ« +þµl ÙÐKª˜n'iâj³ØÏWÁ6>ʹÜ*þ²´18 æGÎå0ï„4ÒÅ<ÈŠtæw¬Ï§˜Æ~ ‹ÛNv2‹uÌe&[Ȱ€,=Š|:¶6|Í7„pMè¡hg&OÓŸÝ ·¨Õ°×âàž¿%@õn¢ŽÍAT|‹ã\˜–+RåפíÖr1û¸1Àb¶²‚­¸¿­¬ìönW‹[ZÎ% £°©”p€3Œe‡ŽPÞ©@* í|a°kpÙMá sháFº3†>l§-ô½žænNò× °Nb=ƒÙ}ÃBµâE¼Ä›¡™¸‰çÙK)g±•AaKíÿƒy—¶N°´}¹™/PÌÅ!*Û˜’—‹CNkHø¸§ØªÁR¸ŒÏ±š^ü)TÐæ¸†c§™k˜ÆØ WÐ#¨—é +Y÷ Aã´óxRä`$N¼Âé>~Ùà¥P{:ˆ \D«ÀÏÙËa&²ŒvúÐ=ìaÅ¡÷ý"úÒÕ,g9WRF5£h`+ÅpºSIMøï&a·ó‹C—s*p_ÀqæògÊBÿx.e7C¨¦†)ákv!7±?2(²;ñ‡XΠ2çp&¯=¤èÛÂÌïÀ ä6q"ëç‰?0,£’ÕôçBgÌáç_H: æ%äØÅ"¶P>Ì“ÈÒ“å¡ì|@H¶õOü¾± ±“Leýx<Òš[B[—ë~=øqÎ J@+;c3™ÅüyÌ 1Þ}Ÿw„šO†Ú@è~?\Ï6ÎegX»ÒúùÚÐ~ÒÖ©€üDèz–ú0{ëOž¢½©&¬»)fDÖM‰w¸˜á´àÖÅìÃÖP ±¾Ó7гuœ±ºQÍ.ΰ%Æc¯-±6¬±—ÄIŽqasêÅ»DŒagÓÎlŽbí¿9£1üãþ>#[Ìù¨¥•ÛI‚ß*tŽ"ñR(¨§ˆ)Ié0ÿX |½¥e}ˆv¿iNI»)z§Ë;ÍHJCánÓ‚ z)啜¤/¥,þûw1}¤}äÇ;åÑh?##9ÄEŒ¤G`äÔ†=u›‚üº…sYÄ¥äÙÙéÙ¦àsXBK(®/p¦SžXvÍ3€“'‚1²5AþÚÆ¬iN÷›y5™†Iâh˜üä<Ö…ïñБÎ*ðå0…š›8ÈÙ\Ù`kÃ.}ÚcØÃèð¬Ž0*ö§/å¡„ÐÄkŒgoSÅÕ¡ð¦†õø,SKS賘ÀnÞÎi¡†‘,ídžìA¯Ñ•\Ä»L _§ìçZ6ó/s†2æò°&é˜%¬+òß±^íÞÎûc‘OGŠ˜Á_©e ¸˜¥T0"²‘>IÇø÷BúRO%í‘-ŒŽ;fc)¡®‘O°…•ŒeqZ«˜í ›¼M3Ô2²Èq‡¿^@¦îe4Û¸–“9Íè“ýígú>s~ÓæmzrfTÑ™{âì_Úéú­Iû+~Ùžm½9§èÍßH""“§Ò°Œ£Y%c÷÷QÜâÝ‚ë N”Ô+ËûA¬8R(ү،¼a9ã î‹Mk•â]XŸµ€Ÿæü­È”XiÆ7y.oddÈ`ýN±¾Šý4Q]iH™ªf#c}çÇöFÚ³†ÅNFf2±—~9×÷¶§Õ vçeŠ\7%çXâéØ-fe4EŠ]‘øïŒ[#{­[™ôœhû’H_z%æ4C8H·H×įÄÇ©Êè••kí¨N˜ÈÑÂD·¬’Úë½Æû×úÙ; ƒ,-c=“ûÑìÚ9B%ƒ’s(`Ùx~Ô¯w±Œ’ðIžBë˜ÍÓ Êú4õL - ùJaŽ3ŸM¼Ëñ@áJƯÑÈulf4Õ'C g‡à}ÐÁëû9‰Ðü”uV0—&Žr€±dØÍ:®àu*¸<騔‹Ùp‘Yndh m¥S8íÁa¸#,zÃt(ûØ.æ g!Mç&þÊš@P* ž©ÆPq+hw2 ìd4ûèÊò`ù[ý÷qÏ;‹Ÿfñ:í`]Ærabrº“ú•fÿfWo·´|NG—èGÂ×uz¨úH_Ü4üÛí=ÄÊ®¡A5…ŒÌ£Œ_ä¨e|¸ ¿ÿ¸™iü•É¡‡ñ×ñ\Pf†0˜-)þtÈZï [ÈÁ Ï…”Ü7BŸl†å~Ü´€¬ÝF?® ³:O>òõáL!ûÂÈ1ÝT6ÑÒBãƒìØÇE |á*^à‡Äì¦ù#háb®f!?£†Kx˜›ƒQøýYÎeÜÌ£\ËD~Oä‰`/\Þ”6N|õÞf [Ì_Ò!ǧñ4;kÝÒ ‡éÊ3œÏóÜÉþ›m42Žó©å]¾ÄlNvT!tÄV°7€m–ð&«¹’bžä‘O0†„f2;|~“ø9+AkbMb}Æ„ÈmYÓc§ù Ǹ†WYÇ^&S›ø§¨äw¬ãKÜÏí‰EnŒõf£ù%[Øì‚ghãZ~Ǩ¤c}éÇ)Îç²Ä7è.‚•¡qOñ-ã ™e£ŸôOŽ=‘³«Ðx£ ûm¸+Ùð¨7ÛúËìÛ7DoTþBÁÈ‚¿²ó\‘oTSSdtÖ°¼=yU±öÄOóLíáDÖÜfÃZÅô%Ÿ8Sdn‹;òjòþØâá6‹8§»ef·9»Øí^n·£¯›r&d•v³¯Nÿ"ßʪiöXÞ YW¶;žSÇ“c›µäíMÔ%º¦zib÷X-'½±;10ïP»ï·¹*í™lWšøUb0Q«~Å®Œ”¶[ëÁ˜ÈYçÅ^Hä¢íj|»Á¡¬&Vs[€Ä73"ñNƪbÿš8Y¤*Ò£E#•ÿ™Ï8žb·q3ƒÈò;c÷²8àÁòl ‰ü‚©ì¡”îçRb^b Þä|N²€?÷¼~×ê7P¿YÞå+Iò©‹“æ^ÅîÍššŠ\Y䆸ð¢£ßíyt_Qkq‹ÁýJŒíj\^—Äñá,êmmìhâK­ÝÝTâ7í¶uõP»¿$.o×ÐlS¤_ÆörÃ(/Ö;ç>Þ`e±»ÿž8Ùæù*«‡©=bm‘w#ßj6° ¼Úú#Vò±Øæ‚Ò¼5Y-œÛ®O$*swb|A&‘á¿Îš[lPlÉ ³ŠU'öµëž¸7ã·åêÊŒhï(.ùW¹,QË–ËÖ™ø@» ]Í©t¢Eïij‘ú¯óáÄÂ"KT±…×JÜ’8M[‘»sÉÊœ)H"/°–I ¦s+MY5‘âÍu2‰÷²¦&6ûr¼¶Þoó>ùšŸ¼/þQQé฾šWyÐÐL2}mòØÛîÞ\ü?wÆMŸ¥,ç[üž…<82iÙæU¡tt›«<øA·°‡ff0Žl˜ûî j‡þVî`(íTBEžUšt½§…° Ü IDAT=8æ{p‡'v# ň=޹7ó %ôäy¾Á}¡Èí£äÈpë8~D¯r*êØ;÷ñ­Øñzó§©0°7ܹ ¤ÙÈPF‡B–´¡ê@†]œu]dsb9w²4”0ÜÂ}´Ð=°vß×]Òbõ'y> ¶G±˜™ü Kû¹‡gÃ^•¾b_g$Û¸¢²òà?ˆ wiiÙªãñe631ðK®¦;ÃúMšèO¿pÛLýS8Μá.á½€bJ½‹B£šà€Ê2‰qs<ŒÐ‡üýð©uÁ«ó~j wóóNbqÃ8DUƤ5²•¹´0±kùZùk¨_ìš11±‰Ild8e|‚ã<ßéi¤cÌmEâȱÐÂ>Ÿ á¤v'=BPžéÜÍZ^8Ý­ÜÄJ}¸‹µuÔ¦#дu0Ý&[˜Ï¼I Ûù`Phß§9§JãæN¯ÀË&CK y¥s »éÊ«,¦&À×s+x‘sN#—0“D –Öylç)>KK"_ŠÌ!b,W‡ÉÜ7ÊETdœM†YÁç˜{’:¾KžÉ!Mr¢ÈgcïqcÀìØmœ]fp¬„׺º«Äøvϲ‘,!Ãw躾Réõãìˆ\ÙÆñ"oPÌA6pŠü+uá•V]Œæ~feä’Kǹ{µÙ™½Óì'M™ùè¿$þ‡Š¬1±¾c•±Ö‚73þ©àp‘÷bÈYØ`iÞ mrwÓ…–.öŒÉØVé‡.n³¤Ý!®©µ¯Þ U–eEmfô‘M”ŒÐµàH‰u­îaT¥8of¢6ÑxÆÆ£†öV]ìÊfºx12þ´u‘n]Œgtl%¹HÊËtåÍ¡Ææ¼û]W‹Û -2±\ßœ—ï–˜ÚGÜl,ØÝÛØ3Öµ;–ñ^Ƶ‘öÄöD;*­©·í´Z•𓌳6´Ø–1#ë;‰e‘z¦Äù[:«î«1ïwœ×M{‹ææNlÊ™˜š±&1Ž“üobu"Š=“s'cÝù\Ü‘Mîna‘_ËŸï‰o}CSo§o1»Â˜±t·ê'­Œ»ÿÖ¦+i°’,¥Da³;ðÚËYÄQªHXËИžÿ.­Z¯òY6ó!¦ÑÂ^#O] Ûìç¡»¹™o‘ãd§å{f'`Å9ž¾1:äbÏ2=­ܧ«Âq'Ï8F³—©TUÙêÁŒúðÒ-âbV“„FÅKS8Ç3® G׊´«)ú`“ßÿÂôÏ{"ñÄOÌòôŒŒå‰j.bOgÌÈ:‘8›{2N'Îj—/t”E]ŸØ•t44~¤HÏ2_-1-ãüÝ ~Ý]K±\»>gÚ\ÕhL³7zVdõio´+kvì´e±Ñü–á-ŽœY™8ÍG{]ìøq™®jËnÖ³ÈöÞòcc/ÔP‘˜”X^æ­6™V‡KµÔ–¸¢ÅŠè­{A&çãÕÖÕ{7ol¢G¢¶U}ì@¹–È™Œ2†%Z"%´ôTÕ¬!‰ÑÔwu Zí)•‘c±BÖµÔ'^ï¡wN—Œù‰íÞÉ™Ólϵ:™Õ«àeêŠ\Oßj›JÌ`]¹¼ÛÕÔvÚ³Š2v$t(H¯Ôé^é¦E.Ü.ó„So¸¿™þñÜbõ-Ö¢½YÄ—YA5£™ÈDÖrˆËéÅCÔá½·s5÷Ó•zf†l{×±–é¡%².Ì{qœ˜Õ0%g:U4í 7°1¬¤*x†10 C_e¸SXÏáPŠQÌV¶„Un0Û˜À{dÏ!À>=ÕÕÙ fiº²;"’þhpë”íMÕû3áw<À2ʙī40„qŒb[øÓàóz®¢ž²àz<мþïG §ÉóNÝi~·(âëþñìjIKKÚZÝÞ©@öói¦> ŠK¹·QÆwy–ôf&‡ø2£YÎÚÐÞ˜†Hž¦œO±³Ú,ŽÝÎc~“¡œ<õÁª—ö0}2¸*×s'Ï3ˆ³=Ôîáóxå|Œ7ÙËZ¶‘PÅd±SòJy›yDÜ*êç‘e “™Ã“\ÎÐ&^ÎÄp¿L»£^a+õtg ¹"q’?U°‰+yNG­Üzþ+cWÆ D°#˜æÓpô¯YFQ u]Î^¡7XÏDN±±Èïc­¼À{âCç·!Ô|AbwÒá\È®t_¡¯0ž:&ðûÙF]BlÃ×DÂ|€ëÈRÍ[|Ž…ü˜ 9¿MóÂäBTüòwèbÚ×îÕ?’ëg_ ]ʳ<Üfxœý±«wxíK~wsKaS›–v‹ þ;«Ù˜‚7RâhÆmmžÏ{‡&®ÌØTìÛ‰ûŠÜØÈ¨¢ˆµ]ô)7¸Î÷r&u·²/Ôy=Q›ë(ËèÇ#õ:®g»QY‡ *c£¬íj|™3mjKÜ;Þ5»œU*ªv昡‰\Þoc#JÌËËçÔņVéYgwÞä¬ñ‘êHUWS†èyR3ÛèËÓ‘ù9™6gŠMmò‡‚Ù±†65yµeôÔí¸êØ/jŒ>ãÝnšKôlW±*Q”3*柳i‰¦¼£éšØî‚‘ì䆼 ‰ÿHìÎËæý41+27£¬Ø'ÕÓÚ/[®o¹å-*JŒk²2ñDâ­‘Îkõõ¡ÓvñKî*26oyÒ‘C¿ˆ¯‘uâ#ÉÖár“¨çÙò„ýÇMnòÖY Ë$·r3ù*?b =Y­¬ÓîS¹œg{aƒy™Í<˜Åkôä ’cS œGÁ–5 Û¹3p„~Åô¬ŸÚ‹Òä¯à…{ߘpGPPNs”û#ÏfÍ-¸—}|2e)ÎXÆøŒÏ'že3G© MãùI¯ aö‡YÇLn`Sy&±œJæ±øï·¹\Ê’à§kÎí4>›š¿J¹’—YO=¿ Åo§ƒ 6 ÆóGˆBoÓûºè§yËy›®cæ”v„ctlOÔApþý2îÍØ“8P,Û—±½Ø­±n’!ö2f´¬Ž–vwì]nd9V²KBGsŠ@|žéLáÛla!{CAÏX®Š:"G«B»=T–\O†ð×Pç–†5?ÄÓáËØFÈ#ØO¡“É»Û:ýçêNëêíŒãDZg˜D†¿‚yÌ@š-‰_±“j¾F-ýË÷B•Æfs¿æ|n#Ç¿r}¥øH(ÏìKžA³‰¿Ñ+8®kCãÆ=Á‚t’ï3Œ ÂPã«¡66ø#ûCU[ê¿-eL ¡ fcÙÊ«Le6?ã$5\”³–NÛÛêÿGÅíÿ+MxdHæÎa+ÃÂÖdÓQtc+ã‚\¶’%´§ U*×®G¸Œ˜ˆ3ôà‘ðlÞcF讎;AÓÇÄ`Û¿ˆñ a"—³…zÖPÁ˼r×1]Âò÷ê8|Û׎I&°ÞJDyhcúDøX!a ¥!.>Œ³H‚çgfÐg§R`K9LÄÓôc<Ï,Ʋîý|tÆíÁ´RE?–r ëBÉ÷–PR)¸NÓFÁô|w‚Éä†yWRÙibw5_c?Ó9J9£t¨WðO¼Æ4~ÍDf2ˆO³$ö$Yö²•OftMÔ2RGkj1­ô¦’6Æ¥3yºði>DžÑDI|}ìu*ƒfKš¥ˆ `;YÉùŒg"Àtjv/g4Æ^¢{Ƈø"ãŸ2.Lìc›XÊp®8˜7ØË&Ö„ét Õs’žLeŸ’ƒ>Vínç=/–ºë]EGíØïÂ: .põÝQÝéèWý2º18£œ#‘™}mÏ+J:†Ø“èÙdO›=íoúç‹Õ”¸8ï©Jý ú¶J8©àÅ~qqbQÆÄ¬½™œ8›îeý3&dÔÄþ3oI«ne´Ù“(N|½‹5‰«ŠìâLƉĦ‚ê&§JÕ~Úã5.<åX»¢î®n±¶ÉXêJÕ²¬Å¸Äëå6GºÄF%†·*:¬.§½ÁïzšÛ¤±«ý‘õy+²fDZKe{˜TlRθ2#ò–œ9e{Iâd75yßΚRì윅T—{-rM¹íº6w¨jiS{‹ Ý lô@AÿbÓb3†%ö&*NøSFC‘¹­ŽÅ^ŒÜÖ(ÇéÈtÞ)8é‰ËôæÒØ”Ä+‰«coFF–ªã½Øº¤lË•öؽáëŽÝ™˜Ä㔳‚nÝôh·-pÙ‡SÁ>.`/å¡—vg êƒY_¡Š‡C};Í\MÏsïÐJ ©ë´W½ÿ8Þ‰0!¸æÂ^•„›èÂ(ŽSÎïÃV·7Ül*™OCÈû_²°)âò÷ì¥"L:9».£9Qà¶òVøŸw†ý»ˆ³"Ã#B½dQXIæû†³…7ÙÅ ÔÑÀï9H@ï—ùf;Õ™ âG: ¯¦‘k¸•j ~ÎæD§VrQè_M3©=¨«¬œwÓ­—þ€ÈÜ@aHX‘1&ñ8Í”3AD<Âet#fLpô$ 3­c¼\:O08;¶þý;:„® Èc:qîG³‚³ÇÙÆ"¶¢ü0úRÆq ô¢ÀV±?ĉ*;•O„êÆÔ'Òã¡Ìi=•¦?·rš×)e0ý³S˜³Í4?tÚq—:_kÂýiBÀK§c§•©üéÂÁ –s)qy2 6tšI¦nø a#ÂzHè&?C÷`Úœøi)¬zQ˜ ¥â*2.¤g0Ôö᪑$0‚uœf3ç0ƒ>¡O%­éjc.c*g³’, , ¥Ë_â²pQ;H3{x1D–ó7¾HÂi16kz¢:úð½øTb#±-²(Ò#Ñ'À3GrŠëÎØÙÓå­vSÌŽHYÖçPG†w¸›!ûÊ&/^kSên½ÎÛ»\½Öõ‡T•‹ZýëìhisäÞX+û2ÊJ +µé¤ïå2nˆ4U˜IUÁMSFöDÎ/vs¤$o]³7»™Ó¬6²=kVÆä‚ûhMÌ MœŽíJlëkXâP•eõº—Ë)-èXª_‰Æzêž÷^…ymz uÅiƒƒZ¬-UVÐù ÝKÔp¨`àI£“‰£M†ÆºDúÑ·TÿØ©2C,m1¨RkÎÆœ)‰¶HsqÞš6ŒEíŠ j²nìbs¢g“C^«6¶Q”õFÎôŒÉ<]æÜ¼^Eö¶P©)§*ç`Ö´RûZ} Õñ ùžúµ[íX‹¾,N”Ä>Ù¦!Ñ•itMD‘|ì0c˜¹ªU]¹\F!vN¢ž3‘™ùQÖ§¯[^ÐȆLGQÅü"³vR\0/ùÁ]u¢ø‡·Û{ çp–Ƶ:ÞÃÅ÷—˜ÜîÆŒi‰&fòç ±Œà!¦S‡ nû Ôò=B¼!%FBƒèA LãÃ!·3=,ú—„/ãûƒ«T‡ÈÒÎŒDú'M+ý¾•›è. §ã«øëÇ2¶'p/Ö†“údZžQœ8Ì!.¦‰©”B ¤$2™M¼ò?5œ`Hxæ[ƒåä|J(ãB¦ŒZfor(æ>žp_¦S&[ý©c"X íFr8@–?ÆJÑŸÕb_n%••“nºuÁÿ×võFKKc˜¬¤ÑÎÁa¨ó>™bOàÃ,ìDa?R·ÿÔÉ$s",»®bFàuF`¤;Si ;÷çvf¬{’f­ 7‹¹8ŒpRÝ;áBîê h°Í줂9ŒfOðŒ ¦køOñ â.ªYZ„oæiª¹0ñ*Sxƒ4P¸¿ó¹šC¥ÓxÞá$ëƒÿû#¬a@Ɖ±làs”§K‘Ɔ‹sØÑi»z¿ù}žôÿ+dr[šiã?ù e:«MR^å uhæÚ¾N«mÕ‡õ\ËqðBboÆ­‘㉗¸…—ƒÇ·•Ñ<ÄYlf{µ{=›’YŠ }3xå/ éïc¡n¿ƦŒÛϰ |‹ò|”ˆÒà,‘xŽ ³Ž–²8$ØÊB9áº0ÃK[<ÞITæ-çÖpŒ“Ã#ûŽ Í:/s¾ûþꮃȺár¿ñÞ]™†^ÑÂO$ ˆ{Ð-±Š^œ›èéŸ1 `IbA伌‘±‡ ÊCÉvs~™ªvgñ`ä²6‡ÓE“|¢4‘Kœ]dfÁžÄéJ§3¦æœæ\Ê™6%Y“ÛµY‡ÓZhˆ]žo^Bm…1 ¿Ìš”4>²+Ò™Ii­žvÏÇ^ȸ,ã+ôñFl(3‹<:ÉÕM¦÷j̘Àì`>ÇóÍ êµ9vaÒÌìÏéƒÕéµd<»ÅÇZ2æðdÆÔDFÑËS ¦Šs8P\sP›õ|‘*:x…]Mó`íãS´²–YœÉÆ2=XhÓœÃÀÐåFô´ñW.ˆ„O0…ãœàó(£)ÔÕöü²ˆ4§RI‚ \Ìš`jŒÂ‘3ŽÌ@*¹…eœ`XÚ/¨çòòc|…/suì{ Uñ}Ëøí¿q&=±Û#×äu_iߤ¨}Z kÞècù:ûìNêK«Š•GFeMŠí‰e³ê²º§ªkPÖ˜6(ë%žŒLÎúhdË’º#É÷±Ø·3NDºòlëuþh]]êÒþÊ•‘QYbåY-í š í³7kx¬›l»d·¡]ºÒ~ÈêQÚZœÑ«0åm–dÜպ凙=C’ëçvFC{·Õ$²Gë”6ªˆý{Ó ?ÍûÔ—ú÷¤ú9#cW¾V[¥¢íÏ<]“—žÎØÉ² :{T'.|aø¤ÕOœ·»÷›)×W]ä”föy§š6=&D&f}¦Ô”RµågíïqzÂi½Z2 7»ÓÓÿ–ñLÚMYsòM¬6¡ÇÙY_â´V+¶:v]ư´Õ 3+ ‹õ¦lì6,–—‘È:ÂÝÁÍ™ ‘qm³k³ÎÝhó]5…{y0öHF-u±Îøžoûú»/ÐóSfò: ßáïÅÎg¿#/$˜o¥Œ,Ïæûk¶_a‘ã‘>Æ+¹lIêù{YÁÚ|¿Ê:ÀÛ,bCCÏ}4ð%æÐÀjÞO=Ëx)P~ö±‹sù¯nÎNÚù%O"ß‘`YÉ#Ci(8ãiåÉÀ¢{?öä„^(q›Ãz¬YʾÉ,ÞǫĜÃëA.ð/<ÀÎâ¶œWYÊ ÖSÈð’ÍQØ—1óG‚zà5ÚO*9w '¨ÞÝá cÏI…´9ìÕ:õç M`>Óy³ª*½âºÿÉî*gd©g0Ÿã« är^¤‰1\C!‡i Ýh ‡xÌvñ$ÍtÑÄJ²œM;'ÅÛädú_áå¼É2ŽFNúÁE†ÞÄÕ‘eI7ÆFðcž¦†íDŒáO줚KXÎnòÅú`†Oÿÿ)A›h¡6 W›XÍ%l`3‹É Çü <´\*ñ£}26_ò~Þaó#oPÄTv“Ç/øvÂ÷"«c‹‚|#ÍËý•ŒæîáóŒäƒœÍÓ3”RÖp˜6°ŒeüLãz²¬fAØý~(p‡ïä"p6EŒà>.η7¡5ë0÷†/Æ·ƒàEæ‡F¹€ÝICõ;»Ê7ÖøÄõ:jÙ™tÃbuY±Í±'øy¤§ÀÛÝ]nHŸç™Ñé¤ Ã íò_Y³¢<¥± RÜžoZìݬ{øxžšRWf{°Va§+²ŽÇå™X¨m´K{­9l_ÚˆBÓò¼XnzÚæšyÛ  ï JuŸ¶XY‘º 33ëóÚfÒƒJο4øï¬1EÒƒu—Hµº:¾ù7Åç,Xÿ¾üå)|û®–¸Ù·"ã"S²g¯I”X\X¶¦ú4ïU”QÛí`r_T–Ð¥¯BkƒÂs³Tì™bÂáÎD_ßoI' 8¤¡Ì”„™v¶ë‹gí,pZAGõuÚ]kz§I_NéIº¬ÍÎAÎéö±ÈÒ}RŒ-×Ðäw˜tz·Ý}RûËÍ)£Ñ†´} YåIqd^ìMIŸËwiF9¿+tS± …nLʤ•1´DyÚ¤°õüv¿»ÿ±ùî<èSXY¢y/·°Š‰\"¿sf ÚYè0‹žõ­:| Qbç3³ù·<ó“ögMɪä£b b"ÿÅN¥<BÕ£:L}²! áMöPÉl6P¥_Bò;FóV±ƒÕLÔcÿNXmÁ†9êJºBÅßx¹LðÅÌáå@Üþ¿åBv±h |™œ^¬az×±:ðä~F]8®VÒ̆2,d–n ”&²!W¥&€€K¸(ç=|œ–"hvï=2l!«GÈcïÒÀöªªÊÿ§ïê:öò*Í434h·º9Ásâ$4ÖõTÏ{Qôya?ßš) 3½ B$`YHOXºœvãsxœ†0ý|ï1.ä¾$æ›xŠëYÃ.d /ÑË’Ü –£Tä"ލ`Aæ¿'שåLÈå"RÃÌ ÛJ3ÂXÒŒãZæ #ËãLO˜C'{¸"°£r€±fQbÓŽPMšsy‘C¬!Ö/|2¶Kû"”œTtr€†åÞœ3ØÂ¦…ÅoÝ´QZØ­ŒgŒÿ‹ùØÅK즖¶¤¯Ån¥â„OÄ6ÑÛëál¾OëØÅS\ÌFfÐÁý˜¾=¬g0}œË*>œ.ƒØB}p_vÓCE;nåŸe¯ògNáO‘¹ “bs‚}­¹Ä²„ißâÞá¡rö$#YOŸÍ}€cçÓLœëº~?ÛÞÖ„ÄÚb÷³šÏò çqyÒ‡Kíë±!åÜRW59–4¶Øy‘Úngfí‹ý6«y€î%)ç6˜KÕÔ)éðxÊ»b0•ù†§mKù{“A©~[[kA%Îk[º)ué­móßí.J%vMéQž!_o…¢®›{ÞÿRù¤ÆÌº‘uõ9žr^BSµæÃÚ»])ŒF4V”Lk?wué[“Ë_-;¡/6¸Ô2ò<YúޝVÞt{ÊÐaZê H©ŒeKuÕHÔh9¬™M5ºº¼–ј•Moº¤íÀk‘ñi¯1x€!Õúš=Öáu&'Lã„— 4uªü¡Ë¸„l©™}Dz±á]j¨/±ŠÕ×w:ܨ#29érÆemNº$RÃ#e†õˆ í©18ã,²Å’½ês¤ì|ë uõiàò¤u2 Fõy#¡9i@•¾.[b}$9FEÂ|*=ÁøR“N1£Ñ»•:ð$õl¢—‹ˆ(a$Ûx‚¡œH #¹†í\ÐÆÃCÌ-0#_gÊnΊt$Ý$©=,ãÝ7椻f.bOIÏåê VÈ£Ô‡ Ègy-ljs~È?:Æ9$)c0õ¼†o¥Œe§ñ6§0/„›çð€k© :Àʰ,\Ishc2 fs0TõC¬æqΣ3 ôƳ:G†p¨ÉaG¨Ê-#·!'˜<nóÏ倊ISbg˜È{1ñ‹ˆÉô ^ë#¢·Cy<¥ªªmÅu7ü“ãª}ìNúLì±pP¦›2Îd(—oogNjr’½„åì ñ"9IÌ!R%Ÿ¡dYÅf.¥—6žz¹Ê5ˆ¥ ã3hãz&=Å>Î ÊŸ¤™ãŒ¢1”¡ál¦š†@ÅÝKž~„Á04ËMlq<,±Ž1Lc=R~09ÄäkÌe$#ÙÁŠØ+¬§‹1dÁ4©áÒÅUa£3uÜÈ1p+9×Ù–« „qdé`0s9ÈJXÊ¡ ý¿žS˜” mâZjÃkœv˜uŒâ:9ÀD†³”µTr^ìqv0ˆm‘±Ÿ„h•œk.7âÏô29rI˜¸_öºZ6³y„*.ÉÍ!ì˜%ÍÝîÈêH»<ß¿fµÇZ‡Šº4ee‰cÅI“†d&¿Þû½»ËJG-Æ¿šQy~ko]_vÇØ¤DFw§ÚôÇþl]M×—þ¹ëK)ÝYGÓNª®®Ï¬&:иwBߟ?mÔûÔ¹'N I˜š¯ ÔK=ÚâxlÍÑ’ÔΑm*º>Oû‡(žpxâš iO5tÈôŒ#yŽy¤ËÀ¬!ùF$Diû²º3þÒkr‘žfõé*݆D^KêLkêP‰(O˜Mi—{b‹"QlFB~B:iJÂØ”ÊÈ÷K-)2"í­XM…m=vDFfu¥L £Ü´”Ç:ÈÚðn±¾X2£«9`ÜcÙC"mJ‚,‹#c#ÉXw-d£(çyb„Ù×{Åp8Gr›×IÛÇ¡@æ<À¹œœËÔ'~n29‹Ùî¬E!­)——Ë"ÈÍÆ2šÅìf%5,àíTóE èã ±W1›º Êø—Þ›Ó@·QÃDÖÓÎÇèàqŽs§ÓÉfºéãZŠØÎ›´ñqÚx)´]œ ä¹³áÝ0’[y—%¼ŒÉ9­c’jò9ƒM좊ðFQŽå8Óx4A¥º'Ð;ØO'èä%¾y3iiì‘`Ï­j\ã½wõê™¶_i2Á›œÃ5ð\xÏ;ˆýz> ¿Çx§q‚JêXÃ;|$Œ×žÏÅGÑÇdÎ ®€M±éÌàÑðëØÅù!ì²|_ÎZ—ÓìñnäƒIƒbdxƒ6Ʋ˜?ó“ùd@e¿Ÿ_1•ÖóGqE¾ÏEsÙËî0JÞÆfýšnÎf^¬_f¤3Zƒóç1-HuŸadÒרÌrþÀûXÃk“ŸvÇBígŒ0.éj¶2•û¨(²¼×qÚNO‘UžujÖ¶„Q oÆ~»8'£HÛ5µÛÀBùå »ÝË8GÚÒ¥œu–Š>:Ï{+»hSjóô”(ö-š’Î9ÑʪÃG¾{gü«s3/œæÕˆöØ>1Ó˜NµÕeÕ¨~Þ³íuéš¿žÛ»jAö›ß)|lJÒÈ º ï—Ø_'jºç?º®z>zpE_éï*þ:«Æ¸";Û|´×3i«ó ßîþaÍËÿÜO}ý·ñ/f¯z¡à¾…]âÚ¾_ãÌVí^ÉØÀÖŒI)GbEC owJ™‘±ÿî4’á%.,UÖ­:ë´Ü÷"©™%Mˆ´YYâ_zÔå«fµ¤t÷8–46mhƦØq§½+íËz“+b{ú4w*h5v¼Î·¦$².Ï8Yd÷0“3²}Fó½‹K êÑÎkLä°™K˜PÀÈXf½ã3½ü5›Öør½;ÏLªˆÜ»;¶•Ìâ Ö”~÷™G>N‚ZJ¹QœÅvÑÊx–ñk‹=Ít¦²†©A2°›R.a-çÒL)粓wéc(§òõAó='xIsAˆÃç‘Þ±“,§óGf†éß%<ÂQ–°’›¨g%ʉ˒æDΈ­ã.&¼a+ ˆåÁŽ90(þñ¸êâ»8Ä¿ó*éÿtì$GTîoæóaÚ9@>×ÇÕ¥¼DŠ9”³;r @CÐ%”°šúŒ-Œû}®9pÒ ¶WUõ¬¸nùÿv\¥»»_b3ÙÀ—øo‘áUn Yõ¸••ÿÕø@Ðø"æ0ïÒd0¯s˜ ée ?g çóÑNšOñ{:)æz>ÀŒ@6šËéú3#&†$õåo¯Sʱ°òÉA4^e+ÙPý§SÊA²\ÀÝAè‘3„½ÊÙLgrø4ßHçð(CØË¹¬§‘î°œÇs¡M|‰Ü„8‡a_í’]T3¶[Oqýþxë½ÙÓb¯çûBd"t`liéåÏ—ÿíŒÂ¶‰©¾ŠÖ¼TÛŠµ½K¶$^¾0axï’»;.^}óƒ]££–QÅ_úqÍ=K›Ut6̱D±£ÿÙ‰{nëœppôÅ¿*xiNǤÂî©ÛÚ¶ÏiËâc\pz݈¦ûÿ³ã®M'¾u¼ãG_ÊNØ–ÿʵù^Ï{øÂ*ŽôXÑ¥™‚¤yÃ\ÑnZÒiYI~Qi~»ýŒÊªL8-iè-Fd,Óa¿`NÒyE¢nkÓ¦VŠ"=Þ)0&¥“ú"3"éy¶ì·®RwÒÄ^_ÏZÈ⬹këõ¹ŒÖ<µØ3õ-=ŽÇfÄzÓ>Óîì¾~SÄõ§¦ŒÌêånçW¼É…d¸?vYl?ã#|ÑN|+ÿà7²oôù7ã§GÆžåb~Omjÿ”"J¸”ã¹Ä îgsy‚‹ÃÝzŸb3o3.àO#&„Ìû poñm~L–½tð]޲oÅ>΋œ/å2޳-ÌÿŸd%é×h °‰\ Ò‡XÈ_9Á'CÊðSÁ:¶™ NuÅ^d[(Mg³«x, ?þL+Cyžc|$xXs5çhH÷XusÃ&åH¨l‹øt.ò˜—8@L6ÜõsI)Ê©g¸÷àgs»˜‚›èel¤„[BÒÅ‘ªªŽ²»º­»»›œÆAsE ]ªù†Ä& ð²0‘ld ×3‹u æ#á>rXÌzç©lã9FSÎƱŠX™0*Ò{6ÈÒ Ë!F† È`q€Á'é22Ô„QrSH©Xè^ç»xKØF5ñBHÔ-a6ó!Ǻ nHðãy›(dX<\ÙÙÀ¤ ’Ø•ËËÚ‚¿’gp¶ÿ›3¿e“Ù û|‡­ §‘e±É±'ù; x餘®/‡Í`Úϸ–§öÆý>ëܵãežb;e<ÂżÃJQG7—ño1/‡y Tÿ&ŽRÍH6²mÜ“Ld?ä*Þá ÎaSPcžB)ÐÀ^VñÝÈÅ‘wøzеŸÊ_x•AT›²Ûy»üᨦ]±ßòFä5®å¥¬‘IãùY±[ÝV輬E<Ð÷GWw1ŠÓ nðã’+oöñRM2ÍûÕÚì *™tA[û ¶ßsu¤"ccká-=_¬È{:¾ü??»¹¯{TG\SüúôÄy¯Çc;‹6O©ð|ÍäAÛ¿¸®÷‹ŸòSöáê¼ýºë##ZZ¢´AuÆ¯ÒÕ,]¦ºÇó\Öªˆ_Æ^¨ÑœV›6ºG¢R{—Ž6©XwÒ­Å–Fú†i8¡.ÏŒZ-e}fUjïôJ¡†*­]·;Ñêo37Zš±-¶ŠAŠÆ9|Ì•ÈJ4)î°;²$vG… }ö¹`ùFõÙ‹c7NÈ:=mhÄ•tyU²˜ËØÎ ¬ÌšâñŸ¸l"±=P¹Ç‡˜ÚMo±/ð—ßc æjTCÈeÍU¹GXÈNÖ0ŠÅ4øaS×ÊÊàz”¬Ô?;Ïó$ÃÇù—Ó¦;‹ØÈV. >Ú\ÉvPuo02 ös‘’™“Z®,)¥ŽgÓ”9}Ö6ó0çógÞ Sđ̠!¤P.È1ÉhûçÌÀÕ¢’½´1‘!|ÞtR}2ûü쓜á¹t“œ)øÞЛÃÅæ¦O¹˜öÁTÓù]BYÜ!˜C> !£èq¬6VIO…]zÎIúibQÉŸÂÁ~<,Ïrî9²Æ>F°€Ghf>ﰎጡ¢9Šë\Ú9Ÿ­t2ƒ'̳Œa6Kxz.¦˜á daP|¬ ïÀç©doÓÍ©¢1´g=ÈD^'H-›ØÉ"vœd0<%Œ×ñ.‹¨Ï%XïB=sXȽlçj®æ-¦0‘ƒä'ü[BCÜïÛͰ;áò2{ûÜG³¹—©làufpy ²¼ËÓav*™Î9<ÁNÆ0˜Ã oQ ç0ž ¬Ïw}± RýÜýSÉ ÎþIÅÞd+ùŒ%ÅPÐ(9Üßykû™‘p>‹˜ÌS ŒÝÍ[e†¦,(26­6¾fmâœ3âu9»w®îqΗÖÇ¿Û\yla¯1 ™X\ª5esl ï00«ír £G[ÒŠB¥ ÞaP¤9rE¡Ò”îÃR)/f­íÕ•µ;rE¨byEöœè—eîJkˆõ%\È»‘[;lì0«×¶¬¹hWÊÐØ0Õ›[ö§ÑɺúüyGz&)ùkgÝýo¿üw©…ë‡|é;­tª«v¼¼ ·ó†'kî¹¢ÕC Õ‰êªÌ÷¸ã?òwÏÌ(#àpäDÞê™g}±lfoÔs(Z±¹ã÷7'ö—iQ¼aqâ¦ßlWü‹[;UŽ”Œ%éKŠ“0«ËžŒiÕ’)C+T¥¤èêó±<×´ëèÓ“Õ[l`‘žÏÄêÙpQ‘m % êâÿJ¼èÍžEk»­I-z3=¶±xóÔ¤]ö%œ=PIFE1íNïð»2CŠ Kh+7hÞB•š2eÌ‹­NØ—URnI¹§z|¤B]‘æ|UþÈœ¤qIƒ#mU6ENôöpŸÊ3k 8òNŸT%ÔÆ9Oä ½v±æ£›4Ëø+E´$ Šm"?÷[ª(fR¸±e*‡ùY¶ðJ`ñÝ eì奰”ú+áÛ:'ا¶24HÛ;‚HjaÕä0•¹ìàcÿC÷;4ðqrN©޳“n9›fóhÔ2œ±AÅ«*§¤Í>›ÿ¿^ÀßÎVºúËÃA%—S à)¶08@ï*9̆ÁéiÁ <›!~¥ËÙÈ–k9‚!lÈ·ñ?ø¿QÈ|˜8R¹«s[UÕe+®;ç;®Vww"èñ»x‹õ~´á‘ÂÞ/æ–òRèïv³Q!è6x¸Åäq”/ódØiÍì AD–M`6e¼JKØÂæ ð)ÎåKÙÃ%á<¨ç †3‹ƒäÓCoS•p]$÷ç¯ä¶Wð:™p•ÒÁµ¡­\ƹùg7{¸•clä,¦°ëy” ã~Ne›9@CÈ›9Dì=|˜9lá VðÃp•³ˆ¾~áu?°5,óêI}=T25|ÖRÀP^d$çÄøE±õ‘Ób·‘ärÆGžLš›Òʾ܅ á_#—Ä&’ÇßXE £˜Äfëß[,çk¬ùX§ò&‹ÂœÎƒüýüGºÈþtäæ(†²·ÊâŒ-Yߢ-ÖâZXœ4…­¬ˆ| y`X|¸€žÜ48ö÷ës6ÓØÇ;=ÞÊšÒ{vGö»?Òôþ¸­Á—WÚf󩜮ö%×w–}çÊä–fÆõy}€Í}ªc§'ÍL(gë“&•x>_mJGˆöþàŸöŒ–:c:íˆmΘ@2a`ÚæXUžók´ækJÛGkJ]¬€Ê„ òLH˜Ÿµ._o«ò>ƒn1¾&µ|ÃôÅ}†u‹ó%33;&Xyeº´¯û¡±M—÷”N(Ìܱ¸°wV¬¤XÔ ¶« 7}ýU÷,ŒÔô*ˆ¾»µøŸÿì+tå))°¹ØÀ>£{Ö(ÓÛ°ôP瘰}P‡Á ‹ʾ1µëꧺWÍÐû`lv»?¤ÌatböÑìí?‰—ï´üåö‡6G¦V¨L)Œê•Î:ÈäŽÑ®ûï2ŸìI4ÛEäs€Â€xûY9‚‹«1¡„³àÂÀ6›À¦…æ,wF^÷Wk.‚¤5ÄMd—k=ç‡+¨%ç‡Î|6pMUU5+®»è;®&uwßË~®¡‹£AÙr[ˆ™ÄX^#Í׸Ÿ¶Üv;ØÆlZ¸14­‡Iq Ïã{/,÷_|—ÛØÂö“å, "ò׉üñ*^ˆ½Ëför;÷ûmSv Û¿íA»a‚4P+¥låldS n£“Yì =õC¼Å4žåu6pJzç|Er¯òš™2°sMOÎ[}2 37AžÉFÚƒu '¸œµ!N¥‰ñ$yŠ·Ù›ÆË4äv{±Å)I‹#gÄçO±&~Âf.b2÷p„%¬âžFÞàf±“—©d ¯²ŽYü!œ¬ß˪H‹x™Ëyš\”±4m4i~™tðI¦çDZe\Ês|›jfò$çpȼ¿PÜbböœsk%_ô³Å6Þ¨¼Â~ïú­Vö³?ûZufוie½ ,¥:ezÚꤥíŠ5…µù°Œ1ÇòÌÌø@BKÂg²å›ÙKV”U™ëŠÕò$ÓcÇjU“é–¨23rzŸ~—°<–ÎX“5"­$mLRÍP#›&Tvüþ_Û®[Õ±qnæP[ŸQ}Ò] *kÛÓ›nùƒUõ2–w˜ÑÖR#9,sìpcgÇ_~šmŸ“ùôߢ{ÇÕ½vÑ=­vO“·Ã¸VSÛ<ÓîhÚk{/m¹x»oêRx®uÔ Öuâȸø w&nx¨î·7÷Èf¼0ZE“#Ù¹ë+F·&ô‘Ôç~3ÿç72¥ÃGèjÖ’v‚³6Ϙ¤iY­½öÒ×ë)“NÉÒyÛS/•øÛ¿”l­>´µ {k]Þ–+ÒR V<~MŸC ºô¥Œ*¥UwùR¶óS©-³+÷Ô¤zÇeʚѫ#ëP&æf”f é1*¡¤ZY£Î¬LÒÈ¡Æ´ÙÆÑXež =ÞaMü"V¹‡º>÷0‡b{“®ŠŒŒoþ»ûÖJ-`r`O7ñ7&³?¶‚BþÀ*®e 7qŒÕl±±-ìàêpÓˆ·9Àø3›¹˜oêM~„ù\Ëkñj ©çíï}‘_ã½|‘:åè?žU©à@ m¦8ÊžPô®âÙÀ3»9\õn` gP|]»ø4å¡P\2ÇOHÞ¨i IDAT§ˆÉœOkB]½õ¤åNFuˆk©çƒ¡QYÊÆ@šoáv²þ$«ï['eÆ6†‰¨“  £¢_%qRe{Ò½‡oó cy•öªªî2 üQw÷¾ÄsÁv#mã U|½Áquòúê/¼È.%Íq&êZ(§((XríÂÚÕ¿†{é ׄFvr$h1o`£Cå{'ª°Lº4ˆâ¦²‰ ¤©æÃ¼ÄɆ†é“AòwÏr-{ÎghçÌeÿÉqføP'½ú;’CÜ‘oaÖo# x?K‚ ?G¸øõ GÒ±Ky+Ð@Þb£XKÂ|neÛ餔VvÒÄWùÉIv«ŽpäÔ…T´ ™Äãlà3‘ƒLe!¿g;gð|δ˜3dä²Þ¿{"öTІ<Ì@zx†'#cˆxZ–òdä0gó¯ŒæJÖòâeÚyˆ¯0™RYô»c¦•YÏð«)¦”Oó ÐËùSäQºÂÕ²NÁhS~%úŠÎ¥üŒ›xŽÛ8Ì%5æ P?Ù†Á²§ÙÔüÁ ¨nXüÕ»œªÆ¯Åž‹Èw}ÚÞ„±íÏÈÄîŒÌ‹µ vM·ê„I[bÃb'’V׸­Lº@}§w²2 w'\•õ] \2À¹…ž› ô y)ïæYØag¯ÕånŸèü£^d#û¬ÎÊäÉ$” Nô˜ûPôî¢hãìô=Ÿ_YRtàû•Vd 锟ö…¨|D|Æ]ûv×î™]­½B²Ùãm^ë‰O´ãüáwEG.ü]Þß/\÷Áa÷(ì1~¿ÑEZ‡xm¢QsEÓ ÊÿÍ-ÑeO¥_=s¿)Óì<¤º’ô}7¥?ww×]_KɦÛè”dA23÷Dy[ñèǧ¶þüã‡ßºuø]7õ˜Ô¬;í‡CœÙ¥)áËÕEâÞþ¬Æ´™¥ÎK—ŸÈþàöô•Oúé×G6÷5jê6.2aRÜÚPRž˜õfæñ‘}†¤-ÌÚŸÕÙæÆØxnJ÷¦«ŽêîÍ+0"åhÒ˜XKìØ³#5Y¿ÍúÎé¦ì0©Ø±|#º÷¨Ëx éX7SŽ3€§#?*ò¾Œ¿ÄÎÈúyL'ùFÒ´Hsöæ§ÜwŽÔú0û¹—å '´ÆþÄ3ÜÃ<Îå[œÏm æ?YE+—°‹¾^•;±.â:nç…lfwÐMÏsƒ‚?õå“pº+XΡÁêcsP;û§E'¤YʧCÒ|Š>>²¬rÅj=/Ò2 } …<Ôz V‘¡š#œÆóÌâ¡ËÁ33TÏGù½þ<èœÞ$—èôG¹•µÌã ˃óõ½g^À¢@éÅ|šÍáO÷r!M ú2Ô†¹]îË4†ÓÀ² ’×Ý=‚WYÍd³‰âp`ô3‹!ö8gngDè©§nÎd!ƒI°ž#àÿI&„ ïHö„Èä,¡|Fò«)9i—3ý$®Dn*}„V ¸‚gi?‰´XDos*e ŒÝTåîȼF-¼Ú¬ÂȨH7“9Ä«dhãTjßHú²ÖFºæÆ~´m•!íðvùJ–¾þöt Èñïä¡@ûß$F9ûó„à0Ë5I5'åÙßÀ6*)ŽˆóØ›»°D&|=†ßp‡¯\]|Š®€ìÌc?SÃÔû¼<ó# ‰ d_æG4&]É,f:óܜՙ‰¿Å²#Ñ]»£¼Cqà`¢÷_ŠT§½ÉQþì‘.|ÑãA!V¿´Ý]“ÊÒÿ•U”¯;c`ÖqnÌ*Š­MË36vJÂ;¼ÑiRÖ)4ÆŽ³1OYÚ)]§µ¥ÌˆMMx©DE‰º^—ÒœÑÞëXÚ²BQ»£èŒe"ùƒ¬(%,hÓÚãHRU…ÓJäem8TR—üÕÏ ¯û¯ŠUÙL"®>wUKûŒž}Céë±+vVtÁ*£OôË;zT¥ìëT_hÔ"Šu0¸qÕ·'rÂúcf§­ÎZ›qpªÒ>“j)äø…¿•¯›X:þÍäž™}í%íÊ åy½Kovò‰d_y´oh¤0–—ùùès¯•|îÆN™œº¯¬9/y +ßø”sR&å‘ç­”ÚŽ& îµ*R1L׉ ~í£/–Ýp§ÍÇ魖ßãµnG›Í2|CrÖ_G<>5£*Oi½Œì­²¸DÔáá¬QiEƒ½ÝmVýÉX*ߨ~°_ K‹]ÿ®ßåy·¾>k§¼Ì;=Òåf¤-bDlGž›×¥3k\dJdC8=)9@ª@}ÏÍ+Ý×+õ>æ°’-|"öÅX•œXì±—ׂÞú/ì §ÀÑZ7fJO–bÎãΡ.ä¨Õñ>ªŠâ<æòIÆñí £Î-ž‡‡Sª’EẟO2« ætÚJ\nz¶™†ÑD ï«ó8À™”† ÛW¯™–2…™l n­ˆv± œ4×ñ¾P¾ÚhgÕL ¬ÞÓˆY{Òp+÷BraØ1$(&rˆ‰ôIS¾¼M3•ü˜f¡“mŒ “˜e¡ÊÍ¢gx›z6ÿ?Dºº»ïOt,u³ú¡«9ÒêOÚR>tK¬ž7h'Qd8›?q= å8Cy ¤ð1^ä̰ïÉq÷ÓAmtæ„=IŸˆµR’ùA¥ÖNÓ‰t0œ^®á%6†¼ùT`«äпÏRÍŽœ4f<^²‘Ù‘qûŽðs·Œú“Ë[;œ Z®Ÿ¡wˆò´²>ÛYÀox-‡Îd+{G9­ Mg®mzŒ!\L#«¨b G“)7Ì-êrЩ*ÊèàÌØvŽ04$½Ë2>K†A4QÂø@—8Ê8æ±þxºx=é™~AÑuôÐÅ%±WZ4‡Ë* ƒSáx“8•3³¾OkÙ‘48öjPHîá!³Ÿ ÓÆl^¦”ó²ÞL;êŠz¿zÊöQÑý7G›Ä§eu"ñâÌÇûúe÷û ßiÖ›_d5½òñ†¦¼‘gFÊ\ŽðL䬄ºØ¬}IgdKøWhr¯±‘¢X:«>ijÖý…FÅöfÕfÜÛkT¯ºXS¥‚ŒD©=޶‹Rú²²šùIcNHw:Q©¾ÏäF–èàéf§÷]ÿ¸+“£öÜs~‘wz_Rõü¥Ù{.X×¾tuv÷9UmÕ“îJ;a娬’HcF]­®"5Gµ7V*.ðv“í±S+Uš\aÍ^'<Ò*ï„ÝûjôÒÂÌ®ª¼)ÛS;ʓ͓Š4å;Ò­i€dzã%}_™ØsªÝS³~3´jYfÙÉÿžÐcP•¼Þuš|°}gQç“Î+ôëN¥ƒcÃz5ç{´Ðôaj»Ý—®šœ]¾rÈ/nε¾Ý;C Ù¤£[GdÚ G›âyù-CÒ»ÏèR˜ï7½†%-H¸¸SO‡fZ ŒäùF ÖUššÕɘ<¿Ù)®´·Ä¾¤Ú> "ó 8H_¤µTusºaTdglÂ¥­âŒoñµÈÄàß%vG¼O¹y‹û&Iíçõ„‰œÍF†p+é{çlæQÈXZ¥³GG¯gøVØM䔽áÑA%?g.½¹Ò¤©q?!"§{ú=©âg`2íŒcbX5œD1”1>°³7sÒ Ä¿ Äô|ÊB’ø9bz0ØEÖ1‰Í”úž>0—Ê´?hùrۜτ‰TsˆAtȵL z±ZÆ@N}ÖGy8/;9HSƒ}ê½±Ðb6²‹bæp”ÁaÙ”K’Ì5Eí\ÈR¹çPUõ×õ¿W?ïî~¯|â(—Ñ•Cä¹'k mìR5œ Ÿ/Dž‹ÿoK{Ï06l;öÒÅ@^Ag»ƒkï²ÜÌxöÐÃD^ã8_`}w.ˆôÆýø¬$ÿ‡¯ûŽ·»,Óýÿ^e÷¾³³wzï-ÔÐkiT댎eÔãO=:£#ã(ŠÁA¤‰ô ”H!…ôÞvvvok¯úýý±òÌ+çu^Çü]ÖÚßõÜÏ}ß×õ¹ù*nÑT{;û˜ŠÇÁ ÙÅÓô1=äb´p ›OÈ6ÔïÓI…bVŒ)zö#îü˜á‘~·ðìþK‘·”ôý‚kb‹ÑÄbö‡cé0Iè«©a~Ý„q΢…ÝTpåA {˜fna!ãÙËØàÎ{—8¾|>‡ùc^D%gPÇã,#Á$–Æ\ùo&…8ãæ3…%Ìä([æcÑñžo/iæ$\Ìó, ™?2&æ²ÈßË%¼Ë²\HžóØÈå<ÍNbqÌŒÈZ_ºÏS—ûálŠE­œï?_ñ6õœ¯œo¾fûb_}ÓæÛ}€gŠ’¤e)Ãr¶eUòÞ‹9Q —pa´‚þÈÓtÆœ•µ£ÚËå–e4´˜Òœ1>¯½ ¥Ê²e½ÚFO‘l“Š™œ×É}‘¥¼ÌöÈYqeŸÈêé•«Ò™6ø·[{o|ΫÜþLò‘ç\šÝ_·pо]Ù ÑÙØhW¿»á9KÖzàæïêûò¯ûÞº(ÕÓœO©êWÞáÛµ¦²2aCƒÞv×GÊGˆnb¡v•)ÕCjmID¿þßÎz?¶i~á‰ey%T5ê­21¥>•ÛÞX‘ìÿÚÏ ¬H¬û—‡2ÿñ­©‡ÆÕIí2qpø;ÑY;ëÞº¼‰~ÿ>è-nd€Ê„I©Hº 2õo¿¼amìþsjÞ\Zf°Ï´~_IÛÚl\“áiJFÅ»OY1øNU£Òne"«"÷FþÆl®È©¢d¾(¯¦ÏÜœÊzñ›"g”Z“ës_ÜuÝ11Ã"Uk=Sm~¼œê‚ù ÒÈÃLà%沆‰,©9Ém_.|ñ/ž^Ì6J£ãÂà˘È}Lá»D\ÎDöð1ö3·xÐçTvù}ÚÚ‚"`L8ôî(2_xƒ3y–NΠƒ^®ã^†s§²Š©œñqòÅø wÐÇSÛä’wr L‡Ï ¼¬™ü< b1Ÿâ¥ ›àXä º†!Þ •z&p€;yޱáÜ?À‡x»xƒ£”„PÌÜÇQnâ:Î !.PƧù °³Ôøan8>Z½™Õ‘cÑq‚Ë tòýPFp?gYä­RK†™6àVÛrºøkI3À=ÂCB0÷XÇl&°’Û#/*éuÉDÏuð¬ØñÇ=ë®WÜ3‹Ø”,¿*zñOÎ9bÿXµ¾ú`ìñKkz?_«7kaÂe9æ³<­l¯h¢è͸F6ð³ÈˆÈè„BÂ’‚dzй&¯2cbÂèŒÒUÆd͋ٚ´¯ÉŽ‚}ÔÓ˜u(2)¦Ši¥&Wš\kaJm$Uípþ/£Çפïz!{ןҷý¦ô¹;«.76R)K;)mR™3厘3¨v¾µ»Ä‡L/Uhs¨ÑY)Sbâɽ?Yöç/ôþåÖÞ•c’C#òÞ-÷íÒÜgk.¤úݱ£›ÓqÚªØ?¿4ÿÎÛ3“c%vùó€©Ñcßò¯_Ìtj)X2ÃÙÝö³3áŒBl¨ªª¼á–§þñ‡#~õÅú¯²eΩv³•O7®ÊY³ë$˜”žÝ-]fQNK΄HeL—.5¦ÓÙ{âÆÔU«9¬=-U0˜S•“)Uh1-kJ½Ùi#³2µ”(Éøvqd’ófΓÿÎ%T68PâæŒ¥/ajÌèH[ìø,úúhÿÅñödôõß{õˆÒkäß­ç@ ÔunŸçQžå.XÍoÙÌ—…x‡Ëx80k–³–Å; 9–±”^á:Þ¤>(§•8­`7ϳƒó§`õéà%AŒð 6‘g(p½¯ª`;ƒW¸„,Çz %œÁGYÉAùò[frŒqEÑ?IJI²Ž€¨( çÒ$ \ÀjzÙIŠVŽq ›8ƒ¦ó1Fñ|h¡Jȇ8Êý|ÙñxÌŽŸÞÁX®ªdÐ’l û¹“x:T²Ã ý‡È¾3•Šs;¸/(ý‡Öäñp5.Öü±,¤™áj<—x‹OòÏTRÏQ’ŰÇ¡;'f`x*ÊxšaâRj¹˜+N‚Rn+úmYÊGÈQÇGCžæFð2³©ì9œ‹Ÿ°=´)khà?؈±7òr40”7yÀ‚0:˜ Ri¾Å2ü ÀÁ®å;dÙÂÅy÷8)ì?Çââ` Þ.lŽal`°…2¾Í³4#K ¹p)áÃì¹ÝEái\@I‡à<ÈTª8—ÙÂÙš÷µ‚íœÌ4ðær—ñWr¯ðÝðã"Ú)~àgRÉVÞãŸ9È9”Ó[$$´²› |õÃÜZ°» žôÍ‚õt–¸² ”¸œy¬à3E(WÒO >ËŸ}ÕÞ“O-‹ÛÓä­¿cœ»ÞwÏ:®á@áÑ'T·ºå .oõå?Xçׯg7¯­m¿³D<¥³àMÎ4úy=`í¢ò¶Â(Wöha.?,sscîϹ±àãUʇ©È9“Èxsy¢Ȇ Kj ñ¾Å<§% ‘¥¢àëÔ0Ÿ¸˜S˜ÎÇYG†kÙÄp‡)ýuŽÇ·¾8ëEðgù9U¬ 1³Âí9Îùlæ%º¸7ªf1šçï„YÈ>Þ£:¨ >Æ7YÅ•ôaÈ*.g3Tò îg Ïðavp!kÙÅÝÜÌÆp‡ø8e´ñ"¯æ,šÃh±$™€½oã$Jî|WHêxùßqcCCÉß)WQ*µ2È1#fQŇØË7ÈœÀŒÀ§øãTp Ïr%—󿸈½A¶XÉIäYÂÁ˜óâ#÷QG*d6¾Nëèá!ΰ‹í!yºˆYJFñ•¿NAúRdµÏre€Ç+ü,þÂÑãvTÓx‘é$9‰®€†Êp2Gø4‡¿Ä} 2"ôZI†…áº0¨-ã &óXÀ*.¥"#’\ÍŸƒE'@ñÄ¿;dØDÁ{¸Ÿ‘¤éâÕxVx$ÜKÃèàeÎ`vý2ް9öæía¾Èݬeˆ»˜ÃNf Sx„îÐË~&°2‹¿d#ùó‹àãèxxqq<=5eQÞ+tŒg1·<ÌãÜÄä`ìÛÂ|o(2ËOk•WXûr£WŽy‰Ï²Ô]uÏ*œrªM>3[~œ_?jõÏtÃþ·[R&|Ïñ ÏnpÇÑø=·fÛnëñjQ°SYoN—t¿dž´çÒ&õITž‘‰¼ÝhxÊ‹Uf´[”w gÞ¶&ýy c /™¾-úÕ_¢3öµM° ½tÁºÄ‚M¹37Þ]öì%ÃÍ«©1‘DL¦NC©šœ–Ù6’N:\g°ß©ö—;¶ßˆ.ëtØ?8XQ—¾äù¾ÆYóó’í.ôºÉ¥ CÔÌ+ÙåÕFñƒÚóÆôè¯%'–±±K>M¿u-ºj M×Ú©¡GK¥•Õ*;¤ê¬`f•áwt›2Nk»ÚA] ò/Ýûó- †lXÐoÁs¹zü¹mÁ°Š‹ÖuO=<ñú‹­ššðb©ÔT}GTÅ2½à’©„änMiµ¹Ò­nûÝÀo&Tº¶ ¤Öy))·,wÖkƒË^ß¾avO¡|È{åÒF÷ÚŸ2Ð%Ñ«®F&¡,§)alܱ¤…£%:-ˆ[̈¸xLr„¦¯ ª/u^™¡œwb®®µºÑé=Òü u.h×7)’âÜ>ß°rì·ßŠýö|þïÂÒÕJŸ¶¶'n~dÕìätÚ)KˆGV3ŸÛãFE¾ÇãŒe^Ày_À ÜÏÅ‘zNa 팡2twò Rìæ0wÐÍDÚ™Ãxšø·õ´)pnçUšX ÔEØæÿ,ž ½H:ØOŒb“³i ”ôÑ1WLjUÅÊWü›x—zNbNЉe5¡•ƒ|ÄqÛV.4‘EÑiaÂÖÅÅì ´øþ‰ˆN&Ζd*»é=at{â®å® ÚØDœÉãÛÏ]'hú‡x'—pÇX«\ÏNꨠ7ŒžŸáÞç].cDq–°,r4$=ò2ç2š^g]ìå沖΢¸€3Ø£7ØÀ4ât³Œ1œD& $÷p ÷2ƒkÙYî`™žìñ}@%o°ç4mÈiíž›îØPµ éM§7ïÒ½RÛ\~Èïf%}=êzÌ;7XÔåÐRý'™³Û»_ w— ôª·©"þÖ…QêOǵԛŸ1eÀ¾Èe)¿ŒTsvò!Ï÷«Žk­pá  JÍ)8•›[êh%²•j^óNês¿›qçç:îþ|é“SŸ\Tòäy%O~h0ŸÌ—,¨©UÚfü¨ ¯Oõø ¶Yz·ÇH¢Óí챟"ãOÒÖ+–Û1n°&æ¶?ÇNêþúÕh瘘Љ>=^c^•l©i3RöU©ÏËÇÔæl)w´ÔYÕJ Þ-W2IÍ“ú®ÔœVV)>drŸ}I“Z¤*R2×¶. iS Æöæê¶”—l(Ù/•ª,Q2£§¤­òócr®g7Ù_%?^O¿Q5qñ9…f²êRjÊ ¥‡Ü¶"ö›»bzÒ6WØ40­qè_W” ?R()\ÿtl\!¹vf©#eês~4Jc|Aí -•楌©+x©`^»šJ%ÚrjbÙ·1cvÆ'\’-¸šÆ)N:ª1í}j©¬Ð’òxܲ˜©qc#£©‹y–¤Wç{o†kß’_Û=<2È»43ŸžŒiî£â®ŽÄy‰ýt‡ìºbÒn7þBpOâlê8‰½|˜w©dŸä¯?4¶«ƒ‡ (hâ"VÅ`;èü?=äÕœzÂf9T‘·ð×ö«ÙPä>ÉɼAš™|ˆ™¼Åi¬âíÁŒÜÃË|”ˆ8‰‹y3TÄÇXʽ\O'Ãx’>jXÉi>2…ñ KƒQ¬ƒOr”§yŽSéNº»àEV±„ø†óxð]uRÍ &q[ Z V…äïn®£_ýZÿ«Á/γu$ XÄ‚âÓm¼Ü˜WþÅ/§Ús{ÌÝ wŽu8XðÕõ6Œð¥'ü±˜­¼ž‰ wx£ÕD©•%¢ÅŽ IDAT>Ù 7å×‘Õ WΥƆ,Oº°à×Ì¡?ïô”o§\é®Qž¶)ïw{óÎî1,¯fÈ3¹ÖŸ›ØÑûî¾Ôž+ Òý)gLÈÛ—Ð6Ìã1‹*[ìÙo‘yµkÆ)Û£.¦#íè0e9Uš§È¥M+㨑µ²ÑÎñ¹žù-LN¼¶©Æ¼±ŽµùVÒ¹“$zäºíiJÞpZ*ejUw‹MÒQ%×næt{ö9oÐÁ´-mõVªª\i¦¬ºy2{mËG*ûmg`ÁÃÇkKmI^ã4þÈ‚ÈY«Xy’ÓââN)˜Ê=&üÍm{üþì¨{Ëî÷ht¯ç{Ì Óš×"Ëy7à…|Ûu´)"3üŠ=|™õ¡„‹y›3™ö@ïy^ñÜØ³‹sé`z° çÞ¡Ðñ,n§bÜF’T´±öó ÖÓ0l»¹…÷9•sÃøî´È#,åö„ Í9œÏ’ 4»<˜2ãÔÐÎgŠr$³”Ù¦SO‘áóØIçÿ‰Œb o²‹KcÞO¸!ÒRzYÍÆŸa?KCòÔ‡x',öfÐOM¨Ê² xÐ54l¼áæ+þN¹ê¥Ÿ;Ésf–ó]¬&F97ð:ožàèádîãòdƒ¸(Î!ªC oRη±€VZ™Ë<Ì»ŠÈ/»Ã¯8Á+Š;ba¡U„Õ¾ÄÇC¶tš¥Üöjkƒ|n§±–ïðKÞ ’GéaA`#ÃÃt‡=g=>Èl¢3YP-ÜIŠ7ø×ðGf±& ªšXϽÜË.vó2Ëø3mô† ä¢ó®xúŽçO\µ2©ìa/Ÿd5åÜÊJ’dC¢U—ñ-%n+( aé0#>Â"2¼Ì lãšy™»ø))ž'ŵìæ×¤ùg¾Æ6‡è“^þ²Ež ³øuŒå²ϲålfSÜÅq3"‹)p#?¥3¸’n>Ê®È릞‹xFÑØÇ&ïüiáð»Å¡e‰Ïå%ÙH.æÛ>ieÆÑ·©duÁ"öé<æõ…±{þ˜¼ñÂÐcònÉÎO¾sJdndÿŸENÏù|Üôc¾ÞåÖ‚©Jº §&n^¯é>—w¨Þ`Ì„¬Iy+ì­rÅ]%†5>Ø·¼0·7óý7ÇüáÖÔà`ƹ¡`d…ê™ }6޲ë Ì ù“µ×è&›5£Ly;Ié±j» Ûï~ÝÝfdí>fsÎC%.&Ý{häèC#XÐ ?Ρîné’Ÿ-ê0±Qf³a1emÆÔéà!}5¦Ì±u»YÉW²ÃãÉê9ÙêÌIÕwV?¯~LtÚ@ör•Y÷”:­Jç‰!=ZšõwiP=ÌP¿11m¶çÕ 7¼ËèÉöæ>_ëgÇôæµä,L©O)5С®TÍa©2ÉaR•õ™žoÝÝûõm)§Çj¦¢Ø?µV&nùJ}Çœ)tm9½ü÷——Ÿò^û¯¿›»ëÙìcuTOçÑ’lU¤m¤–>; ‘FñX¢~FíÐì2Ž“ìôdoV9%¥¢ œ˜Ñ1¹È3Y¡<ÂÕy\É<>Ê'Lä1Gv0Ìã+ãWüGüè5‘Æ”»#Ÿãª@Šñ ¥as|§R²á_ðß nŠËfà n¥$¤œ/yÓxŸ×8/¬À¿Äì/¶_9Û¸†µ‚&0Í©|",qÅfÞ£‹±€bj§=|¢g³6ŽîÑ ²{Ÿ0{9›ÖPŠÝávNå·!¿øZÆñ_æޱš cg ò¬ Û¦ÊÃ:ü0qnd·‡"ºŠ‘ä͘’¸y?$’…?2½†¡»Ø]µh_‚·ØZŒž("OPGÏkhx÷†›où;å*œk¥AV>—ñì¬ÒÓèa¯3•8J-Ï’c'ÝAQÝO;C|GÙAž¯QÁ‚âZxœ9 2;oðóÜÈ døGÙ̺ÐüŽ QÓ^¡9ؘ†ø)Þ&Ã)ü˜%lÒþñl!Ç(0—$CË\ü3\ÊîÀ>Î_æI^ã|ƒRÿmòÿq3/°‡Ažd$W'Ï‹L&Î\.åýðdÆòk‚8C>DY6²'(Ïd Í\@k¨Ð¥*ÝVÐÌXÈ®bÏRóÑE|:&Æ$crI“ öòµ0i|…YL ŽE1§ñH² HðDz„ÇÉ:Îç·ÔÑÌ>Ƈ»¥–D¤¼ÿ Õ¨H­¾ì£9¦ÀùÑü1æ¼aRI×$&ë‹»w~!×}/Ë–pkÞ ~ιü)é+ ]Qz,3x+éÇ÷³–Oz݃©ÂÐ1>Þ¢1åîœ "G"s#檤¹yç$œ—ªÐ”2˜tz¹ÙÇ<×WgLƒDt“äþ‚»Ó.È(«óVJÖÍ){#“ò6GZ+½X¹¢2ÛR×—ѰsfÌéÃ5ÔI4ꑬSÓfa¿Ä£åöA§†±b­ê'KåØeä9Ù¥¹ÒôR›§·h´–¬’:鼚ÇÒªó¢”ê6G’F¦5—(-¨ßjdÆ"5#µVÈšuÀð=êúÕ®ÿ£ï=7´üõìòç;–¿•]¾9½<“Þ¥ì׃cNiÙKΰ¼Æƒ:Ú MÒÛ§7fø0Gz4ôJT«Mš]çsÌ-“íQÙ©ñ¨š´5Ãe§¨mÐÓ®¢^G¯þ#ªåùFÂéö÷<ôõ¾ôîÒ'>Yræ} ·mÈ|öþÊ«ï/ùÃÔ±™}}Ö0=ÕÖ TT¯ª+¿ç¦ô=7•<ñƒÜòu©%ñg´¥íNX—·\ÉE#·=0âÅSZTîR“uAÁÔ!å~TæþŒÎJ³Ê­KûPR¬`{LCÌQþšôó‚ Ôðù>[&æ­‰¤H;ígƶF<9Ì‘‹ù%³™Æ…ÜÍBv±> {îc£SDª©Ì*¡™Hp©q7GÒ¼Cœkx„ý ãfó*9öp*Gi‰KÅ|*rÍ!4nqÚ¹–±! µ¸ Z7f1‚¿qs0 !GM¡h½4‡{hå}¾ÂŠÔþ ÍÔò6ÓhåªÃ"£ØÃ]A,@àŠ‚ƒséæÿã)š9ÌhJÃÔj;wñ2ë™ÇVt²…/²˜e¼ÍKAý0™vΣ•2ì Œ¡,š¿£Š:zy»¡¡æïÙS!¤yhâW¬ [¾âº~«Âƨ˜±ô!³8¹*F`u]\±ÐEžÃ2ŸiL ŸÓÙÂD® ±ÇyfRUÔFÓÎ!Î  óhe£ÙÊulc ùð(¦¦[S­ÁVÓÓò¦” §Ò„.Ûã’3ÓiÇrê¶:RfbÆajRâ; ÖÉ•ª`çNêV•44FkdÒaåÕö7KÓ=(3Ìë•æF²†¥••*”K×ÚÝ£=ºõkNoŸfû¤Úí£SÛkl_àŠ—|s]¾«.óÂìzU9M*úMz¯_<£ê°O£D!gsJÉl 7·_l@i£Ýc Ø5Âô.õjª””Š÷Ù2ÊÞ4u.ª´¹Ó¾Þ?(¼w¨vþüÞµµOž™ûîçÆ t+nnÒÉq]M•¶ÕÚÔ¡<í@ÍÓ·Ú?%züÌ”¨ >î¡ ÿ’62n\tóË5k§%¶Œì³¥Ëc‘lAÍ*³¼_!¦¦ ¶9v…´ßZòd¤‰Ñîesܨ¥„nr$ËšpX¥óǸ»ˆ<7ËJ¶1!2ÓŽ‘<+ÂÑ19Hßf&1¢‘ ~3”SÅ䯄ĕ!FîŽÇùld*eC!Ȫh™Ý„`+y7à6‡÷ç“ìb?Ç8-‚æAÙa¦1‹ñÁHZ ÛÐPñwÊÕ©Tq–ZÇj–:îÌÅ¥ì¡À\ªè&dÓÅNó(I¸9:Þô5%á@°pŸÅÁ½Ô‰½!þ|€}œÁ#lÚŠ÷HÑLyèZöbÞ•t…UÐB>à3T‡iéÆ2‘Nf„¸ákØÆ|jØÀ²‚u0P}ËYÇ2R¬`WxŘö¹l 좋xŒžàJ®¤—:HÐËå<²¨‹é‹C'ØÔߣ6ráÑÜÄ¥,¢’ƒ,ãu*¹$§°•ƒÔ°„mÜÀ~®d+Bº¢ã¹_g²*:N<<çÏ1žÍ\M{ÉñxÌ©q¥‘2JEþáâÔ4æ¥H§'œB9ƒdÝëYÎ ùÖÀMß”°œ²ÈCŒes‚“q[­ûø~oð»:&®,§¦Ö”^Ãê_}zvôŠÄÎQÝZò&0H_ä‚AoõiŒùa‰/EžÌkMº5áPµÓ‡<°ˆ’„Y‘’¢¬7fu¤Ý ³Üµ:ºç#17E"*IǬˆ™ó ½TÒÉ-¡T3Ÿ]Ì屸lÂâ¬rŽñ\ÄnæGþ‹¦¸y13¢ãKý±lñWÅ%΄)T0•cì+ë13yš c3qÖ0Œ+y™Í4ñ'ŒÔÓäfíæ´‹ÙŒgW†¨ŽEÜÀp„öżL eã úƒ²ŽClda´#Œ/ ¥åzž)QCTÅÀ\Ngó4]A8]Î8¶ß—i¦ÀYÁ}u”VÊ) ÐÔˆ³ÿ¾2pE*UŒ½Àn>NS87Û¸„>¦Dö÷u1õù(}!ù¢ƒ~ÎåC<ÞñKYA«ãD¥}Tp.p “xšfp÷ùf';ø2?v±rÌ#F+×s2¿bjHq<“ÃÅgŽËx‘]¼Á £˜Ã_ÙÁõA?ò †ßóïq‹øGâ>C7ó ïð%²<Çå,ilCa÷6ÈU”­õL ÀʽTrJ¸‰œø¯Ÿ.>ÒÛú©â^e€h 1qï‡6® ¾:fUÒ÷ Ç5“O±•TpiRl¢]Žq7y‡«˜ÄI<•œ0+¦>²˜ñœOO)®©D F^ Ëá“Î- š‘Ç(0›ÝœÂ‡ø+™9y%(þG3Š×yºãÈÝ÷npï*±V+w±ˆ)ÜÏdò'ŽÅVð‚g²ŠûTÞü®Ù´ŸÄÝÊ蘭 3 ~Ä„Ze%f¦λpÈÌáÆT87ç„Fâ”G~ÇÉ%FSñ 5‘ºj?h²`ÀøHç0S{\ec ö®þ¸–I¿=ü¥ózÞ¾ 3l¥=[Ø?<¿y\t×oâ÷,­7µTå ÚÉv§$ÚÕ%”µèm(­±ÌR“\­rÀ®ÉV7˜•T7ÊÆíÊ*ÔïUW"yÌè.Ou[=ÁŒ 5zÓª *ká3SÌï5’’á¢c« Œ3ŠŠFí­ê—Ø‘”<Å®½C3g¯«>¼îâüºÓ'¯kî]wê„u££u3ûוÌÕv›1*o×}ͺDyÃ:T'œÓ®´Û¸”ºÈô´1TdÕŒ¬VÑiTÆì.å …”æ´†Fù¤tZË¥U•Ê”U±{QÍ‹K»W.®Ö6Bul›–¼ª”†ì×~^וìož–Ô7Ü謾¯~SøÚú; iå #Ç{·Ýs1;†Êçf4ì¬éTÈHÑsuÒ„˜tÒœ‚c‘ÉåN.õzÚPäô"Û"ç}Îü”¿D¥‰Y’Î/GÝõ”{¶G^æ-š8;ò‹Üq´éŬãLžâ Nã­ z8ƒ—#ïg­e=x›Sx”­¼Ï×°•IL¤…†+ï¿°€y¼ÃJ:ƒ?õ Îåiú#Íl UœÉQXÎ 7±,Ÿ!}‚>k‰àÆú­O°–n3Døži6²;ˆºñ)êx“:°¾ø '\s,²! 'ÓìàvêNÈ)p„Ý,ã%zÏ ¤¸&»÷mÝT19œrEÁùKáÍÙ4çÅ„°×Šqä!—r?]Ŭ¡á#7Ü<ïÿU®f¤Rï3›÷(ðjð¢1äè`—ÓÁ@ðÓeÙH!Ði/e!os îw|³ò*Ýì£5€Oç‡YEŠm.\,{¯3’;I!øI|‹<—r˜ü–=ôðjø«¼Ç Næ·ìäåpiú%,àÿD‚ÜÊTgGùtðD·†Ç"漨Û.ŠÔŸRÜßz™ÝÄ_ä5r Ì>ʽ¦’V¶ÒIŽ8©gFPpNg>é4À?3Z¥a_µ.Øu¿A7·0“&–SÅ3ϱ€+y¢df"-¸·ÇH ¿¢ƒ±-\Ë$~Ckäç‘YÎ9ÄlÖ0k¹?,¥>DÄO™iŒ‘4«à–óA¸”4?ᣜCêâx!î̸úH†M|/f^Â91‰7Ù»ÄÉ›-pïUòÚùY¹åqS³2º«M©£AéQ•CN‹V0"ç&ï¯íÇßíýá÷ËÏ|eÒ³gWìŸÑ5ôÃþèÌÚ÷—4nLÿëäLÎø ÿÀìŒiyU1¯÷šÕ]âPÜ¿§-('²u´–ñº;ßÑ9¢Ag0á°’*ýò9c©*3pÌ{ÃŒhtæA£»TV5¤vÀð”\™K¥JEµºw˜ÙáË ÎϹo˜Ü6g÷Ší6öˆ£ÛÍÉ;¤¶TºÉ¦jÉ-•Rͺèì7¬]YÂŽ2ÓSF–ˆršÕÇ å(‘¥¿^ M}*¬å@̳s”µ'k\$ׯ¬QïIvö«è5:¯bHu·xNgÊPڤ궒QÊÚ ëv¬×ˆBb ºêåôÃ7žœÐǃÑ–¾pS¢ZNCfÌ{±kvE?»&cGBG³êÝ2/”ºeÀ/² MÆÑŸò“˜ #«*”Ty%-‘0'aJÖ;9;¹9©%çhÁ°¸}‘ö˜Í‘ë¸4v\÷ô@A’þ¤QÑÏøÓ?Ä|Y”ðU~Ä\3–çÂ&»¨)]΋´09fû™TtÇ42%dûv)yëxš3øs¸Ç³#fpŒÐpœLå¬ ÌÏM¥·8NN¦ÞŸÐ¢¼{uHÚýŸ§È¤xÝ”žpgƒ 㳬 •1ËY|&sJ0ŸÍ\y*r00Vé%¾Tp7ŸávãH0;nŹ…VÞä£ì¥6é+Ññ=ŸÐhÞν¡ÏÛËç¨äyó`)òÖ“ÁpICÃ37Üü‘ÿW¹ú·Tê([YDŽ)\ÉÛ25´ïÄÙÇéœL*PvŠ[«5ì¡!V£,DÎä˼F–nVÊ{!”î) q-_ãNåuj—¨4ÚÁ«|†ŸPr¾Jþôðîñ™µˆ<ÓÙÃþ„OÑÅ›¬æ§b#üœÂæâämÁRþ+Š WÞ ŽóH±€[ÙAœó¸3:З;YÊãùO¬¯q2ÙâtŽ£aP™b]`Ò>átæñ<|%xàkˆ3±Ü²Œ÷ñ›µ—r&y>ö™G£ãß¶<<ЯS²Îå)>Æ,¶ð¬b7±*¯ ãõǘ@KÒä‚?tð‰¸ÖÈzjNIFÚ⮋ü•‘ °ŸòȆÈI4±"fvÒ•9D§~ÕéÓüâ+Ìx·HjÌèö j8‡Å1å WÕiɹ"îâbVF9õÜÂÎfñ*?tGÂGòþ™7Ðã—µ†Õ+í1¡LÍ€[9?éì:ÓjΫîKÉuøs‰Æ~¯¢=nxÚ?v¸5þÅßß0:q×÷û³Ùd>]jÏK;íŸ%Ê6ÌhüùÕÿõ£æ›ÿwÿÀc•òq%#¨á€±¥šêÌ™¬¿_e—ª.mšdzU0ªOcµ:­‰œZêHNc‡Ê:uSDš“ Ú5^å)6ŒÔšTVçÛö˜¹Ï°¼ÊRsG©cÜFg-°%§&¥ržÁ!»‡LŒéÊ9zÔC­NmfHb»ÑUÒåúëõ ÓÓ ½Ç°¬cÖ$=ØbBNMJY¥BViFòt1S&šQ&™0¶_~¦£q{(´štHIÒÁa*Ž]©;©¬D]ƒ==Ž´[Xª:g `GSí›ÙOÿ-ö•kK^99ÿ蜆ççžñûhïØ‘ã7ǾúxöúãJ”0¶]iREÖ´áFäMI›ÛåÝ”WéMZRðHέƒ‘ª¼DV,jr^Ìö´öÈ"?‹¤“>š8î¡\?¾$>'fMLKÁ7ÞÛ[×y˜!ê˜BŒ#Is r§SÆÖj6éã[ØÂâIÿ?a÷eçYž{ü·ËôÞG3ÒH£Þ›%K¶qïÜMK¡Å„„ÀIÉ„„ p‚9@б‰1`cÜ›lË–dY²d«Lï}öÌìòž[—²²Ây?hͬ5šýλ×~îç¹ïëú_¿Ÿó.d9‡¸‘qº‹5DÞYXÞƒ´rßæ :ó\ž }š_³šÕ”ˆö’½QÁf¦ø]q^0¡öÆÏs²´†VÄv:´SÇô²'銜† ¤Èò•a»œbŠ^ÎcŠñÔÛ‘ö9÷SÉÏÂx;ÙÍÓŒðaÊø2CÇØƒœŒò©Ôµ˜ßÐÊ¡˜5Éjy€ù”q÷ón²…¦ü}ÖÔþ–ÙU6•Ê·˜N²Š[y,<…³i`„­LÆÙIYräCYòðݼ{ô¡Ó°¾çÑI' ØPÅi½Äü­rlãa^g} ½B’WÅ-‹N…ç6ŸöͲÿ@çC©‡#™Ï›œwÙ(Ã$g“¦Ÿßãi–Ò~Õ¶àCº‹_’åî`o)Ôð}2®8ô~uŽþz¸™ÕtÐIelà]§ä´WÌûóUüû”“¢˜Û‚¼uˆÿd„Šà¯w*f>ˆdSÜ·<‹¸€†ø,mÜBaÞÆHOø?ʼn˜ÂØ©¨·<=ä—ì ŠÃaßPšó5.£L\6r æZ&sî‰ûXLa¤’ð(«**|8íxäﮌ GVD º,aÞÏ º¬Øì€êÙD4¹§3–¾½Rg–s#ÇÄgÅjΪ˜RW 6£qJãŒÚU¥µÑ@Bj‹¥êrŽÎª+—Hê.R^fjBÁ<¥Í:'”ôk48§pTO™’Y#¥Šf-ë›VÖ(Sg8&>­ ÈLª~%:Ç,n·jFsV¦ß$S}2‘Ár™Aã¦*U¶Ž›,5ÌYmJ6Ú{HE¿Öº N˜‰©,7vLs—Ù™jÓÙÈL¡ú)»ÊLX:­·^ÁYÓ’¥ÚŒÄ&åbZKfŸm›Y3zû~Ôeü¦q*/8cîªûƯzªàë ú·e'=?àWõ•Ægü(åÆY3 à $'¼saNÄÚ¸šœÿéࢸ+"oL›•ŒÛi¥€÷° g$¡ŸÇs¾Ì'›íš²1¦+Rì¡“îþlt*~¡YÁÕÞûa{qOÎQhçŸÍyyG}:§”ò¢ö¸ó³þ3¬âRö±“å¤KlÉ8sNän:ˆÑÂ…JV; IDAT`Ç8AOTÊGÁ-áóˆÑQF™áŽÐP)eW¨Uçž¶¨¾Pœ_.a-4q%±ˆ,b6wÊ&ôöÿ½îÏjcŒü<çáȺYTâS¾ÉúX—çßg׃,:uŒø§û¯¶ùi¯ ôý¬©íù¾ÎQÖ“äMÖò`Laä÷)åEFéâr~Mëœ9Õ1×G~É)v…QMŠõ¡Uþ*¯q;ÿÖ·“\ÀϹJ–ñ&wÒÒ~ßÁ†Ó–µÊÿ¶/`YžßæÇÞC¬áMú™¦„PÄâ°¬- ‘îùŒ‹ºHq€FÎàD˜9½Ž)¶‡ÞÝ8ulá JHqª`ýÌK*b9»&Ió ^JCàÆë\gÅ‹NÅEnc[MÍ‘[ï¼ü*WßJ¥~— ÏqŒ= †ŒÝw†oߎ¢oäJp;Ÿe7Ûù·³—›B«mˆ+y–a:•wGÏð×<Þp€˜Ï¯BÄâlæ×á™â÷ùVãÞCw˜þ:Ìñ¾ÊÜLsïÊcg9ÀHp/å2”qpœiz¹‹-lã@øÍ[Ðs.ß hù·ø þÉÔË(s rì´€Î|Á'˜a/“Ámž'e½È¾Ï ¾Ä#ùÐËÛXÈ(—†g8Îyü5?ã{éãzvPË‘¸‡ÞÁ׃ÔçÓ§r7”²™‡¨âi2|×IRî éÏû¸"rvÆ9¿á=t„<žw°™ŸÓÌg#?ä(Í\ù¶'þÓ »åzþ[#±´/ñ<Ñ—,¿ þážØ?Þ–ëýiÌ«-Ÿ3›%ÆÔ§OE=Î&²ƒ«ò™UI[X4*ù¿œéŠ4ñÛ3~’ôG9s‰=‘û²6{’³ÕZþþìSOdº3®<Ô²óüþ‰úŒ9ßɘ·XáámsüÁÌGÙøÂ9ƒ…IÝ5}þé©tVÍ´ši‹§Ì_¡gžÉÃÚf­®×œóéiï®S<®¡HÁã f*ëM4zž7ŽÈX»Ô[âæ)hVPej›»œÙcQ£™z3åÒ*›M6éÚgÙåvìP’öí šÇµŒ©oQ·Qל¢1 6y=c¼ÛhJk£á å'•Ï7Z¢¸Ó¢³¼2®ºÙàrÇR*zµÉŽiXfì˜ùÃ*«5™>éx\{·ŸŒùÀ´/–[6¦­Àá ²où·“ά˜‹Es±Â¬XÂÛTFêûΩ›ôÏš?­¨‘qÕ3’³êzÓ9lÞ¬‰œµm†g”ŒMµÖnzr¼¼xá®mýÎ7‘.xãúhç/gÇš,°œÆH¬ÀÆœÍU.)p¬FrÊ_L¸0&›t^NÇju“æ•[²&:%ÝÆ9A <œ°!ò³¸{ãf"9§|‘;ØìqÏ‹úGù„X¯Ýëgçøåg&,?dïµü9õü{Îý4>6ñzYÀîÈ9¬â»áÓb†?äÌŵÜA;9ÌMTž†§z,ò󜛘â8_ä1&éá>­-¶îîèÑO$LJs¯¯9ßäç[“½À“'¬.V]ääŒÎ¤Ú*sC¢)_ÊšZjUÊ_VJ§ý²OѰc“Þ;þRSæÚCñÚhÒßÄÿ"=NΞ_àK]îHÛÍ8ÙœsíŒ]åê&tglL¯U_(>mlÐüHÙ´ød«÷n”Ki*2÷7i÷ñâ ërj“>–õRäUî*”Îy0éæœÙÚçO;¼Ðïýßtß=>Ÿˆ=ý™¬—`ðJÑªÑ Y>ȳœ¤ŸÈxŠ?àM‘¥‘ïñvóa^äUnã¹ Eþ!r¯›ÿàéÐÇjâNöòJd_d:ïªæœ0»‡cœB,ó$J‘"Á|§Ö¨±šš o½síÿ—j±0TšUìá}t±ˆc £<é‰NÝÍ`¿‡Ï³“.æ³ Þì Ã_ËŽrùiùî+ùßbŠ’Ó¶XJŠ 8A?‡y…ùáÆ®à¾É¹dÙÈwƒ"å¿_9vûÞ0ƒ1ɘ¥tÆ-N)|Š(f/mŒ²;áƒì掘’˜G¸…¯s)´3Boˆa|é4¢ÒéW^ƒžæ"ê@ ûh§Œß¡3(Kƒßû¶ «}†?¡‰¤žZ:{‰ cÙÌ-!¨æÚ@ƺ—O³—?£Âwâ Ê8ƒƒ¡ößÀþž¯Ü[9‹8mŒp‚{iᬢ‡ª˜CqE<È|›Ê©´âhlQWlÞÆ’½çFš¢[·áRëY÷ºïwx í±Yæ˜S’Sæ|”/ÑsV̹U^JiËùÍÜ÷±È’¸ª˜\Ö×¹¨À,Ó‘*žßäC§¬š¥Yß%WèHL¼Äà¬Ì†g§SŸHµ7Gç?4òÊ%󦙭4›»x"ýÐgRSmÏ^1i&ñÀ­ÑTq|SGî’Gwl){WNALC³xµÌ˜’©S¼íL¤ ÄH­ÊbÉÓ%:‹”(+'­t³CG-ªU<¢¡Ð‘r…Ëõ´´SyÚð%öíµ8ebXq¿Æ*¹&ýƒ^¡;më|#Ì(9)•SßlºWs‰’ñ MÓJ'TV)µ©Àt±án;¦ìT¨[¥§@æ˜öJŸ]`ó<Øî`¯3 tŽªU7O÷¤Ê”Áùú«Dgxõ¨ËˬHÈNK4ö§æ¾q}ËëWΩœ’,78i^ò"—Γi7[ä¸DBQ£mÅ6×TeUF_‹ËãÎÓ2îò:WdŸÎŒÝ¾Óå ³ƒEñLM_C£UvÄý,æ¬HuÜù‘þ˜DÚê´áE–ô̬#s§ÚqçL¨>)J)›±3버k|+eIÎHܯ³§Vç"^®Ñ”r(òRÌ;=öG¾ñ°/¯Ö´Ú?ÔùõßÚ’õz¡Í‰Ï÷g§~íØ@²H õ”ÓÊ`˜ì¤&ç߈ó&3ác•ÏrüE ä¼Äü-îàrþ–»!ŠWsØÂ<Ϲ\Å‘àÏ 6ÐW8ƹ‹œÉuŒ¯jEXdæqX/âX@ó í[žÌÐбíd‚ …³y˜}Ò[Í ŠYà &Y ùd¥aZhã'õÚÂf—…FåŒQHOôò~¾ñ_áÃì  óCD{ɯØÊTMMîÖ;¯úÿ–«Z8ÌA¶QÉNÞÍw‚½k2ØióA Bô¸ƒ.H6vQ\/ç†àÁŠHRyÚdo1{9F=qÆ)c eÜÉtóó™`†óñ:´¦-€ôs§y&©ä’@¾ØÌ›ÔRH-}1Õ1kt‡›, š«¨‹Lp‰Ø©õ/ó<“Nuóå 3ŽÕ«I2I-+y… <—»ØÊB.e?¼—¸”_=ëÞä"^àyšÈñ>–rSÐÜÆ/¹$@@ò'³ËXÏÎgåü&ë#mÝ!•eJV;>¢&+¢9)Ö­§ß‘9cÃ6Ådû•+^k_ŒHvÌÊ”í TšVÕc¤Ëët¬·½Ë¼NóûæÏ(¯2žÒT%W 1+¶Ä‘¸Â …ÿºUl—ÕÕ¦*8ºÄ±ãÖ–K”ŠøÊ°µÒµÚf&l«4rBmÜôŒX3½r­¦ËLô¨Ì˜®sf§'sJsªfåjUÏÚ›y*Óúìïf.~¾víkc£­é¾BÖTÛ7%ž°>¦52VjAº¬¢:¯ ªl2=k0#ÖªuÂp\ÏÕu¦F<]­´ÒÌ´(®ªQWÖ5sö%¼3:5ú]Ã’i3,Љ™‰ò‘ð\{`QüÍ呈LäÉ­Gã r™'.3¶:òEªâ×ìçº?»„IîÚ]´RÄ(«hˆ™W9ÄúÐ…ê ô™&žãajáŒ@¬ØÉßð8éͳ§Âºš_G1õLòsXLmláWLQ@M°å£°òûæEläÐihóüP|)L2Ã<¶ÐÀQ6…&^þ|ö]²–xœ`Cº˜=L?ȼYY>¤™ W8åEYÀ¿a—xw\ÞJW~AÞÂ0gò"]ùsMMË­w^øÛËÕyÔRÂ8å_Éž`Î9 V´2À€÷’8íø™¯dy ô4 .aìaŽå!í>b¨ne'¯1ŸëÂÄ(O{œ ƒsyžìfšÈ,û¸”&žgeœäóg%½\ÍkD,¦„þ01åݼFa$Æ+‘…ôr%?álޱŸ3‚Ñê*6ñ {¨d'h=­ã7ÅÉÀéÈÏ0/ Á]ã¡s˜ ª›9v³ˆï±‘žçjFèæV~B‚^MÚ<c°„6ÚYÌC¼‡ßð‹9˜ð¾È;ØÆ/S*³Éhó¢ôW¾—{r½/áÙ Ï5$ž»Ús×Ǽ+aUtj(]Ó”0ù{>ÀcÞ·5ç-Ú’¶F¦#I fuä4±;kǬ¦¤m‘ÖÈ\ÚjÒ3$Ý5H®ÎSÇ©õrdUJ]ÂÚœÉÔ‰gë‡Û«”OZš¸¬3¶q:úî~°Q¶›‰èŸþeæŒ^ž_ñâ‚ä­ÏgŸjëî¯NªI©KÎ*lRÒ=’ikRZæé,ÏY“,4Ù©2'3åÍ3 M)¨5ÙaQ¡\ƒžnuÕ²s¾žuf›ÑõMºJ$:”Nûf³Õ3Êç™i0:¡"#›Q¸Þ¾Q• íé³°LS‘™U…ʇÔåÄZR`nZ?o&­Ì*+ÓWî'IýÎ\¥ã¸¦‰ µ%&¦JjìSvŽc*‡õ¨,©Õ?a]¡99‰qÕ•N,P1ª~B¬ÚX½¶´â"™ig/s¢SIÎପ´¯tF‹¢˜ò.#“*KퟧfH[©ªÍsŽY’µ2®&šiÉ>wE¦kqêƒ?p×}u?¾zR²MyBý¤xR¼ÄHdJ_Ÿñr«ëć<±F|Üö‰˜(®rÖhJmÌkY³jrúǼéÌØ© /©)g”§X˹¨\,©>m!?yWšHmÎA¾Ÿ½ª=“{Â¯ß A©ïdûÂÖ0â›°vúØÊ™ù°`vÓÓÆùüŠ¡`Å©g»¹ XÄ÷™#Cñ@‰ÝÌküpv˜?š‡]§Q'¶²4SÈïf_ ¸Ï¶ööÑ@þJ2ˇHòd0f-¡–{y'b;7ñN~Í*v“ä¬ÇzÂ3á•äjÖñ4£ÜÎ\K/M.–°5çîùüñKz#ƒü"rŸe·ùð_úΫ¦óû©ãà Ñ({–¶u®xÒG›=±5–~RAÎ4"…þ¹Ö5U$4Ìø1khˆ9+æÇœÅªÈÚ¤‘ÏÇÝ“³×ç4fuEþ:íOg•19™3Wlq±{³ÎM¸1k¤Át¡ãæGª²~2çάƘ]sZ³j¶Î”ôW×6Žî½S&;ÿ‹×æ^¯iÉ.Y"–T5aéìŸ}'÷µ•¦'2“¹è‰N®™È4Í(¯7<ëósÎr<®®@aÎòV“ †ªÄö[[cªXºMG‹‘å:‡­^îĬòr3£¦¶ëœTÙ¦#iå˜%Åær —é)`µ·ÆWR ´JjŸµ‘ظº*“»´©K[^£¤\ªLjTUµ™˜XN¢AçŽJ‹Zħ5dݱÆ¥65híq¼YÉ[²Ìf|zÌö¤êJ‡»UÇÕ÷ܰ§Gmï“vé!'†,mÒ·P÷ ý&'­¥ÆÜ¸‘*'-R´PÏIí“*JD[tW[6jK¹]õf&tN)˜³ ¦VK³I:›ÕÖÊd-Þàp\,=ÜÛµ|ê± 2÷ÞUöƒõytNQ¤w™¹^é)™Œ#9[æÄG{Êç´!g"ò)Z"¥AÌö-¸2ã2êWÙ2(ó›œ- ‹#Vàs¹Í_Vx›—ú Ü™ó0üˆ^¾J_°Ž!âZår7{Ÿâ:~L+·ðBàæ °…—X¤¹%>zTבe_ åN˃›WûýÓfÛ‡ø{içåÀŸÍÇVäó±z¹ªÿjšàXËFøž ¼ü^y„c\ÇYüŒñ?§8äIŽòG™e;Kø!1Î!âe6‡Óá#ì~’6&¸˜û‚¨û>À½Ô_ ÉqfØLŽ=ÜÌël§™ý55U¿q;Æ+ì㺠˜!Åm ŸT‡¹‡‡y‚)ÞºIF© ù’cŒÒÊ],åz~B 3<ÊŸ°ˆGyŽÝ,ç.à}|$ïc'×ÐÍçø ?ç\¸ŒWx?“”GGzVQÂAÅ0M…äx×B GG²}>ëx‹y“Ƕåˆßf;Û8É=œæ äÂqj^ #.‚Æüï§’«h%ÃAàþ<_ ›W(¦š ¥I?Ž<Ç7B`)ßM:'g×òM†i}È-!¸”{(eo°³¹Žg©e‚õ9/G #ûƒÜèz¦©æ÷x&ᾌ_…]Ò-!<íU^à³ì 2éŠÈ¨áv³í6¯ðÚ |:¤<Ï3 >âüãÒÉÄ#_]ÉcIÏf]Ã6”fûîŸrhBeÆ|ÎÎ7 jL&Ü9ç,Ž)Ïy‘›¶xÇ€ö¬%ˆY_ìG91™„ÖÈ1êÒ>=§"g$§œ¿KëšQ^cÁ”£Å.ÏúaÎð2+KKc[¾5±à‘Ü÷>úz¡´þ®³3³«G¤“Vt«.Õʵ~ï‚¡—>U|ÏGæ¾ôã¢ÿý•ñßÕ6òVêY÷ÌyGΙ­J'äæ;8ßð´Š´¨GS}Úâr=êæ$z´¯pð µI¹ÕÞSÝïÍ6ñYƒuŽ”©]ìøa‹I4˜TqÌ‚Z©”ø2'ËLš‹ÌÆÍöiÞdò¸öOèî5¥Ž:ƒÆÛLÖPÓ§¥Ød…‚”²*WDâÅbc -Ié«T¿Ö`NkÊâõ††Ô6›ØèÐ2åÇ}(££Žµz‹Í¯73¢äUK×ë)×°ØÉ„¢Hl­É~#EÊÇU7-S:ÃI {,_ç¥jFåúmØ(3anÔËiÝ ,j4R%6§¨XºÏ›',6PìDzº)3Ú”ùÓoÍÝ}gšŒ 6Úy&«¥Ýü …9ŸÌÊY™±%î†rï7I[Ö—#Ûs¾=¡{V–ëò!1ñÈn^‹¹"(i×%ýCNUd"R0àÂbËç[3î;YŸ'›sŽÍK¾ê¥÷å|Žãl纜J+ÍÏ_Æ»¨KøpÌêÈòr|œü" âv ô_ñPL*®6òEÔ‡Œ’¯˜EðWû­áPux@W’äR~Êpo˧&ý ?!ÃÅ!Ùg õÅþöÕÌ4„ü¿¼÷ôù4ƒÃÄh#Ã.ÞàRx8Á(M4ÑÆaÜpˆû)çJö0ÂÍûicŽfÊ‚4±‡Â@¤+ùøi¹‹ ý}1ÿÈ#]°Ÿfvñ· QËpMMò·”«ñTj˜+˜Ï“áxÔRása˜9VI§7oæÌ|#!S²‘ìg00÷þ‰Z¸3¨Jfi°(í:È|¡Î“¦v[W8çàbz)â1ÖòKšYy‰ëøç×5Þ¿«ƒp%ɶÓнùmÅ[áÇz¹„YªI±7¹”:æó40Á†²žÉ >xûÏçP€%oå âAÞRò'ßR6ÒÇ®ö‹m9Û¸7Ìl³ù¶j΃,æ^j¸†;ØÏ<²4±”û(#ÇÃAkþ×ÇÜ'ò`\E¤ƒÕtQÊOy_¡‚oЛSÖÄMEޓй=fOsˆïÈÙÉìôVÂk+x!®9r’wĽ‹„úçüõ£>zG¤“£ +\7³é›®û•˾¡í*UMŽMäM¸6ælÏX:ëÜœ0ÀÒ©œÞ‡* ÌX^ª©RY©Ûg]Vfs$›qOÌš¸Ûy-f0n=WUÙ”0oHªÐòFéRgE½Ú{鉑m¿L\:X¹13;-Kɱ IDAT°0öÜ{S‘óÒ^›±y©©¤é”cE^>ª$±$S»âµ‰ºTã_üQëþù“~4á’RKª˜U’–.²cÖä1W9>©bN|ÚÑŽ&3ªã*'TŽ*,‘7©Ê(˜²¶Âè€Ö%æz4œ4[ª(&·HÇë·ÔÒ«fÊà¬y½ŠgÍU™i2Ô¥¡XG›ʦ”Ï©é³ò¨yi¥Ë›RuFOJ¥”øÁŒ%5Ëe{ͯ16*S {Èæ˜hžZ#r‘òI ¹ åÅíÞ|IÛ´L±xFzLE§³VÅ §•ˆF©ôL›Âq«)3™Ê¨¯•["R]-Ó«;匆M'4§µf=Q­ºDé°Â ¹~+v÷G#­5fsšröÆÒ<¢9¦!¦!ÒÙL'eZ4óp‘yiו™LÛ”°"n,2Uè‚Bûæ<ÉBþ"!yŽs(a.2‚ÂësFì‰ÜË_r›)|ÙKõÜNN/p w³”¸œ“4ñxä§‘ÝÜÉ!–yÂzhÊØþ<¼<áú¸+sžåvú‰è¢„ˆ ¹>¨ë˜ ‰òŸà0#¼+¨6²ɶ˜çˆ1Â*„¼Ù<ãkì¼¥·¯-ô‡Rü¹çg41Ì,—…¯?È7©dÏi¿a:ÄçSdC Ø>ÎûÙΞ€›Êcæ¿Äy±•ƒ¬¥&ÚŽs44äÞ^`/û¸3ä?,äº8QSSó[ÊÕÑTj/3ydÝ\ÌÀJõÿ·Zun(Ȳ? ›‚~ýí:—‡‘÷'üe¤—$êÝ:i½dcw3«ØEíœàBã.R5'¦†ýA§~5ÐÄûØÄ®‹$S\Lk _ =üa ëçÏgñ$­ÜâŒçØX–A{ÓÉ9A›ðöµ™Êà¨(c„sƒ<ÿNÌ‘ã&Þ¢•oSÎIžçN4KÌz<§›CÔSÈù¼ÌVú¹‚~JšeäXÏ÷(àwi!Å8gSÎá˜á˜žÈÃ1ë"ýœÃCT²!éƒ1ó"‡‚:6Íã´ÅÜùgnˆ¹‡ —D®ç^¶p Ëx%hF*b‘Õì‹9ŸùþæKšR¾¿6îB*s^™Y{Ò7~¬ôLŸYgSÊ’!7wèˆrý‘’ÈžÈÿávÆ\LThqÖpÖ‹ YƒqÅ#~³=a¶BqÆ™9cq¹¬¢¤ODæ15'—’ª•™1>caì²gfÏìÎeKsƒÅ¥·¸æŸûÅ™é’é4 »¯Y2£­ÃT•‚¶—õ•=Xõ實»—–xyÚ†aó'ÔŒ);ßsi²–f¬jÕSmªÝÉiåµ&jĦ$W$9OÏû–zs¯¶¬òbãYEcªjõ7˜R¹ÀÉIÉ„²Q5+™R—KëïUUfdÚðbêdéÞcYV²ÕÑ”¦%ÞÐXi¤ß\F.«pRѸÖ1U-ºdGµ$¥(˜3/­¦ÜÆzEqñ Ó)É2ýoI'—‰«’™Ó5T(Q&QPe:&‘‘2X£0R:ßPVE•ãF+Œ/01l^½þcª2Ž•Û>"›ÐP¬,)6¨fZoƒÉ9É ©BG'$Ò·3;Yl4³±XQÆHZþGüî›"có”OˆÕy1¦iÎ6Ò1ý4D§â6欞ӚÔ3j6g¨È3sJc"¶SSlºÒø¤.~Zç¼)?¤…>¶'=[¢aÎQ¦bž‹¬£+á åj›‡îöÒó\FIÀ+Ôò0Û¨ À%1 q×ä7^ÜAw0 þ>9ÆÉñNš(#ùuN;­õ^ÃOCþQCO,O$šssBS$b˜ûù&x•ªj=)渔ǂ8 #˜Yóí¾añ9ÊáÙôRÎuÜÍ.fƒõj/3‰SÉRöÙIn¡‰l¯±(E)ͱ ³_O'o²—QžÎ;µÉ±_ŒMáß·8Ä•¼–ú·HPCWøú Êß^®’©Ô†h jæ*j‚䯊»8›‘0'\ÉN0Êï3ªR®gS•¯X™yþtÂCc!·³–Ë‚.%B¯çÝ\Î+¬â™¤Ê™à×Aèq„m!Óe=ï ¡ï)žârv±†aöŸ–Q’W£Žq'=ô„2°‹sXÁ¯â–Å}&²ƒ?ä'ùó~Òç"3J'Ç8všN4ç[™` ëaŒA2BŠfø{vq9/p-¯p5S!À~R&#±9ë#ße%lä\îŽÛSyˆëøáƒ,‰ÌÇ9ÁI–qœ&J#'ÙŸð¡œMYÂa^‹Tñãá;ŠN©çWò:U|˜&èâ Õ¼›sÙ ‘û¸’¢ÈÌøÊÉþs®÷9ú#g˜÷ÿkÌWøÑQƒ½^¾Ý›M†ÊýÎ^½.9Yšó1–²‚¶H'ÓFs&¸Š5¥Æ}.ã¸lZjÎ_e”å$#MÔGzãê"] ËãjãšÎõÒ[g§¦.úxË7Κ}r×úׯﰪL2kn•ᣚÚL$,Ó׬dΪiíõˆÌVÕjÒ6çð ‡­Xg ÆtZñ°ƒÚ{ͯ0QeºGË1ícjÛ,qrμ~-cªÆ!Yk²XÑqK5M™›Ë©)—ÊH.ÔÑgE£¡jƒê ¿nݘšR±6sN®fBe½Á}Ö-Ò×`l¿# vjJ˜™'5¤t›ýYEí:#‡{¥k55-‘\ëÐ~Í3Ê&”¶;Ñ£úB/i›Ô:¦°ÁdJY¨Ï¿ç¬j7>­tHI—Švƒí†ŠUÖB¼]GŒQµ“šWê9¢¾RYÖ¢å%V/Ö5£ºß¯"™6™“þ¥Æ¶œªY׺%#>xããéù‰èÝ$þ½ÙL²P¶ÎܤCÙWj¢îÊÈ£ÓŽf|§Á‡†•,å|5u*÷LŠš4§µgDS# ø×9»ãnËz+¡=Ò˜u(ãœÌ©^ÅK\žÓÅ• çôDbó•k™µ2¦>§•Zî<s]bóXTØå¥«øYÌm K#£¬àg,fŠŽ¼Œ;f„9Jú_9oòcæñQ°—ż#lÝʸ:˜NŽp¼ÉMôÐE‚kbïc­qþ–~þ†e—SȨlHÀÈsŽs F§ÈyðR~þ*òúûØM 1vwžCtcXW’‰< ¼‡Ãj6ÇQ^ Àñ}L3?„¿_ÉÓ,£iVPB;;9ȱ09I/9¦8‹½Tr3Ç$Ã(k• mUüÿö6â·—«o¦Rù´ã“\êç®hú½¼zšÖ~–N® ƒrnäGù:÷ó>ð:õ¡wySÊ}¹S–Þgy‘çèä‚PT"f8@üÌ0G™ÎyŽa¢ø‘ò'dxŒg¹!8®dçq€‡™á.–p$(&ˆ¸†#¼‹UAìÞÌý‘Zb,¡ˆ4—!Ëazá|”E|š^Ž®âU²!ç±—Njd)´r-CÌ„¡Èù7òþ¢Æ1î×Wñ8JÙÀ"þ–;¨à Þf‡)cŒ—ÙǵüaD$|ûò6 çÂsßdš Q÷D¬ <ÑV°šKØq^»ÚÏe<É5\Á3È1äs|5|æEšT]¤xl§œjžñíáŠë;|ð ªB]å^âMî ÑßN-vÑÍf–Æm ÎQ6~—WÂXÒgù‚Wß§À#|3æãÜK„¯ÑÎ+ìâ6s=‹ØÑÓø)“8Ü9û…¯eë¶GÿíSýNÎ(É;U®fÚŸÆÜÈÏ:%çl-‘š21Ÿ÷ÞY±Àx …žÃY{ .(·8¢:ëå-«Å§UynÜGb6"‘si„Û%ü ¯‚¬Œéˆh¬ò¿2þAk©®~$UÆ>.ãß™åhÄã1ÖñE>M†}‘s5½¸†¸Ž79ÍòÐ!sKÃ%–¸Ähábvp„eÜK’[é¡2þ‰ùk΄†M¬fc8[‹ÒÌ㡪~‚vj˜¦ÀU<–Ç,9Z¸‡açXòE‰Y–Nò{ØC>z-ª™#Jw(°¼SႪÈhO…“¤}á.ª*09—¢þ Ý<‘ù`à~Ê©Æ[¼J~=ü™Å'PI»é;ÜÕ´Ñ[_á}Þùßµ«ùTêmÒ\ÌKár¨ƒA.&Ãûx“5¡2äX(;)F¶Lò"Bð9v…¼ÅâIó>~Æt¨›(cœõ4Rʲ0‹³èÐ*ª3›è—g'XÁpáœ-©Ÿ²¬õ õ, '¹acÑ|p=kYεüCÌæÀBbE2ŒÈ¼9teýzàéà3i+Ó! ë…ÿº±»çÂgõäy³Á…*—æ0Ñø•и„yÏEÝ=âÏæt8¸»Š¯ð!šiæzJ9@„GÙA¯²5Œùúx̱Ž×ég©$Æç4‡¬ÏÙàœ"ÿƒÊ2Ãð$qVñÝb‚bàKQ÷°4¤/©-½w ·ùÂ…÷XÖcåg6˜ØuA`ÂÕ‹”]äÅQ™kÊÔ¤íK»Š ù²}1ߊÕÞ²5ýÅo)PØlë”§÷›|N³9&Hr[Ôûy-îžJ3Y™ =ºª<•².ídFKë'œÌÚŸÑ8¡­ZGJ_ B‡ê5ÇéÒŸ¦Ö}§úàÃMs•6;Q!}ÐîR[úT•IdL¨–¬•-Ñ‘5ס¼Ô⸊RÇZ¤éJ›¯wö¬ŸÏ»´I¤Öl\$.¿Ä Ú«­ì6ЦENL(-‘˨ÈiŸÐ<ªºL>£ô¸¥­z©¡"¯2áê–L©­‘pqÌPÄø¸¦gß±¡Mo¥LFI•Ù³Œ‹îÕ>©;ë̼eR)ûF•ä,Y¡·Úô´’) Qs êÍökžÔ8­>ãg%ÞÊÙr@cÁȬ­kD#t:»Ï¢9•qõu¢]ú§Ô51¯©ßܼé9%U²NNzå€ÍÝÆ*LìskÑJÕS–Ì+ëk•LjÈÛ3e°Y ±)©YC:Êd¦ü²Ñ|DýÏœ¼ÿ¹²±ÆÈÆÞÈTMå'ÖLÌ,JØSmYVIRsDGÌh`ý¸Ò„E¥Ž¤¨1”5Ÿ×÷åR¿Ÿk65ã·o·YxjÞgX1’µ+­À}|?pІ„%¿¨Ò·*î÷óVs/§ãÅZ'ÝåØZwo—Œ:ù?æu†)g{Äý•QšxLÌ#”ÒÇu,c;£ÜI[èx-ã&^ç;?t.(uˆõá†f£üˆ‡ÂóPq—ÓrÞÚ»Œoó:íEÂ@ÔÅúÙÀh˜a¿ž§ø)kΓ°W±‚ÌÑþ_ 6EÜë¼ÎÌyƦu̱‰,uŒc#i*Ùöªóo±PÜP„·q cÌÇ\x•z>ÆN†¨©D¨àÇ¡Kì¢"i‰X¸-KÓÇVÊ‹Äáúú›î{ðÊÿ®]J¥VPA}|Œy~‚§Ãö>ñ_Çb L§š.Nòí¡ü¬)\0ÇB{ì\^z¬ ÉdiUÅáå WqœJÆè ùó-¼Éú˜bhÿ8Ûhç6p¹–£¼8Êf¦"Áoršcl#qWÔ@àÝÌ… ÆB æ†ðo«ù¿¾ U¡Çû,KÃ]4Ì©z¯sÙ‰ÐË&–åâð4³'ĨßF~ì¡%"6…¹œ×…깈HÜ7™ÕP‘pH[”·e™ïã8ýQÿ;âT `˜g¹œëù÷ód8;ž =X_ç^‹¸1êΆԒ[}øPzÉDáÄ%>Wé™ëÍ÷ðëÞ?yê½ÁÖ7üŸþOÌá±-o]^:ÐÄ“¬e!ñ’_>–x:¶þÞàÑ7-ðõ?5™ möù7ÍY×øqàÒ)%Òyƒ)#uù„ÓYýOÆY0ïñ„¦G™«°a¡‰²³S±Þ’Û–ÎfbFfäç\?íñ¬ÚÓ9=­ÒÆç-#‘Q(ñîɉԉ'•Æ}¾S0idÞ½1ßhã¬Ê:S§,šWžŸUU*P¹ÄØŒºã'-¨2Ü£oLÍ)Ý Ô*)‘ÔT.‰ë-HëÞh×K99¯n¡Œ²¼HDlDóBg9uÆâ3‹ V«ßbG©LÜ`Ví”UeÒQ%uÅDL°8Ç´’UŽNh^*Òc®Ú|•š˜Ì¤ºíQÙ~µfçÔED¦ÔÆäëLÖšŠi®s|Zͼ٬®ˆ¡]Žõ›KúÏwÏ(ŸS–’[çpŸšF³ƒÓ6)¯1—WÛ"=­fÞçWHD\›Ñ3¦,õæ’ÔÆOgKÛr_¿hÙ™÷ ªÊ[’7µº^nN+"*¢%eªæ5Íú{VÇ\økÞÉ™Ó]iÁbûl˜÷ÿf c<í½¬«+x®RUÂÅYßlvwÚXàæœSõÊæÌV»¦JSÊl^4ãt›ØéØef:ÂÏõÒâÅ@'ï§8M¬å4í<ÆÃÏr”5Ä9Ny(.â=—ÍÅ1+C½\5iºÙÉåt†G“ ® …yÇÃzR ¬º>b,ÐO+ œ¥šaÖ³Ž=TÑN%“Ä©¤›~ÚÂû·w ²ózUGŠï“·8Ö*^ñs#}ç Ћ¥þ=ôÓÁõ¼ÅGèä"Þ `3g˜àÍ´2ÃfJé)n¸:„Ï»u1b>Êz–ð«(¥Àµõõ¯Ü÷à‡ÿ»vµ%•ú: ÜÂ1v0nÀnf7C¤™æ#œá†pà{7W„‚“¢…­(nIqsˆ(šxÞæž æ‡CXV¨ÓÏ1À:6ò*Äyqb|ˆ+ä4,áâÌyBÉbjÉwI³™]<ÏÚx+áóe<ÃaÒèØŠl«¢&õ Nq”Eü$$tå™ a†rk()¢D¦YO5'CËW2t§ PEœ—x›1öÑJ?b;»Ã9ê|%æîˆ¡à\Â}‘ãWÀ·†Hÿ7) 4òuÖó {8ÊØÈ7YÁÇùI̺ÌÚI†Sa"À0«xŒ³ÔÐÇ~Nó(ãlâ÷ÙR¹V°ˆw*ü]Õ•ƒ¹w® ¾õFÂc?7PáT¿÷?üðä´ï^Þ‘¾tÚW¸šò 7ÆÝÌþ@!£ÒÛ5~yÖú‚«øû­&»icG«¶i3uVtøÎ˜×öEUÇlȩʋ÷Ø\êºnµQÆu>õ±ˆe1K”DŒ˜çª´Ê´ŽÙ‡ß)Ì]–ÞÅœ–˜D©EãfhX¨žõóê§UTÊŒ˜[,òÇãÈYY&—’/—OhŠXX¦¾Ctĺjs*fU&ÕŒÙÛ%‘/‘m0ÑgáB}#ZòbWùeŒCÖÏ«¨—Œ)4ëµ¼ÉlZůhi6Y*Ö§§Íp©Ø¤†Cu•‹,w¢WC©t³û­=®«Z:­t¹Á~úN»rÂ"-FNëÉ*YæÄ€“’GÔ¥Õçd—ªU’ÓyÄò:³5f*d: ê¸ÌŽJ/ÎØ~™É´²¨ÂQËÑç“I$4’OêhÐE°ÜÀ¤KÕëÉ©h2÷W)O«HYZPQ'PH‰šH‹Ç¬œ‘3Z.Ö&;ž©ilÊÏ.ÌÇô‘ym‰zfµij29‰@o «àwrnÍyŠ1~Qp}©¦V×ÖY—v}^í¬£³žˆx8°‚Û©e#Ù@]ÄÓÏš‰ZFs·hÊ«³>›÷DA!⺴×óVfŠø;¦bÍM^ß‚ˆ>Í[<Jm‹!v/°‚eˆý|”ï1ÃÅaø$ßb/—ÐC«ùOr!ÿÁ*Æ;8Ã\ÄÛ¼Ä޲c̰%<œ/Àž&œCQ Y¶²—>N…ŠbAÎòIêHó;¼Êo…êGyƒ•TŸw‘c(òÜÀaç€Ñ…óªhQÊQd!~˜3\Æ‹œb7“œ¡‘Óì'à CœâáÐö3ÎMlã½aÝ.>ácŒ0ÃIÞfW(V(>Ðñúúé_Aµø£Tª˜ü[Œ¨€ŸQNœ²“ߣ‚ãìä!¾ÇR¦yž7ég"ìÆ¹0g¤H­/Î0Ç Tñ7s¯ ƒÒsT„¶­\ÆOBýe±Gþ+o…xΰøž @­dÉñ2UdÙÅi Éo¼Åiþ€ò"~˜­t†(þÝ\ÃBö²™§ØËôy À9ãcüÏ…3ÀGBG?&Îû•ßÏÙÐ^=Wô~E”‡f¯ŸóD¨Zìæ C|50XÌ~+´y]ŸpQAÇÙE?óáÌýržåÇ\ÁBV2òˆwðLàö9éÀ>ÌOø}:8Éj#"|1¤5’ϳ‹^Ò$xžÊ0dòY_I¯í/|a›§þ¢0²ŸžˆãÆ·ê}<ñí,|é9Ï|LêøŒêâ9¸Û•9Éy3ŠèŠYˆvº"™â’!KúÙ2gžlñ»Õ6ûç¬Ò”oWù`5UÊKœm×:f¨à¹„õ3ÚÊô6>ï'|=ð[Ƙ-Qå¬l•˜ñvD3$®NýÚg2ùÒ§î/*U¿ÈtFUVÑò1‹sò¦ÇŒ,ÐÖ­wÈÝózâtÛS>¤³K®Rj\[›‘)½£ä›õvX"?£ò’9¹QKËÓÖåàf»NYX![cºÝPN"'~Z÷bÇc‚«lÿ¾†‹Lìµ±OcFi‡“­&*dsÊçÕÕJ¾å¨x™¼x¥ÙVcœ,U²B߯a% Ù˼2¤«V2!“‰‹LZ_¢¼E!+h¤”WKµ Êl¥Ù£êÆLå,ˆÉŸÖ3e]Áª_(Y`r‡1óM†—:Ôï7¦ëPÖl~†¤XÜìaÑ%òõÒzÖ:%o} Vá„Em†fµ¼Ê|³W9:eyÒÒyõÕº³ÚU¬62°"•íÚ^x±{Þ¡uªf5UÙ—ôR»¶”5Ï2Õfq5Z"*š¬Î»+b&ë»ÓnðÅ¥âîNfCÁ¿°ŠÁ¨Ñ„Çïð“‚³oÅ\”“Hª°}Úò¼;Ù”³–÷G|#°Þ%­~ð{Á í‘ÝS ï-x†ü˜JJ¹‘mœå~êhæm2ü'QwF- ¼ÊŸQÆ4ËÙÎb7_f;×á.áR‡w IDAT~ÌycdYHgÜ£‡Ãø’w1Æ,kÙÄfùSÆÙËß²›~.að ʸ€2¯ÐÅ8ßæ ^æijCöùiúi Eš,ñ gH„赕T…‰¯EÈS”Ý$™`cè+šÃör8Œ \ÉBúÂYhŠ÷ñ3ŽÑÌ:N‡ö¢ýëÏ •úEpT9ðRT_ßx߃÷ÿwíêç©ÔÚÙÅ!:ØÏjjø]üˆÅT…@û€ŒR ‹ÙÍÒÐ÷S¬³·0À½\É}¼ÎUç8ÅËhf=õ¬bž•œäœçúš¦‹ÛÂÊþ 1µÄ¹1D5€¦$ºÙQ¿ËpH=9ÍGy•9Âÿd'Ùˆ‰È9Zp­´…_5Œ±“%ç9ÀŠ+º|¸´,rSá·ö‘ár"¡›¯!î¯ Fibu(:†ñ3eôó~Îuü€­¢¼àSׇB*ó'ɱƒIvóŸ\ÌÓ¤ØN†qœ¯ÑȳÚY¶r/Ç­¡=â“·¹†<ná§4ðvØØ)ýóíÔÙùy+9î=\÷`¹Wª\5››•û°ÂQ‡×JO9šwiàŸw”òƬ‘R¯å®ë÷Ïm¾ø¬ŠÑ“5±Š3·Ni™Ò;­~ƒÂÃUR1{ .ȉÏx<ðóÿ+ks™5Q½e‚Õ3¢I'§#î,w$è¾ ðù½ûÚt[ÔÜ Á¼ò3Ì;¼Îø¬S%â%¦Ë̶z!im^kŸÎJoÄôÔ™ m²]P!Ó$yVÝ…fËÌ žUS%WµÛ‚.‘I=+í)ø‹¬…gõïv×€Ú5NŽiŠ)Ô™ìÖ»Ëú2-&ãòýV$ ´­Ô·ÁÞCf«Õ-p¶ÚÌ>ë¶øe«á%NÄäOZ4¥jPÝÙņ{œzÓÒ9Ó%šš[hhŸBRøhJÍ Gfe"*78|Ð’‹õ—Jg•¼ceì&CíÏjNÈw8“UG÷AK)¥¦hËh\B™Ñ:[L/7Ô¯qJyNÇ!ó ̤¦<}ÆTÚ%¤“ªâªç•Ž‹(™Q6)1#RðVÊLFG§Ù´Éöï w½yqk˜HZ“R–óƒ¤ETGD(3=#ŸSµ}V_ ¤IzN^=÷ÍÊåÝXjMÞስ,£Ÿ»¨ L3ÍÖ¨"6fßMiöYš¹”o°€ ±t˼Rï+q¿—ó(W3Ï <ÂãŒÒC"¬o70R1û‡Kˆ¥¿aï£.öð—¡ñô—Lsû¹‚ 8ÌR2dØÈŽÂ9Hék¡¶ð ³¬ Á“4ñ¡3,Y㤜:z¹™·)0Êål;¯ —„ðˆ9B?•¡Æá½ì T1&·‡.XÍr:¹•+x2®$Â0+9* ßM_Î\8+Šõ—2B:9òT‹ÿñ4æ%ðsþ'ùÃP»0K#‡9D[}ý÷=xÑ×®^I¥šy#¾D=åaûYÎÇŠq“ƒ¬9ïh Œ?>ïæP RÌ|ùÿêQÌ~>bµ^ç~þ…빘‹y‹C=É,rŒ‹øIø¸oÑHá_â k8K– æØBÇ·²<´Mü ÙÀû¹€yêÙµ˜Ã!‰¤î¼¯xÈñ+¾¢wCÒ¶ÐN#‹ÓØ­avg˜ÁQÌuUü’·hà'!B.üÓÿAøê9À+”‡Ză¤Øs[pN´ù×Òñ|ÔØÚ›y„|Û9ïH"¤„ÜËOX@¤à»÷¾GuÌÃ1G+ÌfΡ_g¡KÜ>kßVÉ'ÙÂvÑ|îµØþ>ðå–VÙ•„eä9@/#ÅÅuÜÕ+Bho/Ó1gJÝ™¹n›¾åŽ-Šì˜ÉiËbKL¹¸k(ÎdÏûµ¨ÎÀîà\NRݼCµ®È«J™ÓžSÑÑPp´Ã “¿ùÝà‡ ¢ßÙ±²IC¿äœ…5’5U"1‹Ë”5ËkzªFUB¦A®[¾VrRiµ²˜d—#U5¡¡Bþ¸e%¢«ŒÆUfÕe•µš•VBl5›t,u¦Qª^ÿ!Õã‘*s9åR1…„©7}§Ó-DJe¢:«ÌÑS"Ólì¨å½º3J†µ«*U˜W²ÐÀŒê2éV-7\ªÐ"ñ†ŽZ¯•éXãä´ºÃ01`Y^iÞÏ/V›Ï*2P£$§"'Þ§q•cG,ЉÄJEK혨¶kÆêåNÖ›œ›«Í¨¤,§¦ÞTÆÒ$ñres®Íy¢Ëª˜ŠR…&ûÊU¶93Ó0&S£>¢¹ÊŽ9ó«ÍN™Œ´gÇVŸøPÎÞi»bZªæœÉ bÚ#:ÙQ[eeÜ©yOG]uùŒC17P¨ªò|—‹XuqVY ;â/#ÞSðBÌ’@Äžˆ+9wa`2° üè/ù/ŽÚÉNÿó°ü ¾¼…þ‚d˜uPÔaUSC‚ Úù(‡˜eŠŸ±ŠöðƒÙÀ¶ð"µå, \÷°’ï2Äý¤8ÎV3F%9ä×ùBXIŠ“ž"uw?hç =ìfg˜q? ý¯õ¡Çù=|+ü9à«¡_¶xôIžã~·Wm ‰¦egC48à g¸‹XØ]ÖqŠÆÙJ73¬fAXrßEŸq1]ážï]öî8ãçœfEˆß-ãK¼Ìj8ÞM}ý¿bwõb*uˆ hfˆ ¢\@G8†4ßÇF¶‘àJÞË^¦Â";F7o0F&§¨dü¼©Z0<ÄÛ<ÂæPÜñ3¡C­èú G‹É·õ½aç¸Ö9?é2vä4·s„‡æ¾N‚-\ÍËçif~‡'f«Ã4áÁ9wÛ.‡_=¼ê/çtÈ‹zWgQÂn á¨÷‡—±(”3DØÌ"¸™7È3ÆCü{h¤˜à¦ÿkö\ªtÑ-p“\q*°–4Ëb>Æh`yD,ðmÖ’gšu!Id?×2¾![Hå4Û¸mÅOiD õ™œÞaŠ9w¯w÷—ìöd¹üÓüÒ>{E-{v´Ì\ÒPÒšˆ1•~ÚÙ^±6ðJLu– •e.Ik*Xžñ%#ºk¯/'£³ˆºª`;¸)PȲ/nADªÎÙ”ÿŒXVÐ\0A3§µ´¤|.m.ckÖÿ‰~áÇíÏn©T‰Ì¨ÿ§?õØg£–EÕUJ˨,“N;=©qRUŠ´ŠŒØêN[R!×cø¨åS‚¼Ä¸Ú¬Î¸–VÛ­6CtJûÇçT”™*•«1Ùk¶Tõ•~±Ñ‰˜|™\ Ò`¢ÊlZIZ¼ÕLµé–,vrP{¹T­©³z:”¯6Wg2ªpÄŠ6CÓª[4šØáÒ˜ÂgúÔôé¯W›Ë*6_ÐzÆâ…bòG¬È«[£„ê)c]f ·h+ˆ×I6ô¹.7i«1½Úþ- è8¨»Çà1+ËͲ£ªªÍE¥;;­t̺¼Ò¸|\É„†*™SšZÌ”ÄæU6ˉÕ8Ú¢,©±Â¢´·’žT±¤ÚDÊd‰¥ã–” –l23!•5šjiÏÜû|ù·ïˆûe’ã+UÆôÖe•Í™Ž¹<¯/od½ãýê#î+È•8ºÈá1gym^U óöÌ9’óJq bÊXøRÄ]Qk:´fô¦íŒXUX·º űÀ,‡µÝkõN/ö…®Ä´óAê©æZÚØÌ6ž WW…ÛšJ¦Â€õëØG)¢ÜÆÉð#Ö÷‚Is7?d;û¸'”þFèÀ­bO…•ä#¤ÂÅÕ §¨ 3ÜçȲŸ9f ñyîUÐÅÐÔ %–Çwo| ´-¿ÈWA’;9J-¼V¹"y½0:Äí\ÇÏ[sT…×ú ›w±<cè'Ïë‘ïÞŠ0‡V°œWYÊ¥ì 7AíáSmª¯¿øWœ®Š"£ôq#Ãü>ßч¿Î3Œ†Û¿⛼—^¶°ƒhØ®f¸ƒ2îámFéO9ÃçMö’|…&êxCl% \Çi>Èö™›ån¶s q„Ï2Ä­¬á v†0'Œ°œûùy˜s¿4üÖå¼þ»¸jú3êH²‹aî !îçKb&C[\‘18ó_©Å^ _Ô£|ƒ&‚À låwòWðOĹF–ñÑ3?ÁeâÆŒïìcÀÞÎ~xçˆ2—ž`M`Ÿ …oqÃŒ±ŸÏ³ˆï³’÷Æ]Qð ¸CìÛ"'8¸5°+g[Øq,îû…£]ñ¶ÿè°w‡`H<û‡àè%Á_.Ե枻)ДpWTIÞ ¯ÄmŽ»'bCD}ÂÝy©@iδµjÒþ$o%½†³ößbôù paà). ,kÏ¥?Ð8Òd¾Ë¦aë­vå˜ê¨Æ@ Gy¦Þ§J”¥¾úÁÃ?›_rzîÉM© ‘µ }çÌ'رíª&ÓÑqõ3%ú×J¯tú”¡bG¦´¬Ò×*YP3¢¹ Z)s¹] ô—K7Ùiq§é‹3ê/ôÎJ‡“j u’åÒÇmÔNšÖ‹*•§5ÍÚPffXk¹%kèõÇã>2íñ'.‘;eѤÊa ÛTOD—O~ÿ“™¿ú­|²-kuÒeiJ­ˆxaÚ\àš¬Ö¼™ÀÀdAfÒ•yk"ª,µº 1¢>pIÒÞ”—2¦Ã•ð–¨ÒˆŽ¼O³1ª+ª;å`Úuøí¤2~ÀH „¿ˆº.êª@¦©fˆºˆŠ„…sùw2Óá§âBÊÙÈiöRG-wS÷Çý…s¢ÿ§¬¸Ësû¬¿Ñ™@jy$ÝÀ_Qs+ß)øI$ñïµNb¯µ[Ÿð`^cÜŤé:ó%Ö6G“‡ÿ¡¤~cþ¶Ìì¹<ÈtqgÄÇ"ÿò¢Í;"?,1x]Áß32ô~‹¿e-éˆD¸¤ù *„‡(ð±p¤”sñŽ;x“.6p‚¦¸OÎ 3.d:l Ÿ¥œWÃ4Á¿ã~öñ-DB¦Ñ£, ± -äy€“<Οæ?y5Œe¦‚ Ó´r;{µÖþÓ<æå{i>Ì¿üÿ…¡—PÂpØ«ŠÆÓü‡Èò›Î9jŠ›”I6„°ÝŸÒ~# @)a/û ^3ïçéf–MÜÁßsS}ýÑû|èW´«rn%MSh8Æb²<Ì+ÌpäÙDÀë̇҃åôw[ÌcL……»‰.ÑÎUó\Þ! Í$QªhcWñýlâ$Ãáé2ÁCìqš6å£ìe*[9‚î{Ãwù.âDèãVÐÉË<@ ©Ð\|YÀõœáH¸–,zÈφxøwÝsEkÛR–ÑÈëÀò\_y‚Ë9¨Œ‡q½[Ø^ð%þ *(ã×p:TáßÀ⸫ ~À,Ÿâö˜;jÄRžà¶QuY7òךòÞß&s™Ñ÷ñjö‹‚Eá]£+&ýú·Üþic ¿ó¢ö\¼§§°/N.°«HµøÇ¨¦ È1{hqäŸF~)úÆ’àú=ø ‘wo£ãÍ’ÅðÉ(ƒäSüY Ÿï||Ô½ÕV&•dœŒX—?§j‰»´Ú/SZüëœË˜äÖ ‹bšóºÛü]¹/ÖVÝødꛟÈtÌ>øDâÊ}ó¯]œKÞ‘s FßÜg¾1Z[²åßÖ¥·eGW f{×WŒ8:½¹æÌ¦Ô†øâK´Ìº;Дr"åé2ËtúËU·š;îñ¥–M«îv2¥2)svRr™ºr™~]¥" œMË”õ8=­zHmÁ’*ÙyeqûKå&t¯u¨W÷„D½ýëœØeE‘ˈ´˜ÙcMJ´Î\¿Ž)u8ca£ñ¤š…zÛ f”N«Î(ÑÜ«ãå ¦"t;]”KÔ™êÔ‹iË(Í‹e•®Ð;¨lVíR} kML)O)¯2ù¶×fÜvHO³Ñ´Šy%§Ä› 4ˆZ9§tVeA¤^n^yN¤ÜÌréjç,ˆÉ–˜3%U2m® [ªvÐx‡üBÇ{œÌ ""Q©KŽ;;¡=§,mš`ÜÒ‹<ó¦®Zy]úÑ'ƒÏ—Œ ŸÍ{4åë“&bº"F#ÇcZQOéYfó„œG Q—Wº£ZKÊ~Vµ™Ëè™ÐÎúpË;‘p¶ÔÚÇrÊ&|1ie9ÏF=H”ø1Xøwö¦íËØô\™OÕjœY•ú×èÈ=±èʧ"Ë#Á'n}èåšÖ¥´‡t¢ߎœs_·¹`=G)á0•q‚ ¸:-±{Ï„fЕôr€%ßâ!Æù7^f!Kùë0õU>Åv²Ÿ4ÂËÜËrþŒ…,¦‰ 8Æém 1xÃê4JžAúx‡ØÉ­œ¡“|†NÊÎ+bÅbõÁ.mÈqéy¼ò¢Fcçy÷ܶ€½añgé¡—WC4vo„Ò•ÖÑ0Ë Lò{èæ(gy»¾¾æW@˜b©ÔÊIó ïá³áܳër “ 3Hg2œu6ÐÂ660É=!¸p’J.g9ʹ‚oœ·”+ç:˜g Ól¢…*"æ&¸„3ÜO%gˆ„ª¿"–ø=,!ÁXA„»±+Ø@5u\® ‹ìÔ[ù:­Œðtx0º=d sÌÞæކ—!xˆÍ¡ç7í\6n7W†oàúCò“ˆ+¢f¯qn6ñÍtñ|1é™w¢ªÇ)cƒ ó-l/ø0otŠ=KSfù%•ˆx""œ›­7ªûˆ_âGÞ(¶ÿ¯ÑɇHs ¸Øç^$ýô—¥g·–þøêlgð7ÿVÿÅ‹ç­g%¯q—~Àrnsý"û¢ß½+òæ=º_µ)îïdÜ{4¶û}R'£jU|•»Š—#QÒ¯±:éÛ9½_äfÕ*ÙÕ;çX`QÔµ1=/õB„¼l½®q%yfzËqOÞ¼ö÷›|ýúä=Û²§' ‡ÓoÍiOÞÜç«×ÍZ×?²3X7tf+v5•5dÒW¾ÝõÝ÷Ô jM ©j ´—ÚX¡&*žÑR&²ÄñQwÆå'4̪×¼Ðà)kk,šWÕ§®_O¥¹róÝ; Œiê0Ð(¬r°Ó‰1õIËF $4f”UšËHEU¶˜©4ÙadDUƒd³‰Vó‚VÃCj–:4˜ˆ*4Ï‹õkª3>®".ºÐéR©fˆË/p&/Wn>/q\w…lÜñ¼²Væfæ•j¾Ü[û­=`ŬªUŽ—»t¥Ãåfë NjSÚMܾ„–Jùz?-5Þ(qÂ’9¥'õT™i­4™VÑ`<Ȉ.0ìÿåë>ÃìºËsÿv™Þ‹¦ÚH£Þ-ÉroàŽ Œ˜ N i@„B8”äo tÝ€  n²%[XVïÒŒ4šÞëž]×ÿÅhù眰^éÅ\Z³ö–~Ïzžç¾¿·òFN›ÎJ.7Ù!>¢üŒ%>ª}‚ˆÄ˜±¸ym†çÉ©Œ0Ô–MÜý­ÜO›ªÿ]Úš¬ßE½#¦}3ýê äéNé£y¾¬á”º©ˆ5Y™¨;=Ebú¦ F]•3”2˜åᨫxŠå…î‰JL‘õ(YžàÂrYŸ \“Õ™¯$êÒœÅQ7Z£æÅ”æÜ™Õ>kÄ‚Aïñèè›MÁª`Éq8ÌŸMìüCle9?ŠhŒh P‘óaÒœdœvºXÍëy˜]¡a Q«;¨æŒðAò)áÛ ³çïc3¿˜[ʲ*LÄ}”qÞÅÌòSÖòlÔ[™Ï·¸Õc1ǹ‚,Ý,`CX3°‹âs{h )­®yŒ¿ “ «ki¥“µäh iO‡Äó¯;œ›î̵¡—ñrHvǨ¤Ÿ®"Ÿq~þÀhˆ œ –ƒÄy–ËçÈÂàŠªªmçS-¢|û3”²ˆA~ÀçÏScQÉ¡ß6Ÿ;Æã&Ê©`u¨ñ¿g›9N}H¿‚'øÁyw¼†Ÿ…ˆ"^õç8OóMa£SGê¼€’{ØÆcÜJû襂Ü~Þ-N³™Þ°^6QÊÅ\GMÜTò °“ëy4¼cÿñúOá²ð-ìáìõ×ü24ýmã~Êy‚ï^ïå½Lðz6‡ÂËSÕ6ä99ë››P_HšûÃŒ•{yÁ5ç_Èql ¹s^·Õtëù¢¿îððy„û¹M<Î~¾Á×|ö"W×ðѬþŒ?;n<™4ƒ/ñNÎò7±z ((]‘{ëTîƒOÿÒã/Š\^¬áYŸûH $ÐÁÇæ¹-ª“ÖÞhÏšqgN{àŽ<'[4dm |›\Ä=1ó+”䙊[Jç”oOÛõ™Ó¥ôù¥G®ñ™ûŽêŸ8¼´þÏÿ¡ìµ§4,ˆY\ûÓ†þºŠ=kDôá.™^$*¦Óox¼\rÔ×O˜ÎÉM Š¥¦äu9/3ØîX—ò‰ ©*Ó ôL;pVÑ*+hw¬Þȸƒ Ñ~e…fKMv+=¤|ÚpL6OzBS·õ ñ¨ÒÓ®rðR/f5·¢ÖH± Q/ñj£…fÏjД/Ó¥ï U•ÆÆTVé´p¯u“*‡Ôi¬5'­4+Ve4¡hRYÌ!«ÓògUH*ÚœI‰=iýIk—œU>¦r•ƒ«»ÀžWlX¨³Y÷ˆ’ƒ–õ«O©¬M(ê³²Ôtƒ>æÏj-7±HGÖØ¤ñˆ`HÞ<ÝÆj®Ó=éHN´ÚÈi ¦T¬VS"wÖâYG+!¡,OyTEÆHŸéÓÅžé¶ ²ðÂâŠÈÚ½ëŠå,dKÎK•öÊÏù7®Ë¯ÕufLIJE¥Ñ¥fêͰ!â×5ê úD¸-R‘õ“BËZ\Èò;ú’’) £vS÷ >NÌùpÖ)’ Ëf-hŒP3/ë]æ®=¬þ±á¬=|Ðz5eýð ‡^au¹ªb›çÖç#9'x–¯DÔÅ\A„³\H |Ó!Êv®#Ù( ,äß ¥ÂŸâp¨Ãº5œ¾<Ê'CEñɱ9+3|2â51ã‚ІôªÔð~òy‚ó4O‡-àèy ”vîµß]áú?Áó¡xíÿÈÓj%'Îã$œŸ ´Ÿa‡µccxø¯=ï\=˶ÐUv€Ãaîî«×Jñ¼ÖwW%ÿÀr½¡î|+õô†hÂTˆºx/«8Ì­ì"ÊL°‘>>B!`_¨Í› “ä:æ“ÏÓ¡Le .à%ê©aœ7óKR\‹aÖçdè3¸š\˜ýØ~¾ãDè Nü†B|Æ:¸Z>E×Nó9úøÆø£á>p"œù`KØ›„ôûXèês›÷‡÷ÓÃÝáêõ$Çù9£¼HƒÜÂXÆ ¬å'äR^Ÿu88‡f†X IDATýßò.+8IŠ yƒìãgtåÏxœ'ÂUÔÑÇ&¾g¢ÙX!¿Éóܳ1#õop3ƒÔêkt{·;:s½5ë‰xö¶à¾ýé/oä0ï{Sà,d€7òCéÓÔ»*¢¯Í‡n\ä¾b5&ž zô=)sÏ·ù§œ­19ö4ªœ2›òùœfgeNCÊȬYíŒè®ôʘΌm9ñþ¨ÛØÚjˤƒk>Ö¸t}þ7îI¤KÚe‡ªÞ™{ëÙE»VŒŒ\”»ê¹…ÉÒªg/×\jmÙØØÔëÎ|-ý¿ŸÏ½õî‘™¿©²eÄ%mÆÛôŒ˜WobÖü´Â´È˜m³dLñ/º BÑ5&FT3^¬ Çúañ¨X“Êã4вЙ'¬ÐS§¼\¢R´ÔL«³ EÅRQÑVŸWZ//":¥¨Ôô|]Ë?«µUjDC¥ñEÝæWš\âDŸ¦y†{Ì?nñIu-†FU«ŒwJ,ÝhOF¼WÃ~KÆÍÒòŠ‘¨eÅ2…Rõ†R JÌdäí÷õjÍqyO¸t\kRq±Ä|]e¦êŒÖH¾`–Å8•UyÆüÉfƒer–ލÏ*^¦»TŠ¢^-3Š¢ºÒ•*KŒ÷ªëÕ˜ÒÑnlŸKòec’Cz2êÕ iT9íô¢Ú¡þ"ó7wŒÍ.ŸP3[æsuÞ9¬mTSàÂŒ¡Œ‘¤lÎLIJrÏëŸpÙ¬òŒ.6ÍêÉúPž;³¾Ï¾¨§¿ÈÚšÐ=wøÞ^ìàRÙZu%üe<q]Ìæœˆ{gÎcã¿ÊF]+þ¢j¿Üøl¡±9zB-žó–iŸz·ôš´ÅvÒA”Q^ËÎyÛÙË“Œ†äÖ3œ ¥['y ϱ‡+x;—åanr.õÇ r†£ü'1°†—8ÄS pI‘à]ìä5줉n¥,¢0jpŽ{÷Ëú~GxYŠy–cLÍAÃ4Ålˆ¦cŸ…9´¸ŽÝ\B" ‚¿—±pl¸ŒÅ¼f5L†µê½áóVös+{{÷}€q.e†S¡fm”g8ÆQÍux§8@–†ªª2bød"ñSfC‚íœ4îÕ ß{èçâ°ÜÊwø-E#Î3LÐ"å/åe:ØN–t胛æ0ÍŒŸW+Ȳ“m<Ä1&ØÇRÒìäƒü&\Gåxæ¯ÜÃb^Œº)¢)°™!R\¦:0Á1x.¤"màëìâÞÿ!Íu,`QÉ<'ÜXî±ÞÎþp'9gœ*bWr”kÂP’>^!͵œŽ{CîGrnõZêÌu„-\(à†d²8î¶@†¥%åôòßä(‹ù"ǹ‡.Ž“Œûçœ# ±†Cl¦!¢‹[¹=g” 0ø…Ü’õWùÆUÞýßîÚ§aM.ûx¤-ÏOÄýMÔw2NòW<úÒ®å2óÂ"ûž3^¿¢]ádô_ÚƒwõF?ªïøÀԵɼí[µä”x{ .brÜ¢˜u9°=â~jÑœê˜M9=¥² ß™Õ8S•SX(Ö¬9#Ýj`ÚÏÊV¿3hÊð·™ìýiS—WJÇ=Qa}J$#6Ïôˆ Õñi±rÇ-«62!Õät'¬ÏUÓ¥ñŒÅ}ª¶:\i,¥ +>®>©éŒ– ™y†ÎhŽHJOНq¤Üd —iÒsÆ¢y&{4›i“«jÖ“'Óª+*ȉ&E³¢µÆ~çâSÚŠLÍ×}Äò厜V–5[ ¤ÔT¯ÆÉ9$ÇjèV“Ó3¬¹ÃòE:ç;“'=¤v¡ÎuW=«&"^ uTe•±½ùeóT>¡±Y&)Jþ„©c¢£–›ª2¹ÄÙ3ªGU1Ñ Û§6_nÌ e*'4·hŠˆÒ›ô¶fuqóŠMŸVP"Ù¨|@¼BzÒ¯rï9Tv|ÁLA2èúy«5 žðw…žÍ:‘³ AjB~à±Ë£.Ï:=îàŒK3†Ë<:c]R_ÆŽJ[Ónl,Ö—¶>a9/D¼\¬1gsN¤D]ÚÅ…:¿ÎjŽØRäâ¨Ú2™”ÚÜ9…Û 1wó>éK¯ >Òýôg‚GºèŽZAmÜûŠ}7¥ž­œ …±¹•GTM Êca y7›¹„<ÏV”Xš§ ­€½K8úøïæPˆÛÊð¦¹Æ90¨äa0Ænæñ]┆Á)ÞNšßPÀÚÀ'YÂÓ<Æ›ÙÅNN³„íh§þ%óè5ÝÌ<Ä;2nN{…íüž³$Xņˆ7ž£Ô½j|Ê¿.¤%PÎv¿_èùzòS¦²žŽú،޴Og rcÄHàÇôJcV.b6çWÌL¹z½Ó=EÝõƘ×ä Gç<±)i~~ÿ¼Èd~êcÿa뒟ݘ1ØóÉäÚƒÙ?¬1¯+²q òÈ­…&ÕX 9¡2úüʼnìlŒ"âš L»2¡Dްº‹¤S*K刧,óH—A‹Ä:-ˆ)­0S&Ynjþ"‰QUhZÞ¸ø|=¥¦òe§•Ô韕߬ÿö Ós’~õYñQÕã›Nd×NŸœŸPV$9¢¦ÌT™Éj#q™œü¬‚¤ÂA•qA±é}¥¦ŽX^§{…#%$™-1“RÐæÔŒâ¨ Èl•HJY©éýñnÍUF_²à”ø£EUÇTw¨iud­Eê[MŒjK˯éмÞÉ@¤ZçkýáA×ç±TgVü¬‘ õv«Í *dedûef-‹kä@ÚÆÀô€ÞfEY™I¥iÓ&‹D£N¶*Î7é×Íqãn ¼–òRë ,Ni‹©Ëëª×Ê8ÍiV6Z0ëÓÕ®HZ±d©\¿¯Oû‹¨ª˜2Ò9‡" +[${5”˜è­ˆý©¯5ÿzõRÇ{5Ê5é‹“–רo»K魔ΈﳶA_áóŠ%^¶¥E÷Ú–¬t8)¯Su‰lBñ<ƒ/w:¥²HrPS‹³¥fJÅ'ÌÛêÅ^Mè º¨Ø¨šmvª°ä„å*Íöh**5³Ëú¨Â´ôbݧô-01a¼ZÙ¨¢6Õå&M%g|z¹…'IŠT«J9\-Ò/=bUÊVµ;Ö”¾2¿äõ»{þñç¹{$ï}Ľ/ëÚt¬ | p%y)ý9ޏ!m„1Mŧ½Èü¤/¤­(òÿkÑ·6ë¿h‹‰D\¨ËªË Q —ðõœs¾žói‹JE½=8ìûßѕы–ç’Ûr]ßá™ DxŠ;Rþž8ù6Û¹‘^ là®àE^à>~ ¾çà;{ÒÚÓ®äEF¸ÅÜÛ›+ù-ý´ñ^îW\¬fù4ÐÃ*¶‡Ìîƹ‘®pCÑÉM<Æz¹˜ang?]¼hpŽ‘=ÌM¼Èzò¸—}¡˜k›ÂȤ\Åk¨ õϯ*´ÛØÂµ¼ÈÔyŠÁWII*¸6ì«^UXÌœ‡H}Õ’uœÉ°vuíƒcÿÚ;Ãż–TÄÓqŸÏù9kèá9Þjß爖S\”;‡1~' ö„“ñïñžðû¿ÙM^G=¿ãÎÐißÀÍtðKò¨¤‹Ã<æi‡LɹÈÇwG|‡ÑÂ%\ÄÍ ¾ë= ŒøÄa?éó“~ò6;o–ر‰MÞñÓYI~™öÚ¨ò¸M8Ó«8gßð@Ü ó¼iZ;›¦ntÀ¢œ©@߸$ý#?޹&p?K›Õ‘Ïi™p*jYƒÙôЕ©ïìpòpôM¥™ßX5QhN´ˆm<}ä5efªÌ87{FK¹¢!¯ô¨)t¼ÝT·S*±¿ÌS­–Žk˜–m70£ú¨¦¥Î¤TÈßmy­‚É(Ef‘´¼IeæåÉæI¯·‡Ø ºQUû¬­P²Ò±1•'¥•UI¶;^VÚwâß¿ºÿß¾÷ w^øëŠüç¶_qøÌû™ùùß-™(Ö$vìøÛX¢`ÉO×·t\e…‰QUå&—8ù¨¢¥rƧ•æIo²;+¾Ý%Íú‰7é Dú5´9Uj*­`™ŽQ5Y± &Õ¥Vmw¬X¢P&¡ä¸öÚKyÒI]JzÉæ ½ùƇ´MŠæyi¾`VÑŒy#èÊ*îW_¨ªKcêAMÓ–*:ª7©=nyÒ¶V¹|ÍeJš W)žÖÚo_ƉfMµ³“gOoL<iîçÍ™Ÿ¼3øÉëc‰¼ÿõü_¿1;òÓjo-O¨ŽÙ–ñRÄTùY9ÕQõqͬϨ®Ô¿ÚâN5©¬ÊˆÉ<Ç÷ç|’dN1ýlâ鸪ծH;1ã!.áýE¢M RjÓF( ¦;ƒ­1Á„¡¦VqQ®agù&Û¹¾È VòöQÊ•ÛB—ëè!ÁŒ³Ú9¦{GÌ". ¬ „繂¡6øçAzÃÌÆ(Û9ÁD1ÆUt1Ã.2¬ Üs–¦Zná&. ”Ï‘á}ì ýLs”¿1¯øky„«ø/"\Ä·xi®ˆ¨%I’ANñòÿ+’qnÌ0ª æ®?ÿž,JÃÜÅ“á¹ú*®)N ”E”3C!7±Ä9D… Q@ŒÏWU½ü'¨¿M$ê¸>TtÄiå`¨¡HÓÏ3¬e˜(môGDè£VÆùR̶°+úDˆÞšƒ(ßÉ@Ø”T1Ä1ú¸žbÏq‚|.äµ ‡¯6Ls=_ W‚s~ìõņ"ó$´ÐÂUŒþ;8‡ˆÝLÏ…~²\hS‚7RÌ0m丆y¡3Z¸s5ϳ› þ…hÆÝÅíáƒ9IágCœþ~Ò9›È£Œª°—óh^ÁM!Úì·E‰ ñ®hâµÑD~4;Í–¸¦Àu“Æ2. ÎMG-‘uæˆßF|¡PsF– |hÚ'"vF(T7â F´Šgü*æÚb£)}5n:Ñc¸ZuM½NÌS?dd\.m¤|v]¦ç“ÅO\ŸÊ|7!¨›jy:²q¢ê‘«+œ™Ð6kɰ½%ÆëU Šä™®µ£ÓÆ ­ •Y‹ó-/1Ód ÕÐQKÚœ®1>¨¡ÜÔ å…âfº•ˆÎ*œË]¼Ä3gUÏ3Q ™'“PÔ ¿Üd™©:#£ª¦”–*o0¾Ì±~õ»ßÐ9šl¨úËWç§VK·¯ûùŠK¿»øä—(<ÞZ78ùì?=S>›«¼ý«Q3ǵ h.4;£dTõ¨ªÅ ¨WYcxfÃÑøxiA&7%Rq­ÁYÅ#Ê dÊM¦TëÖ0_w¥ñ)e9јܴҘl¦zý³Š $«Œh)7žl°·Ùè<ýCŠÖ+©4¾ÖáAí1ñi¥-ºô7êQ6.N^ ÈdÆñ .tfP6co…YófħUVÖ˜s:®8°¬Ü줪ag ¼œKT&–ÌOÎ&ê*·/i}vE~Wílê¶J#IÅ)‡ë䦌«i‘—ÔœÖYlI‘gf½sù2;vùmÎC5nI;gI½È¸#®#Îp-1ç¬ì×›ñ¥¸»¹ ðPÆîQϦÅYË3ùÛyÓöà»G¼ò …› 6ók*ØÎjÞÂõQ? ,â>Î„Š­%|…ëù&_fwÓZq‹ÙF›ö~G;£ƒQ^æ!ÍvN½µˆËù!»C£Õù¯Â;HÐÏ¥ °‘<–ÐÎqâ\ƒ|‰+ùuØÑA1s”ײ‡wò{’40Æ·¸œ~ªW5nq?Ë9Ê2*h!/4¼‡=S 5\À4S!íaŽîñ–r}ä¸%„çfþ¸Ô½þŸñÍqwç<ÎMåA‡=eŽ[9ÉåäñªªwÞ~÷Æ?Aµ˜ 7]B€w²—úÂÝ Ü@Gb®£‰5,e/“4QB'Õ!}¤ˆÔ1"šR´Ðš«+ˆòUÊYÀ)&)¤ŽŸ2Ìï(år†;§9lüÜwÐÍZvs ÎPÃÅ, ‘Vâ,¥ˆ…-QSŽ0OzÛ<½šÑ5n,‡[«%¡_áUö`«Bk÷…ü‹Â€œ0D?/°‚¥¼Ìjxÿ›CÜL#Kùhšó vPÇ+¬b ÑÂá˜ÛƒsfíwraÄÕQCƒìã6†ø=E´ñ ÂAðÜHp.+2Áª˜žŸÔÇ^3¯H,£Ò­¹«ÿAû+Úã6tÙösv¿¶ð+§c6”ù³¤ïΦc1G²þ3êÒÀsžªpaÊtÔÉ„ÆJëÇíÊ7¿Ô= ‰@OT{ .bmÔ@™K~Zè¯óuiLª*rQ¥îI[¦ü¨Ö…Sªg6ö&ïØaÛ‹SÛž³í`tÛptôhÛÐêa¿/Ò“&>î—Ñ–¹'£\›4š¯4+W:_e¡\ŸµTZÙ!/"NiL¤TrZl™SJûÕtkìT‹ õ®pê ¶¥úŠçJË‹Ë hœo`ž¡^MÇ,[å`¹É1UYñJcå&KL'›‰ËdÅ ,~ÿ7¶ìODj§Ulp ÚèéÌ’E½³Ç¾ü…ìîù“ß{÷æWÖäÏ3VfrTÕ2Çê dä *Ö8ß™¾KN Þ²#¶n÷ä‚Ñ®ý¯[ïàI-–šhÓUjºÜĬ‚ÃGÅKM«,”˜”_k|XIŒùŽîWOy¿²EΫJ‰ÅE:,Êé(U>¨.O¦ÚH¯ÆaÕ³òsŠ ŒvÓaA¥lZÐ+š±¯Ðþ&ñ>‹R]æ÷CZFRYZìÍ*0Ð`wFQß›æ:› ÓGÊe2ŠL'U¤¥·îxý냩q½I#9ŽiËèJ[1"ÈÊD,ËH%-(6œq´_w Ÿ†¤™¬ü¬š){Ë-ŒZœV̈ڈ:v2Ìd¡Ë#ú²*Ùµ:°œZNÓq¶ØÇ‚§û²±ýÖ\®½Ï†Œî¥Æ¿É œf#E½30ŠË.çs ŒÓ¦`äègš»ˆ„Ù¸ƒ\ÎU1WQóî@„&ÙI1U¡ª«‰‡¸6d£†¦0’£š÷çQRÄ ñ‹ØÇQz kXñp¶¶„×±5l¥pÎ3œ YB·3K…9 áÆçen¢ž 9Aéy!¼pÞXoQV†'s)YãçÞ71|ÞËýœxmu(&Ø—ó8 4r‚Õìc7KXÍo¸,ôѪª:ó'¤5‰D½!è!Ëi. Œ)iá ¬×tO#°—RŠ)d/§éâZ~A9ùL2Å;Γ¼ 5—G©cœ2òè )±s뢹ò Œ3ÆgX²&¯f>}\Æ‹í ÃÄ:¸“60ŸÆ0 `ÎL°>¢'¢/p–Óðס3÷ìÿÕ‡±Ð]”‡÷^C‚M!e. 9uÜÌ/˜å6ÐE”Z¾YnS`Ö$¯c9įˆ…ÏØÂ÷iæu`3…äæþ¨µQ÷ò¸€5|#0AW³“ Ô…$‘ ahÛêP{K”ˆŸ\™”á·¤y1jỈôï‹¿ñ——ûñ{t¯QÛ#±Ôl²óµ1ÓåšrR³ŽÒÀ®ó–Yk"êȞͳ1í¡ˆÖ¤–¬…)%iÍcÞõ!ât –PDK„¨ÜŒ¶ÀŽz ݆#¶23Ö+ößþRMwyi¢¦8Ñ<›X,QyÍðÌ]¿k{¸º×åQû+ÔÎ* ZÒÁÆ3 lŽ«/10è?âš²rqñZ}³úW«—Œˆ)i6Ü¥v±³'4Q”Pži6²Ü±2“ Å9³G5ls`LU¿ŠbSíNž°¤ÒØóçêÕS ¦X"&ÛÿïuüÙïŽÝz¤óÖ}C·íxæ· IDAT¾P} %9Ú0¥,-*8þ¶_œTPg %¿@r Õš\x¬ iüÅóÃjKÌL(oÐ7hÞJ{†•·êRÕ§uÞÖGw}å›-ß»r(Ù²û ßkoÜÓ/jÓU yL{¾tÑ´’N¨Ï‰´$ö|ñ[“·>sâÖ}y·>tôÖƒAõà†=%IyëèV6&¹Àd·–ýµóu%£Â8AÜHD<£lL9¹Á"] ÆZœ2oÆ[õGô{,­>"¨IÈ-Ó›02%è±.+?-5vç™\Ó§r·t¿¹'°¦DE·üaýISÁÛ‰ßR»såŒ@ „Š&[Bg ?Йˆ‘œ1©*ëRîÊZËúÀiòi ǵdLfõY[¢0)UmyÒÙÀ—Óz36Dµäd_f]£9ËEgS¦3 =·ØoÖêžPÛè–߸!å‰70ÈtÆùËÙÀC†gà^ &úÙÂ#ÌP&ûÔÒ¸'â+j*BÑ߆ˆƒê𘞄¾‡§ˆcœ[èà"ÖÒÀi®áaº¹ƒ‘0J*rÞŠ}.º~îhZÄJ^àdÈqõ+ “ó°‡RfI±…ﲚ.ã‡tq4¬Uw±>$'%f …ÐWð[ÂNtîx¬ ÷>+©b˜8+¹4<ɱ’"v‡É½s ä×q‚+BnÃûªª:ÿ3ðáD"Á] ò.vÓÀí,e/„/Ã\Æ#á|„§8Àé°;Ér’iFéâ&^ › ÓÃ"ÞBCs=y¡$o]<3CŒ÷1Ì.Ò¤XC‹yš“¡/ºäñ°ã¤s(£9²ošÿ¢ƒü˜½Á¹¯í®°åQÍØGœ8/Íëü?'èa?{ÙÇZ:¸Ÿ‡9Ë.úø;{_£+'=Äër¢YƒM¤èb—ño´ðFV°Š‹iã³tp#Oñ¹2p-ÿÄQjù!wò#:âÞhå c‡é`+{¹€®å®$ ™Ÿñë mqCiOö¤qw§®ñûͲå†_±§Åž­y™×ä|&뎴ʄ¦¸krâ1˜‘Èz$jEÎãþ*éÒÀ‚ˆùMU23þŠL̪•FÔÌS=©%æÚˆªàœ(¨,⪜Θ)Ó9׿DSóÖ¬Û=¼¦/÷¯JìY]³§}zÏeö”eO ¦\œ|ø ³ »K~y« ÈÊ‚–©'g¹®ÞX­Éyý¶ÖŠ´j4¼×Ú‹FÔm¶ç –‘e½>? /°1œ§?©¼Þ@F<*7¬nHiŸE§”×,—T_m4_*-¿EwZy¡Há­?zê{ß^ñÛ–ã¿ú«+vÍTìZÖ¸«åäǾüîgf´¦TUûéÔîÏü¤âËw5è«0‘O)(œ‰¥æü‡G×m¯ZÓ3ò²µ³‚™õ7zü¸e“*‹$«M’}é²áŒÒ¥ßº¤ùå†êø¾Ï~ÿt×%¤gwXœ–žTÔd°@*.Ó§¡WÓñ}¬ó–ÝÍÿ~KÝ®å«v•7NÔœúì÷;ß¼«xϪ¶žÙiåãçë;a鈊ÅúJÌ›é2ÿU eq…ù¢YñFƒãªô6ÊŠWH+´à´Ê…“–´È›Ñ´Ò±ƒÎŒ)³¤Hé´ØGºÔfßù”箋üåã%_~‰Ù<ªÄ޵^vbô_¿>ï·UX8dTSTM`ɬ©uÉ4eª¨Ísù”žŒ¥i©:¥ªbj"Vç åGSþ=kcž«2NgädÕfÏ>#ô±>nu­mÓVeü(å+9·^â.Úùg¢Ãì9t<£gÖO+/³£G9Èí<À ¬ã%Ò¡(®‹ò#zy-Wrs˜a?É7éáס5ðo!¾o.ù÷¡Ð¢3È¥ÜÅ$¿&Â}L…/ëC¡Kõ)†ÃI+ x4—]ÊÅ|…^ÚÂð÷œ ÙÖ¯&wÜöF‹¸SŒR¢½¯àIú˜äÃ\–¥9,SÀa É«YN³ôQÎRv3Ò„É^s¥+ÉDH ï Yì÷²;T·ÍE$6sÇÃlɹ8Ç骪»ýî{ÿ§rõËD">äSDB0Ä0…Œ[à缇TÓ̦XRïcëBÆõ|ŠËY–ýa^`˜¦Š¯qˆ8A7{Buâßñ¼>|1^¡}¼z~Ê>jFßÎJæñ¦…‹ù&qîâI®ã0ù¬ =Õ;Ãáòùןÿ1ÃQ8Økrç&¹—pÏò»×þ&näã¼Äšœ†)_e-/çd—QÍ ¿Œx†¯3KÀŽˆyÞ”óqnä­œæ›DÃYö\BÁÍŽ{}à-Ρhò/¶SÃy˜«¸’µQQŸ ,ã+\ÍK!Àp7©Œ‹Ó>x³ü7û‹—"‘güû‚Hæq–Ôj,uÙ´Êù$é ¥1GSm1rö\ðqKV*Ï=UÊ“²9³åŒG,(žòñœ¹8jý¬ÂZÓ}2y~èÍ™fYždÖY“9¹´-D¡f¼.=û¹Ï·Þû©DnG‹D§æ©mò`Þè¦êž¥‹¾»e¤ðÔÔSžX52Y1•¬ô›Ëó'ëêMq¬Rs¿t“ø)mHB¦XnPÝ!}…þnÈ›k4Y;iEžé N.Ô]læóKµ†z´$Ô^hW¡h™L§ÅE9‘ÓZ7{ùeÔEÇßðÀC[j6ÝûžÂ½«çuçWö·ôäÊzÊ—?¼¼nÇòŸûåøö%§*J¶>Þv|ðâÍvÕà þÏ猱‡}\˼ð­q'¿$Æl¸°ÿ#ÎÍh«ø-7ñ¸‰o°«èâ"泆BÖÌ!ŠIñ £4‡ØõÃü‚SÄè#ÇWù{YÊdèÁ¾‰c ½Í­·›ÿ΋aܳó-t¥ÖóY.çlžåŸ¹uìå6qŒíL“heðm6ŠIÞän¿…qõûÝU:|t&wAòÙÀÇx#ì¨Ì‘fካÀ9ZÁîššÈ{S©ôs’>ζÐw Gz9›˜f §ñn~Þ“¡Cq'ó,G¨ç8'ø4Or»¨¦2ŒvßGž dîåÈs#ÔS"tq3‡8Æ œËë! #I=ÜÌ><ÉØx2?>²ˆyü‚>Ä+áZ®Àרcâ?ͪØðZ–p+¯aWð,ƒ´sõØø$Çù"m17RÏE|ŸÏðÛØZfq‘ÆŒf*ø¹‹Çø2Õ½ïò[ËŽE¾órì'_vOÇ|>ïG3§¬gIþlÖù³æÆ4ö¨ÎŸúâÕpZÎHʱ dÖSdy-ï•Âýž(27";©8j`®+gÕdTFç|‹[ GärÍÚˆªŠ´çËŸÈÞºköÇç%ülÆú”»æ¨mÔ9¥~Pg[î—É}W÷õVç®ÿmðõÿåý?ˆöŒ.ؼ,!˜4[£ú¤¹CЦÅòƦü(fQTQÚ¢ëÔÆ$êL,q0¯²B®Dæ˜y3g{kF¢Q§Ãy±#•&bòMúf×—)‘;çÈàÙ‡^;Û5_¸¤-7ôJpÞ¥žëÖ!&WœË•”4ö—ÞýËŠK^xî¦ÞsšŸV:¤®ÎÐ"ÝMúZ‚¾¡«¶Fö/Ž™_'Qme©™½Z3*Œ&Í^âù­Ç†×õ.=üW¨©_²«¨)3’ËEælœwƽgWÜûÞKï]²àÞ+Ûî½îµívý¯ÕDK×=°ôº{:õÝßì]‘++*+ÎOVuGFsõ{®:Û¿0{dñ¸ªAõú»4Ï5S^op›Ä\CqÑQmiUÅtY9nÓ´ubÞœ4TÃŒxF¦ÃØ L‰_N8/§,í͘¹Ç4‰™(72nÿž\t°4yýÖÌÐ’ÈksÆ¿ö@Ý+«+Go»ã·ÉŽWâw~&˜;n_ÜŸ*•.siÚk W—‰ÄŒ×Kw[=ëéJ+­›ñ`­[KÅg”T»ÖCcnˆº%ÐJ5—ç¼™³µÆ@F6kK\¬Ü;ÓÎlsɸñˆHΈ%|£È ´v˜?dàѨky+V2“¿k£ù_m»›—IßÃÞärvp"4PB5¯ñ·ÓD/ë9ÀA~•ô’àw\ÎQZœJo`9;¸fFèÁK…§ÜEb’?áñœ›'uV`>×3¿a–&öóÁ°ûâ™°Z/ †·°I2—†„ï¦"L‹æ$‡ˆ¦ò'ifQ!æ÷©ü)3Ú﯂ûú…oüÿ¼ª˜ é[˜Ç;ée”V…òXœN†ÙËxMÍu·¿÷²ÿj\¤Róé`Œ&a>C,¡Ga‰‚žÃJžã0—²‚Ò0>£2¤Çw„e¸=a/T¡8y‚¼ôï+“{ß¶ +øþ{Fý wÊ!]h) ‘«ÂÒè7iÑú?á¿ñópàof ³,ãc!kcöm,¨2.aš&¹’$'9ƒQF ¤W9ª¢Ö°‰ >ªØ×g-}”s>×ÒÃ1®`/Pà9ÝäCçëôE}3ð×,á&¢âi:òîa;çûl ô1Èùl&ÆùœÇ²Y‡2æ„‘ÆÅtùP`;¯rˆ¼ÛÿøzdàŠÈWþ$Ð’×Ã=•»XÏõ¼”kÉ:5ÅïBæX%{/Ïx>k'F,ŽX¸0ïÉ"×ål*¶$¢#ckÌ™1’­³¢å:fìfa¥¥%jó~Ze?wÏŸ?´÷­}¶1*_òÐý=ëF¿òÍž³N´?»8:SrdÝHz^oã ËÊGŠ™Û¨?&_fä˜Ò˜º5Åj2*â²1™JSsýšb^ ÄrzŠ,.¦No^q•ôq ò)ñž˜HB¤FIÔ÷Ç-.s¢IP¬«Ôª„e Û®*{躥×ÝÛ½`,?÷£3ëÇÖU»)þ+gMÇÌÍω¦œ–Ê;’×–ò|LkʆI s^¨ÐV¡hÂÚ•ý¶æÍÔÚ–òî¬C ³åšŸq,iaÄ9³L{ŠŸå,ÏØK0* ôÑu s£.,fhÄ ?áDpÕIïy5þ?,ñãeeô±.bŠeÌã‹ÄÈÅ|:ptì.|y׆[œ!¶4ËjŠhà Îà¥ð{ýÓpõÐäðz9 ¼ÍiLò÷üˆ ÆNÐÁ ù¨s;ØÎò4…{£ 6:e#fOX‚1ËÒÐg°%,/.€xöó[æ’ã ËÙçð} 0M5u<ÆèšU˜CS¸èzûuÑŠ!×Pý¶Üê0[Bøê¹ì§³¡“…Öˆšš5·¿wí5®~œJÍ Ý[C¹¶˜»y–>æò†!Ü9dé%IŠ&Êè'B)Cô±Œ×ùŒ‘ Áñ.ö3ÍRZØΪUdè⋌òßèb˜[9@û¹‘4OPÊ^v°7ä?³Ÿ¢oü¯‡ØÃ«éåc\NI8Ø~}˜jNr;oRË2Þ ŒQráÑóDx«‰Â¡5Ì;ײÂ)dr–Ôs¿áMVÓÄÖÓÉFÞàJx/GÙÍéa¹IEpÊëy›™ <Á¦@+œ—ò0[)Žù4kù:uaGçÃa»fux8+ÔDÔ¦x*ü _qïA6ëî$ø&×"ðÞICL{àKQûs6ÖY¿Ý·Ñ“v¢•2–WZÑšuE±EI3ÐH&²º³N'Q®®S÷Œ-)_Ÿ‹8mÖqæEµMªˆ[H%´GÔåkó7ÿ¶ö¾÷7(›QVÚØ=ù'÷Œ5ïÈ–¦N¬˜ñ`Ô5AN¼èµ'óo|9©)«lÜÿµ®Xu±|BI›þíeRŽôê™#²ßò%Qñ.mãòåÒQSçÚv@Kµ©A•)Ñ%zˤŠÌh$rRËÁo~÷ð‡ŸMuާ·_¾èÑKžXXaâˆùsOH•šiÖ“k0Ø` Øl‹“íÇb3ýsKD÷YR*¡Úèa †ÔO\ÛýÅ­{ü¼üTeá=߸ïϽïðµ£_þÖôÙ;¦{:qÚ|'—ØW&Õp"±é¯Nþúöv9ñŒ’éénm*æ;Ÿ)êõÆ¡5=©lÅȉ5sô”÷Om>7û¡F.y«å¡ 7½s°)7XñôùÃêÑau]j2*³Z;ŸV•oÖwT´Üw“ÖL¨(“îqшš¼²²Sî­qa^ô¤ª¼â6;S–U›j70¥¨OUÔ‚ˆ§Ë%Ê45›UˆF¶¬ï[z(9Yk*ÇcUß½)È·ÎX—·w…ê^eQirQ¥\·#P³©Úวk\2hç„+kU÷«Î'3áÇ9/2w[D>PžÒ\b"*2.Ê(ó#Å­¼øWE<ueÞ¦˜Ñ„¯’Jü‹[ûE#ö]¢«ÕÃ[Iòúè¤i†¸’§Âê‰".ü‚„!œ•´†`„ÍÜBµl ­ëbŒkh¦ú¹‰ß°ŠZ:è 1uC\Åcì ·SÄCXÑÅì 4Pε,çMb ÑÍÑpõU˜wàƒ¼ƒûBQ®Ð{w‚­ ‡¤BÁñrŽáÎp5U`#C9ΧŸ‹þý¢¨€jüOãª?J$ìpÊRÆ{x™1få}¤™›x8\¥øFŸåÎ%å”÷t9%<ËØPíÖ˜ÞYoðEê9›iÐÂ%¼Xàþ:ÿž +[ ƒäçaäíj®e#BMà{a'Íy,ã£Ls”mì$à}Tó*x7‹ÙÆþ‚¿§œ[ØÂAºx‘m\Ê<ÍföòIž¦ƒ).g+5œÃ†YOç Ï$íZg -\SÐ 8Ê -<õ×Qg~XÁ½ÜFOøÅ‰F_úX¼˜,ò©2—VÚ3m#ï¡“Á¨÷dmÉÇ6ØôŠyÝþvÆ¡H·³³s:ò¾Ä޼䉻(¯>®8ïó…ÜtÎì¨ãcjÓÎ͉gì™çÙV­=dVUÎü¼¦ŒX$û™æg¾:2Ö:¡ªÕH×Ï?2ó—©Ø+ŸÿÓ'2{WÏ真UÒÎŒ©>KO¥H‘ÎJe&»ÔŽ(ëµ?oQJbÌÜI£ZËÍœcs\¾IßµU‚"±¹NÔÒX*X ¿ÒDÒT½¡…‘ƒ‹â{wýÝýÛ>¾é†;ï¨}~õĦ=“5Iõ«ìØgɇš7¬î°Î3lÐ8¦zFiÁ¹0¤nDÍ »æ:~T}L¶ÅÀn+æ9Vmtø=O5=vöèTÛèÝO¦J£Ktîà†;Îy¬áÀÂè‘ÿyÿ%¿®J·í·xRreÏèè®kÚGÒµF[u'ÌÔ.•NšÂúƒž1±wøœý"‹Nîÿ¯ŸJg:§DfõÌU6hxF>ª?ï©@u ¹Dm-ãF¦ÝÍŠ´Ç|)¯.£(¢4o?YvñébגּmÔ£—ä$g})ﲜqWÖR5Ù"7&bÎË;Á}<±+¦9ïgyôï}¾Äs—za½­ëì¿Û ‹ÛˆÓËa†¨¦¤pã¦àTÕQ 9®àw|„òÈw3Çiyž»B¬à:ÞÃP½ ™ål¥—«ÙÈ5á›z9#ü{x!¬m AŸâߨl2¬¥’~þ'“§+äGfŠ}ĸ 9“ía‚‘ð'<ž¨ÖñXX‹ü]6Ó„v‰¢áö¤0Š"áON í ásräm.ŒÿpMð§Ê†‚Ÿ[`2 ±Wjjÿ@LøùTªŠÓèáM¢ÜÆ[Lq;9I%ŸfaÝb#Æ[$ø£|Š2Þ x/ðk~ê"û%Ô0À]¼Î%ÜVu¼*„iÎ…¥Ú >ÆIº¨å0]ŒðA¶†hýËøŸŸ1:ë5¦ØÍfŽpˆy’&¶s;‡˜ ©óo„¦—Bô½0¤iÜê³WQË9Ï“áø>šØÁåà¯ð9ÖFle”1¹‚âAÆig~ÎïØÃ þ˜Ã|+ÙZˆùÓ¼g –¡¼p¯ÓÁ.æ¨fwˆVnä§œøDà_bw‡ý¤Ç3wLù~USÖ¤eV;Ò®·_[«D«¾jã%¦Ï¶{#Kì?¬½W]Ÿ¶ ³ŠŠd+M©_ì@Zé ..•>Q\Òs÷+¿ûáCÑïøªÞÖ28[5‘¯´<ª£Ìô1¹Jå¦k '¤öYRn*›ÖÎ ºÕ•—]eÇK.¨5¹[G·ùë W+ù?·¹ÿKuÑÁDˑ˾½*5ØÏ)¬¾è·¥Cg©zuÕ`ÿŠ”De˾W¿ýPÅïÎ)™H´é>¡£Çœq•‡unµ~C ©IÉ‹=Ÿ}éâÑ¿¼7)‰í^’ÑxTyb<ºoâⱿùÆ’ßÍk{zE¿Æ+¼<)ˆ¶ë^ã­>Íã’TWV¤t#cb³®?ní*o˜nq¼L¤ÂìŒú"ãØÜ¥=*?ªªTq‹Þ~‰1µåÆ£â3&2$•ÑËÒˆòŒ'f?™9ãõºé–üë—åì/ñµÀYcꧤç¨s(月sãú2¾;mO‰Od%²Šr.É Ì4JÛõLÔ;Ë8žs|ÆsÅ’Yqó²Òyÿwm‰ö";Yšóç|+殼/q$*Á¹\[buVSÄéq-Áçý›–ØàÍÑTŠúÀϨæIÞ`†!¾Ï;ˆó>¶ÑîŸH#œKž§9ÉÙÜÈ^6r[H¤û$[é {èo!ëwá4ó$ÜÁýaÛß{yGéçWÙý¼Ä ìàŠBòE”ëÃ<å/ðǹ‹ÙÍ…ì§‚Z~ÌTÈú,/„4ŸIîäŸ9(ìc†R>ÉÉñqv³»È÷ ¨On¤˜bŠ8‹\ŠXÝá4šBòÿÅ6ëöçS†º®b3in­©9ðŒìϧR}ìg g±‡m,¤’çÈSCŠ~ºÂg÷J>ÀÞ"º'ñ;š) mÿáªgŒ›ÙYñ"9æ0Egø?c[(åF&™ ¡´cfY†xž*ò”³‘°$YÌ^® ïðõ]üÖÛΤoçNG) ¡±òݼΠVÐOŽ•œà<§L»8“Ú:¼›³y1ü4ª#^j N‘TžaW2Á(ŸcNÄ–ˆm|Š—¹šÏE-´‘$Êo©Ê{ ‹ ª˜âËTåQâÄYÃßóF™ µÍÎg 7P–Ù¼Á;"ÃÙèà¹Áíßv¨Ùø“¼˜,wM`gÎmì`•o>îž„ÁÛ|ä^‡ã»œ-ô~`{à9ÊK]Zæµ´&£&ªÝÕ•˜Õ[¬ºB6£¿Y²Vï„T©þ@”úzA ¬ÏX—g¯x"ˆ.Iýf¥yy?›]–/šé­9º2wóöå[‡úW9^¤¢KÃ|çE5•Ø™6Z¡ªV¶[Û¸óàÏ1 IDATÒi â ÇH› ÔNINªH:^îd…X‚é@4i¤Gë ÆYÅ¥Òíº&¯ÙøúE[’•‘Kß÷܃EqÙ­NQ;¡rµ·j¬²3'FäˆÎiåQA» Šd§” æë™VžV’VÒ§©Úh‹‘uMúŠe¦•µé^ÿTæË'ÿþý“’Múæ9a@Ãá›··mœ—ëoNÎÛÞ÷‘'¯¾¯ihÿ9u†º´«*53¢¶Âä"‡ÕžÔˆ ©+“Ê5 ïùö÷Jv/8mÿT³ü=¥ÑTCt`õ—oj††ï¾^Ê(+x™+ÀBÞÅ·Ã?°­¦¦ò87¦Rgr”n:éá æSÃA>¦ ¯! \†^äRh$à.^à,ª¹$¤³ÿ—H)§¶2Ì£ž ÐÁ(u s9Õì Ååìb•N=FgYÉ:XMOèÒ>+æ]ÁÿK ßÂ?†i°Ea<W„bÚR¦äºÈs˜vš “ H1Ÿ.®¢’-l¡˜µ`EX@õÛßG²Ã«“«ÇCEø2Ê8Æutò=bQçÇ|,p_Î8±6ä\¾’D>Ãê¨|Xã²”(¿a,$4¯%É›¼Yh]‹žšv±QëGYB–g™7‚]Cò£n¼ù°ÔcsL_ÞÓŽ¦ýcVœxLu¥á¼±´XÒФUE&2îPBË“Ófg¾÷tì³Ô1uF¹ÖÀ3Q·eö–×~é©Öoºù…†Kúû×”ˆ%šT:­¬ÚȄ٩bÕU¦“¦fL¥EKýËQ ׯßcÙ ûÛ´©hs¢Hi­á2©¤É–ÇçØ”VZjæÐ-Û߸÷W¿Z¾âŸ.ŸPѬoZy^´Ñ@\nJy^´Øì˜ê!õQÁ¬â2Óq¹˜\FÉ<Ç4–›T_k8iªÖÈ€†A ;¬nÕ}\G©™v]Òï˜}é’yŽEõ§”´0.{òæW6.Œ–íþèóóžZ=¾å쌲A+íª0—=iN¹ééCŒª^l±Ù¬øœÍ­µýñ]õX۽וšéÓTœËÏ¡#/:¦ú°ÎR3StêšQzHSÔ`«ÉI‰j¹)å-z»µFÃjç:zÜœbË'T,–ÖNP+?">¤8©rPÇI‰s*•NKDE"‚1¥ÍII*ޝÐ×çw)×E]¼ï…ÄÑ%CÝ¥EâQåã^Ž© ¬ˆXµ0ïxÔp KiÚ ËbgôG]·Žæ¼ zQ.g_øYhô˜â§ÑÆ FBµÝÈѺ3ÞÍS¬àJvÐÍ;H“g7½\H gr F]ñÇ¥¡oå›H‘ä<~Å:>Â#´Næ¦ÙÍû NY./c–vnà×¥M|„Ÿ²€3¢§V1Í2–‡ª`GÄb;7ñͨѨ¹xèe:Çñbãþöuç–øÍ:æ0‡¯îð® W»á Ï\˜xâʤs3†#‰˜ {"ÎÈY]äP…â Û8Ìj³%°„x± ªWhžp´ßpàéSå“ÿ–’˜0‘V”ûØá†]벯µåò½f3š¦ÍQSœ½zóxHN=ß^•©*µ³DY¿¶vÃe‚Yí–Ì×=¢¡Á@ÍÃÒc¯0ü–t½þåúÉŽ[•ïÑUÔ­*®¨[k‹õ¶¥•4ëë¹aËÔ‚¾¥?fyÎsG$bÖ4/Ìš›ö óˆSŸó謚@µŠgר.58%XöB\Üìì)uQ»óÉ+^ë}{ýà~8íªÀ¯Ù‘±Öã.Z²ž2Šy˜‡‚UyÎ Û ÆÙÉN¦ùh!äq$p:2JïäYöðav°€«XÉ`]Éîð¹Šs¸…W ÙÖ˜?áÞ$`/Õäœðµø(‹ù gq+Ï„¶ƒ¡O¤àqXVÔÿþ·žäO‡ÊМàS$9BŒ['Ö ßÎo‰0Í-ô¼Íyq!;™CëÛˆ c -{So3ƨ§†-¤9I/á“_Xš•ª©yÿ°Zü8•:ú=.¥—»ùS|ïÑÎzN÷X…þ®$£¼Ê.q¯RIÛ見åœÅ¡pÄœjÿëçý¬å$·„’`áúW®d?oÐO’jîg;ÛØË¶p<”òÞA k‚ÿgJœ`=ϱ’%Ôø”ÛÊ·µ™ †ÙÇ™æ4vòaÞâP˜»†>N£Ž\Í“Ôs¥ž§Ã“ŸD4ùY`Sà_C·Ï(×2Ë>&ùçóöBq 9ëiÊéå5V1§àˆª‹9-oœ`kÌ]ï l¡š‹ØÇ>Nã¡Ô»‡Or)ϰ‰[y00¨âlæó:X?yCðr§±U>¼ÛKgÊýEyÅ¥g8í-­üzŸgNæ¬É8ÕãÜ@-§gÅ-JúëyŠºµs°Ø§¢çÕPs†ªGSNŽ{iÖü¼ÿUê´Ë)O«L+‰‰7[8~×óí¯µ ¼lÔpÊæX·@¾h²u4S1ûõÿåçkÓÛ[Ó¾™rۈɨÖUÍÑ›”*3¾Ëêf=¦Ì-¶å Œ”«,RuPóbÙ“Zã"-Æ{tµÉí·j™=%Ò,*‘éQÿò%c}éñÓ~¶L®"£¤ÁÀ †Ç»µ®²ó –>Åò»¬<©¥ÑÀµžÌ*ŠÉ¥•–ËŒªëÖ¶ÞÖ¤©~/YV*Z 7"µFjŒ«¬7X&U$»ÈÁrÓk¼Õ¤oLõ°Ú¥-y¾më=ÿVþé¯5¬hÓUnfRET~¡ƒèŒÄ¨ê¬`‡MFÛu]æÙV5Xä@N|².ýÆg7Æ6\ÚéÈl¤¹298žiXoëÍy‰:ã妇Ôm×9«²póê’&ãrÓÊú4,Ò}Ò¢µ^< ’Ô2âáË•vY2)Y$[iøˆýî™¶¾JY•Ù1‡f}«Ñú”L«í”>êSÓågäZ¿Þøã‰‰ñšoÝ›XÝitØd™3+-Nû“œ[+pxFk༤›*½9í!nmsá¸ò¼‹ˆòí2W´Y™uϬVÅ\›×º@ã´Ú¨Æ¼ ì‹YÉéH{rÚü]TqT} z†¼€_qcÌcAѵnûAôáeÑì',b<æ«]•äx…;y$ì ¹‚…Þdq(3>Íÿ“q~ÃW‘Y¹›ûØB [y™õôÓ—³+8¥Žþœbn{\&Içéð}í<Ÿ·—Cì§š |Ý40Ì%<\Žù£ˆ×ò¾ÎÇi ôÙ¸%p:_f†•qç­¡ŽN}D¼q9£ÜÅ2Åž Ö=´,ÖûÇÔç4YíðãU®ßaWÚ¹û#wï‰?ym]ä醈dÜuY“÷$+‹¬‰š,WÄñÀœ¬Û¦´¤ôq(ꎈâ¨hÞ¢~«²~’óbà£QóYhõJ­ÓŠE2Ö–kRž½ú™Ôþ%é#‹*U,¶¾Ëº.Ý“ù“m»V}ûöÜ0ka©ËbµmÔ·Ó9‡´ä%úý*i¶UpؼGòr­¦Î²ùe—¶9Ù¡?§è˜Ö ½L¤BM½‰µ3Mc‰u¯ÕŽgëg¦&Ô¬ÚRyòã›WôN?×}wN<#•©0“Ê5§ÛQ®o±£ é­•&j ªÝjq‹Á@ô€%ëmmÑÛ¯q\U¥l‡ãÛtG}šR¿rõ¤’ùºvY¹ÒÎYÅÏ»dZY±LÒd·¶í©Uó¸`Åä‰R锥Є™Fý½ZÆT'M¥•.p4ivLu¯úÝV h,7=­lVÑ+¿ûòÙ7ýùfgôij/?ôÚ3_<í§5¯\>%1¬jVéˆÚ¥ŽÔ¹À3“òoª^áxFºJ*«/ŸU{LK™Ê*ÎO«oÑ «°§Zû˜Vç”u«X戵͚qÖ|cù¦wU­ëúâÝþ¥gÇR³ÍíÒ-Jš¶yÒœœ·Z-èñx^P›ÓŸ¶iÚ-¥>”טM©ÜŸPsKBÕ”Cšãnk49.Ÿ7Ì×G,˹(¯/â}ì[ yÔçDŒå¬i¶nÊÕ’@‘@/F\1Ó¡95[’Ûû³à ‹ƒÇgø*oñ@`"°Ÿ•üŠ;y<$æ/C¸Q [Å:n kºYÅWòSæÒÇ?ò£Ðž>—ÓyˆjêC`Aá¬ä9È·˜ !pcEèÿ*çµÐk÷^ö±I®`55̰%T†Æè¢‰€ï3Í= ñ~Ë»yÃòF6|ÔÜI„nö 5üŒ­”r”¿ _¯¯ U5“|œ}Ôe–JÆC¡òŠÑt:çóp8¼sd¹â!¯à?eSl«©‰ý1ðùT*ÅB¦H²‘å%bVåN‘? œùiž˾ ÄßMa~ûgÒϲÐþ¾.¤Œ¼Ì ë™à^âÐÎørh^ÿ<¥tqïäuÎóøg…„‹3©INsy’ lå)~Ãe q”s©ã0s8‡6’¡ïm³ª ýM±ˆIZx‘ý,1…ŒB$äB°3H³›YJÅôÐÇü² XGÝx…8gr„Ó9ÂE¡ï³“ÝôÓÏ•´†øËe¼Âqîmñ« ièQUY‘‚½%bU…kgUäOÕçœÍ¯òîçóá‘´QâNGׯ‰¬38±ßÔVžwZ[ò†ÕÙïîËÇ3æòÕNaŸŒìïÌ9áÒRëOÆ}4rô Ö4zï´ÅœXÏEü2/–÷:•LÌL˜3ª—Ÿ²>ª©ÓLJñV^š=Ÿ 2gS“EㆿL[’ÐY&¿Jϰú™«ŸïÜ_?~dq©DF./6«½ÌÆtÎ(M©î4Pæp»Éó’jûd&m‹HV8?mþhN›`HqR¾CWÆð¸9Y‘}VF¥rJk.U1®©Üù”G¤ÒY¯ÍØš0S‘/Z|ä£ÿ2~ÞÁÑó&¿ñÙü=—æm4"ÃZ¢F÷†úëJ4¥Ô°?iÕ¬_Ç-Vì8Í'%ƒ«Ÿ­ß?'~d^Zù í3¾±¤ÂùKå¦Ô”m7p\Õ*]êj™0Y"Y&1®5%ŒhêÕXg¬ØtL´Êx‘,ÆU–ëoÔÐ¥m²8’þâ·ëŸ[ÝøøY%ñ©cŸ{¨éŸnï×kùÈ·¾Zw_äSÏñäþÖïþŸ©TiPUž]ôõÜÞ_ñ:ÑÏb{Ê»û|ôÜ™ñ£ˆqù¼çØÌff¸$ÓøWgmƒš ã9‹¢D<Ö 9ei©Sã~æê©ÙÎå'«F5–ùY‰ä"kOûÆ´³ŽGTùÒ Û¥&QLõYTed•c½JÏuø´%DŠQÓÇ%k•5šQ¶ÈD—މ…zkêO\«¿÷ÊñÛ^××ö•[Úukœ·³e÷7þ+S=SùäÖ¥b¹£I•š_·y»çNjï4±ÞIÕšg”U›L+^àôS.ks¦ÊdZÙQËçë­4Un&/Vcò”%5ÆW:2£üu›Ûô›Ûcq»ÞqõE2eR †‹¤ëŽª?c^‰¹*ɽ֕š­4— DG4Œ«Í‰Åeó¢ ™1µ³J–¼ÖpèïYöàš6ƒãêrû6¦?ù˾±)P+£[G r¡»Ôå•%Uµé[èÔ==:ªŒVÉ•I¬v¬H¼VI^b@K•d‰Ü¬ÒqÍ)ûÏ1rR5Esêë™±o­è¸uys¹.¾¢¢î]d"埦uT¹©Ñì°Á&EÓþ!ð6p8îü ãJ¾¿\Ý 3Ö¦%³zãÞ–WUÃò˜u9‰¨Ò¸Æ:É´ŠœÀU³¦™¦ºXu•®)ûsJã2‹r4bÛœ"QíQësDœ“=+è™âB^ä gÅö|Ý'ž >°;sßí1ñÀÑIJR5šg=ÅN²\à r¯ÒË$Åõ¼ÁJè ‡;G9õO‡°‰£ü±³ósÙÊoHñ>†x©ðmO…MúXÁ÷裂&êùC~A’¥ìáiŽ æ¯CÐo­‡^¦8ÌͼLÀ"NÒÇ4‡½ PÊmìäÅS¬áYŽ2vRÐM‡há§ òo~ 2ü;&¿C,ì³Lðnö‘e”7°·æ¨­íÿ=sW_J¥n ktlãÄXÉ(iþ‚I~L’u|¥ah²“WÙÉ)>ÁÝáµ&ËgCmsôMßÊÃDxý¼3T¿•Ÿñ:<Ï0 ÙÇÁ0Ð1ÃßPɹ*,tføZx¦èŸZ=M<û&*°ßZŸÿûë<…DóN¦ø Ëx•?"}£œÃèäun}Ïü€ÊÀ?žä×d£.Šª üœwQukÔÛ÷²€ê‹üãI.á~Þf«¹Ÿ?å|Jø G"¾¯wINKÎ×Ùss\eÜçsþ“6r4QÃ÷ÙF­Ý‰»þ+?Ýí_¿åï+¼ÿ^ýŽU§ìÙciñÌØ† â ù_ýÒk·E^‹ÍÇÕ|ÕÍIwÿëû]ZoìË,iОsMVSÞxÌŸÇ%Õ;ùËšåÓž‹ùvN,°4cETÑ„VÒVªYó@`û¬Æœ¿Œx{Œ¼á”ùôæ*¬œ¹ú —übÎõs^jUWj͘Òæ'/6Ùå/ÖúØrC’£QǨÈK,ÒuÀX‹’ˆøB§ã¦óâKt•¨œV=­¢Rò„¶J³S*[ Öœ“Ø;vénÛ^=qËëk¯øŠm¯L¿ïçomxAwÐþØê}°«ý›ÖÎÝakµÉ„̬’ÅN”™YíPDb\í¸š{¾U_›¾ãIUåfâr-æé&U7,1["“V<ª¾Cw³"“Ö4l7P,{Èêr3Yñ1µ³{?Ø IDAT%f{´G+t.q¼ÜÌRÇOZ\,=­<­hL]‘t„¤ÊuöFxÅùóõ\Õ·ïD÷öñ¿þVÛ ‹›ÒµÝ•óž[Z2<é¼ez‡µÎ*-7Md­£‘ùzÊ%5v83¬­ÊÜF»+Í·,¦8+ž‘«63DÙ˜î´ú ±F§fÈk›QݬxTtDXÓ6|EôcwWýꓳé´Ú-ê÷¥1×åumvtÜ)y‘âÀ]Kœ×mmÔ`ÌcVP•ugÆŽ„-¶Nê 乘…m^Oº‹ÍÓ>—Õ˜w|Ö#Œ±ŒóÊçœXX38âœrU §ÝÍÖÀ¢¼öœ¯ä̸”ùBÜÆÀ¿GüïøÔ{r§ê©·FþâPpÕýÁ}9SÀâäÌΉpnÄMüœ«™åǹžC¼ƒG¸:þ„•!u¢…si‰¸ˆ;Èò7¡6öYÆCvè7idsœOSE9ÿÆRžç8Õ\És\̳,çuÖÓ4Nñ’¬<Ê}\^×’¼—çȆbŽÂàJ1cdœÍ.ÞH òvnã︔ï1Î!v`mˆÈùSªCäЧy•8A†5l¦šSÿ7Åÿëõ[zE:̆Ì0Rý „?ª­=ð{¨©T¡þ–äZî wà+C'}+3´q5ûø2å\Ë.2l!Ížd-•\À"~ÈNqó)çr…é³°RW°ë>FŸekH6ê+Úî# Š7ã°F!ï? yZà µìÿíÙ0KÿÁeá÷÷HÄ–˜ ¥ü’ÞÊi,¢"²1k¢š(¦+Ôn®#Îÿ |1°ƒ·ò ŽÊ9—tÓOmü9Ť©çËø$¢n <Ã.†¸‚%qóŽÎøjÎù4¿ ŒÔºtÎýDÌW‡ÙÌÞÍB^åüüìn'^ñõ’Ø7Ùð¤kæÜv‡Ï¾à{yÇ™ ³ÑÁ¥ÁCÍÁ–þú7ÿZ÷ëþ ÔW/ŠŒ½¯Ò\ZtF4§‹ýìœW+(u2íʼZF¦}6ï[Q‘¨©˜…yGÇýW‰måR¥†Ø¨©ó–/D¥J\ðͬ-~Öbíb¥Ç•F®>élÉŸ¼£Ê‰ùöι½Áø„xÜÁ.Gj .ïQÜoí”æm¬W™72%švNZÕ-Qé.³3êŠ9¢#¢¨ÎØkNÛÓ¬~‘“C§d[úŠOçç¯iûØÿŽ×œþò7"»7ô¯˜L¾±ý 5Ù}°EÍSç¦]è¥) ™z#múŽZ^o´ÒTaôªÇüeµÆŽZÖ®çE&dŠÍƄӊ¢òDÒŠªM,r²KG·ŽÇUÕ+¯4õªó#,tºÙÀ ¦23M °ŒníC5³5&"‚]6uèJ+*ô«Zôh‰ 6Ù•éíÛÒ–šxõ–S‘ëL—OÌ¥{µd5Ä)Ì{•›N+*ôÞžtÙ ²a¥q±Y‰„ dŠŠO«JWIVÜç—C®lͪšr¼BûE‚ #b“¢Ešò^Ie–]|tâµÏý0ÿÐ’œÞJ+ê\8æ‡y/rÎ&3C¦ëŒþ”§Lk䉬x^ã^–º,/6ê¡´‰³TϦÀ[v˜yÙÔ¢¸æÀS%yû£2º¼¿¦Mz_üg_ËüAÏ^fx˜SÎ&ž^X·4¯Ÿåd9Á$c¬¡‰^ªi™mrYˆ|8îÝùBÛØ…ѳÖÐö{-o)Ì;ònÆxŒv:àÛ|–.2ÎÎ~}›í! |sÄñˆ¡'ì„äVÎp?-ƒÂz3ÍÜÄ–SžïÂ÷¿5$CŸûE쥘ÜÁÙÍ8I?1Í<¶…íw2bvÓ&ÀÖ^Ƕ7±ß¼&o‰×óoµµ7ÿž {2•*`¯ ‰”>rÑÎã¼Ì"Ú(cw†Ã¿ç„«m/§YÎ9mI÷žjßW×°·-yfe´·µ|Ê‚šâ“Õ•ÇZæëUwК¥Ž×k×3¡¦0JÕ¡{£Ýóõ›KªLÈŒhXíP•ÉaE2h‰)•-ú5µëÔÜ`x©ãy ÇÔU›ìÐ]k¬]wT°Ðé Ó#ê´”™YáȬÒY%¦+% 5À5¤”æÅf•´é+$à;tåħ•°¦öTuMù™Ñk_nß[{x®dNY½|•$‘"éÇT7˜žRÙ§¹CO»ÉÝJç™èÓš4±ØpŸyg46™\ãT«áC.+‘™‘SѦꔦnÍÃJêŒÉçt.ËÊΨ¨eû–Ç"ó¢}§gK¨Ÿôh­ê ×t *T´Zž”™õhµuq-åR2ô³ ¥7+ËI­²¢ÏmÍÜó÷åÒ3Š¢–³E¶”8…y]åjjœ7.Cåˆå3fJ4%TåäU—ú£Ç|°ËÖ£±çþ&7óˆíå x#p.»iÌGNêÈ›9Ç‘K¸‰,fuT÷—\Æë”…nßKÃØÛµ³”ûXO R…Ê^Þ 6Ò˹ƒ.þ˜>êçS,aû™¥ŠƒaIiŽjƒÍYVó—¼ÊºˆmýŒ½ c‘`„ NAã[Ék!au;+YÂ], Áµ…É6Î¥ŠŠ#p˜Zfèg§Ã˜ÆýäYDIˆµsÖ±‘1ǶP¹2Ü>Æß„e*üÃÔ›öª ÂXõ6ÆBòCè«­íþ=½«‘Tê%*i&ÃE¤Œvzˆñzy0Ìx,]È…tG ï *g¸.âiPÅ.!LèoórMûzÉÑLžû9MM8üô‹¹!Låý€I¦H°”ãT‘àä›dš…gÚû¦½¹!ÌV\Ê~ö†sã'éu4E‰xG`†_1H [ØÃµ,â4y.[mbBù¯]Úl|Bõ´ŠŒD¡*X&•¯’L+ÖtèÔÔª¯C×ëέ1QnºùXU¢¡ëÝôè¦:A?­<+1®ô%綘8c~FÉˆš”’…º›Œöi¯05ßìIM¥"£ê96ª#ÇòzWÌ98Xi0î}³^‘Øjòè™ù‘×£îØ]tÁ¾æ§þjÊë²@)K"D<µ$Hgõ^mÁ~ûæx• ãÀ8ÇXNÀ†ÜjàAóãp¸u=ëèñ}™0Í{9ìá}<Ì›8Àn>^t_pØ·ç¶SÁF:)gs€[ùZpÖÄx*„ï,egxô/4AnæYšî1_¬â T°]!c¢–,ƒ‰ÚQXþ RpMX׸8<Ç'ØÂ—…„ß.ÞF7å\ú‹[ØÏµ¬ã`˜4™yÓÊ|9yº(å2ÖóŽSF–éßµøE*5‹/a'U¬æ•þÛMEa‡-ÚšOq%¯ÒÏ¡° ×ÏÁ¸ç}•FÖ²€~&énŠkø©³µ¦÷ó=le. Í oð^f;ø%⦸cT²†¼•ý¿ÃU\Ãrº¹>œG›û“tPÆ~ÞÅ L„°ý[„p°ÜÎö³–טc;éáÏ PŒþ@gØ› ,á)zx'õ|3°šŸÐÏz.ày®ç+Ô°‚Ÿ3ÉZ®g3§¸™~ãñG]pȯñ.þ˜ ëÑ/r€Ó\àòÃvÿOüÐ}7ÐÌ4ëºî#Žžä#ùý ûõJj§{füýŽ\·-°)®6V:w)1–ñc.Í•ØÍ’yÎM:ÿ21—:›””:V­nÒê9‘À¼ªœæsÖ6Wk(šQ>+–°9îíi§2R9ÏÔøÈÈñe“éÊy¦×èöWÓ.)“]d¼Fú¨¦•Æ'´6™Š90ß\Éå­ÆÇÕÇXg߈†‹jU¾Õ3qÁz{µÇe2ýZW82¦.£¤ÒÌ´ŠŽU˜^|°toG]ä‚—®}0Ñ5³òȾ°ìoï[›Q”•˜S|F[±tDPjvRu‰ÅNtkËuëX¡³ÒTZñ;ÆÕ¬t¸ÜÌœ’¸ìy^»Øó?wS ºÀé¨üˆú³•¦Šd†4Æä*L—I·´Áðr­úkǵ&*MM¨ŽÊP¶mÎŒ©MªZäTRUƒa"•’Cç©k1Ðk~…©®“Û黩;?=_OBöuKê;eñKÖ8¹JçFÕ•È4êÔØn¢Æø¸Ú¸l©A­kêÕQÑ«¾Xu^ÍÅËÌÖ;#—Ò>k0õã›{ÿÓ±2 OmuzBó¬Á¦ÏÇŠ.οzoÌͶÌX•–šqœu¥¢ód3æØ’Oû9+#V.W5èkY›òÚf}1çS.©òt«m)™¬‹³šsÍz-«¼ÖÛ69™³dNuÆtÖM9 žÈY’ó ®ÈœóZ^›ô 7Ùü|Ð9/xâ©`f(}ïÓÙîrxGpúáÀV1/æÝAÝWýŸGüדo°›[9ΟdexÊŒðïf+å¬âN2ÈVæB7úßsšƒ|„Z¾C]!¢•iH²‚»8Êíá´o’‹x•ëÃŽÎå¼B_Î>ÊÕá1÷ö06’ä“¡Nþ·*©aÆXJM|/´žÇ \Åd—óR “c¬æµ|ˆáP»ÑŽ_®ƒájŒ¡°ÉRHV¯á¤YI%ò›pªlæwðFÇBƒð‚pÂdÙÿ„é¡Tª…+YÄ^>Ëa%*Þ+/æv6r€?¥$Ü ÷íÜÄNÒLpqÞ¹•²Pu›xîM”Ž}Ìp9s<²Oñ·œÇýlá*vò¾ˆ…ÜÃ~îæƒäÃÚá|ÀöQÉ{h¥$ z³œ/ò/a=MóiäEF¹–U”r'Wñ/|™ƒ,ç•‚„&â4?1Ì`Œ[#ð=:a–Ü1Ÿ¼Æ{æ®c˜—ÃiŒïpß%͹|‹¿$oaœšø#ó>öÉžG<ˆ¼fâÛÆ >O†ÝŒDüKÜÊüåOÇ÷|å‰àGÇ={[bºµÕ”¯òoQó‚B¨òd·_AïOâ5?>⦱ÈÈ- äUs:ï _dWÜ%¯qA•êbkRþ'¿,s]…-Y’>Yêò!o_àÜI¯¥ìœ–™³¤Íᤨ‘)‘÷¶¨Æ)GS>]/’±p¢>¥Qç(ª”+¯üóÏ#¦zo©V\f¦[õ¬[V9•ÒpÌÂNÓ)Ç“.m5Ù©eFýu^>`m»‘IÕÇ .2ó¢ —91n¨Ó¹Ã:Æ4Œª¯1qЙ˜…å•§Ÿüëçû¾þ¯ë÷ÛmÓ¼‰©×m.’9’_]u cí“M»+–ußýùw¿ÿÚ±þÕÛ¼\*U€$cÿ¨ºe½æo°gNÉ<½',î² ÆD£¡¤Ê7œ;¦vLÝ„ê¸l½Ñiå9ñ)eRóõN©˜Q–RVnzPãÃ.h7R%Yoô˜eµÆ–81ª®ÔìŒòeŽ×˜è² Ôì¹^?iÑa«º,H+N+W“‹ÉçÅæ”Ô˜¨1Þk^¿–õöôk9Ï«Í?¼bç¾ÚüìÊÉéªSñÅN4L)Æ¥ãrëMêËÉ,ЙÒÖ£60U"ÓéœUö>çdÔCÍ®0t\c»tJ}§ù5Z²æIf[Kg?w_⊟Í~ù†Å‹_Üo&ª>¡!P×î†RÅ#ΙPŸugÄ=7ç ç=IÛœ5g ¼ToeRGÖÜžœJœŸµ9P8—MìŽÌm VŸpç]¾›^| ûÝýçþüUÿtÒG-?éäž|êó–õÙ¸{%Ÿfˆû¹†wòmîç~ó¾°gñÝpëª)ÃÃ×ðzèU/q6ˆøX¸:NÿwòÿÈ¾ÇæbYĈ„zô8;ÇòFÈÅ(âV^bOÈZOχéÜçX̵e’¯s/L…ƒB_|/§yœ"Nð§ø¿aš7ø<Ï1Jœw²ŸkBóÆ/¹ÎÐa‚웵E|¨€L ¡Û¦Vp„¿æ•ÿžzû@xµúí Öi>úæŒÆïß®žK¥–0ɼÁQŽÒÉ£$‡Â³Ÿ²ŠËØÃ,燷¿ZV:{Ég˜§ÃtÿùPcíœd‚J.&àn°š¾‚÷%âmQóIªhS›æÿ(I¢t³œ3Œe×›\–£œ&~€ù¼ã¬ù‰¨í^ÞÂ!Ž1ŽÂ=º–Ðsñ@ƒLÅ} ÔX k\u]ĪÀ/9ȳ$dG­âHÄM¡´æV긌¨g{³H³ÇÂü+ßú£ä‰«u_¹óªÈæ"®6}¾Î4²„©¼)- jO½%}r(¿«ÅŸ<Ûxªhrô+9ïÛYfjÎ"Nñ~ù_[™Êâ[{kÜ%y0É>H —äÏ_žžÓ•sï ,Șœµ'¯)°,Ð2æÑŒ«ÓžÏÉs¸Ê奚#&Çü›Æ#Šr6ÆÌËÚG´Òò1?ˆ¹5g&)÷HƒºÃ¾6ñÞ\õÜ[çýì&§5´¨6NJÆÔ§¤˜S_*1¦.á;ÕNŸ±mÒL…}mä-:£±Vÿ|C³çU4,•*1Wgl¾¢‰*{>¼ë¢#c >ù™}Ÿûõôö‡–wW®Þ±td¬bz®¡¦Ä\B¦Üô¤ª4½ÒTV¼ÁH™T™Ô¸ÖJS†´,stLÝI‹§TÖyÚeÇ-M)ËM¨î×Zb¶ œ¯'&•Df”åÅŠ¥kŒG†YaTÝÆÒ¹`t×e¥oÿÉ­#"IM“jÑR³­úÓªg$¶èŠª|ÙÕ6ŸÔ2càŒŠ¹fýý.]aé&‡,YéôËÚô¬2< ªZ¤L_ú;ŸNfë+þekék+g—íËw^23U<®ivÁhdÝáú×Öƒ&¬¨—Ÿò`Ò\“sbJJ¼1e2åÞ^£=íüiƒÕÏz¼Ié<•I‰¤ty[V1µ¹Ji`uÎy¯ÄIšÔ˜ŒY‘7Eµ mõ}^âB~ñDTm°³Ù\³=o7ñ^¹rÇ<œqçbwþ›ì1Ÿû•ê¼/W¸¼ ¯äjŽðMŒE(MGyšrŠx–§¹–µ,£Ž1ºx„Os”,feÔ ñú°–s¯òáPôZ8L·³0,ÒìáÜPöb;‹Hð8çrGˆÿ9/‡>­Nâlã$+‰sW(¾¸#d U°…R–s ì¾'øx¨z/„,.¡ˆ'é¡ ×§Ã˜÷2ž ?viXW,ÄŸ Ðm¤…QgÍû9ÊÂ75e qŒžÐ娾ÏN*i*l„ÿŸÛUá ÈÓÉ&V“`ˆ†Ð,¼‚} ò'<Ëa^$Ë…tQÍBÒ… àMˆ£Sá-µƒµÿÝ(Ÿ¡Õ!/²Š¡œ~+oÐÆû‰ÕhOù6eÔrOhV,h¡³/ÌP¬¢‡ZªÃ?© oxGíkÅlä "$Qg‘µ¥”ñ…ö³f~Ì‚ÀSl"NchÛz2o€_ þ% ôå8_ yÆ…äH.jiLx•÷†ŸüYÞõb †4[¹3nSÙâêôÒWì`üJ^Š*²³ÈOnó®¿ÌÛÝ¿%p”Åšîô™ìYz%–·Úè]FcÓïúYæ’±üÎGr™þ9×3Ó¨ ÓGŽU\˜{ñö@E̲@E`Žªb‰Z·Íj ¤)çé®°0§7b^¥ú˜#Q©œx^} ,°?pOųNÏ9‘ÖSjEÚU»«T&ÄgÍË;‘ˆ:Y©¢Þ¶a'E 5Êy"7ÿâÙí§Ÿ½n¬§²CgN嬑! ”&¤šLÌJ7JÏš¨¤Tiª—œÓXïô€CQ­IÕqÙŽÇäúÕÖ˜Ì*šQTm¤L:+q¦º¢ã-÷å÷¯¯îª™Yz¦«y´ç棙ñÆÜæ]½[Nuõ¥_ÿæÎŠšÎ¢®×ÂvÝ1ù-sJ‘)EÒ³JÇÔN¨™PSk|©ãU’è´Š@4+1_V9<«tJe›¾9ÅQA¡q5£ŒÈœâ„lFbµƒõF«M)ÛôÕ=¤}¥9±54.33¤±]w«¾"éZc¯;·Öø"§vXS*Wc¼ÜÌ+ÇÕ,tªÔl\¶C×K7–½¾ï¢Ñ“³+F{[k¨2>©¤Ùhº. N«SÛª¯Û{%sb¥R-‚q¿²½X>&:nø¤%QGF$âbyµY‘1ÉÁw¾ùüÿ¨ŒuÈÆwÖßxdêÐUÁgþ=ñÁï_>õË-%®œõ,“ oÉ[;­%£;é@JkÞDÂ\Ô¢i™˜ÅÕÆ“ñ«I]³.do‘O×é¡5'u]ÌkUgÌ˘Ù_jÛœdDUÄê¼½QWšùÉ„¿b´bçÚÀ_°Õ+pÛƒvv†ÖÄ÷paÄãÑ“ÍÁOž·êެöÒ5š©¼ƒ3ôqeÂ9YMWr_˜/HÒÎ=à|jé`QZy•û£ ÎFYÉO(¦ gÊR– ¯b¢låÁðs^./—pˆK‰†¡ !—n>[¹Œ/SF5Ë8®«%Ô3È­¼Ê0;¹œáÅ(ɯ©§‚%<ð&úm=µaq8l»ü'Ë( ¡òó~g%?—_‡AîYv„ч"¢!AcûÌšÏv²Ì„·‘Áÿ?ÛÕJN2Ç8çq2ävDç N±ž‹y„!¶r]8|‚ ¼ÊËÌ Û7ò$ùð´5¬ŸŽSʹ°Ðyëy94ÇOÐC‡‹½{ο³½aëKHNÚº8o¢‰ÝÄÉ3ÂÍ&ö“ €Ýhh?»‚<—QxŒ—èg†¡=³À݈1åì‰ï5Ž…ö³çYÃQ^b)Wð"—2ÅËà&‰°Œ'i`–%žÀ^£Sôdà³( í‰øÃH_Ov|‘Oœöâ2s3Q2ä½±=rQÊ’_ØWÅ/ý+<‘ÏY˜‰3hÉËQEi`œ c6fÙ@Ù¬T`&¦2«2-žWºN׌¦ùrursÖNØYjC©Šœæþâþc±ûþg°cÕ<ýiíÓꊤ1«&kÇœµj²ËÍÕÔbªV²ZùˆSCIûȸySŠÎÓ—Kªm³J‹d2DÚôU›Œ ÆÕ–˜íÖŒ©m60¢¡ÂTœ4Ï™ýG¬¨7:¥²×¼ÃÅÒyѶ4.1Saö¸¥…”`«¾íóõ”˜Ë‰í°e…#3ÊÑ"s Æòb‰¶ÆäÆÕŒª›Q>®¶Eßܪ®¡<ºéþÕ£MIÕåfú´öXpPÛ…ö$Õ×Q;ª¡Æà¸Ñ*M3ÎŒª™ÕQavJy—ê´Êœ™i™F }ê¦DîµhöODž¿<5g†zh IDAT‹‘?ù¾ÉÌʹÏ9Í3‰ýPþù ¦G¿¸¢IrÀΈí9ósvELF,¨ÕžõzιsF¨ Ü´4®mÖæ ,Ⲉ±¬'£.Îø÷@YV0¥7o+¥1畚H‰FuDUçtñ ç78'e<ð8óe=-D5v¯Ô¬]Û(â Þ΃ìeöüMü¥Ëòg·ŸãqåÏj¢"<ØH°•fžgEH@d'7r€Å¡˜âB*˜ 7p;ߦžDèÛ‹†Mñ[ØËaÞK’+™cÝ …î½»™`'u, ô“”g˜s?“ô±˜§‰ÓE’XÆ4YºÉ‡qó1"$ÙO2¼H4sEHÚË[XJ?»ã!®ƒ#E:*åJö2Bž XðÃa ãƒ!0^§~;_|3»C5Ät¸òno7ÖÖŽüž1á§S©ÂXõ6nç× Ù‹'BLøµìá%ÞG¯p‚#án¹aÞÉ Œ‘æ:ºøtìç8ë8Ää›÷ÉÈ5<ÍÕ4s’—Âvß;x&íiî —}ü kÃoô†0ËPHÚ&òê *šdØáü­Žl ì õÇ÷ÅÝœ ­~‚q"tò¬åUâ0üÎF>±.•S9Z‰ñh8è·;XÎÅD8‡y.áóy8@¬ÍíSÒÜK?¸+ ísu &ë°'ì»Ö]w¹¿[>·4ðc™ó¸Ä•GÕþÊ?%‹-ª¿îMŸz…Ê„+_£=6ðÙÈ¡µÁÞÝâé¦I/|(~q$î“ùƒñ̇~ž?Raä ~hÉúÇœÍiW´lg"æMe=( ÌeÍåÄòò —Æ}ªÑûS^|=㺄✟qCDŽ/DݨÏ9ÌÀ"­³ê=5!RnÁ¤µ¥ª±‘¢x4õ“ÇKþæï–ªÖ˜R:­l™Áfɬ*V7eiVoÔâ é%N§U ‰¶j3vÜÖ ¥J™ìÕ—ÐÐjh¯%¹ é-úçë±×†s(ŸŒ'÷_°äå¦Ê+vÿéó-þÙøTIïé Ê.ìx±}ñÏ+éí8`}©Ô¦TD5Æ×Û“«3º×ú¤ªå:‘c–%Uô󵯗:–‘¨3ö¬íº+L÷iVÞc~B6­hBÍ|=S*‹¥3¥f[9¨¹Ñp½Ñ¨üÆ SYñgÆÕ¶ªLjJ唊U%UfÅûµÔÍ‹®v("˜S¾Ážq5­úš 4©3V$½@W‘ôÊÒ}ß}ú;¶4Þý¶IÕ7øÅæ„|§–·Ø5®©Z²ßü¨H‹‘Yå㉤5æ¬]¬;%žLê™§4ieTKRϬ؅NM+>­6ûÒæàÎÏåîyqÖ»òJrÝ™`w,ñýÏç^Þ˜ÈYÖª|HqV}ÖÊŠãQ›êdS¾ñöœûŽY·=«&ª²Á–˜Öœ?kÒ>¡3c~³†¤2î,„ã¶g} ­!ï ¶ÄÔåÎÞTve\›÷q&yWQ(’wDc"ÿqpïㆲ‹X—ðμ¯±€Î¾ÈËœÃïs~èe ü€çùq6óãD‰ò>6q,ìäzÖ0Ëzy‚Ólæz¦˜õ,æ}<Á{(åùpY¿“~Aš¡Ðê÷>.áVð<×ðN„aà'™eo£šù<žª£!¨à]̽ƒ“¼ŸUÄÙÈxDsÜ·ò^æñ§” Qîåu¢¡Þ~ˆɰ² ÿêªPF!¤ôeB]ÈõÜJw3ÄÍŒqUø¶7ñLþ÷ÎFjk·Üñþß³]²4?âæÝÐÎ~æÓÆ(¿aŠg9MŒ¦)¦š×BèQ:Di}O‡Ÿ 2¦JùKŽP^‡¯ ¡[QÆù G͹=oWñ%vð²<6ÒÊzÃ$áTx…Zc§Bßü›Õg}äiâßÙÁLÞã4ò‡<Çì"É…ìŠxi¦øB\Œó½¼…ܳ•kØÅ_q”ÝÜRäÏrÎçjø.2L)oÉû®/<¤r§Ãûò‚„Îûz˜ ý>Ïðï6yÇðœ×Þ‘ŸÜÀëLDÓ¿ˆ¾ðÞàýIÿ|4ú÷¿JN}…•ÜøZ‹ïLÙ¨¬5zµŠrŸ¹ÇÀËç‰æÕH•Úö¸7ž3ú zâJ²‚¼Q?Š»4ïpĺœCEî¬Rž¶–[ùŸ!€ri̲¬ø”Å4ñ'š˜óc-ÚØYëö)5+•f,>¡%G…êµc6›ªI}ý›Ó_úfðîûg»ë‡dcYÿÔ¢}ÀDÆŽ9Ëg]Q_ªhž¾¨ÌQÍÛX¥{XK•dVE¥¢2AÞìV}9O»,£N¾Zçy޾èâ S+uæÄã²/ÛZ4SÔ:’I­99¸¾»ùžmWz¦Xº&ß;²iñôä˜ÚqµEÒ«¬5¶Ò‘f…|yT¾ÅÀ”Êq5¥RH¿ÖÍ«, ü²{­ßî¹QuHZÑ|½ËuÖ/3Ãrâ¦vÙ8Oï]…›V£¡-‹H+Ð2©z}¥f9Ùlà´…Ñ“Ï*)’IªÌ‹vYðS—¶šØec ²Ë¦v=sŠ{´O¨9².k=ó¶][cxDó>kOk;®%.3ªl‘þYÑ„¡5:Ïhý»Ïè:ï:ÝûŸ{ï­Þ›%˲dËrï%ÄéqB€B(L(3g€aJ8À”g8 ÓÎÚC Cè„Ð é½9‰Û‰{•%[²z—öÞÚå>/vîY™õ¬™çñ+YkI{mIëÿ»ÿ¿ëº¾W¯Ú&‡%/uzNeƒ‘rÝ ã1•˜é5öä5U öK º+îò`æEo~¹øÞïÆÅò2yU‰ñó‚Écyß µÎ:ÓhÁ¬û*„¥þ•·©›ôDÌî¬ûh¬s])tJ’N§ýeÌMMŒ:™°pÚ|¥é¬{gÝA bªòºsF÷Æ]ÄâÎÏ»—ʘŠÀõ¡ååþwF{ø—W„/íðxÀ®£‚ÿWJo 3ÐÄçù2÷r6î¼PŒ‚½…ç^w’ž lc·ry4º®fž²œ èác\¼PQøàqJ¹Š{¥•çx„”RGüŒJ)ç½låÛÔÒÁäx;ØÎ4¤¹‘çXÅ·8À[xK„E_ÌAªø{¸ÙÈýÍìæ£Ü›·‡¢jÄͼ'Zî=Ë ®¤ƒr€?å)þ„~:¸ˆŽòdtð¾•ÎEäÃE¼Ì£°ð›¸”åjp&²ÝUF´”REŠ[ëêúÿ›ÛÕx2YH,±—£Èñ­|:j~Ì‘Š~" Œœ—«8ë|ˆÊ¢/ÜÁ ÑŠò÷œ¤•‰×9××G¸âÿhúšfÕª×å…¯aG8?ê’‚|+úªüžTÌ[¹„}Ñžzyô׳o‡æ*dôr û9ÎËõþ6å¥ð5_Ðn–³‚²‰­ÜÇbŠ(£;ê#^Ïò¼’"sE–å<Ãy¼ pk WrÌ‘aw,r&ûP臡òPÒü…6<›ßXdãÓ6.0öÆØÔ¢ieìg >!¿Ãp•=+ccw„.á‹Ö× µN}˜Çh­°!æpÖê„íå*ÓšãN„ʲ¤êÐNš¹4ðlàvšò^N(Î{S…Ò˜³È„e|FIë‡ÕÆÆÄSæâö¥uÄT%õÆ%¦4‡7Ýþý×Ëïø?Á VWZZ[çl\{»ªqëãrIé#¦g”7sÄÚ µe&NZ–V^"=­:¡û)›ÎYݪ/T}µ½ÝX¡qZõ †Ù•Ž•HÒ¹R÷¤ÚgþûwíøÀˆ¦Qµek¥ÞŽ©O)K)ј=nyJY½ñ@8§|ZU…¹ ¼xά¢Yûl^îx¥™=%ÒǬh0:¢±]o½ñ…ÆÕÓ:¯¤[g‹J³­Î•IîL3*§Ô [PifVň¦*3E2jfTU˜SqÄêF£%ÒO»4!w¾]ãê'ÔUšYçÔ˜††–êNÈΩ¨0Û«uNùÞ‡ÿê;î8¢áœê¥Æš Ëf ·0h¤RuVÙœä´ò!M9• F§çÕÕÛ­{Ê•3‚*™&3ç˘Ë8ZâöRCe‘¾ ôè`‘•.âð¼Z-,*qQÖ’¼\Jkh®AEƒó'-nTŸu<íñFŸLù‹Àõ)¯ÎûïKç5‡vƼ§VEŸ…ü¤JONm—5CfËœ-z­ê÷/C±P’. -t8æ­µ&Sfù»BÐ±ÈÆ {l?kâÎgÌ-¡çY,į[]v¼>÷Z®tM¡¥!tš‹8ÈÛi§Œ£œ , üS̾Gš¾ÂOpÇy$’ÒY·y†W°˜V>Æ/â}ìŠ"´ÃÜÂmÌò m´±•71KÈ"ŽÒDÛå—òÓÑMneÔÀ—¤‰Åìå]ÜÅv:¸‰^ù'ùþ•$¸$êÆ¦…ɈËúô±3Ô²™‡HEžŽÆh5µž_sšQîäåèý72Êë8ÏCœ%Íz^%±ó¹,Úá5E§ô¾ººêÿF»êM&ý¿€…8êÒˆ5RPØ òÒx¤!-‹ZRYÇ=ö"gØÇuQ@º0$NEzÕÕÑ®/þ:©ir-­ÌeUÎ[ÃÉh×¹ˆ>žÌ …¡ÒN÷ëJ—rŽ–D;Ð&vp„Å4Òí _"`uA›¥—YÎ6QËrjC¤9ÄÌ3ÂI‚¨ÎxW…ϧ^+.ävû’’þÐãðâÖ±m¨§!vô“¡éÀlÌ©Ðn†]P»s§‡ëbƒ½¡k.rËcŽÜ¼häüi'X0ïX^Q ¥ÍÂ95óæB¿år^d‹XÉxÂ-T„¦¨ =suÚ·ò6ñ­„Æ\3_#W!?£š“UâÄsöWkË™ ÍýÅÏÒ;/—M„k^.}qñüѹJW4f*4Sï—3ί0? ¼V²X¼ÔT™¢6A¦EF;Ó¥')Xíx¥©£Ê$ĦÕw8™T›_`MRUñi•$::aE»œxÿ<\}tQÙÎMúšL4 ÅF5Ì+9jU¥Ù+SÑd¤Òl¿Ef1¡¶ÆÔæ µ Ù¤ò½«=dͬÊA-Ë(’M*k1RzRW©)5M†ZèÜ„ºzc¡`RM¹dL—«5qÎÂzc9ñjS9ñb™*3õÆÇÕÕ˜ª6U*—›S±Åž9å#šŠÍ—Jjn1xÚÒsZÛœM+M)}Õ²˜üè‡UþõÛc*ªÄJ¤é:jIƒê9ÕÂa÷d]Z)‘Q»Ðx·Dh¾FCRbDYÊžœŠj™YecN*µeFiVr¹²ÞP­"Ôžüùÿ¬øú?WZVíô¸‡2dô”ºxNgLUÞÙÆÑi÷ŽZY¯}HI\®Åº1Æm­75­..mÝÍ‘JãåªfðlÚtª>*u{qÊ·231Û‹[úgCæ¤Bï´â¡<=¡Ž}¶™8îÀ=«c¡åTøDy¼%•h9š9Tµ#¾‰Ílæk¼ãÄ9Ä›x$ÐØš­ö·Ðü©Ó'(Ž7[)åC줄³œÇN.äÃôqAM½•d£¾’—©aˆQü¶‚Ÿq;#déˆE3ÿÙ\Wˆ‡î#E EìeEm cŠ'y[¤¦gØÒ7Fo‘d"‚*lŒÚ NPÄ»y«hô‹#¯#SlàYê9ÇóÔð}ú¢Ðôë\ ¼Â«,`ž‹9Ež èh´Ïÿÿ1²g’oÍ{ÜÌ%î¶Ð†r ¢25(¿›¹œû HGÝüó9Ò,à]ärvFFó¨¿DÂuy¹„_±ˆƒ,âIJ¸8Òfè$ÃøëªªŽE#z ì%$ %Ær,g4zGÿQÒœ%Ééái¶F ÆVžˆâ\/soŽž’ ¡ùB-ô¼¡û ‡~âþÐM,`„+©àQ®c_b?òç¼Ê–ñ³l湜?ÌÚÌ~˵´Ç4…b$8l Á› _Þ㫯Z]æÁ <Ðááƒçÿ>þüuáÊ^|6üm‡™úÀùµV„ÍÕ^áÏúëNäÕjù¡Ÿq×£Cui5åö–O9Wpu¦}<§‚·ð¿ÙNçÀ#¡,?Iø«¼R–­R4íò¬x(ªnÒ6ã\R{LK 9£:îÂ@<#ÌO~ëóá› K7Ü7ÿÁƒñßþc8S_dªÈ¹zeÝÆbY2©¶AªXéà/yŒ§Šü,ï·|„Ól°õÝþloüÑÛãÞ×Xp4çìf›L&ÜßêŸF}ò„Þn½™Åüšß„zí¾Â=¸ÊD?»26e=gÑF7¿ê«ïW¾Îî ÞS’øÈ7óg¯a(ïּʜ/Ìëmä§)¡Ëc.ý]‘;÷Y‘³“F>ÚÓ¨­ ñïSfçµÆ­‹Iç¼”Ò1«†}Åó^É{)¦¥Õl ˜ûê×ZÿÏ¥ž¿6ÿ/_?þ‘ 5{ðŠìÄ¡¬Ž25Ífˬ_lþ„á˜Ãuf{|#íºA‹Ï¨î4Ümu½ŽAg_ué¼Þ"«&5U™yÅ&‚œ¢9 ¹UŽž²jNåZ‡âò³*2Š^ùäÃËŸmî|¡¥!?Žvgá ]fW9Re¦Ó©iU9ñÅÎÔ_îÄ2'G5Þïi¥Eæz@µéÍö k*–Y¤?­¤X¦Ý™¼ø¤šcV”š± !סç”ÎeNÐÕht\}ÉJ3hÓ"ýõÆš ΪœR}ÎÂ=¶.Õ]b~FåjGfTÍ+žSѪF} h4Òhd@ˈÆåŽ7)•xÑ›í²ðì_übÑwwtMŒöX2¢ñ±bŠê +=hmºÅzŽZ~Úp‡|·M¡Ú 5“ꥳ’yåÓZ¦-•¯¶¼RÃQ+Ó–Í™+µ»ÜøøG~ü|In¨$ôZ×b ”M͈Û@{ÎìŒ?™5ßબW’ºâÚS)ó£¶N:;ê{Ü‘ÐÚj %j¬¥-k-gÉšÉXKMV[NW ýyÊ-/Ä}’+óN…Bv§È¸(á’¼Öó`è÷ÜjKÚâÇýfœ½‹¯v狎.‹ýfi8øó—+û±Ý{¹Œ_tëðµÎ§ßиÀeÈù—çIŽÑÆíTò!~À[ÈÓÏ)¾ÆÙÉÚзC¿¦6Tà<žæF>Çnö°.:‘¿ÅïXÎ[y'MÜMžy®à}ü›XÁ¹Èn·Ÿ±×Éo ‡kxŠëx ßf0rFä)åz^¡˜þ„Fée'Å‘åm3OGî…ÔìPä°€nŽìûYÞÈfvò*Û£î«ë¹LÓÏzšçŽh™¤‡4W°O Œñ7ìbžï3MU$ =LMÔ”x#QiÊ;¢¥\1ϲ”õœàï9ÈnŽŠ`ðùè1¤ ¥ÝÀ(æ^ºØ%s4FµÊ"ÔÕ(/ÐÄvâ G@ÉF2X3²’Q~Ä¿òu>ÁBnÍËp7o‰0$Í\Ì8½èmÅ¥Þz‘ëIñeþ„®ŒÄ¤CüŠ4·gaÌ›7ÇNÚˆóŒ/ÿÖ. Gîm09ïy—æýÓüó椮qïŒ=,9MŸâ8+ý¬5¥R×Ç®.v]h2æ‚üÓÿì²yÀ×öøÚU•ÿôîT²–1–åÍJC ÝÆ ´ó“ÐÛBçX–«ñ5&¦íJX–÷GBe|¯Òc®Ì*§&§=°¬]"KÚ•W8[áwm.LúyÖÝ¡usFf|Êm»§þ/u”ü`{ÑÑ+Ãæ¬iž(»ÌÁâæÏX1'›vªFEµÖÕκ5¡<”¯0ßjvÚÚ)e‹ÏhXg Ïò¸Ü«¶ÙsVK›î9%‹ <亸p…c»œÚÒ%zrkŽÕžljë‰÷[4¥¦T:«6O*›T[æl¹|ZÙ>›ÂP—è©0;¬©ÆäœŠv½õÆY[ifTìŠZ“Õ¦^¶m^ñ´ª¸Üc¶¶˜\`x‘þ¼ø§:—¯2Ý©»TzPKñI51ሦ³/s2V™™P—ër²WGÁX±ÌÉqu9E1ùfƒYEƒZæwèјk6”6=cAë’ó›¶?ºrf¦e‘Þ”|½êUN×WÒbbJPf÷°’~§èœuzÚTVÛ¼ îà¼X¥å$Êdç<X>l¤Z¾Hͬ×Ù²^lâm»>sÅèPgL]©ºy§Æ})îÝ¥FsCKb>šU[f&-:²ÀX¹GJL§­kP4méB±¼\ÚYÆcžÌØ^k:nqÚdh0|Ížði^ =㺬XÜõ9³¡fúùÛÀм«B¥¡_—x)tU‰Ûò¶„ÞceC¼miðøÇB'y_pùî`éN÷®i™½p.·»¨çÚÜñÓ¦o¥šÃ‘Øñ-SÃE³Nç”ò=ÎÆ]Øêd%ia€òžâ)ÞÁ7¸‚ý¼Â Vð~~Ç÷h#mSR´DUŠë¸…ö²œßÒÃ[¸jz˜ŒÊ Ïç(;ÈG™âŽ(ÿô 3¬bŠ…Q±ä0çñ~Ž{-켄+¸¦`šLÞÁúÆg7ŸäažÛ8L[T`Ké#AÌßÅ~–rg9΃ô*gy˜s¼“ïÑɦhƒ…Óô²„?b/ýœå6PËשׂ«½õ¶ ÿ}›pÕŒFI±‹˜¥—ã¼=¢†_B7ý¬à½àL°Œ~f¢}`¡Pùcâ¡Ç8¡GúIÐÆY>ÅFùm¤‡aŸb,êÞYˆ,º—ótÛ:±0^Iž%ÆÅœŽ^q%UQoXš?â4«¸'z|hȼõÌEeÊ…¤÷©èã*ªä2Æi䱨 å}|—Õ¡ãy;©©v$­‚‹"œÒOh&Îй,²(!ü ³1·‡Ïu»¼ß¾‹ç<”/:ì¦R‡73ÏÏù°‡sÌÅÜz‚û"$ó_°U[ìŸ÷õ•¡1æs>¡­Oe»’*KòžYÞ2±`òµZ1;ãR¡_Æd¸žCqWØZb®Äs3)UÓbleoÌûY³1æêfçV¦ô…ÎÆ\ÁõiöäTäÕ§l@‘5ié˜+*t—»3ñ¶W矹°bhÑ¢·<»ìImg3Þ–žøfÊ¥ƒ:YÜfxHS£Ñ¬X£Ô^«ª¤LÆÌ%Å ¤Òªñj•všíÔ3»Ä™WµoÒÝî\¿Ö…έqhVEŸ¶‹ì‹¦UêƒçT„‚iÕÕ¦ÓJgTeÂç,Xgd×ÿ|ªè‰íµ//ÒxNCÊt«ái¥½bKÍ&Ì.4uÆã¥Ú»ìÉëꔪÓ4j¶ÝåÍR‹T )Zê4s9C)S)Ë*Äæm,±nH}êm¿ï{f½¡š/æ´Ïi*öÞ„¾Z ³ÆBE:ËÌ¥eRòåÚr‚J̓:’ZgôçýhZQZSLyhF¿ IDAT0´™É÷T¨NÚE7×rM‘ K•äcuèŽP+e…:ÓÀ†ÀÒÐ/øiL®Ê‡’î.לó©|õÖàúl°¯<¢VWëên½mÇ?®ê‰1Ê ìe–:H2M좕~ä~Åžäôr3Sä3ü:оv=jåžb!‡!ä%–r}·]Ng¢&±½¦AÕE$ÿËÙÅMÌG“õ?4¶9êy{ô hå*žáôr{9égãUsÇÈó 8?ÊÿÖq%¿`«×|®›eEµemÑÖx9÷•¸-í¾J lËy•1:9·>t{ù=­<Ä¢èÉ"¸1œî öec. Íù‡ýÞ3ë®`ˆzÖóq6àxè ¬å® ˆÜkͤ3otí+áó—…& hõ/O™Ïðø¦É׊Z WÌ„Þ(Ži ¯rÕ˜%ÅŠ•4åeB1+B©„ëC5ÅzʬN97é+Iµ§k[Õ¦ü8¦’ª2OÍújF³iûKm'5¯1å'-F“çÍ¼ã¡Øþb7îœûmqù‘ÅÉ[^j}äý•̨˩\¨ÿœ²‚¸n¿ÉÙ\k_³X…L…ü¤š)ÕYc1™zé:ÅMFŽY¼Ñ‘C6̪*57¢¾ÖL­‰³ÆôtI¤”îþî¿^ùjÉïv4Ÿ‹i(8ôæ”w[Z.™V’Q\fæB=eçÙ]$;®¾TzJuÉjÓmúzu¬spNùJÇÆ4Ô™¨7ÞmiVQ\nLý‡bò%Òy±b™€˜pZUñƒq¹~‹ÆÕÕÖ¦¯X¦]o©tJi‰ù‚‚U$; ¥LªÂl‡ž¸ü¸ºM%æ‡4wè-“W—W“?©+öjïÐjíßvîì²Lìákª&b»­^¯»F,¯|Hcµª s)™a¿lwË™bKóJc2ýgÝW5¦ºLi¿åIe¡Ø¤3Yóã+3ᕆ‡ö§t4KÖ3bnr²Ú;~å¡Ësú³kÌÏÈÈÍH˜lÊ9—ÍÊóP‘á”ÊÝÓlËKŠC *-IX˜3ÊÄœ ¤B)ËjM§<ÌYº,H»;î nÉû »WÆÄjoÌûM(³‰Í¡‘´wÇ4¤<”·¡¡õ¦ä‡¾|¦+ÔB= L…³?÷áއû?˜ºò_ýþlù`{ÊË¡?çòFBÖÒ–#/Xá°Nq˜8!MÜÃyT³šZ>F-½Lð †H°02Ž7ð‹`ê…VØmôFvë.çß¹‚5ÜË›¹›v®ŠýT³$¿‹€³L2Í~†y•¬¥6bR¤"– ê GV¨–2…¥p#g_—;z-ÿÄþˆg2üŸoi†™åd·º‘£ ÿƒW™xÛ¡ƒYúæià…Èž•ç"íjí?®ê¸W#¡¨Þ*l ´ù,W0ðºÂ’~ª+z“7²–ÇdŽ“¼¾ÆDï¥?º-'ÅHô}.e’?ã{4ÐÉr~±ª’Ñks˜$iÆ™aˆOrŒ¢ûuá'˜¡ƒà cŒq!‡Ø®$ÏÍÄ™âBže€&V±«¸‹ 4Fƒ6~ÉIú8É_q/°*þŒô°1 ¿ åü>TÁ½d£ëvôs ëy€;øï ý]•|Å?¶ó¯í½×õ“ž•§XR( U1Ã%qSÆ»ø W:¹Á?ÿÄ]p_ ùù6aÎÒ"ß¿ÙL9ål  õÒËô5™˜P[Ôbx¿-e’Ý– KÍçÅ*Ì7Ê—+~ú{ßuÑ ×¾íCª æ½S£¦T7Q¹Ø™ µ3j»œšR]ãÐÃq¹óSjNè:¡«WÇ{Šd Ô¥:g´W˜­2S*}Fû°Ún­ËœÒ\cjRMÁûW,3 %£¨ÂlB¶CoRùZ¦T—Hi¨5Ñ¡·Â\™ÔŒª2Ég]2­ºà)85ŽZU°ÿͪµ&›Œ,sjCE²¿÷¦Ê˘«ÎmüÝâ^í-†öÙÚb€ ZrHóZG¤ÒZ:d^±©[gµé¥Î>ç²Õfh+ÕxÆpƪb™P®Käïÿ¸›w:Ö?¶#cpÚŠ”Þü©ŒÏý¸ôë-¶yÊ¢¼/ä¬îT9*—U³4'YìÄ*ñ¼¥¦CŸgY詘æP¶Èl›%Åsþ5k–µL-ÔܤeÒlÎÖœq³.ïÀ¼|ÆsyBßæ†ÀØWÆ OûlTË÷lÜûãÎËy’oò ½á7Îÿ?ÁpCÞï£.ˆSúöxúS>Õ>t±KrW[Ò‹¡X!÷VâNÆø}Ž®Pr1õbŒriÂßä}‰ãlb€ãlç+¼‡ÓôEGM;¸zÞÇ3¼Ä[)¥†Ç¸‰6rüšÇˆs_à]lŽ`{èçrö±›I°‡-f„Û ÇZÜûï­f'+øí>3'å_ÇYèÓ3~úº\lŽ[#ÎìGèŒÎÕÂȼ.²x]p(Ë4w‚½ô2Æ–ÓÍ70ÍZ6F;³&¢ƒ½™-Q›|HŠ41XWwë­·mú¯ÆÕêdòYD†ºâ×ñÞ«ø7$Ï*z#_Ê•¼‡˜Œš;^`w4« >øÙÄ(ƒ”G´Ù>εb-? \ÅoéæA¾È£·ôÇ\Å<9Á»£ôUŠ5c¥Eý•4F¢ßxôXñ nç8×òY>Ì8ïàöÒÀvîç~J1·ð4-<ÁS,cŒ»£W?ô³š5´¹"/—w.ÔK'¿ak¹¬ÀÕIªBK9Ÿ³ô°‹7ó]öúX·¾?óëë[çø…¦ ŒVF¨å.þ–R’ Äíõ’§šG8%û€“7øóÇ<¸#®+ÌÿUPyLÇ:÷mã®À³ —çííe#ƒ|„_9—y¨ÖÍsŠølHxeË3þ4ï B×7ª™wOÌy,®Ñ·4¥±ÚúuÎÛ0£3ÐÞ¡zÞü€Ãy'Û2evÆýYWdn~:¼tWøNg~œjì/û÷/¥ÎÖhˆËqwÒcž\ªtÀX¯+ªµY¹ÀÄiuÓê,,«•œRû¢®9ábc³Êd‹dW;|¡½ƒZ ^ѶÔôœÖgïúþô7?¾ã³ç·ôÇW9:ª¡ÆT(V$“Q\"=¨yJõq+ n½IÕca•éﺣݙiÕM†—:= e‘¾”Ò2©€aMSª+̦”žÓú;3J̱j¡s§,ÛbÏœŠ2ÉrszŠÍËìµ%&¬4[mºÁh¿ÖYë˜S^&9­*&ÜcË=i¥kÕPi¶Øü´ê‡í¸Ü“¦”M«j4ú´K+ͳòi—-]sÿ p$øë˜ÎÖ¥”½Ùïûµ¶:[,›g줭Ý:æ´î·d‰jÓǬ˜UÙ§¢Ê‚󜠼S.o~Òl—šgªã¥7>P·ýשw½ûÒgW?ri¢<•¿óžÔ]_ôž?λvFÃBI~1¯nœÐïéÉ;¸Èš1Í#šfU†N>Xìr:Ú9K“%eÓfr¶ioN«NùÅ„Ïç½…â¼ nyèö¬cþ1PÁ^.â)Þ2­eFu¨(p! 8/ïónª²¢I÷”kØžýÈOÜÝ̽1ô ב L²(1|{xO£¿û\ì?Ë\ÚK Û8ZKŸ#ˆ»;x„n62!Æ/á­y#â}ìaGð4'î5`Í•0ánæ~Z¹…½ ï=ÆQBÞÅE|†çyŽ€ÏñsždÇùV´Ž»ŠÿE†Ýãw<Ë4'#gÙ‘‚`j íä|–q„-¶$½¾a8ÎG™æ£Á‡gnÌ?¹‹—¸“®Ðd E+]\³$°2æÒœɺ#TR,ŸÑÅÅŽ˲~>ë¢Å {>©"çØJ·äsªRGVUÒÌ„±ŒÒJùŒæaų…2¥²S¦3-Âò| ûÓÍ2ÆVÜœûÔ#Ï5ÍÍlk2Ñ£þjõ3Êç<4èæjeóB3ëôkj6Yo¨GãR§-K©‰ùL JÌ'äFT*?£}HÍ´ú*á"gª–í™Þ|ºí±Uˆf¦U·¼ÆT™Ô€–N§æTlôjFÑœò­^®1™{κ=:£rØ‚…ΜÒÙ`¬\rJÍZSÊæ—H›o06­jBí¸ú˜pJÍëêLl¶¯CόʴÒfCg-Æ”š´’S–uëÌIÔ/0/¢†¢úç]<ª±Uÿ{Ïi­0;§¼M_É sCša›³{mI*_ãp!V.Y"½ÐÀPsØwùÑM÷,/•™T‹„ì~ËV8¾OSÚ]]:RNŸ3Z£5g¾VrLý¸º2“µfÇ'•œS³Øó'š08£´¶¢zú¦‡2ߺÖcK¾~Sß]_Ÿ¸éùÔ¢3>ñž²nɪHHL›*ÓRcÓ´þPc >-ÇÉ@Wà\o¦µ…^É9N ¬ãÛ¯ )gET.YÈ…­¥švÎ2áë Õ˧¢/¼‰NDòZAE<ÈFž‰ö‡Ãlåj¾›7À"¦y–—XÀ…Œ3E1OÓu$f"ó~ž—¨rà;©ä æ)â0Ÿc?}lfŽ.æs,f’·°…N~šÝÏÛid†jøs:YÍ6ÑEßa†¸…jªù]ÔZÖÈ/¸"îákœ’B‹Ê­ó^É8F7©Ðy¡v±ž>š™PºÎ—~éüW|µÇ¡~fã¶„?ñ‡ ¶´Æ—7‡KsÁË—Ç$C¯°®Æ•ik¸€U¬O»ñ7â ½ØÇ*Xh§‹S1Åuä%écmhWèdè8W2SnoBzÞJæbâ¡Þ¬­YµqÛ&‰‘„.מ§8¥:+sBc`v\*t¨>€êjËR~•Wž”¬ÓÓ]I|íªtÞàËk3J¦5ú§UÎiZl}Fù¬™„à|‡Ò{4Ï ÎZÌPÊ¢¼X½C-’«,Ë‹Í+NÈædÚLM«ŸS²ÁÁ@¬ÝéþøäÒµ ž]±Ø™3çÄ;ô¾l[\.+APcò”ÎÂ]ªÚô¬Ê-”KÖ˜:¡kFe¹¹Eú,\¤¯Ç’rs-眲,­¤ÙЌʼxÉ*3­ú멯4[$3¥¦Êt\.©¬WG³ÁVç6ÛÛîLFјú¤ò¤òZºcÂjS­ÍJä$RÊÒJO[2`a•éUŽŽ«o0ºÜ‰aM Æ$•ÇåÛô}ï™â]]5û—T›K˜$^fr…³¡¢•úG]0­£Tͼ% -Ó7¥d\í '‡ôé7>hÑ”²^[óZ«m -®©οíwmß¿yFPf]é=[R?ŠûÑf=W/V–æIxbÒ 3.hTx¨H+ygŠt”ªš—iuÞ„ ðB "ôê˜=µÞ˜q.ðTV\­-ckÚʬž¸? e9%1WžLëW—ww­¿­R5kYZ¸3¯%PÈ…NóÓ¸‹B'x–·›y.{zeúIƒ×¹š{B¹…EÜ™-©zcÑÉ÷g]ÇÖtÑO턲…¡Gø9çGyͧÈñ#æÙ–÷2g˜àzÆiá­¼Ì:ùmÄÓ+c9Ô†î%I}܉/gùn¤ˆˆ—ru<ÍѳucÔw&:Wû¸ŒâH*hû)c==ÔÐÔG¹žXt®VGòÛVFæ²åü4jˆíøÏL¢ÂeæÜë4šcq·†z9÷Ÿ;›.`–ÕLPÁC¬âžãs\Î1¾O’rƸ”µ¢åd]ÝU·Þvé5®%“WsaTê•ãjNp1)Ƙ©ô¡¸ó²ÞO–ï1Ì WÓÎ1*™c#mSG1OD¼ÁW)å6†¢+šˆïw[yˆeÄØ]H‹‹z@NED¥=¯«+¼bŸ%Á>fIPGž¥å}´“ä³È‚:“žˆ~g8wYø‰£°®œdO´f]@?|—u\Åhca´äìæO‘æý¬§í< ­£›qf¹†GxˆÕQEÖ7ÙEÀvJìqzÕü*}òpð‡uáÿåëÎãäªË´ÿ¿OUõ¾Tw§÷îìûJ;„ :0‚Џ¨³ú8úè,ÎÏÑÑqœQg·Q7pa$@d„ìI'é}ß«»¶óüQ9¾˜ç÷Ìœ¿º“WW'§êõ½Ï}ß×õ¹Öïu¬!þèÿr_gxΙ`Ën/VÐEPäïÓž XȰ±.¥åÞû²Kº=u{0û±“Ÿ¤)Ô\k}Öž¼ª*ɤª”QØTku¢))â¥êŠÄ«Ìdi3;ª/ïµñœÍiŸ«vN™`Zmà+u’iÉj+òÊZÕÊžÎhÎi•Ä´Ч-L;R~õË Æþà†©ñYÙŒÒ2ÓZC±´òqƒy9åÓŠG4OK¤T'I=åŠÑëÌENVI÷i*1;¨a¡îPPixX}›v]#NŸ^3ÓþÈú¢ÑÊ~Õ&’Æšô·¸Ô̘d¥ÉQ5í:'TO¨JȦ”M¨žQzÚ¼”²P°È‰f½U&_taÁ/œQ\g¸PíÆ%[õTš Å*MVšS3ß©^- ²eRE²…\¸|©Ùb™Â"jØœi啦²Š&TL¨NÉŸ´°_c¥©PlJÅ^ëW:Xc¬HÒaÁ”Šã–ÔkÔÿªu9‰:ûïþÞEw½§„Qµ{¬KQo"}6rx§ø…†ªM ª=¦5§bH]Òø˜x±ñQ e6Õ¨X$3 ’3%Ú+LöVÄæÜtoÛ½ËNúÉŒ’„ui?¬3Òà²){fLg펹"´´H_haÎÑÕŠbN™O>ëøˆ†ùfÆm ½·Žw&”Ϊ‰»:G\kL>£.o€%’Kù1BSkCûBõ<3ãÆ6UCg÷Ä,!àç¡}ü$áorV1—k` ³r¨=~GWö`ñ_ñ)ްÄW·»µ4Þ³4üàÁÜ‘‰;óbÄÙÃvú£ˆ÷kVä¥Â³t¥¸žb.ÝQb oáÁ(†q%§œ%¨}‹·rgDž]Æ­ ³ŒßPN)/2E/óØ%•—³:b=Ìr.?ŽTsñ(2q Â,ž¿¯áw”Ec­Õ ›_fšYæñ GY§yÓäèŒ|TOr&²ÜvÿÓ‘^ã‹\Ìr.ãu6óÆu\*¶°Œ3Ĺ,Ò” DeoÓ¼B?˜e˜ y–9Ĉê;uNï 3bvFýT¤Îÿ(^ä–Ð3ÿõXe¸÷ÒIÈ2Ö½A¹…u±°“q.%Ç0=¿?äkkƒwÜööÿÈÞË¥…^˜) Z²iþšLÞ¼ðì,®'’`ÜÉ{¨¤ƒ÷ç~NGÀ’™ˆº·pgãOy…w1—ëø7ƹ‹x0¢Ttø\Å|.êØða~û†ûõ>¾ôÔßÓHM‡C\’Ë*e7ÕÄIÑÏŸòo¥˜û裚óù5w1ưƒ]sóx2´ŸÏq‡XÆ»¸Žžä$W±…a6îo/„g·ð>ÎWÙÄQ†"ÈSayp™¡“±#7Çêûüì¡á’§’š§Mäå‹rWåçíVžðÔ%ü„îÈ ¾ÐâWò—¬ö¸ádþ†Ç]ÿqÜ,üo/òîŒßäýŽäýe‘[ò*CCyûB_ |k‘i³–ríJÓ.oSÜlÓ¤ uê§ ¤rRMêÆýÙ„KGý4ôç¡×rÖÄ´±*GÖX¹…b¡LJåëR¥šk̦å<{ê3±·}kh¢~LY©DRê§j Sßk]ÜÅqÅs4¶é;iÉCcŠÒƒ¦êÔ.r&«´X²SÛžËÊd L)oÓ™4Y*(3Óp¤öÔù}«[X9®zTíK6—š™ïôûóâ5ÆB± ÓÕ&V:8ÇÐ&È‹%ÜÊääüç[‹óéNÙyÊ«½)«tÔ“Uj‹õ>›q a‘O…~^jÉdÊl ‡ \IØ·5/È»«Z¼XMZ6gÁ¨ðpàÁ˜ÇCoð(ËxsÜ/XšUÍ1Jø»)ó˜(Ò­?³æ IDAT›skþžoØó-ý÷r<03í?ó™ôùs¥Zõ~ÜC+|â‡î~’iòlì)ñv…öÒÍ«QÜÔï#?É9qsÖÒÌ-üˆÃ‘äý\îc–b~Ç5Œ±—A&g;«™âÝQ³X`±^MëØOÀ>J‚€1—ïÓSÈ‘`?¿`']ÄHs-etr}Ô¡†‡äA&¹“ÿ ‡#¼ÀŸ±‹§Èò4·p!ë©%Îݼ)ª"ÝõõLòK^g†^ncWD„*HÞ°×ù¤¹Tï§Ûø»£¤õ16òVVó)Jh U[ûÑwܶæ¿+Wý©Ôig÷¥…,Ë|4mì`![#Bkg°šOÀ3\ÍL!B†û"%EC”GÜÀ[y„ß2Ä1·1?f_hš«y‚³’f¾Ã¶HÚŸd3íêñ÷WŽýGÀ«Bdrµdy ’#“âWðjÞß³ˆsˆ'汄ø?fš[˜C ùhš—æeVñḨº‡Œ±Ÿƒ,ãeÞÎù)»™Ù„÷ÑÅ ¡sC8ÊŸp€Zèe’q†û¸›x‚“|ŸÏ•…+‹Ÿ]•þæaŸÌN6§N}´Í“7¨êÙØÒ7Çׇã½l¦ÌšZ—µøà65{û…îžr÷m¦Z…U¹dN/A -°œ•yåü¦ÔþR›Ò„nöÃ11KTd|g”!Så øbÞU·N9ÍH©¡¤ C­ÐR¤²XgÖÒ˜öz{陵³Ê‰ç…~Y²â™Üåû²«Ž”gšÖÿ¶½Üð”ê)çØÌ¢c›6¹áÀ+õ榋åê¤І4Ç,,5KþˆÆ~u)ùnÝõÖÕ˜¨2=¨ìa *¥ÓJ ô“ aøÐ¼ŠÚ×[*g³ƒ’ÆëŒÄåæêW=£4.?¥’`H}ƒÁ‚u7/^erReµñPЭ-i|P}x»ÊÁY%yñuÚYšV¼ÊëE2qùB0UB¶L*­$._c¬OS^lVɸä¬Ò UÍúÒJ&UÍ(›c¨GkA¿^˜4æÅCÁ”Š S‡-ßhwV"&?ª6«(`ZE£Y%£jRÊN<÷±äeך8׫E²Úž¶&PTe:M\°Àà¤dá*ÓÇ wk=e΄ÚR н­Ì“Y«-)’«ÖÒ£±YKÆÎŠÔ«3O¾­äê#ù–L¶ådñ‘Ç:ò‰˜;âv§åX—w°Ø“ì òë'U¶ê™ñà„e#²î˜U›Ö4×¥£^9Y£;Ô6fch*¡;ë¯B›òæ%ŒVùv¹)ãÄâ–θ'm¿¥ÊY ÞÍõþvÒD軌»)´š0P_­&/Ìù ¢.áñ¸Wjlù³‡ÂM'ýèJc½1߇B+š¤_ur!Üdõ˜É3N]ÆyÜøóУ9ÿÂmÔ²c ð sÐYèvak¾“YžàSÌð$OÓÏe¤¹Š –sˆ•äI±ž÷ñ"¼Be¤J_Î÷Èò‹Éð¿ÙXœu;àXB›9Ê»éa-ç0È!ÖðQáØ_zƒ6­`/+aˆg8Àµ$èçbš â»ì¦3£Íç½ìa#'ÙÂä©xóÝ$#¿l#‡Þ@‘=)øZ¸ƒ¼Lûùy¤H¸˜·r°¶vßÿÀ |k*Õ…9–²’ãôó Ésˆ3ô°Š[#«ZŽl¢‡æG̤Qv²‘Zš˜di=Êó`Ì_‡~Ã\Ž‘ç6þ“EFV ©*@þßP®.çÀMP^ÄyL°An§šÍ,âu‘=íþˆ|u-Ó<Â&^ š3\@‚¾C=ÿ›}l"¯†ZC{ɲ•1‡Vnçeþsy7Opzx‘ \Í9œæ0û)ã-ÌåUnçgTUyKÞŽ¼9<ĹܯN®ÈØ•ö3ú½¼Ù×gÜ»ÜH·î ¼¨/¬~ÜþZrÖNÕÜt4h˜Î~®Ñ£¥î,²%ke¡`ÇÔUY•ól^m`ƪ@¼ÑìŒ÷‡šK\Qš7'ëÂrµ“ž.6³&-3éLÖ ×&Í›úÌ·W×Ô'êóaCuâ35UÛ]'5á‰JË'e‡­Oš“R³³Ìꀸ€é:cT·éŠ)I+I˜M)S»ÁñqSõžˆYˆ¨-• •Äå[ô¼ne‘éeK'[&Gß¶-xæò:Poð5k{5wkM?Ç«Ó*æ*l­5ÌwºO3âòý 4(dØ'×mÓ Út/tr…ÃK6§ÜtB¶D:'žVRÐb¤—KåÅ+LªÍ‹5¨0]"RÖ¬¯ÄlN|Pý¤ªiåÓ*Šeʤ:,(`Ÿú4åÅ[õtš›V2®ºÌLN"”šRyÄò“oß,Z²­½Úx­Ñ>Íg´ *3»Àᔪbùzý}ª’¦:}Ä¥N—ÉËIä%bõÊg,:íhÌÓÓV)ËØ7¦«¸ÿÒªûon«;˜Z÷7Å[.Š·,Nì¹EÍ„4e%&C{26%Œ†y­RlŒ¼3ÌaÙ¨¢ÐdÂù¡ §ÎkŒ«+¶5#FO^嬩Y]1+“ê¦Ï.¶g¸Œ<‡ë­O˜-Õ6iÆ|)o6ôÇ,Lɪ`˜m.ˆù཮Ø^Ñ8}Å7Ãøªø£üÑG“Þ“ íŽùlø\·{_õÝ%\´5óò¹áןpï"fXľÐNVq†¹‡6V±™f¶SÙoãd4Ä+D~$¢ûªh•°‚'©c'oçÖhÏr-û©bg¢eØÆˆ£±™‹iŒ6Lócgm˳Qí4¼¯ ~mì‹JÚ¬¤’Þã¬e¥ó¿¨z£EWU$Õ>ÌÅ\Ãox”UÌãhœtšr6p.•œ Ç, zÃá¼1¢,Š~c¡V5ÓN†“Ѥ±¢ÊàÎüz~ÁÔÿŒ¸}0•*ÌWGÿ½õ”0‡IFØNq„òë¡?šft ÒÊ3Œ3­= v°wGtkøvDÄx9ôŞ‚ Σ2zG¿¯+˜´ßÆ¥ÔP_Ð_þÿÄ*³ôs4⯿…ÿä<:#‹ßo,ºCŒqçN0IŒ§Xq:ÞòïQN°‰~gi¼4ÓBõœ¦(ú(¿Î›˜e/y;i£™-üŠ‹ibG9ŸŸÇÍ:êŒi¼'”È„{ÏêG²ïsl^ìôºÀ¢P%ûø–Kâ£×Øßd^»?ÚûáÇr.ÉÍìå£îP>g7%ßUygÂý3ÒìŽY•÷HÜÅt…þ•5¡C¼;®)ãŘ ï§­/7§Î¢)‡flÊ[Ê™ŽÙ;ëꜿŽK$œ;íœÐñõ FªŒ¨})pnh{`ùä¿ãÀýzÞ“~¶"öÀ Á¶ëçÚ×£xXSÞò¤±¸–“ÚãŠ[ ®PÒ+Z ìµ®Å@\fV2%Yk´GûR§'—Ë•)­ÓÛáüVµFæžVÑ¢ç|»^²|±þ^Í-k÷}ã{«ïÞRnºI_Á¥´Ô± Õ¿pÁ,“ïÔÞ¬oBõ˜š9†²ËI)[àTL8¢¶PÊdêŒd%ªMÌ*ÙomƒÁFýý ŒW“oÓŠÕM)o0V™ „Y‰>M3ÊbÂŒ¢b™iåÅU&ÊÌìµa¹#¡X^ü •5ƦUÔm4pIJ9†Ûu5è°°ÚøÓ®ì¿iGÇ?}Égïœê_8«d©£]Ú:µ×925mqŸ†>óGÕË [^$l–]h¤Ûâ3þù2åErƒZú5Ïè 4¶_u¤û¿QsðÚdÿ›&ÕdôÆœS¾måH²-ßuzNgq(••™±ŠÁŒI®çžœMieÅÞ2lN^]Þ…Ô‘'ø17Îú~Ü ~Äuq r†›4Í:?ïp(àh±ógÝíœÃÒEÊGÔÆudµX—Pš— •ðûÙ³ŒöÐtÌ™9kWLßôs{ô}X_Bß•žmˆØ™ÕóŒ§x,°$,žñùm&F¼|i\e&û]ÇŠÞÈ ¸•å„ü.áãy?ˆ†`bÞŠ(´p$"¢a%—ó0K"öÒ>>ÉvâlŠ 9…íW<¢?<Í‚èÙ7‰EÑE¿b„ã4…úø)\ISüœb®¤šñˆæº.²÷䌺ŸÃÌçv.XÞ XƵ|8 ;.Ðynç 3ÆAn̦ý¤x'‡ rb¶GÒëîÿd˜d!'é`m„Dœ áâÈw<|ßxÝÁµ´Àÿs¹úa*u&êŠ:¸*ñŽÒËÛy™ÉˆF‘}C­*Øi_c»¢Öjœ÷ñ‡,â[š·•«¹†$GÙõ:G#ÂÅgL>ÀþH˜_eU[Ùû†‘Û¹šS¼7"ð6ŠìçöÓÊsŒóNð5óg¸–•ÜÆ6®¤›5<Çêx„ulã¯x†­,"dvp*òî¥ÈDíóÉ(”òfþ á¼¼û)-rSÞWÈÐx8¢ /É õðŽÐ@h#i¡œµo«¹aâ—_+úÃr‚5Œ¸ôù†É›3¯-ÏÍ|GëÆÌâïå^.lk¿œ—¬‘ä—Y;¸+ë×3ÖĽ;¯4î’œTÜŠœú -NX¿Bã°Ì´c|µÒt‰«¦äòÚs~7ëëyóâþ¨•q‹HÌš Uò¼ßÍû+þ ¦%¯|LVc`]BcNQÜ9‰#kóùhÕ>_6žŸ¨VtÚú¤d’^Ë4œÔœq4Ð8ë•Z%µ&âRꛌ4>ea¯L [ª¸ÖèŒÒ˜|­‰:£åLYžSÒ£µ×þ„yc’5F›õ‘U\êùÇéxÓ‰«¿¸iLÍ~k°Ì‘¤±Ô‹Ë¥•$5é?m^»®2©©Á`‹Þn­³J;.s4Î*YàÔ\S*ªLÆåZô©o×UazJå/;o@CÒx«ž”òY%1ùéç\Zgx©cCêcÂÂ8q³—òâ…æJ‡2Š&UN+_áðˆÚBÉû îšóú5Íu¦8Hu]}øÄ·¾´é+W”?vYi.Ó¯©[2,ÐÕ,=hþI+úžV½FgZÙI »´¯µ@cŸ¦qaµyóHQ‘‘ “å¹}w•©’¸|ø³wgþä§k~z®D__¢zú?¾}ׯr•ñ™ß|<´bÒ'¹/&˱Ðc¡'ŠüEÎάڅâ•âc:š<:×¥3.©[êÏK³>g,른³:sž ˆ»‹Å³vó0yþµÈ-Sz³‚´ç³î¥>tšgã®l -dUhU¨LQ¥í_H¯y!ÿ·^¹ÙÁ+\ë`ÖÀ‰¬ÆPwÆÄÉÆ­ s×ûÏf‹ßÿYæµF?~PÛ°_b+Wñ 72À®Ðvj¹‹_GúïÐÁÆù;ò'‘ðÜÇZ¦ØÊOháYÆOy‰‡ÙÁqîà!6ÓÂþ(ò±——¹œÞË+‘R®ÀR˜Žz”å<Ì4Yêhgäç±›89öÑÏ)ó!æ{ùC^e’aN°‹DÄŒs1°ˆq9¥ ³•í‘ á\žãL´ûWRiܺ9acC&çŽ(|ª‹I®ã¯˜Çâ|‹‡ßP®ÆXÅw Xmíß¼ã¶Uÿ33ÑÚÿífbÑÝü¿® Ê©f†¾hXy%Ÿ …gyŽÇè"Ã>6ð ^e[4•îäuÚ™ š·òoÑ‹ï&Ç4ÌDjˆ=¤¹!ò?×D¡\{9Ã6Òü-ÓÜ‘ßÉOØC3ã<îæDä¬LÇã4qŠQ.˼D {9ÆÛø;jhå1޳—ÒÀ|ŠèV\ïãÿÀ<Éu<™×ÇN.Ì›åšÀ|¾Õâ¶)ƒlàyb|‚:n ƒ'Æ_SÉxàòñó?ký¬_ÍÅ‘Úþ”¥§¦¾úpþÑ=ÍÅ k‚¥“ùWßdæoO³3¥!k=¯Î Ü’÷¼vNåt&C­gtŒêé4•õWÑ”14kc“Ò”‰¸«². œ dÇœâÇKJÈ»;t9è ÜÓ䚤F\ʉ˜þ53jrÆsãgâÏÝêñ'Ú o- ²G‹”·8’Ôª˜X(O˜s²Tk©\•ÙáëVwi+“ZnhHýˆø:'¦UT˜nÕ»Í%½Z[t7êŸV¹Fj\u³ÞY%y±3æ§jÒ#_ùâôÎ+6¾û/vXU"FУuR¶H" `xêÑ“?aq‡…íR¿É+ ¹~óœ™ïô°9° ¸Xéà°º”²“™“RVm<«¨ÌLVÑqKÆ%Ѧ«IB6ˆ,À;Í-’™cx·«(’éÒ6¥¢ÚÄ”Š"™˜|—öŒâ^-%f4äÅN™¿É+£j;,˜V±ÜéPPcôˆe÷]ýZ͵/ÞyÍ­Ó;¯LçÊ–:֮󘹳Êê|ÚI§2Z«Í‰ÛU«fPØ|•éa £j‹eVèè´î­]^çÐ%KŽí|¿ç.Šäý£C£ù/÷«?é|憉÷o ßÿëØ_| ÿ¹?Nü朼SµÊÒ¶–zä ·•˜7d}àò&õÓz›=5dóÃóÄŠ]ݧtRЬwÔ§óªBqO‘ÏP˜É‰³|‰Îa§CEáYUاé*òZÎUãÌaI E6ðë@M ÑPMÂê¼—ÍòRôZþ†kLo§Œ/1—_±02}NPŸ÷Ká)C#±—kƒ»ï ?ý3•S‰›÷å½-J,:ÎNF‡¿¦† B{…Ûù¾Îõü6ÒN?Cëà?£x£/ñKnaÏñ‡‘Ѹ߰*ºia9è¤7²ôþþª#x=¾ Kš2.§_SJ=‡¸9 #.€Us\ʹ<Æ/GA$éHË}+?7ó ãþˆ4ÿ$£ôpkÝ÷ÃHO1ÀóÔE€ö©(÷d–¢2•ºIæ0ÊÜÏ·£á|%r4ÕFÛŸÂn¬˜|mí×Þq[ü¿+WϦR‹ßÒ|"0h =ù†{×þ8S;ç²”NÞL?/RÍ7)~CäÇuð¢àÌý:7FÑa+ˆóIö³œ‡¨`St+ ë¸öH…¸>jª°ŠM¼‰'Hò>^a«i¤»©e œä^p‰‡–’£Š¿-“¬rÙŒ#yËY:w;gèŠyo\SÂg<Ä…Lç<“𼑘 PZk1×%}.­­ÈGCçÌQvB˜ÎkÌËNùeܹy¡ºò‰Ì‚oo¬Èw>œoÚ{é]’)MMƫȨK«J3ÂQ%YõætiŸ¯³UO¹T¥©VCs¼nUÑ‚µ¶[u dJa¾žc–.w$/V$;¤>.?wë¿?{çɵ÷nØÔÕ×l´Øä›íÚ£¸Ru›îœxa×­µÖh(˜QVb6+ѯqŽjƒêÛtW›¨29.Y¨+eRƒê Ô „mºRÊ4Îs:«¨ÒÔiócòý[õ`VI‘eåR ¹Z##êf• ™3ª¦I·¶R³s 5ž]é%Ò­z*LÉtX0&yŽW tkPõÊ[ûÚ.¾þý嘚 U•&w¸ð€eREòÝæÖ{å°35–l²;´ˆT²¼Ä°dÌl±§'œ3¢|RuLºNßž|ïŽôé¥Á¾9«¿Ü+¡ùTIþÛçÇ¿ýÎø·ÿ¨´ÿçi•¡=¡0.ž68k㘠¥’ÓVgœšÐˬ֜¹yÁ°ŸÍX*Êž0?æbÒqËBOç]—ËúUL{Ìkƒ*b¶28/ôJ¯rMÎpÞTÌoBSqãwqwæä|3p.‹Ê^Kßòm[ïóÍøê6ê9?Ú']G·pŠfvó,![8ĶХ¡ímðóÆy˜N¶pŠ}\%ƒV/aœ±‚Ç‘uÜÃ&–ò]zù;¶ÑÀRgÇø+y=ê92‚½‚~BîwVuµ‘jöGúç?'CYôƒëé TÚi¤™)Z#rÂà î‹|óx™¹,&d¿åªˆ\p§Þòs¢„­sØL/—1/2.`Ì·qQÁã·‘åq—‡…:x„vs.;)á"Ê¢ÄÈËæÇLr¦žÍ÷|/§¹Ž,?fWS3COÌWCIf( ?¼ß ký˵ü Op«7óRþóZ²Ïÿ"^è‹=” G»X³™ƒ1¿Múç§9M[܆"›‹<ŸrŒå Í¡ªÐ—óQÎ{Cµy3Õ.)³,í¥b³^ãú¼¾©R6mMÂOš];¤:¯.Ð8ª+/CŽÁ¸¢P¦ÞŠr¦Iœ°göHyâ¡Ï«FKöýv®±N?vδãq3ÕFËTΚ_®3T—’eã¦ËdO©›P5¦¬ÞHVq† AVI•\A2^i¦Ù@Ÿ¦1E¢jã¥föÖ¾ýµ _¿¬ù…EÕÆÇU½b5aBP¯8£¨ÎHÁ“Ti²\ªÃ‚"™åµ¬S{»Î23q¹~9‰´’ƒi%3Êf•Lª,5›QTj¦Òä ‹ÚuU˜šTIKÈ5,Ä9N©H+N¯1ú²sËM—KÅå–9Ò§y®Î„ܬ’´’Y%YE#j{5wi¯0 +®v]gÌ›Uºïæ£óWü®ñïoÚ“?VmqNbL²ÔdÖÌZ§b‚vX8nYF.£®ÊÄQíyã LT™hwjLohQJlVÇJ#2£‹‡sOŸçÞ[búã6ÎèÎø!k“¥U‡,sm……i˘¨TZÑêp·‡‡¤ÒÒT‰ÛZbqÎÏ2îOøBÂ8SY#1-¡ÞœÇ©MX÷H¨*P–÷t­E3~—Wx>´”c–¤í¬6šv*ážPm^ŽÍy„ªØ”pcX¼§ä?9«Çor^=Å2*é"ÉbÜÄ}”ÐÄVR„Ìò1*ɲ€)깊æOyð ^¢šaÚ™äËÔp—y=Â5²‰Ç#ˆh=qÖDô€Í,¡¦Ñ¡Ç7Óȳ̃âò ÞH‚Û +¹„SÄ q}UÊB+ó^§9:ô ±X[£Šu„Î0?BTQI³43ʼøÙ½ÌjŠ%Á¹e7Ȧ#µÞœ(³bW°šcÌã5ž‰Z½ZÚȳ”›9A’?~ç2Á|–0Dïà(!µìe2Š9L±—Uµµ¿{Çmwü¾\Åþëp/Ñ/Šøý_ ¿aG5ÁNnâSÑŸ4FIŒIV#2¾®«hæ6gwmŸ ñ<ÎÐéoäRŽÓýàÿuýè íÚ/y¼ÂL•¥Œ³‡÷Ž@±…Ú¹ŠOó"k9Í^–q»Xʼ‡“|˜û¸€Ï°ŸçqÊèæO¸–FnåWQèY]ÞÂÐykœ­åÿÌnª8Ÿ^àœmMfxŽoE¶³zž¬¹—‹#GÅ.emÌÆ@-ƒ9Áù$Yæ•Ùԭ宎Jà6özôÓnú”;Žp­íŽQ˜ÛŠñÁ¸ïÏÈ1UàŒ„v¥TzKÞ›Cçæ=E>æË\ÀwnäKqGåKr^Ië,ÄÛ$”×ûẋš]Ù.6kÓiM¬Äò¦ó>S(ætÜÊÐµÅÆFò*'Œ 9‘÷D³=Å>;sÏOOªÈz[ÊÂFËsæÍhžëL¹éíåÒY¥3*:Œ$&ÍÔ˜œR3¤á°ÿ¯ÓhNÅÆµëŒ‹µéËu+O«˜PuÐÊ#—%OM®=Ùº}Qµñ”²P¼ÎÌ*GÕ'ÕMsé×X,]nºÆh–f½…©à¬’^Í ö[3­¼ÒäÇ^µ®°÷ª4yÔÒΟxÛ“§¿úµÔÓoËÌMZXbv‚&ÝsŒÎ5Z$Ó¬wBUœbU#jcfû4ÍJ2§B.¥xJmÖ¢fKô$Ñ6zù‘éöùã÷†¶eÍæ¬qù\ïiQ5ãëåJ+]8®©ÕD¨!°`HÛ´Ú!½%^¨'Ád(žs߄̬e¡]yñ”Ö”šÐ_„¡qÖ&üUÞg󾆼GBKfuÞÜhs¨ŒD`}Ì…¡Õ3Ž…®Ìú÷Ð3qí»ÙÅ}e:,úþø÷Çþiml÷‡8ÄÔż9æ|‡½Ì­¶¾Üªˆ?ô5Ê9˜°™7ó<l¦«¹”ítr/·0–ðèd»ž"nà_*¤ªÌ‰òÊ_¡‹^z#ùÀvçߢðØvE¬¿wò ¾ÉGùh$˺î GÜã¼F?—8F¡'CÿD/QAsÚÂÜÙËYÂkLRÊ5œne/³‹)ÒáïÚâëO^úXsc>öâ‡êÍŸT™q0íüv}]þ.k:mY\ã˜ê´Ç •¦•ϘÈh¯ÔÙì‚i½ÔŸj`OÂÊÀcy[é®WŸs(çíE«T%LÍj ý}Ì–˜ëB³E®K;5k:¥7t~Ü—šl÷CÖg=Tä£9f^èV~›ðž¼¥e/.:}{îö…oåùÀS ·æü&´‹<·ð¯MY¿Íc3» q…¡&ÞI1³Ìå'g)ÏÓÉ$ÉKÜžUTMÐeƾ+çLÆ#¡ ŸŒÀ§SQbaî—æÃ죅r^âý|‡óÙÂØE+;XÈ‹ PÁ9ôùFÞ#d¹Žrc4&ÝÏñ'ÙAÏó!汞8Û˜fš}<Ö3|€?dû#•™rvD/x0%ŒŽÖ+9ÆIêYIKʉGUc¦¶¶ü·Ýùß ·¥Rk¸éÿvßaržõÙ÷?S¶wmßU]­šU-Y²l¹7Œ1Ûà¦`!„ÀÄTCB0`06˜Ž{·%[–\du«kµÚÞëÌîÌÜ÷ûÇèæ5Çñ&ïþ©Cš™=´{ýîëwžç÷dœséŒ&PÞø°…ÿdŸä ÏF$’s>³Ÿ„$x+…|„C‘!ð~¦£&˜§8Ÿƒ‘ ²ŠÆ™¡•åd„œzƒ%?¯îãmü.4?TIFcl‚«ØK†4U¢éÖò;*hçdþ')é¡@2BÂçñ€—²š6>Äü4¡=¦&ô ØÌž"Í $óݾÑná¿8ÈMù·ˆù@Ì÷8+p)ê3ü¿æî£"îp\m\DŽ’xšÖ˜ðÃüƒl“Ow[ü+,¦>°,f]B:f6´Ä?w×fž‘Zï²Éàä½»£ÉåÔLòB¾Þ4¡-i"PÁobæxÏÇ”®œð/-¾›41(ˆùF¡OgJRÚÊèÍ8x>çÝãN^d*¦.aí9’§•ªa<æßÞ:b2iQpö’p™ÌƒÓ÷Hë]WóñÊLMMëoR\ wÀàá1[“zÚ-íRÕ«¼Ç‹“JC ¯ó›ÝªgÍË(¯“+SœU4¤nVQ•½Uê2–R1«:%]&Xe¿¦çjÆ+¯Þ±ñ¾öÅŽï³z®ÓæŸcÏ<=ÝZSJN69QU¹z¢ûˆ¥ÕFóp£i¥)%K)6s\[ŒvÇj ©cdVá>«ç^àTçš‘™¶®äéæP|BE\Po '‘‡Î(>nqZñ:¯âå&jO+ÉJVWÙ§±Á@ 1ª¦Âd•3F›Ì;mn–ÝÖ­±çQoSUj:£pJyB®¤ºóØæáàÀê±×—·>dù ú´Ò2Ó­ºã²d:T—›-3}\bL¼R²×ÜÕÆ›õ˜ìÒW¨¥HiJaZe¡kzV‡øÅÔ_~>49ª¾T²Y8cq•\Ÿú¤-ôÛœO Ž[ó›„Tƒ³&<š²{ÔPào†'  =ØìŸRJÓŽ~S ®ÕÁœÊœ©P{Îzö…‚˜ßå4'mÌŽ[”P—38é§”ó6zµ4GÛÏ$½%류¯z6îaQ,8çÇöµ™XĦУÔq6÷²›;C…qkyˆ*~ͳlæ!²óx‚ã”ò8òçü$âhg9îLyq´"»7´?T;]Kœ¢(}•ãrb<Â÷£dË<^Š =Ù¿EŒ2ÁÞøo.ã7²ž#QU^Þ}ç uòS.å8Ÿb:šÿÈ0×ÐKûùG^g1¿åƒÜÇrF8‹su4žˆ(…<@H)qjèæIöqe´=z(šÊéˆ ;É•|7ÊäcEt£*ˆ‚Û5 išwF"Ë}ÌPÂh\}‹ELRÅGkjü/"éTª€'˜&Á}óî† ¬àiNó@^CŠi¹žIîå|ŠXÆì'ˆh½d¨# ƒh꜊nKyËF%ó¦ˆÊ#ÍmMÑßÜH7Ó4p‚&ǽ“F–²‰o壛Ù-Qåñþh9û;v‘àr>˜æ)ZâÊh§ˆ¸€6Æó\ȘÆÐƒæJÖQÅ~Þ›—1ãg¢$/³ŠWYwEè>fâ&8Ê1.` ã–…Ö2¦¨£r*´6ô¯¡Ó|5ìäT°*¡4´ŸHÿ·§s–uëÛg ›ËbvrOà9·ÒÕaëYô1æÁ+Ýú¸~ËÙ|&nÎaJ++øÏJo]W¨kVc¥¿˜±!ðsJrF+08岘™Ðʸc1—°œª˜OÅÝZäõ˜®¬Š¸•¡XpYèµiçÌØ[ëXN[¥Ëõå4¸ôžÌOÿº¼tv¬·ÂŸ¾/qbí°ÆUz,žP•K˜W£oغBmµ2TÔ9•SµÔ¼´ºãšWè+Ö°D:¥zF®[Ó°†¹N‡bõ†Z0jùrÝ£*& ]èP‡æ¸°¥&5zõŽªû®hÒ“V:­,O+®5Ü­%Ý8öÒ×5S•­Ú±âÏÌ1rT{¹©=14,pjRy­á1U1aŒ.s§•.s¨ÚhŸ¦;ïÙ}ߟ \rçÆ¬dL˜UP “U0£¸Ó¼ËJ)MÈ5ê;hE›CjñõùqJI‰ô„ÊÅOY0«£RsFa•ñ¬äBµ†ÊMVšU3©|\Õˆêm[f›6<¾ô?.­3U.U(“§iL)Ÿ«kŸ–]ZFXlxŸ5}ZªW;ЧiŽáAõ§=“ÖP«ªNÇ”¡Œ—æ*œ¸m[éþµ%¯­(V7k¸Tý¤Ò Þª²¸Xmê:©"Õ)e¡c•´š´‰q3ôÆ­"¨âü„Êi¯—UÚšð¦R ½>ÌÜÀšR¥³:ÊÔeÍykÊã¡ÅÁŸú…¡v–ðs†ØÀ ¾ÅüЪ¸l•¤ìÌ ¦)¦6pOx†Ýoý.¤0îÍUf†ÏÈ6ý1ïŠ[* =zK^dFÄmÝ£-ô“ß3 §¸—¥œÃ/)¢ˆ«¹³Î­ƒ¶E°Ëy7ÍÑ1rO°…ãœ$Gȳ4ó]b¤‚,'¹šj ¹†Ñ³øf޲–0âÏåùïäIž‹î ùYu oËy?`CLUÌüàÌAwÍMÚ%|ŽÜËyчÏÇEF³% ÒÙ ^CÀƒo8ó×µ'‘ܾ ¤u¬ˆm ɾAO:qºWD§Üöèó‡oxåQžg+Éò$í¼˜× ¢r(<ÇÙ¼ÆJ¹'zÇKÙÏPä„ ¸Ó™oa3‹£ òÿ­]¥R/0Ÿ÷ó'è#›ß\Ež“?x.Np Ú3g†U$ÙÀjøb46QÏ=ÜJwÌs(Æ™Š}äà£.–¡¨=$•.ÒÁ­ùÜ_h3»ØÅüžÅì Ç[XB[©ä“Œó3|˜OrS4,ÛB)~ÇÛy™–ȸ2ÃA’¼Â¹ìãÓSù4}lMsÏ3—Õ<ÚÀ‹d>3yá‡N>Ê’}?°7°7Jv°PI1m”qWó}ÞËíüž­œïoˆÝZºE¸ÐÃ'»È¯“îÔ§‘ü­ÿ¼Ï]i`™PAJ]ܱ˜ŽÐ£³.d=IkfÔÆT¸0çɬ’¤·3x“ZÒ m9?ˆ;;Tœ`ÓÂ÷X–u4°8î÷¡LNSö }Sj)Õ:+ÈÒqvòé+3ã n¿'þÄÄý9+Vz¾Ã#å.Lª •Îèh‘:G÷!ý­j“š§”µ9Þ£e“½¥Š,éÓXdh±Î ƒóôí³ ÇâjÓqS‡5.Õ9 á„¶”Êb™Ý5 +¯¾ã}K—8^g()·Þ«ÄFÕL+[>uzÞËGûׯ„)G-©6Šg%K¤õ×9¦½Ú脊EÓJ+ÇYÃj[ôœûjæ’_Ô t]g¨ÒÄ) ‰õe¦§•&å&T›éרi~©ÔbÇK¤šõæÕµP<£ oR[o°@f@ìÂ=Ö¤•L)ëÕTelVQ…‰*cG,m®9¸÷³lþ§ KFËw›JioÒ_iü¤…Õ& d3E:çé5÷°eªW;0£ä¸¯ÎxG(³u³æO9Yi ÞÍýÿygö½ÌôNÍÚÚ*Oû|`-CkBÍ^i¶}ÀkRv„ªi¨ËØ“3ú +rîJ+ M'¬Éiœµ`½©Óî*rÑ”_ \Ȱ8T4£;0>«*Ôè<ƹŒ²™òÀ½9-|?ï®ô` '=ZZCE–„аäÏ=±GA¥ß§Øž‰»~œõ¼Àvz"£òÀɬâ¼{0éí ]¡ãlâ×Å&*,M y‰¨àCœf![™ËÆÙÊ_±Nm¿úÿãècÞ»Õ'Ýñ{wü<~Y[bÇ‚ ø˜Ù¹•¡ÐPøÄÿxŸ[žwýÇ<ó'úuæ¾óXáÞ»b6ëGR.ðz̵Ô„’¡….Íy’…¼¨jeüŒ©¤/§9pGÂeÑÓÚ"½5Æš ¬ÉŠë+÷|Jc(×hѸâ¤kêTå”(H©žt$ëóu®+_¢w¢o÷LêÎÔ7_K•&“ÏuÖ¥lJ[>íÕYU1…‹ :kÀòƒæ-PxÐYý&9ep±à%˺•¨ª3ج;£*¥*­d™Ž“ÚÊLkL‰÷[Ø`0!7O×9ïîœ]ØõŽéçÞTfêUë÷YH”Jõji00Oß㋜8iQÁ%Ž®²¯Ã‚Åi%ÕFK¤*M$y7D›¡Ø³ ïwsWb‘ùÄU­¡œDFᘪP|‰#)%¯YŠ×î°°ÖÐióBñcW˜˜c8£`JY¿ÆGlºÊ¶ÝÖ%Ãj7yiLõˆš£ÚóŽöœä) ñCíÉÉK_nüÞÛ2 Ú̼dÉ€…mNŒ«,5Ó¦s\}LÍ+Ž8™Õפ4'9©|™³ª²²IfÌm00iSÎúï1³jì›'“·¬ ~õƒd×ÙŇ[×­ÝŽ&Är*)¬ÕÒmy†jÙ´òŒ¾¸éjcSæ¯ÒÙç¡Y}M9C³zs¦B_éθ#­:nMÒº¬Í ›b†içúÈ Üó³VžöRèVR1ŸÌz¥PeÜ .ðÅ”ŠIñÀJbùXgàõðåß8=ßí)û:Ÿçi.àk<阻XÇVÚ¹4ë5Ö°ŒwnŠ­’<Èçs–¦½Äƒ¼ƒc|–×(dY43s1ƒìŽ´œ¼?"Ÿ¶ÌÓ’ç Ë¢™ÇèH7Ï©qÖ´Ÿ³›YÊ ˜ 9ws‚[YÅËÔñ4¾œgç³+=lá0_c)ã:fØÏÕh=$H3A9~âö¯yìçF6òin¡‹i^Šxâe¼—­tq2ÞÎct³› ˜¤‚§£¤l–^Â^ði~ãLéîf–ókÎå;áÑèü¤Ï™ÆÚ®á~]S“ø_¬O§RKù2iv1Bš¿¡‡u”³™—Éòe^àôDAÚç( ’râk¼ghç0#Ô2³"ÆÞøõI^#I 'h£—½œî¾’Ÿ³“EŽJ7vrœÝTñÆXM= ¬§˜6òv.bšr~ÆÝ$£ ²>®áûpx&î·ˆ*î–™Ÿ£–Ÿó^ƨ_¿`~„ñ½ž—)Ž[SZÍvN3AŒ2ÞU“ü€CqëB-¾Û=¿tã1Ï,Š_{vì®ï…wU»ëåÄž¯gÿãÏ Ïwèl8u?Ke¿î·úÉGÌœ’=Ÿyü3ëyIJ-VŸH>ò“Í93ìHZúBÜ©Ð9\¸@˘$K9EwNYÆWæx[µéq•ö³,ІLg «)´`ÈÞ9F ¥-`[©¦´ÎŒç¸©Yi¿¢2ýƪô´¨µ|ÚY)ý:sž*¿·bÛ’ÄòîÚCïÏL¬^á褲:õ…:ÆÝ_bËY:†µÌÊfTÍš®RêkZj ¦¢´\B츾R]jkMæQk âf¯÷x»“¥Rg{-.|Å‚épÎ%©Ñ…™Š§6eV+‘î\–jMžJL½dÙ´Úœd­á@¼EÏ º6·9Þ£¹ÖP—Ö~&^²qŽá„ ÈìÃÅf¦•M¨¸ÌSiÅ•Æóÿü¸Å1aæˆ÷kMùÊ1Õå&Û?Û¡.­{­R×îè¸ÊãW˜\k÷y¶¿dc¡Ì¤òYE»žüì—ÿmL‹žu—Ú1«h¾Se¦ZÑ¥µK˸ŠB4Ö)j2Z"uPÃaŽ.U^­«Øô)‡ÊV.þUv]OðãáƒO‡%±;?,ß¾ü`ÝžÉyEæf%C5¡ßM+ÍøFJñˆ…9>&V®²Xᘊ:#ýê\CYZw~ S˜pmÎ}qkÇCd=بgÊ÷C›BIãíü:náúƒslšu$ð¤ 4Õ()´>eàBNYà Æ<_¶Ñ¹sÃ9nn•ý+YLŠ…6r‡#»Ä).`/ 饃‹È°I°,Š©åÙë8͵¼ùøŸg2*žÝÇÚ¢Èl–% SM ¼—sø*¸²¦¦øæÛ®ýŸÆU&•:ÊI3C†y<í(—ÓÏm„„<ųørs襂\D1?aA¤N-gQLŏÐ,›èzC-Èó´FÙéutþ±ï~=Ï“e$‚á–0—}ÑFñ€ö/³˜³ŒöQÎ êx•ܯ凗'ž»"ÔÁŸn‹‹‡ŽÇÕ¨ }.¡54L]…®Y ¦¼œµ fs`oƒé)Ç7?4NUÊØ¬¬Ü„¶„Wb…ÖVÙ°}Ö»ZcFg ”(šRv„Ú*¿ÓGŒ‰¤? Lt ̘ûSeLÇ—êÉ™)6Ìþ&K3bÓ¶U;\¢aHiƒÑŦ3êG jŒ ¨ë6o©ÑÐl½S5r*‹ÍŠˤ•–H°¨Ccì¹^O”׭ع¢oøÂÁׇêÃþOÜìS”œ®«:Ô|–㵆3 dò€óJíŽåá¶9É)åýÇU®´ŸX‘ŒÂ • œJ)™TÞ§qH]N".èÑc_xfÇ>?ɮޙŸÔ–ýôGë~ågIµp3}â=Q7U;g:)§‘zŠégQ¨44÷Ðß²–ïFUU»hŒ*ŠøitXÍ6~¯r˜‡©a §"_Ø ÜD!ݬ¥42nŒŒìÇ£:ŒNŠ"¤úz¦CÇB½¬çuöÒÇ%ÜÀßÓLï%É*¨£”ëéæÝ,ÌØ¥kVq„.³œ»£ôÒDœÙ³85öæH䌘ïL~îóüžù\F‚®¥œT„ù®ŽÚtÈ/YDжq.»(c†W¹’"ç4%¼™Bv1Î1ERÙ¹¬¡Œ+8Î+Ô²Ml­©ÙpómÿOãjW*õt$#]D7ÅŽt¼µŒó2|ÿ»#ƒH»z€ç¸-¢7p#\ÄñèF9ÚO…Qmó0øoãQVòV¶qå f5ÔFLûõÄéb§"C˾ÎçG qˆ·ÐÀV¶±˜Ûx€·’b–›˜%Í$F] ÓË #´åô³›wó4{9ÁyÑJ3Ÿ'ÛÃ1®é íŠÈ`Ã<ÁËìKxsè!VE¿*aèßœ<ßî c~"ÿ›°Úׇßíõ†>÷š†±s.³$mÏ(™¨ÌåÊüÃCÞÜë@ÖSˆµÿO IDAT-ö×°7ô[R W%l ü4”àž˜2^YhãÈí[Sºb&Š][fYÊÝ¡µ…v¥Õ‹Yúæs,iåR•CÒeWÚWhtŠIGãšBÏÍZH*5Ú1£-é”žÈø4üÃ7Ã'[¼ØG)صFÿ‰65ýZºü,ge»ÂcZ‡L”YT¢8¥¼\zLQŸ²*©Qõ¡ø¨ø"]UqÅÅ f°2'ѤwL¢YÿkRJOjêU{¶#YEeUñó·Ut¿ûÙ}o>9°nf׿ìæW*wµoœ>0¥lØœ!µÅÒÅÒu†fO)˃Ûû5¤”,s(!Sݪ{Äœf½û­ÊIÎ*,”)2›QЫiDM¹©œDìLÒ°ªÂD©éaµ%RÅÒ#æL¨(–.2»Êþ”’PlP]R.È[ÇU…â¡x½ÁZCýŽ[œ›’,5^(8pdzíw]5©<Æ uFФf•tš;¦0!6"WXcº[פæ¬ð¤Ú@]¡Â´šù¦2²Sæfê‚?ÿB<=œ¾}O6&ö¯ñU˃~{Ωåc/ŸŸ›­˜Õ*KèÔ5h1>kþŒæ1#ž °¡ÞìD±év“ߨ×^ªfBGÌÙ¡o%]w61kvØØdé”lhEàÅÐSsvBSè@à™”Cu–§Ý¡=<ÓDZ‹Cu‘ÆÜÀÝáåäµsù÷£˜˜[æº×f|ƒ"ÚYAGyŽÅù¦½Pÿ¡ðN19ÉVæEt×~.&KŒ7G´eìâäë–ö2È*#[Ùnžf Iú¸œOãŒÊÝç1ʹìd€qqš"Ή°F}´Dî³ü0â6ä£8¯°–[ØÃ*&#˜Óñȼö¶ˆ¿7Åa’âï(ŽÂOøG©ä dm‘»“BG÷ŒGæ½ý¼NuŒGù°¹¼Äqæp,ºBä×’Xý]ã Øï vRÁ,òõôû"BÕDMÍ%7ß¶ùW?‹·e(Ò ßX3ŠçÙÇ0—°9zõªò\Böò~:ø=ÜΓfðž½&^ Ãè0ò£ñ½;²‹¬â{œÎë+Œp:ªm>MWT!ÿÞ¨·w‚^.à—Ñk~‰o0É¥œæ÷QññS<Ï¥üŒzøÅ\Ú¹B.e¼À¿`ˆƒ\Æ 'ÎFæ²’6&Yϱ¤/*ÙËÅl㫬eñó¹ŸNþ”ûy%auìÔµáÑ»Ão¿äþó}â;¾óóà®—<ú5#¾ôà’¿ùàøsW{¹ôuõ^…]¤}ð€ÿÞêGoóÐO¿W¾÷ëLp)ÛB߉Ùô_y¡³š­Q›qSÂõ1g…²¡o‡šftfí .m–y-aq¹;âål˜Ò2ëKÜž6X2«±Â+µO«ùɬsS [©µ|Ô·Rª¨‰ÛZïÍ™»¿ØøÈ¥?ûJ¢ ºà[Oý‹Ù{Ïʨ6þÐü³5¨R–›P0â;—9|Üê9™9f5…âi%sŒ$åVx½E÷€úŽUHª™ëô£•ÒE22³ —öâû½øäÇÎyhAÙÓç¶î©ÛÿñgšŸZq|tõ×jÐßiþ1‹Ïr`ŽŒÂas&T´êN+Þmm™érS¶èÎg{ç™ëô°9 ¹"³ ¹P|XíRGY>¬¶_cŸÆ…:ÒŠGÔäÉL-zæêWÙaa…‰m.À<¹j©#I¹¤l·Öj£¬Üoåˆ9ÕFQfzBÍþïügÓW>´úôh±™AõÇÔUÊÍ*K—;Þ¯eRõ2‡SJë÷û« ï3–¶¨ÖD¯#9ó&L¦Õ­6ÙyïgsÏ^¤®2øâ»Â;~æÃÿß¾<þL*|ê’ìÄÿ÷Î@.£8thÒ]cÞ4-–³?PW¢ªÜü&¹U: ¥ûM¤<š±l“ªŠ4›œQÅü¤ ÔÊgÍjgžñí¸s.ÏYNu 5×ßÉZJaÖ%9Õ˜çD™ã~ÈL0É*..0/ç7._ªëv‡Vñ¤ùϳ‰µÁ»>Ÿ»û¡ð£'Ü}ìb¶ñ{.âZ.äâü$æOnð:£ÜH'¿âÏØ5Í^Xàd„ÔË?ª¾‰ýü9læyNs)SÜD/k˜Ïãôä ¬çIzéæÜÎ ÑÁ¥¼‹ŸrY^YœôWx–ë¢ÅZþŒ:ðáÿv–°“ œd ÑUI‰¬}yÅd‚ODzaÞýcz#Éæi^¡àÑè£naG¡xŸ¹ØRŒói`só™¦XGCQsÓÚtó´ñ?‰P £Xq>n{O1çig×2US3qómïüÿ%²·³™¿%¹0?ĵ\Ã}Œ3‡i:¸"Ôù¿†æ¤Wø O¼aªÕñ>Ò´²—Eõ\0_äýôãäx¿Š^ê"zÕþ,š¼ÊS,åEâœâÖ³Ÿ÷p7ã\ÍÃ$ÿ,ÐÉv^à­ÄYÈz6ÄÍ$üEàËŒä/1£‰0«y€AÎ;Co*ØjY­ÏÿÞw{}p6¸ëI¶²‹½¸%poB‚͡ה½â“qëßb20Ü/üB¨:ô˜¡ÍöTxæÛO&?öÍðèV©—]Ræ-#?¸$þ5>;ß¾8¼õ;†>fÕË^ÍYYä 7{pkñàg‹ã® ÅâW¸iƒg?í=»Ü‘±k(ˆßel’W'ÅyS¨'ðtÞ·©Ñ[KuMjb~‰4êlšò\èæÐÛCÕ³:Xê ½œX2íó½’çd-X¢z؉iËG m.p~\ƒ9•©øqæ® n]Ô}äM³ÿ÷ÎÜkwûê?ûå×þìýf“Z²Oª •4HthXdì"[«…%6ïV°´Â‰a‹pˆµŽf%óÇúaK™Slv\ývç_í‘N-->aA±q•óêšZÖöÐò¦ÃM™ÁæQÕõú–ý|ÝsOéòo/­3جwLuV²Ó¼óm¯4ž“<®­ÊØ„Šœä§6xµÔt‹žå^T_"Õ¯±ÊxN"­˜XBÐ¥µOãŒâ~5FèÈ·œôkÈItiPY*5¦*)×i^¯æ@¼EWN¢@n¡Ž@bXí ‹æëœPÙ¨žÎÙjc¥¦Ë¤*MúÔÃë¿·!9U´Ïên5µfªMtšTó´’nó²&ZÜßé`ƦE.*/0gƒ×º”e–”g{2ï{"þÝ¿í½ã÷³_ÛäÖ=‰}GÏY®Øá¦'Ã} ºwsÝLC•²¬Æj% ¡tÒ¦Œ q¹B±BÿÀu3ÌøUʺc>2æ3YÇgµ°pÆ#©YíY bÚCƒY3Ÿp€§‹œ=×ê*”ºʆœ2PäÐÕ#eM³7å|3æÙ¤/Œªšp)7Æt'-¥™xà/[3âÔ*'³œG;Ûx“sþÁ£ÏÄOݾ^øÝ5¶=à“w+8ËŽB®âïùë8Á6zCµQ7o¥;SÆÃ$ÙÎI |Ÿl£›“Oï*îç#`ëmŒóò p1p/rƒTò8]Üû†:IE–ü·p‚µdy=,þ5㡆 šCõ´F(Â6.çûœ`/í¾ò¬óZÝ} W1S³.T—°™­I;â²¾•‹yÏ"Uµi%“ÊC?ŠØÏ'âÖ„ŠC[C æ+3Yìœbs\^íøÚ¤†¬™¸ßä¼”°¹úÒ—r%ÓÙg[§ëS3%“ÇWÆv]ŽöÇF×ÏkP3®&ã•z'ŠÔÈÚ[¬l»ú!KÒ UWÉ ¦ÍR[&™”Ë‹I-zªÍ18e¸Li\jT͈¢*¹¹ú&•Wë­7’“è çæd—:Þ¥µGEkØ}ò㯼ë¢rS“Êw˜¿Ì郧Í=¡­ÖpNr@È9óu.Ô‘“èÑ\ sT{þó#§Èì!ËkŒNª(–žRHëҺđŒÂn­Ef dg–™ÊJÆ…§,¨7ð¬‹õ±`\Y£á´’Aõ“*VÙ¿Ýy‹œWÕ£ùÔ–Î㛪W¾0¼²÷ôÊñ‰òDÙc›§f²) ³NM›³Üþ1‡—É (èW˜UšÛ ¦SóD³œ\·W.>|êÞø•; ö,iúÈŸ–nÿèoc­Ó‰‘úØdUüd[ÕßoH‹Ïˆ*ó‹g z"Tx9Œ©…õª–;¿Çp¡UIW6{%e2§Œ¡—Çâö‡„ B]I# Îb7çthÕ”pѬÁÀåü´Ùûú­œ8ãcêà{ü%g³-<ó{ý}^ŒS`]Îv®gOÌ7cSí:Ó&æþ¸ócZ‹Çüh¯³¾n›†£ÂWý×—ã¿=öíŠ÷·†¶óöFõð•1oŽÙEÓ‘ïM WRÍ"öEÔ×!®¡‡‹˜d’M|›NÎî:ùÈð¦˜)ø)Œc_Ò§‚3—°ŸJ}š\DÊÚ]­òrè (aUħ˜¤š‹£-ç{¢+^?¯sœõÑðŠYE‹Ì;y¸*Úçñ¸×1ô´.éå2Úy’[Øs~܆P3߉¬Ÿƒx*OCg>£,¦’çy–çéŒ<‡Wç45‘¦ÚºˆRVpN(ú%Çf}ÌÕ¤YÁwy{LKBqhÈÔ ±m×ÅŠ\ûºO<ÛÖ{eG(ÎI’1™¸/…®äª¸¯l[=³ì·¾ÚmpµÕþò¿¼~‘㩸·°#æ—¡I~A«ázCýÞYž‹œok ÿóqgµzì†Ä“W„W?¿ïb6Žè +tšâ wÜ¡‡­_/{Eü½½áŽcOÏïùd¨8aˆúœ õñï ýeyEÎçã9•ÃúR¢2›·²‡Å¤ãžiV4©!®(ðPÜÅ3Ö9kBP,œP0«¢À‘rÇb®Êè+SÓ|dñdMÇì _]wpÕλ7vùöø“—-êqä7ßÏÞµªØ‘˜æœßoRßC‘v¤­jTXîx£‰#²ÔÏ(Ì85­ñlûËLuš7!Ùc ~FñÁ+º3—¼pº¶äp]퉺™×êJæ|çöºÞxÚÄ€eª‡´ŽKdítv—SUqå¡â”§SY³£T¨Îé™ùþ¿ÙTôÃOV¼¶pÄñ¡{¿â}YRúPÉ {¦/ݶ0yÒ³“S®IžñAìI9¯PYRm©‚@iÌü¸Ø¤XÆPÆ9#ã¶—{ß”ûتas­›¦Å4Å „²ì®´0ã(}Lsœ†Rc³*fÍåUžW<«-ô" ‹e‹¼=kõq[Â3›˜åŒ']ž4”1“pqèç±Õb7ü:<üC ( ý?„Ýgxg™îýß³Šz—¬bÉ–å^âžî8…@HB é”H ” eSØ0 °ghû¥ 5B=¤‘BŠCœf'1Ž{/r“Õ»Ö’VyÞ+Ïž½ß™WŸ\$û°$?׺ïë<ÿÿ+CüüOõìÍìçŠÔÖÿ0ö6$;Ôµ…bV`F`{è(7ó$gÐÚDO³‚Wéà r̈žrã‘—½ çHFϨCÔòWöÐÌAzèáÓ1ïb[ÞÝ\J5Ç¢WºËbOq‡£`Zá6oS„DˆEÜ9ÌæI9Ìîˆ}>Ê"žŽŒÀ-¼‡:ž¢ŒcÌÈûYôÚ½—Ù´RÊC °ˆÇ"³â…ü2ÂÕ¨rÓÎߣçê¢hµ‚îH@øµâžã2^#Å'¸?¦>Ê8ÌüˆÇ1ú‹HPÎpÄ\&Ç)/´Áþ{›ð3©ÔÔ)]⊨¢[Êû#x«H|‹éäyÞÈ=å*~5·G¢“i‚AN2ÅÛØIè3Q|I´—º”=,çCÌbÇ)‰ZgGDÚçEQã!äšSzÔ…íèYÌn˜É…13ÚIV1=ÒD1Ÿàw<Áj Má6w6wFœã÷ð|èЋœûϳþr¯nöØr¿>j庨g7Dš¿l÷ÁXMvÁt%Eî =ÿQ‡~eõˆ°)<ò+C/r1æ±ÕÉ%¦ùè¡p[ypÏ‚‰¦àcï .2ƒaõ óž¶m|!&XjáN©CÚÇM/·?æ—o 6„³ÓóöÑÓx"Ô‘ðâ„ 2ê²¾š]âÀ4Uq%ÔäÌ໬«Ë+)¶2å(uq—Ui±3kN“`Jë¤d¬IÛ^«¦EYÒYCÒÃþZ²·.îøäÑÙž×}÷yu;Vûî£#ÿö‘²C³ËW—7^gÚ!Í#f¦$ãÚªLôjLÊœT6$Œ)Ë*)¼ÖK wÈSÄdK%Ç”u8Ò£c˜Imõúób;ML—hÖ“VzÔŒyŽ”/‘îלU2«3ØÿÞgÛžZ”+VQm´Î`—–¬dƒÁrãͺ›u£ÆÐ¤’U=)Ó­iRq‰tL¾H¦Äd^Œ  ÊÈn GUN)®3Ч!`JÑíE¦fé,“êÓ”IÈNÓ›”=jæš=Ö¬6œ‘,”±ÒJŽ­=¼ùÇ?9ëžùÓvEÏú:Ö·U­?½khN—Ù­&ûÕÉ ª ”Ì–Ø¡uRSBÃJ&”Ž)Ïk }?§¥^uÕmOMÛ;gpê ×ÒdOâŽGF¯ß”hšªÿÔÇ'^>3Óõ@â·éŸl!ˆ©ÄÉ-ÒÛ«7ÐÊë,õ©¼AjÒ¦e|)­&«‡søþ"—vk£“½q™ùb½ò<Õ ßê¼AC%ö%­šÒP€Gþœ÷ë¼²„Uy x50-ÔÊw*Ì(rKÊ]œ¾¾u—°*oGΫ'h <Á‡coËWõÀU\@3I·ýÅ;÷¹í¶ÄøÅù×K?û·½á×{~^hOè^.á>rˆ—ÙJÐÈã‘äâBæó0o‰ü½Lq}\F;Ûhâ*¦¨ä‡ r&›Ù5D8›¡ÈÓq0’Çìãbv²J=Ù(ÐGœ­$鿣ˆÂ}Ñ­ÝS,ä$ïá ò8oçQkø?ÒÔg±–§£ÐÀq^cê¹Éµ<Eµ÷“â¦SàR…9ÔÑSäȇòôPæõò@š«IñF¶F›¶Â1´àÄ:Á;Ù\Xý÷ãê¹Tj;˜â],¢—³y‰íìa’>Eê³?F$òÂÅàÙ¼Â.þ™c4s‚·¨ið‹g<Ôïš¼¶3üñßÂýsø‡éá‰G 3ËL;nÙÓþv.SÌ Õ…¾EYÌ-aêtÛçÚ”öÚ?É]suÜÚ¼¦Ðv„¶‡:y÷„s8R«(æÌŒ#Ia‰ªQÓ²²­ª&¼!/l0=«oÌñ@uÒùq3&¤ã>3Ó[Ò*‡%¦ŒÕ8£QI—uã:F[¶g7þ£iõÙç{3‡nœÜ|}ñÆsK§þ÷W?²òØÓm9íiMízÇôNø~Å¡¡¬i 2UÆ&˜°»Mó4£•ÒbSÊ–ÙY+ŸSq\M™Ò‡ZX€ä4ñsm¬4¶ÞŠ>ó¯ö䈪=̳o·EmŽÿ͹í´ê=zâÌ“_úÉŒ»/®ÍTÝeñ GÔä%e^°f¹-êö™ß Hm!ï^e´Ý‘a5¥R úKL–JçÅ3’µÕsÙ=¥h\y L+I)-ø±õì7¯ÖP^ü¸ÖˆÊJT^fÛß\xºM'´«éÓð\°¦î¼‡†æÖýòªt¦ªLj®#­ªMì÷É”wJœf_L¾Òh·úI¥ÓeÚ3§AbRiÞ¼5ò½ñÌÑ[îz¾cê@[^>iéäûMwMxˆÔ?í¯Ší~çääÒ¼…cGκУžÎØ“wYÞi^,òÌ\ï õkŠ›œ¦}\Í· §&&Je|cÔÖŒóãff,ñö´?çlÈz2ô&’,Ï)Í+ççü!”çÚÐÏ’®Ïkš²2+Ê…-û¼ôYYgpE¸£H˜å—œ×èÆ)AóüŠ‘›¿âkÇ¤ÏæÏôq½woòË´½|ñpøEÎI$/ ï]ŸüÚ·ó[Îæ\þÌÿd”ß°˜›Ùέ§uUt͵Ûë£÷‹ÑÏ'hç¸ç –ó<—SÇQ£ö=ts‚™|˜=¼™ç‰1Ư§ßÎv–1'òf¼…Šn¡cú2}41›5\Á+œÁ«¬ç ä8J’#|G#§×ûˆ±…6´X\ÅKر ÒóítE§ˆð”˜Ûsô3“FY¶±‰s™ÆfRÄNù®hÞ¼×èf5$Ç!8Á(=tÑÏ'x…,Œ²Ÿûã%Ã|aêÿw\ÍI¥ÖSD /³·Gw»{ˆóŽü‘hàÃüšÇÉàõOwšJ¦8Bc}!Å~Jv¥Ð-8AD ´®tĹZϼ‡5ñMæ³€4m¼™8ÒÄ×ÙÆ÷Ù˯…FÂ×q÷§sO‡¾úBK¬”ãÌåGÜÊÿâ ¤ù4æ}•¿°”¿³„ûØLè¼ÐçxoäDžÍ${ÙÈÚ xKdÀšÃMN³ž‡©¥Jǵ#r•ù“?…Ëc§åöhI-ÕÁeLç^ù²}Ðg7…}Çîm~Ñe`£‰sØA†¯Øw³=7'‹ÊÂÔKùzà] ,P˜¬Òç“âá ?«wÙ¨}\‘¶{ÿ é´r7ÛèÈê ]7XjdHC^>ç#~‘·‘…NÄÝúP‰ÆR;Ò²q{&ÍŸ2ªJ9”P´Ðá½F™3©;ÿÒ7Šn½;ññ+Y•Íeò‡—®xÂ{^ ×Ïêyjq‰ºŒïÌQ—ò“1ÕçhÜl÷„æ%zK÷«jÑ—ỦbbI£'ÌŒ‰ÅŒlU×Ôh´Qß«–÷+:©c¶®"¹½æ5s±ƒ³t÷i@NbTe©T¿Øl½1‰ùömI´Ž~ä'.ÞU÷ÌŠôxà [z4u8\0ƒœmCAÿ‘ïÕ8]×t]£ªFTÇåçÙŸŸ®«Gã°šZƒ“г»ôMžÊ‹5èÅ 7{G´·;Ò­©Gc¿†¤LF²_ÃZÏКïW‡:Íjs¼[sÁ'®Ng–o?ýs×wgfŒ«H)RsỖ¦ÚPå²GÔõiì2\¦&T×d".[¤=/ž2žW–QÓUÞ6úÁDz{*c¹9¯#¬Ú0¶tvÑ`óW.Û‘?0VŒΊ©mP6*:úvÒSFâÒ–¬â¼¯d÷»&e0Ô˜4oØaÖÍ`ԯƴp"ô06Ä´æÌ erú³^â‹1ÿZïÍY½y¿›W7#ðáVs&­‰;Ÿ…Y7ónÏÛý~ùª<¬d܇ŸòT‡žÙ¬dú¸ä\1Ú²ÓÅ÷»·ÐfÙ €_¹ô Ñ‘ÔÔéÁÉ•šžu_øÍÙù-ßfßä*¾Ï£‘èö-…ÿ†1í†Ð}|‘'¨f#Uü¯±Ÿûx’Ç#$ù¿ó.*)¢•Ó"´k6~’ærœˆnÉæsˆgÙÏ&ž"Íq:£çá<Б}:od;/q6àcÜÌ#5bŠí<ÃTSÉ£ìc'G˜ÅÛYÏNæó W“Žùx`*´—;˜Ck„KÏR%´\Å«”rˆW#ÐínÆ©àFŽDOéÚ(÷±7óXÔ¦šN ËØE7FA„Â_÷)¶D%¥/ÐÉ\!¦ £$SµµKnºùúÿj\}+•JÑN-Ìf}Ì¡›ùEѸ;©csÉÑs]`(4ƒd6Gh‹Bœ}§¨—OFÇÏ'9“}t°$BóÖn}Ñ`ç º9‹·‚Ûù:ãôà\Ê£ ÛLf’æþ¥¦ñqvqqTü¶ IDAT4üÓTÑÂ_c.õfŠ!.b”Ç)åÞÊ~*¨ ÔF&ìI*HÐ^ðoÆ”nÝÀøTs°ÒEY£¡GÈq) ôÛß,uý5|$¬…W<¬þŒÑíëÙÃN:™íއ|ùÏ&BwökYä¹VÙvv°Ÿ~úÌhôÞ§ªãÙãgÄLå1żuÀ¦¸•eާ^íl›Ò2jù¸ÕY/ ‚×;˜ïŒ¹=´ŸÒœlàß縶OÂu”“*ˆ¡k|˜¶"ÝCÒy¥5¶¦ÍŸ’ŸÔ˼˜ÅÇ6±9¼ôD,_^ñËÛ*vuÑ¢=éë÷ÄZ†óW=¼°<ñ—Ûj´Î•éu]“þ«GÔ ™žó¦)GŠUö›—’P?ªô :Sªb&BãIÕ펴Œ«¯×=CW¡rý)­&&v›]a²QO©Ôˆª.-E2ÆóâíŽl“­–J(Ynk­¬}ììàŒ—OÎNmŸSvÁîžÙ¥}jŠL‚ýÌiÒS ùÕÊ(êW :Úmáˆ*Œ«¨4Ö­yLåkVf%Úω¨î×0®<«2ºß¼”²QUIÙ cCj³º<ÔV³×üZCÕF[Ö6qùú¡•‡K—¼ÿÂÿ¬4YitRwùqùj#múOz_ñ¸t§tB~Ì=ÅΨ7SÖ¥¸\Pe4mlšÁ¢Dnè÷„#%±_ Ú@º$¿øƒâO?ZýÍkû_9+·îb?þÑä¥?ܘ­\Ú+ >°¸Lé”òbW×X•÷ÇŒï ì[[¥1g¼ZgÚ³¡Æ sJ\6fu !07ÔˆÕ¸#¥çø%c2Ð5áñ¼óãª’Ž—ˆMÚ‘pÚ˜[Ê—r8fzhdÌ¢˜™1ŸÊ?¾Ú~­TìKçxåt¸‡Œ0GãkïqßZrìçíÜ«vÂÚuùUƒùiÝáG–î}ÅàrfRC-¯PÁ‡XÂ1^¤8” s:ÿƹ\GÈûée‚ ˜b˜2Îd&ý$9Ê0I¶ðëèa5— VFÑåãÑ\áíìûÿâøša…gc–5™8Óbæ³3ºkˆ°pÕü˜½4QÃ^N0É>Vp:Sôs ‡¹€‹x†}lç¬ÐïC $ܨ‰ô&¨bIt+˜ç5Š#ñÅxôØ_-Þ8‹~æ³øk|>Ò‚t²†¤(g5‰’ ïàmœä>ꡆnÚy5Z¸TscÌZJjjÏøozWe©ÔRlá"úä|깄gÙÉåQ(<áõüÏJž ­ ÍaÃQ·y/íôÑxʯ#Z!ÈTm¢)úª¢sXÉnVð)*¢ûâPë¯Ì¦ ¼™­ü®¨¤;’ÜÇYÁké!ËÂèx~»w†NÐÅ<WÚ¢ÚØÀ…ìç©À§"Z똪Ô:—dzh t„…ŒEÌ(uÚŸb’\Ï·èõZ΃3¬6»OQ¿§ÆõG™í¶ÎøÎK :ß`ç •yC‡g¿E)/SAŸ óÚ×¥5?ïxèDÜYy›¸?¦%«sÒRxr¦O*Òö³$t7Ý1óâ:âZâêÊeÒ&¨­éw¤Ø†b+L´z¨Ï/9#æý) dJ<:i-é »cfQóJèyå’À‚r9?¾û´O¾3?>½Keêµv^nអÿõ¦ò]W×Ê §ïW•Wœ×Ñ.5¬–ñéQÕµ†S†¨Ë(UÙh¬FzBY“¾-Zè)S™VÚ­9›e_‰üf§Íqp†½Yýq•‡ÍšíФx—ú*©iú¦´Vêj1‘ßk~ã`¶ùÁ³ÇceñÙû{®ÚÐ9'Sòê⤩#¦u8±ÝÒRézsíßjù”¢“Km«6’•¬06¦b\y¥±>Ó&”׬0V*}М6Çcò¹pŸ†BGxµMCj»5©-8!còê¶Ü¸wçm¾y÷ø›_ž3‰%úKË«¿úî¹Â;¼¦*§-ÐsRù4éãJMœT=$“ÒWìÚcÃJf;Þ«ûƒôñÅ~}ÝSò¹Ïße Sôó·W=»jBq|¢|Æ ³GŠOsnwjWCnìP( k©²`R˜slÜRJëUOZš3Z®4co3#Þ:<¦iDEƒñq„¦3ƒ=©×ç3˜Å9 -¡|Þî6sGü&ë@ÆE¡Š¼ò^K;-ä=X¸O =ؘ×h²/þà²Ò$;çd¬ ü&nih˜J.ò‰ßzø2ûöD/^ç’³ý„¬;ÍÚ»Øã{WØÓGcdxÄëV‘æ†håÓÍïþo¢Çèa5ÇxŽ<ÃtÓËÆè?ÁqÞÙ ]!¶‘ä6ÆèŒÎ(ËO™ÃÇ¢ÏÑD”S¢?ºñtJ'Ïyü‰9¬c G#þúWÉSmKùZä¸|7›¹œ9åp7 !ðôh¤McVè.:YÄ‹tq#c,f9?'`±œ§¢oñEÜÃ}-Y'BÍ<Ê,.d2¾ÌÖIÓ9ÁÇYú;¹…³ Ñàå‰ÝÛÛìmo²dÌO N_z(øÞÅáÐì˜ÅÁá¶ð¥iÊþäöž:Éj^Ð<â½í~tÝœA ]$x,´ˆ—Ê}°DjJÈY“*òâgâÚóîãÖÐæ¸Š˜é9S¹×I*óBO²/oå"'»=6fu½|©7M(Îk*ÖZm"­,T×]gyF{è—qWÅäxƇR3¶.Þ8½/×X¢«X}µ©ª-‹ÆÔÇÔM™œò™roW(éÒ5¡º\¼Q¹â!íÜθ3õÅ…µa¡ŒâCºZ%jŸ0'/Þáp£ÁŒúaÕmzk¤²’,è1ó4;šu”KÕ]`ï.˪)7¾Ñ¢ÙŽÆ mSZxî´—æÆ¦’ýµÉ£_ÿÉ̾̂ýá”Ò¬ä¸r‚1³šîD¹‰Au‡ÍÚfY™‰F=ÉÃƒêª WÞiñ ÚŒdÁNíuwYÔ ¿ÖP\~³• Ùé}õú7þá;ý·ßð–{\õBÿÐþÓ7í¿©~ý’…Ìé/Ê&<©aTk™Ø\ûG•ô˜1fÛ”¡¼¦˜Ÿe ”ÈÏKHŒøY\{€¢´Ú‡ûø²;ЦY5ü¡ß„_ýYâ¾Ëß³ÖáCʨiIvÅ_ºdò}ç?ðëU?ë˜y%ŠG•†çÌK;WNk(ÈHð@ÚzK¦Ìs"¦‹¢Ð’¼×²zøóp´„Ø×aјÞP<æxÞHhÅ”‡BŸ ÕÑD%m1×–Ä5‡z¨æÞ˜7Ç]ê-¶¸Êeãþ8+ï§\ÏF¦ñ€ï<çç’â`³Ž9É3,aLf«—þÁKÅzVpf³cöÓ@oä]t’âRVó'¢lzW´ÃÞ@{$ª¿›Anæ4Šø½¼J y%R}(²â‰`€å8]Q’K”Ìq6#8ΛI“çInb35LDÂ?€ð[j¢äºò;ÌYÍ+öÚhç1.%ËL~1–®ã0Ìàjvq”ÎŒøÝX@ûø'oæΦ3ªýœÁFÆ8öŸï·±€íôŸ²îŽn ߯ï#oâ«àBžà*Îà~ê(bŒ°;TÊæÚÚ÷Ütóªÿj\=–J`Œwp0R¡:Ìc\‡ 'Ѐ"Õ"N籈¢?ÉÛ¸“,ï‹Dò™(bža2šU¥§K)¦³9Ê “ìaNzs€Jx_ækÈq w±’÷SÍQ8§’m áš¼ýœÃŸyÌç·làlžcÇøÃgñu®¥‚"îâC,`gq9^È ½“G8I5 Uå˜ñ˜µ¡fÎJú‡œWyÓÙÎM,¾œßÎOì †BÓS~¡YÙQWîŸXjø[¡‡B3¹Iì\·Û¯ÖpiÒíù9÷ÆÞ°4vçgCÍ2œÃ‚9nš°&gvN<£8ôtÞª)7‡ú93TØ÷Ù*ÓŠÌšT³¾F~Ü¢Íó’¼¶œ»z|wDw uÊ—SJC Ħì+Vœò¯ygl ­ ÝÄç§»~Èâðš¿î^R½çôѰ®Be›^É1¯æ¨0jʹ¨R+wlTû[¼“ߥ£IzX¬F¦Ý耩IÙ…z¶YÖ­y@À†FA§ÆReC~ѧü­¶¬wA‰ô„ŠZ©¡¤O]NÙ ­­Žn5c¥]ý¦ ¨[f[JÉsòÊ4ÌqlМ8Æm•ÛÛ‡ÿºjûÛ_Üýí?ï¹uÃêßÏš¬TÛ®3&d³YÉ”Òv#ªÆTV}Ü¥KììW?®¼Wc±Éb“å&Žš±ÀÞ'\’;©ù|ë“2ǵí/oyæÎ{Vu–\ó»Ó˜×ôü¼ž=ç¬L\hW^br¾Á=fµÊh·%¥iRý”dŸ}Ûaå¤xÜé kÎ÷Â&Œzû¢1½£jûÜ5deú—Ÿ®³'®}WмrÞ×Þ9¼96®H¨Î{ ^û„éi³J .{ºmèÃ9ùïûÓ.žÒ*iÖ8.ÌÛÞ&×9®±Þäl-åH(£š¹9õÜžseBSwp Í«!Ë·R®ÌZ•—ÉË2cÊ?|q Å¡ŠBoý8ïO‚ ]ÔæÃGÃ'ÞšE[ÞáI[2ú⮘nöˆ{(a»#îG·²Žƒ)«CQÁvŽò1^­ò"US~š²!´˜rúy€)c&¿åó$‹ûj`Qè~zy“¬åöÇÝødhŒQ¾ÃU\Êã\H?¦‹APÉCœKÏEÜwð2eôRÂÄé$Ëå\ÌÎf9ž"ÅBä"êhäÎäïúîãœGš€õ‘_¸<ÅúÙÏã.ŠÈq!ë™âDdâzžçöèšq‚yLò/|’ÅÌäH„ð®ãEÆxɈì>Èi …"6²Ÿ³"*^9ÿ›wp„®(µ€sØÀnv1ÉA^ŠVNG9H*Ú >ÇMµµ‹oºyÎ5®¦§R/¾#§ˆF\Áüˆ2n IÇÉñWþÂ]Ì¢›Ÿr!;¹?Ú@þ§Ì¤w0|J¡ª (ick¸…ù;3Î()¥÷GÕ¼$´çµÒAu<ÈÙËÝ”s"ð1Jy)¾÷œõÝã(ßb 1ú¹‹e…ï•@m`f`•Tò'¶q/½t±ÂÈgS:_É nà×Lðo¡úPª@ëÊû2ÝæN$Â5ùôLz~Ó™÷þ5}~/$ð=öùÒ#‰Ç>¾œ ¼;¡&¦5¿|g>æÉÕž¸‚úüªu>>¾ë3 w%%só>ó¾˜ÎÃY?gV蟒þwkÆ÷¸žxܪPšÖ˜Ò {Òúã2v{$ð‰Àŵ&ÓNL¸1k<ôÝ ·–:ž–‹éª°wJu™Åy'BŸªvm½59µ9 q×%ým\²}ÝÚø~ÈÇ›ƳFOª÷Ä9Ú[ÕÇ”uy6¡¦I~PY—§«¼tÀEÕç8ØY'_ix½Ì„ñ 퇭^hO…±‚®~RÅG²%ÊjT=êM•²÷©)Ó_'8ÍÎYŽf׈ýåÊ;ïQ{¦ƒCjû5 (ïҰľ¬ä„òýÚ“F›U.•Ï•Œ5µ`î<û§ëª58¬¦ÜøÓ.®kÙù÷O¯ËÝuÓìúà¹cÛGǪ÷eæW›èö/Óœ—«×_*uTs¿áPë¨ü •£ÆÙCeÖ‚#RÅj82Óá¸æ¤ê2粕ZrfŽy.4Rí ·>4ëþëRC”ïj_õ§þ¶†äŽ+fæúÓm'r«Ú³ÒG‹Òa.á‡GÒM©n~ôݼ‡ÒÍ͹¯Öå}úÓª©Ë…&N˜øZF  L°8éÃ5nT›¥L~Êk”°¿Þ™Y+B¹(¾´Ò§§ô†‚Ða*"Â@Œ)å³ìù„9ϧ#AΗóRq‹sr£îa),dÔ»ýèóÑP[¸x†¯p s'mœòÍ@sÞ^Zy;I>ÍoyŽYLò,™Ðºðõ¡R8ÖÜÎÏ(á_CBËx˜¿ò9ç1ú#Ŭf:EÙBSj7ÏÒÃ|úø Ûyké “U¤èáeްµ`O¥9\Í/ÿ3’¡ÿ€Q6²„ñÈŸ÷;êIr1[Y"{ý~ć(åMÑ9o[¦9J™Ý=ŠWÑÆËÜÏ4(á^àDd·8› §p\7ÐGW4˜k"ƒIA3ö{6FX÷‚™¥Š Œ‘¤š1ÞÌ9Û©ž©Ë·¿ðY­­Ýöß$¿›J%9/:ÍærŽÓÍ}¬è½lá_™Œ ­gŒç£qæ?ßfžÃþèÇ[þ¯Ÿ,‚…ˆAyT(;™TÖòÓ¹˜î¨ô°(ï‹´ÒL'O2Á™bO1—†ã ‹I2ÄU,ä…ˆª^ÍÞÓ¥˜Έ)Š\87‘cVT èãZÞmÑòJàòÀd”í&ÍóäfuT&û=ïåˆNä/ÞäoËÞXâxLEÖ^Ò1ìæªØÐ|ýÓc®çßeIoþÅxГltiVmB"sïW=}©O¬ ¬œçþo¸éŸdR¥Ú½S>ÉâЫ•v$¬ÈºE,-³,gSÎ{bV…Ö6ðb@ÞXÌT™¦¬]Z¡¸ÒÆ”ò™è÷†˜¡¿® OÛQi$°¦Ãx¯ãš3žÍÚ¾TM×ü}‰ŽúåÃÒcî‰)Îj.zâ‚“·þ¬wÉÁÒ3O$ÆòéÞãµæ¥ ôž>œ¹öëågö{ùºIe1«Î7•P¶Si—ª}^©Ö0¬mÜ’ ¦d*ÔeÜ?Sõ„òQ/užíä˜Ê*E !ååú»5V3l´Fr¿ŽN5S*y9iE«Ì”ªãj‡56ëÉ)®0Ù¥®Lú„¶i†JLÌvx¯…½¦é噎,µ-¿þ‚Ýú[Ík³ë•N(ïÓФ'![kði·èW1Mo@Ji…ñƒæ$ej ¨ë4«Ëô!µUFCÁ„²#f0·ó]ë¯=:xΞ¹Ï´7¼47­d¿ì€lL²Â¡R7ôjSÙ£±QÏ!³ÊŒUËN¨H ¦›I;–• ÎŽ¨®³0RJNÄ$Ã@”ƒ˜ËQF(¦‹,¯ðñÆ¢’Ö?y}Ÿ#IŒCTÒÎD1ÅÕÌáEÿ¹PÔJ7“|€>ÖpýÔÒÁaÖs{´¯ZÂiô2Ÿb–sˆYÜý™çÐÏ¥LÑ-Ûšèæj†¸œ¿GèÞãÑ…ä"fÒA²|úïƒì©Ô.2Ñní9Š)áo\ÊÍ‘ j=‹9âèl{„ÚSÂ"l~¡wµÿ?ÿúÿñÓ"Š£…ÖîSî| ¿UHí<Â1Îd‡YÄŽa²‡dÔ9øLøzÒ¿pã<AlëØÌy”Gȯ§—…¾C;ù{¨4´Ž“¼/¢¿,”sg]ÌùæIš‚×o¥?B â R¬¡ƒLA!X?¯$hlðÖ×â¿yO8þBÎ9c¡[4TúØãúþ\TÞø\ø—7¸dBUÞ}·%½/éñû37nöÎunù¬ñ’@‡[¶9xq®ük3ršBåŒÎ-qÉ”\Ê !£Sb9[YSWWm^ÎÁ˜Oç•r"ᑜíõÞ— ¤Ó*‡Ô2;¦;/x!nm ¨I(Í«“Ÿôç)£Y³ê ÕµVõÝùÿ„×þ%~ú«cÎ+ž¸¾\LjÎq¥± •-§õuå2k·7 t_ùÚÉ+ŸMµf³CçMæZroù£gÛ+•–K¥”¨‰éɹ°]˜–Œ«˜GÂÌPbÀ_+Í;)Öl÷ }Fç-•êS;âP¨©XnJ~RcÖXÒÏrÖŽ©©³xŽÎ=ηÿÙ¦ºü|ºyf(Ëš¬3‘•(•Q 1á•IÅ;-nÊ Ì˜œÙ]¾îìbSÓu×úš-ºÆUU+l¶rÆGUæÅ[œì3 …vAé'‡¿ô»Ì᥉ÝuÙ;^ˆÿè »Ë,›R–ò“zŸV4FÒ,f„v†Ò–QW§jR2o›ù·˜t\YÆ~ŠFÌa5Äâêy О··Úª¼=cÚëÊœW”µ'pwÜC•ìrÏï]y¦Ù9óŸ·±/nY¨6Ôz‘WB£1KbªóSâŽÁþ%TMÇy’j9‹¸••ô†îç¦H«8À3¡_E/Û^‡8Ïg:õ|=0( agð+Žñ,›Hñnš©¡‹%ÂE”päx+qörë)§œ•lŠ “SŒ2Åå y=©ÙéÚ^ŒÆûD”Æ9“\É¡„÷å=êâJþÎjNg}DÚ=a3{ÙÉ1±ºÐZ²àM,ä .ç7ÌçBÞœpQÞWˆñ6Úø®Kv[Ön÷}ÂøÖW|·_îôËãéèû[ö½iôwŸQ´Ý¿/52/ô• ;¹ÊíÏyxŸçÏ•?ÎvÙîÁÍŽÞ^ª­B{J5IÆG'ÍÉšžó¹¼—ãÎ/0™øAhÓ³~ž5-çÎÐ̸mY׿=s$å–´*ÒIoÉɶ¾¡ÁPQhˆþ¼™ŠG4ç4Æ5Ú²ŠúÚŒ^²)óÙÏ”l9'Õ9X±Ô®‰ ¥ÍÙxצ¶Ü¦k‚βüþÙñ-gTl‰5<{Yéº5Ë6•œ^?9‹ò~Óúå'í(1³XÉi]¾sS¡ÀTi¬×êzñbr–t;’±´HbXM‰l‘XV]¯¦"A¹ìI•9³J”¨˜?©<-O«SÕãÄ”órY¥õªi4zRsL˜í1T ¦M'&޵sÖÍ*Äó˜; !­¼ÊX‘LV"­tHíÓV¯°gRÉíuârmŽM*.؇ÿ´þûGŠšW~¶L.xdÞéÍÅš¶[V¤ªXržÔö©s8eVš³GÄËTùM­®CÎïRnîÙ1mÃ|wÔ9“ïi<^_½ç´Qí†{ÕtžØZlZ]Ó:-·iÙä‹ SgÌ·7þú†üÉö& éÎ+d” y*ïÚIe1Éœm¡: Õæäò~Së$ÍòHÞ»3jYN2aiþu8çZNmãI. %rjB? ͽSwaþuÝç|ã9oñ–í.=âå!·&ânÍ;T$\úMà’˜Õ¡'^úXîä?SÁ¹Tpwr”'>š÷=޳‚‡áz’‘–/C'ü%á}y‹ÙÏbFxœþðõNë1ównä([yòÓx¸œ“¼é)FYΙü‘WOa¢ßÆ ÑCÿ]¬h0:ríŽöÜàÔEøÓoáÙHW/EmªQÎäw`-Wð£Žg"ì7ÙÏ^ŽÿçÃCåpÔ‰¾•§©˜ÿñ@~Û" äX4/{äÒÈö÷vE¤ÁelfŠK8ÄÎSDN…!ÔGùÿ•à_µ¡ $Øu‘ªi-{ÙÑe;¸¤¶vÓM7¿õ¿WßL¥þUÜÏóôóÜÅ0ϱƒÍ‘-÷q&(ç ºà=Q;j7IÞÏ3ÑŠEIôB¡ªp‹xœB²§Œ´-lädA!-3Ûù ,ŽÔ/ ;9ÂÍ /ÂÃ^¼ùìæ9>O@%3yš=´Ïû&÷\¼\ ²GÕ¼Óùkô=] ¯|Qvqg“å·lâUö²ž+¸‹ùaÞ½œE3}QnÛó.>â¢ã~Ú&5{9À!;Ç|DB­ IDAT±ÇŸ®ƒ_Œ§Ãð“÷û…&7±*pUÜçÂKw{¡ÒþXëC{/ó—1aeÎÇ'ýŠŸðßᬸŽÀšÜ:âÂPŽ#<ÆgbÎ ¬ÎÊ'¬ˆY›÷\èÎÐxÿšŽ¹·Ö¹1-yñ&ý£~–L¸&fv^YL@רñ¬gbêb'LϨÍÔ&㟾7wͳ©KÖåþ<7=ÚByŸ%ƒ†ûãÿ«ºñºÖñ]Cƒ Ž6ýJæè׆‡‹'¼|Bw¶n»oü6÷àÑVûg)=nF(U];:.qfvf‰0íð€Ø }Êv)žikNí¤íËô *›P×mÿ™Ž¾fᘩr!uUJO÷Ú<{Ê8inƒž"1“ íO;»F•‰“Jæ:S\il¥ÍåÆÔM3Öa´Kk\nTåäÅ• 7=ñàOn¹lÁÁÌ®òÆâé{»¿õýM_¹óþ_Æî3J®òJûþïTU眓rÎBBE0`¢Á`Œcl°Çã8öØã0žqœq¶Çã6&c²È!$ÊYjÅιªº+œ÷CëÌbÞg=ó¾õ©W¯Õét÷½ï½÷uý¯îéƒñ3:ª‹§WììœVa¸A÷€ê^u]k~­~Æë÷~oÑ%ßh»çìéûÃÜ¡)ÙÌ}šŽYx\õD]-ŽcXE“Î]Ž&µäôÆ´MÓY&“SYnÇAS2(ÌiJhÕ†^)—<ì‹1åôÄ\V®µÛ¾œ§÷«&ÿˬËâý™‰É?.èÏW§ìòDΫi ­& ú5§7Èe5„Ùê²C•¯ÍOÞþHúÕ Ò½tYܪ¼Ö¸“ÇT•šY,(P•ÒêŠY8¥EEÒ¤ŒÉi‡ÆdÞOq¡«ª4’c>‘ð%ºb¶çmLX“w3…y¡ß.)tshaÎïó:¸q¼6Ä_¹Ý÷޹ëBé—}'i÷õáŽ/äà dÔݧ±(ÿÌ—Âíù·îÉgÒ°=ÿív÷^Â[ü•[XÏ Þœ“÷Ç(ª#iNå÷QÆ-¼A)7å-çþÂ#Lg3ù,YÆ,ä6q5¿`Ó)c'üý„”q6Õôó+:ɼCWÁßñ_ão|7F̪P;ëÙC+«ù ûÈFhžo3À ¬Ž‚¦~Y¸°âi÷s1ù-ÝQäÕH´¹o *‚¸ŽË°òÜq¯rUtqcTh×s#ëYÍLvPòŽ­ÕàO”’æ~ïž$!÷DÖØßs„2T1…Åt±™[#û£Œp>[ÙÇqB†èb;/ÕÔ䮽á¦ÿ[¹z*•zœ]4“áþ¥jžÁFŽÐQ*¦°ŽÝ¬`7/’'GœFº)¦éQUWElÙü;`Þ‹’e.·ò vq6û¨ä8âþ¨’¡6p0Ò;œK/빈Sù)ªY@1“ahŽ4w³ æòÐ?'Ë<~Â6fãBže"å´5ôä°d‰uYÓy€[ømÜÊœmÜ•÷ç¼-œ6Ž?)uñ~OðÞ´ÒŒ‡êMëÔL[̼¬Ÿåt&$ªÕúIÊïbb®¨ÐŸ0’s8èé¯^Yjí »­l¨¤Üüa› •”ûUæÒóGn{hhÿ̰k]—“Uö*æ­2Ogœ^øl®/zõ£W´»zâ'cÿ°ohJºsËÅ…¹ä51ÅY ºÄK47Ë÷9Öª·SÁݡי7ÏØ3*+ŒJ©oµ%'wTïVõ‡ÌÏ‹zûå›ÅG•mWVg[½x¾&kSXdì )¨0´ÁICªGí63/+{}~El ç}Ϙß~þ¾®¿hÆ÷/þÅ[NþÙ)1ák_{bäÝ/¦p£åCfç½Ú䕸™ûLÏ‹íV3ÅΔ“û¬0i¶ýÕ2‡M,”ÕX«ó˜®:úÙ´°F՘µ*Z*¨“éÐ×\bYê¤íé“×}eÓhOsÙ®Mækë½1lz(OIÌÙšŒËK…ƒ©U;£;FÛËr-ñ'¯ {+—9Pè­bSÇìn4|Ìæ´ù9›ó63R._ ¬G*0œ÷+Þ×Hh­4#)‘75gv½úa'‡žŽ™Tïs#vqS­Ós.Ìy¾ÌÂ=I3Bµ|4á= ýÕÙôØØUù±‡T§]æCkm^ëìÎy.¸a,üÀŸ\t²#Wûö5gûå+oãç¼Å9ü2ÒËåfäOøLƱ¥/G¸êÉìãC¥^˨f)é|¾Œ£¬(õwSHPÍË|†¾É1Vó*Ó ÆT‡žå Žsï㾈ã·Yd¨a˜Y|›ÛÀsã¡Mቓj³åIGúÜÈóœF;ûˆqÿN1Zh¥Ÿ7Yé†äò(VqrÂGóþB&B¡Ž1…Ó#ÄßkLb{8Êfqœ,‘¼p|¤ùON‡£±épK¾Œ·ùK”úøWf“gÿSH‡Ú¢y[™å°mdܺÛHÀK$)bÓ‹*î¸7pÜ‹0’h?÷ZÙK< •ü}èç¡û¸ÉHÚþsÂK»Â»r¾ÿÞ``Vl°1¼|ײAïÜ3ú/Æ SXúEÚ……ÆbêK•öœ°ãT&\8äQFë,K ³Náù¬l^]¨ŽSv HU:/퀽 {Û¬Ú/ùblÞ‚üŒuáý¯ûñìOÃ#ûÜsº)¯ëjöì8éî(|` —å­g L!Ëtz#×JÖ¤,Šø¿¥‰‡Ço±ޤ¼Í..$ά‹"ô*;c&‡Ç-‹™™?x¸”1öFýôsvÌi¡r†¸‰Í‘ãx0ZÛÌ¡ˆûù'š(Œ ~Å´F¤Ý®(ÝøBD™ÂÜÄ^£6n|aqSy“ñï좑 y÷PÇ'ô™ãråfF¢rÒ1ïF>83ÙÏN‹èá«ÉÒMå0k8 d˜…uŒ7”mT’¢ŽÙb~Ž8:D|¾z:HE#¨Mï(qÎfoMÿÏrµ’FÖG[ r>›™Æj*háUVR•Ä‹)c0RñŒÛ³YÄZæGŒöqJ1½TÐÏD.ŠÂ'p9%œÁ ìâ|.dnd®d*)R\º—ʸ3ÀÁ€WHFcÖSÙÃb²/J9ÛÌêè±¾z8°:ô@”!§/ÒñÐJgE“m|’#œÎÞ ƒ2>˳ã®æ÷ÜD5?à žãâ\ÂIìä\žx—Wéþ©gÓ:–r&‚á Âó:¼*±ó’^äÌpd0ì|.ý¡vwÎû „fpF¨„{ eÛ--7¡HSÚjóËô§5ži0/íäÐ[,¦¸ÐŒ”b*â¦fÜ=ª,°8ç—gò&Þ¢&ô#qiL.P;IŰX^¬Rs­²¤Í%.©³»ÈñZ£Ý¾–òêÑ÷¿4X÷Ó‚Ÿ|·¦«e䨔ÔhK¬w^Ö„˜¡I£&æÔ&îøMëÏ>6ê- ;ÿí«±gk/7® §õÅ/ÝÑôò´œ|RmBCL‘£Š‹T4ˆÍ²#¥%¯0®t’Ão›SP¥=g~)ÊJic…ªÆÔŒ*©5°WKNUŸšB©ŒÚ&äj;fR™dRq©¡ǵéÕ CãÁöè|öúi[J‹u «Y`w»â=.œèð^M}cZž]kÊ—§J óG&MýéEåÏ®ê˜9¨²[Õ<©IÚ;5åÅg9Q°ÓÄfÛu„îizŸšFGÚ ïÒ6¨j@q± &ì‘®p¸BÕˆÆ>•bª ·«VS [lhT}QÑþ»¾Þ]Ÿ©ùæÍsX>`I…±”'ò&yÌ¡bõi3òŽùq¡SÊ%SŸ»¯î…ÓÊwÎLï¼.”£#©$0!k±\£ŽB ½få Å…9jœ”ô­PGà䄹ÕrYÏ•¨SÆóü]hKF2gZ\6£*®#ô$•¡åh`å33ú9x4T™5aB(— ÍK˜>&M±]µ6øãiaî>¿\ìhŒUÉ¡™`Kγ²€Öh#~.ÇØA3ËH27fqà‰Ð~ú•1óB[hKiäNšß{´süš2™{t"Àw#±~ë‹Ce¡Góž¢2RGwq¿Ïd“¡CœÏ+¼ÌíÌe;”PÁ6FéaÈq€Ë9H†=Ìg¯Ëiü‰å<ƹQDÖS\φ]ôòiâÒáâqð<œE§°L´y™DmÄax™Ñˆo¬Œ¤ÎZ£né|^e=‹)ãçñTdFwèŽg(‹XÀ§±œ)<ËJªWó ²ëhbFŸäf^ —vºþÿtWÃìæÒHM>îLn''ð#6r%OÓIWóWFc”.å]ãËÌw,¨>)az¢lÆ9цírþÂá¸ë˜ý)ÜO³ØÄÇXÉ\Æï˜F=á2¦‘w3™D¯³Š&q:OИî'‘„&s?GXA÷³‹ XÃ&Z¹ŒÍü^ö0“uLgŒ+(ávòU„ªÐKìe1ÕL‰Ìðx8BZTÑË8¾ó‹ ò!&ŒßÂÂþŸyþ";¾qNáЙÞ„ºÏý—Û·]ÕQKæÅ^¹$n~ί¹‘GMyŒ¥ªB=ßÌkÎ+ ­ÏûYÆáœ•,O K˜yã£.¦0PS2MõˆÓ²FËÍ)Óœ6™ï¶¸.ô›´áŒ óv„ÚFe,mïUtWR17g})tÚ¬îþü-o}øåêí“{îüŒÍ‹·×vèŽiÌÛU=ÛàÔö`×ý_ÌÞÛ¿16|ßÏòÿú•êͺgÔB;žÏ¶­¾øåêWô*®2ÖêØo¤ôÏ•XfSÒpÆà˜ÿ ,Ø+ݤm–C}NOûXÚá ¥µ‹ï7q²îЦmfÄÅ—Ø“·ã€–”ÝÅ&*iÒ3¢¼ÈXB®H¶Òpƒ¾¦ô˜˜UpÈĉíU}—sªsÊõtY™÷Ș-œ4Ù¡•]=“'nnÞ¿ù²E;džTLҾÜ Ãfn3Ñ#j&:^¯c¿ÆRC k›ª²Û¤¬ÂE:^6HPèX£âC>[âÝ}’I†ôúdÚU%mŽŒª)—ω§¦lNggõ­¯UTg2¥é=+‡íʸ'ëö˜Yi›.³{ØgXÁ}¡Õä/ëÊþùõÜ퇫ÿ\9ì7¡jf¶êpwÞå­ftjOû^Ì2’¡úœŠz Ã*B³Ç|yLmSK”'%y€/“aQ¨xÌÛå–TêKj ÝÃ<Îbæ&, %cæ–ÙÛìâ¤ïÄüCÎÑñT¤1Áxí³ÃÚ8öì»l«¡”æ†þÀÕÌc+u®Íkd›Æû˜?šC?g)/qnè\Šx,‚Úç-Îä^æ°—O’¢œ±&JåbNa<@î(SÙÌù¡?E§ß‡y›ÜËzvs !EÜŸCÕ”ÓËŒŒ×¿„O„6ÑK”‹t%¿£žóx‹^®¥?¢¾î‹ft¯sO2‹8÷³’Rî¬#Kë{xˆ€X¤‡y‡êo^:ßq;içúH4¸‹°–#ìáŽp*£QTã‹\Êë ±‹ÍQÂÔ;_|×9À[‘…yÏsœ¹¢Û)¤Ÿµ ³8Z³Í Qÿ7ö¿ Ùç¥Rû¦œ |ža>Áé,dµ ñ:=¬'Å(«"]êÿøÖw³žA’œAeô€þûQÞ•®IœË©ã“¡.~Ìk•<Ë Îåô2‘“#­ç¸0´eLæ)Nå,x>ŠéœÅ‰ \:†È—ãÓ¬`0š>ÇÚYχ¸‡½\ɵÌgϰ¼ÄŽ*7¤œÇ\êù: yG‹Ð3©§€ÙͲ$$™“ö}~þŠ;ÞÖ} Q³2l6ÒL ¿æVÃ{¹6üÃÇc©YÙýÿ(òøUò¶þÅ´íù3ŸÉmƒì™¼øó9o…–%=1;ð‘ C29 ÎÎ9‹öñ ¬åÇ3Üœ‘‰iÎùI¨µOA\*'>¦2åüW?zW¹ßgô³v¹Gœ×U+VhÚ1wfý8g_Öñgd\híšQõàʪÇ.>ü¹_\ò›UÛë Ú çM+4#˜ð…Ž?~½ûν5+ý¥?f†×$7ýäöâš¾Šy©‹»³ÈOŠuµº®å¯üù/#±’ô§æ½ÙhqVw¿O¸''ìK õ²i‚¥9_18âÇ”0«sþaÌ_’¦s2·1Ƴ<Èïy[R>œ7“¦Wç-åñ¼/ó\Þ¿¥•÷Û“ózÂ䜗ãJ·†ãˆœšÜàÏ1¶z¯_œ%5ÀQ>nê¹»ØK ~“ÙÜw2—Ò`âQéoɽ}™ÏG²¬½lå>5õ ¤¹$ð7.௜KßJà’l¤Ÿ§ÙÆÕ|‚ìàpÔ‘ŒQË<Âþ(í¢E/û^®¡—û˜9;ä½É~na/+9?“â /PÃrþJ6bñ”²€;ø1…‘[t7x™¹ÔpŒ&ò1®£ˆ&ú)a79¾Çã\Õìæ(e‘?÷V XÅfÞË_9›GxRM@œ#\ÍÏ#åÞó ³•Q.ã‹€„…\Ã4ñ $c×󲌱™þ²”ó6qV°¼øÎúñ¿—«¦R×ÓDk±^þÄ穦0r×D…½–™úMäxìaœÏò´ÓÉ|Î`8Ò¨¼å¦á-æÑ¹’N¹#4@‚'™eϤ™Ê" 8ÆùÖ;¡/ÿ 8•"æòw²=ôzh(2ë-e‹æYžwBÎ~ ^âTr ²}ô¦—g¢¾jbÖc)ý´S³!<2™f{ø {#ÑJ ³˜ÃínøFpׯà‘À‡Ïô³÷Æ¿õbÙ¹›F§Ù÷–'b>z„æ¼ýÌ_÷´÷þÀ[ x‚iô{{À’uNH4Í wײ¡£ìе,ãøy—Eä‘U¤é L¬áÔÀ{±aaÎ=yõ17‡º™Ú`ö°­æãy‡òÚ’š&™Qî¼=NÑ$5ªªÒC–99îåœãÖ·êíÕêÉ»¿/yNþ/õùðÍAó:Ô¤í)™×Yzû®‚/Ýœ}ôcµŸ¼`è?]PY÷/ÿv¼8H~è'mëNŠ-|»¿ñõ¢§®*w<}Ýkà ©TLU¥tæzÉŒ¢&ÝòÐw“‰òøêÞª}%‚5y¥)UýºRJ«Ï{ûx{O.E§Ps޹ÐÏÓN®R?êWý. zäÔí3{«(2: Hô)N)Ï*Q=¨(¥¨@j¢ãû´–º¢AC§³Ž˜Pep@IB..^c˘ÂÀ±mí²pˆÅúFU i+²~Ds‰ìL2¿OÏdû‰ï#¦bHÑ1­¡â¬)»ƒ 76ÍX¿nÏÅT•ùm¹Ï Heµ÷›P¬©Î¹ ÓK%«m¬32(Öª2§ºþéù±ßÙ/ŒíYÌá¸Ê¼—†TWª.öR±Õröe\,LmþÈ7ó¹îR“SÏ©È C½n¶wÌüœ¾<`ϨÓËUæœÚFQÌÊÐ-^Æb COÇÜœ^&›ó¹2×¥Íæ7 çT«M:2D(SšYàîœ|Ìmõ&{&´5”¦œ7ìsÉË®ùˆƒãÛšrË;}¬ÂçVùÔÓŽ~PgŽBö™TçÂí±÷„M½ê§Û7›vóŸ"ŒrÓ§°–¿ÆÍafÜò¼vfå7¬øoö9si‹°Ôçð-*©ûŸ:·6Îas粓³mìà|îe" ža §1=;íâ¡„;ù 8à N¢…5¼Ÿ}´2‹6vFÉã†ÔS™Â,¶p$J»ŸmLÆÅå´@"ÐM_”\ét{ ³£¯x”p¹—Å F. 7ȽtŒ9%T- çÓ ¶G=ö3§ÇéqW’¢Ÿ™Ñ²„ ½~\fùGþFÌøØföP­`fFË055g\{ûÿoåjb*õkêyŒ&ÚÙÈb–²—eÑ5¤œK 2ÊtÉ0óaçÑsÏ1ÆÒȺ<7Z²ãÑS}Ö‰±øRæ"tˆ<­ÐvW”@ó‡9“µˆÎåñ\çmd©b0ævÞ¤ 40‹»XÊ>à„^è)n¥—MôEïóâFÃu<´f3³¤œ) çcùÙ3=´†!9‡ƒœÆ%ÌcF”A0èæ>çÞÜyVè$âÇÊïË”ÆÞ[˜Û~[läõÐxJn¶5çÓÎN®f ‡cvÚ·0ŸÿÚÉŸ\Z¨ácÚjMLj\q?¢”J^™QoY̳Y£\Á+qÅÅÄLá½ü>æÌ2›yfØâп±™¬aI‘Ç‹MN,28¤8ç·CŠ“úlfAÜÛnÎ:“ªÐਠab™33îÌÛ8/íP‘ò:½sîO\{¤îîw×ìYÜQÿŸC͵¶žõ¦áLPù˜ùfÍÈßÔ¾¸2»ªshü±ðhø¡?yí´®# É:sªûÕ•ë‘OiJš‘ÿÄ_æmZu4­'ëx“¢2›k tßóíÜÝ-¹Ly¡‰…ŽÖª/V^f^҄ɺê-TSmpT²ÚèˆÚQEM:ÓÂFC5C†ìè´¤ÎИ`‘Ý-º« •·:ž¡ToJU±±@Ød¤ÈØ.•ƒ;V  š4ÑñœÌˆŠ>»,ÖšVLZ›ÑX¥¾FvPU…±*Ç ´ˆ\óTfÑsím„çù‚Ï8ª1ãgT—jÒÑ(sÈ ©„‡B §Kî–*0é°Š¢§[FVÿslÃûåêÐï‹,‹‹õkIªô»IªG,Ë Ö´ å2äKü™óGmÔÆM½kÀ•–ÆŒylTw©Í)íã.ƘªÐ`‘š+ǔĜ·1f4æýq‹ÊÔ ùѨwÇT†x“I1ƒŒ•º-ëhB_Æ”˜ó‹ $­áä¸óBI9{½ïŸçÍñ1ÑIV>ê­ñüsxø…`ÿ9±æÍá!š4uøð1ÕåÁï?Î JÇ6Õ†öò$gÐË™<É&ޝXBO³'ï7ÔSÆ6q ¿`1îcå4ó é(Bh*ñ0"„Ñ 07a-Ë8›ç"úqºhã½üeÌfE”ñCæp˜'˜ìÇW »©b"c<ϹÄHÒ Ù>ÄO£ ©Ë˜ÁŸ¸vŽKbRÑÅ“IFï±ÈM´ŽY‘¢ï¯,£‚bæD,ž'‹¼ÆÝ1KCk˜Àh´XšE ƒœQ>Bý¸ä;ô6]”ñ>ÖrðµJÄé`!#4RNKô¨û)`ÊÓëkjV^{Ãêÿ.W±ÿ9»ÛE5ײˆuLåLäQN§’3èæ1~Eý;H€¹w¤ÇYúg‘m OÄ—•±"jËvÑÉÊÿŽ÷pÎÿü6*""ä©üž¶ñ@”ßó¢Ðî IDATr*5|=L¥‰¸’Y\Ïm\ÍœÐ]¡Nîà4'âmþÆU©ýh¤™ù*Ãl ƒrÞ`ŒCׂ+YÌ>]všÉçm ÌYBsÎýÜÁ§¹‰³(Œë÷f#“ìzÄá]ïãʘE¼'ë7]^˾rAnfRñÀ©QåÅÌ£™?ð*ãXÅP§v»ü¸X6/š:?´8î£9‹c.äiÖ'|ˆoó!nl4'eMFwvƒÂÀŸ9+ïzRª*·§Ú™y“E 7sÏ$TP\¨¡ÎÑa¿+’«—Êå­„êÀrŠGuz#²ŒùqµØ€Š˜%Έ© MP5bY|ÖYÙ‚#][3EzŠ~xC[[XyuºUS[®~¬ýîŽ)é½fîјš¿‰¯çjn½´ðÖ“­‘›àh³ã#qó Ò_x,ì-î™óòˆ{Ê… ϰgØÊ UÿøÑ²ôGO•›f¨DyJQ•‚„)åÆU%5,±%exDå!É>Ý…þ©È½½Sï6MµòS™é0f;ÜnR—ÒcšT‡­6–—ª4Э¥KÃ1-ý ;X®ª^q±M]š³Š2^áéaßh02¤j²sjMTÜ«ªXX&l‘.S1 1¼b«‡NòÛ”¤ÃŸ}~ïòÁ$åNž¦1Ô×¼_Ë)Gm=*×®)P=fzâFÉBUáü|^¢^®Ô¦Ð¾˜Þ}5úÈ›>äÚ1O¤¼rÌoCëŒ(HÚÆ­Å>_mahyýc’…* N˜Ð/Áz^£*çÇM ò¦eMáÕœ[\–5˜ugÖµ½>Ê(]¡f¾’sÛ˜sQÂûý`ÌŒ¤KY‘ófÒQVÄå™KBk¿¶W½^Å6–$ÌÔY¡¬<ü鿚<×wþ¶½È!fJ]¢¹eÇóU›-ÜÎÙSj \-Ÿ¦‡ù&%4Ñï9Î)láÝt2Çø8pˆ;ÙÀå¼M=Ïqz4›G_ä»,a_g wPÂÏéæÃ³4RŸÇ×ÙÉilá?8ʤxd9Ï ŠüæD…jËÌ$ËëQîÒ×ðÐ;v(Ïñãh¢2™ÉŒÑ•÷Bh™Ê#Ñšf*7ÒÄüž3ŸQ¶sAdRîâ’¨¹YAa΋¸–êwÄtµF…óÁo"­Ü¸´o\1·;¸ƒ&þ%â?]Ç&*Xå?Îñè@ÿœëÞQ þÇlðÿÕ]=J]ÆJYÍ5|† ¤x…#d¢Èà¥ìü?ìSŸæ%^b7séæ:þF£á=<IÚy™ùÌg;x‹i Ÿ =ÃótG*ö”q c)ÛYÈÛ`䜠žŸÎSÔð;ã&&ÐA 7ñ/lãì(Oëû”p€õüŠR¤‡/„'¢Øžlz#œ`³Cý¡§C],b!÷òO3)ðb—òöòûˆØ3“zÌ6ÅN©Œ=úî\~|tû_åìðÒçÃ7~{£¬dcOÇÍÌ«ä…JÞç´µþú˜u)?ò»{‚\Ì`Þ9=窴-qQœpjNi °œiÒNÎYÊ訚¸Gêœè(Ð*ÉêÈY;â…:jÏ:2qï }&ð©uY õ¦õÎÌy ´«Õ¬Qss3ÆMJë,6¹Y¾_EN† EêêŒúM©É‰#¥ÿpgé—¯/JÕL—J.蚸etÖö±WÏLæ>eðWß™ÐYþôFγà?ôþíÍՙѻöÿöû½·+7}ª=‡• +¯Š?W÷É_uu¤Ý¸6ùùŸ”ͯVÔ¯.0aTiÜï: œ(œÚ­®F0Áp»º:£­Ž…2GT «í2Zeg¹–Œ–Fc½ÎHy»Íá´KR6MWøšÓÊ¥ª¥ Å<–öF((Wدx‰Ž£ê›X Û©`ȱ*C&L— æ›lä¨Ý=fÌБtp®Ã;œ1dJ‘úåêºÅšÔ9¬æˆ²SJdËoÿ~מ9ÏÝ&3 ¯^]1ó;¾úpÇ`¬øì‘«_Nýñã™­‰l{¦ß»ò–5ZšQÔ­jŠÑFý=…»øJÁ—Æ&.ï°sLCÂ¥O z8­9¯­ØE¥ÖØ”±0oI‰Ó,¨tVÂ=µW(ï5–5˜×¦¬Gg¡?ð®*“SNçL®ª·<ï¾1Wú`Ο8‡snÏHòZ¨ t2gDýAœ¹œJ{èÕ¼ïñLà‰˜²©æ¥}6åIjùcÞ=Ì5mš¹ö·&>Ekèi}Ã6„/\ãÇ¿öÉÙ6?/µš'nˆm¹9öÊÙá'ïôÛ9žz8;´9cvx‚ÐÚÄÓœÊS¼îDÍs¨ÐêäGü'»¹pE×ó·s&;œàìâ…ˆ˜3ÎË>•íÔðq (Šà³/ñvó8§qˆ1Îb}šv=á5F“¤ëh§Žµdù8k"hÜAêYÂ},‹N³ñhõvrç0‹x‘c DÒëKy– òQsÐ);¾D¼›Çéf-‡¹:Â^´pOÒÅÙ<Í:ÙŒÆMZÇèdÙw”«^éæŒP[b€™‘Tr=¼—cQô‡wä¤Ä¹‚‘ššØÿ²»š‘J ²‰,ãëLàó D¿¤ñ|­ÉŒFúõåQCåÜË7Xiù±‘’å`Ä y– W±w>wM„¸¿…޼"&òB„› IFÖ¨óC¼qæ/Š„üÇ)f+ù&eÄ™ÆãòÆÀÉ­œÏìd2G£6ÿzvñW0ÿb%k#3Vå¸d¶Vk輬£¬ Ô±š¾HcÂß‚Pžy_çÎåe¦Ó@† þð™ðŸÿNÛ<1›ü®Àʬ_…ÏöÔ[~vU>9%ïy5Ì4©Íì?øõÏ5w—LN¼ñ]}I ÌŽ«&™wÿÁ‡]1§‡ÆòÊù|™y… ³J²ÖpŒš¸¦¼ w x<í¾´Ä ™³*œRÀ€ÚF£I±À‘˜º¬]®Íº‚м޼Ã9 Â"BAÚ=cNÎÛ7£^KJCÊF\˜u¸Pu‹£¡¿¦¼R.6¢!¶òꚦ¹¡×H»ÅenlÙvUç…™Ò‘Y;ohIoζA3c⣒9o6©ïW2¤mžÛ-¢¨ÌÔ˜yÅÂ!‹GUVÊØ\-U7­Ý•y“óŠ§Û¾O8Q8Ëþ½Ž6ˆ÷+4+¯šÄA­]Úë=Cúˆù}Jº´ì3³YwÖ·ÊÍL*T™¶¹TI\6Á Š@w²úÓ£g—¥·§ó»¦¾7:vÉФíá¿k_qþߪë,)¾~öð¯{âÝáH]^ÇLÉŒ³$7ëj-L}ã·3¾zMßog)”KKÆi69kù˜í¡¯5:ë¸t`V^{àO….p]§Š´ƒNª•ïvNfYÒ4ð1b˜µÜÃg8Ê‹Lâ îâoÒÍfÆ%|g1‡Ëx” ¼Lˆ°³Ûø8Ç¢EÉ%¬a= dYÂ^b|”Í´ãM.âBޱ„Çha"IŠØ…ƒ ÑÂÇø­ÜB1‡¢ˆ¾Ñœ° •òSzù*ƒ|†jÖr1OD0‡B^¤”RF¹ŽC̉‚Ÿò$èäFvFÍß9*x!ò}–5äȰŽÁè§3•Syõ–«)¬¦€55‰ÿ¥\ý{*µ“;8™‚+dG¸ˆ<Ý\Â1†é¢<¢"ba´ñzœ~ö±;B&sÊÇ3•[ÉPÎf°„êðcq„Bvpײ”V>«\Ä}e5²Cyåœ(Cì4žâäd²”ÓyœÌejBGàòÐ~ŽÐE³¸›%‘üfc<Žðxœ¥ÜÊW’¤%euÖq¾ØXÚÀ~ÖJʬ|0ë´²uæË<ÊÝì‘^iÍòX.ßRžàNM uñº–Ðsûhã<^b uf-ró&çT»¥%xè ¦†nÍ™“/¶{ì„ꔘKB[CkâVVu8ï~^ $cÎÊ c‚‰zûý€3x²ÛhL"íW£ö䕎x9ç¡À!⡪¼ÑåÕZ²vååòBõ΢P®,)S ¨ÀB»‡$+\2A8dn¨ÐÁ!Ï%ÜZª"åé‡μò“†c6äM_­ø og«ë‚;l^:6Öìœ9:©3~4\>Töðy%ß½±à¥%ýWlËNüíswü>·l›e½–í MmZQÒÒ^õÑ÷Å’µ ,Ò?bK ™â˜å¡ê^Ïš(V’W‘m÷ð-cBŽªìVžótʲ2ù"cÅ2ĉeÅ›lîÕ›V_.¿_ÅLÝšêuϰ·Ýìj%ÛMMJ”É–8>lg³–¤l¿xL²P|ªD‚zÝMzRFF”e5UX5&^&9Ó´…YÛ³0)0¡ZoÁ{§ô•ýòʼón¢"ñÆåA²4¶¼·úÊŸæ^ZÝk8l,*hm®xk ØÞ>sCÃ-©6ÄÎ^>°¼wó$úÒnÉ:/᢬¯ÔšZ£´Ë N2ƒžBë ÌŠùÇ ©^­EŽ…fçm)2mÄã¡áa‡³z eX™1!¯3e+ý8 t õ¼;¥6®û÷ðÊ»«vTä úThZ(¸ 0;ë¼+ïÙ«z­ò-–ÇܚȌ¸J…[}à€_]ɨ£šmq-ìŽÜ¬ãsþ9¼@qèÁÐ.‰Ž¹$gSDk4ˆ+àptÇ¿Ÿ‡#!µ¸÷ñåu2ü÷óÕ qœd”55ƒ<»#Gé~ÊYËy<­ðo¢#âPÜÁÚˆ×ðgÖòÏl¡“ÑF¿)Ò ã‹¢Üóös=GÙÈJ)g[dò©b5ÜÉFf°’³ˆ1 ÙÃjÊ8“J^¥Ž_ò2ý|žc¼ÈPÜ¡·x$Ç;_ûøÏ(Úâ-šXÅlšéd* èc'ÑœÆ5 Üq1þûuÇ#òoŒ Ž2…–é$>ÈÃ<áñzßh9¸§¦¦ô÷]u³ƒF:x˜ÃôD¦¨}Ñû7Gžj‡„æÈ;ÚºÆèø ["?ÚYìàçÒÎUœG–É RÊÿCØ}†×uÖùÞÿ¬]Ô»,WÙ–åÞãljcÒ§‘$¤PBË e sæÀ0”30fÍ¡„©¤JŠS;‰KŠc;îE¶$«·-í²ÖóB^\9×ó½ôå-ÉÛÒ}¯ûÿ~ßï|^§9>BÞŸ餅í±@z‡ÙN>¡4pEd÷Žî‹ +™Êv–q ~ã ˜z3r”'(‹AýåC|‡ƒå®MjŒ\y-pmÂÔH%·²—"Ö3‘mÑñw¹ËçæLÍù+/f˜Õìc'ÛªWÕ˜—•ˆ:öDuÃá„ï:¼¨NiÆæÄÙíÑg9ë¶OwŒŽv0Ÿ÷±ÀeOÉ'}å#M$"O$̈<ÌY‘İ»cŽF[äÀ«Œ Ì ­M˜ù=½œÈÖDî…Â3¹9¼šÖZ!=b6sÎ|3p5k"í,*2®BCƾ‚ÜS04à„¼gG Fê*,+3­Í¡‚—NÌ1doÁ¶À˜„™Y[²9ûò7É®ýH™C¥Îò‡‚ žÛÞÙ_qpYn¤®KÍÜë›ëW/ÿôg&:Z¥vøÅ÷üñ·é¯ÿsúáꚇӹ‡/O=üÉò¨+³ö›Ew--ÝrfÒ¤´ ¥¿[ÝrÝýÊsÊŠu {Š×+MéÕS%Ù¦!§ª\_Z]“áÑ 9Õd¦;Ú«ú ©i#ÅÚ{L(øuŸÙåZBs÷›x©Ü„„lNéUãô¢c&+ª¶?eF©¦:ÝFêõJÎÓYªpÈ”ŒB— ÃrÕÂH”Ôß¡{ØøaEy•ƒúú­U‘WÙ_ÿZÅU¯¼)*[0vG¢û ¿,¹x]I–—F²¯cù€Î„Vn‘™%¢c6äÓKÀ¤4IËòŠ\Z”´—=ÓíiñC©ãÞŠ tü³ $l‰ü‘ÿI1µî=”Y;;¥Ÿž‚¢Hu±’ ã³ÞN˜9“Tv˜œPy† ÑÇ¿çÛ’›þGÔØo[šõ|Ûx_äa¶SÎuLgÃèÍ?‡ã«þþX¾=–ä}‰G8‡‡XÏIŒp„‹ã^¦ÈtšãÉÕ‚˜ >³éÕV$œ¹/ÖÍç]R¼NDC<ò:·byú¨®ïññâ²ÀΤé‘?"v/ä]†ÉÇB¬5Lï‹Y@cÒŠÈŸâºXžFºHŃÊÜÄ"&ð3Òd˜làbáez™Ì–Ä”¸uÔRˆŽ·cçÄèÑ'濇ÝÒ|”½´ñBÌŒâ´Ç:ÇY±ŸóhgI<ê<üžíj'Ó8;fMá°ã:éa²‹×1‘7ÞóòŽQlwmmé?Þ®jø`Ò¥Ô²Žñ\K+íqbbÞÿW5LüßÿaZâ l%´Ò““Fc3eÌä˜ÏCÅM¯nÊi¤‚KÈñG¦°˜wbå“ìeo<ěžâÍœ¹ˆ–°­œ_qEqÍû}ÌIºœg8ÄQ–p5ø,ûx:´?²:òP !ø«XÇ;ñIùýìŽ%ºy™“˜Æ… mOÖ›õ|hpr䕼¥té3ÉÚÛü–çO>ìì?û[w´÷`&»Óy›ñ=KßQ4ÖÆ:~Î.¦ÕšPðHÞË,ŽNg!%IWFÊ#m ¯G¦&UŒ x‚M‘ÔˆGß’&S™YÄIŠÐ¿¾ž´ <Ždî *ëÞaXÁ„SjŒK¸-ïC‘íÔ˜Hérûçö]ÿBøJ=wpFÒ„‚öZ§FÎÎßô§†µŸ E½ ÃÊ:Š4Ù?üág·>S2ÐT§¬ÿÓ÷úÛêâuçŽ-”ô2¬¬ÐÚ^óÓìs‡ZÚcÎ<Ý-§ï/Tì óÑò¡1}Fúô™<¬ºT²ÝØa"%Cî«vVŸé ØßçPÞ]Ó§>%ß®«VÕDÚýêB%5öõ˜*;¤tª®sˆ:ÜšAS‡žA“§9š–KËí0¶Vï;÷›ÜæÝZÇjå•wjL«lt´Í¸Én##~9ÑäÈ.ê³RãuÇTÍÕrÌ”r™A{j¤{Çß,¯Iê Œ‰l£†³yšáÐ{ŒÀÞsˆ-TÇíÝ3ÙI³ù;¸4ëj¨vr =ÜC']4q#x,¶j>ôí‰ðsXÅ!ư4áažáçœÊE”ð –ƒÛø¯ñ¯º¼p\¼ýGVÑÈáÈøe±Ÿd Gþ3ò½´ï'Ì)Ø)e7³›¯òðDãk,ëµ-ë`ÎY‘*Cf eín Ö=¬<{éøüªœ9Y½)UyCSõuüËïû–¼›ùË ÕŠG´–Èd¿ü`tó£¥wÞQµ|ë³7F7O^{e˜]°Ð»eŠB‹¥3ƒÑÕÿø¬îÜFL;ròï²w~¿ö³ÓÏ^Ñ#•È*ë—cäˆÊ ÙH>©4cÕ$ã)§(§tH{dA §ÜÓíVjÿëfu¨ÍK—Ó¥¾O~È¡A…ÕÞépb›qÝ* –M”#+5¬®EE¯qÝr“ Ò0ÃîÃæ6)$”¿aZJ²NïJ/·wд•6etç½”·¤Õ¸LPßßI—G»+òE“ôV;F.k^WM6ñ‹{7,Ïÿ¥Ö´¼9Ã'îº÷Ÿ+ï=mæOÿeò˧µþè?M-uÏÜ—wl¡:¿wnåæ…=]0þÕ¹cöWíæåiÌ›VdZ¨10\0¨ˆ´°2å žd^¥kÇJ–›ÝgÎ*;÷úI¤/rZÆ!NÉ(®– ”ät¥ü!oF½^¶æMHXž0P“rNA{ÖYG¢ã„½èb_øÛïúÚˆ«ÆzðNÙY|;òÅŒc9‹ÙùI¨¹ · Ÿ¯F" ?pñ ‘ÿq£ü\o™ß}ÀÄwm˜%ü]\M9'íšÐ>ÆKÌJ™Ä}Ìà05l¢ŽYÃî-¨äî¤Ó"54ò,å<_í, 6ô3šhf s}ôr"ßçaÖñ,ïã[ü"Î[_Ͼ@OÆËñTVóÃñ6PF‚‹Y ´ÑɵÌbåœÊn†Y_™ÿí„døräÇñrzð(XC!^rûàb¶PÅ¢X¿»-þN>H7óhc=/p˜×8@qŒ´À¼J/ÅäYShG¹ ±)†M„±yòäØÒ’ÖxqŽ8‰ËÙƒ Gw¾!˜¿'øêxÇqkÄyÿgp4¾þãíª&“}Fx›O°™·"{#•Œa/oPàÅ÷ìU Ç%ÖÇwì“ÇÙ±%eB|ËÕÉ:R¬ç“äÙÈE|œÇ7|Ofnž¡Ÿùϲ›qàóÜÍbbõÙÎ_´çýŽâMîc:Ç—..瓌ãt.ãj–±™[y6®¤]λÇÐÜ c¢îIÖ9h|µÜNÓæÛ8×ÑŒªˆœ¡©ÚŸ6³×¶Iº·™Õ§«Áe%гúkÎØÜ¿þCW>]9£}è•S÷ /àÕ./ççL)¹õ«®ÿÑ„qíZ† 4¬è+Üú#^3ò­ñ½…úBï‚’G:oØØÕ=¦fûò¤è˜u¹ÜÄÄ€þ°¢]m(Cs™B·4Zh«4&ïW %Å ßI8;åÆP_^K¿l·0/qÀœÐbZéå÷ã]‘Q4蜟%,ŸæÒ.G Þ*8/T¹›±‘· ¾]pWÒf¶¦Ž#‘øèËÁ÷ê¨rÚ#^™ÄQÞ¹‹eU‘SMIEy/GŠ­¨uû ß«5-aî1—~Jm›kï³u“Ö>Vs»C_³b¦–*¨ï}¾Æ§47¥N8YÛ‹Qþ’Ñ,@äƒÄ/ØF[Êã¡»(‹#ÝÔ’àõxŽ·š]la€Í1·a„rœÀ•,ã0ûIó:ÓâÖ쮘u;rGÏôQÇ%¼E~fdzº¹äh‰K>ïý™Oíÿx»z4“I:~m>UÑ“?š¨¤4ŽožDK|!ÙÃg{iæI®æ•Ø Ý‡ÝKzà IDATÄ”ßý4°'¸˜#,ã ^ç’¼DŽ)ñq ãšBÜL3‡œ÷,ÇXÆz޲›IRÅFÖRÄ©ø+{F†eNˆô„.¡<0OÕ×S£(ÞæzfµÃ"‡æü¸¼]Éž@:i.û"- s#‹x=aÍ,gþ(§#ÔÉvÍGÌ>à´£~ÞíG£oc Ù™ð‘Èï8)ÔÌ_46Y:ì‘kØ•´*ðÕÀ´„Õ ûJe‡MeMRi$˜ž4“^Æ&O8×ãÊ•~;ß óà 4û°'jùXµºŒõS’–00lV…]¼œ°2tWÁµ„Ry÷rÞˆÔ oäL"8+iJ$•PHÊ•i.¨.³rbpò±éƒ…íÍcî=3£bØ‹· ´)Ö!YR1£½fþ+}ÝS:Séúou|â·Ùâ Q]40¿¥âú¯LeaN*¡&2»ßP‰“åM¶ÏìîèÒ‡õÕm‹FJ®¾¥î…Åý¦„Œop¤LcŸ AàHàÕ³ze*ew©)r4¯2Ô—Õ;MnHÝA“r”JiqF­t»tVªVùìr¤Z.aü Í5Æ22AÉ ’´Êa‰}R)¦œÙà@NM ¸_{ŸÉG7:Ø&[ИWYmË~ÍySê•¶‹Ft…tüǪŽ7]=0¿gxÖ‹Ñ܃Çʆ?²§då–úï—ì˜Û!Uc¤h͸ꋨ¾ößG^èH8¥B]»žÁŽ×£×êH´Žë35ôF¥°ØâRʼn„—KÔ–(ÏÚ‘pz¿IZ+ÌöùÈû"¯…B¦'„I{Šöxèh(A ú.4%­5e(¯?uiç1š¹(ë#œprà­È¶—ZÃåÜXðe³øð=2c’3òÑõß÷ñÑZäæòfB DªBwN ô»îËÁó剟ÞÙì’?i[‘ظ"*Úäo ¶N‰ij‹yˆ]žØjí—8HÓ)‘=³êµðÂgëÿ;Ê|8Ö´>ÂeTp7¸‰ÿbÕ{‹8ĉ¤¨Œ)0ÏÅWÑSéådfð .¥†³˜XX÷ª8yñaej`0PŸð‘HéH¤À$Êxi4œÅBVÒÂ#ôRMžç˜7pRL`>iÊYA–?ÆK|S¬>%×ìgNL乌‡™O&ÞD{Ù@ ·/†Î¢‡$GYÍiäcêШw×ÿ $Ma,‰ïk¶ðJ¼ oä óYD’çÞ#]\ΡØëø:§3;v*®º)Š™¿û{ø=_ñï£ùÿÓÎLf´o;¿’âýtq$ã×s]´0Ž£LŒÓŠ£»N!NIôŏޱñ^º”ç‰Kģтãú¥Qâá#ñÕßè q$þŒãEÐÆÛ¸”#ÜþÀûâÂ(`ilát^a2­ó¦Ì U„þÌô@"éý‘‡gw˜Àœ8q{ õqNôQN$Íl¾Ë¶sN`$á¢ÐrªEgÙ¤i‘2úYRçŸF̈šËÍÞ­(²ùj-ËcV}=Ÿ <9‡ ÷ð‚ܰæ-ŠÖØ·®Ùí³.{Å“ùgÆûé7kO­¨ÞS9ðñG‚ÏÝZßSŸp(²µC¯ ÔV7¢ÉzÖ0‡©ŠÒý¥`¾æ^³«ÕÛ¼QËN¥†+¸+²‘ËYÄæ¼Ëì[l\•#ã–‚ç"üòuû¡|*á¤Àþ¼[ Ö–‡žÎ;H•ÁgÌnÔX°q¿ú¿”\ÒUÿjüæK†4Gþy¹à¹‚ÚPsNoÎ>™Ð˜U\pqFmÁ¡¤Ê Cò)WG–NUè0¾ ?°<©9¯¯Lo©)yUƒ&NÑ~LE…²‚D¤¬¦ µÅŠ2ºR~0¹÷2/M»ilß·~ÿ¯ëJï:/µ´{àÅ É¿_PH63§£OßxØß æ˜ÖZÙ~“s³ÛÂlQò矇¶•˜Y­¼Ï±¥UƇÖê6)ãß‚Ÿ<5mí''yã ]»ô.–É“–æhânMU²3é7®LT¦"'(R:,5ß»[Ü•u>CÆG*ëÕ÷™ÐkR¨¦Ru£Î#¦ŸcG«{3®ÑßàHFu›IÕÆçU/´s·Y²Y³ìîõÅצí L­1ÒWh雘xÿ®à¥Ó£]#³·žÐupføäu“ *ÒV„§îî?}_´öæîÎïF®œy\åUÛ_ú/ƒ?~#ú¯ï;§4H-¯¹ëÛ¹ís³›W†^(ø}™Ù C‘÷|±Ìå%JFTFFØÅºÀ †B?/8·`]¨± >¥¬Ze¯ÆÈ¸ÐîHã³r”3•&&æô&¬H:©`[àŒJs$œ9h¨Æ= OËùí#¾Õ¨zŠO?î–l¸‘vž˜î¼~3óÖ„|€cLaÏÑÍ6-½Î[íþTå·mÈN¬´ô^¿h1ðO„±÷¶…}ÁM‰ÔÚóBß`gdÍ1|SR>êˆÁi7Äøæ3y…v&°›–°‡ÐÏŒšzY?à~œýôòjìjꉟñ·³1N‰WÂÈ ÑÄo™YÏṎ“Ì{b"Ô³<y«ù=ƒ¬ak|{òÞaÎb%SSF§³›%<ÏpŒ GG¬Ã=‹d {‡)qiç0ÕœƒÈϦ<ÎCžËßâÛçx‰«‰'rñ4rnÌš:1Vý~Œ-qr/Ç T±‰ éàRþDwx—qÂnÔ?È!¶Çó̿•­qX£Àt"N¯­=úÁk¯ÿ¿mWog2£µÖAªbÓG†‹c·q3sØECäÈ‹±%¯SöðÞàM:ˆád¦óU¾M:NaL`Oñ [ùSøs9‹ Ìã(Gy6ŒžÊ×¹|ƒm¬c K+ø%.g]¬¼¬&`+½¦)òEެ楘¢ÿLh÷Ðq@ûÞ²–…ü”Ó˜Éï9•v>y±Þ û >Í£LÓ°ÇK¸ýf2ÜÏË|(á¾”×C[ ÎáWšw˜½]ÿ^oü‡ÖQ@V]œÆS<È$¦1—‚·j\Õ ¯É¨K–¸©ÇG|ã¿Üóe ۣǧEJ ~ÇCGBãéëo 8óAµkì^&jµùm—½=ØqBÔöo >T°!òq*küvгúq0’LØyº„Ÿ (Ô'”°¥GQ֡СgC-i'…æd•lÎÛ:hæ8µy£àüHvÄ·“NȫϚP¤z¼ê#ý/f7Mxäûª†Îü§Á¯î<ëg§§w­z˘œCãLÉ»³ßÙS= %«>¯©Ï:{V'=³¾?—7>ïúËófVHvê L,ÒÒ¡3÷è¢™Ç ÿusÖ‚VSúÔ6êí2¼Ë»93zÍÏz¥ßÌPa–CÅmÊ'‘*QµÛ¤„ûRÆŽÕ6èãyW–*í×ГwSµ+ò’;Í©3—‰ ÒŠBc3þX)ßnvƆ:Õ‡”Q4"•´¨^j¶#J;¢‰Ò¢ÿøbª»jÜ› ëÃBù±I­Ž%52Ù)Ûr_üAâssƒþþ2Ÿ eÚꮟÍÜùHâÚV7žŒo'?\{Ò+écõÅuÂŽ±QÛ푲^®Q<ìÀt×èiQGé¤8%on¨«Éå}š j 7©)×ÑæçIWGŠ#sRPœvfhW²‡³C-±» Ùí­È…}ýnÈàpCÞ=º:Ô~³ÕûüøL¯oIGŸ ½Ã”>óòþgÁ…\Ìàk¬aˆùf°í¼TaVõû»[^Éeÿ#Ü‘ölNϽåV*ø8'n‰nz8\»„Ö”»#iägq9äÕÐdî$ënïdËcù\’¦X1—Ûx'å‹‘?ÐÊçù ÏðÖÆ.à«ùw±‚Åi¿ ýž.NázÞM»7ôSħ¸›Ùlæ\ÆRÏ ÓÂ5ÜÃÎfC<í“×cîßI|]\JsÀó4qñHŒÃÿ{’âKÜÁ^"ÆrïÐÎ^.ã~VƲ¨ø5çs!O°Œ­ä8…•l¤—$oó0“8…m¤ù&o³†-´ÓBIrq+`5Œðjü’=|ˆÛhŒ3ëqêbÒtÐÇ÷»iˆuÏ9>Éwy‡ÓâîZ’78Ì;µµ¼ö#ÿ·íjE&ó§øËœÏ_h¤;–TŽúg3Ä'Þ3µl¢?=­Œ~oÄûäßM5\Æ· ¸šx‹•<Éfn¢mñ¹ê5ngç1Ä|沘“¹Ù,à0%,ˆ<ÀÿÌÅ<ÆÎø¦jT?s=Cñþ8!aUäEf§|6ôÎ伯×fÎŽœš°½ØØ¼yl¥ˆwø ;¸Ÿ ÙÊŽ!Û ¾@' {ƒ›^Q»ÇÇp!Y*KŒ¯wI¿NÖ3GÕW³ËƒµeÑÎÑ”Înåt&¬ˆ<ÌXçÕÀòDøÙhJkªaYðî´Äua.鯳´|×áómhvd9î£7¡+¥ï3E¸À ]®{\}iPU”H,^ëôî¹Ô'Ý”´„|¤;°*ky»_åŒI[Qk¨ ¬t^èÄ:sý>e¤Ö’ù‹Mp8/Çy «'x&P™’NÉÙ˜5gÈH©¾„ù?Öú÷>Õ#v&¥[aÇê-“+ê÷ëÒÅ'fuwÝtdpo‘Å3凥9«¸x¤û‚/TÌ>ÅðØ‰½‡”Ö„ÉŠÂÞÇhšïäaѰ#ƒj4lž"ÊHdæmKtŽ~p_ÎécõìÞfÑŠZ™Ù‚^5UÆ$ìï—ï0«SC©ö:[M©õÄ}“ŠÕ•Êv:2Á¹Çt¦ŒOØ6I®Ï”)Ê#%=Jº\5âÚ¬l™Î”¡9¶”9}ȹÕÊ{l-QZmLŠ”ÝY¿-2£Qù;Òõ”Ûd‹vìImJwö´·y©ËI=ãì+ÕÜÿßg”]\,)œ;±??±r_÷yŠ®xiø£𸉝u÷¬ÖУwn}õ3CŸZï×+l}øÐ£©áŸ„Zé2¯à¾¼ÆVaJ&ïpÊì2S³ö+§¹Ly‰®¬ ‘µv1¡RCÖ::B™”– ¹ùHEBUhaÂùÜ/F#,âph(R¸,¡6¼ã×¾~D˹®Pq øÕÅ¢kCyæ0=é”P'ÕIõ Ó"ù”'êœ0¤?ПÐE#áŽç†/hÏ÷F;gFÑ chà¿b3܆Sj› Ö–ºB~Â%$C,`I†YÅ^¦òa ü’JF˜K7ÏñXœPXz>¦Í¾Ê:¦ñ,M,g/UœH5l¸žûØÇ:&†~³nÏçbå5®âö‘&9:0ä—¼?޳äÄÀ¦@]ÜG…DôÄ‚ãÑâÊËle&l¡‚vSÃ4ö1È6æÄ`ÙËx7†þôò '0ä˜F3ÝÜÉ%, ͶX—\Åil6:Œ1†Ã4s·XÈù Ÿç.V3–ï¹Ó:•Dœ^¹q÷àcûâß9´7ÒÃ;Œ¶tºé`{üú !N£ìâúxêX¨­­ùÃÀ—3™ ®Œí 8†…tÄmäs9ÊÆs€yT± ¶aކ/ß Þ_È2ÙÏÑž´Œû˜Ç..ä—4q.í4PN5mq˜ÆÄq ǃ4q*ïPJ ÏÞ&,Ž'Ý«ÙB™f3%~|ØDmÒ ¡¦È:zYJÓhäy‹'ˆ" 4ò㤅%fŒ˜G2é‘§™Í3±Êú>®à}<Îo˜“Paý-þØK ÛXN’ûó®í÷:«haº¶™Qæõ¨„#gòm"š)åì„'#‡9-µ‹Ìµù”ð„gµúrÇ¿ñ€6Z²)P’xsAä™8õÑH}RS¤‡Äè´¶êÙër—ü0š·1ZØåHÊ‘mç’þ5çáÈ·9\cUÆ/æ$,©ÐÞ)‘W™´)PÛc?Ÿ+1oDÿ^öº F&eïÍÊKÜÄÂ*½¼5ì'ÉUº4k\ä¢~‘' õ…JóNNëKKµë™äQòÍ¡ë~]´ÕÈΩ)E¥‹ßjÿØÓ¹ÕWž²+1½©|òŽü‚½»ÆÔô7ùq…Mæ–™<ßîn¯÷øNÒÊG³ÊènU=»¬îÁ8£Òàt- Š[ÔÔÈçå‚rÇ’ú"SKdÿÅš²:ŽøW–ì° £0¨.kC•IæŽ×V£¼×ØŒ'Š­èUš“$˜hòdûzÕeŒìTÝafF²GY(5KUFÙ ²Z¥ýÆ×ZQl0%±»FI¸Xÿ?^ó‡¢C >Çö”$ ŒÜ;Éþ ƒ Ÿë]´«ë”ÝÁÊ-=̓ٿ˜¸õË“;™IwB3ƒCÛ«3Kºþû{ÙâqÉ·¿^è•×4$ôsZá¼Öbù¼éïԘ؟”mLšÕ¯4íá™nïT›óf %á‚‚õ¡1#ºC;ê ‚„Í)+L™¨O˜©>î¯ñj¤É]^\ªýënPûpòÅòèø)¼-²!4•,ì‹ì£)íèX-Ýr ×¥œ]ðgÞrÖóÉ–ÿLìì U²ƒ—y—‹þ#r/„ö»ik°¶!ð³#ЙôQ^‰æ¦2‹Ó«LÈÙÙßK9BsÌXÄc3‰1\Á~Æ\>¯Ý£%–ûiàË¡‹¥<È>VƤðnf2›w˜LŽf621–ü¾Î&ZÙû«ÞÏf^Ì TGª9JãØðjmƒÌ ÍßbîíÔ8ÂwuñŽ2ê…º¼Íù1|uM|uP…ÌàÅø¼±œçhãJvQÃ$ösG(¦Fg„Z^b/ûéâ\ê¨e7e6s˜É;l'ŒËd£[À© ÒDIjØÞÞ«E\FC\Ë¡¸d–ç Éþãšð¯2™íñ!)Œë£ÐªMdâç§y’â¸ûv.ÛchDZ÷|7å\ Ú9)ŽðWÓž°†•<›òÑðx¼gmLOØ)â}¬¢Àó¬¦b^d-ŒåìHgÊu¡Û)ç0OñÅÀ΄9‘¸†mqõ:h‹<Í‹ÌæM2!8^›Ì¾ÑÈbàC‘sBÛGlJ¸Œ‡˜â%fp5Kù K8s(&G®Åýñ$eÌ캘ï2‘6^¥Õ¡È‘q¼X4=’`+ÏGÇGÉ/%]£¸Ü×òṲ̈A[ÚÂÊ?¸çdð‰·”Ü|ÿ`rëÕ¡·“f33åìP†êÈ},¦™>ÒIÑ‹W﬈Z+lZÊý\œHËØ—ÒœõI%-Íl+ØŸWj-öx‘®ÿÉâÐc¡‹"rúŠÍª×ØêGCj†MH¹(ôݼ‰CóŠ#ɤŠP*©™&5íº2JŒ©T7à–ζWMïN|èðägVûù­½S†r;K=Ó3m}U?¹¨þ™ 9:òÙMž9'*”'-í4c,Uv¼io`yhò€cãÔ猯q,2!o_hZÎHŸú>©R‰!õ²½J"Å“íÞ¡»Hù ¶bE½úÚ5ô«œ¨*§fPeAw…ÚPw±ICŽælê’ 5÷;¡ß¶O k*rN£Î‚d«†¤Iy“úËÖ<‘ùßß ®X®Þà‰5½Š:Õçü P›• eÓÚÚø»ÌÒ£‰o}©hþ‚É‘IÓõÑ]¤²WIÁúÚŽó2ÏœVÈ¥Cogö¯Š~¾*Ü_=QϰÊ~?â*2õJ2V I,۾ϟH'ô…ö°2cÚˆ©ÃîˆT…¦gÝh’ ý$éŒaÇrfæ$ž4¾ cȱБ¥Ö´ ";B#üЇC³#[9¹%°„Ýlå9Þ ¼ÂØäïä_ì®H˜Ùy’n_‰.Ýnù©ÁJ†)âX`RÊšÐæF7=hmwdÛÉP¹Ú¸[Æ\v&µçœÀO™ÊEô³•1¼JŸãa‡Óx•×8Æiqz{ôºë’<ÉÎØº;™‹bG{%ý¼ÅNŠ/ºZËær>sx,X=ÏEìãŸ9•ûFÑ9Ññ÷†h‹É/sEìg[ &¿˜cŒgYú8L) ˜À0å\Ϋü…‹hc > ¶±Ÿ ìå²—m` Ý\ÊÓâóÌd(Füdhö;b|TŽ260–á˜sX«kûÿ_WqÕ1ŒãÞ¦‰Af¾':÷wùÆæ8ô8zä‰Ckh¯­õÞí*õáSlg˜¯Æ0ÄQ´û»¬¦›ÿÍÿämîù8;)f÷ÇI÷·1‰[ÙÏRÖòïl‰¼)á}·³7þºKø~dEä2~Ë^¾g; ó~kQ†ø2{éçãckxh•Y·¯Ö’Ž¥o‡ÂÀw“:ó~Ìp ›tvÞó”ó )f’ ÜA7Žü12#ÒÇÓL¦˜;ù ׃/²'ùs|¦ù‡ù$·rbÚýyI÷çý‚Õü_e)9ÞŒ¬ =Oó+’ÌæµP6zè«÷¿~cMäu ²Ç‡ë•.šxÇå­ùtÁO"ƒ¡q‘¤Õ›Ùá‚ù gÍÔ¶ËÂÀ!GÅÚ´•ò4mÔ‡¾ÅǘˢjUn‰ü"2fÀ- _NZÊ’qr]d=RðŸeEä¼ÀÅE.t°Õ¾jó|¾Ã³¡ö‚…iŸ-‘ ì’J)™¨½×†^9©Õ¦ :rÄ‘”9-ž«uRÙ|ô”ïyôf×~¶ªë¬°¥¥Ì˜nïïòL¯-E¯.î\üésã.»½UÙGfÚ{ÀŒ‚ÞÀ˜”Æ‚Î. ÓFJÕg$H|®Æ­Íöö©8¬aXP!©È¨z×$ªY¨{¯ÎÈòHºÑȰ‰%šÆªªg¿¢f³vÚ›²¢^Ø#Ùîc‹}½ÏøRËKt÷J¾«…¦›2îR·&xþÇ…'ºÜzmèüö±Á›Žz}"{+ý3¹²ÏýbÿëÒÿtÛ¬ý…={Þ×+* ž¿øð®ÒàWåuåGïõå¼¶hýï­ß8Þç‹:D‘t‘¯…¶æ½Ô딤³ mÇ’_úî”pOJv·Þj¿*wM‹“Tñfd˜e‘ßО÷™È<ú)°/P>EºÓ¸>O•y¢Ö”nOQ¹%çNå×,‰\›P¸:¼VâÑ2ìTŸ–¡¬–P ª/1éŽhÛi‘è8§` ó™Àçª|¬Þä£nêq·“MÈf\L}òÆhúãaùm¼Ä¦ÑË­È›yû¸/Äw9Õœ÷mÙÌc湙ۙŅàg bBÜW{ÎcÚºƒ¸™—x-þàÛÿkz"V6ÿÿ D^Éd21 °?þéýd¹%V3”]<ý?ç«â7ŽÉéÀ¦2oóß ŸiY IDATü…§Ï9ÜDÀ%ü‘A,å NæÊØÊš™Í½Üëè»ÿÀ9oW`B2ˆâXÏä¸ûµŒóÈr[)àSñä÷ 4†6%=X9?ô ?­71o~þhšetÊ'"Kù)û8™&"N`r€7¹‘9qPg ž´µÌ§€ |“†Ð:²¡G¹™m|ƒ<ëù´QuvþLÙF+Wë;˜ÈHæ’÷¯8ç[Þ¸AWë)wÆ…ÁSßÿaovRΗK(‡•ëÿx>7½ÇÑÑzÝw;]IA¨”Ã|›é-4-²`ˆÓÒ††î¢˜Ö.Ïñ8•ô%œ>Ì”N¥*•íU”÷I‹G¨î—ËiN:¿ßCyû¨hw\¿šœTʼÈgJ|´Dk»_„¾ŸSÑæ·•.*6µG>al¤d°CC›†"³Š,êë.ËÜ=a¢íàütׯ>éÖ•0¤Àˆ>‰~õaÛOSïœÝöðÃgNmïiØ:¶ûHs>U49ìLͲ·]udp·LÆíÃejõŽTºÛ݇œÕ¨¿ÒáRoÐ]+1ö=¦ŒT2D×vÿU¯MtæV}¡}3õ¯Uµ__ZºÇÖ~;ÊM+•ì2üdÃVŸWÖ­{б:TŒ´ogÓðâ?¼XxãËåón­}þ+-'5·TôlïLÞqCpÇiÍwÜÔ·ð¶û}÷g–½1»òS¿êØÖÜÖ64«‡ÇŠîüAîä}ÑgîìO¾›ëNGž\ùe­é ;úíír&ÿÎÄF¥Ý>žsYÊ ÉéˆlN™KïjÏTf :ÞûLHÊç4§ Õ¤t†/rmäå”_ç<x“KcïòV‡9ý®/p}ŸW{]ÄîÀ\ªy› —¸&ôéH:rRhg¹ï¥­ìµŠ7è+pK虼Úpîóîü“g†«{ÙóR®l–ìvïàz~G ý¬á6PO2ÿ•Ì×ÔL¸òÚ+þÿ†¯f2#9@}êØB/Ä%êÿ-°…EL Gš‹8žõ,&ä\dÙ4ЫåUv𮣯Ëcêb"¶ËŒd;gq%d)L¸šI¤¹€MäøÏÒÎ+ìdW°.Ök%8³xŸ÷x‹¸*²>²›÷x—Ó¶å­ão4ÓÆP¢›µ¼ÎHþÈûÌä Yêi§#ŽK ø«ö±•|ƒ Þãæ°< ›˜XO)PxòÑzŠtÙî)÷… S²~v§ÝY+2—…FïNL¨ˆž™A{èÍÈ Ñä5oµìl-Ådcœ¤aYÿŸ42òÞg:+äŒ>âÁPQ`V žrÞad`T 8aHR&c]†äììNŠuiC¯2¹JM§,-urî›Cm‘d^SßѦú,NIº6PU¢8iKŸªH«.WI6iªTÑ£¸×ð6ÃCÛÖ®-7»ß/ë¤øIVY†Ô´_µ$qæÛ© dÐ5(8ûùô¤—ŠöŽÉš›vW™¨Äü!’‡ü±ÅÊŸR]¢·Ö–½ÞͨNêì5ù°þP¦[y‘“\dB—A}FNeµ†*kz TŒ–»?éÄ^UJv*dU©®È¨±º²i•=J{~øËA÷•6|÷¶^ãªìTÙ@²LP¨×ý³³·_^zûÕ­+›GékWØo{BSÒü¦ÇO'ÿƒ$¶-H¬®¤¹À%N/PÕíC‘æBsËÌïó~!ýä=Äþ@y½|èHÞS•Â6ôem)QŸ–ˆÜúk‘K&šÒa}±3r2Lˆ4§ Iš™è-u°OÛÙ›Nª¦-°00#¯5p~Âö²e¼‹ØUì¼Ù¥Îê³—º"‰ç…UÝFµ_¿"Ð:Ü©‚{x—_sÕxŸk¼Ç'ŸöÂ¾Þæ™vÿÑêÔ”¦b\¦ï1~ÆJ‹7Zök탙›ñdhBäS9ÈA†ð\`}`%ËháœØüô ŒHøzäbÖÑÊ |8&;Ç1ghã¹=0¯‰{8ÿ@²NKÈê#‰_L·³œ†ò}B汊3cÈÐ6ng3ÿÊHðïÓÄ7x†hãÐKs ôµ „õã¿C–›¸‹xša¼O‚y¼÷y³¬æT>ËrB^¯±‡ò¸ õ]Öĺ©qôüË<'ìk ýG±ÃYƒcÀ™ìã@ܵí¢}Àº ¨Zi`o|OVÁØx”5”ÓâvÓ?žE¬gûc…ã ¼‡DzÂ$6“g%sãÕ¾ˆ¹ÿÀÒÖÔ\}åµsÿÉvÕL"žožÁö¸„¼<&ÿŸ·SâDÃ.Ò죞VFÇƒË ôpGxï%”Fvħ΂ø½à º©` ÍŒ …¡ñ ö§¬Ž:ÓRô1ˆ?°;þàBêc†Ó&Úi¥ž±äªib8㦕r&RͬûÎe Oò{6æ'ŒŒètÐÀӜ̦Ðg­[9)ñv5›étÅ·>­ì‰O*—ÓÏ_à"ÓZ([`aŸ:öó(ûxyqÐü:öÒÊ!&²ŒÉ\k«0‚F63”™,ã5LŠi§®ìãþ§ƒq ~¹>ÞeÚ™÷”²÷ÑeMÍþµx)“ÙÄ4êÙN!­$é#Ã.äAç:†Æ(žNî¥?ÞZ·ð^bYü.³‹³yJ>ÄLVüÏoÂßYë†72ƒÕys\Ìþ0¯2ƒýLÛÝÌd:8H5¯s&O³) áa*8Â(–Æ%ÕG~È ìâ{ÁQ<ÉÁÀªA®ëñƒ™ÇGÇÞØLLcªL:‰JþÄv×¾ï§{Ì-uïP^æ=&E Øz–™K¹Ž6Ÿêð³ñ$ÝPjXBGV;ãu‘žHAd¿ œÙ)Ž4rIc&ðpBsúN»ºìË;“Ûòù9w¦\94,Ô3Lº×¼¼X/Uk|…\hèAµ]J"ÿÙ\ifÞ–v?da«ºé*½ý~ΙŪ ÜÝeGJÛXCwÉE2¡9§—)¬z­~ÂkMÒ'Uêëh«È²-¿·.ÚØ5Hñ.•zÉ$…%ò¬ŸäÕCfHï2"gCRMâ~©%]J†ÚÕfLZiZeBQ¿Tßâïu|쉰¼5·r×`ƒw],È0ܾnuy•”µ*;¤pŒîMuŸ÷ZoX”öÓ¡ ¡0!_kÿÑåŒH]tùºÑõûÚvNMª*RœqB¿ÂÈÖÈÎPW•Ú©ºvgë ÖÎ.SÕewî'Oæ?÷ç`LkòµÓCùÈÔbÛŠ5t« FShÏ{µÖ½&‡ªËÌ4öèèt¨WAhä0-ý*ú IZØ/×A½¦^?«û 4/¥\™· 4õU?L`CB=‹RF6óç&Ã{<œWÉó|`c¤9ÔÐo3g÷ùÇ–‡óÍy5ÒÉÔH=gPÎ|"^b”ß,öðKO¢‰7ØM5—Ù1È7—¿¼:°'ø„hÅ»VŸÄJª)à¡xò‡ï‡6GF³™#Œfm¬æ® A%飉UTÐÆ¥,åø8>à„ìaŸ¦”uŠ N¢…¯0‘–Í~×p {™_–¯b©d)ç6D:x—MD$bFÁSŒä Ʊ…‹yŸ$a^ßM’SÙIÈ™¬d%POä Ètp2³Œ³XÎfvò>qÏrop [ÙÌTm'°ž¯0›Óid#x/Nô_ă´pnÌŸ˜z?¸&¥2t³™Äñ”0„)Œeÿ“|À%ñTìÙ:‡r&ðÙ>ËB{8›Sù5U,áý\ÏŸYÅ+‘s™@…+—yôJ<Åá¦Xˆ¼1ðJÒ­¡nîäU6éN:|/ð$çÇàËßòc/[ã}-›­Ké}1òDòs;¢o\™Z÷ûèñW´^@ ¯FžäÃ9£Ò&f¥{­ ɛԫ7ç¸ñJÛ4FF$ a[¤nˆ±6p ü9anRG 32¾£{”Õ;9§!of¥Ò*K»¤#õ)'äŽ<–Më'jSXÖkxÚÒF÷HMu¤W²ÞØNY#»ÔçÔmM™–*ÆæŒo2¼SqŸžÈïšÝ¼WKÞß"§Rٖן5½U:íߺ]võ/^Öÿù?Ô®›‘92f´ßîrà‡÷[pXCžƒEÍݽ­ëå)ý™‰õêë-–-V›“+Q—Ö\šèèºêÅèÞÏf?³Ø¸ ÑÕŸ7µ8½«{Ý‚lôÅ"óŽX[¤,mÿÙvíÓWeWBý»úOlÉ/|-ÿóOô5R¡ë/Uªn÷Fà†:%û º÷ÎéïßÔ¨¥Õ“‘³Å…† ÓŸ’ìVjhwKè².od¿÷§ð_õ çoNÜ—Í;”ÔÛíHÆ+9{ÆDör|D`|èTêBu½Ú»¼êà·y7JºlË;n°¨ÓóN IÛ]cÆïä bQdSÂ÷#í<Ëïx›ÙÌåÐð”º¼Þ —÷›Ù#ù >7Øé¡(ÐÀØå8áÜÀäȼÐäBÏLvU…‘=N‹dšäº,ã2wÞå·'x·ˆÛyžR>Óàž‚^ñÀöhÙ+Ñdúʃ›m>È%G‘c^`--ÜÀ NŽÔòÓYXM†…4³…ÇÙÈ),ãj*ù 'SÆjÎaH|ßã<ž¤;îý€#¼ËU<Â>J9ÀF³Qü”Å<Ë2V±,æ3½JÈv&E^fïR@- XÃtò#3‘KÃû̉O!ÿÂøÀ4‡ ØÃAÎá5–³ƒƒ´ÇÚnÓR:ÙM²›ëbü`ïPÁÕdØ_àÑÐ1±p;ÝœËãŒa%+8“—ó*-Läevà'ü%>“ÔóIiL¤êcpÆ€G÷i:ÙÁa>äøDÿs›ÈÄëv -t³9œÌ«äâ­ýÿØ®^Ídæ0&ÎP|<–êN§‡.Ær23¨áÿ;P˜ôöp+³ŠsØKsx4³8€?ÿ÷SN/}|ƒ¿r*9n#ËFþ5ÌçqFÑÃ'y‚…l`5q2‹¹3˜C7ÑE+kA1'³,ô(W³–óø>Õ”ò#Žc6ß`&_'ÅC<ÍB*XE1ibIh£xœ»ŠÜœ÷CÁoã¬Ñ€pòwGÛÍã“òÏúÔ>ìaEÌaXh ´r ÿ1p¥—òýÈi´syÒ%5ɧ9´…ÖðY•oùÔcÊ¦ÛøÕÒ®=ǵž»ï·Ã[ï5¸cAÒÂÈBŠCçäY—¡˜/GšR:ˇ>ÅY {x:’î÷£PGà'Ìå#Iƒ«T–ÚgFdXÂÆf‰Ý~7²H.mb§WgÎJéÎéaTè¾Í-ª“F‡æåõf4±Çð÷ØYeA‰ú2/u©¦9Ò“QŸÖœ—êÔZ“0¬ÒqŽ+‘­wb¯Œ´§ìªñ7.IšÒeVFŸÞ¹ôs=·¼W[+}¬[qèõ\ãâÜâGR?½5wÛÃ÷ž×:%©l§Ý ‡Ú_#ßæj»ç|*¸t_pýÆê_]Ý×66¹|\â‹od2Ñêsz£ÔP¥OÐñ¸)Yw sj·Â!e…‡W_,’zaz½Ònk™2Ø×²~Ÿqk³Ú¤âÞÞÒ°¿*TÝå_ª4ÖšR¦(%lõ•.Ç…¢#ÂRÍXÙPòÊ ÑèltÉÕ«æŽþÜœÑStVÒ/ÉΑf¦Ý‘WY¡¼ZºÇ¿gM«´¹Ds¯ç"eÍ®î´#²4/•÷‹.IM8y?¯°Ó«‘’„"é”{Fú÷6c‹m‰|!2ŒS¸c€™Ø`\Ò‡|&rg¥\ž2­Ó­¡‘Å^¯t]F)ß`P䗑á¯R—÷ÃkÚ¬Ïk‰„]îäRmn´éiáEäh⃰hKÏì?¹þu“.ñÖo ê›oõózƒö÷\žzøùÏ/?Ü6¼zßBµ­ö$å›% Í S].m,۔ʮ>¥Ka‘I›B/$jgoûyêÀI…k&D2]ÖUÚ{Èq½êŠ "±çª·£‘{’ý,mݪ¹žœÆ>o”™Ýadþ~ïeìˆä’¾Ò+z:ã`*.ÌX›PDw¥ý½ˆÔ–™œ{¼Í{êž¿=c_‹¶=^l²¨HgFÔnPÞÂÝUË…‘E}êËÔ¶;¡ˆ'»TPÁYìåʤwÊó^IêŠtÚ ‘Õåõùx·5¥¶V¸ ëPÎKœ¨ ìªpmÞ¬¤Î#&E‘å’ùÆ7¢C'òÝœÿÎXûy¯N8퇮b­¼Ä¦±ŸZóžpÏÝg<Yå¢#œï¼±– uî &ôx´ÕŸë}oVV …|‘:F°0Î:mæ¾È¦¯úqN]—ýDk#¥ 5µµ´0’Tp(²PÉ–3›±Ôs†“£‹¢x­üב£€<'²‡Ÿr'+·bÛc‚ÏK¡™zžH™º#.º ¼:ç¨ Šm´âXÄÔ8Ïœg8ÿ~LНРa6cN‰<F3\Á~ö1Ÿ%q[ëÞÅ3ºCñ°j%ÙÄWâ®&Œ—Ó-ñêcÖ1xøqjå ¥¡”a쥚] f||üÇùi4µÌc''qo1†bŠ˜È6Æ`?qµ«‡ÃœÎÛÿ¨6ýóíêåLf Åñ»ÿÿçÓB;o2AÔŠc‹“âç0ºiflÌleYfÒï|;覑\ÅíœÉp¶&[^QHÿEH£céõÀl°+¡2°=2š|„Eñyv0§r"^â 'QÊV¾ÅÎqÕ^7îðÒ;òc˜Ä8Bž‹ tYæ3¨Ä´BÛ³v¦o]›øÐ>‹RÑ¢^‹öŸë{ucÁ2æPÏf={­9èûRdeLg8!Bÿ§ÓÅÏùKiçÔðÞ»Ýô%—ô ºí ULòч=Ùhçl. <œô…H•õa׸¤Ò¼CÌàF¶:CP›rq¦ꬴ0mAR:˜4„ÒŒÊ’Þ M Iº»À¸œa‘Á¡»KÅ‘SˆªÝY­¹Me¥†~+{E*³Ê"?ê5Éeæ¥$²N(ñ~ÒürÊv÷罓u^Âæ¤¡ÔätÐÙCO½Ú‰è(¾lx¯»K\–U˜QhSÆ3Eþ%gTäWM†õš[ftÞØ¼ñÑk'æ¯~ìðì_8dÛüžÖ¢hΉóÓ•Ÿ¹%·)!©Ü:£÷²×R]Ú_7-Ò[¤¬À¶ž’'zú|Áç?”Ž¢ñ ®BóÒ«çÕìnNûùÿúT¡tïõ¿[ÃÊÂEïå½™^´.»èõ¾¯þ&úÎe>81Ò êŸvRÁT% ­Tѧ8gtŸrCý‘µv ³s‡!†f$#‰uíîâK‘ö"59¿ŽœÄ´Hc­ª´÷ræy¹×ÍÔGÚJ4–(o!­'§¢OK`[è9æ$UVÙ¯žŸRXà³yýa5†öÎ/u¤W®ÈجΤ†"3x*{ôÆ÷`উ2zõ' LŠ4±8¼ãèÂe–ÍÐúfÒç#ÛY‘t>;Ê]]®:c2[âéP”ÔLŽ•D¾ºÄ®Qžª‘ï´-¾ô¬":fûÁ6ŒÐ“të_ýçjÚHÅîùže7˘Ï=ÌäO±:iOÒ¨œù3UŒŒŽ–/_çÃlb+SèçÀ@–Æp7ð­|ž×Î9Œå8²Ít²–ÉìâH<ž:!žß œ·ãŽði´p=#8Ÿ ý•ùœF]TSÌÖÄ†Ž…ŽŠÅ÷rˆÁ¼xLôcÀ?à¹ÌÖ„ÖÈûŒf2KMí¯¥Šw(á<ºãTöðx²÷e6py ºk×íšZWq)ØIÃé 9–¤¤YÍ0Nc3%Œ`mô³#fìýãÿÏt²(Þürðï‘&ÃnvrˆzúÉóm~L…ÇäÏ«ãüáÆcâ}55EÿzØÇÅ ãµFŸI›¢[ßô·[¼[oË:zuö©þ…/¹u ŠóBçíf›ÉfÊ;’†G’‘lä6¶²7åʼ»#c"…9crª"Oh \Ú[฼3³ušúý$oV¨¬Ò¾È½‘éC©Ô”ö;ÔåĬþŒÚÈÎÀÔ©FýGô$ÍŒL mŒ´„’¡ò^ïf½žQÖîù ÷™÷b»èY3 IDATÎyÕ)£ó¾ZjöqŠsª»íav¨ I”WУ$mJµÚE‡ý´ÀΉ.èÓÞczhFΨ.K½šðD6œ[üæékFdÎz/üä}Ñs—•|öµº[®/Ø0®ß¾©z»ÛFÙYyèæÇ«7Ìékï¬44¡„Ôßÿ,ûýôîÛߤ#ç™#žÌ;-Мõ›AÌíüÞ=Ñ9Ë¢ëÿíX”cxߦû£MWç6 ­Ü4¸ÿ+žZ–mâžÈ¬¬%¡÷B‡rÆå”÷«ÊÙ™ñNãPÂÉyu) íŽÌLhŽ”çìKšC#s ]P$_å#>]×çúPg±I}6Г75£¾L6gd¢ûEÏhŽ´FäéFWöȆzBrþz3´0oV¿ÎÈÆ¼ÇúÌ«•Ì{(ï}$l ¼’3=ô}fFº£jçÄ.ó_öãin^éÕ¹zG 9I òj³ÑEa¼„­ ÌdjœE»ýý’ÞMË£™%îþ“ ×øÏó‚å¤Ü*¶¥Ôë£ìʦ°¢Ñ9ÝŽc Ï0žåñ`p<3¹=Ô–³*¶JøI 9RÄLrÜÍÎ{T[c€Î©<@1£hcg£†ìâ±¶Ÿ ¨¤ŽG8—çÙÅiæMóXhCU±f·…bpâŽ×€­c/Çó*[YŸŸ2ú¸’N^¢•«cÂêy\3–&ÒyL!b]:#v¬_Ìröp:‡¹)¶[¼Ã>ª¹ˆãâðúþXXÜKy|gßËözØNšëYÍ4šØÈŲ‚´ÅZs¨àpŒjÏöp"eœÓ;éâ4f²„vzØÉ¸Å5ð4ñIÚŽ‰õL»kjÊÿyÔbà÷éåz¶“0¹‘6ű2¾D{ dü GHPÊjÊ™y021æÉ‡^>³¢Oe çð>·pZÈßf"øy†]1‘~€añUfEÜ6˜ËY,âInd÷ðMPÛ²¯§%†…|œ~ng ëø<ÓX`éGýò4}ü† ‘ç \ZÎ9´¥\I° 4+Üôø§ýê¿¥_ì{²$¿ñYUK|+eÉpîâMf†Xħ#ù3Ȱô(£tžš¤²¿*[¦l®²ÿ”/’kÉhÝ冴O=åwŸtõFÿÒÊñÊ^wi•ÅßNi¢)Ôù “y‰¦È ÈC‘Û®ˆ”% Št%ÜÅÈ„iyöÖèì55g9M‘ý‘½CŒOklʘ˜Q•7™ÿ ]Ò¯$§xŽÂîKûp•QY‡B§öø Ú ¼Þ'=ؽÔi‰T§i¤Ž[R>›Ó™Õ7·ÕñyÝ‘ ¡-´´j œvÐÁ¥ýÚ#M AŸ’Sä’Ö·Y’vBBiÞIÝNI*-è´¡FÐa]·éi§…nLô}6¿}¼%C{ï%ºýÑÄÍÕɽ7õ9Ðç¸CV¥eÛ²M¹KÖÖ¾ubûá‰9kÛÝÕíô컣ÜúˆgÏíî[úpTUT^œ+Ûç;k»~qGòú_æç/É]ûÑü›ƒ£Í%Û¿:qûàÜöiíÛ³ãS: z»ÉœŒI£u‘*2—–>C›SEIÝ}R=$lí3œw"Û²* L˹žÓsöF†\cR‹úLÎ+H9·ßÐ~’†¥ tWy«Àý=&'Lï±6”¤ˆT`GÎâÐf±$mzÞFžÈ;¥ÀeIãûí`q“!¿ üº@S¯C9O®ãåÈ´HmdêPó:ÒÃùܦñ-£Ï÷§F/.÷ø¾‰Š¤¡‘¯EÞÎÜï.öÒTæc5ÆdœM 9«+zé ;Øû÷ùü+Æ vÓR»Ò›×r|h5¥©ÊÉÑ/ïpï.®£–wDêø€1¼Â,æy^d0grÉ8ÛöÉÈW#)>ÌTn‰aáo³Š]ô²yÌc7gò[b1c50ŸQ¬9I<Â.¦€ÜÂúøÞ!LúM`Ndr >¿ƒ<—²Ž"^`«he¬£@µ~vs„óØM".ü Ęoe]LÚJ’GXO¦‹sx/å죟¹“Ét³‡o³›·ÙÃwø™Ÿ÷°ŒqD`à€q6i0˜{ØÏMÇ$æJbšù€[ù ëù€á,ˆ UåL¢—üÃbÕòÒ Þã—<j7³î˜VÖÿuòÉðÛ¸æ˜M'G¶¦¦êÿÜ®SÅë„ ‹oÉVr‹¿à#1)d‰£ÛÕÌŽç&³˜ùq–¦–ùlc ¼Ë0žf ƒXÃT^ŒÝ‰a˸·q´!ëÖ²–½Ü­ÀñŒŠ1CX’pjàÁÈÁxoHÌgxŒµ´#¡>`¢£—1<¥ïAÏMŒ¤Š› Cß⬄w×佯/Žª<ûŸÓs¯?Åí·¨mŠn{Qþ8¿zÏõLb&­T—j(²´×[L¤'0Ÿ'Îk>ðÙþö¢K«]ZêÒ×]Z¤ìu_‹¶g«ã<:ÅM+E‡}ë ©õ ¢‚³ƒ¹9†ŒiÝ:1kjèL¶ÑK‚eÓB…ޝ£Ç¾j©ÈÓýÆq+¦䵓‰Ý˜Û»tå­í1+°‡TäïtfðFäÑ=¦DÎ Lí¶6'G[B2çÍ^íÌìt8²6­:’Îû~ÂG"aR˜ŸT_®£ÜUV):äéÈ׊ Ë(Ì«¯TÛeid'¤ç=›÷CZlÌ9©Òñ»TguÕ;²Ow^Ãq2kHx)2'´¾ÄÎÀÉÕÚôçúzN(½÷üS{çÒÓ¦:Røôúñ½_¸©áÉ›;Þ9!kK ý “Z »N,xZù—HçÏ FåôãüUsé ÷]}ù‡c“­íg¿^þÇ›¹i¡þ¬†d<šTæ†V»ÇªÉ:³ß˜¬â.)wÝ«ª ïðócÊ4Þã[¥ºG˜×gøxÝuJÙ_à$ÆDÖGŠjl,÷áÐC9 Vj]¨»×z¶†Ú•ÔX—²±Ïci7ä5æ-Ì L&Ao¥óòƇ2<‘Ð[ä†ÜÑ>Fe¢mÜ)ŸÔÐ¥ž=¡š¼µ¡ç87erh<%ì¡!cr yŒ"ªíÏijpýN/Á¼×ƒ—&lj´'ç@ÖÉt“âîÎZÕãžJӂ黢™Uù¯ßæo]…¿ùn”.Rl×Az¨1U©·N 뜶ÕèÂð3ßôÝ/h?ÅàŸk¨ÑÞYΩt§|ŸÃ‘©K8ÈlþLg3†€Ê¸]t€{x‘…tÄÆ†:>#ïjy³ØÀ ì éœÇ£±ˆî>>à¢XV>•Õ¬ä5š™‡å ÙYYÏ;t3}|‚ßÇ÷Ή̈́rÈÕTq-›x‡<—Ä7FkY³šÓpɇǪÀ¤àèl©“o±—ð³óùkâ•}-ÙB+×1ŠÌá¼Ø‘8¢ë$Ã*ò„ÇìU \ÀfÅ/Ã9B?{y‘O²‘ØÊž¸ôb\´:B1Õ´Ó7GÄóÕÁ䨊yób¶_&–l Ì Ws@Z@OMMêÿÜ®&PÃ`ú¸:îKwÅ'Vq¢æÖ1ž'YÁ ô$\ÎÓü1Ìçm&p"¯³ŸQü‘nÓÃ!æñv_o¾ÎZº¨`*Aä›MHjŸôµÈpÖ³„F¶Fr‘Uü¿b"OQËÇâùB"jØJM…å<¹‹Át%¹—­±4!Á“‘¢à(;ñ8:YÆ2:(b—õµ‰Å:skrÓôèÕƒ1ž«žÂ¬}"†1?p009²’9J÷úlhãÙ¾y¥Åƒ-®³¸Óâ‹Ç9ý.¢`^"αïAƒ‡ù—¾|Bz÷%{Ê¢kWy&Õ+ú€×0ÜåÚ’™ÂúÊ-èÓ›V¹·×–Е‘Õ&—85TÁxÖ±~†²/p0é¼Ðoû¹.áP ÅÄ"• ŽäôeÕ% *4¬ÀÛ9Ó8108aJ¤%´ŒËÉH.´«Ôê«8’Py9oR¿‚PI·ŒèP_&•×±Qi ¹ÈrÅyÕå. í.ÕÕª1at“ßowÊ!O$M *[ ?}¸è½…™çÆ7RFNy• D‡Ó“;£–KßÊMØQø¹Ÿ•Þyb¸øKÕ›#‡jö—,Z1ô¾÷:œ5.Ô:àS(×P"ÙiÒ!…ƒì(ÖÖcTÞü^=i[êºÍJx¾ÒØ.u9ƒ-Yƒ Ý_#¿QQþÿ!í>Ãë*ï´íÿÖ.ê²dɶ,[rïØØØ ˜Þ;Ð$™dR&É$y2“LH&3¤‘„ ½…nŠÓmÜmllÜpo²lÉêÚÚe­÷ƒ¼æ`žyfžòîÏ{o{íCǺ×}ÿ¯ë<=AY¤-òRÒžW²7£>¥® W§c¯(bcRò•–hèög¶GªHÓT¤¼T2kå` ’>쳾ظ¼! ]i^ŸÓ#Õ ‰œ=;½¨ 5°(é›<Ipsº‚ÕŒ¦™÷“&å"Op cy;ƒ¢êàŽ÷Œÿ“n_=TÜ©#çÊ„½.)¸Œ4õÌ7±©ïsmù»ž ËuÕç->¶Ì”PqÁØ@MP2=úê aã~“zÌÞlâÃ\kÃYjs÷Ÿ]lI¹Ã»ãb{ä*Ú’FžˆÕEGSÃjÙÜÔ0£¹†G8šib:µü›¨f-ÉÕŒmñ…Xh¾˜QýẤÊÈi”±J™Æ"J¸€_QÊ{”0&NouÒÈŠØ?ƒv¶SK+MŒ ™“ã=S»)§ŒIüSÙÏ6&ŦàÌg>W "W±ˆ‘læ#f2…1Œä0ïÇŒ£(fj<:ËLÚ‰bWíkäȈxŽU7”?ýËÇœ_æf0˜4ößÞÙDË™ÊĘ™[D;=ý“E*ãÔjéâøÀÜ„ Ñ‘øÞ 3”Vú˜¯>wßF×ÿ¶wÕ+ík˜Êâ?ÕjÙÈXÆs÷“e$=´±žõ‘õì!k#.d3¯s}ÏJz8!ÞrfÏELçN¶Ç„Í”ð^£’QRÍ“\ÉýŒˆ·íqˆýÜÌÞ·ƒ§ø0°Ö’¹Þ›IRNo29Îç¤(gEä)¶$ý<úñBËn0o-&5F¶KøV°æ’pþhÓ¹çÌîv¸ËÓgÓzÏ|‘UœEK4f»‰[ÌŸÍ(Lßè¾ß) õFLuà é”ê¼I¤#¤C"¿J¸3é‚Ý‘! ¦† à™A¾ßmOÒPQdGŽŠl§|YYCËUg¼Ÿ³7ôDèì>‹’&‡VDzÆp2O%Ìî'`¦½P§n›Íݶ&[¤;0¬ƒ–xÄ;3Êl)±#£1m~¨n€- ï±>RX”t)E5šJ³Â¤ŠHMŸ ‘†¤•)Í9µ]FêÚìÔ¦T—H·«¢4p~–à' Rï˜NŸ¾È"EÕ¶i,U\­½ÕähψÎùTÍŸ[‘ ûÔä­Hù¤`L¶p0Ú·-½-›óI¹=jH% N6Ü¡µ”T´ùלù4òI+’ê{LNéJ«ì5:ï×IßM[Ðêý&£"ë™ÚÄY‘Þ65-^îóIÂѽ:[-Š\À–”Qœ0 ôBÞ°nõ5ªzíe.00¡.­&Ô^âÌÛJ-+wRâHMN[µÆ*/wëJšY’05² 4!ðA`j`0ƒ#ƒbïßÞÀå”%å" æ1ê`O‹5áßÌ{è|#×Z7”+sÓ–æý[¤œ ?Ñý/ºÞ#~ù Ù}ìÎê*|£Ëú*}[¢½>Ú#*wèu?¿ÚüûsœàgOË”˜D»¯¶i(ëYib½‘»˜Ëêy’5Law³œ6F$]J9O²©ŸrË:9Ž€ûmî[¨`6ãÙÈkl£Žm죊Ú@!:â‚8ÄfÐM†­|B/§3„z^¡3þà4Veçq˜ ,§™a\ fqœg¾„½,#I/_ŠûÂÙ‡vq ±,’gcy*Nå]K3eä8ƒ±tq-¼K5WQAwÌžè_:¹„Ç ¡G1à?žË çjÎõޤÃúu'ø€b.`9{âµJ?n”^ÊopÏà5ær|¾?0€OâØÝÖ3%¾™Š×—ÿ™ìþ²\ád6³,þÆ"O·ðyîÎúËÌŸÏ,`žeÅ\¯þŽÅ2ŽêoDq9+8†í,L¹)<¢YÏ´ÅÙž™|†‰ñîr7qRL"™Á.†r4Ã)åϬdu<ü[v²›4·ÒÈ Y¯q=9že#9_0œýi7%úûé`]\Æú„ â˜Ðû‘ÝÌŠ<ÈŠifCÚÏBëc°áëGR¦|>Ê\öAò•+"o0sYÀ¹‘ƒi'„«ÆYµßÙïè:dž 6‰ÁóíΖA&ðó-~ÛSï¿Æw8:ãÛþSà"…††F’JÚ”P’t~hbèk9m —D:'êkñg"^¢i¦9Õ:ºÍð˜¡õójÂ}vöÕg/9*"Y>Lš47aÙÀä„òH:òû„K}~5ÈY‡š qJšaj ^l“~ó§Ô½$ý!pJ…!Fd´ENÌ™Òç¾ÙÅŒ¬.x¢Ý¸‚é9¹>Û#c‡É¶9œ1mòZÚŽî¤ò‘tŸ\Fs 2H”–žýRÅ#RJºŒj÷t·ïöXmL³õ5ev´%ogF]VPfÇL¹A ûþüÓ¿œÖ«¾Ò˜jŠ¥:8Ð è2ªÇ΂ŸŒÏ{(ôVà‚Àä>Íݺ#uYovÚ›7#RÙXPUp9#£’ Þ$ÉILL¨•å=:3itA†‰<”òå¼ÿQæ³¥jzuj ¨0)òvŸF•;¦È¬‘=Dæ„}‚Гä#¯äÍê³#2}¨T‡˜“ÔÈiÃ:ŽL5º#?Š ÷ÓSf‡Z#I¾GKÓ>¹'aX¸'iÕùn~×_59s·ŸwY|¶ƒu¡³“3=ôK?lðÄ­Þ= {:’§×?¾à…úÏfœ]ç[5ÍúÑ11a7øçÇ‚Ûö;j«½gØô“X?_ÎM™ù{[̨à)Nc+ø çRùs©¢›[¹Žfr,ÏÆ4¸g™FŽÇâÌ÷¿×o³1r)žçzöóõxÐuoðžç`ÜFjb.Ë9@/_ç8Vò íñæ`7ë9×@w±‡ÖØ#ØCÃ?öŢ©ÆøÉ{ _Š3ÌÛ9Ä,¾Ê«¬Ž‚Í4ÅÒÞíL§‰®x8•\D»)åZNfW°™QL¤•rÎ¦šƒŽ Fû)S™ø·êŒ%&eLeù§ ®ŒASýÀ£½dˆø&C)ÄWÑÛèw…üûjÚÿkô«Oþ³…äÿt¹ÚDŽýl$¤‚[ø>Or-kØÏrú²’¼E†µlàîc \ÌZ¾G3gðg2|ÄJò,çºx‡ C?[åÿÈ/¹<Π¿ÁS¬$Iß,QTkP·bu¼ÈN¶1…G™I1Wq2àYÆQO>îÖ½ÈÁ¸?Ÿå1㤒7ØZJ=;ø ç2…ÍðÀ™)燂“qcM-»RfÔšÔ­ªßøJÂÙ/|7ØõJ²û¦ÂŸ·½ËÀr¯ßã+ûÜù¸;_ 7ÜN\^²A¦ÅãWÿSOï ¼“ÛíþdßÃe'yôjw/rÓß{ãT·´Zu‰÷ëEs[BO§T(þr4²5 [þ¶ÀtO:‡¡ö.gqj¯ÞÈ`îÙ§+ëKí ¡nºÎKš¸/0±ÏÝ‘SC«QP LX—ÔšW›00ç£À’ÀšÁÆôùQÂíyÿÜ .R?ÜàýG¤e k˜™» Ì:©ÎȾÆÏÉûÄœù^ƒì4*48ë`ÿiÊÈ‚m“pMÚTvå­¥ºOcwÑà’‘}¢Ò¢LåAkB¿N8!Ô:PlTAyV{(*ûÖôüêÝ#d^Ö—Í…ÚùA¨w°æ\0£mÌËG§Â£ò}¿Ÿª1õ*ÞgîþaAîÚ?{dPèݬ!uºv+*ø37´ÛÙmÇ;{´Ev&¹ Ò?Äè¼o„FT;Ô™]ö††•^/Ý&›2+8±Ø#UŽ=èã‚lÚÏ ÎŒ¼H¤}§^M‡ó æí îÔÃ#ÖÐB6t«ˆ¤ÏGŽc0%¤“ê"ã"ß \™œt}ÊGyA¤1²5Y[üquê¦ÃC#,;#9þ°ßþ2ùܹµ½cÒ“’?~?ÿ³÷õÄŽËÛ"#8Ÿ×ù5kݸÖ3iÝýéÜUi—‡ºx–o)“|v™ùÌÉÛ[fÓÊø^<Ëß ‹[+?榰‰×¹’ÇbzÞ½ü Ž7qu¬>ÿ1gò.‡S8 ¼ÎE̦—ó¹,ðenâ.çnä0Žßð>[XofRÁÕ¼ÍØÀQ¬'Å,å(n‰Ï~Î¥šMüŠ>îf!”pqÊ€Ðå|ÀâØ+»¨¡’¹ñ”}ð>%ìbˆ#½Ìƒ±¨¯ëie¯ÐM-ûøˆÍdû£ð4ðU>¤;^‡ú7UÔÆÅt<²ÚÅ>">3}Êã~ÿ_š‘T1€sXÊšúå¿ñhêFvñb¼Ví‹ñß}1è¼ß`Ò¶üŸèHÿþ/þ_,W!ç²3Ž”œÄû4ÄaÇwYÌFÇ ¨×YÃÉÌó‹¨íWÂó Ã9^VÆðÀˆ›b^Æxªù„5|—V^g=œÉj™Eš;i¤’»ê’ ñ‡©d·rbŒ¯mà~Jø(n_Áß°©$8‰äéæÛŸêŸ nà"^%Í޳';‹àŒÐÒÐ= _ 4GGz`›ãMî_|Òí ñ})…ë‹ä³>fb¸³EÙlß]î¼·\ð¿áÞ÷~Á×Këtp¼{î1û_|«VÄ=â Èr*]ÍÛdã0AivÆ»º¯1—õqiyRïß#Ng Îà½ØÖq6‰¸ |1G±Rêx'î›®‰—€îË×ÇnÎã~H7›™ø©ªîþ†±¬äL0-œFklboÝ>ÝñÍ}:$ñß/W…ÞÞ&Æ;2ÊÊùØJŽÕŸ¢îw¤ÐïvÛHšéàvs+]±e«”±TR`.šXÆ Îe4»ÙÏ,Ö²ˆi|/vþ¾Éxžf(‹)çc¶¼›Q‘0=R_ê4¦<~ÌI²‹Æ#`ƒ™N%Ãxž< Ìà/PÇšxø¹.ŽW„lá$>dt©îPC )DÂÈŒ¤¦HšØÄ2.â%šŸpmäW¡—s Y븂 L°y†'ÒžX-?(ÞïñêOGN[âœ%þþ{v¶G_z51ïoÙÂm<Ã4ʘ®z»KG¸obâíÛ)N:)qÚúäueѸ­º7»o˜oØðù²ÃÅ}¢P>²Îx#oIΠÐÓ# h³µDÈÐb#›ìȘÌYIéj $×åà`é}Ú#Ï3©ZE^”õŒs*$"c"Yï”8/§-PÙZ¦sR¹ÚÜm†_»gÀçoMîÝöoý!¼¿<ÑV‘ÐÙ«¡ÄÞ6J¥z¼Y¢£L}ûì­ª^wAçÌ-áIŸœSbÔÛ¥ Í ݃D_úAÕת:3—<Ð3seÑ’SvÏ~ª÷¦çíœécª 55ŽÛosà‹ S‹TW:X¡¢Ófn´„ú"MClí2,2)°žÓ Úv†ªz•ÛÕíšVà IDATÁ@&azäåPk™5¢C†$¤¸¬Ko±IÅíþµÓMU‡ F„GÌÝýCø¹IÓ™ØRâüÀ]²òÈ"ÒmFF~Â¥|©JؘrlAÄ)s ùb½Efæ }Â_EVr˜KªUg5EÖW:µàµ‚7ûн>èÔÞá 7?l~;¨èÏdgl)¼1ÔÛ×ñGß½ÌÎý¡}¬ã®H*‹|ȉ\F¹·V¦ƒ‘±i!Ç.Š"é¸ÈüZ|$3Œ>ÊBo’d(Ië¼™WŸ442‚åŒgv¿q›éLf7'r YJmÌA%oS`?­LIßÝœÃ*J{¼iŠs~Š tB|p—fBL:…6VÅžV¶1ŽbðMºè‰¿çCұȢŸÈÞÈ¥´ò.Û8È+Ã*F²<¾ÌwbLÔrò̉ÕêãØI5£YN7Å˱tóƒ8‘WâaÍ$Jb‰ÉÛq¡*ÍbƳ†SY¿áß_ÓÿcÝêÿâ0peoï^RLŽ7°ÿ./iŽM1ˆöÆòYÊØÏš82Æó0ïq.íœÏG|Èë|ŸnVq­OOÒÃí`KüëÙÆœXžtEtݹ™ ® 1ÐIó2åL$Ÿlb—sådØÂq1ä߸š§˜ÌŽþL[ØÅåLd‹ù ›ÙB ŸcrÖúФÀÆH9Þ œ™¸5¡(RÆh²–ú@]ä=¾ÄnfÅgôûÙÉ£OY÷RKŠZrnûsrù­Ö¼¡¡ÝÌCæ5QÏÙÌK¸(ðQä)õoº¥Ô]×E†Ñ¨ , 4†ßy@*ïÛgÛ·_C½CË3ÍcýnòHM "òåHš)i“CË# °!e|J¶Òö^ËjÊêhX§aOG.J¹*a\(S§¦à¸±65;)RÄ ãÆ«ìpì5=>ì4;§¬Ü‚´y5 …ª( ïô«ÈÛχ {')jRÌÔ^oT†îŠ, \žWÌ Ðÿès é2Ù°Nþ–G“C;Œjé{ðZ/#Ê%»¥“j2ÊI·HOVWŸQ]î–òS;³uQ4¯bûõ÷Mé|ë”ð­+ƒw‡ä%ó¢[*Âäêâ’Öïü!üüÛÉžé~rn²«u€üak*œSÐR0¤@^[Zz¨D»Æˆ@gÂÌ´a£“š#eÌå{Å9Oõx åÂg•èÉ›Êà §¤íëu T’6¾`i^6rNÒìÀ˜‚žÏfGqFÛ¦A]FuÞºRÔöiJ™š·¤\c‰«4ôús1¥Æç ý}äôÀÓ“#Óx ÈgB[#ƒ#<Ë(öR‘Ò–³0"é½¼²È«D¼@KBm¾èåäô3¢KWøì ë›H/È\kíbÊx˜›˜Ìº".ãGN/óÓEŽoÎÜ{‚îS"ÃcÿÜêÀ Ð4®æC}V¡«ÔÂ2ÆÞŽ,ä}3‹ƒ,f'¾“2;ô<÷ÓÂÏé¡‹ 9ı4V¹‰— þ¬¥À.þ™ÙÇxv²œCŒàÆ8é¾ñ¢7/‘÷6•Šèˆë½W9ÀkdXN‚3y”èàªy“n>f#˜À$úÉ8ý«T?|§ɽœ® =F1eè&_izÒܼM¬û[é”»Bó8Çö ñ-be<„{á”Ç6UqwªÅ”1#$&h§•ŽxóPÎ*s c˜c,vÐDÀ-lçhÖs)ù8†ØöRÅ0æTQG ÇÒÂé,ãh2œÄÕdá_Çôšþ›µê»\=ÕÛ[ÉÍÌd] ï!÷OÒ&&ý:p^äÆŒO8eÌd ¸˜yñ˜®•R~Ès¿ŒO¯åM>—¾ÊŸÙÂy)wG‰‚ëâ¢\+Å\ÊBÎ¥…c¹'rkø »x–Sx,Þº¶³Œ¿âgÌóSXÁñèïxþDkÚ]¡û8ØÈYÌg¸œU1cÏEæ3„<™Âœ˜0+0-’ç÷4qväN¢”Ç8'å†Èî˜äø}/;ýb—üɲýì Ÿ8ópjïyá¦î7s¬y=Là7D\ƳjÚ×â‰Þ£4’œ:pmrþ áêF¯ÿŇlm÷ÆÙAÖÐ,âÕÈ•ŒKº2Ð^ŒÜ˜Ð85¡.RYgèaSBƒó/¸>41çpä"Œ,6¶DS‡dªn[³~9Ðð„aY[ «°5­½Íô¬µCÝ3Þô}F”du…þ:‘šÐ¾"Öš”11¯¯Kà S;…<éM¹&oxÞD6w|‡vEÎÌ~Ò½tYîýÑ}OÁ‹ éÂÈÂê«¢;çGw¾ÝùRîêw¯OQP‘TQí˜fÝÙ={RënÍ}朜5¾VÐacÞÁ¼dÖðÚÃÛ×ß“ÛðÍÏO®}nPsë4ögt •Néí6y‚æfK ž ’1!'I% UôØÞ­NšH5rUäõ)Nh6­Ô}i£ëåºE}ê1„¿Ð˜tB‘â* {ümhAhlNë#—R ½Fu•Ù-†faChhÞèPuRPðýÐù9ó³nÊTî”´†>"c"ù #ˆNЬÈù›Hu $å„ð,í`ÖßÊn› ´Û¸¬éÍX–æ¼¥÷G>Nøp’÷wy|ƒ¯ítçÇîÌZtiºù”0ø‰ Þ?ûÅ+î\âεò“¬Þ¦¬Äªç7úU™‡¦ûõsïÿ<Ã8*‹¿Æ}WY?˾·ô”ñÅÈXJÙÏ™Ìè·â1Œ­<y”$—±Uq%fç1O ìŠÌcCù*kÙÈéœÆë8”rgèQsorǪ§+YKÇE^ç2ZË?òÓÇ×/Úx–*^çPÜš:‹]¼ËP~—tjÚB÷÷cMx-GL¹Zâ$ᥬâZÞ)ø$ï“H U|YlŠ Çðcöîð8A~+YÊ%9OkˆI¾O*v6µÆ–ºxEoáíäɰ€nÎæ-®‹éõsy¾{‹ã¾TëbþQÄ>öÇM¸Uì©€ìe9Kb’E -±ØÖÿórõNoïÞå5}j–‰³-‘g#+Éò(E¼Ë…Ìaõ丂?3¯ÒÉVþ†ŸpVL+9žÊXʲ/²™y¼AØúU¬´YÅ l¤œJvRÏ!Ò4Qª_[`ÏPʺ¸Í÷Unb‹âe)k³«9@;]ts=£B#© ¼Î±|‹Ÿ’¤ƒ"–s×ðUúØRî Uð|Ú‹¡k"¹ÈûüŽŠ@)=Ë$*8“Bècû8Ñð_5ÙK Ë*6Vì¹$óæ [þɆznwæòÄÞ ¢MÙ;5¨»ÌÉÝ–~™·OXõ÷ßkN¹†ëgó{R‘÷BS‚öâhÿl÷íÀ<™¿ Vž¹=4“ùïRÅi )u¡#íü%49²ªÏwJ4–Óki$÷‡Àé¬ëÏdæìè3!¯g’¶}ª Ys³$?ÎáÝŠ:•‡’ y½».(¤UFþ.éOdhI™5Cs¯-Ôv™ÜkSÖð¼«ÓŽN˜ØZî˜Ððvu)G§œÑ“6(l¾¥¨ùÛ3Ù1½S„ãV–œýBpo[pïÅ'¿8gÇÒ[ƒÑï‡Mƒ®ö1¹™»ì %¨1¤EKFjÊ«jp…l—W«C›òá—‹š{ö4/êÈÜ1B²ÛØ•{õôy"oôaÓCA`jÎÏû|)r\¹Ò"Ýä &-Kù(g“‹tD¾Y®´ÄY‡Ý—scʬ@¦Y2¯¯ÒöJãû\0ÌõZòzú •±µÒq5FuÉéäÙÒë§]: "ÖóóÀ•áu¶VÙÓîÆÈ¼ÈƤW¹pˆŠVïTX:ÄÜvKÒÎ)¨ä–ó@H¤2ðQÊô †ÔZbP$,wGŸ wl|­/;-ÈßœV™›2c5OÔ<Ç¿mtï­î=н—~¾ û÷»£Ólòõ«Ý¹÷ns?òÇ·\ÿ‚™cÍ?4¬yŸkú,¨mËåt°‡g8Ÿ½ŒÔ÷9=ýÔ¾ãÈp\GÈ3—[XÀW9—?Ä×~µÄ—8>ð/)sò>ŠœÃ4p'¿ã>ä÷DœÌã\ÚÌFšx+öðî¦&Þæ;XÅÏYF1[)ãÝO݆]3‰öSC=”Æ«NߢÇhˆßŸá&f±ôSÔ¥îø¿êÿçrÕû©7`;u”ÑôøØñ ŽæYÚØÏxúGpýçË»É"62…Ù1+¯ÿö±¸ß°uf-5äb|m›ýX¶ÆÈ¬müCLE|Ž2¾’rB¨‰˜Í31Bx¶#e‹ˆÅ¼Ä†X¶‡Í ["K8Ì—ã`}¿ê»ŸÖ$üM¤œâ!äH®fm’ÀÑuI‘­¡ýôõƒS¤]Qp˜²À gD^æ}&°“ ,¢‡ß'}!šø¤/æ\´Å¥¿Ë½´,³j˜îñÎï™êÀYÁ™MáÞb›>˜™˜Ùµ[:™úÈ_¢#EñLpgsâÞG–'¢‹?'\Pð]Nb‘ )NꌜÊùÛ¯ÄNÈRž4!0:o>¥I3#ºNê¶±`cäÊȈ@”pz¤£\"¯‹ƒ$½¶_5‰È¤ÈÛ ³"õm’‘mýš´„õ*ºŒŠü˜ºrd¬-·&aiŸ—‡8¡I~¯uCmÌ5Ö¾ƒÞT wB—Û9¿ÓÞÁ‚¬®PiÚ’b…„ä@zŸt C÷Pí]ž.vT•¹=¦R^£¾Gj˜¶zÝåf·ù8”.•ót¥útÚÕi[Á‘Ç"õ··LrT«î"ËB}¡z„S#ú¥ÕiuÅÎɉºÜÓn9e¬fy­»z´fÍ+óåÃ^`@ä=ÞLhM¹”ñI·F Â^ó*éñR”–»-ñ¯»ó뇥›TX™‘¦‘(! ãFNÿƒüð)<{£{ïto§{o÷I¡BSÖ™K§»÷3þTÂ- ß.U™¾Rç Û¼¿š£8ĺ8ô”pD_²™c¸œ—ÙϽ~ÃA.f5<Â…<Åt–ô“Ÿ¸™IœÇml í¤géæ,Žc/Os*Ë".HXY“ESÜÌFÓÇ¡ÀÑói!Ïu¼Åd*iáCJ 籞£¨âyŽåB³™2›bNe—°…uœË®ºhg5O°Žaœ#ûFÆ$øþ¸ùnªú'îñ­»ÿ‘h%³âSÓþIØ; ¤“>Ž#92Ì¥šËyL§Žã :b‡}‚‰ñi;ç³'û®Ž[@íÿI|õé×H¢8Ü÷ÿ²\owú§me±‡t 8Š6ªI‘‘º;ØB1·²FF°A¤c¼Çu<ãÈàç71?¶7ÓN#ŒâÞ¤”ƒœÍãæÄ(ö…GÖðÒœ·µób9šÙÌÏzZØ™ðבg©åd¦q4Tq+Ùy=œÏQgqþÍѽYD"V3*’ˆt%Y89¡1Òù9Ÿåž¡…TÂ" *hÈy$25eDàP¨#RÔ£!­>åè‚ ò3>Œ\–Pr”d³\äp‰ºHM…tƤ9q¨Q;sZŠmJ©Í©¬éS\,‘¥\W¢¦O{Þ´‚iÜÓ®tˆú6a‰C½æeTöy7áÆÈÂÐäñê;ŒÏXÓ+›6)¯ ‘nW[°3é˜.oViëþêâ¨P­¨Î¨M¸9R ƒ!«ƒ!+'-·¡c`¨&Ôé ô¤ýq¤ÞVz¤uy[JôDª› bú>[He¼ÕiE`x±êœty¹AJ2v‡ªøMà¶ /¥Mé5¼Í€Àþ¬†UÔ³·GgJ}¤;#µOE…åy3vänÄ>¯¥5BOŸw †qRÊyc#+›Ðkt ;ç…‚·ÇFGö¥MN{/kKÒñ‘k9D-£36pY΀Œ¢HCÒñ¡âÈ¿rSRmà´¼ßDÖqu$Éö:L}FsAÏ!•‘'³Òù+Özÿ”°ùr¯ñjÊgC¿e;ûYËyŒ¦œ!„ c/5e.Éi‹|&¡7rØ73¦ÿÒŠºb³ šÂ/=ìî/1‡Wùó8—}±Úûܘý /3‰:’È‘ãu.¤”÷ãðñlc,³h#Átq›™Ã¼GšÁÌ£Ž‹LmBoä-jHÅ2ø‘¬îŸhŠa$ïHÄ1ÍÂø<.áøw{.lf*C˜ÀA0Ži´°‚U dg³ŠkØB!6@ößÁGF¶g ef½Ô³£é¡;Ž^ÆÔ1‰ýTÇcš3Ép,Kc¾{}j$O3„“9H††ø‘½ß’1™2ò¹¸ø<†Z®'Ÿ»v’¢&ž™­d"¬e9«bhCY¼\M£'žœ áõO-%ý6¨ÊÿZôÑ/ÁÊÄÇŒÿëå*ñ_|òdx‘ëYÃÇìåì¸[×ßî7qL`_à‚øƒ—Ź‘iÅ2Náî~ ³ŸWIðC~MCŒÌú€­Ì!Ã#<Ïlš¹â?^ÆJjã­ñ@¦±‡Ë¹†«ù˜—ù§ƒÇã&Z+§´òYvó+ÒLá‰x\ù5¾É/9?&Þ÷ï½’\Ǭ¤ÛC+CS"{hãÛ¼z-2ŠÊ¬Ù=ŽïuY^–CœÈA¶s"kâDb@1—{ñähâýÑÄbCØNÎoöaKäÕðÈÞ?Á9Ö”ª~ßÃϪ~ŠËxAüž>¶0#iÄPwÒËçGQ$ŠL s°Û‹$&šTíĤ›'ˆŒå2r¡“RFUé-Rë˜á†¥¤r:û U¦|.pERGdÇne cJLÚ¡>‡Ç%Íeh—-?\ž÷1˹©àüœÝI§%Œh³…ÒÈò¤ƒ”¤ÍNËè^ NmWÁå¡?¶ÛZp]ŸDŸ-}ŠÜEsè…HI»’œîìðlè×ÅRÁׯÍÜõ˦ÿÔuÉÁ^ÝÓªW^¼þðEkÚÿ`G׬2Ã& i ý4´&oL«öAê+UE¾Bû¬ŠtPàñ„1 IÚ†å•z žŒ¬,ØÞèì„4=IGµ8}¿Ú‚VÖ§\:Ň5 EÊùçС>O·zƒÆ>×÷YÓk UØéíµù êœ3#·'Mý1”LÞe÷A-æ÷y¦Î¬Èý$&QÏã}¾Ñé…*é"O÷ûŸXÇÖ‚ú‚C¼œP5Èð” Lg C# ª8‘,OÆã„þ¢äa^ $YI›»»íü1fô8VleÓy‡×I‘ ž?©[|ÿí¤YIg¶kŒŒ*ÜðAôâ¯ík=àÅ»»/YŸ³Ó­9FñYVp2½\È‚Ø.q2irq{¤Š$¿e#h$G%áy.L˜‘pGÊ]1ïç·ü–hc(?dKœ® 8H ÜÌnæ§Ì(™¯´ÒTó\K)";CoñëcÞ`—æ³´1#²;A¬çUv°wbO<Ç!…9qSøÚÿä¯8ø©{÷»bUü›#¡Í…L'K×qsLÿy)ÖØ7s-ƒâï¹€ÓXÎ4j9‡×YÂÓ\Ê~+-,¤“ãíR^¥™ °Í¬ˆÅèëùèS‘ºe4óm,¤Žëÿ?ˆ¯ò*üçü¯ÌS›ÿÛ“¿ ÿíbÿÕËXÇÒ¸¿ÝÅ_ó83)¢™<íñ–ho2œ c¥f*ötMe$¢‡Sy#~Ôƒ,_d×°€ÝŒcÐK6.^ìçj8‡†Xj¹ˆ‰”ñ8›ãK}ˆVRTðÍ|† ÌI¹*’!ËJæÄH®Æx#x/çRľÈcEškÝÖíþĹ‘V6ÒGQ`OÊ×C¿å6ÆPÇw˜õQ(÷< ÏÉ“Ré‹Ã²E ¥¿/÷“dÛI.-Mí¼!ÜÕŸá9 äI?Xá{9Æ™ï¦öÞmzš[–u¸l·×º´ÿmà‚@Ž?Xý}ÿ±y7°7ã{¡=|a4ñ°d¥¿ã„c²«×棒Nfœ˜y$ídèó Åãòôy=´3gF4©‚5‘  #04atho¦HmÁ¼^;8«Ë÷ Fòc³*S.‰`LÊ_út%M­`,Õ‰rC%ÚªÉСŒBÖ[“ÚmÖ@£ªÎh7&úSIž‡x–±|Š%<”ÆQnæ¼õüJô½Çï~éêþîìKwo /u$ý²ù«ÎàR튾™q¨/cœ¿.»wP²ùD™Á½”u´Ÿé¡F¿Ìzzdµ%çl—¼ëÔFó;Ù\Ìúe,Œ, þÒÇÜÿ¬!›’n´¯)QžØÌ—•ôé”=ò Á–ØÌXyo‡óú'ª’nùÉOœßlrä…XsÖE_ ¾_°ªYkÒ —jÌéS®OF¦—%F&iF­q•ŽWÓ_U£o59§hiPŇ\$#œ(1{·Ž‰Z·z®Ñû9ânT&Rl)ÚTjq?sFÛ$›×ÌPâ6µĄ́±GhŒâÿ<ü×oþÃmõMí{ÙT§¶ d¸ì^ãò&d j´ ï‘ã&’/8LÒá~ÖâÕœ¶¨ãìÈvzž§v“Šõ<^êÒ£š 78·Ä§;ì Gž $òhÞèÄêà ZKRoÑ~EÎ9lXä¶¢S›íë´‰+‹š#ã"÷d\ÄgF†–É$š2þm ëƒÎN“N8Z°<2®Ãœ¢mAˆŒ j˜œ¹¡+¤{cyÃò~•qv¬,ï­È7J|2éÆuðÝÈ¢ŒK‚'÷‹Š~ÎU|”qwóFÐ7H†èÕaPÁqjëiè´‡ßÇ~y3¨ŠL(qnÒ°Þ÷³ÇÅ‘:£_Orãæèow:ú/îZó`É QñúLc]Xð¨_Ïr¨}Å2^|ŸwYÀB²lï²Ïs-;èÏ\òÜÆ£lHÛÁg˜Ë$"Nµ—¿gëø.S9Ì ö²“ã)i?¸ž 8Á#©z­7ïÑ›§YJÆc YÂY<õýàãT³$u ~‚'›²ÆG~žqGГÞ#Oešì¾ƒãÝ’«} æŠîüËÒ6ë›ìç#¶3“õü1ÅCTs‡øÏ0‚ËÆkt™5óÛ™Ë/¸•>œËռé\ÊKH+è×ÒËØTû0!MŸGÄÜÂiéDM%8†:ò6¤èÂzÎâÙ“êK_r¼Ã<©>»¸Œƒÿ[ÞÒÿ½Ô"Ϻtkõ¦®`qšXØu)Bo§ÍìD>Æ£,d£¹©,u ™ß5PflŠßß’Mùñ­ IDATâØ¯`ÿÈŸ33x“p?ge;SiÊ»DüMšŒ¹‘2 ‘w"³ÙÊ2¶ó9ú3œ=\”Òû³•ù‘’ØÈÄ„ŒfŠA†­ü>ã®ÐÝN-æXÆwX¹=ØÔå—*SñBÑVîä Z˜Ê†tÝz˜8v[¸-|í×65xºÓyG’ƒ½;œx–MJ*{Èŵ+Œ9+ êecƒêÚê1Õ¹µwåsO·[œu›KO„½UÖ\Ñ©5ç>cî@?ÿtW0q­‹r&uÁ‘ÈÔà˜A÷›vÀƒ­¼LóÖŒ¯ë»—‘ÑYËŽT9š×4GªKÛ,-ªeEPÁâÞ¦‘*ƒ¶`Ab—GJ#U†E&Ux=çÉà´ µš67UЖ³ï ©m²9ùNQ“siâÅH!21¶46+X|Üþï–š½ÃÐXmÐÀÖŒ£±ò¹¼çÀéú³ö¸^jj ë™1ò^,ÈÇNdL;*›ˆJT”ڜ׷LU›E‡Í*Ú<™8Ê8Êb½býƒ’ØËA¿ÞæVûT«#Á ÌÉ8µÁм§È—¸>˜«‹ÜS§æ¦6µ¬|,v 3»$¸72:RŒ,8Òj\£ Új´”É·YÎǸ,‘¼ÙDc¢Gðrâ¡ÈÇ+õ*x6qw£|‡JÔõ2´Ý˜Œ;b™H&ؘ1”²Äö—º¦è{l²¶¨gð©R•©ÎùUÆeKé @ÓÙlŽ}“Êd¢àýž*w'fÓ÷„ Öwé°[ï4¥Ô“çÍž†lgG˜ñ’ÚKFÅ+n®HFÔÆ ÏŠ[rßþŒÕ¯±‡ ÕÁSäYÂ^ Ã|ÆgœÜC3Çy“ß²í)Rhnz=ír"ÎJç„빊{Ès€[XËL†ÒJ '"å‘ ìâÏx‹}äT¾Ä ”¥"d\”z~x°Ž YŸ¢ÓÇÑ/ñ2{y‘ô$C޳8êÈߤޱç)eç3‰ S¢[{JhÀjÞ¡‚5]¢¸Øl²4PK̶0šýLaVJÄ ^§“?qU MïŠM9ؕ º Â[˜A'M4¤ÙI{iâsX΢T˜ýVúB,ç—³W7]åB¶¥I¹Ì¥ D²/MÞuRÉ8HgœD™Íö¦Õ«2íØþûË•ÔsÐϼ¡ â±,âìà:³O±”^ŒMÃ…‡ó³3¾žI5~ð¹tÀøð<‹RõNµÌg'¥Ô3ˆyôI{ð1D42Š•´s‚Y¼Ë·#oE. ÞbC×Öšáéh{oºŒ]Åí슜¬ ÞIđϻ»ìÁ<^âóƒ£ÁA%ãÉó@VßH¯¢­\ò¸¶0‚§ÓX„=‘›Bão-;_I_%gyu­_Žá}ŸÜiij޻D’ÏšV®£Æ†Á÷½ÛãÓ:znzÏûÌZí[[BùSòK¢•Q유‚þžø£_ÿóI*L-(K<ëǘ Cq²3ç»Ïk[4Õ•èUaN_>Ⱥ0K:lK´ð|0,6—§bãÙ,‰QaH»'‚Áhì­.of°4ÒÙÔœP¡¤Ý{\R£ï ‡©¯T^áh‡úDiÁßçõŠ„R'rFd”(2¦V¡Ýñž† pjÁ ÁZ611±2kb¬WÞt:©.ȵÉwè &ôrª‚|Ai¹ m®¬ÕÐS®Õ#‘’X¿Œy}*ïp-íÁ1¶Ò‡>´FF$rcì;æÌà*u6©Î{“²^&ôv¤Ì[½ûIÑñŒ(±³Ä¬2÷¶™@Ï.6O°<¨ÊèQ#×®<‚—"‚LÆkÇ ž*7ò¨-\B)#x-8uÿ.£wâÃ%Z#‚ž±ƒ½”Ÿp4öxO³ÛÍKüŸ ^‹ô .ȸ<¨ŒUËÙͦàúÅ®õ z°±^NãÃÙYÃǹ‘]°ƒ2G:»97õTñ0×r »¨ŽÜßÛ„›Qï‚fÛŠZm¿QiÖ‰z-}óH§ ‘©‰voÅÔ’0„ÝÆ’/PÉ­ìc7‡¨ Ý™¶Íô¦™<_d'TQLJ¬Ê¸(È¢ØÄHK°‰ï²œ÷˜Åk\DŽ©Là)ND¾™»ÙŒO ´QIÂ4Þ¡”wm2æ¤iõ)ýá«!ÃQVñ—œÇ:^âÖp£RPÀÊ8‡6æñ1–sŒ ÙÇúó.ëÃSbèG¦¥|=Ò—gXÍPš8ÀAêéÍy¼’1!(gu´3œ*㽴ë䦤֨®{Ébޱ†5a M'½Õ® ½#í1&m¤¥qoêá¹,M–I''XÃ:»H(¼ó_êÅÔ%ÖU®úQÃδ\íúÿ^«þÊÕNK¿·®€Äþ)Dë9¦ð1Þf'87S*2žVÞ£’™Ù<É¡“’óiªØ1òJÖg¯3Žwt§{ã ëS/^o>âV¦³‘¥ìáú³ˆ)ìb›‚Ìf5·r‚g™ÅM¬ã1†s-§“I]#™ºƒ§&¸SÒ,çóy’I”2Š™d‹Ïú~âáT*¹‹3³>ŸØJ5{ƒ7ìðKÞÛï½V¾Vá™Ûíz†ž»ùRví犫ï5s¢Ñ µ¨9Að"븘ú1Æ3¤Ó4õ71opâHlXPôÎùÎ@gGªšõ.hÍÛìÍùcÞ± 'ckäêåùIÞy±ÞY#y4cn©Î¦µì ê8zÌÆ2Ãò†tdLÜL>¬"ñ3#YúôÓÚhs›ÁY—×ÉwŠ3&D’XEÖà‚|VÜKŸ}cã[¥y“<\°—gLíòNö7;2¼Tm§ÑûÛNPK>Ï–ÁV–¨m3¤hw¢W0*R<ÂuAߌ!ô*ÊÑ@_j‚Û«‹ÍãúX襄©múQ[bVÐ~Æ(Ž3>§@XMìhðó¬ïõwJK7¶¼È°`mÁ&LÎÙÁhúÙÞ]|y±­!÷©g-¨†ðW2‡=œÎ»œÃ¥,fOphæꩦ÷hŸ<æôT•×ÁíË~Ãù|‹x€r.c1gò.5ÌIS÷†p«Ò3áF¶²‚»Sûæsl æ22µ´ð îe{:¡jå Vr‚ÎHcoãÕÔØº#S¯îQ>ŸuKb/·¤Uê?Þê!¾JCŠ/?#µWd/·q 金ó»ØžfHÉ„“Þª“è짤ñ¹©Àû¶ô\ݘ¦sáÏþstâO¹ú4[Ò igš¹Ù­šÍy¼Ï æWœ ‘KèþÂPžO™L)¥u‘éê«Lw`WÛ»¨«ÉMü„3(KMy[™Îa¶¦éǨâsE+;XÂ?þ.òJ…»{êìÐÁ<ÂT2Lg/U´3å©ïEN°™³øˆ·Èr”¿¥–}œÍ«ÜÈAfÄÎŒ HÌçd+gó\âµôZ1šù ú3‚É,¢ÛGeœ^z9JŽeýM¢$cBÑ7B>±ú.:ªn¾7æ˜7Öë9›¿­ãküC(ݘܾÑþ%úñ\‹æÑ78Hüƒ¹‡*6Dç›æš±€/¿(º’ó3~ž^°·Óã‰Ù%îÌÕSÿr5½œÙéÑÞàKMÖf\–u]äÊÄ‚ØWòîHºý›{XI˜»#q¤`ßÍørѪŒšÄ…Áö*§Rì§¢Õþœo'FSù×Z£v9T¡G“æZÙœ/$îŒÍÊôh3°§ö!^<¡gÞY#½vÈo‚u„Ó îi1¼ÖQ:&j:¨ºÆŸJßêBŽ':¼ÓêhÞÄ`H¤-Ò£¨2±»T®É=j3¹IU¥¡uÎkñëÈmý¤C¯ô÷CµבˆÚmÏ:ÞÛyͶçTDƼR©¶Lg›oçýŒ9¾6ذœ¨¿iÍÚø vY¡»}¹81?è,1¹Sg‡gòf‡éÙæ.îˆÜ”q ¥-Ž5y$rÖ@£y:x'˜ÀÍ‘%±w“ƒK .ÚÛFùNdLä¡¢+ƒꃼ“ó³œÓ[#÷FÎ-ª#—^³º$ ¿ÏZSç3ÍJ™ž8µÝ»¡[œ6˜É—u˜ò>ŠôPZT‘•›—ìì£HÏBæšAÑò-¡p _âYoq+÷2…Óè$Ç<æðvä|ù°Ùº¤¿¹ Íc_á þ’»y9•h­ç…4›-ËXª¸ ¼ÍXÀ0ú±œ+XÀ7¸™g9H[˜ÆÊGmº³ù=çPÆÓ ä[´¦LØý)”öÏ^äýôÌmcYºÔ?Äxvð à=vsïs1ÛˆÒWmHgT¹ŠgøO°.… ^–ž9å¬àz–‘åìtN¸•³¸/%PtI:ÏáÓ\ÏŸHˆ8;ñ8cx’c©ƒøXª_[§[FßÌFÓÊQrlçsqÊS/OkÕ¼ÍbjNj•þㅈ褙5LçŽ06Å~tRdð[¹êÊ!Àø´»Ê“Pd#oñEò¼BcÚèµ°‹/óKÖ3œµÌaûÃmYç'¦š é¤ïÓÆ%ü†çéK–é\ÅYìæ³¼Ï™ü‚ͬb¿Šœ’±'ˆø8«¸”¬¢Öu>ì0)ã<ÖÓ¹Œ—hà§]4¦³še„T ÚÈxžåî ƒé íIÆÑÈ{dxŠEÁ­Ála ­\˹)Æÿ<Úy…Þ|‚'‰¹Q´é=Þìúdó ›tÕÝØ›E_‹ü.¸Zq©Å}ü°Ã»«¢½Ó2¹¹ÁaÞWºÀ-»e{ûÜϳ;'†°”M#èÇÔd\y5øaV¿Äª³¾]¦)øtì…`Mw¶*? N¡.Ñ”ñ¹ ç·¥Õ•¢—4zƒ’D±è`pƸ^&Mì!WjRÑÈÈ®Œé%Ê{io·’#å}]ô+‘ÉéK:•öP‹]y#ˬ/:›“5³Ñ‰¼•-«i³¦ÆÕÊ"«kµŒloÕ¿Q±`w¹–ýž >Ëa~žØ¹;ÒÑ®­ÃwO\ª22³Ñ¨È€ ‰±‘¡E¥‰ ^IL(Óšs´èé2ß æ›²FthmÑ;ëÒXYÁhz3?MŒÉz³Ó¿ç&žÏ¹,8Q°²æœÛéH7[ûº¥Ó× ÍÙ™RbXÑ„Z…¼¯ÿq"ø%~™Z®:v´hhFCb}¢wðcùY>bRг‡-êÍHv–z£Ú_µ[)–i _…ýÕ&õΪ쥶Ýý‘•_àÉØ3f­ vf|¶à5úGJÓž?v•ŸoUd>U´eL ÆG® Šñ¬d7-tdϪN®]ïÊg¼2‰yÂ(› g-õ­+ Îå]z°„1ÜËSœÁ‹4ðò†'òCòœûFboGþ>vCð2W’ð}3“aŒ¡†ó&9Ê4ÞäÍŒ¯EæKSo†×SqÚsâ§<Ì—9›‡©e×ò•43-5ÆÖwëµ±ƒÁ]C°È œÖ•ÍÍk¼ÏidÈåbßc£ÆŸ8ÀÆT XÁuôá;Ò‚10ÍrÉTö§Þ¯ulIõ“§žDO_Í…Œb5Üžš&r(•k⛬ëÂòNªÙ>šâóÿsÃÀ¦4滋™t¦‹;,¥é$ÏZ/.f$ËœºSq{ØÌ¦¤›¨˜§9uϽÍA63˜£ÜÄ3,%ÏÚÔ«ø^š]–~ª6V…îõæ.VSJÌpF&ÝVóº ÈÝ‘Y±³ƒê4«¦Ž!`@ÚYÀ@:i¥“fq Òƒ <ÏnnMw›“ÙÌóŒc.ƒ#ëbïÒà’.ÎïÆŒoTd"G‚¸Äñ2G ÷õ~‡£•®ÌYØÓ¨œ¦È“C\UaM“ª*ƒšrQÖ›Uª²šsNI©‘áã‰%úPŒ]Áá`Jâà”XUKÃežì¥»KÚ5Å¢=±Š©¶5¯CM»LÑvî >»”ÑL)USeT^M^H´fL¶q#2²AKì¢Øy±uMr.½x‰×‹nh·ŸfdªÔ·+vØUi§¨ÓÆ6C2>Í-TÅšø àÖà VpNðZ¬.ãx°/vY0.M1‹Ç˜ËâÄüJýÊ5å ž"Ç}ÎYàªû“éÛõzUÓG:º™ RÖhÒ¾ÌÆ‰QÛuÁ#|‰¡Lç_MïØ)äceA5+÷1› 4Жxˆ·97Vëd"ûbçïñ%†1ŸfÊéÃônè³½ ‰l´$v0ˆ÷YÍ.f·n´tU:YÂõ)}_*þÞÍ`Þ °,e&ìc*;#3ccƒý)Ro&«YÊeô§7«ÓÝÌ»©Ä|«RâxBo1‡á)ÉéÏ0„ˆ¥¬8©Lçx¬2ü/Ù÷JÄÇ陚צ:²«èÊ_žÆé¬O¡Œ¡ž­ ;© a*ýYJ̦4þâbª˜Ã>ÝÌÕéįGÚ]þ*¥&J9 ø%Lä^0—»˜Oea Ÿdïù¿xþ¤•i¥/Ç»9é‡zŸDŒ/¥/<ŸnS·² Y?O¼ÃíLg2ËØœ¹,_f|ª§ØÆ1úPK?Îa§ÓB ­©%í<Žs1}ˆØÄçø %<É)ä¹’—XÈd&†nÍú¾O/þ™J®ãmÎdsú kÐdÚŸ÷ÁF">â(WPF/–ëVÎá@Ƭàþȵéeç%:ÈÇA±£_ ~ëîyÑÒÖè…냧BÏuµóÁžØˆ¬òö:2×§zõ\Îsãw®´å û>Ç žcC¤.+ΛéöŒ/žˆ®|=\9ß•Ûíjq .qM•9½øC›O;9Ì à‘Øyô ~Xoh^U­s"ùrÃÛìlÒ'òp¤&±ˆÕ‘3ƒá±Ög$Æ4iíÐÊ îge0<Ø^bGÑ¢"å¤õì¡“/ð›èÍÖ§†®œÆóØÊõô`Gä´ >)Š~<å¼¥²ˆcÌLC¶óY^äHšNr÷RÍ ¶Ò‹Si¢9>¤–a,äúȧbåÁËÌä 8Ds òh`,- üÏÔÄ2&Ó@Ë©á 6±:E5¥jŽbJ©?ÎÇÓí×$*OZéý”«ætHz iÞy’Ò½%_v‘#vñítQÙÕ„ Ö¥Ó,L7´Iš‰µšÙºÙ_] ˆ´pŒ•ìe7Í|+2*ëöÄh¦1žçXÍJNK/?c?[™M]ÆôÈÁT®dk̓¼Ê1fs Ën&g\ÏPža 91‹"O0‰&.`>ﳉôðmþÄNæ¦ ¢#Üéó<•á ZÙÇiü‚ª`Døå“ž¹Ñ½ƒ_"CMlpì‚ _‰áë;­¢9lÛé_^³h¿Úû¦§Ö™ÿ€¤lidZðdОwŽÏ<ê‡Küry˜¿ÎŠ£Î8ä®mžjšÿ•myÁùœKgjì‘5;8kÌ«Ï;«à@§¾6ÆFU¥Ž÷ÒÐîENÆtÅlý¬ 48ʃÌîkVžØ™‰ý95‘¹Áq~Ç—ÙÞ×à&÷צÁµ3h(u¸Ì’ž:ò'~IÇ‹r‘É9å Nd >h:5ÍìØà¼]= ¯3©Âà5«.jˆ4äºÝèÆKÍëéævûªÕVxT%íYSY×wjΙ™Öé´‚ ‰Ñ‘aAUF¿oç½ØicÁ} b=×9½Ÿgì­öòVýa +z[ÚìcEuyWáòý:•žPŸ1¶`mbðãØÝ9ﳡèÅzÓÛõHüˆ±Á=<ÕÃùÕNo7ŠcAe”ÝW0Ÿ!<Ælfv-ácoG. N¡š?g3ðsÇó‰óîåô؆ØÁL¥*².Jü1ä . ¶S½Ïe¹–i¯äïøeøåûn>ýcifÅ?† O,)LKüΎȵ/Ù³Ò¡1üˆþ>¸#üðWû;4gìïô<ß_ æñ‰àxZ;ßä=NÑ­ª?æn7çItÅËM ŽÑ—Xϱ4ÆwFÑŠÝNÛi\^âÆÄCœÊyÌc'“©f!G#7dô мÏVÞe'R>á[´¥éPs€‹˜ÎÛTs khIÉ ×SÁz®a'ÄÖ22ãïÙ•îòGpË9H-Ÿç‡¹ƒ…Œfé)ÚÌMœËëiÜûz><~ÒAŠFFs£LéÊý¢•ÏPÆæR¢‘3ɰÍ4s*Í|œÑ,NW9ëÓ#z"ßäa©[ø€ñŒfw*Öè \È‹iù‘ÆöÖQÍûäù\j˜É>f¤~§„F:ÓðÁö¹´“ù,W'?é·ô]ÖÑ”þˆk©cšR$Ö’ã6Þ$I釟£Šç©H£¯'›®Þâ3àE:˜Êj¾BÄ\*¸€§˜ æ]ëÐŒ›"Ÿ~ÉwI/nä'dù-Ü¡³¶›ïÐY⻉µÔûá¿xþ˶|=õ}{hŽ>³=<¯\oÑ»\£;Î-ÁöàNŽ%N¨½¹ç|ƒ¯ôÈÓ¾rÀ_ võ²K¾h÷ÁœÏoûúrOµ¹PÉ*Ã'8ó€—®¶x·¶ãö>%ï>þmS8ôµ`mÁfpvÔ­£-¥ªÜ9#‚LȘœ³:X9Ü?Єã’·™ÙU⢢AECƒl •Ií$æfèk`ΙuªÚõMôLîcl»)3¡—L¥~¾Å¢¼ë:ÒÓÈG·ÆÆŽqa¬¦ÉÀÄÔ%:³ ²fTê;Éñ¯w8·è3‘¡Nm4²Å]Y%Ëc¡Ó×cÿ”1±Ö¬Ó;XÑùÓ;¢þ  K+ý¸áY%Eåy§C•e|ØSÏ‘\­b‹‘¼ÊòÈL$“7²Q[âÎÄœN ¿ .º Ií ¹¢~ÍfL¤!¢è½Ú•è30owÖÅÅ w«»"/$ÖÐ;ë/ƒEÕ†Ò+ë@PûNÖ´¢…Á¥ ‰],â”#ËRª½SOÖ’e+=ø6㻂‹®,1?1$x©Æ9NíÐÈ}ÌÎ8=( jx4ñNp€úHï¬o$N zPJÎõùÌä~%wü:¹YØùÛ°·\ë;ü(cabªÖûœÕSÓ÷l­jÕnP>Ê£_×y'}Z=ÝÙÍì?ù÷²‹)ü”jv°‘ï“çݸ€Ñ5¼Ïʽ–ONÉߟg"Û8ÂÏXÄ7VTÁ§ñLât®¢È(ò—äù—¥ ±{¸Ž…ôà«ÌKƒBº¯_¦•=,góSNDýùˆd6£9Ê~.eßd›¹…¥ì Ê9‡å©ÿ÷q§´ˆÕÌåšÈÙÍ®aÓI¥hc—,ôe'k)ûÏ=G—qê1“ÓÔ5ôâ‡L¦/s„ÒtàÙÕ!]ÆTžaYª{<ʘÀ!Îäi§&­U¬'b Ÿd7;øOs7ò,ßæUÊS€êŸó{R)ÊÚtBö!–wå­ói6œ\o9‰D•ÿŸžü„TU1Qéb פ¡j[ØÉ±‹•d˜ÍÙL Þæo§º»#<Éý˜’Òò?ÏŸb·O0œ§8BõlêæéÙEo^¤›–H& IDATJ÷Žç+<µ¿—Êv¯1:Å w¹óvq+¿áŸÒ+êË4±=$l''‚ú4г+¬eo§óñÍ"—Ñ\ª¡h÷$¶ósª½Þ·â+‹ò¯8‡´3;r]|ú©aùOôc$Gb=#‡3 ‰M”3œA¬h®>æû¿÷ýew¤Ó5¶ÖDÉÁ‘åFÚÌŽ>»Å#?±z»†EnhtQÁE!¹`~XÛû;6°‘Ú²Ž&6EŽEžªUÓf%Ç"W5Eï3 rv°-²µÃ-µVvx.RÁ²`_™ª2;ó~ÇBÞãבc4dTä-jñVbE‹AÉ(–+=áÃÄàDoç-«u´èìÄ´à]–·È•95X¼vÌ9­~뻹LeÁÉÆÈ“¥Öç< ¥Ýg‚g¸"¨ŠŒ.×3cÜx§ç]^£¡ÍÄHIìp^]»NÉ{m¿¹Ç}*ãü>Æå**r}#«= *:•ª3¬QI“êXEFtÂW9ÆÅÌ-uI°§ÄîHEA?±Ž8ãZ®åw%Bì+eÚO¸— µ>VªØjIÐ)m—kñ¯é½õx$ȼAž9a U‰‘ ÍŠOQ_§WÑØ2³ûÊæí*º&XÕÃe¦ç½Ë½–SóL¤U]”„ÈŸ1‚e©íé¾¾Ôj1+; «P›s81žUAYÆG‰Rnî¦Öž•³g`6«iÓÕ÷9¾ùÃâ¦ßZÿSþ=r_W¶z_ÖÚeYyããnÛ.Û¡e–Ÿ®ó…¼0ÉÓx‹*fR[,åBÖПmœÇ©é6åÂn<ͱã_Nµ¼žé¼O]dC¤”a¬`hì+‘ùÁ&^âªz¨J¬®‰ý:’mœÇ³Ü@=kxœ½±ÏEž:˜ÀÝ™KY›© ¶s6åLJñ ]a‰EÆñ0˘á”|ñÕœM?>¤žþº¯“)ç«iÒÂ)©¹­?e}5ñ!ÓbMám’¤÷®Vã:ö¦Ôóþw'm1=Nw¤+´¡¬eõâciþV׬&uõîK¿ÊU乇®“çç§{Äaìæ›dùEª§‹iæ6ž §¤lÜ… ŠÜu뱫™Ëúé6'ô¡"8)ЗòÿµöÿÏrÕõLå½ô4ïz6pfÉ<ž‡YJoúp˜Ú4'm- Re†‹éI)ÒanžÏ0œQl`|ln°™Û¨åbÞê"‹§i•c)PIÌ[Ô28‘k·†‰å%Þ`?çRÃÕ©³ý7TÒ—]ÄáJ–1‘sùÏPË<ª™G·QHêgdm-52çizòØÁ˜ž¯\Ña9%ãu ˆäcƒKd³ææ ®±®Ã™lF2>Y¢6#[ªµàæDu»áíŽx±‡ù&e /øq0…M‘ ‰§XLYG÷Àà²ÁÁØê ØªWðtN¦Ùöœm±=±úº1Vh3"¶.ØÃ¸ƒ}¨Di¹9å4Q͉rË3Î mzÙ÷øuÚÔ`>=Ø“O¤¢”±‘éiC¹6¨ – #3#}‚Ý,¦wp8´1dèL(Ö>gS¬&h¬á mÏnœB ë˜ 6¦ý8ø1i²lÉó‚ÁX†ód¢Ã(â0}8ƒÀ@Ö1*6q›©¦3ÝiGÉTllõ~«™ü-¥¼ÕŽF5z=2}°°×+ÍúǺŞ(ЫÌ1µ–fý=eE…ÙUÊ"]"qð`Ê´àsfd %+hQtL)ìkõZb¹ÝùyÖž¬]…:ÙbÃÛk×*«`rV§Vã Ljõ`pqd |˜uIlYÒ„S#]bÛax!´¬ouI}lLëëëä…áϸp…·f¦šÿ©l5?óÛÒNmŒ5eü{l4ïwÔµÅØ †éÝ¥ÓlÛYã»Ï{²XE?ÿkØÝ3ZuN0žã#åœáü]–õUÿVpetHά©a‘O÷GMu©¿öuòë·\þ¸¿”Ñ“= !¿9¶‡‘-A–þÔð ‹i$qQ쇱%¡-ç´†‘4ó8=Iï~Ìdso¶¨Š ȇ։˜ÍǬ¦ƒ<¡íFÕŽù‘Á–D ”GEÜLK¢AYDÃxŸ³˜M?ga²\0Í,âDv2ŠU ¢œ'vÔŽäO¸&óä!=O/¶s ƒùä"ΧŽÏ‰é•l'–1ƒÍœÌ©‰ØþxòÖóxLc'UœÌÊÄMUÅñ¬H’²¥dP2÷jÑF÷Ή©Ú8’ÉK|T×.¿y°ZÛ U:&Ëqý‚ãªj~uvE•™GŠ¡&?mÆ{~6ÆCÇëÑjNÆ×.·ýò^Jb?Iòj# ô'˘ʉÔ1,x<Ö¾‘+k, ¢Œ>…þ8‘ñl꡼Ù}­•kŠÛb‡Ù”u}gD¢XE³¶ªkÕ‘[9ŸëØÈ5”òT¬{°.çë±;x ÔˆÃ¦|©Î ;Ð슠W‹n]4ÃJ ééËéZ©¢¯ã#?¨11èÀ´zÛrv×ø{Ð3ö“º6ÎËi_ª34vCA.ÈÅ>h1,Ò?í¶Œ?Ç6èÕjJ³ ÁðÈ—³î®RYâ´åL©¶;6)hŠ…ÎÍÙÛìÎy;§0v˜³f5¯Á䌯¦ LùIÎÁ©i}S*x3§´É§µÞ¥1²6òÍ´Š¬Gë|?gk/=‚ÃÁ]<Ãå9ûÙ•¬ô2.«!§€1=5Fm…ÙEeì«yíÿžó+ã6yp¥-7ê?^»²¬ÃMöЇM\ͤfZõã¸î²ùÛ@αc˜Ë®HYlBᢌ+‹-¬îþÍN}ËàÎñ™W˜”vFXÙlàçJÆOù¿Ë¿ÇðPb–Ú§~EX¶²Ë¬÷Å¥œÇœÂ÷¸,¥OÚY\˘ØV¾Ç`Vò5Žn Æç,e$K¸#é—ŒIé“–a! Å$î¥/SÎÍÔ3‘ ¸‡4çÝääA'¾ÅxÖÑ'ö.ßeïÒ[ùË’3¡ŽM”$¸Ûß²‹ãø1½YȽt¥„¹ÔÒÊ@Þb×%‚«k)¥–O9Èjx‚jÞç\ö±‘ XàC¶“åÔä<ÜšqUd4 –“YÆ«tã‚ä½A[®t‡¸ë¨e÷¼cöeö²$)„Y®£qBù[ËYT2™m ¨3™™H­nà0#¸Ê>Õ¯c=[Ùžü‘öñ »“M ë“_¦’ûoyþŸÝ®$Ī’dK2¿¹˜7.äz–PÃAFó ŒýˆˆRnbïq¯±C\Î\>ø+'ñwVrCìf%:«j>dßgG"Çúœõ\ÊØÈ2¾{“·µ-­Íf —ÒƒC,ç9æ³5Q_ÈWháMNa"s™ÊF6fô¾Å$zq|²Çyñ,yÝ0Yr~ÒQ,á k£¼$ìg¯EõŸº»ÁKûtùÔ¾\t{Q4mWæÄgãA;<þ¦u›­ÝÊ‚}áøOüôýÜ/;çLceFEs»ŽÓu½ßµØUîÖ¿¹l†ú}t¨ó½ÈCKbs™»¾Œý0rv¤CzWí„H§ŒËs">¨ôåJ¹¥=œrDHÛ›ñ…È…±­NèâÙZ¿ˆªÕ®“â&ƒ¿L­höÕVÛ—‘MËF*ê ÊÙ¹”)+tKΦ ßK»t—í4TêQï‘ {¬°KÒvÒÔl; >.sQÚžuÁœà¾`bNÁ±µFПé‘c8@†³2R ­•ám:Zë§Aû”öiǤŒ R„ŒI'çL,.ý ûôr£¾d^K¶xvEº~a±Ù9›‚gò Š´Ã‘>Áýµ>L»8¥2ë9©ÛŒ¹BÁ[GjÿµEaœY¹6û£Ÿ|Gö(w­ÚYÅ´xu}”½;¥2ö¡K›ûUÕûµåŽWpcdj¡ß¤ÍŒjo‹Ÿð2 î~*¾ûþƒjæ²$åò”þ¹6}ÝsÔ2S™À ‘# ÁaçFJ’µ©—‚ÅÁ…t¡'#øœ[I±å¨•„;XÊD®c+9Àv'¯ªãÙÈjá·ÌOÖ•óN¢jÊcÓÉ|J_Îa¿g8“XÌAºP’pùòKn‡Áü*ÊéÀ[‰>q4#x#I:Wó4‘¦†%”p ó9‘&þJW*9[Ê^^J¸Õ\ÎØ„Ôƒ¹\ÅîüL!9u%FùåtM¼!ÙÆpîæ}¸Œr.â…¤§5•ÏXk§WÞsKC›¼m<_Ô9¿$Ù_¯LÚ-I;­5±XmLZÃÕûrrÿ%õ鿤ø§Ýé ­Çý?ü%‡ÐžÝtç0C8ȵ¼Æ!PHÌNâ0‡ÙH ÝH]ʃVºp×±‰Fz1”}›ä 1‘ }ïÄ>J†µ´gíy—»Ræo$ ás9–©b&UÑÈlçv21öN{ZlHÒó™I ûÙÉ2¦ò=JY’üËXEfqRÆ—ãÁY‘þø7¶OHÝ]R½ÜØ”ùÁ­ñŸF‡¢¥ Žtõû­VUG×Dz™{¶«Ûô‰Íã(ŒÅÓdnX96u÷ý¾ø¦[>“ëω”3žyÁÐÈ;ü«xŽ Bm-WE–FžˆÔVè΀Ro6ø¸£½¶–øEo;²ŽoQ«(¶7mk‹vŽLH© ÖðDÆéåJtV3«ÕÖFŸ–‘r$öIÚÐv&e|[œP¨µEsJ·œrF·úM³Ž)WTØYo$íØÍùÔMGÞHDyPŸö•£ƒO뵋­H)ŽTÚ˜õr‰÷û0kc­±úbe¬kòHg×’3¸ÀM­~•srl^‰ÑMºÑ…†ê’ó\ä½RÓ‹4¶£Á¿Ä¥ä"«SfñXGßm4¦ÅîÛɦ lp™”›RëŠÕ·ÓܤoÊ÷ÙÓjR“ýNš2FÄîênJ‹y9MÜEyZ?`7»ËŒö;Ôb.óÛ[ŸsKdTÝíìhñjä ´÷V©õÖô:gPuÝ!;sÎ(T¸Ú[767ilTÀ&Pä‚ÇùWÙRèÓƒÌYêº*Ã"Ý#z(úcüÔ]mÅG,͸ Ö+ZZ}ûc«ÛÙ?%¶—×õlÔm”Ϻ32XDJ¸5gGΫ¬êŠýÖò93ã¶å´K8H³Æo<¾›æZoÑ‹>´£ˆù}ŸÈ×#ÕA/SœR™4²‰3©åYº°” ŽýfŽç…ä–÷ƒôäêèžXO§1†o±˜·™FÊRz ŒäM©¤Ù5™ÏXÁ.*x*Évb3ûâ/üã1ˆÍŒç„æ4‘JNám>¡Ž!<ÄgÉguàL#ëé‘,ÎÝÆD<Ÿ¯ ³ÀaÞÉ;Wy—áteØMgNHfíy£|~k#¿›ö2õìOö§ðÉÎz;¦±=iÙýCç1*&jƒFJbXà å=UyrÐ^&ä›·IÓ¯Sòǰ†ßtÝÿËÕáD#}()°G?y­çuTñELÈ_VØC==yƒê(`;¹%FKì¦%-!EGާ3 á0§PK˜Âï¸.íê €­T1žaÉJå’”¼Ê)œ@5¯&Íßõùy_¥„cy“eL`‰Ò&û8Àµ á1.c4s5/°”\‘TÇR*Y+uþûZÛ‡—7°6Ò=lîì¹qUGŽDEv†Åƒ<Þ ÷¢3{Dñ‘°­Tzµ›sî+b§)i2&¸?í æ ¹¼6m }›‘ÂÈiAS9…ÃDiç…6ƒTc»Ä-¶6x&å{ ~|­EMwërrGü–ÏZ=×ê´ã#ovЭÙ\Þ¤%gD³&eDü<ò^ÖØű' ÔWèZ¬G£‚ [±ÕÁÙÁ€œ š2Î ês:´ÓÔ(˼<ÿ­·ÊZƒ”2½\qW=jŒ¡}[c™]J-.°³Üäc;ji¶ºUYdO¥­uvµÚĽE&éQbÅaõÁóiê_dyƒùôëè@ÖøÈ'­^IùÝ@»<ÚdL…Î-f±?öBd ë•D†EÞÔ³$gðz05Ò;r Ð‚r{h¤OJvPì´ Ö]‚)AA‹5=\ïü S°šÁ´œ™•Ê %Æ7Gk“s–Æzd­jñqÆ-‘…±gšÅ ÖðZõ oÛ8Þ5‡ŒªMÿpNØ¿,68­,­CV'±ÑÄí6âXRYóZ<ÃÓžŠúWãÔÄž¦¼ê„jŸéÑ^TÒ+RlHà‚-&®òR~¡ ÁG—yø.Éï ¤YÎk|;!½º_=‡9–Z¦²•œÓ6¹®‹Ê#©1Ùôâ™ Úq?Ý’¾Yž;:ŽûC›—v«‚ƒ4%®ô›éΔç)Ô‘K^mwQÃ6*“nØ´ÄdßB>¡Kò «È‚|ÊåÌd; ¨Ñ¦û9”ŒÜNbEhÝÉ”£jÕLÑ%‘nœÃvÖs QŠä)?«~ÄvŽç Ös ϲnôe;ùœÈ©HÇ“x–B&&é—mÉÌ%Ï騙0í†&¾ùò$85ƒ¥s„+ØB ‡é™à*ò3­Bú%¾ÄéL ‚Ò$¼6±×°‘«ÂGœÈ>r d ­Lðíÿ ¸W0‰:z°=¡Ú×ýWuÿþkËUþÙsT­Êçkúݽ,#$Z³EÉbPK)‡sñg¬‰TÅÞ¦…zZÁhJÌ4û“({?š¸†Ïòôkº'víEÌOVù5¡ñt Ó™‘|ÆÆ$¹®ˆ×èšXÚ&s„Q¬áÙfÕ›ÇàüvO&kôim@ûÀżJk¡çXþ`ÂA…•U`Z¤O¬ŒºŒ“b»M^þú¼ËvøÓLïõ7=—êÒ;ú`jzÉìxÍ`;ò/˜#u-áœ`|Ú€ØÓ\ÊIÒHe^o‘6“b63Ÿþ‘tБýÚj̉ÜAg:f\{˜³y¶ÖØz/Æ&dœÛ9@ç”+ý˜ê¬c}c¯š. î mä‘qü‘ÙA_2¼Ó%gp³Âf#™2{kÜ‘ó*ïç9úAOÒ†6»•3H±­»¢Cv–ê[¨0Ö›â]b;‚ÚŒþC„HtÄ–œ¢"ªý¹Ñ€Øª^†7êëÑjõœÐ¤„®±g›4pNä©V§—*L+möRä’&wgÕrjÆeMJšu¢s¤WÖ!†8>èœÖ;v$jÌŸÚ ª­ÜÜ62¨KÑâ¸`@Z»à£( îdQП_¶x-8-­KÖ€ØšÎÆÆÎÎ*ŠÚwµMîJ"ä§ó`ƪŽÎl0?x=VÌ~ìªUn_n\“žÕ~ÖÕC;¢m7wp0åxúFºÄ‚tÐÄ¡YÜÍÉDœí‡k<7Ãêµöõ³à]—Ù=Æ‹Ãiád¿]½¿6d_ ŠmÙï[à÷ߢ8mväİú1ŸïN¹62,èÄ&~Ý^ºÀ§Á—ã¶3îoTÑ—Ÿš¶?=eR´èÓôÓ·´úׯÁÎ`IšÏ; b™Á(*9ÄhÞ§škÙË;Ì"ÅG\î‡ýh®çΓ]ÂBª8…)T²•šI³ &Ó¡Ä=øJ°Ÿ®œÍ¿ð-j¸4Ù“*áDÞç<¾M­¶=¬&®:ŠãPüÈ,ç^çMR4³Œl>J6xbŒkd7'Âß">çjš9Äšd†”N>7_;'³ý¨³þ,%g]¾œ ãR4%‰uùí3N`5ë’KOAïÍ›%²ÉxédZØ›|£ÒÿLUÏ?Í,¡– ÍœÉâ¤éצVÔI® ÿ;†UÿåêèçP‚tÔw-N"Æ»ÿÓ%ì›<Ëa°Ÿ4×p ûƒiäßI'Iþ<àëg¼Ï* ’ˆxWþ7š8·xÙ\ËzrøQìEîâ5N¢œXÃ-¼Îfö²šS¹÷Ò.Š|ÜËA¦ç‰“ÍÄöÒ…-ÜI#[éJŽé¼Ê÷˜HÏq/²•åŒ`® uN;,ŒŸO®ç –{ ë^÷çÜ:Ðkýéeß^nÜö°hZX8(hÒs·ë~“žÿ¥Èi-n-svWk ⌱iƒ#Á6¾@¢Œcc•ü>厔òX·°“ìâ@ËcÕi'5±'RnÊ™œ6ƒãƒ¡iãzê]¯s½YX`ó—íŸ-w§³Œ«¨Î·/ÒS3NM›Þ¬¾UHy ˜Òì±à«\ÄãÜt¬Jû]½ƒýÍ®6<­[¤CµT°5öF‹Ÿ¶Ðj`ηƒzvirq½†&/0²A=UYÏåœÐ ÎjÌù;ÆÞqžZê¹5ž™²¡x‡ßÎóÄ‚ºàç\ÀGŒËz(«.6¾ !ʘŠt`Nä—íü™ÙÁõFÎ ~ŸÒ+¶¶»“êDü´ÈÒöÎ7£¼ò?Î.Ÿ®ž•óÅ‚ý)…鶉÷-Onš¼"^ô½úYv­ýOUº883ëÆØÓzìw[Stërg|Eú[¢wNgóèTa@ôÌ”ì /ù Öþöfw±NMNÚåÝ+â9›ê¯œoÞ>5ÃÕ]ä[O;w™w+ýýÿr ªþAÇ{“FzA_Ža=Û#ïo›©õˆ÷—ùÊAEãõ\çåãØÉ±Þ¼ÆúðuV1–wèÃËüˆýÜIÆ3¡KF-ÛʖĈû¶ÖWèÎÉåidä#ÒJÆÐWØÃHža-¹‘õÄTr,s™Ç¼‘Ôª‚ä$_ûÏùU»¥ÿÓÝ®FÒrÔþþ¦D!z‹ÏV0”>tæmF²ƒC aÝ™É 8Ž5ìa8»ùEðXh#TП‰,x½C›÷:W½$ÓžLc*ã™y/e|Ћ\ÈZ¶ð•´¡ÁË á0ƒùŒÛèšœÑ ì¤G8À‹iÓ‚v ¤¤_lOJ†)´ð–°®\ÿ¬_Å®ä\R^ïãkˆŠÇ¦6”…iwÄ—V»¹£œàpЙ©ä?˜F±Ë7Lª/»ïªfþÎðÈá´ ƒA){”µ·­~ü¯Ã~»PuµŠÕ¶æå›â®Ùpùâ¨ùûWÑ>Ò’R—RÜÞY¥J›ì žáS¾Yçç)C#)=j½N—ävßÈ_¸5%¹>øUBÛ<‰ªXÇ´k‚Nu }©Å ÞooK¡±‡¬ç”XMƒei)N£»Rzf\ë½Í\Ž¤ì †Vúr­?âÂE¶·Ó-X››˜V;’ò­”)%êZ=|ÀÀHÇHÏŒ>±ÕÍú—[Ùä!.+U˜rYêz["£‚Ö2¹f-A¯ 6åø Æ^V°TMsäÌVSÄÊbý+œQo0Ë*Œ/P–Q›²­Uš…t%.7§Åž W¤¤@ûX ¿)ÖØ¢.݆bÙlËy:ßñ.tZÎ6p\]žàñJ7w<{ûàœðüø5W­-;¥E:çýàÃ`[죧³?ҾƣioÜì™;¢û®nò~ÖVÅE¾ÜËÔí^Xðã{ãçùs7;5½n*äÍñMrY]ôkòî럼~Ä®íg×o´K½ôpÎ={z§½ÒÏùËÌ|Ñú1Þn8üš½ÜLÌRö±•_Sĉ)““øÕü€Ï½=ÐEoû×s™A!;ÍjNç¿d2¥ŒNÆQãYÉpÖQD+¡?s©¢û˜Äé|•÷hJ„Oýc÷Q™ÐZ?NÚk[Ù@o°–öÚà­Ï*m©ö-_Y‚;HSÄ&ú0”¹ŒgkÒ1ûÇ3ŒbVÑŽã8}¼C ²)—%\ÇùªV+Î3»¶'áâüúûbÎ`z"i^J_á )ä,îׯC:ÿ¨žò4>M».xž {ØÂIL¡ë™N óØŸ¸×Ž$×ð ‘v)ߌ, >bbÒØä8—u|À$¦å¯I𢔿ÒL{ú±*XI=© ŠwC›>n KéÀ¤&XT&ƒëñ¾½.º¤)tšàO½ÕÔpˆ—µ!þžf «˜êñ‡2??ÒnMÇ‚vl¦kdud{Ρ ¡iÌ*söyø2Ÿ 5l±“«=Ûá~ü¢“>wdY´ãFûêSTº©IØövʪµ¹”qA/6EΈˆíˆ½À9<—\òúÑ‹ÁË `§²&ÿ"t`K“†ÝšÕÝš½Ñ¤8­2hdx'íÌ sojõ ‚ö´³§½Â&39Рs¤&2¥BéPGËöûrW¤to±6XI 6z7¶ñ4˨é­S½Òû LMTèùb£ëÈêÄ1±‚f÷¥M >fx¤Ÿ§nZ²s¬¯åÅàÒÈà´+b3;6£Å'œP¤)¶ Þ€¬J )M™Õ¨1ØÈãi3Rº·ú3'µsV‹I[óaÚ$ry¿bÊÉ”tÒ­IkJ§ú W Û?î×W¶4”¯ÜSmÏÆêbŽ¥cƒÖØncÊUîñÁA…‹|)•¾ï‘ÊàWn{WÓ>‹Ê,èʪP¹Ðø2?n(WžÕ9+¨awZ?ïápïÔšk"Ë‚G9ÇÐŽközO²QÃÕáÃQv±s'Duuég…Ùó<{e—·3ƒƒôç!zå-wÜä,zOÒÌ¥ð cÙé½*:òfS­b;-äØL%o’ážeëYÏ ž¢1A`ML£ž2ÞgzÄËwìóLôÇÎ1ôJ*AG¾H3«ÙD>£–Þ4²’.ì ¯SÉ.fðrbhlN@æ=´ž²#»Wð21g3Šž¼Ÿ\/†QÁáÈ÷C›“(ÃxQš÷ƒpIÜI5øé.äqz%`JБQÄùB˜L 'ó>UÔÓ™=ÿÌJßpT­Âðƒ¸O`'2‡!ÜŸdå6q'SÉ|2•algo0¼ÉŽãaR¼Ìé,äXZxuÜH'R|ÈU‘ûÓÎ ª™Å[ä’ÅÅ> j=x‰©|Dƒx;Q|.eOÚe±yœÆŽ“}Òšv¡êKÞžfïþ”ä—ÇgÌŽ}ý a„ëßÉ}ýªf™L*cBl‹Cþ‡¤Ç0ßYäÏ—Ø\iÕ<×ë<ÃuVÊ4}/nÝïòåaSkçqz¬,k '¶è΢¨íWOÇŒ/õ)3ƒÉ=t;Ò–~ŽM–<ÁY øªOÚx~‘¿/´’áž”[2NÆÇJ‚Â2%/å Ï)+³¶›ÊÞ –i±§²–rg2)(lQP«à°M±9=cÍ9Orb{_(öR“άf:¿åí KPÞäáVÝ" œrD®Õ‚&kl+0&Ò-g~óDÐ7ÒÇÖq6¥4¾Ë·IÙ´®Á½9¹Vcifp“_´¸$ˆ‚mtLNk¦1cp°<¸¡Õ†à‘Œšìæ½´¯24´¥€Ç±>ÁÛüKÐÂÀ kÖFh-3gÉÞË—§>´÷ Ï´~Rëœ',¤õ‹ˆ•Óݘóëó1§™5¿bá¬àØìï¸æ4Û—²9ø@å¥Nßå‰3è—ÓLç¾ÌÃ!þ «}i¯…ùãu‰x±Okhã Á½FŽ1ê=g­·ãMÕç:ÔÓ‡ûlš¯q,C9…A¼Âq!3ƒ¥YŸ0‡N\̽_Š•%²ž)œÄPêÎ2fòµ œËx†%4‘ãv†ÓÅÌ¢™Q •.ËÌ$ô˜É`&1”ƒ”°1i—åÃLèÀ#G5©vуž”0‰—iNÞYóë]U\ÎÂä`ÉçjOg"oQÃØd—!¿;V—D[Ȳ”Vm=ÒÕ4£˜O̪h K9ÀÆäK4ÐÄ  …vIÒ+·˜Î*~È£d Ó_TŽuœÁ²D²ÕüŸNÚ/%v‹‚ä69™wØAcrxÎä`YH}ò[9À¥|Âp.å=Îb-X¶û¿l¹*f#…ÜLÑQÛ#- Ï"_o±„\–ž@);ØÃj¦ò5–sXȼ¤YŸâxšX–\Ãðóhæ‹yE,+YÁÉG#ƒØÅ•‘Ùô£–j®gQd^ʸTû%éôÔTG6¥\üš¯%¨‹ƒ”D©óTž ±•§¸„¸—~4§bGÆ¥±2n‹}Ÿ“øC’gÜ éAÛÆ:r˜NÉ w*ãc·'¤Ý*»˜ýºVóOñBÜmžò+¥6kn¤«Õß¶3ãQò¢Á ©‹GöþÍ]Q¶CãÎÝÖüÕ˳3«o•}=ãÚ¿çØŒA¾Ëi¬Êô ~^êªb5¹½Õ¥9¿IûnÊW‚:&Gºó< œÚ2gwÛ"߈¬ÉèKsg'Òî¢}rrÚ•º±Ò¥Mulµ.«WÆ´iÍFPVæ„RcÍd ÿšÒ-Ò¥ÑÞXš‹Õ½SŠcC*ü¤£³«T¤ †G†tò/‘§ZÕÍôz£rÞnU„\[´œÐK‡zoæü½«­¾žó>?Qý¦Æ|Ê{Uü5m@ð´/Ä^ce‚¯|6mZ¤$ØÂwcØGs,y!ö8¸>(*Г²XC°ºÀ¹±U,Θ\É„d$ð\Ö)5igÇU÷xwt¼ðê½ßýY¸½¿ÖvtˆüEAAhÓ_ÝP°qrÜ{‰ÖµÑŠHßjf}óü±Ù'ë+SU­d"[ø^å“ëþýíŽÉ}°<´Ýé70–×E'_bÜNon˨ æeš¾ØèÎW½{¾nãÜô¨–N6Œöëu^z[ƒtõQãÈJ8ÀOµE»nẳ*ëEʘÅcüŠíiߎ-áý)ŽtËhŽ=œñ½àJzqZ‚OÛš»ùÖßõ|Äf_äϬåô´†à*">ãé¨MϱŒM¼Â¼Â~Ã:Fð‡Ä0>‹ÏÅç”2˜ÛYMydÏПqìàß {€Æ$›Ÿ¯73‡;i¢çF=9sx…ƒ §†*Ž0™A¬a='ð"ßáXb;ÕGÕƒQteUy˜'{˜ÄŠäEç}mIê<•{›ÂN¾s)Ó¸†(YúÏûÛÓÊafò.-TSÍ碉¯$ê¬ýIj­–ÍœÉfnd! œÏNâI±ŸõTp!‡ÙC%çE6ÿ_­\MOx‹Û(`ÇÿÙÇLåiŽ#ËyÌL²ry4ý$Ê8È:ÑÌ q˜QƳTÓ¹ aH¢>‘7yUÚx—g°+™Wq[FXJÆÉ¾‚â»ËgT•}wQÝÄ¿XtOªå±ÝÁ'¼ÏÓ´ç&.|!}zu|ó»6Œw(Ã*Ö²‡kx¹›ò#zÆz'ÓÑ}cf²+õ;šYÎ]ÔFÆE°8ÿcœòHcxò—®ïªú«Ôq–‰»-Øàø{ úXª‹AÏ+éËxŒÁ¬0ëÙ.5ïŽk¶šÛ â3ʾ–Ë®Ëz&㆜ž‘òž:g­jõiZ}¯´z€âÈ-9ëZÒ/ëcö§\ü(x–~ÙØÒȵ9e+c¯ä³)Ç´³´Å#i}#úòAFΡ ÌÞ&›í¯Õ' v”æÜÑSAÊÎZ-ì)r¨Pßœc'òa‰lr·÷£f¥5WšØÓÐÃÖql•±‘Ý ©·©Be;jíÌz¾Þ¬ NJLYÆ…ÁÜÈI {Uë‹ ÒAßà/œš66rZÐ\¬2ëE*b…i²®J4¬%Å. NJ«Í*Ï[(ÙJ†á ˸2Ö)2Šx Ð¨RŸ6YMX1ŠtöÇðÃÈÐÈM‘‘”g:œ¦==n_Ÿx×Ûá…}ZË8ßfÜÈâ|H¶Ä þ¹ñ‡z¦üjgfפøÍ“õh _Z¤y½vjºœN|‘Ÿ×ÕÚ0Ú€ïâ!¶E~YEG¥½=ð´‹B÷~ú±%ë7–VÊ5({ÔU[¢F‡‡x´Ø±ûü`»¿ÌÖM‡Ì ºp O1‘žœÍ&&æ%þL!]¹8¶/e@dmð,é{™É±õ<Éîf £èÍ>¾ÉQÂJø=x“‘y o7×ñ8åiƒù<í{±WÙC{ø"=8H37ñ;ö“£ý8•=Ìábÿ;{÷]Wy§ÿ³÷9’,ٲ܋ܻ±qcŠmz7½R „&eȤg2IH¯@ )ÔÐ;6qã^pï½w[V—ÎÙ÷ÿÅÑæqfÞ>kžYÿyö;{--éHçì{ß¿ûº¾_wpK¡ •uZâC60’þä¿æ6ó ×§'Ý97­sýƒ~<>øeQªI¼2Eüí¥œ‹ L©Xï`-ã–Öªú2‚¬©éº4øð0’ÞÌ¡œ˜}d¨åZvPÎ ®c¿–ÃÂ1ö%ªÉp8=v¹‚ÒœÞ\:r9÷ójêÞώО˜Ìrä9Á1ú¤¿ÕtdƒSWF¡¶5#Z4üw®UÿýËÕÖôwz줵ꬓÊÕIúúwp"5(v‹u£> Gv`1{y•‹XCkâòiü¦0#¾*v_ì²à/”3–V)èûlf­ø EœH¼ÀQš¨äã’o>ÑðПj—w‘`逸¦wðóT1ÜȽ…–bæÆòc–zd¢a/[+­‰ØÂklä/¬'Ã1¾Ì|&“ã,Fð.軃űÓ+´Àž×y¯Èe¹[÷›ÚÃñáLtÞj}×óçûÄMƒâÉ} ,÷•Q~^ìÒàUzFÏlˆoû\ðŽ1¶ï.©öd³÷éŒŠí«šáºbmŠ½ß¤š£Œ¤_l@¢½‘QT%Vr=%‰é­´.’Í[šøBJ²šÈ·µ¶Þ¤`]Ðí¨òŒƒ²D¾ƒ¶uZgÆvG›²2íÅ»}/Q—7!XÓ¨sƒ²ÖäõgB£µMú&NtvVµyl®•$F4¹«µ M6gô­S›1"ãHÞº&§QÖÞÈ&í"ÝṴ̂ kdR¬Kκ¶ÄÆÝbo9†ù _¤ª#2‘kbmòÞ-r]+7;L»¶ŠGŠuoRM/*¹•A´es05Ö5²€+87gFƒ6DŒå;bS ùé‘òȶ¬î¡hjþG…ß/rëôúX¼äâ`?ccÚXßdp¬¬µ8oY“=Gœ°|°#Ç’Ÿ=*_®Ã~¿è—½­À24›Bc¶Î‰¾6­b"Gcè¢x¶;·š’ðÕãºGú#ߎŒwG*3'Fúsedµ7ûdÚœæ f1WÄʃ £:~ÇbÆr*»‰Rªw\8Ë ^ vñ5"³ˆ3ÓÊÎbyƒ‘)ý2þÀD>àD¤¶³»ë<@[–Õ´@1VM¬M¼š>ê'XÅ Z1“+ÙÇ!Fójy?“ˆ Þ 3s/2ŽZ&Ò†t¡>-Ï|„êšnž ¥Å g7£tÒd¨Sª‹\ÏñWvÇn–Ѓݬ⦧Œ‚ÝéO51ìe 3˜ûVgi`­i¢=™CH)ÞU¬$Ë™la[HØÀzPÆú³–Ö,-¸UÁzNgGX}RÑèö²œ!i»k\ŠöØïÀõßvõ_¯N”Ò;=Hü躔ƒT²8r>»9HWÎb>l¡:v'XCûtri'gÖiKEdkDh9Ò<> 4q>¿àVjxfŠK’rN «w{ë‹õ>æoÍÖ_ü‘.œ“"÷±‡=¡÷¯ -·b®^­>Â_³~œ˜ÂZ:¥°ƒc)Ò¾á6щ™cddhP©H¼Jw[bÃ?´Ö‹mºÊÏ¿ïž]Þ8ª¢›ë‹®~>Ñ»cä—GZs#3ý ãé+Âú¼“qÏÉÕ(®×¥Am‚·‚æpaÞ”&›\@ÅDƒÆv6[Ÿˆƒ‹ M—¬«Ç3v$æåå6†¥%„ãõªcû#—ÅúÑ#Ò™—‚ƒ5N æñFä[‹œŸñvƒ«²®Ìë|ÈY‰= þ”%žàH¡ÌxÂÛ÷'fvվƜ¼ EîÍiÝVûD>g[³Íõ ¢XygíŽYiM×ĚغØÙÁ³‰]<ÝʲRã5ïñ"×S—Q4×;YACäô`v¬w,ΙK‡f§'Ž5Z@”5´Ø•mÔ5éÈ‹”FvÅ:u6(2,14±…µ“˜]áFΗøBìGC$ÏHÊRnÅh–q‚kØ@#‡ÙK5çñë¬/XÀ Ô’ÕHÇÓÖs!T\ÊYD¼NW†±'rYðË4=Qˆ2ÖËÃÜÀFÚqA 4@1!õt¬MžÝ âíâWÍ .?i‰½Žcé„Ð?׳RJƒ4¸ØrCÎú|òŸÿóÝrµŸæ‚ÿϤiý‹©b'ØläŸà9"Ž2–eg}ð!ëù99NclÞô¼kØì+]Wm ¯e}*˜›ªßñ,Ó£€ùÊúvÆ5‰½¬gy+ÿjm£-·Û²¶¨þÖ¤ úÖÌdÖs9^³ùëžó¥Mñ_ÆDUg³ƒ³)¦]Ö‚çŠ<™8óXÁ\ÍJÞ` ¯s4vyäâÄO¹$È3…m,0`mò`E~æhÛ†82Æ R7ÀW>á¢užÚæƒF¿~µÐ=óܳÃÐ-Þ-á"¿ù‡/^Àn¤6Ø,̙Ũ¬+E¼&³8öÝØ ÁèÔøõdÆÁ¼9/fÝ“x(cýƒ_´ÒÜÚ55†fÝÙÍàj2úDFžëÈv“ØOeÆðÄúÄ CF%]ŠôHì+7¤H¿&í5ùZì²DßDE‘1‰ ÔÒ*ˆ¸ ) ú5øÓ©hçòFI“[›ef^sÞ°¼E±n(6¾Æ“Í®k¶!´¨.~dƒÌç´J=O˜—3!i±WüŠŽüÆàiösG2†&¦$îÊià…î&Õšž÷U&EA·œúÄÖ +dôsrªçå¬ z‘çƒ`,gøaÆ%‰?—p ƒ¿H®¶ü.Ë#ËßÈ.ÿi²ú³AelXäÃD&=y˜UÍæŸJá¤cécíu–/³ákfõöÙeÞûd¶~bâ»tàš`d¢Þï‰z[½=Iߌk9’ïX½Êö®ª÷+½T¯þF¦RBkÞ }Ûúᬰj® ˜áÐpƱ„ëXÌ]¼ÈY‘ŸO´Nçw|‚+èÀc,¤5½x’¾ÆÜT8˜Àï9ƒ±õ(×Q™jN/œ² ¾å©´ª^ÁÙôã!æs5¯³žMYØÓÕ >ÉB6s;븚Nôb}™le@.Ý^T²kXÆùôã~fsœ/ÓÌ*v¥‚òòT wˆÚ´ÊÒÄ–®ucrÚ"­æŽq8ÊQ¶¥î_ÓƒƒÁ;éôE&¥ÆÂ1Ê^¾ž~lçòï,£=W±•wÿÙÌ[ýÏY¶¾™Ú ^ˆüŠ4ØõÕ¡™æU|t]ôá)jÿË~ÔîZöýr¥`ýá¦RLCŠa>œþùëOjqwˆ´æ-~È*¨¥#‹iʨŒ¼œóA:§ªã5a-m2Ž[¹•nÔ0“ºÂ›/Ñ:ñ›éÃ~nä #íýƒú‰‰‰¼ÊíœÎóLâ)JèÉv}Ë›·;ú» Œ[ø7EÆ$:ðV¢`õ^Ë•<Éæ}Îg#‡ƒ}¡±1…Íiz¯õËVÞ?ìòs?fo7Foö¥Õ®\æ{?±å“Þ鯟õçü¹^îr¯¾æþi%û—øÐM‰#‘¦àt¾Ël¤Kbwäå¬{3³¾ôgQps°Ž, ½ Ôüœg#ßNTÆÆEÎKìà”œÍ .É’øLµÎ±ÚH» ë.;CËú ËO‹\”x+ºÄA*š|Ðh 5Eîm¥¼Òî&ßmRTgMKZ2WYΥ옗´á>>`lï°4±+2FÄºåµæDð§cN¯µ$–×1 ’DVïpC…3KÝÓ¨Oç×›x±d¹™ê"_Ht¢=ËŸå³Le:™ZM_Ìùq°nÍÎà•XC°%h]­<Ñ''Î;ÈÞ"g&í¶D?Z-ÙòáÊ‹ƒÑm\=\æ¨÷Šœ›qa±ÊœâŽnH¼œwUÖ¼™ÁßèMŽ›8/ëóÅšój¸?ÒuIð#VEuóí}?ûÖ/Ã3&ïÿQõ•4p<‘såL¦ûÝç…/Dê³äÝ´c“æ‡ìýWïÝ—ýË áéÅw—Y©nwÊw´p±ß}ÃgúÍk ñîj^æ,¥ž±|@7–gЉâçÞ IDAT¯2’‡)e._§/íèÊi)ü»ù«yÀú¼YÇKÌa(d*çÒ‡…ìd+½™Å¯ÒÚ&²—ÇSãßݬ,8ÙLwò`šü÷ÐÀÌ£'§°å©Þþ~žá÷1‹}Z”%ßg6ù Ûh`(I‹·\Í,¾Ì*n`C™ýŸî®4¦Çg°‰iZnu”rÌÃÌ .m"oçhJ9º‹%¥šW©¢+˜CÌý,çÝÿ‚j˯™Å9³?mï#ðñ;>œ‡ž¼ H‡Çx#¥ý#ñ$g3˜Ggò.÷²øŸQæ+Oš+þß¼\õ£Gú t5ÇS™!Êé s„ÀŽŒÉìà߸€JZó=3#hÌf÷QÉÓìâTJÓüå&Zó!ÅñMz¤yÅwø ¯§ð®‘Ô²¶t%f {x¶ð&Ž};˜C'N¥W”ß * U‘Í‘’àŠSÜÎt+ù'jC_å n£wz®{˜QÆuõÕà¶Ë¢v‹š:Z·…g¢ÜƸ÷7Âè—ük¹íW² N¶G¹¢ë'lÙãWøã®>‡®>¢ŽÃ±˜|ì¬àï\ÇœXeÆgrŽ38±‹÷¸5<éXÀGÅ6EN Æf]žøbðn°—ǘÈul‰µµ¾Ñ5¥·%ÚåLãÒ%#—õÅfë#§RÃŠŠ¬håÜf¿' ªòŠz¸IGúµ3«Ô—tˆ´‰-ˆ_âHN?²l¦½»Td:ÿa6 lãxûë…Äž;9·ð'ŽlÏ›ü•;#µyg×;,æ‚àÙ ûc¥A=%cP¢3y¶xBÝ[ã=ÆÓ“¸>V4s?¿Éº?ï@Ч"{:ú—F=‚i§¯D'÷þ>óÞÎ?bÎd¹Ñµ²6‘k´¢ÎÑ2J ¨÷A…ÒzQ½þÍÆQYÙF6¸2QÅ bFoÛª}"Q·¹FG¢ØýA¶$_–{»µÏï4;°©Ì%y¥á”ïëy¾éC¨§gb;J•¸8XÅI}’{ÔÛ_õüŸ <ÕÔßsœ( •Qî1ïŒeƒ èÁô–ú„g¹—Æ® V“¡=[R±E.õÕNl×Â?|…÷b? "Ú‘ÐŽq”Ñ%·q6½ù!‰Bæc'ËúÓ‰8ƒútgv§Ðžç¸œ‹øGºyE§1Œ+¹6EŒOa(çv^KÏ>òEœA_¶ð.e ý9@Ú1– ,IÛ1ϧäÒBŠê:3„êTÔÀ^f?³ tLs烨b1³¹‘„38N#gQM–/ð3p9³ŠûÓõì4*ø;ÇÒÂÀG»«¾|Žï0ŽTPKÝR;Ò‘´°¼ž¿§ª°»ÙNþ|RÁ¨‰5´¡‘}\Ë^¶QB[¶Ñë$cò¿a(ÍùŒa‰Ùþ´ÿ›akÆnºÐ3x›œÅr¾çÿ¡¸>ÃTsodyìŽ`-t§K!­Ä—2þÑÆeY7F¢| c¿ g „ý­0¸©åPw1}ØÂ•t‹MäÇʃ½\Å;d}°„˙»YÈ'3Z#YÄ5Ô3/*¢'ïÓŸ®÷ "ccŸç<¥¨½÷ª£¶C£ü¢°sm¡•”°#³øþp¼#? ÆFzÐ-%vaø1mØÄYÁ&Þˆ\È 6Æòye‘±SƒÀÍü•n í¡‚Ï݃Ö,NŒÌ8#x7ä™9Ô·sq¹„¦D&ç«Ýµ©1'V¬hg`“2¦ë3†ÇK¬.Õ¹ÞzéZ" ýøI©Ÿ·*2‰©±K[ùG½«L§ï0Ê­JÊö ‹-ê(>æ•rÌË»§Ä bqÎ9,ÈÚUjB“Y4Ç&·µ·^vñbW[)еž`LzˆxϤݸá½Ä‡F«X‹—ÙÝè Z·SV×’ ÈFZ×j J#Íy9ú$gýÖØ}áͦ·÷©µ–V²¨Tç kÞOÕÖéÓ 2ïPŠŒål6ñ|‘šrW6ëÚÚ†& )>`ñ1¿K4q¨“ö‘Ò& <ÎÍýœ^ÕøÍdÇAãwµÙrw©\£S“!Çõ|ËÌfÆgÔs[fS³mźVˆê 5£Ï}hwgïÙ\Ð8-‹´‰\4Ç?£„Q±O»iÏüØÐؤ¤…ŽÚtb,kËxútP\-ÆA±oÏÓDwú²vÔ¥jÇí”±vlço”ñ§Ôs8: ö¥-Ó‰ÒLé¹¼J]Á7é›ìâInegÊý[ÈÞ` •,çôHqìúÐÙ=•Á$©wxššÛ’˜ö3’ 6QA{²„Ž|Dc4ÝÀµÌ¤n b“¹Œ§S¶ìGô‡Íé·èÊ(§ØE`ZÔí‘&m§’s™F¿Û}€s¸”åÜF/ÖÒÞN?Ç_RZÂ>Ár:¤b¦Ñ”SE?¥_±™ ÿ…R±&;4§‰ëJzrŒÑRZý¿ˆ]ÿŸ¿\I—úFNJ¡ÜÅ»t#Ã2EŒIßggò—ÔŒµ†jÆó.c)‹Z¼8/‘£'3ÓZÜÔÈòŒ/y'^e'|†óyO:í[r.eO¡ù˜5,ÑDNáM&‡–ãÖa9}¸"coцE.ˆÒ#Öa;ºp.IZÊ[”*àÆG:“¢B]íYÙV’ûÉçÂèß™s1Ïsо½®kŠ>»+¼Ò]c;z±…‘¥·‡–A‡È£#‚Üâ5ìsÊѰ©5#ÛÙ’QÁ öEÞ‹]’ø#8—™,åTÚD¶DDN -Ç ‘«ØPcPÐ>2$¯¡YÏùTƒòŒ¡ ŠÈ)Žô zGÞÎË]oS³>ž¨`73çTO™LòÍŠòzðBÁÕb÷köM Þîê–zK›ÝQ¬g®Åƒ·/Ö3/O»q[ÙÏq ÝbËsÎ$átžŠÝ) ¦íK\ÞUßHy'ãëT³9ãëÁZú–ãm&Îð‚n‘kr–°*cS³q<“N– "ð…Án¦vqMmÿFC–™Úß¿¿cýN>Á{M*3>×Q¨µ|О¦H}¤mâu^gMâ¢:›rVdLÊYÇß8ÌHd]O¾Øþ&›sîâ×ô⎼ÃB8íCWŽˆ§Þ]«]^‰!oèÙÕÌî¼™ìå¥FÓ‚¹‘‰‘›î:ê¡ù>\eedz/ŠMƒƒ6Ì š^0ÃEfïð Ëä© v0Œ—Ó3EÕ-w®#ì¶Ó™Zz¥RÝUŒÌ¸œíl¡ˆ6\Ão9‘>#nÐy‡Ñ$üƒ›È0‹|£•Š2I£e´a~dO0Q¬b:ÛÉqœ3‚C\Ä®¨¥¶ƒ¹YÏ&Úr;¹œeìa¸†FúPÄ騬†Ý©8q"YF i‹eDD'AkÒýVá瘈|„&ÏQK)+Ò_/šÙC iqöÑrõÑ5–Þìa'—1•ãÜ©%sµ*r,gw¨*E¾“˜O Ãx–-Ì笔@x.YÆóJp°ÙÁ¼ñ‰þÌM“ÇÅ ¦#Ó› ¦r9o]˜Â™à‰>xG})§]8DudNb.Ë󾙘¬¦5klå'§2-¨(•´UWï­àÉbßÈF}°’w8…õ·EÒ½›qG¼Ì#Áü"ÿšXDã¹´Is“3ÛèÕ ÉÙ’w8ïXЗQAhÒ'o—óǼ‡2âXYp”Úà.§?™à‡ ^o4§Þ¤ØØÄO‚bŽ2˜ŸÆ2±ö‰] È:¿Ñb¦ò\sf…W7zþc™01Ò”RÅ2²>Þè‘üÁ i­g·îñ½QsÁ-Û9øJ£«y”®”ò-ª [¨46vs›[ŠÿJ1%¼ŸõÛœ]~“·¥È}‰±¤ÑÙ¡ãß^î›ßÉÕ><§çU>ÿc߯U7‚ñAkZñ8׳?‰†5ÝüW¿ÚáóÌVÛ ¶Àèĵ±â8^~ú‚{©çF6³¸‹_°‘,àöT›;Á)‰§ YÎ#Ôq;XBÂ¥,Ö‚Šþ}Áɼ˗ ‹ ó¸–uŒaßçvr7góÒøÃJb¦'šÝætFkùkÒ¦ÚhFdý$xŠÏSÏ|ö²=µÿä¹(x˜½ŒŽ,c6·1ˆ­lg?y*ùÇ?ïŽQͧøKanÌðLê3š“Š Îd ÕT1Å'Ùß 1¢§áŸñ&œI)K©%b夂¼žî–9‘ö¶QE›Lî¤YÜÁt­*à<ÖÓLÆÒŸËXD-'ˆù{SèûG׺žd±ªc"y6ÒôÏB¨ÂR÷ß´LüÏ\®ö¥O 70“‰la!£XÊ”¥Ëö¬a ‰9¬`2}èEƒèÈÅ ¥–+87rsÖ)‰ÏpWp)´l³jÈqoj}îYk#˧ðoPF5¦Œ:®ä-9#±-¸š[Ó!g-+éη¨Ìº78›¿rK°98¼Äk\Áxæëw‹™Sô9m_6ÿ5ÚÒ?ûæ’º®áo±‡2ÏÕ^=‘÷ä KN-969ãš¼JN¼©gW'º²$Øœé7><5Ϧ¦poE˜þ”Q%îYœýÛOÙéZ ª­R`vaÚ^ÀµÍ+v]ók¬÷Ëc>»ÌÏ¿¯¶mìíÈœ`{“NT¬IN)ÒØZÃÄÄj.¢C#W˜Øì¼#Á2î ­*Æuwç UyoÇ»Ôì­ØÏ¹`N‰›K´;jh[g•èÛè3‰ëbùŒo%:ñ@^qðÛàD­~y#ŠJü(Ò'òØðn:UÙ]˜A•ˆÛ(­õ'v0.=+þF±‰û‹4ðÛœ±²Þ®É8¥NEVçÄ&þëì(%8%ëêÈ„°r¶òí­û—ÎèVï ‰ô˸%蜛×CóãJ=þ+7]Q²íS}tåÄÂÐpjbYÁè"Ë[«lÐ1>¼sžoÜשÓÒâºÑuGÿÀ/¸0vCli0”ßñJ$„»7…åg›ûºÍÇ¡aŒÕC“µƒ™Á.nâ>ºR;56:x9ÕçL,Õ|Ô¸J§}ê:z=«q@°2Ⱦjƒ _鉿8ð7«Ç1%vs0Œã±¤‹íÇ­b$}b­"ŠeröÕÈð‡JœÑ¤w“£yå¬ã“]íì ì¸²œ.õæQÍ‚b¿,Õ¶Q ±\}ÞcAO^‹š÷¹ØÌHeÖ•‘Ήâ`@p4¨æÇ9ë­¥˜m±O–êÚl›:¸*'j¯¶Ê´ Wªê 59!cE³gø2¯Ó*ò· ÃTž*Ó7V™»ÿ5£:5o¹±¡çC¶åZŠBKᦻb„v‹iôö¢äX·* nèCúг½¸­ÏÕ™ØÆè&óhÏàÄÛôŒœœ·›.±·KmmöV…æf‹“©Š”ì1¼ÁlnæÌ6†”ZÔØº—ÏÿÍ¢™½½¹Àu?³ÿJ .Lìg ×EúFÎa½âyÑ ™øÖsêzÎLD÷`%%Ãó¥_¨lŠ^7ê¸_žG×ÈàÈjvó ÓiàUJy<¯20=jÇM,eÅlàã\–lK­u»Rwâ‡YïEÆÒÄ\ÍaÞLCÂc8DG†fÝ’èÉ6ÊØ@5wPU(ÓYÅùlçê8Æ)ôeWêÀH> —Ê!·²Ž3Žy7_à7KŽJÖpå±OQÎ"fÐ#—Gê#—ÒWK)b='Íš)çv³›Ù”q^:²{Ÿ)F®@ÆÙù)`·pè°),†r#Oêü®ãx÷ØCM/I;&±ƒ4Ñ9Ýxs'­ˆ™M)ÝØ”¢6°…tcø•­œÎúKxœ‰é??š IÕÃGþÿåê£k÷I;ñŠô o`:ä-ÈWp‚% ãc|À~z³Ÿ:ÊèÆ|.b#çðÛ™vŽQÏ Ø’ào)¹² ))èB³„MZå4ðsæÑ¶ d3—RC[Öóq!Mª¹‰j6q¯SÆM¬çÎJ“ %‰õôc Ë()m?¬ñ²7<7>üx¾ãü,{˜Á¼š·¸Á Š‚?h¼Òº’Ú¯N¯›¼Ñœ=ª.bqe^"á¼X ®pοoG{{{ä[—ù`daÿžQtà­XŸÈ^òík0>¶*h.µª±ðó¯ìç•æLc7–Ç®hãâ 'êu°¯ÖÊbÛ‹>–uwpj°…cAY•²ÈîØ„à@¬ËUhÕ`6ÕìI)Ui@±ŠQt+8¢"‡c¥Á>šèOŽl¤‰:vЙìbeäŒHy0+RžÍaú¥y¹©§ª!5ƒÄWo¤/ðFÞãÌ“’}ÓÛÚjƦ˜Ð³¹{xž$]¡¦<„"ªÈÒ›š5ã´) ¨i`+=¹‚UL¢ '8À¨”ÅŽþìMßÌ[NZœ Ó¥iÔ°GÓ︼@Cýo›þÏ_®N¾"¸šé|öò¬¿` 9ÀjÞ盹Œm¬b ‡ ³~®d÷N\Ã’B`=x‹sšööÒŠó9;Ý8Üä…]ón®gϲVK3ôe.b KÉp'gòJÆùLcrìÚHcðc¾ÉÙ<Éš@7¾W`Y6¶__Ö?§…ª`ö~MxŽkØÉy Iì]é§ê ó7Û¶Øý ¦—H—ŒÁ‰}ŒŠÍúXK—Y;ÌàùºoöÄeÙ§¿•äÇ1˜v‘Á.fc°9ñRdbÎÛ àFSùqúh>ÛE»›LIÌjv¿±;éxø39£—"%ÁQj"/·õé"¡ÉÞ ›x°Y1G»ÚÖ-5âœlÞ ƒ«˜›qƒTG–DN'Ÿ#kDâpÖéyõþ=rQdV„ÇëO# ye±ÑÝ,=êÇd#³rv¶öƒÖ¶7èE¿`[“§(ç&ªô9æ™…ÑÎßÕ¸l–šò:çìb?mø€ TÇÖVû4ýb§E…Õ ü±Ji쉎Ž=˨b/·5¼ÁA^cw‘íå~Ú`UÐŽÙ±|lxƘ.ÚW[—×»Ù~•÷ñDeš?¨Ý./=ݾ(ܾ6¹ýP¸pNÓ뻸›^Ôq.ó‚ 3zðµÁ7òší Í¿R·ß×¶»¤ÆŠ›ü¹§ðX¬cäüÐ~[œáÛÏyp­‡¯ ÞâlÖ3¶Ìd òzÎöÆÝ{Í=#;÷ÓÁûÊ-ˆ|˜3–ß’å®àw‘Nƒƒvý]T¥[Ð?v^ä”Ðò˜†1#rK¦¥È±–aL¡?=³>Ÿ8ÊëÁ(ú°ŽÅ æ¶´u{3sXÍY\ÌÑX§HÇ`*¨¡µéÓê'éÊ"Ö¦qó&–3<²2çqÊ9;Ä êÙD;'rIðèÎX- ÖB: d£¨a2YG=Gƒ­œÂþÁ1úq˸‹ÿL˜“†!?Lÿ™åb–SIö³‹^Œf™Â雩Õ25ÏБ^Vqgñfz{üÓŸNocó©âT†2‡cdÙÏDV§IŠÝÜʺ¤0¼‚4ãèIÙˆÆô¾º#}Q5ÿýóÀÿ´\eýO¼Ž¤‘‡\šuÙ˜7•»yœ õ<Æ=évu¾ÃRf°—a3糎¹ÜÏß¹’û L&ÏnjXÏÙ|,}ëÜÇtf1[˜Æ]d™[š¨a$ ñ89@†Ý áË›ƒ{ˆ/PÁ—éÈWF ù7æË¼ÍrîM¬1 gÛªÁWÁŒÂedFÆ9K¹—¯óeÛ¯µ½ÆÒ±ž}Áu+¹;§}PYdbÎÊHëÄBþÖ¢·ol~r&Þµ:*R¼Ã³<Í—ò~¬W¤wÞ†¢6Ÿ®Ë\©¹^]nâªH»ŒN9í°L.ñBO/·7y£ÉÁCü$£Í ȹ¥ÒÖ}rQËÃi¿àýj·ñ:å½\¼ËVöðõ£®ç®ØwÚë×`u{çpW³/åUÓ/{.ñBÞóÍn(r_³£ ©÷óà}~ËŠô3œáTz49‡Ö‘Ù»uâkü©Þõ‘IÍÆ58Á‹;ç±ÇœŸzûu­ì®éêÞ£6ûý ;è[gZ½/5é›Ó5èÁ N$&Qš86@Õa—ç=ÙÑ—ëœ_ï›|…ZýÍ# ØêönÍ âßÌßáñ"ŸêǹEîjnYT~Ÿèùb7R–13¯ˆ Ì}Ãc—EõåÑÓ—%ù+©N¬¡œ)–·…æÝV$Cƒû¦œ=Ê0ŸjÑ@'°œ÷ñ(™4ÜQ”ÖqJŠ,(âjkyùÃy—Ý\Å“§„„«˜šn˜ÖÐ5å_¬á!~ôÏ1éL8&“žÕý|ýÏÜ]®„.;¹˜b^¡=ÇéÎKtOûtÙ–9àZžàCÚÈ‘VY%*³F·§¾ãÕ)o÷rü’y©8¸)2”—(ìu¦RÞͽ5Æð"ÏE&r9ߣ5Ý™uKâH¤+õœÏŸΧx‘ãlæn&0œß"•ôçeYãöªn´a¤­ï€ï¥J·] Iü9RÉöp‹ùPívoŠ÷÷Ž]Ô34v¤Ô‹­}³ÑiÁ”ijšNM;«©ñ ¾–Ñ#K"´ veMÌOùÏ.Ó¿ÔK¹…Ky$ñ•Y}sÖ/Tyð€G:©¬UÁÎàõÄE®ö 7âÏ­\š³.¼Ëmäë}š’ÈljÆ`x½7söž0.±™ÙÎsŒÌkÎ:/cHÎwc#?‹]’56ØÂtÚG¢H¥d8%«?øA;÷Õ·$t08ïÈ ÈÎ`Y±™õyû ývšI¿ñÒ@çX;Wç7ìûydl±Ëøv{¿<Ô¢…-°æ.¢Æ©†þÝô_»õuÖ×›º!Ée‚ÎõžÎÙÆzFjcƒ•iSçT–îôx¢2hS¯G³v4RIw?{Ë Ý}ëzUëãªË²UcU­ Ïe»ÏÑ…º%u±ç‹}-Ñ+x)x¦Þ°f_ 2˜7ýöî3Ê®òÊ×ýoí½K¥\*åÊ %HDÎ  ÆØ`ãÔ8Ûí€1¶1ÁÆÆ$“D B¡œs(¥R•Ó^ïý°kõ oßOwô9Ý}Ž×7 •T%½Ö\ïœÿùŠÍä|Þ¦sò ßÁZ2‰—’fÆÎŒÆ†°“*þN9ë¸ntg¯eKx‹&t¤’ËÙM ¤ &I¹œ>w\ŽI³ŽMt'ð5jéÃÍr!VЙ”ñðZ’~ LaK©áë¼O ŽÓš3)`'ëYDÊy"aæŽdd¤I¤’÷ïå‰þT²qœë£ÜÈj.fuĦ1cØÎÅLd›èÍß“}€.‰…ùæDºÔ”}IxäʘAï$°~ ¿¥1™ä”ö ÏßçÏO5º&†åÿK™ÿ?®ÆL`%ýébÚSM pZä´”SAǘÂQÒ†JúÄþJ‹ØÊ¤‘}#»éÁ3ìe»8—ßÐ… i×’a­r”°2•)ýŒJkž²!ÔOMO±+ÖÕ)FòwÓžOiÄ+)—ÍéÈÆf®¯•ŠôrúÒqŠŽ©YšzÿêàR-÷™Ûy‘Êfë­á³“Öó@—77±q˜;)X“–af,[ëT•‘ ’ÀžFz³'VF¯Å~ECZÇ>óæÅÚï±èt«¦4Ñ-kq°< ‰lI©v0™e>c‹¸šþ”µv´J~ÊW‚±-ÔTèšh •z;vvðY—V¼Ïî†6gôÏZÆ£²‰áYÏWç  ³ÎÌZŸrqì×±ÇÌ-ÌK¹œÁ¹œq+ó4¯Õ82´³Çt£/½Y™òAìÇ‘ó8š2¶©¨jØv7îIÿøë¡tßc‹gëWåíŸ#›kXeP™=¹Af3½²zFZ†aÍýuï2~QôôEQÁi¾u$μbQÎ6¾¥‰Õî¶ßOI±‰Ã‘/¥ëhù´áÙ”Ò¦:ÖYÌ¢ÌmaW³HÛ´B¶ÇÎRz¢ýßmP G¦+«›\íPp2Ò I»-57/1b‘o0Öš†Ä•ž²$hëßH:RWg¢–­ÜùDjYÇð—Zzšªõ†ô÷a ‡x/%¶'Ñ€rö3*é,äJ>¤’ XÊ8šqf}*á´úž%¯Ú–9I8b4ù ¢ˆ‚TÊéÉ3´¤1óYM:ö c8¥ÞDóo­§ zr€îìd(“;=Ë8Ž1—óéÅþÄÑdE·31ÊiIÛ*[È‹~Ë ì¢’cg*ý©ex‚Ôé˘œœvt Jv0:-2C4O––ro99{r{¶/ù-¥ 3~IKþ¿žlc(ö^^H4W§'ÉY¬`;=“Õ·|b`3}i“hs'¼~4bk©¤ cÙì}n¦8¡­£ˆ¡ 1^ ÿ!³žû7îú¯zîÿ*W9ßZœ°æQ•l«u«èÄ~Ñ6²(2*8¢^SÄE4d@òŽV˜ð××’õìN¼ÀfÎämð|ÊyAQ°%<Â&J虹:r,¶(ϲÑ#U/ážËÑ „éI¸Ž#¾ô‘ÝâÊÁ >äxCÓª­Š#Ý©a¹CŸÙEÐÉÃË.Ñä<;òFÊ¡´ö5N1ˆV§ÜÝPº‹~u}:îì ~´;ƒ?¶Ô*­¨V§´û#Sèšu*Ò?ôYlâ\G1$Ò3mXp„¿0ÏÌŸZQ˜o{­)ß š¦œAYl#‡™œÒ?p‡XFcú4±¦ÂР '+l,MÄ `sŒLð—³±«c%užäû¼Am¾Á=5?bbLÃYãTÐŽOSºÓ›WÔgC2l£.íŽÖ©¡oPWé$•ÌäãHç Od(A‡ÊAÏzr»w†„%M™ÍŸîÖMî¸ÙÉÍ´‰UZ2.øÇ›ë”ge3S+­OþĨÍð‡ª¨oO·O´m¾f“L(·¸,åúÆfTY”r{¤?Kƒ½\i‘v<ÆÓ/hÒ@ËZÓ‚Æî×¾ÚœaJÑ5öblGiàÐV«vÉ4wéáø’—«¦íÓ>2í£hZóg6¬)!ÕVjˆÆÝ¼Á´ÈÉövä¯ÔêYg K<\ba“0û(Ç48èí7á Ÿöñá^ç^w"ýƒ örv²þu””ËéÀŒÄàwÝYÅJøŒ6¶ÏsWÊî`gÚ¡`q‚}LS¯~?\ÁÉîóÛÌg9ÃiÄ^ ™Â>Zr)æ⃎~ôƒy¦·¡Ø/O5ýËóUp8¨J̳}ÚVîïÁà`{èGs~D“Í‚G#w§Ï/ á€'Ñ"² ígAž£ ´l§ãm»¿ñƾ6¶­Þ¸ÞƵ5Ë+¼s§egX6ÈʾJÏÒï°oüÃÇÇ3G~ÀG)MS3Ç#Û=xýÙé+ÝNö¤Å ¹‚>¼’{ù%¬I˜ÓiÆ@ž£‚»éÈ< #»ÒÆ)V¨ºÞê+Î1ôrY¸¡ü•žÌc%mÒn˸1ö3¶s-m¹œ…ÜC1Ÿp9ó×XÁXvБ·XŸ°lZ0/Kºñ>C9/ù©J“ Cn˜½£Œæ©\•Í#f0éÏ­rµ7Ј"šÓ…é_‹=ËNæ>ÒŒg"ï±…K ‰ë|]Bî$ºÑ„uœ"NüÂiÉõT“Çz½(¤˜/Ò’µŒ¡ˆshËn6ó–}•”ǵê?TU|9 £Œ5IZ}eª““åçqw¥|–œœÊ8KýÒÈ1ÿí¯ÿAåê?Öª\«·9k¹‘¼J)“y)Ǧã(Ÿ¥–wYŸðÊÚ’—@YrvÇ7Ô“]¦'@­A I©L{‚%T±/ñI^Èdþ•µü<±ü–Î\Â#Ìd;}é¤Wk/.7»¯×nð7=>Ž=4ʸ9hJ)§SÀ@ÞæÛœdKÅÂw2“ÄÇ{øô ]U¾‘ ¿H9{’Ž,¢ÔMï(™žu"Ô^A Zg Î »‚ŸWèPçΤ½è«ù^W—¸æ—6ž¡ê“³îy.J9/ö7ÇKüñ‡ºnkøÙÙCy^¾2W9bëYy(e/Mi™L8ÓŸ†ø¥&|WÝ»^\-)msò’RsYòxgí wþ½íþ*öÓšmÁ«A`7éÚモHQžÑ‘†!ï·Æî|ÖêŒíƒòu ~•¶°NŠoFz¥õ²¬glÚ…‘“±ULä!ÚUK×Ô‡²N§[Jc‚nY_ ¦æ;Ÿ%‘ùAYžäùf­%YçF:‘ϸ$zÔ‘¶i7¦]šõHp˜©­Œ©ñ³ ,ãÎ`ƒÆå–f\¼Ï㱎åJRúD. î§/]Ó:Föó³þ^áîá¶FFD¢Hyµ%u-7„‹–‡ç»ð)íëtúÐ×/m˜­ÍZÅåi[‚×hÊaÚçé™ÂSÂÙ«£AEþXî¥iµB^´nªžó<4?Swv|Åî0kuÖ{Á5¼+f"ÕÁ&4%œOAÖÕ†O’§à;ÆæÛ5ÔæÖä'ñœ¥0·0;9m [8A_Þ£#ØÜô`W±PÝW¼?Ä}Ë¢ÇÞl2÷Û 7¬ùÎb?øUêP.¹ÞÊûô-O :ÃŒjƒ§¹™öLcGÊÊ ?2 ª74eù×X¦ð“ƶåkUcRB~iJe²éøt$DÚ5rKLeAòÜj̬¶ƒ¹4ȸ"ö!ﱋØN/~Í)Öq:íhžLñ.ET2m €ügŒ¡Š­Éñ«+‹’ÀBº±Šî‰1ë81=(¡)×°9·Ï¥ ä"Ëaú2‰V¬ã&r …¤)c/Ÿ&k'1È^ŽwÞÊd㪌óøï%˜‰‰Ì¢ïÏÓ”ñ ›ØÊ¼D_Qžì×&ör–äæ|ìg2++l.Zò:'(b(d‡YNûäæßŽeEìLÂô]9Iã8‘Lã:SttÿY®þó¯öœÉ1N%ðà¼$z7€]KÔ‡“ §n¼Æ­déĚў4g:k"×Gõ; ')Jöã¶sŠŒMé™òåØ ®¥?æ&¥4œìât¦4t*RQg*my:µzd“¾Vûò´¨‘mµÖð ã#ÝÓR,æ¯ì¡G_õ‹{>ÅåÆÕü˜O–Wîç Ö'‹ïr¦†ç”[¬ï»Vö¦$íœà1†PÒDï¬NYJ)‰´JW½à“{­(3³% š+ÌÊÏs]­&¼C›Óõ—F)­²e,é‘[süÍá|„àíYÕȉ`NpW0¿‰‰ù&V9›w"ÝÒ4Ö-v¸™QÕ>bM°!Ö(²(eZШÂ˱+xššhb“på\kJÕ~HQ$ÜØN^…#Å9þiž²ºUhüƒ3éA1kXÃý‘ÙRádÐ!Üö'«Û[½§þñ×öFgmLMÒÄÄZ‹cgyìãÉÜ«hC½S^ ôòÐÔ ×†Õ9\ÐàÈ=)ÍÃêÕ^èŸÿŠü9áÝucr¾³òµ¬•Ïb$m¢Ü*ÞÁ¡žšÓ-uF:LYé×iLKJÉcýYM3jƒ¿ºõÝhÍó)-‚-Ìåešñ»r¾±MÍ;CÙ&ÏuÔº ¦ßúê;ó^ùrØR»È6óì[‹¢YõþD~—p†&¤Ü‘².(Šô¶±‚u¬¡;]rHïZ…5Ö0Š÷™”„¡wp7Ϧ´åkÍ´©¬¿Sr¶Ã/˜Dsš0*¶šd×g--H'K©MéMCö±•tc ƒ™E7î`3Ã!Z3%q|ô¦Rò«žS;ÚÑ…žtM†CýX@_ãÍR&[¸Š'(dpµÉ5÷:Ò– –%œ‘”2R½ôk’º8ŽÞôã8kØ–b¶«ÖTq6»DûÏeÁóÀR'ã=I›1W#ÛRJê>sÎ@V3–RN²Œ­Ÿ{6Žüœö7fiR«p6=Èé̤_ò•ý8É ÿB_ðÿÙåª!GÙÏeÉGÿ`òŒ¨ã 6Ð’ˆöt%c´a+·s‚ål ’ Ôp}"ûX þDSHu7ø¤9úgäXÖ‡L¡1/qˆŽl º-Íkµ†Õ™Íùõ ¡NUk{*Ò8%]W/¿©fnlzМF‘¡i§‡‹>å“Qª62Ú—æú¬Ðê‹x‘V‘‡Hë”Ñac•‚¾ g¹·D&6m$DV¤]̬–Í:ÁsÁ¹±(¨ êjË(‡+ÕeͯUÀë|”ñ#Ú¦í̵õ‚?RL›´sƒÃ¬áv§ Îb?»¨eZC=›ÚTG.¬q”s3ŽÆzÔÔß{‡‚¥-ë¼›qMÖÔ ¦.·í¼ž€‰ê93ü¶44 n™aL‘ÓŽ†E3ƒÓ¸²‰ùÚT]¨}-ÁªÍé¤c•ƒ[Ó†­8šSåû8üÚŸ›ºëN–q5Ûµ=+uVe4}r•¿Ç.a!—ÓƒyÜÙŸ5*Ö?VÔ§˜I/EZFŽ5…ª]œ>&ÍFÆñTZ!ëëL €^ ín¤U5¼ÉASÓ®ÿxôxi(ëbÆ8‘16iÄÉñº’HWq‚0oÁÅâ>“O!˜bp {)¥„®´¦ìsE®%;8JYRÚqÖçêY®ä ã|Š87I‚䨆e\Î+³Cý†\Î4óŸÍÀÿEWE_)ù´)Çü?¡,äpòòõ«“gÖ¬a#×rVâèü*…,fB›EŠ<]ã¾ZOSÀ¤ /çÑ)eu¤cp³(âLŠy•¡ü ä¼<=b+“`Ep NûdMo GèÀ‚î,× Øáª®Šò-›J!pný½lù€?1€¶¬ðòF¯·d43mëfÝl»3ÆjôŠ+;ùM‰Ú´¡‘Á÷"w¦/k^x4¬z˳"¥]”òçq9qFð§`{pf}ª=œrMûjX]¿ìÊïèÇX޳—*.åDðhûbƒëtÌj‘QYç;u*ƒ†LçfÕj\kÕÚÑr§h•¨ òÈÐC£”ÇwûícævõöR;׺µ£ç~Æ:UØ™õASƒi[éDZ±Õ¶¤ek]Z«$ø—Ñ/O¿XyÊäÈÜ´;ã‡ßÕ~½ÙÛ)â'JDŸuŠN¶ŒÅÌbAbRï™8pW]‚ÓØÒØ‡M5©Ò˜©âT>˃QA–GèÃ2º³ÆíùÒK<{̾…áHŽ~Ò/¸ÏôØx‹Yýe«×X8Îâ&™Ýß‹kK”T<+8/ϱïRKU­×ƒq’U àrý(á÷ANc,KYÍWùG¹…Ytäq°—<†ðgð-¾“4èÎ%0”JrˆuœÇStfË9H1§sïhʧ\É2õéÄJNðJri&¾K6“ÇAÆQNš/°„[èÃfæ1‚Q4OŒ<9Lø^öRÃqêˆËëN*–Tâ]  ãùŒ¯³ŸÏ(¥2Oqa%:Èi¬e*«™’°b÷џƬåæ%O¤ösˆí”&ññjq”S\M9«™ÌbÆq’ ,c]˜÷9 É]³’êÏ‘gd8Uÿ^VRI1Ç’Öndq¢ºÍÙšîâSJ©¢„†Lù÷¨À–«ÿä+W«ÆqzО°”ú$ðÜXë>ã\Ò\=“­(.¢ï±”Ê8Ìm,àÓZ/'±ŽÙ¼Î;|)X aÛ˜Êq²‡B–s3c¸3ö4séÀ6.Éw Ðmv3"ÏOcgpÇËý#èG7‹÷úÖKªFämë7[llw[{Úõï‘O{'F_ÞáÆ|3/T1’RÙŠ Œo«zšõË ~4 +uoí£GCɾpÄEß:˜^xU6ue›ŠQ±›"gÇJÙq_èVö>ç†ã¾üzÅ—Ÿ‰oâY½kJºVkÍa2tŠüta³ÓîŒ î ˆýš ‚ˆiqk‚v‘¾‘[c €&±NjygèïüÈÖHu¤SXúp4õ}ûÞV¾L£b3ŽZ[ê­õ‘£y:Äd-«UY— %r$¸¯Ö¦àib®IûuäpʘØmÁsÁi±ñ^Ÿå‡{ý ÙÉ~ðžK OÍ ZåÅ‘²ÈÅ´£ØÃ×)áç|µÎU–ÒüÈ  “²~_¬sИVÌcBž¶±U‘«"“¸+>ç̰bI<±Üüòhý/³¾kEG²jϲöÝÔwÏO}4)T5ûœ+o:G#'2n‹×.÷µ&6\éùÍž¾…îõ¼¢#”÷\æøƒá´ÍÞâÖ5V ‰×&âƒ\<öšsײ“y•Œæ1 "þHÃyˆetÎøvð븇•Ìà›|r¾ÅϹŒ]¤ˆHñS¾KwÚÓ˜´çR¶ðsF²…œ K¤„ÎIéçs/r ç›,ã)>â5FÓž¶œà5ŽókÙÆ»ÜË ¤y›“ôãqzð@¢ ™Gc¾•«^‘²„¸¶\ÀlŽ'¼ŒF'†óv’¥eRÁG\Ä"Æ$c¡\Ö¿)‹™LpŠ£Ô²KXÏ•‰—d }˜–¸„îå v²‘E‘bN°.ÙÞO+¸;YûŒˆÛÌÄ ó#º°•/078IšZ¸89Œ–ÑŒFìâ&±CVS“@KNUøg¹ú_qu$•0/šRUß3©Õä6kèÊÞ£œXO5[©ä$-ø%_å(Í9?ªgÝ.¢%%I{úš3˜uÄ ž +‹9‡}I*ôæ1‘Žü‘FL ­ÙNMVy…·(¦kl?O³1"¸ŽŸr@h¦Û&|+^ÞÊÐBMw{î®`_a¸7~˜¹í—ñ¥o™ºÀâ9N¾À7u¨ˆFöŒÖ,´g?d¸/úÚǦì7ù,s›É¶ôÎÓ§ÄxÖéQõÎ6N^SëbÆj,|Øô¡.}ÐužXç¥W-ºÍâOÏ¥Œ‘)Ùà_7yip8ÔSE†S„&Z¥´ªñC²ÔdTÅžˆ½Å€H·”nA)+èÁeŒ‰«óBÐ;Œùv]2o‹ýÙààþ{z¹­7·f|£Ñ5š4¶ˆY×P¡yÆöoàg²ŽÅÍMάєƜGŠ7¸ÁãE©è¢*÷Ýäé4§Ó™BZçù›‚z“¦#+# x€£‘ÊHãpæcFuÉtjïÌ™jìc2ÜU¸;j}sjO*²Þ9«M_à×lMÆø¹¥…ßó—H÷È78“ úD®‰tæ€z¬~'ºð:Wò2‘!MŸÈORz+ØOWÚ1ŒR&0'™‡åöa;0’¦ì§/ódxY’èO´áCúQÁ|Z1Š<.fssZ¦ÈRîš3Ÿãte>H%'×ÞôàIúq( ~‘¹Ic?í(á:Þç.žgk¢ìšÁ›É&o[q‚(q|ìOÜóE `™ÇaŽSé•2!XCoN’jXN!ç&Û•Ôp"Aöå6®NQÄ(ÖrNòô»†žôãûiÈ%  ÿHäéÿö]rWwª©ýïY«þÏ(WÈ&çÜ£f+w±&¼O9…\ö¹yéEŒ¡7›©dÍ™Àl:³œTʈ伵‡NœÃ&60‚]td +™Àgæºð+R”s3ײE<Ù—òí Ÿ2”j*èMw–Ò‹{RÚð);iÇ^ŸŽURì÷ëìl`Þ1{z²§~êvþ"!ÏfÎ/RÕ1½òš`›ImSÝNzö&æ3ÊÀ_¹ºÂß¾åéJZПsˆT¯óê$ƒ¶….ûã•cy‡.lrÅ ×{4E– IDAT®Š&?™Ò:hÈfуÞ1b`“×Ò-VÀ Sbæ^E!]ym]ÑHË 5 -ŒL f7±3×ù2lO9#åœH³à^RÀœXk2&½àÜ´‡ï[}Ûíõ¯ð佩g›5wZµû)¬Ô1ölŸÔ)«UÆ¿]ྗRëšÚ³—?§½LªÖˆ>)ÍSÖÝSõªÏ¹ŒµiRêÕÉN}ÊõÔQB[âz÷QºðgŽ22¥³´hâ[o…³÷èÝEûÝñ/ž·³¹Mï77¨©õ•žæ°ó·šðwíKôÈv‡³?Ô£$ýÁá7i›z¹¯<^›uø¾ÉEa~tlBO o´¸›“£)¦S&û4eÌ{¾3YŽ©â}®¡Úª^½ÑÛó"—¤ õôõ4çºÄÈþy•óiÂkœA60>Ö‘t£gQ’Ë’Ð.ùöâߡޮ¬£#‘¯GŽ„z€Ð ‘‘ Án¶RK)ó9Â1õèävdr'È`!Ÿ0”9Ád¶šÛYF«uš˜/QÆj2’I·öýèÊVå<#IH¡ËéÞM@®9²Ì?‚ìe ø.GI1,ÉRÍ>vñ¸¥ß`³Ø’Ì`ûSΑÄ^³‹ÀDš25yÓl“cŒ2œEìŠ zÓ‘*Ú¥E"òyŽA3–p>XMdÙ]↿íÑs4a'›Ý7߇lëD#K;8¯$*º5d^wËÉð\ÖáŽWÅ]zþǧߺ,f'C’)ÅÏÏØq½“Cˆš:Uà@Å÷?0ú˜ì NÑF¶µ…Ýìh•*îV¨k¥aA‹\$crìÇŒeYÚYwEŠëÌ©1°ÚžØ?x+ø$¥[ÊW³ÒdwP+Hy%å›A/ZäÆuNðçÉJ^ô‹-–òá$;®â)MjÝÆžä³j·TÕ/¸´óÄšjÌe]žryʶ`Yd1)x“NiýbßâƒZžâ ìã/l=Íé'òŸñÓ8ACvùÝk–¾îÈ3ʽµ{˜}ì¿<¥mðYÎÝod O•šy®ë4nèÈ—¼|F4wKЛã®(çI1–v¬¦–™¼Ÿì墭¹¹ãtúse2ó_G#¶áõSœtc,Ë9# Bc.áÌ`QB9ÊcS°”ý,á>%)önsÛ“æ\þÆMdƒ{q…,â¨z÷³œ 9óèC+>#ÅXº«OF f yÉJVY‚@ìECÞån6°†Ixá8­iÊqŽq‚–LS¯«Îp=M ’ÏÃ)ÎaO’ÈÙ‡±³xŸ¾¤9D%SXšô÷²™ãìánš3#IjçP¤I’Ì‘8Ž%¼ž&‰Þ¨!YŠ)åø¿Øä GlnIRØb$?jnV—f9ûîbI²:&9Ñú°ø¿s­ú?ivõùmâ—ÇP—ô¬%ŸÝœ—:•ç­X53øŒõLg=G2îËøuÖóÔR–È‚;ñ=Zp.oóÃÙË9œF+6äùJìO±VýNå[¡ž¯ñËÇ^ÒÌͤãðpžg5ÇøBž»â•Xøc¥ÇI3&Ïu I]Ð$l]˜Þ5¾neǸꭰ½Gçûîõ¶±ž·óªÎiÕ¸wù¯YÝ8ìÎY%§RJƒEƒ\x@«j›†Ó*ëñjãã%[L;fòÖðÆZÖ·ðWýV¸|£¹ãª-‹\kËé­¥ëd뼜¸ÄFÅÚW»¬F9ȧWç”:ž²?äŽÄC6-m@‡Ë¼ž1%ˆxÔø…ÞÛ¤áÑ·´øúk ޝ¬v”ûkknP•5Fq]¨ßH]C¡ —:{Ǧúþ’hÕÊ'•¸‡fÁØ 8x›ky6¨b]Ê÷óLþ’qˆÍä Ž¿úº?¨¼mgݳïK÷’þWéÉyñÄØF©J¿ê÷ïûæ~ ¿iÃ$%Cø(¯öWñ-‹|0¥Îé5žà*'z9w»#×;8Ë ‘~³À9kÍý0œ”2(epzÉ”ðû_º~‰Wë„gkÍÉWãøäUé9_Œ¾¿,,8©ü;œà·Á™ý 8ìm.á=®e0¬MÜ9H'Þ Z¿gƒYÔÉ¥žJÒ=cYÇÄCŒ(ñVRd+/1Ž ã)LfEKØÃüÁÙ,b3kØ@ Ær˜³©aM‚×;Î:îc%Wò8•4§;Ëòü0ömV' ³«“±ÿ½‘2n•sg5;McôµÖ°—¢äÓÛ‹ôä(Or„jŽ¥Ý¹=ѽæÒ/ÉžâBÖ‘å ¹,±¯äÆÄë¸—Ñ f0?b û¨åDò½wò6{ðMW®bvRš2$Ájü[?ídÂw?Ä4.eirª;Ɖû£²œ ´ $[¹=߈ÜÆB6'¨‹ÎôKf`(y¦ŽQDm¸…©¡ 7²(ûÜ·øçšðÿÖ«šlÝÎ…”SJw®çbn"ð<¸:Ö—Í,SO—ȧå±õY|‰6œÁî` Ÿ¤ JYžñp\ÏàšNŸrcd;ÙX!orU"«¾‡«éÌûŒfլϙaùˆŽÜO3ÆD6r'YûŠlJigªòL²Y3ƒ‡ ÖÛúó°ëH™Ÿsw¯óÚT¤=¹™ï°»£{Nf•Zì‘}¾úÚNv5ŠìŠ<Â'•:÷Úïó̦ܳ)ø V©´GÞão†§û`³Ö#•ÎT½ÁºóG›?"ëæØÇy¢`yÆ÷c«x‘ JãjzÓ32¡‡²*ùbO•Is*eDð5Ê:»ðT~jÕÚÛݺ±ú/3jœ ož ‚-uæTÙÈlúPLÏ<#ƒÇ£›¤{¸x•‚éGtøåÉç†p£s_ÌcÜŒÈ:ÌŽûýʨâ—¾kÁCîjU÷Â…–¬‰î¬ŠîœãÎéñæ“ZntÓ]~"sÓÏâvç{èa{NªÞ£ª,[ê˜J}tfFƒ`;›U5j8çªê‡žó£CZ—¹p¦'ÎöËUö|÷Hy¿®t¶—nôÍ™†Ô8pM\9Tõ )߈=¦|D˜¼Èo‹üv-Åt¦Ïah™Z?0€ÇYÌ\ÎfEd[—D4o.µ‹©4 Ÿ?“Oj9Xg=)Æ0î,àŠ‡"2ŠkÇRîf"‡øuÎöºȭiÁ›T0€ûiϨŒÞ±IdðÛóÜû A+½LAlHd chš8ç:RÊBöÅf²Ù –)´b'cønr¦ËBFDzò;Þg5ùò©¡Žª`Y0“ öЕ¶ÌàíÄ)•;Ìu¢ ÛßÎZže/§³ˆ%´äÌáv$6ÅÓÀ=¤9ƒãÌ£Ž‘¤ø./ÑŒ›¸-Ù† 9#íŃmíËU|•×ùéâ™»óKI³‰ô§9{(ϸ+öÛ¸¹”0„¦-œ¬±)xa.ÈÚú–]el©‡óv\è«¿Keã !5¥õ¯]'™Ðxv~öî-!omjû×#Ἆޚnãѯ/ŽŒI¹+ØÒ!è@^¬UæxðÔ¡íÆÆ·¶È¶ØV7óÓ‚´®ô¢Cõû¶ik 9•Ù0¤M|¨Ô:Æ~ªÅ×âk¾gH/Ç)ù"·°-rfZw^*poe}¾vW§t šÆÖó±¾íÜ´³ê{ck­Òà\·®HýåÁÈ­Á–”!öTô[hÚ3ö_èÿaï>ì*ïöïÖÞ30ÀÐ{/Ò«"EPDE[ì1v5&ÆÄ;Q“Üi&šcb5AEEAE)Ò›ôÎÐëP¦îu=/ö¬äÿÜÇóæyóÏ\¯88fïÙ{öÚ×o]¿ßy~Ï3ëS:ëê*«0 ¥s¼m—&%ʶ…ýk˜Ÿê“ }êëS Ï"M6ÙQLMV0•cÔ2¤zê®¶¡ÑoÜ0Æªšœ£²‘W.L½Ò7ýÊÍá•Á¾õ´¡Ë}ÙÑC_‹ÏÞˆSùïðèV­êëØÝÞ ×u –Ôs¨R§Ø“åÖ—Y`êå^y$šúad4ù&·öÝ#ÕK»Uß¹©\†¿yåGWzx… µ;­›Ÿ§O¬ÔÔ­k:Xµ%ö%ePPȾ2yÚS]¹:檗±žxŸâÈ¥icSÆÇþÊ-|ÆV&f7WªÊ­ßD†«ÙHC^g/å<ËDê›vY¨ÚûÆÐ—IÌ£M®à¬`/×suù‚Ëø<öSŠ™Ç9 Ma/íhÂVž‰ü(å‰`9ùd4wr(±ˆÄt¥Ç©K:ЉŸóeVy6åT¨ªj]ØÎŽdÔ׃I£¬?×&Áìt 1&Šát`%ù„˜Åf²¾ûE”'¹'y‰ŽÔIò®>O~ÿˆ+ÜÉQ¦Ñ†«ø;Hrâ;R‹'¹cÔ¡” ]xOÖÓ‹ÕI§îXRÆš'’ô4yUmïЇj4J\ç¹IpóyLæs¶ÓÈãp”Ág™‚s„N´£U"֨ŶäªÓ‘Uÿ—ת‡rõ¬Ìfd2&-£ò¹fÉÛYs_uÕ3NÄê38å\j³züžIÁj>çöH£”mÁF27ØAGZšôk/ßÈÞã ú±‚\¢ÄvÛ̆´…*ˆÔ–ØjSF_¦0œ#ü¹Ä¼ )ùCyífÛ»—]A¿”ÞA‰^‹­8eî 6²&mtp(2-åLuWÌ®=šN7ê[ßÌ^é›Ö…êL‰Ü´IéIȵ3_ÍÒ é¶“o.îU‘ùMSZÝ™Ä×xù6)E‹ã k/è•Ò)Xí÷\ý….«ìîaó¸,ù-åâH&¶¼DÛ¤ 2šD†éªÑz“[ ùÀ¤å Um…ÛƒWŸŽÌ 6¥ó[×üñÄ3]׺¹PÿŦ=eN•z!Ö<å—ùî,Ûp•fK¼þ¬‹Þ ùäו_šnÖ4|ÿ;Jm¾˜Žôâ”KŽ’I=÷•0u=ø-]ø’yÁ§±ÚtJÜ:LÞem;×-Ò³‡oö “ïÑ jÙ®èTŸ ^îII‰¢ÈùÁ)²'mXi‘Ò©L±ðáÐmvé¦ ´eãì-0ù ͆h_'=nwîȾe#g+gÊx÷¼¯[73Ú¦ô æ’¡/¥¦UŽï§åTú eìດ¦±Æð­hÀ4ƒhÃnê0†4Ntæ$CiJ._Ò€Y|–xêkóïК5âzz°:làV±†¬I¦ÂÍiÅ ê0–R6$.«½A)YAudó“pÛá䲇“ɬ÷3Úò ¥gå»dw¨ OØCcæÒ•\6ó$¹¬LdÛ8“<5©“H§%–©”±‹• é2kTà0CØËPŽ05!e­¾GÉIî\1’mìNDÙˬ1ûØœÆÚ$”¸Ép¨(\\°qûsºI¢|%Œ¢;û¸ƒÉRÌà.U’÷¶td3¸Šƒ¼Ë *’[õg¡Ó“|Ž'ðmgíŠÕhžè/þS®þ¯[©Äµ¾Çè‘àÌ/Ͷ*tŠÍ§ ³XÏŽr Ëy…ÙîÈu¬b3÷Ó”…”Ñ%gímñî¥,gCYÇn¶'(Ïl–OÄçiom©©|™ãÉØ>¢iò=Ç!öS3Ç‹ñ¨µjEÑ’ ˽\å›yd™âUž^:7÷ZEê"Ÿ1¬Rÿ¿­-O_Ò54îšÛ™ü”®ÔÍØÈžP5ÆŸä6Óý¤ïgä–›Söå­A&‰{¨ç͉úò—;Õ¬óþòhGVÖ?'¸-§y›xÌÇjIÏü/›³i–—©à\L7Vó÷ãƒA)"G"×Õ5ifÈïM:Îñ5*'G?Y¥¸Â×Äßšr¦ç<ÏöõQ+»o÷ÜBçýæf+ÐÀŽêõ£ö„UMÍêdaG ÷[¸*Zx:lè¥×æt­a¶¯êØlè±w^Rí€?î ‡³NÌû)`(µhLmÚ±0rmð)zl½I7åì¾$ãû¤lÙ-¼¾líìnÊà r„ØÄØJ­+å$ªåjêhÌ.sÛÃùÌäj¾´i¾ÅÆé†;ÛÚÙÛÝ+Üý±»ííjF§ a5çRHmZdì¯ô6û¹.‹9vÓ—V4c+½›¸îŒzÌgkùýxCce3-ˆ“tÄÎ\Ès¬M¦ çPL;ºòDu.f G¹ššü™ (¢»x€Á²œ=ÜΗôgýËdöp5;ØÌböó,S’œâ#\—ãžØú±›|‡‰ji I6Ó­\IsêQHABTi”ˆ 3tKèì5ùiNgÓî¹=“ðߎÜϺ¤uV˜ôëÒìg?|%Ñ/Hb>r¹+Q‡×Ç „%'ƒÀbq˜ëÙÎ-Iß/‡óx›OÒú².‘§Gª‚úŽPÌ=ôOT]YïÍåÌáxr8+L¼Sûú³¶»±lbÇY•„‰œ½*ÿ%jÕ¿I¹Êã,J7!z¡2I#ÀbF0‡úüœ#œGs6Q—µÜN^Q¤ø’›–`vï(g‡èíÎB•s5r—s{އ‚_q!Õè,’²5-*}‘U¨ì%Œãþ¤ï\»D]ÂàÆ<ç¯ýËËgD ©ÞÈmSÍåíËT/5ñ5G…ͱ ‘uå{)˜¯ôþ°úeCugïÝ‚ÿæ¼(5<§f¯¸¢’ó9YboÆð”ñe>urÔ8êºM8èëÛ=ú éÍ]ø†ãÝýò&«s*m<+ƒfaõ(oôZ{ë® •Û¸œ¦Ô¦¦=rÜÛ~EzåkUb[ðC†´ßŒ?©\.|bÃûl±±•îœï¶_ûc—N×hŸ6ç+ªç¹ò[ÖÏRÑ®$ +5K^Ÿpÿ|ŸUôŸ²:Ç÷âÌdÛ†øòL¸s§ÓŠ'ü>s´IôNQaÓHµ¢ÇëEõ"Û» 'x“åÙ@™ÅÕ5j¿íÃþ7ù:ÝTæ€ÝÃhÏèI)y àòÒü#•5"e?JIJPû-K6*;fÒ FQ‡WÉ©šð‡¿Û¶É¶¥¶õ¶¸·'§Þù 5ëx(ÝJ#x?;Èd}y޽+ZðåÔáv&3‚[’ÀßlÜÆFHz¡YïIäUVv±ŽÞtäL>«¸;ygS?ŽÒ€:œ¤Œ‘Éøç÷ò“$”r9Ô໌NTæ“—}ˆš\Ÿp˜NSx@%J±rºPÊ1ö(f6÷q)תŠËZœ%²“…ÚI…. {XÎ%`77ŸEÙÈ*2®NÊç¿Ìúw(W7XÁ:&9Ö™Ä=~[é@gæq){˜N=v°žŽ‘5Q•IåIÎMXÎóèÅ ªâ60žáeQ3/ÛIJR½ÕôcY\¥*ž¨ÙõžüÈ»8¡ÆWjîëºÈS•vñ+F0‚çèÊ"–ëN¯r7OôÈ#éò& j¦¨X¹‡>°ëbSë;õwÚzy´ëßÐðo9®8í·ÅåøZ°‰‹U4Prôàõ`/_DncŸ+nŒ™ïÄ%¯Dg. ~—㕦ät¿8üîÇîÜéÀP·6óò&‡O¸Æó!=áJËÇEnàÕ`EÐ;Ç­©¸f|Rúä•Ù–²HÛÈžÃè [úüpoçóËò_*92Ÿtw¤\iÑÓ£ù2½,õyc¿*‰½[}àðÌE+tŠ¼ÆÆu6LÖ¡£©[^±zC®ûrž]˜™¾ÄÒ¶L§7Çæ¸Py#Ÿ\é©—2×_gÂèºeÝÓºWئÖwÍ­wôÖèü‚ÊêMmý9Û¹4ö©‡¶Úue4uoP‹+’üÙN£7ãy‹!tI«—êPœ™ömãf+¸<伎ßeÞB[KÝ0Š4g[_Öÿ÷QãÌ1'w„“׆ÒeiýhnðµG:r<­ É¡×pŠ·9Á@z0’è•…ˆ§¼{56ŒñT&7ÔÝ‚VAÍX ;)£åÜÇêò,+OUq‰š°˜ù§YûŸ06raä({YÊ0‹õéÂqRL"Åùœa4›éOÖò:{¨Ë8 ÉðÝYÌðeEÃÑ7‘w×g¹Œç8'üò U¯Ý©Ï^îf3ˆ™Æir˜Þl§%k¨Á·Lý¸*ª $¼Ù4Ï¢&“4Åjœ¢ •Œ 2 Çú428r{YIƒD‰^H%ÝhÅ,¡ÿÅa:ð<3ØÍ8.áÖRžø”¯`e¢_¯¤Vbоr–Ò€3+‰’˜þÏÉô7r”T¥%|›_‚nf=ó©C¤ü—«Uÿ&åjMÒ¶Îzœ•˜©Êá¤3;YÇFRÁ|¾JÌÒ”'iÃT£-£I—Èc‘täbÞI’u®-¶”&ü–td´¦-+4­ݽ5š3ÚÓ#ÜS¡ÏËÏ|Z¾§}]­Ê}¢%\ÄA¦8ÆR=JÒ5ÉSQ/¶YË^.˜aY {¶p)5÷*¿ˆ_ž¹9­v¬fÐ/ò~J›`e¬<åæ â©´6®yÊùÅ©×Ç„;jëØ>½aD(ÙJ* œßø3O–ûÝ䤴§–ß2/ “WP=­o1/¥n¬E¬&eÁ–ÈÊ´±Í)Ý"µ3òR6í¨mØ›ÞZ¡å>÷ÏN­Úw1/ó¼z©¢¶ÝžÐñs²#ëTµÇ5)][dϹ6•9±…SÖìut˜_ÊŸX­üXNòŠE7:T/É;Ïæ:Öb'ݨ4õŒÊw©^æ£ …¼ç¡UŠ//}}d<{D¸ácóöòx¢<^˜cMõ FTVlH¯üVmW–y‘-£ArŸMH§…t¡»»F¤:· ]W(Ž<¸Yf—0„«˜Äµœb--i—8™fÑ•cL.gŸ?Ða··sƒ|†³<‰ÌèÊeYVw £x“G‚e‘K"Çc•Œæ ·RŸŠ¤÷•an¤¨¶Ë}ÄLjñWF.ŒÌe73œ/“àÝÓ  9í³<³”C‘þÁëô¤6'©FäðéÄ0Û4!å%«=´§;KØ@cNÑšATГ1´fi¿ÈF ßÍ.1‡1ü*Õ^ÆÚ$ÍÒå iQ›º\Å*Š#½RÎ ^à9Ô£¥¼E>]XŸ®rææ±Ÿ/(â"¶Ò–s9DrGavÞœ²—Þ­!¥Z$ÇrèG!]¸+íÆ]Ë5,¶ %ü¿3×/kq"GµºPÉ>ºp5-ÃÎLÕõº(sË·Bû]^fpäë=õÚ—ùýwƒó2ý~ht ø±oÔö»7ݲ¤Ê“ñ_/VÛÜ®ö»ý9Î2¾“íȧ=Èv×0—¨Ò™«ˆ•󗌑7RV²\Äc‘WÄ£? ýj¤ýT‹zígE »>å|;zÜßR̦‚FþR×ׯð{¥¿[º¼†5Ùsl§ˆÅL£ÓhAM.N}&rˆ1B6qfªpšÎ0’õD\–dÌc'mj¹(O=Þ÷T- iy‘ŠÈß9ÿホÝ:Á»G•=LKrx“‘»Ó†&…Ë9HsVp0©|›ùeºê£9ÅaZÒ1‘œ”9l¢m6±žél'‡¶l¦+x/R7Ço"%LàM>f6çðI’Òõœ`vrñßEc&Ó$¹Zû111âŒbflQòKùÏÓ‹ LIéÛq³lÅ5 ,ç‚ä9§'ÿXB!™J7Šy“•g%3MáU~™ˆ²ï± 7ÓðŸBc˜À^z¤Ýy&b,L¾ª‡’/rö!µiÂBNp‚—S¶ÇÞ –p4ùZIx䛢ù4öRI»ä97ÆN…ª0Õîd1=x“í´çÌ?7ßÎþárÞ¥Qò1aÄYœìõj.¤¿M8”¯Ðˆ›“—z #è’¼Çi‰òvgò‹ÚªJT¯ÚíiÈòþwìæÿ&R‹¬«ÙÉ j$t‰Jð4;@ÆlÖPÁuL¤ »ÙÍ6>¡'èÌÇdØNW–g/÷´¥YÖ² IDAT'h,àNSÙçô½º4­7„º•_üÞìbÇç3(˜9Ì.š2’ÇØg_OZ„Ÿ¿¿wu…uŒËÙâ*ºÌ1c;Ë9Âõn;$?ÇoÙýpÆ• ù3o³6èÑBÝ ²\Y“¾®^øõïýâzÏ;.ð‹é¿êºù¦öñÞt«º\hÙzˆè4/üb™;Özí*3ze4е¡1+©ìÍ1<ö8—q&ø”§è@ òy5Ç£±'ɱ³´ÙÜûO?ý©ï]æÂ¹á™%áㇽÿ€z_š´ŸUteõÉp…ÊOÕ(3r´Îlél_¹¡;o;ôˆswúak'_e9ŸQ‡ ¸ìÝm¹/}|Ht¬KøÚ_ä91‡á9þ|[îT-®Sç2uR&=ã¿Þ ç. Ÿ T~ˆü˜:|ȹö<y,¡½ý„'kiWÓE¥ºp/ ¹™Y‘Î9òcï1„‹˜Ÿr"òH¬%P=å;)[‚<~—xû²˜Ôs)áeVG†Ò™-ULd¯3“ =KϘF-¾ihÿÆF沆-ÜB –SÉJÓ‹}ÌLŽ’5bóØÃãŒ%ðMN3…%$²ÉtHzŒ—QÁ$2Ìb5ˆ®ÇO‰ØJ' ±>Ôb4¥¬â=ö&èê54¤œ¾ÜÁ&Þc-XÌ ¹”çx1˜Ëøäæu óØl fó½d*¶‡£Ôá†d°trâDžwDUåÙbñl÷1jRÌijð k‘äi2Ù¹/yD<’8;Gqšã Ã)J j¶Lp'ëèH†°•B¶0à,ÂSWZýó^÷Ÿrõ¯´.e?¥Iæi ]éKŸäËvçñZŸúÙÆvF$QžÙhÑóø&ó9Î^Zs&íéŒòEJcòbßÕ!È´57_A;eï«2TµŒmæ÷±4­2šÌâ¿Užp×ÂÐg{êEUúXümÍ Ò'o´­·y.YjzkÏÏ14öWbFé{TŸ ç»ûâ±[ÃØcO;5DÝ9Ï‹w÷Š4RÄêTzŸ‚Ë½ßæT89QfsTZœ.»™ãIG(•6>VÆtJ™G<=ë™YîóØ3ìJp8c‘a‘DÁò&…7/‹]óžyWûŽ©—ùëlÒéG^wçÎÔ´½ÁVòù-SÄu­¼ªùša•ñ¼úî;iË)9e¥©¨‘–ŸÖ*ø[Æ®¡‚E.,¶gc™CK𚦮áÒ°üôÚÖ:ô7í+÷ñLTu>ønŽþ±!“qNk;+,Ê×´N‡èLßåî½Ë¶vV4šZ·„z ‹Ôg òšÊvðEðxPì­ú©Ÿî Ó2œŠCž{süý >5vÛ˜ÜÔõÇ;E›jrŠIÉo]6p8eDdEЛü ûJýœu4å—4¢f¤"XW x>¡£‚“Á~Bׂ̓¥Ä g# x€±¼Í*>'ÊqGlÇ"ŽäKºf=§Á“ÜÃú”+r4æÐU 诈rêr†>”qmƒRΜæ!±ž y?ÁŒ¥É¥)Û¹”I kcøŒÌ£=—°=aOHÌa7%ÖÖÉä; ¢1+y‘Âäôp$é(>Á:ÆâK 8ÁéÄ£Öž/¨ÆÌØìO¤ðÂ"ÊèEšùtä z%]Üe\̉‰ø†æûµL`¸–Åg_c&õ¹”º´g%1qšÑ¬å<®¤ µ8C†<Î|šÐ+a4·¤¬Ì p‚:ìI•MTOÑž ‰rääÊÕ¿âÚ’$ô£UbĹNs’:¬æ ùlIl:uøÛÙÌ.>c:yt¢#‘HyJ÷Øg”ñÕ`R0ƒºLã—”¦ÑŽ^\ø $èës‚…,ã0ŸÓ3éÊ;º3úî/ý¨8üŒ¯©U?-uhˆ:/¸¬›å—¦v#ökNéºÖ×ûá;ò;:¾Î#·¦&\bBÓô„þa=ç;ÏÊe)[Òj¦ô ZøõrÇ;zv4“9JEdodHMµ+Þ ŒÅ)—d,K¬Ymî-6UÓ2hQáÏ3€&)祑‘>AšyÅn©¶7ª>aOÅ#úiO×OW›o_Ó¸8õå/CUz -ù;§OÙëyÊ V±müW–g|{™s¹‡{iê+=ëÊFÖïO€âWq„öÁÄÚî,ñ>ç[]iï\öGE†3kë]ncœ¿ßöºÖ°7òYæ¼F -ÜêÌdy-”6´7Ð<2(ew°ÄWÞTpTE%}Ùî–Ö©Âae3ÖЄ?{°…½G\SׄnÚ§w64­kZý` ŸÑ’ëˆy™TžT$/£ˆC4#CµÄès %i̓º\ÀLjSšr$ßmåV²’ëÁfó½´ÚÁGäQ?Ó†ºÔ¦O¬ÏÑ3¥3+( ;Ñ‹£cs°$®åµá1'éÄј4_e}¤<¥zP|š„æ,b)'Y’0¦ i•ð):МJiÊ1ºÓû˜Ä1„²¤;z8aï¶`mhF)l£”¾ ¢E´¥)³(¡ ,L¬W)&M7v‘¢!_#}Vô{¶\eØÏÑ$ö÷M–pœ†ÜMµ¤Ä–&ƵÃIÈagréÏ!V$>„…\À\šs„ya[Îp,qOï§„"Þá(ûé‘t/SIg'“P’rÊhH#þ¿ÌUiúPÀ®ÝZõo(µøÿ¨[Ykú‡¼ÁiÚÃì¥' žd—•1ƒA´å^ 39ÉZV1%«Ä UçýÚüŠÆte05ø‚__ò·'T•Àúñ[ž#—ü)I=x3(´ýjÛk¥.k«Èñ=bµ0 ”ÒèXÜW^L ¯í‚Ç‚f^?æÎ-øùhßü—na?Ý( Fr±YœSêœÛ"qZ·X*¶#(´·¾—o¦wÓ6h+Œ5öÑ€Ï8“ñ+öEê¥<Ÿö\$_³ã¸—Îø ŵÜÝÖyI²N^Ð=Vb¶ÄÚÇ¡#=ö€E·ùýÌôyÇ¢Çgf<ÎúæbšPÎâ Û“(¼¾¼@Ì)ʸ4©a8íÞÙ™ ç»÷“ä-àÏ<ÍOyû˜g¹’5ü¶=|›B«ØíAu†ºè²VÓ÷ËÜtú³¦ºÐl?c·Å%oRÈGô¤‰[–h1ÞoúNuF4ukÞó¢â¬Vø›´†Ç®¶ªƒ×7yýÝœÔ㹇ÇÔ=y =3Z0³ºûëhǯ¸„¸=v"K>Ók¨Ìw)]¨MÎO›Ë´á<ÊùŒþ/$ZŒ‘eiwЙéÁAªÓœ£ôauI±)­gÖ‰›¬æ >Ihâ#h¹5­'«9œxZó(ehŽ8Ê¥,åÕ,<œб‰T¢‚kÎ@Jù„êT²‰aÔa&[ØDMç3¶ðWúИgèN9g8˜$ù6g)µéÍ)æ29Älj±2CÚa\$/¥„Tã[ɹ’ϹœRJ“^ßhºsA¾C_ðÉY™4u˜Àºì¯`|‡¶œf!]iœ÷P+ Üy”\†py4IT‹™³POXJ}†f5«³—Stÿçíë|@Õ¬Îÿdþìß®ýïvºúÇ:cŽP˜4£ÇèÊçÜÀß9F{yˆ¥<È4–PBDG>e$ Ç‹\—ë¾ØfÞ¡;ØÍm¼Êþ?ý.Ñöl¤9YO[Nr±liqŒ›‚ÚÎè:M‹VaÉÔ`±\°Ç«%JÑ)œüÍÂ#ëýp¹§7¯Qzî­ÑêÕ¡Ÿ–·ÖkK*ï[ZÙý@¸§<]16¶Ÿ5,QÚÇÆl¾Þ’Ÿ†YÃÊsjìÝVÃø2øm°­ÒšØ5\B.2>‹½ÏjÊ‚6—Ʀçz,6››x#TePI¨7—TÈËŠ†rý0cƒ©N&ˆiÅ&ó ýsô½œr²:ò¶ìäPÒË:È­´fc8̾D¬‘M<Ø,¢d;C©Ã—±ŒRnãsÖ±ƒ¯p€¯²)ñýŽ«H1ÚôK©n!°€½ 9"CƒØÂAnà@BD¼™WØB)“Ue¥Ã~ÚPƒÃìd9ÃÂäêýz2»*¤;w&#·"Žr€ÅF3‹½¬9+«è[XNmê$|Š ÙÈèÄCýÐ-J8É8úpšyPÎåLå§=pëYx{³–†l:É9 Œãlb÷òsvñ1…¼Â{tb=«¨ÅW™Gù²†R*HS‘ =«Q›ú b*ë¯Æe`2yÜǨ÷‹Hȧ„%|”8 ²g²£ô¦cèÃPÀ,¢]LàëIÒ,)ÉEguù®åèY§4gÕ¿6 ðð?åêÛZIg6²ƒÓ–÷ØM ýx˜Aì$TÁâ¤I§ª8ÙÛ´lÓãX27®‘r(XGíìÞÁš¹Öƒ—iGÇØdž»51sŽ®¥ôÒj§îÝ\EËö„Ï?Œ ù/ë’£à'6ºÒTÜU¼‡y–},Oåômuuõ#øêêvÔt¼-“u¬mØ|¿àÔ5‘þÁâàJÚ±‰5z.+Õ$öEÊ•‘OÃû¿Q¹2µv ûSžB)LK!rYMV³ Ü,Χ.§ü÷oßíÕìùŽêë]^ic¥’5ïhÔ\“–+hrÊ6vÔÖY\£RŽDU[@êøk*ù˜Ã´ OÐ6X”R3ø+ƒˆÙJL;ÑpqóÙ­OŸ>—oq ‰Cù5­ªôýêŽÔPV¦K™ëÈKä3žŠàt0Ñcùè?«&|HÇ”Á—ŒÓµÜÐmj´Óc…Ïׇ°5SXGÎ w<+ôójçÏú¢¸µÙ¥t£z°(rq’¿~D¶ÍX•D“áÇì¦ ŸÒ”¦´á›ª ͸”¸Š×¨‘6ˆÒîŽ}L5î¥G•1ÜNľuÚ[)"«‚CÔIÒcg³ß²™m¤éÍ(±ˆ6”EÚGŽò=†ó ƒöD—¤ß¸Ž4•<Çs¿¦)j%<Ö›i–ÔÅF*ª¬«|c›y™Áì¢& é‘d2Ífe²ÿ¦I%G(á\†%É>œÃ,ð S©žhóöax¤eTÕ´ÏNÚ–q’«ØKwš³ý„¤G÷mÏb‘¦ ¹4çÖDcÕ+aeqˆ;¸‹›hË_8A œfœÏ&§\ 4öS¶sÕBU¨AæRÁ1¶±™ɵtœ‹’Ön³$¢h5Ïò¨]ÍA–°ùŸ'Rÿ§Z•mîûÏéê뺈zœ¡5… £]èBc¦'Þø\Ê>*èÏ^ê¤<¼À¹ ÇeýiÌ:z¦Ü`bÒošÒ51Át ”ˉ5Y]½mnõîÉ´oºçjòWkפ¦ÞL÷”Ñáð ½ÆjõajåÁ*ŽS•œJÌ¡-¸4<þƉ§?Š^oŸúñu¡ÛÝK ÏÑ{¾&»­k“>Yœˆ\låÓèë3RËÆE”h^WÍR…Ár_=¡¸zjî6F:QÂÇ‘æiÕ3ͨ]îƒrŸð•È„fZ+a› ëY6PÅJ[GhqõTjøõ2#'˜}ÌáŸ1Š¨Ì¼Ê›þâ:QÇfÑÊvÁ"°‘JÌã[ºLpîI§RÕ9H)ûèÌr‡][\4vG¼°‹çvêzÜŒ6µ4*Ó¾ÒÁ2§èÈ%Ž™ü!íÆõlÍ=àŠ"?µzDJ~t÷º0öˆasõ\¡I#?¿'=»Sþ˜få½¶vÌ–"?-wÿå`$1»ù*_òÃ"û#ý¢*_$öés#Ÿ¤\ÌN†ùWr'óiEKÊØÉ~6r#‡Á¬U£õXÈÚ$l¢CÚ€ »ƒlb1×'âé W1—6\›lgirR¢´Þ±#‘Q‘L°ž<¶QBSVRJ[R4ã4Û8D+í£9ûéB.·Ò„·ÙJ1©È†È‚ þĉ ¤”%\ÇeÔæpàÛ†–‰6¡Mh”0ñF28•ªÇš”›(cCà[ŸsÊd¦\NM6°—þ”Ò‹rŽÑ-yñ-/퀄{”íõ b?{CK6rE4cE [}@bÈ͆'œ¡S,ÏZ}S.^dNÒ\]Ÿ óvp ͸†ºg©%aß»iÍ~vPB zÓ’.LOÜîÿ˜¸Ÿ“œóŠþväÿ”«ÿqeQl§YÁ9tb5èÈ6NÑœí4૬æSЀê¼O V‚EÙÁP~Ÿ †Ò&hœ0H»8ø$‰3ج§˜+9HKkR/5da˜Ô1Z÷µ0w¦¹ÝmiÜÎ’`0Ý=läÄô®kãc­9A~ÒEÉ:KÆzršïlsS›hæêX½Ëâ'Õ+·ðtzâ“NÞ™kFs9EÖÓØó/ºá¸— éÁ–”IÁœŠÜ 6›X2ç_“YFƒÈ®Èý4Ùá‹v¤úÕ°ñ<æW÷j‰j¶mñ_Ó|´5:}"×¶œ¢Z¾ù¦)½ž±¾ççh›éæ2¿´m½Z]Âwßô•ù6nqø&ª±„s¸H“/Ô¨™‡—†ÅµÒ2ÎçÓHAÚSáÀR_ŸoÆ­òƒ¾5)UÂjÆ2ŸºpÁÿÃÞ}ÆYYÞm¿ÿ^kÍÐÊP©ÒA¥#(MÅÞðöI3j4‰wŠ·‰1‰‰‰Æ»b‚ VªiÒ{ÊЇÊôYëÚ/Öœyð³ïý|îçÙûÙ/îx¾ÖZ× ë¼ÎëÿÿÇï b C¹*’Œk8x£}}¯Á'<0×5ûÓÛæåŸYrp›/+½÷s%/F%룹WVÚ#ý‘;j{ü ùmù‚¹\ÌKÁ±+2>ahÚÛ¬Žíå«LiHÚó=‰XœçÎ{˜ÂŒ—Î!uÙÀô€rø‚ ²)$#àl¹3ö;Š8³¸ŠdÂÞHýX-–Q@6Y2‡ƒ´d3÷Äðt\3 Ïtú3›Cô ¹{ù”$R‘ð5Ë„î¦/SÆu2GbU´§Y0#¶g¥LäDWZЃ|Áˆ`±ßÌAJCŽÁ¾Ø|®f>CHmNe»hÅRú³<¶ˆ¡¬ ôŠJ.gMCqÙžžjüU9læM¸Šbvr‚¬åŽRÖØÇP¶s„å ã«8D’Ó†u\{7To™Õ„>,c,QÈV‡Œ«ÌÊ´ÆS}RÀGe¸Â˜"¥œ6Œc5;Ȧ’ó3‘=ÿRÇU–oWMã;¦Œ\Ƴ(<“¤$ùÜÀs<™I+Žü<©Sµ·éË\5ùUC‚ ãOôáU’oTÅuÄÅóÍz¬È±†’‘ÆÇn*õ÷]ñ¥#ª½;jöd;ŽÉ?È0^ˆIE»\T[»6ž<áÄê´5gˆf˜òz;²›ú2P£ñÚ´òÐQ³3âgž.vñ˜Çd®}žV`UmÞè¹Ï]ø°=uˆy‹ý\Ecž ɾb¦…’öÝAù^ùÂŒ®±»ìzº¨|.Å]T¥¬ÄíiË·n”ugùúyùgr7ý9ÁéÌ÷ÃpjÚTŽÅö°Ž§ù[©âÇœˆí¥u–Ë‹Gù1sýØÀ©ü…ø ¿¤˜!$èCÝ,¤Ôý…ÛˆÓnãçÁ¨[ÀFªÒúE®âÑ0ݹ)|½/"¢nlUìÊPy £OQ‡ö\Æ›´ç)FQ7Ës)ÆÖó0›xœ5Ôbe<H¯›¯!“Põ _‘¤GÀç†Ó€¶ìg2Ò”;ZÆ&ÊÉÓ÷}G”ÖWq +½]!‹®$[Þ•¶´·¡ª?ñÝhÇïÔm£O{‹úøª¡#/–—öÇØi´ ?Ò•IÃ9=vJʹnžáØ?Lûw©n†´¯]Vé©qEýØ€Hq¦ÓUÛY)¿`PÚ»Çýš þ-øß0«\×ï*[ þ¡ÈÇ-÷_SèxEÛòDO–ÔJ—§¤8‹ŠÿÄ)¾b·Ý7ºË½{¥âË£ŠÇkUÏI¶ON=Ï'ùô”~-ì½'½ÔÁOî³wkóœzÕ_ÍH :àÕ‘\vÓƒŸñ§8¶Ï›×9–ËjŽs1gókVp/WäZÚòKF‘àôŽªÎNžþEõ‚´Ïé]î™*ðb¶ÕiXÁ0ŧ²‚­ìÍòÓ´¬‰ìlç·L滑-4äŠÈ¤¤¡I÷¤íã2îLè¹.å©´,eE¬d €¿PÆ–,‹³”¦kB§%´J–ò$Í9‡ù,§„?±ŠYþ›ÍAêD¶O?~Ã\6r;·“àvЀë(æv'Ÿ˜å IDAT±›4æs‚Ì:VÈjñçž¾“Ò¤3#ƒbsù3m9r}O õ.o+7чy z¬å,–qÕI¿·ž/¸—w9—©ì ;}gòŸ“bQè‘þGP„¯å|šSÈ)ì ÅæL*£U6ã&FSŸ\Ì&Šh@ío’/:q>QD¯Ð®läÄÁGäò·³†V|8Œ¯v…à®ÛÃùm3ð_tÕ£=³2ÆLÎâ(U¬dXûŸGÇÓÞ¯gpÂÍÕ5f¬îåvW™Ï_YšÐ/’Œ-f*ëèDG:PáïÒÞ¤aâÈyqáç¾×Z›y:¶&·–ÙI­S¾§ÎV¹Ñ…oX¾'Q4-Ö–÷ÁzôôèóÑêcÑæ…ü”Ö‘võLKé•P[kLˆM­ˆÜ³ÁºÚ6îUXåÅGÒíwšy²ò½ÈþØjÞj"¯´Æö8ŠbZ°“ëxÝ%¹N´0븥ý oéÅ‚k°Þ³…ÎÝž˜rg£Šze*B“Œ¤Ì9‡O~ÞÒÆŽó½?i³$»Ë¥Ni_ºåxYÁmÌLkÅéOÈŠ´¬++eNìjÖSăÌg%ýØJ® © ÷žbs‚%ù&‡aí‘@ZÊ—ü”TlcìKúRз‹ÂfÉx{¹v½‰x;Ô^í™,ÙÇlÎñ?Aæs.Û("û½œC%¸š<:´ôFö³‹ÑL¥I.S“…ÑVd+ÂŽîF_QEîIéïi†²'áìØæ“î—„ÁX#v³’[BpbmŸd1>7Þ`FÈЊ)æP¨Ûr¿™7Ÿf&1HQNiÈh>0]YMQPÏg ñ[‚Ò7íÿ³îÛãê_eÕ&ît {#‡|ð µ.àB5eÖi•ªª­ä­¤_Ç5ÁÕ¥læ¼XƒXSú1€fÔOÈáB0…UtaBBÃxÏS:h¹K»¦._Ÿ5¦*1æPõ˜ÅFLb›%ýü¥\Q2áüØtÚPß½_»{³»ÎH|46C;ŒK;5ö|çVY”6‹$Í8ÌU줱ò®.z×Ì!ö²&-§–QÑìÑi³ÉK:ç„'èAfÒ!鮨'”³Ö?fºúW,¬¯WbñU©¢V:¾¡_ {ô‚ø`2»ip„óÈNÞnX¡ç¹g¾ë™R¢åÂt›OJ[/qi?Xï©m6^Ê\FîŠKkÛV¨_aôî/ JŸ¶"m#Åukõ¯˜ø7KÚ²‹Æ,f1C˜Cgd9š=½zb˜¦Æ¬2æ³xÌz)‡ÆÑ#–9œŠÉ3h¹¿.³²½‚Lù¸9xïVSi©ûŠã‘‘±äÓ„tl\,Å|Æ3/VFL›WíÅJQÒÐØVvÓŒÙC.ÝøTІ6taŒ«ô^….±§ã¥ÃÐø'³\ý™OïPùHÂ("¾ ÓŽ…4¡+cÕ±þu ©²4vnÀ§^Á_#­®ˆEäñ2•¬M¸*ö)-iEœÔ/†I¬¦˜K?ª(¦>™J:ñ&ÇÙDOúEJN‹ý•Ùìä–p hÜE-9ƒ2 Ñt^sös.Ѐ¯9Dù$E}‘Ëln žÅa“¶ ¨°LÖÚ©) q&[BéÖ‹ûþ¼0ä÷a3ƒØCó„V±•áÏc%ÓB°d#NІ9œÎž“Ú0ÂY…”Ó#“‰C9ýØD¾yœ´aħQ;D ÷cM©Ë&¶Ó„Clûf¿q»¿9»Êܬ|{\ýË®J0”m!É&Ãø)å»L¥íl¤’˜˜O¹(rz¬7óø€Ë9Bˤ<Ú1„…œÁg±¥ ›‰X[Å(ÖØØÍ⟕Ú~$Þ~¿í³m:áÍä—%µá¢´- _%®?öª…{<­™¥±2šÇÝžðÆ×®[RyÝÚø£ÎÊ;0–Úüu ©oSÅ–Yþ²Ï3÷'\íê/%q8~æ9ͶYÔ›¡¼Ë:61ŸË³uOYOC?ÝäãïYs€—"ýR–ÆË—X{®[}x¶£i*"Û³ÝK›´}´2x›óžmúü¥>ÿaõÇæ×µq¯…u²Ö>›®\læ"˯PÖ“²†öekXé®J5H,l˜>ü2…‘Sc“M^Å+wgŠ^ÍrNºFPPP“™ÔrHꮾ~£uWš5Îö lïhûn×ϲ|—ýÈ«iU5ãÇ«íé }®åg3š¶2kéÈòX/Öq@Í3G]nâ²à}YÏ%ÌàaR,¥od]Ò=±ÚôfrÈâz–Uô ·•–´cçñuÇ §¥n«=¢A'ÃÓÞY¯ägA 0‚úlcu˜‘›r¨Ò’¸&At<;é˸Ȩ ‘ûšÎ”r‚âšØÉ¯ÙÌàÈÎØçdS›ü`Ÿ*ä,ް“^,å+ù5ÏsuØD58-”si –Í£.ý×üR^!—¶¬ bë^\Á'lôŠÚ\Ï<šPÄP–0!X‰w‡ýØ“Ú|Æž@?YÍòùGùô›ê†í eƒÙD€- *bs‰@CްŠ!ôe9Û‚æ%SŠå3‘ù`<üsÎIÄ©3XÃ>"ʃ8e58D×2™m¡—8ž·‚—ù9t êē׵,þæ°ªò¿ÙYõ­ÔâuÝÅ3-ð%PÊÄvq:o3ƒ'©Ë¬Oû 7&}?m ;XšªÉü ŸðIl½ù;†(‡M|Ÿ­ôbºÔ >{˜DÊÇܤFvµ;¥)/8u}zn±"·þÖÁ6NÞhàCä0•‘œ¼â{?»’4]’~ÛÜ­=Ë•ìbqÚIW%ü1í´÷1‡­:mqÖ©öÝÉÖ”ç9?ajdVÊÓ\gÞ/­îcä[Ž<®¬%¿à†YVâýûŒ¸Ÿ$Ù*ûWZŸfAö' M»ˆ<®åþÄ0 ù‚k)æAryœÈ«I·T×d¦XÃ|Ÿ~<Û™¶ž±f¬‰´OUí."æ÷T0šÖü™ Æq)¥l"û2ðån׿YÑ ×œëHonUf0WÜÂF (ãÎ oÈ(F%[šßÅRÉUœC\ÍîäŽ1Õ/íÏrµèÃÓ4 Å ªy/8Ÿ2ލ,j1‡cÔã•Ø^–PÄø9ݸY ‘‘AO8“®Üšáë˜Ï9\Ï„0gúšg¹“jÖg{±Ê­Tñ]0‘§ý/3=zŽdþ–-|N|’Š¡<ÎÊü¹uyƒ"®ä5:МÎÌä>¾ $¤Z\Ï[Œe'xÔâÓÿ,¡£-e¼R€‹¨ËD>ç^™@µ®º¼H?Š9H‚Ky=üË $©äo߃ýK¬o«ÿùz&è/22ž3ùˆKYÆêQŸiäð.Uôcu–{ªua|ÊHÆðYCs˜ù VÁ»t Y Ï¡¤¹ ­«<ÂC¼Æi¼Ì5,¢sRÇŸË“Ï[ýtôÛ5¬U2”{‹|™í¢èÊýñ’GÔO¦6W¹ Ó@Œ*âL&V×ð{ޱ=’æ²ã8R°1ñâêmLÿìI%÷z4'QðT´­0åÉØMlçl·ßã•_9{•q7Û8‡ ¼OÝö7·y ÷Ç¡Dæ1áLNm¼0ëþGÓ#榛ήØÍ{m§!£#禼ºßóÔ¢" ï.Kù+QÐ,K\é+jâñvÑ]‹Yû¤Íw#çÆf)“WŽLXZekøÌÉ*üqªiƒX>û¹ƒk*÷ËåŸácót8`tìò8Á<›ð½È¢´bÅã/™øÚت}‡k"wÇ5…/xœk2 ´(ï¾D·S»¶Ð1Ö"¥e¤Kì Jy0a7ÛÓ¡QäÖX9O0šéÁRsû8Ëþ´_¿]»%)*ÜÀ¦¸æ³®ä‚Èç±Ò >?—)\ĉÈÀ¤¦)Æ®eRÀ)å°A í8…löóKZ18À—Ôãg ùYãÆpŒF C#½R^â‡\J²¹±lãÝ“lCkSÊLÒ™§2oEÏP·aOà<&Ó¸ÊwèIÇ–08ƒ¨ÍjöQŸþ̤’-¼T‘‹‚š.#šø…ª(£â;“:¬c.ÝYuR—/"7Ä„V2³ øÜÎà^@]²kqmúÝ.æ´`o8«p%UÛà0+àÕ@Á¿„8•Óyç?›]ý÷_ß6ÿ‹«7cx›Ž|ÄAjqg“ÏBúQI[Ò¦q=¹L§uYœ Šå–E*"‰Øé4&‹Åä1€BŠj«Ê6¢ÊpÇ‚÷~?7€9 ÊsŸ6¶Iâí`§1¹®‹ìJE†ê»Ò´Ý4¥] „É6>æy®ŠlŽ|J~¤vÂ0NK˜ñǶÄK*½ÒÓÔfîžwYuïa@o+kK«¡mNé¬kmÝÖêú–E†vú{º9œçÀp/Ŭ£3i»7yå…KÒV¹c+ ù”¦¼G ØÔ,v ÷ИuŒà@¼®O^RN= *lãÕ£LïÐ0²3®!žOQBšÇ´oS«ÖöZ[ÚT:Dn¤oB÷X›´&¾á™A´ä8»©kßL¯¾ÛáúqÛbñ!7ÎѮвOé}|u¼³¹ýÄ{=™mr¥ŽMui`q/Þøu|ÝÌ¥ò…•ŸùøÑp®ã&–ðƒÌïKðo¬e>ÙÆy|N—¶ ÂjîáÄöÆsQRulKl¹¶U¦þ=Yùöìã"mbŸ“oâ¢ä3¿‰kZC»Éeµ2ÑÑ3Ù¾·G~¥MûÙÁˆÈþÈ¡´cƒ“¢iªžØdêp;×pŒVäë4%yÕ9Ñ÷VßðYí•#+J?Š-ŠMIÂu$tɲ ZKÆÆ>åSúóÛišc¿b3)ë÷Ç……äDús*8‹<±9ö& r{™ÊR†ÆÖÅ57ÍOØÃ¥´¦œJÆ„$õÌ_;ƒÌ8H)£9Î0¶Òžƒ eC3ÆùÈ„„ݱö(ò'XLÛ¦|5o‘Í(J‰YÁi,g5Íé@‚«ƒMøKPÀÙ4euù‚&‘ÝiE´d9L ‚‚L2-id·ÝÙEmŠÇê“¥fš¸ŠÞô k(á::ó ŸP7¼ð¾Æ±‹!ð7‹öœ`)£O×fúx¿`û(ávæ†Ï R‘îq fédõ`qˆ[PŠþ5«o›ÿÅõ§ôWôKr0Ô1µ¸–gî Áëìãæâ~žãC©Lh¹.åMp7ÃhÍ›¡c>Ÿ¶œËslㆤ»ÒÇzsSl)³ ¯Ö"a{¥œ”2žv`ºƒ­ô®eÖ>JcS8ÈX¦²Ûb½©b[Ê´XNç#æòI’ËJ>±æ¸5¸Î6z2ïÑ2Ùé›em1µõ}[¯Íòç”;cÉ'—õYž¨6‘áôáßNÔ¦?P‹[ØÂöðÀØŠÍtæ6RÔãcs"á‘È”˜×(åryŸ±ŽáôâIîJ›Çvn¡-¯²$©y즴_dkÒȧ‡ïxÌõüôê´CÁ:3¥YÞ©ö)«9–ÖÈõ£í.à(¿¢~¬VÊß¹‚Ý\B>ÙÄÓÓæs®dÓ¼¦rãKFyð豆nÎD?üÐÕ_ÇE‹J/©N9›9•[)¤ƒh@#§'òsÆ%ässÚS¬‰Ž}Æëü˜­ÜP³Ý©•Á]fùcʃ<’°+eÅ,ä(k© ÆäêÓÆ¤Â4®¦Wle¼ÉF&ßou–ÛsåªÑ`ÛbÅ\ÇË,&‡4s.£qaÔe8o2–¶ü%Ù3ÔÚ `wcù÷€ö˜Éº,oT{”:\ÌWiËJfµ¹(¤×gZ¸T|Ê©†»|¦‡šø êŒE†ìw'/òØÇͼ^˜éãñðÇ9žiL1sKÄo˜ÍÒP3¡;hÍ‚ÐÍÖ0EÆØ'– Œ®LËaÙ7ï3ÇN®9é…«O*Ѿm~»þ««~`9f;¹œqŒä|fÓœ]ÜCçÈòHW%­â5¾ÛKzñIQ‹7²Ý”ö2Ãxƒ;˜Äq¦’;¶WU]7¯ÏZpYªê¸ìÝñ)ã¾ë©ÇMîÞàö…~ßϲMâÔZöÎÒèƒlÿ^maÚ8îã{|¦Ö<¨&ŸÕld~¬Wì(³¨¤—šÈÊnœÊo25Vdy‰Íi³)¤Klùtd¥4¦ˆbʹ‚‡™ÍåŒ&;$t$Bàá©Ý” cÆ_˜–(÷X\c7ÞHÇ8®_S‡ èÅgü‚÷ÊQ.ä³›ù|‡Íäǹ,£„,#É;!°0m)pнRsÎcdkÈœËf#µ9øI¥$¸€\r˜v’| ˜Mš£Œ 'ÙÆPÄ6ÊB@×L¢ÍÆzŠ9Î@ʸ0Ø¿2Ð᯹Œ:læ0œÅ|60†yâNP‡vÒˆûhÍf]ÆeÔæm’Gø®<Ø-¾­®¾]ÿ «)#™Ï~Þ¦yP´W¢×ªÙOí¤›#gTù3‡s /Ñ£Òë\Š­Bîä3¦ñ?«ò5½ƒù>á7”±Fú»«üVõò}ö Ó®ÚwVy5©wVF @P¸\E¾d<¿c{9pÐZ:q)=)`c#Ÿ'<˜òyµ·y”ó8³Ú$údÙ‘®ê]œÒÔ¥Wk?ÛsE,æë³í^WYdà ±ƒä0Š/®LËçmªiL§¿æûÈ}lg “HÄÄVR|çðænri—T[Ÿ¶?ŠêDŽÅ5Ï +ÙK=éJÓ‡h0Óíë¿ÑñDºwUñõìà'ìIk™tvʳÜoã³~8€môd6eÔãCžcOð$çöz†”ªÇ»Ì2³ƒP»›eÖéQö0“ó9—\eÊJcªk¼J+ØÎtþÈOiÁKx„iå줒Áà)fó@P¨fêž¼Œ| é¯Õòk^ % Eb>o‘éGaì8—ÓŒÍTq«XË¿ór¯±ƒ­ÙÇhÎâ Ž°$­Bã±ÇB2ýqq> žà|ÒŠåü€_Ñšã,gÏÐ(@]ð{Þg=·ñ7ä|.c5gò˰­Òäkþ@=.`7ëÈf%W1 ¡ˆÏè)ÑŠ0o~´¤'ë9Ĉà`ËÈÊŸàZA`6o™ÆòéÀVvV¦q׉¼ÁØÎöâ36r‚#´a`ˆC7ªB,ò÷CÍT'hRN ­=' ô‰ÿŠëÛêêÿå:å›ß§ æYêQÎqŠéNuäÔÈô”Åiõ8@V¹U) ™ÏÖ„žl(÷Ìèx0[8•fÜÍ*ΡgQÀ‹ŒQp–õ-q†îøÒ~m]+ZRHÇÃv²žô`› õ¹^È8Èl¹Ã|ëÈLZ‘CÄ^†³møóÈá<ò8Û×c;s ÷2…l†»üå|ä°”>iï3÷ØC#ÚÒ‰éÿ©‹iÃþ]–E+¾f=³34÷¤ÆŠ(á26Ò-R©Å4Τ!XÁ¸“eÔå8ÊÃÌ¢kÈÁjç;9ƒÙ'u´2Áð-ØÏv²ÃVz²œÏc¤8•D艆Öëq&Q›³8tã[З¡|ve_ÓÓÂH)Ó G’7ƒM¥YGyèéåÐŒ2ò( W~ˆý`(»ÃGü,¤ŠRÚ3=ü¨'‡¨b'Û¸…IÁX– ;û¹†R–„ºv7¥œ‰þWˆdüVjñn #Ù†œ“ɾb«CF9}ý±Ö4¤uÙASn °ÎFc¯Óƒ¦laù,f k™HW6rœk¹Ž´MÅkLž`Nû°{Ïc5#93CœÄ4–°ð s)%WM£é6R' Ø2 ¢­¬am8FOfq!»XÄrèÊ9ôd¹šøÁv¿¹vœûÛƒ‡©1¯ðÒà\ц¦ôb3¿ÎÕº¶*ìàÎÈùLç}Φ Íx"2,v=ÿ‘á¬ÇÖ0ƒ Ô#‹Y~›ö5 kn‰N,ŠI#š’âìZZ4¬0ŠØlžä@ÈdêFLm¾ ƒî[•t siÌ@ði™–!éuM(#òhì ïÅíÔg ;(a³©CŽS@Цü#¬gwó*ùlÑ'˜ú,î¤ÇhÆ—4g)×0š%Œd!‡Bèߊ“f«—ðv\ó\ŸÃ%Ô¡ˆetãÝiAsêD b=ØÀöE†“Í&VeìqÔe~CÀ 9Â'ثҕô¢ êœ$èLËp‡ú,¥}X Ê…tg§P͈@Ž(a9õIñ¥¬ Š™ü”,ös~ØGÛÙÎ)AÇ;ê¤÷ÉgGQ›NbéÈrùŠ:ô£ì›™cIÓ=TfeŒb[Àð Úwì&f\hè a9q¸Ô5¤èÏ:q4È÷}ó¬B£0èúö¸úö¸úßYJ“Œ€gÝØM =CdC&Ÿû~ne*—D>Lê;L.§3:© csø>}hFSnáº023Æ ‹ø¬•ÛJü”-TÙõ¥òÅãçäó4+©âlð¹t rZo`)õ³tŠ5b{p&õæb¦s#ÃCùéÔLÇ”Æ)iŽgrÐÙNS`g–¾™L öq*ÝiSÇö÷—YNc.¥-͘É?x‰fsƒÃìçkf‘âÚ”©UÊÓvRÁ(ÚsQ¶[Óþ”9c[x‰[]ÇÈ ó9HŠv|Äb%´fÓc=™N‡YÏ ±_¥ÌN×(¡3O ‹(g8“ø’ÕœP=YB¿Ø«Ð.¢/³'éGìÈvWÚi2Ô¥+ø#“c¢+_2˜×iÆEÌe72•ÛYÌj.a?ëÉâ*zr·ñWvÓ–,–1ˆ&LâþFûÙÃZbú…ÿ÷œ` yôàcÎæ )&—kƒKý`l{éÁ9ÜN+øBÊ)¤€~Ìçût#k˜ÂÞ4ÚÆXòéAWf²8t/ÿÉî+¥…äs½”q sC'`%2rú•é FЃel§’4 Ñ!3”¡¼’‘»p„ë˜Á)Œe&͘ÀgŒ`‡) i–Uìá %àNæ…ngõ7[(½»|Îá öñi¼HU8¿O›àô¼.µˆù ¤Âþ? ÿÿ·„Ø~{\ýÿ¶ÊØJ˜“¬ IDATv`š¶tScºº˜/Bç¡’«ù%/SÊ$ÄŽÒ—i|IJXÃXWæ‘EcFð#f;8“ìJú}¤ä¸_swR½È#±.Ù&¤½©ÅjÊ(IÈMØkË\—Ô.Ç.å<Þ¡EÚq&ó=’DmŽÆ­‹4Ë3þ•¬—v˜¸5^ú’½µø¤Ô)_0šmÉò³ØÅ\”P–ðRʤÈrŠÈβŸN±«Å•îŒlŠ5ä™ èÆpþÀp²œËYË|‡ŠLðnÚçiW±™;YÈ_I¥¥Éâm.d G®p¢ÂaÆq9ÍJ:òN¬o¢AïDÇ=q³OXêtÖÓ;RI’U)½¹~ÜDs:Ñ•²Ûh}®cµI¨3/QÂNVP@¾Ëjž-VÄpaZQ˜±ŸÎa> šç(¢¤¾÷ZÛ}´æIb j±;´.'qœÙJkÈŸÙÌp„Ît ÉSì ›¹œ-ÜÇJV²•;žô£HAl8_‡Â•ü•J1—£ÜÆV3ž•d³”Jn¢. 8…†|ŸOÉHÜ\. ¹Muy‡c”óÙÄ Iº4’ˆý’@ºêÉ™Ì;åys?[˜M*)§빜 QFc~N+°“âàÀÍϸw#ÙO~¬†f‰-Ì£*t×d{8]•oÃlFòK8Ÿ ¬¢9WÓ€R&pœÞÁ)<˜¥!ñ>¶áCmêÓ„Qìá'|Î`6‘E5¯’E¿ œ…­$¨`1 4ä›)guz\<]KAø¥rˆYö¯ ¯øö¸ú?´ZrÚIýëÇhÊ|:†Çð#D‘Ó"(`tè½L§'cÃ|þ5:²†©bV›),f$)ÈdrǶÇM~ÂŽ37Ö&msB^ä@ìbš1"Ö+¶•rZ±0öJìC8À¾K>7%4ˆÚÞÔàüb×nO_R\iû°†·>?óUêçÛ”¤ìÜÉE´¯3:m3i²êh^[—J‰ZžKyË«›2>²#Ò$m-©ËkŒ¥èÀÅ4åiŠèÈ©dÑœEl4Ô¦ ï3ˆ!.ù2zÔ•Ÿ60é’´WhÆëÄ,ä,dî?+þ³¢ŸUK7ñÕÛdÑ3é:žNz1íïLçd/y•Ýþ±?ì÷Õ0óŬ§]ÎM fP—!\ÈqJúÆvò ®dM¸£Í ‘’*ûŽz—¦4£‚óã8BÈE‘DÂÀ”ŸsVHbÜð@ì]–1…3èACšÐšƒ¤ ëèÎ~Á±Øú¸Æ·þ—ÇëKrŸqš7c-¯ÃPÞ }H!yy7ÿ >•¡vmiL>kBï×LèÛ;è’p"öV¬Ol|(S걘å,¦1Mé|bõ9—TÑŒ+xëB2ÈÙ4ç}n¥›©Ç¹ô£gf¹3­ËøE˜çQ—¶!¦MÒž“ÑrÖ¥xÌVÞe"lg&­ùœÚÄÁa¹–Ó¹€4ᡃéæs 2`F~AOnãB¦r€\N Ùc}C·ð‡¤˜Í>ºÔâË ÿYí=Ékœ¡ ûW»Ã~{\ý¸ŽŸtV äé¡ÓUΆ¾‘]‘âš[ÞE¼GDŽﲈ:¬æ1$Ò>ad,¨ÏÛèËÆÀÙìD #ØÎÊH³´õñUu¾(·ä³2GbõYνüƒ)cIÂW9úUhÈZ3‡&ó#•:ó£òf¯~ù†Ä³-ã÷öEËšUêVmй·ü¬Õ}ÙÁ',äZŽq¿¥¼Zy¥¤’µÆ¤~ùª‘y#?Lœd`±c?¥ Õ|þµwßaV•çÞÇ?{O¥0¥é *XQl6L”Ä–hŒFž“¾9¾)&±ÆcŒI4VìQñPA)Òa†iLÛëýcÏC†c4ÖDß<ß‹‹kÖÚk­gïÕç¾?΢˜WøkÙÊÙ!çøˆà°ð4ƒx‰ƒÓZ“¦(Øòž,Ï—²ª¥–õ¦7ZÍbÓsLJÜìøÙ™1ëuìbuQúGݬ*Õý~Ó~GK:&þÈâŒBÆ’G)CÉÐÀ‘ŒõÐ[þt‚²Z+2ƒé|‰ böÅl%E=éഴ.‰Bô^L§1h°ö£$°‘—cBbÝØ‡9 NÙÒ‰Š HØ=9&mp¢37òZð¸—vœÄKÔ2‡vŒ`._§<ø²W’O>s¿§=9LáÑ`_Û…Á¬ådZRÈv¾Ìˤy%°¦XÉ—x‰Fv#!ŸÃéÇz2Ô¦]˜R”hŶ°†ìC>EìMÿÏ݉éô ¹|›³&[,¡6m$]y˜FæÓ!Ò†Í4Ѓ©© #¬Õáe¨=-8œyl¤å¡¡=û³&$‹J†ç9Ÿ [˜ÌÌfžUÞ5Ÿf}8mºòóC¯æ,*)â6Ó“ìHÕ:&²„õAÈ8+î>›ÃÙZÌ&PôeÔ®*ïš €ý;ª.ÅDöOì=hUÈ@]B5lJ4&ÞÝëÙ$´Ã×ç8±Áv^â z°:qB°0^AKd6XÌï8‹^ÈÚe¼Ä~Nü‹Å‹ëJ. Iù,e+Ç1”ÿ¦&ãh®g̸ÿ—§·Þë2.aéýV溾Vi•e¨*õúxgWº£Žcə˾œJwÚgS2—¨>ÔÕÀÇæ.<ºÁ/Àˆ¬m £x†7XËX#7GnƆÄü ÑWžÙÈ‘æO†¼¬¬‹k[FQ»]5svÐO+áªDGfY“çè­:V¹"3y\’TÏö«ÁbZÓ›ÿa,ݸ†})æ8å÷x¢—›¨àiÚò6w±‘ÓCæqOV1–rºs[cSK[JXƃΊYœÊLrXΉ‰>¼F¿c5w&º'Vp85œÀ4òYÜ(E_ðS( [HHûs™ÌšÂtç!o¥c0f¼•4—ò2ð«Ö¬C);ÀÙŠ„žT²ŒûLV‘Ong wùlrÁÝL`ÅY«ŽF R3˜g91<Ò,_`³¨åg{1‹«‚,}ViéY^KšF"»©×xžs¹7¤&>ÁþLg6µ½—iËK”qjhwn³+4+å¾óõeGñvpËÆ‰ÉARvódX<˜§¸«Îj“¡ ÷†,Ä1 âUö¢‚·¨å n¡+ï°Ž6A“þþ°W³_uçÛÂ6ÃÆH1\}‚¤XÆ`ÚPðð>‘-¨üU42– þœ(o´4å¡-|Ÿ³x¹‰^´cÏ\À³|…Žäj.ä~êë·;ªÂÏ÷¬ò&·µwZ­%Õî 5ý¸Ÿ¯%†ïPAš½hE9Ñëùo7{lºÓÛ»bºã/h\ñç ×±˜ŸK•Ú½ƒ!—r gómŽåøPÎuiò8,Óð„ß\ã ­›ÞXýc~Ë†Ž +\Uk1…7BiÔ”§˜ñ6µœÊSÍîÔRÊ üÿ6ä7q1w¥ý<%§ÑUì o( ÚƒtÆ­œdnÚ•U ÷âºq„7°‡ià b2 ã—´!¿©šíë_tÑ.9…ý‚•åÍTb¬ Ý©ãb¶ó%Nf«i‘RœxŽQ´æU^âB–p0¯æ88c#Õ“›çÀz7Óƒ£ù9o5³Dz'µ¼0øÿ+ª8”39“‡9‰z~Å:Þ¡ˆçy›x„ ÷p*·³–cy’ßrvfÿ?ìÆ¨²6×±(ÃÈçZ¶…’êÙÁA#›ñ$iZS›çºzÓ/2“ZÊÈ¡ý¸‚ÿd‡2Žñ6_&«ß}öå |B†%.b%·RÇkl#C#o…jÂïp#ó8€bð U¼^æ†ò#¦3 ¹!´o–-‰ëȧžÎHŠF^$EŠûø ù¨OPÁZö§Çs9¥<È!, O‡SYK‹p¦Õs2ðMÖÓ†ÚàópI³ø„“˜†¾qÛØo¬;‰Ÿ ýÉö •‡’Æ>\Äl*ÌXÅCÌa(—RÎöŒu¼BWMÂEÏщ®Ò#Œ®•ßQy¶ÖäW´æÌ§5“ÒíZ¤YŸ\wŠ›îsÓt~²Ãòzíy“²žîÌxŽar_¤’[ɧHã4[j½¸ÞMܼ¬`áÖ¶›÷«Ò•uþƒkî6å ¶r%›C:ÖRävç<:±"·á”Ì–_Ø2Wý ¬äNW»ºÑÙÉ¢+œM>޹·p>óx‘r6ðKª8qü”cx‡ýÂ}dqb^âµvo08eiÊݹ®Î¸‡JÛÿÇ–“mIlù“-Å«™Ã3Làf~ËEÜÎtúæ9+c&øýò3§4î9=õP²šï0SÓ`áéÜH[&‘¢2å@ÚåÆŸ}hÁ¯éÓÕ…•*rMÎxÉ”±Œ"J”ñ ^ G{gü”ò”á<Çb:“G[vãh^Ðä$¹„„kÎp ž5s˜B1ñ2Çð‹ù.»³‰Œgk9‚Í´ÉÕ/eabcÊÕ¹dÔQÌö¥Ïðæ0žÜÃY´á÷L úû0ˆÅ­C_eYJ7ÖÍ“øSðXÙBÿl¹q¨ú:›ù+ƒC?ðé äqêiäŠ80\we+õ¼ÞÛ¶†t§zpmYËïYÁ;œÎQa¨,?ôÞÐ*ʨ¦”©Ì‚³EutáiNáw…2ÊEÌ ð cBIÀtÒ2Dô8!h$>Rëh ƒgõá=/W“sô<ª8‡¹Ô1WÜGâØÕ§Ç–`4¼Sù;€  =ËÀëta×™ºr+¿a‡9e‹çµÕÔMºæº1šêl¯Trd}rÜÕîî¥Å[^Øz#;’Ë$~Ãʸ$maâe¦LÌæ*:1€4‡3’ôóÈyß»¥±bcîššF'jUé¤uîÚ“ete ?¢šŽ|™™ a8*£%sƒÃétŽ *Ñ–:zÒ‡£¹…ô§?[éCŠ|…ר3¥>åa^ µ\ ¤}ØÁ:ŽáU*éÃ>9.ÍX”i°É¦V×SžrPÊü·²†w˜EŸP‹=*í˜Æ&U§ÅΘTżä骔‰‡¨fýYÊp–s0»ñ4דŸã«‰WÛ˜ÐhIÆcTdc…?òõŒŒ¥#­AVùi }F7Îg(ƒS†§ä&M:g²iÆòGŽb4­9‚7XÍ 2¤øA’g:/‡0¶„­a`u,_ ÃSô¡3…ÜϾ-µKëÛ`12~L†A¼Ì}¬çúq_PQšz«)e>£ƒ½äò 8œÏZÎÈqQâòÃÏHú“â2þÂniUŒ¾ÀóhÁ@úñ»Ð'Ö‹>ñ2äQÎøw íìKÏ ˜¯©û´}ðÜZ\©^¡”5 î”_cr#³e¿i‡Ó“0N|‡Ù‰'iÁé,Ö”¸¿>i=XÉCœÁ£lÖ¤;U™-dN©ILJé¶(±š73ªš¸!¾”§}ƒóù/ÊÙDêÎMÜÅ’Z ™¦ ã Œd›¦×åbÆÑÀZÚñ0¥ô¤€C ¹•›’¦Šã1´b¿Ð;——ÛÀZ1ˆ±Ìf,]XL¿ºò]:3‹SèÈâà[ý³‚ml`5Ï3Šïò6[Ø‹ôâq&2-T3…(e=³ÙA`„}0CèÀ¬ pø0ý¨§³ØJ1Oñ2ëYG››=„e‰VRÊH†2–ƒäÝó¡Øël*ƒüÒŒPã‘â ‰ëÀî¼Áò`Ýû,G²Ší”1‚­¬%aé]£E9_ }ïÇÑÀ:á>*XLU8”)¶7Ó.ÊúÂìÆRœ:%MÅÔhÏ^â°¬K}FuÆ>¬aoFUÃŽ ¤3’MndûÑ›y$¬`s(_û"÷ÿ½{Åll–­^õoèÃÕ¿Ša äU¦7{¸ú=¤_b*¹Œ£” l`mSÊlò'˯TZÆ÷Ù‡g8€7ó\­èI]†•o¶|«º8˜> e¡’BÒLα[Ư˜ÈÎsC£z:pw'N¯uy¢=ߤMž³Ì*rå†ä›§Ö–Õ$¶2CøNbZboñ·ð8Kƒšø. ²f'r/ç:%ñ-æñær2{²–™¡gæÕðd½Š©‰ù$lÈ1%qµ& ®5M>ƒÏ'æs<«Bùˆ1ƒ£Ârþ'1œŸ„ìäWó—1o±†a‰R©Ifð&îäMòø!÷sÃÙ^£OböäÿÒ›9tNL§†½YËí¼@~ÈÚxëÍX~C55Lc}©ä›¼Êkì˽tb1'rs9*䡵ã[<Åy,æ6óWÑ6kO•ç7Ñž îàdrXÄÒLá6V³žÎå)æ°'§Ó—?s>Ky%H5® š³XCŠ·ù&¯±#HH8–Æ ‡t=x‡Ûhà`æsb¨YÞƒ»Èe$³Ée<^AV±è0_Fi(r˜Äg³rb)Vs0%üƒPÖ«Àl6†‘¡·Ù‹–¡OµMˆXùA oùLæyÚqS³¦ÍÃV:’0“eœ“ñRFc8”—ÂKϱLç[40‡Ù,ä ¡*túm¿.Ÿ³x• 5¥eù*ëù"sC™y&ƪ®þù”°šzj)¤8èµLá%–U·F6ñLŽŸPG¥4p ³¨g5«ø#“˜ÅÑí jüÙÔÆÇW¤ŽO+KÜF‡„ã7CNWVÀtcÆ7µ›hÌ£zÏÓ{Hf·bë–qtcLÒ4ê3„eßg«ÚŽ쮬*ñåÙÛn®É²P“´ÒO©dd6™sxƒ¸1×…äeÔs-YÅÖ™ÄtNбóRM#Þ½(᫼Â䌹¬eƒù•ü!å\Σ{Ë;“߬c‚å Ž¥ϰ‘ê\W6˜’2†–ŒáZ"ÃE<Æ|zsgÓÈ:†d{;SSÞdm˜É¥, ²x%|—Ö1ƒk¹ ŒÀ½ÌLÚ¦¤iÇø Ö˜ãÊjZ³†\ÊkœÍF+TÝ`|ÞxŽFjéȰ”³ø*åÄêŒËÆÃÔRÂ6® uëmÃ[Tq"÷†÷w(§˜N¬c[‚P†‘â#ïpqÈš[ÄR¾ÀBZ1Ž9™;ù+oñUöÏudÆ4e+Ïó<r4÷Ë—ù (¦ ²–j®c ËéÁ Ìá0vçizq* Ì£œ5,OY“j?\Á¸àfr ³XÇnçV^ WâÆÑWH˜NmXÄ<†sV³ŒÁlžKorXÒ"öcSéAw.ãa³œBz±•Ö¬cS³;@õt£ª™‹Õ‰,&öT…Ç»±¡Ê­ç°…Œá*†«O—"ú„:ù×éÀ~lg`ðuÜ-QE{Z¦$)½ùk¨ÃϧoòS8©æ¨…UÓÓ3þ+“¹°@}ZËF©¥yü–ëideÌmë€Úž-5Ó*C^Õ­Æ‹XÅ7¸œG©c" ¬=6å<ÎþÌ P`TØÅÌçÐ`:·ƒÞôe,•,i-·¶)T'|!üŒA¬J¼Ìqœ¼í«ÈÍqZb.ƒÓÚ$n¢óIÑ›Ãy‹i¶1QÊLªØ#Ôr. ªPTÊ6næÀl±mÆs)G§žx”ß²™\êØ—A¼Àa¡3s>]¹›‡¨ GŽŸ'Þ¦+C¹eìϾÃF–1‚cYF‡`L¾Rz¤Jl :Hý>ÃLº“ÃƲˆÉ …ÛmŠœQãMrx–%,äH2¬Ê1*ñQÅál`%Œ¡†áu¹Ž¯†~¼ ëXD‡Qœ 7rÕŒb%#˜Ï:s•ìÎHnæIý™E^(k-L;*iòxœÀ®ÏèÆ d0»Ñ–a\K%irXÅžœA•ìÍ1,¢E(ZjRrb³YÍh~Ïjöd+ÿIcÚ^”1Œ¯³œ§ÂØçοìë×bzQÈ+š2n2¡¿Ž’0\4šûƒÆÑTò}–³˜mi“‹‚3x>çq?)6°•m¼Ãr²ãy¶ÙUß…Žô -î ‡›(¢;EŒb.ÓÁF…‘H Wÿ2jB¬B!û°€}Ée%…ä‡!ôÒ”#ØÔY²f¯GÑ›ù”ÐÚź,Ì]’e5بkt uÈtf°…¹¬fò ت¬KÍ]”±4Øç0”°Gðå´É[¤dÏRGþÊ©´¥–– áæ0:_Rï6ö †ç™ÁH*CÍãN£ #xŠŠD«¬ÛBʱ‰Çy‹¾œ•£e¢¿dkJn¢Gâ[Ávûñr‚zw“Ã><‘rBŽ’¦,Þ”$ö sÈË¥Ï1‡ò?MšÒöÎÑØL›ìóo¢ˆgYÏ)´gÇPzÏ£šüœ“ø=hàÞJtfy¼•ãúÄÆ A;‹ýCŠs7^¤ »ÿk¼H=s) „ ËèMqâ~–Ó– ©í{„ÄëÙÆÙ”iŒ¾š|â³iè»…q©ÝøeÔ9ʬ—|v·”†LÂÕÌädöbOÚñ6•¡ã®*e\â&Žc/s¬¬°z+òh [ŽTPáÖ°9Ç1‰¼ÍfÓƒ=©#ÍNcëØ—gBçØš P´obϲ’SÉe-µ¡ƒac)ã)ŠËh¶rm˜Òöv2ÕŒ"¡+ƒzá¤\–4ÉjdO¼ Z³-èlu>™íxœÕ”6Ûr+öfoæQVÂR¶³ÌoVzÕ‘Ùͪ†#ÿ;\¥ÆO¾`ì'l,-ë™[zÐèÁq}ÊäÒ…ut ¡Í) =ÙÍÔÓ–^Ôó6ù´Ìzÿ¤%yº×6éÁ÷d=(Ûµ®°'å)óµ®UM m)$VáòËe5¹Ò:ôidB~ZVrkÃWmOìÕ14<†w¤:¤–Ïï¾Ô4Ë}EEè ÚNWÖÒ1¨Òe-{¦µLT'4û-«iCn]x;8Òf3ÄV†D€í)=Rr26…ÒuÁ¢þí =‘ý_J^ʈŒJ(Hë”±”BÊèI~¸G·'à :iêå[t³;§3«iOq(îé6¤ìHÙ+cU¸åeO€*2´¥”ì+ֆ߸ó8fãú 3¤Ù™Ó*TVUPN€B¶Ð#H¦îÜ«;é¬mšåž³ƒºRKšMA]7Ûùù¿ëvžr‚¶Åßö*hIË”"J’]3ÜÒöÉXNò-a#›)'¡T†­­ßUõ5[º·• ¤éOÖd äÞã²Ú-œÒÙ‘³µ´eõ®?d5íÈ„ßØ*œÙO·¾ëp¤é òv^ïQ#UL÷¬s[¸WýJÿ}d Ó­;_ÿÀŒšªíï,˜±K¸ºäÜ)EEEqE"‘Hä³À¼%kv†«tÜ‘H$ù\tLý›o¾9I’¸S"‘H$ò/§¨¨hÌ¡Gÿýpõ³Ÿý¬¬¬,(<îü—þsÞ=3ýVùhk}"ßçnê#ô§úµS’´$Õì_Z&µËœLê]˼{±¶VJæ#-“Iñ‘¾@æ#ýØ¿ûþñ~ûhk½{™ÙÙ÷A6õé]4ù§}Jw‘÷_æmñŸ¹—?ùϹë~ò7½Ö­Û¼çÛU3²ë¤Ãšé÷žüø |âüwhqçµé_öú^“ÿ„b‹»N&iÍ®¾xq|f[L}"Ç)îÖO«ÅyKþ&OÇ®"‘H$ò9 †«H$‰Äp‰D"‘H W‘H$‰á*‰D"‘®"‘H$‰á*‰D"1\E"‘H$ÃU$‰D"1\E"‘H$†«H$‰Db¸ŠD"‘H W‘H$‰Äp‰D"‘ÈG$÷½?JHÈdí*È„™éw}š¤vÕÿ“ï³ÌÇßø'8ù‘·ð‰|“ôÎýŸÈ$’ŒLZ’ÈddH™ô»>MËdþæpÑd>ò¾“; JL€ \0IDAT>ìdÖ ª©Ñ÷™l6ócM~B_ûƒþ¨÷ø&IêoÿcŠ„T8V;/—Ì®WXj×O?Õ³ï3u…ýs¶ÿþK¦w‰Oð8}Þwܧô£>Êòòòš¿Sí®Æ_SSóÙ‹©™øXñ'iöDóè-ȉGäý®¤Æ¸#>u¦M›6nܸz15þëZß…ÚÚÚyóæ;öC­õÚk¯5ª  à.9kÖ¬¡C‡¶lÙò½èÒ¥Ëÿù£¿®n½õÖ¢¢¢xªE"‘ÈÇaøðáS§Ný¼·^RRrÚi§}ØM~øáwß}wçÎÿá’Çü¯ýë>}ú¼Ï2ó–¬ÙùwNŸ¡ûvï7¸²º¦(]=vôž………ñT‹D"‘CïÞ½û÷ïÿyo=''§W¯^}ûöýPkuëÖ­ÿþ¹¹¹ÿpÉ®]»î±Çùùùï³ÌƲí3ßZÛP_[¾imn<±"‘Hä“eâĉÿ´^XXxØa‡}ص>ø*¶Ç2fF"‘Häs@ W‘H$‰á*‰D"‘®"‘Häß“‹.º¨ùä¤I“&Mšô׿þ5;¹téÒìœ dçL:5;gÇŽ³é_þò—“&MjþÎ;ï¼I“&Ýpà ÙÉmÛ¶eÛzæ™g²sfΜ™³jÕªæ›ú‡+6'¦ZD"‘Èç‰+®¸âþûﯩ©¹öÚk³s&Nœxýõ×ãŽ;îhß¾ý~ûíw饗f?ýö·¿}óÍ7/Y²dÚ´i×\sM6°=ù䓹õ[o½µ¸¸øšk®Y¹rå%—\òë_ÿúÜsÏ=ãŒ3vß}÷'žxâÎ;ï<óÌ3'Ož|ÓM7ášk®éÔ©Sqqñµ×^›mýœsÎyöÙgwFÜ3Ï<³K—.ïµâÈ‘#c¸ŠD"‘Ïq¸ºâŠ+†¾sΚ5k²éæI’TUU%I²yóæìœòòòÆÆÆššš†††ìœuëÖ}œÖ¿öµ¯eÿX°`A›6m°iÓ¦®]»öéÓ§  `Û¶mX¿~}¶­ÚÚÚÚÚÚ†††ŠŠŠìœM›6íÜÔµ×^›ÉdfÏž]__ߢE‹w¯ø¿šŽ‘H$ùp<ðÀóæÍ»òÊ+?ævêëëo¹å–’’’aÆýÃ…c¸ŠD"‘ȇàøÃòåËüãüMÜvÛm}ûöÝÙCÃU$‰D>î¹çžòòòóÏ?ÿãoêòË/߸qã_>Ž]E"‘Èç›:””” •J¤R©6mÚdç´lÙ2Nççççäädç´oßþã´õÎ;ïWWWWWW¶mÛ¶¨¨¨¼¼¼¤¤¤¡¡!;Õ®]»l[¹¹¹¹¹¹999………Ù9m۶ݹ©U«Vmذ!N¿×Š1\E"‘Èçž1cÆìü{Ú´iYé£sÎ9稣ŽÂµ×^û¥/} ¿øÅ/:vìxÐA•––fç<ýôÓ§ÝÞ½{ß~ûí÷Þ{/Æÿƒüà®»îš2eʆ &NœxÙe—aêÔ©'t.»ì²Ñ£Gãâ‹/ζ~÷ÝwïÜÔY±9©ñ“/{Ä KËzæ–^rȉD"‘Ï󖬹þ5UÛßY0#Ž]E"‘Häs@ W‘H$‰á*‰D"‘O‚¦T‹T:§:“¿pÅÆ–-·Ç‰D"‘Ï+ÖoI¥sv W¹yùeõîxr~Ü;‘H$ùŒJçäæåÿ-\Õ×íØ¾eSÜ/‘H$ù ÒP»©i3æü×/n­««‹{$‰D"ŸM~ú½oü?ÏI‰ÔÝtaoIEND®B`‚saods9/ds9/doc/user/scripts/contourdss.png000644 000765 000000 00001316104 11332353406 021214 0ustar00joyewheel000000 000000 ‰PNG  IHDR:rB!ý–bKGDÿÿÿ ½§“ pHYs  šœtIMEÚ3YÛÕ IDATxÚìwX××Ç¿3ÛwiKl(jÁ£‰½Ä‚%JˆÑŸ‚‰IlQ“H"Æ®ÑXb,I4±‹‰F‰]l *Ez‘º´]¶ïûÇ0ã¨`ò&ÆÌçññYfnŸ;÷Ì9÷Ü{ F{ðÄï[÷ÇËGØØÁ#ÞîÅ?xâ÷Øk)]ßƵÇKÈ¡ßã =Ñ{ÔôÀ¾CÊ*ª¹áààààx ©(+ÉH¼Â`0Ô*×"ÿeÔ5ÕÚåsƒñ"©™AƒN­¬2èuÏO¤Hj&IhÔJªºY%2 ’äQ z”¸ÒkÔµâJ§Vj “›É% ·Š'±s'‚Š^£"Ê3K+ªì}:sO—ƒƒƒãÕ@§ÓêjªÝÝ\Ÿ²¨¨¨²¼T$–¨UJK3‰•ƒí³ÃëuºÜüÔ&“FUÕÂÝí¹Y—TU”Š$f”ø1 µâ Lt ¾H k—æ.Òv­|®^¿™TR$²°-±LÔ Ð5–ͼMÜãåàààxUЪUînà¹!]\\¦§"‰ˆoooÿÜðB¡°™£Ca‰Âh4¸»¹ …ÂçFqvvÊÈÈ€ÉdbéK|@$­¶'³IÈÈQUWZ™K%yÙš‘PfM +¨JŒê2µÈN`fõ8Ê+„€Oúº9ŠE‚ä¬Â*¥šëÁÿH¢–Æ&‚ HO2É7% I%˜híŠ Hò±ì!I‘μكìQß «*Îà ı™¶ªTXSTm ä|~ÃâQ,ä·ñrnálKD¥R”žŸóHa4™øº9´÷mÎçñ~9w»ºFC…w²³lçÓÜB&Öêôù¥ iyƒÑËÅ®cK·{é‰óL¯' ßèì'7<*¬RšË)Gz8Ù¶òh& r‹Ê¯'ejtz®—spp¼ $JB4*0AjÃóHòí®­ê‡º“š—]XV+ÞH’0™:‹×ܽ›Û¹ž¬Òh©À­[˜Ëħ¯ÞgeAÒ² Å€'Å@bf²õÌJ¹À7¨ &Â@ ¥üʬ*NÔÌG –>­ ]Úx êÖ–€±¼²ÚÂ\¦S«r ŠAð%"AÇ–noviIĽԌø”’Ç÷jn7¦oÇf¶åUR‰¸[{ïS—c¯>pv¿ÑÙ¯¼¬ô–VÍJþÞF„ѠתkL&Sfqu´ž4(P«Õ”**^oÕÎÊLtìâ]€äú9Ç¿_ZQšO£4–vEàóx]ý=뻟œ¢Óh„b A§: ·f6]ý=l-·¾ Kk÷¾ýt:ÝÞŸOÛ9»QY€úGç³®[D‘™Ü̽£âþ9ô5ù)&U©OðÛŠd–µŠY=„¾‡‹ÜB:ë«¥•*¡P¨Ñ¨ |™Xfiomáãê˜_Xb+·ìàsåîC +›·[µp²Ù}ä||’›K³ˆ ƒ·½žB€ ×k­dÂ¥IÉ*4M®ŽÖ¿]{Àç‘ÝÚ{)ªw¿RVYóš»ÃànmäæRHJ/8yé^i…ÒÓÅ6äÍŽ<™ý¨Ì½™Mz^ÉŽc—ͤ⠶ž]Z»IÅ‚ä¬âãï){§ØZɵökᘞW"“7y`W_7;“ Êšè“×üZ4³µ”}àÜÅÛ©+æ„v|­ù•;É%ÕÆFê¶/¯¸"HÊdׄÀ¦ÚðI¤gå-Y¿›m‘êÜA«®1 µ² ÒDÒYœ¿•fc)kåÑì½Á]“Ò ÞêÚR«Õ.øf“^W;¢,íŠúŸOi JT©•ƒÊÆMU˜f$MB«ºØËŸQƒÁXXZ¥ÖèÂßú° <-§89ëQEU ä5w°v±·Üy0¶s;?7';wG9)’ÙÉÍõzýo—oK¬ŠU¼¬Gåö6VîŽV:mí¤I2±«ƒåÍ{=œä£û¶OLÎÎTâÿš»¿»ÍÙ[Y&’R3s }Ýß ¨ªª:ŸÒ¯£•ìôñ®NÎöVYÙ5Ue}:uÖ³íÕÛ÷3ó GöïFƽ§âÕz@¼`ÏàvžoÜ-¯T¶÷í˜[P ÀËÅ.¸Çõ„”Ä”L[kKEq~¥£œ ?/7žÄÂÊÒ¼FU#—‰ ‘øi"œƒƒƒã_#®m ¬‹¢Á3Híݼ˜0f6ÍÊ IjŠ H‚xl ÔŒÎÜ´õròt±Í/,Yýý¾JÑÅÓ)I¨•M[»j`´Õ×TêUeF¾ÄLÌã‘ µU†/?­&àòÝÌêêÊŽrÏf¶ÝÚy]ILÿù\‚‰àµñrª¬V>Ì._¶é‘$a2áÉ,2 ÊÚz9ÈÉ/„@âäáÎÜ%H$IÛ–«êKT½V]™}ÇÒÚ£®8½¢¢Ìˆªª|KK·6<žà)ŸÏ¿œ”ýGü=/WÇ1ouõt²&ôJ™•]«ŽLCûvKe"¡ÀÛÕñfrNµJídcÞÚÇ=¯Ò$·”:ÙZšLÆìü¢nÍÙɪjÔ&žÐHðõzCUÆÎÜ I’ðÐÕ¿E7¤”ŒÊªjJ3&“‰ HD&–š3š© 0±PTSsþÚmEyUYY©ž ù|F‚äIdr<@àQiå®c—l¤¤»Sp‡@>ŸöVÖáó ROÂ8=äm(*-7D£}]8888^RqEA’d£ç®H‚4Õºé1OF¯µã‘$IÙMÄYtnéúF'ŸÂ’²û©™=ä¶ö?ž½Ãø¯ ºZ êˆ+“ÑPS˜¢W)äžf6NJ‘¬:ãš:¢:_[n+µskÐöÅã=¼^s³Ë+RH„ÂfvòûiYU•m[šID…% ™D “AQQíâhcm!½t'ÕÃÙö!2 Êì¬-<œm®Ý¾Ÿš•ïíõä”ÉD<’.4Aò¨Ì|ÒÑÆBÈ'Ó2ólíl¨Zå••U(½Ý§éïìdoi& ÖèÓsK^÷s …Ujƒµ¥™µˆ<" $A5Z]~qE{o§=;© üN69ù…œí­Úú¸ææjôòùbd|ãàÞ¯WTU»ØY:;Øœ<-¯Xa&w¤3×Ý988þåÆÀÚ¡,°µ[kºS?UJÍþ3·Ÿ% ©ðµÿã‰y¥ZICK‚ IÒDEÐ鵿}:x0-]¿ÛÄÛ:8µöpÛ·ý®“7XÚ-®˜¹«ºÊɨ¯È“ÊÍý-ÜX8¶0uö(–IDU:EÒ‚of]_b™LDZn‰…®öÖ<’¼vûþ¡ÓË•º×\íï¦fÆ>›œõˆÇãwmÿZÈÀîÖf¢ ·S‹JÊÞìÒÊÍÁRY£Þ{ä̑߮ðD2‰WTZQ­¬1…e•ÕJ“ÉT©Ò•–ëtzÎP¢¨ª¨RV«4q7SÍ„¼î¯·‰¿—™SPR^Y]¥Tï9qõÞmí­òóÙYJuzƒÁh¼z/K«­éÒÚ½÷ë­JË«/ÜHªVª„fÖ$Iê ¦ wÒù„¡•—[f~ñ¤‡$Œ:½½¥™·‹ \¸‘tôì3¹™Dàçê¦ÑêbŽœ9ræªÐLÎŠêø»spppü;ÅU­qO(à I“Éh|b„×*sÒ’š{·¦e #Á˜üärù¢é£ÙâŠ$‰û ‚‚ (y“ÉÄØ^•RµxõV¥Žpñö8—d¤2 Hb.·7tUeE½ŽÇã‰e–3K¾PÜHõ™ƒƒƒã¥EUYÞÂÝ…ÙÕ¢(']­ªªFbfiçìàáÃt¾ÄœgÔ¹¸8Q·´jÕ£¬ÔúÉ:ºy ÅÒªªêÂ…Ñ`pkÞL$Q·Šó2ÕªªæÞm˜ÀyiI‘ľ¹€ŒŒL¾Ä‚WÊʲ¬»Wkµ+fv˨×ê+ µzˆí½H¾€­Ö-Ü •–bR­¦â‘ÄÞ³Aƒ¦™ÜNj!gÜ7’GòxÖŽnA’</ÀˆÌ¬lIÏòBƒ…ž ðx‚$eV¶2KjI³‹'Éã“<žM37*5¡P,’™“<>Ç7³²“šË ‚4Á“‘ x-=œÚ{u0 2ñíû/ÝLŠ-¨=y¡Ñh¤œÿAGugt”J%×Fÿ8¿þúkjj`×€¸2™L:Žk#ŽœÜÜ\¶#;·fˆƒƒƒƒã_'®888888qÅÁÁÁÁÁÁ‰+N\qppppp¼,4vk¢›7oVVV²¯Èd277·{÷îµnÝÚÖÖöŲ7 üñó§@  bþŒ‹‹“Ëå:upýúõ-Z¸¹¹52ý{÷îõìÙ“ú311±´´@³fÍ|}}ÿ?”Ê‘ùóÏ4Î såʵZÍüÙµkW¥RyçÎ__ßfÍš½Xšõ;ÓªÿßdeeeddP¿ííí[¶lùÜ(jµúÊ•+®®®&k¥Ryýúuêw—.]Äâ'ŽÒV(²UëpýúuöJ’ú96¦“ÿy ’““ýýýe2Ù¥K—\\\¼¼¼nÞ¼©Õj»téÂîäÌã`w9¹\þb962bbb¢B¡èÞ½{#[5€pü¿Â~ŽÏx;Î;×ȹ¼­^wñô«VÕ¼î×ÜÑÆB£Ñ4nâĉ۶m333K§Q( …bܸqÞÞÞ/V=µZýúë¯'$$Æôôô‚‚‚nݺ±ÇÙœœOOÏ_ýµ}ûöo¾ù¦]```#ÓŸ7oÞçŸ>wî\êÏ>úè›o¾±²²~~~ÿŒÊÑÆÆ†j%ooï¿_\ 8ð—_~‰DééékÖ¬!ÂÅÅåàÁƒÎÎÎNNN/–æáÇoݺEUjóæÍß}÷Óªÿ¯dffΞ=ûúõëåååñññ;wîlÛ¶ísk‘——׫W/33³=zü™Ü¿þúë7X¿~½R© ®3:ÔÇÇÇßßÿ/©ì¨Q£öîÝ+•JÓÓÓ̱AΞ={ùòå>}úüUmþóÏ?Oš4©wïÞæææÁÁÁ<ï7Þ˜8qâ?ü0uêÔ7nDDD%%%QãöíÛS§N‹Åééé»wïNKKëÞ½;sÅs),,œ?þ_|QUUÕȈ}ôÑÊ•+?þøãƤðàÁÜÜÜÎ;sâäÿ¦ç¸¹¹=ãíhß¾}EEÅàÁƒŸ›`BBBž¨0Êô:Myan6~•Ëå_ý5õ{É’%ÕÕÕÌ-­V;kÖ,êwDD„O“*Ù©S'&eJöþôÓOŸ|ò õ§F£©¨¨0 QQQŽ=Ú·oß6mÚ4&åI“&]¾|yÉ’%óçÏ?zôhbbâ¼yó>|XSSàÛo¿MNNЫW¯#F¬\¹²ªªê‹/¾ˆ=zôèüùó©š4¨_¿~M樛7oþþûïÃÃÃW¬X1räÈÄÄÄ:9Ž;vÉ’%&Ož›ŸŸß±cÇI“&øâ‹/JJJŒ9²©ßÎÍ›7§Êp÷îÝuëÖ½ùæ›Z­–ªãˆ#6oÞ øüóÏ?~\$EGGWWWSÅž7oÞ¦M›æÎ+‘4v_¸œœœÂÂÂõëׯ[·®ºº:''gݺu!!!—/_¦ÞG;wîŒÀ¼Ô§ õZ1€y­(u¼_¿~ƒ bFª£GÆÆÆhÑ¢E#EÇ_B·ƒý8¨nܵk×ç¦ó‚sWÇ?~ü8óç»ï¾{óæÍÐÐКššñãÇ———¿pÅnݺîèèøå—_Ræ…¤¤¤˜˜˜òòò¡C‡èСƒ««k#S ¶²²¢ŠzûöíÜÜÜ~ýúÅÄÄ\½zuÆ Ë—/>|xûöíçÏŸâĉS§NýòË/ìËËËcbb’’’^¸:çÏŸß¹sç˜1cbbbÂÃÃëç*‹ÃÂÂÚµk׫W¯Å‹ïÝ»wÁ‚;wî utt ¿uëÖŸé.=Љ‰IKK;uêÔÆ·lÙBåÈÙÉ¥K—fÍš5nܸ3fŒ9²   444##c̘1÷ïߟ6mš••UhhèÁƒ?ùä“L›6ÍÓÓóí·ßŽŠŠŠ ½téRXXXãsìÚµë{ï½÷ÕW_õéÓ§E‹gΜ ©ß8ãÇ¿wï^hh¨B¡3f c˜úúë¯×¯_êîî>kÖ¬K—.5©“[YYQúMÏž=‡ 2fÌ…BzïÞ½ñãÇ3!g̘Ë<ÇŒŒŒ˜˜˜Å‹Ïž=;&&†ýa×Tê·ê¡C‡-Z8~üø˜˜˜Û·o_¸p!&&&###,,L,‡††ÆÆÆÎ˜1#---&&füøñË—/ß°aC#30`ÀðáÃë_ߺuknnîíÛ·©×ÊÊÊjܸq­[·ŽŒŒ”Ëå}úôY¹råôéÓÏœ9Óxc Z­ž1c†——׸qãè¾Jõœ;w.X°`ïÞ½‹/îÕ«óvPqKJJbbbdk·iÕÊÊÊŒŒ µZÍ´jDDÄàÁƒu:]zzú¨Q£Î;×®]; êí Â¬X±bÑ¢E.\èÝ»wppðâÅ‹U*•½½}DDD¿~ýΜ9ÃXƒµZ­D"Y±b…ÑhŒ‹‹{—š£‘DDD1-LuE¹\.‹ë9›6mòõõ---eOù?&œœ.^¼Hý¦4ô:ýÂ… ©O3ælãF2xðàµk×R¿ãââ¨B¡ð/i»~ø¡mÛ¶ÇOKK[½z5[zøæ›o„Bá€\]]…Bam¨4 Çãó›|VÓP§N’H$”À¸wïÞ”)Sœœœêø,< ­VË4iã­I­Zµ¢¾*† 2a„­[·2·‚x±¶=þ¼\.oÕª÷÷wVXXß¾}ûüqÈ!Gm×îñ‰¥<*ÌÉ“'çÎÛ¹sç„„„ú‰0Íèààð·•¼_¿~|ðAScyzz^¼xñ‡~X´hÑÕ«W©O´'NÜ¿?00°U«VLÈF¾e/ö¬[¶liaaqåÊ•H¥Ò›7o>í¹ÇÇÇ—””ôïßãÆ³fÍš2eJÏž=íìì“Q\\œ•••N§[¸p¡]FFÆ•+W欣ÌÌ̈ˆˆúsZ$Izzzº¸¸\ºtI£ÑtíÚU ,\¸páÂ…cÇŽíÔ©ÓàÁƒ›mÿþýû÷ï¿jժѣG;99mÛ¶­mÛ¶œhùÿ`ݺuÝ»w‹‹2duE¡P0ï ¹ùg96IXüeŽì^^^ÑÑÑ¡¡¡þþþ/0¾×'&&æiZÚÏ?ÿܤÏä>}úŒ?^¡PxyyÕ¹µaÆ%K–øûû[[[S¦Õ´´4N÷é§Ÿ;vÌÖÖvàÀUíÙ³'))iÆ Ô¬Øs¡ffÏžíïï_çÿýÄÄÄDFFFFFŽ5êïÌ÷æÍ›ãÇ¿|ù2êMHHHX¾|yvvö¼yóZ¶lÝ«W¯ú‰DGGöÙgþþþÏzÒ¤IÅÅÅÇŽ£ºÜš5kþ¶Z5* €qf™0aBttt`` §çãóÈ©iªÿ'&L˜Ð²e˨¨¨èèh;;»sçÎ}ñÅ"‘ÈËË«[·nÇŽ+)))))Y¾|ù•+WV­ZõÞ{ïQ&Ó¦ÎòÎ;—:(|ÊG޹|ùrTTTý[TŽÔujò266vùòåëÖ­6l‘±-_¾|ðàÁ³gÏNKKÛ¶m'Wþ6ìì좣£g̘áïï_gR³IÝø¯9c722òÃ? MHH>|xS¿¾ãââBCC˜››/X°`ìØ±;wî?~<óyEáââòÁ žË€NŸ>½hÑ"gggªŽ …¢ÎkÅØ-ííí÷ïߟ˜˜X\\Òhd"R¶///…BQTTäææ–““#•JÅbqII‰»»»H$ª¬¬¤r433k|{i4šÌÌL[[[*GKKKGGÇœœJzÉår{{{”­ÜÆÆÆÖÖ–ª£»»{“žMAAAee%³¨+//O¥R1ŽþTŽR©”š¾¢Œ¥¥¥T©¶¥ŠJÍÐPo`“²0ÅW£Ñäää8::–——Sϑɱ‘ÊxVV{-Õ2TQ£ª@ ¨¨¨ æêm–ƒƒƒƒƒã/„ ¡ Ùù¦ºâ @ppð?¾ó7’$TÜ8t¹qÅQ•JuóæM®8^%ÄbqÇŽ¹vàø×Á‰«g¡Ñht:]×®]¹¦àxehüQ¿œ¸ú—}ŠZZZÖ9;ƒƒã_Ê©S§† VçrN\qpp¼\P§I±Ñétùùù\ËüÙ‘”Ïwvv¦~hµZ®Mþ$ŽŽŽuŽ¥}–¸Z¿~=sö.…———““S\\ÜäÉ“íìì¸e¨¨¨Ø¼ys—.]ºwï^ÿn~~>u°÷èÑ£=JµjÿþýÛ¶mKEdBΞ=ûþýûG >úè#gΜ¹qã77·Ñ£GˆŽŽf†˜Aƒùùù-[¶ÌÏÏoРA6oÞ,“ÉÆÿŒˆLQ—-[F¥3|øp//¯«¾N§[½zuÛ¶mû÷ïÏî9TëfrðÁ(•Êèèè>}útèС~Êiii‡0yòdö9Ù`ôèÑìˆYYYèß¿BB{üú裬¬,*Gvvv“'OŽ‹‹»rå ó8^1ª««^øÑsP°ɽvíš×&êDÇÆŠ«uëÖÙÙÙÍž=›-î.^¼5pà@N\±¾¾¾ ¶‰F£™6m€ÐÐÐõë×>|xùòå§OŸž9sæÖ­[ù|>Õž#GŽ››áææ6hР¹sçVWW÷èÑcΜ9#FŒpqqY¸p¡Á` ÙµkWVVÖòåËPΜQQQ...A 8pãÆvvv®®®u"j4šÈÈÈ¥K—Þ»wïÓO?]·nÝÑ£G>üÕW_ýôÓOgϞݳgÏ‹=VN5qâÄþýû/[¶lëÖ­ì:zzz2!,X@åÈ´[~~~TT”……Eƒâ*555**jêÔ©"‘(**ªsçÎTcòx¼:³²²¢¢¢÷ìÙÃ4‘H”››õË/¿lذÁ××—*jXXuoDDDß¾}Ç ´´tÆŒvvvÔ㈈ˆÐh4=zô8uêTrrò+)®PGîþüóÏÀ;ÀÀk¸û%?8蟬+Шv­=ðò€Ø?‘{àPFÿÙ¸TÑ9fyÏŒN5H}g€ õäÉÌÌr;vì¨T*™ÛÎÎΟ|ò k˜}þ}¬^Ž6ÀWôïH Iš®пÞÅS@Ö“W$ÀDú÷Ï@ ?0¤^Ü@é“Wœôï¶ôFHÛ€xJ…úPc°ý/é.~~~!!!Ô‘ë&“© Æ@[[Û!Cj«Ô³gÏŽ;2 ³RRR&NœÈãñ Ã?þؼyóWÛ„2räÈ¢¢"£Ñ>vìØ’’’AƒQÕß¼y³Ý’%K&Mšäëë;nܸììl£ÑøþûïOž<9$$$..ÎÊÊJ£Ñ¤¤¤2dHAAÁÞ½{ ÅÌ™3ƒƒƒ—/_nkkËãñîß¿ÿÖ[o 2äóÏ?‹‹sss{øðaPPŸŸ_DDDbbâ’%KîÞ½{úôi???’$I²v'­¼¼¼””ægffÖ‰¨R© ÅÀÍÍÍ×®]›››ûþûï¿ÿþû®®®·oß>yòde€ÉdÚ·oß·ß~K’¤½½ýO?ý´gÏž7îÝ»×ÓÓóôéÓ .\±bÅš5k9r$((($$dĈyyyû÷ï///gRûüóÏ·nÝ àæÍ›ŽŽŽ;wîlݺ5uÀàÚµk;uêäêêÊnU*bÇŽ-,,¸¸¸0R­VÏŸ?ÕªU;vôôôœ>}úèÑ£‡ ²gÏ©TÊcHNN.((`>{Û´iÓ¦M›ââbžžžTø¬¬¬øøøððððx¼°°°[·nM:ÕÑÑ199ùîáwïÞýñÇ‹ÀÛÀJ€”¬û”wÆT`ýçÀFV€iOþÉ0(š§gN% ˜z 8˜è€r`8G³½< 0€¸úd‚aÀ 7°ø x—%r~*éˆåÀy ŽÕŽ]ø(ièÖ 0'‚ƒll$¯¿þ:;•ÊÊÊË–-}ûö9sf‡|||\]]wïÞ~úôé:å)//§:$I’­Zµrpp(..V©Tz½>77W.—[ZZÐjµT0L“~öÙgÑÑÑîîîÏnÇÏ›7oçÎkÖ¬¹xñâɪc G  ãa4øøD€kl¢Ø8…¬+b@’ °ô€ª^¾N@{àŠX’’léÀ!ZVIx øø Ö™Ø¥¬1w+àì§>³s@X¥€ÐhH€ØÐ‰{›Y{ÿÉ?Ùò˜Q×”€ 4T©MÏhk9Æ;`Ô«Õõºã±0ch ¸Šè`ó=`ÈmHEžCÿð ¤Ðr‹Í(ZmzL­w7Œ®Ý5ú®ˆUßU´Hî Œ¦Õ»ôݾõDrcyη¹¹¹6lذaCaaaý»ÙÙÙxµETTTxxøâããëÜš={v\\3%8zôèaÆ•””lÚ´)((èÙ)ÇÆÆÆÅÅÅÅÅõéÓgÒ¤I) •c\\Ü’%KöìÙsæÌæVÛ¶mÓÓÓÙF‰ç²qãÆ;w®ZµêE?pà5K?aª¨ééé‹/~ÿý÷ëGÜ·oßÒ¥K¿þúë6©‡ bnnîææöóÏ?‹Åâú¶AªCnÙ²…úŠbĉƒƒCûöí™oÛ 4eeÌÈ‚ààà .<» AAAqqq ,˜9sæ°aÃ._¾üßUÍ©€ @i >€5ën:P t¤Àï,ƒèpð:`8Ò­€=0èF Ç'sì¼T÷÷Xƒiíû¤‘€oŽ@ @+Xб^DÆö ˜m袊€j ®£颲¿à/³Š*J»9Ò²ãÿçhW¾¾¾›6=õA­VŽ1‚ÏÅ= ÷íÛ·hÑ¢ðððŠŠŠg‡|ï½÷Þ{ï½Ï>ûlêÔ©]»v]µjճͤ_ýµ‡‡Çرc_˜#GŽÜ¸qã³Ï>kp¸ )))y¶ÁðÝwßmÚ´iíÚµ”‹ÄÓ¨¨¨(,,œ?~‹-Œ9ò?þøî»ïÚ´iÓ­[·:wíÚõõ×_/]ºtøðáMmçåË—çääÌ™3gêÔ©£FúöÛoëèÔ©»CõîÝ{×®]666¾¾¾”nG±ÙÁƒäÿþ÷¿víÚ=£ …bÍš5Ý»wï½÷ÄbñŒ3¶mÛø ÄÀu ¸Ô3¯Q2¾}CŸÿ”Æc.€»À#@>PøkÍ=þdŽo7dZ;Q‚'Sþ™5ûBÖÀoõnQ® §D¬}°À9º¨$`TÀM p 8ô4Àà VæôŸ€ Z3«ƒÜ€—@\=ŸˆˆˆeË–%&&þïÿ{…›‰r狈ˆØ½{÷‘#Gž0‚lÚtöìÙÈÈHêϵk×^¼xqûöí`íÚµéééÏWß}÷]=š$®Îœ9³{÷î9sæ¿OŸ>ãÆ›1cÆf(H¥= èdÐÓ휺,µƒÂx¨3@ëúmÀÈ2sëå¸(´€ ÐÈÖë€8` v±t©XÑÇlÓúE 9Ј{f5o±lŒÀ-Ú„ÈUD×Ë€;pV³f@0fê, °©—Q)°®A‹ÝguÈ`„5°ùÜÊŸ Ï63n¥‹aP†‡VÀdú.óÖ§ÑîðËÓ›B Èj “µÌ¦])öS›FO4oÈPǘý-X ÎÂŒ¾XÃÒ€©ÑãëɆ­^D\™››Ëd2æO ©T*‰,--y<Þ‘#G¦L™TZZJyi¿Â|ûí·ƒ ¢¾åÃÂÂfÍšµcÇŽÐÐР  ê{\"‘XZZŠÅâ &>|¸_¿~*•êÓO?íÕ«—Ñh¤nضm[¿~ý‚‚‚ª««£¢¢Ú¶m{øðáñãÇ•••9rÄÛÛ{õêÕ«V­:xð ^¯ß»w¯T*MLLœ5kŸÏïÝ»÷ܹsFcjjjŸ>}4MxxøÛo¿ ÀÒÒR*•h×®½½½L&1bÄs#nÙ²…rÇ ªùã?ÖÙã¸sç΋-ZµjÕæÍ›M&åRàçŸ3f ã’.‘H8ðᇶnݺ]»v·nÝbÒܲe‹……ŵk×(ÁffVÛk©õ×$I¶mÛ6**jãÆß|óÍðáÃGŒ«P(8PgÕ…¥¥åÅ‹©”Åb1eõõõmÞ¼¹J¥b&Éd2Yzz:S€={öðxräHö®T'¿páÂ’%K08@9 fi´CÝdà€Ò›·³\æL¬€@¤½À@üLv<¯h}€4  xXÄ´Ææ d¯¾Àe ëIa6¸ øšØ$<Àpt@xÍ€?èdw°²8tv³ã¯]»ÖÆÆ†Ýª‡îСC›6mW€æÀE–Žø qõqí]/z0˜Þ Y.ÎÇ»“ë™pw×ê6Gžžj„/nýúôÛÆ(òm=qu ØJëjè‹cY5-®–п¿¤]ù‡o2€(Æüѽ»gT”………›››ÉdzXP±þÐåeefÂenW ŽÇèõúÝ»Ÿxœœžk*ü8wî\ïÞ½årù?’û7²³³ÿ]@D^(TÀ2`(Ð8EÜû@ 0¸ˆlà&½‡"ðŽÓÖ—UötÄÇFnZƒ¹8F  è€[@ÐÈŠo 3P xÐÆ=  –÷ùh5‹A¸÷YÖ*G …V^Î>@ ð3¤Ñ!üèˆ;ÛF{µÉX¾pzòÍk´{ˆm»`XÑf´»ô@O¿€ïòjMƒãBÊÙÅáSpøM@R½,kˠСÛ%úbÀp¸ «Ëa‹ßZ>½Kô`‰v¦œRÚT¨¦ŒíËJìE›ñγt>ÐRŠºÈþî¹(i§Ä¦9þƒÔYI^aùßL«V­˜¿ÿ&“iÒ¤Ià?Ó ˜Áúmà`˜¶ô°B­¡y›^JÕFÒZcªƒ3` Ü¡“§ÃðÞÀi àKvLô€-@™|(»b&IÄ“97XCjü{z|´ºÐâ ¬EB± -g& ÈJž[ñLÚ8–a°¾¸ê |¨a åAte×Î̹ÛâSÚÅc$ðe콊ƒQÀpnHPQxÑÒ¢ `ÄÕ4€r ]_+®"5øàxwû´I£qõ®¸Í¨”ÖT¬åYl‘<šHóëݽC÷6bN\½8)))IIIÿ‘Ê2ûž±Íq/C‘®\¹ò—áoŠ?{Õöó$U@,@²|³€,às`иÈY† m½‘¨œµR8‰åo¤u—l ½³OŽûN@Ø]s ˆ €~´ùQ„‹ŸR—w€£€œ X;eèh¹U_mšìL€ K„3s¬¡5d)ûßäæaùTˆvÃåæt[=l |ŸûhVè.MË¥L†LlŠÁø÷pÑóe¸z¾}ÌÕÕ•;d™ã•á)»¯ŠiÀ¬=xŽzw Ð (€e€øò€n@°•^“<¢çx(Ç%Ë TŒ 3»cÅ€½ðk4p¨ÀÈHàW€ §ë ßik›XI[Ê.Ò7üœJÞô(¯Ô€Ðzà ¡=Öl€aÀV@üHÒ`ΚX:ð‰u汚‚Š6šÕ{5f0Æ c€|ohA)¡CR7§m†D­Q¦ Û‡KäÀЙ¸îðh¯í“_jzð·ªMí`| ñ˼A\o À„ úy Y+ðÔ¬‚¾+¥“udeAYe$ Uܜրլ’0~ƒœ¸zq=zôûï¿síÀñÊ ‘Hºt©ÿü ¸±Ä5”Èsz`m8?é’§¡5!J5‘³À7ô¬è©x6E¬M1ê8×U[Àhpè¤ɀǓZŽñÉXx"À È¢G̃´ ‹¦‹:¸¤¯éÀ# PE[äÜÐ èìªYæÁ!¬éªqvÿ‰ç°ŸÞwƒí†ô;߇x(DÊ%5ƒ5ut“žv²† á"@/Ơ˺ ãk÷—º"v ÞŽÀ•î´ëÛ€y“^@æ,{,_¾8ñЮ€Ÿ°¶Oî£ãþJËË…´‹ÿë´Ç!¾àz½ÙÌ(Î/À @sÖÎsâêÅqqqéÛ·oýc88þ¤§§{{{WW×_í{ Xûäf<@8Òâʸ¼ $°¦ÓÙX7€€ K\5‰®À%ÀÑòÆȤÅa[@ $í@ à ð€l@¼TÛ€y@ËöØ•%f(à¤ÓòIXÇ軃€ïéÝoë´Rt½ÆùKO ¿T8TâvKì~rIõ³08i ¾ôx§¤/A“Áw`a‹Ó­›P€/ñÔ-ãö“1c8cà¿ØÈ9²s¼ܼyÓÃÃãé÷}ÒZeŠXóL¿r  ÐCZ‚*îÍŸôHa­¹™ü€P/%m£64üh§A§èó`0pÐ]ºÝDPEO¹éhñV (90pŽ•@>D;[+Ÿ\nL) é íÅÇ.ªêÙû´6™A X»Û&ãSj·š”ÆD2µ¿£Ÿ¹—¸çÇÿæcV<¾õìªñÞM„\Á²i¸×X—ZÞŠÓö&ï~þºN\qppüsŒN³vU¸ÇþònÓˇ©--®6”B>@¥¬Q€j` °Š0ˆJiÑÂ&Þ®âmõz%®T@*ìhÀhœjÒq($@.  5³,zç'pÓ>î"–oˆ Ê’X[€ò§,~bWùÞó³ø™2Ù=…×7À¹ G¾Â‰·0rî«h¾S´éòé œs¹éÇU†ó½‰­C å¦öøžº\:X Õ[KKÖ}_nð»Øµ)«½›‚JİÄ9ÆÐAG·†N¯Äö!‹ÁØ›³ŒžáëV[xzæìyX èßö uæ•ïéÝ{àY[Ü †øøø¹ºº>xðÀš5kîßgV0`Μ9}úôiä Ñ£G=zü_e£Ñxøða‡%K–ÔÔÔÔo¥R™––6nÜ8‡#~ÿý÷yyy­Zµ jÕªÕêÕ«9¥ãeâ -«€7!0¾u’uS7 5P@oÒcL怪€B@ ̤@Àl£e€¹À/€¨²ÖBþhŸ=W€lªÍÑ*Œ˜Þa Nc¿r<,A@0 £ËFù ,ä@' Ÿ¶j€RÀœžwyÀªiP´Z×ÛZi(à Lé:6ˆî™ó7Ìá`F|7|17Û FT•@MïñÑ®e¸³gºcÊRS™¹ z3øPÿ$°ÃL 3~‰€ÖÄÎ9u—D9•2J*˜%rL0˜”BÓ·ïšZ Àˆú‹rèRIWÀ•~¦Ñ‹\éõ„hèd³Ÿgìjñ,quèС |þùç/^ 6lصk׌F£V«5™LÔF«FŒññÇÈÎÎ>räÈ‘#Gbck;Ü;w¨+×®]pãÆ²²²²²²Æoj÷ò V«?úè£þýûÇQ0ðš7 ¿­ÆÁöø`Âs"- jræE—Œ8¯v/hÜ·9‰%$¦/ÙÖ³ŒŸ}öYË–-©SV-Z´yóæ5kÖtìØÀöíÛM&Ó•+WV¬Xñí·ßž?þúõësçÎÕjµ;vܾ}VPË[ IDATûâÅ‹½¼¼>ùä“¶mÛÊd²ß~ûmåÊ•ååå@^^^ƒGǾÌlÛ¶ÍÓÓs×®]óæÍÛ¿ÇŽwíÚàäÉ“ùùùS§Nmß¾ý®]»ÂÂÂê쵺xñâµk×öíÛ—ÒDdee9sæ­·Þâüã9^V.6"Ì€3  ×í–³ÖZYÐÃúy ˜vz> œzçg ¸FoÇ÷ Î<±×ê< ÑÇúð!ã=—¼ .À(ÔÎÙ@1P h€BzËTÀ8˜Þ´ëðÄÀE à=¹4xðe=…O È@¸ÒÕ¬©·oaòè$ÀœCýd9ø@".[ƒ¡9Ê: %›¶þ¥ÒW䬓órtÎÀwëqÞá!,‡¨BýP ¬ZjúP.¢Bj\ñÆýï6ÚL´’Lï!ʥΊ|½B†'ö²Ê¤µì„U§Á«ÁnƳ?mæ-¬WwK+R±l€¶´®™õô†b×q'àÅÚ-·ÑâêxxxôìÙsûöíÌi@ùùù'Ož¤Î)ß¾}û¾}ûÞzë­;wî¬X±¢eË–vvvÝ»wÿæ›o <ø_÷únÛ¶9~ß¾}_~ù¥T*=}úô¼yóž¶!ýš5kfÎ|ÂbPYYù¿ÿýÏÌÌ,**ŠW/+A@æó†§†lFCR :â9@@OoèÐh¦oÕy¬u<€`À(Þx<.­ÂœSµk‚sXÀ= HFÙ@ йôòa€ þ@PF{o÷œý€-´’É@"-¡ÙGÝÿ8ýic&%c½)·§‰«Úäaðu, Æï¾Ðò€‡¨u7‡ïÓ!«ºVP•Ñ*–±0Cˆð±¥þ¹Ò¹ÍgFa)„ÅÒ¶8F¨¸`· öXõx»°#ˆn=Š­,·u ë.ƒ%½­FÍ3Å»ŽíÿbqÕ³gϯ¯]»vÏž=UUUì°¤Ré¿Q>±Ñëõ’““ƒ‚‚Š‹‹ ‚Ðëõ—/_Žˆˆ˜2eÊ´iÓx¼Tòï¾ûÎÎÎnàÀ ƒN§>|¸P(\¿~=#ü88^>:®¾Î ÷Í€®€øXGË&b À8I/~´Z÷{ ë“ç—¾@ð. ::à.i°ê!¨a¹bph€?¸ ´¤Wþj«€0`&°0kbÀ˜8ÜÔ@6ÐðŽ,ý†íCqX d½<à! ¬P d´ñ°FÌù!·0‰uÖG“p¨Ä¼“øp4ŠÚˆœ0U<¯w.Ä–Öhpë´4{¤ÙËãûe]'ŽoÍŸ¾Ï]ž³¿xF´Ïi‚‘x©>>>ÕÕÕùùùNNN©©©|>Ÿ9ô/%%¥ÁCÁgΜ9uêÔ¤¤$‰Dœ\®Õjïß¿ïàààèX»ì¹¼¼\«ÕÚÛÿkNáœ8qbqq1³!÷!CZ¶l `êÔ©³fÍzZ,¡Pøý÷ßÿý÷*•Š’^K—.•H$)))ÜpÈñrSß5αÞi-轚D€Œþ¢odÐ[Kt€8 X¤[¤°ÒC£}|úÑ7€wÿ°Œ&LDF4vèÐ8` lìDz¯tʬW ¨{@d¶@P|Nëˆå@ vå@%à L¤·Í¥¶o¯sFŒÑ^'étA{úQQì`GRüß™3çœ÷¼ç]ÖÁÇ“É5“ 4E%Ê>EÏ×À–ö¨Î0þ‚)®”c·71î'Ô kŸ,`,èsÊRňb¥€E¹ÞºÚßi®vîÜ9lذñãÇ÷íÛwÉ’%ƒ Z°`ÁòåË={ö( ///¡¼]```ddä®]»>ùä“>øÀ××·V­Z'Nœ¸xñâš5kæÏŸÿÎ;ïtîÜy×®][¶l©[·î› õý»k×.ÀÌ̬{÷îÏÌ ®^½2~üø£GFEE «!!!vvvUÆ*¼Á°=˜wa9”A=(†GzÏñp Œ¡®Hvo*–(5oØ¡—r†)`ïHP!QÙ$-4…hH…±`%eÜÒßõP'ƒæh”ä;|Žæ@öiXV4ô¢m~ËJ÷ÔXÏ£¬¦eOËlë‘é`£=}-²ò¤w<%WÒ9ªMÉ¢ïh&†¶„tKÃ-íkâOŘªžåße³³„çqžÕmPKÅpkÏŠØf…j‰JŒ^‰öO*ëž 2§¼hÝßh®,,,¾øâ‹ýû÷gff¾ûî»ï¿ÿ>ЪU«Ï>ûlРA;vìX¼xq§N„–îîîË—/?uêTffæÔ©S…Çô’%Knݺ¥Óé-ZÔ­[7`Μ9ÖÖÖuëÖíÔ©ÓÿÐ-;hРV­ZU~>|x‡„Ï™™™€@!úöíÛ AƒgVwuuýì³Ïš7oîääÔ¡Ca@¥RU=«ð&abùŽžU°C8mᘈ¶'D,+>):d™Pdzå´æp Œ P¬(r-òbÄwj¹H47%ü¢åÚ“äЭêäÚ‰„0ƒzpÚŠ¶ªDÂ1~†Ép†ÀqQI=K¸-Êa|&ˆ&1d!6úŠOðÂÓÂw2±¯P&œ ©¯6WŸàûîïù5 ÕÌ?€o erƤàY ¾b¯„øw7çt»`s¤KÛ²~+ÝnÈ6QÏ\ŠmŽàfV_÷¶a\ 0ÑÖLÔõûAG|"Âç©—†½–åþ¯8’MA\\Ȧ ÔFoh0PxÎŽ?^J@@€@|f:àííííý”}»víÚµk÷ÌbϯøæC°µ•èÙó¥Õ:uzÞW«VM8ëç-Yªð&!ú¹)9b£÷d¨ `" ,zZ1JV\™äÍŒ=4Í•ð?M 'F€ÒÁÚÃwÐF'V¨îßOttÝyó|àæêÕŒsº‚ÜÕ±ÍÐÏÍ…-pn‚4X6ˆµç¥¡Êá'¸mE¹©ÊÆöñPJhW`;ä‹!¬$xma¶‰*VìaR¿ßüklØB“&õçN5’lŸ»”ÁckëCÖá-Ïû¦GÐ}¾k¡-)F¢3èrЊüj¤gõŠÈoMKœN‘(ý)„c¾Oš…×T{6dØÙ-{ÕYôgÅÞòæš«WbíÚµQQQ‡ªºÑ«P…ÿ}ü:áí>@*Aè³a+YvÆOGú‹ õÞÐÄÓÖ œ›t\C8 2xòJ×¾=jõE³ÒÒÁÁ_@ü(¦|î‹O°LÑÛ“A!D‚®€DC´x0É`ZÑÌÂÛ …Ð ¶À= ‰–P& &<½Gĉ¯ :faÚ”¸#rh€­˜·Ã€ÞlÉ2ÍŠÕ¬Êç‘/s#‘Kä,ŠuS¿0èÞ¶çÄò\§Œìú:³Ò?Ž‘4{à½ÃÏ"ÎL’l]mÕ”Ãû>6ú±™Å’þf×kéd ¡¤ ûÓ—î©Hm f}{@ûö˜ì=›ruF¬©Q=_‰+ÖÉ]lÃú¯Ä’»âÁÿt†¶¢íÿú¯0W£G=zôßû.**ÊÎήz’Uáo€WÅŸ¾¨ó¯5hÅWrC0†æ°[̱ۭ˜À°„›òÜv*FûÀ2…«Á6Á ÈX!úÁºÄD¶n-›=ûȬYRÑ& ŲÀ lÀ@dÚ¹B-0€·`&äÀi0‚É0, Ü‚û` ½ 1\™°¬AÀáü j@°}ZZœ å74»*1aÆ V-dÔP‹†¼ò‡‚—4“`ªsÈd|[s¹&Ì5®p›ERï#vû/é\sÆ" ‹²éißÎ.nsÕﻆoïü´ðLA¶ù ßé ÝnEœé´©«ñyž¹YŒG)ïO‰*˜CÎsð.À¤‘Ú_i¿ý©–•a(Ÿ ÷=9ЊüÏ?EÛ×X<ñ×íÁV¥øjTr«P…ÿi¸¹¹I¥/Ô²q‡6°,¡ºèXA0'¨ç @,ü’FfÐ,Á\¤{9@ðГàèé‚©ó…"ø¦C*d‚;ì–ð‹„µ¬€D¸õôSñññøûS§Nåpê€Èôº,‰ '94ƒrˆ«¢SÙÕÞJD¹ÛÙ0 Cä€$Bu8GÀj‰æJ_ƒ꿨î‹nOº~wžæ_mŽ6l³öü§ µƒ¯àw‡z¸¯ Õ÷/¨«j¦¤¯ÚZÜþ‚åî.o¯Pi<£÷…OkÔ¶ûÚúýøÎã¿Oq¤ ùM—/úXnôDôjk3¶öXþŽdÜ¿X5 ,üà¥wºÀ¯Gi•¹zÕe–žnddô9Y™LXõ£ÿS,¼õt:J`5ë·Ù•€ä‹Ñ0Dë±À˜ ¿<ýþ#Þ%ÀÌ`ă%4K¨'2˜à*ô®XÏùß1cfw÷?dó1¾Yn¢Ì °ä;OŸ‚+h ÞáÆcÖl{[ƒ«žTG\¢‚Þ ¶¨ŽáÀ-½Žò)à ·ÄѸ =ôògÏà ú‹¬÷rÖpŸ¶mnL0¢ Á\B6 ¡$]\GM ³÷èŽ8sÒ¢0‚`©NdÙøL •—@BOÙ‘&’è,;>ú&£¨KÔˆ]´›‰M…ô0×i`8?8æÃ3Q߬÷ÚëÝô‹å&Îg‡»BQîà#JÛTù¤¥”‚¢B‡âß>ºÑÇuQ^Ò±_h6Ñ©e,}Òô"Ötaå%޶†ñ$ãW¯µ{Ï©ÝëûR×E_­°Ê\ý9°´´ôôôü‡œ¬D"©¤8Vá†xˆ7QbUÀUñCM(„È…Ë ï·ÎÐ_ìµJ@!†æ ÅlÍM:ÌäØ1âãÅàaOè¦c¤ ¦xÀN%$íÜ:æÑ4ŒÜÉgçh&úvßC?Øí 1|ýTt®zufÍI0†;`½@õUЋ„<°†Nó¢ì]64€2q4LÅÒ¨í^2žÖ,š+5l¦ZPnJõÊÀ  BYi®´ßÍÅ?‰És+öµêÛðþ;¨žߥ=tä¶Ë#~rÓ-ù¹!DÃÏ`¥pjÁX+àc1ÿ÷ù L@ –P s +,„BX¦¢yÓÀ'PÇ! ´à `´`µ”‚VOö¢$WxrÂ{±’5ÛhK½Ï¬àsø™SølÀ#׆Ö?p¡)¡{Y7 ãõu0,4ê:§Ù9máªãÇÆ·é)0$ÌãªÄ55èµKüKyL€lñGÒ3­$É.’L{ù‚©êSt{Òí[vEÇŠv”=m 4Rа*ýÕõUÁÀÿ6t:ÝßþU*Õ?á4«ðr´…ñx0DÁz¨ bdOHÞíb®¨3l/°†ú ÅOS-ƒ³ž(jm¸¯á6Úê(#°v*_ºCޞϴYÀ8ס;ìyäÃà!¬`ÜÒÒ²jLªðWA¿E¸À t d ïê-`p’AFðxƒ-Ÿ=k 6z‚j°LÞîqÊ='ÿ+1¶V†ÂP€\¨ö ƒkò³#ùJºäf'0KÈ…b¸(ÈßÂh×!¬ž~zþÕ!¬À @%°ÿɹú´ ó \Ò‹‘`ס ¸òDJê…0‚-° J21³bŠŠR0«ïÃ3áÃIØ„} ŸãtkTK"Ìo‹ç2©ÉªR×ÌÃHoBh"â`ˆ*ÙÕr+è‹]n«è´uŽÑùSle|±ý‹Ú£?¶>å߀ëÆ(…˜aÒâP‡¦.X’omÎ~ãÞfî&ÎÖe¾؉N"Y<Ü@ x–½ c£§Ø3LËEI߆Ѐ,˜©7¤‚rÇ8ò›.Зö»Ú¼yó’%O¤´Ö¯_¿bÅŠg–‰‰‰™;w®Ð¶±  Æ÷ã?:::îÛ·ïWÔ«P…¿epÊEï*AœÞlàmñ1]åpÊ!BÀH/“T,6T¬tË" øäåMVkºƒƒ”R`¬„ÎPBÁ”Lï•q¬˜¥ÜÔÂ)¨ Ýà„€dÐFÀ@È€+pr`ªh=Ä7}t€÷À Š¡.¨ Cà(‡&¢B®>"  (á~J ¨`(ÔnÖoÄš¹4Hfì`¢klw&)0eÔXþÓ„ñ¬¸Žák‡í§üÛÌ~_ë_­Ìoý|8¶KFP?•î×Ê嬡QJF eò ¦{jéH7Êä4{ø_¹_j®ã4iÒ$`éÒ¥·oßÞ¼yóùóç[‹Ð_xÀ€cÆŒ¾üòËÖ­[çææFFFV.YÕ3÷õqìØ177·¸¸¸=z´j@ªð †ø:|¶C[ˆ"8 ΰú‚ ÔƒpNC(܆@h7E%‹Jœ‡3qútzAÑgÐ[Ç÷º Føm`œ§h§SáÄq¨Š`3ì%\Oˆ€8 ×`6øŠ\µp{¸ŽÐ à dÃMp„a0[lä˜ pþ9‰Õ8¨  Dç²#”Àøî |q¹öÛ38Ñ€A?³äö¿%™.UÖ˜?Äöpó{[û>giòLÙÐ’ÀZÇd™³¾%îoJ¿ÑÚY[4ë9*É6¨¥¸gýW.Ä—=<<€‡ÉÉÉ%%%æææcÆŒ =zt«V­ZµjUÙÉéîÝ»B;ŒÇ߸q#--­cÇŽ#GŽœ?~ç΃ƒƒÜ*¼ …¢°°0..®¨¨¨j4ªð—ÆB$À%ÇÀNTä»Ã@#R¤Á9°BÈY°ƒíð–A!˜€Tàýà>dÁuþSa5,¦ Ž`&Áe)ñôÞ„À Ø/jg\}µ4pøªA6Ü·¢™%5R¸¥e%4…sЬ!îB$\‡Q } AØAì\±¡pe¢F"rO‚t [e¯îÁ6‘¨Râ*“„^Æ2LdÕ4jk¥ÜûXyasì`øØà¹5boej’ðë KWï;Û0sØe6~¬¿%ÍL$5¡Û³¾G«¨ŠœPi*…±€M^nDŸîlÑεÒnßµxBß ×Ûgi•„ ÁÊ(wsÃÔ_|$Õ¸Kϵ õ ͺY¬nC×ñê½+Õ†y¬Ei{€E!lÕ3–›žð#ŒyîÜÝïû—Ø®³»8>ñωâÿFï hÛ¶måçV­ZÕ¨Qcÿþý®®®‡.,,Ôh^šcÔét&!!áðáÃyyyB³¨*¼~üñG“ùóçÇÅÅUFþr”È„K¬†x8*†Èt H`4˜@MÐ@€F«|&€'”@78  'Ô°/Àiøš@+¸ï@=‚šÁ»ð…„ï]øù 塔밠 ¼ÁIÁ8è -`-´…¥à ä“öˆµZæAWønÀ\8 A` Ã!4¢­A2ÀaøYT*-8ƒ”ÃvP€‹ØpÛ—=A2$94 ­ 6êê<ÐLúRþñ" -@Ãh NÚ~€ZXåIs©\÷¼­ßžŽ~<0’ÍÛ Ã/´‘HHÅ?YÅŸTŠT‚T‚L‚ä C.QËuÚù_°©I“£ÆÆé»G¢•ÉÇ­Ôö= mw¤h¤ŒÆðóH-¹„°LÜ€\ ´2.ûÓ4ä é6ú¿ÎØÒêUsËÄ¿? þýï'&&.Z´(::zΜ9¥¥¥³fÍZ·nÝÝ»w_‡Ø““s÷îݾ}û qÂ*¼\]]7oÞ¼yóæFUFþr´yÉ×O;‘à/*©#Ö“¾­'÷W ?A"ä@| «! îƒ)ô…ÑÛ w .¤Â%PAü”°CGJ£€eÒ§O5'Ç1àa ƒ‡2>‚ãò! &ÂÏ0Zd– H€µ`+õŽü¨DÁ‡Ð±ºVÄFÑ•¬tK‘ÌfV` ‚t€=4Óß<ÌY >+ÛÕWWÀ !ì•N¹®Å»V]ˆéú¨ùwu¾Úöç¹O÷½Ñ!#¦ý *|å/Ôµ<¯}ûÇŠïÓzÓ6” ó»…I¢Zÿª‘LÜøKKË.Z´häÈ‘µjÕÊÏÏÿá‡&Ož:¤[룾±À©˜±5Y×™[<ã¨iËol]‘ß&ÉiSW‡é=%]?¤@kgØNp%½¾Æî$Fƒ$,o•1«Âûιéyß°ñ:å²QÛÓËÜ,ÏùÉÐxP‘к ª¯úr°.l»Lãnp¸5Åè¾±Pú„ËõRʾÈ¢Xt`ÒÛ¬˜Á¤êzþôÈ]NkĪD?ñ4“ŹÅ‚¹222jÑ¢…¡¡a£FlllÌÍÍW®\¹páÂcÇŽ-X° 44tÞ¼y†††R©t÷îÝ;v<~üxPPPJJŠÝš5k>ù䓳gÏ&''W¶®Â+:vìØíÛ·§¦¦îÞ½»j@ªð×âÎÓ_£Å¨$½À‘´zK á@¨¸ØPp„eâ’Âð7¸ƒ ŒƒÐP‹L‡šÐ4èîúÖ×_Q«e 10hs`˜Âb-íàœŽÚ:6!ìêë(†b8 A Iö10.ƒ,€xNp¶ÃR1”«¡ H Ba—Øjr\è*¸ñPúòG­1X‰æ\6ìú£ë’êRâF>˜Jâ Ú´Þ<2µ (Æþ‡VîSßÏͶÒhd†O'Ý»J»Ô¬|rW•Ì ™@VB»´È\Ri¹ºù½r9e†”ר¨à mŽëû#5•â h3²6m¹ÐJ"µ gg ôuÏ7Í ÑÔ™;I/šû{ÍвeËôôŠ.ƒaÆU–^=zôHÉÄÄDá×_~ ôïß¿ÿþUwÿoEÇŽïß¿_5Ux3P©À­çàgô¦œ?,­x³”PêÂOp2 ZAgØ÷ †B C[Ø¡ã{H„wÄv½ƒ ø¸\·oïÞ>ÙY¶‰ñ5¦Oû¶ÿ‰œ$)®*ì%¸Xð%GÕœ“°FF¾„PSÚä°Œ` Ô†ePK "ÁV‰tK‘jÿ6t­lmè ? XC„Èt—ëy‡ñ B0ƒ‰p,~Û –˜`ªG–ŸË–M EŠõ3 d[Õ4çáç«“7° IDATglw›7üOü]ó¬‰}¡ðJk›ãÏi„š•0t v°€‘ àgÈ=°!‹ŸP{¾ž¹úo«P…*TA„/@$ÄA]H~®ƒ†8B\cˆë´®‰T±Kp¡`?\‡épMlãÛPF c|‹¹uµ”§¥4™2yðŒ™_hyc½öZçE÷0k1…/9­ ÁQ,𺠱/Ê]剔CX&¨ZÈh -RiNuоsB'ì9Óœ÷†z‘FQ-Í0Ì(6¥P[®©qÀßÀ)¥Ù¸Á¿¬ýn‘¤ôßS £©_€¹ÓJ©Ù:â‡pL“@šGZˆ­¨Fßàøâáeã 8}’{@öGèZasfÍ—tùIÞ,BM‘†b>[ éqB>úk)­UsZëvõ¢U<—q¿ç‚-TVq©Ÿä_Á*ïêÿqqqÿ厪”U-(¡¨ !¬wߊBì*«XÓuø€<Ôk _·¡ ŸàœcQ'I@ h; |wÀšÀ95×J „&:òT˜høÅS+TÎdÔ#VI#Ô,²ù®=ʱÏ%MƒaH U󋎸^°Þ‚ÐBaŠšjÁ>1¸×RD¡ p¸)+ÅÂCE™y}IÚë³^ 4•\ ÔvŸûÄP>p`ks&„“ëE“¢c©JfwÚ/%ìHШá­Þpx™T«úlºÁïÞóJî–?uín>±¥•Púo͇ßtÑ3'ïü$´Zzµ•fâ—Úz÷›Oø®{1eY¶ÿ•—©*ü4B¡¨^½ú?ád ÊËËÿЇ¢Vûª¶¶+H¥Rƒ7þ0¡ .èĘÞ(ø·(—÷¬«‚T Õ‘‡DÒ ' ƒƒpIìjx[h3¡å¬¾s#A.£—š:°‚ KJ fjøXìíˆS,xXHJ^eûS„]òr«0H§XB4lDÆM.ki"!Yƒ ¶Ë™¤&b¡ìC°Y!¡L4½k@߉á;@ „@X'ÁHØ&ÈÕú«CžÇ±Ö”ê ä¨dhM0ÒR&¯Ü=´çÓî1çt_.Ï7Ó"Õ l£jª"kÜy¦ÞÆà=ííz^}¤“ð/5rÁ\Jµ¨ÄÖ T/Y©;%ÌU©Ð®&n·¶P·½+ƒU^Ÿ†¥å3—1öÃNû$W@¦E|3†w>ç®;ÆÅ:ÿhƒÐµª5ŽÙÈŠIµ¥§$O+l P¾žòo•¹ú³ñøñc}vþß2™¬]»vÁŽ£¢¢,,,þ!keeõ¿Ð÷² œ‚|0 ä >zP9P|ÀN€-BmÀUèðLa8dÁ1qÅÚPè¯c£X=aÔÕò½‘°QÇ)Ö&”Wuò³qáæÌccªò³9ˆ¦L»‘×ïSPZñDB$¸Âl\b+ˆgÙbšMè8å Jp?8¹0\/Š5r`-XÀ0KÄ®Ác(zU§—¡”Æ~€ñ¨¾ß Aœ­G£i yȆà'Kåš=p¾qnœ¿ï·YØ—` T/OõOÊJñÉõ¶–NyÏâÞêSËw1{6–%P'•¾"±>¤ÒuÙö]PEÙWÄ.ãη4ïlCÝ,xR³`B©¢÷Ê„¡›<{þûÞ•D%÷©–ÏÄ]|q»Ç´Ô+Ý€¦g4‹<ñ^ÀMÄ^ebœsÅsç[)q[e®þZÔ¨Q#$$äW$<þ6HNNvuu---ýkvçããÓ¨Q£B{­øøø:uê¾ñGZÙDÃäm 5äÃ.h®p² ághrˆBp/¸ 1w!Z€| Àf GAûAVðXÊdÛ¥–àoÀ3ÔΠšIž$_#À…”êÝÀ݃w ‘¨‘?ÂUMq!¥¦h y˜K#tŽ´Î@[F¼ŽmÐ nA”Vü‹€b°…f :è¦W•¬`=!=C^.þ¶á4„>Ðìé‰g<¼™šÙúæ p›?$õ½C©‰Ñ±¶úÓON¸|¹¥Í=Ƕcûž^½çóþñ2-‹N¿zç+9½£ìþ¤ ø)ü<;ÂâðÛÖ'©Y½ÇBÕ«ð<Ó±µá|í7Ậ2WUøsp÷îÝC‡õïßúôéÇÿþûï«ÆäBë©ö€‚1dÃØY"½B+!ÚC„À{pM4W§áÔ‚lX Ýឨ7xªÃP 2üŒqOcQ)cuT¯Á}52R$`G0–5¨tH~ }}®G¢4Ç5‹Â<BL5ÚæqIÅ-`6PîA ¼“ Œ„o¡9$€¨á†ÞùnÕë'R*~†öpKt­^«w†w9ÛÕ‚ÌüÚïxoµ8G#ê1Zƒ#xâU¿‚dHÙå9jÕF_õøð:ErËs¾¨âá¾Ê!fï¶rµ¼»˜ê“†û­>ºª·‹*CqÅÂm¯‡ØÊL V9}jº»°¬S­Š>[Çò…ßD•npêÓŸu¸ç=>ä—¨oùÐÊ¿”ÔUÊ{ìÒÜÿFË]l`%Òð²;öÐRáþÓµwÏ Eüð–(u‘þ"%ÜÁЀX˜þ:£úkšþþþuëÖ «P(–.] ¤§§×®]{îܹÀÈ‘#kÖ¬),#¼\ÿ Õj“““—/_®P(¢¢¢„‰_}õ•B¡ §»víR(7 úðÃ‹ŠŠÆפI“¦M›<¸ àIç·’’’9sæøûû7oÞ¼k×®¹¹¹yyy½zõjÖ¬YãÆ§L™R\ü„•TXX˜œœÜ¶mÛŽ; S²³³[´hÔ°aÃåË——••ݾ}[ø½¼¼Ž?þÿÔ2¸¼¼¼¼¼ÜÛÛûðáÃß~ûퟸå°°°ÀÀÀÀÀÀ°°°ÂÂÂiÓ¦ ×[Æ  Åùóç+ÎÍÍMNNöôô9²BfÈ!ÂÂ>>> …B¿¼=333&&F¡PÌ›7¯â>KI~©çeÆúôé#lÇÛÛ[¡Pddd<$$¤gÏžÑÑÑÿûæê=l@ ­à¸(IÞ ºC ,t‚b®Ë ÚÃV°Ccãð1c&‡‡¯!W× n‰ “AΰÞ‡âÆÃ]ìÓ’Ž{ÄàaŸ<ŒÔÈ-Ñz—‡õu4çB.6¶ä¸¯EzŽ&u(¯‡¼òÉM ‰/éñ˜äSKÃÖìRÌ‚2V©(„ñ@NaäÁ&(€I0êAK8ʼn»øšƒ‹SÙ— A)Vž½ÆÐ’Ÿ“§z=x¦ãžE§ /ž[jL”7A×8Qó™9®KêŒ- ïÚ&6¦t8t{ÌâÁ¾Ó„¯&EÒMÁu&üøp‡×4Fì{JZC#a»5'¬X[JG½~ÓVs[ÖÂ:ÀšrZO#:ú²[¾§x¨0ƒ÷vS¤Çô;Ûd(õÁ¾„õeþÞù@d[¼ñÁÀ+W®œ8q¢U«VŸþ9°sçΫW¯N˜0aÕªUÞÞÞ:txÃoÇ7®X±ÂÇǧ}ûöGõ÷÷ÿ}ÏV++«={ö¬Y³fÆŒ”«W¯îܹ³wïÞû÷ï·³³ –,YqðàÁµk×vîÜ9<<üÂ… £Fjذ¡··÷îÝ»ÍÌÌ<<úè£#FLœ8ñš¨[·n;ÖÀÀ@8G`Ö¬YžžžMšTÜÀqqqk×®]¸p¡Offf¿~ýÞÿý… Ž=ÚÅÅå™ ž?~ÿþý;vìptt¼zõj¿~ý.\8gΜÌÌ̺u+娲eËÑ£G ô² ?räÈÁƒÝÜÜ„XÂÉ“'ÓÒÒ*ÅÉþ°¹hì  Ü-XCK0‚‡à®—ÎÉ(¶YÿþW7.®]#<<”pL¤ÔÓ!Õ¡pp÷݇pkذ{áá&Ÿnĉš+I±ÇÙ„T ó±’ 3¥$')ÚL,É.ÁÀ›Hæõ©ö˜, åFä™cWŒ™šÄbV™£1çƒb¾–0J‚ƒ¶~ ]­QÛp'™C&ðNÀX¨ w!‡]0À”8G§’ @C05)ÚB6üæv}:”®0t)ñ䟇ÏE ¤˜2y‘&&(Õ·‚oG¡ JÀëφEƼ뼷EzEÍ/6»:ÞpËaW»›ødaO]†>~ñ˜iêÀØé'*zŽ˜e—l|O¥ù‡óÀ Ä˜¯º\7åËYË5¿è4*mf®3×LÏÞiæÔoÀ××Yé¯I“H(L(à¬QåZÌô)f {"uÿúˆÑëøÕYœx7ñ’Ø:äñŸc®îÝ»7zôh`úôéR©øùçŸç@X GžžžÀǧM›¶téÒ¿† ýGÌÕ—_~éáá±cÇŽ.]º >üÏÚrƒ Ö®]+|ž:uªR© ;vlïÞ½ÝÝÝ+gÍž=»¨¨¨Aƒ¥¥¥vvv–––J¥R }òÉ'•[ûæ›o–-[¶víÚ:Ô¨QãÌ™3S¦LÉÏÏc6999%%eÕªUmÚ´ùè£þ ¹:tèЖ-[FUY®ôÙgŸ]I¥ÕJuiÕJªg’jHÔºxÿ„"ë2Už‰°a RÍ}{üké¡q½¥a÷ÎnÖÎé8¿Z¯#ºÛédZ´ZYBŽs,ä“ßëbw@"‘äOÍWz¤Þù×^ÞV¸†K@ƒu©Ú÷^µ^34y*áh×Â$}å)k„~J!ï5†C£×6óy“i•%4éfî J¥;vìèÝ»÷»ï¾Ûºuk‡Ÿ~ú©  @¡PÔªUë ¿›7oÞ«W¯!C†´lÙò«¯¾ÊÊÊÊËË›2eÊßrµjÕ<==¯\¹"•J---€)S¦DDDœ={ÖÏÏïÆ‚ƒƒkÕª¥P(""",--«U«æåå <˜|øPà"™ššV’3ÿ.Яàn=áp‚û‚(‘ µ;8"²*®ÑÑ5ºv èÒ%ÔGްy3pþ`tºB­fž²OÇÖÎÀ\G¸5µTغ‡guÊoâcIAuR °|Œ³Iöm9‚‹­„'ñ+c£)3•䀯’vLOe@Š”ZZÀ=ØÎ´©0>€»0vŽ@0<†6áÛY¯Âï.—Œ jÁ©Joë÷ À„ËîhÖ»ÄPT.W±]Ë@C{ Yɰϥ|âfõˆ¥»½6"¥hνöÙ,F  é+¹Ø@Ó4ûlŸlH14ÀJ0®£×¯™°Õä’ß±!gå¶éoû†IP-A ”`´·„WÃ÷`ö¶ë1€›|˜AÏ1O‡ï Ï9|HKýA?vùÔå@èÀå×£]äÂÜ_‰âÁ ñóG¿²™»w k­úE%¥VÒ’F>žFFFúf©iÓ¦“MxŽ˜šš+  }ûöùùù­[· LMMÕét¡¡¡oþÛ®]»¢¢"ooïŽ;J¥ÒÂÂÂ_É:(•ʬ¬,ww÷—¹ ‰ÄÕÕ588ØÂ¢ZµjÞÞÞ™™™999]»v5j”°€O×®]5j”““Ó²eˉ'ÖªUËÝÝ=--M©TöéÓ§wïÞ€ûûû7jÔÈÉÉÉÐÐ0'''''ÇÜܼgÏžŽŽŽ?–ÉdÆ kÓ¦ “Éš7o^¿~}ýfÍš™˜˜<~üØÂÂb̘1~~~íÚµ+,,ÌÉÉqss›9s¦µµõË3¿{`mmm…s¬_¿þœ9s~]"///O«Õ:::¾LÕ¢Q£F=zô"l‰D¡P¨Õja@]]]¥Ri“&Müüü*ccãàà`ww÷gGøÚ²eËJJ…D"±²² vvv~fEa®ƒƒCPPƒƒƒðÕÉÉ)((ÈÖÖÖÀÀ 88¸víÚ•{tqqŽJ©T6nÜø…çrïÞ=??¿¿FŒñw@¸È“’’„´ôKE¾` Æ¢å$Ô…Ž`ÁpÑу÷î5Ý»7nïÞ€èh¡f`tƒXhDïÎülGF²„.rReØZSRH¹W'ŠM)+ÃHжÈ4Ai€*—»Ôs ó$㜉M%%h`Š´Œ»Y‚‘=±yTƒ¯ÀXJM ÙµB xÃ!¸…çÁ d-Ðzr혣+'ÖÂL°€CóšØ¥KSSS//¯Ê§Ä½{÷œÝ=Vï>ÀmÁ93”3U|Ø®«H z@Å£¯TrÌež ¤ë(ÑÖþ…2’mdxKKtmã(î»Q`!A&—·+PË;–´Œl´¹¡÷†€ ­5 BYÑ^ÄOú^©¤‹¥Ì¶-öõtñÁlkóœíÈ¥M,+ÔD‰±œfàg`¨)õ¹¥ÑIù­-_ø® -+ߊê:t022žT¹Ee—ï$«UeyéÉ’vý>hÒ3-3ÛMž9bÀÛÿ2d[· IDAT·×AnnîÝ»wÛ¶mûOPµïСÃÿSUÖó¦Q¥Ry{{ÿT-<úÆŠ0 ù¹sç,Xðªe@!C9t„ÐÜÀ N‚ØA ¸_ÁTøÎÃ è ­¡+;¾`Á nþƒ ÚYS_ƒ®Yjó°¯Å)Z-ÒLL|¸ïLF1fùX5$ú=R©®E§£$5RZC©†ûZVÀ9?j9qÿÇÞy‡Eu´mü· K/"]T XÀŠ…bGcÔ`ï-Æ(64Xc‹Æˆ5DÑX1‰’7±ÄÑÏŽkĆD©R¤lùþ8ìf„ Ýûòº\æ”)gÎ_îƒa3øÂé‰nü÷ "ÊéÝA}vÕ¶mÓ¥K—š˜˜ØÛÛ+Š˜§ëöž‘ùðÚy «…hPF\ˆA'@<àDÁ3¸-ÀŽÀ8H#øªÂàíAí¡èA]¨›žœ©X©À¤…1:ψ7¤Y-´SËŠ$òÎÓæ>¦ÙÈ r-¨“ÊR@Ïm–Ì5·ÄAì‚ñ †»à `5XÁ8aP>spä RÎ¥ž•m'¦,‹z÷Ä_ÆsÂêæ+)gK(Å‹¯À<åÜb·­Yñ4øÓZ}·ˆòt21É,Tµ7æao¾éÌêùÓðÔ°¿lnñeß›;?µë¿:6¿Ð\UUN#©ó .=EJQ>mƒÙø#A^²äfÁ~1µtè(È,âÌtdì\ÃÄ<¾ má+l3˜ý Ó¤L„Óº „øÚÅ"u@åØü]¹?”x¬l JWfј«Gvv¶ºÃ»ŠÊ_­ÊÌÌTgèxWñnÑøÖ;8 ãa?œ€Pa jƒ9|о]¸ua/܆™PþšÁ~]zÉH(`ióÈ„¼\j=àK1FÈj‘nNêŸ4’ý»dEˆëqæ)™bœ“‰•“ a}§À*§ð‹3Oa³‚„-åÓTÏõX4ˆ¯wƒ©â¨Š†Qo -%A†²{$˜Ø÷JÚ?ÙÚ–ø¾ÊˆÁ€d†nVüâ˲ñ$YJbuô[¸ŒŸ|}ÃRÅ‚%¢x;@K©Ù‘‹N& Í)é¹]Ëc‹<ä+UE¢B¯€]_þÊøû<‘Bhá¤`ÉqFûáÈE8 $«–‹ÕV¤¬…Ñ^/‚2r…hÌU™VKÞŠÒ`aaQizW…èˆwÂ^ﻂ»ÊøÙ+P ÎBu0†`wÁ ªC,ƒ`v° jÂ|xŒ‰Êe`_Š1Ê¡F ²Ì¹kÀüdâ2¨’‚Ù,ÅÜOA;±6ZìNÃÂIȱ†-Ð ŽƒÁ1Ù ŒÁGA"Ü#¸ö0¤€@å¢S2ô‚ëú\¡•ÃCøÚJ$hK97Ø´þ,Ý…Î?ðèƒÍÄùi~?Êþ§ËµbÌç£W±s|hccóž4ìåË—w  hƒtA¶4ƒß ´Å| rR! q‘Ñ8èY)tƒK`Yrˆ¦‘©=±:´Ö婜ÙRž$QMÎ)Ö°B‹. ¦Š8ò>•‘*¦'|+Ç\L#cž¥sbàÀ@@0ƒPn@,Ä8ŠÐ‚v` ¿VÄÚrÝ h1m4—ÙÕ,•“&O1ÍЇÊŠ®v¼é÷}’ý*•Iø³ˆ´U1Ë™FŒ['_3'eÝ2³Ogê>²_qÕÒ±—Þ¦õ­oQÒ ûø¿u©æ™ÁþÕ6¶ä¯ð©ãÂʧœ§Ra^e›Äè³üÚ˜+…ÑÊ´‚®¬nÎø_ùó%°Uÿƒ¨L‘þUß²Ò*ª`ªhÝ_5æêÕahh(8ŽkP¾033{¶‚‚Þ(„ bS0…¥6¼´SË„ƒX›qR®‚{>N Ò l³LŘɰ6ä†5÷ZQõ1÷õ0ÍE;—üZÄ<à9¬£oN¾ â9)a}ưüå<ñ †‚¹Ômh©Pjƒ„Êõò§ÚZ–M6ŽP2¥`S(@Øé)dA˜r­Ë€ ‘Œù™Þ5Øg.‹h¬…[±«â!_ç–ƒîfùoäË©â„jÚê®í±uÄS¾ÎØ8)z×®í‚ÈEá¦õB_ºj6C'üuš^»Æ§¥Ziû~¥[ã¹jæ* $2!vjU0˺q]éïç ý!&^â$)±v׋éfÉþªïKü•¿C5æêµÌ•••Õ[ë…\Ž8s挗—W¥m´˜ššZXX¼N@ñ¿ÿþ{Ÿ>}þ òŒ/…}0 €\…  Qà Gdô•p@FŠ õrÑ•r¾“.¡ž‚tÆÙ´‰ÃÈ\KR²i® ù9Àñ2º*ˆ6£VWÒX#gn?C?®Å&Sì…Ž PÐ3ˆ€FÐ t VéÓà&ƒàÿÀ¶+±„qü&T¤Ol†1†3{=YÚ¯§ŒÉýgÜ«ÅÜ™ì¯é*†me <³€(¶†ãà%)ûÆ^=3©F§ÈDt½‘öÔU7 r6O$Ë Òøn½‚E9f¢Œj%ß_Lò™·“N·è8dåξ„É0Nª-‘¾И«2á}½ÍÍÍ­/v Åûа999ïbµÚ·ørà6Tšp l!â :+¨©Å³ÓÙ$£©ˆy "àš¦R²¸¡@–yUŸa^@7'¶\'îðlŒÈÖag*Ö0²D,Q° [ñõS‚ BM¸ ½´Ñ{)öpªƒ6B âp„#ðö"š+¸$>—+t@IvŽ.<#|Ì×c!‡0zr-±’Ó!±- €Ç¤%Òs¬âÈÄ‚³ÅaÄ{z^è$‘Ÿ¡¨Ù1àÆ‰ÏnùLkØ"@2æSgÜ øA'Í(Ýë¶xÈ·<µýåò B§L3mLÀÉŒA),îÈT5gúFñÌ)` ŒëV8_r ®Xíl)t\ÌäU¨o‹Ž=j ²W4W!!!êRèýúõûå—_š6mª¢Ä.#¾ÿþûjÕª©ñJϱjժݻw¯´w®HŽe/jY)HaY[[ûøø¿ýö›À†´mÛÖÙÙùûï¿WÅõë×¥P0xð`õ0¸/^ZFÿûï…ß?cÇŽ-1Ç7¡¨...mÚ´ž?þóÏ?¿BÏ)IIIû÷ïwwwoÔ¨Q‘Õ[UÕuUiœ'Ož:T¸nbb2hР˗/GFFU«VÊï¿ÿþèÑ#ÀÙÙ¹mÛ¶š85쀶РR ¬ ;üf`Q0Àí\.AXKh“O,Xf( î‰  -$3ªJiu|ˆs1—ä´N~À 8%¢§˜ÿ“ÑN?娘6röB3èNð‡Ÿ*X*ѤAèý]þ£!ä t¶ÐDÌ2*‚CÎâï …ÿOËdñ ‘ïï$'a¤CoáàSô…cò/°Ž\ÄZjµY.²K2Z±>žhØO,#bñ¤ßX¶ý ߨ•Ép‡;bùA‚yšdA ¸¨ožZÒø&^Ô숾×éÐîüuJ›û|tÿ|Æ D ·(tTQGwh©¬×ëÇ]=øÿ¥É3.^¼888XGGGGGgýúõþþþ³fÍ }Ù²H$’2€.^¼xóæÍ•ùªÉqÞ¼yÛ¶m+—;GEEMŸ>ýîÝ»ÀŒ3vîÜ lÞ¼yñâÅB“ ÷óæÍ RD"‘¿¿ÿÎ;uttBBBfÏþ›ÂfVVÖ¬Y³~ûí7áäÔÔÔiÓ¦………éèè¬^½zÅŠ%æøf>¼³²fÍš¥R8|öìÙ«õœRŸŸ/tȳgϪ:§*G‰D"´ÒÎ;gÍš%‰t”X±bźuëþ¶îrïÞ¬Y³¢¢¢ttt$É7¦OŸ~ãÆ ™3g†„„üöÛo3fÌÈg̘qúôiú;NÃÏpÚ€ŽA8 Æ‚š°ˆ,XQ { \Î2k ^ȉ•žFŠœÑ"v‹±[è ß*H“s~„ŸÑ•Q¶ –¶Ð¢àø‚a±/¸aZøÃ-85Aÿïßìá²R‹^.cEe·VÔVÒ×eŒ>ßZ{r öøµ³6À›jÄD/öÀÇ l<]ráh ßR²•sØô9ý“/aÕ8&Éæ¿Kä¸=Äû&Û1Ñ»/']y—~ØÖÖvÔ¨Q£F²´´Té4.]ºT˜œþøc;;»?ÿüóöíÛaaa;vìðõõ(Ú*:tضmÛ¸q㌌ŒNŸ>maaQ.w677777Ÿ5kÖéÓ§6l(¬›ššÎ›7///¯}ûö_~ùejjªÐ™™™Ÿ}öÙðáÃ[¶l6bĈ¸¸8õ¥? 555##cÈ!Ïž=ûæ›oœßÚ^%‘H7nœ››{ûöí† Þ¼y³W¯^åB{/ %%%))IàèÌÍÍ‹/HFGG*¾ÝŒŒŒk×®™››«.äryvvöµk×zõꕘ˜xôèQÙyU<?aelÀN Æy¼€Gð5؃TDW c¥Êq–’k€ÔŒ‚TšÊxaŽ‚ÿƒ=ÚLN \×â‚‚y Ì—ã ¡[“`4 †`-¦)"§ \ô„Ë ®‚ô‚?á)HáèC>Lk˜¡ðü¯bZã)lA´3¦«Ö2`u¾¸OžDÖ}ÚÇǧqãÆ?þø£pZ``à´iÓZ·nÝ Aoooooï!C† >\µÑ%Ìe…S¦LDükwñ)/&-fîZŽyft;žc“TÛe_:‰ ‚ߣîs:gýí&µ ›ò÷àt>ÙÏízé*—Åeù¥üźû²B9Ú ÷²Kz¯n®5j´cÇŽÂo§GŠŸàáá±ÿþüÑÆÆFÐgš7o^vvö”)S Ô³gÏ+þqiø×_>}úСCïß¿ÿ¦Þ°œœœE‹]¿~}êÔ©ëÖ­ÓÖÖ.]’êupêÔ©Ë—/ >vìØ‘““3zt™Ä:7oÞlnn.p·ÿ'Э[·ÐÐÐíÛ·¯\¹²o»cÇŽ¬¬¬Ÿ~úéñãÇB«vïÞý•!srr6oÞÜ´iÓvíÚi N9!†ÀX¤$ÁNX ð LŒxÎ4š’U@L*õÀb 6)¸.ã*tL"Ba<8 «a\…(¨ g¡8ÃSP@ x>Uà†Ðâ•s—· ÓúóE(ƇÙóáK_›ˆ¨‡›V‡Éò.Ǥß%p Ϫàiñí`Ã{5RgoÉ%KˆñÂ(aߑЕÄãœî[²«ÇÛß±^ב½cÇŽNNN6lhÑ¢EÏž=…‰Â“'O´µµwîÜéççWä’øøøE‹õêÕkÇŽÙÙÙ_|ñÅöíÛ;öFê?sæÌK—.mذ¡I“&žžžcÇŽ•J¥'N,‡W6""88xâĉª¯ûÐÐÐ7 ¢V¶nÝšœœ¬n®ÆŽÛ²eË1cƨRΞ=»}ûvÿU«VÕ¯_ÿ?d®*½{÷VùòòòSSÓâÔ)))ß~ûí‡~¨òEŒˆˆ8räÈĉU‹½;wî<~üøìÙ³-Zäëë«1W凳C¡ˆ{6hòá*…>} Ì´0‡g Ò Hq'›Txö× ˆQbd2΀|ÿyàûà# Îp ~L8Cà&¤(× ^À9bÁ®VV#˜AMتœ3ýõ§,MaÂ×]ù4ž‡ØÕö*]­á €šÉJ" ÔK…gÏoÏd'´8ÑUqVN£eŒ®Î9·gs7eÊ™G­ÄØHpH?±ÖYx:IÔ•ÖÓÏñÛñBþu:›ýd+kÚ|ñ¤2L8µÔFøSy­q©¾%VÐSùû§ 4WÀ²eËÔXúôéÓ¥K—?þø#55uÖ¬Y 6Ò‡~þüù‘#GµjÕrss„ ¼¼¼<<<ú÷ï?eÊ”Êg’=zôhýúõ›4itêÔ)77÷ܹsåb®œœœôôôFŒaddÔ AÁ?-22ò£>ÊÍÍí߿Ϟ====;tèàå啜œüÅ_8::öèÑÃÏÏoÛ¶m=Ú¾};pÿþýÝ»w6lÛ¶mýû÷÷òòŠß´i“££ã²e˾þúë£GÞ¿ÿÌ™3–––ÇŸ={¶*Çwr,lÔ¨‘ÀuñâÅeË–5iÒÄÊʪ÷`vvö¹sçüýýkÖB[ˆ‹‹‹ŽŽž?¾¡¡°pÄ•+WvïÞ½hÑ¢Õ«W/^¼øìÙ³111¡¡¡cÇŽ]¸páêÕ«.\(‘HþøãH¥Ò=zôïß_c‘þ * ¤púÂTè®0æCÜN9£Ì# ê‚Àeø~‡: ªËY ¾ ùÐþ„ÏÁ¶Áð $@oø\½—-[¦ÚÁR<øV5ì ‚®Dk(€“v|OC0Ó¢ŒÝ zA˜Œáýa| éð `´ˆubrEXÊHV ƒ½`‘ðD`æð#(àGh ) ‚Dp‚ŽÒXÁxø¿Ê²U/‰Lc–LfùRVTVOOO%²B!—Ë4h r›|‡!‰Þâù2 š‹7¸˜Oa0$@c¨K@½á”ˆd-–J Zà÷AÀZH lÞTx  "‚Nˆ@KÁð„Mo¨¾b5]]Õjs¾R>X¬~Õ#´ò )¢«Ý€Ë6HbUûmZÌQrIQ¨.»èTé¤5Hö¤§Þ[œÆZ’¿lbá™%ÎG%ÊEE)ÈËÖÅ먺‰L™‹¢ŒÑÇsõ/ˆUñŸ¾óÐÒÒòöö®œ¼nܸñðáÃ÷¤aMMMîÝ÷*fú+ icÀÄð ôT`&åKp[ðäC h3àgx•l  :ô…0,á4m89à »áû7Wß°®ÐÐü¥ç4Xm(°¡§€Jê÷ïÁOƒ/ÀHɃ~¤$o=ÔšW°I •¦.…B)ÈQ ¾PþžS¨&\2…éÿEÚ[J¬ã%Åá~8 ÀC˜¤1Wå{{û.]º¼ÆJÆ“'OªU«Vij®®®Íš5{DbccÞ9½«×´…(H‡+àUa„Á9à¿Â3èàOhJ[UF@ ɪ`}*ý×wkúƒÆ\ý; Þ‡í‡K—.•;UéÈËËS—ùxWqîÜ9Í{¤†tt<Á\ÄÜO9gáwÐ}اôIûL@‚)Ô‡l¨G!’¡)ÄCS¸ zpCh g5m­1Wh ¯G7äÃ(Hƒ›°nC‚Ò\ 6éCH€^pòáäÁ ØO îB¶r^5ªü›^Eã¤S(o_öˆáÊ(Ýs%­¶]S Ôõ:àWe´™ž’MQ_mº@áë£\©K‚o”Gû>'•†_ë”›peôn¿¬|"ê_¥!ÊEUh¿- Rþ.m£±´0#ww÷Q£F½Û¯K‘:´¶yk IDAT6mÚtüøñåž‹T*ýþûï›5kæáááîîž™™™››;}úô–-[¶nÝú“O>ÉÉÉyþüy·nÝ<<dC"Çá%iàV&Ÿs0ÿKÉ÷ßáõ¡~1j i ©%æmÕhˆ†ËpÎÂeðTþS)¾ÖP¦4Tž 5•(±Ì·•§e–­:Ï”ç«S`ÜW&ªŒ®ž2Óú õг«””KKËøøx--­„„„çÏŸW­ZÕÄÄDØ!ü×>|((Œ TFׯ_ÏÎÎvvv¾~ýzݺumllÎ;'lQ8;;¿•RP³fÍÄÄÄÔ®]ûÊ•+ééévvvåžKLL̾}û-ZÔ³gÏzõê >¼[·n[·n ³´´lÒ¤I­Zµ=ztáÂ…´´´={öŒ3¦~ýúݺr&õÕW‡¾sçNtt´OݺuCBBärù¹sçÇïêêÚµk×¾}û2¤k×®êTîo`ή­mmm}ûöí„„aÜ//euôìÙS`ªüý÷ß}}}­¬¬æÎ{âĉøøøS§N 2ÄÙÙùäÉ“ÑÑÑIIIŷ冞’’rçÎ7úûû»¸¸øøø´k×î§Ÿ~3fL×®]Ï;7~üøùóçûûû7iÒ¤_¿~aaa#SÞx¬Æâcᇾƒîjno‚Ãj7ØH18B ˆ¡–6ô€mPS¹~õÓÛQ—l ¥ªdpJ™XÆ@Ãf`­\1Sy&ŸQ:¦?)é’Žÿ|75I{¶¨³”‰‰jgÚ)¹w+±¡2•«—E– _Þ\{öìQͺuë¶lÙ²3gά^½úÇôññ騱£¹¹ùwß}·wï^ƒ{÷îíÝ»W—o¿ýÖÈÈhÙ²e‹/ž4iÒ[e®ŒŒŒV¬X1oÞ¼Ù³göÙgJ +‘H AúK&“éèèèééÉår©T:bĈððð©S§ªXÿÓ¨[·nŸ>}vîÜell¬Î1_îøöÛor!&Öà-@"ÄAø ÎÀ@ø<ÀÜ!öÐIW) :Ò½EÈT.šå©yŠ—Á€Ëjæªt¡ßAÿ|è9LSþþÇŸÃ%•ªÔ^fóõ‘Zª_þ_x-Š<¹\þÉ'Ÿ|ôÑGêézzz*ar !!¡K—.ßÿýÛùr$$$\¼x ­ÐpN777þèÑ£ÑÑÑwïÞýðÃûôé#¨­·mÛv×®]C‡}7æ¶¶¶¦¦¦Û¶mÛ¾}{ÇŽ+./^Y½ËiðÇ]ÐcH‡=UádÀAp„:jª!œ•’¼³x-ÏÀÌš5kÓ¦MžžžõêÕS¥ËåòÄÄ¿&˜ÖÖÖûöíËÈÈHOO¯]»ö[Uÿëׯ÷éÓg̘1S§NýôÓOÛµkwèСrß`ËËËKLL43336þÇ)vJJЉ‰I£FT´ë …"..ÎÈÈè?Ú·¬­­…–ô>*iii¹¹¹¶¶¶¯ð84ïÿÛŠ$xR0…`3lƒOaäCÈAÆ@<ôƒÇ°FÀm(P“/y³È!ØNªœ²U+E¿8]é5g¬dšP_©«ªœ`d)½-t”èy.˜(Ù4r•tº/Ô  S,S-åò zvY/YYT/[ß¹²´´¬Q£ÆÍ›7%IëÖ­ãââš4ibnnú¿ÿºô´nÝzÏž=gΜٿÿ­[·BBBjÔ¨ñö¼}ûöuuuö«~úé';;»)S¦üôS9¯}ÇÅÅ}üñÇÍš5¼'ÜÜÜìíí«W¯~áÂ++«zõêýüóÏ+W®Ü¼yóÕ«WëÕ«geeõâÅ‹Æ1¢yóææææ'Nœˆ‹‹³··¯Q£†Ðª¡¡¡wîÜiܸ±±±±‡‡ÇÓ§OCCC“’’<==ߟmÅŠwîÕ4lذJ•*aaa7nÜptt,ÑŒ]¿~ÝÛÛ{éÒ¥nnnÑÑÑ¡¡¡ÑÑÑ5ªR¥Š§§gRRRhhèÓ§O=<<Œ7n|çÎÐÐÐüüüÖ­[k,Iea/^J9[øò¡ è@äC0WÁ`û[V…«ÊÀ-e¢ŠÕ¢D¬)õ†s•[JÛ•!eõAµ®’)Ÿ¸¨l 5~Òÿ~[µUÁ±ÿæ%ÿOÐW«Wéu¬s5nÜ8a$õ÷÷·µµ544ô÷÷†BaÛÜÝÝ}ÕªUgÏž½qãFppðwß}×¥K‡¤¤¤yóæùøø‹/644ŒŒŒ´³³›4iÒ[e«TuTý9yò䊈è¬S§NPPСC‡"##Ç7mÚ4@&“]¾|9--íË/¿8p ‘H"##%É×_ݼyó‚‚ÿ¦M›öèÑC$ 4»Ë—/ïСC‡Š´êwß}·iÓ¦ÈÈÈvíÚMžü¶\z{{[XXH$’ŠË¢}ûö…oÛØ±ÚÚÚ‚ŽÚªU«ÜÝÝ ÿ–-[ çØÚÚ ÛªU+}}ýÈÈH ‹   :uêlÚ´iíÚµ‘‘‘­[·úƺuëöíÛ9bĈٳgkÌHåÂR)b é F`¨Ô¶@9׆۠!f|Ç!ê8`bkïÞ É©5µ“Gú¨”Õª²`ÇŽÇ ¼|ù²Ïš5kFŒñßm´´´[·nuèÐá}`µ8~üxçΊƃ 6lø>°Z8p`ذao- “ÐÉÏž=ðv7¤ g¿çm+Öš5kÌÍÍûõë§¢‡>pà@óæ=]\f•:»êTŸ^éøºØìªq©³«³¥Î®+}7ìÊÌX Ê>ƒü´mÛvéÒ¥&&&ööö …"æiƺ½ç_dg>¼v¾œY-Ú·oìíí››;`À!&F 4Ðàµqæ?UÚ$¸£4êÃìè À ¥gc‰|¤¡¸0SåÎÖï%]rTù#Hi‡T†i rDÊQæØDY¼gj>–é¥VêsåÖ×(ÂE«–…Šš·|Pì&”“cU«9Δ†r6W666ÇŽ{#2ö‡/^¼t•?ÑÉÊʪ4½’7ˆ÷Æ·² €:¬Š¥¼UB®’z\©ÁBÉÉt«T*#åµEkQâ꺳òG^±;ËÔ¦>*4VË¢Œ¬Õ”öÒ x7/) £’j!)VÇü2¶i…p¾c2áÉÉÉ111ïü``jj*‘HÔÉŸ*?NJJzç¶"xRÞWèC5^Æñ•®g¯Á††âö_’’bjjjjjú>TöÚµkÎÎΕ“WlllµjÕÞŸ†Õ²—Óx%lÞ´†?þ;ÅVÀ]åï0åZÙÃR/‰.iÎqE9Q»¦LIP‹V…¹BeJè?gq[ymÅíªÆ”ÚœY¬ŽésU>ÐÓÓ³±±yO*[™Óbccã÷§aµµ5/Z¹à9\ ñ­ ®* äÊ!p²¤E³mÉí2œ–¨T8TÇV¥äŽRÍUŒZ©*KµÊe¬£Æ\•FFFvvvyyyï|MÃÃÃ=<<*MˆÒÌÌÌÆÆæ}P…?vì˜Fž±\ñÆÃMC¼o“k þm&¯P¼»åÙÙÙ•\Í÷¤a5†ªbð–Û*=°/)ÝVÉø ©¥|ÎAòJ"´µP.Šæ¨ñP¨V›”T¿iÊD™š·žÊ]"Ҋݹ†Ò(¤–¤òPéë‘U®m¥ Õ”¿c_Ñ\íÞ½[=ÞhðàÁ±¦‘’’räÈ‘-ZÔ¯_ÿÕî– žRAE-äææîÞ½ÛÙÙÙÍÍ­È¡ƒ¦§§Mš4qqq‘J¥?ÿü³pÈÛÛÛÆÆ&!!A%`QiuŒŽŽ¾xñb·nÝʨ–žžÞ¿ÿ7ÞÔׯ_¿rå P¥J•"1wïÞ½pá §§'õüùó÷îݪW¯Þ¡C‡âCc4xØÃt¸Z,}°òÇqØùÏ—·ƒ•óȥŎ~sÍUøV™ø¹òÇ· ÈJx*Õ)nGªQÜßX¯¤Ù Ç‹ýºbÚªšZá§•r^i·sçÎ]³fM¶@ºråÊ™3gúùù:uêu €ª!!!~~~•éÞöRž={¶ŸŸßÞ½{‹Ú±cÇÔ©S³³³ÃÃçOŸ½bÅŠ•+WfggïܹsæÌ™‰‰‰3gÎܹsgvvöÊ•+W¬XQ މ‰™1c†ŸŸßÌ™3ËØªëÖ­«–W°²Ó§OÏÎΞ:uêŽQ>ÇÅÅ͘1ãèÑ£ÙÙÙsçÎ >wîÜ´iÓnݺçïïôèÑâC3k Á›Å¿0²ÛÙÙù*1lذ%K–üòË/>>>=òQ""""77wæÌ™aaaBŠê¨0HLLT\DÕ©]»vmÚ´yÍ:ôìÙS(¡]\\ÜŠ+ÒÓÓ‹äxæÌáOî(,,ìàÁƒóçÏ÷ññ™?þÁƒ…£Í^ѲeËâ&?vìØ³gÏ|}};wîñðáÃ]»vY[[ûúúº¸¸YZuìØ±•ß³>|ѹsg__ßgÏž;vLu(11ñÔ©S¾¾¾B9¯_¿Ý»wï¡C‡>|øð?þ(þ84ƒ…¼YüËjRAAArr²°œröìÙ“'O žÇ 033 ìß¿ÿÑ£Gøá™L|xÛ¶mŸ|òÉÁƒ‡ V¯^=A°µC‡÷ïßW¾ÅbñëWC.—=ztÚ´i³gÏ>|x³fÍÔs 6lؘ1c|}};uêÔ¿ÿž={Î;wË–-C‡mÛ¶­B¡îß¿·nÝNœ8QqÍíêêúRÜáo©©©#FŒsæÌÓ§OÇÄÄüðÃݺuÓÖÖ®^½zPPÐþýû ôàÁ•òùóç'L˜ðùçŸ÷ïß¿Y³f¾¾¾Åµç5ÐàÝE6ü?K÷…ºxAËâëM ìkQ®Å•èú´K)ú¥î©¤ZF+=ô~Ò¾ÄÅ’e³Ê¹¬.ø*^ö^†Àtá»Ja8ŠU+ü ¨óŠæ*::ZÖ[¹r%`ll¼`Á‚aƧOŸŽŽŽNIIÉÌÌ”ÉdR©ÔÒÒR"‘dddXZZ=þ¼  àÙ³gYYYÑÑÑiii4°<Ø××wôèÑÀ³gÏtuu---uuuÓÒÒ¤Riff¦¡¡¡¥¥¥X,6$²²² ÌÍÍ d2™PrÁ6k úÈÈȈ?}útff¦Ê=rÑ¢E-Z´Z5;;;??¿Zµj›7oöööVÿÐÉÊÊzòäItt´p¦¦=5x¯ÞxQRH“Êüèüƒ–JkQŠ7r®R@DeôèÉ)õhVIERɾl ‹žr'¬t *S+¼aI”e3W®®®PŸ ¶j×®]Ÿþù€Ô§J¥ ))éÈ‘# 6lذaEt]»vÙÙÙiÎ+¢UíììŽ9Ò±cǽ{÷†††¾Ônܸ!“ÉFõÊ~4h e2Wÿ8Ÿ\³ÆÆÆféÒ¥‹/ŽŠú÷x½úõë/]ºtÛ¶m—.]*÷:¬[·.((èÛo¿Uÿºÿ¯ 55uÑ¢Eo§îš5k„'ü¹}ûöíÛK–ÊËË ,žÞ§OŸ#F̘1ã- \Û²eË;w„ýK 4¨`8€ G!•„ÞQˆøçK>VÊ-†Âÿ½j¾”bŒÖ¯Qx7>1«”tÔKé^ø $êao°UÎgý&Í•°òãííÝ¥K—6mÚ”¾—¾eË–‰'z{{ß¿ùòååÞ)ÂÂÂÒÒÒV¬X¡r–[»ví´iÓ„·lÙâàà0gΜï¾ûîÈ‘#ééé;v숈ˆxKztVVVHHˆ¥¥åœ9s¢¢¢¼½½Ÿ={6zôè6mÚlÙ²¥wïÞÞÞÞ±±±+V¬pppX±bŪU«.^¼½oß¾·¡ü£G¶©FuäÈUzÓ¦M'L˜òôéÓqãÆUrÁÚ´i3zô耀€7 8qâÄ©S§.\èïï¿~ýú={ö+W®¬R¥ÊéÓ§'Ož,‘H„ óòòŠ<Žw{d=z´à¾¯ÁË¢V­ZüñG±D£°°AÊ¿äðqÙnVôè¦ÜÄzXƒáßSdàú’71‡âi‡A”´Aå<«$¢a[Ð C-¶Ì¯lùÚ›˜èJ¥Kgxx¸ Îàäädkk[%“ÉΜ)”kܸ±™™YZZÚÕ«Wœœ222ÒÒÒêׯ¿dÉ’ DFF¦¤¤ÄÄÄÄÆÆÖ¬Y³ÜKrûöí§OŸzyyiiiÅÆÆÞ¿ßÍÍmÉ’%oÓ7RRR[[[''§«W¯fgg»»»?~üøÞ½{Íš5ÓÑѹpႽ½½@ôPî¸zõª½½ýÖ­[e2ÙÉ“'ÝÜÜ"##ííí_¼x‘””XYY5hÐàÆ‘‘‘@:uRSSÓÒÒÌÌÌ7n DEE öWTàÙ³gªÆ©Zµê’%KìííoÞ¼™””$”ÜÑѱ"ž£€3gΨ¶¾ÝÜÜ„®®2¥zzzOŸ>½}û6 ££#uêÔ„C¿þúëôéÓûõëwýúuKKË¥K—Z[[—{cmß¾}ùòå}úô9w›Ûœ9s"##{ö왘˜(‹#""† ¯*jE sëׯ߾}{||¼Á/¿ü²xñâsçÎõîÝ»oß¾Ÿ~úégŸ}Ö¼yóœœœØØØ¯¿þzÁ‚ÑÑÑwîÜ9tèÐçŸfiiÙ»woÿùóçWD¯ºxñb~~~jjê­[·Â¶oßîççÔ¾}û´´4gggàÖ­[«V­jРANNNtt´‘‘QݺuÓÒÒΜ9³zõj©Têçç÷Á<~üøÅ‹+V¬¨[·n½ñññ?ýôÓþýûÛ·o?zôh¡q=z´gÏžE‹={V$-_¾¼V­Z‘ûñãÇóóó£¢¢þøãsçÎíܹóÈ‘#;w>räÈàÁƒGŽ9wîÜääd—_~ùeÕªUOž<‰ˆˆ¨Y³fjjê¥K—|||222vîÜPAšÅ×®]›6mZÍš5 .]ºôÍ7ßdffNž<¹OŸ>÷îÝçĉêo‡Ÿ_¡2ÞÉ“'+ç9nÞ¼yãÆ}ôÑÉ“'Û·o?}úôE‹ýù短ZµGåÀ]äEöóóëÝ»·»»{~~þÅ‹…ת|Ë–——×»wï-Zèè脇‡ûùùíÙ³§xQ?üðÃ-[¶˜››ûûû3æ§Ÿ~JHH(±¨îîî!!!³fÍúøã+¢1æL™ràÀúõë÷îÝÛ××wéÒ¥³fÍJNNÞ¿ÿ¬Y³ E:uöîÝ»víZ“"cŽ««k½ª©©©!!!‡nذáÂ… W­Z%´á¯¿þêëë«ÊwÖ¬Y111“&M:zôh­ZµªV­Z©‹Â àêêZü+rëÖ­@@@@÷îÝ÷íÛW-µfÍš5j¸»»oݺ5!!aëÖ­îîîžžžE¾qJ)j¹`ðàÁÂ3¸~ýúÁƒGU­Z5áÐÑ£G£££§OŸ>~üø‹/†‡‡Ož<X»v­êò€€—ž={VP—úä“OŒŒŒj׮ݣG!åÿûßÚµkûöí;f̘eË–ùùù]½zõäÉ“À† z÷î}èСöíÛÏ™3'&&æ·ß~žãÂ… ‡~òäÉk×®UÜÔAKK«cÇŽnnn6lP)j ptt8p Ðª”ûÂ… œ——'<Ç   WW×€€€úõë¯Y³&..nß¾}Ý»wPuõ}ûöõèÑcúôéÑÑÑùùù666AAATÂððð‹/æää,Z´h„ ººº;wîLLL X±bEÏž=µµµÍÌÌV¯^­z;T‘!•öƒ‚‚j׮ؠAƒ´´´öíÛoœ"/²PTÁo~íÚµÇ wñâE[[Ûµk×~ÿý÷BQ….— µU«VEF’‹ª££3pàÀ5j¬Y³¦‚Šêî¬þ Ä IDATîÞ¾}ûµkתüËþùç‡Ι3'::úèÑ£ ˜7ož¾¾¾ðväçç/_¾|äÈ‘Jª§¥¥ÕªU«öíÛ‡„„$$$lذÁÍÍ-  víÚEú¿X,nÖ¬Y—.]vîÜù:" ¤–––Ö©S§äää ]<ŽŽîÔ©ÓãÇ“Inݺµ……EEg]<ÇC‡yxx\¹reÒ¤IUªTQ?aذa*ÍÜÎ;ÇŽSÅ:t¨]»vMš4©´ïر£E‹À’%Kúöí[vy‹îÝ»WB@†M‹-BBBŠêÑ£‡ W_¡xüøqƒ æÏŸ_ä9¾%èÓ§OË–-'MšÔ·o_OOÏaƩժUK˜tZXXtïÞ}åÊ•EÞŽÊ|Žª·£uëÖªÚKÕñË/¿´°°¨¸‚}øá‡VVV_~ùååË—;uê«~‚§§gY:€³³sE« Ô©SÇÙÙyãÆªWõÂ… )))=zô8uê”ú8#|ÒuïÞ}ĈüðÃ…å“ B•*U<==Oœ8¡J9|øð7îÞ½[DÚÔÈȨ}ûöª¥Â·Ë\U©RåСC™™™©©©·>îäätèÐ!a·C5»LIIQÉÃ7¢ººº¡Æ{èСڵk5ÊÏϯW¯^EŽ[[[?yòÄÆÆ°³³ËÍÍ•J¥Ïž=ÓÒÒªˆÅÒRРAáû÷›o¾\Q:vìX– ùå 11±zõêW¼ÜÜÜWVÞz}œ?~„ Ó¦M{åõŠŠ†žžž™™YhhhçÎ7lØ`hh¨:”””dmmÝ¡C##£C‡-X° 88ø|¸víÚâË^^^Ož<Ù¸qã­[·*¢0ººº^^^fff 6T_@prr²¶¶>þüöíÛ ìÚµ+""">>>**jåÊ•U«Výæ›o*ÿ°···¶¶ŽˆˆˆŽŽnÚ´éíÛ·KéO...UªT9uêÔúõëGŽùçŸV\ÁbbbÖ¯_ëîî^ù5ýúõsttttt<|øðóçÏ…žsøðáÄÄĶmÛV©RÅÅÅåæÍ›‡ºzå?¸ððpŸ~øa„ ŽŽŽM›6566>|øðÒ¥K|ëÖ­V­Z o‡‰‰‰¹¹¹ÊA Òž£——WjjêáÇ?ýôÓI“&ikk·hÑ"&&FÕªê/rzzúáÇ>|تU«Ê§ØöòòJKK;q℟ŸßŒ3TE]½zu‘7â uÆŒnnn¾¾¾QQQvvvûöíÛ¶m›¾¾¾µµµ““ÓåË—>Ü®]»]»v………uëÖí·ß~7n\µjÕ*ዤpÞ£­íîîþäÉ“'N >|ùòåE¦ ·oßúê«/?:4lY½vý¬œ¦âœÆ êÆÅÅ ?ÿ ™Læéééìì,“ÉœÝÝÝ ¼¼¼ $“ÉbccŒŒ¦L™"|Ëÿ+$‰\.W(:::Ev,JDçÎSSS¬¬¬æÌ™cooïé陘˜øÑG9;;»¸¸¸¹¹™ššzzzZYYuîÜ999¹]»ve_233srrlmmuuuËRUyjÖ¬©ÒÕ§oß¾VVV>ÌÏÏ6l؇~Xø {xxÔ®][.—»¸¸´lÙ²ì,99Y,›››—½x2™¬eË–®®®r¹ÜÑѱmÛ¶ZZZÎÎÎvvv=’H$ãÆ{úô©ƒƒƒ»»»‡‡‡B¡°üöÎ3¾ª*kãÿÛK’›N „„H@z' M:ˆT# æUTu}EFgtqÆAQÄX‘ `„@(¡C¤’ÞîMn}?ì9ûw¼IèRæÍú.÷œ»ÏÚû¬g¯µžµvdäÀCBBÄP§NròäIFóÀ¨ÍÍùåìÙ³áááƒAFDÏ?Ô±cÇöéÓÇáp¼ð ¡¡¡ƒaÀ€±±±ñññ·Þz«Ïç 8p`xxøÅ +++**Êjµêõú‹@\\\~~~~~~—.]&L˜PXX(vµóæÍ‹ŽŽîÖ­[nnn~~~RRÒoû[ŸÏ5pàÀ   1Ô–-[z<ž®]»öèÑãbFèt:srrZ·nm0<ÏÛµµmÛ666öÌ™3•••S¦L™6mZïÞ½Nœ8!¦²OŸ>òí9rdçÎsssÅÌ^³y”ˆŽŽ~á…bbbúõë'´zË-·üáóxçwª_䨨(ùv\Ò§eË–F£Q§Ó¹Ýî ~ßçó%%% C×ÐP§Núã?3gμàP/éEv»ÝYYYmÛ¶½Èâõz;vìØ·o_¹äl6[³fÍsrròóóGýðÃwìØ±^›sAÉËË ¾H ,¹ÏçkÑ¢Å!CFuîܹüüüøøøyóæ †   ŠÎk¯½–ýä“O^|ìôرcñññåv׎#ÙnWmYA¶fè´Ù}‡OÌ/,ŽÕÞ;eÌÖ­[¯oÏÀ€€€¤g`PPÐÜ3ðÆ^]W@ôš³X,×·g ÉdºÁ{Z­ÖÚÚÚ¼gàõšÇó‹ìh0®°g`aaáï~÷»qãÆMš4))) HKK»êánÑ3ð†šqÙ3ðª)>|øð½{÷^ê…¢g`Vaõß¿Üæ¨®8½[cW‹Fi”Fi”ÿHHHHÿþýŸ}öÙ¤¤¤S§N}ôÑG:¹BÑh4ZíÕ}£6¥Q¥Q„ †|ðZÒþë%%%åjݪѻj”Fi”Fi”›@ü½+­VëG™¿FãP2á•••WNÏ¿©¨¨gddÜhVTT$jœNç 8¼º£}ÊËË÷íÛwíPZZ*ÿ8xðà ¨"uZûðáÃ×7q{ÃÎãùEæZÎ;wôèÑü¥P“A233ËËËo„QDFFUUU7ˆa©›%ý\étºž={^—ÔŸÇã$Çsëü$**JP-ÇõICà jkkoÀáÕmpp°Ïçt¦ë2€ÀÀ@¯×+þ¾1µ$6ˆµµµ!!!ê:ªÆy¼øáFÇsí«/OZ·n-f<88øº¸õê0<<Üçóy½ÞD‡QQQ~Eô~®U“&M.† ú ‰F£1 -Z´¸¼Ë}>ßU<®Þãñ\öH.iÌâÁ/ãÚk0¼«%F£ñ’F{%ji®±º.õ¼^¯($¿‘Å`0ÄÄÄ\Åy¹ºpñþJª×ë½’~¯¿Ð°u:ÝcXüFè ´Ùl7&•ö‚/šVX,Nw‘¥ ×]JKK ƒÁ`°X,Âhá×ÖÖÖêõú›t5EEEf³Ùl6 †›e5^PŠ‹‹M&“Ùl6Ëp¹\UUUƒ!00Pb@ã<^EóèW‹­¯k÷oÌèùùE–2v»ýf±q)))#GŽ4 N§óâ{÷ý׋¬-»IW#°nݺ &ˆ•y1uµ7…|÷Ýwò¡.¾‚þ¿XòòòΞ=+ªƒ«ªªn¸ºYæ1%%EöVÒÈ l”Fi”Fi”›@áªQ¥Q¥Qþ¿ÂUaa¡$_¼”––^˃?ÅOÊÊÊÄáÂr}¥¦¦¦   ¡ƒçñ⥺ºº  à:rÇ~¡÷±¢¢¢  à†=JKn·Û ®b0ü«¤¤¤3f\êU3fÌMºåºÈÛo¿ýÄO4êáºËš5k6nÜxy—?òÈ#ݺukT#°xñâ„„„¿ëRßÇ^x!!!á »#þr²páÂgžyøðîb¡ÞÕi´téÒŠŠ `àÀòÌãýû÷oÞ¼yÊ”)QQQ§OŸ^³fø|öìÙÇŽKII;vlóæÍßyç: †œœ‡Ã±jÕ*‘¼–"† Øl¶éÓ§gdd¤§§ßu×]Ë–-‹1bDÝg|ÿý÷ÃÂÂZµj%Ÿñ¹¢¢Bžax×]w…‡‡ ­ƒaÖ¬Y‡Þ´iÓ„ bbb²³³W­Z5dÈ:¼óÎ;b¿3bÄõÙç]ºt /((8|ø°Á`Ø·oŸÕj>|øªU«€zçHOOÏÈȺêСÃ!CV­Z%Nìҥˀ®Ë súôiAyjÒ¤I`` Óé”ÆÆÆz<žŠŠ ­V[^^®Óéš4i’——4oÞ\§Ó9s&$$ÄívWUU‰ú˜ë%K—.µZ­“'OêjÕo‹‹‹—-[Ö·o_y¹X€Õj9s¦|W­Zsñ½º¯ÖŒ¬Y³fĈ¢õ®»î¾ýöÛS§Nbå~¯•Åbñ[äò†.—ëwÞ«¹ødÖ¬Y999éééÀ²eËæÌ™#”Ó£G¡ÕÄÄDñv¬_¿>,,ìÚÛ`Ó¦M‡ïN=úöí»lÙ2 G)))6›mðàÁŸþùÀO:URR"æñðáÃâ¹î¿ÿþk?laððð»îºKX€éÓ§;1ÔîÝ»·lÙ2;;{Ë–-À_|Ñ¥KƒÁpå?ý³DºwJ ºT®ÈâÅ‹ÿøÇ?Ž=z÷îÝŸ|òIŸ>}>ýôÓÒÒR³Ù¼qãÆ7öïßÿ±ÇËÍÍíҥ˂ ÊËË=ÏO<1hР-ZŒ7Îd2õìÙó»ï¾«ªªš6mÚe؈ËëÉ/$33sΜ9>Ÿ/>>~îܹf³ùرc/½ôÒ‰'ÂÃÃßxãV­ZmذÁïyä‘7Êg¼ýöÛý*Ú.FŽ;&ƬÕj/5dñØc¥¦¦0`Ù²e›7oîÛ·ï£>ZRRrË-·üùÏ®©©)//æ™gF·wïÞY³fuéÒeýúõ‹-9rdjjêW_}5xð`yüÌܹs—,Y2f̘'žx"$$$22ò•W^±Ûí-Z´øòË/ëG‹Åòä“O†„„lذá7Þ0™LÕÕÕÏ?ÿ|¿~ý Þ~ûí:\F Çe’â§Õ“'OFEEçååEFF8p ´´4,,ìÌ™3eeeû÷ï7 &“)33ÓãñX,–ÜÜÜ¢¢¢ÐÐÐ;w–——›L¦S§N¹\®Ë;'0333!!A¯×‹ºËKºöÈ‘#_ýuQQQllìË/¿‘™™é§ÕåË—ûÍãSO=•‘‘áõz7lØàp8&OžüØc9Ž„„„W^yÅçóåææ>ÿüóÇŽ{ï½÷ª«« ^öC]*ùvÛ¶m³gÏ>|øp«V­^zé¥àààìììçž{®[·no½õV»ví¾þúë tìØqáÂ…üñ„ ^}õUõ"Ÿ4i’¼á‹/¾¸|ùò¡C‡~óÍ7))) ˜3gΉ'ºwïþ÷¿ÿ=''§OŸ>©©©G½í¶Û¢££ï¹çž¸¸¸~ýúÝwß}GމŒŒ|æ™gŽ=ýꫯ6mÚô":RKUUUEEEóæÍ/o¡.\¸ð7Þ(++³Ûíï½÷^çÎçÍ›÷ÕW_íÞ½{É’%7nܺuë˜1cfΜyàÀ˜˜˜×_Ýçóµoßþûï¿?{öì”)S:vìx…‹óRçñÀO<ñ„ÙlnݺõóÏ?¼wïÞ?þñ3fÌÈËË›9sfûöí?û쳕+W>ðÀ›7o>|øðàÁƒ p]në r‚ÇÿòË/“““ûôé“‘‘!Î4‹ŽŽ¾ï¾ûÚ¶m»nݺ²²²ÔÔÔŽ;&''‡„„Èí¹Zzôèe6›‡ v7 }úôINN„xñù¤I“ÆŽ{úôéC‡¥¦¦ÖÔÔœç¯}||Íš5gΜ©©©y÷ÝwŸzê©ÐÐЗ_~ù/ùKrr²Ùl^·nÝØ±c'OžüÔSO:uê©§žš|ø]wÝUTT´}ûöºZ½ýöÛ¿øâ õ<®Y³&..î¾ûî‹Ä…=zôó¸aÃqÛuëÖ}ýõׯ¼òÊuy¨!C†ÜsÏ=eeeiii=zôøðÃÿçþgäÈ‘Çÿé§ŸÄ §OŸ.}Ä5kÖÄÄÄ$''ÇÅÅùÙ5kÖæåå½õÖ[Ï?ÿ¼F£Ù°aCBBBrrrDD„¸°k×®ÀyND=zô”)Sòóó¯cÛ¡{ï½wРA‡ÊÊÊÊÊÊL&“ØÊïôíÛwúôébÛ·o/ŽŒº.'=eggïÛ·/)))99YÌã<пÿäääÙ³g3Fnƒš6m*Ž|9räÕ:gõ*ÜÅjµN›6Íd2©é×ì Ë_HÔÿ¬©©IJJòx<­[·'d_ßg˜˜h³ÙœNçŽ;L&ÓE†ûM&ÓU‰]\‰´nÝÚ¯FR­Õ€€€!C†DFF©¿-;^o¾ùæÒ¥Km6[tt´´òýúõ»^Õ²eKyº¼ÙlþÓŸþ”••å·Õ R¿V[¶lIJJr¹\~A—íÛ·:t(99ù¯ýë›o¾Ù¬Y3`ÅŠ?þø£Óé˜}A‰¿ö'VûIbb¢šR‘°lÙ2ƒÁ žÇ˜˜˜+9„÷ª‹Ø¶¶nݺI“&ÑÑÑÿüç?Gúú믋ƃ¿\ïêÉ'ŸÌËËKKK{öÙgå‡ÅÅÅs´¶te¤ý¢g«_¼ˆ³D¥˜Íæ´´´+VÌ›7O4™½¾²iÓ¦ààà×_=,,lêÔ©ÇöÙg|ðÁ´´4i›ž~úé^½zÝyç½zõzúé§¥EKKKûøãçÍ›wI)·œœœ9sæÜ}÷Ýiii~‡½úÍã7ß|³zõêyóæuïÞýÚk¦´´Ôn·÷ìÙ3 àСCÕÕÕ;v숈ˆ4hÐEžA\]]}Vm«µ:cÆ «Õš––öë_ÿÚ/Σ>²}Μ9iii¯¾úê}÷Ý'>¹¤ ÊU—={öÈv´‹-úþûï?ûì3™‚ª× 0 --mñâÅóæÍS---Íáp¼ýöÛÍš5ûõ¯]RRL›6---máÂ…~$ù.ïܹS}Jgzzúu¯“õ{w´ZíEn•ìvûÎ;¯Ë˜çÍ›—––6oÞ¼©S§fffΘ1#!!!$$ä‘GÉÈ ÚùëW'N ˜?~^^^=–/_n·Û«ªªV¯^½ÿþ{î¹'22rÒ¤IéééóçÏ/,,œ1cFbbbß¾}W®\©V÷wÞ üûßÿÎÍͽ–ª:tèºuëæÏŸ0qâDñùÑ£G?øà1TùŒÏ=÷Üûï¿#´ZزeËìÙ³333CBBfΜ9nܸüqþüù“&MÊÍÍ]·nÐjDD„Ð-pÏ=÷Øíöùóç?ýôÓË—/¿$£"çqܸq………Ç÷›Ç¡C‡ÆÅÅ-Z´hîܹ .FäKuuõÞ½{ M&SÓ¦MFc\\\eeå±cÇ‚ƒƒõzýÙ³gχÚÚÚ3gÎ8θ¸¸¨êjUΣËåJLLüàƒfΜyäÈ‘•+W BPttôÈ‘#7nÜ8þüÙ³gŸ}º 6Ê塇z衇þkÇl6_Év»Q’¤¤$?îRCÿk3žqãÆ7îúêä™gžÝåbw“*h”Fi”Fi”›Ï»*//¿ìfe×QÔɪ;w^BÚeHyy¹øãôéÓl\ŽBªªªDÖÐáp|ÿý÷7õ³ìÝ»Wtxú/ù–8pà‚ìÊÿR[[+ËŒ6mÚt³ôÒ½YæQšÇáJ«Õª«©o"Ñét¦¦¦¦cÇŽ7Ñ´z½ÞívGFFÞ¤jÿ…Äd2i4Çs“ªE«Õj4§Ó#Té]Ñh4â¡Zµjuãœ~}Å`0h4šêêjqHcã<^uóØ \9Ž›7ïçñxª««oºa«‹E½o½ì4nñz½7ãj<¿ø|¾ÿ¾‡ºBq¹\7óó&šÇªª*u¨ìgpõ‡?œ¨­56.ÁFi”Ë–aÃmîsrrDÙJ/‰ºDgŸÏ'>”pëîý>‘—¨?‘¹u›hy­øŽ×ëÔ½§:J¡þDLD/ÄmESfyI@@@DD„ð†ív{ii©Ûív»Ýu‡*î jÝHC½æÕïŸn·»¡ÆÁ¢s«|Lñ‹—n.H]Í«µ*þƒ‘ÿ%NÞ¤î'uN\+ŸK ^­CѼ[}9ÑbiµZuׯ×+W(V:ýFLT‘\’Ú®×ëÅäê¹z¨çH©"q1T­V[[[ëw¡|4^¯oÓ¹oýpµvm¿ââàF‹Ó(rÙ2q"¢&;55õ“O>¯¨(¬o`½vN§Sx“¢O V«ÆK¼±j›åõzý,µ´b²Ç 0:N¶óQ[aî‚Aâ—¿"KsÌf³’^¯ ÔëõÒýŒŒ ‰ŽŽv8‡£  ÀápTUUÕªF‘z{AY­VŸÏg0Ün·Ëå’¦ÖãñÈ U¸ÝnÇ#:@êt:10ñ¹^¯vö áJÞÖOÏr.4M`` J I´&X§Ó T“.A¢^”/ù¤bOàóù¤÷&n+׆ÏçS v!!!f³ÙjµÊu»ÝµµµB“¢E§Ó)‡Z®d¼GþŠÜ¯øª¹}iháóù„Šä¦G«ÕF»ÝîõzåZ•‹S ÆjµNº§óæãÛê+Ã#âdDä IDATL…M0N€ @0 ¯`,l‡"-ƒ54óð)Í 6Ânxž†1Pë^¨üÖ° Ê¡  ¬¡¬pFÂfh[˜üü¡0Þ‚" Ÿ)wßìá(‚†íužWÞSJ˜ß@_hð¦òÍ4 ‹aªj¨õÊÓpÔ=¤;ÁCP¯A´M Vب<ã ¸žV.1ÁÛ° R”Oba¬ƒÊPgÃ0^ƒ>P}Á+ ¸à„¢œºó(VÀ;nfé˜é㈗ ˜+?÷º21ÿ¡ èxÎ˧>N«W,Ì”`U¦ãgª¤îtˆ•v€îÊP›À+𡲤VýVÎ8x4ð‹R« NüüÕ+'šÁq©ˆ€>Ê<>vøX¹pX!C5‡àO~&ÏoªÓé¤]P¿½ò(i ŵҾ»\.õ&TÔxŠOJÉ„„Ëå¶£®Áßñsz.ãˆ8Ž’’a+++/ãn&“) ,,Ìd2…„„8΢¢¢ŠŠ yb€Äéâèt:aפ_",Ûí&»^ëi6›Å\°Ù±^¯×étõB»_Híâ±°!ïäòD«Õ ¼š×étAAA‹Åëõ–””x½^1~© Ç£öÏêªHí£«×‰z Õó¤~R«Õ*¦ÃÏÏ“ ÞápÔÖÖ:NŸÏg2™Ä>IŽ­^º.\ÙÁ nØ)°<à3è î…Ýð5„z‰†?ƒfÂRX ‚¾…8ØH¤A5ì†jðÂhhû` X!\°†Ç¡ öásè ga'Øa;8¡€EP.Ø mÀ»áAH…­°à…4ЀxÁâ /,‡@˜ ã`| …-°ja%Ã0ýw@4è ¶Ã°\à#4‡ð/°‚~£a <à€LØÂÛ0 ¬p ºÁÐŽÀc cá~8«`„Ái8­á~˜§¡ZÀ`¨…N= BX ¾<†(‡Ã`‡%°ÛMohá!Ò`7Ü6øL°J 9ìÎð%8a ‡—`'x 'D@¤ÀK_À#ð>l‚Hˆeg/8A§¬ A%a7L]P [Ánx FA9ˆøõ.pƒ2àQø'˜ÀÂLø&‚¶Ã_ Àð$tU4™¤€J0œ_AX`+t‡Ó°„ô0ha9„ASø8¡šÀ1Xè•0Þ…CuÃ;~¯œ0µÒËQÛk:çÉØ© £ÑX[[+n%1On–…YQoœå$ªÇ)·ðÕ{m”t·ÚZ +#oR^^žŸŸ_XX(þËn·»\.‡Ã¡Óé„k¨†™z¸^¯7›Í‹%$$ÄårÕÔÔ¸\®²²2µ7£V‚ð'„]»xÀÐjµz½þJFmëýÌëõŠéü 1óü‚±õ:sbÈ{ЉS#fAn_Ôž·Ûí ¡F«Õêõz«ªªäPϾD÷ËCÐz/ñ»›Ð³• Ö½ÄãñPôsÄ× Œ×…«H°ÀA¨ÝEÃèiÐb!Ê`/Øà6øFÁrH‡|xÚC1ˆã‚a$á0à (ƒæðT‚Ò!&Áoa¤ÂÈ…r˜; ?|oÃÝð4"èËa¸¾Tžâ%ÅdŸSÜ”HÈVþ·Š¡) ‡Up¾`,Xás°@5Œ€Á¢\å€j0C"ì…÷a²b.]Ð D³AÐ>‚6ð8áPÇ@ UÐ n‡õ6x ÎÁȆ¾ ƒ· ]1 ñp+d ˜ýa4…ÁZø=äÃÿ*Ømð-À¯”Ožƒå°î„ÕFeö#ଅYð"l†Õ0î€lˆ‡Th k œ€#àâTa+Ô@[X&‚: W 6J¡%˜!öA&„Àm°ŠàI˜½ÁïËåªüñ!<‡á3è »ßúÀ}Êׯ€ÆC>ìüYƒžðñCÜÁ·ÐS¹j ‡ð‚©°Ôt½ màô‡4‚.pHÙ7ô†µP »¡̃D¿IPP°Ýjë&BöƒAà|ŸÕ›Yu¬¿îK{žBHHˆÉdŸÇ¥R«}>Ÿ`_ð?ÿ¬¦¦FìÊN§t¥ 3™L.—Ën·ëõza@ÕÁÉ€€€ÀÀÀààุ¸¦M›VWW ‹ÅrîÜ9áÁèt:£ÑèóùÔÝ¥M&“P”ÕÃóƒ:é[¨ñÛO$’I÷Ëï— *P‚ŠÀ*5ÂÕMð¨ƒcuG"´$.q¹\‚.+÷ R«b[`±XÄqQQQ6›Íív‹X¢p¸å ôx<6›MFçŒF£Ÿ*ÎÖ«Wä—¥gn4-KqqqEE…_xÖo“!¨“ë¡nÖ³!¸Ê‡#Šù8®ÀU3øÊ¡ž> -À>8ÅðtP‘!µÍá0 l€ûaœ‚‚[ šA.dÁ-ð% ƒpðÀ¿àØ ;¡ìT‚`ãa9,W<~Pa•ˆ’9 L+34WÁ•4ÐÖ)_²\Áæ0ˆ‚¯`ÄÃ4¨…°(Á &H‚ð>|íȆÍ`„|è  zC!è¡%„uʯ|èG”_½!ÂÁ ý R¡ zÁØ¡^@1TÃ=§ÀѰ`ˆ>FèÊ3އ¡DÌîÏa l‚BE ©àl‚‰Ð2 ¼½¡v° zÁX¥\¤€ bá44ƒ.A QHQ [!b`/9 4X)ylÄ£0€ãP¢Â¶ö°:ò”.…—5Ø| …Ó°L‰Uv…p š+€½n…<øW}è-aŒ„@Õ3î•ØÍ¡„BG?P1 œêâÕj Öét"qUYY)’"U#^f±K½È=¯ðQ¬V«Ýn/**`)E"Àât:ý¢”âZaå.þ’pN€œÈ̉0Ú¥&ŠL&SPPÍf.áA^äSKS(í¦0v"&¶2ý#ýÈzo(^†R¥U­ËOº’û ‘“Áƺ(0Ò`0È,ŽÏçýBë‰ÃáqÝ‹l äñxBCCKKKM&SÝ]‹Ì]ÕÕƒÌY^| D±®$<‹ÛFDDX,–€€ÁÁ©®®ìÙ~®ú±ÍªÅëõ®zC:tL†*–n¥òí°B¡3œ‚ip\P ½á,”Â&­  –ÀYX¥ì÷= M D õ ‚Jþ¬¤@9œîЊ`¾–Þ0ÆË›¬®ÕÐ ZÀ ëÀ ¹*«§N“x¡B7hy°Nõ¿¹Íàœ‚S`'xàh ZØ ·ƒ¶8­ç÷ð¹âºyÁÕ°²@ÃàUž„w¡ÎÁ½à€SJâ¤x! VÁÈ‚‡!:fÀ— ƒ®°úÁÇp"! Ra¬Uv Zp+©µ‘Š÷$A<ôQlk¶2#FH‡ï•Ð\p æ€Â^T2:û¡Ðlð<(жÙ½`/¤€b”ÝÏ 8©fˆ„hHS<§¯~¾ [€8`ú¸örUßtÂ,ØgTá¸úèé#ª¡#„ÂØ 5aÐ>„isàŸ°WµrÐñ—o}¬…1P­(' FB(,SBØ ¬k‚E¬FâûGáRDDD§¡¼¼\¯×Ûívñæ_†c¤ÑhÌfshhhÛ¶m­VkIIIxxx~~~qq±_Óšš¿^yꑄɆ~ÅϼªÃ8ꤽÁ`¬ºœ‹†Øe6›Íãñèõz«Õz©µZ­8ûÑ/éRו¹$‘fT࢜M«Õ*£j’¡g6›M&“ ™øeÂDøÔh4ÖÔÔ'I\Ø*È`Z½14½‚¤ \ÌÀÀÀ°°°ðððˆˆˆ   ·Ûd6›ëRíå©Z"uäç(«c¿çɆ÷ 9ªAð)BCC‹ŠŠ„ÃWï7Õ+D,W±~ÎWw¥Xv‘é;~nÇý¤ A|Uà„J(‡*'ÿ¬½)°žƒeÐzÃ^¸ŠU(2Ò”hO¼SàßP•P$Ü /Ç4œ|˜¥à„È¿¥PÃ>%T¥Æà$•´A(l/äÃ_Á)0>Ä@Øa+ƒ! ÞƒãJÄï,„A‰*œ+Áƒ#éZΗNÎÀ¿Aå ÷a$˜ác°Cx * -À"H‚ÁðäÀc¡-|]á>X©dwDî$ž‚° þÞ…w!FTB/˜m`+‚Þ`†8¨„×Á ga+ G îM‚ÏÁ ø;t€!*U£8©;À&pÀ9°Ã\˜«\肽Ð:+šúC¤Â& ý'p(¿8z©Ü)aàƒ "Uy¬^@~üxqq±ÈÖ¨QAD¥$Óìü~†ÕjmÚ´©ØÒj4šªªªªª*»Ý~ñ;eqj­Ëåª/ëP¿,º¤rèt:Éè»`®H€zMM×ëµÛíÕÕÕÅÅÅ~½i„Í>Édi5cBø.j¸RÓêÎC"¿TôöÔëõªQ_þºŸØl6Áÿk0„i–aɆ¦Æ-D>L†•Lqµx<‚‚¡×ëÅQÚ‹ERHèÖåÝX­V?ôù|b!©‰~tVñ‡ð)ëÝF½^ŸŸŸUØ%uáª5t…7 ÂÀQ0ŽÀ@ø“a3x )$ÂfˆPìÔýpR L&𠬆m°Ž@1xa:L…³ð< áp‚á+ø¬€÷ )¬„ƒ°ÎÀß ØÇF¬D»ÃYøÜÐ ÚÃ?nH{h¢¡Tœ‚КÀ"ÐÀ'0jàSøÆCO˜ßÀÇŠësàGØQô>‚4DûÈ¿B:¼ X ðGx§ˆ¿ûðÀÃð4å?´ÉöUlÜËð{è{à!ø3d(¹œ—`ÄÃð!Áj…ð‘ð9TÂvxÂDH‡3;A^xVƒ6ÁÅÍÒi0ù(ƒoáqh KDÐ z@(´Á _@)4ƒ;àкÃnh½  n‡b˜}à6ørà ØAÓàȇ(ƒ ˆ„»á3ðª XYoYðx`;l©C¶ …îð”*î»,otþ‡Mð´]Ò!&À ÐÃx€ß+k üjà]pÀV°ÂBð€æÂð“@&9P«D¶›ÂZÐÀLX Ó`3ø`1 JÁ e~浬¬¬ººÚëõ U;â5ñ@aŸ­ªªJXy5³@]†äõzéY½/¾HLLL«V­Úµk'BL:®´´TmC…Å1òX³Ù,†$ }½±¬†²VLªÕÍíûIee¥Aß8vì˜ ,TVVÖÔÔTUUù‘D„ ƒÁ`ðsÔ5=òËõšÑºgH¹Ùly 5“Þï›Â‡“ôt1ÉÎWSïï\dìHÈÈetlwkHÿ¹¹¹Z­öܹs§N *//////((¨¨¨¬§Ó)Xì‚YZï´ªë½êejȧS‡þünâñxJJJªªªŠŠŠÊËË‹‹‹kkk«ªªå=$$Dp…jkk…êÔµ —W?Á_-I^¦@¦’ɸ(ßù¡¬P>©ìµ‹ lQÂhBŽB9´†q`%J:ýè›`&lƒ“;Á-!L°)÷)Ve2æÂ<Ø­¹úENK¼“` ìSH+`,¤BhàNXѰ ° &A<ÄÂK°,ð=xa˜Ž7EZ:yác †6 [à×0 P–Ò›%'ÂF¸ÖÂ`VXíᨆQP fÈ£—ÓÂ`øRaÖ 7q(dA&Xà6V·Ãï`.˜À [!0ÀKP Û´¼âe¿7á1ˆRbkm  ¦CŒ†¥p,…žJ˜˜/À@Ø+À¦è­t‚B¢’œ% @[‚Z¸]ñä†Á ˆ†¦p„á¸N׫jÈ‚ ð=‡a°LÇ¯Ú ^ø Ž(W­‚i°"¡ìVœø°4 ÙÏ€rá¤ÂýP ŽCs(€½`‚~ÐÁÓŠ¿•½Áƒa@¿ºÌ@£Ñ(³Ù²Èh4Š›Í$ eHHHMM  ‹—Y}7‹Åb0DºººZo ƒ"£p"Tuþm{½LEuªü¿s/wr‘Ô[ÉÞ\É ò¯` œ†t…?&Ð/^q¹V¨¾þ1$ÂÃZ4>–ø˜‡ nƒƒÊ7w@¬Ò¾9X!"a9´€ý€Žû<ü'áü ÁåsJ‚v^H«°A.´Vªv€µ0¶À½à†}0" háK°ÂN¨„-JÄ/G²Ôܬ†1B¡t`„Ð šÀaeTÝá˜â¦œV€ùŸª‰À—hhÛ€°à6¨V°J\ø%Ä‚NAâØ·À)‚hø_¨€ÈT’ˆ­ öA¸áU¨„ˆòð<Ðò`ÔÀïaœ€uPEàq°ì .pÁAˆ„©P¤%ßÇ G! †Ã"8à èa ,‚¹P¨xQ£àÅ!ÁæÐzC+øP¢ßú¬Ri¯¬`…PúóÝI,´Qb¡g`tpúÃÊ œ c ÊÀ©=`%œ„ïÀ®D{+06~‚µ ƒþðtmÐ*`ôŒ‚ïàa¿èÚØ ©U‰0£F£±ªªª¶¶VØwAáA¼º2 _"­- Ÿˆ‰y<žòòòììlÁï(++«¨¨¨¨¨¸Ž}Wu::ÿ$"iif\.—„(iC+++EO8õÑ…&“Éb±ŒÔA‘ös:"C£Þ¤«áSÚ>iUýŒu=œi½^`áÅÕ„ùÀÀ@‚“QIë—?çgñ¢Ö5îb<âZÁ\ˆåv»Ï;g·ÛËÊÊŒF£ˆB ´w“õ×b#¥öMÕŒÉ_U`É€ö#ºrú*++eL.ÚóT¹ÉHšL]ï¶A¸òð7è«ä €ÍJÅR"l ƒipþêc4< AдP $ùã@+àƒþZ¢}äùXa3ô‡,ý!T¡]Õ@€¯)F§7ÁhIp²Péýa%œ“’óÿPõX£`8¼kaªBvï«Øå3 ƒ08i`†Ý0ôPYP ?BgH»Šj8>…I°S‰ u‡|x ਄0À¨… DÙ`ì…4h ÃRè­übè¥(<|pJUll`*|OA´T¼±3àƒZø„ÍpAXÀ“a0ü`?LP†j‡<¨UêgÇC-ÄÃYe=äø˜wÀ7° KÉöm‡L‹™Ð€nyàì„ÃÊÓ`¿’’" x‡Á0À£°J¾ŒÐj¤*¿b‡‰`5Pª¸tòÜÈï šÀ@8Í¡B­ô»P1 ¡°ÜZlÐAÃí^–úÈ„‰ÐÚÇp7TAkxþè*B1bÛ^QQQPPàõz…A/***((¨¬¬¦A¯×«=QLc4CBBd7E±m—LB—Ë%,»0‹ÂS©¬¬lho+Y‹êº+i­ê-1öËTÇ9ð³A<)Ûív “4¿†PV8¬EDy©HŠ«¥^Í#¯ W’ y~rv½›˜Åò‹žÉŸó¢Æ9‹Å"f_Í!^ˆp1/’ÿyA.©Ïçh¡×ëÅVæbh–~p%Ç/´ê×yëüpÕ[&Ì`0ˆê·‹áà\®z€¶C- ‚£0ö€Þ„÷al†bH‡f°à Øåã…ÇܦÂR˜ßÃ#ð ‡.p‚}|êÃÎ@_(óòˆ‡Yðü ¼°’á3ø5ì€P«0úÅ\ ^8%J !_±­ï(„`'ô…jÈ€,¨=ÄÃ{à…· K©Vþ :À×ð9x`DÁŸà,œUA…¾3øÀè aô³p ©°-&ÁRÐB;xšAÕ°ÕÇ;0RÀ F˜Ga/0*<ˆYð+LÜWÊG° Â!ì°†C,Ì„õ0>…( †¾°H  ià'8£ÄââÀ•° îƒ/`,®ðè¼TÂIx šÃ8‡à¨“çà5Ø÷ÁVØ ?ŽÂÕdݹЊ 'l‚*xÞV-ÅTÐ($ˆ*ØÇ¡*A°€r`¼ý ¤šÂ9xQa 9FxÊáhk¡ú€J!úÁjØ÷Âß¼|­a”Ý>J2Ë?”’s+DÂ8åðÛ fé¥'!3Z­688Øét––– ¢n]NhhhHHHlllPP &›Íæââb™RïîkjjÊÊÊD2@”^5DsP·h.*4¤R»E DZ ÌÈ'øèêÒ¥º÷”]ê:+Âÿ¨Ki>“°z"´(ñãjYü òEâ°.ÏPÂñË3‰L›Ô•T…´×~ÍýdÕ°ÜI´P7ôÏë7ñ§Ó)¸à‚ÜIpuÁ”¤,ä’èe±XD¤±¡0r`` ¸‰P‚V% •XÕ¿h[uìÓ&±ÊîÖÚw¤uv8ŠàÐÀ`Ø G 2 ‚à=È„#P á$[ɯýOןöp Šà6¸~3|90 –@{øÚù‹‡Oá6Ø Ûa8!â¡"¡l‡jH†På×wÀ XÇ«*¸ÚµàY]a xÀ Õ°ÌÐ*`‡u`…8m 3¤n‡A€*Õ/Ò-oƒvÃoàkè Fø\ÐNA®Òi:è \ñ) %pö4çåJb¡RÇ ^§5 #NÁ^ø^Kw­¼X!DÃ.ˆ®¦#L„í •ð dA2´†·tŒ…]ж@o˜á$BX ¥`A`‡#Ъ R(=öA<| 0’ tÐŽB.¬…Ö0Zªª‘öBB < A4ìU´7ò!ÃZ0Àƒp²`Dª”ü4äBgø ¢àNȇ. oÂpƒ Ð 2 ~“a”Á0Á4È=A«¬íO =ü…0A9˜ î‚{`+DC_8»à4x!šÀxÇÁ «à”)|È_MžL§NgΜٶm›_KÒ¥–TUUÛíöòòrQ›b³ÙD•®Ø„ŠîD 111N§S|³¢¢B¦¤3!°PR¤Ë¢ƒ´§ƒA ¢*HJ]³@S·Û­vYL&SÝ*]ùñ ªÙbõvªUgï…Ï!‡¡ÓéÇÁår‰8gUU•èRXSS# ¥ bÊbdy7ýÏE’#¤öÔ, P ²nBN|S]¤nh$n%2L¢œNw W~M¶êÙ%³F€äÚ¨UAö UIB©Ø‘ˆª@wñ€ê6`;…ä‡wF£xIGŸKÝŠï×Û“ElkdE¼Åb/´!”&êEä ¦¦F6]´Ùl=úÜq$Ûíª-+È®®^Ø.èc•ôÕpø šÃ@(€)µ`øŽCS+`„ÀwÐÂ-°DC€†.P«¡—?C„ž¸öB<| C`¼?ÁÈSê´â¡l‚±à€‚::É€&`ýÁ·*Ìø8x6Á!ç Làƒ!ßJ ò :ƒ>‡–›!úA4TC,”A¥oS1 v òÁF¥‡ zÁŸ 'Ô‚&C*A 8!†CY%™pNøÀG†p¹|ü[÷Ÿ§Ž6‚…¶µ”ÁZ&ãd@>X 3T(.ÔÐ b}¬@ ÀAØ =,p âá$†8ˆ…'áT€à{I’3ü ¾€{ vC0|öóʶGÈ·)ô¿¡P ?AÐÀýð=|a |¥„sÞfŠV§à¯P6è?B¶RøUn(Ph"-j†“ «•ro§RªQ'`(L†2(†T°ÂŸ Þ…ã¡:@¡BP ‚í0N‰1¶h`, WÃUzzz½ Ù]Tì|Àˆ|µàYøEíD ­°eeeÅÅÅÕÕÕ¢†TO@@€ÈaVFÜM4FRsš…Ý—e=ÒäÉ ¯ús±‘M Õ´1QX&­§:Ô&\7ñ€òÂ|;N»`}»ä IDATÝ. ÔÏÔÖ‹ 2Ì%Ü‹ššyÔ‘lá*œ áS Gä<ýdÕ/Ù‚ÿ"¶”×ëbŠm‡D,³Ù¬nc(D¦‚¤B.®$NH=KÈ9CôzkÅüÜ#9¿jP½ÿºŸÈ q]]v&DÀŒŸˆµz7#€ShI,QÉI‘ܱr"""ºõN’pU¯ûÜ tJ7š“ÐZÁ)¥LXì@å…!|Ð ÆÀQð€F)M€‰œ“†£ ÛÍbè k ?ŒQÞù£|ÓawäÀqH€É°Z+Tr)] -¼ÃáØßÀ*jLxás…«¹òçóX«@Ú>…ã— ü×z¥jXTþº•Új B%Ï·‚•ú9°í­ Õ½ œP*š¿P7]À §aTˆ0áô‚p*,!—â‡m€&Z&û°û¨² åKOBôð–YéxÕ±q»ÝÕÕÕÕÕÕááá‚W7Ø"¬Oii©Ø8_*'B&ðÕöBÆ÷ä?%KBrJã%»©ÊÞí]ä÷ÕÐ(˜âjò´Úª£dêvÀ²± û p%;^á‰}“Í/.OêÖÞ ·O"Çy~¢í…úÉÙ“è÷ë~íÇ´t:û/¾yŠŸ†¥Ëuñ1=YŒ|IW5”»*-L„áVøQÉIØ`ìT¶ÛÉð1A&Ô(Q <¦P¹ò”Æn#¡µ¼ … NxöÃ)x\K4è¼ü ÊL”X°•‘5°"À' ÐoZa¢Šèmü¬Gx Òø\äÒe½sX«@ %©ÁªåA§ œ ïCróÁ°î„Lø ºÁYx¶A*œ…¦Ð Š•Ú#уΠéP£x?ã4'±„Ñ>ûàßpR!g‹E£•ÚÕ2ÅP¶…"†˜ óA »uŒó’ê£ $Á¥É^l„!°2¼ÂPðÀHÈ'ì€`„C+XVQ°n…SpvÁ¨…,HUVBwÈD J§²DâÊNÈ„LGá_VíÀJ­›pk:ÂeÉ…ÃEIÕß[!¾ø—RŠ~C…Òe£&Áq„¯ãA/+¡Ú ˆ†¯µüÁûJåVox^…rèJ1ø)ðÂðÀ:åË ºÁ·0ÆÇÿÑvßqV•×þøßgf˜a H/Rl`AD,Øcï%‰W£&Ñc¢ÆÜä¦hÊMbc®‰£±÷cA%Š„¦ˆ"Òé}€˜Æ0sÎùýñðì윈7÷÷ÝøÂ™³ÏÙçÙ{ÖzÖZŸ2›Õ”riùGr*HWé¿Ì¤9j¬“C–àÊËËkkkƒa]ccc˜íŠUYYYqqqÈíuuNÕ.æ1áswé:û¥'ûñ]prƒŠ`ß‘` Òâ‰P2+¨EB}êÈ` ïœTWiP‡ß7½Îá‚"Zbõ’F¬µÇï"]¥s@èq…Òme_ú–…¢$—ËýK Jò¼%OÑ.ntÁG‡M@Aû—é*n£&ºñGê™G€ƒy;E8 Ç lM=Û9Œ Êø5ã±6Jp—ó×üŽVöjÖ³…åy¹ìŽ{tßgÏÒƒßó,q$M¼G–7™Á¯¹;fÖ°é™L·¼ ®äü† ÿÇ1~0ày(”Aç&àßB7©©©)1X /A$†LíƒT‚(ÐÁû7€ @#™·'›úC^‡Æ};3™üôìŸD¨=F#íUP×”éuH¦e¡7Œiøu(‚Óö‰ޒȇ'ôᤩ•FÚð«$…–®T’ËK ?ÍbîÌÆ¬ ÁÆBAì{듞^¨qCe–~ÿö…WÒ'loð˜ü#ž)-ÙÁ„®uAÛþñêLoò4rg²;ÛØ="¼;SÅüž½˜éJžnœLïvwVƒÆCÄ1öî¦÷²ü÷ŽYW¶Î´Û9•5|+óžÌ:ƒ5ÜÀÙT²6ºG‰„£ˆÔs]ÚŵZž¦‚WÙL_^adTóû2‘ÜÄïÆ> +[Y|¯s.gò$²Ìn¼ËÍÌb2ÝéÌ·SæAÜÅx>æhZ雳…»ã4ë›ü®MŽ­ü–)<ÃIÀön„z£tÅïÄ(ʸȾyqmœÊáÚs¹0vÞ‚Þî¯x¸Ø²œ­y-4p c wM¬àŽ¢:*å‹ L°†xŒSOO>Ã=Q1äBnåï<À¡üŽnÑÓkŸb»uqAo€[XÄFžda5Íæi°CèÙc«ÂæÈßêÓÕcq©§R”’“èÆù|À;lå»y¿ˆÐ›}£Ê-Qžÿ V³V¶1·ã¶‡°œ ¼Ç/XËF¾þÆO£Êþ¹¼FUû?¥¤5Ÿîê¤ÇBC…° ¾‚¿ü–––ššš$3íÁ¥¹M{l á ¶km¦(ÓTÝÔiu§ŠÆŠFNÁíñ~»(­Â¹–É”«ö–„é‚ú —ËIÜ4³'œŠ›1Ðÿøâ±I˜¾Ú4<‰ža1P@úÖ¤Ý+Òù¬¢¢"à­̲}[µ Gׯ’^« ‡ ®¼êž™$ާ“AÐø/`='-åP…aމŠD9%4ŠÃ¿Ü`‡uprO ¬““”™¨Ú'½ßM¬ ŠY\\t^Ú¯g’;¼ªö骒Æã,£œ›ù€ï²ˆg˜À@*i¥ßf2+XÅEºç Ì{uÌÙd§êúcŸ–Gì>G·C\¸Àㇰ”ar÷è{“gäEc_V³ŠeÜ¡Þã¸â ŽbµÊîÑÛðo”¦bëlƒùöåÅ"#òÎÏïv r#ĉläb ›Ù'ªäÝÀt6ÑŸq¬ +µ4suìÿŒ¥*V–¢ÞÇT†ñ«øXÆ"F±–›8®ÈؼÕy]x†ýÈr!³XŸ"í=«^¥‰:S ÜÊbÊèA?eC¦—D¬f#ØÄÔŒ 9ç½I1{³œAT2„µŒc‹9œ»XJ·¨s8ˆ÷ùväœñ=–Åv\h¢f™Ìb†ÓH–å,g¿.ñ~_OÖÄP~ÀÉŒåeºÓÂç¨a)#IŸ(XŒñ ë‡Q™R¯@/JL7êØ•,†Ó•çy|yq(x“{)áF®¥7/ùvÞyß(Rž³543—Lf ü‘~,âÜUç÷âÄ8[Õae“l;Ô™NW!N%ÎRÉ+Ã&¤« ûl¨XŸ)Ëlí·uóÍ¥-¥]×wÍËç²¹Î{vöS†gü%câÑ*‡úä¿”äáSéÏß8ŽÊ}Œç}z²ŒeT²œùqX5‘#•¢úÆFÍ«M&WSÇT>G–‡SRî1¸ˆIŒ'q U¥v5?‰´°yÎPæó.=Ø–±2ãW9ËRµÃô"§²š}™G'NLÉ Âs,âÔ(~!²‹Â1„Ãy€œÄ<Š#ÿX1“Y|Ž“b›«†PDÏTÚ~—nlçÏœÇ ÞäT1qñÄåt¥$r×fÅÌ:/&ÇÄAÎ@†D—:>¤G1‰£®ÄŸcø“¡?¶Øs¡7¿f¸€p‘g²’Ø›IŒáC¾1ödwVÅ_dpj¡zÒ“™mž„&¦°ÏÓ•©œÊTöc.ïòÅÈ7—šå8æ0“óxŽÔÄ2î‡ü’‡ÙSYÈiü22—ïb$GQüþå@"­é°‹éN‡Vª¨ï_¿ä´%å›Ë;5vêÜÐy¯I{­»2_’ß^±}ÜãZ[[ç\0gÖ峎¸ëˆN[:%˜‹¯œŒÄÑëÄ© j„D’ng%PÃDC22é0ò¦sv‹!'^”áÝ!¾ÓätÀM׬ÿ/U!±Õ××‡Ï ªêIã.q)k¯7öaÚ_^‡šUÉŠUVV†÷ €Æ0€,HiLèÿÜáOÿâ0›Ü™¬Æ¿œl¥ÓU✤ÛP'…~‡½ÜöMÝü¶}O˜u¬‰˜Ý… äÇÔs u)ºë{¬‰ÿœÁªœ¹y/ýCÀû†é~ðªgÊÝþ±Û÷÷ÙœEgíw×Í=7îãÎåÆßÕoÛé~t†_¿é¼ÆèdQÌÙôãbÆQÇ¡Ñ0¾1æªÀ칎ýcZÝÎÞa7¾ÂÔ°Š5”p! 9{åu"K«cYÍtAð!ZÙÕ}Þd(›âogð ϰŠ94潚÷LT¬å;FžŸð ÝÎpÞç+Œ‹ °«r~Y,ÇœÍ\Ѝ`$ϰž/q'w°ŽœÀ—ÙÝ4ðæ³7cÙ/5¨3|žN”q0 ™Çò^Ï[Ee´‘JŸgòf0•zq,'ò {3eÜJ=«¹€}ÀL泊Œ‰äbjM'~O#DíŒ~¬§‘NtãsÂh^¦&ÞÇyÅ;,b+“ãriDoò†8°œÃPêø6 YNÏÔ}ü¾ÜÃTŽ¥SþŒæ"fð휱yÓØ'·Ã,æ³ôসÙ“c¸ Zvmà Pu°Ž?2ŸsÛïÛƒ-¢ К:þ;d¤ÖÊÖ™×ÍÜÖuÛÐ7†uxßy}°hø”áç _½ßê)WLÁð7†g+³S¾5¥½"CÐkGp0ÙEÜ/-- ¾Y 8;IWáÂ’¨XûaXòú„Ê“.Éσ}_yyyçxà,vÆSîðH.µµµ5ðdw:±ßùohhزeËÖ­[›››ÿ·…õõõ í?·ý­ ß:”kÉøª °+èâ&’N;»ªž¾k­£´\…(n’,Hyyyx“pÙ»¶èüz´´´466ðŽÛß¶m©½g6¨÷ Ç›|‡ò`´5z†ñŒä%æ1’K<š-º:ßš3¯wå#NßhÚóv/¾pm~]Uî[¾‘É]8N?^Y³þ¸\ñ=ÇeÛ* úXÙ8-ˆýèÂF$[Idævg ­ÜÌhd ßd‹˜Åj.¡Ýø-òÖF—úÎÜÂõT1Ÿóø‹ù>Ïqc¯sJT<:œOØÈùÌcõ|‰Wòz3›Å‘×u)÷ÓF-ûó6—DpÄj'GnæiZÛ¼ÂR>Ž@í½M=kxœÍ#œÂRÞ¦7_ä~K)‹S:ŠWÓʯ8…·¸„y–ãx§9š’Œþy ¼¤šæXêØLWN'Ã^ü•!Q¨÷R*y…9†ZN‰§p-C9™ ³¹ƒÝ™Ã>´rZ<;D9Äl|l.àfRÌ^á8FÕ¾#§$¹ª¸•/²C˜I7Vñ¶s ?ŠËr. bRÁK:Ÿ£)?Í»?œ;¹³Õ·h`<÷q97RʵŒåç|™fÊÙÆVªèÆ6>¦„Ÿñ§Uí'UiÐZøUè·´G´V¶¶un{ûÚ·+×T޾uty¦<Û#ûΕï÷âq NXPZSzÌoŽyá¿_È—äàð“~{Òëß|}{·í]²]Ï)ô¦B:L†Øvü ÀŽXÒÚ i"Ñ.  "á“&3•¤Û $é½ö.jˆýªÀ‹9qÁHîBët~X™4ú.ä¹`ÒúiÁŽ«à%+À vý-’1[eeeè/¥ÙŸäŒ5?;l;‡uN wq[“CAaÀJ“ßþ¯€BI%š<Ïi¨d¨#ý³ÂoºØ~_R¸åêès»°WJ˜®%±êúa$Ç„–ÎÃqtÔ‰Qä¹£Í=›¬œáwCK†½›ó­Ü¹|ïÁÝ>°½ï'[þ¸$Sß¹Û³“7‚üäÏõ<æ ÷|ß­7:bŠI_â;\Ï%ÁïÙ-"ÅrºœÏúñëÔÏÄ-t\«wyž¯ñƒ8ˆ_q¯Åˆ3†ž,dcTêÊúE%ÙïG¬öoù¾ËmÜÃH²\Ä,îá0>¢.®Øsì﨧/2˜=¸œ éJ†?òeÊyU<iѯÄñÛݑȵ_a7`&Ìÿp:Æ œÂa<Ä%å¦5ëÂ'ÔòCnc;ÍÅnks- Ž´bÎdGƒÇ f?¡žf”æ•ŶðJù?fÏö;œ—¸…£8³YGbV±ë™Ç¬æQLcy*¦“,-Ç›ÔÒ“/r/ÒuQgý°ˆ.I$ùd4ìž‘šl½ÎŸ¸Œ}ØÄq¼\䤜R^ãøbÚœÁò­®Œ—à;s:Ã#¬q—ðUºóæòaƲ&¿Ê‡vˆN g›úÀÞ ÆŒÕ‚cÁ… ŸºøÔËO-­+ÍåruÃë¦_7}ô£ïýνé—-9lIQ¶hÌ“cN¸õ„—¯{ù¤OêŠzÒ¹'T„!²'Á:Ô ñ+éñ‚”œ–½Hć¤CûVäΆ»ÎUÉÅ$’|>@Úß‚4b" Žß…kbzo!Ú_…%q)ø¾;Ó‡ +–4Ø6†Z*!¤ï]B^N¸nÁñ+’ìÂP1>C¨«« Ô·€Wl·ü7:íq?Ov'°Àà}\P•†›U€Œo¯j€W°<%Ž7¨Øñy³éÁ6ÇðôM$-\Â\”™`øüΠê_·ýóKr·Þmj®óðNÙžuÛ{Öþ·}j¶,®ë’i+ÙÞ{Kã‰Ó-èk%=éÝmZ—Ä<º™¥ O]FrÈÚèG =£Ž8öe ƒ)‹ ± yЇVNåK|B+ÇqQ¹¢«(gj‹~éÒFÞÏÙÜF%‡pfT?ªØÞyÕÜÆ&&QűœBW>ŒÆ€#yƒ=£¿mkä,WrÕt¥’%©‚é}º2—¼Åç˜ÅÖÒ“IÑÙùPvã$òqÆü*Çn³žãèͨ˜ Jr3•Jz°OÊ8¸'¥t‰½ £XÅBÞ-²’5¼Ï Îå}f1(cŸ"sóža6£XÊr²Œ`FÔ¤ŸÎéœD–/PÁßɳš#ê’×Få”zöf=Ýi¦!âÔ{Gq¥‘)œÐéÚ?'ƒÍ`<+˜Ï–"§åwèÛNÎYAÇ3œNôc{0†GGæ°œ‘¼KºF–e|>£[Þ B!Òªo¿ývà%sãdüžtÕg(ñžOZ[!^ìî%¹Í{o4qPIKIÃ^ ³¾a÷/ß Õn»±h[¯Ì±{ªšÂeŒ¥3“9&úù‡SÍitâH.¤,Õ̬çp¦Ñ#ZSia?f3ØÎVþÂìFŸXB]Ä~lÊ»ƒ³RŸ0i÷ÒAz+y‡?poÞ š@Ìg6ä¢gà¾JYã¿Õ‹÷™ªœb_ϘÉÉQ¬¶§³’ísÃ9>õ‰'°$àòN­u3˜ÂãÜß3xŸ±%ÜÃSÔ0”Z&q+"Îð6^c`Nu~ÇéŸa»3‹ÙVåˆÎ®¦âQ^æl°– s^Ê[ñg3I¼gbß(€tÏÓÄV3†ýx¹8ÚÏOæp&ò~ÂVJ¸™Ÿq)÷PÃ6^a|J©::{½G+©¢;ü1oC“¢œË¹. Ԟƾ|ÄÇ<ÄdÙ;’“‚òÈ÷™Ç̧;9úÒ­¯ 5îÏÚÂNeb, —±?×F6Û³¬°ƒ{~*­|ÄX`›¹ŒîÑFë¹è ò'êãfk—ñ*³ÙÄî\'[S¸”%ÜÍ7ù5×SÂgÊVöc«ø[˜ ´&ÿ3P¶ƒX™’#B#(¡°tœðªZgý׬^Ë{M˜8á­3ߪTóôæ§û÷íŸÏçû-èwé~—nî¶¹tké^÷šsΜš¯Õ´vmísDŸ!Ó‡¤·É³ &Pš·›nŽ%¦D¨x$„¹4*¬` JœpÊÿ1àxšôÂwQÜ´‡¤» ã’¦Û£û’а}Íš°’–](v“ á§¥­‹¯`UUPņt‚;ð¿øýßÎ;<8ä¤`SR8 Y0i‡¶_¤½œB ‹“üdg"÷»²c1­DZÁO#ç²Ôr!gÆ=ožáôàe¹Tã.¬ÛèÜ/Ú\1ú7¾8=ûÕ }ËGÒùìîκ«þ÷ßÿå¤ÿZ±nÀÙ_ÿû択X–õ¨ÅÿÍŸø/²Œ«¢mîI][ ¶Ó@¿àª¨ü4•î, Y'^p9‡‹¸ŽG¸…Z.¡7·üÃØvÞe\bM ·‡¹,_â=ÞdßãaNá¯,âiÎ m½N_m2wÐ@–{hb*óYCïtü˸²Ø©m^äHžæë<ņ¼Ïp!ff Ì[Íw¹×y‚jær:Gq/¯òåÜÊ],Š_*­>Ë+ÌåËü‚/òCª£;奊—8ý8Ÿ©´Ù¡º{c4— ÖÌ!ÏzÎks&?æx&ÒÄÏÉáPîà!ŽçªÙF5çQÇ'\Cw~F–9|f½¶¼+ømÔ ü®|“»y” 9žÎ¥ÞÈ=dYÁéLb5Y*)!Ïcl¥˜jЏ˜‰”°ë©a&Y׹Р*ÙÈ]\Æ}Lâ?(cyÔN|(cTÞ<ÊTsQ‡“çöóƒðót]™Ç£|cùßoý{ÿ9ý~äàWÏyõãÑßóþ={ôß#SžÁàÕƒ¿ý«ooÎoÞR³%ט뱨GS[S×\×òÍåAc4Èô…h’Íf×®]Û¡>B‡1¢ÃPؾ˜´ï¥ó‚s H6i)ô´oaÁ+ÿå˜-¦“qp« q¿=Û·€>tÈ IDAT½›ž%Ë’ö;Þõ*}Ê$‘~Ÿ4å6tJ“ÞoúÛ¿sèÝ%ªöŸ¦A’b!Iòe¢Dœˆ÷T“áÜD7ªäN:eØ4¤×p×¹'ŒÊ’¼õiPˆ*²ßÍ@f³CYÍOØÈ6VF¹„ƒx›õÑ穌°‚ÝÙ]Ùãê“‹L_á†7‡¬ÕÜ«iæë¶•5ŒÛº±sU5#æ—m¿}ôû]ÿÒãñÌì±:ûçû}•Û¾¢qòz³bÌJ3{‘¥šʸ:Úçy'¾r,—PË0ªyA,¥2"PÃs ¤Œ'(§[Ù;JE„Y× "ý󿲄²è·»ˆ³h¡„ÿ —í¨êŽfN½»h¢†%¼ÔꊞqIÞ;ÜJŽÿd33X›SÃæ°"êÁ¼ÃY›ßѱC–r]âwß›»)擨½»™ ärÊYË™ð SÆìÍò{f¼A1SèCoþƒN¼KžËù-O²€­òw0O2—9ÜLy"Àeldƒiθ<ã4ÊXÀ|>Œ˜ÆUqO°ŽET3š œa™#hc#Ù2Þc##—¹G|Ãñ[âÿî>NaXäz/¡‚I‘’1-:/ŸÌ©lç.àbn§‰}hádæÑ/îf²^ìêüèÿ± §£“ÙÕòå˧M›Ö~k¹ë.MûÍfkÕ–7”—´•T®­üä„OºÔu©ë_7eà”±Ù±r°víÚg*ŸYÙcåê½V¯ºâ½/¼·ø¬Å-¥-}fö ÛùD¼ Ĭ }W`)²‹TÔþâ“ް‰N¿ ¢¢"ÌuÚÓiÛ«£† +˜Ü|z8\µŽä⽨ÿ–a|’ ºC?6´­iù¤VVV–|Ùô‘tÓyº=¹5Lt p+É‘ ºÒW˜ÖïH/{QQQ¯^½‚X_Ї xÅ%ÔdÛOC*JP‚é)WR2&ÌèP—ï¶Ûn#GŽìÝ»wŸ>}JKKËÊÊ 1ôH+++Æ2V„µMŽôuL@ /ÉΣªªêqGíB‘½[T§>0þd~ ÓéÌzVó6Oð fs&Sø;ƒ˜Ã¸âê½³¿zÂWwwîþ}'Zuí“n¸¦ùú­vojéöÞí3ùáˆOÛÐ}ݦ©W¾“ßsqvÏÅñ³îb-ŒäCš˜Àótg?â嬸8ž²Cy5öyêx#ʱðóÁM”p=s3ƒøvb‹¹ŠŸR¹eƒ9„;£*/ÎàáȦêC+ÈÆGBìß®`o2;&þI|‘G">èYQ7"1"nà. [Ô'¬çŠèžÐ– ¬†7³–±”£™Âf~Ó!нàõßÀ\­:aU¶kvä#§Þ4µëÚ®»mÚ­Û†n{Öïy;×üpݬ=ð/þRŸ«Ï¶e×ï±~ý^ëwV…ìLiéßh"%`ŠmÛ¶˜õ%]Ç­’yO’®’¢3‰›éñFh!\RÒ,°ÞH‡tÓ©¢¢¢ ×úì4þˤ¥¤ÚC±ÓXÁq’ÛÒ†#AK)äÂÒÒÒ„x”ˆ˜0]wî &“$ì4î1ÁÜ‹¢_; ¶Ÿöïß?KÔÕÕ­[·.@Ò…9ký{­Ý¤¾ KZí»¸íÓUðT]Áv~ÎeQ¼†+XÁ Å®.rx«-ôàªb—æìŸ7‚†0=ËvKv÷Êèâ Õ-W¾°ûÍ57µËëcû4ÝÍ+_úYÃUModÄËG®_t¸k¼~„¯<^Mñ—?ÃÓq <›fªÑMœÁ31?­Ž°À­j¨N9V<ÁUÏ|‰_¹‰^ãB^ŠÁn<³¾‹×¹=k?â ¦D¡ñZ¦²… y“• Úîžãr*XË,æsfP¤ÍYLe ûñH‰{Û¼Ît–pQÄÑ]Å|š¸*~ǹÏ ySËj–ñ_LgaЦ!šKÕñl$ƒÿ9œLÞÌËQd¯¬wx€Óx‚cÆ;”ð ªéÁë ˆnU”¸=‹iÄkÅNÊZ@j™™·ÞËdéà  'C™G +çX!Ù÷`QF¾ÈõYq$“8'‚Å{3,="*59jÙÞ‘#Úê¸Å¹€ÉEn SÎÙÊy1•ß3‡qq.àu§Ó¨àHþÄ‘œËÁ”SÁ›l¢‘¿ÄØ?ím¼ ª(€ÛŒLÒú{›Ú¼ăn? d}ÉЧ‡¶önÝÐmÃþ³ö¯Y?èÝA—=>)?é©O ­Úë^vë4ü©á+_ÙÒ­¥=Ö#ñ°HǦÿ•ë§?‚Zà€ÊÊÊZZZ–.]Ú~˜âuÁ m×.ÆIdÕ[ccc:aˆS‰¾oʉñqå—––VTT´µµÃå$¤Eâ?eºJPÿR1¯}{pgÁ½¤¤$8i%ò€!ë×ÖÖ¦µÌ;|“¤L¼@{J0¢i¨^IIIà$°Æô02Í @QQiÆ A}*¹›Áˆ$höH ÿÛÙë_¦«Ý¸‚‰Lç›ÔÇÙþ{¼À`ŽÏy&·ÃÏþ$öÏù}Þt®*²$#—51w@¶èÌñïåfR»Ï­w|½ùôëj6*®—ŸpÙ¯Œ-ž´å÷®~õúg³§<ã;§8æ ñú%6õãf2Ìeu ²Çò·¨×™b£«ÞAtbò:÷ñÍ<Íû|ž,yîf c-E³‰h¦’Kxˆë:¹ºÕd®*Ö+oTΉü™ŸçxÞ£Ž2ä)çrÐÖäF¾A±1êþËSÏŸ¸“7˜L wñ}ØÄF¾Î=lᇼy÷æ\–u9è«UÜHwÊhd+åÜÂLê94ïuÖÓÄøÐŽ‚/O†&±-zƟĽü™LμŒ8‘³ò6äL–’S9„ø-ñ,ãl¥‚·(¡‚¯QÌÁÜÏ‚œ6Îf_æAþ@+gEtÃÁ<ÏP>C×Äl5ÏÄYÔŒ¼¯çÔSÃߨç¿Á¡läJ†ògŠYËWx…½#em]ÊÓ$ÀVŸŒÿžÆÕ9ói¥š­¬ã®.µ,`·²•WÉs.§ßd \N3·Fzß2ö˺ UP(t¨£šTBM=šúMéW½ Z‹Ê•5j²¥ÙžËzÎ=fîÕ_=í€iOü䉟ؼ¥ùísÞ8màÖ>[ÇÿyüìsgzrTRå„¡}²¹Nì3§ì #láÃÖ>LJþWq§¼¼¼{÷î;óDßÅF>±~ç&0QJœýÚg”€^Kàé‰cšúš4‡Ìtoß•m/‹•Ä÷4F¿¹¹9X_VTTd³Ù­[·¦eMB²7ßa™›ŒÓ v0iÉ«]«î"}Ťó™<“im­Þ’.k²°¡X I.Ý®LæD\±½¼azh×ÜÜœ.Ó†–É-+¸¹íÓUŽ·9Š,³èÃúhÿóeÞ¤sÞ¡ìËoø5ëòrrFQF÷¬ŸÓÇ„srÿs‡ïvʬì“9òk­Ïý$óü—Ú~zSkÿg:]د×è—fëeoðý3;ýñ뮽‚gñ?È~™Áì•Ô±"µSîõXCæÞ›ø<×ð .ç1ZYEŽ2;*†Š¼?3V¡•lˆ2¬9$cx«c2‹½Õ¦™=ø>¿áužåE8ˆ“3ŽÈ[ʹ’-ÎßéÆäómÔј·„®”Æ¢$‹}ø*ÓèÌÕ‘oh–ŸÆüËÿ^Éq\Á3ìKOfÇ{æL{äÕ²œn¼œw$/2“©å¯œÁVDÉ×ǘÏ͜ȥ,å ¶ò8ÿA·ä}“©ez³<£OÞÛ,c 9Š6ó#Že)éË‹l „õÔç ákÚ¼˜ßætîãJú0/ð±OÆ™éˆÐÅ“pJä}‹Ök·QΆhmóý)çÇ\ÂÚe;ù^«ïЕ~ÀÕœÌLöfe©Ì@{-ÙyàH ½â íÓUM‚È€W¬8źÃÖõŸÒ¿çÜž­=Zõ6ã°zl¸óä;Oºï¤Ó^<íåk_î¾¶ûw±dÔ’s{L¿dú€Ezf{ªÚ1i‘4Ù‡èÜ¡´¹¶F,­HÂzHK™P6› °ò0béÞ½{uuõ²eËòûÓ!—¤·Ø ‚#É7!žvè–ÒÞ¡¸}à˜orñδêwQƒ&ø‘d®lB¼.xτϔ6 IºvÍÍÍí‘eeeÁA±ý%¾WR\&h…ä üS’ÔžŒÇv±zãžV«««[°`A.†¡ã¿ÁCh¯Òá]ÛÂ¥=Ôb)߉ßÃ' £5j“/c![XG?z³žÇx9o5½©yµ…\VU¼òü’ÍçVOÚ«ñìŸdê÷Ïï³0wþ3ekzm=sz~a•Òn¹ñ-ê¢:Wu5¥!BÑÒŠ±ýSÔ`~Ä<Ö3ŠRŽÏè”1‡Zª9šõ¬àu†QÆîœTbxΛQ<ûe†g Ϩcï=ß*¶ËóÖ笣ˆ˜E–wéÏé,ã`&©áyúÑ@ò a¯1„­ôc{(=©aMäÌI=|È@_æñKy“E¼ÄXÞ+rlÞólg«ù/` }ùˆ!|Ÿrrlà:ê#a!Ç1u¼EUœÌ=\ùÅO1’¹Žžcg°˜tŽø‘µláG!ü _ÃæGÀrz°wTg?žŸr2ÅtæmƳ¾ÈyçåÍâ|Že o²&ZbÎ`G²‚E¬‹"诱‰å,å<Æ1ˆZ:EVòi4QD{Fìû6æíä¯æÝØNìʴȤދÝy„WãC¾ß3>"V–æ<À`î§ŒjŽa[9Œò¬Eµ*›¦ Ïœ93 cÂT¿¬¬,lÒ“Ê)é´qÒ}ž’’’žõÜt覦ÞMÝVt«^Q]¿{}÷mÝWX½¥Ç–Úžµ[wÛº~Ïõ#Þ±dô’Ò†ÒVô^Ùûè»N†ä™L&7„ÀŒç“0Ô>f…P …%ºMEEE‰vQHEá5éá|2¢O„***ºvíÚÚÚºiÓ¦v;t­LÞ$8З——WWW‡ÕU’œ’%J8jðpz’ÛÂOq„ã2GZŠ>A$¦CgzÔ”¤Ìtº ®qö!…tX½IÎHÄ »té’÷KKÂ'Å_zsxÉ *Ñ ¨‘\jÚ%ýï`ãYAÞÒÒ’$°ÊÊÊðšä›†ç3H3‡;^\\ÜÔÔ\­ê²À„%©“ N¢¾‘4 ÃR$¬íPét‰Ãõ4öˆjÑ20cN‘CòäºQÊÞ¬â¨(¸0–^¬eOSËÁq¸uÒ¾dÍÑê&ç/ü{þ“ñk——}òZY—âÖÞ+ôµeì¢ÌÓGç÷\¬¢LM‰‹^ö•n^=„Zþ#Æf|Ô4Zi° ™ÏŒ§›™P¤’ÝF=UÔñ¥Qh+‹rîŽ7wLiÍx„A¼F÷ ‘˜ß‘óJÁlcG±²ÒgŠ ËšJ?¶äÕ2‚k9< æVð¨äŠ9YǶs2ÝÙ—.<^ì³yu,åd;Æõás¯æ1šÈeŒÌ[§2£)+Ö)o6(æ=æSí¯6QBË9–û¨`úpŸPIÍ´ðoð1c9—¦(zqFØýQœÆCL‡Ó@#ÆÚè}N¡s\ÆÕåÆt2¸m‡ÙÇ8öáh>d#òºç½Å¢¸hˆ6+‹R‚Ó‡Y±X<€ ¶²õ,`(»±†NìÁ!Ìâ8Ö²‰^ô¦…#RÏj-ìË^Œcutˆ.a +9…Id9’aŒdË9’—èÊf–SÄŒ¦š'9 ¶(72žÅ¬á³IºZµjÕìÙ³Ó:L¡ûÈIÉF8ŒU €j¸Œ’’’^õÚ¼ßæº¡uU «z®êY׫®j}ÕÆëúÔ•4” ž:xîés{~Ôsý~ë«WVl|i®4á©§¤•Æ5$TÐöL¦4P"ANwضJhÈiñޤ6*++  ç¦¦¦p;ë|†ojÁ@î 'v¸=a´½=G²€i\\ _§©©)¡c§É@ á7É i„}RÀöÒˆ‰‚ª+俇’Ò*Ù—„M@rz@“‡Ü¤ÒÐ 1=¬pA#±¬¬¬¢¢"‘ãKæ’• ŒàäâÓ]è‚t•Èý¥Ýg aÔ¯­­Ý°aCð û´XFÒîNº—i}Âä’š››C.Â@ E[z…+**v ÆÉy¯Ðƒ6VPÏ4¶°‰1Ÿé¼ÏU,Šúâõ `7½¸ÛìnZŽÎÝôc™šÜ®Íþz€×6è;&ÿÊCù+×\j…¶qL_3Îã#SƼ*}£ËTˆ;×0‡ÉóTÎ:.e&‡°$î›ÙȰbãsnÏÿC™â†±6/ÏB&ÄQG8.ä–òyFñ³‹ôÏ*mÛÁ)>‹›ù6ϳŒ—8‘Ãy›óx•>œÊ †pwSC˜Â³\F>g#]y“[ù6•ô¢ˆ[( Z9ÈG±Áx<ïfieu,>äΈ²Š'3ŸÑ<ÏÅ1/ ™ÉœG+Ã#@|Ó£~ñ£(qjVKÞ¯Æh¡š láb^â~K_¶³/ÛxŸ½è¥[e3†0™<="Éz3ÙÂj8«Ä¹mÞ¦‘=É ÑÙò^#ÏÑLæB^(rJÆ¡YŽö§È Îe ›˜ÆVÑN çÆòc¨bó*õPV'm!ža+8–Á‘á÷Õˆ‰]Çùtg.}"„§‘ ­,àx^á­VÙø‡³FŠô&M 5Q€-8†¾6tÙÑËfÞ4s¯—öÚý­Ýóó½æ÷ZqøŠe–m¯ØÞÒ¥eái ‡N:ú‘ÑÚ:)¶kÞë®áÉè( øÚû%A<™ç¸â†ðÍf›šš¤-}%!7'á,ºBlhhÙ%œB×®]ƒÒ]øa¸ÎOß• •PÒFK$w“¤AØ~ß4=(á ¥»[‰Šy"áòn²ÒR}øRáç™îdžlè‰ K2Ýioé^ßÚÚ ûaWT^^’Sòd†ô¤¨]/]Ò ø”ðHc¢Ø[ãlöIײ;û t3°`úÕ>]­Ê»ƒŽ ,UQMã}ʸ†¬â~Z‹}3oQΈ¨HýyN§’G©3o­jÍjk»¤upyÚ"ËúÎ>‘_dM5µüLª ¸‘ßDOî‘™‹¥ÜO#å|‹Ù,áÏQŒ£‰ã¹˜+hc{Ö/ØÌW¸#¾øúˆÇ;³ÄµY“óöæ0î ×ñ†p%“¸$§a›ßEi¢kÙÎwØÀ¼Ak‰d=ž7“ZjÃ&Îa2wéÉf>ÇC\“±>ïn¾ÂËüˆÁTòW(æ~>Ë!B‡ÅÉù)ç²:úÿ,ª6Ìe_çQ¶r)ÿú§) ‚%ö¯@5­Feˆ&é9Ê.æùᨯ¯¯¯¯/))©¯¯/¨“ÒP‚´.C:«¥!µ'rsI•ä€@‚ÞÅõ$ 5±tJÂÃ…òegoRÀhÞÛ©à'áÂÒÁpCÑÓ½{÷Ð, *G§ÿ­¦¦¦ÊÊʪªªP&>‡È¿¤«–6}”Ö=J3 Ú Î†„T—"vûaa{t_AÁ]pVš€µ jv‡ÈÀƒ˜È*¶òsQ$~À×£üZ5›³Z£túLä#ÎäyžaKÔL18LÏfu$N]ϦGFË_iáþ…׎áÎæIÖŨ”¸4õb¿¤š«y“ù Ûhås\Ä}|Ày™—èB'Îe×°F› Ù‘ªyš(-Ö7ïžœñQgïî Ðb—1$ë—ôä<¦¶y”Znba”±?›çèBIŠkµ ,Ö§‡† ªy‡®&»Ó%bçyú2›êŒ}óÎäV¦3ŒέË…ŸñQ‘_d]Î+ËDZÍ5‡;‘q2äwè•”G†Nüœsx$ïlöÏÛ˜ó^‘‡s–s§òG–óÝŒ7Š}¾Íý”ó²ìɉ̌ú¼Û™ÆÝ¼gH›"ä¡’r:ñ›¼xšcwl_ôe(¯p-+¹˜ý¨‰ŠQ|u´±‘§éÉNg /FaÆ^ÔPI Mœ•1ŸÝòÞ¤ÖXÀíÅ1ü‘}èÏ'üгèF/;*Ú°Ÿ*ˆ¥LäØHj>,Vä¿ãk|I¿çÖcòÜ¡ïxÑ{ò÷\ÔZ4ìéaÞ–î}…í|§ÎwúÝ'ü·@_£½olÐNM^öïUUU%%%ݺuKôÜ\ ¼n…¥'ü¡ó­érb‘F¤“Ö¿1Éÿ4¨Å7çÝ]dßD¨)Y¥ ÌÚ!˪­­-Q$JÒm}}}{²²²²`#²eË–€»Kúfÿ´SIU-IzÞ“¯½™K¯^½ú÷ïJÃ7¶´´lÞ¼¹¶¶¶ýʈ$¥?"©{:´•iO’+À˜lÙ²%©YÃYaÓ¶ ‰ig’ “Ĺëtµ–‰EÌe$SÙŸ|Ì<Ž ˆN<È&Þax‘±yýó>fwÞ¦'¸š—˜|÷ã†qz²}8ƒåÌ£*ê/ÄZ>¢{PË6†QÁJÎÉZÎþ‡¡œÆsTЙmy èÆ‘|ƒî\ÊpÖñØzªã/|ŽÁѲk,#éÅk¬ÈúÒG+5QþWìáõgå̤GÿLÆÀØÀCŸð0cXÃáÌ`pÆÕY/1˜gi‰|؃Ì:gœCç¼#æs72´Èy˜·…ÿdE΃Eš3>Îï?‹ßñn^·6p#ù%\Ê ªøÓ¢_× &²1£•åù£ÇnÑü·Or‹¹ŠN\-zùðp,µ7²”IÑ£2MÕð,g²•Aô¤+ÅŒàaºð,—d,É{1bß—3”¢ NPõ }"¶þ$zò—è&ZJÅ(Ñ=Øš¸›ÃÙÌ,æY)¥ã$~%ºíÃJÂx- +%½¸@»)P7(h°¬yÀ&$í»OOtÝY30Lqþ?âî;ÎΪêý÷LÉ´dÒ&½B%ôÞB—Þ”* EDEDy-¯Ø@¥ Ò¥‡¦téBh$ZB !d’L¦%3çœûÇÎÞïã™0 zï}þð‡S÷³ÏZ{­õ+%mÉ£(±’êZo%6Õœ9sº–bYåÓ¬ŠOòàHâß¡s‚Zo¤‘X¶ L“ª’ )µéBèO™5½]ºSÝÞÚÛÛ»qè(Qdø\CúРܯ^½zµ··WTT´··'gá$Ö!è'>@‰"bÉÞH ¾dYÙ£G¾}ûúm>ŸokkknnNÑÔ LŠøagfK½0T cŤòY{24~ÓVùw9 Ùìø¹ÕUöÚ/jð¼È£‚׃—cxŠ[âë|ÄÖå]š¡'¾ÎCaÛc?*ØEìÌo¢Û}vx¶žÕQ&ÌÒ˜á6ö`(·q=y‘W"Ò}·2ƒÃ#(.DÁùìÈ4F1–L¦ŠMXwcpŒ Œáeæ°ŒË9>Š×õà„‚©‘ËUÅxne”ûM^³©æ ªéd+¨ä¶ˆèÛ)Q)¸“½È!\RQÑwË´”V°2¶aß/˜Èî´sëE…¡#xåŽ/X‡ë˜L}‚oÅ^Y'‡QVp1ë2à_oñßÙ‡‰Å4.­W¸•ï³€¥lÉcÉÎ<Í,¢Ž[ÇQü’½9„»8Ÿ*Še&°WÞÏØ†¿3—^Qÿb=Á\®cpÔž§™Ûø€½½]ÂuïÅAÝ~°þ*gqãÆQ<ÏzEK‹ÿç|¶â-‘ !:ynð2‹¹•M¢ÊÃìÇ[ä˜Èû akfrÍQ”ë}ö¦.†•H³èƒ’_fhˆ%âg˜f'eØôëMdÌR†K!é³~ÃAq kD¯tš($Ypø-ì‡ùG ‘9¤¬I*÷K\YqØ0ÔI¸”ŒkkkÃô(%§Ž(v‡ÖV6‹-ðêêê«KƒÆp;‚¾Q‚¦e,IW%ñ4€>èîs ÁÊÊÊU«Vµ´´,]º4 JºjvÅÿÜ5L6ó½{÷5jTmmmÏž=çÌ™ÓÔÔ´xñ⤰ö[prI˜‘Í6cð!­jjí† eXÒì§-éi××ׇí.%¿”´'KÐ@Ÿ›®†°7¼Ï›±ƒIè¼ IDATé×@3¯D„XOž£w”ì;4*0½W°{ñŽf4—1ŸFNeCî`Kòk*˜ÂÁ<¥+ŽäA>¥ƒ½Ù˜ë™À=Àú\Àk¼Å¡ìΦ²)s9x†½™ÁvæžØ?ümÃ:¹µxŒw©¡æñc®d/ЛS¸”ëcoíhFpÛGfè&QMUAkÔªYÕ[d¢2;–»ºÓ¼¢­ùG)ÐÎÁ”1:ŠSÌ(:)'Wa\Þ-E{óFô°¯ä»¼ÃúíìÁuïTTÏ"ð?ÜÄ3,¢ŒeGp#W²I”ÃXÊ‹È;Qëo ¤’«©d{²ý™Du¬/à1¸žqŒb_ÎdyÁsÍéM`ž[fHΆy5W58ù"vtt|.Å;@³{,îÓ§ã°žI’8e²÷Èb:>+mwMW yŠ"y Q/õž8ؘïr)gÐD¾Ãa¼È%e¶§²àJ–PÃ<çI7FŽÎ³1\þŽeÜÌ*êh¡ž2š¢ÐÀ3¬ä1«ƒÚTêif;f².õ äINâq~C%÷0•Ÿp3}¹ƒ~,f-þÂcäèÁë¬bƒsÖ.:ˆVn ×¸¿1„Ó¸…»9‚ýø_Nç)fð?Ñ"+ò_ Ã<êbsìMÊØ—ƒYP°¢ànnå*þL?¥–sØ’uøÇR_ð8G0“}¹½¸†Ó¸›Ëé¤.~…St3‹cß²¤GDÿïͼÈCêÇ>\Q…Õ\G?¡†FŽåÉè²=»ó WRà)Žä³ðl¹™žh][¬kpL¯¨ÈÖŽY2reeeÑ577çr¹ºººøaºóâîÇc% ­ðjÙ3GøŽa¬à i(ÕéöCâWµ´´$ö^èܦ½”Èàªj‹-Z¾|yccãÇÜØØ˜ì•³tº„P Ÿ0+Ø‘5]Ìηº[*®íæ1_ðZ£ªEÊ™cÁÚlÂsÜÄÍÁfÜÎÞ¬EG³íjl’sG³É<lý8€·˜ÃÖ<ÄÞLe4³eLl:UYMV{>çœÛÊœ\4·h#ÈEqÞMiã^vç-ÚøF ½Ø!r×î³Ù6ö~ÏpŽ¡E<Äæ´’ãVæDR¾Î´¨1Tî`ÜÛ\˦9Ÿ2”§Çf\Ê@dm4ñ(Û2…6~ÍÏ ZXÈ”h¿˜eÉÄ2¯Ñ‘“í4y$s£¾T33™É$Nd_.£ÀfÔPÍ&9åE9.z6PÌùv•Qí&ÓÌb¾Å þB;Çñwî¦/÷²C\Þ b“¶?›33ƒ,Ã*XMäº7Ó¥¼›ÁÌb.sØ’é >ËÙ¦À+çfŽd$ãx3&«½ôõ_ è%“¡¾}û804;::ªªªššš:;;ÃHý=éú„Øš9‰+–‚N¸Âüÿs;Kkìו€Üä!Ü5­$Š%ëÂæææìjü[ˆ’”½ÚÚÚ–-[pöAì< O”<¥ºº:Ûà*i v½ª««CY“È^%<@XÕ’"XÆm+ÝînÒÕëŒã¸8wéãi(bæ3–å|‹o°GÑî\Åúö`;qIÜÌ"ž`—X«ÍóÕÀže~T£Ø3X†Á{™S¹¦à^ú²}t eÖ¶¼F3íÑ=ÑÇZ¬ 7;pgÚOb8yŽçTÎçAÖg‹¨¾ ƒÙ„ ÆL:ãZ•&á^&0œ Éñ“²ÿÈùE/hç úñ'Þf:XÀPzÑ3žè—óoП+øŸ00Žj¶-÷‚_-çufR ‘'èËì( ñt”ö˜Är^f]VÄ#ÂzÜÆöŇ]™šw MCx=h‹ÄÞÐ3ÜŸFöawÒßj"p/> ™ ÊU0°è=Þc]7è—g$EÍò`ãÛ/ðm+ä+5•;½Ù<ÄqE—W—5r}¸3¯°Ü$f³’¡lÌùlA?á `_†r#Øœv^f{®ä]Îa÷²!cxšfÖ¥2#ÔTEÍQlðuÞŸÊÈ,>˜Oif>ac¸‘áœM£ºQ»9Œwm[uu‚i£ªªªºº:$¡$•]^^Þ¿ÿ¡C‡Qƒ®.\ØÖÖV__ŸËåZZZÒÌãÿ«ªª*±¿H{0;ý =ÉT™¥>gWÏâ´>)ef!þr™ä„&dÐìÄ%ü1«QªÞPwÂSkkk’ºÈÖ£_éTõ‚æVHZÍÍÍ!Êw¯lfn“ ¹Î\Y¾,_/©™²ëP‚£ û*àeÒ¥©©)"Ìa*ý»jѦFeÚ)TEhDg»…ÿáH2Á:ºè?7]mÆÖÜÏ_#fa36‹ @Ìä,¾C+»ÒZp'Ò3:«õ£½x”™Á„oò/Dšm]-,ŠÉéŽážøOå¶¢GŠšxƒaôåo¬¢&³[s _ $\^§žÝ¸—å,ލÍ92ñ3ö¬p —ÎõoðATèhc‡ñ ­ô`G†q09‘>ü–G8À›Œú×^Щµ¬OŽé|­àù¢é9„•t°?sb¤|GçÙšÑ|¹ÌgåLd=ù.e<]t¿Î@«_|"‹µçr,ÓÂÛ¬d –ðæ1›sù‹ 6,z‚ù«Uš?Ù'çñ>½¹–¥ô§—Ñ‹Ž¼QEcr^dWV2Šýyˆw¸€1 1”ëͺlÍôa&½ãmºx“u8•_GâÄrîŒ+ÓÀMñ˜ò*-L,ø”®fSˆEXð*›”ÁVÅTöàzúÒýD^`O2“=øJW {7¥RWÄ—‚BFÀòÕÖÖÖÖÖ†óx(JBe~Þ :„ÄÔKfEÙ¿„³v°Õø¬Àúÿ×U žÚ˜ÙPÔ¹Øì¼'ÛóLríííóçÏp’ ¥‘ôj¼0Dü2ÌJÔ‡*!1}ûö­ªªêÝ»w¿~ý ,›Cýºa_B^=šzŒxdDy£v ’‰%œ0ÔÌ*@fëÑn6jZ‡T'p|8p$ÕÄ$$–Øa…|F•á”TÆ2œâî[]ÓÕ¦É)òöár^âFñ~”èÁ¡¼EU…Ãó®/ZÀm¨!ÏT¶e×(ŽP '-,¡%”“ãcˆi …VÒÎé es®)úSPx«t[‡óø=÷òfŒ/±!åñ»\N‘ÓâtJ3ÜÀ4žŠò9yÖîtü<›ñ&p¸:+¿ˆHóødµ¬”\O­#œ¬@edÅâ$^æmÞ)wZÑÍŽ£’Q<Á>̳Ç-¬ÏmTF9ר`mÆòŒ¦wÑ\.â‡ÜÝCîà²X,ö¡™«ù:÷3™zÎá÷Á,Ž »æXžžÆíÑ$÷PªË}§h­‚-èO3˜Åà2órFæ]FG‡÷9ž÷èA¾èSNaw2Ÿ}½{ûS˾LáÎe%u,,ê—·9õ6È;ªèÔœ#Š&ÐÂEÌá>žçh¾ÃíÑŠþl~Ÿ‡ÉœÎ,‰ÊúT±•\Á*êã^=‡I|Àß™Î@Nç“„W,³UÎò¦ss˜É`nã'Ì¢7RN>€g8†˜Âö<Àkô ™ŸÕ¾ë ®+ùK×ê$ˆè 0 Ì®Ây6È455µ´´L›6mîܹýû÷Ov©ýÈ)øv…o$óܪo²+ùÁ\ê‹ÔŸëb¾ÆÚ¿ÕíJúéÕ«WeeeMMM]]]±X¬««KŸ6èÚ­ñP_(æÌ™N YJ g+ ÌK¢æé[„ÇTUUÕÔÔôìÙ³¾¾¾oß¾èÙ³gPÆ«¬¬\¶lY¨™D"aÇ» –ܦêêêêUÕVuW¶foV¨‡ÂpHÆo%­|RÎÍ‚&Ö¸]? 4 éY‰Â°’¡êꪹžöX‰:pzp Xr¢*Í]$n›™ã`kôí ~ ;òtÔÝÉ@väŸr7± £øzΫµ¶íÐÊú²³Øjù*MÑ÷hPTfÛv6=«uxƒÌ¢‘3èUГÙ˜@-ÓèO€_¯¶AÑÊ¢²Œ²NhinΕ”E5ôŬOET$jã2fsÓõù”ëDO^ /5œQí\ÆÆ³ÒN*8’ר»èå¢Y ¡È^|Ì îãÀ8´f¸ß‰ªg1v.a푉¼6o³‚°+eìÉ«´³KÙˆ§YÊÎOsΜœ1ôf=>`'îeb«8ì™Ã{Q´¨ègKž¦’µØ£¨¥h"5ŒŒöNµ¬d op,­ez-äb†2wy‰¹Œc=Êô)ÚŠÞœD+[3‡s ^磜¹eö(ú#¯³8j#Ä´–ùAÑ{L¥ƒõÁó4òOöŒ¥ó'ìÀ˜ÆѶíÝ(ì4—uid*»—YXTM_êZÔTt/gÎó éd-†X­ÓÈsAÒðZ^ámÚCs³·³gÏ~á…BVH}•¬{8ÂWÄ+§Ÿq(z÷îˆÃ¡– ‘ðƒ¹!œsƒ"\ˆD---íííK—. Ê{á\’„ºbê’˜zW$qøcR«K‘4ûȬ¶l÷ÍÀ`ø’DøßÔz*‰’%ÍÀT’†ï•}Ù°J!’†Lt4’¬mVR¶ë «ä+gK“,s.ÀßÓhP¤TWUU <¸¡¡aìØ±k­µÖºë®;lذ!C†ôïß¿_¿~áè²xj¯}ˆñßåW…RWW îúúú @ŸªŸ0)L@ùššš@ð %fªÎ8l•’IRvÒ­ 5}Â1&ùd‘•]½Ä»HŒ·”›ƒäGøœ³œöjmmmV‘½k*›ÅdÖ.·}^#×Ä¿?C-²­ÜF‘—Ì`^fQ#_ÓYi­ø—££_û?ãKÝËØhM”LóÂ?ÞOQÁLaý8c¨áÊÙ5:Ü/g6ã)£ô¨Ðйøl—¯öx„Cø-3HmÎПYŸ­#&ðq>¡íÙ”ßqùA¼•{RÎ(†3³Lï¢ :s–VÏlÆÐ?ç9•O±WüšmÅ%üOä'Mc Ã9!üøóƒ˜ËãŒgþÉs Ž4¬“øÑÈ£,¥ONyÑœÉ2.$϶4°”Œê«ÏR{ÒÀú²™OžÒƒ‰Ùâ³ ëPÎ>‘ý2‡³œq,äT.a$ÛG©ÀrÖ¦ŠÙüŠ“¹$òáfQ™Ýón*³cѲ¢©a@OCÛØ¹Úk¸“-™O=9~Ãý±·?à×üƒÎ(Ûß—Å<ÃOxœÛXÅ·X*îϹœo²a¤»UÒÁxžc%ãy™¾lÄqþ¨Äë0–<+Ù%òÇËÂ6ë/sec}ˆÅ)¬WWW×ÖÖ†þ^ 4Ë–- á¯P( 4(tòù|`ž¶¶¶¶µµe™@ ÑâQŠÚY]×ðø@N³·”\³X笈TbÀœñ„W éç –V¡Zcó* Ï³3ªàp²Kv Ôõ‰Ý·mÓP-‘ɲGŠÙûöíÛ§OŸ††††††>}ú„{t}}}PlêÑ£G{{{kkkpÈ · {vÁçc»+*B2‹dY±bÅgù„wü,™Á¤æ—=„!eâe…'R NZ²ßµÅ^-¸VÉ¥ |‘Xɾ$ý ÂÛ}‘ÙU3ŠöâGÀƒìÂ;,¥½™Ä!ÜD_Žd!D1rL¡?;qó¿>f]f½Ù‰wã‹ôž÷ÐÆŽŒa-.;6›-¯”9˜E…ÕMª™¼Ìvñ#­Ï<5Xwg%Ïåì\fÏüjÔFcd,u²7¡;0…‡èÅ®<Ç ÊTæÁ¢º¢vjY—ic»ð‹¢™ËRŽd9K¹»Âù.gò.ë1–ì³Î0ža.›0ŒMX‹Iœ3Ä·¸“s£žÐbÞâ¸"ÅÕ<Ù*àÅr'ä‹FÓ—gXµÊGìÏLžä0æÐƒúr§t–kè´2êPìÄÖ±¶îË_9ž'Ù¼àjƱcÐeç@®f ¾ÅÓLɛʆ,då¬8r›O¡h«>ʵ4º‹¯³„ÖN³ÊÜiqø¾Пyƒõ˜D‘Aü!ºtnL?³1wð>—FZqp¥y—oó·H:îîü‚l̪8³œË6¼Dçf¦ƒy&Eí±•,ŒÐOó‹8á?‰;I—(XCN°à¦¦¦4JGæ1bD–ëÓͨ,0–²N%‰Ë• a –°Î¡ ̦«’VXH™áˆJ±’(\‚A/Á&Ñ©’VÖ¿cLµ’pÒU ƽ«ÌDȬ©Yú%ðiÊXYYÙ§OŸÊÊÊ‘#GVTTôïß¿ÿþ½{÷=·’{÷î쯩+ÀêÂ<,—Ëu•ÉÞ²³* µHuXUUUŸ>}B½’fTÉ‚+¨.%Ð  ž­ÎKV&9]­qMÂmM¼®/¸VÁ'¼]hh‡œh‚Y ›ÐýÎ2Ï>wv…%kªœâK˜Hµ´´O-r:7ñCªYÈ z2’ÍÍMìOe9¬5¸ÊØ¥nïp$×r!wñ121ïÕ…žàPúpgpGÑ?9™‹ò&r?¿áÎeÓia(³XÊÅå8l›WÅuÜÅ+œÂ•|›:Íà§üŠ?q5;1™yŠ=x…Ôd~_a üœJÎáuþÎÑ<ÀƒÂ*ª¥|>õ$›œº7¡UB7§FV^¶££#€/¦N¡šfK]é´A ·Dd6{œ:9kd% ²þ~é縉µè]cé“ò_v.òߺÂè+}ž,'·k’+ÉèéÁ¥’/LDjœ&îT@©|GªJƒ¼z˜P¦ -Áìà0ÝÊ´ªÙŒR¢Ø[K )9UŸ<>bĈþýû744477¿úê«Ë—/Oš]·_7ö2Ž%OézVèj –Ëå²y75Nõ0ˆä†žvèÓ¦©®®®®®î*DYEù¬t5šFÚÅã‘Ìt=C™_fŸ‚r6ã>΢š­xƒ¼Ã@ndÝÌß&}ˆàÑ·˜ÛÄ-ôbG>æm«òŸ0Šç¢ñù6ç>Nΰµ¶âyîb*ýè 7û² ï2‘rªrúÜÊ\ȶçd¶‰6í3ÍGœÀ|®ˆ¶È¢ÐÆVV»_ÑáoìÆl¦²33˜Ïû\Í·ÉåìÃ’¢NVEJ;p?=XŸ7YJ ç1„X·èìNÛ²6÷±)3Êô¦¢è<¶N]S#`oñ]Náôà`f°ÌgmâGÑàxk–²?eK™Â<Æ8>=Ì›kÚaL»ï!çlþQTËtZ9‹‹¸‘G˜½ÐÎáhæpZ$ÕË*–òjÔTÜŠ˜À°VKZ52’Ù<ŸS¤©hEþÄzq1šŸ³-õ¼ÂÎÌç-ndë8j -»lÄl’÷é¿b“x“1¼ÎƱEùçHM{:îŸSÆ[lÈ6Ž)ycÙ‰;Ο㛢ƒóÄn¥šM£uÀFÌf£5–ÙZUiòŸmÓgÙ²áç†2ÎXAµ½½=kÞÒÒÒÒÒô/¼*DÒkþ‘ à---‰“ÜBTJj¼)ঔ¼Þ“o×uH‡ú·ºj)‹|Vw.Œ|D·F]Loƒ QˆŸ¥¸Ñ=öìKp†’EKkkkò‘Êú'Y‡P‡1dX®ÐÛLdØ48 "X¡o™ZIç7B—Í4]O'!Ó$FpvPW’™²P½ô˜/¡è_rµµµ¥r÷LÄÏߨ]þÒ-xš¬Ír^/wvÞ=Üirî+ªç ÒÑtRA{eôÓjþõõïgOV°**â”ŦM8¢>šAŸ7ðS>¡ƒå<–y¿38<܆°’+ãìazÁŒ‹ªǑ㢀AˆÜÕrÎŒ74ýFF1øö~ÎjôHTèØˆ9ÿÈù~ÁXz²#7Ò‡§8„ë’³NQÓþÑ IDAT =YÅíŒá”¨ Ÿ£ŽµØ—;©dÓø*;—y¥h«¢q\\Ð3ªZT2)öQwæÔ8âzÑìÉ´(íØÈÓìq’e|ʧ,áØèͱAôÊzž}x˜ØŽ—r¾ÒbUÁ½´sFA›”7‹Åôc‹¹’-ø€¹‘3¹Šv`'^æzó1ã©£©L[ÑÂâjíħ؉UÜÈ¡9g-(wjÞ_bòXÁöâ.^æÓ¨pÑq‰°x2þ£™Ñ¶8¬Xeq×u°Ó9(2ÿžŸaª#`gke|t‰¬¤"ó¬]y?r+Ø‚Y÷ê–Qê)¾·Æ6Wªq'LÝCÜLòt!eûi hž­·’`3:x¬Íà U×@6¡–=¢ò,^`kó UÔr·ñ|dæî]îGEK Æ1“-#Ó3 ÎC¸ƒXAƒ9†Ky’±|À*†Åãvài5r-ƒéÃ!*•ûz»{x“&VÑÀ¬¢cø Kø;c"`ºû±ªè­¢2ž¦ßr YÀ9\mSòlìÏN\Á<Þ.Ú2È ö‹Ê"ol2s؉W¨‰¥, ¿²œ±ŒàVÎd,KXÌŽãnÆÓAÝ¿vbßä5꼊ñÅÕÓ £ræ•—w}A/ÞæNÚ™ËA<Â.´0“­¸Øj‹õµÙœÉ”± Ûð<›òaÑîÅËþìœÓµ_L³¹Š§ŠzMã⦠÷YçîXœɦL)s—lÎ[­Wáì¼? d%§E팯ð!óYα  “í¹9꯯JEO&2žø«ù€Å”G_˜EñYïE¾¼Ø’ÍGBq¸æñCÙ°›è–Lx?küBm‰ÊÃgÍ’OI` ó‰d”õ²¯äÔ.chR,{©äÇÒ0 “C½]¡]ágÿ]yªÖÖÖø°"Õ¯%GÐÝ(Bíò¹é*Äô|m Ìü …B¯^½2°¥¥%v477V(‰Hï³^¶›eY:jé¼QóF<4"Ûb]ºti{{{Б `“°¶É"9Õa_‚ý&U]iYÅÛìQ©dÌž:!A†ï^Â(ȶ²£²îÓÕªH|y›:î¿Ì‚©\ÎnÜHo&ÓÂqŒær^ä6ea ã™=;ч*†±s$3­ÅùŒa;Žaïч ¹‘³¹!ïXâIfð{2ƒïGA@6®â'Tr7;±’tpsÛqaoŽç»1ˆ˜R™÷›Vðr™óržÉ»žï‘+zž½9‰Z^¦’çy‡V¡œCy…³O_¦2›ïS`nà`þÀbQÞ*úØüS¿¥™ê8™Ë§\̽ÜÀ(~KŽs#÷86&φQ»aƒèÞù+}ø+×óK9Ÿ ¸Ž:*sú—»¼Ó5ÉEßÉû”ÁEÇñz4’næZFñGs+÷ð1uTT8(ovÑ–±ìxzç¾m&ùâEwÔsÆ-·÷Ù\Ç«Ãæj`CFT86o%“x! éîÃTÆrù–V³°{p|™™9Guªç¶JwøÇð ßäR¶e%ä·4ÒÉާ/³”¹Ìˆ˜ ¥<Ëí¼Ç/¢‰ðl®£ªh<}y¡^CG$¹ŸÎ5±>[I#_ûÜŸ}jìtd¢ÿy¦›+ÈÔf]²²r¨]µÀCþ[#|#Û¸ ìÑ£Gˆ•AºtLcü²²²ææænrC˜ÌË‹Xã]ëš®6àÎg}Žæg f3éÅ«[aápý;*#à»ŠŠ¨õ0›"³*´hÆ¢*œšoŒÇÒîe&²”oÐÉÓÇEYÌÎ,d!µ9¿/º—MÙ™Ÿ²1›2š+i'ý<#x+’gGF<ú&3ŽÍù˜ó8‘åÌd`Nï¢ïq9ï±'|‹‹ þÆCŒãÚèmøŸòlÎIÜC޵h¤–›x„_ÒÀ÷˜H#1Œ³™Ïee¶e§‚¿q5=Y ’y÷çÜP´!WDeÕ#¨ägE;Dy¡§¬n¾Ëר…­YŒc ÎgG°ËèÏíìÏ|žc¿bhÑ×;mÏÁ ÉS\ý_—p8k1‚ƒù' ÈÇf×ZÇilÊ.æ8~ÆŽœÆÌ·}‘e.Öû¡ÂÏòÚÖF?ë¾Ç_˜Õ©†}¹=çhN,z‰ 90 ?Ì}Ü­´Wزӊ‚{8ˆ?óL‡jög{fU×i=*Yĵ ¡@[ÅüŒ7YL#c9šù¬âÞgJäüÛÉ ¡OdvÊ£4RÉQÌf ëD«ëS(ò,Or_ïf>”ý‰&±ÔôƒLQ;Ù³JBÿÖ•EwãúÚÍÓ³zE¡o™ºm%ýÃpœ0`@ÉL¨›¸–²òé%*qP¨Ë {ûW—ÈŠŠŠž={&ÓËðQSºJÌ¡úúúB¡F}ᥲ'‰òx•ÄîP-%Èur—OWÈ1­­­ï¼óÎG}”JêE‹³ùÎþÜÒ-;ÆË"Y”©ZRµþ_Öï9§g¶ÈNuyšê•χUJŒà„hOÌål^__ ‚%™,M¡ºɲžUYÄMRôOïòYÞ]ÙFhòuë>]Íc"½Ù9j[ŒfSæqvtÍXÁ{lE3ýy†áT3›wÙ”LÉVÿŒÉ˜Ì¼õ°+¨dó(¼¶kÆosjiæ"¶Îùs™=ò*)ЗShâ•8·èËNŒãvæ¾èTR^o¿&¯0„É|‹ÃÖL¢™%욃uŠ6ä=>fãàvO »²1ïÇvÖp~-š^ãrÆ3õø„·#ldÖ¥•D;ÛQMÛ̎Еíx‰-XA[NK™ò>ìiÓV?*8+èAÕí a>[2ŒOXȇÔÑŸ®a"ËØŽí©âv¡q+ÅÙX9ë°kØÕäËìž7=ª˜b7žˆýÃåe ®çX6‹ ¶) àlž£žz^e,Ò¯à¯&µ»äA×}â¥(°Œgic7Þe ®á[9‡ÑQ4a¡.Nìvk}Á»µØœ¥ÜÁ§|%b%òѾ=|€­¢™ý,z°kljáa¶f6_cEÑFy-¼ÎþÌâQö£_ßr4;ôœWÊœ’÷8Û3±hGv`8\%0nç¬X7Œ)xŒdxt‚È1™íhæi*x5ŠzœÏ©¬Ëûày°mØÝ…§yž¾ìÃtó»¼èÁ¦ìÉL6ˆíÄM˜Ê^þÆÓQw^¥­¨Y¾?ïÐè¶Í´õöàaUn©´¼Ù,fs6¿ä`†…[Yp-{—ûvÞAœ®‚‰Ô™Ì{Ì£’ñ¼uÃx)Çvä·ÏÊ©e&Y­vx{Îa9'ó0VVë{Ë-b&q{­Ãоզ–96ÊÞ—ÅÓUßhXº„ãÄ.ìówÙŠ{²â¶]Û_ºf‘Öz¥Íþi"µÆj¦k=”äæ²'ë$û¨£ixVâBÛM, ó+©·B² &‘u²cì=™ –„Îc§ÀÒMÈÉìq!iwsìè w 8£ÛÚÚRŠÑ®°þÄ€Nê\ —Qr”)™ë”µ”m|íÆ­ZûÍèWôàòÀÎʳhX™®g‚¬¡IIÁ2qvêYâ)ó¹+S2” øš¬Íæ ØÈ륵a;ÓÀ&9o”ûJ§_ÓÈ>å}öb0ÐL=»ó>o€÷YÊJz±]ò—ä‘ã)¦³€‡YÎþôæ ¦2Ÿvže;VðÏò*£¸‹3˜Ì\6e+8™4³SÑ•óÂüc…u™ÏDVr:»ÐÉÅïp*3YÄ7¹Ž¥¼ÐàŒå^èð*¹‡ýÊÜOŽå\ÅèÉöÔsUTÒûù”£hÞ œÀ!x 4YEM4OÚ‡+˜Ë¹˜Ïâò“œ~e.Ê»œÆc\O+ÍìÕîïâ… WwúÇ0€¸˜­©aÞ§È& a(÷ÐÀalÃ…ìC'•¬äxú0éLcG–[l,¨ä=öâûœÃ•\Ëüs*ìÚévz1™1γ¬ëÞuY»Ó…ã>tÊ“°ãõ¬O¿ç~F=ÏœF9ãâyšYT³ã¸>òÇr%«Å4z°Œos¯°7O1•uè ×ušÂEŠÖ§&o`›y\Ìר’ÛWy–·9’ʨ¹˜-Èõ¸_±}’hàŠˆ?lfZ‰ßU ³§+0¬«(u‰Àhr£ï†žU »ž£»âKd[ÿ+Wcccyyy€h‡öàg=²¦¦&kè^(ššš² ’l%š´½Kb}ÇLÊ^]éɉšV5ý#¤Ã ‚~Ê?²råÊÖÖÖ«K©Ú¿Š&±üE |qÀÏ2œüPå’êê%«ƒþó¿z>_™öä°‘ŒD Û…„$’›ðÂÙ¡cI#7éÕvÍm«V­ ¹9`AS=”¶YÂ@¦×ó@dNÂl¼ë6þâéj%ML`{sýØ‘Š¢IžgæDGÚÉÑ «alÇ#1Ïæ8dÇòç¨p3>ªÚÔò(-QâSÚ¹3ê¼ÕƒÀ:šN55ì€~—÷Ë¢MØ“+8˜»Ø…žìÇ“T­ËßyE9ãË}£S‘[¸žûØŽ:®àdþȬïèA ,q^ì¿MçGlÁi9}Êý¸S#3o‡¾ +YÁvü„öe¦ÓŸ“˜ÃPΉ_êSNdç(¾>Óø´Âey=Š:Ø„½¹|ÑŒ¼ch–¸£Ø€VŽ¡‚e<Ï¡ÜÔéÛœÅKÌaJ¥[:4±’ËèÏá¼ÊUÔp2ORF9?ŠÆïZ­Æû‡²6ÛócÚÙ†~ÄEœúð¿|› ô²&ùÕ2¯y~Ï ñ?¢Šïæ÷9/aï^êä+rö.?áèÎÅç²"§®èbšx¤¸šüp9[ðcžâ$n‰†)=˜ÏU|‡r.1†·iâŽçaFÒȾôa:=:½Ã{9/æ\“w%ƒÊ]´Ê),áþÌ€NûÑÌ…´rƒi¦*:ˆÖÒIoúÆæö=±öA1ŸtMW_d¥§”L†Öè-Û}Î[#sÏÔ›ê*é¤íV®\™´‘Ò´)µqJâKÊý˜fEÙwöœž¤žBªÈJwgu*¤+ DÛ;Û6L]ÐÄQMšOi’v¶DKοٹ]((SìîZ{…Ò-ûÂÈ*‰‡Â4ä­î±ì©›¦\Ýì¢)¿œR¨.l÷‹ífï2ûÉ[žÜæ§ÛT̨Hã®àœY¢ ’¤c?w+m{dµ³]Ê®Û2m³®Ç£dþRrÂÈ:L–œØÒæ,y©®éj?âzò[SÍ%O1„-2œª|„Òe&o³#ͼÄG1-ε‘VuwÆDq“X àÇÜI#3¹a|·brÛ1–Ÿ°6ouú'0šEìÃT°9›0*jÜÁWÿâî3L®º~þgÊö’lʦW$!J„Nh‚Eª*ˆDQ‘¢ØÀ‚Hï%4AzHHÞ{ßÍfûÌœçÅÉ9» ð÷ñzžß•ÙÝ™3çüΙo½¿÷Í(n ÌÈì 8ÉGL|uXèÎ[ÑYȃT¾“64åE¬åï â—tO(æã@‡”uû¥ì™óë@cBIÒ³ng¬ÒE–&/ÿ‘Gä ‘ùÃÃÎ<›ORŽÈ¸."8îÁ1Ôð5~É—ù ÇPÇÇIcs꣑¯¥t¡Ž%Ñè^/†p1ôä&&ò¨4zGÎòÀyn«pó95ÊË·³ zFóp؇Ãy0zV'³0zÚËØŠˆýd …mäÛ|cã¶MÁ'.pµ§ˆÙt>7<ÕÄÿ‹¾WÓ“„˜ž.¶ø»ríÍ_›9¶V!eQUUUx]©T*޵c÷& ùv<ö¬mJRñäY¾CÍwBaN§Æ©jí’°½×X¦M1[Ç®60Äþ…]–0óhŸ[û¿ÐbÅOK›|+®[Öö­-ÝT:þñÉT²òµJ¥jÕv^Ð9®g† Å8Êf³ÑÊ¿}1W}›ÖQø8íô’wå¶óóã6n)t?!¬ÿ –£w¥µwW5<Ê~œIcD©WÉ–ˆÝõ¨QQÁ@©¡ ™CЉÌÈ# |Œ†G´¶áAzЬ£–QÂxV18¡’Í”p0xœ½8‰ý¹…%<Èõt` 8˜–õ°Škx‰b^e3Ëy„ƒ©!ˬˆÝºÐ&îG·²‘‹Vñ%nå2æKÔò=¸’‹ØÂÑÓ‰7©!É 6GñÁ·Y½k¿e?NˆfŠ{Ò‰K¹‰ŒçôàLŽãZ'Œ§$°”yìÆZ&RÌX62º[»QeÖŸ a~F3 Y˘2)ë¶ì™Íwt 9:÷¥±å65“Ýô±E{Ù¿¿wf´PÇÑQ²>Ž“˜Î*£rt÷&\O@ éMo3› ›¹*a^˜œ×xš¯Ñi'ÊëT³€³™ÇqÜÑNàïÆî4¥ÜœuVô`?Âò¨M°#xƒx)rW#CräÈM~þ -N~Ê~ãnyûÈýs±d![`cccØåÞJ0¿mžkã#ãŽKÈ”÷~Ú þß´ÇB~ÂXù‹WÃâvkâ i[Ã.WyyyìÃÐ>ƶ©—†á|8"šÔÐÿ…¶>LvwZ›éð !´=ŸÛ"&“[kŸ[û gÝìLÆ0\ '-ì÷¯~É–ç°Û»½ü»—;?ß¹Í&‡ç÷Û·Ú<1mèZÚO†Åþ²=à%¦«ˆv\/<æ½ül?ïRøÞÏÍ®B– ­ÜÁ÷¸“u,çøÈ¾‡â_¦„÷"qÛ—èÊž¼5®zÒ—w9žW@Ož£Ž*ÆGÝò02.lç!ödq¤7_A5Óy‰{©f0»1{¨çT¾YóLXO–­|ÈT‘À¡BRkä;EJ‰oÒÀ$&2… ¢=½‡KÍ…Ï2úó ¥9]x‰5<ÀŸé’s“HGȱ°u÷›èÂÏ]ìE&’¿Ê<ÁöN&lôáˆe-¹¤1äLë˜q/3‘¡Ysù„/3ƒrÖsmÈH™ryV å…|L+룎ݪh`2Œä>d÷³O0‰ØÎ¤@ GЋ=XLšóiŒ´Obÿd_æIæDÀ¢zÞù"v6”ùù"Ì!aëÿI½°=e_~Q(ßXÇõ–6¯Ï·k1’-.ÁíTÖ¡MÏ#ß+ït¼4.Ç…Hýòòòò÷_`îÛÇø¡ÏŽs‹/” _±×ÝIèùÚ‹ æÉæ³?Älúù#1Þ=¤Øˆi± ;dá ăVavÕÚÚšH$j»ÖÎ8~F2‘ó9²H¶#,\Ca$ʾ/¿ˆZG £jÒ¾¬ârn¢ŸQÆ;ìÏ2| ­âxîãL†ñ>-¼Ì,.a½XY¥—™Ã;y%µ®üƒrNãwœÍiÌœþBš‘<ÈfÞ M鯾d˜ÌwéÀ¹!”îE­VE=­Ë¨ ü<*Íu`³H±˜•,ˆDܯ¥”Éä67°ñ¤x"ét¾•ƒ_2’"®æÀÕ939ŒNYµÔZ¸Œ^dÙ”ãrzfrû³m‹?‰o·2ˆ£ÄO×¥o¼>óüVCW™uUßëŽÜ<ùØú‰vI@:7Žâ0/<í¯æfÍ Ô³iºýÂrÓjnIÚ?«6ëºó^J;,ë‘ÀXžãg¬âOÜ&š9¥Ü˜!/NŽÆ»s'QÈtes £9ž‰¼ÇœÆRªs~Åþ$XÈT‚¤Ë¦dwÀŸfýXÇ'ü: ’pQ”è 6ÏÁär¹0Ÿˆ? ã/d¬O˜?€öBþ ÊðÏm¡ý×þ`§ö®¾¾¾¼¼.æ]žâöˆ´IT«æ0¾Î=Ìážä:j(åf¤ˆAéô:sGó{îçRnãêy”_PK–s¹”µÜÉi¼B!7ò5’|ƒ€b^¦±—«W»œ¹ÜFWN!É#tevByàœ”S“s6â{4r1ÿ<Ëûl姬HØ-åÁŒ›ɳ¼í[—ˆRa WQÆM&3+ ”39†ŸrkN_渽Շ,¤˜;¸˜w¿d.“ƒ¼±Gó2#Š}»ÉŸu@3[ýVÅiJ&¤7ü2ëÂÀföàDîã1ûnpL¥½–Én÷Ñu[¶¢ó–„XË©I'§|¿UIàR5׺vxð³-t£†·9Þ_óÔô`ÿÙå³é8Ÿy™iñ>ø s)å"¢šûøÛø:QÀß8ˆ.læÜÍ_x›—ΩäeΡ–¥ÌæßlâG<iÇÏå9 ¢9³wháU~åñwp4ïPºÓȯýÐ~Ü¿‰ùÚK·é„çû€6µ¸˜æü3Úä7±ÄQ<óÛæ˜;í´/…µoÌlÛ¶-¾þ>ìùçCËBDImmmˆÄ‹­|CCCÈ ÿEp%ŸÝÏ ½{¾gÍ}>Í|Œ)©ÍÃú[|V¡˜ayyy{Æ¿|Êó’’’˜Ë#ÎnÃ- ¼a–—cº¼D"Qßµ¾CíŽI¯âââÝvÛ­ºº:‚ÚÚÚÛ¿í€{(ÛPÖXߨÚÚ:öwc_¹õm/j)kÉfS-©‚‚‚_§wÚ§š:}jž½ýÙþoöôÈ Dçrôöìm*oíÕ[Ú<;-âªcYYY2™¬©©‰óìü)í¥ã^]XQÌÛ&µö×{·!Û;$¦½=¢±q¿¦‰óxgø7{°‘¯pT䄞‰â÷°¸?)Ò°ïÃ!Q¹,¤YB=ã(‹º÷Ç0›Í”ñ]3“®LaS#1Æ!!™7=y‹¬ 5Ò’ßN–¾Œb '2–Étä_4óº& v$O¡&ä9Ôq †³š›9 Œg(u, ?‹¨åŸôånVÑ@ ýéÅ<:ñ.ÿf ªx‰ª:Ò‰½ÙÌCÌãR–ˆÜ IDATñ nM;"çoÎL‹páÕÜCINoe=oò »åüŽ® Œfc'³!éþ@oÖrìIǤ·»±=i¿@ˆý÷ÜÀ¬fMg»7jaTt ¥Ñ0ìÖp[™™°{ŸûèUc R’ó‰/ÿ$=±SÁÁ™Öê¬Z¤ùK KhJêÛËž&Öœ’˜þ=~BGúªú›ÒóNË Z£6Q¾âlæµÚ–tVàq– f öMé²`TK°Ì3Cì¹Ý¾ ëö´.¬aÅ\þÍ|È9¼Èjžd)­ô‹’æ/s# 8ŽwXÅx*XÊù\I}éËža|—f$ÈØ+’®` _áîeM”Ñ3âëZÀÆHZz¾o ÇŒßæ˜aX]·â&P¼B ÆØè„æ&&ÄØ³ØÇá'Æ<ôáåÇ ž 5îäç£ó™Âów&ߢÅû»¢†††0uks---!²1À I‰Â"L€âºYx±í«”ùö:æËÙÃ#„…µªªª=ztèСsçÎ1ì;¼êºîuµûÔ.?py¶$›ì”¬nªîÚµkeeeÿþý»6Îì:³N]÷ÙÝ š và%êûÕ§[Óý>ì·èE¥5¥e[ËòAwIÉ $‚Dø¯hkQÇe×[Û\ÖÜaY‡DîSOEþÝ Ã7=¾;Ÿé¶ÿkIIIr)** ëñƒÏ\^Ë®‚’˜µ9”Ñ ÷p̾¦Í]•im®Y¿ª½»ZÎ5täHZ#AU¬åãH¶ýú$úOo>¦‘q±!ªCkÔ¯êÆLÖ1Ñ ä=FRÏ–²¾±œÝù+¥¼ÂJŽ$C5KØ,»³Œ÷©¤ o³–o1™gòdz;tf]B&iP Éû,MhMšXi‘¼Ê~l¤]XE ÕìMGö Ésld »E8æqôâ“ ßÌéœÓ‰…É”Hó™Å>´Rœ3;Jïö¦€§éa‡Lâ1|˜Ð=é‚À Ö²?OQÀhGõɯ%õ le YÆqwÂwº&³4é¦@?žewzòØL‡†¢Y#yML`»³Q¬f’ªyo«÷85Æ+>ç7‹Ó•ž5¾uï&,1l¬iéäáƒçÖÕëlžøûx法 ™aQ‹s¦ç–ýÓ”Ý]¿¡åá¡›X”Ô50•í|;e|¡Šlh4Ïž¨¥Ú­ù`kßeMRA „}ÈñI¡>"EìH}øcXÏB¾Æ ~ªXJÿè.L`3‰ Tð^ ‡ +ûЇ&ÖFø Æ(2kâtŠxOf=£qÀ .ctì®V¯^=cÆŒxô§¼¼<4Çá|hÌq^âÆãù€ã|—ö|šê- äCüB›t­=¤-VwŒÃçöäIm²«0gÊ_íÿÔ¾z;žØ‚ÇgžULUš³Æ{è6ö4FQïàwˆ~Ù¨¿-!3F‡çûËð.„¬Na>Zɘ¬(F¾„b†_Ä]…Í¡x몪JJJÊËË«««KJJºuëîRˆà¨ëZ7ýœé[»ovß°µƒÖnë¶mýðõ•-•eÛËžÙç™y%ó6´n5kTrU2¬L†§Q½¢úƒs>ùáÈ¢‚¢µ{®¸f`qaqøéáåä÷œZZZJÖ•ôz§×œ¯Íi¨nèòq—6íÃüïÉN]Qìã§+Ùn…õÌPñ+nþµ©i766† ¹]rãiü‚âââ|wµ+昡Lôæ—æU»Fÿÿ CøY»7Ž`‡ñ|„ì Ù˜eíMnâöãIRtc#ù*¯F2çCy/bÂýèÅê”>9ïêYñgÏä*V3•ãy‚èÂu9ÿd#E\æu¬ ̉›¶Q À;Ë ÂpÏó»SÉX>ä:‘ãHFð8ñ1'GÄH‹Zý5ç×ü„ÝGGì¨5le ·ÓÀ·øˆ{#±Ý»9˜Jî ˤVNa,{€NLáË,ç>žÍz6œKá=zpDÐwAðû_y [êñïçlä¾ÈX§Øƒa,ç!~ÌFž`7áaFóÖ0‹˜Çó9óXN…k‚릱Êó8ëœÖ)eUzk‡ÎÖï/&÷ÈÍ,1c‰)¿ÒÐ#PÂ]¿Åc9{DÃ\õ†:°Ô÷·y¼,»b_c3kS‚fÿnÖ=é+9iK|tUòãÙÙÑ·˜±Šo2žE<À¹)í&Î¥˜ÜÅstàûTp[Ê·r:š©¥”E f]R¾—Ó#°„“MMl¼(¤ ŸÐƒ›Ã9(póèÇÎâ~űLå1Žç#&2—mQ¥açߨ‘=ß+Äw;ͮڔ\B©‘| `>u^˜µAc·ÁYä×ñâß·ï«·q`¡%Š›á8QØiË—°Úi<wkò‰¾à*..Ž5ÑwÕüó€6,ÚÞ¾Ÿú³ØÅ†V2þˆð2·`óÐÍãoÚñpßòobìeãFTqqq,zÞ¦’’’²²²Ž;öïß¿¢¢"—ËM0ueÕÊ‚M}ŸïÛqiÇÔ†Ô '¥{§›G7¿:ôÕúêúcVÓ¥©KÕâª-[¶¬ÙYnN§º6T7U'ªùhÌ‹cb‚Ä®Á þà; ~pðgc⑯öñJ¾[Ü{Û)ö$ΛÛO˜ÅN(ÚžkªMÅ»-¨µ}½¸ŒïòQ¤ÞĈÔ@NæC†E£¦gð/6’d lˆôˆOâ}Ö’£ R¼±¬¥žË˜Ï¿8‡¿‘æ<ÂuÌæz®á®ä²œtàTzp(÷ñWŽ¢„Ù‹/óK8#RBú3™O_å ž Œ‹ˆ£ž Œæ žàdîŠèáŸæõ¨Îv`6gðwRLaÖtcàŸ9i.÷Ê ÏôæU6—Ûº‚(å*¾Y£6gtÒ IÇöºzõ¦?_]?x±‹ê]ò«³.-³çóÉæãúeukõ•À0fzwWm4)»±ÜOI^[“›?Ç~Oç¶îÆD&s)5ôæ"žfåKìÉ`öã1Öæ¬ ü“Ÿñ{:0¤ž³,Pθšå$ÈÒĺs8_§3=Ù»¸.áД’Œ«™Ä,¾Ã ¶RÀx>àDžã$úEpü/D?ÑÞ‘|‘’Ëçâ Úó©ït¢s§3m:íMFXðÉ?Λ}Aº¹öí¨ö¾_|g’ÉdeeeþçÆN· 'Ó®Vß7û.;xYlaóeY‚T Hª5•L$ó5Úÿƒ ,ÈåŠrAq DPÅA¶0ûf¯7ïÝ÷Þ S'týW×L]ÆêÿŒ<'Ö':¿Ù¹ËÂ.‰ŠDÇTÇl"»¢aECCCMMMx¶étº´´4%µßŒý¸ò‰s&Žž;úÖoÞº½|{iQéØ×Çf7ïœnŸvžÛyŸ›÷yå¯ô|»çží™ÈþŸ±6­­­!¥Ög$F_ãÓ†pr§¨64ZmÉÛ9«QIfíOwúÐ=¸›™täP‹F}¯ç@ƃs3£x>"¹(§Íd¹šià}Þ§—ò½èÏuLà/Ü`ÇÔÑõôâN¢ Mý!ç!PEg³šñÀa E$ø-Gñ(Ïq0‡3“¡/=¹…n☴q³ø˜Îü0š ÛÀ›\Î|¾š°–Ƀ¹žC©àtú°!­*cJ˜Àµ\ÂXÄF Õ©q¼nÇŒjy4X: ëß4ÐÌsü€JþÁ+ ¿L«jueLäOœÍuif5¤ôϺ€ uÜÀðQ«ç´Üå7¥ ‹92b^Xªàu£öäAËØØ£Àc—=>Ò»x‡Ïó´±§9÷ïô¤Éº‡® EŽ~5µeEÆ… 3ý’r•Yßg½–c-ú—²¾À­Þá5.Èø$ážroUøòŠ åé“oSTì²ßúÁgôwn9&ŽÚ˜X|WVpõôXç΄ó =×Rs«ïoÑ‘R~ú«Ó.Ë*O4»ŠuŒâ!Žæ:.d8Çp(‡Naç<æs$/П¢À`¦…XÇ¤é”æ,ewNe:¿¦;ײÂst \Õ)¡[à1n` “ø Gð ‡r9x¼q*Uª««Û©`M¼6ù1Öù‹ŒOÆ­ìöCWmÄàÛ40Ú;§ÏX!»R˜áµi&}.ñ‹¸«ö(»6°æxgWùVlì‰D8·§wŸ=ê‹:þ§³­äK×~)™NÆÇ †Í•ÍK¾¼dˈ-{Þ½gáÆÂÂ¥…(++Û¾çö „åÄ…§-líÚšH$¡«+((¾dø%w\²uëÖÕkW×ÔÔäVIÏ­ÌAð‘ ***´;´ò¡×/H [8lô²ÑMÝ›þtÆŸ´ 8ä•CþqØ?š²MC_šÊ¥â.Q}¯îë»ð·¦Ÿ3½¤¹¤Ëü.1°¢xuqA]ÁçÊ+çÏ677ÇYvF/S¿ÇQB\ŽoͧhæóViiiyyyŒÿüü1áÀʬÓ“aœÎ¯¢qȰ¢õXÞkËx€:dM4…&°a¸ºŠfæ’ÎÓ߃ìh* Ox y‡hÓƒ á$>¢„c©§+0šÀ+¬å¸„ ‡óC¶³ <Ÿô\Î4~N÷FZ‘çñu ‡%4æü*³ƒ.vƒø‹Íá~ÀF~—pµ_1'¡k¹9)þ̦Œ=’ò»œgs¶óLtOs"ãiæEöç“B- C›m¦#ûð.KèÉ©¬d ÕÇm_%\èÍtå#ŽËxš•IW0;0:‚böaÓØƒÉY@Ïq|RApôæ ßã–2À¢¥Öθ/éülïYúMžg5¦-7îâ¤Ós>¡šçè™vXNUÖ¢”?$”d5pL‘¥IS·[Ç]\Íñôlu'×0ƒ'’Æ&Ý^oÚ6ϧܘq½oouéë‰ï|KË à[ã’w^]øÀ²Ô7ŸÛþáfޢޅôIØZî€-²LuÞGºžå×÷27c]5Œ÷D§ÄkÛi œK†‘Ôò0™>ü,+ éÿ?Ê«ÏiŠ>³÷_ħíE¤Ú@±wÒ¶Ÿ I’ c®Xp¯}ý04+1¥^øšüè8Ÿk|§qñÿd•––††,fÅý_­°§6ÿÂ#†r$aNYSSÓÚÚZXX¸füš²Ú²Q?õá¹æ2¹â…ÅH¥S5Cj‚dL$“Éä¨;FuØÞ!ÌçzöìYQQѹsçššš-õ[b°x¸{áøp¼{1¦&ÐGôB‹_ZZZXXØ¥K— ]6;@I¥Rqÿo§ñP{¿º‰i¤iæ%E,•GSNø¶P@* *Ó¤8˜Yôb!ã˜Æ³Bš9Šý¸Ÿ &PÁÉ AB-}˜À4æ2—}HRÄv¦ó.ÃèËþLåXNäÊ™~nR––œŠ„¡«áÊhäö~O-ü”F¤éõ<Ç" ø#O ­!)\n‡Iú>«IQÂ[ìA†#y;ç¡Àý|…gÎî¼E ›ØÛx“f&¤(¢ž›’Näû9-Q ­;ÃȦ\žu+kC /r8CÉÛ¯Éy”ÙôçÜÀÜ„&Òük¢ˆ­µ²/#X©3ê»—êkÏÞ@õÿ׊G[bÌw›S™Âl/|ALûƒ•ÃD-6^»rWù„廪[æÃI|šÂ*4yqÕ+_U2ÿ?7cØéÈT˜qÆÂ†eeeݺu }LJ6Ôw­ï=­w"‘u÷¨íUÛ^Œ ŒøóˆD6?3¹L8^¶yóæmÛ¶­_¿>ÌBGæa!‘DmÄÑ@&“‰E,ã‚dqqqC¯†ö~`¯ò½~¸ê‡w¸sLvÌØEc›g4Ï f†P‘üoGF cšþ¯õïÿZÿX xͨ5õ½ëgŸ7»rQeÏWzþ×…¾ÿÕŠóé] ¡íô¦îAsy›½Ã}ˆÓâÕÄÊ<+Ñÿ4±Œ:fPýé ZXÈ,޾óÛø^³³9ˆ¥Lä{|ÀkLç¬(z ¼K%ï±™}™ø‡’%ɉ™¼LaBÀÆEM²³¸Eü€¢ÀÁ޲ŽLe#»E‰Q2޳8¯ò1Õ¼ÍW‡ÖrY~È4NÉy‘‹ùud8œ÷™Æ>¼ÍZ8©y‡¦Æ›üI4Û¡¥ÛÌ8JiâºÀÍÌB±’ïí¼M/î¦ëƒØƒõ±;îM†-ÎI˜ôpnðžþzŒ-¥iodL3õlSû±))›pJVM aVšó+Æ1…圖ó V&ÜOS …’@I“Mš9µQ:¡0i`N!ûÑ;ãªÀ7™“4 å”VrÛ¼3Qáƒ-{o?cƦÌ~3{>0íCw˜ÔǺn¦ت;,Ì8"g Ÿ;ºÄ¶­6¦]˜1¡u‡lfFÛÔâÎ ¹á«}çi»-3ï#—V±™ìÅxºñ<'삞ÑàÜirä«4PÀäÀJ.ãföe$£D9Mœ•1€A´rdàAÞäd~[fDRa·™Ëw9”¾M‚a»²¿í}@1²Ó‚NvÍZ2óº™Ù‚l:•Íü??p§Hô]5V[[[?Û#Æ#k»zYûÇ=É)—6çlâÌ}A4&¯A\Í|fAÄ_^Ä¥\Ÿ‡’º„‡É0ýÙ‹~J÷³wèÏz ”"ùóVNã9æSL rTÒ›ZžâP*9˜±5ÐÍdËaŒbwF}©2îçâ„Ò„ós~ËZ¦ÑÀnŒa).e¿·ÐÀ/˜ÃuDè’¦SÅÑìž ø6w³%íÆ¬šÀMŒáñújÙVàˆVßá7 eÿ7·ú7³1ò÷Y–‘à¾Ê;Ä ¤rV²œ¨Qu¡A·$þQ’HhÌÙ¸Ñ Ã\wŠúÅü.#™ò:f%iΓ°1aX•|“:f3š{ <ÜêyncIà ö¬Ö«AÅvßâ6ñ£œk-Yó(ì¦j³ê”² •Í.Ë(JxŸ#èKδÚ^Güeõ ß.}!sé+¹ŠÖ{­ÞÔbÏžÞÍ-Îá¤S[¬HøVûªZªOÒYéOµúCÎIórºó‰uÕ=×íÓðþˆš¢ ¹ÂÇßó§¤'ö“{4¹åÁœ&±ÙÈ1ž9Ó_Ré¯ÿ4«0øøÇ<åï_÷ç)¹–Khe÷2^ò%§ªÝÄìHÃz)ƒ#žÜƒO°‘+øõ*"å³"jø ‡EDûÃÚ|?“ÉdXèÿ"D m$Û4¥ó™îþ¯<!ËQ\ЋñÜa“ iˆñ~ù·Ø …½«ü©|ôs›–I>ÄüsÛZm`èÿ]a*ö ñÑÂ:^{0á.ûXé\Keˬ/Ïznøs‰d"•J¹ õÈÖ ›P°¶ °®0YüŸêh˜ÇÁDKKKX\ eCGBã     Ó|¦ˆŒÝL{>Ùò–òKV\ro§{Oèp ›^Ü0øCÿñb÷O¸÷„ðºb¾ÇøKKKó£Šö×ÞkJ¯®ïvÅ¢sm?oû„&ä²¹TS*Õ‰Ff?¹à“Í£6½flHTXTT4íÇÓÞ¸î ×LøÔ3_êüª¹U]fuiwšššÂ+—ËÕ××·‡ÆN«±±±¤¤¤½Ój﮺1.ëúhúäjªè’³QN1›èÏXÎŒƒENçyæ:ÒÂî”ÒÌS\IJJ‡7¨É*ÜÆép2Û¨` ¯Ñ!ቤ{³nb…jèW²/M´ræ@þF%8‘¥ÜD9ÕÌðÀ,jÙʦòÕ¤a¬Ï©æ÷ö/7r‹+Øt$B±_p=×±o˜‡ñ#Žà,ç»”r«y-z³wÖ»ÍöÉú}‰1…ª›­gL`S±®)C²zW™Ôa“É ²ÜÎÑ9)²¸ÁÈÀÌ„½ö ,HØOù6鄹-IÙ.eÉÚ7§Oà¹Ôʯš7bãå÷·NëY|öøîΫ!ilàJ:RÉ0r ¡”Ç’¾Æ¶J›­ ÜBÖ%˜°{N6PTžót0­£{~<—©ÿö“ö<:9¬Âs¼ÙËOÐB=ksn ŒJçÛë¹ÜG35/âD6;é˜Ä¾«+n?±eDÒÜB3–·éYf¿œùɤ)¡”ƒùA e¼Ê±=9"Í¡ñ˜ð²eËÞ|óÍ|nžÐ Ç—qÈÃÒbê¼pÅCŸô É'ÃûØÆaç?a.=Þ™++ éK²Ùl¶9ÛÿµþƒßÜRÕ²ăڮµ›mn-nüøàNË;Å7" ›jö¨Ù¸×Æÿî~PsÇæÍ{msqCq§Å‚æÿ(lÅl)áŒÙ+ÂMˆÉPÚvg~ IDATÚÃVKJJ¾È˜pرߋ³˜M…-¨ÕLˆÈ§ó÷wsĺ„7¸ŽÙ‡³¹™u$–MÀL üŽj2Iã(Ìy•"òûðÙHh|PÃÁ¿XÌ tc/psŸrFÎG{È LˆŠCy‰ÝS¾›õ:}¢Úfu¤U¸åœN‚ §3™HOÆñ{1‘y)§dý&^g*dHšÀÞ ÍJEìò#@þEÇò 5¼Â'ä"âàr&úÆV*`ÿ&&²Ž$9ŸiÌqå[znßËôÙÌñL`ZO£6ZžÓR¢‚ŠKù+ÔPOA`D`MBcÂèŒ_Ò3p>óÝEj“?ª“Îå¥ÞäpJYÊ$¡cèÉŸéUä¥B_OëSgkÎ'9¥l奜¶êP¦ªÉÆœ\ ÖS†t¼øûM³FµZV£€ê”®Y±š—©äŸ™óbÊyzîKšÏ&|=·£@úZÂ×RNϪa³º”K¯6,“;`Fê– ³ng%dSÒ\µÒsIßèå‘£l{„€œ–• ›ƒdN:C@ âë,$Ãq|HæÐ™ÍL‹žÒñ {qD„ª¯mS Œa10/¤S‹KùÿÅpU¾Êg·Û•ÔH¨ÝãB(ZØŽjƒ‰j1Åjx¨Ð7„8‹ÐÊ„.d§*YùápÌûÚ©°áÿÑöö:TûÝi닯¦pujZqØŠ.u ’ÁâSzxP~j¸½÷ö¥'--ÝP:èÑA½§öZƒL6ö Có÷Û0üÆ8ˆxD,nI644äKpåïLAAAeee>=Ç®VHZÞÁá)—ËmÙ²%‚ªªªWŸ¸W×½ºÎéZS[³«œ;ÖõˆBñ@wÜ‹E~C?žRŸé}úLï3wìÜô¶ôîOî¾ÓóôØ %g, ß^PP(L¤ R…) Š ²‰l~Þ™¯?óot|¶qA"¼;mí»rW!"œØáÓýªžìÁe|Ÿc¨f Ë9û8Ÿé,g=ØÎÞ¢™cØÊÜÉ¢@!¥¼C]à$™ÈÞu°ý×{ä Þáj¸¿Á9»Jó1‡Ñ“ž¼H[øõ”°™ÛÛ¨ ‡h0B¾vÔÿŠdýÿ´:tèj½766nÛ¶mW.aââ¡“ÉdÌåÓ ŸíPc;³BÄî*<~èÆBåãPÂØ¼C‡±— 1Ùqð¹‚&±,]WÚûÕÞóÏœ?ôî¡UU}êå­‹O[Ü÷…¾ekË k óÑùᵇ eè§?®RTTTQQÒ”ä>³Ùl8íou¨ÿEêº!ú&>N~ö:-ëTSW³Ÿ„þ/vÃ!ú4öš¡BXÐ]iii¾¦I¬„¨Â\.×ûÕÞAØÅ­.ßPÞ}a÷Õ‡­ðæ€t:]ØX8èõA³šÝae‡¸ïõ¿]Ÿ,ªg c#¤°³5š;éȵ|›ƒéÄÖè5¡,a.*†C¾ã¼E=© •j;ˆãFÆð™Ì"<Åü•K)ˆHÿd¯¬+)+pk«ƒ8›»)'Å!ܘĊx–bê™Àn¼ÅÇ®§,éÖ„æ¬NWѯSHÀ|‡Cy‘ßqb$Ø1…×nMY—ñ ²\Hs#‡ÒŽŒ'ÁYStsByÖjV’b ÷ÒÈ&:óO>äfÒƒáŒd!KØÝ¼¤=þ!8]ÃCl£{(NûÆT+réÇöÌfû4)nò*—e¬IKelduƒ?s2e|@6Z˜ÊÎd7ºg(5åNèoÄ\%+­ÎÂUiÅ9¬ó,iF'"Vû¤Y ˲j3º$,ÉYx0£C`U ©ŽNm0"«8ã×<™pl sÆW¹#%›qOkW»ºõêu±Ìâ¾Î4XºÎ–œßr ßoõ3éq:½lȦUï£ç»ðW¾º\MN‚÷y-Óí ›Ëþ2?â.dϬNN¸¸À{-º³É¼Q:<¦ÇeÖŽ¢8¡88æR?¿ÃE¡†ÀtþÌ3)g]×ä^¼½à¸÷Z×}Q¾]‹cáöè¾|¹ÂØ2¶IMÂfFhCQ¥ždûàgOõþ9b {‹ëŸmªXá_ËÊÊâ*_SSS›’Ñ®UhÖC/:†ì÷d¿TK*¤u3ѦM_üñÈF¦šSí1œ±Þqè´Â ^Ü6ËJ «ŽáœVœoÅuÚ|?C‘y§{Æ !ëUìWâÐ!FvÄÙ|Ü2lO 3ã–Š– 5ÐôŸ†‚‚‚6Úó¹‚\KyKÑö¢ð¹Ê‡ùÄ>8Ì5ëêꬲµÿ֪檊lE"‘H5§†?6<‘Mø´#®îY½pÜÂuÝÖ™<&±eç õ|hÏ.eÆÚõ®x–máWƒÑägÏ™3ó™9Ÿ÷çý~¿Jï°7‡1™ŠÁþS ¢›½¸2ŽfÇpø _-eJ#§ó6‘f)3yÓYÊÖpÓØÈÛ“pHÁb6³WñTÄ&$Ø›hà\XaKÞœÐ#4ÐÀÙÔ„~ZŃ*ëXÄ\aýœÊ$îã|'ÉÙ¤CµLâ8Öð4GQI/sÀàiüo†„6ÐÄó,gkÒÅ4qbÚišÐ’<É1™=Yêw˜:Aá!­se¯‘mä»lãDéFûc=Ù]õuážûT%Œ5‘©÷v\ÆÛlc4?B¹'n*˜Ÿr%³CïDªùßfVŸ¶Y[­”99/ó$áa¡fºBÛC#Ø›ƒah³†[1Üè©”}2ŽKÛ»ÚžmÞÎ) Œ,øG¥/¤¤³~Îz 5„&&th楴IŽP¡B*gA¯'sÚB7¾Xõœy¥FzfZ Ø`bR¢àV„Îd p3Ë]ýG¯î¦ÿ4ªÙ7a t‹x„¹)S&ÑêqþBƒûª<ò¤Û·3>åæBçë<[~"ϳŽßì¨|Þ¾^IUaÚuib_co&ó÷2•×yƒnÞ¢š02{Wëׯ饗Š[Õâ%à½êcñ–yxñb–n´¾ïìô½RZZZ[[[__?yòäÑ£GWUUE •D"Qœ`E¦é± m$³-XÅ:¶‘êv¬x­æ;o,\õ®âÎ\ÜsŠWÒ-¯‘â{}}ýÈ‘#÷Þ{ï©S§6¬¢¢bË–-¹\®8»ÚYA*:f d­ž²ÙD.„ÿœŸî‰ÝËO[>çs=ïaµ>ˆÖ‹g5* EŒÝHÎuôèÑS¦L‰Ä×ëêꪫ«#QãØã8ÊP#+ú¨íHâ[yKÑGÕÈ£½ÝšhÆbÄi ‚Ý=âIŽƒkçÈÎ5Z“ÞNw¤‹[n1@#—Ë¥ÓéÖÝ[—ž²tÂë¢pMftÉñÌG7}`` jSUÓܦBªPÛT»c® A4Éq :‘H˜èÉOÈ0öç0ÞG³š‹xFަjšXÉ\ŽáJ& Z–`<¹„2•&e:‡ñ$'QŸ³e«ôÚ£Ý4&po‹«Rjú€ULTâxcUÚÁÓ>HažÆ•”ptÁ7èN*Íï€æʲ¤Ñß ü6ô;b+Ãy’2Öq(Ë9{°3ž'™Ag±Šsò^åM^Êú+ûp2Õ<È-‹C'ûøïìÑ›öÝÏ@$Òí'<º’ÏŸêIuÏ)ûÕ±]þÐ$Áw¨ Êos?*¬*X›õÞΛE{©KS*¶û@ÁÁ ÏqJ ‘tkÊ1 Ç]­½KM‡‡Ρ„#¸·ÚåÙ^3YÑ ­ÍýýBN åyŒQ\¿Ñ9¾8Ò·ÛV¥|"ï¡.Îï¶1¡;ð…Чi.wHÁ¶*“»Ý[nX(Ÿ•,èš`ØÛN Ý\£¾Û@h~ z”šäô óo½È–P 9×1–F~ǼÀ# NqÍ0Ê9¹Zª ÕoÜ Ø6žÍ)]­ŒS¹,a{ÁkÆ”9©Þ£¿Í)ðw.à(úØHÈaõ¡U®¸Ê¶Ï9íDîÎ&šxgYÆï¸ƒ×™Ì’¬äUŽ/nQ”——Ç>CBNñFrˆÒR ‹¡zïE¼ªCQÊ5ÞKš¨ªª*Ê«jjjªªª***ÚÛÛ#8õΩտ´9Þy_8èž…fVò4%”2‹‡™>ˆË˜MGógZØN?9€óÜàÍÜØ'ðí‚T›[AÚuy.ì0‰ÿÑÃ&ÎàAŽ¥!Ç^ „g›Ø­¡ß…ö }…7Ù—cÙ¹VRÜGš Röʉ<Ó^a 3W$“w'3ž,d#IqYÁîxKö¨²«,÷FÛœuöú ŸO™›ýç÷óËüÃë‚ß›5šiv£\î@KNâÃÈ{1át6¤Ý[­³KI‡ÚK&µÉ‚œ¿Ð›TŸt{°ÿ6ÙßÍû*£YΟ™EMÎÒ¼; _Ï{iÀÝ/¥Ü\®³Ü¬&XS«¼ÍCœ=Ö9½*B{1:o\èE²IµyýCi½ëº_é‘Û6YpphNƸœ…Ü»M_M(Éy0tUhmhIÒ5¿ o*ØwóZNeTÑÅjöb ÏpgQ’s@hsÞ·¸„/r0ÿ÷õ}i}m2p¦Ûoö“VWèoÏÐ_ª¦ÌÒeA ²;H„ Ç:緬ܴå¨á,á$x‹ƒR>•Û±Eûg¦RYY3l¢-d”¾D?ø!ê5ñGïÜÙÒiHÀ‹[ô“Ž`cïŠe(¶ƒŠ<&¢®U„ˆt˜ŠWŠH‹(NG›îÿk³!•J¥RÇooo6Ú1ÊnȈÅåâɪ®]»¶¥¥eÛ¶m===‚|…Ç—Éd:&wlŸµ½jÓã|÷Ž¥yÙ%Ë e…òæòqOŒ«lªL•¦†lâãÇÚêÙ9²jŒA€#ŠýaÖÖÖVTTA™iµ´´ôöönݺµ¯¯ï½ø×» lï9ò^ÅÞ9†/äƒR¥%¥%Å<„õ…«Òm¥u½u1©®¢¢¢¢¢¢¦¦¦££#WÝÝÝQʘN§Ç=?îµ+_{å²WúáAC®¥8qÏf²Ë÷^¾ûòÝÓíéX©$ö{,ÆëÇë¿ajã1N yPÇKèáSü7²•‹¸•¹lTÌ0•&½Sïò­Nüøõ̦™+¸žµƒ‰Ú\*Ù‹ œ ~Å•üŠîeû sà DKÆîœF+²}¸ŒzÚ8†c’]ÀÏèçôÐm97²-傼ƒ“öÊù/ÑÍ4®åmNeÚ ®a/ü†IœËK\Q°2åôœ[Í|–‘ä,f²‚ç/ÿ;ywq 3yŠqÔ„¦ÜŠAû±”QÎÝlâë.]•ʿ둌×òæxc´7FpjÞuFìcÜ})׿—Þ”ðÅŒ¾Ð $¹)á¯ÿÈËPQbß‚Í:ÉÐÛ¡ßæUkôv»CÚ¤ †‘£» -gdÎÍ/š=èàÄzã:}£_YBS·©ëŒÍªjÌÈ 2®+uNÆš7R—ö±­æÓÉÿ´8bÀ’PtsL¨¬Æê¯nÑz°× w¶{=ç“Qpmw™Ð>Lo7*m|Þ)½þ¡">IchEØ}pÅÓï”úB›;Ò>Ÿµ˜Ÿ‘e-¡ªÐï’&'}$kIÚ‘©¼­\œòÝ‘>ºÍΠ”Ú^ËÿH88Ì}-¼ñZ48ÿeß{ÍQ_ʶÎÌ{jÐÂjsø1Îå &QB%3Y–÷É2öE+õÎÛø[óoÛ«/ÍÅËAqÌëîîŽR!ºÑº5uâ´¯£5T¢Ì&Ú×Ç=¤!\±!‰ÑÛøx•‰šOååål! W1ò¾xuޝìÑy¶¶¶FÿF»1xl×£oDßš¬™wï¼tË{Ãx¡o_ß^HÒÝé²íeïª9R®âÎMTüŒª”Ñ+QS-¶©Œr©0 {zz²Ùlggg___l"%ˆ1ôî]Cû GyyyOOOì]'£DLBÿ£vEm2™ü‹ç*ê‡Ådð˜lÞÜÜ7Pc.ù°µÃöÿÞþùù¿ßð÷q ÇÍøÓŒC邳ñ‡#–¸dÔ²QÕÛªíä5ZL´*¾ÿ2\E£Xð²,âLe,ûp?Ÿ"à&îf1û±;c¹6ïs[ÉœÄ!\Ë4þÊÖÐÀ1üœÇÇT`Ïó!~Ìé<ιüŒ “( ²[zx,Õ”0—sxšîL:?´®`“øZh8mÜÂõl Ý™sŸËéKÏå}›3ø|Ê‹9Ÿ ÝÍ¡<Î…ƒ¥Èjžã¼šsÍ ýîå¼8( ØÇ9˜çy³CWQÂ'XÁQ-4ÜQä,e¢Ê¯™aö¾Äûž¤òØÜª99íÒŒ§xŠ“ÒÆðå|ëƒAë壕mVŸ´±ZwÂÕÖ”e-e·ŽõÉÍ^Lú+—ŒRÝâ§¡#KœÝë±£ú=ª Ô¤d*ìÓ£)%—óth>kKü>k˶ùêLçeM[åoIWlÖ^&“öP‹˜4àñˆu—vpÎÛY§ŒJ;0/É[ôò])_ $;5÷ø@RIèþ«žåÊQÒíFg]úeè£T§šõ\ÎÖ‘FUùás3¯5¬` Ãe¡ïõÉõú-§gýGÚﳺø û”;¼ÏŠ¤Ó˜™ñÙ_˘¨åLË9}›0‡¶´Ýíµª›ÁÏÒ~™ëý^rñ9¹¯÷Õ—ýãŽÂ–yÁu_Nlî,´máfzŒêÏ­¹Qu0!Ÿ\ŸË¹Š ù#UœÀÏ E½ÁÝ¡Ÿq.­¨¨hhhˆ²„˜¼³^by\.ÛÙ&ñ½äŠYºÅYÑ.mGGG1絛¯¯½½½©©©´´´««kˆÿÖŽ–ø¨Q555³fͪ¬¬\·n]ggç–-[úûûcÿˆ¸­õ^úI;W·"Ÿ§˜ú¿Þ××!ýêë뫪ªFŒY~Dñ©§§'ª¤­\¹2Z s¹\$ìïÄ£Ã;²%ÙâÞÕ[ç½uȇ”––æÃ| hŒbFå†Ê×’Þ‹ :¤ÔÙÕÕ EGˆ"GÄ"Š2¿(°EÓu§úúú"EqÁ-Ò¦ŠUEÞ S<½Å9G±ýpJD‹ÊhÝÝÝÙl6š™‘ŸÑ—vuu qÚŒ.-zâ3‰fxgã„aESE²%yì—Ý|ÀæÇn|lú}Ók×ÖVo®Ž+mÃÚú–õµÏjO7¥ƒ ˜+í«²ÙlWW׿ÜÃí¹r¼_é +ª >2Ôn§„Ky–ùÜÅż΋LåPÚy”ý>OŠ=ů9ƒz&ñwsO2<áÔ‚ÝxŒÆñíA-¨$+H&d x“_0Ûò6±ˆJîæ[ìÆ:Ú¯%œ—·–C©eLA†OqZ¥LGª}½ÛÈŒïÓÆ<¦p>糕¥\ÃMÆÊ„™œ@;/ó7²wq)G±”c¨¡•ýh£‰L¢¬µpñE½›EÔ³$xõã¾_îpa. ̦!TõF Ïü²×òÀ—ûÜÜgvÒ[B²?ÔH5Ë Ó•ôD‹®mîg¿r³†)ïw诿£*é°[’æLÓ¶Xs…Ê·‡ºøópm-ŽÈ«¹Äs%¦×9­[¶ÇŠ*íó}Rê Sz%BÏ0¥ „æJu)+GÙs“K,U÷8¸Ì°½]nOHר/´¾Ç ZJP¢©EUÁ“I³ . åBåÕ§íQnq‹ÅÛ=úlàŽœ½òÚKn'(ø ï„Î˺6Ž ¹Ñ†µ~]î3¡M=ö®õl“9•*è§™ë²>–Ðße=²GV 7ä,ŽáG–™yPþžzùPOÕûÛÝNü½Ô ëöçøð…rÝâ…#hf*)zØ6X;íg8/ÒĹï÷^¨è¸û#âHs¡ÞKôºxI*ÇdÕžžžîîºâB_,”{ÂVUU•——ÇyÃ.ŒKþåèîînooO&“QMì]+555'NlllL§Ó+W®ljjŠ’° ¸k¨zÛnm«_Ý_Ó@¥Ü|@!_ˆ¢l<çÑ1‡ÌêÌ!hûâŠk”3Em¤ŠŠŠ(, áhG{‘(lÄ^ïÅ…Êø¶ÆŒQû'™LFzðù|>ŠÊï'½Ža1´äÿ2†ðÇ£d®£££¯¯/:¥Gº3 #zŠŸk÷Ò¸eg,{ýâ×çÞ5·zKuŸ¾ÎúÎQoŒ* e«Ëº»³Ùto:š¢è´‡ôhÿŸÂÕp>Ä›¼Cý` noÖ10hÕËpÆr³Žä 1ù ƒÕ?Lf¦ s=oÒI? y}PZé6e-ïä‡çh Œ ¼PÐÂéÜÉ2Ž¢™»ä>˹lçO 0’4wÓÎmÓ(t~Þ„<Ñ<ÀpSÚ÷¸¯`]«ç9— v´ß÷g=G3™*Ö0#åør]îf"yòt1fž`sØÄS¼Ùø&}.ï^e kY|­×Aÿpìù,æ0ާ.ðVhä}“º¤}–³;Gþ#tx‹û“;P”3ó1‚³'%••›]P8´Ó&ž¥½UuV¾GàœU¶ÜRçà~ÏtX¿ÎÉ}–ôî@š<ÀÛ̸7tTàC#5 XÑ£r˜ I#ºõÖ)MHð`÷¼>–¤-ìPUêÅ„¦´ó 6óý¤Ãëê5¦Ô™åjÕÇ\jú7`UÁ†áò]ZÓ>\ÍÙH¶¥M 4‡;d®Æ×x-gD¿Óx¡à„¤Kó:øÚp7¶« ìV°|ÅózM(¸›7šTæÑW°€LÊ·S6–ÙÚffh¿Àm)§WZ“uZƦ@yRAKÁQͺ~ëžßÀž~|±ßßá3³<½‚3øœÈjFò!Ž C5¯riñ)“ÉtwwG©I ֊ׅH`içýo¤[·£†ô-bž»‘Éd6oÞ\|(ÍŠËkjjFUZZÚÔÔKrÄm†÷ X£i¨bÙ:ׂ"È診º:¡•———••EYB´F…©ylm»·½zé«{ÞµgýâúGüÿÚŠ‹"}Tè‹ .±no †Œþ7Ncø@œQÅ‘,*3Fûƒ(œ$Æ;ç¯Å6fCî( Ç9âÎqå½2˜¨9§Èùº¤¤$B«g2™è•øY2ËbçßâýÄô{§§úS[go]~ÊòÆWå̼g&Æ,³ðó ß¼à͹¿˜[¬’=ðïçÑÚ9\ °vÈþ÷"ÅŠÈÙèžAÆØÀ¢„ÓòžçdÆñ?ÆìAŸªãyž?PÎyÈÛÜE?£Ó ™Æßi`1§ñ›9œñyߣšQ¡M,ç.Û©â›yÿÍ ~˜rOÎ/‰¨3ý´ÓÍ+ìK'`€JÖp+ÀXŽow;»1Ž…ü‘õœÃ+<ÈEÜC?Çó5F†6fÈ삱dXαƒÞ{pݾúó±Öu²'B?dv‰Í•vk3×·æç/{¶ô÷Ôßfd¥ÉÍî­rH9M*Ù·­Â;¥.벎o$]‘ó_Lçʼ4bº˜œrUZS™·›­fÊn†·{€}Ê Ž <žqCޯ慎l×ÓçùÉ:ú}ˆcjM,ÑÓd8 ìz­Úðµi=ú IDAT•ú7 zHHgúý›3J¨ì³®ÌÜ: <Ípnw?jÑ_ðñP½Œï±{Vš™ñH‡§Ë}¸Ï·G¸b›üHÝY |± ¤€Sò²yÛZ4&M¬W·Ý¦‚yÛ<Í꼤üj¤±-–„öOùþ€ŸqHh·‘éð@Îá}¿)‘ÃuhEÄFÏy-)—•O».+Ÿ· Ëœ/äøhèÖ‚¯'ô†Ö†#°ðƒ†©çäJÚ<ÑžPÆœ‚ë›ýí8?ÉÇz,Œ8sHSÎZЎâmŽ1ÅÈÀÈ-b`` ’Y2¨AøâU#¹ˆeèâìjHç9S Q#Œ[¬ñ³ë|vfhí Zöô¤R©M›6UTTDÝ—âÍþû'WÅWw¹ŠuŠw \—÷ß\O)39•_ ÚØ/f\Þ?˜Eϱ7›ø;Ó8—<71•Û}FºIb#Ø“&6ÑÁÞlao‘?äy‡ç]Q›I³iÐôd1gH.÷ɵà§8óBý &$ùqVªÓ!J~oÿ'ý1³hÌ6oäÕ ¸)´ºÇ™}:(å·Ÿemʸ&ïp>·Ë’IGf]”rkÎm¡¿s[^Oh¿¼†:í=Æmt'Ußï’nŸ/øD^e锟Œó­•>²Ñ_´$äú¤ºuŒ2«Ý[cý¬Ò¬×0IÛX+Ìà>ß |1mĀ͡ÝêtnÓ”òÁ‚dR*çK£ì™ÐµÅ¶SMiÂø­¶$’Æ÷¨ë÷rÒI­V2·ÜpJ;Ô”¸²Ö7YÓ`còöàÕ‚=ZÕ|޲^åp&å×îBÙœwrŸ CWê°$ï>¨Mø\ÒôÀÀ^V.2©NI—ße\——èw7[CÏÌðõõ’iŸms5WîNÈå- å¸Ïðu®Ê?s<3 ~h$¥sºoÞ.Õi\hIŸÞ7™Ì¹š‰\ÌÁtÐÇ•ƒ¿—æ1CúCq±¾8M‰W„8 ‘¾-†- ±IŒ‹„C:.‘Ý»þà£VY±GC¼LDÕÂ|>ÿÚk¯AµÜ2™Liii´<í"»z¯×c§¸^‹,Ĺ]ÍÍÍÉd²»»;™Lnذ!‚Õu t¼ü¹—ŸlüÛ÷ÿ6åî)£^U’.‰çÐWÝW½¶z¯;öJ÷¦ß•8<ı·ø•Ó]ÈsD+{ "Uª ¢B\t!Å¥Ýhõ–àf9¤ÆX|Ø8eÙÙzç)ŽP¬«G‹]&ßõ¢Š5 ßµYÜ6‹>„P\üÔÅL»ø˜‰ÖĨF%“ÉDi"&Ô¼]sÔµG=ÿåç e… Djœ‰FÇ·nÅž5ï®Öpw„½šÙLåûƒö}/q2íü tà(~Ç™|‹4cy8P—æ41ÀfBþ@=%L ‰OÐÎ[|f¾Í(d`wæ“-x&iN§ ’yIe9wñÞälZy24’_³û³˜vXÏ?XCý”ÒÌOøM`dÂy_ <îTŸÌžg,3ÙDŽÿa9ßeg º¤Gž~×’l³}‰«9Ñ)Æžìk;/qÿw|ù,«b_>VÝ—Ÿ1ËÏ»æƒÁ¢i¡•YkX]py¥Ö^çœGš® oÏ0âm_(•nµ,gOZòó^ \Y¡1iÏV4…¾‘÷“‚Í’¡2¾Qéî^—´¹žKKœ“·!¯›r>½Ê„[C_Î+«PÝå÷Ië¶›“4"­v›% „V­ô ®Ò™ÐÓ醄5#<žPWh6²Ù•úIÒÊnÃr®.us…¾fãJ´g%C Ü5Ùš¤Â;ÆÔ[Ûâ;Y ù~¿©0¼Kc»K pe³ÇhnRjfF©”’O¸ªàé¤/„(èb_My ôR^å#6›Íq9oóãR7 3ªCM¨· ùšò@}‹–”[KümŒD§OåLèõɥªàxÒi¿Êy!ü§›å¹|“%TðZ •”ÌÉ&mNøpF‰î¬×øæRŸ½?8²"4Ÿ+IÓF’Í|dP zí²ÞÎM¦˜àK|‡-vm/÷©÷ÒJߦ±ó¶³ïxÌvв´T*«0DÈÀV_QOOÏMwLú‰Û<;qÅ Ü¿«ÞÞÞvÑÕÕC²Ïd2/þ÷‹s®š“H]0vå…+ …¤×'E_Ô;®w v ùäæƒ~~Plæ«ùoþ/À¨ K›Çð÷Š‹ÅgR|#¢û[L/+ŽCQA,ªyF,ìˆ^E»h­Áè¹*rù1q»XÕ¢ø=;K>Æâ¿'b¹ë§±ø•Š–Š÷͘ÿù{<¾Ç¤ù“†4‡P‡&;©ZäÙHÿ ^íÊø1]Å ¦ CesxƒøgRÅEÈ¡ ,¡–W_´r&ëù2c(e;3©#`_ÊXÏî|‰c#…òPkèMÊùkÁRÆÐLËéb.KvØ>)¥’W¹˜=éa؃±ƒ°õáÌ =O]Ò†NaAà†À Lgk™Æ'x‘µ¼Ä:^ã…AÊ6fªÖsš–3n®§Îà>ÏNpù³š{m[à챯pò5‰¿Œó춤y¡á }jf޶¸ÛÜP7]ü=ë¢Íº,éÑWPËü¤Ü\æ¦Z‡gŒÉx5alèíÀËi7¦ü1á#Y³&†öaf¨¥àUö¡&áÈ„­·æ,è5w=Ö…êBË ¾\%w@…ÎÐÚ ™Œ·3*ä+5äËz¸Ú>ÖŒæÈ+²&4U™7à¡~cË, =Pá„~ ÓÚdZtçµfÜ[æàMÃlðt¨½Äø¼a5Z«Êž 3RÆæý¾_Y¿ÕÕ²-uÆôº¶Ôaýó®N8¯Ü#%>è(8¬S’íÔ°'Oä%)$-ì³%T‘2+TäéËêkwWJûö[Æ+yï·˜yT„ž%ÒTU«Ï9=Tú=ûóƒ‚ÖÀ¤r+²Ö^ wïõÓe•¿ž¿ú; ç…ƒ^'¦Ì,µ%g8kÙƒ)\¬j1þüÈjoH *J"e¼¸©ƒ£u*ZªŠˆ‹%؇¬DïÕ‡ˆ>‹ìœçE/ÆIFyyy¤­Ð××!#òù|dQX^^^^^ÓB£3TÛ‹kDqÐÝùÄbzi\ÆŒO2Šammm[·nÝ´iÓ–-[Z[[»ººÖ·¾áï é0]QQѰ´á•¯¾2cþŒ¶ám[ÞÚ2¯¥{J÷ìŸÎŽ.$^¾ã°£=ZˆãI+FZFÈ·hÂãt¡XȈÔèãˉfã]×÷!¥¿IA`†D²øˆ '#.T<3;3©ã µBbU‹˜{%(1ò>ÞâDÛ ØB::H;*¬Ú™>èceÞèÅØò8Ž£±e16=’xŽ^Ùvð¶%ç,9úKGW­ªŠ>Xl6„wU]]=ï Ãw¡j±—Is$/Ò5ˆJˆš=x“ø5Ø@ϰ‘ë©LŸ·>š^p2«Y˜FõKÐA#ãù<³‚ÝÍFŽd>+ø×ò’`)÷r,MÜÃÿØ«ÞL†YÁgI’ä—ÜÊB±>0ÌïÃ0ž¤–—Ê”w.÷ñŸÑ)ižçY^ã Œt©¿…#’öÏRN ›z>Ê 41)’¯ ,è"ÍS<ËÓÜÏõ<5ÛB‰Ðf”–tÊù>›sVevS]†ÐÆÐ-)G±š¯&\˜0–Z5—Ú«Óó÷P“òyJ¬¨qχR_üô,¸œ“ Æ„~Ä¡2ÆΧ&4“9)½naû1¥ÎìRÓ9"°¥O_V3ìÙns(W0»`j¹¡yy÷7è ”±†õÔwx'kJ¿IIËF;|ŠÍ+‰œC öÚÍÚÊMÊ•ò•õRåÞª²¢Îá½î,÷‘1'ý-|âÒÎ'Ο]»¢[ûZe=Ì+•~ÐsùKG!ç¥.m¡W¨¡*òÝ ªà–¼=êŒÌûEA&üÉOÇ—õM¶µÕËý¾ÔèØ¹œ5&N1¼ÔwFeÜ®>ëgMFçÝii¥U¾”³¼Ke¨rPÕ½¾’ÑÚgI tàœ”i)i0+é?’jS&V¦Œ¢¤Üð*]y·öz¢`vÁ·ø}y• ¥u¬évh(xƒ’‚w{¦M¥±[Mà’`dƒ2®˜Ü½:Qð[²þ;«…½~uh¯ûBëC yš¦«vѲXR4Þgm**Áý{åˆÒñjwÞ{WÝŠx«-¯UUUÇ6lXMMM$ýɹ±¡ŠGœfŠÆÎßeWш´6"&oT ðs¿Î዇¹^û„g&4¼Ü0éÅI{<¼GÅÖŠwÍáþÑ;8þ½½E,zkPb8ÅpŒ—®xiþ5óWœ²"æAÇYÔ«{5_’ ­Å#–œˆ=«úûû·Ù¶üèåQ+1úkñˆ“ž³EâØö%‘cÖ«Æ÷9JÇ¿=óÛ÷Û¾×={Ÿ?þ]ù1% øYÚu滋 ‡±€J>È[œÇ¾ÜÄYËÛœÁSü–_ÓJ‚1\À‚u¾’SÉ ô²„ƒø3ßcCÞôÐL'§p§ñ³ ;`[Æ1Ìæç¡³r>Á‘C Ëèâ’ÜK;‡‘åoô‡fÒÀ™¤YÄ $¹‚ðåpöâi˜E–9õü† ‹úÏiÜúnÁ!<Çîӱ'Ÿ¥*¯® Þ©ñN:y5ivƒÏl·!«+0©WyÚĤoæUå½Èõûb¹%¦¬ÑÒª%µÃd¹›{ùSà«Ì <˜P—pjÆ¡K–%4lW>ÍÚ*r’Teš—˘Zô¶|ÊðÐæ¼ªŒÒÀº5öÈøsÁÇûÏö lLY—ð¾¹gn¹skø½O§ŽzuŨ= ík*­/˜Ô£pâêÏMKvïÎÒ'sÇVøJ¿-)_©'UÞãöÏ'>ú­ÀT¾1Ýú…Ƈ’ßüòÔ§fg3ù•îL¸`/£×Û­àæí>ž`»¥9ßHYͯF¸²ÇÉ#•n¶.’Y+“r£Ìlò_9ó³’þ”WQoœÆwέñí~™rhàj¶çlJ:¿AÏ&}ÖöÛ‹cûtð8÷óa¶0°Ùá£%|&¡+ðßyËB׳:ëÙÐéLÏ{Þ ×¸l¦¦n¾Ä…Ü’sGñ£>‹ø6™Ð•\Ìh,Fï‹ÞQE(R—ˆ[cÎf$—W~b£¬˜!o`ã0cÌ¢®¸òS,.þ®ÝâZÖÅ«¬¬¬¢¢b̘1»í¶[ThŠØÍï3kÒÚÙYAª˜~TLZB¾4Ÿ($¹¡kâ¨7G!ä†HÅ{óâlcÈ¥E°øFÄ1µ··7âÄùh<á»°z‰^|‹‡ô ã_üô‹MÓšöÿåþØØ‘éˆöQ•lñE‹Ç¼<&_šOf’¥¥¥QÏ2ŸÏÇlª!pƒþŠþ·?üöŒÛfÄsû®®cÅŠ“Åb¤û6U\M³Hž£²²2~&‡ˆTÅ}¸(›Œ¾¥»»;vq‹‹«Å§·ñ¤#µhTtQ±Çfps|¯w;k vtttuu½pDì@õóŠQ”ñ+ñIcY‹£xñ‰¥Óéݞح0²ðÔ­Oæêëëkjj"AÂH1²Xø8N w µØÎw¨¦0h€û/p/Ó³”ÐB†9œÈ›,çPÆ0’µ¬e!/ÐÄn®„‡¾µ¬’.=O{Á+Ô1…_RÉtò2ÓXÏ!,a[¨äG¤ ˜È^<·x‡ƒif5½T0ÍÁ t'ÇçÍ­,f,'œCñ”Ö8#£´à÷œ™01kP´0É Œç8^d àWàÃŽYëƒõ®äG$Ê\IÈ–AŽŸ0¯Ô©)ÏgmÏ8¿Ä>]zæV;$«±ßœÐ¡µO ·[J}Á~•ÆgL õò|ºaÊÛݘó@Æô‚òÀä”ʬôXÚf$†zè©´oÊìŽÝ›=â óZrm¶ŽèÕHO… JºåìÇ‚ã^«(˥ߞ4Re§õ3Ël)µtƒi¡ÂT¦dj¦ªmfÓ7ýä5zÖw C{wÀ@wY>1²bÒ;…_}¢Äè›ßQª+h!Y'[¢­EkÂS †·ù+myµ¹GÎëÌÝž0£àµœÉ£Õ”ÙÚìÞMLOšz íÕ‚BV]èú>'—êL9#çÆÀiY錶T{ §5ç¤VÛºµ&›pRm  4'=•0.MÞ«Õmj©RÚs¶QO]…6žË›ÈÑÕ‚ru­J žMHVKU¸;4›V¶2=ifØ^áżLÛÃìw¼<¼Ä2–0–ÃYʼnl¡œ£c¨ÅÚµkŸ}öÙ×Püc.^©£_i±GvpDe´x Š;ÒC ÅúQ?¿X›'Ò«0ä÷?Äï*Z’¢Ó+//¯««‹ÒÝÝÝÝÝÝMMM‘Ó`”ÃEïŒ7È+¨Øq8^n¢Z”Jf2™H 6 Ì1bp‡ DYaý©ë«¶T5¼Ôà{IÄé15-®t;fû© H±7GÜŠóѸçgW‘|IIIÿ„þGllÖÚ=¦{Øòa½¬²Ùlç°ÎÍÇoîÜ­³f[Mª?m XØñ-•…®ñ]‰\¢i囹÷O›^Éd²fIÍ¢O.:ð&ò‰8ÒǹK¼e‰ð Qâ’Úžª^VCrâŠY¼o¤ãÆØŠØ¨%Þg ‰+ÑlÄÃèŒêÆCØâÑ$Ä®Q·˜?œQq²¤¤¤á톒dIÇ”ŽÖ†Ö’TɈ¾CHÍQÖý¢ oî‡îj)LÄ/$çÖÑÃ. ™µ\@oðÖ Eá ü9tp9›ø ›BÇçÝJž †Nâ”ñAÖðçq+øÔ']P°844‘–/pÒ QæV³œ ”0fP߯™§8šN¶‘¥=ðR`dáŠeöìwÅãÜÊ+ü=åМ¾Js úZ½ÁClà·ƒ¬ â Ž$MïËHBò<Å"áö™Xúϲ=mS'´‡zû,£*éмï„>\Hhisè줽jŸQßos¨ªÊ«i³‘|Ê)Øêϵ~Ocà†„S ^¤o¬Ž5jæ¼I)ûÓÖýáœüæˆ×Ç·.ÿ^ÉŠLòü•ýý»å—$Uô ú +\ugpéåí×ÿ>ñÐGYº9íä‘Êš8 {ںIJuýìÚðϧlëªï7.ajµŽÀ œUúÆÔò͉ÝÝê—ÝöcR#ïÿÐØGælö³f_ëUźP60šl’¬BÞ=3±`Ã&meêSJ» ý iT§Í OXÀåáýš Z8>´‰©L úLhCèÕJ 3Φ¼ÉÂr3žìWF5#§|²ŽÐ§\“wuÒÛ­uFm0§[–edùk« …ÐË¡¹y·vøFÂí¡=XOÈ!œº“‹¶X4àørwfíóK u÷,ºø`` PSØÑñ´ü‡Ć”bvVú¢X\“‰‚Ù.ø¿ñV}g[¦!²âÅ­ø¨Ô“ËåŠc1÷6þ`&“innîè舥Œ"ƒv}†÷>ÎócŽýÚèÿ_4#‰D¶2Û:·uʽS$Ä¡½»»;Êóбmþ·ÿÈU½˜[\ÐËårÅ™b”AF«mql‹z'Q,\|åâÒîÒš¦šñOŒošÒ´æ#k¦Þ;5¶°êÓ©Îô•õµÖ´Žió®5éñIßòxcCã„ùvþëÜ#ªyn»uóþ›1÷Ö¹ÿ?ÊpDªjQ¬Ÿ[¬0;dWncýûbʸ±4DO+ÞD{£âD™Sü0ÿ€ÚÝkŸ:þ©ç{¾aKÃQUÖZ¥ûhþ5;Çð±AmtðÏñSîáržô>ŒCÉs9x”W9Ÿ‰ÌâI7(çb>J =}48|J¶°“©\“tYÁßB÷s/Û’.JèáLš‹¬Ffq3 ™Ä¥¼ÉJjYÈ)<ËSlf)‹ÿ™öñàSúZ¤à¹‚®ÐEy%” ¸#£…ûy‘VÖòE&^ÂZÓ~G5[YÏÁtæ!Õª+c,²QÕÍ®ûîñïÊ—u ìÈÜ—iB½[°ÙlmÛtIoܶíºmŽ6ÇÑò£Æý!Ûø-Ë/Ã,iöa¤! rBOên‡Ãá0Ô#{LËT«ÉÔj85÷§–ÈÆõd‰Ygo>ûÚí×FŠ#I{ÒÈg†ƒ!3ÿsÜíž« pÎ ÁhÈ…¸Nƒþð{脃ð>ŒÁA¸ö8»ös¸¼P#¡ Z`9\ó!¯ÃhpB XA†a(dƒ¬TyÍ67ÄàU>„•ð[¸Þ„é¸ ž†·!-0–@xáø¨„WuÊ$p7päqÔÞƒR‰»tvi,:gé\"Ш³ÛÉNWúy ‚ð&,3¡<É-…¯a*y× …ôC3¾%¾¥F ^âL…í2sbð›#N:Ê#:Ãhñk„‹é+’àé"de,—yÊÁÕÒE²¦ðÙ*†t!I4ñ•u!Ö œÓ…%{9 ÷Ó‘pr{˜B«À‹ çlâÎÞövôÆÜ–“ª#ŽPëqpï»Âûs„5nÉQÔ6ÿ ©Æ+|4¼EË’[²ÆoOâÜNÿ^ü¾®Ãÿ ã‚–Ã}î½±]·^¹»±u»ÎÔ*ò˜6~몋onohÞäIÞôwá“ˤ¦ÉN[c+]ƒ¿“`ˆSàÚxÖGN+ :žyL¢#H¶ÄÕ0ÀC‹1€W$‘K´‰=«æYñI4%Èë@/!TM­ÎQ‘2ì²sj&ÕNöVp í¤ÅXªp£Îƒ`•$ªbün²py]e¼YËI&AØÔÅêÔ ®1ÖÂý°Þƒ‡áIXI…2¨„%ð2 €ml¿Çrð‡¤óQ.+VÞy †Â•: w³ÿ õD÷ÆétBs†Jži3qB›¥N¹N8ƒéèèö×ÔÚ®««Ë¸ ›Íæ÷ûÍö—Ûí6Ïk8¹ÇÈ FP3ñ f·Ç(£Ö¨7âUìJ·køet¾ñÇèXD³h §6TŸY]örYzEºáCoª4YÖˆòfÏÓÌÄ'Ô^ú•p>ã²­aëà7'ô„©.aÎf’Þ¤µÓJ#O'ú$v_·{Ò“€¸/¾ë–]e•‰ ˆæDuá'ÝMÓ:†uìüíNMÖÊß,Ïý1×ÑæØ}ÕîA’BÇî.aOì>w÷€ÕÖ<ºfâcükÀá‡5õ'ÍŽÔBÐn·ëºnPªÍ^⯡ô9Ø€“ôl¦¶SÛ©%iê ²§tH·QVêà°ÛŒÖxüÒÒÒŠ‹‹‡ b³Ù<Ϥ¶I^öàï¾þ]]]!°itž½S=ÜwügœßÁð㌫7a4€÷ENÖ¸šŽ[Ýo„à8 î†;`)¬=N  Qhwáø†Á?À +!u0b°ÆÁtø&AÂpì‚]0vÁVˆÃÃp&Œ‚· ¾ƒûÒuî‡Âh†\ÓáRþ>Ïžçp| •*_‰Œ‡Ãp…Ê·0S&Sã#KÂ,µ2Zá&K.ÖÉÌãîV™ ýŠÅû¤™ •£†=ðƒƒ«"ü% 5ð V)…Q:£àØocA>§ø¹º U¥ö ¨½ˆÊL«ázq+5ÔUì¹ÈBmÎШ!É<¦³WàQ“cìëKöÀøY;éÓL£Ì™3’X`d'ïý×X!}QËs7ç¾ÿ»–úÞ”nñMúZ~q@»­K»²™H‰ç½ó=¸"-ZÐ$z ,©íõ-Ïähï\û²Š¥™ì8RúÕ/t½2ßòæH6†ŠÙÚ6%cÍÅ-Üô|•xæ)Iì×ÌW.ø§ÿïó†“ÓE¤ë¬†C"3Ò‰´ƒŠ(mg' 4S/°8‰Ô—‘U Ph£ÝA@Ah",0AâF¶Á\‚uL-“šZJJ„¼éä<_µQîÂnåª#Ü5†W·2WãÈ™V€(Q^óàORë'§‹z•Q279˜¦“4+iQŠ¢THÁv # w’[á µâÓøPá+¸úÁnX G“å«ö=ó‹à&xNƒ©„»áiÈ€ë.>v•õ´o0µPÍÈ~B¸pêîÕ˜™Æ†f1íbMš°™ÀÌ]°ñO©Q̼3ânÊ:fÛP’¤¡¯ Ýô—Me ËþWò¢^}fu¸0|òÍ'ÿ·K÷s¯%æ¯Gü§Âÿ¬+:º r3Õ]§<:eýïv¯÷ wËŸ¶ämÊÓ4-P¨:£jØ“ÃE8ÖŸPEOã·•µí¼vç´[§™«ç«ô%Éê3ª³–f‰¢êS›§4§oL·î°Ú;ì›îÞ4ôïCOZ|B'T4ïÎTÊ?á{ºÕa¢(t1³$5*µmJ›ßr·ÜßízR)b†8¯Éå2±fǰã2µQGii©×ëMOO·X,.—ëéܧoùñ–´´4—Ëe"}R›ݾӞé*Êa7œ¸úÁmà…Û`"¤Ã 8MäZøX£®‚JˆÛˆlqâÐõPKÀ wÀ¨8N^u|T: ,õ¸Z„Càp <®Ë·ö8¹I¡%Á[°z§P˜WÁÃ÷‚¬€/¡”B3xàcÂ’Ñ|áIà^ø÷/–Ih6¢INY£@¿Ï!ìí¯v\†ê#Äø­—=ã´È}i¼Ä…:Š’á:x+‚†Á¥à… ¯vðqˆ:›H¶Î…n´z$ ü-€F¨|.ñw!¼ß(ä |¬Ð¦QgKôÑ:è¿ MÁGdΰ‘Œá‡+t¢2]¾·¯·¼mOÜYçÜÜ•¬r_?žkrÇíÚç;߸Ê"s»T1Ò’DºxAâýämZvSVåÃXíxúpô(Át¤È·hwÿÖæž§YŽ&'x„Ûÿ*RËGW¹Å¾áçÿäøÇÉ¿ŒÎãH-yGB‘-¼ag†]&ÝJ§Ÿ|'¶ïˆÈU,ÐiUQ%ÜL²J¡E[×'¤_ò¢ŽZU¥#D‰sÃÛš6¾j'ÛÍiˆÈä܃Xe–JÌvSá§=Iv=7šÊd2­{NÉæ2¨„+H,‘(?ÂEy"ék=´‡x7‰ÏPÿ’¹2[+ùIš€¤1ËffÖ±Ì(¡ž7$ /TÁ‡'b×þ§QÛhFô¢|c$6cKn:$ a¦.E–šíü %½ °¥Ó2äõ!ùëòEY4%õ̳›n³šC’$ÿ`GyGÑ×EÖ.ëOJqµúìên Àÿ‡q1?§ðÛó˜øøD‘¿f|M°$XðmA¿ÅýÚKÚ›Ç7}PD¦-¯!±(Å$£†Ø9gß}‰Dê¦$ggŽ&k g5ä–ßxfcÚ¡´ôÒAùÌÈ7ìh˜Ú0 fÇueYþ9^Tj)™Š!4¹z©“KMÓOi fü„ ´Ú¬eËÊÔ˜jöN=Ïÿ¿70/’$y½Þüüü¡C‡feeåä䈢¸^^?šÑƒòIɨæ 꺙Œ{L÷DúaØA ^ƒÕ0Jà‡4ôÖy áPD* L¥ª zKÜ ³ Úá Øc ¼PçBA<?‚§A „L¸Xd£F“vL vˆÁSÎax˜f¸CgÃqHáȯ̥ý"ÓØ•IÌ L€¨~ •>Æ@ lÒi‰S›dlò–¯´Û?dóMzŸ-ܲŒšlŽôƒr¦-'#3óñ«ãþïDf(hðviˆ2³$Ãf‰ªH§@›H$WŒ./ W¦ÍMß8*xu2dHSù Îw0 “V…#ŽÄièC%¦Èô×)9(ñ“§‘tñ¦ûìˆ+Ó?¬>z„2HHtiHʆ!ìš«tÄ‚›Æ¶ß¿*«~zìíÑ2ƒˆ`o!+^zP/Ü–³jlZ¤ 焽Þ:ØÓ’ñû_ví./ïì´tf·wŠzIH¼ý5aÇdg½Kbà@ÚëÉMà S4{™½b‹xÏ:eÅoºâïÂ(‘N>CsIñò¢¼ÜIiýœÍTÄèX ÈŒÎ!QÁÃå‰Ó$Ä$ohœ#°(ÂáåÑ5Üù;ØË`;´ÂLX£A°éLJE®]»ÖD|™"¤©Ø9ó0^7á¼FÝsB-ín{çT&M7nÑÉ1€ ÝtnÌÔÒó,ÿmCò'\uLòÔzŒ°bÄe#ÎÊ‚µX,F 1TÚ{Û^[ØÖ1ª£³¼3{g¶ñi®:PòIIÎ9©g1í3 ön*¢ÚÄþ¥V¢=Qõªªš OhèK²ª?§k¾çò=9»r yÀcòµïV¯€».7–kšÑ”¿2ßÑà0KMÓf5¬,0@5gÕäUåõûºŸ±3ø7CÞ#nÑ*ÖÌ­)ÚS”·3ïXO/Šo¿/T’uÙÕá2H`N§SUUER¶Þ¶µiBSÓ„&O£GlI1Éì‰!4U—Œ§.‹UO©ŽÚ£öv»%l1þTžUÊ õÚÙËȈFiÎ;u«¾ñÆ wÂWí3…z~/æ‹Æh-µ"7Ë,C×f³ôdÇãóùJKKÓÓÓÝn·$I‹,‹Æêc‡iÃDQ4Ü8.´Yø>rܤ_@†;W Ëá øªàØ×Ð×qÌxî‡ýI.†t™?©¬ÔYk¼¯ó Èp/| ‹ n… ˜ïÃÝ›`$ÇÜ>€œ Càa£WßgÅ)ƒ×@…Áð2L€S:9<°>†÷ ƒÂk*?ÀÐKçEoàN(€&(€·Á7A Tà ð4L…L ñÑ–öÇ;'Ÿâãiñ0ÿbæ}ÇC ´Û5æÇÐ,ŒT¸²‹~:wÁŽèÔéøámk‰i•é­p–Äí:×ê¸uÒÃH ý%ú© cð¸ KcD©Ÿ¨ÈØ|,-ôIòì™’¤MgoŒâ$ ·ƒÑ\íeËÕþ鲪哎h ÑhÔ)*hÚG¨OûÆýÚ+ ŒàØ–"¬É=Èwä«™|r½ƒvË=ÆÈÔYÝŸ½hF­ÌývBë¡RïŸîÏ}ôºƒ¨õÜ8û÷£ëlƒØlák)Á> â-<÷I”·¡hï\š¼íRWõÌ&vu€Aò—CâÖCBïN׆S;Xs)‚UeP&A°ø×¶M-ˆH L…XŒa1v‰ìi'C¤Ê¬Nä×¹HÆi aÑÉIvµq@C¡C 2á¨ÎSs%„ÕÍP©³N“™«’ÔY¯Ãx(†‘°vA=xa­ÆMÝ &#X›º|æßäWv›˜Àª_GýšÃ4/7ŒaªÖÖÕüG=´ÿÍËŒ¥W¤—¾]÷Æ×¾¸¶uLkŸÏûúò6äeîÊìÙð4"²¡øg¬U·äÔ3m§VŠFªèV˜Ð€x<þsÕUÍÌš–Q-%«JJ¾(1Ýb±äÈI$qO<áIxš<‚E0jGcI‡?9|Ë“[|û}ž [ŸïûüÜ:dïÎÞuí®Ü×sëOE­½Ý.¨Âö{¶¿o¼ûÈO~öš¤ŠcŸ{pÞÁxz<Û•ZKišfªÌšÁã6À{º®×Ž© 9B½—õ6Ê>ãÈoÈ_w÷:#šØtsU]ýõh±Kì¹90ñ–©«m|HÏ*ÐÄÙ§b5{îDé'qQƒÁ Á‹ï©gñsÈ@ã¸*à(¬8r¡N…‡ Cáth„Åàv¸æÂZ¸NáWáu¨ÔYó  nøú€†"(„v·! ‹Á ÷ÃÛǽ<Þ‚û!î†UpüjÀšãòéà‡åðP‚óa|y°ž…[˜¯süQà*˜ µPˆ/ÁÐVÜÏÃð4X`)<í°–ì$A™=·B-]\W"÷yLèðqϳÜz1íg'ù/H)W©„åP¡VX/ÃÉ:ßõâm‘á"Ijt+üèf’›™ýQeö%Ø•d±LƒŠOà÷"I ×äñ€†’׌$+2´‘}*Ïóc!UIVÐ!Q¬Q› ÒF‡D̚戕Úõ¯$*ËôŠ™mô𜇠2ŽÒ¢³”ü÷híªSîêÅÑ~ìó‘Ÿä¶jÖv†–=òHfùäÄ—Ùf/wÕŸžEœ¾Ž2µÃù²77[–8õ¶¾i|µ<þÇ£dd¨‹ …H:vËØïÃEñÓ[ ël„'\íž £Á`<©×lô– Y©TƒæxI[ásxê l0ZÀ&0T£Za<H\¬ðg¸öÃN0î<z‹Ü ¡B L…zX&0Md¢Š¼Ð¾‚"°Ài0–zð6B.‚5ÓDf¨™¯ÉOsŸiÕÂèonÓÞgi™§Î©IÖƒfþ2ÖHT6À—0f*|ÈC%¦X¸t… Ù /Á§0Qã÷ЏtŠVA¸‘¹¹:I¨Q"+ÈD‰u 8Y¢vdÛEK’·Ö'X”B‘ç:¨lŸNr¬ô²a‰æ’×L³FÒI©N¯l:êYwxjÔæÈ¾š˜÷U}ý»rÚ­Û³ìë*¢¶š¤Äiú=/ ŸÉïå' “Phµðt:Ûǰ/F,ÂÝò¹}JÙ±Ÿdc¬<¥Pê$Þ‡áíŒ@}ÜLÜv’nkôŽÞÒõã¤vÅ%Ïààcש±8¤š}¹ ë4*çÝ*5–i› æ7[a§·ßæÎÃ7§u0J£ØÃæ {aDQ Êz‘"+Ù^6ßóˆvyç½Ál\éè‡x7Êy5”,|?€‡öÑlâEdŸ@i&‰»:éêd’€5“–V2!CÖðÚh,dùA΄ v/ËE.mxGàfXè§=ƒ [™5:ƒežË£¢š‰¹TãA$’þl‚-´&é†Ãp> V…÷! &À¸_™iTUF£†¬A¡5À©jå?v{Ö'¤vý_FoÊfíyú:tì¸|GÞæ¼œƒ9i‡Ò\ ®nX¹ß·Ç÷oEÆÖìì­Ù'¼;Ó¬¤ÛXżkÓÒ·'¼;UŸ×b±5Û°FÂîÙÎ2}ç];'üi‚M±|yd䆺iu}¾éc${MÓT›ZsQÍI·Ÿ$ˆ'Þ(dìÊÈØ•ñ ‹éïë÷6x-‹·Áëïë÷UÿÛšdÈèÔ‘ÝüÓ²lúݦÓî8-IÈÚÕRÖ’·&xÄ4ÿLH‰-—mùþÈÞ›z›b&±ÚHi‹ÅÀ‚š >¶ÓMç"¦a>iݼRÅ®RÑ€»ÙøîZ[[u]¯«« ‡ÃZDõ¨‰dÂàH´¶¶v Ý̵ÿ[d pö0vk8a)HpÔÂØçA9¬+dÐï¸KÖ28úÃ\øx $P hÔÁ§ð¬‡Y­ð_`‡8á} «ÀYeðh ÃéPªS¢ò,Œ4Œ%òU>;NæÝ p.T‚Þ‡è¼è›ÀÒ+@L ƒ«…`‚…V’v"I^Êæ¤&KØûÑÔk Ù*jo‹ªdáØ§ß÷³·OüN©+PqY|Ä ü۔ݱ«>ÐN[iÙU®Í< ¿{ßX0Œ¯–´ÄèÕØ­9‡§»9ìçñš~ìy(ÈIˆ%íîð'÷$r“ÂçeTë$;±Dy4Ig_Jì8TZô“êzm¤VÌÂíGQç-Xª³N…ñqlvÄ¡ˆa "kx}„:h9ÙÊØ(UQ–‹ÌÓ¨’°¬I¾LИE¿cuË!’ÎÛ 5:¥ð!ü&C¬@;SÖÎÔ&íf‹fÿqeKà 8 2zŠ0 ‚àñxR•³­V«×ëu¹\f 1ljD"Õè!uûÜÓSª§IÝkϹTª˜››Œ7…ˆ±•6Æ!Fº2q ©`ž.™L¶oO¦%Ëß*ÏÝ‘+GeïnïщGí]ví°fê–î½joÖú¬Ê+*%«”Õ”eÌ3L÷#SºÂ¨–R½ê ¸|*kÕó5ÍæOÈ2ÅLŒbOW#ÎV\^Q=·ºaJCÝ)uŽNG¿/.XÚ7 IDATû¥5¦qü.Ó«Ò»ÉTžUÙ:¢5{W¶%j©¼¬Ò¡:2Ú2L¡)¥*bd»Sãmé¡ôC35lŠfDKß+5Ùʆ*•(ŠÞ&ï×ÿØ>°]Oê ã ·zê<ÆÆEUÕúõY[²R<Íf©¦i~¡fJÍÞßìÍ=”ÛwCßž‰ÓèûÕL«)Ú]ät:SeœL (ã9ŒF£f«ð¯|o4“Éd8nmmmkk«¯¯×µo³¾e]]‰D" uttt›òº\®q“¦þ²ðl7¼ `\ éð\ÃTxDx΀'~ca†Ê³*A1t pA'ôÖ + ?Œ€‰ð"øÁ“a6È0r¡þ [a9ü'Ì‹Š ê <0Và#¥ ÃnØ·B‚%°nƒƒPÀFxGçx û¹„¬-(‚NAƒVø–J.]¬rßyL]Χ/º%#>$ÆqÞ€ƒ:‹àpŽ2¢q΂gTü:hx­ Hr‹Æå1Zæt’¡á¶02H³^¬ W©¬³à’ø,Ù-TV“$,c¡"ý,{x AFA5ví÷Ô/ÒZY­ï«ßö¾›Be›X?N¥ÖBa;?L&q„`ëÍzàdiÇʨü’:ó5ÆùôG®ïÌ>G\ôñúÛí‰a"q‰Â·wáÎAIóÊrñ»øa?ƒòZñljg0¹“˜÷ç<ÕÒoñÃ;élj·‘ç7Næñ…Ù$6&û_ÿzsë²'Fón¸ÂÒVŸ ë(Õ'ÞÈ)ûyhn'ûtf§1Ì‹·‰×uæJØ9™oË =ùhçØº¾. ÝÎ6›µ‹9vj‹¹=Jž_1½R_qÀ›Š"&@NÀ¹"ÎS8¼\ ¿J¶Âè.jÚiÔiÕi‚P†Ëƒ+Âo}T5£ëx²I´áU¸×@ù±©| 9p-ü+H÷$øöÀžK²KÀ ²NêÙê;Y•ûõk>áIÓŸ&rlƒN(…ÁPýRw ÝàgFÐÉÊʲÛín·Ûeokk‹F£¡P(™Lšj¤Ý y©»àx©u§9´3k©°¶¥Û¾è{㣾=°ßwǾ2[Ð&Ge@ç§¥Èÿ!?_þ€€í7oþÔðüýùõ³êŠ#g:'ô¹'­OoH?õ¿N $B¼»À®¡ï©õøð5kÜuå®Ò…¥éÒuë±¼ëî]Åw{*L¾bU}ën\Wü]ñˆE#Òƒé¤O›­B«ÕªÙ´®A]>Ÿ/--Í L%“Iƒݳ 7•SŒŸC¡Q&þT6Œ-ˆ!þk|‚;äÛ>vÑŒE||A8Ž…b²ÔøZíÚË»²A6h0zA;¤Á¹°Î…A° lP—À' @œ¥ó··»?÷ÂóPi‡× NG! sŽËÛŒ„£à °@¾„©PGa.„¼*ãLl……›ÏóM\(2 5VÀ™ß+´Âv¸’P7Ãwp·…áI®ƒ.>XÊ…Ëdlv¶‹, °~ PåКÜx o”ãïKA&“läïÒž¾Îÿ·ù}o­§^ÃØ§41¸†¥«ô‡,Ê4rÚ¹R§FbÈ#47ó˜Î·q’y„Â86uÑWà@2ýú"Vs “ûýÈ"nµr$Ú#Ãæ vÞy„ÚС—OFïÍ·WÉÏæªå–y~W,'Ge¯—þQz‰Ø< éES=ƒV Í`RêíõÊ÷œízõaé÷ÏE§ïPß<ëµõá…–§.O;ÚKAÒ‘dÖu2y9˼ÌÖðY)Ƀ&Œ4²š4ª‡#fDïÜ\}ºÂQ ÃÆóã÷Ì ÒìEȦ3Ê+™5~â¿G<0‡Ó7 ó–å~[ÕÆý–à–¾Œ8Ä¡.2 ªk ‰m>iAæ(š.ÿÂu÷í–›f·HóÑx„Ã!vˆ|ZÁïÓÈDýÆ2çKÕU5ø£ÑM<ßÁ_ Xæ¾"úµ’½â‰ì«"¿…°Jz5 ™Ù…•ñ$&qt"uR!‹"YØna]3Ca±…·UjtFŠ4ØtÎX¨SÜD,ù»Äæ8ö$šÈŸ½¼¦1¤‹¹pƒ5^â~õÂöß·°²‰ÐóŸ‹´©U Ž> Up5Ìü4„1Z0ZRiii^¯×è~h.Ó)ªçL%5{ÝŠý9­#:÷Ô4Ñ¢(š¾G©º‚FÜ4ñÙ© sŸn\¡ ‘>‘¶qm#ž•6‹â¾x 00ñ¯w^µ³ó¤Î3柱ï¢}€»Åí­õþDä²+ûçíW”Ò¯K{Æ83öÔX:ÆÜJ‘uO]ð„+)ŠH’d€×NoH%fÝ9+•ôjšY˜ÉÞX«c-Ö°d Û€i/OÛpû†ñŸ/ù¦dí…k=nOúÎtC¤ÛÐÑðe6Nš:×QUÕÒn±‡íº®Á¤§¬‰£Ùѧ¡OþÒ|£F ‡Ã‚ Dr"‚.dDz­iVSÙ„\F³¢‡Ï;l×í³ï™}ŒKgþmõÌÂzåý+Ï~ölƒ¥ët: QH 1Ÿ739™Æÿi®2«vEQ *žÑpN9xÊ«·¾ªiZŸí}ò*òEðTx8®AÜ ÀÙ3]y ?(° š¿8‚°jà"È„xzƒ rá=˜ìƒß€ –ÁïàMè%ð¬/œ¯BÚ Þ4ØxÇ 2C¥°ªÁ[a.¬ƒIn‡“!Š`n-€Æ sàR…ù ÀU ÀV¨„Ï¡ :“¼¿ƒá3¨xO¢£ <NH;ä1÷T^Zσ™ Þbi{ŠùçQuøæÃc! îƒ[`!Ï·à“EÎh%ëÁn™1vÒjÙ¤ss‹âX0ƒÉë¢ÞI«@$Bƒ“ªÉÑÑ:ˆj„ p„äC¦­l|»£ã«¥~ò'ñŽPU–0á' /u­\Ó…7›úyn¢!†JèÁK•‹âYØEßMŽˆ×ÇAû3g4üaEâÒ†–7˘´Ä>wdtáÁEš“œ$ª“[³8ÔFc{„þI|-Är°Ø!ÉÚ=Ì-à ÄhaFÓàf@€`«:™)rÀ‰&2.Æ]Qè9m©2CöiÊ}OˆOÝìüm{+¬p¸‹Ã! “>~›²eLî„\n䟹Œ°ÖIšÎ$ UbBm]hégEQ¨صŸéx,À›n¤“x”‹V¶DÕ–Ï'A Ö{™*‘ÕÁžzl‰ìtòBø¢¸-ô×øÚÃH™œ(ŠÈ?4IÓpôÇQÉ…Ùv®Uy_¡nÍd¹ÆœV¾„õ"ãtΈểã‹ó0Ï\,>ó´æY§?ýŒJoÉmùÆŸË©²:½¿   77׋²,·´´´µµI’dЄ{òùÿÏ¿<â2UL8¸‰¶0دV«Õbµ[ïžñ˰ìj˜ÔwÆ…6aäŸGV_PÝTÐÔï­~‡.;ÔQØ1¤ê§µò÷ò˜w ô¥ÒT3xs—ÚûêF 0^Oçÿ$ÍàP]t¨}p{zez*¯¶ø³â‚Ö‚ž€èT¿Ÿ[)!ùdLÕÌ*ç.çÜs_¹ù•sö“:×1GbFâ4jóÔò­ìÛ\=£ÎL¬Õj5d­Vkݹu¶€­~\½€Ð­9όDzcÃ^æ‹úM1÷¦ I·ïT×uMÕT]UŔТ-ˆ*>äÞà¶·ØMEZ³ãjnŒºÙ’ý#Ñ þØ6(¡ÍydN8®›X·÷¤½–¨eLŘ_µhƒ¡Î.ˆBÚàfx*`¼½À~(„$lɵp§D£Êw0FÁ>xfBì‚Çsá°ª¡áøE°ÂßàX«`8@„³ŽKn‚é0dˆÁ;p%Üÿ•Fg”÷’”ÁE°¶Â>PádæHli—ò%®Ù®Q%…Æ«+¦sî¬9#<ô„H¡ºlÚ \¹™»ÎGÙBR…ÉÐ3A‡1¼¸—ÌÁƒ=°Rb~:îvŠãììm<·Bvm‡ø N°ÌËE’D <䆩°RªŽ’wtþ ½W[ïù÷6S˜I›DP $Žô¸t2Ø£ä‡i± ´âHfÈÂö“Q@ëPâ;ø!Bv§æè$Mzz&7|Ís‹Ä®)Á•“$D ‡€µ…F§ÕK4+BCžˆâPù,ÑäÙÉ…ýÙ䤨Ì(;u¹m ð‚vd  !&Ð ièd@ˆôP°à¥Îýq¶hœ ¹Ð–C–J¯~çßè¥ÐÍ{»è_L[&¤‰XœDÂX%Q]ÂÐÖ4\lúwÐ Ð& isB§=žQW“ê8õkñ“kÄï|"U"É,VkŒìb@k'Qð*?ú™©"¥Ó¡J¥TXÖI±Æ©°Hà:I£Eöd0¤/ì†[àuA‘ËT.QU|P OÇü+8e#çï¦n–PëâßÇÚ©:7¦ï”1ò‰Çãáp8 Y,sFeì…»ÙɧFmÁeÎoR‹¶ž§ëfY”ʰùoA¿æ¨ŸV_¼º»ÊxÞ†¼Ö1­îz÷á Ëa¹ì…2g³SQ”¢/Ššf4YdKé{¥•çU¦Æ;ÛÛÐ…C³*²Œ»0Ò†©ëjŠšó¶Tð…‹E1Ó•$Iq_üÐé‡}2hÐÛƒRÓ•¢(qKÜࢥê\¤·L±ãó͵’e9£3#ë@VíɵÕÖêéû§ÛíööööTñ=ãwŽÍ–Z¥&9¿ßo¾?5÷›EaÞÆ¼@߀j;.bîîÜÜù’$éèæâ˜YÓ<éMs,ßhŠB ‡ÃŸOÿ\ j¶N[ÕiU*ê熦2¥Ì»3%»RçaÆ~Å4;î6jM•¨H­ã'?uYâñx¯µ½ ×î½xoÅÌŠ+þzd`p>œ •pŒ„ÿ´Á·Ð6ƒ÷Á¿`%\ X³¡žÒŽ™ƒÌ…oa8< y°p.| 8BÎ`ü÷ÁÛð ì†KEš®Pùø¡ Á=`ƒW`,¼NðÀp̈‘©bƒ] B;Xà¯pÓ×1j/]A `“ŸÙp<§EÎäÕ;¸îU’ÿäå‹õd/øPâuùëtÌaá[|;ˆ¾_°bœ{ l|ƒ4’îÕYæ¯ }<ÚŸC5lõ3Lå-‘°Êê ú1ðÞ0Ãh ºØ&°2ÌÕ cjÈiMð"®å$vó¬Ê“!:U2w+žÏ&³†±2^$•>-¤{óp`»“¼0’ÄþJ’ô\ܑȑªÔå3ÚϬ<ºê8]¦) .?ó­üå(¥2c;ù0ÉE  ‰¡ì¯¢—›Î 9Ð}ò7:fï,ü¯y­XŽ‚üÓ_៱präÅÑ‚åbñÁÅÚkwd]ôœ´Ý×Èþ"¨8üd=IV’:9 ëlƒ*‘-Q"Ê1µ¤e: Møa¶ŒeÎyÛþVÇ£|£¡Kc}‚ !GåIbmp–D |p3#ü$[ð¿%ðP6¿oýÅønKŒ°[YYÙÞÞnH—677ûý~S„›cªT×]3]™ûñÔz*"5¦BŠ ð•Ñ LÅ ªÛÆè˜º›E€a¹›ÊE5ú3ÛoÞ^òm‰¯Â‡ˆ¡Ét ½'CŽÊûæï+^^loµ»š\Ç€ÍQ#…‘ÚÙµ½¿éýoã¿­ä_%ÿi5)‚±ëO­`Ì*ÖpZ<ÈPIï†d3Á'L!©PxI‘š ƒÊ;˛Ħ¢Ú¢ k…×ë5äRû~f2îã4]ápØ\s£R1ÐÀžPn#sOfæžÌŸ›ÉÙ€˜þ2 ¨8«¢×§½â]qMÔAèììüöâo÷><ë³|M¾¦¬¦Uw®JZ’#_i’ÊÍ/×ÓJmùÌ„¼§*u™÷{B),ó 7>ÜÌ^ '5ŒvüÏÙ“žøäÃ÷eÎÓP¡ Ú $aÜ _‚™ —ÁQp‚VBÇìƒgÁ—°FB!,‚“`‰aèu°n„&è‚+a1L†Gat@…N³ÎJhƒ»àÐ%¦ ôÓ™ 2ôƒ÷ ÀpÈ8]ãØM0Ü«8) ž¦øðUz×§ç 쑸QC†O¡±7Øv?4Þ Ù°Sc$|Gc/šmâìfñÑôäú>\ØÉ,8 ÛdÓÉ€2… Vꜯr£JS ›ÂLÕðÆÛJ–„Ogd½šÎÓ¨ÉäŸNŽÆnnS’lqÓ×É€Xë<}Þ®nÎyóªË5*t®Gz Ùõ¼2‚Ìí$2èe'\F}=>½U&j;§ÉDT¬ãè:È'±Òâ¸[)*¤E¦6„ÛFþ8~ÜHiÔ¹*ž1ÐéÎL¸Ã¥îMÕî¸ÝÁø@UûF樊 }Id!ÈÔ±go¤·„`CÔ(޳·£V2í‡qŒ¦²“Yý70^`¿Âô$ý£X#ȵ4F)H¶¡y¼DmƒŽvÌy²ë¥¤Æt-3GÞÂë/KoLžº>/V\·u|?+kñ©‘~Up(´ajÈ]"&þ(kgÙ8ìÁ¥NE‚4Ñîl£r“½“<Ö—¢ögq—Æ`]à ‘~P«³!É ‚ë<¨ò­Î`xW`]> ²_"ù: LQ¯Ê<¯‡Gh$b|«3·'20õ£Q嘚³F·§¹¹¹µµ5µ“ûLèy7´ ó58•&ÌÏŒ¹æÖØ, ô|ªÍ•Ûí6ø¼ÆØÌt8ì Ë6Yƪ]Ýwí¾Â…ÙUÙ†‰”}Œo÷Û³vfy<¶Í¹Prw…»aFCÑ·EéÓ»«¤€ëRmÑ»šfíe¦«TôšÑþ:–ãUQµª/;ènv{=©íY#¯' ƒ9ЭÜ1SB*«:UH×f³¹b.G³#޵µµ…B!Ód²[maÚ•¥^˜ A{Psj’WÒZÜWl 2ÍÒM÷ÁØ:¤¶…SÛžáp8˲lì<Œ Ò0‡4òqÏô¯ÚÔÚÓj3·dz:=Ф$<‰ gn¨R9ï¯ó\í.]×åv¹÷êÞÖ€uý½ëÏ:l©·ˆaQ—u›n3H¾ÆØÌØ %< 9)›µojÓÌg©’‰'T1áÆÕn¼sãè—G{ë½æ0Òår™pò/#ÀˆÎ» ]° ¦ÂP(…ÝðdˆÌÖø¶ Ø! ³ &‹¤¬1ž€[`-‚À …#àN¿ÃH‡K –ƒýtêa!Sÿmç&YU­ýß9§rîê®êœ§{zr†fÈ 9ƒˆ\Qô*@P1z ˆ ˆH¸ˆQ/a˜Vfpú·ìcV­‡eF8Îuorjÿ 6P÷R00Fâ¡€4þãäèã‘]'çñ$ÉôÑ]êbÂŽ[¢&ÂÐ S˜ÌGªáë>n¬ÄØA‹Š±à­:"S¥B¦?A… S¦«‚Ý9ÎëüËÕòóå&›·õ—Ákº&Ò5Îö?´ó»«8FÉÛ‚ù€qÕVPÓ¿d·íÉ{UìѾ1¹×™ƒõ6<·J¾«lŸÚaNv7üv®“«»)7ùdœµ¾[DË3?ÄÜ4¯ª<¦°M#%6©‘øÌ:…O™Ì慨ƈáðÓþ8ÐòÁ­ð®Á7WYR<—$)—ËÅãq+ Y…Áú½Ÿt:mµC¬dÄDžd9äÎ »‡m‰[6z"8 o!Ç#šáÅbQ8•ö‡ÒáôwÈf³‰ñØ©ÙSUëªB]!œWù,ö´ý0cyyî¯æ*Š‚txÚØ‡ ;‹Ÿær¹iƒ±¢odÅDQeµÒÍèÖè‚GèÕº#ìк0ͲPD䈢=Sê>lù3Y”ôÒìv»Å䓈Ý3jÚ& ô-Ý™DK¢ó’NÃe(¶Òϧfm¢(e]e¶¼íÃØ:V©³”Ž8ÓGæÃHž}§÷%ZíjûÐì¡L]ftõèüçÏy`NÞ̫ʙzÚQÛ]ùJ$—ËíýÔÞ„zB¾Ç}¥ÍKY–3Í™ý—í?öÇ–†DŠ?í Sj‰YZŸ,mëŠJV'‡+áú—Æ„ Ã.X µðK¨€Ÿð?SÀ/ñ5!ó}éŠ0'ÀïáZx‚àïÀZ‰ûMj Sðeˆ;G‰N‰ã Æ?0l׫2¼ÛèVß‚!¬°S'5à…_ÃQ0“:o•\þ§Á‹ÏÃóp-:¯ÁiðºF Ñ &Q8t…ã5…÷L¾¤ÑÿAñsü2°ú™%qšÅdVMž48Z!ªó¤‹íLÀ˜.7ê!îÖyx„œÉ“Ùd\”ç(BÁT qöCm„ñ‰Ï¿a¨/{Ñïã<ÅÉ;˲_ÿ%WÜ)…ö Å,n–MF9;…+ÁÆ,59ê†(èÕ©~—šžJ‚ŠÃØÆ)ÌEW éßÉB£‘Þ09³'ÉÔ1ì@j¥{€A;9Å<ãûh‘Uȶad¢| ÂK§È¸!ç&V@ƒw×t¨É/¿íÜufoi²ð†ÉÒ]ã¬]È¢Qª2¼bçŠ0×ï¤2MLÁQÇFò較Ds!ô ÖrJŒh­^í¦ÁÈâ˜LدŠÄBjÛ7%‡çFÉŽòe—Âh ·ƒ™w“œ§lUœ7ßæR}±½!É@VÃ%­²ß+Unr¬?.…}„Ýûa‘FÖäOåü8Î@žƒ2KLÒMæBƒ«Mì:€ˆÌlƒßÀ“'¡#4!ºT“*¸êÖ¯¬yUñí-í ü{Ý#f"§)5Å$Éëõ~=]te¼^¯ßﯩ©q¹\^¯7›ÍŽŒŒ¤ÓéipeFº"Ýù©Î@_Às[+J•“J»k¥É܇¥,V‹?‚øì‡]–I®®ë©ÖÔÔ©Æu®¸ h|·qó›+÷T9ZŒ8”-¹Ë}C¼,—Ë%‰d29>>nõ–+öa¬dÈ ô±ŽXp{P1¡æ.2Útczâ[¢Kî]bÁ•…@Vj^ÚäÕ¤8[:–‹äʆÊNýÁ©@,3 ÃʰK_<çÑ9ƒ' Ö½UÇŒ'–hMgŽOLSpåt:K{‡ÓFÚžÙíöžôÔ¯©·gìÿ\™tŒ‹0öÃ"(‡6ÈÀkuº! 5{aN„MÐ ]ð2|¶ÃÐóAÞó& p(Q²;Â[p&´Ø¸U#+Àë` ¶Ã¥`‡÷ ý… oè|6Aú  :à~þë Î|ž·Oæó!n£Qã1¨'ô)´Œ)ÌÒ‰Wð™U:ƒ2Û –À<ÈÂ[ í¯™Ì‚1¸nHPkCòòç$^è†ÅP!Ó Q)™'3kŠ|CÇ8_B—qé¸Ldƒ‡Ë)ÏÐTdYy™n®Úd¬^kÛpºÖ>2ðнòƒŸ³mlVÈé<"ã4¶asP¬bdOŒ¨AÊd¿Š6€³€RnÞNðægštv Dݨ‡°{ÈU1Z¤ÎFÄ@õì"^ɤÕä ŒÏKÌŸÂЇÍ&r'S2î¹ÄÒøÒŒQKylµþ´WY9ÔF_µ 6øI¥¾y“+—Ÿ‹dبqVž²SY”Ùd ÒÃH9ÊT|nöõsgï¦FÝ<›ã¢“$r$6“²ÓTÎz)F³m„À~#\šæ[ ?¿²ïª— ×ÖØ7_Þ…£Šlšf“ƒ1Ì)".Ê%ÒcrœœáQ™O&¨#ãÚµ0À Údòxl,1‡ËÕG¼vÿ®ABN‡è7‡ÿèãIƒ&™ípžÉ]³e®ss@ÇãI?ÓÑ$š ó þ³ hc¡F5\E@~&ûÎrbùÕþE­d2i™¬ÿÛT«ofÓår …캺‚äéÀ IDATºêêjÃ0‰„0Ç›Éð½ç . sŸ+%Ó4K'“¬j•W3ïeš%D©³â´ÈW¬!e—ËeAh­•Dñ#QÕ<ÚÞÏìuL:Ü£îýïWTeîãs@‹ÿg®i­ Ó4'¢TØ"›Í~X";MÂQÜfëË­«T›ª&U@F‚{ƒeeÑ=Q申toEÊb•û¦ó,µªÒª©È-{(%e ;¬‡õ…ÿ½Ð†Ít¼ïìeÙ3Zé»H7 Ã辸»î­º™wT÷FÝÈ1#ÿpE­RÀ•˜C°LÅþ½üL¸JA÷¹…Ž•±ÃÅ?ƒVµøk`ÜWÆ>gŽòCè «`!Ôà p,¶áÖ‚kL"`‡.ø&Ì‚§àzxÎdÈd> s þ`ã{-à4xÂ"Ø5°.€Û`.Q¹@ N‡AXOBB°!¿¸„{ß!sˆWTÀø3\«Mt“'“8uVH|Ï@‡Çj8y„g%.”©5xÌŽCåq¨âѯ#ÇøŒJ®•î!NÕqèœ?yPÆ+a›äj;kl¨dW–£3Ì–Ùêáê$zÕË–¿7zßyê#s\0°ùŒ¡`ƼóeãÉ»Šġ,ädr´&qªH~Rã8L ;®:ä'Fš}nÎÉb„ˆÇøÕrfåCØòìÈq\ïFÚ¼8Ò”Or³—󘯡V1²‹…9ÆFèoâå9\>A½˜—£†È- ›Ãc’³“ a?†}Ì9ž}»ŒÝ³Æ¨t⬣3Fm#]5v©› ®HÖVr‘J²Ÿ&\ÄNó!’FŠÓªbßÌhÉ1"£,j¥'ˆœ!T‰4EÞD·ñ9Ͻ¶è/ëRB y)—Q¦™ÌÎcê¿ý¬çŠ&pŒ£‚«†“†—¿!×0øã+sì+b¸øUžå:OVóýLÏ\Ån(—9zeÂtšœëÆ®a7ð«ä Þ†1¸Û$o’ƒ¯š4HØd–Tè BÜä'`B¾!Œ»;_)àÊ j"@ÚÅÌð­išÛCÄq+îX­{ -´ÞDX²Zj=¥E¢Ge·ÛN§Çã ‡ÃuuuÙlVð•?Ì?¾í™¶ ·mØ|Ëæw¬øÿ!Nh·\Y=Ñi³^3Í9ÐÊêö|nOº.Ýþ›vû¤Ý5æ2:Œ¿ÞõWÉ&-ùí’Òá*Áa›öh¦uY¬#E¡P˜R-cCÑ¿lïU÷¡þú™ÊFÓì:ÿ.»M§K)!3ÇéJÍ;¦¹Žý]j5Xqß wÊmãï„ÒeY]4šçßl,­dn¿vû¢Y¾hVn'ò¡Æ÷Kµ§žY¤J¡õeÉê[¾ VyüoŸ±—Úv]¾+t0äH;þy¸ª…ïÃ˰"0dðü nƒ0@‚gàzXÇ„Oƒ·B%,…?Ãl¸ vÀÃÕØQø‚ÉÕðŸP ~XŸ€GÁ_‡<¼_0¸Ýd»Â¹&¯dàsð&œ)á3†ïÃí Á“&çÃÃð-……&¿2pÁl¸lv.S 9LQï§< „†Z.L3?ÁL¾nòžÄ0”ë|Sçó2·Úù¢ŸŒð”Á Óù¸‘o× 'ÆR!MA rƒ,Ò¸´šŸ KüÐÃCEŠj3±QîœÍ_G±J¡U¦²H›‹Í–T{”ߟ?º¿%rÒ_\E¯M;4Égm±§Ã_¼Ï¸û»S/\i|ñ{¶1¯Æø$uFŽõûYšg_¹nOò¨Äîr&]´6Ó½•¥'²w‚³2»h£x1yˆÖYC¶6𠓪n¼:ö^Ü.<MTƒj c*ò> ·j¹0Éu•ܵŸö,êóœlg3¬6ðV0©bÎâí­n¤îåôanÃgrHf¿ƒh¦&‘üè2c øÉÚñ¶qÜ>:Ý.òðŒLK3õƒ”›ÌSñ£¶ÑSÇÐ~ªªÐ†ð{‘MŒIt*G ‘Ê.ÙEÙƒ“äìT™¾!ýÆ_/ýtÅõÃ;—^=Ãþo“Å”Ùø¦’®ÌŽ' t'›l,;„Ãd­;†ø¨—o‡©ÊÒ“å»Ï¼X΢,_Òù¹ƒxbÜgãB‰• é]6Αø t@Èä\J÷ûC×U÷Âà"»zûMvöè̯ÆÀ´s\o5ÅýÜ‘¦*Í«Ðu Ã}qÎ28F¡Oçf8®¬!ÛÇFƒ üFã68ÖÎ&•“£üÏA»ÄÈjúz~é–ÙNƒûàjþ~LØbI|˜­¢Å:l¯þÃÚæ"(üßȸ™¦)TªªnÛ¶m``@ð>âñ¸(MSCÈVe“É=Wí î þÃ’š5òå÷û­W~XÒ6hMéz<žP(äõz[ZZêëës¹œÞݶmÛßuPš±–ØÉ_:ùýeó7.¥oØwògOî½¢·jOUp4˜`JYX{Q«+ñýÃ}¼!åðw ´Gåv»ùÅ"|ÏTøV«<Â8X‰p¨±Dñ¶]çu-~dqÅÎ Ó4[_hÝzÍVxǽݧtÏ~z¶#å@z_R²ŠfÚcŠkšÊÌË"ýV ¤íµ6{Þ®ñ¡uÂÃÙ¿<¬†$ B ¼ÐnÁé sLÆÁ Ç‚çÃÜ sàc0C0 LÂã°¶Éœ /ò~Up<óÁ{ …‹j2xVBl—©49Ï`É_~†Iüþ«]ÌvpÆëp¯Ìe7©ã“},”‘žæ—ðf| j!#¡˜< —@¼f2=Úì<¦0?C>Ã…SM¶Á ™Ž/ùY.c+°æ–‘uÓ”cÔOmžvH%Ûbôø›øcøU’Nº5Æ£L%ù¨B™‡U*‹|ŒéñSN_gHÍÆ›'8T—¤CÔ•“ïäÌüžδ-VÜX QY”aìYêLÌöZF¦¨Ö(—ñ©4qEïç`­{˜I“¡q&:Èu1 ÁML!çFq“Ëám¢à"‘Ã;@uŠ©©"SY á ÕƒH¡jRA’2¶)”Y…H¤Žž£~ ℳ¤S˜04ŒÝŨLhœdw5ö£>d]>®ËÁ½¨':îž!”24µ‹ê,™J´2RId;º„­È¦~ªíŒ¸1&™Ð™J¬ AÑd«Îrxn7™¸Rb ”™¼;Å*'Ýpv›üL'¹8?zžƒYVÊTI,Ñ¿w·t‡Ý]øžƒÝštæÚØSIS†C ª†jãÜ K³gÝ’ûã׋™~ _”š4©F7sL67¿ïÇ©ÒæýÅõ!ÖÑj 7ï¤C£?„шº‡Z¿ƒq)ƒÙò^¨Náª'SÀßHY/õ½xƒD’äd‚YTÞm#5H³ƒxœð 6Öä(8±±z;ŠRHåÄ TA"¢¡VØÆü¥ìHÓ’ÂgÞc´™Ñùq|Qr6òvœÄ·ÍPâ•z[9e9CÔúØj§>Ý`[ãq¤q ݔۻÙ8B|„Kr¤ªÈö1 s!¥8†?J¶™ddÂù)²Rl5˜NÜÿôÑ©O=]ÿÆXº— <ö óêûw|³ 9̾ýÔÃѰ±È–"/I\2xtœçJì0IC C=ømÌÑø­ÉÇÀ:äuþ2pxLî6éÕa1HP0˜gð<ظ-ÏgÁ6pÃ%Dàª6~ô“)Ñ&륦 V¯K„³#‘²ôȧa‰è ø",ær¹?ø§Ó^9MpDƒG8E‰.‘êQ\p áµ†`OPÄ&S2ív»X³¨Œ‰±b·Ûm-U„þ`0ht+ϱÛjÈMóVW¼.>4g(Ò±Ùl>ŸÏï÷ ±ì?Þºuj NxòUW?l+*vW¸\.ì¦ßLÔt:¥%*WÖ¦ÄNSì‹À]Ú;,];²liCÈ:Iˆ.EL°ÎÖ8Åh/½‘i”ÎþšõçYÏ9Øñj rÓÛMéªtý«õÿ7_bÍ+¤TDÜri[W<ÐC'ªZ_eÄÞ§ œ9 ÛåWîü‡ªð_HB\ ÁQ:Q¸>ƒƒ›àè5©7ß·“o€m°ºà ýõê pl†S VÂÅð hÏâ4ø1LÁÁ 10áyø6l€»á“c ¾Ã‚åFÛuü.‡]!^Î[I@å<È<Ì•M6ç2ã¡ÙhßóPî¤5F ˜•h#¸MöC<OÀn0`6ìÒH„±û8‚~ƒ‡á>™¨6(+Яð)`‚-0 ciþf…É¢aöJW~/ýU·yÛ©ö§ÿä» 7F³ÁÐ8wºù…Ôøþ$_û´žUªWþtìâÍCKäõ³3l•i¯óñ$Úq졼—SMüu†ùBŽŸ…±C#î¥ Æð•Oµ±eÚ:j 4­fíFŽ›¤.ŠÇƒaO%c¯rZç"¶§ øˆí§~9»û(Û›^åP#ê*¼Á2™d᥼µ‰£*É.dË>˜ N£a‡ a_B®Û0uíì§!@²†}Ì/RÐ&X¸œÍëhN“ 7ph.ì`§ÊÅE>™æÎ ©vøp¿Á½yž’%)KA3“|c¡Ýh Œ±Ü$Æ0r%Ê(b8 l4ðyJ´DÙ5FÔ·C6š÷f}Þ¦±KÆI([«•Ÿü—vèúŸ)£ÚNJX…¥& #„b¼S‰sç³ü‡‹$íl¬ 1M8ËOòDa!8àtP!ïB¥ÀP¸Æà…{L¾opU‘5*áZ䤯ñÅp"ÒÇ`G~Á箘vÚ¡ÊËVª¥“§âän·ÛK•âDdVJ øu‰t Ø}Õîӕé~v‚8Ñÿk‰Ä–/m™ÿà|ϘgZÅÉò±-%å—:Ä‘ÜÒà±”¿§)K•Æ÷B¡€Äúï¯÷&½‘þÈþûOK666&*Hù|>‘Hüî¿Ãdþ›ó[ßl}ã³o,üÁÂÒ‚Ø4þ¡µT¡$ufÇÈZÉ´tGdÖxÀ4?—ï*5e¶RÒRy$ë.,?É™´Æ¿¹#*’„$* N§³ôs"ø÷Vj^Ê+¿kÉšäóùò®òî˺íoÙ;ööµíEoÑwáûÛÐÛ¿Z)ý7®Dk¢rc¥¬ÊH:ñN_o øè‘ŠNpÂ8ôÁ †ÐkáIpÃ\ OÂãðªÄý5œŸ"»àtø¸áG°öÁ$|Æ¡ØÏŒ™œ]‚Katƒ— [HB¢‡ep?5ƒ4Îâ¢:ú¥ƒrØËa¶K¹ú1Wß=ÃÔ’çÕ^†{à©${ ÂÿÂc×yë¼!qºBÈ`Lf8?Çjµs¢Á§ö(´ºØ«sƒóu†"ðŽƒ[\è&µÆÑÏ;O*ªß.Ø7ß(o8'29•àYÅÁiyWEnî[îõsÚ~|vòÉëc›¯Ó/L=AùíU®â€_†91èŠ{‚H&hj #4‹•CäÓÄ%åä”QºIf ›,£ƒÎrÆ4ªÆÉÌb$‡TIb‚²¬ˆÐãgx;µ+X?L« ¥ˆs¯ Ñ8@CéæºðF"e Æ©bÏqtmÀ;Gú;'ÉÉØé¥=Ⱦa Q¦’nap”ʃè&ýõ §ð¢Ìƨ›q'J7µÕ”G˜Ud¹‹¤Á¹IUªFyf’ùQ®HbH×|G~ôùµ€wª­ sÇe)s[ͺ^Žö1%aÙî¥Q)†²Üêdq-cðºÄ+ƒ!ÍK1nÍÿîõ‘Ÿ({û_I^¨Åe‡q¼Æ¯Æ9Qg›‰=™,H³«š¹ƒt*´K8‘ÓørL¦hÎcSù¾Âýsør#Åeô¦ùO˜„ËaÔÎUظJç'&ÇÃQúLF%šLþ›ËL>ÒËþÜÿw<ÃÉˤɯƒÛ* lذÁê[F®¥E3‘+Xœ.‘Cê”ÈBJÅÿŠBœU\mj‹ål‘Z=$ K„“å(ôžÔ»èîE {l %~ƒ@6”]óí5GÝ}”kÒ5MbGÜ‚ÆVµî4øýþºººÚÚÚyóæµ´´„B¡p8,æ|§¦¦²Ùl±XÌçó¥-:Ó4w^¿³æéšÈÚHEw…sÈ©¥´`0(ŒB†íýfoÃ# sÞš3Þ>þöÇߎ7Äë_®·§ì¥cñÓ,³.£³Ùìa™ÓÊŠý,eZA¡+,u,SÅjÃX¥júÓZâ!ŠÚ¯•“1ÃËÊÆ¬'^ÚœÆ |ó®7 ‰êmÕb,ÁëõVWW‹¤Plµ…pÓ¨öâÙY$=g©ä•ãœ9§3딋²=ÿ¾Ê­ØF‹Â*.«Æk k wkaâ°Uš:‹ô]×uq‚†gú—xM²)¹ós;ýƒþ5w¯ öÛþØf3me”-=z•U œ Wcp7ôÃ"81Pa.ܯAVÂ\?…kÁ×ÀÛ©÷MxwA,‡7`?\ á,è† è°®ƒjh„$¸áuX‹ájBò2Y‰¼Éƒà†ÿ„ˆá¬aîiqH¯ð ¼X1ÎÝ,8OsL‘ïìåq;ºa–„ ü&íPœ ¡JæR¨²3ðÉ0t›l‘¹Í$¢€œÎ=gÛpÂ&“ó¼<ÞÌM£È2Íà7&1?î$[*©Ò'[•ñÔçZ¹G;õYõ•{™å­ Venúƒv÷ƒÚ®“G:;L ùÙ›š$]þ®Q¾£aíùŠvŒŠ/D €-Da_‘>0 O&â#î%P†YFÚÁˆ¿·]ÇÓN_’ª<52’Iw’ŸÂ>ZF±…èŸÇD'>û zІr25 ½Ç;H Îg¨‘BgùA;rŒpY¡*‡;NY® –„(äØc,É+2‹0Cq¼Ãx£ÜÛA‡N¤€{ ›Èfh*ЗaV3L"Nö5¡W2QÅè(—…pi(&º÷=—ýkj¦æOâ—ÉÈ'dç;{1œ¬h&W…Z¤0‹ý6¾(gé4ŽÑá$icY#QÅåÔk\\Ʋüó“éuÑQnD‡=㡊tÈCMœÇ\`ÀJ™“)™`Ž…6zëé(2<ÊëÐdPg²ÕdN5™;Žo]#”âI‰»=H^6(Ó‰Ë<£#ƒQ‰GË8.ÃëÐ#ñu;ƒ}/rëqh\•Æž°Qa ”ÂÕúõë­P%øÙ¢¢e}E¾U:ï)¢€õ5žÖh–N¥)š¥Édy;•^3 -¼”$)ÌeÊ2C³‡üüš¦ ÎoÕÅbu±½—îuÊΦw›dUŠ"F %S‡Ãa óZf¦iŠ ‡ý~4F£eeeG„Ú‰‰‰|>/hbm"êYy@tCôàG¦:R©º”Ͱ•§Ê§¦¦ÆÆÆv™»=ñÑ}û×4êºÜôõûŠrñÀeB!פ«´cTŠ[ÓÆuWø-¸ë)•Ö-m‰@l\Q¹µ4¨E÷%öJ¼Xx' ñ/¢èZ WÖGBüQÖK]-GËɬùõæÊ÷*­Ù,!„(V"Xò¥=E«k6¬ã‘Ãá(›,ˇòûß_tóþ¼Ìït:E#JhhMc…Xµ>±<Á k¶TšËü,ÕÁ*}4†aw%¤É“5ëkÚŸk¿âñx–­\}¸ÊœáØ çÃÌ7@ƒ‹ Þ€°*a5l‡ýðEب‚(ÔÂh€>Xÿ qèƒ`#\u À\xfCP¢Uâ´Ã¤`)É1*vÉþkøý~ÏÍ}ù¶ãÉÜEp®¿Ÿâɴ±ð¸ÉA¨„£ b…5“ã²tB«L¹ÄÉ5,ɳÔä¯õìS™§²â~v(L©tú2à 1RD2i+Ö¹ÜÄž%/w;Õç®ÎÍY«ÜsEÑx-Ã~pæ¿ØeÞükéóß—_8Ëdg©À‚®ô©[øÑ%|í·‰r=ðF[³À¸„}ŠQO›#$üÌ*òÓ"sæ’Žñ¿v¢ûñCµ 9ެás“¦ÜC„Ýx Ü£Tª˜~ò†Š”ypV «T¶ÒLpvc ø#ŒçqlÔ餇˜šdAÍ$m&±Cxç0XˆbBŒ£5Ú8ÙÇ¡Îò#¼ÄÝÌ¢^B‘ñ‚’°ÕÄ æ ÙB.…+ÂÝeÔRí'ëeReoˆâ0³+ÉÉ$Tž·Q/c›EÓÉr:Ò˜ ‘°ùÈ^Éîq“nÂ.ZzxÄÍꪌ=€/©¿á|nAh|¥sùF×q'7Gu6ÖhQ诉¤UÃeCuqPÃ"–!îÀ]F4Ë^w;†‘4;jñkŒë”;É•áU9Jã;_Óy÷‹™²L@XF‚ 3á¹¥òs§0•7©Ó¤b&\‰È. AÖÄÕ´/­e;+ê6BOH˜Ï$ ŠØ:M[ôDôý'«ÍsX¸|{|;¾´céKS-©ÞózóåyÍ­©^Uõª¾IßÂ?.ôe|¥SÀÖ_Íÿ™£¾"fù|>dzxñâùóçG"‘ŠŠ ·Ûít:‡††²Ùl¡P°Uü»Ø±'*<})'Uî®±o¬|ìÕ _uŒ;V?±ZKj¢Ç¶ýÓÛ;~Û¡–©½gõ†úCÞ)¯%3h¹H1­-Mƒ,½p«u$@ÈÊ/‰ wjݬ`Ò ±Ga;b‘2|>ŸØùií–f¼å¡eù†|\•úo í ëb5;KC¿×ëhah¬dÈjt ¶¡µ"  3M3x(زµ%ÖË׿ÕÚ˜m´|C,ù%kdͨ²Š\‰ Ì.õQ³:UbJE‡­OfÙî²Ú µ‘}KèÄår½ê¤#À'/š IDAT•]0 ª?{ƒÕð+pÁ2^‰cLtxÎ/èpƒ>‘§Fa9¼ Ð oÃRx ҀסÖÁ8N†Q8Gálx>iã#Sæ oš‰ “Ðcð?°æ02»¢|~(ÿ•¿pǹü6Èš0k2¶5ß0v­’¹X¢Â$EðË´KüÅäQ¸žSø’‰Y‰Ù í&y“Q;‹³4A¦?Ï“)Ì—†Kg‘É€F‹Ä*ƒ.™ê2²$á½Fô  ꚊŒ©Ûÿ\gœcGÍÓ!Ýüš<±Àx¨…—[M¡\rMj·?]øù§YŽl\œÿÆÃ…{OžÄaǧÞMÆÀã¥q‚9S(£¸Š,3ñ6Ð-S­Së¡FŽã4È;ÙU a&3'‰†H+d”U‹ó³«¼hcxÛéÎP=ÌN“½õ„&ˆv0)cÚÐG „ÉÔ3ࢠѕåh?1' »°õÒ$c Qk¢é†!‹TÌJF5þËÍEEü^rY\&¾™a™Ñ$´ØÔƒ×Áä•5L*¨PŸÇ"£<‡YËdÀ•yrQ´ •)‚$Ó¬ªf|”´by›dE ê “ôäqWqÐNMš‘)Ì©U2+$lÆèÖœšÏU~ðm×¢>÷Ǥq/Å1Jµ©+£Àœb ޳Š:W†ß,`Ù$ó‹Œ*̆ñ,rŸÄ Tkd Ley× Z§Ò$,“p™äàYXëMfE¨Èã71¡ÎTh1ð™ŒCëL¸U¸t:]üàšfõ+B€8–Ц‚`ü…™XUª[ W¥§×R,T½jçe‘‹'"ŽÛíŽNDMÃÜ|ÓfEUÚŸk¯ÜZY¾·¼|oyõjWÁ%‚£Õ?ÂÒÉyè1+x<ž–––ÊÊJ‚ýxàÀD"‘Éd¬Ø'0UèÌþí3v÷°[¬Ò¾ôöS¶×¿U?{ÝlOÊ#°¡÷ø^÷¤;º7ÙÉUçL—YÑ]Q:$ðCtKU½- ÿµ4×KÓÙR)[âp`I²N³©œFÒ³&ˆ-t«TVŒ?—&‚G€+kðî°š¿Ö›ˆæ_>Ÿ·’u›Í&æÄœ¯Ø‹¿n5çTUM$âWìv{Õ¡ª¥ö¥ùãòo®|³!ÝàŠ»¬Ñú-1U& zâœQ:ÌnU<•N;Ÿ•ÖÃKíÍTU‰©ÛíËs:¥p5“j1 ÷ ² àX³às ÁYÀ-p?LÀ—`5œ?WéKr‹ÂgM~npôÁ1 àAW¸Þä€Á;ṗ“ÀÙ°MçØïèÌåÊ£àE^‡ïÀ~è‡oÀW¡ƒ¡¹ù¯˜Å’ú—é¸_ç[áD?#§ÕP¶ŸŒÁó­°Z¦Æà.¸H'sìȧ¹&3Å“09Åõà ä(2'έð”®oÅ<ÄΧÊlÖÑ.ãÑÙ”`¾ŒÏÁO'|ËNJ?¾E¾óŒÙOÍÚ¯úš©õ‘>@8§TçZo§k¤Øv›ýÜgCxFñLbk£óß5¹/ÍH96ø9%ÊD-C+wQ;›I½†¬ UGîcN˜C:¶j&ãDr8ª«bBã?³„òuLDpØévâfeW®$ R«£øHHnEê 4ÊUGq`ˆ&Psä5;ª‚YÎöN‰Yôíc‡—æròžœÅð~ÆÂ4¤è²± Ã}Üß¡²1ê½Tò?2m*ŽZ48¤ãZM·‡äZÊöÒ ÑgšŽßÌy¬Ò™* \)¿pìÂ3½gÞ{Ö½çéç1I>Ÿ·Ûí¥ò‰âòz½š¦‰EZ»Ýîóù„j¥Ð¼ÿgfÔ¬šA)Çd¦9ÀL¸Ò@‚(;¼d G|±].—ÐXßöÚ ϔ̰˜Ó^¹äž%{?¶wÞó,éBa|^]]kˆ…sáêbõDv¢ôWÒi¿ê·çìG˜_¶8fŠ¢d³Y:¢ŒV(’ÉäÔÔ”È`‰„{ÿ°©gq9Žø¬¸i3‡V 5êˆ;ŽùÆ1ZV+x bÆK¤tÍ7oùÖW—krád÷UÝs˜[ù×ÊRn´ØUQM=òd’5UŠ4*O|ž&“hÕZ-ÎÂ?DG‘4TUU â‰àg X:ìó–Á‚ʨišÐ8…Aq²x:â´a¢Ä'M¸Z ãʺ` y5S6'Æ'C²˜gÎ&—VYÅR­½¨sØ£Xé Š— !Mk¶ïŠ0•×ÀwÃ<è‡3@‡ûa)¼° –ÁðK‰³á-“˜LÜ  ò‡Nx ކ^xž3hƒgਕ9dpe.4¨‡/Â+°NÑx ΀wøA„áY™eýpžÌ ?ä´[ÈU°&¬ñ&Äì„%ê´³o¦q.-›èú(oO°/­ñ’Â-i c§É}S(ê¸|„“l…jRkÒ+s~'9…ãL˜´AL'ó*Ø7Ì+~®›¢ÑNº€Kb©ÉL&\,ÐyGc \ §Jtš<wÂV“^èƒk $¡N’6xàmûÿÄñ=ìátZ|´’¶™S\Ä踯ÔM¾E½Nt†ž:ë©Ëïº<+e->w!X>z8W‘óª^wÊ]ÿVý´|«Ô{Ð*gy½Þd2)”„D|\¿~ýÞ½{ív{yyy6›Íd2G J×¥GÚG€dsÒTL`ñ=‹Ã{Â’$9|Û¥#Ï[*ÆVŒeš2‹Ÿ\\»©VsüSz©‡uš¦Â'’ªÒ”ÈNJ£§Ãá°”a­MÓœöwKÿÏç …B¢}%Ú`3Ñ®ÔZúßÖì/ ©TJ)¬¡‚iŽ'ÓDULÓL¥R£££@±µ(–'ºnVMãXZ 0k»¬ÊžHø–î¼un˜&r!êÉ–¦å†u¸’a;¬‡9 @Ù²èÜïÀËP÷žÅï%–š¼pÀ,HÃôIœ¯pšÁBƒÃgàyxt8ÎÛ¡~$1)ócxn†à„÷àY¸ th†<ôÁ)T¯âªïðv ( ÿ‡·÷޳¬¬Òý¿{ŸœOX9vuuÎè& HAQÓÀF¯iÆ™Qftè#:¨€:WQ‚£`@‡Lš¦ÎÝÕºr®“sÚáþñžCu€;÷÷ùí?ü4VÕÙ{¿{Ÿõ¼k­çyÖf•á/rí.¾7Âw®á{.ÞµÀ_äð>©~¥Rí‡<p3TY&ã’ñÃh‰©QR [‘i×hClŒã«ÆˆÎGM\¬0oBš'§ IcÕh¬|òNÉܦ«ÏEÍÏ]dÇ>™¡öyed™Ôµ²u†î Ó­c~é¾`Ñ\qú§7GKœ]Ä|ŒU¦Ïåù~ºá=³´¯å•Š^²£4¯GÊ‘v·` “.âÜÎÞϲ})‰Œ O‚`;'Tóx»™´IйˆÔØ›;å,ÓIÖ{)IŒ®Â%Q ±ø"=$|¤'iÛÀÁ!–[Èꤠewg™`’êfŽÁçÃ%– Ä’Ãå¦ÝTE’)øIåHÑRx”f›È™ˆ¤8èÃf¥š¢¡Ùô¤0»˜… ŽÔIr‘'ö)އiñPŽÓÖŠ£JZ]¥µÂ¬™å^ DÓ8€0µ8Ö<‹:ûøÒ _¿ 9¢.ä<ã*%ÐaìAZ³dý$2l­á—HÂ4\£p'üK–åVÜ`‹3.sL¢ ¸Tâ}:º¥B¢JÄÌw]x3ŒA$Ü2 .^¬p~•ߘ‡³ášÊsõÅ@ã‹-Hbõš›SFŠÿß±×u}ßÚ}9ONä"¯™©ËÊá.…JëïZ_Œ³‘ì¾›ö…ûí{[B$|õcÑ™ŠÆmšL¦t:-d¹…B¡V« ÃAðŒ]v!\˜Ÿ†÷b Ûÿ¬@½Ä›ßÈÆ– ºx%Œ³ˆ¯Ï’²ùÉpåƒÀ룧.ŸCX ÿ*̾îx;çkä!&™÷i ³ð^Ô9¡‘Չü¨@ÌÇá‹`Ñø[ø°Æ… ‚àøü-̃>¬q®‹Æ§n•-ð«÷hÜ­q„¹òO,[ÍÛÙ½‹j€¼—¾yš3Üý[ùæOK<£r7ü Tu¶@I#‘aša[Y&‰9~$qÌBŽñ*ÿ¦q„a9t*¼$Ñ3ÁîÂÜÍØO>©¾×÷«ÿ½X}8ÄûGi]I" 苸–±PåýEžõ²)Ír…–>L6ªÉcç9 ƒfb®y<çrd52µ~ª þáV¦«øÐSÁ¦`^Ï Âè+ð«dÇ録ÐJe’Ž,vi¶9zýבBÔð¯c(ƒoœN•azK´D©ØðT˜³Ò^ÅjA)âßÈÐ"î$Þã¬tQ'ØÄ´N:}Œ£u22ȼD»g€ªLщ©ƒéCt8°Ç¨ô0’Á¼‰ñ'Ù^ÁAŠP.âµSá竹=D¼‚m˜p½J'ÅqÚ&ðD(·2½@ÔLw‚Pû§hrp~‰Ø }D<$û‰”¹ÍÆƒì–˜×Ø,á0±/ȧӌgÿùaýðuÒ?”?qGÙK© Ëôþ”4Ù§“Ñùú8;-1q½‚´‘‘W¹Cã †«$64"ÅiO2¥±l?иvª2sžN2KQã:8®ñož– h¬nÃ:Ç*´¬"9Äe5š4’à¿Ôø$„On ˆ˜Xߨ¨Ç³úáô¼q Ñ›b„£1)Š×Ç ‹yýÈà“qºá®á-n14€ƒ?Øõh—=ewϸ}c>ݬgÖf’Ë’sçš42c¥§úè#U¢B$“Ér¹œËåDn±ÄûNµªÇ®?Ö÷›>×”ë¿7̧ê -¯ÜþB»d’êû.õž{ù|¾~˜Ž§sÕ3.)—Ë Añ™„Ïìþwæ‡(Rù|^XàÏÏÏ¿)ÐÖÏä­§Õ.X°i IœHƒÄž£žôŸçg.ž±•l)Sªq´1›ÍŠ×uË}[²“ÙB¶`,¾àŒo‹ŸÕã¥a%uJÇKAÒ…Á%5®ÞdmO.<ÀÛà.ðA¶C Á'q)¼ 9(ÂŒÀ4̼…_+¼ ߃½ÈIcZ§ðð9XN8 ›áGp?섢λá8b I˜4qLéõ™ÂÓðmÐaÐâߦ Ó&¦á+²xÿ”‡Î½1º÷Ásðw ~‹gìlŽk|V%Zõša+h:a˜¶ñ“U¢*¾ã-üŽÏǘtÏ;)¨Yh[MÎD\ã9x\¡¿ÆØ4Wâwjdœøö„R­ð©¼Í 0{”s¸³X£Ì©lsVŠ–µ\Íùil3Xð²ê[œXŽÓÝÃÐ9›dÓ,Éå1âø«”œŒZˆÑ°›yȹɇˆG(ÏÓpŒÕ•·óg i¥È¬•R Gs£4çùA–ý«èÈâXÁÀ¦Z˜ÏÑkcÝ - Dã’¦S´mäH€¤‰Ú*¦:¨Ù¨jXT¬-ÌÇh]Mh=¦9‚ûYžÆf|då.¦­8žeõ-âÂ^FV29AÈMm+û\|§Dvœl 3[9,á>Bo?gM2¯S8ŠãU4À‡žeq”Þ&fQû™×®<®&°òù<ÃS\ òî«FX×ÍÇm¼Pä„þ­»ùÀïÍO¾ŸoÝau™g“W,xú³5Ã;Vcöñ*çùøàŸÍfÅÐÛ·RÚª—Ö¥¢gpJ#Ñúì*£d”‚â>â;hñ£U¿\uðÖƒ'ÞyBµ©€¤H¾ý>­¨å<9Ñ6"/4£Ka40DP3˜âoEuÈ(õ¼®bÕKÞ’#åøI ûZƒºmÐíÄ!½ÙQ/KnÇï÷766 þ‚XpQdt c°¡`â9NQ%>§Ó)tKŠ¢ˆ8. âñ¸X chç){„§T/½u‡ûÓ}ŽèW æ‹+á †œfçÈÛFm‰R©46?öÇ‹þ˜ÖÒéÅ´!ø­W€='ã}«—À×/¬Q–ázŒxëÄ žaýqÊúçÉDöü#ÜçÂ/!Ë`¬4³Zc6Áµp7ÜyHÀmŸ€ã°zà~3Òè…y¸.o ‚› Î…n«$ª:ÿ xÂa®ƒsjé;_Ñ{$±‹Ê¿Br°TíOrå' i#fEŽ£(vÝHã×ÙH8°¬ 1;ùø?úÜ –^xþÆ™—¶TÀD£JÀÎ.¯²/G9Àò8A‰ÿ”èrbe¬›¶n…¨†tÞ +¤g.WïüÛÐuf î¡]n¢ažà¨RM2ª²ºƒY33'ˆ¥<Ãz½&Ò¶å©EÑZ˜[ÄkANq"@¨…‚Ÿt„`¿½Ì#’“X»¸&FÀMÊAÕA6ÎL+z¥f,Xr„ò˜ŠHÍd¬nU°·³~ŒnSh~l B!QbVÔ‘ *ã4c.á\dz „§hÉ‘wbKãŸd|;…y’x{˜Ìáªâëd®…DÒ´­#ï 0I¶ìZ¦]ä}äŽò”…>'VJÓûزÈxžUœ:Ò^L-¨Q&S´D±¸±BìLÅØ‘áË=ô‘˜õÓ¢˜eR!’ÆUÀ߈¤* w³P@ucN³ª ÅÊ®†‡Wi_ø³4Ú­ŸýKsÿ9Éo”ž VŸ¸ré"‰ƒ’µp‘—:9/O¯‰©$>£>\!¦ãשJœíá© 2ø=\QeR#Ê2’E¬Eä9†JÜ ±I'.Ñ O@JãˆÄ.7$a…™ t;ù«VƒÈ>>>¾{÷nÃSNäÜ`…ÕsÐëë]Æwû”³í ª˜±ÛvJ„ŽtO:ÓšQ\Š=e¯7Õ>~åñÀH ÒyC ËKáÃá™óf*¾ŠjU *©¾”¤Hbz¬(ÑÒNpE„0&¢’azdä[¢w"„A†IUU­¢¹f]Ã×7½ÒtfL:eD®÷n¨OÚêóY–=H2N9äd›ózÙ“Øø‹¨jÌ 1RaƒfYϹ¨§k‹® 0Ô_L¡PH&“³³³étz K^(ŽÙݸA! 0›Í"Y7XsÆ¥¹£«õ´ø“ÍmÅBÌÚŒÄ"ùhÞwov&œ³«fÇÎëy©Ç3-I@ë9÷Ƹ/ãöŊ݉€ƒÂn¼$¢›%üONF%ÄX|·Û}f™ð8Ü Ûaœ·À p@×@àe˜ƒ£Ð# ÁQØ~˜†¨Æ Hp.–‰ê$ࣰ ¬°¾ ²Î¯u4ñm ƒÞÂ{Òž·§KgͰþrzײ²—×JÚ³2Q3èdd /j°ÁM4ÅŸu>)x•'&åGV¹¿æ¯^ÿ 0ñ^>ð?:qPàr‰n™VØ!óxÜÁÕfr*%ë2Tl,TQ Ô ÝΦ<¯–©¨hiÖ9±”™˜ÍœðÓ¬1¯¸.®þ¯È+_0QJò\7Z‘™ æUΞEo$0G<Ž;Kº ©D‡d˜¨“h {€V|ãD,Ìx(ñˆËý}”%$Å6¦`cG3–~Vwrbš`“'XiÅ3M‹%‡¤IÚÚ8ng.E¼VZ*lb¹†É§OcÖNnžh3ñ1Ú™µ U°YPG±ÑV¦¡BF¥ÙM!ÁÞ,Ýv¼ÝLÙ©Äqñ˜)ÛPÃäÑ]ÂWÅ•âö(á9VO`* Ù¸l-S5¬ÒYî¥T¢»´ƒ’‚%Œ=F F²L±Œ¿„Lÿ,S‹¬èa¾Je”kº™2Ó” MFîF±£•ñÕx4-Š«J9ƒµÀÁÛ`&]Œ…”µÖg—Ï9(›m¶ õC=ŽX›y­EÌE–I”Mø4:“øìe^ª …Ù“# ó°“$|rB6KHÝ8üXç!°ÉøŠ|_å èйOGÙB‡…£VìN®Pù¬Æ4|²'Ì\‘ÅgÀÕØØØ®]»ŒÈ^o¤$Ht´Y‘Ô§MõâÐSŽú5ˆæF½Hœ¥¬M_>êK¥{ÓéÆt¾%/k²}Þ.ÂM&˜Iu¦ƒ{Ên¤&"ÔZ³Ö¶]mUoõЭ‡4›VñV§"+²Ô¿¤!g„?¡ý\Âh0Ò,PëÃÐîÅD±¥h)Zì)û[‡+í¤£¾ÏQWB¯jxOD5·ê êŠx †çP½sk}£¨&§¼ÞgÄ€+Qì²ÛíÅb±T*¥R©t:ËåÄr-ɆO1êéõRžØëâ‡z|c^¥ñ²Õw€êÁ£P(ÔÏŸÔu=8\lZ´–­‰Î„d“Ö<½&:­×G×'Uõpeø§ˆ¤YlDêSízZc}]q‰¿†øL¯×+*Šâ\o Wq™IßÐÙ À(Cf¡zÁ ]°.‡ç ÛÄGáOЯÀ¸ÚáiØOJxuN@\Ãð¸ È\›á¨Žx±¶òýgJƒŽörç: Òæsÿ%uµ±·‹[†øöó\½ ¶Â1…ã†W`4Su›_x‡ZHK×·è—ŽÉóïÿ‹`†& &WVXa" ñ}¸Q![Áä§”ÇWåÉ*ÿ AWÁ°™Tg5&à%-UvY¸TcNH8½tw³XzU*·7 ¼?Š’e܃o†\žà ƒiÖX0µ“uà ”që XØ#±£‚9мÈtGôgi¯°ÍÅ/ì¬/âlcj/ÛÍ(5,üRq@ P+ã ’¦­…‰©qÂIÛ™ €Š)La€v¥<“nä< MÌLY IDATÜ@ÿË×2˜Å­a’‰®ç°ƒòE&×P¡¬£ßŒbb¢ÀŠa ÙO&Iã ¢òÖc´[©B-Äb•ÆõTÃäÝH>Lô á$¡(Xü”ÓDd´e/Ev™¸Œs†¤“eRXJ,I/ðJ‚Ëó¸+h5Ô>Fx‚dS̨ln¢V/º s’’ƒ6Ñbáâ Át&Tœ™­nx¤œs›¿wu»²)Ngdì˼(e!+Ó*ã”1ÉtV)d¹ÍÂÇ%¿PyA%T¢³‰š -N[•ÏB† „T.•Xo"«³§žËLüÖËYº%ZjL7à*!Gy§Ê¢‚OÁ]£¥>»zþùçOîH‰ˆ³ÄSÕðv3ØÉK¢ÕB—Ñ4aˈP†ã\¾3?þŽñÀp í¹6ï^ç¸sñìÅ™Kf\£.UR|öˆ5imÙÕb„!‘ýAÓ5årN8«¶êІJá’oÄ'²+q Ñ0—ßx,1o5ò0¯Mý8\Y‹VgÊ)é’-k{ëpur²u:¸ª½~Ô zÄ!0ÌX=ƒj/â¬(ô £®ŒJæ)«m"‡3à_<5c:‰áE"®J,Žh7.ñÐ:¹fÐ%Ä)+Ýð÷:®êŸÅÉ, à °> N‹b>”o;ÒÖx¢Ñò3ð&‡Ëå>&V«5ŸÏ¤|cg`¼F‰µ^ °d´›Ëå2ÖªZ­:Ž­çœoÀÕ©vdTîÔé‡>øüž…,tÏÂ6ø<<íâ£>nÖ¸Kç*xNp´Á ×k„ ôÃZp¿ÃWà&ßê85:a=¬ ði;­–ûo•MšØ»xä2~<£ç{ô—¿Ïí»ùxÑJg˜Ìj$uVIHV¾hå£3:}…¹Šþ³&ý¦n:û±”A…sa'|7еÀ|޾¥s–ŽGcÌ„§Ê…¨‹:ù7?ßÁŒD¬À¼Î¼™%.´ÒÑ4Ò÷ZX­²6Žg’-¥;§ÍÏþdïÑ[S¬Ó‘¼ÂDU6¾Wkøó4hdh8\á®—¤hðSžÆÓ@Pá<›$:6 f¸NÁ¼Hdަ •#r”…án&*xý¤§i5£^Ëc.8Æúž);å2v‰FW#Ù•Ö·@›r+Ú1Öl䨳¬÷RêabˆP'cÀ0½‹ø¢bX\(Y¼J)>R¢Ï„ª#½Ì6}ûF³Œf°f1+¨Òmôeè|•m´éÒ8¤!ŸÃ_u±ëîï`"D<ƒo›3F¹'É& ‰Æ &.r¢p:¹¦‡5ULeèdJçc "*I \,#Ëhnªi,1R:ž27ŒÃ8‡œšH:‡Îózš8|¾TÞ¢“urJŠ‚„>¬x¿ûÎ?òö!÷W¾Vä?=l2¥,ç•)fqãºìØÓÌhÖ‘r¡˜ù†S"ÛË+û9?» :œ(Vr*™izJAFΡâÂt^A ã¨Ñ¹8tpüžyš‹‚¤½“ш.q‘3¡ItqðE:ȳy —ŸŠt©9+¸Ü˜ÒøX ©bÎâí`¬ í0±ºBÄðZN¿—ø1¶º(Ô0ÉTUšÓ¬Ž2¿‚ä 6æE"ŠÙÐÇ` Ç1ð¢Xî&ÿ,zX?‚ý(Ç7’?BçJf+V±8Àß[˜‹€÷ɦÃXì´mcr_‰b'cô6ò)é<¡*–ó³ÌOpv+Ó›_Îè=\ZÅ­SŒ Ì±±ÐJv”¼T¥ÃA"Ä&ëÏW˜rÕ"•¿Õ¹y&•Æ1Á»[hœÅ'ó_YjZL|®ƒ÷ ó-¸ *5þn…çÍ\f¢³Ânã*i8uvÁ}qF¬,X.sK„Ь°T¹ ¾pfQê’\ÁPõRMÛŒ‰§£KûeƒP¾„ -Wå¹Ms®K\=öˆXiMYYÇšo®AFÖe“j’­²±7_2òu‚äõZ Í¢éV]®É§k¤ý_A¬ßï7bS<ßóµ=-¿k©—ÜÖ·—êyõÃ’üCQ”z]—h”Ëe§Óéõz—x³Öëv—,è\‰z¹q…âò꽚¨ÖnØ-ù_Ñ. mA~~ø0üT' Çá ö€Þ[%~/Ó _ÖhÐù"¬†åà…^ø:|¾ÿÎEçéË ®åƒocèvüŒÝ&x¿™_Ûù8ꕹ’ ÷Á7áC:„^0õ3.Ó§ñ¤ÂÕ˜¯±OA³0[£È-«øñ/¸úНÖ0ëÜ :;¡é…å-øú9"œb¿ÄÍJ:¿€-üb†¸O‰!/3öy¬þïÐ ºØX~ßauû.ÞñæD9‹µô$íiü2/öa¦à¤'K"ˆGåH†C49ÉEy©ÀaR#PaÖJ¹Šµt…ò M15Î@ÿãD.¢‘b²Ê¦ Ë~2Ï…ªÌû5¦Æ ›qÊŒkœ¡ÑN¯gŠišÆ=Ó³pdUžÒ¸ب²*„•ð÷2;5V(<¡3?Ƀ1¸ƒ¢Ò ëà¸áÿi”(C,á·j),)6Å>a¼£ÞÞ{{Ó+ÒgÁ-¹Å˜`@@Žpµ=á# 6×õEž×>ÓRj}ª5Û-õ•ÃDJ¥Òé$·g@©ú‰ÆO÷ÿãþö?·wþ´Ç #ŒÎÐä·o]ëc„BšßtýÉI˜Ñ ìü“ÜúiÈ"­_"UUóù¼È¤vaò»Ä0ÂÈ#OùÜë×Çø·0Ø5.C¼B¸O$+Æ`¬8t_<ý·Rt­ï’Z­V‘¨‰:§pb<¹`pºW¥ž_ºd'Q.—c+cþA?ž7«)¸FávxDb.ÐIAÜ0Ã6¸ž`;Øa,ÀF¸vè,ªÈ`Gá"™Õ6¶j j€ñ@\ú§Aéâ›4vk¼jçZ‰'r\¸8¸à1È™¸JãrˆÃ1ðAÒL¯Ž¯ÆŸH¯ã×™pŠßÉÜ,Ñ(1%“•8§Fsì‰S3ñ (KÕ‰À±aÁÁ;«HVâ\l¢7jìQ9j¹~¢å^n¹Ét¸9KØ ƒhö0±iVid4XÉDŒ`Ž0¤¡†¡Ä»ÈXOˆ•©fÂ4dðÍÓ&ö [{vQpàYÀe¥ÖÍì0Ž2îE¶6Ò׈£ˆ³™lyJ)!–ò[ÎÔmQçh°±w©“ ý¤›h(S9F×fúÛ˜ÚϦ*Ö.ÆF计êX¬¢Ìè&ÂÓÅØ3­É™4ÝLr7ÀA%K—‹\;OÜ‹æ 6 Y‰XŽÈÑ8A3e'¹Á'%™š‰d•ã5Ì֬刄>‰ÓN¾†¤àôcO`uSPØcÊŠ¢aÓù;?ÒS$ÐFÖÎ17&™é"…i–ü^‰åe«rU+ãƒx’ï”Æ:ü8Óü¹BÈîGM€£2› Cg‰µn|þTbÎÄ5ÚSäd6kT$”ŽÛ¸&O¡ÀeEž†¢Ä!- ™ø€ÊÏe<f™ïRxIÇ/xáJÐ%žÁ?ÃÛ2‹DTLabÓ˜ÓLë˜,¨Gh?Hå˲D¼”t¤ú¬l£5Hp”tnæM„™×15pX扮 Ì^ÍÞËxfަDšÈNÑ£¢ÙÈÏãpQñSé%;EDÅ;KsOWË,/p›Q#P…N· È\¢àÎqŠG¡iXK”‚¨M¬vQ]M©“ÌйòEãè¾Àh»Ì½+¨¸)hüÎEMb§ ÍɸNÁÌ_W8d£¿•Q×ÂZ•Rˆl„‡aQã›Iz4œ:×ß@‡F‡Îq3]:qÐÙn"ÔÅ /kŒ™8G 7™CŽ«¸¨IÌÜzr1ðMc¢Ýn7,® ʲ`O,1__koÛºdO]*• <;¹%:‚o%ÝvGÆ´ ÃŒ\`a½±Ð)ÿVÐa Þãé~S”mE{¬P(¤Óéx<¾¸¸X¯Ÿ=3– BùÉX+rFÎPXÛ^?êßétŠ®§?444x<Ѿòz½ÆŠf•xÇê]ŒeY>ðžËž^Vï[_ßQo‘øsƒJZ*•r¹\±XÏN µñSƒjø /º‰’¬¸x«Õ*V²R©˜b¦Š¯¢ñ&½«ÌBRy7×Q ¿„1˜‚ëáAX“ð øü.…™ó$ *_‡·!¥@Ë¡»aHÃ]å´ÁzÈœøœúɉu’L@!§3ŠJªÂèZÚgØ#çák~n™£MEÖ èô›…YžÂ©<óÛbð‰ZEçîMèݖáÃûRèï¹7\ÃRÅ*ã«rBÅ~!™{ˆ¬À|ŒE+;šˆI˜4Ìty)„Èô°/‹?ND¢2OƒµÌÊ,œËó>2£t÷2+!+Ø ôˆ=Ï|Ó„æpÉøâæp¶Pìe¸… =}ŒvS„ÀrFW »qÍÐeažà1B‹¸/å…q:kX",ÊhOaºš§Ãê6ö6â™MÍè—1l¥ê!gcAe2ŒaL9ˆ+2‘" !r³‹9'& ½‰Äc\´2ÝËl#óiüç±»€gž³û˜œÃ7ÏÛ$Ì2Z€¤ƒR;“n2/ÓÝLÌE¤ò:ŽjTÆè.3Ÿ§E¦=K²À;Ô·±ÿ¾#ó¡E¾º ¹ÏnväA£o9ÃCʵ«%ýÓgU¼27‰\¡¢’à6TÙPä1ª1µš…€GFSùdšÏKl0±Je¡Ìª^ÒyBe-Ü e8ÇLHc^ãSp­ŒE§6Ã~ ?õðÝI§`…F ™ùŒF³V¨ñÂÖÿ«í-‰a% I“–æ“kÖÕýHw9XvM»„üV“4ψ§ÐZxé¶—v~qg}çF„ #‚ŸÒøõµ7w?Þ­kÿ= ÃHø–4„–ìŽ&‡ñá#oºqh쪱‹?q±¸‘uw¯;ôW‡¶þãÖz>™SpòÇžŒpÊi¹\|§ÜLˆrÙ’~Þé®1ãµöÏ뫪ªªÓéc;EÕ9‘b#ϳX,år¹Þ¹Cà¥Qyƒ¬ ë¿%ëc” T“> ¨~óÊ­ÄÞ÷¶½ÔöÖ >RÄ>C\ä’9Æ¿¾Tý—BL&Ë(PMÓ4Ï §+Ýuð¶ƒTÏ$N›Ø-£é|þ¾Cð,‡‡ábpÂ…ðdAŒC¼âf¾©2¤ ƒAó“\w¿Âú ÊûŒ¤… láj ‹Î=ð(Ùuüûõ¤H°üB¾ûGíÎ{¸ûræíš³Ä‘-Ô$•ªÆÄ!¢r@ån™:…?˜Ù¨rÌ26²*ÉgM h¬€«H)n0#Kø/@£¤±‹Þ§1hf|žŸ´³Ñe³v§q.Ùè°äÒM5¹ÀøHˆL{ßÑÅwußr[펯†¶gËÊíÕ–FÚ¿;,ªÖ4y°:G‹þAÎñà ¢³FbÁĬ‚7M¤‹±4~Ó‡Á2Gôö•±ŽÐmÃâ"3M»—œ“ÒË’¶ÑÑ%ÊM¸ÒµœùNâ­L' ÷2¥AœÈ<¨%iR¼GX]À["ÔÍŒœŽ¢aÃ/á²âÎlb.ƒ?ׂ¦À(2ïrb sî8=vL.fLň-lH;>÷©æ¿Üh*U«Q ç)XVåVUþ^§_g¢…óe¾Uä½5MD4^Ñù½FEe«†d¥ÓÊ—ÝŠ<C¦ ¡q²ÞÂûüäóÌ‚+B0E¥Â+›uβУœ†ÖDJeG€é­‘ýĉ=ö˜¾p2øÌ½úžPðÞrpô£þQ?&,e‹ñåÿoª*‘*äZséµéý·ï¯4T:~Ó‘[“óúm[½LXôQ–@éÉ=›ÍÖ²µZ®&ž¢‚tÿ…r°\l,V*šCs”Æ*NejçTÇŸ;jžÚÐû†zŸè•eÙV¶Íœ=š 5h "È³á ƒ QŒsQ«÷VËeŒø£nl¼ÑÔ¿lÔÅÿo8¨.aC¼iR÷QÆ¿N§HR—PTŒ¦NýNB@”qÁõ†xÒ—Z?ŒªÞcw ¸sQŸWœN§Íf‰¬˜tåõzÅ©³Ýn7PAX!¿6’Ê«zÇ¡öÃí¾ƒ>ƒ‘QOŽ7f‡Š«»c˜€ ˆ,JêÜfL?“É$²=‘« Á4ˆâf-Kï¾Þ3gô;è±0TãxüJb›„Û! ßgM—z˜¼ŽòZxbð×èûà0trý!:ø‹¿bí$ïß+yrC“>.AYãqø!l”ù6 ÂÏ¥øXMºæ˜ôõ¤ì:K¿á§”G˜QØÒÆ/šiðÂ>°Àf't~û5î‚v3ïñšÅ!1 +5^†y‰ev‚6”2ûGy® Öù8·BÉŠ-ÌQ·—/žš½ô×Õ{¾®6fjŸý±×cMìÞ¡këU†š˜Ýõeë#m¼«';1•ì4kG׺«i8×ÜTJ«cËŠ¬R¸´‚^c²Ìt.N¢AÍÅËtŠgü¬VÑû81M“F­Ä!•Æ•”«Ø’4º¨v3¶ˆËC-B,EÃ<. Ëì¨ %•aÖ áòxŽÒt6ð £KÅfºi?«›˜ËãO¬`®`÷Ïã^Λ|k_[ŒÈ=“t´0+¡w2^Åj¥$á'îÁ–¢ÓN9ÛM¥…ØŽ¦š)û‘T”~86@9ËÙè]ÉXo ÷å,¨D“´ë˜æhðQ±`ÖsØÛ™ âÜKP%b¢h§ªb*!)¸ªLÔË£ÐF¾¡vf X5ôɳH*ÑVÁª1¥ÓXÆÛÌ&™2]ÐR»ñ×Õyrt•ñ¨¼¤q~9™F8®ãè7ñY‰¨†;Gçz6Íñg;4:L\èå Ù*6°¶c‹ÑTb=„Á­#vÜf± ±"·ÁZ +sÄá¸Ä_è$œW=ûÛ|ó/Ê7W¨j¤$>iC^A,NÈͰFUaÄAO„c‚*å|2Í+MlÒ˜ðà„¡*~Ø 1Z¡ý0dâ]:wÊÜdg›Š’Cƒ ‹Ð¤µÈ¿À%Öhl€-Ûu–ÉØd:tÞ®&''÷îÝ{J«Ù7ÀÕ¹3Ó›§ýúÅ—_„cÑÏP¥X,Ξ5ß¼±%mÍ/5»Wÿuý C ¢™t²6¥´º¤X•Õÿ¹Ú>o—U9¶1ÖûXo`40{ά©br$¢U¶ÄðÍÍŠ0j³Ù mÐ’ )þʰ®0Ì8ò]ù¡÷5îoìýuoë®Öl{6Û’m>Ü,n?ל“ŠRû3í€'á¾j¸å¥-5|s IDATàÄ'úî«7D7ÊŒõó# @2zuÆN \Ö;ãKôÅRÔmZRáwj$:bF=\"hƒ5#6(¢i]Å©Åuªª*ÐÂè žŸèu…ÃáP(ÔÚÚ ËÜ(¸9b¡P0θû¢Ý©@to´~h@}WdrbŒ$¯O^°'ºMFm³¾R]SBfxdˆ[¼qR‘ù >j=\y½Þ-gŸw™ðüšá£ð(\¨£êh…m°‹=¿äC &.‡4LÀ§àX÷Â>¸žà‹×qý*¸¢JNcšŸŽk¤U"2OƒðxÆàF¨1ûkþcµveR[¿Výo±înä¯yùEÆ­Ú—¿£ÓÂw£|C6ëôÁ­:m:+áã*>KˆûéQØ ÿkdÞ)Ó¡Š&šápœ; |?F_†Ç* òƒ› ¼}ŒtùÑ ºoøªü?Êœ-cç‹w-ûÖБƽ¦¯ÝÅWîÍÑ^Y´²e¸…ùAî˜ÃYE-b ŸÁ6Ïl ¢L÷2Ø¢ñ½rœ!xJç/tþ3ÊÛªœÈÒ¢’‹¢÷’òÑó2É(ž¤èÕÙz'<d};tÆÅð¶"²NŸÄÏ%.1q\¥1Y@Ñù¼Æø³t¨¬•péä CŪó*ä—G‘!Mf2DåÄ(¹,ÿÍòÎ{;Og½*Ërh_ÈT2•Â%ñýww¹ÇÜK¤HõGëÞÖæñæc>Û;ú±£=Oõ£¶?Û>³c&ß’7„¥'×$‡¨)¿ êK†%ŠºÝn“Éä÷õ>ÔëXt˜*¦•¿XiMZcc’$•}å¹õsÏu¾Æ ˆ9Ãés¦ñ‹Æ—|¾Xœzûq"Á#XB6©T*ÅbQ¬°˜é' §ãˆàëv»E^òYŽo‘=ñ¦‡¸\®%ù“ÆàÇ7x¿‘óm,…Q5”‚¹àóù<Ëå¤|k+þD”ïFV´l7(©P¿#àÐn·¥¿l6+vTµZí­Ð_O¶»\rׂbPKN§48®Ê A3</Á0ןA‡ ðv’û£Ä„™»!a¦*q2°ú ϳ=lœâ_²¯W5·ðU…P™I î³°€¡ÖÁ4Süëjí ßçkŸáÒor–¥‘Žñ³ ¬â ÿK·ü~Å»Àb¦nm&Te_‰{túáèÎÑãyúu6Ã>/ûüGŒ•šÆ7%þNæ™«ÛøˆÎ=Úmßê»ó–„Ï-LPâ׋fÇÆ™§M·Ëšt˾æf°p^W8^-ê+j;/¬lÈÿ,þ iâjÓ:fz™(ã]EVb…‚%Eà(ó%n•(EÍ£ìcsÞ5Lº(eð½BÆŽ7˲Ô fêÊáÌa\ÀX¡8ãdfñ70:‰ßC¸ƒñÖMËÉj\Ác”R[Êd)“Vd‘ jÞdÝ»¬jãøVDp“F(!r¯˜ÈNQ²U=lxƒö˜œH9¬ R#!Š,¤ ä÷óჴ<Ã¥9ÊG©´^A‡Ÿpƒ>¢û²˜Ö¡€ù$M&²Kˆ-åä^ÖORo¤¤–D;½ÔEhœÄ9¨—±rÌ"ÙnJ¢´dxßEÑ“N`eÚÆ°÷,µ;h21^|Ùƒrr(¼mU d$ŽU²ÃË·¦ðOrÂeqöåYäXž¸b+Ï„hŠ¡ˆ,“)å„À ”¨ü“Ê‘[á`˜É(õ )0¨ØŠÙÑÀàR®2P¯ð3xºri9*³B¿ÌÓ*ß1Ð/²XqíÀ6{ZæX¡ðÌ<A¤ŒäêqÖ@æ–‹mØÖñýŽd ™7À°Be^Ófµþ¼gŸÇÀ?½lzí÷×V=Sµç›{œÎ᳇›^hê¼®3lkêZL/<4TЂӚÿjRoì몦Øè¸ºcÉcKþ’¢&cÒ˜ $UQÍ83YGÖ9þÁ!e°ÎYãeñý_ß¿âgˆk±ÿ>t)÷y¥3-àJr,O«G®ÇVí*´¾V›Òj_Ú è£Hš¿{<ײ(]2\C}MB†B6ŠÎÁ;u[ +ƒ|t¶È™ùúÛS{I¨!¢ÆåÓàJÛpÂI†?·2õˆ`Ø(m2Š}eÂ’úаõ>{Ó–´Tg鯣F¢LâF‘˜Œ1Î UáðžÀ£0-“¹H +°Òç@ƒÌ€…LÅ%8Säë8˜&a¸¢Òz¬9Ò·@BR°™pÓä{ùâáïݧ¶òíÛ8¼ý Fb"ËèÏ‹>±U9ôŒôÒù¼u¹ÏL²V¡×ÅŽzŒ2†aª!YJ¼†nå*/¥ÿ$mY‘ç0—žÀ`¦ÕC,‚Äю¼’S”Ê y˜½’7åÒv‚“,Z@÷$eË9"@O g_5à üVŒy,x˜e| ç-ôÙHXN¹:&)‹à®dÌN2LqýG©¹„7“ØKPª‰Äp™É¾ÁF73mŒtS²)/ÖFúÝDE”jF‚ø³˜3XÊ9[E° Ä(òNcH’㯣X CV¦!„ç(Ëò™cfp& è+%â'3GI†Ô"‚´4µ²¿ã;3Ôd˜«ÇÒͽ9<~RI\µøb”$™u“IÒSd+ßtRš©åÀ59ž6!9ˆÏâX¥ ‹X¬$sŒƒ[ÁèÄUÁ\œ MQòFr>B#)z®Vø*”Û¹¤„K£ìS9T‹óì2pe”GÃXB¬Ìð¬ƒ)(´˜0åq+a°Sö5eé/¥êåw/ÓdâK %nß}÷]Ý·P …Ϊº4œN1Ÿ'1®3å¼½é@zôòÑh[Ô±$Ë“¾Ÿ¦°§í¦Íf³×ë5›Í4$Tl6ߟ1iŒWÆ#‘Ƨ3îL¸5\±§¢ëê®ò=å§ÝëÝC]3¢Õ}/¬Ë¶~@Ä·Š]gu5½Ú¤OY‰¢L,š"Òž[öœõÏgéÔ ‹Åâ÷L-Ÿš^<ÝôJ“ÆÑmîïÙu7z=†Î{¥„ôÒ«–Chµ&ýúõê¾Bíp­¤©óÖ çTM þ§7q!.ê P!øéY‹¶ŒÚê«Z¨¸XiZlžv†öAݸDC>M]BŠÒX ‡C›6Ëçóáp8‰è@«U›eYžõÎŽÖ6loÐË•ódgõëÒn´.פ‹éº½Ú¾GÇ3ÝWE¿}ڼļg½ ª¥SºÏ5ÎE‹¢'ÛO¾òððÆáóî?oÅŠ¿IÜžJdÁ8Äà"°çù-|^„à÷p¯@«ÊVˆÂ.°ƒ –ÃhY¡ð¶²ñóp.ß{PpšÅïm’ÙeÇÇ®0 fø¾À? )l°®S¿ôyÀÆ_]Ëùê…©;?Ÿz¥”7Z¸ÒŒ J„MôFV8ª² îƒ7Eì2#QÉ DEzÜ\—fÀÀ’çyF¤1FE„˜Âñ㬱P&ìz~dùh®âIõáF--äú&6ô¾÷oùÛ4GÖ€’%dö(þR¶ü"ᮯ%î^¯ð… ÿ&På%—AQÓ¨åL%,DÒ„Í”c±„J°…à™Ú$r"¶|f$•üJ:â8Æ)W 4¡Ô³ ñ,äEä–Vº#¸CÙIˆ(fÓ4îJæê0‰ kUµµìÉ`vÄ/ ¤°>ÇÅ!¼Ë9 DqµÒugÁ^šLd§)±’ â‹ã¸˜·¦),tw²HF*c¢ŽqÊã8ªî¢u”Ê¥î¢¾Ž µÓ"¦§HÚ9o#Ã,8D¾…¨€|q¦‹ãXò,¸·÷ãªal„2+LR帻J>Š+DG9˧XìÇ9Î\–˜ƒ_;ÀÍd±¡9O`’X5ÅžßØ*=Â`I¢¦[z¨r$c\háÉõ6–8ð$‘T^vq›‚oŠÿJ"%)Ønf*º/ {hŠðˆÂ^+áY–ir-"6 ®$ß‘ùbм‡¾G`‘ÀgíxS˜r˜d^ƒ%ðS‘¼Üú#î?šïz‹ÜbæÊÿŒžÓ©ÐBð m}ø´9AóýÍ@²:9zõhÅö ǰá©õ oáž=Ôš\7¹øÞÅ@Å®ŠñsLJ7 ¯¸ïCM²¡Ð)øTÒ¶V¨ÑÚ šÏ…ÅbÁHÍhMßÖ>O§Ç3âÑk¤:R±¯ÂÔoÒý‹ ‡Ž5;ר£vEP ëlºG»6N4¸_éæ!ŠNTÓû(…¾z¥±Ÿ¦çˆ§%²Î8ë:ÂÚë×eX«øip5ϾRUÕx<®­áGñ$<­À±>¬aƒ–Big¨½3‘Hh<ˆd2©¥†ZjUÈÊ«+ï-\5X¹»R{ŠNmµêY‘.Q¨•¥)²ëŒ’yâ“óÔåuW”ÓêdZ,§Óyô¬£û*÷}ì­õû³&''.Ç™‹³ðœ^†~è‡ïBÜ Õ S*¿‚üö€ð<ì€aÈ ø °&¸ûJõŽˆÌKp}„¦<<B'¼7@5\*ÈÜ~7½oòtZd&˜}››®å/¨žå)#9>Ÿ 3Ä/dâP ;áI˜9!q |Vf.Ï®Jg ÃyöJÜbä^‰Ð~ß¼–§%G|ú ¡·–{îæo »qÆn}4o›Ö<Ô%°!Ö`Î`ŠãÌgñîo«8Dnpá7÷áqQ?ö fÃÐÄ ‡tŽºbb€‹¨—?‰äޱ½w«€E@ª&\ÅÄRzâ8ÔEY„<¹zúMdŒäÄ…t$±-¢ã íA|IlÌCÔLPÁÝ}ÝA_íaŠØÓXƨ°’²“¨`ÌM¤ŒXGŠ`#¡"*a:ˆ¯þvŽÚI¨>‚ò@Il"J5à ¸=„«ÉbJc N ÷å½–q`”ŠJF‡ L`]ƾV†Ûj°Œ³HÆT‹#†µ–‰rÆÛèXF×>ºˆªVB1¦0”‘2Jã8 ĺȧ¹%‹É@&ƒ„1fËÉĦñd0ç‰gHØhÁdfH_ËCŸâÊW¹ÿÉ÷Å ™(v…¡ q…WÓXçð‚7p¥P’\ÝyÞÌS!+RŠÀ7Ýdj \b_ŽU"yë,*dÆá„fq€ ¢€SÂ:K·Œ.—hƒ ¼UÂ{p·hÈ|vÌËTt¿>þ—Ǩcñý‹½Þy*úQÁC­¡Ù¥³u/ÔR`Oõ;ÕË»\̤ó1›ÍZÛCg7Ȳ¬û|¾@ PZZêóùŠ‹‹Ë¼eç87¿>ì¦c¹úœÕjÍÔfFת‚šÉdTEM&“:‡B&õîð:ûü?;´Â¦&"¬±ðõj§Î-4‚K½|ôÔš§–÷è×®KÑë©°Ž…º ½þµz ¥:ÍO[Ìl6«Ï*i~Q…ªö§rgÎŒˆZûMÇø\.§ñƒÁàÌÌÌìììÜÜœîa_8]žÍf[Þk±Æ¬»?·»wcïGùs:ð븨qF´ÜKOk"|†ÁµBôºúÄÕå±òu#ëNOOÕ[k²„ð>A%<A'Àƒ?B5œ!˜†,,‡ð*ŒÂ`ð¿ÿ·À&Ø«p-|Þ‡(¸á×STÖÑþ¨ÁCx7ë*™1“Éb Qä&rŒÅMHYÜ@?õ‹9f'1„«w' ›8y‚ƒÔžÃöC´Êx2˜m$A´am``„ÆR¦')­c¤‡“À4,àÄ µa<)¬*˜Iû™¦d€­“$1`DÝɆFN„ìbA€Ð(†5íÂdG4aR©KàmB™bL¦<Ã~>݇œgQ)ö=y”9Šãl”pN†Œ7ÝY[}¨ÿÁW‹ž1£ªä@âŠȇöŠVÙÖ¯ Êr£ÊÙ*µ2¹w«Øàø$¯(\à%™À˜aØ@}ž¤ ¬Éc—Y¤Pé…û`Ì*Kñ%…¯ÀQ0K|ΆWa:¥{¾­üðùÈ:5ýopó©êjÚû ö¾ÿ[GpY°ãŠŽŠf¨®^Wýsõ– åÿÔž€tÖ*6:£Ak¿ Í³­xbÅÛW½½ãë;6ýû¦ŽuÔ?Y/‰‚$h½z-*iÔ¾V+Äý¿^ÝÅX#†F‡ãƒ={ç:ã•ñ²e»º»íå¶òCå…|ÿ¦÷Ûïk/̉ 5µÔYë`Ê*Ôµêõ1/-oÖÒ]EÑBùi-:µüI]îOŸ5ÖM7+ÑhŠñx\Û¸h“L¹\.F£Q]0B'ª‚д¿IœgËfßúá[`Bå‘ʶWÚN;w?‘yœ=Õ5™ § ó0}< ™LæŽæši~µñÕe“Ë> \MÁ`…k¡ > …káHp5ŒA+„û` H`ƒ{ ¬°!qøW˜„„¯A.Ü /á|›_ìç®uL¼ ¸ V ¡U*'`¼-,ïå.XÌQdc¹ª8Ù²ð4<ìd‹À•QJe*bôX¹$ˆEå¤ÀX;VØ'P/s¹‹»M ÏÂlÀ’fÐC¹äð«ÏÊ—«WýAŠÞ1û”©B®›&›'j ’q\ƒdO07ÅÆF‡ O’]íÌœ ÚD “_´²:ÍêqÊ­ô72>NÙK¬]M_€Ò£ä#\ÝNHAÈbªbd†âîIJ*ÅßLO13Ôb¹‰l ›é*g|†âq:-Ôû™-gÜæyýù;]ýþÏ]u™!n¾ûK»×ýǺÌL&•OF 54s¡ÄGW œ‡¦¹\N/$F-ðÍû6-*lù¤äÔȦ‘¾KûZlmzªÉ˜1âäàgJ©¸£•¼5à ¦Oš–^5ÔÉ{|ˆ3½Þ:³Œžvbz5¸Â`·Û5hשö:]ÿ~M½PŸ“Óî”öPi}&-¯ÒÉ‘HD[7­]W3Xc;j+§\»œHMdßMû 3†š÷j Gô § ³%½‡§ßbõªÏKè¬kÃë®]—>õœ'ÜÓî­'bÎX•½ÊïòŸ™jØ%°^…›`?\/ÂO¡6Ã2Â#p;¤Àp Œ”–ÀB¸H¤Mà»*;ë†- JC1‰zâf¯³ù×¾ÊÓWp°]L‰jê[Rª’*«¬0Ц²u–=_WH¢Z‰oI ïÉ«Rߺ{W7ÏDzoØSÝe#ž}÷wÏ•Ð]¢Œ´ ´ÙÓaHñÒPÁT“*U~Ÿ#ía‰Ý=üFe¬Œ«b÷±ÉÈsiªUZaöÁÙ†U)fyKâ‘_©Äáå]!žQY >ÈC¿õñ«óOý˜KyòÚÂ1á;wžZKÑD¸5!´Ý®ÆìÒƒ‚Þ×ÒÝ8*V‹ÖG3¾ŒeÚ"Ër²1oˆm[óð+V‹bÉÇòBJ˜WôÓù ZJs?Ҏ¡ŸB³ìôé`m³¯}Óé´Z­ååå.—K㾇B¡H$"§e’Tí¬²‚®›0tÉPí˵&“I³œÐ,-xŠ.óâø‡ YéªtZÚªcÞ©úLz÷E'é…ŠCÓ˧Ûþ³ÍÝç–²’ˆXÜ_ÜøJc÷ÅÝjZµLX†W Ï4ϬÿÙz!òA>Th¦k©âTÎ’ã¢vCõØ­­•®(¨[ê84ïç-ê¢æ5„tŸF=÷ÕäÕµÕÈd2‘H$‹i2†‰D"‰hx  äF£Ñt:L&õ„,ŸÎKYIÊJƼÑ>c¯Ú[e ÚŒIãi{óèú‰æLº§‰>w\è{©Û kåe½¨58™€l–Ÿ½îÙ2™¯ÔWcj=ذUÄ(°CÅ /—áì„f0Ãó`ƒ…Í0Ø Ál¦\â'9Þ®2#‰ØT<ê7v(íÿDã 3¬bíC,Uy£Æ±#*³ÅÍ9ižS9U {Dv«t XTî†);ËóÌBg‚~§ÞIüq4Îá0rXǡݴ×´1“ ‡1g½*â8åÓ”,ãH»ŠÃXDHÃ0,¤-dfñ/|£¢óÏ?¼èÚ0ÂZÞÏbJ޶ëv%¯{abÇJÛïn^õžÃ@ÞA®ˆˆ„¬".à„ƒxó>Cáëö$Î>`Xrp\*‹/ßÌ»/rn—™j&¬¤]DÇ) áŽâ­dt–â<Š…”%„ÉK\`z˜2Ë,¶ f¦ñsXú)³1¢PÄï&b&;FEK˜ ›‚¤07ЧŸòj’s˜§™6³³˜Æвl4ºˆ÷±ÄD$‹ÙKÄÇ‘Å:JŽb~ö¸zÄã%ªÒc¡ÝÇ@ŠÐôÕÛgÖ &ßY™¥7J2GÜ&²R&¤xƒˆ5 ›¼!¦GE¢$•¢4™4Ã%¬Hà†b¨±C=<yí|:ÃÓ à„@@åc03°Kdƒ“ËÒ/F0qèCáª0ÎΣYëI˜¦6«w¶M&“^qÒê?Éd2Ò™Ü8™¨J$Ë“ÑÚh¸5o‰'ª«Y“Éæ IDAT^5o®è´3=ºdƒ&#¤½íïVx ‰øÚ+n·ÛUï:¼öðxíx ¿·¤÷˜ãX‚„cÚ¡MéÓÄÀÐÅCõ¯Ök$C­Œ¦¦B«óÔ U} ’OÕF*<1¦×Ðt÷ }k¯¥F4GÍ)*R)ê.*„º’ƒ%;îÜaŸ¶vJß(%ŒÞsšG/Ônª85vÞX´>j ùý‚:?²ë"¹:1D»­…BÍ"Rp* ÷ºz“~ïôý„ž—ëîY…êú_ÔèZIP'ãh©ÞlìbW¬ ë¼?‘ö¤û7÷K1Év¶í:ïÑ:®æ©)j 6}~%UK õªéHÕ¤j*©LÖ%…aQ|õ˜3 /C.„¥ðœ—ÃPàPÀ÷à¯p.8%š–©ü{НÃËÐ^øÊY*ÏpÇŸÝFó7a›NR×Kèî®»Â~?™]‡³ Zä „Eå xNa©Ê.X>Ç´Â X6Ç6À.™ÁZÈåÂdaIž^‘…AŒvfòØ"ø .ÇÊ ^õªmEµaKÐËÒX"Á ÿ[o´÷áâ{>6ÅLÜOí4Ó*{€rÆgh5°}œ#.î!QFªŠcYJ¬Ó0)Ù†x‚Š… î£ÕŠ”Ãæ"VJ¤žþiJL£Ú@¸’ÑŠ{([ÃqÃ>â8Ê8‚c¿€ZD¨ã?ïERƒxý™¸í¦oNP–Ä–ÆÒø³+ö}÷ß=7ZIÉH ¢‰¬ûų]v¤ºÔÑ9[]D&‡±šá>êˆàÎ » !Œ0ÁįußýÈæ%¿>øÏG>÷Û³¿ŸÙÛ´˜ÁÆÅœì£!¡†¡Ræì䊙é¦ÅNbð¼žèu/qg#c³ˆ ³¥noMž\ Ããdæp6ÆCÉÿIdžÂÄBkHè]mË\X?ÔÂnª6uükÇk·ÕÖl«‘­òĆ ÀÿŽß>eÇü·i$ÝÊöì7t.øGiE|˜Ô¶ Û%9LíœGoyïÁ–ƒ ^\`è1œ¶‡¤íµO ‚§ éä=ý•ÓæLÆk_«‡Bê&VL ®ø` Y¥†# Þ]^íS••}ëû²Y÷˜»°HUóçš‘­#åï—¸t:€X CÎ’;þÍãî wé®ÒýßÜŸ-ɶ?Ò^x ºž¶{ÐÉu‡n8$Ûd /çE±Æ­_Øø—]Ë·æ%=š]–FÒÓR.ötŸIí=:q4Tš^>-åÖm­Ö9k¡TG¢8÷Å7 6A#›œÖ @Ku×廬嗅§ªm ôÖݼa€yÏÃÚ‘µ‹=‹À êzW%}'r3ðÅ$?*¥A&ÑFÿ 2’‡p_kÏVF7pdš€ˆZÂtO!Ñ^;Áá»~·ëüÁM7_sˆekØ7J…ß4¾cß7•¿´×ßyõ0Õ^süáñÝE÷ˆ¥L*ˆFr9Œ%GÖþ²#Oþô’Ee;«ÌD äc8—qx7«K˜5“]ʉãÔ÷¬Ÿnû×¢iiåÿ¹´ç®àîÇï•Îå³};ßfs̓xê™QœÄRXG¨ñÚC¯}1ñÖ–Í÷oì¢ý3l›`YúÆÝGÿŽ9÷šU÷:‰9°PÄY6" Š(6’iãñt!ËĬ¤¼ä: ¬ãp gƒ›\K®wYj&iA®Á0¥Ý»£´ÆY\GÎÍX‰~êÔËßäÚŸpû;îßH*©2,YFÄ[ߘYÕ]FXE2+±X!”çÂ(¿tñÙ[eFÀká!ŸŒàŽRçbƒ– bž8¼4Ç{ÏJSD†ŒTGÉ@ Ô@v)\êàK"Á(Ó|]f!Ô©¨°€'ÿw9…f}´Lü9Ç´£b…$IRVªÙ^sêGtíÁSõjõŽ—¢(ñx|œ*¹¤OžjñEëZYéhÑÑk_¼Öçóißiî6KQ©ÈVtø’Ãñ«ã¼qÞ‰é_þ¿â’n³Ù´LbžAíäCojÇ;üûü5/Öhœ—Ó5µnêÐe‡Öüd=b/š)Rª\,§ZÉN[±Àî@ß§ûú/ì¯{¥N‡+½æ¦C}𺕼+ßòŸ-ΰsó=›_ÿñë‚*,tù©`¬eB’$õ\Ú3´n¨ýÉv)ù·úçöÛ·Ï-«§¾i[Óß5½,tG,¼qZ•XÛè…Jˆ¨‹“%¼ URÞDÆžÑÌÙ(ï»y_QgÑ™÷[Z=¹°ø7éÈl¶P°®t>¤¾ 9UsDçj’$Aþ p%œ åùD`+dà¯ðP ¥þ(ós•Ûá18Wå?ár0k´ø KžOûモTßß/Щ²µžÏNP›by;¸JÙ2˃n*g¼“ahWYÅæ¢Äï瘄:(/Èã|n—i2àšÄZJb’ ‰é<ÿ·‰x&dËl€±4K Æ€E`WŽå=Ÿ|¡(¨yqÝ0OÔáíãˆÓÊOYX{¬‘g+úîxzò¯Ï~=— òÜÕÂx©H‘ÌÐIÒ&ìY.Ĭõ1äe"Eõ,î :¼7Ä·Zè“ù·~¼N&‰7Ñ›À~†EŒ8‰ R@i¥;„'‡»Ÿ†Vº¨qo¤÷y.?×þÂô7žîÜ{åÅ?¶Ìeª’/¢¾Dj>µñë]—Ÿ8yËåwɈcõš/Õ¤°¸‰t²°„‰4Ô3çþܯÇ]ÄWÁX ÿªPUKS'-.jƒX‹PO°t+oìûtOÓÑ¢ wï‹°J KË¿uÃAiÑÌ“·ü±q@æWCä3˜gÒFËu_1E-¦©ì!–$ž»40ì¾ä>Û˜3õ½Í­órËá-HgýéÀ}Ó”4qr‡Ž³èVù1ÆSÊd71œôÎ0\Œ¥‡ªÕLÆpleoÏ lQ16ÓÁïefW†¤L¨™²AªFñV‘¬d¤›À0N q#Å®»¿;רmŒ¯Ê=Ù?ûýŸ-½÷ÂÑ„/¿(®ŸJw‹—~klÆSÂ^~WXe.Šòm »‚ÙJû^|‘ ØE–)tE™“°KÈ2¥F$-6vÙ÷©¼Ÿg§‡ïªØRËP+Òlà'yîV¸ÀÄõ îX#r$É  ƒg<œ'mäSÙSˆìZ¹ÐÚ*‹éuüÓÆ#ýé&³Z ‰4Ez®èY×zA>¢“ïÿWt<®æIðéÚç~ûÑÛ½=aLè€T*eŒýÓþ³:+íH¿xÿ‹ÅÅ-Ï·¨ªºþë5ßÂ3Õ¼b±Ø©g2o”§°ów¬ò§Žßt|ë¶æSùl*›Íf‡aƘ4>Õ¸ç–=Ë~¿Ìˆ±ñÍFËŒ¥(!Š¢sÖ¹ú·«gªfþîrüêÁ÷­r’ ®qו7_9½`úå»_øÛ)ÕÞWm3 yadõHß9}‹Ÿ_lŸµÛ&mú{®¸ùбåc¡ºžó?]áµ ŸÍf5k`­b¬Tõ:ž†Uáp¸° ©ç:…éµR¦ì½~oÅÑŠ5¬yïÆ÷Ö<¾Æ<õÁI'œ#ήP¥pmõ?­ãLa‘P—þÓ³«ÂŸÀß­9G£QmÍjµž¡"øhòâRŽQç$gB¨cd-{;X4qô‚É•ãÝ_Þ1k\r2íW悲}ÝS \XñÀÇ7<°´î K¹ð­ßÞÓõ‰.ŨT¬˜ç+8Ï©O/ é«QX$->ò}¶­Pªò.t©dD¦T.…8 àöàNУ2…(8àÊ; Þ…#°Sd!4Ã*Ø¢pÂF{§B‡Èr#ÓYjk°'(2“Î8¼¬ ™÷%(´©t©‹Ÿ‹š ;;Ÿ€LŠT₊bTÉÌÑg &÷ÆZãKŸ,ÍLDhPßi5QnÁ,ãU0[‹è2SÆ_L]ÙE&‡:G©•´…LÓ峸âØ=Ä*›¡dŽLÇ5ÇX,cðò\Åþ)J-äÇ/}#wÍ+E=©‘æŠÇ79HÌáóIbK`7“1‘ á¢ÔrháLÛÌæ»×¨Û6—3ã&j"g@V3XziJ‰óŠÝêþU¥LŽQt6»'*ÌÊ·MÚê³*H3”É•ï«<µ¹ûÏßµ>pŽŒ ÝeLÅqjçæ ^’Ÿs=u‘oŽÎŸ³Ð6R->¸5±ª˜-i³ÅmºÉèÆÑ©ÕS“½HeTŒ5{j"U‘lI¶x¤Xw_,ûõŽyëÞ¯m=yáɦwšL&SÑ‘¢âÅ'>vbhÓØoÚSæÔøêñâ®bÇ´£@¨‹9鈮×ÖôµÒnk!eFWUÖ¹º‹‡ÞÿËf³†iCÙ»ei_zlŘ5lkÃâxëxóSÍ.“KãDj*²]´ËÔAhž7[a:®ÏMëÂùZÁ@¿¢Â=vóFž³Ùle]óàj¾ƒ`3pÂ$ü´Áûp3Ü #FpÂJHÃjØ-ÐªÒ ¯À |ž³.¨Þ?nŸ§°^…Ã~•'à6¿@<%r8G4qÃÜþ¯{È”ƒ6Sžb!lq‰æ1@*G3”ªTЏüJI…ù“Ÿâ,pçIA¥HU‚R#Åy >ªÓ ‹-JQ´fÇ¥VÄ,VéÜw’«¶Í]ppÉζñŒAå˜Ê†,QÒéínãÀ­"&âi~b«€³„`–ІG¨®d*ÊXŠñ"ü}T†qÚÉt²@ ¦@%£íÛKKá^J„J ›ÉÈâ8ò†ÜE=Ü5rõ5ˆœ\¿á·m5GŠØc8è<„½Ì ¨UŒºˆÙI–3Q}Ä;›+wâ¤ÖËœæV5E ‡–¢}øeÉŸ0‘³’Ø{ßã'Ïïw”dnúÃô¹êëç gÊ[\À‰ –²Xô ç¤gU31‹ßHÎF2…-DQO©‰†ðþóƯ›c-CÉîËáÖÙ{ïQò;7ûÁóK».>]ŸÀžÃ8Ié$Ö¥vŒv’ à!2Æ‘GTšRØ ØÇXÅ(è¦ vhœ$G5¢¸ šðH˜Ò=Dq¿H±ÀoÝ,Ë"¨XÍ1)Q”ík­8à{wSöòw/­¶½º>Ë"™•Í´Ì’p) hU¨R„z‰{=XSô[1OaÊrŽ i‹Š!~ GÁmbKŽˆDE›“|‚X?ŒB›H›D³Ê}pŠ$làU˜ÀÂbðÂÕèèètµìB#+½œ¥“Ù =Ôuçí§®5iN|ùÄ‚Wx†=®RjêØ?Ë»ò®“®B곦I¡ÉU”””¸Ýn탩TJwº:­Ñ‰Î×›ŒFcïù½¯7jäãL&óÞæÉÊÉ¢¾"í´åžt:’ðÑQ‹tñx\'4Æ5=øÎëÓæ4…-MRhhËPß§ú‚«‚¾¾¢®¢šÝ5¶¼M‡ŸÂé]ýêŒ)£kÜUŠ…qÓ3Ï6ϪÕ=âEq¦yæÐõ‡L1ÓÉKO›ƒ9GÎ;ð7UkÒ:¹xÒ1ë°¥mƒÁáphÔÝ%$ŸÏ{º=„êC®—ÑhTÒJqOq¼)Þ»¹·¼»<¥¤†¶ µý¥MÏ/õuÐ0Cßsè$ K´GE#qh-ŸÂ,JE($Ðë&,™LÆ5ê’ r¤&âtÇËâõoÔ A¡X?ÏÆ^ƒImÛqª`؇y•éïѶbóž«ÂìJ{Ì´€l6»ãƒËÏU.=30Ãôȃ(˜! ×.ƒw ƒOÁ{·©X.UÈÀaø<‚÷ü.È_×1taž¯ |ÎÈ}N ¶Ç Ta\`“ÄÕI>Éò ÞÇâüH ñ ì ÖÂQ¸1à «aØÈU2Q‰Ý2ß„*\4ËDˆ\†)®é–9°†lÎ ?–x2j`Aˆl^²¿ºÏ,þÓ0+檥¯t~üÎü?ŸkpÜ|ìñpÉﲬ—)•As³ÛÚMsçˆÅH Pž&$ÖAššÔ–FL)Ðu˜š22q|^æšâm"^K„fzD“˜ªùÒ_Md6}ñÓÉɆ½áGzùÖB«¢ÆËÜû¬–+[HçuFr²„<@‚(¢,¤sÇŸeËìMâjªc GV RvVõNþú§eÏ\¶l¨j"Üê+]}øÁÿ˜{õÿ\¶î¶iʶq^#½ÍÿÕ>æ[TBDB®f8‡Ñ@>‡1Š+†³ƒ6á¬Ã3/4;dû'O$[D(ÂXù[eÅëÿݱú­]]78~ù¥ê“æ1 á…Œ½Îù"®2&5™DÑæÃÔ8)Gõ‘å–vnü*‚“ÖÌT,bà$õ „iÄ+âîby1f%É×Ùáf»ƒ»2˜#L²%;’ç¾E~ñŒòŸ#;®QHeHÉt´qöÝ" *Oª¸el°ØÃ²¿L°e‚Õ2¯ËL›øj5J™D(O/”€~æÂ¦òë þ9¾‘çµ(= k`ÌÈsôª§\å#«e‚`R{ %r£JZå"*Óüãã|íüÂ<)‘HhTìyRâ…Ûy]° 0væUF£±ÿêþhKÔ{¯w^ÆpZ‹…C7šm˜]}ÿj"˜Íæd2©åUš ƒÁ`p:6›M£HhÓ9ÚcÕ-¿Ú¢£ãžÏì©ÛSçë÷_w¼keWåöJ¿ß¯W„t×Ý¿ËBü°7œZ œš›\7Ùù¹ÎÖ‡Z=Û˜ ¬Ò¼õ<õÒ´K>UdáoüxY•U9ŸÏÇ+ãýú—<»Ä´V­š«›Û÷ù}Ƽ±þ½úý³î…Ûšf¦¨ÑX ‡aÏ g`Ë@\£m\,QËÊ'V¦]éý×ìO›ÓëÿcýGï/j-@ ³3™Ì‡I|ɲœL& ç»-‹&¯W˜A(9\¢¢Ž­[ôØ"SÌ””“z’]Øa‡‚g¾‰:nÍc…è0§êλõ²,ï¹dÿ˜¿jO—ŸIÕ¢>¯ƒUåN0Á§ø¬üo¥ör¸nƒ 2ËÀVø,‡¸¹ïÑpp]_ïSÿ/$|Yä !÷™ùf†_BŸŠ§Žå¿àÛ׳ø*>ÇÏîá_aîR³¤TþM9ÚUN@qŽw%¦2&~ggÙ•£AÁ!ðq0tÂE{Y(`̓"ɵ$‚D;Û$õö¹üu¿L³QáŠË„bÝ*ÎýXžëITZ0¥YXÊ ³…î~~kä[¯áIb sŽ—‘µ¤²‹EÍ”ÃÉ(XVr$E@ÝG«u‚rSvÒòÝ´KãhâdÍ´µóþŒ/úÞs3ç©=÷ÁUs}^æ¦É]Äõƒ8‚øBIÈYLMœ´‘œ ìK˘ˆàž¦$MÎO,»Ža/kÖsâY¶63ë!¼„£Q\K?qGèþ;„߆gÊï;ñf‘ËžoxôØÏ¸F¨ò3;Ý>üÓ§WmòÐ;‡w‹h7-òy/…ÕE4ÀÔåÜüh×ÖK3Õ(;LÏ‚îï·(z¾u$žÌ”ÙɬaÿuíPëé£"„k ˆ Ô´€;iuò‡^¨¢gu!1¨¶c³’´¹Œ—¶sމ˜“€ZÎxUb€Ù¨Žð`ˆ.3n‘5Иfn̺­]3 žµN³¨‡z‰¬›Ø~(ø$…yZílNþoRë /“<'Q©°PåNØeЈÃÂ{®3°<Ëëa#WYPŒ(Ò2×@‡À›*ßø²ÀxBàøi{ï8ÉÊ*ÿÿ}ï­œsuŽ3Ý“ó 3à iADŒ  ¸²è"®«®»kX®º®Ša °º,†UWD Šä Ì0¹{RçÜ]¡+çº÷~ÿxðZöòû~÷÷üѯ~UwßÔUç<çœOÀY§²f³©ÖöèùhìB¡ ¾1&ço?ÿâZþÀòÞŸõúØ¡Uß]åœsJbÀ`„Úš«vöê³mûÛ6Ü»afÛLz[ºï¾>£høºŠoDÏMì¾…0„¡^^HØ{ÛÞµ¿Zk­XÅ^»(èSz)UR*JÙQÚ¾‘HD¸.ÍÍÍåóyqƒúÆyØ’yÌù¶ŠÆÚívL´'öݺ¯iÓ«nz• ÷Hi‰-Å ðBáååÕÏW÷è{ oð¦AÓfÓÔeS»þýˆ£yÁ쎹5§VsÖ^Ð×·Õ†ö ù“þ®£]v‡]HÍÒy†î†¦i¾³>»ÿÔͧÖ<°æNUBs¤%OÉ”1YãVÕ¨6 Â!vCËX”;â±5c[`d—%êþfOTlÆ]Ûíu[Ý’³4¦s¡«ò§z´Á쥀BKà£/*ÜÈ][Ÿ1v?™LF×õŒ=˜ HIéåE˜Äº¶Â“xp5 IDAT`üt@?ŒÀQøÜWA?Ì@;l/lHP;ì’~ÜÊ_?¡¿óNþãêA¹Îu~>ç¿àZxVóƒ°öm,ëä¯þ†Ï½‡E' CÌÕù9ŒI¬r«¡•É@ÂBÄÌÍfêYêuV‰‰2æªYÌiÒð„Ϋtä 4µ}ø4ÞËîÅg7Ê$ì5~œM<¥%t÷Ьg^ŸCé#s F®‚s–M½ü‹ u(„DÍ8³Y'¯C‡‡l•L•æI:ªXÜä aQ„b¬™ZÆXSÃ,£ùH_hzêÜ OœmÍoøÃ¦‹þéµf3xO±ÊD]F»”'4d F$Ip’Yiùfu¤E=ÄÍÔª¸„r¸5d ygcDœê˜ 8/>7ý½Õg"ñ§®03Ôǹ^Fâ„ÇéRQd´1뎧Fn¼íÆK¦^Ã|ŠU!&ê1"ËvP<Ê"Ž<®î‰®½­C½?úŽ÷¬¾}-r€“¦©ZÇû®H>ryЬ„~‚u2Ú0ËVpf‚hä"–6òª»(c³Qn£X@ ‘(‘ŸfŒ[ê OP3SKMPoãÀ<­ÎÔéÇ_㬓î©<î(+âM{ÈÔØ;Ïz™ÖùvõIf/}08¶ÁG·ç+²œ¨(“‰:›Ø­ñ]X7:(—³0Y"§%>¶@ .WÉÚdk¼ª ¿ÄmShu~³N®©ð Ÿ[-DG¹ö@PcJæÇ*ÏÃU&Ž*xìl/â¯sY-ßÊ“/©ÔÈ ¸)nÞȧYò97FÄ×Íߨ|ê­§Úžló ù Ô¯ØÈ‹ÍnžÕ‹zh04³c&Õ’êÿIãvU¸F‰Ù{¡Px­D"ñÿUÌ0Û‘µ&¬¤_Ä@èd(¾&î|Üù¢æXmmm"/Н" ùA£ 5 dçÛNM$!”Pì+z ‰îÄî¿ÛýRâåKžmcX\r¿BgÄ 0‰mÝOÖ Ü8`äª)#ÌêÈE#ŽŒc噕öÀ ¦‚v»½R©Ÿ¸)c¹çÝÃ×Kš´òþ•Jõ…Ð=í½¿—¿TÖ66Q… »ñŽ2ô™UíËå²14j,qÄÝ è¿Aœ²-ö¤=Û‘õLzěИ󟓖HËH"Y–ƒÁ Ø¬Ñ­}å›3qÙâ:'ómó½éÞ—WdÖC¾‹à; wà  &ðGæ‰G‘)xbPƒG5¾¢ý×!Òy>ôkø-(ðHœC&¾(³¢¼ãß+Ñ¡K7É¿¸ˆS>¸>ø(Üà£:[`Qfü»‚V¢%ËÃIîÐ8šLÕÅœ‰\Š+$’_\Æ”z;vs2·rûÓ®»®måúvZLWF>ÇH¤íÕ#Þ?½M …“uä$Ö*š‚;Å0qYSùßœ¡ºŽb„ÚQúbÉî É ó­`=ó‘'>ûÓ7“{]VÁÚļŠ`±i;¥z ¨(‹r¸4dI$!åœ)âð’Y$"e!DbèÝ£ô$ °ÆAQC>|à½üòu]Œgñ¸É% [ê˜æv _>Úÿù7ì­l«`-c]D Y(»›©dmS3s:°óï®[·×=û¶Ç5dq©­G#Áû/ °¸H`Œî4Új³xÎÐf¶“Ù2Î:&‘«¦isR(â°“+Ñéä=:ÉDj,w’*cMàœ j"<ËŠ)Â)¢>:Jس¸5Xä{uJNR¬&Ly°Ìu¦¯~“>£¢Nc« ÈÔ$žVðÂ:™¿•¸¨Î„Á¿Šs<ÀJ…åÐ¥ð!Ýmð,<% ÿ$ÓRäùy¾¬s fá] K¼mžG5–ÃŽ·×¹MåË0 ÏÔùp…rš…:?ÕYFÜÊWßüʃ¾h€ˆ%>Õb&$ÐBó[8—‹ž‰Ùl¶Wí½öÆ6ÇÒËÓ/ÂÛ Öóùà‰àØÅcù`ÞÈUbR%dDkN|Íår™LÆ@jýÅ%È¡õz}fóŒ{È-ÍHBX½\.÷<Ô3ôÚ¡ ²â. µŽ—_†©ÒËüN¦;søÖÃó«ç×Ý¿î¥Úe²¼F¬%²„âQkÃO7œ¯sodÐSWrœ+ž_!ì;::ÚÚÚÜn·áD%`F° †6ܳarÛdÙ\j²,÷ÿ¤_®ýïö›–h»5¦ù—Yö¤Ý?æŸÛ:'”ˆ ”fã¼p ÛÁ¨ÞŒ±¨pƒ©´Q´Þ0†>“Z bT`Š¢t?Þ=·g®&×^¾ºš‡‚Ga9 Á‡­ Ãnè† :À¯ OçZ8 p1|ZáJC:×À°*üp;ožçá<÷¥øþ&phŒé<[xãÇùÈUÜñ[¾ú÷Þ“[ªôx,2×ÀF¯•q@‹Å*i(é„.8 f• ™™6'v;æIN.2 #:¯…Ÿ'ùd™wÉè*Íú]ƒM·DeÒL:IXå’,^蜦ZûׯÕ>úšYf\Ô"LÓlB Q¡È5CÔ63š ä"?ÊýUúRìhe~/•33Ͳ,ó³xüh£„¬XU”uŒ¬a …¿•™ßrÓYoÏ[okßï=‡5NØFÙJ¥‰ù3¬°Q–Ñ€yšl”ŸgK/#fj)üuLé{5Ï™©¹È 7¹‹¬¢®ºŒÇ½dÒø’'èlefž¦¢N çè3Qw‘?H ¥²þLþê¡íwm Ì–eR­dÌÔ q•ÌJX§‘×Ñêƒý‹ŒèÔ Ý0˜'º³EúÛHf˜„[ UPdî ²,‰žÔy5ü7,ÿ¿ˆ2†üÁ+qa·Çím·_=ž½!»ñ3åªl„ª‚§Ph*ä[òªUí~¤ÛpŠF|K&g¢KÙ(òöRº|ÒA'ÝŸ®›êÁ“Á%L, Ӕɶd{~Û#~¹X,6áb4$ÅŸˆ]¿ˆù¢®N«)Ní™ZóÀšðdØ\4—ù_p£ÒVFb[ÒžÍÏó/ìøõÇg½g{-6‹Óét8ÍÍͲ,§ÓiQî‰ÂÆ¢G×õÐñÐÖ¯m•s²x,¢7{~ñÑ8¼l¬ÅžÆ(ª ýIATh áN"ŠæÆzëåžj¸¸Ø·ØûÛÞÿÇ'©(ŠÇã)•JÕj5“É9~‰ßÛ‹bñæ§1ø|™êªÁ“&ìÐ!˜‡'A…ÇAÑXð Nœ dTÖi†5ðAø7x'\c~ðcüÍW÷ð&3Š[ã*Ý|˜<È»¹óy>šÐO>‘e¤Äo̬³Î.ÍðÃC&Šû¸¾ sÌÂn…[áµ Î-hENLsï<ã5gÃì !ɬŽseŽ‚‹Ÿ.}÷óág6¤Ø1Ë¡,¿\EÓzbáÿyK!\¬ÞrŸþܲ‡òüò4¾ Š©—É‹ó¬êkÔašœÜf&bgO„`'íY:èì!TÁjÂÝÇâ(´4¾œÑ÷±3‹ç)6­,lëØßšÂo¡ºcçè ‘¨`ÝÂóg ÏÐ2F÷ «Ÿa÷Nö]ÎcAÍÌ& ®aây¶Lй’ÓmLK¨?çÒiÚÊØj˜;% Y¡ÞÍX3smL¯ãÄ2†w°9C9ÜA’ëyëõ¯îž }áiª­…Y;Z“r'E*ŠŽ´€ó Ý>ÒðÜÕü&o3‡»se”ô…ƒO¼1•ý‚ñ°Ù§Ø uLÛ9BK’‘,TGéžÆš•%ìs4ç±ö0ê![Çgm7Sàѱ’ðà©3Ðǹ ^ÅÏ¢‰ÙÃÜ7ËݳTš(ø(kÜ[à§½X§ù7ç¹<É“1oEÓ§gN^•:¥6=¸ÆÇÚfR2k¬ô·±§Â$òfÎ2¤Ñ)sgtrÎJôGy§Æ¢ÊCg5ðÓÒÍ ï–˜“Ù!ñq¸b}2k(çTÚSÔt,s|-ˇevÀ·2Ç5V-ÓxHc5Ø õE÷¼Ö?_Æg[xC;£9ÖH‡26ËÍs,¿ùšo¬9öÑcªíè ‡6øŽÁÐ@¨ê­vþ¡ÓTý3ÿß%+ŸÏçr¹ƒø‹H‡Š¯¢ËºuѺdtÁç.8ð±ªIuÄ"ÊìY¡PÞ€~µ@5q‘;ªqk/Ü·ç5s­î®•¤¢išÖ]b¦n\•p¬7¨Ö¶'¯×ëñxÜn·(ÇíŸß~ø“‡_^‘ÝX5mœ¬óQ˜€Ç`Bâ&vi´@?Ü ·À<#‘‚×B^›à Í¼·¾ó¦Rß….M;@¶Æ¾,×ýž@ÏK·ŽKî!iMœ¿¿\š×¶ÿ¡ñ”ÄU&\2ÓUòÛÊ\”§­Æq‰¢Ì[ŠRé^ ©În«º$Ö•¨”YlbMUf„2˜´ÛP¼ûÖ –nZ}l§–“R­Ôôø6ß·WŠÁj…uMXd>×Jÿ³¬Iâ-â›çŽv¶(Ô ød†,¸W1â';ÂÊN¦ZH' X(w2å%g¡=@:NXë²­<Þv,â‚¶F‰Û}ûö"­Æj”11HÈi‹ÆQ£b!î— ç2m{Ú®ÖT@©*r^œœ{ç9÷˜»ê¯Þ6ØñdG¡©°ê¡UÙbà)ãXœÅˆé`Íy¾Æ/U]‰kÑ'ßšO¯LOÍUsc§È\0÷ü¦'z$ÚXu•J%á´dHÍ|}>_(jiiEÑjt4³–Z‘ÒÑÍ3`ÍZ±³°y!|&¼„…jÄhq„%F‚¬U¦ùÃf³‰T*ˆh3L8c9N!õ…>–ðɰ/æSdÅ`ΉǛËå’ɤ¨-jµšQ´éGUս߻ù›ÍU³€Þ<þ©Ç;÷uš4“»9IÆpÈxEäfñn1ü3 r˜\ÏçóŽæE›ªYMõ§¦.š:{ÝÙuw­ëúM—˜¥5Z(ŠÒ8ä["nbh‹´ñ£b±(Þo•?®r¹,h¿]VÃÌÅf³õöövttôôôx<CçðžYÕ\ÜQ¼FºþexWIø4Ôeš¼ÜRD+ôA|]c^ ÏA¼,{†ëlÊ–lø.Grð{âš.ßk×ï<%úû™¦ ì’ŸBó~Ö6K-&Y³üýw02á“¢ð*åp üDã¸Æ‰fqÈduœEà ðÕ(Ö3*ÃÐdnÖÈÁ‘ëóÖ9\d“pˆ|+ÅEÜõÛ°üîk2¸À®/á•Ðd/Êe“ë™PyS3óc䋌»p˜¹NB1¿ˆ=„s§že‹Š­…9…þ ²FÌŽ-ƒw”îºkÓ~馹ó'õl`Èn5ƒ4Òäšx_szLF;Cg»%A8ÊB‚PœEÞ:æ.Æó¸çijgNÂ4EÈE¥ƒi+Ua¯ oâä"vy©‰…fFYv)O®àŒŠâ&&!Æc D-ÔšÉdðõ2RÀ¥¢˜P£Ä€iÚ¼dL¨1"2ÚÑ&†h PXÁY ¹Ù>zìu“•“[3§vf±lö<¿òÈŒ©‰iÙ±èm!æ&#4C—Š1g2ò„‘<2¢X,3™L2™Ìd2"UxË|>¯ªjrE²æ¨µœn1©&MÓb+cªE­¹kM±&#ŽiUdwI’‡;7.ÀášÈ¢œ5îÑ6ˆÀÌ3‰µ‰Äº„oÐ×o¿)g2’ºq@ƒÕ»$]‰Æ© m5¢+E ÑhÆGÕëua‡v~3PPñÂá°Óéôx<ÕjU↲¢(=Ç{6oßý2¼+ $8 7%0ïà2™:¯óF‰ûà¾õ0™Óu•Ã|&‰/ÌoäÍ?á«?J|Þ{!cŸŒìz"ËÎ2%¸…HŸÙ®ÿýtý°þKE;±þV%®‡{áx ì ÄÏ1í ÀS .‰;Ú hΣTØ ÷Áõ0ªqzáa‰Mà“y•ÆD‚v±yºÊÈ€ ÝK­ˆ+ÎOd&M|2›¼ÔÎA3S*eLXÀ1O—JÆ;MDÂVÀi¢ž!ÇÖÍds6ê6ÊU,6ÊàõS6£Äˆ$WÖX^w`Ó½W•Ž_`Ys$vÑ™‰ÇþÕF9üÅw&F¶Çí{¼?ºº‰¼•Š˜*9)¤ñ…hWIxÈ:)LÑn£ÎúQzÃ\:O3\RÀë¡ þ›t›WžlÕïÝ£ÙàˆnÖ縴ŠGgBÇ-sµFYA©2U§t•o´óns6¦c´Ã7! q Ö'øo]1.‘Ù¨cNãƒËÃd5v&¹þ ,+¼ô–Ù\åë A˜‚ŠÊW¡æþÖO0ɼÄ*Â$ìQ9 ¯]’÷Åb¶lPO áj±M¿tüÄÍ'ÖÜ·f±wqüâñmÿµÍ¿à?ôŽCå@¹íé¶ÈþȺ…ºZoÔ¹ñMúd«<»cVQ”¾Ÿ÷•«åÆJÂpŒýß”$)<Þ|ïfSÑôBBÉjÆ’B6W4?…È…Í5¸»‘7ŽXÓÖ5w¯‰mŽM½j*0°ä-þaÿì¶Ù#·Ùö­mÖœÕàî¹FWã¼K^ŽFfYJ´Ô œ!è 8jF«PH“4fe£—+6 ¥RIÄtq›K63;gš5›K/ N&vOt?Þ]Š–^ù¿@Ø7À¿F‘Ü7€y†Jº¸‘­'vM”ýe[ÚÖOµZ­hþÜöºqZÖøÜÎo–Ý?‘×E°Z­©T´ÄóÉ%OCü­Ûíöz½^¯WÈ;ýAúó^‰Âûa³ÆWà£ðKø’Î:Ø -:?Óð$¯á¯O‘ÝH[;>•7浓ô^Bl­ò]Oä¡Û9áȹÔZð3ð˜‚6Ó:n¤k¥vøbèü.Áge|2#à;ô@¼ÞÅŸ(ñ´†¦ñ›2ysIâf–›yü¶ƒ"®3}2k%îŠRÌ­ò §€9~J64;¿k¢·‹Dœ£SÔ$_$>Ïïždû"£qÜAÍ„KØ#Ì®`@&½œ e˜ev¤,™s˜‹AÊAÌ#ô®ç¸ò†Ù¬WÍïëhïøÉΉ+ÏÔ0{È63W/»ûî¸ñwwþnîÍûê˜B$:˜\Éi;¥1º¿ê$½Ctá‘:&ÅE¾Žéy¶QÀ#b£ì¤`ÑJ5Hþ}НæÑa–e£•Š…ê­bv¥!—±­å¤ró§Y ¨(Y<‡Ù,ê³îf5äE5Ìs4E9Üþ”¾ê‡›ÒïûïVf¶205wé7WÈ›íRe,íèy\¼ËÞų³ 8U”Vf¶s`%ek8=A÷v²8׋¼†˜Úk¼Tl5œ ®<ÇZ.P„ x<Ä"̆©Û¹B*lÓF¿ï®©ž¡‘Éòå «ƒ¬qSÑ9!¡ó°ÎZxDg7Ïél€[ø§¬i6$XW%)Ñ¡ð&è5±Bçr…­5™ˆ™H˜,té/qÔ  Z=øe~Zç9›“£~lbrx¡¨p *T5n†ì‡ëaøÿ. ˆO¸{À­äï~ory2±,‘t%÷ݲ¯õL«oÖ·ìÑeÖ¸µù@sr]Ò XŠUè(L¿zºéd“ÈO"Ú "£Øj\ÊŸ¯ÆIÃËOPD4϶fË‘²èŒ½6DôÜ wG£¸i4â•–è½(( |,œØp,8L%S)ò§˜ÞýXwÕ^Ý÷¡}KÒ’,Ëáp¸µµU8FŠe(2üI1ï2?ïÞØèk,ÔÄ~Bƒ¿Œß¯ýq …b±X­VK¥’艉dV,®`ïý“Oê>Ýf³y<ž ¿ß0rÕHçÑÎW¾]0¸\†2Eñ+•J¥R©\.'›ÆlÒšÚl¶¶¹¶lO¶í¹¶WbsÓÈÜjÔ[Rú,ªª c-CºB<=#™o(S*•R©T,›ššŠÅb‰D"™L 8-—ËKØùÍÀIxŒšø¼Ì ™küúà\§` \°]8dúÏok—üŒw>)]ÖÌþ+ùáÙq”ÏNëó—~ç×ßþ‰úÇ™îûŠÿ Ímx>Ë¿>È¿MºÆ ;¨ýDZYã2ŠÎ káÇPZ+¶)™÷iDušj¬Ñ°ç±ê˜%Zt2e‰˜Î²^Ï*¼ÆuüE<:çì4KXª·?T»ûúß©°í`O¿¯›.©v²sܵŽ7ô3£»Ìq7 áVâ.ò§XngºŽ©ƒ³|]Ľ0Ä Ù*Ê"^µ ¾fæ¦KË|ëŸñÚÆ>óÝ<®uýÁ…þO42xÕÙÑæ#ÍRÅšmϺ¬Þ¡zŒË£Ä4ä:¦Õœòëc,M¨Ž9Ah-8ÞÆt„¸@›¨{ÈE‰E‰åp»ÈËh~Òêq"jâÍÌæ°. ïd¾„c‚.7ù,žNmž& µ-<"!"q’u+83D_ Ãã'ǵžãÓ´ŸfÕfíØæÁê©5šeã!ß`{{%æ=ÑÕ5àZ¬GcÓEœ§«€³›±YZwqÈ„ê'$6Bo/“)šd/d_ß `•PóxRÔ|äl¤²„ËoãCAÎNqºÌ:8³ æ¹°ÆIøt:øO—¦X®3 óÎ Í:Å*ŸP‘<âeg) ;d,÷ðÝ2Ó*Þ<·è\\ãç5Êð|ÖWq×¹P%(±ªN>Ëò þ2_Ð8Ûu:tšë¼Wç]P|ÔŒ[ã×pÃ’Ù•Ñ´1@½†ÐŽñ~¡•”ši>øùƒ¾S¾íß>tÝP|u<ïÏã]qï¸÷©/?¥”•¦gšTZ÷Öó-ùŸ>__ùƒ•M§›Ðu‰ç3 8þÜ`Þ“ˆÂâe0ç—eus}aã‚­lóÌy%‘ å:ønDs‘¥„•!œ*,ÛÍfs¡P˜››åH£¤¢(ެcøêaSÉtîíçV|o…{Ê}쟎EE­‹ÖŽÃW·ïo#4^-K °Ûí¢\Q²±,8_o „½‘“ër¹<°ùýþ`0(*qm"úçóùr¹,´eÉ ¢ú¯%;µ IDAT™R’$KÁˆ|ßÁö3í.ÙeÉY¢'¢JU1ÚwFÍ ôŠrS$*ñ›1-3¦8ÀñÆmH½”Áùá)¶9VŒ{ím¼/Qãm”Šh<²81"ßÔj5Ã1Ę|§‹‰$¶%¶|~‹{ܽ÷νkïZ;øöÁè3Q­¬-ö-Ž\5ÒùûNñè‚Á`0ìééñz½C/ô/ B´AÀ%™»Ñ®Wô¯„¬¢ÝnT*«Õ*ªÙ(ž"aˆœaÈè‰oþL6Ìf³Óé´ËöeCËŽßp¼µØê®¸ëÅúùuíù-MÑÓ3v9"©¿èàPü¡x× °b0ôûýG Bzžëyø#÷þ®× !§›Æ·‡Ñ¾6†v…øK Uˆå©1äÀŸFAà Y×uÉ$ͬžYÈ.äGóKüˆE‡³qvu~ºŠÁW —åI€['¯3ÀMvÎC“`ÀÏÁ Ü ­šcŒûÆùÖÇ"d¶hûv*ÇgtI¡ÖÅ«'pîç¶?|ã×A7µã²°²ÌcP’‰è¤à50TbÔÏþ,5˜•™ ÌeVR^5ÊÍ2}eêŒäÙ q´Æ|“:s ²GÅ_&­ñQK ¬ViW©¨·ß×~÷ŠŽ0«f7Ñ;N·Â˜™¯«àiÃÓŠfEM°à¡.ai!Q /ØÎa9u3‡g …œñSô„H÷0bBñ£K"°™Á:”g7ÅÒ]“!þŠýZÝsîôñ‹­%90쎌٭CÝÞE%LbˆåEmL‡HF‰Åˆ¨˜ˆ^Às«ô °8N—­t¨8a;%+U Õ<®& 8)qFYèe:C«—Ì2†}¤C$í”—1¬¢,]$e¡¡š„ƒ¢ŸÔYVØ)÷0–"`qŠŽ~ÎNÒ!£73WÂ'Çb _€ìÑ,¶~&=¨géV©9ÐfhÕo£6F[o'ó«3áž`¹Ë9;Q'®1¢Ó4eÑ£dtâfr}dcXMØ‹œ^W•N­Ö‹OÕ¨¨TJüº‰]5¶LSŒ²ÌM0EöÚØà%¤r¶†S"Y'Tå,´™);‘lÍp«NŽÛø€L¼JB§N'L:¹R¢[¦]c,Äh*a¯ãIÒY!ãfƒNZÃÎÚןæûQtyïÛ5“¹î‘x»‰·k(FºšœœŠ‹¥.ÅÚbæi³ñ™oìVI’4þ¦qÍ¢uìíh9Ô"×äöÇÛÓËÓ=÷Œ_1žïÌ·ío[þÀòæçšÙ-±»J¨!,q™2ÒU¡P0š„1]Û‹•P%|2ÜH}ÑtµDñÈHW_XŒÖÖÜ0å[r:®¦3MÀܦ9¥¦„N„dUöŒ{€è¡¨nÖC#!/.¢³ªª™LFÜŽá-b$$÷à+ )Q‹Ep‘ÒA»µµÕï÷G"AÜjC"V¤(Gn¨Á  Á %CýA×u‡ìÆ‚CÛ†,9‹“ŒÇh€Î×нGqdÃgyɧ\. «Õêp8\.W0ìèèˆF£"õ¾@­•æ«öªÁ/B£vß_,¯ÏOW"9‰Y—±[2Ä…wp©T2p"‚Ÿ`Üõèe£S§F/u¹ † çÖéêüÙ• e(ƒö@8ág¼ïg|qŸÄ;dNÁ½pXàr°C…ÊÅ|^ÅÕnjÖw,"/ªÃOQ ²é[|uŸ¿.…åð$\WæIsVá" »„]AÏÀÊŠ9B°v…÷ÁÕP×ð¦ Ô¹?L›B+tú¹^á;&™ÓcAÞie‹‹¼Ì < %AÑOʤÁÞK¨ËÍEzä:rŽ*Ë5¤µ Œbžf4CQÆ7Os…Z¹›z”Ü/™mœ¨á¨pVA /ËGÐñ…±W°Æ {HŸ 'Bf'³×Õ—U§$GAõäJ¶ŽièâySÉráðBÓ3´¶1-²NïËgi)àŒ²`¡:OÓeΛâ„gi‰icÚD]AµQ,é I79+•*;¥4¾nÆZ™©cªa§kœ®Qzœš™›#p?¯+àœ£9‹GGX¤…j€E7¹Eel>Ò2š‡l'3´úIµ0Ûô7—Uçìû¿ sIõ0ñ*–<®!Vd…´  ғǹ‰“Q²¼²Ý8Æ ÚÑ%ä9fŽÒ«£t³¨rBŽÛ¨ô3 §óùÚªGÜ7ýÆcÛFÔ4¾é?\¢®zFo²ê\“å»i «Ð(ËÔgÙ ,!"0/Ó OÔù Ä­|?Ë‘E6@w˜à,üÞKEæ= P¾ e›òÕH)‰ïÝá¿Iõ±$¼Ê™%[]Ñ  }㳪iZ6šxÏ@aKAˆ8í2£gÕ´·É1ïP-ê©·žªÛê@×£]Coò yúïé÷žñ¾òÁ˜Õjm¤5NÇ*¯pvbRL쥸J¯dPWoX¦—^ƼÄ^³«µ¦Õª¶ªÈçÞznù#âeW*•\.7==N§QˆÆðÉH“nÉàmI­E1 + Ùív»Ý.0î//^e4E¡&ÐqF×.œ ¯;µî̆3©@Êh|5ú¢ï,ÚhâiœÏŽh‘;ºÝn·{½Þ–––ß®ý­¿ÓßÜÜ X¿ooߨ%c’$ 5 »Ýn‚^ªé÷ÿß2Ì–¼¥ë·]sÛ玾ÿhÝñr2ç#|ò0À}ðÐ`%l€c<ù)ý+ÿÆßÿ,p58à¥Þʽ­Üê+[Nóõ7Qü [ç¸ü_¼‰Ä3Ý*%‰y•ƒp-ì„ 85~¨s¡Loƒ˜B2ÌóÜ?¨“7q•™ÓV¬-ÌŽsi_ l+ é\ßBÓÛj.,el Be–‹Q¹Ìr T9gÆÜzýWÑí¥%ç`YgçG*_v!ûH›0k˜[ñžÃ!#{9·ŠÀ"¶ &?© Z¬ŒGˆMЩÑÓÊØ:öyÈô0û<[Z™Éàu‘ïfì+-”ꘒ¯ä©X:ÒtÏ…øà‰Õ£õ+²Ï~gÍ¥Ú.ýëq·2£!Ó%t$t35'!ãt‚uvJ6ÊmLI&-c8‹§)p“{?4Sûÿ| OºÈ[© °¦—‘­ÊãJ¬cò’©b™¦­ƒÉnÆLÔÍ”GI–±õ0'“˜«I’>¶æ­Gß{´ï®>UUÏÝv.t(ÔÖExƒ¼µD7Á@©çOÉð‘\].—×ëu»Ý~¿¿±ú4ø³¯Ð!WÔs¢&kä½YÏZsëszP·¥mKÔ_ùîaIº5nJ̺Ç›Ÿx°ÿÁÑÚè÷&¾W(TÏèûèÿ?‰Çÿ±³g8®%—È‚KÞ3F‘d`jÎ×»ªÕjKÑiÚ×$!åÛòvV½Õƒÿ|°f¯µ=ÝÖûà‹¨lœß ÌÀ¼ Fà,DþE¢¦ßzÌüé ´Òw¸ÙÃá7ت®(¶<‡>$Õùµ1õrà5Ì~ݼ៵ÛÄz(솳=:§t~¿‚ß™y³Æ÷ 3ÊŽ*– 7B«ÎúŒðF7ëc]–#+‹œÉòã A-È©ªD«Æ©_x XÒVy——MÉYî(ç²´Ž2ÇŸ%h"5À;˜ï¢ÙK&ƒ»ê,]sD´(8;I%×ÚÙvFùêmùoÜ{òÕëgl‹L¶±+ðлr¿½IþöwÊŒªd5 ÚJKw½€}îYžÕ™‘Q›Ø™§5‰K¥j¦Å„K¡£ƒ=\dM >$‘–èÖñ«Ü{2,[àn;QÞ I¿†ïô·Í,WéVi†íy²[xÝ£|î>|±öÜ×Õ{ßÂõóÌ/XÛÂoÿµ8ÐyàAïƒÁ³A©¶4¬¢…¢¿¸ò¿Vžºõ”gÚP¨3Q ¹kîæ½Íö¤Ý\4Ÿü«“͇›#ƒ‘ÆÉÐêñeØFÚ¬Á®zâ×Ä<\$-ÑÚ؇%Å¢–zAÿ[Ñv.¤zR¾s>ƒxT©Tòù¼1«7vý/Õ ˆ†ÆÜiÄ2»ÝnsÚf·Ï>ûwÏZ¬—æÒu‰ŽfÍZ½¿÷Juiü†ñÀÑ@àh ±d­0MÓK€úã©¢42 3\ÃSQ DV³ÙlápXL€D=—H$b±X¥R)•J†fc ·\.‹ŸŠ3šÍfC/QÇ Û‰}IÇ@ÇÁ7 .Ý· ¨—ºdŒg”\KàKêÚFgH§Ó©”NÜ¡Ýñ„ù‰Gœ\W½N°¦ÇÕ¼:sÑLÓé¦mñ3°F-‘Ï/öž†"É’êÐxÎoW¢Õ5Ŧ Ü:`ÍZÏ"ˆ´þ¶µ-ýÐѱ«ÆJ——^_¹ñ¥gWvX¹À\ ü`ƒn)VzåÐão) (³g¸cÐÍEãt‹ãljäpÛ)åqq¶1#Œ¦¢ˆlj¡%VÂî!7M›Œ6C[§2Ú™ ¨>÷XϤm[ŽV e‘@*9üNò[À{ЧU.(àd´@w' 3•ñ_´[(°Ô  w.—ë`ßÁÓËO_¹påÍÙ›,²Ùì|f~¦oÆr{'½K$*jã›Í D/ùßÎ™Š·KÑçÞe5r¡ñ3ïôŒ{L%“}ÊŽŠ¤IîQwû¯ÛÛݾùôæÛ.|étå˜à†Ë¥[˜ÉAL\ðnýß~K!5N?GËhêÚ_³*«?ÿHs7àÂ2Ĺ÷)ßß]W.\"Ó,cÕÙg â¥Ç«kx!áXô±ºÄ+Ìàä\ ]GÑY®3y™/¸¹°ÂÑ‹:ƒÞPÆO4.RSiÖ™‘1ÃÁ[lØãL•9®°º…g%ò•Ý…š—Ò“ õVæ+h5ªSôg¨ù(™I›d+ä-Xª8mt‡˜Öˆª‚ú"¶ÑÉLV°Åp†Èª˜bx7p"NTE©ôMú:sðO¹–ìþ?¬½w€de•þÿ¹÷VÎU]ÕÝÕ¹{bÏLOžafÈ Ñ€¨ˆ.ê.FLVpÝ5°â®î¢®(kÃb@QDr’a€É9ôtÎ]]9‡~¼ìµìfÑïïþÕSsëÖ­·ªÎóžsžó<3#çôÇ–`Hrõü—&ÂñÃQuà÷E?üÎ5éRš`€Œ“òK„b’†(Ó´—pÎÑ(r¬åœTÐ@J´SÕPÂÄC¤ÚO”Ñ}ä@ÒP¬Ôœ”óx”çhô“QÐú8l w3’ÅßDÌMa ‡J8â¸#¤Ht3&®a©akc²…i CÆègiÍÌü‰a²æ ¤¬³SieJÙ±šºÂ‡^Øž/ß+ØÛ©Q|dTOÑ:EÓ0íNôùAÞeCÊáˆ÷Â,;r¬÷P­áˆ3;E´ÆTÃŽKÅWBvRÉQJþý³ò;ï ’S÷ì°­‹ûÎ>–N¯±}ô‡ú­ß|æŸâ±€ƒ%Ç« û¸¹€»J4Ï ¤‰˜w•– YkœŒùœã \ 7)Ñ!á”Xkç9©<­“vò2«Tb2=ð@.Ѹ-Ï•¿<Ë ,?ƒ«ØñF®ý­àƒ~øôÖ» Ç÷ÅÇþc¬ÜRžÛ0×Ôßdö®N^yRuªÏvˆßjÓ@Óø¹ãñ•q{ÎnÏØE=ª^ófxý05"/EÌù'3Þ™$!`Fd®j³špUŸ¨™Z…&ƒY„¡yDµ‘7Œøû§ó(ì"3›‡  ÛZ¯5¤e>n·Û[Þ´wiiiΛ+” GÞv$˜ f[³³Ëg}“¾c׫´U–?°|¡p»©7QÙúw*òñG=çÂ\Ézô2%9ÌYàT*%„*L»g“YO¼—åDq“¢3ÄÎÀ¼mÓk8Ñ•Èú²žaOýÍÏ#¿˜«Y7>­)¢ÈWD£ÔjµNG§»‹Ý}Ã}rMÏ…r<”›Ìl;xlͱdWrÕ/W™>¦ã°9 gšY‹•õÌ…äy»œzøŸ·1WÞü×ç¸îYw±¹¨×tKÞbž)Ëò²"ÞÙ]þîc}-[«H«9ÔÁØ6†Hj(S´T±µ1aNLw3¬ `¹Ž,ˆ E\Ë9ÑHÌFõË[˜£cšè‘(ÓqÂFO+“Í̈Fš5ç$ˉY©q=ÃE­L†I+hsD’„&i “ΆŒ>È¢¥ôÐe -cÐK˜¢¥Ÿ¥)‚,§=Nx”®EŒÆÎ=¹"p`qez)–".ËÝ;Ù6ƒ·—áÅL$°NÒb™i´‹ŽYf⬮"!竊x3hnö4BUBJ±ÜÀªãOQÑ¸ÆøÑ¿Å×ë÷|´¸ú”ûKŸ_TåkVZˆ—”±øU^P$–7ÒÎ"‘sö2ÿg±Ìq®­q™Æ¤Ä5%ž-2©à4¸Ë`²€e‚ŒD/,S8WF‡¥2‰FƒãP…æÓÙ èW`lTøŒDž¯™‘5ðw‚hðؼR.—[ÿÔêó¾ö°xðèÕGû¯ìwÏýÙÊV°õ<Ùãó\8òòg^ž×®?³¨¶9{kÖúþZãÇÓrø‰ Š‘ àÄ '|#¾èsÑú3…jÆk žÖ[| KxA+!õ´½Ÿ³^9Kñ+^÷`µ§º¬¶ÌQtlxxC÷®nÿ¸ÿÈuG’[“Ë]¾PÔçÿQªCÔ`‡B`˜X„X,V(2™L6›]1‘Š›°dâ„ÈPEžašÓëºîp8@SSSsss$ ƒâ‰f¢9pþ€mÚVûËcž!ˆXjAÜ0UQêGwçÉôU«U±Ô‚~2<<\9QYôÒ¢Ý=»ŸØþ„û˜{ɃKþ†Îåë1åZøÑˆûƒwçýÌ­™Ë,Ê(e¥^øxaÌr‹áEÆ·7ñ­ÜöI¾çßbÜre.s«„[Á«2o±>ùÞš=ÍŽ¼»‘ÜRž2tã_e×jï»1û“ò†l4˜…ïæùwøF‘ÂfhSy!‡M¦MgS;àÓ5*`©R‘pYº¸WæS>¥“©p¯BEã0¼[âqƒ _ª1—ÉiÏâIñpšt€&FÅrÈÕM}¤·ý/¯Å]“XGqº0ºHw1;Å-!îžÄo7èò’k!>G`ïfN*(ð¦Én&Ó´ 1$ }˜Ö.&òøçh[ɨŸ|˜Ò~Ö]Às–½Ý‘ø¦>åàtW¥8d„9ïã‰ß,ïöÍyisN6ÈçsDÚ˜(âcUM̶05MTGÞÃÆ¥ô÷04EKš€ŒžÁo µ2¹ž}³4•qŒÒ¹„SFÛ$­ìn ‚ an„®NFã„C$_á,+µIù^ j#±4Á6fwÓ™Á?M´†ÕJ­ƒ±2Ž þîsNJëØ_ÅÖLª±¾I'% ªmjff†fûEúøómŸøLcÆc ]Às'YVÆ;Hè öÏÐ*#KT11KÔ \ Qc[ÜÌXѦ°Ûö³>Åùv”~^ðâbk0 IDATîeªŸÖ6ÞûÒO.È¿÷J‰Ë­8Ô_»å=–gã 5vZù„ÜëÁSÀ ª[#h¡ÃÍñ8$|HüÄ—t:4ìBÍXf™¶ó +–bÜdü/;éýe…© ⾪ª‘]MÕ½ãRUúßпþÖõŽ~G‰’an·Ûb±xrÏOÓ`“êRw|nǹwœë²¹þÌ Î-ó„Ý^«Ó_ʼnР]WôSï<<lx¥¡žŸmf]ÿ狊:’ØÅ›‰ã¼ª ¨5x.ºÔávøŠ¾;6Ýqãc7fÈx'½–K`(°á± î˜7Â!lw®¡¡AŒ¬žv€ì´âôõé]½ð Ù–K$"ÇT‚R©$^Bü³V« {L§ÓùZ‹àr¹|>ßÚµk@2™Ìår{öì»—o~YR¥àñ p®oDÍËTDRb¾ S+Dô MœÅd]×Ëårû+íÇÞzl¿}ë`«¦iÕbµg §ñöQ;â{%˜)õeUÁƒ¯'°ümÿÓ™º^ø¯ØT´-öŒ]Gÿ«˜eø‘[ª_÷ã×·I‹Vتq z >kc±—¤¯ñ'*ïãd‘™Gù·_pe™É¨N?œbÜ0òGá7p;|ÛÆgŠ< Û,ì68KcœSå{A^¨qW|.‚§ þ]Â’C1¸ÐÆGªlÐÑ®”©êmesž1hLÝ‚íezö!©Øy)CCñ™ŽYþðO“ã-ÒÿgF ¢:ŸP¸%º‹"Ü6K£B°”›“U\ý4oã°“Òóœ})ÏDèòb7ì̾ô–dM½)ººyÚIÇN¶µðÈ2'h¦ã(«VŒžÐmmúùÏ2ÓЙßÊN=™uÍeû™¤YÈF¬æ‡ü6væñT°w06G䞸„±Ì)Z¯“D+1™¸•—ò8 ÔJ˜dªLµO'ùîvÆ[˜:›C^¦7±;ÈÌ…fBK˜vQtw‘™¢{o/âZƉŽîV´Ñgß÷hä'oÊã9‡ýVôE J*–l3|d×pÐO¦‰0q e‚¶Ve1±ÛÏR „3Dòv¸(¾ÄÖqÚ4ôrð‘•0DçI8ù¶3¾½æ*Ø=äË8D†"© µ3ž&$¸(Z©E˜sQ\ÉÑS,ie²“QYy#{º.àž¥IøF–qøÉaÕVµ0¤ #‹ïKi°`¯a=²$+œ4Ɖ¶Qœä¥4Fš34ö0•$]¢¥ }„Ð ‰‰4ÃÍ$'ñÑ~Œž 7buQkg:.z­¾7ÿø#+×Ä*'T+óKÃU¢+-h¯HDt‡¸{ —i‡“–6Þ›à~eYƒ+V¸tFân…LA-Îsc„#ø‹«1„YèU¸P"¯§`\eï>¸V" WÀÑ2ߥ’ À¿ÃoÀsðB!Þëý‹}_o&uNJ–eÝ¢}ïÑØe1#bÔ‚µj š^‘ž½xV4ä].—˜õƒ×4'%%»4𦊭ò7Ç1£*þª'NmšÊ6f•’Òùxçë¬ÿ ›g&)6ûBîÖ¬2Íó`¬Ÿ„-‹ù|~—m—7åuÅ]…B¡ÞîÄLXEÛÃTP­ïvˆCU˜³À¢ä(± "ÝFÀ¢w%¨fcéÿ¯£R©x<žl6›Éd …Â<,Ÿ7Ÿ$zc¦ë‡Ù2zuàÓª¤‹¬×4½Œ]K·¤Å>À©¿ÈÂæÂŬï$™w"øõ€ Eóìõ›¾æ7ðì©lwvðªÁ3fWËÇùæxþ,žîä™nªÇe~õ¿p×Ýú Xk@½3|– .¦\Ò?W02#‹¹ü׬Pø>zñÞ<Ÿ„ JŸVYW£åe•ßÁ?Âð+X  TX!á‡oÁ»$vÈܪQ„o¬¦z€èd —yHÎ2èP”(ƒ6éÄË身œ½ý¼õ ¾cº”½ënë %(61•#Ó†`3jU’EÅê ¸š£“´4"OòB†¬ ‘O ©Œ5áëcð«tô6¦Gè± ¦p®eÿm³4µ2¹ˆA?™ºâoý·Åÿòƒv^c³›ÙUÀí¤”" m£ =È¢¦’„,¨ÍÌH2úRú›˜-à¶SI´S‰2aÎGVœÃ+,êݬÔ2øC$SK8WsÈ‚j£*2ªvÆÃÄeô)Z’„¬Ô*Ø1˜ AAKБۘ8ª&f#Ìe𧆈í¤ï<ö«XDëyÎOØÈži¢k90Àâ8aßЗ~¾ìË×NÐÖÅˆÈ u$…ÚJަ BŒj(êq*M$ï`±“•~Ú2”»•u†ÆùC+Ö’}”ó „|ddôÙ¯ýB¹õ¶Î2F™ƒC ‹BMãSeŒRáš"1‰h‰r™ÅŒuXÊ$â(Y¾eð2’Ä![† ÷U¸Ö†ùVšï—X¯óÓŸÖ˜Ò°¸Q|&fðŒ—+\®ñÀb<Ët~}°ÃÂÍ*2|‘û’¤WÂ+à§Q¾y€orÞiì±Ċ„¤IÝìV¦ï¨WÔ—’ë’Ç>}¬iSt<ªišPÇ‘ey÷ßï>ï;ç¹÷¿ºÝãþæGšCý!þzb°r0ƒ¯Ø ŠókeB]TlíçVÍͽuÎ=ãî|¢óÀÇ4îklÜ×øÿKøR~õU»…Œüƒ´ÙÊÃ弚ÒæfeOÄzÁ¶0ë`õæ“õÑÓéú® —›ä@³ág¡™ ÔƒÈKŽZ A91ó-Sß¶R©Äãñæææþþþp8lº¥3[f<“Ï„gÞ¤s=)ôµ“Û"rÙ×:mrÕ¤3ë …Î »±ðµê9œ ?£×JÎDb$ª¦ù|ÞüˆëžÄꉵ:™º®ë6}àâå,7{œªªŽ­+„ m¿k½w”Ñ3ÀÕPŽ÷gIw— vèì‡+¸òïyæ.ÈÀcgÅñ¡4Ðá¢P1bÿ@Ó~žúŽüØ%җߪåpk‰‹a0Ë=:%ØRãöWYø’D|Xá­9Ci P¹ÕÂMeƒ7© ‚ ÿuŒë C¡Yç¸Æ\]&'3®áªñX­œÕ@!ާö«7­ýãìõkß½Ãú_ªß¾Õ`¦ÂôK"(2.Ϋà¥A'9Àx€¡q°²uŒ™¤Ÿ–I6Uˆ$[cc#ÇUVÉLË(#t…HN" ºA#3»9·‰ff„_F÷ÁßÿË›¯¼ÑÁ¸‚ezƒctLÒÚÊd/Ç­Ô´Á0ñff¤{²SÙͦG¹b;Op‡H&hhf&L¼“Ñi¢ARæ’„H4(à§}Š¥Q:#ÌIÒÙÎxœp7Ã#t ¦V7…6&$ŒÞ ö$!¡x)OŒÒÙÌL³‚ô¡¡¬æØ~Ö$hhcÂMáˤ[˜ò‘UІèIа’£CôÌ® ìëö0=Jg ë,‡ºˆeð·1±“e*k9¨Q› ç`ÍY–"=Ž]ÁSÅ(aÓqì¥EGVq´qužÅ-YúCLÁ 6áŠ÷–iˆ²mWöYÆjì°òéÏxz„_«|± ãì5èµá©±'E_žË ~§âRø¼Œ£Æ~Kt…ð–¹EÇw¦¸@'®•9²>#±·Ì]*gATá&¸Æ„³Fù±Ä)TU¶‚†4î‚ÛémáaÕ?@Ug;®+¸çnùˆ<¢Ôÿ¸›_inžlŒ‡Âö„½~¾2p$ÐòX‹­Çf±š„®’\Jt$6žÚ˜µdß48vÁØ–»¶('þ&œ9evàE±ë´ŸzÏY–§ÎŸrÆg=xÖŽ¯ì¶KíO·çü¹K‹ª^ULw¹L-±y7ÛWf•lž´„ $ ÂÄ]Õjµ±Ž±¸3¾õù­Â1K\A¼´ ?æˆU½nÈ™‹¢~¿ßÔ^2¹¦n¬8ÇìÇÌ«:šÚ² íçM‰?“ó]ëuSØû æzµZM§ÓÕj5ÊYÒKÞ‚ô\aQXßf3ù#&ÜŠº™{4çy¶  ¡‚¥jqš¤½Nîƒx9³s¶p>áõ´$ëAÝ̶ëGë½45´lKÖ7æ30$IB&Ù—L÷¤»ïëVÊÊÆ[6òá3ÀUÕÁDà)„kàEx€˜Ÿ#í¬lVŽ~J¡©Æ“–ÞϪ—ÿëÂðGžzHéûªh ;Œ|\å%‰ó5ÞÀg Ï«l€—à:ÍQ9¢YþÛÂ{Uîƒ{T–)ü O™OרÁG*8\tFHÆi/ðßU.‘ØÙˆfaÑ4wk(E¢EžÓxˆLOM´Zþý ûƒm3kóFYçd©(s¼eÓ,–9ýQ‚.–‡ðUèŠau“qSqÓ§ùÁ^榑Âưq½À–圪b­Rñ’–ÑwpžêZ¼ÄVAR8‹W‚SÎà´]!’e"×qQìdt–&ù Z—³3‚z„US´¬gß/¹ff®ççBjOÈ5+á<ª(ÓY³ž}­L–pîac„¹,¾ Ò –,aº•Iy ª˜£™–½=Å’åœd‘—\ŒÆ$¡­¼t€µAR{Ù°•—‚¤N²Ì@rSXϾÝl ’±RsR*à.àö‘uQœ¡9HÊC²€^ÄwÉÚo<{ â¤TÄÖËÑýtn$hgpšueK‰Ÿ œ!6MFGm¦k–ƒ¬qºl¨ /h´)ª´—±z™J3cY…­xtŽø±—Ká~k3Ñ!¼2’†¦òbŒýv®Ñ™4°ÀE2ÍŸÔÙ¡R3¨Øx¥•à÷x¹9C¯ƒm,=äIC^‘éšå¢ÂIìE.ѸÞ qøØ®ò8|Zã2ƒÅ2Z "ð´ÄãðއÃOY ÜdåÉ¿„ÝÂUð;Ø(}t‡ñû!Ëx0HÓ\}ˆ¬(}÷öY,–l6[ÔÿBšO®Éž1O¾3ŸÒRzâÕøÌÏl¹{ 0µuJWôíŸÜn³ÙŠ–b½4N}”œ'©0¯ë.*fpî½bîÇ´6¯+õ¸¢ÚUI“œ ç…»0ßš¯ŽÏJ—$Éív‹³ˆ¤"k4ñ´ÒS§Ý›ùB¨^–e»fåBvÕž.¥![Há P4ïV@£)¸PdOâ‡éìr¹„’)bâÁ¼PnóL} qÍzØ0‹“§}ƒ¦®R­V;zôh}“N§+Ίª¨ö”}›¢¯EK1EåM>Å<0‡y…ˆ†¡"]˜‡™Dóqa&Dͽ~“1OTeÞš2 ¯‡+3/ü³™–®år9qº_Ü6Øõ³.Aj·¥lg*JtK|Zç›plP‚¯@?x¸uߺE{ËM°*jòýŒt²a)iþ¸ÊŠâ%WzõY’Ä3>ƒQ™«t>%qŸÌ¥>´"Q;ÿ“åìIAn5Ø)óÏ1°+ü,̉$ÝY~gÐ"³^e2ŽÛJ&Ê—æÈ\:C¹•¬…/iAØZ5Í\A„Qñ.^UJÔuífB&¼9LåóÍk^5íQÄ¢å¥üÐC-/·8bŽúE½°ì<ù"S¾Äž0G­ÍîÝÐuCM'›ÌiMÓ¤²”Z’²'ìJJ; •M/´ú—³Z­§µqY˜›*")c^«Î@ݬ-0?øÙƒëþs™VjšfTŒäÊäìy³ácáÄ»o^ýšªeYxX-¼€<O=‹ãvÎ: ÓðC Ÿç©·á°ó‡w3½jÐo‡ …ká˰AçB 5Σw'8\Áš%£3nð#x FjLé‚ÜðûMÆ›ŸM¯ž+Î.µÎ^›´ÅÅÓV1ÃÄó¼'N¬‹Œ“j•eçáòÔ ÔÁó‘4К°,§?Â\ «Še€Ö"®$YœX«bÍá­am¡i Ùr°´çþ¯wLÕ®ü̹]³%e j×qzË8¢L‹4«€»†¯‰*¶ÖKyb)ý!’ÒctìgÝÓlOŠ0'ü;ÄSÄl²˜ ŠÑøgpêÈ‚F˜Çã#ë#[Ã:Lw k„¹Iñ*CôœdY’P gw˜øj5‹0§ ÷òî)Z‚¤Y1ÊôÖÎÒ”&',ÌDz9¾½oæá ´M^0°hGs[m¦†ÃCõ%¶61[Åá¥f¥¶š¹Nò!6Z©dÍËl ’vB³¶Òž`uÊ…<­‚:SOwÞÅ/HÔj ÍÁ ž³ü¾™7¿ÆÕ@¯D_ž[=xšpزDe\eªfú˜uñ÷9öÀuTƒÿ–)Lx:逕ÖIB«Ž²˜%QzjÔª|n²ði O™b g•Ûk B?¬Ô™Z˶2/Àç Guî·òI…ó î‚Âϵw—Wü@ºÎnø#8¡àAøÐ\qš=© zÕ›ý˜ŠG™Å3¹r®P( …|>¿ìöe'Þybù¯—Ï›>©W‡øÛý¿ÐÇø3 IDAT‡Ýn¯—•[¸e»fó‰&}n!cP×ué„T´Ë åÙͳͻš}#¾J RñŸiËï÷ûC¡ßï7-çë'—ëz{CÓ·BQ”½gï}ñÒ?±ïÛâÛ¢€?­P‚¸Â<å¡Ó²´­V«’ "ÐH8·´´´µµE£Ñ`0èñxÌ2陓6¡tîõzEÞö×:nT*Õª¦{Ò '^ÿÔm½ûŒ)ZXŸúô¡SWŸ:ù®“æhšæsWÕR¨T/€b^m᪠äúmÐÂã´‰—pøTeaUöÌÇÉ÷ž\ö“ù GÜÑûý^¥¤cî¹3Ï]ëá·°F¢)è!Üûem¤¯…·ÿ‰ß¼Sb’¹o“Ï3ò^Ê%¸Mæ>.•ÿ‚7CÁ ~¢óÑ"Ý *Þ<¸Óà˰ÎÒHË8Sø¬Ä…ÐÛ†uлܩfÆÒ,3¶ÒÙBl€u j2SLæ°ãpN‚ïk8<úiÑŒáÏhwmå›”ß,]w—Ĭ… '3yvÛèÖ9r˜lfV!q˜–Ž¡&b\ÇY|Œ¦fÚHºéÎãéfh ýRòƆ†¯£2Mtï?9ïÍ•½M¥ìRö>ÎeMÌêÈB¦VGNÐÐÏRA^OÐPÄq”•+9j =ÈÛ6³ËO&‡·—ã»Ù”&ÐÄl’˜Ð²QuS˜#RÁ¾Œ“íŒÍÐ<£•ÉÙ³õ}žU*å§Ù¾ž}Ê+8VÁ¾Ÿu팷2©¡9Œ8áÎΆACÂðÏâ¥s;OdMT’ŠåK.æ©g¸¨~èžÌž‹²{¯+3å#»žÏqA„™9"6’IZ޳uŠ€Ô0Ê „w±¹™Ñá+ßÊ¡ý¬;Ä úuì}y™Ë‰ì üäÍÚÏÝ÷kv_×ÍŸ) Îüè?Kž9.¿=É ÞeL 2Qd:Ïnh…ïÀ'Y£)Ž]£M ×)Uz–1×Ïš"ŽÃ‚·û0J)Ô~\£ ßÖIA·„]çU®Sø¾ÎÅð9¸F ‚‡ ªØà]àÉÀZã p_ ;3ܯÛªÚ¤dóð.ø´Â$øá³Ößž[{¬ùu¯˜1wË?oyé+/mýôV±÷ô{*ΊwÒûZ|Œê­ëqD 1ÔétŠÁLJÌzšiù*’›ÍV_zòz½¢xe/Ú}ðЖ/oT§Úû³^kÞZOú¨·4‡fD‘P\y¡\áiÉ âRÛnÇÇîøØ¦¾M.·KðLä0{Wâ-˜(kòý꓌ú‰Ù·3»ýÏD`®a="Šî‹°Úª—·Ë.Òµh4êñxfffŠÅb¡P8mJa®ªxfLUÕŸÛyîWÎ}-õ‡ymÂ3ðšGnqîüëÎ/l)<ñŸO¬¸EèT(Ñ’8xÓÁE÷.²¿bÏjÙ…ƒnÿ'=çÌ:o$ü´jõ].³­e~€R=Öv»Ý²,Çb1Ã0|yßYwœµÿcû/þ—‹ù‡3Á•æàl¨q>ä`;„a\Oí~ŒSlêá‰h-÷>™ïñõÇtFáWð;G%VH|ÝàŸ ] -:_RèPùFšKý´X8®òU‰>X¡2Ãíða?Ü5ÃÕ.VµÒ2Å‹SXZˆÆðNQ+#—‰G°Ç '(Ó,±_¡g@c»…|4^Hv¿”å‰lmëG-ï»3òM:Q™£4½‡<Âñ9rÃ,_Âä1,v äûYº•“1<$}Œã#i^^ÌÊ© ¶9\*= |PcQ„9;ùæÍEŽ…{Ó´9"ý,]Ή$!½D‚†-¼¼ƒs\û8œÁ_Ä–C¹„]ж±3M M@€M A²ÐP‘½ŒC¦[FB‚-L­á`û-Q¦eôqÚ½ä ¤Î$¡—ÙÒÍp/Ǥ{9®#§Ú¨ÞÏ;6²§—ãÊ ‹„uV³ÍÌÄhô_Á±$¡îÞ­¼4F‡ÀÎE {í c«úÊ üdH<Àeoá™ßc ±¯‡shi¼^epøÉÔ°Æhnf&A`„™4.•Tûú9¯Äo .ð!§ËGzZº¬O_~Α|<èeéM·Ùó›ª8*'!ʧªDã4@'|®JcŒI°(¬“8ä‘4Í*:–“”Û¥O!íãÉ2­Yî<âÎi~Ÿmð®7ËtBÈÏ÷Kܯr£ÂceúàN•}P–ù{‰•:aƒsàÇOOã7h†Aöïã÷x?Z.ýðÙJ"ß’¹nÔIÕôs(\×þy¯*ÏmœóœôØ3¯™rþ±•­Õ@5³(ã<î­  ·l0œÆiGA=O=\-”Ç®h¢w-ƉêÏÕ›…„½úçZ­ÖÞûzWüzPõVG/õù÷5šp%˲Çãy†°¬pR,Óét:/tïGUUEÂ'I’»Õ]õWý3~%§TÊ IT/ÍúÛ<¹ QEè¸PlIx¼èÄ(qTáC:q‰l›ÎM2Î<:™A©À̓8à 'g±ëœ0ÌÌP’‡ó * ë]L•yÖ¨ìÄÝA¨ÊÙÆeOë?¸%¸â?Ǩ)8ÜX%Æv²Ú†/Ba {Œ\”xÃ3G©h4ÅñX¨XðÉèíìëd±› Ute )JLÆn Žâ»ˆÝ5¬Y\Oßþ§+¯»N"á%7F‡¬P¡íb$E°•ÉYšrx=䋸¤%üç±/g'¼Éè!’ $FèŠ0'€gÇX¬ §wÇòåñ×Äé"®4V&ÇiÏâ ’RЦhé ¼„SÒ“´Ö°ŠÎY33oæá"®8á9":²àß§ŽÐU¹„SÒ8í›Ù%aL9Y‚†é|gòˆ¿)úÒâ8¡Ff Xx—s$L³†í|Ôƒ\4‡=B }1NJY,jK9|ˆi…¶ &%BUƒ÷éàç_«ÈNJ.²V¢Slñœ¸X~ƒ¿À4Ëll¡2 Ï©ä&Ùkç‚"Ysrm†½àv±L§¤rKŠ!™)‰•ßNÒåfc‰ñ2á]¾ª+²5F§DTâ8à 2eG’4*,6¸-‹ §Y!°è¼*251ðÁƒ´Ã×à‹<þÕ´=Çœ|óCó:߀ëaœ3ï—”X•’†"û"]è’s²¦iB[a^hkÚßtòÚ“«>¿Jü¶MH«Gó¶á¢õ*«JÓDÇ]Ø0¨E1\Uߢ˜§§'"²ÈjÖÚñ¿;®T•yCWf÷Ëçó+V‹EMÓr¹œˆJ•Iqº)nN¯yjMšôñãÇEEËŠ~›Uë'xêç‘Ͳ˜ˆwõ“Ifí´Þoɼ¦a™LÆlç˜bµõåÊzh7 ÃápgŠ7ûZòõ$Q‡œ½`¶}gûgø!Ü ™ÛªDàÇ2=2þ(»ÓDK|n,2­±:Æ?Wñ'ø¤A§Á‹³ôÊ´©|½‰«| ÌóU¶\VC*ñ›R8ö,ÑyC#^ïd³×ÂÙ5*Úu{‡W/¾ûŠa5ÜMv˜°Á~¡.J²çñ' %ƒ¿™ %DrˆÙ0ñ ìuRz’K ¸Ïçù6&–ÒŸÁ' xÈw1â¤ÔÁ˜§]Å ]ÂùGÞÐÇá(ÓUl>²ûXï¢&î#ë!£q’Ö,¾6&Örà0}E\eNJ6ª»Ù´”þ#¬ZÉQÅ=lìåøï¹ÒG¶‹‘"®Ãljãg$sx×r°ƒ€ŒŠÝM&‹k(8Ç/áÜÎË#DöaoD/♦ÝGäÿ#í¼ãä*¯»ÿ½ezŸÝÙÞµZ­zG‰"Šà‚1„7N°c\cÀŽc;NÜbb¿î•¸aìØ¸Œ©¦ ¨÷²Ò6mÝÙÙéýν÷ýãQ®'»‚Ï{ÿàƒ¤Ù™gž{÷œçœó+mÐÉìºÄúÈË”¤÷3o @Òh´ñ‘©6î*c«£ÐCò† Ü*Ÿ–ZÝêG>Ûu×{§©O°q”÷¸øaI¨âÍPÑù7ø½ÄGºQ稳Q,0™«’ÒØ Á^“oIƒþb&½adÖÌñ4|=Çá¿TøÁ¸É&H@˜6vVù Ì:/Ãn‰jWGÉÀÕÙ?½hN~:á2ø>ü®Õ»cj|½F¾aÖå;çÔ¼zìžcë¾¶N„6¡ì`Å)Ö¿ãk;2™Ì¹çFV\q÷¯_¬£÷«åE³J¨×•XÀ »(‡Ã±ÿï÷¯ý—µî)w•ªÕ×’N"! Ü5Éh1«ƒ$âšHVÖ±ôÅßëN=Þü»I¾ x³Éç°½ÓXòouóöü@ÚÏ–¯£ï†ûà!•Ž ¿ƒ_Ã>GT–U-3¬³þÕÉòNÞu’Æ,^7?j$‘b}ŠŸ¯ 0 nžd>_á+¾åÙ£È*ïƒ?l+Ó£Ò«ñe“#Ýv®Óqh¸NÐè S6©&ɘ;~"]4Ÿ¿ûO É‹¹šsAL‰ƒ/rƒ‡wÛ9k'PGÑÄ¡ãP©Ná®Ç^ÁP©n`ð,fŽÖy¤“Tsœ{™‹6p,HªŒÚIRÅ´SuQtßsÇ‘Ç?~ÍñèáØµE\rC/C›Ùï¦Çã!_Eme*D²‰6&;Ëâ›#â'ÓL´ŒCT?ÀNž°¡íeKTÔ†û8ÅŠ]\ÞÍ膅 È4-a2Fu€~!uá ì¦p?ˆÒ¼‡­ë9œÁ_O¼„S°<äû1¼äЏdŒ‹y%FƒJuœZœúNÆ”‡Y"cØ©xÉ]ßìT*Ø÷+ëNÔ9cÛÇX½‚Q•ª‡BtšPû$]a´AB­¨K>ŲîŒ50²õ~˜¦”ã¶1þÕÅ7Ρù1ÊTÊÌI¼É™y"ÿáIøì?ú2Z¶…éë‡ùþ~HÊl•ð‚O›®Ø>òÙ1Æ‹ô,c¶À÷óLèœl¤;ANåýe>¥p›Â?Ü‘ã')tH©$á;&?–ðØøGs:Ñ*-w626OK•Ü<[àLÀ‡a‡É×$ð‰ÛM¾wÃ[á“{4NCn4¹q†’L³D¤Òþv~õnÖØ $QobNs#ÜpÁßOï”7ß–_ (‡Êš[Ûu×.Ãn`²þ7ë[~ׂ›4‹úcI i‹È)XDŒì¯ÑžZ¬Èn¡ÄÿìþçÝ¿µÑ™uVœç¢ßï·Ùlõõõ.—«««Ëãñ„B!1ÀH§ÓÉdRÌ®4Ms»ÝÐ!Ü7¬þ’Åû±âš¬É›Üôò_¿¼é‡›D_ÐÏ\ Ù¨µC¬=»Ýn¡(2–%{!DÐ-U±XŒÇã~’ËåæççK¥R2™‚~Åb1‹Õ¶Ýj—dU«Vï±V.¤Ö ò‚ ƒ’¿dÏÙeC*« øz„èdYƒ¹\®Z­zç¼»¿¿{ë§¶Ú3vKMÊDXGœî»6ÇK±'µz]'"ZŽ¢•œ¨¨¬çS”Ú´d±hm˱ö°µà)­(•‘kF¤œÔù‡ÎÅêò¯Å»*s?¦yDi~§ẏž…MWv°ÝÃû~Ê+>°œïÍñ«Oa˜˜m2!“zƒaJx$Þd"lK~íXRÅ®±1Îo‹œ’ÈélL1Zä‰J‚Œï<š¼A¢ nÍsÀFF&ÑÂYSø´:/šÁŒÉÅvÔ0{+(÷{©+4xÐsÙ©ÂæÍîtódGßa»mž°êHŒÑr’ﺹ¹‡Êè«ÈŸÃßɼ›bˆÒ +|„”ò؈d&I–ÁAoSj_û0½íLÏSU—YÌuϺ[ÛOù‹¸@²Qm!ªR­c^H˜KPÄUEÒ²œÓgéSÐ ”zâ3451›"TÄ墣ÑA9‹=‡Y$=MË4­ÇYSG¢ASGzHa’ ™È2† (:Ê,MJ¯JÓ´ê¨2¦‚£¡ˆ;LÒEI‚N Lä¾8‘«yz’v#M@ ›‰,¡L䙈mæ ?pßñåŒô2ZÅv‚ÞÃôºÑ½²ØÂë)¥ñu0QA£pŽÎö >Ö:Yçä‡E–]‚SÇ¡4==<âTÍÉ•Ê Ã†Ã4ëh£/MÒíãî7XfÒiòˆ“é*/éæåUÜÝì>Ç3°3Éaƒ¯æi‚ÆVÖ&±óbMy”<K”%ž¨òá&uÿÙÄl•FQ&$Èq§A„6Ø v™wyo!ƒ¯ÊØÞaà‡L¤_ž<ov8 ¹ÐœôW~ÿ †"<Ô _…ý¦}%õýì¾¶–wõòË/‹3`¦'ãL: çù¸1£ë¢ÑK¢ÓOoýüÖžG{ºŸèvŽ;µ²¶xzañ®,±p+òŠ&ÞÅjéà ¢¿h^ÕÖ%¢3#qÙSžÝ4›jIUœ•º}ufÉS7AT²ÙlÁ`0‰øýþ@  ªj¡P¨V«Âi×2¢µf?ü— “Ö->Óù¢ÇIº5펹mYÛù™YÍ%ÒÞâo'ZgäÏÂûY @ ±-z’¢€°ôâÍK¥R&“Òº¢•*Ú}µÖºš¦Y]ÖZz …oÑ¡Äë-Àwí¤GôÐN¾ýdçîÎàtpñ¿±þK±ÞRˆ·2b-ÊÎút‘ùº^éš[9—ïÊW]U[Φ–T«;g¥R]×%SªÕ ²ÀŠüw»¯Z‚”%±heë­Å¾¶– %¼T{f²žÒtoúôm§;^ìÄ–X)\ÒÂZG¢cãEv^LÖá0GºÍ{É£³äÝàâÍGš¶(y3ÊGœpùx¯Á ƒU0 _Í%~ ™’Âå&ªBÙd¬D—É™;Êô‚)1`†fð'79$ãvX"Sl!™â;K,1 WÈì°adøEM%Bòy†uª2o÷·%s÷<àÜQ,vy½C› ¨ÏÐcãA'-^ðÒÃ^â’Î •”‡†2'š›Tû8å^â|€®áÌã]Éx‰ãuD«´ƒœ!॒Ç$í¦x†Þ6&"»V§¯9³4æ?ÚÝ@ÌDªc~?Åh˜#ÒÆ” ÞúÈæñfñåðE˜›¥ÑE±„+ƒ¿I;¹ Žñ&f½ät½“±Æ×q´‰™NJ2yÂ-GÙñ’¶£RÞñÆæBŸø]ûµ‹w–9 e%ÿEs÷8\f¥«ñññ={ö(Š¢ 8³Îñã-[t]×ìÚØ[ÇŠžbûþöeO.C?/|`…¸ 'Ä)¬€"ÔçjÏί']-–1µ„ò¦.ŸšÙ>“^–Ö‚Z9Pî|¬Ó‘pY¼ƒÀ†œD¥R­"»3ïtäc¹çÜö¼ÝZ¼ØZp :/Z—–Ì …žø3Cö¿¼¦«WˆNU*!˜+W˜H$ …‚Õˆ¿L&“µ££×hÍYk¨M`–)‰Ø|‘™EIv' õ…†S ö¼}qefsV‰#¢¼¨ÀÄ2jÕëEÓÕz6LÓl¥Ý•pÅúcÉÞdby"r:R›T,VµX³(zÄÇYB´ABÜ;K¥ÞÚX+Ç[Íÿ1]Y«ßh³Ùô:ýÌ[ÎÌ­˜›_=?¿z>ßœï|¦³é@Sí‚Cá#wY~hù¦M—YéꂃÐqxÒ*¬2Î ãô¯/~ëZ³ðìÔxÑ`;Ü>_˜‹*Ü >™30g€Â ÂYHéDdÞ¯‘„I…ë![æÓU>ÒÀÍE’Y~ç 8 ÇMNg釛‹|&Ä=Þdps•‘ ½´¥8­£Áã&M&Ç$çê™O}J~ÒUäJ^ìTæ.ñQUyl–x‰+ëi 1>‡?CDÅcéÁëA:A°™¬Œ9ÀŠœž£¹„)€à&îuŒìfe…H±4Ž(‘Í~ù"6JDÓ ¼ô§[_úÅwûتRíg ˆKÂleê0ë“„¢4WQ}d ¸Ïѵ”Á(ÍNJ€›B“*U?'¥!zË8,O8õÊ£t—qz¯h!Nѧ¾—¡ )ÉGv–Æf¢&’‹bo÷,~2%œn *UÅM0‘²øN³|-G3øsx…˜aÜɘ°ºïúq‚U㟾¿ð®‡:;L៥ñJž}…‹eð3Z@~™Ëb„âtÖ1+áΠ¿Žjù öƒ8e¾t×ãN±r ¯N¸ŽzÛ]÷Mmh}Û׊ؒ$¡˜ùæ‡Âá-óW”ø¹6” –P¡N¦hW¹¶Ê¿¸IbK‘+¢Äez`5Œ€ NËD‹,5ø'•;«Ü_ÅPh‚‘ «4¼î’ø¹ÁN…;aÚEo`=Ͼ*ož£^áRQ£ðKp_B6Ù ³.Ö¨oÏeërôZ¸ÎÀ_ðâTòtTÙŸ€q“ÓP·8%X(,I–TU-•JgÞ}¦ùùæ†3 ò ¬ˆ IDAT.—Ëf·‰ßçZ9¥ L%ι¡Gô‚¬øbµhD7LeñéÜU;:ªmp‰×DwD5·æõÛsö¦¦ó5çqÕ"lY(;1$¨ ëŠÅ¢¿¼^¯Õú¡üÕ™ˆƒá±ððöá\CÎó,Ro(†ðb%µXA±u–UÒk$4…²ƒ•ö„·½ÁÀÒê[ÖšÙ[Á·T* žuí±ÀJ'–­°ˆÎ–±a¦1³ÿ=û»^èªý‚¯¶!â.ƈ[°‘êJÒ¾÷íkÚÝÔº«UÜMÇ cÙð²Ä²D%P±¦bTù«µ ÏžUBYG ƒn}S«äÏÀâMÄtÐjZ‡ ñƒšS«Ÿª·d=eOý‰zk0ek€£·}mš°n…A˜l²¯œ$Êî ;I·ÿ#‰*¬ƒkJ¸[i›â?ázŠÓ:[mÜ`0 6!•f?—6²ÉM®DägŠ Àê𤸲À&“|’_ì…›]lw0Çn §Ðàbxc–¬ÎßšàG*uQ–ƒ:™·IÌê,“+aÛ>hl}¶îó·dµCë8;Fï7õ26M}šk§)LBo†WÊ´µ2å$TÀÕÆ´Ží,+ÓœõÒâ¢à¦(âøJÆÃ$4:R4†Hï¥ßÍáÝüUTVp.FÓ&Û+¿ýýwÝ9{„Ø$í'XµžÃ›8a®‰™yê<äK8 ¸…Èú K»8§£ŒÓÑÃH˜„,=¶ó’¥*;Dïv^ª`É/‡W ½üdú8k {Éíã";•Mhc2‹Ï@ö÷Š7\Ê‹v*1ÒYê ¼ŠIBqê™uRyËIi-GãÔŸbÅ=±oˆ¶'¸Ô‡ÑÊÔ†²Š+ÿ±oæ?ô««¯ý‡¦01¹Ÿ7/eÌI¹€zŒž£´çx©™ž ¹ÞÝl“0×pì Ë|d‹ÈK¸ÁN1Ov‚FI’xƒûÚÝ_¾%ûñ‹g_|òâuŸ¼}˜øŒk»¾a`ä¿x{tèo!™æZ‰K% é¼G¦WÆYå•yv®EâŒñÛ% VMò‰Š‰îÖ8ý&ö"ƒpÀÆ%iöš|.VX®qc•?Â|Æt‹3fœ“ðø„Á Ùx«Æ¿Á1Xmà7q²2_þíT(ð­kÉ_ WÁ(L€œg#Ö)ÃßÁ?)¬5xÍH$aÊ&ÐòXËÔÍS g^¯‡Õ\0Kàn1A§W›Ä/ ÎX-¶"‡#'ÿædÓ&gÜ©z- Èòùc§l6+Ü›ÄX(ŸÏ'“Ét:mÙgˆZJTVÇ2›Í¾J۔̱‹ÆF·Œ6ímZ¬Ýn¥=ñãÕjµVÓöõ`D]ðé‚ð+€ÖtpH«&´vÒjÌ. ÉÖšeˆdIJ«ÕjÊL=÷ÑçBC¡®º¬Ž®ÕU{+nY>Ÿ7MSô9…\ä‚d £:ÕýÙ_ñTV~gåÌ%3Ï|ý™5_Xãžv+²2ùæÉñ«Æ•ŠÒv¨í…’HÎZáGQqÖ¾&—Ë)Šâ÷û­º±4p-éB(IþÙ1Ò&Ë.ùÉw?‰É¶¯lK&“ü§¢nñ7~qcCs·½Vº*À8øtNîù ©í1)µÖ6»O[ÚmoÇØ!ñM“S€/ÁïeÞo`3¹]c+쇰Äó&ËxŒ“x>±9b 6Ó4ƒlðƒ{à®Gr< A‰ ±1¢±«Êm÷KÜ¢ðÙîÎТ±µÂ]xô¦™®³<¶Û.Nî~«öµ÷î;Ñ¡P‡ìÙËæ4¢±¹™š¢XÄ•$´”Ä*ñ“—à€Ä*“a˜•Y'a×ÙÏ 7|Äø}ë‚g  ¦à,8 UÈAÆàn·ÃÝÔün‰0tþ÷¶¬ÆVdž¯îx¨#˜ N«Óf«iΛ"\Šè`¡0jåDÇF€„Eè¤Õ…ºàâÇNg$ñù|BÞbnn®P(,¶Nÿs´ÊØ×~cíþÚ/WåÞßö:ãN[¶ ÑS4Íþ[hG‰i“u0‡h‚EÃÊr˜ÇエkåÕ¡ŽnõÅnúÀMÖp~ÁL^LÚpC|Š5\q¹\"{ 0ä‚)—¨\E·Ðª_­8+2º5²j‘Š,‘Å5„ÀÁ[¤]q’°TðëêêÜnwgg§8%L:'¼üÇþ·ggg3ÅŒ¤H °-â9±H² ð#‹ëõj¸zàýrm¹+?r¥RQ¯øÃнwïÍ7åîǺwܹ(ëeñXN.¯¦>,Jçp8ìv»ãñ¸UÙ\P®wA¡f=‡ &Ö&[r—ñj|캱ًg¯ùá5î¨;[Ê.ÞU‘¾Ã4MלË-»_[âÖ'ÁË£!Þ?ªœ­3†õ¾Ð¬ÿøwFþeéø¥v“ |VCÅÄfÒy¨À·BôÈl×xÚ$/Q”h„*Ÿ5xZvÊÔ«|²Ä4¬‘!f0*ó—&G6HL¹Ñ¬ò#“m ïsÐVÅ=ƒNÁ'T./š‚žï_—¿î¹ó9³’² _é¢)E¨ùS„«„ʸ=TRÈeüCtd÷s&D*HÚD^͈„3IÈ@)ãHŒá·#Eq)ÈÆ‰,epŽH33£ôt01óÙïE=þ-.Y]öRêal‡R× ÄJ8 xòx3êH”p(NJ34ÉíL(èEÜ]Œ ÑŠ9"eœ^r Æ‘.ÆTª>²ÍÌÄh®‰eœ~²ãt”qpw2–Ã+cÖ”Œé¡ ¢kØfh®àÈáuQLtPiaÚGNA/ã¬c¾ž¸‡¼‰|Œ5nŠk8&cبÎSŸT}Gßs¼;kküÙµ'Y ]ÀýÛfip“—±gTy~×fŽ—éI£•°gqä Ø8+1“ ?‡š%ä"`}å†g‡nšåWoÒ¿}g•A¢Ö20¿¿Ñöý»åû¯wr_72i±1[Ä–å¢*2My–”9Q$/±©„ +*œM²Gg…NªBµÄf‰ˆLX¦Þà€ÄaÄàI…MveÙªÐ`âYbò+P æö‡%f$ž¯ÊGLQ¸öé<+s½‚]]³¯zݽ¼e77~‚gƒVx üz  |ð&xÚà%8¸R°Íš]MLLìÙ³ç|DH;l%[¼?^?Xïιíû‰¿> ÛsvÈ®m— u;1¹)§£££¥¥% ¹\®B¡ l[­©€€b×òi¼^¯Ûínkkkmmí©Zv°…t¨í4Š·êx¹#0¾i¸ØXtO¹Õ¢Z7…N®ë855Çs¹œÿ”J%!¥#dú¼^o8ka]L­ìBLJl6›fמ½ûÙÞzƒç‚ÿ#{É4²ÚV"%ˆiå«B²¤W+•Ц.nâ_­t%2‡ØyAV?R«ád Ƭ™¥¯!d>Âá°¸e¡Ph80üJÿ+;ŸÛéÔ¢rZ —hén­EÑnw³%aíL)T»fLwêþ}ƒPKWËî–Î';»žê ŒjS‹ØgayÁÁ’Å”'‘Ú–ò‚°RñpZÃ0QL[[gewù3_Í^ø?æ_÷À:GÞañ«¬[YKÇ®¬z½ÞÍ—\þP ÊÐ #8÷™Ÿ;Ìh¹|æa£ð6þù4ß–Læa«B¿ÉN4;·k Á¬Ä:™U^6UøŠN+´*ôšœï¡FLBón5H*ÌÂKUðF“aøšICˆlšægí¬ÌÑfâÖñˆ”%€˜‚‘Üü&'œ¤³òÓD’xCdUª&…ƒ[Æ=­s«>wS]LñP§í$Ý>J&?N;š“r´Œ m§rË‘:Ê: tP®¢ ísù þæòxtTá¦h£ª ›HõÄÏÐßÈŒY ’Œá¡&á¤$A¿‰ÔÀœ“Òn¶52 øÈ–qöq6ƒ_ˆ­ÐØjò§0[ýx}ì™âÙNDÁ$Â,ˆ~ ëbx#Žê"]ù|>Q4ˆ– °ç8ϸÒuàĵ'Úv·u¿Ø}AãÚåÅk¤+a[µþ.^&þµí&f{bͨO4îDÉeÅY‹‡$0ŠbñJB4-Œ¢Ãáʹ‘H¤¯¯/ÖÛÛ°÷ÖÜ­Á\PUUQàZïS{Ë,%áú!Е‹!Ý6›ÍÍÑ÷XŸœ’Å0o±ñ±U¬ˆL,°‹åNįZ­úý~»Ý ½^¯¸Ë¢ _|z¨Õ°¨UÄ¿`f­½†ß>ìóÖ¿X/08VY).ëìeUo¯–®£†4ˆÂ/Açßæ»W°Ã«øÅ4Ê2Kdì&mŸ3ù"TÀe"™œNÐPä6K ¢óœÌJ‰ûÀ9¬†Ï«Ø Ü:.sUŽBD=tûø¬ÊÕ\ScžÖ—˜„$ƒ¿Ph2ÉB\ærƒU^RO’dŽ£Užî´Ÿ0þöñ÷=e™Ä›K4Dè+°Tƹ”A»A؆¬#g D‰Ö“t µ1=NoŒéHR®àËâ_ËQ?™ ¥fKØ¢øU¤st ÓÇY}XIûZÆU'¥"®2Þ5 …IÎicRÃ6NÇIVŽÓ1F§Ž"躻¸|?›M$aã›$41ã%§£˜H¦J¯h –qäñ<ÇŽÆ… »‰$xÁn B&cŽÈ8À8 Œũ¸¾FfghrQŒÑPÀ- 2!¨a«'î#+ÐÊ6´ýl£sìÓ÷Çîþü/Þ]¥ÃNSÔ,öÆ»™±#7š¼N ƒæy ú‘* àö£§pçi“w3ÕÁL™ÙÉ?¬²éÚ§LF«LÌ6ñŽvnpZ㥠e;·–¨ÖaH`mo†ƒ’6RàÓä¤Á¾$†N'5ðdiÑðÀQ‰ßA*pÂÏ™|¶è|­ÊJÆ®÷²Bð+lÐW"jЩó9¨¨ØáÛðü F ¥-ùNÑö¤ò•÷Hñ+an‚•¿”øÜ#ÐaÂ2h„ |®•xDeóÇÎç5ËÇîÛiÌTÔŠkÎÕx²QLø…D…¥’nI´Y@ ü/€ˆþ¯Ÿ j·Û}>ŸßïGøÅb¬µ2²^¯×âxæZsÇ?t\óh‹ ¬1F*•ŠÇãçΛ››K§Ó"ú;‘¨<O8®««óûýâä.x¬ ´PG·Žv¼ÔqAa‘B„”¢¸„E…õG·ÛmaÛCøjgNèNœ ,v°v¡«VÁ¯VËü,þDÆòù|¡P([—½+t—ÏéÛÜ(N~¿ßb,ÖÃM&“‰DBŒ‹,s–ÂfÀÞ9Ü<Ð,¾²å˵˜Ï+Òžøš¢a[Ëä0ÔZ•wMÓ2™L2™ŒÇãBòñ‚Î/µˆGKÑøõ<‡±‹c¯4þÿ›xÉ‹æÁ~•4ÁµTè…:ø"¼ƒw"ߟ“ø ƒƒ1¹«Ì Æw—òp+|Ðä':O™< “´IÂ`½ÉlÜæäT€˜Êòfì3d + ó2Ü iq°ÅEëI¤Ÿö³®Â· ë HüBá½:ç &LVjœháø4"{ >Aêt;ÍphâRŒ°çÁ¯ØX½Œ–¢Ë™ëc²Jáë%žéa&̳øƒ“d™íS´Wpä{1YÑÉ-ËÈ÷1~?Û‡f§â¢x˜• ,#ÚÅÄ Neô’l&{’GY»—-*Õ% (<ÅE6*%œ>². ¶a–ØÐlhÒ´w0þ ¾ÐÏÀ MŒ‹ä§>MÀAyž:ëŒÝ<žFf¤Ý战H³4:) auã,}§Y42« IÙ©p·1™Ã ³$HJè$bƒÐ®­c^à8òx\mh(„£ ¸g×O_÷Æäqmbf-)ÅÕŒ—pVqÈHsDfi¢×@ÞÀ`¦ƒr+{`*MÃ>–¨¨¬š¤+wû5ç@jÙ©¥Ùο6Ò!ѦsfŽ"Wû˜Ôøl‚˔ʄ§Ð«<IDŠJž[ÒèÜíd<ÚÂM ƒ'ml‘p ™Zq[â6‰H l:e“q•¿“ˆK¼IbC™Âç ‚«<ìõñ¼Î#&=%&Šÿn¢ëð× [eÖÂw5ž’Ÿú’R¸]¿Ño²ædSpêœ0¹:`<à¬ÁsÐ!¸¾nrµNb1ÄËçóY09ß”ÏskN èy¾'ߟOv'-H÷;¨ZȲq ˜µBäóyÁvº A‘Õ­ÊçóÑhTÈ¥Ói!*ŽÕ ÂBû®¢U4Ÿ6yåäÐ-CuØŠ¶Zfîý+è[€ïZܹˆÚ"ÅŠ¡ÏXÂqç­FdIˆ9-Ap¹\G 6Ä%”Ÿ„ ø ÚyÉÙÄ"Šª4(öS\ù|^,¦Ö_QHxˆ•Ô‚å`ÁétVÕ¥êÒ+½P¡˜uÁ\%*ÝÚŒøjŽ$eo¹ÔQŠD"Á`Pìêk,-x„|œ¸Sµ.S–6UmÛPºÐe‘ Äw*V&³µd¥¨à¥ölñßþUQĤÓÚ¨ZÇœ×BšU.—˜T(W)A/„)x˜©•=tïgt$ƒ ¼Ãèp7\´3§3­Sÿ¹^Å[%câ*°¡L®Ÿ÷1[eNæ%…¿Õ2¹r&ç)Ú‘4†*ܓ㜆-P­ç¯hƒ¨N6—xÁÎàX OKüv˜d6yc–GÌcO³²Àä•Rv—ÌN˜2ÑÀp <u‚ÎÂ6‚ëa;,±fWúÀ /„Š!1‘]¾©MSjQhš>žß0ß<Ù,çÉ+•JmßFô‰T'Ê—b±(TŽþ, q¡ø"†š¦ÍÍÍMNNNOO‹f]>Ÿ3a².„Õív{©½tô=G3+3„X÷¥uáÓáW£|ZyKØT¨…X­¥\'ÒC:âLB8Õ0 ‚eÍÉËO®Øµ¢–\ë2¸c°,‡çÖµ£…€°&RÖˆ«–`$®Ã—~ìÿ<¶êø*WÖeMMî@|–•¢,Ê­…yn•;‡CØ`ÖÊ2Õ¶Å,–Ø¿­û·¯N}5—ËåóùÉÉÉÑÑÑ™™¡1ÿzòE³tŒ&7N:+ÎæfrãCñ$,n¥z½^1e¬¥ñŠËrD³˜é‡¬VÛ×:ˆ“Íy¾Ô!ïkg‡b­,(˜Ï/LAq(Á¡àâSÈâCI-ÉÝëõnزý5h˜6˜àÃYÖý^jë“®Þiðs˜¡ÞÉö¿â{k@‚¼ ³Ð§xy<&ï‡Yè€/Î"Wš,…3:³Ï(\ ¦É¼¢°ÎÀ› €ú$Q•Ûi·Ñ‘¦b2¹0…’°2NÄ$]&®Ñ™C’õðpÝž¥ÍÏ_>IÕ„ž(Ž&çiWñä)*dz1ŠD§Ùê¤ä@óS©sRu!p¨@8Jó$mâ2f'c Â*Õ"J?Ãiš½äúHÊ„£4ÞÈéå$!¡¸,×EÑAÙIi€þ ©9ÓÕòÃë/IÓ]Äe w0"YÂYÂa.I(@ºˆ+œÈARi½ Â/à¢ÔÅ9ÑZœ¤MÂTÐ%ÌsBÓÏMAƈÒ,Q&R‚p+SrGG3ÑiZ¶Ñ䢥ng€Fô,>Ù,¾6&爸)øÈ™HÑW è$m§’Á¯ çqÇQçq»0–3:MÂÌÎf±—ðŸ¦5Éð4ñ+LúšˆÍ„û*¼§Ý7ÿîÏõ‘>ýåAÊ<Ûì¸!ž&¦óz.¥duÓuO…²ŒKÆ«¹Vç^XÖÎÍèaÇâôä)ûh ²$ÊL‰«u .èKò€Êu 2—™ì738ì€ ´ÁœƒÍ á<ý @NæN¨“h×y®$bœF³3Î /Óß4 ™T Âó0 ›àç„£ð.;wpe–Aqćÿf ïŠÏm˜[½gµÝnyb»6îÒuÝ3ãYñÐ ñ‚‰Ë'Zö´ÈÕ?‹8Y['‰9„82 „ÛbÄö[L¢YWKît9J IDATi¦VþGÄkUQeIÖ%}Ùï—Õv vEfÖ¨\ðŸjÃH'étZà/EpŒ\.'"lm8Lã£ó™ Ë‚x+(EÂK©ŽÒ©3aâ3úVùìÊù‹v×ßòŠü›=sÜfk˜_Eé QŸ!\¦S!ct•Ïí¡nM‚ZÔÇÙ ö%ørDOqIg+©*Ê:N¥ £O'°ž#ÓTŽÐÙÇÜ8Ïp•Ò–!»îgà]>²=Œœ£K¸rl9TÉêÛÅê œ;Æ#Dr†&Q£xÈËCôö2§^ÆpS‘p Qcý|{G1Þ>LÏjŽkØÒJ8……£†­Œ#M@AŽ$]œ«'ž"è'SÄ5K£`eñÉf”„™Á?Do{?ô¯â„J3Qy„×ÕJåe/Eb̽‚¹œæs6´çر”“ p×@jCêÕÒÕÿêZÔ \:ÂuÏð.þ‘1™ØýàõÐÈŸÞÜ­hïxØd©ÄpƒË ÏعAg†Á#1ßH5KTâ'×0ù±Ä­&6¨Ù¤!ˆ×ΖIÒ Ù0%øŽÆmb^"yîµñ.Í!‚26º*JšÇm<ääÚj963ñ¤Þõ`æÛ2ö])=¬ñö2[ Pät•N?… F†µãtMÑÂw†þggiK3à¡ñu1:ýTš˜õ‘3ðfI˜M¤R„Mäyš‹˜y‚¤mh=Œ¥ñm:Q>|ó0%w|l“Ê!6a]33Üó„ ¤ ¸ ›s IBAR8ÜÄÌ4­9¼:J„9'%Y1š:ɪ~\”™Íá{|⽫磭LMÐ! €v%JKˆT'ã ê^ಜÎHP© “‘3ô71ë¦PÅ–&x–žIBË<åîF5ìctŽÓYŦ£ŒÑUÀµ¹Î\6Ðs…]×7÷à>ÈÊ þå ÓÛÃxˆ|†°Èó,rÜF¹%G'ÔCk B*—™ø|*\[ 9~øfs0­<î’¾V2¿ôý±›’ÞÚ’üÒÆ-e†Ý4A$ÉE­(vä"Z]ál¯Ac3O§(¸_âK: &¡"'%êÊüŸ8;мQër©LwúTÖ™ŒHÈ&wÀKÐO»Éøñ•é5Y ðÏ/¹¸Þ`ܯpO–æ#&oƒiðCÉäõNƒç~É÷nåûWb†o %\øwx‚ð=ÈÂ4¬1é0!%ñ »Á½p³Õ œžy<þø‹W¾ø7/ÿÍŽéþ˜_Õ ‰‚èDîu%\Ý'»íêŸ},ÿ*OÅ(H„ZQW‰jƪ,“‹­Ë$I²t²ÅȺÖÖâ ¸„-osÅ]go8;yÙdûsí"ä‰õÔ¦«5X˜Å¶ àB46ŸÏçóyA{}HQÖˆâ@ä˜Îƒ/Üó‚²[k³*ºsVóJ•D¹#ô~„„ ˆ÷×u]É+®¸K5U‹m&ê¡Åg™‹î™Ëåý·r¹lñD¶øF‹µf•†–"”533 #cËœ¸äÄòÿ\Ç'''ÇÇÇgffAäÕ•H¢6›Mx²X‡kCÆ.|ã`Ï+=†b<òùG öBh0$ŠòZi‰Ú.h-å|AޱR‹ŽÛ"ºv»=—Ëß½1\ñz‘’­|)öJôB+•Šx8Åæ[+9óÁ3ñmñ-¿Å®Ù/Øý[œçj›§¶¸(]«çå,Æ0¿J\Ò!5M+}È d…Ã*&•P`“ÌåR¨[à×ШsºÊ®.¶jd*Ô›ÄM п†¥/1ÜÈÕE’y&}x”ªôJüÚÁêOé¨pez›ÉT)ÂÁ0›â,)Óžãø,I…*銯Þî?þ~E¶1‘§®›@Ž}yŽvÐVG.M‹F±ŒW¡è¦Y縗¥ÝDËt¬âÜ vÒ rEü)êZˆé¨Yl&TÐþžÝ[™êg {/K2zxüºÃ³CW¶ŽÚ ¸˜ËáM\2°dº4cÖÇá¢õ)à(‰4'¹v+{¢´xÉŸeY§Ž2Â’ÓM±ž¸„™&XÂõFÂêv*-D³FE %\“´§ ¶2aÎA¹ŒS˜lI Ñ+èSq"Œ/c¨‰Tšà\a.B|’¶4A'¥<×Bô+üd'i«¬šû›Ç:?ö.Æìh¶5œqQ¬cÞŽv”µS´¥ñLÓÞ@Ù¤¥¥“é öC4L’n!†6Æ ç˜m`Vßòµ¥ªí3¿ý$E·[½ûÓ ^6N@f¹ÆØ¯a…-ðŒÎ :;¾'ÃØ?Mp†Æ 7)ÜBN‚r˜…Axòð'¸VC_ vH§ÓÉdrnn.lÙë~%§û‚µµbØcêa‹a¾è‹ù¼" ,à F1² «&ü2[ë- ­¢—e¾xüÜãYoÖ=ïöE}óËæ‹5ÈM]vÓüðíH²æ›2¹D‹ã )<ït:%UªÞW=²a¤oSß+×¾b¤ŒªU®¤kªmêíü;Ìý¾9Ž*ž™vÆæ\­ø$&’Püº©"‹ÅfffÂá°Ðê-î@ …X,&ä¦Äj›wÁ³,HWâõ|ѱ 1ü“ÑùÈeG¬iëôªéɵ“mOµÙ£ö#W™|<,£\©“OR¯ðË4q¸Q£F ­„÷¦)kc²ŒX7LS2È¿|aˆæÖ –(#ynÐq*œ£ÑiP•¢Ã‚]âPG­²‚ðLÁ‡ üð[8'à?ÿÎä_73ú®QëKVY–³-ÙW¯{µæåš¥Xêñ)†‚õMLÄ‚}®Ù]1s€ÉÿâŸùÉÔj+Ê‹õIÓ}L¨40pÞ€-fÛyÝNGÔ±âÁsÏ%;’%'JÌBª¤¤DÈó˜8fóÏ™m¢âö£Yð-îÎ-(ïü#~ï7áI4=Ùäõ;,Žîs»•‰Ð±Ð;ƒPÌ*Í‘{¯˜C²â©›é±k–ž6›MUUQl áÛõÓÌjOü®9²­°7Sþ)ǽû½Ê ’Q3&õ»øl‹õÒ鴘ù\®byøÎ«:+Wž1¸þÁõÝïéöú}}Á® =nwÌ;Þ¿xµ%I2¹êBøñ¥Ö1 _ÑÈNbÍ…²e1NÇ|dYNT$vÞ´Ó0ŒÕ¯6ﲘ½óµ-JWNø4\1•3>®Ì>§p•Îr:ç$Ïo¯ü™K®7â:#!ãö'˜}ž¹÷üj‚Ûdª¡ ò‰ –XÙZŠ7R\§Pjåæ<¿ÒùJýãhð+•Г†yº žÊ°ÕŠ4È¡ÙBÔÊ•Uôbë¢\£Wâ+V–iø¨ËŽßûoÁ‹>Ѧ×'<¶üC7gXyäËꇽw/wã Ð>³‡—®zêP6Ð_Êô4 3|ëÆÊqÀÑ~Z×2ÚÖÂl„ý(+T´<¹uô½È¹Ôsxî(Ë»è0ð•3k¥% ÷û¶^t{D+IâÑÉT1ºø¦ÃOÞuÁÅs“ZKgKETǨ°í˜§4HXŒű†ƒké´  1õ)*íäòØ„¬‘\†h"IcÔ®âpÇ$UœBÞiœa %ŒH&¨6ª™ØÆ Jj[Í¡Þ(A–´Ñ¡¤ƒãN2#Ô ˜b SuŒæ'—’xzhSÉ4’Êa¡¾‹Ê:â3”8™óð>îbÙ>9M¨„h»ÿj_kiòäÌ濜:÷(3:+¤ø:é—‘ƒcFÕÆÏ«wßZ=ú˜\–­yf5´4®%ŸSé´àt† ü$̳^¶ån™.p¥5Á#°r†6+§CάÆAø>œ/¸UæŠZ.ëåš,·Á} ¹Ø´šàëœ?”çù€Ì‰›Ž0nð•‰IlÒ˜‡:ƒ! èePB‚¾.ñ²Áï°_Ƈoá¿qË=Üö-VžÍ‘ïà ÿ&{~ eðYˆÃá;°vAçB²H™ÒÌŽ¯î°ä-õûëÛŸn/ä â[oöÊÓ{ïÛë;$¤æ?7»‚¶~[1ÅXŒ4ÌêñxÌ( J1Q‡‰ra±CÒ;3{ÞÌjV}lÛ˜E·Ô¿T_½«zÇ·vô××ñhÇÁz¦=¶„ÍÜG/°‡XÀS6ç ", âçQS&üM†¯*×ÿ¡^ˆ¤‚Ãëh{®mÏÇö„‡ÃÁ¾àÛåªâ¸\Ì»*«˜?S¬|±¸&j"ý“«gžv íM+à YtY_@"~K¸JqLÒq)÷Çw]² èxºãЇ¶ß¾ÿ¨¿óªÎÍŸÛl*ؾ¥ÓŠx ¹êí¦Y‡CyLÂÙÔÃâWŠsí‚Ó:Ž@ P^^îñxÖ®]+ËòðððÄÄ„¦i)%åˆ-L«ag¸óúN¹ o½m«Õb=xÕÁΫ;ýÃþ“~pÒ‚¿õÏ¥«Z75ð:?ø:”8Xã!=Ía ev¹}Z;û§ük·Ê+.Ö_ÇçÏàë2üÀàIƒ¥2õ:·(4ª|ÎNó$=0ª°ÊÃGBLOðÑ 'ÆñÃqh‡>ˆÈlÓ9¦ñKØhçhž)n4HЬµsÈJƒF­Æ¤Äæ9ÕÍùÎË~ùõvMËæ~z½z¢UKæéŸ42ëz)Í`Ópʼ䧢€]B2Ø1HË.Viä‚4ûˆÇ¨s¡`E1ùNä±mbw_”è<¾j&fñîc•QMº’I*Zèò“‰ãÔ–V3è!%ð2+/×^?,K"ë„ vRþä°cù•mô(hÝ´[)øˆ‡˜§FGÖP&©r“j¥wžÒ>– Ѧ&¦¨\J_7íAÂT»H/çØ4ylJÓ“T™¬î"¯°ÅGü%6lâˆ`zMR$¼‰Ý/±mޱ¼œ™ï®PÆÎàÙE¨âÙU³¸â8+˜dF£ÕÇÁ“kqü•¥*éAÖñI?–!‚2Af ´]ì1>ܧ½ë5 Éñ­Õüxìã¯Ì^ý3ù¨÷ÿQyîtË w);ìIâS$t$'ûmÈiœ*ƒ¬Ê‰ †ÞH»‡Ûº‘ù„g9 Ñ 2?Õ9¯À÷dÊuja¬#29|ºáûstê²åü0É ¬ƒKX·‡ ø-¬…gà°Ïà ƒƒJØ ?ÕÁÁU°Oã(\ $¾Èƒ…Yx ùªÎ‹Æ'¬_ÏÊÛUæa-§¤•_eÍÝÆÄƒ2+t^á~¨‡ó ¦ø“äñ…ºB£[F5»vá§. z¡X)˜~ï´-aÛrËÅÒyGgç ï:÷]År¢b6‘BÝjµ¬R äKÁŠWÌt"jÈséútýóõ(¥ýWíîi·dHu/×)e±è¡-Ûñ½ÝaöâŽCþ1F½Éµzûܱ ŸfÎÌŠû¢Å-¸ÂÁv»}AƒN ¥Ä˜§—±À¢^4x‹•^•‰xs\‘ÿb”t_Øgör‹˜o'­$ŽÙÐìÐiC1_Ì2iÙzãÖDCbôÜÑŒ/Ó¿¶¿$RRu°jÉKKä¤l`¼¥ä’ ö+è¿]±%¤ m6[&“I&“æÀIlŒÌ©˜9½+^·äŠgÕ³ èœtVÆ+Í$¤ªj².ÙyCgÇ:¼C^,H²´ö§k ŘY6#­‰C1ñ¨ þâÂ?/h”î¿Bwÿ^Á¦±,EWŠTqCFÛwŒ_grcP*ßË‘wV|È ®P®s\gL©Lº9ìáš)šü´åiK’JÕƒ,< gÁ´À¬Ç\,‰p©Á3þ”àË Uú,=5Ħ(Q°½éÛÖkw±ÿúð½?Wޝ´?}EåÊo޾§"rëæ :æh(åX –yªä½ ÉlªÀë!QÇhÛ^‰rƒBŽî M!ærا©Ð‰ÎQ¨&”aÊMz! ñ5ÄÄꤼ“U•ļ$*˜¢¶¹¼5ÌÇð'ñvÓ¾‘½*ƒDm.Ò94;™?ñѬe,ƒsˆÆîÆýÄ^bÛùüYL°rØ… kˆš›T3ýV a‚‚áë%á!YB$L0HXFŸ¥¬„Èi¼ê"½™#AÂ9ì!榨TЦ©ðd‰ŽüüµC%],í¥>J$†cÓí_(Еƒ9B!¼CÔå©°’:N[–ƒp†„2Î’4ÿað™9Â*¾n/ŽÌ-ßbåçÝœí 6è>ª]õ;®½ÔÁ«éo¾¨žüîúƒéN—ÙbÁ£1•Å“c¥{’¼—T‹D£FÿåeD¬,Õ”q3âçƒQ^3Ø…Où¨ˆ–‘ † °±“Ï×y \0 !?êK¡ faöÏ+\ p{¹0ÇYyìð^‰¸AXàRV¨Ðphx$Ò…=ÆêŸ³3 Ëád°rÇ׸áLpÃ_a ü¬sA n±psž;À‚9ø|ý‚ˆKÍ{ò­¿oÙ:òvAªíѶ™M3©ÚÔ䙓žqOÇ/;Þ.â/?~›n IDAT:™L¦¸Í"R—VœNç‚ÈhF"3²‹Y”aÞ¨wÉËKƶŒÉ¯È“'Mœ?°ú¾Õ†at {ý·×ÛóvkWŒ‹ÞšÒ[$€+; ¢¼¸Nµ3sðÿJcÊŠPûÎЀXÎ6•,L£s%Ü3SJ’¤7ê['$ýï¥[ðX°ìDÎ`V™Å$®-¶WZ;.{i™`2Mœ>Qz¨Ô5éš]5;Ð>P¹§²þåz«j-6Ý(~ ¦U˜@ä/^™ÿ¯G*•’$illL×õùùùD"‘"uìôc¾c>OÁc>#ëG”Ež•‹oÓÀyÖŒÕÚc5Yä‚« ž·r!=Ñ qú>i¦Ó˜ÙCð#…•àƒ*ø!3ÞfM©ÁãYZTŽU³"kc„#üWéw‡×ñ8¿ýv M&¨cQpúH„ˆÄ™ÕV¾ç"”æ‹Í`äx´€%GDá /÷‡Øe üZB)! §ÄàõœíciŒÃ%¸óÔêØ` *eþKå)‰6…å­ð‰tÃïCœšã•¯À)}PÅÂ*¿˜×ù+l—Ø!ñnÿµñ›¥Œœ §@4¾ÿNùæk%V8`­/ñ‘Ã<ÜÅÀ)?7è‚ x ŽÂ —™@öÙc³Çÿr\QOØ3¸m°®§®XœÆÔ·¶gì“§L{‚e{ÊÊß(ÛyQˆ¯M?*“c$È:ÅâLæç¼º½ ôY0–íÄ7{w1›-jÜ>èðÖ¿X_~¨|äìϸ'رXlœ…+£égïv»‹ ÓDøÍ¢­¨ˆ1é1½0Š›‡&`Z‚†a8çœýgõW©’õ¿#ãÅab¾…Ä» Ïu Ö/ö Yº3‘„ÅMÑJð‹•â2Ìo©nuï{mIÛ²G—ùúK—½s^ñ[‚ÔeÂöÌ·i¢´MêH%ë“uûëô¨®iZxy¸ÿÒþøÒxëÏZË:ËÜse®)— ñXìBi^¿‰:1Yáæ³!*“ke*Q™\`0%—”¢Ã,zoPÄÛøŽD"‰D‰DLŽ;÷XËc-&[.Ö;qÙ‰º?×ù»ý¦²T÷ÅÝéÕ&SõJ¼³Ôs»ÝkO:õ€ì6c¨ [¥^º’‚uvü î’ø¶Ñç[¿ ÜLþàT(èø l:#áÇ:Œçø#ÐYMëWêtA‰„%A‹¹ §Í²T£¤û™8} Í2í` óŒ!nš£1ONfc ¥).à‡ô`æ½÷ªßüµåSŸ ?{ŸúØŸæ|6yƫێFŸ¸¾íúÎK1–²Œþ^ºì¶sŽ‹Æ9¼$´FO–ž–•Ñ7DC©Y\­D“¸’”ãî@µ1×ú:vYɶ‘ÙÌž!÷²ÔGa%/÷Ð6@Ó™üõ«ëí§ú|þO•v Ÿl;õå¹_®n×Nä°dÍ(uítR'Ag3ý­ô>Åïç‰,ŽÞ2fË™ñ’Hâq­c4×J!ŽÏEZÂ(!2IU3ý4Ͳ‘Ÿ¢ÒO¬—Ö&R¸38dBÌu²ÖMªŠÉ a¡XÑM{ÇhR1‹§°úÊk¾:œ©‘у„Ûè ´2ÐÅkv>ï¢p 4ùQ* t¹8ÉÅàY/ÁZZ‡°”qy=RŸu~~˞حçëdòØ¢lÔN¹Kºî²Ì¹á åÕ‹ ÎŽQ®Ó¯Ö¹MçÒM)×9[GJs£ÎC~‚µÔö2’g¥‡•Þ8ã°Já#Ô*ø5VëDfø¢ÌgZùÜ xOžt‡Ž~ihÊpŒJ\£ã€à6ƒ›-|M¥e¯L©™÷>Ì×~ÎDë/ü¾VC[Ùuå¾ùCû8¤ÀmðC¸¶p–ÓvþãŽÎr/\i Ü­~ãFåú»Ô™¨:OÂàÐ ‡³¡ç-Ñ]Ýv/›§æõš²ce–Y‹ªª×$@pÑl)F‡›•Ê‚„T¼ñw8 9æ<ßb±± EQtEý3¯kmÓ77yG½­¿mµÇí茟6^pžm ²yÓ´°¸Ã&,9Š…$Ìü$ØK‹Ç!oYîˆÄS,ù ÄêcšCž[‹‘b5ÌÜ)Xef†0M­ÄOš'7Õ4G^¡išÍf§Íf³‚J,Þf±ƒp&˜A£ãw&8Â4š!~1íé-P޲”¦%$WØ•"dCÙŠ½ñ%qÝ¡;¦U»«þù‰š)ô·ÀBÅÄI.pW)ÖÎ(–=,Vò]<ÖÒ-ú¾ÏìKU¥ªŽW­ûù:¡¹%AßuÇ®?Ú(v9oâSÊ´²®²ÚCµŠ]*‚]ïî²OØ+÷Vô‚ní?/q{>ÏsÅþa{|XÓŸ–Èü\âa4ИÀ"%+,Ú:oÀ#ôˬͱOb,È/Ü\ž"¥ð]p@_–õ25 ó©,mTîJòkƒ(TÆé¶óëØU^Õ)“éKS%#e¨ awr|–JgnÅQ®?®<ñAǧïÉ\oH£Ùt Ýq”¯ÿ\ûÄÇ"3•zU^= {ß ±9Èè08áÍèYœ Ë¢.HOžD%LB‚h/Õ¤R2ÔC4¥±÷²üÅ ôÐ>Cù¼aƒ,ŽJ¦{iõ) .e&Jé:ö½^Q6÷å3)°¯EWíõŒZ)aÀ% 5Ó/£ËèœYœ ;ÉfqÌ*cÖO¼„ˆ—ä ºŠ5Ä\?ÍGY¹™]JÃaJ­"sØ«™ì£E´-¨99+8šÄ;KY»›´‹L#CÇYîó={S÷’Ýõ¿ß0b4üm²U=Ee–,SÍ´pΡŒQ#åÁ“£º™I¯B…mšŒ‹’(esUŽÔ7Ö?ý~9ò. ›Q³#Ò–°vŒ•ýæÃ‰•¯sé²dZË­ðàvb¤‘ vK<&s•JŸ…jŒ†¤swŽSfhV)È4ëx3LÀcÍ´Opož ƒ1ƒ‡ ^b´ëÔèd5F4Âp·ÂW*Yžà Ä+­`œæäÊ–©l²pº†®s”85¾"5wòáýÜ5Á©)>øn‡*رÿ©reæŒgȼÁµP »Á AnØ¥¿PUpl#2£´Ä´—>el9EO=ÓðÜ WÂ0TÁ\ ÅÕÕèèèo¼(šÒr°%S’ñ¨a:eJïˆ9%k1÷Å.–½À½x<.¢¡VÄ CÌf|æUU;k³±i÷»—ýfÙè–ÑXCÌuØcöTej¾c>Yly²ER%œmòuDÉ"²Á`P”qbß-$ˆ„…6\€n(&›áIìúÍMz1pn®mîпª9PãHÿCö5 ¹­.Ðtæ&@¬­h‚—› ’ú‚tU\½™á¾¸ ÀX‘¨Nú—C[¾±E`ÊÍK2‹]Sïôç0çv&W`"ÂëÃÓ˧[nåNfy&[uÅ\ФxuoÞÈÛãÿÐ8-ÖÐ2=PÌ +V)†Àˆ{$Ò‰IÔ[€7™Æ,(«¥˜¯ô\ÞS±¯"p,Ð{I¯-l+*ç7ûÝv·>ÙZŒFÉÔgõ ÷´Ûš´£ïâ>C1Ÿi”yejÖj~¿ßtÒr¹\ï¨j‘™ƒÇ8¹œ+¿_òÚ»3¹R »Æ%1:Y%ózŽ9ú“tä(—B{ŠYê  þ,ñ=™5ãå*'|¼äÝ1b2¥:—‚18*QSÂM2ö3 °ûéÊÑžfN#'±:KS˜ƒ’Á·øÀRÛ€Ï~ßõUœ“¾æÏƦy©uØØþŠ|÷å¶Ñ «‘Kh‰²v)3!ΙAÎqZž*i;uÓTåÉÒl!u&ãqJ ¦\¤&Bhypî@¶4;³fF·êm¿i[ìRÙEõàr¹L׌b±S‘È|¢x2uŠaBÉáp˜HksÖR³¯&Qˆ7ÄóeyGÎaMþ=嘧é§8]-öŸ¢Mâ„PÓâ~š€ZâQ1ôÜL¢›óåF6D#k'Ö=¶NÊK J(“‡P¬R ÿ3u+D8žÛ4^îxäMÕã©MSo|æòÃåK^\R{¼¶k[W÷eÝžmÚf‚5ŠÁñ"#š~`¦½i|,d‘…ßJqÇõìÁÌ>í[‚!Åסá±3ÆR­©º—êjŸ©5·V‚ä—ËåFÎi~®¹™)¹¤Hk$²4’+ÉÍ­š9g¤þÅzÏ„§¸ë`neDç9—ËÙíö“OÛöÍ@@å²'øÓ‰¹x?¨9Oã»Ð*±4É«p>ü†RÉæy*E\÷‚,S«Vø Xíøu–dÈA(ÆqžõИ#ÐÈtž#섇dVÏqŸ‡F™¼Â…]a4 Y¦Þà~¯Æù2kuô>”¹îþö•÷Œ †;¯¢Êm¬xÎûóuÖ†˜ c­#kÇ8Èê fJ¨u-PÁVI"IÒÎä4†Œÿ(+²8–¢LÉcW¡‡L.kŽÕÍL½°÷вšC0ëEŸ§6†]½Ô…läÄWÊ„ Ç ZâøŸZž~jãðGvJm]Ï}§/õLhî…ÒǨog|„z;¹†—Òw‚ÉZÆ–s,‹£–1ù ª…œà•aá$3I•Ž\Ã8`#?Dc[93*–ídí(uÂÝ*†ŒÚþñÏÿ×\P£7H8;×2“³äFV•?q¦›tÛ(ÕÇq•b%«Q¿Š.+QË$•p›Ÿ‹&ɺHW2=Œ+Ít9³6ƃË'·<}‰¶g¥ÄP¤*ÍÇ~ÍKm–?\çœÕ€àÎåòwFÖÍèw¾2ÿåVT€fåÒÕyÆ# ò) «ã4¨„m”[éò±<Ź*÷ ´õ°+N -˾,]`ƒ ‰Õ ŠÆ G5c£ü!ÎÅ•P©qoŠLA)<AxQc—Â&]Ú”öÜìEOc×Qd&@Ñi1Z áÅ/ÀOa´‚úøÂ!PhŸæ¼Çy ú|b £ÿøÛçeäa?œÿÖp8‹6´yèªû®²ú­b¬"tíDÚ‰§Ø{¢¦ev`L@šnÞr Bç‚麹³.Γë'COÔ#Y¤Ò¾R·ò¤É†ç¤¸¤¢÷ñÄ%Obþ¯3ž.ˆ†"[‹©‹cÃå‰Ñu£ÑS£šM[û³µ¢ó&r¼É°6ñ)¢+Xœ´D-kr×ÞÎýv¨Dq>‹,‰Œ1¦ÈŠª©rAêP­OµJ IÕÔÅ[ŠEí$½iØLm*ÔÚ~þææ`쌱l0»úáÕ ;Ä+ËYf›±Í¯ž7d#x4øß² þ[þ·C·‹GÎ,£ß²)·à–µÿ¼ýÍšÕö¦ß•é'0rÞHÓsMÅ™U’¤’á’ ÷nÐu}äŒl¬úɪÊ•›ÅdX›Ï³9ƒ\<-{«tõîSgÒy>ü ®2è+x`·Ž²¥,‰Ó®AŒ`žv •w)œ¥ò¤F™Á=¾¦1¦Ri€yˆ´ìÉáR 50´;œÔ@dвS”W¡Jte¨S‰xH(lLsU«-Übð4„²÷k¼öö1ä8Ó¥$“”†&µÔäö4°FˆëÜç6–8ÖnÂ~**𬡷“ÕS(‘9OÝ‚«××Éì ó82È],+gf ƒ*– •Î-”0F© 㚦á|þ 4"ÉH>’L÷Òj'¦ÁólØDÏZgðÑó}ž‰ø)Dz[u~æ—ïûÈ{™*Íãt’é¥ÕN΂ºŒ.ñ(nÚ})}K§Æ‚ê!é%á&µ“­"«‰TTÇh_“ ø*§¹IÙÈ/ç˜Ü8þÉö£&ð*?ùØ¥±ç_æ².*·í—„¥Nj¢­Bšg$G3¸=$kˆ¤¦‹Æ ûǨôàÌò •Ëü„­4—>Ê=Õ|ÕM!J­%ìßm¬ø]ùçs4Gïÿ²ìqù¿ùÁº#îQê"|Nâ‡y ¾——Ú^Þžý¡ß• Ýy{”Ú8é9'ÃyšTŽYX©SÈ"Äá§ÓœSÍšÈKÌHXTØ?;tÃûàUXÑÂò>ŽI´It¬ˆ’V3! uðÎב®T9G _âÓê4Â>.´Ð¢±ÝÂy“p.< PÿIüõ­‡ó,<àö9ž€cp)ûRðP°ññF‘óÄ… PÈĂC¸ŠPhÊ/½óÊ÷¼¯gvÅ,à÷Uï¯~“Úœ¶–•[,–t:­jª‰ãx»£6ø²Î'­|´‚«'°Ê¤UæáøÊ(‡ ô#pL$ø$¬ÃÂj¤ÁvøÆf5œØîâÓst_¢ýÞ%õ)t; ®pÐâ`ÍÇaVÂX›àëÖy¸àhƒ3!QÁÝóŒ¸7Ê*pÀûáß!6ø0¼‡àÓ‹›'J‰’ªO5=Ûj z¬ð±Ùl&XÎ4¾{Ë-³˜ˆ,@jðþ° @áæ¤A|à«Ý\C2l)›ñ?*˜Ì1•aÂlPh/¯[0¢ «ó'SÃŒ¶ÅÄÕu‰Øo›´ÆÓÓ¯ÞûªêROûÖiþa¿9T+NWÅ©]œS”\&.®x­zÝ¢œ;Ðnÿ¦nòLy”¼bKÛþº“2=k6.æ$Œž;øüÙÒìÐö¡U?^å;”¼"yþá.K’T÷j]¤-¢úUsÑÌ1çy‘âA”YR›8ÌÕ¤XQªºÝn‘®Šßšx8(Ãn·«uÏ¿îÙüùÍ  ’ÿ/™ÒøÇã.ÂÔêÀó1íÛmv¾dð*U¸Kç]„àE¨ÒxØA¥Êí*OÂ…Pª°DE“¨5øëåÐm!ãðIüTÆæ&ç5‰´…»r< swg†#-[ˆgi•)ƒQ'û½Œ:Q¦Ð¬œ*Ñ ±–ulùñà¯>çúòUÞãKãLt³ÁÉCkØ"£÷âÈó€‡K}$¨Hñ¥R¶¼ÄúVFʘ(з9Jô:èÔÍÒ¸Œ®i*„DšŠfœdʹÜGêÇ\±– ÅI,À¬[™ñ4Îãt*zІØp%ÏîâÔ(I|îõš º—åI”Iü,]FW&Q~RÂ2ò®G={þî‹êu=+~P»‘½’#ÔÏRÇleg˜`”@×2ºD…|Ÿ¸x³~bq|T°n`Ÿ œ º—ÖQêc½_ú¥ÙÓMD[8¼“•Y¼ŽgyÍË'-¨N2*–Rm–Üj‡éÊ¡²œu˜^ä8ÜŽsœU>\ƒ+E4À93$2<¯PVÁÊpШ‰lŠpnîÎtê§ßéšûBéìr7ó…Jè.{ü`Ó•Qær|{ïì-k –éÜ`ðLœfC¶vó¬âØÒägi°r­ÆÇUd‰&ƒ1Xëá!ƒ»¦pBÜNF%åP$:C£NÄ@5hWxÐFu†Y• ƒX ›aµÁ=lßÉ7~Ìå-çHD ü^°Дä)ú¡A‚8¡Çà |Ð “° ™æ+0&Ѩs®+a…D‡Á}ƒ­ð|´8dL»¦‡/ÞvÏ6l˜Àâb›Œÿ U\è˜ÿ»àx¯Çãñz½f %"]ÅÁŠœ/7xö`õ³ÕÝcv]L’ì?ÓV兩9iªÄþ¿èú,è>¿âŒ:^k¨ÝY{ô²£/ñå ¯¾p1¦`A/f2™bÓSÙÖ¼ZsU3FfäŒ9#o¿f»ù§UT3 šB…fÃPÜ ÑÂ2/Àˆ/¶ú}sõš-o³è%¬Ô=S7²m¤éé&%¯ÄÔXdiM…H`†œ•‹E‹;«ïœL‡­b¦â Íb=‹Ô‚b°Ìî»vg¼™ ö+ÿ7bµ{DM!+ñdšÒ·ÔpZµ °Ë q§äxZå~(7x=ÄpžKtÞ 'CÐÏE)~/qƒÄ6h„?A„pú3|ÞWÆ0 Ø*x%Ê»ê5î—ù†Î¾ ^•ß–°B¡µŒqfdlþè#V4yæ‘`Fr&mó äø³DƒŠ¬ì:uüê{"3e'õ§ºƒRnÀOõ,ÖìEodÏþ¦­zÉd÷É:n‰sÞÉ ʆ‘`_ «¦¨–hTØ¥±ÄEØÊ®r<J üf9r€hG)n‚«B~’²Aü:3BÇ©àHâbo +ëÐÆ)MàMSRBT ~‚ê  Lã_Ëñ]l.g¦‚™“ØÛ0›Žf«†ÎhØUc‹;¢òØ|Ädmö²ÑGBGÆö=8M…‡”ƒÜ,e½´eqNPSÎl»Šå k&|žákž:i6µùàI_=WOøXN çˆÊL©\˜À;KyønÒ s„JɸÉfȦ9aµÒé¥9>†ÍG ‹#†ÓO"ƒGf:KÌÉŠÔ¥ûò3þôŽÕ:ö4mu8§ôÓßh·œt(}ê‘Ôš/'ÚcRÛ´œÛåž¾4êþ…qÉ”ôè­p¥Á/eV;qÒï£.É3^j øôÈ”ø97Mö+7Ø ‘Hè,/pÌ‚`(IVÆ/¬Tè5xRfÔåIÃ,`ÆÀ§áà<è^Še-Ç!£ì¯Â‡5þUâÓ³aøø<¢ IDATÿu«óäæy‰Uއ϶œÙ;@)_û¶b¯>À:y¥÷d=qG¬yNûÀ=–_ÿKeŒZðh$$‚w¸è²b:Ûs³äçIhÄódš9ʆJâè£6‡’c E˜o¥a^w±=‰½…÷XÉF ¬b`?ëye†×l\4Fm ÃI:H8J œ´Ð«u“ªd*wˆÆ¦WÕÑË^ ·Í5/aPh÷¤ù"^˜ :†¿”ù.–µÒ«#«Xdô ¦ßà$ù(véZÆ:ÏŒœø`çùœ×s´-Äܪ‡×‡'VXQk™9B©Š£¦¾%LeéƒZÝAÄŽµšé0e¢óä@²°Ê†ÔÄ)Su«Ùy„G¹$Üf\Âæa"Ç­YŽf8ààÊi¼Ú Z,8Tº`­ñx{ÓøÈê2íÿ{–Ú÷T¥²/N'½/é}g‡FÙQAEDGEEG‡ÔÑqGAPСÙEP Yzozß“N:éì•T¥öõ,Ï‹Óˤa˜çÿ|þçà ''çüNÕ}ÿîë¾îëâTŽE~ìIúUzá{ðÌÐy –¸a„Yà‚a¨‘ˆk<®á× „˜>ÎIöA©‚Õqb;E²p•F`’•û¹ì:}š°íY¤"«¤!?Öd>¢±I§NÁ ˜¸ îb°Fá| ð¼ÊÓp¼^xFç€N¦ƒ½0£ü‹o‹ËC²»Ûm$*£d1v‘ Íì™ßyÓoÂØìO•?0ÿÏÔBd9ÍàkØíö]×îê_Ü?´`¨ñÍÆàÑ yfÓßšú–õ]ʼni#«GN‡‰¢ÅÕëÒÑ{.éi¼]Ìœy>éÛ1ç@$jT朲™qÍö•‘fÊu•ʃr±Xl}ºõø×o«/'8˜Ȭ;ÿ4.bd㌠‚pø†ÃŠCÑuÝ9æ´¥m¶¬­þíúÿk\ë½Ï1R>lN !¡þÕzÕ¦ý›ºCucÂX¦&ãw´=ß ÍÚýÅÝ%W©õ­€®MN“ïÓZº\"ËxÙl¶¼j1ÆòL¹ƒxiž`€Éýkú§½>Í–°¸á@ݾºr´Ðx‰å^‹E ÿØ9ýo9 ï_‘Ý ‹ˆ9¼y °vhÄÇg¸ZâÃ:s5JP©ó9• ç&¸_c½Î:%™i)æŠÜœcG’] (r¾B æÂ.—H·NFÇ’§£’Ü« %³P¥g„¬6ï/ùggŸÿl8Ÿ8QE¸‚HŽP M<ÑÚb¾Ì<µãwš}¦H¢ŽÁìáùJÀ7x¨Â/( îc~žSEb•ÔkˆûðÅx8Ë×+ˆ…‰8ã\,Plftœ&è´Ñ~œX›Ÿ p¥p  ‘QЇY\I¦„ àÌàOÑMäi’IZ™^ËP‚F•h‘Rž` K ‹ÂD.+©êcΆƒ~£Ð™ %XÀ6@k7½.2E¬lYœ™þžJÆžç’åìÈàZËÛ[YÕDßÑÅ™×z,óħ>ò|.“¯¨ØSåÆå&}œd„Ö~Ú@ 2æÈQfÆIœB,RCŽ1O'ß@j/ÿ1/í¥£@T§W NÅg Tp÷#É4Ê,³“of¢Ÿ¹I|^ͲNE¨GY Ÿch˜¥ñ˜Î¯ç‰´iÔX)D´Ü×[ŠÓûøÆÓÙ¯ßQõå³uøUž› a¡Mà•™L!Ȥu<:.¸#ÏÆ›D”0×Op¤ÀöW‚®HI ðyø\¯±îÖqªièü .Èp»Î2KU^ƒá ~€Y[ ­Ä]Ã:¯ƒWbƒJÜ-0 ¢Àq˜-³V}çV±g™Ê}ð¸ :Aƒ‹à $.Wø&\ áßa:¬Ãlb8ObUydÍTgDUtŽ9uN«þ”VcÇ —ÿÿrÃõwÓ|›Úµš ™ç(Š2Ërè>'‘á!™ù9–&íRuÕ©À¿7|ËO³ *=:êœÓÃŒGxUb~-©Aj[9(ì[šúÃ7•+nU¸Sâ: M¡"–"Q Ö™1jŠ @»D½Î½ÕG¹Ha Â!°ÌÃę̀"7ÌËÏI\!0[åz¸ZdLåF-"ÂEn³°Bá|n†‹až•7<«ðŸàå·¯³=MÛÝêÐRØ'àÐën×ç\¤þôwüþ\Ô†*XWg‰üðÃð;ðÂu°0 RxªáQ¸ °6À½P/Og¹Bí?}µ ²œ•Ëb&ö;qÇ3h¦¼Þ»ù>¼¹¼¼ñ ¤Í_ÛlOØÛ:2”sOkÊUìv[Êf;n3À«R©„àô¿~×ëk¾¶¦üúªU-YJ–ÌäÐi0ÅLæp8Ìlaü¡rܲœùmJM­Ÿ¦¶ßM–Çi’^ɲhã¢ï}±é•¦–g[EÈWæ#+"=çõèºn›°Íûù¼9Aì1»]²—'@±+]WwÕl¯™õÈ,9'¿ŸLY~Ÿå@¥9„{Æbk¨˜÷åóÕù¾u}þ¼çiY&³œô°ápp Ø·¢/6+VÿFý¤^¦¹ªS9¦+!§vª¦ÊS½['µfgMÕÞ*I’²áì¦nÚÿ‰ýsŸœ+å%@±)EoñÈUGM‰Å?Xl-Z]輪³ý¾vKÊ2˜úqô¢ËÍqÌã{¨Z$áa˜#2[§ÎÆ·=ü5Ï 75Þ*‘éSi€ïÂ}"ažÆkð¤Ê3qX*aæ(£°,E@â~gOà˜-0­Ä×À*à­Ãžãó ;DZ´kàa(GŸk_“5?­xç—ÅŸ¯ó’¨ÈqÐM“Ýóƒâ‹'ÖÑŽ×3Ér~K’¸H·›çs¡ ¬~Cìì°wß4AƒŸD‚Gš=5ú­ÍÅh{ºo~iI$œ¡5…ÍKU5©~FšIöf“ˆn¥ÑGþ(~‘ñ¶(ÖN¤™DÞ‡g‚…ŠHß0õ³ï§zˆL-Nä b‡˜¡âЬgp'ËÃDxŽÓžÅÄ{ŠÆ¬â­zn¥¸lÇÈê“=úôÌÇ_:rýÞ 7ÜRÿ‹+—Ü¿´ïÂÎ#Ÿ#ó·zçdÝrŸÔÕŒÏC*Û×¾5Ö·}ò׫>}cEqDÕÄÁÖݬӨŒóøR"ýÌ£2‰¯–q¬‹Õ:cN*Ö²?Ah‚ ‹H„L5vI…B 9ˆ«H£ÈÊy”ÚpYQ£x­,‘©Îœ¿£xöÞäWv»½²øf»@…—£ê@·È…:Í%W@TSWÕúŸÊò³šÒ‚̶Pma5üÅ‹¬ã¶ÒkáDœR†Fx]£&Bø hI Ã:ßÒi„Ñ8äbšL°ˆ¯D«Z r„á7y¸"ÇÃpG5ÿšÆ§Ófš@‰5:‡ák ?T¬ÎgSÜD³‡u>º_xs…à{E\ÿºªí\~5 +ùjûY|:Ëg;à!‚sàèÄd.ÒˆA¾†(´Ã0ÔÃ1‰ë­T©€³áx Åì]ŶŎýîXù<Å(Š’ÍfÍé$«*Ùטf5$— »òï³Ùæ™ )3§7£[ãÖFUVWݽÊÑë0ä qÛxKüð‡í»sÌiBU‡Ã+œhŸÈ²5ïÔ˜FŽªMí;·/2?âò!¾<>š,ùrFŸ‘w'Åb³¸1{$åŠ f¨2¼Ù¡QUÕ°W7 <›ÍæšpÙ{ìƒ+‹b1Jw}¨ËÓçYxïÂiÞ>xóÁ±eccKÇQÐ<škÜe¤‘¹‘tcz|ɸ¯ÏW{ Ö¢[Ê“&Ñ/ß-]Y,cýMnúTY£IG.”‹Í‰uŸ×=:kôüߟïsù\.W.—3¶2“ÞZ¼:®èŠ\Ñpõ¸¼½Þ©x¬9ØtÆ-K9lk ¯¦Þ QwkTWå帩àõ¥ÐQeUF$272¸bP° ¡¡áyÑù‘® »Zžmi}ªuÿWö§ëÓ}çõ5¿Üìîs›3f‡ÒÀçvÍÜ_ž;…u»ÝËVŸõª}p?TŠ|Ydu#E+ƒA£‹e‚6¾TD‚§%®×xYgäÁmå/Å<;`…Ä ÕT$Q$–ÃIó DÆDêUD˜¯óG‚6•aJ2‹¼–Æ.Ò_b‘¾ób=ê’IùØ«ãÍsÀEókG“ýngw›ã’-…på¯ã°FÆ Ó¹ilå G*î»Ê(£g´•»F.ÙSºëGúGÿ«èvÊÇëejfÐ/m䈄×M&ÃÌ,…q–%Ñ«8¡Ðl#™Ç«ÎóDži1¢IÒУã÷S˜M4E…@AFSñ°ºÈnÁ]‹l']ÄYÃp‘S4R! «XXgÒ£#R¿ágòèò±Ë·Íº-û“kƒŠx»Ýlýè’GÛü^¬ŒÔ\|p`^\Zµ¹wÍ`÷’øén©ñäÚÛ7„ŠC[ ƒ#Euû(!!樼$»iðÒ¥Z'Ö€ÏG z5üvJ¸3Œ×a£Õ•d³$|¤Çq‡ÈIDÆiò°0ä>o-Ì|MˆÕŠ_ûÝíÓ©°±O A%MVªÝϱ?Gž/âîïKÇVˆ'>“`Æ6' n1Î|OX 0V"UKešguÒÐR฀ËCº€¬Sf@­Â¾"sP%“NrTðJ\˜æ 8*2·ŠÊ~° ¤ól¹\e¬N•hÁÍê"{ÙºŒÜ ç ™.an‹Öò8ߌϵ‰|JßãÑóÙð[vÌbO$!2\¤ñ8ôà+Ô€Bð0\`!beU‘0 @ì/Wµ8uêÔ¶mÛÞSWN(OWå QWqÄP5ƒË{¤+£¦1®lD%±$†„ŒkñÑjµŽ·/nü}c伈jW=C#]ò¬‚ ¼ù©7—o\.dÿ1ìyâ'¬i«¯×7¼lØ3à±)¶r®Ç¤=²áoð&|šéÊTSjZxÆVÙ$hK×uk¿µîͺl{¶TWšwß<ÿô"äåÆÍ-Û[š¶4M,œˆ7Ä'fLDgE£³¢ÙÆl¡ºà9å©ÝYëp8Œéc­ÌxzÆJËl} 3ªCc arSðÉ' ûã—O´&RáTë_[go›mü´X,’ÁGÃTlJÔ&ö|zO¬5:‹âÔêÓX‡Ãa¬Þûi›BÀ†™¯!b‘¥ð¬Æq…Wàg`ƒœ@„,ì(aÑHiì„4f‘4ªÖ©8àJØÂ=Ÿ¥ëgúá îz™ÃgÁ&øì2~ï]Ë@Y°4X »á ˜ÀAh˜­ñ=¹0.ñ/-:ãEZ‹ ÃSp#l‡ó'mÆêaÒØ“пÛ<ï{té ÑŠ©Nöÿãaî— IMÓ’Ó“ã‹Ç^i'ĶçÚ’ IsœÖp1×4Íp4ÏEOÓ”÷_¹ß{Ò[»½ñȵG–ýv™¡kÜØT=“ó]nÈ4©Ab&Ó\xÝÑÜq?åêF-X*•_i”eY‘”Ix‘Þf¿2;)&‡;†O7½vÕJ9iÒÊSÌ&åܕãýs\.—Q‰NÒ‰ØrÍ–ÁyƒK¾Ôw̧iZÑS4e Í:ÛÒÒu}¬nLž+÷Tê%ýŒ߯–ÂÁ2Ú~Æ„¸¹V†Ç$f¦©R>ó`îï³kèô.xpiR©9Çæ”J¥ÿ ²û»üþ.¿Íf¢ñÊþßÚ—L­®FàMX?ÕiÏóghÎ3VISŠí:¿SðCƒÆ/TžS@ctÀYµE¬‡Gt‹¬U¤Z'>‹9c´'D4”îʬSùjU%ZtŽë¬ÊrÂÂj7ÖÎ,·æø8¸T¶éT,?%üêGsAœuû1{lf,x(hÈÏ›íL£úœ$8›lJJŠ”ªKù»ý¶‚ͨ?LLU–媪ª`0X__ïõz èØðn6×¼Üd*D\.êa>—É•05Ý'ù¶˜rïÃK†5‹V½§Úí2ߣñ¡56"¦L¹GÚT¤t*ùÕÕÔtå( < ¯Ã¥P€-Õ)îƒ/;9ßCe†¨N5\¤1 šàAÈ Ï ü¾]Çâ ²H¿Êf¨Œ"YÈh„2DK|E Sæi/­_’9ËÅÍœ7Î| {´büTa“Âv_˜ %–‹4Dg4ÿúÍêŒ9“–ÏþâòäØ1JÐâ`fiéÒ¡ï÷f~ü}Í)|óueÿkîi \O^Q]¨øØß”Ÿ†¯æQl‡"G×ZÕ‚€¯f8§Ì¦Á§ãdz–åQÆŠÌLÄ×Bo†¶6æÕ°¶›‘õ6ÙØÆ}ŠÅÕ$óRã£)Æ! þvâ!&4¤FN5Ó â5Y\E,^е Ѓ¯‰X–À`Q‘Í"Ï[‰dX• ÅaB´F âQÂn2tn%[‰5H|/ivÅ*¢§¨çVËTˆµDd¶2s£%ƇгØÍ†Åì×™>Î`5¹<}pATãݼ–å·–8iÐD|ÅÜnËèü™Ï¬Ï>ñ¹äÖU$ZüБÔX©ËS§²ò”Ìm•øœ\6ó‘súþ²°}Yé ]£TG˯—ø…Á(ER°SÇ9‹ª>W`¢Ào¡4³4nÊÐY¢ÎË!Âø¥À5 øŽÎuàé¹\§ ~ ñS¼Îmi† ŠìiÒxÐÂÐ PŸßùubU<¾!…ø.ý Ÿ_ÍιálxZg¾+˜~€‰ÿ€Wágð$¼ À¯!OÃM€°F >Øôw²û\3]moÚþWù¯õ½õå]—ËeðÁ&9™ÑÄSŸ„ª•3Ë›%F80£³!ijÄ,ƒnBpFÔ6øÊ‚ ذ…ކš_n>ò•#+¿¹²úpµÝf·Ùl^¯×áp¸ê]Ï-~Îjµ.|eáæõ›SÁTÁV[ÓÖþuý£kF+û+ÝIwïY½µµ–œe’¸™KŒèfd”r9ƒTm€iæ9f’³Ûíå(å~Sá&?ÞX[#wšÍ3óœò™­òÎ_¹‡–±næòš#Õ“¨†:†©ËLs.ØHÞn·ÛårY–Ý9·~D/zŠ‘¥‘à@P/ž¦W˜p®‰€é=åtDW6½ÖdÍ[Ë_¨ß}>ŸÍfs¹\¬—Éd²Ù¬ôæóyóÓ5uzoªÆ»©{œqòO“µÞ {}ôXÍÎ÷°(Ø ©pªóÆNKÚâsš6ÖÆ"ÝEÕ¢ªéš´s¹\kÆîÊ$”J§ÍDŒÅôù|‹W¬}×t•wªâÜcÂP  Þ(µ`-Íò{/`ÈZL)ˆÌÖy®–8bI$‡áupJfw–C‚À‡u†ó„J´Î¦9ÃEÃÌÉM‡ì!þ’âJi!•Å.")†urŠþX¢ëzm÷ ]—ƩǣÒ)`óµÃrMQ|l¡*enÇ IDATíSOYn›¿?#}v†ã+·EgïO~î‰Eߺ~ô¶{ ãyïÓþówŠ7c{'Y‰`Cv¡S&夨"בå;zmƒ­¹ä8lØ𫸠¸Gé–åû9ö4æ™5LÁJýÃ9hìʲ¤’BŒ×J¬-`K’§õ8í'˜á"+ %¬E¤~j(cS8òˆ2UDN²ÜÍ¢0 ޱ8ßM:‰Õ†& Tp@GGècæA8‰¶ ”pF˜SÁ3fŒâ£®‰õÃìj!ž#w”ª0Å“T% €¯DsÉþ7×U{ Ö\÷H‡N(ÀÏEîÊÒEI0=ÀZ††%ö‘ðÐpÖüeNæ›÷çGÚ„‘ÈDE-9BÕò<æëvŽ c±Q# EÕ¦æ¾}£Žì£2Ê‹ÌSéŸÎŸ¨H¢_æÂ‡D>äÀ«²BçA¸Fd¶ÎLc€H ¢"W ì•ø´•¿XÙ!²Ja%ÜæäV(r fI8m4Éøá. í\å¤çÆB<ðy…Kn„·A‡1.ÕY楗Ðùu2;Á–¶°v£xÝ2Ý9XGd ¼ÐW€~ÈöÂ2Ÿ× ‰´ê§ý®ž…¾òÞU÷x÷«}¯æýyûˆ]TNãZn·Ûhê˜[W3f•wåžåÛ[S©Úè=L +Lt:R‹æŽµ\Ð(bN3ôê6× FÍd䌼3ÿNÇ;µýµ¯Î~µaGô§§é’î:éªè¬è_×_ª(ùü£sG}ƒ¾ªÞªíŸÛÞ0Ðà/îjFÕhÄ}Y–ÇŒYG¬"ÿ`7«é¢nÉ[ ·ÓˆdéΡ/÷á-SÌåëfÖgæm”''“hPNH1ÎI§Ó†Æ$®\)*9=9>g<”Ùe»©[1)]y<»ÝîñxŒßJ¥Rþ!º&›óõùDM,Oå‰!›ÍŠ‚¨‡ôæ¿6{=æ#—Ï6\ C%2‘H$ ãeì óÉòýÁÔ$dîfLËGñL‡Yu žç÷~iïÜßÌ­ÚZ¥ëzÉYê¼®óäU'Û7¶¬uÑ3æ9Mm·jËFçNL›È2Î~§  &›Ñ¨,à 0ßõ$% ·Ûý^é*ÛÚÅgŸŸ¥óªÄ:{i¶ É@dáo…™ð¬s+hRx@gN«@œòâ)éÐ9 Ñêc[Ž=yÂ:ß ´ÃË5.ºÀŸ#i¥˜bHåå(ž½:بôðÁk$d…Q•F «›U9~¦ãhÍÐí§ÆÆìÅ/YVF«îø¼µm1Ÿ2üqÓ%Ù™ÝMyÞ÷‡•…öÐŽó²³ãécÕŠ6”~ö¹Õ†’ØíÈqV¢9¼ì©@³çæ'›"Ro]‰žI™x,l®qØz7Þ&<4C£ÁÃÂHjA‘…ysHŠthØœdr$+b­”L¤›‰yÈåØœÃ2BK% ™ÂB:Ýd»©ö@±<„§ÞAÚCÁæ!¹‡šÎR6´áJÆ”áïŒs®Š#ƒµ…>v[hmÀ’Ã!bu“•±‘u#§ÿõ¡tå¶ñYÛôóú¤3g& Ïé4ùpL0êe(ÂH‘]v¶ÙYãbp„û ~÷Ñ¡lãN©{%ÔAþêfa–Bž ÆEžñ2«DSIµZ^dpÃaoæ¸Nåe‘Z‘Y:˜à¨iVZÝDJ< ‚½:Áƒ"µ:#^Vë8TÚEšE¶HLƒk,L·1–ä¯Â·( Ä˜@•õ‚ÆÛ7Xh9^à(lX¬3Îú½¸|ó 2oÃjˆò±AZ^’îø…~r¯è˜Grñ ØX™ä¢=Îü)ý‚N1𦷶ÀÑ¿ ×^wÀg Â0MãnèÓù 4A –Ãà?¹ ïÛºmëÁO¬ÙQc0¿¡]#Ž˜¼^CsÏüŠº\.SýÁTy(?L&Xyh6‚²9+c†WsïlÚŽ”—kÞe Œ_ÌkùÝçîž 6jÔ½«¦+x,èp؆l'/8©ZÕ/ÎŒòþ¼cÂá“}ñ¹q9$Ï›iD#¥qý‹ûcÓb¾C>Aû'¿+«ÕzøÜÃ"¢oÄgúoMêüwkøBÁÚÈîF÷Åœ©2ÿÝ8Çx:Ó!×Ò5ûC¦éɤ ’D³Ä0’éÐñø±¹8•àîa/¢Î!”LæB(Í_³(ð;…f”HýN«ütè¸ufÇð¹\¼@/n©ˆdN9{\àÿH4Üæª¥*O¤ÔW"òæ8¤RË3ãÉxÕM·¸¸±™¼Œ"Ó@¿—h–G‚ þ£¥qW¤î1]*¶¹ Ñ,W åsáûi5—¬ ^ 6Ü%$;•|´!41f$ÇÌ“ ¤y+ÀC~ÞGñÉQ\>¼ó‰Ôu“s¡¦ðtš 2=ALfؤ“°S¢!ƒ«‡–Ñ ézJ:;Ç(µq‚:+³ÖñK§«Hœ¢©ƒsœ„ ÈÈR¥–’BEŽßÉWòÈå,ß«?ò…Ãöi¶ZVÉéh%‹¸[É'yy€¶Üµi¸§×¼~½¡¤âk$*°lL4³’€B‘uY–ù¯#£ÜÏH$Ç8¨’ø¦—[Xtö€¢0Q¢à$,±]`YŠ$¼ ¡NâÇ U:óá^ ÿíaQ‰¤Âí®Mr/$t’:3tnÖx²à“øœ•æ¥ 5%¾Ž"› „A’iÑ©X}‚®ýDZa·ÈJ‘jN„™«ê?üç[ôÏ¿ˆ÷U(ÂR"—âjfÉ Õq€%Gõºc8,ØàvØ€oÃì€7¡.A¨ƒxà5¸¹ü[í¾¤»ä,ý¯šÉ¹\Î ï½wWß(¤ ~¹‰,ZÝFp/&0 ÈÈ^nMbÌrWE± NµŸò¼å½²œ´ì½|¯C½ƒÞT}ʸB¦*c÷ÛįÜr¥ä’’íI#?u‰IÙX4ªNe‚É*™í"óhßÕî óÿË‘ÍfMá†I¢M&¯Ï¨YÍÔò÷cRÁ‘lIZ2–¶§Ú<§<û®Ý×svYǘFVFj1& ñ'©+‹©š”‚’ÿûaÖ¾æ0iyM9I«^UÕT*•N§‰D*•šZ¾aFãÃcŒ* ‘÷cþ2°j uO«à9N÷)wÉ]깪'Þ?ò/GRõ)ÓÃÌÑï˜hȳ™ÊL¼5®‹ºYÅNšSËŽIìûPµØ?[¿í‹"~ðk|¾‘æ6¸Tæ…µ+TºšeêZb *|\Ð#ìF9îÄ',*ãn…¥u\8D¯ÎUp©y(ÆwŠÄ5j»Ø'Ð,ña•ïKÄkY2N³BE–c \=ÈÑ*šŠÔ“Ó±ä8»–¨€}‚Ï <úð#¡þêÌÖÖ ªkˆÇ»×»~FÕ[¶Îuäm%½òø³ÏþÅ‘W¾"¾Ý!;> ÿäåª{Ö!¿ó^ù;ßÊ(þ™¼rˆZètë¾ÂÆße™¿öDéK?!Øp 8Œj|-¡~ÁöV^$˜Á;î"Âla’A¢9jûpKE¢‹‰g©ŸBŒ¹¾²œ£ï°ª’mæ ¦q Zh¿›ÎÒm2sT|ÍŒ¿A•€k‚lŠb†žv<ãÌœAt”Áš±“~M3è£o9©-|Y¼Q„³EmDŠX; )X¬´4Ó;ôûOè×Ý+Ó w5~ì¼È+ŸL¹FÄRlºB¹óví‚MêÒïæCVVYè¨!×"5³I”(Ön+ÝúÓð—×ëì"¦Ò!Ó8ÁCiB%¦ ¬µá…_噓gTà›~¼"Îëzù·:ÍQ# µVf(ŽòÇU:_®&0È¿ÂgtŠõøFx.K¤È-:E¸³Äï5>¡“—‚ X YøÌ‚'JŒÂrð´ÈÛé=ÂçUVA\åk:~¤Û¡åy8j ›3>¨ÍYɆÇõÍ34 p'ÝËäKõvë÷ýœ//Ô'žJÐ¥ò1ðÃ'áuØWÁ7aÜ?‚…pÂËu~–b#ˆðOßù| ïìs¶ÿºÝ—õIöÓ\‰X,f„BÃwÃÜl¶æ4Ïûä –«Öžq@øÖ7ß²yåÝ+³Ù¬±m·gícçŒi’&"V­ÜñÕ’M ö_v¸µ¿5jž\zòÜ=ç¾°ê…æãÍÙþ¬Ù¢Ðtm¬},Ò)9J »,š¥Äds×)PÒK†RªÑ´0¬ù AÅwü5Js´¶üÌI¶UåââåNgœT›Dû6•®Ê/˜˜–HLKÌzdx5ÐVl‹ÌŠT©U‚EÈ…r;¿±³ùoÍ­/¶±XL–åd2™ËåŒdSÒJǯ<îíöŠY±¤–Ê_bù­Nª¥8“¢±/1Y怚1ŽVÞf›$??uðÖ„Iß#Oœ¾;’"•“'ÿÒÞî½´wß­ûüdcÌñÉâ]5¾>ßÈ’¡(Ìùï9þnû³r’ÎMdÞ•˜OÙ­Ù ‰¸FÎLxLà°‰,W‰èŒÂCLË#ˆ +ä,thœÔ¸$ËoÒìKÖ8mÖ)tç™$™cP¦VgPC–°¨Ü¯ÓQ5úUÂ2’…%* <]¤^g@fy{œ¡oäX¤qÄIK ‡ã<èFÔèÌ»öu_õmP÷]4Êhk÷J¹9ùä/…Ç.š[ZfÛº,PFK>¡f›tð¢ÒÆ/èß½2òï¨zî‘ü‰Ü%ƒ…’ÖY÷eµn¡Vwlø«Ï)?¿SýóWÙ<Çö\zuVìÖèx–‚n—¹UbšÊ~7·Ø¹f‡Ð­²&ÀW ŒpIŠiy~1rPWÃbø˜8ƉŸórƒ(ÀeP‚f-{«ã¦^‘\½o×…]ÕûªE©{³nlþ˜¤H-G[¶^½5ê‹Nß7}_㾎;Þ¸ì iPÊóù`^©RÒuéþ•ýîqwïªÞ¶×Ú,1‹I©0= ËÈ‹Š¢¹¤||ØŒÅS‹A:£þº™fŒ˜n,š9»fè‹lÒ)Íüd´MXP5<e›<1gB“´ðþ° jIÕ­z÷µÝŠW¸p`|Éøúo¯›;–æƒsÁ ‡­¢µØuN—}Ì^·­ýùÃX6ûïÍ¡/—06E1Ê%f!h¤ör¾å{kNMŠæ —J¥×¾óÚÅ?¹X/èF=§iš  ¶¬­joUË -®˜Ëš·×b±È¢lÏÚC'B¡Þ#ïÌI5¿Ú4åMÂËÿԻʕTº\ iL¨8`¹ÈÅó`3앸š3ä4Nhl„^µ*ãNœ~^I3—'ð texJe@Á›åOO4êlÕY£qÑæd¬@J'«ÜX½\–Cö å98ªpòbœ¶:fÙñ™UâDœyD 9ÐÓ‹ž«¹¨Îöý5Eì%^ s~C] êUa½òvh½ŠSùÛÙÊÇþ¤Ü*ÍòZ~|MðÕs Ï/IÿûÃún‹VáÃ/©K²$Ë’ƒÒc§&î•í·^dzUÆŽ 4h8휟#™`§Ù%ä,.)A–Ãsû©r¨Èô$=*‘ *‰2c"Lˆx­ä,ì,âHàp § ŠtM³9â"“¥AÇ·ŸVY'ºÆ(U㉠çQ'´b“ÐÃŒ…HG‰•¨±0½ÄÌ ¤4‰åDFi²sd˜ÑqY±PòßýcîÉ ÝGêŠìÑ9_bšøç 3†¬‰ÿgîŠw/Ê1 Ì®rä*­½GCH]49±'ÛlÅËö ½¥~õÓ‰‚]ãÏ9~£sD£ÆOꙥ@š5­Yuzœl‡«m\+QJpp²Äj‘ƒà*ð¬FUŠÍV‘jËTªø¢E6‰,ÓiMñŸ"Kt.2üE¼Ö Ã3xî—×½eïÉÉ4 Ü¢cѩؠãU¹®/²«ÀºîQyNà“":çBZ¦QkßB½Ìë` À "ì•Y®±éïßʹð(Â)Hjl„« ŽÞp6 ¡ Þ„ è‚ x6ƒ1|ù¸ÆS“Æ„·oßn*>”÷cŒþüÔBÊà LÕ©;ãØ¬9X:)ИC»åÒæ&‡ÐlKˆ¢èóùü~¿Á}w8oêí5Ϭq—ÜåŽJ%©”ªIY"5¢ªqÕ:bM5¤²Ž¬#íXõÀ*Ë)KLŒª:4í±iWt&Û’™™™d[2ÎÍy~ÎxëøÌ—f{‚F%Tnó1U²¨œ´V¬Ï¸§8M èÆ(•A?›äÑ<©˜˜ªˆo2&ÊWU³k{nܳüþå&ÓwzOy“³“Ïu´¿Þ.Š¢êR3µÿ _Ïžþù|¾saçHÛˆ%ci|«qÒC·4IxþŒ¬‡r}ÞòóÍg1I Æ#—Š›¤üØì˜T’ä‚ü?¦«IGlvlð¬ÁYoÌ¢Dyv4Ûu“Öj’8HyuRº*WS47&á% –§«©÷-ˆØÒŒi¼_€!}°SÂ5:‡ K@×yjàlz/|¿Ä§R4ÀtX oÀ[ÂrŽó¡·Ð_†nXo!aa< gÁ/’\˜d9¼– ðqy wŠÀ–$W*Œ*œÔèY.²w‚ý’P£Ú‹ÅMÜ qâ: šú½'…ëH!g(’vðYQœ·¶™ù •…`çc·j7Þ/}æCúcJ=Uƒ\í" ~ä™Ü=÷ˆ­Ú™‘Ãm¥×U¡¾‘ñS4H¨~"Q^+1aeEž ¶S,r gÈX±wÀâm)r39`b€úZê8‘…8i Ût¼3ˆ«,”q¦éh,BïúÞÆMhàŒ©åŒG¦6Ó{qïøÂñÚݵ‡Ï;Üöt[ùÀ»Üþo.š{”÷~º©ô^Ÿëxà$Da)´C«Æ,™OjÔêôI–À 'Mnöê< +2˜a:Øá Ì*³‹,+qÌrP4^y:~ÈÂ`–tŒÿÒ¸‚Ð"ÑV…&ñ¢ÆùðRŒGj9á¢}RâÚÇÒgïWéÕùƒNX NÃíåC2_Q¼,Ê‘O¢&ié%ëÂ/cSÖmå{^ŽøÉsÝ…ÏÜïa®Š¿›ü0v嘇cræŠkó›K‡¹žLé¼ýÜuN6?SÃgä8^/U ãÔDñѳԉDòÌ_=™8{4þ”æõcÌÂ9L(O*Daù4¡ý4ÚÉûÙ‘@˜KÔ†ØHE#³ÆÐ¾ž1;©žAw€TÛöFzæÑ×Oð$GÃÓ‘,زLaµ GE±Ž²k”·0â €êÂF–©Å&㤊iÞ ²;9÷G©D³Ôß1‚ZÝD„¯þ¶¸éJµÿGùMŸžøÔ£ÕÄÜ|17>Ïò›ïðâÊÔÍ?<{7/~ÜñèåÂ=Ÿ.õïÔId9.±JEÒØbç8a…m0 ¿ç`·›+ ÃJ‰Ñ4µ°>ÆÙ^®uÆ8¼ºÈj ƒ,ÕÙß×ySE,á ¶“ƒ×5vÃ(Á1™/±rœOugøƒŠG%éä6†KtÁV™9^³³ëd4vÁþ«ÀÇÃô_§_÷$ïbÚJpÀ˜¯Ã]ð¸þï¦!ó` ´Á1¸ªaŒA~XÍga-<ð]ø \ /@ ¦ÃÓð×ÈÜ Î˜L±Îònù{ëiij¾1ÁŸ÷hq™Íùâ»»nÚe(~¿? utt,]ºtõêÕsçÌ]°`AKKK]]Óé4u™p&ÊHZ©¾äŒ8ƒƒæõóù|Íý5‘›#ÿtV5JÎØ4ãÿ Q¢|רÌŒþnǤi¶©l·IDmûß©åŽùFúVõÕ½]gòtßÿáí<Ãã(¯¾ÿ›™íE»«²ê²dK²eánc ˜00-8€!@à! „TBB ¡„<@ BxB-„P 84ÇcŒ{·d[–dõ®ímvæ~?Œ3Y$ $ÞùàËÒ5»š½göœûœó/â£;>œ7Øq|Çê[W'9F0|ð¯ñÓÉÚÛÖv—tû7úkþ^S¹±ò ~X“hüYKñ™qäŽ64¿÷ú½YKÖþÏãó•õU·ºã‡;’Ádããiwzï¹{÷\²'wMr•—:ÏT 3!òcöIn·ÛØ-ßÛY­Öx¥ƒì«ÍFžÿNû–Ù–Ç®.d8EÊFIi«Þ”‚i¯í‡é<¹ú-®º¼æã™ 3TEj Í¥áêÞþR¨–¨ÈðvŠ»×@3Ü CL{æJn†ãÎÀ~éøE’»S 3Ü–Áa6*œ'q°®ÄßÇ÷U^]Æ3±ê~žXNC+•½´yá)pAî²r†ÊJøhðSI§^ƒ ¼3A…¤y¦À ßÖ¸Kp.쀣à<Ø©qüâ‹{#ýëÿ²P½*`IXb±X®ÛÓÜRf Ì=7…ËêKµkv›Íf·ÛM†P¥àîSï~bí‰D"sfšÙ}Ãî)Oɸ2ëî_W| ø„gN°¦­)þµ§vv‰*á,sÚâ6 aK¬ýÑZW‡K"¦Ö_.ÒÁ°ÌÕûTK”Ï’ ÿ‚ºA_¤~:63 ̼ IDATs«YKVR%kújâšCÛóµ=óœg¾•êR×ß½Þ3ài|½Q 6þ`ãê_¬>ñg'†–þf¿ï°¯ho‘CsXR@ã~‰Ft6”8ÆèKE"‘O½l£ 2]¹×§~:“-0BÒyV§ïˆ/Y’TóT³øYÐ!„êVw~wçñw¯¤”C—˜5pâ='6_Ôœµg͗驚å¾ñŽI®¹&cÄ™rñú¦ÇøöÃØÙU4éÈâ·Ð¨Ò HLЙ.xK§]gm‚3¥ =üt%7vqj¿4Ü'jŠDìç$É8¬ÌÒÈ‚ 6ÙѼ,U©ÒÙ ¸ ‚‚$ôX¨œ•G äçSÖË”Jôè‰ù~;C…”ÃïK-ÞÅ3]ÑÊ•í¡‰:‡$ùx¦ võÖJzÝŽÊÍ5x<”ËtxIgo~™¥·º/_>µôÃÛõ Å3 7#u1eˆb™‚-{.eyd(å{ëNÛþòÇ–[¯ýàq‰ -UÑ¢øu|nN¤2úâT”Ò&¯î… «ÔX(8§Æ„0¥6™gãD5f¸ˆVÑ“áè‹‘^f¦ƒÖ2l2yAR1¶ SàÁã#\C¿‡ÎnDo ™]TžÈ† I— k#$!oÃ9ʡɤ?¤ÌB‰‡©>‚1g«ï/ÅýùÈÍ©*mÝyÒ¥)ž'ä]úâ„ïÝeQË"|°ƒW~¤}ù]ýÖï¤ßÝÒ/²î« WºvÝ躓JCÕi†ÙGjŠˆ÷0aE ÁT/2?ó3ÅO\¥ÄÂÏa¾Î; û%X¸V£S¥K”d_ òáCÛò8'E,Â!ø—oú©ˆ‘UY©ñCè< _Ó¸AãA™…Ó i™³>ÐøÞ^éö÷˜µ :hóÂ(” ZÀ+ñuAµLX5žÅ¶ˆ+Û¥»ÖH/æó¾ŸãSô{ùéêÚ¹æižé„ \uЬçý’š:†ЧpB!"Îj¸‰9IkõRѵ®„ œ ï@žN vCð €à†£à€yðѧήÆƒ(c|{ 6­yà”Õª¦-é´7m¶Q)÷ëšÛ û¬÷á³—+à½ñ—kVÕ ž88áÈÇc·ÛKJJÜnwuuõ¥–KŸw>‹çÃû¸»»[UÕp0œMdË·•7}µÉ1â˜÷È<«8†H4•vu]/\S¸ûþÝ%;JBµ¡CËYÓÖ~s‚‰’ȵ±0•¥ŒO—˓͵]7ÐnÆ*åö¬þ¥›3sŒ1"1ÌŽ¢ÉÍ2À)&e*ZÝðÓ }‹úúNí+Ü[hOÃy¦ýéÖe­Wøû«—Å\~Àš¶.º‘œ••¬RýAuϼžxq¼hoѱ¿%$kÆj¬Õx®±)ïk^R®XâçäÔ\“™gB3 ’¸èóòò\.—±ªF 4Ò8bÕ¬k+Ú–·Õì®1a†À )peá`øà'?8Ùs¤ýépCxÖS³œ#ήº$$›ß¸Ɔ#2!bIX$MÊ{L:’¡)!%«( e¼Hÿ˜Tj»¹²&_D„)dãM™A• `ª‚Eà™!S&è–¨nÜ%öVrKO×Ùĵ/Óæå nqÒ&.S's¢ÊL‰L¿J¿Ä™:çuî-ei„%š5NÉŽrÎÅ`“9YÆ6…Œ‚ÍÄ(Þ2ÎðX§5 Ùþ|aá²Aì‚¿ËDSLéEèŒJvWaÃËÌí±½ ÊÕfuæOF.Ý¥úô:’)kðÛß)k Æq»(J0!A¿¡ ÔªtúY²U4î—꽃ÑÿMW+‡ç¤ñêø¬XKH蔦è·Ä.‰Á’ Xpö¢ RVä$1+áR¤a ;¨¶v3œÁç¤Á޵«Mfz³°¯’`šhŠXÙŽJ”^W¥•˜›N&ˆÇð((!¢1Ê[NàÐ<¥^,Övq¾ »ÿ ÝàIúŠb7ÝÏêRù¥³Gfí×ê·X!k‘®^tÄ3óc×÷kÛ˜ãP)óÕë:K쎛®Jrq…•¡>z2{DÿTÚZI΢öàÌò TF4Ë”yÐtÊœ5Š+CoUq~Óê”HTJô9 –áï:Y˜«Ð¢s] ›“NL'”†Qx½’FPwÂ7²0>ø‡L‰›Y*ß”˜¤ñGN?ÌyHƒgÈK7‰Ì‡<±AÌ„.hQð ždoÉ|M¸þÊ…ÈÍ”VŸ-x‘¯n–6/rW/‘¬‡Fh„ ð03»¹)7B\ÐÄ+h‚—½$òúK7@'ì†m° ܰÂp ¼ ó ôO GXa*H0Nû·é*·(IÒ¶[·rë)“>œ)‹ N츨£le™ÑÉ5‰0£Àøq—Âè®äNæsE"Ì`g³Ù4—¦¨Ó_™®(Š1µòûýŠ¢«Õ:(÷*{‡ÓÃön{gggÓ‰M‘¢:áêpý›õÕkªÍäg²‹ - ›ÇÖzI«„ššòö”º÷ërC𘹺™_ÇŽR©Ô½1é*W ðóË)£qj4-sÆ n“I¶5h­v»½·±·k^×ìÍN§â•ñXMÌÝëî8«ctòhà` °;`¼I¤2Ò}J÷¤w'Õ¯®ÏEЕl+Ñ%ÝÓã1n–™W>+]hŽ\â×ç§+CÖ6—EkÊšr|FóÖh›ˆ £dŽž}Tø„p‰¦¯6Í¿k¾SqæNÅÌM€ùt Oºðí÷éi=Z…¢à`’Qœ#N³±i,b×»ûÞ„ö¥ŠRGO9j°Ûíf~5d–„†Ž¥±)1á‚c€²_$]E²¼¯áƒ*™.?‘$Iñ,> ¤¨Sœñ.MgÓ“áóØÕÈÙqvÆõÄ<•b‰6(-¤8λvæ(LðJ2èÄê#”džº蕘&xBbc‹#lõ2 ÞÈR.>NS)ŒÑU4”Þ™1Ò»&Á›i¾¤P¬“”ðjìƒ|©ËŸP †î~RÔµ&[¡?=]i/Ìftõ+ë×<ä"æ!æÍ04(·âŒðs‰-y—o½#_ðgÖÍ…xÓ&±yST)ØK±…ËSúòGÕUò’è$+z)¡®~zdF°ÆV°„ñDè¥Pà ãq°s㔎b‘iÏc¢`ÈOb”U¦·ReŸy˜¡4–az²ÌI"ã®$¡7@q-AE5 YE q¦À!sÄ‚VDo÷H²Ï¤*Ú¥ß~[¼sÓ[²5¿wÔøGó³eÝT[ˆÛ¾÷×x¼Øõ§%ŒäáµQ:Jvîì9‡ÓÓ[Ùž²'i²:YÛ/¥ÚlR"¬RjEÕÈ‹ó¨`ŽB™B8CQ’´„]f®àh!“b ØiµPæ 4C… :·“Þ+e–X˜#HÈ d‰ v‚dY•f©‚°Ÿ}“X4HJa…Ì5¦Ù¯ÓÊé+ùÃótžˆ3%v}Ⱥ°C…B½Î{4%æªÜ)¨†nú¹6ʶ:â°Oé¹Qºé5Ön( ÝC‡g‰,Ô˜¯Q—e•Ê,™ À›e¢ÆIq\pÄM…“¬Ê…ªØBèY¼Häk æ£hé‚ÇK6Lª€º(Ãntõ¥dãj|äáÃ’®sÒk‹jzü½7¾Á=+|/]üá[ê7/Îï$@ Lq”K‡~…âöP¡D]²I<¡åÃ4½)+¾(û’Ô»)uQ,cQ”œ°Ì•’÷ʉ'³k2™V†§£‡))#>Ì`1ÁaJª*%2De!ÇyVÒAÞo¦CçxšE6ü<ƒÔ&(”((G• Lõż³—}:g&é¬%vW˜½>56DíG©q£&Ìcu+Ϩ,ô’ ¬ Ù?0S›5¨Ø¢uŠcG¶üàôðžÅÙugÇ2A‰B…ã²ßYž(¿pá°þ['˰„)q^ôÍÔâ ù?ÃN)‚ùëm‰_þŸöôW2!üEew!“ŒÈLÕy#À|AžŠ ¢°2—gX+8¨‘x³„S\( IÊù‚`ɢꔀ Sa¸Ó„m\"áÖ‰È,õSÆàœo”3æ~}nç¿Ï½‹9{ˆSvqõÏèù4ÁÛ“ùÞŠÆ*“a.ôB- ~“y—*7²£ƒÌLµi“zn?7²ö(êð þGíTtɳ§KoÆOCà\… ¶É,‘9S°ZÁ+ ‡a9< >è† l…¹P%P/Ãå0#7]½˜÷b’¤/ä“®ŒæÌ1*RX9zÞѲõeÇ4j3ÖÞ/õ–m*3osCíx_(£m˜káñùé*¼`ÖÙlÖétf2™ÑáѲÎ2ËVËÖàV©Cª»^‰*±ÒXí[µ†{¬Y™Í@›Íæp8§Ò=·{Öc³lñi)ï€ÃËŽìa»¹¡6/5÷7c$esÓ•q²™$Æ·•r›>óm¾Ê «j0´|;¦¯5o(v…]¶€cÔÜtõ»LüÈÁÎ\=300rƒAHPUu×»*×U(4/uÍ/Ö¨vµlSÙøt%I’ÿK¥R†¤É»Š1·™VÇ æ¦+³#Ø/IÒÖ«¶–n.õ·ùw¨tgiÍ?j$!™J¹’€¹~"º®{›½í—µW®¬´X,¾Ï2`9pù)OM±„-¹,ºÏJWŸÅåÊMW¦$‡álbÜ8³^”$éߥ«ºV…h‘¾'¥ëá4„N̆~˜ÄªNy ¿ ê‚>ñúïŽÿ¥Jp«Ä,‰9YÖÁ=°¾’x>UÃÖÄC‚™˜Î‹I,2ÇIôiާ²RP¦óc¨¶0C¥FEÑx?AØIž…'‡ÐàÜ,ë3¼ogz *€G!otð ­íæà;gÆÚÚÃ÷Þ–™§^òÓ ;Õ¤Ódê¨êãA'çÚ8ÚO§Æ” –ÍòÚel™Yš ÇLóÇ ó2Lð£ö“pP”åÀ(’h»S=8ÙñÊò.æ&ð%ð–袯˜•¡c˜ éÉ´ÇñXÐud™$¥=L“q«¤Üøóy/ÄKæe©Lc…õðv>óÂ8Ž0+ŸI^Ü Ju”IVä0І ¢ÁÊnüAäNœ»…$'qtÒhª’i;¥Ûï´¼·°j$˜Ÿpe£òºJÝ^ ç)]¤¤Çw+Ù…NÎMÑ݃œ(µ%Ž ¥W´)·Ý^EäòÀû ëÒU]‘ºíå/ótÞ|%Áí¥|%Í¡f¤"¸t"Â"8=C‘dsãÌQé•ÈÔPy/L§Âé:ª`ÄB­DT¡Za‘  n;œ¦ñŠÎåP¦òú0UScüV0<Ê_µióøöC|.±³X¾s¯–‡d–¶Ày!F4þ¤sµÄ<¸ð:Ô@>é‡àEx ÀR8Uª¸DÌÞ+ÞÌÀT+Ïê¬'Ü CÐ%è‡ L€÷ábÀ›ÐKàXÅ0 oÃVþ¤ó*\j¦«-…[ÞßñþÈÌ‘C_9TðjA:çøÄ #fQ"Jïâ^‹_ÊJ¶ˆMR¨1ä;âËMWfPC›5…\ǰŽrÓ•‰6§ô3™L& #}Æb±¾¾¾®®®Þ£½™ÖLQS‘­Ù¦%µõw®/ÛVVº³Ôœ÷äΙŒ o³Ù,ÂRù~¥#â0O_^v¸åœ–‰ïM´‡íc.õ³ýfv4D@Œ ÝñÏʈ¹•ÊNtnÅf «çâSœQç¡Ë%«“Å;Š%I²‡þ%S’ö¥7ÿjó ÏœP-:Öè³HñÂxÊ™Úáþªª‡F'H3ªÖV6Žæ·çç¢L >³Â3eˆÍMÀb¸ùå˜;2¶ Æ]ÈšK;pÉòåùûòãÁ¸=b¯ý{­!5kíŒó ¬G®iµ®ë–QKð£àÁo,ÜWh×íÖkpsÐ>j7¯Í„hþGéʘ˜n–æ#j" ³!ñïÒU°½”Ðl8 ¯ÁB%¬–q€z²óùË&Þ‰fUDÊy4Œúe‰ W+Ôê„Á"³$‚s˜ûá7•6ºL±±@á7ZŠwìX‚,hdD§0NH' ×:((bwO9ŰN{¿ ÂÎF8ÍÎ'7„pfÙªPiÅkãµ8jÇE³‡4Úä ÑÞZ6ºñì~qÔÇqÇ1ÜB™ÊIzùmñ›ÊäF[WqPmIR”¯õ9Ef€CN©¤!I†D’ /6ûJŒ2”]p]ñ eô÷1|„‚ŒçTTå#g9ÃÓÏä®rÚ½(ƒWðl!rÖ,¾BÂh¦†°ØqÉl R ,Á’&0Bw”ŸÇXn¡Ó†ì¢s ]Y.—©r ±ÑC0€[CvòQ‚·‹˜d§`©!7½Zè wgEz߯ÁŒÔËÁ$çÂÚ‰xÒµ}©ëoóõÕË¾Ó Ž–Via{Í~í¤ýÙoüMÌÚ]øõKÃÚÚÙEæx¾¬°)ož“lù³vT“¹AÐ#qÁc!*S8²tBÂÁ,+¶,½.ò5&z±(t¦Ù¨°ÄÍšQæYè„#Yº ébX!‘Å&pKa¾Ìé‚«@ Ã‚¿ë¡XáÁ(ÿø?Îò¢-æÁø]µ|ø<Å7ÔAƒÂLAðZ©C¿›½¦eh“±I4èú&±F‰>ÿ´ôâ ]íGû-z ?‚<°B3Ø-º>{µôf‘Äa ž“8GbüpL„^˜ yÐ ‹àBØ Ï@58 1xöƒÔy¦ÃÙfºÙ<²ïÉ}òœ×œçèräÆsê#˲„äìvÆÜ±©Ù@Ör Y”l/1NïŸ;&]ç]OW¦ŸV®-¤AuÊf³F™e¢TUM§Ó‰DBMª™T&cÍôÌíi|­±ÜVžŸŸo`Ù×5Å&ÆpHŒ˜Ès ô©âo©‚”f×ʶ”YV³‡iÚˆHŸqŒQXÈýD¹í¹ÍR³Ei¦´ñ°iÓÞ¸†§”Ífsö9ƒ­AWÈ5¦6m]ÖšufõaY’ÃÅápqx¸|xûÛ»¦uUn8VW™eJÓŠ¦êw«}>ר˳å²ÁL|ЉµÉ…‡˜¶g¹Šc†R‘a lŒ²ŒrÓ ç1ŽžtÔ",6MHº“ûVì›û‡¹F®Êu·Ê­YÇ(xI’dMZmI[ÿ²þ’]%š¦IYi¼€Óš® é–\«°ñÍ\‰ÛÏuöô³ðayø—¢m Ê ¢á³e‚0z/³ÿ‡KBßþ†6{ J -$þWf¢àÚ,¿†G¬|Íq^W¸AF“è 㑱ûy>É×ãTÈ /`c‚‹‡pgøA’NÁŸegÙf¶Âõ ÷gQc8ŠY>ü÷=é‡ïÎ<ºBÄ ­„z–mMO‘i²[+ÜŽ@‚ä†÷]`ØÁ R”k .gd€G#2OÙhÓ‘»H¤ñZÎÐC]ÝO¨„A¢fRyøÃ(#Ø= zéJãuãͰS'Þ~Š­ì=Äïòxf”`Ò…VÖ ¾dÇ^LwšI„zz™¦’‘)°qAí á!&©t¶R«`´¼u A!ò€f…)°2ÑJo•#¬ò2Ký²9¾«zË÷ŽF½Å:Q6‚ßr°G>ÿ—ê¹Ùì [z¦í Ùi‹„ì#òß¶wV¹i‚|*#”ZÎÚ?|ÿ}zËyýÏ4¶C;œ'ñÂMš-x5Žè\¦³ÍG•N·‰ÞŠòU ¿Ì»Néd«ê8ÿppq–*•wẫ킄‚Ј)H2ŠÄ i|UF(‚©à…£Ï—áoð-X?†¿I4BÌ Á>-ËbpC©Î[¦:Ù'³.Š]æ×Q7à=h—ySð‚ÆØ ¯Äõçê¨pM–ùp@b…`9\ Q‰Ã'él ÃQ8fÂ"?ëCì‚ý0¬0£pà„2ØÓ`"TÁÒ1_ÎÑ飃S%!>ŒGñrJÆÉÅœ:=.š¬Ozz=–ËRpnðù@mtg†·Û[Ę`´_Œ¾Qfý1c(i%¿7¿giÏ´·§9N=Oß¹`g*•Êd2¸A&ªF]Í._·ï‹€ÅË?*/ÿ¨üStK-–Ïz¹b up'‡g+ß¾7Ýÿ ÛIÕs¸‹ª áýXÝ Øßº(òÖ9â¢×öÖô¡Ål/Ö-Ã2Âìƒ+GŠ˜>È\ù¯³Ä“ß·E`ƒEg@£Oçb•‰:£p›Ä2A<Â:£tÉ<‘aI’Ì-å ·ªØt!¬2SÀ'Uø†Ê}¸Kg¢Î¹­à…Û}ðèðäCEñQl:>–ÜAKÐÒòF§Â ¸A€N‚€Æíð}'ó²ì Ñ _Ecì…üüûÙ;¿Ï÷wAJ@”„E¢ â`+áo:/‚R€Ž*QçÃSp4BdIA <'Â9ð:ôÛÀ ‹8f¬óP¡ôŸªí#SFÛËÞ,³Ùÿ-éÇårUo®¶l· Ì(Þ^l†æ11"wÒ>fûnF¯oŒ“l®‡¬M <¡a>û©}–”eÊÆ)_õqÿÑþމ!W¨¶£6¥SéŠu¶¤-Vk;µÍ޽ ½ DÉdÆ ÿÿ¹Cûda²ùêfã÷5Zâ–Ü$gT¨GN;20u`ÞŸçå¯Ï×…>¾ “eYê“&?3Ùh¾e2™,Ÿh±30;Pýju¤.R÷bŠúY ³ 1nAƒ¤Ïw:†Jò¡ '“ɦ¯6M~uò·ŒÅƒÅ‰H¢grOÞö<_j‚æM¨ª$MW¹eîÃ+@5¾7r¤ywÆœ0þ‘*×™ ñ¸À­á{ø‘Ĥ0·nötS2@¥†#,áew ¤à1p öCàd+s]S<¨ós˲|Kág‚³dªJèêcb‚Gt²ph:¿·2CåÆ mÝô–3ÇÇô¿¬€ Wæ#Âìƒ\¤òíce–éiêFÌ'0 ±‰ƒè1>˜À5¡+® o_šôtË¿º¾°sÎHhg1 {ieÆšôÊG³ì‘~ñlü·FŽ£ÍO´™:aA™•@_Só \M±]b›së9ÒÊ„ùi2A\£xFpHôƒÂ6ç6tA£ÀÚ€ÞÃ$'•%Dm$º©©¢øQ;,ØMÚÁS¹-Á|/)™žä}H*I•Ãqö‰‰{ÿªÿ¦›_=’¦¤çÔ¥=g 4 áØìµ^_“ÏHô¹_EKDÁwïr :ú&÷±€ºýú+×·ü~AêñùQFId¸Fc¯>î ÜÅõÃX@íÁ¢1ÛÆñYÔ)Žpœ…É—S@ IDATìÈý¥¾·{„HëË 1)ÁŠ Ã}$`…àBªÜ,ð‚_‡IhÓq40ØDaš?P”à¹$õ°Jçiå‚r¸ –¼&kTZPtþìGN³ AÖÁŰ9.°Â<&ïb8® Ÿ&Ø£S$h<Ë`?ì.æ;NÊ;¹FåX-2v˜¡ó°Yß›§þæxþ»`<¤Ó$‡çáaóQ‡ù°Žƒ ûáQØ{a¨àˆ±ž ž ÌðeÈÂÑB–FùNš¯ÃŠO˜V%d]΋æe¤Ìço!Í'„0sÕ}ŒÅ1ä”̺Ĝp˜Øå1póLI’Ê»Êk÷Õ®¼dåyï7{hv^o^___<tt× «~uýŽå;æ Í‘"ÿbï»f#®}êT)w§oè6³;gV¢cZf2þ·²­fãt÷í»…M4<Ó`ü~Ç-;2þcÕYÌ  ×ï¾q÷ĵÞhp´8¢Ñ¨Õjm¹¾e`ÎÀ)ß:åß õE£—˜Éd‰D&“QWªª_ýâÖ&ÃlÌaæ¤\+/³3æ¦Ä˜?e–‘TÇд¡™OÍüïôD¸-ÜVGß~b 7¦hPùœ‘@m§Ð9ËÊŸ¸7ÅÁ ?2œ&2‰k»° |‚²(ö5ä ê“Dü9ÃÄÔ‘kàÉ*Ñx¹ŸfÁïºqÛhÐ)ÑøÑ¨¾Kzí¥DÁÄȯî”îþîît™˜rP¡Xꮣm Ùõ%‰~$+W7p…¼›{xb+7Í %ÀÑ~z{ LFxI¶2­Ša'ƒ;øS>—yY™á'Íô•’*§c+åGÁ“a¯ è#1Êl…Ó¹ácJä÷²Ç†¿‘¡Fb­øŽÔ–;_ko{‹fü."ê#dKˆ÷í=Yzh¡L~e~ºuÝ—S{/Á^ÅO†öž>*´’ÆÄÛŽUÿ›niŒ|î}8] èÌQ¸£”«ú±'ñ¤x:àÒb¢m<¢ð€•{2¬M’9(áTîÇZ‚£ßY…üA¼2ÁG:«œÜŸæa‰ùú1á‰û$°*P%q……ë†i…å°FâbA Á:‰çdùN–,\¬ñW'ÿ7Š$QQ‰F…¼,³“Ü!¸ž„>6ÿ‘ÍïƒRp<vÂOA’ø½  <@¼7ÀÝ€´Á*¸¾?ÄN˜Ü+Í/RÙú²º¿ÕI–c±;ëÍ ‹°F¬Þi|‡çS%n?µd„*#l™†étÚè.PŽÜ¯ºiÞ˜;ìùTáƒ\½A£K%§½0mÆ_fÈ’#–T’ÆõÜ[@”g=8ëíß¼}ò¯Oö x’þdÆ“ID†îøö‘ùÂOÀ™Wnö-Çp°Œ;>šN£òˆF£ªCm½¸µoqßì»g»{þÕÜ›wÛ<_žh:¿iç;‚–‚3o9Ó ý‡£õôÖ£gùû™ñÒ¸§Ï“›œÆŒÊŒ¯Q\¢c¾bY‹uØ*ÉÒx½ !„ÏçûÔŽŸ)k2¾ Ë…çŒû›DDfžÂE³%f+xF!€a7xfƘáCNc/c¡Œ>‚3#‚­¸«Š¿óàÍðD>Îþå'Ïz¬î»åYóZO,Xò\b»ŠÜïð°ÛÆJ+¸óxÂæVö$ù^1±a$ÀÎæ¥ëÃ\&"æ ÓIY÷õ¡h”e°Ê,˜ÀÞ}XóØ—dÎp=®!>Vh¢$Éwòa’zµUŒ¤‘5ËkWVM»Igi®8.Áî %:…(ðNË®iЩ ¤|‡>¦@"-S!ó\Ééo¶½ô Ï_¦\ûÛW ®—93ŸÁ™·$ÖºY˜%âÏI–Ëœ«±N’™­ñ¦B7Z”&•wàª!ò¬w1öG(†'à ›_N!¼—‰V†Óœ¡Qyjt~ 1vÓãh°Ü2½ºÆñÐ-óc9K@âo«uF팖ñõ.Rp}†-.ìqBr±,yÎiâÑé÷J¯\}I^I’{áØbçé2&™þ$×.ûwp*üä8×¼äû ŠxÕÏ´_Átuó‚Ì—uN†zxæÃD¸Wb¬\dx÷@3œw€.qžÄ¹:“a1”Ã×!.ðƒ ù÷ØAxêá$ˆQ ÷z¼FjI{ÒGVqqT½^e¦+£žøöžföYYͤ0Ê”ñ  c?ž+¬0Þ5шÚétÚãñH’dØEšìcã—ãGEŠÖýhÝ´—§”D #²*W®­,9P2¾h3•‡ø§±é÷‘{Ÿ%†ûÅÑ£š][ø? E!gµ¤þÐðFCí+µÇÆ–OÌÒj×ÖÊ.y×Í»jV×L{vš ¹6‡F¿Õ8ÙëõºÝn‡ÃQTTd²ñx|¼,^.¶3·t0fN&}ÌÂævÇŒ…"‘ˆYˆ˜µÜ¬V¼±XxDÿñýóœ÷9 Õ±¸C³h‹o^ ì¾vwÚ—v8«×Tçõå'ôœÖ“N•ý½ìóë0³˜6/հ麋Å>ul9¾Vûü®’IÄXÚÄÿ}@Iš¾;Ë l2);d¦X8^ ëLƒ#nü SVØ/”X,S#¨†r™É ð®ÆœqÁ Hd²^åNžŽ2IPEN1¤S[XÒD-¬°Ð_H$‰’¥WæRÁa ´–’éҙǛ¥@¢g*ƒ¨i =„3¤S ú-È:³-TÚè‹3bç|‰†, áU½ýÜìÁ|=¸Kgñ-×g^¹,uõZç’MÖ·/È׎“ÉÆéŽàŸBTanŠT?‰Zúú°8iRùR‚32äùQ ú²”ók8ÍC|ˆ…b-ƒä§2É;:yVê&PÇ?ŠÝÍ ÊÁ Ó4|nb‚#Yüaò”Kß°ô;>ðG™›â- ÈÕ „Øê¡,EI„#æj4Iü%Ë´"Ë$º%ÜH×èÇSÿ˜"o>9SÒl'Nf«‹¨O1¢Ò™d/ú½øub?Îr²Ì@ ­aNMWB¾ zÅI0Å€{ËðÇø«…ËuÜ)v à Á‰°J§W"è¤! }Ð"3jx­Œiqâ‚2%¦Ã:ÖazÌÕY£aq23Mt;™ãIïI¾RÈîsdêáiø D ¦C0Ë9£Ó¸ð ž<•Ω`§ÝÉ+Syeon—¢iyç$¯»Øqˆ­M‚ ð5™­‚« Úa‚Ä: ÏJ” ¢ð(L‡Ý°.ƒƒðUÁNÁ^Ø £p7áè…>pA› F! xêsE˜öJ{7 n(JacÛUÛŽžqT(·ϧDcÈ…2WP_Ž¿Œ¢0“:¨¥[㻂wòÑ;i–øµ‹tq2Å„áYAQ€„ÄwC.DsѧTc5‰«øýùî{.\ôÀéL±UþpMä„ý1ëˆÆ^)EQ!Q ÅKÔSð\»ÃxFi$$Ø*aMâqàrS¥£(‹!Sªã©oB8¼òö¾•7«ÇÁã Ê!Ê$§Ð«SŸÀ®áî ¸‰N²ýØ;/ø(öú¹‚óUšu$[1R”Çs2äkw=;ÍG‡J…+¡<„Kg³ÆXÉ\ìŸgßxž{ܱC_¹J_ytÞF¯Ž_ãn'>‰¹“tÊ`~†5Y6ó¨L1¾ler†ávÚ"äI”N`ÈÂR™‹d ±õ³ÐNw ”±’ÉÄt|0KÆ 2,6‰)Pk¥AÆ㮉tÃ*ŒF›à)Á>(‰³'ƒK0=ÌÃW¨ŽòV’M𼯣¾ ÷Á48"Єf®yž–pøl°A A ÌáÇ—ry³  0Cºú0OKP !mnø;̆xRТó-×Å1-ݘþOÞ•Ëà~¨S ;¡÷Ÿ³.?L`(°,…¸ ¾•ûE W„³>ŸÏ™çž<<ûŽÙRZŠãFÝcTcb“ËL¦Ü˜nFv³þ0ɤ—Ë`ÎÆb±\y¤ÜÃHKuÉ8Œÿ»ÚÅø»¦‚¬É“_™<ù•É–`[+Þ«œ9øß½¹‘¨ŒÕ0.þÈG6ß¶yÏu{´OãûЬQu«¡êP`wÀ|C‡Ãáóù¼^¯Óé-=ø¥ƒsÈšs˜¡ÓèïÕ®­5V¸mQÛÖŸnÝñ£㛪ªÆãñp8üo eã= ^‘©àðÅ×Äl6ÆÿyXÊdâñc:>iFlκÆFZm^Ú,Çäªw«r’Š¢w匜)ËX­Öp œr¤üí~s¢i\¼±_1³¸¡¶nqÊìXãžDˆ©Úòø÷JÄ㪫ù¢¯I–ñø½Ö?ÐW¿CèZØ-ˆÂ“ð­$Eiæ¨ìK1¤1%‹+M‰`R=öa&@©…MN¦û¨Hð<üà™SeÞ—Y¨!;(´£¨_Fm„*¨/Á¥ñ‡ s _¦DCü"ƉVŽä#’uNrz‚{”Åñ/æP'(LS¡<ËÄM¥Dtê’ÔX™ä¥<‚¬³ñ¸—ï ñºF;œqA‡J@£~€# žNr<}å¼z¡öÔ¯]î×2~:Èq½ü²—+"¸4´ŽüIÉ'ë$]›\ÃOÚIZí£º(O°X£©ûÐósí«½ºøÁÄw?ÔTDGü2Og)‰Ó䤨JÓ4"½ôÖ¤pHéÎÜüwýàDuíIv-;tî”x=ŸzyÇÇ×-Œ&šë#£u±ßÉG1R‚©2^eXT"IÊtB¼–æ¸$[2«~%*:Y3Qq³ùãáp”Hš?é4ÊÇÄýê44 'g™.Èß(m)ÀAÁv8¤Gìœêf}’n•::åC¼­s1”Ã:‰GÀ÷Á+0SàÁ£°D"$¨Ëç¬3†7  ~\F}›„ a ÂD…“¡^pªN&ä f¥8)Ët)ÛRÁ\ž˜[–ÒÙÏÂjÈx¹ÕA]Ú‘aÿ‹„:ym ‘ iF¯x¾ÕÅð¬‚M°jàt¨‚#‚rx_¢ àx¨„÷à=Ð`<ÁvxnÕÆ0 R°2P%°F 2°Ì¬®"û"½o÷º%÷›+Þlüu£§ÅãÝîuu»ä¬lÚ/ÁäÊ5åú/s“¥dÆ>CcÔdÂŽá'}*)תÕDv™2w²,³%£Ž1öé¦Í„Á¯2ÂY«™Z´Fü:–i$Kàp VK”$¼^ƒî“K0²8´ôêP=ýžÏi%ÊëïXßzVkÿŒþi/LóuúŽœs¤po¡¤Kãigÿ²x·i;nÙ1çá9ÔgìTL• ³<2|ÇT™LƬ2=G2™#·o”ÂfW-—ôf¼p̪#À®³»ì{ùå’.Y­V·Ûm°wuIW2Jp[ðàE›–5åïÍO“…;Ipišfx|˜O”y ‡)¨Á'­Dñ"Å@šO`®@W.¢ÄTùr»Ý'œrÆçˆ0E+›úó‹B÷¼¡ß÷”ä\ ýý$ ˇ໰.ËM0KçvÓa-¼ªã¶ë§^ŸB@ç EånÁL¸e.–°UИ@‘85…T D²«e–[!„5Í?©’ é(P#xPgF”‰€Îrö<ä1CÃÕÂ=2%0’fk†Zp‚3DB£XÇ•F$i×ù¼g|\åµîÿ»LoÒ¨wË]îƒ 6ØÛ`z€Bh‡J¤Ÿ@¤@€$ÀÐC7B Íl ØÆɲÜÔ»4IÓgöÞïý°agŽdûææÃÝü³ôÍìòÎzÞµÖ³žg¿ÊñÆR]H‰ÊDƒ‰ù2²àñ*Rý,×É•˜®Ñ#_[OŽ<ùëÁußS؞ĖÏ%C¤ ž4&Ög>¾Çöý¿j?¾ÜØ_µ51¦‡}vt?±j"û¸#‰+õÓˤú¹Òu—Wq=\+q²óTйÊrHÈœž!?…„ÁfÁzƒ»àük:Ø™ Ù ”¡!I'ÔÀ,êÂ4öA΄-П.Üœšö"wn§ÿn>¸•þ7n)¾ú¶XÇ.h~QpÀEÐoB ÃR¨‡wJ x9Æv‰W¡°~/@<µ0΄éßäRWÀ!¸^…}:Äa¬µàj»{ûëͯ˵rþù[¾µù¼æ®5]ÅõÅÁd0ÛQ){wi®Ð´ò-ë7Ù£UFóÝ #„øÌÿ›5¢ì`du LeØìeö0²¥¯óõ¹é’w¯·ùÌfOÄã {Ìë5Ó‹”’Ú·vŸD¤""«²¯Ç—m7lqQÿÖŸl]þƒåÕïWOxs‚»Ëíîuë~½euKÑ¡"))eW)³U—>ÿýçž”gìÇc³e«ÌDíë×e„šV­k4̢܀×4ÍÓéQ“jçòNGÜ1fØpey˜£NápØDÇÑp•½cÈΫ²) £áÊLÍ °)nuª²7.n·Ûœ¢á¬fæš#(<_«÷+ÎF§æŽÄÜ|ô—÷‡¦„Z—·æ6äNØ<¡cAG:žöä´úXæš´²7k„Ùº:PM¥ « ˜Éd‰D8¶ú—£­ÅÌ»j³ÙÜn·Óé ƒÙn£á*8DÉàÁìÊ‚û` „%–*¬1x.‚v¨=—©qž¹‘È3ˆÚXëbŠFÄ‹#C»Àeç«aš5$E¦1Ìü ">ÖVb %(U™á`ÐAN ´Ûç!šàKÀ§ð€Ì0Õ39âÂý06ÆÁ–ašÄ°„]Ð+!t2‰~˜®³}<ãÙ—âmí¥AZOÛ˜œ`fŠ­͉°!M5GL¹ªÇÕ †ß 3Ëà-1ï+žÛËŽRù±¤ø,ãœM-‡ÖŽDCô£¹pºX˜©Œ9çäªÛÜFÇš]ºuÖÛèIW+üú/ò®3ü­öÿpâècr†"ž˜Oï½êië|ÊL¤Yæ]#7Í?\\žDò#⼞Â.‘§pÕ n¶1TÀÔ43Ó| r¢ÄV-)^‡e~Í¢ÙþDMþÞËÛiŒ QWD X£¶Ÿ•0>gÛ\=œa'W DhQÈÍð·…PgÃf‰sTÛ!)Ñ HÉx ú:<Ìb¥Ä‡ÞBNb4ÂbI"äáû ù1ä$;%rõ2 ¤“Zµ¡=$§Ã§I®Ìð9¼ÝçHì†k Â0vÂ^¸¼ Cç|Àƒ¯ñÈ*(„¨{¸ÜÃâU,/åxé8ìã ;Oü(Úç‚>˜7B#\ Nø ܰž†𡋠ܢ‡…0Ê@‚A°ÃØc¡‚Pýpú7ÞŒ;  æA tÃB¸ÆýKÕbÛÀ¾—ö麮%´Ê+‡ù_æ냖¾dËr[=ülÉËÁÝd‡[jßæoF™{ö£!–µUÏ–‹ÍV…áì`µÐ;…¹Ù·&ÛýoÇO×õŒ//‹' þ6¿Íf3xêÖÖ5-mš°iÂøÇ7-kÒœš§Ý3¢šÚvë¶’m%…{ ³ã¬á4OmŒÅr÷æÊÙ¼ÞlU½á™ÃíKÛOûãi^»×Ì<²ùñVjÂX:6ÿ5õ“Lˆì[gvîáÜò÷Ë«?­-Ÿa 'ºÝnLÀÈæ¹X9‡Ç-DñŒF?5—Ëe&Öfû'{7“qfÂ3žnψ®§%®a=šÑp/ˆï¾l7I¼Í^rBÕ¡®Ù]3;44G—£å´–`CpÜúq%»JÌw³êÕ¦¯£µŠÌÒŸ%ooÖº6»m‘2,‘C³Å•½ŠL)&ó#ü~ÿ¬ù ®jA›Ìp•Á[üÊf Jähp<+¡Gçè–èTø¬Òù” w Rè¤ƧiÒØ I‰7à*蔨S©6˜hÖyEæ]8 ¾ásµ…ÌïcR€pˆn&º(JS“ælÇefú©Š  nUØdÃ-#©ØOÅ‚³Ý¼¥¢È:q:u Éåø¡J{@âÌbA1x›Àé~…«‹yh˜ e:¥þšô_ ¢ܾý\ýΪ¶0†³ßV¶-ȹå¼¾toʳ˧'ox6ôÛÎÈ PÚGÊ¢²›Y¯ ÇxãË)úã´:)Ž2;E…ñó¹Š>xÉË¡M?-%yøÎGš|³m8%¤ý¸ü½úü-ÒÕwA±N»Jß¡H¤á&…¨ g®†fA‰Æøs9T@¤‰I6Ja‚F&Çûà<ˆ Òð¥Ä5]8T¸ÉíegœN‰ŒÂí! ŸŠKÃ×@³FDGVˆIlÑh€Õ.|þ.{%ž‡³ ¶HŒÉgAˆNÜ:‘$ŸKœ­2«U\­Üý aa3\ ur d™Ó%¢°É8å~ãÁ:¶á»—K¨ïBJá;‘|®"\Á_`1¼¯ é´@$¸ãMî^iXÌ•cj”fÛªùÝðüð×¼[ph|­ÍØ 0 å°“Ð^‰%ðHpºÎAxN†F(‡x¾ï ¼ Kal`Œ…ãáE˜(¦”­¹<»<ÿñ䬉 –äÁ±Æþÿ·rÏÓL(Û$»ïbŽØ‰1ÕåñÑdy0šÑªì£²ÐŠÐž«ö L¨Ü_YÖ^æp8­8´ò啇 †åáÉë&ï?mba¢dcI6¢éĦü/ò§¼0eħg?1{ÇÕ;ª|Uî¸{°f°cqG¶@Cxn¸hsQ&šA"ÿÏ+©µ´ûF“̰k¶s,—ÅlR†Yã5í3ŽNÖ‹³ À¬ÜÅÂ9³ku§ê®ª ÍÍ|rfÙî2‡ÃáñxÌYm™#ŽáêaÝ¥›‚ñ‰œDÃ… jDU£êØ'Ǫ15:&Ú½¢;VóÔzþã[g•‹-[‹ó2"³Ìv –$ÉÄ2—©|ÔÞU2áUÈ1ø;L‚Ç`”*”Û*gÄá+Á#0(‘T˜f°ªr†é1ø«Ê,Á‰Ð£°È`IŠþbÊ£\QÙX9<<‹Å„&|-¾žšždNÒÝê6µ6:t(†RõZñ¯[wVÏCUUwÈÝ3«§mY[ÇÒŽ´7]øe¡§Ããíðúº|¾._ñÎâòOËE\˜L³¯c¶ý¬G`žs6в7<šüˆ,vÄÑh¼«_uDj»yßÌ¡sÁ˜?Zä: Ã¬× !ö^¹wÖó' ªN5?’oJme§nV»È,Ü™xif¢‘’ˆ@”~V*IÒŽßï0ÆÄu‹v‘p 9‚ Ag§SÄE¶¸{"‘Èd2#æGÌÌe¯+s©Ͱ8®,΋ªªÇívûý~§Ó™““3¾fÆQ³+¡óš d*-A¿@Óy 6HüT¢A¢Ààg §läÌ‚uA.ë {à2'n.¢:ŽGÂ?ÌÅ}h°Ü`,îEõ²°šÆ} ¨,-¡ Ã iÜUÌì>þhç.ûR)EÝ4Ù˜«2Äüð™;2ìÌpªÄØL—é‚qCæ³j|¬ŽR³…6 —FH"­ânÆ¥¢OÃßÉ£Lט­ðÃAÆ&ï§¿P#»üxBë©É«pM¢ùq©y²ùU}[#~ñüáŽÁçä{¯ÐݵÑÇWHý2Æy…Œ ¢µ³¢ž<îÎãüaª(áw Ô…k † °ŸÃ ã$†RŸêÅ õÜ¢±~à£8Ie”»Ò$%2DTØq¢s Œá>î¶³.C{’ZAd@ÓyV§XP ÿ“âÎ4û þåI.°³ÈàF½Äó¥ÜØA“Âõ ž>ê!&BTãœncr€òýP¿€K‰Åé¸lqpÍ…0¤2OãTÁ¢Bð<œ)3'‡ÙÂqòtþ™tt§nÝÈ÷ç»ö>vÀAŠ‚ø¢lk šá3¨±U2ß¿›+k`%¸4–…x*`¬DàXúfÐðV¸ \ð"´Ãˆë| ¾ çÂNø†!®3ôƒÏï  ¦BÄác(ƒ(Èðœ>Ÿ/[qjDЭ«dÙ~[ó쪑U-%­žüˆAKKê[1<¼™MÜTøUá´§§!$ÊžOŸ‡oÎÎp]'uåoËÏ=›½h³Ÿ~v{̼扙SÒ±XÌÜu9³Æ0bÔ}†ÙKÚ¤«H’dNRÈæGgWn™±‚Åð&L‚/áo0f <^¦:ÑS,¢$Ês.X«# A2° f ÖE‘Ó ¦¨P8,p^!±ÜàŽ4½/± ‚ƒlØ;½Qêt"'$Øa` Vˆé<Ëeœ‘9ÝŽìÁîç… Óg2¨c ñ;Á“NDÑìäËø< 6™©2ªÎÝ•‰^ú¬V(ËÐP@™JÈFO²“üJ’‡¨W°é8%8Hؘ’ÃP*!ŒŽU•ïŸ>%3¡•Þ“4xÕ5q¯úëûr.{&””$“2¤í"¢6œé­ì—JùVËó›µßÜnœ»^œû™¸ä÷ÓNÛ•$íùø !Ê ô¶~JÓ.±Hp’‹°›|çHÐ(Ñ!³fO1Vð¬ƒi%8£Th\WD‰›6ª§Ð£À0’…e‚í*Zv RüN´Sä¥3A§Fƒ Eƒä`§`W†ƒ”Ü’¡Çà Ì“˜Q¯›s4tAÜ®r¼Â|IЉ–¡÷ó©ÂõCÔK$ „N½Á;×+ŒTƒ€6i @üVC/[§ò“-ø'óÕ9·OÙ·J|{,¹4Á‰P'BžàÑï§9TȸIJz唤~ÚSüDu}örš›À-}’æ+„'«uÓÒ-alÒ¸áZ.ÿ;ôP³‰´Bª_Ð c!ßÎÃ:ïJ\)á‚™<…0B+L‚<Â;ð´}ã•óSøVÂHà 8 Å0Cü0΀ûàr˜meWmmm[¶l±Q–#°ÕHÁª0¿«f&a…$«e¶¬GHõds.,­R«–hLÇ 3:X5KÜšg2‡•ö™/°:d–jƒÙòÁ#—$Éív›<¿ßïõzÍѬ_y]^žÅÑÅùÉ|“8700ÉdPè8±CójÕÿ¨¶”{$]*®-ŽźwÙ‡í©ÒÔZV·t/êfˆ¿›álv¶­i›ðæRÿ⤌f.±s3:»ÊææW=âÇl飃ÌVv;‰Ѣw[‡Iû6s ËöÉŒÑæ2°¼¾FèW™?æ×æoÿéöÂ=…©¼vòºò,rÿ ³˜œÈO Mj<¿Ñ7ä›÷ð<ÕPÍš[é®Ò¶myuy¶˜m`ò@¬,Ö|¿·Ã›¿+_ØD||Üvš§j'¨JlªO™y•¹ÞÌŽšU Á€µd—G´oÍ5iÒUE©™1÷ÙÕÎKÏ9SÈ»“ÇÏ€ñ°J|ŒÐ/=Ý´(ܨó±‹U“5Ò:~xªaü^‘X$áÔ¹Eæ)¨‚evœ!ˆ@•᣶›|ŸB“3’\wèäJ¬!8¤±CâÛ}ºAwE‘Ëî\¾7Lp _8YšËc`‚ ¥“@€a;s5D€æ$] 4xOaÎöa&J$ Ƈùs.+‡¨(¥£µ™€Är6J#8œ¬tp F±F‰ÞÜÁ¬8ŸJ8lŒ×§–Š È»ûÖŽÁx5öarc(N’>ÆÊ ^œi\²qÿÚE×8÷Šu‚!±¹t†°u@%¹¤–™¦³¦@a€4Ø[9I§qmiÔK#Œ—Që;gQ1ÛL–™ qn›`w.[3œÒB›D»Áa˜OÚY[ȇ"|ÇŽ×EZ§6ɧpŠÄ.‰ñ2s ø™ŸdGŠW Q£ †!é&®1œ¦¶ˆú(ï:“Á‘áû6¦Ø8”ašÀ+ÓÛNC'{aŠFL¢Ká»:,„{%Ðñà ð)–ˆdØ !8xáùýâþ{ÅÏ@¿èV~;ã ÿ„’¹)M±N¬‚çXë™ú¿xÍøù8Vœ n ¾ ª„!ÞäŸkEýø¢ä† \/`³>â‘]l^ÏOÎ&Ó¥ðŽÎ,ø)4KÔ þ ×Âvð€à;Ðj¡ –C¾‚"x œà€ãá8‚ ¼2,L„¯ M#b¢©_ (J27Ùµ¤«xqNsαËýæw5›Lu {…#îúÍ¿Í.âû0NÿM9k^5ÛiÄš¬hL¶iSb³ÙzzzLËZ“Ú ËróÉÍw¦æœ_c@2™4ãû¬'fÅœ±ýçï*>ª˜zxê×U;õku sÚÌ ñVCn„7¼¬˜]Y˜d©&Z£¯V‚ûkjü?#¢¹9B7šcž¡™oÙív5®Ú‡íµ×Õï(ÞyñΪÍU–h¤yÉæÐu]·ë-§¶„¦…ÒŽôqW˜(Äý/еGìrF®½¦¶`wA47*¨ämÌ“írãÚÆöÓÚg=<«üp¹5¥`Þóc·QÍΓ91}Œ<ÕrËÞŒ¨Ó{îÊ1.ü'z”MËٮÅk¡ÑÎü4ù`ƒ"–ð ¾P!ƒ‚…à<Øóí¼ïæâ4Ý “utH@» BÅãg>ä8(ŒñWƒ`wš:oÊ\&“2¨ØÆ fJ¼'1SB yyÍI~+ñê3èªB¥J¡L²ÏïŽ^ÿšØ\žGŠm0ÏÆûjc2lè1•“™|: )*H:-AïÉ%)ªèq §B »Ž27Ã|ml§|éWÒKdªH Å~i1.47b˜ mϼÈûË‹?Ÿ¥B† ÆÓòŒXŸÑ¼ÃÝWå=Óx@S˜äÆdxˆ\[ÇßÇÐ!Q&©l……I ôT§ðè¼içRÁC8ziP+ÐIANÊ ‡h¢3Íz•sÙ¥·×UNƒ<•æ, ›H,€ßÀ4…R9u‚¸4ü*uTQOã1I2…Ð 3à=˜*pBÂJ’¨ôC=h–¸X"- ¯Ã‰à”ö4‹C…Tíá„jš§þŒž•p¶B…ÄÛ/ ÆÀzV”òЇ´îå¯9¹•+xì~2]° Z‡áDØ(x .ýFp´ÂRàvh†,QYnЯB/A3ì…Œ ÞŠ$N¨°|°Þ€$̇VvÕÔÔôÉ'ŸÈ²Œƒ7í7\º£Ô9ì.³©¬}q¶;ûÑà*»Ab¾I¶«Õ½·xqfˆ±JˆÖœ¯ù+4Ȳܵ´KA±Ù-'CK­À¢Õ%f|4icùùùÇëõ:N“{m¾ÞäàYÆZN=Œüˆ¢™YGRUÕ®ÙËjËÊjË!‡ÅªÿºÉѯzÛ¼VÍÓÌü,q#ó³Ìk·T‹¬Ãr˜´Ò¬üoËÓÖjî]Y$73=Êžß²:‹#&š­²Ò\ëÓ³böÓ·,fûÍ’0VEͨÁ† šQ[On­ø¬¢wj¯§ß¤{XzÁæó­»º®kQWå†Ê±ŽÍÊÏÉÉQ¥ejKÒ•t ¸”¸â«óÉYÖä²7Ê ¾(p7º5Mk?¿Ýa8ÃŽHe¤dO‰µØL;š …y,õä#êf«]X©¼Ek´:y&»ä˜~WS›xòNþÞÎ9ƒÜRÏ_.„O N|’ä¦P)xFáb(1èNr;œgã,uyìk£ ’ðŽB>40ºY8D>ôC-HpžÁÝ)–fˆE)Õ) u”qËTšV‚dðÁß®1¢|XÀ5 ë¡RPi.!¯‡ çÍÒêõò}ù‚Ùu°¸:E¿Á_à¦ñ¥ 3Ìú×)Lî¦Ù æd’›ž¦Bq%±$±>àÐiÕ¨ 3C¦-ƒ’æ3¹w–Ö[Z0í³ÈÞšB&öA˜' >0øk¶6:ƒŒIФÀ!˜Ÿ¡=ò>0µ}ÿ™ÿLüvf;¹Å,v’ǃö"l]T Ö z†ø|¬UY#(f ‚œ>ÖCD¡à”$Ÿ .€)‚6¨–9¨ó8\“@– '¨5Ø‘¢Tf¼NÈu7鼑Ç%.I³ÕCMË‚8;ùE†927‡$V‡Øÿ5ÀüJ°R'ÖÏ )‚v*ý|ÑK?ÄmœãìëgªW°[ð$œ Á°qF†ÝMð\ ±Aa…`‹`ÿìLZÇŸqû ãÞ夫4ò É`<̼S8åw|o5{g}TxN„—8·_Ë ÅËW@/D@‚Í SZ€o¿ñijâÊ>HB7Œ˜™k%R:…ðOàg°þÏ·á \ ªŽ¯ÂB„9Ð?h‡Ýp< S ~]0:ámˆ°/û›Ô?§¿õäÖä¸ddJdÚ3Ó“ÂCåC¶À¼éþw“V0š>-aga¤É´ŠNÙUƒ“]Q—»ÅmþÆ2z?ÆNÙ„4—ËåñxJKKM¼‰F£æT“)¦—}Š¢í)ª»¨nìú±æŸ['iµÙ,¢U#2¯n×E»Ê^)ûÿoJbÝI Û,þۈžåˆN•elhq L™’lQ’¾Ö^ÁBPÃ0=ŽÊõ•ý3ûs>ÎIW¦7ü~CÕ»UÁ·ƒ™LÆÚǸñ@é¥ÕoW:6›Íæ¶9Ît:=P9àT¹sw·»²»ÒÜÁ¾~LÝs»Oxà„áªáîùÝ–Êÿ“=Õ¿Ã=gf‰úÿ·û*Y~¾F^ø=—ýdˆ V‚¤±TågZÎÛ›Œö ¤e§ÊRû4.æì ¶Aº pÂC*ÓÒì€(ä(Ü$Ø%s³Î™ ~ß…åœÒÎn‰ Êë:«5ÞQX¦Ó¦ð–à¢"‚쓘¨q_ KZ¸ÊKú¸ØÁ½.ª÷ãsðhEßPüô+‹»Áòû9XÌÌ>ˆ ÚÀ&Ó&!tR9^#¿…›Ù˜ïfA>ôÙÊeí®6å‚ Zj3ßV?zNûâ,ÏIâ¿Üá¾gž5~(®ù•šž«s³à`À*¸ ®€ ¤`áeø-¸á.¸…Äa´¸ð™êo އ-Pù‚Û VÀ³p.L„uP ]p)Ü ¯ÀzX%¸^„%/Áà-¯ÃýpøÀgÁÏáYøTÃÿÀ#ˆì…u…j‘Zy°²à‚ži=±ªØ¤§&™õºì®R¼0®GuÓgÝŒDfÐÏŽ€V7ÛÚÀf‘MµÈI¶ÞÖ´4ÕµGÓŸ›.’åÕ”H$Ìð-ùÑü¢yQ_žÏ=äÖuݚϾ¾N_ÊŸúä7Ÿ,»™3ã´ÎÓ|«X –ÊM™ ÛÙZyo&ˆ IQñˆÒ°aÞ’áG«fûÐ[EÂlúî1Âúè"­E£õ F³0²÷ºC?¼öpîú\×aWng®EÝuuU©ª¢õEÉ‚dß }gwLtz~}¾Ïësº¼^oYY™ÍfK$'­§S©T4µ&ÁÍs3ïª?êÏäg²ùôÙ“ßïW:‚1h]à1þ$›ßøoˆ0Å[É\Ë]oPå’Ÿê©\Ø K`ŽìŽë«ßäŒþgÉùÊ—{]\jpžAXá‰d'$q@€]5è…)‚{$fIh‚¡.Kr¼ G"âbR·Á™Ìäh<dLœŠ\Ž× EÉÀ‰:…11¢*ŸàŒ’‚rå šAÎÁ§VÁ›¢E0+N·›Ý ²Ÿ‰ ¦{Ès°%E”Ë)l©LŠR•Î4®y$þà/seÑï¶ËÓ Y.óFd™›!T»Ðl8½5¶p\¿ïþÌÓkÔX¿1Ö­/ùŒIwE'MªXöZÿuïÛWmª$í¹VÅlêó8ÒO}ŸoÿÀÃhÈÁÑÂFƒ¦BÆO<ŽHá”Ë\ªsšÌDÁ.‰iÃì–ˆ¨\“¡ÈIOš)ô‡b´ÂlƒOá€àò\&i,‡¼™áT…JÁ­eüÀż4 l¬Ü¥[àƒ!ȇ‚ýnZà|Ç…4ȼPÁ ƒ¬WYjP“¡!Ž …Ð * A‡ÌƒEý°[Æ'3&C¼S Ý $Ž“ ¼­Œ£Ã!æ¶?» _6ô0DÐÿZðÒݱ5¤'‡SÇ¿ýî;â[ר¯Ì0ô:ƒZè“9Qð)ôÀ?à|]±ã‘«tz%>„~ƒ3`›ÄgÏÀI´¹©)dâ*æôñì[d°T¨”°ËÌÔC#L…&˜ep4ò5‡°ªà3á Â*h¹°Î þ ™³$NÄa+œyð*¤ÀœM^m[›[÷ÿu¿¿×/Tñɯ>©ü¢2ÿ`~véo¨zhpâ`ýùõ­+Zƒû‚öa»¥—j¦DÙ‚G”®°¾üV0ÍfXs³ÜÌ ,'ëO¬Ž.EV¬º¢Å3ûíÙ›_ëÄ,å½Þq½o÷ö>(“Êlº-ÖK$CCCfÐ404‰ÝBˆŠÏ*Z—´&'''íŸäõz{g÷Æ«ã±òX¤4²ïÄ}³Cå!wÛù«b±ØÞsöæmÏË9˜“MÏîNY?*G:¬WZÌé£íåÍèiêY¦ˆZ˜mMº¶µ·06£¥,ŦlB ycÍjáˆÎ™Uþ5‹¨&ÃÅ,‡êº®Ùµ¶SÚ\1WñÆb]×mªÍ׿s†¡¥!‡ÛÑq~Gî`îü‡ç‡ƒN§Óãñäåå•••M˜0¡¢¢ÂëõÖåÔ¥zRööltÌž$+ÛZ¶é¶MÅ»‹£¥Ñ¢]E#Ì®¬:ꈡ`ëæ›”t‹3b6½,a{³N8BÒм{ææÌ\r'»8ºw•dÖvÆÌàŽB¹ë7Ð(¹t|êñbÌz>|*1þMåãûœ„S$vƒ·¦ öɸ`¼LTÂ)3V¡H§ö É„cØïI”)Ì0'Ì4ˆÉDeè4A±Â~•\ƒã}#~ÿØZŠ=eøŽgRkÞ0þ\­Ò®s\†Ãˆ‚B4Í›^ lÄ“ü­dçOðŽLÆ äR¤1gª‚’á”!7í:ž0/j,óÒ™Æ'1]'€í `…Ìl Ò^.L² I<‚ǧ Ò›¡RÐ ù*­ã`¸a¥`Ћ[pœŽKଂ7¡Je™‡¼ ïCIåIžÔA#ÌIò¶Ÿï%}š6~#fòH{áPL‹°ná·ò‡E¤j úa´Ádö zá4³É¤\×á|¤2Ã~X u°W¢Iá,Á~øB_L&ÆW‡Ø±FÒ“2+3a3lÿ†(X áa‰€DÄ@ƒ­°òáIsNì8à ̇Ýä À [¡R`‡"ˆB ,ù\µ¶nÞ¼YQ”¦MŵÅã×·JüñÂxÓê¦He$‘Ÿ˜ö´„7a‹ÚrB9n·Û N§SUU+;bàˆ[û#V­&åX‘M>Ì&¬g{‹˜Ã›Ù*G&åýk¦ø7Ív3²X‹öšö/üðНè-è}rÜ“þ6¿g¿'‘H˜ÑÔm§ê,o(—Å»ÇvwŽïdZ‘–.LGÑyŸÎ÷Ñ8_È×4¿©b¿³Ù™VÓku]Ïß›ïŒ:Íèév»-þ¡Í€n²Mì·ýïÃÒáŒìÊT*²Š¨£‹\Yz´b WVG-{Žíˆpe¼i¦íYÓÙMÊ€RöqYvÖ•Û–[ùyexFxú“Ósä˜ö]v»Ýçóåää–””ØíöNOç[oå¶äæuå™4¿l¹?ëOm÷á8[Âf†¤4gP­šgv[4[sĽȽ^ïü…KWíœ~+ú|Þ;QP&†… ÷¾ÃGU<ŸÇÞRV ë›ÒŒÒ€ jáAPb¦Š_Ð&(0P«0Ù‹]æ• j!>ÃIU ¯Á_$î²±ZBÑÈ­ÂトAªLi¸Á\Ê`†_˜­IÖjì’ÊP!°Kt dA‰†#ÆÏC0Þrãª@„ȃªÂ$ƒkÁ-˜¢S Êð²Ábƒ_ñ&æ4‹3?´ã©IÝúMêÏL‘ÉTP2ä{± ã”HƉe:¯°2³kE:oHD¶—l¾ÄùB¹öñe™O¿ò¸ –9!Væð޾áIqÕ.uý9Æ#“ÜÛ#¸ò˜' 9)èvÌÁ% “gP¯rž„?ÃLx ¾-ˆÁKiZ ÞxRüMáÛæé´IÌ3ø‡2/Íû‚E*²ÁgÿO IDAT®•seÆIT'Èð ÄoÃ8ÞjІ0 sYe@€L®Î “KrˆÅyÕO¡ T¢Dç~Oaªá!È‘Ùï`AŠm ó C«Éb•ðHìÕA³Âö ìƒ}ð¹DL"­û†¥ãâü½,¨g½ ã`|5tŽ£M†M°~Å0¶‰¯Ç›Þç†fn>l¥9C0 &ÂFX)±[#X Ëaá YÞÌ«'Ó×-Q ×ð!´Á Ø µÐßQøD@ð,¼àF¨ƒÉ02Pk Yã ¸6›þ8P¿€ù°Îw¡Ò0®‚87®¶]»í¸Gû_&O6£cqÇÀä©ë¦ºú]rDNæ%ƒAk$Ö’¾Î®hJ[Ì8æa©Y;èÿ+\Y“›Ù³\Ö¬¨å§•­¬ÞR–hŸÝÞUÞ÷ÄÝmîi§%»’fvb½yvr¹\>Ã7V[:¾4(—ì[2µcêø–ñ%ûJìI{*•²ÛåY“µÆe-ËZ†*‡*^¨ÈéÊ1£žU›2ù æ\ªÙ±¤`­“Ì.6ZI§)Äw´ò”uë¬6FÔ³áÊ¢¥Œ°u WGF WV5ØÊ„$IJ•¥ºçtw/êvº=žlY“¼CyÖÚ0 /~¿? ÖÔÔÝ^y{ƒ­!™Iº[ÝþV¿ É–?Ëÿ"F*¡©¡òÊ­ó·N̤~d 1›©§¥É”Í!´?âZŽW'®ŽVö}*àjÁ%0Ab¡mý¹âÄPfþSÔ¾ ?ŽÂ©ÇI<£ó4x5p=Ü©²H§V¸YáNe*'ÛI;) ñhä9ƒ'tútœ‚§à*?E‚ý]L΀J/üµ”?vÑ:€Æè%lpn‚Çg²oˆ@G#CÄ>•ã@5Xìç?Éä0õ³r‘ÂtÀ‚Õ ?O!A>ÔÙÐ|œâ%•oE’Aãw X7%ŒÂoФú„²lŸþà-C €yo™ü“;‹a„—ó¢TRk¼TylYf†§„Ævºa&t“_´nbw`³xÿÇkÙôéÂ!ÊSìMá™Iø‘ó<ô¶ódŒ\™ïƒ :(6–¥H”•*ATAƒÁ·U~?–ÛÒì )IÁŠ÷b¤NBl¸ä25ÅïÜå?l…%n(€Æ*æö3¶¿A´n9 Êì‚w#Ü s[„?«ÇpR¦Xãb(7h|n„¤Äâwé¼&q·L¹„OgÔÙžàA…›ÅÓ‰nÁI7¸;Ž]ª¿Zº±?‚™fÞŠÿ«ƒ³¦Í74¯7Ú–™YH3Ž8`é_ü›\UU+>¯hšÖ¼¶¹öúZó÷Þ›0öŸcM¢×®PU’%VÝn·¢(WlºBÃá÷½ç®w{ºþ%täv»-˜Æí—lOºÝîÑ|ôÑ£WÙS}ÿÎâqÛS©”‡– X,;&Õb,È•þë‚ ‰ÓWC¥N»ÆE¶z/õ¿ä?w?Ç¡7$,\ åp7ôA±„ŠÂ"5þ$Ñ“aÎK)öäqíUi2ðˆD@0Zá ¢Wb¶Bc5ÞƒŒQùï.:Å>Æ{hn¤È n•³÷Ñ›Æ/Ù˜ªsXâZH@_ksØç¥¡ƒã"ÌÓ¢0JÁiÇÔ(ôIÄÝ,&ž"ãàx )NR%Œº­*¿ËÁnû´HÕëòãg9øa‚oåò›êÕïí޳ĸo Û+\{çø©êaP O£¼{QhF(¯Æ9Äë¤unâ2uè6yè•·©ò²ºŠÐË$wÒçâ8¦VJTE˜ù( l͉-߯~d™SeN‚zøÜàùV~ ÷h$ @•)ÌÅ‘¤+Íú"ŠÛiÆ+X-¨–ù8ˆžaѦ£k lhá}¸ò`7tÀ àö(y}ü4ÃõP#¸ÙÅ/l¨=ÜSÆéi*ûÐ`‚ÎMPO¬„àx,Èäw°ÝÃ)Iìv^Oð€=[' pð …yP§Ó/@¥ —¶Úª©SyïC8e®âŽ=¿Ð0#é–I ¬çòü]Ì8À†L/—xIÐMê}ΊPx2½ŸÂðÔÁËàƒKàmxŽgá×ð6œ‡ái°Á4x€<8¦Ã+‚!WBü›Ñ+;üö ¤4árx.€¹p=\ ëà%x N†÷tÖÀ&‚mð0œ:bîjóO7/þÃâÒ€=bwÆœÇß}|"˜¨_[oÛ aXí¥lHH§Ó–’Þj€):â;4 «ÑÝ/«.g#g¿¹õKÏbD¨!ýît:-›GW˵%3É$ÉÞ`o’ä)ÿ}ŠœúzçþÅ-_è6}Æ‹3¼Q¯'î1s»Ýît: }>ŸI|·,ÿUêöšQL¨GðF2ÏÐl&YöÇ>¬ÍÏ÷5|F£Ñjj+dK((fšvSÖ¤‘õ-)‡_½6¬DÖBÓ´7­94%¡˜Oܲ3F#·#WQ”â§‹ÁÁA»ÝÞqNÇúûÖ››¤¢/Š–^¿Ô¼™ÅÅÅÅÅÅÓ§Ow¹\¡P(F£¶˜m¸x8®Fä¾²!{úDeúÝü*ŸÊnöûˆàTHœãK¡^¢ÌÁ4¯†ÑÄ=p<CÄ+¹|ÞËßýxü±•«ád™=p<¼ù >™¹:e/+¬‹Ñ™¤Ö»©‘Ð ‰5r¾ŸÛÂ?KLO9Ù!èŒc‡‰$H7|S!4u$>gÆÓÐ P)ñ‚‹xœ"‰Ç¤‹¯6ÁWð-™jwGNæ™­œðoza&< {`7,N„BØ3!þÀõÿ‡¶û°£.÷Çÿš9g{M¶¥’)$½JQDªÄʵ7•+Ôë½zÅ×+ŠíbE@ªtB(RHÝd³›ÍövÎÌüþÏÝM_¿ßßü•L&s¦œó<ŸçyÞå­¼• æz63ƒ[8¶d™6TóÅ¥’izin·€ëYÂ}lã§ ¸.QK#;&в²² 2ªMÖ¾+u ÊmÏÍÿîü1ciÿ- ‹¥˜ælÊRê/žž$ýU§# –——“‹ÏŒ2ƒù—•ÈKãK–&â&æËôäŸÿø~Ø/Œ“àÅ|ôG5 =õö§f=4kÆòiq3:::88Øßߟ$ÉÈÈÈÖ­[³öWi¶H¡‰{JÉi3°®®î:¦ï¥´)ú²eA&üQ*;TÊ:J§JÿoÑóíG¶äFæÜ4'm~fDÚÝêFîû—}çýy^i=É¥ïÚµkÕªU)»`dd¤··w¿«÷{ø·<Ú2Ž¥›}+²¿¦Ô‚ÒK ÁRK‡MÝK’.åŸeZˆ™2ÈD‰Ûݤ«Øcļºèq*8<²ŠýsÞùkè‰òÄE_âJþÆj*8(ðzneÉde–‡ÎË›{’º¹GÖ ò>yŒoÄNá°r‹æë[¡—ɡ͡sêm걆i\<Ýàfí½õú‡ 3­ß¦D™ü˜SËz2tB·êÐÇû¼¯ÒÔZ#jF­²qÌ 3ïÜåš:'Ô¨í»Ùu×äÍèWÓ6šW¦«Ï®‚Ûræ[´cô”5·ÊšwF¢0`{íŽò\]0Ûʇ•Qy6gÏ´Ø”w˜Ö©)gFÁsfîÒ;è„:Ý:iìð?,©pF p“æ2…*ý}‹6ð7¾\îö‚órm‡Z;Õ„Ê™?æù‚¦œÆucª•U x>t~µ¡vÅZKÛ²Ò}¡ã8<4'Ñøû”y}ìW¿$&ó."Ú‰™“Ó¸;ðlèªH9÷ñ†Du—?^Ók˜µ\œ³Od5÷òÑœg-_ãM¼µheQH/ïêôçÀ’ 6ðàN …A_æ0ÞÆW…/ú.Ӥ¥ã@n'¡‘ƒ¸;ðæ2M¡>Î ÜoRK¶¹ûÒä¶Oç§í7fnrÝÛXÅñüŒÓx‚×s9GrGñKŽ~ɼj&x-ýT±ûùç9v‚cYÇ´²™w°‰Jþ…»x «ib÷°”鼚ÊÀ¤Ä¼Šî‰íš´÷ò²Ri2Ø‹®]6ø)µ^ÌFß)`¬"1000Ny¶T}5€§¬¦‰2Bã@ååå™G6}™(ÒºÛ Æó'?¿ä™%åþA«ÊE¹šÎš /H,R¼ßÎ;«««S$ÞÐÐPÚ|%)§””²3?Ɖó²úëi}³§NE7²ä”Ö^»Õ™¨X˜ñvû~÷4¼g–Ñ2€âË>¥´~M —5KÖtìÓqè͇ƣñÈÈȺÃÖÍþÃì‘‘‘t”©%¥/½´9™A"÷N¢J?eÜ\sO?Ó?Ìn0£aeÁñ8ŽÝçYÚ¨(wl‹3˜Î›iL,¦˜ÄLÚÛ|¶A2ÏaUÌûLbJ¬1Ö”ˆ‡¼ªÆŒ b'M7³E[Îð°02#Ö–óœc#›µä,jÔû$bÃÑå×øîuœçˆåÉM—õÌ*jyÖÙ8ãù#gÒÂ|ŸÓ(2¥ÜG‡0§ù.,¤œzð]¶s`Þi‹ò>@ñ]~Âj¦òŸaŒ»èeuleÞÂoY›³4~‘™´•=.$óe/.oS…¤q†ëi{g/Zà^2Ù+Ù2q¦%øÿ+6ƒg Ù¼=™g¦Y™Æ|†L ¸9·ÌéYسü Ë×¾emzÎÇßýø“o²yMsõ®êÔ®·¢¢bll¬¿¿¿³³³££££££³³³··whh(“¡Ë¶ô¯™ì^ýHáッƒ===iuõ²Oõ•lé5ìʼnãe·T\¼¾¾¾®®.%ºeNQ°>Cî6Lfúôǧï¶4÷_ŠÅbŠw_ñž™}Z©ôÍîûëGÿÚ=¹»emË_ßó×G_ûh±XÜ~øö±†±´ÎN»Áã°þ£ÿ{{% ˆW¾ …¡’­tÙT,ÓãRÝ„êꉅž¸Ø»+üôà‚{vùw^ÇlæÄþÈýIùߺÓÕ—í\ñƒÄáËϛx(gZ¢¬UíN“òº‡?ÆÞÛi1²È‰‹ ¡é†È¦.Å@c¿¼µÍ¼-þƒXÈÌ>Ççäb:1Ô\ð\Îù‘íim–$ânŸ.(K¼·CebkÎÜ÷µ¤[]¤|†Ög u l.J¸6P—I”1mÐû#çZù(‡ä†ª|õL?~×ÄW½ydVnýs¦^ôα¯Þ9ôþn'‡6‚©¦ì°ºÜ¢r£åÂEzžqV(¬7¥¨q®7º­Q}¯k…Àk¹ª\ó˜óF_§³ÜàŸ ,NT $~KuâíØå±¼Ssº|˜Ë'ËÚ˜·e‰•+”±bÙë¬ßbqNKbt»*~ Ü“8–º¢†Aq^>rqNw³ Ó±ò©ÞºÍGðDÞAÝnˆÝEyÞú|lÜX´Ó¤Ø»8š"-±.fòvbN:Òö‡ÜC‡Ò’xU¬/ç5‰¿¹ç‚øE&ÓÖб'þƒßó$µüа“Xó˜‡îtãH<².ùÊ£Ñi“’®WÜÏW¿ë½›¾Úš î=%™ôaW}™­Þ}5´±‰ëø45lå~ËÉ\ÌåìâXÚyš9L¥™˜e 7DnJ¼;ò=þ•Ù|ù1Ï‘0H 3¹šó¸ƒõTs½„‘;x¬eo™ø›<âê#¸àþó„l†1n"Ý?­õëW/ûÑ2ÑÞÒF___E)Ò½$†aÚLçäiˆNCv.—˨Çÿ§Â¥uÕžþïžö7lh8â³GD¹¨wAï_¾ñ,ºjQ[[UwUÇq‹Å;wŒŒtww§Xù²²²Ìt£TiÜ3T¢Ÿ¡êÓB0ÕáÍÂ3kàqל‰Q»‹,n¦ÕL6#L *3Þtiͺ—š#-Je®^y@/ T$‰—ÿ¿Q­{ãºm'o;à{Üõí»¦-Ÿ¶ð†…r†š‡nûøm³WÎÞÿÞýËFÊòÏæ»öíúÓešsýœš­5J<|Çe÷ŠŠŠq ý¥j–é?ŒŒ¼¨˜U^žM@Ó*yll,õ2Þ-QúÅ»{©ƒ]^^ž½ˆLÅñåfW£/ØüG•Ø?qSätñó¼ý‹þÊ×|ò»^³ÍÁ_(ý•Àݱ×™Å×##¬ï0˜ ‚œÏ'îiÖÜe6SIÊ|¼Áwv™Ê§Ë|0ÑSô»È}zПMô³)oql¤Üœ:í#ž™åë]8×õ9mñlƒ[=¹Ã}œÛÈQ”Eö m?ÈΕ¾½ËÖFe/øÙ3–QÎñ‰Þ¼†ÈŽÄº¢çjÌšdZ‹/­°6±…ÙÌ]oVÙÐAñ†{cŸ ÎX°¯ŽµöÙfuÎÚ@ÕdB}¡™Û͈]^PØéWvz?]#ÝÛ]ËæufŽº4¥ÖŸä…Ùö[! Œ¾?æ{›=ûľF7yï¨gûó+%¢È£EËØ»’5“Í ühØ%¡gt…~yÝj×šÇ Å’œÅ‰“ónެ ¼!t`Ϊí5þÞäZÇ»Þuy4nÓD =“‹Ö•ù7¦'FiÛÏúÕšùS™S#bæÜÏ`ä†hç_s^xsì+9åìÇH™ã `QäHÂWKh 8ÏëÖéýmyWG.Jü<ô¡À¤hÁWüÌ]ûø×-‰–às%·Üt}1y¦Ûѱc¯²æ³|!×;/éÝŸ±–÷²Y,#ä¡ÀE‰3Ÿ_sñGÎç#ü©¼Ša>À79€,æ6>ʉó•ÄÎéÐÉwø31=<ô’b'ÝTp4‡2•Ï'.{éM§ßðÖq¿§ÊÞÊʞʽT?w}宺öº 'n˜uë¬=“†È¬#7x=Κv­'S#,M“ãôÔw›{RDb8ª««Saéì*󜨦óò¢§:I’šÎš)÷Nyñ´µ±¸thŸÚ¢§¯ôÏiɘN³2M¦‰Ú}/‹¤x%9õeuJƒxÖͺ©ä:ƒ\–ž!;&{òuuuY5…øÃ[–ަ&rǽñðÊ í§´wÙ¹ôª¥“Ÿ™|ÂE'tÕyÏçï™ÇüõÇ®ŸúàÔ~qÀPnq_›cù¢ß…>û3wÌdæNKÜB;ý¡¨‹µ×êQ4Ä6^h·&çÔD?“¸ºÁ‡º¬"dߨw©ãÄPGâœZµc&‡¾2l¬èÀz: 2­¨}IJUÆêÅ#&sÛ€3b“¹)t@,ÈéKŒ$îxÜ‚· ºt—o'¸)pW¹æ‚ŽÄÕ¼1pV§º==bj¥¦öéKÌŸï…þÆ`Þ$ªžÓ”W™ùy䣫z $æÇnâ¾¢“8Œí©IcäYžKÌŸîÂQùQPÁ1y_™l[—ë§åÍ,øNlk‡sÖjIL¦#ð–Ä›C屑Ð~‘Ÿ„Þ»7ôš:ª¼³\KÑC ¢!-÷ñÁD±hEh]ä¦ÀÑ·ð;ZYÔ¨~Ô–!ŸÐɦJ‡U{MÁѼ.²6ç°Èò‚ÛyÓ >ÈGWûaèW±ã«¬Ñ3æZÎÜÃ$vRÏE‘ë8"ôÍØ8šýyºèçuÞ7äC‘«]É$úxx€ƒÙƬؽ‰ž:<ƨW?ëÖ}m>¬ÜQåEÇ8ý çGÞîèa®¡Ÿg#›y”…/ÉOÜÏlú‡‡:"3Js7sÎb.ϱ˜Ïò†9ïÑÌ& ‡JN`yà)î#UÄ^Í:^ÇÕ\OŽs˜Âo9„xय़Íùü×nðÛØvØOáË~–ùáüì»fOÞ4¹ÔàZˆ¢(sNÊ໕/Ú gv¢DiÚÍÛûÁ•••)g6UÓHÒ8)©–²¦v[ ¤é*ívì”R†ËËËûûûSxáÞ3\¦è±—ûME§öBÌúçš`Ù}•ÎK%33­‰f(ÙIÒ|íªnžqÛŒêÎêô¾šh>öcן½þÐËÍç‡ í)a¤(‰T@ÒK¶‰àˆlÉ’YØü¿ÕÜ“ŸÀ„Æîœ.篢‰; Ô‡ÚCO*Ù—…n;ÅÁ̽™«}Õ6Uˆ™¸3TIÂÝ]VñpìϱŸ Üžæw9 õqkZŽöi27ÔÀߨ,S›(Ë™ÍT*MÛe04£QRg$ëuiQÀºÀ†PKh1µmeNª±‰E“Ôµº ¯2Öžè⯉WGV“cŸ|i]9¤¬K{`vNY^M ܦ¾Q.ðÖéš+Œ¾ÅÖ@»¡Y¼‘„1Ò§Y •òЮٚ3¹&´¼ËÓ—÷Ñɢ̊<_mZ•ÎËkœ9`4Ôhý(òöNÏî¯en IDATÐˬœÖ@åd;m*:1ïàV}C&å- 'gŸœ¦¢Ñ:ù¼}ÆTæ,‰=W0-2›™‰ï•qvÞœØÊ*•µ×8¤ /öª­µöÕ•8€‰%üñu]†"ûDÚ#-¡…±˜9ƒª¼#Q"`å4'®¦6§)±:ï_c? ¼1°½Õ¢ûŽjí›·8¶A~Ç4º8yÌjsq=w׺ªÆÖ´QN>6yûFö³•™ìë‰úüco/Ìo¦n·j]âµ\Ç9¼Š[y·sÇómÞÉß9‰c¸/²ƒÃX•wæl§î2—Ù—vNáižc£ŒñZZ·qÜÄ'ù m/©°/ànãÄ22%ðWNå(nå)j9ö%âÚ%ôQÁ_àœR{Æ-[¶\[}mÝŽºæÕÍÅáâžâ×äu“§¬šÒ¶¥-V>¸ôø­¦Ã€L¨;• Ê„½Ó@ :d%Zªc›Ž[’$IËqâ7ž"mf!8=OÎÒuEEEkkë¤I“ÒˆŸ¦Æq[’$é dœºné?m‚e¥ðqBGYR™ˆÛÎâ]UUUš®RniÖa›ˆ¹Ï`‡Y}9±ºšØò—ö [šÕ2¦‰ôáìR3‘½R½ŒÔ$¬ªª*Mé‡f'¥:&uF²*¶j¨ªuMkÓŽ¦Uo\5ë±Y¯‘f¬ìúKivoaœÏuéž”Qª'¦ùR*… ö˜éš#ãld«CŽò¹ÄÊ!?¬à~“¨¡-p=Zô†À7—\–óù‚€ÊifÖê®Tý”[#÷ð o û÷n=!ƒ*§Ú¾Í/"ŸÍ«Å˜ÂvÕsmíõdܘÆ~°Ñ. \žX9ä¡ý´nV·ŸÉ+=Ö,ÚæŒ‚ÃË‹Voö£¼‹x}b‘Bâ’HŠ=1æ;¼«ÝÂÀ¬VÿUcŸÀ'Bï)êt5k¯nuDàù½‰‘.ëëµ$öïwç.G…:Šm1·Çs#ÎYûä"_ZoÝ$gvùYâèÐÑ#î§ŠÍšcûº>RžXÄêa»†m }0qVâY²Êú¢ÿ©óÇ Cþ“Ã9†³C?KL/ZX“³¸(ʹ=önÜ»7ñ©ÈêÄþܸ£Ë¡›ùY 6vTân`Û¥ÈUuÞ:°×ÛØ>¨!ð$·òÙșыNiÍa®Ú…a£ß/Þõuà3Ïå‡>Ýöå$þ$Ç™|Žwr3m|ŠMôx±P. ô$n+жl²”7±…ÕTò8æcœ“ø!gñÕD籎Ùŕ̠œñ(ÿÁY<Ï;YÁ"f'óeü†ÕüÓ)'¦ŸGù0 ¹÷üƒ.s`{qmqö­³ã±xbgã°®15ëk‚ôWšzI”þÎK`¥!¸T ¼1œæªqÁ7ŸÏg¨ëbŸ¾jkkg̘1yò䪪ª¾¾¾žžžîîîl¨¶'1ÃÝZ¿g]¸Ì2ÿ§£šá&&ÞW*ùšêÓÜ™¡-ÒVÛÄT”ÉL¼¬ È+áÿ[©"F) ]vd“ÅÝ6åörÍýåýåýåUÛª»ë·Õßÿ±û—}YÔ½›>ç¸PÊuËØâõõõ/ §œØb-]ëìEÞ~·ßÀ(ŠÒ _:¾'´×êj¸†nî¥3oIl&gæ]ûRèg¡y±aŽ*÷2UÍw(oõ±Mìb#¯‹\[ã†1ó†­ôËjîÒ8dm(*ŒÜšXÚâ€!skU&ÎL\Ÿw^(¯£à1~Zå€jÕX:j#s)ôëß鿆5EêË<+Ë{m`Q†­ÕÞjj—{';DoÞ³- ÖçìÜeîçcAÞ“:x5kùZlQàÜÄp¿ÁQïttµÙ=¦GÈÑ:¾`+y2¶#ÑT¥ØoÈUúb—ä,ŽmÈi k,wv 62fÚøYÁÉ•f}§è¦Äa«#GÅ6=ÛÌÚAûDª¼³ÌÖ+úH‡0±3oIhYQk«Îß }>pGâW¼#ö­œ7UxCb¹œêX_¬´ñEò‰‰7†zB#öe*³¹«NEÎy7åÌ+·O¢w’º óŠjjÍ*³¡à÷lÌ;‡59o Wp}hZ`fd=-¡ºÄa<ĜΖ1oUÃ8?°1´€s™Ã,Riÿ.ºƒÚ0w|Mòo¿7²Éê9üU±Ì݉ð[é5Ø8V¢žõôñ~À;¹nn椼}b›ù1ï »•ÆÀÅ¡ãp>âÇ¼Š£8Ÿûù6[¨¦‡ùv Ê{⮦“…låNæV6p;?d_d˜{hås dz’7°,«®zë]ÿëõIa÷Ë󌕒­O3UºôŸâ Rßú´Q–F“t•ŠU§ËØÌÓ/{eá8kÜeKõ´LÙ-æjÜ‚=ckeS®t*–šæ†ežV{ãÔƒJg*{B4Œ3t/}uT³ŽåÄ“¤7U^^žI¦Ô«Ì qâB¡Ôp·lÖôSRY¼ôigEçDõ÷ì­eƒœRÝtI‘qJ582ô¶'3Tô’-ÖnÝIƽ¬þYý}³û–_²|öŸg§O£l¤¬fgÍS§=5å‘)»ó•6î2Âxº J}™3¤ån««¬EÍ­üi– ¶©®´¸Z±ß¼A÷lWØ@Gd2Ûçì˜ìÃ;;ŒPÅÞ”èŠËXdˆ[èa3U“¬ÞénærÀ£Ü3j°Æ[¹:ñþL ÌÈ9»ž]ÊûTñ‹¢·õ®–ú/l55°¶^çˆ$2ĺ­­>»EZÚçñ[à˜XkÎÚDËrª"Õ‰e<ÉH·ÿæÀaëMîwu«×öë‰ÔÅ*vjÍÙZor£²¶¦Q6l[jH‘øvàüœ]±ÚÀž¯vPÎò~¿áˆn›k´…Ö÷»–·G&osψ}ò¦Ä’З+=×§ªÉÌ.O&úû0¤!V•·µèÉîä,öὡ™±ïµ:£CÈk¦Š¦À iÑØ¿*Œé sáVã3üU‘ÖfùžŽlã ,ç\~˜ø`¢{ ð4‹'9½ÏìÈóê:¢¿¨=Už-XûCâ  ¹p•VÄù5ÿUüFD‹¯t-½¶qªï/ðôÅÉ÷Ÿˆ r$æU¤ðî? ñSú9§9‡àÚ˜ÊFΙË%þÎ5/1ÆÎäLa ]Ü\æÞj/ôz–µ)à"6“Gáúxží¬bf²ŠA;M<nãd"v²†fØìÊ$½w-ٵᄠÿY-ŸÜzgk)*C…¥c•”æ©Äî/SýI©­­MÃúË‚úöTZ½râp___:«Hy©ûK¥YZ+¼’+I£gͳy^ÇS4ÊÐÐP–cÒôœÖLi™•5¸vÛ:Kå ³ J¶ («ýÓ[ =˜b|%V/»]@ìiϺ·¬ž:\>PÞÐÞ0åoS aïÌÞ­ïÚ:ã©éÐ(~!®XXѹ¨³nm]šVK¹JkšRטôá—:ã.>[ceÆÊéž‰Š·ÿÏá‚»aêƒ!W]㜕əÅ?ðÇ~›wö´‚/ľ»Šÿdˆ³ÙˆjâÐÁ±ßw™SdXÿ°ÑÈ}eŽ.ØXo¤¨vÐU|3ÖCcì–>?Š}ŠGãýÓ|{›Î@ ó»M-s|Á5 pŸ­•ë´œc¨bŽLl®°6ò·¯i—ð'ó×Xë°i9ûíåOkl[‡Õ±ý#¸<ç3£â¢Ñjo® IÖZ]°Œ†Q°ƒ:ºócOWyýåõÎ Ôï4eÞZ49¡Ï#‘±~“GHô'šÊœ[Ô1"ˆ<¯v8#ñ'Îä6¶N÷©‚É]ö üw›¾íÚÆ\Ëà2ǯñ½sGÜËú't«î— xs «àn¹kÌpÅ7ç]Þä{îŠíLœùÓ}hÌ»‡4'¶&Љ{\H-ùïNl徜}cû³¿%ÎKœ›¤®QÞIûTŸSb7°$gZìS‰cå±c Ë\Tp݃ò±élưOE†bó1žëó?¾Þ’1O7å~xJâðøéöxxV^wÑý>9ìò½iˆy|‹o¸à;ñU_sÁgùÍ|K׺&6wÒFCìJ>Î ¦1›ÿdo⼎‹/ýKrÓ&+_OS¢?ÅMðXJc”8rß1Ê6>˜êŠ<ÂÁ/e£.äj6°Îû¿ŒÍç·Ôóz~GÂt¶ƒ¿Sµ§ŸYïÌÞG?úè´G¦Í¼&vÍÛµò}+.<íÑiãVôê!s¼-ý×qø‹,¦]£tÕœ®ÜÇ ÒnUyyyVpd]Äìàqž¶Y×(#Ò¦ÍÀ´'™¹§A0c(˦xï•ØþîEF(U¡Ý­÷qzG©BmmmV0í a?±K¹Ûòwï )ŽÊ$ ²W“Ù2ÇŒ¸=N@ëŸÛzöëyúƒOcá- §®œZ>TÞÐÑ0<<WÆ•ƒ•Áú`ÓI›fß=;=¸å–çnìß;ií¤LW }}}ãØ]¥_€R¬G¡¶ðÜ;ž[úÃ¥ãÒUzpú²d¿w¢[iµtQ•òùRõ¬¬f;*ãFY¿@‘úíZiëõÆïÙùUäž÷ú± çòúQ·ó/ÌàušD=Eޝ42ìBÞJݘI¡¨à9þZæΘâGÊIØFz!pdä’Q·¼¤å³ˆç¶ 8½VàuCšZ oq*£´N÷õv3ø8³¦ûÍtfàÌnç'®l³(ðÜÉËìZ®nÄ \Ë13Ë4DÖ$Žmfžê¿+FVD¾•÷ƒv…ØX™_‡’ÄÖœÊ!ä|#O5¸CT°dÀ¦V£G+Üejdyè/±¹£ÜÂÔP_ìÒ#u†ªô×x¶Ã‚Ꜿ sÆœŸø&a &ñ þ­Ã’‚Ÿ&:9q›É¼·¨“Ÿ° ÑXf×$Íš–Wh/x¼É´z ¶QHlȹdÐ3;ÃäD'Gç]_p_¯ºÄÊËl)º/geàÝ£:øõyK#U‰C§ž¤·GϘáDL ´q%í|—7jÊ‹‹:#×Osq¯ÖAAâ..3«¨‡“¹fÌ\ÌÜÐ)÷ó8cÒ몑²Û¿ç¢–BñgÑè…ŒpMâJN"²f…ê)¦_hë¶›öW›Ïqñ¥üŽ®µ~û0?äÝ,áÓ©ÿ ¿å­ÜÁþ•;ø5ïáfï¸79ÿOþ¿$Ç>#XÈ*a~à‰¯ÆvÅ–r3 „‰ÿ‰| pkâó\Ç\ÌlàRÂÈÏûsp*çAwñ ®¡)P™¸œ‹Ùm»o¸ex¨e¨í‰¶¹·Ï ¢mOµM[>­jWUÿÇ ´ÔêŸÐ J’dppp°jÜõŒÓÛÞ¹¸Ô¶ÔNÂK†¥Á«T̰4ÐŒ#öŽùd³´qõÖÄÛÇ.*-VJ•ËÓkN!{‚KìýÙf[&]Qz©™Hé°ª´Ù˜aÇEÿ,ì–bîS¾ZšêÂ0lhhHe¨ÆÇé‘ÿph]õ¾UÇ|똊þŠâ`1‰’0 GÃџ혰=œ38Ð6PÙU9y2¶•™7E¾˜Í©þTð÷ÀôÄÑj/Dþƒ§¨ç¼PÄôœa¸&õjuT¨mï±3gnd=· ëša]Ÿó͉¿:úŒT[û ÉVÓc_ ½®Ì«#±oÆêr~èÍ~Agà¼ÄãœëÍ;±\Ådóöqê€WMÕÔkAh´\±OSÑ…¡w&VWˆžµ¤àÍÕέsИ¶Dxw­ÑJ¿N¼±h´Âëí³MmQU >öÔ+ÙÅÇB‡åžX[¥³hj¬†„<›qøw]…}c¯po¯„ª§˜2¢bÄŸ)†wÙ4æ«,Nt…BúræTYSï§C†Y›šX•x$0¯Y͘#êÔh`PGàÜÄïëu'F~ÈÇž4˜øeâÀtÉÅ¡7'*yŠ}y>tý$r;Ïö;j²áAå)¥)¶5oGlÒ%·ÆqõÉÆúØŒ²’r¬9Ëã+¾ëß ü,p9–é¨÷Æa[Ùîú‹|ãf››´å?·ô~×½‰rîMÊ"ZBS¿JDÉZÊØÄ{˜N ,¥Ÿ¥ÁS«Âï.M¶7rtZîžeªx†£s>ÍŒ²9œRíé‚õ9O³ŠY´°‘7RÎüžÆœwñaŽe-ü ÏrkrÎçQê8“C³ÙÕºuëþö·¿õ,èyø?N¤º½zÃI¶¸½ë®í( ÊZ6µ”F±RQ³éEºæ7$/uYÌæÛ¥ã–Ò-3­ÏLÖÆÙÓ¢¸ôÒsöõõŽŽfƒ¥¬‚É.l¢Öm¦¦1îƒ&’ÆJÕ³´šb£3‡ûl„SªçîÏ‚l)’¾TÛ0ËF¥‚RYû«t“Y –"&²"ihhhppp`` X,¦¨“RÄDVïî驦–;)µ.­MK…äöH¤¢Pñ¿Òm>ÙzÂÖ¡–¡)N‰£xbd¯m¯l|þôç ¹Â—>‘ rmO·MÚ1)3ëÊòëÐÐPúçT?iœógJ¸®­­sÏœéOß“%Xúí;iãR]¦9î¦÷[YYY]]áb&ÂåÇÙ3NHW5½ß噢ô8§:øñ¥áoÞüæX¿YªxTmK¥žaÿ8*¶1ÑV퉎˜É~,l4£¨¯èi864ƒ_„^Wf}¢6RCc¢“¡Äã=¢)íó‡Ð ­Œø]¥ÕÃ*ÇPÇ1¡¨Ü_©‰t Ì!娑qCƒ¥#n´çìÊ9l¦žMš‡ÅîM,VÇŠZÕ‘)9‹ªl.˜ÞÄ Á¼YÕ«2gÄ@"µºÁÒ¢•+ >”xŒFUæÜ8 4œ˜FC¨Ž Ê¾‰“…*ù‚ZvÄ–êC'Õ˜ZÐScÒ¨³hêÕÙœå§ Š$ÕŽñ ڣ̎]ÁºXuÁ ­Ü–¨ ´óH¢mHoâŽ-}þ«=^¡¦ÅÑ#F ö ­H<Ë#¡y‰¿Ð[mA`n¢.ÑÇ$VÖksü )çµ,q7Ëh¤)öQN È€ jPæ˜ÕáHƒ­M9‰?ñHøèÞÐîÇ*¡Ç9˜úØcÃBBv(ã‰c¼í~ûßlÍS>õIÓ9üiëj¸¥\žØ˜A ~K^ÔCÚB;rÂD%¯í:=q:9ò¼!t: ëyžù‰‡)ãffÐYkêˆG¨JôòäQ¶1›³y2E‘$Fy<çˉ/ÓÈV¶ÑÇìÄ_ø[X_ µØ°aÃÍý7wÚÝðBC\Õ-»bÙôû¦Ï|þì‡fOÞ0ybcdœÏSš-Ò~Ky'q2ßáÌb#,© n)%3YÙ²ºë1n˜EQ†ªPâ͘u~R|AŠELÏYUUµ[hÀ^ÒÕD[ú‰høô#&æ€qbE¥ ½ôšÇXJçùYzËâiÆQG Îê§ì°´Z,S¶@Ê{ËøÈiZ'E1ŽŽVºøH3Vú‰é¤-Ý98{pë1[ûöíë]Ø;yÕä(?óu;ëú§õ7?Ö\:C*}ªu/ÔM»wÚÎv¶.oÝÿ§û×¶×n=akmGm.Εâ-³fJòç…VšŸ²ì²[yŽôý–zUgÏ0ssξu™írö½Í2Y+»4©çr¹†††eG»g¨ÅæI¾°À?æ×§ëÛ7&v$*ù ¯å06âç¡W¨o0·O _kuéN=C"š[Ûm$t_hê×S1ªºÚÛB[-‰¬Ûa€¦~›ÝebâØ½Fcsò~VtrâáÍJë}¹ÉC´çMKLå—5Î-¨öPâGUFÇŽ¨ŒÄ® ´$æåÕ'úc-½*Ê…¡™‘{y΋VÂ&nèsJìžê5ا |D‡3e§ö2ÇåõRǤD- Gl/šÁÍGw¨'ﬢ‘D{â˜ÄõLWd[N¸Åì‚G½,¥ÙEWEGßhó4—¼6rS죑¥|Ž&ê‹Þ—øZàØÐY‘ÞÛêÜbªY2ÇØfß*j ‡§|ðY'œí²®ø¿pþUÉÊSÙÎÄTŸ?ÌþÞ'FcœÆ¼ž}lç×6—ûEW.lüüÉICâ§ßòäv·Íät/ÒªéàõÜÅ—õlg)ßIMÇö UF¾;‰!/büÄ6ò{.c”»YËtZI…3ÝåïÎS9Eô°–-\Á]LgOÒ•øzÚ·£“]4óV®a„Éôý¯1ÃâžþmýóÌßõ_w-»bYÖôKãÚ¸WZRdÎГz9Nlú¿rðELKå2½ÑqVZ]e8ìqgËHTÜ9ggàÙIÆYÖfúRY(ÇÐú?ÕõÉÂåÿ= Åk”^Ã@ÕÀs<ÁÂÛ¶<ßRZ4£ye(­®R3ø4p§w:¼ßpP&==é©Ï=U¨*,üÕÂôñAд½©g §gYOÛ3m¥kŽì¦Òt8÷s«ªªTYÜú•ïXÙúdk8ŽËIi>(Vd¯;‰¤HÔBbªÔ™ºt@˜©p•>·Ô@§Ôyy"Öf/³+Îé´å`ß?57r\‹Û=Æé¼'Г3¹h.c|˜f6Sû÷Ä;ñ˜¶Øã‰éef'þ£¨“ æå=Ñä5ÝNoV>bMÁ<Àý_ð™6ñVùCš×Ú2I‘O’PÆ9œ¿ÑY˜øCÑó|¸Í™ÝªzPf8rà]±Yµå¦ÔZÙï âК툦ZP®­Ý‘cú‹iôLÎÃ̈u%.t}âš¼Úȇ{t‡~˜)DàC¡úÄiyÕ5Ú"«Ç(s`Á³#nñ¡6çmsˆUÊØ¼Ä}9m ¦túmbÕ²8±‰¯%zf»j³B‹s¦}$狉ÆÄMeÞ³Í7c—õ{8æœÈÏC]\Ay¯¯VÉW[´ÓRà\âí<ÈFËÚh~§õ‰#k§ªl7›¯ò0—pИ ä;‰Íq°Ôû'û÷mÞý?þóK.©µ–<­ìâ:†láUUö­Ö¿Ó&Fw™Åvî`qNE츼Å`›+Ë\·³Íg*L½Ã¿};ùȦ|÷ ‰-‰¡øŽ.ߺ—Çq)Ûø—“'ä8¾g½Ø‰‰‡Uœäø‡=q8ï'f?^ÏßóNŠÌOükâi&óy†àLfÄÐ{ž}øƒÜF#ûä5Gþ;q/;¨æbæ"ÞðR£ïã,änà".aíK¿„ãy‚ϲ’z*bkø"rÒÇ÷é¥ë¥º³DgKã¼ÛæUôW<ôé;UêV IDAT‡ŽùÒ1í¥ÑjOZvé{ä: 1ã¬ÿR1‚ —•F™´ÐùÿX{óÀ¨Ê³ýÿsΙ=™L2ÙHI û¾‹  à†à.î[ÕZlÕºµîVk­ëëR·¢mÕº¯hTdG°$„$=3“YÏ9ÏΛ µï÷wþ a2çÌsÎÜ÷sß×u_×ÿ#ð§h~}zA–ïO%d+£>T·>’Eãîßq꯶gMYYñÔ´.RBPV'*y†Ik‹ZÇ¥¨„ªª===?Gg½O¥‰E6=¾É´§Ö¤ödöd“ýsv ===–ŠÇã‘àY0?Ø:²uÔ;£ìÝö¨º¼jô£EQ\A—=næGíûìÉŒ’þžÅò C¥!iÒ’´E«öu¹\@@nwd¥F­>¡eæñx\.—µ±°6(ɸãOM…ËWö'‘ʧ·¿|ÿ½T¿t5¦†Q»øCt¬>ÄJ•á>“‰‚LßBŒ‚•0šáyÁÙêàƒ·UƒtvÚHUø‡ ªune¢ÂoÛˆ+œ,h„í C'Åù¡™'Suv*usm€—2øN'éãTCXPngb‚-äñ§AnœT?“"¬½öÔÚЀи%ã\m²[p,]€£"ÒGU^ïCCèO¦°hZý Éqö¨`ÙE&K¯Êœ!õ^“#QòRŸ1Þþó­É·äßXˆÔ˳6ì@ZZšŒ³åAv¨¬u°›E¹Lžñ²ZRÉ6rÎJÉBˆÖÖVëìiii†aHîÉÆ§7N»mZº=½âÜ =¡Ë‚)yL; ö)¦eÄÅU‡ê?|¤3Ìn¼uã)·Ÿ¢( 6\‡\†Ã¨»¢ÎÕã*û¢ì¿¥9!&¾9qä’‘?ÇÍjÇ%O:[,Á><ˆ£úy»fM+I..…@ ÷²?‹YÜOP-jÛøî˜0|‚?|oÁ|ØÜ«ˆó?³TÖÀ{v¼ÊR™l0XŸNS”â4Î+¢ªƒóL"‡`ŒïM !¦2* –y˜ë #Š ;à¼(ßê$2ÈŠÓ®Pé`’ÂHïDqÙj`ª„ F ÜàŽðà:…i´E aè„«à€ ¨|¯1‚‚B;çÛ(³6Š)¨Ñp›ö±ÉNm”1ÞL ‡Ø"𯄛L¾òpf' '³×éÜg¬‡ZÁtðB³›4•é7Ù0í”d¢Åè‰s½`ŽÂ]eŽS¸3ÁÈ _™¤(î÷jüBažBºÉæl†ÇXep…Ê Ù=˜&;Ç)ä*ÔVrzïB=¼ SlT™< õ€Ÿ1Q*\ÔY _¥ŒðO*1Á*Ý — j³ùVÐ`¦îÍž;,Xut?'énfå•©`²?ATÂXˆšDa |#Ò¨0øÁHĵ«¹ ‹ü|7R^,Îù½¸0Λ×ÑüG§Êe‚õóËÅò[xi8B%ž‘à —P7 L>†‰P-¸ß Íä÷Êr˜ÒÅ6Ãy&ÍpæÃR‡sÜÄœºIvª"¬ƒ!pB†Æmð6,€—Á­1N‡½ `:4ÃK0vÀ`ØðÄatÀ.С š`„Á N€ãàBx:`¸Òr  fÀÛ0*a(‚K`ª…]µnlýf×79ÛrR¦ôÿ&÷O$Éq<™ù–LFèó>Vd±ˆ2dKw+Y‚ü”Eÿ)Ýþ!£O$²Fb“Õ,- ËËÑJB}R‹d*[ê´R$²ýF£Ö=Yöô§ÌÖ4²Út2DJâ@zzºÛív:’E™ ݹ\.YZYÊ M?Ù•¸Ïf_zA%‰®a]±´Xú®ô¶Ymqo<½&Ýô%gùyû„x!D{iû¾9ûš†4õ¨=ÑxÔÕíúîï•Êß“/?N"‘°wØíQ»i33«2˜G§ÄCÙ!_³Ï·YŸ¢ÿàmJJŠåŒl=?C;m†M‹irlÙ‚š,± ¹5± 8©wœ|_䘄£÷°ZÄýŸðþ÷®ÿవ˱.µÏûx½Þ©ÇÏ>†ª…{¡ê` Øà[…10 œpL‚0Rãd¢ CCtª£¸zXš Zå¡\eËH´ªÏÁº(ëLÞÓ¸ÒÁ×ZMj/Àð8:AqDµžT¨ˆ1G§A𱓔,œ £ÃÄíh§L`(ؘnÒ.ÈwŠRík'3‡¬C¡@å²lyÕÃp â&U‚t?Ù&¯ûÈw0]0ÈKO„ïMJìu±7„i²Bá_NNË 'B}”X¡ò /©«âüè`¨›N…¹ 2‰§ñX:+š8là÷34Êñ {M>RY ³)J‰Â`xJc‚Ég&›¤@¥L°;“ Qèa¿Âñ ÁU­ÐiR+Ó  ¦sn„3A7Ù%0Q¥0F.DÌ“ ùažCà‰ñA£GMžlÑgYðNð¹::Gsû"EÚ3û¥àM)ˆÃnÎüÃOç@8š£¬4x‹‚/¹a"ÞIV‹V:SÌÿ@ž9ž-ùª0¢‚ƒ ÓÅïÓÓÁ¶½ A-·ó‡ûx7ÖÁL…F(²  Z¡òàsè"pÁ&˜ püð5ŒTø†@ TÀP °¢`O¦Z8p`ç;;ÓzÒŽÊ$ã.™£•¬Öcå‰dÅKH6m$EBò¬7—C-r@Jf+[Cðô¨éJ'Zñ²9iÅâþ"°GULN<ò:¥ÏrrŸSžÑzOù]×¥S”œ ¶48, ·Ûm©%Y,™˜Ýn·¾%@ŽËËö©E8Fºê3&ÿ¼êÒ*Ý¡wŽî<8ç`ÉŠ’¬Ê,ÉÈø7¬5œÑà¯ö÷YÊK*­T°¦ cBG 0Ð6©-»!{òç“%ÛP^’B1•®!]žv#äÐuÝÝè®9¡ÆÙì´·ØåC~Âz~"ù‘ª³«¢¹ÑΑþ=þxäHV–Ü{VoP®aŸôÜÿ¹²žI©ô؇îÔtÕ»ŠB*ÌëýNz`¤I|cã1:X ¨¤CÒ ÌìÅœ/ÕÈ4ðB´la¬É¿T+ø ^Ï¢=èo 昜Æ_\üºX°Í º7”¨à0)ƒ8´ {è°1½‡*04Ü*«l†TȳLÆ€!°ëð \õ a'©`øDÄ#0U„ÉèeêbÝ´ø¢D=Ôu³7JĤ°{ÓDM>©9 ¼q^5¸®‚í\THw” ƒU †Åø Çã<¨Ò(©‚z•ùv&éxlœ­,2AäC ÌLîV¹1Â`©0ü !“(d×àf82á_]Øì,Ž‘¦¢ìÀ•­˜Í‡I¾ÉÖ¯Â((…Gà×)\©02ħ:‹M<à‡óyêoRÚÂýÜ©°f—à18ÛDѹIà¶q‚N65ûé–͇Çȧã¹ï×<<öòY\|ö=ó_¤©‰ àºV.!}ª+Y»ËÛÇíÝöÌòÌ”–#zä69{£ŽÿTº²ZûT¦+Çs,"»—”ì¯fŸÉ bÊe„g±û)¸D‚WTÎW ðÂ&XàC…Û\*© 蜷»ð¸±uR§ógÏf±±À\Íp¸N†C g‰¦§a&œÿ?¨6Ê ž„tä 7E1îÀ#‡P}L ³#Bø :ó>üÒ’ í¸lW¸O#-ƒ³cœæd“n7õvÂíœ Oü:Äó _ÙxR£ÞÆ•M(‚ Z]¹˜ÓÅ*A¹Â¬gÕ³Uá:…𰃹Â,³1-ÎyÜ£à:¸ÍdBÈÆæ@‡“W ¼®r"ŒqbÆù.By„ëaüÁInŒzƒ± ™Pº—¸‚[e™AŽB¡`¸Æ§&¸O B‡‚Oðµ ÜYä´ð#Ü—BÂáqéW…ñe¼øJ´#ç“vÚ26LƒÁš¶ƒš,ö_Ií¤eÒõîþ§ §)m/†Ïà æmÌÏs/â¾Wá1ë¡0‡‘‡gþI¼±˜B¨oƒíP×Ã?¡«•ú»ƒ _@5y L÷_¨Wyê)´˜øÓ8>|š1sTA\‚tÈ7ø~×ë$ù•‚šàR°‡öGÄùy¼¿F|5Àðÿ :ávPa8`)Üåð ¼mpœ'@<÷A+|Ci||pÄ  ~«äÂÉ&©°Þ…ã æCtÃa OÀµ°öA,‚zX 1ÇÖ¿kdq¨b¾XÏ€oƒ×¶'ç+ÖÈdr3DþFFêp8ÜŸ#nÑrÃîÞx,'n}ç%õ YÌ"Ù±"YîRu²ç–<[#-£’IŒÖ餎œœ¥=6ÝÙ*7%³ã¨ýÒþ#bÖtrò–LhYŸÉK²våV*²P–P(Ô'§Zê–Þ a==•WU–¾SêªëëByDÇ]3£YQ_Ït˜†ÃŠP„be²æãš÷º¯ìý²ÂÕ…íÃÛ£éÿ0”Ÿ¢xyqwiwWY—sŸS.…Œ×†ÓèðtØmš¦­{bÝŒ»f¤Õ¦ÙCvW»kíSkgÞ?³u\«³Éé­ñ•/“, åp8º»»{zzSÉÛ’—¹>³ê¼ªÁÿ¬ÆTÕ¡ÊÚ‹ÿmC%?Zª5m·Û¥1´|nå’Æˆ%o¤ ±ÜXXn¢òÖ5cYãÃÉy±ÏÖÑ««®ˆ¢KeCì̇¹¼Û¾&ÑDOmŸCª BL› ¿VkvˆÈ>ÈPH(Ôác¶ _œO­°Lç’k*UÃÆ »Á :´A=TÁlñp!ÜÇ‘Ö_)´ &+œ)°åSÒC •5Q¶e±?Æù]|£° ÆTšW‚ *5Ú85ˆÞÂ7~øJåW^²ÚY—`¶Ÿƒjš‚H0QaºB¥ ߯&9>Ú»ø,H¾ÆDh·3-F¹ƒå >Õ¸ÛE¦ƒãtÚcìS˜e'l£Ã Ó ]!ª2MPÉÙËØ_ƒ™ª²Àd‚OÐ{2Y¹qNÑXæã0<è v˜èp² šÁõa~ÓË@“°ÂAÏØ(ÒYª1W¦Pe²I°L•j‘&ë¡Æ`~:l„¶KI~:Kõêc²²²l6[gggGG‡•ƒ3÷fÚ;í’'ât:½^¯¥NÙ_ï㨕·µ©²™ªñh=ÉÚ} nkå-Í‘H$béXJ Ñãñ$ˆôo^G"ìá¼.J‹_æ”U˜›¨˜G¦ÎƒoÑžFÛ”—àv^;7…øÊ 2AE›Êq ã› ¦ÃÇ»á¸V€'fÂ\ƒvxN‡]0VÁLÁÌ:†Bë!Zàkq&uCa½Æ½vª¼äµ’e°WСЂ„ÂüÒdm'Å A(Ì šƒ»œLÒ9)DA„åÐmò‰ «÷¡ü°B!mé!#2™$æf³`v숰÷è_©lS¸^‡S¡C%(~¯Š¯oBÖDƒSfkx n30Á$xCáW‚Í‚‚N4…³àGp© nocTÁ“©*Ùq^ѸÜn°Oc¬&|£q•ÉÇ&Ýp* ×hö’`¬ ^×[iµÅß¹¤á¸ÆÎCûÓØ A(ƒ<&ðëì2qC:(Ð)-š4n¼-òs54åeA[ÜàY€÷5*¾Iç´F( 3©Ck›küêO د1ÒäbAndÁ6žH{58X·ÅÔŒ‚¿Â§ê·'pãqækŸ0úJÁÁ04Ø ëÁ (Ø3¸©ƒá Ü ó`l`m+x1ÖÀ(êu÷ˆ€ Ø :dÃX ›á¼áQ*,Âxðü*–ÀpØËá‚+à}hƒsàbÊAƒ"˜/@;¬€|0  ÎDïvÃp^r"çi„]ì?{î¹Y{³º‹»+.¬(\](„¨™^Ó>´ÝÝèvknÇ#µúHõ$‡€£šÁ™ñJO·Ûí–ê]òïÏäSüI󳔓¬«•-»>Ôg«“­?™ÿ\.W²À®¢(=jOù åî··ÜkY§[µ”-òdve4µLiív{4•ËbqL’ÿä¨0Uwa÷áé‡~=ÐÕî*y¿ä¿]–ƹñ´xñÅôÂ.ª®ýdh‚DŸÛZðmW5]S슕Ñ+O©,]W*7"#ÞÑ<­Ùzç‘YquEÌËÜ›)ç",°Ðš´•)_Q”žžK)*¹O+×Ùr¸ÿ9Óò,RãQöë~þœµå|ýs¦ÙþãÑŸèfþ.†ÛY2›'߆Rdq°Qi™c ^aªdþ±¢˜®ç¤LqTøRë`‚BžÊ$…Á0ÆÆŒL¼aÜð#¬†+ÀnÈ‚Gá~P`Ùfò œ š : *4î´1Æ`špe‘ãX” £ˆZAq„{a‚&¯Ã:¸ ìÝèZã "&>ƒ¿«œŸA¡És:§ÃÈ‚a`²Ie”ƒ:å³ ††éŒñA‚\!;c Ãà/0þ&(†Ib[ D,„,ÁA; ^Öñ›Œ‡F“œ(ËtNnÁa(Q™¥ ™øÚlø²Œ6hTxnOð9×›¸{À[S`Â,Š6ƒBÌ–øýò®B3âVº¢ßƆ€ |Pbc°É>!Çþk·ðÆÅšÂ„„°ÅÔ**ba=¿+¦«*µLœCcó)‚lTP N†ÛéZƉ[ɶ‹š Ám$œ¹‘ “ e ¶°0LÇaYÎÒ&˜MÍ Ö–Ó¸1†ÀðÂ0¾Æ‚è¨0 ¦Àl…w4Î@<£a,Ì…å0¿·²Ù í½Àj,—®.0~P{a4Àåðì0Þ„"øÊà¤Þl$—«C5œq ÅÐCÄ{û‡ã ÆB ¬‡ˆA# ëƒ]mÚ´Éf³mÿÍöâoŠ3+3=­žŒª ïAïÓäîÈUuÕÝæ®9©Ææ´•ԖȺ$¹ÎH6€?ª¨„Õ‘óûýtI>ú]V¬L–DJ=ápX >›è‘l©•,ÊwTq ó裖$'sGò T<w¶;3Ì´íÒhQz-&óõ%!Þêdöq4 Ãn·»\.›Íær¹d“¯×u]²Ž {×GêÝeÝugÕeìÌhœ×˜µ>K&` À;’ªúžK÷Ø¢¶Œª o•·â’Šœ 9O<¸÷{‡½=Ìp[ÃË5§Õ ^1X®˜•×eþðÖ{Ëo*ÏÝœkÍ!^£»¸;o_ž¦iqâu§ÖÁâ ·Á«jvU¶¯Ág Ø’5,dµÔÇBì„–HXü=‹oi™RZÈcWW²v:©©©²²^ÐçF[ÏUŸ~²T¯·”´´£Nùo,VQúØ3ö{.'íáoÑÞLg ô@3gì·U]=bßëJt°¾z=Oîà‚;íõ | Îk ÉÎh­êìL6ùÐÏ`'<ØM ~°ñ’Â`ÂqÁõvÊà48Oü¨p“F­Š]!]a±­¿QH3BÂÆ÷ù¼«3.΃1äªF IDAT‚1 dø6†&sr¸ÐÅýp¼ ÷k¬1ptQ=×E©7ؤq¡ÉÞl–zXéçÃh•?°þªqv§©ÜâÞ8Õîi‚ÍÐâ àç0¼ +  wÃjÁ™Ê¶ç1p L€FxR0He¥Ê9‚!!Þ¶1BÁ _˜,6X ë ƒ„É{& R/ vNR˜¬ó4ؘNø«ûá8^‚ ‚óc,R©Up°åmqÁ-Í•CëSv²Õ:TÁíð´ÎìÖøRûí(D#–Ó>˜î·DáŠ[”¿¾Ì/'C*ŒÃÉ[Yá™Ü½•Y“¢<qÁ&¨… ×…g‰´xÎNžJ‹Vs.Øôö¹FÃ掕¼rËEÚýaß¶Üi\YrDÕWÊË 8ªÁŠRAè—à|…€BÔÃd‰’jŒTÙ-v„Gáv¸®'|KÁiPi½ù) y‡ýðÂo4fÀ4*´Á p¤‚ oÁj +à4øFB9üþ ŸA&Œ…"ŽØB^W‚PpB'œÃ ~Ñ?þpËí#Û}Õÿ¦´U,ªñþÀÛäÍÞ=÷Õ¹“VNr»Ý'%%Eb?}`ž`0 ûc×òÅ‘H¤¡¡¡µµ5XJáýá>#SGµ“%ˆL’ÖØ_7Ý’ûs»Ý²;—L޼þ–íÞÃ" [a+¹©¥jfy¦§É“LµèûLÓ ‡Ã@@ªB5÷dffæææ 2$//Ïï÷ÿTا7¥ªªO÷ ùxÈ„G&ì½aï°¿“)0Y<ðÖpLüËÄîânÃiøª}í#Ú·þnk°(8üŸÃ½ ^YtÊl¡FÕl´8‡C=ìv»ð‹PNH²ø\.—ËåòÖx«N©Ú{ÚÞˆ+²õw[³¶guéêÝÝ6³Íî´‹Na¯³÷Áú«ì[Ã^?ŸŸù³Š›ÿ¤ìeÍY÷9o²t½òÇ4>Zuer¸†«á;˜Œ·2ó4QYÒº¯Dð™ÂGnýšÔðù1ñ \ãJ‡`vðüà nÖ¹ .QYá ø•ÁvƒÝ E*×B½Ê0…‚,•E&Ý;/Á8èd´ÂÛ:U6¼6jò8©›fA®ÊˆTÖE8DÄðB#Ä{ ¶Œ¤æºAPPçCĤñ„Á Ë3(‹Qb#ÅÅG:Ó5Ü9LÉÀ×MwÇE(µ12‹´mdÈŠ³.FCŒ±‚‚ËáV…ñ3T† Þ7¹ÆNÜÍÜ(§)P.÷šx5ìvbÀ\A—J—ÁÝp¼¢r¦ƒ³4¦˜ì6)…?öŠ®Ã•Y*ó~•©‚kå^¦(<ª3œ&õ°R!Õ üð´ÂU0KeœB‘6xœ˜ò¤(ù‘]æîUbó.ŒÓ!_áMG𠜫ò˜àŽ—öŒBy²ÁöíséîüRd(hKù¨ÆÃT˜kpc¸|2uªË¨Y K¡@áVø+œË5 ¶ñâé0¦__˜,ãÓ|F×á{“ѪâŒñʯ¨^ÏânJ+N6Yb0¢‹¥0 œð¸ Áð2ì„qp#¼ÇCX°È¤Mc2, ,Ø-H‡ÉnøVÃWp dÃMp"Ô ð{¨0 Rìló13BTÙ¸RP®±Hô&rðÂiP?Àp˜oBP  ‚ð[8<ð0´C±B“í° ®‡ ‡‰VuU¬ZÖ¹,œžøÜD{Ì.)Ý¥Ý=zŠ6YS;iö4—â’rAïé#«cQ¿úÏ]Z&V³EŠ…KCzKÕ””+-ØÉ =]]]±ÞCÛK¤]¶Ô’ûHÉ*‚$¹³[c^Ö+!åv»eÏÓšï±ä'$še ñX~»ýE4äõ˾åao]’ÃáÈÌ̔،¢(¡PÈ0 9Ücd%Ö*)ŠÒ:¦520â²»ÒCé9ßähq-9ÈU:rvÓaV-¬ŠdEÒ+Ò~;°fAMwi÷ •ƒ<‡ÿ—/WÁš‚šy5YŸfÅb1)Rl™ ¯{xÝøßw(«/ªv¨Õ¡¼Pã”ÆìÍÙ±1ÿÞqÍŽâUÅôü»ˆ‘k%½‰-+K–¢ÏLÆ&û06ûü—¼¡ÉœÉß÷Ñ[JN6ÉÏUò),fEQ$ Q’0%SýÙûWWýÒUƒÂ¦ÏT€±ð 3 ÕIEÊ_ü‚·Á©pn—§`¹KÐcª†§zHƒÓ=„M¾4ð@TPª0Va€I3•1&:\,Ø/8˜J· ÏàeÁóÐ#!S£ËI8Îd“O N £r¢@5Q²I P)Ø)ä9Y[ÍßSI1jCä(^ÆÅ˜Ya™ Õ¤10B‹É[!æ)4 ^·“®V)Š’Ð(¶ÓÔÃ.Á;v7e iP Ñi2X¡橈0[b˜ã)*Ÿ rÀoâƒlöéœ %*ŠÁ7W) 5i²Qì$`Gx ÂPcàRpƒ_ð-VhW©ü<1:u*áxÈ„6hѸLð=œ y*…ðÓô’?˜Ï?-ªãr6(·(U.~'m# ì#-ÆÊ šXq!¥ïš¿]ËCtw¾Í óÀ ßH‰q^7á„ËÇþ :¾…TªÒªrƒ ŽakhçÛ¯á©NNQ‰ ì*Oˆ©\àVByÚ×§‹ïjÑvVT狊6èP¸Xå ð*áYh‡ ½¥Œ€tÒàkÁk wÁAh€½pì€ ˜p5´Ã*8`/tÂ0X SáY(saz¸9ÆÕ0Y¡Z@3Ù[?öêÒæÂ~èïàX 0A”0ª×¤q2L„8tA Ä`•É6È?L…Ø`Ž•®ö$ö|,>üÕà”Ã)Êòýo¾Ÿ´d’-f³²‘”ô–½2ËÉUÞS›Íæõz'MŸu U‹ ¼­pd‘¶žëKÅ»'‹Æ|xÍÆ&#ã(:`…`0„Ÿ@l‚ü8+ ÖÂErpX!d¢f±7L½ N… Ë5Î4Ø9ç Aœ ƒ!8Uƒ`„±‚Eð"”H…¥P¥2J°MÁæ ä>ÁfÇÑ¡[Pf²/Âk ˜| •à7Ø¡f¾,bÚ!^Ôð«Ì1(ÊD‰ÐcÒf™ÎRAŽ›xˆ…lG°NCS(\¥±LE‰ó h° \ ÂnŽº{à,H)°2  :a¼ÃàØõ°Rà (‡ñP Í´qItBš` L‚yVº:¼ãpõKÕÎn§îëgÖ»;ÜY•YŠþoˆÛJW–݆L9É·H~TëèUûèÅb1K(¹Á%Ã4^²Ä&Ž‘«èµæ²ÞÄbJ†^2ÞvÔ†Rë# ²Ùl–‘U²;­7ÿcº’Ä"¡É0*g$ë,Ù¬ÿ@qgZ§‡ðÎÁé éZBK©KQãj²‡åne½ƒ§Õã«õQ#¡&Í<”Ö––q(Ã’>²€¦â 8[f´dÔfXŒpy…®.WÍY5‘ÜHöl)R,ŸO£GWõ@Y ³¸3£<#‘H´iË©Ï!~ä3Ê$mGúøÂÈ£=¦ux<IM´4gû§+K"9¹ºâh&^}f“åå%I@ÎJò•òe¶Þ£O‡ÐJWv»ÝçóŸ2ã§™£ü½Ò|ª–w¯Åuc¿àÖr˜·lc½tµ°óa‚Ï€^ãŸÀ¦ñ I· ê¡ÙäI·ùPÅ«Ðmpƒä™Ü™ÁÂ3M¦0ÉEO;Õ6 5ÄDj6RdrP0Qe Î·Y0ÁNžŽMc–ή,|휣³µ‡*w)dFQL•BãÈÎw¼‰ ~úTZ¿'Mp-ÁtY07Îp…àþ``ƒ]ó&R\ÎÄ(¯'¸êLBÐ%øÁ >srY*“08¶€û! Ë Êà)¸ÐäxèÐÐMZ¢Ân…P[ùZÂ{u† t“ý0ÉG‡ÌC¼ÞÊÉ*‰‡aä< ¿?ùÁœ>w(î‘ò_AÄÀe0n„‚¦ÂwðG¼ÿ 68>‚‡`(‚“À€ka| ×@>L‚f8ì„AP ÏBcŒ–­Ð ÇÃu°|p5Œƒ›a,…¤A7¬à0ád0`Ø¡£W/ãdÈ„Á0x‚€˜ ßCEò7©e|Ëê'VZ\›uϬx<Þ:¸uÀ–fét;¥y’5¾jå'ùµO%² æ-LÈÈ …BGº¾{Èÿáèo#iE+‹&~ Ú¡¤Ú[µ]Ÿ!èäÍ»5Àk¹¦¦¦êº,LÞ’­B¤¤¤ÈŸeëIÆ}ÙÛLÖÚèS÷X=U]×37fjš–‘‘a%xÁ¦ÀeVdºÃðWû»ë>œ8œ»#·Ïkb¾XçˆÎA+õùý€­2c™EË\6îƒqÞ ^ëR3·gº®µ®ÇãjTõ…|DŽÜY‹.ñSÚKÇÆŸ‡Ëå’©±Ʋlhþ+‹©òS§ëÏ L&ûHÉ’Ÿ¥êÒ÷{Lfæ6åO+ç¼×dlVÈäÃc0º 3AX#¦Á;'8 qöÀTpB–Ÿt~£W¸Å$lãY(œÔ…"â`L§‡¹WÃ4Q ¼›i»`&Ø¡²Aa„AZ‚ÕI‡¦ªƒÆj\é£'ýõÜ%øü¨’iò9,EÛÊŸàyÁa4ïç 9:ã·Û¸ÒÄ#°A¥ÎÁmd˜|ã¨dh¤$ø$àô\Fvsu„íqâ*÷@%´ATÁøVÛøXg7 < wÀíP&ð&¨2ؤ òá:Á¯ ÞјoÀ©AZ{ÈœÕC›ÂW .•ÁF^K:¸a)%¸#Á=ðà 9H¯å'ï˜xLbq.(`q#ªüCa¤ÎÕP [¡žLWØç{ÁÍ wÚ˜”à>ˆqàk4Øÿ¸,ñâÜ“ óø«`ŒA„'ßãñnZ¯‡ˆŠ"xMç^X ƒh~”æ,Rí¥û/¾ÀÓ:Í1zÞ€WiýW¸ÐîäÛY´€øÐ ax–À(€Ä!a°Ê  î†Ap#<¯À[°¢p tÁ6¨ x«×$¼ H¾ÙjgÀ À‹°|° €X ×À×°¢ ƒ^‡§`\ŸÂ-°®‚ɰ . ÆÃø#xà_0Î…Q°_°RaDáŸà…‹’¿IÙ;³g=7K6‚¾}æ[(ù´d`Õ@GªÃëõÊÂÂn·Kž›Åµ³€¨ä¢?`~ \ÚÒdzuå8g,‹F£.—«O.±ô×eÔ@—4‰°8`V‡$çòcðãéúø\Hµr¹ ?ÆæÝ*¹LÓ”­0’l-ú†µ©—\«…•PÕ'Tw»º —ª‘¾=Uù&RXÒØ’mJ’Ó§5è–Ù¥š¢¢(J“’÷i^ù¥åŠ©¤mI³Ä±ŽÄÞköw÷q}œ>äþZ¿¿Á?xãàÏû1§4¥¸[Ðmüûý ®YÐ4¥)ªDnhê¦ßÿÏš^VùrTÞÍ+ •œ~$3§¤¤È½…<Ñ‘±ëÞUíÈUµ¥ÖØC8î³!ë× ƒþkgòRíþx~ ð«T{éŽqa9Nìnƒ÷!ŽŸ‡ÊÙ^…pȃ_Áeð8CO”îNn\¡ÑœKašÎ$A‹J½‰  æÂˆA-Ó‹”ΪìÄ;=ØÀîÇíegèˆ/­MðDa˜‚ ¾2h€¿Á%*QJã´@¤ êM`S‰ ƒxÀd2„` \j瀟1a` xå çÁvÁdX ð¦Ê™€/;ÉKáê)‚¿Û8E°œ‘NñÛ'l÷[¡@1£Šþ(ïå¨Fªà4ú³zÙÞ%p³Ê£‚µ`‡\Ø `äÀ~ðÙ9ÑÍÖ/ÃP«ò°À/:5Br J Ά;@€†/Áu„(|'A>„{a Ü׫‹q+¬†ÝðKA3x¡ †@Œƒhæ@%Œ‡`\ µp9üöƒ QH$Ù6nû~›&4%¦ ùrÈàƒÓkÓv‡ôHõûý~¿ßçóÉ8 £Ñ¨Ÿû0Å­f Œž2G£ÑþS,2ÉÞ‹•- L–>ɶOG„dÉ"£Œ…~ÉÔeÁKGôÓè)éI ¤Zoh³ÙäÀ²ŽzHÂ}2—liŸL4OFïäkdË4yúÊR ’g´Za‘H$‘H„B!!Då´Ê˜;–Ò•’0®v×±g„ûô-“´e¾´*ë,4KJîŽÜýó÷gmͲøúŠS©ýÿx»ïp¹êr}øŸ53»·”½³÷Nï•„B(¡A¢Ø@ADAzÄrÄ.¢GE•‚JSQ‘"P¡$’@zvzOvo3³ÖûÇJ–sö޼žóþ~ﺸ¸öžÌžYë;kžçûÜÏýÜ÷ M#©À¡8þ8òù|yyy H…©º×ëÖ½nå…+G<4"ôRaª²©²rMe.›K@Èû-„|û ù"Ù^$aÉ]o• /')Ñ ÷4ÿ XxļžŠŠŠúúú$y¡:FH¶Ï©Æ UQQñΊì=,aÅ¡“Zì¡ãB÷²"p^äH^!HiÏëM)¥œ!ͽC&¥5²•_ÇZA¼È…)‘íô2œ½ü5ejdþvy%gZ©¢.ûJ|½JªÛki#¯r\¯Þȯ¨KY_%Ú›µ‹ 28RM“3î\ÐAÊaÜ8¡Ö[iµÝ~É|øÐ¡C«ªª*++ã© }ûöÅ<ˆ¤¡]HPŽcJ<[“ì÷c+qOO^?‘µ_'yÍ„Œð/¦«B œøEúŒje˳-cZª7U÷Wëy‡íy‚ãzÌÇ»ò¸“¼KœØƒŒl6›(<%Jaˤ‘Ÿ¸VÆQû¹?7ë'³JW—îž²»hg‘îÐ÷ß=+\½Â¾Krò tÙgUÞhX{êÚkìW‹Ï„æmùøÈƒš±6G>Ÿßtä¦\i®öíÚª·«’“/$°$ï’|4ýI …rþÉÚ&é<¹7‘À„+QøÌ˜¾X˜? Ùƒ…;‰>•z¢‡YSSSUUU___VV6`À€Ï6‘2éƒ6kqÈÊÊÊÿEö”±L=Ë$6¦ì¦)ÔÎå¡'Éúì³þz|~Ó.j"{y%ã«9Y´]¡Qy×s-ïâ1p¯G¶¦]z4ÒÉdj8$tßv#©”ºV+B©¼ÁYg°2eZ^{eÔ>©ÜÍgöA9¿ÎøEÎýôð rYYP’w[#­öåe3Î̹‘3yÐÝM¼/í®JǶˆÒæti+RªÌY•vyÎ"æ–«Íz¶Çnæ…öDZLgózÚ‰yÇEþ˜wÜ U¡E6¥LÞaYʱ\ú`—Ï4y™¹1ëScùy¤1«õö‡ì¯³™WCe¼\¤¤Ò'öYÈ%}í&¿9—Úš5VøNZg ü-ï(Z( ŠüŽR*:¬ìPÎo².å'<ÎYX“2„ÆnwFFs4ßäLÝæ9NvÊS^>½wÕŒŽýM Φ‰›"òé9'ä­w}³š…gÙ{¬XOŠãÙÊ0óÎa.=„‘Ï0‹ ‘M¡ü3›£–§9›;ºMì6—y¬bWèW“&ÃohŒY<GçÜH')1šÏ1Æ~ÄU\lÂû&÷±—WøvònèÑÅ*V0œWy¿;P æÙË|Žd'-œÅ ‘€Nz;S®Ë[ËY|—£ú€ruuuíííÉ4U̸4hPccc‹Wî[ùâ¬GÜ3¢°bè³·Mö¤ÉoVƒ»ø»PŠ“.Bïb¼«Ð6°‡S¦ÅZ¬ ÿÇšä_“hXÚSZùj¥¢©Rù?r$ž¶ÿÊÅ¢>ñÊ„aØÑѱí„mÝUÝ5Ý5rÿ-[ÿ³WKÅBÖI‚Öy‰ÒUr4Õ4ê‘QÅËØÓÓÓ<®yõy«®X¶±lÄK#zÓ½ñæàÿÆz&=Ñ]Öä Þl‰ÛÈAÿ¤ªª*NW1Ä·sçÎdL»XX´Åc Š ûϤß5Î <Ïr)+R¦„vù+œüË~šéxOðëÝ¿@*y5²<ïlÎgohfdŸ#Ã4ÎækTGz"g‡îÒÃÝÿ×’ ä3¤"û"C×óLÞ .ÓX‘ó@èÆN;C·…¾Z¤:t?‹ØZf -‘Ï;»ØI);y^Úi+òV–Ë–ÑãÆ¼o–dL¦ƒ‰Te}l¯ñ½&…zÓ&ä´†vÛÜëmæpJ›É¡‚ú¬ó.dc‘#èˆlÊ»+2™ËØ×êÛí®jvÃ>Ã2j"k#ÿÉY¼Æ-i™”B©À»#½^â‰È;çÞîšç'9ŠZ¦°…V>Þæ6?½ÒuÆ]èД×ÚØÄ÷"ë»|¦Ã%ôò¯±$òåÐ|zYÁ²ÈšÈˆÈüN—PÊ'¨# \jÚáÑÀ‚ÌþÁµ[yhŸ£½ë ]—™I‡«ø³ ›m^oáB¦G‹ÄÛç׸©=?~Ô• }ÿJ÷¦¼CŽ?`,g¤ÍL¥~ï¾}RRÉxzC‹Åoøeè÷ü… y€G¹’ã8Œ9L`¾É>Kއhæ0~ËGÅ9<ï6:ø4ãx‰¯òQ†0„€Ÿr'›¸œ,⢸ô+ùL‡Y7Òȇ""5|‰§YÃx†ò¡"¿¥‚0e<ʆțñCdfèã,¢2ÐÊÝ…_¤ÊÊÊúúúšššÊÊʸÀŠX¶²²²¬¢ì§s~úÇ÷ü1µ#õØÛ~äö%vü·±ÙÀÊWn:tÓÿH9)ÆÖ*…Ûê¸bK&À¥¥BÈ(¡¼'2€…\q²,œ§‰ÙÕ‰¡_2*¯Fƒ¾Â#~£VŠxÓÝW7ˆÞøì½5½ÿÌú$›ÍNºeÒÊ+V¶n/ÛV–îþ?ÏC)„øòùü¯,<ò»G&ÿúò¿¿|ÔO:(r›J¥:ë:_þ—‹Û‹G?1zØ‚aq};fõôôôôöl:jÓöS·—÷9úï¾±¢ðsÖÝÓ IDATHüÏü_>R©ThР>¦À}V P»¤ÏWßê­ß‹lÈ»0ïÏ—º2g2K³ž.:i¸ë+ýzFîÖÛ¢³æ¹9uÝÒ´éŸ<à¿0(r#¯3„2¼ÅŽÀ]Õ&ôdd’7î5vßåõŒ§——XVkTnØSáÌ dzCæ­à“‘|¾È»*\›rSÖ"F§ÌiUÙiXàÇC|»×¢^ 5 7-PŸö ff}§Â½!ͦ qC‘Ë#ßË9!chʧ¨Ž|<ëÞÐg#K¶hcVÊÚÀO#寔\)ÊKs]twÿ7úWˆIG3ù9Ñ×H¸*ÿÓ#þú[«tk•ì‡ ?Ó¤<¿#}DCþÙÕõÇr#U){"…NáG¼žR—=¯ÖO·ìVÆ3ǧ†M£÷9„Sú) …þÎçøTàw9wµÚÀ!€û> g-s{¼Ñ£Ü‰kýè:3ºíüxྙ³%6—ZÒn8£ù;‹Ôöåä¶YÍo9¤Âø#‡å-'⦡îëtØv½»U†ÖQÊ‘e.Ïêî64mv©ݾÚ¹9ð¡¼uiO…Þ.rWN{I#sžläŽ}.> @÷v±ÒÒëëWj mkñ”Ïçl[/[f@Ú[Y ¸0ïoi _F.ã.†T¹vŸºèeNyÏî9ëÔ>`÷!ŒÊke9rÉGϼd×~¶×5ìI99§hµ C]³Km¯y:m`Wg]ϼ@ŸÎz‰‹ý™Æ^ÏÖøá.Û¸˜E)GÍ×Â2¾Noª.kÛ 1ói÷¦7_™«=]ío¼þÆd=Ì|>˜22òƒÈ×[¬œgÖQ‘Œ£ŽÌá þ‹•'õŽÜÕ{ö'™ÈSjB ˜È±ÜÂtî`(÷0ˆ—ùËÊtþK™Â¶ñ‹ãº=¼Ì)Ìàv‘ <—rUh'ÇEzy”³¹—Uqxg%C™84eFÞ_YË&neænNc=˜‡Ws;3YÀæPÃÔq:_çVÑÊmLáðá·}•Ó ¿H­­­[¶l‰·ÿ€Ú»»{zz6mÚ´mà¶Ü¦Üˈz£\.7påÀI-“JÚJþGQ£lOÙÈçF–ï,O ¯\.WQQQZQºüÃËË÷–}ÛÑq‹"‰,Ië% åñLR» ]õâ=xkkká0ÓAE¸ §ƒûŒˆ ¢ ín㌔ ‘Ìý˜zãÔo Ü3kOãòƃSÚ3CŸZÙTùÿ^ §‘ËÂÐ{DÅ‚ÂIѸg%W·ãÈõ¯ÖçóùSwzsP¼Ïèóœ ¶ÌÛrÌWIgÓ‘ƒ¨–ÈØv¶°$LåRC_¯d2ôÖgÎ÷ÿ6Û§hK„HþÙJvtt455Źjûöíñ=–Ü]1µ££#vþ,ìž&ÌÀþpeªæÓYRäʼï3–Y) Ñ‹ïö©W\ò–E#| Î·ïõd›UdèMkŒìáÍ´)—‹U–’3ƒ¿&”x¨Wš ž:,xjGJ:€£;§ÔúnåÞbËÛ–N ²=iG*ÙDK¯úN»Rª™h TÙ¹+¯„©ez™Æœ!¡66p[¬n±>°-2‘¹ƒôvy©×Q9 ©É:µØô^{HÓÉE– 4²Ç_Ò&¤¬îÑ©¤´Ë^å#üŒó2þ–²5§#’î2¦Û=îó©Ê`ÉÂ’|k¯‰æd -e©ÈÍi#¦Ëíðnê»,*ÞrÁV¿?Å7×jºØ–í„´°!m&Lëæîhá¸ô_ìŒTGN‰<“vd$Ò‘sH·ª¼[KD½*Ø›vf$ÃÛ‘m5¦ç<iÈxJ{Î+Îà‰¸¸I9!rO”›˜RÒ*UffO>ðÞ56T„ë›ýǯœã±³èb4{ùY žÒƒ>÷|êîÏ0š[y›Y ålçPZÊß•Û2+_=ÛÓ+,;›SvEf3–o1šaœ@ë8†Ý¼È}Ì ˜ ¯³±Eì%Åyêø·èáÌȈ”Nng m¼‘ÜÛ±hYþéå-ª™ÍÑ,!ËJ6QÊ^2Áp–3™õ´ó¹{K´g=OŠŒãeF²›¡ä ã‰>öŒo¦Þ|tãE›‹²Ùl¬T8ýS¾µ¼;ÓýÂ/t§ºƒÝÁË}¹g`OÝâºâ\q ²%EO‚Ë*ì—¨i«öò°’]%IðŠ¿êEAQÃÛ ÅíÅÕ;«ûÇõaŽ%FÃ}éI@ŒÉc…‚‰gy¬V À(.w iÉ[Ç \ïÄù²˜\o{}ûž){ª¶V%…K &·äÁø×ÝGì®ÞZ]Ò]²â+F<=¢¿"2™úë+6W´þøg4îMnÚqôŽÝ3wÇÿÕo®/‰J’KKL/û ©ljÕûV~xô®Ãv훼oüŸÇ§³éþÀéöc¶7.n ö­'‚ HGéºeuaiX½»ºnE]Qç?¼¦ ´ÿ•#N½1ò–,õ‘YJΡP­±ÓQH=é}öIùC޽½½---±çV,zß3 ß2†vûpne*++ßYÕb+¿¥‘¡i“ò6qdÚ¡›2=ç„/½hÍ ¼fíšà–¯¤ŸøXä(ê¨ <é`NàáP{ä*óÖDFE~Ý«—RÏ]•fNrÌn'3’¯ætçŒæ&˦Ôg?ÑaZäð”"2lceJg­ãzy"›²¾—wXàÉá.N;®[w\ŸvbèïìȘ)‰Œ‰¼œVÊÐ@˜WQä˜.k{=–2'òSŽö‹pÿ:0<+[eV™»ÛÝΨÀÍyc¸<ðTÎûˆòæ<ÂxÞËzç®uÃc–|0ºâŽÞ‡ò\Ôk@h]ô°ŽwñJŠv2#cL˜]£è5ßÙæµ9žX¢û†VÛÖ30òýÈÎjÃS®É¹52•¿§M%,öá¶wÚÕkTèvÊùt$`d =²Ç¼7üòàC òÚ}hk¾öñÜË5ôX«(%™œ1(ô‡À´Ðå¡õ=VØ}›‰»|l­Ó3~{¹§wpwƉ¡ñtFŠüõÖhbIô‡ Ú™ÊÎç-šÇ—YÜmu~Ùn ÞŸY6‹–À›µ‚N3ÿb38š_¤XøèöidTÆBXD–¥ö+½’rQ`CäöQÂ|ˆÍ7„žˆ¬`6x–Mœ3bÍD–ð"W2™ui§ó6 if Çó ‡2”c™Ììf8³YËŽÀȲ¼JÉÓ좇=l&Hû <ÄøÂtÕ´±éîìÝQGT²»$QHeÙlvÀîõês=¹³7Ž{nÜøã3{þ›_’WâlÑ_¶?O,Æ|Â0 Úƒò­åIW ©zX"ú³ò’tU¨v‘Ì$%ÎX +ñåÄ9¬p*+>ŸÂièîKˆqÌMtQ_ýÜ«ûÆï‹2Q¾$_µ³*Y®¸ë—hÉ+Äè_ùîòM§mÚ~ÌöIšT¶§ì é*áX÷ÇBãðŸF|ÄËÛô¾¦ªÎªÛTÚ[µñÄÃß^Ö]Ë;Åõ‰æÖxë’·öNÝF>6²¸­¸O&‚íGm_rÙ’†×Šv½$Ó•©[U7dõâ΃Ûþ‹éª´´4~‹xçTˆ&鶪S(â^XCÇÂʱ¦FÿR8!Æÿ×O{÷„ï—äªB¸Ð-¹ú¤«~`à¡íÎÌ·^âú¬)sƒ"=Tå}>µãÓÁÃÃò/÷µŽžÍuèÜé»<Ë¡ ¬L›IAT÷öø¬®@o _¤2ml¤-ô•N#WÚ–sã S:\ºN ÏòÃŒa{|²Ô/˽բ‘ BÊBïqBèß‹}z Ü«¸=òëÒ¡Ÿ§}±^õn ê|s»#ò–æµDr)wg|7ïÚHu΄”¡9íäÛ|€Tä y‹YB9¨åô.µdZ=8‘ñü´Ó )†æ´ò v“ÚïË48qŸ>àÆ w•øø@¦pA¤Š_ðBàÝ¥ºÛéºm>ÂnÈû°Þç­ü¶“®ñèLm¯óÓ-ŠÚU°ºÑ°-j#?iSGMè*î§1¯’ ‘çÆªÙ+X]ïÊmÎÝÄç¹3¬æ¥ßx¶Ó•³»]ÅZÓ?ïvÚ—¸mN L{γ”ruÞå~^n^«ŠÀÍ‘0͇›¶.õŸçYXúw²yWñ+îå3l,ª<&[ûïšE9y•gYúCú´/çéåæ@cÚ'r^¤‰y["7S´×ç#+9„Vò*U Î{Œ3¸ksú ï^ð`þÎjʹ‰fNåæ"‡gý%ÔÍ<ÉJ>Êø=—æ­ælû1ásÏžç®â)&ñ&]ÜIž|è7‘V®e+7ð$]<Ê ö0ˆ[XÉ“ôðjÎ2âYÅ5œÁRÎ`%çW´äÝF޾±¦hWÑØûÆ.¿tyÙž2í"CÖ ©É×4,k(m/M¥RíÚÃ0ŒÇfãÝëþÝnq>Ì„ùî|º3+y´DHj”¤ŒKlúTW W81ÄK´*bmˆàJ8ÇI`êXöG¢‰»"ý3;‰ƒ³ŠÃÅW,Þ7aßñ_9~ëÑ[{öÄòTq€ŽóîA£sÕ¦ªîÝû&î;ìg‡õ/)âvZœ’fÇAÇ}þAÚ.Nm8sCuGõˆ#Rùýí¢Ak-ü÷…'}÷¤Âdÿ—3ï§óÖœ°fÚ“Ó‚® =Ûwøþ±bA¾µ¶uÌ}cÊV”•””DéhõY«×Ÿ¼þè뎮ØV‘ÀeIg±ôZ¨r ®$¿èêE³¿7»ðÁø¦úß'¹¤µµ5þ@ã›áŸ55–øç¸ì³àñ=S¨f›hÿ'×Õ_?¥_uµ'cݶôÞÓ©¡’qçÚø^/‘ïFvé* ÃŽf»;,c—©LÉ…*"­‘\fàœÜóŸvÃvZ<€/3(òÈrdŒÍº›ªfíóƒzg´‹x<´.tfÎ]D&F® ¼TìØ¼\¤ƒ—S>\jP·CÒæEŽeBÕ‘L›GB½­,å5¶qGdN^Pæ¢P&tM`pä…ŒcÓf…e = ¦—‘”9#T]ìÞRç÷ºŸãIå-O›Y¨,qO`~èp'µçîuÆg-<^~´·îRµÂîó3~Pê¨>Ûn¯3‹ §ñ‚Ù ›­{¿/Ý£eG»3Û.Ê+‰µùY¶FjÒ:y•öØU=ï•-þÊ´›q`Vi¸Eß3ýR ZJR-S‹ZN˯þ»UFïâ>ÛOÃ{Ó>j亼õÝÖæÜ}À±p‡žþðÄÐÍŸ+×ÖiXà[ÅŽ ]A=«o‹nø»óöi¹™§ Ýú #š}aª=ß`5ó8/ô0r2õ|‡^Þ:š'y/DZ›".¢Šç™ÀÞüìRçÿÞÝDóô§hc-{B÷0‹=¼ÁzYžX¿ä\&ó`Ɖ¡0€'x’´q Ûãam¾Ç&Öò(/QK-=œÇsÌáM>˳|Ÿ“¸Œ7ØÅ`R áQªÙÂv–0‘\ÁœCç«®šš>³°r{eñ®ââtq"–ô“÷Ûüdó©îT¦%µ…¼ƒug¬{é?^Úð® ãî—€QÉQZZZVVkžöùzd}J«Dí©Oÿ#é.$QrÉûöé?u%½±B%õdb©p¾§0­vè^yÞÊ1ÏŒ™~÷ô¢Þ¢êöêÒÒÒÑ€ÁUƒc¦~!ŠXHÁïÐÓ:¦uðÛƒ[G´6ÑT½©:•Keº3…›ýàê?£× ñ‘ô–vµ«}xû„‡&¤ü£ÆÍôdvÌØQÚZš*M·Çù¯¿STr j4òÕ‘Aïþ)‚ýƒÕñ‡’ 7¿9ŸÉy`LEEE{&íYöáe#žQÿz}*Ÿ*¬fâ˜ÿmggg,1ÏÛ%:ô}T6]³hâÍÛ¶§w¥cND:Ž}s¹\¢7˜LX÷Ï:}\Ä’=VOœé“e,dèÄâ‡ñ©öÖJ&úï’îir„aXQQqäÜyÿ ØnîŽèÍbÚÓZBODR]öd-O™ÙG/몼»×ƒT1–Í¡?„nf ì »—›¦Ì^ó'Út~½g;o05òXJ{¤‚Œm÷0/PÁ,Ž(¶©Âæ¼ÃøXÊä*énƒY˜кK#3B÷sDÚ®È3¬©´!rTèÏŒæjÞ®rj¯?sb¥â¬Û¸$´/P–wkèûü;£Ø’vi¤’ÇÙUn%#ò2•ÆTØÖî†0:ðBàŽÐõ)×ò|‰SÓZ³ïn2ogú‹ŸŽüŽÐâ•56NöÚÕ¡ ¥¥F}‹Úûè tW92Kw¿»ÂýO»r³Ô¾Ôƒ§[}gi¸|¾5ûÌœZçuz7O…¾š2'ògƧœ”Ry tñó´iUÚz<Éó”ºê5¿Z@}JmJqdEèb«f¶Ê­»u敱¥ÊŠ ÍÚJGF.sØÊܹÏ;b#p´u(osh»G"“#k ï±5r‘é»]ü«ôõïŠv½I–g9Û}5¦,“™âõ¸#õDJYd{XN);9ŠÉ<ÏfNä56p×q³È2FqΤ fβn¯=#d§ÒA–ˆm æ:Ö³€!´þV2 ôS.`%ÓV@|ÝÁi¼ÆÚ™Ã2Œ¢ž,c3Gs$ÇðYjÂÐK-§ÒÆDV1‚jvSùV¶ÓCU{Æ¿ïþûÖã·\;0Ó›)¥-Dâ"&†M’q“XÔç±oõ toºt[iÃÒ†òòò>pV ”Å5P©‹>éªÐ'" ÿ-9 =ãôÿ?æ¾Ç`c½db´Ðࣿo IõÉıž^ÓÉMuoÕÕ®¬Y;oíšÓÖLÚ0©¡¤!æ_ĶB`*Š¢®ê®å]¾ôò¥OÙxä5Gö4ôl>asóøæA+Å«°1ëÄÁ«°…–,c,CÞ=ª»{pwÝÒºBɨ(ŠF,±ä’%ë箯]_›Þ“Næ„âØ|úæ}ö5onß\±£¢<(OlQÅ¥UüóæS6g˳cî“„éòÝå•[*›Ç5\=0Ó•IJÄñŸX½„aXYYYÌöSj¢Öá­¹±¹Ú•µ}ìWâ_ãlãÀ @ÝçE o°B5ý”N:[ñ¹Þ ¼œÓ“ÝF|$ô˾ ¿æÉãýÓU?0p}mjýq¡ßäݘ8!ôìpGn·5rFàø@>¥(0-¥!ÿî‡5Í·ô<™2†ÐV®³ò|W^ͳŒ Üørèñ´cónËÛc¼iuy7ò)åê£Ù*äC¹}^K©‹ÔEÆ0ˆµ|•ã¹9¯“9¬KûrÞOXÏ)—J¦†ö„þ“ÃYA½?z½Ô/^ê´‰ÇèàŽ v§ìšË[œéÈ&ïi&å›ÚSÉM\½WŠ.“îöÞZw˯_J«éϽ̃MœíÊr–ðoSDú v)dzáiŸÏûw±u`./(’þhý¥Ö¯Qq¸•ç²:íyíÔóÀ/8„¹_¦mGn«[QWÜZìÿ«Ñ¼ñßÓÓã`#C‰Óüÿç)ŒýLJ“þ|)Ò$€&‚¶}R]Ÿt»%%é¡P3"( ^¿üõâ®â©› Ñ6´mËœ-“^š4´ghýˆú¸4I0ÒdâLøæon»uzÖºÃ~}XëèÖ=S÷¬yÏš)wNIåþ7‹Þ[Õ»wòÞÆ—û‹ûApÔoÚpä†õG¬ï=¡7®!’Ú±lCY<}\\\¼ê½«ÒåéÁMƒG<9"oãÆ[.—ÛpΆT65úo£÷'æóÖNybJ*—jx½¡~q}álQÿú#þ âé_Z9`›9ñ©‰]ÿØé_8]Ù?2PE&wËÿüßᇉ4saÎ+Üvô§eÆÂƒÿ²Ä­¦ÈQÌd®ŽTÐĆf]C\¶Í³‘é‘Þ?BxòD¿øVNÛaÛÂhÌÂ%ÜN=³¹Uu`i¤¥Ö˜6“òvòÖ³5TÊ… çJ;x‚Ë÷áZùYFÓÀ=’ë îaëÙ 6r*`!b)ÿQøEÚ3sOñÃÅ•K*;;;“8ïâcÌ-îr÷¡,ùÜ’™7Îìîî.”*O˜}$V“¸_({P¢Áÿ‘#.&­HŒÓ £Rÿt•´(ú%EAÛˆ¶ãrü~!»ŠÞ…Ÿ_8p×ÀC7š´ÁbñØ(+f ¬¸dEë¤ÖÑwŒ.ÙR’/É7<ß°ü³Ës·åª›ª«›ªŸûásQ&’ûGvì3`Ô_Ëü‹YžkÞ6õ÷Szù™­™á÷ïhèèÜ%’Ô²½ÙÞª%UA ¼¼¼sJgë¨ÖÅYœíÌ{zXá‹ì8zÇÑ?;:¾–µç¯]}Ñê¶)msn˜sPªEÿâ©Ý_‘=NÏúÙ¬øÃê“* ŸYèmö·}Îáÿ‡ùâwÚ]õ{¤>rEô93+¹—³z|j‡—"ëh¡+ðõÈ Ñ×üíR·Ì´gVྴä¼’qtÞ„ÈTö01z:òY¾µ×Ù¡]\ÌK,®÷=¾‘SJ‹Mëœ87íˆÈ ¡R¶rIÊñ‘ÿˆÜÜå¿ÖøeèË‘½ü–SC_äKìËYx!å[‘r¦§}ºÕ»ØíßSÿ¶BS‘w5ûEhz¨¾Êm)»[}™—é`4Aà]‘ay_ªòí¬_wx;òå¼Q\Ê¥ÓEK•»¸5½!ˆ~±8ÌÎäZŸXåê;·Òso…ž |бÔó÷ÈsœÏ!ÝeY½K†[ä²-Nþšõw[õ!ãþ`x™= Á3Ÿ^¾¿Uб<ø·@UÞêÈܪùOE¾J×rI´º±Çé|<ïm6³}¤ò2|›€oÒÀu´ÙÏFÏîàŽfçE2–3Éfœ’÷ìáÌM vL5/àþÜäQ.®wU1 ™âáÈnÞ}\fëuyU‘»xy¼È‡¨á9ºùÛíw-Yé(rBÖ)|-­6´$²y)ê˜NíónfD–ó6ïãË\O Ç qF³ z}„Ëy‰_ñ_\ÃLV3šCyˆ3ØÈ\Žçç´r>_¤Šn6±<²â€8Ó_iå,*™Ìßx•>ÁFJÙ@Š›èázì·“ØÅc\Æ/(!â*þÔwª·¦'¥2-™l.[È$²i…_þ8]-øÏÓ>=W•Ku¤úO5Å´®>Šp…%iqÇ4‡xCÝ03™ÿÃYŸT8–€†h IDATUèõ^˜‡úsù|¾­­­pµ²²²¤¤¤®®.‘†kkk‹?’ ­¶¶¶žžž×¾óÚÜ«ç]Aoº7N?ý½§«7WÏþõì¨$ÚžÙ³Ÿ G\Ã0\ÿîõMg5MûÑ´%×,úÄÐI·NJõ¦RÙÔ«ß~uÖM³Š:Š¿áðTÏÁ…Ỻºº»»cÓäBBIII¬ÿ[T\ÔÆ(^ðXÃe[Ë*¶WÒO¢(ꎺûW{ÀÚ5ëk‚|Ð^×Þ=¨»¤¹$Š¢\qnõ{Wòà!ååa*ÜzâÖµï];ý—Ó‡/Þ?-4XWWW+pi9hšÕ«ªãR5±þjmm%Eúóeú€ýùñ…¿&:Â(ý———¦ÿøÆNúUqMYøç±NqrW'ÅVâP¸}V¦?‘½ƒ—̳<‰ÈpVho©ÃóƳ,™YÕþÚ×x×_ýu\ª}RF{Ú¡‡BGðÉ”É1‘½¬\”v2D*Ê9´Ã¡Qtp Ë2æäTG:ónáŠ2ãòþXZTn·gý8ô^†ÑÁ¥¬: ¹}N‘3£C?cSêMo÷Í”Q)ŒŒglÖæ¬Þ”3#×òt¯Á=º2æ†ÎçãL¢.clh÷u{;ë,®a'–†wº3š½&*Z½8‰[ãØu{Ó_¿\æÉœ®”ó?‹ì¡—F•j s©àñãób0 Ù'÷Yñ r#‚GNòo×µ¥«æ†£_Í¿ñvÞí|+òãÈQìäˆÈ›œÅp^d2GRÙc|Î$®¡ÛØ;MoñÜš72‰ ~s`þì–òÑŒ‰¡EÔDJ¸“™G[èZÞÏÍÌ¥Rï‰þp‚G~:k÷À¾Nx#ü\‹Kï ²í áïî¼;´7‹fEð4bgð@ÊŽÈ À!?q:kÙÈcÜšI?¤#«:t,·3˜e0´?pO`| ¸Ôs0†ÇØÄd6v˜Ÿ·‘gS¦FFrh`/sïÅ¡ ¥’r,æ1ZØÍ|6sË™Ï`†pŪŒ¬¥›åM ›™Ê "ZI1šfø4¿<àË5‘QäáKzWkö­™¿n~Ù†²tw:ÎR ¡p¢(ù—––î¸wéÇ—VÛ†÷÷ ¥kÊòJÊ©XÂ.n3$݈ Uhù˜´¦ çrâ²/¡E$j¹ååå‰+GÜŸHÞ"¾º˜ŒKÎ1"v‘())‰Si¡=JüçÎÛ0þ¡ñ —}ýiëç}c^:Ÿ.äCwvvÆŠõñ‹T¿]…»Ù=hé I·L òŸmÜ~üöõg¯ïÒµkÖ®ú×ëƒ|Ëåb“õ>I¡CuuuœÝ÷Oqº;Ô.«íS²z '$ˆ> ‚ââ⸳¸wòÞöaí•;*s%¹W¾üJÑ΢²]eM§5Õl®©{µ.F½oœÊ¥¶³­á‰†°7,uúgÂç !à8hAVøxÒ&ŒW;¾ÒþUøÈA™ï¬pqЊÿæ‹ûÀ'HrQQQ</EÜl›sÜIÿœj1 ÉÜ»¬]Ëù)ŸŽ<Ê[t0¥ÆÀ½‘{Óò N“ozÙêúm“õ‡g´–¨H›95¯›‡#e)ã"õzÖ‡îålf4u\Æ“ §„í¡µ„L%“ÒVåånëR΋¼9ØÇrê²æ² EJiµÁyíe³^dQ¨)”OÙ8;²­Ý#œ¹)e–,6s•%[#§´R\ìŠj{½ZŸvndS¥t‘1=ÒÜÂ{ÏŸ¨åy>›ÒÃóíêR»£y/x©ÅÆx{ÞlÎÙòÔâê*ïî²02;RÊÛÜD9c+tdý=Ø}Ž;î'¥,Tê#›T¨èZ(ø/¦«>Á«O I²cñ³#³M'6µ•´•ôf"¶]QQ1zôèŒ9rôèÑÆ K’_¢&•Ïçw³«¤§¤ñíÆ80õôô4Ù4æÑ1‰ÀRGGGgggWWWœ´âj&‚ÚeµÃž6dñL§eÓÃæ«Y_ÓÚØ:îÏã2-™ƒæû8\ÆogÖX0ŒËår‹¿´ø¨ÕÇæ*™HÛèMÝÑÝÑ­¥/ŒÖÙØ¹ù´Í{'ïmÛ¼oò¾ÝÓvO¼cb¦9Ó6º­}t{ùŽò¡ ‡¾æàÕƒG=7*ßs¯ËƒºÇ;‰ä3íÆäÒd·0]%ebŸZª°àŽBå¤ýCÖöXý±å$ƒö9 'â Óaá $EU<œ×_6%<,LWýÒxŽÃWø@ÆŽÌ¿õ$5)¥Ô„~±ÇYD>/M{ÊnŽ÷ȉ”Q’Õ”µ•A,á­@*ðÝ”îeDdqäoäXqDΓ<ÍÓt¤›WÏ*6±+0­RIÞ’”TÆç²¶qZ¯ò¬<[h­LÙúdä)¾ŸrRèjêà>ã1>êlù nõÚ$×Þâ„™þ²1ÿЃ|32ªÄær'vT+·ÃÓ¡‘Óx|´3š<“òyÆ„ª™ÏïCÓ¹%?òa#Ïñ|Û¹šɧ]ÈνîáT^åby‰)A«Ú´/å¼É žg-§‘cOpaÝÞ÷ïºý—Ä_twÅ|8¦ùøä|éÙs;©ð™{ʇ¾è f·éï¹ö…‘›#g’ç¼[#GDÞ`>Û™Í3¤y/™¼÷„~Á3F½t’£4pl`H(äþí§•"j¸ ïVŽjöSöÐÀ=›­äJÄ™¼ÀZ®`#r;9”™üÕ„ìã Ž9p±‡QÅã±Hçð"3¨à)¦Óx€1q ¤1ºbE F2œ<ëø<»Ys€¬x)vFò}ìÑøbã¾áûV|tEysùä{'÷q+þÒ–••544¹åȵÕk{zzbVz!–ÒGw§vEœÄ6žßŠ%S“RádÌA”sÿ )cÉUKJ³¥íµí[ØZ±£bÚõÓÞ¡‰RSS3xðà†††¸yÞÜÜÜÜÜ«&&OÛxÊÆÃ~wØæ"±«dÿ¦KÿÓKèñ(tEÕoVW¿YœÜA¥ÄãpÏMǺ‚eee===ÍÍÍù|~ùùËÃâ0¡;&[ŠBe©ÝSw·LnéšÝ5áÎ Aopzkz7žµ±fc F>1M§5휽sÔüQQ:j›ÛÖ°¨A±D/ø µQÂ?èÉ'zZ‰6ãÿNñ¯ðèè舯.^ŠBÉödÅ’b´ÿå ©$}Æ}Í6×—´ÕÚ§YÛ/]íâ–õFæšû}fqéÞã+\¹WGÆÇs"žJû|tÝ#áé_ (㘴E‘é¡u<ŵLMƒ"𙼳#Çe»Û£™ÜâwY'¹¹… ¥ØÆN¥!rg—öȇƒòzSjksmΧi§‰sC¶ÉsYJ®Ê¶ã¨b"ïc½\æø]ŽzŸ_|Ä[;-ü½Ó_tè%šÁY첌l½ Ztü?¼w|Tåöî¿{ÏL&“dÒ{I=@0A н¢xì½a¯‡sô{oˆ½aAQD¤Jè$Ho“2ÉdJ23{¿÷7ÙÎIÄ{~÷ÞÏÍ_8¦ìÙ3³žw­õXéå"øØÌEFÁzÁå‚'aœÂý&ꂸ̜¬ñ’‰÷ƒ<ÌZ•¯ZÀ ¯ðU»¢§ë”@|N0C1\Áo‚ Œ‚¯ã±xié"Âû ’üTŒæü}üÁU$H÷ñ¢táSˆUyÚÇwÚ‚­<Þ¬´=eaBz»4™¿²V·Aœ`·Æåð vA2˜Xp˜Enöþ"b†³áÜC¹þCøŽ–âK„s …Mì3Í\dÅ»Á©“eæŠ OÁÙ°ÈA)ì…!n„A2·Wð‘àZ¸ªàCÈ‚™ð¹‚! v‚ Í7l†ga ü΀k!.`/4Ã/ ‰p?œ σ.øFÞaXã¡ Úá*XÇà˜œäÃh¦'RòSpÀpltس`*<—Ë 6Âõð8,…=àèåVTË1,‡ñP×Á{ÐÀµ:_ƒj¨ëzÔ‘¨È²È˜c1]Ù]e—–åý׺º½ûׂ]ã¶‹ÍÈÈˆŠŠòz½ }¢Tÿ§¼,à Bšbb¯ |þz‹¾wÞÞ¬ÕYÖ«êU½qÞ’GJBŸ…åõ™5æ„’ñ%iÐrhf\ÀöyÛO{ô4~&¿5Y5©Ò_®¯Dô?µM}ì ÿKR‰lpÛ3Û+&Vœ¹ãÌèèh™ÆäõzÛÛÛEÎ oLè33Ù@ àÎv×T7è›A"ZX5kèw¼çàˆGÄ´Äfý’¥[tUUdìɬÎP4LB%±‹Òн…r"ä#Æ1î@Ÿ3‡˜ÿÆ}ÑXwEDD„¾.¡¿Óàdþ7ðý'“¡'#VTB”!¥5nîóùkª…•–DZRH­Ãüv¯w³A°,Èßì`ÂPíÑy¼ƒ§tö§©ÛyÍ«×=2À³²ž×U ‚³Å´-0ç_âÅ*š¿€·bÇD*liAp6,…$…¿ æA‹À C¤™35ÁA¦Á?× f8Ž*ŒQhPøB£~‚ÂN€¾„Z•7ÍYcbn ûóÊ•K_Á‡ ˆxû¶)˜Íìâ„5ñ†à¸öÀAN²Ö¦A§…K‚<<¤+ÜäIoÕyi_tŸð9XAUh$à ݂10Cpž‡œTõêLýP$È…®ž:À=PS`…£&b5.Ò7|Ÿvïí±>æGCŽŸg f ÊYq/ù¯™çÞ¢½«‰îóePáhP ]ÚÝ'±½”û/áœ}<0N3äÓSy¾œÉçYª? L™Ã<Éœ56È28±0 –ùÆÀ\°Á\¸ \`ƒh87¼/ÀHxbá% Ì ˜ ‹áV¸Y0tXÒ«[úÂ[à€ ! n…A¦•À½½FVÀxL¦9+¤ªÁ€íð&´Á¿˜ •ðO¸ö@ºàà‡A  øn„5л!vÂp5Ü à,øbáe¸|°.ïE≀ÏAƒæ?eÛ+íJ”âã럞ʧtEwm»|›ˆW½sÕá¢Ãß<ñÍ#M$G&ïît:-KUU•ì®\V×á BѹÏùÙÈô=é½¢7Úryî÷ûrc2™ìv»Ñ—È!yûW}·íËú%+¾4èŽì.¿¢\¨"&&&-B½·%XÊùGC§Xº®K$>éÙ“¶?µ}Õ›«Ž'D´DÔÖŸöÏÓ°"ÍÂûÏñB³tC{ £ûéSO¥œèèèè¹Ô¤ÀÊ'V¢YžiÈ€d“ªªÓžœ¶æ¹5Sÿ=Õæ´õÉØ•ÅvÜQá˜æpLpŒyyŒ¥ÝbÜç¡ï=6÷ØÐï‡o8èKò%ïJùéÈÿÆ4Ý ¶ôá³ôE¯oèÖ§O7Ê&µÙlòUmkŒüL##Í 8ÈGä#ôe5`O2_ä½2ø/}ˆ9}ž”!-][†^Ûí–Vý†rëÄ L‡¹Œ¨e'ëÝï@„`.ä0ý1nK¥$Qgõè`FMÓ§˜yö7~hüðˆê9+Ȉ†ª@Â^þŽG.壳a¾ÀËysy÷1j€Ëa†‚ î„9UA6Â0pƒ-~Šá/Ǭ+œlbMÅpæ¨ÔÃ):»àÜnAžÆÏ:6LZ¨l¿L ~$(æôn˜ÀÓ‘¼; ø0O;~ _z9Ec2lfð8‚™T.‚t¸VAY;ˆ ¢ÃãpÂßñÕ|UÂ?ŠÕËkôQwÃ>h‡nP.4“£ñ¬Îé½>­‰ð®Êœ•Às° ‚ õ¿Ùð#| q ·À|C®…Á^BŒ…!ð8ÜwÁhÐa, V˜O C8$@쇸¾€-0 Êa ¤C8TÃz˜IŸ ?Aè GÁÐ…°>‡± AU02`Ä«Üù:»{uÁuP Ãàè Ϙ&áÊrÅýcªcïª=½¶5§µð›ÂØæXS¢iÆ‘ó“ç”ÿÑæðÍi înôFŽ›f³yô£Í³¤Âoye‹0‰Ôí©¡àÊ Ž×ªªvvv*Š-KsŸ–%4O½¿b´g^”æ1{ÍÖ+Ð×U9³‰M쿟7 @UUUKKKCCƒdg8™˜ü•ZSNùç)žtÏ«$•&|U „ðãïS¾û|…Â’7ÙëÌqƒÁ¤â$S°/cÛ•îòåø€è_£Î›îÚS3õÇ©¥SJk¬51µ1B·Û-§£oÀÖ`ÛsËži¯L3v‡rùo´,Ñ­ÑíCÛ#"”€"§v=bÛ*5eIÊá¿òßÉw„B†¯cŸMØÿ[ÁùÕüh,8 ¸ú‹*ô1FÍ„¤€«/iQ(V ¡ÁT ]bI¢ lòŒ·ß‰¸‘ýáÊ ~®/U¾¿ŽÑð l`öëŒÂÜ»ñ©0¢a›¼lšÎ²úàòTŒ‚Ã^n[ȾÁêG7Ì)k ¦œûÕ v¢¡Nç(œ׳w—Л,\“À7GÜt™xGá•D;cIîÄ oÁ3€Â0…‰ð¹Î~Á'# †æc?K<7PLù”Ó"P›¸øq+e*»}Ü$¹†ÃƳ]ü¬QFÎ Þ8NÀdºý4­n‰B—Âë:Õ&f@™À©3ÃD¼†ûáþ1E¡~‚™Ð+àBÁæ~°Á1ŸÁd˜©ÐË(¨Íþ "Q§ˆAïkCüÜ ¤"‹,qqFp+¤ýú¨Å%¨<¢¨g+÷ܪÿTËO“Ø8¸äWð ¾UÊ’ûÅÅ«¹­;‚ð\ÁwpªB“ÂH<˜Ï%»ùôBHƒX¨lÈ,æ…Ã|¸VåzÁQÁ™ð;ì¥Ç€øAØ.Ø PÕk9±D'¼p!tÀ%Gá8œíPfÛà6X |ÓÀ§0I°2 Æ+,tÃo vÃ1è„oÁ 0 Ü`ÖY G ²÷ ³J¡Â(_ÂDGà8¾‡ÅàS  4 À€^C©r(†!°vÀDX ãÁ¯3¦ÃqðÁp¸¾„dÈ8áߢWͨšöÈ´ž-t¸VyVeJUJÞyº®Ë4Þ°°°èèè§=OטkžIxæmåíØØX›Í¦iš#ÃÑ9¢3çý³çOkîºÜC; W¡_rZw o§þi对øO=Þoý´úŒM‘õ‘G/9ª›õØý±ÙŸejòEYkdñÒ4mÇ´qþ¸Â…>ŸO^Œ4ý“$½ÐP!Dd}äÄ'ªªªñG~‡1AêCb´Ùlò0~èôC>«OQÕ¤VL­p t ýzhè•»3Ü Sä/iº² ŠÈØ›‘·&/É–TÛP»/sß°ƒÃúTÆ‘ïÜùôÎÆ‘ {þôÞ&îI&‘¾!ÝⵘÃÍ¡CDUDÆs½oÓŸ˜zH0eüO¿BýÎnÆè;ûÛb9†ˆÍÀyÆþ/ z<¹tü?ÃB“ÉÞ£þþŸXÅW¨kÉŸ*”ûÃU€Ûpdjû¿ƒÇL<¢ÍZÃëÕ\y•Ù?&È X SaBo8úS¼0Çy’[•‚ÛM£çö_Ùo¼czŠW™•;nÁÓ`l2šƒ1° üp›™² ÿ€Fð›¹Xåô.¾€Ø6Tæ \°'Ày&nÖ8c`•F·ÂR•j•Wut—YéÜê@œÍ[#¿™ÇØkn„WWÀzxÓOQ+E# Aƒn>ïO–pÏPºG(ŒPyW'\P¿ ̰M0ÙLv‡!—j”A1\ _À í)̪¥A,¤Ã%  …!\ñ-;ö,ML<§¨´Ûa¼w+œÆ=¿á¾’ù›`ù~!ÁYêÔöZÛEÀp€§’¹ÞÅ'a´»^Ïcñ‡ÜQßÛofn—aœ lxÎâÓ8+àjø‰žlå 0Ya€Ê3:ûàK¸ ΆÍÐ ßBTB;ÈÖs0€Wàª^¿óCMP #àT¨„OÀÃ`4¬?Øáx:AƒKtTB*DCç°Áo³ÁïÃ%P‰[` œ8óa‚Lh‡Íð8‡mà‡Ÿ ~„Ep l‚KeŽbo¾¢´l†øFA7üVh€ÁÐ øµ×M£éIM_çB3ÔÁðB"Œë;ê=÷t6NjLÝ’ZvMÙÈE#Ú±÷¶½z²^øc¡¡q‘aóR§ÆÍ Ìu¶;¥’Él6»†¸Ú†¶åšr%üÈŠ“ñsFXC؉„ŸV«UŽþŒƒó‰¶÷²ú÷7Pè)a‘ÁŠ‹*²ÖdÅTÄž{8º2ÚÖb‹Þ-‰ i¢OÇvè’C6·mÃ%tUÏ+γZ­Ÿ$ÙO6+ÆŸ3æWÆ¥J¸2,C¹ò&“)::ZÓ´âS‹­mV›ÓÕ_Ÿr0¥£g‰Ø»Œé®šU•».7º:¨™XØ«ìiiR¢ ƒ»»» w`‰Ñ]Ñ;2F6ĕĿ¿}nKÒ®$ÕõOåØV«5tnùÿª7’Þ†ÒDÊçó¿Ü(놱ˆAö3˜}¨¡¡xöß›VHûcãÏD!ÙšÛl6c/%·˜ÆjM¾¬JЗCEÙ®ý…úº«¡ ÌÙÉ‹‰´¦Âûp<ºåü°B·ÿÎâ“áø“àTÈ….Ðaê0ÚÌÎ\: ¡ÔÏ!?#ÄÆ­<ìF)c{ b<Œò—–~€£wvó¡Âõ:–î¢*@…TA¶FC÷‰ƒaºœ(ÆuQ [ç,ƒ¹°ÆÃô(††³¼›z gêÃvn©TV^IÍ3Œ¯0 ¼>å­çýÝ 4Æé\£Q”ÂànÚt.L| )ðM—‘`Á¥ŠÅãøtqÄ7Á(Qçå#Èü,-vÿ$ÛÄCÆéÌ7s»¢nWÌÍ⋽âåÝy´5k0݈é6EiÖ‡èÃägͳLÝÍüxvÜÄÁÓÐ2UOµ:þL‘$84ÊOjïà†i#W$1o;E;ùøú§*ØÍÅ—êk®'ÞŦÄO~vਨ»Â²ìýó,ÎGÜ ¿ ¾ŒäÊ4\í´(L†a>d@,½çÀV¸(ÁГ­lˆcŒ—Ïà(̆80ŽŸÌ9µ¼ƒáNøJ!YZÀ¯ð<ë`øà8ƒáÙ7ƒZ`>,…sÀ «adÁ.Óa“Lé…P §¨´¨ä ^…2ÐèI{ @=ܬҦ’,˜ #á-8Õp Ã0 áh„*h‚S¡CŒƒ•ð=xÀ í>ÐÉ‚ƒ¿Ã¸R¡ Ê¡f÷æ#Ï‚½ Yp ÷ªî€Q‘}OÄž_*©Ÿ^Ÿ¶1-åpŠüd†‡‡Û]öó£t$I×tMÓ|>Ÿäj755 ù!ü‡ˆ-555n·[×õ°Ú°®Ø®Šs*26f˜ƒfEZzºñЀúðÈ,%i9a,9dûÓYS"ëE(žìÚ3j/ ”Î-ñÅˆÈÆHYûä¦!”ã`í#‘GÏ=:ã“Í©ÍíööØúØ._—¬›²JvuuE¼ÏU “hҲ럻*ΪH(O°vZuE×u]JTT”Íf³GÛ÷NßÞ>dÏÈòH[» ˆl‰Ü{õÞôßÓ ‘æÓº"º<9ž˜ò]Ñ‹ï-nÎkw…g4fH’¤µÎÚ0¦¡äº’´Íiª÷ë[³nN8šàÌqv…wEÕG ½ïøÔ¸ÏFÔ‹”ßÊ[%ãÞå]ê3e5ÌÈû“èú<Ø'™L¾X’!áPnz¤CUŸ¾¤Ïï4µ¿’!t3'¯¿±‘`¤lº®Ku±¹ åÂÈ]2ìåˆ[þ¸ÍfëÃt¿MuV IDAT5›ÍÒ/Ñb±Øíö1'M:±î*ÊCæË¬N‡›MlNf~k—Óÿ] o¶°x9Å#qšÖÁkØJµ—Û²¢žý{a;$é´VS÷°å¹·Ä@WÓr1꣜ìâe•Îå)Óy öCS'ñp܇uB˜Ä(œ!ØËœÙEn3Mt™ø^ç|ù~¾îÆ &è\KÒ0ŠÒ¶ñ8ì ;*lö¬Ý Ñ¥pº™l§‡Ç4Ã' Æ`-0_ÙËÅXLÌÚqv|Ä×s:i†Up5A*´B>¼w†kìü\/Ø%®N¯ÿÂýŸòcšç,¾«RnªPnúUÌZ¡—I[Æ¿¾#U5_ô¥~µ`êkø’hY+"-bºÃÔZDi0Œ|XhHêL ~y£¶ónjcãiÜü._ ãËïØæ2uÔ jµ†ÏÙy~GX.þÙº#ErkEûi<ù“ºYòŒ€ŽÙl*)> >„ãð\Á‡Ð 3`¡B¼ Áç¼h`KágøÒáLªeÔA2Œq`†V { Iá ¸,PÏA.¬ƒ/ ^‡]&®Qh,…8Â?àbˆ4c×Y Ãák°˜9[§fB9|+ȃ8—C ´C¤@-ììì‚ݰ¦wÊw=ì‡0ˆ…g ¦ÂPØ¡0À—ðX`?|Ñà†u–ÂVðB-Ì„ZXË RÀû TX™p*$ã°΄#p¾WmÛ–u/k:¹)wYnXw˜1àŠjÊ_‘ï÷6hŠ®ŽVŠT†±Î¯†|uåú+ëêêœN§Ëåòz½îwÆŽŒœsv>±³ulkDc„¢)ÅÏ›ƒæ¿øSùp¸2P¡ÏQÚÈR¥ÏþØúòÖIL’TŸQ¹.S þ‘¿.)>ŸÏpã–…Õâµ$ïJÞyÑNK«¥äÒ’äÃÉ¢VÈI 4•åÜˈz³ÙìOö;ã;çíôÄzF?:zàOÎ=XvIYåé•] ]%ZVÃÔòSÊ-KZyÚÚ«×ÚkíºI·x-îTwc~cúÆ?òv…&ìöŽŒŽ=·ï©˜QqÆCgäþ’ëæìHï¯׺5SÀ¿;Þ9ÀYyVeLe f¬Ý½ËAµ3­sÏM{rKsí>»a ØÇ¸«½Œ]Žt(–Ñ'²LŸh)Ø-ÔÇkØßÉ/É5ˆˆ°Ûí ].—l¡ ±T¨jÊèÅC»«>V)}pζP¸2Ô~†c:½*²u“g9õ5î>Ý•±»2Þ-†.ؘsʧløðÊ~®`|щáª2AÙ¢`†nnbÁà 5ê7«ÿ¾4Çš/†Jâù|8Gýe¼à|•³¡^a8a€@5í*ãÒÃQ3Süâ8_ çÇcfnÐ{†þmœúoNq®Ù˳­Ôu±ªuVŠbÖ ç`=ú4‰U*c¬V‡qª_θ¨Q¸@!ê| ÜÔAí ÷ª8ưBtšÖþ¦ ö[eá°ÿÔ_)úŒsê4ÆÓíc¦ŠUlðsi›Zº™îI S Ì¢ •‚­lEwਅø v¢¸2\½ªKìÙÄ—à8gQ•È ¦…Õ…·èM<þ4'×ðÆ$ž¿B¿é ÅcWÚ/㪽ÄåsNü1ñšŠãQ»ð>ð²Z£Š…÷°p¬RR¥0`»’¸ÅU?Z´,ÖJÝ:ÞNÞr®h'æ{WVéRIVÐõeíŒOZ4­Gp=¦’,(³›ÁTh€n#º  NuЪrŸ‰) ‚N?A%,ìàÛÞ¼Œ Ìííœ>ìp|EpÄÄÍ‚ãA2¼û`x`1´ – áb¸ÐEðºÎ×ÐàrHÔùÜ0b¥ …Ê…ïÂDh9pl‡“zsî§B a0¤Á© Ø üÛ Påö^›%¤C)4Ãý° {H¬p „ƒÐ r:‘÷Ã(„S!U0vÃDØ 3`¢W555nÌù%'¦)&Ô(OÖ²ˆã-)-­¹­1Çb„&œœ«®Xu4îè9žÓÖÖÖÒÒÒÖÖ&§=RT«ªêÀõíµöŠ‹*º’º,>Ëè7FK“ºžÕw¤¿aJCGv‡¥ÓbñYäñVbXÃԆΡÂ""Ú#ŒZ`ÔDcØGÑÙRØ‚BRIR¸ú£Âƈš“kô€n봅•Âä7Ùëìîá„€-àLv¶gµ·gµ;:;²:¢+£ ¸’‹œÎÔΊcG¿8:usª,Ó)[RFn™û[®nÓ«O¯ÄZ3[Íó€Æû&ì¿tüî³w»Ò]žÏ®ëvüÒÉæn³ÒW[›½:;kUVdd¤ÉdJªHjÞОÜ},Z–õ´]ii[Ó_yØ›îõ%úlm¶°`˜ªª U Ön«7Ñë±{¬•Ö¿€+£ô‡† J¥‘l­¼^ï WýÊûtÃÒ ]z$eÔãñðŸ‘]ý'{ò‚å[È8”„îCmÀþ#è$¤i3\'ä·Éªa».¡+ÔÐK×u©[Í_(Ñø£ò˜"Ĩ¨¨¤¤¤ÄÄĸ¸8Ã,JUÕððð¿„+_½ÂZ8 VƒÛÄY‚5*^øÑæ}¥ûx—Ö‰Ž÷™cBDóy+f(L0‘ M‚˜ …&²m‘t™h ü>nðÆ3šã¼|ãtRà ¨ä¬ã,¨¦9–ø5Ý)ÉþC§b"B ÞÆ‚73·„…8ö@¦Ê‡Ÿ?.¥×;¤CòÁ“‡ØÂîepÃ3`º²v|¦´ŽQÕû~ð'æï.º•âsaÄy™)á¬2s_ð÷1ŒÚÎ’ûÅø%"ÊITšåR§t‰+ßeû@šO‚A04n>Œ=Kyt¬Øßµ°¦ÀJøYPª­¸ Õ¥A±4‰Æ¬§yòiû¯béE¦IÍ)ÙwÐêxéR#pB¬5qÀ§2ÐÄPgqv(ͳáŸbÁnMI7Kç0}0¹zØl!f Ì\À’¨á±ÕTÿ²Z•É‚õ à<(¦Z™§qDçsP nS©Öx^'m2 ¾‡LȆI° &ÀdÈ‚— ,`ƒ3!ÐÛ L„©°¤×ëoTÃ"Ø 1P^¸T¨dX çÂrà†Ã½ ¡ðÓão;Âá[p@ƒÀ!p@ìƒ|˜[`?Ì„‘0´^µY6ÔA)¤öÍ@;„Ã(AÄB74€€Cp Ôp;ÔB5„A*´ƒ¤ðJ¦ý ßÒ“'P :˜ ê šBDª««×–¯µvZ­.k(\É#g ˆ:åNw7i ó„UŒ¯ˆ®Œ.\^¨úTÉÿ6T8YQ«Ëš¶-M ×Ò·¦Gø{’Dä™zÿmûŠl¶Öá­‘å‘–`Oe©U[zC©©ÛäÎtgÌ4BðŒ²|äÖ‘±í± Â;ÃmƒÛ²×f«>µ¿ŽUÖGcÀ_ïÌrÆUÆý±Éë&m[Z˜/¬3«Ó‘çp:šF7)feÈ®!;JÎ)ÉZ™õ×p%wrFÃ!{ÙptuuÉ ©?]Ûhgx‡bm¸’¯Ž±”+Ï>mÐ_ ½û;Sô‡·þpÕ'äWÞ£}—Z²µ2Ü¡dß,ÁÏ01 õ¯’³qc*˜žžžœœ#iôiÐb±Œ;ñÄ®Ã;Ä+ Y¨³,Òt| h\è!œò¯Õ/¦qWš¾s#_l†ƒ¯®cÑÙ å°ŠßX¹ÁÆñ6¾‚ók;¾å‡{à+Ø ÈÎçwÙZÄÝOð·¯ð6ñã;‚ ˆìQœ/ªG×j“7™û‚†¦q Á`‡ ÌÌ7:ƒ`½ %Øsðßx›mÓ(øA¬,·çòÎfwúJöÔðÒ½lúŽA+ŸdáM,/D’’€¯žçÌ<œäã^<€•‚JÒ3æ$î(5?gi¬?3³îžoø¡•…:B2Lê¥M×Ã08¹‚¯z717sõ#ʨoTiÜw‹·K= “|-\@ŽŽ L° .M!¹ ³†Kp2 •´…"¼Ž]ÃvȇÝ=ä¯E“üoÜaè†gY9ºÉj…j=ÞH:\ u0¢=,„ͽvû­ð‹F²Ô&Cü¤ðPì„u°¼ð¬—½‚Á $B!<O€æC ¬†<Øãa DÃ\ÇázH‡X˜û b ¢ .ƒ4øÜpA\ïÃlh†/Á WÁ xª@ƒ³à1PÀa ¨(å;¡°7d:,$X×A Ø`X`<¼:¼Ã!a5œ½!ÂCáAøfÁ"ȃðœ‹`+œ Â<8³Ï‡©eDKÓœ¦ˆæˆñÏŒ7t²¡íÌß3ëŠê*fUä®Èµ7ØuU÷„yþ·,çä’dÀÙƒ‚G/:Ú8¬1{yvlU¬c¬#uGª)ð/-æx Ð1¨#¾4^ÒóúØaü7l4 à“‚÷íŒ=k¯·WŸZÝ2¼eê3SÃë•çTvÅuMziRŸ‚Þ•Ø%|bÀúŠX,–„# Þ$ïñKç~— ì»w0dù¨º¨ 4”7†[’1‹ôû “ÉT;µ6à Xª->|Š¢ÄÕÄÙ+ì ¼a¨ü©QPŸ¯¶Ám9ësú<w<.©:©uH«ˆ@ë Ö²3ËPþ9_ßÈ6;~ä#pë/ÄÚò·ÉÖª¿D)tWjæÊhèc8Ë ’ÉŒ|€ÿ_rƒ•’’’œœ,‰?mmm.—«¾¾>H-à‰™Ç3¸ùnn)æ_;™ý©¨<cÑBƒ—+@Ñ⩃t~P ÇtN¼o«aS¥VëŽÑ¹®›ã­øžUàR¿&ºꙿ‹ÓƒTz¸y>þ­¼üo^¹•Ê" ëÍ<¡ñ!­ñúW[ 4/ ÀÍ Õ0Àpµ…”Ög2ÊÁ%>Üü$XMw¦û0ŸMð‰¼~¦ø¸“ëHôsîKøß域òF­—°¦ˆ[¾Àý;cº:ÞlbP·b?F \𰜯Xø(Ðð )ìHÖ>zH{n\Ó‚xo²úY¹î/ê‰JŠ(Q?Š×ï>Š#VÃF8.…0•D-rî€`¥F9ÜÃu†w¶VÑú9l€¯à3¨‡Óa*LqÄnÔn<ÛLÌÓ” bêñ‰C ÊáÃc8¶óshðû á ‰ßDëS:“À ׫°fÂRËÀ Ëá(TÀj°C< M°MpmÃUîR°i|^˜ m0ÓÂ}A®6sg]0^WH6G˜•;³[Ð!@2̇åaáÂÀËàH† Ð Ûà9¸¥—|XO@=¼ çÁÝ𬃠Çí¾ ~„àmˆ›Áð¢à¡„uP ÂØÛÁ KÀ ƒ£p&KeQoH£(„LØ ·ð!†ëà9ð9tÂz˜óà#脸>&Lõ'Õ›¾7=W¤…iëß\?`Ï€qËÇ™•¾Ÿ¸ôâôäCÉ6MÉú%O A[ÐÔm •¶ô”!«¦›õޤŽÍwoF.Yðv/Ö×”ÝTðvA˜+Ìäÿ£Ö¤Õ¦ñðšÐpÿGìï‰9Æ?ƾ0v÷û'=1ÉèKƼ7¦mhÛþk÷ø~ĸwÇ9-Κ kF9:¹:9(¾¿xòç“Í~sÀÐu]˜„'ÅcröýC‰¥‰Ú-01Pu^UçÀÎÖÂÖÉ÷N¶¹lšª)Š¢¨Šc”£mDÛ%CÔ`_Ÿ:]Ñ" |¢_C|y< £÷‰ïRÂl˜}fùýšEÛ}ûnGž£ X ë Ñ÷È3Dü‘xYñËÓW§‚5øGáöûý'òùSƒ×Pë¼?me¤Ù‡Ñ¨išù§2mÃ0ɰ—ì/ê¯6X¡b¯þZýÕåçú° CŠÞ×ÀÚþy»ä^Ö¸0ÉÍ1Sƒ*rÒkXÊ0úQû Ý ¸þź‹Y`ç…Ê‘ƒ&G„“_¤˜¹EçâŽ~ÌÂxÁÇP Å ¯cYÜz§˜ì@ý˜† Šž¥Pù:ËͳÎÓß¾—+ý|p5Vó•W âÔ8ó[sô¦K†À»:õ0ÍÂeø=•mvÖùE!bTh±p•ÆBtë¦ÕÝSÞsd ôÿèì¼ ç°³‰[?S‹©³@Ý©¸ù*ÈûÍ&W©ù±x}}ïyk.®ÏYçàž0Þ««‹4G·kõ §[ X`ă:¯ÀPˆw?Œæáwõ™w²© Y›ÚE²à éå‡CP >ØWÂÏàQ°Š_žaá(¾³¨×¨ä F³5Œ÷@܃`4€k`Eo9Öa$Â8 ~…N.góÔ(loÐ9 @ƒhˆƒ10* 1š‹ý¼ r³ JåbÁZÑ0–Á£0¢`¤Á!Øe!×ʰ {àm_CŠÊe‚y À ÛS`XaŒì-ñÇL=`Œ…k`-ܱ°¶CÄC3dC ì”ÃñÞöÚ›à8 †v£{±¿l°rz3 ó`6l‚ÁP áð)Œ?@-@.xa*ì€D¨rð¹&¥T*WÁQø¶7Ÿº B& ‡oM FBžW-;Z~uÐPÌÄ·ÄWŒ«ë ‹jŽ’?¡{ìPº”ªª­ƒ[§5ÿfxŬ w†ÛÚitG*ŠâŽqWŸ^¾'=I~Æ– £TN¬ŒªŽ¶xØŸæ;ü)Ë9´Z¹ÓÜ»®ßåêZƒ1GbäOY,–ŒƒuëâÄÓÆhÔ¦º)uáÎð„ò„ðîð¨Æ(Àæ¶%V'6g4»“ÝÑõÑ … ÑUÑöj{¸’sª˜ò[³M.0d±kœÐØ6²-ïÓ<{½{@wL0&̪òÇúùδ-i¡"b£èC4hÓR7­®ðÍ–Á-­ƒ[}i>ݪøv„½É.©2³ÏAAÂL½wí-ŸS>èëA¡·®\m„¡vê“LÖ‡¼ t²ÿKJùDŒ÷CŸŽMn4%ÓÁ MÈGä=4VG†‹£9¡Ð ‡}ž¾üNy1ò&•ÁÑJ°ùk¸ ÕùÉÿe0Ô|y=ñññRe,„ðx<§¥¥%X,–P¸ê¿l鳬å‰N ‚…™]¬éPØw ^Ö8 |¡=¾‰ý½Y·Ï ò!-ÂÅpÕk¤^·?E|<ƒ‘¤7qÝ7QKföÙºñÕz´¢sÌ\çïñýjq:ïÀ5A‡×4l*‚*A•aܧ¢Ýó¶éé{LcµS˨HÔ*>‡;  !vÃO=óo1 ¡ÃŽ^Ã…,63cï,vYVpÝ?é^`lq°&@w/a,,P À(©0Q[z‚íp1|Ye°\ã*$Äqu•ú°µŒ*â»X&"4«4ë4 2„¿ó`-ÙçBTÃA(ƒkTî‡N+DÁXðBL¯6y¬‡*xÎD¦Ð‰P¥â¼!xÔ^:Ü›rÁ‰ð;L†/¡@eºJA' 2al„k`!Œ…08§7{^~¨æAÔCd Ó÷Ðv• ¿k _XØãan¯+ÄdˆèÍu<R`¬ fA6ì„zšà'˜ Å Àåð$öZŠŒ7,‚Mí2ØaZ¯Uî¦Ï‹`"Ęx^£ Z`;Ø!ò`/Œ€½½?’ å°€2xÉÄxÃc' Òu½6«¶~X}ÖÞ,cX$WÆÁÜh†ZsZÛ Úò6敞^:öƒ±3*öÞ¼wâûmN[ÙYe™%™Þ4ïî)»U§š¿8¨žQ­Ej#–Œ@ý²+ϰ2ѱ¿åRèjš¦éÚ5CºÂ»ÊÎ+´d„«C³þq´ߟŒ {k©Òû/]×cÄŒ=0ö÷¿ÿîäì¶wO]:5ÈÿF$kè—û”þn¿¹Û,ïžÜÖu³‡ûî÷ËçR>«<ó×L³¯_5hš†@Ñ’ÝÛ_o,@ŒÁ¿v-’/“.ôP]¨WE¨Š¹¿ËpgÞÐÅ•ñ$ºH >‘/­‘ÝüiÂô×EÃÜÄàÏ+TÜ-¹¡äšÈwZ(Q^€ìÌ$ß=8Né$)©’Ÿª|?Á0ÐW‹á\^]Ïê1|ëŽ;4†hTÁ ½Ó˜áC‰jÅN6åÙMâ¶õ¼8‡«rºùû—æçŸÑ¯øo*¯ýÎ çòÏU|¬p ƒ«·‰G62µƒ×.ûÓ5r‰Ç! L„éü ƒ Lð¼Òk@ªð¦‰‹/Â@e_Uªç.÷IGymo•Q:›Ï‚ÝÒ¡gœ Aˆ„é´­f&xîãžU,¸égÁ(Pp"§€Cù,)Á¿J` äÃP˜ ßÂtïÁ •[òÛÀ‹ën Ûyf¿ Ÿ¿Af,_?~xrà‡D†qe]÷ª³ôöÜã!B Å½ÄÓÅèåÄåräJH‡*ÑP+ŠGóá hß³úV6”ñ¸`ÅÙð3Œ…í½K—7aL†xp˜z,Vá=Ô ×jõç±Êæ¢3’ –ÃJA-l†Íà€CÝ\›ÀqÁëÐAO ´ ?‰mÖ(€SàKª Gà0¸àfˆ‡bÁ8 ‡ :`%\ŸA„CqW»{ «ôÞì«"XÛkµ7†ÀAØ {Àç@1¬„Û`*´ÃJp›y[ÇGÀA ¶A.tÃ2ðBCï°(‚`‡;!Á&¸Úá4A5tA'̀肙p* Hæ1 &Á¨_¯ÔLº„¼Ã`;ÃYÐ ç†2·nÝÚ3JØy¼èxþ/ùÉõɦÀ%I~ìC7.ÎXç¦y›¢G7å6%5%m¿n{aŠY±×Ûw_³Û﨎ðÄxb‹c­kÉí%•§VÚì9ksÌúØÈ¹ 5jë“4Øsa‰¥‰§Vd­Ëò†{ã ¥ %×””O*üã`ãÈ/«ª¬òQ•Qn;YéèN*M2ª³®ëeÇÎ?–ÿR¾©Õ$ÿ}ä>¡N Ò`B¢BT]TÉ=%¾$_ÐÜwݾ¤íIÖf«¤GK¶?Öß–×–¶%M2¤å³899 * IDAT6ë˜Écª˜]‘¶5í?ž”+Ì=Ð]q~EÚ¦´„ƒ i[ÒZ‡·šusDk„Wým>$Y<,,,**J&,K0 ?žº!5¼9<4c³Ï,Θ²@(ÕHrÐ×glhˆ|å?¤Ù‡q|9‘Ë‘Ñ6IØ6ä}| ÁÖŸvW iFpŸ½Wè«fðKûƒŒal¨,ÚàIwÃÀ6£•”7Y¶¼2Sþ¹ÈÈȬÁ#þ¢»2A%ÏþƒË»ù÷;JËYA’ÀÕ{¸>ˆýbUó-¼š†J¶koSþ¾B\?îå³§ƒoÏ#Êͨ㼿j¾íÉ„¦ÉM˜Ùýa×)Z´p}à*81¦pð['_g'4…qo•:WÂó§ÃH¸UAŒ‡‹ÐNj^ü©éÊ«µê§xònØ-2W³ÊÍÚÓY_¢ŠË? u DC t™üë6^}Ïr™'È“f®Õ¹_ãa×'µ'6>´.RºÇ ŠÂQŰ^„/ „ uÞ‡_à ’¢ß= Ü™ù"º•«JaÔÀ 0®vÐ.®:Æšï)zV¨ös­ØÖHI2-Ý|ô³&ˆÅ@õ~ÎiÛõ6™;ññt™‰ÔJˆ'_"n'Îf8ÅÂ}fˆ¨ÄÞ IÙÌ'`jÿ6ñÉü`‚yPoˆÎ'ÄÆ:xUa¡à·&0µ“únäÁ+0RASéTpiøá\ˆ†*ë…Æ‰f.ÓxZpL‚íðu0®ƒ9p£Â£‚bH€ÛÀ÷@ÄÀEMä‚ Òá:§Ànø^€jØ'ÃíÐ Ç þ N˜Ãÿ"í¼£¨ÓÿÿšÙ¾ÙdÓ{ ¡·„šPD "*öŠgùª§g½³ÜY¸óγœ]O<Å ŠéR¥CB ô¶)›lßùýñÉkÂqÞýæ¯ÌÎÌ~Ø}žÏó<ï‡è!.Èm0 ––Ã3°~7ô‡‹À › ò!¾‚6(†¥ Â%P oÀ$x^‡“`„«@…Ê4P`6dÁûÐA°‚ÝÐfÀ½° @U9'#ÝC€úÉõU ª†®ª˜•uO­ËÙ–“x<~Õ¯!Çìv»?É/j÷íŠëŠ9ã×ù'ö;ÙÏâ´l¹k‹ßê¯Uki± úlPW¿®_ ”²¬—Ž'èt:SÐ$e•Þ|Ͼc‰s(¹Y›­¹Ës÷<º' ¤íH+UÚfoó☪qUE7øjDÿíý…†¬³ò^Ϋ›Y—»"·ó4º*zÊ=Sôn}ˆP/—£^ý:¦™*M}rjñ-Å–VKî¹É5ɲQŽäÅtÆŽªVùaˆvª™^sâªcŸëœçÜÿäþüçó#sðÈwG AƒÛ DÄt^;Ñ­žR%å ×Õçõá©KO5ŽiDeö‹³­«Ùl¶Z­Á`P`l§mg&üÊ‚Fà³5¨žØ1f±È+g¥Lý»ÂHk-j¼`mV¤•}ÑÑÑÚ6å¿zfñá|añ„½ ë³NËúVigõ¼h‘_`2ãâ@SSSd¹¦u,ÿ““GGæ NòDãõ¤(¬†hXȬõ ÙÆUÜS£Ì;¡Î«`^ˆyA6ÞÉì¯õ×ÿ] L%.}™Ç˜¯ðy8"/ݯœö»k¥@Þ&½ïf…qà/<)1[¦@åü 1$Eñ/mðl€((€¿(Œ”'±ò ʆè#wxÝå,\͇0뤑<²‘¶Aú¥+Õ;¿“¶y`œ€ûñÃZ³º9bc›RØ¥ÕÍnBfBŠž~2úo©èáj8Ht9ÃkhJ†ðmÿýø Ü`äiW¨Ì¿n&÷ÆsKn«Ä‰4ø‹ÄJ£¾Ç?Ž nÖL‚¦dF*ùGÉn¼—ÂLüfJòhýtãö ÀmxO¨‡þNÀƤ«:Øë¿ÂH$þ\Í㛘þ#º¸ØAc4×F±} ÜáW9 '  ì ‰aŒžQ `6D¹Ùâ hSw@§Œ_a«Šºá'X™*I*+às0Wá]¨ƒ˜«ÀwÂHø¶C!Äé¹Q¡ ~’ØuP çÃ#°KåmXcu Uø¦À( Ëe@!,dÁ"ðÀj qwÁ0(„l8V¸ Z!: Óà ˜^8)°¶A dÂ4h‡4X^Àh Ð 6ˆË!«à{h ‹„0Áo¡1Ü]]P¦B»a&\¢UWee{÷îµ×Ø[F´èú±ŸŒÕöòŠ¢¸“ÝŽÁo¦÷Ø¢cÕã««òªjÆÔÔ¯sf8ãNÅÙZm™û2cTkTôého¬×k÷ÿr¸+Û5ê‹QÉ ×ëUEÕùuú ^–SÕl™àMØghÊ BðMƒV«}) ¥ÿœ^?±^ÈAc0ödìÑ{vÇtçlÎQÌŠÁi0:Z{S’$K»%ùP²ž_Eð¾…½ ð€3Ç©óé4®±Ùl6›Íb˜Ñã~ëÔÙjm>»/{c6 6¬‡×Œìò«!5¦&ð[ý­#ZÓ7¥'JLÛ–æÊr%Nú…Z’ª3 r%ZN)K©ŸTScô°©ÓŽ?íhÉi©_7hß ‚/ šÇ4Ký¥±Î±‰‰‰¢#*j;A°Ûí¢yÕ7ˆ‹ FӘОY:šIG¤Îˆà*õrÝ<+úã¬Ü†Èöšö Ú#  à ‘®þ#пW½¨){iøM~Iã,÷"м+ÑŽÖÌív»\®@  aî…É–V„‰];ßh4Ž=áÕU#é¥xúÓö˜Žü O\ü)¹FYÏGƒØäO %H¼#‘¨°•oÿÎù`Õ³T¹öÞÐ…Elú;.àD2,ȇî(š;{|umà]ˆ]à„á2ȱíIg1‡ ° ®…t<âg ŸÊXðú‘ýÄ[ß™xçxàè3\™Ç;Û9ÿwGÐý…tä ‰‹T€JØÞ,W—Q«ãâv¾ƒP«áS¡td9áaðÀ°Hwd‰2v[ÊÙÓ ?dƒ bB|Åï¼¼­<Ø^‡D T¢ÁÜNVB&W~Äc7ÂÐî¢_plÂ$øZ81šÎÓÐȨ¼©"qó+,¿Ìp†·¥Ën—ŽÆ©¬jØCÜJ÷çÕ4Þ÷bÃõÀƒ“¨ª–˜+æC0n‚Áffa£‹1 EУa;¤B! €48!1Ba"T ¬1‘#1Ü‹,ð¨bÈ€eö+„@<ÓÁÃÁä ¬‡\™œoBÔÃKp ì€Bh ±1Ä0PÁØ .‡h…V3aƒÌp•r•á|³ .l_ì‚i à ú……Þõô™sÀ 0 àNd€ÙadJ:1\PC`6l Ê r!5¬cÒƒáYÈ„v¨`´@)ô7dF~‘ÌæhG´^¯ïÔ_† c U^RÙ4¤)de82®úìª'ÔÙÙ)œëZRZJ¯*øêDm•~$=ýHúæÇ7__|é­—þN/<Ϲlýä?•_sqWç „@úúô¬½Y;$§$Ât/r&X "µhUõÚíCÛ›ó›u^Ý •ƒziE~ì•v{¥Ýð‰Á†Æ¼1 ^›×oôgþܳÎk h Æ¶Æ å¤˜²˜ÞwÒ®wë£k{ œZ†µè}úH”¿s€SöÉOèt:ç$ç±¹ÇrNä\X~arf²Édjkkëîîv8½Ro¯Ð`2¢·éõzµ~—@ckI7²ºê+ë'~©á {­L_p¤2E_ˆ¼nô O#4ÿ7uaL¥‰»[­ÖÿXžõº‘!’Y$Ç\(ùŠDÞ«; ×ZÞ7QVo =øúô:2‡ðè^JQ_À]·ðõX ñI*²$Ð̯Vð€ŸûoùF‡¨…p²aÛ ~ M0Ka;Ì á‡4C9¸C,ƒ12—© Ö1)ÈÃP ÁzN ¯ñ4–ú°´ñW•ÍPª Ý €ª.RñÃ?(»š{gðÖÞSÿÐâàÍoªßü ptÂø0¨L¯2ráø |ïA¿°Rø,XaÕÁu'•2s+{òà"ˆ†ç!q :è„Q‚h¥ãV;Á66C+Üb0‚‹›OQàèæÞ5pô1þ12Y¸‹ŽJraŸ*èÏϯ¦n)}ÆÊëø~r¶Q9}×ÇÒ WÁÈ7e‰Ü»˜ßä£6Éó¼ë9 ]!ŸÙCVˆ"¨‰æÿ|æå/ð7- -*wÁãPe§ÀÍ¢-Ð Ã KÏåA `\MpŠTF©¼å @©L ä+ †¿Áù Á8Ø3`g¸=x¾Žá!|Ðê±™¿ ÞØnX!™LX¯°ìÐN->‰›eêBTÂx:À‹àPØ{Ø×€ VÃxhN( û`m‡'áh‡´A?耎Á|¨†Û`(ÐG` l‚%ð,\ÉP› ’À hø`:4@äËd¨lS™~ȇUà†nØõ‹X™Ýޚךv:m云¥3K+gTÛ5¬øÒâîÔîa-Ã’N&Ù‹í©Ý©A]Ðçó PÀâ°ÄVÆÖŒ©IÞ›¬M DõÙ¨H¿¨H­ÒÿÖæõ×?dHŠTú›R£ÕèÈsdvdšÚLç~‰¶?kXtŒvDWGŸZ|jðªÁ½T4rOß~¤\“”&ÕN«p|€@©Y[¬–‹c¸#údtȪ¹¤&s×™CGNGÓø¦1ä‹õ{uœN§kЪÑG[£õ²^ô!l` ÿö°$I - ¶N[¿Ô~©©©ýû÷5ŸÁ`¨¬¬ì¾{­¶†‹Ó8¿B ö¿ è½ÌôŸV‘÷õ*ë¥jßkÍ…V¡– Å'§×(K›riž^}ITpØ×ì*’§Õv½„9Ϊ¿þïŠÅ¾le±û9wºÊP‰ íÿ½Ú1Iýn5u3øÛ"NOÐ;¹á[x(D¬QðÄOðê!Ø­R—¨¤ÂPý¾›‚·}Gíq(„«ešô<d‹Ž~Ý< ¿‡4è2pO€&øZå{•;Cøà(ü²a7¼ “;)PÈ„v…Û¸8ŸŒþYÇàÿøTÆÞÂ:Pa %+¸q0‰?…þ²‚tÌVù£ÂhxÕq¾J“ŽÔ Ïêø{ˆÍ°tp/lÐ1]á*•×Âûeørchñ·îÆ.~ÛÍ´µl.ÀÜá…zPbˆŒ'„+léâxŠa‘[7+¸ÇÈê§©¦ïÓaø¹k)oöÑçS<6ÀïeºÕtê‡Ip±§†+ßæ™ÕÍrHmmd·[ƨÿ€%żUOâ˪/Y9ö­—”D†HŒqs vx(Wh‚×Ãt§‹Çà!(ƒh7¾ã%þ¡ãÖ » 1Äãp'|ÙÐ wÀ@?ÃNÕz~ŠPKRðÁ4øvÁV™Ù¥!6ÂÏ Ã@Ô†Ë àCX «UêT®†*h†ÃzH5*¿S| ^% ?öÂÈ€-PIp%¨°^‚8h„ŸàøŽCøõ¼äcx*` œê±a£Hùàn¸T˜ + ôðqXÆ¢œ ‡Nˆƒó êa4ì‡m*ûT.‡M`†Xx™ß÷þ"Í´}`5Zóä8ïÄÏþpÑá‹ò:óÒé.—«+ªËáuˆ¯å?$—Áâ°´g´Çúc#õÑǽ7ÎÚlív÷•ðÑ’„ÆíÕY­6ƒíí"ûÚ7þ/ã#u´‹Æì­Ù)u)­£[í5v{ýÿ'ù9F9BÆPÒ¡¤˜Ê˜Cšô÷I½PÚbÎß^uð¼/ÏÓ’€ô½é¥óK;‡tV,®È{3ïL°Nðxì@æÎÌœµ9[`ëË[%IòÅû¦6=JRg\µ²~Ί©1è )¾”(oÔØ±ccbSRRdY®¯¯×”XÅdE¬¤è†õh?Z­ðíp8"ý/þ«Êã(zþÛšFË£Z×KãøÓ7EêeD¶"EçPÃpj7íK—î[)j… Px;’HÇѳ¦«$• °’S—0+uÁïàÎ {`²Ž­2ËiíjL¥‰?<ÈyÓYñ°z «õ<bs°k0]Ga®»%RxÙÏcƒ${"U•`ƒwtÀ`Ri‡:OÀ!=χxDe!<çæQø#Ù_ñ½u…Ôé¹®/ÿH ¹­GÞð#*ç[¸ÏÊ=Žê.CõÌÀ‰àÞÕð”Áp]ˆ8¸J¡f†x¦è™¢Jå.b7ü¾‡vø4°¯µ•LîæcÚÞC£a Ì×q™ÊË v•`¹Ì• µ*+¼£ôL !×Ï:Àˉ¼qmFy–B)|opê·ŒöSÖÅiƒÁµn p ”pœÄ&&èñ¼Â¡SîàŸ»¿®æÊ·UR%¾†£ôà‰ë©žOµ U ƒä6‘¬ÒƒÁä|h„,¨‚“`û#›áž›`–ÄsAæI\¤rLe>¼¦(샷ÀÍ53»°«¼ä{Ø ‹á5¸mp;W(ƒzȃ¥*ÿ §Ñw?ì‚ œà‡v¬²ž‚›àM°WÀBø£Š[al„Ïa | DË<.Q"ªà~h‚Ÿ!‚Wàm˜6žÏKA ÒÖFŠ›`?ëSØáAvB4A%¤À7p)Œƒ·`&|qµ@=$ÀV Uêà]°ÀBz…0Õ³¿À˜¹MQ]QÈèt:CÈ0ö籞¼0)>)59Ug× 4`gggMcMG|‡")F§Ql?3vfx/õvŒéˆ.Ö®Ý}ÖˆH!IïÖ÷B÷ ‘œ› 9X~IyÍÔšñ/ß÷Ô¾ÑoŒ6·™5q½K/%P°—Ûc*c›Å¦‹é!Ó³%-r‰Ÿ…zïY-”\ .}§^î”-–±G÷]z±}}:ÎtØ¢ý%ו´h[òÒ‚•3^$§A5¨Ýýº“U¥½ÜâN>œðÂ`n¯¡°(³0¿t—Q=Aê®·â pc -*¡#á]•6•.x·|ˆUØ[ybO?Á·;Q;!Ef²J5\Í´½Œ•É0à:Fý~¥©IñÄ’ö1w}ÍêyÔÁ þˆ2ÏQf¨TB½Ä•à‡=Ð ` ”Á}°Þ'ÄÂ^0Â4è†Á 0Á>Èœ*=Y*…U6CÜžcuA1¤ú™åã³UžƒtpB3$Á'P ÿ„f8a&Èàƒ·á"è˜)ñ&¬‚;`i˜ öÌ€‘ ûÀ#a>ì…=p1¼à@xþ”°ŸÊ7€D<[`?´ÂJøfA 4B))äcp6ÀTPa4Ä…qñ0 ®…ã ±Ð' ž}alz"T@ “¡öhÝ&Aì€$È… „D(¨ @74DJÜ666;vL4”L&SB|Bfzæ„ñÒÓÓSRRÄ úH‘“É'Ëg•{Ó¼¡Ø­Ó¦”Æ ñ'âã+â#aÖA*rî-IRåüÊæüæ„“ ú¾/¥¦—Û¬šÆ6¹R\ùÎ7vJ*®¨°¶XNcH 5Mi²6Y…aÏÞY•$U^|"®EÒhzÙ'žµ°ðÙ|ÓÓv¦;€©ËdwØ#å|Än]‰8D`C æqÍ’*å½—g|>Ÿ¿¹Ýn_”¯q|£/Ú×1¼#}gº£D9¢dYnÝÖ0¥!÷íÜ€¯§Ü‰2G%9’2ê3Œ£À tuu (fdàƒ"²{½^‡Ãáv»=H¨B3I,~BBB^^^FFFVV–Àày½^!;t5ÛH »F—îEpÖŠf ”¡­j¯…¤.ÑœÔTöÏšDkÑb±Øíö˜˜ñAø '’™@‹œ5£ˆGÕJ¨È¡]dR‰ä¼‹5sGzˆ|©©­•Íf›0yÚ9T-ºá3Hb¨}Xî:…¸éþ×^tÏÚ ?ÿHfñG ¶1£‹ëIðJ;†È”JŒ48IÎgò$#e~yº£iôñŽÊI(æq¿´³ŸT’ §%&¨B©Œ]"&D $©àá¥Ý0×ÂG6ÆyÙÉD±? üœÃL¹_€·×øk£¼£¡ÅÍVžø€ Se].•uÐ¥P &¨x(†¹Ìù’Ž*™Á*.ј`7{dþUÖ.yñ¤ðæIN#•ö‹"ÙK²Ó!dÛÂü¡©P,qHf€*’ýž“\[…ÒBõdQ•þP¬N¯`úv²b*àë-®~ú)ÉÁI›mÃZIÿÑ,7ÃXuÐÆÁ8Ãe‚P £IÅiàTÂjÄÀVX;áÿà<ø΃4(„Lø¢ BЬ°ÊT’!²àSp€Æ€QÇ…*^ð©=jOͰ(¬´t.ƒý0@”ÂØ®c¶ŒYÅ"3\plPýÃ6Qq Ãpè?”‚ 1Í`ŒÜm°|Ð ™¸ð4ø`0¤Ài¨…¥`ƒ+áŸ`€|H&aÔAÄÃ0PÇ•€êX¢Rõ q0 ßÁL™á*À!a4ÀyÐFèæ¡€é`ŠLWÅooÚçŒËb±DGG§§§‹í³×ëݽåã >¶VXÇ,C€ö!ímCÛÚ†¶ùí~c‡ÑÒbQ[|½+§UÚ[ìFéŒo–hëµlseºÒަƇòê›®$¤®Ì.C—ÁÔa2¸ æ6sýÔzs»¹vfí©%§Ž%D7Dk£}h{õìêÖQ­ii’Ú3爴8 …BŠ^©›]_ví ·¤êÕÒ›Kí§ìMç5U\[1pÃÀs;_Dä£k£½ñÞÆ‰‰Å‰Š¢4jªšVÕ2¢¥}h»ßîO92àÛ­ãZ]®ÖÜV½[ôÖ£^› ztƒÄ2jJ"ší–¢(Þ¢9\&¬økGGGss³Ëåë,àš3ˆÍfëׯŸv¯©© ¢è‹#Ps¢1«åBM"21÷-(Ï`5#lYúR¦DÃV³ô=GºÒ"f³Y¨ùiЇ7ýqŽt%8RÚ™}ùݚκ Ɖ%=«v†ø÷z~‘/Å–$Iÿ1]ÁvF›à\i|þ5ÙMÜ1—c^•ËØ¶Šg1œdõ ýÚ'&ÅQh¦ÜC;|ù Q^ÖÕÃ5ðw_ˆ‘2Ù°˜¢ïY“ ’£ò¥Êv8 ]0\f²Bœ†~³Gßy¡Ò¦Óá’yÒÊ#üs5o•Ëdéùz0q-œНl¼?ŠŽ&‰+uœRéæÅí”4ÐèPLJ¸o%‹òe,µB–‘/1§’«êÔïL`„jvX)3Tb®zj¿/äd9©å,ŸOw³/tÃùáTœ'aÜ$1°öàzˆŠ«XX˽?JWèô[’¢›x›w±*—÷ÀÃrMÙ6S‘ö`ÜÁyƒX>—¬†ŸÁ0(“Ì`SùH¢V唇««Q ƒb˜ÕZbYèa¬§ÇH^ÝaÄö`È„xøÁ °B… ÐÃø¦KLRùtÁtȃP¡c0ì„Q𴃙ëú--x\¥He9Ô„Y·5€ãÐ çÃhõpR`.ì†,°@)Œƒ9ptð €ÐkU! âÃg ¤RH‚Åp’a …A#áC˜…pš º  NHtª=S®‰+T2îö‡@5Ë! ŠUÖÁu° Z!.¸/lÄ%˜ýÁÇàQA"ŒLWû¢÷íñìá!lpÅ×8--MìßwÚw¾2à•Q;Fe¯ÌVÕÜlN<–¨êUk«µÿæþ–fKä^»jFÕÑŽß9Üà7h’“§)í`š¹Ý|P²­œ˜"éX’¼Œ]ƶam!](æt `ê4™œ¦ÓsO'´%ôßÚ?n_œØh˲ܑÕÑ2­%¹>ÙÐn8¾àxÕ¤ª AK™E@Ìf³ˆz%w–ƲEez¯>ª.ª/ºÌä3uëÔwé«®¬þÞpk£Uã,k±I¨UõÕ­˯ø‹o,®™\’Cö»¾Mo«±emÎ2;Ì@\Iœ½Þ®•æ±ÍIG“âNÅ¡œºˆŠPÜÂãñˆöÛíîK˘7Çãt:E2…ˆŠÓ`l:ÎívƒÁîîîÎÎNAq ¢h3›Íš'ˆVÀi5± EBz•)½äšzqé"ÏI ÿý fB¸‚Ï Þ…Ð-ÐMz~ IDATÂ*añkª+¡¥•û„í©ÄdQ\$²QüïÆuš‹M$Ùãñˆþšt zx²×ü¬øšçn±~øˆ­|d€|'äáœBÉytoQYQùð(ú¾x{6ƒŒ(õx†Ê%NQå•T!¾ù0×Èül]8! ÒÿãÆx¡L½ö8ï”)Á—ý8“Iði蔃¥élÒ+$¨ÊŸ9VDa ûàí²U§ðÇmì¾›oK8¾œ£ýÙ}1÷æ"•/®"#‘ráßâý[¥R >!6‘OÀF(ÉЩ2ŠmœZÌܾ‡–´°Ö‘.€íðUxV¿Š`”Ax¡nÅy”âoØ5Oýi‰²ó¯Á’cJI]ªë.>•þ!) ¢j$Çs)j¢<Þ„™ð5Â\¸ Òá7*••«²Òa|Çጄuµzžòò¢Òƒ&xVÁRA ·@\‹`Ü õp!ülà…87OåMxNAüÛá\¤2ÖÂu‚+ FÁ…ÃUVª|{à4\ %Â¥ ¦Â (‚a°®‚#ÞUXSÂTâ÷ ªa|»Áí0VA=~žßÂaȦÂah…P‡ ÆÃ?¡vÀÝå° @=¸ I¥*ìi¥ò%”€%¬Õ[] ø¡J` aPÛÓ°8 GÂBM# :á-]yK½k»×šMæOŠhj‰¸ãt:÷±o­²vîæ¹ÉEÉŠ·‡ã©ÓéôÕzSI|É{,ÕL®ñD{Æ5~ÿmûsvåhÕ•Pv0u™t.ݹF:uç3;ëóëII8ž ý)¦&¦úÂj[ÍØe+ætLJUнÕ.‚²ªªÞXïñ%ÇG~52¥:%±%±_[?½¬?°à@|S|B[‚`σÁ ÁS7óÏ1ñåñ ŽÜq$c{F$^\¯×|†”’”ÚYµý¾î—X”h0„@\$”Y3I°ºÈ¸ Mu&[¹-ñpbRIRlylÔé(K“EƒiX,W]m?m;'\5Õ3bö¡È(n·û¬&ôz.J%­‘¥u;Åʈ‚@hUH’$L­€è ¹pêÒŒá5´›È”ÿqP9UÒb}¯t¥ák ƒÈ}A}‘ê´šã”X õ'êã@øp»Ý¢$ÒZy"£hÊ„Ze&ZŽÔ.¨I&j3¹ÿ˜®zÍ®„æÖ¯IW•p=¬€G`?¬"9¡ÃX>†Ú¶P×~?~…Ã*vH…‰°ÃÀó :…á ÓyãYÞª§hý!5ž€ÏÐ4YQmUÚ@/QoÀ °†x¾‹÷ æÁˆfæß¹`"ŽbÌêê­¦S¶öiÚB#ÖÐuî³2 »á9‚›qýL°A¯`ÀÀò¶YAZÀ±4Îשè<]ŠC2¼ù{åèg´ €ïa¤3êOÌYÄÛ³i(ÎHLí:ùV‡´+E¢Dv¼K©ø‰5·â±Á70 .¼åÐe°ôC¼,á€Vˆƒç!]çž'9²Ô¶{ Eá[èèæS•å.ï«|” téá°hZxCa ì’ˆU° ê%n†a!$Kì6p5Ü¡ROÂez¦ªÜâ^…P ‹aø ?÷ð¡ÄÄH'œÙzRáâ÷Á ïCÀP 7ø½Â?Á'‘ ŸBœmðN>±áÑÑùв ?ÜLÞÁz¨ d@³‚Ša?¼ ýa(T¤ç…~P Ï$ø¸üá™\.| ›À¿ ŽÃ•aÆ`X60?œ·ôaxȰ  ÖB,ÈP.h„MÐ×ÃN8 ‡a ,€àì…cÙ0 a1B;T@lƒ2xjéªÅÝU•'ç%%%ÅÆÆŠívsss‘Räiñ )¢4+w@hÁ‰½¿¦ §mÝÜÙ?fÇ:ck j£›¢CRÈè1FêŠöйj¨í…w?»{ÚÓ2evì´ùlÖ Õ€¡K×åJveì͈êˆr:âî6Õ¦—{èPîx·ª¨‡~s(çË}Hoò™ìv{L0&¹&9gwŽÍa3)&‘®E)¹½$ëû¬Ø¦XÄ÷${’&ëüº^j­† !ëHV\{œ@3‹p/b“¶CQ¾/Ö@¼£Óhê6ƒÆÈ€.²Ž!Ó{õš&}¯B$rÅDìî›®D3J¤Mñ(À-Еâ¾n·Ûáp´¶¶ºÝnŸÏçt:Å ¢&..’±¢(N§Süˆe  —NÄYÓÕ9`Ú$I$ξ=7mB©“« 0Fâb"¹ºÚFÒìz•t‘Ï™µÄ#."Ú•â&’™¦+¯ÝNûÄŠ%é\dP³Ù€™K$RU²¡ ö«cW«†C8«A©a}¦6hVQe†@<[%ÆKÌ‚x…¿B.œÖq L†-à—i‡zX/‘%±ÐƤ+fÂ60(4B5L‡“0a&8ÃòáÕp̃ØD0A®ÂAxJ¡P7¯¿R*Þ…Œð!<]0+ ƒþФc,œ²1ÐO1L„pËðœ†+á]¸òA6X-óJ;ÄÂ>è‚ëatÂTx²ÂÛíÐK Fáh‡a C|ް¤lÔBT€2`4ÐÃñ: “a(Càs¨ƒ©à¸D(ƒq°Rà4‚ÎW™ùPn8 c¡N@'̆u0Z`ÔÂVÈ‚0*"‚Ã8H‰Zº:¦?v"tb`h`TT”¦½]˜Tøþ¥ï[<–ÌÓ™G°JµÍ¦t´ÞˆµËêIðtìL©LÉ*ÎÚwË¾Ú µ e ÂRäßa‚µ­nǬ?î@œ¹Þ¬×ë÷ܹ'` ÄŸŽ?zÕÑŠ+*K-m¯×«…qͮԮwèJëùéÈŠ%žL;ÁíÌqæ[òÕtµbFEVtV¢7Q„<ƒÁu,ëôœÓ®XWëÈÖÆñC¿åèQÐ0™L¢aI!‘N˜í ïEÚÉka4Òx©ibSLCŒØàGZèjÀ¹âÚô*›z%û^Dݾ¹DK{¢’£ `0ØÓÙ‘Ðat{åmf Rd['’ÿmº嵸 h5÷Eœ‹[‹ZJ“:ŒLlg©k ¼Ú[ˆ_ [‘„úæÎ×HìOýgŠÃf³+]yS)oØÀéb8  0ögfS¤£¾‘¬DiHˆ¢8…ã#ÑÏÃW0²áC‰›eƪìˆßÀãA~wì‰ãjߦiÛÉ-¤Ÿ‰Ÿ³yîÒ ­~,Хâ2S"Af€ºô± ]c^ȲDVW1mG úGn)—%ñôæ C!è Yâêéú Ê•ÿÔŸ­WÊd+¸þ%‘káóO8@™\ ê*=Xa/Œ…#%ÊÒ-Ê5éÌV™½›ÙëÕÙ5l³ºN%¤2>‡¡àã¾BnØÏÆ ðx`Èp®¯@'1êá(2cÁõP±0Xe(„àLU{ sá:•O|lV@Ç%*›Àµ° œ0š¡ÒÁ IpqØ©ÝQ.ªTâBüºÅ]”•ÿÂÚÌîQ°KÇPl‚&pÂ.A8¬ÒÒ-ÌôqF€áø“ÌlFÈ »9GâB•BðÁ¥P¬cŽJ%¬€z˜A¨ Ôú`4‘0~#4CÌ…™l(ƒ•°Ò!Úá‚ aÅŠ0†Â$Øè†D˜ —‡5–¼ A)äÀ(ˆ‡“`\ð)œ YB5¨`‚r¨€ÁP …02àHøÌ™aýT-]Y–¸–¸¸¸¸ØØØ¨¨(ƒÁ°/mß>˜zpê{/btb ª MB (=. !¹sP§¡É`í´&•$… ¡¶m¶&›Ékê…ÅŠtÏ¡ìʲÔý©–*K(²4X¢ë£=FOó˜fƒÃ½>;¶$V˜0‰$Fè®DWå•¶j[õ´êì-Ù÷ 4ûÌî·)ÞT;¾öðÈéæÔ‹ê.jkks qÓÔ©uCëb«b7Øä4i)Ç`0”_RS#)R$ÐQSpPÅ“ä)¿¶Ü1ÎáçhÌklÌmôëüQµQš:ƒàAÆ/î´´[¢*¢\.—F8Ӳ𖴠þYí µÑˆ˜ö‹w­ “"G8ÚX%¿'ò“Ïçs…îînvoÙrhѡ؊Xs‡Y ßQQQ¢{Ö+]‰Þš(Oû†é_“®þc¯ßh€ ì¥êÛë%ZQ(’¶#‘½äz5{MÍ6Ny¦è^ŠjXùhÜÁs§+}Å}§Êw:ú)Ëê弓ÅéQœÐ)¼³U6«×<ÊÍ^hî¬êä®Ià8| žX.ò²ÊûåQ>æ:2”ãUKzËêºÃ,«eëMjO„˜RœøƒL‹B È,³óøý°6x¹Kí|Ž¿ºˆçFÜàNI2·‡8Õ£Þµ–Ð7©¯¬j=ßü`ëšY'ó*2Ò€ëCƒß`SÜ6%2¸ƒ¢ …{u[îP¶¬ ñŽÄU*fØ (©Çº>^N,Ü6‹­ïëy.ÈZر0ÞcÎx÷ï0ÁÁ=¿§#š ¾à6îÀå`ƒ œ`zÞ!¤ù±ßM[)\% À§ð*PzDtTh…nȇŠƒ/ÀÛà.8 /Á“PÕ2#a’Âa•8™P î‘°B—@ð‚œ0²@¯²dÈ„=<ÖÀ²ù<ö +„[¾…|˜+…ô-¸ás˜ÝÉ«P#a€LøXÅn˜›¡ŽÀD˜©ð ‚-ð\¡°:Œ§ØzÈ…÷Á‹áC8"øn†0 >§á[hSÉ€[a,,?Œ…]ðÔÁù0Š fÀ0„Ù¾-0 蛯…Ë¡ž†×À[àQx æÁ&Xxƃ9°vÁP¸úÃà„$xÖÁçß›*xîïÕVеÛíf³ù¤|òaýùŽÜ[÷ÞšU–iɱåþ-ŠA‘diè7Cí…v ^%"…ÛíŽ9S=«º=¦=¶5ÖÜlúýÐάÎâÅÅ’$Mz{R$Ò½×W½y\³¹Ãl¯´kÑ6á`BÂÁ„¶ámñ%ñg:lF£èCƒAŨ[xløÃcjbšÆ6--šöÊ´ÄÓ‰ýúõ‹J2x CtCŒ©Æ††Y–E#1 JA©ÿWý?~±‹}¤²ËÊJ—´ä´LxuÂYcî‘tgv›½æÁ?ŽÁOJaJä™…wŽø|DÃø†´ŸÒþ7J‹55©H‡ªHF­Èjv¿}MÓú…º•ÝS=¼:ª&Ê•åJ¨NÑÛm1›Í¦õÓ´ ŠöWdçS<@ä¼-çý¿â ÉZížõÕðY§M½D."³¦Öüyñ¬¯ïNsÕê5>Ô e³Ù,Úƒ½DúRª¸öÓг*.æÕ÷i8 O€%Ç3ÞT6·²r·Õ¸?ph畇 U`‚ŸœìQq#8ÜB…kñ<È?çÛxû˜îSƤà߈« ZᯠÇ6CþÌ0=e.¬*îk$‡xnÓ1RåO w%Ë_çå;¹íJByÂùð/»øðynÙKÀHØŽ²„Ž8-PÂöö0^d°Á›ðxnvxÊTK$„è Ûdü6x ŠáI£Ä:˜¯°ªu˜UnSØïÂð5!NÁÜC Ú…ŸÂ»“È[ËŽt< ,Tñ€®QÖ‚oÁ} ¢àÏPQ° ^ƒ•𾊠‚ðLƒ£Ð&Ãp<A!ÌPyt FȃA48áÁß! ô`¬ð´Â4•ùà„ï` ‡e0²à…°ÄŸzz|ð\χö:è7A¼? p¼n‰u<äwà†«!òás8¾B%¼ !èÜ›`78cæ$Ô1’#EÙµ]ê¥q—¦)i˪—y=m mnÉÐÀËwäÂ/4 3+öݹOöÊS?(›]V3½F»HÀHÚqF¼Õ^cýÉho²÷‡¿þ¾-=ûûlƒÛ`Ò›zÍ|1>9 Kª¤H ±Nä*ÃI1 z<EQö=½O‰U,íŨL|o¢¦E›œœlµZÇ··ú¬ñññ-–¡’.Pggmš‰Çp%»Æ¾56áX‚üx<žÈêªèþ¢Ö1­S~;Å0˜=gÀö#öc73ušìåvmèÒ‘Õ‘¶9a‚©{ôë¾q_¯×ÇÄÄüz¬³«-êüÎDçè7G[É©‰ÉÇêÅZ‹ÌF½´—4<‚@ÞGZ@õM<âZè-/z<Q3ië&rC/%ܾ=Õ¾‚„ghÿÿ?"½5,å¹ÓU"Qyc½´f·Ê$(„káözž5Ömô?òg5H 4W“‚ap'èÁáLÁ Ñ ƒzpI”©ü ‘¥z©³èî[©D¿¤®ÞÆ‘øj†þØ£Šc›Â‡°¾„¥\z[oäd ÷ͤñKÌŸRð78ɉ4ƒón”C.çëd\ÇoWß}Iÿèï‚Ñ_ðúLxžvs£Øa‰ÄdXÁ ‰ ÃƒÜ 7ƒAO Tiãô*– fF²ôÞr•€Êø]ˆkà‰FÕðßgþÒOasˆÓ€›áGðêW㟨†§À˪.îØÕ!y£’ÜÈpXž¸\E:æ(TÁÛ*Ø »`)¬T˜…ÿ“øAe;L„2¸>æÉC) «]wÃà6‰ñ`‡{! –èâE•½³`šÚÃdº¾w)%*,æ„ÄúW¥•³Ô›SÁ ñ°ÊKpjàN"ñ¥J=Ùlø®†N‰›ôؼ 7À¿Àu0j`=| V؃ ,pLxøºà0î‚ ðˆ!ü€‡tÜ¥P¬R#a \Í𠌂#ðñMÖž#¸ ja5L‚‡!0–C4ÄCô‡°Ã`8¨âr¿Ä`hTùfÂ{\_ƒ§Ã’{ ë`=×ÃòðÝ߇D¸¶×^Þçóù|¾.µk]÷ºZwmÀ½Š›²aJÙ 2Oœ'¾<>ÿÇüܯs}>ß–g¶C·Í:_UÕîîî3¡!"Œ˜œ&]›nÜ㊗·ä¶dÿ×W§É²ùýþ¬­Y—Ul|gcÞ²¼Äý‰@wz·/Χ èâNÅiþI‘vùÏçïûÓ¾õÏ®O?š´Ç}2®ÇeÃãioo¯¬¬´Z­ÝÝÝgu%Ö"~¤oÞyEK‹R÷§ö³õ4£“di³èt:5"£ê¼:E¯¨ú_ÜeÊ#Sv-Û•X”)R×K¤ç?:9I’ÔÕÕõ‹©W:R;¢Ê{À÷QQQÚško­Í¨uºúÂd¿ìIôì|qgÁÛæb³.|œÃ?åH´¿F{B[ç^“9m¢‰·×&¿g}‰è‹^«8A®u˜V‰ŠÆr$‘K£¬iKÚ‘j‘ oéëFÖwvUŸÇ1Òíý“Êvp€Z£Y`·b´póNšc(þæA ÄCl¦G(¨@æ ÊZèHÓ‘§2Næ•bØ¥RÌj;Ësi‘¸þGeàqyô µ_J‚=©Þ¶ä2 o"÷{&˜Vƨodå¸Ïv¸®£Ðcá ûư|‰ë5¯ gÅoa¬‚ƒ„•:®P —@.|óá'ÐC ø ÓŒNfehxŽš1ÊÖûà4(‚sª£N5¼ÍPKT«]ij a ‰áy¨Ä˜ó=Ÿ BÊ …CV–ßD÷“.¦É#öJi4͇}°¦I¹V®ò$ÁP F¨‚Lø^‡¢òX l0 ZÉ«²,Ù®Žú¬Ýw€\e¹?ðÏÌl¯Ùl*)¤‘„@h¡%HQDš Š ˆzñ^+W± T¤( $ôN $HHÒ³Éf³½ÍœßïžãÜIˆxïïü•ÌΜ9mžç}žç[Öxý‚ÊÜÄndT³‰¡ôã9o±6퀔¦Èp6SÃÑŒc 'PÎ&Ïí&µ(sé'#/§œ11¥42—=B—2cx¤…3Ø—.Šx9‡e}SŸ5TŽOr=,ŽÁ=¬çcŒ¤ž É<2ú&v›ùïq?d»r?÷PO&êãªïÊXúÅ’ð³^Z9Ž Ö3޽ù3‡1Õ<Ê$Z¨b/ãÆ’£CXÁ¶qPÊþi? "r'EÔ²)9D_Ûy[9€0ŽˆWãÑz8ˆƒò‘›7o^µjîxßÉkNÞ´iÓ¶mÛB«¤¦¦¦¤¤¤­­­%ÓòÆIoìóâ>!vOxyÂsö²iHh' ý:JTl®ñäˆa³‡m¼ù;ûò%¦³š½yÔó‹.ή;1:ýoEÏNïqsÔ7šj/ó±R›+ÐãºÈ'##"ð Çq ã¯ts!‹¨ðÂܨï"éamä82lf~äª)a0«¹ª"]¼K?î¢GSEUœÌIÈ?x×y›^ZXÈ6v¡ýèð‡ìF9ÞæÚ(ÊøÇôí}iá§‘Lä,öäaúóqÞ Í¶ 9¯OÃÞÑìÎFÖÆÊ+8…þÁJæ¤ bnμG£8Ž 4ۋɬ£‘ýcŽv0±gãÎOW[¶lYµjUE{ø¸åÇ555µ´´„ÅluuuEMMM— ìlëÜ4rSÿåý[iiiEEEuuuàµ$d—Âÿ§ú/ì?hÕ –-)©M{oڰ߆Áó‡7Ô-««}³¶ytsJjÈëC†?=¼rmå²O/ñ∄șŒÂGÊ7—?´¸¹8‘ÄNâ]€lÞ¼yݺuMMM]]]w¿RN ’- Ùh‹Êw+ßùÆ;㟟ÄÜD:aãëVÔU4V$-µ|§¨•ǯ\xÞÂL:3tùÐD7(XÜ&…×öã“€’o骻»{îWçNºaÒÆƒ7¦r©ŠÍIºZ}ÌêÕ3Wz}PÐ!„R£@s(éø•n+­Z[¨²¬©©8p`yyy@ê'hÆ$:ç‡þ|Q¢üt8Ô4áÍùNQéÿ¹$¡DðáÊ 2à ˑ|ŠXþÝ y(Ыì%¤Þ§«|Èö=Û‚*3È[„=ç{wUVVæ§«í›»03r{d*»9¿WGF{«ÖH5ß1ïh߬Öªuo³%r?'ñÙX5çœSx!Ò™52r2Góej8—RÖÒó”Ç:)V}‘É£¸ÀåOµn}1uò´´ýrϽï¹ý‹\×뇜Ï MiMûbÖø²~Û)Ë,–ÐË• æhþÎF:˜ÈýŒgW꘭a%gdÜ”óVdW2Ž£éb6—Ä#ú±|•šÔ IDATŸD®¢‘ßPË/i.²w¯s¸¯JIä7­7ÜkÈë¾sf¤‡±<Ì‚´ýS~Ÿu[¢A·G-{ûy±5<ÏÕ4ç<Å‹\ÀZŽáV°œA,㜘KôÅœÅUö[àíWÜàotù·Û~°„9ÄŸþ`LcÏ“¯ô^ÞÑëS¹¾YËwb¸æ¡±ÅÔÌ œk¨Ë–sIä&&F²ÌŠ<ÊYÄL®âó±#ð?è_äæ^·f\Y‘3„µ` Ëx ú¬³æñ~Æ~ôðŸáÖø›Ë…JˆIí¨¨¨²²²££#µ55âÑÈŽÏöì}î'ÏEQ´ëC»}qh&ÊL|nb_¯UDðvÎG %¦õ‰Ø]ooo{{û?¢š›ÃÇÃB>ÑfýßMò·mã¶-¼`áð9ÃkÖÔ$’D[[[¾ û5ì}ÝÞ5jBìwûè¹½È^ÈšáS]]] ¿¸°·ª·º¹º¨£¨exKýâú®®®¦IMïžûnë°Öñ7ŽOv"iüäk™¨…÷‡b¥¢¢¢¦¦¦«««¢¢"ü‡ò‡ù§$SºÐwXdo¿•••p×Âä;s†¼N*?£|˜{èé…HÔ~“24IŸÉ…-^ú°;žT{ùèüä'°ƒ÷oÿ´¸½<ºrO>]üÀy=Ù…ªÛ³ý:\u£Ý׿z?<×»·s>wGšXMi¼ÈËÈa¾¶ÖÓ‘?ñ_üŒ+úÜ=ÁÍÅvëÑD ·»¼§…»½±NÉu˽}yî¡ÛÜãK½Cþì–v~™©Hezúw;7ën «9kº-` pçñÊ[œÝ¥‹¯r]ÜÇ”d|;²,g3ÛX–õOòY®g6o¥ô\Í8„•œÆÒȱ|‰ýù6g¸½Ë·ÛzO|Ýãòdë)GúR‡/•yû¤¨åJúq<ŸãÝœ¶” ù$ÿmn?yÚ¨r/~6¹‘áü:ÆÝÝÉq £™4ÒÆ—‹æñ1áÅþKûOýáÔÞÞÞLG¦@]"_\<áäŸlX=TTTLš4©²²²´´4H4…SèèèÐÿ¤M—_!•——‡@Ÿ_´uww' ù¶± šì-¼˜¯Jõa­¸íPg½€ ¸!öПŽß¾fý—ÈÀtÛþ0§gλ&M6yµÃ7øF¥%%|Œ·h‹ç ó&ƒÙkhdg­u=Óù"ï3ßsPZ §å<Ðc¿áìÝãÇ)¿O›«cj®ãŠhÛwíuªS¹¡•›mh·×h†ôs\³ˆ+I±˜v.`vʸÈ?ø3#À.›ý’ә˽\ÈF^ãj¢‹gËåìkÙã$#›±{¯[i¥š±¬H™ÓJ; h¢RwξàgßׯÁ™ÏD ³W§QÃtNá%Î •2&mz¤.ç÷²¿pç|“¿r¦’WÉñm†3„ Jû^‰±ê¹‰¿ói63–ãØ]o…k‡¸öJ–òq0ÝZöàúœÝXþÜÇ2NâÓ<Ã@å錫r}¶,3‘"Ή+ãoÅc˜Y4QÁmÔf\Ы‹qü–#xœELå:¶P›²'Eq u¼HŽs¹…Z¾ÍgùzüÊk43‚MœI#y3òÇÅÒ39'b_j¦3ƒ ÜÂY,§šçù?âpfÓÆp`[¹3ö½…ˆ3ù ?e‰Èò}F³ Ìaâ}Îäujyì{w]‹çÞΊØ-¤ÙÊeœÌ'ò §[¶l)..®ËÔõF½÷M½ï WÚ\¹yÁÔƒ›ù_nmmíêêjhhÈår=Ñ?;EÉ:7„˜ Äšßf)ÀHz·¶¶ö¦Ncî3î®q ¾µ ªRRŸ0å®)a’ÿñ7¬Gè°%û/0kÿ(ðñü)zøGÈÇååå•ÙÊ’{J–|bI*›Ú6jÛþ?Ú¿¸­8“ɤ3éíÞ?ÃVWÑô«§÷¦zCï´ &}­BBò @EQÑÑÿut!z"›*ê* ¨Ï¢â¢ø#X¶ª€¡cRcAz(Ðeÿ(Îa·ÛgåüB<ü£ è é¹à± i;L’’Ë›Ÿº¸DR~…ë°%ÜüDö“¬É¿†‰×L>*'yzó/cR\~Xºªå“nHËmsöú½è¥W~‡ÇÙ— LˆÉ(¡+²ŽuläXº9‡N§ž2³Sy>§1ÜÏs(oüUäçYCh§Ž·xÚCÇ{hq/ã±Å|jØ•…q”/O9+åÝÈáàLºxÜK?ã ä&^åÕlŸuÈk¡ˆL›™y˜ êÙ³×UYãx;Ô)_à6qÍìFŠÿôÝa¾qUúcß˹,ä:yãéNiO™˜õïñqnc"ciå2Ʊ)ž²EkƒvmÚ%*;­f<¬d*oðG.eižc Ÿá¼Á.ÜÃ1¬gñŸd7Þgr°ö`pÖ=ÄfòŸß b Ëù<ûðá)&õº‚KbÿÆÍE·ÅGMÊ~‘FFÑ’‡Ó›Ãp^àáR²)ÿ‘ó2Ïp&·Ð–V’ëPù‰1Ìæ×1Äî J9¦Ø¤ê~ÇžTq:³˜ÈVVƒÀ`:Ø•'™Žæ%jˆ˜Åilâ 0œu1=ðÆVÒÄ+ìÍTçìÆ6vg ‰}† ¼Çd^`ŇÒ²Eg?zö«“^]8iaWªëc÷~¬6SÛ«o¦]QQ‘(¶…ðÔÞÞBOB#Í_ã8¯(L;ÂiÊ/§„Q*•êñÏ )^µ“ÆThîÐÆâÃØ9ÿácNOÁV½¶zøËÃsE¹IžÔÝÝ,PžèAIöÃzŒaÁpùeee;|gP”¨­­ X¢¡·ýÂzتròÎË4áv477‡ëßÑÑÑÖÖL j£*qü»[Ð!ü·š±;a¤%Çæjù #mrÇ·¿bIš ë›(˜¼nPRP&(Áü̼˜ä¼#û1‚ÕæÍTw£kmIhæLb_Þç0¦1žÒXbu.K)£‡ùÃH³–Ù<Æfzy‡leOÐÁtjè‰uÞ>ÇÝAõ\L?FÇSýQT3WŸwû8ÆG~þÀÃÔ°€“XCŠ=bÞÒ1„ýâaJ;Ý–SÍ0ˆGx„ScDÙõ)ß‹úRÝBžÌl SRVf\ùyufÊ‘©´15]e·Œ9½Þec¤‡‹XÆf†0˜:¶0‡2våxÎ,rt®O¦¶ž's^ê2”ºx•1ÌgÖ3…e<Í®|™vf0—]ÙƒûË ºy—±dß»|@†¹•ˆĆCØÆR.bWV2™IÑÆÙìÅ&ò2Yª8”'XhpLŒÜËfV²ûSÅû,b7Jé䓬KõYÝ×é3ìXÆä”ÚÈHféS™:Ÿçi§*žq62™æ‚KéäuÎ`!'“b0[bާQ´sÛxƒ#â^e%ƒy–á|?$Gðhâuj˜È9,‹_¯¤“ŠañqÖ³‰wÙÈd&³”óóE˜Ö­[÷Ö[o]ƒZµµÍµµkk'Ì›z\aÒLXƒçDzDG5£í×˼A°½¢A6› Q>À±ÂÞòIšùé'4è‚ÄFA7)¿¿´CÙïüyUbÐVè‰Dl‚.)ÛRVÞPžä’Va­***ÊÊÊêëë×5ßõ#?O$*V]]]áDÝ÷Õ»Ða Ƚàn•¾IÉR[[[^^^WWW___[[[ZZZ ¿½±aøÒ’’’®®®ÖÖÖæææÆÆÆööö0íË_($"‰™YAQ•¯D•ÈFäSµò™¶áÂf2™Dd6¹e;dSåƒ2é" ·yå‚åQ¢BYàG¼Ãg2Á=Ô[©T*ÜÊÐÞÌ÷I)ÀÚ„»V]]/q»}uµœ Ø‹·<¼†ÿà°XàfZÀ‘à×\ÂÙt°”eÅû¬-6­Ç|Þ¡–[XÏN¯¦žÏ0d˜Qkû¤²ßæÝx9<„‹øC±_ôø¯RÏ&rXò.û¶»“ñß¼Owæ~Àlã[Œd‡p›8…[ôd³9‘sHóŸEzzÝÎF~œóUFrö@÷YÞí{Tðe¼¹6×Gý+=9ûÅXµm”1³Ó#kø 7Ä1÷¦SÇ5<Èø&Ûø·ÄÅÄ¡q»p9GRG–Çy‰cx‘Ưi¤Å,foöäPn‰KäÐr,áN$ˆ}ÌãX:ø;k"]±ÿÈ/ià?Ù˜û§ß|/üŠOð?àOÇJnáöd!w0…+9“ÐF$O$‚8•‡iˆ'sÃCôÆJ#U`^eøÓÂ+ ä}>ïsuÌÄjç/|ŽR¾ÄlÆó_åóú°…Ñ3HþT¶Tf:3]Ù®d`âBw'õ„“,N“i>Û´‰—´ ÿå :¤½êêêÿ_¼ÎähóK±‚Öbþ_ó-v`{ j’ÃB3ª¼¼¼¬¬¬ÿþUUU#FŒhnnð“¶¶¶üVR"ÔÙÙºp t;Lo¯¶P`ý¾ýe Y­ººº¼¼<@Ã}IuÛoÁ€8|i8Á ýñ/ïN`/%ÜÛ|½d¬¸ý…Í1©€šÔ¿$¢e2™ÖÖÖ$-|K~ß8ø¼|˜ÿ俵%Bòÿ.Ë{û/î`/†»°W:¥9emÎÊÈFŠèæE˺1rsr‘«³.Žü„÷y›ÚOr­œUìÚž Ó¥:(󵛋­ìù Ì¯´n%×­ó#8—m4{´Ç †y(kYSê#È»¥ÇWyµÉE>žrSä}žäpnç{¼Í½ô'Í-ü†{yƒ?ñ=Îev§¾Ã5ÊxŽoôöA«—1œŸòõÿÅí<kÊ]É)WE¾˜|xT÷×\vµewQÌ>HÉDžÊÚ¹˜Èjù2ÃéÑï'Òó5àFs8ßàs‘gÁC|™“8ÉœÅý=ærzÖBêyžã¹“6z˜KÄC|½ÛÛ~É&þFšu¼Á Šx)=³zÝÍÕ´q37‘b4Ëâ ÿ ÝÜ̹¼ÇÁÜÉûÔpµÅöëq3x†Fn¢?£ù)áÓ\ËLÆ2ŽuÌdÝ,§.N]ƤòÏÑ/íK1s¸ZÎæD®¦‡"Ê\즧0Ÿ*Nã{\À<ýø.d-i¢„nîa&ÑA'ûq&qͱ0îÍÔQÌ”ŽH#ƒ¹‘ âŸÆu!zp_Oy0ã²Þ¾.åfþÊUÛúƒÅFEEE¬JÖæÕI>/§`ýžÐžÒétouoOmOG{GGuÇ;½ƒÑùüH]Âr>hò¡YÉø$ôâ 4èI(0š•Ûèó¿5²ú— ®æææÄTÔ:¬¥M¥%­%;¤µ¦Óéêêêúúú]vÙ%€Üººº6Un*[_–ÏÀÝ¡Uè?¿‡ÖÚÚšÈy”––&²‰Àkeee}}}¿~ýFŒQWWWRR²~ýú÷Þ{/ì'(¬'¹pgC×4 æÊËËÃOL:’Š'±ŒÉ¯®v~y nÄö[EEÅÿ"m„…Qr$ùXŒ|&\ÂâÚ> &å]2\ìîî®®®Kí×o¶>鯼¶a"[õÓ•”6Få,¼9…ÆŒ=r²‘k¸ƒ£z­e"k©äö^/2š6Þc 'òZÊU)£©%ýFï²ù¦259ïúíwê.ÚÓÈc\úw\íÝ)‘ý(â%Ö²kë9”­Ul7¾Ç“EÎêq1çÖ¶I-—¥,éõL¤%ö†¸‰Ÿñ*ï°‰é|’µ|‘Êxµ~ËØÆ3iGæLd>ÍÄó̈‡oUšÚnrÊQß\ä¦0žþо”95Ûëúì>ËÓ»íeúr§ßå¹0 ûTFeÖ씋"p 3yŠOó2=ú/òSÊ>å[56•s5·ñ ²˜ÁL¤œÏs{Ò.ÞO›š3š»À¸˜[âÅþ¬Øà{ô0’:0˜»¸†Ë¨Jù,¯§Töº€³8„ùsÚ9Or=%œH#],à ^¤ž¿3„ØÂåœÛãê˜Ïïx™ëøë™Ïxæq0³˜Å׉¸=ï™Êo¨d-—±˜,Ã8”Õ4ÆõÍxù:ßçM¶pmÊs¼YØcWðSò4빌 ‰ýø#=Ì£…ý™Ì|ª™Ïi<Æá,e=‡ó&m\ÊÓ<ÊvaO¥œ²!’ѧU¶qáe1Ë"ý{]Æžs›¸§@Ø"Áˆ'Í«`#’ò+ªòòò@ Þáâ½ßà~ïïù~CmCã®(k.;é»'añq‹7»iÌ3cg(‰ž¨ª¤“´† †çùSUUU2HK àƽ-X°ïdõ(®¢ydsËð–(m˜¶¡u`kͪš=oß3”Ù¡´Ê—d }¿ÎÎÎà±~ÌúGOôà®~½: ù¶é}”­³³³­­-\«â2ª««kkk P[[[RRÒÙÙYUUÕÞÞÞÞÞ^àÒ´ý™†B0ѤÏG…\¢¤ðÝ ”.¬$ò#{’á \B @1ÉŸ’{—xL'EgþÈ*ì0À“`ç2ƒát’†êGÌ”Ûã,òÿºÃ »ÃkCÊ¢¬-¾2±øÚ!%iÓÍ><Àçùop *5>cÿv‡1ƒ­le7ÓjÌÁ©Ï®‹r³¢7û×TÏ3¬H+m°ÒÜ:Xý»±çú,öârç¬&Y>H`gV±h“ëáí3s÷¯æ·ÍC|À7b4Äiü™Mü„õ;Œ½wØÁÀ¶¶¶Í#7çŠr#× Ëö’ÙU’Ev‹¢è½CÞ[1j…^ýõÿ×ñ}†I%Œlüâ#)úúúPN‹Š|iÑÐ Z>cy×À® çå¢ÝžØ­l[Ùÿ¥«ó/3D~ .˜"¦Óéæ]›×´.“Îd²™ƒ¯:xóˆÍ¦nÈ–e32Ig,ðmƒÅF° ܺukKKKkkë 3_6gXS¿¦’®’žžžÐJ éy')$Qû çך۷ 3™ÌÈ‘#8a„ªªª`HÈÑÿ2ˆôŽÜÿ‘?JkÉ(«€c¯¹V¡î¬¬¬LÀ&¡Ä,--Mp†ùxËüê*ŒóEª’ç-Á ípMÓÙÙYSSæ‹;Iϱºéi'ráïs×nîu,mŒd) cRÎ8þ™”3ˆ~<̤é`ŽŒZ®ÌÝ>|†ž«#ißfdƒµº½Sí¬áºJ½¾K)åϬâ\Îc#Ù¹8ÛÜfl½³AêßL¯©Ìz(fC¹(È¡2‰õEêzû†óãø€2Ng%³Öò7êɱ/æhÆPD}“yÌás ãr†ñíHOY6ØùïSnŸEYkâ×½t²€QœÎóŒ&Cw(1y›Jö`¬ù Ö©Å£¼Ê žå!Ê9Ž^™ÆñNÚ¸<«™‰ld ²šQñ ¦Ã)Þbtd&Y*˜Ï•l࡜4 YgQÂä8µ,Êùzœ³oeq‹Xà ö¡œóW¾È$Æ’e'r?¿`#?`Ó˜Ç{‚øhR¢;F5Cx“ŽŽçLÃØÂJöƒºX”wÄîŽGòçȱ¹>•È=øKLN˜—'/».žä@*)f0¯ó-}IJé,}Qî ɸ º‡|%.ï¬tO0Žgékj¼ËVÞâØØdë¹¼óÝH1cwòKÛ5²bcE—®dbT^^^^^l±‚cHccckkkKKK.›ÿìø¥/dPÁw%…àÎÓUBBJŽm{3ÆDž#œi`¿%îVÉ>âA@&—+¹a·!ïî°¡¦q;t7þÿ¸%Âh-VVV†C-ÈOÉó]€ó—ed¯‚t•ÿ<°OÂCO²]þƒ—ìí_JÜne§úÓeª‹³Åc²=Oðä.~¶Þß"ÂP~ÄÓ½jSþBÇÒ‹ËZnÓðC—Þh`±+ç«\ô =Ë7:¼×ni·Ç2Mp>ûs“>íÚ%q׫Œ,çäÖ¿ã’i.ŸÁ]Ѳ×r®çp 3f­Çøï ùKXÌX®N»’·˜ÆÁüŠÿŒ©T³¹+ù:1Éò"ßÉz/òlìĘã<ÖGæÓÀ—æŠr›&lJš3bߨüô íµókg~sf”ŠJÛKK[J£(Êæ²I|O¼—òÃq~O‚Ëõ'á&¯ÄÃ>Ìç“Ä2P[[[IKÉÄÙ»«ºÌ}isiPÖ¡oûoÌ—bÚ ½’\fD½cžwÁUîºÀíÅü¼ÅOù4¯p»1‡–È呼ÍÃÉ<ͳÔÓ¹@c£{7xf„_¿YûFYªe¯n#¸Ð÷ª|Ñ-çq'b+s™À1b{§’IëNwŒ¯ÐØÀÙ<Ì <ÒâF®¥Š^åü ¨ÁÞÌΚÍ9¼Ì£ àYnb(38ŠË8”^¦°‰™›³Ž Õq/²ŽCSþ”ÖžvRäÑ8Ïhû„ï²W"TšO7Nì£(*i-)i-ÉteHtk²^.˜¦ä> ]SSÓ¿ÿQ£FÕ××TdÁÂYlš\Ô]TÚZZÚZZÒR’ÚšJw§ ô#’(æA¢¡¡¡££#ÕšZ;yí˜gÇ„¤lyCMJŸÄy=4v>„:†çŸxrñÔ1˜T…‹œ·lÙÒÚÚ( ÄÉ´ïÃ$ÛKKKƒdÀ¸Xg5QÛËwJ&sù¹¿àú'ÿM0a(zËA#€È{,¹Tq{{{ƒKg~òe_ò„$¥øx"¶R`ù˜úŸ[¾®qX9%8£–›Éë•••ûtØN€ì-lÈ^:˺74¾éq¼Î_MŸ¦›˜BoÊOøe¤‡%iãsîÈ@ö%Ë©ŒçWÖ~Þ5ÍÛ.øQÅm£3+z²nã›ñઇiÅ Ú9Љ±Di sÎgƒXÁ£”0€e±›ß ÊÙ=ùߥ8&Z5p$Ïqr€„°:m\ηYÏZ Å©,¡“¹ô'q~;ˆÎŒ»{}™?2 &ð ƒÓ~™ó-¦³•[Ù›ÇßC_L©èõ=Œ`x$=¸<¥†ž¨/q`ŸØQ÷ >Îh¾Î¦´¯qdäÑ?mp?§ˆ=³~»Á(¾Ê3üšû9-ö_¿‹‰J1)¾L'ƒR} €글ç™Àz^b&S¸/p+×° »RÅïâkÛÉψ؅Rn/QıTòë©g*¯²šiU¦6©¼‘s/³“ø)­tò#näEçišhb- ±þýô8s„÷¯e £ùFÆ®½Ne$­|OêC–Îàû)dz(RÌÈ>‡LØÀd¶ñÓøƒiŽd)Op\̺’íã<¦6ó 3c9¨Ã¸-îåÊ{`v/X¨°VoIïs3Ÿ;á/'l«ÛÖ¯³_h 勯†X #ò›BáÅV’=O¸ÂÂO,ܘÙX3¯&„’pœ¨7%’nIôIæùùÝ¡‚e~¿Nð ¶`ß>W…3 VUUU4VSSæU¡P(ìø·01qÚ5Ó Ž-¹VæD’u'3­ä[òE4R©ÔÖ­[ƒepñÝÝÝ[¶linnnkk ™2IömOz‰É;óeÈw )'±þˆÃÂÿ!¹hA—² ì+¸Vá)*8æü:µàÉÙ“Œ%ɸà[ò4wÞ ÌñЇ"7 â%ÿus˜!ög‚WøuÊÔ¨o*ÞH&í´Èóic²Þâ9Îä`~êÍSÒ¥_Íœ×ãÚ æÛc³G®à¦ÑË"†² +ÇB¦ñ^LL~“ ¾Ä[TðIöã:žæ(úó×r ûð2yŒI4’åWü€,sØÂt6ÅŽåüŠãéG)_áŘ“tßëõ>ÄÚBYnçÓ b|,Þ:™Ì¥ê沂Ù)Y>ž¶>òÓÈÞ‘_eÀÂ8†fYH}ÆeY]|Šþœ¸·9µüŠÁ þsT÷g ?e¿b ý©¢3oˆRÉ:ƲË©âÚœEL§”ñÜÍdîd:GÐË\¶q í<ÁSyÁ>´q4[YÏ" ’ã1:gId¯p$“Èzx©Ñ2Žem|ŠV^à§ÜOšzNá†`Þ3ºÐM9Óy‹ò'8…öø"oíõ—0ˆ!CÓ¸‡ 4ÒA6¥"ÒFmñéœÅïã&søàlŠy™}˜O'ëYÎãzbaŽmñ¤ªœjÞa8xõÿ“ì… Ê¶W7Èd2™lfìâ±³?1û؇Ž´yPÉ >k×€s 2í%%%I&R^ÜŸ=æÏcVžºrÕQ«Æ½0nÍk†?7¼ %Ó‚$i}nV¿Àp(šœp (JUUUUUU H$ïB* Ëð$<%ÂÎÛòVÅÂw…:)ièk :4¨øtvv&Tb±-S2#ü·¶–––L&ÓÖÖª¢tCVÞþ | "ß3ÿtòW!» šípõòÓüN’\B~H®gA³1y½@i)\¢ä•x)8DDãÿ{âÌ?ýp´MË*²Ÿé™^gNSUË‹œÄûàz²LãN¾“²!í̬YÔñDÎ ^ŽôgïÈ~¨V™3©Í‹œÍ¨hÎÔÖŽ—£_?ëŠû*ÆN,š³¨Ù<2™¿dì™óbä혤yv¬…z*hˆ¡ÞéÇjNe籒żƧ9†7™Â.,â,º¹6e×´[³zr¾[äW½–³˜YœÉ…tsUÆWsž‰Üó0_ã'œ@†-Ü–òµ´=³–ä,¢œ+hç~š)I;.eJÖ³ü6ëpÚ#ã©áoqswFdlëïÂ7’Ž´ðkÎO›È#9Gs¿g$'q9ãø=tp%Wò †ru,´:<_Ü 1¬c?¤’_ói>΃d¨e*ˆÑð¸’M,ædfòep oð¾ËdÞä50–¿ç¬‹´² ~`¶±‚Ï0…XÆzŽä™øÄgr=õ?B˜Ã€87„2(ËrVó02ÜÂylŒy`8ž¿Óç˜%L¢"2(r'»Ä®fØŸ'YÃÙÜKTÏ ñ7Îäþa(&u}–×x™+øcìÍøcYÇ*6 þQ$ÛÓ1õøÐ}R©T:›>tö¡vÝP×R–íÅÅÅÛIòÃMiiiˆãÉ (­~Ï£½îØuïöþú½×O¸Bøa'؇ýJF¢eþoEëý‰ zWWׯƒ¢ë1uuuWB¨Z .]¢òžÃÛB(ßžŒü!Ã5Ol¢pvè ø„Á]€õÏß[HxGÔ"ÂRàÿh´ø/¯äÿR˜?>,À‚ŒbX&É—ù£¬ð©¤ã @I;t‡ ¼¤­—3Iã°hmØ|Ûðœ|XÂKp­7hûÙU;·°Îº§­ÄÓLã€Øè:†LZÊŒ´å9 8„=S^)ò½œ"?¤¡W}¯ßFã i™´]sÿâ…ÏøÝ“½_<£§3Y .a¿ÈÚ¶ŒK¸ŽÜÇ« âòXÝ œÿàíbWäLç!®b ß§œE¬`G2—Ãb¤Ü#‘õ,a·Œ£s.¥’y—ÿ¢ÚÈ“¼ËE¼Æ®Lå¯Ïbe*²-ÒËö,­;­,RÏ©¼©üŒQ¬aO¾Ï}l –Kx“8 ²¤Ëa‘ciŠ\ÅtÞŒ¬¤xÓ©äþÈ Ö±;çV. ƒ»¨csyŸ.öçü4Å<Ξ,a_îá=ÎæZÖ³;—q5_`¾Î[ôpM¼ÌÜb7æ<”gy„ÏÑÀZ.d%'ðgV²‘QÌà!s*§ó­œÎ#¼G3KhdUÜ] “Î Nàu6ò%Þao†2ñlähöánf3œ uÁ»|µ¼k€Í%ÃaÌãuzh‰uçÑ "ŸFkÜgÞ̱¼E–¥œËf¾F Ÿçqºèϱ~U˜Ò}*®®Ng+kû$•qkø&{å‹0Í]47S”ÉÈ”)Ø<°Ÿ~¥¥¥555!]%ŠæáÇÆKùt׈ª±ðJ2-ÏD™~«ûm™´¥nEݠŃJ‹ûÀÇ“ƒ|vNd .+ß)lÉà*D– '´½ÀRöA8ø„Z>fH ì0äB­¾¾¾¬¬,ÙÛö´¢¢¢°Ï$œ¨ž%Ř‹ŠŠÆŽ;lذ .á ä—•!ñ$ ôI§nû-×HXYɹ'fQb£¦|Ùªë…þ¤ì UWqqq{{{26 k”@¿K’A8ŒD±"_d}çR#ÆKÒU2ÒKjñ=øüf‹+ßZ,áVç£oBº OcЛϟcå ü'’c‰S¸>½½½eee;Ÿ]m`EÆé9/E~Ì$^åeåö#G7C"WöZdô#Ÿá…ÈŽëWY:‡˜ÈèœrŠy†Ósîç5öÓ0×ɧED–PL”ò«´ŸfÅ·ÙƒNÎàXZIq(#XÃ¥)ßI{ ë0Æ÷¸‚mŒ$Mo‘ ½†ð7s+©” ¼içK\Ë^le¿7SÊëœÈ üÅ)ß|…g(bCù_ån¢)ç|^£”›Ÿ¶OÖïR.ˆlä+üŽ‘ ‰å©9“cØ×Ø‹66riÖïRJ£>E«{¹œ;x‘½y‹KbMôçø1ç2ƒÝù>ÛRFóVäÒ±8EÄݱ·dŠWTÛ§³[Ê#%öëRM-ϲ–·Hó—§4EÎŒ‡gí=þÎD³„ wp07ÐÂk¤9‡{iáˆØý}×SÍ@öç1ÇÅǼ͉ÌbÍô‹%Höe7ÅémÃø%Ÿç7¤ØÆµi)ƒ³¾Ï‹lâK àêù ‡RÊõŒ%CSüÁYLá®g±>»ÐÜÎqó^f±‰»Ù˜rK$Ó¾B7rpåüˆ‹Ùʹ,àN†Є»ûu¿}ÂÛ»¯Ü}øÃC§N[æÕ™ÎÝ?NïáöN§LgZl×ï'M3÷ÜóºçÞ{~÷œó;¿ŸÇ#& „)XÙkË-P&§$&/òF“N¢%eohuÒ8ž˜ÒîÇLvÇÕa³ÙlFe¿x›¯ý˜6öЇAn×§»­xbü~zzz¬®ü80n™úŒû´b]$2”îZäJ FGVV–ÕjMOO—R°»»[ø{^ÜÆmüqWõb[¡xdMÀÝÀÝzàÀM@'ð.p pÿ\ÀÃXv¾ÿo`#ЇÆLœÛ|[w+6„ò¥Àvà#ýC{ð*Ð×àA;p°èŽê`ø°Hz÷4lA°¸ø%ðWÝä€‡ à~ \æ*X¨îÆíÜ@p`þ´Ÿ·_(xIA±†Ð”à^à§À{À+z |¬æè™.߉ ^Å«À: €ÿë €;€@=°(¼º•z±2ߪà-Y¾ÐwýX,v—Ÿ>^Tð`æ«€ ò¨†?`‡¾ñÀ@!p¸£zƒâW)ø¡‘Î¥Ài`#0¸ø¸S…sç€[p+P¬Öï‘ø Ð |ܯ·ÆRà[ú}¸øèú?²tûèÂVÅuÀ«À‡À*`!ð–>Sw‡G^c%°NßwønïiÀ`P@¯êE`‡óà!ÀQ/YbÅñ‚¾ÿz¾Lðgà×ÀM@ðc`p(þ¦âG#8< Ç|Øh¸L+P¼bPÊk!è3cÞÞì!K›Å5èã1¢öREǪiZ^^ÞW_}eìï>»í3MÓ¢ZÀ¼¾yi¾4)®ŒCiôZ:€ýšq-$^GcŒ#ô¡ëLÆÞJúÊK\Ê™=cÝL¾eåÀ(‰±¢’Æ* ù´dÉñ….f™‚Á ©S–PÒâ¢éºä Ãè2Xš7mD3úÑ0«L~È&˜SµÙl‡#¹Eµ‰÷eKñ"ç]…;Ñ2¦¹81œà>q‘ÄdmY8#µÛí999r=L¸Î ‡ÃRwÑ8 (‡Åãhü—mxbåýuõzX{ÿðÒÇ BH²?ŽM›àìÙ³{ÿ²7;œ=->0…*ó‚ Dÿ%¼È ø|¾H$‡}>ŸXV1õ_B\ù|>¹Æ#‰œØ‰íV„…'ALÄ™²#-1º RÁAôhYYY¢iEWÊ£"µèӥ˜ü.6ÊK1¿'æân¼ñF±Ê ûûû#‘H¿it%ýÒšæÓ†††¤%uc7·hÑ"»Ýît:½^¯ßïïëë“m(§³L ,r·¯\¼u”š ²òñ¶"Å:‘JÛ&5Yœ˜ƒÃá’—)YZnÒB Äå’¤hgÓÚ§I2‰ÛjZ;”âÙ¨Ô#Ä•4)G±r<'’ÈÊ+`ú ‘ÃA¹‘Üår¹Ýîââb—ËUXX(>†‡‡ÛÚÚÄÃ/Ý’?¡åÓ¼yóvì®Ú²1àlki3º:q)øL!„àæ›õAå’%/æ¼(7¾Èw[vÒS¬Wˆq¿‹MޝL³s± ñ}mœáWû†ÝÁ¦!‚qI#vgŒ)·xßò¦›”µ"¹èë¥Ç Ód”i“²´l»r#ÍÊîÏ´]רa 1ÓiMW7 \¬Î…ŒlTcŠ…+1kjÝt½F5?™‰©L9˜L›âÄ>øà¾}ûŠŠŠ&ˆÓÜÚ![Š–ÞyÃM·\öܪeé­‡ƒ!„¤BaaáâÅ‹g{é‹eáÂ…ÅÅÅ“J5þüÅ‹[­Ö«Æ,((X´h‘Íf› N—g°é?_FÂ!o÷—V>X„2µ”——ÿ”îp8î»ï¾É¦J<Édg,©H!d@qE!„âŠB¡¸"„o&O>ù¤ñ°¢¢¢¢¢âí·ß‡çÎ!---"¤®®N„ƒÁ‹Þ»woEE…±?þxEEÅÄáÀÀ€(ëý÷ß!MMM"¤½½Ý˜ÕU¡ª!„Ì&ªªªÞyç@ PSS#BÊËË÷ïßàðáÃÙÙÙwÝu×ÓO?-ÎîÞ½ûàÁƒ­­­ ÕÕÕB°:u*éÒkkksss«««?ÿüó;wîÛ·oÛ¶m>úèõ×____ÿæ›oVVVnذáµ×^P]]———››[SS#Jߺuë| %neee~~~¼„Ë—/§¸"„Y,®ªªªJJJdHGG‡P7×4ÍçóišÖ××'B¼^ïÈÈH ˆD""äâÅ‹©”þØc‰---º»» ŠŠŠìvûÀÀ€K—.‰²B¡P(ŠD"CCC"¤»»[fUSSF?ùä“p8œžž›ÐT4' !„LŽ“'O677¿ð )æ‡_ýõžžžeË–]52Å!„IpôèÑóçÏ?ÿüó©ge·Ûßxãââb9CHqE!d 8~ü¸×ëݾ}{êY=ûì³]]]‰ÇçÚ!„Ìnrrrzzz(Šb·ÛEÉÈÈ!N§SUU›Íf±XDHvvv*eµµµåææúý~¿ßïp8233Ýn·×ëíéé‰D"b *++K”eµZ­V«Åbq8"$33SfÕÞÞÞÙÙ©ªj¼„W„2ëY±b…üÝÐÐ LmݺuíÚµjjj6mÚ`Ïž=sæÌ¹çž{z{{EÈéÓ§S)·°°ðСC'NœPVVöÌ3Ï9rdË–-ååå»víPWW·~ýz»ví*--ðÔSO‰Ò;&³J$¡¥lÃ+飼׳ÀÚ»sÛZd'„2ChníØ²1àlkiäÚ!„YÅ!„Š+B!d*UµPT‹?jûç….§sB!d&páR¿¢Zƈ+kšÍÎ9|êïlB!3EµXÓlWÄUx88ØßÍv!„2‰„‚”†ÆO·§vxx˜-B!dfòûßüüí ÝqcèIEND®B`‚saods9/ds9/doc/user/scripts/index.html000644 000765 000000 00000030271 11555611701 020277 0ustar00joyewheel000000 000000 Scripting ds9 - DS9

Scripting ds9

Return to the DS9 Users Manual


Synopsis

Scripting with ds9 can be done in several ways: by invoking the GUI with a number of command-line options or via the XPA messaging system. A third option, Simple Application Messaging Protocol (SAMP), is introduced but not included in the examples.

To illustrate how to script ds9, we repeat the contours example with both methods,. The examples use Chandra data from an observation of the galaxy cluster Abell 2142 (ObsID 5005).

If you encounter any problems, please email saord @ cfa.harvard.edu.


Contents


Command-line Scripting

The ds9 Reference Manual has an extensive list of the available command line options. The most important thing to note is that the commands are executed one at a time in the order they are listed.

To create contours on a data image:

unix% ds9 acisf05005N002_evt2.fits -bin about 3800 3800 -bin factor 2 \
    -scale log -cmap b \ 
    -contour yes -contour limits 1 100 \
    -contour smooth 5 -contour nlevels 6 -contour save ds9.con &

This command line produces Figure 1.

The options direct ds9 to:

  1. -bin about 3800 3800 : center the image display at (x,y)=(3800,3800)
  2. -bin factor 2 : bin the data by a factor of 2
  3. -scale log : set the display to log scale
  4. -cmap b : use the "b" colormap
  5. -contour yes : display contours
  6. -contour limits 1 100 : set the minimum and maximum contour limits
  7. -contour smooth 5 : set contour smoothness to "5"
  8. -contour nlevels 6 : create six contour levels
  9. -contour save ds9.com : save the contours to the file "ds9.con"

If you wish to add options to the command line after it has been processed, the whole command must be run again from the beginning. It is, however, possible to interact with the ds9 GUI that has been created. For instance, instead of including the "-bin about 3800 3800" modifier, the image could be recentered in ds9 interactively.

The following command line builds on the previous example by retrieving a DSS image and copying the contours to the new frame:

unix% ds9 acisf05005N002_evt2.fits -bin about 3800 3800 -bin factor 2 \
    -scale log -cmap b \ 
    -contour yes -contour limits 1 100 \
    -contour smooth 5 -contour nlevels 6 -contour copy \
    -dsssao A2142 -cmap grey -contour paste \
    -frame first -match frames wcs &

The resulting image is shown in Figure 2.

The options which have been added from the previous command line are:

  1. -contour copy : copy the x-ray contours
  2. -dsssao A2142 : retrieve a DSS image of A2142 from the DSS-SAO server (there are also a "dsseso" and "dssstsci" options)
  3. -cmap grey : use the "grey" colormap in the DSS frame
  4. -contour paste : paste the x-ray contours onto the optical data
  5. -frame first : select the first ds9 frame
  6. -match frames wcs : match the WCS of the DSS frame to the current (x-ray) frame

At this point, we can end the ds9 session or modify the display interactively via the ds9 GUI.


XPA Scripting

X Public Access (XPA) is a messaging system which provides communication between Unix programs through a set of access points. The two most common actions are retrieving information (xpaget) and issuing commands (xpaset). For more information, see the XPA Messaging System page and the XPA Access Points section of the ds9 manual.

XPA commands may be issued one at a time from the terminal or collected in a script to run in batch mode. Unlike the command line syntax, there is no predetermined stopping point - commands may be sent to ds9 as long as the GUI is open.

First, open ds9 with the data file:

unix% ds9 acisf05005N002_evt2.fits &

The xpans name server is used to manage the names and ports of XPA access points. Use "xpaget xpans" to see the list of available access points:

unix% xpaget xpans
DS9 ds9 gs /tmp/.xpa/DS9_ds9.22972 username

Now that ds9 is running and linked to an XPA server, we can use xpaset to modify the display and add contours. (Refer to the XPA documentation for details on xpaset syntax.)

unix% xpaset -p ds9 bin about 3800 3800 
unix% xpaset -p ds9 bin factor 2 
unix% xpaset -p ds9 scale log 
unix% xpaset -p ds9 cmap b  
unix% xpaset -p ds9 contour yes 
unix% xpaset -p ds9 contour limits 1 100 
unix% xpaset -p ds9 contour smooth 5 
unix% xpaset -p ds9 contour nlevels 6 
unix% xpaset -p ds9 contour save xpa.con

This command line produces Figure 3.

The options direct ds9 to:

  1. xpaset -p bin about 3800 3800 : center the image display at (x,y)=(3800,3800)
  2. xpaset -p bin factor 2 : bin the data by a factor of 2
  3. xpaset -p scale log : set the display to log scale
  4. xpaset -p cmap b : use the "b" colormap
  5. xpaset -p contour yes : display contours
  6. xpaset -p contour limits 1 100 : set the minimum and maximum contour limits
  7. xpaset -p contour smooth 5 : set contour smoothness to "5"
  8. xpaset -p contour nlevels 6 : create six contour levels
  9. xpaset -p contour save xpa.com : save the contours to the file "xpa.con"

As long as the ds9 GUI remains open, we can continue to modify the display. Here we build on the previous example by retrieving a DSS image and copying the contours to the new frame:

unix% xpaset -p ds9 contour copy 
unix% xpaset -p ds9 dsssao A2142 
unix% xpaset -p ds9 cmap grey
unix% xpaset -p ds9 contour paste 
unix% xpaset -p ds9 frame first
unix% xpaset -p ds9 match frames wcs

The resulting image is shown in Figure 2.

The options which have been added from the previous command line are:

  1. xpaset -p contour copy : copy the x-ray contours
  2. xpaset -p dsssao A2142 : retrieve a DSS image of A2142 from the DSS-SAO server (there are also a "dsseso" and "dssstsci" options)
  3. xpaset -p cmap grey : use the "grey" colormap in the DSS frame
  4. xpaset -p contour paste : paste the x-ray contours onto the optical data
  5. xpaset -p frame first : select the first ds9 frame
  6. xpaset -p match frames wcs : match the WCS of the DSS frame to the current (x-ray) frame

At this point, we can end the ds9 session, issue further XPA commands, or modify the display interactively via the ds9 GUI.


SAMP: Simple Application Messaging Protocol

A third method of scripting ds9 is via SAMP, a messaging protocol that enables astronomy software tools to interoperate and communicate. SAMP is also used by such applications as TOPCAT, an interactive graphical viewer and editor for tabular data and Aladin, an interactive software sky atlas.

Information on the ds9 SAMP implementation is available in the ds9 Reference Manual.


History

21 Sep 2009 Original version

Return to the DS9 Users Manual

saods9/ds9/doc/user/scripts/thread.xml000644 000765 000000 00000024151 11343564747 020307 0ustar00joyewheel000000 000000 scripts Sept 2009 <long>Scripting ds9</long> Original version

Scripting with ds9 can be done in several ways: by invoking the GUI with a number of command-line options or via the XPA messaging system. A third option, Simple Application Messaging Protocol (SAMP), is introduced but not included in the examples.

To illustrate how to script ds9, we repeat the contours example with both methods,. The examples use Chandra data from an observation of the galaxy cluster Abell 2142 (ObsID 5005).

Command-line Scripting

The ds9 Reference Manual has an extensive list of the available command line options. The most important thing to note is that the commands are executed one at a time in the order they are listed.

To create contours on a data image:

unix% ds9 acisf05005N002_evt2.fits -bin about 3800 3800 -bin factor 2 \ -scale log -cmap b \ -contour yes -contour limits 1 100 \ -contour smooth 5 -contour nlevels 6 -contour save ds9.con &

This command line produces .

Command line: x-ray data with contours Diffuse emission with contours overlaid; a point source is visible in the upper left corner of the image. contour.png

The options direct ds9 to:

  • -bin about 3800 3800 : center the image display at (x,y)=(3800,3800)
  • -bin factor 2 : bin the data by a factor of 2
  • -scale log : set the display to log scale
  • -cmap b : use the "b" colormap
  • -contour yes : display contours
  • -contour limits 1 100 : set the minimum and maximum contour limits
  • -contour smooth 5 : set contour smoothness to "5"
  • -contour nlevels 6 : create six contour levels
  • -contour save ds9.com : save the contours to the file "ds9.con"
  • If you wish to add options to the command line after it has been processed, the whole command must be run again from the beginning. It is, however, possible to interact with the ds9 GUI that has been created. For instance, instead of including the "-bin about 3800 3800" modifier, the image could be recentered in ds9 interactively.

    The following command line builds on the previous example by retrieving a DSS image and copying the contours to the new frame:

    unix% ds9 acisf05005N002_evt2.fits -bin about 3800 3800 -bin factor 2 \ -scale log -cmap b \ -contour yes -contour limits 1 100 \ -contour smooth 5 -contour nlevels 6 -contour copy \ -dsssao A2142 -cmap grey -contour paste \ -frame first -match frames wcs &

    The resulting image is shown in .

    Command line: x-ray and optical data with contours The x-ray data is in the left frame and the optical data is in the right frame; both have the x-ray contours displayed on the data. contourdss.png

    The options which have been added from the previous command line are:

  • -contour copy : copy the x-ray contours
  • -dsssao A2142 : retrieve a DSS image of A2142 from the DSS-SAO server (there are also a "dsseso" and "dssstsci" options)
  • -cmap grey : use the "grey" colormap in the DSS frame
  • -contour paste : paste the x-ray contours onto the optical data
  • -frame first : select the first ds9 frame
  • -match frames wcs : match the WCS of the DSS frame to the current (x-ray) frame
  • At this point, we can end the ds9 session or modify the display interactively via the ds9 GUI.

    XPA Scripting

    X Public Access (XPA) is a messaging system which provides communication between Unix programs through a set of access points. The two most common actions are retrieving information (xpaget) and issuing commands (xpaset). For more information, see the XPA Messaging System page and the XPA Access Points section of the ds9 manual.

    XPA commands may be issued one at a time from the terminal or collected in a script to run in batch mode. Unlike the command line syntax, there is no predetermined stopping point - commands may be sent to ds9 as long as the GUI is open.

    First, open ds9 with the data file:

    unix% ds9 acisf05005N002_evt2.fits &

    The xpans name server is used to manage the names and ports of XPA access points. Use "xpaget xpans" to see the list of available access points:

    unix% xpaget xpans DS9 ds9 gs /tmp/.xpa/DS9_ds9.22972 username

    Now that ds9 is running and linked to an XPA server, we can use xpaset to modify the display and add contours. (Refer to the XPA documentation for details on xpaset syntax.)

    unix% xpaset -p ds9 bin about 3800 3800 unix% xpaset -p ds9 bin factor 2 unix% xpaset -p ds9 scale log unix% xpaset -p ds9 cmap b unix% xpaset -p ds9 contour yes unix% xpaset -p ds9 contour limits 1 100 unix% xpaset -p ds9 contour smooth 5 unix% xpaset -p ds9 contour nlevels 6 unix% xpaset -p ds9 contour save xpa.con

    This command line produces .

    XPA: x-ray data with contours Diffuse emission with contours overlaid; a point source is visible in the upper left corner of the image. contour.png

    The options direct ds9 to:

  • xpaset -p bin about 3800 3800 : center the image display at (x,y)=(3800,3800)
  • xpaset -p bin factor 2 : bin the data by a factor of 2
  • xpaset -p scale log : set the display to log scale
  • xpaset -p cmap b : use the "b" colormap
  • xpaset -p contour yes : display contours
  • xpaset -p contour limits 1 100 : set the minimum and maximum contour limits
  • xpaset -p contour smooth 5 : set contour smoothness to "5"
  • xpaset -p contour nlevels 6 : create six contour levels
  • xpaset -p contour save xpa.com : save the contours to the file "xpa.con"
  • As long as the ds9 GUI remains open, we can continue to modify the display. Here we build on the previous example by retrieving a DSS image and copying the contours to the new frame:

    unix% xpaset -p ds9 contour copy unix% xpaset -p ds9 dsssao A2142 unix% xpaset -p ds9 cmap grey unix% xpaset -p ds9 contour paste unix% xpaset -p ds9 frame first unix% xpaset -p ds9 match frames wcs

    The resulting image is shown in .

    XPA: x-ray and optical data with contours The x-ray data is in the left frame and the optical data is in the right frame; both have the x-ray contours displayed on the data. contourdss.png

    The options which have been added from the previous command line are:

  • xpaset -p contour copy : copy the x-ray contours
  • xpaset -p dsssao A2142 : retrieve a DSS image of A2142 from the DSS-SAO server (there are also a "dsseso" and "dssstsci" options)
  • xpaset -p cmap grey : use the "grey" colormap in the DSS frame
  • xpaset -p contour paste : paste the x-ray contours onto the optical data
  • xpaset -p frame first : select the first ds9 frame
  • xpaset -p match frames wcs : match the WCS of the DSS frame to the current (x-ray) frame
  • At this point, we can end the ds9 session, issue further XPA commands, or modify the display interactively via the ds9 GUI.

    SAMP: Simple Application Messaging Protocol

    A third method of scripting ds9 is via SAMP, a messaging protocol that enables astronomy software tools to interoperate and communicate. SAMP is also used by such applications as TOPCAT, an interactive graphical viewer and editor for tabular data and Aladin, an interactive software sky atlas.

    Information on the ds9 SAMP implementation is available in the ds9 Reference Manual.

    saods9/ds9/doc/user/rgb/color.png000644 000765 000000 00000745623 11332353405 017224 0ustar00joyewheel000000 000000 ‰PNG  IHDR N²]{bKGDÿÿÿ ½§“ pHYs  šœtIMEÚ¢õ–S IDATxÚì½y”dY}ßù}Û}û‹=·ŠÊÊÚºª»ªz± $hÔh0<$dù0òÑX3š#Éc#k³gŽåžÑ£Åò4X²ŽÐXB€Y`0‚®î®îZ²ª¢rx±¾å¾mþˆÌ¬ÈȈÈÈÌÈ¥ªîçÔY/Þ»ËïÞûûÝßïÞ÷.—$ €ÇÞù£`0 Æ]ϳŸû±mÞûþ1‰0 ã±wþ賟û÷èãï{ïû?´X®3‰0 ãæµK×/<#¶ÿã{.“ƒÁ`0Ú0ÛÀ`0£§Q«ø­mÄcdÝ2SÙƒ}¶‡m ¾×yuþůMq©T* ëu’¾·g¢Ž½ Õ_½fÇú>Ö cm¶íø­ú¹ûîþ‘ /¾@V´ƒz¶·mÇu^-œ~Ì›îƒï} ù©O_®-ké±®'ß=¦µnÚ¿ç±®Ç ã®¶ NãܹsÛzäܹs^|QVõƒz¶·mà6*wIVœôé?úÄŸ¼ñõ¯»÷ì=W¿ð¥HO‰D鼇/¿RK›Î)Ö cŽã¸íϘ¹öÿÙ~¶ïúAÏŒÏÍ®<ó̳…BþôÌ‘ç^ùúøù·«Ï×®?ß„õô¥Jñ¾Y?hó#?úî7?ð…§_úØ_}IƒÁ¸»m¿#ͯý;€g‡òÚŽŸõù/Õë—yžO þòåoz@cùú‰ ¾öÝËÓüÀ–å˜Ê§~ü]¯;==&‰BµáÞX¬üû¿ü;»î¬å‹ßþ…¿ŸOþ·ßùÿæ–«ë>|vúßx~z2+ðüB¹þ¥o^üÂÓ/% üßþ‘Œ¥ýî'¿üÕï\>D½§^©—RùÉž÷›È¾ï^{úh!N’.Í}ü3__ƒÁ¸“Œ6iÛ!'ð]ÏþÖ?zO¿Ûéÿù‹ažÝp[Ï‹ü†~ “çßt㙿Tàˆãš­YZf<å—^¼¾¡«ä¯¿òMÉ;ßüèXZû•ßûK@`C‰Á¸³LÃc;ØN\èÕï|ýž‡^¿å³¿õÞóËÿö/ÛÿæÏþ½~ÏSj#ˆòøýo_þÖ_Ixž+_þ&_ "W;öQ-‹žKé…ŒáÓà'>ü/Ž%ÙÒåV«¥eˆ¢ àžpiöæ©™#ßÿ†×üéž6sS†*ÿÈÛðñ?ÿüÇþüó"Q^ÿš{?òs?öý¯;ÿ™/=»ìÞ*jÇÿáW?à©¿úú»ß|¿B¤¿øòóWçÊ?ý÷^ŸKéO_˜ýwñwqœøÇ?òÖSGÇLM¦at¹´üGýìÍ¥*€ÓÓc?ýî×2Æó—æêM÷mÞó7Ï\üøgž0–1ß÷ÎGï—DáÕËôÙgJKÕ® ž96öSï~}>½úx§ö£ï|ì 75Åõƒ›ËÕßùÓ/Ý3=®«äÆüòÿù{ÿQ5R¯9wzzªp2¯\.‡Øb>ƒÁbJ½ãB?üióÍöû¿Õòéùì¯|ôS¿ñ?½»mÖÿ^O°ëÙmÄ”ÚhVVŸyÌ¿þŒãG‰ h<]æ'ŠãÓÃTµéø "ýú?ù©Wçk¯^_º8» )AN…ÇÎðÑO|êWþ'Æó™SGr‹nröØ‘Ä$Iþ쯿ld FºðÊ‚;¿\,¤ï?9õÙg/oV¤ï}Ëù+7—¾÷øû¤éø¯\[Șê›<ùõo¾ðÝë5p\>c|ùÙç—+Õ‡ÎøÜéŸûá7}øÉOZ–ù ï{›¡ÊÏ_¼Úª7ÞúØýZµ•êÊÜä‘c¿ü“ïÌZÚ—¿q¡\±ßóö7üâû¿ÿÿ¯OúÑ­¼UYúùÿñmº*¿ðʬ×j¾õ‘[Ûî?5õÄî»6·üÉÏ~Y×ä‡î;ÕªÌûãi¹´YœÏOO™:€SGÇ_˜}Q73Ì:0w–ßÀïè)®ç³g~S?s2øÙú»Ÿþõý €.ÃЙàöÖ¢;‰JœÀOȉ‚A‘¢a«DÉïþÙW~ü‰G{àÌcÀb¹öäŸü×ù•:8î¡3E]!Õzó;/]~î¥koyäì÷}σO}úYSSx>m9þxa†çEAª-o²€”¥{NcsF¿ý‡öµo¿üÿþ«'òŸýÒÓðŸ>óáŸù‘w¾ùá£cÖ×_˜5Rù_ûÃÏݸü‚a˜ûìËûÍ“ScYxå9k¨òŠ]û'¿ñQ‘(†®?|îdÛyèžbÖÒfK‹OþáŸÕ˜>2ùȹ“÷O§ž½dó¢´;]ÔU¹\­ÿ¯ÿ[A’ëÃ?ùš{O´’% @£Ùº¹TY¬:Ÿøì×|סüµW¯/œžžøØÿñ¿h¯¨ŠøÌÌzƒÁ8¬ÆÏíà)Žã{?Û/µõëýŸý§¿ÿ™_ÿ‡ïÚ`}s|{Ú†/(Ôç/…•+:f‡Rêû>èJcåˆY8:Le¿}iþ‹ÿì÷&Sò¹ÓÓÿý¼ej<÷ÄcÇÿSψD}ÃýÇ|í¹9^øæ+7ßòÈÙï}íƒðÉ/6\€"]W9ç—1uµF+Ž"$ݹ\¾>—ÊOzaàÕÙ’j¦C^ I"õ]Aä~â_ûð™ÒUyý"pº"(Í/ƒ²“Çk·‚BÙ”`¦8þçýÕõ‹ùtã›—¬üD;”257æ–À󹩙ùŠóšµ;Ÿ¿\úæ‹W¾wæü=3–*õõ±Ï,Øîo<õ¹û&´©±ÌüRù œ{ã#ç«õFÇ1½#Â`ÜQ~Ã(×ú¥Öêûì¯ýÌ‘¨ÿý>Û3ß>~C£ä5ìÆå¯;‘xâ‘w¸õrå»_à¨^ü²l¾GÖÌÁU•Dáü‰ÉçÙ­æW.Ìå /ÿè»Þh芽tóØé{<}Ào}ío}mû~]S^sÏ‘—¯ÎÑ $’øCïxã¾uƒ—ùNMMäLßxþ¢ ôX¹¢H”å¶PÂ(’d…_['O’øóC'ç–*¿õÑO´÷_ÿò‡xžç8®Rk82Q ŠŽŸžÈ¯'h×]×ççãÿyýb¥ÚˆÂ Ib^Ô[€B6-J2~øÃï|óë#ð§ŠyŸÿÊ7^º|=7u¼whžã;Vt7˜Áv!£("yë;ãùÕ2ûâõFË+dSÿúÊ qïññõGž»x£RkNOÿàÛ^³ÜÌXúƒ÷LÿÁ'¿Øœ]D²šà WZ®d"ÿs?öƒ”“_sOqýñó'§Þóæ^ºRr=ZœP«7ëöâoþ/¬6œ–ë?zï´®Ê_yö»/_¾ž›:Îï¨'1ŒÃj6¬ ÿêO?ÞïÎþ‡ŸßøTïw†ðz<»žo;”ôÏÿðóí+ÿâ¼ss¾ýlCŒÝÒ·ó&Y²^c­íÖϽgÙ©L›$II’ܸöÔñ‡ˆñ§ÿî©Ikzr\&R¹ZÿÛ¿ûÖŸ|ꋊ•{ÃÇ|êo¿þÿé³íOyÜϱùá¾öÁ³âøôß|ãÒ¥w¿õ‘SǦ¿>·ô™/=ýçýÕHI²Š~ë¶\Ï?ñwß¹r¦˜yì܉üÁ÷~ú+ßñü@‘%®OÿÍ'þËOþwœžüÆ ¯~á«ß~ç›^Å1†¿ñÔç~èMg½ÿô[Ån´^º|ãÒ¥Kœd ¢Ô—ë‡ÿæ?þ—Ÿxâ±ÇßôÈ…Ë7¾úí‹o~øl;ÇjÃå9¼ã{Îi i8Þg¿üÿüùÿFŒÌ’]ììQ]UÊÕÆ'>õÅ}ò¯Í’d•DŽÅ”Œ;È8 ù%¡ OñÜ÷|_§»±ùÙö|¿oFŸ]7 í\þù¿ÿ¯þÔ;zçÛ•pûü†«¥¥®œÅKÇ”Úw®7¦ÎogfI‡¥g9;EQ­^¿XÓõ±™5ãhñÚÅ(ÂÐOâ„ÕHÙ‘”Åë©ç詜™k?ç»­êâ Üø‰û8 Y[ñ[õÀ÷$¢HT+£[YA$DV®½ølGé”™›¼ñò7ŽÞ£[éÒ+ß ?=V´rå›WZõŠfe³ÓQ”çg©çð¼ Y™Vµœ$q¾x2—›+]uë•0 ~ûW~öÁ³Ç?úÇŸúÌW¿›˜%R]*¹­Fà9q ‚(ÊJ*?¥êf;¦ÔX•篹 ; YÑ8Žóœf;Çz+ó³Q@“8æyAÖ +?Eduùæeßm&Q,ˆ‚¢§ÍLA‘U6šŒ;†Úʹs>QúÂ×þ¦ßÍç_ÿöU;qá¥T~b/ž]¿­çÅö³ë¿ÚK¥[ç7t™Ú(ÓZ¯\¯Œß÷Vð| NâÂy‡VÏž:Þh4’«×¯´jrÿÐx^Lã8äÀqœÐžÏ‹’,ÅÊOò¼À ¢(É’¬ ²ÆóQ4 Q4K%_³8Žç¾í ¢D+Eå8—+*ºÕ®Ejìˆ(Hœ 0³ª•%àÍLç€C[­+º%Jà~ü‰G9<2{cáÔ±‰ÏÎ4÷oÿî9QÒŽã…TáQk ž8ŽKíÄoùqBºp„h†(HÏ'IbF¡ Jˆjd Gx^äÖ /ˆ’HH*7Ç‘ ˆíD$BD ƒq‡¹ Ý3ñûßðŽažê¹ž<òg».~÷mÃÍ•ë[™~T”äÍé*ºõBÙ)­¼ày^ÐFà(æ#ý‹ Íìm9¬ìx×IVÒ…©õÿE#›¾Û&3vdýïìÄ­—-R¹[ÖO”Hç#F&¿9¹•úÛšyÝ}Ç\Ÿ>ûÂ¥ßû㿨6Zùâ$ÇóÇ ¢d¤óƒ›D’•”¬ôüÉÜTAz¯O¥3Œ»3¦´Ù¤س=cJ׿+wm#.]¿ØªWã(äy^”U+;&ɪb¤y¶À`0võ·Yë ï æÂ…—T#Eí ž]¿RžŸ½Sº›B­Ü¤¢§xQl¯Ô󂨨ϳ]C c‡´C¸pá¥áQTû©ƒz¶‹­ß}»ãQÍ´j¦Yof0£4š!kÆíõlÛÐöœºÍZ”Á`0îN4+³Éoœºýñ|€I‡Á`0îN>𑯛Ug0 ž|òÉÎÿŠ›ï¨V«LL ƒq÷ðÔSOu]a~ƒÁ`0ÀlƒÁ`0˜m`0 ³ ƒÁ`¶Á`0Ì60 ƒÙƒÁ`0ÛÀ`0ŒFÜî™L¦çuÛ¶Û?ÙöÈ>Ê´9¯®Ä×sìÌz7ÅØülgFXµÝ×ý`éW¼ÑöžíÀåÐUªí–gäÃdøŽºGY°Óîu »² 7zÊs—M‡Û†ýÊ0yíuyªòÎ×9f2™ŒmÛ£-pÏ©Àa0 ›+~xJuàEÚpI‡ï)ÏÃÙô‡Î6liê÷tºÝov¿Þ~í+;È·Âú³ü’~“åQy0j½¹²9v^ïú{?›¦§èF;ÝÛ²^ÃHc¯g=’¶è’ð޳y“ )œ~½eŸK¸¥<ï6ø=îæ6¹öé7ïØë~³UÛÖëW’Îù{×ßû_þ.+;Ú8À0õ,OŠÛˆÍ9nKÚû3L¶›õ^t‰ÁÂé™ãàîFb4Ã`¥Ñ¯é™ßÐ[CíƒtúMúõªq¢7;˜#™Úô”óáé‘[N{GRÔ}ˆAïÒ<ìóeß‚B{Ô+zŸ}Ž;õ­»ozf†ʨ÷>7@ÏXÍUmußA‡Þ‡¦¹ãc¯úÉàŠo)êC2¿ápë7©?l5Ý릿KmÃ!Ôé{7#>œU뙽Úæ°MÐ:˳å„w˜6ºS•ËfgúPy~=—GØôwü>Œ¥=âÞÍȆìÍUëŠhß.çÞ5ÍjöN°»i‹ÍK,‡¹Y7ïpzN·‹âÐ0ûVž¬øí8$˜U`°NuWø ëóÖL&ÓÏ]èô*vߊ=SÛœo—±^ÂQ)âJgÙú¹/»Wëý$¿¹â™v^ïú{/k³èú•s—ymö\w•íŠezì¶„?ò¦IFØŽÃôá-»Ðž–p@îù÷> ®~ª©g.»Å6ÖÖSï—Íz!6‹l7RèL­gO¾„#o¡‘Ôtg’ï4= ÓÖƒ:±§$GX…u“Ü3µÁ¿nKëŦ«lK,{×c‡þÈ›f´eao܇öÁ%ÜŸ¹3ÙŽj| “ËnDq»®Eï©öïÙÛzjbAv‡¿QF[ÈCd뱛۫߯ûÖF»Ïz„å&©íæ5BÙnkPž²ˆÒÛMÖâÙÚa®énZ}Ç%9Ìâ=ØùÁnôÈ0vkKÉÚ¦¹æ½3zãŽ{¡ÕBâ!±8½Ú²i‰nêú¼Õë`ÒÖc ½†i²»pÑõ«ò0=á0 ß»Ñ;Ú¸dO·î0¨Î²uE±o—ÍE£j¬ý‘ùaŽ& .Ûä<Úq´ îCo< ú0ƒz½äûã1 Ó¬»¿B‰\z¦ÖÙN[6äHªÓ3ýô·%¨á½‡½¨Â~šÃÌ[v•}+ÒðÅÜd#/ùä³ÏÒÛÁ`?$cðûÞ0¹ìfHŠ;(M×ß=/î»´9ßžÝz/ 0LM÷Hƒ“ÝÙ¯{Q¼}è!ƒ{Åà‹{-Š•mp9÷³`ûVª!UWß·Ñ·šp»…ÙqIØ73 Æí\bì'Ì60ŒÃÈ¡ŠÜÞ…ˆL ã0›ƈŽù ƒÁ`¶Á`0[Ñ;¦´Ï¦àùì‡íhøCxTý–ðpJãÀž¿Äuøûó¡*ç¡÷èãï{ïû?tc©æÔí‡Ó•CuN:ƒÁ`0ömÒó|\³2Ë¥Ë×/<ÃbJ ƒÁèF¼]\æjµºŸ>WÛ:´ÑƒÍ’¹-ŠÊäÀÚôî©ïíU©vi·° =ï;Xžzê©õ`×>D½Òéôº›(Hæ•ɵéÝSßÛ«R¥]‡Å” ƒf ƒÁlƒÁ`0˜m`0 ƾچ͇WØWïTá1J›ÓÙ2ñ;xŒ°á?r!ìð[{ìX Æaãn•L#œÚ†õ¯ænþ£ó†®fëy¸ö༰¹*¯á+¾ùpà~ïd7G;—®¼¶[¼žYlÙa†ì!ÑY~%‡½ûÊôv‹Ú)É!‡É0uì”[×=#©õ–éo©‘†Oj[£xT½q@Ãmëâா‡1¥Á-·^ uÙmy±§ŒF5Zzæ>ò¼†¬ãv øþžûîwÉaú^?-?¤$·[Ô-ÛzýDåͰ²C¦?ø|ÜÁIílïÌ×YÏe»ãbp!GRqT•Üå=ûæŽvˆYñΓ·;‘¡/ÕÕ‡È0 7¼H÷z¼f9ŒÜ< .R¿šîx˜ÜFq›ÝuÀÁË£u†ú©‚ 7©Ò>Ù†a<¦#‡Å û g$’ÙýùYC6Ü–Šï`úðÈáð×tpïøUß~ƒqbƒ›]ºa2Ú²vÙLâ^wÐQÆ~êÍõž½ÝÀýð w[Øø»G;®é¨äp[†Á‘ýXÝVÃ Ó »,$¿‚>Th/Ö6†ŸÇµ]Å“‚½×àiH¿€ì!lñ]&{àrØ·°åÄs¯§œw°Á¡QìMڲᶛõŽÇãžØ†žžQçÅ=t Î}´sº.E¿3_~¯ÏL^ ƒ/h¸íVaËÒÓÑÞ¥dJ{Ô÷vУz®¾n·¨û6CDn*˜Yc[ãbp!G¢RÄH }–Dúý=ü £ŠÉl™ûÞÅ‚úå2¸xÃ\yÀjøÅ®an»{ ¶ÕF£’ÆAÉaäKˆ=K²Ýâ )ÁW¶ûëhG÷ðiø¤v0Z÷­7îF¥º˜Òáq ™›Ì`°aÂ`¶a_ã6 &Œ; ñnë÷‡3µ;I2LL æ70 ƒÙƒÁ`ÜôŽ)=õÔS‡¶Äû|6÷aÅí[T&Ö¦wO}oÓJq>þ¾÷¾ÿC7–jNÝ~8]Ù|¢4ƒÁ`0îxÒéô>òqÍÊ,—._¿ðŒx°³rƒÁ`BºmÓO>É„Â`0w%Ù¾¶áçþç9Ž>¥$IÏý‡ª0¬²¬ð¬ð¬²»+üI Ðý)L’$øÈÇ×ÿËö)1 ÆádXð0ÛÀ`0‡z€ywÛ†my%;¸»l+ý½.<«ìÔ”Uö» «ìíRø÷æ70 ÆŽ!wh¥Š»¯³ ã®5 Å;Ñ<Б,Tì·mØk/ïPÁ*ËjÊ*{éÐ;¨²t÷-Ëüƒq×B™˜m`0 ÂD°CÛ¬ÁDÃ`0î8ÃPdæaH…ßck&5ƒqgMóéÁ¾Mve2@᳘ƒÁ8,è{>ͧ;Õ³ãmH»u}v^lf Æa¡µ¯ÓüáõìVwj{UÄ`W®Ï®Œ+³ c4ïîŸÝÓøO·žk¸;»qFY,«Ûìúl£‚Ì60Œ7 ;ž±îçŠ1m›„ö÷¨C Þ·Hû·JQïöŸz£]AÌ60Œ½gˆ*»™±ö~vï¶Ç¤·ˆ m²U#ך;ÒÝ­áo˜m`0{Ïp;Üw3ѦÛÊTä]ø+}Ý…^¶J2£h4ÚäFãr1ÛÀ`ܵìGܦëø0i²PA²(J#«d«ÀÝvŠÊ.W“þ^ήÂlƒqwÚƒýës@z£=öÀt­€¶P F³$pK,}͘³¥vîBf—¶A"û•öäÆ×½œÝîve¶Á¸{&ûªd?^K€•mÙ½[G¹ÌP™aÐÖÅ¢ ûHq°ÅM€y`e7¥â‹ˆ;ÒÔ:ÿ6•”Ó¾œÐµšM™m`0n_]¿ËÉ~—*íîÆÕ¹vj76¬Õ=ÿM6ä·ÃŠsC=Þ–­³.–ÚPiw©à­,®¤·[| ¿„€ör\ ê¿…vPû&Ñ«ÙÌ60k¶¥ë‡œì“þÑh«Ýø[&î_‘`U¥Ž$`E %кÒ$"`nÇ}¢HƒeK¶(çp^¿ßÉÖ¢è±Y‹—·oã‡jfŒý'³Quî}Ù0nÇQÛÆdp+{³¥*Ùqz›Óça°àü"²1’~çóÀÀ ûb³6D‘è¶Ä¢ û’A‡ âž¦yX±ËÛtvÓÄÌ60#Vú"0¹>¼ÌŽÿ®êÿçÀÏtŒí4p8d€"0Ó¾u ˜N:$¿íév  ú¶ã =(7HÓuȃN IDATi™-¦ÏâveÙ~l…b¡„•n¥Iò2d’­5]w°ØŽÓÑÛÔèÐÀCúðê˜æ·¶[¤íu¨»í¢ÃšmfŒQ1œ“0óp/p38:ƒq0€ÌípŽfq䌄5 ¡‹€Ø€½fFÈPñPL P¬PNÅö˜(}•Rª@¾£Ô«««wf@(Ì’¨Ò ¯nñ½Õ®„Û¥ä×¢W"è plìùà»>ìö–š. *o¾' ä¶«R7ÈŠk‘pp¥Z}Ôqo¥KÅá&ûî:*&¾Ô]žõy³Ït3ã‡ö¾\"(-"´h+n{ýrDÈx("щP»Á54Û–€`ÎB¤pLø“¢^(Zu  `Í<¬æXµPš= \í¡õY X€ÔVBq[·f\dzéMb¡XG ÔVíÐ~÷ê–þÒ kjÈm[‰¢ÓV…ˆ`4Ü È@…L‰EK/-:³ó‰)íøg|,¶È24~~Jˆi±&‘§É…T'!Œ˜¼1®H…%+e-¸‚«HVZÔ¢ _˜7+ )”RÁ :uln¢Š9 µIzžC6ƒänPØx@ÄdÚJgOª<™ yð‘@ãE.q3žc[º%§­`¼qUÉGîtîùVÏ©´YHôóš‘WÂzÅ{ yÀæé¦ð,h¼,p@$ Š@‰%@\CP€ @@®éå PÉc!'Ѹª³n 6(£zOE—àS0ºmÀÝz-Yâ¾Sõ~€ è@ _†ó«Ú\¼~ Z¢ÕíF« '1Ý–ö,p¤¶…S²›©}©o¤k[±,f ÈçËÊ€ ™®E%lÀÆÄ )<$D&‚ b’……à¨vb!ôa60³1 N% d-@!8B%S$­¡êd’$f,3ÅeãZ@coa>2]E”=9€h¢¢çUVÍ ³|8‘7m¢Æ“F\(+¹/%˘]tPã «° ð@hŸ1+'52qô” ÁKN8ŽÇ¹Šp%nUФã1ÙÏ‚¥{†ÄqMiJœ'3bVç9/Td1Uèº6Ãų*ˆ*!™°8 \\ÍêÓm¢Äê€ hÀàà€´„b+Z·µ% 4š ‘Z\1ZX¢]êA*OÀÕ¹M m¥„@sí'mm-Ú½uóªÒTHÔv¨ P ´€êêÔÀEt¶#ÊéŽM!PZ3*~§Dôa_±^[Òpûù;Lí<–Ålã#ùmM2‹ À®tÄ¢ÉZÝ ‚œŒ–ØÀ‚‹ešŒJ0y;ŠíV;© &ÈS¸IB¤DD‚îNeçõtÀ)©01¢šÙ@èÐVÔty·*IÉ„,rÞŲ»ª+šlH¨HiN3ZÙb1+:¢¬ ±.|•,s\ÍÌšgM.Ÿ“.·<›ç„hqà³Ð !›U i9ѨùŠœ´Â4–+b½(ó'8ÓHG‚jÈ-AˆÆIæ ŠDQ,+Ò•E¤ ÛT9z]—A!/Û€½D Žc¢¹ ¸@ƒ÷Cðô qði4€q @3GQÞðŽ›4€&(¢’®ÐêÚ^¢fÀÊ,@*›tT„ð¡×fЮõéDB@êÖœT¦XpaË@ÐU; 6øào{½ÊÞTªpˆ¨‘<|G—0ÒÀÔýfw–I…Ñw!Òµ}òS³ ʾºÜøÆ® ¨ 1̨sOΚ…(@t¶ õ ’1@ÈÁl¥õJ®D Š+V±ÆŸ­ÅNìÕÇÏVœËæ_£ ¹QhÄr5ƒJ˜È®,«™é£™$#Ë…(G½1—§UîŠéWÕúT G”lAÎŒ[ü|Øz®^†K &rf\Êä K&Í0öq”'äÏD˜ŸTÔD #ÁÁ$DÃÕ-K¼)“HIZ¼0.eÆbM+¾ÖÒR’Z4HñE#„JŽÆ¹eÛ£¸HÁEÛŠ;Gø:••ˆ4 …¿úŠï[‚ŒŠNÀÊ]ópËÖ_A²›È~ƒkÕÌ1NhÆ®S;íF7¨•QÄ8È[nvL˦83«*Nù¨QŸ»x…‚εÙP` r aÕi¸eD”µ}eŠ%€®­·¹ÐÃNl6]J?Ž@c`4Y³=÷ÊVŸ!\wC†MáiíµÁ­XÜ–Ó0ú­™m`ÜÖ†á䯷ÒhÛ1_¶aO°LÛQ" \`t¨7!£*OÆÈæÏ4Ô%dl´€Â È‚ŠÑæ%Æ”d›R%”¸XSåüd`æcâ…¼“fUJãHô«¼më » *.‘ò$“è©©–¨óaÚ‘U'–=NRª‹5¸QJÃ*ðy΄+6Z’lqÒ´‘T9æ /*² pYŒ]—ã-‘ä©AËqÆU©¶,:Ë*–©uq~âíáÌtÌñâJƒ+‹± 5 ñ Vq•ÔæZ7¼Å›\|v,•ÄEBí,Œ–¤½!un¦065+t½ÇMåŠ(?§KDŠOYºf¢V©ÖŒ´hhä¨7­<Ÿµˆ¨‰z9lÂ{Y%)´¤Ôšl«Dù(%ÙÈ)êéÄR „¼Äâ 0“:jµ–i×C` 7+™üœíRt.™† ÓØ]ŠJh¶ëý†^„XýW¿9'«¸\_}ƒŒn60nU¼®pϬ®]­ÑÜy§Õ˜ë«ÊÛ³" ^Ýï|3³ ŒÛÔèÇ €µ—œ´Í÷WP'L5€.aNb*A^Ýr€^‡”øu’AP{õm`h€_8`)€mÆ$2qµä ´øÂ¤JࢋË|¬æhn¾–7Å)'òFEZ©"œÇ*©±¬jæ²|Õ%^ò¹BÕ1c. øDÍŠMSm*J>J8J%4“¤tÄ+šââH|,‡LJrȣɛU]ñÓÅZ³!$Q¹è—oe¦‘p°%4¡›±¢®Äñ¼h_’Wm%sî²î»œò†µÂós (˶,7S¹ãQ3çD‚-Ú”\±…rËE˜ÑIÀknN·ÇE\‹`ó3H‰_ºö¥`Ý®¯Yø@#ÔAË€ ¢ôêâÚg,Úß5ªôêH“€,Có!]E¼ ÖÀî¶ ëñŸ£À àßúÊÈöN¯ëJ“üA=<€„›ÔýÀ}_;ÚŒ´ÕN2fû£Í·¹fÐ?A™Š@ |qµ#Ú0Óþ:œƒ šrÂLs.½Ê‰vââ ´?§îÅÅÍV0¾ÓÓ'@€EÀVÔm•ŒÕ¨9šÉ5c±àK‚%© ä‰Èò‰•â¦4õ”9acaF¤Pmb†’ddªJiÕÔ#Íkµl•Óåz¦)J5JÔWêX[¤åV¸Ld%ðLž‹"Þ!Ñ’W x!®q$®š ï.Tx%Õ$™ d#|+‰Æüz®Õ”@tÁ I"h|"p¤œ8­š:険?¼zKO ŠŸ_ö V^1ÅrÖ#Y+Ôt^KDÞL)RµâWÝÄVÜÄk#)϶¢Êø¬­œ?íCµt± zrb6—ÅÚMñ…¸»!ï;º^ŸW®Å)48hS5‘6ù §QT=$ Ǫ•½r½^sÔqd)Œ•«:‡œÃÇ,d§²*)YXºØ©°€…Ž.án|˺3¶Sßʧœ_}jÓÁáÆWÜ7†õÏ–´3M>ÐrPໃïl¿`hoR÷` dmnµu—ÙÆžkómžAIÉí¿ K„uœ˜—NEölPFSÒ”ÏF{(¥!±ÚyGK@'’FûóAxµýˆ4ñdÚ¨´Ç[ ñD3.¨ð@TÁÏ‚C9B˜• ÉÍ81*4DÕsÅ4çÂ$ÂxÄÔwÆ ¥¢´È¥øŒé‹bHára¢%ºªè’両Iźî@£±ÀK‘DI&þ2Ï×Ãæ5êI1g B ¢ǶÏW…h>’Nèœàb1‹†5hàÕÕl¨êrk*áy¡œ/•ÓóÅfÙò EX”àë n¹™4* 6pµ#÷L)Sæe¯T$$%¨T U “œ‰{3qBg_ªߣ ‹„S'ɘªqºãçZ)ªÆ§*ÔÀ•š­|Ã7ŽO‹MƒðÞÔ ^ ^#–<_æ›AÌ%a5Žk~LbÞä .¾PCŽD¼¦šN´D©™4cWÐñe]Z1G#/„¾œ¸Fm!¦~$ÍU1ÃQÒU¾&žªŽÑÀmÇ“ZAH)Âiê¸HÆ>ö8EuL³eT“¤ž®OE ë-Ïqêb¥]àj_Ô¸PÅz’³A Ùüy…˜àµìr}ž6¯è׌EÓ¿Þˆšæ²X4bµZ²rÙEù•1L¨GÒÞDM WÝVãÚòÌuS½Á%Šî™¸ìh¼ö]N fˆyqø¡ê—<ßl¿¢à´OË´0uÛºýžÜá(´§Ü"E;_séן}@n§ßZ=…ÁíC·‡±W¡ÿîÍ»¤•–}£û.œãÇ‘ÓQtÁÁÝ1³¶ç¼ÿïøø2·zQëþÞÀâQ™|ZS8bB"Þ<"5˰JeI­ú‘$RÏËQ[påÆK²aÀ%®´’Ö8-°£ ¶ì5Z5Z{Vñhñ˜f¤[¸$Bê%D;ZðjùöEºB«šG²Sd|²*=’4¿-Ðf F[3):Ù\¾¼¨¿R =8í¸Í`)udy<×Ú"ÜA¢µ}¨·® ÑÚÇ3@ÑXu¤AÛî˜.´i²½;è…ÎÞZí0Ø4d:ëZ¾®©ÒÐS1aÐ&ÝyðW_óÉ’Ëý>ûF÷]Åú…ֿϼ=z®’íÈ«På–?áÓŽ,Îó0B4huÒÚ°Q2}ït~º· A”sjÇ¡ZŠ›Kˆy!Ér:Éð+±·a%@‹ËÝ–¬¤@³8=B Ô&h—3 d–S'¢› 5©ªZòTQ/Ne©|Su9 5Õ’ü$ª-% A½:/¾z&(S‚¦”¢qÅø.NB!ÈÆ’”Ôn½Î'N.sœ+Hºd\•’¦à‰qâ ÃñHШ”õŲ§CMJl1’ƒ/{“-É3M!i¹Ôum1P2ržbJkˆHCç&cxáJ+(;QÍF®ø"l)¸B$S#Y5ás¢¡5<‘ŠJÞŒ¹lSàiÊ©)-?6Çd¯Y37çªø\݆‰9 sZòÃUÁ "Wq뼸"*¼4vE\2U_P^H$‰K‡™Kc/6èstÖF@`Ñz݆¤ŠÓ²eŠÊ äÅ@@acõ#¯"4BM çøpÎ"B³0Î!ïƒK:Uj!Öú‹½b‹Öºå€æ)l˜€Øp Â"ÜÕ§D Úür]÷*º:ÌÆ§<W£I¼± íS&|ºÍpëÚ³ÑîG÷–yÕÚÇFÝ:€º¿Âg1¥» GÇl—pØ.88 0Ü DÀì&‚&PVV¿·­ÞàAõ%A9m´ ¯ª9>P!M)¿„V£±á4§ªh“®£‡‡q ­î8NPhFÚ‘SWnøð¨xQ‘C˽L{ô< š¶9¡|G×UŽê))ˆ)ÅåÕKI±cJžééH TÕܸsKV³|3B`Ér ùeÙħë74>s3–9Ÿºµë‚Á”)§z±z¼Ž¶šžÇCÝDr¼Éº‹A@£åWWÄ$å‘lRD±”u$ÁU½˜·ÄPjI»²þ 9‘rAÕjQX¯ÅÞJK4ç¿àßä‚/f\U“OÕb+³‘ó—M¸'zjÓP9ƒO2=.%˲h榨™ˆ<®…¼§®¡(±'/qºW× iI9=h”D•u¤µãM"«æBÔ’ùá®êô8ß”Œ†ñz Žç(±bÎr=ð•$´y¥Ê P#¹‘pŽÃsáR,HÚR.9bJ²ˆœÏ…‰çÓ%·! 1ˆJâD5¥lˆ2Ç ^C ¼x9rÒTʼßôþe­EO«P•¹0ȵb’¸AâTåš"šÔŒ#"D"§q|J“ù1U=¯§òdjà=ý5—·ë2ÆCÛ,gÆ0KØ™OŠ>OÅBÈ{ý…‹MGÕî•aS¯L¤P¹jVNšJZ÷J–&‹)[É.Ó\7EÅ&â&/#rjµ €\¹µ ‡n˜Œ´€êºêìŠv¼P síãNaû=éxuq!^_¦ZO9âÞqêµZVd ~ëqn §×ËJH½ÁgxJ€º­…f²ëMtÈ0³ wÏJî¶â¦‘ÉÞŸ"XOª¨t†öç3Û^BD`R±‡¶?â¬qžx¼‚d^‰kê«jŽsŠxe$€$ÚÇ•ÿ6ÍŸ‘bY2‰«14¨-ÆQª©kD°T×TpV×ÇŽ¤ F Gƒq;PŒWådhl7ëËuóžé"IÍpz–Óž¸S’”SSa&¶Iü-'>"SÈ0ZkÕ¾ Y{¸–"qD¥H‹©Ûò—PóELÇÒ Á3C/lNs¥YmÕâʱ9GÕS‰(¦[Rì˜M4¢Ä{5‰+æ3êTið"üh*” jhujVÕdLm”eZöÜÅ(›q•3QAã>®Éã¨ڢ녚îK†,Õ|CwÕ%jFt])æõqLHÕ£Áâ³/ÿYä_rÌûÅ#'‰|V;ÊU»&…ÎL1ÜÊü¬æºžã¡õµyõM˜s¹oj-87³^m¦Ie'cgSŠÉñF%i)V†·‚ñn U@Fä¯~©¹Q«"C°Láv½©¼9(z«Ç€ÝV÷kF¦9 ²èkçÊm5Ñnw×Ù[×\CœÚ¬6'Ó®O»÷YÛò¶u6ÑnÃPÌ6Ü%†aȳy%m'›.z·)@YKªÚã31<`aÛ¯'(ŸDc† qBl8@‚¢"”T烒¡Ó4QQ¨‰|*"“ Ö RÖÅÔØ™@=ªFäÉ&•âpÜ1Âr¤4š‘fx™*‚>–ðt9h?™õ¢š›šX:(vóg÷H.›7-‰ãùÀ󽛉d‰”$"(áÜw€”8QöÕ«1ïÊñŒY+˜º_®Ã¯„€ζš*—=% ™WÄ(¦{“M©ä¶9ÈGøšÉ" IDAT¬¦yUñ„\3HÂæŠ¶Rå’†Á'~ÌÇQF(XM‘kE´@«:1U_¹$gùèY™»OÀ·ÔD$E"ÈEÑ Ô³R˜ˆ¤Nį7|Ô9·i4ËDc-…¶H’º%UE*èE–Uþ%SœÅ‡¥HHÚÔsZ&çñBnü„9qäÒ•ç|J“B!ª‡ŽÉ+F9 ir-’M‚MEpdRUËÖx:,pºÔ^˜Ÿ¬×³Ú‚5™É+šÆžÏgë/ciA̓6"—J6òˆ,ùˆ€H¦xŠ22ÒQ²¬·wÃE2²ø¶½º[AÔõþÙZ3 C~%©Ö{ö3¨vl…˜ÝÙ sQ„ß=vd€Ûyiˆ³‰zß@.P³õ†»×K ÛœJô|p7›_§€ã€+ãJ¨ô<â1Âõ³(ÛŸ¬˜@…ÊB&‘ð_‰@…*"ê¥Ï$f>”¢ò‚ªD®€â8®À[=9Õ2’ÅLÀ 9Ñ—TŽ@vTI#ÛˆßiÆÍˆ HW5×#J+páQ!ãå¤Ô†a B9'¼2¡HépFt¥¨R_ +<¿ yyž«ò~‰¯P‘ÿ²=56/•uœ²[…r¤,Îq2aœ4Ô‘DTb.EšÄ™ 4”¤Q·('H$jÍå0àÁr|5º¦ÄÏ2jñ¢kV¢©‚*D±S§nË×|™ðœO£ÚJsq.¥rœf…–ÓlÉQ  f#¯èŠ®R*ˆøËÑwyU°ù«ÍÀ•Z–°"‡.‡Tà5ݦäñšo¨u.^¸ç‚ÄǼ$Š“·TC U¥E8_Ñœåk¼yšãó–ëÇ OÍø¢V—sÖÅ|œ =')S–™Rbä„0h¦ŽYšÏK'tiÂȘ©”› Qkr² Øâõã¨Ùô[ßhEˆ¬´#+“fN‰£4Àõh–°Ü=GÉð´G«‚À¥>¦dœIÐt`'«‡d¯"€„ 8 T·üìŠÐJpèZG-"PÜÞ‡„oá,ÀE³„ ûñ û¯Ò}?¥'õµÔÚ"EwíL0Ûpwy =º…>ÔÉ·´gœw¸°UûŠ Ü ¤2˜;È@˜VôMŸ°i’¬@m ¤S4Fä;Nk 4€-DDQ&lx®Àó9£@Ž –n:ÁÂÁNNè ¼É¹aÜЀÿŸ½7k’#»Òľ»ûk®H P(’ާÙ=ÖšQË$™IfzÒÕШça––ÍpzšebY…B¡¹F†GøîwÕCf Tb)6ÙmM£?E:ܯ;"îÙ¾sÎw<[ "z•§NØðÍÚJ§ÁYÉ<û´ÚyLº(‡i7]í#ng¡é†«ÄL= e§”Ðt)/iàadšd rÙúÝßVÍz³QWÚû˜)ÔãÄ>gE4‘gÄ*È,©'cÖ7]šÐ‘ÓãÐÎÑ ¸^'-¸ºÆöEd•6é.‰#§h"ÆnwÓ+Ób¬t&¼÷¶Ëí€mý÷j:ëÚØ‹ 6m~ë׊„?.iFbíŽ~ÈôŽ”!ÅfkÈV"bòûÏ#ò$ÍÊO7‘"tùƒ±+ÿ¹Á”. :)¨a„‰)‹UF㹃z2zóŸ»_&MÌZƒxrÈ&/Ó1Mµ#A\ûÕÎp?ØNy1VR5_ªÝoØ_ fzpôþe¿S·æóš “j„cœ'a<¼ê§Ï®3¨ï^e M‚ÐãŠCyÀ ºB?Ülæ0± ˆ1Ó7®ðôíŽv§o£ënë×ã†ïâ‡%· í/ ¢ð¶ÄFüVÛp-#÷êkùajݾÃ5Lù~†×?Ù†?¾ãC£ýÝÖ|wñë}‰ vwmHÜ >G¸æ)¸ϵjoåê¦DUæãQÀ1‡ØºgæççBV£€×¨VéøÕG hYv¸œ5;jž·M}ʪý\®áù–©É°]Ëúvd½B§»u ¿6ñÌÅO4©Kï1ktk#?ÌìfÖ±ƒï-–ñ#=š¡T—¤0BTe<ÑA‹:H6æyp¶hMÅÅ4FÑKòƒi¿÷ãÓøËóÿàY^*Á1{œlǪ1e1ÆFYŸ$¦bµ[ÑŠFn*åúóm·µ›}#bÝ?·æè盫“e3ýÞ2iªÍÔï.Mœ§E¾Žáv ›…BÓvt BKßíÒx‡Ì7§Ý¹x×/˜-!ãd1±(zç<Ѳ¹òû|ÒçÉ¿+¶Î¶c;Žrã@†0ÐÀŽ!ÿ¡ñkÖ5)4*”ãÚ_¼¶#)¢(“{ƒ(­¸iijqktÞωXN\$µË†ójh ÝN—\6ß?Vçd>¤ù>‰¹stòQ”zYÈG¦TÍ:”€ èVa\¡óÀã ÐÀÉC@`ðP-Âs9µÏøÜ£@I_mÂÛfš^£F€^m8Ò7‰ƒ—¸ÓMc³P ä®[a>¼õG …Wı÷T:-€T÷Ž:}kŠnõí‹) `ûûþé[‡}·¬wôû“mø~ÜïüÚ7· è@#”@9Üà¼ß~„¾/R9ÕHQˆÓIök|êpÁPÆ øÐd Ž 48" Qùvè‚À޵~¨¯¥èse§p;¹R«ˆ?ÎGÂ8ؤá¡I\·½´‹z°1g_æ¢Ý­ùWJ‰T U›íqËL½Húxõ2è[Wb—;Íû ¥GJg‘«)k2®8éG¡iAùUµ·jÖ‡pՇƩ(dÎEŒYÛÅzÜ¿”Så†xV„ÖuƒØ¾ ö“¦þÛ¡-¯æ-¡[[õþj]Ÿ/gùÇû e’ZBOLSQÄÔ¾qÓÌæZÒ$ªQr”SÐ82'H“Øýzh³=·Ñ‰æ?LU,+žm£.Þn“ðUüÑ\Lçl3SmÄCCûQ4¬Ï˜ç 8ñ_vþ¢r—ÛªëòÊÂØíÕgø«w÷ŠdBiØ‹÷ TÓë¦|ªºT\¤4ÍM:ÞWC¬™qýe=Œ¥yž<øør>OÅHhM™iÄhT8`3’f¡÷¬Ã×»nm6ÎØÜj,òsåÉň«à(dA^ üâ ;cÀÌæø-PžÀç P¯J^߄߼ÒàGY8&ûº;»Ñ›áZEÞ¶Î0 @ƒ¾ªˆ».~ ÷A=wô¸¶8ï· @Þ ¢~;Ewg’ùv¿[JßÖ.ú(¸ûÙ†7¾0òúyòw‘wž|ï]:îÇ/ÿ€ Üd¿ÞgG@‰¤üV ÉëhéuÅQ ;½èx¶½Èsä2‹«[…#t쿱РA/€ø3‰,¡a[6d¤Ü®,Æ4 0®‰øÏ%9£ÞW½1ZE›1žy‘VÖƒµ‘íøScKßô‘˜ñ0ƒÕEëÕú‡]³Ùn(Ù¿ÅŠ~óÈÎ٣¹¤îOžM‹/æÓãYºèô–+Ì$î]c'¶â^ÿPˆá#ñχgæLÆe(£zé&)É„pOË-Öúýrƒ9ÓlªGÚÕ8ŠÑdù”_õLk±J±Ì[D—âi4xËÙïøÂŠ8\í;YD  KˆË¨‘úœ` ë½ÍÅÑd=†«nRY¿òíÕ„Ù¥RY^ÄÌ%ŠÎe`UŽ\¤‘”tОYÆÚ(r&ô[wÝ„K‘»ñú©ꎬiþËÁ\úXvBíeu6¤L±³KLeÅûuþ VÃ$œØ¾ÜÅEê¸öÁ!kuÔÔŒh’¨0›“1Ò8Öb-dºžúT ‘—Tñìp§üåj¿úªÎ_')DJӓݪGLz<š4JÖ_kú…ÌA$š+ŠóKñ)<¿«Æ×=n|{8ó•^àXK]-^»®¡~™£¸î¿C¬_Ê}mÙµ|möv[½>€iüÎBy +kßK,È^µ‹¾‚ÈŽþ9æE“·[‹·©xrû9ÜùIß8ùÞ»þ”a~ûQ¼9dê÷Fê²yÍx`‚®|[í5ÿ¦G—=šY°†2Ø'»Áˆ%Ì né¶±`¦ÂÈë<èµÁZâX#ƒ$8 (µ:§ªQêÝ(}Yùµæ›`*Ù$¡fä'º|Þ ãê9 ~]a£?%ÑÿjütÅ‹ é©ÙÛÇùvÄñ@~V«â¦Ìë\7*Lf\dìj\Ýý§±„f ÙÿÐú¥>Zíµê'¿}±_?㿘üF'ýÔùw¤vM]®1œçç93õ6‰év»8 "bI€~Á׈´ôã'iÉÔeF0Ñ¿EZÇÓo¢ŽŒ‹ôy¶û“½Yá"–Ö}1Dº^ ;òþi*ÑãÑŠG`é¿)ÍFV•¿š$ôñb¾E1Ò­éGÛ[ê1:ÑÒœè}ªµôƒm+éeA‡¤ö´5 fâÌ‹G.„ÿú4Ì…ëëÁœ¹§»´|¿X¤if9sÙ¾é+Ä+’)?\mߺFòÑ‘„™J·>‘£™ò!éËÄM}ã1º-o+b¼ é‚@N 7Äu†/Í€j‚ÑßHzŽy‡Å§8%—VÓ¯tá~Õ0ÖÈ>ï‘T¦›È×\’áõPx{ßî]ACç7 ¯Gô敽[¤jæˆ$†³=TчbýßåðoÂãÛ‹·h | $yy2| ¼üv®Žïnî È[,Dø“¿ÿ²¯™}¿ À€½xýúüMŠâW‡úÇæruýnw;ï%NnpáûŽðÀÐ]‰¯kD@)–%&¦&–×wŽ@µ‰Ïå•êô‹rÈ€q8Ý!?ÂP£{¡sø“‹1æÚꊖ¨z“–ÑãŒÍˆ.˜) ±+dm¾xQ]dUPHäÕÏPd\²yQ%Ýn·2“‹x—«æ§¾lé7 UÒþ3Ež “á! 15p8Í ˜øU­Š•Âh»'WÇé“R¥†-¦‰Ý?.ïÆ5‹ >iKž?mMMÂ7ÙüDGsb¥â|’ÏØ¼þ’o—²R}QEQ¿e=› Þ+¿?;ç“a„2~2†-Ê‚à”»±.¦õ$úŸ 'ÆnÆlÎ,"êE¬0Ú±Ó[c}Î ªsιmOVïucÖœ zDuòêbÖÙ±¥Ã9_“‘/u=6Âeß”2îvöÓ8lÝÕà6™kßµLfDà}¶;ˆÈ$í@~3Žà´n8sêjˆx¦Òx€éúÖv†~5´­mSÒÈùÄDQ £ñþÂÎÇÚ‘åW¦üwÆõBŒ<ätV òF»U{JkwŒ$j4ìþAÊ/Õ\òúl†—ÜÖþƃ9}7ÜõxfÇpú~ñšcH <ÌÅ5îS£öiçß%køZú¼¦nåGŽÛ×̃¾å}zsñ8ÊýÞã†ð'œçg^éô÷õß¿”o¹^´X*´ß®~“@,ïÒÝ/uíïvÛyŸHd? «±õŸÝ}%<NoѬ•³Ç(42€­†>©±l@nßI®¹Þì`.0 _t‹ûèÜyìåDä层~[`ŸâñF¦Ö¶®–L  ÛIËt6Ú ÕFôÉxš}¾ŠðIõ¸À}*Ú$2ê\‰³Ôºló„!§ˆØüWÖ™‹°Z¸-Iÿ/ª°Sâÿ¼évjmébbë‘ ¥³rôµÍ$µç‰GŸ¢sVÏdQo~9›¥¼Ø±,óy,2ÃÁù˜ð"(Ñ b³ þ+È™tÇí µ=©Q ´ËÜ|+ÖC–bMÔ£AÆ£½Úí¶¢ÄÏBOÇrÓ6qH0!û$ñJ}ŸaßÚ´UÈrTÚvtK ƒë»ìü4•ư¾ ÂøOTÉ®l¿’›º –LÍgæ´¬w±šÌ æ}œŸÈj­=^ÊaœO–“hŒûXŸÆW–ŒÇl©Y²CÃ㺈Úöy4E¨My¶´ãe/惛>Ûd3g™bt°ÎXó”¹ËìªØ®‹qB´ƒÝôFåbáý|’ÉíGER`ݬSÖé Ãþrû(jÝ Ãn-<}€îoü õò¥>K€ë)Ô)°\¸i}³?7oz'€%È4^7 7žÕ÷€#áúj*x«[f§ úCs¼ä½\Ðìnü‚t©ÈïÖNñÝmÃPÒ»qž?YŽßÅ_x[p ß J¾ãzãqzo'§– ¯/âïø_ ÀÝ´»ï¦€iÐW„Æ/I€?F¹àù (¬Éõny0Vã ç3ÌJÌJ{ìÁVÔ $™ØúIµIºÖÏ$š~•­m´Ê»q¾(v$gßöËJš§›4ÏBŸš/Zƒo6ÐnFÌ7P˜Ç:²•üF“çS2Ã÷ ŽQ<ñKG#emy…¥(Ì£â/Ä\Ðh¿é”3¡¾Ú =¥È£!1* ÓÙ†ŸÔ:Ò=ÜN¯&ú8+º0ñ&;‚åL+f§§°n'Ê Àò3±SFD°Ûêï>O¨¤Ð&Fù}Ìgíç{£ùǑעèd‚Ø´™¬Qx&|{ÅÉØ7ñÐèóÜ™!ø~œöµËY¤â1OéÑL§®†V%6_“JTÑ\¹J"ýÈ3pàï~ü `ÀêzÛèkˆ}5U`ØÃQ‚£”ÝæÚYV˜Ö8²861f“ò5®xyM¿0 ßb_¯RºK‰ËwÊš–¡û0ü–ÑïbÞ8Î^“EÞ㕾Ó6¼äè~¥ÞÿÄÌúÏ`>Êüð­ðήÈoµn.Üõ¤÷×Éîol½·¾VÚ#•0ãg—æz…] L4Êí›Ò€^B¦µÞH 9”G•IdWPôÑ$MyݺtYÑ95D:ÝÕLaíòU5“¾ÁGÏô¾…: ‡ZðF&.7mDM©&É7#%C'íe¸ÊoPÏ&áI$s(®+Ï+ª7º9aå§±y¬vÛæð©™²\ [ââù™.’©±œ¸àq*õ&¹`6[è½xœ:=qªë kVà æWtΆ£^OÑÐmAö‰/ˆé’Ìe°Q”Ç"eɈæ‡DögŸ¯¢—û‹O?âS}é.žšUÉñ€’< {ž;ê}Å‹.&ÛÜ3ë è™ð£ÂÁ¡ÚQ…‰Ä+úœä)®Hã! G0ÞS‰hÖýª›îó9ñªg5W$™ˆƒ}’S5žAÃuä¿T,:Òhí᧨,ôúéÈ„†0]óÒ­WN«! ÃÞzp/ø<éŠÜtSŒ¦æíIOXÍö|B‹d ºÊ5•LmTîÕ!ªŽn‚p†ñ1Tí†Ú ÌKQ)±~Í#|ŦŸW TeéæŠuVE(vÀb8üòå¶ç·ªÝ*ŽHÃoŽ)@p|=+´z 8²ÀY„H¿Æ¿í-¶Ç(ím€!_/ø®Uy÷næm‰îƒS¾þÝÙÙdŽP¿ ²Éû§}ˆžÿîÝJ!üSwÆ’{ö06ïÚowË{ÚÓôÝóš8ûº^®Ü¾¹eÃõçDc"`;£þí€0¿.ÁÞbœß2Ü1fRà¨À±Ï´LqÙB#)!v{»3Vi†d/B”¨KÎBq`.Šsˆ©Î¹(ú8œ%k,¼zŒ%5EïKi¥z$T;˵ ÝÆù²z+¿)LÑ>1;)_’­¨Ãf}!üóþôI~õ£8=ÐÓÓÍäó>é‹¡ÚñãÙeTìgÒ)7$ί;m»š:šøáðŒM»1~Tò˜Êø›%‘ìhº ñŠ'pVÒæÏÄ8³ŒÿÐLÒ©P¼ÏsŸ™ÉÄù™ŒÄ'Æ8h™Ⱥÿ²#íÎÈò_ËhŽ®8žþìC³õf¦µb1|¢úYØ(ÎCœÒ”“¨´˜Ù’fþÒoêÁ,YxÏrÅX•Ž$uB6dÔcãš¼ IB‘ìÎWbŸ‘4ñΗ¡)¤‰EᘠèJ÷R× Ê¾Æ(qèmÎI4£kG6}‚ÚF§ýnÖ$E;Æ}sÔn“,›·‘5G-.6ô«.¹ªô£¸È^%A˪UÍÒfÒ„JAw²ÄöŸsÿ¿ç6Z½6¿±ó ø‹¶†,™x”&ÉcëÓÕHüq¼û™ñ~¸úË6,A$ÒÕæz.¡)0`¶F©êPh*Üp±$€Ä°Á°7ÅDÇÀf A_W7›9b ¨½Åa*H’|‚îzhì¯}GA¾Ö¤M^+]ýŽ{õ6“pp'UðÝ͆»(Ñ­žÏ‚àþ†ßÍü3›ù‡ŸÙôÁ˜ÞŽ.òW›ê§€ºæ+=ì{ÊÄtŒãþÎÎ[B«rÊÙ 3Äe•–c‹SƒÅyн½a]üíö¾D¢Çça&3,b4Y‹•yE|p[ rÝÚZá8†^Äè$j‰ÁƒÚÒ‹r`y4åÙ…f,CðÈÕÉ8®ôê³,]͹æNCJLj~žúSÆûli­p  ÑZnôì›/G¦u |ÓÂgbàQíðT'ÈÇžòY‰‡Y›nCÓn~}*ÿ€}|(Ö3 é8°íFô­ lØÆßŒm˜–Š”ñI´PX0¿pZO=­Ù–î}"$jÂü—lÈC¯Âì(>Hv³aÊëˆÉJDƒprÒ"‹µðü &ª`BþmØÙÇb’ˆ©«¬,ÿÕ?—¾€ï b’'c.”tbf—›©•œ1Mómê/FýÛqó¿ÐÈIi¼j5žªˆå«62ÔŒV-ûhéäȵLÁ(„@Iî€jTqÙ#Ç-ã ±Xµr•é)A@:ðèÄMÊŠ˜N3›˜¿éÍ¢1¥^ÚÑ~e¿ÃL–Ì÷Üê¨Þù©-–Ûì4¡§Û‰#]êq‹ÁN&½'‰H|¬èÎ^“¤v=;^¸-ÉW,gj¦™šÑGßì0ÎM¾&âÿjøKÚÌ‘$“ATk ›b¶Ç GÇž½Y™4ì%Ô}ÃÜ¥MC’q]~ÝôÛWÂÈtè¾>¾Mgè—c{Þ@}ÃÐ\| Õë]“ð¦¡\ŠR|·¹¡ï_ðwÊ7„ïž‹¾÷®÷.õ»=ë÷— þçÄ-!Lì¨1»MfékAh@å sË·ºá9пÊïBï#°&SžøJÑc¢° +àÈæ¶§j”&¸Š®§6bü8ï¾Ú«u¿AŸc¡t€—C§E„¨Ó ˆ‘ƒI$%à¯åO@¯‘*ˆ j EQ¿ˆ÷v¥ç˜ÁmfÃÆÕ²Y- N±hm_I}23ñ!ý?¢¥ ›šÍŸ'òéë’þ|g¶ç²Qd¥›ÍHŠuIµNg²mõ5µÀîh¥¾L‡ÏŠœÉESyVíBŽÿ~½þË«nU~þS]Çc‹¸KI™Þ]© ÍN‡ð49G¼9àx Óð?ØÉ˜¶y#fWqǾœ !¶‹¬vîÊNžûýÝÉ5IóÂO%$ô4ô ÐØ.Ý&§ŠÐ&IC8r饛xÕ±‹´¦yóÉAùi? ãüô¥1½Mé~æ• Iâ™—°)iXÔ1MeÑMþ‡s®æ§Îo}Ø!£”„XÎ’`„äkwÖÍô ]ÇÀ8È8Á&4ŠRb¬|P‘‚o]UD==ûÕÃFÿ`ÄQ|ñèp±,çÒtƒõ‰s îŠë¤R³q˜tþ`ÓÈÅi_ñ0 ˆ'6=büÔÒÓ+$3D°²LÒÆKdšu–ý èw(KcžG,Ò4³~OÑŽuŸøáißÊt¯Ž},v«J¹íŠ¡š?ÏÿÞêˆòMªÞÚ¨ ˆn+:û2ŹD3Hs•¼$ÉÚ»*>àPC_ŸÜf–_Óû“Wïg èpËÙämúí[u8FzÝZñZYy©ó˜½‡éåã–ÐÓ÷؆ï̱ö;Å äƒÏ“÷ÝõÞ“ÿÔуþÃÏz}ýì6ú»÷¸”f€b˜å¨û Ì–Ï®ü •˜au Ü3ïðu·E÷@½@ðº@üX^íSdŸ©ñFæÔ Cõ’¢I^NÊd9Û<óÝ8Ë‹OÇ/-ôYóúE~L¥>èÀ€²§Ú2ìxÌl®Yöz GƦÓâ_ÇèYºßŠYˆF§µQœObÚõ•ÆÅ"ÿìl-ÊÏß((b€ÃõF®^6lÆ$À¾­Ä_¡¬ ’CËÓ7dTb~+YoCƒnèdî·áN)D Ó¾àvØ<ôªývY‘Ì ÕÌ5Îïªø»ŽV8ÖïŸ}üÁ£|ÿ 0¥?®TðïƒÒoV¼ ¦@q‡måÚ¸r¸ÜÈœ¦¾™qFßݾï.¤«ÙlÈJ3Þ€Áòsµ„ä×+xTÀ.°Œù¢ò3cLJjK|=ƒ õØ Ð ðx ðœ¦î:h‘%ŽÌPfºt Œ¢æp5Ðbã§ÙÎOŠØÐa½Õ—Žè.󣜒“4×$c!9ºœìýÕÂ~I ÝF»™çQ×D—ÛñÅÕ'$þ’L¼‰ßÙjk·ú¸ :g¥¡?ËIJŸ|*Ÿü*£àãÜ9=–¡^û›æ€èBÙœêóþÓ^ÿÀêÉ$;i-ÝPU|c0Vª%qyÅI<ÆóÁ Í< b0íæk½Óq'?òÝS'. óŸ‡üq¶8Lç9¨0tÃ轜‘4B‘ˆè·P£õ6t]¿^GÄú¨£Ï·õºÐ,H¥B´ä*òI2’šNQâ‡Ð˜°ðH 3àÒZU)s,€„HäY’¦ º’ê‡uü„ˆÂP[Ó—¡[¡üèG!;8H©tOh9ú’ÙÃC·È‚©ÎáëùÅ×j“¥j×Aòó~âÚ0o(û\Ó…m÷×ãNÑ‚Î)"[¯.ã²åe­””“YSÞÌÆe¾žÅU²~œº…Z†YÁ“Oú®Õm)ä_±Íß°›Q>*õÇ({àX0F‰MrwBÜmÂÕë>YÐë©A7euF<1r|v­w O<ÔPÇè^¹\áƒäý•ó÷²/è) ñÒ0ܮн*\ú–&¹ÉjÜh|¬_ªøòÖ]|9ªúÐÕïÛåý“møýD䎀»‰$‡wi¾Þo‰Þà±0¯êên~cÚCô·Qóøú*é·Ù—È—©üØñl?ÇúÙíj'À‰\C«7°¬= ,ÑèU¸”+¯oºç,€ÍêºæûU1Þ(IÓ]áрǸÛÌËRâ<ŒDDH¾egéÃCSÈ$ˆíçã1µµ#³M"ê´ìÎì<ûè“IòQ2<öz  ù¦‡¾ê‡Ïó&"rÁå¤Z¥]<9=ÑÍó|½gݸìÞÊ“…ñi£„·è¨f¶"¶WÑiŠaÚ)ùGa{0b:/ô¼h…éÚ¶5Ùœ§êœk–?ÑR tÑŽ‰ uÒÆÎ’>’ÍÇÓ‡ó"„t8OÚ!æãÿHì¡¡q%‚“˜•p[€ ÆÒdoÌsÍŒ’[¥-ŸuÂzwÖ¯~¾ÖGÇWZ ÑUǾŽñ›<ô–ü¼Iv7.[_5{*YŸ11¥Q˜°@m#m[¹<ð=p¥c¬2žF>Ac‚ ¡²AÆÁÙx„Öñ(v{ÿlF$mÍà©R±D0=­zrD*Óï+{Ê€–9ÝEÎûf;¸¦}ë‡xžíÎä¢è×î›ê .‘Ó=QãWݯ§çâÇ#éë±u•f7&éƒÁr·nY$³¢à6k‰¶”ff£aàˆ|“ÕEtf£Çí9óMÊ’ˆE2;lºj ŸXôrÔ‡ýó>èDZƒpCäJ¯ÁÔ:FµyŸO&v̹‘PRAOnƒy0@êë?Èï/ë{†_}»«à&"a·æ!@ޝQ¿Záü¨}ƒêXÇÕÝ5Í/|ûDLõ̺739°¹Qo1 @—´¶áŸ {üƒÞö½o¹{¿ù;µx¿yxc{ÜÎK ¶w:$¿}¯Dò ‰b;:ÍÐ*d½íÿI«µþÖ-æäëY„ÆÅ [êKI¸|Ÿ]ïæH¯'2ÞîL‚Iœ'Ÿ#;@þуd÷Ñ¡’sµê Æ„Iî¼[X)„Y÷qm—Ï¢ƒ{I"ØŽ¹Ã(Üå0”£é‡–E¶û(úÏÅd8KÎô¬”=-¦y>†GYc»WÉìׄ€޷Ͼ7x4M ¦œuî´”d —Á¥_|´ÃbAíñ¤ÕÅØÇ=É‹þÒ¶¬™Œ>£â—ÃÈÿÏXd¡Ö…‘tÉ?žåÙnJF;õÃ÷äúÇ]Œzå éq•ç™Ê‘<žéA!àÀÏ©šª:D³M^šº(ûˆzNŠÙý~¬Y~ù•K#V‡‘‹‰Ï¥×¬P‰LÁmˆ‡Á0¯â8#’-S`4Ü«4ŠÒ­¬±ÐYÄDIåÓ™¶1#!39aŠ%Tˆ…ÎaDJ'QF3A§Zžîê?n1µ2•”©´®÷ÊÑVóÖÊHÇ“¢ÖªÿÞ…Hõ‘€q¢ÆpáH’9‘ýWAN NÓiðW¶ãúÉ6 ÝìÇÊçj>Dú…7•gЦQ4¥r]ï‰îÓ±EÆrÑ? õД¾ ‚ù%U;*žhl:kûñôâùÉs  ý5tœ¼^øÔú½:AÞ\¤¯‹è^^ó -4.^÷ë!‘»@ ÔÐ<=.{ý~‹Û§|YA ŒpDpÜBߺ>¼†MírÌ€Ö^Éë0Àµ­_¶[rÿ˜kD™Áøe"p i!H¬ôŸmø'Èÿ®Ô ðâƒû%ààŇ^¾ž@J9÷˜¨›RW¾þ2—KÒµõœ~Ž)p( bD%Š›ì¶ L#Zãֈ¥K¤ôõu¦îÛ…Þeð7ðX ät¶?JN!ýäÇ{>þþÎôÑŽ’ WÚ7—£vÊoÓé<ˆÝ!2ΗQ_æÉ´R¹ #ìÙÒ¨éù7mñE¹.+b;ýMB£SÆ’`/Ç‹gM7£’²rº “9z) ŸecÙHaRá2ÁÃŒ·g²ùªÖ'Vƒãqš$¹ê)Ùn|®ŸgŠ‘¢P±æL%Wóz2¶y9-ørbÒ”ïçùH’>Å–$n&õŒ,£xº7û~¼Ü6iíkê¨m gr£&Vpó’æU"#Šà-Ã/=Ï,š„‰1²ñDMš²åßÊ<á™˜Ž²Q\¼˜ÆcÍh´¤|›[ËœMº.y”‰à´°™ 2ÎöÇXr‘‚‹k«cy\È,%ˆä€$ÉX"ÖI FÂåÜSIÈœ³‚Ú@òiûÔR¸l’/ÇJ›„™Åt8ÉéÚÐGCrÐS•ð3vžkZÛðõ`=õu=Yn¢œYLE¿Cg21•›>¬Ý¤³Ddf ñÒª*!IpšÖãàÛq:p?òÂ¥4.Ô@]÷2Ð=h¶Æí¤ÛežøÍ&]<ÝÜ’_½¾ +Üm({›NÀ'H¿„и¸‡È:öú^v ©a5PÝ$®ç“v½¾Kýú#”`—A%¸ÐaDmp í[4Æíß%0I€úâ%S,€›Žn´bN°>ýÕ p‘¡)ïQ>¯˜x ð úèÛÐÆmÐÿ¬†á=ÇðÞ+î’lS ¾²âq’…¦8÷†#ÀÏè6Sñn+U@¹ú¼i=´kõ- Ÿ1í|ÉGbê7z W Ñ Õ.ÓvQîPd[¬^E ¯$°¸­©¸‰‚Ÿ YÿÀÅ“£ÌwÓô±3ILš°½l^ÄU`Fåéd7“´hTÐÆÍÌvîÅEã/Fy±®oé¶J‡“áø?œ…Gg¢Þ;èç~‚!®§Y+ŽÇ)¸*UA=Z׆ËAGC¶™ú¾s_ÔGZe]H×M/jÉÆŸoCl¢rËK+¡/?u&ât »~ ˜ì)퇤Í1R\ŒÙ¬Ëd`*Ó,~›AGý +Rw ÒÇj©ÒÝ,‘ÜÖ¼:Uuï]àÕ ìl¤‰#ÌjÉjM™–€ú!ŽqÊZ‹ñ”â$™H-ˆÏ‰pŠ”Rìd‹G¹d}?º¾©¢É3m™$"¼¡’(‘!óÜ œJíë\A…àÌ«dT*‘õ–*³¤½ ž„ ÆK¼µE_#iEf¼1ÍÓ8¦™ æ Ù+.Ý )ÆŽ:!SÄQBã,åGÆÅ.d¶ÛŒü‹Öh°¥–G§.#¤•Âp>`he˜NŠù–òDŒšQ¥\L͆ÜÆF«K]o×?êmÛ6Î?" ”Sþ½ÀHCd“˜‰9fg›ÄˆN‘!šÕYÔ` dÀépn¤~vy¿FáKḹ­#ÉíŽ%HØ (}?7ÌMãÛ1 ‰ÍM˜~ ׸Ž4ŠQ r¸×ɉƒì^– šwÖ¼¶¯ÎÓ å½™ƒñšRàìÛùð·DH(ï÷J×½E…þq`Jú_à;ßþ¢íÏXÝÓO/Œ{«Oôüº]ùµA·qjøÞ(¿ßžÇÅDXe.¶(Ûíì»)ôó¿t@€¶räHf»ˆRô`°"`~Ü)Ï2Ì·¯ê(n·Ôc¬„3ô@G…Dž‘éx(ä!}´ÜùØ?X¤QP´¢á²k{sµ :¢îÀwT:lFß$²Ï‰Žµ–Çÿùþ£«´U,Zvÿ·b²b`E½žË3‹‚EaÅ!@‚0)-B»yÜ¿` yšÈAˆ“¼ù‹òâ^Mýƒ‘ú&”—dóä€ìÇIí§ÿo,Jó]À¶HSeÝôEP ,aŽõQ¾—‡ÁŠ™ZŽLÒÒÚs')–‰¡²íK%,—™”yˆmLc®zíˆVYOXL 5¥$&;Á•pÁ³Ñ‘‘ ƒ8JNÙFpÖx¥?K³Ýé4â„Ö´«èÂRRúï5¾-\>#Q—Q¢d¦(ãÂ*Ú9Ÿ{ƒÄºÌŽQ2R"¨L¸ˆµ¥ÌCÅ^JçÓ^$x 4ƒå¦CGõfÐ"¢£°J¸áÁF‰)÷AlReyàÉf$|k(TÎUÎõ^4†Jö$cz2.j§6.!s–ò'õ°tYš‡ò(ûJT~Kõ%my³ 3›Hg a¹ßÑôùšî3IëLR²+6«†ˆ9¡W½ZŸ›EFÓ Í‹lϹY;–]YµÌÉñ†ê¶¿Æmý­,<¾ÎßNðìÚŒöް,ÐY¸aÝ£ð7¨ìýD›áT8´}}´èžÃƒ²Ç ôóW’8ÅK6'­ñìË :ºmñ1û¹./yÎqŸŽN†U·J½¹Zô!þè=©mÿó É{!›?D6â¹æ½Êw~Ýû2i–ÞMKܳÂßc9â`=û):“5’SX”äi=u „¬#Íu¢ŒbD^º)Äñˆz" ÀíãìÄB_Üo•g.)ÏS\'ÇSÂxxÞøŸTjG‰}•O•œEB0®»m+Îdü“—­eµ™¢ê†cý·‘‰„ÌÐ@x¸ËÿtN~Ó+ï’!a³äB8¤6 |Å‚6­Do÷ôW3‰´€dÝ6n/éâöè8î_¶‘ü"ºµÛSÉ2Ï-8“ªõU‚Ëi‘åÍ¢©'çÃf©y»3MŸLØ'ùƒ<ÈÁ­;5h£ùÀ·Õ<[¦™,*L;ÂÒXŒ!WÚ;­É×dÌx`Y,I”JEÈí<”Özha­¶„i«lš}L¹‰l©‡_ÂþuÄ̦ËyžòØwF;PLíÍ XÉež)²ô„Ç´Ôg‚ŸGa”$мÔ»à™£c­3€!¡¥¡OÑ`Œ­œímQ§^[m™v!P%KêêÞ¶W½khd|:öY7€Rž‚E´°&2]L%xR. >ÖV £¤ñe'O+Ôÿ™"I²iÉ7g.í$ÝG*ƒÌŒíûŒ ƒž±š6n0Fi”¬[#žDJ湡Ôu'}ÄZmÜ…^Æ’'–.Ö>b_ËfKâ/£Ø“ƒª÷ÚR|u.COßÓvMÙ%!h }^` ´øZ @ßí+¢'(·w+\ÝÊËë~Qƒ^c“ã›ú®czݺøîšÕƒõµ/µ})Âú9Ðnæ#`¸éÑ~/j›š×)¿e¬è·”yKÒó_¾mèÞ­©ÿÙˆüšoÖ½yÛ¼†FÐÃÛ åKƒ´G€NãË è-6#@:«k]BO1vC?Åéú’ÓC G­Pôj˜­ÆË9šîÀˆñ¸vTÇÇàÏ üâ±ü8oã³ô°Ôû5“É¸ÞØáË–Uc›uU_—NbáÆ"3¿õøÚ˜Çg}¼>S™³‹ƒdüxÚ»²¾ŽþÝ•æH§Å<¨jùÍ$AÎ1tèÇÎç@ðOè‹§NZ#èœ êIµrÍžçŒ_Hó›¬=aÉÏI<ÓÁ‘Øï¦é. Ú±BHeí3ö°ï~ÂV‹dq¥A-$ï–i”Y²»¶ëØ_Ŧ#I¤èdÉÉ~6{:P¹3FçÂJÅ(ÍZrÀײo๒*µå2IÆÎiÊ/Ì&¨ž–MDœ.dÁ….éÜä¸J§÷³4Ž“Ž ç­Ó¬$À(0W*Hn]7Ä´>¶#lÄ-•–ó@iêlŒ<Ê#*E°=s«È6è?&}G8—^q¬x’ÉýÖÊZhjZéµ ªñúÖ#‹¬ W¹í#Ë·A®˜*™Oc—²àb"È Ü™O3¢–V“1ªJ¬º â±!ªBd¢L ¦¡ÖÌ2—©œˆ8DÂDQhIïwÎ<¥Ck6§ÖÑòO— ™k©,ˆotö¼Ô);|Ç‹ùjž4“™÷ ᯫz Å@·ÛæQf/dÆäÐ·ÉØg l# #dŠ£€(Ë›}™â¨Æñ5¶cD@q]Èz‹ì›whjd%rÀ_o^Z¤Ç·Ç·{îZ?lï¼ý]5¥ñX¿LZ¼]})€Iø»­ /wÏKÚ—ü²Õ}^æKÍ%üu9lþxkXß­©ÿÙˆßËš÷5¡Ü‡^CùÛ;y¤á]±!VHôD–d³Ž°’жÀ!Á%‹Zu‰|‚Ikè¤ËùˆØu9ô¨Ý-óåo(tô2…Eo.R€!lЃ‡d±ËŸO&ßËø~Æ’%ÉD’P=ŒãU¨·ƒXlJBVº¸ t[si#»šsûÂêavWnÛÎ*ÿHÚÙ¯Îg=(0`¹>|å4á§yÖ;œžòî,*uô¿‘aOÛ‡²ÿmg]7MésöRÕÏ¢]žì}1ö¤o!g|œâ¢6ãU‰YÈ1 ë¶KÒ˼:|¾=")[Î }ÑךÆI–FéHèVê-¡A,|4!ƒI 6 .}ÆDÁ¹RÒÑ|ë“.oSgHN£¥”±ú%UpQÒ¡o"º.&&Œœø‚Å9É-•=%½ðIÑù6VÞ#†:sW) ”ž#zÄÙaL%áý€a=tŠt‘sBZB©Ö#p×zSa¤‚bšÁ;.R£ ¬‚á–‚)a|ÉBÊ)‹¤Œ¹vØhC}×¹î‰v¢Ò\šÒ®¸?wl1bWÈ$EÊÍÀlú &LH)fW»8Ÿï†³$Rê7E’Ñä¡`M?˜smk1ûÈ«‡*"Sç(lhFž´«0M&]¥E¥·Þl'èœ÷Y>ýÿÉ{³¹®3[píyŸ1朘’HI×*»\n´{xèê¥û¡s?õK_à÷ºK(•l“¢È 3™CLgÜs?$I%%J–Ê6ʵŸ™ˆy¾oïõ­Á/õX|ÚëršŸÍâQµ×ª5Lõéž6ðWŒw~Â/g&þÚÞ¿æØjHŠœ±x“~x+HëþÞM÷ü ßî^ •=›uÓמŽïàò-ÐÕ·G•ðÃì¶÷žk÷À¼oÊÔ˜øæÇÇæO$Ì9ßNSf8oÿšçúÃHFüaJ$&±¸ˆÀäG±ÿ#Ì¢ïÿéû]÷õ<?/^óÏüÈZö]üò;]ýÝuxïé½1Ñ'8‡ëã–g}Ž—!ëƒ$â›A â¬dÖ¤']¨\>Ùõ€4P§ š—o> à@qÐoÎg3»äè;ô08T`؇ÕBÿJMí«jÔJÐHXWÐ1¹y~ÃÛÝR7y(Š´ž =Iƒã°07„“,’~¹Y[˜^vÅüò×ð²ôù?ry4ôzô NíÑt“J¶©ªb–²ÿ±åüT—¤+ÂGãm)‹³8&8…Œîél"çŠ|ƒ]ô—CwÛ3Q6ËðÄÇ1ƒã°¡Éúy>œæôjÈWÓy÷)o7®|áY é"ÃÀ铊qI\î§½•‰¨`•Y‘ hÈd 5Ï”Vª’:²£š.&¡ÂÁÊè\ ‚×.ïl÷’\h)–d^ŠÊ&Mv|ëûm"2%ïâ`µ¢–Ÿqš1Ñ çˆðU"£aîs´`ɑȢÓÊ Ü³œôÄeÁøAf,!WÑaDðÓ&ø†¢ŽqFÒ&¤n ‚BrqJùÖù‘·"TD-‰¹Ô, ±<”Êd»‘GWCæ”°˜Œ‰‡ÎÜr)‹œ‰7üÉNÚOçEo‹Â“y"Ê&gˆ‘°)r=’xع[kú¶//¾¶öŸî^Òú¦òW«ýñi»«*ôÒÑŽÿ@$³U…++N¥I‹b.Œ\‰~æ‡|Ù{ ]/ýË{·¶ºYVØÊ•%S.fØ+F×vN ÈÐ3¤]ÿýÈ"¬_ÙÞê}Ó]ÀÕ·°~œÇð½ k¿WPî•©;VéÕ”¯×8oÆ«5üÛ¤¯­ÆZ›7ƱoúÓäMÚÛ»J’ýÏž®îÞÝý„®ŸÐÞz·þweÍý·ð³7€àw»îÝ^` ï þüb?œô¾õèwïIýþ©Ï#ûî¿,(À¤±ô·8 ç ëhíÍ@±ŸÙCb>«L[ì.^°"™zp1¶Àž%\ôßî}^+k¨BÌ0á“5Œ­ž£ï ÒÌU Sþà¨øLØy¾±-ß@|1² Ýæ›¾àñ7Ïgõ¬˜­Ž#G ÷—´ME¿ÏÈÞð›éê÷îJ«ùf Ï[ãú“Oz–—A”_÷a»·|ks%©ÈêÄŽbÒ,e·„+uÈÕó̶gá¦ïùõSùêZÈ\M›MÆiúZYýrìû9=l¹»¬Ç2„œíéPå’“‡ =<;’lû¹ÔävN÷½’$‘Ž+ú<MΚ¬Éišó(¢Kºso£õA9Â\-Y]W~9Å1-m!˜Š“h5"ÝP(ê3›F("Ëu-Õ.Þª`TkCdÜά:'hå…ä%Ù‡|°œ yÁHΚ$v )Wi²ð*1±}Îm—ið“Édy¤öó~|µ6#Ñá¢RzJyÒjèÓÆÌöözŒÏèÞ4Evülð°á|w9ùcZžf¯ÎŽd‘“ó.?nÙƒI, ‹%ñ‘@Iš¬ö,äôªHIß;Ü´¯5Îg¶¸h¶`[B¥®­ÝO*…%G+àk06àÐÿ´=ß pùÝÒÙ¨pƒÞ`\þ™yäë*a¿Å—žÜûS²à€}³ß wAëoÆÒbÙ½6–»ÄSyg¿q×­r‰~v¬HàcÀ |4`}sª¶EêR0?Tð¾G÷ÇÐÓ[yò{ŽQ ppþ§Ÿ……Ÿ\Íß6§ ŒÀþmê÷_ Í¦˜¬·Ñâ°ˆZ ¬æ°9ÖlÝíT$ «ò ãÆ…·šLm~3¢EpèïŸH*àAyo7ÀSLpqbozÔ7¨DúmƒÚq59Ë—G"Ó,Î}ÝÄ{Ø0!ºq6a5ÌØªê&ælkä`ãV('Ó—í‡MT¹”*; ÿ\}È~É“í†Ç"ät߇3›pôwD5gC›]ttx‰²ØðEÞÔü9Aö€hÚË]`˜÷ФÄê<ÇR³#bV¸ØÐ¦]™½œÓª”Ä4ƒÌ¹u±l¸à«6cüpž‡>«¶=O•øòôtšf]aíªÛ¬ºº®‰RÔ±ä¹÷D³ärˈF7÷Ö_Ìa+€bêpÚ‚ß»dC‘wè£-/`ðtN÷yµåWZ°ýOº[çQÊÝûŸ‘¢&ò$Xûí]]îðƒÁ$½´é¤ IDAT“ ô£Uâ-Îcñ½h€¾žé¥æõƒÓw¸Uß –(ïmý”ÚeĬû?ˆg†Ä{Ãß]-,yÇ6ë¯BpºÏ¿Þk`þfó`æ[°ïÐ&5¢†}Ýñ^å6"r[ÃR@Ýqý&¸á€xµ¨?кY¹¯¦ñ \£ßâ0·å Ì5Ü50…¬ø'3™ЃÙÂ`Ù£Hñ›ZÆVì&ªZ•t-?ŒÒ…GíX×hw“H¼,ýæ’!æŸÙ±‚F×±u… °¤þ&cC7x{Æù)ËËêÕFÒgAY±„×¶üÒ& Ð E•äÁÔ#ø8=\ŽýA$î_u¯òJ’‰«Š!Ç &7Ûè+ó"*;.o®ž‰6”ä·<›d½öµO³g‚>¸U5B›HBð %‘þ×5OÇ9C!OA[Í<¹%¼1Ü©(j‘å\Qébà!±¤ÛJ±tŒ¤€ÐI8)GÅ;Æê®?Íð@!fxÜÏ‘·„=R)šDG¾¶ ‹#²þ,Í>Öœ³p;;ÌIV÷d¸P­b>+³Z£'ª¿x¡/7R[[Ó´A¹º¶|·¯ˆ b‹m˲A%Œ¶òµF‚LKï[n²ƒšmÃöWà_#'Óî—>ˤmòÖê›gýh,‹ Íl—S¿mmì'èv^ì·Á  U&ÛÑ~ø ¦ÑÊJ2TUiÏ9c¼­üóÝàHø2ÜZ{6$Øâ¨“U>?Â1çUF"òަX¡ž›2„A’<‰]ßÅV‹ç†A¹"01P>JæÝARai8ó4æ1eÂÓDNF!$3É»1‚ˆ”&’û¹I=5TPNÐy°¬¡Uˆ*gœ¤DdÆø”Q¡˜òÀ¹“ŽJÇ“ä)O²dŒ¥ˆàCYÕEY¦ MHÉ÷Lù’8:n|u¿«£ÎÙ„ébDêxï°•‰ÌRRltœs^ö5ÕYNfYY«¬ÔÄdÃèÛ~6 ñaâ·u*Kks²¡ÜÉ’ËRsd¨çQd‡çîÅ×ÁèC%l†Vܺá¤UÙ€Pˆj)‡œ‡fÆ9‚( Óµýpد6|ž“Éë”M&wQ~fÜ!† ¡/ŠŸj`|âÒ:}‰ºpÒÚÌåë«ÊbŽ´ÇÁ¢†Ôû¼)û¾´y†… àÑâæàwGm@ÞíÖ,#`k€È¥›X¼›pEz ´>7ϽB”–<¢8¬Àº†ÍÁðj ?¾#`’o¨%ïÝ—ÔÎ,z`ýncPÀ ¹„Øcÿga±Ÿé`ñ¾Æð¥7h`ü³%>J‚Î0toJðö-Y~jÃxc›úÎÚⶃ´P@ ¸ Ã/&÷™ÑÀ$‚U¯µ/–b½y>ÅëÖ|‡m-¡-¸Ñ¸ñ3„Gb±@õÇÒ<ÍH=ôÅ­+ªðK_É Ùt9éŠx½^\ ’=”Ä€Ðo'¡Ý÷w! 7@‚X>õ±/•©Ú2ˆï˜ ‡$§¼[j>Ï_Q‹¥„‹ íÊ Y•ü#ä+D⚸1ÎPò[=ÂÕ»W$’X‡Ãª‚ŒOl‘wQ´Íiã铺1äéÿì?:gáUAíÆO¡¸Nê¼U£:ÎnôÁF–í¬ŒtÙ^4Í*éDÇ”¹îôEì"{îªÍ§“e¾ÜêN‡}Åñêf· 7ÿØé2>ê7õ¡âöœÈÕ*ñsK–6h%%ÚÅ‚N§«É<äJ` ©ˆU~ðú08>Š¥ŠHž‘!9i™r$Eª#3‰ŒpTH1ãÄ14ÑQœ+ʸOÎ &(S**n€!éÖ5”¤g!©["SÐ5-*Q¬L0Awœ"“ <ɬL= $óŒÈBKÊdÖEÖfc?t2S" ~„gz–·™5Gê™ð,oÓwž²Qˆ‘ 9(‘2CVVËiŽb:áežlKÊfc+‰œH>­Õ„J8#²k®Ô¢`lVS=ããõÖ†§í×­•Äþ˜÷{ú;ã§pÇ [åÌWzç#qâå@¹‰Ê6ýðÒóf½¬«ý¶¡Ÿt~6DZRé]pÊǨŽ·ƒ™£hŸ¶ØÍ¬œÈó­ÇÜv+ì €™â/÷‘Ýì‡x<¥V:Ô@£ÑZŒwceûÞèŠ4¿™‰ríöïxä%X ò‹¤%z›€öõˆWæ°#ì]Hƒð oÝ^×€5o´­Û÷דwIíá}x”®ÐÇo]˜pQÀýÄJõÓfÑÿ®°ýËðƒë§ Ń5Z‹A$å vö“ÏöwÝ'L°z ÿ$d&Wëí›Zò¾ÏAÁ úЈO À‘Àã,(À¡?ÿPJ^[Ø‚<0×í­Ù%s‘¦Ò©q¤ÃêúÕ<¢¿Â7 <ÿuD²¶;i0³j{µÄdy¦ËÅ ²V/*²œžyA»ÃÕóñâùãÎO³ÙŸ”þÊÖX0™b–ðeUpú ÔTÉŽ‡n¿·Uã‹ )iÂp4 GÝÈK)”%ãQè·u¶ÓU¾Û žê¾ðë¢KÃM¢Æ6üÚ}ÊÜŽì.ÿÃÛî[yÄc—âìx¼ ¦72Ńýe½_p2¯ðà˜z/‚DWñ-ûðyÚm²H8èÊ=C9ßÅáC]Nø ÉD¯¢¬†˜–GÓ’åeaS#§\“PÉÑ€H&:xáÚºD%‘5 œºwÐ12‚À˜¡L)Ž´apŒ†HâÈZ!2€z O¢JÞÓ¥1‘x•TÏ DM3%D’b d ©S©HŸ±DDË0Df“K„Θ@ˆñã˜hà&+zîe"5°2’¬8hJ;GÆ.Z/2™ât@d1Yâ+ÉÔÊD9†"Kyž#“R’„>‹EÌWb1Ÿh=³›r|±¥ÊJòY½<êøD𪙞½jéáùçv3á„BÓ´iÃWrvPŸì‹ŽÉœ™1qt°æ°»q¸üŠÕ¶zûGÕ+=…K¬È` >)'J8‘´U+<˜oñ‡>¥ýSíÄJº™ÝW G#Šœ6å8Æ .í–5ˆ€èÑ5P ÜP Zˆþ- f϶…ïèî­¬Ìêźµ Hƒ)ÐÞÓ¥òPöï"BþÎ}ûMÈ /{¤áûÀöÝ~ñ£µ%þ4Re”~òq Ø÷öý=ô†·¬õ_&aûkŒº·‹ïXïžÝÝù¬šÀ‡×ÿféõ•A=†±o¶3#Îᨄ+·Ùº^'"n Ù*4­Vâ…¿Þ‹ÁŬ„;¸ífgŸÞL°åVºÏ±_þAm‡µ€'R «{ØÑšn<rH`ÆÃé„Ì*& ϧ:žÒqOHCº ìÂÞXŽÿ<ã[Z¡;À òd°l™ÓÙ6Óš×rRpbÛôÁyÑ’++OãvµÜû™¿TŸØÍŠöÛ8\Ðýý¤Ÿí; uOÙWWìåÐÄŽý®^l–È¿& »;AÃe˵JÅD Ì'ªk÷"|íŽ5Ë?VGGªá¹FâtsÜîä+gØa7ÝÉÓÕøÇ•8NTcŽð‡ïŽÝÇGµ•µL…áÁ« ™*™MŠ:Hî-ðŽP¥lKi" „0¼ =O„ÆOBR2D!ÆÀ¡cH £âŒJ(>´ˆs ©—ÁÉH}â4³\¸H\Bá|’΀Ú<†`}iU—!í Ý3I¢"%À¡1YÕ'ªU ÊSI¸ä(âƒr‹$W)Ê!YßYÕÆ;K,’s™è„¹±´}F3>+¸f"2m=¡C* Þ,ÕnQñÓ匊Õ^°Wýgx¶šL¤¬µÎU ÚòVÙ>úäKŒ>ìâ‡>þŠÌÝ3zi³g9~9¡+¹ ¿Ãð’M€HxÚœ=hNJE³qp´§ƒ¸ï0™ ç bMêSw¡‹‹[=¡Ú²~í0Ý€ è#¹€ÀÐ[ ÁÍë¨Oìî¸FáÛÛ×·ìþ-ê+·fcì[ºOÌ„m™Û|'5ëEµ†e$ðO€¾€{÷Û×Ìõ-Rü>žñgt¨€)°ƒj^{n¿yé)pæ@¿~_$œýá’—ç œà5AØþƒ¿Òx`wÿß^’ °8dòtòðãU­$‘¬¯psµ{«7H÷ƒü9櫹E'[ƒÃ²ésŒä¾l¢†Ü«ÜÐ9¤}3aØ‚®1¯qm€\‡íNÖX†—C1ûE©ùôЦ«¶;lº)ÄÜPæù, Af°[‹xó þ‰!uø&ß5UÿOZ5y<¹ WòDÍê*MvDû$;neƘ¨‰¬“p\ ºë„VÍòãÙÕ´Ù® $À)pêíìA&–Nê0ãÕƒ|Rpr67·u¼]~G²'V>ÊUd‡Ž±'1×¥LÚ¡»]ÅQìÔâf¯øK³ýUvSLRµÌ9é¿TÓ §³ãÉ|:·Óø¿jÂÕ8+­äH$q¶v9øÂúœ²œs©gaÉŒ6%—â^ÆKC®c æká½bN„K’ h­!)ùÈ#Ë’Ð…tàcऋsC5¸-¨¾9ᑺDDRœ*æáMK½õ®gÞGÖQ>°)Ó$T˺!?Žâ¶Þš¢»YêÈ…bG…(ÁúzÒ·bŸ©ÛÒ_Uøl2ž³q-¶_=>Zï–,Í·\?¥þt0/ë‚‚ådq´ùèÐH“+‘ݲô2œ‡WäS¡V•õÍU|zqüñ¦÷Ò;†1Ew0‹èI殤§uËD¹U™BE·/s2I-ø„W“±¯åÀ~ýiìö³øL¥/³ÑaÙœ1Wín·âUþ‰Uu!uç™;¯Òü¤%^P*+®F ʉYÙ Ò±;Œf"TÁ‰òÜ…`­ò\ÄBN§ŠPµ ¤t‘ ßPf™Ð„VÞ° ¤‹ð4$Åh¥óœW‘êK†r`£¦AÊ,Ê“¥NÐÜãTKéX¾|¾}x½L˜{¨Wòsò‘ez+.·ƒýNpào¡ àc„ËÐëWÖeÖò#<˜Ð’ìŒ_°²ßä×Õ,à% $ à!îºfx±P.±¥@ŠHÅ9 OŽ„Í*)ÈRÆiöŠëFÒŒ3.eTS$Ú&kâ7aøCAþÔúÿƒ’ó³=V˯P/ÿHæ‡Æ v£IˆÄ¤ÂX‰£“yoŒ ÏsÁ«ç²|låÃîðag–M[úk/åŸÐ1RÁ”›äYêq;ëd–Y¦4­mÄnoÍf]ŸÓ,ô$§&Ù^ìQ Õ4P#«È\ª‹˜¯‰8¥J“é–[»àiyÃn™<ŒâÕ ‘K%óŒ †|4ÜÚh¢ŽË ;»‰c €è0nÉ®ãûÀi)xÉ9ˆ L9Ç´'2Å KišÄ™æ*°¹O&:J¤ÊU.Sj%¯­Ó)E-M‚Ç ÄR?D0Jtä™H D2©&Y&ržxªbd RPÂ28Ãè|²‰€É”é˜åR°Ì'Pâ £)ô]â! ×K%’ЊóÄ…HŒ;O9QñD±ˆ`HÙ96€D\ÎËIÌË1c]Î¥s+3ƒ4„ÛÚYYe­…©·ƒ? WC'š]êsõHAê÷‘—&e1V^œø™Ðœ vòÕòiþ›-5ýòƒŠ’¦|Ì,ZY¤üt³0JJÒž$iè02=Lv|ãÇòIë_4Î’msµùŠ…©Ìí‡l=æH¶G z¶G»ç“”%œö ÙDc=Ö ö®È¿FàÄã¨yC˜Ý>oò ¬ rèV£î ¶MÕºËìå4¼/ÛïØµ¾®Áråï.vðGðìmø€_ ø°-0ÿö”óu­ñ%ýÛQÿ»÷ûo’€½;ŽŸ|›™ù×¼0ºÆ‘Å+k; ¯¥ûðÕ“VH—XŒ2…º†˜[4¿€åÀÅý÷B~4`ö(€#ȧ°ðç(¦³£ùDMéeŠ„R˜¨’*”‘™MõôŒŸ§³õúé.Ý¿HÕ’C™®ìŒ@fP§xf õ(ôžæé .2ß,ú•î}crSÝâ£á‚mI…ÎQjípuñ{ÀàÒÜ„mƒ.þ韑ØÿÐ*RÌjŸeE®Æ=è¨g ðÖØ0ÐF»½±‡"õ$æ\wżò3N~•]jGS^åÅ4ð¾ M°éàyàyµÌ}ð(•˜ˆá÷ –nH– -™×ˆ ZçªÌl)£ƒŒ—“åÎò£']•§B—ɨFö3çä_`N›WºË½Tê uGêYµÖ2–¤R!O AM‘÷D°Ÿgt¨È?曓(…°)±®ƒE¯xz58Æ4+=˜éX–g,A >´7ÂqV VIÎ5‡ ”'Î“Š°y”:))ÀCrHÞ&Ä„ð Bñ`”Ò”#ÑÓD°<°ƒãÌgHŽHÇ Z'FÄÈ áD¦‰¬(w$¨˨ˊê‰H É‘TDOˆ·ÄDâh2>ÂøTÔ‰B$%DúÄidš ê‡äàòã,jJ•x^ÙrÛ Ï¼Ï ‘6 > *T¡i¡ÁHŒCèMØÈ®±}[ì#s™ã©-BðšP*‚>æ•cbg8¨V~7¡£˜‹p©›I&N²Q6fë =Dœ»vvÕê²0}ϸPû“uéŒösÑ]þ—¯Gvxȇ‹=³]=ìPôØ`Ôc{[3 %6Ùc(‹)û (°eo]Wû7 ÄÝzœCõ0_ßuˆU…ÕB^;;\@ø ß(£½½'[zo¶3¾µkÍ ü DzR´zµîßFÖÙ7éÒw\.— HÛ7.¯¾eÁÚ„/¯þf ³h{ïkÀ÷ÍŽþÌr?Þ~þ€š ˆÀÂ"¢°Hwʘ3‹z –Úd^ÄW]@ÔƒlA{Lˆ&ï\YÒBö _<<Óõ#eg¹4ù‰ K#³ò:àJBOZ¶U-ήÏiyÆw'GP±¸þCo—²?š+ §WËóþÓ£j9l³ºõv4þ®yÜíËNãBaQ/Q¼L°=GA0ä¶·nö*à_AÁLÈVXVù²ü”è¢31¯©u#¨àtà„ŽfkcÏý¥*/ƒ£ÍÿÂÒM£ÿ߯꯼”Kö¿ùͼéÛxØvèíXwÝÚÑa’N·{Ö›˜7çý/ÆjÄ"ŸNš1¿¾aw#ì *[™ŽïB³ƒ0–Vè˼NÁ ý¡í¸àµh*½’±žzZ‡ÿÛšÏÍM5îª_Ø3IgÐU H†%̸¬‡XˆvµÖËLd±gaˆ‹ÿ“}B©Sâ%ÏÊXAR"†.Íœ+¨iŒÚQ=äå,ˆ ´¶ÒàÄÕŒö£ö^¦TF‘'i“·1RUiY¨Äá:Ë´'Hƒ‡Ó`H’F¡‡(º¨8±‘…;Â,BC$6ˆÀI"yJQŃå‰2cZ<ëCÝÈHäÄH)eÁ‹ªJ”˜„¤`‚ƒ)bÁc"„#eÁÑGæ#§‰qF’f–°äƒã. ¡T¦qF:$8#ƒXðüŒ²š!A{”cçˆHD»d‰D;m}ŸÆ]ÜÞ²wnHˆ2«\dqðÑÿ+Ú+?² }š=°<Û·n£…:B1R) IÅ>EÚÜÔö*Ypö«4h7˜Ö‡Ð{ãYn[R3Ðä™~>EªÃ🦮/íLU‡4wÈ#Ð 1äFâ™ÅRNqh)ú¶_£·`Àhî€l©¨åwa‹·=ÞƒoWY†æCWÀZÈ=ÎC»vÑN†òžš½ßòwïú·?¬3`Àý1ø9hoõ× ïÒÓß‚Ò ìî{îNéçN~he€ýAÙö߇õûfG)ïHÿP*Ó{™o0Á9ÇFàÀ Ó„ó~±Î²‰Ù@ª$ò§QèÖ•W¢h:2!+,˜Ý‚ÞJ}{>Þ±Ù@eѯÑÚo¿lùÚ°w kaÃñz²zT&Q²žº‹z¿«-ÜNk‡`W2^9Z­ƒYs W_›~5Î’«—ªš¥O¨ævž úº”J ¿ ƹN™ÑËg®¤]««IVÙ'ÿ=¼Å7 rFŸÏÜ‹5>°(°ª0k†WGøì#÷HÉiòœ€ÄÌ6´ÝÈv N÷Âî;°á÷íöÏ]>žýK—mŸ± l•§£÷Õd{ 3yzÃÍýê#» ã2‡؋aš“ÉÀª¦´©ÚL³Ãxe÷öòéû¢<9ÎÎŽvýiÞ*äƒMÌ[” ãvü:N[›-E¸L\9î²l/n_Í›q§JûtÚ¤iâu–ĉa]^ÖT憩±V®¨ÒœÐÏüôQšŸ¼›Ó ™Jep雦û …Al¯§3IreÓL5Õ4Φ$Rï$ÑšÈÌ3>:Wè˜-©Ît„æI P Ø®\ ”%ÉXâi´®·žø ¼3ÑØØÇdXˆˆ‚QÁ¨N"‘àX0ðmäÍ&D)JR ŽG˜,¸* —^¢H Þï‰5Ƀ‘Τ@ú¸‡WðRC"‚L#q‘&i‚H‰ò˜È‰ ÑsN2i¢ùíI ^S@$Ê‚ˆž Nå˜vÞƒô½a¦Ý=4,ˆ’NXÎhittynXpÿ±þ%ȲõU™®F×Ïõ!'ສ /'7/ûÔúöUÝ] ¯‡qVµ2‚dÄ«‚^Ö×¶²A R".øCp&4µ’”ZQ"À)×BiîOSbˆD ŽH‘ÆD#ñ„0ÊHL)¦Á“KN¤à9U3Bb€óu >@0N‹! AQ•EhGˬgCCâ”Æ²d¬ <5ݰ‹„¤¸ËyGúÕ„ˆUëó<YxÍ[k|ŽŽ…Ž–ãQT“]ZPÙÃu-º!ìÓÅ+,’Ò“Ý(í„}–ñr’&-2¤Ú¨˜±F\8qîcjN½­6/év#IGBm]Évzšö³åæóÏ`PÕø€Ák‹ð@#KœXßÅò¼­Dxmô H<\9ž.ܶø†« ÈŒ¯ù5ù½a÷lx|ë·ÿôõ>x¸/ÀzoÅß~ïˆðmy$@ ì¡æ^1”€…oõqòÍÖüï±7Ü}X³¿"ïÈ}ÿÌ•ã}Kí7ÙξKÜkæÐkÅÚð]?Ê*Ú@?戋à„zòMó2múѦ»>O%”Å @1ÆO9Æ ùãYaé™×2.ç®üZ¯P¶q]Ș£¡·4Ì£?#äϵÿóQ²'µ9(À‹ r‚©A¥d&ÿ™ˆ2º2¯b¬x+Ý¡wJ5ùЛʸ‰Weˆ³&“a'³íÒâP\`FžOÊ8ÔÌ`µûj.¨²°Œ^¨«Óp8>T©-›…žÔµÈ|à„K~ŸµíÊßhØbCÓ¿L²´µ¿¯uÛô_¹uwœiº Ã¥MÛÀ½’½°óûÕžu䟙4ó’*ЇÅx¾Ì¯6U»Ó ÙB“Ó=)o'—“é0fƒ gêÀó Š6T›ùÀ*ðj3ÍdÅÄD*´Ej¼4ÂÙ,Ó3ØD†>äăÍOªŠÐH‚°Ñ¨˜(Õ‘Ü4)¥0xë­¿ù΂ o!ˆC´!} "²¤h`41c$̱ˆDaLp6aœPBƒãH¢#ž–D JAh"qDbÑö¾ëK­±½mz ©*4jÂÁ)”4Ø@Èe…ÛéÎÀ˜@.¬´Û ö. dÿ=†LÙ×8¯„ýÛ˜sO2VC†1ïq{Ÿ_c¿S”Ów‹þýrôFñ“Eµé'i{¿}|ñÖ¸)Þ‘nÏQ­Ñܱü=ö†ï4Xû³OI?²0ü5Ðwß¿Åný€Ù›s7¾SÅL%æ×P€Å7;Ô€Ccí¸ÍØôË™ièFÕx¹§Hs‹ è€Ažc¾µ €ÌÂAùÆ@Û×Lâ+‹Ý%r>nà³›Ûîã~/¤û“Gø  ÉRŽùÎò[PØèÄ®¢Åú±s ²zhó‡ ùîŠ µm*M^ø)Wåàž™I”“6WÏÜEsu¾¸$L¨RJ¡¢&ÉÍKÂÈM4’£¤˜gç2ŸS5[0^ùèMjŒUpÌa ûÛÂêy!xš1›ƒú)ů aÿbI¦µû˜¹KµÛæäd,:x–¿<Ž)¹UÑj’KÓ•ˆñˆ?;ƾ:ú4m—âÉÃ2²d¾Ùd7ÿ?uoÖ\é•]‰­3óä@$“LVES%«KÑ¡ù¥á7ÿY?ù©#Ún·#ì»dw•Ä*I,‚$™ïðMgÚçø™d’™¬bI­–u߀‹{oX{ïµöZÛTé¯Oôvéð°ÓÅö­•ýEÇôb˜kwøŸÌ|Lñ¸ª%[‹ýêòKü•÷7ÜSk¬W-çÚÿÂ÷ÔÚÅXh{ÂÐô̼¬».×HÒ0fD†Œsˆã˜ö:ËÆW•ÑK™µN^¦)Óh©˜²è !'®9˜ÈT„ÄÛªEÝ0.(û8mlHÂñ …22&Ɔ¬‚FÊ¢M,†!X!ejot0|Áa@1¦HYym¤VF(Sv‰ÅÈ‘êD"¨LŠ©ä²K6Gn'7¹i”.2—ɉdÉQ¦Ä4çŒI“*&UV!Î)Š, Á$äœcNDN 1ªÈ‰—œ‹Œ”y²9†œs&³•ºJ 1) eŽ^Y–@¦è}´®˜¢¶L³^°±q+ilô¡> !&'«•´RØÊZ1ƒs!¯(ɶcÅ}ãˆ&¤Ñ˜ñÉrD3âÑæ dá—¶?¤âsVõ•â·ç»Ãu¢•g+5Wý~$µÀg5ÍÚÀ>p³Æ‘€QÜøØ=àÐè ãù„˜9‹òj©1Ýÿǽ“Û8lï€ï qoü¨à×ÀàÏkøñûª€NÁ·H?dsó NÀÄwÐGoãò^ùæ¨Zü%õnY÷­£“£ú?”µ÷/z¿áš~<é¤plð¨Dq¤U>¤ÝΞ¡¹ÏFÑxú‘2é'èÕ|qñ"ÿ QyX„DðÌ=ˆãeu”6ÿåŒå%Ê3¶G¾óXžcé\6ñtÉô¡_ÑíÎÞ4ʯýÞ.›Ç4pµ™ ‡ìMñõ¿¼@¤ ½ˆŸ|xc=ÚÞ[´ ؃&ÏçOWË Ò²Kü‘³¥»ÚÝ•¢^Ö‡¾1×é¥y¿S’?êú__]ìj,56¬a˜~#ögµÁI…Ö­n_l“„PËs–…MÅš&_F1ŒlMÛÛÒ}:½)”áºì’ûÆýφmŒk_*ɶïÕå9/D²åÑ’ÖªnÙK5vYÁ>ê á´¿îz¡?/Åy.?õ-:¥»]müŽ*~»zðåTÿ»)ž–Å£ŽŸ=h´ÕêÑ2ÙN‹'¥¿nç¤øÄl’QO/Ë\h¤vÁ˜ L+Ž+@U)¥ZsøI·ýh.ùXnã&–-IuS…¼Ô.él¥HRf†¥›r„D,ÕF¸–£»&/4 d ÆÁ‰«%`8 ¸'•%k VW‚d™õ˜xˆ²Lº’RW‘{Ä)‰9HeË„ŒÀ1 “À”Q4†Êœ(S"x™½T¥Q5ÚsÉÁÓ%©çÌÃlyˆAd!æÙæ¡=SYiÉë4s«ƒ((I„,™æJ¢ä‘ bBÊÀrÈä3e.¹ JÀ×” ›œ'Âà4÷Ü3©³–`Q¤>G措˜Y!Jû¸³ß’»|×ðÞ¼:—ŽðAìÕ¦Ìàä»ÍÿÈ«Wûôîíæ•{Ô X ÿA ô¿îßÑò~×TQ»oæX·@>Âf—Æï¶Ý9ÿ«¹ßàÿK’×%„¾µ¿ã9`z¥>ò˲—ÝŒ Š+Ø-êS¬éåBÏXè¢?Ã?hàÓö•Sºùˆ?ÇÔÞ R¨™êLUvÜ´C¿ß]ÔkB=ÓGm›¸¹*ñùDØîôZ{öþ§áøÁózˆÌs[VU5_eíXú­þŽzB l&7!t/|À)ÐðBîýéJ-V‡âÃF}ä«V•üàòm]A¥2¤£½nNnÜë…)±z ¶¡>ÅÑ)Þó)•ÃK\¸¶cZ%¿5ÑUKñk+^tÕS^´Y'wÈ41û|å¸Ç²3]¼*Âm"Fì/ÒxCeØApßbQ(.Oß3t «VVÙõÆ 9`ó3á¨á‚÷†í:ó¼)µý/¶=€É£üòG@Ê@^-]µ{\ÖÕðÁ±þs}ò¹:¾s5‘åHF V•t±}ò+½Ái:]‡“Çc»JÌ"G¾ô¦-ªê1ðEYa}„ç 9xÓ~þ@W8>Zmbw/¿è·7÷.¿; ÷ÑË“T©0O?Kê=Y2nнÝÄ[ëB«IŸäGÚöûºrƒ :.øO¶5os+°h½.ââ >ÁЧø“󛟜©ð“òÅæjjslºdÑw):µ;”4Þ¨I›Ò—>–Ùß±Ô&uRʇQgýì&¨‘™ÎÄ'áÚD¶ž6|/ŒÙQŠ£´ÊˇÍñ©©7%+ÛìTä½X[÷ç´+@_D0L &צSlÎÀ0 _â&Æý׮ą×óf¥e!»vª˜(‹B‹&³f¼~¸¿º¾õî®Sõ ‘Ç Zm¬^S<=‘‹÷çqŽD¬KÞφñFÏs]ŽUŲÖ$²ª(E­ÆJˆZ­KS3Ý%PÌ1‡˜¤á¢‚ª V˜³œ;çèá"·¹öyœhϳ+RB1¨’9%—ˆf,Ï\ˆ¨9iÆŽ 4D£ •ËOø1 vƒµÄ…Ó»«Óç%|sy…R㲺èõ¹ôeÄÁÐV;¡1&´ôÓðþ,á컫G¯ ÙÃ?¿Š×ÄÍ7åáÖé %3oOüØ¡ºoÁ×}‰yÅÛ¬__g‹ßítÓ÷¸Ü/¸Äû*1ã©zç"èwæ•úöý³Ö†âÒÕ?b1é›EnGÉ£Ú½Ê(ñ‰Çu|¼Ëw/Üoa–PÏX£6âZX­¶~TèJ/ßÿ®šÃØL¶A°r¼#Q²º0Yqߘ¡TM¥$Í2AW1—¢¤*`—\j©­Ò$±,¥ÌbòÙÏBÖZJ0ðèȳœ9©J™õ¦€ZÈöìܦ¯B~’›eYòµ^ÔQ¬y)ymºÚÊG'ñ@€=Ý>ç Ùü@\Ç«xý—ãVsàJ 6¶ŽF¨¤}<åÅVq#HJª†¢ºÔf·|&›e¬Ÿ@DœTÕ²Õ¢ þå2ǵ c…ÜÒüQ!Ò¸Úì7ÿÚv_4‹¶Çͼ)™*THží¯oûKå9»[­Äê€so.ÍÆ+V<⟮ؓBÕÝ’ñ.én7'JœÃ­¹vÅ~àB¡§¢·ëJ׸]rç™VŸòâPSgŠÀÂìùoÈ}÷7~ÚØø?Æãu«Üìÿaº2ó\__‰ã™ª¬!!ŠXjÿ½oÎlýg£x$‘0\ŸŽÇ_ù—[ß.ÌÉŸšãg°dÀ¥{¯ìÖjSÈz FTGêñJdȲZõÅáHêj,K™íd½áÛ<ó£&—ZêX%o¤J…IQ±Hx”g„™µ¢"sÍtF1¦)fÏ“PÂEp/SV\@3(09ùxÇÑ»œs™JÙÔZ©cžHúl¸ÍÙ“°’qÎëqæÓèÆìU1fc½J6:e™CòSçrVM<9±ÕZúåbÅI|Üy¡êbs§†“øŸ?[Œ?Éó¦.I«BÍyˆ_¾Üõ«Ë…Ûn* cªFµl}g掦GŠ•'B­ÖL/ä­]O[CY,îÓ•Óש[,[¥ îgµO>‡í¡|¹9\4Á6qâõð" ²«-š—-ý ßÂÚOFyZäõÖ?7»/ÔK5ÒÏ,±m1ÔúÖ…ËN£ì:!´úìÿŽl‚-f*–ùˆèŽ®/¢ÛV6¹]Íl  ¥çœ" ·óÊ —BIP4NËDBUÉ4 SòBÎ. ;â¾;ñ²« Z³WqÖ‚s‘Ë6-™XÆ^Êè@ÄzDŠÜ{ÉHŒ˜%-Rj‚“¬e&û)¢ÒC,²*=’Æ¡¿šá"qRV ˆØJo¢õSjÁÅÆl¥Æ0yÁ4|eP.ËOíæÑÖèc7­ÂUKFX†\°ò6Ío†2œ‘ß*Uz´ G·8@èôˆÉ×f‹øº·¿K÷«D Ø‚o_ß}Ý €¾ýò)`á/ߦþ¿C}œBœƒÎîŸÚ}Si~”'Ç÷'ŽW|Öõ›Cýˆ ÿ¬œ’ÿÇêÌÿ”Øô‡â¾¿Ïzä~ÿôæ&ÛÑ›ÂÃ_öxµ|<­[¡á{ìÝõáa6MŸÊõ…~‘Žúíb…ðð å$_º¡ºœ Ïl ƒøúªæ–­²°®\|—S¼¦Oü¢[Á^¦d<ŽU¥#},ô ÏWéöë°ýtJ1·1‹¾ÍaöûB| Ri¬ùß—›§Çòi3´)ÄMiæ¡”Y°ÌÌÚµ¡×ñn"ÉÊ%á‚Ô=ñÛ›@õ\V{]â°ƒ:MÝÛTë\WS,3ÍZüosZíšëÈþÓ>üƒÜ?ÞÝš–Â+!æâ/ÔÁHo¬ž˜‘‡Òë†å1Lýë‘ÿ]š?r×OÇédÙèRV‹"\v¥*ß'âÏb’­„TRIfXÒŠÒ4—7Úd¹[ Kiö}æÉN¥L«Õc­ZÞHø"øz˜n¢BºuìÆ—|Š6 pÇ^¬L• 42g>{ë¹c•çE°×v¿%'#ÌV¦ÔsH)Z‘[8’ç‰qnT”™2mù4–T­j©$ ¼ÖÓ×ùxpÖÜÖ)…AØ¡»£Jßåºu4ñÝ ®_Цx I#ÂÞbLõ‘l”¢~NºiØòIùl‰ë>nožoù׊ëµòÇÎV½GþÃàW»«¦ÿ•½è“?Eܾ¿AÁ¹m·7ówˆ‡¼ÙºÆ6 7#>ÇóGúÞ µ/Áý”@‚·ßô£°ºDŸ|| D{ø ç€ÿ З¿öxKnh/¿yË#ÁÞ®7÷×'¯ÞT·)°ÿ2µáŸ[Àx«©s$ÿ&3¶ IDATC²ÃÛïÆpZã<ÁpùÍ@·ƒUþ+÷K'=*`ÿØQs¡ •=w{|5¹ÕÝUhƒ"Ð_]Õs?Ú#¨Û¤V–™[)fû¿ ÿg|.³®]Údÿt ;ŽT³‘ì“Áih³­_\æ2¸;fÃ"å>Êñd §9½?rà  |Ú<ñâ¥:*K§ì6):Ú—ÏêwrµEû’M"ë.ë¼ ‘M°sŽVõc³í7µÿzâÅn>«£¼¹‰¿t¯Œß€ ‹kµjÖË"qÕ…tØg÷\Dâûj2òÀä£ÇBè´mhç3:U©ìž:u]zß;{Ñà7¬9©¸·ÅÌæ%ø“bõ¸êN–ZÍ“ßMsOwEBu}Q¦“à‹[óAj¢]µ/f½ VÞé!…ìmÂÍP³F?,.»3-˜W•õ›ýþeß(ºÒµ™cÃÙP—ÜCú»<Ò¡á³iJ³É’¢´2 Oõìoô[Œgë¦jéydÐlhM×궨j]r–ÊÑ/’gƒó)€¹\:œdd»j®´©J(Ø9Îv<ØýÌíLβ¤˜Ê,ã”sä‰w¤ì¥–57)Ú<åd3WŒw ]/…Bgn4›E*’מî¬ò!¤¢T¤¢›(F‹Î^¼ê]Øß û­µ!‹jј:è<2ÊDLF I\Hp–9‘„‡ 0&)ÉÄ‘$rÅx29ÃõˆHÙ0KT¬ š2ƒˆ ŒXä’sž„“M›–e¬ 2‘‚õyæiW¨Ý‘HQÃET¶MÛJéV­æÜ„~fÜ6ÍÔ”Rõ8´‚”™Û•t‚Í¥óv›âáj,§,ÌURrH‡XŽ{_Lá=_i½‘^7V~ø˜Š¥UUøù< 4wYü/Uéë7¼V«^°ß.¬*v×éòvïq‹óõÖ¯#¤ÀËù­D†‹WR$~§ÒŒ¯ñ§Ç6¾Ð÷€<¿?Ç»ô-Ð਀Ïáïä/ßqcí5¸µ¿ßC={#=è‡Í½Ã]ów8›w¨o|zõ_¿6ü—’ „bqøûÇÖŸùùÀ<è»#šBœ÷@ñž"â$ùÐß®¶f‹ëyyg€¯2×§ãtްµînë_ذùjÜ tú¡½YâS=7HíaÖlæK1év»G‘~'2u.5ÌŒÍd™ñyrÇÊó]¸ô‡¿JÓâò%О-_<8îÝö}&–î7Ùý‚åµÏ)²)±!ÊFáhšxÉÝ Vï"û<ópÆ"\š³5\À?™§ÂçxàŽ‘æìËii>|`ÄR:¹ ȸ ñ¹°Þób)»…4,ö0S†Ê7‹Ø(¿k(ôOûé¡é&Ÿ”W/óòÒ2š¦¿âb‘7]Y£åýÁ…)ÝîJõR?q­/…Ï Â†A,³/6i¨ìÕ€;þ›,wľžç»ÖœæVRþÂÀGþKŰÖÿ Õ•Át·u)’VdYf“Í‘±«žU%N¨£ yp–'ÇÔèŽôõh^üöøi±?+‹k ­Ü¦]6¬3hy–B .œ"sº%xŸ×&KÉ7"U@%ùÈÔB ±ªBQ!G’bw»©Ïv”dD!“WœŒË5§IäCö)ycÝH^"Pb!+#ÁùƒËÑêV”Wº«å±)H+*hÈŒ¸ËÁÇsfÜ$è$ D™‚#Ä[¿hpw¨è°Rq÷@óEî;Ò£úBröﲸËá"…¿¼ÉO«6׫’ë kòÜ1›ÕÏ'Ÿ›òÒ?¹óû:ª‡L¨¼¹JÍ vURÍn³:¿Ùúà9`z`Í}ÍÏü!û•ÍÕ$£šá t¯ö->?Œ@ȯ9ì¾IUZ£ƒo4þ_½ÑÑ›o¿ÿzJø7¢¹·?2ûáŸì ¸ÿtñ_¹6ü1´øý°þ–bQ½Å»Ý¼{ùÛ þ=û`áßfî”@°·€Z¡þ7ê¸ bw{’ð¾¿cOî¦õÅWÿ謮qÝ£îô9²Ç=>ûk+óÅ'øp®Du´°“AƒóÃI™x7äÜüî¬âEø»Î‹÷´<œ]‰'6®ˆ~,~åf,j­`í jEgIÉœŒWU>JÍू” jöP}hüðƒYº‘¸M¡îÁþó+Z6ÈÛrøÏŒÆUÞî+ðŒ‰Ç!ç|´Z9Q$§ú!/帹!é2P‚Ÿ+xô̺]ØõPU-ê¸ñA©¯6¦ ®Õ~]ÍN¦”s¡›ÇÇŠÑÐÀ-ªPJÀH&äc}¤”Ï™rÁ kaZJ‹œåL|˜Ìat6F7ïÂX$¸»0®ÏÄE^pŠÚ‚cŒ‹ÂTBx‘™\ ’‰q 4˜ÈLRh)Ï$¬ˆQ%žS¡¹Q|$º›óÈ‚fåIä!‘ÐTÆ0eˆ#XGÒecRV"3ŽÈ(úi¶<¤N(m%¤ Ž+›“ö1LäY˜ä¤BÎq¶$‚q™)²à¢ç¥>¦ÌxǕД³RÕDɸôðÜ1®XÉŒ J¡¢œY¶)E›‡™‚·ÞOU˜-”*¤Ô&±ª”M]˜:Ûl3w\ضšFÃHTiQʲŒIjlW,©#nd{ÉÅVTŸëzÕö4%>pë)^ñ‹Ñ߫԰²µÍ~8àñ_«ê:7 Uå$Ø~—ë"—ROõËu5”ÔZÕÙ£ÈãqôMî·ù%¾À”ï¯OÞÐÐå—Ÿ¯šË0>Úú2B”Ã0ô(kØ|Ö §Ày'ü‘Á]Ñ#ØÜ+—ôL¿ÞYúç3ütïE¸ó˜À¼5%|/Òõ{òÀt?¨×)qÛw´ãú£÷§+œo?ø×§Eÿ#Œþ‡*“–ð7pïø3¼xçFì5vÖî.f†þt¨uPÇÜ0ªÔ‰¨>ã­~°: ~ëÔVe¨5Vá2j‡£Âµ×ë“O뤸pÀñ1Bë¥:ÿRVq[ëíV¬À7 ´i ~¾Aqó±³÷íüþRoM{A«‹eûLi¯´Ñä°™ÙøÎŒ½²³»ywdy!xcb¨Ãh7ªtq`»ë n.{ Cûi„Ùªr~ؼè$ ›±hûó©ó¥ü?\õq!~Ê¿–íeŠ¥ÌÇÅe3d<âÑÌûê@£ÐwêÓçu['ÇáËÚÿÆÎ»Ä¡*œ¨hƒŸ´p*ú~µd” Ü»ð;)žÀS…ãª!Q‚8QðlÞk~nö¿]•Ãèúss u¼"ñg½_ ´¶ kÎËîF²¯9qŸ>eÅ#Ÿ¡Sv|P±²LMånœ^è A·DY“O¿Ñö¸‘UÕüÔM,‘ò¨ÖGU]š #[ËŒ]Ê}2S<äèæ1"0ø”ãz­ ÓH’,ŽNö$ï¬Ýí½÷¾.($Í›c ’k!„J‡äI%°UÖ2 î)å¤(‹Ì£ŠxR)Qj0׎FŸ##Ë‹¤fiÃŽA WB¹(É€‰¤—*’L`›¬b²È2ÅàÉÅ0M»´ÝñI¨Úper€í¯ã7Å!ê$™ãN&Eb*S̠̀*e|àÙ虃-%Q2™8'NBkY·¨’góè‡Ñße>˜¢Ìéd0†™àÅ^ aI)uc¢Ø‰Xle•U÷y.9õ㜫Ï™ÃByM¿êÄ¢¼ž/ö‡ŸÌ¾¬\2΋G•ÍÀßßMW•+æeRv5>…_)~çÝE,zTéÑc¨‹Êzm?ßÞ‡ÍÝVàßÀ±ÎÀ?x¯pp5B¿‡4xìÏ?_a§q0È÷$OZ`ò˜_×½.Љ¾õ7|s“LΈø5 ;x ô€E£¼ódò7òÝo7ó¯ÁíMðôçî‡Pô!î™]µá÷³R?BÍÿ®µd ~ úà yňt?åÝý½Îk¤ék[Ólø±w*.fþIê>ÓuRágœ_ªdвþ¸ÄéÙ=¼9,¥Óêpǽ1&¦J?øÓ3ZCI<‡?èÇØ|Šq¬V/È„JY‘9²GëD<ç<œ 3ª…÷ Õg1ÅÆH_JS—pQìdrØ_ß˳iaëzž §»s7ó§gÅÞâåÚÏœ­b5î¯ÀC}¼bóG{ÎòáAýwFünz†:ý¹zPV‹ ©t 9—}„Îdö³;›R|‹#Ù<9I^ˆ²\çò.š*]ÏqA¥šý‘´¥¼mäûbà˜ÝVºsfžXLêhö9¹p‹4z?õY:틟Ms!€¨gÏ´±«é¸`ë뫚êú¥¬ôd{7]ÌBÆc®Þó|Y«“®-“•–íóTˆ_Цoóßu´Äi!ÎcT<_—úé”ëçà)¤¥žuQ€µNêA亘¬U™’6>Ög•X5SòÚD#“î6Í}ßÛÝ–ìÎcÜ vÐßQ^Ñ^¤ªâ‰ËNBzÖd’ñÚLñäbÖ’ Æk!Å«h Td!eGH:!ÄãN"±‰eSð,´æ€"–ØÈ8åd8à­HB@dä¤(V iL!ºˆÞÑ8íagå¥Ó<’÷9íœg#ÊÀráûÑÔŽR.Ã1§JpÊI RÁÙú]Ü{q%Ì]Ê4…›+W þ<‰\@D£* AŽ¥½IHÉá"w,„è0…0‰ÕD2RN¤dÅá«J•í‚•ÕAº9„Þâ`mÌìDòeÁ%p>•±P*9å®q銉X;Ù“ªfs~ØÖÎ!nZ½WåvÑ®ª¡ä«–Ê2~ æõ‰¶¨GÁ'FS¸q´­ó†‰ª¢m3‹$B*Ó¥x©+%þ2wWøÎv‹þžLžPú©}ånó3pÌÀ×ß#Ÿ_)v^pçîÏüN¯Fâ{ýûß>ÿõê§ï½¿zbŠz4­³x,UgÔËZØ($›LÄd%ª¤$D±vU!„.~s6VØýْܽeÙq%¶¶ïñŒwŠÈŒªP¨"²‰f‹”Ì(3µÉôßzÐSËZf´6‘»Yj*猈;i®‡œkBd·H·¼qvÜ›'"–»/÷µxXð¢yxýàÒmŒnn'?_¶éjIhZ½zá7³Ni§ågçý¼ŽÂÝxèî Öäo«ébY¶~vùZ]ßÊñŽ4Où¦ÂQÒ¹LæÚ<]×3zàå'çÍÕ-ö{ ûñü+#/骄þþ…1wªÍŦÄ¥IªuÞš¡Šùy2OäÝ!š¶8ù|ñšö¸^×sÜ6ÞŒõ¯J yúÏõÜ™ð±vH.ë¶L'#Œœ*IÊéóç!îŽ.'•ûü›Š×^˜”ÓcœŽå2ít­êÂÏårSšÜZ]B™Û ñÜÛMU/•ÛL§†ò$„Ï÷ózCS¯ï4ë;«n‡J¤´NÛ¸J6r[Ë_wxÔBBÏAü÷»m!UYö²^PÙNÔZ§dr¨hƒQÑ,¬cU xÁƒ˜‚ŒH'-SN2éEÐT:åÛýét4eÈ„¢ˆ ’`^ël…vš…P”V:Ñ(V(29å¥ ]Å9³!2,䦔*²!E…¡ Ú*ÛJ¸TyIÅhÓ˜®UZkW Á)Ñ,±Øàiôœó2êh‰g/K,R8-™§©”\B.I$mƒ©¼‚¤"#VÁórœy„²)Š0Ëce ÁªBK+ŒTE)¦ý4ßdšŒºÇ˜NóË1>]2©pÏku¬B,ÁJk‰Y@sŒu†•²b¤$ŠÇ<•1P¨);¥lŒ’»Šjër×ë¾w¬ÌÙ//¦äoYž¥w‹©#»JKÃŽóä3ù£ô‘‹’Ô¤pbo‹Z²_…ôòEi+!kúz–½Ñ¿›S(õª½>v^w÷²­=rœòúæ&ßèÛçTÎ2’už‹¬%óú4oÓŒ‡I¬×ÏmÆôߨÆÎ_¼Ú™³à p"@+ Âæ„ó æíÒóJ-Ò5 Œoäß!? Á•ܸpxO·œ¿ý>¨~x¦'XcžŸýÓ€«/ßûÜú󳟙ÚÝ­zýlYÕCv½,rµïªØTõ±2XÅŸ/œ2(]vJÜ3Üþ¢¿]WWZì^4zàêgýŸêóZN}]­ôX¼,zÇ ->¤¥nT6júK‡Ó¶¯V»—u×߇î!Ñ]û_Rykl¸ÑrNYŠ»›ƒ6²B¬ŒRkœÿ·®®çù>_lÒ¯ÛÐy’NÞQ‚Ja}tóӕܳ½Göãg"inêrÓÉŠY$7L|@ÿ´Ä¦ÞX¶~l©ÞõaÛÉ;ÍåFwœ³È´?ñ<‡Æ‹xXUÿ]!KªWòBó™]U d’ÊYóYå™ùbé´x̳婖]¥Cœc‘—\T©Áq“Xb>†i^‚O‘±Ñ)×1[ ˜T„š}*L6ÈF÷®5¶B…HJDB'¡R‹_ÆCr–+!ô’QЪY8RûFÍÎZg¤R,!™)”0NK©L9æ˜æ¤Ó)•ųuëÏ>‘C1B H#-EVBˆ.³BäsÎQq#àbĤ\Ö:Eè¬rXD‰E„¢sœ¨“rx5ÃL©1.ÑâÖ’&´§T)‡µ‘:ærZ¢K¡W¶Ê@r N…’“"m3‰ÚÆÚ˜Uå`+­Œ*(”“œ£™”TŸÚÖF)8ù’•¦6aL>‡NÍÝdbDý¼ß#+ò/‹º­Ìãmù‹ ÷ÎS7쿺_äΜ)/¢•«auߨ÷<‡ñàNõ;-õò,¦®;î'Õ­}Ô/ÓE:\‹ ÌÐ@SáœßÂî H¯¸þd¹v Òùß☠ÐCšÃûnÙ¯ów ´7ÓïÇ¥oW>‡Ÿ4ÚsýêýO‚ËüÿÏ=ºÍwzÅÿ¼”Ñxù(ÖáÕ~žã9ô‡?† TÀü:\}Ø·Øûr3zž†õ©yÃíƒã“.|£šÅI·ÿæHwö ¾ü,þú²ìº%)t›NâãÅ_Ä;nݹ]{9·iÚW÷´„½}:ŒX=:qâ '¡ëëÝÞ=GOm³ú|–7Oš'ÿÖ˜›û­ÌÊ|lºr1vWŠÝ._¯’¥y4¹Êò^ãçé07/Q_©ßÙi¿þ1›¾irÚç<×Ï÷W¤bÓß¹l…%1çr(].ޝ>êþD.Š&©?ß­d¿:®×Øtå³[¥ÆdÍMü*L{CÉ|¤SO¾h uΈS‘Ît¢4{ö<ÿÍmüUÒrŒ·íørÍܳLùxÿ¡”ƒQµ—}]I=»ÐKókIvVLwf)¯4©ËаÏñ·+³­.Wíê²mMWéL,¢–‰ê)g!Wr³éÿ—ZÿÒç<{_èNä5éÊ`ÄLŽS Ù«´EfK"Œaº9ºaeGÍkKÖk%sàLifµ/9ç–¥Ì~™r©²¶)·’*‘eUNažK8¢Þ¶ê²¡MU걔ȜAÒj!„ !sF\æó<nlŒ¬¢W¡8.n %¡Ø\šÂ>/Ȉ‘EöbÊtÊKÎ*x[Rq4'=ŸãŽ7Iº„j›L/ÈY)jèF¡Ú$ $ù$9ggà+"I¥ÔжHYHñB%Š4ú˜&äY™ì:)—(@IrUV%ÍGÊ¼šº¨µ:)–$j¡Mv 4K˜Ÿ‹feÔ+„etÅë% $È(«!‰Œ‚¥B%•\@IÑÉF‘κ©•˜ò4sðEˆ$¼ŸÃ<ÏçÅŒA”YóÒكʇâiXªÿ[ß­œR†·õ¤òo®Ž-¶Ú_^Î’{/x9C>ÃWU™ÌÅ¿±Ò[9qêO§T$×1¬Úz¥6‹Z «LǃÃßÀ®üïoÿð_cø›uÐ8Ýäý.F€¤òž}ª® RÀc\õù¾ƒ÷«®€  ·ë9?¯×V/ÿµÜ%Þ¾þ¦‹þ¯dÀ÷¦ÇWê»7݇*Šøí†„IߦÓh— IDAT_Ç€®Ã  ùð¼÷X2¨¯÷½†³ŸôöOܶá&ܺ™ò'¨¶Õëþz¥©]Êoªô»"/fWòéŒSÀAÔæ0å/aTûhgaž˜«_^ØÎqï ¨Íâß ù˜ì_¨O~çb·i P¹ ÒÂݹÖ«üµšÆSj‡h†âqÃîNߦ•ħîâ?• sZòúbÒêð´þ2Ú.â¶©” ªN"úC›ô…׿.þñFÿÕIn§óå%]î¶zwɶ³}s·n·ìÂ\„ÙHÊ‘+=W‹ˆDh+‘YµƒK+Ý]¦ÝÚÞù)äÏtåb~9OhüL¾ˆ[Ec]û_ZþjšK³Ôìs.¬°³þ?¹üE4ÍÚhU 4$þ½r[Ó~\7‘j%;%KÛÐV¬?Ê?‹] Ë3ÖE›û’·ã9,Ë!‹ì3眉De‰•™G©½¢IPádçÛríæJ¨»¶·Åi’9ÄeNÅÓ·¦Ø* yÌñPžcúØV>*c,UJÙ´̬[rº­/5õB4Ù#–I¤RTJD*ƒX³Hþ¼çkŽeïꉕÚ$rC:_óItRT\Õ(5Æí•;+y’‚(ÍÙj¨Êû,¦Y¿Lù äÉ“´e £ ­ÐT*‚劅-Yé|J˵ c*æ”JI¥XvRfm¤*BæE,:JK²ª ‘®ÙŸŠ"GÏ1ݪޅ¬¦¶D. löfñ2,{E‘çDRKeLÞ‘÷Ól‚IN²%³Hs*)ð8çe#i-Ø91› |*C^NÓËó°âìëX–¸c½‘—ìJ‘)š¯o€6ÏX®íéK‘'wúeó@Ia«Ó­ÿÊ¥—7Ò«óÿj›;¯ö¥ßu•Ýep9iÑ-©ÃbÃôxÏV–²Aó)òãh0áñw$`¯ªF˜žÞ¢Çw ë lÿZUúB. Ö_5¥_ ³úwÑEB¬"ìq~ó¯_atyߣõGF:º\ì{°ø_TløocÀpP·ïr„odžoÇ* Ün^õiöïZŠ`6h‡<ȇû°_°¿³@积pÍÝUnŸ! 8õ_Ûp%«?q±Õ’wÕxjÍ97ú:ʼnp ›é8ãx{¥A7Lú?|³­6Ô¬ë¾iqW+¹ØQtOõê‹J»íµ¼4‘ŽI•Ô9ªétžT^rüò®™¼ ØG­“ºŠ¹EHˆl1U²íD›_Ín‹xï#ÕþÜŠŸý¬T—UÖ«Öv®ÓU›LÖ¨ÙnVᜳ¦‰o¦yŸÏÇ¡Ž¹»YÔ*¯\úT yC€uÙ¶ËÌiÒúf‘áÔ’šDû—MwÇ¥û|&«÷ Æ$Œá*+=Ç͉,Û)vyËQÏáÔU¿º»ÚôÛ%­@kÅf³­•0å.Ò8ùîèÃ9Äó4í÷Çç㬠U•ê¶µªš-QÏ™ã1–}²'Ž’–öiç3­ÆÞȨô’¤Ï8ð´2”¨ê´åbªz:feÂbXhÑå$ikL„Õ²Yà¥#­{¥[Yj)HY6F°Ñ‰!ˆ‹^<Q˜s+4’DV§—”\õ‘Œ§1r™ÔÜf¸B-Õ‚GV“ÐnW²Zï±!Ê:2;a-õŽ×Z4Z‹ÌYŽgt0éy]¬Ê!ò>‰lÈHíàûœŠWi™] 9'¥Iu–¸(ëÇ&„9!{’W p5#û<”¼ÌZAEU©U’Å{È@¶ÖÒ:¥`cQ(ÒZQ+T—„“y yÊÃ)‚ÑT²ÕJ¹aJyaD g{Œ·G¥Lâ ¯çjµq‰;#³Tþ3º­ÔáÄM'~]~u¸8bqÿ— Þ D§iž~ѹҴÿ>Çi8Ç¢¾fÛuÂW×bõÜ.4ïYú3¥ç„;N®hmú¥º>ú§ù;¨j<¼G/û×’ä»i¢÷hõ-³$ƒëùrẼï~ª!ÞÎÙ@@t#Îïv‘½+A: –oÚÿÀeÔ’ï{±ÿÂzÑ€)Þ?ɱcÆëÅÙßb ñ-­Ê»À@À` èzø¨åÅdïH²3|¿ûýØO¯hÉ'üë=6ù†ZŒÏð»¼\vÑÚÌ}e¬¸—箄x81ïc?Ïíÿ¸‰m^.öu…¨¿L¡~i×kK-úûi+S)ºOݦjöšJùæ6²´v¡æ$õj›ò–LODû ÏŒ‹6ªTŽ~\Òxôeɲ—«Ê¯û•)wÓjXäÁ©Û]KDWÅØ\µ"Ÿ8E±;ÐZšÝ'UõÙ¶y¸Ê—ÉÖÕ"{’5, ®V­j’r±7*|í§CJO‹¼©ùdÄÏU•Ò':˜Š¤¬ž&ËKš±^¨ë©T•/ R@ S*qÉ·T{Sî´¨Ò܇|wcôN™¥)µ¨ÝÅÏ/®šËV·d;ê/+{¹mšÞ¢d,RUƒNþtæÇávI“vDYs„ÌTot“9N\Ž!=ÅSÏg?K¡ S·œÄLr¹í+.ªÂq«Æg£…"Æ.Š’*„6‘Ö­q´QšÈªd²I['« TÖ¤”2®VNRñéTl²˜”àçˆBz©š°‰'ж-ìš©T>Æ™–¼Â$Ø.I è™dò2jÖËl"ST®×ú¢²»†¦C5‹öEšó’¦¬Œ&å„ÖP-ÀYB.ÙûÀe]3 û…è@Ô°¨'_F£hÊÝ)g1åÀªsPR•LÞKšGC™3JHð‹1‹ˆ:‹1г"ç*¶œ{ÎÈRwÊÉd£q^ –RTÊÚj`1‘PNÕ+­§¤‹QL‚F+–™cJù±@Râi|# WkJZÓÌ»j’†³_Í1–’È: sv-nE_­Í^ݹŸN ¼fV´™Î A¾tý•Eч®ó”*ñ´uÍE¡ª/½Øã|Áûçˈ“­6›veS©ŽM~<48ÿOØÿ„÷¥²á.i~'«2¡웵kùó´ƒòv‚ÈáÕÏ‚~e’$q?ÌDã#\‡Àp lZà·ß“ø+ çT ¿² ç±%”~Tpü¯bN類z À,üÑ2%¿zXáÕÃj[Àœ€S÷îwø Rr{EÞŠ¯p«óéÒ[[} îqç„È8~¶øJÀ‚ýOþ®óäì<þÕEÜ]&ÜòÙµœÓ:}õPaZGÇ|èãm âÞŸ'nÂq±g½jƒê(SÜ=¹¾Ãår^²¾ìK?d!Nüü#ôœZ÷Yàçã¼9Èã¾Ûáô0t9×a-¼°5ñ½¸0þ,Õž¬å(_u›Ó6ž*/+/&!£éF!MnzŸîuñb5¯WÔV ’yA:-~À¹ÎI"‡E›– Œ°•¦"¢,ÇåÖ+yݸšR\âÊîŽjW%òt»¾æ{ ËN]…ƒ©fŸ¾N2æ6åæ^+û.ÈdÉ R³Ö&ÕYÝ+§ÝjµÞõëÚ¬¹Ýéõ…ml¯aÀã!ž“˜ýi8mÓt"éW«Jôµ-y[_™ºM*%?žsœlŠ\ ²Yn£Sã”_p¡É¡.u`¤b›X5eU«Î¶&W:$Q“â&ˆ[S2N9m$Ò¥”Jq ’U’ª’ÖÕZ17)®")È8²W…¥”¹q©–Ÿ® ¯…‹Iò.•bÏ<¨Ø 8ÇPÎÌY‡ÌK“‚–ŠêÞPÓ'5ëE k´É¦`˜Kî’WɨB*‘ƒD†àY„Ùç$ˆ@¤&èIdIÌSÎcõ(¼±‚EDZÏÙ&K‚CáTPRâÓÆ@rÎϵÁì×…JÆ/朥6Ù°Ô,¤€¨!¢ç3|2`«•žcQ,•ÐB¥l}à%kÒ©–h%÷LΦS‚7âXÕ-ËdiEi»~¡åí鸌7+ÉG›N®ºsÞÞ¹mü]Ã9ß'lø¼“k_šÚ7®ç{ÉÛç¤ë%zªç}‘¿lõé\ù£b9E?WᎺ•áæîîú¢?¢¢Iaíp]ƒþ3û·±Aáôn³|ÈùÑ¡  ±ÑØŸLßV¼œwMM6僵¯Z°{óoà \^ J‘¦÷^—ïi¿Uaüèõv‡©úQC¦-3¬¿/0T@mpÞÿÿwß|å±q?Ŷ£ÝÀ^BI_`‰âûŸä 䇬8¨­c.Ó¸ €Ÿ\á℈z¯$¸† Ø1ž}uƒÛ'/Ê_"¨|{Û§ƒè&È@ÂÔE×É>ýwös&¼T)•þ˜MÁóGâ‹E|<ÇÏÊIÏ¡Š“Æ;?@Ü_Fº$0äI ø´¢Ü¿˜G›s=ïßÖ÷–MÚ5y+†%:©îkn\Ã'·xçÂDö] ÷üi7Ùv\¦M;nDÕ¬·àuÉ&½¬Ä…Êë+À ! G1¿hŒ$ššØ8›TÉŠ ¥Í…ö«’Á#Åi«– úãEnï^®Z•CߕƦ*ËzÕ Ce:¥Ùˆm§¤nEµ½#V%iDíL³Ë*³h«5¹UÝtM³2nK­ÒR Ì~ ··ÃÙË} d¬ëB%z%/{SÚJ:ÛŠª*ù4‡./‹ÀÇN¾È"±TÙ–Åù1P/UŸRò£¯…§¨»X7ª±ÅÆŒœ“‚ ”µ$t–c§|®xE©Ö•VVk!# "{“SŒ8QšŠçMF–Âjñ‰1©Šª(t¨Œ ÐœÒã0DÅ“ZDSŠ£¢(„NQe-¤:q¹B+'[ò´ø™…®ìNòv.iÉ1ó  £XTI’à éSž–à3MDšbQì­Xd˜=Ž{º=(ÜôŠ;‰.Û*P <"δ¤ç9+•‹®¼5Ðb‰q¥…¢8å’*‚4 a½¨³ä½fŸ–¥·Ö¬%tÃBQ0Âs1>”³Gà‘´–]ïT/1gEEG¥G©‹¥EÈTŸNÕ4ñÏɵ²º'iÑcÑzì)îèO†»»QŸË——×rÙ‰óúHB©¢×XD§Ó°¯ï‘ê µ~ÊØlÃj{­BÒsgõ±Ë‡âïVQî7Í6á2¬bUßVOlâzs{œ rÀµÁñ©9¿Å!½Î?1¯Å_¿gL4=@ðøäøZ‰eP=Äü"¼Ö/¼‡é7o±¸¼^hÿN•ö>‰”¿•ξ%T>y£÷úýµÂO4èû×âÑýûå0Ü÷ Âþm§¨~Ç2­Þfï&h_?eQC[Ĉ¯üw­:?AÙ/S#sb›èAqh˜ ë5v‡iŸ2æéµþZnD·aYÿýSà©Bï°Ù¡&䉭Ìê³Ô÷¥úE眷9ÇþHþźŠe¼ÀysŽó1½Œæ(ìÓàžo/hø3Vµˆæ'Ëmž]o]êF×B'3ªòˬ’+·Í²ÈÅœÍàšÜM©§³n½µ2•»9ujédp¤$*ãšÞò•DŽ0³ÒÚdaRáàOãt=$«È¨Z³aËÒ1¥X.uÒŠ ´²½Hlæ ¦zÝT´³Ú˜¼!{e«ª]Ó ³jó S¶É˜äˆŽ2Gkí…[¯êUÕµ¢!VÊ’éM]Kë’°,•ÓJ9( é Fé`!ä_ ±#å¶l·ªê*£j+¨E)™Ä|^BN3GˆYd®’Z‹¡*öJW åµY8rŠ<¥zC ¹.“}~1”DÑ‹2EKK’U›’Ö³˜öFXc+g“HäsSæq¦ó´„rñ,Pd‘u)‰T¬7d­“ÖQ2R.–Nì<ž–Æ)‰³+DX'Ñq“\-™>?4,¶Ä4-E í¨îÅÛ”ý”àG@¾· Ã~2, €áÕ’†K`^`ñÀk‰®~„9 ¿…õ 0¢ HùMÖÏ@yíq¯±\¦¿"Tö@<ÿ>!°ú°¼ˆÿ¿ˆ ¿ïškÌpÇæÃ¦ÍôŽžÒoeåã·i+¶è"~w~-L hÍxs‹Ÿ B:åQÜбÆþ.ôçèÞxóœ$ê>\Å/ª¾"à lWK*P_O¹y‡¹`̘Ï(/·õñRï&Jô³¤Ëâ¦sMÿ7LŸF=Ã5S%=¦:~½>ß:÷2 ÿòøõͰ>¯V­š+õüýSZ멪I]¡Z))ÉX%4©‘ͬ›”°ÐUQ­ªˆ´çy™Îi¼^< cå d´2IifeIb&.Sšr,¼Ðú$ôJ gA‰XéF¹®’´Nã‚xгÙjݲ!äzž'ŸƒÏƒkTã’ËFnÚ¬»DÖI&ÒDFå$åÌÊ¢I9@&IA¦R%âX A±¶k'ëœDô‘K>ò¢ " –*QNÔTZ±½­†ºæZ"Œ¬2A”c¨ßÈRi!áKœ'“4ƒ+#•$ )V2†v eåР8“¥³’¢NYäq2q™’œcT¸E0‹ŠëJE¥¬ÍªÈ˵ c•ü‘'®š"(vžäQ様•º—õcŸ¿±§%ÄK•ôm=¹ºˆ¿u&”jpùzÎtòS?½œ³ jÛúÊ„Õ<'åGú…œ‘¿°|Ùÿ9¤œ¹x*œ‰úaa²ªÚœö»Ì[sŒaP@¶ÀækøíÞùM~9Jl;”3ê¼?âÑ;‰î9¼N4-àßÐ!wý›\•^Wü¾*m€pþ¶‘ô[Be€} ð ÆÒ‚©ÿcÃOn)k üA3Xß1™€êé©á]ÈÝ›¶ÚãúýA®x-~Í—{¨x±`ºÆ©<XFLÓëe{kdg.(\+ƒ±‚}º·E|„ù€çŒfÿéñúÒ­.;½©Îk)Û•>wÃ-f“b½$N$cå~CáoíÕͦGÏxÜü—½1Ë>Þµgôݽwí9ì¹úÇ$^ßp¯SPY³u¿=¶“oØlZH)“ÐB1™Ñ/ý®Ò»b†ÊÌÙ‹*äFÇ%ù°÷/Æyl¤íe£‹Ò’¥¨’8¼ÑÒP- T¥J«šœ*m7٩̨n]e„¹‹²“ÖdB£FR±[!/•®‰s®áœÔmUuU_¬-,å,ÈÂ(B‘òµý¤-••#ßH¤Aÿ`uñÑåj{!ÙÎ';g£_ž#d+$™lªòÒúYÇYŤÎm{[és]j.W°"`´yv1×Ú*÷XZ [)QKÙê¬D TŠÂ([é¶-­e—ƒŒ!-áÚç1.2”&’›”B0:““ Y͵À´äñào}ˆÉùÔÛõv ZéJÈÚØÝÆš! §oއyXt%l¦]µH)çqÁ|&=Ϲ%kX"­¥0Fʦêµ)‡‚£âQ‡B:¹©RÂ%N‹`ÍSkm©*ˆ"a™9ócä¹@ê8È$J$Á٨⤮¥Ôlc\<©˜1‰e›ÀEšœ-ÍóT…““ZWmc\¥”4‰!A‘k%˜õìd.Zh90©ˆ,Ô)ù(çY@ 6œØÐAU'KÉU‹i­Ð&‡ÞžÆ0ÄpVÅ^N‰'Ó;ýI“æ9»C¥ö’ŠI?W¹¹PãtÿV¨¥7»ÚÒ•TñõõuhF™_œdÚ7M[›ùAµÕlÿîI¾YôCä{7?ÏNL2c9‰Ø#ßÅŽƒ$–¦”½ãXä£!‡W27€öNؼ=}šQ`€Ìñ}ž'¿'¸5À+§Ã{+zÜwpýüÁ ”ÿABåë÷Yñ–ëŠ üë[/Š:~ê©ø}ï%~äÅ<{÷ýìÃõúþ¬Þ+ÁÞ}¶÷ÝØ­FnÏËÑû ùqÛ½CLீùìQðl~à ¾ŠÌσY òÆ h‰aY#=D:ß‹¼ÔaÒ¸´Øuš–ùöb¹{ïØý5©ë„qS chãóz<Åt;‘›íß.|x¬>ùEUóIwÑòwœ¯ ëÕ_ߩۋð3ÞG Çê×#65b«Yûf¤Bz¾?úÀ© ±Ú&40ªÓ¥ã¶é«µê• Náf,š%1ºË~žF~ù"Ÿ²¹(¶¶º NIJ,’@)Âé”±J>J•±2•éµV(ä9!(¡¤ (Q Öw‹–’·Z¬µP@µ¢X ކ…&V%çT,£¯AúÎt¶a®w¡S'Y¡¿º4Û±½€eŽ¥P%õÚ$4†MÈtFÜ—©øP+«NîŒ(|ZJZJm‹²¬U¶¬-Ûš ‡(¶$:]”Öq©Tˆ²WŒMñiZ–é˜ §‚à%ÏP\¥ÜP.¥ i‘ÃfŸ–ižÇiKwŒuͳµÈ2h*Îɦï›õÁP×j_º‘‹)“È’œ4ÊRòˆ¼œJI¬¬ U.Ì 9qÊBjéŒÔI™¥FÁ9He´Ò‰SЧÏ*gH;³ÉS,Òg Oi–Ù –è3 PP"ê2SF™R)Ä#é¬9[9yïiB¹J*i»” [§¾„‚v9+ï³*ŒÈÒJÊ„>#,9ÅÛ ‚"eX…©¤DeVòkKŠvI_ =%³Š“™fwšjs úL+á®Ô›t:?õx6åÎluÙí«ÉDûy9¡{úQÌNd»Y€—k»X#J—Íè¸WdÄ`MÔ¿¼Z޾˜…~õ%m÷›ú+uƒí§çÓIÖä 5¯ÊׯÕÅ_æcep|³2áõ·PÞŠ×nîÁT¯w>‡oçÇÇ÷2Þ˘§ïÈ¡íkˆ:àû•ßÍ‘ùûP¾ûé®sÿ uƒøN´x ÷üáá=õÝÞfôЩo¸ž½f7ï{Ø~Mã!ð¤ÆÞO‹ÿçBÝÛÀ ÐÕ8‡tÀà…Áµ}Ö5§W…È5ü x„áз8æ³yÈùJ(ÒX£<Þö"ÊÚµýEh7ÆæÝ°¤ô˜Î·p\€Ãdb¡k,2Öþ*/õgú·*«œY¥!„eNC(K6.1žF.‘¶”¶‚2Ë£'ЍJJKœ037…Ô~†2W]©hªUtºÝvW›‹J‘³ÉÇJ’‘¥ç¢¥ÈJ¨âÐ$Î9·9Ž A½j›…*K*EI Ç,°(ŸŒf!Z¢ß/KnA•/ÈIÖ3DQY°ÔAQ”¤‚ Å5U,5I&™SN4hŸÄ°äY$²RŽ&ëèχ®,$º¶îd§‹àEIZ¨x•‹‰YbfUG’‹(rŒ‘y.œòœN> ³J“gYƉM)¦=Œ¹=t«žƒÁôÍß8CtÇŽnýi-;RIé߆ò¢„U(TÎQ‰–*;»]¡“ÏéÜ2Êö0Qj–&öbl´²×‘Î!=yJ¨ÚåO¥ú7A_›µ9©ÏÉŸþ–GøôVÃÝá²ã×ëue…”¯€ `Ÿœ7{ ƒòpGîNëGH_þ¸£ÏCÜ}„Ûð=ô´€~íæ~ZÞ®¾sgúÃÃø‡+ƒ¹ù;õÝËý=õ¦±ó{l”ŒB_?»ý{÷ÿà˜¬^ ³Æ `3>€[Ð5ô«94@,ýkCuóö§øfpö£/Є'8=yeØÄòB@Äa ê¤ûƒìƒíÄjÿq¿TcÓ˽Ó!ž_ì–éþ˜žd…¼7Õ¾®õ#ÔáI©Òé__©ÍZTÅÍ7<~¯ÇýéâéïÔTq’/ö+¨t trå½ 2=ß߇íñèsóÉ)ÌHY·Íoü©$7ì×ûZ&/:E9aT˜¼¬Xrƒ®&¡­6;ÅÎAZš-“°Zå"E” °JQÍ\T¾•>Š2‰Ù'bÇј £áœ«˜ %îõ IDATE•ƒKÒ‚ ÉEd–”¦‰e’º-Äá3å{•ùÛJŒ6Ïä)e*OJ4í}q·¡,g}!ðsô1,Óx{ÜO7 ÿÔMmk.Zá*ÒæD1ôO ±Z…R'Mņ£öªáíF]Éz›I5j»ª6¨Ê‘ñhƒ/“ˆ–á<Í7S˜TÂp»Lä²Òšíçî&ÉVÎ0>h9'µmkVŒy™åžêÉiëܺ5vUSõÍ*û$˜%¤èU +ïª"„­â Iæ‚'MJ9¥²pɉLFÊjŸíÂ|J’9Ì“œoÓâ§ 7Eõšû.”’K-j°‹§–Ç ÅC-²Î‰i!Œ“¨öÑ,…ݤ¢šŠÒyñX|C©+M†;éŠÌä“ó"Ò9U ©,\l)Ȇ”Zr1zðI‰2“”0›¹$Ä”pb³kªóýœkÉ?Ós<.i<5W—z´’{žl.”‚Ÿü]<Öxp,&ÊÓ^ê§mù\_Y[=8„T_/ó.s<ïiGmãê]ÝH«´¸IåÆw?T9Èv8U§^­:µöš¾¶·)ø d¤éK×fÐ~¹Å¸Éæy~˜ì_íÔ+¬w8p˜Ä£×s’—Ë#,áiF‡ÔÓ·V7Èr—ð¶çüp-À°p &á Ã?“Oøç¹þغ?¬Ä› ?>¸á’³½«¹¾åßûп§­Ÿðh_ôÀ-ÃO“³ÛÝIÝpýõ-ðåë•€¡Þ(aºrzc§~Ç`Ð…‹ócyE,p€"c‘hÜU¥¯X]žTý&A&m-‚íÒí_hyùá+™¿0][ìãÜ~ü} õÚËå®i,©u’·£øûvŸ—'áÁ_ïWÛÖ”O½yqwæ‹î›Ù­©éΦ<¬VwN(÷bú¬ò¦ŽêÔMD–ëIa¥u–ÍǘK䃀n²VIš…­I‚ª(´¤´"¡² Î3­×*±S‘IdnYK”PsP–f¥©Ñ¢‹"Î\HWXB9ÁVA¹ Š\( ÎYÊLHyè1¢yÃ'¥7¿üÀ‚1ÃSŽ”Ï9çHz8äi8) ÅŒQeäϧÓñf¦å¸œO™Nm{nšmûºVŽ=Û ! +çE«Äj'åN•,ç=æÉ%¬êÚ4³ I(Gܲ‚—&DNËä§xãóC<çcTƒM7óHù™€œC»Äþ†—¬¹’±x:UÌ­´šŒ,!Ф!K±9æ ÓŒS„.Ãx*!9H£I= ,5¥>JÍ\„ "dÅ,8•’âR²ˆ>§9D1„ñ¸ðyðÅ„°D_æ3-9LþÑT>kii¹&™Ðèl!ÙÒ2ç8³™j]sÂLÁh©EIYAlTVÕ9£¸Ê‚„*¤–d΂6V9K™ýiô7jšçÑÉ$ÖÎJkj•´)¬RJÉÏ©,ÙN†um¥•D ”P\žb6 ¤ÐNz=K%¤)PMà—!^øxqÎÈ%œÃÒKuгê½1ù¶¹aÖO19>²@²>RUž´–xss¤ùÿiyúË®‘OM6ûãÇò~ÉävÏ÷q.1éá…ž¹;äm™§ã³›—üÛg¯i…ê>eÜ7Ùã¯&‘~ûŽŽ®[Ãä-Ì×!¦†0ðS€<†=Ä[À¾Ûè Ž@Xƒ3píË‚à!¿Å¢3  J¿_æeþy=&Ô?•Jâï”ïÓ8âGN=Ä{µÖ¾Å^ß}FáÛÝlúD–ïýê‡O¹û©{³¦»®äJ,3÷x¦;|Dq¨*J²†hµ;a=ùûÅîˆVwÈ’¥¨*‘’˜¾éNgØcîíE‚«XÝ-µ|ïw†{öý"×Î\¹VÂÛ¡ÊšàÓF nÅêòît €¹€@¨Ü`ð+Ø_Ì_€ÆöI5¥“ñ²¾T_2×îŸ?‡V°=´ëÏ®~ñôl:Ý{SsÈnRœ•Ì N¸Ží«mÄX£Q÷ÛvÔq‡kPò ݾZZ |UÒG¸œµj>!ïf ‹ôÅZ /Uð8—4«‘«<«xÁi˜VTÎÝêiˆ´¹]}&:•,¢„d>ÀòBè¤Ë¥Y¢aö"Šl°j&ÐF#ìFL*åìòˆ¥¨ÙȆ¸UR…&ê¦àYÄ‘=%‘‹ÒªCª¨€(ƒJQFOYQrµ©Å䢴kÂÞ@È¡pe®Yf—~Ú…éÅrx… Õ{[H‚m·¦µ‚’ŸÇÝÍ«ëë¯Ýác‡Bv™elÌb¤ôWµšçZ‚iŽ=ôB°°ƒDQí—É»à ÆXz &dAt2æ4ŽÓqñ)–eSÚá°,QÝIý|ŠûùdJ¼p·-W-$]ª´¥@Üú’KÏ´=( Xªž&!#ë ý½Û½Ha9QšÝ5»Ô*aŒ&’µTdKKSI'©@¡àxeT9“î‹réTFE¾ð2-ÇýŒã"†X(x%Jé|5A.UÝõÍéu;7l¥›¨4!ëšuÆQØ“ÕgÖ‹ãŒ5ÕÙZeÎ% È=´¬Œƒ: YÀJ®\C¯Ê¢DV¾ÐÌš«ð\Üâ–kºZ,ófåj«©nµh$å*“6PW”œñD8qr4 šRA¾¦" "‡¦>¯î&5·×qgÕF·«ósÍ@²9R!Ïpwzº_vcÛÑåvóütö_à´‚‡òWJé Gõñ«WWîq]×îİxˆýßA~¬ôùY/¼½®—_Àýß4?\ŽðÛ7¤W…ø¶½EuÜb~^^Å7~§R†ð¶¶\ À-ÌÜwLh±}£Z ­†S|sów#Û€`o'ýxáä' „*„ü¨G÷·ú_Ê™õª€é?€?ìÿ}ïn\P„ý§ý]R¢žÀ°‡Ë=< €9./Ž_ïá¾Ú }q§JÄ-$ä7}k «À ¿ù'øâêÙþ´ùx7´‡^oNÏš5UóöÒæµ|òxÃåæb«×8k7%Ô,ƒÐS-†ŽÈ^®¨™7¢¹–ç<)¿Q¿…_ƒ¨ÑÉ}.Î äþôö®ûU?>:ú›/å¾ ŸµKo:/ÊI6¹{ð"MmšpIMVÛ݇†/O[ÁöÛ¢(*Þ;Á¾(ì«¥1XBè°q† g%JôÙQAb£¤DÒØj;EB• qš›À‹²Ax´™* "%XßÔ¢³¤(Œ¨…¸ @@ TidX¹B–9Rqc‰5a`€ÊG™Î“Rµf©u \}¬KİP‡qÔãlˆjR<Çc_½ªÐ@?Æüüxý›W_Ý™ô"ëJ½ s7ßétB{^u§µË®ëP\ئS²Ì$²š…H¶OˆÓŒî´Ãûá$k[%ø÷û|:2O2ÁÏì©Î'E.bœóëàˆáÖŠM.mz `ËF²¹Ë <þšÒŸb&`qT’ÙfÚô¥™R½>§»èköÛ™Îê¶S•*-P„®J£ip U˜U åÔieô@ÕÔT¦©ø]]2† § à”ql ¡Ôùšg渨à†íÒuR•P0:®à©C¡Xɼ˜rÖ„ÜxZÍåX°6F m2ò вŽ9CÎNhk…1©ÀI‚ ý‘Ò¡¤[™V•W5'Z7¨†ú"{¸PYL)ÀÀ•BªÒ•Ly®³ùÀH„~ÏæDК¢©ä´-iêFõùC÷? ø¼SOE·5]OÒÄTµ«wSjïó²Ì*®?~íåñ:;+µj£ðc¿Ða—_­Ü+3þ¢ýJŸ`-àTáŠp[¶`í”~±4M*n ìŽÂ^¾„'žßÃ`– €úzˆ Àæ «‚_ÿ —È¿ëÎt‚'#<¯í€`1=ÀÞ¸íïBÓ;,…‚}z§•æwÀ çïðƒ°ø „Ôþ`œÿã=ºÿ(æà¿óªwÞç‹ßRúq‡óÖx*Ã; ß'¾]åãÖ{¨6°úe§Ê®ø ÎÙðEûÜkàe ËV{È{`€°·‡oXн;¬}Y½:Áë +«íyô‡àö |üË™Kq¶`šáÞ‡›£?ãµÖF.!šB(Íë[§&‹®éÖ|u©õž ç‹ó½‡Õ³Z®É´¸?.ø˜³ÄW³Ø¿öŸ­é¯h²=ærµ]©—ohÿFþ0>Ðk;j;Ar.÷ùtŒÜÇ Çn]¾2bQ±·ª›V­êL_•Ý8kf`¬àórik1¤uÁ’‘*Z9œ+ø¬uÆ"q%$,B;Õ²ª¢JA+aUѪӈP9V9ƒ¨–¢åª2Ç,bâÈÉ¥²ÄjT)XCÕ‡"N© /0fÉA–8ãšVÙ$Œ`ÚÀî\Ý ð1”ûÝëû/¯Ýë‡Ð\ÆŒ¼.K“æ«¥«OÝspë0©ê)HSo»F.EuG’6*²Y°—`D>ÖÅ í²+ŽíaVËRDdÊ™Øå“Sô™ÃÅ)#É éâkq|Xa@^͹= Ï }fÂç³/ÑiËý 6‡«PÅâxÎÁr,Ðd­µ¤”­Ã!«M+pP@º’p•¸JiPι Ÿkõ!…䲎”s¤2 Ä5)U±•9^17¸Mí™&ç¨j@Â(ûÑmöÓ¡%@*ÑhÊ)L°‰¹÷µ5õ$$6ºH.-«È)K¡¤: Ìy.öxðË1°+,c4 Ƽ jÕ˜Œ˜ÛZäRR-AC2EˆJD6ÍiÈëZ÷ÍCk{’³À»9ä'‰3n2†§Ö}\Ëu.Æä®u†Œá«F¶Óòrá’–)ð‰éìTUiÛõJxi¦­­Àa»j¸ñÕj³k¾û¢Î//,æ³Æ?éYßCÅD|/Eó¶ë‰ ¿±`zã|rØÂ½>€Ç¿„_<€Ç[ONÜÑ>Ò>³¯@l €¸ìv%ø}~öèKøÙsøÓgù5Üì5‚³ªŸkÒO¶âù)Å9<Ø®>'q[<È©q}€LrɈ‹:bgd2탟Ží%ál œÅ$ÍêÕÆ&\p–|…ƒ8óõË~ÔnOÀ è´9.›Ó¼–3É=jktWbS§ÏàÚ6M‚U8;Ò:vkû1L¯ùåÆ÷ª{°Ä &µÓ²ÙL‹îÔ‡­À®)«.íT³Ê1Pñ¢ºJZIg.I”YÂAR²´¥DÙg(#¨ITLU² R5‚å¬ %Õ"(r†Ä‚¢D#‹ÁÚDŽ#›Ï*.œkŠQ3ë‰êÉ΋8æ ì,y]•Èömƒ¤ªÔ‚@÷ØYÓÅj–¼J¼Xow%\LaÙñIîsÇæ’v0d@¤lri•°€QŠ;ˤç’!Î ¦…‘eÃVÔ9.Þ-»pÔó~²9•«ceQæäÇzØì¾lÉèÐVBoOTu-Ê/ˆ«2þ‰™3ú‚&5‰fânÕÚ„Š‡œ­ç6D†\ÄktAtÐ’TÊ \@…ªC©¤aJ9Žœ!: D,˜E̶¤V‰ÒUJ‰I¤@Z5‚Ti¹ØÆª›#†˜–´6®Ú©ö£›‹r&M&7öÐIVˆ,5j‰Ê6¼¦(*:n$HrÔeE©™={—|Q%^Çb—ч¾x„HÌKY2L³÷gÃ-ØV- ¬­0E¬L×oÔFbpÙär8%…"«¶."¸%‡þ²Êä»u…­d´Ia*%f—™¬Ø>R}µâ¼ºöï@íÂ嫊Söʯ›[ø‘º¡›‹š–Q}}XŽû¹[õâéróOÇÓÈsÈð—Ê5©»†³gUÂÀù£å¸ àÁí ÂÀ'ðÅ7=‘¿ã&Õ;A<~+fp?ÎzV€ €3ðå·ðÐB×Âü®ZDàïÜ„ŠÇÄû«LÿM|Cýc¹è'€Ï¡ÆwOxþ«"n>ÿðƒgÅïL鬙íù…G§h@|p¡áæÓÕ"ìÃ.BÔ·îžGùæâKÀO•sÇCíý]ìýÐ=,ÍúHp¥åÎh1Ytâ<éCNE4ÃÎ.·]6¯ÓÓV­¯[½»Ýí‚'Üuãþœo–~É(ÝÐÉ’@Ó§Ô®¬H?K·-ܨøa Mõ1ÈJ6ŠWÂßyú?Åü‰¡]3}ÖÁVÈߦæ¯GÚØr©6Ze×?Ô2PT€j´l•¶$s†1äUgáTECÆ\¡Tê„–Yì6FéRC %²@L[XW[¹E´±„ê\¸çì‹,jdÈœKXLI0«åØL¸êâ™Tˆ_Rh’igmzDiÝêæL˜UŒ©ÐóbÆ(vs¦gëôŸ­ûË€­ ‹²Ê×^@ë…”•ê4Qw^æQô-o«šÒt`Ðí5›Š%û‰ÞÝ/a‘m.Xè¨}n’ˆ¯– é 67¶Æ ›PL–¨‘®u¹P¡iÄÐ3¦”^&1|X¨—µX˜¬gÚÇ9#—’s±°(‹Ûûª”.±ð x¤™Å$P«³Ž ûÌ1ŠÐ)! FâB‚°'Æ8»iž\Ô" *àBXMF‘Kq¸ø°!ZP:¢JS°· ’Á‡¿¤GXÏÎͬ’9ŒÞ/hjÔš3|ZeÓiݤiÏ÷›;üH=yhY_"6²Q qVÃ^k½ÁÒÍ®†-ÑÈ'~ò‹¤!ă‚Õ9?ZL­"NqîQºìï¬Þ5¯äJš©NIžù6Õ‘óÂJXÕ)"…DÔVU¶ 6¤×u;H[À,¾KyÎq’’{êZiTê–¬”’Ó2M»“?…ÑGI½‡Dñ4›’üyL©9/ÐJˆJ.r=-ö!“æZ«–ªíÔm¨ŽJ²áÓ±ˆSÝÿg‘ ÏЮ gT;N©] ]·Ofö“¦"ÛñœIh©9e’e­ˆ‰õ<ÅéÞM÷‡q™s*$Ï dBà•ØF„M6v¥à6N7{·eí+,ÍbèçXåÌþU(ÿœåy©¶*r&6íDñU<=ð1¹zAYpƒq̧L+Ù“<Ý”yTKwÞ“Š ÂÕTKÅÚÆ•²V“&Bk¼WU Y–*b-Aø¢HS%„ZÓœÊìCýâù@´I¹ñ);f™ºZL!•וò£¦h !P±˜TL•• ˜Jbž ¡`FŽ1»„'grô{_¦©(J-UIèBIM@ ”¢L,ÆlZ§æ~®2±ç<žÑÉ`Ú¤$(‚”¬„•y´è¡hra¿¤ÕÉýãžC¢«¥ØÕ‘ïð6)Ü•SøZ„ŸËæ¡kÎîÈ.Ä.î¶IÞÊǯZö§çùY|HøØÃ/¡;$FÀî.û´Ñ·q“î?Ú¼¾Ûüê"Ü €0oàÐ\vÊ.©=/оÖR€ëkñÌòy…1À¼)C_ëj" Ü;a·ûvË%|cØ÷‡ƒõРà`úކàÀö„UÝóÿAyÿˆSÞïNø€Þ•+ÿÄ7ùÎç/¾÷‡X~xIámÚï|3~ð“€<Ä®ÂYü ÿ´±zh–ó& -»4R†“tÿi±×)ìzóR-Ÿ!lêîAsÿlSa]ãÆ?χÏà\¤³_Ž¿¼.ç´àó^ÇMyPÖCqÜðfl«ï£9¤Æ5róˆ_BJEÜN÷9¨f~%ÐõÔ°xJV]Ô«Õ„‚²Ö„Áõ©¨·@Ü'í9äjÃÅ7r^]þ–åãÌ@¹ZÖÇŠ7î‘ñNëÀOŽð Í6ß-iýŸüà‚ ŸjG¿øùÅG´]³šC %*ÀÈ,`§ë£Ä‰%Å ªn¹œå …‹ØK I )+“ÕÒª¦êÁ›®H¦ê+VYª•%'AP'Î'ïw œ£;†ûyóˆ$7r¨—DwSX Ž»lÖƒÑÜ”dòŒxëzÓŠYs@ŽÅiPÂ*bçånJ7¤;Zp¹—ÿaXúNÿ|€K"[–!Ÿ] Ùš¦Š$H.s8p–RÞh¯´^2‰¬ *WÔ8òrŸ¦;9J£œu DŒ«)šà{•Wdš•¶¼}Û1|­òQÈRù¡âÔ.5Î×i?'û0‘±õH2B“¦ÈpY<æà%/¾·XËaü ±²Í¦v¶–%‡½»{©åF6J‹Jhé)U]gMŠh.Ü8¥R!Ÿ V!²¨¥øX#ºÄÓÄÒ»Á¾ätX²Îì×ÐT1 %V[›ÈY¤Z'A’òÌèÎ0&b–h¹& \¥—}…“Š¡)û‚R h+¤FJÕ$š J…*Rf¨²± ·¹"3 ž;0˜^5ýY¶§2O±±F§§yânQÃC;¹?ù¢ BXºqõƒ„Æ:ͧ]v0…|7Ÿ.n‰†ATp”4¸KçdºK§a·ìã EÖ[ñÑEÿ¬>ý@Õ“Êð‚F.;+OЃ†pÞ@rp­ð§ŸõîÈË;Ⱦ8‹0~Oð­ëm…#þhˆžc§ñnïþôý9Òßu­úŸÜ¤ÿ-ø)ý”ã{r城4ñÇ” ßÿž s„¯~ˆ.-@÷]dr3Äí'põ k•å,µªX(7¶ÂìíùËÿ_ZÚ²lÕj59øâ¢è>X½¶÷SxdZ{s!>>ƒÎ´€[#6´êåߘ۴À˜Ú[£B[4ò¼_üüØמ<ûg‹\ƒƒgí˜æÉíxÇæWÔG¬oä~–«%62?xúä^ˆ»—A=ÉÖë h/ 4r]MÎå“믉tŒ?»¹ÑöZÈéƒEü•ÜüßÚ<‹"µý£Ë+£VMJ÷“tœS¤ µHƒ/ÁņŒBž5í lЯ7”¥rÓÄ%ç$k#È’Jž]!WÉÔRBK¹øP¦:;/Ç;-ið5ê °0ês%ùOÞ§¥Pã»|góRã~¯Ý€„+ŒÅ¹tˆ“OÏW¡è»Wûé×ÿüù²D!pÙüÙ$®h}®Q4YÁ•«d úÜÓQéƒÂíIŸ¬~ »K$Uj§K1Šu@9±¬¨u”KóI¬œìÊ8žð Y`.ÍĪ­§3=KC'â{!úB4ïªX•–cäôa‚>(õ°ÚMÊ#»1@ h+ÕØWVY× à UÔê©‘g(b忝R )âá%æ,¦»EÄ"³8_7Ô›M)²„ršS_TñÅÇx,¼d/d5º‚Ž Xö3Ü¥89¹¦X°dNõµOŠŠ±êÉJ´¦Õ@¤‘»F8¬¹b.yœUÏ…T¦ÍÀÞÏh•©µTQí Ûéž5Ta¸`k„^¡TIÍ\Çœ=åZŤ4Á Œ B•dÛö±‘E¡ÚÑVqÍá6ú$œ9RŽ»ªþIJ4ÐOˆ öºåòa#Ï$qÊÁ˜}mžOhoÁð²ÚÊ3³½Àék¸°ßuÏt .ž9»ÅCˆŸûÍ_¸âgÒ”nûjXŸ§‡ÿ.-ç=³i¡[âeÔlÖ`·îi°—u d}¤ 5ppؽ”€|gJØ«~7÷í»B+ñcbûÖq)¿GýÇ÷¹þ›Ã†ßU–æÁA¡œÐ{3“ðÁÛå{¤¡D0úë 4ëS{f̆ζ±W+ùÔ3žáo;ñl¥„3 Óv5aØ=ÕùüöøYšÇ8¸zþ«Íóã?`Õ¢0] GX ?µLmÎÍ[Û()Ÿ½ ×”:UºÆoÈk§Ì²,îK™h©ã4ÞF¿û>²GÌÛuýL‰3‘»œÿßͦñ¦$ÒÖ: IDAT+móâüõoôùô ]gì%®¬íOiåç_’ë½j–àåéN–½•÷eX¯Õ_Û!Ë\¦P·8lLð¥ VeôzÆ¢#ãÁ5hRcº¶] Ñ·ÂJSµÉ©‘ÐÙS]q˜£àLªTâÀÓ!F”©°]¡tÕ%–B-Áãtà‘KS…Ñ 4ÁE!D3±,]Ìg•Yñ)ëpL‡çæÞÕ\Ž‹t§t¶êöà¦×î°÷·ÝÒÙÃÙëØÖgËÍW'_ØÜžàB”Oˆv°,yžüÚêf.|"wÂ2©Îa17­ŒÝ¢ŽŒ‘R1Ú¶gPtá’ÒJs¯0eÙdAL¬:Åi7ÈfLp8A{PíÏ‹ ½öÙN§¼fïóœdXéË­-V½ãg——"Û·ªóEžr\“aÅÔnµ¸Dl¬Œ$¼D’x„’cv5:*S¦pLËí²Z B9ëÆ^bÉ6Q.Uª™Õ¨+«µÕš„€èÀ{ÝéäÓÁ×ÔE*È Äjª£‡k#JÔ¹ à”ÆœªAa1 L° ""–ÊJø"+ ÈY€hÀÈl‹¢–Œ•ËI”H£©)(³D¢l¨TXB 1+1êÆRšÔšdZ©(Úš@¡ÔÙö¤T>ÄS²7“º ?3ä·uo;%6¥UÍ“¬ÛÔôyèJã¦Æìëöæ!õØ}ªÖ*ó… ŸåÃM„ʰسxvöìጠåý3ž'`li®æ£¯A•#¤«ŸÝ !Añp†6ÊxRcô÷€Üü9{ˆZ¬w«Å©.ä%Øð^ç#¸ß4Ëñ­vê=6³h¿‹ ßl”+@ÿVóðö÷qòú;œÞoº÷ÇÍ`þWÇðfŒÿLû‘oOï:›ÿØÑ¾kY5¼]Æð¶•õÍ€¾ûï_¥ü7¶E` ýÒsPñšŸw勇øÉGöñyóWVobI7PåP|,¸¢Ûü½mþT‡þòþA¢cX ë©><0¸×_1xÚbà—¬Ö¬ÕÂrQaÄÜÚ­ª«\sZq³ó/&¹nD¯üÚíMº]ê8›¿ûmþ_ì:WtÏë˜z˜Å^imÈZ}.m@}”aþè2÷ª.ön>~xê¢ ^AjOÖ•up,ä9ëº6töt¸©UWý™9ò½VNç]³, Ék]šú²•K_#Û½MªM¦ BDR5Y ­ô:ÐDB5,£RtSäT*e±‹’±PEÖØbÓÙîºëèAˆœO%/%‰Ù¨ÛZIŠ2ÊsÉ(×±ŸÌ øFÇÚ•©Âñþùý]Ãã•ðŒÞI7b¿KFF¥«¶]½nD“=•Ãù†ú^«@ùŸ£{=g•gíXrÁ’‹˜ÃѱŠz&DQ ù mâ!²²>¤|2B;ùé¾L_¶òÌZÔÃ]Û¬Õªë{Má~¯K§äªm`ó УQД‹w4›)û…’’:ß¶JHUG¡]—NRÄ¢›Šë”úš¼ÊMI‡”€«aèjZ0$ð&Ì2èPV÷YõR K$êÃJ‘ló£¾)¥´\©€,.øy·¸ëR¤¨shDtè'.,©×*µ„J«ºÁëŒzZÀû¤EUÆP_I’9 ÖG×'¯[®Ä32È‚ˆ‚D5ÒêVbmj8’g@UÀp§DE•‘Ž‰Æ™×ÏVT¥2´@RS‹Uë*QAU"‚ejk’P9ÄËš§nðº]k2µC+7‚-y+éü¤”‹¬"ÏuÐùA²Gh^¥:Øt`iæðô´­sƒþœb\ihòGùgþ™²°o3AÅè c¿ä¦òùsð¿‘gJ…à¯á9$Ïg0À Cûãêl{Æ =¨obÎ @Ü•7ÝF:¼™ G «Ï¡‹ß¶0)€æ›f˜o¹ÒÆÀ(€ÃïÍŽLy¿Hõ}7úWÇþ±AØÓ$€PÇß‹°¼‹°zcmp€ ßäq .Á¿zñ°P3äÔ—ñ†`™¾X¥~•=Ø9fžKà~[lª´ç¿Aq,õÿšTà ˜íÙÌhT󗘙‡Õq,§‹G»‡@—µL£úÒJeê£sÑ)•аs"7¡ÖêPm/ª ¢°ü'=¯Ô¢„ÞKûÑÒãk(²£•°Ö~’ÙmÓoå¼—ÂgzŒÆT°*Ï0Œ²W28’w&'}cƒË¹N.4]gÚ*5^˜ ut¢?h˜Š9ÍbXmòÐŒ&²Þ3Uè(YÍq1úÌÌd-G^€Šy]‚yéUÕ­«rMœËIäbJ¬œs¶PΑj…eIuáEÁìZX¡^7ær-JóÂSŒÅÍy™Œ.$…à 2VY“,¡Ê¥j?q7'C, µî@öáÄꞺ{–ÚC[¨ZU(•¬ˆõœñ²€/Ø'™µš¥]¨_•s(óðåÉ_0ÏÕXÒ˜î§ÉKé' •{”$¼( ªc]|T¢•k \–¬‚©ó«¤šø!Ôe½ùgÓ¦Ú–\Áä¦8|fµdsæF’¦NJ‚5O`³#ÕsÆ$‘cš8gH.¯Šè±4)æ˜LŠLÀ¤‰@b•ZÓ°€T4Êš-eãX9QƒÉ¢(ôD»€½#ô–XÄ |$‚„. ‚(¥b)xÈÞ‹š-Ç­dÝè¡û ÝîÏíA—Z0mÔR=¨(¹VJÈÙ\ÜßAz”HË(hºJZ›íÜ<Ú­d„ð¸=™n]nÇdöVºÏÀî4~µ‰W{èP~µ&·úòÙX Üo¥v ¹Õ£ÿß œ^Âüx»7[ú=€=3% µŽ%ž^ÄØÀçkhkYv¯bݾ+ÎJßÑiݼ?0. Ý7¢¶øÇÎH~â¾§·€w˜íÓ5¥?4õ~`nÞ¾?‰¨ßƒÑãOxøü#€3€×ûoˆèÁH_@z ÓüÇ«¯ç϶çάXAÎl{îck¼‘õ^ÚxzvÊ=ºö1¢¢eHƒÕ“<¬º›–X¥å¡·mŒU»À‡¥¿ëÇ8%|¥9jµ¹´­X„ó>ÙkQ•ÿ§³{xÍÓ­5$­z Iø§ú´6}$1Èœ4´û[¼ºÝ õï…è×tP-†õõ­ý;srõt:•Ÿ$#Z][µÎâçé¹Ü,¥¿Ž 'ÞHwÖ®³ Q™Ë }AFëg™[±ôB¸Po)KN‰\ˆ¤JM€6&HnÉÙ«ê‘uåšs—q[k ÑÎÓ1cl$RîÉg))¡^R^0žT¹íÃŽ¦ÉZ°Îm­:Æ@)ó’ÊiL_ß~Ù·—FÃÕÀ\†‰ÌÜD´/REjTn˜r¨©ž£h²ÅûòÕ4@°¸ä±9N£_†öïæíÿ:%u%™j .œæyÎRÈF¦¸5#È n£œÊ°ÞX£Óz/Úû0/sÏ¢­Ù¬ïy5çîiQö6ŸLÜXióÅ9šFmj{Ö¬W+-5WtÁ¤ ãqvCéOÕ%î”Þ®†µì§Qó²÷eIÔfšQT°(\`ZÔ!JÆJÂ2¹ÔŒu¶½ÃÆ)\¹U¢mkÓªUÓYÝöM(¢”q.è½Ì£¬'ÜÈèX½Ž*1Þ´‘xá¨RH>-*nN]'/ËÕZ´Æ>̉kÉûƒv»#çeQ½öCªÖí9•·BW–ºGUU£JL†¹(TU‹F+uÑä+è˜eNHµ¢fVG¤#ÈBF˜‹+"1!e‹(Y!¦öýL€.¨Ú ù2V¼XõŠ4a]ÀÏ×8õNë–âP¬½SÚ¬ ýÌw¦º;PwÉ›×G–]Td†¯ô@Ì–z ]Þð^¼wävMÿº4{Wç&}êŃÕôYÛ4P_ ñÌØg\ ®àë5Âø›o5h'xlà€WàÏQšóß×€€¨ J€ûò#;Ôßç¡>­ß޶ü¶÷)þÄ1Ÿî_Çkï_ÿ?L84,?n;õ0 àð=þ½Àôê ú}¦ À=œûÿë7ÿñ“ÇâìÓvõÑŸèó! —庳rXõ0ÙxûàÙ)­L¿käå¶U‚6Rèêåâ«´ßÁ:46 ¦Šu³%-¹äµ¼¾®Ç–?€|Øvu(Í`Û{7)1¾> hXwåå!?‚Ô%w êè±*›œOX¶=?æeš?)#Òe{fÆ,îž â³þ=(…8øøÍdnIúNY½V¾iƒéx˜ï;ê”Z7$[=v™%”1—…;Mçe½XsuîEºÊž¹€eÎeqKJ 0IX°Tdͦ’OÁùiÒu,V¶Ð%”Ž& B¬Ç‰N’¼ X¨©¹FW˜òBbWFRmËtënGÿ|:¸¡ÿ¬1²VÄ]àe :A3©Y5 ÙÒ:ù˜ö-Å“oåú>Ì:^€üt*ᢑ¨ÍŸh{+êÌ‚°IÉ9»¥x™9¥2Ÿ°lÜÐU7èXÎ÷`2ê•‚¾U}‘*AÈVôMKC§¥u?tW—V55SPKLFrB¶”dƒ\rÃ2-Éù£˜/³Ëb·9<)^`[°.wb!<õB’ëç{uØí—¦–F{4‘‡`L3ÄCä!‡:Õ;-*gDê‡ÔvÊj  ¤ Q¡²JwMˆ¥/XÉ>ðzÆq[4© åå1–ù䈦‘Uéµ²Mkt­ÞMÌGfÈ}¡’å1ç jbá]áZM£L˾F!ešÉÔ„ (-šXŒ®IÈ•Ž©¡”0­ALŠ"Š6e(Mf $)ƪ &J b]±‹¡U¢BCÖß^ÖØ*–©ž@„,y< ó´µ) © djEØj"ÝG‰pÌÒv6]‰Áwƪä L0µ˜Z~Ò*CZ¨øvWF³¼»¯€÷ÑÆ"æ÷ËåÈPHɆÏž‚{)]Þ2t‡ô=gŠ| § Ié—ÎlBÐûø†…öðKâ¿§XÔ¼3Úò ±Çpÿ%ï³ç±ŽÐïéþÿÿOŸÒ èøÓQ=ûL„þûØÐ½/ýx ú÷Qo(ž%~±‡ÏõîÇVà°_Û3©1ž=JhvwûÝa„ÛÚ¼+ ²}з=ç²/]Z¨Ö­?Ý*(塞{u9OmJ†ôçÌ*ÅÙxõgŒ±®® œ†×›füŒoèÆøùɾ 2”òÈÍÛr8ÀjkÎ3€waniMúQ¿1Y¿Î÷·cÖ{Òbóþ¯ùø_âtïÉš4l&ÌnüD¿8ý†ïáB||>=ä~DÊ~¶óK¸xPÎ墈7ì¢ÇCmEvÒÖÊ@\Ãèjº+ÜrœlŽª1¦ˆc ¢dWòI–Y]‹:@ËNò}å™ÒU*Ñ•‰ ‚r­É¡˜Å¹ï“䘳W‘»À9¥™U2—ÕõKø'£Ï„ÇÎQ ¥””d –Š„®ÓÛN´HF’oÐlð…„Eåë•Η4Í•²û³ÍZ5Fn'xÉ~³®žò² {Py%cÅ‘gNÐ ÷Ì­q¢®¢v93ÔåQÉݨŒ¶Ú³NåAS+¨—Õ Q‚`V³«û½ƒ¨±-~ñ§Ã.‡¦§YT(DjÂ’–øjš¹Ö<¹“h*™€KátxÕ,³8ÿ vë<ôveÎ×Öà!t®2éBT¢!¬qŽÑ¹#;ÉlÚvݰ½àÀfI!íéõ~Æš ÏÂE™NÖàÌüqʲÙÔ‚D ˆ­”YJ©£PPªçXÙ&ª*ƒK”•bîJUs©’k…Ú´X*‹¹ÕHD]Š‹„¥Ê^‰ 8JÎ&7-€Wº¶}omd®5R2¦HqaÞxÛBZW}iÇ/[.55R>‚~Ÿ#çcÜs«æÈj?&]Æ/ &ÞwúŸæ?MçÿÇ­AÁÍÕ.ÿöú6¾üàjö|Œb¼4pÁsŸæë—ááõÛ>Š‘wà+#HØn€Ì—ãoÜí­j¿nò³ôÈq {püýõ»!¥þá-ê‹~0ÚòM½ƒßh­ß*÷î”û·€ô#Ó#þ§êþ{€áÉ·æ©?u#”çð,¾çßó¬Í7©ýÛ™pàù›e-7ß.÷”Ûååõ…=4~qyU”mÑ`é5Ä 7-D ýôMTZ& E^ «™º”;ÌT'„ƒ0FºÊù¼p[.·+ÙÊtb—yî±Û£^—®… ‰ñÕÍ]‹·Ñã}÷å¤m|Ò¬‚¡0…ñiªòÄtâüpýº4{¼ôëù#çS SÂå€u·Å~ßgá¿ RûÒlüíÿª™ïvM¸Zýy×U¨¨õž»nÝz•]̈́٠»›T1[´WbT–šMí ŸXQݦZÚy©•KŠ>ç%„À>ÕNÉEI—‹ã²˜z”\9aMEê:Û7+ÒÍÌ¥Ê … ¬üºñÿGÝ›õH’egbçî‹m¾ED.QY›M6›-‰- !@ЛèO ‡4ÃÁˆ­.»«º–¨È̈p7·õî÷ê!3«²ª²ºIBÒöàƒûuà|vÎù–‘Y£7A½Ä¨ {"Œž|Í7Ã¥þë +™A®{SF÷,>bäª%­äR³µ#”[ZÐiµ__ñ`Uá:s]%„QŽÁ³äë8_4°é£huöTŠ­µ×šíZª‚xr‹yì–j‰Ëº˜Þ²yöRC6ÙÉfC+rƒE,»®z :‘6Q ä%Æã)ó1ºã†–é’‚©‹ô̧~ÒK@2ù(p«C¦kÄ_³ÐWÍNUCÅ7û]Ój‘`=­tñ¹‹ Ý‘C±1Î C×äÁcãG3Ñ\+ªm7][HvÈýû ½}±„)Ú²¨°¼¿ì<¾jºá%àé÷Væ‰ÆHŸKÉ´FcT. AÆÙ‰hhæ˜*hàKñIVÃRBЦ ­¢ Š "Œ2ÊPœü¤ð0-\Æ™Xì© ŒÁ³‹€ˆæE5™„΀)ìQ˜üìúL’Œœæé~á¼c Hħ$œùÔ$ð+:£‘áTœT£5>òá¿Ð+CÌ åZª´Ùãt}Wߨ²}èµÀ‡éÙ]G/wþ2bïá¥ûôT}ÌÎÂôÕ€naù ÷ð·Ï VPØ`ÂfÚ?³Û{?ô@ÚDðë÷íyþé£õºä‡ïJ?P>üh¤žß9cÿ–¦Ä Nÿ‘½Å¿rløã+ÿ'Î׿ô7þ‡Í‡ø¾Åž¿y5¤ZöÀ%ø |õƒê1ìôª3a«ãئø]þ`¬ ­yï᯿¦7 ¶@w¨‚?ÛnvÀ6ë†äÕªhŸð~E*¯¢4¬(‘àh¼è)iŒH™Õê±¢4]³·›2võn±ÙÆ‘†Û€í[ Lvc÷‡œ&ä‘“Í1äa0þÔ²˜]úûƒÛeŒ"ò¥l$ïR]†¸Êá–‘ÏÛrÅlÕV?× ¾ïd̵žE‰å°m]IOÇÉ@(•Œ`*éó]º¨&ŒçÂǘ’+œž0,¸K¸Xœ‹¼ÃÞúüt R©‘,hµn¨ç4úä·±„G`X,$fsM4zư3¬¬ÙÎ&œ¼Y½ÁÔÍ«á.åÕ]Ó QYJšˆï±’˜èv@4Rv.fõ+ UK_¿iWS!аNFeˆ}ay=ÞÓO$6<=3ÙWÓ;Ç!¶¸niSqŸ ®Ìg4{b½™òy,nÄÉîýã¾ìüA ‘ [Wçü EH(ùÊ›ª@QÍ sLöËYBt¥! ®á˜¤Êg»d/„c  Éè>¡• JUkÑàJqœzL§€$+„VÜϹbT%³ä¼fsª§L)O$¯9ÍØØz$é e…QTi|©uÙ꾯òZµ°‘~ù¦S¤âÆû™1w)Ò=CRë«‚LvKq†+LY'J›:"¤4(–.1¤èbTÈL+•÷“@†q_0Ž!Œ ‚˜M„¹„}E™Ÿ“ɸ/Ù0”æLP‰s*‘ú(Sˆ ì3‰(>¤i™B{Ƭ‘×k®R½½w€/‚+wWp!ÆÊ›¨@ë~7±©à÷ëÙþw%¼7Ó„ ˜ºwñc8uùA<‡ ŸU¸ûù? “VÄáãÝ ú@Ào.7œ|è…»¯{8ý-ÀT¸¿Ä§{¾p/ƒå üÛ¥ü @¶¸m&ççùD¥—Øõ1س…9C <òãbÃa»Ù]lá¢ÒJ0ŠxbÉ;ãHmIóä)k‰ &xŽÆ3œzâx† €˜ vÚr® †Ã…cûH²7Nšò {" ˜Ä|•Ó9BÏñ*KFT“öXýT /§ç³£Ø”›€ #Ã6f@b¾8Aöžœ#j¤pûÍãèfWT5È<%±òˆÎé‘™§íËûCËZL€¥h§ #vªjyUÚN2Vmq+X¡Ñ"ð ¢ XŽ”—‚q¤Ì¤¼†Ä‚OuÆ(ÓL-u%hßc—\Hã“0RH-$âà ¦²p” B±ø˜m†‰âsÈ!ãË$´bìêÄ‚Á-éçf¡|—>Áò@ÅE 8…yQÌ×ðâŽÇ(As  (úTÄHÊpw€‡FN•ÿEª b«4Z( ð#ø€´~ÓCO¨úU„'€«ø‘³óYŽÿÝ™—g¾ñþUvç+‚éàUÀ| ü²{²_Pàç·r¤+€æuUç®!ݤokÝ@½áöÿx´>ú?F }wEý @¶ø²þdÁÿç{tÿ×™,}üßÝ+‘D9ƒ{Ó4Õ?IÉòàxñ¶=º@ÄüFAΰò¥/îf¹ó3À/Œà_sÀ€naÀ¹¡>b»/ ¾<õªÿ\¿„_m¾ÁIEög¬Vô2þB{±~Üñº =/@Áüé ˆÅÁ¡fgŠŽP¿oË΢ªDçqÈZŒ[^Ó|לåÅOÖßnû„ÑNÄÎÃòI8/EÜRø€ý£"yÌ—hêÏ|By¿95„“œ5™mWn³ |ER £Q¬7ë¼ cãê¯ayÿ°ITD¹YF„ÑL=6õ7;5ŠÊT!ŠçÙ8Ü*±¡‰Ò°X:*¦œæ% Å·)iÊeT#¼ëJÞE8vÚ4.è9!§\žÏ_#c*6×! ì¶.#_ ñŽ\*0æ¤LlIµøJjQ·×‚fpUöÊ*÷‰ÜÉè»Â´­IBÉG»ŠÞn „â«h'ÖåÌ>_ÒËuþóõpiÅ05£&ˆ*êH;…Ëk©¥>§p4ÏïÒWÛðB â¯æêk¼ß4ú±R Ž4­B ÝU‹÷U[‡)žÏ··1?¤Ì^Þ'‹ØZËÜBÊ+æK˜)åR‡ÒfL_¸$JrDR>òQö.÷©Ž4™Z¼rÏHmÏŒ60¬d–•Óò'”"‰¶¼ªêvUKƒs7b—)Š aˆ<Å´»G9âH¬)$™e£ßcï£Í&ÈL —0žÝóà¾\ÂyàÏ||GsZSšLâ0ÛHõ®äL±LiáR(š’‹È^2Œ©!ønJ´O³ô>«7f[Ü5pÚüCåÚî÷lù¤^àãKøì÷à`ÞTéW›¥=AQ_Ðý]iÿw+Mºæý«Dà;¸^߸pxÈ=xîÕx< ½®áz†›`SÃu7ÎóëÚm_Y-©WÜ" ( …:~;#ú%€øû<1S€PþØÚÙx ÏÀv IDATýÔœýßOé5Ð}¯ox£<Œáõ) €Ã¡ëæßÀóïK€˜ÞZ58ß?g¸ËðÆÏ„€ 8¼Éû|£ß~@–åEüdÌð‚'Òà®±|Bôp›aÝýœ^tÄ/Êr©×C;Âd¢È[—J^áa®© †æX­ ¢MÔ ïE÷†jQfÀjÃéu^õ¬ñF<|Ã>:æ'Î:ÿ°5M á'3•&Ø ¨;\o{¿aœs´¨—R¶©9ù`ë3Ú_`ȆnòðÕ3²\Lb³Ž´u­…txB¦ø sŒE¸Œ¨ ‘P–Ób˜£˜Ú %›Tpï·D3ˆ$º Ò:PFÒ¹ÍR3Œ‘CÜÚh†‚>›<¯¹L'3'õb˜Ë:; sE£Â ¥bÄÉÃXk.uúqÕÆŽßˆx‘b¡#‰†IüŠ»ÏÙ¬¼–Å£_Ï¡àÙ]–¤Ù*uŠyÈ/|gIœD%¦‘gªYÉS\¨i‘©:­¶·/Üï%~‚ð±J_±ò8¦¿É'†GRð†f)•Úlê yyùT5d4ãgè“/ïÿã|„³Ñ'Y;ÕÕû–²jF/2i"]³äME¬ÎZ»<¹t‚ˆSdF2_ `ÔDÃ$ÖA(*r jó¸å:DÍ#EXÇB‚ì¥Ò-“ð– ûäh`îKuÙäJU‚ ½'AaÆÉa“O˜ã ]L÷öÅïïhØøÜ8 à<=­þ<Ì*PÖœtÕzŽëÄX    iJ¥ø˜ pŒ(Ö¸$(gT uÅù`YX}Ef#4%š!¢%‹’dI87 8HdUgB³rÈÜPbGŽ  À–1pIÌ9M Çæ<ßgû™^¾|žÓu‰×tE$&ÌàGu Ã2¬@Õ@>Ž…ø7W”“x!ÐÏ7ý…ôâã+˜üõÆ‚ô¥õwá#3ÿlºy|¢?IÓë?5w x 'Ø!ˆ#øï,«ZèïÁzppûj=¡Ü·ÍšõÃñ[?6 úJ@JñªÏËc@æ/cB6«òدO–ÐiEª_­¢ÁHð-ã„ï+ìP¼[l𫼥O,'ÃŽ(”6A%tm‚LçÔ&/à?ÿ†\Íkͦâ±’Ýù_j·¢…ß…k·‘V`»ÑmâO¢’ yî+ûxc²šâÐ|3#kŸ–zÞoµôQA"µ,î]`ºÈ.ŠÖ$áÝ]wè«ó%/Ö\œ=ÇÈ_«ý¢Ï¦œ«èS&4ꔜ@ubh„cÀ…B¢”¤‰œQȌÕ‹Zö¦•sâ—4^ ÞÏÄÞOlÄøC»©4Ó•°Kz‰¿æ•jµbåø9¦Á³ìsãFå*؇!On}|1¥Oð:¶-i´&"ÆôDõD>f2ät“Ξ«`&ŽiHþÁœïÜ_¡îqE؉Fª¬NÅø†Í+[Ÿ0¨„ЊPR&)*EǨæU£›¶ª‚ªQª÷l?…•бt½­/ŠtŸ¼UqÞ^ò\#è˜Q±-¡¨ÄìC6(å”åX‹š'á€3 AXfE–Æ?ê®·.*áì¤bÇ8‡°Îx 9çÂYg“Re#CEi'˜¥ÜDG¢1X›–8YP1`s…\טÑí•Ý(qrx¶©í“}yçš4×7:ÑЈ¬±¯ XNL.)& 1g Ô—BqòÑ—„ÀäÔ”~…Ùà0z¾Cqƒ¼"‹)vDP2Ók1Ñ—‚ËS PªR*d £[¼ÌtOú¥²v$‰l·mY³g¯­ëÂCŽÛ…nÃ'”^ñúg4oÚJJäƒxoÙj²ÓÙ÷1ÅóDÎbw¤ØIÈk…9F,8<¡ÝÃň¼ÏУØ4 áyc¿q矟ó3Ú*A}=~Éãßõ'è7æú¡ºäт皿¯n õ ü¶q—»íÅ‹- óÝÅÔkè'èáu£Á¬Á<è›8Áø*¢†àk—þ;Îþ+Ýîú½åsÿýŽ3¸Öp3|×Üüþyr¹e~Jêè ,þN#ï¥q€8Ü~öna‡ô6`ò#øô2™ ßfé}·Õùžýúi㫈ßT/¶€¶ 2Ø  ïÁŽ,‰›U'S8‰v¾«j% Â™ ‘øULTQ§Û­¼o N¤‚üŸ^f[ä6›–HÍq0->È¿-gð ©|àèÒ-äôrÙ”TU¶ÊÕKàko"?ƒMu#"®0hâm’0Æ=k@û§ë³QÑ»îýÜ&¼ìT$¸>GÒç¨*§D¥AK̶¬t!Î ƒ´+â•@h ÜT)”h2Ø(ådM^¬€qÑq)Œ A Ìœ9Š6 oLX€ …³B‚u©æ‰ñœý’¦°úňéÄ€ç¸UÚN_I%÷ú¤ãñL† Q¶SŸ'»zgZî²M*áp&Θè ðú–CB¼BÐà\8Yñ¯ò¢ÍÄ¿ ¡.fG…§%¦8-fÂsçå_©úÑÄ–2î÷)v+â^µGª³ÂŠÍ\…r-3l°v¦$E±Œ«&›×Üæ&ÛjöÁn¿íÚ5&3N#KMÓùÔ‘´¡ êjV|VÔªL¨§5ùS—fà„Í Ãš„0°i"s¶ÝŠºÑ-ç,F×4¬Ö˜i}åâCQÊ1bT §Pad`$ek\XÇà’-ÉOë‡iüf±s4ª«\0”ÇbÃè‡ç‰Ûá\á‘8 ¬~Võ–Ôm–-ˆÎ”UŒ2‚|,ÞûûHÁÏa¶®”€•'Ì/1ºÑÕb.epÄ8´;LxyÎĦ(»0LSÄÙR’CsV†‰ f:÷nòþ–O±ö›³Å~#â¦B•fCŽÇQ‡°ê°¶NJ“ðJõîï®) ‹­Î%ÍúÝy<¶óJÝÖ)çºòlF›C9rü%ejA€¶˜8¬Kµ´88ßµ«¶÷ íÐç/gøò‚ö`oà n5¬;>€u£à8¸m.Ù©ÀTîÐ+Õä#°üñ  òÄów0€Ÿà9@¸ùö¡Vf°ë;¹Iog<ø²Ü„×$ÿý×›Èåþ-bƒÔƒÿ00xÿÓ㦀ú»IÏô‡ô­ç-ï`øú7¥ÿÒ}/cïL²·þ.ì+Xî¥ä·º¿¡“?°¬ý‚«o-c]ýE¤ÝÌÌé}.eVd0€Ê ð³T°šÙ7}|¶D/É@`¿Á›‚K.[ã÷êF¤£L@ñßvtÿÀ/`› ‘Ÿb? ·=„ÃW‰BÜœõ¹} AÕQŒL–²òBÊ—/ãËâ×1Š‹Çw{á?éÒ‹„73’9ãøPÌ¿7Ó¯Yó¨Æ5S¨ƒh³5à舊Éåü@óóPY _‰ø—q=Ì’A“©²Jdf:óP$P„II(Wq,JF ŠÁ-ÅîbÜh-0Dcó4„…„Ù6ˆÎ²â ¾"…ÉÒnYÅ(’sÎÞ ƉÑ£Ù¸;‚^̨>ú›•ýÚ§so× p›6Zm=ÝsŒ»²F‘hSÃÄK(Øí™8?‡î¥7G0¿Èçkjw}¿·ù'P …[EO“³kÆÔ”ŠTº ‘S"ØÒE\Nî>Ís^J^é)žÎw¿•~ ðqÞ©Í^mZPèYn4ûoÒVq“BÈEÛZµb&(9”’Pœ’:-tŒ1¸‰.Röœµy#إżᚠ혈E Z` ÛSɶŠ!°%Ù“‡LΰP ÊKFãl¾É/f='Ñgp¹øc¿ ƒo\¾$÷W„osnA3vL&¤kÄp…Øå ú’¶•n!UѨ‰Êª‘RhÅ AÅâØTÖà¦~¶þì#QuƒÙ®âÉ÷¨1˜–cÆ9”2DÛ­Ó’œ‘3G»êâ2E…‘´Ä~…z!1 Å>XìhóÄ–ÓšêÑZ;¸ÙVJeMa®Eò2·™CTݲ¶¹Ü6uÜ7¦ã’F°QÌ~ýƒ¤™Ëº.« G·zs-Iw`U½D¼%=Ä€Ppqµãˆóv¬7aÃë{Ç>?®ð"@¨vO`ìáð¢à§åZÊ›Êûó+íì¸Áà³ÂÍ#H«{«n¤ì|æ^ É“ó–sj0 {æÍ#o_“m¶Œu³@|ñc½Â¿Ð·ô_ÙLi}—”ïO\¿y‡´/½UÓ3öo¼Dü;¥<…­…‹7¦þOb&OЇ7Wßœ`97Ö€Í)±Ü6)Üàžã…¶\îa¸_ qqÁ%Æ‚p±Ôö+ÊHõçôñÓôqu1kwL³;§ñÁSKj´ý9aô;gjG~>ìAG98÷øoQ‰„¿˜žÁ]…oküð@ŠºÍËWÉAÀôð ƒB2PuÝYÒÌ’ÔrAt^3"s²CÁ¬e:À\èÖi,2 XF·kâZ±ç…Þ®ìK”þ–BM=wÉRX4 íA§D…]qABÛ(ˆg3†á5çeµ½KÃ’°%Dlm¾Â®ƒô‚¡ÿàÚ\ý/”/fäø…Ö­æÂ dîóZ"r9›bÇ8´’$B¦}fËnÆ•ô‹Ç v,×­©h‰6Ow±õ€+ ³‘“\sÚ|ÅGRYÓÅã#…*† ê:õF›ïùRúc[]÷,ÝÕçņG¸©)êy7!õãg1цjÊòeÈE…ôÙ6TLÁØ”•ÀúˆŠ'•r³étfñ‚SØ–ˆ1e•p„–ÞS2ê/ц†Iö]¾“2P©åî™lrJåh’œHM=Â%3œ"ñÒjˆb^ª1’ÙŽ[Œh…¢jÃâÖû{Æ\Qƒæ%ò „Ø 9l£Áæ¨!)Ê.ÚMä-gL0®ö̦¢jÇ:UkJõ–Í‚y ™‚X‚uÅNÆK¸·ëñt‡¡#Ó.=¥/‹Ë½B`Ø¡ÉÊy¦¸È %û`$PcD¼0’JÅ r"!ÚÄ)£9ûÑÅŠ/¤Ìõåh×'ä<Ój¢Kb (F­”ráj%ã’mË|ÃSæK . b0))Š2e.ÈU•7ñóËOÐG/þüò‚1]Ï$ñY^hø|ß1¿ŽqJã¶·*|t€ön‡N+{Y`~Ø„çx¸äA}ûÿK=~q£[¿Z`oøŒüñÕV2}ç*½8Þ¾ÅyÝ¿•§Ý ðÙ›šžß„Ù|ð?ô¿œôÿo¶~Ë û'TÊøÙ? *ã»ÞüZÙðú(¯ôÏ_§R÷ïÖ1*È‹^ƒà0®°¿¨öwÄ 0Á!ñð2\ŸmAC2ŸÝ>øÇœÿÓ°jéFŽ Ó€äjµÓifÇ£úô=uøwåB¢FЉ†u®Õ"Tm¡ŸJ!C±É´tØìíØ 3Ù×wÏÍï5‚•xÀïIüQæöl˜/æ@éÁ™÷Ÿ~È¥Au3®ÂÍ<õÑÔe{ -¯–´æµ˜ Û⺓Eœ ž „¡£€°K<ÙÚã}QÀñ ç‘ÇHå³,À ed¬2.x‘xÖÉB!!º—þ³’„§ÛàU–H¨Ú ѰÀþѦ_Gö4 é–Œñ0‡‘oYf”Ä QX—ø}Œ èš.å:f*ZÞ÷¤8[´¬ý ä+¼8Ã3_Ðøt­È²0À7Ò¼ójÑÜ_Ê?ÓrnP†È]Þ{áƒEéV5”|WÏ›r˽«Ò{ÞX¸¨½C±÷]³°-JS “ˆ刪Pö¨ÂÚ牔¯}ÜÙécó"è6å„m² Sm{µ< Ò†rÑFË¢±%Þã9œÏ„ösn¦Ha.‰—Saw´yFÛVvQkW|²ÆÍDŒ…â€}&`õ-–¹¹ÁÔ–ZTX“Œù…u‹–0ßY„Ï¥k„´´{J+qd|â‘,¥A†G1…Rv „©d:ÑRXL(w>o&˜'Z¨¤ÀsÄ· 9pãË~üæÎöÄßCÿÐô…Åu ù%xrÿ‚Ô$žPž—&ºZ„ö^9Ï+ŸÚ„*‹‹¢‹Cœ@´‘RQ}`kˆÜeY¹ ™evQ [ê•’ûÁE¹i%¯1&Z—Н5²D„°cÍ ˆî¹ÂD¦SUI¢!Á«\]íw_«½4Ïts׋ßCyžtI™dB2¨àí Ö÷íPXû1@üL Þ2´h©©/!ÒmrOàÓ¨ýs øw³ð©´B ßÈ–)|óðCcŒþà_…Ù0Ø _u$oFø;—ÉþÝK\ì¥Áÿú†ÿz,Õ-@è߆ï(_ß½ñÕ÷ù?ßrã—ûÞQÞ¿ÖK¿“Í·÷q×P½Æd ß ¯c=À)¿ù¤œ"<h"\hËÑø:ÏþÛo²õÔœÃÁò»ìæ*|>æ÷rbìý¿Ÿæ^ln±ÞcüŒ2Æä‰7ÇœôxÎÝÙA &¤˜vç‹uzìˆ^}‚‰„þ¢¥²²‡Wt“ðö^ªSê.áIwH.Þ·!0öƒ]uõ³på½ô< ›:o¨õŽ~}×´ÇüéÇÒéî9Uc,;¿nƼ"Ÿ jÚš‚lYƒ|¸O!™RL m.<ÒÖ‹Rv(á;ìbÌç5¬Þõ@7¨dQTŽ.xŸì¹àwU…Y‡‡Ôâ=“ïp%û¿Í‹ŠXRP50T3a°BTWQeçÝ‚Ö:å®dQ8²~8¦àGÔ¡=Všc¨$éc>Šû%h½gzâ#Å,¯ªp.Z&å~Æ&•PªêÙüAÅö¾ø]ºjÁ¦:óð0b@ö¹Øè~ërƒ_#5H¦¡u%BgÏ˼$Io4L=I²+¸"øå–¢‰ BPïökñXÇr4•ÑÅÖÅÚ=xºE ² Ž–h8Ĉ-u!±rÆ:°néö)”Ø l ÊdÄ<•LÏDƒä<ƒí°˜Ùœ_hð²~ʪ]!“X7pòšfˆŽPœ¥$µ‰kγ:D•dW– \¥IN™RÆ´¹¯º/A®x±`SnSDnÌK†ãñôpZge|ñƒó¿Çfö'o=¹µ¤¾N3É’¨âZWT«Š‹mÔ‡5KÏMH¡ÁXŽŸ2v9(HÙ¤‹ÏÅ&’JYáÐ#$±Ú Ç—ÞæÛÝ>t*J²+…1¾¯ñÌ÷éþ&žÜóiyî]½á‡«ëV4‘?Jñ.©ÛD!ì,ÍçÿÏ팺cÿ™ê¡dØ·T ãùÜŠ3À܃;Ïè…ç¾£ åé2‰m!gÌWeÖV ¢¹Ô"=Þ-ŽÇ;gçãÅG²Âmz®Ïÿe~ÞÕÏg¹ÁTqårÌt%ä+ˆ0Æí°ÿ@åË+D?'ñ…CÖþ|!¥Èý‚„Iÿó½w:¶jÂV$‚ÆÑ­í3®8Â!8ö4”1¦ðóð˜cL2–m‰¦ Bè¹d¤–@Ï1®eaÊû‚H‰ÅFŠ‹Bø²ˆ=DXÖ¥;®0¯p®–Qô‰D('ZK¢¸¦¡ä™át\›%΄‚)vnì‹­À˜_ neጠ^.ø?"%tš¼ º°ÐÙG´ Q亢žÆ÷IØ€¬™Œ_Τä‘õVÑáVÊ_ȹ[Oÿ}Z\>ºA=”#2²ï«\ØöÀV&LhI©6‘ï Dd\ëŒG\*ªN£¢äIÐìyšpš2÷‰±¼=äѴ)(3þÁ˜ä§Øiš]0«?»œhÒ(D¼#D•Ô¦è_ÖXs’n44¹ÈÙem“+1fbË#–PHñŠ›qô¡¤Ò¥¥^)-p]•ˆ–qÁÇÑg …¦BHdID<âxQÀ! cÉ8Û0Ÿ—ã žOU‰¡€#|’1™»—¬êíB¿¯á3_í쓟Ä= °’൓m‰hÈs N’ºâÎÞDìZéݺ8S·ÔÖœçLÂ’iÈ~ËøUpa¾äFt Ù¶¤’­luÅ?‹ËÝ)Í‚W¢®lÁ=µt0ÂL8Ž¥1a§ÆÚï½ÙƒOêØ¤ P3®.‹SC^4ø= ÐXÿ3;°OÕiç ~9çè+0ŸC½½c}Ï!¼ –`ÿªpÈ ÖœàüÊp/¢"y€OÞðõ öí!|WÐTì¿­…ˆ-| úwz %ÿƸLÿJgJ?>¬Wç½}çÞøO\ ¿jðþ$0¼ëž  |ø`XÀß¾íXmtGI &ˆPÌ€~7vÛíÃî)”Οů‹ß­u>qò1æjÔû ¾H?o™ÈóðU”èÊXÖû‡ÛHÄ/ˆßÁ2ˆ¼¹NWI‘‹I=ݧmÕx½p3Ñm3 Ô éX%Ô»éb…NÙ¥Ñã:äsm×x¥bMað¼Hq RÆOy|ÈøëRjnG¾Å—‰#+žYÙP¤9& ã´2fGJ\\ÃÙÅÞ +DÕh»qÆ7cøºfÐa¬éû3¹ØQ0Õ¡T¡ðBJ(0Ýê«µà”¥cU‡)s]NyÄ‚ÒQâe2)ö¨,Âã$Sœ ™ÚáÜ­ðsYÃÞŽ p#×r§ Uö`)œ(+¡[†#•Ã%v_!ñ®ÞcÌŠM:É-&8‘Q,fób«/O–*HµÏ–l­9†D„c¶¬¶4¾1T<[Xac8I9箲z_©Ë̇€WfUəВÅûÎÿ9ø‡c¼åUUë²uBp{™i ‘ ‰P•Uqq9åÈ´q ¡ˆx¾m°pè8Š;F¨©ØoC}Ùåªùý†ª­jµÖ²­V¬g«Õ0÷Páxñ  N(V´_6Öu@Ès’=+ÕEna&RÒDÆÌ“hŸç•VGä3*ºD))¿ x'Õ#^K„ÚhžOs6¸Ô Èå.¹#”HéKÌÞÇÙR‰9‹â%ÅO9T-nÔð⑃ˆuÖÈ7ºš ޤ‡³Ñ¼²¬Á ?’´xR¸FÀ¬Tœ£ˆ­ ö´Neñ']«»¼ça Þ&ÖñɃÑ.¦õLôTÃK¹dÇ>„b ª%dÁ2¯)ÈGN`.k´eŠzHYˆpz£!’ÝŒ:MOîŃµç©œHÚę⅗5GcCÓUÅÔ^^º'3ãâp:­Þ¾õCÈÙuyËà IDATŸÆþHjµa3ÝaÚKÒ1Bxi¸ÿF4/ƒK&‰ê#zñ×½ÙÞmÔuc/w[•¡9¨Do“4â„kzæðàh€GOÀþ;–ÿ ðE3Á’†á ÁUu¹[6 àð_l{_ ¯Ñ5ò‰÷­’&¸xÛÕuþîzŽ7PAú–Ëô=“¡Wa¢À \ƒÿ®N€Àˆÿ1è_¿ë·3¥?Ñ„·÷ÏòŸ`²´~wú ‚×ÁMoZ‡/ %Â$ôæ­eøA‚[2)ôå»=Û³„­{B"K»õeåÏ£ÂÛ’·!¤×±ñA ϖŇû“1<»äŽiî7æ*ðý%)[ëH$U¤·YBUå”O$YH<âm’ÖcUÈž6” ň“+(Æ‚Š@SrÅ#ZbÊñ‚›–ˆV$óàùZx²¥\tK4C–K$)TÞb„Ë^•–s 2äB˜[HB20E‹©à)/Ρy¸†óq™ !+ø¨{Ó^MŽô:ðÄ‘ۻܵŠÅ¥IJ-É-ÙÖvc ̇ùó[00€1ðH²––Dv‘¬ºu·wË5ö˜U$«¸5í@Òûé.™73oçDœç9ÏÉ:S¹ÆTRT1p­¿rbqq¸«PºÕ¡6|ËI*±8¿Œnâ)²8²L:Veª‹¯ #h9-¬Ê²±m;Uq^¿¾ì—WúÅó—ùФ2Bi]C•w§Ù¬æBÙuWkÙ,âòa¿»™C ÉßÏ啯7×]Gm‹&Ë=#,—óÂÖ…Î1½½Y‘¶e¿4㊥ÍcÓ6í9=ì9韎ùO—ôwXÒ,ªäŸNêOQþ÷¾ê0oþë'Ø;LÎZDîtZ3²låt ÐXüÛ3œÿ Ž þ äôN>1h úù»K[þÖ7õweðÿ <ý-_®ß2´z @Ïæ7zÌ× ýš!þ¥ÍÌx‡üë'~ñ#Üðm#ÓOÔh¾›!êßzòÝ—ñZ»;XÞ>«› ¹†÷À Û×oLVƒO‘½ff¯ lüçÙü+üéÆ}¶Z§þœô“yeªÃL§täêÎnGºà0›{ŸÆ ÒˆyNi>îµ:ifh¬zÊ À2ášÆ¢ù´©RX2##jïi8QçZ'Þ|œ¥IzPâÿ"ćùdO×öìÊÙ³¥Ä³¢I5RÄ FÇ:ÍkÕõgÔ¤ô·¿pÐü//éÇ3û³[KH®?¬edjÊ~‚lྠÐs¸ÊœQÒ ù_ï—'rºrÆkU’\`žH¯ ¶BgÁ’‘*fžRŽ…gE=¸-ŠÑ&Êu0µQL —ÚŸ¤·¦YȺ^¢!1U W …“n¦ý)|˜h¶þ?÷?²½PFòlQ»’VðutžªÑS”ÂùÑ?æûÍ´– cOGý¨œèóú3Ê_Ó§û\~ýj}¾ù4’*¥MçNÜPp÷hð%=qùñ™ÿ0³ rÖ,b¯qà¢q‘”sj÷Ö=ãLltÖ)Pï'²„</M1ä J2ù«8¬ûl - êÌ´ï7ïošë‘¦½&ª‹D{‘b®ÎH­†»p\¦,Ž-‹bepÂm ê`ŠNH%±cÙ§Åå r²3,¡Ž® ñ©h ­LU‰©w³s‡HÄB],šÙIôNDKTåÀN©.ËÚð¨$"$êéDUÉÄ£Í é4—aYvã.?’ñ!¹LÛÍEò’}N®Ç<;¥$8<‰ÄdfÈF]ÈÙ~hZ£Õ5#( ³´%‰ìe‘—Ä 9Q>º%–•…òaœéNšª"”7£e.Úû¤â‚¦6rS)¿)±v¥}Œ9û…äĸÕ–ojaYÛòíBãq'ÿšÈ³¥õF5¶KcNÉ~ ¹÷l˜ÖÒ«§†ÓlûúöïÛRµàzά…µ²Líj¼D¬Ç˜«_ê‡òžYT÷¨è#ð—bW£u’ëæ2çgWG½î]yþDà xr…õsàà¾îv€¡˜W 4ã錰 Ö}kŽ>ü”ró®b«¾-W„ï6Å~3LèíAÿÂ4%¬€[àáÝd¶ôãsBè×Ù¢ïn  ྦྷYÅ3^0ÜerƒO>{c9‘€’ëðìyÁißÐS›av8µHUBßsíflä#ÖñcÈb!޼8¦¶lE{1HR‘†Í4É™¸Ç…•¤jQº:1:M…¸¢òÌ¡•ŠTFä®هrÈe´ˆ&Ÿ/4ô /dòuaÜÃÕå¹7þñ=ÂYÞñxÏIÆeu}«ú> N Ý ö¯Wü/ê‰Ï§´þ×uY\fÆ'àld’”e??¯ù}›ÞWµÈ¼)º=YI ‚cOfIO)Da4+ʲpðsÞ‡tKÙ )jM\[kÎW’¤X K`Œ×•^³ó‹v!‹4%q⬷ƒŒ'RâºT4+Iæ¿Èï "0/›Ûc׃<å ïbÙ³9UÚ°)]¸w9 þeßS?gÞ”gé?ÓôÉŠòÄ××Êië“q.F.g¨œ9|3IÓǹ¹ ^jæi5[‘)èX$âz]rÃâ¹³Ý^½WŒéR)]+æóBåñÑ¥KÅóÀ6ãlïóªÞVóm­Î/ôfÝtM æ’)†¬$´©8iг¶`"–š%®EÒ˜+f%Abrq¥X’}9ôeV<€KÏ$Ù%Q¹HPÙñ0'ïç¡¿}Ìz»ˆ&çT+¤\xaÊGY„v™9V”,ª>o7[¡…µÖh 4xç#;ìç»å÷ -ę̂#óH³ |*žÐf¦ ¤'Âò´ÞÓµúJ”&÷ÙQOmÛ:æÕÝ\ª1èâ™YK²‘SêVtÇ‹{Ž»ªZM¬S™/!Ź–š¿jãå†}¯NÇPjº–‹©›Ú610×D—P‡ ¯±dCË‚z&ñ4ÕºYkªô@Ìi¿x²³K¤D&üIR$r"‰ †ŸhNŽ?³éBo3ÑàDõîúå¶ß‰Çª'òælý‚æËðôý¤xª(ú#ÂÍküU=P¶i_UOŽãz“øAY¸€=Ð$ K¤-=¦¸¬ ¸„Åb™áµDÞÀÞ¿eÿÇUTßM?(±œ€Íw‹¬éŸ»¿áÇëÌ+ {­Ê#ýƒ-ªï|HFù¡˜Vòf>Éϳ¼Ñ’Î` Õîõ);`ç×8ÔXl|šˆôà¨~¯@Ô`8¸ùKÒÖ²Ea·ÃD×yR8ùKâÎ49¯V#ü±ßžM›³êE]jÍÝdÓfY´| Rµ‘qG¹ou )…õ©Ì,BZ’-²–Q½OÑgíïrÎâñKš%ÁȼŠõÞoÅ,Áþ&Æ?_’}öèäÑüôê*¼¤îC*/Îð©)ÿGȇ1Ÿÿ;††_Ïä’¦nÁ#¥Àhã>¶e,^0F;ÑLH(%!!i½Æì-§É¥Ì²R™3dŸÄìAÊZó5‰WZñ­)BO‰ËK$j´›îé¶“‘œîÉ­³ä0jÏÃNápašf¨qJãÿB^:­eÇnßÇsäæ>ÆL¥¢éŒó‹§òsŽrá×5Xb¿“ò`Ô繌a«èõV[KÜÀù´H©zÁö¥¾ìšSóûáü¢ît–S­Wž1vÆéœÙí`cZŸOé"u‘ÕdÕù±")Î9JV |²Q çúØ‹Øå{Ê\¥J£ÏÛö¢èbe\ì<#;ˆ" gJð¦^d x¢G}ÖðîI%MEF“<)¡Ì 6GïlÞG7šÃÂ’žE•SÓ¸ÜdÂD <(YŠ>¤<¹q:.Ó±Ä#;[Ïõ()§…Ðæ¼®¦še›úCfC¦y4©›«vuFDLe™±Øeœl°cÞßÛifÜy1kî ‡aKšœOs“¥3”gýR¦Î¨M¦­Öé–Ö˜V–DI“™´”ÑO%†mnW´N1¸øx=a4[è¸g›Šª²“žÌ¢Š$Xšm'×jy׎Åd¶áưœ)gõI4a+Ð2žÃÉ'A9èJÌ)-}üW6]å¬Wµní ˆ#¯Ò}¾ßÃT1&µCr‚Ç(ÅS×™…w|)Ä[’cÙ®)²8îBµéWšÀ˜G½Žá†= 7Ò'%Ϧû#i4ª ã1<âË€¯þˆ€­Ñ¯02̰3Üà,°s¬¡øñ'1©‚Tx†o½ÓÓO‚ØáÇ¿ƒþ‰ò~²Î<}7âîÇC”~G#ûj)?¾W{+NÏ¿K³Û‚f‡ùmùê9;<$§^´ÀŒ)a¸Ä­6ÿåIãd‹q:ÞÌ¿<Ü­WÒ]^™uWÕuæéóWÄíD¯O»IW²'×ÍjUI2†ùÈlñÚÍ2’Ê‹}P­¢b¢á(·Ó µ‚„ æyb§y=«©«ÝüæéŽQ²NMsb*òBdø°Þ?|:Z¯î[52™F¶ªüUg…ÄòeKNU9Äv¹£C^f²<ݪ³Š™«jÅ=Ëeʬ‹E„Prö™ÝO0{N>¾¨E•´K¤O! ›ˆR`ZP¢ä\ΩÐD\¡“œ¦Bc+›åäˆâ‚¯éšsTUÍUL¶Šz˜æá@ìC¤DECÍ æØœÒšJ’ÓÍU:—ã–öëþUŽŠ*5Õb1´ML¥SàĺöpIävøŸd#Ïž ]öÁ¶AéÃÓĺDʾÁ@cj5 nþMt‚—pæ“85¯…ϲí”V211†ü¶¯|&A“ÊPŒðꑇ’ý:$™$X©iÑš(!^Yý(«ÿ»oHÛ`éʺ ì¸÷Ñ Çãxº»'Z4ºx…J¥âI ɼ¢¦æu%£YŒ|T¼8.ÝäJ|XÂiL»Y1d!Uб›½²1›H£JaJ̆Æi]êEØ”‰óÜ3•I¼àm[wm'm‡¥Ÿ¦È‡WY¹ÖD{pD7ÚùÔŸ·7§ýÞåRZvÎ6œúEûQÅž“ijÇÓ4Žö¼+€FÚQj ×‘¥‘‡âJ¦:Цª§YjÖ‰•ˆ”™jNunb5ë~GàóÂè0󰯫äÔÅ’Ý‹4Ïûä<εé©…„¾¬©äl©@VMÒ’85zÒÑ0³5rÖaw¸K ¢­’’Ç fqBG½KJ¹•Q,ªCW÷‰üÕ¤<ñâ…;™%ñû)RF’¦‚Þ¬Šè­ºžÏÖÓÒø ¡×+Ô>9/åßÖá?®DÁ´•X¼~Bá’ŸÆe÷òrÚ]гwÓë©Ý…㯠P *ÿ®“pÞiGÆB1{©*ÿÓÜðøÎ¢vúf¢hüy¡oþýnø'ÊoøÉ5ûð=è/ÿƒn†ø3aßâžwrV¿+Ñ*бXÿ=ÊÞi˜ôFÚú-¤ØùØí¿ßû…hó„ß ùÅ0éËêùÕ|uyÊôá‚j~låÞê›)üí2ü™Èçtu–£6“§e¤/æ>ͧË~±y:xVlÜtd?¯™­®Q_×ÅS3»jJÆjÛ™éuíþ`Áš„öXéS­W-G M™þMeÿp;åZŸ³*ÍÌSLìÀ—cÕÈg…šJ›¿Ð÷-N²(߯cÑ4ò2ù2{ÔŒ¯ Nõ}‰LÝð„Æ©©d%IN}@fAÕ‰Pγ\§4!1 ””"=Í~n<¡±Di¸©“2©²%NÑŸRx$yÆòJ`”³W=oÂÝcæZõ,E“óÙI%×Ii¸®gÊX`2Í,I²@‹ %U„¤':­ôؾ¡ ¡,zÙ“{ʬÒh3Ÿ]Ì 7P±¯VÔ›‘Ñ[ë5eX1Egv–7¤/Rî}|¸g½ÝĺlRaˆ!¦‡¾Oi^‹ ÙÔºæ1eràü¯Ïi9K+Í.HêÜMuÿÊîVaØÒîÖnª¶õfEiÑ&[¼Št˜ZÑsš Ü@½9‰2“›ˆ›5£ƒIAš•ŸtAHу¦¢$\AôË\ç-™x:š•cuÅ O4')Mm´Ö©ìèq”î_<¢]ŽÑõÜ–ÃÃßX{N›jÎVeƒjžJxpË.oÊò¤Œ+ú÷œÆÕ<+ç]Í.…‹t˜|H2$Æ#hÉ”z­¸¬gœ#•âDŠªS&Ù‘Àg@4¤°âú Âåù%˾?5R [e±%’ë´ÒÖoŠª'ÞìɳK© ‘ÏBd'Njéi&JDq挺æžò£à”ÉsÕpyž(ÙJuÎ q‡ºOÙž§QjúȘAÌ‘)[/~¹O0·KÇ«E5Š âŽ;MVK%á/üq’’QÏ3h8Eù1 }~¤ß`N`$Ü@ R°½yÛí€ e–(ÏÜñ…`>¤w1êmåÜç‹ø³‘÷-Àßü ò7ü8ôoýÛ; ùcLä»<òÝÚ]½ùÁN£wéܓᅟÓ[w;üÔ;Äð (ÀÍë+ÎXÞ”($Å'#2ðÔÓßßËk_çLXë¾úhuº›c³Ðò\•“¹;Šöçg›õXñ™57 –:~H'ïìp"¯ÄŽN,Ž~Œ¿)0¼\»õ‘•Ïaÿ·xrwªI²ž@Dǧ×s,æYäôž›“ÑvÝh•?]­ÏŽí$+c[µæ£¶leC,ñϙ܃ f¯#CÍŸÒñF»7Õ•öEï+iœ|¡IY¿”ücMQ˜™HÞ›Á)EÑK Âø¤ˆnb1K‘5ƒÌŒ%/‚‡·9ÌSò%U€¥dŒœ»Ì åcñιÓþv¼?ØýL½H–ðiÍS¾û~Pr<¬+ïqá&Œòì¡R8³±*,#Þår°9YOž*ŠƒbT|é/?NC“RL6yÈ|*s ~ :s¬¨!¸5u˜¹ªKñ@ÔT¨p™û¥ J.ìZ´ëÙŸÔã.ÿ±á«_µÕ $ãKšÉNWRšÒ¶”ÐÂUÃØ¯Wé^Y%}CT³äfœèã2þÆOûݤ¾êM-V}¿þÀ·Ð\œÑ¹¤\±¹wþeÜÔ^¨/…Šº5O‹¹oˆ, Ü`];­Y‹D.0!³hsæ™S,¸h´ m&Ü9~˜H¶>)Ÿ¼Ê¢­Œ.ŒD$ïÑåܦ†ãa¬²A„뻣%QPÉ“ ,&Í–ÔCɧ©2s§R6´”‚}&9[]è\Í%<©pŽ»´œÂƲcìb+ˆæ$Éj)‘8R1"i³’lÈËiÛôóÓPø0°Ý±ÏZK¢nõ¥UZñèQ©É hºÖDi"ÈCš–9y†?¦S¯xËÛ̪B]¢…KzÞ¢a;C³Óšµ))£ùãÿµ y"“?[æÑž² 甑”-r¤‚—$ïUåt=²¾÷yèú³?}Ú0³;Güo?8lîçõaª1=JgÐ/À<ò•CÐû怑¢\½5ÓÁX£ÔïÂX€#»ð1˜_!(ˆ¿Â…‡›ä÷ã}Þ¦ýC6¬’›þyqÃ϶³}ý0À9pÿýí‚ÿ±è;vë_|Óóü¯$€Õ댇¯×þ—ð ðêšô;Ä@_W£+ ó;œ®Pq˜—ÐOûÃCÏN OØM[ýMÊíHà#ž ø3{äèü#Ô¸Àº’GÓ¸¾ù¬Mÿ‰,Øõ¸Õ_ñܰ뢣3]4frîœàÓŸÕ‘å")£âÓÆ–LI¡ ©ÒéÜGþ§÷÷C鮓óJÕï›uë·ç¤¹¡º’eÏgY¥:׆].ô³Âb ×\™l´RÄëëîY_É éº–B\Åëª47!V1«Â3 šXyU¤ND¡yT9/93Š ‹b(±äšÓZ@åLc¶.ÅR¬Ê 9/!„eö&M¯¦ûÓŸû/<‰Ó*¼T$f~êýûŒì·¦••[.œCõÒO§mêÛr¡ënvÌÃ%qÈsõx_.éjÞ­?>]\~,+aZ>a£™oªýãÅ\†spš¹Ü%E½]1ÊØ©¡ŸäiKŠÙ‹—YÓi""ÌR²uÓ-¼Š\K1³I36óö‘¥ó\ À‚ºfRÍ­¢´±JéBDíqì/ÃÞ {‰vã·%ú÷NIzdµˆDƒ_û"s¦´É‰^– 6“©dçb3˜f.RRé“"‘2+·TP]E1’Ù¤^»Ä¥$VLÃ¥‰sâ˜!àŒ–Jp_×^Ò‰,ÁZjeKi¹eYª§Bˆ_ñÜ2º.TeBc¡„+¡µÊ±]ïãÇ9 ÇHaÞ—d‰`sØ”¤éÁå% ­Ã¦DÌ*¢"í¦6µ‰„ÝI&êfÃRc¨â²ÏùÅ6é[kä ’Çm ,)éÖÌûä÷{cr´F}!.M9…,ülU½`YÒÒ¢)P–š0ÂåÑ㸰ÇìRêê’©‹RÈü‚½‹‡³x×?ºWYô•«…É2ç…V:ô¦ç|ÎuTŠó<-&ŽîlìÙˆ:Δ/ÂrÊw¢~¿jŒÒ~˜Ž¯Üí—ÀíŸN ó•G~m(øox_FáǯPÒ÷ðéucÄ °~WÞHáû“$¼Bruôrz[ƒú½¤â[}®Í›QÕò_P~ÃÏiñÎÞâuèÅôóô¨ ¡×£8ªŸ84@÷Vqœàçï‘Ù7û DàT¤;ó8ù ûÈãÜ`yÄâ ÿâôÿP|rJÝÁ©¥˜?s^›ÙÉxwc>¡êÚÓý@èÖR‹'‹ uÃÿ“5èC<¼¢ÏÎÙÊ‚;×Kk¹!¹ûºÚ9Ý4YAùIŽ÷¬(¬ú0k"åŬۋÆ×ýG]E#GUÍuSˆ«¸¡¼ƒ_GEAö\ª ŸdaO(™s½‰%®êTwõª-´TáŒÄX¢zâ(©ï–¹]V›ÀLÑÑÍCŠ„‰, Wd”q’Kä›ìÊ>B͹¦ªEOHY€JFB’ËΟNûQÛ ‡ù°<TcBCË'±ŽÞŽóS§šf—(#êÀÄ6b¤‰yzÌüü¡#-Oå„rû@j¸+q;}0/U©,âÆÅiÍ‹÷|þ¯ØÑ¸|²üâY§,›nqZ3ª¶f™œ#_ub\ù¦wE§}q^àöZÑ®‹44Ñ+ݳ/˜­ÛAðCMIT5ªê¢¬©ï”ׄ9~Œõ½PE±†iC$õ…6–·u#Âv’|E+í±š™¹¨É™¦y–8f%]lû‰ê¸M¦–±g¡äA‘©“#¥­&†*Ë1`Ç…†§r¢œ ^×Q¦9NˆÇ)Œ:J¸^V)–Y‚²%‡qb,©"6l¸6ä¬R<›R|!!ð…Rˆf³¢^j˨$8·Õ\Tš‰X¦øòD¯¤WÅÌcµ¬Û©f›ºjeÔ²!ØèÉ3AFRJ ËÁ#g±(Ñ›ÜÛ2HvJj’%TÎ=<ŒË–gªT}#Žãhbòsë¯]Ng©¢EÉIMÙ÷”Lð%&–òz´j‰¨yµ]]*³KOì0„¯þž7‰LVdzۣX7üb5oº‰4¼fŠÛŽŠ\Óª A²¦©ì2ìNÒ)¼}¹Ò¡tXÌúãûÕù@V'?Ü.äF¼‡çÿøM'¼ç x†¡\烆 |ì¾G_ pÀù[ð]Þuw½i–Iõ:+´Ëoï ~Oï"ûãïÛvó”þG'Êÿô¨×5ãïŒð{Ë÷ðÍ?}Öo¸AÞÓ p¶ÁÙ ô·Ø—ÀL@LÃòÌ«ƒÑ‡<ÃEXà%>«à6 Ž÷÷lÊiœš'¦å©_ùÓ)ÒJŽªÓrZ'-ézf¤8¶‰Yˆ?+õÍ­ôä6;_߇zùl¾ê´ªú ÇVC»þ ö„bõ)º§–^bŒÎ}%h^¡Z¥ŠòBºK¶ágvªò”\ªøQçP$‹È®L¾ÜvI•ôÁœéT§VPª ÈÖ1G—ÂyÅ9Iª°3ÂiÍSb™ñÉ“`iáa­¸”`ÅSO6*iY G™LE¸†áqñ|ö×M&EÐQ“ àSHIbÂ4 nþûå1>ßoJ ‘͆IÉYìz˜V/Ü4ž¦'þ·-ûã¤/]$Ú¯ô’ìF¥™k±È¤7lb*²?¤æ†‡G·{@øÂæªDú’ãd]ôd?ÇVÜnìG²‹5ÁQî:x¡ù¹„ÅdêE9ƒŠ¢¿Ãø"›ÝTuà‡-í:¶ögÇ‘–ãæ!±8ûtè$#Prí "½pÒš]9î³ÿEô¹¾ª¥)¦¢™°Š˜ óÙ ²ã”ØR*.YY!Й廒tê5).çn5 IDAT¦!’VbÊÈŒ¨äJI©H^™ Ϋ’xÜV稪¦n”dVÌ/ò™ñœ¤÷…¨¬eK 7‚¯éR&v«ãmäëVµ­Yº•Óò@cž#[œ-ËÈR)6•n2-”Ä–ôù¬±¼]0X¸¹/ÉÆçòÑÒ3®ù–˜8Ëfæ¤6U%\E|èEø‚Í„$bÑÁæDlºàS-xq„a%¤TJöžŠ€bo/ë=â9ºþó¹î\VבìoQÇYì‰<g³5C)‚9ZŸŸWjK ÈpO_ì§N†-[ž £9¿raK/­’EZ$Ö,ÈHʱ~ð$;3ð†z^ÓÝXõ³ùr÷ðéõ‰òpNZí—ôð8MtY7P¿ZÜçxõOês‹½A Ø4à3"Ãz[äyŽ€½õs0øøõ1—€ƒ<¿.F¼R€nßÀ3¼é–|kûn¾À×`Ûkàø:î?ÇyJþ§ ÂH@ûÝÇþÿƒ„?d“~Gž‹ßV‡Þ:}5Aù×í^ÞX.(P œ{dW‡pð8¾t}PaZ’§gròbwg¤Õ‚­dÕÿ;Ñœi¡X·ËlÝ *Ì,2ª9q§NËïcPx¡¦B¿äSdÓ§í—çTŠ>ˆ›Å`Qm/ê— òל}xâõˆÀÝœËÀÒÆ¸D}aÛ‡$Oºñ”ÇW¤>(5Ù–4Ît äN„[ÂK Š0­‚Ô›@S(qÀPÒ"£÷S»x)tQŒ?‘\£#tïÄG„% ‹4ͬâD 8*ƒzÒЙ¥¤ì¾¢*S.„3— qÉ88š=X œÚ@‡Å½<Ñǿԧ‘kþ«$„7qlÂoÂ8­L”òÀVç2ˆÜ5T׺´ˆ»­l2J$ŸNdÈs¬3'•³f<1{ Ío¡ÞgO;*«únyîx|4Xu?§aÝH³(ÅèѲߎ泃ýŸÉÞá±%4•Fu$a(‡ÿŠáÉts> O\:³Nð÷‹iN®ºMi7¶¹KDÓEª$™ë˜c >û—tœ_¹G«ÖŽ<u%}O%#œ¶\RÙNeI¤­É`¤^¢îÓŠ†®ŽŽÏ/c¹q#òP¢ r$\V&dhE½„M‡:ÍŠ Ÿ›êI sñ"HM?nk^Ë-óÊÙû™…Y n O’h¢¥ÎÁxš&ô‡CXæ\†ZQS±Â9o¼n`*•â*{é³ÅeŒb¦e^*¹÷Ç ›^:ª÷lõRë‘ÀØAqÒ€ˆh΢c~Ù¨–°WÆ0$ÂRbãH‰Â¶Xñª¨yA\&ÊCcÞÿý Ddû>1QæB>å‘$\–Çuºóá¶¶Š+²îaíê‹É\1}¹"ïm딵f9k‘Tjɼ6ÒZ&C•G°èKÉTVDªBIô!8(ÒÓ ]1#YiW’ &D !IïkQõ43›Çhc$q¡UX‘$á5¬ŒØñÉs[›ë­~FŒµ¿×;jû/Ù®ª·¥T=mž¥ú²m?n)ìòÄÇ"˜tìèÊ8N1ŸNó–g~ƒð%?÷swðñ£9#Ïϸ’g‚—Å™‹xdƒµ™™]ÙOÛñåÞߊ­<™óJÓrŒ¯â±b4ýšmZl³¹ŽãÉÞ’¬Ù¢É«¶ùú’1õaßMHZû’Ø| .ã¼I—g~$'òÈÓ«™ŒCjøJm• ã3/‰jRsÉ’…8HÅ)jFj+….3ÅÊ©t²”-‘DæIuqˆ)ΰKÈÁSÕªØáð*.})Û™—Ñ‘(A&={EîP²ÊjÍÍ •=¤äm d¾s¾…Í.óg«)þ4ùýmI)«ÎˬID0F£Í^å £1ûÅs·Z:Ɉâ%×‘m­$fŠOnm*I«v,)û) 1Ëdõu{ù„QR%cÆÃhBªY!XÙÂølY²ZÔÁ0z!uí*¿äþ¹]í I¨Ø”®ô~ìí-¯.忟Yu#꣮”æàËt*¶‚ѼjT*pó![[ìTú¬ûè2 êå!…˜Sp1ÅdëSÓœxOÛSTéÃõ{5½Ôš76E6e¹a´;,gT2ï^zYÈÉûU¤"Õ"RJ"«Ó&Ka¥†ä+º|ˆÔ’AÆcÍ?ܲz»Z°®Ïxá'á¸'ÜR/ÏB'Ï^Œ¬§ÕoÊŒ¡ _$Ÿû¨^‚kÐÚóÖis¾Ù|ò4¦ïwÃÕ®žgRŠä fà×YŒÕrŒÕGgë?lº÷TTÇþö…ÿì%¹Q!Ìzþò¤ÐnÞÇZós-»­bïʸ¸ÙGeÀ ›a¨[7cS•k2@)Q猳\éD4bNÁ%j/xvšsê( ÚzŒsWlÜÊ“‹Ÿ¬9Œè™ ´?IŸªöåÜg·¤ÝCXèÈxVâ\1ÎëG–މK›ÖS6Q¯¤…F{–IÌ£+S†w¯²ˆP”Ø/ºÏçŠò'¬d©O¶¸<Ä,2t¦ŒÎs9õtŽ™g&)©ŸÉ®Q‚êIÑúâˆÚ•JºJU¿ÑV²c×*‡RÕ•ÉÉsl˜>å‚ȘHLY’XN+vDåº†Ü Oû¤’Ø…^8^ãcÐgGÝöT7à µ¤K‰;»<Äü ¨BK‚;-¦]ô'›K—¢PV ’Æœ^¥|å^‘kCÖÌgÑäÊÌÏû£Ø|`›s•]‰Gx‘u ©ª½ŸÂÍýý1/*ÒUÖ‡¯ˆB‚’ÀLš+<šêqÑì¹u`ƒÄ4 Š—À³Ð¾Øu#  _ã{ ¿ß¿ ¬²†{†ü¢gG§QfIð¬àà9^¼À‹@c0®»79À·xÁÞGÿhñùg.¶ù?1üxÅüµ”ôú  ýúi~fÖþñw]Íô'Èæ¯RPxò1è÷r[@þqžý+ÜT@ãQï1À€áu&éžÇ“óyüÏyøm ËT |u×+¬ãa}qdÓ¾n6YZsüó~÷Ç mÂYæ_ˆzÍ?LäÓÞßÌØó ®®2_Í­È/Dðáñ/˜*SSaZ܇´þ”©Øð¢f5‡'}Ÿ=øšÕúªb¤É¦žcÚÿµP›S®—nÅHÅ"MA:¦“$qF[19«f]*Ö†IŠÞX—¨vÅ„ª´Ô\xÉ¥$Q-ƒÐ2çNbŸPiΕHD0 +tòPÀ&†u[ªÊCy/•‡\¤°´ò-£Úéá>w­L¢±¶4ؾL¥uG±ùt%…_Æâ'DGhÉ®+5!B]’CÝhÐÞýû…þŸ/’ôâ“þL]Ÿ/Ç­v{r¼!ô³M+ß«Ôe›2žïÃiâ׉."\éõ"i…;}:%¾yì2]mËZ𮕡®–hÊãÔÞ8cYH‡¸gH,µ=ëœoô©¸PˆÃz r-g%¬ÊüJnϤªIM£Nsf"§GTsÌzL“uTP­mU²à3j¹š’öcê™yZ•Lèrš‡»Ñ¼$Ùñ åò(ó•àub*ª‰‰`EŽä™]Dj1%>JÖ…<¹0—ÇÌD¡¾â cŠ…#‰ÇC Ô_òK©ÛɱÀË9¯–K©L³SÞ!¶Ò“šÊ•ÑJd„ì‹;%bÒ¬H*Z‚KF·ÂäJÙ A&½ã!ZRf*œó¡•šêzÌ2ƒÉÈ×H¥*¡e‚3Y^àÇœO(‚…À°xÊsSÕä\ˆZÑöÀ•®,3×&v%ž÷sñ>¤ÌðJW³™ø¥^6Ðs$½[f»»$»¨}EéÈC*wBNè~Sd¢•þ‰oEÎIï4-k¡ëíjQmjìN°,H3¨R!ÓC¾œ-î›Bö{Sgò9 ÕI‘iu¹fϯ0?¡°l Ý7Ò^ ö#°H ïàQ¿À䯀ð¯®0þòXáøÛìfµò/Ðû×¹mÐ þµj¾Z$”¿F³迆/ÿÿR÷&Mv\g–àwçÁ§7Å@Š‹’:³²«v½í_Ý»6ë]µUgw¥ÒJ¢R¤@0"â >ÞùÞ^ A¤´(³R¾¥›?îþ̾sïw¾s›Þ}Ìbþ{ņŸOâò{…å{Œû8œ¬Ê£Ô(yÿ1`øGð¯od€æ=僷bºðÁ¯¼Å‰P‚`µóÞÝ­÷Ð|ýÆý wý€ù çoOfa§ªip= 1ûÙ|ú‚MT<øþ9¾ÿŠ5Èìþ¯'V‚¡Á¯}y½×óF÷F èa¥euPÐs¸;K«”·TBõØ/æôØ–×íúrð“=ôûÑVL fe€YŠÛ–ž%í/ÇCEÿåÏ™Dy×Úýæ?Ðe§¹ûÎæ"\RÞ®à¸\f«V¦uöÞ1VÔÄ£»SCÔŽ=¥‹cŽ,Ò€ÔI\Ÿ:Ü|yÊ)'àæ[“þ Š+Qxî¾:´a‰SqŸ@jð5¯Qö¡R¶T+Ih­Ž|A´ „ŠqáxLca¦Odt~IhRô~²vÈÙB(P>§yŸîYHµ3VÏlÙÙ¹ÎU¤Ø¡2è;KFI>‰XÊ”cb¦'¬âž#Ÿ˜§:ç=UÏÚ,T:Kež˜³`¡óû‰RÄ’eDö,—L.&ºÛ"Æ;Ķ#±Œ‚p‚è‚3~Ä‘ß2Ôbä%ñÄ߈¤éyiÀ˜„0Ó`MÔx½N"†%ÑH0/Ò=a”»ˆgP¤Ì£`§œ_G|g ²<¦‚À“Æ)ƒ$‡–dŽ€!•è]A´á£²Èg7‡¾'a£;€YÚ)™ª3F‡pôñpmÄW¦|VaAËšó¶æŒ4Ê:Ì– Nˆ @›¥± (eÉ•çU%ã]Y‰ç39:zq²™ Ø–ÄìfïžM V.8­ƒç @PÏp1Â8‚ëÜìÁÃ샿„#‚»ïò›$‡_tÀH—øó§o p­Oo÷?mɇƃ¸ÿëù£â¸ÿY=%ÿKëýüsp¢?ø.y® ê}Jþ`ØñÞ ÿ¸‘”ßÃÛ_Yƒ?þø~èÌ{áy tAþý;êÿGóG €×=<¹-„{^‡úÊV½â%¼VŸ ªÎß8~<äÕ#ݾ\)Uóß©\GpT€¾€°6xÏÇi~%n 3ú“?œ¤fé°J¿Al¬¨Ö4ä³ëûúv…þcjþc½nºsŒ:KPñ8Ô(Î@mªê Ü@À–†¤Ií—NU$AFˆY D±JèÊðýÂYÑVÈ-pÈk2.(eD&¹RRò­¥RÈat1s ¥5K$ó™C¤ÐŠËa ™’$ažú¸XÆä ƒ)%Ÿ ®*‘BQxˉìÙeÿ«¯ïa3—Åôß(½„Ä^ð[=>õÃ:’<=N %ûP'µO8 üŠ*"ããt;ݧq 7 ®£rÕ‚ž“ØŸUÕg¼üîé$ÒÃˇb§êûðþY²ËšH±eEù©:ÀŠŽžŸD$4ŽlÖ=”…ñ Dõ™a×GZx¬dnŠsî_sM[#Ç:^¶"ÓÚ•j ©8o—ŒH3#3šÙ„ì‚ „î9#†©Œ³³6¦U€Š2ì3Éè™ÀÊ%ÊúÒâÏ»n¦ÓT(E'LèŠð]-jƒ^ŠmVmŠB/2~ISƒX=õ¤¶1”ä@/U䳡£9Tq–¸r­~KKNMòjÚ5Wq@ÂBa%¸œÆ4M6/ÒJ$ÃŒä”Ѫ0¡×\ ·ÕØ[fQŽ6ž0Ñ IŠ#&ÁSë‹Ïaï"²¹œ6>˜ÑãÄcâÞÐq‰°‰^M¹šâ©ó ‰äÍL•‰Þâ@r~”üdg„±gçI©ÌH) ±&°x,b!Õ‚“ªæEÓªf5A›.•‡|Z¸± ãÒD' ÏLP#T/ù©ì¢C¼°*×­ ó¨®H-(‰¹{8ë^t¥„ÓN¾¸óéµjn«Ió¡É—Ðtp–P¼±€¨(¬"<àg|³P_üÛæùýFð[€xø¨ €Ð- ·o‹Ò |pà Üø÷ËÝFs€~8ÊúÓÏ@@úï—‹þ«ZÿΙâ‡Ó~p ~ÜzûŽþ@ì"ÀðÃzÿè?tÈxÏ cÀŽàk¸IàXà73¯||#ã5(ûï·ooúû{xÞংƒd›{(¶í1øL’„\¢kŽAª9_¿(H>×t/"~íê™×}RÎVÊLw×½Rj§ÑËó‘TìήIrÚhæÎ5dÅVFwOy»Ù)U·u%çÑÇôh¥ ‰ ’ó–Ňç%^øöÜÕJ–#ä*1g )hCdˆ•Æ*•ÂÒrêq>–DŒG™ŒC†¤¡8 Ä™c™À“ Ò¦ ‹"dÏ#!j0¤9ÅR 8Z–Ç™[“‹ýƒµ9F‚äÊô\È2Ú-À(êkÖ_WáÆu«Xm ¬Á’U…:ï}ƈ(1Sžéy‰ìD54OkÙÒ=q¼cI\íÑëËñ_O7‹#~-¿Ñ«W­ú-ÍJ—(Û|»=M皉Vç8ŠíË“I!ÏéµsÇGëé|É_fì£s¹§þ¶ðdãš à"ôÛ1õÒþC TO #¢S«ð(M`¤[”â²!¤u]ðÚ€´nR~dw˜ YÓ3d'/¢¥=î+ÎJAÈ´ ²XœG„Ž4¬iB"Û6€y!·!âF?©HMPYÂ4¥<Ç`pN˜‹”gŽ €Ä ÆNYd\FŽkÁv.'7Žñ÷t3S ¸ËK"³ñËÌÍrÂíhè_ˆÛ(È+“(µHêɧ“…ôs7ñ €´ð`€î-Xœìáèà§—<}×¶ ?Ãv¼ïàá\AŸ=W•Y&~JÏ YXL¬ø:^Û|ó2yr:îìWäu O¾DÀTïmÉ1ã:ðÏH­Ë'U`,}".ÕÊ64hékÑî¤ì6œÔkF‡lWmT$±§‘à‘Ђ§¬ö¤YþžØ¢ 9·JºÐâ|Y$æJÖZ±ÍÚ@E />«{ŒM«  ™cϳ‹ðEĹ($ÉCA‰ÐL $OŠL@i¢Ò{=@J EµN%eXBÁÂ&ã’ÓSó@–×%ŽAÔó®^>ݦ×)꺳,*¨|2' V‰`1NÙcžÿ%Ú™=‘O²$’«Ž”ÅÝ/éå‘yœÉè´p§K kT™Dþ9pø‘n̓²Çûy~R"l­¦Knȧ­zV—õ ®³yT+¤Ð£R‹¨ÚÜ–…÷»Ä½°)Íô #¿qûë|ÁÝÎöx¬×h@ßV$«¤Ï¹d «®PD¯‹ÒˆÅL#Æ£†ĽR§(Z]L>qü qÅ‹¤GãRG}ÄüP¼ÅqÅkàgaðdº?º¦³<ÌIb<·E3|q"§±Š^'Æ…×Hr„]I}3Y6ȵe—Krìæ–£ÊGÔd-k˜«t'mœ‘¦ŒõÈlŠÏ“÷$ÑÌe<*ðn´cŸ(ÅÝNjJQL4Å\ú ÆâÃ)‰„"B™â͆‰X"\•"!EäKñ§ÙÞÍV‹ÔRãÃ`÷ª¤ºR0Î9¬ÒÒM6÷Øôõi©šçCpЇóÓtég›±;׉Ոu\ (J† ‘E ϱA!ª<Ã&Ç€³J V’Ó³J®Î c€…šrѦ×s^Ž©î½æÒ—¬HÕ‰N"$bHq)ÑòyÉn±OnÅa-Âgh2ÿw00Ã%ào€xðÆ0ôŸ (Âïï…¿½qÁ·{Ç!{ЉÃ| ‡·Ñ“çàÉÙW Që5|:ŒÏöÊÄÁ\ÃñòŽÁ3ú~ÍI?G1¿YÿþýZ÷ÑÞÑü7ò ÿ“<ºÿ6n9ý¢LAùóÎé[ñ 8Œo¼•~Îri ¿¿Žo‹÷ˆšp8Àö{[¦ÀßfCxúV ý¡ßŸ„›Kðàyõ©á~èn‡ IDATœöç§‹vxVò3Bž]=ªyÔäoÙ»@~ [œ'Äø4Úgž€§·zVÍFÛIS±¥›%Ä6Êz">3‚cNÐ~#~ÕÉ'TêB¦ ßéÕcÎÖ>p¶¨Y%Ô'Œ‰ŽØA° ßÞG’sZ¬W!s/[Ñw”+Û†K‰£ÀÇŒ—àI©ÉÜ×(‘œ½"‰Å&«”hˆH!BI! <$`Ä%Ê=+uæ0É5ŒÒœ¢ÍÙF¤B¥1Ñ:í‹7>L3)ò˜Û)NÇxóÒài¨èÌyæ°5(´Ú2]¡f ä/1œf¨#¹¯|´SŸ¸ˆ+ˆô‹Ãq3çúBQhŽ„ìuIÿ*5(nÙøÏ 2­üu,ä”ïïã?ëòՇݦ˶™D&sŸ·€Ú¶|Ùѧ-¬£Ü?q<ȵ8£H%°9wA,½ëúì©:Ôx*ŒL|“YM•£XÅR½nΪãä§]TÎ_?ø|töHáÎ2ûû=Ë~]nˆ÷Ã;¥/Ì ×²‚k °Œ}YŽ<ÄÄ! Ó/w‰€ÃN@ï øšˆþ´àóŸü¿îÿ¾èú_W|}îý]ú`#âßÃÖ 0À€þ`9â¡y+|о5K|ËU+°ó`;ÿˆ_¿¹Ož0XÃ| p‰Y üϬkZÚ|§x)õ ‘ –_×Ec¾ùŽ(³ÅçÚJ!ó”í<ô)ÚHº,¿+ùTä\ä-‹øOpù"ËÄ"é&Ò©èq‡sÚlä#^éy½fMU@-#ëc¨¼Ñó¨–æÈæCÓÒ¼¢Ç¯P¾D°m¿¾Õ‡ºîÚ–6LÌ Pd„ ^€ú}É$÷Ì: «P µ)xŒ,”ÂH{3/¢F¢"º""Sˆaô O‘; …;ž»TÜÝL†=šÙ1_Sx:¸ûnDÜ WijôÙÚ(ñÓ, ‚NÆ?Éå±ãÄ#°Ö¡k·ÔoøÐd#óÝ;áp֌խðŽÅŽyÛfLzªKºÌËŽþK៯IÆrƒÅøÙÝÍfZ¡Z…„éÄ<)i”X_‹)%¹År8*~^­Dµhu {ˆ$µèpäŽ`é4]0ö¥ °a̦ÃaNÑ%GJ¿…r®+Sk£^Æl#PH/9ܺpWÌ#(©â+ $Ðæ”¡Ê‰™ ™¤LGf|òòÁœüB¥¨3«Ö̪û’{ŠÇè^¤ñU8¬ÛnG½&éIðš†Èséˆk.»žm5ÍÑnK§}AЃ%hÞ@Ž8Ž’¼Ô$K“÷nAã@ " f €HG¤§i¬'â b<‰"0ç=5C´‡bC1e[S¿)H³üd.€ð¡S± €GøÿÚð?\ÌKµ÷…Á×î”.Š…Ì5ÇlÆûÿº–õh³å’b¯øLÞ,4ðÀ?‚'0r³*n$ÀKÿC¨ fhXŸÞZI¿iZ Ö¬ßCƒ‡ðûï•tïÔ{ÁÿûÏ…zÛ}äsËãlP²Ñ4”€¿¼šåÀ>‡úë÷_è@Ò¿~¿í°óÏãÒ»?«ü@G€€Mó4!OL²´¬ŠnÜòe¡š'ÌáùOI®ûpýyÔú]SGe•wô²®KbÃ9²:$4–£cÎÆÝãKW¤RÙZPÂnˆY‘j-W«Vè¶%VH„%Þf á~Ƙ¥n7ÎÍè cQøoî2ž˜A±i36ÚHÒ ç}O¡BYt¨ ãÙâ¼ÉDk”¼Šå:1`B[Î0*¨Γ"±ÆåïjÖxÌ÷Ö†…£]¦™E‚G_|ŠÅÙ»ì®ŹXl%9qµßb¹)¨Lg3ÙFd¨½‰¨Ì/«ßÑVoB0ÔvJ’Í¢ ˜1švÛhØœ™Cq½àn¤ã”¹{0é„…ŽŽ‘Qð—XÌ? }!ÚÓD˜Eéoq½¹+SAC3Y¹`áqªVðm‹·ØËãÂ}tÆ“ƒ®üF‡p¶jëè¬_º+Ò, ¢‡ù3 þ2 xN|kóÍ~ÒÈóÖ ñE-µ´àWÃñŸ8Úa,¢ãhJc¾/„0.8_€š¥aX‰v·k›¶Òë7vÁ‚lÈ©ˆÊë«"*R¹‘F#ÒÓ’ÈÈÕàõ>Q|Jy8ª “XeÄYŠ‘":Ë )„"ÌÐzA"RR±´­›+Y*^Z¬?œÜÝï_3 †Ïór@a¡ƒpÊÞÖê£Â%yýj^»]‘]q@áIXËZÆ\߬ŒÚÿ×vü”¸Oϲ*z’ðNÈ&"þˆV$WE×![â$^È&Ò´£ ò¶¦GTÐ`​MöqêLrÐ~q¬ì±~@ÌûT¼]oHÂÉ–FZTÆÌ'äaWz'6EÏõHÓ ¯ ¾ð¿‚·ZD÷ƒß ¦kH7§ #!ÐŽSÑ@Öó”_5lGðN´Z¨'¬@Ú é)«X®ÎµV!»EzŒC™PÈa½X‹b½iEu™skV-gŠf aŽØÕyÆ@(¡„" PRLsq| !E0HÄ!çSâ˜`„qa7Û( t_Aäá;¹=›}Q}IW­  @¥®˜‰ø( O Poó|œfUyE4 4ÔA %c# Ä  ”]ŠÑÅ A´èm<çݱ·õì#Ð^"¢'òIÐ ZÐɧH7A÷™(ɽj剨ðjD½·=Š¿&²¬ jî+Yé¦[2[s±³^Âݾ§ ·¢)1áE%ü)&Îÿ’ýdŽQtº $VG,£X"îõ´=~Ý|Çr×DØâZÜÔÛìúKwz¦J9/9¯ªÍULzyìãì¸c‰Ög ªiÕÚ‹Õ'U³ªêZZö‘EæÌO„ZFätf²ÎçRzëXJ*°xvï»çŸsÏgà4¥­PŸ—àðšçò¡˜xäp¤91×¾ôE£çB/“`¥äÒ ¾¸Øã×(lWøq^C¢®o÷aoñò2Ρ'O_.€3Ø»oܽ“‡‹ú·2cbi1çLЊ ý=tT<©E%ùp2îÞ󝳸‘Ï'¿"Ž‘éÎ0DQår .ÏñØ{ç'‹NÈ9fO"S¦"Ejƒ²+$‡š‹Jª´ã’P5æÑdS=ü7Y?Ýywù€§!‹5Z+¶ÞU2sñü8Žd¤œyÁ­'™³*1œ%±…b] 6³€ïƱ¥#D™q“]•‰÷pòvH!J÷æ~IGÉuSŠ h!δñ;œ’.âÏ"¤“†ø Ÿ™›Xt<†ù˜í«éÅì®  7àñ„š’?-iUä†m±ÝÓþöei€-dG¿ iý¿Gàx¤rÙv‘UwU¾…o½K´÷:BC`¨ÎâÞpxS’8€á°óoÆSÝ÷Ý¢‡÷:+ @öû3~Nü³+æ¿klþoÌ·ãÊ?Tú³½©· Àÿ„Ö÷_·à;€ <€õ!ƒÿÆN=¼|7‡ö†šš‚Á×¥\@§GEÃ|sì_ª‹6¶d×6-;T h¢k{XŠòù·@.ÏëcW¿’*,>%öÊ5’('Ó‘*@vÕëÇ›_7"¹ex3‹.™báÛ®£ÛƉY‡ìSì§!äžd(!ÇŒý)•‡œíʱâàbb ‘W3MH\(\Ë"h¾g¹ò©d$la…^*ÖvP…Â&ê¥1.ªÈb2u¥ø>K ÔäJò8$QlÒI2—`ÇX#xp“›f*˜! ‹ð1åiÁ” “j üóÓWÀ§4 °{âœZV46Šë„ô¼0vzME9þM*×J¬Wµ¤„tÀ ¹'÷Öi¸)ù/,/(+ùšÅP<µ÷@oBšIž«V¯Øºm:Ø—i½x!³a0µŠÒ粇#_?ëì7•†Ð`³úB¨MÆÅÀí^³-D¯™Z¶ Ça}¶ËZ2.Þù~ý¿ÒJB7y¶Ùéµj®9Ò%/f…(ÅP§ôìâCÎ᳈¹,' “I.3œRÈqÉÌA¸L‡„C)¸øòÉ>ñO2®³-x¨K±( c@ÔÒ5‡ið%¶ ÆëÙñ´`g8œÁkÊB®8)¸¸ ™“~ˆ9^/èìö$).˜tZ­ ðˆÂ%•! Ùþ“›éõmåtÏ8L£ÔâWP½(ȹŒâé `«@ør\fËsFÅ$l r½ ³’C…£÷„£©H‰°F͆ÉÚµtÉŒ{\V“=+îjA¶œ#£œîÅ‚¨ùRUO«J{ÔÛeùjée®Î9& 4”\ÆVs¬%Þâ´ü® 9ލ<f¸tÀ>sví/+ŒøwwÑGz? ó jªŽ¹Üæx³F˜‘iާ2O‚mÊ…ýMXXÙ º£ÐtkqŸ§~cý™—‡ÿ{%x¢ŸËéADÅr“£¥Ë€6$;@5$Æ´,šdì묎Ís_kY‰“Úî=9„î‘fR7 ÙÜg÷¼ªÿo‘ê¢TbÞYÔº5˜.у‡tOꈀsìT±Vê>àþM"ò/ÔF<À5äªÜO ø~ɈèßßðWX„ô<|ðäŸÀéÍÂÿûŽˆïÅ-½ú%,õhF~ v·pŠøîØÌ“ýœÃ׎¢vÍe­u¤”ö‡³ôm‡¿èf8[?òWÝ–"ÍÓð9Ü/ÑØÀrD.(Úb|Åul*sAU åþÄ—)¥ˆì”äˆ& "Ð:Â%ÒˆìdQ4ÓGT5K`+,Fš3qÞ(Y'W@9Œz”XJ­%˜µRJ­[Á* 3Ë0µ“ŠŒÎ¦>ðÚekÈc!7MÝW Y¼C8=tȵå3[ÂhAÎfCJŸdI"™ P%WLhùˆ‰&)ä’øË Ñ[±”\n7E)ÚUH³%ûYÔE_õçæTÏ=ÅÞ–¿H˜dºdt{^­+Å -C¹Ø@W˜àgœ?p"6IfØuÀþ ñà‡ý«øi>ÿ_„j/Øã<ÿ¥„MÏPTó+a:ç39úrl²>°Þª¯ä“/„wåb~rGÄŒjV« {‰ÍÝÓ }ÞÒKŒòƒÚÈß­‚‘Û9ÌÆÄ€EÛŒ«ÚsVNÀ³SMá%O3í.Ê–å(Ñä] npÃs3.[) ÁJ -TR`dX ”$®¤â5ÉbÒ'ÂÆä çl^ܨæÖ‡oS~sñÇ]pÇSŠCuX\Q弃ÏÂ=/c|q5\-{¡ù!ëDòÉ0¦3Ojd³:;Ód8Î/Éqïó32‰þÇ„5Y‡-§M¦:–¾àÅi’"‘JJ6 ˜[3`t@ðÉåû¤W”d >´vXgŸ‡Ò`$“æ‹ ‚\-».ÛeѶÒ'`1å{Ž__ÕjjÜÃBµÁE ³@Á±Â«.`³â>ahÈ&Mˆ~°åß[™¯c"‹d³ çÑ aæÖ×2± ¼–”fŽ{™)0”:Q€ Æ"•¾“ï©:@Ûæ¬sÈóCöùÈz„ o%Jãã³ç·nÿ‹tžÂis Eÿʶm½¡C}EoÊèY¿‚óÐ&„\áž{yc@‹€j  ¬=TÄv ¢…ÓÛ¨ûõGBhÞÕ4>¼€‡·ùa¢ò¯Š½þ½aC ÞÑöõªýX+m p @^Œß¿ÖÀS¸¶?ºŽÿ€À×ôægúÀ@TzxÛf@C&3è{oѲMg|F¸¶EûÍúñåÕõÙÅ'±#'Rº·½´ÄÎVÛ^Û¾¡Ïkâtþ5Á"‚ʾF‰³9Eœ/c•±à׌ƒ’±¨ RER&1g\È”eÌ@§Ä˜F¥–B·œgU 6œ MëH¡lËž¦)I ÄÄñ‚P@ hQ$ç†B tzP4UüzÅS[Y!!# PÁyDÒÂç4ëâ!Çã’’å®°"Ç(b»Ž”é†Ëj%²Ä–c_v+¸÷Çý°6ñB§~G(N EFÝ%_ïÄ'üAs+g…íBaBËY4/Ïò·"ÒÛ4¾òT˜&A ÐíÖ!:U J²…¡ƒýÓƒQ#¾Ú_ìÐÝÎ䛿þ“ÃëÀîª#×Dã6÷æHÃæ.]I1Óã€ØéÍJê“€‰r|$¶ëÍFnsðØ÷KÊ©®©bˆ0Êa0ÂO;ÒÔŒ#$iF8 R­͸>Úa²ã<_•W”ñC(§¡C¥]M+¥DFa•Â69A˜í|q),0É’.Ó XÑÅ(K ñÞ8lŠeåžÄ ôÁ=+¶TüŸ üm™ ƒaž‡*¼X;€4žw·lkÐðíÀ?!pÛêŒHÖžoPHîdö°¨§8¥jÕêJ¬è—y¾L„ûì0w5‹ ¢ªèqÆÌ÷soÏjtN/P‘ËœxLD‚ôPN9¿ªóÍÇ…H"):§,tl$¯ü°Î‹ÏKdj&·x¼uÓÿ;ØýÿGuh³© áfƒÇ„õyJ/"À¸€ùl}¿•凓Ö3} ýhó’ÿ ÕkŒþãj¿î:ùBú?à?­ìóKˆW³bKÙ×qôùRë?w^ѱ:Ð÷¤F+‘!“ÕÖ¬Ä#Æ‘Ä^åVÈ»ä¬ L®Sœi)™bÊ…%Ly lnglÆ(A&z5Oè8Tv¹XÃ?5]&kÎÙ’M*içli*ÖQc…6f®h8#´ÅtËŪ%®KJý49ß+‹±Àg"­&ôN/¸1|™¹«*“ ­Å¥nUTëä=Ê„¦-·0.>+#°¢¬`!T£$uYWu‰(z€cð¸÷íq-FTiÈcD}Sœ¦øÊ|¶·OS+iÄ%%T¢¡n^дLÞ0RQ9ÒŸ :ù…ÑxÒéU¿¢¯ŠŸç¤Õ$”>©ü<û;þSÈ© BuñèbtÂí¼è)Zd*Ó:E9—&,¸žir÷¯/?;ʽ¡ÜÿÏÝ›õH–œYbÇv»«o±gfU‹l’½Œ£Fzу^õôƒ…éÐ3ÓMŠÍ&«˜¬Œ\"Â×»ÚnzˆÌª¬ì,’½ „–¿…»]ĽîÀw̾s¾s”°.”\6‹ê&ªÆ6XG;«¬ ö%‰LÏ1\\°ÃBá kÝWY"NÐåg]sÙÀÃÝyD,Á¿m4}?Ú³øGÕ|’ÀS°Û‰9Ð[P‡ñ9pþè½â'†½þõ°!ÿ0HäTè?¹àŸwÕ?!ËÁ}”üwÀ0§0 ƒ“ÇÓ€œ€ü=½SÒ3Ð-ßÃõ@õÞŤe© ø«V5¿¨8¾bȯðp Õ8°_—ì×z^5Â4° Xq–%µq9È¥ +Û:E~ÐÒ•ç³Ñ“ùµÂë6Åžæ\ÒZé’1Ì„H›Ú9KË\¾P\ÁƒäÙQwâJƒØÁ‘1Lsœ² aJ"' Âä‹"•¥ª8”ʕʥ"Ú2YiQe·.ˆ¬b¨ëS¸8ù”R妤2d¬5.Lü6Ö¯Á?ͺb)ÊûÜv§ý+·»®¤"D“èÉýØ‹˜¬Èö.ÕÞT #!±£öWƒË"ÿe7kuÞ-H}Ò{B_Ÿ‹ñ³qª—] =ᫍ­–/ ògê¤++„! ?i+ì!©!'—Ê:äÂ}·RÎEHy¤"ÓrÌ©"HŽv½bs_é (›¸ìe‘úyÛšRä¹ÚµÙI¯/—œêrÎÚ~І„À\Ÿ¨÷µœ þ±ðýOBR¼­G±T…T˜½ñyvnl’X;­¢ËQ1´¤TÞWns€ŸMövÈ))£2]%Ã8{(Žöä!”ÕZÐ:1GèªÛ:ϽdæªQr#@Ô~Gr¿)Ý¢}^.ÿR7_°ˆ˜ûC_½êÒþH ŒÏ‘QÏ8Ñ—W²\œëUE›—.1¦Q•S]^Jú›Éïî|;(óL žKYT^-´qòp`¦(—´Z¬ã>ž´šêœŽg*½¸¨Ze½­ªó¶š•HB“\YJd’|Æ0¹èdÃr» `Ó~vã‰t½pKr Ñ &’x°ú´%ÃLëiÇóƪiŠ)Ò¤U&,S="†¼óÔÊÑÇ!E§…hÏ„m §!o;OS%õRzœ¯ü/ —·‹øÛŸ·§…ÔW·³ ³üz<›=L.0Ƚz>¶±Mûblúä Té¦äÏigéê×–b¿À2ãZã0£/_@œ0x%Ð÷ÀÃ÷K²†3¸EéÞ}°¥¶ªo>¨„«%lÈxíSÅýÿÃ×;x8üÀèãmŸÃ£®Þ³ß}q‹WÌÏSàéûï7pý£åÆ=nïÝ6AµRÞ­]>½ÓY 0¼ ˜n\§"<\í×þo¯ÆC›þ’.ÛQä`«*†ÒuÞ¼š†³Š÷JMô&¬§q?S¿fòbtzÜE&ùº"¢TÉéLø!& „zpO§9³I Š%Eb:&sLT^KT©@ˆÈ™–")žy ]QÉ@ O½DYb#ãˆ<›½‹Þû\Áj)Í#õˆ*„è’e$IHSÌ6Ð]ÌŸ0DâˆHõÓ¬]ÌiÎlˆÔ™J(ºöº`¼¢”$b§J,I&’¹Z¾±Â&™û‰§XÓ§ô̧EMÉÌ#¥G)¿9+úUV“Ø,EUª& <ÄЯžý›3¾æ>dgwùe v¢1™1g÷ŸAþ×¢*4µÁWÖ—™2b¨\i<¯tCÑèúxÇ»œÆDýRØ3}YIF[â×mˆMn™ñ4^‡áŒlšÔØ 8‘‹ÒÝÈ7÷ô~.CÏG¶¥ˆC??ô9­™ˆGë·vV´ R¨år+p«•¥‘PžŒTo9]<ŒUü]AS6¨Š5«y ¸ìÜ)̹ÖæÀ¡YÍ]É“T½¥;7i\˜©šˆÑÖñÀ¦×)Œ®©PZ)'¥DAƒT)„$-&ˆîOT53!$·#½²»$Wc+ìº ºe‘0cÙ0ÿÛr‰…zÆU[j^žW‚)Õ®ôÙºZ­Úf©Éb{òÙχmoý(¼ô„;§TŒ«º=¯õ’Õa"<ñ¬IunZºg^O¹À¬Çôpê:¹d‚¥P-eFÔ-}Rž·íb©]…­óˆ‰í‰o…Ñ‹›sÛ–3âäÅ Öw %“×Px½„iùid¤# ­×-·´û¼Rô$¥¨5‹Ñi•(Q‘[Û׊¡}©Û#M#,õœ Y!f9r§|àÙWsÖ‚ˆ±ª9÷)Òõ8<ñÜűUö„‹ˆf“žÎ§ÒƒÐÅ$пA] íÙpÝõU ØÃ2Ø ŒJB%“Û@ §~÷ªlaVûË"B‰ÊãËã—~w@%°"`?€{ ñ¸¥~œ¾ÏR¸¸Ø§ÿ?à¢ß·ƒSáü÷B´Û]Yÿ v~ß‚Çáýøô÷æ$ÞçùÜö@žq>ˆÎ8á òÞ¹éí»û´X àÀo9`ð?Yðé L?{ý»þ¶øÚ-ÿzøÑ_ë§?:.äzÑk:?øÉ‘à¹&²X©•¾'ätHî©Ûl̪5½ŸØØQ Šž9º7nŽ6ÛT;^f­eÊ&Ú¦cLšxî9¹ŠsBÈš+Á©œ'®@› ´d9 H˜ò˜Ý”@( ,1‰ÐˆÄ8 ”†(êf7Gì¢æ£jœ²™º<3ÊžR¢sÈ1ÃV*È@¡¢€Í\©,ß„XN‰ØXV‘É@2(Q‰0'ƒ¯Ib 3K]6>[ê #I6(B³b’U„¿~&wJíÝp[.2ÝP¹ÛC¸Þ™`d<R<³eCÉåÔµèG4¡o ¢ÓèÍ{Ú>TSÓŠÏ×åfL˜è’¼+¸vÛÆt‚N©ò6¤ô)+µÉuä<õžØò4„¢¶ÎP9.£WfÁ¾5fï‹Û=ÝK󙞞é‹Ê);gÚu~½*™.„(ÉÒå&ÑEG2bætpî²m´²¬”lÎÆç¡È~ØÏã.DÊ{j XÁüOuá<¬áoúYØ~¨hÇè='7|YHê5EÁ*™é§yȰŽè^ —ãº!ržÈžã Î7åÝí´hÒYKIBXå|¡E]öËòëFä5ScusòsTk(¡x_‹©•’„1¬¸Yòí å2£$`E…’5g"Î$ÍTeI’†À¨+t#/Z OrÌ,’M#÷•dW+UÈRq‰l2rë{ËE/Ù*—˪ <{ßú¨sÈ$SEtD2ZÅ"eÎ dP2ptšÅI$+¥ÚPsȽ‹­:ã)'‰¬I*¬2Ê:g!4[ÁWœ¨ÄcÀ)GBh®lœ 0u–Ž2v$h¶L“›ÙûNŠÆ¥©Xt_ÒYÕ‹7¬–,:ÑÒ gË( (‡^Q?c/Ôýˆy|þ¢XXú+D‡5Ú»{ssmûä€p‰;ŠÍ)£¡Ø÷;Úw­î|¦Ghói¾ÃŸ^gù?ÿÐð5ž?uŒ ÿ=€á=ÃÜôã'(þäÄ»o_ÕwRÔw~yß¡Âãxáh{`:¢:¾_}›¾4x —TÀÇ‘$£Áÿ&ãd7l»¼›U?ßo÷«ÓׇeûõôÌ‹]°ELqN>ÍܯÙDŽ¢q‘@zPþµj`3jŽËû8‹å…|4è%§‘ÆTM NE›YõH‘B¡Ð´Hé,M8!¼Š'% £J1 .e";ég—‡ ð™Ì!’” Âd&$QðˆŽ'R(Å“JRçLv££ÞHÃP‘”ñ6ô'ðÀšug §©÷±%10(‰ˆpް‘„'L4ntaD>?çñ 6lùHÌJ{ÉØ³KíKrîøØœÃjÚÐõ}ü‘9¯3×. xcèNÔ¹iËœüÜÒ¿UÁËBXRñ¹(ÎáÂvêquLÔ­òŽŠÎË_íç9Á¦ÿP+N–…‡åôvúÊïÈÒ,D_Wû+êWŠÚø7Û´·v-ÃõÄ[SD#´`a-ûLO>˜œ¢’±¤¨g|r*3ä<1:5bÏÞLÜ{^Iå-ÏÉ{{œÂzô×vïÒôP.-“5—óT–¼cþ4É7'rмÑUg»0ßrW_Õ·ÄýbJçÄ\yµ”^ËÞûÃ|RtI ¢bg*³†ÅIÄ{A›ZVìÇ:^—EÙ.Ñ4ŽG×RV±¥Z¶|,í×vºÉ@Y¬šŒ_²‰öŒezèìd·BM 19€°q ‘F—œæxÔ –C–§Sð”ĨéÌ©·jfLˆu[­ J¡GŸ`†1Y£§õ…OŠZáH1«|ײ{.i¼l´:2›†TÄQ&É"ðÆð5ÉåJª’ô1§ÓJ©/*ñc©ksÑ I”ÀLÄÀyÖŠÈK ñm=\TDËV4 |Œþ!÷”³Hs"Çd§Ý¯2¹›ÙO~_ŸÃ¥ù¯Î?kܸo[]+Âþµ“Wð ‰—‰ïí­pwÅ.®½++Dy7¯ÞLŸÃiDƒÕ¯QaÉWUñw¹y‹]>¹ñ3|“ ºßg}qˆu\| 0 ñOÛg¿;Rü ±!ÿ@Å'Ü×â_þZÁ1ÜnŸÇýÇ ÷Úÿÿ°6}×nû‡ ñp P=’Ø@”ïýF¾‡séZhdE<œ‡>³2À…¾‚pú´Ùÿ׿ ',¶rÿË…ûåqÃŒ_m_Mª&Ð×Õõ9[²Aê]%Zþ»\]­ ,rX%™s¼ó”?òd½¢”T¢b‚d…XÆXRN¸ä%H‘yŒ2°‚p®KY@L!'J „@)‡4'æ2ïRò1!ú"G’2&$W¤ìxÈU%s‰ŒÈÞ%#ó2YÌüœM‹0Ïó²h3Yñr—»,[šWªÑ’yMª²ŠZÛÄ îq¤aÖA)ÎlΑdÐV–LËWs2v{¢ãÛÕ×]šú£ï W3=²;ÎUè wÿYu[gæSq~4K+»<þÂÐK>{kV*··BÝ,~?“PÈ·6}E †x<™¿9Œ@¼aÕ›DKÄ×té2œ:¼¹(NÀ@æÝè½ØnEù  0ÿ¾v÷OP÷#}|Ç. ø 8€øÎ”¾s’vßß )9¾µlýCF}ùOC‹ÿ>~JìÓŠÕoíÓؼwa }4ÇùÝâ @h!'¸0¾Ëî€Øã#÷+ }ï6€º÷Àðþ7Hîsà«wï<‰*#Š\ÆHQÕД+)a2 Î)g ŒGÀAxÄKyH<ñÄHâ%ƒ‡q9ÆD“ËÞMLÌ”9g."íI>øˆÁQë¨çyHQ„1欨‰jJqoMr8ö™z?*ŸêÅŠ²‚z:ã[•%3Šæ•Ve²4.’*‘(Åy”Ê5—$lãü2°Æº>å×\ˆŠÝ”«kN+£Ù8-ß5ñÁË<Ë™!ù}ql™B-ÚåPÞÊ žš–.üE£Š)߸À ò÷÷c@-É­´Üm—ì‰ÎëŸ÷·£ÁêÑÁÿïé|Ù›ç°Ï¯’¼&L®*·:ôé¥%bí—K_¾Ø¥¸§Q°Ž Q5ikY¹,‚cÎ S¦)ƒ8„Þ§”J&+ºŠ­(?sîRÓSÖ ®O)ÿÐ¥£ç sî–wJMºý™`œ.ãòŒ·¥– ÕœEº%Bkôàå…¯3Ò¢t åAª‡œõ”†S©'BŸ±e«®åYíb}à’ ¿¬’p㽩]”…*=øÉ|ˆeS1Qµ÷m´-vvµ+”®ÞãoæÌXcéà‡©*-è† …ñÃ^ܙӄbYˆaîå<žÂ«Ìc(äáKóÍb*w­Î+É¢ ”‰ˆ¦óä&–æMƒ5¬,ËŠÈB—¬QW¼C ~È…SB;’)¥Šðš+xQÖ’B«…“,„*c=I)‡Iw4#R3Y$f½ Á1lWçùؤc¦ài˜Iœ»š?x™§²\TT—Q‘E‚|Mï(æ‡1ñºÐ†^4Ãÿ\¤^Åã…—¯}ªÄiº`¤{Å&ÍgŸŸû´fa²É)§4úpßïAîqrïõî`ñó„·O‘o!€“›¹ [Ñcžõ(<…GÞa\+¿¬ñôå¼vðï6˯×ï …Nrz_ýÝ÷ÂŒŸæüÕ­óÿtnò)ªù‡8çý‰«Þ=Ø‘ý,‹›N¸ÿ à°@4€—Oq8|ëHpß}›úð˜8*÷10@~dŒþx¢0v‰Xáé+<@ |­ðVͯ/‚Â9È/|ª¾6pð¸v3½8ä°›øMdSÄÍVD·¿LqR*¤,fÜxjh$jÂ1…˜àî3vrÑJ}¢ä:òåÉbTyã¦`œT”€º@gG8IH‰3&ò?/#«ütìçqÎPÝ'iç²ye]«$ëvF†A³eŸ6\ÄNÈ9D×–QrÁKHU%F}˜œdų䉱Z˲ˆT¯©ZF^eY»¬M^abÄ€ó˜×±XAP•g#]ÒP: Ee18‡Ñ[âIoØ’†P“Sô©båÂñò·™V0/²o8õ\þ9‘e/ËJÑ,‰ËÄ$2L>;Ï£#™ ‚Ú‰3K¾ÐzßâkbvÏšó³ οéëWXƒšš>"Ú õ3îÊû£¿›ow³æwcž–@(‰Òéw°šPz`øEø®šÏSH xZâÏàO€vþ#Vµ.“›Íáíìé¿ssÀퟒÅð¯ÄEÄ7?mÁ¹J‚¸÷ ÜŸŒ1îý,ZýQæÑ£kÕå£ ø%ªîÛ#Õ§$Lñ‡ ªÞÌ}ŸoøèN8nÜ0Ad¬ ŸãiÛW8΀š!Œ îç*\¥ ÎáŽ÷“îoz} EqhÒ ¡áâ ã ËUµRê(g:_1œ«@*Zév_M{¥ÅhâCÖ{—ÀËÿ‹…ŸÇü³ŠbâS›™ûÒ¹¬ìœâÎÓˆHD¤%TÒ*eB‰fž†‰Y—¼‹Ì'î™ѤÙ#à]äÓLlá|ˆi´Ûyró–Yúš“h¬A<á'¬šS1ÉÞ(2;³ÑaÁ«Òð8ó)SCrsgè!Ó+ËV)ËÈa$KÍTݶg²7Ý)aêѽ&¢ˆÐCl×M5Ê›1æìc^Db€Ã6ôƒiHÎû[çf"_س¥mŽ ÷š¹|(ˆ² 1õz8ýdºSt,ÔÄòàS¨ÂMa¥+W”è¢æØœß)v âž‡“§Áw°ÕAßL&p6T)¼œ71 Áº¹ì7Ëlêá&¨I¢Ï”d={ìF jyÑtQï§œŽwÛ|H¹fâ\ñŠ´²&uÍx.ZÓJAvÇàó$!dü¼JU‘.ÚJéL$úl= )šÊ9ÕhOÁMCô+–Yb95zà™7´ ±l(ÿŠò$Ø)aYD.½bñ§‰+ béì¨õ,0Ñ@y'St]zN?º™˜y2î«3æpNâgôfÍÄeS Îò‚Ei-xV ’ýI®E±í©ÌyeØMn[hªY ã"õsŸ¼”Ä=‰–Éc½Z7WA—V¨)»Æ»2‹5­ºu¦ê쬖Z<$Ñwrf,ˆÌJä•g2®ø˜V|!âFèEÉf’9™x €¹¤\Fʼï«ÎºÜÐE y!a4Æ(áL‡(:#ª‹ „HØ•å%]FZ§, “Eȃ䆤>ÅÃöÓ¹«:ÙK2ê\öË…©*Æz6¹:§+i¹í HŒ Ÿ«OÙÓ&k+ËÝb·ü¯ò™{ò#ÀGǧÓ-üc,(6À€ÞJ×[s˜{·!Þ 8;ìO8AT°×Àî»þ6]àƒ ,8¦Ç9Üï¹¹P>ÆaVÀLõò)$üaÚùŸ´à{oÊïãÁ'ÛD’~ªéÜõ»SØ÷úê»S‡žbüÁYè?äEU:L?«?Ìû7p°Þa€û·%ܯ€¯TXr—îT¥sµòý­Ü„ôþìé«»«'/‹Ê¾H Ó~ ÔWyñ$“Eà$+ó¬æÌ’ΨÃÌÿSŒùŒQ{ióÚpDÆÏ Ë¢‰Cáø cÃgWq«‰åA6”²5“…Ì”F0*’#y&aÎ4äæä}å§õè?3C’¨6‰%„ûBV@2ÕQP7Ôn¤Ø;·Ìee#½›âH¸/‰ä$&£ ± ‰™$@2KB(VÔ…¨+aµb´:ˆ+¿P„²’ÌÊÞ6à¬-L"wÛäg+iXX‹ia¼u¦KlLdÀ{ç¯YëšÓy"‚×6ÔÆ<(ú[’¶*Ë^=9ºr{7µ¿¶bA -]„ÃñŒ>*IËYÅfR@®}£›æ§0âê–s§–O‚­›¹|ãyûÊæ['—~¤É}é±äЇ“?Ñ“Dºaü ­xˆéU^åE™xNeáÆyŸŽô’çM%SLÜ3Ò‚rQ¶t „}¥½ºÑÃ’Im]æÈ’éÍþäv§èQ‰õ|CeÃl âfÛM²Øôdæ<ÇRY]¹â?ž‹È¨oã“Ï4•Ðn(‹S:Qz:b`ñí`u«åj!ë qæ]“CwŠ?Ø]ò¨úÿm^ý«z$q!"N2ä’/––Ó£j ˆµ£Ml¬Š®ÒëšS–»8ÃÁL²¼W,ÜñóŠÿ¸(šÄÕ>Ío’½a·ËjÁ! Ì(ôËͳ²ÑLŸÒ@*²/’Ô¤n_®²=æ–+º~Ê®Uá¹ÙÇà|œ<k³T´¤ žÊ5Æ' Œ ¤ÜèÁÒmhŽ¿Bœ:2ŽzÎsa|*³XªxÜ'BBZ$Vä ND¥*Z„ºÝš„*E·/%/ÁÔçBµe*T¼ióºDÌ[ZºÔ¿ðíÿa³±ëÔò¿w³{&ÐT¨º™™»ÛØX a±Úãöí·- þò‡Ãj¯°7ÀÇ*à¬Ð|ª„½Åá€Ä­òwý÷ï:-ý£¼þÑůz Êü7ã™áþàŸï¼²õ'ñQàï>e,õN‚úG ÿˆìUø¦çÀâ#lÀ 0ïE´Ÿ]ÔF€[?/0mp˜0½BTmsË + IDATaÂY?l!a \¢-p¹Æ’>œ0ÆNFWNëKé¿íÓb±‚žðFö“8Ÿ×å¼Çâ5ï ìü…™Lj€')N!a\:ïq2¡¸Wá2”t¥(;o—¼,¤«2á‚ÊL™e#Hà$&çdÎÖ¸ðRÆ”23ü”ÄRæÖÏ,¯Š¹hè¤Z›RN÷vf m mbƒ’œ¤N§»\–s±8j©AÚɉq"¥õ>^û‰:&RZ¦iÔE Âyb2§Y±rÙ^Mz) Oe¯|FŒŸYO›ÞìJN]æv"þŽ,æÜ#žÄ±NQ=6^“Ь®¸,]&…©Dr`ý–ŽßWàŠÕ̩ӫå¤ì"ëW2>ŸŽT?´¤ JuÒŽñ&O$éK!bQoÚ‡™´}-m¿™ä¯N¸¼§WN†¥ÒO}¿áަaâ¾ËxØÂ§‘déƒuóhByÁI‹:ôÁï©Uîál§º)gp¢H†d$ÜTR£bŒùÁªs™¬À¸z4Lycõ>¬³-Ê –å¡= ®9^e3HB¯ötÕyò¿×ñ¥˜ÿ¬×ÏQ®dm*ù.~3{¦µ:—Õº\HŸÅì9ðöD¾>êŸM4ÕS`óä÷:87ysìv÷ çtñŸúôä¾[FÇ„=5º5à‰–®árQy–FE;Wó‘£xô1”ŽŒt¢$2XŽCn¯y¡s“C:Xù&û*û’wŒ/ ÐMËž­ªëj“²ƒÖs£gu­ÚF3ÆKd\‘ËgÅrÓjGùÞy¨7ô“-Ð%a|!òæZª‹tº †0d$MMër ÜO§ô°È§6æÏ³O¦ <Ü ò]Î^J×sâ,,‹m¤Ì³’°¢°­ò•òf É8ÂZøŠ‰IÈÙ˜>süo‰ü/«‡í6¹{ Õ8£»Ü®†'ì³:ŽMvÎÁ¹e7=íJ‚p‹éPCƒaÄ«´˜Ÿ$þyodßWªñqpíùÊ¢§ì‹öÙ oQd×"iý~ŽÁe|º/€ 2À!IÄO{þoxç•m~ ¸WpãÇ–Jò£ü¸ò݈OEåaD)Žîñ\ÂãtÄ*BæF –@D÷¤%Pð{à( ¾DU‚zl-ºÜ”eÕåÛýÍ®°ºê*bµÒlî’ÜIÛKM/ÙuÃËu±¨+¼£CJ/²vtbU >OeõÓ>_Ϻۧò0ßÜóåu·Œn!Gˆû4µÿBÒÂçŸ^'¶/¹Pzyµ^žè†M%QÅ*•RHÊÈcŠ”H¢ˆ¬°±ócrc¶÷$Þ™éU°? €Á‚…6ç:%AH•Ò,Ù=gm…Ïi’É߀†äØ›‰æ,™&-I¿¥ä·–WsЉö R±?fl%éÄ2D'­ò1Q£<=MÖ¨LD ³ª uÕK™ ë6ÀRÂot1Éè)7Êìl³Ë–%¬ÍëÀ®*RB{6™â)ŠRN?XIgú4¾ö¿„{ þïå²ÝežÕYÐ?¸ÑÿJ½|zµ‰+éjæó%¿iÃ4™‰?F '—xß,Å-/þvH˜U¬“¬)E^•+fwÖ¸Ù Cúì¥R/‰g‡#`/Qp&‘Ú÷êÊûOÔÆïŠÛ¿uÖüƒ} <…º…uJ†¾¿òuþqô¢ÇÔ»éÛK`LßÉX_<†óy÷ýí½-ÌŒø à À ò°j<}T¦Á­âß-óSât_\>8úÛù¶<¸5yfZ>ª_v«cµ:8}8ºU*êÓçMÝxŠH¤%‹ùóˆsE YŠ>ÉSŽ;g5½#I¯d·\–Wy/‹=IÆfE§fìf·õ=¿3‹ÿ²\¼ÅÿNøudÖÅÜMr_ŮȥçÌú>ø)‘E „0Ö*‘CIXd¤’gq¤äDÂrIˆb‚Fçl>!ŽÒ ™ZJ½`'I^gN<ý+[‚j¤ÙÄ*ßž°t¡Í œC©¦Ð%×…#.'áEÙ¦¼6¹hD41UDdè™ÆÉãÁåcô>Ž´tU1â+-ƒ–)jC|ã´Í:"Ñ4 þv}6ÏîJ-‚aËj„˜÷~K»8ëÿú³¼Z¿OŠêŠ©µâJȳ¿XƆÔy½wwÙ‚ž¾±÷*ä€s'~Aªyä/Üpò©@xÎ#šä:zÀçt˜R¼3ëË b“E{ŒtJ„g6+ɸ,èÔÖƒ»”EAi£i–'Ê×®v”ÚL”8ŠŠqjE:ð¶gž¯¥yIì0”"³g4×Zd.()iMø•˜nhßZ'_b¦âå4S{˦;5~'Ý+¦qObcí¿£iiólý~7»â4ÑÒS·‹®››˜Iq7æ—òå6©¥Ð Ût.Ò·WOÚþÊë°xi5håšÜ—E¥®°Z5+²Ö Ù&ƒñ–Å& 1Ñvq²’&+{NÏ1<‚I£YèóÍÙ²Y‰zIy–ˆ>“yð»Óô°¸{{;çHŸ3hj<#¹®LsŸáê'7Sÿjœ¬uUY^p§ |6sô>™lLÜa•ZæjY*ÇÀ£ãhå>Å«ÌDòâÀ¢Š¹ŽQl¥·åø”·+•jíg–WˆULó­© Z¬´ …,ô³/“»0‰:ÅúÜOÞìøtA±ÅäĽ|8Ý€¦7qætl¸KquÙÂã4#œì©ßCNHÀùþ9ì ð%CÈ ±\ñX1Òa¿KÒ/À °+ᑿü „msMa=àÀÜ;g¸îQ¶ÿÉݳûÔÜ¿ížÒ?zÂÍ-ླÂ'“1~Zè>á­ôýKÔ 6@åD ¢ª ¹]bÁ°ºÃ#(P3Ðý% a‰9Á¾—4]tŒÿ¾ÜäUÝíîåámp_¤…Kz(NÏæ´ü›PáÄäþÁ˜7cUŸWø•ëQ¦Ž=›-3å°'oÝñµ9U‡]Ý]êuUË—…ê¼ú¯Gó?4¸faÁOè§üùkll,ØÏ\}ã]ëPQ¥¡]ÊÃ|°ŒEm¤‰XJ¡Y,UÈ–ŽA›œ(çF–#èHLÈdÔ<1®ALïŽ!¾FB&6àâÅ?dúW)CåLYâÔH2ÝpÑ“uOu’àVÊÌXf!•>!Ì:1G<}  )Ûœ¼3íÑr¯æŨRÁˆÒ•0TËç™F'­¸7†ß‹³—¼½XÝótêfÉ­a>ö¯OOèrã/´kg:hö¶8çu>W¼ÑÌojçótê^¹|\Ó¥å¶Ö/x(ùñ’튱9ì·&â‹©8õ8å.cú…R¢ŸïD¾ÎÜVŠXväf½¢ÊÜ?ÆC[ RÞ†ŸÐÝ«ÆRNê‚ùZÕÑSÂyÐÇ"U4ËŒª¡R3Ö”Z¼¶„ùCeÇu܉ü$Q¤àS>…ôà‰yk K³©vå[cO‹h$-]Ÿv[6lã}ò¤÷m·n‹ëÖ4ò©`%«¤ªþÌKãØ8Ëä œŸ’™B§rdð‚¥§»IÝ»3Ò»«XÈfÿt¥­´ˆåž‰³Šm–j¹.ÿ_îÞ¬I“,¹s¿ûåÛ2³2«ºz™nÎ Æ@ ¤hh¦WýýýJÉDÓ%’0I`0¦×¬%×o‰í®îz¨êîêžž€‰¦Á}LˈïF<œןãª;?Sg¶Â&-Ý’LN:Ua‰¤®T9°úU‚ôr¦Q¸6±oú®Y¿¿Þvz׉ÆXTªPõ¾ÖÇ9ßõáwsžpP^F4¯)ïÇǵ},VÌm ;Ó…š\TAäÜÑLÖL‰º ñ¶Ö}g,±d«Óè½ê´jÖsîÿú…ýÑÆéåWæsˆ äÈ7ê¼r~/@õn@¨~_.*à \Áü¼Tº]šÓs:­|k^†3ˆÇÃýš?OIÞΊëö/ßôÞüÖÒúo˜àþ¹q€N`¾[óñ?45é»Ä»`¿ÉJ‡fß=sœÈ@PF $˜Hð1@ ¦‡ô·ðøö/©º£½€ø>|Þ$øÀgðRµ?Þ~4ÔÏœËð—y~~ùB¾Æ·úKXp”çwónæXKh­¨¢WyT˧1ÐÓDeE“€/ÚÞ%>å|!wi³>ñ•«—ÿÚ¹÷“x®V·iZ'ÕaçÂT9³)E£ÔJViÀ"“ÃŽr.K0JÊlšŽ¹+9«<…]HK Ûª€XëX¢OdyÄp“‘­-²IÒ†'&>Y£"d£EEŸX0/¢–˜Unª‘‹àFÆäKU(tÉl¢°­×µWÙ›j!0CnuTÆÎò‘¦ÁN î¡äŽšbœ‚ež"á>aŽŸÞ÷’~æÔ“U·Y§ÓØõÓ6¾¶‹ãWJ4@Š ƒùåß®¯ž¸ÕÓu,Y¥™>Ìrk‹âÇfÙ«{ ë8î ˜jèÓh`ÈùbIç>ŸÃg'} ¸š–¶ub‡yݶï³=Ôyxoò0·ÝÕn×£93¸Ûp6ÍÜȨµëüZWª„Âq)ǰ„Â?ÁâKɰT QÜd 9fŽŠJGÆp…'J‘Õ)¯Í¹Ï”¦\É@ÔB íô|톗9ï¨ë ¾7)2ê¬ïÖB(!²‰%">ÛR0@Ë i-Ùšd„”RT©š£VJqOäEÕW’<ëÆZÕ)PÅÚ™¦ŠÛ>ù”~Ìí']ߣot6¢Î,ÆÉì§cXIÿ“æb(YÇú7ËI·Z^vçòåÕKýß½êþK—Ù¨sX–Jg“¼¤M+cµZ7ŸÃC 9.1 ¬v=m·q9KõJH©ÝVŠ»¿#sÕâx×öޱú©xkµöÇö^æÛuwÞ4kܲIM‹!©”¡œOóa‰‡ýpKCê©)ê‚‘SÊ‹ÊÂ#(ÍòE s“Ž~ aÂü•›~¦ëÒïôâßûµz&ø™ï.#¯C¡e삎ˆ‹w2!œòxO³ëbT–Ó0ªèÉç.U…hd²è¿{^`eb¯>2ë€fí$‘5ÐXh·à:+Èÿ{ y‰ÊñI,:‰ØAò„D‹Ày~¼aûËçŵ¨Ö­uîVåQÒ:̨—t¨¸ÊÅE-fF!”P“@¢a£H ’ T$Y599["m,F W̳¶¤$Pk aq.©ÉJÍEdÂ…3`ª•AcÅ"hAÇTJ›jT‘&™ô` LC„Ò7"´ H Ša‘Á ¡Ü™ÔV€Œ"¡ Ì­ÒδÉî&»,,yŒÎA uõž-Qéö}^mλUã—ªê4«×2ù/ =«ûìSFŒ¤šIëSðÚüíö¯·»—ä¶IW󬣟7å^/aŠI|¬ñ"±ee~*h˜!ñ2Âu·>Í/>žÿe7º³I­ óLJÓ5Œ $€þè<«ÝÉßãû‡i”ÉMðAéàÓya‚Ý[„ |ê ^˜l  !À¡Þȯñç<Á“kXÐi§ßWü¦¿ÿ](ûÿÚýßpíßAï·Ú0½~ô]ßÙ?$ŽöÁS€à‹ï·Ãþ.eßd ÀoO7’¨7øíqd[a=¾ÝyðϾ؂ÙÊ41 ôW­XÚü©„C€Mìwµ­`f²º²m­en ÖY:?Ûü:†_¸ú§"\ö÷åNúsk«.ÚZûxÙ()Å¿"¹ç´ª‰UzŒÇrjƒtgè”$ekµÑRÉ2…l8v ƒ¢³$½lA«9„ãr,©;SÚ£`Á3U éª ËTÍ ¶be¥ÊKgç´<•£Cè P4œ”)§ÀKäV5+ŸbQÞDRªx)ÚFvž} &*%UEhÈ ­¤KÒ#’BÌÚIE’èãÇRе|L:é„Ó\,zp"$:ͲN[€Eú(üHÒ4mãe!Ÿ¥iÈ»gÿ1d›ÿ´Ñg:Ã&x:ôe¡ýÒ™Šî‰…nhSNøåòêjóbÕB‹°z/^‰Í,5ÏÕ…iÙ¸Y÷Z´¨ò"]>¤G“¦Hõl­úu#?’%•;Îm*&Uh–lŽÅn†Ûq¾U/àîT}lN$}®'‘Èq‘Ρ¡Ä1—8³·Æ¦÷2ü¯ü·?òçdÞ,Ô+§b?€¦9ç<Ϲ®EÀå§.J4èÙ`ÛD-‚¤a(q®Ö\Ùæ´ÕÇÀq[ñÜ5^Ò‰šR}itž}~¬IŸ5›Öw–ýU_(]ÄØ—bR'!Ãh=[m‹jÅ JTùDBÎ Œ ”pL¥:áP… ‰l*.W\BÀ0r Š“ñ V³> œ¯+Ù[F—E¦:‡D˜ºj˜ÖͶíÖªë¸1)Ašë4ðH¸œµò¨šY˜l€¢Yg§îd¾ÍÓËrà@Hb+Rðñ}N,µç ],Eª¤¦¢Š –€éH}(yU;WY °(€š9†dò©ÃÙyoN¾„³RÂmÏŸ¥‹¿KéÕ+@_!?\û¹43Ì ,BÂîó”‹y¾dmc · " Ÿô|:8¸·`A¨á¦7¾‡w@° †ßA Ï®Á¾«Èþ!¾®?f½aúÃ(䟠3€ åm0úï÷ÊÝØ7Jø×âGPž@=A;Cþ60Aþµª©àÛšÕòÆÒnàycÖòÏì'õ‹{8Lñ/(CÛpµ6OtÚ`Ôw€Ÿ,<@×°ê2KÜO©¿ ñjàmjžNî”›ÏòŒ/»´n9¹°^T Y´ ²–§£˜îòxŠë÷}1`iÖ–nÒZÇN#UŽ©T€­4¤–E)îœéŒha€9…ÆKV‘8ÖT+,@Y;!K¸±ÅS¾Ònn í²LiZÄŽX€"ÅóÚV6E[-Qv5ê ™1ƒ©Qœ š%{¥´Åâ XnA‘’Š•ÊkTX)T‰ÀY“B5:÷ºéÇs€ÔÔáÄÕ6ή۞D³ðFÒj÷”X u ‹ˆm³wŨ”§Ð]ùÙ(̵yhh'GÒÏæI®Ö0×á‘uHÚœ$áI ¥€*J/iSY–)´¬Eñ/ÓX«¼Õ—1+…‚ý±šf0lT»jz Pe8NÅŒscS,ÓT^Rºîܨe;Áñ>—_³ûj{!œ¹œµ-•ËæS¨4JZQ<šâuà~#¶nEÍβi[$ü³%Ä<3½ Å.ÑÒ¡Š3eÛ¨¦:iÄG:(²¹Ù­Lßµä)l8QÀ)LJ  -¥Õä5Ê_h}%áŒa¥¡,%å)Ëã]}̜Դ!¿ÎJ·Z;¥Å H6f IDAT€œ²F ½6B)d eNË=ê<Ëcª]‚62º¥ÕÍQØ’­§+N…÷‚ô$Ê(ô °ãf£š^n:j`TÃ>Öú ¦ r‡Œ¤ŠH1‘i¼´û£,~™?IÓ#ç!™¹©BQ2ÞisbJIX”:QbQ’Â0rÓ¹•ICHÄ5TS…ZO9-Ò‚Ñè9ÞÛ©ì:Nd ¶>¡ög.G)l½}è‹RycÏA×ÔuB40ìm‚IAß±n4ì]7Ê@ËÐŽ4qkõVTàäç*ÃC_wn¼ ¡b4©yLe†Ù)óÞìÒm–g2}r[¶Ó=ÎYÖ³ö¼Æ&})Ò/#ÿ8ùÙjç:¡ …Þ¬S">9Œœ”2"0Ecx*ŽˆÒ]ËýŒt1@[§Éza{zê®è¨¦;½iå lëM0ÆB“i-‹uÖ­õ25V“æˆË4M³c.FΙu_9raÒ[nÕÊFAˆTjN*:O¡ÄÇIß6~Dý¤>y&ÙºêWf^ÔÜGÞɬr8rŠ,&Ýh«×ì·¤×Ò›ìDár»,T–â£ÁÞš*¥N Ì 3{‘ZR)¡t9#”·OŠ*J©=7:yWb1‹iÐ:–wgD‡8])âµ7ÚßaL’ëª4eÎ5Ü)fc ÉqͦÃ|+¿:M†P¥IÚ¶éÜðVÔR!’ôŸÛO¯õWÁÂ)ÁÚ]A+a¨ýëGãU}¾!ðæhû8l!n¡ÙƒÛÃDüè‰ý"=@Œ`áÜÀ”Œ„çåf$ ð€x i?èï}‹‹æä†o2ºÿ ¾?¦E¿qÈú.=ðæMEØ¿QÚôvòöïsçi‘@Ó;¼­Ýç@€TèÞŽ àb ¿˜ÀDHf ÛF]l¯.Ÿ>é›^+ص³ÛÏ“y_Ú÷ÄzCr–U¨¡ ¯4þ_Iÿ+úUû#+ÛmÑ·Éø2}ÅeLzH§²¬4ȳ:[ŠJ^@íT•*3¥‰±èΘf%MÇ*ZL}ã`5ÑäÑîÜ*¸åôŠK‚ÜÃ⪳3!–ž#ù©YN#ë_ݳA¡s±9OÔ÷ýŸ\Ê—>SY<ãŠaZ†(ÐØ^²Hi4çW¾¾Oøâ <=álWåT$øQéwï_ކîÐ×÷òËü7c<ÿ‘”-¦þWiýlËf/UØ@)››Ð¼lAGº³‰Ú?”Öäi_“¼ï”Øn€5jª+Kž3 Š—RWqÜîSx(ËÕ®¦wÓêÏ,}w/Ùšˆí]9áY1+þ¿ü¨>ùó žPSŒ«^…‹¦J…°,;ƒÖÖ@Û> b-m›ˆÀÙµNŸ“—Þ­\^ï¤Î2\j ÷Nk‡%«iXes¶ÑÏ6*%‡÷¨Äûe§i(H²×1.xר@ñ” ââ¤ô²uM½™ø^á¤5¤ª&àyÎ%h/›&C?™6}m(ºÃ¨…¢AIÐ#{‰Ú1‰"£öZº«é1¦YÎÕÍNwRBŸ EÒ2W/о˜&¡cà °(¤ÎmnK5B©z¯‘9“Ár!µ¦¢˜Š2>GW;·’°±ì ¥c^ƒ,g®C@B³…¾â‘ÝåW§öæTõ=ö@-äjç:ŽÜ¿*—à.vn½À|·j?=5÷@Ie¨ÉðÜ ¬ö@û¿ÍfKÐ0ãôÀ’†ü'  ðèuI¡<ò_ ðkðMÚR*ßõùfH`x@Â÷+QßÄývÀÿ‡gtÿ· ÆHÿ¸+8#ÿž$¥òšÅ·—¬†¯uïï¤n|§®õ€8Ìñ“Ü·O‘¿ë¨»L‚A s)R¨f¸_O”K'ÐÎ?Sê=ezl¬\÷kR%4©²è³â7YЧ0h!oËz N?[ï·$5óbü¤=òF…].T)7¦eÕYñ”'èQ4’:gµµl Fo¬]‰¦—Út²@Pe–ÅKf–å÷nŠ ³b©@@ *ˆU­$K,PtD€Rتf%,z!U5bd64¥1-õ8JZ©³m ›•°]5 d•*) Á2# º‘U4¢P â”ËË1”˜YAr(q§WYò®Ä&’~ý˜³Ë[57OpÝû~£•¨sâ×9n²èKñ\y‡u£†‡f~ï÷F6¡»¬f?:ÙÎr´Ù¶×ø8È»Žœ§Î©«,>u›C§ï¢(P~°ô˜óqøqå³3â(m ÊfýÌ|ô¯Ï§“ùâÿøêµpíìîø¬»©²Ñç6­vÆH´*ãñ4ã$»ijÌÇÓËåâ?‰úïD¥”ÜŸþ Ïÿ‹á§ymîÖ³Œõý~ ö£¶ûŒû¸c1:/ç´Ä˜F¡’íšÐ4b«ú•ج…õKà[µŸ}M}Pb\ÛjŒÞ\ H (€#€èž€5èV‹Í\s[ôʶb…“ètK$§ÂE-À÷étÜs ÅÍ›XVT޲›ª¨WÇh›ýÊ\¨°–‹’"ªµh®¤j„C©„Aß9·n|»Ö褒Ҹޚu5^i ’@1pRKåüÜ‹`ÕTKeŠB)©¹V Å©ƒÑK3!Š ”*áRýÁ¨ê±kf-F®$Æ9³˜‚#Ýj<—ÜX,ŠÔ kᔘ™Ê"`">¯•4–HÉåcâh ƒ«šÀI–2–µ¡N8ý,òkW6j‘«Ü BBeQùœËZЦ©"á¬djPÔX?áÌL½ÉõD‹,ZYú|lnŠ'€)û¥¯Á³ß|¼ÖþÉ™[Ý賋º5\Ô£Ö#\0lVaY6¬Wºý÷ÿãOòñÏRÁÿóçŸÿoÿõ?ÝÚEatîö½"Ϧ÷v¡6hÛnÛHfiº›¢ó´Rì( Ä›WòÇÞ›=ø°ü8Ô†fõD¶BÁÙÙœ@AíJXïŒod!ú ­”"ÈÏ95“½š>‡nËO l£iå³°3‡e>Aûs¾náFSÌþü šÞöUºqeÊ“¬«UÇE®W›õ¹ßtê²»êÍî€éá(b<¶%Î,ïdE ¥3ÉQ¥O"-EA.s€Ç’æ4 @]ºµmeK; d‘³I-]Q98ŠT*é™ÕRt‹¤‘¹ÅŠÄÊK(ŒŽËºc™ÀÎJÆb²EZ»æ¹Q—¸‘‹š«*¹F’©‚0•²ˆ™R¥±Ë…Á˜¢Ï¤ð€^ FY¹†Ä‘Ôd} …ƒÊ™²–à<äÖÇnÉo1;, ð QäÆ êÂÁº M¬Gœ‹bûe÷Øûg„ ÚW},oâ—OÖï_TuwÇ•âÊÁîÖ ˆÏá` Xà÷À #w[y˜¢OÑŒ ƒ¸D0 à åuÙÝÂL[û–Ìéð›P™¾E0óÒ»Q¯ Ä\zƒEò›fÎþf üÿ“Ò?þADòá§;€ ðf ¾k¥öøô_|ý7ç„m‚W×oG½‘kžOp½@Z¾V¹gH ,€¸øHÀv{j/µº@W_s²Ø(j*_:•Uœk•`­|ÙæÃÇñâÓN³u>—,dNòä9›ÚKa³J‚J¡['*W¹®!ö(4Dª†ÈƒrÚhkÑ¡3¶÷Öº ÄZ(@ –X  ÉV³2ºˆ¹Ô,`BÑ×$•pZŠ*òd"V›LmV£‘,Ü ÚGP•¹3Ô:Ñ“)žEƒàá •U¾1NgàšÛR‘D,54Ä.)O1k!¢(• #Ĉ"p®œsBØflYGÄÐæê‹%CéEÒØÏÌa!-çóÈF¦¶ÖHééÅ”wÿ…2›«¼j ‹ÔΠWƒ¬LòòNn¸]žy7yß pËz”m·­°vV3íÎì­ÀÆo3ìºÒ}òÑù'þ‹}ðA"1úuyýúþqœÃ._´,íà~¬—ŽxÆwv럜áüþŗ᯿\M£} (Ï¢ôË\èFêºJ[4Ä$ÄÆ¸‹Öì˜J¹§|8a[ƒãá<ùƸ}®F‰»3lpW€Ý’ì¡Æ%-ºj8¥S~˜Õá6Ó«–{½NÇp–.äv%»³ŠÞ=5ÜÝ) p·íüVkeØ $ä8Á~|V¹™åê £Õw‘Çqȯ©LÎxRb¯Ô•Fš9NflÄõŠZä‹Sd&pRroø°Ë0ÅñÖJ£Ô%Ö\«<Ôê-DtVeM'¥JV,/^yc¨ˆÌ5ñxâa¤pR~Kº/Ú³)J. –R1-9“)ÅÒAñ Šl 8i¹ôA™šË𨠉Ö!…Çm®(#iÔšG ™Y¦Š%‰ DÏ"£n…MŠrp§àînήë͘ ·³ž ¶ÖÓÓ'MxbÖjÞta[¢vt—ñõbax ðÀOA*˜eRýui×C¤íãé f‚KW+ེÿªìgh_ÁˆJ¬%l L¯j‚åw@_‚t wé;:ê׃ο‘WŸDcþX´èô—~‘üAU©ÕefüæmÌÒ™ÞõÇ©(Eù ܯÞ(oÞòÃÛ°¾òÎÀxxpÝAòÌ-Žhéc€ö}uáìz•U¦e<Œ_.2njßiªn·DKÓP–"xsððAx脳ëî¼aQ˜^)oÒÎ蹇!Êêäì.9èt$cK¶ªÖ,âlª1¾)! RZ¡\•%%¨ ä œ†:Î2•Œ>y…Xg-©®ÊM55hX³ÄÊu*4DLZl$;ÈkQ4’LRTì<òBY3/™•¤RQUÔ‘Cåha€¹‰ØÌ¢B]$ESg¦iþEt?9¨ûsµÖâeù<£ålÆêR„©˜"UœÐçuIU£)3Ój!Uª*ÐB”ê Ý½À¦ g;by¤ËaÊ'=º"Lm¶–«Ÿ¶ÙÛ¨› è8‡áñ4>)Çeå]ê,Ô?ÑÐá8c… Õë­©µiLß·µÆV¹ ÷«ykmÈ:˜9š€és{¥º¼6Ò¤ÈM¦åçWǰ,¯WTéî)g ‰Ì1;ò@Ñu\\vE8Æé(Ž©|º™“ÊMäÍÐ"©vm•æUÑs˜šzØH(u XyæÊRË …Ph!Ð)ªbÖ! %ŸF¼{Y¢€õY^ ÏyXò]€‘²˜r)A ²lLcHÖTQ³VäIõÌŽsU)d­„Ô «’b\D.|Â…S,T„zL1Î}V$ÙÂìM)\ªäìÆÌ2ÒžŽ”ü,ÐÓ;{GËæÄº”g/›…[JòvQ‡ózÛÖ•HÛ‡×mŽ_¬~ 2žêç0AÓ^zéGV¯ÔznS:wQû*úW¡‡_Ø_Å}s„7ã’ÿÅßÁ±ý;~¯3°šÒÛ ù›y?㛤î?¦>¥?àL ú„@}×m Ãõï5wœ½2ÐTؼþÖ4—~sã÷v§`Ͼ­m½å'ùý@IÁõTØÎ°ý&l}¦¹ø×Výìäz':φ£4õ‹þjí×çî#í?6 ÑèôÚ<h»·Í¹¼Ùô“ôÔÈ ¦¬tQ0ÒŒ"y\j$uày±xg– ( (#ç•‹’ƒcUIÏ<Í@¥†±.e.ó±RÕyÆ’*]€r5·À=2²udz-@‚6¦UN7Ä;ã!t<ðA‘,@\Êj[®r.T!¸’%ÅŠ9ˆÊUšÜÙ8•RkDA™T¥¬Ü Suˆ“¦@\k’YØå)Câ IB¢RL”PE®!Úr²0C¾Y‡üÿ¬Íÿì%5¬³ÜD}•3—¹JvyëÒ¿ µu²âQJ˨–¡eçªðDÜ탽hpuD%ÊÊR!Ìáa&¤×P×'± îÅ¢Ò¤Ž«ðôr>ý—¿€Óþ¾xø+äô#½•~ãÒ&BùŠSûÕòä´—c†§æôœ6²sªj×n./d‚‡ÍLñþ×ú^ªQš«Fª—Ð6αV»™«Ä*¨R»JÝŒ†Lc…±„Xó4Ű×8H!dœç»y<>žôãbrl½i»y h£Z B´œrg¦N²'%„>Îi¤û©ùë¯àç̽J}Éc^6òqCñDf p»œÎµ~ýè:.íX½'ê*8̙К­ˆ•Çá>äv.Ëq‡»s¯Pq’ÛˆT”Y(’’„“R+ ¡ªËB+=Ͼ,½£QX‘'†9 0­lÚü‚t0¢ršìt*ÇÁ–ÎaÒ:.²¤¼ÄV9%ŒÕÌ!±Ž¬­¶B)#¤et˜¥ª(¥–† gã}‰2Ì('U•Dzh®œ©;±(‘oNpG#äÅÖ\Ë®ÇùY¼ùUZ–5,÷ððŒäNà#K\üÄCëÓ%<¶kôãbV½¢fwÿau„²‡ÐÛgÅ5ò=w6=Öp8J8áýÐض0ŸÃéWå :9€ìï↷ÿ%JÀ Æï¢âüþÒ]žÒo-.}+8W€Hû½øUy gé;!K?ä}æo„~Ûºù®æü»¶!P×ï“Ùòn‚UŸâ÷ßõiŸ, ÒË·1®kHpçýöÃÍÏõs©žU¡‡zrÇ‘ #—MI-}~5¿ì›ÿ©kW­¹ÿ»‡áÓ»³×ós)õÆN½Â>h#*W¢•@¨çœu)/…c~Üuº¬D«³ÒÒ)á56M´V]ˆÚ1Æ$Bk¥ ¬æV¥UsÉ\ND†«`„mØYmQ1*’ •rÊdc¼Ì(°èyJ½¦µLVƒ‚P¥£P÷nT­³pQJ‰»’1-2”¼ÒB"ydãÔd2¦94ù±dUA̦;USÀª ê"[YœB)ZË` m+VåôÌj+~$¤Û[[dC¸Ôš%3a‡éʧš}\OÙ诧\΋mbmkãSrZ †âÍYícä2Ï¢+ ÔêºU†CÛµì:Ã&›2SÝ /)ž"6÷L/¾º9 ·bý:ª¥×ïwÔ©ä+à/̶ú.·×U ËýÝÍ~ §|~¹Y¯Á÷»ó\IôIŽ£5ÿÙÏ×Ï\ÏöÇ] Þ;{ááLñÅÂê:[''w­Ø˜Ñä¤6w \TwØ»e/& q_†,k²ŸºXd¥ ‡Ö@E’ée½{ôþè›cÊ&ò¶­¶Žòäàóç&’¥Œó‡2jJ­Ë5O¾(ót<Àöœ)eëZÛs’=ÌObØ­íGJè)íãR§|Ü—&pÔÒAJΡ@¿–º1Jz¢ÞjQ4–!ç9")a­@gpkе³4M-’©RP^x-s„³WL‘KÎ1Uàd![®b”5Éì ·ÅHYWHNd,µ2JK©ª Š\AÑÄr•°Hœ\-¹@ 9Òáñ¤¼éš÷´w>M91Q<æ[Sïd˜:’6ã´züU}\ÛÓ˜ò f |ˆ~.ÃòÑí¢åÞ}¶Yž¼ïÏdšO6žŒ»w=ñÐÔ*¶æ&úzýUÕ_ñÙº‡ N¦|ƒE3À÷:ïh•o2÷|-\ÿÆjþøò”Òos|ïá›ï‘ß½pýöi8½ ¾-äá[Íà·nC|[Tj'Ø,p Hò­–“œ¿Î)¥ øfèÒ:Á{°yùønP¬ ©0Ço‡Ó €àØyõì'«ÝûÕŠ%–SžT¸ñÚæi6¡:êB_Ç?7«'­±›õ4%wŸvEV¼OþÖbÜ´¥æ¥„j`°»NyµJT.G>†ÇØ.DêÏ hç7+»bÜdf™P–ШÎhI&d •5f¯3×8[~ÝÊ®iÎ’iæµ­îéÀа’T;..«NÊëØ‰4"9ä”ÑÂù¥%\ö)™´¬¸ É i¨9h{PV`´âQ’NX´°FI§QªuÌ…äŒÜ1iTh(ã©ÎƒP’W+JSÌEóÑ7ç ÑKm©è…çqX†‡ipTó+»ëbŠ>ü¿Ü½Ù®%W’%ff{ôéL÷ÆA&sªìêV ]Õ‚I€ú[õz׃ž$4Ðj z¨Rf™‘ɘï¹÷L>ìÑLÁ`ÉHvô’ÕþèDZݱ`k›ÙZ¶"p+þ*†Þý_¯ÛÝ! 1\¾€å/`þŽj˜^ûÍÓéÇÍm£6v¯Ó#JÞˆ©åúìZ¨]¬%´ñ–Ü2öðÈÛï‡D€î‡ÄÀ,À5÷Pÿ0¼³³üoSûfë÷ªOïån 0ÓwU ÷&]Œ€îæëœEGXMÀhøzX÷W .I À …T/hxóûˆ…«ŸÎ^U?Ÿ¾À»ôRf Ÿ–ƒZvŸ^º®äéy}.÷Sýõ£rÙÔ—µ…®ýÅ¢~Ô͸ytµ[A×Uí£¦^ Åܔׯÿ® Þe·¿vÑÓsW!—¸,\+®´)92ԉĮŸ!½ŠóÒÿ†‡ZŠ'ÂR#.— '0k•FcÒ IH0é-N)‚ÊâDWRX$)f&CÕ°Š®X{iŠ5yVX- ¨¬;ƒ³Ÿ+Üê¬\Rº¬ !¥#QYA°t$S4Ý£3ÔÚàLQeÒqaÂfÒСnZ0ÅæTs®Ë¢Ø¥–5º¥º¶ñw0j¹Ø&Ã*QIÎX?Ef•ÌÞ¡)"±µº]Ó°V7íjz¢æ—ôâB[¥)¬ÏÝËìâ>]–®Q½²Þ ±n'ûãd—¤h«çNãÈI0ù²Lî¹|õ¬qŸaljÙ-¡mãÓ†>iH56Guà4I¾AÑuÄét$seœ£n[·og»CøìjÞl–Q_ÝÁ˜×ÿ @ÇF.hy*Ì IDAT¿Î¢ˆñ¹ÃèR:”óÃ2lÊ(;9ªç^Fe¢7uUîÔÛU}ÑÜý{sÞý̺.Ž.ËMúòÁúê:ÿùžô7–®Oèߪå|æJRiYÇ»4žÐ}æºÚu4l›²çój[/oAŸ‡¶óÑ­ØôE±˜´ÜÅѽ֤KZ3ð¥èç­_¬þk_VÔ|æ|°]g@¸‚l‡ŒÚ}΃)¾/õг«±S©¸ªœ Fíi±’1ç}i«Ù0´9g™ÏóË»x=ÂîÚ·½M‹¦¢”pD>,fª‘èT€©“†˜$Ïy¾QB 8®ŽL™JzSø’UÕ:©u­O[³2Ê@Á³šÓr9w¯nç×§c*Ø„áêRÇS5/ä!.Ô-Ï]TÖ<ó9ìùét†'#¯ž«/OUšö@³·T{:õr«j„§(W¹ÛÜçPÃ[M` €fx '€» lúú*Âç—¯ãS‚o—ÖU‚jþ ƒ:ü‡š%¿¯,ý·‰ iú60´À›o ;wéÃ#ÿw¯ïmÍð`xöá&F€7XõpiàL ]ä„qÛwLV€Ð0ÈWï†æ~Ð;Y¾j{;¯ÚT°fháÒ´°=ÏÝùõz—ôY½Ý/ÿù¡=Øè¼Ýzûé•ýÄøkØèì$x;ñ4_E7ìOp}[Ì/ûö¯Ù<Ótã®ù ôÝÂà çYH÷H ,|±OfTkº´åÍü·>€n02ëÊFoódò›¦&å.kVjF–Œ CQ0¡ã$©\BQ%oÐZm=’F¡‹†Y‹â )õ ÝÓ•P©Lëš ”VZÍË`1@„¾Bõ¨ÚU&¬Sž ð\#vã°6MÆ,¤©¨fðBÖÒP:˜#QÎ>LV¿ÔŽ›>©U»|*TM>©æN·•éÚàf[t 0"Ö| &·~Û—@XôކõÃMÓ¿ žÆí1Ü-Uܘ8鳸{àë œ%K±Ùhå‹SóÆ*¶ê’»1«x^®Ï¸b—*ž¿ººUoV×ù0Ìû6VÃ[cÖÖ´‹¯ÉÀ‚xµ-Ò¤&,ne¢S9obâ «&í¸éé3OŸF¦Ê¹Ä¦ø ®ª㥦ç+sù^¬ú¶IýUŠÝÝŽeO°÷yIÙcU¾.[][ÙóÂ3ˆŸÜ¡}ÀCÂåwÃPïÖ>?ŸìCàn)u ©«çµ ÷tìJ-е×l•Z…˜]É|\#œ‘ÏÝFÁ ãN¥N|s5é´UÄ(%SÞçÚ,Ù7Ípm@™IYm¹jAëbUà¹ÖEU­´æ¨•M¨óZ[h]À!8¥¢ÕQ‹òYç‹J™2t\ÊÌrfá`ûÚ7½mZ×d畲3æ¶Î˜™£^f¢‰S+ØÇb"‘(2`uQ$D•Ø|Ç,1¸H¶õðYCÇc 5Žwã\ã‹qÚï^ŒÇ&‡ßfÓq¿_L9/oÂè«CM;†ÍL:sl¶' €¡•[cô.ñ«¹ÂÔnÌ‹_¿ÜÜúç «}ßœWÃmY<ç·íàíûjGúVx ɽ×.0ìÞÀøò»® ½³ùÞÇ¢ö#¨ðϾOCúµ‰àÝQýƒV¿/ í (wßrúβ`¹‚Ëlaùv:’@¿¿ÀÜA9|½Å{HßX–>‚íNB}§hÿ{ÌøúK¶Û˜âœ¤ƒñê5\ÞZs¤ér5×äeÑPá5è_CÁkŸléorÝõáa®ºMk 5ÅÒNJ“ÐØÍÖMP ¯X×7M+×ywýyÓ]Ù0¦fº ób:JEŒ>CSû¢èÞÚÚ(cMÆi¥…)“Jª)®m°‘"(c&Ì`Æ"£F®P¤² ÆRgOØ+Ð9•Êgº0©V˜\ @åH%…6°)!Q•jj4%«¬´2¢H’â‚­63è…Тè˜ý<ËĹ½·ÎuŒÕôËJqÊj :¥ƒ6‘1G„R†rW§¦†äúdÛlµŽ´Ç¶›E´”£™¨Ú¬Ë`¾ÍÓµI&{ïÉVP©ÚªšµÙ Š&S$©äuÐÓ.÷Ûñ¼q[™×^é­SÍÕÌS“ÂÒZVãš·oÝÿ#ä60¶ùGWµû«ãÕ)©lÇßéßšòªÿmo»~½Á7:W‚y…†Š<×T:Ð¥—éß.Óÿ™â•ƒ§óù±»«0e;bo¼Ù}*•Ë©§há¦éÅðܶzláÎá<×·—à——kœW~ký£*ëŠ>¥.í¼ôæÿØ•£Qæ7œ·sY·Ûçõª»Ê)ÏG’×ÞKÃM6”TÈ®olZ£zS”;T¾½ÄcÈÓtƒòµ›†¾m× ô¬Ï#Od“eYOeN[¥ØÔª½„kÆ]·õ¶Ï^’ ‚{JGi!d•ɵU^i4Q*S¨R¹Ž îYúà\բɫAådª Ø¡–Aè56M‚Ž•ë×x[R-KE¨Qj!Ð,J{±î‰ .*R59æmªMšj­kkYñl–ªcÁiåE’ßäÃWð•ðÝqâviCdœé2+má6òiW5×ý«½3XÀûSѬna¤³üâ¸ÿD^3¿<ÛŸìÒºÓ›qÎ5³_ ?ƒüK0îÓGØ7—wGÐ-¨çp“à°À=€ž`°é=$<_Dšî?0 ù *ÚoüçŠ ö#> ºús…ôÝá& °|0¿¶UH€Ã€?Ò…nÊÜ*$ Ïóû_@àó žîêóÏàën3t ð7À÷`  FÁÙo±}T‘—OЬŽ–ø ç(Ž?\úŠoR}¼h#çÒ׊7©ïóV¬f•O nž¸> 5ÿª´cçÄ7Ýêñf}³ómóÎÉC_M—ÑV·RT·Ý’Ý«•Þµ¹jÛèæ"¦'m‚Ì”«Ñ¬(sÉ—¡¬úªÚs®­æÄSÖ(æ6`I¤ Ô +B˜„QÏD…ªR¨NévFU”"Æìº 7|_”Ä^P‡ˆ6ÕO¬^·1¨PÊ"°$(œLm”Àôdl£|£Öiœm⢰j]HBG(¤½%kš¬©L‰’P)¶µ (*À|N ´Uuv%W'Ms.Þpñ`š\)L—Å$r5~•C¸SÆö¢VûaÙ#íÕ°>®Ì+]²1É(€9é¹£9öa‰Çr|<.<îwŸ.¾ OÑ‚–캣3ÎÖ½”«}00§­JÁ)O\ßàPVÔƒ$®6ùæ ~qÎêåáÇaîê-è9ƒ}úžýzX:µdÅkžJÙ-pjW[ñŠ%—4™RŸ,ó|z14ªkNÚí+=ŸÈçT9=™k>*ü÷Úë-¤G17ÈZÕsMJB£îê.œÍZ¶i”½d ½–$£Ä²Óùw—Ã]Ò²±?ãåÎ5} ç¢cžÒr’¬ÇU=¹„­ZÉ…ïê$^xå«}|M»^·]ÁTë±Æ3J£±a•¸Sm©èjeYòè>¸—Õ]ƒv IçÓm›ÆX¯<‚"‡ ‰Ö8 ‹Ý†ìÐ@4(©^Ä¥š!§Z•uÈ *0ŠHV @cIéš’NDÒ.¢G­‹bͼ0. ]¦\nGÆßIúøõÿÝPÔpÑåþš«gZ;:’ÆÇùÑÃÙàÝtÛÞ½jÿ.Ú+H;(€*.и4 sã‹àÏArEíµ×wR¿ ³Œy}>å;€-$°ð9À'GÐ3|•Þ6×O€_Ö {WSúümx ëö¿yϰù&KÈО¾îÞÇ´ãÑ8ÿYÃwàƒ­¾3æèëŸäÖ»pͤZhØöë>6Zìø~q °…Ô0€˜Þœ~ пþP>dUÜ'ˆð¸Òàë—²RéìÏùs{Ÿ/K|õzï-pÓÃrÒ­ÖWvvÇS5ƒ4õ ›kê=vf߇©×14¢õ±ñvè6kßi-X'æ“!TªíIi›ö ÏGëÖƒŽ†.—L+ÍH’³(.JÇ6M!“ÉlC`Q2#†ÄUrP­E ÖªjÁ€RÀ¥(挊Gq'qÄ 3²³•Ùr!©" €­Â­Ö}Е͒UQÕûüÌ öJéEÊ-¤I‘!°ÊvIoE\«²b\ɈXæ<Ÿ™FG3RõUצaC£Çèæº$ž§ëñ’R#½æSŒiÀbÚ¨LÌ\8g`ƒKÖrQ¾ˆ¾dÖ ÈÄäô¬Äj† *ÔZ!zN+©l êÀ©\"Ï<•:–%ï)ïçTãÁæ·þþªü;Lÿ·ž0ÝÑòßw$M;"ÿf>ïî .Ç á|ùŸv0gÀ¯îñeI;Xiý¨×ö‚Oï§îšÕ卯ýfJ?™åôUŸßÜçGökÙìq ðZ ÏËjü¢Þ© ~ àøò»,¥ °¿ÿž§[xsû{ÙÛwé?áÑSHÓ×LÖúO×Í¥?ô*„¹‚š¿3>ï[yýT¦ç°¤wä¨wS•`è.ðl†SÃ7`Ù!ˆø½¬Nik±wÍ ²g ]õ@}tÜPE½–eÚ$n7žËþ+“/N£‡}W¬þrLÃϬ]cwqÇ¥çÀ¹š’Z"dUÎÒ"mefÍAkYôƒ‘ÐáÆ$çÌgzUŒp\ &ÈrÎÜ›®ÑC•õ\LI|©ùe¨V래ÁjmHÌU ±²ÑÁIÆ…1rE(£2UQ猞!¦xû¦Ž(§Kàã…øÌKá}“U˜ „¿ÜóŠê9¸î:öOâïÞÞÞ§7_÷?E~,w.67#`o¦Çýo®ôS¤“åqºünùµ?žðÍãôòz,íBè¡D˜ÿ³v˜Ÿ—èîøØÍ¥ý`§K0 yoßöîzÖÁiú:ú§ï¦Ÿ¼G‹gÿ¼°á¿ªqû£˜¬ÿ¤5¿÷ß]—¶Ö“ü†ôÔä @˜ßænf8}­Iy÷ ÏŸ@Jï¤Ûwú `Ùæ·4Žf?>ùåkúK»l<Í`2H’tPpÐm~ôù§ë¿þüÇoz§4œÐÝU™,ö|¿i{‡Ê×9§±ò¢¥8l°F Å?€’¥V“—xm³¶Å6P§›pêìUµÆh{%¥ËìJ˜KÎÚ7ì,@-¥”œKY8E Qœ1F‰Mعâ„Å$A‹ZµÖi–8UUÈ-(SÒÙt¨µ§ÎT…ïÜ@’©ïZÖJΈ1ȸè-º¤=`-2+™Pc×¾+’K€)¤ \lvSBUôbÌ©·Q@éâ Tãçâ°öK¶Ç˜Ç¥4á¥ÇŸËœ¬3‚í £Q‚¥úÊÖ­”îÎ$jŽ<ŸÊx§Ô\ñù´]¼ªÓáÒD­qH¤|bc1k±&Ó¼²ŸŒzͲYHÄÿ<ÏOµÂn‰9ŒM?‘ï?ÓƒKÍOm³”P§örQú¿ž\^l”úTìuKÛ¦ëoVù¦Ë M©–UÄxpÝ8éí^—’íqÄ«š5°Ý:kWvv^9ß6Vu£Þ×êé¸Ë>§/t=4õ§Vü_,v‹žÌ㿞mÚ¯Ù‹ù…Û5è>í]ÁjÛyצ ë®jW5›Ëâ–°Jg»¶½9žâW‡Ã¾ ÓƒQMP+Âj¢7 ý’é•_ÐÛ Ë”ó|µTmªCrÆYÒ.;ešÁ)œ ™Ù4%æsS T&£Ígv—bv,*Ç^Ó¦ ²”ƒ àM×òM-€1/ B ëGºƒ.a¦*CP­UÕ¹M•nóåœN[´…:Q®ÑÆ’Òh‹­Èf‘*bœ¶XUfP©Že:W%„—YÆy¹ïïò~¤øjÞŸÅx]È.çøHBVøŠ#ThýimüLq¯ÏoÇ%Ÿ¨VwPW-l:9˜90ОYMÖE} ööœ¿ü‡j?Çb# tgSf°W.ÕÝ3Ű=@«à Á^½ !3Àà)4Ï¡ýZÈ5}+-øÿ;CèOdF÷G3ûíªÙ?mÆèæàÑ»ôë»Ë’ƒƒÿ@!ßÇ›S‚Í·>ã›cü†aÌ3<8Bšáy I<ÀîL’ ^Ör¹z;€¤Ñ1>€È°]¶|RpŸ^”…=…ÿîG§¿}¢ÿåM¿»Ú Ûˆ0ÇæÄ,%Ó*§\ 1Öc,#AãŒo{ñÄ:UtÑ5º¹V«ÐYi½`ã¢×¨ªß»³Ú¨ •:D³Eê3äÅì .–¹–Xa"\¦Â½¯…5RvKve€¢0 WVÚjT´ÎÐ)eµízë<ªR9sAQ6¡EÈD‹ ¥±[T^C]á¬(¡\³ò0uŠÕpQ†To›¡¥êˆ”(èØ«Š3#jg[áA2ó™Œ#ŠI–R>ª÷š|^×P½T¿ª ø¦AôDªAµ.Ý&\àw=ÿÆÈ:Ö›³_UÜíH÷23ÖúXH¶¡æÚÓ«5ö¾t0h­;вҫɪâu­ÎÞ3J]/ÉßŸÓøâÙUN›Ÿ¾\_²òvÓXßÖ~X¬]XZ©!ÉÝáþÐ,;Ig€ôfþÚ’¤'°@<ß¹¼ï6w‰òǘÆ}èõö àô‘šÒfoþéÌèNk ¿k&|ñaÅ‘aXøxÚ~0 å»Å¨ÔÀó$HïÛ¿õå#Ÿß~Ù;/ë-Xét(ïkƒ­†Ç`ÃBG•@LLj¦?üL½Tü,e  ÍSû³'ö£«Õã¾i­­hÎ5§]­¸hMm®©2s,‰±zëWdÕätPXˆ°ï ùKð¥5 R·ÕDîAhÖED˜r.I*‚X°%kÄìDLˆ*g 'Gĺ¤J¥TÏ‹fTºµ¶hÕ “JX¡ %J ¡–‚J£´Q€4S1‰/Å–¡VMNsEMD ]±["OhÙ–¤¢ˆ!kT'蹺 ®j¡Fµì[©šÓ8—E&e³Uˆ¶á´“`”€Ë'8—teD×R´mqÖŸT?!^l®í Æ/›ñ…¢ˆM Ìú|2ñK:¤ŸÝÔúÑÐRfÐ’HšMmA§©ï”§ÁÁc5™¥: s;èfй]+)©’Éh(0\©8´ËýÕùÁ£Ç§þzí¯Ä[Ûie`¨¡B-š«49@|™/<Ëg;ÖØ3Àº)ÚuAÆF‘uѨê©]ÓÖlÐÙóÛË[åN>55¬aS¶—‡/Òes#tݯ·tôvôE©]snÞnU°îC]+ÀŽëªî®—fº¤ËXêx¦×½~4¶ÿâ1^ëZUšŠ9M¦Lç2±1=êv•K5³ZCtíeö‡7îžòph§³!WÕ:›´ltG¹”ËÂošr’Ä$ECDôÊ0÷MmÚÐöÆa¶µð¡&“³æBgª¨h× Ódm Û’gˆgÉA÷@¶ÇM[RÌ笨ƒµ-Î)S SÖ‰E±bô :kfNÓRâœÇ‘/éK¨ã¢a]\.=*ÙÀ›ŒC¶_Á qOOì.ñW€ˆ÷çý~}€'-ìþÜI__ÂñÞlÖëM¿íi4,Ò­*¼¾]˺1ƚà {ØX?µ÷ %ÁýÃéõ .joŠƒÕ«½yÙ7–ï’‡¤à‹é›sóþû±} °~ÏVú0,¾ËÓï@^ýÑþ Jrè/>È>ŒÅ? ßGŽ-Àà[;u¬ßK>,,)ͿבüáD¤~$)QßN2Ζái€CúöLïy†»6g&Ë`á¦~~s÷WʹùnÞw‡§Ý¯:ûR'à`Û?KÝçÃö§Vß{©¥à 0U<=k|Ð?Dƒ ÇÄâuGÎ*‰™ hVÚ·ºõ6I”XZœJÆT“3 ž¡f®¨D+ÂÂeA™!×:3Ç” NÅF¡<çuɩȥP¶Ê$oPÆ2ˆ"$œQW"QJkíB¥- ePY;’J®bXÎ5U^Äx¬Öá`${‰$–¸­ Œµ ’²Å!¶Ž]KhtÐ jVFõÅB.9\ìt.n.ÈÕhju%Š9+¬ø,IPø³"OÔ+¢•ÉÖ‘jtEõÑuf ¾¦¹‡šÂ+*J}5ÅßÁòå¥þÕèÓþ`]‘·ZHéB­£°]´³òÈÆœFç°Í1µ^Õ.aq>‹¿â΋zì¸ê]ór­êîáO>¹µ~è°‚š@×(Ó4·PeèDS¿›:<<긱ê"·ÏC]W ¢`VrÉ”–Ø„•î:_Óša y37‡«‘ïfUkíz¬ÎåŸðæåIõ7±m:@©¢õæv´qqú?ázÍ ñFÛxÈê€ÍhÄÒ¼—ðÿ™³}Ÿ¨ú`eˆ‹¹Y½¾lÔ%¡ähv]]mÆ T†§‰®‡ëŒw˼T³Ï]hDicÜu×\Yã O)›ªˆÚH¤gáÛÊSN¼°ïnºÎ4Þú‚¶ÒÂãÂñÈ[?ãxë™;…Åè„xÈæÂdr‘Œ±Sëh§¼*=- Ó¦$#1]Xê2I8A1¶Ø¬‰ü@2Æ—iš¹,aŽóäІt]δlßf9¹pï¾Ì[e¼_9=ÌáI»ß¯ÇûíW]GŸGHï½?ŸþrË€‹“Ÿ¿Ï!¾æÉ`‡ÿõ éãĤ†ï»:o§½S-~¤z€7p¸|ЇøˆIPz§Nß̺ú NõgÏäŠAÖ»ûÃ;VÔûiéj:N \oaAŸæ7Ow¿íwŠ3üj»ý5Ð]¡'#Ùæ 5+ㆿÈôéœÜù˜æ%F}¹¤|šŽ’Î;‹8÷ '°Gš…HC†”VkÁéAëÖïhÁ¬¡-&d¡š…“ Ar¡H®W”g4œ–SœÐìñ@e†R Óå¨óIªspQBÈUª’†¨CÑ Ú€C*l!GPQ‹rÑQTE9­´TÑQ$Lì‚ê °UE i’ªIh.Š´8B"°g±aeª©@¸bç´a©Rj3Öæ—œŽ%õ¹^/³_Î<†«¢O³9ü}«þe¯WV7Þ„¶žP™’PD™Q=(½_mZÓm©N_§¤&&ªs(Ñ&ø‰øÆ›W~ºVÅ0ñiöà>eÞ IDATÖVy¢© ²î*aÕ§\챺ÃH;3w+í׬tÝ<.»~m›¢<Ô'ž®Z;tmQuª÷±üÇ eŽz ×%Z´´ èAŒNŸ¯[èLîëWóÔæc˜gÌ‹l¦Ð5ñ\øisè­ßy"ÜÖá¡õþì÷4ÖrQÙ"”µµ~-?3z¸€†KšÙK9öÞ¶é¢äR/oGÕF}ÕÍì ¦;¼º'¼.oóñ«ö‹Ê£É`JëÍ(:œ \wr Akt3»Jkàp ‰iSæМWSv­ñ¾Ã‚.:€Ž VÉÔmº-’.¡:Öxk!7æÊù+2k–†ôyªñÂÙB'Ø^ð‘‹RÝP1.t*e†ÜUg_'кSœ™‚Pš´; C™®KÆr^xž[n¹/U5 ¢KÍ9ÄcZr¨@ŠÈ'§èL« ­æ<™Ór Ó[LGvCQ¸ðÕ]èÞu÷æÆ­îÛéîŘëùÖ½ÞßU¨Ã]Û ú`–; {_:xß%¨Ë«áô ó«0‹i à~ÓݯÀÝwð¬S§l6×Ô¯eljw„ë$ûwqèƒø)è3”øóûûÀÀåùôàݰÕ÷Å¥å;ñóOô·§Ñý`ÑÉ~ -Ÿþ:Ó·oz—`a€õï±áôžpúáñÿce¸ À àÍ{’Ò»‡wàÕ‡ˆäPV§·-[sLæ&x `€ô…æ-è0æÛ¯`ðøÀþ-K‚_¼ê™xݤžöSé/“Ý73êãhîïÑ‹íPY8øÚQa„aiw «yDйXíª¶Â ­®Ūa!ÔF@Ïy œ“ÍXsÓia•—˜ÏS]â|mrWÎ^ rƒ(Sm£.‹Vžsæ¡)œë”G% àšGd@Ýq«‰¨VàȵdE¡õ"4×ZsUE<‘h"D‘41ûª¤j/Ú rQ,Œ)†™´b9HÎÙÌ#;¯Á¢d.¥¦ ué,õ~,<ÍQ^ª—²ºÀÿø05ëFiEF™¹úœ“+‡AØ*—µ-„us2¹RiJ"ýãÌP€\~¹’žJ˜ÆÎKÝ&i•µ"”ЍUqm@ÒÊKQ9ó˜SÕvEÎ÷Mû¨i×} }XSx¸²Î¬r…9pÞ‡åö4×iú«Ó¹óôVw »ØjZ{ÈФ`ƒh—Ò¼‰¿Ìá2…I0l›æø ßëR:¥Ï¡Uš5iëürœ LRÞ–¶¿¶ªõ˜îçs‘û»4àiÉCGOj×m÷hré-Ü6·•N¿i—CTùÕýÍ!>±¦mø"º{Åþ˜(–Ý^™ìtÓt†š¶Ô~„ò)•y”û¥õ«¢ vF5¨ŒtÚkf'"[×nuS¨¾Ž¼Ýúºm8ôŠ ƒ‰ÕR­ø\ò©.EWÎX¥3˜‹ô®š¢ÅAsñ©ZѨhPY£œf§DS_û޲gDªF’%XÉ›ÊFªfÍXǘÒ<ÆxIó½-:‰ð¡,SF½r /¾ÿt:žG9ÕæMY@îƒiÇ‚ `¦Ïä”+Yµ–k 2DZ¸Ã/#€¨ÃCóüªƒÅöx;”Yg•ÓÝ?‚ýÍ¡‹ ã\ü£yòó7ÓÛâžÀt Óú`<‚ÙÁ )€²LÇrЀÀ«wá><¸‚rp ÀÞ‹¥Ëû3î×óð~Øêááûü©`ƒ°ÿløaøZSúüœ¾Aƒí»-kÀ.KúH!écîа‡ï ª5ÀczgïÓZPí’g ø ËDÇônLìc€·f8Ü8˜*L¸YãD_¯ÿ£O ^À ¸–¡>¿./Ó3>·µ3ç‡F’9/þ·oúݽ^¯IéD…¦ã jfªFçg¼(¤+µZW×((R’HJó9–ùœd­–¹ÆÀ'ä G!4Ji6"E%E‘L´Ù£J(š´a‰g€¢ó±cÓbhhïqÌasWÙû–Lm1DªÚF@äDYˆE3@Ö™ka`ˆR“ëª %3CÃèHæ…êQ£¾Â š•("è$AáÛé‘)'ÉcÎó‚¦-©£J/\:k!2Ã… Ðö%ðŸğÑ΢eÍËr]ñAN×Híˆð†íX†½ºYì\-Ç.@~ƒn­–)óÝEÏ Ê æ!ù&õ å¢“¢¬)x’ʪëwŸUÓ¥TJ~5ØiGñªâ§„WÅÁzó`hU%³Ÿ§)_ÎõxšÆýþÓù˫ϣ””ÃM:´£;)…Êì‘ÑŒžDÅå\dÂê­Ñƒ.}1U·QuÝúØmâ•ïñ’Ð9\ªD¯ŽêúI}\dÛ¬m»öNn¾‹w'8ø¼„¼e}²vŽ]Ÿ8—xu>ÙZªBùÑo:^3Q€¢™\N’fqnòžâkÍ· ?5¼+DÑÌV+­À¥ÒÕYošéZ_ŠZ¢á3ãT…— ´ä ÐeÅìgàz¬t`½êd7€âÒÈRygÈ¢EˆZiïŒòdüÊÐ sÙ‘MK¨3B‘jä¬ùz—ß!ç;j°åŠmÜéÛ8ñî ï °/ÀÂü¾…þâ X¥xN'€À4Ÿ}‡#"€ø%( ×Wp%!A>Â-Ø ¸,Û˳€…~ýL«Ÿçe¶i²à2«ê»ü-wsQh.ÂÏ.ÖíJ–K¼·Ú6«¥Ó­ÔUM>Õ&–T„g8§ú2Ö7Ú"›T׋/¬GÙ–DŠ2ãŠÁx_5bŨ‹â¬–•‹ìœb¢VÃ¥Å_kÚ‡ú·ó²!ÖÜ”(TEUÁZ4Æd‚ ¶”ÄuFFO¢‹ÔTë ų(“¸Êœ³FS¨TÀh$*Õ[©*ã@[*‘sÑx1Øj :Åùk‰sÉoLIÅÊÏÏxúßJý7A?­ø¤ª®gnôQÉÆ"4es)f·˜‡‹^©]? o(eœÿæ¨îsÿÆ‹†YÕùpVVãZ^h¾=ÓëàÜÿZÔ£¦ñ ™Ai"UAÚ½°ß ív fË)P˜\ÇC£×J†"kMÊ·Ši½ˆÜ/¯Ÿßÿjÿö·‡óùöþ./?]Õ¾]ÝÃáïh5h÷´ZgKùM/iñK‚ çèίlTèýØü”í¥£ÉS„¬B•ý²¼)y½v¢L‚s;Ÿ7m²*óІº¼¶$ÊG²ªJb ¯ûÜ©s}}dàìjyz¯†l¦ž£ª1ɨUÊÐ4 n¹ijq¨'ÀÈUM—.—x bVg-R3Ûô*c(MŸüÉáª)=ž{dÉ犥¦[Ö÷"ÉPYMÐxw0æ¨fÛIà2\\f—²‡«G~wÕ®˜HÆjQ1†yEF³²Õ™êÚVå@Ø4¾o´C§ÑѢꜱ˜¹0Æœ#§.bàÅ!‹.(%Š3Å1:ÊQ3b®š{»¼rþN¯ýWñù!ŸÞŠÎv=)Ÿ©ëp­*öÑ*þOOà¼x, ½Hà-ÔÖÿuoÒ#Ù•^ ž;ß7ÙäC tƒÉTIUj”ºQ*ô¾7þ±½«jÙ…T%dJ)¦R$3éŒÁÞxç¯d’9ôJiwsø³kö øÎ½çœï|Ÿg¶3ú¢þWè¯aéQÆf¬ðÒ¨X·eޏ+˜Ìȧ¦OßpÂÒbÏ0Þ ; XzÏ€(¸¿ÆyÀÌØ"ˆdxSá¾Ï»ÿnÃý眧ô6‰¶Ý° ?®€[àØ.ßíü ,§4Ú÷–°ë—Ýï%t ëŒ-°6ÐWk~}¬äWaqH9 xLÆÜêofàç@°üãG·q³W¹ªœÉÃyT;/ûèö9ª‰2¨&¯EVbª;¥m»:‰À ÕÉ$§)‹Ñ™>ú_OáÎrÿ7S®I@Ris»óEsb! ï’YÉÈjO"×2":ŠŒ'd‹È¤¢R€‘+©‡h&I®&TiÎÂ̬MÂ0HÃXÍ¥@ápŒepY $Ëš .¸ÌÄPt™‘,0a²*emc©a0Ò˜Ò©ÒJ¥ŠNÉP沋Р:—©b‚™JNešó={¢ËÄ,"LÐK<;…És#B%ÔéªîWEü˜Š](Γ|"¢Åá}г›4(` ªŒöåPÿ–çlF=¦ ˜ ¥ði‹9à×ÏðêÏž __ãß;/éûËZø]¢éÏ æ÷?4pµÅõámñ8|»‡ðÃÄóðC4×€°ÿ‘¥±»B¹†zÏD½ü yýÖ)ûfí[„G¸~epU°¯n ø/ª¢ç÷9€ «Ÿ¥«•ìÊ\¬ŽZE>.Ý!)´â$ýëEn4·9n!lÚÛ.‰\Ž$Ü bq:ôi§ó~¬—iÔz–2˜'Î ,g^„rê'ÖsPÉ"æƒ ÅfÁK$ª¸`Bª ŸSõHHfä Ù=3R“˜‰R‚E#+¡¤`^rI$ë’•@Å8ŠÊ¼0‚eâQfanö¢n l 3÷¬0CIÈb´aµõ*9ÄXX4-#i¤AÑŒ .Š4àSà‚É'PÿQà|l1“*g ?Wu™i^Š?Š(bÙ‰qrýÞØ2†í*0 Ñz·vÓ6Vxë%°¶$}¢tJª £š¿Zm–Ëêï6ÒEF=k4åÕèÝ´zI³F”6—¸b^«´ì”#›Á†ý *–Ï2‰¤×‹¨}°¬Ø–où_–ÜÆü4ËîK¥¼®Â×Û=³vçJYl¦<²«EºlÓ'K¼,D™÷)‡ài½¢ËÇŸ=¹|Ör^Üé£ýñ4çoæp¬%o˜Xç'/rˆç:Ô! ¡ M×ÙÛ)\ÚHù§ªâUZxuŠPºKêÂÎCJ-c»"W0bÒbH×LG¾rª¼â¯XÇœ\M©vCE}\âJN6¾áÒ”$zp¤Ô#/Ü}º\¤.©€!TeâZ°3ŠÍª®«T5"骒Lš5lsb Ë’S²ª’àZIQEiŸÁ3˨„ .'KAbÅŠÂ43ŒiVº¹Ìac c"—FÄ[i¢2 nø± †^ä“ç{ø_É9J?—˜åº?Çàá^Iýúy½´¦ü"µŽ( í_ËhsüìSÔwH–ð#¦ì^Óœ¿‘Ì.Íeú—W ÕpÎoÁò–kä€}„çð@À h€}E5¦Ãƒ:# À*¯ w~TÞ;)óŸÖ üg† €^hpý¡ÆïÈóÆ­õ0Çá;YÓ÷ݨõƒ§©¼]®3PBüÐ(õú5è ©< ãK¼…“æá›Ú»‚#›§Ëà8¯P§Ÿ©Gÿ˦íjÓTdb™sq§^ö÷ôúŒ?Z[”}…gÿPä/õñ?Û»¶•±VSZT›‰!Y-¾’S&ridéóäà†Ý8¥ÚùÕÓC£xÎ%yá ´dƒ('¤×2^qÖ¹‘âxÌ Þ_/fëfꆚV%c‘+«EÇq6'>J?pê¤5\¥ÌÚh«5„e¢Hm8ež£¤'¤ì § C&’‘Dð<Ûš5ŒUÏ5Oµ+‚™¦IqË™çȦ¹J áC!GžIet Ê¥Ü'¾ŸXWôÓ¡=?ö‡møZçC¥DÕ]¬Mæ *ŽNdæ–G“³ÙßÎ)Wß4ו6á³[¯—iTêÕdšÙ]àÅõy.û»3õq‡ÚÉnÁx‰¢ãiÝÅoEèhÖg]^óÑŠa¨_¹Éå|Ã<8ßø9ÿœ±á» ?<‘aû^¿¶ÀóçÖB%k@Û‡;6 è=jèáð]éû³7ÞxfOë÷‘éñÛ”®€ ¸†~‚ðF‡?¾êàÖØJÐY'´4FiÆ !y1øH\šóÇs½Ju¼Wå.>þ¥ÙþLÊsc[E’r_&º#+ƒ«‚\™“ÈpÃ4W·u¿/÷œÝ*Á»& ä*,êᣉbTSÐá¤ÄÜKÛäCãk&‡Èkä0æ[ÙKùQÚÌ× *ÌURF² -ã…8“¢¶’*¡4DÉZHS Îx^(ʈާ²H©„2ziM칆‘&)«m"Ζhbªf-ù˜ç.q‘@,CrƙҜs0‚`XÅeä*dÉBÜdŽØp¦‰B˜µž•KÓ2ÓAؤdËÏ÷2L+5J»8à2yãC»ð[¬§)Ìr)¢RënsÁ)-Áù"øU)Ì‹U¬wlÝ´U¥y%ªi±ñf£Š‘¼ÚsÕ°³:$}âó7÷å8ùÝž+›á&ÝŽ·Áª]÷™Äî²^¹Ñ.×÷éâfv¥Sÿøhûâc‹³úÇL<âaÎ’IÐ%”^ÐX³I&¶¨¼Ö«³ËŸ|üÉ£íek:#y.’W(~NË>pAPÌk{«.Çá`BNîõM2‡œbNÊý¢½ÝêWÉ}ü? ±|CQ'ÑædkÓ›4U£†e”8FžyÍ–£-p`9´Ák¹®¤â>FB.]$½¥jË»NëâG­ë¸$¨Êf5¡Ì‰ªìj^u‹$QÏ&y‘ +JgK­ÃÁGΜ’ÌŠLGÄYŽŒ¥Š ɰ^VU:sim´äx¦6Š¢T*BJJ“”JI!¸°ZR&³Iä~ïbä%ƒ–èNÁíçCœ'vسAÊþ¶-£EÊ¿<­»3Ñ,;åtµP¼töÓ åÑͳö¤L ìæŒ}Ã-w^¸Œc}Ü$w•7ÛÁ½ØÉ©NPf|"6ßDàó÷‚è V ­ƒ5(30|Јûô!"ð8n·H×ý»ÔQ `Ñx> š€|¬ñuøi·–?»yÑ¿ï1_pø-> Í  ¡ü{óîáámh¥ïßõÓàﻢÕÛ=¸R¿W“`€ì›ï8¾A‹# ‰lÞ þ=°~ \¸>GH@HèŠÂªÃÅ#$v7™×s™­ærÕ•z›èb“›G`;åà¦Ã~ü¯ŒA4ÏeÞ¥”ŽÓ(É3æL^úù´ Â,S½¹°2W“ä¤ •øoŒÏBˆŒÍ1HDœúÀùzFUFÍF¨˜”»ÉCõq@5²÷)8æ©—>W‰ÎpÍÕË‘?vÇEà^c÷Ïœ×ü‚‘}–ÅZKQ+U˜a+½³*ŠG’ôZpËœ‘âIµ^µ|F·h¿=,ùf$q’s^|Pg‚eUq¡¥,™M'ÞT¹ª~õ˜ŸÙ“ÔþãGÏŸV»áÁpK•RöP!QN·‰t-m·nôãíê£m½áQLÃP0ùØã}?¾¾‡92žwÓžë×*¶23Í¡ìs9TÕ9í­ø[¶lÇ牚[Ñ>&±ŽòFU•º•õ¶¥ÖN2©}¦83‘y#«ëYéNL왲Xq© Î¥WðTû¾°ÊTNè=e1FR´F+ÉT²sæ9朤¤,$Õ´T©B$YæŠôFSS;ÓiS3Ì©JLzŸÃéxÿ›ýÈ_ù ›ãGsUBÌå2·¦‹R¬Ê˜0Oú"¨Ÿtª+ü4¥Iþ«47 ¯¡üŽK™Í°)eœ_Å{ ÂWFÿD,ååvÑùpÿý¸ ¬›áøÅ;¢¿º ÚC²B™Q½B|¿ö.–G|@¡lÖ…½ê\–¿Þ—TèЛt ùA©þƒòïüxñçŽ ßÒŸý›IŸïGm [àzün?<ÆAB_ÿî¹oÁ̃u*̸–?|É›Cƒ؃÷í1bÿ&΢':ðåïïñ¿õº««VBQ/kÆÄ‘ÊR… 6u•ªµ›Uï2×M§zUt6SÎ}>I¼Êí6Y¥ÌÖZ[))MÉå2œBL*ƒY¥ÔVÙZ§Êú$e5ø²Ð‹îL˜B&ÉFJ,pf‡@%%'dPó€g–¹àµtÄŠg™çD”‚Ë™ ÅåÉçÓäƒ/¹°eìÙ0õ~ùÍoçå ºrÅ_0W’oXÇòÍ¿\ö¯æø˜öŸLm5U{@Ùû…Qù2êÏ!Í‚ì„Ë B~åó‰Z‡í v„×âuÞ^Þχþ…\ÿ_›öÙÝe§qþnŒ¦—Ÿ»^*ä9&ÃVåç} ”@<~ËYTûëizÓæ¦?ÈŒø9¾ '€n¿ßè?7ß_ºþܰá´¶o/o1ámÁÓ÷4OèÏoûtŒò6xƒý C0¦ß÷†3¿¶« oû¨ßx—§Üb+±­ôvê^°è_L!:lÓ/'·:†ÖÅEåñ%¦1yêõGqäþº|<ý\ÆÇvèŠfQïGÝ#¤ex±È¯y{ÑwÈz²Ñ±ÚçfùѪÛ!íÓôÅxx\LWEMùtèÅqÉ9_ÕÂÑXOúUË~eW‹O-CéñZþT™ÐVy»æ¦¶œºœ<HRÖ‰T.¬.‹t,%шªSvU·kÙ¬ÈØÈ•€½”Á¼Ë%0=+)8D”%ªu„äl( !Œàœ N< Ê"*‹ÄTY8f%±ˆÑó× &ÏêâÇùÁc…§ESò1(&Ÿ¯¡m}2, âkwš»˜@n |tÜ-ùT…¹ûµß¾ºØHaÔÓWñß³Öüee~žÄåtñSÉÿb]5b&›ç"è¾¶Kâ‰Ç̉è] CFd*Àmè5g~ʧ)®£iŠÒ‚±ì“øÅÍéX8Ìͳ'Íd»vÓmô|åoþiÔG½Ûvl3Ñ(,3w·ÛnÔì?4ú²tPZ×\4”ü­Ÿ}ËX¿ùÇ!FÜ_-$çÁìæy5Eɲ˜ 1–NÔosÔ몕\jqçètr믗ë›Ë|ç†æñ5/·*ÔÜñþæEÓüfl°V•Š"cJmpe}püÅ’ƒ¼fC‰ÜŽ{SÊ@Å6öúeìü¸¬VñFE)B<ºon†BÎ6±æEwÒ´ )Íc8¸pðʦÊ2Ë‹˜™”¬VÔíÏöϳçέ0+‡Äœ“+R*7+1ß§™3$7Viej.3"1ÉA¢gBT€ Ræyˆ9fæÝr¿„ÃäfïŽÂß‹É/Ãî|/Õ§àëbW4ÈaÊ´9Ö*úí¦²($ͽ«Aó5Ò?ûÓ}fÀåw) ·´>Œ„Eéá´E™žÀ®À3ös6ç…L~}Žñņe?‡ÜÂn4ª€¬ Mz5ÞVH Nbb¬sà…øf|Ø «7lÞÃÕw#…\ImÆ’hoûîÂí¿öÌŒ?¾ç|pÇAü`;øïƒ Xú½\ü°ðð* <8Š8ðx3‡zøNȇîäxòÎÿêºpÛ hBß÷T?GÞìEÕKdÀY@i¤¿Âè?ñËêô_'üµýæie΄¬ŽUõ÷jÜ'±¦­ìSeo1ت¨¸Ï" ˆ-ν¨Ó@¥32úè¼q<(²¡lrG2¼°êgu•“f³–ûÇŸYnžäri8ë†Í¡D“Ã24fe×ÜT«Ú®«ñÂÖ¾L¹ž ÉsU•˜¨°”K³Ž6¯Š¼(¨ha”ÃÀv=Õ÷òQj6uj¹7ô:¸E§¼â+Í“e(@Ì9…ž\IbÙk61=¥ÊT ’óM‰JÌÃô+÷ÜÚtéUkŲ71K ýñ™áõÚ±%faÇŸ¥éñRsuáK}0Œ´ô•(’Y!j™wijˆÑ«%y(Ñ3Ì>— S­b•Ö+c*¥+)¹à`N.ˆ1•ª¦Ê®f)Ç8DJ93-$±K)E‰Â2•{“œ‹"«$,1¥È–\ÂR†Þ}sØ¿^²&Q°Ä|˜CL9Z1•iàÅ/LE¡‹.‹Ç9¿¼XÂý!mlýš°P-óêJa³»=3Rí>Ù¶OÚÆØ&Y¨82oLµçE-¬ªJoDÐ i›úÃ0U­Þ:3¨ÛurʳœØ^âµáSùt5 ,/Lå£Õ\q_oÜ1sƒyòó¯KVeS šížù.î© ßµ¦nT½16 Us9Õ\\FÕsØvÒ’g~á}jƒ&oÏŠÚ*Ç™þ!àzQÿi~W_=Óf3Ö§)ìSNŒ;¾ŠP»S_¥¯jºÓ—ýúñæÉiþUÿϵy®ÃŽrÉIË…ÙA%RU/ cgw9qµ˜‹ß`€èæ¨â.Dë[Î5?1É»zÕJØ•±h?“÷ ±•Ñl77I³-WÖ–¨ò›9EÔœÜP3K}èÔRs¦³(G™U½LŠB­Dñ™ñÄ)1qdÁS^™fW™®n¸*9 û >ÌcRn)Ó8¤ã)”ÓDnÈ.³cĉ’1ιäRqeS~õñaR›ø’n¹&±@kº ~oÆO{ÖH|< é\2м=Cù%¦Ñ`¹]à^>‹âl|ª55᫹×$ŽX-AÌÀñ1„†2¨% ¨ñ¶µöÇ=<”ïP\Iht—C7ãÅ;¥“¿9ÇÀ…ëû÷G ýž‚ÿ¯g~Ãÿfé;å_¿w"½oôøáæŽ (€. =®Æ7g‘òÅ{Niÿ–lRÀv€7f°öÍ+&€àúîw^ÿøÁ˜î+„ëo½‡pká;¼ðÀ|Ìõ ünÇVºý§Ùþ6¬þ똺õôVSêÓMæíq‰ûÃÍ!/g´\–ÿ^Ö‡ñ‹ëLj-Î/!š¿‚øëŒÒÑ?tajÇÕÜm¿èíËã£G—g—uú´LOMæÒ–§;RJýFŠ{_@^ªñB;C;/Vü¬éªb»b„\7²²ÒI^‡#¡—I!NF'•%¿Sê‰1YV•hj© à%/1C€1)˜¬¬ää—D J@3AàŒ§.8ç SÎù5‹ÖEHOIå4»äç½r¼Õ FvÎÃ_ļµÌøi1’Y­·´µUA=ƒüÉ-ÿmÉ»Ôl–dWOÎ×jwÖŒ[5[óŠ«O‹~T yb)9ÀÏIgUV›)˜ùhØžZ•í˜A)Y[ÇšÀ¼qKE§"‚®rÑ޵vâ²}ùŠøKÒ¡>då¸Z«§Œ9uœ¦åëžMü3K¼•—Ÿ±t®úoD°V‚6)Ö£ãýT4ùd¢gä˜ITŒæ´c‹ÓµH}Ìy¼çö¾¬”Ú4y (ã1ÑÖsØÒ¬RÕ­¡MáUSÀÁVœOŒ]WYÏg—/u4iòñÈDä6‰/¥°¸xsgÒë¹lÓGÌÑÖÝ›”xÊ\Žã|ã¾VÖ>kò…ö÷b«­øÊfaæÂBЙ¯rÅXqy£tL”³u˲ÙBVkž’,I±˜ä¬°‰Jrp¡Œs Å4dÛ”Nqq¯òl3´La¡D‘:‘RI< ^…V%«±®DU! >›$K>„Ó8‡yâ~ž# TíïD§üuŒ"õd§Vúøx5þ¦~å¶~lvMÎMø;°øÁêm£~º®Õ®9/±ìǧÓáІä|Áúµ”7z¹œ SM.›ºIÃ%ðuÏÄG+ú™zîsèýCtÛî šsÒàé;Êç·ë˜*À¼ýûÜ\7ïòõÞT¶øöÇ?5ô{ þŸ©‡õ[ŸÐ[à5Uo'9ÿq|ooãLkΰÞÃR¾:€ˆGJÎ HÀ‹7'µþ€ñ ú9Â%Ð |„÷Í7¸Êc óWÕâÍËoª³ ?}zHè&6ÿxRXƒ•RÌ”nâ!ç±·ŸÏU~ºïÿ ¶¬žˆ< ømwkúLųRBZt.waÝägÇõTv‘ëÐ4çõüc‡MásäUVUâÂ7žþÙ…áU³Ù%4|Vz³ª58gHF¡ÞU•­ùbXY2|13)­‘ •X ,‡—̶\½ÝÖTk%ê töFˆ |»5$‚‹M‘&yãʲ@– šÓp“–ÿ÷Þýµ5FYžÒK7ŒþI«vBfßž>ô)&¤lX,·QÿZª»P?‰ê§v·z<̫âç.©Ÿqó$‘Ìyöu<¯[žAÇD*x|ÜmëJ ˆæ@Ç[äs_m›ïXeCù…hÿ‰+Ö‰Èpl\J‡*¿.ìdÊFæ ÏÜ/"h¦¤.*ª˜Á— ’–Eç…¹n^LïW‚ùVrPñÅÉg,zž\ñçæi®IsFR1• ¢a©£5ã Í,C~aåàÃÞ‡iN‡Ûi:•¹ƒËst'ŠÇ*ï7=-”W àå8⟈ϥù™¸Òü·×%ü ´â%=ïoƒ‘¾iÜöZénÈ îúñîZÕ[³š;²šbýYT5ø#àbåz0Þ;`íq9â“ +¡_aqÜ{ÆÌë &¦Ñ]¡½F o¹· ñ¾Ž1€  „uD˜Ú·9Ïo÷É¿Ó\ó‡ej °úa¹Tþ+#‹þ˜Œíw¥77J‘?\žÿ`ß·ÆÀ á°Áá 4>¢€ö-›twx\¾Ÿßð­Ç%Ð?èýïÌNºÃUÆõ„0?¸m3Í6ûí‚)"x:¸äÉÝž_áŽðe…F£ÏÀPΗq÷ù^ 9  òyæÉ¬æmÇÀ®0fXû#Nãn桸XeJÈfÏîvÍšy[ãq‹b~bÙc‘[>¦KÖóRo3W9/ë~«Ÿ´ÕvSª&ªÒ¶ÅZ(# …ZkmLÊšLd‘5µ‡(e&"*š-[tJ šö B&V(#“ÄP8#%c9°à‹÷ÉŸT`™!æt 2æµæÙ£ô)h`Žørèã퀞Rø¶¤’KÆŒU¸ïLМ Se‘‘!B¨Â‰7¶©¥6g.Ÿ§ø¿‹Â¬ìhuY?¾¨6kÍ –!|™ªã$ïG¥‡{ŒÉ ˜s¶ð±d©8üVby˜7óHâù¸s· /!I}rà ´€Êiá}½ÂüÖö]ÇLo6úíéå[ßòùØá’*Z¤òƒ³Ìä¿&`ø=V¢ pe±¯ ¸Bwæ+LoïNÿ2§?i­÷³}Þtà9Â,8~H Íï!æ0x«RÐ&á- €—,cõpiBpWªÃèÖ·(ôî“N׿(vÛ5Ÿ~üá¸=ÄzóråÑßÙN³ºŽyY–C`Ûk-÷W%T9#t/rqÜZ¾l¤?[Â?¾ÿ[¬ç\OüÊÍÿÒ}Y›öŠxÛ”µ%ÅïuvU ¶Öuìš“¨ÆävE]p¥„i”©“IõœM…£ÄœUf,I•Ea*•ªE$Ç™RÄ9õn '›!S‹R¡~«ÊxÊÈ…F‘r!"Ÿ³9ÓÊâc©c…„Ì,¦³ˆÄ-§P–! sàÂóÔ³Ã,f>-:±ê¼V!TE3õº:%›Š3F«Ï…/ ëÆðÕª–•ÊñqÒè&„”#ÍÉœÁrdCö3åÉš…mö%8ŽÁ·ZÝ ¹wdýD mV.C2Ô´Jö›ú%¥¦$1ÃÂ'!° ¨š³zL"ã³JY¸,†þ±?Ü£ÿ<ø_näi]ýí?ÚšFס°aÆ»^Å¢7»MíV›\'> F®Îdµj”fŠEƒ9†Ù¿š¿áj?ÍÒSWB¯»ÃÊïeõèÒõ±Z>‹ç¬UùEðt8¾'cãls1¬´«eå 87*0׿³.l—Ü/8=®M¥«Š$OŒ /ëÐ2¡ï;}VuUZÔî.(6ïæ›ªTø‹v£EÅ´1³á—Ïly¦ƒ5“jN/ú)œfZ ý±Ú¹ª™®j)•R©²ÌYâ.÷ä6ĺ…2SSe¢"RÌ1“Šu– ž˜ŠX1-¸L­Á†ÕuÒŠ%žSʼ0¨d^–âHÆú´x×;zŸ–ié/ö§û›\­KªgÐ/Žþ^,k¥VEXî¡ØÎKX§^ln«3W-/é¤n­`ŽG;¸ÏÝvÚùý¦ÆG›3@¿…4@ÄíhT * Æ¡-Fޏ:ž?#ò¨+ Â×g5Ö ÊãîñÓî_L·ãýCéß|_n꫇2vùÖd”üÃ>øãk¬ÃÀ‡·~Έp÷aõ3(H¨ÿ °á÷‘? ®4®ôò09 æOõþ¾µ¾=ÛçV~ì>üÔ½Ù²%Gv¸|vá wÌ (,V‰"ÙMU³_d2Ó/ô÷KÍÔÖ2¶ºXT±Èȼy3ógŠ>nï‡Ì2DU‘))žî±ëáƒÙÞá{­½–ü‡õh€Ç\ï)ïHÂ/ß<á óN×äÍ1¿—*zp®…æ5mßO|ãÛf{FÎ/‚z©Ôoêõ×þxRýÉ].Ò[î™ÄöJ}µÚlŸ4àg:õ»^}=˜GÍêçY·-_ïÖj#U'w<Ó¸{ÜôËî'5=aeoR\É#) ÎòÆÓr}ßâF¤M¨§(;*,Æ`l5ÆZ&EàafT¸g%N\ó¤ˆ)}v_³'¢Ã‰´Žj¥¥ ^7uœ²°9/Šn/ÀÑ™%%æ Q| B-Œ±LªV]KΕˆT£¬˜—‚ÕS:úý8f%rVò"Ñ(%%‡¨Í²v­¥E—5S>˜Mª…Öž3)¥+Ú2©JBLì0¾ÜLR¨»f:ÎFoC –‰£©Vµj#ý”eš‹-œ±ë”óõx©ÅªëѹÜtEÙ¥Ñ]=Ê)쟱ÛÈ…Ž«˜”HÂHkE’ŽÆ6„]‰åÌãl[ŽÄnú§½ýKa¹˜c <ÓPDðjZÂRÕ³^u²9íRž—­‹ÕÕ2Qxiƒ“÷e¼»?ü§(‡%§Sú‹Þ¬OÍÀ}N¢îbƒQì\:“VŸŸ•æ¦ynæ¯×lÝ£¦³½.h Ä&6ÿç°G Êõ5ÚÝ2ß­¤Ö‹"~jJ*œQ™B1!Z^YáÌ«S®‹ní˜jyJŸ§sI­8\øj3{¢ÜÊÉÚsåYâ´g*t¬_5½[uRbJd➣LÔRHļ(!Í(EUžW~Î瑃É81^yØH«ÚÇWÆ­¸D5ž++$d…,\øè)¦qw˜Â¶L3Ùáv~åç×$ºx8ÝËcXŒ+ÑÛ²àÚ /K ùfW¦ m\65Ð0ìw²î3ÃtƒÁë›®_Óg§4ÝïÍ{f¬"N?‹Œ†!~ ;#îߟ‹ÃqÄfÀuªbÆÖÉÔü)Ü3ÈWVV¯7‡øS #¼Døúþ>>2Hé=°a÷ãa̼+:±oÇkìâwr é÷ÒÀ¼|iã¼hþG­)Åo!¸à ØkÜoßo`þGæ-Tó·Ï÷¸K÷þôøˆ„ádþ¬ Æà~xç®wxÇ]åá£òèoÁç "ÊDünNœ=º*Ÿ¯Æ¥y1iJ»ˆÛÆâI³g‘ögávü\‰ßœÀe»Ù`¸Š÷¸Ê¢y€þòn²çg0j+†ž 3óeo.ÏŒ‹ ֻ̲mZSÖœ-“Ó®ofÖ4_ÔÃ^à%&EÍù¿m]£… a(ikåµ–ÄeQÎ —X™Éç’ƒ#±ä¦%Ó‘ÊBÝ&o ;)éœKÁe"òŒ!“ L‰4«y`A:i™6àrÕJ%óUSu²4¥,‰”sLš«à¼‘ªr¢²…QNV¢f«Kßê¶S£®%Γ€P…éµRU¤LÉ㜎Çûa¸sM>Ïi7Ç}ãìæuéZÙšFUTNP£ñ¬‘‚*ØŸoÑÙ^¯„kç¦Á˜Žóôp~9ßßö›Z/|þB'N’öè$^ç•?¤=¿åù^[·R;·«¦ÿäòÿPì³é]N‡˜”9·œC©…j‘O´oL–¬[á²èÜþ¾m©Šš+×heÛ¥¾ûÜ_¿¼=ÝeD/“±k†Ö<莂§8†–Œ¶º6pŽG°ŽeùMÚí(*f\…É2ÎTÞæî›M\ß‹¯w»«¤oÚæ‘«SñYEKå0§#'"±„oú¤ë5å=ÓlEŠÙKi˜§U°àœ%êEŸu_ŒŠbˆâeHW»7Ü΋ÿZš“T² ClejbEëÉÉ}Ôâ1§½Gš‹¹– ¡I¤D LE®¼[µ:²¬k5ÎômÓY)jõ~JsåDQ ÐZÙZ$ã>9úý̳žü8Ôp7E?¹©ø&mŸq=/åKN!Ú2ÓѰýæ¸:ÇX;ʺ¾-7e8:zv²wñWê¹¹ÀŸŠ‹EÛG½˜ñ5TÂt c&‹W¼Ï¾EçÐþ-Rèοx‰í=ÔÒ£öй IDAT3 ù{!A¿Å˧XÁ·o>øßxC Ä|þàXöFjé•FûF9TO0\axÓ¶üŸóÃOðá‡] ÿóaÑï—x¶ÿäYŸ¸Áöé÷$»ÇQqñ®`wó&÷sõÿnã° Èß³šþžït?H6¯ä¿kÎ.òMlv«¢ÍÎû¼½þü'g«³áâþF™Ì±hÝá//pºí?ß•¿:NØ"¶×ø“~½Ú_Hޑߺùæ~æžjµÔ<_°ò_tùwM³—Í‚·+¶W&­Å…æbb1Ï(ª±lÕ@´Sy͈Åpˆ%ÓÊ]sJ‘ÃT&¦j&d“gŠ"m!–[WµPj“Œ¤öš«’À%”äN$%‘$r¼ -¤•³˜Y¦ŒÊ…¨±Ì#M:í5>ëÛœ¤ûRår4±VÞ–ÓSòSŒ[FI„ j¡ÜÖ DfÊž¤ÌÊ?¦)…¼Ø8Ü÷Ï'~»¶?ßùýv¢œÏ\s•³˜ÍŠ¢å9ËRâ¼aǼÜÕ[똱Ìn¡Ñ5¶>>ñ#ßL‡žâ¬XE©õQ…4œç“e?g–vÛ‘¦¾ Y­Ò²•¿h£1XDÏä¼XɆIÓ[a3kÛ©ërï²[Øu¿rª4±ur"Hˆ\k’B!)£9:Ç[§Æñ'æÚ©?¯dí>ú[B2b}–÷”+¥,:ß­üj#ýuÀ“RK§¸‘gCóg/ÜöFß?ffÞ^…«G›?–Ì>rfæ÷é>M¯+¯ª´'\ôɨh7¯}B°™ôØ·‹H«…l\$"_ëœÅÁ“†˜¤8×Ã(n7,Å)Q3/´Òê6F›æœ„šòjdŠÅ#é¯Éú (PÑ©D„A¬å$e&]xHL#Å«E« £¤¬½NFz–Kðcò"A”ÉpyÁjÉûJûT'caSÎq.fc/¦Ø00Ã/{µå4výâèçñÍÝTc—7ËñQ)ê¨UUÝüʵñDl¥°1ø×ÝÅ—'x¨Ôô<³¬«ü7g{Æuê'oαwà ' 2C»F=À¼¿Ç) ?Áåg»}Ú`_C¾H¶`d #±¢ÆôÎÖ>ü!X¬þã—àô½Ö`z¿lþ£Ÿà /+ýO­Ãú·å»=ýrч‡ƒ±|c¼úöÄ{À¯ h¾}â²€€ àîͨøV7ñ#´·]‹ry’]Ù ×YÀ“‰ÞÏ!o>ßL.µw§ãþkÔøs> -®ⳓß|vpìNnT Øå§nnOQNþý±=Í"­õI-2W­™:Yˆ¦˜ƒÜM–Ϻ¿ ¶'6òq`i?Ûý.Ü—1õ‡Ÿ“j›b¹ÑŽgQ”.ì<—pUsÅ9‡ÔÌ£ã$Ñ2œj¥* %Y%ª*¹Ô$˜vA…3 °LZ‹Ê‘_&ð’J¡š¦é˜B©«àR£ŠLIÕUV°ÆTÉ­´'†efnsÌ>Ò‘t…ám£lõ ËÔÊ£RT`õÛµ]»…S¬¨r ã”Šà¢é”RÈ!sïužy§ñªÆ±³ôäq9ú˜§]»GóHqÓ*åº ×i´ôJÈx*`ꈒÊΰ¦sÝ'K&k·¯|mÖˆÌ)°…7"yùsŠ—rŒàÄÚÂ3ÙiZr·2íyßX&fn:Ô0Ÿf.‰i! ÁÏ’Í¨Š±˜ê!}1ÖöÖ k e)€‚9äê ±œ+ª˜áÙ<æ‹1GÉBïÂôjò£¯%WF5ý˜õ=É ,·fÙŠFYÔðûX|FÇŸ·”Qì“QãÜ ØÏW‡‹×…]ÃýØ9ô9N#ì 2Ð-ºWpw8FŒöo"*P´œžh\Mˆ¦ßlÄÊCV¸mÄÝ÷ZƒŸþAŸ)žR}W•LJ€ ûñÁßðO;ëŸ n?Žï@þ7Ç€ÇéG$EÞ<üf ôþµì¡ÖXN¸‹opÄqÄ4oÓ…žØz%†8þ€Ôtì oºOV~Úc`_M=Ÿê2¤zwh®E;ÕæÁêÕ‰þ¦áƒ¬ÿÞae\ùó‚‡éá™æAßfþÔæY¯š‡m3£{$ù¤ù?áê_ª5$o™h­ê›N xŸ¶C£ü&šߢþeQ?ñL—ÂÕž)“Â"ðŒÑADÁÔC=W¾ã–•SÁX¸Íº*+Œ[+ÝÝU­µ%#aÈè,k)Dœ“RJÀ¨Œ"«° ”  —KÁ"ÕT#êˆUDZÞ¥kfÂ9­šTPçQøÀ*‘‹“¯\Y qZXN@­Y®“jK%)m;÷pqÚ3Yf¤Óò³YvLt¡–H^qÒüaÛVÝ”(ÃaJ>Œ9äñ~ÚmöC&µ°ÖžÕ¥±§—5-›èš Q¥`¶«âJS&~hE››Å`R ßP]Jk:Zz3Áæi("+f…\=ʺ)ô4¬r «m !²“wƒxè›ÆûÄÓÄwô`“z$N¦y…½@©Ø:l¦›}¾6nVꆺÆí@À£W¸ì>A¹Ä‘ãLcMG…aw擺UÓóã¾´Xž@/1 Šo7 †¸ÂU‡¸öêýoù|41¼áÉÄé;Þ¤ÐGÙ¾ý»üÁç!0ÿN0㟕ê'‰úƒ8þÑÿ´³þPÎk®Z|?.o?¸ym÷`Lqêh‰ß_q ±+`bÖW"öo÷#Ó;WàJ´ Ÿ¿}Ü'À)P žx\1ÄçÈݬûÝçLü?ךðG î~{Ú6æs±X^“„ ùŽL™“kvg¢é˃oHÿMÄ0½ê§b ›qF@å¾ÕêÞ…sG]%~Âé¡õ/Ó6\1·-_šÒòà±”ke:T9“ñó…Ú9N·ž•e›íeÎÛ3jT™ —ʵÚu®ë”$!'#H %xLTÆ%ª€Ô¬VP4©ÆÊ¸b½ £ø1ÓŒ ˆT¡’ŸC݇=UÃ…×TXœÅp çc}tHNqYQ¹HžµÄûDª"W>C¢“EjŠÕj¾èjÛ5è³[ÇF„ý!'_xDÆS”ŠÈ &«´/T“¡Ê'AP¤X Š%) 6O¦)9ðèŽGÖÖ@N1§ŒãD^g"–³;€)’•ˆ¤ÍÂ8‰næ÷ûiïE$rñÙþ¤÷©ÍR:&…¯²½vºä8f¡g?ÝC¼>Þçt7VÑ«>õ¶Ž‘ýo±8¯&ö6­€þÄ}BÚ42èñ¤*ÍËxêD˸;#>å°:°ÓUáËNdcš¥Ü—&½ë/j ë¬(¹Æž&I –§Lìv¦,Cr‚µ\YašKéôÂ[ ò¬foSÛ-NCf…Òʈ†LÓ™ºôQ¹‰»v ™Æ¨Îææa.ÄÒªˆ¬n¸lasR*¬pbYrTƲ1cŸRRyœëXCfF³¹J–HS¯‹™‡LûÝ‹$%¼ãUN÷8ÞÌòùMÓ+É¥RC q¼E}Ša¶g#˜íobžêg=ϰP€À°¸˜º0güZ2ý|að°ÇÉÏPÎ,¡U°ÀØâjÂMŠË¾ìÅ^T¬î Ø×XÄïi9Ü!îÞðã /QÞ«Q—÷…>b÷#Ÿ—8¿ Šþ'ç†ú£¦Ô?ÜÿU9¯oÊ5Qü¾^á*#¾A΀#à¿ó Õ@lÚ€9â]ß_±D”·.=ßÈÞ²øVß»C•OÔýU‡˜€Öà$GÄ-®€7L§p‡ÍɰŒ0SûɆ®ímûå¹=óiLÇ6a³§mà?ŸB÷óÂMg]­ëUeó®ÝRA€éàvx#^Œ‰2~¥ܹr–B‹èe…(¹¤*sÙ*ß³Ê8ÿL r,HzrPbŽò\èË9Z±—êöD¦¿™eHã™q ߘƎZˆ« ë ´Ì)ÆçLhd.˜€ª¥x(…¡T)*P¨ e”Äy&–8÷ZH§r@ ¨!ª9”2»q´s©V™yÊÁ„”D6¨™óH6ë®qÌ« +(¨ œ”HFÎZ&3G«µPNqc YŠM„\Ç"«oØ í˜OiâÍàYûíñN6É>Îâ±I EUš«àž XœÓ–vÇÄD!§ª27)³Y̵òI„ÐF­ç}4¾ú¯áwÖSÛ;Ö*nH¥ªË^d%ž%8rMµäÎ+Ýž”8(O"eíaîE±‚-´mÝ¢åÈ”| Ywëu»Xk%¡øäÓ°Ýo®î¯_½|6ß>ÃÿqWòäŽËäËáp?Ë¥Ö¦9ÕDz˜c™h+̫頊_È¥‚ã‹î³…Cµ‹#—1Ÿ…š}ÕS-UûÊ“hØÁü'ï–ÌVã"FQ,뫳ý4¹Ó¾gëú µtk뜉…¥¹“qâ ËŠÕ9ùc¾keaËâ 7F°¦–ZC9Hµ5Š£˜9e¡äx2|Ö •:Išr8ò­–y¬Z”eÐJ´'²5+]:2~HÌÆzÚç,¥ Eµjb”óy"?g%³LÍØ$òdÊ–âT%Ê 5óIß-̼b½NZø’z#iž6sú¢àˆx2äóìŒ\SŸ®ƒ?hèr¹é¯_æy¬ ¾Ûìq¹»p‡íùX4uÎ¥éÕ-,ôYE¿=ì2nü¹yê1 €Ë‹¥ /yÈI ÞaŽ•iÈ'8¡ËûÛ/,J} 4%âö] èLÍÔú;¡ÖáÇþûYnßÿmsÃ^üaÿÛ…øcû,úç±f3ÀßÉh3D Ìfh5b|YöƼx£´Í0âO'€þ*}l•  Óµm¶~BßÝŽW1áQ©5,2!ð»O³p¾\N¹VË_Ök£•èL©ˆÓl½Sƒì4Ÿ2sÒžº}ÇjÜÄçuËz¶–õL>¿tmÛp.xŒ!•@âeÈlâZkÒ]à"°̈šÙj±xò)Ñ–UXñËÖE^{ý©Îkæõ†E彦Hㄾ2¥g…ÁgÌ´L›Ê‰PÀª¬ ªr"•«H$*ŠbEÓ$s AR "âUÙ**··Ñí'-K¬UéCë ¯L3§¥4¼x=h”Ž+®$PjQ:ϼx™£PP\3™¸ò‘§,fÃ]©;Ô¹°L‘P‰§RU¸õ,z¦…/,ÄŽ„qö¬y$Õ¹R²b“«˜[Vlª‰ó “w¨¡ª©¶+KËŽ5¼ ÒP¥D!½4JhÞD­çÕiÓÎRÛMÇÈ„&Á±îhYT\·ymû^u–4«óÄ΋tÆ &jˆ!ìò8ßmnžþöùÕ?¼¸þíÕsuÿKײlõ..K9[ø)Ü…}×cq&új’Y¸°c#W| ‚—6Û&{“›PŸ#O2†Jwù›BL%¾ŒÚç‹©w^ObI‹×ÙËÝЖ"p¯ø0cîÏ7e¶_ körQ«é£ðèS>­ô ÉÆ®gG¦—IxS퉷ž|²›ûNòØÑô¹ø,Eù()æÙ^×—¼ÙÀVXu^©½¬SQ qEžù)VÅkCÅ b»'Öå¦ô†_ri~¸Û´~ZZ§u{ÔÐýÊJÞYã¤PD©”#+¬ªZ‹ \£œ!t‘•I)ÀIY©–(0V˜âŠ 3·rÊJÙÄxR†Q-ytT8ó•ñ¬·ÚÛ©ªjü,¸)\QÔ5d– ˜€¥/5E¶›`˜œ¬f‹^ts)‡lŽé,Ì3ó¼ªW/f©=õwaÑ­vÂõZJQ f5i×¶«£œpà!š†IrÔ÷±Yœ/ÑñvŒ Å×;&eà²F0ªF:-ÖÜš(Çžà±ô]^¢:´lÑûµ¬2w<ëT‚‡ÂX˜SòÁßl¯óÍ—7_ýöîÕ¦¼z: rþTÄôÓ ˜Äçýt¦†i±(ŽÝG­&ÍçbrKX ±uJžE”¡™ÐïJkX𕼋wwåŠdýÔ~Æç5Ö,’«åþ6\Û­Ÿ*Z<¤~¹°‹5™³Ê;.š*]Ë#v9½e¯ùQKíÒ22Æ„â%pÂG´0ÒtZôL·‰!Õ#ãê)RLãŒA†Yó1ê~ £,më6Ѻ£¬[͵4 Ò¥Ãj©{§™ÉNâ¬rc”rR Vcá1"T6û’Bµ%»—åYôËêuíLr͹.ƒÍÕÆ¨«¸ÏqJ›/)ŠXG.‡«ý¢¥Nˆ¤°•‰X1N/}Ì9Ý´\ó ]äaèblŽÇ9ùݶJ‰ N.LÝ7qšGóÕ¥l.ÚØµÛŽ[³Œ³ÇëÍ/Pìá‘?®Dב|J Æ#ž±ãô[ô#x@ºÆ=ðh¶HÛ@úåbÒp]Äë÷ (bW!:ôìBßÄq»Ëï*Aåýp¿„à(o´[?´~ûþ±}g ½ýNäg…bÝ?ªÑý]¹è‡B}õwþüï«¿¤€ÇÀ‹¥‡'†ï „(À¨7%{Ĉ›oq¡ïU±4úí{øë¯ò;_½xôn¶ï—6_bÓ´X­°ÌØ ¼‘Á7X>\=nT9\¯P8P;”ý ñ÷1‚ÙŸµ¼a€eôdy:‘¤`å•¿½}ø…êÕååêÂÓ‰ÛÒJZÚ)OµN÷ÑBv'A™—Œû.Q>Dƒ¶°õ¾9ÄóAԵǭZy{RÅA¥»‰h]Ùm‡s úÄdŸ¥!SHæIá)*ÙûJ¨B)YÀRa¯LT+ÈYÆPÄ-ƒ+Xa‰R­¹’`9fdoŽ¡ãâÀVHܰV¨9óL"qÅn{×´JYÁJ'ŹlL_5ÅÜ¡VQAYS!9“Ð3PN((ùTÄ"•K‰^Èá0:6”>T~Ùê—F¸I \:(²‰§ª$Æ…æ¦{Ò8£z×ÚjÛÚCê1òY0r‚Ù:Q OsHKSË9ºžz›M J½RèÑ-Bϳfô‚ /5€û#†)U]ÚægþøÛ|3Îc»ÿfù¬¤3 §“ ‘©^F]35–ËÝKÙ/ö¥Ï·«¤â¡-BŠ…"3Ée…©³ám ü:/ø²‘ĸ<Öyòlvp¨j½ãbÎôz—HêåR=h]¿Rzv=Ž:P1¦z,/…k(äÍMªµÌ.lä\+–96‘©!”eËÏú^V‰$#¸)"Mf¸WÍ£dÝÁp Ss¨&Þ™’༫ ŸŠ\TÆ2D*Ì'è Z&Œ6BJ!* Ò$J*Áç=¼•™K%ë“&fb,M±jéSIYTïû¹ºñÈçqWýÿOïëãž W2­ÓãЖ£¼ŸšÃHꕌ™€ò,E—áoöRN‡{ç—{À.Sb­áò¬øËM~x÷òùpÝf4BgÝä^Ä´}t"žÜÉǯ®åk¾7<¹ ¯ow¡âà¯1àßhhÿ­ý-Nw¸üI·½2)†$Tÿõ³“‚“¸eÀ.è´:¯BQÓv ?Œ“O?çòÏ×èf+%Õÿ¦XôrÖѳқÄðíãÐàˆµwø Üsàå»õ…Fž¯Û÷¨ï±žÞ&•%â›î…ˆ¸Îßkqû~çIâØ)Ö¯¡÷`~i¦<Õß„‹_ýŸÍk~rvâ%/cmOå„è„t/7Ñ Ÿ6ÉÏ)T_:¾Ï§Š÷¤”ȪïäÙ‚=J`ž‡ÇR¦™~"1 ùuüjçŸ-EjwÆØ2ÑóO8k(øÝÝôlä¬ôÎEÆmZÇ…ŒæL­4QÙ›nQQ“I5ιŒ9Çirznõº-æ¥ÛÝ$¶‡é@ùYýn†¿1ôJ&™„󗞈¦äþ¹`!ÁnÝ&Éÿ|#?}†.˜ ÝÌ‚½ôwϱ9 ô´nW­ø “璘þõÉ~eŽ«~[oðw\DSÑwOd¹Òt½Tû¨êaØæù7OÕx–"7[,ÿØk ÁŠ¡ýí Íп/Dñ›!æá€e IDATJ!®€Ý¹’=õ®ÃG88ßky›>"’ñƒ8ù]œ×@4o²þ{`Ñðñ³>,íÿØ´å‡Xô»Ó·Rz€^ãÑJÄóß_¤Ú¿OPÀ^#>™Þ[ezà ŽÀýÛÕ¬ûƒj×ÜÓÇX¶ãFı~ÛbñÍ-ÿÊk6Ìl7Hü}Æ'€KDº@w1­é٥ϊ·&žÜˆÎ¤iŸÂFJ'“@l¿šÙçM*§qcc¦ÞÛù¯Öò?´ôsÕ]²f0rÐZ3üšãW’j 'A­JnCêxp©Jw¤ó‡Hyò:™Ö4m«Z‡N”e¦"ì°lÑ.„êH™ƒ@‘F*Üg7F"7¢VN%W¦’⑈ .„LJ@#Èœ±Â«`Ôñ$ P(ï«÷‚|ã%‹â–“3Éb“•Ó’3 Í- 1éˆë(Ó®x_1³žWƒÒ!Æäj-R\Gö"²ãx™¡¾9¸æ9d8VFùxP±¨ã!±yÌ7Y‹žC•‘4‹1ÈœuRdBâiŽe?æZ§L9W£emôÚÁµª˜Qˆ*dx’œñÚˆ*Df² Ùžs¹„HùpLú0ÖÛÃ|u˜ŽÆSdûU}½fDoìOÔ¹î#ôÞ©8”°UÅç‘2P‰vR®üZåƒößX<}øæ0vU¹‰6÷ÇËWg/Ë,6˜Ìá p¨!(ôgÍÌO¶®×mÜžGMÄáx„Ãô/¡^¢Ù§é›ˆdÐÿp‹æ ÓÕógÔ‡ìÒúa8GlŸ€¾_âþ‘ð»ÜeÖxr?}|HÅg+ÛÓ|"ÛtGf$OÝ!òá%ß¿ðëiÈ©>Ù»ñdª“oÒsL2ž­Fyn„0±¤bŒ}¢?¦¶&çÆFƘîAþv¸?¥ILœ$Dm³WéTãç|<'#­Ó8OûqxÆÄZJKyz¿aƒ¨[¢ÿùxöW‚>.õoZbƒR‰ÏY vÊœL¬êÅB¨MLç,›I2ÚÁj†Æ]) Å“i¬Û’}C’Š^°Ì>Óâqòeõ¾˜^'¾¡Ó=ÌìÏOî§–­“ù¨Ó–âdبC/ý¦ÝDbH{÷ÎúŸlEð¬àQSëˆóIÇ‹"°K«—u½·Ì4aƒ¨^ö¿â»ïn8€ËZí§¿¶ &Ôž³´¬Dû´jα“ŽRÁÝᾎù-êŒ&Àáµ.÷ XŸ_Ãàö—ö‰áéŸ9¿ÉÜl¿ç¬‡zJ?üöE™èå|ÐáOÕg¤×} Œ+„ëŒ=äËWà•%Süæ3cX.PNß¡o(`×ÓMBˆÖˉƒþJÍ4.Ùg› ‡_:#ùçefùåó=>Ô/¯äuM5±á6?éâÈ_î¹þÍpØ ŠµÕ  v Èkº°š¢u¥’Öe9N§(yô,Ïœª,D¹úi ‰¢5SVó²»QäY {^ÑtçFß²x ï]>ó®Ú"»‚BP•Kb„X'¶dh‘+É„EÈ*,U-‘ª’\bÌ>¥3IQë¤å¤–! ÀÀyôžÂ¡pFh“(a”ÎÆ5zçd›•*d™ɲ¦HºŒ¬AeAJ«ò¤dg¾Æâ&9jHV­­\ò–ÇRª‹µ(†u«”²ªe» ~IéFiuÈ4Rú‰ÌÕ6VÒššî„ÃaŒVL°5‰»Oã+ÓÚZ#MÌ9Ç}¬ÙÌB®SHÉ»cÇdKж!ªÑAsj®y—"Ò)•°1Z_Ú¶L™åüs½t²Óºx;çŠÜÆ/]qr%»W kÜ^N¤™íµ`gœuå³¢å í~óáÁI O)ß.õÆúËÓÌœ²Ë©YL»å|‹º¼¸GC=RŸ³Çž>lj~™œÏkHZÓ ÖÕ0˜êGå_VñÙ§‰þï ý_¼ìó²R‘B\F&Jå¬>D÷ÜÇLNšîW_Ô¼?(ºó†õŠ·Mhýô“Xihë{ÏΫ¸.yCVsšYÝùrŠêéA¨ªüÄv‘RZRyŒ¡OÃ6Ô@™"“ÂHH-%–âˆÓ¼(_Ì¡úÈÊœ§˜ ´]6¹˜qÊ2§ÃtEÃzn:M/2«¬0ÿØnbï/òøßµÎoÉü¢ï-Ѝ‹ùƒkØ, 7dù|í®ÒÚŒ8Eþ)ô-Ž5Ó¨îzŸo;Âãàq€ø_AwSÑ÷b£Üóx‹c\,n š Îa€pŽðñë^±ø56ÀÑ#îá€ækº|=Àò]q?|;N†Cbx# þ?æ¾ýÿ2’ ôˆõ{‰°ù¾®õ7¶ß¾ùô‡æ\-ÀkF "ÜÔwrõ/ügP È-¨|Ó{žÞL³`ìß<àýWØOn`n§FÆ‚!pû L©§ ûR+'ñXâ)’rl¹%ÒŠ‰³fjÓù´¦‡±Ã>AJ£3ÝÝWæ£ë¦õ±„5;®z–7¶N—iNý/RÆ mýdßÎýn5™‡å_hJH.‘Ð/”U ÆáH†I*Xˆ,j‘\zòȇ16†jª|gŠb–òÜKNXÇÅ5ã×”¨Dc ŸÆ2úÚ0òˆÄ.O¼¨&ä˜)%lff)4#šºÌbJzFHu,ÜR5m¸V¼Q¢‘„PJó+šaÉP¯ÌIr¥Œ3ÈJ’!æT-DpÎD’H>Rõ%Iâi*$ë’èÌ&ʦRc…FI9$Z•à’4 „‘jk.+&T44M|f¨’i޹4*µâĜȂ¥œ¯#׺,#a\T&'–S5øØ–SAŒe.”yÛdad#©¾N)>L4¸±qAiýòÄþHǹÎþÓ~\\ìËÂàè°27¦´t2n.±:7$½ÈB,ÛÂÑ‚]šbï˾å/yÔOb`#¨§Ü°íBuËÆ¡IhDdK>¹¥çÇ+qv°l³RšV¸ ¶1âÐ¥SiçI×.M5>ŒþW7ú¯Å°úŽ~Ò^Rˆdë…Z+¹N¶{9Ó—ÓÃÝo?P[é¾TÇ9–YäfÑÊåRÿeæg&Lz>aø-ÄÇ ò¹›Gê³î3ÏæfáŽzÞ–åƒc׎}iÂu—ËìȦéb&m¾@f‚žWCVLÇâIÝ©XÎÕrY´øLáô˜–y)Žgä¸Èw¡VEþ7 •µÂÊÔ +C£b|Y‹ñL9V„Öb£%˲fNÁ!7fØÙ´Õâ%âqlr% %Ï%[QÈ©Ü=ù‚Ó38xÁàF±×­¢*·”**“™Sv®OfO’¦“æVK!h)©–ÊC(*ERJ ¹§y¦>hBšJ0^ˆ.Ùå(2I K,Œ•щ&Y ’®Î°H%N. &žˆd„R[JƒZÌ*Î4%6.(¡d6p» ðˆæ*¬,–gÖ´–©3U:2°JçXX·•*aGŒ›#cÉÁeô™ hQËQ¹\ŽR¸1NãOJÏ™ ÆL–N–7©ÄN{^xvò¸Qc$¡SB„[ YÞOê¾µKM%Mbð<†4âL!ʼn뉨]Ña?Ø>ˆ•©-e‹¿gäz]º§bÒ8Iöi«Õ_X^Ô—©LS˜fÄ{ć4/Òæš|ló æóõéÈØïÌæ?TWVÇFâ§þ’žøEe õØÌeò‡»ÛûZ>þä2$Jâß­Âs.>#úñ¦)¦Û&ì–i?ïç¿Ý:ð(øÝ šŒ- ->!AùÙ÷ê'£©I‘ÊÂ~|Jžƒ‹·ºPM 1(1”ÐÁE?‡ ”ƒ_dÒM³rn®•b,d ž”@­¸‰Iqª”}¦‡“ö'ÚäÂ4÷ulÁ u©ÆŽ¤L£/Ç„¦t&›rSƒœõº2’OÁ¢øQtįïDoíG6„"ó{&M§~=лâÈ?Z…§®,OìS—ž“ žqÔAã`ÓÞ`_! B-Hv„²hÿjƒÙ!O˜*ªðpÎã3'+0ž‘†?žÎ€ ìÞá”ÿ•iã­Äðôá5!îÏS ?búá…Ð(õ]Ð×ÇŒï¡|×Å¿‡s×ç0(Ï‚ ,‡úæ:vö”eŒ¿_Î56§³+ê%oÑÌÀs0*Û¿¼6%Þç÷·õ´“á‘ìµ}Ö–“ü±ÍˆÞjáëéBì)»âÖºF¨’K{‰ì *™´Tgã#9d‰2DRå+©~ô¹žæ¹‹»˜>'µ¸üQ0ÍØP® a(®¦ä%D‰uæéöq–<„ û^ÇÈ…5e T‰|.ñ8¸Ãî ‡YH"„mØB3£(A.!:Ÿ¦¬Ê‘¹Æ”GøzB¥fT°,b¢•1 Æ %‰¹HEä)×Ì ƒŽÌ"æFž+Å:ÒVBhšSÜfià¼æšÛ@mà:‘ñ"x•Tj‹Å%⊵ôÁ^*BJI§ÐbÖ : ªª,!¯r ǽ”NÕK©Z¢œX%c8°édï·˜ÔgLa_Fc+aðIc÷”ßQöx)?ؤŸíçy Nñ6±…jâ¦;­Òõ2\œs‘ÆSùŸ¿Lóy³²ÿì o§±\RÙÉŸöBòã¿ê¦¸ð7¬¦T÷GO6;¾S™ˆI»ÿkõrã“Ø_µl-¢úì2µŸÊ 3³´ {r§3Á;Èü\„ýó 72ޏ-Zzù ¢Ç©G¿Î0FùÛûpž‘%cJ&ð"À~„æ/H3Òï ï‘ndþòUèxÀ—lFþôû•  ûÎíïWî=ë?x‘?.YýgZ7ü`ˆébo%àWĆ5ðák‘5pÿí³_}hÁkÐðÍßCÆŽ¨þ?'!oÇpœáü+©“-&3#'ôì€ÅÓÖ¢m¡àùÝuBÂò9.ãÓô^‘Ý Ï¿ìù±vy _ª÷®ñ»æ³ÝBmï—W* Øy!Wô¢±ûfCšjÜ ²˜ÙòŽò¡èÇÙ.c­…I½ÅÀâl¼㞈§4ÙMÍ4„T¦0»*ÛêÍ”ºÝDÚP‚<Ñl¢í\åG_šðþfz²ÆÕeÃV aAº¹Œ9Nó8αÎÒÜ–Þ$RÃ"M®$êCEÕ ±dÄ8…q,^@dU ¹ú¹PÂ`D™©¬¥ …RÁS¼ËEù‚œ%âŠ$ŽB™Î\ÅŒì{{¢&Yrñœ0Ï8ÑTu$UÅtÛXi̺ëžF™!¤æûä_îǾô9Q!¹5TLû zŒ»i8ÆlªézN+S\´VJ­ã5‡\C™X#!U ÂI7S͸⡔Pásªcr·cÿÑBOº/Â,Kcœ].Wºi©d¼R†ÄSDÊŽ¥Ù>McuÔ3 bqžØÙ‰‹Ø˜a±:oðhÊ©„£ã«—AùÏ5†ÇÃõ¨F²Üâxb)Î*í0ñÝ"<æ£dþÜ{ú[™téÿlÝnèrMÎWtÃõ¢i=#wÞtd‘e޳[šÃõÓ³J’£#.{¾K5$ÌÓ$[Žö%©Í•ÛdÈK)îdšÊágt?›»C5+ÑjVj6r®‹Ë=“¼²¤¦¨úqa¸ä‰0 IBKå iš} ¹ät&d ˆ3q,ÑI27ÇÀ*犱@iEÎÎMãÔ‡l•SªÂž&®¹àTZi¤)˜‰Ä Õ»˜ÝhCI»Ê Øš3I§9³Z"¯\)I ¥.‘âLÕ`ºtWjuµá—ì  €.\"ßõ»}'ãÉY{±Y_#öC¿µŸŸ¿<¾`$fSzK¼­Ú+8•"Qˉ"Íqð!³2¡!3-UŠl„-Ö Ò©\¥[°\]â#Ÿw<µ´Ú”xö£à±æZ“ª…1 gN)]ˆÉy¶Ó4qI”U¤[tü¢So~wêõïâ"2‘/Ä” Ëjñèüü t“j¦SpSp®{¤>6L ±.LUêR©s35.ä4L'K³LY+Ñ¡©­œÒbdÓ–¦ñRÉ.s~ÔÅ« hŽ“›nÂqÜàãT{ß/Zfû Üì"=ªmÛ¶© U¦ ÕâL¯h™:•n‰9î>>}¹šg• -a&w»•;wXõËŸÓ^®´a݃3'£•mT×\6òCÖ>]·i?—Ó4²iïÙ—¿ü¢^5 [¶Šu¼"þj˜â@XW÷g¤HwÝKÉäʘÅI*LjÈÉò¾²Ð—ŸûÂxR1¡‘©Ë*Š}ÊG·»×ô\2 i}óˆñ:”þ®Þùº–YÑ©bïžNIŒtÛäÃDºr'Ê|¤›D9 ³õLȈÃDã„ñ‚=›òq…—™—Xì¶iýáê!¹Sû.>š§•iç¼™w†„ì{o<§—†üzÈîb§¸:²U±kƒ§4™ñÂüY2¤™Y_ýHËŠàiƒ–ã $q Ùc¾eäý"79¨J„Q Ü¢/þþ¬8#NžÀAáXÀ°†ï¸'‡oqf)põÿ-÷ûš½i$–O¡nмK¬û¶<Æ›ØøßBnøÇí·5»_Gsþz<éë•õÆ»Wÿ_~=eü­å£_«Ú~#E¼ö…~»2ñu6š^?Ü#°F3a ß(`_ÕevÍür1º&®“Ç®›ï%þÄNâºu„鬄³áÑmSµÍY:ç­=e‡'¢^­îÉé¤û¤è!Åç9ßÕøX ¦h“…uiy?Òû®Cáµ+3äÕ@ ´¤ê˜yÎN˜fî•'½\z!\íe-V®H §ç}y{výaÝèIÅåÄÓÜš Ÿüࣶ‰›ŠhÂH!H­e‰±™©Bi$µ6ÕÉP%¡L2©«Òœi¨–žrob.¼¤B¹11Ô)òìÖ™™BU♆X A$µª\ ­<¥R«õ TwÌvV5 ø«Ðñ r(‹UíÆ©&ß4ñµ¤.ç‹¥>ëÚÙç 2Rzb"¤I¼$„Sõ}õ'5W1åìš>vÌXË ­ÐÆmÚ& ò³œVU›UçTwTºf†¹¦ìæÊ| î¤ÓØOžÍC![¹Kqª>–OΧç6übñH/Ö ¥úZ¼u4J"E¶ y(b[›""[Š¥Nw&Í„à¦ÒîçeñpJí û•ñÔ¸º\”Àû£dg’¬›å={,»óF§q¿›ïv©ÏôÔqÏ:â7¥xa›v|DžxÛOV ÌÒÉc'ç%3 ·ô ÔbÆ"Pgrg[ú´A0ÍMczÈ·slR–œBéC(/¶”" ÚšçŒ+®ºžÙüüQØE9Æ…í•gk¨ç;¾Déñ#¢Z«2ˆ/ù¡„§“+ÛÓòn;¦cÕôÆZ7²GK —e&j„9%ÐâN.©™Š:_äÑ’U¬|çf·5¸2Íü ĘW,Õšgèg ¢gΦEhÈbéÄ‚A¥@YŽ©QLW)k‘´"$…p$R+G ”œ#éʯH™™KlLj‚œV¥#ºdÆbH>&Á $­„ž+TÏâVTN^+ÞãXKÍ1šH$@BMµ†Y%†š _Í0×Ì,Ú ÁHð7=ìŒÝÔ|ò™%7{ŸJI´ªš ò"‰¥à¼µÁ JÞ-Ëî¼””ݼÕ/c²V¨uׯU% fJà§JQα©·'§÷!µ~³ÚÄ$éùCJ÷I¯ìòbu¾n5ãp½ƒ'.úOcéûiBñ\csù0ôºþðEœ?7ÁZćäËÁ_ÎQ?ÙZÀPµæ¼%p-÷“evñŒ½ÜµÓIœJ¸lòeq`™Énø‰°¤y4sI;*<›†Õ£éVù@†¡î޹ֆ5I)/h\¾¶Ò««£T±8#MÓ´/œûó¨ø”Ç‘®¨W„מ‰¸0mM;4¥BÄN^™ÒP_OûVÒŸÒè]ô"˧K²?ÓO®uwn–RˆJeIuöñ>¥ßUÒ Ù5-ôììߎêSLîóÓˆÓx;‹Û¿«’èøürhf›:S%y§üÕ|À=ûlA)tu%¡BJ76ƒžßŽá%Ú€‚Ç’6Éöl=o„èöœÝ/.ʽ{TC ¯‘€T€OÓÛ̵À¿¥ùö•˜‚}5 ù¼Á Ä·#Äøƒ)ÐÛð_Æ|¯F÷dýwÕŽî>DúÏ~àùõÕüè7?v” \/¿ žšß}±»×í…á•ïÙ×Ï@¼®àºÃk6ÌôªIU€#Ô:¼ “«Âà¸Ú“†ß6áÃtvÑ´b¹<˜g)ÅÕ°ü`¼4O¯c1§šã´w±Øªë<æ 0ˆ ×Å‘&Iˆd}™x„‡yÚøm˜àOú¦yøßò´®îdÍJºVW¥$i¬)Ì»ºÌ†¾_¿®ÏrÎ)}ï@#+·:>T¢‚<ÏĤ$º«Tsà -IÌųm- >kP+ ¨%I TS@ƒ"‰0É)¬–”Ã'SduÈÞÑœxÖ<§Q’Ôéi¶lLÔ‘*I­Ú§’¶sáJ„B£à%•¤e²…Ö•Ù”ù\Ýœ†ýtç™gBHÎ%ƒÑHIƒë§c™³?‹iªŸÇþ.£èN±:”ã3¶ý âÝDB™§¹ÚÑ/‰"‰ï¤uŠ’.˜æŽ3.8£f]$‘H]¬ò‰%yÆ.„YdŽœ¼t^zO]r§T žt,JÍójAäbh°™ý_–½œE;À†Dd)äâæÓ<¢ØÃ¾Œ^÷‹ciÉ™§yg¡áÌ<_Ý¿œ²=ß^G,6h[b+>.ÆvK#•µv%&?ò¤òdˆTJ—ÇmÔÈöeÐÛHÿEã‚ä÷ÍãUaγp"s·Þ7¡.³"µ-éR×霈+%µìv4Wâ›ùBSNk¾Oe;O-ˆ*U0I-æ¡T[>eÊ#Ë¡ç2;®hb$#‰Zµ~ª•-Då-«©úêãè.“õLªÍœ6b^“i•)϶TéêK @ˆeôW!¶<ªKñ¥~r ¤½¥i¹9̼ŸžÍ_¼¨·wlÍ×?2l….žýê’úó˜ßÑ/<Ó„üÜ6X­Ýf/Ž yìžFvSÃÁ׃¹ÆrÒ–lÉWE7Eþ8C©ËSDH9ÏUÏøòn+Š@Ý}sS¿Æ0(P¾ÈK€t@¹A^·^u1;@ „·faþ_8þ@ÀÿÓ5ºÿýµ£ Ö˜ŸÖ o†ˆþ¨J’~ô†0=uÖOHÛ€ð• ß ^Ù-€ðßè@d ËŒuX`ßP:¼ pã%À^Qöà`$èaD xŠ戅G¡*ÛÇ®½Ü·²\ÎØƒ-‚üøïc}ë™nBˆÃó0/ çNž|xà•¤ŠÓøâ:G}¸Ðå1agÁ.xãÜOÇßo÷ýLŸà_¯¼ÿÅ~¹ü?‘”¼¬e!ëY›xŒ2!gVæaMúEö%B:äÜÖPS%‰,*ŠÇnf»T5ëy¬…VÒ@³Ù”R‡iŠsbGUÞ³ÒZÍÏm(íRÑ5ŠH­4EÈ’¦ÈjMÅ#zøZû —ª¬Y¸ Z%QkÉɉR{Ï]…MµþdÇ• \¢ˆ²zÑhkÁš9`Ça¸¦g9ÄXH¤zWb˜K“gކéeÙ.ŸÛ¶5œ”„‚œê{ Øñ)gëIu‰öc¥¡y-Út)#çÅŠ—?¯ítÙãòöµíAàK®+Ÿ>_¥óë͇œ_QºàUóé@¦]Ý?óÙåu“S©…Vþw°CŠ—soøcm¾e‘á–È55×S6¬°¥¬ë2.¢¶u]ˆMÄíLmÛÖjÝíÒÖ“_ËqáÉÊ•ÔW”œùà(.êQ’ÝLEÊÒ!'d–ÚÞ› õ#;Æ~_öÛ‹9<#—6ÕÅjâŠoºªX‘¹*ÔGYðB¶»®j]­KE8ÛÄ\‹§ !Ì{È—{󬇨ç7„¼²k­ÛÌy PÍ…Œ×vº¸O»{õëšçKz#ÎåþdQ8Ž5Drƒú3¸ªäNc¶úúD6BX™§Fîöú÷‡}عº>0Ót 'òj•°›ºû{·¨ktû¯!†0¯‚ƒÄ0¿-ÞÅ?¸(šòçÉ À/þ${Kù‡çøë ø¾˜Ò×÷|Ž=›n(ðüMˆ—(7¼ª~X€ËWnno_ðâ=“w+•þ9¿W¬ÞÝ×r±_ýõÃWæ„„€ @r„3à×8\Ÿk¾z4tF<<€ÌÃ"C¼÷[!Qס×䮣–éTD…>Òùd¬E ]ØYñ/ í‘nÚ±ßðqgï.¶Þœ~úˆ)÷A³’'æ"²+™Æ¹ô§0lõŸ@Oá@%äöJü¯^ÿÝÄÿ¶T¦s¡ìVsj¥ÊahXÏ}r¿qµ£…]a:¦“)Ô*ÓŽÌmu䔨sÃyÑÒùâXô ]+4WF, Õ²hF˜'Ädc„-L>"ÅrŒ%Ř2 qœO¥†Ti ´ÊE+H„ Šúš ÆªŠ®Tò©¨r± íYd EYkMcÀiˆ$Í¡L§Ã¸ Þ„ûÑ))u%LóvÈsH*QÂàw4=?¢].V8—B›%ëT€l™›' \’ y¢Ø7›(g!8¸TñòHÑEQk¯—‡Ê†ÓÉû“Ë'U ÷ðÑ•«~¡…@%”Š–ÊVV“ŠÏÇÔ4òчý”q¬Å¢Â€ÚÆt˜™Ù¦*"}ÖGB ­åŠšó“0RDe¨êìš]S–WªKÂ6gš]»Næû§‡í?lN1ý‹”ÿ“©¶²•« ©#wǼ£UUÂSÊFÔ¾0rµ¯m= ydœÞÃî´Öí¨§hfÒ^²ªª$ÙPž}M®Ï”¤%†öÑ<,µ t:ŽÇz±ÿ‘ñﻼbLˆÜ+ZÍRYW[F¢k‡Ìg‘·ìnÈGYoÕ 'ê“ëé8÷ml‰³_Ž­ëõRåÒe†„æ,i“èy5gBB#¯#©2R7gÞ¶’zíÇÿ¹zÑxGÂ}ÙÝø¯¯-_ÓîÅ'9NjLxÞ6[~ìîWt¦U<ÆúùÎ&Ÿ#ÞaŒ¸²ö©C|Ì· %ïÕf·>zUçÚ’Ìç/ÃöØŠ}Qé®igMÉQŠ£ÉÇÉoQ°G–Páu`Xb ·„ à7ðá@/€Q¢ Üþ6Þ}÷¦\ä·ãÕwk` з¥?Õ»Mè?jÉöç•äw’Ñî>coœŽ?ŒúJôü›Ùõþ‡Î ‰¿±Ðo9²¾fMKà)»Øó²o·^õ­;,9 <#A¢| ê±Þc´øÐÉ¡ÒçŸÚÛ/šõ­~‚Aë‘} ‚=<”ñþyÛŸÈJðýj#Œ×¬Úyaµï›þnÞØ;ú9Ù\^ïݲuÌ+ï³OÑßöÅŽh#ûèƒ,l]­ä¡ýàùä EB&#=ÖF~Û²Y…º™sãb=ÍÃ!øÄ'ð4?Íl3£Ód¨<×v`|Ech¨çÚ+á×Z4²mVÓZ^J¯Ì ¡”RT1¦i•6sZ«/iHY† B3£™Âi$¡U°Â¨'¨Äq$3M  – ±h箉¼#D+e˜à)&çr+ƒÊÓ8óv;OàŽ ‚&çðj%¾ºF ¡ËÃ] U‚ÉìW«Ybö«bö¤zÎN”F& E¾2~€|™£!:Gf¹PYË#gCŒ1ô25*¯šWJC˜S™-o¹ÑU#h^M¦¹'_¶I2A}€CêqyòE‹&ž(Q&õ3là²QáÌO8y’Ct6M">Ò¢)å>Òí•|Xa©Ùù0ç-oØÙÏÒj´‡}ùôŽþ×ÙºV{B=ñ‚ñ÷$G4I:¬…vž•žÔ²Kù٬˗YܳÂ893 ÑÐÕ ¢£l¦yÎŽ L6úÀ°à#¹˜ç3¦mS8õåVæG&ñnSÍJC´ö ˜"ý-…Ä™Gg$«Už¬gÚc3¼ìò—Œ\DZ"Y¦®•„«Æµ2 :UrOÕĴͪQZó5“ìsN¾ÐÂP6•P!;ßQ¹ èÔ¸6•¬ÃF“±÷~¤Ò¯… A~:ÎòÄwàÏ1c»]—~/C–õ£§h÷Hç6‰5§®¨SÏϬާÍzûÃÃA®öv_”¾Ö¾$œžƒ}NÂ?!g€“hŸ‚½ÙSž$°F_p±G°z‡fõ6 ÁÞ–y·/úC&øß8Á½…>áOv*àV‰á­M~… ýþÕÍŸ~h1õ+~X*z»R€!±yŠÓÍ×#bg@ }¿ÇtãÞX¿\ú²·ð9ðs.áç ÷-î¦xÄs&v/<¥óﺼxÊ׳”;ÉÈï¿ åDªm~’Y5A©Ò–㪯gÑdÊåPèx§õË9?<— T¶¼®Ú̱°]ˆÿ·' .?ÏSX·î#UDçÞoºÄrÅ›W+“ß«)ù°ïÉÿÀÜLG(†’2îNóªUkж-–³…“ Š9Ʀh"¥qÝ­Ëm*%[k±2«U»°FëJd œA¶Ò’ƒ'0Îe"ñs, ÉBKQ‚ÈbÑ:IUR`…/I¢ò’0™ ‹b¤ÈDµŠ6 ©„´œP‰êS’5X6‰zŽ~ø"ì†rG9P£ˆº«ù”Ê¿óŠÖGÕñcñK1Äò¶×£möÕmržY¦žQßðH9ú Ω`é¼²÷5Ä+¥T¸„8VâX5$µmrÑ8#²ªBz$¤#”ÜœûÜ·‰®‰k È.Š]Š-Š˜ž†¡¬*î4ÖþÀZ¡¥ÑDr×[w[J†f%I“USÈ ¾êyö+e(ûŒéäÒòta©%Áîñ¯‡Êh—:?§#«3¢ÍÿwoÖ$Ç•f‰»ûkîH¬.vº§¤–L-“Ìdš_­L&3IORÛLUMW³› $k„‡ïw¿zH$ € ‹õXuŸ2Ã<<"Ü#¾ï»ç;ß9y‚”vžk)”ˆ´e‡ØzÖ÷½=: c;ìÎM%_Ëu¿åiAr[ŸF“ÑTFË3£ëE¦cÊ„Ìúžø“¥:WU‘–.ËLMW%©fætQùèü4åúëÌ­eA‘¼÷i'ª[^à%–Í”-Ñ +šS!©^¦S!?Ų°d/åíG§Ùņ/rB½7&ø.›†qºé‡vô‡‘´:›%ݵ٠U<ÕóŠí+ ·R~¡˾œ¢% ù§Ûtíw¯á€éY‰'ëîîÇ/ f½ìÖ È4®ÙÕ½×¥ø´oèA7‡„±•îÛÏ Ð×K‡p‰éÿHóNÂP ²‚,:û†;TX<€Ééçø2þÏcðË9Á½ƒb‡¿ÞÜðÖñ™áêùÏwª2Äÿìz`þ°ÖðÕÅÍ»÷ Æ–£öHx~óVæ':[ÈÌ©`õÃø•}¶~½}NÞÜ„=vŠK`.÷°·R½Î«#jÏSˆdÜÔ"¡ªÔSöë…ÒÑM~˜&#wC¸?dÈ)?—/«HŸeK¹, 0úz±2ÌÕR…ðÿ ŽÂ|¡ù±%² Ïõm#ï¢~;+‡ÕV<¡þ< GÞÇàºYÜzþ á0æúõ;‰e?ñ«1G¹ý41Û Q™¤4ó-w#´cßQ&W@F`ù0Ô̯yV'Y™{Æ’ªä—RdeŽzI€ç‚KÉ'–\AI.Áó¬£ÒsP^(O$%¡”Û\ B® ±ô4|¡òš`é@àáRŒ‘DDïtpM ICФ±êk‘J*øÖÚ`^?ºµUÆÒËH¤ù×AG/ÎRN¶<óLŒ$“‰'hÅÈ&A²¢àT>¤v:úÕ<çÂÈ­cD’ô–1«ÖTqJÉÞh«-éïj{-c6Ρ¿ÚÍÃëàÔH`¸ºÄÔFž-} .cŽºîžj͛ۡ²ý2Ǥõ¹ê-mF6$Ï(§©±h ¨%›'…RÙÎã–7çtüÜsÊÓäÏhY~¤ä"Mìzïì„9ï£ZJ®X’*Œ'²8(E‰ø‚å'íðÙÍ!{5¿?)Np| %“§ùÈCÊH¥V•ܲÄËÌæ„”Ž{ÄJdü¨GHG¡Ìfqǹ^±À¢ðFÊK0áŸF4ÁéCž2ŸÈ0`×þÖ"ßFv4¥jâ)WŒÓœ²$åüô£™ÉPDYíWµYÕ:Ç0ëѶwíí¤ó!\uôuh6dŸO!w~!á®Èå‹ NIJŷ<-W´ÌÙØß¡¬‘ PóºÜ!K›¢ä*áK{åÚN éˬ³¶ç Â´@ÓZЯ écô Òûä_Bþ !)Š˜NÎ!¾V•UÌv=`ùÝ.ç `Þòžüitû§ëæøVëôý¨åß&ɆwÉûa¹¡ü 0ôöÞÕ= ßn§_*°ñc´Jý ¦û£¥ß~­·4ÀÅs°w ›Ãç‹usk ¬~3ü¸¾ÂÌ»ö&o@øPl¬€SsÀ®XÐô4v ‘¶«â£r½bÇž“U˜ný~‡tow}ùÝ⛿Iü4dlWmAÛã%ž9ä¤/’¢þk¯`®Ž”ÛNp4´IkÛ¨TæÝÅáã#»âmeŸtZõÖOò%ä/ý?X3˜ò$Î<#YâÆ "¼Î%Ä0RCؘG$߇!«g’1dΫ”w©’ùâ¤ÊC&&¤cÅIV@åI€P*l$“‹‡aî¦9$K¨$öÁrn¶ž¦“I„†H£™Ÿ§>ö<7PÒ†ÒDF ›ƒç˜U$°.Žw}ßN‡êîÕ4ÝqÈ¾ÇØ¿Ô·.¦ƒgÒ¡¨^¬pn§Ü0®E/V;’íyÒÔ.‚Ö\[FæÙ§2?.yÈò[-éŽ}LÑÁpšµü¨:Ëï «Kâ…*Ëãu]35úxÕŠ6FCle0«±Ói´:„&O…s›Ñíi*oxñÙ²4UÖsõBz"<=RE}Z°5 ‚Ò´°V³9Y„º’"‘™0MÒä ‚ËéLÙ„à’•áãŒÔsœû`¹­XΪHÆÜNìBÚWlËB’Ì*ÏM"[”üLˆZ˜Ùß¾Mk’‡ýý|}ë¾i§«ƒûϳG>|Áȯ¦*¿æåµ ‡ÅIÍ‹tb©Ø¿®n]‰ÙöZ¿XÜà×H)“å3X)e°i¼»ÛÉ›é`‹¯d^Ñ> 8Ù`z±¹Æ?Jõ¯×c“–@dÉ"·_q(`ôÍ—¨(-d¶,F¾AÈOkòí–ÛŽ{À¿sN(àÜBÞè;#&ÇR¨ù`ëô+¼5O7¿7ü‘Æ?™'0ü´Ÿ…B2oò„x°Óùù¬«.‘ÙGn üþƒ#øñÈâн1lrÀíø²k‚O »·Ê‚¦Åe:$ÌÏðÆ}bpn¶eÄYtÿv2‹ÐšÅ¸«ªôÉvq¢–1 ?Ný®»ºÑ‡&2“9–y{âZÙ3?P¯M3¡3it,M/Rªsv;û í¢¯v†Oƒ™\ Òù° XFºy/ýL‘)J)OÃ0Nñþا<ã\d$;Û=åéBÏó¨Ýô®ï½Û‡Á^wz˜öìÔݤŒÆ°íýÅ]R]ÅH§²—”‘fŠùHÁ9ÕÿojžWü¤ÎÏ$Y̘fýMáÚÿ g^TÏ’a½U(=žä…Ëfq GþW„)ž±½ª)—´K(b/¼tc5 r縤ädé…HŽN·jçÃtä>[äÕ±ìKB)½!ùëì ŽÓ²ÞÔ<«´fQ%— ^¬ÅI aöw†ÒäL"*A32;JÇXp«bX‚ÚÖÙ>íÁZ¨.KŒªF§Ðêœ{oD0ð)-øL¤OµÈÊR¤1†ûƒÅ«½ÓQ“0Ãýa<|gш±_TÚ¸nÅ^Ùù‘mŽLó·…ž¦„.ü³S_6=`¶¸ï{‡½•+ùäˆ!Û6Ì­ã|¹?d/pl€C&ãôºBuŽÐÔˆ¬ÜÕþ GK-¦ß¥µÀs‚Ö=ÔìzP6`Õp{LGØ­–ªúkÀ¿U³*àö±œpŸÏ0 yH ?SÝÊ·ú¦oZ§ŸígŸßí^”W"ÊþåjfüþC‰á­‹øƒ·u¿D†0Zdoõ'ØåK ~ÜåÄŸJJEé$·ÊPun¦Y£j÷v·°;9.ÅǧÞM5vE9å2–K™bn3eOx¿õw@kY©Êld!Rç–*…„ŒåQ®y%“ aÌ3^Š#!·+Yt<MsN‹L–j½Í6ËID¯}K q’Ra“N©6¶˜´7i²<FK…«TŽi*|7»[>wÙî„7d^É(a[7((sãW£7Y²ÑÞg}¯öÁšp3’0µqtÛŽ<ñÂç¿bapuÃ$>A Þ¯GæF·së‡å—s$ 9‡{–äï¯j«äñ*rJ…Ûëïí€pŒz¿(¾•Dg9…HõüÔý®\d-K;N –¨Ï¸CÑï×P—€õÑöA #¼é‚ºÝŒE ±rûª·o!ä ‹ˆS  òk@>ZÑ$ZËaýû‰áíê'?öBÞýÜfàÍRÀñ;E¸üëÐaý‰¶AmñôûGƒh>Cã/‚•,pó'!¸wrCÜ÷Àd@ ô@Ø÷š>ø¸jAÞSÓd†BãñØ”Ù~ª_§fèÐûn¿V'žÅx®²Q惎hk÷ô~?ÞÛ—¯î÷ß½ðPËÿ 9¾Õ¨ Ö^~*­Èþp4¬‰:òćìG†¼¤qNRÔ‘¢ÈU)¦›ðJÑ%K«À¸M’$^CT"ÀMÖá?¹;“‰j êE€¬×(N2ãHqÎë: ϲ=/šUg…\B˳Ší©dNËi°ÞºB2¢¸çÄÒ¨Jïi 4kíd¦iŒ œxæ½q9+˜aœH2Öy®Š¬fbàa¨g-#ËK¢–H9B„eR%*É›Q¡à‘¬I‡Ãd÷£îù¼_'×ç©wÎZ©|'HÆHæï -“Ìx–©3K³§ö^N$›yŽ3+=ô­WnN¬Õí\=»dÌ”’eÓ4ÍñÐÊ¥v—/+•çB¦22G+¡±SzÆ8¸tgScFj„ΓU¼/T†úßÓS=T`5§½$Œ¦bXÛÞ«|÷¤©.P÷ç4ÅÁŒÁ{NØíÊã.kqãSïð|˜“’ÜÑør«ƒ è 4œ07Dêy]i¶c=j½?±Ž¥W2ßfeÍŠšúD™äÙºT:´Ù<)/Gã{)hžyyµ ÃÆƒšš¹"ä•ë NA>ò)¦Œp’x-¸(Ò²ÌË:—5¥t”Fdr½äG–A·û½õÀ+ä€Dî»Tnóå°íß`4Ö~O å[¹òvø¡ ”XŸ¡X¢¨¬„Ä£u±ÀÓ€G©ñÄ kHîßÇ}û.ìñÓòaíð ÂWvï$†'Mš?Z+ ³?(vß÷ú©™*ÿ9nÀûë(þz<|cè£ékxs¶3`?ðeQáÙ žàèî¹vÈç‡cŸgx¾˜‘ìÐÿìÐ%ÿR­p!¿Ýæõ‚–zgûÞ íçp ~¯¯ËÝ×GÀ½É,‡õ¾XU^fme_g¾ñäÄ-YÎU>æg(’·’—eMJŠ…Z†Ë,ç.ƒâôDPH£Õd ô±aö?raN"@ÒÜHÕD¦À&V&i×Yû¤PUfïõÁN÷­D–-ò<Êarbç8#±®SÂI‚”ñe¤ŽP2ëqèÍàõ)Sq"12I,%“kUn˪(‹ÀUWxŲ¹ ‘Ò–DƒÆ‘2K˜¤, Ï£¦Ö˜àç”ÃïF:šd,!.%≉j¹1a¡Éj›\\ú™ *ƒ&߶éÔ¶+­ójV1ûˆÚ_Ô³e›6Ü`|eïŸ7=ï¨Å¢S¾ï[ÍêÕª\ëm„t,?É4èu9Ç2öØO––6{ÂE®ÎÆ,7î`Ó‘Ny—P¡çn4NÜDÞ¬ž”b™›Ê”ÃiÈkdÞ°`ÈXˆÊIFÞÍ¢Õô²o¥éofóÇœœR"25¦<¹D^.Ø‹¼ø–ñ³ž¼¢Oz”b&Âv2;ÙÄ´J3§ŽXR÷Y5Ëäá´³s/¥Èhž§¼PK¿áÓMf™²”ûD˜][QȤâä)a–G.kKQÆ»Yn¬§\&±Iê”ÊJ"Y2zœ7c7uþ™åH…e¢u„GAÌE²'Y¥Z7Õ±£´·Ùuײñ«Õ——þª÷‡¢|Á³ó"BóÔ–g˜‚¥­—ÈBâ&¡£~œ_wÍÿׇl·=ÑCµëÃulµ,ãùÀ3ýÈ Â>3Öú¶Øë‡xý-Îf(‡îä†~F2ë0Þ0?1`Æ^Í„z3eo&^{¼ÅÚc=ÅËðýƒÔ"ûå¢ËAÿõÇÒ>t.oÐsÛ’ˆ|‰®ù1õƽ3še1]¾ÑÖYÝŸ; -¿çAõß¹Ó_ÃO¬ Ø¿ÑÖþe¬¯÷s‹“<Èâm•ÄCR? u=¾Éø~ßá?À¬…Áã&Ã#šZ>Ÿ50Zin9ž#»=þ¶—Ýæ÷ŒÎ³øÜ´åË›nÜV[6e7ÚÙ¹[kÐÇ;½>øãj»)ïÂe9ÞØÜR]â*×ÚmFvlF_¨Ê~é`eLO(_Æ¿–éŸ*)Yc˜)G3ý·R­¨»Åæ+ÏO)G²Œ§É¦~7å÷Yüï¶Q”œ=­Vç’çzêfòÂPã³U¨Œ°1i>щ„,„Dòi4Cðž³ÁÌÆ‡HœBŠ %1š<Ь̳e•×eVDA@‘2µ ‘DŒ6éÁ g88 &ØÉÍhtl´Ü8®‘»Ò™8È´´!ДԎ`ÊÆB‚q¼ðJÓÏl–lQ$Q•h<Í™¨Dª@'m¿b¨DU¡ ]5V|Þ0G¢ìY¹r)­È'gOŒ§ÎX£ŠD×¹ˆy¹q]Á÷Mœ‚P±º¶×0¹¬Oël{–‹ÚòY“ƒ.,ó)RÁ9Kk’=§ÉÍ<¾rÿ£nk™Åÿßw–—ÙùŠor“èþ•É_– Ëê8·Ço½¸®=ÍñkÎŽXVgˆ Ö1žo´ÌF:›¬Ýéz‹…8/E–X墕s¾°‹Üèáè¿I˳ú›%jñYžqˆ(ra‚pSöqÕÓò) y!ô"²AÎ-™'×\n¾À-$& âFø¥± ®Úg£“ikûÍÿÓ lÆhŸUBÕßYÖ¿fÿ³/rî ;Ž£}ü…âì÷>·ð_[]˜ÇØò0Àšú%¯Þ—ɳ0÷ ¯Ñ<üûCáÿX ¸ñZ¸õ›Pó†ÞòƒÆ3ñ¨rŠ®®'éþ  ã‡ýAóAjúÉùW”f ‡>06ò#þÖ¶õôo†™Q‚8o¢ÿ )öTá=þãÜàðs‹]C’—0OP^b´€ì_…ç8=‡“hzùåÍß³¹íÿàWÓ7û³×TlY¶ñhz}¿¦²¸6ç • é$ßÔ³:·)‡<;›IýRfÑ0uß0tᳵ㓿á#<7V)Q°cOÐ:’´,ÁDä©(>#äS[ëÉņÙàa ¼oëXL(Û\Å÷[yržŸ_Ô«*¯gpÇZÅîiÑúr µ²lÅc9{mÇ[o‘y"HâÂX{è½Jn’ÔD0 •“4é© iÎW†& ¥©ŒdéP†@Áå((@`è<†áô<‘4#²è$È”H“Œ¶=ÚŽßL8¸”¼&d¦Òx£ a¡ˆ(m¯“ 6‰†ÑH³UÔ«yê»l¢_ÜÑ’d4žõ‘ad©êM>u “ïRÝF&iÍOkpãÿÖóçuúœ‡œ¹:8hŸ¸ÊC¾$ÂÙœÜ;vë­›gæÆ„&R”ÉÉÔ„º›©¾¤Ü§v¹‘ãÈVÅr)êÒq•Hä1õ~z¦ÍaèæØò,w›Îùûñú†oŸŠ“'ξLv!lΫœÛ`Gfúšnk%'YD™ ÿ«ì°¥gÏhý‰’BÚÖµ·%glžLï~Uù}ÉOŽÄ²GÕ@5ÒDõ¶06ËgV§|S©ò™Œ<#T%pN c–„ä ë3™ñD‹ Uažá¼!>õ“oûÝÞ¥C(&̳÷iœó‰K2{°CCËí4l*Á²9d·“×ÝìǹXs»¥Ù™ç`Èšra«(ù$멪zÉR°P Sr² Eí>¹Á¿k_€)QËØ‹¡ _»Ð`0}ú´›©h…íVáA>âˆÿ¤`-t‚ÛÛzïqw|¹"ÖT Ãõèl5P>2G ШïX‰ý{¶`—ª òŸaɛţà¶ñž §Àà8Ûc|‰nÜ[ÑMÿY‰á!D|Ðãò¯¨ýÄÒ÷f öÍçðCQÿ®æ’J°Á=Fé‡mÁ6\á'NNAä8¬8Ò[NÔ¶Á¿ªA˜ýjy[ †m°—3ìÔ *`ÅÑrk¼¹‡R¯äWúu+^CaGŸíÀ78–(§ño€£iVùí![s:ÉIž9«Å½,ÐOÏnã“oò;¥¾©õÒØ© `V•æ)­8Çûl\‘¸‰cu¨€Š° uíEM)qcMt[\ÁíCä¬RN 3[%ŠßVü)%‹¬*±!7tªrRr±œè§e²jpJÇÔҞȯ Ãá}:&ãL&¬™SàÑ8Ë$!#gD¦D=™k}ŠÉŠ”4ˆ qŽÄû>ÚavcoÕ.Lљ DÂÌÜŽôûp˜‡XáíTæh%y¦ì]ò#Ј^ÌXV™tyÔÔ·.¦=Óˆ™á3‘ÆæI$W‡Ëq¶DbÈ¿*„+Äz¹ò•ˆ|´aå§sžÎT ³†,„ʋĬuwÔ}7§ÝÞUݬŒ;$ä3”æˆ+²›¸Ö›nk³mÜÇð·Íb—²Œ•mÄ Ó0åûœì½[zžÄjóG¦±ã¥qOãoâ§5 æsCò¢:‚àþ…ˆ%¡Þ¤ÉMèåâQ›oŠ-¹ümZ¬ˆ¨é¹a§ÔDr-2:éÉÏ.κŒßrò‡hwuöŠžË˜’L‚#JN— ¡êE,%2ÅpŽßOY9…< táµHã÷8^Ò“’Pæ‚In" tœ­kswh»ÅÍä;“úqLS&ûYÉëä^õEsík£Žf¾œÆJ_Êùÿ.ü¬ÈEª_+ “žñvц-/ž„Ŷ¤†¹RšçFKZô4LTæ4N<Þ^?&í' MÀ†€=0û#‹áÛ­ø +‰$(¸[Á[‰V3_e±afºš»½ÆÍ÷V;Ë»æÁXmFìôãòøv x¨æ3 î ¦O°n1°éÝNr’8ˆ…:¤€ÄÂb  ):ü(¤›Ÿ‡K ~}¿<.åOÌ~ýµæ†øS³o^o%†5pŒøö§!©õ#KìI‰Ëð8©€Ç4³t¨ð¦ãü9l÷ ¦÷ÃÊ€š!»ÀèíƒìPˆhs`ðN(Šˆ¶€àŸã €Dþk²Bšü¯qW¯Åm /ìúVŸ[—u‡²¼ï4¬ÆákÕJì‰!©Y¥™zVM²œ~#ìGºZ.èÈì¿Îaþ†5OÖ-²Åùò‹Ä+Ið$†0iJýWœ_Òü"çÒûÛë©!㉖r$Z‡žÍsꜜ“qedŠi‰7ÓÞ¾ nÄØg†³òdËdæ€d‰R—QϬˆÑaJL¦™x'h¶›¨[º1wÁ;IŠ@\ô^îŒM†ð bt¾3®Õa©Y‚L>X?ëÉy:#9{g¡{Yw~á¨\ºàSœXôb›QÁŠ!Ò¨M^Ú´è$ü¡ÐŽ&b¬e¬d$òXé|áÄŒò_{ÕgGH%%[³³zȹå–ú”q*¬ËWFæBhý4Ävvag7㢾·´â‹Üˆ ý”.Ô|~DhÊuAHêÒEë F? ߨ¶ö¢î-“¾9¶È™¬¢qî2ˆ³\/*b‘k–·œ/t`±_p¢ƒ<ÌÑO¾¤ì‚óš2ž©°ðÚz^²¤UôÄÌF’Å7wCj{OH2T&NDy$# Y;QD¥O1Ú,W\Š˜s-ÂÄ„U±ç©ÀˆʹÈ1_}Ì«r0þ¾k‰Ú‚*çy2·wöúR¿2ÍuJ·¶æ,ÎvÁ\m:S#ØµÚ &'n£¹¼g¡d½iè N­©ùb6"ŠIgÑ”Ž™h?„¼Ë(#a[ !rgUj†ÝÍîÅ7·±­?»Ê&èophà½Æ)T‡Mƒc^”‹ÊÒOÓ뜊ûído`þiY?QÇ ºypj> ð|y zó}l^>ƒÚ¸Y ?=pÿ Ž‡hßEú‡¿áh4“:ØG­þ·ŠNû` @|4$ð"·¸j0¡iþÌ`˜Ÿ ¸Ïm¬FP‹pøqò/T£ûOPÿ¢µfô‡Ÿ•ì~ö–#륇eï¦dijÏf¼{ÊêNcDiÝV` ¨GðG¶CôšÞ÷Ï×€yË7BXu~¿rú†Íøç£u\_ C¥s9Lžé×ûÄì½C;ãø9²õÝiu¸Ñ§_áT’5*fŽÙâ„ÂQ'H&HMÜò¹~¾(Ø—«´^¦j1ÍÊcì,j³ü»\®óù”öjžuÇùp&öv®¦î螙ҩÓ]ƨXeæ±±Ø {ö‡±;éç’RëÑî=ýˆ…HHµÍ&YÄß•ÜB]àzŠ]Öë-A%¼$‰Å,±Îòh8BŠÈI.¸x§í4˜„©H6Xk-m¤4ð„Q'¸‡â10=xm£>Ø‚çÅ¢Îr-c¤1ëµL4(6-ºƒ bMŸè4Y¤4˜#EŠvq üõVìD¼&Ã'óTy‘kÍAËQ*¥rËK"—OGœHï“¡<“9,g;¸¹2ts¥—eL[3QÚêT.Oe– ëùœ”38Øi~æš mq~~,aNQÎT¹v$M5ý¥jõö¸ÃÒŠ'ëòtq–y—Ÿì›¥LIÈÍ>ÙBçK#…â13XKˆ`ÆM芹ñp½wÖ»»‰ÝgR&.©XDBLN¢¼â’¬Ž=’*‡PÑ%“ú@_7ÙD™.r#ˬʌì‚u[q‘³‘s·¿Ý»ùNÒ )£´Ùe×ͨÓwYv™Û3}XÌL†l0q cæ óÐÙ½ :•ÖM›ÏØÙúØdžÝGC»d…‚ª®é¦¹¨&ž ”·Q¦ò“£¬ÌTu;õ/{ûíh®6›o(`¿Ç–gã’Ù˜iárq˜ŽîDzm±ú'B¬Û²v¼¬q4§øÈQ 98È}YóB_vß׈Ù3çØ&\4X¤ÿlðTÜû8ðôVhÈÁ-üôxPxöÁeXãåø‹üß,€pêÒ>#‡Ç8ùáAã¿Tî?ŸáúîÌuþÃlÈ”Pà ¿¿D5à?h7ýæäæQj÷íí]÷ãg¼ßÓ~óÍ ÀÕ$ÅÝ“h/?²ö®ƒúÄ\ø)|±¹ÂóÇS?¦zjÃô‡Ã$1Xˆ{aþÃå|TìÖ¹*qÙž[àeŠgåêü£j¿¡Ϧ°@±öa¸¢%¥˜;g¬ Ÿ™äeðm‡Ôˆ“ÃäL1TjWV&+sNЗé.å»eä©ò-ëY¿7]¯4ÊYUFIÈÀÁwÐÔuFûÙκÓÑd½’»œm÷ME5B@y–&…¨F¶°4׌e‘kGµ!#Ò‰²Š0J³Z#„ˆQ¼£ Á&kÝ8÷S7ÐhO$)* VÄŒ– [µ´.ºdú¤u&#/*I3J‰f³à’E Ï‘ˆž“Dp‹{‹l’^x0²ÈJò¾xµÿœ…Ï¢ÒÝbIí¡&e¡”ÊžæDX5™îƒ·.q’M¢rÌg2ç•O"émv˜ƒæLåFò,º2PÏdš+Ÿ4›”¦²Î¥kSq–µ¥¬˶]%qùÑS¤ËÃQ^üúâÓó“môª¡³£dXˆR÷N3z¬2 ÷Ìdõ\HISŠÎ¸¡ÙÛ¬£…È p-ä4ó½/çølt VðÌ“r—‹>ƒ–. 1gRDÎ1€ö£ãwmì üʇ<=Q¬”Œ„0kâ%‰0³ž›×®½ôÎô"¤”ÌáÚÝ“ª)­ˆªx•U鵌݇¡1†mó,¬¢¦ªÊ×H˜bqeÉê^WÑœtdJ¾û6ñq(+ÓVIÛj³­/7!+OùÅ]u9XÜÙõ­¹á¹CüáõÑîm,024Ÿ6¹»Þ¤#ÀqȈÈ]6æI~$ÒæèV…[=”8Æ6€8ÀoqL¤Î½RŠÓr_Ã@˜ð pùøû}ú¨ùü^w³~ô³ïKø‡^){t|sD4èå/R{ @Œ€ÿùîgä›Í„ý3üþ*ÖŸ¸  ?Úd¸÷¸bï^#‚çî-›Â1 §Ý\úí¢àø{"óû-óô°è.O‚]Œ /`ñ#é­_ü¶þ¢ìÍÚߣÜcª7ð×xc&Å^92 ³º_p{¬ßô²:àÈÕiU.è¶ËÕë­<Ü’LÖ4™Kn¼˜Måîe8YHõ‘¼äM¢ò Ÿ¾˜ÃÅÌdÏY¡`Ÿ>> ÔShÇA±¾PS†uW=ÜôÚŠ©&¹Ó)Âõn zOÄïV²Y„ésK+NK1yÞYqTÍI´¶&Ù¥S@7ëùÀù…àµ#µã%eSHcpžÑ’$m¬æqˆ|Òdê“ÕýJ_bºMÁŒ~£²Ü@Ç£HH4Ȩ†7–UngÅ•Ol"F&Ä”ˆ¶Ñy+Óœ™"2;¾ã`uÄÌYBP‰§[ûhwk†ù÷‡jmäb™²bv5 ÊûÕé¸b,#Ñ^»~GõHe`Ò+ÕCÒ¾ÈoŒç˜Ô¨S¢‘NzX´½˜ú*H?ÂwubéV˜è†rwOw‘‡1­NEÆ·çdÃç£'Ù`×ÛE½©T¹Ñ‘‡Ä#·¹b`Ù¼Rw§Vf”ìÌ.ó©”BRfI¢vžo™¡”I.,Ua,,BZ“l3Ð^sU^Ö‹"¿X©´¢ÉYoõ ãYîS©| ¡œ{Ll¿$¯s^QzƃaEìõÁèˆ IDATCßÝErvÿBg?ø'¯ú0N½Nn¦üXn–5ÿ<+óÜ#»/§ƒ{jú†Û.Ö|yz¡3¥S¢IØ%:kòOcü÷ÿ„ørvw0‡ËtzfÜvQbÚÖ)¤,ž­éùéb-jN´Ñ£¬¹^ìéõ…Æ# °c˜dºÿ8Å×3Ö=¼AlЇ„Õ’×ønº37ûq¸?BqOÂɉG9R,йǙ±5ÎÉ—êöËÍ„7€ÒÃc§áûòLþØ3±€SÀ×xÖßo€=ðêÝß®ð†«ú°öÄñ0ÑóÀp?`V¿h¢~)¦ôW‘ÞÑÞ#ì`»o2°~¬Þï0ŽüPÝ#Çɿ߲( 7°ª¸ €VÓij(â÷–öÔÞŽˆO8.ýûwhdésÃÄPú¦$Ĉűå7û‡ XLrª³—Åe™3º“ólg`F@.Ëï‹`Ì~!Âsâmûü׊CÕ]¨…«Ži`…•“‰}U<œû²)RŒÞE’ß1ŸDHÐÚ–†<³}÷²Ø¿ªyTÿ¡·%ñÙè}ŠWÒüÛ˜w,Õ#9öã2fZÇq>wòùs°ƒHL:bB¦—f.»CfðS·ôVJŒnšIO©[ K¡5%£”°Ì“@JA›§ÆF3(wKlÔFÄAD3¹…æÌÒŒ˜•1ÕˆÁEíµÇʮ֡ K+ï€2¸k£‰U$Sy rn´žz• EoLݦêHÐÌÃE=œI±sGý¯ÿ~òq§WYKÂ.è1©3C!ض7±·ã)Ÿ2d³–ƒÏ½¨×&Ÿ±åšqW$C˜ îªw³SgŽæx®ECÖ‡±Ã6,ò.­;'öÝuE.j,´Žus9z{yN|oý,'d ý…—L(âöGn¹pƒpά÷’FHs븽—ÎyÏhÔ, †Ê­§µÎÙÊÍlQÅõt+Y•â´.&§üÈ‚ç!põRL5K¡;ÁïSVfÎ[SûˆÒvulx÷ëV¾¬5Î4YN†ÍyXÕO µ;æ9ÉQBÇd‡Oµ©RƱð.kGÓºÁú• _(òåm÷»¾¹ø4¶è78äBÅÃ]7²C~Zeä…’‘S¢‘(7Õ±=qÏ/ÔŒÙç:¤8J‡?’Ûb}Ë÷Øò ‰ü¿¬¯÷¿3ÝCð{ P‰†u?45 ¹ƒ4 a> IïÎ<µ@z+†7?؈=°pmЀëûA,€Só>#ÿçÂÚ°¹_Ø÷ÿÅ£Z?×røËÍ ÏÞŒüT³¡xðŒ¸7×ï±Ç>°Ž€ (€æ'üÞç:½s‰'<ù·Ç“‹tèÕ‡ž,SGà ÷Ñ~H2VkÍö¿cןò×Ö` À=Òl «¾O ÷µ¿LvH²˜s?ް³ý–ˤ‚™®šÃsz‡óˆ¸}:Çù¨_ 9R£Â«B­×G” —~&/3w.-g_LÝœ¿üȆg)N–\g›aÎK "^tæÛW©x=HFiáËjãÍžÆlfE›çóD¹•×/KGYý›®þ´—Ò·}1Ýr[È1±)‹S>zG*ßȹçvNÌù*guYºr>ׯPï´oše>á¶c»Ã¤mûr<ä>òŠUËôQJ,øzŽ¥ä)WFŠË”§ÁOq׊Ù'•"Qá£6„¹À§ýlf;æEeˆ ÉïRÈÙÆ©ÿܪF0ª¨`ºpR¡Ë2[":zdË”ùäóžM£­ªÎO^6Lý¼›ÝdÀ1 "Ë*ÈS.ëÕa‘OâXL’2YôSr†™°\2¾º ‰Cç^ªì“<”…ŒJk¿¢—ð×Ӫʭ£®¤–…Nø—ÓœíÝé7a6fŸÊU$¶Š„5×kI›JL¬º$ÇN§ŒQE˜ ÊúB†µ™­ .Jc ¥ãeÍœ[M´ºSŒÈº,dI³ŠÇÅ ­À¸‡0˜<ã>ÚTN鞦½ñ¬sá0¦¹ï–3 Έáã¦Ý½œ¾¼vÕ~ÔõèÕÓ“ŒŸ¬ø¦H›Þ«¶&´¡N&—Ž0•’—NK?%:’¸Ç³¾(ŸïÿÉ´¯£=âÅ‚Re{]tsz>ÄÛÁýÝjà ~´w=¯³»Ñ½º½½r‡o:*Ô½0ø{[ò¤¾šd;øÕsŒØñ˜00KôÍe?âÝ~Àž‹Ç ƒàÐ]É>³<È5Ö[Œ÷>ÏoZk  ½\ÁFØöØÃ¾aœÜ£¹“{žû†?ÙkþqìúÁ€:Mï£Öþ½²ø§h÷?ÿBsÃÛæ9͇› oäÑ `ä?%]û÷àÜýxûfñ£NÀÏ\âögÞø>ùàC€ì{i¿÷|š,p‰ÙjЉrŒ€÷¸U_C7€hÜËžY¬pÊ?-ðĿҫâËêßÁÖдÄ¿_¼€Ô`Ó9äðei¿Œæ "?§Ë¥’ºÙ÷©»íg3/Ÿ{ý¡$ß.ðe.¬”`áxÞ“v¤aa*ɧRÑìW±(ÕpmìWýT§pq ÊúÅè6ò–+s³ëŒ¿¿˜·ÞÁç«Ý¯/öŶ+ÕÉÿOÞ›öHreYbçí¶ûkF&“dÙÝÓÕêih0 $A€„ ß«o‚FÐtk4TR×2]Éf&“ÉÈXÝÝÜm»>DF1“L&Ù¥Ö]ó>zø0³wï»çœ{.Q\ Òï£1ÊC¡NKøÄ†®Ù\šõ®Ýý æ‡u5/²WÞ¶#±&Ò& Ðí4†mû½Tld‘GÅbePY$Š ‹sÇ)!Qµ#Ù MH›„Jn¹šRkû¨µ íÐðÆ ¹ŸàT9å·ü¿¾sÏ$«q8 µñcšÜÁKÁ3›¦eš3MNQ™p³4‰pv§Ý7EóRt_ùS»=a%b–ðƒÀ fã>¯ÕŒ/Ëfrø-ó{úÏY8øHÆ®õb»¥!z5Ý—Ã> íÌÏŠjSš×Q¤µº¨áè•–2ê³…§Ê”=¨žÆÑrOâÂ%3Ë`È­St%1ŠˆZÄÀcª6ÒÐ2U*Kà©ï˜NIYˆ,Šza‚ }IçÉ딑ÜÛhikJwT3‘›n Óv¿Ÿ:°é¯|ÀåÇú`ž}Lã\øÈ¦‰ÄNO]=õ0JúÍ‹÷5ß;Ƈ?E+ߺý?²ªL£ž`@q/` ÌTµIÆ{é›9lG •A86 OaÏçéÅb¸inñhÈKsZ"ÁçXzåØê™IqGÑõ ÏÃzžÀsl3tÝ_U¨ªá *ž™bù³ÚíöÃ/oÛÑL©ÿÌå+9•¥XåBùkd` r3©Â6Ó0þßÀñW±He±"þ«L'R¥^hß ÞÓ›¯Ötµß_5éڀýü/G·ÐD®DµXêÆžv"/“„Ê%‰wÖ c{ua_­Ù^ا³NˆÍlŠ®K§Â‡TdNó68ߺ©k»­¬7\¤˜±³™µ†1ÏU ‰ Q/S£ÒÚûmÁo#ÍÇÌxý4NÛÔˆSšoz®ãÀ´·†‰nƒÚŸÞh©À1e Kxêfdú«×¦¼àø¹ÝHñUÊwy<¡Qt’ÃG¼¨„£ô¾ÚL~C{;籘]MG3²}%d"Ù"á§1‹^(ßtÊ ‰ eôE¼=Ì…Êny6úÿSñÏÙ¼¦áZzgüԳ¹;îÖëߎöTƒŠÄuµ §ë°FÕôý‚±°+Ø(%头²ëBìMG¶š=b,'ÑCÊ® =ÕBªS…g®ŒÉr¾HÕÒn ‘ Œp'Õ r¨5­!¦#ÙdW¹iîö:øÁùígc›m‡=Æ»Ú~Du—묺< 'þ qæ’Uki§_¹ŽôúZÄFªy2„¶îý°»P;šÞõ”dü«›g²‡ÀYª–ÔeA˜Ò¼äü|ß-ÚÛÏÚoFzRË DN»œÎ¸ó4š^XÖÝî¯÷íe±a$;Ùr½[Ì]Qû ®F{ 7#¡Žð81Áôo6õ³©åvÜ|õÖþS, ÀÆu´ çžwß;ý½'Â|¹€©Áj0`óWÀ`¿¾ïk{(;8п-bÊ~Ÿø‡éŸÂ0´þ͸3Ps{qTûî›é9Èßþ{ß>˜oqêÔ﬑¶ýp¯Ã»¨Ô`~Bbx_òà@È»¥\‰<‡€î¡ê«îQ*ƒxÊ ÅÁâÕaØrÄŸ¢ðªð‚\÷½: üx~NøSÚäºÜ-d÷8¼’í“Q›dÁWë(?±öh¼~…¦Æì¹Ÿ™¡%Ðî ýÏšíÁaºšøÿœ™›zOÛëÍ8δ¯äßÕYòñê#Ÿ²&|îGí¢Ñ>ÖûŠì({2‘™¬´6aë ©âŸÄ䔓-Äßí‹. Û¯=«5Îð 1,¸NÄ®9Ø-«,TŽ›` Ñš ãB3qÔ@ÉÞÙáµJ¾TéQ§‹iÔnL Íq$ÂÆqòwM纉LÔXƒf¤ª„“*A—ú6÷ ¡„‹ÒºAÃ#¸ Ù&t–îÞ›u¥¢’³8Ö@‹áΙ’4œZjšØô‹áàczÜ×°--æ }*Ù|!¢R‚±%©JL·Ì ÍMŸ"(¦Tõ ãµîlì^æëóå1—sF35yîâ(»^J–œ1Y‘/nôá×ü¿|Œ6ºÐºæÐ}J 3—%aXä‰9¸ÔãØCç¦"ùÈò’-ˆÿ"u[~¥Å.MO­ŽØ$Øõ*8ÉD½á0u;hi0´°ARÇÍ,!  #"±£¢=)R:+„JT*“SAMïˆ!.‘eÄn¢]½®Û¡?®bCNwÖë+϶ *„<øtGy®œZ'ù*ÿ}EŽË¸H™ 4L±žºÆ\5ôõZ Ä9>Úy+@ý9ïkî ëýêvÀl„®?êÓñx¼!8¡Úä¡„{ŒÛHNˆë>ÛÚ"U®|âýØoê}-vå’%©I˜ñʱ-tã-<ÐRiQJM&Ì p‹Áÿ•}ã‰ÆÀ<Av NÐÞ=o›¡~/°ç¼Î×àMÈ=ÎŽoÌYñò Ô‘ò17ˆçÞªÜ^¿ƒ„Ÿê/÷ÇÈFgo.G Œxù}#ßíAûai“ùV­4üèTöûvôD!JÀý»weÂUönq·~pb 5àÝ!+À ‰Ô'¹]دvw&úhåãëãLåj$ˆ6-&Q’SAÇ‘¦¢8™ä?÷Í ž4/]ú™k á v—üº«°$²ˆÕÏëí7l{ÈYºx4«Ë-¶S}£.‹Ê¥nf‚túOZ·oûfèî®”¦gùáýlA§W”\i£x8ò*Ê`·Eswà»VEEwôó!Gmguû3M‹bëŠê޶JOû©¾ÞþÎKEt>1»Ô¬øx,ùÅŠÑDf\³èÛz.“=¨šüX…ƒ~ç6ã`Ÿ'3• •wag`T §U˜Ô¤9¹¥rI¤a[%í¼ïéû`¸ºc×y~›t&¾tz>’d¾’‰#lZFr¡µ!»W²¥™štˆl°|u–8ocç¥K¹8>ˆ‡§ ¹ :H«yçÀ´µÜŒu"s+º§—Å¥õé§z1Y$d¢ƒ1Ã49MRî³ ‘YB=›‡Ó;ÑŠžáµ-ãŸOãAË95Uˆt¹õØëô"´RžV“Ã91'nNÆ¿'ÝmÇ;*ŸD¤©X¦õ‚ó>®O‚L;bƒ¢–Τ"öcgÄ–‰ãÔav vçÕ:ñÈ žˆ4&™´7ÆXGddœ ¯€ÒŒš…zÂÄrëR ×5¶7–0Õ—ÉÅÉyùeŒO÷&íôEÞY9RëÄzp—1€éÄlF·ëfSŸ‡‰ðe¢ôDÝuk7k˜£™ðñn•l‡Aiœöíz·°±½„ŒÒZ•ŸWœÍ O:çm× Ñ8;M®ÛÑ*Ì¢7âdoL¬IúB貫-tøgØ{°ßH]œïÈÅ!Œ’X¶¨±íó +°%ü/€5üþ׸*‘˜·[ˆÍÛÃï[8¤ªSZa¶KÞ!àßÿÃ$’[Ï3UoGäl–Î>™¯ÊRr“c(FI7Æî±ËÛL ¯ÄuŒ°ŸeFÍ ‘rŠhy6IŒf߬¯e?èm2_Ælîx5x-g‚rB œŠ}ÉjŽÊ±dfmáLR·J¼S=ÇHœÑ»ˆH²1ˆ†Gcw—lK³ÃÀ™¤$§VªD 7:á›Àd’Z.W¯ÂiºJ$uyËÙà§Ø•Kl)œd‰‰ÒN£øB ‚wÃ!!P&klÕÇù+R<ñè[ª·S,µA7¡˜x¶ŒŒ¶Á4Ñd±2üc”yû|y=Y<²|Íô¯Nlš)±,Ô,Ã*ÉŠ²š´€ðQç>ºšuÛ䪧ûYå®Lå‰ë¹éÂJü<%Öê¸å É|nÄ…±y¹í ¹`ÄÌn _»[/Ô‰r(O A© ^H-¬,DÎ2¨Hóc=Ûu]ôØLÊÃFí\Ó—“'¥Ü/²ßäVdd%Ç$1 ºõ°º» 5y‘qîÏXQ¹¶³ƒy¯b®¢¬8ôd|Ðèðd®T^ýOîïCPÃ…Paæ¸#+„³bØ_cèÑo-Wfô,gGYv“oclÍÒì z2Æý¦°÷YБý5uÐò Ì90B^°¬Ë꫽¹^àñ ´ƒý ¨ ­±|ÂwŒ|SX|0„CövLP§0÷ô&–À°,Lžc—ycÌz\ÏÞBŽ ÿ°¹“ß®äîpïWÈ,ÞEÚåOÉïEÚÿéåóá‹Ëõ-¾öþ|Kùã6èï|yÿ ¿ÄäÃõƒšAâçâwÚ]ÚÌeoK»‡òær†Å!Ž×7£A T€¨gû—{­6ç.íp¾n/Ë¢éö—Ö¯oTw]‘’{Ò«~[Ey6Ÿ_ÊF_VÏôðqÛHÐGujkÎG· ÅÒfÆÓ+Ûý_nCÑü›\3߸KxÇY¦N«Ðö¡yòÚùŽ.flüE~Uì{²Ï¢+åqyh/Œ`íQÏÙŒj-ØP¤ÎWD™Tõ/}l;õ\HƒÔÃNK†£4-}>סAøæi[ñ¾}5F\¢-ÆDû¹POgJ%¼ê{SO{­ˆ°ê0g2÷,ó„iN 3,§è×ÎixN-%‘†àã”\“À¨Œžd£Žûf¸–|TÉ& “Â|åŒ$®#M+S/îÔtg™>QÕ,e+¦FîZ"£¯‡ýÐ42 O «g†òCN ©¸[î4èÒ L´çVÒÉ)’÷ébÏ Ä+­«/+R¦Iwý³ysÆSdýJùŠêÑÊÜKŒœ²8ç…œ Âi›g´SvàéÐ&‡K?K°¦¸´»ß ý8lyÐlø¸ ‘A¡£S´¡´n|2º¢t >7/†ú—TüwYÎ…˜¥dó„0$±`‹(ªÛ$ ²+²kM(qÖ³AhyÈÏ„OµNØ"„ÿuTÂ7nÚi‚0-¦‘«Exz Ï£<ºÂý‡”Ôû J=M|u0ðî3g\ä2™ÊÙáÔõå#Ö>µé’[>ju„ÖäLå*βB•<ßEö²ÛÞÆÛ¼vÚöÍËoJÐÕB^LS€’PJ¢Z%Í0kA;ÐtuÌ.c0ÐR†ê— «x»†~/Ë(5ÎG\Ô0ÐìÛ m3ÀìÿÑ;Úÿ@ðcgÓ¶¼_½ù{ûà§ND†üãÈ öà?û Ó}SÉÅO ëe³„¹@Q`þäe܉—9 ùÎì=ý/{sû böÃûšØßMßPŒ„‰¸hÿu-8ÅGѽt5†ýÓ)ü90Ê«y•TÞëKs7M›¶<ê©VÁ¥ôº ÙÏ ú—™¿n‹_êê4Çí® ®t4•å@¨ñÎN½íü–t*©5IôŽJ`Kè×q¨¤xœÍNÚ‰9ϪI«q§Ã«$Ï3QœÀK29e6™òý~MG¢¬ÌvJII8w2šN„vµlVùœŒèw,0µ'tÚ-û&¿ª"r3yÁ§#•$ÞKBîø¸³½´Áî=Üæ:dW»ŠùÇGcæ©Z"Žðïº~¨ŠÏŽçÇe‘pÖ=Ô;éFy$Ô$ô(5ˆºp~1…?Û¼8”bŽ1o‘XÎ{¯» Åg„“uÊê)šÒ–iëƒò¢ó¶w2%cÖJ…yÄt dÑá`Àz'ÇžÒ4¨’ Êè 1a óU7Ö݈;þ¹¤&Ó%]–ê0ƒs²gl“‹˜kЉ¿ü$þE¹°^»^Â¥lB+ºjÆÁÜugGøÙñÁ2ê­ÙLFñijžy¢]\¼Ö‹ËÝ+ìGʪ6Oå‹ÐFêóO‰`®÷w~ü&Ô!A½8uéámân¦~¸ì1ÇxŽËÁ¹Xh Úï F/nÞz¥þýø–ï’ ¸|÷ƒÏß^¾6Í~:Úóí½øŽgÒO“¨¾½ú?^¾á­Kàå»Í„xSLÈ·&²i@ýØm`÷½çK\¬`4Ö· oZX8`$ð‹h‚ߌﻲù»óær€íÀ€CüPn+ Ckd§Ï#.F˜æíª"Ùü!2$ÂýÄì L 2R®ÄôÈmöS>™ †½ˆSå%™Ã­d¬´>U<ƒºƒ3FŽz˜9Bu~r˜¤—žäv?ó»;ƒ»æOc¿Ô»äJÁ@6xeÏÛ”"¸¿bÕL‚ÈÁVnrö¢È̾-Ýá†/ÿ‚•¹è2Óçv=¡±v9jÈÊ}.•Ç4¢Ö²w;&w[Hý<™>Æ,"õ©w1¤g&ûûX­ãÝ€-éö¹m¢¿^°ÓÄÏ0±f“,x*SÅT \nˆ Î…Î#‰do\ػޅr¤•ÏÝÂĬ—mO~·Û½I£}òÈ5c°ýú½;6“—cH”Î&ZÓPKj/z“¸­\šus^$S”ÓÆh0"²:YÜVù^)ÝßéW$îµU¾]f5aÚÌc*ÈL±LÅ`¦sÝàÖ­€:éZvë•q‘»*ýRÙÈz¿Q)‰JÚíG1KÏŽÿ›óGŸT«TNc¼íõMâFaÄ2ô„&©}ôHCŽeirÖ‰& Öuɧb‚Ù2]rlØÑdŒécBGÏeàŸ=r`Ñ#ìnð>e¤ÚçÝ%AH bNH6¡j\Ô1K”eQQeë<¶ÓD­ü»³Î\î‡ßn]²Ÿf9? ƒr»Ý$­îêqà^Ï“TïH2è#å*K@s?Œ·ûµ7Ò€tØ”Ť—³ƒ’ý©îû´£*âàq÷ò®<ïÈá¬/hìûÝFn·‹.‰~AD½JpxŠj%õÑùzuÑl äó¨²Ërwfºx¢D–U­ãcéÜ1fÍ1Ûm?óãþ$ƒýèbÍ ¦wƒÃw¦)¼t¾‡o§oÁüò¹ë ( n¿6}ÛÊû§.Å èý‘Y»ï}ÜüÁý ýPeçè/~oˆø3þwÀÿüÎÜ7QS@âp‹ºFþÆ k‚~ußwõ ¨½øý×û ¿¼ÖôÝGIç  4`Lü¾ Ã½yø=Á•3`B|åvºÕ©ÛtûÚïÛ[ƒ®†âp%¯¸TÝF7±#ôú ücÇ"(9ÊíñüeAæd7¦[¦º¾ýüÅî°gØW°+t#¾$x¹#`òé˜dÆ:„ Ú¾¥í(¡A÷µ)Cöy8:Mرë¸7qt|Ëó«>9[’“Í]8ij½ääœ5WVT IDAT$Ýbeù2•SØízÇn¢ C~ÀÀ›f¼áb(_á@5þéaeß­–weà*)z¢¹Èò°O9™)EYeÝEÊ¥ÈÔû©C?øbœìvœv@I6Qg(Cø÷Çé;‡ÍvžÓoGiorEŒŒÛì(úl­§¡{Ýc\»ÇGVö.g)»ÉÌäÑKuï»Ráå”-Ý'qÊÈ%—]J/r~®ì™¬iŒ6ÎñÁä¥Y°ñ»1ÜÌS†n‰® 9Ý£Ú¥®¦´nåG‰UÓÈN7Yyvúç?ûøó£Õ“J(Œ;«¯ÝF?-¼lhLüÞ 6‹c¤IcR8"&*XbD2 }w®†òXH5Ë Ÿvcb„ ŽÛ!¡ä„Sê%‰ìm¥z2”†*NÆD2…a•ç™beUͺᚇ À„ã¼{åãó­-Çp$â2´Ë­.úî ÊîÀôDvÝnnÆJxÛºåf[ì“c3?ñÎr»Ù»fÁyj Ã7Α)‰3Ù’›^lfŠÓ$—3¾mÃ~™¦Ü­}eHWï#íHªoìþe¼~ê²™’uK°0¶†ˆ‹%1nİ3ÈMY"§X(Ô%À TîÇ3Š‚½.OTR„A”ûÝH(²düþ9Fó%ƒÑ‡î¾f¿·=Ï€?üÏð·#ð‹<³'@%±6ïÂÎo¬¼ßrüþ‘rá±xMAV€“pç¨ß÷‹HýF:%wòÝ«ó&ûAÀw"f´À à¨Ý;~è¿qoI˜ßfu¬ÏYc 0È·½1Æ· mÞ1¾eöûwó¾P])زÁE½NÊ"4?c·: ë.#= d¾Oã‘e%•Ãä®/=kæHj”aõI’í^FûÌËqŸ3ÑAO†h`$-‡#øëãû M¹ô!?rëlzýwéßA˜ ‰s)EgälÑ&OüÁ„Ô·–V½Fv´êãbD=Ç¥f—]¿øû¯k\àϳxR³CÖïNÂt4iyk~Y]ÃE)ŠÖ³"ö‡=¥ úON#;…){”î6_ ¶$ÓF•E¦š™ 3êhr Fwõp1¥¥Dgyç¦;Û™Ô€¸ñ£¶mú^æÚ²‰9¨t³ñ?4%.m6ÌŽÕØ’£b™ÛI’½Mv£|´¬‰¡›ìø›uüxy¢¿È‡˜J¹.DŸÀø» †‘ÙÛ^‹^Y–y 1gL ÝSô†ì™âlæmð΢I·±ìΔ:H¸#ŒÚ„³¥tTáÈYQŪšy2/oUeXvtP>:,‹Æ¢³®ÓÝnß°¸âìÞtût7V)MÈ•fŠ..BHóDÒ\Vsq€°H2R²– ¦“¸G5L&i•&¹¢r|%YGíwú–ËÓAƒ4Ð5Q2g)d%+›2ãa£žÜnßm­î±¾1û›),ö'BÑAä^”jjy}‰ S½k†³m!›aº±$X!b.o»Ʊu»ÔÌ/çœâ¯¾¬³'·V'Âlýo/W‚¯óÁ˜Äô †LÈ|]êßø|¿ÒwLß®à·ûƒr1Ë¥ïÌúKèBfÁ” Ù°0xRb¶ÄAÀ•\¼’i>ÿ9ÇIò<ßÍbóïúM9æáu1 ¸ý–cP8—üB{ƒ xümÿò°}ØÈß²åí Ø;L5ÆÅ÷Dqþ>!iý0àÇQ ý[9*^}>êÿÀ`úG§aÍ÷/®üÁˆΑ] 0?÷„¬ñÞcg?HùÜ|€ºo‰¸ÿ_‡•4ÜÚ—ð ø?`b_«'B‹¥»WƧöªÐÒº© ÙŒ¥ÉE²|qÔâe Lùãy•"ܸÃõ„™œISóäÙT`C^‚Ñd/2{j…E†º<9ÀTö‘تóKùJys)‘gr¦ÎO|ˆög{’Zý…kþÆwÿu)ذcW_'^{¸7¤¾wä/Á w;´7^®=ã2„ãu¡õdæ¬ÏÉÇ£œÝÊp7gÏDvæ* Kw9ÓIŽàNF>›R1ľ&ÓŠÂ[;ØñÙD{£”RÒ6d¯9< µöy7ÎyÕ¤&QÕ Ón»Kt}"Ϊª˜õf7x¶êŒƒ¤jëL£“êòZ çHµ_ZFÜns“¿ž§{"l¦Ç›“<‹eÆäLf#¡II2k˜á†-ˆ’ËQqJªìx䫜©t¾_Å”qÊŒ YÎ’,ÏŠRÎé,$âiKÙpA<†‘ß ¢ ±ÊsJ¬„M^Ä‚ ©‚àH¬K}œîˆB™æ*ÏTd3ç3¢´¢!"Œ”O¤×Ä{ŒÃ¾+*›¨’¡Ò:¬ÄšrýŒä)ÍAWž´VoGëõ0¹½ÝÔ¼šº×v+:1l~Eú_Õêsµ¸˜Âão<9Ú>>qí OŸÐ¦é>ÿºìZlg¾tk-·JŒ®²I™‰bÓIßЃ̲tufx2ÊÏ ù³ëôK…J/ôî=¾˜<úåqœÏ”µ¼÷;Ŧ$u(“‚ åÏòÝlKúD·@ï‚5N‚]at;©é9ÂE„Ù ›ÞÌây  àv»Ìù§ax¼Oèiqn¼WÉ[éáCÆ«âGŽ«ÿîâóîÀ÷sòïÝýûdßo+ÿ‡/ÿ]¶©ùöwŸC O” À(ÿû \ÀþØ3%€¹Á ¼Ì=Ç#SZ,nÁ€µÇ2>K2yÖÐÏv˜YT¢§ÇÉ xÜ'³Š!YoЬ…%¢£év,Ö8Fêj‘Ÿ¹£r0’?§M’°EK/ Ûm<°`˜!£[z±MŒÏºÊí"ºó.»¨{S’Z÷µø«òõ5ã>9)úm>6 Ê­=q(äìnç1+È4»›¦9·óÅv„Ä]ç÷ÆìšånæÀ¬K¯;· 2#•7/M8Y¯óWiÑÒþqÒ­âÎí·}£¶cžèX¦.21ã!ã*AdYÊ‘4éWœÖç¹ë¡ìl?¸û1›qôîÏýŒ”NÈŵŒ%I? bõ0æòXðÃ#¾¤ý ߈‘È”PÚÈË)öÛa3¢ø£ãê¸*²9YžÕܰyÆõhŸˆ£Ì‰ ”ÍÄàx6‹Žˆ"—IºÈ–e¹ ÄqÇüÎ弈!Ö+,V2å¼jxá ˜ã…› 8û5¢4¦ŠÜ&$? YRLž³£ÄHŠ˜›M3ÞI‚y!¦c7îªx'µ7âØsÚLQi£b7~jö–:ÓÔý¦6·»æÂ¹sæìöÆŽk›6æ`žú÷©•*}üëUg¢7­Æ@Aç £¡X¬±¨Ä"Û?Iþ–)d`5H ±‚YÝz7»«’ræ¸ìÚâ™]ñlaµ)퓾tX¸éÌ“îùqøx¥ž*õg](­9°˜¬Ïáÿ÷dcrÀ½™‰y¶Á`1ØÔLÂiOÙþ^-!ãt’Y/¬Åëz©÷™N ÷o)KÜà8$Œ~@¦÷*S¿Ê?Ày›Î€Î¿‘Þò^ý^Ô"QÉ øL˜Òļ÷}öÁÉnÿ˜«ù6G0`…»þ-sÀöûçó¾ï6sàè7¸•0àÄà» ÐeHÄ×òzqz“e="`?‰á°¾aI¡§åœ'‘w±`sé^ï6®¿dP"âõ—‚’“UnáPwÚJo 5NŽFšM—>ë'cõfFÛð €<ÇX É~É%¤„Zè;£Æ½ŒÖd9FðãD;9åÙªÔÇÉér“ÿÛ„ŽÅö+óå§XaAW¨ì#¡b¤²wRíÔôŠ$ÍvR›æ8ü?ÜÔ²{yóEWÿWÃJíÂ-‹ãÓÝöõ¸É†(×+’oêd£F·ÎG -KÊ„%ª¨”È OÙÍÓHRŠ„°~ž4Ä5‘Ùƒóãž&¾ê= %½m;mu%ØqvZoHQÛ!íyÚQYC‹š±ÒÉàíÁ˜¶[ÏùPa§u i("9óÆ$‹Bê‘i–«IpŽÉé½nIW'°Q$dØ!'$žÏ‰ã‚Í!Ò$`Ò3¬ç*r~PB§ÞÉTèŠ –r"££ 7%4‹”ï¹Wý¸jFÈ Ëäqr0‹óh\Y°TAÜÞ`»‰“rAEÉSÁ– kE™ÞDW;"ú^6šz>tC¼3ײQ*ñ±-é†õÓTÿýôÅSâGÙ„ÅÚ¿'FÉíü¸¼Ý/¡b+Êþ¼J/P˜§ ëSl*¸G’¿<ùBdõ^eÓ¸äRJk&ˆ¿ÁlAÈQ–~JÇ”ò.™ûÅØuyüš«ÉèóúzY@%F0Ì"ŠkäÌ$‹–凇üÈv9i¥vá{bjeÞl¼þaËßîå+kl{ð«=®VöYxù49ýÝ‹ÛLŽFK}ëú!ì–À1зàÀø†|ؤ¹AÿejѾ-s9p÷¦@ü·gÿÈ7ßÑÊü°äé=¡ï]€¤½×dþçÎ7|XÌkþÈ ?ÊÝŸ/Öðæ[sÀ÷5ÁÍøÀ/‘oÏï®olXÎ î FÀ;Ä·÷¥‹Áì5¶0w$™@€eÍÎ-ã›|±¨È¿rbÎp¶-ÄκQ]ÔO.*õ‘âòe3¹µ 3·­NY×Ú˜ÏïööˆÝ>QËÂlõ1ÆŠä:EþQÛÿæÅÍW†æDš`ªŠÀ8ô»ß¼6 tÀî´Ëó1ËÈa‘{šuô_Kÿ¿ä{Óf×ã0ë¨ÕëøÅ(Ê ì|±L CGmo¸¹¨¶ôå‰ñ{¸Á ƒ‰³ƒ—åâç$¶ÛׯßmÉéõºªŽZA/ò˜¶Õ"ÉHÉ—=Ï;¾ˆâ‰ùaˆ rE Ì5Á&:È­¤õd¬cÕÉ”œvÀ¶üxd½ÃÔhùNt>{âùB ¥ÜIY÷Î9»È÷ ÉvÚcã°KÉ\SUíí7bXpq®H’›Z?ó2CdRs6D^0j7:¿÷½5ž%-2IªÌJ‡ VÅœ[)=ͬ/#)|Œ‘aÁz*¡†©<‹z=ÅàÇ^N™ãÈXGçˆÛU\ˆ$ã¢È•OºÑÕC¿7ž˜6Ømè.G*c"©*£(Ö‘ÎGtãëÞ͇Ak1ê¸1~Ëä»Y‰l)2¶û“–Æ¡eºöƒÛŸq&ñÍ‘mš:½Ž¾;%ý¬ô‹dv•]-1rôÃÓû¤G÷ìnD6—ügç$\`0XI}RŲl5î¦Øé39¬Ù«^[†ptj«X‹A‰Ið$B¦ˆ‹Ë¤êf±òf:kýkþF0Zƒ3¥Ž)³~]£¯±½h­× a,Ù¯M¿` ž#5hâ8{ã©°2À~'¼÷5(44`ðä/~¯7À–}ûìÿ­ˆ²øVìþSú×Ì[‰á{‰~SùŽÿètJÿIâO½g¿?_¼ÞvðäÊ^³·ºW˜fÒ­ß÷µ7“¥îר><Ê z@ÈSµNÎì«Å+9Ž™þy]+6ˆ¾¡Dìg£ÕúŽ~s² ‡I¦¹Dw¹l‘•ŽÍm|T«{È&kñ連I„£Ä¬&!Á Ó ŽjÜtîKÀÌïˆ×ŸØ©ôÄUyÁgfúìö¦ª;_§ú²® 24ù'¿Ùq)g0b¸üH¿¤â $ƒð9v`Ž`•éh&@Cg¤k2–5XæÊ].œtãŒìXü6’ÛÑjåwzyàhJœeƒÑ|;M]¼fåoào7Óì’"5‚®q·¡–‹0Q[ò=ûUcžuU»ÏD§ï6õ4²˜üÐéò.oÇèo°·Ýlq0A:’”f•2p!ý>Š•Ã^-ÃÈg 1òҕ¬N‹jÜÖÝõ’Š”3–.½D;΃„䯗Â1²à5¦À&G‚‚ÒÀý$¢ 1dzÒº¦5*ƒ’ƒ™hx’eÐÑð¡õz?L¯÷ýÍþ¦Ñe,fœ(™I%G)8›ìMô·t?®ö^>s¶dtVlT Ø‹q_ž,ýŒRáÂ`yé#:ÉÌsJøË8‘h‹Þ•G]”ýö7liØŠuÚº,Y•ËlßQƒ¤Å‘ß‹YúÛý­Õx ÉC§ F v(èçOÌ9[+Þõ·I{e³C2TíüÅGå±þÆ™=ÙÑ â<‡MäßecCSÈæ.û»* @Þˆs\_,…­lÿcð»x y‹Ýq3´õ»:" ½‚–ÐÐÈd|7°Þ8 Æ÷á6‹#Ü 7¸zpÀ™âÓö~×?ðhzÞ Êö½G^öLc>|Tÿ'Ÿä²Ðÿ£+þx™òéêÛ~>Þ}Ë–ŽJìßmó÷ñª©÷²Þ4R$@û ¦ÅpRióø·âRâB‡dLÔÆ%®jífŒô”¼÷˜'Sî`vŸ“#Ynv°¡øÓtzJ›Ù<¦¦tËe^5£åñvìûÛñúM½ã?…Ya³Æ‰P>Çbõú“Ni›>GlaQAV¯ë‰×Ï$Œ÷:8½Ù/Ö±‡6Ó=]?—è¯ÐlwÅ_V¢IØ‹*…¦òV˜Ž O@Ï»Y] jàñ%€Œ CïýóS· ûãYsÈ6#Yn,â$@I:zb/7CTÎ lÆ›»ëËþ;¯:?6Sº’äÏÖIº‘íëä²DY§B‰Ü-Ò¶Æøï™³z†.¹ ;DuÄÊ-ówEWMÉt€¶‹7ÁVÎU)+ÑR1v¶»b—i×d2ë˜R2#'iz˜$íD®îè?"Ï=ÏM˜ñ%!^…=áŽHG©•ÆGâ´ÞÏ#ÎêAÁPm½{ØšÎNó~¢.ŠT‡AtîNn³ê!^ÝÕ×Û¢÷sáyáä|Æ“TÈÉ¹ÎØ×C½—›\~‹K1‘(ªÁÀ}"Asî¬!Cö1Î,ù8ç¾+}hÚ±¿Eû$ ù¼ýüf)k᱃øš-åÒÕŸÀüòe‡Õ DËû=yq ­_ó:gf ¸êó”þÙAÁ šY?ß®§¯¥“9ã“ôvUR&»m?ÜHh‰cOÀоb»–3d"³Þ"“ãBœaáU}Ž€Òð¸Ç¸ò÷¥ùÃÆdòSøô±¯f%¾–MK=zO:¯‡çúÛ1Ñâ݃µõ\ê`„Cx‹ª¬ß8¬¾¡©¿#\<î~ˆaHÞIÓ{bˆÌwƒøAµÒê«ËUÝðSA~2_ýA<äæžzÊ…\üAð×ôØ ž+˜I¿Ýæ P þ´ °)Põý#s H\V¸ä8 8D 1ŸóýÇ¡îÿèS¶Ù¶­w¿&Fœˆí˜N¹Ø÷QaNžÊ"äJGÑ0šõlêšp;tÐkd€’…SÙ¸úyb٠ܧPþ(Ÿ’Õ×G>/Å4­—ý/©Añf;È5Ì=º›¥²%¿Ðæ×¿9ŸÿoçH$@¤îÎïnB—‘œE–ð;´·…º=8¤øÙ{³&9Ž5Kì¸{„Ç™‘™•µ  (—ïÂÛ­ÖXF#“4&™éiþïHfzP÷hÚ¦‡²&Ñ—$ ‰¬Ê5"c÷pw=T‰¥‚K_õmS`‰ØàáßùöóI']Éf½×ƒn3OßÍ·¶î6©¢h(\.eiKÒ·j›m•~¡AÖ„fuIù¨­µÕ-F“FʹšžüwKÎçî>.“ ‘Ò"µ¡€ÕÍkþ¿KÿîÄGàÀý% g¢í ŽfRHM×Àbâ;¾ÈÙ^ “Ã?ž¸‡¡ûšû² ‘ ʱ=n,‹´QUŽÝ&÷©¦¦ÓjE´ïˆ±¥ (émäÌ …QRHÕ S×%°i#ÚF)çÆ”±v]pÑrÑËq‘FnÇí®kìt —tñ€çy¿>ßÐeëž0° §w¨çöÐ&ïøeiÍÈÜap´ÇT›µÝ‚ h0}n Kw¼3׫¾²Ží&ê—GBæ<*ŽÕ%ú®i|»ðUÌÇ5ü¥#KÜ ó†ì6vU"gÈø´æú iCâß·…=Œ‹Á~p慹…`ÈSM+¢÷«…Õc½k¨õe-lPcðŒpÈÛаÔÕ¿wDwèò5Ïô™Ä>0†0xÚBT€ð)ÐÕx P˜ïj{†À=ë)*?¡CJQæò—]ý…®;kÑwXØò¸Îgßj!Þ¬C¹Š" òFéûê]b›æV›ï;Ö¼WÐ/ªk#Rþè˜Ê;Ãám¯÷ç¢ÄOU üçûVï<ªëì€êõVë`@ù>EqºŽù à[×õ˯¼˜þà×ý÷Z„àÌ`Ô5$=…“€H5"dVC]â˜ÿ¥ö-t;}žÆˆ+'uæØkйvÁÛ\­©¨ÁÝØ¹/DŸgMw¶,ÖµÆÞ}èç°ü‘õL5i™#îþuÇkH«YQ´ZèºýT¢‹’íf,_Í¥`°”¨Ý §í,épÊ…}‹‚£UâüEZƒ{ÉC9Ö®ê¼:mÆ~zHáj¤:Ù‰ Š t-å·»L\¤nFaÖ¢Ä.…Xí6çÎÿ)íÿíA2&I”psÚ:…KÎù%½<ÖðO†S‹¸íe±Ú)§¶1ÛcV>'—HÙ2¶—û¬jwCG'woþʱ5)·¥Lê»öúd0ñ¥w³Ã ;põiG÷=ÓŠZ–ë°Ê6,YB-‘u­î©P”.5³¨"LI¡IMˆ`@Kd¦›ÆhÙ‚Z¾-:UIaÙWY‹"Ÿ|SN3ªö¶bäæ¾-ÊZn[{wö·"ù…XúîÖQ[ VŠ»†[žP*˜Ãœ¡Æfô–[Ô&½?ÛLúN­¹~d¶å¦[Ķaf¨:iM\™Çz&$s»©“Òºc˜t̹õ ¿!•ú¸õØ$Ý­€Gp—@ZVÊ0÷[–Á"¸”žïó}áU™¾Pu_uwšt-–u|´ò¸FxFçÞnnGÐüÊGcaP#6Å'z,:¯~D_VùËogywµ^•ú@¼vÀbŒ®Óƒ£ßUùX@ï6h/¦BÙFÁ\^ÜÕ (7@#‚«¤´ 3hQߎT—ÜÞ|‹7psœ¾Âš÷ úU?ÙJ~ß…Õmí_F1%ñã#Ko/Çwñ8òKE¨`ÞjŽë^§ÚÆ•ÈôºÂîÚ-¤@ZªDýS*ˆ¿‹B®ù«…°æÚͽ*„8…ö J´;Ô ´SazÔð“6»ƒ\ÿª©bYBÏÀŸ•ñG©Ì<­wbEqëxÄ©È쫺Y¯ Â\€<„l´-ÖAÚqð%à ”_ˆ~4ãõÄFÃ[l ¤ÍÑÿ÷¨™K¿Ô'sÙ¡—œµÂ4@‹áŽÑÎ`Û‚×aÛØUŨSP#Ó®ÕrI»Ô_†¹Cd1XíSi:àå|2„ãòíW]½ßMbw™V=o7ù$îöΠ€â™]lj=ˆÃŒ™¼ÙÛ†ƒ=ÉI«|ØF¬l;i¶wúµw9iwž«Ýº€­“È>°‰Ïþ¾ÒÏîôŸøaà :æì†Ôù¤//yèCÀÍÜ‘ËoÁ²q KO{Juo`‹Ún¥FÞöMIW©¥z¹µXÌÄ:I×i"u’Ú–’–•ËþRЬìúžøvã)P»°µRõ¦mº²ªæ…ÓJ¯âÚ"…iºp"^š‚ IDAT{Kˆä^—z΢×Cç@ÐÎídêC[„È5éuh7ƪw¥-ZxžºMÖï[’´=Ê,œ‰î.D2®ôȶ4X7ü³l‹:î½Æ°a|à ÖxÑ“aoƒE[-{ÂKm3’Y8¡ÏÜ$%ÑÅ*à°¶9 u½5j. ¤ ÕÿbÈ/ë—"wK›ÓL8îß?>P3u.¬à lÃû‰ç×û^ë€5Û–?Ímôu²À°áRx”À<½a¬qð8¿‚ŽúÚ¤»æÆ¿„­a·°rÌ9Öâüû‚£í¯fv½=^io¦€÷®ÂV| tÀã[˗䵦{#4ý“­ä÷]˜ÿò1%ó*ཅ‚·žüÆ¿š÷^òæ ?VgÞºâf>ó/“í0·Y¿wÁ®§uhÀ¾AsG { 󞄪ï|Ï›÷‰nJ˜À!ß±8]‚î|Š–`Ç  Žˆåí´w9·Žzß·/˜Œ=âÂŒ*lØ¿mÙ¾œp‡­ YÃOjô­7ƒ³ê „€¿ƒÞ¢_s·pH±R¸Ø .j¬ »ïÐŽ¨Íý¥Àˆ¡cÐIFgûó¾å'å§¾êj<ÞX ÕñÈ=Î^¢W™„GnìcáÐÓáÊŠÝ–4iW£óns`À¶ºîSô%±mx6ˆ#Z.t}Õ 3·VU–fXã>ÁР:žÿêt;öýCáº;ŠªïG`Qø²gz£S2 =£þÔÑb-†ƒ¾%¹lªŒmÇ:®É˜‘¨¶÷WtöÓX¹Ñ•³L |K{}oÌe¥>Br8ÔR%Ý]P~×#‚ò°U;Ö;å­Z×–æÅºzþ’Ь Ý®öl™ïݱ1NJêÉJñ¾îhUrÛËÉ´NëfÓªN F¾ Ï4–Èû¶V•)š±PÍHç‰Õ6ãoµ8ô~O\nKÅ6®öðûèø©•,Hñë¶èx£t'*Õ‰åØQnu¹ìfog9Á‰}‚` þÑ3³‚L Rý~ELQ“¾êOîåX?1Õ¿ò&®=¢ŽÃéD³¦uW§1P©ÙZÁ³·†5Ò{@6®ÀÔì§Ôû»‰·ªdH 9¸8ßWmäE¤Fÿ¿ùÓ‡”pBþèÿßj.Õ…slô³á@܉f¡ñ«á‘4pI6D}à}zÀ&žñínÕ²¯S:–õÈd‹“U“)L¡ÃG4ŸÕ×Èk®&@^ÛÝß‹Åuƒq ´˜Ý^Èr-eÐPà.VWò)€×«BnAwq=y¾{Oåäëç-Ø"q8w¨ßžÒ#~žyýJPü½ýÖÏU oúy¯ÁMôœ¼ãÇ÷]%@~¬Î¼õäßðÅm-râçe;^?“Ýxo—¶â4g.Ћ÷•»y€ \;ů<¥ø» Evâ€F`!…KCÌK‡;ºOAHVKzÙ:-Ø^ïŽ=bSwÀƒÐ3ì lñ:ÁÆðF«e¯¥A^Ã!š¾úÏ ù+˜ö9سÒ| gõ­´˜ï6Oõ7r®|r<ðl¾qû?øÔþ$v& biÿ¡v³BÀgôÕZ½5¤ iAs¸ÝÕäì³ F5âm<ž†Â/PÃ|ÀŠý?ä–€ lð60¹ê5õÑ”â{²©«VÁ÷ -d¶ú€Ãh€`Ân€ /˜À8ìíº©é«Š<Ä`>ƒûD0·ˆäÆrúÎ(©¨–lÓWŸË<§Ü‰ØÂ%w»64 3­ò²D¹Aólƒ²ÏEÝlMؤ±Mo5±Ur½hsVí7J÷n¹™üÀw-Ãi§}Q©T5¥›U§dÙ:ßè}K»UÖ¹t‰Å¸e%NÉ:Ö¶¤mùºo(ëƒVu†tJf´ œÎÅ¡ÀaAüÞì*´Fµ¸Œéy—%«…t,ÐEŠñ^mÛÆXr±2߬kåm÷EìO츒‘è7N g°¨B«±÷$/)S§¿HL½•çÍ=o³´U^‡aq¾Gšˆ"걯àN욉!ZnD@œû©À7%ëkfµ#³­œ:àèä¨)ÖRˆ½íHÙõHù¼G¬ÊcNH‡¤'‘€cXcèÎëYh…L1¨½¼÷µ/=>s™±ûæ4ôÎŽ|ÝŸ=]<÷åÄv4e1ÎÁ¿“zãn=àEËw™çÜzUy ü;£J¼)òÊ/æpøMLèVlm®ìýWÚüˆƒzKNÜLsûE‹?›w‚ÞOÒ æ½¹òC)„.ií×ʯþÈn¢ù¯zâ'.Û×=ÌxWšú= ¸oÔ¯Çldr|CÓôVÆcdŒyÿí ®²ƒ»xÖ6|ò%Ô½mM'=¯Dü÷Ô½cOb±OIRóß•ÇóÌpÒ³Yª)C`ºÃê,w€m£-E}Ùîlì£&¨‹²‡TÜã¢P 2†ƒå R™¿– J ¨9W86匋µÀ#8ÆpF"±×òdǺNíšOÓ.‚ û©êÉP¦p' %„€„cÂ\×Õp[³—~°w¾·¬Qeg¦ƒ›p?(Ñw6©4³´åûI®ö‘gn¤´WÃyæ¦/Ä™¯÷íâè÷HŒn}Br‹¬ëÎ*Úîb0˜ï&rí”ÃÎìåI)í*k…wÙv<¥*j;ÁG>ü¾jÍDÚ=XÃñ;;0¥Ý­âEi¾&ä®U1.xÒj¥éÌW ^Ç÷ò¿eÕÑÂüÕ`üP°¸ P­ÙësWÛš:ÈÚÉÛZJU1áј2²µIeÔø¢X¯ÕéÚÜK¼dje¯7dc$Ä[Z-$6{Ð:ÑÓi9´jR5p¸älgÒ~r ¿¬z;5²Ël/K%à–¦¶À]àWVÕ'ýÙ‚=1öà÷^»Ôu [K»ô˜ *y¡²ÇÛΑ»ûíÎï».¨‚™§…A[\0¡r N:ëAÕ“*wÔ2’#&~²Î­?¬,‘:ºSDŒ§„'ß·½®$GqM`wöñ^ÿ†<ú ­ŽÛbVÕâzÒÖ-öÜûòÌï0þ^³MoZí’›€ò+Œ;ªâOëS Ò㟸.¿Ñóãï,zñó»+š«©ï¨ 0øÍVo¯ÃU[ÅL^…žüÛ—hñ]î!¨Ð ,9zŽi ·D¼¾„g»êžíöÊtmpW*ˆ4£V_{…=˜0fÖĵN±Þó±ëUŠúc58C‡»Ç÷ \bæaÇ|švŒ[`‰}@«$À°ex¸Àx@GÑ2Ñ3¤"­o53hñ‰ÏGÖ§¶Ý¥¢®-sX;«~ÔK «Ä±y¾€Ø"x‰ u&UÒ¥¡°òÔŸ#zº÷ s™\Xjç \XDhÌl*é2`ÿ¶  BâÕü´_<«G}4V¿Êh º]¹èšßî‘q‡$Õ‹öDm|†YG sîË%«÷‰ºŸÖF" ƒu­Ö}žØŠwÒ~ªxŸ1kÓÎi\©Š2‹Tƒ]g/$K(-=Ëï=ÓÀݾ8ê…)ƒo˜õÔ¡a¼ûÆÏa]¦¢wü6çZ=tÅ‘`ê+±f2ý-Ô¸¯êцy6º¤/ Ú^Û|›FyöhM‰>ü¦wÌà.G|œön¯çÈ<¬‡ Ç]›õ-Râ%Ýà œž–"øÆ¸]jgºÇk‘¥¸/ Î à > z è),yPà7@Ò7)k K@¶ !ÝëM´~¾Û¦N7¨õ—iQnV%{Ô–«‰zBvX„•6<$ë»!$mÛ•+ÎJú²„êŠä22òºÀ5}Š‹Ç(øDÔ×ůRJ¼nu¯Ëšþ^NnÇPÌ{Î ™¸x- À8Þ}«ïòÌÉmhþ.ãï]Ú"½aþKi|ßMÞÉÑý½=û6QŸùÿV[|HføZ»Í/˜êàB¾‹Gïýß즞àõ%””½žè~÷E€º²wD„Ïœõd7ˆ¤èà@9ŽÿŸu 7Ì2dˆôsë,Iþ¯ƒIg@`X)t Ýí5ÒÅ eZsXßÍ´>@%á›Ú·8ïÇyO«U—^íóîj¿k°ØqˆAXH78õ5ÚÕ‚+‚W5 u™Å:4Žà_åä"¡ý¸÷ýÝ´Øz2Aø FËê>ÖOø"öÙL84Ykzo@xP §Öq`¡è\17 qÙÁdÃce}L„=ÎÏtý£¥ò`­=Ü­°Mï.ĸ )í³N—}*»&´-ËèéFK«µ÷ÀØ„íE¦´ñ\Qƒr~`×Kk!Ö»Þo”<°{ï`"æ,ôΗ-ø Uv ]ƒkÿ¸q‰èXJ:tò+´ =` ½rκQ(‡D8´½¿ÃdE}†<¸Í¦Âp c¹64ëöз¨}Œ‹œIƒ äÏqРɷ¥s|~è¡õÛsJJè¸ZûbVs¤ÂD,¡Æ˜h¬•›)ð—Àh4Ä|X£©a³œîÕmDÛ -Äv÷Ç/zwÒ¿ÓGÔÛgUa‹¿›ô(3^×bWán|š&ŸPC«-yV²ìÛür½óðrÛ`dÐó‚ð¸QáïЧØ<¾Ú5À<ôâÕ)[â‡Y¿G9á4(:a¿)È"óÎÓ«™XoßÍÁ¬û <ùŸTón ÿpþÇst“w×á½…F?¡4ö'¹B¿hõ/¬ÏÊ7^É¿òúþ£ú>c‘}È:8î ;ñNmçS4…°š¹L A›` Á …ûÌôôw€†…^Ÿ´ÆìI³„]C^•[,ëÊ©:{þjÜŠsdÇ 3xâjo­õc÷%C§0íî ;E}öª!ÄbN,±gaF?3ñ)JÀIÑ$-ŽCX'…s^/a¥(DL#ØÔ²R;½ Ì:g¢µq‘~Žz ó1úqîhx<í‰U³F‚ÅO„A@8rÞ‚lõÅ"+II/] ÷ ød©CjmU_Úcá¹áÛÞ^ªË':ø×môQ?pêMæ&p:ì‡-g¼¶:%¾ªÆaw³¡ìUæžµ6Mµ²êÀUVh ‹‰FÁo¦ëÌò2Ù;[Ûm#ß÷øEãN6+²¶† Ž:t3bĉµ eœf÷^(ÏóïºïÕý·èJ8½ííŒü*¬d&:•¾ˆ\ÛAÝég$ú Èm®éÆ»kyÃ¥2»²A¯¡¼¨K"=j½híj8]èn¤"³–Ü(¯²šœT&µNwMH³UŒÔã('½fàȤت»ÖÜWbýénáÈoY;þ ûíÓ.ÁòcŒO >‚KÂuº1i*~Þî+¹aÂ2Õ,hÃAœÄ{\×Ülx¾ÀÈ?âÁÄͨ‰[w\9.›Eó—¶£„ƒ.—›g_Éâdnu,•WŒö¿Š{!ôo&ã©(iïö&º‚,åØNdݱ$oŠþ)9ÙôuKZ·.ÇNµçoX5—ùQcyµç1›Hq¢D`L&œo!ÕÙÎ §ïµ© Š—`³¡íÅm$J—²Aú%µÎÇž#ÿÌeQÚïþÞ$øŸ}º¤M¬A4(ÄZ/ÅAØò¥Ø0r¦×gØÀ(ì3Ø@'uR¦ž AÙ1ƒ`bÕÆv£"˜5 ÿe©7_{É}3ÏÆVajAž‚²pØ:·¹Ûrç~ç?°Ø^3šfÌr¸ó=éümU‘¦$áYç&»ÌüªX»_Ïý[°ûÝ#–~0Š%^ûÜö÷Ò [÷CÆ…ÍMg686àáXâØ€L^ͽN¥xÀghj 6ihí <ÃÁDlYCôÙØsÄKHö81u*ž#LG_A,Cˆûm æxÇæ#éwËæ‰ A@ÆH ¤ƒ5Gz¥÷7ˆn¬óbàӖÞ–ùþþYW?ÿlX=loÏ÷Û#/ÔY!Q¤°K6/½j8 Øà„î»d¤è¶k½o‰^B«Ö ˦l/!±KáƒêÉ6…©V‡§ÞnBÚ Ñ, D²±äÞÀöËçÍp ;0úEµ„ˆ Ö–*'œ2æ NÚEWŸû¶RCl“ {.ò¬+._:1¢=¿«÷.U;»è,=oE¬úê͗¶S´P2¸k^´ÄTˆ:j¤`V fÆ_KÏØWÑT±¢TF O<ÀwÓ]³·s†M7Z[Ú±Õ’¬ÍÈyæîtF&­ßWv6Çú‰áG‡zž x äTõ5YóÔI­ÓÀ?ë¾/”xNzÄ[4 žöÀ’9PK(¼ŒÜ‡PˆÁ-PK‚ÔÂélߣ™/W¶Œwý84èE6tÎfG\† ím»2mF6õ½@ÑA>Á eBÊŠá>ñ&b8û‡#Û©RîòeáÕTð‹\ÖŸÑŽÜYÙ|›4†>Îpèð)Qs§ù[K`,î†Ø¨£W0õ÷Q‰ò&É›½¢<@¾srðUq#ûeúoìZ‚‰z%rÿV‡ù‰~χÇ]þÄ~Ã?»ã‡ Üb }óü£¯ãOÅrï–Wºý4 8ÄÃ+Ú( ,é ûÀb ¬€ëÁ‡GÀ§@\;è]9¼v@(³c—É}×öYÞEØÆnŸc Xßq¬qí Šƒ—|ÀFâ ÒÈþ-%Ýï'“1q³ÈÁO$ÌŸ|k/æ¶F¬ïÀXhïT›˜ó#?†*NU4*Ç»²¦@)á€uâûüØ!èÌn½K›†¾D¯¸ì%¦ Óbd’©ñý]MdÆ2À-b#ô%Ó@ ïfv«ß Ú´B„K#/`Û 3«9³ 8u¼¿ g.}BìKJ{z´Â|Öüã¨9Ð`ÕFÕ¶Ó¢Õ"ú<'‡Žå1¡ÉjX§îuÔ{mßlõ„µseé²ñËK·qðœh:¦ðIC,-ÝÓP§ÌË|—Vi:”]µïؿԞ·m•]vq‡]?iäùVÇùX“zÊÏÑ u;<Фºô{ˆ’[Ça7k!¤š«ƒ}ÃÕÅ#9ä6å âŠÿk8-šM9ê´T‹zÙô㦎£JЦˆ€ÌE/¸tÄe'€™€Ø³À';w’Œ Iš'«…ê°)|™Ûjë±Óv ·õÚg’` ^JÞÎo[-ÐëÔîP‡½èúH:‚Œ}š6ðò&H¥•·Í|bϧú¨Jh5ð 5ºÚlDƒxŽè¯Û;¶àe³Ù/`nÐSÒGKk1œ›êèþ•_ÞÊ"ð×É*øÏ´,àP×ïù=¼Ä€¹Il¿A?¬â÷'6ÿ¥qtÿ ð&ïù@yýN~G›Lz{—µˆ›§G?oòhýþÝö¶9p3usКìúôý}€ñw–¢ãà ¸¶ùe#vM8ظ2Ëö½0 ö¦ÔÒ•u›/]šÓbM¬šF>ªv®›ÓS Mÿ üÞÆé1îx#GÆrèݵã¢F­H:EÙ í‡páÌ&Ë,œ§´:Ðä\8wò3á€å¥mn&W­Á ÖÏ\‡ÉÔÒÜ™|ªlS¹63´c †é‘Íl¥ä*C$uÑ"¤EÁgð³k®b§Ùƒaô­Ù€Í »kÌõâ!ÓÞ`"‘£(‹%šÍ‰¶½ðnÇÚãKïŒXÿÅèã§iЭÜG؆)ïö¨ŽµçðÐ%8àâ©-?ïUùLÞol×ÁjÀæT"ë@ˆ>ˆ9Xû®}Á–Ýw{¬‡\3&œ`XFÿP‡Ê(ùËûËtÂaÿ~CÌJéÙ.‰óY¨ »û4ä¹Û¬’ºGÛ¥¶n]yCÑÝ©ÚQ 6s=ßé‚™o*NÊ~àõ^ ÌpA(vÍËt;þƒëžÛ7f`}Ð<­«ÕøhŽäf÷ºHzŒSîÖÇ9ÓÅPÈ)]œ”ê)Íîwå€OÎu Ú}„M²SoiùÞ|ÙŸäíñÕßœA`ØêA(º ©Ø¤/‚©ÛX§¢ÑæA×Ug©üö›ù@áa‡È ñB'ýXo«4-}© k¸;¼ÔÛºÅóW¬·õUµƒºÅ,òº—ð&ßãP¯¢Ä´ÿê_½Þïà¼ü›_ $Çú—®ŽÙ[QÂ÷{Uü{Óûç?úÕ~÷‚ÿ×V‰·¶gx÷l®]è7¶ØÀ+pÑÿx}‡j6%âX`-ÒónzTÕ€õoÊÞoc¯³ºŸy}ž§Nü¥Œ^®sD@‚ý ò¿EãZ‚ªiž‡ ¢&þÑ¿jœ<–V”ÿÆ­Õ…¿¾8· \L0e+´V8ì7¹ŒzËœwrçÖ¤ Ž¡gh¬EB!É®×S?v‹è¸Uµj§Ø|ÔbÏÇN=Ú¹{TÔ¢±NuN¶PÂ6É(U[ÑÕƒä IDAT£¨óþi8ã;*ôÕ×}{VYÔá¦/Ñ¥à@ÞÀµ**r1Î2ЦŽ[ŠíyØó{g–<{±ýuîåwªˆÉº½7¬ùýpÔÉ1øE¬Aõ…… ¥ÝK·@P@P{7žŒ*y–È«¦H/G/†£$èi¸Ì½A8üûêh°NÙ!òöÅšü.ˈUYr%BÅ]Rý3e-—ôÄçC&&ªûœc=ÄÇäDÏ‹%ú¨ý£Ö9]z²Ñ[覗6 lHù«¥p¨:­„}Ü÷¯*¨ŠxH„cÌ3X©Û'5Ä™E§B—¸q2Xµ§³ä¢0ê+gŸÏƒé™ŒóQ$Bûâce{Åe¿8þÆjNtã.àÔÆ.FÚ7~Sz9ÝÏõï›Ìå2GºÃh›ò.«Pœ'³¢v±{Ám<ÕˆZ¬¶–ɯF]½f½©Û[ ª·¨„Þ4Æßl†ýñUìØš+¹ûdÿ»ÔˆõƒgK¼5(TüÿºáuÀ{ÃÛ;鵕½-yÅߢä}ûÑï·;>Ø*a?HÅñÝ9( €[zp"`ŸÃ]A4/Ð¥×ÚD‰$烫R¼œƒÃǼï¨ÿ©ÇîHžPL?º,’‹ÊA1<Љ«M ®@p´¿ivvК&w³¸ïu··Œ9“Œn{B\1¬%cM ’‘¼6§[F1|Àë?ò¯Àr8{ñkº8©´±¤Õ‹áUÅêé]ûÔ äv²]ëß—·I ØÚñ!_b*@ ÕaŸ9«YWuJƒSÄ|0µS‘)Ü“9#E}vYŽmSê¹*dõó¨pmÿ²5ÛÊ" ŸœJµ×^(ò„:›åšO¹“HËñ4+ÁÕÑoôÑš×ÙîlêÙ»©©©ï^Âʵ›o‡Ý~b±k÷³\á+3|Y›~1ïœ: Ž+3Ûµ@'{óìoj²jöî=ùw“P¸¡´<å<8Yš¯f´‡ŸJ¸@¼( –TÁRZÂ6H4–@Žyƒ¹ˆð¢B¢±«ûX½ ªKÔ)€î'öw/Û,Å OãÆwâUä}­øÉ’Z ¾>h¦‘j_´'bÿþ£;ñ >k¬Lo@.WÅWbýÐlÝŽ—þÁzŸ¥¥JÒb”Ë[¶“,‡¼ìu^1¸~¿CÜBßG­2 Gã%l9Ï·çeäÚtàGî^•8@&¤ ó­õYÉÅÀlqø²òÖ`K4©ÚŠwô”½“ÒîG[?îr¢1X Ò?@àv»örß"r–¯(¶ƒ~?1âýç¨~Ô7þà3¯ãƒoï¤7WV¾ë3ÜŒúy÷Æz?'LJ}<õݦ¹m‚j¦kýñôÆAà¯Ðÿq‚ÄÀš¡ºa6W›Ž×8Þaöò;sc{öÄ ÛÏÚö·|'ýX[¡ë²]'{ÈÌr³¸î ¢Î]Gj~ÇCT™o¸®×ZŽŽÛatÀtDlЬ½É ë4Q;µb8áÍÔøÉ=ú`WvƒFìé4tQPPPÀ:‚õžzU\Ð)”Æ«N¦Æóê2YV'äebmÅ(õSÞˆîEÓrhwaŸšÈA…Ö”Þ÷E>ÖKZƒM Bj׳Õýv[‘T‘RG¬„soo ·b÷y°jršû!ÈŽË©œÏÇ‚K e ö"•þV&vT~ô”j¿0Ê—ú(èB»ù‘Ùsu˜êx¤ E¡5h}æD»Ç=Tz2ÏY)j*¶/QÊ»áÈ÷¨²Z”)¶ îžàä)l.àÄ>pùáªnL¤+Æþ'œ|Ÿâ ÷zf×+-ê_ÍL+°¶·²šWsÔÉûÞD½G™‰ûŸþyëñ'ij{÷ʾ;¤cþTKÀ€!ÄîÍŽ[m îB´.ÇÕ­ã˜B„È÷ÑïÐ&3"dèùÍR[ýõÍ]( ï1Šô¼âe ËGÝÃ!pÛpÔ­F¤ñ¤>‘GÚöºC×t¨–V yá+„­À­Œ»pÒa§F†KgìGŠ)ÍVN”º®QãaÛ"N*“ä1.ü( ¾‡2B»¨Ò=çAíßÙ Ëž')•pMW3^Oô—©–lz©œçMé5¹cWV­Ý DæÁô#eÁÖÐXŸóÁF8ÀÀ ±hD€ÕC8£M—T¬æ¼ÉœËY<¿åÝ‘ð“¶]ZuhkW§-Ü ¼ÃG_—隬¤šn8ë½HÄš2›a:õ°ÕT Ð!Ú\ÈW´T¯I “–²!u3…GÐ,ýJgX=˜dëK¶ùx׃gжkÁl>‚ î€¤€³ÆM¤î«‚ˆV´EgÕ"h›^M}oF„À•bðÈýÙüÆ#0ÞùLÖX>‚>ÚÀ•±{úûä“O>>íLwnê´Å¬*wûéúÑWõ(` Ô #'a#·ŠŠ/k 'HÌeÚjcwˆV°+×ér¾ö š`6÷qaa‡a‰nžnäý?xG¶×¸Ü•ø²èEÞ{0ªîì®ö¼ÚþU µÿs{EnïÁ«àì‡*Þ»›ÚÃôö°ð÷âóJ-â‡Î;ÌyÆ/Õñå[—'Wu‚&иʑ|¦ >läOSfü†²éÏ;¦ô'hj{ÇÇ~çâŸ6V–^oß÷'3`Ð3 bwÍú“‡°M!+>­êת5„º–̰7ƒmkˆô1šÃ_ã>;vËíä&Ö¬Œ½*Ô΀ò¾q¼r)é.DÙ~rßlrR¯ªõŠ â“,îT·íPdu°I×XÛq“sAâÁ;Àä‘=eN”/çÛ¥C­ ŽHÉ‘)ݶ±ZËI¿©Ýªh!ò¦°í¯%mHñ?Ø09Œ8ñœƒ,/èëÆÉN/ù‚÷ne¥ð8øq.f÷ l€8¨ÈÝ­&¸þ 0©Oÿ8°Ÿ¥ …ÖXÛJ¼Àtoß„*´«ÃúðA;ý÷p Tʵ­wá¸t]æÍIÔn …tJcù]¯gР~‹âãýR$á\ùOÖ=`Á#é§S–@}<Ov%j ùg­-ÔÇ‚“ö`Z^uöÜëŒç#ÓV×ĺ÷„åž5nREië9òÕ} 3 õq´¹Ù!!cxâ"uÿ_öÞ´¹l½óüåvrÅ’ÁM”Š¥êººm×-OßvÏt8¦_LÌ|‚‰ùªýz"ÆÑžî¶§Ü¾‹Ë¬º¢X’Ø@î'·~@\DJ”Ju{ìº'B 3Ož|öåÿðZE)ÑÛÒYáÁØ7AÏ]MÿÌþì‰ÚõS-ó°ÌGùì"šä™5S)Çœä~…ÚìX†“”{ÒnÐ^kݺœ¶riÌ͙ݫ­²]aq°œ\–¹BÅoèÍ2ÒÓeßÀP§|«™2gzš½ª¨ýÖÞ,9˜ 5KÆv­óL]|þÓDHø{8ÚL×ÞÇ;“»ÃÉBá(¾V’´mröïª?|°,¾Ú¹|c^^<œëÅz<äèqüÖ³¸?ÿ:üYå¢?iتåO§¶-¬®Oß"5:׫l¯†t“¯!hÖ†þæm ø3Ô>¦F¦saoëÝŽR†æÆK¸å ‰Í°¼ê%åëiÛ-|5º§¡lÍ“%bÏ’ýÜPÒ¼(ê:3­2å²ýèhªGAWc¡õ.™„­—ZYt«½NãèªVõ–«2 B’Ž¿PýÚgþš6wµçKÝ®ÏË×—Ù*Ÿfƒ©–”v{‘5ÿdx-uÕ®ëGqÝ}¹ ^SÅÊ¢ë4{Ib5qt±§xŽO(¯K¥Æ ìÍôc/6õæ¤,ΔÞE.%ÌŽ¹g„zAæh°Õê.𥒶*ú%)¨?®êöy`´xÔˆN!óó°yþeäîÐ30/Iã"ü¾v¦RÛ¯„’.@©ú(´¾J«£a îtUf‘/:šûXW(…H\ÎêA&.lUsç"[rÑ’ÅbW÷¿ë(ªQ8Ç•ÚqΓ<ýMšúNÜè—«"bѦ )ÈÅ:QéCQÉMŸð"ïaxD Å}‰Ó5}‹Fïæ‡gMñÒYýïѹ5+YŠÕ¨šÎ.ç—#½îfNå“Ç G ¹]˜ ¹°ªBÓjSùe;(‡¦'¯vµöáÒÁ§0º…h%Q˜jDtJ¹_ÉøËBî(ú³Óê8÷àðõ$jH&ôã0épViÇ™ú‹UÇ_ˆ>AôoÐÁ†ðM§ñml;õõ†-dÅPnš×œÀ. ¶›ßÊ3?Ô±ïÔO·ñߺKüÖó»o'ÿ¤ÞÒ¢Wx+ß–ÑëŽÈ6È÷â°ÿ¨X™ òûFÛÞLŸÀøFÀ± íëáUù†jÛw ½I½iÐP+¼Ê¨[ð¬±É†Íµèv‚ ¯RÖ,oá_»øI[™š/¥–S)ÿZJ-0ZñT!wýiûÀ3,µî{M¡,doT¹us0Åœ\Jç(±’'©ÌóÊS'Ÿí¨«øå~ÀcèPöÜtP„²®ÚVGD Ѥ*ƒÕeÛ’‡YÞ•¾v.å¯YžórÅ/0tºÆÒ)¸Ü±–ú¾š(ž©õys‰ ©[ÄÝòÇÄtº ÉÊ!jù…sLÑ–+EÓ^§Ž6¯ÕÕIq:ÈèÆ5hX•£ïE†[=ESã#]ƒê·át¯(PÚj3ˆ°šáËålah#ûÂWÁ:Ü‘3µ®fè ³tŒÎ0ª”&]¹2ßq‹exz( /µ,Ì(ì¼0‹Æ9¤ØÇT²ý¼kî ì¢M/ÝqcÃmŒ²!4ò‘5¦ÎϦ ‘7ÏÐ\òùÍæ5u¡Chȶw-¯– ¼:Ö$ò,›¬c‰Ç5ÇPXí¹o.k3 ƒï¿¿|ö‡UÝ:UÜÚÖ3«½Ô¸~‚v€ÿ m06ÍE£Fdeæ³ /áiœÇq»°éN÷@Q¼P­ ³Ñ +Åž’B x¿¬})ÝÄ?/R­Óó Oä¹FUÓĈ2òË>²oþÖp ÓBV•‡Ô£kæÚN9¹Ê÷"õ÷[_^§gM¢)$tÞT$ºPݬjîªâÝ3íïßr“OÍuÃÞO/ù°€¼þóV G0$~»IÞNòT0cOß¶>Y¬,¾÷•ä·áYæw5¹IIG¯¯¶šÂ·pIm^Ud™ò®©¶kNKH.pÅ6HeB®8g[‚3¿CÌçêÈõ‚F²ü<0ÀþKÂVd÷³U£'f•×íž& k¶¯¬’ܰ…zŠÜ›’kæ<öZäb+6çE—ª.ºúõ~ù¸ EøR ¾²i ”ˆìU¹ü;;;lÄÍyœG]Ú*ÚSôŒz‡¹Mé²?£LP¢½—^Ç ŸØPŒYŒÈ!tsz —FJ‘ïXœIû3%-3û"ª0š…&¿©3.ç,%M¯E­%ËNÕ¶Ÿ{¯v¬9 C¤VP‘¿š$1ü¥ò(Jö_f~¶ fÐFކKr´°Å‡‰¶ÊªÈùoM“]Š'n³Óª3®AKλ¥× ™¥a,öLåY½èwD4ÐgN;Ú1ölÓS3Kfr[Yý UïŸ-!—•$’Ôad"%˜-@tCûè²–Û&—'øƒ#[£|½, Ö‘l²MjTµQ‹ @ÊËqý-U‹êoQ[»êQGÍ++Uò¿PZƒÞ©wŠÚÚYñ·í¢0Õ'•©-õo¥ò¼²Áõ(†¯›¯úµ°j±Ò¢0™e«(X»Ÿû%íUÕ®’2&ˆƒIq6öWOÝÒÑNä²›¬Ž’xhqf±LÎ:„Z“ÄT5ª‰šSôG7%® Í',pä0ôÆ]sS—æmë[…Žd œÙ, ‚5ˆL÷­ŠÒÛÂD;¢ ¶¾ËpÓrk^1äò!6~ý4í#‹£ÞJ7ápÍ{1ºÔ÷Ï|}xoËòÉç;z°?,)T"¹ÑEqKÚéÍqoò!sŽ$Û ‘£M§46Tð¦låέÎIGÊYo·ÑžFa/k‚bCô£>´jA(7d¨A¨ÏézEQÏЖqÞ4†! ³•iZᦉ†3£t2í²¥œéåWe~¯²P”BQö¥¹›~žÆ_fu_{edAÉãÝ æäEWÏZUîÚ¬†!i U`õ8ÿ‚×µG±Ó;¥8ŽY9Á´iDî‚Ú0]‡↶B·ðX°$š±'Îû·´Nqú´Íÿƒ*[âyíÄFJ;಩œØ‰o6M«˜wL»ÐK¥ÌÜZçYŠÖWö4½­Šô‹ªqe¥ÆrL'¯”Q¤?ö…§UêÔöyqÃÎ*ÐÞÈ…ñÚQ@^@Ò1“îaÓîÄ´ûÁ,BæŒ9,Ûµá'å~+óÍ^tÜ·GQÇ“|ÚžÚú/­öA»óÄîÔV˜Î—™SJÖÒ»«Nú½JÍïÈ};¹Ô CZƒ¤­Ÿ‰ Ù„àÐ’xÂÂy>wB9Ö(Çœq&̳Êx¶H¿–³–ñºÕ¦“ñB0RA¿,Únã„R})g¬B´‚l¸™•»¡Û3èÒFTÈ嶘¸!Ö¯Eeï Ë0Ý|gE`o3Ë;,ËuÙû¶NôjüçÖ€« y–_´kŠ«ø±ÅQÍ]Få;êhÞ!ð?£û_šz¸¦^Uù6¢Ê¯ç¸' ØÜJ?ä®drßÝ[°Wq)·0·*äÖÐáKŒM*TyTÁ,`[²ŸƒƒðÛ5VBŸJ%¥PŒ¿1mQ˜Šxºl>ëÉÆÌWARïÕ³]– ‰3³KšɽùŠ#ŸÎáH1-õõ×ÍÄYÔ¾´‚0š§TS£šiÌ3ï0ÖÏX¹™¥µ4¥Y6yF¼bVж &³˜w©mÔå´³?ÍFHi|ë8Ø=b¨>ÑÄ}ºVÛZàirלš²‰.“¸6³C¼)e°ÙÌwg<†1QÿUU¯‘Í!ÚŠjEþЉ +šèòJl‚¾ «ìŒî+#«:Ñ& N¨1ÀĈ’¡›” ¨Aá+0÷ ²ö©¦ÚžQƒÏ_+=‡©\!Î)J–%v#¸+í²FmÞï,ÇÄ1Æð©ëPÆ „€äü;Ƥ ><æ3…þ;ÿTs~‰þçð„'ý'eÛÐ3gðÚó_æOˆöšqœ ÆÄê|“Y’v@‡¤pØnì}pJ­œCU`Kœá¢7fÅdE€!0œ«h@v 0w~ø 14:Ä‚,¯¿³ðè—…ù¿EÐTÅÊ¢ZÈ=’dÛ'aaFF å¯Ü„ RÁK¹ÉtB 2΢*ôÛ!šÂÐ@æ!yecý é¦ÐëoRfބÃÎE×èšžÕ=¡¯êN½±,u¥©gzA©ôdºÂ©‰ùбbzß¡"Õ}µeWz_ ¬,‹2ÔÚe+žd\,•Ð@YÉeM£õÚUåµ¹(^Ïõ£dŒÌ»ºÚÇåå Á`z'VRŲ¡èX CÎD´›õº8i‹r’,¨DžŠ¬UfËÀZföi×i UÍT“T[ˆ°ÄÈè.]¯ òxY@úÌáª_˜]ÍÓ;ÌÛ²RbL°ÁeÓ›s?kklq>•iõ“Yñµà]¬ŸøÖdÿ)¦ôc“?ŸžÎ×ÍžOµ1IBçÛ4¶Ò$.aÔ™5õPC*È€aƒô¡g³rnMÒ¾þh›Š¦€j5ÄáZ‹taZð¢!€Ç§û9…GÔÿ y»FÛ8òŠ]S •½Š–U+•qñºXUm¤+v&ÓòHÂVŹOÑãö‰UÊ¥E³v€4RX¬-Èiø¨Å^ÉüRœ9G¤Ch9„MK¦Ž[˜Þqž+'M ¥.ô±ã+IšË’]yt Ž÷UÝÔ’0’ßGÝ¢‚å3F\*ü]ÃÌ@ NŸ`oš  IDATè»/m•TPIæ 7ÿUBÞð¼¶ÓP!MÖÙÑgƒ-'D- ó„TÃÞCqž4æþêÈÌìñøE¸YN²î/ ëÉ‘•YV mÒØ‹—˜^Ùn[ý$¦<‡L`HÏ¥úKÌ‹e/ƒX­”NǵSøÕÊKPr . LFõÉ.,·˜ ˆ¥¢]çzó8¤lð²ÍBaD¹w%cÂÌçK•/f Ì,ÛJ+kƒóèðÜEZU'”f£¡‰×a]#o[`ÉÌÆÛÿ;ñd(Ç(ø­‘•ú|á:çÅŠ]° ‚È;nSbw œMC¸E©[Û k>pd1Ì~b‡þþÿÖë´ß§¶‰ÅO<÷íŸÑz^Õ½AÆ{Ê >NŸ?XЧ·7ÖùÑs׈‘qô;…;˜1YJÑ…TŽÓ B:]P¹T¼m|Õl&5ˆÀ‹hV QlÚ&Žt{¤ÖŠoA2 0æ_Ã.tÁ¤] „E½Ru-":˜–¼LêU—™¬J÷W89Ùïv.è‡ÏF 7ü…$WÈ †`¯æ—OYŒx=eñöŠ_^®)]«q—$¯×Gº£Ð39vìÓ<ʦ˨Ѭüqž­'žÖ_Qz ‘’W uŒ Ç¡ÛZYŽjˆF‰\Ï5ê8k>_¼²L¯¥ªþ¯£Õ°\<ׄZv avåëÍäŒN.Ûä¾¹3û˜ãrú›°¡·cÆ»NZäy7‚…´©ì®QhZ_mÓtƒ…W䎃²ÓÉloÕÈz.ç+ïåTkæGžý™W´Íj¹8<}™Îf~âƒ$èÑQi.ˆ!¥FÏÝ}Ù@Áq¾)&³‰/J˜Àh*…µ™”ËàL öóQŽ4Á@(ÈÕ"@ú$ÁUøtÂz|w‹ßdä€Wg†d™Q.Q@E6$”U˜9V!EQÊІ¸X3£@ùë¹êHôàÈéÔVg&‚n‰Ÿ£Ä±Œ+‰¢o{ü›_õNMA€ŽQßøQüpF‰Á¹bÀ©oR€oÈ+wˆæw—J®•[ç-Œç?’)ü³Ñ Õ{åîœmñ) ‰3$ù˜ ÄuÅà=à]aÈ;¸Ä€Ó)€_“ÌÉ·ùð<¡„l¨³P®nýzK4®G­›$ø]Ìw+vFLmä6ž;ì‚Gah/Vëq@¾.z Q/èy”ý¿9sŸ•­¦s1Ù[ʢ̓nÉÎ À´Q “W‡Æh§ä8¥â»ŠALY£Æ¨16´ØíRÎ~©Õ¥—r^Ó.–]Ýoðk-HŒ˜bD’€fSÅ`@há{Ep=C°ÊøzËû˜÷}kí\¤7ì³æJ1|¼ßÜ-@Þ Š@ðá ÉŸŸ!úyÑÿ?É=”¾û«>ºa×¼¥ Ñtõ\õ]Øîï]*Ò`X ëé]—­7ìd Œ >Ä%rå:_”<§¾ù¡Á|Í£”HÝŸ²ÈY䳿×åë?1LpOp¡øKä¿9)ö IÅïñwùB¢ÄÔP>#ïâA]XZKG_R•k>^Út<½–aÂÔ§·‹è(®*èH=n´#Š!¹,#."2PÀF¦œìEÑ­ c±ƒ±˜;#éúARè¦c$E¦NÆÉÒÞk.kKSÕ¦•;ÝÝEÑÕMÕA(Jq¾×’f•;îgMn¨¾Ú}òÚ~U4ÿUõþ§sp¨÷_ø¢PFn{µôeV;ÙÔ¾@·1âRß­°ÜaÙår‘&jè«Õq×äøðÈP¬BÍÎËä‡v‘Kõ/Z]§ííÙM]Öó"¼¬93¸Ø_¦¥oXˆb©÷Ϲɼ/ƒ @ÙA¯Ù ,P÷å2åbIqE¥ùŠæ7öÙúÍÚ`A t(<&ó.òæ”#Œí\Ü-)úHCörìD¦ùì›7IÖ5q˜ Õ°‚bÉnJí~Is„ÝЛ$-§R; &ç A4u§6:IôB¬ ITÓ­ÕlføúM zÝú)×;±(”Û­Bwé•÷sñD|ðÆýëx+ÄÎ~ä5õqŠá½Âý5ÇÍæÆ‡ŸìòÝÆ‹u—npÀ»1šêÆs% Üzëö6[¼+_žßÞöµž† *¡ » oF—^Æv‡N‰Î-ËŸ%U­¥˜Þs8„9Ù\˜°XØ, H¡‘¡QF+e`6ê˜ÞcÅðšðÿ"ð°tê Õ¥—¥Z—"Ÿ‘¾DŒè/Pz”Ì9·±Wz+>Œ— Â]ˆšêˆ²Æ^æ‡A¥ÓÌÖï3€`¾Òl™¹s «ÇÌ#}íà;»þ¸¤±õ<Ž|ž—/¯;q£Lô@´•Ô=¨ð²ªêǹ^Æ,7L×R»è½žzŸ]¨ê2o¡}þ…þè@¡%']­8Wõ9Õ‰¦ûô§Æû}ã¯2M7YÕdM˜êV;v1ØËÜä‰>mVS{–eÚg¯Ó9Å.Âv{a®;Ÿ#‰`Ä/G /Yì ÁºPÊÂ-Ù}„«B‡°$o‘-É6ﺣÖ-ÍI9Ìf®Ð†Ìãï;g† Gð X’4)6thÇBð…Ásé2ò6´§½·êÖ › i€ Z‚ +lŸç±LÒç­B**zÀ?ÄÂr„¢É+ q ß¼!¹[qÿÙUaÅc5ïfüøáÒI~¨àúÀ¨²ù~Lnøñ=#ò¶9_}äè×ÖÜù¾[ißý\¢¹EIëö!ñ¡^ôuÔ_G‚¡DΠxcàø×UN²9’ 5÷.R›=Ÿ¾c”YAÞ䇃#õr˜®½–èrêÖY¡EѤŠÖ¸…i§ŠWJ%]QGì$/§ó4ívâ^cŠõ˜D-•ý——\V2·Æ–‰ÞÊr§î½Ö.h ÔýÌ„VÀ:ê@ R6ºS ‹i ù9ŠA:…à2ÅŠi´€Ü@=.&£Â¦r²ªè(ÁAhª¸¨d©BuR¤Ù êC%kÓ·Èí:Ñrö'¶¹;G;Õ/ö¬„n¤.Ó´.‚ÄìèóQ) '3…‹æÈÅ{m¹ÆBƒX§>À4ˆ¢„x|ŒI!R-«L˜½6ÿÎâ³¢k®¬ivѶÀ’´IV~ŒWQï Úæª›Kï¬2åKÍL?w´q^ßÖø] ¬«¹èmÈzkU»-Z5JÂp /‘íØ7iå¿þå™5,³\κ¨FÅ[H¨²zËÊþ üêǦ’ƒü1Òéý‚K}è]ήå®ïÏR<`|俼˜Ò§!õc~é“‘æïy®»(©øP‚½…ú»É¹å7­%¢)®ß÷9H I† çBñŽ Së²Í5ˆ`xEvRO‡E½¿ÄiAÃN!Dæyue:ñ®oÓÊZÝÄÍyP.8{¾NðÆ³†®Çþ3Œ†yZZ6Æü.ª?Ÿ«O¼z` C=Ç¡t1á·QO ¹düXÏ;²qÛ¬L´ Õóõγu R9“M‰Îê9“ÏÉò|ªE’<ûÍêãÕ‚¥’ñý®s©ï¼¼4¾žÉd–ÔMù·,þ=Ëô¿µ>ˆ O’ ì¯MD\0(Pky¤Šq­%eÚ¤ÇYaÒÏ‘*õŠWc%ušK¥jD#LþCÈ¿‡6‡—¥=âhŽó’)8°s\Ô{ÌkÊ -¢ôWA‹"‘²Á¿Õ¤±šÇdÔ •ÀÉÐYs@¬m¤×lû¦WâIl…:À„|«>Ãá‘”Cñö9kå±8•Õ†o‡0ÊV¢úƲºFI{‚Õ‰AÑ`–IÍø÷´³v']­©Å±ŒÍ…RÈv7Ö1«ÉÄ-N*‹LC«† ûT´Õþ|œ¯VòûóÒ0ž¯´üûROW6h(%”„/DS5ÛI®ÁšPÔJئxdSÙ Ì 8ùµìDüù*·“‚·Xt³º Áë«Ýf[%¡@Z‘„¢ÉûËq³PÄ_Cú„c#¬ž‚h Ð|¬#2HWL_áØÌºË2Èáb“o­ÎÅM¤a8 vϱ=ê\g¼Î|3ƒ'ÐB h¯ÈMêSTà)äð;¯Úδh¶ð97  Ü$lFo¼MiØ‹ÚDɉXH$vëÔÇó}h •µËàØ¶M'?{i,ñJÄê?AÊ ²=¨ˆ{2¿œÓékݲã‹ÒS/yø*^½Ö¨5¬¼L ÀTÉj¨dÄG2€’r&G]>“²Ý6rsg’©I« ûÖªiHÇ~¡Pg–ûï²/p:…Þ.–ºw¾:_žú9…߉ێY㦨ižªÝö£Â覷2ÑOª¾·#úéªwig»ìí÷æžYͬԯåbȘà’:$µ1´·è°~;C®Ç8Ûà€ C¸„ˆ ¾Ã ¹*PðUyÁoË;ÊÐ…®•„Ô!È{äï}LñÁ†rû²¿½§\þ··úÝ>CÖ0zŸzp·i„ÿºáŸF÷GÙãŸrj›„:ï,%–׋‹’mþÃL˜æ=íâþNŽ{Wv°ãê:NIR¾…/Ö\ç+[°{ÄxH*ogó PnnôZÁßFþ¦rØ_ÃNþcÃSÒS.ñÚMdÙä9\BŸRÞÔBË£¼(r~O_`Ù”]„C«Þq5 ? $­ºø‰7ïTß(¯Eþ­™z9y€ä´M2QGR®l Œ†"€|=UO”ŸÃ~çP@l#À5Gy!׳©ËÊXî„þ®ɹ<Ë}œ+O ª\'ŸÑ*èLxœòŠ8Lööd´û=qÿR50z(Ö@ëDá¢aY"Jc€ë^š+­²ÊÝÁÛÁ툎) e\5ž4ó¸ÓP@sy’Ô‡ëqÙiçM³Œm¦fïÝü¢Jð}ÇQv„jïé¬Ã#Wwž$šRˆ »—JÒöÊN«î»¦èô‹£¼WNCoâbפpl±i)í5“¤×¹î›>y¹ÃT£ Ñ·UÔɽµW/;ÞÚàå]­Å ²¼‚Î~7„¥| '¾»Nµx(¯ÝŽ7>ÀoˆÿˆöŸ)F÷9¸ÿÖÚøütT|Ðæ7 ó廳&-H7ª.ºW¬‘„Ÿßy#å@¥6ˆÄñ&RV½uÍí¿;c¸n¡2¡w]Ço)œ»Éü9x[äâñ.ÁŒÓ²„‹3tG¸ ¢³«ûO@¹Õæ}D±>á3p|œ–…Öud\-çu…×#ïüU¢>¥\ùÙEÉh‘œ’lÕ|÷wd‚ZZå:Aâ°cÓ^I^KXA ”õäÈ£k&y T­Ç%­ ¡HÁ Lw‘:;´l²Sô“X;ŒÝ}Ú= 0Tv|R˜î·c­=·æ½0qh êu¥‹ÇJË5„‘ɬc"›ü†u¢Ä¸ ¬F8Éaéi¨“phYA,~+í ±Wf_&Q®–8Ó‘±+ ÿ04f16µ½ßnhìÓ»_w´¼W;=·ëx}SØ-ÃÅnv2Ýë<¶=±¬œ±ê‰¦Ù/=_ÑR©œ¹Å&5EÆYŠ#mÐÞew@ð™Ú`Ž)Þnßqä6zs½Âucƒë›ÆšáCs¼÷g=ˆn\êŠ/~é,y3•ñ»v`òðù ÿLÖGת~Šè¿O`%˜4w—åÔ?róò=æCu6ð-­ã€fáØ-hÄéw¥¶úùás4y-,ÆMDâõßÚÝ»u% ÎV"¨ÉK·5‹sÒ–Tʺ¨Ñòé ©¤µD[ Aµ$©y€n–ˆíltA@@âÕqj'ßMUè«ìºÕ™VùÓÌž?Ü ÞŒá[Ÿ•–B„1Á¬¶ÛLÁd›ϯÕÒˆøú¬¶?ÏY ÷Aîã.j›¨K´ a´ÈÛÈæZ€ŽC|È¿‰W]§Ûu sÚd ë²M¼£Kéu(z„>Kwç¸þfg#pQ“㘣ö<)‰”¹Cõ…|är 0’”KA0>» «:{‡¥§šv쮡¶4½×kçjÑnlSöZÞnÛöÐ,SQí¨«VõX¯>Sc½s‘á,x±,zE•û¥ˆËL²Ÿa/øý‹¢M³ªÞcxgã\²³ùwôu&`_é”úó˸*™{§Qw#ð{ÇŠn\ù“X¢âm¼Øæ¨ Õ¡ú:¿á§3Ò¶mŸÕ;ýÆ—bk™ÊO±yñžXçÛŽ|ˆÖI ²HÜðzØë~íh8$8TòZ ¦7ŽùSp¶cîJÒ³ *öÕgÜl¿ßq)àÅÀp d>txm²›³' ­‘.ü„ ÉÑ&2‡¸0Í…ôD#°‡T’0PÊ ODŠN÷ sf/5ÒdoÚ·›É·1´ì5çp±ÙóvfŽXàCv²> Ú¦Pò#©ƒ« —°¶ƒ¸cø'È;à@URms;Òe†žœ–Îb½‹dÙŠWýýÜÉv Í›6QÞµ:dÝ:öRŠœæ3æ‚´<ƹÉ:Àò90$]Ôë‚…‚v-®€^}ö™jÚžH=SV`L%_) ¥ûç=»Wµ4¿cìY¥‹²q<Ùwµ=Åi•çy*­ÔÒtOS÷M±³«Z‰–ãr<ñ:¾Ôý¥)ÝÆ¤5¡‚ÿ̼æÚ¼ý; oŽŸ×CÆò]´±q E±m˜¸µ’Èý¨òSù)ÃmqÑþ4i¿Ê÷kü¬rÑòýåϨpU )î'—ú“h¬›Vo?ê}¹“[Þôó2~ vŒ“vZ­Öò|cL¼]igÃçÐîÉÔû8‚&aùÖ9Kîw\6’ãæÁöÙt!Ä’UÀ¬Ó%;‹ô¸áÎÑÆeåW »pDµš6F@gˆ+œâŒfµó¬ÏÁxuR¶˜æëTÇÛ¯à‹mVüù6~½Y­ãHbAo'6#á#¥*ó¿f¶ä¼M08ÊÄXAClB$0T–¿' ÐÀö rJ?‡sdÍX¥6‹8Ë|½ej(_´¨úEZòu%IW¤Ú#<‡0H¾N6z±1°÷¤gH÷Eevs_´úMYüY¤:­Çvß/µc]¨éy-O[P‹ £»wFÇ4Ó¦q•Ý*sºýîNW³êWq0-3M­U¥T~RfK ©f²êVÅK{–õã¶«½èÜmz>IªíØYDن˻¤óŠ:ܾ{0½›ÀüÊ ×ùݧˆíˆ€{OíFó0Ésý£ëŠÁþ¨¡bZ®Úÿ™ë>ÉHµæC‘nÍÆ 1Ýn„¾ñ…ú6‡ÝO›™w]ö-'7—®ú[®t¨!.f|ÕA±þþ:ß°¼ªàž‘D$ÿ‰»Ú´ßÕÂê½ò†©h),ªµä×ìÔ[G­ 3(š¸I%ì®k-ü¬kaþ,‰F‘C½u'7£×?âꀶ÷m­'IH·l+·<&¶g 7uÄT¢ÅQÍ0Ne¦IÚЃ×PIâíXù5x­éÃ_¸¯5-aUø˜C,¨ƒ dïMáéü–Õé-/ÿÏøË§ñKÕNO¼dR'êù¨!7Ø—ôdFXmû¼PÀÀ¢ƒéˆ™%²äsÔÁ/…é:®åyаJu¯Ðu¥Û2È Â óÞ³ŒF?ÐšŽ†çµMÅ·KѬ¢^Æñ( ¾K'­Õôóe˪Da›ao®—•ÕšáÌ—vº2XYʱ?p=mªÅéH0•Œ ¤z‡h Ôòš [njòª–˜Å'¿7ŠðÐâ¥Û›tîDRxvùIâá7~ãx?¼ùÏX7üé‡w^?å({xß;>|‹ˆ«Û¯°…î¿EûÚdÄm–û+ð®ÁÔ<;w%­ÍF¹»Bïšñ7 Ýcè˜ëüº5,~8[Ú7ºn¬×·Þ”\GoR€9´a.Š]ÉD9Á ÈüÏ>Ö3”“ ºÞ#ý+Æ-2,ÅA=Ú4“_{_à?%.¸üǵm§ÂLXˆkã—°Åtµi5ô¤Ì€äW¹q7”U¸   ØyŒÝÒ ƒÜQ ±Àƒæ ——âk4tN½@™¬þCq°(ƒLK{C·©§TðZÑ6 «Æ¢PžQ)«b\6§h‡F¹("À?Ä©;Ý:寧ÛgàêfSFéñØtçÕ“¾y‘¥å©žéKSv+»çœîÀR 5§ZÅI:o'?˜á¬IÆÑò©.;U¿Y™e“¯º…²×Ï|gO«(WÝÚ|l ¡hEß`Éhë Α­AÅ+(ßP‹E¾TwXr¿‹> Û>pöç5ʵ-}8ÄNò 4Ù=NæÏÈßVL|À(ýg¬>ì¸uèÞš x¯¿v%ȲO2–çQ)M¤Gï@ˆœÜŽÉŠ5h?<Ã’íR6t£0ë|x¹‰QÛBYy¿&[?ò›ÄlpýÜ”·z§ah"ý7 ÊÖ`Ä[?ìŒ-à+cx$0Ö±¶YE!``‚.Ø=¢i¡>!§4qE.1®$VYRÈx튛 „h²Wºdm¦#Àa‘`}Žmðdýap±y*}ƒj~-³ê|åw…6^©k¥$ˆåFñÔ‡íÁ/VÕ#:ZºW,ÍrfÏÊb”´25&‰—‹S%Z…0Q8õšy?ÿJË-µ:Ž[ŽÚÍEôˆ›ñ¯Š•9m·P Ï®!%I3-ÑÓ…ÑD¥™MÝËqùü|ècu?³ê&Ž”ÀXý¾)eûÇjì¼ÒФ)§ŠúÒµ/ûeúuVjwÇôÒ&wE¬i(ZÚÜ9ˆ–Y,­(©ê2©Ò²¨&óÕi'GÝ”'ÉV`mfÞ¡!+†ÅuŠr0lQdGÔCÖØ-ojx‡-õŒ#ѼÇüú‘¹‡?BÙäGå<ô7ÄÀÌš¤ÿüÃ&š‡wù¶©\=DÉOD÷­’tØ|À$LYçl“}HmÒT9ÔP¼#¢ …:¢œS}wÃiÉ+!®®ç¾yä“뼤¬Éwí!¿Þ ˜lÚ[ï •¾#ÂvíœKÜ ÐQkneìÿÆ~ÎÞ¯Eq›‹u}Æ‚êÂȬ¢ò©†ˆ+Ìϰês¹Ì·ÙŽRn,­0PL‰µOÞu;²EÞ¡ñPÁ]ßN ê e'(L;kí¿ä«-,†H‰ksð+·ËŸ IDATu´*Û¨F°ã?õõ:ìj/²ïåœ×gÉøÒ2‹” „Ó$ôC"—Äâ±Ú6ÝÍúŒÈBu(õì¥ÖU›‹*)ÑJûV[­Üò¥qòRü}5§÷¥Ÿ–q—æ)êidh“âûÙ¢L”R+ˆW†5íY&ê®í¶­ý°%T! ª8œW)õ¤«Ž¬ÖR3?m›I'ÿp^TÃúïž/î°–2ð¶!PYÜ4ž‹äæ‹.>Àé·ïýú[À”Ÿ@n| Áý>¹lÜ8~ý–ÖøÊ7<\ý~ØqÇ C=ˆPå¨@ÿîYç×êgG7¿Û˜½$ ›Ö6¯B.‘C¬¸««S´9ê„ÃWëÏUp!¼3‘{ä0ÔY›~È›Hy¿ê½3Â&nŒÄª!L!WÒÖÚy¸ßã‚–›Ù~ï…1¡.9‡‚Qi>£È1ä6láCGÁ¶òçÙÚnm­½)A-ס­% >FMq Uÿ3#ðŠ·l±¼Ñ*(‰gå·¦ã“k×è$½B¯¦öŒË†•ËÀœwÍ®£Yª¦¬¢êr¬Ìÿ¡Yæœæùq‡½)ØÔ)õ]ÃtÉ-„…n£iV¶Èô2UklÉ«¨»PÝRiyU…}»pâÌ`¬M—Qš…ædK¨ò”C¹2,~—)"µ¡*m'°„Ú3Z¦â£ì•´b%%¸,•©©$™{õ¤”fb*ŠnÔ³~±ZŒ¾ýNÞ;×¶ÜLøp3è¦zúi-î¾È§÷>uvZ|èü¸ŸaLéÇ›ÁÆ*½g=¤–®ä6BËU Á¾Gm|È9È;ÈP¾Ù¿0öVe¼ÉÀ; 7¿¸ž²I·va-œ‘0”W†á»j–ˆòãî­4»üïíÛr#×¹ßCãD‚É¡fF´Liv$;¶÷…S¹É är‘gɳä"÷¹ÌìTíÚµU±¥moÙž1%a8I€Ñ@¯>墻F£Ïh€äÌú— 5»Öá[ßi}ëûhÐÝHS±šÀYõS:1¼×Žª4Zôg­K³W±æjµa¶ôÑ„wðÎýè ßV^ ­# Åè *Ç`ù3ê°…¸8•`àÖýÎß×HåTÙ¯bþÄlÔ¸kÒ¯[ê°+è‚.¼«æ1ãKãÞâgó Ú}çÃÞ•^yë(úßuóí¿8üÙ•^G´º´ôÊW“Ï~úžÎ¿£hN·aî+æE §Þh¼d.æ÷xOÿ®;=ûpTÕ¬;1³ïWÓgCóùgÕçøÆº½ièÀç‚Ïfð L£69Wßýóø/ýzïÐ8jˆÊ›šú¥Z7š¶éÕÀæýtôWãê;£µß¬WlåJ˜Ã+­f·žÙ­ùu­õ~t¶zæ¹ÂXrâúCKŸ¼¡ÄCózŽõR”ä9/.#?ñ³èô‘š'£À²Å"îê]¹Ã E zÉæN ¢¹šìq8í íßmsüj"ï=ia.Ý^±5Fšp -Ä ¢êƒŠ*Ú£@@|ú  ?dèfmøÜÛrBcpƒ˜3D«CçˆûÌçzk`]˜{Ç×{·sý<0Èš(àN6޹=äà|…úPÚÌÝE8…Á§}âÞwËnÁs*õcÄÅ*©¼†/Qè~Éå‹>Ã6S§)šæ´¨5TÓ9åC›¿íQýkpó×ê©MlCÐà ßtõòDéÚÇV³ýÿš(/'ØFó~ÿÕ¸w°_=€Ÿ: [ÙŸV£©üýE›:s[W`á/ Z×/§½/Þ4ñ·ß½U™öíΗŒ{\iûr~>»§9iXÃ/¿kÛâkm¸×è;µË™:ŽjëæŸ4M¨zÏROuÇŠøö~ÌD¼üùíWoi¯yŠ…7r:Y\bKA 5Ò+Ð ÆZ—{Òj’é“òî|ë9õâÎ?ò]ʆ¼È’'#à1wB7vœí£pÖ©¥–‘€ëFÓÚþ¿ï¡½~¹)XA(V¿6Å×mÑ<}ÝûB4÷Zöçuó¹mÍÌÚõ}CÜÚ U.fü“ 7ÉÊàÓ°¢ wìQ¯MDšn¢Â¢H}¶ð—ªuÚF F¿§;é¡_Ì’OÁ—+Ö.Ø”ÈçÄž~ÌvƒG7;ÉR’™Õ΢·-2Ä3÷éô½kSÅ…Gºêø*ŒEßÜlÏ8 Kba-ÔáZÀÀLèÉÀÒ¹i,†ÓôÕ+úyfªíÅL~cPÝ ÿÚpí›)îNh©Ìç5ë¹?¡ù_ Áø‚ÖL½6ÍY“ç6ÍKš¿âªŸaœ£ukõ{C|æ»ÎWUÞªúa_¿µøá–¡Y…ç°6?Z^€æè­i8BEwïAm8lÀ¢]¥5Å8bÜEX]üu¬Y󹨷™!&. T_`0«Òº;úøö ³SîZ&­k”jÍpLL:ã¡£5m}ÊKÓêöjÂa¦w rˆuÀ‡JMÌLf ší?™úW×WŠb÷'׊fµ:ÖLqfÚ•3güGtæˆæÄFW1•é©!lktÇÅð^§þKKi?Ÿr ,Ä=—óþÚðµ†Ý_)í—cã„ô‰ S{q¢p_S0âI\RoÇüŠë uÏ'š6NµL$\9Ê´S¶ŠN Ik‹`ðX†“G$ T³JF™®Æ0µ3_è/.ÆÜHý:gmÎÆœg½6Yõ_Ž4+þeæiZÜã ¾çf¹"Ý}*“Ex«¶Z°{=ÌìÂ?ÏPi‰ EÕ5¯Ð©ðïT«ôfˆo-¬}´>Üû‚Øj‚gGL°ܘL¾à~:«½dréë­Q >gƒ›žð\=•Aî1Gœ#à%¨4>âXÜ8ü´5†‡Œk4tœ)ú˜ù“«G í@¢æÙý{-¦s*Ý¢ý3Ú¯øªJmŽnX#‡½}ª‚š3­ÜM÷Æ&3›Iý˜Ÿ'CÆCÀêcU¹¼fùv µá}ø¡£b´yÓsøþƒs¬}˜\ówMÑŸwU 1ü»uP£ßeªþATÂzuù¬«ÛÛsÑG›Rô®§$Òa3°ÂÕ>„=ÿÎÜ]†H¡SÔCѱ˵f ­mñx9bEžný†| rÞµwÊïa.QW‰µ|= œê¹goîyyÎ3ímkiÞD¤ì²ÃÕ*b›²á½KƒË/‡“ Á|à˜F Ù÷òéèJhZFXÿÄt˜qtE³FË\Œáä<§þ¥G-êwˆ±È> OB:^mdtU¹9í;ƒ±!œ‰;=gpÊo8:eï—˜_Щ3›Òh´¿ø‚m 3ƒ¹ l_Z~À±&`›¯¹w¸:ªŽù‚Ög´ì}I]ì3éN0ÿ8ænáÅ„YàØèØ€û^øÁÝËóûù!¶â-P]:L»‘TCþu±v7pãmd*v(Múúv;†ÃèZœ‹Iõ ÄŒþÕe-„ø (Je&[òïNöÝOJ$c¾â ?Ô¡£UEœÅ%öpZ¾Ú¢pkÑ…Ûz›®†±ƒ‘(J#“„Å{©pZ ¹˜Ö^7".Q§Z\"ð£"Þ³'¸ù™£} ïöÌ«¹m*÷ ÌK¦Îó*ÜÂ|ÏX­hïutD,ãÛv,Ú&mCn¹18:Bù¥bT LÅAÂþ9ó0ìKôr4àjµ¤àêu¿+ ®áF(‡_8N»ÎýìéÔt꾌94}Gx—&¿sèÁÀbì.wý[ž©L˜»º‘kĽç1Ù¸­åí©Â¡?´Q~n)„j±·)KÜádÚµ \w_Zf#QôQæèÞ™_ŒD·N;¬½š¼a$»×µpà`¢ ú•wv/ÄñVÎáÍ &ßÓpü¬;a)e$ÏÃ)Ô¡ÏMÚô9òž_ØðÆL¾cêß÷¶¿c†Ë];O½RŒ‰¨“NÝ~uÈáêúþ˜Þ÷#¦uFóቸŸõÌñäžÙ;øct#ûCºnÌôø›JC_J] Áü쟜‘Áé ªï¨‹þáØ}¦G|;E½A€ªr`x47 ÏÒê‚ÔÖbš5jÖZ˜œÑý÷ ðë[š/¦õÓæWðº‡ØƒËäð¹R®“/³÷.UÏ>@%Û/ª2†õ±Â(öǼjHèÚp–wUs† 4à&â!þõu£¡Úµ[È ¢ªì"ܪ þ—ãäy0wCnkŒ,®;Um(¢îê±3x»Ú·k[ÔP[ÌUfïÅ¢ºu…C›ih 6mì 3A ¨p×kÚ•ùýŒ~žµßŒ›-+aT*óQÍ•‚j=Ú=ŠãúÊø'}Ctà_ƒ–V7m" ¦¼Û—:«œe3JØ[¼‚ŽÚU”3Ž’-†=胛!0+e6T¡}¸Þú^ÝZ€_»H&¾øNöÁŽðv–4")¿‰3(ê1ÙÃJ>³8¥ú.ˆYþ«TEÓʦ Ž­m_ý[õ«‰U9¦Q½0-¡¸Ï˜§– ¼  µôS˜T¯ù®Æq§m™so:6Fkõ¸¯~ j³Š&® åå㾡VeÈÁ{Æ#¨ÌV9ïu°ÏNÅ;á‡@ñ`Á<ƒ)Uï®Oˆƒú.¬ÂÿšP‡ç*{q5T=¸#ÀÅLïÄÛשƒnœ9 ¸m`,jÐz9Õgð7sûfV@KÐöœˆóa‘D*z7 ú~Ž–> ¨‹°ôíª'³¶øwÒe·C?î`E¢G „O8D¡MpçKç”=¢=uv”läó,I»as¿¤ZÎÕtÁ ¸Ž/̱ô†0ðÿËByá/Q)1£HsX'°=x•[8iìGnÔôý_sJ–÷+Š`LõfX}ÏÔ<€cèÁ1ü^b ðVpß禪R}á]òàvá¤W¡ß¤QcŽWâã8úô>ôO0T×Í D9»béÝ:^&@UH8UWiœ²¯z%u~*¯{C¯Ààó5F;ÌžÌÆ€zúñÒ&ž`pIôeÐNUÊ&i£„Õ ßà!eñ¢T‹GÀ@‘yX”Îù°²N5èÒ×8½÷8Ý0ƒ‰PÌsê¶yx˜µ©‰_nN¤»À¯ q {¨?Rq<Ÿ‘ã÷^éÈÉŠLu¯i0ì^ƒh§Œ¢ Ïö€w>wºèÿàió&cú‚óŸü8ToN0ôe}ïˆ@Kv“ŽC㎚"r¾jï zÞ¬/œ<+è¸FÏâùk8Ž!è0˜&”À¬ @Dý=®:Éh¯™‚~ì±õ"$ÏX!Ñpëu¬}Púa@æ#±°Ò½y¸jY¯9îë9™ ›É' â$Í0öbo=.ñ°¥‡Wàúu†÷ …¡“DjáeÑë}ŠûxmfL/wB«´tï¢ÅeìKVDŠÍ±ÿëD$X^]]Æê’­× *–W7:´„:3\·Ï 4Þa]„‹ñÏ–JäÕ¿*XbD{±éö=Êê´ŸöáçûµEÜޏ–>S™…´núÄ<` ¨ DZ¶;­°€{HbxózS¸ §Ç_L ¹&» w¿‹×k­G•cåè(KÎV“vú²Á‰Î| Ø[Ÿ*Lï¬øœèkÛ"gèê¶é5Y=YûÆö,§·ÐàPG…KßåÚæÊá¬zÌèš=8‡ŠJÅ+E p j€ ìcѼÌ Ÿ/\Ååj,¿¸^µ-×”pyߨ‹¢2œ¯Oûxõ´¶ê¾½ è€ãµë˜¹2&~Z /e¹^lqݠʉ÷¾㥊J–!;5+v|¹·*!ÊJ!¹Õç{X£Ûm÷Jê╤ø×¢ç lZY5 œGÎrU>äMõšBgµÇË:zîZ5F=Q¿YT`T†_žz–¨ò¨É|$F}óUÎÅR0¸Þ¨`úý_0°þÔóyŠAwŸ=ºðð%üÃz‡5¼¤U£1Ãk0ÜŒRí@Ë—ËÔ¶3áè5£ÏÖžœ&{,U8e¦2…ëÜ‚Á_ÕÏšª/—ô 4·¬ììNÜIÕ fÁPÏ2Î'Ò [Ûο½-§”ìSzò(ñ‚»ZÔ­¿I y•ˆ|?a&8s"÷ªó[h¬UÒdã ²7è¾óùâiØË.³Ž+"‹¢žözl WP…=öÕŸbØ’ôÁ‰&3;1êÞŠº¨Ï·zþ[)ǨuÄ»àrè"ÎÔÊjeŠT³>7y‚×)+¿¹PŰ™"‹›Ë1½Ûë(…Å­¤vʱœø³gí„àQ{Dy‚!oìDè•"ѵív2§Eu£rçF®fqÇœ1Ú Óg^:tƒ›gÕêp¼nó¨±VÑ E™GŸ‡:üná / Éx~±ï§gð…˜Û)a ëèÀu’`ˆ[Au©±òW±ÁÒ‹U)»¡>«† žÛ|W‰°üOk«îìÆ ›E&IÁZ:‹[\âQKò)eñ&=v?R ATã&å˘õtÓùZèzzì—=HûÅ÷b»’uõýï7Z #~uš0Ë•ÚF]á¿w!cÈà~™ÀpÁAÔå•ÐŽq“„ßÁ·ðíZdWß ›rÜ>tùD'å(ˆF:“]¬`è¡3¸N‰‚W3ó¸b|-ò^^ø§õ§ÅKr™%«§aV2É<á—¼UÓeƒ³†tûà#X½ZQ¦'û+ùZ´´f&Ær'ÑÑÊ"Ùm¦›d 1v˜E”Ôð¹àEԬ̂w˜ývÜZsvö«´ûp oà#ÍïŸÃ?"œåÖc塨„³Õk"¢·rÊT{èÐ l¾ žP‚ë2ü ywM¿ äóºã¼v=]6(kˆ6‚Î"%ÑÈ( 9œHÞìïâmÂý½—kº×ϳ{3¡ix<ÌN; ì·Áâ03v€nŠ$+U­ó-´ÅB‹ƒcý]ͽÁpÖ?6ðåW§Ë[t^óBK߀z¤3îè(Ýê­yöÖFRN‡Õc yÅêü&êêkîÁ¦óùÒîE+«<]Éö@±·$¢åi©© À=| •­ðgfoÂþò¦ÛN÷d-‰O‰X£h¦ú³ë¼ªñrÅ·R[\®S7¯é÷ÐMfÅŠcÐqèÁ+ho_AN˜G»•D–7öœ{9úÓÈÊ=¿ñ +…û ¦­E/;õÖ3yqSðCvØ\ÅDB‚õëìo}4èù¿ÜÔ~_4#– ZÆP -õçVdÃû2ÍCñ-PrÎ@ ë”.}‘Ѳ*Rphð5ÜÕZÌ‚å‡6‰s‹|7ü¥³êjrr„$¹)¡I±."ƒâhgñf=o˜±1Ë+\mWâ\fØßâö\%Oì ›·U¬WuªVÆŒ~F¾¢›šæ>Σ"lË'ó)¥ï[DAÁœj1RõE ¢ŸG+Ù²É&ùZ9µ‘Jx—nÁØâîÀ2±œ2U¿¸œ€Ã2öùoáw~:§ÁZE•H§LǺ˜h5MßEµÝf@olÀ—ðÌÍøÄ~ÈÁ@ ·ŽÐkÃËMûÈO;†eȘØ 1¬üЦ:ïÍÄŠÝ];+=‰ K-i’/ó½álG$*˜~Ð’({[Š8Sj¶é ×_paqñc˜#çiq£ÂsÕêz™¥¬áØ Ò‡‘O :\x¢â<Ûl« Ds%)½ø”ÎÀ¥Ý°-ÞQ.*ÜQl¡3‘8ƒgÙ<½‹XÉþºÇ|‹ Hùæ]$ßœeËÅ…Ì'7Š?³M—Õ &6àÜÆfX)6'IÅ£¦ †È‚Ð j^eWO.¾×#.ª ¿¥£ÞIf&eÃö¹y±¦Ú±×ƒÃ‡%v¦@ç“o4õGaf±¿¥šaó.ç ª±R+h ¬­ÅbceöM,ìC/©gÖ ²díßíÍ5‘VÄ›a7ß~\æj¬ ”ìzý#e¥lØ. FìŰ-æH9cÄaÏ+NÎáßítÕ—aÃÈŠÐ0£ôV¥dÒÏ)#­ØwÍR£º>B5OSY,Œõö_Á)¼Ú‚5™Ö 1“ùíÅd—]˜ÚÍä]`%ïQÎÀ·‰6”°^ÅÕY)6Q 2M½’›­3GŠœd-ØÐÎ%NVξêÑ9O,-§#—ŪÊ:V#6G»a„³2¨pJEÝx¤ ³ç&ðÈ~šš­3~L­0¹ )’<œÃàßÖ<¹O¸(Ð}Dýq>žddÒÔVŠÈG ¶ˆ^tGãmJÅZ‰àMv£šËh¬zH©W¦e8$_$Mùz ûË4ç”R ·÷$#…žtfÀUòKKÏ)eCõ1\S=žžÊP.Ê;flÁ¯ák?ÛA5kº±’‚³%(eÑóGU^/„¢š¯Y̵wk Å3MDîúõ˜~–¦pŒü [o}þE_Íà †ÕΧ]ŽÍÑ-eC£û#‘nˆ¾µysÑzŠÓsçe’ÝŠÍ.ò'"%jÏo¸è‰1QÁf=Î~ægÜTã®lf®å£Æ™W¤xÒˆéà)Ám Q¹¥™åÊ^þ4XVß«E&kýHP…}˜€JÐVx®Ÿ„²P¼Ÿ.3w½O³Ö¹¤©·Ž|ü/NãRþ_¨Â Tá$ùs eÃe ™ïã9Å]¯v—–¡oN mœ›[͸"P‚7þvD„² '£œ¢å¯¡¾Ô½`ãè.ܹõ]¿ƒÕŒh?áJ>¥@<Æñ'1àMÕ«Û”c Õ ©•JlØ¥’äQ™Úãô$68ÕK-eíÔÚØ¹f>µÙ°L7\é¹ §egp‰Å¬Èn>ÛkÇÈ'pâÆQi|ZÚ-ñÒÑ„>êOô¼aú„ûžë†íö_k¼é®vl'¥3bÄà&éÓ„ {±s’…]ž„i|g ¸IDATÁÙö)f¾¹É²,Êùêtu›‹›UÒ|ÏÖ/bnG±ùÆ?(~éå,ª,OÐè~\®ˆOT6ŒŸjÇ3íál¥bËcK…WM¼$•]c¦é¡¼˜“WžIžÜÙ÷ëô·¿RÛvöÅÿS딣uñPPÓT »R‘)‹¤Q]»¥û€ä?Zº„:Ù l—Š»‚Ü#öÜBä.õŸŒSJW“‰I[ÜÕÉXjú•ö)=µ³L2ZÖŠÚPõpS‚;CŽš‚ ÑØÖZ§¹¡Ô¼ùZ’&¼ ÏáËúeÑSWóÎ$½ßú¯ãÛlÀç±EÉ‘?Ÿî´¨Ðz˜½œ@{"êû‡÷/IÙª&<Ô"%Ôˆ/¦{ÆÙY_o§èŒQ—õµBLSJ–n ,èÅXj¢£¦ÈBÔwf‡1k§¨Éw/–Ý>^+níÀüÎII¡b‚uD-ƒR¢ƒ—Ï» L*ÛØ>1ù`¼$öŠÔU•²á øpxf±Yoü¯×Ò÷UTdŽVx8Ù'êÒ7Û³;?¶¹ß‘–ë•ÈÐ{¯ÛÍø<f6R1ÁÌÖ½wy2¦¢SF½z`ÞÚÙñÞ—²á‘2è’©P)È,Rz›æ¢My}¼iàïöh=.smá”D¡•Ýê}xµŒÆã긶/“mÍ|„­649ã`›±èå«ÁÞïUWu7r"ÇͲ‡Û,R6ìN›+ß¶hl§·\´â£[)±™È?-+~†ŸØ01v8“Dû ··XH×s3j¥š©pkt<¹¤lØPÑÛŠ8a¹µëy‡ÿXíò¤`dºãr×:ØàÃ2îå8ž-$µÜÉ96Y¾Œ½{s©ùþÊ-ãØØbeu)žˆ`Ø´~Àɰ´gÜZ‹Æ®¤„ÖV¬œÄÛù‰~ö@ÆrEfž°­“=O+ øTíD/Ó&æcÆ™ù¾ìÜ+éHÙ°‰¢÷híÇèr]íòÒ”®8'ä÷_Åìñí£2#–\£!—ž®¾Eb@‹2åÐÒw»&+Ô¢”³·kÊ”˜ƒ¨„¦òœ‚Tb…ïâ¿ä/Éü@ò÷åþÖv=!Âï€÷¡ünÛ?åºTÊ’î¨Ël\ î51Úÿñû£d³!vá*uU¶©üg'}eEjù«®gò6Ç{>PÛ´übЂ_Âq^MBlL™ç;wΤíÙœÃT6¢ô‡¬ZÞfå±,_*£.ìSR|Ds@'[Ü>ß,îÚŽóaçé±óàêöƸJIž¼‹KˆÍ×Uøfi <ÊT7¢d×Z*úí‚ý‰\Vu‹#-æÁæbŒ:`d’ ),~ÝTQÖú´ÞËìÂí©@‰ò&•v¶Žl]F,bù;AK߯Qbosïv[]´tí!Ü…VÖl÷1Säj)R³3Å>0-ØŸõeݨ[žáø$òÊÂbŒzÕÈ#ŠéþÃÇrwšyÊ·®•„1¢~ggëK- ˆ”ô•R½ü¦¼M_?×KSnâ½´É)Ä¡–{6µ…\?‘ýa‘óŇ2ŽÅN}eá64•- †HÇËCæ”§k$¹’Ô˜ÒÇOáE|)Éž`!YÁh€&\&n”Þ¼¶›èÒ¢*¼gE©?!¶6¼oVY¸eï}%w}çZ;™}/, Œ$ìK{+±Ìu„øÍU;óÃîZæèvÖö;îüFƒ[ÄÜRsGÏù¼`†³ˆWÍu€”åa+¾3ÑbC]<¯ìhrÔÒë7Þy¸•­oÖþ£$c‘ãù¼WŠÈ†P lˆ§+ÙÞJEd³þ—Šû/%Û[[2ºówÛ=ÆŒŽõÊÝíœ>&µmk3«c)m°ûÐÛ¥®we7l-´.VŠÑ™É#µ¹Û*tM§ŒÁ> bo<2Þ’£S£N ðtÙ ¬ý§?øß¸·O.§>[³Nôo‘øC»1Ef#nŠ v»Ìò›T³/\ñÁN–5½síî'±²íô,Š+Fg&e@Û|¤j–®ä¬‘?îð`Y‰9¶Ýõž-t¢>빊òÕ2Ì,}DÞó+²P)ìSŠœgEùèžW?¥Áf8…”c¯o·óm8*ؾZÞäd}~œ‰Ý‹ÄöÕ¤þT‹õ?)Ìâa'Ódª9'G(J#—Ò¶[²ßÞó™Ü™Û÷ZS%›¼ >ŸÙ÷PÐ='!!!!ñAæÚ“²ABBBBBÊ ‰¼Ÿ7ä=]‘ø:lŽƒWä§ü”ŸòS~~2ŸÒ§$!!!!‘)$$$$$¤l²ABBBBBÊ ‰M§ä(ËOy„/?å§ü”Ÿ÷§#í éS’²ABBBBBÊ )$$$$$¤lØ-âkÎË Vù)?å§üüTƒX¥Ý !!!!!}JR6HHHHHHÙ !!!!!eƒ„„„„„” ÛF| «ÐäÈ9’øà$ÉÇ‘Â@Bâcƒ¢(rk?‰ÙØ}ßâ~Qú”$$$$$¤løÒhx"³±û¾Åý¢” R6HHHHHHÙ !!!!!eƒ„„„„„” e£&§@Bâc…¢(Áÿýd£•ÖCø3óæ$Ô½­®ZäÀÝ/C?$eƒ„ÄÇŒO->('a}Õ´ì¬{qÍÊû ™ eƒ„„„„„” R6HHHHHHÙ !!!!±)–qJínÿÛÿýüO9)Ÿ ÚÝ~„lýABBBBâS·> ^˹p¡8ŽóŸÿë“!!!!!áâ_þÏÿúÿ÷Û æ/ÏU?IEND®B`‚saods9/ds9/doc/user/rgb/ds9.png000644 000765 000000 00000460322 11332353405 016573 0ustar00joyewheel000000 000000 ‰PNG  IHDRPdC ®bKGDÿÿÿ ½§“ pHYs  šœtIMEÚza´Ø IDATxÚì½y|×}/z° f°€.‚(ÀÖÚ´Ût,GJ”:qbg±“8ËÜ*7bož«Þ&·4ãÖ}æçó’û¹a›ûZÓìKÓ²Ík);Jªô9NmÇv7Š5R,;LlZ’E‹’ Ñ€H€ˆíýñNŽfp'Aò÷ýƒ˜9sΙ™ß¾è†‡‡@ —a, w¾6‚@ O?ÚÉÓ½óŽ{?ñ¹ƒ´AÄÔëÏÒ&lدÿ>üû·»Ÿ~´S÷µoÿl$2IûB 8,—þ󡇢}Ø8øË¿üËéÍïaŒ½=x.xꤑ1–N%i_àšøÕC=T(h+6>ùÉO>ñÄ®›ñ/1PÉ$‘… Î ŒŒ±™tJüíÒé_luèG6›½0iÚä»¶èÓÖÉ7'2þßOJ c ŒŒŒD"‘¹ïv»kkkW÷\œcL§«ÞyKêRïO|Ü`0<õô3±1‹³Fu~&ô[oO°ÚÀ-ªÓ Â:@*u…¼øï|' A^lll¼í¶ÛŠžuîܹïÿûn·û _øÂFÛ±X,‰D®½öÚ¹ŸræÌƘÃáX­sÕ?\&æFƘîJÊ.ÉÊ´sçáïy÷î[¯½&pá…sV‡Ñ¤ˆÇè#oälRÂâÛdsÐ+D ¬?¨ÈÂ=÷ÜÓÓÓs÷Ýw †ýèGƒƒƒW]u•ê”ÉÉÉW^yE’¤{î¹G·ñäÅñññÆÆÆyÒØØxæÌ§Ó¹Zç–ºé` zÕÏVWmè­ðÉ“/WW{v^µ¥·ÿ—µ×¿±ßž ¾ÖXWõÒ¹ñúÆèý>{Ç;ïÞûŽ^:óèOÐnÖc°ÙlûØÇüñ›o¾yûöíO<ñÄýÑÙl6~@¡Pxúé§ãñø>ðêêê¹c `‡:+®æK}I¨¾úú7_{qrr@¯×; é±ßÔìhfŒM·¹Ø‰¾ßÍšu6^cÿGnÝé«‘Œ†èTòâÈø¿6a©²¸jé¡ÓÁ1oÓ:½aVŽôÀçî¨vÙ†Ç&††Ç\Û ;ë Éh.¯7$ÆXƒ¿\1vƒß¼4b”ÆØïºös¾•16¼”L¥wø>÷‘wyݶCϾ̵–‰Ñ·“‰˜Ùæ¬Îð[¹‰±B1^k³Èÿgˇ­fÓŽýJÇ wî}gÓÒþO1f D¨|xÿûßáÂ…½^ŸN§Ÿ}öٻ1öÚk¯ ÎÌÌ´´´ÌJ¤¾ûÝïNOOã&“ióæÍ»wï¶Z­øuddäµ×^™™™‘$Éãñ\ýõ[·nÕžXSSsë­·jí!«¸cZR;w©_<÷›ßüf©ãÿäOþd.犇ý²¸žQÞ”ŒrmÓÆ~ýCÉÀôz]dàWúêšL.iñßb2Ûf]°Ûa­vÙÒ3™Ï?ðõ‚No”ä*«œH$,›¶2cìÝ7ì`Œ{ëíWm¹}ÏMÿöÂKv·×f–?û›c=ñãGŸø±Ñ¤ì¾éÚ¯~én¿õúg_|y,ù»©òùoÿÏŒ±C?üåÝ{›“ôäÏ_»Šü·ív;¬/zëÿ}òx>_`ŒýégoÛ±µÆn‘g²¹¡±Ã?zùíÑ(cl§¯æ¿Ý½»Úe{í\h2ž|ß;ÿqòìcϾÄ«qÙï½ó×^U+ o^;üÜɡѨj þš?¼{·ÇùÛÓEuì÷ï¼eÏ;®¶[”d:óöXôÿöbÀWk5›.^ûëüW³ÍqÓu;}Þêíe ’Õ1òÞÖc`Œ}îsŸûÚ×¾666Æ{î¹çª««wìØñ“Ÿü$~ùË_6s_–e½^ŸJ¥Þzë­X,v÷Ýw˲|îܹ_|±P(H’d6›s¹\(J¥RV«ÕívãD³Ù,IR2™¼xñâøøø'>ñ ‹Å²qLI?þñï¼óÎYÏýæ7¿ùÅ/~Ÿÿîïþ®Ô¹¥LIzÕè*Xª6Y¯º¥P($RÙÓ[ô3“R³Ö§›âÓéÔLF6I_ûò¸÷ž[w½So­¶¸ë F#c:Éh¼å:?cì¾ût|:YëqíØâf…Â5þ:“d, ÿèç6Wµg˶þá䥱(c¬i»7Œk©è'Þ{ý`hÔj6Ý{ÇÍÿã¿üÞÛ#ãù|þ=7l¿¾¾JǘN§ó¸l?ùµC?xáô›®Û¶ùKŸ~Ov&mQL÷ßû>oµãÌ@019qÛÍ;c‰X8™eé¡–;o¾fë+¯¿ùã'®ñ×üùçnWŒWl”E1µî{ßfãìù‹©D §M;¼ÞÓŒúþxôx!7“¿”N§cn§½Þ[Ûp͵»•1¶ckmr*¦c:¡r 2S¨`6›¿øÅ/ÆB¡P(ž|òÉÇÿÁüËåÒϸ„ÃáØ¹s§×ëeŒÅãñÓ§Og³ÙÿüÏÿ, v»}ëÖ­õõõMMM‹åí·ß. 8Ñn·oß¾Ýï÷3ÆR©Ô믿^f¶+ŒìvÑsc;‹A«(hÏýÒ—¾ÄùN§ã\§kÏmJº¹h @~z<_`é‚i[µÍd2I9]ùã92¹B÷ãÇöøæ[ÞÑpË;cl$ë:ò³KáI¦ÓÝØPoULÑÉø«gzÏ ¾÷ækÞÿ®=ó²Ý¢0ÆRé™Ätº¶ú*½Þh ÑDjs5sTYSÓSÚ uþóã'~óFÏÿ~ ¾ÎóÜ‹/}ë{Ï>ð|öνÍ[kª~ùú[6‡çýóó^·ÙìG_~ãÑ¿Üî­ÙÄR‘n¾Æf–ñ/wüƒÑ¤Ø¬Öæë¶C¹1P¿©ÊòÖÐH×?ÿ›ÉlómÙ|óuÛ›|Ž—ÏMèÒom_;ë­f9¼ÿkoä¿z å¦k·ýV’$ÆØT<ñöèøHtú»ÏH'§gôƒo‡wúêý¿ÿŒ1‰Y‘3éifwÍqK „U×c^¯÷Þ{ï}ôÑG ƒÑhÛ³gÏ|ccµµµ‰DÚÃôôôàà`&“Ñétn·»ººzûö팱|>ŸËåÒét6›ÅYSSScccŒ±ªªªT*•b=™’€|ä#ªoþöoÿVtÿ”:÷OÿôOqä7¾ñ ‘+ˆÎî|.“ˆ0yé\vü|Æ\Sešž™™I§Ól&<Þb¯Þ:—5ÿæÜ¥Ÿþ_ÿ¸Ù!_·Ó÷©½×[ëþð-WÿÓÓ'&󞦫c'zOëô†_õ¿ýÞ›¯ù½]7|ëû?J¦cŠl²ZÍ:ƒ^o00Îe·2ÆbS‰|.Ç4‰úÁó9•-0ÆÞ|kÈlwfõcL’Œ3é¤Á¨ûüGw57|Òj–ù)&ƒÎªcC—Ƙΰi³$ö;[Ð&‡…1vU}íÿð?ù—uçÔ¯ÎUyê`ùqØ-Œ±‹¡Q¦×»½W]Ÿ¾éò‘¯ ýêô…æk¯º>pclt|ò?úìðD²ãÐóuoëÒhdÏÍ×½ûæë£“S…|>Ï Ê!TÊÓ¸ÁÁANçr¹²Ù¬¢(ù|~¾4qttô…^€êàr¹¬V+Rêt:Á`ðûý¯¾úê©S§cƒáóŸÿ<7R%“É¡¡!Nˆ‘¨µŠ¼;¶´äR£iµ:í‘­­­]]]"WøèG?ª½nYƒ¾øåSSS¿œÎ·ÝüÁädd¼ï=Ë1Æ¢g.Û?.[ìå, ×oÛÜËr‰ø±S!wõ¿ÿ‘wÛ¬ÊÄèÛþ×Þ°s cì÷íúðm»p¼Õ¢ÜØòÆ…ÐL&k’ŒŸüà»_øõE½¬ÇoÛÎ{åµ³CWm.—3Ê2¶&›ËI²¢¿ì/òï~ÇÕ{oÜÿ«ønb:ùðC±ã±8clK]µIQ˜Nï«óð'&“Œ±`häý;ÿr<:•Ëf …¼Þ`dŒM&RŒ±êMN£$똾Öý»|ŽL6ßyä§3±¯Çñ_>ò{ï¾ùº] ›Ÿ>qÞ`_ys${jÐf1ý÷Ï}‚1Ö{êœÎ 1]É[@ T ÆðÒK/ýüç?Ç;Þ1::šL&Óéô /¼pÍ5×\wÝusßl6ƒÊONNÖÖÖ^}õÕÈÝ……J’¤­[·†Ãá‘‘‘|>ìØ±;î¸'ÖÔÔØl¶T* …ÆÇdz٬$I•6±ä>†YC™syäþùÍ7ß¼ÿþûç2[NˆJš’òÙLâü ¦Óyo¼C’-Rµ%Ø›<ÿ Y6I’ø¥ÜôÁò“düŸÙ›HÝ:4-ØÎzcìÕ3…|î–†­Fƒ~:™úõé߆œ^µ¥vKçïnîüÎüÛüjÿ‡o=ðé;÷Þ:’cúõÆØ½rf èö^]ÜS«Ó .\¨a’¹\Î$™nûà-œIþælp*‘ªÞäxøÏÿ0™e×^ý»ñÞ³ÇcqŸ·ö£ïÛýv$Þð}ëû?¿5 ¿ðõ ÉdzKçKðÑ|S žŸ~ývïÇ÷¾ãÌù¡dj¦~s-c,6Ÿœù˶Ñ©éD2ýÎk}V³|ìå¾7‚nïÕzŽLI„µÂ.]ºôØc¹\®ûî»ohh¨³³þ³ú§úêW¿ºiÓ¦9Žo·Û½^ïàààÄÄD0¼þúë·mÛö³Ÿý,›ÍŽe³Ù;vLMMŒŒàøhôwÑ;wît¹\ßûÞ÷ …Â… ¶mÛV þç%7%•mVSÒÃ?Ì7êÍ7ߟøò—¿<;c˜5!9ôÝ4ZuSÕå¨üM[cÓã>{F’¤B¡pqðUÇÕå–g2ùgŽŸÚ±¹Ê·¹V6I‘èäÑã¿>òôO•*÷žw\Í{úè/¿õ½çdÅÂk ø¿þÀ]7\cüö3ÿñʹ‹‡î¾íæ~¯Á †FŸ}ñ¥'~tÌlsH²™•ŠáÑýÈŽ¿z¾¡ÞuËuÛþôÀ'ž9öj*Qd‰1–LÏ<òÝŸ´ÜuËvßæW^ó…_üæÎ÷Ü”Ëçc©™lÇ¡ç?ùž†w6í|¯¢LL%Î \ýÓG¿ÿ#ÅR%Éf½Á¨#Sa-˜’Òéô¿üË¿èõú/}éKv»ýÚk¯ý¾ð­o}K’$½^ÿ裶¶¶Uë‹¢¶¶¶¾¾þ™gžI¥R¿ùÍo>ô¡Ýzë­ÇŸššúÁ~PWWǵgMMM:u*•JÁ-Ër4u8s¿îʘ’þæoþ¦Ô‘<ðÀò™’øuaAzàðÍÃ?¬½n©‘‹k Ó#ç¶¹¥Wƒfïõ7ˆÒwuà]“C'oÞéËårŽÉɳcAkÍU¥Ÿ/°ï¿øúÈàÙ\&“ͦ ù‚Þ`0Û\V§û¯ý‘àÙ™Ô´Õá¶oª) ÁhöS_þÛèÈEÓÕÚ«O ͼôÍÿ/˜Ì¤ÓV0M¶MµÖªM£éϾùÌàé—óùœ³Ú{àkÿzñ_1ƪ­µþd¨ÿÕl&í¬©ÿÞO^ýûÇ~˜·TmšÉåþþ‰_D¾ù™Ô´^oøÞsÇÑH¡÷ÔÛ‡£©/}ý±ääx6›élÿ‘p»Îuþq21•IMçóyƒÁh”‡Ç¥¶ëÂHüKu(95‘ÍfdÅòu.5·Tmz{,öÕz*|é­\f¦ÏëõÙb³T¹{ö•‡¿õ½t2^Èå FƒbuÙ]Õ£„¬¡ò5†'žx"›Í~æ3Ÿg˜1ö®w½kppp``@’¤|>ÿôÓOßsÏ=s¿J}}ý–-[†††.]º444ÔÜÜ<99900J¥.^¼h4ív»J€A¯×[,‡Ã!I’Åbá1Kk”ôä“O~âŸ(ozóÍ7K±–¹˜’Àp•?û³?ûë¿þë¢×-§1¨œÏ3S¿%ѯm¼]ÉRtC¾úúé™è5;®žšš*\žOÄäÒYfz½ÑYSŸÏguL§Ó É%ÙhRª<›õzƒÞ`4J²$+Œ1“lÑë &ÅÂXA±TŒRÚR¥Óéõ=t“I1˜dƘ£¦Þ¤˜u:=Óéœ5õе «pÔl1$ÁÀ³oª3W¹Œ’̘N±Øž-LÇàP¬UFÉĘnÿ‡ß©c7¿uqx‡¿î†k®ŠO'ï5JÆt:½ÁQ½ÅdŽtL¯3ètº+0øïîŠÁY½Åd± ’N¯/ ö\Ö`”c&³ÍU½E¯7ê.OÞ`”Œ&“ý9ŸÏ F "™LF“™haMh ¿øÅ/ÂáðöíÛo¿ýv‘¦|æ3Ÿ9tèÝnÏårápøÕW_½é¦›ÊŒ|ß}÷=÷Üs™Läéãÿø‰'b±X0¬¯¯ßµkWmmíÄÄD<‡ÿÀb±ÔÔÔ¨NÄ -ËÖ­[%I‚ʲê;&ÎáÁ|â‰'fÝ^mÌèRûÉO~Rû¥ê\-Ï)iJЇƒg§'ß;’¬“b­z=2=~=•Je23S™iÅ~siÊ,öâl£j“ºè«$+Îj/ÿפXLJq»¡«f ÿ¼©ÎÇ?;Üuü³Q2‰§Ø\í8¡ðäûn¼êÖF2=óòëçþñ;OF§žúÍ:½^§ÓŒ’Íé)ÿ(H²â•â&ÔMEªÚZ›ˆâÖ¢Æ _{íµ|>ÿû¿ÿû*‚"IÒ§>õ©Ÿþô§>Ÿojjêµ×^Û²eKѪÎ@ÀjµÂ"ËòÎ;óù¼ÉdJ&“.—kÇŽˆF5 ˜†Á`°Ùl:ŽŸÈ‡2 v»}ÕíHEeðO}êSs¨f5ßù,ùk2÷u™.M ư /ç\®µÜóY­w©Âßa>=—Ëår¹&&&–vÂEå€Jà Ú…WάVeJ+)/–ºËz¹%d±k…=—c–UÐ.%×óÇß,ຟ[F#)%&/•îRfÕÚÅŠW¿W}^É[³ä/jù[Pê¾ÌºË-³—ßí%¹ª^ð¥Å[öàƒV²Sæ5'}h© _¦ÛÆåÇ¥ôŠ’Eíc±LÏDz.m¾¯DÑ™ˆ’»êóÊÏ_Åb—+Ìq]åwcÁ´ÒƒöŠóÚí•yMæ{饚ß"í—EZÀ(úŽ‹ƒóÏe>,ížkWW~ÉË1Õd Kuw¼Ý%”÷–díÚWbÉí6‹œ^ÑÉ,É +Mõéi)éTÂ=ªÁ©aÑm^äRÉ+³®nŽìyý˜’沘¥ÚôÞ¸¢&šeZÚÖ^Ê1¾˜WkñÓ«Sûª<'å>ëVWšÀ¸˜›¸¬–º¥z£Wkz¥g*ö 7Và¶ê(ÿºVÂÒJÙÜ×Ù­©´÷GœO){æ¼îÑzâ¦+)/V¬fÝ@¿Ü/Ò2ÝÂå“Åæè¨—¦²b¯‰ÀƒJ¶o®©j©6v1÷BëV©äÛºHC¨hœYEWßR1ÑJž¹q9Ö¬%šKÂ8ÙUœ½úr”¥]ÚRÍD5«Õº5+£½]ŠÝíV—™@ù{´„s.:T™ÁWý1^I–_!ÄW»äe¥T+ÍÊX½Uk^>ÍT{Å%Y+3ଳZŽ ÌúÍÜ]á[³˜+Îe«W~<«¹ÜÓ y`V€§®Øåfµø-•`´y¥’yup#ËÅ–VX`Z˜´´$ÂÁäVÁ–Rª•D Ö*ß…Vá Æ@ Ö§S>φPdJ"ë–7Hc 1@ c 1@ c 1@ c BÅòÂ,8tèmi ð[tuuÑ&c â dJ"åpàÀÚ„õ §ÓÙßßO@ f1@ c 1@ ,#cXpw¤…H͘¡¢§Ñ+F¬'&&¨ç@ ¬®ÊÛæ‰bbbBÕEOä*Ê^ôHÕ°ªoJýJ „ÕÔTZ‚ø¯Ëåi7§æZ‚>ëø¥ÎZؘ@XFÆ0«!þ[F¢/ÊBJ1€ò̃@ K‹…˜’æ%þ/€»po³–Ù”ù•@ +ÍŠŠö¥¨)Ç€HåË0®Lh©ù_ ¡”„ºcabk)ÃÉŠM[}¥ÝÂ2ÛJº@XÁ]£ŽÉÕ²™—o="/ª[pÙ¿èY¥4‰R¿B1¼T”£Q©’ÓK}ÏJDcбšó"Pœ¸ÍeðòkY°Ö²@ÆPÔªSæ›RŸË2÷1 aɉö_͉>>ó/µQûËÁäTsXè+ç6ÂêBeº™Õ’³º¢jù°þÅŒ¼jýÈ[@ *+”ùw¹Ù¢«Õ¦ra ±e•˜WlRuU°žI¹è*PkXá^îD®Y€6gÉ=ÄÂúç Ú¸Õ¹SÏy¥Ö.`ü%ŸÃâA=Ÿ Âúç åóyÅFj¿™õôÏv.1™Ë·I@ ˆ1@ ˆ1a!P;Ÿ:D›B ¤1ü]]]´#@Œ¸@ ~‡+LI !68¾þõ¯Ó&c¸N§se.FWòrré51ŸÕ!®Ui¾.ÈLx*ÿá!¬ÆÀµeÅ¡C‡¸v²—«K¯‰ù¬î ÅkUŽþêt:ùÂ+êUþÃCX£ pU@ c 1@ c „yÀét’˜_ÙmUë‰åë|=Ç™¨&°¬“YÝ^¤ª¾…¢;C­[×ÐÓµø9h›ÒÌqœÊyNxˆk°Z˜5*o¹C3ŒkëÙÕbÅæ³Š _‹D–X¿éè'³†žUàY%ð†«}µÔOÿuÏrOo®ŒAlWJQ˜µ“õ‚eñS ®RØ¢{'©.QF5çVJqYëΗ9lÞšRL±2—sèСY‰~4ݘŒ•üº®ÖËÏÅ6·ܫ˟X1SûZ¤­ K+V—-ãèšË-[Ó®{­ö\™Ë9pà€XS¤óؘ¥EõËôê.«Þ0‰låõ•åz­„-ÕÍZ™=¯d#Rù¹-`Ÿ—\Ð^]É}/òÊðâ ËÈTzô"_Ý¢£‰”·üY‹'â—u¥K¸ís×–c +É ESLùGeŦ4÷i”¿eK>óÕÝŸ…½È•À62W˜Ÿ)I¼‹E•İ#i¯«:l çPf乨—–i&ÚaöërLožòOEù/—{+6·òó\ɉ-æºó}Y*Êʤµ)mp®ÀÖhT@ ,o¨®ðñ_÷c „Õç ¬28p`uÃd‰1cÔÛXUW%1@ ”FSÒ gú­bba¥å4V~ŽåJΰ2+ÕTì=Ú˜ º„e‚îkßþÙÅÑØôäD³sœLláë_ÿúC=”ÏçGGGŸ}öY" ëN§³¿¿¿¦¦¦¿¿ÿ‰'žˆÖ¼{lh xê$™’pŒK¢¿óÎG žÇâGX<*a´u¼Ê·ör@(ÎøC«.4kàE¾Þ•³í=ZÓ Yëwd9¤1ÕÌ‹¾Œ³.­Hg@-¨Þ°ŠX Ãb:ͪ:=ñG¤Ôƒ>kg·<^—¡} Äi”šï­ý<_ò±ÈŽŒ•³E¢²FïȪHxs_`)‰pY¹‚È6,c ~ kÉBµ$†‹ 1µ-ÞÎP96ÃEÎdí?gåšZb¾ô}Y·¥¼Z°‘õý\n³Ø{}ÁºÂbô† Á*¾º+ÐO{%²TÖçJ¸#KBÖ× Wÿ2 ,J V˜D:thV¢F7fÙZã²>²k+hl ´R3™/«¨…,þÙ^7Öâá “±Ïsæ±1ëG­¥<†¥z…æ;Îê2¶%$•³  tG*“Ð/àÍZ]½÷y&®0oaÕõ}„%ˆ>¨2ÑsgÁääL;¢_.ùN.þ•°¥%Ы¾E¦2¬;¢dQú^i ,¥7ld®ÀÖŠó¹hÜ^Ø7wµ·¼iuŽ«(?çÅ[ö*d!‹YQå,d9\ +¶å9Ñ_Ú®oØà\QT@ ˆ¼¡B¸ÂÇÝCŒ@ VŸ7°Êè™qàÀÕ “%Æ@ ŒQ;T]•@ ÄPELI‹Éô[|–`%ä®›\GZH¥ÊýÖ$cˆF£ 6´-æÜ¥añ¨„9ÐBÖåBVÝ£H ,„18C „+CWWí@ cøî¿ÿ~ÚaƒãÁ¤MØà ¨$@ c 1@ c „yàСC³_›T+‰@ ,ÚÖ k®{ã¡C‡®~ôUÆØ!¶úÕUgåOË=Cb ai öÁ^ª¶Þ+ÌcW?új%ð>->þëžåΔ$S@X •‚kÚÏ+ÙγôÐCù|~ttôÙgŸ¥g`}ã#ùHMMMÿO<­y÷ØÐ@ðÔI*‰A Ì ðôe ZSLQâËi½ø«êƒÊÁÀTU”i1Æ0Ï¢œ¦”Ɉ/M‹ÐÝ_¯p:ýýýÚïÉÇ@Øè §ÂÜÆÒÑÑ¡¢§ø Ñ;â¹>ŸÓk­aGôñ–¢È¥d|îc(Ê D^¥e'<ʨ|D“x &ˆ16.•ïêê¥rDæ@dæ_vttpVáv»Åü˜D"Á.甉2âö}•õ_§$z Xéø"þk{{»v’â|8óÐò*-û!Ï3a=SþY¤ïÜf‚Î)i{{»ÛíæÒw$Á÷‘H£ŸÏívû|>Ñâ$N NøË©j$éïïÇUcV«µ§§‡1ÖÝÝÍi±¸.žxÜÖÖÅW'îÖÎ]ܵ€ƒEï>tuuq&Š_¹ZÃY”ÈiÄ}#,-Ц•Æ@ ”Ó´Q›¢}\…©’E»ÖZ‚ãÝnw"‘À…¼^o:†˜{¾QSQEQTÖy.¼C“à'нÕjÅ9oðù|}}}n·;•Ja Nˆ#‘ܸ–èå¶Z­Á`PLQ¤(ò‹ns‘AŠÕ/¬V«v£TzÉšCåKâ‡Z‹Kaø»²&(§øœþ“èŒe%Ú ¨ƒmµZaVŠD"ÝÝÝÍÍÍ¡P(•JƒÁ`0èv»q ¨9¶Ùl ì@ÀívŸÏ×ÝÝ#AýÁWŸÏ·gϞǃA«ÕÚßßñÁ Ð€Óttt(Š".°Z­\âNÜÅ}Μ…ðÏ¢&!²ÕŽŽØÄTLN¬˜DO&aåx@Q)Uü—[6D[èo{{»Õjå_F">xÃånîl`—RAdA—S©T8ŽD"Á1¸HI¹s˜1‡›››9ÉN¥R‡ÃãñtwwG"‡ÃS °Z­n·Ûãñ …ÃaƘÇãá¤6 ‚µD"h ~¿WŒ`³âÞˆÖÖV®ë€AŠÎ›Ý \“õ¸ÜÛÛÛ±@‘ˆ~éYK´6È”DX¸h1#pJÄ 2ªø™ÖÖVP1‚DQ†™ã¬B“#‘h+ø¾ÏYźººº@ǹcÙjµ¶´´ÀUÐÔÔÄ/mÀëõÂôÕ!ƒÖ3Æ><88ˆ9¤R©¦¦¦x<®(ŠÓéàd;Ãa¤â çv"T¡±°MƒAžm'BåjGÃ7\§›Øaá(¥Sªî‚*‡ûf‹2 ՘ܘ®5€‹wd®qÛˆxp[[žLÀóþþ~.wŒŒ8Žúúú©©)°EQº»»%IbŒ9Îh4 ’½k×®}ûö9rÄd21ÆdYæ½»»»¿¿?ƒî×ÖÖž>}ZQ”þþþ@ L&›››‡‡‡c±cŒ« X ßYäÞÎ#ÅÜm­ŸÏÇYl à*—ßïß¿?â¦Ä(XÂÑ#,J-˜;)í!Ü1Ëi—²EpÍ€ IìÊ ÎKDç­B 9šó!|ÙÙÙÙÓÓ·0?Øáp„B!Püd2 ªÍSE–åt:m³Ùª««C¡P,稫«Ëår©TêìÙ³¹\.ÃÇ~ƒ …B!ˆä0j)Šb³ÙÂá°¢(©TŠÇ>A;I$øËY…Ê.r qß:::ü~oo/4Dâvww§R),™kEìéé±ÛíCCCÐÉDÞ,I’XD¯2k%!\u­8Ÿ+¶Þj%i‹è‘aãýYR%=͸R¦2ÓÙÙÙÚÚ*¦3ÁÖ)Ò+À™°[9O%ãtwÓ?ªV –_rÑÒÒ‚0Ö¦¦&Ö×ׇs£Ñh:ÅdŒy<»ÝžJ¥ªªª2™ŒÙlN$ápØn·' ø Ünw.—Ëf³6› ¾Î¥úúú¼^/†’e¹µµÕf³e2™ºººþþþÖÖV¾(„!µ··ãKh¿ßH\0n‹›„ÒÐ××§ˆÃá€N[±c=Á%€ÿKt ˆ1K¸â{•­†Í­sˬ½ÆT¦b‘1)AÛ¾Yª¸Åœg¥AvN$~Nºÿ~PFÄ,áK>ïX,"ëóù¼^/hz$ñx<^¯—1f2™†††êêê"‘ˆ,Ë6›í]ïz—×ë5 &“Éáp(ŠR[[›ÍfFc<—e9 "U Þo»ÝÞÜÜìv»C¡POO¢(¡P("©o 8%’´cÍÍÍ^¯÷ƒü X­«\ƒƒƒ`‡‡ aŒÕÕÕ)Š‚ŸpÊöíÛ9ÝÇvY­V¬Nõ––îÝN³.¹clbbbbb‚ÿK Æ@PëR¡ë"qÍ LˆãMµ%}@…UýjTÁ‘bô}ww7»2¢F¥"´¶¶Šv$>è ܹDPQ”¦¦&8!xŒ©ÇãAjss3÷ÓʲœH$2™Œ,Ëõõõ±XÌáp8NÎX,ÖÚÚzþüùúúú“'OšÍæX,666véÒ¥ÉÉIƒÁ033“L&£Ñh.—N¥RˆJòù|` ° ! *•J¹ÝnI’R©”ßïÇBŽ4ßRn ëììŒÇãz½~xx¸©©IQÑ+•ÚU( 6›Íï÷Ÿ444ÀªÎí'ªêÖü_^þš³îÀ´C¡¬1 ÇÃVƒöï߉Dz{{ûúúà'8}ú4¨3œŒ1¯×;44´}ûvƘ,ËHNŽF£SSS¯¾új:FL¤Óé4›Í’$y<îþþþ“'O‚a0ÆšššºººG<Ç<@6›mjjjiiÆ‘©TêàÁƒWõù|p!Àô/Ë2Fæ*Ž×ë…UJ¥ÿq• ng,D¿³³sppÐf³AE€… 줟'F`|ve"g¢ê òŒu¯FcX5”ÍæžÀ4õýË÷|/QZÔjT”Qî€R½.¨°Ïç;~ü8jÕqÞ²õéO&&$!ó˜¦i À‹Cð’ÚÐ<8_ÅétbJÁ`°±±™hŠŒBâþô§? ÎFeY‡Ãp;Çb±D"F‰„$Iƒƒƒ½½½N§“g´9N¿ßF÷íÛ—Éd©À90Áå÷ûG,“eaHõõõñx\’$ØB¡ÜÈÈvæI ‘H¤¥¥—ƒç‘ŸSŠú¯{½Ü*Z¥(êXneŸ§M• B¿×6‘S¸(ʳ±¸)1ûb~cÌãñ †DQ— η€i \ ÓüBHébŒ!"™ wŽzd6›0 Ägiàh4Š:zˆà´Ùlps³ âb±’âñ8Žw8}}}{öìÉf³Ùl~écÇŽA{@®†D"ÍÍ̓ƒƒ0UùýþÁÁAÌP’$𭦦¦óçÏïØ±cll,N#uŽ i˜\ÂÆrBÏ—)¦¹ñ]bB;ëÎÎÎ|pý%¸©¤~‘î«~*z|™/˃Ül •q-+=̪CÌ:xùlÞÀRÕæ^”ë– %Vºæ÷ðˆÕž!àc ‰D¢¹¹Ä‹ÂÑÊíéܼÎ.w%ƒ‘9‘HäÈ‘#6›mÏž=p6¸ÝnóƒÁúúzPC$0ÃÕ!IR__ŸÇãéëëv»Ý;vì8|ø0Zë ín``^‡ææfØpl6,3ðÃjTWW‹Å4€L1Ä>I’äv»Ïž=Ë ‡Ãˆ °Û8~[@&“ñûý0mÅãq«ÕšN§Óé4<É^¯7 9Ž|>o6›ëëë¡…ˆ…ð×ëõâê\àÌ•û¸®~ÜßßÏëËrõºwph *jšû—dJ"ÌNsË‹óåÉ1+V’ZY Î)ÃÊ„õ7hóŠ,Î 3áuŠØå™0hðT•"0(‘×ë ‡ÃÈ6€t­©© ü£©© ’5<]]]—‘8}øða«Õj4÷ïߺˆRégŒáKä4Àö’H$öïßïóùP4Ùd¨º*ËrSSüºœue2‘@¦!Âs³Ïðð0¤~ǃÀ§H$‚Emß¾Ýívg³Yžíìt:‘g6›;::ÀoÀ3EÇ› þ²,£0_:v: ò6›M–e$aôôôÀýÀÝïˆÍåºHàZPƒøÝäí(šššàŠ ²Ûb Ë☠'(uº*Q€“¢§‹–×Òô¢ã—™ƒ*2UŠIJ\ ઠ/qÂÄ5Ñ<…bD–}˜b|`µZÑÖ&‘Hø|>$—ÁÁ.ÇÞX­Öîîî¶¶6””Èf³===)lñx¦d€ªŠ!˜ ʈ²ÙlSSSÁ`°¯¯/ ù|>¨/²,Ã4ìØ1h|ð¶žž$%ðŒ„L&ÃÃ䇇‡cƒƒƒV«uppðôéÓ<€5›Íúý~”N ƒ©Têøñãìr7P‡Ã-’$ "†B¡úúúL&“Ífõz½Íf»îºëo±wï^ÎQKã ›¬wçäÉ“~¿¿©©Éï÷c!HÄs:ÜDÆ®l2A Æ@˜%GlŽò~)C|)ƒOù2Dˆ5œ»Ž_*yM«a¨ú´psO ÐV9Å)¼–>·µµñ:<œÀÃÉ{œ‰1ø\¤µE¼ äqÐ\PÿöövŽ@ ã8¢n‚Á < étzxxx``Àl6ó>½½½(Q‡qZZZÑ„št(=Ç8¢qöìÙƒbÜÞ’N§!†Ãþa”×ï÷·´´„B¡x<Ž KDP©èSÁ”‚Á Œ<ÑhF'Î0êêꌄ”´T*úúúÐff¥P($˲,˧NI¥RcccSSSȼknn†Ý ´~×®]ÐxÀ'àHÀ¦9ÎÛn» Îô bŒíß¿ïÞ½ÑhÔf³I@£À$1†’Ú@Q>1¯XÒò²¹ªý€6p¨¨ÍGÍ©’ų´„žçA‹10M+(&sçÕ踃šxX¤Ûínjj‚íˆç"@„¯««CŽˆT*rßÔÔZ …0d^b‚ ÁÄtðàA(Éd3÷ûý(œ‡ÒÖ^¯—«2h¬ë æjE™LaB ­(”„òsbwîÑmkkëíííêêÛëééAºŒBP8Då&´´´ ךçNƒ‡¡æv?·y<¾v”Öp»Ýét:‹y<ÇsúôéD"qñâÅH$rüøñx<žÍfN'øÄÉ“'›ššx!Þ9ךžžÆ%†††°Ñh1WŒ±ÆÆÆ¶¶¶žžRŽ1Ìj—Éqy³J@ ëyoo/üØŠ¢´´´ œ´µµA8˜6·ÿ0Æ<Í«@#’µµµuÏž=ˆÒAøÍ¾}ûúûûa¡‚‘JìøS :µo!PŠ].k-dxxØï÷£%'.„ÉðA¨GÍ.§Oó2׃a`` °ÿˆ¬Ds;þ|,C £Ñˆ” ·Û=55500À“$iïÞ½(ÊÍ=Ø[(OXŠyàhQø€_;&I’Õjíïïß·oc¬··wppѨø‹_Ýn7’-z{{EÁf¢ì/FKØÈXQÆ0ÛNQªº„±Õséu¬F©´¯òF-Ñø£%質5ª~8eb¸nÁÉ·êrbÁ;ÑCÀ®Œ[Å  Gb¥kÎiÄD‡ƒ"œ z[;¤¹߀Ê#­Leúg— 9p‘œ{¤y”P ‡ÃÈí‚-¥»»€tòX#ÐS̯-v¹H*wðr'<–ÙÝÝÝÝÝ É]QÞ~ñûýð4pSÒáÇA…QßÂëõ‹£‘‘‘L&ƒ¸&ðB8Ž?Žü±½3×–"‘bŠvíÚÅÓ›ùŽ1ÆâŽ`CÝY¬TâV#¯â¶Ûn‹D"ñx X,‘E‚~%¹ÂÜ› °bY¾åÆË•ÉüÒ6Š)Cë9õ3ªÊBâñZugÖ¨Y•AIdN\P9Äyª¸5‰ç0ó¹q¹ á™ ßÀÀ€$IÐuxåm¸(н¹µµJJ‰ð¶<Ø¢ööv8Òá’eé¼y¢Â0¯×{þüy¯× Vü81òŠ@>†%ö1,mÐòÁ6+€2ñ<*ꯚ¤Öj¯=L,7¤b‡<Uìi£e–âüDž0 Ô[~X±:|ÃáR¶X•‡!a|¬EÔEø%È·˜!².±º'¿"¿ø ´„ÆÆF¤=#,B1êÜñ¡`ù¾",êÁ%›L&a™ñz½étzzz6wEQ†††<OUU•,ËÓÓÓ ñ˜C0„áCe³ÙG°ÙlV«Õ`0À‡ º …jkk£Ñ(•N§m6[&“ψF£ª««‹BŒ6ðÌmÄË¢,63=g‘ébCcÍÍÍápØãñôööâèŒväÈÞ2í Nž<©ŠðÓ‚Ë7‘H˜L¦™™¤7çr9¾r¹ªD¤R)ƒÁPUU511Ú«ìr®¸X­ÖúúzEQPIT5x¦B*•BfJ\TUUMNNâ'‡Ãa2™ÆÇÇGFFjkkOŸ>íõzÁ$fff0=ƒÁ€ä5äÇqw‹×ë­®®F¯iÑÇÀo J_p©ŠW]]]2™„o¬‚G^544 …aZ“““Ðc£££D%×7jjj bŠÃÒ˜’ÊÓëÅü:ǃË'‹1!ò²ÌPsŸ‰8šhiQV-¿™{>væâ€Z_4‰LEËxÿ+–ïç‘É%šØå¬1„¯twwsf Ë2R½l6ÛþýûAÍE»ç@GŽ«à"ÕÐ'`ÓhkkCp*,!°<<,v¬Ã¶ÃÙÀ}õÜ4‡ú`c<—‚KŽávHQo€›=N#óù7Þ r¹¡0;c(åJ­ÌÝ=ë´Uä{‘6.•F¢%»eÌFyôþÕŽ¯º#¢šRÊAR¦*FQE†^<§µµõñLJ‘û?A§`HI¥R™L†w²Ü·oŸ(VC&…íH”jEeK,K§*3Î T@äMä'|à!46› >[ü»sçα±1´t»jmm=räHmmíÌÌŒ^¯ŠÅb·ÜrK<Ïçó¸Ëå‚ËÁd2qï1´ \ј&ZuÆÆÆ`ŠF£“““UUUðO`{«ªª"‘HuuµÁ`Èd2’$år¹M›6Áª^266V]]=55…oª««‰ÄØØš% 8¢eY†æ„ày ý°³q‚]N¿äܔϊ«}\þô§?ÝÝÝ}áÂ"” !¥ÑRåZJSÒäúy%ô.àø¢?•§ÎsÉp.£.pš+zÄ¡Êø«EI_¤ |Ò²^̧|=%ñ¢â 8ø•sv9D9·Üìó=¬ÈáU®ˆ]šyx W,à@ƒU³bXÄTdägíß¿ŸÛÇà3©…KQ”©©)³ÙŒðPnØAJ¤{£ÑZœÉd¬Vk6›5›Í¹\Îh4ær¹d2‰%Ƙ,ËåQmö¾ BÕkƒÁ`6›ãñxUUÕ/ùKˆÞN§úÊØy½ÞL&ƒ“Éd>ŸŸ™™QE’$“É·D:6›ÍcccF£Ñn·ëõz¬+ŸÏëõúH$‚i³ÙŒU ð¯SË.WÄÃæƒ+¨¬…===à²Øpñ°Ë1Wð‹ðÖÖü.sO¿)Š¢8NXÛDWÑ—¨Ô»¦:†?H¥ ¿ÚcJˆ«^•\¥rÝ-P¦§TöXí¦QjÚâÏ”™™œuæÌ™H$b±X`C³Ûí.— it²,c¥HÆA¬¾¾ÞápȲìp8Ð {‹$äs´µµAâÑ_Œ±¾¾¾]»vÁxÕÔÔ? ÒJÀ°{{{ш·ìÆÌƒÁ ,Ëxày ve ymÎ /Æ_[m÷@mm‘žˆAÏâàE¹‚x/&Ï®LBÒF?ŠÊ«hhå5ÄÄW•†q:w©–Üy%X±"ÇEIXå^ÛT±Ôl9ÛÓv/]ªœ„~©Ø€–‹ÄKEg§h}ì2 ÔT¹]Ú¢Eå}Õߢým¸ìÏï¥öxÞ2¡h—4ÞYUÓ‚¢@c^Hå˜âùÛÅ‘bÆ»º‹aåiÉüÒ\Üà/&=tww×ÖÖ:¡ÇGÜNOOšM‚ˆx<ž]»v±ËÅéP¹šKÄØ.õ£ª/è ‚Â«n€²···£=/Ò9”GăAðT®èííåŽtŵ³ÙìùóçcÙlÖëõ¢*/:­×ë‘Ë644ÄÃü§§§].—Åbq:Édr||\¯×›ÍæX,†¦:}}}N§“'`˲ …SÑh”eY¯×3ƢѨÙlÎçóà(ŠÇã&“ijj Sõõõããã›6mÂ~º\.½^ïr¹l6›Íf«ªª  œ˜˜ðûý‡czz:—Ëa-ét:“ÉÔ××C³Ah2dYF# èÈÐæV#,¡½½w°··9á(bØÙÙ¹oß>¤¼—ðÔkL|Å3 I UµÛí†âB:.Z\’K¦¼¹ˆªà£X²WKÇU$R³hO!É& dâ¯âûÒ&€¿nE{dñÄÏ¢B¤X ¥¨ ÊY‹ª€MѤÚ2âlÑ4^í¿eœ åù‡áýŸl™L¤3éÔf%ùüóÏãÌÝ»wŸ8qB;â‰'ð—©=L…o¼Q<¦££ãèÑ£|4Õ8E/QôZâ1üþ%ÿIŇwïÞ½{÷nÕåT»ÉêììÄg>gÕµp@[[ü'NðñUbŒ=z£évøÄ‰]]]çÏŸ?qâÄÑ£GŸ|òÉÝ»wßu×]ÃÃÃG½ë®»>ö±}å+_Á¹?úѰ¥·ß~»ÅbÁgÜ2œrâ2Ä[p×]wÝ~ûíwÝu×Ñ£Go¿ýöd2i±X,‹Çã‘$Éår…B!‡ÃQSSsîܹ­[·ŽŽŽZ,“É4::‹ÅΟ?o0b±ØÖ­[cÉd²££ã‡?üá7Þ‹Å>ÿùÏ£NÑŸÿùŸßwß}ÈOîèèØ»wo&“v»Ý˜­Ûí6™L÷Ýwßèè(Þí¯|å+GýЇ>„‚BøÀ@¡0ÿááaŒÓéthqsÕUW!W ººúå—_Þ´iÓøøxuuuUUÕ[o½uÍ5ל9sÑG‹Åh4šÍf$[,–D"Fkjjb±XMMM.—3 …BA¯×ONNêõúB¡`µZ½^o2™ù>vìXcc£ÝnWÅb± d_ †‰‰ I’@¦m6›Á`€®Àøø8Ø6X,–ééi³Ù<==FG6›E+S(ªªªt:Ýôôôôôt:.  ï:îâÅ‹v»| æ³Ù\(Âá0½™ÍæššhKgΜé·Ûío¾ù¦ÅbùØÇ>Çc±˜Åb¹ýöÛáþI$û÷ïï{ß‹^ÆØùóçs¹œÉd2ܺžûžL&yS¦ÚÚZøáM&S,Ãýíèè¸ñÆ?ûÙÏ666òw/Ë7ÞÈßþ =z§tttð#ñøJ2Æðôòw°±±ï -~ðîÝ»F#'ÇüÆéâûŽËÝu×]ªw¼(éã„KeÌÁ›¥¥cœñY8q×ÂY"m,Or1€1sñB|ŸùÞòqøà*Ó–xÌW¿úÕ¼øª$›§''bco—t>/‰·¹Œ_·ŒuoîÁ©E¯R>g‘>m­¥¾C‡*iÊó“UF-•F¬ <“ÂÊ{¡Åì ÑçÁ'ÀÍôÜtÞÒÒ„3“‡±ËY ø+Z®yš‚i /4?—Ï\ôgˆ½yÌc¬¹¹Q°Ÿw¹\Œ1I’Þ~ûmLµ¾¾>ŸÏ#™Ô™ÉUUU333ÕÕÕ:½qpQ§Ói0` ‚e ΃Á`·Ûgffl6[<Gƒ \T¯×ÃÁÛTUUXB¡P¶Z­™L)fð<çr9”ÛC¼ P¼àí@éÖX,÷r]]±ü~?rñ¸Õix6>OFáQOü®á¹…‘÷ñbó €6î@ÒfAŠo*C^û•šYéªÃelÈ"‘ EClÊwkWs´IE¥|sôwÎeeŒló ÀáÌîc5¦2ó-Ú¥ŽTô/cq*ÕÇx.w]œyQL52õì´F0ÕaÜ&#ŽT¦$íC,† ÁFÄ}}ÜÓ NkGÙ8±ÊÒƒ‹j  ªÜ¨‡Ê•eÐîÇû|>ôºÉd2à étÂ4”ÉdZ[[QO¤ìâûÜÞÞÎÕù®®.,þO1“#‹[lJ¼í3c u<ˆ ÜÕŒô˜nE1›Í(XKŽ¢(V«Õd2åóy¸ !ƺ\.ƒÁ`µZ- | Ç­Vk8–$ î뉉 »Ý‰D¦§§‘ë ·Üf³ÙëõnÚ´irrñ@  ’É$¯„Á„îi£££z½t:\Șs8v»=Nçr¹\.E–eø±ív{"‘H¥Ro¿ý6v&›ÍÚívä7 ³Úï÷ÃŒVWWg±X ¿"gM|öPœ£§§§»»ùÛpY§R©={ö !$ãiêÝÝÝmmm¨X…»‹Å@áÚihhe¹®®1Nìrcp쀪Ð/ž@îBà¢äUeo¹Ut(­D)z5ø3Ï îŠtIe‰}!Ü9Ç_´¢® ¼}â´ÑM¶(¡S•IÖÒXÀ»³¨¬=¢-n.v!-ÕÌex p…ÆpñâÅ¢LxÑÊëó=L”/XéÚD廞ͫÉAyd.»QT±sÊŠñ†¢Ï–JÈ*u›´2šŠŠ°“ÁÁAî>«!›ŒQ@žþ»³ñ\b1ˆžøCð½è 0‰¨FæÜŽ¿±<ê ÁNbÝÄécœn¸M.AˆA¦½^¯^¯ç:. É:™L"½ z†ÕjµÛíHE†](ŸÏcÚ°™¸\.PíD"ãŒÙlÕ~ýõ×kkk¡(@üG¯£ÑwHCCC(‚Š×ȃŸ&Nçóy$6K’”N§ñÙd2 8ó³ÙlUUE@Û07B>B¤ T!(YoÈâ>{ö,>°|Üe, M Lôöör•qpp°±±ñرc<œ¬h€9cBbÃဦÂËx@ƒ’µnÄ"óœQ‚¯>ëC^¦È欉2V¬qz-¡”à[ªùŠÊŠ0«ö°àhþ9ÚNÚÚÚ~øá’CÑÆ¥Äöò$•L]ʯ¢å`bAiU¤ŠJ|(ÓnS%¶kŸUÉÒ¢|[«¦h…RÌC¥Xª@ ®™ÁB‚ññª¨¼pP)xITüÊõ6qá Ý*:ËsÇPY‚d,ëííåeGA|C¡ܳ¨QÊãY!@ñ:”PõÚï÷£›[$È—2oÀ»¼Êp;ûý~xÚ¾à ¼26¾GOJ„Ÿæóy«Õ:88ˆf»ÝîõzgffÌf³Ëåâ\.ñññ©©©D"‘N§‡ÓécÈårð€1€˜ºÝn„*Y,¸7&''ãñx6›G´ Ô½8uꔢ( õ2™LˆIeŒåóy¸¦ÇÇÇáÌ'Ðëõv»+‹Á!ëêëåóùh4F1±T*‡½^/ ûý~ÇsòäILÅ9²ÙìöíÛe_4Ï÷x<(*Çñœ ´Ìï÷#òUl Ç_äööv¯×ËŽ‰D"‘صk,oðØK’„T>Ü ŸÏ‡˜]íËŽ8 ö÷÷óºâxÂy£êõcœDYlST±Ð¾§bXTy1‘¿˜Ü;­Õ´š œkâ|ø[_´Š¥Ö†\ÞrÃ? Ê¬Þl•½¤Ôòç•4ÇV9ªàªò†)íJQ[‘Y&2UÅ¢Uv*ÕÈüo ¯½€ØÜRz®—ÅgÈùŠåñG—æÄÔ™ëઠQ‡àuñðÌáAá1QV«U’¤öövøZ[[›ššxcÆØ‘#G¼^/xP;Ã"z•ïªXyÁ*œ÷0ÆÐ*V p t»„”ÚÛÛ@kk+r²Äž Üh† ¥R)‡Ã*ÙV«¬KQ”ÉÉÉt:½mÛ6ÄY¤j›N§õz=dùééé™™n²7™L‰DqJ8ç^ºt .´ÜA•‹éééB¡q»ªªÊét" Š<ÕÈR®««›žžN&“ Ž„Œ_(Aă‚"I’Á`0 ù|^–åšš»Ýn2™ÒétUUU2™¬®®†Áét"Ç"“É\wÝuÓÓÓ˜Ûí6 MMMèñ«ï í;‰DGUUÕSO=…øTÜ´JŸóz½ÍÍÍØvE¨åŽŽŽ––ijË%›†‡‡›šš†††’É$²C<Óé„X …ŠFàhß,cðT§ð^•[ |Ä× RaT}s¹ˆV^ˆæSEÝIÑfË45=ù{­m‘"ú>Åôü yELíÁ"§QùU¬Tü¦|?´ù1-Ÿ™KèêÿÏÚÛĶu¦gÿ¤D‰ß¢(Q¢%1±yƨ0 pк-¦€`ŠA'<˜ª‹BEgaxÕbºÑ²–ÚiãÅ,¼@1‹t¼ÀÀS”:c%’MI–(ñ›"EJ¤¨ÿâ_xæ9$%çÿz(6uxxxÎýq]×}Ý]ß¾ëíâ ¬Î#›·Õ8µª]+d÷Yhcñ`V¶ï¥¯íÚ9Zˆ§™Š¸¹U’››™ƒÁ wv½^ç¦äÑÑD `uªr5 A]NQï£G67798ô@¹\–a?°$õÝÆÆ†–©­¯¯‹$ 6$j³N€H$Q ¹N¦ª€š¥ ºÔG“‡ÃÁÁÁòòòîîîÄÄ/ÀßOìf³É$Ý1=ÓT*ùÙ¹\.·ÛÍ0Áåå%£>ŸozzúwÞ‰Çã0Ããããh™ŠÅ"Ò#t«NÖNÅëõzÞü!£$‰jµ =88800oŒD•óA"E/2<<|yyI’èt:¡Pèòò2ûý~—ˉD:N …Bgÿàà±V$¨×ëÏŸ?ËçóµZ d‰n)›Í^\\°j‚ [­V«Õ*²c™ë!M†kÉd2ÐBtÀJ¬BZ__g,q~~žmH,ŽF,Ë—’J¥X:½°° ¿äŽ•Yw²–Šë¾µ$«À²WoÃc•)ËËË©àŒÈ&#í|;KVëúÃ…í¦øÛ _f¬èºÑ½Wqé°š‚Ú^<¼39A*³A¹ðó“ϳ}¿¹ï¼»¸¿ÀÉ0¾¦„©ÿ È$ÃY¸Î§è5šØÕТ+áaN9 dg@LÏ ®ÈRþtå3,l¤R"£ÔþHÝgæì±Ô&&Û,Û;ÓÍR™–«àת1———×ÖÖp72y?‰²dË¢¯@Â'Ó‚‰OA5]¯×ïß¿ÿë_ÿšb? •J¥z½žH$`e™&ƒ”&jƒÁ““þ’!çZ­†þGVz÷SòÇã9<<„]oµZñxîYd @·J_‡¡ÎÏÏÙÛBÌm·Ûp¹\nhhÈï÷1—¡;¿X,NNN8[ÚŽp8ŒçùƯ_¿Îçó?øÁ ÓONN …‚ßfÚ9NMM1¸‹ÅǤMÂfCnr^B6??¯%Eº4ŽNMæ4µËaVfóöÓе“鵞Yk¿ˆ5Õ,!Ÿ0U€Ü»úX‹sÛ v-çûïo7Ÿô^m½~æ|´(ÅŠZ]CPI•ù¿–*©Kbø*Ï+ãf7+=^g®Ï;¾múé*\sý¡Iµy[›_†©¹ì¥©è3æî|HÄ<+Âãa‰#¿ 3U˜G°t¨zOÿd:m˜çƒ÷œt«š´2£³Þ‚  @ùíPøË;Á\/#å»I<¸{ôÄ*¦ð¦J“Jl7oÞ®¤˜œœ<;;s»Ý@:Dp„=Úˆ å'ÑétªÕª×ëEÂOÏÑ`†‡‡[­ú%Øl*÷€X&/ IDATp8|zz‡Q²bp’³¿¿ŸN§‡‡‡ñºd^äòò‹ì5888<<\*•}ðûýL'´Z-¸“f³yqq100î„eÓþþ>sË(¬ÓXcÆ«ú$F£q$‘€Ë‘F8ÆÕÕõÆ«ÜÂʉN‚oG[©Qa°åšÎ¥ÁÁAò±’–+e4ÇΩR§3Š¥.uJ´nÁ}‰-ã™þîß¡¸¼RMÛ_‡ÚËäú þ>UiW'··N ýÕ;׉þ×L×ìº=8Þçê¸ÞÒðš©ÛéXé°pŠ.,é‘Ò€©ÕÑC%)H¯ejVm%½?ÑjyyùñãÇ<Ûz&õb§#všÉ,-r‘Y¯7[Ó¬ ÁŒ–Ä™^ªæIê½ô¡¬×Kå¢ ×täˆè(üÐБ1 5f³900Ðjµ<ÏË—/™ÈCÔn·‡‡‡GFF.//i NOO=lp³Ù„‘n·Û———­V óÔááa·ÛÍÜ”£mÐËÀPØZ`Ö„{ëÅÅ2‚܆©òêt: î¡”õz½ÃÃÃX$Õj5x‚ããcSrã§§§Ì<凇‡iYêõz  =—Ëå±±1R _S$á"ÃCœý÷ÿ·¾GìÕh’‰i/pH4Wû!Nm6›¨’ø­Û·o³ÕΉá8Åu]…ªÖ°±Ó-X1ÎY8›I¢é¬ »ÂÂ×™i¸2Xw5VpZ-õŸê£³úÎ .Í_=Ç`NŸ;Í…úÃ÷Ökœž$}@çç±Hl§„À̱]ç,¦Ëä úÌ‹›Z mr6¿NöÚ;ÏÖâHÌqñÀ$Þ5>zôˆ:‹á“ 瘟Ÿ·È(“Áæ‹ ƒ<¥‰Db}}ÈXÇ~àÅ•JØWYŠâ>.lkzM6¸ŒUü`~~bgKŠzpp@ï"þío¡iypp@Àœ/PØ™œœœ››cg»Ý&JB):].W2™êi·Û2PâT­äF£/..MhµZȇèÈ4µZ-3‹Ðl6Á£Ð&ù|¾ááa ò†‡‡«Õ*¯–U©TjµÊ¥f³yyyév»i,0È` Ýív·Û ðåóù&'')ðÇÆÆxkZ‡D"w}~~îõz9m¤´d¯±±1¿ßëÖ-í¬fù‡…Æ`<9Èó+ú~ …B6›]]]õù|æÅô‰ÏçÃD{ ŸÏoooC;ݾ}x]»ÄÕ[ómê¶´d‚ÚQ=XÙBÁTm‡¨r‹¬6ÿ•Ì #& mñæ3ÕKêd>ºrË]¬øÖ'šKŽèr,µì#á½>ïÛ•Ö¸&™ì4/rÒ¿½° s ««zõJO$S£ÖÕèJeÅÚÚÚÜÜ#-–GP×/Ø™9¬E˜&Ô£÷"¼Z¨ÔDæL¯0Yý¥Ù=è.Ÿ››£Ä#%è•–þ€¾ëÒ!$[«««<Ì>Ÿovv6ŸÏ‡B¡/^µùXÝñ3¬òüüÝÝÝýì³ÏЀõÃ' …P(ÄãÀWóé§ŸÒO<|øÙÑÑÑd2ÉÏõzýä䥂Ôt: •- 2=¶R$óDˆã5-ÜMBÕš5cõœ³”T5&×#Ä*OÀ¯3™' ÿZ”Úµ«_Ü[iyœÌó•&u}}YЉÁš¦ë•‚ººÎõz0g¬×ôw¥6g‡a^)äeèÜÍjÚYõ›Ó˜×ŸÏè:-“é=`®>VN–C½¡4BRpS^9›+£ ì1Už¦ ¤˜ ÆÏž=K§ÓxÀ™Sæ4,Ï6¬ìÄÄ2lÈLü÷áÇ*<)µÖÖÖ8+~õ=‚oXYYAû”J¥pòù|wîÜÁ‰o}}½^¯Ó”Ðm¬­­‘!È:&„p(ºuëV"‘À’‹'8^ŸÏ···GÙ‰D&''\Xª|vv622‚÷€O­VCÒ (]­V‡‡‡ŒB¡Ð7ÆÇÇ)Æâñ8âTôE û‰Dbpp0£M¿#¶;¨'ÀûÕ©ð%úÂôùùy6›%vÓL ¿ûj·ÛøMaoF/..ÔU˜z'æ'ü~:~÷Ýw;Îÿþïÿò½$“ÉÉÉÉñññv»]©Tãb=;11¡MGOž¦%ý±«Ûvÿ\×õãYZ`kžË ”3T¾Þ‚5n×·îj¾­ùëËV9O7uf·aÞd¤ª&ÒÑÓñF6F×v"K[b¸8°»ŠË¤FÂÇÜÜ\­VÓ¼ØÊÊ ¶ÌŸàEºººšÍfqšs½YEÉɈ|ôèWU7ºãÀ:@q)àŠq_( KKK,.n6›ÏŸ?G¨°¶¶vvv†l‰#P„2yÇ[°Ï’ÅËpÅõzýüüs$sкÑhd³Ùýýýf³Ùn·)ºÁèPºÝnÌòH*ccc“““SSS@F@OdJ2ŠŒöšp¿àïqßët:áp˜)V7ã½áv»I°˜â±ÈaxxØï÷»Ýî³³3¸b'¸hâ5Ýœ {ŠJàF»¸¸ ‚â†r …B!¯×û½ï}odd‡p80£=::Bæ j§dL—ÆÌ÷ 6-à{°Jj%ibèpô#«•Ëeáš³qfô‘2Æèjjm>)|ÅìDf4_fÞ®²øíjçã$ ÌâÌdË9N×rYÍDW©üö èã!ät·B– Ps¤£Oæø W½ŽÊ¨×v{J§Üu”K¹Ô‹6;¸;h)XÚ^ŸQZ7óµDL]ÅsâM³9Sq!Y§¹^Cg…æG÷¥EÈ‹LFQþàÁ-Àj]{¾tbxä¹Þxܼyóôôtrròüüüìì %%qËZûŒlÉeì6‰bü‘Ί_„ÖÚNØl3…³JÓ¢¦µnLŠŽ0<<Ì4 —Ëõ½ï}ïôô´V«Åãqì‰Ün·Çãq»ÝŒ/ÐgD"‘V«Å °QBÔÔjµäwÍæŽÏ®MšM±Éj»Ùl*…Al"‘ù ™V  Ò"À‡ãÔÄqHœ­ôKõz_ÄÊÛõÆ„1ÇÃàzV&¨áQÎÏÏÏÏÏ/..B¡.Åb‘Ï‹1¶¯ÛÛÛóóóÕjߨïP(DF×#¤‚À ÐåˆÁ6ŸzS"¡'©U1‰É(,]ŸÒ^›y*¯d»ª€œŠUKvh½»l%¯”®\Ÿ+îºÖ·OÔícãqMjú­õô·Àëãca•Ï&Âîrl 4A:ç ¹ù»]7ê¨q£.ž™™988€ ޤ5]÷=9ó¶Œ4t-†‚ n &ƒ6¶Î_¸ œ)}nnnmm"ÈçóÉ^ )ƒi¼…›yËJŸŠÁµZmmmmbb"Ê3•UkBœ„0rLâ¬×ëÙlvgg§Ñh ì$~©Fã)%kª™«MÚ¡ážM/ÍfsmmmaaQ5 áÉsÍfS)„ÝsssZææææççñÃH§Ó[[[,æDfƒÄˆDqL&áŠËåòåå%œ %†¨©Ýn7œ‡ßÇãñx¼Ñh1=­Õjä º P`&ÚªçˆÅbçççñx|zzz€Žää䄊ñùéi‰²ýòò’hK.„* Á`ŸŸŸw:R Å>i ›žipppdd$•Jq}dåß~zzŠñÆÉÉI¹\>==ÝÜÜä£!0 ƒ}ôѳgϦ¦¦‰Äƒ¸¼óóó‹‹‹óóóˆ677¹††#"ãÜó¦eŽ”¦d@RÏ©:¿‘B,4¸+ý« Úé4Åée/a"+ìð8æd/º†Ç^(…IxôASº¶½X^ö0 œó¹WYW'•äæeí50læ§ß‘ö±N·—IœùF|`a…Ò#ÁgrbaZµ§©Ê·ÎÐLHNÚ<¸õµq»omm‘ŠÌ/Ãìi`Þ´i‡Ðf¦>Q4å ò-XZZ¢`~Åñ%ÃÀ•¡P(ܼyóéÓ§ˆChíñÛ5óòSµÆ¼ûææ&¦@”Z6G( — ådˆ™™™õõušó‚Kd‰=§Ë°¢âôÖKKK(ˆ£ºÂ‰Dblllaa¡Ýn×ëu%€xÀ™\.W(òù<˜>š%B?›;Ûí6³ж QDw:LØ®ƒÕÒÅÅE³Ù2GR•¦ÇÐõf –žV‹¯îŠ~+OHÈgMe›vjÎsý¡½ñ•D‚Ó‚ÚlœDo×Làü]k1p/.½W¤½–%†E­\™sœRÎ>'q³ ­3£‚€d6±~þž€Bl2E™ëëë|»J'ÒA«O´ˆ,}O@á´·4ŒbÆD˜ão$*“óQ²!¤’W–——ëõúÒÒŸD™®7îžÖ3 òJÞGÚ³`Ýn·åÀÌsË^b|—C™œP766úlmmÕëõ¹¹9ÌÒé4e×ââ¢×ëåyÆöN—”-iáá‰æ2vvJvâzãwD©Ú0“Vyþü¹¶NÆb±ƒƒƒX,–Éd¾þúk°õÉÉÉd2ÉRLÔD;;;á7ÎÏÏ ¬pŨ•‰˜>¸Óåååéé)–JTÙ…BáääWT¡=0ôÀôZÄÆâh-ÈdY4ˆM.—ƒF†ÿ ©¨f§ögC½^'?a¤Š=½ ‡NVm+@ÓÔn·›˜ÎØ P§Ó!1„Ãa¶ý°IÐŒ4 …FFFØD„?ùÅÅ[ƒ —îܹƒß**ç'Ož0aŽô–ÛëCܹ‘ø£›¶ÕjAN„B¡ î¥T*Ez@Ϧ'¼žöWú:ÓRÅâ,9¸é&‰¹Êy«\³4K¥g‡ÎRÝÚ$aÁú®?ÜÞháôqNÊÓ9’ÖKKéÔõXµoÿûrÕ^K¯^©?>Ó'å8+kr²RÑ} €¢¸MÁ=ÌæF}®ˆ/óõæ }È*Z©‚15]KUàègÓȈåRÎé6ŸŸaGÏ£›ì”9’Ù}›$’¦(”ÛØ´Ûm6/’ÉX༲²B¼7ÀqHEô^ggg4:ä6ÄE•J%‹MMMA (à<ɦJ»»»„ B„¯I«oHØç+q}䶤胥6Rœ›7oâX‡a5X<óeßÿþ÷yM6›E™S­Vñ@nÌCxõûýÕj+ú}*qø·ÛÝn·ñé£!ô'+`u‡%…9sÈ"{ONN ¯ÁñjµZµZ¥ó8==ýæ›o*•JµZ…"4#6å„fŽ5m½^‡$@¡;00À90TAüE# qˆ’Éd£ÑˆÇã|"ŽÌÑŽŽŽÈ|wGGGl M¥RÔÛÛÛô8lÏÌÌÐMš²¶úý~Ì_C¡P8ÆÃÊçó± œÇ &´Ñº'» {íP±dèèhI9]' œF~N·T39îœÑÏiÄi;™{=»†YKøÞK_ÓuB°—¶Ó»ÒÇè-ÜUs%ý­»Î ]©Gê#µTCÖ›ieõt@áÜaf ÜdÃ@ÆÍÒƒVÔä'ˆÔè1LA…ËØ ¡^CM¤õÈb§+• O/ödTôš –©iMNÖ!%@flll0•†çÁÌÌ Þ ä˜§OŸ‚ü¯MU+- ȺõT*¥tÈ( HWGGGggg•ÔyðÙi¤ø/ ’l§kŽÀ©\.C‡Ld–­¢B–`>¡’ÉdµZD"À>ív›µ°¥R‰€}gRèîÓgPb7 ’ DÏ@ P©TÀvðÀð‘/Ååå% ‰įápÚ Ödÿììl||œˆÏ—>00€Å·×ëM¥Rd)þ‹Ò9,ÝŒßï¹¢a= CyÀtÈ€Q———F:ë'Æ›ONNd€Ñn·Ù“Ê$v*•b3’Ïç[\\Ä[—Û’lÁ³" =wÔüüüÜÜRW¾å'Ož`5ˆ_S¡PX^^Ö-虛DŽgc›¦`ÚÒYáØ ÙKyÀ­WrZîªN1h¯¹Ó2Ï"böyÎ`匿N“3KY¨ƒ é® Ö[íz»³¹Z•tëç4ò•ðQQ¬,Û>|ˆ!—ë=ÊÍu] zkª¾ë¤{¯¡y3”kI¡åÙçê±ÃZRHF¡ˆ6-çL%ƒÇL‘«Ë°Ž1}c€q°™Cn”J¥–––666(ÿõ}ðÁOž<1÷5‚¿Ý¾}ûÉ“'¼ÝgŸ}öâÅ Ó*ÃårݼysggG%!žئâ±ajÃ-o¾s飼wô+²‹ ¸ é"Mr)xGð‡¡¡¡ÑÑQÖM×jµ\.G¬V«¶ÙlNOOƒõ£Im6›¡P§#Px6óëOOO$?eÊÁõÆÖôââ"›Í’8,“exçs|(ÞËå2Ãeš/ƒ 7ðaiDh;.//©èa&x&F ïB@Lþ ùà t-$!„RœR hµZlfì{8>>%cŸ(ö4”l¶Àndttôèèh{{ÇV`4ö;i![ÿ¸¨?ô]Ã?±ÏŽy I˜TŸyW›"@ËßÅü_©®Í±ÙvYO¢¥ê¦úHwzYò¼•‘iêg {­ñq½åfâ>&FNçž^®öJº~V¸f’¸Î¦Sç•’“Ï‚)˜³· æ¥wýá"YiI͈& 0k°Þ´ó4¡!- 3‡û-s=Ëˈ¸Æ#±°°àr¹xG¥Táz³å˜bU¦ÔBÈ6“¢˜:Ånóhd¸A~P£`Ç*a¤R)àsíó Ïž=›››ÃN+À,w3ÎV àáÇ?~öìÆ 'è\u%‘Ër•~‚ájåÎäää$•Jžs&gggpÈ HrÅèt:&KP†“P¯µ …˜Ü‰“¸¸¸­È¢ØÇu•hâ3ã8OÀ“í  XÇ`×ååe³Ùd:Aý nd8Ίý£(‘0}‚0GT688ˆ•ì……ƒÖtÈvaÈI~@ 3IÀÌ€,@`‚† y.+QÉ—ðU|;|SðØc’½©{à_Ôø_ïj¿´°MéõYw—éiýý•KÐ,7$§Ñ‚†iƒÚßlîʵk]õ¯½vˆYÕd¯_1s§“Hèµðîmÿ¼]bxÛâšÌu¶f:?9òdb%1Qd¦sÐYk(7XM¢:Ë¿HšÓ,‚yƒšû/­ºÀ´#5£³b¥¢$‘‘I´……ǃ¾Èüt¼‘ôEÁ²I®gI[ÚMÛ"^ÆzZ—±€@Ÿ§GZGà ¬˜Gª/ûn³ SËÂtža˜¤%eè?û³?ƒE888H$Íf3‹1 €3ÝÙÙŸyf”<‚†ñ%)ÌÉ..—‹¿§$çáb M•îH#Ö^¯—ëÀÈ›Ûí&‡ñJ<õX:Íÿžœœ´Z­H$B/Bò`z®ÝnŒŒŒ(‘ŸLkµZH‰°ã¦0)·•¼FAÆ…+—˰)4|.†Ýêõúåå%ñk¼=ÎÏÏ‹Å"ÞØÇú|¾W¯^½óÎ;„õH$"&‰mgg7Yå€D"Á²9å5‚‰DŸÍ”Ùl95ÿköˆŸTë gIÓ;Ïé3ª¿1-Z­â ú×à];þþu·U‰ö²øtôþ®«ýùûœ¹1ÿÕy­œ‡ýîC3Ø®Mós:³ñu2µ VK†Í‰0"¯U[@èƒ>899 ‡ÃÄD¢ZQ‹îç®e'ŒLFÕjøË\rk^tõ×S @ð¾êÊU¿›[—•«Ô4˜¶tæÎN9e/AFz#óeÔƒìq”íþƒÈUáp˜*ÂÖ4ÒД²<–Í3‘!¶ºM?mnn...â¾™H$hþ¸’‹‹‹ív[A' F"‘ÃÃÃééé\.ǵ•HTÎìVô)j§Ó!fñ70Ìà3ìÔÄK.ºÕjU«U•Ò ýú|>öS’9ø™”Àï¾§2®Ì@ (ÏŽ¼v»½··—H$Ф²çytt”OÊÂÎV«…Íj§ÓA«Õ0É|.©’à€¼ÚíöÉÉ /úãòò’רW€[†ºPµNóÔh4„‚¹aüG#‚«R(êt:…BfQ‰Y=¥ŒÙWVV?~ìr¹Ø7çr¹ö÷÷‘ûý~Üôh5Ô:èαZygEl²¬NŽAñÎL$V¼2) ªµð^+»˜À]ƒµ3^?Ž÷:¬«÷¢é®©ñšCý³à[¸«ö*áûdñ½Ü\†aÜ55¬æ„·µÌ’§z™M½^—nWrR~Ò8 >xð`ff†MX/^¼+ËWgSÜ&ÌcÔàÀÀé«x‡ÑÂLÃkè÷3™ ¥«ë¥(ð+uH(Ò Æ4ÆgÔ\ôèè(®dkkk òÈ¥ÇÌ”±«Y#ü=/ƒ<|þü9L2vù|žã÷û‰Ñ™Læã?FÃÎ94›Md'â‡Yæ•N§=zD‘¸¼¼ èÁžÈt:­Y…àV«µ°°0???11177—Íf[­ÖÔÔÔ­[·xßR©%022‚Ò7€eðÿ) ív{dd‰' Ëå"dóut:|>O†@2‡“É$³cÚsÀ´p0L&“LHð…¶Z-¢-Õ:áÆ›‰kÍKã*ê~óGëÒW±V: ŽCóŽ¡q¢Ýá¢ä÷ûýô.>Ÿr>ü/'Öh4Ø(GÕOŽdC]l<x½^qB/ëóùð€ÒÞlâ>‹Ki\¾ýöÛB¡011¹<…K"‘€…öù|·oßæš×j5fr¹œ×ëå³Ù¬¤}[[[FJp3›Õ›ºjžúõõudž#E3\ðŒHðm­ä&ýhÕ´×´b±"•%ì1Cœs&N{‚ûNHTÙuD·ïmEEË"¨kÄvj…úß]W®z} À®ªSç§u2ø½TV]wvšòdvÖ3UË—¡e HŒ8‘quuU&_²QJ§Óèô‰Å:@CuÊ÷‘ÿu¹\¤¹‡¢Ý6MÁT›ƒêšñ]³Ä¬¥\\\D­!S jvÝÍ:šätHýˆƒ,¹d¼ƒ A!Ïéñî8­šâ]r!ãÁ…BAVæ?MÒÄ2eà‹/tæ)HPˆ¡™LfnnŽYÞNštŠ(šh§Hl®ßÞÞ…Bpår¹V«MLLäóyŒ¯wwwÁdJ¥ÒÔÔµ<Ò~ $ŠÅ"„*b¡ÁÁA&°ˆ¹Xa]×h4ŠÅâÁÁ¦ÑïW«UƪÕ*Ig=ZÚDÄNø/ !$¥¢/‹|œÆðð0r ˆ Ì‡IÆ #¼ZywødXk¨lû`/ˆ¥Æœ• £Ø"Á™£ÎbÙ TR—È1ËÃB£ÓéPÝ“¤Mâ“^\\Œ¥ÓijÝÉØ„ŒŽŽ>xð€ï4 =yòäÑ£GLߟƒ\É2ïšB,‘m Ürf¿«M´LÀñÄ5›Í M«™v–&‡GL3f»` ™êhš r®¶œîÑÒ/ŽÌ£®t/!PÝtiëªü¼èbîÙvº‚÷oM®Ë1|·µ6×4&ºæÁM‚×ÄÙùïììl¹\ÖSÒ#|IË`ÑðhM&ì½)’3’Ö’Ð@Xî@Z‘¦öVgår¹fgg‘ôLMM½xñbvv6›Í2C$û¹®vCò{¡•·Œì'N#Ï×вöá 1ÅBZˆî¿´´ô«_ýJËU‚2GâÜL‰¸nÉNÌ/YÔ£GZ­ËæÖ××AøD|;¡PˆeaÀë•J…ÁfÆÇX/Ck5:::<<Œáv§Ó™˜˜Õ!´Æ¸Ýn|È ¥RÉçó%“IXfÊ„ö€Ñ3d@µNÍdœÊm†È¹ŒÐÅ ‘‘ þó—àû¸½âoZ,áoAœðê@wT«Õ˜¦D"¸#œåWÄTk;Ý8U³Ù1CV ƒR«Õ"‘–‚¼ —§7Hf®àQ „w™z IDATÈ ô+¥R‰$Çø…¶¿ ‰Wwú0B‰y<ž|>É”ˆj¥ôàÁËÎH0¬xfË4ÉelÊ´ ©’¬èÙ¸îJØZ¿hm9ìÊ:\ÇÉIe[×uœ®¾ Ðú³oåkw-Žá;¬wî%½êEÜ»®Z©f)|œŒ®5£`.¼´üïÌÖ Q\áˆò¦zÚ„ÈMµ¨‚2.oBù·¶¶´ÚŒo†øÁ)¦Óiœ÷Å劻S×½b)ð\o ,ù]™”íîî"Ù2%@zUª›»Ïêõº4jMæÄĦllfaÈG“äIç`RÊf˜ÐÿJæ{ûömì61„`7‹‚YQIì;??ßßßç£ÑáÁ€ók À»c±X±Xl6›•J%‰[Ãë¢×dáþHÁ`°X,²‹†x‰P‹½ñ pØ0/],¡``¤5ZŒ0‰z™·F:dDœ˜˜…BÅb±\.W«U%$&Š1kb¶%+-¢)­P(trrÂÁ„C{ `7[¯×É1jP á=*¬V«522‰ÝÝÝ‘‘‘ÑÑÑR©0¥9 ú \cùŽ$Nãk¢¬¡lÒwª;Y·%e–x)îLn¤É"è¶ÑCa>ËÖ*7×® ï#=wn`îªí±|¼AOn¯”ãt ¼>Mk ¥ºVÒ½¢åõw÷͵8kx¤ÏˆAk,°×ÎUtêå…gzØ™ä„éy";kuˆæ¸£‰0Ê^Iö¹‚û%k6›…øATw*E½Ëåzúô©Hon_ýi±´æÌ···½^/s¤@+¼5 ˜¤ j`-–ŒÉ߀Ãà™ œÉdØŸ“J¥÷)ÊVVV¼^/]¹àW>;Úêõúòò2ë½Ô³ ªÃl§ð6XXXàWð_b¢÷Õ> 8ìšY±ÀãS+ çóy†cth\¼^ï³gÏŽŽŽ뀤ÍÇš‚ÐFeM) '…K O¸D‚yvv†]D«ÕÊårgggLùÂî0ËV­VqN…E  ³3- +Û°ªV«±X  ¼%(ùãñ8;AÅR@Ó¬¸\®b±¸»»{ttT­V+• Ë݆‡‡ñ«Àiƒ©4€x˜mdˆe° &á?ÏA Få´áçA“în·cA|Óé47$¶ËågŸzVFGFF¨6¸IàQ\.×íÛ·Ùóñ‰DèV±QAbK¬A …B¡Pèììì'?ù‰éO777G¥ÂŠ@Pbs2¹Ó+´VÆÝΨ8ÐÇ8Èvs® Ðr!'÷à4ê°üìœ+{±¹2q°ðùkŠ] ½ôr;½šcèE*˜G4OQPË0¤+õá¼.Ö¹ó³9Ó¼®\ä0}”·»Òd¿°¨C=xðÀ4¢Pô·6VòõÐ ¬¬¬Pàd•,–I¿®pL„%ä­¬¬Pg¡8bؘMsßøø8ÊQ&†††€5¨ÊÀ{ï½GìcYNJàþ̲a\h·ÛÌQÅ0pÀvO¾&èH†Èd…-¨‡o“ Ü5w¨T*(Ž´ß·Û FÏ28-KÀ 4‰êž½ |.ø´¹œå¿ææ «jµõ>ï•í)W˜Èãñ‹E !·ÛÝét²Ù,Ëã …Âññ1Ç×tôÀÀ@2™Dƒ;;;ËtÅèèèÉÉ Ü>f‹sss­V y»}@8çççõD µ@9–Ïçc±Ø¯~õ+n]žS9*Ò‰bÖK™Å# ógºã€› Ì©`ÓæÈtèë³§Ó„Lß:Å1³ü5]Kl¨e¨ÞÝræpú‡šgu¥×œe¾d2"]Ó•sßœ“o ½®¾†Î7vf‹+åVf2°Ö5_¹»¿ Ù(ž---a ; ‡Ìä½Åt™-hïôeãe$…µ€~¤ATåæ,oa d‰¤µ&•JšN333ØÈß ¶Ü¼“ÌT ó›ßÐé/..º\®o¿ýVÖ§¼)Çןt:ýøñc Xñ„`$"‘²=•JṯÝÄwÖ4Ò lmmÊåÛÁïú|>ΙŠD JöÎ;¸¥F£ÑÛ·o×jµgÏž¡‘ÿð鑽^ïìì,FI###¡PˆƒcVAÅ ÏÏÏ)„ñž‹ÅbξËËK¶o’NOOùW ‚a…„ +R%¤8˜m  …Bƒƒƒ¨u‰žTâ4+ 4‰Dc¥óósîsZUÝ«àîš®deÝÕM¶kðèc‘ÔU«Ú erz˜X«Çœý”}ŠW„T¶ 9d Ì…ä+Nuf‚T´ö|d,ê\.ÞÎXïµZ-®ÚpäT*%9“äƒOž>©V« ‘I2ÅÍðA.—cw[±XÄ•DEzã+`o(i¾Ñhð‰pi%–J%xr¼Á+• ˆÄC)â–=q dèzÿæ5L~ÐBáÒ“y¹\æh£££¤IvÞ‘‡`,HÉ###ì:===ÅbõzýÎ;ÜɈȵ·‡ïÚ¤¸ˆé³³³Üº¸ZÉ ÓI„àÍfÓ\ŸnDòé2+td` É °é?ÖÇÑY%6Ñœƒ˜‚C'pdnSت(]>áÎ’×j,z-èЯ\×Õ‚ðZ‰á­Æ’]½7B÷Áºº‡wmºZ:g=ȇ…B†Ú–zmqqq}}]ûë766¸ôx ™°‰úS j`MetîšzSø,ÚÜÜ4÷Že³Yé\ÍôS(ž>}ÊŽe,@-‰J×××.éø§r¹L2À(›Ö›åÈ@ie|f²&D|žaŸÏ—KãÿðáC–®Ôj5_h4)¢Ì:::º´´Ä‰‰pߤÒ4b–CpÐÚ²ì }xxxjj jˆ<›Í’9ë0Ìà?ô"¨‘]†ÃáÃÃÃb±ˆæ§T* Äb±ÃÃC aÌbq¾CDD½ … öBä½¼¼,‹XŸ"éÁˆai¿ßpp€gj»Ýfz-2–à>ŸËëΛ?ØQär¹|>´ ¥)–×¥R©\.—Ëe/@·pí&z<ž\.‡ßÐÐKXIQ ]³ºàfE®JpÀYP/´Åbý.àw gE5S«Õ8ŸD"199É¥Èf³d¿ß‰DŽŽŽpáM§Óccc¸'i‹¸q›››L<}ú.gllŒ;DÔØëÖëõ‰‰ %µf$5ÍJåk-0€HzUAÊP)ªÍ©òßdÌÑ}«äï:[`Ðúæu3}þ¯©M饈í³ñíºPÒ•3 ÎÍkNƒUgëПQ_Ù5­Y›‚Ìæ£P(üæ7¿yñâH4¥N8’Èò>üðÃ………ǃ8Yˆ?/--™'­Šd“Q X?´Sê>‘HheÐîî®ÄH£££|ð9…gú¼’~–——éEtéÄâBù2nFSGZºÅך_YXXz¢Šç1ÞÚÚÂ'Îår=~ü8ŸÏ§R)f;åú²<é j}VWWC¡‘"i­?fÐãGGG$!Ç3>>NkEäeŽy(f m2+ók‡¤ŠÁf¢ N˜JÜív‹E˜a&¨öz½$Äü<00À[3ó ÌBAm‹\'ŸÏ ¥R)<'hS4EäuqqPŠŠ›@Ïu£6gúmü0ÈçççÌ%€õsz£££ô1´`ettØ#]´F£ÁNÞI´üàà ½†0Ô×âD‹à¤Îëõ‹ELdå‹Å…B_~ù%¯Üßß—Íûîî®ÖRÉâW±’‰2NŽÂ²1×¾*¶˜?X‚¤"]矺Vô&Xd†`3þvÕ§ZmG$gÑl5NèÅZìc†»>«ÜzHÎ2½ZõÿfŽá­lÿ®éJØë]ÝHz†›ËŸ¥{c@­$¾ TO2ò´Œ€ð¹³>bMUÐôòn”@mccû ­)¦)a BrXÓßÂ㺌-Ç: Ö5kK³¡y;` Ž…þÕHªÔ¥øOÈæhhhèÙ³g˜÷™)J«:M‡TéVÍE"Ű ù°Ÿ}öQ~ww—q*$¡íìì,CBBóAf¶··o߾̀%?¸¥RaˆŒ-ª )ñ‘¡eÙÏèY¦&u)Å;.Bá¹bÌ7Pn#ìÉår á\véx<ÎýCZ—¼ˆ¼h4z|| mNß000€1v{ÈdÔ¢åñxvww'''÷»ßÍÏÏ3àGv˜j”J¥ÑÑQ±¯^½B5„ÙIµZl6›7nÜÐÚ"¼öÂá0svår™I*Ú!*)º“F£ÁÎTÌp ¼:99ÕxñâE4ExÊ'… [XXÀdEV]¦#wô›Ì"¥¥6gnô÷Ö‚hËlÕY›º>W·]ñ½¬?ûX®öQ¬ÖWΘ*ü+-ð¬ÏVè›á¯cuŃó2õ²ýûn&z}¦3úä çG2?¹å^B™ ÀÍGPÄ7í QôÃÓš†¦(SŽq–¿jl¾ZrþBº¶ƒc‡&é4ð…­´Ù©èšsæÄb‘ÏŒ €¼‹±”1`=ãÄ>ŸOÃù|^h„uœÑøYiÀtÙ“ ¶fŽ´\É ”µ|Ÿäª„K3Q>™L¢€bFlbb„Íëõ–J¥d2 …{æÌ'''Ûív.—«×ëd”Z­† w­VCYz#ã<"8›“ÙE“Ëåâñ8ä-ÖÜHBAœˆòˆ…«¡0?99Á¸Bqvpp…ÞN —’\ޤ°.—ëðð0 2Ѐ4kvvæä‡ß‚Õ}"(g³Y¬–`ŒrfuÊ"€…x<ÜD`ª!úÜU«ÕêØØs‚ÜH_Ð}—ËÅ.9¿ßO¼.•J\êB¡ðÎ;ïHšé‡[­V±X”Ÿc«Õ’+™qHÊ&3ŒˆØ_1 eÑŽSŽÌÍÍ öaÀ}{tt„]üÇø-ƉÐ/˜†H– Q/64u]g¤4ðl.í*Ùt5½4ô–¨R“R½‚˜÷wæ++8QzS¥Òüwu[‘ye¬î%Y£äßmYÄõñ"3õ9ÃköÎ{Åòæ5Á%­ Î5Íåñþ4AÊüGÉ[=¯9#m-iX\\„$¤ Æa‚…3´Øæ¯h¨ØZ¶|2˜'¹ˆYePâÙêƒRªõýý} 'f€±É|÷Ýws¹Dk,ã<Ìæ Ç“q³áâpJšÆù@©\.ã½LÅíõz£Ñh£Ñà°ã±X ›‹IJ`µ@0¤(¦'h6›Øäá766–L& ßpÝŒ #¶áñ¡P¦žŸŸ :k4èm¢Ñ(ù|~dd†V£dŒ[¿~ýY ª™ñ.Ò–G|F|èòù¼Çã‰F£¸P@ðâ>¯§ÖÖ€ TvÉá¥s€3¶|>Hä'¢3È­ Dд¦GÃÌZ:99I迸¸À œ†x&t ÷Ž@ QbF_Åü6³ë\4V9y½Þßüæ7æƒ`:²ˆdå^B%AnÇ» \e¬gY®h}"€Â—Âô‚}œ>];‰®á¥WïÜÑ?ˆõê'ºâHß°¹rúzuuõßþí߮躺÷õI½¦$ºšÙöó¾VgÐKãÔk¸Ã91'¦TkñàC¨#gyÊç`0¨ z~~> r›"¿Ñe‘ ÓÜ÷Ò!‘‰F£øOlnnʉ”äÅ3¼®'N› ¥?€ H®ÏçK$³³³étš÷M&“ÃÃÃè>% ‡Ãï½÷ƒ GGG¼,—ËX™•[ZZ…§åÃV*ˆ@³³³Ð0 È™ôÜò‘Ÿ>}ÊD.GÀéo{{A'«ä‰D:âç³ÐC  bò  0¾wvvöúõkBg©TB. @Ç€b'D£Q¨ˆh4*îË—/Ãáp8Æ8–e*ì10J|ts +LSã½øÃ„3L®Ñá÷‡ ‰È[=!zÒ3³ÍÐ-®7Øp'ÌôÑ=0áQ­VkµÚùùùöö6w)™u,o ½qyyY(`Ô7@*<˜ß¦˜ÀL°Õj}õÕW, ª×ëñxÒE*,x—|>ÝÖÔÔT6›=::Z\\ÜØØPÃMÀe€&˜Û›N¬àóùž={ƈÕ,4‘X @{Pºrª¢sõKHê4«Ð?X‰"˜9ÑfÊ~¬¿4ã›sÜÚ©_’û^sét¯rY[å{)BM—óο¼î€Û•νþÕL]%§ÎcÍvõW;§ ¥.0¥–¶—Ñ ˆa üãÿ8 ÍÎÎò¤ñ¾Âõõu~‹ ½³w~Ff'© Šrs~gccƒ¢Iò¢$R(éšHQ< ÍÍÍU*ˆ>q˱Xlvv6‹MNNF£Qª`|=Iãããgaa!•J•ËåL&“Éd&‰Ï>û Öš7›Í†B!š2 åv¡PÈçó@Éz9l{½^¡L.—ë½÷Þ£º¿sçN<‚#=Èúä„%'á`pp"·Óé€ÔÓF€A™‹Å“““\.wxxˆÙÕôË—/Á‰× $3XžÚ–ÙØX_mÊD¶ïv»ñDæâ ^D¾R©`ÖM&¼Â¹2ÃŒH$299I­Í8ærÖ㜡+&''‘Ò!ø CCC‡‡‡ [ð œ?xFˆÇ¦¦¦"‘ˆö’rãÑîà÷744„c¼ÈdƼ]ovMÓL" v;99y‰¦åBœ ’Ùl6oݺE!ßxÙ XÐ4 S¾$h—FgbbBR fB™…¶¦k»šîÚ5'œ­©.çD±é•í ¯ZR}%# Ù”Q9ÕA:>™Ãìu¢X½vt³ÒUŸÉs(ïºn},5Ìl‚}}‚>–‰%Þrâb½öQXž?,$0ý¹ÔR5èÒ÷™L&›Íb¼±±A˜y7ÝèL šò9NÏÍÍMLL,,, ©›¢Ñ(GÞØØ0ñ¨ƒƒIÃg$‰•••h4 ‘§vgiss³ÕjaÑp¥–|ÓãñÔëõ££#ðöúò¯333?øÁîܹÃãǃߨ3}>_&“aÖ Ý‹¦ÃŽðÑd4 Šxhhè½÷Þ›šš"^óG"v< ßGÊIú …B‘H$ß¼ySÌ4ùCÕ‡±#… (•J¹\íQ‰M8h@Âõ€–w¢+ ‡ÃŒ°]\\ÐC ¿„FªDóÄ|{8ŽÇãÁ`yvv666&Ýj£Ñ`a M½^ßÛÛcï&vÃá5B“>' T§4ÈØ—"{m·ÛÀ;Û${ÑHŒ˜ˆ†YÉårCCC¹\nllŒ‰bö¾1“E¥ÄϨ¤äÆ* B¦Æ›ËHÂ.(+µ¼¹\®V«íïïKwÄ…Êd2 šˆlSí "jø8™fyšãŦߥSç£d î>»Vù¬q6'ca:ñXD©ÓÎG]ŽŽÌ²Õ2è~-Ud¯É‰®8ŠSXåÌ.¦ªW¾üó¿]ªÖÏZgÍI_ã¿þë¿\.×oßü±^úþûïë/¿øâ‹Gñ²/¾øâ·¿ým/V€â¿wïÞ½{÷®Ž÷î]^Àwcßj5ô÷üúêêj£ÑøùÏ^(îÞ½Ûh4tÀO?ýô·¿ýí;w¢Ñh4ýÑ~”ÍfWWWù­{÷î­¬¬ðâ{÷îq#ò¿÷ïßÿý÷Áµwvv©`M333TŽŸ~ú)¿EQ fB"Éår,Ñ­T*©Tꫯ¾òxÉ ¶™‰†ø/sÅ\7>r>ŸgS´A¹\&ïb³ÁIºÞ,qâº]^^2äŒ9À ¯—÷3€$'¯×»··I044T­V‰­ ,·ÛíVk¢ß­×ëz¿ß_*•FFFÜn7é„;&m¸Svôù|‡‡‡ÔGGG˜ñ‘ùH0¡Pèðð¹m*•â+X^^¾sçN:æ1‘YÈØØ½ öS>Ÿÿoþæo|>ßâââ½{÷Òét"‘@ªàñx …ÂÏþs2aáþýûŠæD˜J¥¢€À£Mñª°¦ÿò—_|ñ…,A?ÿüs"ãý÷ß畟þ9ÙK3É¿*Fñáˆ?ü¢u:ˆ~¾ÿþ'Ÿ|b†;§"êêê*çlý“yLýáÏ¿ÿû¿ÿŸÿûå×Z-Ur¯úõb`ºÚnôG~LŸ"gÞ³@®µµ5i¿œ:\2b8go¡#ïîîbŸ'ßm§áÕE².ŠzÇGLUÑqÒ$Ræãƒ¤ D òìkãw!Öùðb‘ÛL!Ÿ&‰lwvvF#K£öìÙ3†K²Ù,~±$T¤Ø'•JÉ?êW¿ú•¼UVküSî[ÌúhgggeeåÃ?ÜÙÙá± ëŽ?þ¸Óé,..F"‘ù—i·Û~ø!Q€ê =9®* IDAT}|&¢‘ÓÓSÖ@V°ògŽj !f¬7°…([ð’ÂÒ'™Lb §ÉÞN§ƒ’'³‹·D"ÿÇã‰ÇãÃÃÃÄ bG8ŽD"@C˜ Ôª| ˆÖP(´¹¹Ç}>¹““Ø@åÎTå/"»Z®F£ÁŽšP(Ä^ØiªcZì¬îåQŠR H} 'O™L{§:Hª ä'îk'Ïçáo)®C¡Ðññ1û…Ø;óŒ#ûà@öé„°èÀ¬b|||pppllŒéeødúª{:L‡8+¦Ï˜•C¡€£*“†Ì‡ó‰ÄNCž_^^"Ù‚Ã`«Ç9sÍùt¤Øl6;11p äq¸yóæéé)ö\CCCÄ}teÐ3´Úõzý£>âñåïÁ¯*• ³@ @gÖjµvvvЛͲن±ÕJ¥â÷û à ”(ÏÃ/×hL4]oÖ¤`ê9>>ÎÀýùùùÄÄ[eèEÍ'&&ÆÇÇÉ„!Ù”{ % šÂ(„´P³çr9v$“É‘‘ šq¶„¤œ|S¸¶á±qzzÊ?ù|>Œ]QjŽ‘Xô–L&ý~?XŠz<žd2 tލ†ž Óé¢à±üĉTÁÜÀÞÞMF,ÃÂ!aÙÀ©2M·¡Mƒƒƒñxœöˆfdd$Nû|>ö𨨠ã LNN*qr1;(%Æõz^½Óé„Ãa²ÚÅÅœD§Ói6›ÒŒU*’ ÓàPAããã”áVõ S"mÓI8K'“1”>::ú'ò'|ãÐÑPÄqÖè¦R)VzP˜›{siÁ嘤I#åòÕ`3(”nðšZX[[3ljyŠªSÉ@L÷¡^[ô‹Öx3p9¥GNVÙéPäü•+måºv]·awU©^9Ñ“|îcÎçŒÝÎËd9Z+º:‡X9ÀÔ#õZp*‡BS›¬ NÛ¨D¢ñ…~Eÿ`0|¤ûÉTø²®€ È1,‰fgg!Ó&&&ä Á íêê*Ð'2†™™æœåÞEDƒÜÖŸ~ú©DŸ`M°Ðš€­•_:>==Å]¼Ùl26ÌËŠÅ".o±XŒâ”G}`` ‰€œ€¼ãçz³>Œg2ŸÏsìœ8µVTR#4qÜdu%¹Ô…}5ÌL¾‰J7nܘšš'UPoÒüAp€ßÿòË/÷÷÷‰ø‘Hã‡ÝÝ]‚šú3èb»°mp½Ù7€‘–‘‹E¹a3–Ŷ>/gB‡áv»q€?88`H˜ú—'„(Èårår9uN‡h{ttD3‡eÀ½:B2¨ìN¹1ªÕ*3Ò8[äóyõŽ8» ¤Ñâg¸ì’>Q‡øÈ\MYDf!ü€.™R@g¥Õ¡ @[\ ® …G€H‡%Âu#ŸÏ‡B!”Ö˜²€£¦Óéùùy=×ÚS+ÿy™¤"P¦““˜Ü‹Yj¢ nµš±OŸ9«kƦ {¹ YvL]1"áWfDrÖÍ]…š½LzÅ=aìÎî•ZÌP¬kbÆë&3ÓvBvê^͘ný¢e8¥\b¦M¾ëé•ΕÜ]¯µ0Dn,Ê Lq±™xL'w>µµ>‰Í!˜ukXRýl6kªcUæ˜n±µ 1N>²ŽY]]¥¡&ô/,,h2“æ#<­Käù„“„a)”ˆÅbTp8²Ñ•c¹ Aøýððìˆ%ò2S“xœ˜ƒ†ª€ÙWâÅééi©T¢L&U0±Eâ{¦F”Éà58î—TÓ€üœC¡8â™f³‰Õ3'²ü»ºR©?îDr‚‚¦¾ft×U„^é$ô©²™‚7báêI‚;È!¯×ëe›LŒ/)ï•Ëåà~ÐæàÀ»5…ËÃ(|Avww«Õ*–ÝúuH ¿ßOtƯÚàŽÑ¶b±¸··‡Ã †|(,¡Xf—L&i’8m¾ ´H¤PI÷QRÑ@€5©á@Ô‹g #/Ùl6‹ñ¡jµÚ­[·¦§§¹’øþæóyuØBöYD?Á(#Øgγ|7bôèÊ(õz:O)ÄŒ¿Îý’ÌFôâÍhÖu(Ì´\uNYwíœZÛþsÁÊ~gôwÎuY©BÅ´Rc¯ ßc.¸Í„¨,Õ {)IÞ½{wffF 8;S D € ó¡2Bû¤¿£¢Ç?ÁC{"÷÷÷ïß¿.óË/¿ ‡ÃÓÓÓ———ccc?üáwvv …ïËi}~òÉ'_|ñÅýû÷~ô£íîîF£Ño¾ùæðð(£ñfˆê>ÊgQ÷ïßÇY¡":t˜\ªVE† ‰Y<í‘HDÑ„çÈFf‚¥`Õj¦ü‡bÃRéÐðÌ…ÉèÂ-V5LNNÒFP΋E½Pþééi¹\ÞÛÛ­Â&ˆ¶fhhèøø ‹vƒc‹Ùu<‡aÖ°#.]©TX C€mÆ&(ŸÏóë\Cˆ탃t¡WÊãòÊÍ»Ýnýóä¶@G棾½AÞÆ¶5Þb†~Iz3hv½1+Ç0&0Í ¸Öù›?tŸ@—ÃÃÃ$!ΟÄLk%ãñr¹¬aˆR©ÄŽ#ºpéÜ~ÐòÅb‘Š¡ÙlîííÍÌÌܱX\Q,‘ÕÑÑÐÌÍÍ¡Fõ×jµVVVþâ/þ‚¡†ÝŠÅb ã!cjÂÃÂÓÊC' !ÏøÆÆÆøÃl6˃g@d@dhº®ª‰0Môß<$‡"Á¤+ kqæÍsprf8íJ(f*¯˜/µ`2&qÇpÍASØk97©·véY©Òäè¾ÜN8K6×}ô¼½<•‚uP:¾<‘¨Aˆæsss^¯p_…¿¬`XR¨TlJæçç}>Ý«4Áܤ™8z”ùùy•`Gô™LFl0üži˜L ”£À’2ô¬@,üBáC™OÐDï444Ä3œ-a|D‚å9ðÉÀ&¤~‹BU«‰iF(ŠÇãD“J¥R,Ïçó§§§•Je{{ûåË—GGG´$•‘‘æ“‘®NMMŽŽ2£Ž©' D,ãQÎ_^^âÅÄÆ:(Ùr¹|||üòåKD 3Ä—R©Äð0’Xtú3°I{{{Ü$ÃÃÃÅbñèèH®ÝŒM\±£™a ­ÔØØÈGære³ÙÁÁA&< X°`òz½§§§…BA2PÔV4š''˜²ÒsR&É5“Š(PÁl6[«ÕNOOÙWáv»1MB_ i(ÇÇÇI®Á`gÙd2I“ÇúO¾šX,Æäf»ÝÞßßgK¹_]8J$ÜMsö¥Ó3^Já/ãKø´ÑæL2›y8Ži‰$KKKjúÙFlî¦Û¿ά­­‰6Wíš‘‡•*æSßUØÙ‹ÆèeÁd5:] º²ÎÐ§ØØËT£«f©§íöÿÕ®¦]‡¿-ã‘ëØ:-¸Å,ÉÚÈ2GâMìÈL?ÄbÙ©2`"£lŽ€rŽ ûñdzæL&Øæø›|³WVV8ÁÈtÖgœeXÌ—3i4À(¯×{pppçÎ £ÒC`ãAYª&Îf³ Wóô¹à®Ca866†ÑÛW_}…ŸódM©TŠÅb'''°Ä$B©6É4 W²lÔ æß7“J¥ÂZQšÄɵZÊ'%­T;==F£“““ûûûñxÏmõhl©jµ# ###ÇÇÇïRéÆà`«Õªv‘7HwÈgJNÔ¶ûûû~¿?•JA&§R)V fTV@d»ÖÝ d"¡NMMÉCX¯Z­6 ¬±n¥•Ä*ujjŠìÉI‚˜MOO³å ¡¶ *J†‡ŽN‡ñ7(zÁÃÃCZR’ 欜6׋À„J=¤qìÀà³g2ž ÇC‡eq;ÇÃC– "eÙ+z™¶be&¿áåååµµ5h9•€2P²Ø]ý/ĵ }Ë I?›Ë¢{ÑÑÖ/öb‰{ù˜ö2ôîê&w¥“k;;+¢*ôõÙ†ðèÑ£ÿøÿèç•ôV.I}dKÎtSðk¾…Å’ ,êš÷LÂ"(4¬/U^uÚÅ&NIn‹¦ô/ÆA…%€§GGGív{}}‚š„÷÷. ïKù£=  I333Z ³Ù,¼m5)CÚ©TªÙlbZç÷ûggg(0«ÕêÍ›7éß5* Ö¯QUÂ7È&B˜GGG .x_¿óÎ;à$ÚŸŸŸãD„ò’SÝ:´6·P,€{àx& ñ!¨Á…/..q’=C±X,•J/^¼¨T*ÏŸ?' …íímò~¿¿X,¾xñbww7‹¡eDÆJOÀ'}þü9l¡P rˆ³%MÛ¶‘Wz<¥j\Êá<ŽaÚJNE— Ô#×&rÀÄÄ0í´6A9 ±·'Nñ|…¼%ÏÃë0t†z5‘H`£Ì…­,Ã}Ñh”õvø$b•‚Äo¡î%+ÐJ¢øDÃ:00°··‡æXCÎÍf ?¼ö†‡‡A/«Õ*[E‘0nr¹\ûûûÐÔÜôµ?®Õj±X,“ÉÐWñ¤àÿJAϤí2þÄ|M4lû1ã€ßï¿sçŽYþ›£†¥ô˜s(Å 5¦<ÉÚøâúÃõb*Ûusm§I&;1§j¦i,=Ž¥åqzl(Ðu%º-XEYÁ„d®´ÊècXt}Aªé0ѵK2§Ï­ÖA¢1Ž N°ë롵Z ÉCMM*Œ´fßuùDDKÁ&luu•¯Öãñd2èÊL&Ãà±®¾nMþ08à JPÄßÜܔ/èD²­­­---!n‰F£åry{{¢NS æåró"@BÌÒ¿km…9µ¹”$ããã”êïÚ_¦¡úÂMp9+0ñf`>UÉdNãûßÿ>˜ßH(ªV«§§§OŸ> ƒ(YŸ2Ún,˜|Â|øY®Ã¦N]+?-|¦—åœ%«±ôºÚTX¡ÒªÓ-5eSayf˜ä¼~°~Ý© 5ýÓÖȉDue¹¿ ”Ô•Tèß¡ôÙháüÝ>è“õÖNU-èp½Y⦅kNgó]ä¹HÏeb\l¡äa +*)&&&%ÉIØõfÁ'­½i²„²VÛ{¶Êy[o-@Ée,Ï‘>  Gë)âª" —`ô‡Ñ5ñJü (% ü©T*££U‚Hf‚è…°‚-‹-Ûív<?<<¤æ|àŠq¡8::b)4ïŵb{öüüÿî»ïþÏÿü²"øüùsYŽã.º®{ÿÝwß=99º€ËEÃÙ*\403z¸}¤ Ü|#Áƒ’ÅH Y*×+,ýÕ«WŒ7³5‹>@(Ùøø8ù‰|C,FcÆôñ‘eÊ9\³ÙÌd2 °/ô1ÌaÐJ*ýÐ’B˜S7([0‡Š $½3öÜ®àŸšÚI¥R¨¬h@¯"óÅìl±¥Wš¦Ü¦gµ,[ÎØý‘™>†ÛNÀÇzvÉYȹsÍŽ«ï&g'Öd~–þ!·¿·hAIÝ7¸õڵЙšSrkv1æë-ësëM {ɹô2¾lì4àSæ²L¡–æ"Å4ð¥eænb”DüP(„2/NçóyàÝv»Í ?U(~Ë2ð2±,×îø$‚S= Ze—' ‡>)ŸÅõfg82DvÔD"ÌÔ«²¿~ý"%6LB@0Dq?úWÜ:ùE4£X&\\\Pî‰dF|IEIÈ£ñz½ŒÈ±u™”N–õ]­V÷»ß •–––Ö×ת‚G€Úggg ^Á‘¤5Ø5w:ƒƒƒh4zxxLŸËå*• …€¹‰K^ O·o߯“ O=p'K@n“t¡gÐþCÝC˲Ț^Š\Ë™ðI¹V$f8åªÕ*}Ìàà †²èÊ\.×ÞÞÞää$ pW˜w„?à›ªÕjXìÑU0ÖÎBShd†ºÈÒv ÷MBàË& =RVü%‰„΃_¤NâZ±Ž”޹#™¤aÕLlk é¤–b!(»¹÷¢ú\Ž-F<#æ²E=éúu“®Óò]sˆA³¨7ÉH'&Ñk³‚Y«õYŸy%uzåã+ÛôO}ÎÁÚàf[bXZ(s \妳…ÉÂk8Ûr³°ŒŸð¥b|œ£Õû"`•&ìîÝ»?ýéOMU+g%ÍÙ;wpÎår333 ËËË È:¿P(üô§?eºýÃ?Ô9ß½{÷ïþîï¸ÕÆ?ýÓ?ýð‡?L&“wïÞžžf€ÛˆçöüüüÆÀßø,‚‹I@ÁËszzÚívg³Yü- %Uð.XØ’k80Øùó?ÿs´=Åb1#Xt»ÝÕjµ^¯ONNj›&§"/§#·Û].—©ë±w ƒ_~ù¥Çã^—:s?…ÃaN/g³Y·Û D>==Ë7Å/–HƒèNäT…9;ŸÏƒ™0='ô‰s†~×%eàCµK½^Góà Äív³fùââ"“É@ÚÖ“x;â8 ÷?ÿ$;nÆ, …Ý¡¶Â‘ÝÁßÐp} ÁÊä, ‘ŽÔ æ)‹Áî°¨R©Ð¯`g‰îëìììøøxzz𠉝¾ú öë믿Ö@O£Ñ@AŽørmmM’ÖN§³³³366KL\ÊË{÷îa”‚ýÌ_|eÙûï¿OŒR˦9”µ¾Î„í¬÷Õ¯“ÃÅ8™G ±ÃbñÄ2 &ê ”Pµ€9Îfâ<0’ 1°«LFl](ž>}ªÝ £££›››,´€€UãbŽUk i(:88˜››;;;›››c+C4Íçóœ$&}<½ØÓúé§d;Ž‰Žˆ`MJf ¶V«e2äöN‡‘XDܘ‘ËÊÁÉ|㇇‡Ùl–b ŸW¤ä†F£±¿¿ŸËå|>ßôô4J°]hW`AÁjŽÐ1øZ(p°¡ÈÅîöíÛ%C¡.1©•¢FæÐײ?™ÏE0B… _ãÊà~µZ¯½ÓÁÁA"‘zþü9—=‹Á=Î0:ÀD±9ý÷úõk4Äšd8Žq0äX¨”#`j:l,àƒW pÚßß???O§Ó7nÜ`èýk䜓€HÔnb[*ÙΨ“‘?hš+•ŠüYñ¬…¾b’Ú÷ŽËËË[·nú|>rÃ4 ¬XØÙÙ-sýáÞCí2Qô0%*PqrCîj6ßjÁE&£a1z¸aSNÓ~k9˜E²:‡m†Þb›ûï’±ô¬NÀ®“q½‹Ø°æø,¸ÿrž·æ,<çš­Mÿô‘d9ùçÉ8§ÕQRüñÇÿùŸÿÉÔëÍ.bîEs¡‚îKå³ eý'±^+ï¡ PÖ2X\Ã?íîî...f³Y8C–F±Í íúÖZP>??ÏÆž Zyh“­$°SSSæ&žÌJ¥Æ"I :hgî@1­VKD"C2™T@ãÏ,»!, Âj·Ûšžžž&“Éׯ_3_MXÇã Õ´,„Ì·1%…`àà\´J¥Bà¦è>::ÂzX ðçäädssó/ÿò/Ex2¨Å>ŸËËËÀ3Î'‹±¯”m¦p _¸€/MLL³p4pP—/^ܼyX À‡+Æ Á·ß~Kä®ÓêS¦äTˆ‚@jQ™@ €L‹×£€u``‚”r¹àR8Fœzxxˆ½»çÂá0$Çåå%ß<ß´²1•ÇãAZ ˆ5:¤h€‡pti§§§ð‡‡‡ÔdÕjÆþþ>Œ› ¹ìì‘EÏ*èÕ’;ý…À{eSÊCÕ ‡G¬X__GÕʰ_ÔäNÙzŸ Ô'ÊõGŠºP&µÐ’êJXÜ>kûÃû}<—,(éê7ɳ‚¥/êê©gm˜SsªN»7pe­æÔ¹Z6 x>?}úô³Ï>£¦|£?%+8'×ÄN3DCé ý~?7S«Õbo3ºRT€LöâcA-óé§Ÿ²æpss3ŸÏÏÎÎjZ 5þHÜ4(‘‚Á .ÂÇ–––*•Êúú: 1hÒ{{–——9Ûv»ýí·ßÖj5–î‰×`¾ûûû8ö\\\$ æ¶0jæ#PÚÃpRÓ‘H"‘l äî˜(M¤‰bë/¡™ |ttÄίíím´±ö‹>”‘CCCOŸ>…ØWë388È hG Þ{ï= <¨X‘“Žáà £‹èžÑ9ÒÀÖÖ–×ë…·Ä"þƒ–Bú(ØÆÙFGGoݺ"Ôh4ŽŽŽ^¼xAVØÞÞ®×ë·o߆Íöx<±XL[Û˜RžœœDGK:©Õjß|ó Ú-ÍôÂ<ŸœœÜºu‹ã P¢<—¤õÅ‹àc$T¦CNOOYÑŒc]¹\><<ÄK‘&"(~ T´S(Ó Èß›˜P¡b¼üüüÜï÷cB&@ªÄ/º\®Ÿüä'Ñh”ù›‰‰‰ùùyÈ š±±1ú¡Û·o#H]\\4Š „J I¬_^^æá•Ù%1wmmmkk m:vÜ’ù©"ÜÝÝU]ßuˆÌrçtâ(ΛÏ2ï³ÊsK™iÙ]8%°Vx¼r•›5*ðèÿXfýM™ºìc° #S,eUÜ]O×Ú0g]¦®ó#ˆ¦üo~ ÖÆ75n|ÂíííZ­öÁLLLܸq#‰4 ØEÌïDXÍÏÏcÙHé-5ÿŠy(1Ù(»Ë§¦¦€YqÐ|øð¡,æWWWÁsçççwww˜¸¡1ÈÓªÕÕÕ­­-,_Ðn£‘Íd2ëëëÚoEW¡®Y·õÆÆÆÂÂÂèè(Áâ믿& “šx[BÒšIƒ2i¥VTèµãñ81x1)dxx˜1JP46áp8’ ‰ÈÊ[ ÎÏÏ677ÆD"‘L&CMJ“4??Ï•'Ê‹®„2¥3cÈ !žC»‘A–Èâ0˜Ífgff2™ íˆlM± gÝ£!(†ÏÎÎØ'ãñx‰(ÂyŒQ!ááxÚív&“‘¹!^! I·Z­²$¼X,2€Íˆ‚ñl¹qš² =*Uh m¶¡;ʇUâ{9??Ç{‚î$ÇÔí}'=%é–9È™`¹´Æ3%VasËñF‰DâÑ£G 6ÎÎβ§„AôòåK¾Ù/^ðE}€9ˆðèÑ£ƒƒË“ËŠZlÒÕƒ¬}œ<ãEÎÕúdNn›3Þ}ƺ XÒX‹0¿î7øùiXµ¿ÉÒ@°¬­­É©WwfñÕwßüÑßÜ»wO>H?£EEwïÞ¥“°L–ÄSíïï»ÝnºZ­¸³³£UkÁ`RÅãñ¼zõÊårMOOüñÇív;™L2nÆr›ééiÇs||üÑG%  \?§¦¦ÌÎÎâ¡D`­T*ét;œ¥yGb\0œ}öìÙêêêÏþsN,¤yɵ IDAT«Ýnÿâ¿øÙÏ~&&œ$ŒŽŽ2…  Çøø8 ¯_¿&D²Ì !i´•¼^ϳ AÏÏÏÑÉ€íx<:”ˆ###xzc¢nNhF¹™Éa·¶¶nܸAƒryy™ËåÆÇÇ!?±y…B¯^½B…Þ‰¼ÂÖ°d2Étq<ÿýïEÏn"¶^—ËejçB¡@\c ZÒx|°¡¬³Ùìää$ÛÀúnܸ3àÆÃ#'‰h‡[ˆ³bl%›Í2BÈ#ý Kñ‚ÁàÞÞQ˜9DncDJ¥R vŠ%B7nÜ6f,À™˜˜À V†id9£‘‘Õø|(¨æP(„/^¹\Äo‘LÃ#ƒx°2hjá'Å•Ëe„ Ä}>24šZ¾þ†Å«Õ*ß#9 q¶‘“‰ãñ8ÃÒÀb###ô..¬Ad‰´Ïçûõ¯ «ÌÃ>==½¿¿#½ººÊ&µ÷ߟ¶R©à®¦½)£££Ä =zô¡Š¢AƒãËÛU.pÈÎm1Zúb­p0÷²¬ ¯e gíW°<ŽL7ä9ÖZ7ó˜NYŠsK¦Éu;çð2'ƒm‘Ï]V{Z[zL2Ý„½HeŸþ¹NH©ëU3™wù7™½—Ý·i®g?éBu€œiqq‘.¢x||üòò’Q#êJ$: IáÊI k·Û8à @bOòöö6ò¤………F£ñôéÓd2‰ÇµÇãÙÙÙ‰F£Ÿ|òÉ_ýÕ_mmmy<~ðùÐîî.éááÇüÇØçƒ¨ŸG÷“O>Y[[ûçþçÏ?ÿüÞ½{Ÿxn™³Åû•÷@ÕÀ`¯×K ôàÁ#BL2ƒØÀm-ÇÇÇ‘Häðð¦! ×Vœ‡Ùv0zXiÉñ_½zÅC.5ï²½½Mº"ÃÑÄPsqø»a^‹4¶DÐíÁÁÁ—/_ÆãñH$R.—±xÚÚÚ …BØE`[tvvöêÕ«±±1R8;ÔÆÇÇÑh2S# )‚‹7£ÈD^ŸÏ7>>NðûýˆDG1•FlÚÛÛ“¬+›ÍNOO3\O …B¡?3$ÁÁI38cã­ÄÄ8"Ý££#@ªR©„˜Š•ŸÚºÌmŒœôÛo¿&b`žè‰ñ"ÃÒ´ÅlÀ–×\® Ì“íJ¥R­Vc†œ­;¨ãhÈXÿmoÓVžßÿc0`l 6ØØ8ÆL°ÂˆN†Òe´´Ý&«‘¢(í¶I¤&Š2ÒDŒ4!ªF«r‘+.qÉ]næb.ªÝ›‘:ÕJÕVÓfF´Ë”%±lŒñóÌÃïâõÿ}ôÝs “ýs1Jˆ9>>>çóý|ߟ÷C.—ãù,psÙµ¯®®²ö°Xöôôp•‚ÁàÖÖ–Ïçc/ «°\.Çb1ƒ††¸‚´ü_ý5ÔD•ìN2(ÿ§8€ ˜ÍfbzoÞ¼ùå—_ ‰H­?N§srr’¥Åçó}ùå—¬êšÑð‡œêÿ5ý±ZÙ5õ]_²Ô:®ºÝihEueÒOsžn½š ¤_ŠÔ+ þ„þáA=uƒ,ä´„N ˆŸwUŸý½x_]PLöYê;ÎÎÎNMMAGA|KÓÏ.rii ìÛáp„ÃaI*G{)ñ;@F£1àpâÇÇÆÆUgò‹ Jè $K^àðð°ÃáàœU5ÐVww÷gŸ}†m8ŸïU xѵA|Êf³÷îÝÃþZc†ããc†ºòØðø!–&´‡Áo.—càÌ2‡)5”$ü\.‡4PµÝnÇJayy¢Kssóòò2$±,M&“´ÌÔ¸B¡@0*eˆ ˆÂáðêê*LG›ÍV,WVV8&åŒPIù+J 4P‰.]º$si.)²´l¼†ÎTò 0J&“¬1è¢Á‹(|ûûû™L6ãV,êá¤ÓéB¡L&YÏ V«U»Ýîv»%D“/BL‡XÐâJ.¼O6^¨ù`¯²d³Ù¥¥¥`0¸±±ÑÞÞÞÓÓCcNÂjÊtŠ_DûS®««‹Fµ|‰Àg†,–à„'{°*Ð(0!g»ÀoaóŠ—Óé$±9 áÙ‡›ÈÐÐ7 Ó)²}ø1Q`´Æ“N;è_â}0, ïê À× óL&“D¨h’Øùq|Ž,ÿ¤¾¹ÀO…€ÔA‚ªq;OS]×õG¯X>¯üªsû ¬ŒêÒ¨dÎQwšRgÆpÁq/^?ÔTµº$ wJ"4£¾Å‹?ê÷’ ¨¹…B!‰|õÕW<*^¯—vžb4½w§îc®ÂyeeeccCü%©Íb±D"üA‰aN ÕjuzzšRÎ’ þ˃-'ùìÙ3>E<GúÏŠÅB‚ªyaaAV‚p8Ì­l2™ÆÆÆfffµgÁG摞¢ CEœJ¥¢Ñ(ð:¢0Jÿo~ó0 ª õ±P(0=¦˜ròôÎ###|ÞZ­622W’Ãi‹G4Í8{ÀA¼umxxØb±ßÐÐ088ø7ó70d@®©°‘H„…¤P(lll ›" ˜ L¤\ÿ@ €#joo­«Í>³"ÒŽ777aÍÊ ©¿P(°Î±Dy<F‘H„¦›Ó°Ùl}}}|^ÜŠ@·ú§à‚§á¾EÈ(>†ärpÁ\‚;C—[·³³sss1ü.Ên·ËøDIÙr±à‰ñ-›<è¶Prå?Îê*šmâi{zzøéý@=*—Ëì-x#ö¬@R~¿Ÿ¼h~Ž?1#(|±¨žOŸ>Çã¬RâE¾ªVjžY`¬O% EÍ¥AÝFÏ*£õÿbÀ£ij5%NOµ¯['ë†óÀÒ˜OÔ•§I×Þ”ûâT•¼«74Ò¯g|–:tÕ ÄxuÇå?Ø„õ Åú“Fì~1ŸUR9° …÷Š\wõ©È¤Ýn7´,!Iò¢BÆEAD@Kû¯»ó «)QªÎYü3TcáÕÉË๠ÇnnnÎï÷ß»woaa!±0•;ƒf>A-ðz½ÂeO§/Wàlê âX„MMM Íf39ò…BÊÎÉ 1´½½ãÒÒ®±ýýýA#ÕöòåËä±Ô>::ŠD"HÊUéåË— …Âææ¦ÇãÉf³N§s3ZÄ烃ƒ XôÝ 'ÍÍ͉Dº¤•)a`kh ÂJj{ X,Í&ㄱ··çñx@u3û­Õj±X .,¶K‡#“Éøý~ ïð.e¸f xHN„îèâñx±Xôz½²Ò§R©X,­–ïû9pB«Õ*´Ô'\4›Íöúõë`0£¬££ƒÙ» `I¤ïƒS‘FØíöÍÍÍîîn†UÜ<`PPcs¹ž¾"$;:ïíí1 Ëår¢×ã6ÆNß_aXÉC7::JËÅC¡k«ÔOŒááaa©†b^ —"«ž* V\sôÖ zr] ©Ô¢?¶èɇú^¾ìÅ«”àM¸¶ßCWÕ·êzª¨´p?ßź }ÒçyÖܪk ì¡ÄðNŸ'*’‹ÅÛââ"¶ŽlS¨kb½F÷^Æè¸½½½P(0Û„V„Ùívó^ªŸ"¼R1ÿÂ&Ìï÷³ù• жÀM¢ú“Ê&\=žöè<‰õˆ$E*kïÎ!¤EFŒ4ñ>Ã÷Íívc§_ÌÔ¨eTIaËÇH¨ayy9 ±*x½^qîDoØÞÞîp8<óy"玎ŽhÉ=˜]S&¾ýö[º¥R)"ÁéÕj:Nǃâ,™LÊ÷õ¯ÿú¯p9€ßïç X­VÊ(=L*6+¼€ýP‚ež?.Ô/Œ²<¯­­555!Gâ¢ár¹#Pý[¸mwe³Y¸¼ñ$ša% Ó‰ù ‡Å!žÍfóz½bŒÄpîjmm…aÁ@åwÞ¡"_¹r…Ægá»ÁƒB s‰OÍ•G®AÒu&“)•JŒ dêÀÊ0(1«¸s#ù\[[¯+ ì¹U8%ÜàÁ]žœœ|øð¡p²Ál.ðPãJ)*Qú!©n’Î;33#© ì@¥(B W»~ŒüD¥ª\ëfpêÓ*ß0}@ƒ‡«$(½ï©Sy¯ë j¦ÞÐèMFu $ýAõ±6çY–ë±#õŠ¿É¢9¥_?ØàëT›5¾ƒüŒž]$Á”`Ê1UþÜØØŒÏýý}úVæZ­Æc¿¼¼Œµ*µÅb …Bccc@á´±P)åœ9¤Xù!ÔxFûÌùH¡ªe£S¥÷–ÑÝÝÝ7ÙjÀ£­Õjp 0Cç ïã óù<¾r8†¢nÞ!þÉ4Ñ  Ówuu±vBR‚«ƒÏ6ôJˆ¹…Bºƒ*‚€ý„(H)Ùlö*²m ‹p¢Z°ÑuR1©n«««˜¤RëqðØ@|N­7ü *«ÕšN§Óé49Ë:/‚q`ÄÒ‰ …ÑÑѶ¶6yœ<¸sù€¤!‘@£¼¾ cƒŽŽŽ·ÞzËëõÒ£ fØÚÚâ#†3mbMæ˜Ùz<Œ¦Q²›ã ¢~ DáªÄåíëëƒ_×ÓÓƒtNö ¸§0ê‡0k€yÜ`0ˆußÞ'µZl;vü.Ë»FFz^¯—Lº¶¶¶±±1¾–áÃÃC‡Ãqpp0<<ÌlŒÅxnn¬Ëšªjµ*2|“ÉÄž^6Ǫ8 ˆUh£‹E²hÅôC5ÆXˆÿú ­ ¦šèé3¢ÇÒü¢ .i RÄ$=¬n}>#RwMÓ\W"wå§ŽŽA³R©øšþíÕ9†Þ7\· 1Wÿ¬™©›5uT";z(õ'M3ó ×¢4+¾¸¸ˆD³Z­z<”™ŸO’Fpê^\\ä•ëëën·; ’3¬:ýf2´E”3Ø“øaÐW²ÓÇ7 ÒcWW[B¡àr¹˜!¿ìííÑxbwÊ?"ªðáááøø8—…úNYg+L&{{{á)á"Ç4‚wÅbÀ}_}õShúDæ“̹ª~¿ŸÙïÞÞÞ¿ýÛ¿%“ÉX,†|$fÝv»5-*aN§³»»›ªI \ 2®HÜuŸU@2™$·ÝÙóçÏY±[T*•ÍÍM¦Ç`ôâaN_†K$t&>)Ë‘ÚìóHLkoo¿|ù2B ê/£rÔ0´)@[Œ1àŒ1O¦ûéèè [ :ô0ê;|> º~÷ìì -†²ÌÞ‰¤F&IàÒÙÙû? 3Ø‹Hþ„ðnùÔx[­¯¯³ÁbP‡¢3‰°B<{ö 0 ÈefffttTÔÎòsú-‘tñ\P‹M&—ÔÍæ@ChSQTè¢ àÝ5TË`]•g®‰ ×¯7ªPÝÒ_7äF-Ôuƒe˜qÞž«cÐ[GÕ "¦x’ê ùIÄ *QUÏS…½Ð­„ƒ,¹ÍüúÜÜ<-I.eð YxÁÂÜâ·:;;y&F£DÅÞ¹sçã?þúë¯Á=Ç/~ñ‹Û·oÛíö¯¾új``àèè(“É †$þpÞó|¾õÖ[¨I Ûv8sHFFFžŒð‘‘@‰t^XXˆÅbÚ%S]eôK,¼¨ÄM c6›ùuÕ0”WR@È Qó.ªž@´\jg,ìUñõãçI­9‚*óÒ¨Î+Ôü™Wj|gff~þóŸ«tÕ:^IêvC?!Ñ`ap–ô““gÏž'^ƲAc”-H”[ÄšöQõïÑÄ'èSaÔ,h=õHoî©™¾{¾¸H¾I!½  _Ïð&q@?ÄD¯.gVÔê*ÔT‚FÕ¬_ÍêzÌÖ5ÄM3ÏœQ£àГ‹ûUI èww÷ØØØìì,w*px÷TIÇ388H=·T¡P “ ÔXàZät2åæ`ª÷73!DÅãq¿ß…¸ŠQ2íŒF£ñx½4¢F1+Eÿ,`…BÁívƒÉY)ƒ@gž¿ {¢úcºN§WWW‰ÜÁ'ƒ%Çf³áR±çàà€þ´¿¿ݸÉd"ͱ±±‘0Oïþþ~2™¤¨ñð1Pl£Ñ8>>ŽìÃd2Áãš››cÓ€TŸP€HÁÕJŒðÖ××%ª¬¥¥Åårµ¶¶nmmU*•õõõßÿþ÷Åb‘Õèàà€åHàøøøg?ûžØ¬‹&“ ;ÓÓÓ+W®€ò9è¹n·Ûn·W*ˆjCCCÔ>VGŒê q¦ÓiÀD-ˆ%ÙO°T*•b±©jðÀëŒÁ9Æ‹ÅU6FÃÃìµ}}}øJ <ˆ*„Çb±äóy"µ÷öö¶··Ñë¡Ò°ÛíZ€&­¬¬œžž²! 1B½qzzšJ¥NNNr¹®®°ãH¢æ6¼OÚVK./2u†s²ðŒ1À sâÏò쎎NMMñ+÷îÝ£ü=IY'õS vž)y²Trc]êÕ¯)5úÀÕûHÏeÒó…ÞPDÜP/Z/+®ËÔ×h/¤•r}ÁÀü{l·ÿ(!›¬rš×h4Íîì yPu­¹õ:}–žšî­jØ&°U§‘ÇìWn¯éééÏ>ûŒšûüùsæÉÒž«[]ä÷îÝSY̲¯d°FÑ—L:ùj`ÈHw#]3uJ%½3@“`)·)®Ñ]]]¸ìa»D+qžÁ`à8Œ@ñIÎd2^¯ÓS@sæó UÅbñÊ•+äDÒr¹ÀŽÍ®®®ÒÚs&H‡û#‘ƒq1ý~?¶P(‰½ µ€ÿ h‘~*oP´%nÞ\¨Yì'˜ÇàAbµZ777QC¥ÇG&ÆvŠióáá!oÄ•ÓLzŒ"ÀÍ@ÕñÎK&“ä\r Ñn²#18 à>Šh|îà8aÁÍ·À”‚ÿ···#ªàÒ!J Åš‹ÖÑÑaµZ™! …ös2™ôûýñFFFœN'Y ÒÚÛÛá_@`Smq98aJ,ÕlÁYNOO™‘H”Kˆ×ë…% MC~—¬7±¯—‡H³¿” À¤ZSgγÅÖ˳4.Ÿ2.æ°ï Þ°÷ÿÞ,OMÕÒ”8Mºç¨Õj=ü§ú§‹ÜÎ;®ÆmC€¨§«qX:o¢šRiâÞT7(~üøÖ­[ä²1U#—íààÀëõÞ¾}Ûl6G"¬ÖØ Uóx<äŽY,–O>ùäÖ­[GGGx= W*•k×®Y,–ŽŽæÏŒg¿üòË[·nI>ɵk×0SB+°±±Áœ‚899944Dªp©TbÏŽÉ%y“H^¼Á`àÁ¦Å‹H$Øg²u€-c±X^¾|¹··wvvFB¾@Ô#Àb¦Y©×H£Ù ¬x€°ÁÓñ§BÄ`·Û———€ÑhÌår/_¾Dj‰Db±˜Ïç³Z­<¸víCxúP&º á£Ñ(àŒÁ`à½I0K+oooç³,†„Øn·—J%¡Ù°zaˆÑF¤üîw¿ÃŠ »´´ÔÕÕ•J¥ ×jµòïè²ñn¢Þ1dnnnN¥Ràu;;;äçà‡ÑÑÑÁÄ¢££ƒôD"!ù `ý,*f³1n½½½,ZHØššš ñ.hSx#Ü%@9%¼©#¶WDº’Á6ƒôR©äñxPÈ×j52ˆ3:<<äW8bì•s@7ÂÑq: |ŒUØôHìùƒËËË|4–‡ÃÑÓîî.÷Vz˜ aˆ„É"ü‰‰‰ȼáÚµk2 ¦÷¯T*TÍÀV¦Á„-R¤€ ¿†àHÕnH8/˜ñéWÁ‘>IMóõçLžÕʦÐ %炪«4‰w“ÆøŽBúF&zúãÊ™É{K§],¨ÔÄ8õt!qùêÎëUÎ’úCùbô§Á9gIþinnŽÛ÷ÖÙÙY¼±¸ â»'-G»zõê;w€ìoݺ555uûöí>úhrr’ü2BáF#TZ<îÑÓÓÓW¯^ᇺ±±111ÁÖb …ÍÕ–™Ãáã"¶ðÑ£G{{{¸½" ÛÝÝ%%”9)‰bc¢JÓÔÔ¾Œx„Ä^Š!N v»}{{›ŽŒÐŒá(jÐf3BÉïêêJ§Ó­­­ØÒ555y<¼ZZZzzzÐ:ñ¨ƒ‡°ð„Ãa"8r¹\fí4ÛÛÛ`>œg>Ÿ‚þøöÛoƒ}!×J§Ó\À–––ééé;wîÀѤI·Z­ûûûápxddDÄh¨M#ìv;´Îããc>>0=Õà„jµ*!ýýýÁÖYËå296årÙn·ã!Êj$#e´ÁŒúáÅRŽ=”câ} ‡ —C‹ÅÂâDß@À5d$cƬ¦ÜNøErwaE½njjÊçó{{{ˆZÎÎÎþë¿þ 7ÉJ¥’J¥˜Q'“IƒÁJ¥ ‰á0Å–±9Âǃ.«©TªµµuooŸL5NOOwwwÙI°¦r‘YŒÉžÛÝÝe#‹Ám>ŸÇó•›„™ ª Lˆ‰ê¼qãF±X¼zõ*m6*ÒàñÅwî܉F£Øùá—W,ïܹóøñc•ô¨7ö»Â±„@¨6ÁRÁTsh*ešsCS!8©†¡ªªº&©Ö¢ò’†ÃÉ^Aý¹ÞoUHMª;¬¾¡×Þ?naãªÕ_õTݳùO³*h>n¬²®KL³èI­Ënµ¡æ°rM…“LM¥Ö\/Þˆ{ˆÅŒ“aJFpôÄÄ\Rj´ÙlËå—/_bå†G…m/˜/Ì9ŸÏGË“Ífûú$LI IDATú,K.—c$ *òäÉ“»wïnnnšÍæ¾¾¾O>ùdbb"•Ja½±±1::º³³óÿøwîÜ!ªzvvöƒ>€"B´=Eo¿ývµZ–)•J[[[ìú1ò°v: LÅb‘Æ™ÄÃi4_¿~Ç:˜”4éÔ¸I”0À"üy¸<ùx¥Õj5F©/_¾$;âÍüµµµ%—Ân·3ÆD5]«ÕûúúÊårKK ú–CÌ$ ß¼y“”Ëåt:ÍvðT*eµZ+• &ƒà*ìl°Æë ïšD9¬¥ÂâmG]­Viÿq˜ðz½¬mh_¿~íõzY$ ê'-<îCº {h¾|"Š8 p*ˆ¶ ¨YØpÞ D.—Ã×Î(ÕU™Á†X¥îìì°á@244´½½Ínxkk‹×àà`:d dÛ³,Èñ·‡‡Üÿ¬Ä 9J,óø;Ùíö?üðÖ­[L°8&:8òšÍæ×¯_ÃXmiiAÁTŒ½ˆ¬Ð –Ôw»ÝžJ¥,Ë“'O®_¿ît:_½zQ•‚~íÚµD"Aï_©Tº»»?~LåÔNR=¾´ÿBŽ G­HRåd'¡§{ª» Ž#ý¾ž½JUý§õ;ÞÌUL¬ÏÛ"ˆß¸R—ª¦—…D³0üðÃ[u¡½ì°ô&ö ü¼î¼A?œ¼fÐÇ\AKðŽ&''“É$Ýà,­=äq y†Ì9´îçÏŸ‹¼YMEç5>>~÷îÝgÏž‰ªú¼ !°×××y2U«øpm‘®s¦··÷ŸÏ‡Àª"¨þ¬LVéIyžÙ…q .,cmâ½(CŽ2f`Á@íA&Õj…ÅåeÿK+Ž)ta`ÆL}dØÀf‹)ˆ\O®†pÄÇÇJGFîìØ¨tàþPŒ0ð°Ûí¡¡~ÒVò½@Õ…5@¸i2™DÁÀ‚B ѓנLÆØ ¿?Nv*»ÝžN§‰Æc{Z(0ëE%'K‚ÑhärLî1X¿”c>ÁQŸŽiÐúúº:n…hǘÊét²±3^__nÂŒ’¿ò3´ïzøcô+ œñØ´´´´¼zõŠö…î÷û{zzJ¥ÒÑÑÑææ&S ¸ªÜ 2p‚Ø „ãjFz*™U?¨K¤þäy…E`è›Rgô~MçMR/65¢‚©Lª7¬ç}"õ<߈•tq4BÝÔgk’Ý4BóóL8ôCsýo ÍTLª51ßuãÔ`8.ò܃,ñ¤á­466ÎCíVïH&u8Y2ʆºC{ŶšèDj“¬ lй§}>ßÇ¡Rܽ{w~~ÿJp)Ä u4],!Ëz½Þh4ʪ Nm&“‰‹Í%f``€(˜ÎÎÎt:½¾¾NÉ£ZI)Dð,³Sù|>@L«ÈdÁ-!ÿGÌ0 ¿ññq.)‰ ²zuvvʪՊI)Ü0X°Ìðà‘ ÒÐp8‰D¸ž>ŸÉ+CK¯×ëv»6rD^|"yÖrØSL/z{{‰oËçóKKKMMM»»»;;;ˆ?˜Rð¡„k·ÛŽŽ¸ø€oTy2?Ø;rL¾Pæ±\s0È‹%N{½ÞÞÞ^‰Tr¹\`) |@7 ^˜&±ÞóŽ€™LD(܇X>¹c±˜Ýnïîî^\\¿w<áYí¸þ¹\ÄŒ‡×ëeYb~îõzYÈÅjooçœFY×Ëå2bhTLþÙra´ÎÚÀÛAá[[[Ha0xÇÒX£ìA-­ßï'–ò·èŠÅºU õÔ$²‰XS=å'u{Yëª&ÕXµï¦”_@Üù´jÍ­)†š:vž×œ¦TªÄQ}Ö²žU_ù¬ êÔY±˜L 3͈CI©šFõ§þ¢ŠÉÇPãdsÄv‰l¦ùùù'OžÈY‘é!˜ zcÆÀKò.Híèîî®ÕjW¯^%º’x¸0ót8Èy‚m ,Ës[(ÈÒâ_^^îïï?<<ìïï7ì–––D"}ûæÍ›t “““+¢Ëõù|©TjggÇçóår¹¡¡¡µµ5<¡!ïžœœà ¸ÁÉüÝßý=)óÀµµ5V¬öövôZ­Æ¦'‹1~  '²¾¾~ùòe0_ì àò³A_ʨ–ÂW*•¨¿MMM¡PèÒ¥Kƒá?ÿó?Êé?EsyyYNìóù<Š_rh~_¼xA ’Ëåº~ý:ñ–ï¿ÿ~±X$Ôìúõë”3†C¹\În·¿zõŠÚ y $—Ë1‘&Úšîj¿ÕjÍd2ÌEÉtZ__g†d0X¡óù|{{{:+gVA’ä.wwwÔ÷†…>(P>âjXghØØÑæ³|ŠË)S6 |¡TI.,ãr¥påcãÅlŒ%Á9¾u333?ùÉOÜn·ÉdŠD"N§Sp3¾}œ¯` ±âÆGâ)ܸË`„544”J¥Ìf3‰FtN°!`Ä1[¦S999 ÛÛÛÐÃÊåòåË—¡É1ˆâ!…ÂxÙãñ€&=xð€~Ël6úé§ *BlYXXØØØRÀ‚W*ÌX`Þÿ}oÀ(}½’#kæÆ2–`"­/˜u'Þ‚ÀËdB‚,e$®z@èé<:©ã]h~Eþª™=|ÏŒA}©Š¬ib>Ur‘ú62r¹öQ§7ŒL½vê—¡a1i085^tbb‚À?®)€€$_ª —äJ]½z•Ö©±±‘û¯££cff”ù!›ÅbùøãGFFˆÿdf‘†mÀ=èBƒÁ`.—C&ÊT3—Ë!¨æM%åÍétÂjii ËËËܯˆ³Ð0ÎÌÌ\¿~9*¾ù{{{0 ÁpGÀhšhf­]]]årÚ8ÒShßpWŽŽŽžžž²(öõõáŸÉs"‘p»ÝÐO;;;}>­1TNuæ«…B¦”¦©©‰¡Ëééi>Ÿ÷ù| E‡††>|ø'ò'±Xìèè(ŸÏ?~üøæÍ›/_¾Dýd6›©2¼E¾S}I" ‡Ã=:;;+•Jƒ£»Ýþí·ßâŠAkV¾½½‰DÇîîî7ß|ÊE ÞÛÛÃÍ”(Jqce<À÷KeÄÛŽ˜#¾f3D÷°3 B ÙÚLnè Ì"a7Æ"ít:™ɇ-.Še5ÈæCϘÏç™=0¥`DzMeGäÁ*.i9wïÞe&ÜÐÐpéÒ%ŒQá#°­T*ðߘ `ßÍ’CÛ!ù¬ÙŒj gÿJ5«X%c PÀˆÜn7ßÌ(ú3Ö¼ŽŽŽl6ˆ8^Ü2NNNH|£ÊOLLd³Y¡Ãࡲ™Ç° r:Ÿ|òÉ7"ú|¾Ÿþô§###hM[[,×ˤA÷¥Z J¡†%k,+¤¨ÊøS?W÷'5²T% i <êöëç Ÿÿ8ÛmÕ0U/¬¨«¾ÓìÝÄQ¶®™­*RÓ°‰UZÙß©¢bNý' ±®¿-aÊãц*–AÈ,²Ù,äh$WþÚÚÚpfe[«Õ°x½^«ÕJ½•,ëÁøø¸¸¶Q¬q÷CщD€°¿­¬¬ðtÑâÛŠ±Ìôôt[[›Ãᥠ¹‹E(á¸ÐÎË€âVé4ãñ8Þ>ø¤¶··'“I>åE ŸAb[ºººÀÊØýƒAžm&(œ6–s_ëa÷ògff‚Á ß`1 >W†#øýþh4êñxÀYv8|GÕj•‹Ø"êªÅÅE„Á‘Hi1Û¾‹P(d³ÙXƒ …Âââ¢Õjů»µµ•ÑkKK žzøÙq‘Q¤ÓiÈ—XÃR(1æÃ¤=²W€®^Oâ,Jf8f`útÊøôqpög| :9·Ûõ¼,œÎÎζ··áàòYwÓÙˆÚ±Z­Æb1Dš‡ ! ì˜0Û œÏE¯ÙីÌTÑèè¨Ìü›ššðÆv‰£¡¦f^¤ßÏf³ìÑA®p¨ììì ‡ÃÀwX!ᙊÐÁçóáæ-&HV±æD%ª)SRJ’h‡xŸýúµÑhœ™™¹yó&ÙÉÉIö¶@Ì 3ÌfsOOÏîî®Ëåšššºuëõï{¼Æp\ÀƒêêíÛ·‹ÅâÐÐP[[x.¼)X’4¤wÐZR¡]#Ûl6Ôhß0ë‚âÒÒÒBoŽÒÎxˆÑhÜÚÚjhhØÚÚòûýÍÍÍ.—‹õ€ŸqÈÇvà,ÔÒÒrëÖ-:>ü¢ùD˜¾|ùÒçóær¹ÆÆFv÷ïßêùó?ÿs(4©T õPLÜŽl6ј{{{«««###PH1#òù|8â@NL‚0G …'\+¤¾¾¾ÎÎNˆÈxhŒº½½ =fލ%ãc¾“““h4ÚÔÔÄ—Âî-™L²üPm©ïØbrztÜ‘XB i:ˆdgggü+O èb?û¶Dñxœ\6P)@ÑD"a0zzzL&ÓÁÁÆP\tò¬mt<@…ü+[ŠX,†iŠØ2"ŸäaeËåØa ÜÛÛ˾ :l.—ëëë#ðÁÝ»wõ«_MLL ðþ裠/³Q¸qãF6›}ðàÁ'Ÿ|òàÁÌk¥8¨Žœȶñãž››ûâ‹/fffŒF£4õ•JåÉ“'–¤¶Ü¹s‡Ê1))šDeÊ£l/(h¼L¯ýªë1zªL=Ž^:¦ÁrdÛ¤±äÓ³’ê, uW…ó6#T|ýLBL Uú©¦ ««ˆ\\Y'ä Ð0Ž5§§¢Rnhf Bê·L¶¹²Ød6üßTzh£7oÞ¤þðÃa×ÀÅädR©T6›}ôè> ©T ;££#°l@صµµÃÃCÈÔ ¢è'&&?~<<<Ì Ê!qÒ|ñÅ¿úÕ¯nܸ°ŽŠ‚{¹\FåðâŠ΄ö¿§§ÇjµžžžÚív¦årykk sSIa4›ÍÐXñN ÞJŒW(ôsZNtRp¶··q™Å}§˜6§§§ÝÝÝ¥R©X,2éîîÞÝݵZ­+++}}}íííÐùÁ…®_¿Ž¡³³Óëõ2Ƨ}£@“i:::j0 è'ÌŽhåÅ‹ˆªÀ"èS©ÚÚsêš8Çáo "N>|}”{ª'»¥R d†Õúàà€OD›Ìèå0mmm Ùh AÊ”oîdÕ'''P»»»ŒUÒé4k°Édâ4(‘ÇÇÇÛÛÛ8CõõõU«U w8fa€’ËTBdlØÑ.444¼zõŠñkHN'ø rÑ'âêÑÚÚŠnœ‘JIîÌ”ÀQ“É$?a¶?#bØ\F£‘4lt‘ðܸ&l饘„óOƒ°R‡Ã5!–vŠ{ò§?ýiggçÖÖÖðððìììýû÷S©…øoâd\©T¤Id¯”Q†’³& QÕ©98Ȫ“¬ÕºŒdJõ{–ú£)åš9®X´jð(ÍñõB‡ºn¬BÉå'zÀÿ{ ¤ó"~ÔxƒºyšL±Qßê:/§ÕV³&ÔÁºžt¤F§©ä° …TãhdOŸ>%nS¼Nggg±$B‰êäQ²½½=‹­¯¯ïïï“~žÉdØÂbì˜^/‘H`) IÌJþƒ§Ávx~~žåM6™L&Ca´X,£££µZmll ?%¾)ž¨p8¼··}Åf³aåM5S5š÷ŽŽ /Å`¢¥¥ p¥R¡œ566^¹r¥\.—J%8ì¶¥¥SkÐ6®¦R¼#fSPSئ²ÒÙÙ …¦¦¦àb qyùhápvþ¼²½½H DÂ[ÔgwÊ÷W_}6r||Ì6bqq1 º\.Æ'§§§›››ß~û-çP«ÕÄ˨©©‰2€—ÍÍMö.ˆ$L&S0ä s?0ÍFúGìóav¨äØÏa¢§"³immÀq„yÕÎÎ&|­\tõ6›í7¿ùM©TÊf³ c@ZâÞÞÔd¿ýýý¡¡!ÊwCCÛ $“ø‚`ó(Ó©jµJ\v,ûŸÿù>ãþþ>4n+|סÀ ?`2™”DnìÓ¹=Ø[\ºt ô©µµË™ÅÅEFâ IB·Î1áp¶7 ’¤Âñ¼cP¦1[­ËÒÃM5­Rcµ„U‘Æ‚I¤k¢ž¥TÖ"V“|¤(é™T%]Ãæcë“Öô1 z(©ñ ½œô–|T•ø%SbýV!¹ºo§_*êfMh^ɵV}–T{[ EUý8ò+’È ÆÆÆÊå2÷ÄÌÌÌ{ï½GÀ”±a‘AVˆp8LeK%Џ¤Í0ì]]]…ˆB »f• o2™ÆÇÇñR'7& R@Ù^Éú´¿¿ÏïƒAÆÚ‰DbxxŽ ëW_}U*•pÆó€­7CN(’œ*l¸ëGÎ0jUZ­Z­F&®¥L™¯Ê‡jmmýë¿þkh‹DC744PÈÄ *!-¼²µµ•3ç"ó=2­"k/D"¥–––(p~¿||<OMME£Ñb±ˆo+D8›L¦·‹/Ò<‹Å"R’H$òðáÕ•æ(4ã8ˆ|Ï  èMMM£££šÊ2 &CÁbKzttDp§ÁšÊÐ" ½|ùrww—ÙU©T¸'a±¶ƒÁ`wSB³ÙL†tXV)ˆI@dÝÝÝ„Çb1.&Bq¢‡ö÷÷I•"FÄ&2Ÿþüy&“AØÖÖÊ … ð™:N4wl©»HpbðFçà¹ñh°0CdàùbÀ ¦X\@‹Å™£Úá©ä‹ã²ã£ÌúÁ]$5‘–Žá „5üTñ»TœBvçž$©WmŽ9Ž*bP3Ä4u¹nÇÌ$CCWU ¯š¤RÕ>V³rè½c/®öÑUÏ^×?ÈE6,BºÛ =jTw÷¤ZYÕE‡Tµž|A÷¨ìòŽšSÅ}H 9dµxüø±¨<&&&ð3 DšuõêUŸÏG!ã¾Äá» xÐ¥ggg¯_¿Žì`kk«X,µs‹#Gòx¢÷±X,™L–§ßïç.‡<éóÏ?ÇΞ=õàà EßívLÑ,õÕW¢¨‚„rÊív»\.¶Ò¥²Ñ^Åb1ÖiÜø <···YZ„,›­V›ÒP(„êægÎf"‘HÄãñçÏŸCn‰D"„±«ÊÓHë éqÀëfgg%ÙÔápà¨ÌúŠí(_—½\.óò|˜Ç&“Éx<Ž9ä™p8,ZÙöööçÏŸ3na–%I¬³ãñx&“!HÙáp°*бrÚäh¾÷Þ{àN---™L†•[6´0V1Aa‡‘ÍféåQw3ÌÀ+ 'pP5»Ý޲¨Ðd2e2™µµµ••·Û$§nÜUYÉ0Idvņ„544?ïE<@1Cá#c#ø{ n†x<Ît3ór¹Ìf—cÿùó猠‘ˆÕƒª‡¹÷×jppù?û‘’d2™P(ä÷ûaE7}rrÒÙÙ){DöУ££ÂÓ“QÁÂÂÂüü<†Ò›?ýÃÿÔö´Ve9jHçõõz!-ñÔP¡4¥Iƒº«ý@ï*-xÑ÷Æ9¨AÈuùNo²]8JÒ‡_Ÿ‡/Í(ÿ— Q—ªUäR' z=º,9‚b©Ëê—ªOeà»±´ž¯¦9Ïh4:??OÝrµZR„ÜÉ­_­VÉÒâ5,!333Ñh(œÍ5½³³ÓívK¢Îoû[”Éííí8mÆ@ 1ƒ šPΓvÞívÿå_þ¥Õje=À‰Ï8úG»Ýît:ù]¬iŸ‘5!«†µ‚ÊŒa#Ý%3Ub[0Ž&χ3ŸÏwvvòèV*(‰‚¤ ×–ë\NÝñù|°Ô¹¶ŒL&“Çãyöì™zÇÇb1¯×;55µ¾¾>==MäŸ^%á T—ËEæ6—x<>55…—-ß‘Çãa°r>"_AWWWkkë«W¯ŠÅ¢Ëår8‡ƒ8âJ¥B·K£@UÅD Î%ØK(‚ðÃd˜×ƒò³  v¹\Dæ)„Äš¹7Ø7)Ü'''ï¾ûn(b"uåÊ•@ À4Aˆ@$:äóyÜMà,`‡…Í ¤O\’ø²2™ÌÊÊ p ¿ËåBèÖ„(‡ˆ§H$‚0›õ˜Y=*z>ÚØØ_Y¹\f‡}||œÉd˜WÁC}ñâØàQâ°Í_%qˆ‹,ž(Xo±ñ‚ T…O΃¬‚/Bk”·’¼¶‹Þ>99"Y«Õ`²ØÉƒMD3éÐ?úÑÌf³ÇãûD,³ÝnÇr5 âè700«ÕápHVì©ÃáðƒÌfó7~ñ‹_`/aµZ=zôèÑ#Ñ=}úé§@àøø˜v•âŽüƒ>H¥RNOO?ùä“k×®Á²'Ÿ93æÅ®œœQ¸XìÐ0‹joo/œh99ùýîªu}½õ(>…¬‡*ªîXBÄ{ª \µGUEB‡¸Õ y;Fù:åŸÄ$tO\vt:?†[†78òiÀY±!¢›fïíÚ5ˇ‡‡˜½Ð°LLL»»»F£ñÿ÷@är9DõìSYÈFc0ÛÚÚúå/ùèÑ£,xeŽˆ!ØÍ›7¹aFGGùË_JZòµÓ§_d8!*6Tv©{bϬÑZIÙQgŸj;«:f«1)÷AÓ%ëçÉrdŽ£MÓm«;©ºÿ¯ÜUõÙÖu¥Ñu_¦Wë©Uåʤ:«³‡………p8,ÇžššR¬TˆË) “ÚäçD˪qá¬z=ÊoIF¹š0Eîþz€ÝL„PNŠ©ÓoÞeeeEœû²Ùìøø8Ciøãì(:ò%¸<ï{zzº²²â÷û)èv»„šá3à$Å)añϾž²Üà0hÇÇÇ×××áDw—ÉårÁÖgäH…‚GÄ¢ :<== ÑP\l14|öì™\1Çeœ#˜€¸N 1‘Ë+™››ã°|(ǃ6Ô" ñEƒA·Û ­ Àñ Õ‘‡Á`H&“èþàð°µ¢,B"ä§R©ŒŒŒlooC@¢©‡@üÓ°&¼°EbWĤO$‚¡X¥ztbßÀ^‚Ÿ],ãѸ²²ÒÙÙét:ñXOV5ɯuØ«¢>†’MÍÄ»±±1‹am+ÌQyÄÔ| •T8\7pm‚ß588¸²²ÂÍÃý/¾ªÌÕ`%±sp&X|_&“ éŽŠä ‚[ZZRIê’¿V—:_7Ãù 3%õ1pzOSÇj]ÇS}ÌÜyÎu‹dÝ¡ÂÅ¿533óÏÿüÏDæ³²×ðPU¬MãE¡Ê4B=Ö¦þYü6TI„¼¯ lêûªþ‰)|xñãd(ÄqT …=‡ŠF£8žªqÐKKK@@æÃÃÃÀß|ÍàæPïù-1ëô3âC€+5\Uy¢ÙQΘ§‰Ád[[Û{ï½Çä`j£Ñ‹ÅÈ#_+ftmü.ªfx±$pÁÆÁ•ÚA“ O‰rvéÒ%´Öv»JrEr€ TQØZ,n·Û±|@|[(”„&(yÅhA„Ý a”¹B4]XX ¬˜ ¥â¡2Ðf199É’ŒG# ~ñóÏ?ç¾ ˜yޱÔQý/lyŸ,3ŠàÉÉÉîî.;ÅÃÃCx–$Nø577ooo³Măˆ„Tª3²,À÷H$‚¸O].—é©ò„.ÁØŸ iv?‰D"‘H0Èårìù2™ K¤‚ŒšØ€r{¿óÎ;—/_¦‡‹×,¾U(Èë¡{gU¸té’×ëe€Á]æÆ† U£Ðõñnoð—Ëåõz©éÙlÙc:&NÎT1´&¨ ®Šk@"‘X__Ïf³Œ» D;ŽJ¥Âµ¾¾Î[ã¹+•‚£® X\H)—9ÆjBŸW¯þŠÞÊ[³H¨ƒné>õÍ´¦âk4Xç™lË"¤ÒúëÎ'ô¥[¥òÿáóÁÖú ¹ûÁj[•u[wè­: © ašÆíV¦=ô˜\ˆr¹Ì –Öå3Ýå•rA‡‡‡ÕmÓlJ$èIÔ&F^‹exx¸\./,,P° ÜpÓËx¶»»›A"6G‡c||œG޽í-åÅèÊ•+‹¥«« Æ*4SŠn85Ùívl6ØmÐ¥;‰?(--@-e Mcc#B·ÛÍ[ÄJ4¿}ñ—Ô$Ä.—‹Ja±XÆÆÆÈÈi‚J"à üág?û™ËåºwïžlÔ@&ÒmmmÔQÃÍÏÏËÒNɘšš’Ö•‚ÅybûÁÉÃÔ"hBêééé·ß~»»»Ë† ±±‘a25¯r±““á­¬¬sçp8vvvpÛu8°{›››‘’¸\.tÑN§see¸)›ÍæóyP¾ƒƒÞæ.¥þkØN>Ÿ?99Y__Ïd2¸Ýq>RRÙDc1„$“É€300À²T*•ð”£*ÒgÑ3² `S”»»»›):=ͳgÏ,Ëàà J@”.Ìíe憉éuìK ·âÔ„/VµZå„^0,dÈ'Iч‡‡ãããrÛ`Ê4;;ËÓÇ×A5ঢŠ&dž}/yêRÁ+YfDশ§ú]j©ÚmŸ§*Ðëº4¯Ôàç åäÃjÖ†ó8Qo:|Vc€Ô¥FÅÑ4IŸšaˆšâyåVc઺\^„'šrø[äZ±Q}œîܹÃ7*"u^ÓÝÝÍC²³³S©TnܸqóæÍb±877Ǣʟ‘5˜ÍæÙÙY‘õÒRXÁyß)Oø>®®®’˜Èó†(•JÁ³îïï‡_$3±ŽŽŽGݽ{—ljÐ1d¢ü+\-a¾cgT.—Ýn7% L_rž…ŠJˆO)æ –a&3Ì-f³Yb añ£©¦¼téêÖÍÍÍÓÓÓt:}xxˆÕëþþ¾Ûí®T*@à_þå_ÈÈ»ÿ~KK‹ÍA¨d}êïïg³BªÓé$âô£>®üþáþê¯þ èŸÚJaƈ78ˆóÆÆ”¼°Ø »|ùrSS& ˜•âêÁ \9z hY)‘ €éS ©eÀý˜F`.-ö---¡Pˆ=„X!`‰DZZZâñ8)R9ÓéôÉÉI:¶Ûí;;;‡ƒo'“ÉX­VB, ¼aŠËEµZÅF‰Ù |LŠœ1•M¥Rô%|Ý€“gggü®Œ:ÈB¥qrrBF7ì,(L¢€;==ÝÚÚêééa>ÌÇlhh0 Ì-X 6Ñ ÓA»B a4wwwÝn·:ë­·p”:;;«V«Œ÷¸ÿF£×ë%Ñx ¬ÙlæN àŠ!%E¼NÉZg|Eµ½sçN±X”ŒeUÇ d2°d—Àkô˜ªÊè[ˆäöË/¿Ôç<«fuþªz¬jP)“’æ€?ÄCo¨çré… ç¬ê¸zõ²æ_ b ®·ú“Ô$ðÈ‚,Ñ=ê»K§ çø¡í¿P/Ô_œ°ˆ? Ôåfgg—–– W `…_Nƒ’'âaèw6›cgôÃd˜twwg2™ùùy}.—«P(´¶¶â´ÊÓ‚1Q2™Ìçó¹\Žla³Ù|åÊ |€£þþ~†Ì2‘f@vg·Û«Õj>Ÿ§K…®“H$°P¦e£écŽm±Xĺ2#D$j•H$hN€&Ìë·¿ý-|ÊÏ?ÿ›Xqò€oªîjµ2oÕ_ú¸h4úÞ{ïÍÏÏS¿P/³93™LÜ ´¤•±;‘=`zv`Ltív»Édúæ›o0>¢///‡Ãát:Çc±d¬já‰Â™q¹\08mÒ 0Úå»3™LcccÍÍÍàéì`\.W©Tb®ëõzT@ CôŽI~¨l+• S’PÍf3{2³Ù S‰†Û ¹\ŽÙ5*6¼(à†aÓ‹"/&nÑÑåï³°@²p»Ý¡Pˆ·žâ°x"=|ø_asÆV€§€Í1 ûŸÏG¹gKMRw»x<ÎÒËÐåððH=¶ÄÉ–H@¶×œùùùééi¾DÃ,4VU`Ì8M¨i?*>!•GÐo¦(^*„p¯ñ7Õle¤„ª¿Xw¢±UݦÏÛyü@(éâ£è!* ô/%[?1¾Xd¡.hªg¬˜"hp=–B6w|CšI‰ºœ €¯ j·²|g|(ŸÏ'ŽFâ§$$}îŽ&Qk@`zzzll àbnnneeellltt´££I'r”¨°•xrjµZ4EëÄè—cÜ(ÇÆÆ@ð9Ó©±M¡knnÆ0¨mc>ŸÇa»q^£ðÐòÿ––˜é±*ðìõzyÈYZ³ŽŽf2À(øïàrc±X)¦Ô‚ãÉw!‹ )°op^À`éÙ³gÓÓÓSSS@|Df:Vˆ{÷îE"¸ð¼€ËBˆ|¿À_L„r‘ 8ƒ4œL&“É$* ›Í¶²²ÂÑØi1&åƒ**&NápÔ…â‹V®··—ØÆÚȾXãñx¡PTNXFétZÜJ@„PžW*•ÅÅÅR©‹”h6ÚdÛx‰Ûl6$;tâ4´çÕjuuuõõë×ÅbÍ 8§ØlÐðÛÛÛ×××ñ5J$ KLJgË‚‹»ð2NolläCA1k]YYÄÅŠër¹ÖÖÖÙmlløý~_š››yîħ'Qª-]5CA‹0Æò"C“¼†1¾H£D  QÔIðzM{-ý´:[Õûԉݷ^I¦™LèÛëóz}*› ¡«ÿ½+é{£˜ã«ëÁ¿¨NÿÏóñ8Ï©I3¦× 4aÎêY©çY×¾ ¬PfS2U–ï^N•{å³Ï>£×“ò•‚ûуDS¹SÁp@ÆáqSY`ò´¶¶®®® oÇét¾~ýši½Hޤâ¼_‘ÏùÌ¢j6 à¤çóy8©"Ç…J‡²§§‡ |JfÈãÌõ™}öì†}<-¢þƒU#Èï÷³ âžÌôX˜`Ô\VeÇÃËdlÃçåQgœÃUâÊ£´ÂIŽ,Ë 3p†½µâÑLveˆîõàà€):Ø"L@Àù Sw.}º¬©?‹E^&ÝŒC¸m q†5ðÁÔ­€¨¥À÷¹=@Q¸Î4û˜¬x<î%ZoRhäív{>Ÿ‡D@û둊€ÁRC—ÀÖ„` &Il­8 sæ[ €–÷å„9Iør@=L˸±ÙCm*m¹\róv>_èðð0Ô2ÆiLhÜÃY:>>V9Hz|BãØ®Ì]Öj5Œ‘IPÀÿ€Àa²KY K˜;a–X1K ;99!;ŒˆºÜÝÝýùçŸ?|ø°µµu||\µ®¤þ" çü>|ˆû(~…LéEC. Çî¯Ífª2™L!Øä566Æ’9::Êt_ÆIizzšUœeÅ;Œ€2™Œ„ôa.‚õ)¾åØ©BºXƒöc³Ùx_„ܲ*p|˜šSm6ß‹Çã …B´áÁétÒä"{dõmmme' “¢ÙÝÝÍâAÅoooÇ"‚ÍÔX<9¦¦¦À¡ SÂswkk É¢\³$Ì=#ɦÜ]Ôô¥¥%–af*花¨¨á®¥¡Ðƒ51~“•ÏãñÀ¿ Á âi2™DiØÑÑát:ÙeÂã°ŸïÅ‹p]0@$’Áf³‘<Πj¯ÙlÆ5d:á°²ÀÓDZôÝÝ]*,ׄ¶RßNOO_¼xát:»ººÚÚÚPxmll¤ÓiÆ¿v»=ìíí!7Á]•ädÆ(˜£ÍÆÀƒ~||œ-—8šœžž.//_ºt‰6 á¯3ÀR“– Ù…D A;&¶öôô;—Ëõ‹_üâÕ«W@ Nëׯ3W'ð€…™AýÆÆ^åŒ8a¡±±r¾1`K¥RN§“DŽŕ-K<Ç>#ü$7¢\.G£QR©y”¶¶¶ˆ¡Æå . ïäóÁ%úçD"ÌøÚµk“ƃœÂ…N Öè×H•µú2µ~~ùå—ªîl~~þñãǪkžM¦Æ£iÏz·P^7¤™`"5¯ôšèÇ4}à †¦ñ'c@ãeT×|[µQi¯zÈOýu–÷ )²o¯ó¹¹9hέ0yÁ·~úô)ÁtŒRâ…“j±X–––, ݽ8| ÐK9 £™¤pC.$¨„_çù·X,¡Pˆy˲O‡›(Y¡P€º?Ê)ôJ?`ì Èãea„˜¦¦¦X,‰DXá’ɤÇãá‚Øl6ÚgÚpôq­­­ÑhtttôÙ³gÖÑÑÑááa¼Tù3 ÐJ¡P`#5??O‡ÇËåò³gÏž>}:55E*=£dïÈ€‡¹ =#~S^¯ôinnN|¶3™ {8š_—Ë•ÉdP–ËeñèRÁʸ¤"Tæ—K§Ó´Ì €\`ollÄb1:\ÎS®§Dk‰DHe`3ÊZÈqòù<sn•P(„ñ\kkk(º|ù2Ô À=æÆ(×€±’çúÀþþ~>ŸG¥Q.— †;99q:dvnooïíí¼³»» ¶‰DVWW§¦¦¨£«…‡mßE±Xôù|¨ÉØør###4ûÜ“¤UÇæÒ¦X­Öx<ÎUJ§ÓÉd’°<údq.— üÊï÷c%²¿¿ŽÊ.œO„T$Á£ìðð“ p¥ìþ)G´í@ül˜cɧãeRFGQýø¤¤°3VE—*É^ Œ‘±¥ ``U׿2ãÔÔLýô´®ã“&(á<\çûó.À÷52´º#rÍÉÉÔ`5‚÷i轫TýëÂ:ϳïÿ>—ßáááÌÌ Rƒééia,ðv<Æ€|ߠ爼Âá° ÓÓÓ´H6 ü¨ûöÛo>àC&¼ ‘žá™C' ¦ÔÞÞîõz“ɤ×ëÅfõ) )-QÑHä»ï¾ƒMÏžª Ñ")t¶ƒV éôôÚR&“ÙÜÜ‚ ì.//óî@Àëõ’±…å\ çááaH¹&“2žEÌú[~ «K0µÃq°hzzºV«qñ)¸QããñxÜn7ÒqÒ ¢Ñ(Í)›0¹‡1ì#‚=;*¬¬ÐŒÚÚÚà 08å²·¶¶rŘs{<žd2)2@›ÍV*•¤}á:ÇM5Ò6£ÑÈ*%ÃmÔ¼hÅwww³Ùìêê*x’ÈF-CSÂ6®Z­bApw¥RI§ÓKKK‘HÄáp`×›¯ø»ï¾[^^&´«“Éæç祲G"x d¤˜NOO3ñ9‹Ãá “ ƒÁ6œY 4­ÞÞÞÿøÇÜð2®Ëf³\äl6 …è{X!§Š‹uŸÍÍfc£ÀÀ©µµ•Ð'¼OÊå2›ÔÜr}f“”fеF•&ÓcŠC]ûçééiµé‰F*eH­czü\C·‘zEo*q]´\_õ‰j껟×å¿]õ<>’ù:Ï(MƒghʱÆU³–èi¦uk¼…7œçä¡W ¨ç©_Þ(¨G3xP³ƒˆR¬n¼:‡ÐÄj^+Ÿ~H NOLk•ÅCà<9,‚8’¯U¤K,;¢±y ´„-£fbt&ÞÔ±Xì­·Þ’$wúbú;Tf}}}€æÌˆ@I&“O;88†-Nç¾³³ ¼ ši+mfúÀ¯íííD:wvvâhÆîË̳³3ŽS*•7Á«Á¤ð9¸¢òñ£Ñèýû÷A¨K¥«—/_ʦa}}ÝçósMÈÒ!.ôøøØívcËA^,_¾|F@©Tzÿý÷F#<®‰‰‰ááa$„}}}çõë×èàòù¼Óé¼uëV*•J$P°:::<ÏÖÖ`ú“'Onß¾$ðöíÛ 9¯^½Â“çÎ;ãã㌚œNg2™ òz½X $L! Þ%‡ã "Ã\¯··§U¾ÜÎÎÎo¿ý–µ­X,Úl¶íííöööÍÍM̽ÙÀžžþþ÷¿÷ûýÀúÉdj)»Æããc°õµµ5£Ñøøñãëׯ'“IäZN§ÈÈn·ÿä'?|L¡Ç†ægËî“#•J9Žû÷ïÿíßþ-RvýÅÅE†=8ÂJÆ2çcµZûúúÎÎÎ.]ºT*•`ñB óù|l¤ØWÁN¾rå *Ëo¾ù†dVšzƒÁP.—/]º´´´400€e$¹8œ#Øæ&ç†lkk[\\Â2m C‘T*EU©TBÙƒ§àƒ>Èårx\ÎÎÎÞ¹sÇápÀ¯e‚ÈFUšäÒ;NpyÊÂÓ§O-¼ÿþûxkRXæçç'''ù«Xybr§™<}úôÚµkÒ7kŒDÅ\O-›ªŸÆET¿ªÎиûé'á°jœ§ŸLð\üüç?ÿb¢w1KC$=+ÓÿóœòÔÉD]£+õ•*™UHBr˜¢€2!ŠJ±xS yz÷71Ò‘u6›ʧïñ™!'OnØÌèÔP®Ò²á'ÃCÈ€”}:³8…ļ€ïÓØöööRÔ„ ŸdooÆ«W¯œNçþþ~oo/v7Ì!YH˜Bã· oÊétÆb16:ëëë.—‹åÖ©¼Q¥RÁçN¶Ì²ãv»Ýàæü„y€üëôô´¸ªŒ@Ê=ÜG1¿“o‡EK-ÈPâ[.—Àúúú»ï¾»¶¶Æ‹iEá×bÕ'~>ð‘˜yÒrõhÿ™ß¤R)ô" TŠÅ"†ál•à˜A8ŽD"ÜBløpº»»C¡[Oñ°ƒ¼½]±X„¢Ã"‘ˆßï_ZZeL…ƒ_débŽØކZ¬å³"0K"UUÒаØÃY]]õx<Ø#rKóbõ-)­¬¬ðÅ!>O§Ó˜Ç =|þüùää$,̾á¤Ói®žÕj¥Ñ±X,è–Nçòò2ê„P(ÄÓqÇãë@qÍý‰‡ ³ˆÅr’Y÷î݃ü"²S!¦û|>¹E¥,h6¥Jˆœí¼?½UÏ}“À›ïÅðÏûùyB‚7aÄò‡7¥«¾ÉDú‚´†e%«B]…³RÔbs¤aǪ#èºÓU”(*D:T¾,wð®ÕjÅ]<óL‡Ãá÷ûß~ûm!ïƒTª«‚ßï'‰°»»»««‹¶ñÒ¥K---LØH> ¸8ø¦GŠÛÚÚJÊ.¯d­Âš|ÚFCCCOOm;nKýýý­­­^¯—@M6±XÌn·û|¾ããc:¯ÖÖÖÞÞ^š/úJމ zooJÉUÎd2Éd/O1.fscµZ!§ªbÝB¡@a"[ üs4“Éôë_ÿš oU4]Ufþ>ä² x §6P;è4GGG÷öö¦§§E¦î÷ûøâà†²Ð25-•J©TŠ < ŒÞÞ^FÐâÉdb±v¹H±Ó%p¡Pƒ¡Pˆü%Ö-®d,c|‚‘~YÑh”r|ïÞ½áááx<ÎvÑ=ÌQöv¥R‰Ê_Àëõr'G£3ÙX IDATQDXÈq» ¸ždø444 —lkkÃǘH$ð@åâÞF?‚Œß=‹Ç㣣£Ÿ}öTZìÇ9ÕÑÑÑX,Æ\z? .--˜Q­VÁ…âñ¸ÓéÄSö›o¾Yâ®Ã£#H&ë¢ÅbY]]€- ^¯Í3;?Iï©V« òÕj5“É,,,pVCLç'årùîÝ»š´.&½jíR ‹è™ez,`€¡ÉÓ×(õ5‰™fæZ·®ªæHaé…¬+t]ŸÕóÇAI ¬g©ªŽIûUÕ@IŸçÌ¿ªÎ!›#‰pгcù+$3ùWÕyIv‹rpŽÆÏYêoܸA J(ºÿþÉɉÏçƒ8•Þ<¯^½â5¤oÚív'0hð"òFèÄÙqS5hNASÖÁFººº$¥¥¥Eâ”ayg2vÍØ"1‘¦Êçr9±*cj õb>)f0ó «²óÀÖ‰#1˜ÇŒó±Ûí TÄ9˜Íæ\.çóùšššr¹LÜï¾û®««k``àƒ>àá’ªT*ƒ!N÷õõ9Žÿþïÿ*•J˜LŒ'“I¿ß¿±±¦±q¯^½b›/é4Ÿ|òI6›½sç|GL)X‡GÙl¶?û³?CÜÑÑa·ÛqÚÚÚb-ç‹`Ôëh¡ßÁÁÍfK¥Rȶ¹æ|4Ö<æÈÏÎΈ|À8]#‘5ÚùX­Ö\.Ǧt>—Ë ’¶±±áóù&''¡$ ábmÃN1›Ínoo£RÌf³‰ÓÑÑõ, ÇÓÛÛ‹ßÔ¬D"ÑßßòY*•°Víëë#Ó;•J]ºtéððpssOÆjµŠ³ðÑîî.’iüþš››·¶¶xvvvÞ}÷]Å rñÚÛÛñ™çeEXC˜à×_ýÎ;ނ)Ý“'OnݺEkvv¶»»;88È„§›xæv„W÷ÑQE£Q¦GäôI)˜››»qãÆÃׯ_‡¢ŠWÿúÅ_üû¿ÿûƒ¾øâ !6üß°hnE9šüA­Úš°QÌ}ùå—*™•^“NF†O]¿˜5ŠKÕ 4&uug|´ÿÿó.ØÚ\¼s¹`T7tAã´Q†Òü¢zdèb¬ç*¾¤QâÑýìÙ3hú§J¦#Ð$ ƒ™L†)ŸLáРáöeµZa šMP2hÁ@NOOIcç©»0˜$3.¦ÜË$Ö6½¥Rt/ì{°/¼çHôu:$‹‰œÑ‹vUè6°/ç#$¥J¥Â2ƒ‚O·¶¶6âq|× ^,fvf @2Rµ3ó|d "˜ÇJðÙþó Š‹--¡ü\ØÎŽŽ¢Y]]• ˜3$¤gN§3‘HpYÞzë-ÀÀµµ5¾â@ @3’L&ƒ™B•G ÎwÊ1‘k¡UäžQó •q\.ùôÖ¥¥%R@€ª1–¬\­´€N˜ëÃGâ³Ãò‘ù3m;×cG¶ACCC¯_¿–Ø ö âf*>Û‘HDfÅ|L²+¬Vk(Rwä0…"‘ÈØØ¿ï¾ûŽ!D2™t¹\ò#‘ˆÍfC©388ˆ[%˜!›WÉ/a-DY ¥ v†×ëÅb¢¨1¿@FÜ¢ Øt‰}²ì\êÓ¸Iš5ìACÄWT¼Tõh"þëq1²tžÈ¹neþ# ¤ï¥4Õ5âÖLç56|uÝhõÃ=ÓTæïê&HÞ‹ê _„},(ÚwÕb2ý Z­.,,0Xöx<¤™³«u:øõssÃxƒçCÓJn;ôÖöôƒÀÖ¬x€°ƒèÈÄdžœ"*ugg§°_˜4ðí’[ ΰ¹¹ÙÞÞžJ¥²Ùìîî.&H9%‘IG«ˆÃ3ˆ|>O»*1vÀVF£‘‹ÓÜÜL,;æÞG;;;ƒÁ ´EüË‚Á`<÷z½Pú„TNÄÅââ",/(ƒŸ}öÏ'”§r¹,îX‡ãéÓ§ì „±CÖ ázƒŸ86"ñž™]3PI&“…B¡¥¥…¡6 ¹\nddÎ%sÂsxÇÖÖV8âsÓ‚±¹D7° …#¼[rV›Í‰ Å— ZŒ%$›Íé!ŽO­ÇÆÆ0žbáéííu¹\ÔMTÓV«õwÞá¾õx>¾wï^ssóÆÆø@CCÃýû÷½^/òãÆÆFŒµ?ýôÓŸþô§$„k~||l0S©™šÿ‡¶w‹mó¾ïÿEI”¨#ÏQ)‹ µª#œ…pÑÖÎ’ž‘-mt.R[¡vÅ y€Q@¾Òå ]êN7¹ÈE°CeKç n«Öa#G’E‹Eñ|&EI”ô»xýóÁÏC)‡öï C–y|Ÿãû•r5ÄiÎ,i¾··“¢ƒÁ@c‘ÍfAÚ`§ƒ¨ª…©Tª§§§V«¡ìF Úk¾(ƒ)Lô€Ù ‘ŽXz2™dɵ»Ñhx½^ŸÏ÷ÙgŸe2J¢¡ÇãiµZ¿ÿýïÇÆÆð ç<ŽcÛ)lhh¨¿¿ŸµóCùÀ}}}.— 9ö+Dyþ†g³¾¾n³Ù:::ÆÇÇŽŽúûû{{{©QŸ§õ¦ÿ?ŸF£Q¯×A âùâ˜ûÑ-3¤ùÑÆ) @ñ Fj À•ßï—A<é-•JõööºÝîB¡€ ¯.“ÉĹ´´ôöÛo3Y¾råÊÓ§Oñ‹_\¹rÅï÷Ÿžž‚Õˆ™H$x壣£D"155õÇ?þÑï÷_¿~¼Nç< BB ´G‹íÏ££#©ÖÉëìŸt<£ÑøÓŸþôÖ­[ìx¨j+• #x06°U,Ëþþ>وܖL&F£Ñ`qÊâŠН2ÜX,Fôd‹ƒŸíQ¡P`]„£7òœÅbi4333´2.— .p€Viàêõúï~÷;ôÛ\.sQ›ÍF?ŠL¬Ú¿2nr8^¯w{{»§§'›Í¡¸G™z6Åk ®F®ýð``ìÙÕÕ…ó„Çã«(¾·FWW—Çã9;;ëïï7 ^¯—ñéÉÉ ¶Û”V`jÉI¨¡Ð¦³…~öì™ð(4{ûí·óùü7îܹÃ.éŽüÇ$¯ÓMÒdïèèÀ2úƒ>˜žžœè7¨/%Êsõâ)266F BŽ¥ÌÕøÙÈ:Vó`ÞQò‡,qåÁúJý¼º\þWM?’$þÿõ|¾@ Po^zžàöy+ýéÕÕÓ¶ÝX¨Ú‡ªà¢ì÷ÅÞYL¾@'©z˜ë&j 2~饗666¦§§ñÈ%”]'<±dc”nFa¡ÝÒ1àÌÌ®¸ÙlââB=>šê~ww×f³!”f±XPõ!™!ëm³Ù¨^AXùô1œœŒŒŒ åM©Ëª– q|ä äëƒA&oÌX¨Ëå2rÊì0ªÕªÌs‰AÂ$§ÚeO ÿ L…V†ÓÁÝΘl@æbz₦žAGGÇðð0ˆL)z«”Û€MaeÔü¡{`;"" |Íþþ~FÛrxß••‡ÃñðáC1–5Yq$<®Ю®® J•«+™LNMM!¾& 91O:ÌŒˆÂSöhûDñMy ž Ï©©)`¸¬ú¹ivQ:r:Ïž=ƒ©ŽH×*S5.$«ÕÚh4ººº’É$5°-§7~ðàÁ+¯¼Â¡@–°Á¢–ÂÚf³mmmqXäÆdì“J¥&&&8ªlà«Õ*W VooïG}$«ÆG² ’›Z@ÌrÛªöï¬(D©WÙã*/ u‹ ÷¨WÇýÏç/³¦ý’ÁV õqïâõðŸ®zÞâ¡-îJã“×–®‚V5P-qúÕH–«yB5`Ðг%è«^*"V„MD5E¦·¿ÿ>{¹¹¹|>???ŸL&=zÄTÄ·x8÷öö^½z•}Âd‘Hä5TXì˜T°øµÙlÄ_ê}”ñ«b¾¨Vt5Àç£ÉÅb‘µ–”],Hóù<Õ=Y=9²l› ÃüǧAéÞf³1¤ÈHÐÙßß/•J[[[ä-0…HˆC—Å·€§0¤fÑ-.1œ/ ý›››âz„Ø#]ȃ ŒÙ‚Äb±ÍÍM–âƒÔl6ÒãC‡þ)ý+øÉ•J /[P¤–Dv”" ð£ÑˆÅ^OOPà\.Gc700€ÉÁ§Ÿ~º¾¾žH$õdÃÁŒ›+GŒ§-³X,\«l/X¬®®F"¾#¶?„u–€Ó‚Á Û톱dËf³Þ¡¼€ËljD"‘ø¿ÿû¿\.ÇÉ* ›››‹’¶··iM¨ôYòs Á{üøñoûÛf³F¡p>yò$ B²ÏçY ´Z-$¼`çpÖ, Qfý•Jåå—_fÅuzz ]°ÓúúºÀµ'''A#ŸÅ=èv»éÝ9ûˆ»Ð"³Þã$‘GÃáp QÞz½>333??Ïò# Š$;|šùùy$¹Vœ<Œ$«M2:‹UjBcŠ J÷«Êo¥Õ¶Sþó¬m× )ÖŽsl¢/àQÿ©pUu7 êö©)Qš M#£‡éWò¦I*šŠy›qÅ“§À—ÖÛ‹ª2„´Œ¤ä‰¼àÍ›7§§§ß~ûíP(DÍH¹wïžqo-7•8½0ì'4GONNž>}êóùpûÃþÀ¤Â03n4·åâøÉ@T'©Ü™’˜wËÄüè舼!êM¬Ѻ8<<Ĩ‡Å8 p©z½E ¦cÈ+áÜ€êc úÐ}©(YPG£ÑL&c·Û3™ŒËå"l )Ì`0$“Iÿµµµ@ àp8vvv œK ppÀŠb``†3­’ÛíF4[ ÀÇÇÇÏ?ÿ|(ºr劋{zz¦§§'''_{í5¬oŒe³Yäoe’Æ—%l¡ü*Ã: ÏHd.—‹E €WΈ×ëajÎc<ŸššªT*ãããÃÃÙL¦P(LLL Ûæ¸³³þ„ËåŠF£ ô¼^¯ÀØz{{:NÎ&kU> ÃÿüÏÿ¸Ýné2ÖQÈ#ˆ3sfæV¯×ÏÎÎ&&&þû¿ÿ¨+r­ƒõòöö6¨k25J­V»»»Ë>‰ÏÀ Îår±zôèå—_~øð!ËgLÇNÀ"¦&¢8‚Á@Â`d/W0]6L4Xi¨›ñ"È6À~`û R>Ð#Jד“Ê?>>Æ@˜¹9=°jµŠã} Y4jÈsb™Ïç'&&fggý~¿¸SÐÝØˆÐE¡)‹¸ßïGÕ™ S;Áb9¤öÅ}A^ÖëõR%!º°°€j݆˜¦aáÀE'2/+`ŽÔ•xS"øŠ@)V¤“É499) Ç#R¸ª,?P·ær9Ú&Ü,8qn·[˜%ª´”0™S ‰³÷ØëõÎÎÎÒ=€›B¯;—Ëÿ N§Õk®4Ìò %žžžÒ¸ð¾¸/à;55E_B3‡²ïÐÐÛí.‹ð <F¤¢nT,©ŠœNgWW_³Ùl‚8†“"â‚0:qæápœœ|úé§^ÙcƒAiFE?˜ãÉ}[o.iè/Ô[+++  Å&ö5`Âx<^¯×ý~?ð‡••à‹*aMUCRqíj°Òh:ˆÅ²Ímk1"lkx|Á?5ø%ÍIÛlÒõxѯìàv±ÓÐW“éE2˜É^@ÿ2ò¶ÏÒdÏûxšWæ²Ç3 ©ñuâ‰ÿþïÿ‰D¸LÕM÷žÏçC]€‘«¸V‰¶ho@A¢¬F¬‚Ï!!ƒ]z胡R©°d•ÏçEŸdƒ#…$#£o|ãÉd&”˜…ù|>Ò pf÷uÒ:11A‘N& *^ä?ÁËDX0û»"`àv»×××<@XTæuÀ+¬ÀŠ`´"G‰±µìXhPê2–i¯&„ DçáÇHh üÁœŠIs6íÀpé*€  6ŸàK* ‡ÃùOOOwvvX·²c ñY³X,¨¨ryð]’Éäôô4ksD‰ëº ¦&""sK$óX µZ-‹ÅòôéSj|.¾©¨­˜Ð×^úž®¿ÎŽA®ø2™M µz½@!‘kt õzªÝöy³0½ !Ud[åÍŠBäsUä„1"Cj®ÍŵÀ9¢!Jc&'™† ŸÏooo«Cdþ þâ¨O¹\e^iWWlÌgù¹^¯y3™Œ0QK¥5>U ŠÃáˆÇãPyÿ?eÝÎÎÁÁA†!Loa±ñ|Ä/Š8·ÛÍ^;_¼;::FGGÇÇLJ††@OOÏÆÆ†Éd"+ËŒf³ Ætqq‘¹?嬰¶îïï___çë¼âñ8éÍÍM¤ ÈËçóßÿþ÷É©4[! I`’áõz±•ÄÃ9EwnXŠ_„‰5ìQ¢W­VÏÎÎêX­V»Ýw7™LrBM&‚?år™Ÿ\€¯"‘1úï(mÄ1†$ð‰‰‰““ŸÏwpp099Išg°N˜­leïß¿½xt"‘˜œœä‡††‡Çãa¦´¿ÇÇÇxb3o¡³1›Íl&„ŽÇR¡¿¿Í ¥Qæ€êO“Ê—–% W¿Ùp5â Ä¢Ž%6™?¾|>F„òxÂ}³ÙL§Ó9aªáõz'&&’ɤÇãñz½XLÛívÔ;hm›Í&µÍD,;<¥¤"¾Ã!‡5È ”®Pyù,–«Õ*Sš—ËÕl6Ÿþy`ì Çѽ`æ»»» ÀC\?™± 1À™ºŒåï+râ0õ I;«Õ:444<< “ÐÎÎÎÝÝ]£ÑøÃþ)³˜è˜öôô0eÂú)è¯Ü´;;; ËßyçJ¥Â„êîÝ»³³³¸¤ýô§?ELE„§Ó‰BC8~ýõ×Y‡Ph‹q¿¾‰êg6›Ç㔽˜óð3gŒãNOOGGGY´Z­‘‘Ž|6›e–Ïçñù1™LìQP[©L&sppð‹_ü" â7‡…Dt›ÍÖßßo6›ñð`oD-ÌeÀÛ §ÓéŸÿüçW®\1™LÓÓÓÈÓ2fA¡–:ß‚ŽÊ::„fwûûû$†‘‘‘@ Ò¤5c@öÂwÙÝÝEè/VP8"pi™Íf¶ÍXÌÒñða†‡‡!L€Çc©€km»®´ýýý££#›ÍF{‡ÆW,Ø ™sâMD‹–L&SžJ¥X? ÄŒR¯ßï„úÆoœœœ,..ÊR]L^»vé¿,$( @_5Mãr½yóæÕ«W‰6ªÚ´lIÕ=L– šQ‡ü‘݃„, FŸH¨¾WÑ®KKKW¯^ýjn_‰¤˜Š}„Þ’AÓæœg–Ý–A­yÁ¶«|qnÐçÏóR½,°dª-ä8Q¼â¿ÀÒ€á^’^é6êr5wwwÞÀ9'‘HˆÜíÛ·I9P½‚^Çø å iÒ¡#Hߥµ†££#Qg£ÉÀàIÅãÇ©úF#Në4ìqétzbb‚ÉïÑÑQ.—cwªaÅÀÀWêL,B Œ•àF‘3D‚ãÃî´>ÈE¡ 3á n·›>88øàÁ–4¬To,)«™ðàÐÀ>0™L ø¡ÎhfЋ°@[BŒ˜Ðä‰Ñh”„‡=O__ßÓ§O‹Åb,sÅ4þW±XdKva__/Ã`0ˆJpLoø ¯L}ººº:;; ÁŠá$m[Y8±ƒa†Æþvccãððg“Éo R»f¡|Z:?Te$èñx„°-ÐÕ`0GÃ"¼”!{–J%ôÁ:::FFF8þ¼2ÌpÖÑV«•æ! t0äE¥‘¦“‘(¼im2™†‡‡YäðíØ¤!¾©‹uÍkªªê J–¾uë¢êú~åùçŸ÷ûý  À2 ®iii Õ~yÓ7np†…¨ŸM `i#ìv{?d}Ît¹\Y$Va0ÂZ­ô¢þþ~‡Ã±··799ÉÌk-·ÛýÖ[oÁؤ?<<„ \¡V«´ ª¯ H ¸²¢t$TgˆH/0R綤<§–‡bMaEž`×]¯×©Ýð|f²„*'Ÿy¤å01¦³!4›Íjµ*B°@§ö÷÷a´nnn2aVËð=›Íz<†lÇÇÇn·û7¿ù 7ü¬jµ‡ÑýçüvwwÙ‚!pL§Ó ¢†É› ‰9e¼×äääßýÝßáòN§?T‚‘Ãá¸téëb2ðv V«5Ž žùããã½½=p™“ÐXpÜhœNg¡P€¥e4÷ööÈ^ÿ÷?;;Kc!”PÍQÀ [z,Œ¬V+Ô66Oår9•Jùý~ƒÁP(PÆFÁRËÄÄ_öððhœ2.0Š8ö[[[SSS0œ¹®.]º„OÚggg¬ iI6°£é˜UÏpÀÁô¬ggg¬R˜Ýa¢ÝaÁÆ‚ñi†+‡>Î69r-dCØÔÀá éüøÇ?†³¿¿Ï½ N KÔ§¦¦^xá‘2äÒ/øGl]:”µè&Vq(ôò`Ʃݱ…2_eûj ŠÕÔÀ,Uš[[¢5j}zn‰t× IDATn²Þé~eÏg}æi«wÔö÷m=ðÚblÛ>Ws’?=–|®¡8ˆÑ[I­Ô’9P7ÛòUQ5 µoÑØíÛ·ªbÃhqÄ$P6R¹<}ú”[Îl6ÏÌÌ4›MQ†ñz½8/nll­±X,Á`Á+aïF0$…B-ŠÞÞ^Ð ÝÝÝ£££D"àBPb’Μ§3ßÀE¶³³“1:Á‹›_lDa2ÃW d«hêÙÇ õ,‘Hð.PÒÄì¹çž£ó4À!< o±3!¯Œ¿‘çTq;o½õV,㛆€+°DÖhÖÖÖ(Õy/v  x$C$>Å&ŠÖØINOO7›Í¹¹9¤Ÿž={&êÈ;ÓÔj5¨¬.·X[[£âÞÞÞ¶X, ²Ü47¬FX 3»'Â"A@Á™ÊÆemm-™LR£$“I4®Å¾‚£×××755õÞ{ï1ÃDôÔét6 hz¤ÃjµÊEÅA†üavv–ƒpéÒ%*z¯ûûûøÃ¶··…¡ ¦$¡@ÁbŸ•í5¥lJ¥B*»kX{Bäóð‚Ì”äÓF0#}üøñÇi/dá‡$—Ùl>88ÀPåˆ5ÂGÐ šÍ¦ø7h€6Òº NehÉþYÌ¢Y-È,”îV–TÚVÛ9‡QÉc(¥ÁjŠ•Ÿ\…ú2»á/¶öüsý9Ï;AÔ©ôhª ö$’„Ê¡&Uè\} ùC\¼“˜•ªYA¤ÙØŸ™™Y^^-åÿââ" ÈjµšN§{zz(îÐóù|Éd’B E0äÕ(™‰PìNå}¹‘ ÂAG °2 eɉYf6›EM —pµ¨¹˜2Q¯¹Ýnj4YÌöõõ‘T(E©Ý*• “+ê/xÔ€¦§LF6Žd#†b¤«Z­F4BµZõxú !n‘¼;ìJVŠøCCCâ;F d"„lºà^êõúÐÐÊ\ôé,Qvqï1Ka™Émè2óñ|>ç Ó!tR¢râ{zz€<¡P<Ñðð0Å&£ †iˆ‘1\â‰Ô¤„!Qü–€žJ¥Ž³ƒVRÏ‚äf:à˜ˆ>ÑZqϳû‘;S•(Æ)#X-^µZm~~žp¼ºº*bápr|+Š}v'h‘B挣Ç088V2nll ÅQ.—-#еGíjEÇÃg†KA2ðûýÕjfŒ¼]*•śЌm²ƒ+DÕÃÃC·Û}éÒ%´x …(à¶"vtrr211J•ƒãìòåË M¤Á¬dnF߉ôt6r 5Ì×H­V+—˱ƒaZ…T*~AL“xY¨3,ç€e‹N  õ—îînrÛÖÖ•¯Æƒ×R½^Gy3Wµ|$wªòÌï¾û.7;Ó6P ……T2càÚmž"3 µ¨×D0ÍD—žê¬‰ø_Õ§ íŽ¡-õúëï.€$i ªØ™Ê¦^]—«ã³?üP,Ü?Í>C]¯«X#Ó)Æ;š9š:ËS!OªG´ßï—éQ>¼(°^¹r…Í­JS\ZZúàƒ`H2sY188ˆC2TÖ}årù›ßüf³Ù¼uëV¡P`²?<ŠoQ–‰-\hXÖLŸªäóyžN×Bç„w ýÊÿþïÿZ, y@ÂÀo@¤R©D£Ñ™™™Ï>ûìÖ­[HRonnºÝn‡ÃñÃþèJûûûN§“©T&“!hÒþ;Îr¹<66†š! ÌîÎÎoMÝÜܼuëEîÐÐËåjµZOž<ÙÙÙA|°§§Þ o òu¬sssW¯^eòžN§Çðð0ðJÐVäcqž¹~ýº€MI¥HÚíïﳑF¸—Žá?øÁ7ŽŽŽ²Ù,[VâCxà[[[dq\`9AÝÝÝ###„l0šì 0MC+žuz'À @¹\.ô"«ÕêÁÁ`S“ÉD7\©T†Œ_x G\ÐþðÇC«GM€^“ÃáÀǰX,Úív0Öb…›*„J.u”néZ@IJ÷‚z» W .—kxx1`‘~òz½ûûûh¬¢µŒk½ÙlþÉO~rëÖ-ðl‹‹‹ÓÓÓ˜s0}êîîFo•8CÈËÒ0’|·nÝJ¥R÷îÝÓ`–4`$5H»dU àI k*¾H³å5aËIÝÝjÀ™ªáüüõw Ûyʨ^¯«“"µ9ÒOŠhÓô¼}[ Ù¤«[ Õè®-¸XE@©jG†Òº 'лmhÚJñ˜ŸŸÏår0ƒPÙœŸŸ9ÎX“[….\9Ú>W¯^¥Ös8,f‰ís£Ñ`² ᙊ P’v´L6úúúÊåòøø8…u(±Éápˆ å•&Fct9ˆíÀ<r||ìóùÒéôîî.RÏ SÜÒB@Ct“U!µ««kooopp¥ŠÎÎN¤ŠÿÜBå+£yÐôôU,]à6§R)!ñx|~~ÓJš Q©N&›†ùùyf5›››œA&0T‹„{FL *Fã[o½€"hP6›e–£ªV«•J%"ãÇ“Éä/ùË`0ˆ±(½E.—ß%Xd2¹¹¹É$ŠŠ7'Œð·`$ø_ÿõ_ƒƒƒÒ.//“T¤Óª×ësssår~>~Œ°`Ÿ0lÎd4‘zíëë#‘ ó ÒT˜m€deóÄÕÂåGáŸÉdÈ.¼#5è~(©LNN"ù ÇÇÇf³Ùjµò @ñ2>©´ãsÃsé1½Dô…5»œ€ye…Š<+³V'ˆmÊsº´X, …€ q•b‚€>’Šc¤yU‘HÝ tUÄqAºóô ôžÅç…J ¶ú`¥>ž ÇyÆ _¿c8¯od¨.ÓEYˆ…¾,åUÉnQ²U…’4þ êò7_Ôq%åjl$4 „ú^“§ÌÇÐcæ¼PjæšøàƒnÞ¼ÙÝݽ´´4==YàgŸ}†tÁààà /¼@Ü××*†«&D"‘˜˜˜€ ÌòM´óˆ¿rÃÈÊ9 +lZozƒPbÖŒ¨º`Ì766œN'¶ŒJ è!ÎÎÎPgcâŒ{Ã`0°¨„èÀê‚Å)ðAƒÁ0>>./ÍÂ`0ЋEjÒr¹ ]#‰F£N§ó?øÁ_ÿõ_ †D"ñÒK/ ¤Xcr{,..^¿~]æN¨ê#=‚˜Òää$ø*;«ÕšL&A.‘)€¨Áü@ІŒ…Jðh>ŸÏd2ápØf³ííí1øfÞM£“N§Ëå24è0´ÑÑzOjÏd2N§éríÇŸNôÇ?þñw¿û]{ìvûõëבˆ§RöûýtÑh”5†ÕjiÆðÂÇÐÐÅ/hf ‚˜ððùwwwGGGS©Ôáá¡ËåÊd2ÌÍèq™ªU*«Õ üA?ôˆ¼ †E‹}r©(#€\3Îbà “F[ ÀS0¬===T$€slàh”yYôE¸w¸ÈÙóAeß&*÷[[[‡³Qò ¤°¢Ø¬Š¹ Â\¡P"Ô•+W„IÀ-©F9 GA"§^DN£,§‰cun= HOù’X¯‰œX 둜__vû<Â^sâkf\Ìçþ’z_ø,½ò­>{Ÿg>ªÖÒëhÄ”(BÅ Š¡³8yår¹………÷ßÿûßÿþêê*Ë ‘SfI€F…ÛíN§ÓS¢NÁ¤Õb±p $zRïÓ7 —txxX(àŽ‹E2 U« Ñh …â…ÛÉétÒþ3h4"®p||̈€HÑÓÓC8LBF$bJlW®8 wvvnmm‰)_ÿEâ"°WkI±lëP\<;F– ‚!¡L+GuGÍøˆßƒAñê‹ÏÌÌ`«I¾$ÜCïAˆ·Þzkuu•'ʶ ãq8ªÚý"JàXT²Üf AdÙÀ‡—…>kww7¹ˆwáÛÜÜœ™™Þ(Ú¼8s<&K`F) h[= 5dQ’É$‚&?3ÈjµZÅb‘‘×éé)sBf†œ/РhÇuHòcO@‰#ØhÄäi ñˆÝ\Ì@¿hðáÈÍ|`³ÙœH$ø¨â ‡£ªb±¸½½}ùòå§OŸ¢"è"Þ.v°råˆÞÑy!A\†¤òÔp¡—Ån«¤×½ÐHv_,M¤®ÚÚy ÌGóšò€¯&‰¡‰›z¹¶JL_˜ÚÔ}¡‡n¥¶{SÀ5C$½lŸÆ:TøŠâá#ÏÂK’q™tmB¼b‡úXGGÇÚÚÚÔÔ…÷ä;w‰r@ s½‚Øc¾Dn ÁG^ª»hÖÁÁÿQ#Øg ô!TÓv)¸?”À§’ˆÓJ>ÇÇÇìô(ráÖ"*ÀmÉ„W¬â°ëËÈ€‹Ò¬R©<{öŒ ù1@B•:¬ÀÑ`rrxxHÅ“D"À•••|>Ï Èd2Ñõ¿÷Þ{÷ï߇ƈoaa’;Îc xôèçKRÎìn"]6›…VÍA[]]¥Ðf|¦€Ñ¢â`,#²••Tù@4ƒAÈHR‡B!Ö¿ÀÛ › Úív8høýþH$ü& ÕjµGñ^ !QÅ@‘—œÍ¢BÔ·h‚ m%ÌvêzZ¨H$ÒÓÓÞLäü0´Ùl¹\Ž©×ëõŠø¿ááa›ÍJQ¼b±ÈžæèèˆÎ¸ÙlãõÅ K;ü ù™ƒ‰ mOOO:ÆÎ„¦¾E‰úÀàæ"Þ·GM j7¸Ê®U£ªüCqÖ p@Äm^#‹­ÙȶTküôbGš¾@ðõñVû;˜ô•Eô¾FqÁŸWÑ«’g˯ž×Žè{¾dªkû²š×”Z@ŸíåBÝ.°§ [šÍæää$êuüž¢Ïï÷#ç"RÃ8 ƒ<#Z"ãôô´ÌaAs—J¥ÑÑQ„7ä¶g  >9™h’«ãžžìÌØÈ‰hÅüLÁÛùùŠG2 “Tç¨é€¨‚©¥Bdz†´ ÷?ò Däp8LË" ƒxÊ«= ­•á………÷Þ{ïÑ£G¸¿ñËx<Ž„*à.±¡Û^Ò6O‘ÄàP( g¶ˆäžW^y¥X,JËf³âbO”&6Mâ$÷$¾=¼¾( oll {ÎߢpGG†¾e2F­tPA3séN¨ÜEd© ý<{"‹ÅBÄçeÙIÈn‘àíímÐÀ%€E0ÄCtodd„Æ‚ ÖÐÐP¡PàðR=”Ëe’q£Ñ°Ùl؂ҰÒ(è±éëë£yåøîŒŒ ²•xކpøYY£he{P×|æÁÁÁǃA˜ T tœj» ×Z˜¶µöj;{àDó‚mCŸúR’34"K_uÜr4œ^8NU”Oõ¯ÿú¯£žó>®^Ôºm×£y.ŸOM[ºœZòŸÜ5_^/0¢'…ËÃ.8ú"¢§ßÀ 4z â>ªjˆ‘qÏSü±'X!BI”®@eᦀX¨ô ¡,ñaØRÒFPˆÉ^šP!€`!l8\нA¸‰th0`ù_À®P §Ói`©»»»â9A…ˆf±ãòåËà”˜ø3PZ\\Äñxnnnaaá—¿ü¥dÍx<.½E2™$+°0D—›z Xáýû÷Õ:QÔ#¤ñÇã©T Æ «l!!cÔÜjµÈ ¹\Ž’ ,û$!©ÌÌÌHƒ"T)¾{Ñ‘‘ÌxÁŽoíñx¦¦¦Ìf3ŽÇB4ëîîN&“ŠDe6™LnllåÖN2üŽL"‘èííÝÞÞFöÃçó¡{x||FÃÀ7¢\.S׋÷™ EGGGéctttŒËÇp:ä'’ø0SyPR`Ó„:ÒLÐæÙWc^fA|–ßÒÝ-í¯´¹lé­Vk__ÊIJáE`É j ŸÏ?zôˆŸ6ú‚àÑ™,I^—J_Mšº[3ˆóóó°Ú.{%©¨!ÜüÅsUiCUÜ“d£Fýb\¿mV‰½úè×ù%ÓÀ×`6È„Gó°óhÏš¶å¼¦]R_AΟÄŒ¤ ¸j¦oÁ„Ï¢Q&Q/,ì'&&€ñ‰Æ=’z½.Soñ*Á+ð8"H‡#ˆ-;Z1´ÉHZ‚Ÿ‘u\ßçð™6–ŒwÑè†7Ä>î#=>÷³¬ì€£•²Ù,â¯$ƒÁ€õ#‹Y1:::òx<âBÁoŒF#ì$§0íÂ:;‰0"‡,M«D#‹˜©‹ÇãA~ÃÊÊÊúúº¨pËR‡vŽ!žxM·ÎÀgii‰1 l,øÿ¶GŒe$ #Ÿ$ ›f÷ð×äò`ñNú1›Í26”—òù|bÒ‡7û|Øòœ}DJ¨¦‡††?~Œ ùíímx׬ˆ¨021‹g¸ÔÓÓÃÏ۲̑Åfùàà`oo¯¿¿bb‚ɤlY ô‰q,ÂàT Dj8í|5 ¼dMr9¦Óé¤È€€ Þ y ZÉ“““b±X«Õxßjµ 7RZè ƒd!¢­Ô+\¢Ð?¡ÓÓH[¥j±X\.„»ÝžJ¥XãÁÏçI¥PÕ + · u^‰Wv»}yyYtëà< 9Ž €ÚÂÊÊŠªÈ 2ÑTU"MŸ!¬æ¶ˆJ åK8ÕçÁ&ÕÐ/S³P£Ÿžý¥PIz$ÒÅ%ɪ]Uë£íãUñTý_™¼5ꃪ<ªा‚€¦@I©š…*¨IU+”wä½4²ˆ7nܸvíž<Õj5`z%`ÿL&YÁápüË¿ü˵k×XÃöôôx½^T% CµZµÙl‰D‚yîèè(Öƒ  ¤V‚pÔh4@OšL¦B¡ÀFr‚»ŒÐ,E.4xÎà'ö¢”ç šYNÀp6™L6›LÀ(MæQì*Ù%ðO`$⊷QoŸ';ÃÑÑQÀH¹\î›ßüæîî.nõ¼/xYƒÁðæ›o^¿~€ÛíüùÏþÆoX,ìl2çææ€‡Q’#ù †ÃĈ`0899‰½]&“Á#è{ßûÖÜ`xˆÝÒœ Ó”@ €@‹î¬H9Y,–wÞyçÖ­[xw£,„øösÉdÒ8¬ïl6‹!M=6:étšOrttäp8Z­ª>^¯÷ã?¦ FU(|>ßèè(kXÇÃ’œr¡\.þyúô©Íf«T*™L¦Ùl®¯¯ƒu:7nÜxã7˜,ßÁ.<ʇ«eooohh¨»»›…t…°Ã¿Ô:ü@ÍÁJ˜)ÿD‚ Q??¨#ï2É, l ¼±i bþyvvl $ÚSÀXK¥ÒÐÐÐÙÙY:†/Bm„r×?üÃ?|ðÁׯ_?>>~á…._¾|íÚµ`0xýúuàj¡PÉäú§"&(¸¿WÂCP%¦¡ŒtåÊ•ÅÅEÄ‹j ×àŽˆi*= L&€IM|“°&"¯"FwA–—'Êÿò!åu4¨¤/•ôÙšÊMÓ$=M¸oû46*ÿTó ¿‘ƒ®·Uypäë{pf"9»´´$‡I=[bùyóæÍ{÷îi> ü—“““©©)¨°Ÿ}öÙÑÑ"q0BS©µÕôô´Óé¼{÷îµkלN'HÊsÊUJf¦ÆôÎàA¶P1ñx<)¹QÑfR Ïèìì¬T*êdÉæ€¦oHî"|áÙývwwÛl6»ôìÜÛ”‚­DŽ.›ŒZ­m,ï [Šh¥RAØ€8¸<‘H† ôA{>99!_ÂGÕcvv€)S”žžž¿ýÛ¿Ûñ‚™2¾ÕjL=`ùF£~mm–kŸÑÝO©TbiY*•~ýë_ˆAs¹\ýýýdkCN§ÓéìììÄk¡³³Óétîìì¸Ýî?þñW®\A ŠÐ ‘–ÓDlÀŠˆH[Éd²Õjýú׿îîî~úô©Pd8ã\ ÜAj&‰­­-t2R©”X÷lll@´&Cóù±ëèèxíµ×(5~ûÛßRšP‚Ài7›Í,²ÙìÈÈH"‘@Ê›Ä)•‰™•Ÿ“3’ÉdNOO …B*•Bè› éøø8“ÉðI¨÷™•Á¶¤‹!s!d`X`p³i`žÉ‰D{zzZ«Õr¹C-šcÙÌ1 L$×®]{óÍ7‘:þçþç›7oÿìg?#"qÀïÞ½+‘íùçŸO½ÈJÖccc7n܈F£¯@¾Je¬ÒâÔÈï5I>)v¥f+e•ã¦BùÕZ¥ô¶­ïåõÏ#¸}ýåóyË=JEˆªÝ‹}Ù4@.ý³4rÜ8Zè—9mIäê H#« ‚Ï:tb§Î¤p¤ÝnÇ­LÀ”f³ynnŽ×ÄÄD4…ÜD„ ¡óo}ë[À-D ’ÈàÐÐÝ=¸*/‚z–ýýý•JyKQ$îûC¸· °}Râv-‹ôŒ­0…FU bOæ+ GWWW¡P ±NGOO ³ïÙ³g2Ïaë‹îdLÌúÒ™,™Á„°Ïsûöm:w† Gc±˜àeK$€°€®Œ³×ë½yóæêê*BÍüÀ,›eþûï¿õêÕt:=??ÏÀ—Nñþýû¿üå/Óé´öÀE'ë`ËÁÆ­lM@h v-,,¼û£µµ5læÀìºÝn”°Àk6›ˆòí˜z0…Ã+y:/B½BaÎŽoA‹Å‚ìS¹\öù|BÌæFãèè(rX ; =\ ÀDš3Ž5,iJv___"‘ØÞÞ~ñÅA6 ·Û½··ÒÔív3¢v"àpä9@M|`Ю6›Ï®o||œy` \‘Àb¥ c¦‹ Ç 0L7ÕoX¢@‡h WÚyDݶ°"ý@©ãBß̶û€åååóLϤݑð{Þf[Wý‚ŽAß\s5ü5ézÔê^•šÐknkFIdláʩϒ©Ž$ýKAWm²á°ÈGM×jV_^^žžžæ—2ûøãWVVd]I°Ç1ócêõzñXöûýðN¶¼yó&ÆÝÝÝ.— Ž4x (lÌj©d¹pVÐ&3pKJYÊЖ(O«A—Í4zU3)ñð¸gšÄÜ\¬D²˜TzŠA¦dbâFQ)¦(wl;{{{Áb’¢Hl6› ÖB«Õ¢¶µX,Fc÷V«`_b¾Q±Xt»ÝL~hGpEå2—xýõ×ÙdŒô2 6›íÛßþvOOÛíFmª“ú½P(Àà#5::Š®õ«¯¾Z.— …ÂóÏ?ïv»Åæ…iF§ƒƒƒ¯½öEqÿäää믿þ›ßüŠ8üw¿ûŽGGGŸ|òÉÈÈ]&œ,ÚDèÇÅb‘ÞÍ›7OOO÷ööƒKwÁÈ ƒ™L] ·Ûíõz Ëä®®®íííññq„¦¹öÈ÷X'uwwW*‹Ådz6F‚Ô˜ppí±G£—}Í3™ÎÎÎýý}ˆ{µZ šýÈÈý+˜¡GàåW«Õ°œ¢K ñÈ‹YÀTé@9»€]Hña0à:Pë †Á‚+úãF£¯±)VŒžÞ|óÍ;wî {q÷îÝoûÛl¤xŒÓé¤e!U#5þ›o¾9??ãÆ \}>üðCâ’ªç/¡O?ü`D¡ù/ñ`ЭW°án=?í QúÑDlÚ(i,ÎäŸ_M£mÊ:OÉî<ÉŠ9ª^¾[µ»S7$Â38A.â󰪘Ð[äÁ4V_Spš ???o·Û,¼#—ˆ×œ IDAT”FËh4ú|¾V«…è¶ìñx\4s°…I&“‰D"™LЇ°È Åb±D"qzzJcÁ ¹q Yn3¢9Ptt yì‡ÈíĶ™(vv†–½È@2›Í Ð úä§b±H«Â¡·‘‘¢XµZå[œÁ„ msdºÆœÂø¦Ïç£b·ÛËår¥Ra–Ýjµ({{{±;6›Í¡PÈl6çóy´¬9þX9ŠIg2™¬ÕjЯ(“©ÊkµZ<§>•âÑh4⤉D¨ÊÉ=MÊå2¢Íäo21gŸGÞÿHé‰D(kÄ…‡B5½=„ ¤dÉ) )¨ïù|~ccƒµ9ïµ½½+Ku¾þÉÉI*•2ápxhhˆàŽ×*…Ø|2óñz½dnŸÏGÖD/=×FããÇK¥R(r¹\d ¦aû\ÛtˆÑþÒžrâÈ Íf3›Í²ha¥ñäÉ–[Â3çÚcÄÕÎEÈ%mƒ … 0~r6ŽŽh7QuŒF£<èëëóûýï½÷­žßï‡ÝFÅ-§raaÁï÷¿ôÒKrå‹G4mÁ;w¼^/݃ÚU¨bÚë0ÍNXU R•õ4ª«zÞ˜FaHuÚ¹)ªû¹X\ï+õœ·sVµ¢Î{.Ë}”Ú_¾˜ú"¤AYÈèß]M¼¤SÙð,ð†àVe…põêÕk×®ñhxµ¤e‘—eõÄø˜e);+T1¤À—¦Á>Lp«ñxÜjµRÝ€B¡xg[ $‘Ò’Â|ÂTÄdÆÇòK^¹6e„nBÄã¸Çh¨(q tÄ”®2-ûì3¯×[,Ng__ßÎÎŽÍf£1 P:(ùéÿ ÑÑÓ@Ä;°× WAÖqaïììðKDÙ«ÑëÐVÂz£”¡Ïfa .o$²û'é§Y\Áð/‹Ïž=ëëëûä“Ohª&''Á"ïííÑF£Ñ[·nÅãq\¿^}õU.’+W® gÂÍÒÓÓsõêU¢öµk×XRf21Ô”¿ÏÂÈAJr±k[°«^›mÑÔæCÔ !ÙòÊ&U³÷åƒiÖ**çO5êi›ÊÔ|uê–¹ŠøT‘£jæÔ ̶••l¤iS(Í–——ɽªÐ·&te!0«ÀVŠ5Õv–ľ°° Œw …BÁ`paa-€}) Íf³Ùlöù|‘H$  |- Õz«Õ¢dFF‰Nœ‘óî¼(À`œ`4™É2HåÖb¹‡ l#ѨàíØŽ¢ªär¹ˆËh0°±ÎRšI Ÿ‡M Q@@ŠŒ’ÁΓKøü,¥¯A&kâ122‚~‚{—ùÁÁAú*»ÝÝÄ‹ôßùÎwp `¡êñx=zÔ××733ƒlN©T ‡Ã "¦1oÚl6Ãá0Ã襥%`²=*•J`óaó²…B@9ц‡%Ö¤üÍ·ãDð!™V©Ô¶x<ÎW _aÌ”•…ÙÙY¹l (0ÑFdÛh4‚Zf J¥6779ÌÊA!œe¬f_øàƒñ….³½½Í ÷êÕ«årÙáptuuq D"fô\‡()q9‰“ (2fA°á8ðf0 ù`0Àl6ƒAhð`pÙ<ãËÉ"îƒ@iƒ.„ës}}-&Xèl×ЃaJÉ2Œã¹±±AÆÎ‰îŸæ€ BûçÀÅŠÔŠ´ à§õÓµ–—‘ƒ„51 Ug$jxÑ8öèÇ6BÖаÕDÝ(¨!Tµ×,-ôMÃW¶ö¼X…›˜«:wª;Ñœâ‘úQ?///—Ëe5Cvè|ïîܹÈG#cË» ««q“¶KœJ0„{ø†Ïž=cö=>>N“D±ßßß¿··××׋ÅàO Ä +• ë1 Ž¿ø‹¿ ZgRÏ%¸|›™.—æ^à{á©í†„Çã¡$b@3 Õåra_!Æé€£ø´,¸f¸6h²i€Àp ß›íyâèèhww—M‰×ëÝÙÙ!|õÕW™2ìïïçÈP½!ìèõzÁøqJb ¢™”ÈâS¢ÄbÀ¬¢Ó§ªj³WÎ@ø¨"Û"ð'FÅš1>[X Ü_`úú®¶,¯¼òÊ×ïÚN£ôÉMpDšØªÚêqAÒ@›4“5XšE?¿QunõZxê £úª#‡Ì© DØDê 1„±5RÕ¢QÃ̽»»{jjŠêq:›Íöo|ƒà޾?0¶Ð (ÄȱŒÛíæö`n‹„²ø&’KÀt—Ëå\.ÇXœ Ž^xÍšŽªŒª1Q¹Ó¼åÙ7¢.„1:>·æVïêêÂ] !~ ü;LíÆ‘>'þÆ”–‰D‚0$R"±XŒÐÌ¡3ŠæA©TœššÂ1‘„äo Ø0l×°ëâP%8 P±fffÌf3;n3ìÒy÷©©©®®®_|ÑëõŠáh"‘àŒð0Žd½^÷ù|~¿ßáp úý~®y5.§ÙÙY´Wù¾BBï:[>Ÿ‡ {€TG‹À²*pU ¹JÁáõz½^o8~úô)D")% u=á• `ccãðð&?X^ ˜RŒ±Èår8ƒR0Ìa§%2À 3}>?¸\.9>ÐeØrqÖáÆ‡N—Ù;gB?ɘÎ,dT ı•ž‰ÛS¶8âÜ)°Iñòã×ÖÖPÁb™Á³677%@1TЄ ,"ޤ‰ê¢Tý/ýF–AeMUŒ(ƒ™¶D㋾ZbP[½%éyzšCv±ô‡Ð¸Õ%LÛ}‹:}Òý ÓˆX¨œo9Oò\˜«ŸûÿÁ§å(ËèŒoÇ+,,,pW3ý‡ÿÉÔ‚!,`|”«=Ä¢³L]|>±†QïÈÈ1‹ñE¥Rašþ0b×bSsÁ~@_ŒB[ð©TèJÒAA˜AÒ:€Aâæ$oÉ4th%‘ÒC$ŽæH¼J,ºq&€»ÀXŒm úbáÀXŸDÅ& ¡a:–Ün·W*T¦9A`ÈhCqle8ƒ¥(Q€‹ñ×µ63qòz,ã3ôõõÁ*'möð2¢>·ÛÍ‹H—àñx666€–ò}ô’º”2Ÿ¡à@Däž(•(Mm‘H„&23ð\\íðÒØÝÝ¥ @åûðð°ÑhLLLå"ÁàaÀ’‰’_ÔŸ˜Õ°›ÁჯCÜ—SÉgP<‹ Hƒš}¢”sʲ: ,E [d(#8dPUHè,é}±ß¼ƒèK€œ’ê8ˆë*¹Ó ¥Yb…€Ña/‹‡|(b¾Çj$%ˆHÆåÏÒÒ£f5 «ìbUCÀ?Ũ¹­j…<¾íD]Õ ÕÄI)põWƒûÿš’mA>zñ ½óœDyýþ༚~½~Þ>]=òú`I;.´•Ö¼‹ÆÅ[}#nH`K¢#¯&ߎœ±¼¼,×=Uq³R©MœN'š0à%hßs3üþ÷¿çÎçóÏž=YÈü„Ö¨%fë0†Hl D„2—Ë8D0ùää¤P(€_bmÈL9Æìˆ&w!ñõ€$Ò@0êaÌÂo¶DÐg£P­VQ!j ÌaµZ!!óÜf³É4ƒŽJ,À;ñõù­V+ a4O1Kaˆú'àÎÎÎ2Ëßcº+*GN\ ×?33sçÎ`0Hj…B©TŠ®îÁƒ¼N<Ïår¬IéöXÀ0Ó~¢´ŒƒƒƒðªÕ*™XŸÏwÏï÷Ó1ÌÏÏ#à1??/úbé,¾óRö4¢ÀçбñûýŒéÙ¯¢(ÇÅR©T¥RÙÝÝ¥u£!í‰n`0ôù|Œzº?ÿ²™±[__ëpYา`Mgþ=N“3ý y˜ƒ1DbìÆõ\IvT”Af³V —4çàà žnd#dWòùük¯½f±Xs¹O™ŸŸ¤ë’>¬ÙlF"G¥#"8C‚ÅÅE“ɤ>1‰ ·(“†@ŠzÙJ ÊHï詆¬ †1˜ù´í0Ô*ùƒ~->  å©@iˆ26› ÃTr¾˜===t`ÍfskkËh4¢är¹l6[¡PÀm›Œ‹_ÐÌÌLOOÏãÇ/_¾Üjµ’¥R©‘‘&™YCæïPX¬V+s’F£Q©Tó“F£‚èîÝ»\Z~¿ÿîÝ»+++è40ã¾wïÞ~ô#TUòù<‚Nù|Þf³ù|>x׬òù¼Ëå+•JTýô……B”³Á`p8{{{ocuÄõŸÍf©ÐOOOS©T €cX(À5±ª×ëÃÃÃÅb‘Ÿ¸X,’•)áÙIQOù_¯×)0ÛÝÝFÁÝA{‡¯Õj•A%pjþæ:„D ðá»ßý®ÉdÚßßÇöµ¿¿ÿÆü FèV«ukkKøÉüW"‘888`apíÚ5vŸ?þñ‘ã[@øÕ¯~%² ýýý~ø!º88}---±¨ÐƒˆX-ÀmÖ€‚4¶flp5NY`È>C#(§¾Îòò²ªÝ ne_•¤çìéÇGmÎs˜»@U?°RÿfЯW}R‡WêãU£UUJÝCè3¹Æ³[Ó[hTïܹÃKËét&“É®®.:У£#›Ír°90;lU@šâ&E-¥ŠÖ £(Ç‹/÷?I…;î^èµÌ…¨µéåa)3Gv8”ùÔql6471—¦~g ÔÞ5Üt+Âl`ì`µZ 7€O€À2°‚fe³Ù¸ÃEZ6$/> ##‘ ìîîÆËÏtÖâñ8)„¤ ˆÍD«ÕÂl‡B^€CPÿêõúÌÌ F{„Èår``Dt“üZ‘æ£P(P§?|ø0®­­1e¢KÃ(q¼ÃáÀ%Íãñ¸Ýnx¹¢`lŒ¼WVVdx½ºº …îܹS.—á N‰~”ïéé©ÃáÀo€A.ѹ¹9Ú‹Z­Æ´]d×ÖÖX±PÅÓÁ ą̂9*z\JŒ iF«ÕªÓéäT’x °ùgˆjµZÑŒbÊ€êôôôÒ¥KôXt¢™  Ðb(÷ÃN§ÓÌQÉm¬ß ßq ßå࣑'_œ…M$á^–ÑmõJ’ßØØ WÔ¢Œ(¸ñU/–¥¥¥ååe© Ñ[Èï5ÜfuÖ¯w ¾ äª8(_^° n»9OÕô댒.è€äˆ_ u¡f3ýžDN€&"Ë+«&-j—>@…g©Ñ\#¼zçÎõuôü8zL•Âå"£*,bx|(2™L£££Ð€FãØØØÑÑr `1űyK1¤e¶Ž“å(¬§ÓÉŠl†ÄPæ æ Œ­¤qttT¯×?áO?ëhšdg¸óyšôL&ÃЉÏÃŒv ’gƒƒƒôÀ“hMЪ£i :–¹P½^gWÌȘOœÝçó‘´Z­V©T"MKçE, Ã"Ä®AFÕjµp8ÌÀ Ì¥×ë¥ÁÆŠ1\‘QˆÂ¤YÌ!»h‡ÃÁ Ih\Àä~N.9õzýÒ¥Kœz±î`½EŽÍêžÕ i–pt¢™L&“ŸÜn7×ÀÀj+ÀdYz™Íæb±È…´¿¿*p2™äAŽ‘×p1‰šùùy ¨mˬ˜ˆm¸Édb¢ ݰ®×cf9ApPg×Ä´¶zÒš¥&™ i8¿úkÛ þ_Æ/xÌŸäÇ ‰¤úü£Ï{çUúÌÔÔ-Š yÕwÑ{9è5ªG[Ûm¶¼²&·iø¨óóóB»ÿ>í Ó`<´ÀÜHâ®S–Ì숳À-ìv;3 aPk£uA”'(»\.àÞìr¹Yh8³l$¶‹Ebz:f6 …üjp¨B} I+S©T˜Ñ1`NÀ>ƒïËk’ˆw¬ écŒC8„a…$#f1ÌaxëË@ÖLH0Éñrxxˆ C$™CŸF m>Ÿý “Ôøl p'>²V™FCà*{<|&&&¸Ó´M¤v®R¬X›Í&´~ÉbÌçó †±±1ºLzJXX“×ÙÐ °y“ÜÆ<"H¬SèpÜ åáb6›“É$wY__8Š)ôøt:‡} ÖˆQw±ˆf“Gb—CX8<<¡@d…Bšµ„&žpé•ü5ñ\kîÏÛ"´eA«ŸA}Ò[¾¤£ÚWæ1´åÝÉ:ᮃÆmE–d¡êiË/…B¡Žö˜Êñ^*þWˆ ¬%äÚ-—Ë7nÜ`®Š…o½^Ÿššbx Î’ A‡VÈ88øÝï~wéÒ%©¾ …Âááa<‰ßÙÙér¹H¢B¡ Ù“ÃLæ²ãa.‘ÉdPåSØöÎ 88c&{LIØÌî~ò“Ÿ¼ñƘÀ¯v8õWÕÝÝ ]Y¬ä[[[£K Ís„kµÚÚÚÚää¤Á`øä“O`KƒBýQ,‘µØÞÞv:lzÿò/ÿ¦¸²ÓÓS¶¨©SDƒycÚžÍf­V+Öß\ÆäKžÈˆä ¢ ŸZšiµZ­X,œ¥JüŠìÝþþ>䂹´‡‚š…GÂÕÈ×ìë룮/•JwïÞýîw¿Ë½@ñ Y§Ýºu+ ^¹rÅív‡B!Ù&Êúœx<þo|î2éÂ)ƒ»¾´´Ä‚ø@†¸yóæ|0==-K/ã¯:¸©â "ꬉl".§1Ðè É;ªXÝ%œ'ÁX^Ô(¾æŽá 3ÌÅŒ_´ ÕÒ›eëÓ)‰]/¯tAŽ ™@4z„4†ÂTУª0–wçâã¶Úíö ®oÂY&“õ c¬££#@ý,„!-×j5°=@0 ¾•J…dYA–oT @’ö÷÷$ɘ„á"òac­Õj™L¬[厎Žýý}¨d̈¤|Sà ˆäžjµÊ-™¸þ³>¯ÉWc#Í .öÎ"7 E' H(ir```Ÿ‚šÐS,‘ÓÀ­ªðÊÊÊáááææ&ÂMBïâu^~ùe6(ö¦@ÈÁÀ†£ÊÉÉI·ÛýÜsÏ¡Ÿ–—‘E­Vcpïõz- ;!ÎLÉ'&&b±Êt>D“ƒN(NS½ŽŒŒ°–Àý›~4‹aòC^a&N›L&Ùå²)•Jh”’>oß¾Nj©Tâ2Cƒ]ÁÞ ¸Q«ÕzñÅ©µ£Ñh À_ƒcµZE±2öδŒ0Òq’`G…6Ó›ÎÎν½= I\¬µ°ÊçÊ 8+(ìùÑAq: ñ€‡rRH¯×ëàè¸6xP×2d^YY1™Lóóóôˆl€™¢È+M¿Œ†200›ÍápøöíÛj÷Æ’€ac%&R³c*Á­­5=o­J8·ÕÓ¯ ¤-¸x4¤Ç|¶U·Ó<þMÖί4>jK¡nû®šFæ< 6ýAÑ¿šf-¤¶YJð¹*ÕN¼ôdW Z9/..rÎôš$Í«‘-p »sçQ—Dˆ6¨¥Ói¦Ÿ…BaH¡PØÙÙÉf³T¯Œk¡ÉG­V'ÓX”·šÍІ½4WÌññ17*÷*¬QY¢æ+M4Æ u0œÆ¬¨® ¡¯Ã„%N+™,U«UÑP‚ÚNï›ËåH`ƒƒƒ,“)®ÝêÎMžL&ÑÂU%’²n°ÞX˳×e¤©mpp0 ˆv»¹VncR3 ¯×ËΖïȃáîâNÑ××711AÕÌìrF"‘à­#‘,nÉm•Jœh4&‹å‹ÝnGé„R¹\N§ÓñxœSÉü 2Þää$HP>Ú‹PpAˆ4"n ^]]ššâu8Mü!'ù|>Ž!ÚX,F“ÊŠÁšÙl.•JÌyу™çPË÷÷÷‹E–ÔË|ýr¹Lý^*•0g†‘ƒ¸)—«@ 8˜6›Íjµâ ív»q4êëëc‰Ý×׺‰“…h.&i vôññ1âÄÂôfìÓl6eI)D„p8¬. $¬ëËå2ø‘H$rxx(Æ™,¢Y%ä4Á‡àÔ½.~®ú FæPy ê¤Z¥UégAzÓ7½O¥&%h†Wª„ÆÅ Fþü©~ _²½h[ÝkxËçÙ$tœorý…/®J¨Ê¶YMsý˪– j—#Â)~¿ßãñ ,Í/,‹ÁDE—fjjŠžˆIg*®¼ð•Ø—âyB¡Ä28GÇçF¸ÇÇÇ6› % ô-ˆàL‡`B`ØÂ ‚1Èáá!“‘Zêïï§C`U†Bð™y2àb=44”ÍfÂ)qÙ…úÄ`{"£À¬FbÊ‹Á···§¦¦‰D `KÉ€‹<ÄP‚sÕ0fìËegKìæ5IbfÀôƒ³‚'Ož˜L¦ééiN1Rà¯!YJÀ÷Ù9;Îl6KOÇÆ‚ K ¦@<ž…kƒ#¶¶¶ÆÚyssó;ßùTs²ýP ÀZº¥R‰Oâóù¯ kštÿ;ßù×'h(6ó±XÌçóÁ0H§Óh“ŽÁÓK pÐjµd&{¬:hpÙ 4K—.uwwˆAbµZ!?•J% NOOiGˆ¹˜‚÷¥u ƒáðÒDÒõ®¯¯¿øâ‹”©Tª^¯#› ä.¼ñx<>33áöz½Ø¢ Àƒ Ì„Ã.78Ý÷¾*š$3šð¥º¶hbÎö0jô»€‹ ù¥4ç…Í/ãñ 4~ zPñU"uÞÛk>1³¶¶Ô¾/ÙI]ðUÕ§¨šVê[ E"̧¢TÔšhB …H$Bd¨I8ÎårÙlx%ƒiâ `¤uXDSÍA\ PÅœ‹ÉèŽb±þ‡y ·(Fð¨Ið‚Élć q:h¨ã€!˜"ht4P4gQr·3L‡ýÄ4€÷ÎÎÎX,&$5VåHÓT«U4«‘¤¥Ð~öì3´áááz½¾¶¶æñx@µZ“g¤ñhæË@|BŽK™R©”ÍfEUýê“““ÑìN , IDATÑQ aÐôµZÍf³1'¡2ÝÜÜ\ZZW677‡l°NàUäEÇÃ&Ùn·3^£ˆF±#p>è‰ C(bõÚjµ˜ðpåù=)Öáp,//›L¦D"ÁÉÒÈd2áù‡‘<ŠD"ŒÂž>&¸óŽì¡}˜ð:¨¶¡¡/Ú™ÍÄ•ž˜Âð—ö{j̇¹±%8== ƒXzÆ@ Àˆœ¶ æ@år9‡Ã¾›ÑhÌår¡PˆEÐ;ݸN™ ««+™Lær9Ü܈Ȭ‹Ñû0ÕÎÎ8±x<^,™æ0Åbl‡¹l@Ðoll¤Ói^狚šx 耼2>>þ­o}«³³“ÑUm0Ë‘ä¢Bo#ŸÏC™¥óèÑ#¡šŸi\¼^/Gƒ?b–Iç$2à€Pé’“¼N$Á`pfffrr’MêF|aæ7 ¼©qøAJ]µ£Àœx-ÖïìŠ9Mìáh+¹© xxwl“ûûûiöc±X4}饗X{RQ’b™°Qæ…b8³¶¶†+âc“ÕÕU¢$`Gàóp 8Y¨@³¨àaPÒ+ôõõu¬¤ùîŒMø0\F£‘«ò×ëÅóK2Áwss—!·Ûív8£££^¯wdd„õ ó´ÉÉI„.Hù4R¬^`0àM°Ín·sB±/][[ƒÚ‚ÍQ9“É„ò Ù‚×ÄešÚŸLŠâ›2ƒ¹ 2ƒ°³øŽÐ1Õ䈡dG"¤Ñd°&šÁ&“ ã&Þj nÖZ°LÀã ‹ÿŽR¨…~U%ž„n†˜öââ"78š‰4 ÇQ²‘'RÞ}÷]•'+¡C  ›„UúSCeP)”´ °ªê#UQ¦ó¶¿z³¶ÄRþ¤Ä ˶Bª‰ó´Ÿô+u Dšæ@õTÐÛÍ[“ä:;;I“€ÓwvvÈ"@9«Õ*å6ß—¯ÀŠÒápÌÌÌ!ˆÔÅäé¹¹¹r¹,¿ßOXGÖmjjŠŽ¤··::Œ9¬]§Ó™J¥ØF0•â1„NlãÀÔ¢v “>æòåË©T [$A!„¢—j ÕjMMM±%’„ ! ÝnŸ››cuÁWfrB³ …X¢œÇã¡DH$SSSŒ1‰¶›››piò†‡‡aêÁ=ÈñšŒNGØñ¹É5 ”Ìr¹Œ?9%Žø Ò©ÀW:88ˆD"Ÿ~ú)å0*Óðu©?âñøÂÂÂêê*LJ¢I^2÷‡Ã EÐBzFµ-•J•J%F‹t ßËl6ûý~¿ßxxèt:/]ºD×…+Îðð0k^ŸÏ@¨§§Ççó]ºt‰ñ Í `D^c±˜ˆý!žAÁU$ìÝwßåà3r™˜˜H$L‡¸ü>úè#.Bº„ÁiH6—^zI$Ä)íi7y"ÊÁÁ5½Úbǧ…‘#z_tfœ_ L\|<€@àX>‘„OŸ„µŽ¸ÀrÓé4]K£Ñ€o2™¾ÿýïs6E˜r(¢Wî1;;+ƒ£û÷ï“Ø¨œ©T{ß/¨èÛ¨Õé¿J³Õ/œÕ'Š„³Œ˜.&0ëÑ¡çÁDõFgj÷sžÅ×L ç¡b¿P©í°L5B8ï‘0¿ÛÚJë3­¬’4”±[Шk€F¥Ð4•Œ†‘ào%™ÀãñŒy½^äÒ°äF£±XŒúއè Zö\¸ü033300„€ûêÆóÙ[ÌÍÍQG·Z­G±2…M*2§§§ÀÒ!é hU˜ÆP“ øÀŒ„¾ÔÓ¹&ö‡ßp£Ñˆ)ýA«Õ˜D;ÿY}™ø£žé=¸ÌÀ,!†AŽA<GŽ›2[¤˜Á59Îááa´Þh¡PNfƒzxx˜H$ÆØÞÞN&“tfÀI9øõz฼¼L¿E”w:°9V4:Ñh´R©‹ÅO?ý4“Ɉž9Ëp,ê*2`§ÊiÚØØ@Ã*›Í¦R©h4êõzAÞ ÐW*•¨ÐS©Ôþçâ ™™>qõR©Äê"‰„B!!ýÊÞùùù………ÝÝÝ—_~Y.Zè &Zår9‹áUY«ÕØ…à2-’A(uÓLÐÂ>~üxss3›ÍBrt¹\N§sddé=øáìYW@†–Fl ˆïV«• ±³³ÃIÚ)jt5hD æ ¡Èì‹þÄ6G¾T*ݾ}ÛápF–Ãý ê¡GËÏ=ÄCED0eñ FH6—b}ÁÄ©ãsW=³Šø@²¡Øs!?«ÚnmÑ¥zìåüüüÅõ{[·µ ¬qôYDU†Öø7ü´’Úê }™ÿE}èþýûƒœ§Ý!:ãzsI’ªò8ÊHªŸ3ÒFzßTUŽI}q¦(¼KGG:Kò0Þ 4ÖEX©¿¿¿¿¿iiéƒ>xõÿñöv±mÝ÷ý?%QEŠO")R´DZ¦MÁZ•¦j ÀÆÔeu–¹˜gm{›‡ÔÁ¨]bÐ…¯tYÁ—ºó/r7`ÐÅŠÞÏÁ„T¨ÃÖ´Eë")‘Ÿ)>Iþ_¼þþàÛsHZkÝù"P(ê<<çóý~>ï§‹©õØFBȱÛí[[[v»Ýétb6ÐÝ݇ņÈívúé§Ø­È0ª««‹÷ØØ˜Édúû¿ÿ{øàˆŸñæ¤ïîîO©V«(u!•ù6 «ÕŠP‹v˜¢ zL•g¼ÀÞ ; TÖ2=€É ÇIfMÄÑÐtuu~@ìa,žN§ &ÀhÄŽdŽCé$üùñãǬdN§“iddÀI²Édg62 €Äf³íïïsØÅomm¡ö×hÜœ¨Â,5QKÁÝ„S,Ùïcµ>ŒÃ_%.rpf°O§¶Cå´Z­‘HdzzšŽjŸ‰9Í š2*Èl;<› v´ýýýÈtIreÆï|ç;>Ÿo{{È­ÙlÆb1Ú_*5Ñ)l’ÈW¸yó&kô—.\û裸ß)—/_žŸŸ'ù½÷Þ%&ibˆDç–çÉÔ’œ /Ô€ÊÈââ¢Ô4Õ=I~«>¢:” 5ØFcˆÔÒËNõSÍèZVi~¥ñJú#•ÏdeÇ”+·ìuÀ3T5¹ü¬Nبó(A‰U¥¢žç«Ç®õ¯¨`©Ç‘Ù‚I¬’‘¶r±2;y½|.aGˆœ™%m`Úêê*6@µLŸ¤WKz<ñ ƒÓédøùª>ñèÐEãJÍ’ŒhÀ@6qŒz‹#7÷3*eŠ/“zx·2šeÂ"chÌph& `1D&®‹q0‹–8|Ȥ”¡âÊÊŠ(å–¤ÈÊìALŠ4reÍE| Ô›]3ÏàÆƳf÷­§½è ªˆÖ.¼ÒÍAru¦·Ç„¢å4Êç×f‰Ñn© øÊ©1è’Týˆf:¤‘‰ëÿV¿ÆÈóÕ¿m÷НtìP¯9ćÃaÉüãg./Ö€………;wžåŠ‹I•Ýs‰3>ë™ËÜã'L)·Ùl Š¢œœd”Ï Ç!ÔæÎ^ŒMCÆút’¦ÀƒTylŽd¦D¾ h38 Ý$·4!¦…BaggÇ`0Œ3O ±6<{ö yÓ©ªÝÝÝOŸ>…,/¬yŸÏ'í6{IôÌÕjýĉÛÛÛ Ó†— Õ £9±ËtI`?›zª|>„#h\4ä„K-f}…!ƚͪ†É EOOÏÖÖ øy>Ÿg|OZk?ß/kÒ³gϸ$ÄŠœEr†1kûÿøZ­¶²²ÂÔ‹•›÷/› <½–——)â"ø…BLih%¹Zð.M$,~‡Õ”8ØÃÃCŒ%˜Y1T$@­R©x<žd2éñxŠÅ"§¤zØÇ÷‚ð‚·˜L€«×*3+ÆSF£‘¯¡ûÌÌ ë(ç!‚Ç,--ݹsçÆøsQ³±™’0J¤ «Ó$¹åeQ—UkÖÒ˜HC”W—%Mª”u=P|¯R}ÚÏñwÛí–®?Ë y+Ç)ÁŒ;Ú=Ø~ÐôÇ?¿êÚ£2 ô±R¯e×/Wß.ª˜æô’ +KGØkOv‹2¨Åçé/(t8öz½PéYKÄ¥‡¢ µfggÇãñ§Ì=Æ}‹V¨Ùlîïï[­Öd2966†É+£|&Â…BA¨DÌÉ’”e€ÿB؇cƒƒ?Tw^NÜ !Ѳ‹Ej}(¢‡ÈårCCC˜ ø‘Íf©¶µð’‚âe¥P(X,FOк¨àªç%’ 2¿bME”‡½+ Ô^:¦mllÐ+pÊ®Ûí>yò$žÏ²Š Å£ëÚÛÛƒÑ/iK0²á°º˜L&F@‘HD ý;wøÖxðÆÌÌÌÊÊ ! ð„×Hׂ`^ò!ªÕêüüüòò²´Ò³Z,–S§N ¹Š‚Á Ë’˜ruY­VÇ‹ÅB¡Ô t:=::* Qnáþ¯¬¬„B!Ìä£À±”bpÄE²‚(ò+S©TÚßß皺M§ËÏøþ÷¿ÏÔ‘Ee{{Ú…þêÕ«^¯÷ܹscccp‡>øàƒz½N}¸uëu–ŸºqáÂþ—Àmª¹Íf#p[S…().\àÏäŸÀœ2²gÆ«‚©“““€”š2­‚£êÀI“Ö,ëitt3Ân:bì%ÄÖEáÀÀÀØØXµZE2ÍBQÊ)ÝœƒÁpçÎAtD¢ç˜NÎáp0ˆ±S©­­-ŸÏ‡=ƒ £\.—t ¬XlöéHTSUöõ\Àê4‰¥’¦AèÎb^ùUæo4—h'ñU'€8Çiç¥òò-£BÀæk¿P(`GÈÂ?00@ÍÊ *çD’yœ'Ãj%qˆçðg³Y­z½Î•?::úûßÿ> îììpr(¬À Ì”¸k¸ï¸ã4Ý€ÊÙçvSǹR‚)&²gÀäAµÿPŸðJœUEAÔVCæH𱇯¶YE:_YÕ*ª÷‡îPåç?Þ]µƒ‰)~vz{‰ãÌsÄE¤ZMóIdUhg°¡:^©<Ô–¾T¯ ½U”X‘©©)ÔBz}|4-—Ë›››hgpÑb&+_­Éd~@vOÃÁÄ ( ÏçóaéRj6›¹‡i#VWW9,»lÜ5ˆÅÁ7 Yÿ>PDÌË(ëTÒß  D{¡?¤”‘‘pf¶{ét¼Ò'^ùàhL&Óo¼šsµZ}ôèS,¦óD`Bˆ"­3ŸÏ'“ÉÝÝÝ–L†- O$/•J9øþ>ŸO,?Á?£Ñ(¦³Œ5Ö‘À¾• —H/[]l…ıРÆ\$ŠŒàYPeãœJæ ¹ÓéÄoT‹Årþüy¿ßÏüräÀÀ@0_kɆbUà8SSSˆ±)úœ7$ kkkX•ð4ì¹"‘H0ä:uêpK&' †½ŽÏçcU%f+Ãæ-. Ù°‹ .Oº»»é± CCLÀp—V¸»»Ws"`Óét>Ÿ‡4ñûßÿæ7wâÔÔ~3~¿_„ %> 1½-V©*_SÍX惃ði," ¢^F,ðÌÙ4I;ª?´”_NU×&)áÄk–U:×r”¤°kª®Ð[_™fÖÎKã5Œ’衤WRÿé Uíz=éJ}\ÏÁRGL‹‹‹PTÕ¿5›Í´~’B*}mšJíÒt|_|ñ˜´u‹‹‹ëëë—.]êë뛜œ$Q—Ù=¦ £òù<í'«f³Ù¼zõj$A!Õl6™/™ÍfŸÏ÷ôéS|uòùüÐÐ^ЄÛPè“ÉäÐз¨Ífcw Nd@ÍzN§!RpÈ`–BûÏ®ó}6n@Ùð/Ô€EÓ‘€bÑP6Ñè 9²$ ¡“·Š²jŠ)ÞàðRP½±íÅÈA¬u€+iH’@L°»»›J¥‚Á ¶‡¡§§çÁƒ@¬bÀÀkÁôZjåæ›ßü&œ(·Ûúšj;44Äê’J¥8¥¸ƒ0*„lŠ„øW"øDÞ´ ncã -u{{›Ö§P(ÌÏÏ¿ùæ›.?99¹½½ÏçOŸ>Í„0s(2;ùNûúú¶¶¶p4‚hpúôi)éP±94+€ÏÍf“™$èDaúN®=:¿\.·µµ%\ÉÍâyFV«% NæHÂÀâ—mZÎa>ŸßÝÝEgEt:\~³=z´°°=ôÂ… ÿò/ÿ²¾¾fggS©ÔÒÒÒäää‡~ø½ï}Ì-Aœ÷)ÛÍ/¿ü’¢!5„a£$©2‘VkÎ_|¡2Aùsa£jàrpþ«’VU*ªL~4Äý–C'µ ©E•ç«áÄ*­_ý2KWߪf”ô†²=3Wô«ƒ9)Óàòýi°ÍÙØÏÿÆ IDATçA 5Xä@¸Ær:¢`h¨Š5ê 9³r¢¯^½Š«ÃJ^÷òåË6›íóÏ?ÿý÷ãñx 0<™ã3¯$ýÑ£GˆÔ ·\¹rÅjµ¢_e&ˬó8—Ë!9ÜŸôˆ+• ÆÔ&¶ðĨx Ê^»ïå?æìêØö'Ôþ–—¦z²§`¢@±f°³»»k±XklooC“‡éÄ DŠ;£¤îîn°\ª-ÛC"ÃP ©ÃäˆÔšUÁl6¯®®ÆãñÅÅÅ?üÇEiº066ÆJÀ¾þÀÀb‹þþ~Â!†‡‡#‘ˆÙl¦Q ¼Œ*iµZ‰“7VVWš V;t(ø²˜Ÿ¬®®NNN&“IN2H’Íf˾¾¾¡¡!:ÉåA‹Y(ÀùéV¹èäxÃüÉúú:—ÊÐÐP­VÛßß뭷غºº>øàƒ .J¥rùòå+W®Äãq³Ù¼¾¾ÎbÀõʈ&ޓɾP: î}ǚȪ Îýß|óM:x 4ਦT´RàIÙ}kä¹Ì $Àª”8«.9‚hJ!ÒÔIê’š)­(}ÁTK«,]¢2ÖTæ?UÇÐÔ>eê84$™ZeÀµ¤[©}P»‘œúÆô¤#ý¡4G‚œho…Ê&4•ê r (%Â>yíÂÂÂÝ»w!Ãà…ÉðWÈ6£££DÁÀÖ]__§µ?::‚—‰ÑÓä¾¾>€eniÀÔ===6› Öw–(40šØŠÕ+qrX4c®N f'È_1°â“Öëu@i{üø*Àò™L&s¹ÜÄÄXn ßúÖ·Èvçh(Àéf€R ÿàÍnwuu•–ßçó‘¦ÙÕÕ… M G‘+óW‹¥^¯ãZÁ‘Y®\.×ÚÚš×ëÅC‚Ñ ÿHeàc†B!0µ(¾½½½ëëëÂg%ðC€"bMYïaôö÷÷CO³À¡`XZZâò—b'2Š`Çĉ)S4=þ<37V\©`åBü½ÿ>W#æK›››çÏŸgy¨T*¬¬‰D¡ƒÏçÛØØÀsExkÆ€ä Ô‡Ïá•L&“AÄÀÛ`òÉwÄ[bLÄl\îL&(©PoC`!‰P”Š! €";PK‡ " !Ì1îÜ–ÌTpª%a²Ý]\êËN¢¦F°¥¯„ú?T)°í(ªê#¯“®z"T‡7Ô2‘®¥‹a; =§X= EšÓª7HM×¼®PÜd")Ôi=½U¥´ŠhCý_u(ë O@Âæ÷û¡c²ëglË‚š‰vµZeþ+*A:ttCp‡àð8†Æp«J¥’ìø¨Ö¼´G3¯`ËÏFÛl6“<ŠˆÒ•¸.Ȱ’˜®°9E¬À¶‘‘4;w<ã‰Ê5丄Á™L&@øF£†:+ñŠEÑÀÉ“'éŸf0€²ÛíDE–Ëe†N•Jegg‡'àxÁÏ™LæôéÓ,º¬©XÕ‚Ö æb!)—Ë…BÁn·“͆ #†U–¥‚ŠÌKô ;‰ð$†LÕs j¡ fˆEèôÀÀÀÊÊŠ¸DhÖù-B :6rœH¾CcÇ)ÄB†¦ ø¹jÅ΃kËxdd–I!du°½€ÖL[ í ³P¢¥òä‰À¼äŽÈ¥þðáC\Op ¡|Ë&Lêudš-£JE{ÄÚ,û9yápXgJ9°Æ=ºeÝãµ:³êõµ[¯‰;þÞºƒH@³À¨Ç= Ãÿjèð´W T¿ÝÓÚõE-WQõ¯4´b •KGHÐ"‰’‰ÆSWU±É…ÂÒåóùÖÖÖB¡»KÇÃÝŽE;5ªÄGã…‰(4•JDonn¾ýöÛ‰DâÌ™3n·¬íCnZü'hù™A1vWÀê€ "# ˜Ôëõz½Ž~: ¥ŸÄ7ŒNId ƒ¼Cæþ/^¼`Ãï?§Ó¹µµ…è¡»»;‘H@Ï2.vñðŽòùü©S§`vÒf 3ØA{ÌrH²Q£8N“‘Gaóç|‚ÖÖj5á›òc¦F$k²¼A«D"e Hà+€&DR‰Y6½ÅØXE” BbÅõù|œŠ-K#²ŒD"Db´,Õ¬s¹\nuu•~‚#'‹ A]‡ø l ØÁ’’Çñè>qâC<ä,ââ. vBÛ“—¥‚ž²Ùl QŠUÕqnnnyy™{AÖQÙ™±ÿSwrôª0Vê¯ÚR¨ú¤v]ŸèõðÊêסÊk¸O-û†ã+:8“¶\þH½§ Ój³î“uM–ÍÊ¡*Ô[¶ríâÛØ¿i¨ÑKŒU,˜ ¼‹Å²°°™j”¤……H¼hKÂV’•ËZ¼S©ø$îÿ £4¦@P$8Åb±Ü»wý~$Á”ŸaB4e²Œÿ%[iAGA°™°3YC j†’ÄvaHp„¦.÷õõ1 Éf³ÑÌ‹ÙÉ"ÊÅu‡7ÀÔžåJ,üà¹Ãt‚" )b7R¦±w…è™J¥¢Ñh("¹ltt´P(@´7›Í;;;;;;‡‡‡„+à·AÏ”Éd !¥R)Ò¬Ûl6xM¼=·Û½±±Q©Têõ:²g rªÛ|9,”Yr• …‚„J^æ3“_TM¦=X·.,,à±ÈB÷Uy&“áJ-E<•JÁY’fWF1T[¿ß?==el*•Z]]ÅbdccãÙ³g¥Riff†\8©¬^˜—Øívì»766Àä”Õj5ŒoaåÂU…!&ïtxpÛhShvèÑ=0ÛD²@7ƒøƒ”¶&0i³h…®®®öööròñÙ®±v–Ëåååeñ¸ÕA®4ooïöíÛ@@²äA¨"ü!#¦®šd4ƒ.LoÚrÿÚ’T©YÄÝY !å·¤‰è+MU_'+Ioê$€†ÆJ4òR;O(qÜò¨2Çá¿ÈÍÄüNóÀßAœäUDgñlG|µ¼Â(téÒ¥½½½÷ßß`0ܼyÓ`0ÌÎÎz<žÙÙY^B<øÎž=KX ¤lù/¿üòý÷߇ÃÇn·ß¼ysvvöÂ… @8…±o%í–: ×…hô Üÿ“““PB1±ae2™&&&À]Q–QÇqÁ!p80‹=KÖ&‚1ܦ"ƒBÓpçã·A…A»rðaÀX†0Rú|ÑE㌄ƒÅ¢moo/ü"臇‡á/2çyðàÁ™3g\äóy¸˜>Ÿå¥™¡l"œ¥’É$ŸÔb±€œïììPß‘k€º“zÄŒZ Q‡%–¢T*!€B‡óR¥RÁSzoo7O…"=©P(üøÇ?¾tédSÈc¼LñHc%p¸««Ëáp ¥Ói0U<©˜k±Å¶X,xÏñÕ›ÍfØ´,¨@ Ùl®­­ ½5›Í’ùj6›Ñó1‰HcïÏåW.—³Ùì©S§Ø¹ÌÒé4¸:¡øÈÈ­À4ÇÈÙv€áÃJÂRtšë³V«! ççÞÞ^žýèG±X Q$½Q @…óío{llLɬj˜Z~òÉ'Ÿþ9¤Aˆ'Øát ÷äððÕôÖ­[³³³7oÞ£¾té¸=¤Dj‚hr‘ªZa„Ò¢¢ÐR”¤’èÍC¬V™H*­HJ¹ž £9¬Z¬4t#S?ßV«®|þSÜ:ψ4+­Æ4»¥3¸&‘Mã’¤>vFÌ¢rŠÕh•ÛÛÁ®6K¨ïD¶f¸Z....//«mŠ4.—kuuUBF£ÑÛ·o‹e 9‚<Ù`”rª's‚_àfô÷÷ã ÍF,‘H ç’–‚mÝÇÑSÙé¶¶¶è`‹"¦Ä÷¾ü'½?]>9BN¥<1"§Í§"ár8±XLµégC-6XA`ÐÓŽ`)W*‡ÃQ,¡6 …4eûûûð€ñ³›˜˜’I¹\F¾ ;khRž83©TJBN:5<¿³³311Á‹†ÃaI²³ÙlLk777Y‡HñãÕTÜ 5†z¢Hà”Ñ“Üéê®úlsñ¨‘ªæ@ uлݵKGè0nÑ #ÔÀ8ýAäùj[ÐyÕ烶Ó1ü©^IÇÇ=:;Ùi ‡v3»vlƒ.7´¥$»¥§SËï² Z£ë²Î'°Y&—µj¡*)°e€û0 2†¸1%¬ßPæü ,{7n!(ƒxEÛÌ’ ó¶kµšL®èôáÏPÐÁ´á§Ó=0ÞaËo¡$w£0 À”Ÿ­({säÕa¡0D"$™ÑA>ŸF Cvµ@¯§N*‹À§BÃê Ša³Á ¥àøà4^¯—O744b2™ÒéôÈȨ;ôSº)íñ}«ÕjÉdrccÃívÆ••ƒÁ0== 0±.Íôô4Ã7†„ŒzÜn÷õëךãÈ$Ö§¬ßÀ¡@¬sÌ „³ ”®~—ËÅâÄõ#îxÅbTÕ;Ã1†û€À\„333¹\‚¬‡R©äõz‰¤eÂ644„ðÒ ûã˜$AJæøXÄ#|¨ ì;EàÖÅ´J°åéééL&#Ü$ =î,LQ2³½#à _2MäÕüùqÃ-eÏzßåõ§·³¥Çèq$Æí*˜~¦Ô®V¿Œ¡ó¬JÍXÖ„BËä®eÑ7üaXìÜ5 l»˜lMô´,³_<gI ‚˜nƒ©:“2§b¯G‘•TÈK´ ¢.Z@§†Ïõšé0ÔUÊÄ(žŒÄX >ì çªV«^¯Wfâbú]¯×ù_ü‹^¼xÞb¹Ó(Å ·[­V¯×Ëì…B™H$ˆºÄªèäÉ“Åb‘ÖÄçóŒŒ ‘L‡®êäÉ“Èqív;lW¯×‹7vL{{{ø>Ñ ¸\.º>2B%Íf3F¡Ìdp !kÊÚÚ)Ы««sss|;Õj¼'ÀUåã0vçJ€ vâóù‡Ãá•ñûýDñ«àÈŒÅïÞ½ËgÇ“œöèèèhppÐårqLö ,¸o±áuIÅ`ªöðáCè 8f€ôééi¡–õ÷÷ß»woee^œfÃá/tww=Bf'(4h¶ù|žVé þ]ìv¹\.öø{{{v»Ýï÷ÛívB‡¸_X6VWW‘ ʈ g KDì<ŸÀΕ•ê5ÏB@Ã\­V%ÆGjµ P4V©rk~ex™åÙ.(M3cPëžDãã©Ö%•Ò¢_3¤Êiê˜úƒ¾Wh¥üڔϚŸl‰Yóa˜èU‚"MTÅLôD(kµ¤gÈtOB{d$ÇxÇãñ¨þ}âxÅ/$ EDKétzllìÊ•+ÿøÿ×–F„÷o±Xð£â@´Eñ‹\ƒÏyƒgEÞ]³rAô„Ê R¹Ä˜Öd2e2Tl4LœIõýçóyÇ3::úío›²N‰ÿè£>üðÃgÏžÑf•Ëå?þø§?ýiWW0C­VÛÙÙ Œq¾þúk¯×[©Tyfžc2™Ö××Åw/ e2”á===ù|~Å8}ÉÓ§O«Õj2™DæFc±¶¶ÆldˆjµÊÀ½§§Çív?~üøàà ‹ÕëuÇÓ××çõz³Ù,l4Üôˆ©ùíoK3§‚o„Å=ðsàÎ*c:”á•J…=CÙlÖív“YĨÊï÷»ÝîH$²»»ëp8”n ÆíƒhCggg)¸—/_FE866ÖÝÝ=99©ì¼÷Þ{±XLÈâ"l–Ä-êŤ¯¯=‰ÉÉI@ <’i^W#ÚRôÆê¬_-2R»Tx@-§ª@XV&™€µ´–è¨ö¡|Ö›¡vÐB«bqΗ<_³`¨Ð´êÌʹP—Ì’ÕùÕ¯~…†CD1¡ÆC¾ÈŸýìgüJ]u–––.\¸ðñÇ òÃÛà¯^½ŠÞÒ`0à“!HC,c?== »Ãb±üìg?›íîîFàêñx1&f£788H£÷g,ÃÈétîïï3ÙÀÃR&ÄS6¶LÞ½KO@W !­îF@TC1m‡ ¨´RÈðÞ@€ Dm2Ÿ±è`ñà™T’«Es€×&{Ï¿þë¿~ñâ…Çã‘”·/^lll`Í´¶¶V*•¶··ñv& b```cc]¯ -UTʨYË”-Ö²X§1U­Õjëëëøÿär9À–½|>oµZ; .0;þê¯þŠ LæTÌ—̨V«>c$‡G?,)&ãp:¡';ãMT(ˆ¶g¾_,™DÃhÄ7Éjµâ­¦o­VËd2”ðP•Jess“uñðð°P(…‰~›÷ =A.—ãñÃÃÃD"‘N§ãñ8ÑlÛÛÛˆ~A/ŒF#ú2f8¯Éö–9øüü<|âH$R.—×ÖÖÀ]Áêé Ø2s>ÃáðÔÔT­V#$D ®L(R´‡½P­€Û¬Ê2è®8ŒA$HG.c!€ÛËåè Ã°Ûí èɘ !¤¯×ë¹\®P(Àµs8Ìî@bà‹Åk×®!¼@„Ñl6÷öö@æ'&&ä$¬®®:$ú ®y-Ÿa“ƒsŸŠ²HÒø€œO©E2J’rÄ÷¥¹¯õ“MyÑ"•û®)Gúé:××qÑKk~%pwga–¾bSlÑýG€ Ç\-ø’äüR²55—“¢ÇúåAÍ`®å9R+5•A…ïõaܪɢ¬4ËËˬU*ÂA}çA¡9É\‹—ã^‚A¡b\ˆ” fÄ«««ä±PÔ666r¹\*•b£Ê4od2 R©r¹üðáCÀ†|>O„Õjõù|lÒ©æì°‹Ó㳕fSÙ\ŒNeÙ c`H"aŸˆ×+Áw‚ÎíOd_,Eä. –ÜäLœ(£œ47 èíí%É™}ƒÑh¤Šß*¾Ö@ÜìXapñV1œØÙÙ!Ÿ²Ùl& –%,á臨bCCC¸®ò‰Äú‚X=Ÿ—q°IôÀµZÍëõR¶r¹ÜçŸN²Ûíáp˜µZ¾­ ”B¹±¹f ùonnÂS‚ü†H磿M¥RÔ>,ù,Ë7¿ùÍxÎçó‘NÊŠÃ"šãù:‹Åà1s®æææjµöbg-ñœkkkF£Wy€ø ±‚ÒÒY …B¡‚o–ñooßd2±ÜâBˆÏ.ï°n˜T¼ñÀ‡w¼Ïƒ´/,Tv¤£dbsÇ©@®Ôá¤.¼ü'e„Z¡lÙª¸®la=i HË1FKŽP;@X_5hyKì};kŠ;PiõþI C;n¬Z¬;Ä™j†EÊ©ž8¬‘¨*AYÏ5ÇWÏ#דœDy\ViØï«Wlå–––PÛÛívù[‹Ö¹ÈHï‡Ùr3Hz3‘,bOÆ„m-™Æ~¿eeÅf³‘ñ a÷///³ Ð#£†³¾¾Î Ú%A ˜`ãbMÐ16–TIð^“É0URqÐf i`~Â?Y?D7$aP!Á* Ë—ËeÌ6‚’Ó² aGJ?}ú´Á`ØÞÞ><GCAuôÁu©Ô&Š:6‘Æ‚ŒT\Pk‘`wt×»»»KKKW®\Á‚`œè¹2°˜f÷q¢Ùl&“I¿ßü Ùáp0¦€¢ãóù¾ú꫉‰ V‹þþ~¤@%™“dF=”i*Ëðð0L° J˜dOR»ù¯ÛQ·ÁMb6$+©[8­Â[¥è÷õõííí±N¬†é?/„È´ƒ—m6- Ð7D&L  ÷ööz½^fPláÄ@œ§óÀö™b„íM …upp>³;6¤0Ž@¹YÕÐg2BÊ*¢ßõõuÉ™±€2 ÒûôéSÍfóã?þ×ý×µµ5ë˃áwÞ¹uëÖ¹sç<ÏÅ‹I¸óx<ëëëår™DX¸L±X °ñÂ… ï½÷ÞÞÞÞéÓ§kµZ p:¢˜u:‰DâÖ­[oÆÆÆÞyç®(æH&“‰‘2ìjµ‹Åðƒ‚% `ÓÝݽ¿¿OÎh0ýt£ññqR¡|>ß÷¿ÿ}fžœ4œ4wøîñ5q‘ pˆÇã Ê gÎq:uêÎKétš‹ ,w àóìì, 3wÖåË—£ä IDAT!‹‹‹l¸=ggg…v¨‰–D^ (¸±Z‘¤.Á>â·M¡Óü¯:Ц¢@Ö-I:‚0kÂ4«æ%ÝSÞ›¼"´(¡w¶|Ÿ|vMÉý“l·c–×ÙÑ©ƒà¢U¬š¬ÝÁâJm8Äà¨Ã{@ŽãwK0¼¥äDüV ‘î  ±õcÃ(†ÀP÷‘FÆ6ª>7 ÃtÆ&˜‹ -D†2âi²•ûÓð2ÐÍápÀ­¤? Ï÷Ól6‡‡‡©ãô°ÔÜCWÇ:˜ZBCyÅhooZ:è7­w,†9œ@~ &vuumooƒ-§Óéëׯÿçþ§tv»½¯¯/™Lž8qb{{»T*ö𾿿OøD___$!x‡óF(ËÌøø8†€pOc±˜Éd¢wnš¡îîîx<ÎŒ‹1PD¡Pà`{~xxøäɦ‹àF.— ŸTý5`x™üF±ðd>Ià ¯_¿.·ºà[4¦‰D†‚v2BQ/-¿ß±Íl6óÑè–èVÅû– ~yî8Ï‘P<`*°Ö€ÉÉIT4"À”‘õ7¾ñ 2´%‹$N4ñË“w…lE”kª‰½&…WÕˆhT…XT3|ut!Z5³³¥ÿ&ÒÎèôø†žz9í`9ªqomg_ýʈå×&pëìlÑoP—†¦”ëajýlN?V’<<}}XÖûsÈË©–a€ª†“³ér¹dU¸}û6háÊÊJ"‘(—Ë„÷ÎÍ͹\. DÔ4’4À¿S§N±Ç§ª2VyâèÔýC‹ÌårðsDšÍfyÓägÏžår¹‡ª«{ór¹¼¿¿O¼R[ö¿.— åj©T"% êŽhâ„*%Ú³ÙÇñÔÃ󇛜}9n Ô°[gÙ@ÁÀ 2%ëë/~ñ t.—kllŒ‘ÑÉ“'wvvÑiS\PÒööö²ëd% …BFòhOOO©Tr»Ý%wvvÐëåóy¼ö0!\%+Íàà º-¾#›Í[Éd2áË„^j ø‡áeŒÄÁÁÁÄÄ¢3™ûý~h?\²dÜa±X®_¿þÉ'ŸÀX3¼ô ¾sçÎÌÌ “Ú*|Yu¨õr ¦Àöºf2™°&œŸŸD¿†éÓ•`0Ș®¿¿ÿÚµk »Ø©4ÉÉIdh\Ož<1¼ Q@A’Édžz¯cx¥IjKb–~ÑüJc¬¤©l³vàŒzråÒL±J•dWùC敜wt•ÂŒæÍ#{=I1ÆX[[“xX‘t²ýaŒËŒÝ27óÄDT…ðÔ²Nà Cœ¬J¶ðì(y'`}LŠŠÅ¢‘Ò¡3Þa¢R*• ‰"Yˆxww—!Àdsf&(²Ùl½^ èïïÇT¢*3’sðó±ÙlP¤°áƒÉÎXchhÛëõ:ªÆþþ>YrØ1Rk4;;;È2u€(‰R“W>ˆø`óí”J¥B¡ðäÉ€hÃË e{öìèèÈét:N|³×ÖÖ`ʆÃa¾)|C‰}&‘†A¹}S©777¡24')‹Pˆg‹Åï÷“ÂD'Êö‚Ê_-// c„œ>‰pÙlllÀöÉêv»¡$-..b¶*ÖÖ\œØŠD£ÑZ­ÆÛ`¦G[@ß088HÔ3W YÓHý~?,2¸[4—8"š9<<„3Jï÷ûaÙÉ\*•¦¦¦¸—––jµyÎx”E£Ñ¹¹9QAÏÍÍiÈîlÕÅk@¼“¹©oß¾-÷£4pìùTÄ‚u¢å]Ûç•B¡Z2…:8O·„4³)¥¾¢v¨ºêó[¦¼¶…¡í©O“¦–‘}g{qÕKC£fÐ4j²v»sª2VÕxnÍK«È•|ñlgXQ8‚è+Ãä (L؇ü\.—§¦¦ #q§‘‰ˆ Üáá!ÁíímâpiÏóù<¶üŒ|“&éÁ`ðààgér¹Œ¿‚ËåÂ( CPI]fÚ ñ\Ð2—°r¹\©TxNœÀÔ€L˜\ù|¾îîîX,–Ëå2™ŒÙlÚÝÝeú`³ÙÐâaªÁaÑCT*jèðððo¼‡qÊs:n·{llÌårŒŒ¸Ýî'Nx<Ü2ŽŽŽ0ym6›ûûûlcE\MMg(G,¶P­R©T½^gyƒ,œ|pÜŸ°.qéëëK$±X,N#gùD²KV3@7å~||\<ø®]»ã€m\ˆ¬`þ³´´„{åžkãÝóðáCÊ7“~P‰:’òe.‰D£Ñ………ÁÁÁÑÑQòŽØã³H0]ñù|¬©–™žËåÂA+V…Z­–N§!SÁ‘ãPñxb+lÚ|>Ïh(—Ë­­­ ‡µV«áèîõz766àh°F²ÈñU«U¤'wîÜY\\³qáÒ7¨|CûD{r$Ù®BªÍ =X½°N4þBoч Š_·æiVw ÚkÈôê“U[Ž–óð–¦xô jy|¥ÌëµÏíg®X ™Ìh”åà¬ÁF$›]¢˜å¿b±kx™v­N~xiIÁÀÑ(±eQJA°E /ÿËhÅëõ>zôˆZÉjll ô)úé§ï½÷P!Îétš@Dª?qêTv³Ù ‰8â&ÃK[lÇCe¨€9ÉdÔ- xçAKÍf³Ïž=cI`¿ßh4À6ðP£ÖSX™Á.eØÂÓ0ðÉ4s0 ,U¤Â‚c‹ÚíeE4bœ.€“¡¡!†B¤ßðqØ{2js¹\øß1b¢a6=RpÐfi¿þçþ‡±&ŒéÈ``Þdè–@ÂyÏ€7X_ðdfî™LÆív¯¬¬`bHΘK$è?üáY¶m6Û¹sçNŸ> ÿ˜Ëì‹/¾¸|ù23¥ëׯÓnÆË—/¡º½½M{ôÑGa _©Tp­à t»Ý¾¹¹i6›§¦¦¶··/]º ª,²»ÝnµZßyç…@Àjµîîîò½°"’üœN§óQ¶ÿû¿ÿû¹sçG€ë@«ƒ:ñèÑ£@ À¢ÈBEW¯×¹6`…uwwƒÁÇãG"(W__죛7oÎÌÌÀ»té:Ç“Ïçi›ð±œWcÈ&H”ùCÁ†..ŒªF Rj°h5@Þð‡ ðR4o¾ù¦ê ñVÐ[^Ë«ˆ¡ƒ”JÕâ[ï¡7Õ0tÌR±î–®®ùµÏÇÄ4ôàóq`rÓÎ]…&3OosØ2%Uð%¥‘LP½ýjËH8N7QUÍÌÌ`ëˆãÜÜÜÝ»w)|ü×d2Xñ±/c—422BÎ&bè`)ÇlÖ¾ÜØØ Y% a©ßl6½^/SÝõõuvd¸•A—C1I }!ð*'¶¯Sa”Â!‡ <Úñ[¥žJžh³Çãaâ$®M@‘===Ä®áƒçŠS'z=ÔyÅb1™LŽŒŒ×ëõL&³µµ±Z¿×ë ÀÁ«!”åÐårU*vš .¼gÔÔ¼ÑlÔ'pJ±Ãñ]>Ÿ?}ú4øö½{÷ƒ`+M†÷ª$nª»N‚«‰’\ ¹\ntt´T*¥R)I+ ‡Ã€ÕÌsŒF#VwzUrŹ6À«™;A§–ñöðqwvvªÕ*re"µ14>_Ëeyþüy2®¹¤­V+s3ÉæÄ/û,áUÓ'q‰—*ílú|j¹òÁÉéù¤GWaaîùøbf¬– F­Nô íÞ–œ8³¥‹j»ªØÁLº³qµ¦é:Ç™í¿fð¹3¨Ð!œ¨³è¡Ýûîìr¡>YøúÈ6ýdMEíÅx•³/@–F.¯¾W*þ‹LÐ"qÕbQ©vwîÜ¥+«å‚9c%¸ƒ¥R)™Lând2™ˆÆbSÃκÑh0›š˜˜ÀGÝC­V{ôèê-v¾( °äd,NË KlïÈK¡>Ò‘¹ˆm>»uòØèqo¹°Œ·ÍfØÛÛC&ÌHÌVÉ ’W!t[ ¢+áûÒÑúE°öà«*d¤¿1 £aÚ2Œ‘þKlœN'ë%0 Ø5*9‹ÅÂŒžaZ__tšP(„šäí·ß†§?555444::êñx¾ÿýïs†AkÒé4aÑ333€Òp~Th” H™½.86H†Ûíf%PÈx3×®]ãh\{h¡¹Þ¸f¢Ñ(µža—Édšššr»Ýårybb‚,R>ŸOÒ¤YhNMMÙl¶S§N9ŽÁÁAbN:…S ¼^âñx4­V«¡PÈjµBt:xà ÀÆ}ÄgÝl@nfbü–¹j@ “d&·ü–§É­'¦ªbõ¡úäKyQgSê8Z-2óQ—ͨG•¤©k~²­±…V߀f ¥}ÓƒÒ*¤ah$×r¨Õ¡’ÿ©Ã1—£±×rÌìhƒ’ôÍf¿ø»% VOí’@K¾—F@È+JÓÀ¾ 1 ˆð¹(%M—‰º\.‰DÀ¨¥u`Wˆ™>{FÈ|¡Pb’ˆEY!Ø8C&AZ ÖÁ?NcPJÕ#õ%—Ë‘ %_¢˜™þ¦fÊ#°9 ”Ú­ú¦õ÷÷ öÝŒéÙA-E"g±X Ñ‚³-e”׬Á`€ÕÎÊ_kT0#Ÿ?î÷ûaÖ"DÁŒ/NŸ8q‚áX©TB¡‰D°™3‡£¡ÁVy_¨ØúûûOž<‰ ƒuFL6› >xôIx±Š°`ãß’Š-ûȬ´}°c¿úê«`0 I\»EÏõÀ>=Ò¡Jˆ„‚8Žk×®}öÙgF£ñþýûo¿ý6‚sz €.Ô………Ï>û èxnnîÎ;\6Àå–Ëåx<.ïGȦ䭖J% ¦T*/®X,âÁn0îß¿Oï‚o[½m餯’N‚åSÍ]g*ÄϬ *!Ue¦ê[ ™F´Û˜CÕ¥ÇNtp:þ¾¾].t;š¬q;¤=·{!MÇð:£=å54Z6Σ:Ä2°ƒ,GP!–¯%6®T|ñÅš·!:Õ¨lƒ_™Íf õàP0 Q£ðÎåÈ_~ùåÅ‹'''qïi4gÏž- ù|þòåËårÙãñˆ3“zì…Ñ‚U*•ùùùsçÎ!5²Z­‘HääÉ“lÄÊå2ƒ6Å{{{”àááa‚ˆ©×`’E „@/†Ûÿýßÿýo|,ö®Ôbv‹Ð²Ù¬Íf£øª.Übü.â8(RÐ(4lWi\p¿ÀªñZ__[~’>‡††x„]p&“AÐ ùýðð¥./p±v±Nð‡¿ýíoÏœ9#\øÿú¯ÿòx<™L­~«ÒÐØl6zýýýÐøttW,cl´áòrèTÐ!ᜠ¸ŠcDww÷ÆÆ’Cä]Édø„/#^„ZÀÇf³ «‡å1#J‹t:=<< ñƒkx>&“)‹!8' ááÇgÏžÅÄï÷×ëu›ÍÆxåÊ•¯¾úªR©@üErœÍféÉŠÅâððp:v»Ý6›íÝwßWxôèÑ¥K—ÆÆÆ¸žÙ+˜Íæ­­-‚¬I^ƒõ499¹»»Kßîî.3IŠ@nˆÅ¶Ùl[[[¡P¨§§ç'?ùI À‹å½÷ÞÃ;„¨ ÞQ¸?ùÉOðNn47oÞ¼zõ*¼alí! Ò¬áU|ëÖ­û·k6›è 9”Íf‹ÇãõzBܶ Û)(¸¦Šwʦ^Lšƒ3fØVo­‡`õ`­ÆNU Ø–ÅP×|")SŠöëöl—d­7#S9½ÉTKÝl6§¦¦VVVòùùdccƒV^5áàà@U„±ÕZ’…:̱ hÛüʹ·¼nKÓ¶–CžvQ?EcÇQüGI¯l|4éÍú'K:¦`A-…Ç-›²vð‹~<××H5=£æ  Á”üNqÔb,E_,X%‰¾¸MOO_¿~ýîÝ»™’3‰º{÷.ÕŠþWÞêèèh&“q8ôû~¿þ>£ ”®!rª9“€ª€‘ÈÁÁw2âñx$¸æ¦¯¯½˜¤]<@b¥L„ØwK‚"ð±±1&Îà 0è$ðûÛÝÝ¥§ó.ZYª·M¡P@RG3„PëZÐN”\ pBŒv’s &Oh6› …B,ulc÷»ßáÈ< „N<ç4¢¦¦™àTmèØ,+Šz¹*"‘Àòùóçïß¿?55ÅtH¾_^®ˆ–‘LS0rE1u™ššRé­8¹Ýnhf>Ÿ6/!òI 圈¤™±g©TâÍ£è'g-ŒÇㄌ²T3>%Ì®3™nÙl–o¶Ùl¦R)ΞŒˆá¼víšÊæ4SL–{ûN#Ë ‰¿UCyPD…¡®‡ÚM–ÚÁ_YZNÔÕ¤áã |:¼ŸcŽª:…4£¤×‰1´Ëmæ+|+MgóqþŠÑ¿þ¥5èB;# ͘RÝMÈägò{¹ýd©”–ÛÖ;5õƒVÚa¨@%sd¶®TyYE )q÷F£Qê‚G³iEæÆÈ›)0”$ǃ؊½Åb!MVèÐÐÐÿÏk~™Õy”RN ±qø,•ËeX¡¨ñÑØøÓs€@H•Iñ8âÈ?¯×KÄ)õQ¦ö”]ØMjDÒO–üáb±ˆ[à˜âQéX™€1 / Ÿ!õÿb@$ì/ÎÛýû÷¥‚,oƒ˜Íf°VÐo&QÀE¡PЈeƒ €UÚ “¢IÖ7Ë ƒˆœÕ /—(=.K‚ì!ž£â^ … ½¢­{€ƒÄN“ýòøø8lNêì‹/ð/ÂЂGéÄÄ‚UŠ1=h p4Soü´©/ûûû”Œ¾¾>€åÆËŒàa"ÁXeèOëC½f‡F¡NƒÁ–R–º³gϪRöï̯€g¨;@A8{‹¤œ†/?œYc±¯+.Ðø³Ígû ž#ûtÙ Cb¦„["äéééÕÕUu«Ëe933Ã'•Ï"ÆîÌ»ØøS^…ãÀŸH^[[›˜˜ í@žÍ ]7¢äÙ¬Ê,·ƒ3TÆbFÃår‰‹8sj.–?då/yúôéàà œ]*;¢ËÞÞ^LSär¥E¸qã7 ·'—®ê.%µ•OŠÉ17µ¦‚³¸J¯)*3U%ª¨@oÌÓdngï¦ß¶¾r#¯™)µ$¼ZÙw·Ä½õƒýìD}!}ÇðG‚Ï* Ò.VT¹ˆLC$!ŒE´w@½B„ÕX iy²ÄÝ©8 1CtH\¸QÁܼyS5&\\\ŒÇã_~ùåää¤úê"N‘÷öñÇÏÎΞ={ö;ßùƒþ¾¾> ¾óïÆÿøÇÀÔÔDp3ûè=z„΋¹6CŒ!÷öönݺuñâÅÍÍMvú‡£ÑhŒŽŽöôô !›:yòäßýÝßagD»0>>Nê=îC(~!áPñó›ß:u ƒR—Ë„@JÚ7 fJ-éz†È¨ÀPŸ1ÞÝÝå%h& ¥‚@ðTWÔÌÈu©V«kkkââÈæÀÀèë‰'x-òD‡‡‡a+URòبÂb Ä;§éI§ÓøÅ ø”›››D“ïöÿþßÿCh688˜H$Dò [ééÓ§f³o \¾iP0åfÿ‹T³Ùüè£Þ}÷]Ј‡Z­V0 üÀ‡††b±Øûï¿ÏL¦Z­ž>}šz fpåʾ>–´ &“éƒ>øÞ÷¾×ÝÝÏç»»»¯\¹òÑG!Çò„QX½^Ç¡Äh4†B¡|>OQ?q›h÷ •áˆÇáK/•J`àÐÕH¾{óÍ7¿õ­o[Äuz_«ÕçèêêÚØØp»Ý@ÍP$À{v»Ý|㕇ÃáK—.¡t¹rå ÆÃ¸°,--!Lcéҥ˗/ÃÔàv&O—®‹çð+îV„¨؉§²&#¢Êòò2v÷‚QËý.¬•r¢V¿Û·ob«PsËÌN&Nýªqžò¢„QËÓÔÐPUû¦@9ˆzd¡ó¨OÓèÝ^øÜ.b¡Ý2¨ï•PÕX¢t¾ázê.?«}SË0#=¤³ô‡ÿÔ½ryŸ†}, ‰á¥¼†øýþëׯû|>6ãH ÐÑ5Kz”ê¢Áe‰D¦§§amg2Pë™™YÕ———ÑÙl6¶7nÜX]]%íÄáp¤CÜÀl¢ãñ8@o€ãããlôòùüÌÌL0ÄØnxxXTÄ¢D£•Ëe4e6*Ù;‡‡‡d#kØØØ XìÅp«Hä˜8±UÇç.N7‰‰ g£Ñˆæ…÷m*•ZYYayppO¶Ì²Dö…~äßëõrÂWWWY ½’xØýùùóçùŒñx|sss~~^eÙc8 ™«à7 ÌŸ9¡Ïç3™L´›¨‚¡¢a^"@«°“¯]»ÆK€ß †Ï>û lƒ ¥Šunqq‘YS(bÃ{÷îÝ@ ÀXŒN…S?¸õzÝétÒ€V«Õ±±1Œ¾QSŽ¡ï#÷”–—ï×h4‚rOMMÅb±D"š)e£Ñõ=Îd<šŒh4Šx" –Ëe)ÐQ‹ø@mÙ9ó R+ÞU˜Z \Sm4RžP­Vy޼¨¸dÊ“)2‹Øäh: pmRËZ;‰˜ªÆÐ£ÊòNgQ‚¡UšÛŸ1Á­Ã¡5ïCŸ¬©ž þèO¨j "<–¨C˃.«OÏ1 GVãýä€âº%W§X, ”5ZÝH$r÷î]ìò±"’yšG¦™Ìˆ.›”]¦¸P¤.}÷»ß…«ÃTwyy9ø|>˜”L˜«@5™ŸŸg¼ÀÎWü Èg†C)6Dk5 Ä\J6ƒ4rh’ÉäÁÁÁîînooï‹/ÐŽAµZ­Ì85\A–$Ímww—±þPãQÌ2Î2âȆ> ,//ãÒAˆ#\,”·ñxœJÍ$Šw‹ÐŒ¢V«MOOóçÓb±möèÑ#9,Bù|²Ή²„óÅñLêÝÂÂk]902Ê’jµz÷î]ÞÏçc°ŒÂQeÚ@WcÃ<‘ßèè(ÉB¬Lƒ%c¹\N¥R¼=L^{{{ý~?QhˆTÀTdý|ˆg0“O–F¡®‘ûÄĉĎb±H +{FšÓÓÓè@!m«”$uǹ°°@T"zŽ+vuªâO-ʸó8‹®¤r¶T–Q%(îÂ6­«:ÌQ3¢õÜ$•©øÊ]²ÆéÕ¾”|ÆãìÑÕµAhÖGúgYZVùÎ24ÕŸNú€W&ÞÉW¥Ïtk·DqÏè—Ÿü­ j$òuªA¯¢‘ÙÛÛcË–Éd¸=úúúîÝ»G[ÀE ä Á aש:~®fnBò3™ŒßïG_–ËåàùŒ‰6u*‰ H’;)¯e4¾2‡.v IDAT õqÅ‚·-€3D˜o2á 4M >HÀ LZðwÂÆÙétŠ:šÕ&Å:f©T¢ aZŵQ¯××ÖÖH]†û¸²²BÕ ƒ|p*‹Ûív»Ý±±a—{\Ç©&‰DâàààÉ“'ðôÑÓÐ^lmm1òfUîïï_]]e°Ûíò]3æ¦Wp»ÝDøÁ6v¹\wîÜY^^FñKx'écìÜ!pÏÅÜ”Om4øÃj.$¾G»Ýî÷ûà`‚ÝÓÓãt:Ïœ9C´Z­^»vBÏÚ†›P©TŠÅb„¡ <*E¦yާú¶»»» ‘…§R)> —(‚üvee¨&N£¦DÕÏJLÜÀÀ€Ûíöz½(¦§§C¡ÌåeRO)\\\ä2–-9¸d G\íò¹sØôTxÙáIå9zë™îpg„mϺ¥ ‰Ó5Ë.^-níÈ£R¬U?iñu>N]íÜRèËÚqs¯Aà¦AÚ Ö¨* šLiÜ 4ÒæbˆG4ú½2Eþð‹/¾P‡k2¶“-¸óDƺPí´82¶\"mCwûömzçÉÉÉîîîh4úøñãb±H‚›OıëË/¿d¬Ì†>ßïüø±Çãá†988ÀŒlhh(›Íæóy\ƒ°yðz½˜!ýõ×TsƒÁðøñãééé¾¾>@îvÌ,³ÙlµZ…ÉÊ0ý7¿ù ãàƒƒÜ͸“Á™ÁÞR÷‘A1öaâOÔ©¿Üv»½§§ž’ÓéÙ¦ó€Ê‘4“„ღF£Q,=Ïþþ>lÔb±ˆ-^.—‰ÅbMÎI2™2ΑS óùüúúºÙl&D XÅl6Ê ÇÙzONNòöL&ÓÄÄs0L§Ó@àG?úч~X«Õb±X2™õñûý»»»Á`µ ](1ZE§Óù“ŸüäÂ… gww]ý"Øõo¼Q,ƒÁ Ñht:²Hÿó?ÿó~ô£žžžd2ùüùsÚ»d2¹»»;<<¼ººzîÜ9‡Ãá÷û×ÖÖ0V±Z­]]]äFðUîîînmm‘âçñxHÂ1›ªk!Aª‡#›Í q(•JVq-áÁ‹ÅÞzë­l6»µµ…(Ð…YßÀ8Ìiäøì‘ÝÞÞN§ÓÙl´¤y=vF£Q òØ< A¥œýêW¿¢`)ˆ¶”[f~~^ sÝJTUåÒ¥KFCîJ)J -¨}ÀmÆñjÎÚ7¸L ‘Xòñ¶Å<äRJ Ðà rLM=T½>[ÛUºå¿×)p;¾NÔa-ý´5 pB¼m ­LÆ5FÙúŸ*‘Ó(ØÈkÚ+±è"¥GEô„r¹|ýúu—ËõàÁƒF£Á΂®„Ój𕽽=L˜éÀû¬úòrX3Ù0™LápøpðX^hsssuuuuu5\»vŒ{ ¿ß¿¸¸Èx‡¢É·ÿüùsì+666€¸‡ÙlÎçóLŠ@kØP£ÉUeÆ’K ±,ùLá873gÎ@ÍR* l5s><<ÄPäÑ£G,´,“Õjuuu´`tt4/,,€c Æ4©ÑhЃ2žžæ›eÈrN´œ:RžŸŸg_Åw'ÕŸ¬rgñ³TyU-3M™ÖW©éú” ¦eµ{ ­Ôú;;¿©F‡}s‡?ïü·úÍ´>ãAð?IÇÐ!§´åëǪ]²«¡U©¡},sË fÍPRõÉR¹ÞMW}'ò˜Q£~Ð/Ú’}ãÆ ·¸%¬pqfÇ E]宀c3á¥8Ò:ììì0ä%†£=þõ«Ïçóx<ƒƒƒûûûp@%o8¿ßË)½B"‘Ñ¢hPdõÅý œÙårÑÛa–Þl6‰bìéííeÊW©Tl6®J›7›Íd2IºšAäLíäÊa³\ù‰V†òY­ÖçÏŸ‹,ŽŽç—¿ü¥Ü†rïhnaQ'èw{Áð+az/©!»‘+é‹€F¬ Ïäñ;wîHÊïÿ¶Tv(€í$½ÇÔHÿo_úu*Ÿc#ÞRòwLŸú É„ç8ïJý¾[¦ë饗کBƒbàÚá°ŸÜ0-mš`¾‹°S´N¢Ú§^úAªn Ü{b¡A‘[WôtT:`áz½N»ÀÞŠÉV¹3ïŠ*Cô!Ñ3cMšL&1se‚/tX)LŒûa²‹rŠãCOÚßßÇ£"ŸÏ#²e# †Cñ‘qãÀË',}p€ƒ>Ý8ؾXüs6ˆ7à˜t`6›­^¯#ôƒp)sss¨e:¤Š{777E˜†•ú= FÊW]9ø•ú…òWœäÁÁÁt:uY`Õ¬–AµZ={öl±X”Èh–³gÏ‚}xxˆÍu¹\¶MÀù9uêoŒÓ;44ØS.—c±„¥ÕÕUI)WÉ"sÿ`愃ÒTѦ ³3Ož¾…¬.²øµsÝhéîüJoŒã/Bê“_§»jKô£¥e ÈÖ4ЊF.§ù[ù_,5i«ÁˆzªÔ—O¦ ,ZÕÈ%Ÿ` >†üM~k0PÐÈ“Uጠå‹åÖ­[@Ù€i7oÞ^Yœ{ñö€ÚØV#8¶ÙlÙlÖãñ¤R)Éuq»ÝOŸ>%~ ¿<°k†òõzýæÍ›³³³LùÙZ¢­Ã[›´zÐ_~ù%A•mëõú‹/vvvà´ÀLŠØÚÚr:‚v@c'§Áëõ¢›•0",óà±-¥äõôô<~ü8°„¾¾¾\.·³³ƒÁЀy­V³ÙlN§°4‘H`ÂC((à6Ú1°\fDx ¢ç°X,CCC($FFF°ÓØÜÜäÉÌÇ._¾ ¬MÐÐwWWJ=‹ÅBÀ'#5³ÙüÉ'Ÿüô§?M§Óv»ÕP”bzëÖ­K—.¹ÝîžžžŸýìg/^dwÛ (˜åöÁƒàÀ]]]BØ»noowuu±ã†@3A“ äp8FGGÑŽ`ÝÁ7‹çUÿ‹/²Ù¬|œÝÝÝB¡]ªÙl>þœQ^¡P wñz½Dx2º<::r»Ý|ðÁää¤ÑhDI1—K~Q*•‚5L&-Ëþþ>L´Š¹\Q},ã†:yò¤&BÑn·ONNrå{<žr¹Œò«T¸$/^¼yó¦A MûðÃC¡Ð¹sç>ýôS…¯^½Ê299)uÈZ”ªrÿJã·r;ó4Þ$ûù矫Xñ¹sç\.—„»sUci>‘¼ ÍAT®ÍíÛ·Qæês-5µKcë%uzáðÿø¬‡ŽÕQšJ9Õ0G[ŠT¿C*Ô°‘´hÆv*;X$uB艃fË/W*ÃZå­ªÜYý‚/(”mU«¢î€Ô!ÛI?ÁäÚn·£ÉZYYa×S›)ßb±5Óçóüf2™ëׯ[,–ååe¶iÔw###H™Òé4ÔÆØýÌmÀ9ÅÜ¢Z­’t†p•†uˆ™ƒŽR˜ŽŽŽP23€J§Ó¯îînxý¥ðÉ€}oxŒÀˆ†0)Édšžž–}=c+Î3>Lü%‡&€.çìÙ³øR šÉ-?D"±677———Õy Àžfï Ñ“.ǧÏP«Ï×'ÉkRß&ÔÀ ªÝg;¿<¦jyyYny*ZúÔƒ¨§ƒ™ô+¥fzeXKyÝŸ|néÝ!uPÕ.gu(Ib›Ô´#Q¾hâ5¤pëiêW«OÓæBQõhêÕ ×4ÏY^^FŒcøCë]õgõ SasaY iɬÅb¹qãÆÒÒÁmápfùCZxÆî4é X Þ°Õâù‘HÄn·TY,wvvPïììx<„Bºçhð ‘€|2,b×ÌÆ¹T*‰À˜ÅÀd2I XOOOWW×ÎÎN©TªT*Lrp Éd2@ÊH$Â4ì׿þuµZe®…xª§§'ŸÏ †—ÉÏÊL&C“E·¿¿'MXI,®|.ž|AfAŒª˜ÍÏÏOMM1bâ³L¦Ú‰±.©aü » 8l˜®‡ÃaŸÏ5º0…žwË`Z(Š&ý$ZJ3Êv‰”Ëe*õüü<3"v0©Tª\.ƒÏ»Ýn8áb¨²>™õ«õW’Å\€³ÊÆNE&d,£ÙJÊ(©åÜIîPX z„V¶›r;k^5ËÊ2u`¥±3RÇ×z¹•^áü¿R2KijgýÝnyxÍA=fMjü…:rQ?ƒèôOPõ ˆ!T“%¦0ý¦ÆÍiyy9KRÐ… äkV[0@ÈHJä<¢RŒ‘Î"}¸zõj>ŸGñÅ_ˆŸ }ëÞÞÿeÁw¿¤a´Ò2}fŒÅbt \§OŸîêêÚÞÞÆÙ†‘w8vÌdc±ØÒÒÒ?üÃ?ÀŽgÀx!€ÃáˆF£®kÃø Z½^gæ³µµ…ýŽ ===¸h*Øív²äÈÿCUÇÆ—éðð÷!b¥Ïœ9CÔ(ÜM *°ñâE½^ßÚÚòûý›››xìtuuíïïcøÃ¸§¦Z­699I0€ÙlF,ç ³Ø`0øäÉšܘìݾ}»V«ñnÑŽ­¯¯çóybj˜òõõõñ6$H ~ðƒ0óyï½÷ªÕê;#*q8©;¸E12bBHh™9¸'áHHĬ­ù€n·ÝŸÕjE™­ dÖoÚ&Š©wwwCÀ%Gé_WW×?ýÓ?…ÃáóçÏã"…öM«çææHÅq:ðP»ºº>úè£÷ß%WòÞÞ×¹¬— 2™ oÕétòrçΣoã»Ü)LW¸ƒ¤lqÿR.ßyç‘É XäM22ByCš9Æ¢MõRk5u|Ä]‰!7²FÇ )\¢—Òø±æé-dŒ¦qŠ“,x¸¨+ÄJ­?úú©Iê0ê—'´ êù?rWí°”9Qñç–^­í²ô ¥ÎŽ×zú“>=BÄëªpZ/Ú2ÒÃàôLv¾ìRåi’!,À¦ ®ôòXl” Cáó@€Á+>ž¯@…ò4öæ] †û÷ïÿÍßü ·ª…ÃÃC¶ö#Én$ ­Ùl¦Ói§Óùüùs°eñIm6›$ Ñ‘ÇIFr q¦Ò¼sqK5›Í…B5è=”r·Û¶Ãáxøð¡XL s†Ÿ™5 †ÏÊŠ*·" IåÏ[–W5l’ÿ ‡Ãør‹ŒP^WÔæœI¾‹ Üaù!bÈL34::J†(Œ#ƒÁðäÉ“©©©B¡àñxÙ³+'ꀨ tˆõzµ91ËëëëØ`ÐÕÑB1öáêbét:wwwc±˜œÞv"‘ ÔAM Ò„q 7^868?–¹\.‹IF‚ÜeèÆ;Ü&Å¿ºó=nhcC­a¾´™ƒÜvNˆyeµi÷ÇñaÕð3 ÇHJ>NrA;VÒŸKÇ  'jù¶ôJ =ü Ci$æ-'ƒz{)õÉÒ(è…0ª,Eï`¥ÎõTõа ¸ì4L;ùC*AJ˜ 1y”÷à ÆÅ´´´DðûâùùybàĬMÕ|°¡N$ćÀ“Yæçç›Í&?¬¬¬ð„•••žžŠ#…Œ"Bàe&“ùîw¿›Ïçýë_3|'”ã7›M!¡ÂŒd#Y©Tð> eŽM§W NrÞR©¡žàÐL3™ÌÊÊ –Íf“ψd6';eÎçÎÎsüóçσ[àœÃˆá•|MØJ#–ƨƒì9«ÕÊZÂ~Üívó¥¸\®p8ÌR$_ñÜÜAlÉùŠå;r8¸ãõôô ÒÀ|‚ôozb±8::êr¹Yr8¤D0‹ãId•'+ôh­Ð*ãn„3îÿ×ÞÛ…Öu¥iÂ˶ýûÈ-ÉNN;RU\ØÄ ƒé Ò }Q4ÝíÏ€úfÔô?C_ù"s1º·.u'fF º4˜@3„.(¹ð‚´¨T[UJEŽêÄŠåDÇ–l)òÏwñŒžyõ®Ÿ½ÖÞG²ÒµÖ…°¥söÙgï½Þßç}øÎßÿþ÷­V«££ãã?~ôèÑÒÒR³Ùœœœ¤*?¤È†W~ü ©¸2¢„(4¾øææ&Z õz}rrxèçOOOc¤ î5úL¸¿Dg4 O|ÿþ}Ü8rE¬¯¯_»v £!˜[FRE 6™ÏŸ?ßÕÕ…ô¹ ¼;2züø1Ä·ÉuòäIdEÈÆXÆÕ«WµEŽ‚ uñâű±±þþ~J!BF)_ƒ 3Ïøj á)GADƒÞÉÀÀÀ¹sçVVV°¿å‹ÛÄI7ÄXÊäÁ¾ËƤ éì]¬,€u¦è¦³Øà6ð¹Û¨Š‚=ÂFŒŒ ^/p޼ÅÐáÙì¢1_óH…z“Α´@®T8BQ˜u—: DØcnN(nŠ„pòVÖ1èÕˆµWJ¢ ²-‡!ä® è Ž#?‘ú\DâS2LNùs|'Œ)K—.½öÚk¸œ777GFFMé͇bb Ѱ›ƒƒƒõW5??çΪ¥’c®ÙlJEL¼€ò,@Ë`¦ óõz¡+úóˆˆY2b^øÎ;ïàkBñ¥-”D:::îܹ£õ€‡qÐm|Y¬¼ hÅ£=<<|íÚµùùyùI¥Ìj4 €…Î;‡~:+ ¬‘ ÚàÇÆ,ÂÈÈÇ¡8ÔÛÛ  …ÚNÙÛÛûüóÏåà†þØÙ’P:~w©"‡NYMRA¸2Íå¡8*Ìç\M·©®¯DÙ–Ñ)¸&®@JÎ. Â5°Bsgkæøæº’¦"_Ÿ4Íp(¥¤¥¸}Ã$xK9^‚DÎÍ9ð­@g^fŠÏŸ"륄 _Ìè†Ü¿*[$ L2¤ Vq ò´É?ŒØ!ÀNHXzÂk€ô@‹'C:l?üö¨Ùl¢‘:H'º±••€_ÁŸÓjµž>}úùçŸ7›ÍÏ>ûlbb(FÔ[qommíîî~ÿý÷_ý54žA,П~ú)fŒÁí³··7Ð"=yò„W ×}‘õõõééiœ’Ù§øG¯¦¼ÙlÑË‚uww÷ìì,(+:;;/\¸088øøñcÔCÖÖÖ@Ä X¸¼ÀÁ+ttt,--­¬¬@ããÜ´øꌎŽ"iCµ ÃÀˆ¬Á‚nöU‹á!vww¡q!8ƒÙÙY ¶ãàØÞÞ²`ßo¿ý¶¯¯ïÌ™3ƒƒƒ'Ožl6›H,@á÷ý÷ß¿õÖ[­V ‰.ÊDh‡\¼xq~~× HÙÍÍÍßýîw¿ýío×××ëõ:AÒÛÛÛY,{]êñI+?55511ÁBâ 7cöðáCd„xzûúú"Š*ó{¤’¦ŒÈ%ÖŸ%²QU¤}±öÇ‘ÕyIÝdþ—¿'¥mî”V³¬g(˜>„„ÙjnÆ"SŠô"I^áÐ3†øYh†b¿q ì)UÎ@ âãÆÌ ‡ÈdÈ]/ù°2Œ¥Î'Kå×g¬$“4!¨† Ç‘Í[6åð-£Z¶O±@¸Ä¶6x P&Æ³Ž°‘ X`] %Äo›ˆH“$ ¾€…Ä©Ùçû»{÷.šì WŒœš¦—/_þüóÏñ½{ਿ3)øôÓO9…ËV*‚ uvÀ«€D"% .jñ€i"ÅAÚ8°)HPPŠ!×µWÍAÂ>„É4š¸SlGã—¨’¡½ FR´¦QèÇhµZo½õB~䪶Z-ðÜ=þ'–‹3gÎ|÷Ýw GÅ)! Ã'bX¿Äø$ BŽ^ú{g± Xv"z™˜Êù™ËÙ ¼³#µÀo‚ ¥æC.þí¼Ab1$ÊÛ˵Òò4åÃúÁ¾ÚƒÍ´ÎJÌ$éIh¤3¹qã†Ò|ns¡ØOëq…ï R†É§g-a¹Î.9q¨ö‘³½Á yd¾…œœ$#…Þ…%׿òò2 Ù|ÙÔÔzÊH!Ì‘„nÔà%·ÊÐ'GÖº»…}}}õzÛ;wùß»w^½ÓîîîîînT3ÐTìîîžœœq)z¿“““ˆIT(*7›Í®®®Ó§OoõîÝ»gÏžÇ5l(¢ÝÕÕÕ?ù“?ûæÆÆF__¼BWWžAÕ /DÄ”¹l4/^Džã¿ø¼ZÊè0ZìëëƒGÁwû¸êàÆ€øÄkÆÇÇA†É5œ'±öä{¨Õj@Ãñ÷÷÷CfffýŒž€ôøñã·Þz %2L¥àr¡³rýúõ'OžHJÕÕÕõõõÇoJT.`¬§N &60…ÞÕÕµ¼¼Œ`±pn+++]]]è9_¼x±ÕjýéŸþéÚÚJL÷îÝÃX;¢{<{ F)¹ð¤I*i<·¸¹èØ3(AìŸ Éñ5*aöåÛ¸£eON6œå6§Sá„)•×T©)»ŒÎR¾³ a[’pŸÀ— Ø88800póæM |‘wagg :á0[ÀVÕj5xÀ[áÕ ”À[véÒ%|Í»wï¢5R¯×Á¹ÔÙÙI£;ˆCAÚèÒ¥K{{{äÅÃ7⃄VDww÷;wRà»ß¼ys||üüùóò8þü³gÏlg "ôpÊàRã<ÁS-½&DÖ ‹€ß£¡$èd`It“ÖÖÖö¯~õ«••ø9è³"Ã‘ÇÆÆÐ0h6›+++Ÿ|ò @SðpøýÎ΀8þ ‰É À 2Ü ¯Á„˜ï0'¸±±:TÊÁ†rõêUÀsÁ.Ų'ï5Ü”sH¸2::Šé9ÚPÐc@§J·(“Bl»w é n,a©ñ“ûš(ðl" I˜fmšÜï² Œ=+é7”©uVªe¼K*¹Úx”UEÄ6TW¥*3§‘Iƒ9¡žBh­º²¶¯³uÜxezøÐJöÅA$—:oOC!ÛTGAž­³\hw¼U‚£´”)œ"²Z­†®,‘ÝxãÅ‹Ià Ñ1lBM~Øt“è¸Áà*è$“GÚÁ'CzžùÍ›7ÇÆÆ`àÏx;pNŸ4 ~kuuÑ4ÊÏŸ?ÿñŒöÂ… à݃ÀÂÂBww7 =Á¯à f³ÙlµZ°&ÃÃÃ/^„KàœsFš˜€ÛÞÞ&! ˆðdHÛÓÓçèè(»Fcyyy{{Æ'fö…z¸ÃÁ†„××jµ³gÏž8q•¢ííí×_ýÒ¥KkkkøšÛÛÛp{¨×ííí­®®îíí?¾^¯ÏÍÍ5 h´!“ÿ®ø«/]ºT«Õp@<ˆñQÎzòä ´KOž< ¬4·÷öö666¾øâ d„Yëîî) Œðú¼ÚŒT( Ò@Ñ 3‰d®@"#4TÇ@Ô/·’T¯šžžÆÖæ<Äèè(7àI(±JD¬œ`ÅÏÞ¡tj¸ÌŽ—e˜(aÇ*úvÖl£'£CVœÍT{ÖDˆ<û¼Wá+#=ÇÉÃÈ Â_Ìá²M°êúR"Üv 4èö\¢ဉsN$ªº–“ŠÝîó¯äÉž'#qlEĪj8“ÅÀÉP699)gn±“a­°…¬bÈ‚~É"8ZŽpEŒúqVvuãÆ ÖsèžQõBöƒ½×××·¸¸ˆý ñE„½hlmm¾ TQµZíÉ“'Ÿ|òÉÖÖV«Õ2 Óô½!t:11ÁA„ç¨5ÁLÀp³þÿÇ‹Œ0 ÎÕÕÕááá+W®ôõõ>tñâE⩺»»áäúûûQTAÆÆN;,ïðððææ&¬vggçóçÏ_¼xÑÛÛ»¾¾I;H> î„“K ºâh± twwŒŒ€E$Q %Å@Ãæææýû÷ïß¿ßÓÓó“Ÿüduuru§N2Æ€u Zª¸#ày î)æqþ¤¡åOÀšÙ¸b3 ÃkÌÚYó¤‘ÖŽ!D<|z!yKy;sN•±0>[{ff·ƒ©ªÄ2ÙC¦,Ûr‚á9bpoØ”Æ>K%ndx®FVmØ«³‡l;ƒTä} <µ_3õætQrµ‡DϦsò}› V>¹j’¤Ûlã|äË“ͳ)®$w©©p¾X‰Ið¿|=¨áñÐótç1Á«Ò=VHÀÿüâÅ‹÷ßô?ûÙÏŒ1o¾ùæ7ß|ƒxüÍ7ß\[[û»¿û»¯¿þïÅæüéO ñµÞÞÞ/¾øâÍ7ß× ¬ dÏž=ûâÅ‹±±±ÎÎοýÛ¿ýó?ÿóëׯ¿ûî»o¾ù&xêqøðÃñeÿò/ÿòéÓ§?ùÉO®\¹òî»ïb'\¾|™äAƒˆ[­V»~ýúåË—GGGwwwïÝ»÷æ›o>zôxʳgÏ¢üôéÓ'N<{öì7ÞèííÝÚÚÃÇÛo¿ÝjµFFFzzzúúúž>} vÂV«õ7ó7<ÀÅÿë¿þ륥%1þìÏþìôéÓ¿þõ¯yq2à ìíí…lÊúÃÃà 0Æüë¿þ+”@ÝÕÕ…mGGÇË—/üãwuumoo÷öö~õÕW -'_!¡1¨­ðC{îåË—×Æ5Ž388YltJ ”ÖÛۋѹGýÑýÑ©S§@ýìÙ3tè`P:sæLGGÇ—_~ r‘'Ožèííý‹¿ø |5®?ü/àV…¿‘<ž4ÊŽ)ã`Û© #ƒßSò&Ëf¾“?ÁÍÇW:Í M9ê³ÀRö&ðÛDŠCi9¤ÓßúšØaqgZÇ¥ݻ–9© lµ¥¤Ã#îDyúš6œ~ôÕΜð[{&ÐFìªj’z8XæS(`ÙöñUÛ|r†ž¥Õ›7orGÎúãY‡'ED7@àÈÆs¹‡)½«:¯ªŸ²¬ÄºP”G?71µpFràíŽw–bh™ } ?ÿÂ^CéŽ Mˆf³¹»»ûúë¯ïíí—‰ÞÀØØX½^‡VLww7¾ûøø8Ú¸AW®\‘—ÌB(t °Ž«·¶¶†oÚÈ@ŽÚWoo/@™8Èööv³Ù\__5¼‚1ìÃ;yò$àCPÜëëëƒr‘1 Û¯½öÚ à¨VÄ.]º„ÁTºÎ;‡ÞÆÞÞÞåË—Á(4*ú([†„Y¿V«õñÇòÉ'¨]»v ÑgYø¨PåÏüZDRàO&Êe¦ó@%ÕžV«…Ân÷0È}ideÀDБœ7Æ‘ÁÎd”rû+¤z jDY…ÊèÛ¶Kq"Áo‘³S)?¡”cÔÉØA­³ÕZ8å ^®8<Êt!F¢Ç®Ð©n¾¯×í«²ù|µ‘ —ÿ¤ÒѨJ«ŽyžÄÑ DKx†´×· U»¼¼ÜÕÕ…j,ùˆ¶Æ^²I©\¬öa¾‚`íÉ Ž˜npp-Gn$§²+ѺØ-ÉK•c¼Q„µc¸ŠwÞy‡ÚsçΡ+Û‡2=‡Bæææ ‰Æo„¾ªç âÛÞÞFʼnïÂßää$’¤Píïï‡62ômPÀéëëôôéÓ]]]###o¼ñâúžžžžžˆ»‹éûï¿ðà´ÕjµZGGÔ&677_{íµ»wï‚€”Pø/D÷̾ö¿üË¿@— #fgΜB jss œã3#jnCCC ¼; »)å )X=;;‹›¸ò»ÈTÿÀ„ ¸ln˜œ1¯¿þ:ÍÿØØÞ‚'™ƒø)‘xÚ‰UäÁ –ÂçÓÙ›$…†$è„MWÆGIuÙl@äÇ7P0}æ #¬ÄÊÇ´‹Õ©ÚYKû“Ä.~¤pÕÒ鈚 óá·|Sáü†ÖSÍRªŒDŽ%!ÁæªäÈ¥z†8MCr$´Ž©{N^V«…JÑúdrå`aHØØõzΠÑh(&'™‰3Þa‡œyú;w$ÚÇTžà÷½+,Jd°DÜÉããã4"rĤV«}öÙg”UØÜÜDá Q0ò ¼E¡ÉÉɉ‰ #———[­È·1×®][ZZB']MtïWWW ¤~&  j÷àÁV ÔëõwÞyu¡‘‘6iñ51xeæžž¨+?{öìùóço¼ñFGG2†V«uêÔ©o¾ùæÉ“'_ýõÐÐ<´B/_¾<22²¾¾¾³³%j°Slmm¡¹¾ ü x\áááþþ~ò±ã”xýÁ+'+ñp\oƒ|Ž*¤d“$Á28ÀÍBWîòEpgݺuëêÕ«lb£¬´··‡ÈÖáK(€TH<)¿hIUÌ®ˆÎìßó¡¢Ñ— ÅÆÆ¡<ç®—2œêvÔ_X9—&Bj;*2*'”š{Û``µŸ+)ž0uRÑù×CF[*cαmžÛ‰HX=ƒðY œåv©B'iŽè–~…@CŠùØj6ヲʈ¹mxVòá“ÄVœP% Ž¤Þ”' ¿Åm ÛÄò°"õz½³³R0¬ª!R$™Mùo¢Vhå¿1š 1œð… VVVàŒIË ÙgœzƘ³gÏ¢Iþ»ßýf÷ìÙ³§N‚ ühÂböôô|ûí·` |úôé‹/À»··÷àÁƒ¡¡!d]]]ëëë˜)Cä#|åññq;á'&Ppc;¾ ð\\1)ÄDèUYÉáÍåÅÄm"ù ï³¢ãAF+Éð¹]]]¼ÎF°sb\ÞGÒ½HÊ95f—Aøx+~b§Éãp¾ï€joÚ,Æ5¨?í#‚+!°Öö‰7k>Š{ò¹mŽ!u4\'Yn¡öP¡‘Ç''¶óƒ’†Í+„óÎ×(3M—`;¦ä“å~B-[­Öðð0•¶¸áI¦Äƒ0­ð«ééiRþ1K }7ǹ¥›CÏœ‘, / ÚÎRiN©zÑÜLNNÎÎÎÂÒ1ÐèàÃÑIÀCp å)àhïÝ»÷Þ{ïñC!rýQ@•Ö××1ÖÑÑÑÝÝ U2§Bu§««  §§ç»ï¾«Õjг¾°¥'Ož<}úsy»»» ÑéB¼—H‘yœ;wÔ~¸ìø^òëà¦(„ Ø„A]+ÉMË;(c‘7n€7ÙáÂÂÂÝ»wå§HÒlž9w™tB”‘Ì6Oš €$¥Œ~lÂjVrݦ‹œóâ™ïœœzNÝ·@üêS†H v㹑D/FO=ö„°³ß.á®/îm"ÃvV•OòÍÐËdSÑl±ÓÀÙÙäàÆs~A´Я›™™*ÜìódHÝ:Noq†Ñääd³Ù¬Õj‹‹‹ØlôÁþÂ|˦÷íìì,^€z=¯€ÔÕB Kî:¸ÐVS„¨iŒ0ÁA F²¨]ÀK¡¤€ëÀÞ)ÙA¨6&9ÚìøâœÆ0ûÜݰ•èQãàýýýÀ6û3ÒÀÿÔjµF£Ú ÜRWW0µ€íííAC{{{N¢££c;;;ß}÷ä3Ÿ?‰íímøOž_;Si-øÌ &ÏŽV’VHumXMLÚaÿòÐIôWÙœòMæ“ìÌÙðQB²N¼³º7 sðùN"-EÓ-S õ˜Òöë`PHãLZoîyû9Šl+›rÿ#ÀñeȆ²ƒ}é9dTBÔ Áæ(qÐ|ËS‚Kà@,Ί6BV´àc€îhjzzšìâÌ .‰¿ÂÆÍÎÎÊž 5·¿rå Æ–––VWW»»»'&&jµÚ_|ñþûïc(ìñãǧOŸîëë;uêÔÉ“'wvv¾ÿþûßÿþ÷ˆîA1„²þ'Ÿ|²³³sêÔ©ï¾ûî³Ï>ÛÜÜ|øðáW_}544ô«_ýêþýû¼YàF}öìÙÝ»w‡b ßeggV~hhªDDXaœ íèEã²C¸öÕÕUüt8E¸:êhÎÍÍá£ñä€À ÅÀ›BMFKCCC—/_¦fªz8 0{ïîîööö¢ò†9m@ðTÀ¸Kt¬¤…@€|%eÙÇÂ$ ×ÀqîYÙv¢wœ6MÂÙUÀçä: T;|#Š*rð‰ƒ²Ífátô¡è1„³¤ÂDÆ©s]ÈCëq sdFýÒ„9/™Tšsö™}i œtõJøI-#h&(ßKB|„`´Ý€“ÃI°‚ÄkE«ÍøNµ¼8 ÁbÌ.s)ØzTrdýA4ê„IB`º4 ­x ËÊl:ºA˜D“1éÛ`dW9=+€­x ˜$îܹƒS¥n%†–7779îkŒùú믟?þÛßþv{{û—¿ü% ÷ÖÖxå0ÑJÔ@ÿdz²²~iØt ­¬¬lll\½z<é7xªÆ 3㎃ז ËËË„î WD·×h4ºººø€áFß»w‡…·‚Z5 É£511Ï-M3%%vþ•´}CÇýw¡lõ÷÷ƒÕƒ\èØ$A’$ÛN"UX†Ór–a¹me•X¡}°%ìPU:¶gœcqãd—ÕEÀSÈc!»‰©Cca;yn©ˆBg%)µ}=›Ç[~;”òRú&Ý~@ÚSu#œùŠz—|RÔ¸Æbçñ±uÁßIÖ¼F£qåÊ•ÅÅEvM€Ägc€ß‚¡½Ìð3*Äï¹E%] FÆÓ1kƧ°"ǃ°}­‚&IéJä.+QrþW‰ÃMôaèa’*ŠýXòA±ã £ ÍHì"HÓ€¤Vz—±±1x…©©)PËíîîBõJ@1ÁŽ“9•mshø *ºl•‚ûˆÃ(˜Pcfƒ9;Î+ìììLNNBiyy3Ÿ~ú)åö0\†ãÈÎ?Ó2^êk×®5›M ÃUňÄ_wvv 'uAx+ ž&†ßãoÄ@o³ß@  ¤°mP'ÝÛÛûòË/ÁQxõêUk¼—íg݃|õª1)¿µìËÀQÕU¹XîA9䘔18ö®uÂO€IEúŠ:0Ùçü:ª€i±]¨'`ZØONÂù J6zÌ·U;"1rÛ 7û•6zAVñª;ª#ƒ5sPIÔV@”]>ÎÍáeRFQBUžáCïIÁT)1¤ö¹iÔeWx”Tcжo´ù6TtÀAg¤ ‡Úí|“¿ÍUýD< ÙO•\-+99žššB‰™,8âGÔÙI¡Ï¥Ýw(y”ƒXßç¹!’ŠFrj_pÕ…B×è/Òc°v'ãA&ì"°­BzXCg<‹^ ú%”ŒÇG€š Þ˜„ó))¡ú;;;ccck€¾ >%˜˜@:²³³sëÖ-pe£”„_6~&&&@xõêÕžž¢np´‚Qk»jµL$°@rBMrÀŠ€éb}’—$o%2Œ›7oJÛjµPûBûÅF"Y¥W»ƒµATáQ&&&0þ½¼¼|÷îÝ©©)(‹à òÐÙÙÙjµ ù³¹¹yåÊ$ dÁãļPŽÈgUL6BĽQ@Gö0˜^ÛUŸRũژIMöíxÜ6bÒtDB’ì Ê>TÀîù…SuGš1$¹ÊHônX‰;rfÄ©;)­Wbð¤0ðq޶Áˆ¨!Ù³ö´Å54'g¨%Oð8{!rhƒºðRGSŽbHÓ åæyd`Z8™ÁaŽ5`àêÕ«R/^&¨¥@ŸòÖ­[óóó+++t~«”¤ÓÌQP‡œžž†µÅË0ÁØœZ§¸A»ã°¡šÉºpá ,1Ì÷òJd0ç?pb,´Jd'H®8Sæ›sÄ5D^¥‚q9Í€×P¿Sæ2±“  •A>Èë#ŸX$jrÀÍ74àl+FŽ4q¨_PþÛµÛ\–ž ´ “ˆÂ¢‹¯8o¬s ‡â /AaZd{KŸW*à9œ¦9éš*×P´Ÿg)ÉIî(µH–õ9}f´šF¶¡lLöíë¯FØ|7ÈŽ_”ÛîAŽ>‘|_z+Z­ /´÷“æ6HjS³¼Îÿòä PoAÞ€òˆ,³pšLŽyc.ÁîJ»,‡„iqœ'݉*"I³Ëî‘ýãm²o·L,Taê-˦ªTµ>gÑOüë{ï½wu§)â IDAT÷î]9Òˆ¿²0ˆÀÔciãeqÒ7¤¦’ÊÑêP…\9CŸZ©n‹ÕyãaM>ÚÜrý†ö~®¯èKT[ÂV¤–}¯WVXt6CR}¼‡o[î=y§ìаês(bÂÛªaf¥‹+Ù d­ò5dÇÚ= ±L,ì€]â/ù$Ƙ×_TQ$Õ@Æ ­6Ù8ÔqhC‡‡l!ÀHïŽ)n‰°"1gŸÕV4aÖ Ÿòõ9 ½ˆq‰ÃÛÝ5µeÂóÕÎ(³ÐfƵ¯yè=_wÞžrô•Ø Ëd‘覂ؾâÎö½ƒTc&Î_>ô²-¡Ž@ú¹°,„Ò£&•Y?Ç•Ywv²ûÚÃ>fÚH=+jHÛÎ`ž¤R£*/P˜Vm»é"§ÇiD€Že¥K¡¡0ΆãÒ5z½ÎfÏÅ‹Ágö‰<ëõ:G‚ù}Áƒ{ç΂gpþÔ æ’C@LaPX ôHä5ûé2IB—ß ½q9ÇÎyr|}žÙW£ãø!ngÈà…¦U©J­4VÞ1ß@­ŽÖãûz$»nxêjµ!œ}A×ÄìÚàÅh\Q;„ÁLœD£Ihœ"´÷DÛFᔘGAÃm¡>Èž`îí“´µå}Ã[N䧬œm×0…ª³KêÃMùÈÃÍQ²«Ê^Kc6²Å×Hýˆ0ø,Ll[þ;ý¹d-%U¤:výúuš<þvÓ§R+OD»cÌã°ï ÚbF%â[^JvqZìgد‡ÎÎ΢ÌwÑ'I˜,I,ÄÑüñ€ª!;¢’yëÛBïžíx|ýÅÅE4pXzãȆk6›| ­'Qÿ„½Â”Ã@ÃêA‚õññqˆEÃÚ‹ÂÔÔÔh-ðAÎ C¢$áNˆ5`ïÆfŸ#„•”ÐP®×øE®¤Ûà Câ´^¯ƒ}ß¹xUqjjª³³L-çÎ#_7ž%²nH»Ãçœþ["x‹áQtò(T_ëXvᮯOK8l+Ôñm\Œú gJa“vø\WLäþSs¤šÏ…ßÇwê¶î±Í@vã>­œ÷sþI‘f› Ús ÿì¤óµ‹§Snu9½,D.lHôHáSj³«á*e”OâÌ‹ÏN2u;£xÅt6&Nû@Õ$Pk —Ž*ÉWsW6ÔGGZÈF+Šª³Ç«Š€ ¶ÙޤÌ5E$áá6»ÄØO›d¬CïÔîO×ð/Z»’Y²Ö°s(+Ú¨§Ë§ 2²½‰Ÿ²C`“f«&­×ÛÔ°¸­ %§BýjnnîÚµk¤q%3«DI‘Y ^ypubìiK< Kí8»úD^YÍmðžμDrJ€ek9‚@t–个Qa·yäDŽâ¬æ[äu&Pjnn=g§ÌÉæF l …Yr:ƒ0 i•^f!Pª„e+Ý@öÙ“Âq Í{XìªáO ü^UÐŒös²P2#õJ¤±Î@†¥òþ9,c¾”ªŠ:S"§¦«“ØK:sÆÅ| ™3(·³³³³³síÚµóçÏÃ$™ƒòŠ²Ü¯Î“Œ ´’SSS333”oäßȺ¶¬Ù1]ww·œ¦†GÁ•‡-F/ TÌ6û¬y 6UMÉdÏ•ÒxÔŒˆã 8f³ j?™‚3hùpØXyÙ²–#µ˜ã¥6Oåm^¥|Û!œ—‰jôNâhVÏqæÈ/%U¢ Æ¥J3.¨Dà·dØ (L~°›b+áH3 ÿ*É}ñ×­­-ÌdP$GvÚ–——mnT€VÑ«­f#_ì„-9…{g®˜J‹Î:„scUZïëóIs®h„wƒ RK8õÔoìé£p ÎdŠwÚÇVíC:[Ò3³/ê+DÊ¬6Kb¤–6Qç9;Zò„íç‰É¦’—ƒþìFÐvÃBݽ{J÷ããã´˜vg.$Ú‚ííí÷Þ{ïÞ½{èÍ¢¼ŽÐ•7äIUœ—òVR/˜9T<ðeÁÐ@mZ V!T¢š5i¥y)zÓâð<• ,8éÔ¥#´ÜL’À÷Ç‚ìѵÀ’J·ÁN8¬6•ŠU@ 'èÉú +ZŠþÊ"tñ$Ïä7%-6NRæ4à3ÇÃä 4PIÌ%¹‰T@Cú+ÈøŒÁãÜä&ÏJjöÙh@î82µ8­[¸Šë4Á¾2²ê~;[žæ Õ¶±¨6œ7`ùDÙ…âB6¶˜˜Uç/üÍa•’ªÐZ0ë¬É¨HÌhEdÎhÔ?œ%¬À„Ê÷%/þF‚Áë€Z K²¥”ãðÈÔëu0¬É‡ØW6‘Y‚$i`UÄ.©)9J³)ë©F䌛œû“®BfH¼nàÎC… gÕh4¶¶¶PÙ Ø—d0m Ö u¯$‰ 9:‡ÃrrBVÒ·Å¥b¶ª¢¶#hôeáŽWŒ—ZNân„®»9Èž"‹Q¼¹ ïƤˆýLÊŠ¥ÙÅàÛígÀˆáG^Æ0·¬ŠZÆêŠfFÇøÐêjRÄG„p4óXmæÇ_ß—=t¸ª“;0ìÛm·æzª~”¯íî»4UhzòRÙ³ïv&«º[²‰§rgšÊ-p"¸–-DBŒì€ˆO„ó ež™™¡|‚äÑ3BV¢Ùl¢àÐl6éi{âNMMAnžBÝ^d43ñÞF££‘_!$CKP@ƒdËšˆLêÈÄ‚ð¶×_‡/‹`i ¢ì[·ná'ŠKÄS"í Â^ü”¦PÑØáÞZŠ2PIÊ…) äF¼\w±õ*£60ÈHÖ쓪ÁP+iì7€lž³ÇXªLʯ ÿ»´´„›‹³²AqxK__ø\‰(à ³ç¬â0b”U"è á¥<ƒ)¢¾°÷£Üw‘Q6 ’®F Œ6^ÜÆÚ51»ž©RÉú“ L _.¥îpt¨¤ø3ö‘¤KD³]S+¬YšøN@‚Þñi´:1Å‘¨V{ÂÆ×ÂIä+ ¡,(ª ‡18->Š0ü ·®D4± T3ðKø d0s}}} P£d˜ì}‘¿Ð öxžS,åïíímYoccv"ËjãIÚQ”Vîß¿O`Y˜`O‘&R‘‚×–(|/œ3þM>(¢qPI“-+PO³ˆgR‰às髨m‡“¸‹ò8,냊Õyôõõá]”N♚šºxñâØØX½^ÿã?þcp³Sr•¹,©“‰`S6Pb2‰üàËq„{÷î!•Ä…’Ï9n+ÿ‹§WÑ‹)Ñ'¦ˆßÙí³ß¢§ýuöÿduÑþ8|_9|cgí¼¥“žÏç œ*ÌŒ«ýÓ³‘€ÌCï1ØÍÕë(ôHª¬9!h6H40ÙPȶè54éœ$€ª$ã ©E%QŒ6u¾Ètyá°òa•J;h?Àä“òúÞ½{+++¨]Èþ*î`Y2&l}ê6À>J5`³OÖÆ­È¹ ²ÿÃîÀröJÂj8ËÊ5Û¨ÁÉ€õ¹S &dø¦×¯_¯×ëÛÛÛø/I@áänݺU«ÕP±·ƒÇÅaÍ™ÉÚºlÏ‚žm”wpg™s°˜ÃÝÎ?©Ù<'ýýýƒƒƒ/^¼ØÜÜÜØØïé åë‘´!v½|/ÆI¼A«©ìÄ[#DX-Tz¢1a÷e†c‰¦hÜÕÞ’ö<š|—-!lª:ÝŒ=[ª6¸/ÆWÏIïaK~9‡ lóå[¼YÎ×û´j©ÃÍ1ÈÒ‡98—àëÒ8[ö¾IHgHù[yÀÂz‘ºÍÎ!j¥p`‚òAjbK&ø|Δ|+Œ>É ›rÔÞáuwwsNbbb‚ûU#U ÀÔÌ"rèsÉú>L6ŒÅÐЊ9ÔðáVOµ9ÈÅMW‡Ä‚y­* †%’¥sÀƒT™%¬?®Ñc‡S„9f{:Ò¨äàBQÈ}ÌmÀ‚£™Á;N\“R¤€Ýd_]b8 .'Õí(’3ÕÃ`»E"µ týå—_®®®BU”ð%`ÉêÓþIŽ:1uÈ:˜¼ª²%&¹ÐÌש¥ì¤¶¶!XÊ ¨p8 BuN¹ÚãÍÊ[È“§ê”ðt2¤ÚZ/>C_XVRÑj8W(Ä E N‘cpª`Æw–䕵é£}Pu&äýƒá¶?Ý9-?BêÏØKÊÏ:#zû<˺j`ØäáŠA}þ®|Víe[˜ÙÙ`ÁIÑ\¯× ¢©åùÐ €L‚× îoi6›ÝÝÝì"°xÍÞ©ÙCS(,ü’h]ÎLI›H4ŽÚÏøšðFˆµa+¡Fq4üd'Y¡‰Ð{dÑŒǤB¢q'œ ýXøƒñññZ­†Zü]²óYUO‰ê¨”1æîÝ»KKKø"ìâRç•mg>'(óéÔÕ+WŒà”&A:„+p#p¬¤QGšŸ®Búuß6—óÕ1›QMÙ¨¡dÜÖÅ’¥¿—¼´ï²¼ã‹Ç¥ àðŠN*ì°o º§aóŠÜâ?NFRg­Í›â¦JãœþBž>9Þ)é𜽠ç 9ÈÔoSX;_¬|³$a&ÿ($HFÉû0¹!'¶T¥·ß”¾tØ0O³³³c÷ñœD›¼$iþœt{’hOÚÄœö0âh“°ßÚÞÞ¾té񮮠d³OÀþR6¥öøøøÄÄORŽàÉù5©M„ËHóÄi;¥$Ÿ:ŸlŠuE°*I %žGê;‹éÏiŒÔM”36rÅ–äÅs†)¾}QöãÜïJÏ*,&_häªU¬—á™»£`W5é3‡>ºÄÒóŠU,xáä¤÷„9ÀcdžìæÜZïB²LEJêÒI $-…ô1¶`,ŽäÐ&Ç5ôåACÍÓž˜˜ç&Ǫ%ÀÔ¾z΋lOüÊ]çÔS•e~_ʨÙYš?5a.yR1¨ŒžßŽå)Täx@^'-£ 0å]¬VÚe~M@ŠÕ ´Ô¼›¥ztT¸“èU€ÛcÏÒ‡ÑU0’ìßT— :ÆOú›ªhVú˜ Êí2çÇ™ N`ï‡UclZŒž]Òz´ÛÕ_O¯Ì“„¬<+¹u}^ÍL"ƒ³?&7˜œÃ`sßX¼ÔË"¾=Lo—2¨*jK8H‹@uú±)-‹²æêÛ™ƒÌÌdq T%C´ÒÞÀÊsã P1µýe¥{bR]Ž×A¾Ì×Eó%vü\«X^|yXÞG:°‹ƒDûdÿÞÝÝU2«ÒÊ|Q‘Ó•R0Ãn«t_åvê÷…àÃ>yµ%¹K!OµjËŠ¡²(Œ#}øÉ'gâG!Ôc¢IÃUÁ›9ç¬J@`.&+  `Ãç¯X’œáÌÌO©ÈTæ’aŸÑ½qÉ¡HiÅ`\Òפ›Šúmï%#Ÿz¶JŸå5ö2ý«´ANC£Êý2¸–"9}&ûÌR‹Bž³ÌE佄v±H"œ*{¼h_3ÆP;¨$ BÈâ dÎa+‚¨èÇ'lð1]úTI~"¦\ìû\ge)\°M2ÁÍXÚš…#)áã—=:®¤Òæ^ʨú0©N€¢@ b;ö·‡ÑTg)F!–O‰“wE‚ý1ÅÓ³uûTK‘rËiA_ëBâ18`ÅÒ x/°±)^M„( ØÛ$í¾ñF"p&ÍLØ'¥¾D “J”Ž$6—x0’(°[¼“ü(ð fLmU©G­ a\¼Œü/Ì+Ùäkµ\ð$»ÅË—5ÛÅFðËJ*ÎJO¼¨8†j9‚•’ÔKKK8>ˆ£€¨ñS”qV¼G/^”’hž)gÃ+O»ºÅ6NFþH0'×i ÀÆõÂÊg4œÿ–ta&‘ûÚçÞl¦Ÿ@*£&®|jkÉ?Ò×÷]^æsØK‡Û…=Œ+j[–Y«“|8ub\½] ¤–Îô¤í´/µ¢åÞ`+•´¬ÆRóõy4Ö©”²´±!☎ý<Çßÿ@™]Z¬Ò+ Äs%ê%ö‘K$@IyL¸©y n…™„ ç•6àL‚‚}`5• 8/“Ä&K\l˜º…i~ 5[†…9ÿKh ÙYAŠËbâÂ>òeSûËæP—³F{ŒÂ©¼ D{FÃ300Š:ijŠY3´°)F&‰›“RÞJÙîVU δ¤Sç'¸7œº†F0—I1spÜR2zÊ"’¤©˜žž†•—3bø÷ðð0¼ÂâââÌÌ fßnÞ¼IŽU#8n9Ú†kE#n–T‚€‘èÀ+Œ«Ù ¤)ò>"WÆ}Á{9HAp-†YþrJñ4¤·ªrsÉkâDOš}\r`-Sʧp®rP@FEvc‚ê,ÎfaÀ©LÆ­ìj„-›Cƒá‹† S(es¼ Õÿú?ùŸÿÛíÿøáÿ‡ø‡£ôêûûž¡À/U^ðN6§ˆöqž’&|çC`²)Ô³ý|«‡Uª°(µX S4ê”ÀÈ=555??oMŸ$_cö9Ô  ©s*žV^P¾—_M¡×I;???==iç™™ž’|£²¦²ziS^ž577º:¾’ŸŽã»æææõL¨Ëâ¤SÕIò0yòe¼þæ ï´]¿U¿™™™bßzß#xøÃ3§…ý[ç“}M.ÊxèÚ’N&þÅ…V¥ôÕ(ñ6*é?~øßÿó»ýÿü¿ÿðïþý8êŒÁY£—¿w’gÜ â% £|NÛ¶ƒ©Íd%E bs'‘†}RùÙ&U%²R[$1à ¥œJiî"Yï–ºÎS’LÔ~øðá;w(èfÎß!œ”çÌ!gŒÏÌÌ0•|;¾°õq’dÈëƒÙ´F£±¼¼¼²²Âz YÑ¡%™ØPQ…í‘¡1ù?ÏÌÌ\»vmuu•ׯ\YY0 a8 n§OŸîëë#3eËÔD•Œ’ÇY&l‰Sô^ä†RMc^Õ’\NžÊåååf³9;;ˤ 9ÂF.yò>á0[¢<`¬íƒlHÝ4{ÇùØn ƒ°;‘qƒSV à‡œªŽ‹çT*)ÉTq?¯Ì1ØßÄÙ3 WiìÎmaÎås­2[ ËqJ¶œˆ/•öõÃY UŒð 0*¥ä‡r“Ûá§j;[èæ UYnX!ˆ…toœ°EüH¶ ²JAÊsÕ„œæåt®º\“ ÉSt„I^]]%‡Ls£Ñ Í\½^gù…¤ª’ê§^¯C“ÒìkŽ1’Íwigg‡FÓy,ÈLNNRãh{{{ww·Ùl’1ãÊðR ß WfeÏîÓ(â~50Å*¼Ks²Çì䵿GS%·”!x%F¦K±Z4–’«œ’ P+)PUZ‰¡Ñ,î¥æyLý'BQ|6ƒãäß”ˆí îk— Æó…¿ö‹‘£°xRÈò!#qÖXíÙø‰.d]%ï1.ž%#ÈJí;­6ª/)VNËg¬¹“U‘'Ï7±1²Ç¨è}±/‹rž!Ã=¹O¤=Ó‘{÷îÑâ$%ƒ1eȸä'NNN*FRöì*3 å`*e÷o”ÿ†ƒe„TÜêê*‹–––0ðeŒš“²É@¦ª \i1ÉŠ´Ÿ÷0==½»»[¯×ÑyBWl"FéHIÑùØ€2wI•tÕ ¥²ÙPˆk’ñ©·ø8Q,/Å*·{DruÊ€ûHå|鸺§1Cgv«#ÆÈŠ'ËL:Œ_39ßë«i¼‹ „á¥û¸†|ØO5\Õ~†Mu3dÕHújÙ'F"ÒQ– =¤óÝjxNÓ(Ì«×gg•\ñññóçÏŸ?¾³³Sv›i àx0‚ïˆâÒõëבÖzˆ7èúõëx1z'løó°làœ9QH„‚qÑŽÙƒ;@-Ë®êr“ôÐV!TE$_Èøåb£‘/Ê”Í{ÏÚ̦á°ZA|ùDØp;;çþ³lé+)—Àw,w;?ÔY’òä(›Ï¾^kLâ“Ôs.×÷šÂIYdËÈî:úŽ©º‚¶¿‹=Q˜ amÊnY«žž¬}£Q<;;{ãÆÙÙY6$íƒËÃ*~Js\Únãû:ŠêÅ{'¿?‘­iùuØëÆ¿ù.½d‹B†xhq³ü‚Îüìì,. {à²Cî|føAòPª?,;Û hÀRÿê ÇPñKeñÏ“­d"Ô0|†Øç q‘ð'§ìx¡ÏûÅ€Ó Ÿwàìì¬BìØŽMg¤u°»¯ÊÁÈ2 S?Ýi ä×ô9ìïy‡ä-ü¾áMÈfÂà]ß§L‰Eát Æ©”!¹4£j”ݹEíêvµ‘¦v ¡ „ZÒFò+Ë"­*‘µrᲨ߫È™½I8©ü8&7òÌ?øbø •G–§j{#º1;à>8Qã½¶¶7„K(‘ŒÝŒ·Ô1A¤b^Å”µË¶–CŽ‘cð¥¥Ygˆêc"‘¯„y’•Y!qÞhùÊûbvUÆ‘±¿3ºôùÛÞ)ç¤f • ´=“*ò8ç!|a©tô.òüté{¤Ý7gTÊbOuÌÏÏKc;f%Pã¬ÝÅì5ßÐ¨í ¶µDW˜:8K”1f4¦(ä«h?œŸSl0EJ×* öçèC|MãÈJU©®Åù)N˜S8é³ßsq’J–¶á–Ê·ñ «4Ά„Ó»„CÂÂŒØö.vQNtYÙ°¿‚Ó©ó—FŽæ)ߣÆmÇ#mœýKûLdñGŽ bÙ1ŠœÑã%’ U4›ŸŸçW “Àä<‚Ìlœí¨Àó ¾TLÕ(>¹©õÖ…âãôÈ(>¼»«´IÊõ|ƒ±I™WPJJ7/gñãgž“JáÊuØú£›è3ô1Ñ*ßG¶¾“òh;vV¥ «X²"/S UÈ–X8Û_GÖ¬Tvâëv:ÓgÁJÕÄX®QÎ ÿ'\ˆ¦_õä÷¥Ûp&I<+ØzŒXÏÌÌpÖ/XXXÀ_ççç霿@*¯¦¯³ƒ`_È6ƒó—‘ŽÔÿ¦Ö©J[6ß¡ ƒ³T~‹¼ÈDZ””šCí¢P¹ä >î€|¶Rbº¾2E9wh÷x,‘Ø-ÛEÙn ü^Z4Y$Q¯ ô“e´ø*„²ËVŠJTo@ž’³©à«¥ oP&.üI`Ø8…‚ÀéQðo XR‰QØvÛà®pWÀ—«‚ýJ  ‘~I᣽‘KD®¥»Ðá‘ü¦áàµÄz•Ž¡Ð¯ÊsÆBD>”%Z7¾‡5à—ëÿÄ?ÖñCà…I«Ó9·½ýÅUoÓW–G_ùXUd,l—k"avaDý×>š]‚“ Ò@·CkÕȵ/fÀ=¨tdaaPW}Ug#,Lx#]2ƒ………¹¹¹>úèŸþ韘=Øø=yÙ Iakè#®/Üqå:Ìa+äËöÚè "¯|j+>’“¿\Irþ%|œóîrK1†R¢‡!ª‘•¤ó´OÉX“Ÿ>µqß—2éž;sRæàLœ=ó"7˜=ÿ©ˆ†ŒgÚH"ò5j`PAP(Gsýúu5Ø©æ¤Ìþ(+˜è¶ œ¤Œ‡IDATÇ9Ók<Œ:öµ¢±æ™9(&Ï_Î{›ýigNÃá 9]hĬ%‡Àñéз*ÌÙ@ÉUE• |¾¾>λcÖÖÖÏŸ?ßl694ΉÂáááZ­6<<¼½½½µµõÞ{ï½ýöÛ?úÑZ­ÖÖÖÖÐÐÐÆÆ†1fccãÁƒwïÞíèèÀéa[úuŒjªÌÕ&ø, óåh§Í(KÚS¢ö°›o™çéS„åå¨b‚rnÜ\ù¨ð]Ô&±?. ÑhüT:HŠùeÕvÜ‹Â?…Nþè3†02'5÷÷‰11… >áªK ðµj£*õô˜~Zaõ,ùàƒÜ±«Jø|hŸpE;ÜeQˆLU ‘‘¸3u6`½wÙa­_>`ÆO §fÊøÆÛ·oÏÎÎÞ¾}Ûî{3]¸}ûöÔÔÔ?¹9$Æ — `ùˆ“w8R€éW³…]4¹Ô_¹4ºp ÇO•FÖ‡#‡XSËà©]⊘d)©œÍ-½ÄÙp}¦Ä ³‰›+,‘©Šy¸ÚãìFØè£@ú¯^ïÉb.oÀÚ†Ûn ص2ge‰CËÎL‰CU ì¿ÊfoTƆùÇÌqe{ºØX0\çÁ9LþÑG±”$'´ñ”†nß¾}ûöíþçþè£à繬wÑà¿pvÛùl8#ávdµÇÆnv½:°mËÍÄ—Ž}&HmÛBn‚vyßù(ÇpÔ n¾suR Ù’ÅN #ŸŽk¡,s!y‘ïƒÂo±ß£'®ä˥ƖRivJ%ÇÍ€î«ú RÙ&åöÉö†µä”+U懆†&''¥àšq©q9Y2²µ±œrr*Ú•ì³R¸×„J×JÃopþJ#ÏìkœQÃY¬ðvMphhèÒ¥KÏž=ÛÜÜ+?‚oY¬1æÑ£GcccÏŸ?G êu]]]ƘÝÝ]\º¾¾¾Z­Æÿ’pÐ.#ø˔ܴ­Îí{{˜ùØ~x’6£±´ÙÇD]õíoŠ’Øû 7i˜ó®úù¼b7§—sʺ)S ¡³y\¸¶ÿ÷•&š¦HåÕÙJ¡£Íiêä†$=œz¤ì%ì~†“0\ýÒnÈEXre«â/¢)õ¬ªã³0+Šër|>Ú©l¥n7¥+¥W ²&þ$[Sdù–q… )Ç{7>>N?Áä¹¹9hÆ™}úRòx³@ eÖXÈ–:===44tïÞ½þþ~ø¼qccãþýû¤5ÅkÈ¢zëÖ­®®®'OžcöööÀûøñã®®®ÙÙÙþþþÝÝÝ®®.pÖjµþþ~p’žg›æš¬‹ŠZÕÉ´*Í´lÚ]«øZ“3Õ~ä|MG©;³ÕVõ™6ÆôŸð—áoSš|ߨ ãøPb”{}¹*PáR…_!Ë—âÅ4ß õã5–ÀÇÀ¯…0RÁBÄÔ÷ÌA96›ÆN}_?ÀF1ÉʾósÃt{á"ž<[€JQ“Qω¯¢¢”Ý䘛=±¡$ÒÌÁ s³j››»}ûöG}tûöí……Ô—>þøãùùù¹¹9T8Ü@ØRa‡©°Ä‰‘4Zƒ)ë!m綉oTIÇó0¾”ŠÞ^½‚›í$K#½ldž(Ä™*ÿë¼ÙR‚J.]0ET·á ÑÉh/í¦Ê-¤¨–Ì~Ê9í‰éÿûn±|% #p£5äø!Ùµ]­¢Š‹Ôa–¯n„óφu½úŒ¡b·¤\ã¥t°4ôXxæñ!†Ý,u6Ì}@'?þòJægãá-Ì'|D³Š\ÈÉB˜æS 2ß4œ%c|Õöe-ªè|Ø1V—Ñ:æ Ðû•yƒúD'Ñ·M©-É\Iˆ$gÙ$ †q͵9‡W"){¨‡¶»°ª•IÄí8sÊv¶ö.…—VH­ËÎù•e …änøºp^¡ðú:ƒßÂ$18;Ãüp\c7cUA6 Bxµ {÷§ÿ¬¡ûŠ¡ª|N¬ì1(Uú9Ywœe.|"Âp|(ÕÈ^æIþK¯@5¼‰‚<ˆÔS’ñ¬q!èÍþÀ ΄öÍp¶[ybÌäœÄÂÂB³ÙDQ{ttTÎ.lmm¡¼¸¸¸¼¼LÁ>걫ù9 ìÈÆ/„¯å$ ®!¤C!7 ¡:ôÑ ŒïììpXDBãU¶DánuËTk¿tŠS…áü¶ø•êç…ÇböuØ\ŽïÜA> ^ã’B³+Šá¶¨Ý#ñ½²03ˆTýtÞ&÷‹ÆP=!(ŒwL‘ìARÚáÕNíš–€ã뿦”úBqq!¿·±Ø‡” ñyh'ák Hmse«MK:kâ) ´ÕÑlé$ùoâA©Q!ÙŸ¨3Áai•ÙO#ûFÌTûT.ä÷úÇüÇ……¤ G"7_¹ ÕòÇèÀij_ÄÌÿ:½Î»ïìê…3¿ÔdÅ´Ä3ÕÔÄšb๯²Ç$mZ‚«Ä§çl?0Þ±#n5híkŸúNI•õ agNÔ¹4AÍq»Òj·=Œ‹#SÎ];ëã&È3aƒšœêÙf5ÄK™¢Öæ A·Ô7–Å}ëÙél,ós)oi7¨;ÍhÇX–U¶‹ˆ&âq DúðáCàzÑoh6›f_¢ÙƒP_j êÅ9àœq¡¯ÕjÔm–ˆ ¾éÈòòòæææÆÆÆððp³Ù¼ÿþÎÎÎää$g°A·gì¬ãÉ™v¶Ÿp¥&ëìÏ©ƒøL¶_dwœh(ÕOâ“_¥‹ïÉ|Qã'2®/7â¡Ô´÷cÈMÆP2T(+ù>úkSÄZŽÉ¤4³£ú¾ÆÊ@‚â»÷ñ³EŠY¨°©PȦàl(|ŽóûJq7[Ÿó”le›<Ã',¾õ¾ˆÇžà“i*ôÆÄÔ»ìîŽRý4‡½#ád&nt¿P-žþ²eçcZôø©éx‚ÕÂýŸÄKoVlrļòØM>GòßUéÉ2Âû$wJf…¬¾/fHuZäÈ#'¡úbªFöõ‰×UÞç´N×Ü«{¡ >¶Š€Ìÿ”º\êÞØ8©~ê#Ó-ŒfœÛ;pÁSƒ_g¨-{0ÒŠEÖ- ‹‡¾rn’rÆöe䵬Ò@®ØÇ·±Çäó–«ÑÇ?åa—[â±K5Ð6b§µ\$⌿˜ñø2q (ó1))ˆ[ËQµ«®ƒO³ðaH%Ký %©}^¶X´ jg†Ÿ4IÄä‹NÂö+R61fï”k’9S®$£_ÓXšlµ-ØÈÒGöqØ;Úí°ë+wçJ(ÙÐõHŸO+ä3©1©±3ì |Š­WS¸ÿ_ˆÑ$r„ŠW1öZO$Ý:Iß\@TYÉ-(é'S¬s/ù>¢°<®ˆ†Y}˜Â“ñûËð°/²‰>'à*ôU…sÛi±MPc'&_)q+KPšG>¯À1TÇ›D„L•{þÜ*ŠÎQ€Â/˜ªC’´7 å×Ë%œª¢Î°º0e±•>m#fô³OÌW»·{3vJ¤>ñš_&n~>2€\óÒU¯Âº|ØYVŒµ#[1eä€[ao£b…'½•ækp6«TÉ^Y))•¯´°oôÛukKø›À½Œ)ãú$¥**UU)òúø'^ ZE*^h,œ 1IkŽñðÙÂH_Þ< 3lG† ÀZXG¶›Ï‘éZ‰šƒ‰à.gì M^LΚ¤NS¥Ó&Œ¬ƒµ·ÐR:ö=^CR9¾0z*Ñyk—‰œ*H +ŒkJ?èIIuÌÖrf]N»oæ|ù«F>à  âìwI×®Á+ã6”.؆‘©I†/Þ˜: NÊUŒ#sñ°¾EÌeŒ9¥°M £^½c(×N([ˆ¿»%NÌikb_u¨ºbT|æ¯Ìe#8]„EçxXa˜TÇ&+ …|~KÙèHc'áF&BÝχT U,†âº®û¬ó1ðY´˜ÝTÒzØ´©…C<NíÕjWq8ò Gêbj‚‡Í.["µƒ)»~꣢‹Ù3‘ÉS¡Ó*;r¾r"ãaÔ–/:vb¢|xИž„o.L½,0â`"x «jñe„ÂA³¤(5µÈoëìã1NËT€¨ø^ÛåÇ4)S«©¥‚ÀƒšZG*QïŠÍqœc(7ÕRø–HX}ê ÄhR…1µüu4âˆvª©HQ¨j‚’ ¾®¦éCûn“qÈWIsfx…ÖÖ9“Q®îÓÌpª™:Ó\ZYÕŒŸ©.¬£–;BigƒŒÉnMQ—¨-{Ðw×"S¢¤;¦n¥•¾K :U¹ÓŸú`UÙ áÀ?2%Jí›–¡Rƒš@é ãÊDñ¹yÌ%òņ*ã ŒÝE&޾j~¸Ó§)ü _ -f×Ä´‹LšÎ©ì]:ï+ÕbŠoä«-Ñ›cN‰Ñ–Þrdý7•95æÓK s—›Ú+Úû6LL¢Zß•D]“/¨¢Lñ‰ºrúÁÎTbìT*Ö0‰gÅ9þo»cúX¥C±ÂÛ]Ø)Á(cáªUæ »î¥‹BUš ¥g¶#ó³Wã’èR#»ávŒ±N {ÇÇÛšÂcJèNŒKðm6§ Nà)Œ¬§îHuâ,'K~äŽ cêcÚÎ3¾÷æû8“r¹rNáüTÀOWÄC\ï!Žš"F ÅHh¢»V©›±]fÍÆ T)U™ æ3ü`WmK×!~üؤ#ÀbÓbp5I»1©Ä_±*Ox™–•žuó†ú˜”"ƒð˜ÀD  ¶"ÓI‰gµœR[¼n/ ½½|Ôíê?W1 ËÑ¥ç0ëߎcˆ/ŽûFa#«Lñ¹[éæx,Z¡”¦ÏE•ðŽ1YT’Ur޹ò—ŠÃÉÓi<ÐrS4JVøØDvžÂ Ä¿ñRáÆL[æ"¹=bèRA žA|ÉÔy[“x—­Ž*J-IÁåa°v‡ßxìšÏ‘2Þþ&µøJ»Ô+n,"ÏÀ9ÆhIôŠa-&Ó ìó¤[î:¤òº¨*qq•PËn½:‹‡>–:C`ŠH‘Ò1&¥IÏQN 0f嵐]¡ÈÌ>Ææ”Å’¸U*áã W-‘|•ˆ¯SëI<ïI221¼(…ñ~*¡Þa€ |WL‘¤–sº1ôj*Òôµ +³a`¾]¼Š,ÁGúBßÃPP(×à)W*·M**fÒ¾©Õ¤ø¬4`´z‘Z®l{=-°¿Žï€[‰ž]7lûD~EÄ…³D` Θ""pÚ‘—¥R¶ù1Ã¥}Uª’mL_=R†Ú¤÷-Kw\«ßT#&½(œSK-t¨›b³çÆS‰„…LÊݵÕàrfªte)²H[â„QÅ ÇÐÞÍfÚ:Ë“ZŽ7‰S-ñ£³úL˜Œ(Kî»P©\a’ý4·BFç0ÕFfi™"󍩸>+ž§62uH)øÜvx~’¯JížÌ˜ZtjôùÊ# œ>vŽ¡½ß¹b–Sß +º”Úâc’Ž`³ÑvSÕ0z2ÕQUyZbFíÂaߌK 7I¼äud™%¦—”.†þ¶VR|‚[E™ùø¥Ò¤#m?áãåÊaZ"I #g@’¦i"7¡ï!•@´ÊvM²ãÎļ :"•¤Äw‘Â/¥€H³[zä*¦…^±ήû\]Ò¸\ucjׯ+²¬·Å4§¶¸ÂâØ¶ú“IG(g â™Ð’>ñ‡ W lo'íeé[ )=El*7"W@ Ó9"ä`â§7ËQäš ½ý€Ír ¤ÄpWÄk[ú¬¤Ó;ϧD]"i.7ÀòÖ. ~LªÞ>…þ¬z4f» _¢ZŠaudJŸÇQ¨çÈ2»¤7(~Y<’ÒøÕ ªÜø¤"r bŸy´‹±ÊSžô×ÈŽ«‰`4KeóM½¹…W;†1)‡«¨ž[úq}Wow²YÄW&M4?‰àŸˆT[ñƒ¯C„èÌGžçqq ‘ ૺ;U÷£ wc•l1¦b[X“ߥô˜UEçZb (°“ÆË“H5œÌ"I¬Ý1‘~R ¦dR¦Ê%=©õÌ’•°«#Zé0ŠKcÒb'}µ°3¨NÇy±õ1u ñ~»0$·¿åª:IؕҙC©¼\m„å%¥6@Öiݑ ÚÚ¬SÎsŽÙðñŽ9µÝ½–kÿ$í¬˜WLÐ]Ñ¢UAÓ¦Z›Hö˜ ¸ª2Å–”žNMMýé1„ÃvÑ`¥rJÇð^Ø/(TTŽa?a…ç^Ä.¦—&É(gdÛ2R›´yb´_ì±ÄÒ–¤ç¿ði,4å¾nSé|¢´&ã!É;Î! {Øyv|4YŽÓ,þÊ¿úæsEù„ÂÊx¹SŠ4ññó¥‘hÈC¥oL½Œ&N3òž&aŠ _SZ«Š2`a¨Q˜˜ hÑȦ¨¯CP¥vÑ. ¼ÒTKñ›®D™jŽRو㋊ñÔŠ1eÕrW‰¯9C`b¾ôó%æ‘Hµxk{U0õS"}L|-ø0 ñÝ‹*„]·­Aç“•NⓈ1动¸-*¿GP)©è±ÚÙÓŒ¡Ê],mÍ#“.t|©ÊcÔ^Ò‚f7¥¦˜/V¬LzþSÉE’ŒfLö–Z\ª¸³ª|µ]Æ·—Û ¸jªxá± œM0'FG!5+/ü”0ô0}/Z:Õ;¤Ì=À TB@8&LnËæ⤊C„a ¶Z|¬z¿µÖTOþFaÄ]|>Ôö»¢äL‰õÛ|vF…ðcP¯ƒêŇËaxý|—¸Jñwa„ÃÿS¡ºÜPhÍ\üìB*oOéA÷*[‰¤'þIÝøøJT¸„àÄïÉT,>*MÕ5:Ê‚J¹©¯cçJW3«g ©ª)‘Ѻ1?),*!MišSG½Ú^õªR"+a.Ã&Žì3ÞV·U°’©…¸HàPäù"û•冨]]å¹->.¡×^÷ñÕcˆJ<ζ­Ç㣓åÉ’¦RcˆÒªhKT ™M‘hø•Iaf•D$2DH­<Ä”> ‡÷=¾/eW®«Ç¿aÁÚxÍÑÒ^ 9Ø!¹“î!Ub«D¬>ã(íYn& \úi‚”«Õ¹Sbʵñujg.RæQf`Š/w Âqe¹Ó.44…Ô§…I•¯ø©;_.¸‰/4¥¦¾µ¤…»2^v¢b}¬´ep¶ñSaÙ%œÖá¥%v}à•?T¡ž˜½Ðü2~ÌCêÌDL?3žÀ”EIÅë¿—{ªÂÓ~o–C‹T…µ:2²ð½‘1ZyÀªD?劄m—ž-Q‹«~§b’¶øPïè=3›I,#í*²#ÇpHœæmÿ S–å<)Pò‰ðDÒH”0CŠÜ;2bMåÍ׬ª`Ÿb¸lK0Ú—ð {$…hŽrf-m)ט ïï²Ø¼íe…Kb0+ÝN ã2b >GÐ¯Ž¿›?l=†¤P(µgÐFªáp#: Â\"¨oËs–ÚHHí=Ä·Ô"-Wá4\¸WQ‚E5ð¨”N€H ëœw Ï ”3p©<Ò©éKÅ`6°1}¼Ü©!]LØTEÿ ´¼Õa°‚Ư^ó9°ÍRÇŒãóèÃg›ò(ãpØ[±ÚPÑ9¤©ÔÒ ¾+‹ˆœ«³‡çì9 î©;– Þ+‘³Æ”XS#Ò‡7ùÔö2fÛE)¿ÿ¡öÊý2²WDD* G‚RÃ.n›H½IßyØ÷bnD9rûëÀñJ±…¹È¡²oU×KÕiËãoÝ Y›"«yåà°‘»2^½DœêÚ5›R‚­ç1Äçãå‚‘˜ Cä­*ûD>…7¯P)%i"¡DnkÒQ^©©q»x¿½÷‡„…¿ ñÀyÕê(qgKÃ(ÊU¨ÚÞ2GÒQ¯Xšn»v‰ãÿšÏíBw•#[­ŠÉbØ{â3͘ÒY{ïK•¶J¶ë“®tŽËJ}’ʼn «´RÚh©žøŠ~&}bÎAq©âÉ…°à®ê=ä*k|ŽXQl±]ÆóxI{÷ycª¢‡Ñõ­B<£;c³Êq8— \dg +^µ&†¶bÌÕ%óŠñP|±¨‘iy¨Ô¡r»¬|ÀÆÝµkð¢]&µwâçNü×ÿù˯¾i=yô]cðÛëׯ›¼òÊ+¯¼þðÖú/ÿ£÷ô™k+÷~uçd¾yå•W^yÉ•C^yå•W^Ù1ä•W^yåå_ò?'NœÈW$¯¼òÊëm½|ùÒëþ¯‡È?óÏü3ÿÌ?ÿ`~æRR^yå•W^¡•C^yå•W^Ù1ä•W^yå•C^yå•W^Ù1ä•W^yåUf¹QI/Oüߟ¹aŸæŸùgþùoûçËœ1ä•W^yå•KIyå•W^yeÇW^yå•Wv yå•W^yeÇW^yå•Wv yå•W^yærÃU3^5ÿÌ?óÏüó¯š3†¼òÊ+¯¼²cÈ+¯¼òÊ+;†¼òÊ+¯¼²cÈ+¯¼òÊ+;†¼òÊ+¯¼²cÈ+¯¼òÊ«½ËWý?Ø¥—ùå•W^yý¬—^Çðòeöyå•W^ ëĉGl9Ûò‰áƒäRR^yå•W^Ù1ä•W^yµi}¡¥-Ÿ>Hv yå•W^yeÇW^yå•Wv yå•W^yeÇW^yå•Wv yå•W^yU^ùä•W^yE®'NÈÿÛÃß·¤dO8?(ðéê¾óÏŽ!¯¼òÊ«ü ßvÍ») ø ß§;㳸iþÓùùŠä•W^yý®ÞÓg´cP¿Í+¯¼òÊë:cx°¶’/D^yå•W^X'þÝ¿ÿù*ä•W^yå…õÿýïÿõÿÜìO§–6oIEND®B`‚saods9/ds9/doc/user/rgb/filtered.png000644 000765 000000 00000647431 11332353405 017702 0ustar00joyewheel000000 000000 ‰PNG  IHDR OyÐÞbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ ¥˜RJ IDATxÚì½{”×yø›žWc `P€©nR$1|¢ø’,Q´)ËM#éØN{Û1e'Ú›®M´ÑzílJ7~%»ÇwoåÊ8MѶÊécxã–G´F¦…ˆKI$EêARÔ@Ån‚¨Â60xÎþq«ª«««ªóêîïðð4jêqŸßû~_ßââ"€{üEHHHHH\õxöË_0 ÃÇþ¤ ‰{üÅg¿ü…¾{öå?öð':órD$$$$$Þ¨¼R}é™ñs gåˆHHHHHHÞ !!!±ü8}êĹZö˜aetÓæ­kûlo8n!xuöûO½csßæÍ›/^¼ø£ù¡­™[#_zfî­‘ùVæ.dßý“r)HHHHxÒö™sµùÛo»­ýG^úþ÷ §GÖêÙhÞ€¾¾àÕm7ß»0ûü'>öÑþþþò§Ÿ:>²e{èÉ çÎfGjoÌaÇî{CKHHH\Õ¼áÌéÛo¿½£Gn¿ýö—¾ÿýá ÊZ=Íú‰ûàpúÌ–›ÿâ ußûÞ{ë-»ô•ƒ—”ÍCéà=)ç—6ÖF2[7n–KABBBÂG____çs_«ÿloH…þ Œíxó5û™gžÝ¶M»ùúkŸ?ôÍ{>¸ÏŸª~ï¶kFŸ~åÄu·Ý!×À/ì»ç#÷¿ë+O¿üù¿û† ‰«›7¤º¢Ñ)ï¿5x¶-½A`Û {~ø½ƒóó‡S©ÔæþsÇgûMw8}¼úÎ1|ã…Ù»ºe;vi›égÞ{sfûà@ÿÉÓg_?zâ¿–¿>7Æû.þðSÿTÛ²ÀÿÎþß7Ÿô¼ë–ÌþûödvníO¥Þræ>7ó•§_^\€ÿçÓ¿06:òG¾öÔw÷Ðj@€3ó'æ·6k;#ïÉ^³5ÿÓï¹ùÛ./.¾øÊ›}é›þPHHH\IÌMÔ¶M>ôìïÿ«ÆÝþÿùoÛy¶á¶È‹ zCœÃ`çž¼þL9s._>572:2¶có¹#߯ßµw__ª¿eO?ýð¾mcß:>wä­ãc›7Þqóu‹gO^ºœêï0žÝ!€;²›«³GÓöýØ­?ô^‡«³gÎÝvSæáŸù±]êÆG¿ô¬¯»Ì{ãlíÔ†[z‡9,‹QìvãÈðoL>¤lúû'ŸëÃâƒ÷ß³}ËÈoýqè—[IBâÊb ]ÚvЉ]è‡ßýæîw¿¯å³¿ÿ¯>ú›¼,~ÿ™ˆ{¶]›’@ÿÀð޽?uüÛ7ØTªÏ9ü\jÛö —ÎŽdïÚ°±eÓÕÍʶ±çÎ_øåOÿÇžÔÀàð¨2\«ÕF¶^;00 à¾;nðÊkoÜtýµzÿ¥¯<½IݵqÃð/üÔÝû›éÏÿÍôÀPú}wÞúýŸ}è½{¾tðÙãgëM]¼|ùÏé'<úwßüÈý{ÓCƒûµïýèMçW'Þ§nVž~éµÿò·_¿|yÀ¿þ…nzÇöM#Ãç/^:|äø_üý³o; àæÌö_ýÈû¶müÞ+oο}öƒ÷ìþ‡gfûÒÓ¶mÊ?xÏ­×ïèÿáëÇÿâñgŽ;êàxvû¯|ä}Ú÷ñ Žö‹Þûþwݰi$}öÜ…7ŽŸd¥ƒ»3;” C¯Ïÿ¿þØÚ°qó·ßœÙµíF-}عØéÌ—6¥h»ÐÏÿ‹ßh¾ù¯ÿä÷ƒ&ŸÈgës_üÝÿù#‚%ø¿ý†žíÀ¦$02ºU¹þÞsÕgΜ»´ØŸI?žºæº™vºúö™s ç/¤‡çßþÊgOý°zlæµ·FÒcýýý@ßà@ÿ½·g|î _¤ÿæ—whc7]«=»xKöš¡ÁÅÅÅ¿þû¯mÛ¶q˶Co=~rç¶-{oÜõø³‡› éÇ~|Ï«o»ëÖòûî~û̹C•·Æ6møÀ7~ó¹_¨žB_Ÿ6¶ñkÏ~ïø‰“ï¾å†»n¿Yÿù|ú‘££›>•ÿàÆ Ãß›ùQmþô÷îP;eŸ´ßÜymö7'Ü::òµo½äœ˜ûèO½ÿ×þЯÿßÎ]ª{Ãðà¿ùŸ>¨l~ñÐk µ·¸»°÷¦]½ÿ¶Ê›Ç<þ5edøÝ·ÝT;1{nÇê–M×íÚ¡íºaó&ÀMïØñâkßW6Iî !qeé ©®žê‹|ö–»>ÇN’Ÿýw4õ;ŸÜ Ä‚/ìÌÄå3'./âÜâÐ;·m¼Ôn·/\Zü£¿~ò—ºûÞwßû.8êœzä¯þǬ=¾¾w_§¤‡NοýÝ—?ÿråÇï¾å'ìŽG§žÝ4’°pî|í̹Û®O¥úûOÖvnÃæQeáÌéæýáŸýõ7¾óƒâúôu×h|úOÿÛ—>ýk¿ðàýw½cûè7_|mãfí·ÿì˯~qãÆMÿøì>ÿ{7îÚ¾ Îwß²qð=wêßþîç†Òå®ÛoêÈ»w_·utäµ#Gù³ÒІ™kwÞ}û{3›Ÿ}e.50èÁn¾NÙ0윜ÿÔïðþÁáßÿôä·¾SüixpÀé·ko;qôä™/<þsgÏœOU~X}ëæÌ5Ÿÿ?ÿ7Âw²!=|áÜlëb%IHHô*sH!Õ×ÅS}}©ègãÞæ_ößýÉ—~ç_üLc¸çþˆïFò†„ ó³¯\<ñê… ÛG‡Îœ?þܹs8oŸ¶¯Ý´íítö;¯Ì~õßÿñÎÍ÷ߜù¹Ÿþñ];Ô‡î½áO¾øÌÀІ÷ï½À7žÿ~_ªÿ¹CoüøÝ·üÄ{îøÓ_=}ö€ôð¢lèëO¥úûÑ×7¶Ipêtíò¥KX åpõÍÍÚÎ…‹‹~øÚ‘ ›¶\L 8îlÿ@ß/ïÏ]ã?«löêïSÒŽÌG_ÿÖÙ£§êF¡­›G\ÝŽ¿ùõ/^£m9ýÜ+£Ú5´yÓ€×ß<†TJÝuýì‰3wzw~ïð‘ç¾ÿ£»n½~Ïîë;1ÿŸ>ÿ¥·æÎþî£_¾íš‘]ÛÇf9ï¿ûöûîÞsrþôâåË—±Ø/ψHH\QzÃrúâÞ° Å>ûÛ¿öPÐõüéã‘ßÑb˜ÒÂé¹Ó‡¿yæÒÀ;ïþðÙyçÄ _Iဓ3_ÞôÑá‘MÉ]èßóÎÏãÒ\íí'_zSÝöƒ_ü™û6*é¹codo¾õŽ›¯ðÐïyè÷ˆû•‘ô»¯ýÁÞ<áâÐàÀÏ~ø¾¯|ûõÔpê]7íºFÝà[ß›éïðÜ^ºti`xX ÊÅK—‡Ó)ÏO¾¸xù¾wÝpÿ»o|ó؉ßÿÜjgÎþÁo~2•Jõõõ8õ6€k¯Ù6”N£/•¹Fó_87@õÍ£ì±ÿî_üÍá½NîÿÐàÀÿòOï¯-¼÷ȱ“‹‹¸ù: Àw_>¼xùÒ½ãïèO9»ðíï»q¨×_»ãÚk´Ÿºï®?üË(ýÃs¿ôÐ{?ñóÞÿÞ£—ºé: Àô“ßzùpUÝuC´i¾/ðè6°AÑÈK—. =ðá{S)·Íß™©ž®-lÛºù~ýWÎ^Ä­7ìðy~æõ§ÞÎìÚ±ÿƒï{Ãy{lT¹cwæO|õí׎bÑ}á‹?z«vöܵ×hú?Û¾oøÎÝ×ùï¹q×Gï×˯9»pþº;œš{~îèïý¯Ÿ8yúLíì¹{nÍ(†Ÿ|ö…®ª»nHuµ’$$$z•74ø„é¯î‹»Óø³éƧ¢Ï(´¡7D<ëW˜’Œ?›WþÃ?°ù»q¼!âÃg|GÛ4tlôÎQ/Zë;v?s"³éÂàààâââë•ïn¾á®„:áòÔ×_ºiçhfçŽá¡Açäü?~ýÛõů¦GÕ÷¿ë_üÇoþé{\¤òØ»;û?ý‰÷ÜqËÀŸOý÷^yýõ#yà»úûSÕ7}éàÓó÷Onظypxâü¶}‘?ñõï¾:~ÝØ½·¿ó_âcSO~wáÜ…ôð €³çÎö OLþ“{oÌìüÖ‹?üÊSßyðw^º|ÀÂù‹¿ûè—öã÷ì½ùÇÓé¹Óµ—¿þÊ+¯ô Žö Šá:{îâg­'~ù¡{÷}àî—¿þÔwfî¿ëñÅ“§Ï¦úðá»}$=túÌÂã_ûÖŸþÿ†6Ž››¿÷–w(ÒÎÉÓ_øâW?àïÓ#£ƒÃRý}Ò¦$!q1‡63 ½ôôWoÿ±Ÿ ªÍÏ y?öC‰ÏúŒA|Åø¯_¡¿òáèï†^,ê7üèȱÐÎ}%›>õÝêé]{~"ø±ÅË—/yæî[2—.]:5??sJQ¶_ŸÐóË—/­Ì\ºpáâÅs‹—Sýý6nÙ¸uÛÐ`úhuæüÂe³ºiëvQ~îÜÙÚÉ£¯÷¡oÇ;oëÞ>eŸ«Í_8wn‹CFǔѭýCCÃéÊ÷Ÿ½|ùÒ–m»6©;_ÿÁs¶½c·2ºåÈ¡ï^¼pnËöëFÕkœ7^­ÍŸݺõšÌ¥‹œÙ×Î/œI¥úGFÇj'ÅÅËÚu7ªêö7üèìü‰‹/üáo‘;n¹ásùÅ/=õÂÖk2ƒC'9[;}aáÌåË—ûû†Ó›µ]”M¦$ VÎlåì鹋/ §Gúúúμ-¾xñü‚=ûÚ¥ ç/_N¥ú‡G6Žj»††7ãð¹³o/^ºÜ?ПV¶lÛÖ?844¼Aî& ‰+§ì·n¿½!Eé‹ßø‡¸›÷¼ï§\>ñÒË›µkVâYÿ¶È‹âYÿ¯sÇŽÔë7„XÍùÓNv¤v¨zbÇm Õ kôõ÷_Þ¶çÌù“·ÜtÃéÓ§T}µvj8þZ*5°eûu—/_ìC___¿ç‡†Ò£ÚÎTª?Õ?008<8œ04<’Jõ¥G€ÅôÈhÿÀ๑Ѿ¾Tª?%4¡¡tÿÐ0€ÍÛ¯JoèëK¡¯oËöëÒʨèÅæí×ôöõ÷Ø´õš £cƒÃ@_zdÓíZôAõ´2:08ôýÒC÷ôáî×^ë¦ì5wÜrýÛgÎþãןúúRý›·];´áÔbR}ý}}}‹Xì/¯ëqý[¶];4²q °/•Z\\ÜtébÿÀ €¡ Ƕ]›J ôyïÚ¬î¼|ùRÿ€xÉàÐÐÀd W˜Ú–Ä÷¾ÿÃí<éO^ögC“Ͼ5üám»:sf.¹g`p¸ù½ieôEçÌûÅ……… Ο¾p&½éîø&cdS4çݺ#tep8½eÛ.ÿŸCé‘¡¦Ì±cÛ¯õo½¦~Øb³Zç~ƒCÁG6ŽiÍïyÓžÿ໯ïmÙ³çÎ?ûâ+ü—{òtM»ng_*Õ×××?0¸q‹–<%ƒÃéÍÃéÈ?mjê %*Uº„„ÄÕiSjf)köl¤M©2{âªÄcÕ™ÚüÉË—.¦R©á £[·oHoÜ’’ ‰®p~áÌÙ·O…Ì;Éx饗7lÜ<”Y«gý+Îìku›ÒÕìUw¦•Í©á©Oõ¤7lL¥dÔ„„D—å^zéåöÙ°q³xj­ž ¡õÙ·+6mÙ°i‹\ÍËÉF6l\_ÏFð¡7œ™Ÿ“3*!!!qubdt¬IoÎÌÏ=ö™ËÑ‘¸:ññÏ<æ³iU—À#<üç@ó'Ož”Ã$!!!qõàÑG ]‘zƒ„„„„$o¼ABBBBBò É$$$$$$o¼ABBBBBò ‰5Æ@§ŒE^Ÿ››š›[¶¤LÍß ½ÜÿbðÓKiFó³Á6,c×–Þ÷µE\ó–w D.¶5‡P«:mϲo“öê }zíJ·0ô‰º9žKœú+œ7¬þ ´ó­•nÏZ-‚_|Á=366677·¼ Žz14w¼wZµæMZÊàôÈ‚ÏÞœúžã -YýŠŠÛqÒ½?âJßoðŸMÐKâ„ååÒ`zÝÜÙàƒ×C¿Wsj"‡nyŽ–ýjg4VZrOíe™‹ÐwýéeŸ²6'nµ¬r [ŽçÕ†ÔŠnó/;õ‰“;VzݬD×:Úcq- Êï¡ß«ßþ—]^;@;ýJ®…b!@4±£Ñ^mÒé§WbI$Nä“[¸”K  ÉD#nê¥ÞM¡VatâÄŸ¸Uµ&Jt³‚¹,¢Mä8÷Ίl)ö.KSWÁ½Dö°Êʪ…VhUDnŸU¶;EîÖ¥O½ä m ÊrîUž€H[Í u­‹¾w± Waj®xÛkÂ:IîxË¡îùf·[œPßk=]é©¿JyCÒô•“ˆ{³kq–Ù+ljzM@ ¶§¥ÀÛÎ]©Ä¥Y™î)Í/Ò­¸ŒS µ {i…qå$²6Ws°k!‹öºP9Wnj®Tưr»”¹hv±ôò´67¯75§õ2žëLoðÙò²È ! Oçǹ£WÎı¼][®–„ZµVS³::\dVm^š‡:¡És´ŒmŽ|UÂËWy'NäF^ÛÖÎÕîoè»g_þcòõc§üzѲ„„T¯*ˆºoÏŸÜ:2:vüÈáêKÏÈœkîN[Ízä k€«*t=b@„„IJ ©7HHHHHHÞ !!!!!yƒ„„„„„ä ’7HHHHHHÞ !!!!!yƒ„„„„„„ä ’7HHHHHHÞ !!!!!yƒ„„„„„ä ’7HHHHHHÞ !!!!!yƒ„„„„„ä Wo躞_wÊòW3B40™$. ÁLu×ÊЕÆÜÜœ,%!!!±jè²&¨_ë5È$æææB¥_ƒÌ#DÜ#ï ½6t%î¯W³JÑ’ÌvQ”;µ”v„þ966$ß~kšizË÷Ç=ÕÝ;%$$$®`ÆLC”yeõ†e¢M¡^°2Ñèfž&®Ç½!ù¯W¼ŠÐ5e^YÞБÐE7|_J$¿‰û«„„„ÄŒHs=VƂҙM)¨¿´4ì„”6 sD¾<ù¯WÏÒä5à «£4%èRcH&ž‘bzñ† ý'NÃh&ñÒ¦$!!!Ñ™#‰ÝÅ) tÑŽö¯ÄýN~Iûzx@›$±+k©7´©ÉY—è5¬%ov! ‰ÞÄÀ~[r ‰Þ¤±2«„„„„„ä ’7HHHHHHÞ !!!!!yƒ„„„„„ä ’7HHHHH¬6"Î7<úè£r\$$$$¤ÞPÇ#<"EBBBBòÉ$$$$$¶)}⟃"!!!qµaË–-ÿÌc±¼Aܱ:M9yòäj~®G>½.Ú³¶-ßê5¿—›zpŽzpñôþzî©vöB3D’ô†¸û–>ú¨¯£¬ÂçzäÓë¢=kÛÂà·zG‹Ý²e‹ßñžš£\<½¿ž{ª½ÐŒ`|ÈV HÞ !!!!!yƒ„„„„„ä KDÇußBžçææÖª´§ÿÝ`V´1k[ÄÔù¬—92²æë:Z]ëeÊ®ÎEÕ~¯—q|®€‰Yµö¬aÇ×ã–\AB.ª«BoðåÖ±±±8u!¨U,}#ßÖüÝá·p¹q‚‚l[œú²t²7òÍ~4x=ô{%&«yèâÚ¹Äo5k®ÉK¥ÓaY¡ÛÑà/ûÔ,K–qÛYÃ-—Њ¶0a=Gþ^…ÍGš"¿²ô¡èÀßà¿=î3~#š‡l)£|[äJj¿…Ë>CËÒÓîF>È0"#è`&FŽä2vÁgÉ‘oKþkG£á7»¥ÒѰ¬ÜŠmð—}j–· ˸ړ×pòfOnáêlÌîÆv¹öW;_YÊP¬W_ôŠRÿÈ èè©Õ±ÍÐû“²¼ìY#[hÇ6ÏWÜ_WmŽ–þéel;¯êô[Ë8¶mêd‘eMˆÞR>=°B{£7ßÖË=]ʬwÝ’^Þµ•–BGÚá[-G¾g§fÙ)»^ =K…z|Ç®¡xÕrj{„6Å™>×#y½XšoIpzµ3eW¡Óõ ër;+¡—-µr»wyí’‘j]/`ÛBVìõ\´\“µ:cÞËÖ¤ä¶u1ÎË»Vâ…«°{AAogSû-_¡i]ÊÐ¥Vb—e\"ßœ§–¹,݉|ÏjêŒ TûÚÃJta5Ùᘇ–KeÕšÔ~3’§lÙ[ÞÅø¬òèu±Ù{d®áÚkç+KÙ’]´&ô;òâÊ©KÍß\Ö+Ñ€vzºB£‘üÚîþºÍ[…’¼*’/®ôPt×¶äv®fÃV­Um¾|¹–úªí¾U „6¦ë–Èœëø$±š¼ABB¢ÑS–Û«r$$$z™=H¬ÉÐI½ABBBBBò ‰Vˆ¶)­r÷5¬ßkë{­=kÛÂÞ,Fß³sÔƒ ëýõÜSíì©áê»g_þcòõc§ÎÌÏݵåDïTo—XMQìãŸyldtìø‘ÃÕ—ž‘6% ‰0–K‘?yòäKÃÒÑ m¹‚;Òû6a9èý_/ c}µ³oˆ¼/>ú¨oŒêôÙåzÃÒÑ m¹â;ÒËfÛ-[¶øãÜ˾^Æzl§iS’€ä ’7HHHHHHÞ !!!!±D¬|J]$Û ep fÉ_ÅvS11TZ½Çû’Ü‘¥Ì¯œ‘UÛJkÕÈu1žëbT»Ï+3×ÞúMÜØf=»æâ0ë®#]Ü)gduf¤w6o/çúZÀ]ŒçÀzY+T€Jfƒ¡û›…».V[‚jFd¯à×C¿CjYCx‰ ±w:Ò!yƒ„„D—<€Ñ0Ec Fv£Í7“È;õ¶Þ0Õ3¢è/]ÁaáýÓk€N;à£mƒ =|‹{ É$$$:¡ª­!B!1zÛd—µ·£ _s'ç¡èRÚø'Ú¹¸+‚¾óp¢Îléª á+4š÷ÈV ‰îéóhYdtf“¯•t$Ë'Yç›üð9€F§«Kah.¦•Ív*£…¸×øÐ0æCW(fE4aÚ Òg#æ¶Χ·q`»Ž{öåçÏÿÇ¿üƒòÃÆç?ûÙÏÊý#!q•¨\Oû¢hU¢Ñ ŒÅfÖIp¤st IDAT›Y{ßj“2¯×V h98VçS×Í€Ó&5+ ‹‹‹Ÿÿ—PþÙO}öž}y©7HH\ A{&fÞŽC[¹¸?Ú @#®$¥‘0ÂÒ4‹2†è‘F#‰´8ÅFc‡Ká@º×ë|pкuwç‘hk[¡‰»SL«Þ8Å-›'yƒ„ĺ‡Þ¥,OÚ¡eztê¡Æc½†+¥ ï43Âl¦e\¦ÿOW] QünÁ>dÄSÒ ÂèŒà2šÈkiin9̈UÅX³Ó•nÁÛê²´)IHô °¬´ ú6 wŒ¶«…°åÜä²&Á¼]4æžcQZ kÿ%hëÖíø³åžÊ¥>5Ú!›’ä ½È:½²ôwúkœ¸Ú 8 xK¶×fEšÎˆ~à)Ö-3fñocÝ ;ïÁ•&yƒ„ÄÚ¡“¸IÖa­ÄpÖŠZ1Ô¼{¡5Ê®Åh¸m]ÖZЛIz<†sX]Kå4B• ¶6RGifí”™cí4 +HÞ !±Ö,¡EêͶ„JÖ.wéÒË-̰ü”Ç“#‘X2 ¡ÑÌ)bZ­z3¤œµb„¬!mì ³ÚÙòh F›Øíp¥uÂã%oXVeœF û­ m;“v` W¬ÄG¬Nµ®”¡ö-,àjN~9k–Á[i0íRÕà¼Ð¥*,‘Ù³„e@“Dж4-šÄï™ä ËM7iÓ®kÓÚ‚xñ„ýܚƊÏ]pD÷ ûNÖTËÛЫZHúmÞž=³©n´…–ÜÖ]ã;ZmŸo¼AB¢À"©íLvé±Ò8±—·–¯iÇ„ƒ%ªÑdËô ks“8Ê]kc Zk9|ÐJ«Nœ+¼ke«ó@2Þ…Û|‰ %oˆ·í˜þEÞ$‡òfÁ‹vµc;Ò0’Ë ¥QT&FÝéTG‰pH„Ìî@Y#Æ¢u/¯ît®Ç„f3+ö)û³ÈÇÇj©L´Yë­M©ŸÖûÒщqÉ$$Â$Àʲ¹¦Y\ì7Ÿ3“7îü ¡‰[íÑtæ{h-ޤŒ÷ðHÊhù„û~ÞÀ„hkÓ2~4VgBl_b ¦,Êγ—;g$¥hiøbÍL+üƒ·i½I¾­Ëß%Cò‰«Ë $\‹ºÆõéåõÍiõŸÂòŽB-#É–åeà±Ââ3!Óy-66¦=®À]ǃ ËãxÙ3ï4° Z7z„ŒHÂrÅ"©jÈO šd˜òÚÌ8GÈ0EÂs˜Ð7iIž’ù(ãRTŽ–ÇÁxXu Ñì¤#;~`][xXòÂn¶qu‰›ÄáxäJÞ Ñë@¬]"dIo Ó<öØ--1EßçÌå®@ƒ¦pF¹EÊ™éQOZÉC‡¿X™°Ð°qpɱ°;•Á­"÷| ®ÚIªs (›"Ê…[”3 Ë3=o ]…À{œ[àÓE>mоÔ#d,/ZÆ¢Ü2Ýï–),Ú¨ãû¦-3ÂeIv£ã”|-ªI°µšxm˜‚ÄÇG²D‹M;¹˜ŽÈ f\Œf?‘D¡EÌ ÐÖr”Ò-¼ÓhO2Ú³ø'n–¨‹´¤õ]X«–Â$yƒÄª"ñ„'oJa ¶£)ïúTH±¦4>*¶«sX(‚ ¢L¹3wdò†oy(œ™°,—XàŒò2åO™˜p€‰²ËÀ¸XEnQ׎ärŸý"gÔµk•‹`”‹V5dÉöžýG°Šrƒ…»âÍÓ¬Éμ´ä°vL:‰ MCã_·§!âë"#÷ò˜×—° Ñ!è™o©[°(»Ä}Ä–éNÉ$VÔÔù®£QWLDŸ5 …ÐúeuK=ot?\F† o)h`”û4—y:‡Ð',ìÀ”%ìQE.þ$DÑiak21MÏð|ÑE~–,Ê™ÉåžÆe“»·QÁd%ëäÔv"í@²WªxÁÄÞe J´ZÏpÐ)à \ €¿jPX“dÚ`×Tâ gWyÅä8ªT0p%›Kè¢#¾°? &*YÑ2¾Ž’e–„&¤Ó’F9@4j3Ê™¨€Ã€¦"ìS¹e•, «à™³ŒzuO»:sQä’nAPÝ€®ɱ?þ4b$Ð;=\I”øUŽýê•åVk¬¡ªsó#vaëKÔï²N#ÞY¿RˆhL³k¤ÎxŒ†‹ÉU9Û)Sm÷KسF'{_ê W-Xû,!±K«#EÚ–o 3“²V„¢¡Z¦y`A³RœÞã‹ä³Ù­üºm–”ˆi05¾ Ý¥éë]¹¸—b›bíh'TÚ”$’ÅVyܰ,iãÂ$£)APSv#×ÜO#ì4Xs#AÍ:Ñ÷ù£n|QÝÇà‡6ºô‘3á%¶`Q”)`bÚ„…)F¹e=ÁL”‹Ü¢¥§Ê¥ƒæO•§Z¼l•¦‹SO—ùtÓfɲxÙœÖ'Ÿ‡•…9Ëš*?^²\£S‰(%yÐpS?ar7jÓ*•­©éS -± £ãXQœáà ÜÂÌt]ëâ¬Æ´YÃe¾kÁtaX´Ô0¦w,ÜôØj {(7{¹£¦’µ"ˆVB>¥äãu|´™ ·4ÁGœ»¦ˆHÉWGòû[ìîhŸ=tq¼¹…1›ZÚ”$FK"ÞÀ2À ’XA8·‰&Äj•Àf€VZè %­È5p‚°®D©‘l Úà‡ÊU€JŽÂŠn%ÿ¡¬Ê+“DÍäª5Ì;3Ï×*ç’Vr@e JðmØ8D&vV´Ý€’'¥5 XŽ…ý•·€×T(ªµ§Í›£`y×E¡„Qh t vmA™­¡È¡B/ˆî€‘Ó}Ê[µu³T®¡¬"O?¤Äp•ò˜Aö(`p®H×À÷Rd’mؾ¡_GVÃè©Vz xk"°<x>jñ0 ½i…tÊ}“”¿Ò˜€´IÒðõĵ²Ûè®Q‹X¾q,Š-1÷5|ÑF/ Þ¬'vÚYËþq‡ë/1Zp ½éž8ãUß=ûò{ø“¯;uf~î®-'>õ©OIÒ¹n<F˜ùÇÛ(9ÑÛ3t†d =á"¶`ú$Þ ´'ºá=%ˆTýYÍ¢¹<8 ÂÀuJ`48ºø"åÂÒ-~×wf  f(²j”$ŸV㺰L ØjvzgÅ9¯) ¨B·»Ôw>ÿ†Mj/òÌîñç9šëQª»÷+‡P² ÆÓ PÓf`¿ß!  ÔðªÂ3 5œU¦f±g /ø8à˜Dq¦ÒØïܦš¦Â.Øš UÑöUØÌÈŽcÿ  £T†]£È«¤ Ô#«˜ûk¾ó€öÀlNk‚ëuéÀu“0Ún؇ã `Fa&PàH>0kbjx¤Räú$@‰ð1è”3ƒˆ{`@£° €ÁmJbé;…ðdDÌþ ,rÝg*^³#œþših1¶÷NgÚpÂ{šG&áþÀ~Y긵ÙÈÅÅÅ汑ѱãGW_zFê ëÖ=ÐÄüw"cˆ¯ØÕìòó(Hdê— SÁ4wWÔ% Â@`F ƒ-d[Pè ÁNé€î…üë1MF$Á„ÑÜ&Ÿà3&4pPä äÁVK¬Vw€Ý8¢:¶¢*P5dFÕóṲ̀G¡œÏ-ŒfgªÕÓ¯jé§Ï;‚jçw+¶ŠûPÉ;H£¤e®rÈÂ$ÔÜx‡ÔÒ}“8 (Ur!]z¥ùÚ~e”oqø] EbiTT Y䔂¥ãpÈL ¹²`ÿ …f¢ŒÜ„)GèIÈÓÊ(8L¼ðs6èž$«ÄB t“g,s¸nð¼#V…ãN–$_¬{’-@W"4  ×êÞÝ„·œzkÉ ÆPÓ›,$, ¼ë¬n´¶@Fø¢"³ÅH¸ DHº§°e"¨˜ú&&t'°V{§»CÑz'Zx@“ºrß2kói¾–Œ¡®IÞЃà],»(S~Û÷ A>Fª “OÐ(­<¼8CN`”¸^„ˆÃeÞ .¹gFÄ 0[XB€uãdˆÇi8 L ]^tÁ€n8PUR18LbÌfl9'C¦óä Å@UrVõþ7”Ê}‡3ûÎÛ•CHŸßäf«¹µR¹ ÈB›Æþ½;m+CÊ(Í —€‰biÂDí(QœœU,© ÒÌ.äìB(MüyäP›„VÀŒAFäó¨e.’šº kØPy­P—¬OPn9Ä6JPêV» ° LmHPa#ÇV à¦Ðº1¶ˆÝÒÔ39ªG¡ÄàpaýÐ)GÐ3ȃÃqµ´¼ªdƒ £h†OOyh}êAS»²ÃðH%£Ñ*èÚEˆ”Ë!Œ—óÝ!.u#|T‘ÔÀ ÔƒTØå¯¤ayG9TB¶—جà:šjFùõ®“&G ié]ÐmnþÔ.e¾è5¶ uÈ!Zòõ8[Rc"+¡»)‰8Tåo!«ÈAŸ8+s˜%á1öÏ ([®¯5Â%Hà …¢ºÈ?CÓ æñÎðƒÞ)07…·ÿ˼ÔFæ+Â2KÖãx `f EL›œ™°L>-¼Ð&,SÄ)q˜%FaY¼\ä–fNY&˜éúi§M^6q(£$>jÑ’8Ê r+M›°Š€p›S ®W¹ qdš—)Ÿgë0e™\øÌ™YB±d[&gîÁˆÆŠ þñ=‘ÃôSq”\2T,¹g,"ÏÄQ0Zb(á@DÚ+êx7_QE4[)*+‘ÈJRšRe$æñF‹xÁX\=¢øã2¬eš¼˜°‹ŽÏ{Ç›m½÷Y BÁ;Úø>ù¢¥¿áJð:„,EÉÿl¶EÆß0Ñ6Øô¹ÒlžbR‰F‘3^`¾0ƒÃ ÷’Cä)aô ×!î ,¶ 8\aשƌÊÐ'ÜQ#Â?9 Ìø”Èp§CH…–?Œ¶*\Zžæ‚¸ë%΀Õ-`¢qÅ€3ÊaÝ3ùÓþ!V éùÉ#íþÍk’Öóúüm2Xµv•5,×P³ë”׈^·‘ïg †¬Ž³Ìöd}…=%Òß°Î} Í[v"–ŽÑÊZeø²'©Kñ žˆ¡<¤Ø Ëx^X„ Ϊ¾¿øjMžÂ¢„ä=;3Je³Ôý©ÿà¾!Uô‚ ,< ÀÈÁäŒÁ(Þk &Ã5–G¹…¥­ˆ‰"Y*AäAR×€Ê$ÏføxN•ç\Ö€}ˆÀ¨dg¹f °EDŠU% ¸VàØƒß†V#”d'sgJ7 (š”®.¼½3—wryE´j…V 쨿Tq€ÚŒ pæ ’‡º»ô€£©»§P#PÕãŽgš „¹67€rÛ@žÂ¦¶‚ˆˉpUÏ]á:¬*P¡¼ñ¹q¤"Ê ñj6§èÁXh’[iÚ'¾å€õChy?Û’æ+Í´˜Eçç>c.WÖ­¤7zG\Bcí-:m4dµ´ñ.9O”å•ÑÛôp4ä[²ýYÚ”V×R´ ¬‚%«œ´­6°NsDfë4#Π1Ú÷mSCS÷„å[Š¥zæ;Ó«µ@Áü*l"ß3IY~E?kéXE^6Keqø‹òƒ€8ÌU.Š£d~Þ:ÎL0‹¼\té”e¢\.1q§¸ÙÏ„jò2-Y&‡ 7«YXaÂ2y¹È™é%Jr4‰ ²„²ér»²Y‚VD¼\?y ’³òrÓ^ê ¼Œzr@Ëäå-•‹O”‹¼|`ª\tûÃPO-ÎD‰ï„ g4\$Î=áA}òZòÍ8e/xýbc‰!+áìK „CDæ‰`ŠÀμÕU¤ÅŒ\ðVcˤÃ:ÙgäËB¢-iHʧÛRoçV˜ôK2ë'pòà™€†\7FtšM¢zó>”DêÖ3 Ü£Ýðl†WOFä±ðRÑåÛw6`“ÈšP( "kVµ5”`‚ˆîpfØ,•Ã$6`™¼l¸ñ6ÂZ’§Ä¾Gƒ0sŠ9çKùIRA®Î[% °'¡ƒc2§…"t;ô<)ƒT&Š À¯Õ MÚ¶Šiƒƒ"ï O¡P0Z&§*`JÉ®«89ky”Xù©T¡;<¯’€ EÔÛ ®©-Ø5 V+AE@µ"Igˆ(*Dkm ÆŒ¡å)Òl“L@S ¼¬…Å!j†¼3“«UÑ´6Šô ï|âéß±Lž5=“ Ò >£r¨Ð Àà…n¸âpVÄ™<‹)«f@3ÄBÊé´$xa-Ãk IwÜÔ&Ì£Èûæ#3@€T\oº'e»²¶X¥îj!0<©<èÆhµ•òkO¤Ð4ª°¨  rÕ›̃{®ìúöa­$t–hùiv7=HØÒÒ%5w†+é1ô‡h dœR70–ÆKb'!Ë šrB„·Ñð`ò ÖÍPÁ64´1V!ç·ämÑRÞ#Iº¼éžfÒ ÷µ àYðŠÃuÀ¦ö´Ã5Ê™ @ƒ‰¼CPàz¶C&<[‹3ÁŠ`@ûÇ3Ž2-Âl@² Yðy ”A<Š€ŠŠŠpP3¡ShBSa/Ø6ˆ^àû„7Õ¯©|¼Ôø¾*ѫРAG¸Ma¹,å–ɵ ˜A˜ÃgU(°Qå:`Of x°\-ŸSxVåJµäª‰Šð4™<4š+|Мs@j ¯µ ª8ZÅÎ÷ 6æqé’:<:ºóž»yR§°ö𬺟Q’-ÝA˜± R¦€20áF©’ ì·‹%­q[· •Pq»ªÙ”ë&Ñ)4á ð"’™ÁQÜ¡óøG}‘ó:è¸Áu¨Ö¿Žp*­¸Rz ¼.¸1nv=~åGÛâiÀÆe¢~t.p¿ÞÈX ifM‡¥õFÃkRYôF…¶´Ø}íñ¹¤ûõ˜^è’7´«©Ñ%<ÇŒX-µÌúbtÄŠÂQÛí·\7à%Þqw¾k¾oê‘8rå±1rÞ·rřÙA˜çsÖýÓ΂p;šbeH˜*Î+äPâ0±¨uuò†o—àzz:E ˜©rÛÙÓ¥P)*s Oè%¶ÁóÓ@ÞØ*²š£i*²g–¡ÙbÏ«Dqˆ()œÁ¶)g 6ˆnE>a»ÔˆhÉPSIÚ󦨂q ˜ÏªP(4´š‘Sª%§Íà;UhEè §€ %Y Ûȉ$µv YvPQËà…ùj@Í©UÞªœ8áBúšA S˜×jÔ©‰"¬Ýœû¨K‚-Š qøÃ„ꔬ=¥,r˜äJZ,’LJÆ`€ 4d™#2€Û”ë4l¯×MW°ý|ÁÓ¿”øëG§Aÿs=U¾¾8¹_¨U÷” äµ.…¤ÎEÜóÏÂB"íŸ:­ŸÂ ëF ޶€ _DæÔØ£Q2õX`£[ÚtV”hèëñ:m×–¥#)K•Þ¡YLò†˜!6Úc4Ñ#Ô–†A‚›q§obXŒr@ü­™&ÂQAy= r~úRÍCÇ‹ ž7üv" 6å®ÝÉw3ÐAtƒ\7§,º(Ÿ@…ÔÉ'Àª¹< Lòšðy:@è*4“£ù*× Èȸ[ýÍã”,Ãx¾ ZÖàC¢S‡«(i€ªbÐLh^ÍË@ÞpÃmOÍ:¨€(È¡JF¡ewk ÐT‘² ¼f è⻣¸=IQC–ÉUÊËJ3(Á„̘ȻùS931Q@@•ÏÀ†‰‰ l ›’œ&Á&ɾ TŒf¥Ð)òU®9&×Àá@™Ä¸Ã÷*d¶»€ýOœ?ºùggê~À¶1¥¡bÕxþÑLÎv#o¢F‘ç(‡ƒ5·s6‡Gµ<ÊY€Î<¦wÏdG•ìî(`N• ÌÔ€»> ¾k”7Ù9ëúhÞû­ÌKj¢‡kÒÀ¤·GŠõU|-k"úºÁC6œÐ.ÐC•QDV2­°&aN÷å Ïƃ³åmáC- ¾!Ÿ@‹ŒØHÙhZo4ÚZÚÀUú¤“èí¼¹¦¿©Z<l€Â2ô:áñÐ^õÙXBZ‹@ ¡&|J˜È—à®6/Š”5‘ƒ€\É"Ìße ŠŠÁ5|‘³Iñ-Ô_ÎÀa8"¿lp‘]Ãl Í@Þ?gkÂ*âN„eI£È(Êu•X˜Ê«û­Cȃ—A jWÄ`aŸÁ÷Q-ÙF.‹R­%mWòÈ •Y Àaܤºo™¡ÐUa*4ù ·&Jlƒk¦¦(9TSTè˜Á³™È‹L%ÇÌåÁÛJZ5§ŽGbtƒƒ‚©ZÖqiNE‚I€b\…³ö<´W‚Zi¢ËÌÙ±·°oÖ¨–ÿ¹œû+ &g*Ak*ˆ£"ïpMWmVÐPÌi€.eaWª%¨9(Oh“3yª1#'¤{qÌP§Ä*Sï®L? ˆ+$”È$:Hº90º9Æ4¼D[ofª7%öˆ÷ÄßG4Þ¸æaÒ‰ "Û§mβ¦œfv‡ÌàjaÕ$ú¥ Œ³B’­°É°!‰äiЪ¿üë4P4-Î)mÎÖSè¦ÿÅæçy?›ÏÓ€‘´Á^‚ðBûZ?uƒåu æåäaU€’,Lè´¤ÔÍ_D/@7P3¡^\£h‰¼›ÐŸ[E°l“¨  ™< ä÷i“ƒ û§Á€J*%5¿0HÖtM6r:x9Læ*‡ªMÌB+p‘O`F IDAT™ô , "œºFÝ6¢9°ÁË“Ä6‰ªbd§cW€ŠÊ]“ºãš#&ò°(Æ)öÑœâ€í†e [³aFÉF)kp œ™è* išJ‚*@‘EÉqy˜DÞ!¨¡æä˜™³U>.Œ'”ì)W5{Öž~¼”¥ psP6HÖFI^…®¸eݰŸÆ‹60`ܱÓCš^ãlMáÙªc?®1ÕÖ(,—D,W÷â Ð…«Æ^n€Kp…/t¸ºC ‡öÐêj“½ÞKˆâj$fùÓ¿}E\GýX%‚§…ã‹ …ý| fí!`“ÃM=É^ïO¬¨²Œé±õ\Ãq®ùCVû´îŠâ ¬=gNNæÖØûõ(ÇQè%zb1Åú©z#ÖÛ¬7ªDzÌ9{+x !øþt7u·¼<B´×‚iŽ(4–)͹dÂß™"ÝåEÈ$kr€h& hà ¹ @§ZÖ„^tc™ì¯0ˆhŽˆxqíTºIìIè¾ ¢bLÙÐ@¹õ"žÊË„æ`Æ€"¼· @Þ¨[|f€ÁgLÀ€†z6À]Ôž)`¡FôjÍ®ñ™Bv sß #§=„,4%…‚©nJÝ2Ä)ÍEXÀ$O]?r k\i>ÎûškÀ\4[E°Ÿ¼ê×ó¤5ž›Ë7{¶D9(léM¤6.kƒÆãÖ1ÂÆ[=ôHƒGèa§7Ab*Ž•ˆ3:‘0Å×RôNÀ´6w{èµó lîlë=ñÅÙ“Ÿm‹x;EpÖ8­Ý4B"S½óæF¼“F}½!7÷_n…‡‡ìTŽNiÓMÛ þ:mŠú—"Ÿ7Tøñ’^0Ôÿ_®Ÿ‡(¹Å,Fñ”‰§€²—Wƒ¢Ä¦[œÁJË¢œN½`§çKw½ë0“»I&¼óþÍÓnc¸[§šºCT.bºÈŸ39{OYüàÎ(wó|a™ÙAÊnN ¯ÜYzú·À§EÝ**ŒºÐʸ›uk$”áöK¼Y¬œzS X”3“—‹`&·Š˜¦¥i ëŸ6¹_¨‡Qq@Ä=m`•y% œQ·°s+ªrËäÓÖRÙä¾Tn5¬ÎÌ@Hk}M6V°i¢PÍ×›ãSc¢•¥]Qv"ÑÀ:ÜÝíЖô›³6äK©аË30È<‚^Q¾tJØëçtÚ®*°\'Åõ€HŽs˜Æ©`4,}ëçsû\=w<%ÁÀjËhQ½Îð&-¤ÐÀXP” \‡ë ¾Ç ¼° ^ç1…Æ,…€¤f‚™n,Lb‰bô"žZgQ®2ap€èÆáçö˜š4À2P¡È;IJÐÀa o”t“h&tJt·¦& g ÁÖDG(<_@ ¨©S5¬ÈAKö$&„/×ð’é«nå•×ü2”[ :8Ëp`j 4}ÒÖ@˜ \3`«Ð€},ˆÎÿqÔÒyC%Ú3¼z³³*ɘ¬*·ÝD¤b<¡»DŸ3ƒT”Ü«³šR$ûèvª€Š|QË@žbâEL8qNØ=`<LÝ®à%ÀŠ*¬C„ÙQŸCì*ØC*ì‰m€KØ»(± ÂT®ƒ+UÔL(& æòŽˆ0.AŠ€Cö©\y–9…`ÁNŒr¦­Và Ü`…wøFo’O™ŸP/Á^oxIa#<†krŒ–Ï @¡¾6\Þh;tÞÝ,îL§4Ö‘úmDÅJñÐ^Ö V ÇÂæ—“ -Á{œ$°®.SÈsÑË«Ü4)’móso¤<ürÚ L±È V Bý­:nÌpf1‘,Ô»2mP/‚uu#q™Ö+Yº¥ÍŠÞ[ ¿sk;{wŠ÷ˆZfõdM0å",³T®k*n¨£éËÔ^:®¬0•Òàîå47½D½úót#‹r½­àx2ÀLäU€ñªë‘˲sg…hé¸ÿT}e†¨pÒüà®B©–†ªØ L¡…f€QT,"Âf˜ð‹ˆåIdy÷¥d ¶§¨åMMx›'ËqÏsÕÃN(ÊÌäYŠÁ"N‡iàšIž°›k»¡:HÃux”MŽ*Ï‚§UØ 4ÊY+ «EZ¾ªYµŠ]„ ¢«|f7Ò5^qì DSy%‹VóÈ DsP¡³{M7*FA•[LÐ’  ˆšÃA9L0 %æÀqƒ`¶Qr%j ¹½ô 8Ä,#7еmÊ™˜¨8°2÷ç±ß ŽƒjÌuJt?£“œ)D§¾š(H¹»b'ÄJ0ƒk;çKÊeW÷-ÕO)‹õi4ØOXȳJLmxY@¢dç€Óއ<zc±ç¹Ù¨Ä8Cr}sÝžèêCͿģ zƒwÄuù„iQ\)7£¹œC»ÒêêòÚ–!(¤&çéM º³/…ýQ͉iƒôÊÔ–AŒú’ŠóKëMš&kô•5 )ZSz ÿ”(©¨Ó¦f"ŸšÔL½ãl"#E½”£)*qò ƒ»f“3ùÃÀmÊóp«û¸æÍ‚mˆ,°á–qÖ ÀA1ã»ÊÅáZb&* y \4ÆÁ”.œÉU>#Þ9I,`\åÏ[9À$Ñ€Qƒç)lƒä) ýX6%ð²ÀÚ&t:À <ë@åLnS^VrŠ m7¬Z)_ãO©ÐU€BË@uPÞÃkwò»TR1ÁTÔ(`;€Ãm(*ÁÉoáN†Ì¨° Àà•ÝÄVIÄqˆ>ÉÔ’@Ñjódzˆki[YÈ6T¢©|¯æ}ˆÏ(ÚøNè&Gž¤Íœ® «B+ªºV²½**@ÞÀ€°nMPX 6ÔœN9&½Â–aè“ÈÈy`‚Ô¶d`«„9¶J1kÌh(Ù*©Mô*,•_}¾@4а¤ÄV?ÕÖÍòõ´‰DÔrã˜^âú‘·Bƒ/Ú?1ã…´å¼N¬0 &¡Ý¡ûçæêEÔá2ÎÂaDo/€EÈFzó‰Ê›…úH‰~Ò$D&í–7oöH£ Ú¨‡•-Ò¦˜žZQN/MwI¯[ÀXN?DRŒhd£4áËP [¢‚P­zXÉ–ç vP§ÀVO¡ðT‘wÓ“¿4êš_½ÎÑ«™ˆP_h·Ür1„èà6À"âˆån^#€©„y–q¯À$tJòn¥6’§ÐÛ[ššQ÷Þ3O– ª5 ° P%ºÐ (ì"™9DîÏcôwÀó*^)Y ¶ZÇ$× d À䇳‚°W ”DØ’ªò÷ˆ¦¢RåÙ¹…+7æ,Ï«œ©ü`Ê$œÝ¨m"Ê`öyÕ;²Åùƒ`7´ÝP eÁµó‡ Ò<›‡ faÜá{w M V‘¤UÔT’ÍÙà·Ôj(ƒÀáù ÚìUÛ9¢˜|¡€ìdÉJ£â5Øpíì(@eqäÛàŒÂB *²@Ù%t DpèiŠ j× Î(Ϻ²0± Ð&KYYƒÌ%˜ÄÎä² YSÓLÀpIy€‰¼‰ ]åö`–†œÈü*¾ pJbÁX;¾åWèk´§#ºÚ䀵]ŠìG.pF—+õ½z$|H‚)2iØtMNìÂ96h„ZPߘþaì€ÇQHxÍô=9Sd™6ÿ…:õ‹E$ሠ·F¢æá_k½ÁXv™RÑà¼!V¬%‘wÚÓpÁ ê®!»Ñ©Ó«‘Ÿ¦õó {ÌѨ:Íh½0–e„’ñº¨¾ZwÜe§n&"ᤠZ·4ÏA×`{5õNDçÛx:¸ßD…5ꚪôBÀ BÝóz0ø4PVQÎp È;"¡4t¶Qgˆôp@Á ²T_Å$B¡Ñ ¸jpÈVKš—ù ±M‚t@ Èþʱ›h&ʱ)ꉾ)`ä”ÝT•œ*b§ª!ƒQà“¨<ƒ ²_Ðf€²ö%>º±ò~‡[y@w8 ¢Qè ö!T&s•!‚C°”'µÚ 3Àü&ÔØà¨ò…¡œ¢ðÚ‰ XQÓ Ø† j"Ù%¬àžÑ)ö¡dDœà«8®Q%k‘|1WŸ Ðh.ïp½Æk‡PQlœaØ J¬Ëûÿy{›ÞF’4MðIQ$]2‰’Ò,#‚Uôª¨Zq¦'„žŒbfºP@a` @—ð£®÷Ãþ5øop‡]utÀ¾v‹X$èîÂ"»ªíZi;³ÇY•©Œ(³Tˆ’K)*÷`î¤óCÊꞎC!+¤ œ”ûkïû>_ÙAŽß‚epèüÅ}]ý"'ÖAL-Æ£ƒ?¹# '!ÖPŒõÆù½šç:pcnQމ ÄFV³sùœ':‹åT™ögºILñ™bÂQڌŘ6ƒB0/ ­¤Lû¨ßž™ƒ=ðrm™°cšÄýÖøâ¾=ôûφº¢ ÿu1s÷ß’'î}ÁøžÍ§õgRßû}<¿`b¿_,gäœ÷8Ï6c^(r‘;Ê54[{£Ë/)}rJF”S#Š-­d%MD>O˜-“¹MUñ8ùbÌûö ýZêJ_$~KAÆÁãA'.‘ Ò±ùé*B~ #IºËÝV¾ÈB€0Ê‹—¹ûÝ '†êw5Œ=FX^&´ø¸À‚ b™î‚y2bM HöòXºàÍí€ìÂßÍL*q€ Î*µ~UCÒ‡ÓÎxŸÊÏzœmb]óÇG–zb!ƒÌ€¿?9å_sµ;ûÆ Éþq~²nÈæ'Ö/ÚŸäð@z÷9Ðd¤ÅÓ_#5B6,£÷­ãÖÞ‚>’v›Å8Gý–g=‡íø%(e­MØOa“–{¥È1À¶, †0ÕA (sþ‰¼Š½lI´8*~Àqæ?Mö!w4Ð1³ T@,xè´ìÚÐÜÎà’ÉjÈ@(÷[q ±€ ÁC-•0V‰Å6²¨•áÌÎs´!ñ'¥6EÏ$§zö2_.Ǧ ñØ÷ÅœŽ“øp©sò'ʈœZøä¹³ÑäN{䂎P”¡JÛ¡h÷Ëá¦B–ýÄ&¶ß#v¢åA'|Gášp,°±©5@€p®ŽúÞÝó¿‘gÆ»3’~X‚ÒûÄåw©Ìß!Lÿ®¤¬àŸ©‹ü©;4ôþýÞã$t6€V2½È.`’¼v'Ú«8¿#‹¤¶Qƒf\ n¾3熊 çã*1 TÀI H\8qª¥Æ)‘–“vPâ{Ûf)±³'ÃŒû^~…~xxáȃïÊ¡„DÀMÏŠümªHú^¾\jÐB’ˆ§I[óCÀxÙK2(·ÃCâfÌA)^¼öw‘ÈÃÝ, 'AYs ÕK•]Ú½“í PXÇVÕX'òëUžý7I(§M|Ø]d¼„˜g¼=0?R/ ïYrg!Ñç¨IØ]K¦š3DÂâT'½Ÿ)ë’÷–%À²·ýø&Y«9¯û2#œü]Òxîœê¿ÂŽev P®šÉVUv8£ .Rã8‚„m:Dc‡ Þ• ô[<ìÀ° Ai€J[ó …¿È^bwTV!®‘¶åcŸ ¶b3Çß:ˆ)\-Ä› ÇN!;gˆÀ˜VDðãªHˆG¥óʾÜþvÚdEÜïÏoÈQÈ ,ÒMšñý€¼Ïó8û—qéa/}I†SœÝâ/'êÀŸZ'4zâGÕ(§˜ûjå,ó”þ­<3‚ûb? !ïy‘yñL²Ìê™Ý#…åþú®ƒzfTT“뼩y À›‹³×§¼ B–ÔC~Ù7Ø  crpBæÃøîy)wÞ&»›±-U|7Wÿð‘„@) ’¾™3ZÒÂÀqNAiÑ6‚P(8)¤/3¯³ɸÃ}-÷ ¥Eè!޼İ ¦P¢¬õ—Fní~r!HŒ”JìÁöx* 1 ìa§ã`׬¿ÙŽæfD؇ÔÀKcÇMAdZ6- C÷ÒÉ.y­ŸY”J»öjk ûΛH‡À'ƒß&¬TëÀò¾R`Ç÷'ôxÏz,üö Q°?[]noð2jÛD* Þ\—/¨“~ÉX—v ‡nɵëDòŸ€lãïQœ õ_%ÛK2ðf‹£u`wÕ¯:ð=¸Çr„RÇ2%Àn‚ñ¢O2ýXàz°)˜‡H—"vW퀻‚»àn Cx`Úøo3?â¿:n3êÚMB—`ñ&DZŠ-Á¸ ði!5™HT hAÒõÌh+ç૳Ôsé×£/‰Òj1§üÉQcÎæí*¦Ã¯‚ î>[—‚˜4 8»³$Ÿ™Y qbÍ[âpÓW–0’wñ!ÅÔ¦‘’|z&˜÷þ ¥ÎsÃÔ ÿoŽúƒŽÙ÷\Ø{›”(¯àî¿øzæ÷DÅÇÅû‚š ÁÉÀßåóLj©ßˆqγ’|ÇÚ-žwdÎL£6GÆ'BîDðä/£äˆ8l€T¤/¸y8I+AHáØ±´ŽñBð<™™"Ô`°€EŒ ZÈ]äkŸ,€Ke¬yáÁ—'K‡¶àiÖ‚ÊòIOØ@¸›%Z¼áHK!¸­ñøÏ|îoBp%3Ôš}<¯&7p¬Kùõ9;Æ'Ï¡²³‚Ö ÓçNÚLž_)‡T‘¾…ß“qhN)^@|ßËÙAf¦À•´ÉŽºÊ~ÌKèÿ=­¬&Žª¬ è@f/9´»vÐ@v²¬Hg@s%9ü=¶ºN×J²‡P)ìÇØ9'1Rôí'ë×õÃ4eÈ`7UÖçêXÚVÀX¢åxÜv¡@Àޤ1öˆ Ê}}ŠO†àˆðLã-Ä”'pØÀž ;ÆG„«HÚ;.G”ÄZÁÌ^âï9û™ŠÜêÜcŽM»TŒpt¤¢|¤šœ_CÊÁ¬³d0ß{Æçß”ñíÑCí{÷© ãQˆ!ÝQ z¹OŸÉ>š f®y2%û>5ÊLWïÈ©Æâ]¸ÑØùžPnXêDÝ{Œ)÷üY6οèüAÈDøÎAdë+¸sÈxO^ Wn æ|ó|€`–T0ïúÇ22Ó]Òä?á!û»boæø¥^#(ùÚ“p÷XR: ý|É[è¤ÌÏådS¦QQÄ÷ä í IµPø"åÜV’uœLPD¤.a~®B-™€ÒG„@ìñ}Ç‚ïŠ}”d;{‰ ì{Ü-H¦% [`”§»ÒÚ@Ò<…ôPqO20;“°[ü%8z²œ_8_·‚--ítíG ªøê[ ¾”_÷ÙÖº$O¾­$Ù§ >XRô±|6TõÔ¡@z)m`ßb -©µ„DLô •å6•ägœtv!úPµu²~Ô笣^XªÙR è?R òñjÖeUr-»Úñ«²9M€=‚Uw>CJ—ÛÐøÍ·ÝÆ5Ú”¶©²ªífí ýIÛÜl Zì³M¸©Œù°C8´Ä&ÜŒ=¤rG#?þ5~`TƒEœ ™ 2ìpPæ\E°=žº<Þ“ÐŽjqéjø‘Š!³÷Á”u]RÄǹv§­8ófžM1a¬Tf]O¹mO”ì`º˜<üÉï1àj9óÙ÷¦Slçº3…/ÃŪüÔÜQdä>›—0޼Gó† ‘Sá¼²ƒéëéJ¸ €'™S°\ZËïw2®U´‰ÕÅ»ªÜÿ(žÒ)Ÿ}çïÈž£÷÷e ½ËZCLÊ}'½f¿ÙÇX¦Ÿ¿,h+æ^áÔ‰ú9Á„Áƒ"܆ñîĪ´€ïd™bQ̤Òð£9ùº¡%-O`0Î9‚CH_ ’PK;8x%ÐÌ×<ðö;<›ÐŒu¸¯2ôØu\G™gb&e˜[ä7«ŠàL€ n Ó.°9!8<ÄŒ"ì(PdA0™}œíš4P¸o‚‡zZðxˆx(`çÙÂaägØÉdMÃîð®'«ZZšÙÝ䟱š¥,¨ö·²r¢™¥U·ÂÝíÞ€ö±>°³ÇÏþ'‰ì€õyÈ´À} ú1¸&PÏ^Êf‹ƒÊŒš[ 2¬1Þ­8´ÇÙ_CÚD¢É^í¾Å±&{oyì/†ª1|‚ k]CZOâÒ§)…ìÞPõVá›,3 ´¢Ù/³ìðK®³£Ú:?ªôiÕV»G¥ê¨Ô‰>0wcF%üu÷gÒÎ=Q¸1b ûzÑÒ(WbpŸž³ß’¶'wöÀ"‰]N”qçöàv¸›%/#‡¡ûôK¥‘¾@Îg£©Ñeò…œÝ/•+,&h?üÎî¸ä[75@”-¸ËóJˆ±"oj»åBAîèðÊ¥‹iÕP·Çù†æYÀ$àp懎£÷;eÒ,æ«ØÂ҆ʟå2MU61NêEPö Px(Ì×]ýkž ứ;S, {[çêýÞ“wŸœœ‘XqÖ³eV©ýÞäËzvF¡˜àL˜Ð‰ñ5e/\º`i`P>ÙÞ•# Ù5i9†\4æÕñ}Qp¢¢ù2ŒïÂO¦ìI`ˆÞˆ&f#_v÷Ø€V“µ8ZY ØÑN,àF< v„$ÖË@•Ú”ŸAp?pŠÌ¯mw¯F4dMƒàÐåù¨¡à¹¤ÈËõ.àzÒ5”àyMÑ*£ž ’“~ÀS«=¨]°Tpß^÷%2d¿€.Aã)Ò€ÿ¢ƒ‘'”5–PYTý‡là(ã+¥›Ð„¥CµD“ö@ÖÖ(ù9Òµ+™­%ƒïx­—ªcyx Õ”Œàå9?zË…ê ½‰æ1ºÕd«Å‰NÒMÔ†ò°…¯Î’’sKú+ªC dÙé]¦d˜oB‚8ÿX±ñúú «Scl¥Õº6¶j Žåø'oÑÓ`P`‹HBìîí/ÙS¢«µÃ>t´?±X?K3FšÛ/5g-®šsm3åR|ά¾²þ>ÍÔÉÏœp3qìkø"E€Ô;ø"s˜Çýc~Hy ¼s–à{Üñ}H@2`hˆƒ$.sqÌ/$Ófò=‘CcëfðýbVó¨ˆ%R ëH`cÉb@ËtOºÇ3(Ä„§äá ¶6e(ø 89Vý‹$»ÙP7 Øt׎•‚ÓØ_ Ts?NsÆì ®”³ª íMÎþ N)Hþ±cÙFr´žT[ —ª«%šÓ'¿a>$í8K_«*e{Êš´ ú¼±|ÐØ`·H)k÷°ÔI®þÛöÖ ÃïI h¦Múe²»ß8«ö“ÅäRBUãE­6ðL§é@‚⤓v®ø ByOk·§š;ýƒÞ¦$™ôO$v¥ß‘М´’fûPÊã `‘üLp“¯ ñk©6¤Ò÷ ÀAùQáz;ŠâKLÿÎÔbî‹q×’¯òE>ûÓ{Ñ §¹ wËÒ4šÞ"˜uÌLf×îã°/o¦Ÿª§˜%­DÅjkºÓ“SÊÞl4»Dï/bá¼uQbŽ–`æË§§Íî^õÿÛqXçg™ÍA#øS¤x?È<LÎüþ9´Þ—6Zq¾Ÿžp'¯°øïÜÔ³Ij#~jñ. s 0à“0s¸teë:±ñÄ]¤ÔñuJàm24¤ÒèUˆO}-2ëü]ƒ¹SÞt…4·n5úcôoŸ¤ 2Ž~Ë~ŽCæ‰r&‘8¡bÉ\Ž|œân #Ʀ JÀ}¤G{ÜÞ•'Jƒ=Å“>Î>æk—ÉÙ@0òoΓ䫮S=‘ƒ*ïVëR‘*²*ÈC q›èÿÏy¬ñ¿S´ÊÞEÛÚ9Âÿ2`ƒÌùU û] ‘X]µÖhŸ=èõN·ÓŽô[ˆ5§–Ôë ÀÚÿÉÂ~Ùƒíƒ|ìd—’.3} ¼lÚ\Ôý[Ò¸F· Ôά“ÊQk ‹°‘ÞTøëXËRø’(d ½ǃŽõyô~±æÊ“,à Ri¾µ)ûÇ\¤%³GK"ãJƒÑDAÁ7öYq n±«ü 8Dê0ÀÕXxRyþDþ™ˆI? `)M|ÏdæC,Œ4å®gºoz|¼Ö(­@ý™›¶ÔËrNN#:Æøáºƒú1·Ô†ÓTZiÎþ¬sMšclï-,ïq›æÚ–@ï÷Ö®û•Ê;Ëï=±è{ºœÇx'eª<¾½GfÌçà ³€;°‡©M:Š‘vV4?ó ç͸ÃTÝsdñe®j(¦¼’&¯ÐPQ›¡ÛxND¥'rÌ9ŸaƒÜ}!·«37ôh &Ùr(Ùüš)(|Ê‚‘‰˜TA²$±ˆh(TF•O€MjC?妑ß×G¾Y QLJd€ß‘  F ¢/ i¾F ¤pÅaÜY ý|2à#‘‰V‹*\ &yÆ1Ás¶ËUWp²ÇU Ãc“’&Hò dt{)ÊôcÙ"~B9!E ¨×P»ÆÙ¥Ò ¤ª²SeW“Ê"°’èÇ@U6¾Ä‹*²ŽMëü³|Ô“ýU­É7ZÚú ÷šcpÔ‹Mn4úDfhl8´¦}T;ÝÎVäó&5§»Ð¸dd™_ ø~™æäJªNmà:Á;¾tjÕ['äLn1XMIͪ-¤ÝŸôÈ Óà¯/Òó*?ƒ|¸ rÉšî”rÒä<í&Öÿ©Ò:°>ÿÛcÞò€hާ89æ/6%¥ô¹Dâá…ÒÊÖÜw#ø±€ê ŽdÉâÒ‡ò ”–/qà‰¢ à‰O¤$ÎUùHzÉ„L…„Væ jÃÙxø›¶ë! JE±è'—ÌqÁ‰ðG¢zL®%gëæ„”WŽÄ¡¡˜1-)«'žî<²bb{l&õ©Î½L]¥Ó. á]{rOb \N%7Ì!žóy4QwÑÌ6,˜ÄΣM=qÇV&¸{Hš?7tÿ—мÿIÄÓ?uZŽ?’„L=§~â\Ý{±tqgW2õ ½™æ%;Ü•e“¬vÅ®WúYù3f: >?ü6˜ôÆX\/: @郇›Ò?( ‰b#Œâi`tg‰‚Ê嵡«J&ò`/@"`1B†&Þ9>FWZž4¦¤®8ˆ ,áIÃö®@ é¡à£Es l jæˆäÈx“Õ$à)°õTžœ04Aºª‘ñ.iЧr­‹«G¼;üX^çÙ?³ÓålýTe§è Øæ²S«¿Z}¨ÿû5Y}½ËW5u«ÜÒRƒë6ûré!²SK¡‡/ãÙƒ:ªûßlÿµ– ¨—Ý6 VpxÊ|¿n“ìÿùŸÓì–Õ”êo`íVÊÏo€«ÕæN÷Ô›*·ìdÉù‘~uõ‘Ößàh Ð‡ {§—þm¯ô9 -‚Þ€ãDBó”Tâ˜ÛBZ{üh7ñ²ŒR¥)vŽ îÇIØsì …Ò27¸Ü°¹ßâ;bûßbñ®³à/€} pK÷Xh²» ‡2…Ì Kö€L†~c+ìþ˜PTúÂ`¼, ”M(ó¹6,­gß/q½CιþŸÀŸ©-å/ŸÆòÙÊPf¾Î¥ÌŽþ2žlï ±ÞW@÷ž]È=d¿Þ{æq' èÝ„§ùGÖ< Ot$.Ÿ;d¸˜Ð‚á¤z:êóê¹CRyD w|¢ds÷Û¡ SܵI´\æoÀ‡tµ™;å¾"Ï:ιR‚Ï6a±d E:ãHÞ\"7Â$( …„ËBðX;~‡+ð<3§€ʧ‘± à1¤®r8„ã–Ú¥’ìáE~r+å†)8¨t…ÄÞ6ñ =nïqȼG û-žp枬àS `IãÊ•+) É„8¡Ào+ã'E«%Ñçkà«°X¥+ÁøZ•UÎ_}÷†]\¤KZ]_¬ÙO˜Ò“5¦‡CÒ»}~)Átw-{@òi¨¡†ÇôAÛq¾8žs¶—„ 6•;®†OÀì÷ )²ŽŒ…Œ)g-wÄø H;{Rå·zÙ$àÖ{1x(àFœy°c ƒmÖàq÷„A2ýÊÝ“Ê%EÜ!ºc?ŒÂï+0(²ã)ËáI·¢°„ð!˜ Èúóå®åï”sVLÁ”ô©ÝTXªò£8,·ä8þæÒxNØÉê0f©¸w•‘ |ý<¼‡;Þˆ‹8ëû9\Î#Ýøÿ <%q?Ÿíw0æI–%vAÎ`ãwí¸Ø ,Î^Ø”üdÊxDÌkä1•I+§É{Ñ´ÆÍŽœñ7•ã»GŒ•²¸N~Åfà(î6£v–a áåa2á,&Ê.â­×ÍŸ7éšñ¶6»€+¶$¨9œ8„ŒcØ ¦mPTªˆ›ôi£®Rrï~˜!xº[(?MzÁü@úT†•ÔA* ³ˆïC¦»…aF²@bYJŒBŠxnîäÉÜ/Âö8ıàˆx· ôT«%{T*$¤g>Õ¤×Hj_<<ÇÚ^¼”ßÞâ´~Ô=n€K¬Û×_5n®·þÝ Èò×´y!±Ìõ7޲GÊ2Êu-Ñ«ü÷Tqôæ&]ÕGŸõ`=ÉÖz¼ÕM³ ½Ìžýƒ¾¢œÛx<ÅùЩ½FmXÈVxóšëŒ¡öéqv°XÿôñŠõh-[žœŸöjFqF UÔÎã[üôQF«t}èË ÛÒ™ÕL°ñKà ·'5IÐ2<{j§} ƒMxï9£h%--ûD6Den_‚Z 3 kì{;Ü‘6^}( _s\pÕm%T'ØÄKHdœ™Ó‚æà1°ãM¸~€ØKaÇ=i¢ôùu¢X€øôeÇf”ømÌìKK-fø©¬  ‚ýI\ן`M<ªqÞÆÉÙ³)¬/E‰M4£#uE(ÞY励£@ìÙ2BKœ”`Æ$JŒ­Ÿü8¸sÝέ¥whf×GÚäÎ÷—½³>ÿ€³á^zëà¾/5CM+˜^x—âÌ-âSÊ‚šÙßë]âÉÙ)¡ –ÉIðƒÖpåÌœ©›o*÷£œç3u"ÆÓ&Ãã5Ÿñ2bÅ6 jãÛÅñ˜g‚ç”êÉý£É&ói ðU7·*‚ #iSé·øŽPá8ÁQún4na„0àÐÈ€X(W¤ð$ó¸!8žûQq£ „{ù'  mžR DH;<à>¸¡ ø€ïÉ4ÂNÄYÎéæˆŠ€À` éç؆žË}H_ðHƒDÁq=¸ÛëÀ)Í 3†÷)Ñ»è4@×1¬:}’.2ÒÌ´®ØK‡êãSªÓ0`gÍlÕ>|PÿåõM/²Kh íoüß­ŸÊ‡9™Åª–ó|€îcÕ«Ë_ ãäÚ†m?°@/×U¹ØàÏÞ&é·šXͰ´œ’knHz-<ÄÉ$%€º9èMÔÃêÁ“·{+çë½AÕ©T±´ŠJ•®ày…tÏÉÍïØA¥Ž!œ5}}C7û¤µœ‚8tCÑôàår†G @vÌ3ƒ“Ô~B$Ù¥úBó0SšrÝÁI ¶ûWhý6Aᵃ.#MX@eÜãìDwuÆôA¼)Asë*´€Ìy¼<†ŠJ¦e„wG@ ãá¯eè%û4p”úÚA éX¦¨HêVêjÄ{ЛÅÄ?ɸñr´ìu‹‡Bù"kÂ.3˜iíƒ1çÕboŽûi1IËå"0Ë îP‰ XNM(·Ûåq?œñ½€WX݉ÒR!˜óÏÇffáζ³+ NÉÅ‚Éâ3»™¥(ñî÷çœ þ]´ª÷®¤f ´??:OÚS]@áVè–¾g>µô.ô¿ü¥iÉ7Ÿ6YÆ©ü)5ͼ— góÑ!?áÒUPÌ“ãnPò46ïTK(ýÒýcŒJ±_ â.ÁÓ\úÈ¥R,rGI6’Ýiìx<ìÈ0â 2Ü‚¡ÏÜ7>•®'•ànÀC0 wb@žscòl*wa”ƒäJàÈìд4â‚x&°e:Þð„óB$Ë¡­þ«)Ô„¬˜ZŸÈ2ÿþNóñÚý=ë<#‘û¢%Ai+¼/Õ¨°í¼fyÇ+Ìu4 ÆÞ>sfR6tO8hX0:¢JúÙ4e#3Mr°Q”á÷wGW…0âLC ØR/ÇëöÐl³ñbŒ1ˆ†i 0$ Ê7vI€ >Ϙ‹1®yüÙ~ -ʵÀ§Ø×I ‡ cþŠ-àÐè()ß×H…lï±ZFu Ê¡áC‚ò‘n $w§w¹†©)ðzâ™ Æ1·cr§¡Y£|gNzµÎ´Ë”–¹<Î;i÷÷à°L¡Ð éæÿö‡½ì˜¡#cp÷ß|_ë»C›ïÔBwÁÝ㈀‡:žÃîâeYò’–˜¦Ì†åc3˜ù”ÇÒ-‡”…4J¡F=?ÊÔôËX˜À3b1ngBSˆG1ñztðw‹>Ë$©i¸ Øñr“ƒHƒ\ÿ\0ùøècý½/À |*I ‘B`p?wƒ¸pRŠ£¼_ó¸Da;{¯ÒÑ«!±) «@ŒÄŒk*0ÙIaÐ,¢è-dŽd „»@À•€|€E2ôr‚¬G|!íâgùT ¤¾©Œ7Í¿3óà›À Á‘ñ}Ê5ðM“±ßQ‰(źNH3±–kÕöò:\•_½u~úõ+œ³Å µqʾ­óz}{PC¯®ÈÇ´·ŒÆFò£ ²VWÃ^òÑ5[yÀU»^ÿçÛ.°â,Þ ¶˜VªŸöuoXÍÕôº®ÖW°ÈžÀÖ[Ò°‚x=¡ËÝÇC<®â¦~¼ß­V·oN³þ¥uó¨FëíZõdé”\6ކo¶{kÙÂò/¿«Ô²þ^ªëõª¾ª«õ jý¿é/+ºÁ¯†­þZ{°jý=Ä%'Õ”h 3ùz€Z ½-yøX.ÚÛ?¨ZÍêo'Ö†J¯¡ˆ¶Á³ç,û™<¤D[Œ€7Ÿòf7ùìçJýÜÞüw´÷ËÏÌb³³Ÿ€ŸyìÌÀÈv ðRÇpÁY_  ØæÇAJáìEæT±–ík™ÃlÞxÍâ–†p ðšr1é‘'Æ©Se¾Ó(Ýâ€û%¼- øh·^€jVwvÕ`ÎÉh„‰ &ß!0Ɣד˜^;‡˜#é-Þ¾œ äÜ!ÎÈ1È)xy®†WÌáú›Éý{ýþvJþ|ot9Ÿð”¨isÂù&±þ; Ü».ѽÇÇdl\fRüÎÝWi!øîüXì;„I3!ã’CïhëWôѲŒgpiì…sØ ‚¿;1„†- 00€&$<œ ä"³“¶&±©IN­,˜à2Þƒ í82}¹,ÖŽ…Ý·€oD«`1@ÀâÎÑe¾'C FÔe@Hg?â÷)÷„Ôñ4‚<Üt„›pÇ>99%ÃàF 4gQž'aŽä8â;€$2¤’ `Oý*B žs.=„X Œ¸ù3ª±YSYcù窵ÂôU¥Ç¯ªµȰŽÊ«Tz¨tWìÍš¼´,M¬m«‹SœÕ’Á³†v=Ó•k¨êGi¯Ën ¾]ÂmM¯0¼‘XU¼®—Îú«œ¾êÿ©ºYÑ—ëüê¤êj#}|‰Çõíÿø¬9 G Ú|ƒ/^ƒžœÓÊ«ÇURYÆÕÛ“…S¬ ²›kþÝò+ë¬Y­~¾Zé/÷äõzÖ÷x´¾u½ŽjEmëâÖ5]Ðë mýŒY«² a ØI•+Õ~ØO賆Ü^Äë›d¸Ü^ÍôâmïA“œ/Ù6f9MšËÎÓŸãÙŸjÇêÈþÆÁRƒV+ìY-­5X€ÂPBªðÿ ånánr”åZ™_Ÿ ¤ûà.Ùfb(xÉ/`7 [ˆÁÙž–jnX¢±¢|»d=2ÁDŒ.+Õ;6¶ªÎK¹;ÉUEy·>E„ îM$ïæ0ƒ7Ivc÷Éó•¿{…îcÉÔlè¯_²ÍŸJ¿ÇÇC8ÙFOöÇrNÅÞÌ }ÞP’–ȱDBÌSj”0Øùñ§S‹ó¬Éß3—Ì7eâ£/GÅH¾4ùPAR¶r çÈ37ò²GÃìd$7wEñ;¥XcgV^QˆÜÐOsL¢øev"“v£ü‚p˜NãôD³‡9ƒWÒ)ß«†Á88:ÂMæBÉŽVhq¹|Æxd |°H2¡ÜÐ hÙ]­bpß+” ÒÜLÀN¬e(¤ï aìX†ÜbjC Ø„Zæ¦ ^NH5×àz;rp—ƒæž Àƒ2ÎzqÄYt ó»²¬ô#¯ÂÞd¯úÊþ †æ‡MXôz˜^Ö­›ë솱ÅSþÝ«tRû¹SßÀÚQóCåþöò‚j4ä`°•ý‘Yug¹b“ßãòmÒÈ>\äo¯ðOP‡Ó£¨¬¨>@>ÆùÛ-¬«º>Xúx •vïšW«¶nnС_,e½gÕTZÿÔº~E-Ý­n¯Ö~ò1][Fo ½zsaýï—to£zúý¡uþéà´]¯aekä¤^y–}Hi•ô~²d-­aõ›¿GíQ»ZU¿:å5ÐV&™ýiþúÙÍ¥ì§QY¬õVÕÃ¥´Òo,uAÏj5E×*—íì5=jA·˜>M_/kÔTãjëò«Ïõáá–fb©çøqœ„¡Ñ­t ŸÀ `“|i鿢0 Ò‡({*¦Gƕ؅ÿWÒ”õ0lû…ß—[~Š^ž¹ÝÑ LÜÿe5@L×GD³¡"oÈFí_>¦ƒØæÑß§Wñì!1¢ZM€Õ Di>ó¤p÷¡ÿ3´Ô9¼üy+{Ä6üžÒ´¿ò}'Oö®øSÿ}xˆ÷=g0”›ÑãñA¢"„Ô)ÓÝü©#wà=HŽ?…uO€¨d4gíQ/>rõ*2leøYΓřÁG܉1‚$¸çWÂsµgc>€ûB†‚p;¾vìì{DyN¸ –I`{”Z¨¯9ü*wÁã.{Ø¥ÿžÂj1AX†¹c.^›~'Wtû©+@š#Í|†¶HŒAìŽ|°Áp¼|Ê]ãIxÒŒ&v„ ºð!ã€Çà€´?@F9´$:y² ÐÄ"r]§«à­†"y[Yïu¾N³3ëôûnåãûøÙÚªF‹J‘*ÖRgý1²žâÒ:øŽv¿»ÝXòv‰Õ.í…›“õ:ô¥¼[¨­€6Ôði}dv»¿ñ ÍÞ¢Íþ|!ÉÖÒ›:ëAŸV+hÔØ`i«ß­.Þ¦x Z?NVÿl«2Ìþés‡_°L6Ÿ¨ÖÆÖæ¬ —oOnÒá†cÆ6ávòô=å:hqÿXî›Õ‡0(v:mF€å ¸ÌÜ·&1⥂ÔÖ’Aú`@wYH¡Øî1R‰_ª0a€²œL>²† …Tsm‚"wª™{Õãw›rÊBHQø ˆÙŽs®ˆŠï—kcÍ)PîÖ¾šîpfêº#˜z¦nÌ,‹ü¹’…)h¥?üxXÀ½èFò®-UøNž¬?eY>ïÀ|ÇuÇw½‡ñ:HbÒÛ®à¤:LK¦“ñ¶'ÿÊ»>”ùNÝÁ$K¡b= gyt’À˲atbÒ2Ñ»~dÒ¬¸ ‰,È“ËFWPÎÔ’Èy›ù[v[†Èü±`!Ò0€KðW Ü/Ø ùèà¡e4 ç5ÕÙÚCXŠi¹/”À ¤¯ÁÀA9 AÊ÷.3Kž½ä†i’„ÓÀ 8&—xÇÃNàH!_üV‚Â$<Ž€#¾^"P!Y€0à®9ò7ùN€P€xÒ,8‹J«Zƒ¿ù„©¬¾Aícµ E°me ƒ£á)ÐÛ¾üç/ÎþAÕ¿V_WíêÊ«¬qðv¨¬f¶¶’Xg@=ktåò9ÔèùJºÞ"ÃÈ®+ƒG ¸ØZ¬uH¯‹~Z«µ‡ hÜ¢·ˆ«Û޵ÐûÑZÖÖº×K\d‹=릕-Áz`}P£KKt‡¤ÚÄ Ö*×Ö³…*½¡ëý%«û¡>[n®>h¾Yh¯ºèõÎÑ\QGƒ‹ÖÙB£Þ',œTû{Ùç7CºòøÉðŠT­êúáòMV¿êGƒÛÞê> XxÔ ‹¯ÿxÛÏúÄZÊèmúØ"½*²l­jc¥S³ôâ%Î-Ö½â'«øâí«žVhÈ­‡pÖ<ØBê0ê–OÆ›x!äšL†—  ÇTí,’ |gèpŒÑoñxîïæbÆ|VðÆÍ¬°[2JyÄygæl„+Œ]W L´„ð™Ça¿0\šf‰ Q,cý)'% A0¶îðcÒÅO”ùÀ4@ã}Ž;Qúùœf?¸s³TÖúù³’¬à}¢11]]ýÉp ‡è¿ôlï÷=á;þ¡7þµù“ž)è"œ‡ ybFƒFÇï?o44Œl'ÕæfâE‚‡ 'êrù—1­“}¬j´# #Ó&sdð…ô¤…eXèÁG²?‹® °üž6Ñfܬkc!Ã\Í}š¥X¸H€ƒüŽ7o»PĆwÁÊŠmHøE Ž2 jÛÞ¶!¦PfédZòÂHü‘A¼ˆ=~˜©âœüczf©“ Òd¿ìwï"ÒÇ æIxÒYÀ]p¾/Ì0TÀ÷µdš‡b¸{ ÔË‘pß“n á-‰€‡CÉ(öü–ØøKÀÖ`h SÏI>áÐm±>ág«x “µ¿Kj§ ËN³Izøz•]¾9[>§Ù ÖÉ7HΪ*û(YfÙÍJsá‚c?·3ûìÞÃz«µÖÖŸmõ?PÍáµî.`pÓËÎð]X¨u+jý妮×NoP¹†¬ßïU€á‚Ýèë—(én¯5ž­>cd)[þe¶ˆ~¯ÿój ‹«=k©·¼´¶Zk[+݇UZ³,J·Ukñâzõì|élX½9ín¤µËе:h¬¢Û]´QX«ë— ·W´‹›ï¿ï¿^Ðêê{Xõ~¯úÝó0<¡Ö5[øèàÔ*Xê÷»üŇkÍŸüÃ⵪nè›ÕÉjÙÕÎ5RM‘";NÈ×Ü?þÔ¢Ìîãð·5Î÷×Ûé.X  ÉÎ.ÒD#ް¿ìÉ0€À>Í oMÀÕð‚± @âRéƒ'jS ÷GlÔÈÜ þ^`üéŒE#‡« M sÅ8Ëlµ¤Ì…)dÌ;TŽ,/§ÁÅ zO!C|²­vŠê/ Å1σgd”í þŽÿîÅÌ69»º/‡žŠ;ù5˜\x˜3ubùÜC‚öCφ‰LcÈ©:WÎ6W´ìO¢"eM²×NK!`d]´ÒÞØç=ŒL# _H_¬I†E¸Räü%7@(ädŠ7ŸðW™¢1˜Z`àæÀ0‚̲’¡çì`‚“0ZžæÈA”ËÇBH#ý )óØ8ç;+g?ÚÎÙºÇÅgëÂÍ«\VSà+Êt—&h%€Ól%®vÚn{ÛiŒÐãð84\ (!Ç—§9‚Ä\§˜®æ½g^íèÍS$†+R ipuÜßcaÀcÁ•a Ã@¦@Hsk2 fã$²ý]hà(Ýô<4 E‡3¹#8m"¥ÒoA2+î4JÑ{n³=Ùmqºƒ´•hêÀÂÑ×ÉÜTgOU÷øý£tðð Vo6ÖI}Pû¸§VÁ PÿÃ+‚V¿ äê)Ö²ÖÚ2Yÿ^/¯YöK—úæò«µî§Wè«ÍÁ‡ p›·xý,-žÿƒÞY^ÔÔÅ:.fŠ,d«œ³ ݳÐßè,ÞÒúb«W;Ö°4À‡ ¯n«YeH‡ßÓúrýê£5¬4ØÆùJmx¶zuÓ«|eu-üüüûÁÍB¶V=¼Bo°ÚT.Óôz¡yš­0ëæÖk½œÕ>ªô,àŠ‹jã»…×·‹t}ù‹Þººý_è.9éÓÅÕfuui¥»\¿dUºjuW1ø·é­PXFVÿíÑW5…¦ú‚Ê¿þm¦ëÌ~j“_CµŠÎ©“Û¡Có¤"ÜÚåvv ;¦\… ÁBÁ÷5B*Y丞´3'>FÜ2ö½I¬¥IÚÙ‹zÆš ªaÅ(œ—ÛDó‹¼ œâ älÓp¦7vˆi9ïašÒ3·Íu§Êîn~K_SL´¤˜š<ær÷ïnùýr†c <Ï«œ˜Æ·g+m8µÚÅ™Šé7Þ÷høhß&”&ó,Kïs@M@Iâÿp¤™\ßœë¼rkÏLÆýÈß1¤+8„…œ*(où1khLO‘û:I,œ‘ùbŒÜ™Ò$˜4‚\Dfæ!:ž–üòoZ#,üËŒTͼ~é·¸¹l¯ì%ÛzŒUQ¸cPA‚Úpt&(“&/òõ£Ri^$’Ž?JrìSd^âF*7ÜoÉpvÄS’ £åÄ{µ<<6qÏ€¡›÷&8“Ü_1J¯“!`‹\O _È<½.B¦A„ x8 {H3éþ²“ ÕŽpäžµÊ7:É›?sú§Éƒ¾z{Üînö²ãmÚ’=°ÇêY£Š+O¾¯œªÚU¥Û'ÙjFªÕôöC{ð6ýnÁ®_4>¼èÒÿ`½½À÷kk˃ק§,à,K¯êøIÝ®7P[¤ç—ƒ·ÃîÚEz±¸ee'_Z½ÒnÕ5ÚÃ¥Zÿ¦»T£ •¬:Ôo¯AÚ[ÛZý¾«®²—Ôõß’ëFÆ*OVÙÍ÷àöûÅ[uÓß ÕîÛë³î-É´>XÍjר.¬ýqálñëÚ…ªÞ6;C´°b­Þ/ܪêÕ³ë•첺¶28«^­©ÚÕƒÚáøÚ‚<_íÿÍ÷Ùàƒz÷êÕÇê"]¤«7—¯//¾ªÝÒzêkÍnI oÿù¬ÿÓü󷵯 ûà$û‡MЕæÚÅ/Ï€£¡do9ÑhhüŠb¿)Ó>ñc¶‚®ÆËjNòw˜&ÐŽ[Î=;4V€Íº-örzÏÁ®tÁã=¸»ˆ‘¸…Z(y¾æV.Ü´Y¹íëQ˜ô‹¬—¹ê×}`§Ð¸±â Âmk9Î!·zœÚÆÜ•¸ÌYÝÌÔ.YöŹÇgÒruN%,Å9DcáÈ]6S©6á»Åžÿ_ï¡}»ûžÂrTé wè>”_T¨PLkèJ/(CL.£&?Ž@à˜réeC§X=qáj$pÓ€ù¿þØ©´À‘ š³é•À¾„£J¨˜[PïÝÈ\ó¨x;¤ E˜V=@ „á&Ð) ®‰t@˜@7Cã¡ÒXkŒ^ÄTÞ0Æ0CAú ~‡ #] ¶¯“Xtà ›kqà˜gØœˆˆ…„†8(’XÂ]øR/Ùj¨ö&WD¦{ŸÆ.‡[¤@çæKÀ1|HWÀŽŒNm¯4Dîú/Îvö‚ÛH <rH ìDÒØ…I#»ÛßEO(ɲ¾µ‰0°pºz`YuÃæ§Yó¹ìYüñ#Õûrt±JÎ.ÎN¡×i¿:lX™ª^fõë}ƒ…[¬iëz¥‹§oz½zWƒ×gWÙàÊÊnR ½ÚÅÛ+«wñ05TþÖÞï·+M|L²È"EI>'’§Y¤GúzÖÂnƒ`¶ 4`l.V€n(€—º=`ý …úŠ8·º, €¾ à… Ì4³Î7ãl÷'M'=ÅÄ–%Ÿc‰¤Yd‘ô^TQ¢~ØIf?]RLJüQ|Ïû>ïóc`¾<ÝhãM©¾6ŽQÂÀØ,••q¼~~®“L2©•£Y¬„\>º?ªÇç(žëï‡(ÖÌJùÊÉ 6‹³Úè Þ 4âN¯Ø“µý39uW‘ó·dúvRÅgecù!`’Ê´S=ë&õâ(T†‡µÓ“Üè0¹?\EYMX2ý kiütëi¹%==Ÿ(•ë'ùÉò½üF‰o£µÙÃY>ÉçN«üâáao×>2ŽÇµ¿~Z'±¤Óß|;ž`‚$¢ÖÇ€¾æLÙ é¯8µ‹cÒÚ A…T2%%Ï›*=á¤@]²G`4j6¬}M!¥ófGø€lÛ—‡Laƒv:erÖ|.¿£Ñö² ãfrÃÂ;ðD |¼k<‘¹ÿÍB›ï‹â·«sGÑ»9p8wØç,˜yWÞ—xð¾`ì,ªí¼Eê?¿Ú@´nÑñß¹¯]dð¿«ew ¦äÜ)ˆ{·‰àìû·Í7CšÚ×–ÕÎbp{Þ8º›×EA–‹¸’ 8 ¤#ߎ7ÖÜÔ²B\FÚ63ÍA*ôÏxÐQšHãÍÕÑŠ*˜Êüt‚KïžåŒï—ó×wO0Gy¢ xbs1ƒHÁoÙ¬4;Á–âé¢ûr RÍ3å> -ÐÆ¾‹}º}ènù$¢¶Óhªm´E䵡) Óm¹(ø.ö=HðajžÌð=aûàN›³Ãf˜®4d¾ÇYcN™mÁq…ŸfÒ¥o½Ê¬œRo®ˆÎ¦~éa¿¸ˆ,OHˆæ‡gp³%žìÀ 8Ûp€6ЀÚൠü¶PFžªÃ8/q »$±ƒ‡GýŠ•p5{±_~\œ’Ù”Œ^¥„ÚCy¯LïWtÎÜZù ^Z1Qü¼V ³s5}…{ •%U„Õ-©|Í*V‹/‡ÝÑHëÉÒÊdǕѳIÒ›G5`©¨’|G“Êb2Õ‡ý¡YÖV™lMFÏ/Î,ã1è´L‹I}<Š«ë5]3Æqÿ¬7½æ ñéwëãA´T;þ_?Ôæì0g¨B\¸—ǬD—Ìäôf‰È¼1ÎåÊýܯ—ËÝùl´‚YòYeÒë½9YïÓÒˆ3]˜VL21Æý¾îsjrK$ñ½üT÷] ^¬š=³J†ãÞðŒ­}oâ\“•ç4yþ1Ôètƒ9 8öTH €ý…Î0d@!ò [ü°a ¸TÂGÊ1þÇ.ßO·Ê=ÞüšKŠ'Б8 MØhã‰ËN WŸÍ6|PWV{—Œpì_ç¡øî5lù¦ï_Ã*ÑôæìÄëõÁo/ddáßwY¯­'¹=ºçŠ6º@‹ºm6þß½;Ör‘þã^;cD»|ݺ֣»·ˆ°? ¿ÿ%ž’w‡Fï™®øaâý§ÓÍT£ÖÕY!m õÞÂU€x†BÒë ”y:ñ8”§³sü 7¥N‹K9(R¿n—û.×s[êãªÀ 6Z|SñÈÛŽˆpðF éf^f¾‹'`p! dºân…N ‹Í”`îÂ63R'»©mŸ€1¥’N`oî‚i›)l6€]îPÁ–4ÙÚ#{Ú°<¤\F?݃¹‚ÔÀw¨€ ¶v™î#ôð÷ÚœµöÝpÈàEšŽ&Ž•z¨¶R‡÷Yíˆi €EÆ·(kûþš[ §g¡™[G¾c´hé)ò÷c]$ç=mêÕüÚ´ˆ¡Nt$ËÑ4gvk|éá§åOŠUól2&³bŒåü Ë_ÈñÔ2³gñüHN'¤d|n¬ªÑäYÒÅ`+ˆ‡ •é8ÆÖ:ÉS’#ƒÂ2EÏL¢ Óñëa’ô:FnŒ‰YYýV¶†%jñŒ™£(qr6*\Ä#o”ŠÅµÚÚ0Þ,VÕ,wbTþ9Ή6ÁPS]ƒ>/ÅÈat±Ù=ïœÏ@›úbGg•{/JK+ Ö§±¼¨®O Zšg ÅWÐëjeò$àÊÜœBãkfŽÙZ,÷M ”ˆ4ê` l4Â'1—.ÜôBP¶ áx’ò Pnµa)ì¸ÜÙh#j ߬`1‡‰f§µ8ðB´ðÅåªÏÍ–ÒiWá§V(óŽí²îG×árg1‰d‘ß^œœš|On4þ^F”ºÃ{q)í]çzÞÌòâwíVùÕ#§7+/[ì}o”Ê[ Ë¥0û¶à÷¶½öm2çÍã‡ÞݪÃü'Ÿ þ[m;7Ö÷sÁˆãÝ¡» h[#¦/±‚ïÂRi¥p.5—¿Y²}É&W$W_Ò=}ˆ´ÉõéÕ¸—êËö½@p]yž7އÀãàPžfXúm€.äl´ç dïFß'ݶÍÍP-§'õ—n8'Èb–Óǹü 2™O>°´{r3¿¿Ë'ñY‹h¶Å4è0УŹ—fpŠCb3N¬•>A  ÙÆ¡+S—‚Àƒr·ƒÖ¿Ýž¿¼”7õ!ÛàA,I@6wÐôÂý—é:ÄãNÚÄQ[飊\Á€¬JV›Pˆ}pæB¤mÃ…Õ±Ñv9d›ïk8àxâFÒƒãQÞTÌj@¶Q(Ðû“(?Â)ìÁÃða?,Ú*hMÒÿ]Ô*ønÿœŠÒ a|ßä —º÷Î1]ÆÛ¢®7Í8ªäõr5Z©|2+Š÷†Fq µíiÎJ¦ÈËÎÔx1CwÜÃi±<Ð…ã³#Zb*¯Ë•ÃÕ^8-±ÿt¨º h<ÝR«æ«œL&¨Lk£˜£¸ºÑŸÆ¥’bãa~VK.¬éY¡7˜Ö/^©Ò(®¼¶kÆ15âx‰,uíñÈJªë¹Ü·åq£‹Î›ò¸<=G-¿ú¤VúظØ4Ëã³Ã×zË\ÁRþ—lÐúêúj®q¿ÚU~DÌÞ¡9B :É5*÷ÍɧCœLG}L"s3,ÝKf³>)cP•§£ú©:0ÇÜÆˆ'SÙkȸHN²Fœ~ #Ø<æT •ت8¦8tí& \€2h–Zê2„:5uog¦›-ny@Œ†D ¿F´y“‚e–òÖ<AꆜvlÒ»®qC*­Âôñ§Í¯¥¹µîôø|qƒýyµâžDî‘qg¯F‡æ­æ˜Ý¥¾IqleåÈY ;ftMïz#ïÞ-s»†ÿx¸.ŸºUN½÷ÆY¶~¬ÞàÚ.ú¿öåÿ³ÕwYlÚÂQ©‚FøShÒ¹ñŽ{ÝÅÐ[ŒÒœŸÞ®h¦’ˆ…x4•¤Dà¹^ ÛhÁo‡P¶ÓÐ û.v²|Älåë„ÌŒ!/×Dó¿žýž @º"MÚ± v(üc`§¹MÊEÓC@CBí¨yý¡‚cÐð•¸Ì½Ú"Ìã²gWdî{€åAg$<.‚J(nN‹£¡$ÔÙ=¼Æ-QŒüx^ï°•°Ùâ1 =AÀ5…l ¶² ÝæT!Î6És•Ð¥+ÒìOÙØåØÓ‚*;˜ ±úž z€ÖöÖ^¸¤¥jpÕ¡ ´Îõ×hhtPܰÇ1È’—+ZëÚ)Ê5%ƒ™%#JªŸå^?KJ¬´„aÜ0Ë)H­RÃàÁYñUþíqnFóÕÇ…ÑÓÓ„ªALËÏâ{LDzfXæN«ÚœQ5 ÿHŒƒb©Ö¿x^1ò4iYñi¿~ÎŽ1 *¡õê3¬°z™ô§á½N†Ã|¯¶‚¸‡i¾vš+Óä$Ÿlß_}z1%g/ŸÕ–7UN=øž”þä¡g%'µjïy¡üÙI…ô.⌑aÍ@/_Õoqeö°0™,×Or9³\\ž¾)M§£ãxXžýaÇX¥I¬Þ˜ô~ñpjüfV9-½"ƒ·fþüȨÔRO%5Rë‹xÒ3O^€>|\@8Œ16m‚°óÂþ„ ƒnC—ëÇÏŸh$5V¶ðísÈðµµX+"àº%#ÊYKÈ=Î:¨á0œ8òw Ä€ìHÇÅ—àcàpÖn¨=)³!Á ¿•}r­”Ë„ŒÏ*ßÑí^ú¤šîÂz™íü sb`ÁùØû¨ÑË6_ÞZjÞ€2eïºAìÂ’üÆñîPäwå%û?¦¦ßúÓ7›uw‘sµ¿½TÿQ>¬ïjóXMç½OáãÛ÷»A¹óÜ ;‚r(ÞLí)à{\q¸HK|æ9AáP6aí‰}Šý´qNEX"%/9@éé„m_¥64 :—G¦R²6˜'°â-@mj¾yðÛb_¥–DDR!)8Rx à´¥ô즇€žø{\–©«q2¸Ôc§cÞ@ù…åqPátDÐæ™Øhz.kRX°Î(v¡öZ- <ö=¾I¹ãr¸BûœjÞkÈBh”G.š ÌãØåð¸T8t±ÓžûØ´Å>Àö.û2žZÌ[š;, ®ƒ+{®žìÙ¬YÀ¸#c€!ˆøÃqxø«(®ÉxKGb­†$kÕíѺ,˜6]‘&cÚä/Gz–ß,|§f0ÒEï]21."oÐ{÷V4SÓÚR²ôɬ‚düG•Ðî@}R)t“Íó®4M6½ SsˆIñð£jRXýãé°–;>¬Zù¡K ¡Ì„üìsã7“M’¨Î[y ?¬ÝŸÓñ·9j¬XëeÚ¨~ôñiáù+ Vª-U@ÊÄXé<úõçüÝÇt•–>[_#ÉÙo’Ó­x%™•Áp½d*¬–Èa:!(Õ åž¬t‡ƒÚ…&ߟt“s9Ž&Ï1zvºD¦ÝÃr¡^)Ãÿ3OcD`$(¼(瑌ÆÉEm¥‚¤P¤U³ôááÇ[X]yZ*áyb+ª¾-þa‚[šjày¯A9©Ck<_B7’è`«'A™¥¶‰ÝiÙå„ôXz08.˜bV'Ü"z¿f9ÿDqAKÒ!p´ñÛ¶Pm0Ñž˜Í”Pø l^ëwÜ«ôÀæ"[}A ‡… ‚¦{%o¥NÍ[ožöøþ•~-Û4,Š!îlÃ4¯Ô[À!°¯2k‚ÖAæj© nx78×·#þâóºáñƒK_,`$wÂõW‚ÙëÏ\ëÇo*ïÜŸ®o¸“KÛüAí›{Ät-Òçó¨o6©x²µ8dÙ~ Â's{/ô;h‚7ÛÙÍšíãÜ=…G‘æ‘ÂÎQ›Ã àe߀LÓÍ\޲àhððë°¯RµN6`»ØÉ ØôɆ©œ'} £ìT‹X:èxbÞ•478(w€À › ŽË}»Bz¼ 1§T¥¨|pÇ…OÐ0[ù¶p§Åw šŠûYg-|Êáž v\á´ б¡ìCï7¤:mî삹8ÌŽm†$¶áñ/”ØÙåèÀêl¦{{©„…Ч)9 QlûðPÅw\`7õÜ-  À޾ ÝkAn4zÒæBFâ -4áõ6jAƒ©O¾±iŸåC*M*+ü²²i*™„éX”Ç›gqÁ*j°èËz¾ 89—ob5ªÖò#úÝ2©õŸHn}ZVËX*®Ñj‘=¨›¹øí¸cŒûÄgã“f(Ï,Z†µVx5Æ„V™/ ;k<ŸMÙÏrQ¿`M–úx“×/ !`BÅ«*ë.ÓiõyÿPãã·÷ŒA±^uVY}em}U×r›ƒÙ?T—{¨þwÐÚêú/‘ûù0ÿ—µêyt»KÉ˧Åi­2é•jãDQÐùû“QÑX¿WÆèt5W@!y[LîçÊxó›\…Žs+÷¦ó¥9{Õ3§X©nõ‡›k'%ìl C©iòÕ´¯s3•CÏÓ™AKXÖµñùÓ×F2Qø19æëúk#¤‘ÂÏTv¶&LVhyëÇÖ”á_äaôsÙ d¡)“ ;@EÐâpm¸áVšæÖ•ÇšFã(xõ¸¹ÚèºÛΧŠû ²Ã¤:p(|ÇEà¦A›âr™|5wBøí,ë2¿]B\ú\i¤\ø©¹¯'n€3r¡àî¥$;ýœf‰„‹µò2jåҺ߹®Æ½"¶\7þ[€›8nÙwÞÞl7ßqܦó¼ÃnŽß.žþ]Ô¡ŸÀæýè³áÇ›ÞI¸ö Ü»wúïbxwhܯD1éÔÀÙnêî vvdù|ÂW)掀­áE¢ÖþÓ%¯£@TBìŠ!Çè½Ú¬c"¦«á›+W±Iþùðì1¦‘?Vïp\ŽkÓîh¿8W½ãï_Çok½±<ïõ¦‰9îm?,b€d@eÜýù K0%:±I+1Y:c•ŸÑüì×õàeÇ]Yú…sËø3-uãþ+œÙô^¢óoa{ÅñÅË‹‰ñ³©ýñ$Ö9óÉñ Ÿ’B%߸˜ rŵŠÑ×—Çåc$Q1 ±9E¹K ÷žåe¿_+vs±™_©”Öîå U2*ÎjËñ© “zC³õA Ó‹qm¥Uä&õÊ)t ¥ #”ºzxä:ÉE9Ü×ÈÏz##Ñù‹¿$@?]í~H–/"©%ŸöjR¨RÁ,b»[×OV°ùˆ[`qbi0€3—Se3„ pš¼ÙðÐü½ü-lxš;UŠ)«iŠËVØÜàÚC°¦³-¬ŽðwwÛOÛ yvBŠ/]µóT8mLñýv¶NHE?ì–W¶Ÿn[i^Hvýß´ºñà{—•y°Õ\w‰Íf‚-÷&Fâ\gððYón*æ.#%î¸ï‚Xø Vë;·Çw±{÷–qß»&[žÿ?ö ?œÈö·¼ÌôS·‹ë Š %šíÌ!#}ÏØ†h‚£™ÅÃùmî´Ä/¸ (‚]Ö„ìAØH£ÖÒMFÊò<@æèž”€ãò}ˆh;~ –«xqÖ†œç²¡-ÐBGEá·ÛcrW2€Ø9Bðˆãk€†RÙ*üG[döJO™©Ì%~¸é.ü6œöÁõ¾@ ŠXt{gþR NJvY”… Ф æºâ p쫬½bnØlÔ#ÿkÎJq¨àl`ÿQè¤I¥`̵ A°4&Èއ')áÊà E ;p\ž €v™ôl¸b«Í{ !\›€špÙlƒÓ•°ø<®sj@}%$µÝnv¿²‹Ÿ‹¥sþ…‹éÓÒf•ÃÂó­Ñ§ÇÝ’d'¼$N?çky‘/óü,¬è›ÁáÒ˜U~…³J% €%9bŒ×äOÓËe¥l JÛfIà%›VmU †=ÄS:RùFYêÞ[íåAÿGÇ(ÚÉR8žÚÀ+¡À㇢ãœ1ú hüªîß§ËÓØÀzB±”+ôß-¿­'ecTD9¯'¨—È}ÃßæOFo¦ßŸwåñòjBjèj\¬¡š˜•"-aò6WJô©Q£Ðý8oÔœWin4.Mã\±6}{<=/šÅqœ?Ìu¶äÃcsŒ·ÞŒ >6ÑÃýª2sˆgÔ0—åyÁ4ú@¹dtßäTùBVjÖyYçûÀþÛÄAqU÷zô—±Š«dp¬ 6 †Ä~~,¬ÛÙƒ_³ñuˆ ›)A¢4Ï\‰™rÈj MLàHJ—³=H ¦„t3“˜Km—Cá“ÐÙµ÷=ì\— ¤M:óÒq!M4As¾ÿK7X×$oW…rA¹¶˜®ø. ¢}E‰Äõ‰!ýÞBöØíÚü;"ÄbA¿­AËÜ[·¶§îí=Äââä}ë…ø2þ·üqEõòë'ï€gÄáÞ¡Z¸›)å½[çÝÖB ÷q2«Ð÷/!?W¢y]ªšyêÛ•r¥RëD¸»€gï§λ€Ç±  < ðœ#áS #|h xvY 3 ¿Ö>ˆ€¦‹&Bæ 'cRñìpnñ ¥6¹x8¯wl'•†!š=È4¤“ ¸s®t‹; xjí´çJ‹¹ŽFzéùað'mµ¯x³…M%l›©Õ…ÈÝŒüç{ÌÏ ÌE„ì`®@›ûØWT€ @ÈßË@éà˜§Ÿ¥Ã˜Gb`:cš;.,×–mµÁRò8lƒòCðÄE ÈÎåžx}϶ ,踶lÃTØ!„µ Wò¸| ÕAü3DŸ‰g'¹Üs”I8CH ’WŒmŽ>?6‰ˆ%$œ>ât³ÄŒ3ßÚIþ1³¾EgçöztåsÓ`£‘urÿÛbEÈq‰É¼†ñ=œVë†q€™ÄT<ìæ ´va3fâ89Ó÷^)ºBÍc±T õ$,¿ óz³Aû8eÖ´·aÃÔ%ÐRÿpÖ5ÝoãÓåëÝY97îT_ë^o_OKùn±H“þÅôt„îx˜#]P]Óc“FFmùžž 0)©ó2ú8—UšLŠcslš×o‘›öî½äïצ½iOÓ¡ Šo†lôáØœÒ˜ÔOëvü©Ù¨òôñ¨K#9Ì-òXÉ÷_•Ëúþɨ¼ÜÏ‘³į·—Gõ¥ˆÙ æàiµŸßÿäÕ¸·,Ç]PÜ̳ñ*–:•ð³¿çØ·Sn}}À -JÂ58öø>„—3O0´¸„l–.w<È]€„Òå,ÓqC¸"u%ò ÐAÐæÆE0­ËAj«çrü‰{Åô÷ÝËñâ–¹æÜ`!Ëk1öʽ²Ö¸Ö8«›õ¸ÛP{ÍUÚ÷®uú¸­Æ½DŸZ·Ü;ö¥óÆ.Á»F…ò¯5ï\î:?Úþîw6¸ï±ïÈÖ¤‹K’÷ýÕöÍ„#ÿ®?´0æðôºi^œ9XZ:—ÃåAvN¤À%¿.°+B4—.¢¶uõö´:ÂÙÍ–H´€;®¸ômµÒÎ¥-Ò«J¶¶Ì!Ë–.‡+œGFè)„’Ϊ?Ï)ü6d‡k@n°÷wÀÅ/¯Î,›a±×˜7Ž ´·*¾P!kRø?€/<îS0%6›Ž ‹Ú¸<𲈺&`+«&„Óâ”pë‘e•²%ü½,…ž”.|W4[`¦ÿ÷\NêTãr¸p—»ØÏ~³P@XÀ& iðÏ6Ðë„Q ¢¾ ¢¤FÈZP ÿ43Á”JƒöЄ€Ï](ÅK ü_ñþÔš˜Ò\áÕU;¾ “3L ˜ ±2©Ÿ¯±B zU¾cÂÂüH®,‡ ûý°²n§ßžž—Ð{ÛÅ ÉD"Õ‰ŽpúW–'¤;•ãe«'‘ÌŽ_4X,ÏOÁÐS½ÊÓÄDÕhT&ŸœW£AÅÆVÛƒŽüë»Óxl<`«Ø\Î=ü8W¬­„«+r–——~]¹_앤Y‰ÉD—FÏU~‚Ù/§yRžÄ÷ŠçÝÓqÿ›¿¼>>…:é£<ÎéŒÖªu«vüºT—Ëߣ”L.Æã3ű1û4™Ò‚{J…oãó^?w>Òqaøua0f½:Ôrù­ZÒÏKR¬}÷˜ÂîÐ-Eýîf9ަÂêÒœmæGß~2Ôd‚Òφz|r¡sc²õTJ+Jž /°¸,?¨cöÇËom?8—d"j ê„õ ›”S"™idÞŽV#¤mÈFEŰå7ïÀwap:6©Óv[:{pLáÐÐ1C§AþE3…y3þ:ó„ôDYè âÒ¼9½þ› u?õñÍê¯+𮏔›]ÝËÃ5Yòõ˜7X΢SÃ"atÁËïê6wØ7\ݲùn´ÇyOC¼(Ðó®$ ð—¸&¸ãw çl9î*ÑwõëwaJÞ{—?+Ý5þà§M'.=õ˜š»3¦Éò5Žc@eyÙ™õ7×˸7yÙPÖæP™°ð’™€yÛž¡U.ö!¢t—ÐΨJŽ‚ŸZ6!sJ»žfA MˆÀãpÔ–N ûm¾Ó‚ÐoÊ`mzàtDÒ^a£Ö$íh¸£d@¹$ésp9Ú÷—ðDÜßÀ¦ÂaKÀã›.ÐFL±£°O Ú…ÕÆŽÂ>*´\.=°†€ rÄM‡>ÿUxßÀ›„,W –K47RƒL¼E¥Z<;9V@-Á2–†²?f%ØE<¢Èrãiáñð(Ô¶~8>Åy³6èŽÏOã£èá9'Џ LW °Ÿ˜•íxUüìÿ#±ˆÆ–¦0ªõéÛ爭хŽûÀFÊ.¡{BSÔ ë~I÷«VF_¿9#eS_¬`:r4¿W4£Üƒ6“ÙZ²ò—äMãÃ\òãUº|ñòäUdª;g¤öóèAe3OÖŒÑôíË#óÃ_g£¾2Y‚˜ c]./—rÝÁpyLþ”ïa4Þ¼¿Çãõj®0DüB*Ž·;Ÿ'Ö7«ºüÌ ýù|Ô66„Œ-t4¨¼Ô*]&Ÿ2ÍIô®¶ÁD”â´îµ47,TêE¢ªï½Pz·-’sŸÕ™wÀ—þ Á±rɲùuˆYÙ»ŠÛ»*çG…¹•Ã"Åö}+O\ÉúÜ»oö#0¥wlQ®mÞ;v)îuÇû¬ÆÅ5­öœ\ä»ïÛ¼_í­y   ÇåŽfø|%ü Žö)XC¤Xó²ÒŸ®²/…—É’dfpØóàƒ.âñK…6\ì{ˆ. ³Z`Ô@Ö.˜ ‡"²I!üV Í¥‹M 6U„û@¤„ ¶x3ã‰ì¹ï¦Ž|?ÅL½¹þÊi]úTØì<Ž6S`í;ß-0ðÈMWÜP Ì› ¼­=þeúÞ7¸ãrÐT‹F3»Më˜Ü„`Ç4,dzo Tl™€ËwÜ0rÁÎÏ.|F9+“/‰f[4)‚p„¸:mnmˆ/žˆ¢‚IÂ/ ´F´ ÇCMáɆ  “\þ^0„uÍ>!\oà`.N4 y¹œDÆÈ\®êQ·0šF£DMôãJñ¸Êh­l÷ äþ‰ìƒO€åÂÓûæã%Ù‡¯’ûV·Xö‹ùaãLöúÓÃl7*Ê€^eñ2ùp¢Ëkõd=\KØh¬¡fXÅ‚\2h)”ؽ\¤J2¿$O òdEŒ*O &§k0KÑô¤Q™üýk bšÝ21synÆè£²TÈ•zåš‘/–Œ4]*©du©±ºl ôÁº ŒJõF²ýp°‰<ùÀdFy¥È~•ŒO{Ã!6 ßj¼éI‘ 'ÇrÙ(t'ƒ­$¶âéuͪq"§ÿ+õáE'_¢¤’¾3¢a/MÈ`xh^——ôý“¿MWU+±¦% c—åtÈò /±üóºyP.³7%Y/‰‡«B%/XlˆÐüõç«›rÔ ( ;¡ Gq‰ÑOCÒ8Ð(‡H €VÈX'ÐÔÙ¼7´ œ]±ó;øj» Ñ‹å¬õ5¯Šg’$úÛüêæj½ÒÓ³¡¼•‹dböò¼¢ÌDKÏKjÙÌ÷¶þRÅð?´>üS·‹èÿwLÏ­W8ÈX¾Ï?LXaˆó.NjÒ¨Pôdãœäò$·ÌL ’Då kŠ".Æå!Qe‹¬¼5°‘G÷Õa¡(ò@a`uÞ\ˆJ‰ô)BOÇJ›lEÖ ˜ƒï¾Å í_²w<{­g=T§ôíÛÉàíp˜èÞ™Îu××ÈxåïB£Z¬Lõx(+# §/Êd2çFrtñBŸtÏ&˹‘.W×êðÏoãòôxV5MÒySˆ‹S÷¬iEç> d”,M@7ø±²z“P"Ô,e<ÿ¶8¯ÉT“Cü¶†|á“Úd“ãõÃÚE±Oy¡o_Õã+ç­‡Œ¬RiæIq…¥“dÌÎòt)‘Ÿôø³zË¿Òtµñ¬ «?FZìÓP6¸ßióMØû° ¨ÌÌ]î´ÏÖ4e+a³ŸÂ§JÖOƒI‚¶í@è´HOf„ÔöÆr™Øì·2äÄY,ÍóÎRί167¦ÌØGÞUpK–»U3qwõóDó2¨'DùTwT³G‘ƒkÎØÁ”å»cê…W¥¿ v~Ä^!xGev¼»„hîO:Ü÷!bw³âtsîMVÀ»¶"ÎU¬¦¸y—ÖÝtXç’†ÜÁ~QÈ"Ï·MðϾSØß@à‰}Ào ž\F7ïf&ò̾\|!œ6›7sÐó‚=îÎ.XŠ#Q‘³N;cš²¶”-î·æI™°ß!%¿JËåh ¸@Ûö[ð›ÛN+lzÜQ¶(]ø°Ó—šµáï!heæE <%ƒMH4À# vÓ…å.z@sW8àà·sn¾'wÒ—TsæÚª-І„­µÍš€E¡[èyéÑèÔÖ´k.štNÞÐhz" ð—3 P®ƒ2– àQƒ\)‰¯…M 4”„£%–)¤gNLvB°ŽhK…½&{KoXªs\YÞ^ýˆ$…â½s»üJ%๾=L°”{³§Æ’~°jåÉAe¢ó¬øŸgÇú{¨ØV+Öào=½Ê—>Ñ“/£ÂY4­’éªxÓ•“>ÊæöÊ‹­RQ×™¬D˜%ØÉL÷µeT£x`ÌPìG ç:Îã¯Y“!×G|Ù*Œô€î¡Ÿ©m³Ÿ g4.Êec©j”LU5­ä;…35Í}ò]­1UÕ/],}Þyq®f¥?M^¨Ò¸‘Kz³QqpÖ9ï}óJ«¾î&ã?•_›£œêºþ¼)bm\;9“/º1^Ö‹³õWçs½ÈL¤êÓûǯ¦(˜Q ¹|²…S³ß,èõ®Þˆ5^×ÌÉԌɷãÜZåM Pó"©Ÿ/PžÖ} ×’AåÜ”-›w»ñÛU՟듆Ó_uWˆ™X¬]óŵ¸ñOÍÛ%Ñ»½óàÎ]ZçRçá¾´zùš4ß í,Æc8ï¶2úi»èwŸTWÙ8þ‡!Ï8‚wÙƒ\_Äß~þ啱°ñßùšãwÒR8l„*d€×4S« ¿‚¿!ö÷àS‘B@M:Ë,lzðš»—D±tn©Áªßž£‡­ŒÒ“ºh8Í,h) =îdGÙ&ƒïxØi{ZV¡jüa6Nj¾üÉÁrNƒÓ™.™YUýá³ágµ¿ –äÊýõüÅI­—i<¡„‹û}¥)©þ™éŸ¼œèL5î½ÕÑ©R“¤ˆ’Î_nžøk"»¯bÔ4wrÐËÅÇT¶VNu1úv8ÀÈÀ«/Ii¾Nìn]@áYOÈo`ÐBI §êEáødÚÿOƒ®œÅñúsUBñýDŒ/þ‘ä7tl!kÃ?Щ"3™ÏÓigK¿þwRû®„$A¡‚‰Ò€ÕQïÞ8“jjÑüfa9¶ Áo•­h<ëA*.EÓþ^–Ý„`žˆ‚ ¸`pùñ‘”ûð5ü]î48ó8ܘÇéï²pÐÔáæÒ¢.¸jŸÅb%ñ]È9¹èF\qà]k:yk¸˼Èj^OмÓÜ‚ÍÆ|SÍq=òa¡èñaDÎUíWŒ£÷´ü‹¾ºY“ýw è\±xü8 öWõªÉÿE}ƒÿÓ›~GõN›ï–WÒµ¡/r/WÍ~;Åâ!÷ÀLÈX°š=è4l(ì˜Âá즗/o±ßá`5°ÓOá@§:Þl@“f× B‚³42hΘv?Ђã‰};à>šàé*Û¡Ù äx©ú!ûsW´‡úiZçš~K¤ßKÍYK4= ÝHï…AÇnºÙ`GŒØù•½ßH º-d‹Ñ ¸l†›°cOè .›°ÚB·xÓ~ƒ[D®`mÞ$À.°¿¸ÂòøPH+Uz·„س?ÛÏö9ûjN p…³Ç±‹/Û¢·†be¯L´è“Ó#G(þÆ?áô” ”`8ÏQ†þx ƒwvDãŸØ,!ß' е5 „Õ‘Ãh%aç ¦»? ËL ‚jÍz=Jõ·U»x*ÆcP°8–‰ÅGÿDЖHrVy„ÉËHº5DZ]8;X_«ÅÃã|$#%Ä&–âcP(ß7ÞEyRø¾MŽúóþa¼Ä: $Ž «W至ѦYVù<úœžÓÕiqœJÈŽTwˆÕÍr~¹Zìbϰ~2è.ÕÔP#.ÓÂL-Í ‡ “¸†Éóû1{ñn×iøå¿È­_möª‡üÖRÉäÌ|E 1FþßäqŒµ¼X}jOÿê3Ð&D‘°ÁWÑIl=|øSE ’W5Tˆú¶»Ò(|ßQ&p_’׌”0:‘ÝÐsÀbå"VÍzR¤oÞü­½~†Â@ö—bÛÀ2£õ+ døE‚3þÅn>Â~/DÇŽÂ7MñÅ÷7„Óä¾§ P@AÒì#I<Ð4$‘â—X‡ï†l@s>¡“Ñ ™“ŽÔîMõÀ5ã£y¡ðÝ;H¥òÝNnþøÁoÜý=ê³wßì¦èáö/ æ­}àΣð£8>WõíÝ›óËðo*õ#vÑÞµñäòÜþŸz0ÜÁ£z§É”;÷Dºã…X4ÔåW kíybÍ#`stÐ$vôv4ÅÑáÁ¤—’V¡]ÀÅNpÁZ:iPoÒ4EN4!Ð)¡(MUkf³­Èœ Ûp޲Q.t;y³ ßk‰Ôô‚µÀü*CN/‡Êì9¶øe.ô¾‡fG-ÀãØãÍ@ö€ ø­}-›,5m æÎä†mRJDõ°I Û óðì÷1ж¿€Ø¡°£xs/™#¬trß¾‡ b\4[¡"¢`k Ö¶­Nø _‰&Ä~æ£Î}-¾„è^û¦•ü%}:4E‡pYƒV"ù9Fúh 0oˆqÑÖɶyNÇ<©|lªoä¿u4#üú{Ùƒ,T°R@ÿIœŠ²”IŒ¶ÍWã³$>­Jš” c6¡T×xytð(ÙÖ{³òÇäÿæÆ_ÌÑ ÒŸn.Ož¯ò³êÓõ_Ç•2-£V^EaÅ\JhlüM_üÃl¨§Ãåóµ s²R{´Vþø›I‰~45?]ÝZÿf5c«tŸtÑÐd ûÃÂá´:>}Ñ;>”¤þV•õ×Ç%9¼x­’‘œý©2Šs/IÜý$)©JòɰP++Xg«ð†ÖYÿªª”ý†«ªqÁÌrïX>W¹i\Jô©NB IDAT´1"cksí!Ç«ùX'f#4/„úPô›ìËÒEÔÅæº¹Ÿª|r¨(éM¶I/^鼯:DRd 5JÆ,¡(XaEl–é籉‹r9É÷t%ªõHáê˜?˜beí@3ÔJ›ËSr>`ëUë߀¾…x2Øå舸ÉáÂiò`ެ6ÝÔ> ƒ7%Ä…¦”î´¸•é:ÓxgÛo#hs€Ë†p¦‰@Ξ}Õ .¢ç—;ØöÂÿ§Ù¦a«i^îŸéœ™â]S>gä”KâÓÝ´w˜ãÜŽ˜¢à®Ê¶F5±(àÞåäzK±ì,ÐÙ³Û×÷ê×w„H»7ÿé§ënGµ®½:?|0xïŽ7ºÄ ®AC¿nY¾ø„ƒ[†é êÜBîœË«§ÅÓôc‡ÚN>`y\@ÐŽ+ D³ÇEs—ƒ Ñìðf&â}Òp< ‹XòŸr€;©×£ÇW\rRõ|ê9| MJ…:€@e¤Õ'ÑA½ ¹ú;bþRpŸ\=k¶'à ´$æé†Mx$ök!(ÐäØeˆ¹ÛoÛL± †¦'Èž¹¹ŽåOmZcÖØ€&;uàÑû]„L…ûíMŸpv„è÷hÖÙ5ÛÂI7 -ø, ;™3 Ú†ÿ{pH% 8ia¶•¾”G- ‘²Èøñ7k ¿Âêß³˜(”b«Ç~ü ~©ÀhHÖ…jceÙîÖ2þ¸\Á2‰JŽÏ¢Óâ!Qì—TêX÷ÆV=æxÅãi”›¡Z²É«o2<.6Éàé‹‹Ãét»±âÙö‰f0q2=,~¾‰¦«T’þ=<Ž+|ªÏÃZn†ø'Ëäˆgôù½‘™×ˆ§º›ÔFçO¿9ûßÏ̳I4í~«O¿îÏ0íÕty|®^{ÿÙk¼ù.>ÁóIÔÉ%ÏèïÄËÊf~¨¶ÿViÄbFÿ ÖòôãÒÀ d¹Ê ª»«ºVýÓš"«åoWFÇ£œ~µ: gä-£²I†$7ÇqãB┌L©Ïq?§_7T%Ò¯ÏãWå(žN!NÚ¹2ò} ø‚Õº·%ûýö2˜*>.@L—c›µ‰i–Bu(5ëãççƒ"îj $uBŽÏå)PøãÁa®4\Ι+ã†C#.<ÀÖJUç?ªãBÝø¥ ÄÝí•©z[èßðCjƒC1ª% ]ûm  PŠ"˜§i94sžU@üØOÍL¶9C˜î›-!Ûp4ƒG}Ϙ¿{µ1¾Nqœ—£Öß¿uIÚá7ÊZp©zk]íqKôÀndJßE ]$›72|Ãí½krh·êþ]#ÂM—§…„‰k÷R?Q$ðÿ®¯;0¥›):?ÞåâÎáè=Þ·ñ²Ùóƒ£ïÐÍßÞ™_æ©¶³€è}`gîªvè;ØöÐÜ…ïÁj@w€ 4Z¥Ò‡fÆA›Kuµ Zéïk¡y6ë¥bQ0ïm‰»6Ú€zê¸*hK þÅeÄ42v*pöàwpi³6ÏT:m¸Ä“ þ…ˆØï ¢œ©tLNmdD@9ê=€‚bk­z¬+Dÿ%RÈ·´ˆê;Žš_Rö\asW¶Áêœc§ÿ+0ÊÔÔìÈÆ6„¢*K‚'XÍ÷‚Úé,ÏdGlº<Þ&ø!°kÐzXÃ(’‡•褄¥Œ=ñ+PÊ–ü¡Ó}~¢ÐÐŒÔqÚ“…޵´ðÓªX:Ã䨒h©Æ‹c¡ÀƱMЇŒÎé…q˜OØß ã˜(³ ©+{õ~t œöÄšÉÛKÖÓ‘ù¸/Ã%mÿuEÐ* y«nÖÐwËqï;½V¡(!ä*Å‹rÏLÖsÿñm²N^EQ¹†Ò8²Îµ¥½þ7ÛÏ? ­"ØŸã`8F(5ÖìâÕ*º‡¢Ô(;Ó|hC†…cûÿ#íí~ÛHÒtÏÇ$3™TˆrDIbÉÅÛÕÒ©™Ò6Ú;[§{0¶°tÓ@¼ôm€ù7ü’ˆ[]H`n¼fQ€0¦º×˜ãžjª—ê.×IVÉ”T–˜dI&)ïõA}¸ººWW¶@2I‘Œ7â}Ÿç÷ô¨0 >É9Ó1I®ZÓS•;}2‡I‚ÁñG ‰—ƒt§åaÞÏöDw_ª·›FéBžÄ)î$ÂéƒƆ…#˜Vk¼ÈI,tæö ‚ž°¢³KÏÎg¦k 2;xAêðjœA4â줹-*ÐаŸJÔ…­„KŸ ŽŠâŸŸuº¨ðjÂk5aƒÍ^šM/¶g¡®¬ ¶¯„ÖžïUÑÏÍŒf%_ŸÂkø^ „ìHƒ‘5À`æR˜-,h’côW6Ö2t æ­¢£$Óø¼Î€ßˆ­*žµá– X$aJ”…EE YkˆºÏ¢ñ[€•f…AØê ñy[m®öT„Ú„ ú7å“ûîÈ^^`‹Ìþ(‡klÁú²3ÙBüˆâßdL‘úU0.`Ìžg‚0TååQ(¾x(@+~x"ã‘‚ÁB è3$Å^d#&Ë™N)@Är› §^ª¥Äóü’LÜû=m’F>“Kš¡ad‚.T2ò- ´5 Ã¥)¢!zQQOôn޹&6> Véã’ÅÆ‰°a¼H¡‡Pm0»Äð”ïB?+‰fÝY—ų¹]vEa†ÍpëøN³vV‚†¨TѼYuîµw*3ÖY#WÁƒ=ó18nm>s~Û+š×ºÐçë˜;7ðê×û-gV=ó“ºW Ù¤§qKÌÏ]\üZw ýóK\7c_Õ y×µYos©‘εj¼÷󇮄Ý*7ý«ò¢ñÓÐ?ÒÀrohiÝÚû‹Þœ¢ëÌ62g|Ÿ{JüæÓ»`.ºó½:ÜÆ¹Ü­~œ[9×´U.üe5§E±Uq4õ½<8v›»pÎrKÜ«‹ó^Ù=n›oa¦â3>6¨ÀS€:تc£Æõì0[rf±V—hÉm@Ámp 5@‹­*<ï<¢½I… PQµ¨Ä6*ZìÖiq¨/äŒP{¹ËWÂF1]2 } A÷iølÑοþ¹ýè¡Ã¾lóJuæ„i Ùôµž rÜ 9¬d‰7gªYÂ#È  ß- ùTù› [T0F¹4K¢ø¨Ã"ΧëøÄ$ÙŸKúßÅêjû» Aä ³t3Q10Þ÷Uè¨&GÊ”øF*õh%ÍïÆjÁzrÐáí°xN‹RDï¨HàkþN÷Èéµ$±ˆ•âÔ*G z÷OäÃ#Ë„‚ã„}FÒ–‰v~e“nüä”°ƒ!R«zôÝq¨§4µð65E<ˆ§I|Ç^ÌåÌ(·xÚ%ÿ€ÉÔy4¹>ˆ Ìt ñ]¤Í1–#äB¡³7ö Ý¥ÁCúG#~w10ÇtaÊ Äþ fÙ{ùWN7F¸ÊÍ$h| ŠSƒGÜ6[0¡‡„öÙq^”ÝÚæê“Þ‚$Ê%ÐI–¼PccOŸ,:ãQ€~Çe+lkaÿ¹T6Mƒi”×>…ÚÂ!É¢eµ:4vÌ2~£Èf7O~Ï/Ùc$[¹7¶‘Ðf £{‡§£Wi6鿹û{µ8ÞEHžü"9裢 2cfAOG‘ÓC.3•ŸüɆÖ$þž7"DeCKëŸý êh‹U¨ã*1C!m `6àA4Û‚÷+õYÇÖ¶€âx@P™…$"˜á¤:oZÔÊ€ïU…¬ný’œ:×ÍçrN9ÏL½žp=–X\˜çR"®NF«· n£Ï—òëŒîÚ¥AÁ›§ºÖ®¹[‡Þ+šºî]Àí½6<¿R#ëí¼a^Kú#–Šú-éû,ïã~x7ï8§èºx ¯8¥oû«]Aã^<`^]°óö"Îîü‡g¹µgù³à  ¢¤ûÁ”€fc–F· VãÞŒ9ËE€ðj¼yî E h Ñ„ím³fUØUá­mÈm^Q@Ûÿ¢Ž&[€Wã¨s´ùàUÅLˆí)Ž\pÂgTþ5>K¸Cä@qh¿©8äS ®]U¹Yb4”ô;…%•Uã }¨žz L‚2’GZòslüB|Ñ”hK—ò- ©œÊºxÞÔBf, 7bP~ €ÔªqœP¸àl[Dër—rOqB€G¤°!ȯ¼ïr :9ܸgJ™OÂ7¯¿ëKõfyEy~Ô–‹Ï_O¥¢"&ÐV@„%»Ý¢ùaIìì¼T¾aÙ$*cIÐU_ŸÊOòúíGQååƒçTùæb9™Fšæöåèôù4Ií”ÊOH>k­LT"¦)ôϲdsl¸€¼8½«ÍNwÚŠGã»Iù!_î BYæc;ÇÒÉÛ9¶f%íBRSìÇlb•{C'yˆ¨ÃR¯Å·¢þ½ì;,ÝY$™,OÔWX;Á4$9jŸd”6–FØL„ñdŸL‹Ó.ŒÁ«Ñ=¥ÈìiúÉ0*o˜8*98zNèFöÀW±£˜ t²šÜɪÇÙ:x¾¨Ð1#n­Ú0…('¾1NÇX.Ñ1 ÕËÈiߌz›™B9Ðt¸@?‹Kÿ•=É1=Ž>HdÂw÷Ç™XOÆ:3™©$ 1?IõŸÓÅp²ÀôŠ6IX>ðÌÄ}ðÖØi)_*§y6™›}GÐRø¢}nS \6`ŸÑìË ðžÎbá>À›5>#ðÏR€P›Álœ3Üö¥@sÞÉÅ0DZǜȵ~Óo|5qü’9q8Å׿Ëa½k}ŽÚjqmû{®—=C¼ú~,i³þžnùÍÿÖß»wç[5µ«YCµ¿<”þÑü†÷¬Üf¶vßE}ëqÆ»6åÆœ¥¥þ^ÿºwk®Žfãz«îÌQj¼¿9›7\¼as’ûŒâwU‹vnhä岯Qƒ¬ò­Ù ¨8;HÖЬžFê ž‚ Ž6PS¼¢·-å6p—röìéìSè´(¤âÏÈìsìcæÁ®o¸ %Á¨xá•D 6š¼çó: ˜K¸§ÁàC9’¢RbnS@ã…üƒÀ‰ ûN÷Èž€©e‚×/G ¢$Ó¯QJ•Õ‡À¢ê¬!¢,8BË€&åÞþÀ¨ø×=¾õßùß¹=Å3%Ü&CNÚp^¸Tø°)ˆg íðM%lú|¥äÐ^í1ëW a½‘Ë£ŽuúŠ3äTáø›'£ƒ4JÊWke3tJ 9ŒÙ4Þø¸ðbiÙ†£UðG&è1#²žúìm‚­ðû£œê=”Æ‘˜‚ò\êùhÔ²Ž NÀ*˜Sèd&Ÿ ÃDœžý®ñáÚñ80GÌ0@;qÚJeH8KKÓ{4yd‘;ŪáßÏÊ·;Q;9á ·:ÐJdöЋd\”°Øý-þYGtòîð-‚$ž**Ù~A´¿¶-CgÓä£QÑJ·£|܆RýNõ÷¶d¼{8õSS;Þ ƒeCà«–õaâÉi_¡˜ÿ¨86Æã{&‘3QElOèWvô! E¨ð1xnìëÄîd÷X‰ÊÞ²^*›bá" ”A÷ÏJeTŠÄÿ#õ|xØ1 M&Ã7 Ñ·:9‰&i;½P„#WÔ§;©¿ks5À2下 HPÜ-áþ:›x¤Ä&u˜ ‚Uá6^¸ëÛÂ¥PÀV n ´êCa«4‹Ì¨ ÔÅleoÎâXR÷ŸQ4ÂVuÑžQÎÖÅNµÍPçÍÊÉÊõ¿ V·8æ†Ã—A= ]õ+s`àœÓó£H¢ë#èÚERÐeôíè½ú•Å­òãd‹ÚÜû‹M§Ú1þ–ÚðÞžÒO0[{ï;:PqsRïÕn´ËÊÙ¸R!.§15TÔùß½~›%¤äTÎ΃ç,øí¼›q«ÃkˆYýpkp.7)¬OqÔÅì´HgNÅ7fÓ ¯I… &kµ½w5w·ÏÒ@Qg(ÑYì¨ØjCn%ÇÅ_מšWª|KÁ}ÊQR¤Î¡à‘PѤÒ{ ‚À±k` Ï,éoPXгu¨J±oŽ¡3X;Öã5‡½‘º€\Ï!;úø9Mø…5‘[’›Ëø¬ÇMÊPôQBÏDEñWë>’œ~çë$¬‡Ü3I³ëÓçk¢YÄF‰5›Ðt‡Q¦MAi04}ã1J&î­>ôkRZ-~²²ñðáF!M×rtõn¾°²œ4 ™,,05ùøáŽÂÈn—p?% «‚|ƒw—ZùòéÑ¡D4\w´¦Ðè™èh16Xœã4²Ÿ5|[amÌÇZ੯/lÿXƽòIÿåðTw“0Ú¿¼gH$‘[`™V–$‡$Ÿco'­¢!'§NÇ ¤gàt\èOåDkë¤K¢=ãõŽå~@â5­ÒìMþ¼`ôòÓÄgéñFœ[‹—è`Xs²$-Ãyâ`E°3 ,µâDcdbý*Ro¾ &'°¦­$Ø¿“•V)èÂ9EpëÄ“õäwI'L–1Ås]@ªûo鎎cj±á ýo8Ÿ”05€>¨µ›ÿÎè!ÒÒéí¡#ƒ\̰êD9?þ¬¬>¥0±D¸UØù¾ƒU‚Ô÷#£ëÐ##dòµz²Ñû¦póciàÐÀçJ£¬NUbf*?Î#^^±x9÷iÃŒ-2¶£¾üËkÌTèlñ/Ú€æ_}ý¯…¢è(O9Ñ M4Iø…)XûLµñEÝGŸ×ÍöŒE~,* •º(ns]…¦ŽE9ßZçͰ¥|€3pIP•ó¯3Aj Ÿ×¨AîUå|‹ÿ‹+Î1Ph^‚ÄüîÖŵfÉ¥.öRGTŸë”Ôç*âGš+ÃsïGÃ1/3æÎ¯uE±ùÃöO×­þµÁ}ÿhÁ­ÿÔ{]¶ÌªWjµ{SG<'“/¦:×<¿=Õ˜ìùâ9;R¸uà©ðjâòHu~ß_Ÿ¡÷xóطʽ9Ãä™ ðª˜9¢e³làóªß„pKø¼гx8pðPv¦Ú|«† P©Iï)¤šÅPs¯¹ïÓûøGêÐe^¼‡ñGX[ÚÌ/FËË›ÓÕüG÷¬•»[YþàÃ{¬Ê2F×<žNWÌØ*ä]HÓlˆd\ήB=-¯hg dW™ùY“N2›cýr”²¢HÉ(Žß O9bgÂÔe@æ¨T„2lZ+_ñÁoÅÉ!¿qB»ø| Œ#6ÁÒãÄ8~øJ›dè °h)ã.Å$8}÷zrüǃã×'ôè Ôo§TÁÎ[‘#4!×1²ÂîB«÷úeÿ¸› ž,L÷¬!&9>ù\¨5”ÈŽÙ$ô y¨u7&9ˆiÁYúxÈ@ØþÉFz 5Ö]Í" mü>Äã¥;ŽïÃÝ©–#b¤CšOã^ÔêNS­,@V@‰ýòAQ˜wm„޵X5?=–߯m; Ã?X”)²q8Æú>º†94:8!´€š@ž$7v£'cœ„Ï|böGHrlX9ÕÿÃf2šo¬ñIkZÀ—/íÍ_hºTJöÛÓ˜ Œ`’äíý¢æ¦õÕnò1’„{ z!M¦…Üa§ýc¨ßE­· ¢D{YAã“»ƒ?v³¥…Åvo r\Œ,$3À÷ᑉ ðåYÂèÝhÃ\ma`£C3D½¶±~ŒdVO÷ …¥‘úìó_е¢T¤ŒÒR^ïǪ;’jÊhž*¨Oc2.¬G£.€ÔÒÂÝäàm’ÿÒÀN´˜›b\H«w’cç»ás·bpšÜ™æôhŸLÊíoü‡9¹ Ë Š<þÊihMIq/è¬sì ´Æ$œíË5´ T¶Ñl‹îa«OÍhÒÂ1êL–h¸çãC>ƒS¡¾W•î™´Ô÷êÒMòÎ&Žür÷Ý8[¾½Ùè¢v¹¤Ì䪷F¶ÍÃ\ÝŸj‰ÛlÉïúÏ+_¯éòßG øÿçfðæc'þ&_´ðj?MžT¿`tS"v#òô:]ä Š×ÕÇï«{îUÝØ¬)äÖÔª˜aΟoÎ]HžÏ9Χç}¤:??úg®…J8Â<wkÒ-qPü–rV‚KŠÂ{ ¯xUÞ¤`Ù¾ƒ°o{¦Jâ€B³ÝžÕ±µÔÀ %áB¢  À %XhõðEÐv‘aCó/¨ô "+yÜî¢2æMõЧ¶l/³ðj­üɰ“³ÈX’^ÄJà#Ccèt2l˜`Ó„L|ÄBÃÚ‡ö³e½H3%'ÿ±2!õ7?%»€Jé®…iR±šL9º• IDAT‰™³iˆð€`ÊôÄl§R]29ÌNoÇéå©ÂÝçz)—5;Ù¤z§ÑO¢Ÿ|ô‡Ù´°¦:;@> t ªœ®åPðÉßO“ˆ„ÿA}4ÊZª<äž Åu¨ºƒm.«Øz*„ ÿÙ,«ŽæSQ©¡Y6[u4«˜Åy¹õ¢£h0Táѳ–‹¤ä sé^]ºà(qÔ…[‡Û¸ÈZŸÃõý¯,A•w§~ Q»ºÜ×n#áŠhÕ½Q®Ç Í¯lõùHÇ3ƒÚí.`o>nWT·ê_o±\0ÌqÃ!ð{J³”c÷ý•ç–Ö5‰êUÚ•Ý­Þš¸nržûÍÙ;w«yýBÅdÏÕ’ÊL€tŽ—’âßÚ­10wÒ¼À©×ó&•@ h£BÑTb @ƒ{mñ0V‚jÞls·sf f. TÎ03æ¶pŸ ¯t¶yñ( A¡O ¯Ù6Фœµys¨¢Rn£ gF쨀Wà7+~k[ÚfQw¦ÄçT(›p݃6|ÄDÀ`2IZÇ ÇÄؾ8v£rkÍBìŒq8”/{Xî;™IöY7F¼µÂ4òÑ4Ì• Pj‘$ñà^„µ~©GÕòBx:¤oôÝiké8Bwc?6'›K©qư¦0ÕiÞ8ÍÇæý¾Ÿ$ÕÈ̼‹ß.ž¾[HþCÊÐÙ׬GÙ›tĆ„‰(º—šއ8|×KöwNG $¢ œá"ϼØDQc®sœ‚uÁÉ2Ôo›ò,Žv¬Ÿ—3pb©n´D'ᇽVw´™ªÂrk©O² Á;ØùŒs4Ì 9%Q?ÐÖÊß@*‰I–=8&t¬£)4 º’”ƒ4#m˜”ë¬-¶!uôËã„áç•Ì-Xñrvaµh Öœ3E‹§v”D*‹®YÓ逬ƒLy¸ #“ïâ4|ûñ†ÙÅáb¢´dÜ5ÚûH ó&·2êuR°ÿ|R>AùO#$÷ymìG3Ó ‹ eØNjÉ>Ü…â=X¹ q§»¬óZÓ©Ÿê«?Çâå‘̘ÈAG«ÜÈÉïãdª‘ d²–YÀòrÑ´TvJORXŽó“è~ŽÞ9LÛ}håuß8|‡Ä€‘»·ú.âó.‚aÜ¿º§„¿Å†wè„ÛBó=¥«ÙÙõë´×ÛÌ„5~éu¼-é,¯üÖ£YýúÛvåùNԙɫÂÅŽ×gȹ;ÏgIåP{ö–Üš!4æÒɽú¼—Ä@0ë{VÅ/„ÍLp3Cõ FD`?ú±¬Ÿ˜¿§¸(Ôe÷I/§±Œ 0þ{ð/äøþZfÚ¾[ÅN’ìõÞ›õ{Ó¨wŠTF«oTT™ª3–”p;F\Na=)„zÉrŽ#‘£üۺ㗊HeIWY¦RX'ãf¾<~ϵÕú¤€66sƒÝ1x4ö- ¢’~°™Êâ®ÿmd}BZxkŸ4;P™íQÃB÷N£·D«éÇ£h ¢à|mID1Ãñ‰,PõxîÐÕ'*z²eÁS¾­œ ·-¼_`CsjâKcg3.‡_! ° ‚¶`à¤&¶ ÔAE`›£ ¯æÒmÌÈfBnƒ?«b«!šU.ë`@… ¯Ê݆ðÔCKÖleoÎÚæžr½³ G~ñeÖÀ.™ ^cn…mœýþ/câÞ×MjÀ­ž§Lâ¯[*äº?†~x¿3ü§tŸ®d_εÜkï¯i`Ý:3¹žÅzYWç{DÜ­ß:…?~m܃ó¹Ú~Ðqõ»uîÞ”QÕ¯ŸÔšWŵnýÆ¡l†«ŸI›Üš¸®Á£Â]—òIÛ@pî×óf±º˜?§¹eO m;Mh¾ç†ÿïÃèHB,@äàw³An(ÀDaÈÒ?8os:k¨© ýÐ06Ð¥ z%žfî #)_N»ÔØo&Vf¸y:50N£pr’³&ýŽ{‰°G'ëÝ`ˆÓþcy< >JëÌb0pF ¦ŽÉh_ýé+ŽÉ,Èß‹ÿ<üåÉ×N;ðÛÀgšëÎN¬wî—Ê…ÏŠ9 ‹f¬”xú×2¿‹åU`ñ9…?YyÞ »Æ?ØØ ©RL=2†(æ‹$ggÇŸÞµŠ4 @uߨ{Gdÿwò‘ŒWÈ5%¬¶¿ ÑSò…3££œX;Ô!B%¼†LÓå3Áö7W8ÀO©ž|û&8¹ƒÌÀƹ„¾;°ðaÔƒQZNG0uöm trž=°ñ9üé“/ÍÄãtoÒ“Æäp¯„Tò¨ßFW«ïòùÖTè8Eð–ö;J#w;A·DR†¶Öä˜h¦´X …\G;+S -³•-Êe€hÝ=W–È­µ ðℯ|ÓÁò(ͬ|þÈêg‡½Â¾…õIôB²?&ãXï^z•ÒIØB¦u³CYÊDß«`¬ÊYË^ÉïLŽ6ÉI¥K…‚=êÙ´(rºœØ)3¢¹5aaQà©ðJ°ÔTÇßüCíìäj`Uä´p)d AC9؃W¿=tP?CVTfà*¶¯ÊÉ,ð™ÂwëUæ®+ æÖ˘[%\ Y—FèŸgÒmUêy$Ηrœ‰Mf+ »ÚVº€xÏnÙ¬ÏK‰Ä•$5/.W¼oõ÷†WÎ/e·.î׌ß®›*nÑ|Þ¢ ½Bç¾äÀDÅ”øQ‘’øqñ“[{¯É½6]¨]:n2ò¼+j¥³7u~úÍÐáÝp`ÌÎ}Í<*æ¦Óç$¬ÚYÊ4Φ —0¬Y*'V…׸@nÌh˜Å×4@¬!$lÐgйµ²gAH·Ä=z~QpkÜ­£Y?Ã"¹£`5îQìÖÚÂSðjh‘3àøÔ—@ü¬ªÕ„Wçh G] Á<@¶}Iy’ÑøÔ·;$ˆ66MG*P8r9å$bN”ıDZF}a¡¥Y[ë(í ³PŽÀ²ì ÑFyœ¢G#fåX¨5eôwXíò^†ž,¼HfŠæk¤ èQë|‚FÓèpq01˜e¥6­|„©¦o£;?ta›ìGïR™é«Þ‰ÄÂpi@²5N‡É~oøöÏñàÛ,˜<“0=Æ$ˆƒ?B¾2Ìqb'en~7ÔߘŽv‹$À© ´ ”ÇZ¬¢ó<‘ÝÍþÀÂô 6w̬ÅüéʃåÅV*ËŽ§ÏÇAëÎÐ:èÉ_ýåhy,Ç ·/{¿=”Pß!ÿ5±D Ú ¬}€ü W|rU“$À/ðE„qA|‚Œòc@ñü˜wKŒb£½Øú£”ó)v‡˜(‰Îžy¤þç÷ÃÃovó ‰•hz‚“Ìe™ [‰¤?]Š%ÿã`u'\¦è^Ù s'‹ºÑ‹…;ÑÚqzØî¦_©“……âÉþã½+j¬c¬`ï9E m‹i0º¨'‹r?bˆ‘z(;„g?Ư÷QÜçÊÔÿdlN–Ùq¯ *‹Q‹™ßm FüCJÃý_!r½(§û/m‚Å4P<‚| Ù«“–E˜Úí¶Þl,™SàØ&CmþŒ¡àS¹IÖÊŽCŒÊ]ü’ÄA6,ïuÙ*AzøU t*0¥p÷)×G -âì~Ê÷‹º³í?ØF<«Âm ”ü&jÂ¥8ëÿÌ@¨Ãkp4fvŸÕý­g†.®q4¤Ç¥ÎÙj0'f­\l=¯fÍÛ Ãùxòrë}i¡½MD3»eeŽÃážy÷naf`Ö“ŸÓå»×»ï±³ý¥ŸëÆáúû×_Û•¿º¿¶'þѧñãçþ·)n+GÍÚíž‘kùvÍ‹IíêæJ 9§Î ÀÌòV øEûˆÍúkç§÷¢ØÐ¹ Õx³ ÔD¥V½8¯ðÙÏX­Mj“"6·ËL= ¨l6ÀÜÃ`á›òtâðõø´›²ìèÃbLŸìÞgÿñæK}ÂHáñ“Þ(:~ ¦ÇIDF¥àí/ý7òŠÈ¢Å'¦PT@phPKD1N(&Tf(ÏÝ=´,¹µrýâgN†`€òEjBþdtÐSIœZÚHZÅ"]qw'ôté…9*"ÙYÞ§cä2ɵԷ:Éÿb¼0¨‘ü»¬eÄ“HbM=Òò1`¥ ŽŒ'YÖjgvL"rTŒ#‡˜h¯c2’ô˜­-Òiˆô§yŒû|¼Z -?úœ¨úˆ±£Y¨‘§lò)* (Bæ Ðað[ØáXï[;T%o‡ê.T~ŠW’§òÎÊKª`%[´Ž’ D嬼³“+(Y£]´ÌñŠ5J?Grç(f½§>=€ÎùíÐ ?ãk±ór•­Å‚@ØÛx¶ (T465ܯ„5vŠÚIçv k›7Mp(ø¹|HÌlOî¹½Ù®U1‹I¯ÀÁö™`½Bgø0µã•ü˃~õÊêqñýòêüÚ¢y‘ÍyƒÔàÖæÒÐêpÏ3G/—Êx܆£®_zÜæ÷ÖÍ÷¬¨Þ¼âà’¸>—½9<¸ à{ïlY\5L\‰ý¹efþÞYôm«›ön)8«ÿ˜1â»èÕ¯WŽ ìEywkï­içè$>Gþr”Áù¡¯2ÿG¯ ¯PxõK¢_eÞY=S³yäüÕÕ0ãu{(A‡w4dU¸Š“’/Á%$´€n»Û™=™í™ÈUÌBkñ6PÙ€Šâ´ÎÏ}ü¢!)Xh …ÙXÌ9ÿT ·‚­m| Ç{Ú ('[ðÀ…ŠÅ´*£ D±1ÖÞW`‹;jI(¥Ñ…¦å(§Æ÷’’øþ«á›Öƒ8즊`6=´õ †ŒFèM°Ÿ’Ë Bb§SŽî>YÊ“ØË“WÉS2I°Ž[H»q?·8ñÃS{”T§Iu¢dÓ.u{ÝðËñH'SÃ7a'Vöãp÷Þés+Þ±NüÒ?"þß–b‘ËÉ•Å2öõ ÔÁоl@þ†[€lêÿ8ˆ¸ê8,ñÔ·Fº´ç³ÄŽ•E6Ý!Aî4³:ôïÇt•b¹çä¾{®à·‘‹¿UÑh¡Ä¢ó|²æO›åM‹gö„þ ´Fâ…Ö+®"–Ûb†*¿zÈ#Ñ(”ý‚Õ9¯µâÇ?¬Ää2r²L€LŸÆKf'6“9dbDÓH÷Ç錑L ñ³Ì(õ’ i2ÂhuC©“ïõ^,qاH—×öeÞh+ãEÊx²ÚÈ’çûØüd-‚P d%M‡±­hrÒÂ*Ž¬è·¢öUz70\O¨ìÆ Q@5øHe£ÿ1`ƒ…³HŽ˜Kæ[:V¹8 öô°_Þï¨×ˆ€»l_•£R6Lhc\< S“Âxoð2Ì·±´™¢f7TËÝàÕ‚sØtŠ9º¿P,æ|š÷¡Ÿ?Š%–8JÜÒ@ûlÃñŒòH @ŒŒ`sdu§–™ö[ð½*÷ \ŠYb<ž`«Ì&Õ³=ïSÈ:¼Ú €/PÅ$j¢yÎÇvkÜkœ5Š+àÍó_ójsæÊ÷ýÆšvÅÌ > ºÁÁrnÙø{7û?³@ÉÛ»îâb8nMÌ}͹s¥;; ÌXªç}¤9é-?<÷é™yêŽ[¨ú•@„¬ÎâÕÚö\Ê› xn [uÞ„ðÚ x „¤ hhxuîÑœ‹}æá¨T…Wcrv\€/Ô¸š 4Ÿò *$•’À­sVÁÖvàj ¯"lQ. ÏsÛ<¢Îgÿ‡#û+HÚ À¢&€Þ—苇†g6&F@BЊ–ãä_ñHaOæŽñÇøÕJˆ©zA§öò"r½ O¬!Ý%âÞ›Ö»A–å§a~ñ³tý”܇îeÜ'˜@`з¾é;cöv¤¾;~œàm_ŸþÞ‰ öoŸDv`ÚDüB¤‹KÝã  Ný/QüâhÀ®|å¸6„j‹  •ôê~¸ SA¶wºJ¢oOŽJ¤ý'=HL13ŒÿQ dxÚŠ?`úcL—ž +é VûäqÒ²ñµT»ÏÛJööüÎÒ”}^©`‡¡¢¥€¶ÜýgÙÖ;ì%`Z"S*°#¤”Ä~^Åaìo7}ô‘Ãw›8Þ˜ô0A+êî&e+G’ù•%ÃJ&Ÿê¥»?Ç»û¤plŸdGduJ¦ ½!¦“q:.æºÔ"R>lªqÑ^Ï\3:fÊÆÈ Á°øüI¬³ë ?™¦7"0e–5Žü„mŒŸgÖŸ·ó,ŠË« Šæïˆ"ÒѲ³~:%öý1þ áHnD°Œ´Î)€ Ì5¡5;$Ž®B/È˽æ_ªŠ}>ì’îQgE`l¦JSØÿ¿°¨ÍOhfqmÝ‚ŒVk{¬ä|BvPâ>#КY –B§¸Ù§ý }¢Ã§¨PxS±Yü§7ÃÕ^M4gÛÿúÙö™ÕˆŠÏÜÝæ¼rkpÁ*tÆ#8!TÎg•ó…¨Ò˜7`ùWL˵sçUŸ{ä^5W{çÍ+ àÜâÞ¼²ŠŠ‹œ1`>ˆ”ß¼ïûÚ-Þ½ïe[é–®;¿ÒPúqQíúyà/è”Þ3þ>—_è‹æoÖ¼†Zšã^Ü !ñ®ä3÷Ù¯ˆp»BÕóç6Kñ¤@Ûq¼§Â½ø3QpO V›UrðYà¥[8­^ʇ*×T áU9kD  ŽuÅÁŠ\Ž*ÜÍy¶9ÚçïßLVq¡«óK …w¦¹öݺ3Û‰°:—Ô·•îº@…£î¸šàR M €Â®bkž† @‰­uûÿY)Ž$a§|}(ÉŠÖY­¾•Xf9Ã|5’Å ºb3æaÖ·Ò$zëÃr>-RGÀ‡Ì;jº“5`fs‹ÝаôHôh>«º“"ú»ÒbÝËSô˜ «U¯˜Ïî§ØyK/|è$G;ãE}Ô•t…eÆd˜pj€Q^£Wœ.„ߎËÁÿ%ìt(qùv[U4ëë&ÈW%äÖ„ ×¶ ”S% )>²ÄË þñGO Zö IÄ@»#‹`ê+Ùè:ÞӪù¾±Bq´’¿¥Eó7\Öa—ü@;¶9а«ÃPuHZÁ¤þXI,Q6ü{‡|-º?·SqPÙ‹° k2ÀðëVv«ËÿôNîPG$³hÝ5p„e’ÓèÔ ~›(äã“>[^."ø4;Œ•êGË‹ú$ƒµüÛ¨LÓ~þ,ÜÇÖÑþ“¼…SpJSÇ­Þ7 %OŠ›Æ¸£L'7 Ì؇ÒR¯ÛdjÑÒã"¹7Ö§(¥I:TÝ =ÉèÌX¥§ÚF·}j-¾<Šl«­÷R¤£Ü×Á¯){¹b2Œ.™b¯“²ôÖ*ë §'Nòá‹?žvè1¡±VyÜK”¦I² §‰e|«ÂpR̙dž Ô ·¥ РܦÈ)?¤R?  Ì¦{ûŠ±Ú¬=Å›—67q‘oï–Î(ýïYµD¼òSDGg™¦—¥‹ˆè§†¿÷AÞ›iq«}ø¯÷¾ÝÀÛ‘$.JwÏ=½ «æU…ÒbTízø Vá]½‹‡ËÊ?? oÞf‘s«³ªÎgÞqOmx%§ á6ØoŸÁ[GhV9ª>À+u4/"GÚp)Ðà.ű}# 4·q–» ¸ ßSÜ­CÎåOáRß`¯t|˜p·:G®+M l»!¾¨ÏÎ(¼yöJEð”pgºl8D°ë¨U¹ $°Ç½ºxV«–=Ådšž‚X ¨"¨‹gOÁ ¶ t‰7UnØ÷õ ØÔGß¡nM|ìA«LÐî9Ö}n N,¨á<ËNüÇK¶±ìk ? Vj,?Ïc³`3rJ§ÙS}÷TOÛ:9¦ É"Vhפ‰þø?'l"e$qòµ4åd\žô –Ân„ð„) #¹¸,R¹£€D0µ#ˆN™™Ð§fy!&Ó{ËZÖ¡@‰kpÔ8Ú`ÀŠB³Rù@ h;_ùÐm„([Ÿb1†ønjc?†‹ì}QH¢gÊv—Ðë„NXâ ”ÂþgçÕïøxzv†s<%¼Î™IÞjK(Xໄ œD@›€”° ŸÚmÊ¿/Êä׈J|r\þòßÄÐÇå^Øê?éyo„﻽8óé·)’ù©$þ­¯ôñ‘5Õ½éáþËÃ)k#…btŒD™»&’æ½Ø2ãu{RŒ Ö/ýü!RÔRƒàä[üŒ!ÿ'?!uÜê NhbZÜ Ž6åÖWþ.ÐÙClIN25ˆÚÌ•0>mGª{¤û° C+û©DIǯ×Lsd(Ýýò(Åb“¿w¬oZ:(w(žE€n‡ ño€î1)Ž`­ÚjQfÓ9¬‘䇢­:ˆz–DW ÛFâd°ªº „™K#Gv Yjù-©`?… æbÇ2EH½Ç¥âºÆí’³1«T8j6p^|&I:÷-ós@]xUu‰šÃjâ kúrÌ΂ÜÜ$x|ü¿T»œ›^ñôrQº ì¼ÜM¿§0ÔçW:+•÷¬Î·{߃#º%º ?¾­Ëô^XÑXS÷¶EÞûxJWÔDµyLéeÇêf£êJ_ý="Ôy%Ö%A—_¯fµ+ªœEjˆ›úÔ™;Õa^Uüœ½ïoÙ™ïù‰%R%‹²sNl³ÝamwgÄ›Y wºwÖw6±ÁèE …Þ4P_êíëo ø7qÞê%,ƒõ 4’™k̵ï¬<É’›vn1­ÐVÎiI”ŽT")Ͼ $K¶Ü¿´åR±H>çy¾Ï÷Î Y—Q]j“ˆ¾VŸðêóy%©“¸S¡`Ûë³û1µI¤ -C=¢BR!–¨ 42j£üPI Dñ$~ÂJÒm¨õ@êvÅ$2Ë #'¨©µˆ×ˆÑV¢&äÔSTT TÖ€ŠqMÖ™Øí¡*:ó“çÑ2H¬3“´ÂZïtÎõMš2²Gmq³ï­,¦µÝ¨ЙaÅëPL‰Èk)¯R×…)ÜQœØ­ æíöÈ»×âÞu1žZ:š³5›çåMë™{É1aq6Ú‰ã»Ñ¼X,.¸½ßöíŸcw:{™óûp›hP Ïõ aö ‘øí²{¦*Îþ«[wÔ·GúýO\öSÔÍß3µ <âð(Lm\ ²þëÈös÷D©šF¶¨… ƒ3ASç=åÛÊ—> îEEPFH|Ã¸ç© pž[ÃäœÎGêh_ÛY¶‡Ë[D9&Ã`y«nxž*`Ñ„¤x.¢&ó"8©•¤áû³_¦]¢RÙ3O{Tëû™ÜÒ“ø‘Ûu+ IDATÒ¥!Åž=ú³:Ÿ3‹ÓzzëÁŸ¾ý²òZÎM‘w*»‘ Yç¿áÆÉð˜êl?Ÿ)ÜXš*¼~=|ýƒÃq±¤òáÁoövúû¶ã¾áUå'îÖ±’a¾}lºFbÛnÂÁKEnÚ|ø ëÙâ@¯ß³](ËÑ`Jßh>öÑð †ý\>Aœ\¸?;[º.ÆÅS÷ƒÂÜkY¹¹4:°ÉÞ8¥‚èÁ‡xÏϺ¸Êò ˆwoAy˜mnUÁßúf‰Bû 8>¹ûzåã£r‘åÂIXôzvKäó}æÅÉ´û›ª³²\èqrý³¼¯@ѳ bIö+Ó–"qËî¹òÔ.¢<`&;‰Ï›Fa’ÖòʙυDœÖ5ѱblc‚ähšޱ(ùV¶qã :œò—Î;×3æÒùšºùF)7/©…/f-$\ÖE7Þ\á-VhûŠ iÃûO‹s<'i¾×Nõ».¯¼æeÊ~òþc þ7é¢ß‡sË%â÷½à÷¥¹ñ}2î ¢×|G.wYâ\8]â‹Ëý1´ëÐ`Åm¨_éxUK´/b†Å Ï¥Eû4¼ÁÄM3! ±˜¸I­nâ–‰'ŸI ,Bd¸dâU³^ÇBÍÓÎ[î’ç´ÅÙÇ®uCHÁÈÔQU'©“´ôºƒU’&±3“Î(a’–n|#ŠÑë«Ú6´—&iÃ*µÀ€ Ôu\㵉Õpe¤Ëlõñ¯¢~‘~éTÅ!°mÌ`& xµoK/½Ï—!ˆ|û×ÿ¸8­ŠÈgôO~ìy­Àr˜ O‚Ñlp¨†ßUó'|{Ýg)¤·®ó;fgà6½Ý)н‘::¹#PÀ‹!%çŸ.¦•ë8g‚2Ü‹vÑܱüæÄ®c%5üÿ`;;ú÷fýÿ——ÿÏæó­e»IgDCw„I$qÛˆ5-*¡ õ2’]Ê|µ0®Œ÷²Ý úÕ¡ÝCMß¶·bFsöd®<ìø½.üÞø–÷%Qš Ó.GIÁ¾)#yLáÕlÛ»½!‚Üíf®W þØþÓÉÌöLiú–Ýœ¾ñTœø@ô^Š! K•—¾x]H”¼ø†²ˆö+ˆ æ7äÝÎö ÃTïvöm>Û²8ýp¦0¿fúú¦¦~Ùb:.ãÊusj\> äÂÌ0¨¨­Ì•Êe†€eÀ¨çXGØÀ6È=ä °M8ÚÞ¶Á6u\'iœ¢8ÔêiX;¥„žr7§Íþ„ä7H$µ:!ÐJOCxÐÉä[Üš@»Z‘…Lm²ãmš7 ¤wâaìETãrû[û¾fü Õõ­Eì¹È®q‰{ú‚_˜H®¬À\ö®~·Ð'åÜ—³8cÞIÊk^‘Ðó—sX/¯.™Äê+ºæräªCòòRþ ¦„7ÏW¼çgÿ¥†±ë¬W–kÏaÝt¼4 t˜ƒDIp<ªc[ØI&ÏD÷h;Ú•4̉נG2 iâ[iŒFÆJÕ¿‡z´ÛZÕ©µ èÚT¢šÓ©Ã–²m ¾a’µ³î£ŽjK´"Г4«›i­®U—vÓ´»:v¦xbLÒ\NÐIS'M¯Rk‚g30üá¡óÙhP´OËCm‹Zþ¯¶äñú=+Çiv°\|ݾYY’¸‚þ^ÿca^ÞÀVîVK°_êÜWnO›©ÁC<Û#{2gKÇ>r»ïï©ÑëŽã ËŃhžlŠlq/#`17³U"ÿÛPà Ñ7Ciú^ïê±ü»áÊòxCE²§‘¦XÑGÏôþ¡b€‚Ïëø5XÕ°Ñî†ÁjzÛg®YgòOÙ*ˆ‚®úÙðvCkc3@x÷R¤ÌΙ[3j”sí楰¿v¦ÔM]Q«µÙ2‚4©Gµ+-[Cã)8\³ªA,M©©•ÓíJ$„#š”×'”Ý“¦×3ž–èl/rXù+3r,£;,”í]–oÔ8´ó3Õ™‡ò¾žôÝ’õ²\»¡íeû#íg·ü—Kù±}|;ßö3, öó¥–˜ŒGa¡ Oþ4 Dç‚@÷HŸvme°ü:Þx E}7_záÂ\¶uóámŒ“v,ñÏeþʺË"WrÁ燌oNÿè5'¯ÇÇ׫3 9bôyc˜®õwo–g;r °dpgƒ’’û‘Øg¼º9åæè ô7pt _oœLõÂÃÞìI8õ‘\8Èæç,¤s?ø»±ÿý ¶¦ ·¦ å’ð›Ãù 5Xù‚u´• –}ÛÄkémUW>UqOÕ¤ ý™$i™¸iµ iÂs7Ì mûºœè‡ô¤¿ŽI'Æûª-V&Ã}CÓ4IÓP×c‰‰ZÍNf‘Æ[¤¸k§öj}Ùûek\4Vj^¢Ý_I0½ô§þ¦p_éeÔ¾ –¼5—ÄßÉ)z¯~ yitxk|—ÒâÚ{Ý£š—È¿V"ïIWœiñ•?ö®"ºy‰Åóæ`8Ïû¼"µu¾Ðq ’OͯoéðC%”õ9+=“Ô%é4‰4uü«IzT:1Â;-ÏdC¬Ä­x’‰„mUÇl=J*$¥Ôºê­ì[ë©5¨ÕL­itÚ­e<í ±c¥îŸëÄ÷°èØÆ¢“&¶N[˜‰"®œ¥2¢uŒ€šÔ¶a’†¦i¨Ÿ'³£Ä Úk¬KÓvF9­&ëDýAê‡z©nå)ãZ @Ž@ŸØŸ-lþÄ«ÜÍ~ázV<*žæE73,Lsk:,Œ–Ü‚û!ü¾h¦¢[7O3œ‡£ÎÌáòÜuqíšššEÒÍ‘™ý z8¥ÝuF¹ßÕÓ.Z+|T‚bÀ‚PeÁQ÷ñ¸˜æ˜Ò¢^ÑQÑvüÆ1@ WÓÁ§fð<¢g,$-…‡5ƒË€â¯¢Re-J,åÖJö+¶û„LLŒI–?Û}׎FlÏØW£ðõ1S¯˜²¡ÜRÈð÷"±ë„B¯`iñŸb•u§Ö+›%U’)¯iñ¨® ¤45 @Ô >MYÁ‰PT ®‘ºZIÝ#S¼cªœòÉQÁwE¯Ãìhãd×þpÒ5çÌøpƒÜb¤?  »$½éx3úgÊ’žÃÿË“ ùWs›ÁMÏn_Ì1s½:Âû|c¾›íÏEÕCMwC"F9RÕÕKh@öéé-çg•|•Žç¸¦l.ô+½”ôåíù‡£¯ ÆÃ’›f÷0¸3*3vÇ#•ç_÷gª~Ú—Ksþ§7ªÁÈ÷ç¬/l8üÑ‹',ìÉÊì†(ùÅËœv²4¶â·‡‹GrxÌQξ¼Ÿ‹ã|ãÚÌGǯ9ɹ½ã@Þ(x[eÿs¿œTR0+UªlÎ#8Z¤³F&…-›Ÿ÷iwÓ¬E¯B'èŽ#A¯Lúz a&¨T¾~¡ –$ؤe€ZÓ$îÌœuBþ‘úœZ{Ë tíèÖ“ýs|¡¤\h®'Ñ¿æ »„3þӼ×Îâ&‡ÄúEû¦«ð•Ú»]üÅ|¡Ëõ³}.{Ï0ñVAŽ/O$Iãí¿û lüÅgÃéàÖ¸ŸÒïZݵ/R©šg•ý­ÇѼJÚwq«,/<ý˹¸qiȈ/J½ëo² G܃žvÿ„ÿ†ìOJ@²“fßKÚ“EîÑ34#z´%í6±4í¦'Ž+¹QVAö nXc}bÈáêwéæ2 O_šN¤VÛ4ÔYXo¨´Œª@ÓÄk´ŸŸ½RÓ0HÔš©õtÜ !}4á¤6L,MÖÒ+ Ö¡IÜ4¡$n¦Jê6Äkƶ ¥Y%º†¶„Ü5(šÍg>ó§ö^˜âP‹;Zî²uˆ»¡‚?Ë-ï«òGƒÝ믱ùÝ×GÂòZÿÎ~–ï‡r‹éë3õäH÷–wf•ŸÃg¯‰Ê,MýXÜÿ±úæÈñ##à™ÝÛ2ã²y52…g¸~¸€Î+Ì8Û—fð©ë}aù2‡b:FÉUªœ eKÏBÙ0öž¢ u+±WaEÛ ³ýÇ8TYùÅÅâ?0ôzI°¹ ô³qS© þ‹ÌUÔðyü_zvgy3úæCþ0ö.Ü ëC 4.*õx$À‘¬š üb„g÷‡–ëöþ‡|æ¨8“·M©EYÒ+™J¸ôÓGˆëÚ¦\Zö~ƒ¶±eŠÒ–¦Õ@R¼ÏOÊ"ïÑÙJ‡äyÆ]v ˹$?äÛ¯#q¢^õ³n@þœÞÐøš±‹ý¥Ð”—¿,oН½¼Ú+=¼¦>ú¸üñÔ=qx{7ïÈW‚þxÍ'‡†E$ü(õ¬éP {jA ¾‚/W(Šé]5ÎÍh¨sAÕ ñŒJÁoæÓùãÁhkë8ø§¬ïÜ­E<ß±•¹öKÃñIeê ߺѿy"O޹…\Ü ‹7ƒ»GƒCf,AÞÃû9;uMßbCž Æ ·e¸?5Õ;¶îÖu5·{ôãÁÝoÇ¥9…©Òôk1ÜÅ˯QÍ‹ƒÄýãgÞ&M•¦ÒN‹wXòºÚAÑ„¤K,3à‘°,FÊ¥5Œ:uíÖ Ú ä“Ðö¬A´-7Ì©J«Îĉ2a‚Dj&cA\¿ÔkNÖ“§ÍßêmÚ¹l¶qVvšçÒ«‰µ¾No{ç‹ìâ·¬“šoØ¢“ú¾rZõ#È{\®ÞÀøƒ„ËÉÇïž—tsß¹ê8?âïf—×ÞwE%ïÔúø‚5ù_bwþ—øR]auÙé Û©¦iK X Ò(G-W‰ˆŒH;Ó^Ô8jœAxKp&©kšFIjèDBnèiSºQÌÆ$·'Y4䰪è§4m­kšUh“Ô&ÖTQ7vM«UCSÛS;07ô¥9©e§iœšÎŸ%ÍSJ’ªÃU°Þ(´f’BšTÒ*‘cÒð†¿î„—Ë`׈:;dižþ L¥‹×£<7Ó’q1dJÞ:˜ÞšÚÃ?œ_H§öäÉõ|ÿÀf¥(vv·×e¿ïoÙý# 9âŽZ˜+¿°{²9µ£¶½N?uiø©-¡£ôöóhoш\ù^ä>Ez:…©8uKF¾Ân`6ª¨ùÙ$¯/µ|Æç´{Ô ‘(´,ãž$8$ºS1Êk+Q9ÔœY‡Ýq„Ò”* <·o0ƒúÝב,›Î·Õök{Ýv¦&y„v`K%³9Pªd?2 äJxá*þe§®óz‹krI¼ü÷Ár¾e:À8^͇¥{ûמï )Úùc•èt’’»5´½bXb¹ß§LÚ—ˆÜf^WËigh—º@8”¾X±ÃBUÌåþ½–s»o·ù׿ì0Ùû=”´šrÎfhŠÜï³W'oœÎ0 e‰ÂŠ‘ΩÛEûb¸›5©×»deC_ÇÓ¨l)¨¸;½ÒK;„{7²…™pïzI÷wò…R ~:ÈsÄIÇCi6²â+u{7_ÛÙ ¯ëø ý¯?–ûGya”qRe'gn9˜Jg?`ˆU;jëÃÊ«o¼œ*Ù`+’“õÒð^ÄÀd=­$gžÞC õ§.ý¿+ðÌ>\T]TuÆ5¨µ ~¯2ù"·[ºëŽìBkxFm?M[™ŒõÔM¼¦“Õ‹QÇ­sÓ”F”œ¦A\êÖÕĤ¹AŒi7õzÒÛDöï©„Í·ý¾›‹¡ßëdš¼Ÿò_Y ï5ï»2â’î¸IüïóÚK®Â‘â÷3oÅ×½—ÕüÎ…û;²Ž·#¬ïìvN6t­ŽØnQ+ê¶´T–U°¡ã: ºV35gp¦-HVuLÚv ´šÌFNK5TO…÷RU´Ü3È,†vºŠž¦m¼H-©mF5t2‰Œj(!¬G`lKÇ=jMm%qÓ¬ƒªœõaã |¬£*„M­$ɯÀŽb1f"W‚ÏÁ®šÄ=¬¦Iƒx5rÞàÃD²^Ì’Q°l}ZÛE8]Ú5 ÒÙvÓŠ‹þ§“Ô–ƿեeùšœ'óƒ‡òdcKt¦Nü=!Žð{Ÿõ±³Ž,D]¸1­ è§½ha1•Î䎰n¬ {Øß•Íöõ´ÐÕÊaŸ§“DU–#ã$í€$ÐWtR¡ê´­óyŸšÔ8-*¸†aU—ËT»ÔHmN›ÐC~º·Ô}O ޾V»»QÅ™âœ^ú€miå5⛚R5V»êR&Ä á’ä§è9Gž³7Ú™/Ø, ¿ýïŸ?R}·ùÇ×~œ›”VÉQ5t&"ŽnŠ;ôÇüf7깨‚íÐ)~a·»dd<7Â=Þ–ÜÊ’Re(Da‘AC±¸œKËuíóé“R¹ F£%~8WØN<õxzªzKª|>%gÖSÍuX4!¼&o§™Ó¨cëQøIºÒ#ÈÈ1K‹r ¤ú²kn2«Á‡ŒEYNU(³èû¿¾Íþ¹CL_S~‡^ÁOϤ³®Â ;¿³4*1Þñ·dprgü”%'EzV¬Ÿ3w%j)L¯¡ÕØœžˆªÏP÷Õ? GÓÔmBšÚ6u<±/C[G29šL˜#ëgÛษÌc‰ëÄhV‰1Š4n¾A¤OáûŠ}«˜^Âp“‹kûÆ-ãl þAò¹-Ò›ÌÊ Œ Sdå²3j^Øœÿ¢æÛÞoRÄï)›o$ñ• x~ü¤Ó‹t¦7ˆ†ùwî¢ã¿€ÅÄ;xQü–1Hó-éìnZW„f$ïo½¼æÕ`ÙùVk€3Þkž›Ú ÊoÔ*Ð64s’ JÚêd,¨“xS›ì¯$°ù+jD+ƒˆ~•ç§‘A5P2BBW[)gÕiÃ{šu>=¬@ ­ê“'`ªu¨èŒ]Õµ¦‰!kšöÚ³Ò0¢nøb’?z*ÜoË”VjÏáQÕ iZ6\;u|B.+¯èq~ƒ4c©O>—Ñ Œ$YoÙ6䊗fìL¸˜¾¯} 72¤.¡8°OIE°AŠ4åÀÈ!`p:Ìyå©®êÏ?Eµh×ÍzÙH´>{¸ž‡t¤IV£*F¸L:ÕQÒxiDWÿ"×i ÝtzQ‡3¦`u9ÓãÿÌ£, Ÿ?T=ó—mUÀ Ðôü­›¢¨RWÖÓbŽ$ìêþ¬7zúç#{4RÛOí«ž Z”VEÒƒÀ0eýNg—Íëˆ-Biä]#G*\Õ›M]”ºúœá=ͽ< T9 GC[QHW†ØKK08H˃eÆ›óª33Õÿ×ùÂa¿Ÿ¢×òñ‰;Y°wó²”K¯>QHJµ2DÀínTud¢U‹ì%m¡»½ž?áf±Ëü¾Ü”UQ¶™ˆfeZÎYdBš½A`{é°kE~ÿî8›Þôûý*G›£#ŒÞ´ó?vÓ¹/ÿˆýŸf?œÄÔÇâƒûÓ.¿©Ä´«Œ©tnüs>Æ2—ß ä|PæWú„Ñì`<’gzajÿÀ=a4º{¯7O ðzq—ñ3dîhÖLM ˜bÅòÄ —©žñ•´†¡¾Ü>Õ?k[§Ý$nÕ8Ýë&$ö¼l6ô©OÚÄ6£i@׈ÎÛ°“2²zAÌ|y‘œ¥ýÄg”¤äÞçÞ çý·ðÆËŠËûÔÚ™{Ç%éÆU‹ÞœÛi¼9ÌÛ¦ﱟPWîÒ›Wûç¯:n^m÷}™ ßáÞ¼ø8þ=®|ß+½÷ŸÎlÙÛï†ù½“Öðà’´a¨9…‹ÞàŒÎ •ÅœNÎϳVˆ\ŽIÛ]+*:èñ9&‘„(ˆpd¤±´m©m—˜”FtzWg ªujÓÔnb1 mO•“†–¦kÄžvÛJO¥žu“\´—Äj´š-Ö1+uÝÆÔš:Y4 ÈE\Ê’çZI¬ H08ªhW à'†o”6G•RÜf1O ZÔnhÄ ²Cµ4Œ¤%õ1•‚y€[Åta>ºVúªsÜ¿û%[‹Ñì ÃŒâ«èÕ= pÇ: bFúÅTšô@6Ì­uŽGì¡<ö a*måoØÑ/«¬?œ¥S}»]×LØ¢TgØÒTR×ãÞ’p/JýÞƒò¢éçºìÃÃ~ÝÔš¬Wtæ©Ê4/FÀG£épQ´½wóõÕÉ󔿑Ty.(-s©øÚN }¤ƒ®•‹øbÈÜrñÔ3Yÿ ´t®—ÉOÃ|´ìûF,ªÒ¾*Їaá0ëÝT¿b\Œz}¬Øˆýòº ë¥ÕŨ“S•éÂM9¹vð[Ê÷lYª”Ê ,×Âá”7Åô^°@Ç]Ãÿ}øáƒÒöÁðÇU<ôrnöK{ÌÑØìCY«ç©¥39ùþk¯<.Å{àEŠÊÅ´ßÇ.¢þ!*j^ù®¨H?*‹a?c±Uuw¸;—ïf·®ëý©Ç3äS”®_+|{Íýp\Ú>áö[X¾¹°±myffãä_³­×º2ܘÝž¿6Χz/÷˜¿#JÅÊLáøÏߎåkGpûp8³³õ»ÞÄbåz×g–Å ƒ^**VôôŠ3m‰p ¢•EÚ]Úbbt[œ¶êÄ-³^‡¦^áíÏv“´1µ3;µ7_ü–‰ëúB0Éiî™ØµÔšXÿîûUÆ o‡¿ ú‹®¨l­ÓíÅ»!4ï-¿ß›£ó¼èŠø÷f‚¾¿a§¯?—­%$•¼‡Ë[çÛ»B‡wBjgçdr¾yë`€¸iÚM’†ÁQÃXO­«×‰¨L¶OR'`'Ch»‹Lb«õåjP“z%H…Lt½™À7ï‘8msƒ4í{ÍÔ®A˨³;©ÕOÍÀ­t­‚ÚZ:1wŠ8l‹j=Љ#ižž|É9Ŷf’&¢A{¢ÏpdB%-j-½^AåºÚÂÕåä9TR+º ¤äºZÑTŒÅX %ä‘â†è,„•ë`¹uhço›W7¨u΂à0 ?І˜àE4„òœÒ¾Û˜‡™y¦fØa0´üដ™‘^È츒úZøØéÈ…q+úÅsD+}*©HŠm}RPãy½0ožbFb‚¶òNÜ: çÿ¾3 Ìxh·ÑùÕ¦–e=hé\¤Î!_~é‡þ ]Uëœ DS·Ð3KÂäDwçÒæ7¾¼‹žDy.zC-<+¿ì¬ˆ4iéø>$H‚ÒòG:_”õÞ•*Êça>‡™yÌì!ƒÊ9¸œLÊjñY–}øÏí°OñÃÝÌ;Ñ«ZäxL9ñmRߣZ±.‡»ä#1s bþ•òR`鋈E;œ³ÃM58ð¢oG;%vŠÝíêÓ-ýö΃; ìŸÌÞœznO–¦¯W U!|([7Iü‰.¢*õLOüÃaw3¸ñOr$š§›óQ¹Bè„øß =‚b´øËÒ¨La®TüëjÞUA©#wÙÚ»]á7GãÜï•6·¸&_Ó¿=5xõ§ÒÍÑÆï3?·nÿ1È-Ò›ã|y8óâp¦·|<;Cq‡|xr°ûª8Ó;œ-þ`fgzW ¤¸­Ÿÿ–σûÜW}ÏJ+­ôL»¡šFä†”‰’ºý©©Mʺ#nÒvz¥I†I*§ÄŠ6f’=P“&‘؆^—æ´¿nžö¿ª®“ )  cÒpÒ¶J’†¹TÏjºm\‚VÞF°¯:ÞnþòèæÖ;—­¿WÆÌň‹PÏ÷þºÆûù¸áþ}ú†+Œóš¾nò8Zï9 Þ¾usåÑw _ºÈg&T0Ë%†Ùyšt»¡ko5tì4ld˜d•¤R·àPBSF5S+4-âœö¢Æ™Î¯ø¼·ÑΣ6‰‹zõ(†Žc]DjÕÔZøçQøéÆýªÏAFx³Ž®5'òºÓ±®Ý4Jœ6 5R¼=,=#eÅŽN“‰¿X j²fÀÄÊÓW´Ò25gNOÄRD}#¬xéçÒ¬´àSžU¹æXwžüYšÏûZöaߊÃåϳޱýN)w@0£Ä€ –:ó¾´o8 ;w6 ýš~é¼»ÁþItt¼qt¸\™··néU ‚Ü Õ-¨ÑQW¿B;iîz-šÆ6ðD8FŽ~žŽw#¿Å+GXÐe¿:a}9ƒRéeˆÓ¯ríÊéŠ'—Ÿ>O¥3%,>*UlˆÍ¡Ö4Y#J¤`]@ /õfO{GþÒº­å_lQÌMÿža5³Îëkz=ˆTݬïqƒb.ò›Æaª2êéFCgXË~.óŽýyžÝþšºF”´sZµLØ åÕuñ6w ¶RHƒvê 9ˆÚ2¢bí}rO% 즥‚ß}ñpzg9¿}LZ”,µü›»ÕÙ¥SŽüKüÍêfóÅ̃,p?›"GÈaº·W,žíȹ­ÂÔ•?) ܃E[]S|ÂúË—5c+ IDAT´?S~úÈÊ’:Ý4¯ëÊè…º]…[ô(±,·Cù×Õ[…-¸Šé™!ÇŸ7¯Få•ÂÌôÑÝb.§wì´ÜÌ §§¼ûöé¾å0/M3Ø^þç+\/Ë›iBoÕøUºu(¶>æÕ“ùãÅÂ\0í^ßž;×v'S_Ý ~7ç‹~ÙåÊú¸—e+U{Ø)W48m× g|ù5¬‘“R6€õš¶b´+Ô*´:nhÕ;ìkè 2ÑFÇuiæt}‘Ùi!na+çLš4íÊļÏ£k+WgZÃUoçâ¸ä]UVü½m¾ãáÁ=Ó{kwã*ý\1×Òß3(\¥Ã¸(v{÷~.fY¿+Îø~}Cò.«õ Úåñêh3ïŽ0Iýªùàï'ÐHóÖc½½]4 äÔµ‘óÅFýòJg’ŒÚ0çë£DËÔµ:ÛVÕ04=øB )°°~G×ëÓd1“ Ä2Ú¦-Q˜ÀSkêDË~yïSm›Êb’²Yªëlr3R·´Äº¶ÊzcÂÍ’ºV°ÞÔëõ3ßÙ3:¶mhÆ¢“ “þ ´›:‘´ëš†ž¬×j_XVž¶ÐvÕ>rj]¤áŠò„Skàë8“É(sZ-â…É?Át64ìê Uºe>¶¶HÕ0äå››¡c`)O-?˜¡8g;ŠÄ/¢|”î~Í·'ˆcF[zwÛp­˜;7~e¡pîDöEê¥^jMèfDMó˜·sè1øËb…ÿ0¬NÏ=ð¾$Øðû…p*Ö5ô°§mÍU½"u톎[æ3‡—Xg61¶¥©V°Âô¼Þ ør•Míkÿ÷Z ¼4iæŒ]WÁô™ ¼ Ôð®v7 ¡ oš…{º$²W.åO¸€þ‰^z>©è»=Ú=òåŠ AªÒâr^B”­Ü1Ãq¸õ’^ DñŒ¼GmÅÔœ _Ð?wPg³gç& ð n™…Ynl(ÃêDÅñð¯ìØ„Xwlz.sؽуl1˜yê§ùÝ'åü–¾­Ò2ê“¿K×?±rgSuÃNßXGܰ²™:„¢/÷¦dýù93ñ´˜ ´¶>© Q,O!åÚDöÜ$n21úNÐBDE_íNêÉE÷ ²2}î¿}Éñ³a..'.÷ãú´=?o.ȶ.VäÚ;DÒø}3Ê;œÓàÒÖw!HÉwâZï7IãÕé[ºŠ¿HßçæùŠÙ8óoè·@¤+ˆ´«‰º P¿tNÖ.,Öã ܧ¸Aܺø²ÍÄÞ¤}ï:{#ÏÃ44ø¾yQ­“Ÿ7ˆa¥ž…]T™•_Òv¦äÓ•nT톹7+ö¨u©Õ èŽ`½bbTHæ»i§¨*U8пh0É¢š42“@7Û44Y™<‡¦‰›Ø™dåL/Ú‰§Ü¤v“¸‰òÊ$ŽZ#¢Iµ–±MÚM F cKÄkªC´D~-ª5–ãÖÖ2-¶K­ÇÊ×éÇl ÕŒš±³SúÕ]Õ÷[Œ6Øóॕ¨“Ò†ßÉnͨ'eÌ1ÚC>³ƒ²q¿\½4ð†û‡ƒçù²Ëí¯²»ž!i ƒ"œé ªuÂu=¾ÏG0Î;ŽtL5Ü~©ó€JSäìσ^ž‰U¥Öh S’Zy2ø¼BØBAÛ¥JšZ“ý´b$JAÜÐU¨µRzÄ^×$ª;ÉÓU}I M ƒ%¡— sÌâ<{Ó’ üáíôoïWÿãUè'C=2ÕPmG BÕ™î=lC³Ê0°®hÈ£anJåçÔ­¾ŸJîg½ŠE*_1ÿ¥µ”øÈÚ²‘ˆ”f–U÷Žî˜³,ØÙÿÍÎŽÂ…ãÒîŸÃl™ÿqC‰”J2zÐÕÃjpCsÓÈâgã½dô­ûÛ ‹ÿøC)ï„v÷ZP˜-ËíP”Ëñ™žËÝ‹F=¿;òä¡Ù³~×NçvÿOvw·©­|&( Gß ®óòÑae÷x“ܵ½Ÿù㾚¡ø'9{;„Ííaot@0Ø~Lß;.n>óÁt!ÌçîÞ™ýh–ÒÑŒµ=ú»ã?È×ÇùÛSǃàU±À††Þm¸,ݸËô¥A„+9m™ÇòñífêWñCM©¦†È‰lI(H7`MûVTÆdŽyz0LÒy™„»µÞ´›É$#¡qš iÜ$iF¶Ð§õg½I­y*:‹›úb‡za=A˜O‰@ƒäbÒsÓÅ v^‘šgæ¡ÍÓèˆSFSS_QôO«¢y;·ø<˜èbá­_eˆôVm}—ÕÒÅ…v|¹–¾+ôoÒ7¼k‘ý.¯ö}Z„K±¥zò­\á@ûöiÔû®À¤1yÛô¥såœÈܸÂ჋¤±ó›Y#9gþLÖÑ“þ½¢i ’ž­JÕÐEÙ"ÕœÏ{iBtºFžÜ@ƒ£Z ‰œl•°I ù\˜vO—+f³§ß°¤eŠ‹&ñtHc¢äÔŽ Y#^MY‹’ ¬4ÊiÑ ;}Œ†¦N„5Q cÛĹN¨¥¬GÊ¥¢e‹,u Ro~‚ÚEÞ óu­Hèò¨b:«¡j-Ë¿Þȧ|é$L¥Ážu„ÂeÁPŽ<0^Ó‡ËcÌä_ƒ ù0ËŽ4ÿ°¡î-—é-¢ß{¼Àz |O*ñe\WG¶èâ?¥8¢0ÐÓ{]nI¶®”R ¼ÖðÞëz¸FîA {ÆK-eºå¬G#Œð:«·Íz®Y5Y‹§Ïè%f½¥½ÃÊTÕ#À¶ »ÆWtÙÓ'.ò‹ÔЦ=Teì|Èþµêü­âç 7(öÿüUß.ÛçT?5§Ã(‚ÙÇîè¡}AµgÜ=l_#MMn:=–îqc  sãJJ"áR;ÊÕ&¶Š*ö,‹ô…^ôfÿ¶ú{øÃ%^õONÊÁÜæ`TuGPù¾•7ñcÕqTE¢¾ƒE¸a~:ÃñÕ‡¯:<Þþöš+ˆ¹kÞÈéBgj†¢«î,±z›{ÚeCAÿtÄnŸMgâIS+R[±Ÿn‰ÅÜœšÞ?åÓC¦¤;q¥cÑé>¾s{a÷èõ_ ö<¯å˜ÜïÀ‚8v©[âö¡`á.ý­éÁr^2~^¹¼\õAdîægÜî-X¡æfŠk}þÅ<^hÛ3±äÑ'¸ÑÏl"ÉÊP€žŽëüz !ÛÛÿåm È…Ë&\5d}§Zä}l¥«—BõSßÖä|dkÒž¨oÜ™{s#^\~ÔMùÔvFš©öø¼¢ñ´T°ÒƒŠI¤æñ=’¾QRã u=ù„µ[g5wzV%M&F'u£8ý1Öh÷N×b´ÒØÙ‰¢r¢[›8ËN®ÓÒR·4‰+ºíA¦¬1¾-° ‘zaè)Y‰rÉÊÊF»éå½(€7€/#Ú{c—ÔÑ`ÏxÂr!J(°0RGÎ2£@p°ÜQ.PÀŒzjˆÍ è•€Ämà|^FÒ!î1=Lç…ÅëΡDy`Ô Áö3[¼§ú7YTêm dVrz¸hò<Ä/Î¥¦Î eJRÏ:³çè4´‚Zˬ×õJ3¥aA¯¯‘õ ‚êaİÞ$膖kFô´k˜¬EèôJ…¤dÔŠª<ŒYÓþW©üX[BœÌ48tn÷ÿD)ÍúÑ’ ÿñÆ}™Ù¢=¾@µSѵ,†ˆ,€Ü|P-î¹ÍgÄ÷Ä#²ÎpI¹–ô3¹žñ‹Xˆn—SÛþ¿5?(Vç÷;¿—†d0T!#\Á‹|UF˜SAns”—V,ðѱZø¸2ÊŸþñ°* ŽòÒÞò—_§ñ'6yÉÒ #5‚_Ñ—[fèÃŽÈ>+i?g:#XÑaÓøE-œ¹]Ñ?\xœŸˆ!¾x\<¹;d/?9*9×—E9¾)¦srëÅÓÅ;UvÿýQ€Àg¿Éß}œ¹“°˜C\.£»~c*vïÀîÃ!©C–‹Ž!³·?.¿8”Öþ¦˜ÝrÔÕH3taG.+ñw±nºŽwŠE[ËU»‰ç&[Ô±ã×ò+L»lÚáî…¡W"ª­œRõ’‰]BZ¦]×§Íbó”ÌÚnR«¨d5âWð&néd²Ðn¼íÒ–\SOôÑöBã˜\J(˜ÈåÌ)âôNyK;ög)á…öåx†ï`1ý[tÁ§i:W^öžÒw¯ÂÏDZ業ïÙ(L ›ÉÚ÷Ⱦ‹vÜñG8¹jzºÒWäân'¹¸cy+U¼n`†CìÞdÖ0ÔIFµ©2#74lþL©Ár µîI$åEc½Y H¯q¨{)}ó™DäiÍiÖN9×b"²¯ƒ<ƒ2'UnòbÓ¸IèÛ ¶hh¢êQ{Q³¨ãÖ’2í:qS+ ¥cu£C©Û`ÖYñÌÆ7²/oPóB½0øj¹uJ&ó`8• œa~ƒ=Ǧ‹¨”—YÕ¬w nù3"‘p,:Ì+l!¨ÎÓÿ˜ f7ŠL9+ïëy"ùU¬Òg¹äôò®¾í3é 7Ë¦ÐÆCŸ1 ëØ–Ywø¦¡ÑÒmÈ&ä÷Uj 3y¼Ù„ÍÝ"÷ú)M]Eû‰0µ¯E®%Q_‰f=å¦í¾pxûÏ\|õ%ƒÁK#@~aC—î˜{Ç3áx–'s„–Ö(ÚLjéX…ëú£´8yØXúí~VìëM[1a%¦ô)9‰4²U+æÛÃê¿N»ÁÝ¥Gá윔…px…§/² 6Ë­,˜Þ>ýœÌYÀJ¯åŒêçü±ÿô‡jö 3µã¦–ÿ0ÚPÛÞUJ2;…óöÆHü׳YÒ‘…žQÿ1SÕp¤ªÉ°ÜMåco¶\w”Šs·g)~trýîxf^JÉÝâÑN¯ûu–¿xJÿð²Øû«è7ߨAoyº·j‡ õ †N©G£ÿpo(NòoJ„õÇ{ ¶ùÓàííƒcš†|_…ø¶‘èwBPÓìHæG]Ë‹­·‘:ÌRd{#HºÝ/ ¯)¤ÙzêtUÇé€m7ͶÔ`q! ŸRx¸Î/s£èßòPëíÌ,]E1B#K»<ØJÒ,•î;yÒ,[Z²…Èaë÷ÞØ¤·÷y3 p04ÉÀØ\Ylj 6·©£˜‘4 c‰« ø8ºo™ÑhVmH¼@@úÑÑøhÿж…Ó¢ÒÿéÉúî“xöƒ¯jϯå¼eîµ¢—»gÿn5º9wçÞCª™®@„¦p†Ò“@"p]"I:¥™ÇÞ•ÔÎÔ’¿0¯wqÓô8+¹´0õWZL´™@Ú©£í¨¶4Ò04*/ÇdŽoè݌٦¦£«NHå-â¥g‘Ç ©£å¼ï ClÆ-ŒØ[=|Ob 딚®‹; ²«wž5f>ÇO•Ø´Ý®‰.ÊÆkù¾=ÓÎáþÇîG4˜1’\Œntʪ£»“øñ¾˜¬û:’½t¦:ÿX'ßV7UfÇ!¸ùú£o@š ]î^f±Ÿn«ÎY+«ÈÍvÅtñæß~zñ,÷~<‡³4ö!â92Àú8½N éûrüw¾ÝŠ˜ëö·T›Š¹µœ îD§¢³  > twïà¢ö” å±—•ljõÔ?vévÎ洞rWÊp’™³¼éFE͹ ¾»çÇ’»O$2••Ûcw~×ÛöÇÛœ¦Í}5y¶Í‘½5ß,0 “fû-ÇÁÐŒ@e¦š 5ÔR°©ÓE ZÚ…š¶ûZèæ¯¾"ýTÓ3)Ø!,Ò-ŠÁrŸµ^Ú+§GèTBm* P8ƒ+UŠdL5ÚBe{Ó«Ê ³Ñp9½ê¥]4ÔVè­*ÔsWúO¡&bØÆv´_5£)sUžÍûk²ô˜¯Q­r㡈>‰ƒãñC"»~ö‘¿Ñ¾0ÿÝEûqZcmSwœÁ±}Ùår¯dF ¸îÐ ¤½ü }M0ûØü¯ç8- Wôå¼nót¦º_ÚŒ¶˜³ÎD58:Á’ãÀÖ±5dchú_îSÈrÍ•ö³¸`ÿô—™mipø\“ëQFºÌu‘ô¶ƒ†N5)±}—í°iê)Óoœ«iO´ñé¡Þm,”í4í+X¯[ͼ¹ª¢ 7ý<ž>®jlô%sœê ¡QôÛ×Ð*‹ïT”m`š¶ñÑÖ߯˜ÏØá gNÅÍ"š:œü0}zñ7,ªµsîûWñ³¦Rµf7°&wnÏáBÙ\éæ?Tª½3—šmë„þl7–‚`ÂcWò,ö—  ![•W8ËÏxýæÏxzæQ ætªn€Ä²fOËñË7öy+:xþÑØÃ‚ËÏ_íâââIxý´.“o5¬·ÓœâKÃS1ö÷u‚gf·K[jBÝ—æ—Ü‘¡ð‚ê)¿X‘¢òŸs#’t´iµv‘lÙTv{Ë8º y‡ÃzôÀ}DÎeÞ=XçǤfÙQÂg~¼RüˆÙâç)ýa¼×pÔãðÇz`R·§'!̶¾x¤qŽ?N¬zÿµÐKßÓC ¨¥¡EYä6 Áký‹ÊÞJíÒÙBW35A¨g‚c3{`øJ¨·kºZÔ0Öé(Ø‚ƒŒ%ÖºtOûÃiN_êñ5"™@F1„Á>õbk©CQZ+°™Yû;¦±5ª§(&’¦hsc®p±F^A,ÔÓ–>ÔÝÎÎteSØçD¡µÓ9Ãî¿®G3ãkͧ§„}Hø-ý™Ù}ÁlE-^XPÜgþ¹u?(ˆ»-³ºÐoZ%‹øõ…òÌ+륒9æÂ'êåÃxºI’³ Uf¢¥¢g`ü–¶›¤#FÈˤ¥ïÈuÔ´L¶X¾ERãî¨ì¦ÈÍÆR(ëöÈ‹#ŒÍ5!jÓXH‡º˜:¨Ýaa¼Côд‘˜óÈ·½\‰›‡ø€ë«åÚ™ø¿¿.ÛØÙí0û}±QRÚæœ¦2>PˆØ]D>¹#ÜøzMšÝo5˜µPÏkÆ}füBÓ*¯?§ü·6÷fÐÑÙ þÌ ùø”Ï…ky_[!uGZkóSÓ ìi”ëËæ‡›¾1 lQå*Õ€ºŸ0;³Î£2pbú!ƒ 8í^Ÿ²^¬uÎÌ©nž¿b\\»úb>yÕ\_ßù©œ«> xqú³ÙË—âÍÔÿúoï%}"DåF*>¨.ŽDmê㜨“~@ºù1Tý‰äާôÇþ—¿+‘K¼=ȃéO´rzŸKíÁg³%æm´õaÒÔÈ¢,j«¤NÜ>~•£BŽÛ×O N§=S¨éwu{næ\m¤Ô·B¾öåncU ¥cL™ ¾&ÞÝDí¹˜%Ú‘.Sá6uš3ê‘$#Ò‰)Щ¤p¨Œe‚PJY§”ôì¶Ó^;Ñ,åÓÒ b»´G¼FšÈi„ Ð!å3iÿ·ÿp>úþMÕ]ÑógwšÅX¶¨¥:¯Äôùº˜Rõè»Ò$¾¯…9½àtWŸzfꧪÂönº3ƒäzåB9eÛϵ»ofè à D·™f$¹æ:ÛS†FW¾T.PIÖ_ô%0D` ’¬ÿ5;UßéFšÀi—±d¤Ø¬TÃ8ÁŒÚ‰—vïGžƒD9l†ÊIB€íº ˆ]h’Hýòê×⵫ê+Êb?{ªž‰øÒ‚º¿s-¬y. ¾‘ú†LuçÞ¬Ü}õ»Ï­îq~ÂøM¢<¶½ÆôwôÚkÏ/~~é‰y‚vé<1gç<“J¬öO›Vs¯^À\ ‡ü¾ƒ.÷VˆÕ‹&bYÙ‰ì(8¿­šUüCdG¹©èJ?ÿX´_МÇ7gäi{óõÊŽ{áý¬S'màèJ5Å^XíŸ~9>Õéûëâî»ãË»œåó:æS¦uie¬0v¢SL‘±$Î14HMbz¦ó±’»ÌCûÜõé°;»IPB¬œ »‘»¿¾qÝŒæ¡YÜa6öu$eÕ€h†HÌ0©¤ØPinG2êvƒÖ%yú”ø¦š¨I•„„î_¥Û¹3}ÒnÎìV•Nër$ãÄ%¡ÕˆLo Ii,B IDATÇh°ÌñÕ#Hä’`¢Õ^ˆôìœæªÈâô(©ý8o~´§žÓÉIܪê öGæíùíÛ ×ÉIu¯8¶bJ?Pdž{¨{òÇxÖýÔå)(ùatòYÞÄÞ¹¸·‘§ïY“ïÈЊ‹ã:uÌ[&R~ÌÒã(î”f‡¯_˜åÄö!=äÁ2J: É(4éБlšb`ißG-ÒoU?ÔÍÜÌ&ú–4m°==MQ›]'T€t%£°ÛÄ»›,åÅÐ0Ôäz‰°¥›:R`’¶P ©SÉÈ‘f†‘!Ô V¸hØp&™@hú”éÀN+ 2¶! ušy­$L4ïõ'Í•ø¥W·[ú帨¾xAóíÍΊö.ê^Œ‚gñ”J^,‘ð€Æ!š¸™š»~ÁÊŒçUY_P@Ú@— Œðºù–—-³òƶÏð¢U‚’”ÍÐt»8ÊÝq[zf{F% ÚøÚ¤"ª…™b˜ ¨ÐUwÝa¶Ýzäô8Ü-²rc§Kò‰M–Fë¹ITP§è(g#Œ+­$Êé†lc¾ÞÄ÷ìøº^ÿò®]Ô¶û0~ƺ÷J¬Øõ÷ÂþwÞPŠÏÖ_J-{¼ÜÔ76Jç¸÷%¾Ëý§æ±ýü5ȧÞÉJJ„ƒ9D ÝÏ­œµX±6QÓÕGw¯¨†×ÌÏ÷‘J¼‘‹ï^Ïݽú\_Ì”hË¢~a]<6‚ËO]´R]ž›Î•xúDÞêÿìr§Íåf5 V”¼ªX¹*ä+Ïi8M§cƒW㟜¿Ã —AÊÏOcq}VÕ‹ÓöOϨ3Ýüø£(xÕvÏã… >2§»æõU1—åô[ó3aÕª±‰V”E¨U޶ KÚÄ•Ä;øÞN»âTÜù•›‘,×Ö„Ó~Vq}ç뙦!¨éÌšN‡^4]<Ø!‰¤A§Î¨MM­UnGR#«/Ÿ¦9söÔ;\@+µqÏ˵Ç[|îïjê’0F˜Sôâ‘׉ÔÕ£±ŠÉÒfϦl//ÁæD BŠá„ˆÕÖ[©l!ö-æðîÅæ{4V½—7—¿ë T–I?ÎÂxßå×ìüD '9ëíKáÔ±:™r’‹êà‹xþ‡äÉû‰u‡Cߊüðøà)¥Ù{Jö1‚Ô[(æhØé "êÃñÜęî3äéGÄØ™Þ÷L×£üxé?Ò„ÞqÜMû­IÑý»%9`ÔfœJÆ™QŽÄ3{Ï£r]l²Û[®ƒŒïQ„vìËÀizŒ|ÔªKÕÞéo õ™¬D£°·r-Á{³–›®L·ÀQ8³´Wнã€Á¶‡Ô•8dfȵMt±™¡gt±IêujB¨õ-C­„‘R[g&Fy3Ú2PZgÒ쀇ëæR›Æ3g½ûé„åîCšh}úƒoÎÝ ŸGíG¶sÙ¨+ ØðÈOõ³Îç¦Ê]cu5ö÷ìU¼b^2ÃKªÏà;ý¯§ôü•zíãY/v2Fèé—º+läUu ÑDÒÐ6í™!·=“ú;v Ét‘é[¹±#ú¢Lç¾gÈ ^÷ÂüõV• q$5JêQNäí}èFÉ=W2ä%Ä62v;åLGe’(¦lt©%H½[Ó8ãtvuÿÜrˆƒEyÉSO˜}E=ŒÙÔäÚÍ˰­Ý}œ3´-çtó±¹2ºr†J=¨ÕËiô‹Öüš¼öê/Úó ´Tüj‡77O?ǯÐâq¹/IyEr~<—Hú³™pD¼/?¶½¼¼ÆŠùYë¿áÝïínkñýÕï|ó}Üœ¶ÍÃXôÆîÅzsÖž=Õœ=Õ™=Ž^£~z,¹ÌŸ…—.íœYåêÇî»DÏÄOýG«oÿi—ùzÛÑ~|ãÔŠzý€ Ÿ!©Qò¥¾2Ý,Ž‚åþ“t“t¦·½‰0 º…†Š†Swc÷]yÙdzN<˹ü¹q.·‚Ù#ê¨-˜^õçDmyIýeØÿ3j—S LA™H#5šéožøWß¿ñ­Ê•ÎîvˆzØû’ ì·iÒ^¼-w¬× #‡…m±£¼±C­ ÊAê"Ô£ÐDKŽxnMŠ0Éæ>7}ù÷A'Ø3Ÿ(Óì-ÐÛ cŠeÿد¤‡Ž‰okÈá™ã°Å\qòµï?:ï‡fš#u93ÕÌîj‹w؇.õýìs2héÖ78*ÉÎ3BÍÓòwÛÎq=Zqdfч}/Š÷f‹÷ñvßž}SöÿNNâGÔ« ßË`8LGK÷;ðèÇfûï[¿%¨Êb ¡S´€ÑüžÎ@€ÊI’̤#-V¨ÈÅcGG ÚëôbæëŒô¨ƒ"(E­G½rì”zú)÷B[`T¦—à•Q•c3ln6 ñÆ#YÞÊõ“é×úLɽ…iºIá5j g¬WãI™¢­W#´Eãu%ãHR8#:¨-üÖÎ÷Sýò|4pµœvã¨fv-äJ¼2ׂ<ÕµûšîE:Þ"9ݵŒºÁêGýS/L·=ðÆ7Ç#"çP %?3öª|ý×ߦª‘9x]‰6×GßjV4˜ŽgìJ' Æ*7“ælK&Œë˜ ~ Iô¤ÒØÍ%9ͤ™Ù–XGBé¾C8Ò¡&[:®[BؤÈwúÓxTk1±£m úö ;Ðó k×ËNØŠgá©~¥ÇßÄÌ«ãŸO°f&tø¼TRXy~çÚõnÿtWuáê3ý,R~[{võ†Œù4n ß>usåwß<ò³Ÿ6bñzþÂÃ;Zt_µ=ý þÞá‚_©[o9î\ñb¾Þ¹ïξˆÎ_ V/îž}Ó¯[ÿùÍjüèMäWy-(;•æZÙqÑîySÿKôòÅUuþÊk¼|ÃëWª~óèüÓÓ_INEóÝ«ûó<ÿ¾3}uóñáñ˜¹ÔSîñÔº€ïâQ·ÌÔ[†Æ$‚"Ô£¡)6wQ%ÔmQúNÉLÿÓBš.ßK*LšG3ýoøNo|êç‘ ßØç–ö¹ùäGQã~ñ‹¿œ‰e§.†ô±#i¶‰<oÒsâÙŇÍš3óÁêüSY I·ûHêÄi&°ðýžA‰•_g qƆl,£±jì&¹I·4èe„ç­œb?@¾@‘/×÷*R‘ƒ³oùñûñYjIyÊM:ÐÈ=Š g{¿æ¼›W¶_ö+dš¿CQÝ´é¼-hoc«—×é»V§Ç°ó“E ÅÛÊ® =o—%úÆz8Íÿ(î 3ò“eËwÇæ'7€Ã ¶8nÄ}T ðÎjh-0¥!¬‹£ÊÆt_F7zG ˆ91yuO"Ÿ°dØ<îµò¦Øb#46× fIŽÞXþ1„\3¡-Jác$PÎÁÜxghp v^2ár;æ3#$êÓØwH¿D¸Š¼`šÐE]vZÔijçÆ9uõYàÍü ¢øY0¦%Þ4³1ãÝʵ½f!ܧŒ®X¾böPÊv¹û9§O­7Oð/£gOnð\dìÅk Žé¾·óÆGÍZOz>Ú,^¶o^½ /] ×þü*öúÒwá'•?ÍÏk˜+á·ñ.íÜ1çé*|W®wEÜF®¢ŽG›Ú×l"R•"n$n&n±#¾ôw1Ûýê>Î+k;F±^9n{ë*êï`eíÔ+÷ô¢Xü/ò*“—^uØOw"G#”hGAPuGÒvû¿|uzœ ÿ´ñÉ›Æ åº *D‡½Šì§¶íte¥®¤ºCT¨Óš¢c¬@}jöt ›Œ$…/ÉM!]dLšÅK“>2Ò¼LrÈʃTœô­ N'C’œ4Ô )d°…ËØ x8ì §öM“–Vž£}+§“ŽŸzÓ£zÞô½Ä!süè|¢ˆaO]q<èì¯'9TlGÇFâ¤Éãÿ',:?Jø°ðqa÷q­ùÁ=ß'þ~/Rÿž…ÕòÉ#¨öóc÷ŽK HF¦ÊI÷½YT†8:Íal¦£ÜxHöÏ&„Ð)ûsÛžjÚ‹ÁXÔÚª=»ÐZ;þ»Šn”L}!b:¥šÛdòVè· äK–ŽAêb°ç –qê[˜t¢G’dÀ(7,3±0܃^ÙBy“ (¶tì“õ´G‘F:r¦B«.á´¬»ñµ™y)÷ˆär¼]•Ь¬à^yù<·ˆZt.~Ëy½nsú/ªæ5§Ÿê—O -5kÙài_üܯp¯b^î4¬˜K¿R5ö²ä¡ÒÀÞžh—í!‡Û!Ô¦“é/†ŒH,DÎxI2ÐÅþWHåX‰‚ÄíÁƒJ’3ò:qûàž$°±4>q™QCä2R»FíA”èŒk°ô•w–Xq‡Oû°Zój.`²~/cmÄl²ã{ëK×124ºsi.´øÉŸEWÕÏ•lq¡e_?Ô¯îÌOûSÎ3“1íòªâ¹dÕñøY(ùϨÒ5"î®7Yé·„õD|%ܼÓ³]çׂx·]®ÍåL´¯2ÔiƒF·)§}º‚ù]Û|g¸ük^†zÚ*åB¸s\{]©ËýŬ}æÒ¥àüËæÉóW/ç‹kÏþdzz—׈šJx´HJ9´N"'jqÝîÞW*´6PQcéh?5לú¾gåD?+×ÚÝZGÒT’hUù…À# J¼Ê CAí¶%û¸1RKaƪM8S®cÿ\EóÎÕŸ}õùÊ‹ò멌业}¦‚…p ƒÎ˜çX³žz<¥oeûF{VϨ++5ΨëJÂ…®x9^oùZTÖëtPnçq…I¡èiå€2ÄKo%+M:ÐÛP夙)Ð{˜íd@±Eê÷–ÀÅþQýÀª§Ø'ö¼ëb”¿µìæPVØ[RN!—,Ç·gßô˜ùÒìÛé· ÷q|øGºe|¬þ:tmÇû?ᙑ›‰¥'Åé‡o9ÚÐàä1%9¤à(þ`—:2ˆ™w†6`/X<ß;,=S—$è\ƒÞ†RZÌÆí!# B3„¬L2æl “ŒÑÐdIM:³¬j`&­hLwíx÷ýý·¦z¸n…’T#a×¼QÄ¢©‘lÃ6:P¦‹aHáÀ‘ I Ý$M41 ’È>áÌr¹”ÀZNZcÑ£-­jCÛ÷{l7;j¨ûñN#Œ¸Ï=‹™9SëæIÜ»loW¥ìÄøY,ü¥Ñ¡½b"LçŒi½ŽvÏ©Éju†õSìÚËW;³óZbƒ jÜŒ¯ž ¬ûÁ,ÓâWúqR}O¿/%0ÆØ¡‰r½ µ 2¾ÀŒœ‘˜ÄåÌ†Ô Ô(߆&\Ò|f DËMÑ&ÉÀŒB¬4…4 ŒÏa”£È [Ç-45©T½-PCÜrÚÖàÛVÆJÄMû§£§ØÆSã=T^ιÌ2{@“S5Ú{ðÏé§ü£ëð+Ä}ë|üì¡Z\)7ÕãGbZdz9)/OéH±zVðLÈÀ¿öf2íÞº«ÄßTMÏ0ï×Äzðwq3¯æ».À[(o frìýü{pžÝÚZO«ú<ìË'êügÑY/וý3?Q‹ß‰‡ÌÏÿ¤óâ ÿül¾`ü›ïvÙµ|샀ACè yìeŸ¶º÷Wv:Ó*‹¯™tƒZmL‚g ,Õ‚™G…fÃ)… ¾‹¥»,›ªj‚µ¯l÷º]\‘|*+IÔÓVŒÅr [ë¨AÌ”»Ju>ú—xâþ÷S»/ÏÀùîg¢‘mÕÿTu¢­|÷â9ýÓWU»s)ú9½5ª=½wþª:ë‰Ô8“fŠ™mÏãóù¹§ëUêv ®¤Q=¶¥fbp$ÎŽrF`%ºÈÙ–ifF¨eбÎ9ýM ±Ü-ëe$ðð{à˜08’¢SäoCq´1U/ÞîÞÓ}õ·Œ$ß+8K£޶„ôƒÕ¬86O6ÿ`Zó Þà‡¯-Í͇KéÑT×ʼnFù1ÙAöîÆæˆ”ãð ï@*r|t:03ÉŽ ócÞM'¼Ô·DãüÑ;ú‘lÿüžQí¯ St1 rª^Þoï_m¶LŠˆ2S¸ïøBjï¨jýE¨ÓŠRH­€:¾µ‚è0íjØ©jF¡Ùvl„%y¹C†ØÛ„êÔíM¯Ûò²ÀŒ pfcH*(ÜØfi%P™¹ »=¸nR›$°=¦ã×íç±=£¼ª®›µA‡»9Åý b×Ú‰„×âñË&|L딪ZzÖRþ‡õþkѽÈãyùÅéÙŒ*èìUû#{cGoü+K÷íFÉo—åø«8pñ5Æî[·=Ñ :]I¼ä—’ñ-DC½îö((e[P"s]HZÏa‚ÜX¹·¢µ›f™-pöˆªšB¶!‘jÛÍQ²ôHwFìªêÈnÞA’NËî@{l’Øic,0P¤Yû%ÝÏXÃü 3ër:‰\¢“Ý]'ñ9ÁyfßÅs§ÛÐ¸¾.^†üf~G[áθoÚkr…¯¯so¤qQåb1°³÷ÐD£ÆÁ;Ts'ÜÌM„hhcA¬¦O¿_—Âq¡w3¸æ‘}ó:à —çôeÔ|]ñ{ó mûÝ£WöÁŸ.Æ®Š|¨Ý¦ÆÑ0+JŸ¨ŽdœÜܘÃJFÜ(ù9’ÛŽš±ôã‰ê bÖ°ž_^mBÆ®}ÎÕöîJŸy4c8§AÛ¤¨ -„!xlå¬z¾|sóÿ¨nö?âì¯wæÏ§+‘_Lí…³s~þÑ5~êÙlüäWò÷/^ÎM7ù’gž7W/'Ó;…CIÈ­õð1óB~bdϧRŒdÅ–L4Žhÿ—+ ‘Gå ’b`‹\'y\ Kj[ ÒL.‡zO“[äàHò=cͽR›ëÃçÎå‘qOˆ’eïêsÓ܇飱9Eþî)=É©8É3ctBõ×'“ƒòÛ¢Yµ>Î)-Þ4ü‡<ºÄðr$c'×3ׇ×Gïæ?,¦;<%æ8ëõýÆ„fߍyDÏ3±E¦&AÛ¤Ї[˯TN")Ü~8Ð#p[‡–ÆËDÒL ¨rD°!Ùž˜ †Ü·ËhWl屑›Q¨ÏÈ®k¦àH23ÊRW¢ŒÀûX:n…fäa ÙBn2EÉVlk¢°¬|¬Di}¬@HSMX õAÉ$õ«ˆïÌi©Ÿ­šöC5«­ÿLu¿³«ŸDü‰ÿ'/¯½¹ùì,JV¶ôG•í'v6ãj¤åOéN5³3Uð?hæÊ·ãä>ËÔß0Äo·¤@äÚf¥"¶ùNš­C£ZäeÆcP›ÆnÁRí!5¶sãÑBâ’PµU`ÑJ’ ö¼O–XŸâkè;ÑÒ“¥+ B©ÀÚd£“¤ŽÛáÎ-Ö Ìš¿F#ËÛŠ ò€[w’¤ÍöÔH§×iaêû)›[²ån׌rD¦ùÊø™’5câHÒ‘LWï^[ìžxð†Ÿ.ôìb¹xÉ|7!Wî"•‚{Râ›Èu*;‹”—‚{t#æ>hìØ³ÖUÓ©µ’í¤ ¤¢¡©-¡–€7‹.3ækbuzñò_¶Ä›Å ÷rqþÔœªþ~zU”kØy ЈZVÖ)jKÏ®UM<•´’t]¹ëb`M˜Y½d¾™êºVÜ•-Ú‹Ù¬Û Ú»Mu#À372òÎÛÚ‚êßÚ0£\#M2€¯Ôíû4=ü$–Ÿ–â\ÌkÓAý¤éþ³šÏŸµo=ä—¹k]è´^ÏÏy÷Ø1òÚO݋߈ïÖ+±CàIⵯÌlE÷.P7¥xbïÍuêvpëÛ²¬±ÂÀì÷\‚²’1Ž´gHÄ#HrCí ÕÒLi¹Ø[}ŠUÈØÛJe{¦ýÅ€#Gû-Ø\î…ŽX\¤ÙCÖCC¦Ù—µþ¿ŠØ#ÛªÏꋪÁþãyÑïa ~ˆE{ØN5;ê‚wÈ 59‰ uR›ÑK Á{¥‡Ãéá £ãÍùè[`sFù ë€^–¢ Ö‹‰­†$¹.røvÏd|ˆ5Âô—ß Ñ2n t2`œ›h‹Q¨-lä¡xÇ(1Ef¶½cÖo¢¼I)Õ•dcH!u² ÎÈžîÎM"Ë¥dÆJ60ªc+bé¸Õã—h;€¼´Ó`Ô¶€2½NEÜß«Ÿ‰wº2óå¨mG¡IV;…mš‹Ñ ‚ð…ÝíªWO×ßÌãðwã—¯iN•]eA¹ÀÀ+f+Í&xfÝÓ›<Âÿ_ÜšéÊÅö>Û!]4×ñ›†‘y)Є¦ŸÇ"'e}D™JlN%ãf6¢j¡Éôh°´ÝÖIˆ‡$T6£¨c•i+5™a`F9J– جŒ2¦ª˜Äéc7¹-)ØÍ@©š¤Qi¾3Ú2Û©3£Ì¸Nu».ÓZ݃۔ÛX<έ·›ÊÉòg¹=3§ÉÌô¾YÜǂܲ|ªÓ¡.–™=]ëq=ú²ì°³Û6ò»ù£o•kèœb˜ú¥à9Øñu¹ëíš¿)?¹Wý¥®'Ñ­ ²÷Õš¯k‰Ú€N#`)ñµntc¢]ŽcLÜ`‘øÀ¸+¥—ê‹)úm7ç̵3þùìó'g¯¼~ý“W¯[Qä”ý ¦Óo&,Víi*» òVI•6ú±ÊHjå:šhÕ.»oÊ9b £0³lxH¥îcïï6ìÎ瞵ƻkAËqyEQ{q%5a<Þ(‹-ŒŒ†l߇ÐV%ĵdýëÒ?`ú þ/´.½á§§Zÿ÷•™Ÿ»/wYÜzÒØ¹µW.‹7§ìÓ ê¢jŸ6±Ê™ÎuðÐüŸ¿0Tç•;·Yÿ:4Žtˆ˜dŸlšdÆRú,ŽdŒ]äñòº¡7ö‰õË]Ü·æá9@'“;j¡ Åæ[¥ÂahÁ^9²ÉM‘é½ÿuDÝõn5e'8I¿/ê9}O>det¢ÿ9™’”ýï»·S2'ˆ)>8@VH¼ûÇ[Y‘Ÿå¿•J8¡0‡¶~ïàþI~Œ{Ô|)ÍH²·/a¹ULöÙ){j‰lÏKkÙöÉå%åf$— (cݲ¯hjˆ_CŠ-z£6É&*§¨¡Ir“€Í5Y¬ Bߘh¦ZéBác)ËT˜Ñ d@ñ•n9vÛý¢‰“/°y;Ó}ʦ·S8îmÂH âhNµ¥¦Û@ŽZw"v\ˆ…($Y%f,uÇѽ¯e ‹ït÷4Ô¼ž#ø í+ºnéþÜ>ûxgR™{÷¿xcä1mTÓ¢ÝD^Ò~Jç…Bàýæoõìn¹ûf©‹Mú ôžÖ;eœëq™õ9‰×SaFäq&ÛI)õ8`*Ì’•´‘™C ]Sø8®rÖ€Nrma‘D/±™5Éúkwt:äVcÒ¬b€ÚŠ‘ñÈ‹"[Oj<bK'÷µ#¾M#–×Õ4s©{—ùOãZ}Rƒ”jµ¶d.(\©¤fX£¶Sú‚.ö–°SüÚL7² dL ç·úu…çªÝóöà†Xûy¿åÊæ›ˆ)“°5šžÊµ®‹½°ÛÓkUîªòÕâ3Óqe«§pȾ‹ul<ŒÇ‰ý=ŸåÏÇ¢óýG/_žº8?¾þ}À‹+Ï R6@Ërv¡_^QÜW•C ìmiÆ’:öß‹í– @Líôí?õtŽŠ¨¢‹CÐ3i‹~›YðЫ·ð„nòÔÒ9Ó-¤¹eSèÈG ð·j­PÒ#º©.tÌÅÜ“S7ýéúñ O»;õ¨Å"øLÞ¸qQÕ¯ž«f & ãÂBbƵf„ âçbYW Ì6ûÛ2&Äç=5 u$U1Ò©´6ÇcR ›Felç04U(-eñÖôt/ø3=Æ.-€­ý#ãñÊsœiy¤^-ú™N‹æŽÖåâPÉJN~BóÎ?ôÎê¤@„J+Ãå¢IŸhDô£ÿê Åû°ÙÉ ¯wøEï ƒûÑê0sëÀɶ8œµ¿k³JöÖ±}§·¿×Ú×»eo-G{ÜYÃ’šö®ä­´}y 6£’ARdΙ¶ÎS u„¾µ…¥T™Á!¾"•Œ†›™"Ô`lÄž¶Ë¬e$#D®•ä^ˆÅ´á‹‰V¸:þz“d¯HWØîéÛ.Žûn c/ˆRÃ"*º¦ÿ•‰ši‚UúDÍœ¼èð v¢Žª‹r[jÕbÚ³³ë;8Óï¯MóóÇb&.H;¢ÆE€G(õ»›ÛDõ©J´âŸ¶¬ô¾÷€³mûg¹pN‹û7;@ó 8£†f¼eúYœ Œ–é`rm3s–X‹ÅŒ æ2ÞÈa¦ÈI­¶ôT›» IDATvnz”i2ì}Öhõ¥N2¾X~yd™J#ö>2S€„™3#iZ=wY2rw¶½åZma7M2ÀÊõs;ÓÉа¥70XišÌTh$>PbºÓüi4>·ó÷•-œæS ; Õ-A¿g§×¹³=°ÎX+4‹\Ôì.àU»›Æ»êVÁþksmQ-ý>J…>yÆîãºGÐãF FDÓ >ß ×Ö‚‹ÎZ$xÔ}ÕtiEó‹ËÐ é<°¡ì~~5ú/¨ÿß?óoÔ×+"zUuõç—Â'¹Oý{‡ï"gwO]Ù}ºÐ«ìˆKþôEÁóðÙÏNßœ’î“ ñfÿÛÀ{çü¬½ß‹Yšçý¡lÉá<¶lÏ9[¶Ú3Û®wRtãä¥j_j·g)ÞƒaIÐMA@\æíAñ7ñ7„8·yP7 bÁà—‚bzæmv]³¤™EI—›ˆmìÚs¦l¹Ž–ìæ½ò—îîíwóÂ8åp*3Rzžó<ß_"¶i[±c‹¯,h[í}%·„üÿ˜¾o¿°ÍDmn‹ãCl£ÔfÜïVó…ð?órß¶"òMJÝô‰Õj¤lG›  R—#cKb8Ð{¡ ÐWz“§À¬®%[¨ý¢Ïá{Á'×寯ù‹oŸþæu-)'Žbµ³™½q4„Rn[W)ait]H”ƒ ™swõÈ*:TB[}ƒÝo`S§+ßâÝ ;Ûé‰÷~‘¯‰I«ø‡$£Ü%Ù9i½w,Sàh]q„â~8wóè4|¶oô{¾­g½Sn¤g•Á~zº”kLô„[Ä{_ùýŒë¿\ßpv->ŒŒþ´ò 8ü1N’ÃàÝô‰â=·Œ"Š9ÓÀãD(ƒ•|á°£î­_æh@IƧµ’ܬeÉë>gRLzBç²7®;Ò|EѬ½Wµ¦F§Žb¬Kô!Ó×Ô‚»#’1inÚJjLÔ ©n5Ê U8ÄM°`lƒZÁ]8Vê Ãx(ôÜ“:pÐp;<жo÷>añ‰âºš‰ˆn´õdÂÕm.3“1‘H«ÂtªíoÏ’Šïà|*ê€æ«xú„î/q­ægu¹ÜzîûäBß[ÀÕ”¸™Vüwž=Ñþ9,õg96'YE^oV^š=©{’Ô;zkŒýJvAÆÅm3÷Ý®.ÃÃØÐPdï¹XŒ™Á^à^A‚{cÊlÕM)ÀÃ;&IŒ•koœC¶JF2dºHâ4gŠìp‚̨sƒ«lƒ¶9$0†]æ¨Qœ: Æ¡î93pÐFI£So“z—ŸÜÑ,ÚZø¶ÞÎDØeéÙêt/|þÍÇ‹Ë×Â~«$[¢¿»¬øQ ¯¸m¥W¤…®ëÐI=]¸ÈǃÿÔãÁ÷ñt;âáÒûÙt1Ã]ß÷MºXþ/±êì9ÉÅ zÒÂË|ó„-ëƒÅRØt^Á?Ä«•[˜7ÁçÎÑYþãÛku»”¯=ÏçÍÛ‹ü¶Ãöå÷böSÏ?½./9‰ C‘x“böz¢óùCZ¡{A%ú‚ýúq·üÂbaî!vGE·jŸ¸>@XœTuÏ÷7µÇôFlÔ‘Ó”1’aKêÂas°—h$¦¾z„¯Þ 8`æà—ÒËíàÙyÇüÍ÷o¯‡¿Q=pì}jÔˆ=aŠ\Õ£í½Qm[ÔÈÚF[i ¯ËM3$¡±c\hJt‰ARJS˜ÂÛý &¦)v«Ôo«Ü”ãjeѺ~wKM¦“UB{NÒˉxŸìdŒ>&åç§¢xì;ÖS–Ú§œÜÒã‚fŠ`ï0kN=rªW}ÐÃâ¤ÐQ@Å™'éôpåþ!(âO÷†³ÓJOÈ ŠüÏ[Ce§£”²SÀÃé¤ÖµÛÉ;¬€÷猓Å}e†QÎ%wO(àÈ¢&ÑQ¿2…-2Íh=F#ÒñaBQ™VP´Ê¬D™¹‡NG$#Ê*Í ™IÝj8YÛ›4p˜ísÒiF-yÛ§2–;qꌿ­€Ò‘‚è»›I¤3Hö<Áhro“Hjª„bÓD ê'š¥=¥÷Ì·KS´[›—ÌàµF d0u‚zaÄ^|ÊPªpY+‰]£¼šÿhúñnÝ™oHñ²EÅøAÓ5sëçvë­éý"æ‹ÈÐt&ÿÜh/#¢Ðˆ1ƒ6¦¯¥`¶¾Ïf>Båu÷?_(ÉÙÓµüVzgTèhd€Ô1 ›ãs’†äPîG«Û¨SŒÚ%{ÐŽ)r­Ü*‹qµÙÃcXEÌçÜËLÞÊ'JfE[´k—f£`o× ŒÅ”¡cS:Tƒu¡º±~õ{ÊRÏ6ÅÁò¨ ¿=»jýåÿò憤ƒoÌ_?Z<î¶o<)ºóùóögý‚žáBqcûÑ0pMúK“¶v( ¯÷#„ëÃqnR4ô”íà)ÂÝy¢©f^ýšø·öó×p^nË ºÞòòrôyÏ.æB`ç‹Ú?SÍG<ý•ñ.n¯Fºfö8ê-šöœšÿ~úä©?÷ºwñÇyøÃ­Oßlw\Ð]Îyöæà)/ºŠ¥ÿûͨˆ>óµt<‡á²ú²‹_øí/φÍV€ãò­«í$ŸíâØnñO·é¾°})¢ƒ™¢fW£ë/ñ›àHGUÙ¬Rl+¤!c8Œ*•V\i+äM¥n“àSH¸÷ùÙ9ÿ/îÁ{ŠfÑ·Ù„ï”Ü55j@¬ÆÔc6F”¨ 5Òp § 4 ŒTâ i‰ZWÞ‡:Y‰ر8“dX«¼Zœ"[˘‹w‹YC¸³’޶ðå;u,?^ø¨üTÄý‘ÏRq,v#¿S6õ‰rgÞ[­ËŽ}§”Ãæ½¯3;ó‚ÃÊ™üEÚ·ÓÔ¨$BËÏÔ'çê.櫚‹ìÝgLOw‘âÁQF §dîëÿ²JÏYeì¬n½Êw‚éQœÓš'`îAáŽ Ææ(ª„;äÆèinVÞ/å(^¡¤»ê;­k2þ^f,Ü[±#R{‡[5¹E|Oj+)`è*çLé4m•nª{!SI9Âhw멃Ê Ð8¼ÓŒóŠn%ˆ·¢I÷º•×ÔV4{q‰î¥û.¸ÃE%zñg®ÐíÜßSœÿ›¨µæ†â—qÐaæ·Î_Sî£û×;îÚFÀr"ÖÞº¬¬Ðožªù5½ÿâ_Ô´Vל~Ñño%â Ä&Œ#ïp;ØY匧‚¸•‡r”›:8 Ù5I^ ûfXÞVªѵ…Ó6§pÆîÆÅ×àÔÚ%;«Ê•ERä*ÅØ,^½µÕ‰*|j£’ëÕ‘ådÒC:^STއƒãLûjuåj ]¬®ÌN±]WîTJOeSë3ê8gAÖÇ…T¿_åËwv3Ù’º˜-ÞÿÌÞ OÙï-¹²ÓŠâw‚²cl$=C1¨ß›bÌÉ»srn(Ž€ Ž#"NUÿµ;®áLqC~ ©^}3{Ù1´p,”G¹&7úîèð06:ÍHÖ|‚’z¸òóÈMÂáÔÙ°•k‰QÙê(aLs÷ðUÕ›a1{¹¶íd*r(ªÂÅɪy܈ËÖºÆDNK°9AC:—Q#H¨zÓYˆDÕ¢®çDÁ9qñ­èüaй8ݼ0i;ÁÇQÉÅëwüSûÈmÏ6T°AøÚ´—¢PÌÞœ‹¥àQ—”8ÿÜ?|Û{zÑF,s¶~ªz‚/zömh.¿”¦jë -[n;‘$F±A\çø\Û °SPÑfæÑMâíÃÚΠ!’ØÌpC«Quoå¾·ªÚ!I Tþðdà3|¦ŸÏhv!'”#öSÀ^¦S2îfë“W²Gßi@ŒZËœ±k‡¶# ô½ÜXÇt´â°ëÚCcÛ3…à;¬Ô|>Ø k=‰p¨ÿ,¿¨¿éÙÍ*lE{§¿Ñ;ßÛ–½è‡—¼q^üÄ’/Np`oòã8”‹Ù¥ÞO1ÛV]Íã)Ÿ‚€¾QPæË›,c?ÓÑ3= ªn«Õ®iƒ/¢á¯ýæ´q8pxÄ'ûÅì‹(ŒÝ‚¶;ùåÒs÷ ÿ½–8”• Z÷“è.¹ø–À‰ùÂ<÷ÝýÏ ºÖqWž¯/…7oHLZêz“2ôÓ‡LÓß Z=u=ù¸q/»Óèé¢È ÿêåÒ]jßbÃL»Êµ âa£8lOã±=l³3H™(5l¦¢ð¤Ì“¦š&[8¡Zc±‘·û­¸ëfn¶_ƒ=ð5^mFø ­U Ɔ$B Ï^fË9ÓÏo›>±Å×($©ŒÒ@§椛V•+09¶«}†Ó©Œ‹L³K1>¦®¤ÅøÈÚà°Rz‡ûÌâ¨òãíô þO\œX¥£ã- 'òŸW×¼!œœÎÄ'Êü BQzm=e qÔ²3¤pEvŠ#šž¢eþÿóÌ8múaÞEÀOM(š³ÌËÃâ~¶”á¸[¼— ”ŸHý'„ã™á8BŸ9w‘â¬ôéá Eô‘åÆÊÏ´ÊaW“ åH§GCâJF¿‹r†å*Ø9ãÞ‘¾/Ó_Â]t2fo¤StV2]‚ÍIa~øÓ%·(!µø4޲ª€áÉÄzÍ&Hãrqe^IQq€ìÅv‡Ç}͆Ô¸h‹ëÇÏ·Ÿ?«ýã¶ùWå>¢wQp{¿Û èÈç/Œ¼ ú7¿½uÑŠ·1¨^'à’å'³|Ó†çþA{KÊ7_ð{Á_‚×ñ¼‰ßn0 Ø8W©zf_RËÆXGíH³õ´Á³mf–¦^C;¡NµT«$íä? ngò÷ì»Cqã8•WiN’±º±ž"do§²PK®¤æù*ÕѤèo0%f…ñ€óÉjvŒ²õAOå(‰[EÀ—²—‘:Ú8ôÀûr: ðŸHºòÛf[<{ê:“Hîºñƒlšî˜Ù“ù¿›WÍ|›ù}w têEcîÊ©|B§ñ)6ÓIŸÂ:¶ú¦ß1Ýž¾å"ßÀL[‰B}s›b^mŠ Xϩ›ºiM0Ö²‹ÜÄ/5 ëZ3ˆ~õ šPÕ-vdh  ü¢Þ›ÅíΈ°rçàg¶ÿ3ÚKõ¹ƒ7/ë®ôÞÅ.@6r!\Ç‹}îºo~Zº ûú6ËAÄ`mZ%‰6mØóî?ÿë ~ƒ-èÎïø¥ó?z!fÑoˆf6 à *¯£ÈЇ1Ψñ´ ¶R!…é•»ÏhSî ¼ô¤N ¥Âû=g-}¡x+\â·nD+žˆÈtêA2ÝQ‘Ó>WV*TæzÿšaN„L%õ=ªbdt²ì’®ÞG™) p¤Tis˜.ÎÚ^bõi:><ÈÅë}æ‰"›p²¯Üê¬^'Í­Õ¸ë¢oŽÖàG©>ÅYèñÚàh|†uR’½[BÓ|í6]œ>‘ŸT¼W‡OJ1Ëü…~JgËù»fßé;óN‡LNRnÏpÖ3ï )ŠÓ)KééeYtÁd*§A¸=x ©¿q´Ä”µÿÊ‹ït”SkƒÙòñìã·bþfz]I¤h#0" ®¡ÜU^½Â}níÆ|VoïËʹ¨žW|×ßÙ†Ž{­¬¥eD䨩҄4#uZ¸•ò«Ÿ46u*M¬•wÊ]Ê‘QOÿîñ½Ön9[C$jE5•8ÞÑ„ý‹ß_ïˉةê]¾Ž­\Ô›$Ä a[kxÍ ²þáB’J¦.¦„n¥ª5+44»HCÈc @ W¯1‰CÎ0_ ›|)VKH5>>¯ÞÑéñjD§9¯÷Ø«B?~Ç9BŸd:¥‡¤˜54›½'ó€1Noàê•=ܧg&&œ<¬Xó\¼£‹ÎCŠÆÿ‹ºèôòµâ¬Îq"õâÔ­x_¬ñn#ѼÛÓLšŸšWÞá³Áü”WGy!dúȧïh$<Oœ2.·ÆC™“d:iÐE®“|ÍÐ]ëG$#†¹öh2ü.%àH„&G5&Å®R’b‡=˜!š1s´ï™¢O?'Úã›Þö•…îuí•Nu æ¡¶ž@@`@Ó°¿K™M¢ÐN1<ćfêŒ"ò}uãϘp©^Ôú1¯+×kô~GHë5½ÿ1ùí|¿{iÞ ç—êÍ¥ ·,–ÓGOyvmÞW[³[Ô‹sôz‘ïGÝÿáÿæGÂõå«¶ÝC-}=|—™Äyš¸~|׉%„‘#R4 À7 õˆdvªR‚ÔÌê"ã.z6ÇÞÆ¶&ݬ¤ÓÊY $ùa JN:FQŽdÌpŒÌŒ¢îfXâý]À$9iH1beU’ŽÈ)g$94U*»Ú.އG‘¨"§Ì©™02–¸È¸[Z5Ò8³—W{þ[$ày­dç)/ÂÙK_t­$ nì=:ýøó>[ýl(Dyº¾¢¡U3 ïô•Ý8¦Þ¬@«Ó1ʳü„GÝz:3õ÷•’ØP'ÆŽmá*ÙW§·Æ•/õ"0ÝÒ 0?„Q0›ÌþoKƒ¸j|Wù…†/î­ò“oWä:bSã†ñÉ=‰+u<˜}?þçøwêé÷õ~ƒox¾ù¤’2RÞâ}ÏÅó›¼=÷Àõ~ûª>Î7ýVNY»—ôD¿KÓy!{K5°^z”³ô‚+rØØ 5þŽ5žÔ5ŠÉ)v3Üœ€BîEfË\GÎà+›GH¬XV™¢÷¥J]ä’ ™:¬p2TÒÏŸ÷ß,$ä6êÝŸÝ0‘dnÓ5%&Öé8Ã2º[c7'ê-…ˆ"iè¢ÆBXÅmØ!åèÏ£ÕB¼./Žt´¢ŸœÚ…¤@H:&qǧû g޵½«“û¡îaeÞ\Œ…·Ù=[^pº¦™³eÅÙ)¡Xú¡’{ô#ä§¼ùÞ÷Ò(N?oqRôðíÁÕ7œ$ÏþŽíI§?ù‘Sf&Y[™ÿY ×ä_‹ãÉC¿¯{Xé“?BpzO“qÒc3>ÖÖ¡2ìÑã92c QÎU­IGzoL=B‘+K%¨å*âœ]C„éõY\fú˜Èëž„ë“ùO^.c7Ÿ ñe# R÷X„LwŒÊIBðQéj‹fÕNB‚榻uG/¥ÀùïŸlË¥i—[õåý-ôÌ)?k[w½³ýêßL¸xýâ«G¼áÍyÁ«º'Ôìwt7lçe´ÜèͯÍoþt/LgçÔ•ÄS~_ AÓpKêG)q]ú«ù§qÝ€483¬ÎŒîè2¯dOÒ• ¡4åH36v¤#ð¹Y¹é•e%Z;ôºˆãÇʯ53ê1jJ‘“f”»Ø•a™ ÆõÝåøð$á´ ª³x3ŤŸê¿wUãb›‘M†ù6˜Rj;BåU’ņ±NG¦ÈuJµG\g(°%´“h§öÿ9ºõ$xs³õoƒî÷íLxÙ Žä-ÿø_âZ|-÷ýÙjÁ„žoHg‘L!rx§„bœJºì"©Ü<¦‡XT>±b7âil"½îöÍ|¡ddýsÜäÞy§zÆ]Øùгš™þåú†™[œÁYÒÅæ; v!9©"IßÓT¿3[‡fÚ'ÛÝ{QúH;~r>:ÅÐÊN7Ò•Æ}dNÐMyM)rì.Z8ÒðP}½ ccaŠ!7C(2”§ ð#CŽ8¬¶–n{ªÀ1Ÿè‹•pÑßÝ ÷ 7>¹|©ÞÄ>¸l‚f»ðqH%$Ò™Yhè¡vµ@^—ÎêHšÏÛJö¶}oÚoyôÜÚå´^ ù‰gã~ë~6¼P‹ófS Ä ×ëÔÜøöòÿ¤óüÑ…sò9"øƒ¿v)š¿‘®#.^,UÀÆìú\º+Ó·%ˆ_-}o WñJ÷ûú‘0ö—¸ë†ŽÙ¿ÞDZͨRîj!‘Rû]ŽAZ×µb¯Ôæc’iÎp+×wÛ¶¯‹>ìÿµF¢œI3†¡ñ\•¬à¢ŒrŒmÌرù,ß¾ë4cmGØÑZç3›ŽÍ”Ôåw«@ìÚú Ìm˜ìIP%v3&G¢*Ç: «"‹ë,D‰àÙՂޅȺë¦ðÿ Ôî‘íµµüâúlti¥i‚ @ô[‰`ÚE¡‰Û"€¡0”¨âšv[ùvÎÐÅŒõu¿]J[¢ñú®c6‹z]IW]¹°uKb¿3ß0醨râáî3-æ8båöE »'«A£¾,±M4õÖJ#25ïLÓ« ©¶% ^‹…î8ïC¤W_ÅÓOLØØ½ Æ®:9óÍ…ßó·=û7í½Ž'¸Êå«ósbªg÷­M\SCUJC¦ÔVÒ*¯¦ó4¤›ÔQˆªÁ×ccÇ02mo›´Án„å@"²j:Ccµ©,Î/¥:ðx¥Â¸½íDg¿¹à®{!”ˆ¼¢±mX)TjEŦñ ªGò]¥ÚZ\aúýt‚«!þ S®:SN¥ójH„I)×§lu„’ŽŽ÷ÕÃ2Sd#“f¦È h•;âí¨'‡ˆ´¶‡Âi¯²ã5{˜L–;L½JßëBKɬ«>E>-OÛyýßúè.­{ñÃìÅ·õc?ÅÚ¯ÔðÀ²£‡˜T(X¤îçq" ÈIšrX%JAêcIç ´)rmVÌt‘iµ§–“"ÔÁ®LQbdìA!l§›1#KcêEüÀcÿÅþ¦Kð’ÀYBíÛßQ!âA‚¸m¸\q;N¼òÿâ#¡ ý ã%"gc]dqéã"Ü.¤II€Üìù¶Š½wÈpI©T®A«L3^_¹rÜ©OTÏÃ!‚}œë°‚¬ÇÇgV{z3ŸRÞ‘…ä[&'W@ù»Â€âhx/ü¹ø€!=Kð>Wê Ó¼?_ûvJ„|$ËÎþ„jºxïîÆhà ¼“}BL˜ž¶YóÃV΂'úÓjîKÿȤ’ºYéûJ½‘ñ«V?iÒL'é®VG¿°ÕÃk0‰3õK5ÌŒ‚Afiäz­™ŽPä:Ê€¸›!©ú¡–‚’Y½EmlÜùמÿ×&/þçà¯:wxe»—Ú_¼Ý~.qýŠ¿¡wNvûÌoõRoI”¨Ü“Ú:ü×&ºÀ£é9¢·¯ê.ð£š}ŒüÑt¦ñ¦¨·gÿ 4ØÙ²ºøx;úáNï'fØþÿ¬þÛ®yLåÅz¡‚Nðàb·wyCtÿ0ç2‹eWnô<þñëí/Ÿ¬²ž‰v¸çIâôÿÔ÷~ReRß@Ìé £¨ö„™#7iI‚R^# Ó‘×IhgI’ØÆ° ¡² …סdšÜµz…4”‡À]”¹‹w¤#ƒ¤t†°B’dL‰Vîo*·d±AcS§#t‰‘r¥RŒmfðÄ{É$ÜDˆ©X>­×'aô4×woÅK;v¡zŸÅ•ŸÂaÊc£Ö“Q§Ì9Š\[‡ë`¤×Æë,û5â´Ê)ѕڌ÷ÆÚŽ™®ŒsÌaÓ2ìš"c¸k"Ì—»¦…YÃãÀ¼¼^rîj|îòù«y{}éÌ_š?\U§þíU-;ñÇÏÚËy}é7aæ*{Ãö%íU£$:øQ÷§ÿ¸ýìyôåsz×Ð=ˆ0RÒØM6æs”Å>ã—UçEd—Ì/Ø+¯«óÕ¢=ƒþãøÜB]ƒWÁ?ÿ“ù.lqîr‘œ‹¯ÃÞŽ¾Û($Ch¡t”¿eÚ‰YÛžÐ0Ù÷º/âºAI’]#GŽÂÅV6Ø1õêwºR!ÜP´(‰rÕßíØTµ¢ ¸Ø)QéH'{+±a†Ê¨s†cí<½‡NGÚ¢Ê&Ʊ*ÛêÌt=ÆBf8&é©£Þ$¢bEÒܯǞÖ× Îp ïyŠª/l¯½þesågýéòúôʬ‹lé§¢ê,!ØþõœÞùý§Kûz“óÒ„çf®ÊÇ´ªý“2µí”]寣j°Aä5Bž©RNÙ\%ôm+9±N¥~ÐoL(ÁäàÕT\×ò5w[ÓúI)ªHhû))f©]ȸ„@èéIW1gTv>I1ißz²$T¥ÔiŽh¨1 ÄCS¢S©ëL#Ù’–@•«• ±­ µó«ø6x|}c•ìÒ:%Ä4ñ= íˆ4S‡Å%.…±Y\Œ°Nƒ.¤Ne…LéŽ4JêhS!xª”mµƒÍˆ‡¬ #X%EM¥þ3p?…Ô[ÿí¯ýw éð“3ëSwcæ0¶@'»ú.Üu¥N$š'$ÄÌ]v™ý´í6ƒ¥=Åëµ—&Ͷ“®¿’dÌ—­Y3çZ¡×\låÏoN‹Ÿ½íŠUŽ zí±6:µñ.X–Š# ¿£ì wB'ß1ÿ1QðÜÓ3OíãdÎì ìSVÖ'*áI|[õ,ÿ+yÑg-j °ù^çg÷ÃwÎ?O ïvT­òSΈï6§µ \¹´&'œMœªâ„ödõ,v¤U9³·Ò^…+ný¡ƒ!Czý‡ÇD#”ÔQN"µ’¤9{hÁ ç¤Fž Œ-Ô‰Æsáa<3Ïü£ú%®Ž÷ÃÔ=å·Ox%-Ö {~x{gyÑ?vÓ7FHÔ÷|yÉø ÄmãbQ!˜]2;5ÐyCЩ¶Ä·Á•ˆ¥O¶þWê)vË+Ù±ˆYlGŠaÀ‚+bº¬Ÿ?¿ó»+æúožˆ×ÂǯÚ7¯÷zÿãç ¦ß<ž¼zAïž)dl(J°áÉý¤ÕŒ4¨$ª•0_z¡Nxh„’&m(2£œI]¦ÌuR~o‹fb‰‹ÿ]®ï¡q”Õ+LB\@±«k&‰Ôj _¯Y­ø±¹‡89|]‰56i®½4jdÒ••¤Qä•’“Ô1Ìã•+Íî¤Î®ÞŸe®ïŽ0ìIƒÙ¬wùßð/¿ì<ú¢ÞœÓøoù, ž¬¶?ªÃ¯ôSÌ«çDsÎÉ¥W¡à UôP¨hGÕ·! š6À;3ðfz`…SÉé;mKpÛÈÜ—hºÖ/K ¢0Žšº”Wz³Ä­KÀ0¢U;O\U8Ò1#¶6‘q;&ÙA5’à‰‘Þo‹¡ÓµD`÷ÀúFÝmîOßHê±*Ñf¥ Ü4Ö“–9©4INäÌv5b»¤â î‹û¾Û§§’ƒ¸›¤T*7õ´¤ ¢ûYò]­º}û¤*¥§èl¨Å§š¾UÔªÙ’óˆ¹>Ž„¾»ƒ’¦h؃¢OÝÓ@ùØÔÆ{Š5zoö­]hëh]»üÇ`nïå¤#c^€îj!Œr”#Šl¾ª§UrXR ¬úˆrèŠq˜Ï|Bê»J¨>–d¤Gr„Ó[ñô,yó©•ÉèÏnõI‘ïIº#ïŸwRÞcêŸÀtó3Jqr’áúgñ”þ·~œÔõýñkŠ#êчýȯ\Ú÷ŽKby43®h0+=Úz 1*Ç¢#L-µ$˜rG“#Wà3ŠÌvõ]̽Fß•”šhGwÁ›= io@ „ŸúPˆ+âÛç½ý‰ü5ļß-‚>nÝ6žQÑ‹ÃEµìÚÙ†âœå1}Ô¼ûË•}l(7ˆeM+è]ªo­p\’Ý‹]ù¯óß]ÀÛíðZÕ1½[Š âêGžÁRºWwÎwî?_vÛËÈß±ì˜Ù3m[³ÕãË….\¥„Q=|ªË«°Ä‚ZùG5%·…0ÞcGš1鈒1¥ƒÌØÂ(mêb½ýSÅ혇 I1…#Ít™“j˜9dŒì9<ÆJ­FǤ ‰™ŽõÀá&¡’2žºUÜ£)Ç: `ËPÙ}½5œí#­=jÒŒb\©Q,rC¨¼´¿Xê׿酭pƒs?ÎݲÞwDMH?6ùâ]¸?—[ò΢S‰ï…ï÷Übv«kŸ¢zap û’yß çªÒÇÖUÑ&Cg ¡")êf{àh1l*ß%œãoˆ+Kÿï¿cxˆÙ u°cZ4c3D—T‰‹÷²Êïb›XIp••Z“Þ¿G낞è^®;£ïêZj5ª’2ÞKvq+8Ñ+ò… «¶±>Ã~ •’qè*ŸÙé.ªÙÙ6n2ø|{úd~èâ‚*’Ö@)µ“º¹­œ!SI™-ʵé)9„ÿTÊ74ì(N©À»ƒtgZ~­˜Ç‰§è£ÿhÝùH>¯Ûég^?f¬,Ä#/®[÷úû›8½m b¶]`p:Ýœp°]J¬4t£¨SÓÀ'øïµfpS·/.WS'£ÖÕ>F š¬¢Œ“d­`Xýîe ë¯ÂÈ]ívÖÕ€1…;QÖó“tüÃðàCÉÛqÌð‘nLêÞ㤞¥ H1Å)o%þHÅûÓ¿CsúÓ´Òwkì_îÃz¶ŸÒŸuå‰0£ìà‡Ü‘àðHz]œq£uú'Ýýòã_Ûê+$G¢ùД¯” ¨µ©†Ž 'IGØöv´Å„’63Q¨?»m_+ç)vp!8“d¯¢1{#=èÃMóq€fËnr+˜ÞüDßjèÿÒüÕ­ýö+Þ.|tŽ·—ÂÎeÿ«î´Cü×-^úX>4çEÜYž‹o]TRêÎMá/ù6Š˜öb13íUS{³x­¿ä~MŠ+íßþëþüß½ëÁ­ï/{ÈO¤ÿ+T ¨» çÈëº ÞÂw¶¤bƒë·ôeËÕ×ÛÝ×Ò/YºÖ¿žÐ¶¿Ü¿n¿.1[jqݨÌÜëN#KSû§z¯5viÄ’¨S%ž40JnKaj´¨±Y½+ìØ”`%¶„ |]„z­} Q3 ¨ ´‚{ãÉšf–+Ƈ8¡£–ØM $O26`î¢SÇT"$efH·#“®tsùÊ#^©“’¦¯¾Ž†‹#ÍØ$„Õ=HEœŒéAàù…üÀäÕ3uýé¬y=Ÿ}O‡­­h?[2Üröu‡ÿ6³JÞ™¹ úH¥³èwù ÚϨå4šÛ¦ÃЧAœP¥›±?à^?Ф­›íHÒJSƒwÈËÀ¶ßo?ýΖ2&ä^¦koÚ\sj4Žd—˜:oS Î$ØhDÒh2ö|{ÄÁÌwPHÚØ<.3Ì™z,¨DGc›á¼­Ñ”Z=TJZ‹i°m©Ê>ÜNJÖî%)Ûõ@VJP£’R*úÔ;5¡g„%Jvmڽؓ”yEV•¼Ix“›æ0¶ì*ÕÜaW'3›øªä~ú¤Û¨þ£ºëèñ@vèÊûµ Æ'Íÿ•bÅ,cªDÃv1ªR§ÐÖ«êµQ:Ûö^רú ¢?Q(OzóŠ–«w‚ Œ 1 ÚJ’±µŽb—´<^H sÊC­ÍõÝ•Îf-¥^ãc³’"W­\Ÿ²5Í)òÇælî½ÅN~"kòÔG§' Ô{BÅ™ ¥ìÄ>ê@ûçØ`p")çÆPþe<%>¬ƒ{ÿg~g‰V¬¼†Nn¸Nµ‡w¤&=b£f'Ìòò÷’‰òSŠ„â à}„'=™”àD­8÷N23=i¾tÜËQì²…^:‚±ÆWÍBób„Êu²cî¡‹\o9|ÎßIÝÛ­ÜW•;ÐÏÚªçyŽn^ðœ{bèj>z«Â]vùù“?wA.¯E\­^ܲË>çCóñmž^1ˆöþâJ‡àB-æKýóŸt&ÁM‚¥R?Sw߯Ýç„;ߊ–'WA§¿½Ã.þ«lÝTmݲNNÔFUJã~2/ÂUÁ’}üˆ Ï'/ÔæÛ·ß.ho<éÏéÑãUÝë>Q¯.L\md§’ç´=§åuD‡îÿ£ú¿Ráu#oèèš”©—ñ^‚P‰ÔàõÆE÷dUŒM*5 hµB+Ñtò÷ĉÓém’X©ïºÚfš=ÀÒàH3Sd&u¤nRxÚ±böœ¶hÆ™•ÙëdÄÝ‘c“æ&•FIwÖ0`!¿Hf¾-c³rذT˜–“½Æ02 ©®ô…—mÛ fÍâê๋…À6•ô1Ofîº}ûËÃJR©ÅB™~í {£ºwP•..¨ÀºNí!êW+£F…N  ãY eŦ¸œÈézåûâ(×RMMBãH¤.2Uç¶ÈŒ…¡Û.Ø®¥exx×ß”ôª¬ØÕ+ØFÝ5^ n5žÐW•máSk‘H"ï*K¼šž…T– _Á6WaG¦.¦§­ˆÅCÈu¬ŒÀk<µ¤«œ5iÁÚàUñݯïmR  o“UÞ2ª€DÜAšâ¡eæ ¡6”ê)v£ÅÛnôÝVšØ²oŠ›ã‰t†F&󪘣ò˜ KU6¨ÍJ85d»ì›DTƒ•œm^[â6¨gA¿»¡# ;qãjåÝ #JTcöLr\”ÖWc£0k}F®SP«$àŒt¤Óle yl“w莳>ò®4NX7áæXˆpÂÖ³8"¹œ2Ð>Yßô‰`}¦Ö˜ÑqÑþ§{IñA§¢ãBšüoé é{®G§i?§ëò{´¥ÓMUŸÚ‚­H¥GÆ'íüN2Póc…öÑR/ù€kÓq²ÇNyä¶¢)zßiBîfˆ1f6æßþjòñ–¹Æ·Ý<®1lVeŽƒ3˰pà˜ûXîÅB²p¡=†™þ¸{§ïyÓÁIýìW¶h¯«ŸOß¶/ìôñ~¹´¯uç'.8ýƺþr`ÿšsÊÍ„³19÷V÷¯Oþúõ·‹`À åµ’ŠPð_/ÜŸwTï",h^üÔ²z¯'Åôéywó’ênÔ³"¹ôâY.ׯñæM%žú+?¿ÿåßÚö¢i®¿n{»Ë›Ï.-ؘÉùöÅhqS\~íèîÒ.áó•8‰Îöß\£óo¡ò[©Vÿ¼½_oIšîù+K¤Ò ›’;âØf»†9m×!ÏœµpNy>³=( °¼˜ ›à¥n̯°D~†$âV— $P7„]ðÂô ç¸vVÚiPÓU5Éi횈¶D9¤4)¹÷‚”-ùOwOÏÙõ… TŠf¦ßˆxßçù=­«¦±éí£}oÝ·ÐD²Zu‘êîëÀ<í^Þv>¢¤QR`Ðmgbg2´êm±]ï¾vÀhÈÓŽWlÑÑiG¯Î¢R4äÅ©”D§=uH»:ë`;ô”s 8Ô FG!I;9·¹@Éš$ýRÝì‹ Ô}ÙˆŠøÙRkaéæ÷4ìß“}òÅÏ«uq(ú×ó`]µ )%ų–ð}¾iѰÞó cØÌíõ|‚QNBñ4º/­JÛ–Z8Å@;B`alóa*)ÈħÎÒ6ÞÑw¦Ý0…œ¦˜é¬al—øSèB§ëùTk¯£U‰Ù”´¦ ±,JYÝF wl x<„N[‰òZ0Ôu †¶6ö4„M|µïš^8Ë€4É‘¦Ftw$6±`íÑîõSȆ†Ä·Íæ.4tŒÏ uë^ÚU¸™zG¹±êŽÓº¹¡>ÍXœVgwlæóŽì‚Êõ½ºÝ±xÜÓ±—ŸmöZb¤ÃƒâŽô÷A5ûÙºUëÆÞÍÓÈÈJ%œ]»mñ¦½C6°÷ë„’ZMÅò¡\FºÑè0÷‡ôG«¢.”£ÝÑ8HrV*NOø SŒœ¶]L•ÓY2MvÑ)&Ý M`}6x 0LÐ]-=;¿]’7Ú¡øÔ:—¾N˜Ž4ºæu};{8ƒk5ltÿ tγ§–·' ÉÛ+Ç»6$¿Ï"—¼À÷öŠòÞ©u÷en¢ß2RÄoÄdçž7£ùjÓkP{–;ŠÄ¤ ºlž*‘_ßW•‚’d½™€c n ~Ròñ5ù¾ÂåFΗº^Z!iKãÑ"!ìÛŽ„Ô߯óx ©o½×Ô. R1b_þ0â¤"ÃbïõxQ\Z£ƒ-YFÕëycQ.NÜÒ$ æùø•˜\ðÕ—¯Ô¼\ÊŸTöJ^¦A`o\`n±¼±$™÷2¸Q“bn®¨Ž«:ö?^Pò¥åËWîˆJ oÀOMm\]xÞrmíßíõ¿÷Úý oìû ­ë£g¿~¾û¤RÎÿ`wË­£_–ü‰¥>c¯F?<<ºí®ž\ÏŸVDp"׆“ÊÃòß›¥ úÎ X¦RAÝBÜ"ÐdÜ„žV’ð6™#–9.J;lÖi;¸mÚSõÞTétz+±Õ4Ói/bš¢‘|¥0Ȉ„6ÅZbØ8µÎØÈä±SS)ZÜÁ¢ØD+t– ÛÐxókÝ0Í,N‡¢l· „RC±IÔ/õÁa\§?0JúÃö/<ã[w¯®ØÀÊÖî•Ñ 2QOé÷"œEèZ`Co«°Q…Ð:S~ÔÓht )£Ò[<)„ÒÄ^?€bÙŽUÍU_m¹ÚŠ¢ «./%±Ã©áaèž•zN3ObÙÚ–í¡v£•žm'ÄÛUt좺gX7läv×àhµ=MUkJ!¶Do&—h`–ª¦yg r‹;‚ü1»­›#d•¢ M£¤…ªT9ªtôݦª”âQC·†:ª›‡ Ò¡.šX ÎÒÈ‹z‹Ã\%Ñ &í˜8Óí[%0láTü†DÅ 3˜ IDATÇ $z³§­Œî7ÈŠ£k$ªQ°îh<\£ÊFÊ·£4À:-z¡ÝD=µ±Ûбˆ ¡3u¤íȆ0QÛñ Àªû‚blÅxK­›µñª•¤=ânN3¢“Ç.jwMœ¡ºd³®‘nKÚ]b´u]c1¸Yp¼~ŠÌKLzý’߆Æ]vß4úãÎCWŸöŒÏhOÏÀÏ„uÞ[úõï©ÃÝ·9}ï©®gYGïØëf§?.4}çÿÁ“ aþ°‹¿C‰ÏÍpÌYØì™±sž&Q| Ýßþ&C·Ï¿½×Y€ñÖÙž®]\÷¼ªSVòáÄ^BGŸô(;Æ' ußvaƒ5O†‘Hèwµê™›0/u•ÜU£‹#C u…½g”BKì[œIÛpŠëâåÂêü³­ãkþ(7öñÒ÷/îˆ îzà÷.Ü\,÷OŽ«½íÕüò‰< ªË•‹ÿt¼ÿ“â7î¢ôµæñˆ¦ö‚ËP]`TcòT÷¢ê2ò)£O˜ÿ1?º"eÅ e?F=¿açÔñ¢ðO n„UŒ¹'AeÁâf`ë/[£å’Å 8)ÿ|ÑÿÃå/üóË ðs¥ý¥Uuìö„p¬}™·=©Â¶ÑYöÈÓ@´ªô=ßÚØéT‚ ö&CÏ46 ð³¤Ï×+}Ü1i¢hÅj{ÝL»+±4™ íuÚ bOÚ1ª‡tÜoêÔ¡:¦èÙî,1á] Zìõ) ºÀ¨nÞ&Q,Í&º o¹†^­9›Ýâ6­ñ¡8¹¯ƒËãÖ^_ÈÐôŸÀ K2§e#g=*³‡”ÈZé†u‚±.w)x¨º®D™Ì%Q_‚#–æ£O¨Dŭ«-¨ÎI¥•«ÊÛ •ð °R°[ 5ä±³³ ̆ì:ô núQ(ë­ê {8tÛ‘Ý6BÝ)¹«š æö„¹±tg²à'ýÃIëÇg|^ö7šF^x«\hñHq‡Àý'~ö«þ¸¦Ê bP?¹5~r 9)ƒ¯Š_Ü&ÞÑYësÕ€‰µ‹+ Ä·ŸÑ1³×¼³¶ìøÖov,z­F:ÊcIR Ñ–g7kaQ©…nX ¶-Úò|òߨýÅÚèaêïQ'²ÉÃBÜã:Ø/Mü)š/bë¨/ A|ª½Ëñ¹*Á9#÷k*Û±âvXŒ¼ªY»3ÅÞ¨˜hZÄÓ ÔT³t¾8­§:ˆØlåTxjHtØ¥èÍ¢f ÉíŽ9'%‚]îó&,ù iãÅ ïÊsÞÁoœÙ¹éñ¢îùWˆþ˜Ytü^‹Ý‡"áÞêõ÷Þ¹ZrÎýîÅÓ„Nœy™ŽÏ u9ô Ñl=bŒáº>†—/)!ðöà0º#I€Þóvo¯8~Ž«úÅçâꉛ?t—Gá'UÏ…ààXNܳýW’¥JPm|üQ£R] Ž/Ž÷k¾|µ0?wÊæÑu>)·®•!¨¹ƒpˆò•p¼ÇÕª?5‡7Íã#s黣ò:¿’vPSÇÊÎÊyƸҙùúÃq°5ù2o„øí¨D–E°°:ÿJ\ü¨øï/í…Cð²^»¸ZÝ‹Ä|ØpÑö„pªØ J…h…Žö”¾7»#‘*}ð­U@ÓLÃMÓ)7 Riðć3I— £Ü”ŸhãÁj{MSÇä›NÙ¦“Ç=˜’×m;º¦m”ÌÛ@cºÅÛ %þ)ñS»Ÿ‡^ät¡·JÑï;[º\ .Ê:ŠÉÊ!î@Mö[µ1¾3qâZèàI?œ’ÐÑõ.®•½­b×7ÝdÇãX†Õ*E%ï‘IèD£¡dÝG«NѨ¶[õ­-F9C¶*}Ñ,ºiHugÙóEXå С0ÊÙ´«cèöÀXJ˜Z ¦Ëð4;oúçošæf…Ú£Çwoÿ¡in6˜ Í ¦r……Š¿þªýzëâœîÞÛ\‡¦ñAÔ’!r…²põòÆQõäfË£«pÒ/.}ò ù‚'·YYlewvlÛEì æÆr2\“¦èáïêàn0ÈÉ:QÑSkƒ‡ŒrÖÉ„I…¦ií `òCZ~»Øa‰ØT¢µ±â︱@%OƒjÌV<ÚÊdîë}®‹Ü~i’n@B\Á !ÑV†Þ‰µ+ˆêÃþr.ÀÕôæÅEì#¾°:îF›§ žxº0túbZæsuº•ÄäÔ—c¦{ùwYƒ¸c8Um»Yÿ3=ªÓO ™…9¾u\HÏôsâDúœÅöœ+Ý·ºñ;†­ßƒ,:ø;;áH“?‚µ÷ǯEoàwgE`oéJ?$È}<ûv`÷[š¥·Û3½ìŒbõ­·ªÎ¾3ŒnNå ÓåçõøÞÂxœbŠ.ª§…3H¼Óuɶc¥Ëú ¬ÁßH;V¯/bŽ„¦ÆhœKOŠ—µp±‡—ò\¿Â"T&y9ÇÞeú¥9±¿ÿyy||8wùÚÑÁ…K‹.TÊòÕá…¿?öÍùê/Ž\9¹ü™o]™ž{wµbS åà[÷‰ð¿®Db±œÿ(myŒ´Jx"ª9CŽ(j/ôè›\6­_Æ-póykžþÁX—)÷ |è¯ß»½°U ‚ýKýùýVõ'}üݹùgGÇ@ñäŸ]±=™‡.ò]È Uì ¼ÎÚ¡NG¯ï¸­ÉíUÆ Öï’vó¸eδ¤ëLœ‘îêxºYK¦Ð4…°xRw‡ÛÉ[q¯@€'ëÐîé ¬ƒ¬CB(ÍšÓ©$îöÀ¡ºÀC›À§%ƒÕXv5’´cè…¸"n†à¹hÜ27çîÌp|eÀœ<úÁ]^ÆM(àDq{Us»KŒåS9Qí1#…k¬¦ÎÄ]õ ]C%9ȶ”\mÏPn&tz ÀlJ]âÁLO™%¹•Q \Û3èPnáŠ@r¿£èE© ôÆ;-d¾&£eîjVÀµEuLT[àÒ‹ü%ÑÓÀH§—Í«I8™ôè sÇ[Á<¯þ¡8¸¥ŽžÚêúþÈd¬Ôwdî«¶J8úšCjõåíÊ!¨P~£‚»Üß‹6Ƀ*ÉØQbDድ™€Z£½¤2æ15Ò¡VrËV Æ!®P[kÅ_ôÓ/ï´F8é™8Æ¢]õÙPÚz©*^ÀZ…ìëˆÆCqC»»16%Dx…mßh¥¥‹½HÛ^m‚‹y=£ƒãm_bZUî£6+ÑÚ7¤@Ää4"¤SX$§ÛðÞt­eŠö²]=u®ÍÚ>É”­2­ úì~?Ý€uâÄ õ›vP´óF¶Ä™dˆi9ž5<ý»®ÿŠb{–1úV·¦÷AÆê{ïÿ8 ëÌÖ§ÓÂYBÞÛ·39¨ñûšKék˜Ô[øòäµ­áÌy%9ƒlœ†ŸQ˜ÅÝ·!ñ©N`æ¥8›ÿÓT|:Ÿþ^‹‰áñÔdßÕ ÛÖ èhÑ58ZÀeÏÄSý5&kn ¬tÍ2Œêæk§Ça‡V`çŠ=ɾú­šÀÅùâz`Ž/™ÅçfrLõ2—Eõå¥gÁ¥«WŽŸ\(—Æ¿-Ïs|rôjòѸúQãÒ«_ì…“åÑ+oÄ!`¾¡Žþ¹˜;|òk"óÚÇ[sD©O&<&ò%Áã?Ó£cßx¦XʃOy\jñT×Õñ•òÏwôˆ¼ÿ4¯A1è˹¯_òt¾¿8Ý«>ûáÜ«¿øñ{_î­üš 5Ìv€‚PF¾ѦV^+tqÈ£+(„qwWÇC3*pF9“A«!L»K:ÐôLŒbWǘÌ⦦Φƒé½ðñމ)èÀ@¥èv¢gÄ›î ȬÀ;ÒÆL•4C'î)îÅŽ“9•6MêPIÈ”–Zi)†u°ÇQé«W qy_V~jæØOnÉ áù"·UK‘vUº¦·a{}Pìè5o Ü–ê’%ÆvŒýÆ;%_­¿Ÿ¿é'csðŒÁîêàyñk¡ŸÚaMûu]Š!ÀŠ3‰ª°]Y¥ ŪÝýìó¯,êþ¥SþSú_ÛL> œdµÇÎbíxuU„òÂfBÔíx~ºËà16 •Û²Ë0ÒªíhF.Ëî¨Åùþ f©ŠÅ:U6A4ûñNE¥±9'姆ë"x²‹‹p(| jw²¿-W6-‰±í‰ 0 ÇçóµÆp,ŠR9`ùI[ª ëÐ •–õ<“yÜѪAŒ 7tÜCMyïSaWÓƒž~mª»¬Íj‘Ž{@>3¯õˆ×M8HwNÕJ@çm¸éëÓCöºá‘è×™ÏgÁÚÙûK¬ùÇ‚³‚³!Ø1ï¾¾{…˜÷[²ÿm¾è÷Õô×´mõ¡Á;³õßXšœG-Í>vÍ3úYéØú;Ÿïù)Ík…@zžÅ=½aÙ9©¯M™`Û³¼¶™<ÿµõ1MxÐÕªGÐÓ#Iµk† `S MW‰ÝÕ›.'úGc%£f>ªê¯ÖôÑH<ƒQ4”b´ÓzþRíÀwê¥bqž c–;œ«6N^‰Nj\x\rµz調'‡öª¿}5ÿrñ®Z`¿xMÌyÔŸ¿ å¼¼¼Ç÷A4~á¯.åBqò«âp)÷ ÑstèÌäzÄw[ý)ì/XªJã=£'<~^l²å]ÔªEãå­ð6ìn?ƒÑ †¿¡z…ê_˜7ÿDÔæÍÅÏó]©„-¹e?¥p†!1k‰fá°îîèÑ3Ó*£ü·[¥TE¬T4L¿Cè¬G Ê‘&vú€NWôÌ QÄøY‚"Qi¢R¢XœþOp zd ºØ†f]CÂGÚ3HÝNò6¤ƒBJe;"v™Ó\Åùl­µBMÒ²b ô2åáqãé‹'üËøäæÜ¥;ã%X+_Ѫ近ž^=Þ@ ¬êEªyz6—E;QâD‡R©®Ko×E³UHb¯C‘[ôŠÓj¨69%uÔ Iĺ"Án˜Xš¸gcIßådؾØÔÊDÎuª;&mh 7D°£¿þ_t}WW£æÛêqaŽa°aÊ`Ú7Ô}ÏçNouãvô}ŸCì0¿™ñùºíwè¯J=’µò¬í9@uó ìShê``­ââ z_Þ»ß Ýµ+€3€2´7ƒz9 ¯5-š-¿´?õñÓ ™P»ûPÕh‹‹‹w>…‰¼v8dQ2ºÿøûîp¥-¥º!íHg;‚FÐn'§Y‰mw G{`Ò®žzßloöÎx•§ á3u#ž>i§ýê´‰^{´KÌ9*OïFèm‘h÷M?¼}&NÆžoû¼QrvßnÈŸUôœmÅïF8'¿Sešœ}þׯ ÉûvoHOÉ›Íôk;÷õÂÞ]£Þ]?ÔÙÁÃŒRbÎÃuÌ9û_üÖ HÎuŸÞÍLjÏ$»ÎrCìVGN±VòtE9í'¦gîKÀQv Îl£m]í w¹¶I$›a$eC¯íòIÓ_×~¹Cˆ  ­KLíÖä½ùom9n FѯÊÖAÅrQLä…ãÁܼ?¸8ž;¹ÃIõB ö.5Ž÷˹/ºãÉáw“¹b~¯ùd$J8€ƒW÷.⮩Ú÷æ»wÁŠK‹Ë"1Çä$÷5ÆOqrµ5ae¬ÑhtYË€¾¤ RŠ5YÔnÑ0‡©ªPþ°ð/4 ŽÕ±8ðêø˜a…ãCQ9å‚W•\Ièêð®Þl˜S4‰1ϚƣdøðÆu£(²Pwu¸l¹®ã Ú¥±N§š:DA˜vh[¶¡RØtZ÷h{º6“l,Ù\‡Äd%¡K»ƒ…5ˆÄR“(ºÆI”ÓV’J›6 RJ»’S÷€m…ËÃ!Ûµq¿âðåÖ/+,2¸~õ`ç ƒŠ.ÿzÿÇgƒ=[åUM.Ô…gR¡àA°%š´É<º%´rš†»aÊ–¯cñxìŠVýï2òµ R­a:vmúœï2“ u *‰2´èÌéÌ鳂(¥ð…f‚m"kß² ð°êí¼Õ3C™».þÝ/£–çq`ĺöNYO&ÌMIìH…¡ÌӖб-§CQΖñ†.:¹åŒ±Ëæm}ßµ]­Öa×”MµR²Yƒá0s[é`‹ÛzèT mý€/Ônx£¼¬q«Ê{©ë[y/ð@†xlµf]¨رM+’“C_‡‹‡ß]–vîq៕(‹f(Ú_ÅD°ƒ-©¯‹L𢩲‰J¿ƒë¾MKš­˜"E±KŠ+ôŸ#¯ÓI‰s\7Ö‚ˆëý´g '!ëè´«Ó$¢n6»Ä‰a@ìˆAš©±&#O{Ä“ž!¤Î²ë7ÎíDãiÜôëÌ®>ÃÙ™•ˆp:âzï± ÷ú›¯ç¦æŒÿ@ó;öÖÝ·œoUöøÃ¿sìî‡_óÍÞM®8g¼þÐ_?(^Jß’ ½ïñ–êÝÁ[ïä}ÖsÙäuôÞºr†±§]ÅxªCÀ¤“OÓÃOg8zúƒ6éÃ.dÂchA¿Akݸž¾)Ìþ@-uÙߌÊoðÙÕôÌ}tÒá@H<‡lÀqÉüJ^À(ðz¡ù›—n©”¯–wç?úôøÂþ”ûû£V^V/–ßÍÁ…WìWÅâØ†v²²XTÝI#KåˆDy<Oø ÿ Áø†ªO¢Ê7@6 hé;}ã@Jõøš µÇˆüˆ›¦ž3šû»Ú¼»¸°wU––Õñ‰Ÿwÿ¸»‡¤_¢jFŽJ”¯!wè7#årdÝºí°ŽÿB·¿4vÔ¶Œ8e^†]]$9 ~mº‹*Ãt°Š$v[›¬Ò(X×k½QC4Támìx€îcèê7‚iYBz&u R+gÚrÊäPk.J¥AЪÑßQJ"¤JÏu±´ì ç*Vcb ¢RzÅj[@ƒ¸ZÄÏÇF8ûè’ +ÑòõZ”Eß/à¥$ n.Â<£ÉRÀ%ŠþÓµ.Ö.[Y|,Û‚vXô—[­eÿàÖÑÍ^üT„Okâ:Å-lCÁgñ7> h¶¸eÏŠ½[á[ávÊpwˆûΞøTJêMwÖº*­[q5=,¦IJÚ Ù@“:(‰êp”³éô| I»°1Ën'ú-±}#õyǰu&bóttªÓ×ÍY!5¼ ¤¡Ý5³^wbÞu¨µOÇqòîËÙ²Üû@›çLùMÿà¥åÿCÖÞ{‘yéyßvü¯šÔ'ü¡ÃýäÜgèhò>Ƹ~yßLÌÚ4ÉçŒÁbèéÀQv ÀH/r¶ú©O h14NàAzM‡²‡‡8‡ïÐbïè`wKÜöƒ! MäÖв.-ó‡Š+òÚŸÖ?z5žTÜÂáU^î]XØ~qØ::vÕc±ó´A°ºtÀÑ(¿X‹öG¦¼®åÓœWFA-ghYÁjžbk´v(?ÅOŒé¥Zþõ0ú9<‘Ô0Ÿ/óà>0Ö+0FÚ•yC‰ÉI1ðJ5ŠÆÞ w}Â䢼\uÿtR»üÛíƒ_+>®WÄÈ?ñÕZ$ç~üÓ½þ·¹HlÀT?®ébTÐ5ñT žé´ýU¼1L´š8gÛhxƒSi7bæBÒÓ|ï DϤŽ1t4‰¡©³Ý¼Ý¦°L+¡ƒJh7IwMŒN&ôzÍ™G]ýy»Ls#,J !‚¢ØUHËÊ–}|D:Ð1y&m½Îp±ÕüÖ=¹%®íñ¬ä“þÇ1®TZnÒLJ­ ã@«u·5¤ «Û=Á¶0Ôˆ+šÁVæV¥¤ïLÜ$më7Z»ÆVê½jDÖÑò€MÔEäsç&»Ñ°‰eš'H†‘R—œ©5ØözÚÍH§ÿê 쀸aðüMÇ#Õò¶DyµË­,€]¬\1™À‚¢…ìÛoBd1#Êu ·6$[ûÛZÚÜŽY*‘ªc+ù½¥Æ'+ý矵*W­LÆH8¬NŽFê3?oþìÕJõ¥¼výÒdîŸxjsÕòùxxT/ç+<Û/~Føœbî¸u2ùxaôüR18 /ó 'ó/k»ÿg»®(ÈJË€6­¬áÚ5ËX±KÖˆ¬üŠ`ÌßJÕÜ×ðÏê–‘ZFìÅnv}±ac•eÖ¢Ù…&j‹¡;ÛÎ6ˆ½‚Svö‘|`¸ß…ù½Ñð¾5â~Ç"øôÝ?mx}¶(μó4!L`ŠBëL÷UÆ%ØÄÔ0Îåå +Tœ©c楮 tÝë¾Ãe`%(º´{°¶Žuøšf—~³˜E 0£Áªèr¼º¨Ê+QU2™Œ&{Ç׿™{ùã¥ßŽF-~Kí{¾éë%Š~ÉÑ‚èÙ' žB 碚7ý/lUhaµ˜ä2ØR#\Ã0ÉQ^gÝ‘<©SÛeT’>ÕeE¯Œµª2jéuÕå „ŸË/¸v ‚ ¿¼ñ—•WÁ«WÁð•ÿ§òúIÅ•w–C9œÕ.ÿþOíÅj>œã?O\ÿ0WÒJ„¸NÜPTÁi?Ëe4*Ñ›ÝJجš0fR(ÉýÝÈ6ÔLÂN¥àläßT¡Ô£p9Õ†êÍi—¶ÄM7wv–%E[Â.1òØãÉ3©‡=Ø%%c1¼ßÕª)‡úî/Ë1)´äCnc¥ÚÞoË?—{Åw˾6Xýõ½¸ˆ Uýöžè:¾F‚Ü´…5¼‘l=rf[n)Zj¨ð€Õ:¦†¦ÊJ55yôEU‡rµØ öÂ,; f| IDAT‹,:vyŒ‰Û´aŠüzM:R(Mg*!KXëLñ×9 qbÒä,½ÍœßÔêמS˜’™&˜ÍÚ =lbâ.Ó%dÖbš>ÏgíÝwgºoÄôïÞìtÊ›””wRs8—/Mò>èûGO)yÏ„9}k.ºÊµß×2:;sætKþ–ˆ*>3XVïŒûÓSÀzûy;›öèó³øÙ§9‹–<+“=ã4‰»ò5©ÉÄÝÙIºœ]2©ï€O°] ´í²Òe,µoD7¦Ü!uYh'ØùeÌ]ih³"ó“ ˆÙÂé¶Ìÿ4vTÉ×äBäí¾‰o³4Œæ vžõpƒ=ör4œTæNŽË—¯Ê¥Qµ¢Ï¹¸ hMfˆ‘Á–p”µÜ#¨oq«ÕÚPÃÀø1µ ”Ü Œ Â`ÑÖÍ!}‘O0×FŒnC åYà «4*†M-D>„ÉÇEõ›Î‹›£-7ìÿý…ª|%Fåä›ñ¼|áOFåmŠñ¾úÁòì¹pûâ7¿•-eËá}Ïã§úñ­Áô¦hšˆ.k=ãº:…Ha}a!m˜xÍÆ©±'dr+íé3ö9B™+A¼ Pô Kºòô±é’uXé’ 2IÖ04¢Ìië")óv‡¬kT7ŠŽ=tk¥± ÖçÁ²ºóÉç®~5E”–tVÙ5E©Å×vx{«¿ÃÒÄ» aF»Qè”󬡿 V³öA¤šaÐ FMî¸UqݵåÃLÉÑÔ>ДVQŒQè>f­»Š¼×'jWÌý€Í¯AFcßm¿<Ä ýïªøN^[Ïg®+€œ$WèBg Bè÷r«S@áÈaMµ[ÜY¸#~¸»â¼o ù_?–•‡Üô5tÃåø¯¬dsT««Õ§úb•`œ† þ yQ!¨ $›mÉqÈA>¸ýÙÇòòq«²„¼ ŽjßÝœøÿ2ïA×¶ž<–/FÍ“¯ÝOúå\À>îí_½$øÎóêñà¤O ·à3ŠŸ×ò2´kæt %©µ„´£Ûô×W9A®4` Ó =MUŠ&ôÓÇ`a|oêž1!¬u¢¶×ÓöØö[;FIØ h‘0êÇvht:0ö¶ÓoGYB;ÓmLÖ0iG§‰îC,txºqO£ù£‘e¿zÚn˜ôSÅÀ¬uµý‚°ÁàëÖzz<¬‰ÈíjÀ:c¥¡Šàš(]p ×Äÿuô`÷Nÿ¹+‹FÞv9묕d‰–ÓœóžÉ­6œÊÄÖZÙ1}Á±S,2ªbÅP ì0‰pfm@,õ‘%jw ] t±n :`7£ACs—G=¬Ä?<.¿ℼQôù™|ysèrag¨vñ`]èQ©H(5Rg·KÂ~r³ÁB†2qûÁw£âqñtV­´Œ@èÑá÷¿|ñ„Ã1ã_Ž÷kn~ð}pí7sÂþ¸T–ÿù…{2¿_}é&Çvþß½ôþêè’óðOGn/ääbùë«büQ}þÂÑÜž¿ÄœT·çÆËe!]x“NHÉ-ÄäÔ­¼PGÅ%™þrSlÛoVÓõÏ2’´t±ŲÉpñ®Î€RÓ1 lœÌN–vª_À&&…bwê0HwLêôiU}S£²ÓŒtÜ©Ú%Ñi—¸ñÆP'Ñ›‘µ„®É¦WØ8ÃŒè¾Fù;¤¡3EòZé¤ßÈÆ§Œ;æ]é €\üÿ:oø­®säýñpçÄEïˬxo·î÷ÀšNó»³SÂÉkÇõYëõÙÆb6ûèß N²„z×l£b¢©Ì@B¿;ëÿÚž¾‹9îhÿ¥©ÕPD‚|è¿{óçš:ÛÅÎ YúNçñ@'½hš\ ºIt òê *kkÿ«M¸úŠù+òè‰;¹.GÅÞŰöÔÏÿ” þo¢@åW¿¿Í»¸9]:jÊ|ì£ê²îi ei‚@W—óñ^T-©ÜäñaÞšˆ¥`õèÀŒuõ)à §ÄJ”³R*&‘=t+Ž£›°Ï«²zmõò÷¦\T~ß.UÂg{ÔcK?³ûOBGÁš/ƒ ÍÌ)ñƒ¥Ú\qö+6Š5t6ÀÊÙ6*•JíBSZ׿SÇYkÏöYºôOEG±$[jPØw5(#<ÖÕÕöô`:u9ø3•81›à¥žµé%i•£-fâ41Ð&–¯¥ÄMÃ.iS)'ì­Z¸·]+õ¨fŠ¡ÆmÑXmySÖW‚ñxI”ßM°c”[êŽaY5åxÚò2+eøùbóo)>ÕáÚõ¤ŸÝÖö‹‡ôî)‡•ÓIÉ 6£ 4e †+C%±Î¶P%‘”]·*ÖŠA&–Óø<ÚäÑ5›‰.N]¾¢÷HtÙ1þ¿"_@åNy8`,|)…÷ÁºÊs…ÿWÒöý”·ÊmÔ!òµ)ÑJ3§”ÃZµþ'Ûý»uŽ—/ú/VˆžF}|>úE:@5•-#‚\•´ƒz&ÆTJûÔ¯ÜÔ./^üÅÒ³VA)ê_Yš¾·“/:ýc—†ôÝs“|Ÿ÷¼:>3iˆ‡Î•Y¦[öÞvÛ[¿º;Ë O[Oé™…wóôðúðÕ†vb`ÚÎhwù­ˆ2 Gî3ë-N% Ïœvì¨Ï]d½ñë6˜_H :Ý¥ÝEa¦–®Ç5 AìFS$´{šÌ¤Ÿ"êxðòaõ&,Dâs˜oÔ.I*Ñ‹ÃòÒÿ…½…VíEñ›Ÿ²8g«„Ä,a÷jEý¶v— ¦V攀Ã!¢¤/ Ю4ãCë$ãëæñ>­o#(ŽÌø²v Œ¥‘»–še"Љ­^Éo¸áè/®¾pœøáèa¹ºïìÕ€£‰÷²/?®ŠhŸ–ø“U®¬Ø—j÷Û—øÙs]½ ÜÇLÆîæ± é„›+QR§A³kÖ–}àñŽ*J=‹zïrJÏï0›BVEW±®½‹3 í'F%&+YÃØÄ¼éØvõšÔíéEdì.¸<['`=k]Z]•¢³žÉºÐ$sz³Æe$„o=±ÌSì„¡4ªá•7®oWK±ài Ê¢A˜íi8ÝPû¶nIàWíjßÕ+Ðßìêö&Lî!]èh…¡K,Q2b—ªÔk(/FaSØÒR×á‘5÷´Ý…U&•XLÚŒRò4ÑðP´xêk_†Í㬔OCIYPઓ—åÒ¯Êj)p›u¥Å 9;Xr6•õ7\–ãÛW/òòŽœß¿qò¸:¡úc?ÀºÁöÐ¥4ÎlÅ+eêʵ¿öª&‡Žáâø{ÇáI­¬Öj .¬žüËovÊ*‡GÙ¨¸ícî‹z»FQyn0W½¼’ÿøŠ‡bÁ!½¯F°9ØZ«+qK¤é¯îÅ—jÅKÏÖe¼0im«ƒ›øÕ²Vô]çß­1<µ44Dqï´žJpgiBùƒÄLµª‘Ï^ Iè‘IÒÞ7ÃlaH ™áSPh•cÚÌÎ ÙôÎ&ïÁÐ¥wº&§è‡ô-­æoÚy„>;ß=»Ò¤"o'üÞ“ÄÙSú¶Yò¶Eî=‹X‡ßMzzwDÁy&ëëÔ‡7™nçóeïõsœ›œÍèÀOïeç,‘jflñç?\;EhuH»fJrŸæq·:]ã¡/mJ>™"‰wóGÒ É6¦Þ@ceÇ0 í5àþ@‡èG±«Wœñ—l ~ZVòä¿qáÎð©ÈÝ|ñâ‚X8ñV¯¶®]h½d®â¯(_êÊe%¯šò×Ì_P£šÅ™‹ýø•_ÑAͬœP’‹šv¤ËïêÖÀT¡ïôpVs¸¥°z;”Ъ¬^«EÕQëóÂî_´æá"_õ+|úmµÊ/pqbÅKR¯n ú“ÿ'Ç•;Û¬ðsÂÑÏŒ¬5Ôøû µ;Ž5V é¢kÀ(©Ö@yÓÓ=YOÅè´Çƒa6Ýiÿ%këXÈû.ŸÞ’¸A ›R·¥V]âéÿö®novi¡Ã©®Á=Ãóu‰1VZ@Ib§é—D³Û™p—vÇë« ðƒè>°°"‚;á§5Y¥]£.•¨ü\Žjƒ_â3O¼®S§-úŽ4}‡ªC/wË(ôvÃŒÿ_ÖÞ¦·,Í÷ü¥$R!‰’óœ²M»:â–³Zœª±Ð]žFÞêjÈiãhÐ, ÀÍZÎã3ü Aœ­–¨a]ø"D¿%jœ·!O¨®tND§“¶ëœ´DéH!Rr΂’-ÉÎìBwo¼0(FðíyÎóüß„±ít{€k³Ú1oÄ®~­Ú¦Û¤!63ºÍ­Y+Ö2vˆ$Qß<\[i,é^Ÿ¼u–J¦Z€±¡nˆ±ëƒŽwPÔi–ˆÐˆËÏO ~î»C»J ­"Ó}9`„¸]$É«ígÊ^›N–ŸE-Õ*·evìz‹5ˆºyŠ™žU†æ:6ÉØ?­ÍÖVm’6v¬v$M3-o¸3>oÍCM<^à4ÏŠ‰=ƒH5mMÇТÁÙÂóJ@ÛU ×Å#ïØÊé}ºèä‚ïÞU½–~Wêœü I]rÑO¨ýî ?d¼zÙþ(¹Ð¾®èä}7÷½HëýÍ)¾<^tßs'ú]£Ž‹€ù™<ªõ6ïB£}‘X¥ßöÕö•Æs>¬ŒWÓ³½SÒâ!ôP¶a"P-Q:nj!u²dûhœ[ÒͶt$¡«-lÜ5,™RH%dÒQ|¡ý1X÷x™s뱟,Ÿ¼ úv™R þ‹¸umætÒMœ0ý*z]ÈéÅèGróÔ~u ÂŸÔ^Û%®ÃÜ·ÈéBU 'SnZ©)!êÉÀ?×GͧUçóð›Ô~³2îÚr±ðÙ›ŸD½Jä~¯¾ø†êhsy2ŽêN0e3S\û&:¹¦oÌDY9ʦ~óñÌO©ÌüRjrTa&àƒèÉ35¬„e‹, óPlFNÓ¦*µ!µrCj!t숻uÀ Ûm™X˜^‹¬qîŒô·&i·uܮǭúª3,™$'qxg’&v„©Dz ‡mùX§ãÎÙÚ×®c…ABŽË®j4ôjËtÛŠ³dSÓe¥’Ý—· w­r»ÁîE<©ÛF½Þêl*¹ÉN œ¦¥Î!ìy]xÉ:¹n ªÛÁ¯£rÃr¢‹XÒ‚t#ȸÜ÷þF¯®G|„ÏU&I:$…¦CBK7:ºÑÔ¬rm;&$µÉœñ^g%tèÕaeXNŸ=!ˆ‚’Œ†bËõßœÈÁtT`séÊ¿§ßk¬-«AYÞƒ”*+o|ìÄQ(ŸÈJÙÊã̘Ê~YýòÑàÓ@y"6—e´*z}B±±³É•k‹ŽWY²¤º}«rµêUô‚rî> ùÑõϾ˜rô´zX¸Ê«áŸPš ƒ‡“n™£­Òãà4àøÿå ¿-~Çóòêbá(=„åƒ>‹òÞk™W­Pɤ…G²„õñ‚\u™zîéG«ÁÏj'§Øšx~_ìË>RíK$øFhqi²SgB“tÏI.íq®N½{®6ˆ×ÎmÔøTÞ:3SHÜ›:¦¯äùÄmçqžÍqpÅyÝX×\–˽Çé¢ ë™óÒU •wDÉ…3ô›Sx|UIvÉÑî=³Bë?knhýSEü¾<ë7€Á{úDû2ÿ¦Ö·ÿ•œkÖo$ˆ—/‘¼£%¹„æ7/µ–±wwãÍm´MÒ¾Ô¨Õå#iÝwëÍóô×¶îÂ2ö<¹,ëiÒfu'UŽêøç JŽ= Vay,¬¨`GçÞS (£Áˆg+ù ;Ú-òkOÕþii°+^VúpƒQöêÕç{/Å·G÷å®tû§ÙÑ0}ÖÂI+^õÜ¡z1§¾¾I v¯3y˾°¶Ø'x®üMëæíãœ(Àÿî"ªõ ÙVÝ2Ódƒíàøþ Dr‚Àºøw€¤þ“âQ¾ )ô‹“ú?ßZ ²M`öyÄQøtþˆ™×©˜bž¾(â;yç/«r4š¯„' ¢z]wë>4FVê¸l«0QÞËÆ\a “@”k‹NrT[«u½±NÒÞltuÜbk‰DB› ©»;ãU  Äk¨–ivÑvì†ÒÒI‹tAµÓX‚Àž¡…†\ã T^¢B„«'í4Û²J Z›‘î¥oüSï‹’õãn_,û•ž€5\‹hÝl`œ[iˆ Œ÷Êb¬0ËUø[e!Ø!“©‡6$‰¯7@æ4BhÓ ð9èÚÌ)å6CIÜ6]¿â3‘÷¨†i4ÁéOssv(éÕf+¤æôª`Ë¥.Ô«šÚ6QÔ Ò  bè†"‹‚—d޲=Á]pìéGK Õ*T—Ùêƒh„½þêSøYcà]pÿ•Õzw)¹Y%¾`sðó8+åjAŸl#)(áÜ[ <ÃÞçÒŽà™µÕ)’² ¨•#{çäôǼdº—xq"†ÓþÕˉ©ÇQ™†i¶§gœüo4F·cöâoe6àûã|k>Û.Éå#çO]4ÛWs6*¢ Wü>R‡²»Wà"°1¾{ëwîôDͺìNîK“Õ©B 0ªbTMÚX<‰×4h@ÒÑ1ãÀmèè·GlIÒÒ¢}ÆR}s$Úªsû’6-iêKi•oJeþC•ó<Ðìý•6á’§ÜO½äGƼ§y\\FÃPãÖ÷®˜þ<¥ö B¼c>ÿ¯©uõ1Ë´ïkQñÅ·û<7ôÊ%ÞmŒï¦ 5Ú—ÈaçŠ_¶ó³çÝ;i›Ö[÷U°g3„±ítÐѪƒÛ¦æêªÅÐÔƒ+i´"[Äwµk‚3Û;uÕ¡’×Ël†R—̶c@ê¡’z~ÇW2n`á—®¼r4£Säim¢Âáqv<]{ý'£É)1¹Œ˜>.~tãÞàGJLRyU/O«ÊõÍáÇßè :Àº€ê!œR“F¢‘æF)}ŒaÉf^¯Ž´x ƒèSt™4(­¨¹HÜôUKð 9ã³Á3sø'$ì‘Êýôg‡Lþ¹_p”f£usŽéBLcOgÃýRuÒVüähïÅ <×?™È¯ï?.•sÍ„·É$®…^U$‘L£JzOêñBÒ“ŽßP‹iä›YŽb%Ù1Ý6n‡Ø4«Ðš³Ðñ¼o,:ii¨7`¼ÇW“ŒåNuœIrÿ\Ç¿0]A½áŒÍÍ*)­ºZ'nkë£Õnà‰XÇËAQþíãFé÷0ï‹4^­ƒ‚Ôç:sJ@²¦£Ž¶²N¨£€í>¶]GòP¢ kaµ…w(Ì8i’\ššC8ƒ`uGÇXËÊã¦M¤²MSí/)8§ÇCÌ'-âpÌ¿Ô ´ (dšxb­gáڛQÛÀ#)†iwtÝ"ÕqÙüÜ<ö¿TkøBI>—Ò• ì°¿±”A2RtDÅçÝ@â~ótr¦»4R}ܬ/žV=Îû,È4¡`¿è®¶zWßs^íz‘÷»ž-•£_ôâ!ª6ôT½*•‹/0\þ|ôìëÁPGYô‹k¸ã"úÑ`¹q,—Kpœ's'sÏ’¹ÓEÜwÉl¡^ËÞL½Û%ŠÀû’²’F¬JoUÑpQE(ì¡´“Óv$âo‰ïûÕŠŸÀ,qŽsQq3Å¥tLÒ¹è¿`’sUó™DÙÃjëR==ÿ¶Ú$­3kä šÝ~›œ .VùäÊèpŽ$í÷¹Ï½ãÀzq _ñ»»ä@aÞ³Š¿t™ü5|âÝ#]8>' Ñú£ÛLûýç’ßlûªîm{lŸŸñðþßx¯Æïƽ‰½ò2ÏNgo?øÜ^1né윕Ÿç5Ƴ‘¬gÛÄ6MÔ¢×Dv¡U·müÚ8²Æd¹M:&y‚í°!YS‰Ù„™o¤…ӑûú©ûÒûKõa`‘ºÿ¥‘óf†ìt¡Z1ðábíÃA1qP*Ä8ñ|àoÌ‹üC ]Ì8dÅÁÉ-Ãܦ»¦CY\GÎÕ‘cÔžªG%í…ŽH¤¢?V†¥Güƒ¸~HXdÁœ•ý´¼ðàÅ EEýáÑ©‘Çv¤8Üôƒúëç+œŇro’㛕òôòÜÀ—KÛ‡ýk»ÃòsÜ?ˆ£¡üv.íëb’ÜÔ£ +ÃjTYñXÒ: AÖcgT+Š—t®D!ÐÄ-ÝŽ·çô厉ۚÐÄ­Í §ãމa«3N{W mºœÙÛ5ôY½4*4|¡iÕ“‰ƒP%²N;vrmú­Â éUŽpzEVZR[#º#+×äiÖÁv­Tµê«ãïcÙå&sš¦Q-ƒ qFä:–l´±-Ó@‹*¶ªj!U‰ É‘g«ÅVuŒréXÔA Å@TÕÛ„©%m¬§8´!¯ Œ­š¤µi›Y³®štÑŠÔK-Ȳ–F8q(3þ¬:Ø$á— Õ Õr:ºáeo§†_î1óø òqT]ÅR±üD"² Øöîžîñ÷eµç¿d5(5ÈZÁf¯Dó^Þ°Çì#W©SàCT5"ß^ Ôw¬+ Q «?f¯÷Y¿6ÊÜ ×ø&P¥Œ—µà€`Fº©Qp´¯^çžòàhV\_ˆ'²Ý öúÞ† ’J=,«É• &TYd{?³§ó*b’ÕùêÖȪOÙlÜGV)µÙ2§Ç*º=ò— ºKºñ<âc³¸©“v=¦®ÜXNoÎ¥šI‡nkLŽO/è®ôÛµÄ9<ù°eÆ£ÿy0÷Bq›¨56ƒ9ï@í æ…*·qqïߺZE/ñìÛWQŠ7{û‹æ€ãzÂ{ÄdñåuÓÛÛþÏæ°~¯Ý¡Û¾J6}“®sYþÇ<ÿÅ®ø}¿«~î«ÏÓ^UÉ·¯ŠGâ·ÿÚZµ°jîL)MKÛ.ÊA“p=}ì-èXÒm Úd-h›ècí?7UI_D" âV†Ž^H„ñ^ÛªQOaÜ u¸œNa_ªŸ|ɰ*Šë~êëúõ(=rjòÇ'üóéª/ö«•×”J¿|=‘²oݱrHfzrZŸL˜Ùoj‡¥ÞÑ‚š9åDˆ©¯WöÒpÏîÍ©¯¸Ý¯»0ÅÛ¢¬‚¡uåš-õj£¨\ÊE3¥l þÞGJúê4óVî«^é‚[ŠC1¹°rZ¤3ÌݪNLô_œÜ‘|^ì27=U“¯ênÖÈðþá³—Gs®Tðø·bÙd-è¢Ä&yf!®ªäI]- P~ЍÛ5·!ÔÝ<µ²7ÙX7«k:é*Ô6#ÒxÌ8þüënÞÈŽÆÛظ{ç‚Ahr£“V uÕ6´ëšÜ¬BÒÒ1fãÿŽüso%‘G.òx—ÚÎÏËÈÔ6mÜÖÝÖ8•d“p%öl4ñëØµ7“F¡CxÜDu°ÎªÈ[„öÞ,}ÄΗºêØ– ;JI+šÈHUy÷NÑÿ Ù4; ÊAZQU¾/¦ϱèDž ¡ÄšÍ:𑎿L7–l°S+ã>©² ôr…ÖÈ—k!S/¬¬(†¸2Õ-É{þæ”Ü=*NûnšìØ2Òjá3>í[)•ìYˆËËÝþ¢ü¹ï1âE —#øò™t•¼¾ÍgQØÏJ?‹žçA  ¨Ì–·‡j¾°§&ï«JÊ¡°s•åãþ€‘«ÌV†Çb ÿpã¯æèΈç¿ ìT/:ZöCû5êOËÅ™gŸg%uÿCš*œ IDATT¼y^ÉÞl¨QÖ¢SU?êÛàŽrÈ{œ,ôN§Ô—ûö£>»6Q×gÜÐÏL7ÔÜ0Žn\ƒ¶I¤Ž›ç=@¾4¼ùùŸéÔ.ê]¶ú¿˜hkT“Æ÷ø\ôÀx×iã{ëÛ¿· ¿½ÄûVýÉ;ß}÷ýçdûüÀÇß³ƒJ.ø^Äï3Z\Dçã÷I¯ßsÞôÀäò“¼;gt/4†øÂPÖý·XXI‹îå5ßhHÇ-m£H{Ò¦‚H@ì°ÑNV &q†6™<ûÃÕ¿1 úB7¼÷ål[¤C`|…†0ê‰úń¶=yª²QÕI[ž÷•Wv!J?8µ3¸ò•¡`jIü ·ƒ™Å#ÿzbsª–f–™±b¦–tåõ£…#u:WÍ1ÔO^rýëÊôœq{6Ÿ‹ö*õŸ Ù_¢På2âš«yʃ¬ïô`6ÛCÿ}I)Áy(Ša1s¸|í`YÀgéâ$û×ø»Áöɾ¼|~zMΑÁî¤ðhx¨Ü³—/\=é~kkb¥×-w Œð™ýH+¡»–å#±ÈØÀ0 !Æ¡]š%>…F«7én˜ìlÕ«hir‡iÒbB[ˆÚ$’Ó•úÌ]Y5V·ÐLÕ˜Šæ ¡îbjÔØyV! uÜ6tT6K#ʉ@âžCcÙ.\]uI±9)LâÈ@¬AלñX@.¡CHª–”¢HnÜ4í¾D¶—LÊéH"Ùú¦ïþ#ä’è=9ÊÜf¾EØk[VT£Ê°.>Êwl£­³¶^u͈¼N›Øiuh6Äÿ÷œè ¥ø»R=j·¡]õZ8\®ehQoFÅ@<ܱôÙö8÷¸üùÉÿV”þêPÿx2ªñˆojô(×”øÕÖpÆŠcw¨¹åÑ})bê;Òe9Ã!¶GM~†ôîIÐ#% D}ϨϾ±eªô“w˜&†Åüb…Ÿ=–nÌL3AðÕmKY=VçµÿeAÂ?'~ïWÑHä%Älµ§ E%:î%3•ì–ðÓ‹\ÿ™š¦qk¯8âDͺFu;zÔ¶<”Uø×&ii»hšoºã2ÝOöh!›6v4¼ þÒWÖM‚QãkÊ¢q:vÚM’ðlñ'$2çïDR¯![¨UêO=aˆ ÌrEyIàåË7ë÷ƒ¾”‹ÕÓ›Q‰êi©6àîþw§Gê¶š*O‰¥Ñ锸y}¢By¢RúñÌÌœú/3ý×lS½éb.““Ìî?ÊÂïæ/_Ý«ÑÂqÆ0ýª\:˜Å‰ˆ…l0ÏíëÊ °׺œ³<ª‡ Á ‘S?ñLo¿œU“–™½ŒEk'ìÔý8ˆFÅèYm¶äGV‰§JóWCÀòÌÉ,ŽøÀc±Ûzë#†Bó%2d©÷?êù]õ¬N³ÆV`í]ÓÅ$޾;雯DkÐ2¬·±’dMÄë)Î$kĤ«­”&c]XâI:tÖ‘`X,¢¦ŽQ±7@¯»I‡¸=ö2P«µñ´^¯= 6–q¦†—*¯7–ˆv°aÚØQø3W$6WQ‹¸CІâPÓf£¥ J¦£{H°Èhï¹Ê>¡ñPèU´h¦a{a¤¨ˆbKù°á‘Û V2§³\G¿†a6ÆT,t" ˜DjK&¥ñwKÈ¡úimAÜ ¬W½ïq˜F—(ÐH“ɨŠ)ÕóÆ}îýÍ`+ŒDµŽ#È™—7óˆü_Ìùbä‹^ÝÅ9-†epEy*®¼°n_|Ô†óyá»Þ0’JZ·ë"OÁNy–äÒÏIЯ”|w·ˆ~ª—‹;ƒƒbùDìev×ï Ç…ŠÁë¯8x–ù—âÔ¹Ù}Å¢øqì¡òîÕ^ÁÓ‘·Á~¶˜eT¦ž•øÆÛÉRV ìBõÕÔO·iŒ¼˜9ê’Qí•rËufkþ§ÙëáïÌÊÇmâN¯›DÒmƒc쿟ŸG»o÷†øîÚO‡¤C™·ÒXÛŒ;#¡œ;è­ÄmX¿ QxGŸ|5/úÍÅ2_tm8¯TI‹¸]¿ºÛ¿ºÑ\Œ=nK%ÚïlqΈšÿÞÜ·øû,.Z?ÔKoWf†÷ôP„¿#q¸¢z;ßç¼Á.m„’|-gY=Dçï49ó¦—p¾¿»r•±…o¶Z$mÝkëî’N$½ŸäQ,”€ ì™ÒB¿v9@Mâí…äë²îº}ˆÔ·wÌ¢Ô‚†ê—EâÁSÄáæËS¹p,œ få.ó"üîðÚôì3ÿlz·äOòýI÷¬ÿ{ƒï¾òýRE|w$Jó+¥¡ž¼Îéltx §î®7®g\ÏÓ]SÅ Ó¢`uWˆ’gZË9½³ (ÕKºWÒ•Ÿ~¾Yò©ÿ¦ÊÊÃ|~ª:_Ròuõe•‰¹hj^©ÅC}\¬ üh¡W¼²ŠãŸZPŸò€’ܱþ3òÀÜÙUN¤Ë¨îÝ´øЙg¹ú¨>¨å›¸÷¿ÿû[a”üz ÞØuÆ"©"ïQ.üNEœ–¥\¨~üÙÆâgíÊú™±¾4 âV=koŽ4F'AÚ•éj'ýÔ™^ˆuõíÌ: ÓÛ©ô¨«çP5ÜŒo¦I¸É:–X¿÷7$:R!Yõ(L-dõ‰^-ôªÓUäi ÷¤æ£GtTU%ü”GeÄ×…¯° ”¬¹²;º»eΰ£ÕÎÊ'èl§Žƒ_Ô󠨬d}¸Kòl1òÞÓÕð#Wɪ«OÂÝ*%Ñø8]å¾øbÁÏפZ,e‹ïx©l©WuJ ËG „( 9çÜyUÕ“*b;Ü ª~wsq×L•9XˆØfºì ªÏ¾ ž‹h‘èGˆÓ¡˜8ÆöjÓn´2w}y"àNg¢ÉkS<ýSßÑÔcu³ˆ`ãGU†§IlLq2Ã8í3ª½Iv£Þò”Bðt¶…$²ÎšŽ›cj‰N–R:$˜h‰¤Ú´uw쟖Ãß¾5^MÜ8ÊL P»ùÙÉòL2ÝÒÉéÃÚ8@ÔœOßëô6–çâ²ú‚)Ã[&çåË+k•ø‘Ýø¢sÝUVŽù>Ë¢?z§ôƒóAòŽûÞ;÷­ÿ×pHi]]C]Z%µ/÷§Ö%zo|…†Ô¾?ÄßhÎåòçF÷’­~ '\x‹¯xŒÛ66½¶ŽÂTIcwˆwt,te†'(6{²®¼ñM›pfÇ8–\!Œh)ú~Ž@m­×3 !Ç*†6"·Ï|Ñ»iŽ^d»}/ž÷þ˜)^¹Å™íÒLðÁÌÔáÉóŸsãdrïôˆa.ìÓ‰¿ø×¯ƒl1·'™ö³l¾ÆLœfV¢`Žà&|P[xm™f0¨W¦‘·ª•Êæ?ýxERŽÓÑbBTçÒQYŒxÔ?Vd´ bå¹Õÿßm;œÜæˆÒi_ö#÷*£lpÝLd›“p\ÔŽ½âÀNÀý²!·7öTyICm¯ö¶Ýî[9¬Ó$Á'ƒ^ìS®PÓ´”+ƒ_QNŒmqÄ`;*ÙIEçÝt#·1*Yóª¡We–tüØ«Ñ6 ƒ”tè¶êÿÕu!`­Þ;ÿ%øæfϳá¢F'µ¬ÒæOxñ?æÃ4^Ò8Tnº¤Êm®‚d¥íüàŸGÑüÌí?½q£Dèã5%šDc‚ŠS¶9¶ØÌ6šluáêIÓÐQNŒ‰Ñˆ:ëÔÄ€ ÒC_õXÙ¢±‚·ž~ƒšÔŠÍUz±34ê±;;œÞ$!In’‚¡+gÔ7œþ+÷H}þ nÚXÔg†£í Ê¿I^o@† µià džÄJ“´L„AêÌ‘tŒï?B¤ñí½Î¾\Â_·÷ÿüË`(ØøÄËhˆ¿Á®Ý(of|.fɲÇv”G‡÷,72YÕUëœö»‘/¨Š›táÉ‘ð·±|•ÅÏzãêiýï&žÊ¯‚ÕWýÞÔS?ªÉƒ¾=èmÏ–‹ïwÙPŽA‘¾¸AÄèÎ`±{:Š*âþ$|pRfF¯ÿÝ¢ô“JW˜·Ù``'ãݽ‡Óø½ì…zÞ«Ù‘]p"´ªª’¬n묢ÙIÇÄRÓ"nÔgâ6« â°wH¤¡I"uÜ:£¢¼¥žÓUÏwú¬¼®ÓmŸ³¢Çàp“ä¢]ô{7­KÀÀ™‘ÌX]{ñOZ&~qß~ßâ¤ý¾ÃqëýeùáÐÿ~žÒÁ;2ñûÜ÷’Ë7´I®øg´Í»W‰ßaš¾uÂ8‹aº4R¼¥ˆ¹‚¿C]}†ðvA*b/+Èß4Ûq÷V­KcWrQoBêóºp*&«cp:qõ‡¤„jb U›èÍE.øv]äiUàï*n²p3­…D°çУþ§YÄr] ëܬL |Pò°<*=œ¼þ€×§ñíá‹Ážë—«©âõD*{ Ù›#ãΩ÷”Õá!/>øø˜gú»Û³óböÇË?™‘7n~VÚãñÞ6×WŽÌh2-OÔ'ÿX9ÈÇÕþЗF½p×GщãéÈ,›‹‡ˆ?èG…ˆ™ª÷ œûùkµ?©â¶gÖ.?˜\dú4ò‡êÉóPÕGÎ]š¹^/ÈÔŽŽÐe‘úŽÞZ#Ð[Xá©þw²_ ÙW`ìXú,  ‡õ¬ÉÆŽ]mAXg½n1‰;kªYgI7Z$ÍÚNšPo¬‘åg¿7ëu‚‘íåÈd–ÈzìŒs<ùMíÓÍíP#Dâ Ä.-7šufI«ÖXÓ•ÍÙî}ýôù¿|îü©¤]÷ÝÍ ÔÇçDЫPYÒJ¢¼jë:["f£©·œiH5TjP„ˆf]5ÒÞ—¦â6ýØÜi-Umýpme«Í†TjÝ$-`D+]E+O$kxzùýÈ› 4¸FËÐÖ‰ç¿îô „G¸p§ÿ$SK&iEYœë¨…DMXWÄnŸFÂ=»µd„4¼äw}“¸žóýì°È/Tåå_­öa ŽGÑíZìªþZ®Ø‹J}„`@Öז͆Ëäá³Õ§yÈãýgDî¨nE'Ïx>àš•¯«9=žØå¡-•°«˜œYµ=ûÊǸÑü”/{5{ãéâ FG•r…±8%rutû»`^|¸0Qv“Srz‰W¿ÅÇ>²t¶^M3¢;\¹Ë½Þuj¥RpÓsÍBn‹miâAJhGŒNš&î@;¥•tMâM∶ëÄM“t Íq‘10~ðyL½d¼ÐS’–NÖhH_&C6Þ”¾‹[ëÖ¥ò}u)Ò~t™_Óz{ðßÇvÛ—äñ;–Boïí«åÿ€gFûßÄ!ô»ýà¢<íì¦[ïª ôûŸüòíÚËP³½Ø]Zïw’w{éUUºIÞbæ"´~QAÞ=ÿÏÆ[èBÇoY­¦Û‚Ö¦j¥`‘&£žH«Æ–m-j°åêøÕuÔ9UfUê¤m)Òôw–C™fa}èÓÇ×lå°þâKÜmÈé••EG’Oa+‚ŸLn‡2ÁÔ¡£”‰ f¦ÄáÁàÛ?Ü8œÞ[û~s÷õã]9»ÊÁä‘_XˆTKÛx.e•þiŸÒ~WdËþtqõYùÓ œ„U ú<‹o:Uý üÊ‘mÜ ŠÝ;”(v"Ä¢µÃT¡³È»’âéPÊm3¢#”µý½n)Šgmwî§¥×{w¾•bpÄÁ•'&å„χ¾2äÙÐíŸ~ËÔQøÁ¯Ÿ”² È^¼hL÷{×^6æ*vñ_ÜŸÑt‰ åç |­ìÈÆ¥µÈF…Z®ÇNÌqWÓ$iÕi¦´êㄱ?k¦ 45ãŸy¤ºœAÜÔttc¼hB5âŽk ’ gÓ·¤ù )“oÌ{Þ`Ýñ»Æ­÷ZÒ™w'†ÆÛ ‡÷A¶­ ㊊¢õѾµÞ/xïŽ(¾¡´ÞÄ_9Ô_êfozÉ;I1—-«.«Þ=ï¿í(Wt€ÉERã¹enüŽ­yãê«3o Út×µ]‡¶o¬×c4MT œ¶Ýmž¥A86ïHðcMñ¸¥i×A‹¥ûE]­á\]ýV÷Ÿ˜¬)x†õrß*O ¸7RÛN÷Ÿi?…dsvÖÎÏÕvPÊú0äóå—³ÅÄ”,O1=ç‚ý¬§¯‹™ýG‡_ÚÑ„›œ ®õ‹¥J¥è߯¿cútûõë™o÷G3S ÔÉÞ‚ªÉ]{»Ô?9}°?!s¶|¿£guÅãçzn˜ºƒ•$ê´$á3ž{1u{ò!L«»“+‡Žý§¢äÙVGÇY¥0 ­#ª:%¤H\ ï·TVÚ”"•ÂJ/ªËym«,Øë W>~€b€uuÚuåT}c»˜$¤¦´tœ×}ËX¬µ$E¦²¥mÓhnfv=ꮤ‡‰‡š2›´êHT[“cÛ(lVi¼£±Êrh{.Kä„êJµÍª¤Ñê5ÖUämÆËþɾ»Ö_ ¢qî“íŒÍôª§é²%O¤í5!4ÙŸ®¥É´Yu6ruHŒªá<’¸SOÆZzgèPGêX’PWMl ßЬ:–ØnÂtCZ–PkXOwMYW‹Ý±¼!%ѶGˆz´„B'˜Ø¥ÛvÛ›Õ†bé3!DUÔ+KfµÀ.éå`9¨HQ­gR7ð¬ZrÙST÷ìçõ|»zç~tg†ÉÓÛÛ%5/ŠÛýÕá/©ÞÛøÒÊÒ@å–%Q*ÓE ?¿7Â/e¾Ø¿ý<Û¨lòBò²NàØ÷IX©9øò~c>‹\ÑCZlM×äÔïý‰Û[,˜C.Î/L.•˜ñ/§Žr Sƒìƒërpòâdòw‡®Œw·¿W•JHHàG~þ´rcžÞ©Oc!Ôu’ñ7zõIiI6 A·MÜ1PO:ç†ÿ.§î4Ðñ:Ý_kÛFµtâ ºcëÖ¶aÍœ‘…Zg¨g·-“8èè÷Æø[é"]õMóà{”Â]1â7'ÔKRç÷bÑWUÀÝwf—ÿ¨öí½ tü}ãÅ óž6s¹›½kËñ}$¢÷Ú%M KøJÑÛç¡oâÞò³ÍÕ[ÒøÚ6Vac«%sÆÑÊMœd=Y3@£­mÆœÅFÛD-z­Ô.eS…Ù–©E+Øtwt¼Pm²ºcTžV;ˆ*Â!BTg¥ê5>Ý–Z8ÊÞä}å,ä¸cëJÙW#=üʼn:©ê4“^??Lû_xÇ ß ±pŒX¬ ü$”®Õ˜ò#1¨ŸN”^ |½Ü÷¥Š×NŠ£…×Ã×”+³Ó ×Ã¥ŠtžB)Jbj:^HwÍèò’9™¦tK-aÊÇËb¦(Ne”ÝÔðdÁ³; ˆ;¨l~X1pþ±ª~¤úpýš/-ãwDPXë™D®³<ÂIdÁxŸ¾= óY5—`VwjU² ‘ÜŒ°¾Ñ&q¨8 ýÔ‹¦K :’4rÓ“õHØ^[€îvWb€šZ[itRvÔ²dxBã/uÔ&n*;öÚ+‰ÿ–¸¡Kt; ò¨&#UÝìæXYÏd´Q’¬Y?þú¹'òÓÅ‘<9s篶 µPÎÃ]ã n[¼Æ©~§Ó‡Ð&û(‹mhŒ=Y/æEw.WÅæ{ qüvMb’wôÌWÏè—|"Ì% ¢ö»Ë¢KãErÁŠ4y—ÚþÏè ß»nj]5yWöܸà^w KxãÕºškq©¬¿ã{Ñå-ŒqÑÃ$o ;g´¢q[Vo û 1öüÉgýü’ýáø(ñfp±ãϯ -l+¢¥ã&ñyn]Ý6IH7d¢® EU5±4låT¥ù¤ÍJ.Õ‡9À/mVrm¥`ªUp ͶCT5°‡¹³«gFÑOæÒ㩞Ÿ–§¯«¥)ïIú­ß=4Ls}ô”îESßö_ŸÔG3ÅèõƒÓ ñÁÄö·¤øûLøùƒÊÄ{凘âhq²´ÐÿàðÙ«—¾<,÷þ×ëîÚ´(&äÉ\xº»YYðr!cÄüŒªÌþãÔ!'Fý©ÉúI¡¯ ®õüT!pàó‡/³‘RÓA‘V‹·ëwêá¢ò‹ðç¾|Ge×Òš«÷jõþ ®Yy‡{‹HŒw0²Å ù «Ô¶Šù÷U?ònIcÍ R[R%Pž¾ ºÝšýŻΪP‰TÈtu8 ¹Ùh<¢ed×taŽÀ™›ÉŽ Zf ‹ÄÂVËDãñ±ÎXêYk·Â“•jȽrªš+¾ŸÅR'B¢DÒù¬èÍŒ¦32$‰£&)¡»’l}ü¥Ò¾¯d“nK'¤±³¶Ðã4ÓÝÜ,P–z"ë=iºÎ*ˆ›Ê6IÐ[áÙ·0k3¾`›DÕ¦Ú²~=*>Ò¾BäÏuœÃNZËÏÔѵ©Ù~Tk³¢ì– Iš QÒÛ¥ºóÊt¯o·='U[ R9ÒŸÃi&£­N„·ü:£îsÖQDÛ;ÚqâégTä­gÔ_g 1Ir0îLz_•ü<¸ûg}_„EXôû“ƒâ…´B Ë/WòC™ RQ21ª{WÛYQ¹†,mò×ò#JË'«8Êxº­ì_¹ruûÛ÷Y±±ß¦–ïO!'FB~••\mR1½÷p'¯U/>FÑ8=ìߢüRº¯£¢ä“@ÅE‡4ʈ¿ Y;‹+¦Cc¬_kꤕŽ'6ÚuÛÖçH3S!.&_3¹[¯ê“3öG•åiäñ±¼uâ7Wƒ™tâ`e¢’2é¿~í•ìÞ¡yy‚e»ôZ ¿;)&j~⳯Ÿ²{"ýÂNQž8ˆþÕWg*^–¸6í‘ÌГ¥hòÇ#{ø*GQÕ“©t Žôé±*S§ÃÓÈaó¯–÷Žë§ LWFYq,çqåãÏNxtmNŒÈ–ýÞÛ§vù•èÝæÞ7w¼.)··üW“ˆE¸‰Yä®Ü2µÙ^qû/î¼H­ h™.ÐÖ^&Zª7¼FP-¨Þ‚Ò,2%¨*)bg¢Ä÷âæJÒ~°ÑÑÖ·£lÕ~²d=ªÝÖ ׿a[vuæè¶éžÙî§´y¶Å'9±rÐé.&rúqá£<+ª"Îù|”ãôص·ƒƒêNºœå©b²N[Û®‰±‰Ô4)Ü™¡ÿ?ɔÕì®%|;£A7ƨFÇ )ÖÌ™…g‹m›:j·ÉBšíެð¥±OLæhv1JÖÄb¬£üj´8W•·¶‹/WÛ`5 IDAT†òþª×qÛàt#¬âR»$ý&–5Bt_Ø^ò4[Bá{dݰÖí=Y‰*ˤ,‚è/ÿ§˜ÎC×£Üö6wòí]ò€§ËsÏF³OÅtÙ¸QI~%ÄhÅOò˜Pìá¥#Ë®ºé¯õ”´þK½"®¡výð s#jÓφŸ}îüjðªà¥ªN-wK8woN.É{LȪì†Ãü8øT,æE¥Vª–-[§’ªèÏ ÄÜ^õÃ,øæhãä…Èõ£J6²qÙvx“AÍýªx”ÿBÏWÓ’³\»ÿ©3nW…³sš¥í¨Ù3^”áãž [ÆæZ9í]ŠØ¦Ø~êÔèI-— ÷7*]y¯¶žÑ¤ Q‹LnÆRYi£'$ÑÊaÛFIªãÛANÒ0´ µ‰Ó Z9K!ªc@¨'ºÒ\Ž¿f_ψ˜_Ù¨FË}¢?#|A,ñ’A«>„†3ÛBwn åè6uTEaüRJˆjóBÔfQy¯ÛÒ4±°š ©­#v›«³SaÜ;¬à'…9­•À€VhÕÒ[².B@SGa¤–l¿ üžö˜Â™ è¢jáfòÅ69)fO6p‘³FæÄÎ(i)#œ¡‘÷pø»& w®÷¢"`'{e]JwÜíg|Ã=±CI2R J“wò½~µ ôµ1›e¸º¬äíi5þ¡Ün”Ü;E!ÒäÈ™9sÊÇ@R`z0¤§´ô‡s(Øý1t©€å2Ë~£ÊÑâË@–4õþ9-å¿þ–G8JQV÷';¦©âÌO>ݧ9["…0#‡?E¹øñ~޽S]xȈLѵҪe»¤æáé%¢G=‚?åú½Ž–‰i”Q.§y®ÔÁîÑBm\&çïy¯ rÌØžÑ£Vx0KFóî.8UR}UèÆÆ¯ôÑú u"ÙQõ¢%£4!×@:1¤F5®±‡D*<£=7ív~H¼ìYð[0Ú }UñáÑcæè¶–÷ ¾Kù˜ŠL Û5Ù ý°ÆÝM±½)*pA5Ý÷*´/ô\—DH…=ÀgDãÍ@Ç)T%ên´*ßh€˜ „‘¢*-Ⱥ”›\Bè‡!SÌÿï ²NK0@o"R¡OyЬ¡6å9§ò\Š:À.⣅Œ±[Ç %Dh ÏÔ[Õ0‡ˆ¿‹w©âÓðséx=€} ·T±¼yõe¤¹¯ šŒ(DŠwè4@Áë™›VmkrTS•z,a@•éc;±Tú(7*û§Hež(µO±–!UP«oàý>¦øxáS(¹­Ñ¬¤À¢$sš%eíZj{ÎÒKÙ ø=Ò™ãýʹùÌÐ80íŸí“y¤%Ý?Ç£¡úã{Ã$)eãÓ¤ôcÊÆ´¼„¿'Ñðç“é A #Õuh¿Âƒ7øð ‰úTkÔ@ðih6§ùH€T@Ó ZBÎÚ.~I<ÒæÁ&ðΔ@n\É  Ш¸6j„¼âP¯“ Ç\¿yͪu‡U­ßdsýPù×àî{CÍûü ­›oÕüÏØ õû1%~ëüë{÷p ÷þà¾HÂà:¥|®i½;ì¿ÛmqWPËnm—ËOq‹ú¾ì}}·KëSÍkKø@¼Ó|×â4>_ _äÖôD+êk°ëbþkvö±&Y÷»68 h•Ò´<‹‰BqüôìE:úVꂘ$\ÍF‰ÆË~ÍVºg¨}-ñŒ"&^éøi€7±ÈüîË㣗3`rˆ|Mr‚#¼]ÕñX9_ž¸“L¨Söì|4òt_§y_Д(€®@¥,£ôµ’ûÇ"°E…ÏVkòÌÕ#ÎéÊ©&CE[ï™#›ñ"ÁÊÊnJ·Qñç²Á÷¶>Qš-TFfÑúäæ ”`ϤK¢Ì #Å‘ê¤/ÙÉNú=6NÕÆFÍ%Ø€‹Ôëd!Óð7áÛ¢®à·†` ´ lòiðAKh„’¡©Sª)¯¾†úô—¡!ÐBÔšœµÄ¥wA\ˆ .ˆÓet‹cZ_©ðu„ó+Þ“+–Û )·6l¼]¶EŠg_öjGÀ°¿^š£³[•ÝßæÑÄôpcàYßâí¨[8­}¯PHÙìÜÎp<8=Ucà¿-ã-«q>˜”3òÖ3´à†?™‰”ÍAgª“Sõ@»G)È¢ÏJc¦[|žÎ¼«²7_ˆqŽBÙ:»¯S,‡+ãû@VCRùÔ:#éòr¤—˜>\§HO 3:™­YKî‘FúP¼Ÿ©¿gLJ Ç]R*¡(×| ¹Ñ×z¤­ v S© ªð(ºUR¹¨p¿åmo‚Å hìô¢_¯+ÉTÙ±ŽHŠòó.ѾbHKÂÂ!áAÛcPO±éFM®b»Í£®Ò ] Y( D]Ám ”›¨’j ¶òœ3úúH8‹ÝŽrí*ùkƒ‘XðRÊ#Gl8\“PS}àùŽd}¾ B·ºjÍë D¢°Ñ~“û--~6‚6$„?Õ½lÂ…@á-c4¬SNÛ½p:¤òHŸ×Ðt÷ ?#<Ø=H"Áë:ÚÖBûkTª¾‚ÔX5©¥¡6A”`é陆ûŠ Oè+¡ú`Ž¡÷Ò×§žå„àQxäRªÎõdÞ@î¾Ùs _‡l)i˜.SpW–¨J?Y;sí‚ûÄp£³ÐÑÕm…jF+Äx40H#%2ýÄ?Lñ&ûðÈT‡Ô ±”ià¹2B,šíÏ“r|€\«ó"9Éy4VÃŽŠê Rs™õ"“#÷‚66à‚Ö‚XÔû²N€‚ÏŠ€-ȶĦJ°‹±C9¶.dåh…øÌ”‹Â΅̽̓+;ôTÂM\‡tp"]M³+{šxçÿ½¦Å¿kCó[2¦èŽÝ¡uß½*q‹xèüЪhÞ_Ìü¿´nGÝ{jÝüáüŒë·¤›¡L×"QƒÖ}Ãz.غMcüÐ: n¾Øô½ËŒ)ö%oî¶ yÍ qÕ{±™ùUÄ÷»ÈÜ-N“§?+(E÷ÿ±£b“íõå²›@ÒÙ¿ˆpâÃø!WÊ#JšïËå%” iY©šj¯Ä<%'¿Þ± YšȯŠ1HÛ5çy©€,ÕãùÁÙÃpL™ñãm¡W˜ÐßiLbáH’Šø}&çt– ;—æ[©æÒ‡@–EnÒò }sFŽÇ²°o’÷phX3g#×Lˆ~ïc«˜>Xprm/šÔÊ+K¨¦£ˆ€L¬°¡\ÓT>Ì#”Ô­T nñ|w¬ñ³qwñÇ•£“SŒ#bï 2—Í—m€.gXFh¢e ð­[ÎIù'µEBÀºvEFäâûÏÀ:kHßHÊO {.ÑèA˜©ÍàDlкQ uÊI[À#àí6)"*°E-Ê\7X¾é2E`Ù„ëA؆ƒjhí6´ân¤…rºÅ7´€¾@hòÅAå“6LúË%(<•`ñ™®oF»ÚÛˆ_J¸Ä2a1Õ`6:›] ¯±>»Ó‰]JþÆNQ«ïu¥º¶ALíµP؆¨+ø hñN[Àh!Ü-Ž~§ Êâu€”â¥ÍaÕ2Ú;¬Í\@§r[ÁoqŸògM°ÍK£é (q_õ¦‰@²TPÔÛ<¢€#Tõ6wJWœ(uܺ#êZQ@L¾x‰<"[µº!ñ5\ÛS§¬:ËHƪ0A l[! j¥VB#ûõIrÑŸÕ€.¨.{öº¢t‡5X¨æ§Ç¤TàŸÙø™ØžÕš‘ƒrk™žfýÃjÍ/ç&zæ}Œè^©äüO¢mJJ/ôéWÖÈÝË”$Ùè¸gPwz¾4 ™B+5PÊ‚&b :db€ùŠûýëÀ‹àÇ…¿5Mâ~ëRR\ïÂWá4™5h^kG¸8}^ÐõÐÆ60²ã:Û ŽöT{§Í­ym€\O^jÝ º»NZï<ŧç[¡wÆã]˜ýž;Ä”‹~‡^‰{ï~KøÍÛCîtYÔo^AnÁ>5¿Í;[ñ8캪W\¯°îÜ`ä]uÓµÞi^BF—éíÁÔ3IÃé†è´/³¾)¶›Â–W»¥e’{j?e{mB3ìƒÎâìæ@Ïä‡o`Uº0™u^Ål/ŸƒA{Ä‹k|ø1OM½LÕÄbó‡8²â¡Z?×°w¬™õBUÀ>‘t4«'3°hË•°cÊF³,¥˜Y$&½>I¹¡tÿ„˜KÔ5†æp&]šÕËæ“£¹d’Eç¡æÜ¬Œ‚¥ ù‹™?XC—–“sûß'Y‰LÊP 5S®J2ËÎIIŽÏ÷éYÍœ]' ìd85 Ý#ª‹Óõ×Z|'ÿ9]Nÿ03(ø~†Ïd2ÇŒIŒZt•†]mi5ãTñÔœì¦àIH€§ ×'PUfñ²ix @Ewkæ„„¨†Ô mjŒjë©G O\«¶&²¦ÜàUD”ÞFF?ÄÁ€He;¬B\:‚!ª‚íj¡6Ñ!D®:&ŠèaáûS„Ÿ.‚$Þ?´8ƒšp¡ÑlÔ=IáPT/j©-2êâuÏY³h +´û%tÕaàp Ûœ)6EJõš"h ¿Ù­7x°É 8\Ç‚5EP¯I…uê¤ìI&€Ð¤^òXJÇ%Ä‹*5l@Hñü‹°¾%msÙhDQ“ûM6­Âç @ à.79Úx¶ÝcMÏ¥26´µ­ÝÎû6Í£3­ÑÑ\;L‚* ÈHIB¡óÁ‡aÙ©¤§=©5¶Š1v-ðGðæ't˜ƒ–vÎ&$g –íäØ-û±N‹¨$ìz–Ðèå³ï4&GÅÙÇú3õ`O— =_qö¿[˜±¬“£—«ÅJ!EÎHá‰Jk8Uë=e_«(ú`Џ›¾AŸùðü¶`‰)É|!2lzhM1Móõ›è49‚¦è(ñôÁ‚i—F>8SaÐô‚ë©%ÞÉ#[W®c… à"¤ïrR]‘ õ{9Ú–¸=¯GŽ6¯Å:4ï—}Þ\ý'H¸éÿgë”ZW¡—¨ÙXÖä÷£fWgÿÖŸÀ¬Þ%iß|HýZL¹oS‹ûïÀ+þGîhþMÕ“3ý²ƒš_[ªbZ܃Æe:®‚lÂÆŸ·„‘"?1òÞnväY¤F2O+Ì"­‘­KcÀ‰ÂÐË2—©‘À8uÏá ŒÙÝÕÙÂäï(ϳyEúèÁïåp¦‡|w"Q(Éã’çOòcÏUñ´r “ü»Á8÷^ôéñ‘´O¸>Šš)s÷•…üFQ\”¿i¡ ¢…ÃA~¢–F´0ÛªÀ¨ŽÎÉø$Éí¼ –-Îéô|½h¨ärÈ÷ O&™§ç«vÎçß"£áÙaÙLi1ô¥ ëoþ‹.Î&kÇ(.8¥Ìý¨öÛŒ<ÔXž sXó=(Fæ²0J®žhU$º9ÖÍ7˜ŠÊ)\“GV7‚ˆ!*µ½¥ÖÒî1ÉbF™iyU©¸Zë1p4xâp‰—¨ÞgˆÜ¿êÄ‚SÝxL6ž¹‘îJ0½ ƒ)¯ç B—<%Þ: · ºU“G‹» ˆ-Á>v¢\Ë*çžzC4 s„+ŽìtBFx±ÂâvÖÅ€÷5bÄýOÓtå»ùý%dñè™-·)XÌ}@6eàp´86…ßâ~‹£p[Â'b}ÓÐ ·%ļ—s žê»«)IrXóxbE–êØäÛÓ¾š¸«´c¡ù·D`ËÐAGö2æwÀ: æRÑY…ZÛþšÉ6´‚Ön@ Ô1¿0>Òš±_ºŠz ;x$ç =UÀºÃQÒ\:°\;wñjÏZˆ¬j:Àë7az¦æ ŽzÇ#{÷ˆÄä»ÄMÞ“2©CŽªòõŠIXgÑ£zœ“Ó}ôýJ| )²˜.¼Æž9Ê>^|@g4µ©]ΩÑÕ¯‘-€8’i¾Ýd2Ö-”ŠcÍ ¨è.ã‹à<4„ï\Gü6/n«hÂoñ‹ô~*ÐðÐ`P2h@má_ª}¶Jh·¯ó¦âR–©Ä |÷y˜/ްwZî ´hþ‰¶=•®},ú#ÆäÖŸ@®þ—wCðÃÿ>õÑ ©yƒ0¸† ‰lvëÒ™|ýѺ¡¸úÁ|_©œ“µn\¸Kyv›á¿M°¦˜º£ý-0L3L„ØGØÖBÁÝWÑ·g:Ïåo^ã 8€ ŽžyŒ‘¾f "1ñ!—1ÉôäoôÛ=+O½ó¢5·hþxæÉÿU¢ E:·è‘à,¼>X¬’S¤ÆsÕ³×Õ…B8s2=”*‡FDAãYñ„öLðE ¿Â–áe [SbÞ W¾ŽÎuYWÿlv­\µg¨*üöØL)IJ¤\Ö£Ô²“ÀÂù¼þQyÍ;dîg“ÔØŠ#gl‹RéåI¶3’0fºÙœ.Ï Tx=36ÇŪÛ¦•Ñ=ÙCùáS’~bÍd%½CËx9 ¦älŸGñ©gFô, Ùw´(þ™ž¶¼¡jj×–Øâ /±ä^¬ @ûŒA¦YåS›ºt·§Á€ú/A6Ùô¨á78b»)Paº+µè€ëîv¬˜îŸ×¶i¯ $r5©·xõ¦Xß„¯PÙd> 5ífê3¸p{Øa›â9„îðG©p¥Šg+|˜qáÁÇ´VÉ€‚Zž»…U[-PxkûMo`Š 5›gHN¨èYÑ0VôÀ6GÃ/?G¤v@E‡À÷-Ášm¾MEè€m ³É?Û¾#¸Ýä, ÿsÑÓ 4:Ñ‘ýJ˜{—­ D HGH%«Sái[›|{“GÀ.R‚çmîWD 4yŠ× "­¹‹P:Âr¼5$¢Ž°®k)aïÀq1W¬çÏIG“Ýí©žßvÑ–âÛI—!2+nºÆ¢˧Öna¹R¡ÄpMê( ‚Q­VXjrg–ä•Áò~n«&Fû‡ ø2uôï?&*š¤õYfÎgÿxFÿ_Ø_ž) Jóucÿ‘k€XLYx6¶XÁ†&²  &OþɰqévÁÕ¬òðýÔX-ùËl€C]íKvTÕ•²âaÀv êïPÞQŒHÜ×äïËiƒ;dºÓ½}exîܲ2´î×)]ýãúµïÔo¾“K½£¦¯’ 7§º´w‰Tïïj¦xe ~Û7Xo-ÎÄòŸ7]¥ÄPð$õ"Â÷~â ]“o£Þ¼r¾ƒzqäiýéo¨¶MZ˜X“Ü]:SÃÈ¢dÿXÍ$µÁw8(ïI¨£¶jÆGäoASª•ZKgh°Ub¯’‘…1¤õîÛ VDNBëo< dT$¦Ð•(C ßÑi×´k/‡È†vé[+ÅoFðÊ?!CýÕ™­ FkVD ( IDATAŸ%Ù$Ói±RøC:‹¥EKå3úá÷Hß -0˶&#V|MFYñT=?µòÁ0Ù/"1N@fÏñ¶øúx,ÈÛh˜Ø³Z¼@óS‡RPÌÓ°ƒ§Õ¶#µ(O@,ÐÇn*4Riíd–+ |ÁÑ®úJ:ùäèƒ.y¬¸m -ÑHX§ Û-áÇ0¿æ®’ª@ôXº‡èËh”A¯³åíou™#Ü“”§FÖù._=³­¥òÊ,YÍñ¡Ëç öØ`î)…V¨» †Í®£°ž¾‘– ­† qDtø;û_‹GßtcÔd. !CÈ(^¼H­G@- 0(™|SëQé Âc 2*Yëâ/¿ú à:œ5à·°Ñ‚ QmC} ¢3B8¦q=1D°¶å2*$…nI\Y‡ˆbއäKº¯ª2QŒFØÏõ4Uºîh©9À t""«FbžÀŠI5Y8Ú+àäÀ0Ò¿FÕK]Aômä ‰ÔƒPŸ¡<útíÌÂñ²ÞƒšCª>ÃßéøÏðÚ¢îÝ.ÈÁ‰É 8YF2/S¸²<Ú³rŬ¹GÛs&)–éûôÉÜ£•³W] ·Š:BÖ†O§YÂ×áØZB½`§„wgóâkD >jAãâà8űÅëÓ!@÷ öhÀ¿ÈmãïhÞæåÅ¥uÛ˜vÓм:ß<ì·n×hú­»¶°{B‰üpÞD7Ôºi—ûïÿf,¸ÿ'Â3ømejëžMp']ä2Á¢yÃ3Q¿Y›çßù‚‚ûìÁÍM㾃¶¦¸zδïsûöGã—·ÅËà*аqq±àþTа¦ -<†(¾lBƒ+â™Û¼GYQyôå¯Q«SÁÐm F–¦ò¤’r ‘‹7˸¯¼zƒI*ÐDÕFª¡¦5°Í¦Ñ®'±°´XÖ.Q1ê À"¢†D×$8ë‹i^Н?FðÎ;ú±ò-YÑU „¥( ³ *A=’i@u7œ®NzìH«‡/2ë«ñRÅÖI™T2oý ÙN¤ÒÜQ²ïEQìí?ÍÞôf“ÁЕòƒ 9ôþ2[ù;‰u±J1 s ÉùÀš¬ëÌzºl=ù륅ý•ÓÁFa¼lEÆ¥åŠM6?oOðdDи5U:±‹ðmù×­º»K@#¬ª¨ú ›@l ÜY>'–.P´P^æ¤ï¦Eà_èŒUMuœ¯½<:áÏpd)ú}`+ 9+¾ÁðlŸx+ƒŠ7ìÇòãù;ûè®,"¦ˆà ý‹#âØž³¤WL@€A¥~Q²‹§O9¯“ìñ'Æ @Ì 8J Ë"sôx˜Ñ‰ž5sѶ9:4ÇKÕâ’ÆÌBúmu4 9ìæK´0Q'{OŽ˜ý„œÑ3CÑ‘2–ù9š˜ùù³Ë©þ>NÞ&öjµ¸$ñ=гÀ¾·@*Ù,’pûØÝRÈ©BI£ó˜¯¡>HùóHyg ž} Ìö2$OR˜ßÀ…*Öb¾á;ˆš¢Ô©˜aÊ‚ÍÈUO]¢ %ª] Z`ºµ´)ÿ–F¦ƒc#·MÕ¡ ì-eÔuÆÙàø°RÆÂìÒü·#jп4–(‰¡wºBmŸ‚ ;Øè²Š„B‘ »!hC|© 54ksBP§L’Ôs|ø|:S ¥Ü"¨£´¤ÛkCÛ °‘ Pl·ß“ªæ:xFÛt«ˆ€ºu_Eˆu¬N@rwÁt_dU냧ú»p8W+Â&^c!"hòÏ gIÓÈFõløÿfÊÅ£Lg •}bò–AÌ…勵;0hᓬD·Š9¡ãRåË㥣ŸN–I> ‚²ŒÒꓟÕ0çà°çHQ«Ÿ¦ºº¹ük,EdV¡(ô^ôz©^§"|ªlIÿs!c øM jmƒ¾èD m`‹Oó´Q¿H[€BЈVˆö…ü„5Ä…J¼~5ˆšïâí:-mLó}hó¼s-nÏ:íwb÷à²`º<‚ë҆ʛço~“sæw¤ë¤·ßz—;÷î,Þ¼Ñeù¿q7Üå:$®ÇÉŠ»M÷¶Fû¸ýißæ;­×Ó2:7èøk­m1ýv‚›\‚óëš7òÓë@§Éßå—pÖ5êé¶jx N9 ?V\7úã)Êz¯„Ûä5:ëê‹—GèmÕRÂ-Ð"°p€ÔA!ò*úÜzŠ -0P³"ÛCü5³iá fÞ˜²d úUø}…Ïþ†¸†;|ÅVº¨ÿ;¨FÝGZîõkE#T#ª1ÎÂxV8§aö¾7Æ 8‡…s¤#û¤+MÇ'І•O4F~Ôƒ¥Þ'f!#gг('ó/Xò^QÊ¥Ù×zöi± å3=°p`㥗eä_ã™Óþ2ùéÌ¢SHõÙì‰ •«TOŠtI?™'À¾Ú/¸Ú”iA˜nø:¤9qÃrK-žØ«@¢â¢gqiƒÄPJvÖtåÛëpw ÇÒ8d €èlq@°G% ú·U×Ûâ6`kl¤iô…Üç+aµù—`»Zö4 âŠédGÿ]JNSTèëÝ_ϼ9:è¿Ó}Lð*Z£ã@Bø †ÍÀ3Íu\«·kx…!Å>8ÚóÉ°àžø­,æ;iZu;ôñ$µjŽQ=1ؤHN–In&çX*•Mœeéy†æ©*Z°çóƒÎ,8Í2UdH½JæVœ ECÔ¡)œý’»ÿM€!; Á“Là1¨†Dè‚×SošQk«JÑé‹ xu… Ê%€¤ <è4EеD#[Ã@‘8Z Êc€¦@“)`·Ož(ÆÌFj:¬íÔ&JšÊû©Bï›OÞ>IW‡xù8= Ür@ Z¸@}á¡@(¶èËÂv€VDDS¹lôFEj T¥óU½>çÒŸcáa×2X䀽âÚ‰*k¡»†º3g'’Ê"‚ÜxÌåç` N(°RGÚñÖ‰TN@~¹ÅT‡×[O¥ÝžJéCI½ÈQˆ9,·®àk¡- ÖÐxÙèN­yR„tšØ@èv$OL¤ 4rWª_zPn±ž©{}WV9¡<ÒМ}S©Ô^È0þì•BÅ| ‹3ÉÀ(ç)<¦bäc:‡Aé85*Ø+¢¬È©®ú'Z/× s6ÁÁ,¾MužYÃòY¢ ;*‘í%Z¯óèÌ{y E(¬ÂÍÀlHH 2| (щá·/îdp¿¿ Á(  p8ùh2P|zê—- h 4xÐîú­»Elü²ažß>k¶/‡ò¡}ÛŸ\¿ ÷|7Á7Ík­‹“þý¦ãkÊ×à2Á·.õÐÿIÑ¿7Ü.Sû‘ký`Fp‡»~÷!/‹)‚[õÍÖÓé]oâŽÐèkÜ|ái¼ëõ„íë^’»„Ï;z÷߯Ěð› [ŒØì‘6ܘ×áÕº-[¢Ú€VœPt€Ý6Ü-5÷…­±O¤Yû_?Mba"úÍ*rŠ]صAÊ•åõÖmóy°lâÑöÁ^Ÿ‰øO+ØQKX/°×·žd í‘-YÃ,›xõ_ò܌"Kì¹£ÙÞÉï`åUØ!fa®¢XüÕØ¤([ùùš‘'†\™d ?N ¥• ›±Þfô„ έJšS5óUV´)s³ywž)j¤ö"¬‚m°î›‚9à¿ÂsuRXk"U^oËM”P(OÖU«(tÖð%•p¡ÕÕ…'Ä´gò÷ÇlÍ:³Çs8±$SpÖBä¤$JE°iÍW`1gMàX Øh€Å@:‰æõUIìÕûa¢J@(# Þ¨W{ðÓÚ6Û •”6˜ßªQ„NV­Rt`Ñ­´S!ª ŠY©m˜˜£XÄËÇ!µjî¢tò Õn‚žå0B4¥»¶|¹„áKJ–^ïaðÂF¢É1ìµC`Æ®ŽòòŸ×¢⾡Í"Å\§¤òhh”¡XÅ8ý µB²r±ð# @ÍÕy{üÞœœ-YÍOf, ñe‘`/"Òr×ÈñcH%íÔC" yÐðЇOáƒ××."ó‚@ÑimÔc^Ÿq7¤ß¨@,: -Ž-(`毦ƒ[- -|Ôàˆ u¹šüîìò§^ó*yór†¨›‘C_¹öÀ#£èö€Ï …¢äiª˜Ý °ÀõÔfˆ¸J#SI2A>[+îñò£È<ìÍ&ÒYr¿+±ôœ,#/ÂÄŒ:ªüGCäûoçõ8`öƒÅ?(d•“™dRLZFÅN r¥0!•Æèɭ켨³ÓFÖ!Òdd­.âûåÑ8™YÙOÜBV.œSd•Ù¡Ê¡Æ$FeÌH6Á ÈÞ‡ ²²¸Àë=øÂ‹RA¾ä‘TÂ8ƒÕÀËØ…#:Â¥üÜÁçxsWEhFPià ÂZ“Sü¾Ý„v$™ iÆÈ!J,Ê;•î L+äãBû#úÑli,tOžòB¸ b}Åd,-ë="ÄxØ•mxª°ÛàA›Ãèø+°#jšÐŠÇ© kbð˜¡/àpú_as=xkœîü^:×ÙdŒ—JÒy.-í?äþ¶Ï´Àëwê[< @ ÑÙ’ ‹„•˜kµ³í^ ÛÁsH¹Æ¡ùFß8iÂÜâH UX¥a'F”&Áíõ:•ŽÓíÅä%Ì´B žÙºž @ÏNñ噋W4É™50åÉ2¨ÅPÃie=W•È•ëæ'Èk ¢‡j6äÕäƒOòaEŸ?òóeؽSš.|‡Òï{Ô8kŒM×~TÉײs3Ú{«üp0)[ke&‰íÇ•ÑBÏ æXj2Úÿ/僳Ãý£tE¢tfý‹6y@01³ÿ i± +²N£üP± “}¶ h††ðÛMtnAvT7ØâHQW¨vÖD° P^o]Aö¼Þ ñ»!îغˆ=¦Ã&ó¯ÆÑµ™Æ®OõÇR¯¯´ø×]oºßÙ~Msý®ËnÙüYp7¹„»ÚœÖ kp>åE®÷Óý¾ôïÜ Áý6é?•žt}Žß—ãÑiÝ ëý{Eš÷H§.èæýÛ+[£üþü2Y…_‡ËÈ5﷼攙ú*ªü–@ ø1Gî6jÅÏ*øxŒÐVÀêÀà”ªE üÙTÎü9‡BU- Ï¡ÄPáu›[ÀÇA,Ab,JBâÔv•ØØðÒF͵x¢^ophQ/kóg1T Þ’˜„ «.HG¬LEº´ƒ3÷3ÃMFî$ÁòÄÃè«dÈ ?Z(R˘$Fne–kÌü´€Ñùhi 3V¡¸zþ‡¢1¡¥¹ñdÆ>É"ŸYï`¦BJ˜/¤0ì•<9·ËoõAñø |<>·JØŸ}kž?˜?)¨ßîWÔoÓÕQBÒšsZ³lWcGýyWŸ¹0FÁÀ±$ª¬$ìÃÚ‡ñ‚çžn¡êÔÅœ(Ös @E² Ÿ .Á«ÀZB‚)Å" Ö:ˆ΀ºfúGMƒè_Ft=üpIï@œY]™ó <5櫳…ù™‰žé°,—Ô¹oÕˆºÏ!@ôä,¯²AÔ‰áRáX°¦Ä—ô3‘BXÍSà#öón ¶0Ø¡– š¯( “ô1H§Ð™$?&ì¾þö`½wð"íöþ=p· ½¾`JvŽ6 5Ûnô:UŸ~µy]s¼ga—‚8*еK1Ø„¢@Š`› «-°ÕÍôŽoM¯GeÝ‹]M¥° ¾+cý„Úëôõ®eX–·= ¶˜Ãçc‘5êôy½ÁÀ“ kgd­òUƒÄAõå,¬$¿"†[]LÍ“Z=MEb'õãÏ ¨4s—rFÞ³èÇC…EbÏöp<0NTvæ2‘df¨Ê ¥%Rž$Æñ“¤˜ô~¾pn–K«oG¥ùóysÒ7²Î&yfé!Ѥ¶½®ÈsÅÒ¹õ²òq¼’A[Hâa Ï guåEMáozuÔüM æP¡Ôÿ?oï÷ÚH–ç ~Ò’Â![vÖ9m§Ú5ÓY}¥­&MOå49?š‚b“M¸+0 zØ¿]Їù bãoq^ û"¨ƒ¹—„„‚¢kf’!kzÓ=Ò­Êšˆ.—2]ç”mÙÇ …$ç}ɖΪž»=ë'aÂ?$…¾çœÏO)3@_M[â<@ñL°t¹ËôàÆ3y< ÈbZ®bý³Íš®Y+y¹n\ œÎ\P3Hû´Ø†ÏÎF·q•p¾^ÛÉð†JMÜD_㆞ŸàM®ÂŸuÿI1¥7«®gF¶¸NKxW|³½³¿¤uñƼ¹”Íàw­kØ‘?»À^?7\[̯x/î‰I#éeç_ö–oN—àâðà‚gÈ`g¡ðb"ãý#R‹|œ¤ló®rpOÈZ „ be2bˆ|žú¢¨L†HÀ»ÙAÄà/>Ư·ÂölÅ#;–Ñ–°=Ž&6} .ì˜ï4Ðj>ÑŠ3 MX‚ZŽFغÇœû–½~¢{ZQ8Çç0‘ô‡µO 5u¤±OÌÂF~N%zœÎV—hÔú r…EŠùþxDG·z…s HR\Z:ÇgýüQÞ2ì¿6”!ô°ºB ´H‹‹…t¾Dߥ…RyY¢8§L$/“Òp±xÒÿüè0ÛQ®îžDX>N*Ÿó k c3a@  ] ÷Ï )–,±±\ˆŠÒ=É4ÐÀ°¡žu ÷( UF±”Êa Ô=u 1y ¤2Å>8éEËXî[è¢Ü<ºßƒ*?ÿêÔÙ‡†Å“N-òñøÈ{ÈêQ›B}!?Ï=Qg`-yĤˆ;ðå1/Ù/!»qm~Hþw¥ïAŽðÐè0ƒ†O —@òÜÆ âXîKý¯ÿJà²Yï)gpª[ÐÛ ØR±ºâ;Mî6dä³*åœ(¡4µgS h%Б¬òO0ïº :ƒ¶œ!D,"ð6Øf="j§Îà£Úá-ÖiDêhÅNk’pã<³ööÆØPêÙÕöm|ž†/@À4mQ0ÐI£ýB:zŽ]#ÅSÐ=¯” K"o‚œnDg`·Ï(©h@Žòú¿Ÿ 1%#U<Óî»cŠèXãŒôhÉè¿ÒƒCŒL=€f0oýj®87<1ƹ47þ:µr…îø@§‡ßÇZ[HMÐ5“Á7¾0QWp-¸ îØâm-êÛYòdô£™iÓ9¨ƒwŸxžg4[Þ´1þ² Á¤”MLì·M´Ïr¶ƒ‹ÄSÿb¾]—]žZþŒ6ÇËL¸|N\Ð7¨.wÞÂ:}à\gzùr×§î„*¿׋KRäj.Ñ0Ò‚¾h÷-·Ù抙lÑzËbSŸR7,?3/nýêÉÀõÞ~”¹øæî•êi>K™Ô/VÔiž¢  yyd/è&Ô_Jªb¸{ýºÓñ 4ÒgtWBD@´•½|³Š"ë”e•¡º€ÇÛóU„Ýp6=ŸoB - ¾ ˜>J*$DU ;æm‰TJa<ŒöŸKýž&B!9ÕKËáÒÓpmEž$8YWÅ|·¬;Kåâ-"ÇgÅÒóáp+™äÆ:¹¥ÏŒöBNo.ä˜äñýŒ>16~z (éÇ:OÆÇIiîá’VÅ…äà<=/©]N@ÁzzÜ?Ò›Þ©ì}ÙÃiõ ©ñý™^Èáä#ÈžÀxþ|Ë·yÉæø…óÞ‘C!ľâ£-ôSh`¯ ÒàÔÇG”ïчUÊ%‚4” ŠL”̬i@K¸u·ˆ½ÙZ³ÑK‰wói©tÆŸÿýÿ\•ìË矩ز†I`›Ö?3*±!4 Áí3öþü©kEªnK/lÇüäPêz¨Ûáw Ž µóÒSŠ pOÒg!"«†ç(W {?z^{¤°§DÝw4€í0ÊqèúLkîhˆM…V“Û†BÒ„ê ®t2·&w=.;¯6ë¿j!B“׉(€#)…MÑ å¦ïÔ=цœí³: ©8¼°ªà¾¤]R{<Գ̰ó‘v6;r¸«‡ŠÚåûK%J«Z=Œ+Ór`h»ËPCs9—ª|y;ŠRvj?†v JÉFñ9¬ªÂè›?/–^9 ;zúýs¬kï +ó9¼6“w=?¾»bÑÓdd¬™ýÄ,¤ÆóA’V¯O—ǃ“ýü 2G†HÚéó(Q›÷t¤D½Ž0Y°¶b¸MႵ¶À<~æO|᪉ù ˜Ñõ»ÛÓªÇiÂež]s2÷å´t!h@ZÙS#”w9.¦óGdÉÙãÁ IDAT³´w½êy&9TÜè^Î*›oÆW\ãõ›×þÆ@æ×5.‰€·w<üôE¿å_œ9pùc×3°O0zî^æX\å®ý+ŠàÀ¿¤n ¤ fN*“å^^Üò®Ø³]ŸGEo&ÜJÁ¥ÙPç®Ç[*둮ž?)"7J 𠨰™Ï„Ì]< ÁA0‰†Ã²VjÅ@=¨ÒÃF%­m¸[Mn{¡Ì¨­{H,D P°ÚĦ•]üç¿À½³ÝdA–ŸÛæü—_UQBy´?“ØÃèž YqÁ.üíŠ"ró¹ƒÂ`eŒüñIîõáâøè|ðÕú`X¸•˜§gKç¥ïnÅébu\H–îÐ^r’Žpܯößé|?Or °¼žâÉ @£ã¥Hçq±—_Šõ!ŽÐÝ“äå¾]ÖÎÚx&{ zŠe._+;ž”–¿<Ã|/T£Ý¥‘øCêc ”LñÌçi‚G”W L*‚$TT ³XU­Õ{¦¨û!£@ ’x¿VQ TjÍÈi¨°W( ì}òðAŠR…ƒÊ¿2žvwÌ¥ü1|Î|îúÜöÂÖÑ``?¸ Âe³Æà0`ï wù^G ÂhÇÀŠsó0Q0×AXî+±²(ÎL”2xWï–Ø¡p·Ð²„„ ÚÑÀuv<)•¨³ãó€Bªp>4NŸGž`ž|ÑlD;Òãu…–Æ^KH/¬PÐÄÇ TDÐâŒB6 =^÷œ–²:w)ܦ|³ÀTÐaRdH"Ÿ×!… "Y!{^£¿>ìitÚåRXVŠÝ_«RŠß ô’~1¡,ú`½]V‘úB§Rš{GIñÅC½†;ïõN—¬B¨U9ãýÄd=º?<(Ü2tÿ`ØÏç‘?ýhíŽÂÒx®d¦wΓNÞ|7™Ç Õßó˸«À¨„Y~Ü• š@Ɇ’®–u¶Ž„¨7áz"²0itÏJÝ=Íé‰_!ð€8K`ÍŠ<§Aj^–¤”}ºùÄ5íÏä°y<Ûº>}ä½ìS?²ÝÆ›8ÊÔµ~ðøoÄê]©ÞjTæ—*)ÿݯ_Lü·k~|†ßúÕ£úÿñþ—?Ÿõï¯|ÿw÷wÿŽCí 7ׄïÆgx³ï\_dKnsf=ô¯ûƒ‹÷ÆÁ–u¡ª_Y¢§ùé¼®by-/óióà µ.XuÅ[@½‚NÁÉv%6E¤À<Ô§í’Ân ò'níÈ ¼>9Z ø\z¨†=UmÀµÄŽæ%%ö(À$BV‘uƒït¡-H%î›È'ÀûóGÏ~OlK!¶#yŠ!G7ìIK ·ép•®žŹnñ?ç ¼>¹õ:Α¢¡ÍáÊùk•ÞJ†‡d4F¡¤_÷Íïo}>|ÈÎd®w<§é˜Â@î\GØþℜ–tÿuÙHÓ´ˆâ+¤EŸ*é°;2ªØ6´6¤ÕCÞäy#Ìu#K`ˆ^ÏÞ¤úñ¢\-àè€cK¿'ï)l–Dð1ÐD0/ZbÙä±!VØï¿’‹uVIù@§&iŸh<—¸¤P{6å›u¾°=¾é‹ XçÈﮟjCã9-Hœñä9J÷°.á2m*A«Ùì<xëÈX ±QEJþ+_vä–„F„(@-®Ê$g/'Ñà•ýÒ-¯§É‰:í&Ë(}*{蓞´[\'»5w+lÁ!-Dé ¸¨ðä‹êMÞ" qA2€PMuqÁ6˜F ¥Q'»ÿ×þ ác8IE˜uÞn0Ø6Qo ÖÚrР\*0"¤æP!(ªJ¶© …ª!†dvÚî0c(Ë ­â]ÂúC9îÞÏYÃE³?º+C9.l$_ö@KÃÛiZ Æ«4÷Má÷Æ!).­-ûCceq€c¥Í¾Vs$_ äš­úWQðܯx »uZkՅܶݸ6A{<¸Miê5åAc[ö@ÀË `€»ÙhºLxã €Ê>×K|™¿y1v.Bú˜²æ¥) •í#¯£ÙþÍ•ÞìÔ:W÷ÞAxËäô¯áó7ì^›ÕþÌ8ùzýúõÿõÿ? ¥Ûß}óUü/Oçþ”‡ÿFMîŒFÈ¿Q]½X\ªKßàŸ[àI°möT§ƒ¾qEvaV¼¸–ÀƒZYso¶eGpÙÀލîTX5`O_Šº™mñ¶Ûš<52ÝAÔ³¸à&Ú¾øˆ-ñ¡ ±nZèfá ðó¬ð‚ÐD¼ñ Ä‡ Ã:âqgã®Æ°Ñß±`« (üBšë0o;ji|‚âxPTÈõ1—ôçœë­èÁiòê"L(¬V®¢~±t[Y^® lÆ0}ØàÚk" vO|ªÑv‡J%À¢-/ )w!4¤Ée8(­~¦zañ}²°†eÐÑßtV¢âmàWd­ û‹¡:´W¶ j:+ãBßÀùâG %f.Òyº¸8G‡s橉â­Qrk¹0®Ü>ÇâOò·çÖÈ`¯p›ŽÍq:MÔp¤§é;·ªZ‡Ã†œ;ÅÁiIi¤ç’¬hÜ•ÿ¸Îíõ9”9R°‚nÍ0‘œ…V´ü”¯8 "sÐýŽb”Á>¡(UÄÎ+ÿŠ­m`iK?á°Ïw jiÝ3På´I˜ü®¦*6ØàÁ}¶<" v ÝÕ9qç럒e “F¨(RGísEw?Ú–I«’„n,@”¬€M<<‚$_¨Ç¬´iþN[ªn…ÚC »LÇft¯šPl±t€üm@õŠVaË«ß*£ÌKж 3ÃT7Bü °-Dà®ÇÉV¨P{Q¢K9À±ù€z¶ :QLÚ ¾ˆTH4"„ÂVpµtŠ·<Ô Zdª¶ŒJ„Ià1ø@Jí´ökSÕE`;u8 5w›£Â5e$êÄ˃ôÅœH6t©ÎT C3¬þT.-¢ThÓ9iš½C¢Gí:%½¤/(2zˆ»ßH K ¥\ Ô˜Ëc°VZãÂ,Ü6ß)çný÷ÓáÉøìߎÎGЃW#HÐ…6UDwL½"Û†M ‚O8K9  u?dŠ»>˜‘íúEäñÀŸ¸‘'ð΢83=8“Áí‹Ì¶¨iXƒ?Ùk>à‰l͘B "ÈìÐ0òÅÜP—Fe÷ Íä,s\‰ÜÄcÌèø7ØÅ² wª  ~°Ýop~d>_»ÌûééŸhmð~kš„UÍråÞ3Á/D f˸§º ÝËlÒv®Æ^X?‚Y³‰?Ãã{ו¯®À›¸§?Ë%Ä$ºu¢†µúp=lú Q¶IñD†uJ…À áó–'vš"ÜXìx€ªµÀ[²®®: 6Z€íñ(´²ÑÄ&Úƒý Wø á !è"ŒeÅî¶œïCœÏÓ‘‚ Xrý¿ó89”Hk %ÊþéƳÜñr±PLæÎæÆf¿?,$¥tÿ<éoå1Òã^2^ÖçýÑ Ï^çNŠýWsãÒ œBJï,«h¨Ô<íÉÜ¢/&I¡[JÈÑqdrõR&¼JÍ;Vâ ̱`—ÅÞ‰0Wå¤ê!>žGw=ìÉ>2\OÆ®×çnsºñÏNÍ©áÙϤë7¤9´f2ˆ2OÜe)Û4”Û½QQzñÍKZBÜ(îo]Óô7Þž³í‰à-[ð·qÞFxoùñ/ßðV8ìê4®Ï§Ö8†à&ì%—ð–¿uñS‘•|ýÐRt#µ ¯¹ ¯QSêbbÞôìXbÈ1}š“ï7&&ð:DÎi2¾|õXÖ”µUC`›ËxrTb1P„‘-@ÉG"¢ØPè}ÀÍ/D¶¨ôzÃj {½&ÖM¨Ò¬U$ Pžï¥ã“¶‘²žñ~¼“aͺ½;8¯=•áƒQJî‚Åü|!W˜?ÃðøõÉ;£PHn©å×dãó¹Üis§º×GÇÉèµ™¿õúá{énnÑüûîFªÿ.Y§ýÁ³Î¹]c)WÛ?Û^Ö0’E'z%6:¬wQÁ±M4Âü‚³?/J¾ô¥(É]nÂ…Eù/Ò^Íé£1z§rüñÝ¦É r½âé\¤Ó/¥V0%l f–¡º» 5è]@ ‚ã’°¥z#lmËòï¶Äûkì`D]#=£ÉRc¨—:ŒHæž[gASf™þ;M舰Le¯ÌÍ.)Še$q`>1Ñ7J"MmÃ0)KzŸF´bÇ0ÛÉCÐ&h¸'Œ”ï)°† Û\Å µ%sâínúµÀÌçÒàƒx¡†SoíˆQ.  á*PæÂ ”åh€ù‚Rž¨0²[ä①ËYå©*8ø㦠Jl‚µ,H W9¿ÑP@‰†…©B¤éèF(›k„²éغ–¥´Ü¡é]¶œ—¯:ãGÜJ„²«ˆ`šjÙÇ=<¢v`Flß.ßA/­p×У%¢5"«ôŸþšÿ!7ȧt¤¿æâÒ÷Çýâ2z#µ¦WûF©=í Õ;¬ýTÚuàÂÉt>;÷} ´˜›8Á–˜ˆV-Ä“<%d¯O¶µ§.¶n© Ó²Lq¡YüÐõl[Sî¡À‡ë!ð…›ÑÚSY <Ñòyïïz?žζIN~íô?áç±Ðƒîb^5'Ví pí½˜coဃëÞpüäÞÊ“@€Ð½*ú#9÷*švñ·‚·<½GoÈ[oø…þ„¸X*äEö†7« žÁ¬jhr÷¼á`MÔm.f7¨+d!²rªaì-ÈXÀ£p=0Êë@àï4Kaä2®‡PõQ‡ - ÁiìPDBS…B…#Fþµ¨‚bnvÛ)„Y’%%;T)BP /`8ë‘q;ÇVÊ>û`Y—œFýù'ö’<61´ãüD'ONO¿?}·t|ôççG s_ç_éܹ2óƒþùèütPüf|<‡„Ñ­åÜx™`÷dÁRgÉ/çÐÿ‹r:Œææu”¿Õ{§‘:ÞÕg¥ ìV)0tpV‰Šc.84¨ÿÙÆü’³Ÿ é)KÅ~ ÿMCÉpn,OÎXÙ¬ÅcúQä” >ÿËónò>øZÇ ÃŸHk D¯ðg»Ô¨mR=€Ô …lhR&› 6î”) [d‹}´"á¿ÿLöŒÏ,ciyxÂò/*(qPÚ«*Þò%ÔD5Po¢Q†LÜ|¥ŠÇ D9QIPÒ6 @±ÄD7eÄ0×ÚéØ$÷Ø1ÑJµÙ–ØdX0žóžnõm^P  ¡ÂÜÖ;ß®h¢/Ķ”Û!’¨Jù%k`Ç”‚ ÊílÄ£ 4ÍÎB%,èÁ&¨w‘®E[b“îv °lI}g“øÒU¨7¥PS!o£š¬ô¬üò«¤Ÿœ€Ù B•Xid`+Q¯Ê6YgM Ï©½Û5hB£W ÓŽI´¦Qú‡ôué„`œòº€Ñ«Ãܪê¿Èò«Çç ¥Þ_è‰MbhÒVúi.àšìÑK”G,Ø÷ ÂÍ·›‰€5§^×8+íTx“PÏ#Ù …Uã¶yÄ“NU°±âtŸŠ:åhˆÇ-–0»~‡¤×4åõO¸-´£IϪÄ6â~/ù&ÚTØ!€F€€•@žsk–xgyËÜ…Ø¡ JÐ &}b ÍèWVÏÊÊ^¢QŽ@¯³ü<=.¨÷ÆÎ¿æo¡M t„uÓT$Œÿ†©¿wÚ³v±…ò63ÝzøÈŸcZ²! }êdU0„ ¾éM|þØIÌ4•hpù‰`=.MÁêM›©î‰ús¶CaR$JnR|ª°G6\ì=ÞBÒbº#AmúžiäÚ½´â"siI .˜uT·™*,Dì~zE}|$YЕ¬ÌÉ‚0‡Ue>¤'!@ÔBDrU}¹@«óû@´ v@Ëå;EœŸb40òƒ^~~ý$Gò˘7Î?;Ø¡ižªGCÚZj“„EJ"æî"ø"‹éÜE% À«ñ€5ÑžNBŠ<`›»[Û¼µuÙÏÜj‚4M{ã/' ½Ü‰O3„ë_ÊO2Ñc+këºa ‰k îÕqt³Bé¹¼æòc¤7çÒ¿G¡„·è¦Z{åÿÒš¥€<¸¡+Ô»n;¸Ú¿ví~-ú;“']íÄ.¸ë]‰è˜MUºT•ù7gr¸ÞÌv`"ˆ ³6×À›ˆÐ€–JÀÎŒòógþ·ì/.·P 8Ü%h5 §]€s߃†xN5´âyÊ l“¢€p½(nú€BB8)ÐÃS6JjÉË}€áLŽ {8k÷ÇŸb>‘cÓþv(׎J€Y*Byéò¯çzaDFGFN.¯ÌAö×ÏoáøL¿s{Dcä_ ÀÂ`oáµÉN ýÑñHd”?ï%'yuxŽqAžáö+˜}Y‰ž‹ä¤JÖvÛ L}ke×#‹ÎÚË‹ÎòOk‘Ö;’$µ °>v  4F#¶~õ­Ü¯'Hã¶“ ¨N¸Z/ Õ)í-¡ Ió*’$ÔäȽ§G­&ÚlB¶-‘D$-˜%Âh"Z÷¶ .5ÅO *¥ååhÕ€2”°Iù8£UùœoV`R1‚]¥ k„¸NˆV„Ñ&5KŠGô/•¿ûK–Vtòž jÓÁ‹ÄJ¬²[ RåN êÜžuÅKÅõ=ö—(Àµµ#ÚÔ]¥w’¤%>¥`@¹|.› U29¿ºà›3Tg‹â‘†I!)Gì9—±``¤Éª$‚ÒcAEj娟:ZÙ-ƒõ¯Æ½Ç@²ÃGV€²Æ<ÝÛ‡žÜðÜ¥¼NA ¬{›'r‰Ò§`/å³±“(ìóß`¿‡z*ô©Bb©H HRmÍÛ›‰" Ë'dA«ÓûŸ¡B½ñÉrúj9nħi>·–œŸ$ƒbÿxÎø·¹j²ˆ ±ƒeü=´’LVØŠð€{5(¸‰xäñ|§ÄŸc-_Ümòl©¶ ýKýw|Óçî‘Ï”"ðD 2˜^ÀšzZ/”¬ÞtS¯Po\¦Ý¹þE™ó¥ºýÃï5™w=È(˜Êg.R!Bhϲ§ÁÛà–æ[ƒ'®·¹ù7ã1ÁUq&ü©Äæ&éПš‹~3‡ÕËÊáߌã_áܧ>€k*«Yqª{í)Ý@Äó7q0w* pµfïMýïUŒ+ð32ÊÏ%¸ë‡Ù5ÁT…Öê¾ãúˆ&™¢~Åš'ª °-áú¢Ý<Ø>oA*lÖ‘H P€eqjŠD…ÔýήR5ª7åþ'<‚H,A>xRЧX}*Ó3ùBÇe…½ÝÅÑKþ Ë9I‚?äxÚÑfÄN–shç±iIÁ¤2\Y³G(,/%¨®•`¦æâüFçKg®ÓsFówÆC æ–Ô¨ß?]7`æÓ¿-c¥é1r`+EЄ|Yý|¨0,´}áLZÃògÑÊ<¦½{÷gæ“wΰ]Zr¾Lªß¯Õº=¬ÀIYÂ5ø¼r’œS4¸m C=À*„yôÄBX‹õqùî1TDîŸqóޤ/ñBñ v ;MQWA—3Å"­—o«âz¹}ÇF1 €¨¢m $ypÐîóœm|´†hÚiY`ø÷–ڥeü‘A$#¾cAQƒjMÚ•@›0’8ÿËY«+­A'¥yŸÆ¿ÿmô2âϺ¼«° –xQAU¡ ¡ž;‰C(Z±m2ò ‡*¦žFQ‚½¯gúú˜»!Ñ@¢!i8á¥,øY½@KÙ”ã*Ô•¨{`¯×Q"HbHzK"ᨠR‰Ès©c(j¶c¦‡ŽNƒ.Áï>¯RÈ2'–Ðj„AÕnWÔ}®M¡cTU¬*(S~ÿ›_1 ¡bC °Lè¼&ô™6¥6¿Â»kçSb!®ŽFæ`mðýÈ¿ê WÎÑ“ÅWz¿‡èÙü«ž–ß$¿ÿÕN^x*+Lš àl uÅ wwz‚k5…ë‰Í ÐoyÂɡ܇K§ŽeD€N0úlyh»þĪæ‚c+Ãù¥//Pš qI:N®áW"’nZfS+‚ë&~¡;š‰xpµAÀ}›®qEé^,'oÎRïæ!ì^•®_¼]ô§Ä”~À ÷V:z†ú+§µ×ÜŸ¾|,‚&w'Ð,û4Ë#‰`êÑ»öww€Í+¦±ÓäQã2ÿ£î_]W|€"h7§Î×CÁÀ3š>¿HŽb€ôQ¥OÚxX¥!”Cm(˜'Tô+QtBa‰¨PC¾¿Å¿-Pâ@DA߃‘ŠüÝŽèÄKãðàÅš"9Ägw° IDAT¤ ŽV¬#?0^½“·¾½wk¥üaŽÐáúJi?y½º<ßû>Ù_ÈÿüÖ\?9%…Ñ‚¡În­ å‚ivõþòxíE ôëD­æ‰>ž øÆRˆåÅDÿFjÄhQÒ/qòs¾~üdsN¾ñÂaHÎ0X  ‹{§aiÞY<§?CTã¨tøZEô‘æmõ/¥¼]÷Ï_ßÀy·J{ÉC]­¯¤&¼½%Ø6dŠO;¬kAšJ?°HÞ4““eÕë›z/yæQ5ù)5;ɻĔ°ŠæqßÈ'v”@ BQ²øžn‚ðÍ­ð7-iv°oqT‡Ï(˜’ÔB2ÜX[(ÌÿËУïWõøàèLÝY€^@åó½ø)¯ÐÙ #ßaJË 7Ù}L£DñH‹ªâ€hgø•BØThp[õѦ`UhS !XÆQ™`YȨBA X‚i[6jžÌËD“{µ^æ- þ±Ø7·EbfjíDê3¦ö`q »‚M…Ç”«2®Um™ÆÃj"‘ª²À4$yÉ5†!RI ÞN…M¡Áî¾Sõ÷ãs“ üĤ¯Û¦¾²8\:,Wò_ž#R´@†C³wû!Å&X ¨/Èà¥]5k DT󹤙ÞÔ¶QÚ¬¤Jl‚(®1ŠºÚ…Á·ZsÕ”àͶÕJ°‰%_cw§F„‰•õB×OÂG`e){à õl\4/T'W) ÓD«q½ áÆ¹\hs.7²Óqt‹ž€tôÝû?šR1‰kÕ ¥k˜ÒŸtmø÷þ£þõLï¿.|ƒ?´5¯Ê®}Wn‘ë/ñ[ES@áÎÐV;ÈŽÙ¶uˆx}r6„íq PàDàsæAN˜lª<«ßÉĈ“ûLÐm®¶@·‘Z ‹°’‰4q ¯Û|³„O{è%ìö¶"s†fP2}õ' D¾pÁƒvY\»k…¯†„®#VËv÷sšÎÃ\±Þ¹EúÐß¼¾m-ösPKãò÷¹qñXHÁ„‰ÁÜÜÎÆ¹Å^‡Ãú/Ó¹•ycpxŠÛóù/ÏNHŽŽû_ãL&éåkù#ñj%Ýè· 4¸ZÝma?1¢jÏ~÷—æáQ¢kúK ] Ö°?ÆÚQí¸°K ¦QTå%|óç¨ pÌ{¹0RÎЧ*Ü0°Ô#'UÝ“ÎæP)ì„›€Ò Ì4æ  •ð‘";ÔDÇX»×ë/˜½#”ˆ*ªòSô˜•ÁR"“ÛÖðâøägtxž,}uŽ8Mh•îƒÅ[€ïPK,›ì‘fÌ ðŒîÚˆ˜°—aöJ«óÉñíÒÊy÷»{˜ÒÏŒAqôÿðÛn—JùßðÐõµ8´€b ¤¶¶œz3|L¥ªsÚD¡\ú`¡ØT“{/k57)”— š¢ÞØmùÀ)mÀUèò`¿? ¢BîoóÆh>i ŸUt“cª]ƒ`O™XoWO zvY×öÊÂZÏQ·LJ,怨{Û"0Å\È Á/‡>‚,ôb²ÿË(hÈI¨%U@JLÖ‰¬ù'ÛÈ_ù¼ÿñ÷-öã?†õhú·¦ ‡û?5rß roÞCÿÇó 7mĽ:ÞM=ןž¨{o¨q›W¯iN$F—Êß7TO-ïíï\s‚K^d7eïJàOØ©¨‰G™PÚ›v-?ˆâÇ™Ç# <ò'½:B–éAzà™&!ØEj£ÏU âcÙÕÂ"<Ö8ë ô²[<ÆÎs±¢aÆb 5³É©É÷Nzxi×Û¸ïñŠêµºB(éz44L”ž(èµ"ÉH1gÞšÜ.â~¹0>™;_NçÔíñ PÊGã<ôw¹üëa!]ã¤ÐKÆó£ãüëâðÖÑë×Ç‹·‘ï'«çi_çÍ“ºÒž¼Pì4ŽmÃ`Zsuèec$úÛUNm¤¯Ô° Ë‹O—æÓ“±£wúº‚Úüâ?ýìP¿S|¸ˆòá15È“â\µ8/L8¶Â‹ g¯WÞ·£Âß’xÜ…­i¨uTÂúÑZ"é (C+èJñEuÚ¦¡º ¯ÌnµJØRB0´Kß<Íÿö®*õuRŒÐ™çPBÅa©ÌÑåU0"›–P1ï'Rk¶ü4ÝÝHt‰ð˜ùBçFs?]-çQ˜ûÙ˜þsn°§NŸ¶÷zpsPÑkBR$Z(ÊêD`rË!>‚†lw ’†ˆ¯U )´TC¸i!‚h+Q¦LŒˆ²›”"ðk Û .áÇÝ&48o椽 ´´!€]TÂëáf |,dáJê¶„êÔ"¶Þ­s¢jÈR]è;Qª#LÊÛ`°&sѦCêDZG"ÑèvÁ¬Z¹¾HH("ÜŽÀÖñ¸üyEú)[^$ýùRt%gO^é§DZî 1ßCaO¡¬Ož¨½aÄî*û„µŸfmO…è1€Ë oi‰:°Ì"Áƒm`‹»ÎL†¬Š§å©¬×“·|4³¨gšvfšûb\tB¨,ó& èÅŒštÈÃáMduÂÍ›5<ÁSøF1ýLÖÕ’Ÿ·Ð ³^¶úœ®àö3Å3þ 0~ö˜Ý$Oú÷E¿•pæ×žvëêÞÜ}3þèíªÙKl®qñ{Ä”%žJ•¦Áè³6·à Щ5{hhL]õŠ‚&ê3V=«mðð–/\º\y“|Ö¬j|ò¿Q°m lÁ©g´³5ùÏm>˜'˜: @<¡ 1RaIqqNŸ:ßĦå¬Q…F€ O4@ð—ÀýÐã‰YÛ75´P>­ ]àú ôÕÃã¾ÂmŒÎ×°¢Ÿ¨$é¦Ê ïã|}iÜ/Ìӹ²‘,ôÓÑiBØñÆ)™ÃËâx|4ìŸa¦…äurxþ«oç†KE’Ci<\Nç@ÍÄ|ª,›?¯%”AÕz©HhíR‹—ùGèA3Ìf,˜æ½“#éMÇÃqNÿ›ÑßYoøt8Õ <6פƒÍÉ®%,Yp·9¨$Mù<Û´=dgRÁc’¢‹*åŒÚÉ ê%ô,¾ÓÁ^“ƒBª,ÞÃÞ)[ QoÂÕ!ké6°£!5Ü oD; ¢-± Ÿeº¸:Âê„ßòES<",é¢ço¨—*$•òN³N›¨SÀ¥¨{ÜmpéMXp²^¶ÍKY§3MÐq\ >Íîá#ðœ, sÒÍÐÙ¼uuÜ_á;›“µèÏ ÒâjîÅ•øŠk½“þrÔÅ[-Í3;ǵ¬Ž›¶àõ«|øÿ‹ž>qIâ]7¸?â_‰±}›3P^Æ·9éÙ¸\¨guÀõ/š!²|•K”ðÍTðÀÂT>8c)œÂ…ÒãÇ-_HÌȨ1Y'ZJÈ-*ë@às` ÂQ3P¯C>˜Ê&hä²…!dÏB |¤DAáC-ŽºJØ[¡ª M€8üMÏ Ý¶³}"X4{¨3Ay!:Ƽ:þù¿ã$o W¿?5ǯóHëç_³›ŸÇÒ-䎒…ÔÈõz'9óåBóϾ[é§…¡Êý|éø³…âR2§æ–Òtõ1H2Öø%4°sb(Ë›1hIª5,w‹­µZa…äF’!ŒÜ 0žï.‡CD«9ô‹â4‡d¥vbšó}]ØKP- ó%3¨ØËÉ^ÂmꘈH“¯ÏD`ñ’Šè0Ü!¢º Javm­ÑÓØS‚‘'ä§ji A!Òl.ÐÂ(žêѰ½Ae^ÙØØX&Ÿ­ žhhRnw!ð¿–m%EÉÄ…P eIŒ¨¤&™Ç“?_aÆßÛ-H~~å,§Ï“¸ûýáw{xòBG_ÈÍM¡=üZ fB6Àº–¨×y¢ú6ÐÓxO²£m A<ႳO8QJÏ9£àЉZs­ùæ–ˆ,à= TiÀõ¢¨ Žôy DK$’mRØØ ’j²Ç´ Öb&½_§N\Á'ÀÑAŒMp€J]†¾·Gµˆ´ßU#r«Æ4àq(ÞFˆ/€Ä.uXÀÛ‰c§»{ô ½Âžb]k‰k’.…aiœ¢—ê"¥Ö¯~û2Uó¸Ç’Á‡ˆžâ¢÷µ2íh?t‡ö^­N°S‰ì26Ð ®âZªíj@jðÂá|W É}×up(îúÌ…¨@CL.ð§®cŸ@«yeûÌÀ[˜iiöE B4áúTÀ—™WiÂÙL‚•¦9=3¡ª×k€'‚ÆŒù­Û³ÃMÜl5¸°8dM3ËÌE{Dð¦ägú€½±Õ¾¦auñ# öŸ’‹~sqs]pÿhRåÆ ®$§ÎbŽÞŒ%¿É0á#ðnÆg°¿Ìq³èx"OnòK¡´—mFø…MJÀ˹ÁÙ áAB¸ÙÝ !› UÀð€¦HWhS Á“mDŒ†´ã$k?nж‚ Àâ‘ tó8m (ÞØ=”Ÿ£Ä(@€_cw'Ö´â<£áƒDæWïcN•Þùùb!½uË¿îŸF‹)²°|²xPÚƒ´~Räð£€ÚÀS·†¯ëÍ €²½á–~)È`p AR¦TÖiS5  ïq·‡ðpÜÛ,í/Ÿõƒ´ݬ G1˜2ØæÖŽØ‚mîÖE¨àÜCð‚á±±õ*î`óÿÚ>?¥³=Ýi ÷E9¯ŽÎh©¬ç êå ­\ÐRÈ~±ßë­”ñíyT9´±=ùµÜT ñ`ê)è£X ¤›©šM@#\%BpJ¡¤Y°·Á·AŸ„µ†ãó ®“Ï̘³`è Çã£*ác—€h(~EX÷®–2³h¡•b¤½ ÇþŒ<6¼i=šÀã7þbp•:ÌDÖð!‘Ät‰û à!˜žE>¬¾9üU°èÑ®ËÇ.ÿ]JÆ?,‚›¬×£< oŠe„› 0n¼€ëïÎø”b€sݦû:$}¸Þ»9ô ë€Ê¾9ú”^ÞU=‰ùYpñ˜Ÿ ¿ŠÃî؃[”<¸>!ˆ ­™£ä®Çá£DÑ#P (J1âÙq]XàâÌ/P”;!`;4 •-!ªŠ?¦»à0¢xInœð%"tÁ2æémúœ,<|—ºÅׯéÜkt‰.àgý¹[‹ƒ“ÓÓŸõ by¦=œ¡yC÷nUŠƒÎÌÌü»w½pvªØírKϧÃï“a¼–‡:eé•Rÿ  ‹´cÜq‚´cä‚©!Y[ äõ/[˿ŬZ<Ó¥ÞÎØ²×?Ù,QsHVºúxNvû K_ÌßR¯»:_¬´ºÐ}Òȧ,6h)M¿ÜŒwSÛuT?é V—X´™kÜ=eƒúѹaƒYÿc9^;æXD(§âÿµªåX­,˜ƒ¥~?m¾íß- †9c8|4c¯aj©ˆ¥·7îQg³ñX3’°Q–ϵ) ´)¾U¨ó]µg˜›©™Få¸uP\æÍÎ2O0ûÜ<¯ž/”[? Êè·ÐÃ0mÀ°æ40„>Œ¢U\¤mõ|‹°@¡J¥J8UÑãu;P`P·|`ËdH$27¤Œ¿”Õå¯8^x@‡jÌ ñÔÁ¤'ÜÉ æË]E=3)ðY&‡ü)åÁèƒ?iû¿ƒ IƇŠÆiö£¢4¡–… YZÒ nCä¿\«“þ´Àõ÷Bž?€„ÿ;dÈýqíÿžÒÕµþ„ÿþ2â{mh˜AüKãõ÷¦ d}z{“1L7P¸&ÿíC<{%Mj#Ÿ3DŽg_ïMBÁÕ|0Ò²³!·9êpviH­¸€ŠýoU áƒypê"TœP EŠ&(ÌC¨Ï¹ñP”ËZ_V=®|AÀ5E…`I‹„p#AhB M¸Ô¨ªhås:\H—rúbÑÄ-_*æôÒ°¨ÏÚÉâL%´gg?É-¶soúýB{ö‚¾5(5tqvéÍÌEaffø®?wKŸê/ ÚOi»ý›SbÁâ‚â}ˆ¹Š5hjeJÝ·>C¬ç™•e…!-èôÏ9`æ“¥â÷…\üg}©õ²ÿ3ĺÚ6ró̘£úüÑ«®(Í¡§6Ò\Ó8$E€o<ÜÂ>¢Çu€WiÔ ÔBJ q~ºÑßÍ’?žÇƒW|°ö¤úhn~óÀ9e«ú¢ØÈ÷ªó(Ÿ 8íŸwzC`þNñä]ap¢gÏËÇg+°–þ¦ÔŸé÷ÊkéàGý¥õ)ý4ŸÎâö­Ö°U,æ~×yV §¬Ã@;(–u³uåp{b+á1Põ„ ¹tFÌ´*EJ°µÐ"½G€pÇòÝý¡&a»ˆBØ2C¡¹4mX;ˆ5¬ƒr QŒ+n`FH¤KÖ€:ˆâ1„{ocs+8JÚzKÛPQÛ2E 0pzG<þûà ìY&4bú k˜Ò‡!h‡Ëqœ™E°R$Û6¶…û_ À‡€ 7@ÛV>Ž _ü Šôô2¡TΓ D–Jó…öwIüi…åйh¥KNf±ØÚ<Õh!!˜l‚Á6•HF>H‘R&©í"3q³´ wDåÚƒ©Ýľ„Gx€§.‚ÌyGš»êªƒPá*L´n× \ï}I³p³SÄ<ìf9Ám%n¬ïu/¸L–DÚ$ã&︫Šc|éÿ6iÎñ¨Øµ¿OiBbüÇ™¶#@} Z¸†FLV^gZàž“ä5S‘ú”õ·8Þ(w>øðøÒ6|j£Çá dz¯ô,—J½ >6q?¾“a>œmÀ‡«á{ZqPa?Þ 4æ ZÇnSSPŠ"Ð#0Ê!Oc+Rà²Ôe< À·( ¢-Ž) ½W\GÏŒ@™Qaâ‹ ðßPd©š×§3tf®_¢¨Úýããø(Ÿ˜é)°¨o]¨³n¿W\ìÍþPÏàu·s»“¾&}ÁE««{ƒÃ™ü|¾xwfÎÍ«Õ%‹¾ÑK½Kì¹(6o$÷¹9¯OzP©ÏªºM:äÍ,y”ÐÆ- °Ò³îEÎì_¬«÷²øj€c ?Läi©ÃNXy¡‰ÒJ|¾Ñî‹Ð:ö ,*‘÷õ#ªãä;þòß"}j?y¹ùêGÛHRÕìí½<ÁË—z~øüÙïÇ`-­Ôùb'ÕÏdóio¾xRhžö’Ùó´8{ôñ –ã!ij¤^Ð[-䆧êãõÙÑñQë-ÕBá÷ýV ÿ ¤›Î˸ü=iâäˆÄ{_ëM+¦ó v¸ãìŒö‡ `K‹pðÈ­uŽÄGXG#¥rã^† FÅ+Ó€x[¸®âð8K9pÁE´Õ<0mcP\á±',̓ÇÍ£§_Æñ¶ %j3OÄ0¸,í¥'V¨½/¨a|cHm=¾K³--bðøÒßsǤ-ÀÚ†|a³m`»/žJÊ]Øðl g‡£x€T#;^JªXí§ò,ŽÆ~6‹ÕÅv¯Ÿi<0óOé…<^ÐwÎ7Qí4ª|¹mÈpk É:8&¨gà¨Ù8Öaí@á*0 — dötZ^"±áÈAÈQy°Í¡ÒQôB†³Ú¨m——Ñã¤ÏÌ@áRÂŒS Ý:¿ jD<¡wsÞ×$O*Ëü©êqu>M–Do²Öók%Èð€1­\»¬‡êêq½)^hðã8³SÅþO¢ÅO{fx×¹IWçÁûºåÚ<@&ñÿº…ßH.8&&]]Cí†-“‹ñr¥K¼¤6]—f?98E™ÆÒõyFx /"o4Ê0x"S߸œ:€‘0êž(¤GAš©ñ;Q ñõW¨Öa†¬¨"#Øæ‰í{P t·MTJBˆ*a O‡ A ”ÚŒð†â)A@¨¬˜²ñB–€d+RSýñ¹½Øoý^³ÛøÓ…îC-ᨗÿ¥q§0Ûªô ½Bn±[PiK_\ÀÈ/¾\E5Hsƒ~yø*×]/ÜRƒôèüÝ)RuqŽÜtŠ^GÞ¿ÿôáRÄ:J¬êü^¿Ú¶°fÑ1œ ;Ø|tú¥Õ+wzùµ¤PPƱ>·šF©JúDõVe»7‹x‹ø-1¹¥pl½€C¹¥lÀÒ)Ç7ìeQ$E&QHÕŽ¨­X¼# å]lµIÙ9±d›'€n’a÷Ió¬XAÎ8ÅÁaƒ¾''œ¢tüÖ²ç²r¢ •Væ“•3|½Ð[}•ÒVJáLæúÉÜEãèwøìU‚@ó—ÐuRqJPqÛ„¦TÊ €#ÉBƒjk¢‘‚·†]Š8ËŠ?l#¤ö®—Ùí=4!•pÁçá!B«’ öxðCì"+pBB0‡#…fÄêÕ8¤ê‹Pmºu .Ïr•pê K…ÕÛ„Š±tbµJ?xÄœ=;þ”€ë<åìÞ&j#µð~ [!\ ù\ƒo­ &ÆmÃtT˜’¨ZfECÎÍ®Äý#…ôE®¡_(éÊÈ2£KOJƒÍþÊ<“ öÒ8´ý6J÷ìpI"w€À USH_¸^Š­Øæ)$`Õ„TÙzvTÜÇsÜE6yðË G!ðÀ¼£Fmô©g>@yà_³°cÁ3wëp=îz#ù†ò}S¹»ŽñÖ'¨¥ï'¾ÝèxñdØ™²Ü˜¸€ø5 Oà}À¦è§ÄÿÓgÿIÏŒ ¾—˜ ¼v'•Ü“ÞMßœx%‡ëRõé×6™7ú¢> è{ïlïúN†4ÙJ»®'àe:{îBÈÑcò‘0ÂËN>BQ6AM0?;áùˆþDá&¶HÀJ¤qШAÊž'SRÀx _a5Mp¤ÜP`àµÍÀƒ£ˇ¢ÂÔ°ÔÞšâ=ˆ|Ÿ· þ…Ép‡¯¡`©æ†âuékh |F.ÎI9g‹½™Ó|½Ù\c±§ÊÝtú袜ö^]'í™Õ³’4rh½£?çŠçKýüjz:÷6ÖÒÚ(òÕ"Ã໿ë b- ¼°y ÍjŸá.E¬_æcü€rI¯4£n|{X’ýž +…~J Á<Š©BéƒãåRJ×›åÊ‘&¬c4Ò$á»à!AìA›Ø†C%Ú\~ Àn|ÊP²©•H8ÀZ1öJ&{†M7yê|'Ÿ/ë?°퇅R^•¶V¤„yš?š»³@ÿ¨YÑüÒ IDAT‡o Í^ S zYo¼~t{Ñèܾ»¾DÑÙžãv‡ÑOmmbë~„Š †¦²¹s` IT¡ à8D[á_vÀh–Åݺp|Î @Ùð×àzØ÷€3†Ä~d»JgKíГ®‡Bz|«mQ0_p<ŽTèm‘…ÑVhÝv©`á†NlG)W¥ø%<€rW¾=@¢jp­„¦œ´@^3#~úwÚ°h÷¦Ê~Õã×Þ¯“âC6B“õíšÛP„?º–wß÷_ò®?…û¡Bíý5õ Á¿ê†n=ôø5®•{S@Ýõ­Î{ˆ¼ûA‘Ýèg#±˜ôÅuß;cƒi½øµ?­‹L¡6ÿ¡£ÍU Ÿ>vý±`Ì“¯HŽFZæú™Z0ð¹ãMÌ¿TXafõUPRÜÒºˆ)Oa­*þ8 ¼A¡©xüÂd•{O‘z‚Ô* Žýul¥{ à}º¾ùŠˆT¡ÕŽÖ^ RB»Ô´‹³qoˆî—^Ï¡tÌÒœFNÏ æEá(¿„áp£{–¶n­½™/ÎÒV_S\‹½EWggO1§ú·““wÉ\¶\貜Ùë[½âò9 „åÿ>z‹˜,jj`pö»ûZ©hô»”^0ÜÅEt+t±ô|1§‹'Vo°ÞWÀlœ3Œîœ@q@Atú›Ï(˜K#€âôKü‹!›_>¢+íðXíÑuñ€C±ëcñ P(Åš%«Q²`É %t§ÿxAÏŸm¶|ј_!ås2?WÁÒÆùùq›í£ôÍY{bx~¸4Ó\œ© ïäI^žÏöO;§ƒ²1øl¡÷ÉâóEÝï£c¨r=lŸ–A@!uÙ‚ÄL åï¡uj´Q€ŠÝÊüñ]h:˜kàšéÚ¹%­ÛéÌ­_žv«ßöŠ… X’?i:TÏ·ÕŽò0VJÍg=¨È”zBþOHˆã¦=§ô†LÓylT$B`F1j| jÀ·îH˜¡¸û@X†Š­·l—riŠûó–±|¤NŸÞílK(½°UÔ-+}Õ¢G¿Jz Ø;Pÿüµñ¢Úþ·ƒCô{ ÿðwLM>Éuòç´ßOrÝ•eÐÏÉF¸YYŽVßBK9èõ tIX †&¸¶.…PñзàCBÈœuîz ®ÂcŸ»àÌßÛÍî·DTC^õyàƒíÀ¡5‰:—0 †`‡K!}@EAÝÖ5ÒlÿW€Iˆê:wØÒbKIw¢ aÒÅ&´LÑТáYd€}üïÑ~C‰Ç4{E@&6Ì= ¶Ž6 ÈÞV: ­,$%ÛÝ+Šb¯Ñ” ŽÚÀÑK­ú N{²Û‰*KHSô…>4l£‰(°½©×ˆ …pg;€ fl:‡P `ëLáx`T@ ·.¡>Üwê"ð8|0ol•šM ‚Daý ðÒxvfØ^–ÎÚ˜“ŠI˼±™]ýêt¹ôM˜Z]m;8¦×8×¤ÑøÐ™áß„ÔNwÃîûó AŒ7ó# Çzñ÷›ãÿxîÛƒüFÉøõd…¿Ì ×­¦µˆW‘Ñb¤jƇ(À#êȇN¯Ë<¸À».G¼t9¿Y–1= f‰Ý„g˜ó…ƒ ¾óÄ}ãú!²÷À^@BX`”9ÄÞ…0¼ü9~ñØ]G)ÅœF 57}ñÜlBA„K@S€¢—rh” ŽJ0!ž6ñàS뤕üÛy\É1ºPY Ý“jw9ý¸¥Ï»wß̶;ê;Üý»å.–‘+®]ôõRœÍ¼9+°Etf:Ãó ½c´Êï–€tSÌ•ú² ‘SÏcî¢Òm=(Ìî©\ ç͵Uò*ޱ\-õÓö¼^;Ç`™,¾ÕèTþ4ß^–ró½áLz|¾J»/‘'§…¸/hYÁ0Ô›¾¯bˆFÂÔ:!ÅMº,žƒ[ñm4*)Ö˜5¬è!§Š³hv*8Ytp@ZKÕR?m'†®40oá$&°Ö¨‘¦e]~ÙhÙLGN*w «–:/ỦCìP €  Ö€d¥*Wiç3,&ôt³½vS—LòP!ÔŸ’»ÝZ~/¡¹"½cã³lÎ6öw„Úæ¨ P.S@ Vƒ̇CEHpK‰­U†¸Ý:r•=¾]#øvHP`Ä2ýüE/Å¡ï« T8ù[@X‡¬Á (0I#–²Km@C85Žz*Û°í+[ CAQ8á6QÙါžb©iÇ:‚‚µŽ’9œ„) ùª¹÷›¤ 4,¼Ž‰±gi ¬Jy{}à-Úßv„¶?o?>Á®Úä"V`I˜j¦°‹µí*Ð|·&4àø,ÄCOÈÑgy$*‚/²3¹¬éθ „£î{œçM0JG-é(ëåzé¨ó‘QÛ¤M·÷aúþ‡è§?I!^¨\³TzŸ„ù#Ù ‘ßM%÷¯ç§ÄßOFº7…ôN5¿ï;¥¼ rSà¾weƒázÜ}3ÈhÈ—>H“cMðÊíŒÕ†.Àü©‘™XØûžp!²ëÜ÷&Ðë‚A¸;¨x€[Ï„øYØœ€æ#¤pæE ‚½@Å3QZ·%å¤&`ÊäåuÑJį×9R~ ­— )6_%˜mr³'úÚäå$š+Ds«MÐ(AQ´ J½èì Âщ ýøø,¾×g+CYη‹9ëtƒ?Í3r6léVz2OWîÛ(®mç ÇGùò,ÎûºÝz§‡ùãwçéia0¸n}’/~r2<Ð+ §K2/Q8‰új ›«¨üæ(^]`Ÿ@ ]:'¹‚=hmbVΘÍJAB¡¨Î Ê^¦%Ãh.3ãB0úï}…¸ã\iƒ?ölRÔñ¢PG`±(ÝyT)n4 ¾¿nªï5R³Ù!t¡mO÷éÝjÊÐQÍ$}„#'€ÃQÄáé#¥ŽðP|  +o×Ì8•»¿¦¡À‘°bI²ÖÛªqBŒÅ§Æœ6–Ÿ¬°¸Dì^!Þ¯âþ}òÙI Lâ­jTÈM¤z†QH#Ô„ÜŽd"„¦âŽ#˜j£,XV/£w‰ˆ=ŽÃã#Ó…Pö×cj&|z 5!}85î*.uü6š©«bx\À©q4Çž. –ÐAU®ƒUì*…š€V‚db;뀉ðÐnÔ€mÄ5Ѹ§vé¬À4ìþØ´u –’Ì”8¹¬#>ä1e”â% è¯A^Ç2aPˆK34*Òø¿xÁÒÔ:’Sû8'Ðf!¤:A"&\ª':4è6bÓì@EH¸ÖvU@¨yPÃVKp˜£ÃRúÜÍ6´þXaQŒ€Q†šŒGþh‘àbÒPhœçóѼ>^]‚ S:‡™X:“X½ßb¾¯1¦­)~Bg0‘s#kh‚ueûMÞ޴˹}n¤9ý„×ÿ$¼á&ë‹ÂúWÐ9wß÷÷ð®Zìðêwù$Ë€{ÃI3½¹Ë’™¯]íδI†7Á9óD5“ç‘z^`!\Í•Ù_ëñåRËG#ãËr‡ò ÁÃ:‚u fžÀN¶•â BzpTz\îØ’¢².àzJTkX­@IÃLD7åÓEÄ 1× űJáÑb°.[Ýš&`MQ!HK¼yh§mûy‚ãEÞŸç([m&gÊÖðlõM_þ¨ºhè“Í·'å‚.Î60C×)¹ÕíwðFúK§ÉùÛîÉ-\ô¬F·µfU~.ŸâmÚ¾=S-ÞJõ‚,MØ`ýÐ{õKRÀ³´÷¬Öi÷ i.ÇÃa„¹ßvû–Ò¤}&s©z-élOåŽiþxõ”rLÕœVïÔÊyn1†GidIìïƒ.Û¿`þ|c±¿×\ëÝ¥OÒÍ J@¢ ýÜ|­éŸ4Š EP ²^©鞣Rz¤ ±ÓúŽFIºrW¶¤À·=¥–z_7”–ZiÖí‡màKöJÃ"‡Vz,sGtç¨X™·èþ}oÐ’HW «uÈϱ•‚¤Òõy²šõ& ŠÄDð$O%¨ìp„ w}f[‘€KЇƒÞ$Ä–¬#¨G¡eö\@*ÎÆŸ|Yƒ®óŒ{!4BhCÁ&T8J8ÔŠD¨EàDØ1Q­¾@ãÅ^PK„ó•Ø\D,‰¶¶±ŸD¤-¶Ö7ˆÁcSZ÷S&˜¶Uº'¿iP…\k‹QlÝkÚŽ²u5Ö±û9¾ïo2ÅÖ{x<ËéÏ%™ç„ÀÒO˜ÓH»àê+Æ’¬ “¬†ŠÂc ðx&R à#Ø03üOuúp=ø°Ækgì‘® =ÞÄ¢{äÝ=–7ù£†5ð2G}—*Åë 9#Ñw´ž—’^\ËuïÙÏû7ôûîtó=V6¢`yÞö×~âñƒ¿ÞÙà~è ©µÈ¨Ü]]eÅ¿}š_ŽNo[:åêìàU?&}u”d­DP†iÈ¬Ä ‡‡ƒ¹â `½†A…ï”v+0  S"a»tVª 0eX¥ xV|H°¥¸$2€dNmÁ‡® fiuÑ~rúÇN³[þBÏjäÐlÑÓç4X¥b›ë!8U`[ [o³BÕycÄ¡©À¼ÅÝ:wë"ðE®W#¦‘ìR.×D{CE¨E®¨G®'á!¸å#¤@1T ¥KÁ  H_ &‚º€©D€=™I½ f7^ìAÃQˆ€ò›® «Âe VÝ-†¼ÌGgíTØf[ ¨IÀÞ…(BjÍ÷ÛPº·!)P‚ÄS”b©’ {RmÞ…½ßÌ( @"­«Jêžø#AJÄþ ÊÇ ¨¤ ñ4K]E@á¼°%Eì‚;ˆš»4ó›À¥®æs$<¸Š»5.3`Ù[Þ•“ëÚ/øõ ùm}DF 2Ãf_¸ Î cšÖÅ4x+&Š¿!lçF[½qy™æ¿ðà=ÖÌõ ÉI“w+'¸þó|z/$þï¦)47¸icÿŸ6|˜DÄofky7Áñþu<äšx—˜³¦Çg ~àÁ Q7м&sÓFà]'.ĤgV¸°/û2«,PÙ¸*.ÝËĨqÔxpkÀcº$£3ŸÕ…*”Ái €ÂvS¡A^‚ƒDI= € PnÕìÇq Úäð¸A¹‚ˆÁ©ŠpÍø×`MÞKY¬ÙÁ>±)¬Ÿ÷Û·‡(0ëâœô—­Ò¼:¿Ð д²ú ý”á6RC¾"ý™n?=R´£_§´N åV¯y–¶gq1°Žoõ‹ƒvþâû\»ÙŸE:U–8"\øŠ@P¤.ˆ¶wÍ8ð9¡ˆ}Þ[‡³.Õ1,Ô9pk°Ú+m€òz4z¦Dœ$v&2ˆ—šÁáK}[,u,^ÂR”`BHÎ!b8шOh"ö¢À·%å¨!†B ‹pÒ‹FŸ5O †‘[Æ-ç2Ø»"¸g,¦ ˱·&\ð+äÙãnÇ[ãðFg†ëáÆ¤)j©úàrfÒŽ;¼t`{Ÿ¹3a:þ->UâëÖxÞMàÁU-åò±v';uo¾Éfô¯r6|H}÷>Ý*¸¶ ›DªÇv%?28Yêúµäç‰ãÄ ]Ⱦö§·OõëÈÁåñsé+>i0>ÕeL:pycSQžP‹YvCÔX=TEHz”IiÆ_|(û1å}Ä*‘èù§B—857 ݶKàÍ–Ð'Q uàð¹ÔЄ€(0@Ãù:µ+Û‘A‘Bº`18È“ÍáŠ>½0þô*þ×ß?o¾•DWJÕŒ§…œkÙ)VW¯/zC@Ó9õªõ&yÕj ߇}oçJ‹oÚ ¯’¸‹™Ve¾Øf³…%Å¡.žÐë$gš}¼—ö[(mbÁ–GZ#ú~Qßy…Árc¨ÓöŒÌ¯æÌo‹yÖ;{ª†OZgvwùRd,•fË»8³²TbG¹|y¦lËÂ:«»õ(î!¨ó°&û™ÔÖ}V]‡ Ò„öù~¬.pg,3gÄÞn² (N ˆ­l »ÃqÈY¶ .ÇŸ…ÐÏ€ ¾OEàuÄžm€K Q0GÔj‡F ,¬Ãi ©$Ûßd!´â±ÐT@Á]ßS„‡Äv‰vS; àñ6È—¶`Q&\µj6(× ‡F̰¥²e'mÐùóøl(“/ {ÿTaØÁ."×çîŽxÂÊHº¾ WAC¸à®BXC¼ Ù$À³µ[PƒMçâ*R~ÂaÔ·k—Æšõ#Î굇,òóª[Ù.ñ+2Ò±˜2k˜Ì´÷nÊv®Oõ¾î­ &E¾þ4ëOsî'Ï€Ú{Ĥ‰ÉãsýI®ÑµNÝýµ†ÿ×9>˜8z“paê;7 ˜³?•;=øŒ ýU>óÓô:\HÀ¼X‚9/¸Tx¥ê©ZJÜ}±)iTêX…»À’ݼϹ¡2ÏNŠF–hï#ðùÈ@Þn ñX5îR„ŽÀºpêQðUÉ@$‡‡-ب!ÌÚ¦dA@Y¨Œ; 5Ò€`@£Æ±ƒ]¹¾P…Û¶Á('ಙ² f–Çä!$àåqeϪ!†•&IİÀ¡'„ 1Ø´.hWÙUS ŽxG€0 ܃¡²FûwŒ’›'LŸëµó¸_ØÜmÚ®†Î$iÛpw¸‚d”˜˜B‚g^÷ÎNÖE³ˆ‰n]5æ|Rø¢pܰáåñva,qpvŸÅª@;T1Joö¦»û÷šÔW™+‹½q5s§ÃÇ‚›äÓÓ`ÿ`'=.J•öÚ2f <?l ~Ô3ApcŸùŸ?þSEàý”í¦Çw' ý‡~qê‡=> û\;œ‚i×*w$¯ç“âò?¡6½ ó¯ïæFÖ°þHÖäR!G¢'áz™%Ÿˆ±ÔàB0OhŠp¨p£&R¡Æ×‡(õoôgçW4ú ”|QÌϨáŒ9‹Û¸è6ßþÇ'§Ã=TrñèøUŠ|{.7TíÞ¯P¦Ý!É•fd.ÿ§wçÀq¥‚»‹‘%AÚ bùßÃX~PÜŽ-€( ±Sʼn–_k»ŸFôÚ@9·I Iþgks°Û‚T!Öþù‰E›ú0Æ Vû–:ѧHÛÊ8&0À`lj%ªTP ö×÷Põ›ü_*¬b©5‹™ˆþõþ£rñ»Í×CàuD¾³¡ø" ˜`µàÌÖèSÖgC*<a ÒR„5›¡ÝøG ì¡.‚šÁ ¸ ÒàÄ‹Ý/yf!“#v¸[Ϧ^ùplQ;0A|ÈTê*ˆ}T×mi%㯤E„¥xl!B{sk‡»&$¡ZUˆa±:ª`$dÁ½x—Øò«(! ŸÓЃÒ`£ì;®nºŠ“‚Š „}v"ZÙ¤ÑdVB¡}‚R0…“™ÐA¹—rPÀçØæ. éÆwWÙ8²ÄõmÄãò}¹i<°3c gº)ÜõÊÀ¥QÀ´Ç)^"¨!¨‰I›£©ÅÆ•N\Öw“¸QÌëâj4q§—QS± “8Ä4çåýÆzlïáO)Ód$÷ñ†ÉSÊ¿Á£é¯¤oxŸ<+Þ÷”ÛíR©ü¿”kuÀê^€‹ #8y×ÞV>i¤á~ÐQ<ì鋜æ8_ePG€@¸#Ç`ì" øEà æÁáúh(ÎLA43+J%]Н z 쉰À¨!Þ`*i IDATÝt¤k6üH†ËGl Wó]D¨É¸Î7 Ú”o¥b_óµ-ôÿ Bœ–¬^/Ny|÷.Dûô=ÐàÖ!ŒûBuÚ6-Ei[‚rª÷T1Öó0û,¿"ç±QXhöÿH:¹ÍÅ…= ™rqáÝÁù…µÝ*Ó!Ò~ouØ=ÂPŸÌÙö/‘ÇçXû-J}»½&tߢs1Þ ²Õ{ÐËÿ·™=³¥5-“|ÑèæÊÖì|«Ûþöuž²gåáh¤i~6\XÉk˜ÐjžÆ…tcAcΜ;ëw‡½ƒbñ~®ùìî¿´_& &Ô‚À'ˆ‰Ä*QÝL5µy—쵌¸‘¯ZgPøïŸÑÛº “ÿg#V{Œh$•õÏÛ¦[))6±÷›Óë5´²¯› Ø.Abýês}ZÆâüß(ÿºˆö‹(þ_èŠZj®žÈnjµ¯ H·û`&d‰³¶p¡©ïy÷^¦µdú†º€â÷=<«G ë©|cÕmÞ¨ Ô˜»cC# `² BûŒ¬ËXÁUükˆpP  Øò@0Àÿ'ÁWb£‰‡Š‡÷9ašØR æpYCfXÉ«J<Î@éD îÔúîI47ò`B­ÁTýb³×– ÍYæ›­„CÊC%$á÷ ¥‚|¥(þ;P)`Ûê hè”9‰R@Á1è'¬öÎTLdz¶¼4Òß“̃ãsP„5ÈLZ;Þ,…uH•QK®ŠŒ;!"ø”gu#½Bf~5-˜½Öì‡>L%Ï_OSð§ËÚi­þÝ-¸‹¿8¶úÒÁ{ì"~õ ?u1Ùýõ󢯎£kŠqé…+¢2v~ô¹®±}ÝK2’©€¿'—ßKçGxµ£ÉíX‚TŸÐÞú±ºâò´ŸÒÒû^´…ÈQ;`'>4„²›¡â°¸& 8!v†R>W!8U<®ˆPF£fK2 /bHx `Yªs†h‘ ¤¢0AŠ«uNKj¼2X³¹IR”¨°ÚQ·‰ƒ/¹ñ9GpÀÓˆtغWnÛ´ÄuAhµ¹Ö†9ËŒ2]l#7Ó,œaa¶´ºðd8£çJ˜{ aÆ…õþ)Ô‰îœ?3r8¹ÀlG}‹'IÎ*ϱB_ê;ô`%Z=¶èŸtùÏX‹a¿¼ØÓ%ë÷$2Ï¡s wÌÒli°¸Bçíã·Ê¤ÏÈ6è$Ï[’3£û;–ü9&'±î?¤VºÙü9ø!Á¹GHÛ³jõÑÒpVœEt´Ú—[ßðXHÉÆéfxùMLû"nh­Í?{£4Þž«{ÌŒ ×›‡ %ä)1pªØüÁ½" ï‘/Sôô¦6p˜ðT3í³ p”š¨»YXM}dñfe¸ZV)`ÂÝFÁ ~ T  bæs¶Íõ=¦8v°› P€à‹-Ÿ;ÚEâ<g¦€®/â(³’®P¦M`î—xP!;V €)îÔ©8(  ÖÜã¡/dŠ˜ÀQjBö¸$vÑÐòôW‰:è5íÇÛ` JHðÝO 0—‡(yDo –¹Ì5GYþê$2ß:dDËÀ2¶Ø6P{”­}ÂúHÍÁ=éøYÖPÎöôꀇ@@àÔǘ"ÕGTÀ‡K… Xu‘ý—ë#€‚*r=áÞ‹Ê'—Ø“õÄn´ozä]uñ}QsµMò¦m„n"!pëýèä1 Qd¯Èõ¯ÓmÜ7™è?ÏOéºÈ`ú5°¬™Î5ubCÅGÊÜÀÓÚxkcÔ„SîD1† ¼¿àâîÄ8N<Ñþå&qjèá×oˆÌá½ÎÃx6höz ÞØá¡’Ä@»ëØJ`ePX©@êH=Á P“Jqµ.ӀРlx°(TÂd 4aW(7ˆ´€<â@j›Ï5@k{ŽkJOCT|îÂNš 4Õf+ê…ÀkˆW–Õ_YÄÌm g°p,[…ÞÉYqyîn4fC·TládøªwRÔÚ¼}V'^àøæ’2:˜ï’þ£€EìÙå˜|‚ÖüÃãYY-‹{3q1GK}Ji:„ñ.ß»]È§Ãæ›n÷*-äzÉ1,Df¡q@l¼bºÈÿqï÷Ç•gy~Z"S!])%Õ½m™åíˆn{—DÍŠhسðôt¡°Æ° /ˆG¾^dü ø"q_ù@~I€X@€ŒšÝ1fåPÓäŽ]ÙåJËuoIJùJ¡LR5‘$“?${{¦jý`Ø)23•q¿ßï9ç{Ž»lÕÿhì¸æûo¦{¿ßÝpŒhd€»cJÉX"­nÅ/nëò}£äÇåšefä ®JäûÌï¤ ïü¢y¹ùbîÇõ´ùG¿v]û VûÃÞ—O÷´«¦#Èçÿ›kuøä3õÑÃ)kõÞ§àíS§ëoÕ/Ùš8"IØ4ÞD¢-8*œJBÓ$Äù™}h?”f:ŽjI*wéWéºfôòª„3ÌLÑ×lëEC³¯ÖdTîoH'¦ÂZ§E†Ý1°¤cQg¤Ùg8ƒ3„™)e« Ùf˜aÛ‹\j…$H½×‡íŠñn™S8 µI;NæØ~;X•Sê.8xhZÁ¦JYQîŽÆÐ˜40u¨ÓðWédŸ¾ɪ ²mn•Ô„¦÷¥N¥nkÒˆu3:ܸpP=k¸qI]…¦Ëý÷­—¨± µ3ÅQ,2mû­iN¤á]d0Ðо*Û[»O*)Ûóz»Ø:6¶«ZHkTö) v:íÃUBEf tùÔc"‘–A»aœ;§d?*;ÙÙIç~vâBgèsÒ›2û‘:ñS‘ìüÏ›ÿ¯gû??¥Óûg>‹–4¶œsU:£•GSö²°µ¸HeÜ;ÿëùBÚž_…;c‰~²Ä`N×3Ø%1Õ½ìˆæÊ8«Ž, ɰýïL§}“`l^¹ïl É6m3ðX§;àƒOñXeb€†y•f¤ë}ØÁ´h™‘$:´€ƒA2„2go@ â.¦Êy„cúÂÃØì¿ÃÁŒ5Œ÷xNÏœV’o¼òÑ5bÇNO2SH“Hôª5 Rûõhým„PáõÕ'ö•5¿'X ÿøWÑ[×gÁUæ/7¸µvøjïYÇÉÃÀ‹É[׿ƣ«×åÍËx¡ßüË6½¬ ^ñO/¢ùsä­‡<åo:ѬÉÛó©jÆb%¼þâgÏV¾|úìæ¬¹¡‚º#Ç—«Î^Ì<æ·øÿ‚š°v§˜Ü.ÿJoˆHAñžÕ7Ÿ×üV®< B#¡ókL_9'ü[B”lhž}ñè°ê¬n^}Ô%àÁõÃñÊêdîê·k)åäqe÷wy/fÎæ·]žüê·üϸ¹úmxeSÄ8®×·¦×¢)RÂ]mÛÖÀï3öÞî«zç‹´«$1P÷}\„ÆŠFe<ÚY§‚ÒÕÃË>½°6ӉģÕä‹ÁVÜ?r[V:·îk´b—¼Âƒ0"¬Š°Ž0ÅàãL×™N½JѶo¡*dUB=€m]Hv¬jׯ‡ÄnÇÝ–•z3Ã{;ýDoHÃĨÜl:¹aUä¬}ˆ* A"ÆLE´vßÚövPcŠžº˜OcöcE ÔŽQ²J½.Öw‡@¦'û@&r¸Û+ÜŠ Øg"&F|¥@ Â(©D™iGµ£?om û:ÍÍIú6Éuë¼Ýª<–êäí· Švƒzç$ù§ha€Œ4W逄¸'b¤ås³È ßr úÄKíøOû§¤ŒÉiÊ:=-¨ù1õ¦)—¦–vŒ°o ®ò>óki}aþçä §–Ë ¤§ýËØ‹ŸðàÒµ0®É``NŠg¾ž£ì§e$®ÈIå‘€,?žF—¾§Ü'kúF¡–-«ô®e¢p ‰ÉZ›FC¨‡Û¦›3ƒ{RßÇ8‡Í´5(°G×4™–9£Œ4gµDõI”Îi©ÑQ º™Þ5݇L¤¶‚m:;°Ít`¼#A—!ɸ*ïÆb‚wØd]—û•\]Lj‡ºîNº[!f4\$Ü^í~Ë„çbeÕ\¯º/»Ó•—/ódõç‡û‡31#‚qǽóüìâiøÛxÖ}yãêAóh¾Ú½úÓGÔw¾U+?îfÐyêVW-+­òàòÊí—W^];|rØ4~å27¯<˜?Õ¿ùg¼3Z:Œ\×¾5ª«™Á>IHÛ?Zˆ€k ¨’\‹?ÂT˜;è§óÝεšçz•jüp-¼;uxf"¸ãÅKñà2ê™g&¬]¯g?€FMWkÂͤ¼5oæ‰] xä6àcö—Z:3‚HF=·5”»=·»E¶¥>ÅNv£~]4Î 7”l¤ó#ò6q°®‹¦ÚôñGΔwµ}HV…Œùʤh²j˜‹š­t}+€»¶˜‘:J´u»Ô÷BðªÀâ@êT¶[­Î‰7\ õÛUl%!…g¢uzN®«¤^c÷#¶J°}„NJvEÇ„£é…¶õ•±!cÝ„:º÷IUâ5˜B Ñ‘¦¶è›9³jؽçý}¬Ì;êíÛ!šg|‡W×Gß4X`Üå*…µèT2L¨¾5jˆeGû#_n+IÛCy¡w7ä‹Nq‘îåZ¼ºÖÌA±î]„0.Òy9K;Ÿ 8vÕ,‹¤¹×SžÄ¿q_:½Ðìh™¢ÈÏ;ÿÔ3ð¼çõ¡¡¯cS–µBý?1ß O‘ïG$OzA2V¹‚sÞ„ÙEõ0{í ”.…G3æ‰upŒJ—^4ÅGÆ2-q¿ÕË–°¼#eqŠ^LB;Iñ¢“ŵ¬üÀ”;¦@1=ô^¨оõI€Ý$7½|sÓmwA”S`ºGÕ¨èC¦í€¥rpøI5à!{™F,.µ½m¦¹éõuˆ.ÁnS†qò^¿ë±XW8ʸé`'É4Ø«f¾ª ~ŒvëFÞdõ…®ûÇWö®]o\óï^ÿ“¨gõW+×Þ™©ðÕ ¹zõÙácÁaÐíøÃ•QøJÜ:äûO‚ø·V®põ«‡“•6EtåλM‡Î³›·nŠù µ²Âí«þo®uçWÅ çå‹ÃƒKÞó¯ÜÓçÏW]Ï»okÛ1÷Bõ‡k¦¬¤ðØmmR´ïT£†Äƒ³åÔ_ƒ¨j¯ùª3Ýš}ÍG«<À†N¸ñNp[xüè1þ9®®­5µ„i½Aï:Áf©µµ·¦Þþ|ΓsŒõ£}å ^êÄ‘¤f«ÈL-·Ê°*¥c'¨þ–G§¤¢ïì~íb+t)UÙ1©·“÷v‘Qòp7 ãX}µ»Ê‰{Y}œD_HY`ï¢ITé´u’Q+R\[‹„Fjåv ¯È‰ŽÄÖ ©p=±›ÊZHSl›H’†x(¥!³‘ÔÖUç‡ÂàŒÚÙÝ\Ûˆ‚jx‹w©™­¹k”Ttan¸« ´ éúݺ~hJ,}óQŸÚ™Ô™žÓ…`è*UêFµŽó»÷dX;”üõ[öúÁøÕaä§t&Ü’?Ú×6Ðj¬£vŧ GÚ‡„^¹JÑEn{àǕ퓀Í@P¸g¶’E [ eúr¡ÎJÑí !í£Ê-– —ãNd‡Ç¦8©$=’-B!ûKÖm§÷™—1^–¬}ÈßpRqlÚÆ™®%ã´$÷ s‘.K]û¯ù±%‹§ üìâå¿anXªQ¯¯xåEŸŽÞfÙãð\©/:ˆ –®_o:øºÕÁã Øå—.—Ë’eãRÜ뱩j« )rThÚž(tÚ­›î¾š¬Ç$†N³ˆ®ƒ[Dú!Q}Ä€ºÊ‘€däLÚ&èfK^°è£v ^ ŒÚD ]oö„f›Í{T›.ÞäèÏa·­-»éôž„~åq½ŽÚß]ëíu›pc¾ûìéÖ­ŸWÁLðÔ77å-Üê\\zûNp?þÅ‹ÙÁUÿÇ•¹k¼ÿ»«‡Õ¥5ñêÿõo‡âÒß=yµË¼¾µ=yÕ}'¸õŸ=Yp•[â*—_¼|>½ÒyçÉ“pµ¹ºòW§žýLÎêî_Üxxù¼yëãgc¬ìMF÷n] è ¦ÞøŽfb*iâa@Ýì*_ãwc;1ôDü:ØrÎtaâÔ»wy:‹›d·›oq÷‹½k«~çþJGH3–µxžGõ”Í.­ÅxÞ©Ý—¤ûɰo‚Ü6É€a_÷rC‹t÷û,­ˆþg½+ˆ£¾a {‚ҥǴa´£œëô’ªÜ‰Ù6ä: MÙ’YMB9Ð"azc]„FIÄWôBÍ6eŽÍ 9›ROúFæúž4…Si—ùBY¤ a›¢’ºAXgp€âýøƒ±™K¬&߯aÀCG…«vîÕ¤IP—ŽdM}>‘9²Bm¬"æñܛپv² …õ^„Àoµ;e¿–æJaA[*å ´ŒÕš\ÛlŒ÷FèîšÛ·Õ‹l~ƒÆáÆ ŸŒÐá2Óh0¥#AŸxnJp‹»cqñe;/ÎtIÚçTTûÀàÒ¬ceçB““fg$üæx+âT0e~$‘‚6P:á¬ôèÄ‚3;}úí\àÄóãÈÊO?cÝëýS‚µê›'†3ü÷Ó)õ_³FpúS(.,SK…·=|Ëó{†œ 5Çr´eÒ…iGgt»Å9 (=íãÔZé%ÇIR'ÿÖ‹Âp²¢q”(’™ã¥îÂUEN„I¶µ¬Hƒ‹¦2¶û$¹>"É–0÷)ú¤¡I!u›žc#7VrFÎDèaŸûÒ}¼U "³îµí›Ú‘l“î·.›:Â0`Ò7¸xOš–žÙÌƈV9Ef”#Êãîû&jXcˡ˿5›Â\}ÊÝ’o™ÄO/m]–‚«ÍêU®¯ž¾üç§ãƒÕ?®#ðqáb„©wtí(ÆØ>¥cS¦ö5:`Ç#Ö«r[3Ý*U”ÚbTßô¶u‰Á+üf½N16÷óʆ†*c v î±[ À–@¨:}ß$娥a@Ý5Gä4¡Þ¼Ëæ¼BªYS]=dÍãšJÜá},·Õ´¯ÿÂ…á×oÅ3÷qøó bŽ›ïN£°²}ë»Ú‰ø¿•®›4¤¤ú%àbëtâLDœH¬Wòý5äLÉ©[×jÝŒ'úñc¾«ÿ8¦q8L"±ŽÄñê.¤¡O’é²½§$i¦q:…bÿäv¶G7¾jí@vÙ'nE_“QôͱŒ°xã¨0Ù²ƒN—›+õÏh#l-N°t)ÛçDŸ’/ª2çüïΠ K§n¥4ʏà4ï_tæ¿_(ý£ØX¹^½õïL·Kx;qç-°u…ÊqSC—±0Åÿ©‹16³…Ó Òõªx·[G}Ü|6k9†Æˆ} šOcOL_cO!ˆB3”† i£Š.1"PKŒ`Ô\›I czì“ÚV…Á£À¤GþBÅ»» Ã8ÆpLzá¾ñôö—Ŭzi1âd™éħçÂ|K¿.ÎÌù½·Üƒž—¨æ'òΟ²eœœ^Û¾`íùÍÊÒ?Qm¸¨y³)à@ŸôïƒeÌœ-‰ÙÅÃJyzòxÃK—ùk¤ÁXïµÖIúŒCa‘-H‹ :Ítq¼—™"#,h‰!»äÆ÷µwÕ|Ê ì/îaÒ)1- Hêãª&¶è™iéè ¨%“,®á02‰£Ì$¡’§Î>í˜Õ¯¡n·w— µ`‹D7ޤráKØÉMé Þ M±ªïƒæÆÜj¢•9c"êÎc=ûÉ•oÌ'—ŸÑ­o0b•?¬ºƒÇâÊAtÍJw0Z¹mWV…äÊ*KpC°â®^n^žˆ³ÃiÌ/weó—|¿ZÏî¬]9”«^¸?^¹ñjþÖo{!;×.¿øá÷W/=sׯ¾lhšo÷žNnüyȇÿ(ø ŽØÚ»†úDköŒÛô.|¢7]È®*œþHîeL©ÕXã°I½V-s“W~ŒÝÉ1#̽núН¶Ü~­B±Ö©Ô¾UžÈá¾tb2Q¡îÉ8É©Ùí§Ž†v ×…3ÖðÌM:P Lz¤¸K¶a‡r‡r}k¥.rj |–8¼Ô@í(`êÀé T‚Ndl* —è:ÔdÍIÀ:ËÌ(LwݤT[°¦6=±þCHÊ.Yµ1‰{ý˜Ü´I™6'ñÖÁ5zˆè!\õM£ü-1½ÌÑMˆŸàuosóç¢{…ùsígêòUÈêíÛ/¬¸¢V_H¾¯º×ƒ¿oŠQw¶eÁñ¼¢Œ4'¢²w«á¾MJ²AoÇ&“_;W[¯A Oºˆ‰±ŸšQ¸[ "výXwÑÀl„ DZr´ÏŽ<›Ó!iCæçrÚÇf•ÍàH¡ ª}¼5©\ ÷DÙÉËX—-ŸV9æ O[G‹bcÈ+–¸âc¬¿\xB›ÅAÜ?â®óEù)ÏC&'ÚH}!˜s1æ³Ä@Kù1o¡¾$?o*^œW–¾ñŸ?Í^ôЮsZñ†`µÓPÚrìÑ›ö¢ß ´-Sù9ÃŒÞy!A»X¸dõ±,K8Ãp6{ðah¶õƒ£g‹0mòmrîm”ùsà3’îͽÅ2§R¹µèM ‚ÕÀ¸}í3È‘pSòÍò! QÕWå°”D µG ôŠÕ­’‰-–ë8Œúžóå'†–}úæÐ\óÚQqËÞº¾yxõWÝs8ß¼ÂÞÁ«o=bE¾z:þ¾«Ô.G›/k®F³ßúæÝŸ‹[/‚ÎKw©+o^]{¾2›?{6çÆ¡rO.­]åòØ™®|¿z{ír3›¯^½t0ûnåðÆáåË/¾Oèþ®™È­ðÐÌŸ³wMGW¾¨í)§ Mâ¢r\'ëQ‘•uíˆÞS½¯ãÏSw$ì’ùK®7¤9Rt!IŸÃ$#ÁSfحƩŚáísú^£šìÇ6Ûe°…•ÇìØ¨PÉíøÞÀ|.øÈë¡Ûíe[ÅŽQcmO´ÎºÌvjvT9Ž aÜbšÜDèTH²M‘“®›b_Â%¡Ø!è2z Bc=H&†5ôq-H·¹ÿ)ég{~„Ój}w­SïM.†]²­Ö¬E®«Ñ~œ†žúŒfÍñѺ*:vc5n«äÊMÖÞãÆ5ÑØ-¡þáò[ÿþù¡:˜[þ¸ñ×òæüþ8{´zë;ÙgŽ·±›¿R%X¤bÛì‡Ôéá]zSSl£rÚÔèÅå-ÍPêÚÁ<¬ñ¦«&`3»±£GžsFŽ´]:ëq‡'nw‹Ï¶X„bca ât*)ú§@à°èî èav$mç">òDt"5<ëŸN‚[üïêcšóÇHÖcBtñ×,Þö)3?qîûÑ]å "~t_ú_¦ ýÓïE¿äÉ/ð×KÏ©KÏZŠ}I~îñüäƒH/‚Š¥Ï±8š<–}[{K®ŠËŒH:8Ó%•B‘-Yõµû/}>ÊP’o¶õ8¯ÒÖ@=Ðv°h0OrëLd$PgX ct™k…&·IF2qìmóÀiŸ´v IDATaóÖ6‡`jdfÆÃ怲íž2¢8jIä°ÛÔc>ßÏÚçí:®A ®š¯o±£CA³£;øJ¹[¼%íÞ€ßïÂõë“W7ÿðòÀ¹àÕáƒgêొýô[½úʿՉïÀ¬Þz²Òð–¸q•ÕkÏE·Y½yãò;Ïn¾#žß˜Í˜^~üj<;tî÷Ï¿ý}ûÛùc&OŸ¹?ø'ÓŽÇI×]kvýœÙL)ª þÕÆ¾–ÿŠÄGž£Ây5ð 6ë'vu©‰¤Èêûy¬rÍÈ‘®«£DõyÆG6§Èu‰ Æ$Ö&ªÎw­Ô¶1Ó[XYE¥œ‘É6Àš·¼"ÔÓm†}jê"Gy-2 j5Íź­"WÅ8N °€ÔQ^©u]g¨u“ŒöµÊH·!4cóªöfô „üý]¤'í+ՠض€êrÿÓ/F3a„`sý³„îÞê&k¨õJ…µ*«ûá®ý·Ñ½}±šÒWÊ7¨€)ú~o\‹`KòŦ0/öpÂý½­`Õþnßýƒ>ø†Û?lv¿Êgß¼ºtçò#^Îíøé ìºZ ¢pÖ'(PÜÅcÊmH2èc³Š#5`´¹ªlJ»SiźMsÝl›ÔQ ¡6¤3tGÞ6’";àªüX•»°9JÛ̆la­ºhómŸnŠ\§’"3dºhïå#›ƒ"_Œ é’D§8-5R-¬,ý…²èöÿÁÔÅkrVÏÔä#¯¤å Ys²Br Yæ¦Ì´m;£­È²µ|ÉNòíÓ–InZRq‘‚Gµ>k¶Ú¤ø>b@W˜½måtCèV³Ob·cÞÝÖ_ˆ„»loùE몤¶}£$NÃ`ln†¼­Þ¾?›ï~ñÃÖcæACèÿðs®Ùj:ç]3¹Á/V¨ùåøÅóêàreÕ^¾¼á.¹[—øþkšŽ··~‰)/³fÕª’]Ù¹}åÆ|Ö¹qùù³`åÕ•[¯V›k˜~÷ò¶}:»Äáuqð®ú›‡ì_Áãæ²ðsÄžï†ñÌW4‚ nЈ]ï¶È¯Œ[×cÇ(§“Ì”ÿ;| ()Rªý‘•*úq™2Ý~°ŠŒ]8DÎÔè4£(‰ö«ž´%Ñšðøx*‘ŽŽ(Äû]úµØÑc=©Ó­jÅf&E—9H¬«T&ÈI6FŒ”Ķmu¶8Žk*œ-ÑVVȘÄÃ]µ1Á¹Z+!£¤²Ž”Û¦,#œbì)çLjuF~¤œnå*TÒ €Œ¤£gÙÁõÌÖ·vçW‚é®ëä4¸Ù•ßÐ0»‰üxÖÔ«o\ÛWF\âÉ‹Ë7Ä5þŽËŸ}÷’•'?íV|/›ñÇ3#ØÈ¢f§ŒM“é†RC‰w:é/ÌˆŠ JRGéP·Nà^ ûÆgPjœ‘ƺ éæ#§?ïóÑq#Ÿé±â`±Ùp¼ÄP8R ®5¤:q`³œÇ^d¤m¾ÞR“^r¢A‚Ó¹[þM›XËÓÀ©±àø ,ÖâÒüœe?~æœè ²aïÿ/Aþ”sCþã´,%:¶ÂN_·ïw”s” ‡—#ÂóxÁË÷¬Ý„>+…Ê/’úf§ çlié!_Zfá8kÁMeÀ.ØÛ+ ” {´Ð, JNç’§~ P„$¹)BÍÂ’ž4Dm£ÉÀ¤’4¤›9jG’S÷™x¢œfoÌl ž˜ i|VÕÁ±h2-û¤9‰ÓC ¤î‡~ŠÏíËWÕ“êÍy%×XÙ×ú×9ø¼zˆ@Vôšc\«o¯ñøÊg\få%O/sù{5Œn±Æ¶â`Ƹ6ÿp™µçêÆ +¯t¹ñøàÙÁe¯<ªÿ‚—óéüéô‡Ýgßr‡4Ï~ðßà¿ùîãñï\ðxÎ÷28Ü ç=1n·!nßt”dPá«&T­¬¡¹K©äsÖ¤Nd|›n„Ô©ˆËÐB´´)`q*ÚiÉ“‚îs£ö+2”Q"ëi»¾½o~)PTõ6–-rMP±M$)ØM1‰4ºÀ$`û¨0N5|œÀ½l”†$N¥Y Œh¨Z6‚DܦzDÄ졚‰ L’qŒrÚ:X£pUáùu®Á[±Â/Þ›„X'hš¦7"ÑJ§#´ü `LuŸÇ>¢weµ·¾+Ägþ9«\pÝ"éÊÿeo?¼ñ•hžòŒzöŽžßÞ¸uÃ=šoüñš V]0ó«¯vŸ½lÞúáãßšæ7²ùjTË]wW£Aí=~Ì=to‡b Š}S`_Û~KÌ ÷¢š:4Pmk&hLðo±;Z4&¸±wͪ½D—}>:ì– …ò¨s_@IýSòñ#JRŸSèë#/Šc 祼¯czy)ú¥\Üòín„9ZÚòôQv|Œ´vâ4ÄŸåMÓ×Fœ&²s/ú^¡xCŒÏ…Ožÿû'â¢_ˤgoßÁ9Õ×…„ÌYñÒQðÓyÖ!;?¸™2;ºPWï£Íµå©ªÝsIóSR°$g88Žî9²“W´ýã1h!™8y·Ç¹¦ ‰û„Ò1Húö"6÷°9¶õ„é·iò:•Ô©4÷3ÒÜ´¡¤m»4r<çôd ›}-v, >Çu”  (¥.Cê ¼I§ZÞåfP]¾ÍÌrõ+Í 73Þçf. Âxm²åœ]ûÄLu`§ßÛñ÷ÍÁ·¢9„§LÁ­©ñãÉ?½½1¹wºúû§zú„gèï^M˜>›¾b>ûû仇îpêyú|åiÃJø›<£;ÃÉ{}Ön>žq£ã~»‹°k¡™,¼=âzf™RJ7ê °u7Va;P¼W—u™R¥¤1}AÉgö+­¤ÁQ49å˜[{Í¥Ó÷]$Þ×R[b‚¸¦[‚ß÷$>Ô…7VÆ sFÝÄ ¨©¬ Tá´ÇD;ºÈª4ÇúÝ¢¯mfJ¨b¬ âû¹NwÚµÊÖŸÑ”YUlr¬ˆkgÔ@f"§qô¤.0.ÛµëFI»*kÆÉÿ+Ù—Ê?õÿqü ð°å›øÞçZí첆 ©¡³.¼ð@ÊieeíÆ[Oß#êxç¦uСóRÏüÇ{ºƒ÷·þÆÇS4˜wþ²c_ñÍ|ôý?‹ñSÛÌÝfõKWÿÓãj²w£Þ]H¶’I ýãà q*QN×j@™Óú¤R¢2“ªî±mÐö!b[7Ïtê ¶Žu(«ñ ý q+N-wŽ h³&\ Ý[‘cÛ´Ý¥´²6Ϲè VɸŸŸ²S+Nu{úÌYrôGÉ÷kó¥øüD¼TKöGèÓqÒNëêºýZ1äÙZ²|fî,€ñ³‚û%Ëbɧ‡‹r”/>„ó7Å?­¿ÿóbJ¯ß/^Hôú_¹À77'­D~1ã}¢V~ý>È)òù),h穤ÓhÕ1ñ^öM²*TV-ÂZŽT gO<Ü ²ðÕÈ«(Œå˜­*Ã-8ù!øõŠ$~7穬F.VGŒt¦ƒžd$P‚€.¬bæ5 -NÙnüáCž®ï–ƒp¿zÅìÐiÀdbÆŸ*&v­ÏäÓÈNؾ¹¿C徎;r—ÆO»qð¼0Íõï~yíoþÿíóÕ.~vpù­•Ã'O‘âò÷öôåÌ]Y÷Atç|¬æðÑ4.‚Ju“د&™ébߪÈÇ=aÊ®bUÚÕ‘z®íµÝèÊVýx¼z ij¡Òq\b¬¡£qÕ“¶@#HJg¸ïp`Û¬@ ®b=¦©¬·›a´7®#ßÖ"7=T™ÅÉ\–Pc“†ªô$Òû*’¶'(·±¹nÛˆö¥Ó¾îT~ÛÚ¢oÉõbßJ†¾.‰ß¯’,.sªk3Ø1*T"°4º7¦\ÇRáĆ Û¦ú¾Ût]—±†*Ú‡÷ñ.¶’9÷®™ûßáºÑ»³àìuF Õ5³~æw¸ŽªWíèA•>ãþ5»v9ºüžüí׎okçµx;OªGûöL»A5"Þ€Q«‘X®™Bj’J•q’,d‘m-:°\·×˜…43ä Ñ=Ì}ô6ïìÍØt|$øu?3£}­²#ÙO®OyìèâÄDÙ,Äâ˜b Óþ‰–?9uh˜bÐú/ ®1é u¬O¸Ììü 훜ãýÖ‹=®¸ôâÍÍûyÁäy†üü®Ø²jfpšŠÿo{²ÿ¹èüâ÷à”{Éy~æÂ¡i!2;³žžjó‹s‹!åEEû‚üÕÓÁÇ3©jQHwô<ýÓE8?Ý)œrŸ5 Æ¢ß.¾-,‚A'™J4h»4K¶ü[éZ‹G“b¢ ¦Þ1÷¶Íƒ 2£œ)2lF)é.9$®“™d½"DöËø(#´!é•Ïù¨d¾£W‰“ùÆ»ïðñ¬úæ}ãöý¨Æ8âÍ5ÖѶ¹Ÿ¿Ïx “iŒS“Ró°Žœo|gâÎ:PO¢XÞ€*qˆ¼"%ß\‹V'nú¼{íåŒË‚—ßÿl6[›9Å‹ƒÕÑu§ÒfL̓UquFIµy »*¼D°kW£Ï©Ô]yëÅ6+VnæÔwÕÔG3¬4ô£(°÷16Ô)¨±ñØRcʆ6¯û^¦ÉZ_ #6ŒiàmmnL¾ò)º×ÕIizR2Nrо)‰É(Ǩ Ʊu¢líç\T@BDH ef´rºÌMÏÛ$×Êź= LÙ§èë‚J®UAcÀ²SñáîpÝZtéX)`×(˜â}#öwUBÄÖ½ÆIg¢®|´Mêû¼Ž*‰ýÝØ;k»¨9bFùD^ ¾üùhÏñÁCaú_?ǣߙ٠¯V”Ùü6.Vcù%ü,xüxÜy¶Õéªõ÷ðÏÍÓ[±¿«ÿý€f úÆ9”c³¸ò…Vû@l[ ﺠæ;°£‘¦À,ÌivtÑN«R$®›|„QY•üßïî®`FN¥`†Çøþ¼£/n«ÒL§½¨}h§ŠÜ$9ÅàDóJ®Ó¾>¿–¶Ÿký7Íñ!³‘N/W _×Ôf ©ý)/Ñ3«mGôFú¦õ)Ž©¯r9Zî4ú&åmYÅÖ2s}aƒ^\8Fäâý†7Ji~v-™Ÿy±ÄË/¾€ä ù© ”¢§ßÌy$npƒËO#’#m²=Cë/£en†ÇKÿKÓä1]˜¨éeãߺ5 Ýü­]¢{}@·³j1€Ò\#µæ weDUK¼3ÉN¥>Õ¥³ ŒreÛûÁé¡Ó6‹‘æó}³0Æ”“Ÿ~kÿËËX¿Ú·=Ø“& ñ¹-dÅ{fè]·4I°{ ]ønw²b®v"ñˆ_:šË¸Ëßw¾½ŠN×w>^Íž7ÅX¼ÿô|ô9³¹ pãySŠxˆe¬™×O;V¾m÷žˆt¼µÖ1õ¬¦·5ÅÊ©í¡ÄzÅf‘ÿZ$Ïu´êYõ±o@RçÞ;=’oJ§m†E+¡ L$IÆ I[Ké+W™vºFnùõ{£$ŒKLù Ã}]"p”Ñ@'ÃÂ#V™-ûUÜã³t1¨Ó1EnfØŒDjúº”&ɨsŠ&#•*tǨҊÛrÔýÀBÑÉ×ô„J3SØDêd½Š!÷Ù«ZÖÛs†®p(?müN<›¦ÄÔ»c’‰AêÍk•Up§âVõA'?ù8ºÄ暯Ç~¦ybÊ'š[4nÍÆ[°Ð|È¡wó?Ä`ÿëïÌÚT戩QPG¥’¡‘ëÆ¡Ë¢Ð°mZ<G™é“B*©%鯨¾N¥fPl“Ž50죜ùÆáf|~ÑEŠÝËOë+J),­‘µ;!`޼T3ÒvÉ43­(¨ÈˆS±x\“‘öÛm8}´YfÚ{dùLh©#ÀJ/7Ž6?ÛöΜžùrÅâ8²Xîbó¥eiNÝÑK¡2æÔ¹Ü?ÁÉO%œÊ'¾ðô»èäáÂ(Lýº6=å¢êrLÍæÎÚpŽ àÔ‚øö8 Ëžù›øí";§èÊO#TýSôp©P•KSÛ™ŠšdçÞf–â–§" õ‘õl18Ù¦^®‹EvÔòämúRúy}ŠŒz!eFš/RËÅ„a@§Û¦”$á(2åI2¶©ÄJJ31Éšz±ÊhåÞuF Ò±·Žsô4è;ÿN[É7c•ÔèafR§‡ï‚Û¡+bû%ÒíkKÅš9ÃWŒfzÜ ÖÐ&[¦tÔWã`%X¹>wnÓYíˆÝ}škÝÙw‡ëããà Ú˜ºÉJgÏÉÑc/¼ Ý[烉Í´{‚Ú§Ì¢µ±³ëMW—.®Hµ¬õü¬ªŸˆtl­øÌú6Th­0©3 ‰Êu‰7€wæ×r‘2Ÿ PÚVN'êÞדjøN•8€^ˆ•uб˜^Ÿ"7µÔb‹Isƒ4ifŠ,¶h<ô)3º ]l4­ß:U *…]†¦À20Å»ÏüÑÇÑÌ©»šÙÖPÖ÷ç¶ØQé€"Ô¥0Å>ràGª=GRE;j˜ifµ ãzãÑuY9 èB*qý³ l¼ü"¸LxÙÎoW¢cº¯˜ÝñYˆñ.’û¦3GtÍ;A<ÿ¡yŒÙÛ¯Üs¾ø½úÌübÆ* á£ÀâªÞ¶¶}Ô§¦×ØQ·´|ÛH߯Hú(ÌF£¨îCéHû ¡ \qáâ£NȤSC‚Æi٘ɷº;U¯¼þ‡èÉKÖ%F¡)Àòèi×Ê\­é@'[&E+wbÀc—ú°E*Lÿä(gI×3°Á2˜qÌyí™c»Ž%'³ *_Gê.''ž>Á¯Î¹ïvâ¹Hêº [’ؘâõ]ÿÕ%{lÞ@Pÿùvß^‹;e?YÚ‚nǸ?g•agv#Î-Ó¼JyÑJÚÙ‹ì¬çí¹Ÿ4m<õ‰lñøÕG‹øÇö^§æ>½ h¦Ë4É)+à…bO˜ØÑÃmz;”cl»K•®uÎ(°¥¦1j¬CxpôŠé" Ñêh ÁÀ8G"¹/´CF˜ãª7¶%ZfÜÛ1÷·i .5·H/ù|}wï–WßÅb\Õï[VõÆM¸dÖ^n^r/¿çÑ;öÎKž®Ò4QýÈGwlï‘.’Ï¢Á¨çT±NDìc冚7rÕ7s‚™ÝEÏU=ƒ}K¨69¨±cmÕ_Y¿«6éªÁCxË:“z†è^Ÿ¢„ ò»½~=Ìñw•}+i’> tk䉤t¦õ*_DéIS@º¦Ë‡Æ¢Uˆ  ©ðàˆ°½L˜ p¹N¨ÈâlNš™2W6‹[УÕJb½^“­9¼ ë44ÅX)i…#X× †Ž®™{ßQŒõÆÝU€]µéÅz¤öëDª_ ÆcJåß‹ÝsNôƒ¾Ùø”ÎC}õ}VþʼˆžÖÝ¿V“8Ë»Wâo0ÔSñÚœ««æ‘§ûsfÿ+®ÔBìJ¿EcÆhÆ‹¨Ë6%m(u ª›þoñ_z®.@ `J4ÞØ>ÑŽfÛô È5™IsJt²|Ê tÑ_ð(€’¡CÌ8P¿ >¼cšTœ]¸Ïºëûb`R§y£‚³8¦ —ä¡EvñÂì’ÒÔ°d®·¼ê´ +¥? Žúî¿þS¼ã^÷Ìç NÎ9‡ÿˆjÿ4ðŸo÷­XÏyÝg‘…Š7|ŽÇj¶üT™-.ìòSó§Ó@“³s̰òè=¸óB±e-ĉÿÇ©Jsìü¾dﵸšGÆ‚ E›ÿ¾s4{æK£´Ê ˜d  4Û¹)Û|Äm”„\û£_Q¹J€}ØÖ`&º»xŸ TÊScz´$-ôõh›$Cä<Èè½!3Úaèõ½Uïh:&znŠïøü®™²•þo6ã¥ý Ç¯0vGÿ„»ÒÖaó8 uobD."šíW¤í§€; 3©72s_j;Ö~`†žÈWŸèžÃú8¤YlÇëÜ듆 »q/„lAr–Δ¹)=x¼ðÈ’¤™N1Vêbßôœa_Ó±{ДªÖ½¾N< J­»G2ÂU)£žD„ÚF}¢F¥Þø0îzø_©uýP‚È^ÓÓ¦SVÿ’›¢ÓZ=szÅÌ€N—¢Ó‹ „Ÿ•¿ù^*'­É’I–3ò×1†×Ìgp§â'ÈË…í§ü5ÿ4µ!{ãûËOIÄŽ.‚ûÃä¢_L–>…¤í…OžJ¿n» nz‰Ò)ó³4”:ÁÒ#uÁѵ¥Þ±ƒ“gê-Ë3ÒÜ,4Ú­×NÑּ̔G¾ÿm$l›Òsdà¡O’[í#•=ºâ§ËÅ¥OA;ŒÇÛÜ9V2‚^Â(„þÂMÖ¶`”4éŽîIlÆPêúSSæ¨>½›-º§b€È¸2CìØÔií6ʺyhX3›‚±ÉV9½‹ÙÖCHSì“:¦žž³£(ŽÞÚþNعô£úžÓu¦Xí8}Ÿº›Ä‚ÏFc>¢ ì5›[nânV±£†-ƒ  b]—‰L{ÔÒŒš ‡ ÿ+uïóbIvf ž.UDz¦I‘ʹ)½²yoZ5¸C‘±(Š®.  ± x‹I0°E/|Õp±»˜¿À¸0Û¦÷òmÍ,.äÆÀ)pHÈATw•˜‘("z wJÞ£5ž)®MVºd’gDj4‹{Íìš={?<"2•‹$qþž=ûñý8ç|çC%wõ{z†EAhK ÊàX—aÖ‰Až¿Žú˜/ Ž ’8$pë²bÀ‘‚Np©DÀ,á °îƒì»çœù™^pÖd „+@^ÖpƤÂÌdA d ‚à6 Ò7à·åê6åkÌgÀº>Ež&·îèWX1§Q%hΈ]q·t¸Âýß”OpÞ\‹Ó¤<þÕ¾ø“Ï›ÓçÄ~¸¼ýܽÖ<{ç9~Èþ:ùæ“Ô´ø…X]—_ü¬¬(¿‹ò' *ÌoæäÎ <ñ‚®cœ&` û7âÇhÞ—Eš`hj‘\g¨Tšå|چ؋5xØGÔ¦l=+CpÏ ­2àøÏW)fÈùIÕÚc­äÙûA] j¹:÷ ݰ‚jçŸ[¥S·9x4¢£ÄÞåÓ [}czÕËcž*¢£7þÙÄûC3ÑÍÒN̬ͷÅt-&²ŽÞ;yVìŒÏÅ—šÔÓpŰç2ö|ìz„ ’y#‹Ê)!×™ƒ¨*‰Òp¦û¬Ì ‡×ó¸W ä[ì«Ã°·'ÂŽYäÂ'†pñÚê@¥3NÙ dQöœ¶4Ý.r¡ 'A¾U·µkGÁÛŽX×ÄgÀ<'ÒÀüÌ›øB„ZTkèÜÐ"/åµ@LùU$ä׎"Ǩ@5М‰ªÆêjŽuzšañd-d#®ÈÎpŒÀ" 8¨š‰¦n@áu IDATO©ùo›yÃ×ïe’’_IÉ×sœàòL<±.ÌßÅ_aå~¼ õž|.Öà§oŸ^•—5ðŽaqEÃ#viAòZhÌÙúÜ­ês»&½öØ…ÐK¸XAhã,K­*1PêzŽe9oÊùSgv}…ÕÚ-ÖsÇœ8K›‹#\² dâÕM’1QÕ€Ùõcw%2…ª&Ô¸x.ôP_€œtQÊ\d(™¯½ÜE"+ QÍb WÀ)€7"[§8£¬à  j Ù{•"<xvtZ8GCXŠ[†‡Œs†g7Ž_=Îj™»~ö¤q+p$oÍ“ï$÷¾àëÿëÏëúmà»6_ðúø@Â}‚”5îYÏrà «õcnÄ\áÂg¨ÎOéåeëãçkánÒÄ`n°*ˆƒ2Ъs`ÅP)¯²º]p’€‚+|ÕÒÖãy ¼µ9ˆ@ \‰‹šŽd¾FÕr¿¾Ü GØèÙŽ†(Z) À¼ |ºw@¢ˆŽiê~pUG;ÔO(5*Ÿ~–­4ŠK¤‡Õg¶ï6”º I†9pËîõ6æÎÖaÓ»Q¦ƒÿ})\ôÞC£ 춬0&´}û’:K“Çq£ždà7së3$†åimÀáÛóÛY=¨ù·O\þÖï’|m…{§ÇŸ^¾þþÛOÓë ôŸ ]Ã1p&’áJÜ€p"š+:fâ‡(užò%²5ªY¹jRäÁň3Êjè–=îÇújOäá É\ŒêtÎÀjÔ혛F¼‹t»Ž%ˆ UƇÓ!66ûÛ?Òd™)!S!Pß+Ä6+ÓijwÃímÁ²»ÃÃãg¼’z°žZÝÁúâð#ùЏh½»Éˆ²b6yÄë …V;?.§xÑQƒ"‡oÛ%æ©hÔµ¨ÁL,^v‹aoh–·&ä¾kV¢·†‡«BpY4™A–CŽ3¤­Nº;I…¬½üÖ€+„Ì©ööÂkrí:}FÎW>6‰L‘Tb&yà»Q¤™pÁe¬L€¹ MÆêL8À¤gÈ€gµ@F\ ¸YðtªPÊÀåx”#SWpK!sd€ndCn)æÈå”5´:†¼"(ð·<)oPòmñè§üá[ŒŸ”üÝËŽ÷ 8;¢Õµ¨þòÔ¢n–„5Ù«³•ª³R›ù"+Îð¤)h1ƒßua›Ô=0 p nJmÀg5V98ð$K ‚Z¹5ÿ‰r¥TÂ1Hp(pEö ò x¬j’€«Ÿ‘SÇIÂ0Ϲ.€<­ (¬€ ˜çCI«lÔ„ZpPÖ¸yÓ"Mr¬Šé’é%Pc5ûÐ1`]cÂmÊLy €9ÎP‰‡W§óe²RO H놻å|‘¸ÚÀ—µ¨ÿåqsÅoŽÝ7À›_áŸ_Ãñ7ø¿MðÎ7Oßø#wý1ðcм?€¦)/Ö"+0gâ{WXÏ®ft±¨™¸É¡‘b‰ä ÍJœ¥kòÍ1XPˆr@æ$Avy^Í`ë¸ßn«„SµÐ* ?}-\£žSaÌm!ý´A[õËn©Ž 4@æ·ôÔC´¤ Ê3¡ dý3mˆÚ‰G¥ºn¥®rj«Üˆ3}^Qq£—{nD¹l[ÜS[DPcþ™0$Ÿš ‡m‹](ÐÄa¨¡öropþ²ù9ÿÐ@¬vnR-è¿Éž3"ÂÞPÕ‚?S§INnånM–“z“J€6Oðö'óQ“F!ø…«r”Pä €4ÜýF &½ ónþÚW]iÐzªdyG À.ê¼òvK‘p»vYÐ ]§×ÂÁIˆìŒ|SèTXå]­c3w <­XÉs®oŸä¹òDXjîÖb®Ÿ=^ÔX)p®°ð½&p ,–e£ð0/å’*?.×@2! r@ÅxcËG˲±%ð׸Xr8PÏk’G”sjþü/¹®‘ÔHêó'Å{‹£Çó BBžb½²kqœƒ×˜×@M3æ¼ë_àÍï€áñÿöÖ¿zóõ£ïÜüúáìmàA &0+Ùû˜±4™Q¥æ ÊOÞ…­Q3žb+•}@> É*ö›8H5^~Ù¹AïŠÝÑÙêOOylÄ÷8ÁF^Tó!×/Ýñ1BuXg»ù¹Ø‡Ù™p?em•´~÷ sìJï!ŒÇ)f§aÈÐ #c‚Ÿ•(J©` Ò(>ò.Ã5«Z‚Z¢”/€ZHÓe…àðSW´PJ4V P”åç>©¸Òà‘”Xå8õ§"AR“ShxTþÊ`¥hq„Ëšº]kÙõõ!]y• e¾=* sÊ ¤Yx±@ ÉušÔ´ªEöî:Y1>o€øÁ_¦˜Á±Õâ ÷Ÿ%¸ZÉc~zu.!pÅõ±Ð5pVjOÈgaý*ž¯ qY!Pó,Òoð(—u‰c¡kª–BU-$ÃG3Ì!V3ºÌÖ¸-ˆ<8IaÒÓÚ­ ´ß3SÔT1TW”Ïg Ÿ£²LHÀe Z o}i`×.cå¤ho 8¯,Xâ촹ώ÷ÑÛHn4¥½Â£µã *@6nÅP]ñ°X\~ñ_¤8jæ {| ª®Ð,qÉJŽùÊÐ`(Ÿ8N¯g?æ·Üo |J¿ÿ£ËÿzóÉ7~ýOï¼qóÖÏè膮×X4®^¢=À›w'·ió”£ã· .•)‘œÑ|‰ùŒX }°jâÀÜCÏÕ„š.•.9×ðw@.ª5Yë¶?V”™‚LÄ£‚n“ ³°*h1ü]nÁõjÆ%‘õ…Z+3)‚¯Œ6Ð(}Ôb5)wèi\L(e1¡†o×3ˆ)]þ.¦Woi øàMZñíš>W™a3±!lÕ©Kn§c§à±™xõ¹Aª}Òàá&ŠÁøxü£½:›¶‚&(|€B…bPY„ÍàgøÑùèÔè!1>%H ` ”b tV‘`.nB[¼H8»ÔÏ=H%Z‚$•ËÔá³Jd œùf‹"(Ç­I/2%æU9²²¸P†4ÞF¿ŸœPeA`à^qغÆ^°KJ@ &á ¿S™UíwÑk¸8#^øÌ,ý>w¸‚²šd.ªȃ®Wû]~9e~ÿ‰­…ѪrFêÕÃûX77®QʵãŒWKº¹Z¹àýô+ ð"•OƒŽKΜÇèô ÂÞ>ž×µ€‡p¹€…­‘ÕB7Rù(øb]Z…ÅŒlŽ›3¬âk%ç —àÉf Ë™˜3œ&àŒ¬! ¬r¬ è"źÉÖ“¤dý޲ ^_2“Bç©TÀK3Dù‘!þÎ_ƒ½Éðæõsþägéê ‰Ë¯˜p@s… ^cõnúÐoƒ3qúH\®‘åâQ¾Â-.š$Í©Dêòj,€GÌÍA¼@s… –2àòÝÏî¹æ)V¿>Åç«Ï^ý?nîýéœñãüø¨LqóÇ7`@v".ž€VgÄYÀåkÑ4Xœ‰GJ\Ÿá‡€+à ,j¤×Ð…ÈüŒN]Ê",¸Õ çuJ…È–¤û*^Tþ±Z“š3rp…ðv§@v2=kó³h»{»^†!ƒ2¸ ©Ô3áÜP¼LÇ|lzQŒ¢B60@4ròïÅQÅ6­èŠôÉ?ÆlÔˆd^ÜhhôUœñ0„ u©mUÿ>2£Ø“wŒX ˜R±Ï*DL5Ë- -½•Œ-l¤ë8š&¯ýÁf{ȇ):‹[¿b#¥uYmØ?ʶQh’p€¾ÌøYJŠÒ³£YAº·ñù™‰: òQ,†°ÀBÁúI¡¿Ú"Tm™ü”‚BÉ1±lNó‚ (+ ,°(,«„S~Gw‰38O™pWЏºû¹` -¼7§,àj¸3ÈÒkуŸˆ›o¥?8æÍÛµ;‚eóc¸ãÍ ¸Eõ䉀Ef rÆœn¸Îa¹&°2kÐäVêŒA.I^!×A&ï¼Ô"Í4"S¼Q„5ÀÏÒ¤†õ£$ ?®á“Ö—^T. -NP¡Ìò°ÚÍÄÜ k˜0#“IPÀB‚´™ãÝôÙÉŽ_kÖ·¯}çÞ“k‡N­¨Ï`“´IˆçÈÀ/s86Ÿ¿~&XF÷mÉg°KúH ÷ œ~|  ¶ Ó¥@Á/fB3 «¸ce}…[†ù5±7ÏqËÄ5Þ;ºÅgŸãÙýäÞ[G¿b¸wDqß½~?ź<*Üà'k²Wµàm»¬¸‚ep9¬BUxÚ–¤Ò÷µ²ï%Ú©ú‘€4B*d »Þ^Û?b‹"9%ÓOªjEVE²Žü,"] ªî®®½ëŒ€W)@¾(ñ–åbË(øx³>êþ ÷eï¨ß=уyºn1M„5ömC41úçlh/NbP:ŸÀ*ô¨PžW¤x‹ÝÅúôk¾,¾aàµØ’ÁÔ6*s«|«b5æ—FS²0É™£Oq{ØE½6i´)¨è7Ê‘Z®“ÃHIWª\”©¶û®!kòš ©Ä kèF8`¥„dB:G†¶EhÏOR@2h ËÓ>³ÖÂ÷øÒ{o²5ä•°ŽA€+a3qÊ€§H2j®ÊŸ I>N'«ë[.šf —X<-íí92èZh@7NµÃ²ÌjèÈ<È)ŽÜÉ‚nY©¡!O¥Üа:C€È4iðL¡™ÁF ?†Ð(çKÂŒgW€‚^Šy {F<¶f«"µKèóDü„š8H¿ —Su&ä²kí?t·B'sÉPÝàÍúù½{?9þ׿ü§ jº¬48nü)u0åiþVÀi| žÜOf pïÝòá[郣æÞÑ9"Á›_âv ÔhÖâQ yŒãï£ÉÐäâyï^ã¨ÆñǸ…xãuö¯¾XýþÓ÷^¿ÅóŸÝà“gçë$½\B6˜ÏDïå%8ÙI(S\Kü®àmõ:<'øe^6Ê„T­ï£Î)³ð3äЊæíئ¯å¹¦{ˆÄPqÔŠP¼¨)Ç¢Εº€f”¡”  œ9ô”+œl­Ìd>^o`#‚³Ë@~9X†=^¤º‹ã#X»èQ,»|ôpù¨Ü6‚°¸Ö8@Ž¿}9¼“ è€|Y~JûôRO¡mŽ&•C´ÛõjªÙ‰% #N™­=ÙI+!‹-ªÜVA;*¸!WŠ"<0`àêÖä‹r1_bµ`e,nün8xK>ÍÀk$ÿ¹'H®pz¿HÀo+2=×ÝšÛ´Y«(c"lUÌû­[>'IßýdUØ|&d Ì Vy)•߯ x\~ð#Ü\ 4ÃëôzF8BvÕ:‹œ”È`—©Ã¹ÄÊžy¸™¤U].àZ“’s¨ÇðÆý5æò)€6BÖ%Þuö}á–à w&¤f¨€Õó+™–Bü¨D4p·©lJ§ÕûçG¦A‚Ë5€c‰kÍRÔ%g ¸Ìj®áø÷êo§³Ï›+<åõ‰›Ýçë·’Ù½UóÏâû°ºwùà7âÙõùe½z8ãO€y“6Œ²+^ÍÒE $ G Ë[<<š?û“Çþáºüm‚ëw\ò Þ4©KJ¾v`ÂÕ$OæÕ«'5ókµr35ñwÅñûxÝ–ÿsô;þùÇîŸßÁwáÇK!½dN€èÄâ:L®µÚñhS/ü¥äJ h_`¼%*‚Zû=çá6VÑv³¾Wh7}zŸ% <›¡é4Ââ,§€ɳà!–ye0+åUÚ ÛoQŒÅëóÀüQ[3M‰ÎGtfñÑfëo£µÁÛv½l¥ƒ¶×¼XȽ‹Úõ«óSÚ§)ÚDÄ‚-»Þ–ÓŠý¹nòÉ‘MS‹*ÊÅ?M4£1±ãD˸6ñ>þÑ;kÛݾùmǤK ¥\"Ë!g\Ï„V¥?Ê’¬ ¥RQH ¬í¦•×JõýuVÃ2È®ÀÂsƒ@–aQà²ð’Y¸ÂOí"ó[ÝgÁ„RÃÇ‘ $É<$• ä­ ÔPÀ ²Ù¬D!d˜û#¬R¥cbž#1¸4ÀÓ¿ÆÚÉ:Içp?,­…»ÀyAš‘­UÈ€Óæ1ÖÜ©’ÛsèœVHõ ¼F«•·Y•‰ð Fp(QK!½íp€<£ ‚›Rƒ°¦Õ§¬\(’ •~†ÎݦÒ„¥x»Ô³D¿A쪮]}äŽÏžUïìÃÓ“ì’Ã"å3$?-Ý;îø7&ÿÓÑwnÄ}¤ø.ž˱/šúS\> ‹{ï=Õ1ÿ!ž1†·ÑüÙ’ûßwGŒìŒ\‚#಼÷îƒ}DÝ+›¸o1|ïJ4p®Æiã0ãI0¡¯V7§L\›c|¾f‚]ãåoïã—Wø¯?sÿ¸ÆÑÁ'Xš‡à.Ôª~uñfdÓØÔÈnçe‹áª±6MØó«i—§bË0Ú£_QßpxvzŽå'Öpïö,ÜÝlû¡ê<¶Ä!žˆÓŸµÑY [g‘wcWw›vˆd!ƒ s’Kn ½ÆÃ—í ök°ÐÓà-ðEíVÛgxgª¬Ó´©VSÛyäž²¾cZ É8Ð:Ø5T…óú†x. à H¿e%]«¤YÒv÷_ðÝ,%R0B-*`ň×"+J‡znY“!Õ y‚¸n\ 0ðh%kÒà(R XœgxlÌ…/±h E Æ®:FZŠÊÃÇ*ZÏý¦¼mT4ëZôÄF6ŒžcÓ‹ÉíÐSaaÕ8 ´Ø.‚ÿàx:ï.®úàµÕ¾á$kB ´½’[Hy½ƒmï§ZÄá2ª~4AEèÚ¯“ ±BFó j"ìê¡À »dÞrÎ!ƒÌ!I «Π‹àsyé÷ßöÞ2ÂßÐ~>®ö[‘…,üŽháÝ¢­ÚƒÄà”X—ä%aN œµe~+ií8ä@‘fLxê" TÁw6T‹24‚3À Ê”Åcé· @*  )5W¥fsYÏWgb.×-Çs}AgR PЊàÅ3  M* i%ú_%À2µª\´B7+Á°€àpºH ɰx®>;gŸ£þÅìèwøÕ-Ø›ÿøöýP£^s–ðg'§Ékp·¿ÃçããÏ/“×¾Ç>ýão£>úæ=ü&™ÝKÀnž¯¯oî%I]Õkü)’7]?\%®~w~³fkà—Ëß{ý]wVã5ôÉÇ^¯pœ¥„˜!¹š»wQ_¯žÌJ{%8àÀÏÈËÐF` Ç8râ5ƒ«¹œ¡ò+¡êàb½‚Ðg]õíÂ4 JYgáÎL¬ ‰!­­…TÄ â z ž—mÅ ¤VÐFð¢<­ƒ˜M2X?,  FV ëï6Ô’ª$íyÔE?i´¹ Y‚¬÷Õ(¼¥?õ¢óÔ‹¢ Õ†ki·ëwàë  []l±°ŽÆ äftš¢1ìÔlÁ¦_ƒŒ÷1•½MÒº#ÒîÊ"mã-¾‚¹hÚOò¨;&@µ3gl›þ(ú©Âîõvd—¸#µ„?c÷¿H$¼@ Ö‹½ä¤:MGwX_óöC|æ#)G«évExJÐÃ5àç¨à@Z‰…! Òð†¬Üzã ïnæc¢! щÓ=£ë-¦eA:8*‹°¢²è¡!‘CVu“[?‘§À PÌ;¿qj÷jÀ@+Ø#è\hoj²$[À)áø)9Ô)”ÀI*ë•Æc©î,”½fíió„º}mB‚×Ðu° w…+<ÙÙkd³Ô*ÒŠ¤ò,µ€= !? ÍjØgåüXÌ¿ùoðÙ³ŸÔoáxóGÏø ÝÓ+ IDATë÷ñ<¹™¿ËÜñ‘{½®ÿ¿#qû…ÀÇÀÛøö-ëÞgõ7?YìÓçÉM³~^'ßnnà^óüA‚[÷Éoׯúä@rݬX]‰Û3Ô?ÆoÎÒž¥+… X Y”áDׄµÐ5—‰›MͱN3 +®§À-àN¥‹¾NaàÔbŽg媀+…hË<­åÏ^‹2©Ôzk^Ïêguç ®{åA¿2¼K(Á…’\¡Ê! G¦ÒšAh$ÈyÖ;9`ò4/‚+õ.a½j0y +ÜGAÐø”/Ú‡BÈVÀ¡T˺íº_·–A‰äT}¹Âz$jÚµ¨9¢¾£¬^,«ÆKuúˆ_ZpßÑEcóOĶý?“ó¯67ˆýÀ’ÛsŒÜnn%N0ÈûË¢EÐ^{ ÕØòjÄãæ4®wn\E4WLÏÆÛ PŒžO¶$"…)e¨¥·¸­$i¡•ú¤"Õœû's™ W‹¹I3/Wã±7( oâk4»j?*$ m{ifЭp›Gw¤îœËÂþjd ¼@dŽ¢÷O^vèB6² ÒxâZèµÈ¡ÎÈ?ð`$AÈÜœ)ÈÒ{Ó*ÒŠ ‚M4 èµÐ \ Îà HEžYù‰“2!ëç³à©þ²:ƒ;œÇAVŸeäLyñ¾CÅÈݺ£o}¸ú”êÏ’£D°ÿ{~y”¼~ïò›¿¼^¿utÔ47@}Ëu‹_^ãÁ¯hv„7¿©ÿÛ/ñÏño¾õä‹7®ë·/®7?cÍ‘;Âí³›æòŒãÉÿU⹨4uŠ:Á ­à\N@ºP€*qƒóGPéÈ æ =,\Õ<Œ¬Ô³²2˜×†4Ð,õ52¯ @–wz|jBM€LúKY{sVø<*0¾ÆËoTÙ.É!]Ð*7ŒVÈÞ÷ÃÂ"¬9YD…RÈc#aŠ•ª³Ð’[ è"]Ìka!ì ôè๫/ ¯pTÏùZÔ·ïÉgœ=_ýjM·÷›W?þÿoÒä“ÛË$mj<[»OÖîúš®oøïnWÿ—æõwž±gXÿKó›_¼ÁšŸñúÏÎ//]úgM 7ÿÀÝ®šYzÛÐQ-2Y4új.•„»*+ÍRXû^«p“ ñD‰ÊÎo“”×À:mŽÑÈÖ y;–³V0mˆû"] >K¥TgàÞà‹ XHÀ²îþ/uw5AÈá‚BÁµÞò"hö 2&Âö›Â»SfBù¯=Œã»É5ø 6AeÁœé} äLô2 []¿†Lõ«ý´„ÿÄ<¸Y¸b솠Ûå(K‚Õx•‚ŽyGs³U%¿1»c³Ø¬'ôî£ÅÔz;7 7¥£ž…0\íCì÷Täâ+È t8'Ñ_¡í­Àfë·+ªqª—QË"G9c#»ÈM½lõ•#¿FìÁ%uwƒö“Õ„Iƒø /"”ydÉSÊ h€b¥ Ž‚dÍ%J€tä´0ÞŸ¤ ’ÆÏ‘¶Ä²dÒp¾64a'ÉeûÅy·è´ Ieí6È Ê<޶ìÓj\ÌúBÆx[üV‹Õ>T$ Xßû« Íkqx,޲îÝ %üâ<[ ÂY‰‚ Rä¥f° ©œ!cÐ(¡J]@/ Huбðžt5\LÑ©*õ +Vº3¸µÀû@‚G‰‚»‚}·Äì1 $küR¼1¿žáèž«Ao}úäÿýÏ´®WrM¨QC43áj~y–ÖÍüæ?ÿ]}uõ^s›þø–?ÿèò˜Áýh…§žI€k~ù@°5­2\ÎJ h8~ò~ëKWµ'´7aHç$U †pYQ¢NÇ‹†–ÊÙûÈ–Ð\Õ8CVûD.` káç $J¬C¡ E¨–@Mü– àjÌÃ3’rÓÊ—ÑoQÔFø*$ðRl|,°üÐBpoŸ잟=ƒk |·Fvv ÖPRÓ÷Nð¤€.\o'Ü©! ½}A‚lÑW©&`g-p ·™é>½)¾Ø,Úòí…¬=’<ü—u9`Ã"z„ š’íEý&H.GèîB|¯Oèa,ï—š¶û©HY±+ÇÈøúQ†ÏiL3ØÎ§¨KøjÜ*ê‘Â5‚w·„2¢µ ©›« ±A@ug ”iZÊÁ”–µ;x—* OœV)Œð¤kÎ ¼e·+g…+S<Û¹ $a¨ÑVÈ òœ¤D7Ëš¼ÞotQ”©v½;R;\µÀ,¢ÖcÞ¾[¬­„n—dé"Ê ÃàJh©Èµ´¬Iƒœ"§¤(HÇkd P¤ýÞºeŠ"•*˜v„u4LØ’q̼s†xÄœ¬!¯Rx^Ä”ví/ç(qíjŠÐÖ¯f?EýSQCüÙñÏ Ž Íp žî ˜y’¦¹ŸºÃyÒÐ|'?¼u¼Œ\ýX‚¯êT>-åB*µCMsÀÕdAÙ xHTA ¡‹zîIädkÁ ç×ü¡«.x­@’ H€ŠH@ç„BBiHƒÊgßg°ЄkÝ´zˆ×…Çî[€%ï XoèkðQAÀ܃÷8À*êÕì §gŠBû¨ºÅ+ëDâ·ÁL^ØöŸû)O#)ÑyDÇÀxžKµæùÅÔæÖT¦O±°Õ µé1Zeºš, PjH‹·1]‰v‹îõdPVÙ¢ØÊýîŠ*fç îáàpÕÓŸ?Êþ×ÿíÿÿ±ú÷Åú›¿ù|%ÿôþŸÐf%¾€Úr¢ÍKÏDbS*²Æ~è“ ¼ÆÐ£Iõ„ygÝÚæ‰R/©ReeJÝç3Ò¦ÔÆ{¢•ñž“N˜¡csöðVÐ…`AÕèðTwƒh{—ColEƒ#Wƒ³ä¥Jv󼵯ïRµV4 þü‹Ãr¤ð½¬! Òþ —¤ ÂS‘^¶‡dÈ·5þ¬¡þ›*è%|˜ÓK` ÒK‚!˜R+hm¨2¨–t¡èÂËœPbIV(½³´V¨»,õßRÕ A‘¶!?ý«Uiý·0¨­Î+kHÿž°(­ çÓvj1ÿ¥ü¯:—FüVuÆòþõåàü«ÖÏy ­ÈªTéYXœ&¼ÛàÒ¨$ÒÝ]ÁO•ÚŠ*SZ|ˆe01 Ÿn ª5¨ þ°†ìP¸…ÁG/œFÐ&fÒw-jú©cµÿÊþ¢˜cTÁÝR+ºP°¶*­‚U?p± Zg,TÉŸ ºP¸X¢R¸øÛöNè¯~—–Â…ÖQá¿õùRÃ;{¶Ów']¹­Oœž Ê›ç&ä0 ăÚ÷°¿D0$|Uÿ¾’Ü ^èW;"ïæßš¨öéc"郯͎¼ª·Ô zÔKb{š™ØjWö±rófg¦¸0'tõu'Éõe©M çeð¦khœÀ&Š)êR‘Œ‰rXûéVmgzÔ†€ÚÇMÕE·ø^§ðnôB‰Î^to‚®)¡è(…'Úàll£èÂ]Vå=ýYEþ”úd¬»X À‚V‘6ÐKÒê\ûèÙ]²%ù ]©óÑÕ ºYE>B•Uk[ ÀÂÿø¦•ÿ.%Ú‰d9̸*îùPqt¡È_ßödÒà΄Îv—Ô°¿´­¢² wÛ{Ò¿¦Z¶9Éà#ßÜ,Q•*íÒ'ß*Qt!ÚfhðdÑö¢px_™14j¶EØDyNw [ãE76m‹oz{=zHQ¯÷¾Õ–‚XïíW¢€ð‡ìv¥‡N'w˜Øv–G¬ÞÉò¿‚Gíy­ów­Hi»ýìz¾G¹'<–4€YÊØ‰þÚ„»<Î[v|OümÔñ´Ý ÅEŸõpŠ unˆ\jŒft¡J#J‡ ¤ !JÚØÊS¦Z‘5çÝ;XÐ8"²(=ÖÀš²ý,ß:´ R…Œ¨;UXÀmJkH/óoM©QB‘FÙ#Kar*Äåp±<ºÕ%]C°ËràxMµ—¸-±mÜÏ™²ûjíõ-ã @…þMÂ1t·J€ãT̲Òy׊,(ü·¿ëÚ Ø~)Ýv0•ï0>R>Ç61C¡Û3ÃgPMGÛéâÀðÒ¢Xz ÐÆ»Ñöøð²»ÞûÈ¿¦¿¡Uw|7õïvžY}XÄ×ûÒì'T«C¯‡~ÓªqMOÜ´½¥­gF ±~5î‘Ãn"rÂŒ—P’ãÊ"Ð&.o7ÔVq²QÑçNÖ;jãRúb¿Í6@FUýÐPh†bL@‘GÏÃc°lÿ¼jTµwí㲯÷C5Ý ª>;šPÈëeà$´AÕ†¿¸Ó¾X6-¸Ùö³Ò(G`HøCUúÀꛡÊFHü}eݽ¿ÖZà¥Ôþºþ/>ˆHЦ˯4(5Ôð&1Q׿‰ø ½_‹nûÝø z, Q¯¦+Ò ÕrP”X $E7‰šzT7¸F½ÉîNý$ž\Ó/‡iï¯Õ—ƒ©¯ú¿Ú¾a¿%ì—ƒ£©»Ü ãæ‹&áˉmg ïzœj+!¡GŽŠ‰âWiƒB¥†Ø»Uš:†¶*4ý&¢p 'Zþça#ļÅÍQ© J¿Ë*ä€>6™a—¨¨þ‹wGÒâéýWë˜ù:ƒÒ¶GWZÄ)|"U&`8Ú–ƒ·íz¬^ @P!Eµ_ÙãHžÕ@Ô4´_Át}Ù® õ„)Û¬@—S¤U E0°¸nÝ#H4„†hq˜>ÓÛX_Ð]”AR);r÷úP+ôќ ÖFôHËvV°ÝETT ÑÛžóQÝ£7A½³ÜžæÔ Ý]€Ú]`Ô¡ÔãîžÆb{u«¶cJ; 'õŠ£ÚZ:]¸h{Çs}`žüÉî+1M,«­…ÉîldG·µÚmª2&qU½É¨èÁn‹D­kq"2Ùª15gûC\Å–6y•Þà{¢'Ÿ6iÀ)J°m, ä4ˆ`.Ee¨»=Ų ÅuHHËR«óžuWÐæÜc; Pt S £,beÊ[JÙ”­ ªô<áÜv3Ãt]›Ò±¯¶‹ìËá’’%i5Û˜‡r…NѤ}ÑiÒ†ÑpÕ˜$³º¢Hà‡6.bÌPŸ¼;È®m\‚¤JE—W¾Å·hÄBÙð¹í]·ÉWmÁuõ!úáå¦Ú"Ôëžßª/[õ†"ÿe1¨ÎƘoÐ;1ú¼Š>ì2îxÖôÙKmÀ/8ìÈÕÈš¢D ßïÆÄzÈ‚Æ8•é˨ŽjŽk™j>ìB»uTþ„(ÜUvv+h‡gcôæ:ÎL]9Ù%†VD:Uèž`XRµlÁ} #Ñ0+·äAá#ããT×3•1 åAž‹öËV¡9h[”X¶R±¥›µU=òCZÁ.Éì‹ì²ãÊŽºìSW$YŽBÿ‰> Ì·ÿ¾ÅÆbe=šÞR‘ÌaI}_ ,Û >ÜÉ·¦„*­¶j”vƒUÞHHÝRvf7B¿V[y}`A¹ƒq½žq@$UÛYÉ‘h嘉W‹2Ýåß×€‹~U„ŒÚ¾·ñ­Bˆ¥ÍTj7è´YÐ$o1…wÑHh©Q_äê¾`'öoK¶ðsÛiE0 ÙAÖ9ݲ $1ãHèh€Ú r ²Ë-}[¬}2í~ùþÓËq•Ð_hùmL}{-,uE÷pä‚›Ýq?¡í ;t²Æ÷!|Û¶µŠÉLkJmÚO1­:K¶e}Eç–bÌD·¯éš!k†—5&ù[Z¥˜¨¯RÀ•}ñ•Zn ²†º¡¯Öè©?`Q ¼H¼ç3™Ï K² ‹ZÕ–œ± 1¸Ô}‹s»Áyè˜vG­¦^.¤¨ƒ y½øQ€{£þ=ÍW3·6“b§¯kn˜¸T´µZ?€p€Û^ &ªx½O1uàûAJÜIÈhâsËQž²ÖD5Úœkã•”Ô)ôÖÜN«J#Ú!/ÃbËAíÖƒÑØÐžåí\F±¦íªvvAÇÖN+eµÒ>?-ÛÉÄhLW’ûù,ê²írH+\øº¾Œz,¨PjÔ•ðÛ2FäS XªîÛÅ”¾iIã¡§^ÒÓ]‘èÔ…fÂëG+Ußm¶ÐQmu<4¸RQƒ“}ÿOB úNêk…åHDDãyÐà …ÀG-º5©·j¨EÞxœõvb@oÔz@’ `IýUݾŠð…ÿüÅHw86õÊDP˜Ü°;¹íÿVÛã»>øÌê‰?¡ý_m=˜=­ö’`€¤jË3°¡Jê´ðÚü¨§aU4hÖ}œRK®"ˆg|t®Z@¹ÓJVQÎÖ**6{àeá2Š'´m$Ì-| iõSЇOÝuYúÃð±)”âÜ_ú‘®‹3D?Ç׆oÉsuß9 f¹;-¯@S9¼¾Ô[‡«Äa:BäÚ36èÄ ŸÒö’„¶nX""ö{ñkwüw¬"ùnÇ*-ÂèÚ{=êk•d½wwG•·¿­b¬‰*¼N½õé ½åö4¬¯^*(éAwµ0™¢¦h½WÝ®&x¼*þyßN Þª?\ß ÷ÑAÓ±xšƒ"ì'±jO‡¥·Æ÷ÝtíÁšÔT)½í.ÙtÿP#ïF«&&<}L)a Šl?2V¶4évBG·Ã>iµ¥ôÒëjüŸô–­2‡âó¯#c\i¶ö -ﺌ$öÝp<«BBêw»qt£¶[Ì‚ë#º{Àëj–ƒ¹“xZ¾Í Ä®†tÔðª)MˆÐ§>Û-§¢ÆðƨbVFMßÞ£Awÿ½âzübƒ“蟵—=γ‰a^Dm™õ8¤Ÿ“÷ãèj¶ú‚ä ç@ëFL:•ªGçFj"ŠÈ•ma^ â>Tžs¢hbNmÔæS%ì&U®Žé“ Ð+d)^ éùêrÃËè‹ÀèÀ¨=ø¡ÙÕ÷é—9° .nëa˜©ßŽt߃¹­8}[³‚TL.£Ñ5 *#ahˆù‘Z¯UoµŸO®ºÅXèÛ‚A U!æ¶Áô¼7#Sý\wôÄvO4âç톱1ßM·ÙV÷‰Hvµ5ªSú€åßçÂ5…3”0¸h_[õ·8LÔRØÞåd}T J$_ÖèTWC&s“‰µm¤Õ`HÞv´yWlª–Ûz.ù£º]´ÒÞ±•Š€»þŠøq²Ÿ0Þ“]àÏj5rìÎÆžŠ®ªŒ†Âõe¡1£ÕF}6B¶c•×Öø¦¦u(c?±WJ)ë—ùCõË ¯`vA«éVã ly×Ñó}pÐ]5dzËÍ´ûëTcÚœâYè±üf²…øëd£ÿ“(R÷Hq?”Ô iZL£òr϶L¶m}az!ÓÀ¨Ëd±êQÔ¹]¡–?ïæ™£@E}ÕÜý£Œkh€U¸hCyG`hC•ê§%6eݶíâ95}\×4´_мB)šh'ÌudA)J{7Ã6Ê´æKm話)ÛQg52gô©½¬ ¯’ÂĨ<Æ#;e aì76‘XmpóXË·0‘¢w“[VÛŸS5‚°vvêS=Ç]‘w»ALößw9™0v¼3½H¢šz­^4¨Ì_.z—ƒÅKvj減Ÿ‰ÚOjMέ軞ŠqÐ Ri”/µšLlëЇˆSç¯Pú4 sYCPá‘óšî´ð@?™á304´ðe^(µ!˜²Å²IÇ¢—¡ýFl¬d#áì¸Ã‹evhô­;½ÐÈOº¯üYjMñFkÀ;üª;½vèUEÉ0l¡»‘´¥ÇúËn!’{õ|FìÝ´y+vÓàC¦=Ÿ†tUV{þ|x¡¨2mu?ºÍLGéSFP˜ #lýØJoÒßÒe'ЊlTjlÔ¡ÕØ,o/GXJßÉ9M«8í©Õôç¤ÃÌSÕjn»312¨û•憵ù] x ýj¢0ѯ"Íè»Cg‡9´V[ÒÒ°Ý+Awµ1NÕjü[`ý¼ó~ðQ'VAØÁi#âÔcÊvhl©Íà‹ÌsÈk¥´"˜Ò{—z×kÛFd½9ÖgUêúÀТc0d·ŒžXoR¤»ÁGp¹õJ‡\µˆŠw׈‡~«(1´Ôˆ÷Îëí;6˶̊è)P5Fv¹þÌ´x‹é3M ã Dhf¨&Pî4'U†þÏÎÿÁ’ýÛv EMëNÖl1¤|z92˜‰~fÃ$¼ëöigÐ2T(`´(í.Ûd‹¼w²A;Š<{Ǻ{CßPjóáH÷­UiÃû|œG.­ñ \k[dhà0húq m†—/²ý表ö<¥’5mµkõaom*zŠCžE9@‡ éH\ƒZ¶ÃâÔÆ¼wíº1ˆH†»åþ´± Š[Õƒx±‰¬ú‘6¥E©Qö¦f#rupMX-G¶+ùÛFGGS„ݵÐQã‚ n-.¢ÉgÝNºmâìBÕ}Ö“À晡½¥´Þ±FEí®á¶"ÃÛ,sîæÍ£v¿ì‘íeˆ–?dnÐ/óM63ðþ1µÁRl ¶[ÑÃ}-¶¦Xo¿YwHõžÌ×YOh@;{FLŒÖZGÊNµõqë}ô:ãRòÐ8¶­1QŒ†õ ù¡ Žfzab ˆ[+bߎ^ˆtV½ï´ŽE¨Ñ¹µ±W]_ç–0ä7üÄ©]GhÆ€`ŒmšTDÌDÃám³û±¯pž—a °scÜGhì–l&nà °¾·½Ò ¸—6Q/IP}A3²å ]^´ãÞU{ÒEæïÚ#Ì|,cÆ%Ò³™®¬¡žìÙΠ솚w·:PéÃ÷ÿ¨­VEö¤á€ðe7ª[} ÷ùÒhÇæ9ôדo8øß¨‘< Vš;´c/y0,ê±{ãÛ†¶‘Î;²ŽšÚ¨3’½›¡èPíjzÆ»€T»[¢Sv‚´_›«¤LI·õX¶‚Å®‚ö«‡"º[wc½Ë˜TˆÂ™ÍŠôh£Üæy‹'¥Íhmu«…µ}D(Ö~Dë) tÃë٥ƒn$Í£F•íì˜ÙSÄ–Jã=eã‘õÁAFÓyÊ'`Y¦«ë[wUÓyw÷³Ê±<šÚ²`è¯îÀDJåÈØÃe½mcÊ}óI.’yÄýÙtæ0w€Ô1”ÒŽ:×m<³~¹%4©Ní*._†sê‡v¿¢?<¦ô"WÝù”7šŒC¶mì‚k¶¸A@½@¢K]›Þ±íÚ\Õ‰ÍÓëCL÷oBÃ=­\×ͨ>BiÔ¹F œK°'ÔP½t¹9t¶ü´[È·Q~µ±ýçFºí{3éÝAC&° 6Vî›þ|j3$óÕ@"ÜvE3ìmIM·M³=Îe‹Ñíº¾åÈbÚëŽôÈ* a]O,uëZ·pÚ”6xzÇZárØÚ‹hÔ\›ËûzìË B¿,­H¶¶Í'éÃPõCôöph^M¿Ìîý«i ˜¶¶&‡î‰Ðw÷èñ ç¾Æžû^0À^eBºChŽq˜ÝÂÜÃDVWƒgqÿa7”Ž#Ië¶¥jgåôTN”º°ý¸c"‘úãiýﺸÙ6нÞÛ¢õAÍ›˜- Q8yLºuŽ™À!V®MOäF§½ÜDü‹Q7lh»‘òÞsb  ´m”,¶ÛX{>ÑÞ©Û„¡%â8Ìmz.Ed–UFÅ#]Œ:¿h+ç…ê&É)^f1ØÓЧ‡ëREÕ‰î¬ûkˆ& IDAT·˜†D¢v`"?tÈ’d½3úÀ·-icÏ…W߯¸V/èáFäúó¨ùð _y;¢Õ^þg_³÷ejß©P/t~ mÿ\ÚÝÙlVUƒå©[Í*º¨2þôÍ ×‚‚•¿™*yÔpž9Æî͈r߀YabCKÇy”ÀÄjÕÑåÞv½ò £µ”SÇ*ýÁº¡¶4î¡Ï¥ûÁ‚0Ò—ðƒ@3tEE©G¶µf074K§Ž²î´ÕÉ^u™6¤­¿”íâ  i·Ön~°ëQ:‹ÜMÜ` šhõæ`øÔ–¦öÔõwÞB¿w;Ðî¾á°Õ¯"$Nצ‡¿^øšð~ýúu·¼º5Û«Ÿ8UiL«ƒLTv#Kzëàm~ýIeð¦Éóæÿ´gccŒ@GCm u·¼>6Çž!ìañRGJ§awEDÈ„“Úвf`÷=Æ‘uÇë.Ç Á ûØrj3<©©M¨qÿjâ=UÂÆ‡™’í,Ì”6¡ÜðMi ÛnrÏšÁcVTá¼7èŽZ»l À A‘žØ‘ ­"ƒ^µÅ^¬[8Šj j%Sž{W§è ë/a_ù ë«­¡õ_sÿk^èD}]öEëÝ€ÀÐûÔ¨¯fÖaDò˜Wðnz£<±;ÐÉëmvÍO Â͆űžŽ0 Ì6:œG… -X–­†µ·fÚªæŽÖÙcè¦7Šë ²ÑLù£^±«v¯¸Ý˜ŒQ ½áÈ?ò‘Ö£><åYja4‚=·æC½,I°¬Ë¢°iâ­bSîsŽî½ž¢7#Ãvžc Ÿ¸ Rï¿Ô6vsÓdóm:ÿóÖn¶ÿÝù!¡mïüéá ĶJQ\qgÕ¡æt2Y´©»%ËÔ¶˜_S¾Aþ‚ y¸:`\YíÉÒï¶-‹¨CÑÏC/ÏËñ+ 6¢¡Šœ5£¡°ƒÞÿ$ШÞzÀÄ¨å –T‚*±üP›²5‹èMûÈíó-¡Ê Oæ —1;ªëûÐ<˜©î÷Žìä–çÚ´âú‘¿wü)#Ýú¨GQÛUL#IBïH¸,õdmÄ#ùoÜÙQ}m¨GÛ‡Þ>v XÜÎ(Dý¡íU6é¡×©Ž›^ó:µ>ÝJ×ÖÇ #à«S%mÓ­!iÃ7l >j‹‡´m5bÚ÷øðoä‚7\;º“Ñ/õWuéë—àÚ{–ïGª-ÿ3u¦î’´†‡q€ÇÆîªgóµá›µäˆÕ«Í23XÅ ³Ô#áæ 1{²´¨L˜À°#q^d_1œ¤PTÆÈ"|¦5͸EP éhï&¢ÍE=¯H/ϵw6a½¨·ëèþ°ÇÊÇ2'Ò›ë`甈Ö[zp¬2T©rp LiÍyïÿ¨2ãåÞ›°áƬ%«¦Êùj Ý=Y¼·uÌâ`@cXƒ*¢²m< 7tž8À˜ˆ¾3¯0ÅKMͺªƒ‚—ˆÈ‡:ÈÝE±ú‚®t/,ŠýÏ7ôñè¥NÊÄ™=|÷…zÁõRuÍÞ–s‡‘ø6ÀÊL §›R¥-É•b…’ÞòPm¡ /î‘õņ`ú‘ºÅ&¯BgñßGÒ‘%ܦ¡´ö·¡!äç¼…­ü{RŸU俤ºÙäÁÜ_x#r4vÔ™ 3äKt3b~ÆG¶³ÅŽ]žÌ àíB=tÖÒjÏâñAoa0ée4½¶¶kMâ¿2yÅv¥¨`Œ6›Æõõh7¸ÝVNR N­mß§T¤»B1ÛÈ!׋¬óT/Ò"¼ ãràÙøïnömÙer' Ɖâk{»YÒ{ïø„Rv{%5)óßlxuÔóŽÊìy<ôv˜Nc¸†ÚxÜ£ô4oÙ›a=®0ïçÎ;‹Ø¹ÃÈ£á~ÇÀ4O“…å­vV}Ù ´:}~±OgT×b xé'oW-¤Qê`%Û¯–³† Èª^#«Ãn8ª`£H­"Éïr:LlÊ£éUfË9wêVdO8} + «zä­Rñå-;ýTÒÞ=Ï»÷(L¸Iâ݇&ÆQÍ¡=Š~‰ßèeY"$v¿àë a¥®Ê§§ŽÕ–)ôô$„u`η»gªÝ™nÔV4öÿoïÚud[’j„5ƈù¿..HŒ9Ÿ@|Cl…[)mé8%µF´tQKè——‡‰c1/·1ö+ß‘™Õs"ŒÖ½}ª«jï•kUC#— FÒ,å¨m¼Á,‚и8ñAÝs Ší¤Lì’³Âóˆä¸~ÁÞ¾y%År0áSkßö½wߘÀwÉšŽVNXV‡ËÓEDë™n™É@o:Ý?Þ¾9®G·è‰´ðFînÇ—ŒBàâ‰"x^þ~eè±Óì2EÕšÊäñåÕûâÃYåk&Ñ+tbü݉w}3cëoœßeÄ݉S~J$«G . æK|ĺÁéÿDÒùK“M`÷vFÃuŸÛQfú[ ÍtˆrÈn.UÎÉFwÂ)çìÂë³_µxì:^^@LžTÓrñ„Ó-äÀð”"¬)v.ÞxÄÉ®º_ήB±z!j§¿Ÿã »euË Ëev”PYÄ¢f[ëê¹ìÂpO÷ûê~½ÒòpA éñ>]ènY7qÑá¹£v¡Ø­0‚ÕäÝ1Î%d‡ ü·riWÆZL)˜þ7¡(‰®4}Pu¿KÎ …a‰P†ÞàcèÎ + ¨¬ÕÝØ.˜ššÅ`‹êdƧ],c¯}ŽzÑ|¬áô Š1lj( @åQ9ñÈ¥C<ä²²o˜ÁÙ›°óÆÙ®3ü@â”–VΩª¹$¡‹ñô !‡d|oëÓ½"{”ºytwŠp@\%¼Üá=?¨5îé9œ'ï“Öd9,8¤*Qf‚Cð|‡=Û¿ÿ$\Ž}0L E9ue®„&¥+D?6d^͔ͪB P–ªx*ìŸ,í§Ï;~ýíS~P#ärÄœ=âŠ$fp -ôÅ×( Ø­ićc…œŽ£0»?)W=ï0xŠÍû ³¯¨L9q.,Ë !xãsužÃömŸ8q÷}Gp‡K÷4¨ÞÎÆ¤ÛQCÄ»#‹CRUä1âéõE¸YÒ¶4Pêv󎲠£ 9Q4­ö©Ìið,Äéƒö)Å$¨‘J ¨\+òžnu»ÌܺU3na·0ÝVÚ~ùk¦åé§ÿt[Ÿ—òɬVЪqÏ2SÂÎT®¶;¸¬•ðK,©ëš™Ð›eÀÊ¡Â6Ö—Ë߯‡UsÞ28§Fõ%+#³D˜§lªŒdKž=É7!¦r¾Azëýr­ÕÑXÄ©Ô'ChJ_b †?«‘Õž|Á;g”ªHZtWwÌÊW÷$LÔâPíaC"¢Äm?fp×±<ì$ÛG“÷UW¿e <Ñ´ áù¶¾ÜÀ?xß8Üôî°:·iû¬îöôüõ‡—ûß®´Mh/p¿1!Ó ùùгÛX:9à1½…R£Å\ªë.`.½“tRhüc1q-7%ºo¦ÆÍª¯aû¨ûÕw®](xàF&ðÒ”š«¥4H›²k|yQOdª*%+Ì͵¥°ZÐÁTU†cA˜j‡½ò@[Â4Г&Ýìk!Xž¸æ:¼tÒ?j>º}Ö]m-¨ŸVÈò9û]¤K@§ÿ´€[øù~uF×JGÈw÷õ ÝéëÓ}“‹p{·«Ã•€ ~¸ß¶³}v$õÓñéÏKSÊ"êTY*Î¥V†Nd›‹dÅ ôù T¬ðŽHs—oSÂ>Ý:|­Vî¯TJ­)tS傽ç×"g—/C7j£E*3ôÙÁAËý2&Z8Ø¡”Ô þÅb.‡õެ?å¯M;_Ÿ–nüK±Ï.ËmÊúþíN¦ti霜Io¿$öqk&äû?:¾#;„û&Õ !»ÃÎ=Ý¿®?ÞŸî÷õ·Ã Æá:wwwHñ8|rKX¸¤:wYݽ²&hó©Eœ5f¬ò0*!*¥€ˆÑŸz)kÑãÃì Enµª*2UK¿,xò¸øÜÀFËãlˆ):sf(vÚp àÔÑTî!¹‡w²$4û͈)D¼Ñ-À½‹Ÿ \Š™| ºx3 ä·ùŽ/­…ã#–È3 ;ŸÎ×i#¢9»ŒÎד“#lr]€n»Èó†Ñ½ÜàeCXô˜ƒóÇô&÷w/·Õ-«C¸å—ÛÞ wOWÂugsBp »cæüøüig±¬EŸR9cEõÅ“8ÍŸ  ˆY¨:?Í Ò‰Í“Aošÿì¥Áò׈& {Izí:Ö2àSœo÷B]ª5DaÇ}Iް@¹4\áñçÿXõ~ˬ1çP®³ÞŽ×/pÇÕᛘùõÐØ3GÄÈMËz¿ñËWp¸>#¼8 ÃW d·€»±[àî˜nü @ÈÏÏžqçyuKš‹T“z-ó¼Ú1±š¸¬’GN__à |E›sgzù‘ øs÷°ê´6Ç,n,Mü»¾‡TP3-]‚J¢:,å)R0Ôë’‹‘Þ%|² ?À„¹ˆëI§–æéE¦g1?£{rWlŽìZ˜¾†èSÌÌTK[ÙõðŒç)ô%A±ÿS–L ÁéÐÂ÷^¿Üáù+»;<»õå¶Òß>½,ðŒ›òl}J´°Ãõ™òY|†#½$>XÚb®šäQA!y¦+À7r;Tß8‡éèÑÊ ÑûGçÌP¿5}>ƒë Û~Ù¿ï —ª»ÊlÙóž+8XŸr ®Å\«qæø¢¶¾°²ÛvÓ8‹D'“TÒÈÌ“g`¨8EV ¹4||ïbf]SD8(8®ág`p·SõšÏ|ù~öqíútÔ";Øuü×mp?•Ä7øÉñË?ÝØÝø~t޹èÆ?â60Î-áp_ ÕÁÒãØÖS²¨’oPlŠÙêÐÔõej9«öbés× “2‚9¥¥fÌRTý¡¨óÌyw>×Ö²æzŠª”“[m”ín<;ý›ûÐåò8ä¦]—ùÁ&äåNH¡És¯Çÿf¥l8RŸO§(ìA ]“£þ2ŒÀð¼-,k¤Zñ¼³¥®äð霃þú¼®õ’=È_¯aép"šŽàýÐbÙNØá>ææŽ6*w±Ø²ßú™^t²ãR´PÖÜI‚î d¿O­SB—4„g$Keâxpâƒpf´ãüÃx–xÈõ+•Á{ž*™rQþo—pcão)•Û,†1®uì~É‹ TŽï÷Ñ‚–v ï,Ô;!X)[’« %~”¹ÿ‘îÑâÇQ>ô¼˜³ž¡îîÐfaýtu{ïS®;+¸uÛ7ùa¯¥Q oTÂÛ;^eãàb£r ÜqgLr[¿Ów€{Q|;€ _¬°ykÃn,ÚÎK¡¼{L8îë%l ¤‡•´ô4¯­ö“× ³ÊL’Ì íÖ“á#àªêY_(¥ðÝ»›”à҉䃸€ò1ÄÄG\A. ?„k¨^Øy¢ÇRÀÀ}'¯ö(˜|`gÉ¥xÈñy¸wàL¸5üp0“oy¯*^ª×çhÞuZ¾Daî·ËY»£ÃÕ“ãŽÏo·òŽnðrƒpÈ/ÏËÑ¿T!b)DÍî„5˜±°ê¸V=Èà95@ij[Wä%¥Ïåd€(´á4ßóýë›k› Q)Ç©öê\½Œ 4~øÜBþ¶¢uŒ…’"­E0:5¤ë°ÆôwϬì5œàl:nlo®ã‰/bHi™1}Ðì÷_L‹îqC’vñªÏÿºµ*ÝŽdá]=ITLÔR/¹]¼z+8®Ê`á2ŸÄμ²E»gZøîvÈŽ|­:¬fÕ…š™HÈÑÜf!S×v^Á›ÚD(nÍùt©7RIFQ5q¶7?ºCAZ›Âú7äcC;ÅP\*V÷Q‘zÈÅÚ,OUHQ{ù áOYƒs°ox*‚ÑÛaf‰ol2ÇÇõ'•<}N!‹PtsÍ>Ü]N' Üàà ¸ùôd©z蹮߰"ÉòÆÐK.§,¶_[\…š—'qi‚,8§Á`b‘Žî¦XƒúºdqvߨBõЬB­Ø‘1dç LHî4˜éS×íà ÎgüHyf­ìûÈ'„u 4PÄ4u#½G"!ü5¦Ñqî­û TÜçÏqÞ@Ø~öª'1¤2„Åq„¾l¢c#V¬, f¾ä¢.館ҞYaØzp‚úŒÒ::eŒÆâ ßž/y”¯e× >Âò!ªÇmd_=ûdsòT ž …‚¸µæÓð%‡øzAß”ûˆUTOgy››W˜¸hÒ>’Õ •6wêÝÅýaL_š(ÊT_Åù¨OIºûõ=­tèwìkäßs±cÝ]lÕFXöì‹,*ËdÜ…>?¤–ǦØ's½Ê”%ƒQn€™°¢‹ÇtôW^ê:±Ph®"¬Ö|³‹c½ZD²z),Üe¨CT¤ê,%hHÌWQ?×[ygUªXÙîÖÌ–‹Þùbƒ ! ø8öØ‘C\’‹Ì î7üš[…Ê%E±këȃ"ðPÈjG­ŸÉd®VÊÜvÎÇ!¬`ÂâvaÝônb>µëXEÒÐ#–ÜøšiqìsçöÄxï“&YoáË|át£Z*!BÒ¯Tªùó÷ÓöézqE–²{’ðAñF ’¶‘AУx%£)î )ƒ¿Œ\Œs޹m±ÉÞÌwºå.ë ûÊi£Ž‹ºé±CŒŒE>²‘ƒ/á5† çñ§ ZqLH\JšèE³ªØ‘ÝÚí.j¿ä‘oØ ¶nÝÔº&Ë&F,QÜN&ãhd%…àFû±5šùVùÒ!edu¥½90 Éo³bHrƺàk (ùÇn?¯Nˆ˜JãØ"_J~s—ÜÃò­Î9AVé åÀ8.Ej-’8tì;pÚÔMïL¨úûÒMúµK+u ßuw»á|ŒØ€ú«æaÀØp‘ê@'l÷ËrGcw²sç*•ÒP+«˜ñ[å‹o~rN³óFð2×øÝJóJJáˆxý{—À$ âÏÏ$‹ÇÕŽ:£ò‹äÖZB‹ IÇÆ 5s[Tû/’íâYEé]¤B$—ÇÈ6%‰ªèyëØÐ.HßL˜[óä(›ÏVW‡‡¬%®hç\Øò°bÆùfšVGrò½öùJ3|ãN9­«XqŽGF¼´½ö,kMœÊ‡å…ÑÄëx=6þUÊüX~çRó>åëÔ¬Tê{í_N¹>Û‹_ÀjŸÖ—wÊ eU¡²ÏÊÑýè·-é3+Rø¤@Îù'¡B÷…er[&a΂™÷¡LýÓÒú\«fp‚p®8z϶%äü×ð:kóµ¶oÂÕA«}ô‘ 'вïÚ­Æ\¿©ÞìLçݘ9q¦Gõ /%ø4ö(:t »‡•ußH0À ß“†DÌ'Ôȵ TpˆB¢˜4ѾÜJ-ÉÂTv©Ä?C3^âÝÃbâ&d›)膦9CuÀ¾aKyKc®^)»*¨ûú%Ÿ÷Pr“%»&?¸“Û)NãËÚäE­òˆÛË~jÞ©ÓO|ÇT?vÝ0>Z ]„Ýl‹íšNv÷iv‚¯L±ÂˆÀWÿk–÷c`û„ÒIõÂüô·”›“ó®ËÃŒª3°fdÍ?2Ô³ J½[_æT©KH‰¸úªŸcåÏŸŶvš¨¦£»‰¨0¾Ó— ¬³è‘œaİþeP#O¨l¬Œäšê¾ñ¹#[ö•”Â5 †í©ø…J$m€®{‘„¯Tu÷¥L  ý79¦sû$îÚŒFö@ ÷]ì$cWN 2Qº%[G8»‡š*%ÊqÞ@e©j|Çè#× ãaFÈ£"Á4HŒü8ñ„ª$ (,VV—)Ïè÷ ½£|‘¶WMúQvQbòõ/`¦˜À™ø»qÕå‰hD5$q¡ª—,¥ˆà¹ù²¼@°¤¾¼;µQšè¡$Ó·È|«z6HU €¥þdÔ]|úØ€e1²Â ›Ò+MšL¹Ö c$ÞTvkŽ^z„ƒ¹ï†C@íÍP»½âi¸ÊƒyÃâå sí6A$7ºQ¡Ô‘Åuء޹/ö›Ùîä<óü ØÀ\(bä°šft£6wŠ bí¾Smðo§n‡­æÎ©—Ê%&ÍeG‚AhzÀÂ"M*‘K”®x¨2Œú —ÈÂ'›ëdí¤y”N~¥½½ ¤÷, ¨ªZh¶K|“­=%=ðâ#/P?;Ò´o36áéjóYçÃÎgÜÈ×NògT¯ujeîÝ"éºÀ 9œ.îÓ‡º,½RZY·ä-kõeQfýåÒVï¡d­ôeúÞ‰d ã©h»ektÔí©@×ÈɨŠ&)¡ˆNµùéZuLåņ‘Sõž-*üÐIBªÒHp\4%ÕI§s(ðƒ²«ëé*®"§4ðô‹öl°>’.W*ûZ(°ÞAÁò^¢b¥òκj@‚Îéó剈jÒXçÕÀ’àéuaþòÇÅ?[Ý ƒ!GäÓQý†ÂE,9º¨SŸBï?ô¹¤cYN«V9¦fä¡×FyNÆ"™µUÖ1µº}H·Ï×J¨n  4¦’ä÷•;êœ'˽ª×‡¸) nIDAT˱TŸÞ}ÓÚ{{ÂÍ·ž—S’;b|ØDbw¸‚Ü4c™#Þ%[N-\}S dÐu°U8Q/YÈßíOÊ”e]ˆ\Ñ)Ë[¹H’Ì’ëmÜ‘~ÈØ€oøWjË ¸OB ž¶—w^‘_°g'¼:V«¬ŠFìL¦@îM0WTÁ"ŸÌ*+{ ¬NTÀ±pFWENƒ{!Wߤ?w‰H\Ñqó[ ï•ÔÊuèô[¦Û>1g¡0áåf~-ü†å”ŠÅÛ˜ÕÍ|Ø¿c©K„dJ¼ƒU0%ž´ݠر**–Ô^õK¸oi:^ìµ!¶ï@:ÉLSûëk, \˜0Ú¶_ý+êèQDAÅŒ¹™ÔëTJSð ô°Jæ§üDýÏ€%/(žõº•ù€ 2UsáÒFURµdÖ®ÔRðƒbß½¦#~‚)’a TеÎ^”û¬„+§­¦)×:}Sßé‹ •¥fŠ£ßºT‰¨ !(nitTöx‰ÐRröicÃPÅÄÓ¢´¦e¾0Ì\ÜNö²¹œéŒDçÌ_ |µûå9õ8¤L*ÛpŽ6ÕäyU»8Ûó|”س*Æ—+u"`L¨¼R]ŠEvx¶ÒN°¥çá|ÊØ@åmÊÚuó_¿SªSÐwDI"3ñŠTÛ>ƒÞ æ›`½pÉiÏUiyDZŒXL›Ç$TÝäÚ~üâÅb…~Ž›ØÉ6èœ ‘O¥Pñ *Kœ¹IºdCô÷ã1x Ø *¢[Q´¿2 Í:V=iz½«j±ªá„/Ðñ­¨Ð¬EIŸ%É·4¶ü`^4Ðõk:”¦(׿³ e¨ëªÉâÀêp•$uÏì”åÍF&SÔ ârº+iù[¹oé¼!G=Æã>KõDóŒcõ"1—͹BÒ‘b*Î¦Š½‚ªºtr§Ç}g<%o.€tYšî lÅð&õË”¶ÔN|F„ŸDë 5Àý Lü †0Dï=è@úyÊ=üºoŸý4äk^¾ UçÑÌlE¹4xŸ ÔMe+aÝ#wBÙö¡:—ÝÌÄ—®§#t@‹ºns³6#>Dév9öPÑ~<®¬'T/ûhuuÇZù-úÀ˜Rýض'bÝV”ϾâÐÃèÜ´‚¼æ‘ÉÅ ?ZùIß°t†YS*|p8tO!k[ócMTYa”œò]Õ°šÜ«ÛÙµÛ¹ùnq»÷NþËäö8Ë›®ü¬êÏŠ)«ñ=(ë‘#ô˜{BYÈÕ¬ª˜ÈåýÏ=ùx.Sï»Í%Èuä˜*ž‰í r¼ì®4jn†Q°þÂr+gé.AHàÓ…üÓ”ð‘~缆>Vlh>EœÚ)ñ½÷NSš¹£T×ÊâSÜáÜgØ‘´ ùàT£âë ='œ/wÄ]Îk~J• :Ùe*(ªº«™n"JHÆt›]~ÖS£ôIÍdÕ|1×UÊšºÁMmCƒ;Úˈ@:— VÞçïŽl—Ë,IL Á®¶7ZÚDíóeYž‚»ƒÎ½.¿:%ÿð>¢>FûД‹¦nú(½WÇÎûÏɺØ÷æ¦ Ú÷¤ÝðI8 }ý†îxþfõÍî†öa“¨Q6nQ÷÷A9ß¿ç³+ÇR¥8ááê¯KtëÜÜ]©™ÄŒ2¤fHøMä:{‚?¨uˆ,õ¹µOÎÃZ¢@ìÙgöÝ|ó·²›ìykK#P.j¥óUÄ|¶ž«T"›ÑB4£ÜÀò€‰ñÊ!«¯·ËM7Y'v×T’¡¾ú#—}²vBÙŒ¢ä•¦8"lÄþ¹NàÑÍàè[©^S¢ö”¤4ïò›ÌkÙv ò³Q¼R-x§suì2TÆÝ‘]Q«™jÉ  ø>çeÁ‚b…%ïI}E|‹÷PAOÒrèNïO'‚KSò‰G¥w` w½sl˜~×Þ±$<™„Iã¡Hì|›Œr5ò™.竉ºV“öaÏ+stœw…Ãìßn¦‰oKÇ4LLð‡ Oÿ“æÂ¦ìkùöiB4cÝ%åówKß_Ý€õz–'.8 +V~)_q“²šs={¢¯$¡œ€Äƒ×((& LLx±pYŠ£E±†pJ=ŒA—¡äìÛ6Ï uûÔç+34·˜+òPÑGÃ5ëƒný`=¬o-GÎÀIœ˜Hšâ%Ïr„F®Q,)À§éý«<þ)ކòýÊib ˆmÚœ`ZUl8}|Á ¾áBzüº• v¸šb¤œÝ_÷cößaÿY÷6Pøkm’õmU0˜JÏj“ñ§fb0מõ|ÀŠAo$¾@ˆH2Öäü‰Û¡ 5Ðì>¢ðb9¾ÉÚz¥õת\—Âv´Yv6à §=6¤+õ¡…B€~àIlÂF'oå¾päE်_“Æ-ÂF\i†½ñǧKu±8–%!.$ÁCl|Vu±©<Óµâpö©×ïœØ<ÌÊ$(·ÏDoÎÒ'2 ܽñ9è”]ÿ™û”ºäÚ€6Ó½2P‹HåªNJ;®,lFšréú›à_Êßd¬~¢v¹¸$ðÍÂk”J\«)ã©ÖÃ@}Rêü-e¬ê¶t¬Õ9ûýéa}û0þ˜…Ò"—ǘ+E´“%z‘ª¨¼ø¥î1æJjì79Ñž·X‡åkwº6Ùi~¶tó§÷ œÅÍé†q]šçºïL¬ãc{Ÿ¾£}S±¡‘þW#*=,'Šñ”VÊTž››®F0Ãûð\Ï¢aHÂÞ30% ä’Ú‘d«rçjÙÁ‚ÑFa”oÍl @Œ$a#-§"¤K"V*¿¥ØµÔg´!}«±;œ”¨ø’·¡î©_06÷¡3Ú…nH乺šiÊd_ᨣ£ý_ÅN:´2ß»€.]> Ö? l‡ÒßÒ䨷¶äžLU'œ¹O;¹ö¸ûÍ¿ºa:|ÔlѶ]‹OêøVädQíbà˜Ñ•Gh*}z÷%Ÿ§ñ èD"q|fefr'ÉXÇ;ëpB#Yš,`ÅÐìz(1”gÂ;4qUŒ ú¿ý(±¡- ÖqåbšÌ)RÌ4¼ùÛgnS¸fUdz¨ ,Fд:=5#}±¯ûn8sBX§Æ#á0/„m×uÿëôˆ¤A{tIÛdü„'.ByÑ£Íhß®LùÄuÃŒèVµß‘lê2¨É5äÅìì¹›ëlcSÆïmÒjé>šÏ]wìYóÔ<ü8¸•å°æqTAj¥!·v oi*ÑôŸ¦0Þwz‰7ÄBºñ¾ÅØð–xT“–eKßök77gãŠzs|Fa|¸™çœÔúÚMb¸‘‡ÒÓ ‹C. ý©›Ú#œé£3‘ÖÝ*2ç vÀypÁýy¨f\¾üÁýéŸüù_üûüÏÿýïýþïýç¯~õ+03333ûþì—ùW?ûù/~û›ý·ùûß±Ûaffff™Å33333‹ fffff-ûÝèÿ¿|ùb7ÅÌÌÌì{³×××Zl¸‚„ý´ŸöÓ~ÚÏïæ§aJfffff ³Ø`fffff±ÁÌÌÌÌÌbƒ™™™™™Å3333³Q+ö)½~¹~Ú¾ý´ŸöÓ~~Û?_­n033333LÉÌÌÌÌÌbƒ™™™™™Å33333‹ fffffÌÌÌÌÌÞÖŠ=¬ÖÄj?í§ý´Ÿßm«Õ fffff†)™™™™™Yl03333³Ø`fffff±ÁÌÌÌÌÌbƒ™™™™Ù£­Üú74½Ú=2333ûìµ^_-˜™™}×öåË—7ö„S>Qû&õצdfffff±ÁÌÌ̬joŸLùDí›Ô_o±ÁÌÌÌÌÌbƒ™™™™™Å33333‹ fffffÌÌÌÌÌfÛïÚ-033ûÎ-íôÿòe6xTÏRöýUÚ÷Ñ•V^o±ÁÌÌ컎 uúˆ9¸ìû«>´ï¢‹­¿Þ0%33³ï×^__?ã4CÇ;hƒœÕ ffffïVµŒÄ‰­xPl³ºÁÌÌÌìó†³èÉÂbãŸe±ÁÌÌÌìó†G–Å333³O$µBôúÍäkç ffffß²EM«Â°d±ÁÌÌÌ,v¦o6ßp~„êC³/Ö~íúë-6˜™™Y0xmþæ¡×ñ¡ÙK‚ŠðõvÞ`fffff±ÁÌÌÌÌÌbƒ™™™™™Å33333‹ fffff³íêSúÙÏñÏÿ ¿üË¿²›bffföÚÏ~þ‹LlˆþÁÌÌÌÌì{¯~û›µ{affff¶Ù—×××?üã?³affff¶Ù?üÍ_ÿ?Øay”+èIEND®B`‚saods9/ds9/doc/user/rgb/grid.png000644 000765 000000 00000020243 11332353406 017014 0ustar00joyewheel000000 000000 ‰PNG  IHDR˜™+·¡bKGDÿÿÿ ½§“ pHYs  šœtIMEÚä!{ IDATxÚíy”Õ½Çom½ï3=3ÌÃ2 "‹ \#šõ©$1‰YN'19f3¾,&1ñ=N}Q£AŒœ,>1h0*A#"DtF¶`fXf¦gºgé™é­úýÑÐ4µuõ^Õýýœù£§ºêÖ½¿{ë[¿ß­êû£âñ8!ä’+n! 7voÝDa*výmwÁ"ÝqÉ·ìÞº‰ºxõÍ×ßvWïÀ0,Ð'ŽéÚ¿‹Müš‡E:B@Å124 f„­»Ó£$„,š@ïP „&ÆBÁáÖ9s2=p{;!Äh²h¡i!#„|qªý_MNÊétF£Ñ£ÃÏdéSŽùO[†÷G¦Ì_‰!€„,8Ò:§5‹[ç´îoo7š¬Z(AZÈ(J(d5-—„Ní¹áú5 Ãl~~KÇP¿ÕU#Ø'›b=á'u3‹KhŠ¢²¾Z©J[‚Z!ãŒæ kæï7ýaÙ–Ìž5óè?þ³:Yƒé¼Ælì˜e²ÇæÄø@/JF²v;"¢…¤CK©B­îš“ÇúwíÚíõV·47ì9ôfíÜ'ƒÐ¡®½sêìolœsÆâ‘‘œý©¼” ç‘Ñ’Çx§^xxï¶áᚦL¨¿ãÝš‹!#ý]ÓÜäÍ÷:'/ºRîØÒb·˜¾çS„ÿzlË‘îþ_ó“N›ù7ÿ÷úmºmr´ —%È\èD„>ûw^ ÷yÜ!ß~è9õ%v–ܘ8\mh™¤~]Ï™HˆÂóC‹Ãâ®s†ºÛ»|õ®¦iF¥ êª×,ŸÛ:m’Ûn‰Dc]½þ—v¾¿kÿ±Â¹Ï |':#!öØ©#?Öq`<´ØÜYøµ[WÎŸÙøò®·¼•Åá5û5Ëæ¶N›äqX!¾¡àᮾͯíí‘Ü_®Â‚vÎ|ó£/~trÝ™‡Ó1>îîÚüÙmï†#Q­]N9ÚäZÒY{60T[¡¶3çPe ÷yÍ·~þÌç/}T©õ¡eš5Ô^ø‘þwþÆ1„¦)_ÇÛ^oM86n™r±ÁlUÙ˜ÙSë¾~ËåŽ G¢ûÇùSÏš´}W›ÙæÊKï° ñJFH,Î?øûWúzŽBl./Oí)84ðryë3:*Ùüh4vøØ‰àøÄ$¯gÅ‚»ÛÚOô…YÎ(n˃O¿Ú×}X¢Âç·KÔw!Äç:rü¤Ûa»`ZÓÕËZ­Fê·ÏïÎè&,4fÁÈΞE«BKõáŸÿ–xÿgý‰ÀO’+á;ÿû·ñÚ„~%?'‹—±GF±8<ÖæKB]»ÆB±8c²Ðá~º®±v²úaw×Ç–8¶ëdßÝ÷ÿfph„3šY–i®¯  š­N§ÝrãÊó[lÓpp|Ïîg^}wl"LqXMr_ýòîO8­¦¿nß;»¹vz£÷‰Ío;éûôu˜Z_Ýïùëö½©uøÕ7nrÚÌýyÛ›{>ôO:m¦vìŸÖP=£Ñ;œØ´õß»ÛB>}íÒy-õ«™¢ÈÀPð¶Îç^{/ßÿ¥6x]„5«–­Yµlt,ôåŸÿÉn1Þ¸rÁü™v‹É?2¶}Ï´¾Çåšß}²ï›?{´opˆ3˜hš®ñØùX43r.ã/ï¾IЖO®Zä´™nªq}F¦]„:¿ï(BikïøÙ£f ÆoÜù±/™·t^Ë?[]7E®u’Æœ9Ù;¯¥Ar燾y“Íl|v[Ûœiu3«Ÿö?òì¿–Ìm^½d6ËÐÿÜsø/½}6–6Q¦öWÏã°\º¨Åã°Æx~`(¸í߇¶î|"U!Sxæ8kárYùSQÂw³åGw]C¨˜ XÉciQà*ýÇ òqŠ&{mƒc¨´‡$ÿf4Õ¸íBÈïžù{ ªnjñLšb¯jðM¬n/ÃP÷ܱúÒ3ÆÆ'^øç[Ñpxå%¬»i!„cY¹¯(ŠN4e͇. …BÛw½w¢ëÈ×n½¼¥©f00üÞû‡o^µPjûN‡Çƒ #¬^<ëPgwÛ£‡åÎë–’È8EÑuUŽwÚ;6þååç_yÓm7ßpÙEËçÔS½cïÑÓ>?!¤£ëä³[_î¯÷ÿž;V_¶°Å7Ø´ù•‰ñ±xþÇ?4›"”\óŸxæïƒÃãÞÆ–ªúfWMSˆu†h'g4Çã” -Ç:8Ÿ¨p<2q÷|D®]BkŸÝΙ-“§Ílª¯#„ŒO„F‡xž—kؘÇ:x]V¹§¸îCsGGƒ#Áñé Õ÷~öŠ/j9rü”ÙÈ]õ9ÓkÌE³ +g¢Œíy~õ¬ôÄ+9fÓó¯nÚüÊ¡Žcv.:ð©“•üG(š$Ÿfü'S¹ 5ív¥:|÷‘.Þ¬E+$ëp®9*CKBÈð©#ÑÁΈ¹Æa ‡Ã¡Pˆ„}#¾»·IŠ;mæÄ‡“½>»Û˲ËEg£Ñ‹Z&7x„¯ÿøa_ øê¬öÿ¹ç3L­÷šÂͲ_ùÂgÊÜþVÛý´ÁdþÀ‚Öj—òŸWIBK…ÀNMh™à‡Ÿ¿*5,ýÞ£/ÊÕ!ãÐrbÔ?Ò±s,ÆN[¸j|x`pß?h#„¾f´­1Zìi? ynP[í?1ʰÜÙK—b9CµÛFŸõúüÞ¦–Á‰3WµÇnr)¹¯ºŸßÞwØdu¸j !¡p¤çt¿·iF_'‚©£óéè:iµ»YË™yt–¥ÃcÁ[®^²ä+×¹çfÐ-fãDpÈæ®NÎdq&‹ÝSÛÔÐ@ahzã/îI‰"»Ÿˆ…8Î$ÑüšjÿÉÑ(O½¼û`K½kJCíDpÄ꨷©EЖ8OöH•Ó¦Ô.á€87G‹ñ>ÿÐë»ö¾Ó~ÄQUË0ô'VÎ_,Ó:A(Bn½rÉÒyS¾¤ä·:»Íᬉêí>YÝ8=B8Ž «edOAõŽ„·¿}`Ùü–¯ßy#!$ã_ܱoÓÖÝqÇ‹Ù% -U ™\ ?øÜ•I_,1¹öÃÏ_uïcWSÿ4BÆG#ÁŽ„¢ê/ZÅÍœ·16sùxç£ÑÀqÜhç›Æ¹«Ò¾~ÑyrÀ?t;¬w|lõ{ž§Š¢šž2ÉÝyb`pxœb6k½Šå¦6ž¹ýö (ƒ]î«H$’øŽDf Í0£!žb4pn§ƒa õÞjåZÅb¿µÚÊLÔYñL6ÿö¯þñãχ#üS/îºåò¹Sj !|œFB‚¶p&c²G†FÚEQ}—œ#£(ŠfYϤ)“uéÜéWÈ·NPeµ\µ¬UyçhŒçŒfš¦v (ŠåŒôYï2'¾¡QedOAõ œññÍo­â™:·mvË”¯Þqõ+æýé…×XÕOŸðÔò<¹sµÜ¾÷þö¥ žZÊIAêv™’uHD”÷þö¥Ä–|îJé:È™t Æ{ÚªÆ>çGõ™çJžÆ úÇü“íŽãâñxw×^góÂ4’Á“Çþúæ~ê񾮼‡¿³¶óäEÑ“k]Gz|<¹uÿÑÞ½ƒ µž¿õ…ÇûçÏšB9ÐѵïÐ±Þ -÷•»nJj»†k?Ö7©rÙ¿÷•[Û:{?²Xö—\TJ‡¦¾>’˜Š‰Çãqžo5kak˹ýâ$02AY~É…4kèíÜßÝÓ;ØXë¹í†Õï9ÁPô”úêãîŸfŽ*iÒdó§6Ö=üíOwžˆÆøæII1Ñ–Ôîh;Øå ŒT˵KðN unŽÌé­§âqB(šfXƒ‘å8…Ö *Ð#ù©äÙ(ŠI™8o„íë8¥`"ÿÈx&ö<¯zÓ¼·¬^ÐÞÙ34:žxh G|½'<œMüsb Ò± Þ#kßµ­uÉåRs²”äJ™l IKœñûÿã¿>»J®¼~1Ö{dZ5×ÖešÔ:/u‡ê–%Ã=»µLŽÅbÎáá¾ãVo³²9žüúÏ6^{éE [g´4y#ÑXg÷éÍ[_ôus¦™?}ê•k—L[¯Oǃ§ËµNPåµïŠó|bç ¿°·‹¢éºæÙ&‹½çл‘ð„ÕåõÔ4°c ÿ”œ‰2²§°zc£}':bÑ0‹QÅpF»»Æh±›­6©Qpޡӭsfgwìþö÷UuZ(!ù¯¿¯çÜ ±b7oÔ×}p|ÐÔ´Hüº&!Äduìëñ훘˜ˆ„Ã#‘ iÆ"åÓsF³»jÒ¸ÙÇ)ŠIÄqE±¬¢hWUݘÉçyŠfÎΛ8£‰¢(¥¯j9“%eîryë &3E³4ÃB™­Ö`Lœ(uçÔÏ ÃºjM!„3™Õõ<£Y–ŠÄãñX”f¹Ä]ÄêôP¡Ï>¬àc1guÝø¨ÕæŠR CQtœš",ÇIþ_Ôü8!„¦Y™¶ó*,ß.Á¹œÞF†ãhšOŸ,V…Ö *vgƒÉšØÓìpW1 g4'êãô6Ð K3 ¡(Š¢L”‘=ÕãLWME3gƒ”8E1“Y›?˜«Éþb– Z »¿jza2»ëC¤ž"Ä@ˆW] hÎ`uJÏÁS muTeú•«¦Q°…áŒvO]ÚzjÏ͸YUrõg8ƒ½JX¸Uj½ÊL›/ÙÁ¹v pVOR˜ThàtÊ;»kνyÃrF£Ù–ü×q¾‰h†–3QFöTfi»»ª”ä}'&éµPB&O-e†Åîjo?ÐÚšqd·ÿû»‹¢(-”! ¢1š­ EÈô@³Í™8V %È…–2*FË,6£Å¦÷d=²±a?ú Ùáyd„Œ û7Þw;¬Ð·ß·1©exV Ðëׯ—-S 0@³lذA°@÷@È2€„ !@È 'ØLp»Ý’Ûý~â+¿?o?ØŸKPxòŒ©§Î¥ ­+U¥V)_Õ´[‡ç·©¢ÕùµyÞ Ò&…¶FÚ‹®Èc£PBVü±¥æ\ùªO²œRõ‡Â°p»Ýn·;¿U*y5X½BÛ\ÖÐøÀÈ›¥Õà‚ÞQnVÉóæwü Î(öh$wȱù‚2• oL[Éì"¶pîMœWP ¤£-Ù@…ϵ¹ÂhÏÑçUéGbÔ©tQ•û¨øê_9²dÛÄC0ïÝ)w')¦W`qš¯òŒ©cKÁnê"°pA[œ•ãÙÕ_×£N¹ cCBæ>Kq†‘äéŠïi FŒŽ4•µ|%8P›§œ¬hÓøz‰þT^àÚ±sçÈò%sº ׋p7.šõT¶"÷Æ \EÉjkĤZº{ѱåÔ‹…”É{T1Ÿ?”\‹Õ„*ù}œZ!# ]éCËL}Ô’Ü|ŠvWžuʺâ Ô¼´(ï³'ùêk•3,©gIš(ÁåWÈæÅ¿•¼ÚE®@A„,õÑu^¢›Ôˆ=uì*Ÿ=ïw'…3¦Ö-Í%Y¸š3fañ+â.Èo_gDåſũ›Üq1M”QÉ…»ú”¡.^}óõ·ÝÕÝ7”\³+Ä*¬â¿£H%±B잀Çâp÷÷ttíß…Ÿ(i×[”2´,cƒó€aa‚Œf ÔlÀ#B2€„ !=!ñYâõЫG¶~ýz c!ƒŠÊ!´\»v-ŒÐ8.—ëöû6ʆ– ïÐ d!€Ì)“õÈ\.úTX¾<…ŒàÝP1¬[·F([!#xwT>$ÁBú -Õd·äs%ÈÖ@QH»ôƒÜ<ŒàºVsÁ ¿«W<*CöB–<1 2õÉ6¹¯Ö¼ó;åçžâ$ój$I—YÚ†%uZl‹TÕ‡ MWqòú_¶âk\n9çKA%2‚.¨$¥*ÙqËÚDò²\ãY\Úr*Qz P±\ù„– <@w~™¯ë’ ¦Æ(3ŸK<V4Šô™\«S‰hÖÿ‹Wv—mA½¹Â YR›Sm‘úd®Ú”0¹é|…ËVüÒ†øƒJ•(Ah)8½Ü¿b-è(xT/ÉÅ×¾Ü3ÊÜO-(OÖ¼ó»Êi,„ €2díÚµµf~4€G¦%°T•IùxdX6xdúK˜ à‘•ÌŽŠ!Hy A%P1`:¸œ…Œ ‹¨|H‚92„ Ê ´T³ˆE¦ ]`a rY”²Q1’nŽL[ÈdQÊ q>±ÖÊ-)n?2’ *%‹’@nÔ¨R( G*.‹RRÅê—P_LPfœŽCK±î bI¹Ø›`:úe¹ì 9!“ w®VÚ¸7¹OŽ1@;>WYeQRŽ“á‹ /ÿ Y”dr€Æ%¬R²(ÉÍInÉ4…­È¢(6È¢Ð7È¢ðÈJ–j 2A%<2m€%Ì€GðÈJ fÇ@E¤<…Œ ‹¨0\ÎBFE T>$ÁBeZæ=‹’ò¢þ€´ ‹R6*FòEI}€$È¢”…È¢(9È¢”^¿Ó®‡‹•ÐÈ¢”M%¨zôàtZæ=‹T -ûe¹ì 9!+P%¨:õ¹E  Qÿ Y”d=­œ¹SÀx ø†,J[ÔgQ‚§€6ƒGdQdQèdQxd¥K5P™ ‹™6ÀæÀ#@ÈB¨\„“ýxƒ {!Cš[€NðÈ rÜ´Ëåºý¾É1GÐ=2„ d!@ÈB2€*›¢.¬(HR™—ÌoÅL÷«ò\ꫤU`¢³þ)œ´Ìý2ˆš)Yù´YYó>ÎV<²Ô äyLªž,­lç/D–âbf>α d•2ÓÊhœ ydÊ/é)ˆïÂâÃå<޹’õTð}²»KA¬Åz‘0ZÒt©f̨SÄ_¥-¡Ð¹#Ù®,ŠU9z!IZ÷ÈÄ)×},¾å îi’Å#Iòݪ¤¦EʆJ•’Bt‡J›$*š×^e»Äåg×­Å1HZ5DZ¤~¨­{db-“»Á¦©r;(l/Ä(É4¿¼vü¯"÷xÚ6¦Jd‘ "ç*«š±$(¶@C”,´LŽå[«^îNÕ3ÓF‰ïÕyôyw5R•Åí­8‘¬B ‡«BËäH%™<øÓøÍ*ÓzúSÈeöJƒžWí’õÎŽ¾Â1½ iYñü,¢ü‚¶Heå‹Pg…r¼W©ßY¥/–_ƒä"‚*ç7µ<8!dy:rsd©SwNfÎhܧ–“ÇÛ ;Éz¦mQ¦a—ÊGfùê ŒN‘Q»$w΢„¼D0 UN˦ÝS®XõCduñꛯ¿í®î¾¡±aÿB×`ñ—º.Zb¬ÍÆ›0E¦$–º¶8Üý=]ûwÑe?Pà·€ÐRßdÐôEéßì/´¸@¼€Æo´@È2€@®°0—Ë¥Óšt€3¬_¿^wu^·n:@ÈÀyÿG•éE;˜#@È BBKå<Š3À/Šš²b&@ÈŠŠ8¡ƒx½§\’*­Ì‘ ÖŸ+ÒÌ´.d ×Ð2£t,d˜è,´”ó¿°n5@ëB&™¥kU4Z ”Hî_±–€žBK€ d +°™,Xá xdú«­Lß`å{à‘<²RS~Y” €U"å—E y¡`Y%R~Y” (W0G€@¥ ™š¥x2]®ËûPá[dã&?(¬i¡~¹ 耔jŸTE#¢\–âr‡Œ$ˆoíjò‰/7¹’ªÙXž¡¥@nÔ¨R(…Š¥^)’‘äžâ°IáÀ´ËVÈ”4…`f¨¹¬²Þ3»k­´×i±CK±Z bÉLeÅu§RÚ$lÔÂuÊÓŽ©-L4[9Ǹ@é”r÷ÑTºlZ»NKZ*G×ðÅÈ£ÿ%~'C¥§&ù2Gr£®SM¿‹Ð€,®—´yÈ$÷Tsõ©ßXž¡¥Üü—ä–LS(AàÈô"Êè’Ìn#<2@acÏ2{™ B@å¡e3iƒe|¨è ´<€ÉR~«Aa}+X \Ah)Mù­Ì‰µFa2™å·J:Ö}‡à‘<2½,JåçIÁ²JY”´ß"ô)€¥Y”ÊÏ/†ÊÌ‘ dPi¡¥šŸDdô³‰’/€©´cèâ—¤[Iýj¹XÔ@Ê#‹@ÁC¥‚¸cjœ²L.¬¼²(•Œ¼dQ‚Š]¤‚,JùñËHÎY” bdqÝ©”6dQJ#7yÉ¢ ¿>šJ—-£ë´üCKdQ hþ²(•ò6’ÖLî0ˆA…»]È¢TTÏ6/Y”à©ÝE„,JÝǞȢ(“ Y”å„–2YE } ZêdQBŸxdúY”Ч@ÈB€€žNöãù4@÷B¦Ç$¦€ŠÄ#+dúÊ` ¨L\.×í÷mLþ‹92€î d!€)ño-u÷¶GÙÿdO/=‚Ž@wÀ#˼›‚ŽÚìM¬~¡‹»ë† *ghj¹GÐèxd€2B€„ d€JGgkög†¯lò÷i³Gøý~ØLmW•Y’d½_<~¿?™ð6AGÀ#K Ÿ’ý—zÿ‘Ü(çšÁƒÈ—w,¾„>‚ÜFåþEë¹ðÈ å9‹ûI²óà&hÍGPpÐM%ï]»uå0Ù/y뻟Hö†{ÑzJÁÚÊß‚BkBË’ùe@wý%׃°âßûÝn·ø^®ÓKŒÕÑõ 0wÖOLÇÀ+¾³,žÊ¥ídh"˜bÓåZJ^¸NŠvWO{kÉå®òØâ‘“-ÝuY™Ì‘‰{Eù)±BG(’_¥n„_¦‘ŽPވв€Šø.”V­ gÅ隌lûk¤#Ê G*ô'Jp('*QÈ0Í@™ÁêºöÙ¹Ç0à‘„ dŠ&æÈ**/Ž.@ #à‘erj ô:Yfµk×¢´z d!@È@'û].ŒЫYî=rû}a€ö±8ÜÒYê“þqß$IDAT 3¬¿§¶è*_rÅ-0@§ìÞºéÿပýŒ´DIEND®B`‚saods9/ds9/doc/user/rgb/index.html000644 000765 000000 00000032323 11555611701 017362 0ustar00joyewheel000000 000000 Create a True Color Image in an RGB frame - DS9 saods9/ds9/doc/user/rgb/lock.png000644 000765 000000 00000010277 11332353406 017025 0ustar00joyewheel000000 000000 ‰PNG  IHDR²Òa ebKGDÿÿÿ ½§“ pHYs  šœtIMEÚ"Ì™åLIDATxÚí]yp×»:-ÉÒJH¾0p° IÀqH Ó ç¶™6¥ 㤠%MgâN:dš&)¹ÚÒ?Z¦3I’P—tH;Ít’Bsr±À Ø`|I>$[çö9›õ^Ú•vW»Úï7úC^¿÷VûÞï}Ç{ßû#ISa¦¾5¬^ Ýa´¾³#3-V¯½ãî ÐYÆAÃêµÌÀH’LsâÒàt–qÐÓuºûx 3¾Q"щqè,ÐB2F‡‡¢aÉ2Õæt{|ÚiA-bÑ xD'"ÑðH]m­ÔŠÇÛÛB6»C -ˆ,Óí Æ§·ý3sϾicÇ=¡¶¡î/ÙÒŸHðêú¤ëð| ã ÖÕÖeQ±®¶.ÕH ´8iaÌ¢%s¢½¿sÇ“ÉôæÎ]ÃýN¢„Q&\æë ¢²êkÙ-0 Ëú1òÛ‚d%®c±…‰êìøç’ë×Ì«>ûÞ‡I§ÇlµO¹Ù`GÒeŽ8ª|.Ok CYó>=$ZhA*-8ïçô–\<×ßÒÒøçΜ~ðäþÒùߦDÐp÷‘Ú²âÏOUÖ^Uð¶EŽ3å<×ei! is–ÌZpêÈÞ‘‘NÇ=¦hçá’9õ¡ÑþîÙ^´ÿ虪ú›øê-ð†ÿú3¥…ß=°†¯Ê#Ͼ!¾Fa΋éê2( ó—u·¼aGQ„P*5r¸Þ2Oô|{÷@Å‚U8ns§§ï¿½ªlÒGJ$’}Á±Þ½ïµ'Sâ+¾uÉüºÙå>·!40>ÕÝ÷æÇG. ²« ‡[Û»þ³÷p2™RQ‰à¹ˆI-œl;P}õ·D¶ð»Ö<òÜÎÉï?¿]¨Y”Ȥ»b¶–.¸±ÿÐ[Âql ó‹@ $–w\vµÈ)¾oBÁáή‹3ÊK*J§Ýµª¾§··íì BXͬ²‡ÖÞ`µ˜‰ä©s=áñ‰ò€oÙÂ9­mí=}1³Å–®ÞóÕÀ¡öS±øêšÛ—-èëïûðÈ aª°Bpçú_³Ë¿¶õ÷Œ‰Ê×Âožë™ûoK³úN5ËnANir¸}Ι Ñî–H4Išì<Ö—U–VIé„jkïܼõß—ë_Þh³ZÊûÑ›ðoøîR«Å|þb߯Í[û††-V;Žã%¾âT2MÚ,„-]ýDg÷_^Ùiµ;·ÿáAŸÇåsÙÂÁÁbo@b(çGÌ[´”—L"Zxô¯»žÞp+BˆÁ F³Y{"ä[*2”"Q”´Î¸¬V«%‰I2)¨_du8jjë,f3BèÔ¹žhtâòÊ€·ØÚöÚ‡FÆ•sMf™"£ˆL‘ ‹#ÉÉšwyÕ/ï½³¼4àó¸"ãÑ÷>ý"Ÿ IR¤"Ëx^Ža8o |ÍÒ¯ ¶ðè o?ý³[¦p¢~÷oQ‰ „FzO'†ÎÄ‹JÜÖH,‹F£(60:0½80CRÿ¬X²hÅ’E¡x"ù«oÒz”(™áqM:½/ ¸¼i^÷³ïJ_9Úyñ¯ìÁðÉç™^æŸ^æO“+ry†òK&Êù|ÍŠQ"i<µþfºzlëî=œSL1 ‡F;D’晋Vú®X:26‡ñX¨ããØø&iyÑÛ7¸wÿápdÂb65\yá/·;‹‡#“ëî%~“ÅšHaï·vtõ\BM„Gƒ½gqOWßóÙÁ?þÕšõµ9QUQ²ñ¾ï# ÃM&LŸàëùŒ#BÅ ÊLyjýÍ"o½m‘JÄÃû†U\µÒb+²*“ÕKÇÏì³Ù¬‹eìÌ~Ûü•â¥Sû©®Í/½V[=ûOß{Í‚êU×Õîë8× Ž„½nçºï­zæå±xê•Ý-ko˜ÙôR„PŠL%âQª»Ëã Lÿ*EU–ù‡zœ.BV–ðäOWñ•}ü¥w%x"|½G¿ÎÓõÒœxü¥wÓWž¼ï&îß —m1~¡Íï¶õyºýé+¾Ê+ú#Áªâ¸Åb!Iò|÷ÏÌEâ ‹­¨?Œ}rèäòúy?¸eÙG‡·™,¥/¾¾ÿÁ»–Ϫ,{î‘{Î\L$S3Ë}S*c“¶Å/~t«Ï뫯©B?u.‹%1«Í¡<+$¬[´·ì­[|CÆUÊé¡Dx[ 8‘¾ão_~¬äû òØ‘K§gû-mÝöòº+éüs\h­Ÿ[•L&=##'ºœ™â»Ød±îÚß±ta5áv­¾¶fÏÑÞŽž¡‡6o¿mùU‹êæÌ©ô§Rdß`è£Ïïúà½bÚ¶ I28þßÑŽ_}Ëjw$™ÛbÓ¶÷Ø#nP¹-[˜Ý öEEÔØèàLgäd÷PiÍrÊè›,l2Åu‘Øð¼9³FGGɳÝg"Ã6'!p§'¶½¾ã`"³»<¡¡±ø~~𫳈D._‰¿bÖiÛúú§±»cáT"‰0Ìd6[íÀ0Œªþ ·Lfk‘‹”c˜I-%¼ËüëoÌqGC¡8.ʵU66p¾c|È>£Þl±±kÚîcƒ‘ Ç&&&â±ØhonnY¤…ž&±j0Ãä]FŠŸÄª¤hZ€ hЇƒêõr/ƒÁô¿‚A™7VÍR*t;ừVWg´ H ÎO¤Xèõz7Õ]w>-2Î ºPÉqüÒÕÙRŠ~_¶QT¨p>ð#ëHràŠNñ`0È7¢Ù),¾v `ü+Çß òé„Y_ÚÄœûtÑÔ£²™‘—ŸÇ)8u¤ò”µ-äš 2Nt€z¶…Bf){’y½^=R$-ÃØ&³¡×-ÔK†ýȲÛ7º¤Õ ê¨UêvÊÝÈKçÓe|d1Üõp^¡ÿ+÷¸‘˜ÛÉõc8늼¨Ó…–YüÖ©Í´PÃ!TMg'¢3f@Z€ hZÀÑ4xŒ¤Ež¡µã~Z”F›7MMMMMMFxÌì¥ÌœfࣥoPJ¤±±zLNhZ€Ù«œL#\Øú.Ô2 `$I6¬^{ÇÝÎ÷ GF‚‹ˆ!z"™öè^+_1½—å ÂºEÖtZl д€'"ój€´((NäžW¤Er‚.*ÄdÌ!Ii#!±+›Uœuõ®ÁäT…V.:EQf€´PJ…e”ZÎ÷´Í€Ÿíš¡D€@™ÓÑ-tcXdÌáÊp›%± ‰iÁäÌöúDv¶¡ðE¾”®|eTP= -x¡ÍÔêª -¸ÑØØ¨Í­TÎe\ ” OiÁ$ViÁ$ˆi1ÓK™–¡P2åt•í#‰´ƒ´ób‚ Ò„€€o™•Hðk ½EQSœ@IM%"u¢‘!:'jЂqV‡*§t䈼œ€_™ƒ°ÒÉ/3d”Œ_>c+ 1©û_>«B›vFss³Ôù->Ä—­4Ó’2‹ÑÕ‚ª•aÝ‚MŽ Ú¡Ecc£úKUÔþû‹ø‹Œí1¾ëÚ¢EÆÑŽÉ 3=ÀžEÂQy ñ•™ÂQ'ZŠ2ƒ†#FAw‹¤0Ž<Û’Þ^Œòt@C˜Jø²Ò º'B—°7¦øº…™¡Óå8>¤ 3”*…4ýøµrÌ€x !ˆñÍhrš_Â!ÄW‹€_‡~_€žJ-@ д-@ å@œà„l±œHo¹’…ω@ˆoNœÐi„ãœH2ƒÅ‰Û*“Á›¯p_³,œ@‚ÉDEæ+U-»±øøoI!¾œ‡!Œ¨DÄèá“#ì¤ (Ô­ â|ÃMFù‘qnÈfE'.Kpf™Ô`8¼ÊçÉ„³õ ü—]Rd`¹6Wå9 ±–NN>©6HÍÍÍ::cHïUvä¬Àä‘å†Yµ‡TY0p: EöªÓ]> ì]Šçò»¥Îõ¼ËŒ¼ŸQB7)ÞÒúÎP" hÈ‡É K~3¸jƃ/ZÄU3&Ò*Ø09@ ÐoOD³¶’ŽºUï‘ -äGxø:ÛAÕþ,,Œ   hZ€ðD²#÷†Ž’z´P–:ÍëÒBYNP¢ñ¿ZXjº;È8‚DüE 28c@‰ùXŒi—-Ûa¡'ñ1¦äÀ xêSÓ=ãŒÏ˜·IÍÁ-ò Äg¶ÓB¦/P"Š0ƒóOñ™í k{‚'Z€ hZÀAÍH†Ò‚ Ȱ҂ ã$ÃiZ€ À&'dÚL¡…Ãí=BbRnô ‡Û+"ë $-ú/tBwÒÀH’D5¬^ }a4ð½5âZtü²›˜¿Ì&.®IEND®B`‚saods9/ds9/doc/user/rgb/rgb.png000644 000765 000000 00000007374 11332353406 016653 0ustar00joyewheel000000 000000 ‰PNG  IHDR©ÐóšÖqbKGDÿÿÿ ½§“ pHYs  šœtIMEÚÛ).÷‰IDATxÚíkpÕÇÏ®v%Y’¥•"ùÇØ!1ñ#@bB I&SBžÚ2-¤%chICé Ó¡¦hx¶é‡6Ó &tB;e:@)žI°Kçaâ8Nb'މ-[²dÉÖsûAF¬µÚÕê½Òžÿ胴Ú{w÷þöœ{w÷ܳ˲°hõZ@)Fïí*þ¶»6`‹(G‹V¯íxoqÕª;o»kÃŶˆr4Ðwªÿx;ùᛜÀQš½T¹ÇF}ž¤½£Fo,5YäSCö~ß$Ò‘oÒë󸚓-x¼« 4ZjˆYN~û…ˆù v}A ì›1~Üäìíÿš¿Bäãu\„¾Ïú$´Bq||wScS ››|·Ljà|8vODÌIQ6w‘oðàn[£R©ÞÞ¹«wlXϔŬðy/Ñ8 ¢þj~ Å$‚ R>@‚£üÖßçóÿ 5%¦þ;þ¹äÚÅ óêÏ|ðqHo¢ÔÚi5Žt‡ ”WWc1˜ŠÜé¤|rGÚ]5Äe·R½¹ìÂÙáöö›Í:·væÁ“ûË›¿õcýG+J¿<5ZÝxEÑ÷÷iÚ¤mµ©AÈîɸeluó{Žìu¹zI’4©|ý‡Ëæ´€{¸¶ö=]ÓrƒPÙâbO¦Ñîä·Ÿi5ÿúáCïÐ* IÂÞû•ÍVæMè.¹J]¢—Þ`wŒõö]˜UYVU>ãŽU-ƒƒgFˆ†ºŠ×^§¦©`0ÔsvÀ31Yi³,[0§£³k`ÈOÑšHño쇺zlfñ• ·.›?4<ôñ‘ó9AŸ}ûúßñ×cëc¬Q¨†ß?ÿÎÓ÷ÝAý­–_CÒv:£E_»È×ßîõ…X•VGú‡ÉŠêòšd ³«wóÖë †ýu£FMW0Ún§‘±nøáR5M»0´qóÖ¡Ñ1Z­%I²ÌR}! Íh"ÅOôöÿíµj­~ûŸ°˜ ƒÆã)5Ûr@?{£ôy — ž1jxäﻞÚp3Ä€©V|œŸÀ…½£a|¬z¶Í V«é‘T7ݬZ§khl¢) zÎø|“—VÛÌ¥:ØöÆG]¶ê¹*JņY°a6HSËNíõ¼Kk~sÏí•å6‹Éàð}ðùWÀ$˲ûôà“iŒ±I‚ kª–»\´†G^x÷©_Þ4 |˲øû¬Ï×à©àèé@I™Qíõûý>Ÿüv·}f©mVR°bÉÂK@ záõw?ë8Ê”Í2¦®/\´̶fã³ïˆ,9Ú{áϯí!È©žYaYa|·;ÆX J & ²k!{£t¡j¥øüˆž\#·¿xtën‰ã|’ïUbäó8ݽ¼!ªváJËeK]ã'ð;»?õOŒÒ±üÁ¡‘½û{¼“4¥ZtùeŒµR«/óNÝN®*³ªhu0L|ØÑÝ7p&=nÇà’$#Å÷|qpÅÏ~»fý£GNÔT•m¼÷Ç@¤JE¦„Z>!®¢à£C‡'×ß(qÓ úûp0àéÝQuÅJZSBÛªCõK'NïÓhÔ4MŸÞ¯i^)Ýùwõôm~éÆúÙyèž«æ×¯º¦q_·ýì Óáò˜úu?ZõôË;ýðk»Û×^×|ÉÌr³á`À­Ak0l3¿qú ºÂ:fИ\ÜR䱟øÅ*¡u{éý$ÆùB­Ç].PCt"à{éýÈ’'î½!þ>$ÕßOœï´5C¦FkUd‰¥ú²a¯£¦4@Ó4˲çú˜jJïðiMɰ‡øìÐÉå-ó~rÓ²OoSÑå/¾¹ÿ;–×UW<÷ðݧ/ŒCáÚJË´ÂÄTÿëŸÞl1[ZjàxÏÙ ß úÕ¬®ï»Ú÷6-¾.áÕytH/Áç ÖÙâ^þàñŸ¯Ú‡$ú{ïÅS³­tg¿¶²érî Ö¹‹]ç;ZæÖ„B!“ËuÂÞ§·ÕJoG­Þµ¿{é‚zÆhX}uÞ£ƒÝ£nÞ~Ëò+6Í™Sm ‡Ù¡ç'_ÞõÑnÁHϲ¬ÃåùßÑî_G­Õ±,›—þ~Ó¶Ø#\üÞ:ƒ54_³‚¿0õk<¿{¤Vï=Ù?ZÞ°<:ÚšZY¥ Øš¼þ±ysêÜn7{¦ÿ´wL£gDÚîñmžë> øµŒŽî|èù‘oÎ K™µªnœÕl}ósÿŽÝþIO8‚PQ”Z«306‚ ¢Å¿;T”ºÄÀØ* B•+Ÿ»•æk¯Oón|–jˆ³0©g9ãösÝ£ÚY-­á×®ÕxÏÛMNNü~wÀ£Ó"¾ÿ&[µŠ¦IR9‰ f+«uz´¦Ä<£r¢Dϲ,A¨’`€$)Z£%"Z|š QQj­Žý8_ÖÏñø#Ž—&`Yb®òA °IؼÉZ9 ¥fÊ«§]rÐj½É*±xîïè§Ñ³DÆhr¨!ùûz(])ÓÕu¢©©!Ù‚Ç­+e‚C È>iJô‘FL¶`‰Á)+‡R¹¯‡ΠÑ ½A»÷ºȸÈ;/£™g÷^—cû¦uØ:Å­u›¶Gñ“ØÊÑ–-[âõ÷9Nl¦âS[[[Ì´{å Ù#{²G!{²G!{²G¨d ˜Íæ¸ËGä/‡#ÃbªþÌÒæÄ·ž³²rd%›ý‹žjf³9f£²mÓ¢µ{‰g7×=¤ )Rœïo¸Ûå;ƒ¬º‡¸G'~È2ôdöŒÕápaK­ª'sÌ_iîƒÄ£?dy:*M*²:>þ¼ì^\(Ã*‹ý}¦L-ƒ&‹ÊpŸ¥ñ ß\Ìfs!žoÄ«ÿõ}.ÉäÌàrÆÇòe=ÔÜtuÑÍeoCfŽâ]ÂC–!~*µ†Ž»„ûWúD6$es™Ú™¸e%.”ù ‰b¸§[ ãd_x] Žó別8»G!{²G!{²G!{²G ^ßó'í¡a÷1ÓtQJaàíó[[[±QŠU ì۴Çz(dìQÈ…ìQÈ…ìQÈ…ìQÈUÀ¢Šìx28ï_úæ’ÝPÜ©†¹Üí"´ûLÍûÏ—¢{ŽvŸ– ÆäãáÜÑõ…–ƒ@’‘|0 ÇLí©\üX ùýÊíï…’zˆ8>­,yéÜ80Eõb|lB—›ßÙ?ÏæB)¼ÈÏlâö,âž ûûüœ¹éwr¼d‘ÑâvÛ1]ujl$L¡~‰Ãî>p³L¤Ÿ>Ž,>cåNÆN!%GR3º³”ò#7³Ê‹ÍçKI ’0FRY<2˜ÔCJ® &7Á{ºÊ²Gö(dBö(dBö(dBö(dBö(dBö(d/_1 Ã0Œ’Ù§ò —§ ña¢|rœ3 ãt:¹_ò¨„‰Í²”'õç÷ÜwÊðE@RÀ€Óé”þºW;…þZsè•,í^†c7D^)““ƒOZ&ø »¿a¤fÉ1ŽàÇþ>-ï#ò‹_ܸhý©Û½ÐLy¾¹¨­­-!W§Ó©¨|²éúü¸“Ç¢’Ïq¶¶¶&äÚÖÖ¦¨Ô’Ùº¾ç[Þ8~¥Ï0{ñFÊÁ áW øÇzÉF•go¾jÊø¹¤• ”9‹_&à×zÙçÚùË|kkk^®-•;³Åã3\dBö(dBö(dBö(dBö(dBö…#ŒÏÏL¼È& W:xŒÏ§Ò_ !úŸŸ:{~¼=?_$=ˆ&‡Ïv0?Æçg·¿ÏE/=A}ÀsñcŸz¯Ï÷É"Ìj¯ñù¶û¸±Øü\ôü“ ÇaüŸŸy»OÙšs<0ä‡hÆ=?0>_Ëd­6ïÖñù™ñùÜP|‘«;ñˆýÜÏÏÅøüÌøü¸QúRrÑC’ ê³íü1>_AÂø|岌ÏW2{Àø||†‹ìQÈ…ìQÈ…ìQÈ…ìQÈ…ìQȾÔÖÖ¦¨(¾2™?_Vù²‚„E·AþŸãaþü<€€ºW;å€?/ñùÙŠÑæ†iÇ|Ïo²e.øïð+Òù箿 ËÏ#x%ã'Ó4îBìã…¼®Òð§›??Y#ΗÃgF|¿¢fçäú/_ÙõNg˜¸ìª”È^ÈÄóbýâø•>[ý}Üœùy ËOˆ_à!#ùóã.›3_CÂþ·Ü­pð Ì8].~™€Çøü<89€Çøü<àe Ÿá"{²G!{²G!{²G!{Tá+öÞŽÂSK+šý–-[°QŠZAö˜‰¤ˆÅ0̺MÛ±¿G!{dBö(óe;H) 6-”È´û «€.’)´§ ª°fö ÝãX…ìQÈ…ìQx}_XŠyk_% @»Ïøü&ø@»Ï'ø¨Ñﵫ\—ìB´û¢r ɾ´Ùùi>_I QÜcd{9ÀMRÜ>€,V#ŽnBÛM˜&¿É ‘}f|¸ô÷óÊ!;úüÔñÇý)ý…ìE?èÃq¾r…ì‘= Ù£= Ù£ŠW…t§ðW)×îqr¸BíÞétâäpìïQÈ…ìQÈ•öXól)‘½Îh>èn.TñIg4Ç·{î(¥Øýðù^l ¥‰`YvÑêµØJSÇ{;þl×1ºþµIEND®B`‚saods9/ds9/doc/user/rgb/scale.png000644 000765 000000 00000751212 11332353406 017165 0ustar00joyewheel000000 000000 ‰PNG  IHDR N²]{bKGDÿÿÿ ½§“ pHYs  šœtIMEÚtº<ê IDATxÚì½y”\×}ßù}Û}û«½7  @ÜIÉZ-ÙiÊ£HÇãŒG¶%Ëvœ£qŽ'ÑDã9¶3±oÉ̉߉¼ÄJ±ÇÇòÄ–%Y’c)R´)‰"H‚$€Ðè½êÕú–û¶ù£ºÕÕUÕÕÝÕÝà~þh¼zï.¿{ïïw¿{ß»\’$yìÇÁ`0ŒÛžg>ÿIbË0¼÷ýba0 Æ#ýø3Ÿÿ$÷ð£ï{ïû?´Tª1‰0 ãú•×®žZlýÇ÷\&ƒÁ`´`¶Á`0†O½Zö›;ˆÇȺe¦²‡ûlÛ@}¯ýê‹_;šâR©T†—k$;}W×D{Q«½zÅŽÝÿ¬+0 ÆúlÛñ›µ³wß=ø#ç_|€¬h‡õlwÛŽk¿Z8õˆ·ðÜßûAþêÓŸ¹X]ÑÒcO¾{Lk^·1~ç#3 ÆmmœúÙ³gwôÈÙ³gÏ¿ø¢¬ê‡õlwÛÀmVî’¬8éSüÉ?}Ó^×™;/ñË‘ž‰Ò~_z92¤¦65R¬+0 ÆÇq;Ÿ1smü³½lßñƒžŸŸ]}úég …ü©™#ϽòÍñsoÖž¯^}þî ë©×ÊÅ»ïcý Å=úð»ßrïŸzéãý & ãö¶ ü®t4¿þïžÈohQ8~îÕç¿\«]äy>%ø+¿3vòAõ•«wdðï]œ~臶-ÇT>õ“ïzý©é1I*u÷ÚRùßÿÕ×íš³ž/~çÃ?Ÿ6üo¿ûÿͯT6|ðÌô¿éÜôdVàùÅRíËÏ^øâS/% üßù±Œ¥ýÞ§¾òµï^¡Þ€S+×J‹©üd×{ŽMdß÷C¯;u´'É ¯Íâ³ß܃Á¸•Œ¶hÛ'ðÏþö?zO¯ÛéÿùËAžÝt[׋}ü†^ “çÞ|íé¿Ràˆãª­YZf<åϽxueêžG9^ض¦yÿ£…Œ±¸bÏ-®dRÆ}§Š‰[‰b^$§· €ûŽ¥®.,‰’àÑï»ëý¿ÀÅ« ®çß}rúýïú¾©œñägŸÙð]ìåën³ªéÑ1- éfn Mþ¥Ÿ~\WÉß|õYÉcoyx,­ýÊïÿ °¡Ä`ÜZ¦a—±ì$.ôêw¿yçýoØöÙßþGïùåûW­¿ëçÿ^¯g)µDyüžw¬|û¯%<Ï•.>ËÆ‚ÈÕŽ=BTcÛ¢çRz!cø4ø©üË„ãEI¶t¹ÙljÙ#¢(xÓ}'¼6{ýäÌ‘|ãöŧÌÜ”¡Ê?öއ|â/¾ðñ¿ø‚H”7ûågVÜEMâø?üÚ<ù×ß|÷[îQˆô—_yþò|égÿÞr)ý©ó³ÿî/¿Ç €üco;ytÌÔdFçVþøož¹¾\pjzìgßý†BÆxþµùZÃ}ûÃwþíÓ>ñÙ§ŒeÌ÷=öð]3ã’(¼zmå?÷ôÜr¥£‚§ýÌ»ßO¯=Þî£ýøc¼ñÞ㦦¸~p}¥ò»öå;§Çu•\[Xù?ÿ?ªFê³§¦§ 'òÊÅRÈ-æ3,¦Ô=.ô£ÿð—¶ÞüçðÛí!Ÿ®ÏþÊÇ>ý›ÿÓ»[&aãï;žÝAL©…feõ™Gü«O;~”ŠÆÓ~¢8>=HUŽïÑ@!ÒoüÓŸyu¡úêÕå ³‹š’à$Qxäì1ûä§íŸüÔx>sòHnÉMΛ ’˜$ÉŸÿÍWŒLÁH^YtV*“…ô='¦>÷ÌÅ­Šô½o=wéúòƒwߣ5ÿ•+‹S}ó}'¾ùì ß»ZÇå3ÆWžy~¥\¹ÿÌñÏžú…}óGžø”e™~ßÛ U~þÂåf­þ¶GîЬ®VVç'ûåŸ~,ki_ùÖùRÙ~Ï;Þø‹ïÿÁ_ü¿>åG7òVeéŸüo×Uù…Wf½fãmÝØpÏÉ©Çßx÷•ù•O}î+º&ß÷ÉfyÁOÈ¥ÍâÔx~êxÊÔœ<:þÂ싺™aÖÁ¸µü~WOq]Ÿ=óà›{™“þÏþ³ßûÌo|è‡t†öw¶ÝNì”ã~Bî(„)´ÚA”üÞŸõ'è‘{O?r/,•ªOüé]X­ãî?]ÔR©5¾ûÒÅç^ºòÖ‡ÎüÀ÷Ý÷ägž15€çÓ¦ãfx^$¡Òô& HYºçÔ·fô;ôçßøÎËÿï¿úHq"ÿ¹/?õ‡ÿé³ù¹{ì-³¾ù¬‘Êÿú}þÚÅ Ãü»g^þøo˜ËÂ+Ý÷ÐC•Wíê?ý͉D1týÁ³'ZîÈýw³–6;·ôÄýQé#“=qÏtê™×l^”Ö‚`§Šº*—*µÿÆ¿$ù·?òÓÜuGë'Y’ÔÍëË奊óÉÏ}ÃwÊ_yõêâ©é‰ÿÿ+€ÖÚ‰ªÈïÀÌì¢'1ŒQ5{jú¿ÿ¡·Nçäø|úi‘¨o¼ç8€o<÷"Ç Ï¾rý­ùþ×Ý÷‡ŸúRÝõ(2Ñu•x^ÀqSP­7ã(BÒ™ËÅ«ó©ü¤&^SÍtÈK$I¤¾+ˆÜOýðë<ý#º*o]ö5+?Ñ ¥L Àµùeð|njf¡ì<°~çóçž}ñòƒwÍœ»sÀr¹ö¯>þÙEÛýÍ'?÷„65–YX.½ñ¡³ozè\¥VOâ8F"°wDŒ[ÊoæzC¯ÔÚâB=ŸýõŸ{¼=õ¿ÿáçºæÛÃoèa”¼º]¿øM'ïxèn­TþÞyD*¾"›ï‘5³U%Q8wÇäsˆìfã«ççs…—ü]o2tÅ^¾~ìÔ]÷:àñ·½îñ·½®u¿®)ÜyäåËó4‰$þÈ;ßôÅo_ãeþÞ“S9À·ž¿ ]Vn£(e¹%”0Š$Yá××É“$~Ó½Çßrÿ‰ùåòoì“MÇý׿ü!žç9Ž+WŽLˆ¢€ã§'ò Ú5ÀÕù¥ßýÄÞ¸X®Ô£0H’˜Dµ¦ M‹’ÌÏÝxÏ#ãßùÓ/ÑêÒT>õ?¼ëûßôÐÙמüô7. ‚ü­W—ÂóW üüûß à¹ó¯q‚®g0ŒÛ(¦Äw)õJmSL©Û³ÿâ<¶á1´–(~ýçÿçÿîó[óÝAL)ƒæ¥o€ã¦îT’5© Ew¾Å½ô5Y&’$5.~S¾çýëO$ñþûoiz¯Ÿ[®$ Nó¾ûÒÅ$Ž9}TxÇõ¾ýâÚ>Ô™#ãG&òïxÓƒ¿ó'ûgûìO>þúþècoyýRþd1à _ýÖK¯æ¦ŽwÍs|ÛŠî&3Ø*dED"o{ç#<¿Væï\¸Zoz…lê_ÿâϸ!î:>¾ñÈs®•«é©ñ~û®—K¿ïÎé?üÔ—³KHÖ|áòbÓõLäá'~˜ròw7?wbê=o¹÷¥Ks®G‹“㪵FÍ^ú­ÿ僕ºÓtý‡ïšÖUù«Ï|ïå‹WsSÇù]õ$ƒ1ª¶aÓšð¯ý죽îüÕ?úÂæ§º¿£0€ßÐåÙ|[¡¤_ý£/´®ü‹ðØÖ|{Ù†.»sßÉ›dÙzÀZß­Ÿ=zçŠSž6I’’$¹v廩ãö âÏ|ýüÉIkzr\&R©Rû»¯ûO?ý%ÅʽñÞã>ýwßüÃÿô¹Ö§<î¹óØ¿üÈ_wßñ?|æo¿õÚµksï~ÛC'M u~ù³_~ê/þ櫪‘’d½Öm¹®âëß½tº˜yäìÿøƒïýÌW¿ëù"K\Ÿþ›Oþ—Ÿþï91=ù­^ýâ×¾óØ›ˆâ€GÃß|òó?òæÓßsê­Šb×›/]¼öÚk¯q’%ˆRK\®þ›ÿø_~êñG}óCç/^ûÚw.¼åÁ3­+u—çðÎï;«)¤îxŸûÊ·þóþ12Ëví‘3GuU)UêŸüô—>þ©¿Q4K’U^9Sb0n!ã0à—„Î?õ¥³ß÷íîÆÖg[óýžõ}vÃ0´rùÕÿÅ_û™wvÏ·#áÖù —ç–;~p–^;¦T¿{µ>uîûÛ3Kâ8œ{ú¡3ÓQUkµ U]›éSó8Ž–®\ˆ‚ ý$NxAP´‘-IYºzzŽžÊ™Ù±Öñs¾Û¬,]ãÀßq74ª«~³ø~‚D‰jet++ˆ„ÈÊ•Ÿ‰ã(]˜2s“×^~@á躕ž{å»aà§ÇŠVn¢týR³VÖ¬lvb: ƒÒÂ,õž4+Ó¬”’$ÎOärcós—ÝZ9 ƒßù•Ÿ¿ïÌñýɧ?ûµïe'¦E‰T–çÜf=ðœ8ŽAe%•ŸRu³Sj¬J Wܺ†¬hÇyN£•cH½Õ…Ù( Ió¼ k†•Ÿ"²ºrý¢ï6’(DAÑÓf¦ H„È*M Æ-CuuñìÙMŸ(}áÛëæsoxÇš8ÿR*?±ÏnÜÖõbëÙ_íå¹ç7t˜Z/Óš¯\-ßý6ð›| NâÂ9‡VΜ<^¯×“ËW/5«rïÐx^Lã8äÀqœÐšÏ‹’,ÅÊOò¼À ¢(É’¬ ²ÆóQ4 Q4K%_³8Žç¾å ¢D+Eå8—+*ºÕªEjìˆ(Hœ 0³ª•%àÍLç€CK­+º%Jà~òñ‡9<4{mñ䱉ûÎÌ4÷ï¾þœ(iÇñBªp„¨Õ„Ï Ç%H„Vâ7ü8!]8B4C$Žç“$1£P%D52…#óÂk¿ÿ'Y©7óÅIŽç9ŽDÉHçû7‰$+)Yéú“¹¥‚ônŸJg0·gLi«I9´g»Æ”®,”oÛF\¾z¡Y«ÄQÈó¼(«VvL’UÅHól€Á`ì ê9n£ÚÞéÏùó/©FŠ(Úa=»q¥´0{#¦t;/„Z¹IEOñ¢ØZ©çQQ žg»† Æ.i‡pþüKƒ?¢©ÖS‡õlÛ¿ûvË£šiÕL³ÞÌ`0†i4CÖŒ›ëÙ.¶¡å785›µ(ƒÁ`ÜžhVf‹ß85ûý“ƒÁ`Üž|ࣟØ0,ªÎ`0 <ñÄíÿ·ÞQ©T˜˜ ãöáÉ'Ÿì¸ÂüƒÁ`€ÙƒÁ`0ÛÀ`0 f ƒÁlƒÁ`0˜m`0 ³ ƒÁ`¶Á`0‡Œ¸Ó2™L×ë¶m·~²í¡}”ik^‰oäØžõ^бõÙö2 ±j{¯ûáÒ«xÃí];Û¡Ë¡£T;-ÏЇÉàuŸ²b§ÝïvdÑGot•ç›þ· /”AòÚïòV'ñÎ×>f2™ŒmÛÃ-pשÀ(†­Rz‘ö"œéð]å9šM?r¶a[S¿¯Óí^³ûök]ÙE¾­6žíã—ôš,˃éSë­•mϱýzÇßÙ4]E7ÜéÞ¶õDû=sï/í¡´E‡„wõЛl@áôê-\Âmåy»Áï«p·¶ñеO¯yÇ~÷›ý¨ÚŽÆX¯’´Ïß;þ>øòwXÙáÆ©WiìzRÜš@lÍqGÒ>˜a²Ó¬÷£KôN×û—p/ë£ú+^MÏü†îê¤ÓkúÓ«WнÕÁÊÔ¦«œG§Gn;íJQ ½GópÀ” íS¯è:|8îÔu´î½é™mH(ÃRÜÜ]c5ûTµ]Ô}úšæ–½öé'ý+¾­¨Gd~3ÄáÖkR?j5Ý樂MmÃêôý›fÕzEfo±¦µ Z{y¶ðÒF·ªrÙêL”ç×uYqˆM ÀÀXÚ'!îߌlÀÞÜ^µŽˆöMárî_Óܪ†aÿ»—¶ØºÄ2Êͺµx£é9Ý,ò¼Éü† ³<”ùBG„§Ýæ÷ZŽÞ¿Çp«6¬’t”ê°šæ`|¸®U8°vÙ*ê>èßFC,sפú$~Àݸ¿pºäÃhƒô1Üêë Üþï½ïÿеåêÆyÑìÜ7ƒÁÄÛŠÖ¹oÏU²š•Y™»xõüÓì› ãpìÁí«¹Y`¶Á`·Õ~Л‘‰€Á`¢y`0¿Á`0Ì60 ƒÙƒÁ`0ÛÀ`0 f ƒÁlƒÁ`0˜m`0 ƒÙƒÁ`0ÛÀ`0 f ƒÁlƒÁ`0˜m`0 ³ ƒÁ`¶Á`0Ì60 ƒÙƒÁ`ÜB¶a×çùíîAv| ƒÁ¸éÐýUâP&¿»Rvü±ßض͎ˆb0Œc—g‚nœõÚn$lÛî8úµÝxt(÷®wv$Ûq¥×¯ ƒq;»ÛªÙ]ÊÍï¥ÿÍd2íê{£4[uú¶é÷zjwi2 Æ-lú«Äͼ¿~CgbÀI}Ë”µ ½Õ¦µ®÷J¡ÿ¯ ƒqË»»ÖÌûkväì¢k)]íM¯_ ã¦k¸ûAÙYL©ÝÙ6°Óáìô1}|Ž®‰÷ÿ•Á`0n7›Ñ®“Á6ŒÓÔÇ'`ƒÁ`ôWž]§é#dÚã?½<Œ­*žÅ” cj¶—JÜÝ>%qåüJ¯¿û'2xš ƒqûØ€Uâ WÓoÐ b­Î`0£ÆaÚb0ŒÑD<ļ™U`0ŒÑÔ±ì;¬ ƒÁ`¶Á`0Ì60 ƒÙƒÁ`0ÛÀ`0 f ƒÁlƒÁ`0š.ï7<ùä“L. ƒÁü†<ñÄL( ƒÁl3 ƒÁØDgLéƒü  ƒÁ`Ün¤Óé|ô=mC뎃)J¥R9ÈìF$뛢<‡[ÂÑ”F«T#¸ךϔ¸F¿?T9G¡­2ôózÝ7tž|òÉ å²‘¬oŠòn GSí¥)ß:NoHiDÄ5úýy¤Ê9 Åh/Ãl+ƒÁ`0ÀlƒÁ`0˜m`0 ³ ƒÁØ#;>÷­ã„gÛ¶ëhÏ|Û °¯…9ÜCL7$?‚çåu• ;óõ&ê]7K“ÝžjðZQ>â-Ð0VžC¬øÍ8$˜U`°Nu[ø óÖL&ÓË]h÷*öÞŠ]SÛšo‡±QÂa)â>J{Ùz¹/{Wë½$¿µâí™¶_ïø{?k«èz•symõ\ûw•ŠeŸz쎄?ô¦J†ØŽƒôám»Ð¾–°Oîú÷ ®^ª©k.{ÅÖ6Rï•ÍF!¶Šl/RhO­kO¼„Co¡¡Ôtw’o7] ÓÒƒí:±«$‡X… “Ü5µþ¿îHŤ«ìH,û×cþЛf¸eboï߇ûöþ%<˜¹;Ùk| ’Ë^Dq³®Eï«öïÚ;zê`bAv£ß(Ã-äÈÙ:FìÖöêõëµÑÞ³bùIj§y Q¶;Ôý§,‡¢ôö’µ¸Occ4Såšî¥Õw]’QïáÎö¢G±[ÛJ~d›fèš÷Öè»î #«…ı‡8½Ú¶iGD7õ }ÞŒêõ0i1>‹^ƒ4Ùm¸èz‹Uyž0ÊBã÷oô7.ÙÕ­õÑ^¶Ž(öͲ¹hXu02åhRÿ²íBÎÃGû‘àôÆQpÐÔ%?afÝ‹èøýâPäÒ5µövÚ¶!‡R®é¤Ï¸#A î=ìGÒfÖÙ¶«X‘/Fÿ&zÉw!Ÿ–Þ.ûˆŒÁCì{ƒä²—!)î¢4w½¸îÒÖ|»vëý(À 5Ý'iôOvw¿îGñ ‡ôïý/î·(vW¶þå<È‚X©L|X]ýÀFßhÂf×%aßÌ`07Gp‰q0ÛÀ`0F‘‘ŠÜÞ†ˆL c”ÍãPDÇüƒÁ`0ÛÀ`0ŒíèS:àÓñ|öQ;~ª?Äަ4ýèù›H\£ßŸGªœ#%.îáGß÷Þ÷èÚrÕ©Ù¦Ë#uN:ƒÁ`0lÒó~B³2+s¯žšÅ” ƒÑ‰x³¸Ì•Jå }®–ÿ4²Ñƒ­’¹)ŠÊäÀÚôö©ïÍU©Vi·± ]ï;\ž|òÉ`×D½Òéô†FM}$3âEer`mzûÔ÷æªT{i7`1%ƒÁ`€ÙƒÁ`0ÛÀ`0 f ƒq ¶aëá£ûjã­Ê­Ô²CÅ·ºtƒd´m+ì±™Äýî }£ŒƒÔ›={§ûÁñ·v]ÓaÉá¦6 ý#‡û±2º£†¤öXHþ=Rh?Ö6ŸÇµ\Å>“‚ýWÿiH¯€ì¶ø“=t9Ø@Øvâ¹ßSÎ[Ø` Ñ(v&mÛp;Íz×ãq_lCWϨýâ¾N:úç>Ü9]‡¢ß/¿ßg¦.þû4ÜN«°méêhïQ2‡%‡}ê{»èQ]W_wZÔÈ£‘;€ fÖÙѸè_È¡¨qRC%‘^~ðb2Ûæ¾± ^¹ô/Þ W†°|±k†Ûé^ƒµÑ°¤qXrúb×’ì´xJ£ÿ•þ:ÜÑ=¸F<©]ŒÖë{Q)#S—¹É & f4nÃ`°a¸•o·~?š©ÝJ’ar`B`0¿Á`0Ì60 ã6 {LéÉ'ŸÙðÙÜ£,Š›·¨L¬MoŸúÞ¤•â~ô}ï}ÿ‡®-Wšý`º¼õDiƒÁ`Üò¤Óé|ôš•Y™»xõüÓâáÎÊ ƒ1‚tÚ†'žx‚ …Á`0nK²=mÇ?üa&ƒÁ¸ÝH’äýÄÆÙ>%ƒÁ`tÂlƒÁ`0˜m`0Œ[ÂlƒÁ`ÜŽ ºo¾Å}ÍÙƒÁQÝ Ì”ÙƒÁ5ö]Ao—û>º2Ì60 ÆÐôMïÊ0ÛÀ`0‡¢ÄØ•ÙYŽÌ60ŒÛP‡Þ"³ûæì=Gf Æí©C‘}]¨è*´çÈlƒÁ¸=uè¡W퀅¶³™m`0·§eBc¶Á`Ü4&‚Q³ c¤ô]‘™‡Q³ ctf¯·ÆÃØ6ö^4ƒÁ%ô}Ÿ½ÒÝêÙÃñ6¤½ÎèÉÕ†ÀlƒÁ8Xš:{\Ïnw§¶_E ö4£ßŸÐ?"i0Œ›2Œg÷5þÓ©gEÀìÎNœaËêôŸžÑïÉìÞ^1ÛÀ`0†>%?¨Ùno=+®_µžE:¸UŠZ§ÿÔ}à % 4Ü9³ Æ-·¿3ÖîÏrûVô61¡-¶jèŠmWº»9ø­ÑÈÍ ˜m`0nA’Ág¬{˜Îž©È{ð3V{º Ýl•d†-Ð!ëîCܤ;蜀Ùc”9%"nþ¯´Y¨ Y¥¡U‡ô³Uàî8Ee—«Iï™;9Œþ0М€ÙcdíÁA„õ9 ½Ù»)ê¶ÚÄ\0œ%béiÆœmµs§2{´ Ü«´'6ç¸1sßÅn׃{1Ùc¤&ûíªä ^K€ÕÙ½SU ¸ÌPšaÐ6Ä¢ úH±¿ÅM€`u/¥â‹ˆÛÒÔÚÿ¶””Ò¾œÐ±š=@Þš6³ Æpuý'wª„u`¯ÍµS{±aÍNU•lÊo—çz¼%[gC,ÕAC(í*u; «éŸÂŸC@»9.õÞBÛ¯}“hëjövýaxë"Ì60ÃÕõNöIïhH´Ýnüí ÷®H°¦R‡  Žhi0wâ¾ P¤þ²%Û”s@ ëõúl/Š.›µ(pqç6þð¿(ÅlƒÑ•Ìf}Ô¾÷eÓ¸Dm‡“»~Jp[U²ëO2ìpú<`_„@6GÒïIã\¸A_lÖ(Ý‘X”A_2hTÜÕ4*vy‡ÎÁ>¸žÌ60»Uú"0¹1̶ÿ®éÿgÁÏ´í4p8 d€`âç‘ IDAT"0Óºu ˜N8$¿ãéö@õǺ(P®Ÿ¦ëÐ2ÛLŸÅʲõØ*ÅâêTº‘&üUÈóÈ”‘I¶×tÁ"`'NGwSG Cü>郫cšßÞn‘–סîÜlK=ßg¶Á„଄™‡€»€Ó˜ÁÑŒ€d¦€l›;p4‹#§%¬[]|Àìu3B–2ˆ‡b ¤bÕ€"px(¶†@9@詌Ȁ Tòm¥^[­X»3BaΉ*Ý´DÉwW» îD”_^‰ 3À±M³æ€ïù°CØÛjº,¨¼õž4Û©JÝ$+®IÂþ•jöPÇÝõ"›ì»Cè¨tgñ¥€ôdˆL[0n z|2 ‚Ò$B“6ã–×/‡@„Œ‡"˜µ«\C³m Èæ,D Ç„?X!jU€¢Y*ÖÍÃZŽs æ&@—»h=$@È µ”PÜÒ­™nz“X(ÖÕ5;$´Öoè/º®†Ü–•ˆ!:-UHH6@í“e¨¯9½%'uÙÉ$€V à7ÍÓéæ?z~Ö¢ Э?U€ú][ q  æÐ꺽‘` è¯5÷ßÅ”mbÎÝðä’¡uìâvƵýž¡};„ù Œ[ F4³e y›n–L‰ÅS:™fÁ× §œ.!i’h@”ƒà¼U[z›´¬B ¤È<æëˆL88j«€»‡&íŠÏR c ãÀ `ZÂý<œ9‹tÄ BÀá×6FHˆ»}’Z‹Ú\“Í3GÚº:¾nuÖ C ç·ïR©œÈ›6QãI#.””€ÈÜ’ˆeÌ.9¨rÐUXx÷"´O›å™8zRÐÇà%w8ŽÇ¹Šp)n–‹e¤ã1ÙÏ‚¥{†Äq iJœ'3bVŽ9Ηd1Uèº6Ãų*ˆ*!™°ê8\XÍÚÓm`ŽÕЀeÀÀi Åf´akç$Ðh€DjqÕhb™vL¨û)—#ä¶,H´ü•:õŸ´õµh÷ÆÍkJSi-*¨­P h•µ©×'Šèì FÔZWÙØsëFÅï=AÖ}Åz}ƒª»]Tç bYû³ ŒÃ‹#ù-M2‹ À.µÅ¢ÉjÍ ‚œŒ¦ØÀ¢‹šŒr0y;Šíf+© &ÈS¸NB¤DD‚îNeôtÀ)©01¢ªYGèÐfÔpy·"IÉ„,rÞ…’» ª+šlH(KiN3šÙb1+:¢¬‹±.|…¬p\ÕÌšgL.Ÿ“.6=›ç„hrà³Ð !›U i9ѨÝòe9i†i¬”ÅZQæïàL# ª!7!$™3 (E±¬J—–‚lS]äxè5\…L¼bö2:މäàuÜÁ7Ò/Ä À§ Ðx@Æ:`EiÓ;nP ˆæt…VÖ÷Å0Pf!:PÞ¢£"$€Ý6ƒÚ›ÿ›HˆHš“*À ‹.lˆºfÇTûüàí¬WÙ[Jr‘Ïààµ=. +–ÅlãV2  Ð"úDº¾O¾}j–AÉWWêßÄØ%eÔg€YàBuã ÀY³PˆÎÁ–¡^B2† 9ø€­4_ÉÍQ‚âªU¬ògª±{5Åñ³å0çIJ¹ÈWi]®êñ„\É &²+Ëjfúh&ÉÈr!ÊQoÌåi…»dúµ6ÕÄ%[3ã¿6Ÿ«•àˆ‰œ—2yÃ’I#Œ}å yÑ3æ'5ÑÂHp0 Ñpu˯Ë$R’&/ŒK™±XÓŠ…o‡µÅ´”¤V R|Á¡’£q.FÉö(.Pp–âÎQ¾Ne%" B᯽bà{à–!c€¢°ºI×<˜À²õWÏ[*=¦b<¹E"(cSKñ)[q‘¦æ¹‰Ìvj*:Uôøxû¤Û»oí÷·åßPØ­ [mú›o›(7ö_»µÐﲟY€3Øáz¤.$ú}³Öäw_¡!ìËÑ@Ì60Ø09LÒ´…£Öpl}â§5Æ-“¡eÿµ§ ,B³5áBT†ˆÂð“µJ… #ôOØ^Éõ+Mª,¥IziQ©Yo,W㘊‰å¨^¸$ˆjÚ?* amõjuÜ®ŠãrúÅ®èÚsØÕÉé”üB*@žŸÌT§W£bpÏñ¦EóÓ¬‹Fª˜t^ V›æ*0R͘ʤU1Nà$bÒØòÜT\T2'‰£6”&‡¼éóIìbÃP ¨iAJËÉåcZ/ŽÃ­VÔK¡’“ý“©ÚÑHZå1ï®^EU†”@œ@hÂR_–IP£^K–c€†HA¹‚*©Þ=‚…žª"›Ç4`$ó6ÿ™<ïæu:©‚KCÈŸÊr™’­6â¹Õ&üðq“bÌ*ÐX{½l ©AÒ n+êÕ[C-´âWþ¦ýL-u¼¡ZuÙP™G1Á@¹]í4lû‚Ä:µÎ.ºÕýX§ÝúMîúK/‡ÈþœÇlã@…ŽÐª‡Bž„€&°} ÐQ”æR kʨù:ˆ\úk¡Œ…k€@1>•b™€N CX0è¼LQpg‰Ì›Ói!«i)¯æ¸ã“Á¤ ®D*ׯ\»ªº ít5PYÜù¥TÏiY%Ž0/Xð §îÙ®¨'®ÈñFXÓbÎ?bi©4ó)¡lÁP³5ï­B–šZ!ef22QIùvÈq‘®‡ü±JgËyIŠ8ZüºSˇša%‰'UR†“†%s&"U‘T¼V§M¾ÃçpüXP—B’\<âÏå¦ÅpCÊu4rS±:èÔ-!¬R&<‰šSˆ¯ªqüpdÎàh>²›È~kVÍ1NhÄ®S=åFר•QÄ8È[nvL˦83«*Né¨Q›¿p‰‚εÙP`r aÍi¸aDÌ…ëûÊ æz ¸Òw&»Uƒu(ý8"UÐdÝö´ßSÊÛ}†pèl¶„w¤õ×·ciGNÍØ³ ŒÃ2 '6<޶ó†ð+´µ%"Àf@Çp2*òdŒlþt]]FÆF)| Ѐ,¨ˆ `PbLI¶)•C‰‹5UÎOf>&^È[1iTôhn‰~™·Íb­Îc×AÅ¥#Ržd=5Õu>L;²êIJÇIŠ@u± 7Ê@©[>Ï™pÅzS’-Nš2’*Ç<áEEN"K±ër¼%’<• h9θ,UWDgEÅ µ.,L¼#œ™Ž9^\­s%1´:$>Áj=®ê|óš·t‹ÏŒ¥r€¸D¨…Ñ”´±7¦ÎÎÆÆ¢F¹ž®5⸡\åçt‰Hññ)K×LTË•ª‘ 5↕ç³5Q/… 8pb/«2傦T…Z•mU€(¥$» 9E=X ”ׂX@œfRw„ÚDµiÚµ˜Âõr&?o»íK¦!è4À¶@—£94Ûñ~C·™¬X½W¿9'*¸Xõ[ýd‹q»¨â …{zmíjÆî;­À|OUÞÚ˜ñàêþà7#1ÛÀ8dW 3Ö_rÒ¶Þ_q@ 0 TºŒyˆU¨|ym?Èz Râ×H!@m,´Ð ¾ pÀrÛŒIdâÊœO(Ðä “*ˆj,®ð±š£¹IøZÞ§Ü‘7ÊÒjá¼8VNeU3—à«F(ñ’Ï*ŽsaÀ'jVl˜jCQòQÂQ*¡‘ä ¥#^ÑGâcAˆ8„8>”C ެ芟.Vu!‰r¸ÀEg¹Ìx33­ˆ„ƒ-¡ÝŒu5ŽDû5Éó²ÏGK˜¾Îû•0¡Õ ™RM;äÇ 3÷g­‚z6™Ÿ«Õb7‰¢E%œ¢ÍÔJ¤f»AÝ™ˆ GÇ}b‚èu’8zÙç*ÍdÞ]Ñ}—SBÞ°Vyb%Ù–åãf*wJ€,¶ð nsÎhR]€š£™\# ¾$X’š@žˆ,ŸX)nJSOš†0fD Õ&f(IFV ª”VM=Ò¼fÓV9]®e¢T¥D y¥ˆÕUAZi†+DVÏä¹(â-kpÕ€â*GA⊙ð.áB…WR R–¹@6·‘hÌ¯åš DÜ$‚Æ'GJ‰Ó¬ª“ž©û÷À»¦7õ´ øù¯`åS,e=’µBMçµDäÍ”"UÊ~ÅMlÅM¼:1’Òl3*ÏÚʹS>TK ¢''fcE¬^_ˆ«±ò¾£ëµ…xõJœBƒ6UUi“÷yúEÕCRw¬jÉ+ÕjUGG–ÒÈX½¬sȉ0|ÌB&|*«’¹±Ó‹ËÚÖ"°ØÖ%ÜÍoY·ÇvjÛù” kOm9¸"ÜüŠû&Ã@6vèH>Ðè"¿`ü½þw¶^0´·¨{0û²v>›‡©2˜m¸M à þìàƒ§_Rrk†Ç¯ÀaÝNÌK'#{6(¡!é Jg£5”ÒˆX©‹¼£% I½ÙJùÕÖg ÒÄ“i½ÜoUÄ̸ À!P? ¥u` T&$O4KàĨPUCÌÓdœ “ãgPc܃–ŠÒ"—â3¦/Š!…Ë…‰–誢K’ã†&#èºÆ/E]"q˜ø+<_ W¨'Åœ)ˆfÛ>_¢…Hºƒ@ç§‹YÔå¨N¯¦fCU—›S Ï å à|©”æ9 rÆaX#ºÏ™c'7«Èç%®ê¹#*7¥º²Õt4®\—êͪô²¿ò$«œõVm!irfºy}Zš>Vs®øµÈ‹CÂý³±H Ó 25Et+Õgk5ѽ DÝqJº&aE¥†ìÊÚ<æý7yIOG¾"[K 1°!…©à8¹HçBˆ˜XÅ¢«Âº±<°6N¸£ÀSÄ›® ½VY pà/´¾\"`¶Úöɶœ®C`OoG'7Lжïew8 Ì6ÜÚsüýÙŽ—“·OPì½;Pl¹óñu òÁd¨Ž{©Hø![[6‹ÏÅ|±Q²ö8EuL³iT’¤–®ME kMÏqjb¹çª_Ò¸PÅZ’³AÙü9…˜àµìJm6.éWŒ%Ó¿ZšæŠX4bÕj²zÑEé•1L¨GÒÞDU —ÝfýÊÊÌUS½Æ%Šî™¸äh¼ö=N fˆqø¡â—ê¼Ðh½¢à´NË´0uÚºóžÜæ(´¦Ü"E Û_séÕŸ}@n¥ß\;…ÁížC§‡qè¡2ÀUíÍþñᔖنќãÇí‘ÓatÁþÝ1³¾ç¼÷oûø2·vQëüÞÀâQž|šS8bB"^?"5˰/FuÑ•ë/Ȇ—¸ÒjZã´ÀŽ‚êŠWoViõÄC Åcš‘nZà’©—•íhÑCªég Øè*­hÉBL‘ñÉŠôPÒøJ´HUÔë-ÍL¤èDcåâ’þJ5ôà´â6€¥@Ö‘åñ\sÍB¢õ}¨7® ÑúÇ3@Q_s¤AËî˜.í·i²µ;è…öÞ\ë0Ø2dÚëz¾uºåKsƒ©Ý!¼F°­¢oÿ¸ú€;n.Øp>èÄlè±ñA¡ÌÚgíwníÃÍ5zu>Pnø>mËâ#DˆÖö ­ ÓwMç§«ñx³D9§jp|ªsqc1/$CN'y~9öó!¬(`ieËÇ¿hÖ"§GˆЭãb4ƒÌJꎺhÀæBMª¨–OÅBÈ{üÅ GÕï’aS¯L¤P¾jVNšJšwI–&K)[É®Ð\ ×%Åâ/#rj5‘ €\º± ‡nšŒ4ʆêì Š¶½P sýãNaë=éxmq!ÞX¦ÚH9âîqê¶ZVd vãqn §ÛË›JH½þgxJ€º£…f²çMtÀ0TÒ}¤ïâeröÖQ_i ƒÝVÜeÀtÓŒ£kïÙHªå`–; Cëó™-/!"0) ŠØƒC[qÖ€8O<^A² ÄUõU5Gˆ9E¼@íãÊ›æOK±,™ÄUˆÔã(ÕÐ5"Xªk*8£ëcGR£E£Á¸(Æ+r‚ŒG24¶µ•šyçt‘¤f8=ËéOÜ)IÊ©©0Û$þ¶‘)d˜­6k_‚¬=XM‘8¢R¤ÅÔmú˨ú"¦céÁ3C/lNcµQiVãò±9GÕS‰(¦›<šÔ’ÄVC¢À8G‹So¹Hx>Rì˜MÔ£Ä{5‰+æ3jT©ó"üh*” jh5jVÔdL­—dZòÜ¥(›q•ÓQAã>®Éã¨ڢ녚îK†,U}CwÕ%jFt])æõqLH•£Áµâ½³/ÿyä¿æ˜÷ˆGNùŒš}1”+vU ™*b¸å…YÍu%<ÇC%êëòêCš0ïrÏjM8׳^u¦Ae'cgSŠÉñF9é\­oãÜ**€ŒÈ_û Rc³VE†`…Þ8 ¯gPôF »¥î×L£OdÐ×Ï•Ûn¢Ýꮳ7®¹8µY­N¦žvî³vä1ìèl¢a…¡úÚ¿ÝÂlÃè†{ íqfÓÞ{Ï ¬'Uéò™°€°å×”N ¾C…8!Ö AQæT‚9C§i¢¢P×øTD&A­y ¤¬ ©±ÓzTŒÈ“M*Åá¸c„¥H©7"?Ìð2U&},áéJÐ ¸^.ö IDAT~2ëEU65±|Pì æÏî‘\6oZÇóç{×1È)HDPÂùï)q¢ä«—cÞ•ã³Z0u¿]…_7œm6T.{R22¯ˆQL%ö&ÒœÛ\â ᫲šæUÅr «Új…KêŸø1G¡`5D®Ñ­èÄT}]ä’Pœå£gdîn=ßLP=X‰ E+PÏHa"’¿Y÷Qã܆Ñ(=Œ4Ø"Ijn”T © YQù—LqB”"!iSÏi™œÇ ¹ñ;̉#¯]zΧ4)¢Zèhq¼b”y’&W#ÙT!øÐTG&Uõ¸l§Ã§kAõ…Ù…ÉZ-«-Z“™¼¢iœáù|Ö¹ú2–eИm/îp*ÑõÁ½l~Ž®ŒKY ÜõˆÇÖyÇkgQ¶>Y12•…L6"à!¿ DÔKŸNÌ|(E¥EU‰\Åq\‚wôÄTÓ¸_3'äD_R9ÙQ%=Œl#|§7"‚ ]Ñ\[Œ(-Ã…G…Œ—KRë†-¥œðÊ„"¥ÃÑ•¢rm5,óü¢æåy®Âûs|™ŠüW쩱inIÇI ¹UQ(EÊÒ<'#‘æÁIÓHID%æ‚P¤Iœ BCIê5‹rbD¢ÖX >,ÇW£+Jü| £Ÿ&ºf%š*ø B;5ê6}Í— Ïù4ª®6–æS*ÇiVh9¦º`ÖóŠ®è*õ§‚ˆ±Bð}W›¿Ü\©i «rèrH^ÃmH¯ù†Zãâe{>à!H|ÌKb H!1yK5ÔPUš„óÍY¹Â;‘§9>o¹~¬ðÔŒ/h59g]XÁçÀ™Ðs’2e™)%FNƒFê˜å¡ñ¼t‡.M3•rÔ rUN[¼zÜ5~sâ[Í‘ƒÕVde’À,™ã(Íp=š„sX霣dxZÈ£YFàRS2N'h8°€k[Ê@BP*Û~öˆEhspèzG-"PÜÍŸc 0(s:ß´ÿ*ÝóSzROûA­mBPtÏγ ·——Ð¥[ öÎ<íç,lÕº¢w© æ2€U}Ë'l$+PHÀéÍ„ùŽÓ\  C Q” ëž+ð|Î(‡ã‚åë@p‰p°ÿöÞ´I’ìº;o÷=Ö\+»ºº@ƒ @AŽQ3™4f’™>é¿êhÄù0 e3Ñ&°tuuuV®‘á¾û[õ!3«2«²ª«±‘FÁ?eFz<‹|ïÜ{Ͻ÷Üð45©c4'½õux¶Dô*3N°á›µ•Nƒ³’yöYµó„tQÓnº:ÚGÜÎBÓ W‰™&zÊN)¡éR^ÒÀÃÈ4É@å²õ»¿ªšõf£®´÷1 R¨'‰}>Î (Šh."ψU*YR=IƬoº4¡#§Ç¡£p½NZp;tíËÈ*mÒ]GNÑDŒÝî¦W¦ÅXéLxïm—ÛÛúïÕtÖµ±?lÚüʯ \ÒŒÄÚ;üé)CŠÍÖ1¬DÄä÷_Däiš•Ÿn"Eè4òc?Vþ ƒ_Sºt€ê¤ J„Y&¦,Vç4êÉèÍ_|1ì~™4}h0 h âÉ!›|²LÇ4ÕŽ=píT;ÃUüh;=8äÅ\XIÕ|©v¿a9˜éÁiÐû—ýNÝš/nd.LªŽqž„ñð¨Ÿ=¿Ì n¼{ ”tF0(4 B(åƒè ýp³™gÀÄ‚">ÆL߀P0àÙ»íNßF×3ÜÖ÷ã†ïâ‡%· í¯ ¢ð®ÄFüNÛp}F„TùaÈkßã&€üGVxý£møG¹>4JÐßmÍ÷¿>”¨`Gp׆ÄÍàs„k‚ëñ\«öö\Ý”¨Ê|< 8æÐÛ@÷Ìüü\ÈjðÕ*¿ú¸-Ë—³fGÍóöã©OYµŸË5<ß25™¶kYߎ¬Wèt·ä&ž¹ø©"ué=fnm䇙ÝÌ:v0ð½Å2~¬G3”ê’ƒFˆªŒ':hQÉÆü έ©¸˜Æ(zI~0í÷~tyþ<ËK%x"fb“íX•#¦,¦ÂØ(ë“dÂT¬r+ZÑÈM¥\¾í¶v³oD¬ûvÂýbóhõr²l¦ß[&ÍGj3õ»Kçi‘¯c¸]Âf¡Ð4¤]‚ÐÒw»4Þ!3ÇÍiw®^ÇõKfKÈ8YL,ŠÞ9O´l®ü>Ÿôyò¯#ÆŠ­³ƒíØŽ£Ü8a' 4°cÈhüÚ…µEMÊG å¸ö/‡íÈDŠ(ÊäÞ J+nšñlÜ÷s"–Ií²á|„ÚB·Ó%—Í÷ÕÁ9™i¾€Obî|¥^ò±)U³% G`:…UWè<ð¤‚4pò 0x¨á…œZ „ç |aQ ¤¯7ám3M¯Q#@¯‡6Hé»…”7Í@$g¸n…ùðÖ)p^ Ç>Pé´P=8Fèô)ºÕÛ7S@Áöýé­Ë¾ÿ¬w¿d·´ ÿÔ¯‡ÿ‚}s»€þ4B ”à Ïûö#Þ1Cœj¤(Äé¤áFÛ5>s¸`(c€@üh2÷ùDÐ Çš‘„¨|» t A`G‹´þH_Ÿ¢/”ÂíäJ­"þ$ ã`" Mâºí¥m\Ôƒ9û2}ìöhÍǸRJ¤Zø«Úl[ž`êEÒïÄ«?%ó|ëJìr§y¿áÏ£ôHé,0r5eMÆ'ý(4-(ߣªöVÍú®zãи1Õ…̹ˆ1k»Xû—ò£ÔE¹!ž¡uÝ 6†oƒý´©ÿvhË«yKèÖV½¿d×çËYþÉ~C™¤–ГÆT1µ/EGÜ4³¹–4‰j”å4N§Ì Ò$öe¿žÚlÆmt¢ùÓÀcËŠgÛ¨‹·Û$|<SFã9ÛÌTñÐÐ~ ë3æyNü—¿¨Üå¶jź¼²0öe{õù0îêݽ"™Pöâ}Õôź)Ÿ©.)Ms“Ž÷Õkf\YOciž'>¹œÏS1ZSf1ØŒ¤Yè=kÇðõ®[›36·‹ü\yr1âª8 ™GÀ?½ÂNÀ0³y~ ”§ð…Ôë’†û›ð›×Np”…c²¯»³P ×yÛ:À úº"îºø53æc°ºh}¢ZÿQ×l¶Jö/Dq ¢_>¶³Eö¸°G.)„{ä“çÓâ×óéñ,]tzˈf÷®±[q¯(ÄÆð‘øã3s&ãŽ2”Q½t“”dB¸gåký˜Œ~¹Áœi6Õ#íjœÅh²Î|FÈÏ{¦µX¥Xæ-¢ËÇñ4¼å‚ìw|aE®öˆ,¢„…¥‰ ÄeÔH}N0õÞæâh²ÃU7©¬_ùöjÂìR©,/bæEHç2°*G.ÒHJ:hÏ,cm9ú­Ž»nÂ¥ÈÆÝxýÌ uGÖ4ÿÙ`.}H,;¡ö×eu6¤L±³KMeÅûuþ(VÃ$œØ¾ÜÅEê¸öÁ!kuÔÔŒh’¨0›“1Ò8Öb-dºžúT ‘—Tñìp§üåj¿úªÎ_')DJӓݪGLz<ž4JÖ_kúk™ƒH4#Vç—â3x~±Çû·€NÞÎ|¥8ÖRW‹×¯]×P¿ÊQ\÷ß!֯ν·ì ,_†}€ÝV/…ÐG¿ó¡|@„•µß*,È^·‹¾¦È~ûLÃÛJøÄ.ßµ°õ¶á÷ša~à*Þ2õ;Ë>mîÙLЕïJ ÝóoztqÙÙS IÕk(ƒ}‚° ÁŒXœàVnP f*Œ±Îƒ^l¡¡%Ž52H‚£€R«sªÚ¥ÞÒ—•_k~± ¦’MhFþT—/ša\½ Á¯+lÔ“g$ú·ÆOW¼Øžš½ÝqœogAä'µÚ!nʼÎu£ÂdÆEÆ®6ÁÕÝKh¶ý­_êã Õ^P«~ò«—ûõsþÓÉ/uÑOŸqGj§ÑÔåÃy>|–3So“˜n‡±‹³ "–è—|HK?~š–L]fýËQ¤u<ý&êȨ±H_d»º7+üAÄÒº †H× dGÞ?K%z<'Zñ,ýW¥ÙȪòW“„>YÌ÷¢(Fº5ýh{K=¦Bç!ZšÓ½Oµ–~p£m%½,èÔž¶&áÃLœyñØ…ðßBÿ’†¹cÝb=˜3÷ìI’–ï‹4Â,g.Ûw }…xE2凫mâ[÷ÈH>:’0SéÖ'r4S>$}™¸©oÉgl ^É·KÙ©¾¨¢¨ß²žMï•ߟóÉ'‰@ƒ0B?ÃeAðHÊÝXÓzýOÐc7c¶ÎNgõ"VíØé­±>ç† Õ9çܶ'«À÷:ˆ±?kÎ=¢º yu1ëìØÒᜯÉÈ—ºžá²oJw;ûi¶nÈÆjp›ÌµŠïZ¦ 3"ð>ÛDd’v ¿GpZ7œ9u5DDç¬,"žÉ¢Þü(r6Ky±cYæóXd†ƒó1áEP¢ÄfüW3éŽÛAk{R£h9–»ùV¬‡,Äš¨ÇƒŒG{9´ÛmE‰Ÿ…žŽå¦mâ`BöIâ•ú>þµi«å4¨´íè–×+vÙ%"øh*a}„ñŸª6’]Ù~%7u,™šÏÍiYïb5™Ìû8?‘ÕZ z¼”Ã8Ÿ,'Ñ÷±>¯,ÙR³d‡†'uµíóh$ŠP›òliÆË^Ì7}¾Éf2Î2Åè`±æs—ÙU±]ã„h?»éÊÅÂûù$“Û‹¤ÀºY'¦¬Ó†ýåöqÔ$º†ÝZ.6xöÝß ø9êå+´ÂM€é­2&î%¿ãú×?Ú†ßÌ_xWp ßOJ¾ç~ãqú`'§– ÷ñwü¯àî´»ŸMÓ ¯_‰‚r0À‹RX“ë7`¸Õ ÀXŒ3œÏ0+1+í±[Q7dbë§Õ&éZ <—húYT¶¶Ñ`(sìÆù¢Ø‘LœQü}ÛG,+ižnÒ< }j~Ý|³v›0b¾Â<†Ô‘­ä7š¼˜ú“¾gpŒâ©_:)kË+,Ea)æ‚FûM§œ õÕfè)E ‰QY˜È6ü¤Ö‘îávz5ÑÇYÑ…‰7Ù,gZ1£8=…uã8Q®H–Ÿ‰20"‚ÝV‡ðEB%…61ÊïcÖ8k¿ØÈ?‰äÁ:ms’Ë1ŒÛåE&:l]4-©×0•ØæËdOÅ¢1QÌŽv誜:äSQ—GçRY©×I ›X·Á7*V9+ȘFœ¶Irähµ.¾ö—å– ™ËhA˜zédÛ/ðL”.ÂVc¢ i3rÒÕ Jžøp²6ѶÏ[û_*úã…M'Ê.h•Ž…ó¹E'“ĦÍdÂ3áûØ+Nƾ‰‡FŸçÎ Á÷ã´¯]Î"yJf:ý 5„°*±ùšT¢ŠæšÈUéÇž)€÷àçV×Ûž@_Sì« ¨»ÀŽ ì6×β´ƑÅ1°‰1s˜”÷´âåµ üÀ€~‹]`¼O¦+€Ý¥Äå{Ïš–¡û0ô¤@ô›Ø†7®³ûŸäC¤oñJã[ëÃ…–¿3ïýGÛð; 'ßMe~øVxoWä[­› w=éý¾Øý{¢Ã­¯•öH%Ìøy㥹^aWãÂr{Ǧt —i­7CåQeÅ}Æâ³ù'T_º‹gfUr<¢$OÞçŽz_ñ¢‹É6÷Ìú‚z&ü¨pp¨vT!EâñÊ…>'yÊã+R`ÆxèŒ÷T"šuc¿ªÁ¦û|N¼êYÍI&â`Ÿ…äTM±oÐpù/KÆ£Ž4Z{ø)* ½~Nú#2¡!L׿të•ÓjHð·ÜK>Oº"7Ý£©y{ÒÓV³=ŸÐ"ƒ®rÍD%S•{uH£ª£› œáG| U»¡öóRGcJED¬ŸDó_±é•BçWYº¹bUаN?{µíùm…j·‡Š#Òð›c _Ï -€GŽ,$p!Ò÷´â¯S¬½Åö¥½ 0äý‚ŸáÊ»÷+oKtœòõïOÚþ–9Bý&É&ß3Åèí÷~ù.müß,…þGÛðû¼îŒ$ì! `lÞ·ßîþÃhOÐwCÎkáìëz¹rûæ– ×?'sã°ðØõ¯„ùu öãìøVáàŽ1“GŽ}¦eŠËI ±ÛÛ±J3${¢D]rŠsQœCôHuÎEÑÇá,Yc à%Ðc,©)z_J+Õc¡ÚY®]è6îÌ—}Ð[ùMÙ`Šö©ÙIù’lE6ë á_Œð§Oó«?‰Ó==ÝL¾è“¾ú¨?™]FÅ~&rCâüºÓ¶« ©£‰ÏØ´ãÇ%©ŒQ±YÉŽ¦Ë¯xg%mþ\ŒÓ8ËøÍ$ Åû<÷™™LœŸÉH|jŒƒ–ùü¸û/;ÑîŒ,ÿ¥ŒæèŠãéÿÛÉ>4[ofZ+–QÃ'ªŸ…â<Ä)M9‰ÚH‹ ™-iæ/ý¦Ì’…'ñ,WŒUéHR'dCF=6® Á ’$Éþè|%öIïŒpšBŠXŽ)j€®t/u Lák¬‡ÞæœD3ºvdÓ'¨mtÚïfMR´cÜ7Gí6ɲyYsÔâbC¿ê’«J?Ž‹,áU´¬ZÕ,m&]A¨t'KÜI`ÿ9÷ÿ[nÓ¡ÕkóK;ÿ‚¿ ikÈ’‰Çi’<±>]ÄÇ»Ÿ¿jÃD"Pm®7ášfk”¨Î…¦ÂKH l{SLt l¦ôpu³™ b€Ú[¦‚$ɧ讇ÆþÐw0ì^“6¹Wºúöê]&ál½“*øîfÃ=<”èÝvHÿÖ–éøŸwÜð’÷Á˜ÞŽ.ò×›êÇ€ºÖ+=ì·TéÇý·„V7┳fˆË*-ǧ‹ó{„{úøÛí#|‰DÎÃ2LfXÄh ²+óZøà¶亵µÂq ½ˆÑIÔƒµ¥åÀòhʳ +ÌX†:à) ‘«“q\é1ÔgYºšsÍ%œ†”˜*Ôü<õ§Œ÷ÙÒZá@¢µÜèÙ7_ŽLëø¦'„ÏÄÀ£Úá™N6O<äóemº M»ùÅ©xòöÉ¡XÏ0¤ãÀ¶Ñ·&°a3¶aZ*RÆs$ÑBaÁüÂi=õ´f[º÷©L¨ ó_²!½ ³£ø Ù͆)¯#&+ ÂÉI‹ ,ÖÂóƒb˜¨‚ ù·ag‹I"¦®²²üü\ú¾ƒˆIbœŒ¹PÒ‰™}b\Dl¦VrÆT4Í·©¿õ¯ÆÍÿB#'¥ñªeÔxª"”¯ÚÈP3Zµì£¥“#wÖ2£%¹ ªQÅid·Œ7ÄbÕÊU¦§qéÀ£Ÿ>?4)+b:Ílbþ¦7‹Æ”ziGCøi”ýj 3Y2ßs«£zçǶXn³Ó„žFl'Œt «Æ-;™ôjœ$"ñ±¢;{M’ÚõDìxá¶$_±œ©™fjFÿ ^°ÃD87ùšˆÿ[¨á¯h3G’ LQ­)@nŠÙž0WxþfeÒ0„_êF¹K šþF$ãºüº'趯#Ó¡ûøä6¡BK7{>Î(õz×$¼‰­ôƒ]òâ»Í ýýi¼9蟕møh|—GÜ ÂDÀ€³Ûd–¾> ¨¼Qny«žýë Áñ.ô0[€aÂ1剡=& Û°Žln{¨ÆA‰a‚«èzj#ÆOòZ÷ô9¶Jx9tZDˆ:­€9˜DRþúüiè5RQA-¡(Êá§ñÞ®ô|3¸ÍlظZ6«…Á)­í+©Of&>¤ÿ{´dS³ù‹D>;p]ÒŸïÌöã\6Ьt³I±.©ÖéL¶­¾–Ø­Ô—éðEB‘3¹ˆb*Ϫ]Èñ߯×uÕ­ÊÏÁ¬ë¸`lw))Sû+uá£Ùéž%çˆ7äaþç;Ó6oÄì 2îØ—$Äv‘ÕÎ]ÙÉ ¿¿;y¤&i^ø £„„ž†žÛ¥ÛäTºÓ$iG.½t¯¢:v‘Ö4o>=(?ët|€ƒ¾4¦wãã)Ýϼ2!I<ó6% ‹:¦©,ºÉÿ0bεÓüÔù­û!d”’ ÂYŒ|-âꙤë'"Ø„FQJŒ•*òqðm «Š¨gg?ÿ¨Ñ?qT#_<>\,˹4Ý`}⨻âcÇ:©Ôl¦?Ø4rqÚW< (âÉ„M?µôôÄ É ,‚l“´±Ä’™fe?(úÊÒ˜ç‹4ͬßS´cݧ~xÖ·rãÝ«cK ÝªRn»ÄPÍŸçoõ EyÍ&Uï mT D·}™â\¢¤¹J^‰dí]ˆÏ8ÔÐÀWÀ§·™å{¸?y­áñþã,îp9û€¼M¿½U÷¡c¤×­÷ÊŠÈ+¶€iÐÔ™^=n =ýÛ ëI ©üóÍEëß¿(ÕýG°÷~§·„Ò P ³u?¹Âòù5À¯P‰ÉVÇÀóï»-ºê†Õ…â—ÀòjŸ"ø\7gN-Ñ0T¯Äñ'šäåä L–³Ísßx±¼øôpüÒBŸÕ8¯ PäÇTêƒ !{ª-ÃŽÇ ÀæZe¯zdl:-þeŒž¥û­˜…htʳö³ýÞ¼˜zx9[M÷›}ò}w±'ø|wú‘âi¿g[ûÓÑÿW²ý÷r7Å"ëãÝÖÔ_™£ÊХēCõ˜Ù_4¥VxÞ&Ià%‡ÇÒÒXŒq•t6«×u ºtò ÂΆö½Yk/­'Ʀ®OeÿÚä‹í8Î3ý4r¼àë†Ur—Z·Ú5:Ùhøc—übvðgù~\¤3aR22ž(w1FFòóIôb‡,Úç]`Œí²Ð‘ñom÷Ø^NüY  7Ò”fbÌ–/\6}É¢h^zç¨/„w5GO'.)˜1[”„IÊBõ^z IDAT¥b)¬H3ÙN9Í é;ëÜ¥Ó‚ø–Æ”©*ÈXt4ö‰WSÁ§Æ4Ž}µNÒ‘ÍV˜Ñi>ÿñd7õ 3¶ì| }+ê’gƒï½ú¶ÍËÎLXp¢†esò–dYÌ“x/Æ{Þ·ÜTÓ`}è\Ò|byÒ4'YïM”Mvö§þG³õfs¥?&I˜OmgãÓ˜v}¥qqÈ?ÿ[‹ò‹7 Šàp½‘«W ›1 °·Aü5˪ 9´¼9p·•9Tb~{²ÞÅÝÈɸ¡¢™gA ¦Ý|M¢—a:îäG¾{æ$`Àtþg!’-ÓyN#* Á0z/g$P$"úÔh½ ]ׯ×Ñ0¡>êè‹m½.ÏÒ¶­4;ãG=oªÄ9ÑOFGœ§ÁrLK¥Œ ‘ÔT¾ÒX8·#„æLŃˆ4 Ré„-¹Š|…Œ¤¦S”ø!4&,DG5³9°½ŠNS ÓN‘èÈ?ÛƒÓy¡çE+ÔH×¶­Éæ™~4/BH‡óø¤b>þÄ'Q"8‰Y ·¨`,MöÆ<7ÑÌ(¹UÚòY'¬wgýèçk}t\q¥Õ]uìë¿ÌCoÉŸ5ÉîÆeËà«fO%Ëà3&¦4 ¨m¤m+—¾î¢tŒUÆÓÈ!h Rp!T6È88ƒÐ:ÅnïƒÍˆ¤­<õA*–& ²5COŽ‚Heú}eOÐ2§»Èyßl×´¢oýϳݙü“(úE£û¦†º‚‹EätOÔ8ÄU÷‹Åéß¹øÉHúzl]%¤ƒÀ…ÙIúh°Ü­[ɬ(¸ÍZâ‡-¥™ÙÁhX#8"_ÇÄduÙèI{Î|“²$b‘Ì›®šÂ'V½õaÿ¢zÆqì Ü¹Òk25†ŽQm¾Í'»ö…ýˆ9Š@*èÉm0H}ý ¹ñýeýÀð«·» n"vkäxOÒøõ ç7DíRÇ8®î®iÞøÀ·OdÀTßœY÷f"67PðÃ0$pùŽ/¬ý}á&ÿô?–4¹~#x|ó{ß"rïüæßÃ&µïÝß7óÈ-äÉ·ß+‘|J¢ØN§N3´ @oûÀj­ßz‹99ƺDa£qq£–úê$ÜF¾Ï¯ws ¤×ow¦@Á$Γ/ ÿøQ²ûøÐFÉŠ¹ZucÂ$÷ Þ-¬¬û¸¶ËçÑÁ£½$lGŒÜaîrÊÑôCË"Û}ýƒçb2œ%gzVÊžÓ<Ãã,Ž±Ý«dö BÀ¿èÛçß› <š&SÎ:wZJ2ÐËàÒŠ/>Þa± öxÒêbìãžä‰‰Ei[Ö‹LFŸSñ³ŽaäÿG,² ƒPëŽÂHºäŸÌòl7%£‚úá{rý£®Î Æ@½r†t¸ÊóLåH Ïô p`„çTMU¢Ù&/M]”}D=' ÅlŠ~?Ö,¿üÊ%+ŠÃÈÅÄçÒëV(D¦à6ÄÃ`˜WqœÉŠ)0šaÎUEéVÖŽØè¬ b¢¤òéLÛ˜‘™œ0E‰*ÄBç0"¥“(£™ S-OwHõ·˜Z™JÊTZ×{åh«yke¤ãIQ‹?oÕïB¤úHÀ8Ñc¸p$ÉœÈþ« '§é4 øk[‡qýt…nö#ås5"ýÒ›Ê3EÓŽ(šŒR¹®ƒ÷D÷éØ"c¹èŸ‡zhJß Áü’ªÏ 46µýxzñâä…ÐþºNîþ„µþVL77éë"ºW÷|H Í€‹û~=$2`ˆš§Çe¯ß£oqûôO/+h$ŽŽ[èá­ûÃ=nj—c´ö: Hî{ñ×¶j|eØnäá1׈2ƒñ=`"pMi!H¬ôo­·±Ñwaþ‡ôÜÿQÍÃ;®"àåw=|xù¡·¯€§GÇã&ê¦Ô•¯¿Ìå’tm=§_`  h€Q‰â&»-Ó€Ö0Ǩ5"€Féé}}©{»Ð»L€CÀþ†‹œÎöGÉ)¤ŸühÏÇßß™>ÞQrá*CûærÔNùm:±;DÆù2êË<™Vê¯Va„}$[µ#=ÿ¦-~]®ËŠØN“ШÀ”±$ØËñâyÓͨ¤¬œîÂd`Ž^JÃgÙX¶R˜T¸Lð0ãí™l¾ªõ‰Õàx’&I®zJ¶Ÿë™b¤(T¬9SÉÕ¼^‡ŒmžDN ¾œ˜4åûy>’¤O±e‰¤I½#Ë(žî;/w†MZûš:j›Â™Ü¨‰U Üð¬¤y•Ȉ„"xË0ÀKÃÆ3‹&abŒlÍ­eÎ& ]H —<ÊDpZØLgûc,¹ÈaÁŵUޱ<.d–Dr@‚d¬ ë$#árn‹©$dÎYAm ù´ýFj)\6Iˆ—c¥MÂÌb:œätmèã!9è©Jø;Ï5­møz°žúºž,7QÎ,¦¢ß¡3™˜J‹MÖnÒY"2³„ÎøKiU•$8Mëqðí8¸yáRj ®ûŠè4ÛãvÒí2Oüf“¿È.žmn’_Ýß„î6”½ $ð)Ò/!4.²€½~/;†Ô°À¨n×óI»^ß•~}&&ØeP .tÑAhûĸý½& C_¼RŠpÓÑÖALÀ Ö§ šòðy­Äc€ç‘ÐïúºÞzÝ 1 Ìõúo޹ķh‰ó?¤çþO“r¾õŽ»"Ûˆ’¬x¯1·ÐÇáaÃpøÝf*Þm¥ (W_4-°‡Vb­ž ôsæ¯/™àHLýFoáJ€!š¡ÚEbZÀ.ÊŠl‹Õëˆáõ†(nk*n¢ Å§HDÅ?ðGñä_©GóÝ4}âL“&l/›—q˜Qy:ÙMç$-´q3³{qÑø‹Q^¬«À[º­Òád8þgáñ™¨÷ú¹Ÿ`ˆëiÖŠãq ®JAPÖµárÐÑm¦¾ïÜßõ‘VYÒÄ5EÓ‹Z²ñ϶¡6Q¹åÇ¥•ЗŸ9q:Ý ?…NLöŒöCÒæ).ÆlÖe20•i–¿Í £~Щ»éµTén–Hnk^ªº÷.ðjPv6ÒÄfµd 5‚¦Ì K@ýÇ8e­ÅxJq’L$ÄçD8EJ)v²Åã\²¾]_ŠTÑä9‰¶Lˆ ÞPI”Èyî N¥ö‰u® BpæU2*•ˆÈzË•‰ŠÙ@Ò^OBPã%ÞŽÚ¢¯‘´"3^ˆ˜æiSŽÌó)…ì—ncG©â(¡q–ò#ãb2ÛmFþëÖh°¥–G§.#¤•Âp>`he˜NŠù–òDŒšQ¥\L͆ÜÆF«K]o×ÒÛ¶mœL.(§ü{7†È&1sÌÎ6‰"C4«³¨ÁÈ€Òá(ÜœúÙæýš…/9t„ãæf´Ž$·;– Q`ƒJ ôÃÚ07oÇH4$67aú%0\ó:Ð(bD=*ÈáA#$;$²{U‚jÞ[óÚ¾~V(̌גgoçÃßá° |Ø+ oÜöN}èõë²Üàʇ[²Ý·iò|ÏýŸt¢Bßî‹ÛŸ=°z Ÿ^0÷Ncþâº]ùÞ ‡ÛÎ85|o”‰ßoÏcŠb"¬2[”ívv]Œˆúy‹Ÿ9 @[ 9r$3„]D)ú0X0?î”gæ[È×u·â VÂz £ÀB"ÏÈt<ò>^î|â-Ò((ZÑpÙµ½¹ÚQwà;*Š6£oÙçDÇZËãÿü ÿ“«´U,Zvÿ—b²b`E½žË3‹‚EaÅ!@‚0)-B»yÒ¿d y–ÈAˆ“¼ùËòâS^Mý£‘ú&”—dóô€ìÇIí§ÿO,Jó]À¶HSeÝôeP ,aŽõQ¾—‡ÁŠ™ZŽLÒÒÚs')–‰¡²íK%,—™”yˆmLc®zíˆVYOXL 5¥$&;Á•pÁ³Ñ‘‘ ƒ8JNÙFpÖx¥?I³Ýé4â„Ö´«èÂRRúï5¾-\>#Q—Q¢d¦(ãÂ*Ú9Ÿ{ƒÄºÌŽQ2R"¨L¸ˆµ¥ÌCÅ^JçÓ^$x 4ƒå¦CGõfÐ"¢£°J¸áÁF‰)÷AlReyàÉf$|k)TÎUÎõ^4†Jö4cz2.j§6.!s–ò§õ°tYšäQ.ö•¨ü–êKÚò$ff6‘ÎÂr¿£ è‹5Ý%f’Ö™¤0dWl>ª"æd„^õj}nM'4/²=çfíXvAfÕ2'ǪÛþš·õ·gáÉuþv‚ç×ö`„´wË…Ö8 ÃÊ>ì&׸N…c@Ûû£E÷å=N _¼>‰S¼RsÒϿ̠£Û³ëò’÷ðaq0¬j¼£PêÍÕ¢ñG@jm߀&qN¼_5Ãn¦þmU¨·…Ýäû%~ÿWò­”Íï#!kIô»½Êwþ»eÒ,½›–x`…;¾Ç rÄO;4Àz6öSt'k$#¦0°(;ÈÓz6ê, YGšëDň¼tSˆ âõ.D@€ÛÇÙ‰…¾xØ*Ï\Rž§¸Nާ„ñð¢ñZ©%öU>Tra}À¸î¶­8“ñŸž¸lÍ(«ÍU7Ûè¿L$d†ÂÃ]þ§sòË^y— ›%Âäx,µaàã(´Ôh%z»§¿šI¤$ë¶q{xIŸ·GÇqÿ²ä¯£‹Q»=•,óÜòfRµ¾Jp9-²¼Y4õäï|Ø,õ!ow¦éÓ ûÑ$”9¸u§m4á¶šgË4“E…ibGBXË‚1¤QàJ{§5ùš ƒ,‹%‰R©³™ ‡ÒZ-¬Õ–0-b•M³O(7‘-õð3ØñG³érž§càg¬¦ŒQ%ëÖˆ†'‘’yn(uÝÀI±Vw¡‚±ä©¥‹µO£Ø×²Ù’øË(öä jǽ¶T_ËÐÓ7Æ´]KvIÈZC߆XB$-¾„ÖBcÀ7@û@ôåön…«»#yyÝ/j02Àklr|SßÅÄ#àèÖÅwת ¨¯}©í«#¬?Pí†a>†›íoeM8pSó:âwŒ} ÄȽ¤ç-Q}/®¢€ºŸ?âÞ9Eøbº÷#õï#ñÛ¯ù†hÝ·)o›{ÑY=¼ÛPN°4H{dˆà4¾ ЀÞb3T¡³ºÖ%ôÓa7ôSœn /0=ÄðdÔ E¡†)Ñ*`,°œ£é0 (€OúçGu| þÀOŸÈOò6>KK½_3™Œë¾lY5¶YWõuùø$n,2ó+¯yrÖÇë3•9»8HÆO¦½+»áëèoÐ]iŽtúäP̃ª–ßLäC‡~ìØqÿ”¾|æô 5‚ι žT+×ì9qÎø…4¿ÌÚ–ü‰g"8ûÝ4Ý¥A;V©¢¬}Î>ê»?e«E²¸Ò ’wË4Ê,Ù]Ûuì¯bÓ‘$Rt²äd?›@Œ=¨\‰£sa¥b”f-9àkÙ7ðŽÇÜ I•Úr™$cç4åfTÏ Ë&"N²àB—tî?r\¥Óö³4Ž“Ž ç­Ó¬$À(0W*Hn]7Ä´>¶#lÄ-•–ó@iêlŒ<Ê#*E°=s«È6è?&}G8—^q¬x’ÉýÖÊZhjZéµ ªñúÖ#‹¬ W¹í#Ë·A®˜*™Oc—²àb"È Ü™O3¢–V“1ªJ¬º â±!ªBd¢L ¦¡ÖÌ2—©œˆ8DÂDQhIïwÎ<¥Ck6§ÖÿºåŸ-2×":7:SYßèìE7¨Svø(ŽóÕÔ„òzMåoï䑆÷²x+$z"K²YGXIh[àà’‚Å­€ºD>Á$5tÒå|DìǺzÔîVùò—:z•¢· )À6èÁC²X„åŸM&ßËø~Æ’%ÉD’P=ŒãU¨·ƒXlJBVº¸ t[si#»šsûÒêavWnÛÎ*ÿXÚÙ¯Îg=(0`¹>|”å4áÇyÖ;œžòî,*uô¿’aOÛdÿ«ÎºnšÒç쥪ŸG#:º<ÙûõØ“¾…œñqŠ‹ÚŒW5&f!Ç(¬Úr,I/óêðÅöˆ¤l9+Xôë¾¾Ðü0N²4JG‚D·Ro! bᣠlLµQp¹è3& Ε’Žæ[ŸtÁx›:Cr-¥ŒÕ(©‚‹’}‰Ðu11aäÄ,ÎIn©ì)é…OŠ¶È·±òÖ1Ô™»JY ôÑcÎc* ï ë¡S¤‹œÒJ…°»Öó˜ #Ó Þq‘ e`í ·„L ëàKRNY$e̵ÃFê»À¸ÎuO´æÒvÅý¹c‹»Bî$)RnfûÐ5aBþܽI“$×™-vî|}ŒðrªPàM6›2QÃB2ë´ÐoÖJ=³göeFÀš ’5U9ÇäóµÈÌBV¡8YK¾JË ‹p÷H?ß½ßw)­a7{vy1;ˆç©V[¶ešÓô#Áš~°ÆÕ¢ú$¨”&Sï)î¼hFž¶×qšNº½{³ v7AçCÈ‹©[è!û¼Óù4=©ÂA±Óª™êâG<®á.oÝ„ŸWcø´yø<̰Ñ)ca/']ÿF  V݃‡îå=h=ÀPÙ± ¬…7˜Þy:¾Õ—o`(¾[ WÀcG°³ØËjÐr&ô$ö£úùxM8I’>ê×»×¥ÁØÉ6›_á Næ.ýg.úN®Æ±9˜®ÓAÉÌÔE‘U1ùïþÈMuNÚÌ2Üä2ËQ…!Â*$tG«‰œŸ*êñ ¶Á÷íMÇD^/ü3†Ð÷–Ãø:éfiœÒË>]&L§íç¼YÛü•'AÌ¥ =§Ï Æ%±©›jt#¨ŒDy£Ä È’xE}"£/y¢´R…Ô”t>™å÷Fk=¼´ikâ°“äLK± ³\Q6©“Ã×m"‘1:z©¥ü‚Ó„‰†PXK„˨ õ3+˜¥‹–†¬VcÏKIGlâG×Ë„EDb ÚO½ðnZ{7`¤(C¨H\ûØ^PH.Ž)ßX7ðæLø‚èÑCBj£ñ!ßçjL¶¶„L)a!Žcدub ™¥L\ÛþÏfÑ|>ËÊt“en´!J‘F¢L´#%ÌDŠT$ì·öÆkë®éò³ç¦ÀîóíkZ^îìrù±;Mîahln‘$ù!Ÿ=\Þ^ÝÄ®»‹iÿ.øüÿYtuß|·êÞ®@ÿ¶Pà§ö3,Dîþƒ%Ðmßc„û¡ï#óöw( 0@±CÈÝ öH<¼À©Â*s} Pì¦@ò˜Œ_c“mÏ^±,‰zt64ÀŽEœuß­}î”5T! *L+|¶ÂhŠ—è:À€ÔUƒtÊd_3Kצák¨½ËVÀ ]ýW<üæeUVYµ´8 Á÷ÜÓ&fÝ.!»‘_O—¿·—ZÍÖƒéÙ WŸ}Ö±4÷"ÞùÍÎðI•¤")#;Q³˜Ü®Ô>U/Óœø#Œ]ǯ^È‹+!S}0!¬š Óø\ýzèºÝgl±=/‡Üû”ìh_¤’“ÇsÝ?’[’öló 9×äfâwž]HIô„ô‡}™ˆ:åsM–‚¤4ÎxôÁFÝ ©3Á8¯,a¶”¬, ·˜b–ªàh7¶ýÐFêI$‘¾c\K+%I.tNmº »iíÇ«À'T.%úH¯moFQëHJF) ,DOËjØN:»B0OEAƒ #–»È´4™`*L‚Ñ`tM¡¨KL8 ˆ ,UÔ6TÛp£ü¨ãã¦2ê`˜ ‘gt’ædçÓÞpÖ§#)«£ØFÄTÅÉܩԇÈv)7m¢Á&“ÅÚͺábçG˜„w€³Bé)åQ«¾‹ë±Ú™«!|Kw#ðH#R$‡ßöÆŸnÏ'Š‹ãäâä@f)9mÓÆ=š„,3X™ÄÉrÇ|J/³ø”tÅus§qþ8°Á•G-°Û*uiÌnR(,8W‚°ûîÃÖ|GÀù»ËÞp@ Ìkt#ÖÀùOÌ#ïPÂ|×_zöàOÑ€æ~½çoƒÖï ÆÂ`Ù"8Ç yk¿q[­R‰®º V$ð)0Â…7`½eš³ b ò}w¼÷¯ô“ÏŸ=ýþÅ z#O~Ïl¤N =Nÿü³úEþƒÑüMq:ãÀìþ¢4¥ïï@«)*‚Õ&¼æ1@ä%ü &Å*ƒé€ƒÛ•Š„bE:a|´þÓæ#¦&½ÐÀ[tw$ðÈË´3kà&8 82×Êk"þ¶Fi¹šœ¤‹‘hkŸw£;óâÚ>®™ íPMXI'[íd<ÙŒ²7Šq#”•ñ-íúuP©”*9öÿ\~ÌÿGÓöO…Oé®ó'&ÎaéïˆîJîOú&9kiÿk¹ŸäOiöß–â î6š{Ò<˹fŸæA¨më¥ñ˜ôSZOKÄÍt›ã[T2LX±“lÊòƒ8’…üÚ{Æö‘%Ùæ=§QEí jrdÂ,e¹H ä\" ~PÆHŒ«1€ÚqÀèóH„ÏÕJ ç^x.¦Í²ˆ¼Í61ö„ÓT¤„ŽVå7‰É¦È Ç‹Æu>ÖÒ ÞDÏ—ÁKÊXÄ“kˆVÑ!†i$ÖÐ1 ´,$Áa” ’±œsIñˆ¤D¥*%q:‚ “â2Î#“æˆÒ–ð0òÈdj IDAT!âÁ[RÉ,Œ-Pß“¬Ä^F¼"jt…6ƒËÒv¯f7H ’Gl„¦ŒÁz†‰°$FV¦)šqy†³5­óÁæÉë-rùQˆdÊ yÍ_f0 ãûÓdÐwI±éx,ħÇÇÓXµ™1Ëv½l˲$JQË¢ãÎÍ¢M #íÌ™1ûjSS‹ã øØö kŠ´EL~†/ft—îq  Û}ÐÓ:¤Ü¾¯á3P”Dy#`^㩹Åõþ¶PLâ[ B?Šoú<ß‹€èÝL/Öw/ŽïÌ€ß –Èm}v™ïƒ7¶ï‚dÿ7…cþ©0¼/,ðí£!oÙfýMNù×`Ìîoµù™—`Þ×@›”æ®âÝ åÖRSÂÜR &@˜àšâb^~¤u½´_3LÃW¸B·Á!Ðcfò#ŒW°WÀ²àŸUî<Ö ûqƒ‹@²ß”ê84b;QÅ2§³`ø~Ö?©MËÚZÛëHÂyîÖçü+1û"K4Ú–­ ô™!å7 {êÛÞ™ÎYškI¿õʈœ6ùLâ‘É@ÎáÇr¦ûó¡Û‹ÈÝE{‘’Ll‘õÞ[N0¹Þ|BXžfA™aq}ù­h|N~Ë“IÒi7Q»X}+è£Ur/Ô°Ä{WSè½VÕp<Ì2y ÚhæˆH áõÈ­ ¢IÊ•6xNà=AÚA‡@2…•rPÌ!xã-1‰ ©N¨W¸ÑŠÑ¤ïƒ\‹d”ºç;BóAðlª‡Á›}G¼à:#hÉHôpÁ˜â$£6š`©ž±’ŸæVШS/4£‚0eˆ,ðBj®åè¹òŒ—ÉLùdØfÄÁ¦Ìè«Ñ6Þ6ÞU–9žNh cã…ÛK1R%tB…§aŒcàÑ¥±ôVé:á-ËžPuBg›Kœ[Û3ë$nûhX ©JUrp(Cun*"’ðêþS21ÆÄ×Òšž$S]L)3f–t5oéÑØ¦õ2‹‹<Ö‚_µ¯wû¤ Ð½RÛ §Z@°@B 'ê÷Ž«×rÓÕÐÿvªQ4¸®cqºí™7äÀ 7TÃÜBy” ĈË7¹U·üºˆ€ù“mL{?¾~‹ïQÊõú_”{|`2 ½+ ¨NnùN¯¿gžO€Ç€®ÞÞ€l¿Ÿ³r›çÞ®.·ÿéK?<½¯~>jIàT|w™¸ŸC|בÿ?Îý€é1Ã+ÿ÷ 8=ä_ãÎab^AîмùvOÀfð?RºžÌ;"Úa3¼;¿¸& ëþ”bS#,æÕ¨7Y€i§¦PŒ¢ Û,lÁý‡X^àêóB‚gÀ ðiCØø•hÉs37ø8 éNbõ©æœù›j?#IÙ‘þL5й$OJލîì•>Z£)LiÆî“5òå•áÛ]AF/6Ø4,éUÄ` WjDȸp®ác’£WÕÆ`w þ)ù”¶¿tI"M6F_ëÙ¨Ÿ yö1¡é£Íbê6 Ýä#ÝÌ²ÝÆ‡BåÑ´´ÛyþŠi4²ÐDøE‘›SÎo ÷rÛ[R3.„ô7Æœô&;håc•ÎpÈy‘€´¥1(gcžôb„÷’zê m׆F‹=ç#ƒ²™g¢§|Ì"Ø!€ÄÌÐÄsæ¨Ì 2&” G#9„lŒÎDÄ8‘ÜÍ„ŸHêèHå—{Ãj aQø ¼·£•”¨ŒTŒOŠBî9Á¤¥Òò(yL£Ìc1À[Áe–çÑËÑÇè:¦\N,Ö® ºÛ–A§lÂt6 ¶¼³ØÈHª,çœç]Iu’’*ÉK•äú‰˜TÁ®éú~ÝG~SÆ<7&%kÊ­ÌÙ¡Ì5G‚rD²i_=÷£ÞÂ$hÄí•ôð™(²/Á¹¯û~˜!ˆ¢Û¦ë÷»åšÏ2&ò*&S€ ÆmЃ«F»þLè³ìãžÙ¸Š@™YiLbSÕea0CÜaoPBê]Zç]—›4AE!¸D0¸>øíV·«µ[d<6#¸´ƒ·®H䯥ãK§$!(#°*a@0\LᆷLòžZòKø·IíÌ VoTH%Ä»Ÿl‹}P¤ƒÁ»õï~áÍ#áÏ.ÿQjƒ†ŸGñ§||‘²ï²›þ ¿–’ébÒfáj5?C!18(‰Á¾ÛL|³ënC $@¯±x2èC—G*c±aØ×2ë÷QNyÞ#4tü2ÝM 6€6K—Íe‘óO.ˆ­Ãz´#%¿Õl¹½ „Òï—dxf²´ ¢©kGŸ•õH^üî“SÖŽ¼È¨Y»éÜgW1A™6jP‡ÉµÞ›À’­‘.Úý«º^FéÛ¿JmÀSÇm±þ|²HýÑq¿+X-.®·[}öÏ­ÎÓn]î nN‰\.#?5da¼V²W¢™ÏétºœÌ|ªk€åz§÷½åƒX¨€è飕†)Ëá@b :°1’– (*N,^ÝŹ¢Œ»hG„¨T(8÷š’Ú÷•?hžK¡ |k¹)“­.Ò%غwTw™[emì¯#MͯìçÌnÉö,ò?î¹i±‘×L˜0´1T¯ÀÃy2½–©Ï}êÎËÝœ“YG‡Ôét±$Ø‚oØÇ/ãödÓ“]OüAO—ö[ä³íIè?Öù„‘DtÚ*ÊJˆi~0ÍYšg¾cdjà”kÒ*™"q NØ&ø6RIdICB<§vËÀ-tŒÀ36R&³Z3XF} a`sé@#AEç¨ObŠˆ@F8UÇ2M%D”¢'¤'±U±žxH 1DÃÐf¢„VL÷ dtéçc’uÜÉHJ"`d I¶×”¶– m0N$2†iÀB4Ä’©åd?2dILÓ‰”’P/„wIÈBºóÙDëʬóáÕ†¢Ï É«rq"Ôá‘àE==¹hèþå—fw=á„BÓ¸nü×rw²WŸí²–É”fÉ8†ÁþÑŒûíµÅù׬4Й?©Né)ldmOú1ã“|¢„QµÄ£ÙìbܽÐLŒ¤«™]"qà1>Ki_‚cXãÜlXˆ P¹À5: èÞ‘à0îØ&s-ݾ‘•=_5Æ ©1š‡aºTî‹ÓýîíŽÐ­·ÄH¯;Äþû-wúû?Š-áÃH•A¢ÿ°ÎÇ1`Þ1ì3ï+òGtýßgßð†ƒµúë$l‹¦XûF ø–õî1ÐÞîÏŠÉ£&§ã“s‹•Æv¼ï*¾¥V ¶ü±ëo_ðŸ¨ÑÇ Š‘ñšpã<œ¿û7‹w7*zúFË>¢Å)qi×»Ä]"â(,Ó'ÓbÙ"œ¹«èíIHrؽݬ·æÅõn¤ý»ÅoáдX 8"µ0ºƒÌØVÀ …*î'¤*˜ÈŸêpL‡!5i½0ssm8þsÅ7´@»ÇØË£Þ°ErH«M*¦%/å$ãdìMÝyëDC.Uè<›åbç*w®>3ë%í6¡?£»GúYWm;ðeGÙ×—ìu_‡–ý¶œ¯HŸ“¹Ù¡æ²aO¥B$fÕ6;áŸÛCÍÒOÕÁªyª9]6[yaG¶ßN·òx9üi©{Äc@yUøã‘³‡öÓƒÒÈRÆläÞ)¯™*™L²ÒKî öp–P¥LCi$„0å „†%BRÒ!Ï¡ƒ¡àŒJæ)öÎ73 ©“ÞÊ@]ä41\Ø@lDf]”v5ið޸ܨ6*BÚŽtKhHà% Šäc„†hT©Vž*G%á’sO]m”NX ¹ò˜;¯ˆóÊö,TÅ ûh\k´·TÎbhœËH'̹éšð*㚉À´q„ö1Ïx½PÛyÁË`Ý;òd9™HYj*Oµá¬0]pÑZ}܆]ø™Ùoé¹I¾MñË ] Ìùúר=DÄ‹úäQ}”+š ½¥íÅ5x‹ÉT`´N0ÿ(”¤L1µgj>?»ÑÓ Å†Õp=h‹é¤GÈæ€6Ø5®ï¢>±½åø+lnîÙÝ›®¯ÜŒ3Œ£y3-€J˜F±6õ;fA Š C/Fà+¸7O¿¹c®oÃ÷ûïê Þ= ` l¡ê;Ïíûž§`ôùû"áÌÏ—üKX0?ƒ)šýEµAG¸#›¿b`ð7l~â›S’FûDOº,•Ä<Õ%®/·o.>>, ò瘯¦Ý­l _YȺK1‡²‰r§*Ø) SHs?aØ€®0+q5l‹Í-N–Xø×}Vý"×|ºoâeÓî×í{2^SúeåÑ ÌÆ \ƒaˆ-¾I·uÑý‹V£š<\ûKy¤ª²ˆ“-Ñ.ŠÈ™0&J"Ë(,W½n[¡U½ø´ºœÖ›e†Œ£8õå¦z”ˆ…•ÚW¼x”N2Nöýúú¦ 7«ÁmIòÌÈ'© lß2ö,¤:—'¬£îú¦KÏÌl»·È“ßOû_GRÞÔfã¿ÞØÿrbÿ•—^ÿÊÍô\Uý6ø±™ýj›ªÐoÏÈÕÆ‹£¶ho–aÛ¥¸îý=n~•\g“X,Ò_Nº?¨©—Óêp2›ÎÌ4üÏšp5T¹¥…ˆ$ÖdÞ,z——R–r.uåÇÁÄhcØÉ°g1cHµ€`LbÎ\)œSl͉°QdIŒ.ðÀ’(t&-øà9iÃl¤ÜdTWœð@m$"*NspcCq¶cÎÖRÞ³ÔsÙSÒIœçŒk Æc°&JÑD$Á3°€¸¦¶ £bJ)- ¤ ÊpÅèÈ„Mb¤’Z›6®¤}_ŒÖŒÁRˤ8^5ÉÕ˜ ! Á„㜠NÚ`+¢²Ùt¢‹išz¯h&]\¨I’h–„žµ|´#½è’o.+\ˆý6ÓØ&T4M3=2*uÿmgÑ (. ±á9*ÏÁƪãó¤^Z鯽‹z;?˜aó¬ëИèZ–‹å‚'¿]°os¶D¾µ!³Wͪn· h°)Ë=©’Qv»[@ЏpÈz@@N.Í­˜´ЙØØïÓ!î~‰¬×Ò‘S`åÞd'Üö|^…A/Åm„‚4;õ=¸ûwG‚œ*ÞÕdJà¬~À¡”@â¾°ÝŸê)ðñMôú\5> ?ˆôÿ«ð© )ÀÞD~ÿ"†¿Ÿ«N[¬2M Ë™äIšO¹¹Ó[K8`|hûÞýœOïvoèRN?E;‚½‚ Rnâ* vÝ[§—QT/!õêšÀ 0éoQg MXÏÇ5¯·[.ZUl¸vDÃ>f@ nÐ0gToÃAޤę6cü,_L kûô¨G<›r3fíõB.;ÈDÖEß‘®»DÝäî²À“á” +±ùúéÁj»`q¶áúuÇY^f„,&»³ƒõ'ûZŽ©É ‹¯ý©¿ Ÿ µ,L(¯/˳ÃOד†˜Á1Øý8Ž$öR:Z6Läs_äÑtó:%½p¾·”‚Ox1ºRöì—Á‡vW…oUüC’#X,êf‹íÍFü©Hÿ)²¢ŒÂÇö4±§Eœe"£Ä JeÁÕ A9qË[Aº!´ûaœ•q¢·Þ½ F9.B&<'„SE¨Zx’Û@…«)3LhB 7² ¤ pÔGÅh¡Ó”ê †¼gƒ¦^ÊÄ{Ê£¡VÐÔsi28KhÐÉÄKÝ&‰£\P0åË"¦\F'¨ÑgLÓ”1é‰ç`1:zå­¤†\ $q(C´^ˆAr¥ý8ÄÀÚ ÁxR¡t!©à‚ð”éu”¡›¥©Ó…Y´vì;æØr1Í1ál3ø~ïêh¿¹aÖ$G1‰Óí¶¾ò¦ƒM̤b2Zlzï® u•¼¤ø=E¡~ËŽgivÊ’„Xf;B3Ëf<«l’)}?šÈÃk&NÜ.$LÒÂw°({Ï{r°jlsÀ?뎺-Ù Ä9 16_§«9 ÎÍÝó;8-nVõÛˆt Ⱦ}€3 0.p+;“§iºêºM„70Ñß·~Þç6¿³èØdh ˜;•ÄƱÀ¿?€‘ ˜k z‹ÃjK4šüaøGø¾g4}[ ÒM£ý‹jÃm“½ûËOø6ÎÔâo]$PAµ °ºÍËÌD}­·Õ? š‘d.gø ðû^ºB<ÂþgHRà ðèü^A±–¥‹—›ÇW‹ˆ™ƒº_’O Óq¾éÍ;däßBeÀ§ðç V¯.M ŒÙ§x4¡9ÙŒ|Îòn^•ÇkâˆÀCÜ:´uÿjÞ#_`C³S⟓R… Óä‚ëZÒ„3.ePžSDÚD3†o|ÿÇŒü¹qÿ%§';,_£\ü‰Ìöµ=ì(-¢‘I…¡G³n¥™ ^¼”ùS#·ûKÌ93lÚÐ_ëtN(ÿŒ:ôc¾ŽŽÅn6U+“ÈÈ"Æii¶;3®Wyö%M|GR:FÓ‰²¾˜¦½ò~`™IuÒÇTi²%íbcæ<.®Ù “ûA\ô:¹P2M¨`H‡‘Æà„¥ÞpB†Ö¬ÃP‚0 X ²mùÎsš žs"(SÖ2툌ÁëÈbœF1…D¢¹ læâ,%R¥*•15’—Æêè…¢†FÁˆå–zb¨ë%:ðDD"™ T“$)<!0)(a , ~°.šHÀdLtHR)Xâ"(q„Q‹è=º6r„í¤€QhÅyäBDÆ­£œ¨Œ8¢X€IÞZÖƒH lÊ=KIHó!’ÑØ”K)fF&#bïo¼oª¼ÌòR %bgz·ï/ûVÔÛØYfË‚”=ñö'Ç”…P8qä*¡ÙÑ›^ȋŋô7:v‹>ÉrÓg¤«`dÓãÞW~”ĉr¤ýÀt?Ùòµòg{U[C6õåúkæ§25³Õ"&Ø€èßl_NbqÜ$·-ã°b0· ypäpP¿ÕC¨n>÷ÑF#RèV¢íoÛÄbÕ&æ–r=ޗ팷ìZï`R.݃ÑÅ Ÿðk@_¦fßírž×РÿP#ê;:E®q°ÅåÙïçãµßÔhßÿ‘ýwmö±"YUº$ÉR5é^]Â˜ÑøžÖÚîF³ÏbG¬óU«‘Íš)?áäWɹ¶4¦åAšM=ïZ_{÷Ž{ž‹´Ö{‡\‰‰è_caûhšŒY‰ðò±±¶hÀF e´—á|Ò!ß~ð¬-Ò˜é<ºÅÀþ©"aFþ ãq}¡ÛÔ™I‘ ôR·T¡¬Š•–!'…òiõjŠ´#‚]»ø4¡}Aþ9]û0_‘Ò #k[tŠû¾S½eL³Ü-KÒ„EˆÞùæZXÎrÁ ɹ氞òÈ™gR16 RG%¥b˜gˆљȽ˜>÷ ŒR“aàÞ"8ê½ð†{@‚·œ¹‘Ài™`^ëÈ(€8!œÂ4‘eà–x St^P=Q!Z³àq†ŒXG0º˜•‘B$%DºÈi`šy êúhaÓ,<ã,hâsyZ˜|ެ]£KœK ‘Æ÷.*T¦i¦ÁH½ïF¿Þ“mmº&ÛfËc“yï4¡Tx½Ì)ËÄväÜ£Xºí„b&ü¹®'‰8JY é ÂÌ6Õe£ólì:Æ…Úõœ¬r;j·ÏÚóÿò|p'ûǼ?Û)Û–ý–Y‡­vˆ67P¡Ï±öHžBL_› öÀ†½q]íî›·ÇcàªÃøü¶B, ,çòÊšþ ŠÀ-}¯Œvælé½ÙÎøÎ®5á*ÊBÑâbÕ½‰¬3÷éÒ·\.µòˆ›{—À‹ïX°&â—ÿ Þ2"4S@gB‘ýëfÑæÁ×€ï›ýÄa¼0üüÖ"€¹A@fo•1'å,6q|.Z6±Ù€þæÀ3ôìŽt²ùêñ©˜®ž(S¥rL¤ïY˜‘W—2{Ö°jpruJóS?¼=9*€ò«ùÕ;³°ÝÁL¡?¾\¤˜uŸ‹ÙS“”3ÃèöþЇí.¯pæ U@¹@ö:ÂtÁ¤—›ÎØêkÀ¿ƒ‚>YþqQ¤‹üs¢³rHĬ¤Æ ‚Óž:Œ:îÎU~>ï-­ÿ'¯ký]~í¤\°ÿÅ­guׄý¦ýHo†²mW–ö“x¼Ù±n )±3Þýb(ÌCÿù¤Ò«k6±×Âôj¯’åØ2⬯w¾£¡º<íB€Uûnß´\ðRÔ…^ÊPN-ýÿiÆ/ÇëbØ*¿0'’VÐ…§ˆ#‹¨¸,û‰¦¥Ö‹D$¡c¾óÿ|F©Uâ5OòP ^R"ú6VÖft¬Gµ¥ºOóÊ‹´¦ÐàÄ–ŒvƒvNƘ‘Fi¢3!PUh™©Èá:I´'ˆ½ƒÕ`ˆ’¡û Ú 81ùZ || Æ‹àÁI$iŒA…½åŠ"Ȥ°…Þ÷ïh.ÝÀt±zdx²kì,!2u€l Rf’Š] ´¾.Íe4àìW±×¶ç}çFÇRÓ’FÇôËiÈbéûÿ4µ]n*UìãÜ" @ÈŽß,äÄ‹†¢kº:Lú¶‘-5ü6lñÆ Ã{úÛG’ >Bßf0r‡S߬l0S†>`§f†ôí§þÍ«è±Fw~ Úýômzú›¦4z³ýž»Sü¹…:À|¹ÃýòûN·ÀÁ?Pûö}³£¿vâ¡(•é½L€ûžÙŒc­ïƒ6P˜FœvóU’lIHzRD‘¾B76¿YÝŸY`ÎLu>8#õÍépËf›…A·Bc¾û²åaïÆÀøÃÕdù$"gÙ·gån[Ø­a‚A^Êpii±òãŠSØÈ€pgúU[C._«¢ŠŸQÍÍ,éõU.•~AFk[56ÃksÚ6º˜$…yV»ßìq½G/+ú²²¯VøÈ ò@U÷).)ðÅ'ö‰’Óè8 ‰©i³–MO<¬î„Ùõ¦gýï›Íÿš<=ìÛt8ù·6Ùü>a Ø2sîŠÉæãäÅ5?ê–Ÿ˜·NôÓ”LzVÔ¹‰Åzšì‡K³3ç/>ÚeùÑarr°íŽÓF!íMÌh`#19ÆdØ Ïô1ÉBäžËÈ•å6IvâæbV[•›Óf/•ˆ}®’(ŽFÖ¦yIe:²5”ÊfEœú…›>‰³£Œ·3ê%“}N‚ô6~dât祚«i%Iª“dšˆ¬¤šzÂÙ”$@ì¬$Z™8Æk3’Õ‰Ð<* Óv½ žÒ,' ‹<ÆvÆç…³cMèB™‚QÁ¨Ž"o™ášÀšLˆR ”DO,„1™.‡ãà IDATq•.ðD‘è)œõÎ3FF8¢é|äNÁI é‰ð2°Äi "FÊC$} ÖÇ9IT ‘zæ<´#%xI)ó"8â)8e”cÚ:Òu#;Ñ^›}ͼÈé„¥Œz‡^›¦#óöÿ2ý<”¿Y4®Èãå`»™Þ§\…cÑ‹—6ú 9¢ÊÖ;)·@j-64cj¸bãD2pVžZÉe^Lª‰H ®ý`º“ ©òÍ©¡k㯜ûÍ@6zö¥e§7Xbæ×`ÀåƒuÛHV#7P@ÝÉáAª%€k¼€Û¡è»¦¶µ©ëUsÄ)ÅÍýâ™ø7oûÙ·C¶ Ûþv)ì€oÖc²ùSÿiwÅw‡Õ<~ïõ PÞ{ŠÿÔîÞ^æº{UÇ?¦6ÜúI¨…á¯åùPË;×\yÇðmoã ní:œnqŠJr>Ú“qäWðÅà‚SÄNg~ØÓÏÿ’`³ >>$ò-grà j Sàà×p ¼º–xzÒõÙ6ƒ=iêb5„W+S™ß”§FÌ`ÂVZœr<§½'xu H ‘EŸZ× Â8^nDÕºÂp žΪ¤m·T~cËf:Á~q„®no^ÎÛMÞ>›ÔÉ~þx¿.¶my€Í¬¡F$™5+°g‹Ò—Ç>cŒ»Ž².î|ÿzrý*²Ïka.Êö|ï{}ÕoGkT³&!ˆ¦G¸üÈëåqyeò}Í~½#ˆÄ.Ôåžedd¾0¬ÙXYNkÎbjrÍ^Bݪÿa?˜ék)o${’h>¶ß4Íæ²™!±¶þ3[}$h‰­°1¥1ü·;ñxè]~ÔLó§Óã"&Ͷjã‘Inze‰aÁdƒŸ‰qK|ÂI¦¼"'ZN‡„w<„Vb˜F"49¢ƒâ£^hFwDø\2XGS6ˆ(I´Ú2Í  (EÂ#¥Ä:×u›®Y5'E¦ÓœHÆ8¡vt½o- ÌÅЊÀSï)4 I#Ü41ZϹ%„9X;DgCìBÔ&)¸ ,Bˆ‰õÎïíèëžHIr­(à”k¡4·€£12"D‡@C¤8Be$ÄbïÈ9'R𔪊àa@m„ó ‡Õ¢½WT%D†Á0ãXïe9¥!ÏË(uÛo!1lSÞn9!bÙ¸4DfNóÆŒ.EËüVõ‹á ¨É6Ωì`Ûmïwñìó¨tme;H3a_$<ŸÄIB³±UHX-öÖYû))Ö¯éf‰BmlζzwÕbýå0(Jü@o€¼Á8 –9N¬ncyÞ á‰Çs Å‹à›ßðï”)àáŽ_“>6¼•ap¯žzq·î °Þ Лïm¾ƒG”Àîç1På]BÃþ>îíd­y§;óßçYnoVõ7äÙïï¹R`xh©}G¶æmÒ`ï˜C{¬pd«‘o»AÁxú)G˜{+Ô³oê×hâ—&ÞÖy*¡  @Š!|昂ü0I@ï%²NAÁÈòË­\`lé–ªË6ÉØÌ@–òHš¢½1=Vfâ oÝ_,—‹þ³ÓoÙHýSþ´ÊÌ]1‘8-Ãbf[Á¯Dv¼ «L†5½¡~Ü 9ë']ªÝÇì’=+ǽ,0?#G˜Ž(”Lä¿‘›§åAo¤ÝwV©:í»±íĩ܇*øÉ¤ßÊd³0Øgg¨È·Ù³<ô%±Ü~=“TžFÏÔå±ßî‹Øäõ\OÊR$ÎóÂF·Kšf鮵õl¾¦ñß&IÜ˜ß Wº©»¯íª=L4]ûþÜÄ;ÇNÉN˜Y‰‰ùº÷ß¶ä_™4q’*ŠÇÙpºH/×E³Õ¤É\“ãÉo&ç“i?$½ñ'jÏS¯²& T³žàÅ.$šÉ‚‰‰TÊkƒX;9 ·eŽR@$U¢+˜HúΧÄf½MªЈ‚°aT!Rª"¹Íh"bŒ¾wÆ7Œîjà[› &Ü(Ð AÄàƒñ¡ï<1ðEE=£‘‘a–DÂc‚³ ã„êÇ! $XâhnA” „FDLçÚ®7ÔŒ¦3u‡>™AI88…Ò"ƒ†#¤õ<(D…èY„‹ÄP&"­·ÎSŠQcF¨ Œ’°#a¤]‹ºA9‰LP–`‹L1Æ)q`ðžOh'YiÅd0&´#jÂ]Ôcú›Ò$=Õ©ÝZYd ±ý íÆq= ã¨a)É¢D¥'VñËxÜ›¹ËyÔmF¿ ]—7–%¥£•ч¢íÃmZK.‹qp\¶Ùj˜ô×:>\öv]⢙õfP`?`Qà¦G¼50¦ #ͦ€¹ (Ù}!Ó¡zŽÓˆØÍ° Àè1Þ¼Åâï i‡›‡üšwÙŸñ]ÐG÷Úˆf”ÆÒö~÷úìqS¸%Ýž¢X¡~û$ÛN-½§í†·ù¸ùO°•ä_YÞ)°ægï’~|˜2Ü-5з߿Ávõˆ™kñv:|«Š™JÌ ® ƒ-®·(‹Ú˜a“°é–²±¦kUâõŽ"Î  z sŠÙ Ô`ÎRù½rõmî˜Ä—Ûs¤Èz|ZÃ%×7í§ÝNHûgÿs “Ñ}–OùÖðP˜h„¶‚Áê©R ²|lÓÇsù˜n³55MÌÇ4sS®òÞ~;N‚Üñq}ù­=«/Oççd‚ UJ)tŒrýšð=Ò1Œ’#§˜%§2QUÍ/3‹ÿ—·7ë±ôÊ®ÄÖ™¿ùN‘#™d²ª(š*Y]BC€üÒüæ?ë'?5ÐÚ€ ØÕvWI5H,ÉÈÈŒñßt¦}Ž"3™$“E–JR¼ÝîEÄE¬=¬½Öªlty˜a[ "`àûÛ™ÃëZɼ¾KŽ¿tL”ò×GlÙ…g"¼4»mÅÚædDÕŃ”++½I޵{4’<'ió•JéD~ùx¶S{jé|Th’Èî‹ÝÃòÆTé¯Nôvéð°ÓÅö­•ýEÇôb˜kwø_Ì|Lñ¸ª%[‹ýêò ü÷7ÜSk¬W-çÚÿÂ÷ÔÚÅXh{ÂÐô̼¬».×HÒ0fD†Œsˆã˜ö:ËÆW•ÑK™µN^¦)Óh©˜²è !'®9˜ÈT„ÄÛªEÝ0.(û8mlHÂñ …22&Ɔ¬‚FÊ¢M,†!X!ejot0|Áa@1¦HYym¤VF(Sv‰ÅÈ‘êD"¨LŠ©ä²K6Gn'7¹i”.2—ɉdÉQ¦Ä4çŒI“*&UV!Î)Š, Á$äœcNDN 1ªÈ‰—œ‹Œ”y²9†œs&³•ºJ 1) eŽ^Y–@¦è}´®˜¢¶L³^°±q+ilô¡> !&'«•´RØÊZ1ƒs!¯(ɶcÅ}ãˆ&¤Ñ˜ñÉrD3âÑæ dá—¶?¤â3Võ•â·ç»Ãu¢•g+5Wý~$µÀojšµ}àf9"7¢¸ñ'°{À¡Ð<8Æó ;0s„5äÕRcºÿ{çnã°½>¼Ľð£‚_ƒ>«áÇw^ò-Ò÷ÉÜ<ƒ0ñ룷€qyOˆ¼ u@ûƒ߀Óï„N èßñ ïȦù9±vß¶üž©åϪ Ò¬ðã—NðHÀ €'ÀJGZå#AÚàìšûIIãéGʤŸ WóÅuÄ‹ü“FåaÁ3÷ Ž—ÕQÚü”3–—(ÏØùÎcyŽ¥7rÙÄÓý%Ó‡~E·8{[(¿ö{»|lÓÀÕ~Xd6>²7ÅKÔüò*ô"^T|òá­‚lï%ÚìA“çÆó§«åiÙ%þÈÙÒ]m‡î‚ÊGQ/ëCߘëôÒ¼ß)Éuý¯¯.v5–Ö0L¿û³Úà¤BëV·/¶IB(ˆå¹ˆ?ËB„¦ÆâM“¯£F¶¿¦ímé¾ÊÞÊp]öÉýãþgÃ6Ƶ/ •áDÛ÷êòœ"ÙòhIkU·ì¥»¬à uÐpÚß w½ÐŸ•â<—Ÿ ‡ú–?ÒÝ®6~G¿]=øbªÿÃOËâQÇÏ4Z„jõh™l§Å“Ò_·‹sR|b6ɨ§—e. 4R»`L¦Ç ª”Ò‚ ­9ü¤Û~4—|,·qË–¤º©BH^j—t¶R$)³ÃÒM9B"–Šj#\ËQ‰]“š²ãàÄU„0Pܓʒ5«+A2ŽÌzL¤ÿ’3‘ÒÄ‚F˜ŒŠ»¤Š';VjT»*œ÷Û»C`Ñ€/Öb*b\ÜTaä6ãªaiÙ°š>ÿŽd]€ÚX,†'Ù©Ù$õ²"]ªéøÐy£…dØü 169,®þc½^=/w/±·Ï·¿Âb{~„“‡/ðB]à±AÙb·Ãæöuî¾<:ÀÏ¡f¢Ÿixo^Å¥#¼ˆ½9دùدk®^ÝÓ»ï6¯Ü£NÀý÷J —øuÿŽ–÷›¢ŠØ}ý=ÇÀ ¸ò~x»4~»íöß’yó8ýàhùйïØÿ¬Úð'ÑîþG†ÓW[Å7èüH0 ½RùeÙËîFF Åìõ)VŽôr¡g,tÑŸáŸ4pŠiûJ)Ýüoˆ?ÇÔÞ R¨™êLUvÜ´C¿ß]ÔkB=ÓGm›¸¹*ñÙDØîôZ{öþ§áøÁózˆÌs[VU5_eíXúþŽzB l&7!t/|À)ÐðBîýéJ-V‡âÃF}ä«V•üàòm]A¥2¤£½nNnÜë…)±z ¶¡>ÅÑ)Þó)•ÃK\¸¶cZ%¿5ÑUKñ++^tÕS^´Y'wÈ41û|å¸Ç²3]¼*Âm"FìoÒxCeØApßbQ(.Oß3t «VåÍç[Ý{|ƒ<•e¡©½GZ}ߣÀîþK÷yÖýw€Ñ/¾ÑÏ@ Ž@õghÚþˆ«üNBê›Òqù#9ÿÖyÑïx½øcJHžãì¹ï»ÏÆŸUv½„1HXÁü GG8j¸à½a»Î<¯F`Jm¿À‹m`ò(…ü2WKWí—u5|p¬ÿZŸ|¦Ž/Ç\Md9’Q‚ÕG%]l_ üRopšN×áäñØ®³È‘/½i‹ªz |^VXáyBÞ´Ÿ=ÐŽÖA›XÆÝËÏûíͽÊïNÃ}ôò$UÇF*ÌÓÏ’zO–L§›bo7ñÖðªÐjÒ'ù‘¶ý¾®Ü`‚Ž þ“mÍÛÜ ,Z/…‹¸¸‚O0ôAÄ)þâüæ'g*ü¤|±¹šÚ›.™Eô]ŠNí%7jÒ¦ô¥eöw,µI”òaÔY?» jd¦3ñI¸6‘­§ ß cv”â(­òòas|jêMÉÊ6;y/ÖÖý5í ÐçŒÆÓÂɵ雳0 ø‰qcŵ+qá5¼Y)DYÈ®ª&ʢТɬ¯o½»+ÆT=häñ‚V«×OOäâýy\†#$ë’·„ija¼Ñó\—û$¯cU±¬5‰l„*JQ«±¢VëÒÔLw sÌ!&i¸¨ *¨„&Á,çŽÅ9z¸Èm®}'Úó슔E̪dNÉ%¢Y'Ës"jNš±DqïÏ™ qÅ IPœ„ÈÜp‰ª1‚Ÿóž§@:Å’ÛÂÞ*†&‡àM²•"EI±ö‚3.8càÚsÙA‚4œ¥(SÎ\†R¡à€Fð‚yÎ2ŒKÎy]–†¤ÌÞå»îw0K¨g¬Qq-¬V[?*t¥—ï–Î<Üœ7~ëB»Ÿ²cU‹hl½íµÛòÖ¢k-‹#˜à£7õk¿K¸²E^’þOÝöS1ý½`§N¨¦ZY±!M‘וˆÌ™)EÉBvú!aI›Ç4WÍal&Û  X9Þ‘(Y]˜¬¸oÌPª¦ÀR’f™ «˜KQR ƒG°K.µÔVi’X–Rf1ùìç !k-%xtäYΜT¥LzS@-dž0ïÂ0ÍsJ ,œ F×>ÇL¡å–G„2Y Ç2QÎÑ Päbà¬è‰ñÞrA1[ï Æx ¶\½92ZÏÎA_‡Ý¡ä©©ªjÝÊf•EåB˜†ƒ˜œqû"db ÚhΕÚÏàD)Æ)—œsÒJ°w/Ýb!¤9$s¢Äs®3Iò,«Ààå"›"ËŒ8|1^È"·Þˆ9zŒvaÊO’éøºeÒˆD™QV+zs4g—‰å ‘B€wU5Pø*hK¢×l_ÉÐÑðSb•Z/ÔcÓu½C°å8cCŒ{ðy&pGõUX\ZêfÆGsèÕÇìΖÆõÝÁg@áglguh×âÌyàÀ¯6o9< ô«ÃìœÓz‘ºr³^NgÍ|4C|…*¿Î×bð'_2ÁtpêžÓþÚ9´ƒ÷÷á-(^5ûï€Ñ·Ùo~ùí}ƒÎo~ªòoåÃ7Só;Zü^÷ÙÛh=þà®~z‡ÕÇ?k‘óÃsƒÆ¿¦Š/ÿ©¯B¯us ò Ñ_ ›ðtFT Ú¥ ´A|„tÛüÄ–`Fµ_iï¯Ñ/?æõ±gç6}ò“Ü,Ë’¯õ¢ŽbÍKÉkÓÕV8:yŒìéö9_Èæïâ:^Åë¿Ý·šWR°±-p4B%íã)/¶ŠARR5Õ¥6»å3Ù,cý"⤪–­mð/—9®ÕP+ä–æ ‘ÆÕf·¸ùÕ¶›ø¢Y´=næMÉT¡Bòl}Û_z,ÏÙÝj%Vœ{si6^±âÿtÅžªî–ŒwqHw»9‰P²àn͵+ö¯ =½=XWºÆí’;Ïü³°ú”‡š:SfÏKî7pï§ÿc<^·ÊÍþŸ¦+3Ïõu±ñ•8ž‘©ÊúA¢ˆ¥Vñ?úæÌÖ5ŠG" Ãõéxüù‘¹õíœü¥9>q¦K\:±÷Ên­6…¬Ç`Du¤¯D†,«U_ޤ~ Æ²”ÙNÖ¾Á3?jr©¥ŽUòFªT˜¥‹„Gy6A˜Y+*2×Lgcšbö,È %\÷2eÅ4ƒâ€ã“‡q½Ë9™©”M­•‘š1扤φۜ= +ç¼g>nÌ^c6Ö«dS¡S–9$?ŃäyæÌèFê¶­u À…µã^2f–U±\Ýw­Rƒ¯EÒ£8È´—Ü[ ¸ÌRJ%¤b@€N"sFQF\ P„óp Á!2T–Þ#™b&ë¢**iœð$XÖHELÉ…ÌWL‘¡¢„b\ñdMslÚÔvŠsæˆ3¦‰Lá÷ûqTÚé,rö`"†ÃBžËqLCŠ'UE^0óȧ}bÉS4ŽçÒõéz¯Òd›™ ËŒs³Þn•%ßE/'qÜ¥b°ü¡¿Zxhè~÷ów7øõi¦û@=úðElûT<+öí¸?ø-$P‚µ©¹1 nû5tÜcwz|WèM×!7y½DÁp³Åä ß4£õ ¸ô¦*$` T‡wžú ˜¾Fã7Úñ¯;}´ð7o¼¾¿ßÊó{>m¾£ýº?Îú3Iß6#ðŽÚð¯-ïþ1vßßü¸,Ì=ÓŒ­Ûaúåbû¸NŸh&nRo0é¦Ã#k°Ó¸ûyާ º!z”,¸ÀÍÒôÇÇÉXÏjdÕ¹L¡ ¡qUY#×+>zËì…ÝþÍû÷7…ªÙìaÓ9Í!zTû–¹‡ŸÉ²»à›elžš“°­=O¾ÖD‡}Î嬚xrb«µôËÅŠ“ø¸óBÕÅæN 'ñK>ÿf1þ$Ï›º$­ 5çý!~ñrׯ.n»©€4ީղõ™;š)VžµZ3½·v=m eQ°¸OWN_§n±l•.¸ŸÕ>ù¶‡òåæpÑÛĉ×sÀ‹€Ê®¶h^¶ô÷| k?åi‘×[ÿÜì>W/ÕH??l°Ä¶ÅPë[.s8²ë„Ðê°ÿ'²u¶˜©Xæ#¢;º¾ˆn[}Øäv5³‚”žszˆ€ÞÎ+w0\ %5BÑ8- U%Ó€LÉ 9»$ì|ˆ#øîÄË®2hÍ^ÅY ÎE.Ûh´db{)£g`è)rï%#y0b–´H© N²–™ì¤ˆJO ±ÈªôHn‡þj„‹ÄyHYñ(!ÐäŒÌYž"¸*T“}Aaî{çEïar` ÷R)—c$gD]DÊÜPÖ¯ä•âÊè,iD0ùzØ7h\Ü‹ÄdÁÉ)‘À9Ë‚#1 C0dp‘3 ÁàÈY± ¢ÌQ 2ëõ{Ç”ïd]%™³šç*q%b"ã‘ñ„4I?Jp£ªªÎÚ‡;—4cÌ‘¤D‚BéEm&¤˜˜cÜ’d.ê3b™¸c#÷̵»}µ¨öaš_˜àì´Rº!ï“¿Ù÷g)Š„I&ù4RDl¥7Ñz‡)µàbc¶Rc˜¼‹Ž`¾2(—å§vóhkô±›V᪊% #¬ÃF.Xy›æ·MÎÈï•*=Ú†£[  ô zÄäë ³E|ÝÛߥûS¢lÁ·¯óA_7à ¯>,üåw è›ëš€SˆsÐÙý—voðó[yòw2ȸ~{h ?–áÿµ›øûÒ[oÏŸpìä‹ r¿ÿôæ&ÛÑ›ÂÃ_öxµ|<­[¡á{ìÝõáa6MŸÊõ…~‘Žúíb…ðð å$_º¡ºœ Ïl ƒøêªæ–­²°®\|—S¼¦Oü¢[Á^¦d<ŽU¥#},ô ÏWéö«°ýtJ1·1‹¾ÍaöûB| Ri¬ù?–›§Çòi3´)ÄMiæ¡”Y°ÌÌÚµ¡×ñn"ÉÊ%á‚Ô=ñÛ›@õ\V{]â°ƒ{ë¹c•çE°×v¿%'#ÌV¦ÔsH§BšT IDAT)Z‘[8’ç‰qnT”™2mù4–T­j©$ ¼ÖÓ×ùxpÖÜÖ)…AØ¡»£Jßåºu4ñÝ ®_Цx I#ÂÞbLõ‘l”¢~NºiØòIùl‰ë>nožoù׊ëµòÇÎV½GþÃàW»«¦ÿ•½è“?Eܾ¿AÁ¹m·7ó7y³uŒmnF|†ç3Žô½j_‚û (oßô£°ºDŸ|| D{ø ç€ÿ Ð}‹Áý#ëzë@ñwùÍw4ì»õæ>}òêmÖ!|Ã雎Aô/‡üoZôd<¨s$ÿcìAîŸá´Æy‚'àòÍ@·ƒUþK÷K'=*`ÿØQs¡ •=w{|9¹ÕÝUhƒ"Ð_^Õs?Ú#¨Û¤V–™[)fû¿ ÿW|.³®]Údÿt ;ŽT³‘ì“Áih³­_\æ2¸;fÃ"å>Êñd §9½?rà  |Ú<ñâ¥:*K§ì6):Ú—ÏêwrµEû’M"ë.ë¼ ‘M°sŽVõc³í7µÿjâÅn>«£¼¹‰¿t¯„߀ ‹kµjÖË"qÕ…tØg÷\Dâûj2òÀä£ÇBè´mhç3:U©ìž:u]zß;{Ñà·¬9©¸·ÅÌæ%ø“bõ¸êN–ZÍ“ßMsOwEBu}Q¦“à‹[óAj¢]µ/f½ VÞé!…ìmÂÍP³F?,.»3-˜W•õ›ýþeß(ºÒµ™cÃÙP—ÜCú»<Ò¡á³iJ³É’¢´2 Oõìoô[Œgë¦jéydÐlhM×궨j]r–ÊÑ/’gƒó)€¹\:œdd»j®´©J(Ø9Îv<ØýÌíLβ¤˜Ê,ã”sä‰w¤ì¥–57)Ú<åd3WŒw ]/…Bgn4›E*’מî¬ò!¤¢T¤¢›(F‹Î^¼ê]Øß û­µ!‹jј:è<2ÊDLF I\Hp–9‘„‡ 0&)ÉÄ‘$rÅx29ÃõˆHÙ0KT¬ š2ƒˆ ŒXä’sž„“M›–e¬ 2‘‚õyæiW¨Ý‘HQÃET¶MÛJéV­æÜ„~fÜ6ÍÔ”Rõ8´‚”™Û•t‚Í¥óv›âáj,§,ÌURrH‡XŽ{_Lá=_i½‘^7V~ø˜Š¥UUøù< 4wYü/Uéë7¼V«^°ß-¬*v×éòvïq‹óõÖ¯#¤ÀËù;Ž ®¤HüN¥9_«…{lã+Œ{Àóû8ÌØ¥¯ÞÇ@|ß“ñ­Œµ·Á­øýêÙ[îAß/î~€tÍßX½ƒuxëÕ+`ý9qȼ}æûoY~D5»þþ±µÁg~>0ú戦ç=$P|€g§ˆ‡8ÉpG.ô·«­ÙâúE^ÞÁàK€Ìõé8#l탻Ûú6l¾7~ho–øTÏ R{˜5›ùÒ_ALºÝîÃQ¤?ˆLK 3cs Yf|‚Üq„ò|.ýáïÒ´¸| ´çGËŽ{·}_†‰¥;ÆMv¿`yísŠlJlˆ²Q8š&Gr7ƒÕ»È>Ë<Ü„±—æìA pÄOæ©ð9xq¯]yûrZš±”NngÁ$2nC|.¬÷¼XÊn! ‹…=Ì”¡òÍ"6Êï ýÓã~zhºÉ'åÕ˼¼´Œ¦éï¸XäMWÖhypaJ·»R½ÔE\ëKásƒ°aËì‹M*{5àŽÿ6Ëű¯çù®5g#¹•”¿0ð‘ÿR1¬õCu¥D0Ým]ФY–YÀdsdìªgFU‰ê(hœåÉ15º#}=š¿;~Z,äÏÊâÄšB+·i— ë Zž¥P‚ ƧȜn ÞçµÉRòHPI>2µ‡PB¬„ªPTÈ‘¤˜ÃÝnê³%QÈä'ãÁ2EÍ©A9Æ}JÞ˜F7’—”XÈ ÆÈ@pþàr´ºåÕîjyl ÒŠ 2ãîrðqÆœ7 :‰Qf†àñÖ/•Tó<º——öò0O!ª¬ŒÒ]mŒÉ1$—(± R–Zr‰¬àîÏ*=’KˆðŽù9 ™$H Ê,÷äRtW˜,ƒp Y™ì eàÚ+$ˆ'bÉçÄ"@Œ%‚”¦ÒŒ²D.f—î2Ÿµ¬ã…:(p¾PªÔJf}538p5“aa5Éy™Ü*:¬TÜ=Ð|‘ûNƃôǨ>—†œý}w9\¤ð·7ùiÕæzUr½aaMž;f³úùäsS^ú'w~_Gõ •7W©Ô®JªÙmVç7[<L¬ù½«¨¯ù¹€?$`¿²¹úœdT3 îõÒ…}ÏÏ#òë ‡ÝW¥0:øðVãÿå[½ùúó¯ï „Ëš{û#½þl&àþÕïÏŸý³Â7ïI¯ãלúö_º6ˆ?ëß!IªïìÝnÞ}‰üuÿ–|°ðßÝÜ)*`oµBýïÔqÄîö$á}ÇžÝMë‹/ÿoÐY]ãºGÜésd%züæ¿X™/>Á‡#p%ª£… ²œNÊÄ»!çæg/Âï;/>ÜÓòpJt%žØ¸"Zø±ø•›±p¨¶òÜ}ÉÞ¿ÞéËZÞÊÍ3Òµó´À .ùêg$Õì 7fš¬{ ý|ϼy²ã ÚÇ_~q@߬–›ã¼oB´Ï ¸:ƒ8Ãx¿—ü8ý¼—Ël–M¶ÂWáöò©Ü­YVî&¿<—¹nîj¼pãÖ¸ðåç­,Lû%׫¡î$?Y¡[QÝÅòlP@:ŒR)«Ù% þ0Z¹c äâñ¼ƒX¥ÕC+ø¬w-í«¼°AÖSåût$äÙûš¡X¹ÞS‚˜ã§øÉcÿ^2Íø€¥Öº)ÄÆòÚñÒ)RyåÿßÿÒS.º­HHÑÅyØëlc¨bÓuìa͇%†›Ïê/>hô¢Õ Uè¢]º†FEð*#³Œ11"0.E®Á[AKÄB ÏYnX^DP‰ÛLÄçÛ8ÏR·,Ê…ðFóÐc2 U(ÈsÇQª,¤TÉø(ö”£¼ž{¦Y]ï–üÑ‚HãY9äf¯RàT²¦†\–r&„L‰Ș¿fJ›8—ÞW½Š\8£RWÖM½Ïž1]@pøˆL1¤¹äðžÆÑBKpM‘Â,ç¹öõ<ÍŠsVŽ+À½ã’“ä—™sR)³ ë $²—  ÊšFßOé.úçB^¶,hVò®ÐEÑ”>b3ÄÆÅLªTùúµ?ÍS`!“ Þ\:ó §¼ B ©¶º¢X¼gÒÖa¢|!“ÖlÌaJe#Q!RŃDWh¥+¯RŸâ“¥ê}ᆱšî˜bú. ëQ…r±-nPºÆCÍFœxÔ ²E±Åè¶ãîpØlqï €ÐPaû5ý;Ñë?¼&ŠÞþx,K`äeè°»øÓZõ{vA-p#!¼ò~—)Ñ;û>(áO½„6Xo@ýM­_g]îG•´?¹6äWýîKH ˆûÚð­»Ý·‹›NQŸ¿šÝwþÜï¢tÂÙkiáK •£Ð¨ø¢P]·]UZþéã©zïäô°ûŸÈ¡]àö­ÇbÎ~qß×µ/ÝMjyû•·§_½/Ÿ/Ëùr·É+ÞéßX2øx¾óÕhi=)(ŽÚ¡ à,R±gˆ¥û ÿÝw]’n4^ïÕù()Éòò¶äväÆ4ã¨`ÔÓ¢i?é´a©ßÒïLÞŠ…ˆ¢¸8†“(jÌ5ø<Í *TbÇÅÕ<•Éh’_Ú)E± [íçÌ!èêÿªN}Šå`õ•÷—KÔ _¿QÑ«¸UxbR³RzQ8W< b}D¿_ãËz5†¬lÜ÷»¢œŽ¹VS²Q¤b¬ÊÃ2]OìƒÞ´¡§}Œ«›:AñmÇ>=÷m–KÙ›õÒ5)æ¿vñV¢ä+MÝ&T&•Ñûyî-í¦á?›Œצø[a¦¨ö¢ \¬‹pü@.¢éޝÛ_0]d_Цµo”,²KƒHÂ0΃ðŽ»Ì˜Ñ‰J­”‚H)9 ùÄ:-ÆÒ ÁM“E˜tNF{&c†b‰U²H’,q‘Ф%˜È†Àj¨"k#²•>Óœ¤'1>Rjqm\i¼æWÌ3®9K¼p)…08dJ%„æg9RŒp‘ Tf .ZULEH¶l¹Uw!âxç›m#R³Xj.ùÌq9”ní«;Î=Q}ùá Þ_³Æð½®s+ÝåÍïn€UñU `ú¾roŽU¶H@‰jÆ{[Ü9¤ w?xC~½vüÛî+R×½ƒÖ ^K ¶žÂÐ.ÞÕÑ/Ï^í‘ÚÝk-Ä÷³´ý^àþÚ^<ÂË?-úµñý `ÿ'Ö†ôãhÂ[íïnоã2úï<Û» ­ó·œÛgüË|±+Ž^4O?7ëØâ§Z?kZv$ÉÖŸâo^®ð×wz+ý®E—Pìñ›SdÜB ôȇ#¶¢».§8Ó‹ßU/á:¤…NÝi»=÷Ùïý±¿>®uwºçç±÷qßì­#wvÀ™-ý²:’‹O›îØÈƒI_ÌÕ4E¬TSÄLÛÂl zVA*ªÕ?†´Û°¶k%ZŽÖy‹DpE?¨vÛMÍY«ÁœžáSø¥MÚox~è?º «ºkXq`ϳ~±/62q~ÂÌéýTôÑM{<ýCå—’û<‚E´&¨%%s2r\Uù(5ƒ— R‚ªÙCõ¡ñÃCféFâ6…º?û{çW´l·åð_«¼ÝW8àC8Îùhµr¢HNõC^Êq%r+BÒe ?5Vðè™u»°ë¡,ªZÔq+âƒR_mLA]«ýºšL)çB7/¢¡[U¡”€‘LÈÇ0úH)ž3å‚A×´•9Ë™ø0™ÃèlŒnÞ…±Hpwa]Ÿ‰‹¼àµ Æ…©„ð"3¸$%ã&*h0‘™¤ÐRžIX£J<§Bs£øHt7ç‘)Ì*Ê“ÈC"¡©ŒaÊ$G°Ž¤ËƤ¬Df‘QôÓlyHPÚ4JHW6'íc˜È³0ÉI…œãlI.ã"2SdÁEÏyâ.’J}J}L™ñŽ+¡%(g¥ª‰’qéá¹c \±’)”BE9³lSŠ63o½Ÿª0[&(UH©MbU)›º0u¶Ùfm5†‘¨Ò¢”e=“ÔØ®XRGÜÈö’‹­¨>ÓõªíiJ|àÖS¼â£¿)V©aek›ýpÀãÿ¢ª_èÜ,Ty”“`ûQ\®‹\J}<Õ/×ÕPPkUg"ÇÑ4¹ßå—øS¾OŸ¼ ¡?Ê/?_5—+`|´õe„ (‡#`èQÖ°%ø¬NóNø#ƒ»£G°¹g.5è;0ýšìý ç3ü+¹ñÇ<æ;S·,]ßI@½v‰Û¾£»×o…ÞŸ®p¾ý¾2óпbBþx¨zÇ*ëO+ ÿR|Ã?ƒ4÷ßWè$°„¿{ÇÛðâ±×ØY»»˜úÓý¡ÖBsèR'¢ú oõƒÕið[§¶*C­±ú—Q;ö¨½^ž|ÎX%Å…ŽZ/Õù²ŠÛZo·b¾Y MSðó Š›ý¸ïhç÷—zkÚ Z],ÛgJ{5 &‡åÈÌÆwfì•ÝmÌ»#Ë ÁCF»V¥‹Û]_psÙÚO#ÌV•óÃæE'aðØŒEÛŸO/åÿéª ñS&øµl/S,e>..›!ãfÞWÒ…¾SŸ>¯Û²89_Ôþ·vÞ%UáDEü¤…SÑ÷«%« TàÞ…?HÑð.˜*W ‰²xĉ‚gó^ós³ø•èªFן›k¨ã‰¿êýZ µmXs^v7’}ʼnûô)+ù ²°ƒàƒŠ•ej*wãôBOè º%ÊšŒ˜xú­¶Ç¬ªæ§Žhb‰–Eµ>ªêÒµ©ØZ~dìRî“©˜â!G7Á§ ‡ÔkU˜F’dqt²'ygínïí¼÷uA!iîÜ•\ !T <$ŸØH*­²–YpO)'EYdÎUÄëJˆRƒ¹v4úYîX$0K«v$˜¹ÊEIL$ŸT‘d‚Ød ”E–)O.†iÚ¥íŽOBÕ†+“lçÉ“:D>§Þ¸}3…<:îDQUM©’åè1!ûD9„Ìv‰]GOÓŠž®]Øõ¹)æ ÐQ'Éw2™(*S™beT)‹àûÏFÏüh)‰’ÉÄ9qZ˺E•<›G?Œþ.óÁeN'ƒ1Ì/öRÓHJ©ÅÞHÄb+«¬ºÏrÉ©ç\åxÎÊkúU'åð|±?üdöeå’q^<®lþþnºªl\1/“²«ñ)üJñ;ï.bÑ£JC]TÖkûÙöÞlî¶Ç8ÿà=¾vÀHÀÕýÒà±?ü|…ÆÁ ß/y2ГÇü ¸îÁ´}­ox“I&gDüмzÀ¿Z£¼32ùÛôÀwâÍÞ¡¾ ž>àÜ}Š>?ÊÐ@øcI?öøõ_¤6üq-ÆÙ¤>ÞHKfâ× þj,F¤û)ïîu^#M_ÙšfýSq1óOR÷]'~Æù¥J¦(ëK‘žÝÛÃR:­wÜcbªôƒ¿<£5”Äsøƒ~ŒÍ§Çjõ‚L¨”õ™#{´NÄsÎé0£Zx¿ÁPý&¦ØéKiê.Š,Cûë»qy`6-l]ÏSáôbwbîfþô¬Ø[¼\û™³ÕA¬Æýx¨WlþhÏY><¨ÿéΈ?LÏPg "WÊj4õ4ç²±ïЙÌ~vg3PŠbq$›''É ñA–ë\þÏ…CS@¥ë9.¨T³?’¶”·|_ ³ÛJwÎÌ‹IÍ>ç!n‘Fï§>K§}ñ³iŽ"õì™6v5¬sýc]cUS]¿”•žl曆YÈX`ÌÕ{ž/kuÒµe²Ò²}ž ñ ÚômþÇ£Ž–8-ÄyÌ‚ŠçëòáB?rý<…´Ô³. °ÖI=ˆâ€\“5£*SÒÆÇÁú¬’«fJ^›hdÒÁ¦¹ï{»Û’ÝyŒ;Áú;Ê+Ú‹TU§ólDX.|?Úà‚ÚQÊe8fàT N9IA*8B¿‹{/®„¹K™¦psåŠÁ’'‘ ˆèbT…B! ȱ´÷1 i 9\ä.€…¦&²šHFʉ”¬8|U©²]°²:H7‡Ð[¬9€H¾,¸Ò§2J%§Ü5Î#]Q"k'{RÕlίÛÚ9ÄM«÷ªÜ.ÚU5”|ÕòQùQƯÀü >Ñõ(øÄh 7޶õÿÏÛ›5Ë™]Wbëì3SN÷C‹EŠ”Zlµ%;BŽp?øûÁŽ£¡°-u«[E³ª@fܛ×ßtf?à ‚ÙùD&òžÌ‹µ÷Y{­µËŽñªJ‡f4«ÌC¶ù®*Éÿ¾t/þ/ÄŽ«ók2yBpžÚ[w›Ÿ=0ß|‘·;/ Ø{„×k~§7@#ðhÀ½[¤÷ßgyó¼vÕ Àñ{V&«[ÑÓ›ñÀ÷µ´êŒ‡ñ6ßÛ=7ýÈLûü‘>¿» â}ÿãúø?•NéÇßéðMoÆ[Vê÷‡ô9닆ÿÏãÓÿ£ÞüŃO7ŸhSOÞQŒæ)ÝXœ8ý·Ë¨®Õ³u5£^}vÞla÷80Æó¯¿<Å«ì»ûJݱ›‹M-r…eUÚªÁ†ô"ª§üî cu“ ±8ŒusZ¯«Ú˜‹ÒÔNÕ¯röiú¯ÕÜ*ÿ©4ˆ&É&O½bŠO–“0òü…»“IQ¤.ýÆ–µc*¦øý)_ƬD•Ë ¾\‡'³—jo±P™;½±ÕbÍf’è£òSï¿8Ìë mTµ¾S¯ï¬Ú,‹q·/q3䤸¶â¿nñ¸‡œ=û7zÛ€‹¼xµÀê–URƨR(K…QÐ ÏEk+›<ˆ½ä1EåÂhô"öièû“ÊC"dA”áY)k™4“FÆD͹æ†Õ¢dp\øÖ–”Š"R…×HuÎ6E‚2øŒ mÒ–™h§¬¤ªUÛ)¥É(1Ò̱xhïht%¥e”AS™Ï!sf$/ešrNÙ§Y”Ú+ë# ‚õnœ—Ó\Fó3?yï‘×`EÔ ŒI®™â" áüt˜æ›D“÷ ¦~~5†gK"áï™q]F¬Ùk®5•ÂŽ 9„*Asn bdÙažòèÉW”Œ:^ZK•6©íd×™"ÔÙ-/§èö…Ÿ¹bw³ªB1VrULI“c¥0rJœêèûâtKr+_½Ìe¼¢O ~9(ù»9ú\­šëSëd{ÿÄ›Ê!…)­onÒÜû0Ç|æ´yð‚%ÉKY÷ó6~Yð0²õú…N˜þÓטÇùË×;s¶À<z°,6=ÎgD¨·K_Ôk·H T80¾±|O3ÁälÐïø–Ó÷ ß{÷€ÖôxÇQ{¸¶ßóZê~°Yÿ‡ÿ§¼7Ô?fÑûSpP¿çŠ`Þ¹K½#eòñƒ3{cùæ7Õ`´ÇÕØ®®Z7ÆùjxžØ±¨ŽÔXæä¿ ãÔø-râ“lòýžñû§e+]Xgtêa;TDzœpº¼gÙrÚ]ëç…Aëâäóüü—˜\}ùäÞ{ÌÏ¢*s×vòù²ª†d:žùêÐÚPÛêdVá§K‰©)^¶Bôæ9îÿÖí×öJ²ÝËZÅþ¤û E]Zó©«ìJŽÙñ,wE ¦Åù¸TµHJ¬@cÐo;»Ú½ªÚî>d6°öÚýràÂieʧªÔ’Ï1qvws”Š[«„Xãü¿qu=Ï÷ËÅ&þºñ­#nøÁŠѯOf~¶â‡¢ï‘þô9‹²ÔU¾iùN„Ä¢¦rD÷,‡ºÚ[¶nl¨Úu~Ûò;õåF¶%%–hÉn*óìkÇfࡵÿC&M¢üB–;<›3xäÂd^•³Hsa䲦~q˜g]¦Š·VøviDZR¹B 3›ØÒÉOóâ] ÅPQ2¦*$¥+3³‹¹ö¼–i”¶H¬Æ¢“‘‰˜Øâ–1.–1¹$dÔŒªÂ ‰C-f£µQ\ˆÂÁK!Ÿ£ÇäK\’yJ!…8Gû˜£ÎÚ¬ƒ÷ev‘ ²b ™+®I ÒŒµ‰JåœR¥f0!`ð&Id)1,,‡Ì|–)ÌÔr¾Že5CM±ò!,Ac¯Iš>Za°V¹WYì­z²Ímqï<µÃáëýü2µêLia _ «ûJïœ+³¦¯vØI.—ç!¶Ùëñx?J¬öúA;¼ŠñxÍ&” Ôçôv{ ¾ævº7–e ìÀkÄó{ 3¾Å1d ƒ ÔÇwÓ²oASÁÍôûqéÃâñ:'ãøQà{ýúÝœ†Ïðþ]éêµBß§_úƒ“/ÄGAùø§uß}8Š‘xþ8Tþõ~ž÷ë9äû_C,0ß–«÷ϼ àùftÆ?óë¾~üþÁéië¿õb¸YN¢;ƒ_ý,ü_ñ*ïÚ% áe{öéâ.Bmi̹Y;>7ñÐïPV÷$‡Þ?F¬÷Åsv…žÉêzw0/P‡¾©·AžÏüæiýôß+õi}¿áI¨OU›/ÆöJ³K׫¨iU²‰ß«Ý<çúª+ñ;=6ÀÿÅfÕÕuЇ”æêÅAáŠD¨»;— ÓÄæ”¹MÙ”ëdד ¬Žâ¯v+Þ­Në56m~`ôVˆ1ju¾öÓAQTŸÈؑ˒¼¥Ö(ÖgnTË4r}ÐþPæ¿ß‡_EÉǰoÆWëRºÂc:ÆÉù¨„¥æ²«ª1г+Æw\ýš“˜fÓ™ó+IâÒ)üv¥¶örÕ¬.›FµV&*,H©šðÛ* IDATRb|Å7›î­ä/]J³s™î„².™›<(6“)1ûäD<„Ì“&æG?ÝôÇvXéQ–µ&í¤àÉ—Dq.bñŽ—”’÷X–<»eJÙ&©cj8Y–¸Í½ŸçìO¨¶¸¬icsåÁ–JI ®%cŒã)!,óy<13ÖŠÛà„Ϧd3ú‘uÊu..fÇH±±°äØ”¨OsJÂ;£gað4G9ŸUFnÀ#7vUÇÈhÎ*Èšg&šÈ9¹ÈKJFÁ°"ˆ8å\AêÌy&QÊÅÑ…8!ÍB%Ór¾¾‚“±Iä8Ÿ(•ÕÔ)E/ 'V1©2Ó‹§qXüü‚Õ+%.PkÆtA›\ü@Œ”МH hÊ”cN¥b-¯É$ëJ°)Msñ.3™s³Ÿ§óù¼¨ÑóŒ<˲´ú(Ò1;û_ä]k„Pe[M"ýæê4Ñò—«Ãåå|ÁiÐ÷â±,gðÇløÚæI]ü;Í͸å“g}×÷1óR¿jª•Ø,b5¬n޽ð¾ý‹–o™–hß ïw1z` æwâS5p¥=žà¨&ðw¼_S1܃ޮç|¯lÜ®­^þì±CN˜ÃïÝÞðçõEÿ™ÌÙïazx¡¾{Cнï¢$T„ÿþ{L(Àµx9¾è–T<Ä£C'ÁØ,ǧ þ¹ÙÖ¥ö7Šn¦ôªŸlemÚ¿[Ij–ü—ùÅlršÑ{Y¥ŽSú j==3õT]ýòB·ê„{_2OMbÿaH§¨ÿZ|þÓ;»M)ƒò‘dæÎX3'Ò#1}l† †ìpSÌ®‰+ŽÏÍÅÿ-æ¸ùõÅ$/ÄñYõUÐmÀ¾¶‚‘­" îØDyádV¯†‹½‘Ûóít¾¼¤ËÝVî.‹nuWßß­›mÍ[?g¦CRœR(VÎvae©ˆfÐai¸¹[h·Ö7žþiMH¯æ µ›Ée¶4V•û¥.?§º¾TKU\J¹ÈèYþ¿%ÿuPõZIa‡–+bÿQ˜­j>­êOH4¼ÁsSÓ–­?I? mðËó"³T÷yÙŽg¿,ÇÄ’K%¥DĬ¦"tH„4réMŒr‰zÞçk3[&îêNg#‰ñR|Xæ˜S]£²¶‰ñS ÇüãЅƺ ”Òd…ȼn¨Y6ddS]Jê«“CÈ‹9‹Á‰DF¥°è·r]B^§»r*Bl"™!ž¯Ë±k9³ÅVÈÊ„9 ÞsF²,IKë\bÓ̲[¦td¼wÄu^C pÍ$Y%èb Ó9 ™ú¸\k?Ƽ)%ÆœcκΓÔ\dÆ“O,d¸&n-8âuq}fŒ¥ Â9Ä,k‚íŒObjr(€NN-Žûå (”9—\(•väÜ4+¯¢a$ÏYðÄâsôeœÓ²  JÉŠÎ 2ҤÍO5ûÉO²½´I®ÝšVÚ&ª$/P½YùsJ’¦r3͇t> UHíÍ"Vieâ眈ñ´IºYæ')oîû†ÄÄš¿©Û;&Þ/gÒòPcŒL©b“sØô¤‹žB›¶%Èù¯¸êVwW›®6[%¸fh4Ûl¶•`*ßE'מœ?ûpž¦Ãáôbœ¸°I‰v[ [o‰òxN%œB>Dý$–XÂÏãÒ<‹(éL«±S<¹DîŽeZ)Šd[©KV¶šNI(¿¨Â$«•0œ¤V*@K^/pÜ” Ïg$3Eø¢+JfÄF%ËÅ•/s))5§#‘–ñEãyu"åh %ObnL¦†*VÆ"&&kÙ¬¸ç°dÆò:•b˜ÖÔ™²–¬–Œ K%q_‚-É!U|Qe-’åYR¤¸4p¦¸³q™Mð)E!I´šJÚµ÷sDrÎG'JPŒ6ÌTÉ¥!§Ea6<3ÊL +V‘ƒgçÀ=éJrm„€‰&HJA md†'¤É§) }8Â{%)'-Ë|S(¦¥ ?ëSØŸdà<²3œœíjcjvŠ'.ÜÏhoÅñèÙMË~u¼8a1ÿYù §¢~š§ÇÇ_´&×ÍLaÎ!‹GE·-3ÀÕ5[½Ð ͇ÂÝ™â ÂÃW´VÝb¯ÇnD?UU‡÷ñøüñpK! €«&z‡vßYws]!=Fò \çwÓO= @Ø[ýxX qþvÙ·W¨å©ý<ôGÎÞÄþèƒ}ŒíOªaýBñþML3ngÀâ¯Ê·…€;Àïm¼S@Å/&}‡“žá2ÜÐÎÀazýñ=-¿>`“n¾Áð¿KËek‰Öjî¬Òì^šÛìñ/åðýEjþçMhÒrq¨, þ&úê•^¯yÈëîÇ-9Ë.¶[$å<–›}(\ë…êžËÕ6¦m9zÊš_¸VpÑá£HÁKo¼¼Ì‰w|eݺËA¨|7®†…Øï"ºÊJ'Û°Ô—ØîHk®vŸYû³mýp•./¢®ìÂ;âtñÅ€¤]5¢ŽÂ„ÌDØÿÈMÇŸe~S•^±Ÿ ãgÒ+KœÛgQ—%Î[/Ôv”­uY€3°aŠ9,iO•SùNçΧ»5 3B-u¾¨Xe.~zqU_6²!ÝRwiõå¶®;œ° ˆ¶õ®ï‡ùåiØ/q’†(ÉÀUY§¦’O>>Ù3WÎ…ý$úÆOíÒ³§˜ø²ïlÉ¢òÌ”*ÙÚ%%ó,„6°-|IÊFÚI¤ET‰ñ–¸®¢"IB(S Ã)»ØgíÏ*F¸9 “\lí7¡§ ›\L=eëB˜iI+L¬è>2x9ŽYä2+K„餼°zWÓt´3k^Æ9-qJBI†I A %q°\rrΆ€¼® Tq ž¨.¬šœíG%hJmŸ›’/¢5\äDÎqšG|ž²p‹R 2±ÑÓóÌgš’:bFñ\µÂð¨ƒóa^2åÂ9³Bk;6FT+)j#¸ gLŒFÍ–¹ï…pc§Xrä¹r5ÏE™JR$ߨzÞÙ‰«’Üj!çHÎS?ÌÉ4سήÕAܹûO†².EÐf>3xþÊtWY}¼NS´ìYcê‹L>Ú¯;à|Q/–½¶›M³Ò1ÛSž 5Îÿ ÿÿ®UÖßÅc _¾µU©ßúÍÚµôšy:‹B~« RÀC¸ÇÕs/_‡$q\§÷;Ñð×þ=0\øí÷4þHé1úulxùÞùÁ¿îË×!÷{qøÏ¢Súc¨§ðPË{/üÑkJzýaù×AMØ*£úöÛß àgà¼4W´)[ö5ö2õ—N»½}ƒÒáN—H8ýìððKd‡/ŸþSëÈèyüÛ‹°»Œ¸;žøók>Çuüú!ü´¦”ã@Çö™ °{KíO‹>ËUãEK‰ªhîñõ’/ç%1îò!wCb¬//>AwQbc~æË‹qÞœ=øé`Ùvèú6¥Ê¯™cº¢roÃ.”;sq ­Kà/™Ø§¸ ½uÜ:61T;2®Rݹx¯ «y½¢Z!ÀKYûÅ 8g_RäHÙ`‘ª!0Å´•”Yàù´ìà×µ©(†%¬ôî$v6’£ýúºÜ« oùÐZ•]dxyHMLõ½†w­çQ“‚­ÑZGÑjÙ #ÍjµÞuëJ­K³“ë ]ëNB¡ŒÇpŽlvs ¡ßž¦©'îV+˺JgKNWWªj¢ˆÑç&C±ŒtâÛ`Ä8¥—%ÓdPåÊĬë`뼪D«•¬ô ‘U^Űñl¯¬"e„1A"™s¶¢T€"n#–kSI®Ø\ǰ $ÀGàTœÈ…sžj+þÉJ•53!JOÎÄœõàJD¨ò%ŸÏ¥$éSYêè%TuŠêZ.‹\8ÓJª¤2†9§6:‚È$"p$°23?»(Ä9 ϱ”)¥ÑrdNiVX[B—’ŽšXñ¹ÄŒcéG?zâ #¿”ôBòe€~”)'übN‰K•Tá²0ÎÀ,XpeÆ Š–‚1WB… &™ˆI;_–$‰q#¢‰eOÎb ",S9«ìb'[5…GM+ŠÛõKÉ÷ýioV¼œtì½sÞÞÙ7þ©.Ÿ×ElÊyÇ×.ו«_Ï÷¢Ó/HV‹gôL·ÌÙêâÙº“(| n¶þŽØssw÷ yÑ`iX\W ÿŠãá-Ø ÀÃ÷ßnbVàKz|†·€$6‡ÀôÝ`¢Ç¯E®·ó‚¢ò{ ŸÛH;ìÞü8×ï†×B©3âôÎßów¼ÀÜ0>n´ >>éG»©C® A=Y R¸ñïž¿…òö…¯36Žþcjc³¾„à8½Ä0„÷ƒGÒÃ"Š[ÆÇ”§q&@->»ÂE€ê 8JíqB8;{ƒýÓ—ùoàEÚï»xdí*ËÊ!êgÿAQ¯Äßp!?-*ãÅcöåÂ>ÃÏr/ç oÃļ2§Ö `7Êå‘. ¼ ..$(u/çQ§T§ûûêÞ²‰»:mÙ°ÃÅ}YjS—Þ,Θ#S¡¸6ø{®ßMº—iÓŒfëõe“Н,»iƒ”Çàãpb“w‹ÄH¬®¨(££ÈIÐÂ!¤ºn•ÊHaÚŠÅ‹ît‘š»—«F$ßµ¹ÖÑ&^­¦è!}œÛ¶‚˺Té;lµܨšUFÕ»$Ra1•‘¬"³ªê¶®WÊl©Rƒ3äÙ-~¿âOHŽ>ñCe lŠa“1ˆ$}ÉûÉ7|Ò9M‹› “VïxÙÎ9.)¤20AL‰ÂläÄJw1M‹w©(ID’BÅi¶p?;œ´? ‰Tw¢´mÒÖSðe„Ï%%ÐS˜#ø,DÊÒ:­ ÙÂJ2AaJÉG‘IdÊL;V%ÎÈ9>Ì..K§µZsȺ0A^1W²r>Ÿ|IJÞvFts”erä2kZÙ—¾·ÓT¦pަáö§EŽYʱ]87²¥Ÿww£<ç!-¯®ù²cçõ‰˜Y®±0¦~8T÷<‹Õ…X?+Ølýj{f@”s«å©MÇìîÚÀ›zqéW!¢kûÕSKµ9²Î Éc‡JáôLßâòðo;ÆÏÔ­™àÑ»ÁDà<>;Ý:±ìCÌÁü­áL¿y —ùv¡ý·ê wI¤ôA;û–Pùìßë÷ß~o=¸Õâ(Àâ]¹Õ÷S27.NéObq¸uº¿ëÙ÷ üáí¤¨úöH«·GþVA{{TVAj„€¯Ý›t­÷&?^诞PÍSCé_A ဠH(‹õ»ãtˆ ótë¿æÖn€Ç|’ÿü x&Ðlv¨ÙyÞÍÓƒêÌå}.~ÑãtJ¡;Ñ_}£±¶!8oÎa>ÅWA˜~æÍ‹Íñ% YÄF¬¢ùé²O³éô¯sUˊɨF‘Ÿ`™E4y_/ _ÔY ¦ŽÞÜäj:ËÆiÍc¾›b+––{C‚Ã*Swº<‘¥5 ™!Ub*æâ]?N׳GÔ‚”¨d1¬UEn 9[.e”‚2¤Ð‹EGÌžMÕº¶´ÓR©´!}¥­vW7L­š4ð˜tT*¢OAk}aÖ«jeÛ†ÕT„Ф:UU\›ÈtáÂH! „7H#7Ð`|H/‡`Ç@©ÉÛ­°­U¢ÒŒ*–…à‘Íçŧ8—6³TlKD,l°Y_I[SZ«¥„C™‡l_|ªò¤F—˜[E–å"T–\/¢‰Q1í ›Ši¥­Ñ¢‹äRc*ã0Lçiñ>¦ì Cæ…"sŽ$BKMZ® EÅù¢©/ÆáE.\¡Â)–d2Ö‘µ¥Ž¦â…¾8 4,:‡8-Y2i¨êØ"®= CÍ¥p!ù¶°’Eâ&×RP!~faݶyÕp$³`ŽRɤi\¨âZ+‹P©°)s3AÄ(Ãà“£©¨CÉLˆ¬±\âÌ03͹"ž[EJò9•K^)-™d½×ýTf ¨Q~&ÄÒ—™”c‚Û°[Ùñjba<ØÐ7âPRÎäÈ ú:0™§Êy™ׯ–‰"åÈ©è=ÌI‚x]¢ …•˜|Ȭ)´†–ŸØJ<¢Ïo.ï@÷î|™–ÍuZ!<ßäÃáF¼—Ôâ0 `·iþçÀ%0/± xàÖ¢+cöHoa}Œ°1½éú ßa{Ì-–_RÅkBåXà!Êï3‹÷¯á‡Icl¯0û?¹Œè¿ãnŸ¹Âü^ðH©ðD½?´™¾=’|k+?ks´eòúÚ×#O/{uÝTj~`·²¨Å…zšnùé^@íÔO“aOXz:¤»ØÏ©p•óÁ”ùã!ù×67(€zlÞjOŸ%TG(`uz—çIïnð:ÁéøÎŠó\?¿§r?H¨<úýã?bÐ{ªð‡e²~¬vö»µá£¯!á žø/?æÅíó3°zç öíkßMc×ߟ—“s üÓ¦}9ø6¡| ̟ဌç”7¬àëÊü«ÕððÄc¼€ä6àâCd uKKå'‰K]+i™÷ËÝ‹pG®¨ŽmË”™²ÿC^Tcâ~"3ë\Êñ‰øìd"êÏÚ‹nà¿+éz ¿^ýݪ¹ð?)›ÓHþd=bS!T¸šJWÏŒ„ïú‡ó %6>ØmD %Z™ÛÒÔ]‹N0*ÑߌYN­ù0Ocyõ2õI]d]ii½œba‘!gfdŒ†Šˆ.p‘°PVuR d[ â©x&8ã fY‘w³ä¼l%[K&ï+AÁ²Ta’ŠÈ)Ŭ öš¤ïl@7(ÚÏU,­oEÏ-º«KµÝ(Ý1(–ç+‘c'UD­Šò‰Î‡'™î]ÿøNÇ<}Ç­o!êˆïw^|·G.ßÄíǤÎíÞÕàþkôýý½âmHø-U?ýh¡únmø7»>Ò÷ñξËÓ]ÝÚ8NÀæÝ ÛïÿÙžV8¸éSöÿ]ˆ{¨2Á~‰³@ Ü^*\ëwµ®þ4½>ì5Ü xŒá{œÒY=,é1²Ï\i?Ýeú"ðØ5Ý…o6J§Ý°Äø„Î{˜ÆŒ’ã¤B¦k,1ŒmAË)ÙxgI-­d•R¦P®@š—δ•ËÃ'—DJEÄÁûeúÁç%2–ú±ä@[Š[F©ð“# °9Æ%L²šëLâ0Cžm›-M•F6Ûöjsñ@2:ºp‘$îJ–œ%ÁDv†Ib甚Æ…ÀOÎ0O•NŒy‘8å,8‡)…a.*ÆÔB´wX?¶òå IDATìFÖe¤È«,‹Ä —^Pà$¼ðÙe$ÙÂ%ñB<Åi.²aI3‹¤á9U’Á§â}¼Òàh›ªå­Ì¬,‚ƒÑBÙ‰”UHsÙ—@Œ—Ì2C(eÎ%¦9ö.0 'WxgÄ¢rVô0¤æ<Ð^S>Á²z6»L=ÏñÜyRBwPµbæ:tl¬¥Ð×Î>>}F°Íò\ü;/¯ÆÍZ—çèÎðÿXF¸ø ZÂÜ)ù0†Gë•U‚|LÀ×ÀÐÀOzÂÍH!?<à±¹ãùú1¢ÇW?žèówcï¿§!®·iÃ@|ç™ñ#ãHÍ»½—ÿÂðýýýò=n‰c‰ÄëføÑŸ~z» ûƒj¼¹5¼€Üm~¼ýìøv·ÑžÙ/ˆYâ%°Ÿ Àt ùZ‡€°ÀÒݪˆ›·ßâáì'_¢õðOÑ?}-.ü1¼GÀqñ¢—Ý‘w^·luø´[ìÅX×^—ŽñÎ/wËtŒO“@:({¨*ù•šmü2~æª+±Y3›Í|SÆGáz<ôÏ~'&[:ätqXAÄk Uà+ç”çñÅá>t‡Ç_¨Ïz?#&ÙÔWeãúÍpX*k¥ˆQ`rÜ^j´1©%ãÐɈb ¸¦YbšCò!_Ä €|V1ˆ¹d‘öÜæc"6;oXhKPjSP—”lH‚‚ˆ± ä(YQÄ– §ä1͈…G.›LÅ¿I¦|çfþ¶…b£N3¹HB(ëhC‘¦ƒËfïór.£Ë„2¤\ðË4îO‡éf¡Ó_˜©iÔEÃŒ% ¦z ¾{Fvås¥ W:fíOÒ‰ºl7âŠWÛ¤$‹¢Û•ÝÀäSÁã™ .O,_†ó4ßLÉcqðÃ~™È$!eY¤›Û›È–K‚r^ò9ŠEI]Q0/3?P5©Y7ª•† ±ªmW¯’‹¬PAö18‘P˜æwEfLÛ0ƒâi ïÈ£BŠ1/%§H*!&qHz)¥¼?O|ÞÇÅMn²èdéZŸs4…+HV¡˜Ðg¿Ä0&°ÀJ–dŠI2¦›˜=µäb&“”… H‹Ãâòèse%©Òr“y"]˜Ïi°ÑǼ”¬sFR$Ä’ Á¡ôŒ\ˆ” q•°™sDˆ}Q»Ú®J¹ŸRåÂ1ºazáN§%Ž}}u)GÍKW&2Eï&wO$œ² ¼?pù¬É_È+­íƒ£Õõ2ïR çí¨©MÕc‘ö†k!ÙMÌ7®ýçÁ&Ï›¡·}'V­X;Iô>z—€„8}ÅÂZ Ò-{|‰›¤^¤‡Qðõ@µÂz‡cñ{|«“¼ôXcñÏZx ›>XÝü>gÿvæü¤.ÀÐ0*â U>Bã®ã·»N®ýGÕ©ŽüƒgÑ”mz]¿ûƨ€‡Ö£ö@ð3ZµÛ݉ípýhý—.ûjíørWÕšÄ:òýÈþyE€>¤å©ðw‡Õ¶qŸ¤¾S/ïÎå¢ýf6kªÛ³ÊíêN|/ÄŸY§ª úv"Ò¥šVR&~”åRåÈ ë$E™f¦­ N–|CB b"12(i¦õƒe;‘ ±Tš"y³šf!©–¬ ,Î%Ë&aXÑH¥LaNœ'*ž„ƒê7|R|óËÏ,¥@éœR $‡cš†^Ïj "!åpîûÓÍ0LËi9÷‰ú¦9×õN7]U S\Ñ^‚[ãX#ØjÇùNäÄçæÉD¬ªRÕ³ñ‘ Cfná8ù ¡ÄerS8áÅ1œÓ)ˆAÇ›y¤ôœÏ¾YBwS–$‹å¾,lqÔÛRÀ®%)ž½§I‚ç¬SH¦}€ÌÃØg ¸’Œ¸°Šb¸,%3ã™O¢V<1Š’sbÁ¥8ûÀ?ž–r^\VÞ/ÁåÙ§DKò“{<åŸ5´4¥"QˤÁ‹¦eNa.jª¤EI3y%¹48%‘%’ðEœcV¢4ABh™ÄÕ™ÑF #BγëGw#¦y lm4תQª\DŒ1º9æ%éIYi®9(Fd“¦T Τáÿ?ooú#Ù‘Ü š™ŸïŠ#¯:YÍ£»)iGF³ƒv€öß/ v€‘Zi%¨[dÉbUå×;ü4÷ýPÅ&‹w·zô>%"óE<÷H˜™›ýŽ œ(tÙÅzãá&¤‹‘K£_ yPN®‚ÖüîjU¯:\l=V„lB¢¦¼ì Õíý‘ÜüõñЉWšõþøL<.LöüzŸÜt ‹šn”«ÃÏŠ[ޝïoëg¯ß¶šÇõwÚ~Áîà 鳯ÛÑm¯kbúyŒºÔ– À´<‡3óµ£[ì:€#@Ü@e€1ö#xA<­¿E#€@ÄOCƒô¿µøþ9tëoxÞŽl< ÿa¹áߊ?0:ÿÆÏ €à-Š4¼{øït®¿ëV1ÀW¦Êšà£F nÅêòît €¹€@¨Ü`ð+Ø_ÌŸ€Æöi5¥“ñ²¾TŸ1×€V°=´ë¯~õìl:Ý{SsÈnRœ•Ì N¸Ží«mÄX£Q÷ÛvÔq‡kPòSݾZZ |UÒû¸œµj>!ÿÌ0苵^ªàq.iV#WyVñ‚Ó0­¨œ»Õ³hs» úLt *YD *È |€åK¡W.—d‰†YØ‹(²aÀª™@iŒ°1©”³Ë#–¢f#âVIIš\4v¨›‚gDö”D.J«©d "  *E=eEÉÕ¦“‹JЮ { „•¹f™]>úi¦/—Ã+L°¨ÞÛBl»5­”ü<în^]_á÷;²Ë,cc#¥·¸ªÕ”8×Lsì¡Ò€m„$Š2h¿LÞW0ÆrÐK0!  “1§qœŽ‹O±,s˜Òî‡e‰êNêSÜÏ'Sâ…¸m¹j!éR¥­(â¾Ðg\z¦èAYÀRõ4 YOèïÝîË–¥Ù]³K­Æh"YKE¶´4•tB  ŽWPF•3é¾È!—NeTä /ÓrÜÏ8.bˆ…‚W¢”ÎWäRÕ]ßœY·sÃvPº‰J²®Yg…=Y}f½8ÎXSP‘­Uæ\²€ÜCËÊ8¨³¬äÊ5ôJ ,Jdå ͬ¹ ÏÅ-n¹v¡«Å2oV®¶šêP[FR®2iSuE‰ÀO„'GsР)äû`!Ò€ rñxhê‹ênRs{0wVmt»:?×ÜÔ)›#ò w§gûe7¶]n7/Ngw§<”ÿ¢4œÊpT¼zuåžÔuíN ‹‡Øÿ=ä'JŸŸõÂÛëzù)Üÿ- @ó>ðSÀå¿{3ôª¿jGo@·˜_”WñžÅ©”!|Õ[®àfîÍpZAlß0†¨ÅC«áß¼ù»‘í@°À׎@\þ§L!â÷6¿Ï‘ož­}7Æ?Ãú5'ðṎ?Dö{gšý†¾ñ úû€"ì¿ûÉíïAà) {¸ÜØãòåñ‹=<ÐwC{¡/îT‰¸…ƒ„üW°Ö°ŠÐLòí?Ácˆ«çûÓæƒÝÐz½9=oÖpTÌ ØGH›×òé“A —›‹­^ã¬Ý”P³ BOµ:"{¹¢fÞˆäZžó¤üFý~¢BD'÷¹8C._ø£Û»î1ª~|tô7ŸÉ}>n—Þt^”“lr÷àË4µi"\À%5eXmwï¾._âñ7”þCQP!fG%™m¦M_š)ÕëÓxº‹¾f¿±é¬n;U©2ÑEè  4šZ…YÅàQNVFTMMÁašŠßÕ%cØpªNÇÖpJ¯yfŽ‹ nØ.]'E1P £ã ž:Š• Á‹)gMȧÕ\Žkc¤Ð&#Ï (ë˜3äì„¶V“ œÔ((œÐ)Jº•iUyUCq¢uƒj¨/²h€ •Å” \) ¤*]É”ç: ŒDè÷lN­)šJNÛ’¦nTŸÌ1Dq/ñ1Á'z&º­éz’&¦ª]½›R{Ÿ—eŽPqý!ôk/×ÙY©U…û…»üjå^™ñWíçúk§ W„Û²}k‡ ô—KÓ¤âö÷Àî(ìèKxêàÅ=ìf Ѩ/f€ØlÞȰ*øÍw°Dþ]u¦<áE…hØŒ‹è&€ð}Ûþ>4½S³+اw 4_ûíü^ßá;añßX”ëoؾ™´¤¯‚s|môSh¥WÍŒô½ !ñ--Å|eÇôƒ,¿ðÍ{ ŒkXï¡ØÀê×Yœ¾TvÅWpþȆO«Øç^G([X¶°ÚCÞ„-¸=¼RìÝaíËêÕ ^WXYmÏ£?Dˆ·Oáƒ_ïÈ\гÓ ÷>Üý¯µ6¢p ÑBÙh^ß:u0YtM·æ«K­÷\8_œï=¬ž×rM¦=ÀýqÁ'œ%¾šÅþµÿxMMÓí1—«í"H½”x“@û×0ò{ñ^ÛQÛ¡Ø’s¹Ï§cä>f8æpëò•‹Š½UÝ´jUgúªìÆY3cŸGK[‹!­ –ŒTÑÊ©à\ÁÇ`­3‰k,‘ aÚ©–UµP Z «ŠVFD€Ê±Ê@µ-W•9fGN.•%V£*HÁª>qJ}1K²„Ä×´êÈ&aôÓvçê¡Üï^ßví^? $€æ2fäuYš4_-]}æ^€[‡IU'HAšzÛ5r)ª;’´Q‘ÍÈ‚½œ#ò±.æi—]ql³Z–""SÎÄ.Ÿt˜¢Ï.NIM‡_‹ãÃBòjÎíynèc®8˜}ŒN3XîW°±8\…*Çs–c&k­í ¥læ XmZƒÒ•„«ÄUJ›€rÎUø\«)$—u¤œ $•Q ®AH©Š­Ìñ¢ˆ¹ÁmjÏ”09GUFÙn³Ÿ-R‰FSHa‚M̽¯­©'!±ÑEriYE@HY %•ÐI`Î#p±Çƒ_Ž]ak¤ñX0æUP«ÆdÄÜÖ"—’j ’)BT"² lNC¦X׺oZÛ“œÞÍ!—8Iœq“1<³îƒZ®s1&w­3d _5r°–— —´LOLg§ªJÛ®WÂK3mmÛ}TÈÏW˜]óØ/ëüòÒÁb>nÌ£„Ã*«<5ÕñpzzÑÿ—œþöb<ìGÚû 4 Jàž£††§^h8ìÂW!fÀo;©u Ä;xñflà?7 ð•F÷÷ºð5Ç~mW|°þúëÑé×]©ò‡kLü¬8¬¿R=~é§`¬?ÞSÚ¾; þ°Ð°¯Ü7 C ¿wDóUr#€Âo$˜Þ Ü[¸C| O~ ¿zO¶ Ÿž¸£}¤}f_&ØpÙíJðûüücЗð‹ðçÏók¸Ùkg'T?ѤŸnÅ‹SŠsx°\}4Nâ¶xSãú0 ™ä’uÄÎÈdÚ?ÛKÂÙ8‹Iš Ô«M¸à,ù q:æÿá—ý¨Ýž€Ðis\6§y-g’{ÔÖè®Ä¦Nõmš«pv¤uìÖ(öc˜^óËïU÷`‰AMj§e³™Ý=¨[]SV]Ú©f”c âEu•´"’2Î\’(³„ƒ¤diK‰²ÏPF P“.¨˜ªdA¥jËYJªEPä ‰E‰Fƒµ‰G6'ž=T\8×£fÖÕ“q ÍAÙYòº.*‘íÛIU©î±³¦‹Õ,y9”ør½Ý•p1…eÇ'¹Ï›K~ØÁ‘²É¥U"ÀbbD9(î,“žK†8'˜F– [Qkä¸x·ìÂQÏûÉæTJ\¬Ž•E™“ëa³wø²%£C[ ½=QÕµ(¿T ®Êø§fÎè bH˜Ô$š‰»Uk*r¶žÛrK¬ÑÑAKR)+pqª¥’„I(åT8r†è$±`1Û’Z%JWU(%&‘iÕt:R¥åb«6lŽbZrÐÚ¸j§Ún.Êuš4™ÜØC'Y!²Ô¨%*Û𚢨è¸=’ ÉEP#”¥föì]ò9D•x‹]\Fúâi"1/eaÈ0ÍÞCž ·P@`[µ,`°¶Â±2]w¾Q‰Áe“Ëá”ЬÚ~¸ˆà–úS<Ê*“ïNÔ¶’Ñ&…©”˜]f²bûH=ôqÔŠóêbüŵ —C®*6LØ;(¿i 4láGbè†n.jZFõÅa9îçnÕ_ˆgËÍ?cL Ï!Ã_)פîΞW ä÷—ã `00€·g€WÀ§ïH[gõN_“ܺ pp >û:=´Ðµ0¿Ë…øoÂ?‡—ð}Q·ý®JÒÏ™éþ ¼}âwGß,ïC€ðßi}uµú…í˜`p°¸{›r+hÿ½;Âñ A¼Lïäø=À **§×`>ácxñ4C¿‚Ò6Óù/4Vé¦üöó£ñ^JgÍlîÌ-<:Eà1À…†›V‹°»Qß^<¸{AåS˜?ˆ/?Rε÷w±÷C÷°4ë#eÀ•–;£Ådщó¤a|8Ñ ;»ÜvÙ¼NÏZµ¾Bnõînt· žp×ûp~²Yú%¢tC'KB>†¦O©]Y)~‘n[¸Qñ½ šëc•l¯„¿óô‰ùCC»fú¸ƒ­¿KÍߌ´±åRm´Ê®!¨e ¨;ÕhÙ*mIæ cÈ'ªÎ©‹42†Œ¹B©Ô -³(ØlŒ$Ò¥†Jd"˜ ¶°®¶r‹h)b Õ¹pÏÙ'YÔÈ9—°˜’`V˱™pÕÅ3©;¿¤Ð$ÓÎÚôˆÒ6ºÕÍ™0«S¡%æÅŒQìæLÏ×é¿[÷W[?„Ae•¯½€Ö )+Õi¢î¼Ì£è[ÞV5¥éÀþ Û j6;J$ö¼»_Â"Û\°ÐQûÜ$_3,AÓAlnl6¡˜,;Q#]ër¡BÓˆ¡g:M)½Lb(ø°P/k±0YÏ´sF.%ç&baQ·'öU)3\báðH31ŠI* Vg9ö™c¡SB4ŒÄ…aOŒ pvÓ<¹¨E@TÀ…°šŒ"—âpña9B´ tD•xäL¼Ø’"y xB†:€WÚ i,éú#ë"VA(¨ˆ‘Ρ”\Àí¦jVE“&,ÎEïjK% J ÁÉîAHQT%  -4èª-D*wÒ¢ÀY-' q™æWœžÍ彯šÒ Ç1¤]¸#£Û+mVïjð0òÊÈ/‚±±¢A¾J÷¯Ã ¹1ì-4!›ÕA´$š|Ë1_¼ºÙÁ«ûüÏÉýNǘ BÎÿØ?¯XìºñíQÉ}wÿx}|:ŒÜTXNÀGøK€øˆP[€•†×ñ›€ð½ï+‘;ñ`þ:ª¾Ð0›oÃSþÀcÁ<Éò“ÚEÿ¦¡…üyóîoæ‰7³ãí7üC ?h½0å°‘Þä?-áééÛ‹ÿúï@óö˜¡ßyª Ä/žˆO· ž¦§{ú3ìÔGk³¾LV·óË&6{ÿÑkEˆšM ã <Ü^ãj·gŸlÅÓÎ@’½}ø¥EÝjû‹Øm RcnZQ4w£ø§s|˜ô“ÜO­Pú {æ×cÖ_D8¨nÒó™ê„½m >ü5=Âzvnf•Ìaô~AS£Öœá£*›Në&M{¾ßÜáûêéCËú±‘Jˆ³öZë –nvå0Dèh‰F>œLø-ÈO“† Vçüh1µŠ8UĹG鲿³zoÔ¼’+iÞ£V8$yæÛTGÎ +aU§ˆQ[XUÙ*4Ú^×í m³ø.å9ÇIJî©k¥Q©[²rPJNË4íNþF%9öRÅÓlJòç1¤æ¼@+!*¹Èõ´Ø‡\Lr˜k­Zª¶kP·¡:*ɆSLÇ"NuÿßE‚>C»0œQí8=¤v-@tÝü]<™ÙOšRˆlÇs&¡¥æ”IZ”µ"&Öó§{7ÝÆeΩ<ƒ}oTc6ÙØ•‚Û8ÝìÝ–Y´¯°4‹¡_`•3ûW¡ük–ç¥ÚªÈ™Ø´ÅWñôÀÇäêeÁ] ÆAp0Ÿ2H¬d?"LòtSæQ-Ýy#L*.WS-kWÊZMš­ñ^U)0dYªˆµá‹"M•jMs*³yô‹çÑ&寧ì˜eêj1Y„T^WBÊš¢€†P@ÅbR1UvV6`*‰y&(„‚9ÆìžœÉÑï}™¦¢(µT%¡ %5%PŠ2U°8c°iJ˜û¹ÊÄžóXxF'ƒi“’ R²VZäÑ¢‡¢É…ý’V'÷O{‰®–bWG¾ÃÛ¤pW¾œÂ"üR6]sxtGv‰ vq·MòV>y½Ð²?½ÈÏãCx,ῆîl»»ìÓF߯Mºóúnó/àN$€y‡æ²sPvIíyöµ6\_‹ç–Ï+Œ.àMúZWaÐàÞ »Ý×ï(á­`ßOë …À-Àô 5Às€í¿‡’é{ýˆ¸üCžïÍõï¿KWþ™+ùÆë_~ë±|÷–6Â[nÚïu3¾ó•€<Ä®ÂYüKÿ¼±zh–ó& -»4R†“tÿy±×)ìzóR-#lêîAsÿ|Sa]ãÆ¿È‡á\¤³_¿¾.ç´à‹^ÇMyPÖCqÜðfl«ï£9¤Æ5róˆž\BJEÜN÷9¨f~%ÐõÔ°xFV]Ô«Õ„‚²Ö„Áõ©¨·@Ü'í9äjÃÅ7r^]þŽå“Ì@¹ZÖÇŠ7î‘ñNëÀOð+ Í6ß-iýßüà‚ iG¿úåÅûÛ®YÍŒ!Ð’ `d°ÓõQâÄ’bU·\Îr…ÂE ì%¤„‹•ÉjiUSõàMW$Sõ«,ÕJŒ’“  ¨ç“÷;ÎÑÃýˆí¾Pù(d©üPqj—çë´Ÿ“}˜ÈØz$¡ISd ¸,sð’ _ˆ€[¬å0þ–XÙfS;[Ë’ÃÞݽÔr#%ŠŠÅ% 4‰ô”ª®³&E4 n œR©‡O«YÔR|¬]âibé]‰à _r:,YçFökhª˜‡«ƒ­M‡Fä,R­È Iyftg1K´\“®Ò˾ÂIÅД}A©´R#¥jHÍ¥ŠB©€N 3TÙØ„Û\‘O„˜L¯šþ¬ ÛÆS™§ØÇX£ÓÓ¼?q·¨Žá¡ÜŸ|aÑÇ…N!,ݸÇú8¡q£Nói—L!ßͧ‹›Gâ%‚aœåÍîÒ9™îÒiØíûdC‘†õV¼Ñ?¯Ï«úAR¾d€‘ËÎÊ߯ô !œ7\«üé}A€{òòr„ÏÎ"Œ_ÇüªþU)þ`ˆ^¼•Óx·ŠŸ¾M1ûFg~ Ð;ôýlÒÿ,wµúÇž~èú]ùgëxüÀëù»_ÃS€`Žðùw³K Ð}33¹âöC¸zŸ†5‰Êr–ZU,”[aööüåŽ/-maY¶jµŽƒ|zQtM¬^Ûû)<2­½¹œAgÚ‡NÀ­Zõò¿˜Û´À˜Ú/·F „¶häy?ýå±®=yö/¹!ÎÛ1Í“ÛñŽÍ¿jûG—WF­š”î'é8§HA0j‘0_‚‹ -„Yý@v—HªÔN—bë€rbYQë(— ç“jT IDATX9Ù•q<9à²À\š‰U[Ogz–†NÄ÷Bô….hÞU±*-Ç$ÈéÃ}Pêaµ›”Gvc€ÐVª±¯¬²®AÀA«¨Õ3#ÏPÄÊ5ÌŸ$¤RÄÃK:ÌYLw‹ˆEfq¾n¨7›Rd å4§¾¨â‹ñXxÉ^Èjt°ìg¸Kqr rM±`ÉœêkŸcÕÓ•hM«"H#wpXs Ä\ò$8«$ž ©L1š½/žÑ*Sk©¢4Ú¶!Ò=k¨ÂpÁÖ½B©’š¹:Ž9{ʵŠIi‚A„*!ɶíc#‹B!´!£­â8šÃmôI8r¤wUý™ei  ŸAìuËå½FžI┃1ûÚ¼˜ÐÞ‚áeµ•gfzÓp `¿ëžë\OÿcZÎ!{x”dMzX|fÓB·ÄË.¨Ù¬Ánݳ`/ë"ÈúHAkàà°{'( ùŽKØ_«~ïûöM¢•ø¡‚Ø~¥¸”¿‡ý')ýÑ*‚Ü ¿Â¶ÎÿBß8 ï=™D€Ç_mßs %‚Ñ_l YŸÚ3c6t¶íŒ½¢Xɧžñ ׉ç+¨ œix˜¶« ÓÀîѨvÇthÍ'·ÇÓ<ÆÁÕóÙ ð$?iñ1«…éb8ÂZø!¨ejsnom£¤X|ö.\SêTé¿!¯2Ëv²¸/e¢¥ŽÓxýî=xß1o×õc%ÎDîrþÿ6›Æ›®´Í—çG¨÷x£Ï§½è:c/qemJ+?ÿš\ïU³/Ow²ì­¼/Ãz­þÆYæ2…Ú¸Åac‚/…°±*£×3®A“ÓµíJˆ¾VšªMN„ÎÈžêŠÃgR¥ž1¢L…í Õ «.±„j §\š*Œn  . !ꘉeéb>«ÌŠOY‡c:ä87÷®Þàr\¤;¥³U·7½v‡½¿í–ÎÎ^Ƕ>_n>?ùÂFàö¢|ø@´ƒeÉó ä×V7sá¹–Iu‹¹iå`ìudŒ”ŠÑ¶=ƒ¢ —”Vš{…)Ë& Š`bÕ)†H»Aî0c‚sÀ ÚƒjYTèµÏ¾@p:å5{Ÿç¤ ÃJ_nmé´ê=?‹¸¼ÙؾU/ò”㚤+¦v«Å%bce$á%’Ä#”³«ÑQ™2…cZn—ÕåÊY7öK¶‰rñ¨RͬF]Y­­Ö$DŽØ»èN'Ÿ.RA^ †PSÅÐ=$°XQ¢Î T°§4.àT ‹e‚P±TVÂYQFÌDFf[µd¬\N¢”@MMA™%eC¥ÂJˆY‰™P7†€ÐÒ¤ÖÐ$ÓJEÑÖ ¥–ȶ— ¥ò!ž’½™Ômø…!¿­{Û)±)­j†œdݦ¦ÏC'P75f_·7©Çî#µV™/lø8n"T†ÅžÅ³³ççg-ïŸó<‘cKs5} ª!]ýâÖh Ї³0´QÆ“£¿ÌàæOØCÔb½[Í(Nu /Á†ïU>b€;ÐùÍwˆ_q§¾G&cVí7sÃÛB¹ô_sÔ¾‰}Lj´8}Íþ§náŸvÞ ÞØ¨ñä´ø#iê§}ì¾5a¾ÚÆð”õAßý·ïRþ­lÑÛ™G¿…ôT¼æ]ùô!~ø¾}rÞüµÕ›XRÅ ÔD¹$Ÿ îqt›°ÍŸëÐ_Þ?Htìà«a=Õ‡÷úsO[@ ü’õÚµZ¸Q.*,ƒ˜[Û¡Uu•«bNË"nvþËI®Ñ+¿v{“n—:Îæï—ÿ»ÎÝ‹:¦f±FZr†VŸKPe˜ß¿Ì½ª‹½›ïº(ƒWÚ“ue yκ® =[n*ÄAÕUfDŽ|A¯•Óy×,KBòZ—¦„>¤låÒ×Èvo“j“i‚‘TMVB+½„4‘P ËÆ¨Ä9UÇ…JEYì¢d,”D‘5¶Øt¶»€î:z"çSÉK Eb6ê¶Vc’„¢Œò\2Êu,Æ's¾Ññveªp¼q×ðx%|#£wÒØï’‘Q)äªmWE¯ÑdOåp¾¡¾×*Pþ×è^ÏYåY;–\°ä"æptl1ˆž QH~ãB›xÈ…¬¬)ŸŒÐN~º/Óg­<³õp×6kµêú^S¸_çëãÒ)¹jØ<ôèTç4åãâÍfÊ~¡$‡¤Î·í…RÕQh×%…“±è¦â:¥¾°&¯rSÒ!%àjºš ¼ ³ :”Õ}V½TÉú°R$Ûü¨oJé-W* ‹ ~Þ-îº)ê“ú‰ KêµJ-¡ÂêF n°Æ:£ž–ð>iQ•1ÔW’ŇdNˆõÑõÉë–+ñŒ ² ¢ Q´º•X›ŽäY'B0Ü)QQe¤c¢qæuàÆ³U)€ -ÔÔbÕÀºJ”@P•ˆ`™Úš$TNñ²æ©ü£nךLíÐÊ`KÞJ:?)å"«Èst~ìšW©6Xš9<;mDëÜ ?¡Wšü~>™®,ìÛLAP1z'ÈØÏ¸©³ŒÚ ²9s#IS'%ÁšÀ'°Y‹‘j‚¹@c’È1Mœ3$—WEt‡XšsL&E&`ÒD ±J ­iX@*e͉²q¬œ¨ÁdQz¢]ÀÞzKH,b> AB—A”R1‡{>(÷[©ÝÁBnõèÿw@§—0¿ÞÃîMI¿‡Уg`& ´Ö±ÄÓK€ød m-ËîU¬ÛwÉYéЛ›ïŒ h÷–ÔöGVßæ[À;“íï¹ÞÅ‚~‹ßðïêíóS®Ÿðqóöûõ[iôø3>|þÀÀëýÛAt‰à ¤O!½†é þëÕó{gÛsgÖ ¬ g¶=÷±5ÞÈz¯m<=?å‰Fa]ûÑFѲ ¤ÁêIVÝMK ¬‡ÒòЋÛ6ƪ]àÃR‚ßõcœ¾RŒµÚ\ÚV,ÂÇyŸìµ¨ÊÿóÙ=<€æYÖ’Ö@=†$ü3}Z›>’dÎ Úý­^Ýn…úOBôk:¨ÃúúÖþ½9¹z:Ê/G€ƒ‘­®­ZgñËÆô\n–Ò_džo¤;k×YШ̂eо £õ³Ì-ŒXz!\¨·”%§D.DR¥&‰ @$·äìUõȺr͹˸­5…hçé˜16)wÈä³”Œ”P/)/OªÜöaGÓŠd-Xç¶Vc ”yIå4¦/î¿nÛK£áj` .ÃDfn"Ú/SEjTn˜r¨©ž£h²Åûòù4@°¸ä±9N£Ÿ…öïçíÿ:%u%™j .œæyÎRÈF¦¸5#È n£œÊ°ÞX£Óz/Úû0/sÏ¢­Ù¬ïy5çîYQö6ŸLÜXióÅ9šFmj{Ö¬W+-5WtÁ¤ ãqvCéOÕ%î”Þ®†µì§Qó²÷eIÔfšQT°(\`ZÔ!JÆJÂ2¹ÔŒu¶½ÃÆ)\¹U¢mkÓªUÓYÝöM(¢”q.è½Ì£¬'ÜÈèX½Ž*1Þ´‘xá¨RH>-*nN]'/ËÕZ´Æ>̉kÉûƒv»#çeQ½öCªÖí9•·BW–ºGUU£JL†¹(TU‹F+uÑä+è˜eNHµ¢fVG¤#ÈBF˜‹+"1!e‹(Y!¦öýL€.¨Ú ù2V¼XõŠ4a]ÀÏ×8õNë–âP¬½SÚ¬ ýÌw¦º÷:PwÉ›×G–]Td†Ïõ@Ì–z ]Þð^¼wävMÿº4{Wç&}äŃÕôqÛ4P_ ñÜØç\ ®à‹5ÂøÛ¯9h'xbà€Wà? 4æ¨9&QA”÷åG¬4õ[?ª_[[~}Š?ÓÓÀýÁ éæ7|›Ðí`þ'õ}ß=phX~Xvêa„Àá[IøGÓ«7,èo¾‰¸‡Óaÿÿö¿~øDœ}Ô®Þÿ3}>Dá²\wV«&oßñà?RˆƒÿÔLæ–¤ï”Õkå›6‘އù¾£N©uC²Õc—YBCqqY¸Ót^Ök5WWànQ¤ ©ì™ Xæ\·¤´“„KEÖ\a*ùœŸ&]Çbe ]BéhÂ!Äzœè$É Š…šškt…)/$vE`ä!Õ¶L·îvô/¦ƒú#kEÜ^–¢4“šUÓ-­“OhߨR<ùæP®ïìãÈ .‰Úü™¶÷λ¨Î,›”œ³[Š—™S*óÙ ËÆ ]uƒŽå|&£^)è[Õ©„lEß´4tºQZ÷CwuiUS#1µ”Ád$'taKI6È%Ç1,Ó’œ?ŠùB1»,v›ÃÓâ¶ëBq'ÂS/$¹~¾W‡Ý~iji´GyÆ4Cl0TAr¨S½ÓB  rF¤~Hm§¬ÖP°@ª*«tׄXú‚•싯g¹E“ºP^c™OÞhYÕ™^+Û´F×êýÑÄœqTa†Ü*Ys¢&Þ®Õ4Ê´ìkR¡™LM©0€Ò¢‰ÅèZ‘„\é˜J ÓĤ(¢øÒ¦ ¥ÉŒ„"ÅX2AÀD D¬ë1v ´JTh¨Ãú»Ë[Å2Õˆ%§Sa^ƒ¶6¥!5"L­[M¤û(ŽYúÃΦ+1øÎX•” ¦SËCZeHkŸÂîÊh–w÷ð>ÚXÄüÞ~¹ª)¹Óðåógà^J—· Á!}‹k•oá”!)ýÒ™MzßL¡=üdKüGêñàkË·ÊÃý7˜¼ßPû®t„þQ?†; à[-©Ÿ‹nzã{ ýÛ÷üÓçýµ$áÏÝD ôì 0úoç†îûŽ_-Vÿبã͈g‰ŸîáÆóCGýƒû±8ì×öLjŒgšÝÝ~wá¶…6ï ƒltÀmϹìK—ªuEëD· Jy¨ç^]ÎS›’áCý9³ÊŸs6^ýc¬«k§áõ¦?æ['º‡1~r²/ƒ ¥þ]<€î=Y“†Í„Ùê/O¿å{¸œO¹ß‘²Ÿíü.”ó†A¹(â »èñP[‘]£´µ2×0ºš„î ·'›£jŒ)"Ń(Ù•|’eA×¢Ʋ“|_y¦t€†J´De"ƒ \kr(fqîû$9æìUä.pNifÕƒÌ%DuýþÙè3á±sÔB)%%™‚¥"¡ëô¶-’‘ä4üR¢òõ‚JçKšæJÙ‡ýÙf­#·“ ¼d¿Y×NOyÙ…=¨¼’±âÈ3'h{æÖ8QWÑ»‰œêò¨änTFÛF íY§ò ©ÔËj ‹(A0«ÙÕýÞAÔØ¿øÓa—ÇC Ó³,*"5aIK|5Í\kž\I4•L À%p:¼j–Yœ?®Ý:½]™óµ58dˆÅ+…Lº•¨ÄAHë#DœctîÈN2›¶D7l/8°YRH{z½Ÿ±&ȳpQ¦‚58³‚²l6µ b+e–Rê(”ê9B¶…I€ªÊà’e¥˜»RÕ\ªäZ¡6­–ÊbEnu#Q—ââa©²W"Ž’³ÉM à€®mßÛA™k”Œ)ÒF\˜wÞ¶ÖU_Úñ³–KM” ßçÈù÷ܪ9²ÚIW€ñÄKÅEƒ‰÷þ׃ùoÓùÿ¹…GkPpsµË¿»¾/_mÀž/€QCŒ—.xîÓ|â2!<¼¾qÛG1ò|…cb Û ùlü­› ½UíM~ž¾9®`b€¸~7¤ÔŸ.Q¨ÿ޵å›~¿áZ¿k*÷®ËýW éÜ#~Þi`õ#ý—á{j÷Ó®Hþ)ÃÓ¯ÅSî&F(/àyü^ìü#Ÿµy«Ú%0(^¼ÙÖpóõvO¹]^îáP¿´‡æÑ¯.¯Š²-,½†8Áá²…h¡¿‚¾‰JË$¡È‹a5S—rç‚9ƒê„pÆHW9ŸnË…ãv%[™N à2Ï ¶`{üÿi{³Í®ìJlŸy¸Ó7EDÁä¤RI¥RuC²[0`øÍü§ðC£Ý-¡­rQTY¬d023â›îxæsü™d&™YdIåû/nÜ{?`í»×^{-ÞåJÃŽ"ÿìn¯Ñ½·èP£C¸ôתp»ÉOB¡CÂCŠºçYÐ…íæÙNÙM-gTŽkTŸ”0þ‰`vÊjeïwés5ïÊ]¶¿¬ªq~JUÕiË¢‰£X£(‰5dµ’lVDñ¸ ×[Äb±Ë¢— iJ^`<3¢;L¡ïi/I!˜ºHÏ q:-czH&…nuÈt‰økNUs…S•ćPñÕvÓ´Z$XŽ }.ÄâBW@$ÇPlŒ½3ÈÐ%yðØøÁL4Õ ¤jÛU×’òÿáLoŸÏaŒ¶Ì*Ìίš†®x xü•y¤1’ÆçR2­Ñ• Hqv"š9&B Z øR|’UÀ0—¢)H+‚(F‚¢‚£ €2G?*<L ×€q&{*cDðì" ¢yQM&¡…3` {F?¹S&É Fv NÓx¿LpÞ0P$âcHÎ|løý‚Îh`8'Õ ¼ÿôÊsCy§æ*­¶8]ßÕ7¶¬÷'-{°ðqzr×ÑË¿ÌØ{xá>¿FÕ© {³±0>íÑ-ÌŸäüè֛°·Oìú†Ã÷=¶üò¶=ÏO§ÖÙ;(/~ˆhË;)õüNŽýM·T b§ß•'ñÞÝ‚ï멾ýa|}ÖŸ<,ø÷׆?Îjù¹ÿ6ô7þû͇xÛbÏß¼$©f€-p ¾@O¿÷E=„^t&l¿8Žmú—ßæ†z×К‡ðþúkzb tƒ*ø‹õjlµ¬H^¬Šö?-HåE”†! ’=’"1)³Z=T”¦ë~òvU†®ÞÌ6Û8Ðp²§Ö¤ÝÞØí.§ýÝø·„.²¿eä˶\1[µÕÏ5ƒ?u2æZO¢Ä²[·®¤ÇÀd ”JF0•ôÙ&]TÆsáCLÉN OHÜ%\,ΊEÞao}~¼ˆ©ÔÈ= Z-+ê9>ùu,áX ‰™Å\žpì +K¶“ Goo0µCÓb¸‡Kyu×4HT–’&â{,$&º F;”ÝŠ B§Т¥¯?„´©©ÅXF£2ÄSay9ÜsIlx !zfòT[ì‡Øâº¥MÅ}‚л2Ñä‰õfÌ硸'»õwø²ó;D&lYœóG!¡ä7(¯¨BE5ƒ\L1Ùs˜-g Ñ…†Ð»„c’*Ÿíœ½Ž%T,$£O PyÞ TµÖ ®Ç©Ç$p8A²B¸aÅý<+FU2sÎK6ÇzÌ”òDò’Ó„­P‘®PV@•Æ—Z—µ>ª¼T-¬¤_E¾ê©¸1Å~aÌ]ŠtËÔúª “Ý\œá SÖ‰Ò¦Žˆ)ÍŠ¥s )ú€2ÓÊAåý(aÜŒcÈ#H… fa.a_Qæ§d2>•ì Js&(ƒÄ9•H}”)D ö™D÷iœÇО1käõ’«ÅÉÞ;ÀÁ•Œ‹»+¸ƒceŠMT  õ©7²±à;±íoKø`¢ A0õÉÅOáØå½xA?©p÷ó ~F­ˆÃ!#œ¿¾\qò±Gî¾>Áñ>¡ÚÁý%>Þó™{,go;5œ(À ·‡ê-c%xWÁh¿}Ý&°çá‡Sÿî÷yóvÞ}þ7Îð)a8…w›ŸÎñ¿»F5?i‰ãÏÂ)};‡y)Hòߟ£×?%ú[Ø8ˆ¿~s CÄ7›¯åÛñwpMàf~e†ÅA½‘Ø·ÀQxi{7oʸ!ö¿Xí¶©½Nö±‡ùÔ/çû_ˆããH5ûRc­Ú§=hÍ”© GëËMž=^NxLèsðƒ9{'>xÀøNRa5 dA±½¤4arÿøã3«·ÇFˆhù©ÖµBÿxˆ~ŠåÐ[‘/Á~¬‚Ö§rúACnñ|+ Çùïd¿Í©ªiJvìùì*NµgÕ¦%¶iÄ#.*ù¬šªIxUü6Z$90,Ñ¢rå¸å¾–@í:%„|ªE1õ’Þ• Ç ˜‘Î¥óÔ@œÊ…Ô™›CA”Â]AÁP<ÑÒ' ~Ji†8(õ„ñ fPâ#…—;7>6CzL2c0þ¦Ïí–ëLÊu$å:åg8Ç+Ì ©(«áKw˜ço œè¶ƒ-‰ ÇCLû‚‡ÓDÇÙ¼8 =B¼òBjÃÏNù<’óÓt¤ÒKìúìÙ”‡>ùžq±â°^m.ÖpQi%E<±äˆp¤6Ȥyò”¥D£;Aöžœ#j¤pÛÕÃéjSTÕËÜ%±òˆN陯õ‹û]ËZL€¥hÇ vªjyUÚN2V­q+X¡Ñ"ð ¢ XŽ”—‚q¤Ì¤¼„Ä‚OuÆ(ÓL-u%hÂ.¹ÆGa¤3ZHÄÁLeá(„bñ1Û #ÅçCÆ—Ih Ĩʼnƒ›Ó5ÎÍLù&}†åŽŠ+Šp 󢘯áùQ ‚þî@Q0Ìô_(¨ˆ ”ánûFŽ•ÿÅéXÄ:Wi°Pàð iýª†Qõ«Wñg§³þ »3/Î|åýËìΗÓ<ÀË€/øø dÿ&³_Pàç74 @ó Õ9¤kH7é[¬[¨×ÚþRëÃûÁ=½Q¿Ð-þ§ ¨ßq ï«?-vîÏèÑýéë"øºÐ½¬NäîuÓT¿W’åÁ9ðâM{t€Fˆù-¾l äK_ÜÍ|ç'€_þÀ¿Ò€õ=ÜB€‘;}W˜¶5I(ùhq²«½P|íhÂ2ƒÙ—sz±L¹ì.­èÇfÐQEiǰry)U¢ÔçæÙ]zºûb3UÿêXãýªÑµJp¤iÝ€Rè–¨Z|¨Ú:Œñ|¾½yŸz2yyŸ,bK-s +®˜?ÀD)ïÚ•6 `šøÂ%Q’#’²ð‘§ˆ²wù”êH‘©Å ÷ŒÔöÌ8`ýB&Y9-pB)’hÍ«ªŽ`å±48Gpv™¢úÈSL ±[” ŽÄ’B’Y6úö!Zíh‚ÌôðaÃÙ= îs8÷ü‰Oâ cNKJ£I&©Þ”œ)–‰gÌ âœ&–K®s.$dìɳ¤(a¸Â…Ø€‚‹cˆ %ÀYI¤Ê8L„ÅàEÌ!F‘Ïœêl˜Yž p†FŒF …Ð$9-$¥Š B0ÉʃMÉÆªgWYs_qóµkÎÔfÁG­3\ ESrqì%Ãx—‚ïÆDOài>‡Ýõʬk€»Ž«©\ÛýŽÍŸUÀ |z _üü¡L«*ýj5·G(êásº½+íÿe¥IwÀ¼™œ"p×ËknùÞƒ{Ig€à$k¸žà&‚XÕpÝÁ óô »íK«%õR[Ä$$¡p@‡o9¢_€þÞ3HïHM~sìì< ê{Üп{*œ~¢êÏV^º·ú†×-M ¯žØý¹nþ5<ûîa½Ì¤ˆéQ3ð øs†» ¯ýL8`ÙøG€Ãë¼Ï×ûÛÈ2?Ÿ ž"x$!­îN æÏˆîobÓ/›ŸÓ‹.€øE™/õ²«bG˜L4yëRÉ ì§šš`hŽÕ’ ÚDÝN]¢èÞТB-ÊdxP­8½Î‹^ƒ5Þˆý7ì“C~ä¬óø÷kÓÔ@~4Qi‚ ‚ºÃõúäWŒsŽVd…”°mjÎFîm}FÛ ÙÐUþ=¾zBæ‹Â’I¬–¶®õ¡ÈŸcޱ—u!Êrš sS»¢d•Jîýšh‘DƒAZÊHÚ¢  ·Yj†1rˆ[ÍP2À'“§%×€ àd¦¤ž÷SY&GaªhT¸¡T 8y cÍŃN?¬ÚØñ/Rì"t$‘À0‰O¹û’MÊkX<øå žÜeIš-R—¾˜}~äqv–ÄQTB`y¦º—•Œ°ãÒCEH‹tHÕq±'û|ï~'ñ#„UzÊÊØþ.#œIÁš¥Tjµª/äååcÕÁ _ Ïþpÿߦœ>ʂر®>´”%Ps?ø{‘Ié’%çh„È(buÖÚåÑ¥#Dœ"à0’ùR£Æ ‚&±vBQ‘KP«‡-×!j)š8d/•ny…·¬Ø'GKÓ©T—M®TÕ),¨@Ñ{fœ¬1ù„9 ÙÁxoŸßøÓ «Ÿgœ§ÇÅŸûIÊÚ‚“®ZÏqKBD"M©ŽÅ—áŒJ¡®8, ‹Ï¡Èl„¦D’#@´dQ’, 'ð)¬êL(`R™Jì€ÂtX3¦.‰#§Iá¸[•gÛl¿Ðó7€ÏSº.ñšƒ®ˆÄ„ü¡®aX†¨êɧ±àÏÿúŠƒò`/NÓÍi‹BzþéŒþzeHAúÒú»ð‰™~¶ ÝÇ<>ÒŸ¥ñ޾Œ5w x GØ ˆ(H¤–Å­ LÙEÑ:‚$"¼»ëv§ê|É‹5gÏ1ò×Å*E¿:eSÎUô)uJN :1´DÂ1àB !QJÒDÎ (dÆáÊÅ-[SÈ€Ê9ñ•KÏï'bïG6á ÷Bü¾]UšéJØ9ô'‰¿æ•jµbå ø)¦Þ³ìsãFå*Ø}ŸG· >>ÓçxÛ–4Z‘cz¤z$Ÿ2rºˆIgÏU0# ‡Ô'¿7ç;÷ÕSÔ=¬È;ÑHÕÕ鯣Ø_±iAbí•ZJÊ$E¥èÕ¼jtÓVRP5J<ÛŽa@%t,]¯ë‹"Ý'oUœÖ—<×:†0fElM(*1û $J9e9Ö¢æIxàLB@–Y‘y·âº«‡íŠ‹ÊD8{©Ø!N!,3žCι0@VÀÙ$€TYÇÅPQÚ f)7Ñ‘€h Ö¦9ŽT ˜Æ\!×5æSt{e7;ŠAžljOɾ¸sMšê‚hhDÖØ× , '&—†˜3êK¡8ùèKBàrjJ¿Àdp<ß ¸B^‘Ù; (™é¥˜èKA³å)(U)² ÑÍÞöf¼'§¹²t$‰l×mY²g¯­ëÂ>ÇõL×á3J¯xý3šWm%%òA|0¯5ÙèìO1ÅóHÎbs¤ØQÈk…9F,8<¢ÍþâDÞ‰'èAlš„ð´²ß¸óÏÏù m• ¾þÀã?žŽpܘë}uÈ£8Ï41\Ü@ë@ùuã.7ë‹çk¦»‹ñ¤á4ÂI^7ÌÜ`àAßĆ—*O€¯!\øït?/÷v—·ˆýþíŽ3¸ÖpÓ_qô&pÿtøæðÒlüe\‚ùÑw÷ÓŸ:·øÓý”Ô5Иý[8¥oïa@v·_¼›ãÞ,kü>½CLæ{8…o³ô¾#ÕÞ²_ÿ¡,`x¹;þ;€ŠCãÅÐD;œN`–ÄÍ„ª£)œD;ÝUµPáL…Hü*&ª¨ÓíóVÞ7P'RAþï/²-ò «UK¤æ8˜–F äýoÊÙ|F*8¸t 9½œW%U•­rõBøÚ›ÈÏ`S]ÁŠÄˆˆ+ šx›$L…qÏäþñòdPô®û0· Ï ®Ï‘œrT•S¢Ò %fkVº'…AÚñ=A%(7U %š 6ŠD9Y’ `\tœ £‚GгgŽ¢ Èf }á¬`]*‚yâcêx8SáBçF”uà‡TÀçÑ.Þ™–»l“J8œ‰3&º¼¾å¯48N`¼Ä«¥#¶A%œp öAFR¶Æ…e.Ù’ü¸L±‡of;•^£ºÊCy(VŒ~|I°Î%0‰CÏàgU¯IÝfÙ©èL9PÅ(#ÈÇâ½ °ü&ëJ XyÂü£›],vÑáRzGŒC³°ýˆçgL¬Š²3Ã4Eœm %94ÕaaÈ‘XPoÆóÉÞßò1Ö~u¶Ø¯D\U¨Ò¬Ïñ0è–¶Ñé/Bi^¨Þ<àݵ "…žc±Ö¹¤iD¿=‡vZ¨[;å\·'O&´Ú•Ç LÍèг»e®æçqâ+²tÕúžá¯úòŸ„ =ØøÊƒ€[ ˆ÷ AÝÀàÁ8n]K6@*0–{ôr,ùÝ,ºè€|ñü]Àð Ü|ûR+3Øåsß73|™oÂ[‰Íþ] k?ªq¢¾€áÏB:ý;÷¢Ñ ü[…Á«üø÷ßàþŽéùှñ¾õ¼åñ _ÿú/Ý[{ïT’½ñ{ `_Iȯõ醎þLÀr°œ~\%xkëê¯"í&f6Hos)“2 ƒTz…7˜¥‚Õľ9Å'sô’ô¶+ü°)˜±ä²uq6®ñwÏ¡nD:ÈÿCG·{~ëTˆüûI¸õ.ìž& quÖçöa$U10YÊ )x_¤˜¿ŽQ\<¼Û ÿY—ž'¼šÌÇ}1ÿٌϚ5®™BÔ@›¥¨GGTL.ç=ÍÏBe>ñ¯ã²›$ƒ&Sew”ÈÌtæ¡H “’P®0âX”Œfƒ›‹/ÜÅSpƒµÀaŒ94Lcf&Û8 :ËŠÏøŠ&K»f£HÎ9{WH('JD&ãîz>¡úPè¯ö÷>Ov ·i¥ÕÚÓ-Ǹ+K‰65Œ ¹„‚]Ÿ‰óSè^xsó‹|¾¦qw âw6ßãª@¡Pb‹ èqtvɘšR‘J·!rJ;@ºˆóÑݧi*ý É+=Æãùî7ÒÏ"Î;µÚªuC '–ÍþCZ+nRy¥h[«VL%‡RŠSR§™17ÒYÊg­FÅvn1o¸fB;&bˆVÀöX²­bÈlI6Ää!“3lÔ‚ò’Ñ0™oòóIO‰@ô\.þpšÑÞà—/Éýáëœ[Ð Á„… “ é1\!v¹€¾ä»u¥[HU4j¤²j¤ZqBP1…x 6•%¸ñ4Yö‘¨ºÁlsêãÑŸPc0),ÇŒs(¥¶[Æ99#'Ž6)ÔÅeŠ #iާB: ‰i(öÙ~¶ƒÍ#KXŽKªkíÔãf])•5…©ÉËÜfQuóÒærÛÔqÛ˜ŽKÁFM0?øå÷’f.ëº,&D\ëÕµ$ÝŽUõñjØ•´¡àâb‡ç=vÂ,WaÅë{Ǿ<,ð<@¨6`8Áà9DÁóµ”7•÷ç—>ÚÙ÷pƒÁgÓ‡›÷n¤ì|á^’äɃyÃ95˜=Èómè™}%¶Yÿ1ÕÍ ñUÄõO—¥þÑã×ïÀó}l}'î¯Ì õ߿߰¼k•ïÇîáË~é LÏØ¿¦Ìü;W?(x k ¯ ¦ÓÖLÏo.¾8Â|o ,š!Rb¹'lT¸Á'Žg>Ør¹…þ~)4ÄiÀ—<ÂÅ\Û§”íIõ—ôáãôit1kwH“;§aï©%5Zÿ/Æ1ú­3µ#?ï· £€œOøoQ‰„¿ŸÀ]…ok¼ßÓ¢;nóü4#˜|à T]w–4“$µœ–ŒÈ”l‚`–2ž à .të4–û }B=–Ñmš¸TìY¡· ûJÿ@¡¦ž»d)Š,ö S¢Â.¸ ¡mij Äð’󼨓Kýœf°&{"Ö6_a×AzÎÐqí ®þw„?É3pü\ë•VSa2÷y)¹œM±C ZH!ÓSfón†…œf; lX®[SÑmïbëW@'#'¹æ´yÊRYÓÅÃ…*† ê:õ›ïùRúck]ŸXº«Ï³ pS7RÔ!ónDê1‡%ÎÎ$b¢ Õ˜å‹#Š é1²u.¨˜‚±) å*å&1ÐñÌ8â§°.cÊ*á- ¼ïÇdÕ@+F&ÙwùNÊ@¥–›'²É)•ƒIp"5õ—ÌpŠÄK¨!"ˆi®†H&;¬1¢ŠªE8ô³[îïsEq š—È3bWTä°AŽ›£†¤(»hW‘·œ1Á¸"Ø3›ŠªëT­)MÔ[6 æfb Ö;(áÞ.‡ãqèûŽŒ›ô˜Ü¿(.ŸdÃVNÅu@¦/Ù#*"â…‘T‚,•# Ð*ŽMÙ.V|&eª¨/»<"ç‰V3]A1j¥”3W æl[æž2ŸqƒIIQ”1CA®ªÜ¸‘Ÿ_|†>yþ——Œéz"‰ïÈü\×ÛûŽùeØÇ1 ë“Uá“´wt\Ø‹Ó~ž}âàõ%lÿyðøùnýb½Ö3fð‡—SÉôh®vÀƒ·oh^W‡o×Óî?øâ5žæ×a6}çýoýÿiGo~’õ=ÿô¥¶*ý8¥5@€ß"ýƒåüã²ßð^±•c³áÕ]]88={µØ}z÷£â€ü·ÕKc†Öà·€Ãþ®ƒ˜FØ% ^$Ë“5hHæ‹Û½Íù?1 ›¾–nðç(QO1 H.V;&v8¨Ï?P»ywQ.$jiX¦z¶Y-BÕð±²2› !!LK‡ÍÖ]?‘m}÷ðÐ4ò“F°ø‰?ÉÜžóòÀˆÝ9óá3Âw¹4¨n†E¸iÏÓ)šº¬w´åÕœ–¼sa[\w²ˆs Á„p Ôcvé‚'[{¼- 8ž`Æá<ð©c–8¡Œ UÆÏO:Y($D÷‘C’ðx¼ÊIU»"fÿÚô÷‘=Hº9cÜÅaä[–%$±BcÖe~£º¤K¹ …Š–=ézÎ_ÄÍËéòž‰aïÌW4>^*2Ï ðU§4?‰i±h÷—ò/´œ”!r—÷^ø`QºU ¥;ßÕÓªÜrïªô·;.jïP<ù®™Ù¥1†QD‚rDU([TaíóHÊ×>nìø©yt›r€VYˆ)‹¶À½š÷¨´¡\E´Ò²hl‰÷x ç3¡§)7c¤0•Ä˱°;Ú<¡m+»¨µ+>Ù½1B3c¡8`ŸIX¼G³enj0µ¥Ö$c~áDÀ¢9Lwásé!-í–ÒJy$siáQL…E!…”ˆa*™N´ÊÏ«€ æ‰*)ð±óaDÜðâ4|sgOÄßÃi2è+‹ë@ò ðäþ9©I"<¡<ÍMt+5 í½ržW>µ UEg‡8h#%¤¢(úÀ–¹Ë²r 2Ëì¢¶Ô %÷½‹rÒJ^cL´._jd‰`Ç š#Üs…‰(L§ª’:EC‚W¹ºÚn¾V[hšèêî$~åyÜ?ê’2É„dPÁë^,ھ̰œ†ñW06xµËТ¹¦¾„H×É=‚Ï£öÏ€àßýÊL5 jùzm™Âwñ1ûïc| ð{ÿ2̆Á:€ý²#yƒáïœøwq9@þ¡—Æ0V4¯¼$îN?Ñ©é@MÿØ ‚þ)lÔ ¿1ÓxKòõÝ_J}Ÿýéâªïî­»º¥ãúêýþTÜ5T¯Ê£PÈWбÀ1¿¾ÒÎ4.4ˆùà |' ÿñ›0¯=5ç°³ü.»© _ùƒœ»FÿßÇù$V·Xo1~BcòÈ›CNz <çîì RL‰õ›óÅ2>tD/>ÁHÂ颥²²»t“ðú^ªcê.áQ7HÎÞ·!0ö£Muõ³på½ô< ›:o¨õŽ~}×´‡üù§ÒéîUC,¿¬†¼ Ÿ jÚš‚lY‚Ü÷ܧL)&…††6iëE)”ðv±@ æÓïN@W¨dQTŽ.xŸì¹àwU…I‡}jñ–ÉŽw¸’½ý?§YE¬ )¨êª™0X!ª+( €²ónFKrW²(YßRðêÐ+Í1T’œb>ˆû9h=gNÄGŠY^Tá\´LÊí„M*¡TՓ飊mW|!ðÛtÕ‚Mu f¿0 ûL¬tH¿q¹A‰/‘$Sߺ!„³ge^’¤7šF¦%Ù\|€rKÑÈ!èäöKñXÇr0•ÑÅÖÅÚí=]#YGK´bÄ–ºX9cX ·tý‰J¬6e2bK¦g¢Ar‹‹Á¶ŸÍdÎÏ5xY?fÕ¦ÀI ¬ë9 yIÄ G( ÎÒ ’ÚĵGç‚Y‰ ¢J²Ž+K®RŽ$§L)cZÜV]ƒçŠ W<áX0)·)"7ä9õýápÜ—IŸ¼wþ7ÓÐLþè­'·–Ô×éb"0#YU\ëŠjUq±Žz·dé¹ )4ËÂ1âcÆ.) ›tñ¹ØDR) ìNI¬VÈãá…·ùv³ Š’lJaŒok<ñmº¿‰G÷lœŸyW¯øîêºMäR¼Kê6QKsÅùÿÌs;¡îÄ?QÝ— Û–*@a˜Æó&œû€ «’?ô8øxÀ^ä¶/ކRÖ:ÌaB`ׯ–¡`  â0¼z›Œà¸@^Àó÷8,¯%˜/» p^{×w <hŒC¤?êÀñ¶ˆ(þ}Ñkœ\½Ûï( [ ðõO€ÞñÏ3‹öïâÈNÝ÷™¬óû,¾ÿ]âªù‡+€i îô–Çè_š“8€Û×ONLæíáv|Õ†x5Ü xfZ¤×°B¿'Û¨»¥P¿üýp‹Ó-²~·â 0÷àv‡3zŠHGyºLb]ÈóE™¥U½h.õ…H7³ãñÎÙépñ‰¬p›žéóÿ˜žêç“\a ª¸r9dºò" qÝo?Rùò ÅÏI|åÐÞڟϤ¹‘0é»ÃFÇVØŠDÐ0¸¥=cÆG8dçÁû2ÄTÞ`ÒCŒIƲ.±Â4`A=—ŒÔè9Æ¥ÌÌAy[)±ØHqQ_±…H˺Tr'ÂæÎÕœ ŠS"ʉ֒(®)B(yæC8–Þf‰3¡`Š]Æû|-0æ—‚[Yx¨3þoˆC &ω.,´E6;ÅíBy®¨ÇñCV k&cÁ—)¹Ad9€U´¿•òrê–ãÿ”f—®WgDg#倌<ª\ØzÇ&LhI©V‘o Dd\ëŒG\*ªN£¢äQÐìyq3÷‰±¼=èѸ*(3þ‘Á˜äÇØiš]0‹?»œhÒ(D¼!D•Ԧ蟗Xs’n44¹ÈÙem“+1fbË#–PHñŠ›pô¡¤Ò¥¹^)-p]•ˆ–qÁÇÁg …¦BHdID<âxQÀ! cÉ0Ù0çÞU‰¡€#|”1™»¬:Ù™>®á _m죟Ä= °’+൓m‰¨ÏS3 N’ºâÎÞDìZé]»8Q7×Öœ§LœiÈ~Êð4¸0]r#º†¬[RÉÖ ¶¸b_Äùî˜& AÈ+QW6‰à[ÚaF‡Ò˜°QCíƒ÷ÞlÁ'uhRP¨—ű!Ïüh¬ÿ™>šÇê8‰ó¿œrôÌ—P¯ïØéÄ!¼ –`û 8ä¿ëŽ{8¿4\àó ’øìµ^ÿ{Û¾'ßšJ€ý·Xø€XÃç@àôNo¡äßÓaü@ËD_¡ö{G¼Þ™\ô§§ôÇõòy¯ß97þ‘Cä— Þ†w3”_,3€øêÛ}¯VÛœQˆ "T ßÝz½ß<†2Ãù‹øuñ›¥ÎGN>Å\ z[ÁWéç-yZ¾ŠÒíðW]Êr¿г•Dü‚ø  ƒÈKËx•¹ÕãmZW×37CÝ:³@MŸUB'7^,Ð);7zXú|®í¯A¬) ž)ŽAÊø9ûŒw±.¥ævàk|™8²âñ‘ Ešc2ó0Œ cæa¤ÄÅ%œ]<™~¨Íc7Løf_× :Œ5ýÐ`Æ!W;*¦:T"‚€*ÞSH ¦[}µœ²t¬êð/e®ëÀ)X@:J<&Å*³ð8 ƧH¦6@8wËïýT–°õ„cܵÄqE‚-XŠz'ÊBèšáHAåp‰ÝS$~ÏÕ¬B±I'¹Æ'2ˆÙ¬ž/qñåÑœ§¨˜Yí>%‹(^»#³ã²¸gÏÅà úr§ýö®l’㜣¬ YKÄê,H¦s.Yhò$mФÀ³uÖxé ¤dp!„[ÎP®8Ž$Yår_„÷9” ÏB\óT!%´æR¶‚íf|¥PMü¹ÄÅå»…&JeN• Rí3Ùg„€´2(%\"Æ Ë™&òر+-¶’¯|BÖØýRPî5ϺeH¶€Ǭ0"Aˆ(æª_SÀ8;¬¢¼BÙ;8Ïiž{ðϾë8!Û8ço >Ìb4ÎSÆÆÊO~hèDJ+‘)±lPÅ0(dœ\X†¹KXàjS ¤ÒÏnæPQr!A¨DxÌ—/<&™e[Üže[„|5!¹M›KVQÒÞµè™N§ÌB³ ‰«ÈÀZ;ˆË^'kÎ'À…dÇÆ¹Æ~ù1óWþÿvñá|þ›†I±Ó˜ÿ2§Iò²ž¬ºˆÕ£¯nå£Ån(®7Áã|‚G;h IDAT0À3ªI@'ˆl™ß¹ž€ßÂðï¦æ_ÍïÔ뿆l0¼\ºzõ烕°ø9QÜÀçï„Ö—RÎïEÝ7®Êƒý[½Ÿyðcpýgõèþ±&@äo‘ÿ„½XÞÎþåõ·/ƒôN?m”€•ýê7 ’á:Ée‘+@ÓîÙÀe«â7(w~eÄÿJë iùh\ˆ,‹Xõ2~ý-m`<²õJ}Æϸl¯2)&[XÕ´ª‹MÈi (¡ž¦«¿zþð¯N¹¡Ž=Èûfü<ª«œe§ózU>Ø|)ß“G¨‚—г‡nÍ[\ØNÎíXîK9žpÕFpCœ0,šR¦˜Ï3Â\–¶‹µÎÄ»°àÿ>Âã -ÿ‡•Ï—˜ÅœwÒp\p& {’ £%®ÄÐ7(”4»Èš§ ’ ÊÆGK6€–C"Â1[[ߘ* ž-3,°2œ¤œsa3WY}¨Ôeæ}À ³ªäLhÉâCçÿ|ÈýÞoyUÕº¬Å“Ì4…È…D¨Êª¸8ó¿dÚ¸„PD<ß6X8tD#ÔTì7¡¾ˆìrÑü€~MÕZµZëÙV Ö“Õb˜ÛWø¼xP §Œ”+HZŒ€Ï  ËÒ#dÈ9É+ÕEna"RÒDÆÌ“hŸå…Vä3*ºD))¿ x#Õ^K„ÚhžOs6¸Ô Èå.¹#”HéKÌÞÇÙR‰9‹â%Å9T-nÔpŸâ‘ƒˆuÖÈ7ºš ޤ‡³Ñ¼²¬Á ?4{R¸FÀ¬Tœ£ˆ­ ö¸ŒeöG]«»¼åaÞ&ÚñÉÞhÓr&z¬á…œ3 ã)„b ª%dÁ2/)ÈŽ`{.k´eŠzHYˆpz¥!’Í„:MîùÞÚóXŽ$­âDñÌË’£‹±¡éªbj+/Ý£‰q±;oŸzröçýpÚI­2¬Æ;LO’tŒ^î¿ÑMsï’I¢ú„îdüû“Yß­Ôuc/7k•¡Ù©Do“ï5â„kzæ°÷€4ÀƒG`ÿó?|ÕŒðH€ä_`¸BpU]næUøüW듯úWƒM @†÷BèF¸xÓÕuúîzŠ7PAúVËô–ÉÐË0Ñ`®Á‡“ 0òz’úâ[nï»DÌ›X÷Ç6$þ¨ oª£~¤ o²cò'˜,-ß=}PÁ«à¦×­ÃW=…aNæaøN‚[Þ˧% ¾9þã«Õ /ð\I¿.ŸTèW—ß<–ºhM5‰àE¾ØÊªáå(ûfJUpèx:D0‘2Z`,¤$‚Q RÓ¬ ¤uñáªdŠ]bÈP†QŒðÕ.è«n™ëy þÀÝ}}&îôúäðå# ]©í¢ ‚Æ\˜¸Ô Pþ8ùÍ™;…ÿëÆ¿øíÂFxسíâ€×4³‘ÌDjÇxáuF®D“° Äý¾Ê? 5&$‰{1šœ÷e•UÐŒ  ’$BF®©a?†¥/å•ÀU'tË9Éi¥Pg8v‰u†TÉŒJ§Ìx†,:{{*óÀ§\n±­PÎÓH ÎÍÌ0&ˆS)“L©2¦žÎgøÚí½¾¨¢àfÈn·2fãñ­°þÿx{³I®4Kì»ûb‹o±e2¸Éîêî©îé.5f @úú­0FÀh€z_ÉJ’‘‘±¸»¹­w¿W™If2™EVÕHöán››ç»ßrÎYy™¿:†2ȧôï8þ l|]Ä›Óêâׯ otýq¡`yvâ£BŸP¾Ý±K8к#$²´]î+¢Þ–¼ Ù ½ y´Ì>tØáÙ%wHS·6—ï.HÙXG"Á¨"¸Í*rfPUŽùH’…Ä#Þd!`M1V…\â©gS@ aÁPŒ8¹R€b,¨4%W<¢%¦Œ/¸i‰hI2÷ž/…'[ ÁI7GÓg9G’Bå-F¸ìTi9 C.„I±A€T $S±˜ óìšúǾ?=— ²‚,3æ†ù0¥’¢ˆI•òÇŒ‹ãÝ¢CiW]¥è–¢TbqÞLn¦)’8#tèwDg,‹× AÐP\ˆÎ¼¶M•[¡)­‚__ æÅc‡¿zöŸP[ø‹œýœ ü+@|~kH)h Ë÷—¶ôÞѹø¯O_£åËíêM‘¡À€\/¯ê1¯ $øu„xoHxßš\C¸ùÁþ;ymÂÌÿÿÐaEà_þâ›÷Ćï™~Cæû¢þ7Àß~/kw'0oU™Aàkðà 6/ß×£O"y™=|€6þˬþürã>²Z§á ³ÚOÛ|‘NiÓºž* Ôí|{Ê?Ýù3Ù@Î’É Ù+è(«]$¦Û£u§øa™e Øû™§ñ¹* u¢$•¿‰ãzÈ*áÐ XìTóaýᦾšp:J$Úˆ¤g)f½C•ïÃÉÌ™7Èòà˜Û¨JUd‚TI’}2.‡Œ '»€EØ‘@%B>‰A ¥5K{·8×EÄ v±Hbg68-ÚéSUÌZÑ`ŽXHØ+Õ2­y¢ÑfÀHýRFcÓ!ïÑô˜\ªi—ÂiÉ>'W‚#žô)1 E¤2¢ÐFœón'ëFIqEÆ#&aá¶$–½vdÙ$ŠÐðÑ™Hr˜Ls ˆP"[®´F˜Ö“%\´IDu¥øF ¿)±r¥ÙÇœ½A9ʘÞÒMÅ,i†.ßOþ÷ˆÿùWQÛ6M9% àGœOÆyͽxª(ÎâPÝuñ¡¹Eº*ag-XËËܬ¦ ˆÕT,—?—åµîD»ðào†Cã]Õ9o<¹<Éõàʳ' vO.aý À €{=í†eLÎðtÀ °î»:÷›Š!·os f ÒwíŠðý¡ØoÅ„Þzx_æåß}þCƒþéU£åÕ¿üÿF‡U¬î <¾íÌöé¤÷ÏNá×Þ¢o) €{'<Æ÷/ÜgàøŒÁ¯('@ðu¸¾€l ŸÆîÛðÔdPèN’%­á\³™j¾ÇÌ:z ™MÓã؉GÄ–¬ðÀFŽ4ªÉ‚_ÛR’¨Xi«Dð<äŠÈ Á0H+– í\} ¥Ë˜àÂê|fpj0žñä«B¨W•g^ùý"„]>Ðø@JÊequ'†!2úù÷+ú×U_Îéü¯ª²Fp‘ M%ᨘãò¬¢MúPT,ӺȦ·'(y²pܧ€J`…à,`’™¿äcHw˜Œ#&ÖÈ5•¤tÅ‘‚K! ¡•–krvÞdì, +‰"g½yìQ‰ë¢q.tƒ–ÑŒ,Ïë»SfW#ïsà÷±É’´TdN—\G݈N£€óŽ~= Ø/™Öå:ýWœ>[ašèúJ8i}RÎÅHù"gŠg_ÏŠãôi®Ï±ç’x&IVh2Žç¸^—\“xæl{¥Úx EV‚øl0?í]º4d3-ö!¯ª-"ÝVâì\nÖu[WÀÂR2&L¡§ך¢º8k ÌÈbeâš%¹‡EË$ (¡‹²/]€¡,‚ ÜŽXVÈ$Œ(e Dv4,ÉûenÁî³ÜVçœ*)ZˆðÈaAºLœ5)‚Q5›-“ÌZëzœÎ¼‹Ë‰tÇåÞôñHàq#Y• vh™p¶ÎÅ#<€Z°î³4­·Eµ¼d¥ÎCvØ£ZÚ¦Šyu¿=YýèºüG\Â÷ÉÂüõœÕ·C§è÷‰ ïo\¬ÚWÖ:ñ'JÀ¾g@ e(?dÓúÚîî§ÑF^Õ’ÎN@èÃËC¿†®‚UO3â(Tþ «€@ç–¯QSñ ¹;]ëQ¡èoÛIt¦W­Ct?lwóf§oªRù¨îg›6ÆHÆén"¡SßÈ6(T RYHD5(\x.Sò˜¢ÏÒíïsÎlÿ5NFp hYÅêè·lá@þ!Æ¿2 ’½Þ;~Rÿružc÷1æç;ø\•ÿ#änJ§ëéÇLáð«]àÔx¢8gðŸšx›2ÏÁ‰ô8#J Œqà¸ZÃâ-ÅÉ¥L²™È>±GÎ+I×(^JA·ª0†A˜þô¢  •’·äî0q<ƒ\?Ę18í(±xÌ¿¤PÎýº’ȆZ¥<*ñ¥F1l¾ÚJk‘) çb`äXªËÑ®)VÎΫVf>Wrå !;Š—LîFÓúlNç­ (®g+ÎN¥¸œçȉV8"ðÉfˆ’ɼT§Å6?`â´(µuñòþgñ†ž;Ìn ÔXÞ,_=ƒîN±g Às‚€r¸“›ÿö¤v¼i>Ý.?ïî×+î..Õ:L+}•iú²ÄÑv7ãKãb˜ÅiÅtU¯Vš£),'b‹—ná…TnŽAÀdf3'¾ÕDÖØ22¯Ô;/ëEÌmå>¢·/P{Šœ´b^‘`,ƒëããçË$åê¡ái"+í/[Ë8üi@_7¨×¥‹¹Çc6 2O·b§‰ºÔ+êI.s&m,,„’³Ïä¾x‹§èÓóŠé$]BC ™Ù„„"F‚/å 3‰Ø%´œâTpÌae3Ÿ”Ñ5^S ZWTÄdu”㼌²9ìQ‰‡ŠXbݧ5æ(§ÛËtƧ-ÖËb®˜Q¸ID¤>Pd]Ó] ¾?¦=¯ùîÉØfß"ØÖP†ð4‘6¡r¬aÄ„±ZU£%ì|bg¬ã%ó™7­‚'¦pÿ•´Ï(H¤FA1/ö4”ì×!@â‰).R"ÁØ +÷\ÿßUøtƒšL[Öe$§£n<¦þþIVËâh‘ŠGaB(SUE+Ík%IŒt0zv2íìJ|4¡ŸÒ!DR2H§ÛÅ ³Š8,̉ØÃ4/ÓÞ¥…M™)ÍÅsÚ4UÛ´l”v4Ãøkò ÿ<îóÍ8Ÿ~îËêÙåryñÐgüxŽG±ì~´òvÿhÆ¿dù ¯v9J5ûØ› ß,CZú‹ÁØïñ·˜F€€ƒû T`{èMv´ÐPåÚnñ!½@¼Y9÷ßû#Âo»y€»—¦6?øõÛÝoÿžÖô›·ñ#Žr¿'¿áýп8¾™Ið÷ 2¡ïÇ‘oéÖþu÷æ'Þ&¦SÆ~IoÜíø· Þ ×àöå0¯¢&ÇðÙà©ÇxäW¾Ê‘Æ}óÉê6´·§ÚàòL”^Ýwˆ†[òÎv›õTöð…U·5˜*~ŒgïìØ£ì€g'?ÅÇ. h¹rë)_‚ýßbïFêDx5b-GZ-±¨ëHñ6½’v]K‘?_)ÿÀNÍ̵²„¬õIS¶¼Fùg„3b¯"Š>ÅÓ­toôGZú"šDg_ðŒR–Ï9ýTb(DÍ(Õèç¬È@9Ž0ÀLù$gn&1s–%ž IžÞæ°ÌÉ—¤,FS¤ÔeR0ŠwÎõǻ顳ÇuKÑyMS¾ÿ#Ú >ukí=œ»&¾{ÔvSV¶…ÄS È»£AÍÉzôT`èÁìkñië”ê ²Êc†pNç²ì§P@fJƒe0jUʘhSì˜ f.Soê ¸!W¬Y/¾ûC:ýÄš®~Ñè )_ÒÌPvRs®JÓ`„ 5!¿Z¥a÷5µÉõ4ã½™þÙÏÇÃ,¾TÅVðþÈ7 )Ûᥤ\²ypþyÜTž‰ƒ/³ªfMÆMÔ׈TÁºrR’4¹€ ™D›3ÍÊŒ²ZòÐdD£ÝŒ²õIøäíXŒ´<º0!–¼‡6çÕ8fÀ‘h»a˜sC{²(2Ìib˜Ä$‰IÃ)”ÜÏZ-uœKÙàR 3ÊIY}Î@f½”°­‰LŒØƒCþ×u›‡eÝÍÌ{èä ¹í Àu†rù†¦ÃK©Ó5ÕÛ0EH‡<:€7ƒúìoá܃36ðwí}Þ ò‡hXïç“uï"þòpÍߦ{7Jý>±á'ÓÙ¾…~ Î^‰~¼}[þ=Å¢ïÑ­öÚ§ç‡S'°zéñðzí¾xñÖ3z+0à—Ýh ãòÖ°ï%h ê9À0»ÇôžÛFÿCÊÍ„ÀGxÆÀïì.ðÉù=ÿéÖšŸTí†ú‹&ýdà0Àüô’æš\}X°épètæ£ó_V‘äÂ1Áì󃄗ŒQÁ€“–éÌGúˇ‡1±tßòO©Õ‡jÝøíªo±Ô¼lâÙÂuªr¥È…Á_¾¢BeUCÃY¼ºj¯Í7Üw²t¦ §I ­NK¢ŽYºÏ(Hdùeá2!Ž˜¤Qälr>e(.ÏØXbÉÅ‘3ŽÙºK±" ÈÙ„ÌâUš¼˜ú¯¾ô_yçUx.PÌ´ü‡Œ[cmù–2çØ¨Ÿû¹ß¦¡)ç²jG<¸Äº<Ã>ë}¾6ér9¬?í/\|Ê5S N ‘I-·ú¸?_ªIQ gê#uI`oWÒ×ø³öÐyP7 =ä—„‚¿ƒyd~úJzŸ^1F¸X¿]ÞHá]e ^@rUô|~³õõ’ ¾±Ò¯_IUÿ°íÞÖ¸Û¼‹Í|òvZþNôÎ.a‚DGØ6„ñø”éÙ¿Œ¸<å@8Ø›GT»dwóG‹ÑE×`Øׄ²~M‹tùïpÀÑ|f~vÝ Kæ;è×㺩H& Î _¶lœŽt3¸"Ó±8Ï`öJà¶’ýO IDATŽ8ÔÑ 9¯ˆ­š‘Ñ®Â(Š ´>/kì[á%"ŽžbõÀD¤&R!Ž}Áµ¥MU³°9]a-=¬¢Î+´“8/NYp›aÆ2$j“ªx¬’Pò(ÐÜò ãÆGƒÎ| pŒ“Áá)Ÿ1J­ªÈÓgˆ§9L2 Œ¨\)¢É$°%‡éØ’6d¼RhW³VšU)¾ hŒÌGÎX½YaÏ¥%˜1œ3È€^ŠH bfŽÏ{|å€{QÔ2i³næŠl*Ýð̰%c°àÞ†&TJ@¦sHñ…Á•œôI̼íÜããd–`؉¢‡š¦IÅä—Æ%Z¹œvIã"ø,æìŒfð%&’òz²ÂD¨¨Þ®.„Z3 ;Žá›A§MB³å§iwwbëšž¯–M»@B5­ˆ ¶Å,WX—1pR·€´5ËHî9žCçíó• ¥£ÖŸ>¬ÎF´êýxgÐ-Cðá=½•p¬^—X^ODE pÀ=ô7ðâ'*óß¡ßð»*ÊŽ¿G=ꕦ^ÿ}vÜk÷}X¿Š üáÛI€Ýv70x¸ƒ ÀÀ 0´3ðÑ\{Ñ)Ùå\|)Õç9|¡Á3ØØP¸yx sNûÓT?Q =OÃÊ÷}þ¬át+ù¼N’ãõBPqd3cYªÛ54r”³Û|õBøõrÙJ¡‡ÀGGVc³þkòÃêshŸZ|Qlˆ1:÷ Ãyz•4¦µdCwvÖyN.iz’9N"dWf_î¹À‚û v2U©aX‚®dëˆÃ¦Pª)EI²CW4%’ = Ö‚r¤xìÑF$ÉK¡Pf¥• hh<]| UQax’(0𩌨$ l†yÝò/fŸ7%†HE8'»çÕ›§~~âÝ?M"ÐÒF$ýJšd7¢`„$®ÓtT‘™ˆHþ«[öîðá+›u‰ø9…ÞºèÑq‰ »ÛØO>&çk'~hÁ3I7K0*c_ L p&0æ0Ýdu˜u ´Ûâ¶%k¿;M¸œ6!0ãìÓ±å˜!WAÄçŽ+†³+§cöÿ*<“—WEiœÑH™wç$ð–bd‹˜]²‚€’ïK’q4ØKT€«qTH‰)C&H®”” §ZVãp¦K¢q‹H•£ÐuU N,[n úByŠÒ‡ŒUŠW¼ÁŠ*Fר”™ÜÉxéºM£L»r’w8Vy¤9b ÆÙb&’Ji¥Ò²ÎpÁ(6hÈ»ÚÒÆÀhÁ-CI6>{ä{‹wTÒ-RqáõBQ¥´fN#¾"ËG!±XX x´9!›Îé\1ZÁ4"%¤TJö³ÅÞ]TGˆåè†.tËWç¹j]VW­kVÅ…‘4g³Ucd)q¸:;Ób‹Ž3 ñu_ç–‡-1×ãä&J7Ä Ü ^¤Â…ÚQ9Ue§FZcO+|˜ô°¨¯Ÿ_õ˜†3ÔHoÒã~ž±1ûDUÍÄ/Œû^¼Â“*ºƒ£‚`S] xobîÛp”yãs@ÀÇ×û\8à'ð/›/€¸{wðjZòîÛ´ƒ×`Û¬Nßëã^ܘWß~ˆßÉåõi–—7ñÓ-ä®ßå¤ÑŸš ¼¯!Ì@óýŸý{rèÞI¾Ï`xYž‹ßu‡Þ8|5ƒð/]Œ4¼¢\`€ÜÀ™‡ §‚®pÀà €odÕ‰0›äñŽÏþÏìa‡Éh‚ëá?°z'™ í!“u=ŠÔ©… I,‰:Ñ›?„QÀ˜ þšÎ‘ÌŸ7_ŸaΆÀn#šUå€ù¯(ù¸§Õº%—‘¤Ç r ûB¶‰µSŸ§¨:cP*´-iZ° èž…;DK -Ï@5œ1TªN¡ÄÆ’ ÞÏñœÉ"}©„á£cŸ ªWHÄi!š"©8‡yOj¼”„=j,2¦Œ1Å@’ܧ었úùþn*KgáN_T¹ uÉ›C¡9ÓËÚ–º•ü¢*×ÈÔ´b²ä̰œªjÕ9 'ˆQ! gÓ:uD¾À²Bd…Ï×’v½}±¿{ä8K'ìV°¦?¿Ü>åaÒ¥  Š›œÔ2¸Ç$½<}€RÊö«àîüMíÿçÄ3Fð/ ÿ ª´[6S5ÝûŽXÜþÌVçË9Ǧ|ö£]ªÑKŒ& >?a¤‘#œÉÔAÙdl¥+Bt,:ƒª‚­H +€]kQ; ŒL C ÞÁ£UK²Š"Ö8b\ì2;q`jZ0b Ÿ·1׎ ,M™ §3^뤛ЊšT«*V A:æbȶ٨ “® ûä–i¾Öa‘9\T©Tª•ëJ¤rᢎ%dŸñ§Â¬¶Å¦áQ/f“Ø3ÏaÊŠ²ª–$PÖK%4S¬Õ¨™ÌŸp#À×X¡y”rá¦tÆ*„RMQ² ¹âS."%W͇®¯NOì¶SÃŽ'þ–ú>ãÏC·ñZ ´d~–d”£5ù´˜…Íà)æ”’òðb\[.÷„“¥1Jži\W›U)+p4t*ÙjXå»YO‰‘Y–8/"Ãö›ƒz£ø´óaCIË¿Jó׿PËæÑÔøo>úä*€(Ï ö#h ¨Œ/àüñu‰HCEü¬nÀx0Àãf€üÎP€ €?¼$T%Žàš~k1ý ß©ƒ÷?€ á]°øwAð3ÜÀkÙ_¸ßýžØûûsß0@ 0¤Ÿv¦o©ËßRÀóo•[|oãoˆa/ü‚ë&€€8 ð‹g'° À´g+àáU¶Èžr¶öóÉÛAh¢êЉ¼8Õ쬦Oi¾`™oÏÆñ‰K;ëý°¨ºwú.¥ÃÔä*˜ÀƋĉk‰#5Ã>ûçØŒÎ¯\ˆ“k‡ž°Js?`NŠÊÒ¶™cÅq£2T™(‡´Â¡­¢£ËóXn]† òX"Cø„(/¤Ì’Â{6uUZe>×%T%¢$,gKüiSÑŠo‰~ÊÞ/$,œQ¼çH"Q ±«¡ižaèº`–\ÆJ`¥I¡”Ö^Ö ´Hq•=÷ÙÆb‹PJÕ/zÍþ´¡q30TEñ­4•œ(; Šj@,ª]tÄ›X GAƒ¥¶4Æ+ê% _¸µf¢kM›Íd03>%}lx’pHÊɇ#ϸÌ}XOÉc S cò!˜k‡Jd¶ÕEÄH D3cjõá/ð7€X¶C* D¤û<¡dƒËü´N÷>œ0[YAO­°võÕ¬.‰¼X¡¶Užg°ö™“„gªIêˆlÏ̯¡!ðɦn¯iÝõRu§ ÿÄ$€_‚ÓÃ#÷à} ìÀëððŠ%0<ˆK_ÈMLþU;ó×…þ×Û#@zYâþ®€óÞþóá]©PÿCÜ€×—X¿N^3{‡VðÃ|²WHü?\3#¼^½/?mÿå$†¾3_û½¨“ßÓÓ×ï;г—>M* 0½å]_Ãæ4¨ø=tž=yýGíõ­è"ï`Á>ªšëGéËø¸w/Hø¨Šn…yrTJÎå=w0÷­‡ –~ê—ô,Î<¾¨Ñçrаv/D8|L~Ô›ëM.…¢5òé|Ai+ 6Í"œ€%˾ú\»§êaÅ’AøÅÙ;ëi ±=Ë«¶gS¸õç½ ‚SÚ@ÒÒ*Ê‘ò¥,%ÉY²$Rƒ–µâÖtž€D_JÆ\#. Fчà@ —PðŠ(NJ³â”Æb‰{_1=àxÊd™¢EƒuX¡ÄÁK°<ÂΞÚJ]må5R2TþA°¾&]mKÑ®¯SuÑ4Ÿ6¬yâca„;rrešæ˜û~ÙÒLo!|¦/}€¥í|üdÉÇgg¨àvŒãÔy<‘ѱÊND-®çíôüèïØ–÷êLK\NñEAœ? D‘vÆQ5…0ë\¡„`QJ(ÉZ&$!æüX¢ôŒf')U4QÖô´ÅÆmÁ4Ù¥øÙªn‚Ø€‡žû¤›kL©ÏΤÃc0Ø4íJ\4¡´Jq"é”(·i=gåŠ3^pDq Å,areÎàÝ‹Š`G#‡|&0}BJ2öÉ—ǘY™1AŒD\N^b@ Qâ‰J‚ËkÞÖ‚a9‹)Z_‡¢¹K¡¦ƒX£yK4•"‡¢+­rò6Dž¦ uhJ(¦ÌQ¬ Åšœ@»¶F÷ãSF>ÓœCÍa`ŽVð)àë“l,k -Ǧă51ÿ DÁ%ëOæCô½M„¤ V0Ñ#Ç1§)ßG~èJ¡5â3«³V˳@þ$ÖÙúLdWâ <Ë2 ¤+#K€pûðpÊFD¼Ê²û ŒaˆJ‹†½Ò{#É3ë€ 9Ì €â9Àuhn­‡ B¿Æ÷ üüñ%ð`€5Zƒ»†|3““PŽàºÀ €§ð’ØàÜLà V0­î_!ä¾òªmðÞæóòÛ½ï€òÚ¨3ÿ¶¿ÓœÒo옿,%Á뎇/oî'N»þàÉßf5ãßl~ð*z¤]À£ïÉ xà èß–Å¿€[ P{¨Ž0v@Æ—Ïèˆ4…'œ-â}Îã¯S0³éê~–YGÃúüDæcUo2·êôWÃáOkÜÔˆ*e–Ÿ±jM?NèóÁß.p¤Ÿ¸¼Ìtµ4,ß°àÃþ¯‰(s­a^uîc\}ND¬i‹X“aÈžŒtM*y© ª³ª–˜ŽÏÄ&Å”+G¹[¤IÄ)pGdâ(.ÐhÂQ¯+…ÙZÅQñÑ+ë–®¨ KƒÕ¹ç$aŒ–<0Ésn9¬•LhI©` 1Bc!¯=H@fë¦híAxÏ…n8³Xû†`Òéñ!· O¬f±²8ء̥q'¶ù|Åko¦âgˆá’][*„˜¸@]UKÀƒûÿŸ7‰{öÙF~!®ÎÌi+ÝnþbÓð´¸hR†gÇÐÏô*aÃÂ¥\~J+¸—}Ÿèfßf¼Ú–5WmÃC¥MTe?7·NYRd‰¤f ­óµ<†T\(ÈÁzÄ|ÍÁ¬Èô’ow\T¨B‰`')Q‘âè%f9¥Ù:̰”V—ÌèTÌIú) §L<Ö%#lúe¼ŸÔs” ’›=ˆ-—ŒV‰ˆ(fÂ‚í ŸÊ 9(TlNt⤠yva)ûLXÁÿ/moÖ$×un‰­=ï}¦« C¤HÉ”®¯Ýv¿ùÕ¿ÚoŽð›í¶ûêFKÔ),…ªÊÊÌ“gØóö‚$I×ê|ÌÈÊ<çTÄú¾½¾o­å‹!Þ0¦XH1’xØÇpó ~.u;:xÙòzf™±”Ê8ù!åb+=©©\­DFȾ¸cr!&ÍŠ¤¢%8gt-L®”=dÔ;¢%e¢Â9ŠÐQ©±®‡,3˜Œ|‰TªZ&8#‘å~ÈYð„"X ³§<7UM¶BÔŠ¶{®te™y`bWâ¶ŸŠlðe†WЏšMÄÏõ¼‚ž"éÝ<ÙÝu$ÙEí‹(JGRy-äˆîë"­Œð}+r>Kz§iY ]¯³jCPÓÉîË‚d1*2ÝçóÉâ¦)äþÞ”ýF>ƒ¡:)2.ΗìÙ¦g æ¤{OÝxà µ€Å €´ðõF4ïûò Àð[ä%°Àá/Wìåbá!®Ðû7¹m#ÐêÝRéb–P~x‡f=пƒ/ÏpUàÝÇ }üôl€¾GÝOwáïìûþþÕSþw®'IÀ#pP˜Þ_ßÇr”7F©?ŒäýÇ ÃÄ3Ð~ x+¦ ?ù•·u¢IH~Dç½»ZïÑ~óÆýÍìú·À¸G ¤|ûa„5uÛÒfècöãüù 1puçÏÁäîkÑ’yû²½ã›…¦$a×;÷lXR\H0†ÎáùÁx:ââ„ $Áå=®vð=$üì n¾ò›$‡_ €3 ]’7Â#xppÈž¿ ©pYÞž!~NɇÖC·½¡~+ŽcxëЧßy’2€}2j3ýuòßË)ùOõûù—ÊIõ“¿eïóé̇#ùŸ†-P~ä$žL$å7…áí¯¬à÷?¾ž‹w%òÍ›U Kÿnôÿ£Ûù# ù.kì=žÜ¨áV6¡y€²1¯d ¯Íg¤nò·Nî{¼|Tu/—Æ4òŸLn"W¨.°­æ º“§a|¥®Š˜«ÏþpЕH÷Ëô["N5¯*òÙåmó­¸BáÿCjÿÇfÕ.Î)YXFЧ¡!q·©n2äŒ@-!é9u_9S³Ff¥FE§&‘‡³ÜMR”Ê*½D.t¶s¦…¤ì‰Ê,×Fk¹Q0&…N.fÉ#㼉e¢p„Rq9Ê‘9KãpŒ“EJž ¤”|ši-H"G1t#™>Š+þ%ÖßÜb=–i>~kfHþI¼ìñ»êôÔ÷«Èòx:²þ f2eš¤båM}_ŠÀõÄt|œ®‡ÛtêùUÂe4.FñsÖ³€Ýá.pƒh¾åŸž*ݽ¼+v¨¿µ¿ ðÏ’VL«(Æõ~5üäåAEÆãIôÚºÇ YÍþl†ª¿˜ÅåžkÛâÜ@¯¥Šs×'²lTæ+õRqÞN™èy$óiÝÞ!dt`¢H/ù)†rµ1-j.¨Ï,“gŠz”$W,ýr±XÆDù0Î ¡‰2¾drÛ¨FÅPMe>Ùl‚XC^dú’§–ˆ‚j8²ÆÆHvZ‚?0QŽ3?Í÷u5­]WÝ©©c‡6yFZ [I£ˆQE”àr:¥a°²hË8Ó‚ –S&Ë"Tµ’ЏMEgˆiTeoC‘‰²JÍi¤,xn}ñ9ì\$6—C ³óÉÓ$c’~æ§éÄ”Müáë!~’1±¼¹™£·4°œ%?Ø‘PêÅy2& VÊÄìœ,=5±z¢ÉÔãTñº #ëE*wù0ÉÙ JKf2 ÅgeŽúqÐ/ˆÉ.:"‹¨sÃÉjž45kg1/îί yhTuJ[ýâÆ§;Ò™±«‡Jöm~€v³ 9Ãø j‚jŽeÄ@Ãôjâ¾ø·äùíÀ=p’Àï€- €;à0 k  êÐ_¿¥|<Õÿî~2L~#GÍ}þPŸ‹ vz'~ß”›_r®û[ó7mýü½žŸ.8þ3ÅûÁ¤ÿ1#ôöý3 €þ‡~ïZú>0ÃXØÃ7¸Jð=Vï÷|9||#“ ŒÃîýñíC£Z ø7á W5¶-tõ-Š-¬ò>³¤‘Kt힤FÊÕKÅÀ¡åØðŠòÝò™R—™|VΖfn‚ü~ñʘmE^žŸX-nìê‘f‡u%Üy…lÄr®Oe·ÞÓtA,JÎ'bQ+–„b9ßcš|x^â…ïÎ]ctÙ#×I8ËX!k¦C¬+º ¥6T[É=Íû’ØìIf,Ó‘L`œfE¢@LÈ’Ê(å”åÈH5bIDö22æÑ`n5Ï)–Ràx™giwÖæÑËùXÁ…ü(“íÁɱÇË:\ù}uÄòË5Ê –-k²ðÞÇþ góЄgÕ8EqTÝ·OÝñŒñt#’z¸#¯_Lû=\MŽù•þ¶Z¾êÌïx6U‰ê~“¯7‡8¯„êªO ±{yÐÐyDæ—Îí­láKþ*Sý)—[î_Që@ÿx§[×ÖÀE8nNé¨í?—À«!QªÔzÒsl1#uËZÍ›¦ÐÕ mÝ`üIdº Œ°(Ú£ vð*Z~¤ÇZŠR±…L¤L–æ!{V<•m 0Nì:DÚVOjÖ0R¦0 )1Ì4'Ê!"—YRh:‰0;ДU¦å$i£ÄÖ¥óäN§¸Lz¾¢Y(éò”Ø8ûi”ót Ýiæanmˆ7sâÜ] >åˆÓ§ù4yÐ2²CL9P/aàUä¦åÌhF8“L3^…ì| ”ɺ0•˜ÍädSšý~˜J *v𝇓€OšVRÐâ4?>¤YÌtqpò9ëŠ× ½¸%iwB3@±Ã¥Hgr:'(‚Iב‘©Tnªää” ¾3s'½çÔ ”ä+M%´è¬šu]?ð^(™ö μŽXñ%Í¥&0o:o<¯R!0< IDATש*EÖžÌdó‚ýö®Ê†³Å-‹§ALl>’W¬¢¯Ð,àJ„›`FÈüìÑ=„Ø€­¿;ð@G%¬Çé ¾ý³_Å$€û-f\àîM¶ñ½Dë{ ßâJÃßþ Ñõo×2  ~ÆÍó_Gꈀ›~5ú8Íþ“7½—€ùèÔûïÞSòeÀ<ÒÕ'?öŽ;jƒÔ»Ãðnû÷'Æây=Ðkx ôX¼-À9°ÃÞaÃKÏßÑváè¶—ðw/ðÇòÜÔó4ÈCZ{naÕ ]ËU¼´ùêeòì°ßÚ¯ÙëO¾Sš-9fÚùkªòY„HŸéDK½´-•Œüµê¶Z/Ö’5+ÁûvQ¯‰6,‰ƒä‘Ñã…ÙìX)ºüžÙbfvnv¡£!ù2i*n*#Ö«5/²ølRûÐÏ“{URS›Js!Žš4-›t>6‡©n[šïƒÃ1œ†îþl}ZœWI4D,¤"Q•ŒPKcw‚!ÜxAçÍ&!j´ägµ^žÏB€*3Þå¢M¯Ç<íS­Ü!úJj_²aõB-4!*†§­§ì&ðìZݯÑzF†¹ÐÿŠ#€~ xø€SÂcAþãï@"~«üõÔ9,Áw;ÀId Hã%îßFOžÃ³³¯'fV/.|ÞŸží8Ê 1_b…üfÆàÀ?ÄœôKã7ñï?ĺ+ÿŽñ­¸D¸úYyxÞà»7ízÿ‹|Ô?$Û烋KŸ”)¾pÕµz‰“gþ“]®Ÿ‹CúÇ×_€Ü ÈÀæ½-SäÛý-Ïßj¡J·i\=€ÏÀóús;âÀ¸8?\tý³’Ÿ1öìáÔí£´\È–±»ñC@ìdpž1ðy´Ï<ƒç×=yVs5Û…žk1-FØEÝ ÌvÆhÂ)~\«_-ô®«Â†šÞTËÇR¬|b2£Iä˜(e ’ˆ{%.|wYÎi²Þ„,M|Щã‚KSÑ®•ZÓ¨è>Ó)xVjƲô I,goX±MEÆ:%"1„qV˜G‚`.qéEi²$ ,7”¤1E›³Ä„º¢¬ªÒ®øÙ‡ad½*Es7Äa¯^Îtèk>J™åbC–Qդ݀ÝÐÓKŠÃˆ&²ÛÚG;“Tq‰Ès¿_¹¹0íž±]URE•ÎZ7âôŸ[2wú×±°C¾½ÿ¹*/Is¿]wqÚ´ƒ*h›oó¤ëÊW þ´Ã*êMðƒ¤CAnÔ'&Ac}Ž&6ÍÙSsßС6Èu 7ŽSKñ2¥Ósº”.ØYmêJ9±ÊeU2!aÎ4s]Ș˜Ke&bKX0liÙLЮLn…6sgIGÕÚdgòdfž²ã$^O£'¡/d¢x³¾óº úd÷ãpkèy¥×ˇèBLã´¹ßÛ<2íÁå~ uŒRy"SÊÕÕ¬n]ûscq ¬þƒåˆûh€W@÷Ö,ñí¬b_ÃŽ?Ûñc¦T^+Œ—ð€ŠòϢť"o¿7²”fI؅ȯ›RQ9íå–™yCÏ+«•b`ç)Û±?¦h#[dý}ɇ¢Ç¢¯E¬á?£å7Y'Ùb`­Ò†ïW±?çíZ?’õÓ^6+ÑÖf:‰c µŸ«ñTM"µÂ± *A†©}Å÷_“ü€`Óµ~©|WÝ7Í¢ëx[cî”@¢`ŒÈîCô%³é…u‚šP ·)ž‹R$¡ŠTž@RáU¬ˆªYU3•9b8ùD‡(X‘NæE*®ndýŽ Œm…o8žöîv•ŠkÒÒšy‘^Ûx†?Ïš,tü“ž;É£ U–ûµì;FlÞ’[§Í•M!Kº1ĽÞv™²#¯Jºîç— þ/E~¹b™ê5U§—Äöäfœ‡%iL`¢J³’NšV—ŒI"bJÉSi©î5Fž×KUO•ÙïÑìW™¼é\ML  dGu®aô¶ÝF“¶~Щª“ 1›˜,‘>ØSòÒí…àÙK°A ¢¶µnX6ƒ&‚jf&¡Åkhâ‚´Òä:ha³§ùÐBÔ‘n’*nÞÇ«¢e½ú²^­ë–8{ò{{sšã¸ç±ä0G³Ù™uÇÔï*Â4kÔ‚Féծ⥾ÖBØÔKÜ):fô‰óïPná…Qnm¬¦S¶ÉÒ)‡knÊü%ÕrIÁo90Î)ã"±˜YŸYʼwìn¤¯ï惟¸VMõJXÓS_ò‘ÓSt/ÒéU¸_u‹-÷KO‚¯xˆ2—Sa%UkW£­‡1ÚMYT¾a×È‘ÆSM´, ËZÄ佛ȩg3a-`Ú1íy:Õijµ€:CŒU•òÈç>ÚHC±!„˜²m¸_«”Ò¨? ½_˜Šˆ` ‚còjå.Æ©Þù"ð íBIpQMlløé”çÓíÿÊ]'Žd=ÍÆ%#^É‘½i4[xXÈ=<p’ó²X\ià¥ÿ!cÇÊ`œ$PauøÁç(¼ þIž™ô¿¯¤ûp@ý 9Ù[ÿ¤Ã’/ÄŸco†-MGxàªüHbýï÷Ìøû¸&ò‰(èky×V1~b¯öM°Ñ¥ øËÛ¥Y ñ%šo>| =Ò¿¾¯{vüåºôîŸU€Zì+`Ý>ͿѡEš–¥jÝôUáíáèø§¤WÇpùe¬ŪAÕpÇu·5Žºí/Ký9±UHäTöN8;J¸¦“ÊÆÂ(»fó’Õ+½\vªê:VT†¨#H’]&¡0éGJEZlTyà™ÜëX ýÖÏ7™D Ž‘Ø¨´>µ ³Ö¬%Îû#‡ …‹èH!³“ó* O.²7$yËub ŒwRPRHQR&ÃbCËÝ6¢õTî¬ “,så2Ï"2zòŧXœ½É~ßÓz2R*MÕF³ƒ4» ÕëBÊp6²M$3·W‘4AøiùO¼«6Šô’£ê‚§í&ÎbLd’ q5Ñ7¶\2½½›Óª*:ÁNJ¾¤ä´þŽTª; LX’né†6ë›2Ò·ƒÕUž¦z‰ï:º¡^ï'飛=»¯j¿®B 4îõŒ&V<³%‘àš1ɪäO®^æQUÚzC.Vu½¤zI&%ä@iޤDs™MÖN“Ì‘¤kN ´ÐL*̉™;åpfC ;”ÃX%!™ôFîX^÷¥™…X¢“â&aåJ"Cc2’æ¸XäFgA‰K.E×÷óõ¤Ì&GÎbTá8ÆS<QÕõ!Ë*æÔ‡z*b¬§)!šóRO&»xÌqŠž÷¶éY̱Cœô°c×;*V^lBȇè¯r¹©Ôº)FKS=M»SÉHÐéT—R˜¸îø³Ãᑆ;ò'y¬.ª¥ÂBp&†@Tˆ1$ÓÏÊ3å±s„7eb©%¸•K±h¤Ì÷Îs„nâ››™ Ž2“Úb9õŽÐ˜ëªˆZvÌðƒ»-îûi,uxÄÄ‚„œýb&‰u5¥ð6³Á$RGg™NÅÏ!çŸkÃ4íÎÝæxR“;½>·œ–‹7Å(öX-Ôzûú\|Ÿ Âá+¶«ƒGZÜöìë+úrCë7{³¹ª+d þÐþy-Ð0®Û\YsøIªñÜBŸ!: `À ¼f¼Ù‡eýû=à?ÙOÿ<M+à5¶@zç)¤>b!ŸJŸÐü·ðÌø±Å/ãþ—É oµxþïUôoè&Ê`«Mo(>Fd½½ÿ ¨ÞZ'þÈ”ª¼ýÂgÀña\mõ’oƒË‡94!—½&FW¦Xõ]N{ä±ð¯bꊕšnø¦* !Û{öýEÎ*ŽEÔM§½…ôO9­§ª¬«ºEë×-á•™–UXÉ'MÍ«µ0 £LeRRôÈ£(¥áœ±œWް*,:‘מ•*¹ m‰Ô¨ž`_f]*¾HLt${/¨ÏÙ#8$áKµ}ôûåÜ%ÕpYbâ™ë’Y`J™ÌƒŒ{#©fã’.×25”%L¡í §Ù¸bÌ©ô~ ‡# {ÈÃêê—ùüŸüöi%ê”3"è‚‡Ž»K+³Šã)U¼¤‰´E^hFnj÷\ÑRÔ“‰T/ì‚´+ÕA!¬ÚÌk¹H»ïèŽU+ñ°cd»1ó4l½lÓ^E„|Œ™Ô*:ë§ÅCÖN­ŒêˆñÛ¹'òe tLrcóÕn¨ˆ—UñE£÷¶ðË~ÿ$ÙRª¢“dH§|[RI9ÏS+¨QÝvÛµ]]­FÚöÔW±!§¢N(;Z=,ܰÚxœ5(H%)/‰MÑô¾Ú%N)÷{ª¤–™HÑÂVÔŠ ㄠ²šˆÊ÷)hmDÚ4íC]jY™¬¿?¸›!Þ$¹f9ŽÓ= ï•3öz]µ7´$_½šú×n[ô"ªØ“ð$¬t£cn®–³Ùý§îô9sŸŸ bMô,y c/i&\R´4gWø¬/Wºešp¢óãÀ¸â¬Lö†‰¶§´h³‘L,ysKÛ×êtÁŸû<1Һɤ<7IƒÏîaœr—˜Ï›;¹PºD>â5Ëu©š-sšNlyÚò‰+‡¼ix ‘Òϱ§Å&û8-QBKÈnr¢ìhuG„÷©x;õ~f‰&[Ú*ðb2’±»m9²8°žIô²:ñ4¢•5Ê##ûç‚Z ¾rt˜—~ôlYIÍÍÙ5]TšmëÝ“‹ÓÿJϸJõu¯VW˜þ9¦ÃK¼þoµÃVK×\îî÷{Ù®Rl03@ªÕ=oŽ€œä­0Ø¿±ø¾Ê?ßAmñûÅ[gh˜)°ø`9ç㮟‡W~ðf^ჟŸŒ"Ø{0üŠ~à+ñqŒ%ðåÝ?¶6\;€àÍnï'Ì”<¦oÞY^ø¿‰›ú©=Æ—:LâõyüÈlõnûø ð¿zë ëÝN|K —HWÀ¡ZìÉ /$W-r5ùU+¶ŒnUW)óD”Ry¥='jËóɬLÈnÒžÒPrXMvŽBDµZwª~s7/;) ÏaŒÔ5y¤`œqÆ JŠi,Á—RÄLTìs>$I%”!Ip(´ ”Ù`˜( é¶F”á[;¸}1Ç’‚¬9YÀµU®ÌóQ™ ÈÑæñ@%Ϧö†U<ðÐD‚ÀJ¦³#D ”]ŠÑÅ #¼T!Ú¸gþÆ»ýÑ6£<¢½IX5°ÏBÕ’‰|Š|)S|GÈÕä)»±;Çeb&¼:‘£·GÍtjP··µ®«v1e1áâÂz1ºÝ‘ ÚÕ„S Vb¢“Iô 1Bÿo,ûaÞGµ¨ÉM`±ÞSÕé±6ûoÚïENpmĆ6æÞ Gûo½]}åÎÃQ˜RÎ Q!çe½~È Òœ^îñžm¥‰7gõ°ììÅò³º]ÖM£/‚ú(" cN&Æ­à=qUºÉ3Íw¬V±”T0yqëÏ‘ŸK/GHžÒÆ÷䘧àèJæò˜˜Î+$îŽÝ.ì,^Æ1ÙÓ—È4÷öæ[wëôýEó;)³<¨˜sf¼ýqOî\=i '%ùp˜Ý­—ßdõa_~Éœ`Ã#šÑGUçr.qôΖˆsÂTæÂDNÌšdWXTµ6i+’ëI}ʧ9ÏõÝÑåñSµ8_<¸£CŸÕŠ,g¨¥Xmk¥z:Ø©×^Iá•´že)ê$hÖÌN«º·Yzs:uÜRB¸ð!®³«3óoûä á|7ßžTª¢–U[Š dbnîâ÷4¥‹H¿ˆHGÊZækzÎtnc™È~Æ}¶¯†}²ÛBÖr†§iKþ¼¤eÑk±¡vÇ×/K 1±-ÿ6¤Õ~À1¼€'&—Í"ŠbšE¯ñwéŽ}Ñ2œN?¨zc£wîß@’”£Î¿YOuï)¡»˜• tìûOü’(øƒ7ÃÇì5ÆŸ+~°í}ñÇÈ;\þƒkƒüߘo'ãß/•þ"7õöV%à6Ö÷À7üÈþÕO'øoìÔ3°¼~·‡öf4 ƒŠc¦—¥\hqx” ãÕþøºðê±êb¡]Û‰ûŠ'¾ÝS1>ÿìÁy³_4¯´ “OI¼r­fÆé´ç$c[¿~¼þu«bŸ;A×£Z¤¹ÌÄÆðÝ„Ëè6qvF¦!ûCò‘e”c¦þÊDCÎvéDñ´Ì1ð(ë‘'¢. mtQ<ߊ\ûT2Q¶ˆÂÑ-P‡"îµ=QZLÑeÎÜ•èmÖ|ε)ìqHªØÜ§ƒ.a+D«<Üà†ÑG DcR>¦Å‰²Ee–(2’@hIe$„£e›ÿ Âzx}]»ê($†BIêè+Ô/ q.“x86ʧã4Z™3)s¢v&îèT¢¢äPÓè½§Ð8׬D¬H»ºqŸ²žÖ‡åzÎ^Æ¥tb)Él&šnÕDøü•©ŸÖuåÉÑNÓ×ÓQçú\R¦ˆ"c!Éeª°c£é†¦éŸJŸã‰”;%f©Äήœ§$î3|°žñ“¡!r—w—ŽQz‚(-Ë¿3ù¡B²ÌuB5§$ ¾$”XòùTú=®Šq—Ž]ª'm^¦û[EN6óÚ;BÊn í_ª´]ݧü§?ßø?WÀ% QŽGð§%53RL×HûXf©NþÄé"‡÷°;Ðo~àonÐç,ýÐ@÷ôC­ØGûSÓ\Äñ“ùÏ­™G’?éÑß%ZÿCkƒý›¢ìä[/ì’hY×ú¹ä_ RáÒájúäs´ÀËŠGíñpîê–#ú+PŠ2Í~žIPëjua(—QF\Q,—´¬èkq¾¨£Ûht…¦Áö½§ùlNlÃŽ`X”•êÄ“…zzö²[5N™¬'J]ÇU*‚žmøç‚=òN‹ž3.É›†â)IÙù„E4×¼Ÿ œ€fJB©XÌY~Hñl¦›,¶­& ­Ì¢25Q¡¢wÅò9¦¶ §ŸO;ï‹þ ؾ¦ûuÆ£1¤ÆÈ¿OŒÑMp’.³9ù3¨rj¸³eÌ¥It/i÷Pü6M J«LÑèõÉÐ[Þßûõ÷9|Y–”ȇÒÝDi8ú¾¯H[/Ø^êMŽç+BÆx(ã ÄºüQÙ߆^„Øšð:©ž ×–óp\[ˆ?Ër÷?cg”LüK=Ü©è£àT¯s´|êÉúl Ò QéR Ffû:›}ûÜ7•®ÕÁlvžÝ‡Å£JèªE%Æã~tÏëæÿR©Ùna’ðÎ’ÅÌ73åSôðH·¬‰RRgŠ•yš{]Äšh(TJ™®PKŒòÂ0.#]2B1ù») ÉXßæ¨«8‹ãÇ$R(‹È†_dÕ0¶«âëÎsùBcI2Ø”CˆaäóÎǗɹ"„H}WF›Ÿž.]Ãx}ìrörÅ,Ý%)‚ع!"v2yUªzÛ=Ô…Qßâx%|¿ËûE¾•ÕMƒS.çeü/¡tŠýGÂÎDŽÓHGÊýÌÌd‹1È<€CZ¨œÙ°¼$š+j()4"{F¼ö‘“Å”é†þ*Ñ2ÖÜ-v)ý‰ÌGlªGç÷œY7Ýîö÷wŒQ7â5›*ZrL™‘dCFDM…†3؃¡2"ózÌ>¦ sæ$8]½Òñµ—“­.‡6ù„,Ÿæ õ* ’„–)È”åf‘GÃsᣫs½æëy1:G3AÕÔ¥r|ð‚õõ|3íÊÉ|µ8™-þø€bÕ­t¾q{v¾‡Æ§ ‘b™XJ)„|æ=€¸tò*)ÿÖóíð1¨ûþM"²ýÔÒ‘ ¸DþÈšéϲ<ƒp@~»ú÷Avz#xÄß|""ô?oø+S„ô“òð“{ûpxÓø¿gô?ˆ[zõ©Zê¢ù¡^&„×8Dz€ÂƒÍ2Ù/%¾ÉØ«¶ß¶šªŠœóãýYúnA³q¶zä/.6œT2Mèûõ!ÐãgDޤààdCéCYŶž/¸é H>dë2—0†é…Ñ’ðd¡o"cR“ŠÈâ‰,‰s¦|¤‘Ô-¥bIÕ‰çÌœ·3J®’+0Ž’D%ûÒÆÖºª:%jŠQä™@ÍÓ†œMÇ —íÌ+½n›cmPØä¡énA\W¾Ø0Á q¾R ’ù¤Krô>²af=©õR¨J?ªM†=%ùòB­šJ®On;Ã9 •«‰†°%ûQ5¥zx¬hn_¡~î9õ–‰ü›DYæS&×çõª6¢ðÒ—‹5E(y&ådjtÆvñgÄ{ßï^ÅÏóù¯Lw!çñ/%¬‚D3¾R6‘s)©Ð'BA Öq´ækýä7Ê»r1¿yÁÔHј;ŽCãÅâéEuÞñ”ä;ÛwQ´~± JGiÇ0Îs ´5¼Ë´n¼å™i‹,y˜©˜£½¡¡lDŽ ‰'ïRp½ëŸÏ§ ±Ó -5ŠlPkEÉ,Rà,±ðPÙ€iƒÒ>1qJ9—`óäúÄ}˜¯}ø.åg1¿ß·?¤Ø×÷“+¦œ/âY¸•å_<ìN»*Æó]®ˇYˆ*Ë´0­n—ggë÷ãK¶ßùüŒ{VýJR&Ú\…ämæU,ÇB§9è9¹æ\ÐyÂ|=÷Ôƒ¯F.ߦjÉe©ˆ.§™Þw¶_eŸ‚Di)Ñ©’S(P#×Óv‘í4U¶®1å’¾~ؘ|vwwÜ®•T)ŒŠ'ЬÎKéEËÎ(kCô½-·ôÖê|$ŠÈÖqžô¦þnì|£“¸ +Íy–ô¨3‡ i¡ "ríšÀÉ#7÷hcמ-ñò>û¼GBgÙýJ•ÖÇgϯ®ÿOí=Åa}‰RýÊvÝÇ™ßõǡüªœ|A ÃÛ/ùa£òÅ^XG‰ð78#}ÄÖûÓÜþ»ÚÐáÃmÿQ¯Úñk+ààÀ+àôþ±@Br\Ú_Â@Uã8ÿ¢CŸ¶€jŠ#ÞÒL=*d6¢j©§ñšL›t&GB ²[¯?xxyvñY\° )ÝÚ£>íy‰ë*ÛÊ+{lùó†¹*ÿšQa²oH’bL‘&ÐIRj2UòRH‹ *Õ,es¦…¨ÌE¦UJBT¤4ZU”ÙÔJ†Cái9Ê&P5ˆìy H,E¢ˆ‚2! !$ðbXÎ!)ŠÂ Uox¦øÕR¦®¶J#“*p% {ÄÒž“9­ IDATCBÏy®ŠGŽ!Æ)%+]1DIIÛ%\T­ÔõReM­¤¾l#5žHï÷»~5Ç‹*·üžÄ!‘(¸{ W[u&™¼«¤Õ£§÷…•Ê…"T¥GÕ¾<ËߩȯÓéuЇ"*ŒBÕmáCmPØý»§÷³9чÛó‹-é£ÛÎùªÇxüìþu{÷pÁ.YEt¾÷lªrXߤ‡gÚ!f¾ï‰8\ÑpŸTÙ'.é%ÑÔ®Ök½ÉÁSœRNMà L¸PîûYùaËÚFHB4ÏäÅê%á™6{Ûö4ŽËÒËš‹ÙFzÊ¡oq_W®áµ1*“°La“œbÂ.|q)L !º$F‹¢üK>ÍÆò¼Ÿ‹å–ÅÕ8¢Ëéz—p+ŠÅ†«ÿ½Å¯ÉfŸ…š)Ʊ?¢¦“µ=ôìåâZlfÒ×ËÏÆ®>cZtçk’;Ì;Læ)M©^vU­–ü«<>HLúì¨tˆ„*fêèÈìæy¼ö¬!çü‚=YÀS¦Ò]9äüªÉ76ï'¦™æ|LYU±Õ`Þø~•'ŸeÒd”ÃÌ-ÎÖY5ìx< ¯ŸçS:lª‹º^ÉÂÞ?2wÁŠedf@'m½çÃÝy7“›YǤÄóæcö·|á>騋Xê³™TÎlæ%á{>0=Éùþ Öê¼8>ã¤áVÀ¾_büÃ"A]£5â¤#®8ü¨¦ú7mîp{ö~xzXàõ{+½ÊÃI0/‰äá2¼=Cœðœ!¦ŸŠ½~ð:ÔWhýÏlVÿêvÿÿé§ôï}õýÕÔïÊFHà°¦w!ÐáÃj<Áw¸Ú zñ ßZسw‹]Ûm7Øœ¡ÊRzOú„?_ÿ ¥8Óþ¥]¶}¦^s¡õùWëí£Ï×_=>»È5¹NßßûcV+¨ŠSãMºÉ£tyÆÙs%#¡*{æK}“+ÕLºFª•QˆFj)¸t‰¸hcp1ZŸ‹£•('B‰ÑUÂVk. !w2K»©¨o©bdá˜ì ›À§R¼¦™1UÕS)49áC+BJó”Ò’UkQWÖ²³QwE7ÞåŠAg€”T¡Œ°H‰ðÞº2Ç0ò@b¦1ЄšG.¤2$.ªlºBp²ò´ÎäQH;{zQ±ªÎj*µW!ù)Ÿs6SoÎ9EéÉ=]¾( ’ª³ÄV©zCO×nøz»ûÙ£Y¯k´r^ÓS¢ÕyJ/"pš0±ºÝhBò]GYçÅÿÇÛ{5éu¤ibOúÌã>S€Û÷¸•±Úˆ•nt¡[ýý`ÅΆbV;Ó½œ6dƒDÁ”ùìqéS ˆîæìL﹫úΉc.Þ'ó}Sí¡·yÊÏ«%·Ü¬Û*1ýRûÏéo—öëKÄG£Žj‚ì›xªó©©~¿ð†÷õ–/¥g YªŒÌ–[Þˆw”F&Å~I¼KÎÚ ôR #Ee#gãV ¹ˆD¹ LLXŒýHç>j7“9z3dw¬ít±Â¿k™­¤SžSÙj;fËS±ŽÏVUó<Ö<œ1ÞQ~"Õi4mJJ‡apþ`,¥Šž©´Èߺj¢í,§QººžSÁU2Žsݰv1ˆ½m˜s¿Î¦a©å¤uÏ¡õ¶;qgðÉ®oËúªIž¯äô•ÔõJæôSÉÏM3Ï~‚Š¥ÉІAIe !h£õ'º¬:Í*yO2ãéH¦7è'ŸÍ¬D1V‰iHÒUYÕM‰$z`<=øn·R=)Œ@Ïì1áþ€!C|=ÿhÚ|’:Í#-)‘&° M—èD†ið³qbMPµc-󹽟DP­g‹jyXò×ÅcªÌ Lµ7ùëìoçð?‡¼Ö‘+¦Ì‚™BŒN¹R9¯œL:•a•¢K&ÚŒ<¹»HW—?ÚéiÜMQµrÎÇŠËvQ_%Õ†ÑEçéÑ)'ˆ{AÒÓ3 ççl·PØ ë;ÿÅNVHtõɱ½hào–àû÷FÀïE{6ÿ àNxv=1z ê1>μ÷búˆØë{:ˆÐP"ÿ…ü/ÓSúd9øïJÉÿ\3pøàµðàxß‚fùΞ¨é€8.ßÁõþa†ÿàbÒ1ŒTFüm§Ú_Õ_0”—xø–€jìØo*ö=¯ÚHa[,VœI]ZÎ¥tåÚH§ÄwZ:¢Ê|:3Ùß(¼êâcbW½›w;>³U[ei<”‹BN©è$ ¨§eb“+6äBe 5i%£ Ôn8ÏI NA¢¬%ã´uE·99"‹d”s’ëDx¤b*Ê{_%¯Rpy>¤ž–RÑFéŠ1Ì„H—»¹HÇ|‰Á(®@Êì©?p¥AÜàɧ9MÅÅ8eQ²ƒq ÆäªR5‡R¥V¥RD;&k-êâ׆È:Å&³>ç‹CÈ9מ`ʪðDÆFhc“àשyþ©h×5ËIÞ–îxؾô›GµT„h’¹Û½I¥ÅŠÜß”Ab¸Ô'uKÓÈcÌl¯ÃÄÕà‹(MÙÕZ¤ß‹>ë-!‚¯ÏÄøÉ85Ëc¤=įꤖ/ ùëSuеÂŽE˜´n—ÕP²ÏU‹±ûp¼Ÿr)&æ2RQh5–\dÏ[¯ØÜ×:êÊ&.{irD¹ïl%Ê\oºâeÐKNu5í ?$Kbd¾/V 4„FN¿E2¡ÿiÌŠwÍ(–ÊH…9ØPfïÇ6‹µ×*ù’CG*BíOv³-Á %geU¡«lgwfï B Y¯½¢󄮎÷>ð ™½l•< j»!¥?©ü¢{V-ÿF·Ÿ±„Tú]_¿<æí>’HŸ£q¢/.eµ8Ó«š¶±,}fL£®¦¦º<öWSØÜ„nP!•™^*iê^/´õr·cÖTKZ¯ÖiZMMÉûS•ŸŸ×²„^×õOxWÏJd¡I©L‘…äP0L>yÙ²Ò-#Ø´ýx Ç^ø%¹€èYÜ9}¸'ÃL›Xè‘—§¦)åD³V…°Bõˆc >P'džœ¼¢;Rt9†r 4×R/eÀÙ 1üÊryÝú„¯qÿËî°úR„nVq–_ާӮ‡-ÎܪgÓÙ''®ížo€ûŒ>{Hu¾ªø3zttõG±]`YðHc7£¯žC0íx%зÀÝwñÞâ•GzÿÞ’Ú}·ÿãß#a~¯IßçBýiÖÿÁØðMÈÏ¿ò˜¾™¨ ïáñࣇËïÏR/&?Oð–Œå€dàûË[\ßú5\†ê¤¼Yûrx˳@dx11\ x”M¼»ÜÚ Ã?^Ž».ÿ ]v£(ÑÕuŠ•?ûrNkÞß)5Ñ«´s!ÆíLÚÉóÑëq“˜ä뚈Je¯ †”yò2ÀæÂr"9*–}™é”e*)Sy#iT•!¢Z‰¬xá4tM%5—ˆrÄ%Æ‘x‰®ŸB¥F ÔQZ4FîTŒ)dÇH–,’2æT\¤›TŽaˆ'"4L³ö©ä¹°!Qok¡è:hÃxM)ÉÄ N•X’B$ó|í„˲ôÏ©¡1MùiÈ‹†’™'J÷R~}júUQ“8YŠºRmDµK±_=#úw§|ÍC,ÞmÊ‹HÜDÿz²c)þ?ƒüï¦6šºjª»B±T®4žÕº¥hu³¿áÇ’ÇLÃR¸S}QKF;Ö]Lmé˜ w4=ŠÃ)9isë¢âD.*%_ßÒÛAø=ïÙ=Eúù®/yÍ„H@Ú»pïfE ‘B-—‹Tƒ;­M„òl¥zÃéân¬Ó ÍÅ¢6kÖð*øÝý!Îå8¬íŽC³†ûŠg©zG74äqa§z"V;+Ä›^åh%\S¡´R^J C£T9Æ,=­<&ˆîTµ3!¤t#½r›,Wc'ÜºŽºc‰0ëŲðûj‰…zÊUWi^Õ‚)Õ­ôéº^®ºv©)âþJ˜w÷½ £2î½R)­šî¬Y4KÖĉðÌ‹&õ™íèZœ¹?ƒYùîp<2È%ÌTBu”YÑtôquÖu‹¥ö5î}@ÊlKB'¬^\±Ôuœ/ϱ¾Q¨˜| E )HØŽFFŽd¡õ"òf Õ==þ· =H)ÍRòZeJTâÎõÖwâJèPénOóGgCQHEŽÜ«y uÂ\´ b¬ÎCNt=»@÷i씇;à|¢™a2ÐùPº˜ú×hê¡;ûºÜnÝ PVå#b-w“ßZ@ ¯þð²jaWÛ‹b…:àÇ?Á¯#Âf‡K` $À} 0€…ÿ6²-¿U\}ü{³Ø'À5Äóï0Yéä‰~_bü—ž7ÈzH½k=¤Â…ï„hwﻲþ ìü¾ÝGßí]žÏk $àÉ×ñ½èŒ~¥ o½ŸÞfmK‡•vl÷†ÿ‹Ÿ>Ãô‹Wè¯Í—~ù÷Ãþ^?ùÑ~ùË(׋^Óù.LžÄÀ5‘f9äN†žxÃ.û×¶éf°±¨Îöabã‘u ÌÓ­õsrÅåÆóªh-s±É¥8íSÖ$ðÀ¹ØÌu2Ì !®§"rž¹mkЊµJ”"D$q*cñS¡$f°Ì$b+2ã4Rf,Q4DÌ ~NØ$ÍGÕxå õeŠv”=¥D—XR« T”‘dB…+\©"_ÇTM™¸TÕ‰ÉH (Q™0/chHf 3ËÇbCî©4Œ$»¨-ŠIVþê©Ü(µµî„»jQè •›²‹66º;™v‘˜§®j)¹˜Žú­!ô :Áþ¤§Ý]9µøt]]iÆ„M>Ëõ¿oíQÐ)×ÁE’•>ä3¥NJ#9Ë} ®: Ñ4Î[*Çe Ê.¸××Önƒ¹ÞÒ­´Ÿ‘iˆ LŸ×^¹¹Ðã1¬WÓFˆŠ,}i“}‚õ¤ NᦸvGU­¤`s±¡ ½ˆDöÃv7Å)o©3p‚…Ÿkãœå¯ûY¸~¨é‘Ñ[Nvºœðedd!iІÕ41ÛOóPà<ѽ@©ÆuKä<‘-ÇNT¯u7@vӢͧUª$‰qUʹMÕ/«/[EPÖLõÕNÈOQ¯¡„â}#¦NJFǸâvÉï‡b)—F’hJ6œ‰D8“´PU$LH#£ÞèVžw$äXX")fš#GékÉ.WÊÈJq‰b Jç {ÃE/ÙªT˺¼„Ð…¤K,¤P›DòˆD2jÈb‘ ç„2*9Žš¥Id'¥:¡º”XzŸ:uÊsÉE“lœ²Êyï"!´8ÁWœ¨ÌSÄ¡$Bh©]š,0e:’¨Ù2O~neŽR´>Ofqü1U³xÍá¨aÑÒ‰V^xW%i æ >ÞOý]&¾I™úUÙPq òóí<Ç=ØôÅÉÒøQNo¦/†,íBôMy¸¤a¥ilx}Ÿ·Î­e|4ñΚd…,®e_è!D[rR2U5ÊbÈ^†R&F§VŒâé뉇Àk.ƒã%‡àöSÜCá‘Ûú<ÝUKÇdëìÅ„Ý|PtI ’b§ª°–¥I¤[AÛFÖì':AW¦ê–h[Ï“ïh8­ÙR-;>VîK7ÝÆl¡Æ"Vm‰ÖŽ/vÅ&wÊ ÝÝäî…šZbKaã@M>Ç9Ïi¯¬Äχ(IIÓ!ÛCïÔ̘ë®^J¡ûa‡1;›R Í&dEðÄ̪ÜtìVÅ š.Z-„NÌå!›4ÊLYDÞZ¾¦ ¥ZIuGŠ—!•|@) ¦?‘º±ç-ÚL ìD,,‘§QD^èli¼‹8’Ð5ÃyM„Yv¢eàc wÅy t˜Ež3Ùg7m>/äff?ýª9ƒ?Íóßž}ÒúqÛu<ùNÄ{„WJLA! ‚f^e¾u×ÂߘMZ_ÕHòöf^½ž>…×H«ß Æ’¯êþü nJûƒ>Áûñ|¡2Ž_}KÚ¥‡R+ãۢ܀ H¿úÁ¥Ü¿³Ÿ>»±#ü ºùxJ]ôû»¤´ð ×÷wõïû¾=nñçÅø2Mß¶Û~ÄáâC<\ ÔClÀÕ»”†o?‡Ïdhÿ0¬(@€ЧNFø8ÀpÞ Ï'Ûÿ¯Ýé ‹{¹ýõÂÿzÂlXÝ¿œTC ÕÎØ’ RojÑÒêïJý(jÍèh°(q•e)éVÌSÎ|ϳ NˆJ¨2 'Å) ©J©¢œpÉJSxJ22C8ו4S,™R!ÀP$Ê!-™ùÂ9‡”‘‚)‰äˆ‚ Ù›\<¥®c>“%øLSbAf‡™Ç$£L ‰ÎÉoh –+9MsHÈõŠ”u<ÄÃB@aÚQ–8½!A¤y§qg ä•èÚUö7eRý¼ïÅɬ†ÆoORwª—d™t/bAQ…^€Ô¼\v¬¯«Á—K¹ 9Nƒ$ì)Ì×þt$êaeQÅGÒ¼`•¥õ‹¬Ë0á$  ÝùæŸïʬ*‹õ‹¿oŸ¦PÿTÈÓÉÞŽñó.¼,»_²içy^𮝆x±)²£e¥Z-YФ®ê¤µËÜâf‘Fg•âÌ•’HídÅ´,i5gëît|³úò˜§~¯Ç[ËÕL»â÷s{ão?©÷ФqêÓÚJMû¿ yÊO7*%¿|E%“¯eÚÌws¼>Šzà- §«±ÖN;#Ë¢º¼N\%Mg²0³®J¶Îªª¤YPפ;‘½aAÑe.•³sœîìýq«,¥C‰CÖ_AÂÈOËaŠ›ó̧2])"%:1.¯7óí ê4„DÆ3ëî½tU}-â"ç•gõ Λ¬½‡v>y¿‰èXíUÍ„!‚«BiiñW…žs#¢šàPñÂIh„œ$óuKåše%èÀá¹W)ät߇ØBªîDÊ–fšÕ~îÕ8·Ç¾<>›MÕQ³J.ǃóôKËG^T/ÙŠÐZg‰|=Šóv>˜³½]:y,ã¯,½àñ“7v¥Jw-ÔÕâ«™D#߸ü±Òþ`ÿa7éŠÕ¯3­^Ñ ¤Gò¸+ðj÷úÜ GŽY6?¢¯õâþ~o æÇ€ÂüOøÒß>Feý{éýÛé€/€SHo½Aé['iÿ½J.ßK*û†Ÿ¹ûòC¬½ýÇL†þ­uÑ5ÞmŽì»²Ë>ÎX}¿:\²A€“wŽ#¬E|h¥²¼=ùÐ:È >ŽïdÙGàlñû¿ó'€Žï€áÝGÉþSà‹·ÿ¹{†ê̼zõã¼ïðÛ ‹ÊßÞ^ÏS›¦þÞ?làþÜJŸ>A>ÉåÇ%“†@’˜pàéD%ב‰çy*Í€ý4WbîTš sùáTˆ%%Ÿ¦L•¦T)QÔ 4åJJE˜,‚sÊcÑp)ÂQ3Ï<3’yEÓ`}I)ÓìKð3¥¦”Â%b¢=)»0xê< ¼ 9‰8¦RµIM9mÍû¾ÐFr³XQfh Ó8¾QE2«hYiUeG³‰ð‰Ô™$)Î’T¾Ü\xŸæ‘µŽøxìsyÅ…¨ÙUµzÄim5§åk¢&>y ‚9Ó!æ°5ûŽ)4¢[Õí ,š©íè"œ·ÊLåÊGnÈ?sÜŽ1v¤tÒq¿dÏIòAÿ”ø-Vˆ#ìþÿΖ½}÷ì2ËG„ÉUíW»>¿pD¬ÃrÌ&§-M‚EpœÕ®‘µ/"zæ½)š ˆGìCιb²¦«Ô‰êï/4=½àúS wǼ|§aÏüòF©Iwc«?ŒÓeZžò®ÒrA’š‹hâq‰ØY=yš‚¼¨&2ïR•Çl&ª¶¡ËCœîÍÆ­6Féú7nÅÊÔŒå]¦~¨µ 'd06 [qcÌÒˆaîå<âËÂc4r÷cûõbªv7çw.+É’Œ”‰„öÈ.O,Ï'iŒ!5T°ªªj"®X« .ù9†¡¯„ö¤PJá WÂÖ£ÕÂKV ¡Êº@r.1%rÜÛš©™4™¹àcô ÷«³²oó¾‰S 4Î$ÍdžßY¦ªZÔTWI‘E†|mï)æ»1G›ðÊhKÏÛá5¹WiäKEŸ(q˜Î9¾d“æs(ÏB^³¸9)¹ä<†xÛoAnqðïøî'Àâæ ož \C?sï±GyÔñeƒq¬Â²Á“óöAìÞåWÀ«·Bg9½«þþ;aÆß@±¸þ¡ÐÎKûß $>4zõöìOdY¼ÿ&¸ý p8 âƒMyO°Û}ãHq{üÆyüî!qTþC`€üÀýGí‡À@["Õxòw_*¼Qó«s‚¨0Bò³k/-üÛdŒG~f ç»Òî$}Ø”pu¯ Ñݯs:‰9W^R– ®µ45qŸ£Â@lô·¹è¤>Pò(ñåÁ1ª²NéÄ0NjJ@}¤³'œdäÌ0A⌘ˆYñ¥¨œxˆ.dëËXJ¡Y†])’°"æTnC¾ó®=¸d)mH"æ"ïu¾/$”à©Ù¯iV¥Í²òÔ‡rœœO½=ãÂPmé‰u mT²f´nT§gðM71¦°ú@ÓÇǵ½’t™ÈVN£q¤í@„ÓV²cR‡$D(5Ý͉+²ê–Lø¦½«Óª·ë(¤8KöÜK&W¾çsªÊð¤u7×­5ûŸ©vü=ÿ¯œôÁÝï'¿ûçZF{Á¹U›ùý½¹S_2 q 8ÍV‚,˜MEF{”ª©RÌ~ιOz•˜MaÊ>0ºÃá6lãN×:!‹áçõ¢WI«Žcß÷ûPh59!Ô/ï­X­gz)NqBc\ï´”£Ì.Ú@ó®8OÚ“FòµáóE(£tSM…ÀìèýBÔ+±\‚Õœr9ÎÕæ(NBî+ŸÅ–·‹Vp.¥­ùá,ƒ&y¿·ƒ¤¸h#R8º4—ꌜAµ}â~V%V‡ißÏã6ž"£¾ÍÒÍUûÒù(VY6Wì” ƒf˾ì\ÜÌ×›Yó›±ÌK ”DåA¼‡ßXM¨0ü*~[ÍßËç©dP<©ð3„à€Mø w€ÀEö³Ý½™= ÷2·÷!ÁÿàÊîÿuëüÿ]ôÇ].>@ªâ}þìCÓ×/±Ÿ5CXý/U¼ÌQœÁGìo”î¯wz½£ÆìÚü\høôÜzÈj•AT„zÊ™.— g*’šVC¾Ç—ÓVi1ÚtWôÖgðêÿ¡Æ¸ñY*¿¨¹ŸºÂü½/ÊÍ9mMHD$ZAe­r!”x`éiœ‘™ó9øÄBæ…˜lž})Á'>ÍÄbÊ£»Ÿ'?ß3G_q²àM H ü ¢Ss6c”ìµ"³·':.x]Yžf>jI)q>Zº+ôÒ±U.21A)R3ÕtÝ©¬Ä‰Ÿn”°ÍèöAaô:Åu[Ò;¦RB*‹A,°»ý`[ÒŸñþûù»ˆ‰/ÜéRÈ®$Ð[Mö\Þ¢ÜBL½?nšXBŽu¼2NújE‰6 ÇÉ!ób;*ny<=ñ;WïôÕd#gCã‹ù$å!:?0_Âɲ¸ø jÄô…’¢ç€Íè@7í1éíTòþ澜ER­™8S¼&lHÓ0^Lg;)ÈfCÙ‘,„LŸÖ¹6ù¼«•^ÈLR(.˜“­½wIñQîý4¤°b…eVr«^xK&QãU IDAT MUKù”gÁK“¸ Š¥Ÿg®(ˆ£³§B6³ÀD#åG¡˜¢ë*p:„ÑÏÄΓõ_l¼µ»3’>¡Wk&.ÚJpV,…DÁ‹Zr-Ì}Oe)+Ë®J×ASÍr¹Ÿû¤$þqrLî›Õº½ŒºrBMÅ·ÁWE¬i},iߪNO©Å]ýQÎŒEQX…²¢òT¦ó*/D:z‘Ev…N&ž#D©(—‰²úúè|i领%n„ Œ–È%œé˜ÄÑŠ:–Áá1véxE—‰6¹Hc‹ˆeÜ’ÜçtgÙv:ÓcÝdwAF]ª~¹°uÍXÏ&ß”|)w½Ä¨@ñ©zþ„=i‹v²Ú,6÷bBø¼œúÇ1|”i|r7]#<Ä‚âx Ðkàûoj{W÷N쀄 ¶ j¸GÀæÛþ6]ï‹,8¦îwdn~Tq˜50ÿ9ÓÖ™4úÏTÿ@lH?©þpIú±¦?p 4owaßÐ×ßÞPO0^ÿ¹÷ÿØ­+é!ðgõ§çþ-|œGðà?Åuÿ9ðE‹zËþÂê|¦N†r{í?!†Ÿ=yysùøyëP»ç™aZ#¬æ²,²ˆœåS™Õ\XÖud˜ùJI£\ƒ1ê.\Y[Ž$Àø™e%B´)b0ž2µ|ö5wš8eK)[3id¡4Q©=)3‰s¡±”±„’f9ø9Dï¼S‘¡Œ÷©äê0­Çð‰²t@}’Yvq@¼5²ÚX¨N‚ú¡ñ#ÅÖûe©j—øü”FÂCE$')ó”\LUÌÌfRXB1ÓÑÔÂiÅh½—a¡e™•»nÁYgl&7÷9ÌNÒ¸pÓ8Âçí1³1“Sê}xÄ:ß¶˜Î2¼q±±öNÑß“|¯ŠìÕ㽯îo¦î7N,´£‹¸ÛŸÒ;B%é8«ÙL ä:´ºm+.q9Õòqt5c3—¯ï^ºríå2Œ4û,¹bfwzÈWŒ?¦5)¿ìã˲¨2/¹*#ü8oóžÞBòrRËœ²Œt \TŽôŽ«/uPWzX²È!©kª’X¶½ÝÂÝÂmÝ+±žOS¬]œ­!~vÇIšíHv.Ã~¬”Óµ7ÿñL$FC—^Ûrª±¨…nuKYšòÒÃKoë©_-W ÙLH3? œìއôσÛ䀺ÿ?æÕ/±jF’Ò*â%£Q.ùbé8Ý«Ž€87ºÌÆÚk½n8eÙ³óÃ8ìì$«[Åâ ?«ùOŒi3WÛ<¿ÎîŠ]/ë‡$°£ÐŸ-OžV­fúo²)Ád©IÓ ¾\ïe·/Wtý„].j¸Ý¦èCšãŠOTt¤ŽÊ5ÆÇ Œ æÒèÁÑûØî#3Ä4ÉhÎ= œcCª°T©yÚfBb^dfJ'¢V55±éîmF“ßV’W`êS!‡Æ1•G*^we]"•{ZùÜ?ÝÿåŠuëÜñö³*ÐÖ¨=Ž3³7×ïM|ŒV «-®ß|³2æï°¡¼/V{±€»N9V;`…ö3ÔÜ5vÏ<‡$~U¾-µßvZúzýƒ‹_ý”ù'WçÆãâaIý½‘múмùót¨UOÉÿÉ?ßzeë8â= À?}ÌXêý¦×ß(ù1k…é°øà#<ÄcØw$ڇ߽c GøðKƒé» ÓK$Õµç6žöÃý>f, tk,éÝÓn<Êä«i}!Ãg¢{b+ˆH¿cd9IóiôÇR¶X¼<„…›?³SëäD ‚CÌ—>l4·ª&\ÆŠ®egÝ’WFúº.¨,TPQX±‚DIfrÎnçÃè¬/„õq̹0ËY,¥åqîÂÌJ Ê̦¥“ê\Î%ߺ™v‘t™ Jr’:ß”ªšÍb¯]¢y#'Ɖ” 4œ‡ô(ÄBÔ>“Ê1M“69 ˆ-œŪew9é¥0Ê^…‚,?uz?½ÞTœúÂÝD YÌ¥G:ˆ}““z2MjjXSsYùBŒ­Eö`ý=¿&/ÁÏk˜W‡—ËI¹EÑ/ez6í©¾ëH•:J7¦Cœ‘¤¯„H¦_ww3éúF:“¾žäç\ÜÒK/ãRé'¡?ážæaâáXð:²EÈ#)2DççÑÆ>qÃI‡zô1l©Sþît£ŽS)àD‘ÉH2ÜÖR£fŒ…Á©˜J•ÀŽøf´Lëô6®‹3UTËj׈žFßîíe;HB/·tu4e _éôBÌ?ëõ3T+ÙØZþÖ§¯çÀ´Vg²^W Êà’˜ƒ ‡ÞÈ—{ý‹‰æfŠlžÂVGï§`÷Çͭ™]ü§>?¾=.“gÂZÝYðL+ßr¹0DžæQÑ£oøH„U<…”GJGFŽ¢"2:˜HÇ¡t¸Ñ¥-1ïœ|]B]BÅŒ/ èIÇž®êGõI.:!¹ÀiŒž6êZͯ|”iE.žšåI§=å[B¤ÁÒó@îc6QNIužçÔ†‚¬©¢y]‘‡éïåÐ¥òi ÙÖ‘ÇAîŠ/%Hé{N¼ƒc©K”VfŒëThC¬U°cÜIÆ×"ÔLLBÎÖöe_ÒÍä[ÝÝßg ä§tSºÃð˜}Ò¤±-Þ{x¿úÉòãªwóŒï€N€$ÅÞ‡1kŸIöX%ÈòžÄAb $ß´jÀ_{@Íê 4àÞáXÚªªåz»F{¿RX]kâtòlow’Üþ˜vš^°G-¯ÖfÑÔ„!O‡œŸíéÄêC™ªúç}y4ëã6W»ùê–/õ7Ëär„¸ÍSw ŸIjB¹ ùUfÛŠ ¥——ëåž°©"ʬr%…¤Œ<¤H‰,LbÆ¥c³‹»%éÆN/£ûE,,v¥49 BêœgÉn9ëj|J³Ìá 4æ€È^O´É4éHþ=%¿w¼žsÊ´o‘ FÂØJÒÇHUL^:8R¦Vz˜œ,R™‰@aµ¡MÝKYŒó'ÀR"œh3É(·Ên\»)Že¬í«È.kRA6Yó¦’SÍwVÒÙ²c_…_ÿÿ÷rÙÍþ¢Ìê4èïü>W/ž\ž¤•ô 冒ßuqšìÄÆŸ +÷“ϼo—âš›2&B;JÖV¢¬ªsgýl‡!òB©ç¬‚»r.Ú£¿=ÆÙ)ÞW]Ú§3X˜oÝË~Û®«’¢Í"ÙpËÎÐÁE?”(ŒÊ’sGöÜ»‰å, _ŸŸRÕÈ-±¢*l¸˜OŸPbŒØk>èN•tzÒT¹«ø± ­ZHORÞöV_‚Ó*“¹)L檙Ÿåa9¶±v”|óˆNÔòy¦·\­.«]§–%üÍÊñ•»rñ4Úf´¼eh¯«ÎÚX¤?¥«’R; r]=,Ÿ³*/¢0XMlA„è0ç/ÖÅG\ž3³Î+ÄîÉ¢Yµ|]WZIhöKwÜŒbK}®Ki”I2Z|¹¦DÊ FˆG­9áua÷>nF0ÊY4œ„\2AŒŒq©9#†ˆå¸¾rçQu’ud² ‡â•šfF2¶¤L0[Î~Ì…á"3uŒéŽóUð•œ=&M\ø¥ ™¶÷Aì‘[ö “š“«9…¡ê׳H%ìÌx»¦^K;þH.Ÿâ”@^®î·¸ÎØê€ÅŽQ\ìÞ+çxFð¸ =-'—X?‚:`wæxq?˜*”Iàúˆ}DsVhF(öpí÷׸ÒáÉ[䘾·JN0Ìg'<à\Ûäã À °ù3:|ÐÊaÏŒ÷X§ß.ùóŸ X}çÌÇå= Ö)ðú R‹(dñO¾ñ2üð‹0„‹Ý´uðÐï† C…ñÅàù[î«H6áÀpªPI¼Ù"CÞ·–ùhnü¦È’|MŸkâiå>÷ Ö¼Yv†W*Ƹgò²"S`– 3€ ­N…ºùYÊ…¡³½s)lÍÅ,eŠ´Ýßµ«õÁ–~˜Î3É>͇òÅ ý /Uõ;A†–ÆÃW…»…ij&hûè‡ Ê$Ùe1+V,kú«1."c(YPS˜Jø™†Š&Bë¹ã׌!“™Òc&H0‚­2í©:–Ò'š («&}*¹¦õiÕ,yM%…( Þº¢ËŒzF‘)#šN·c »)ˆCŒÅ"Q”w”L(“ªgÖΆ[Êì1éu1ÛÁñQÄD*ž¹([›Sÿ»ãmô7tþ/ŸÈ‹“ºÆyS¡9-œîòÜ»Jþ{ÆÆLŠž…_!ZÔ韚pÅÏ_‘ö™ðñ²?VF€æëšüÍ ·†6Ù¥æÒÞº…Œ%‹<»riÒ<ÆÞ”ÝNù¼­î.ÁÉLÂ8¿´nó& 6{iÉ#çzÖ2WJ ›]ß§þ¦4¥fœsh•e"õOW´>% ml(SØÕ •_H¡¼²½Ü“8Vå¨x˜öñ¾‹î&QëSÞõóIÇ2=é÷$Ìs…ûbö­mn÷"EõX±# ÅS5æçZ@Pmµî¥¥î¾²»;_Õ–EŽOÛô³E2²hÇ´_t¹ª² "5•{ž÷6&™BbTˆ¹R”ƒùC »’Æ3ñÙ£Uó”}ÒQId+Úª5¬$Ø~Ú óáõ¸9}h1-YiZ!Q„#Maž”Ê–ù.ø§” ¦PÚGKÊiÎqoSô„1Eµœ…¨L %÷µDHz /ئvÇ¿[“y*>–ãTª¶ðµ\WÕ"0.KZÌsrjÛ‡š('É(Í#-–c,2ÉŠ|š²FžÈnCÒ+]!ǽ_oæé*b@5ø„ºm;RÝË‚4O³j ŒÎBìÐ?– ù ^)Ò/ÅÓ4-×(AÀl4pÄÍ×o§‚S€Ã°0;œJî»òö#µ1ü‰‰´Äì¿ul-ðñ›Ixõn^$n~Ø€:ý…±¡üÑ>ž@]ÃùQoýŸí }Ÿ§»è1õ~úæ’XÓ·4Öçá|Á?„Dól ;#aÂ80æÀ{}`¦Á¯Ò?-Ëâuo.î<ýý|]íüš<µÕ¯«}½Úy½ÛûU0ÍáÓ¶iE"Ò‘ÅüU™¢FV¢ÏòPÒÆ;MoHÖ+y\.«Ë²•fK²uEÑ©³¿=¿±‹ÿ²\¼æÿ$üQbçΧrœvä¶NGSªÀ™ } S&‹ a¬S¢ÄаÄH#"%1ÍbOÉÄ{È%!Š š¼wå€4J/dî( ‚$yU8 ôoIêê‘–@@2«CwÀÒÇ®€p¥Z£+®'¾dDÅå².ûdE²)×D虦)ŒãΗ} !´òµ" µ–QËœ´%¡õÚ]ŒÈ4O‚¿YŸÎ³¿T‹hÙ2ņF!æm¸§ÇßžöÿIY-ÍWY±Q]2µV\ yú×ËÔ’ÆW[Sèákw‹¡F‰8ór¤žGþ܇ â3žÐf¤·|λ)”m}_='EtûD§|Gxa³’ŒKC§~tÜç" ¥­¦Ex¬^y3l(u…(±5ãÔ‰¼ã]Ï^Iû‚¸a¨DaOii´(\PRÒÙø¹˜®hß9/_1Sñbš©»fÓ¿N“>šÓx”vSëÜßѼteva»™½9L´rû|Ü$œ#›˜Íi3–òÅ}VK¡[vrô‰¾¹|Üõ—AÇÅ §A,×ÄðP™Z]bµjWd­A‹Ë6EZ-ÍI R“;¦ÉIšì9=Ãlx“V·Ò賓Óe»:=Í’ò"‘B!ó6‡én{wóæzŠÞ“¾ÐÜíxAöÇ*Ï}A°ªŸüLÃËqrÎ×Uuν&ÅÎ)„l‹µið»TjYêe¥<¬N£“Ûœ. 9¤%•J“’ˆ¸—ÁUãÞ­Tnt˜YY!Õ)ÏCr!gCµXi,ös¨²?·™zÅúÒOÁ¶² ¸ÇäÅ­¼;\æ×iætl¹Ïiµ¹GÀaF<¸C¿…œ=ÊÂ3¸çà*†X@!Rµâ©fäˆí&×È¿3`—H_"Ïå%»/ý# —éOæß:Ãhû]=û?ª``@·Àñ¡¼½W!ôdP»±õ@~“kÀÇê#ÉþOX»~Ï[é»—D¨l~o”“€„¨ßƒän‰ÃêsBJ €f ú=*@Ãs†{Gi:?2þUuRVÍqs+wo¢ÿ,_)\Ð9<óòâÿÏÜ›-[–\ÉasÄÎtÇÌÊP &k6Úš”Œ"ÍôªÐ?è+%Mo”D¶Qjtƒè&ª ¨œîx†=żôYUY#ÐÝ ©ýxíœ8{ïkæ+bùr÷G¡ï¼5µÝE‹O•n¹ÞMºžÄûKàjáa”ìu<¼ôÇvÿЮì®íôçΜ’ùÿ=žˆ¼–G û#}øg¡4?Ëâç±{šzÛÙÜrcac¥qÙ!J,¡ðÊç°¢4&SàS¶žª—ÒëfŸ˜ÏÄ&+«ÌñËKT ä Õ±¨¿#þç•`ˆ¸¨’{ Ïæ§,_l7p»ÊUÉ`À5 A"×& UT°ÅVÁÊ$sEâKÊÜ R(ˆ9ê¿ V2™åÈ1™ê3¶Už+ä²ðuP·ÞË[uþ¹\]nŸ}L|>-Z†8íór^ß㛳tiãjᣯ݅ìèÂÈÞŠtÖÅDóñô"ÓÆÍWA†Î~&s#WâÁMýþñÞühv¹›f:fe?3F Ë¢'$CkXéw[n|Æ-KSÙ¯ÚQ›ãëüþð¢\²Î‰Ô™®Ä ΤÌöàjËIŸébz®­}cÕËÀDÚ·aÚ•EïUŽšS¥c®w)²B÷Á‹ºøö¡yíÃq]¼æMêýïËmMlH«Ón垬|¯Ÿ)Ѷ­¦ΓöQL‹®É#¦¹ú9Ÿ UÅÆ¤D=Küa6·ñœ ñº8Ý?>ÛÚ Jó(Ôy+Î6f³kdw~&ÏLÁ&.ÝuŠ*njªH1™údD|„¼n$[ëÐ7}׬ß_o;µëx£ “…Ër_ÊãœnêpÀÝœ&6H'Ó¯kÚkŭÏmô;Ýùmž§Ãœ˜žŒžbíÂm)ûä)Ì,‡œ0«˜s²S ŠÁs<q§ ¼¬Kˆ%Ô\çt•R¿ÉnMâñuØiˆ³Du¦2)’NÕ®]-õLçFÙ]cÇ&Ø!-4©)t‡‚¿wýáÔüç×jösDûÛ}h?jÖsêÿö…ùÑÆªCM¯ôg Ò ÒŽCJK™C™‡×é& sÛ]ïv=Ógší6”t37"(e;·æÜæ"),ùèŸé§l'éJ–ÁøMb>…ÄŽ žóYçœèq(ûÛmú9§ÿCÜÿ¸¼>_.îkœ*U?©ÎVQæ IŒ"”âjTˆtàÓ4³•ŠõÊu œOãeA±qqjæÜV+eIóó²T=„ÊT­X¤½uÖºvÕ¸*©`&h®-E2è”u{LBøVÉʘ S~)¨06„™<†œt&ír“â\;©$ÍIs8àa‘yq{¾ºaô×YBOðËÏ0™-ûÉæôôZ&u1¨2ÉËWís„{è¸ÃK³…2˜Ûç“‹Ø{; æ1þ[²±q…¨ñ:Ö÷ÕÆÊV©ún‹~ø ñãW~Ó?ÔZ¯_0Õ? ‚‹_RâÏpüê_ì‰ÿIЇÿ"µáü«}ýÛß(þ[>¯þÉ?óÎÐî:áÕ·¼¦o¼ñj‘î­Þ¾ýÝãY˜Ÿãï¿J\üµC¼à÷ÀküÕ3  ð¯þÅ0Àı==ëâöâ|šÙíÛÊÍ(Ý45ƒÌ†-Löªqyóg³±=nNª]3¹#*ÝgÍÎv¡Å^“õ‹m«nMÛµ5ÐȲxQ*¯ÅU“‰knǵÕÜT/²²J¬û`Òq”ô»ª5dœj $OA;¥Ï*UasR/¹.u§æçvx™Ò®v]fïM²jyÖwkÎ%çI‡{¬drfiDÍ,ψkAFGÍ…¼…Ú•”’úZ/êZTGª1Fv’ "“¡tºé¹¤¶OFtD?¡öÇ]ß3ר¤y™‰/¢ÞO%¿î§ÝYo:Ãæ >ä¤BùOËİ’_vçéêú¥úï^uÿ¾K¤å9–¥Ô³I\ÕM+B1J5ã¡ø–†É]_·Û°œÅrÍ…Pv+øÝßW}ݲØ]Û[b êÏøÃXŠQØÛ{‘|j?VÝyÓ¬Ù–tê´è*¤Ô5¥Ó|XÂa?ÜÖ!öµÉò‚Ř™¸cŠÄ‹àKM<º¡KŸÛɲOU¹“ê?[µ¸÷~+ßÄ_¸î*ÐÚ續W±ÅYNi¼¯3÷ë¬eÓ0 ï«K],’1-ˆ¬þþYÆJ‡^~¤×žéµµÆ ÝÂvFXžhdÙSºgJjÄ–q9-ƒá|šNãÂk6gzÕ± o®ÆªÄ¶³mKM‰bB=ÕD”«õ2^†|:óiáµË=×bG 5­TÓIC“ü>Çô0JÞ—œÔÚ°FwÚZ8SDNk‚%gY %±u±Ú v_!#‘kÖÄ!TzSQëyZâÀX|ÂGò…‘˜ à™P›•îµÔ²£šû‚^TS TÍgMG±ZÔ*Õ§rz¹9ý¬ýìgeËêS]¨ø™PÂìÞ#?"öçûgŽ×1|z8ۊؾáŸ?Ã|¶gš"&°Ì@¾Þ?¶¾¯ãÁSŠ%ŒåHˆàçϰ<ÿÖê×˃—VÓÛ/Æ–~@÷ÎpøZåhpzK²êÜéá¿Hm(_€õ ÐoêÄé;èù0—ýÆÏp â ÈoWú²¿¤é[¤ žÄÄG<Ÿã›o5€€k #¦øûúÖh÷ ß#°vqç ³«"#öènoíõífyåÒ¿hªLZ:‰x'ë]eµ.œÍóãg«Ð_=˶erÝÛ±Ý*?ŠºNž%¦–x(l•² Š{–ˆq.¹l¬@å iY¯‚P³EEU+fS«Ò†2–feª¨­FCü\h]¢Š2O•-”Àb)Š˼îWTØ )•.Zf¡£ŽCMuÈ}Ã} ^ù ià† ¯àÒž e8DàÉ«„ÌDj¥²ºf7™µ'nªcÁZQVjß§Õæ¼[eh·Y¦Y¾Ñý.×§e¿AV¯‹VŒ…*›I©“wJÿUÝí_ow/«ÝFUôÓ®þ²É÷jyôSˆücÅ."b<ÏOxfDZF<ïvÃ'éÅÇó?ïF{6É•#¡ÒÝ«ŽþZ6é}qùu ¿\îÕx¼”íåÊùA?DÖß›nÕw²šfÔ] §² Hs>íÃýïǺ/Ñ>Ý©¬¹RS^2†ÜΦ$Ì,åGY”g3 Ó<<ŠÕéÚ¶9JcVWwêê7Üڜւ¯Ó üŒAÇО6zUIQÚ/SÉ,ßÚ¥çfhBÚ3°’Ì>ÁhU¬¸Š·²+ìᬬ35OWxçíöÊj*&‡JE&ÙF(˜"K%ä”e‘î²4¡s¤ÓHV•Ë­â¼ã‰q8°+!7´„%Ç=é»*\S‚W£±n0ý…g½hdVÑL!\ó$5iòÕùUWºNp#GfÖeäÕ:¡¸i²æi‰šO›ÚMI¤ßÇ4Õl«—5x*k­æÂ(-øÀä"¥:´"Tý˜+ù,‡â˜‘+½ÒMqÚ ÞŠ%Ç%FÃËJJÅ6Ò ÷æ\•Qh@ã% IDAT3Hƒåý°ô!™O>‰çÃ0a|8=Ç!õÑy’»“»gì¦QD;áƒañɼ˜°{‹0£Æ'åB'Í1ü¼Ç¡Üˆ/ðç<âò9–ˆú}Gú–û—VÓ¼.ú›»ýZaøz3Jh”øß¬6ìßAïåË©áÛº³?¬¿øWÅ ~÷o!~ß[ €Þžn8¢ ðÜ ÒÛãÈ S°žÁÞÞyð øØBoEœCý›–/múDàà± ý®´zÖá!ÉkÓ–’ç&³2 ëf“^ÿ+[þ àþª¿ÏwÂ_yÑ–Ò‡«F Áÿ¢Š=ÅU‰$ãc8æSë…=cUŠ*M)°(Rø˜ªOšB'˜®Z3Þ™*œh¡äìýq9fÁjw&•cœ8Í”eεVUd#á£,IbËWFÈ´”yæaŽË1ZÆ€.£MQ Sô´je³r14â&T)³¼mDçÈ5!³XsŽEV¦«åJ …ÉšGÉXRVÈ*j=gác!øÚ=>FøNXneÃ,÷±žfQ¦-°¸«ÐMÛ8‘«KB7ÕÙ§ÿÖ'w›þ¬Qg*aã]=ôy©û¥¯UgÈz_‰«¦nòéC_/¯®7/V-Z†ÕëtñŠof¡h.ÖOËÆÎªW¼e2-B›åÃú?©j9[Ë~݈DŽùŽR³ŽÍ’ô1›Íp;ηòåîNÅ…¦¡X…KåÄcµ”…µLsŸÃ˜r˜Ém¢Ç½ðÿ['þåÜùÆx‘6Kí¥•¡ êœRšçTÖܳåˆSÓÌ‘fm÷¢C ¨}mšÓV=…maç¶q¢žj“‹ËJ³K%ª³fӺλöââwRe>öyFˆòÄ…#£ƒi™\d2*3…Œ1BrK5Ë-“¾ V³M…-Þ3?Rôã'íÀW³:03YWV¢7Älâ©–ÙÇÊb—ÑȆêºÙ¶ÝZv5:FĹLQ¹MIIÇd3s=Tã‘©dåH·iz™ä+«|Ë£wá}Š$”£É´YL äeŽMa2@.žÅcí}N«ÒÙ²ˆŒLÈ`Š(ø¨Ó©c³uNŸ\ög bdÛž>ã«W¨Ÿ3zxîæÜ̘,Ø}ÓqÑÏ–D£i0F  ~Ü#ºx°¸7@vðþ9¦7º‡w@LÄð…áðæ]FöŸh€¡ýwï’¿K*ñß„o˜þ¸òOàÀ+<ߣÿág¾Ì&ü ò#räK”Úé«q®ˆô[Ybfo{VËI»Æ³F¯ÅŸ›!LòW÷8Lá¯jB­¿^ëK7,¨;°O*ÐuVTžÛO±¿ñáz mlžLö”šÍ⌮º¸n)ÚâY¹( ‰·#%NG>Ý¥ñÖﻬaê¬ q¶‰k:Åj¡s¶Bs%²”ÔYÝiË™Á€9úFsS¬üXb)XP“²\hÙÆdWÓµ²3·“o—eŠ{¦xè*qÈ*i^›B:+£] ª KŠñ3^gANJeXv†ZÈ*…$)¸tŠIV|Õ‚Ë@IUÉähíë¦ÏØ”áDÅ4Ö¬Û¾òf¡¨7²Ý×Èa˜/k.0Ö6{›µŒéqò W…žŽ\?7Ó# M݉Ñ1áf}™ŠÑDex$òQY­qQ`E—-r†ÌR-qSHäÉ·¤xvHWq,Eܪ«¤dœÜ±èfФe»jzáSÖãƒ`)C›ò4å—5>ïì¨D;áxŸòoÉ~¾½àV_ÍÊäByôó)57Rž=uvÊS¿á[»ªÍÎn[VÙŸ/>¤ù˜êKŸÍL]È~&McÙ´\EÅØc=ªÏÕ¤¬E·Ò}×VWý†bõlJáÁK˸¨jym¤»PêZàŒ°RÈKŽiJâxWE9mª['©Z¥¬T|†Ê!Á¦dæÈ‚@¯4—’‘AžãrÏTšÅ1–.¢ ÄìÒªæÈMNRÓ5ÅL{^ÕÄóÈÕÀYGÍFiÍš^lºÚ`A,~Jyà“—©cĪÌV*¾è«/åô˜â" ´bŽÂ½™ò®£Xuf­óZ#0”þŒFe}â1”6ßüÀôëOÆý‹™Âªm FúÛ:ï7Wøè|'?ûüMŸz£‘"x>ÀÕ\Ò¯òŸÌ¿‚N`øÒ6ô]Žù pÕïmÑç9ûÍ]ò[‡WVÞ•Ú}ŸÒe.ú¹Ì»ÉvßÑ#S@óµ”  â…Á6hàøsÔ?\ @À(_Œ?ùö­×Rÿ¥\è€óEÅïVÈ~Á'ïÁˆ]ˆaPÍcÔ@\°}…µ¿X__ ³ ¹)§˜P«Ld¶Mì$kaB(GŠÎæõ¢f,‰;¤™1Ë|¥x-+­VλVs­£X©j¢TæTCÒ&W1®I—£ŸoÅç§IW&ã$Lö[¤z®iËKÎ çQ¸{ÓO¯Õ„k§ˆµA½F+0”Çþõ£v²<ÛT8}4Ç}¶[4{Ø=6àá£Kõ"> œkLÐÏò;ÃH x0ÀKįÑù"ˆà„e_—|³£î€‰4ýDBß4“øÿkm¨ßW÷¾z館û7ï¢o“·ÿ:OÃàWÞ(õÛF^l¯¯ž\öM¯$6ZnÃÌÇö³¨ßæ=¾ÞT1ËÊßøWŠýǨþBú~Õþȱ•é¶ÌµQ»<}NyŒjˆ†MyY¦]ÌfèLÎŽKqÒÉ"d¢'bYuZ7+¡;’Á°Ø7–ƒe^b3;»ò65ÃöRe™.“•‰?TK…ùigÚô‚xŒ£>¿våýÊ^¤«g—”Ì*Ÿ²€¥z`ü®#Ðþå¨ëså½ô2ý§1œÿHˆ¶¦þ7qýtK"'dçI#çÍo^¶P¡^Ao‚r¹ÕiÚ—(î;É·bªÇ šIK.«0n÷Ñ?äåwŬ¦wÓêÏMý w/ÉèÀÚ»ÀSdgY[VôÿXñQ¹ü×.k“µ-ŽgÉUK-ŒsC¢ÓìÂbm4Úö‰çkaÚÁ=!­µµê¼:áìʦõN¨$âH塤!×óÞ*eYNrVcÞœmÔSÉ£e÷Lz„ûeð§iȬŠv^‡°°»¦ÂøN‘[¬N´¶i‚ÓÝK6)…Xäšç”S…r¢iú‹¸©Á•¦{ABKÆ&*zFN0e©ò,81å”Èõ®ÄÇg1;[Õ Î+s-«J¤âx6ÜeÝDf ´iθP©Mm.š+-dï”Ö"¥ªY¾àÄ”ªYR²Ô.[:»Ør• K´†ä$f*ƒg•é-V¤éšF²{&>?µ7§¢îYÚ"3G¨0Rÿ*_Á^IÖÙõ‚ùnÕ~rjð÷¨Q&”¨in†ÕuÿwIo+"6}ìÒÏ¡4ht*GŸéoü¢€½q[Šùë:ß„ø(`xøf'ê\üÖàÎæ „<¼FöôÃÛE웉ý«Q¬L[ o‚–ÿdµAÿ£›bßí‘þ€“RþÎ⫯¬†/xﯹn|­¯õÀ0‡/Er_=Eúº¢B»:"(®¯xôqÆ €/åâ ʺ§R¾'uÏ#ÖýºÊ웘3¼Èê,»M<ãäÅÅm^ïOì‚â/Öûm¶6ó¢Ý¤£ $ë<Œ¿^ÄÔè–dgø%¤«èoDí¬QÆÖUKhµ1fÅ›^(݉ `yÙ "ù‚íí ’$!¡<˜€ô|UJ#ª©Ä™ÌÌÖ &¸)r–Ü0Ç…,šDºNqŒK9ŽBûV¨dMzÅMW4$ ŠQ¢r‰ÕZ•«…s¦y®Ùû¦”‡”>‡¸ˆA>‡™Ÿfx*"§]M¨êõcJ6måÜ\²uïú’¼Ì‘^§°I¼ÏÙQ¡+9<4ó¿×¢ñÝUÑûÑŠv£I¦}Îq×UëjgåuâŸØÍ¡S÷že˜ø`3¨1¥ãð“Bgg•‚0™7L4ë§ú£¿<ŸNúwÿç礸mg{GgÝM:ï”n•ÕZ0#Ã0OÃ1L¢›¦öqaéxz¹\ü;^þ{Þ_K)ö§AóÿªéIZ뻵Áa¡¼ßµý¨íþGm?îH%¬ã’ 5<Îq !Ž\FÓ5¾iøVö+¾YsãO·€ÜÏ.º®MÑZm.¥êsÎ8„ãÍÕë4ÌÅŽ´ãÄ[‹–=[ÿ|g>.3 ÃMe÷F<Ÿð0v'Ê"ø‡¹µ2nÄ#àiÊcZJ؇"›^ä &¡¥9ƒgl¨,K˜P.#Ñ&î&)½¬e•™*5Ö:I®  ƒ!Hb…*Ï2dÅ8g`Œ‹§xrqײ'B›jE5…é’8çµÑ T_¹+Q Ig¾0—EjUØÔª—Œ±ÂS!ð M²Å©2N¶Lª„­©ÝÖQGdHQ”À˜Ø':‘T\l¥ÞF¶+9›ÇùLÅZ(èé" ¦£//¡: öP"›ÕhøùW(`ñw@BÛÄñ"ân‹Gà= ¶—ØÇ-Ô3à N!npPxviÿ[v›óÀŠã$5büNïé mã÷íŒðú;àîÙQ<‡/q\| üß.¢ßIýb+ÀlqÚÀúOUþ¡i_»­ô‡?ÿ^Ö~1ƒtzçœ1}K¹= 2Ð^#½óÍ»6ˆ:"J`p ê³òðœ#j 8èKÍìj1‰Jj³Z™–¯Ø¤ùokžb¦,Ð}<÷Ô"Ûyòª­‚èfBáåúL³_9àBúµX¤àA®ys-dÃ-’kæ:k×k׊Y!…ж7z]´“Ê@THy00.”ÖÍ=÷FN%ªK)•"­Êkµ>WÆxA¥²¥¸ƒ–ű®™ámŽÄæD|&,«Ø¹ Æ°l…"(V2ÅHD5/S¥óRˆ X5ÚTBˆäcêÁ–GEGP9@„¼ÖµãV= ôÚæ\Ä*µœƒ â…Î)¯yÝ4…G6K› ÆK(Ž8ÓS¯S9Õ®žóÄ[‘ûtln²«À”ŽýÒïÈm>^kwyfW7êì¢l5eù¨Ôˆ Âfå—e3`½Rí¿úŸ~öÓ3û¿~ùÙÿþþÝ­Y$ ÖÞ¾—ÅÙôÞΗ†™¶Û6ÂA/Mw“UšöC ]C¥Í+ñçôªf58¿üÄ—†$KòR´\âìlŽ(]öëvˆÜ71#÷â3ŠÍd.†¦O¾ÛÒ¥Æ6èv‘.q3“_æS%Ïëþœž·¸Q5$w~Moú"ì¸Òù2©b¤`ã"Ö«ÍúÜm:yÕ]÷zw`ñáÈC8¶9Ì$î€Qó¹ÓÑx^„‹<.Y"åÙã1Ç9Œ3•»µiE[w¨lˆH<%¢\U˜´8ò˜KU3É%«ÂQG¢–gÃ#I'‰Y²6©ŽD„™¥Y'ÃêÚ6Ï´¼b±È¹ÈœJ¨¨"p]jâ!ÕXêØ¥LÐ:«3Á˜Sœ˜(T|¤Påd\ B&/SªI X‡ÔºÐ­Bu[–,Ë è®ržÅb òÂb™‰¤F6[øö÷ÝcsìŸVÞ¾êCÞ8~¹~ÿ¢È»;:ÈV»+¬ðÏp4²½˵ØmÅa . Œ™`+{4ùuÞÝb®ÀÖbßV}:<û.u¦Ÿ!¾kõÁ÷°ñ ‰/‡9{ÀéMóãñƤ雠ú¶ü¤FìXÖ˜póí³Ç?º6Ä`axö§HŸø¡e bïJ©ÀÞ‚þ‹/þf`á·¯ž¿:{×"WÏ&<_—/Xî‘X€ àÀðÇv{j¯”{² +¯)ÉÖÈÚº²à…d˜KÐF¼lÓáãpñI'ðtÎq‘¢89Jºô‚›$#¼—ÑwëXóu*k„žqÎX-ºVi•VÆ0ˬ6½ë”R…3V ¨ÅW¿„’¡QER«Ìç\ÇÄx_¢Ü*Á O“A]j%YC“j›ä¨q;ÈöEjž:][Ëûª³#Þ08”4Ò5Úª*©Í…UrñM%ë½§ççR‘ª`qO©PJ¹²6±–T`Ì·©A™°¸rÏ£býLä—ªÄ|H‹Ø–j¼eõÅ”vŠý3©7×iÕd ‹PV3'ób0"Š«;±¡v¥i¦Ýä\Ïa—õÚKÓn[1°ÒEuwf´œ5n›°ër÷ãÎüá?ûÑÄÊÇ\›_¿¾g¿K- 3zÜåÊVZ3í:³u—g£?¿ñ{ÿ·¿_M£y¨ÈOƒpËœëPe·LWªœo´½hõލ©1•á”'Öoi8®ÑvŸŠ–|GöŒ5lV`ÝÍ¡„%.ª(œâ)=ÌòÈp›ê«–{µŽGï—.Äv%º³Âœ}¢©»“ÖkP·íÜV)©ÉqV… ûñqX¥f«ƒ FÝÇ!½Z„Ô)±“ä{)¯«3…I ¾ª­EuÙʪ'X!¨×tXñ‡e˜ÂxµTL¨J*EJqY#“ª')s’$¬ËN:­kæ‰J¤ñDÃXýIºmU}VŽtNÈ) ä\X\RªB€ñ¥CvŠUd ÖdXa(÷^ê’òº’å‚Í9çÈ’·©0ªbJѱT.‰XXŽõõɹ«ËæD*ç§/›…ÚÅí"çå¶-+·¯Û€ß«ŸA„Sù Ò÷ ÌAĵ’ëÝ&wö¢ô…÷¯|ßT˜ßœ…½‡>âM`\t?äñM%x«÷:ÓÀuâÛù›¼ŸñÍøép€ýv„'ú깿zî{‡þåŸvóþ½æ>²(ïãý3 à0!ñVÚ6h vÀë¯DsñÛ·1~ãîÔwܳBdo{[oë“øæ»ˆè%žoP°±ýrlÝ\ü¥‘¿8ÙÞòΑ®‹c£Ðåw=þfíÖçö#å>ÖM­£¯§×úáP·{Óœ‹›M?i^ŸhqA5I•eÇu#1[J¨ò@!ÐbØÑJ4LJ!HY‚%Yªš]QsñcYòœç¡Ô¢ÒÌr,õÒ–Ô‚zFŒŒ­ºWJëVZÕTÚ9Œ‡0Ôã*² ~%Šk©ˆ9×os5–º*a-‹JÅLY䘖ÐJ+¹6ŠÈGR”Q†K©¹0Ä,KB&„š4%Â}ÂÏLL²JmÈ×êÑ£¹¶ºìø"ɺ9ᮎH‹)©ä]Ïæ§áæ7ýiYÖXîñp -±ãì‘[ÜDCëâÛ5sã¢W½¬ÍîþÃyDÞ#=È<ͶïÙ³é±øÃQàÄî‡&cÛb>Çé7@~ƒN˜aþÐ&ß¾iõEŒ_GÅù ü½ÁñæMÄý7`SõHü-$z`Á×íþP÷þŸ^¾·¹¤Þu ?@¼¡Äßý¢x޳øÃVã /‰z;ºù:çüC·Á&@å›Åly×ÁªaÀý×uÚgÀDÄ—og½Öoÿ%ç8ï·n~ÑÈ_ ù´p5”“=މQÞäØÖÏ®ç—}ó?wíªÕ<õÿ0|rwözÞ`ÐWBmÌÔKÖ{¥y¡Rë©f_(ç””‡J5-™BzÜu*¯x«’TÂJîkš`ŒÔ*×ÚŽ!Dî[#4P“œ,’‰ Á‹¢œ(ŸjÕT‡æ¦!k”a’˜¬¨BJ+uÒÚ‰Ä8Ëjžb¯êZD£`Pá‹à|äò^áF–2s„l—‹K…ð9­¬:FÚÊ5D "ÄÙ7é1'YÀgÝŠ ѳ"5SY´"[Ç9¯UÖµðíhZ¾Ê7PkèÕ–ÿˆ »7&‹¦²¥D(DÐÜ Óµ‹#š}XOI«§¦”ϳiBiKãb´JpBvú¬ô!PžgÞ奨n•ph»–ì6Iç¹–Íð²†S`Í=ÕŸßœ†‡[¾~äÒ«÷»ÚÉè Ø¯%fS\—Úç…ËýÝÍ~ñ§t~µY¯áúÝy*•÷QŒ£Ñÿ·>ž¯Ÿý¤œí;_{gͅÙ¤‹…ä:“+›x˜ìsIZ:E¹¹#P–Ýao—=Ÿ˜óøÒ'Q¢ñôĆ,JmX&ßjôG_–»W¨ï®9ƤmÛbÊ(NŸ=Ó¡šz§ô¡ªÆÖ&UÏ'‹ßåyºg4`{N¢µ-øö¼Š³b'>rÖ­ÍG’SÙj IDAT«)îãR¦tÜçÆSPÂ"Føsdôk¡-…«µ7ŠgÅòÒX•Üάf[™…nJTKõÒq§D 8{E5PN)ÄŠÉPá£(Q$‹Þd-DY±ºQÌòÄ2"˜’Z*!dáµ0ÊžjEV•$£"°6Ù’SFñ)ÔÃá$îš÷”³ jR¤ZÃ1Ýêr'üÔUa›V¿)¯@¥=ý›)0+Ð!¸ÙÛ„å£ÛE‰µÉêl³\¾ïÎDœµ‹&œ´ƒÙÛž„ºƒ\…VßWž^Ôçt6@õø@bð8éü%ÍÀ7&ï¿ëÊ_zîE|A\ëjÞ»okÃRþŠp`ø–AQÁåoðMDróŸf†5~Ÿ’àß|£‰tˆß¨ú–|š€Óã;´HÃWœÁ÷ÞÆ;éwí„Í‚CEüŠÇÖ=O1Æö&tiñ6/Žï–U= )˜ÃWát耧0óêéOW»÷‹áKȧ4IïÃs“¦Yûbkçû2þk½ºlµÙ¬§)Úû¸ËêÓì\t·†…Mû˜KZò3bƒY>]÷ÓôSÚ@®ÃÿGÜ›5Yv$éaîëÙî–K-¨B£·i©Y8M’IüËz׃ž(£‰¢©Ñ »{€®Fí™7ó.g‰=\…B€º¡™Ïã½'Ïiæ_øçŸ^Òi('!û”Ã2þ×\Áj‹j„*UaDïL[L4Xµc…@ 3¢`МKÊËZQ2ƒ®€X’¬ET($HƒVF%zÓf³’§Ì> sFƒ@°27R¼ ^)ð 6 ˜y,ްCêkÝPÐZÒ&Ęd iiC೉Žü9ÔªQ)Û£2 ‰kð5Ùm«¶hVJKÍÏEÝص[’ãÅKl$W2æŒ.hÅ)µã° ZlópyjèT✻zmëÖZÙª´ºÙËóRÎY4«¸j쥓ÓÊ–•>°úr1mÞŠ8nåkVõŽðÿ øoo¼pfõû&^^Ú…RDúÔDÛçMz¥2˜}9óy”÷õ- l0¤ÖÊ#”¾tÓú¡Ü´wq7ÇþäÆ*©k—ÀÜ:ù{µ} s[ÐêÍr\ËSóéiCÇ–~™ÊZJüwûó]®¡“Mº÷Ù#þƒ<ºŽ~ÞÉÄ‹1íþv›·Çÿéúv…—k©+w‹…I¤ƒÁ>”Æû¢a4„}/¹ŠµXt'>ùû0üÞ_Q.3(ÛlVfŸIÌ"¢È¾•½V¢jŸpÊü™J @öm¸%ã¦Þ¾¾ùnHäw&Gó`ƒ¸„ãþ{ -Þ% ˇÙCüÆ!:«iá7€-Àí þ[ö7èòöé}»›ˆ Àüí.†û“®?¥îú«œEXÍPgï Ÿd€à¢@€5@ ±Œ#´ÞþaC5\ü|±B‰òÙü9ÞÅ{P;xô{xšÂ힎]—Óü¢<óãý\~û0›òª´Ðµ¿râ§^\O›‡»t]‘6HjàåÕu~£ì—·&çíÚK/dZù”ƒsµ\I•S¨Pfb½Šõ ñuXî„üïëPr_ Ùa.Ýèùj-â @IŒ’+pd •dr1€HlX– $0sµVRT €-è¢JËMÖ*-‹® "ÉNaG`ôg·2 ….‰ƒƒÌTYÈ€D”Wà5IeI÷hµÚ•Ežep•°™%t(›TÖ)–”Šs¢šØV£•l©¬uøæSÉ£n’RUDÊÑ(m P+€ˆjoßdæÐjÙ®iX‹G›v5?‹.¾Éc+ ùõùy•ì‘ÍSçºFôB7r7„²!œõO£vQÐV.Ä©Fn@¥ÑÍæ?Ö˜O14%ïœoÛð¤¡ONAjœ9]#Ë2á|:’ºPÆP·-Û›Eï>½X67ÉñДz#ñÏdðqªù·‰ÑÃzî0˜ùü ›üòŽ"…¥çI¨`UY¼A‘:q³*/›»ÿ¨FèÍ/´é”at×ñ‹«õÅeúó <î¯5]žÐÞw>×âsÑ­Ã]œNh>uYôº0ªª›¼¯çÕ¶Œ7 ÏCÛÙ`VUõYTV·µ “y#I渮PÇ,_´Öiù×6¯À‹å\ÓAw®$…Ô¬(’ç4¨lû\.j2%t"fS„a”(-9Í SÚ綨M…6¥ÄËyyu.'Ø]Ú¶×ÑIÊBXCd½Ss ÕOBx˜;n¨§%-wÌ‚©dS‹!çßæ:&ѱŽb]Ê“V­”P1„$–èÆót÷úvys:ÆŒξ¸2ŠzÉÐQç^˜ ´zê3ÈØ×'óOuõB|q*Ü´Z¬¾íéÔó­(ž _lønsŸ|ñ7’@8€âx'€»tüêÊüæÓî«øá›ÔºˆP4ÀßtPf€ÿôÑaÉ¯Áߌ¥å[MÎߦú=@û#øÿbCœ¿ -Àðöë׸‹ßxý- Õ¦_•^ž8€gnbx °Uc¯ `Öñ }°uÛwJV€ ÐTàçïLs?ØP÷9PÛëeÕÆr€u…Æ …íyéÎoÖ»(ÏâfïþÒ?@{Ð×Ð!X½µúé…þDÙKØÈdØ[=×Èz̰?ÁåmV¿îÛ¿®êÉШ¦›vÍ_ í\8/âD²GjÀÕQ?^P¬iló?¨åßX²5P±VYj#Ñê4«ô¶)QX%³Â’„X°rBW¡€LÈÑÔÈ1>‹œ6¨µÔIs…ŠL1d ‹dQ½¤Ø7e›U—}¡<¯KÌ[ne*_Ae¤€é9ЇE¯"T"Æ2§r]2`£Xo –¦I˜˜$eÑ –I+rK JÉúYË7ƒØÕ¦bÕº§LE¥“hîd[*]*Ül³,f¯|À’F¯Rk·½2¸²ÜѰ~pÕ4ýKªó´=ú;WØL±FyfsõÒ £ISh6RØlIJQž².2§nJ"œÝåWÕÄ‚çç·âíÊÜuü&†e߆¢êV©µ6µ³%*pˆÛ ÎbÆlV*‘Ò&ÄZ`ÕÄ]mzúÔÒÓP©Ô”C•­EMa,ñÅJÿ²€Uß6±¿ˆ¡»;Ã1ï ö6¹˜,a‹ÛÊÒò¾ŽàŸAøäõU"º/» C¹[Û0ürÖ v.çcWÎkÆÚÓ±Ë%C×^V-ôÐ ÄdrªÇ5Âë¹Ûd؉؉“mξD·‚*rŽÓœö©4.Ù¦.5 -u-’ø2káëRŠE )kBG”i-²Î´Î`ŒQËQ€¯(YØ$Ó(bÀJ ºš+ä¥ò¹ªÝ—v¸îuÓš&+„®!ajË‚©Ö ÝB4ר2ö!«@Ä‚h™1Q@Áºx[–)qð&n-|ÚÐhê}I‡ãÝ´”ðrš÷Ç»—Ó±Iþ÷Iuµß;•Ïî­"=?”¸«°YH¦ší‰= oùV)¹‹õõR`n7ê¥Ã7¯6÷“ü%ðj@Û7çÕp›õ¦½v7ïÙŽøðä¢zß»Pa÷Þã‹oOeñÝø˜€á},j¿ú>B¡—?rÃü‘þ¸ÿ–~Júc:ª?|Eðî¨þÁkÔ÷¤Ð:†|÷±ÚÉûÇJwã¢Á}B#Ȱ–òá«-ÞCüš†{Û8øò®£ì6ö«•l¶!†%rÓ5”Ko´…%Ð<^ PK´ì$xò·ñÒÂ'[ú›Tv½Ðú‹nÓjU³˜Cng!É^5z³53UWWÚôMÓòeÚ]~Öt@Ú/‡¹™ïüâTG1³’ghJŸÝkýE¡T#I)$ %Q4Ù4,6œyJ„ ´«˜y’X d.ÕøSÎXKØ )æRÏ4Öêe¢R`6Ù ¡„!j_Uö‘ U‚ÊI$!…bAEÍØJµ€t„Y†d—…ÏÆì­6¦«XTïV¢6UP)^F/¤—*TL!çaÔ•¹)>š>ê6©‡­!i±íA5EÀ f*:ɉD¦-BÕ•D¸TJ…K-S„ûÊýp.âNÐlÅ RTEyìPò 3ô›&BW…éÓXcÉsA(K&•WìY7²'‚L2Ì(H”hjÝÆÒÄÅ£”²´ºŠº(WdÈ8ïÏ>¿Œü»txϹÞçÚºÖ‡Š ‹ZþdÃO»"kñпދ)¼?uÔê&:ó¯ŽûOøM­¯Îúg»¸îäfÚù3CIJíªÏ ý”†ûø‘Úïøîºñ®#Œîäð½†Dï!áÅ{i¸ÿ`ÍQQýÀoÍ]þSó€w5}ÌîªäòŸ ~@¿ôÝá ñÛæf ྠ˜_Uˆ€Ã ~¤ ÝäÌ¢„éý·ÀðÙ OvåE€gðUµº6Øk¨÷ P%àl·Ø>,XÝ'™WGð.ùú¶¦À3N?ct}Q¯cyä¤âsîKÁëØ÷iËZV¥žÜ<6½GjþUn§Î°mºÕ£ÍúzgÛ>$çÏÑB_T—P³T¶KæõJîÚT¤nd3²êI*BA™ UJ‹’UPª9|^õE´–TZYcå“„H!µs$)*Cñ² ø™+Ê¥ _D, ÅÙ.(²T1fÆM›ÁfÁ¡g”> Žå-WÊl äì\„\£*¨ž”n„mĺ M‹Ž5 ,Rfbß2‰FnI«&I* c¤È”³n5ˆ+Aj=ÇÚ":½â‹“¤%e«j¶ šTÈÏ£³µ(»JNî„Ò=‹Õ~p{¤½ÖÇ•z-sRŠ *!=créh ½wá˜&W§ý‚$'Ó2ºük—/ö^Á”<´"v§4×ò‡¼¢8Ö¢£m.àWç$^~ê—îÜ‚ è—(ï«]®.‰:jõ„óÎÁ©]mÙŠÊ)ÇYåòØ-ËéåЈ®}0K³/ôb&›®Qüåüx)é(ð?JUn!> ©Á*E9—(Ø7â®ìüY]‘ÛÆ‰÷œ4ô’we ²;Æó—ãá.JÞè_Ô®iúþ†š² iŽîÄIN«r2[±â±Þ•™-ו-úÑ%ízÙvc)ÇÎÈĦŠX3T* V*2ùR*»4Ý{óª˜K¦!îl¼mãÊ‚Ed°!–‡Áé­OÖ0 DƒàbÙ!º¢|‚KÚ`µ˜Q€D°°š sŒ—e$âÖ±œ¤Ì¢Ê:âXÑ9ç”o§Š_rü{øíþÃÅ0Ê|Y‹­´6t$‰ÒË»ù¶½{Ýþç / î Špj†ÆÄyX›õ ò“ j/­¼ãò9)7¥õù”î¶AÀgŸA.ð<¾?l®C}U"€î]þìÆ?õûß½WØ|%$hOß wïcÚñ{ þä~þ>wŠõ×”ý?#6| >Ùßvû‹ïç_ÿu `¾ ÐB+@·_Õ±ëG AOï.¶[€ f€·g€_ô_÷äUU÷¾ñêµè ¨‹FRe×Ò~%UÍçQÖ¹˜^Ê®^A)_˜.p­½(KWEž¯JíuÁˆCáõ<@šÚ¥œx½÷é6ò1Fw™!ûB žK𦏋®]C£ŸP'F¾¼·Ýà†T‰ãSûÔÊ妙ÅE›Z¨Muj;e;îKÃKM÷æî~sÂäÛ$&ì8Ùùã4žëô«Áv³.Ï.ÔÂÖO[¹±ãæ» 5sŒ5aƦvjаÔÂ,+b¨€PËäbTäEó¤j´ rõ­*RÜ'916ÜËÚ¢1BƒR ØU„ ©æšT….I…Í,ÇT¥R!¹6„²BáK)l+.U”¡Æ<†ºÔ9—)»x¼§´_b nìýEþÿ¹üÊ`¼#÷o;⦰þnç?ëî ¸£—pÿg€, ðù=¾Êq+)öáRøä~îî¡YG1í7süÙ§ç}z{Ÿê¯Úf[€'ÐJxpp«éór'fø9€qðÅ·UJ `ÿ™nà,íÚÞ~Ì…_»ø‰ô'ÙN|þé'O¬\K-õEèw¡Ùà¦ôCÛŠT|?L–I T…2R‘Ïä’ã]r’H™¥ÔRE2N‘)*Ý›m•iÙb>ÏÕ3¨¦¬°Z•sÁÅìÏ…ÅùÐ$ƒòÈ„l<(¨rTÂeˆ¢J_K•$WmȦ.«iŠÌ5©¾HÄ ,KÔŒ\„®N‘âFWÁœtQè$2–5wY "³Y—âTÎ-*l(ÉÌêÅ!‘@ ªÍÖIŒ³,÷‹™ÝAÞGÉ$PšÕ@F×¢ŒLyd/ä¼þDr™(ÇPÖnî ˜D$/„Sµe,²‹™RÍ".@]V½C62ú—"wVGE=¾,§ëÔdhA¡++ÛÿÆ5v_HúûUÁÁˆ$lŽÅórð§aùO“Vv¢{,ôõ¦Ï,é3‘Z™MoÌÅðHÊjÖ©¡³š9']–?/Ô„µ=E€d•íU3ŠÁŒýËçóím¼¸'Ñûß ‹? ®é¼~9+ÓͽR þkî®æ ”lÏ2õÆâÅ*nÛdTõà™ížW§¸ÕØ›fÞO‹†Q§Ã¡¨¦6TP®&çæM¬3ÓùèöÏUD Ú.kù¥0•†_h½ÆÂæ"à®æ¾úšŠÊ±%&Â*ò9AtÜj‘ÕKÉN.Á+önTD6F}š Yq kÆÈÐéš@íU×È¡ðzÉ*Ç:–ôÊ-eOµ‚–R«!Ï3b© XJà ]ÅP BÖ„*‚:£ä!†Û·eB>¾GªçêrÝ7Iø…À€ÿË}]Q9{Ó]†¾#e‰}øòíáæ>ú°yô¦ÿ9ÖG|7ÀaÔ©™X5?êw!Ÿ tæñK÷[{<áÛGñÕå”Û<ßC°ü­4X^äèîøÈ,Åý ç±˜мßöîzÖÁiþ*úÇ樂G‹g? øk¿ò'‰SÿP¢(ÿ4õ†?Úãö')YÔ3?"Ô…5€ûáÑzœ^À¿&ÑÞD€å½5w °À諞”wk@xñb|oYÕ¾ãæÀmÓ M“ÚOý†þR» `ƒ§T޲ÀÃÍO>{ºþëÏ~úèº7B Í]áYc¯Áö›¶7(lYRœJu’³ÁKr†êäÄ¥¨ä6l¥NRgÝ@™¯ý©ÓE+%õç.U“ý’S’¶©F”œsN)gWc Ø(¥ëˆÉ†+«È¨@ŠV["Y9ù‹ÈdrƥĪ:”ÒR§ŠÀwÓ€£*ïJւψ#« ¤L°M”°d^ϨÑkÛeNÙÃìc‚šu2L…¥SêÔëÀ d6 Š2ˆK6Xz—ô1¤ÉåÆ¿²øK^¢SBÐÝA`P‚1[ª6+!»3±XB]Nyºb)ø«tÚ:+Ê|F› %QçOtȪ1-–¨š×ú“I®+o1ë㟧åq#VعüÔô3ÙþS9˜Øüt°Ô6.û2·ã(ä=;{_n„zÊú²¥mÓõ׫tÝ%*M€"`ð u0]îõ^æœôq ÍªÞ­Wz1VÛ6Zt“Ü—àËéèŽyŸâ粚òsö«úÿh윜գ¿^tܯ«eõ+³kÐ<íMÆjÛeׯöë®HSdU£3ίâY¯†m¯Ž§ðüpøÛ;?_Mb†RV3õ¸h]¢×||I7cå9¥ ê…+Rƒd”Ñ$M2B5ƒ"8C³TÕäÎÉÏÙSžL:«³ÚU)ô’6…¦äµ«˜¶^– ’kZX?”t¼hµÐ(†PÛXè6çxÚ¢ÎÔ±0Tš„DuÁªfe¤Æ"RÅq1•Ó¹&žw?ÝߥýDáõ²?;Qñ2“vçð}øº(Ð4òiiìBa/Ï7“KgàªÂê 㪅MÇ'óEí¹ŠY› oAßžÓïAì—u€î¬ò úÂIJ{&*lÐ xK°ïBȰxÍ h¿jäš¿‘üã<„ 0*üS×¢?šèo²f?Ö¢õ{ûæàá»ôëÛ%ûA#oN6ßXÆ×ÿék…qXà1Àâ/Zˆ `F¸P p„2®y¼z;€¸‘!\A¨°uÛzp_„†Ÿ<ÿî'§óXþËë~w±ãªÂ‚_b­ÜiR­0ÂdB9†<4FÙ¶gKUÆ"¼Ì²³”¢Ím#6&X‰¢Ø×;-•(^Q.‹BP[¤®b‚ä”Ç>£Óµ–| Á˜ko $® ½%½R@kåZªZ¢ e‚N-u×kcQäRS͈ÌBGÔ‰È)8VÅ ÄÀz‹ÂJ(+\E”ƒiV–,N¡¨š…"Ñëfh©"ÁB‚jEA ¨"J£+¶\NµžI¢Ù%Ó9S¹—d“{T|±\ìªdTÄ`›Ñe( Å:w?Âw}ýâu(×g»*¸Û‘ìy©X2Èc ꆚKEF®ÖØÛÜ%@/¥ì@òJ®R -²•¥}_é”ËÚE{ŽÓËg)n~þj}ùÉÊêM£m[úÁií*·\|ä»Ãý¡quÐv·R5: ZÑuƒ0°î‰»f³ÑÛlimi0±žÅ‰nosèÆÍI¯í“"VB]F{Qý=ŽKùôØlC³Tû[njm\tmݘ°Úº¡ãAe)ûF)ÈÔÈnMJhìe-€1ø¿swáOL—"â¶Ã$Õý¹aSLŸ'5EOh¦ ¾++Š—Ë“|XmÓ2ˆlWmÄ‹¹jÏh|ˆ÷¹¾TáM ‡™kRÑB×R@ªERÓ´V‚µ:V$ –‹Á$B$¹WÛ¾µBFKë¡ d Òˆx²\å¢!פæ$”l{²’4ˆZ0˜,b¶&ËX(VÎè5úçcWj®aòi9ùÛÉ«æ.˜ûN2æ!;®5@Á<^U˜ó Œ Ï8°kðvýæ¢=óhÜþàv€=”)¯nõZ¡`u:éó wÐÏ0XŽP Ç3@|»{©‰ãã˜!œŽï¦¼¯6w‘ÒÇÈ¥>œõö àôNéûÔ›ù½2àŸ~,§?V~WLøüÇð?šahøxZ`ŽN@þŽ0«;ˆ?îòþ§Ç,¿ùcïfYoAˆïF@€üžl%<íÁI0›Ç, ªþð ñJÔg1hžè_<þ³Ÿ\¬õM«uAu.)îJA'%µ© H䥆+«íŠ´Ñ’Œô3ö½'&Áy«‘[% v[Id®|³ÎÌ\)¥¹ °“DL†Y€ Rb_p6€µ‰"ŠåìdE![­³ .$¡ 40I÷ IDATL $Xp&”œQ¥„TB„L  F¶9뜔"ÉÈZPÑ$ ¨šÈêªH‚M\Y‘V¢c´µ˜¦H¦F´Õ¶\dÓ’S`ž…NZ ê¦Æ{%L 83„%7èÐä MKA·Ùh{ýŒ8ê<\ê•uCUÓKAO©ÊóI…/ª—>þìh~"Ö‡–RÉ‘¸Ù”Öt’úNX <³rÅHXÚA6ƒLíZpŽ…T’@ëH¾Â…Cëî/ÎWú˵½`«u'…n BñJ–µp“<„Wi¬ ºn•>ÃQ1¬›,MçE®ØÒ&(Q,µkÚšŒ Bºo„9ÙØ¿f„MÞ"xt^Æòæšé²_oéhõdGA±]×4\ßl…׿E]+À®–UÙ]ºfã8å2éM/Ní¿x„—²ç¬N³Êó9ÏU©e»J¹¨E¬!˜v\ìá­¹§tõ|VdŠX‡a7ÃÕFv”r]}ÛäÇJœ%D+T%ª}SšÖ·½2@˜tÉu P¢JIr­™ÎTPЮAÁªIRçªs45A¨aáäe¤{Ü´9†tN‚:XëlŒP TòPe¬,ª¨hAtZ-5Î.‡%MSã1d_&'~MÊ= ÞÀÛ„£"ݯ`…8ðÓS5cø àáþ¼?Ãoð¸…Ý_€9É㛋“?Þ«Íz½é÷¡=Mª2w@k onד[7Jiu8áqë'ú¾¡3G¸0¿YÁ 4pósŸ ¬^ïÕ«¾Ñõ.Zˆ>Ÿ¿>7ï¿Û·ë÷j¥ÃÒáÛ™A ^ Ü:ˆÿóbÃw¡âóò†cñÃw‘c °øÆNËwÞYƒ‹qùp[¾/)IJÄ7“Œ3‚®ð¤‡À!~ÓÓ{Yà®Ù¨YWÐp]>»¾û+aÌr·ì»Ã“î7~%#T¯Û?‹Ýƒ'ÃöçZ^Cµ\rÆ`.x }–xÕe;…ès ±²•(8¤š+ƒ¬BÚV¶VGî‚C¹Å9'ŒET2J”3”T ÀQsïjvÈ ¤R–ZCL ç¬SZÒ:§˜yÌ”´°ɪ„ÒX.( "BJiB!52%IâB¦ w —Ku¬,mpPœ,bMµ-*–ŒHBg „ØšjZB%½t(«P¢ÏRÆPý¨çs6KÆZT†¦““¢’À‚Ï"{¿Èüä@½ Z©¤ ‰FA—EL§ê{¯š{(Ñ¿ ,Ðó9| üÕd‘ö MæÉ$w¾«vÒh~¨CŠø³ß¦[+J1›Ø^Ôβxdj‘'º¬îR”݃Ÿ}rÉbýÀ`1ƒ,çyi¡°cUQ°¤~7wxxØÕF‹‘o!œ‡².ìYÀ"xL]hüJv̓jÕ0вYšÃÅTï<&QJér*ƤŸÕÍ=òãb¯CÛt€\XÊÍí¤ƒ3òÿÆõ&¨AâµÌº±Ä›I±¦eÏþ¿zžµ½ E¹Zé+6!5îÐËq#ƈœ‚Úueµ™F(žDº.޹ŵO {ŒoXH¥Ìe×\hescREP} ‘\¸Þ–:§X×öÝuשÆj›Qrur5ë–Ù.¸†ºµµv³’ñÔXI¥Ì C9ÆJ­¡°"÷ä\%WUŽŠCÊ2W.nf‚¬tÖIÙ¡”É&ѼÔìü–Éó¡õñ2ŸÉmoŸŒ¿7›—­PÖ®Œÿ¸uݩ녟ƒ¸uî`‹ód~÷l*®ÿfªÍª9nÏQÈC³±6‹tL]^\´!„ÅÕ/pŸXÙ¶´Í¹ž  °Ð7v }º_O÷ÛçW/‡£ /Dþh‡Úbà >'?{ŸC¼×Éà·æž}¿´ûcs˜Lù©SŠ&ý0|wªówvÊл®…Ã€ô!@ðãuˆ Šï¶(|íuõOõ­{Ïù¢¯w÷‡wª¨÷néJ<Î \na@ž–·Ov¿ïw¢&øÍvû[ »L'ÒÍcjVÊ ‘èéÍù‚ǘNó‘ãy§—^À`6lHV&’ zÁ„Ek0r²µ»šL°Hh³ò‰©$®QxÏ)S “•ÉÂVT5:Ÿb˜ÑLÕâò9äJãQŠZO\ŒQ0a-\7D²– R®R$ #µbA‘…‘Bra¸!@ÂX=b†ªEfE’¸H²fA’ !hƒ‹‚ÐT¡Š*@ jÁÎH\¹p.ÍTšCr)sìS¹t‹uç:ù‹,O‹:ÿ]+þe/WZ6Vù¶œP¨‘Y¨I\åÞ®6­j½ÔTæçÇ9й•Åç #üŒmcÕk; ]+‚Ÿëi±žÖZX‰,Iv…°ÈSÊúXÌa¢Zº•´ë*dÙ<Ê»~­©àƒ u(-]´zèÚ,Ê\îCþ/žóäì/sШÉ!Ë•Œ].[èTêËóenÓÑ/‹ñêsÇ›ÙwM8çú¤9ôµÝY"Ü–á¶ö-ï÷4•<ФòZk»æ_(9Œ áÊÅÙñžó±·º£à±Œ7“hƒ¼è–öó^Ü^æ›t|¾“Ö™!?œƸÞL,ýYÕƒéN¦!h5l¯W` µˆCÜäå´¤ÕœL«¬í0£  « 'ê6ÝIæ„PL• x«!5êÂØ RëÊ 1Èó\ÂX“†Ž±ñæQˆn(r^ uÅhFÞ–¤ìDM•¼’¤9r…<_æ„ùìê²´µ­}.¢©À2—”|ð)D—|D6AgZ´ZÒ¬NîæŒÇj†,ÐÕ‹;ß½=ÊîíµYÝ·+’+<þÒ²R—Ë­y³¿+P†-š¶äA¹; Y›:XÛE(îõpôråµ_Xµ p¿éîW`î;xÖ‰SÒ ›K€â·€<5¥;Âeäý»8ôAH| ò ù@6Âòþóà`üº}zû~hÏ{rÉý9¨ú@£ÿÿ ¾—ã‘?6ËÈ*é¤?†–O¾GÎôÍ-€‰à*ÀúØpz/8ýðøÿ1n°xûqßݼ0߭׬ ]A^RضU«cT_a‚' ê#˜·ÐÜ€ôSº}ëˆÇ+ýŸÉ¹¿zÝ]‘Z¼ibOû1÷ã¬÷Í‚ò8©û{TǬ;¶t”+ÂàÚ]@UE†4!È”µ4Ej®À­, Y ÀJÅ ©.5ÔÙ×uÂ’š†HpÉ…tž‹ Ë¥J]>[†PDžKdvRØšRš\S™Ó$Ø®ë„Pvµ•DT ÔPKNà³$Bfê™%V¬ k)%‘Ù±$BfŽs­¶.Ò²TˆŒ5‹Ê ”ʪVB¢ HžSJj™ª±+häT³'Äœ ì1ž¹ÜO¹Î‹FO”œ£2æÕÿãƒØ¬!)¤–bSŠ&W-L’:´à;”ÍI¥B¹É‘L°PC†Ê`Ò«÷”ýrTzqe¹Z3S2"l QKü€V–³H©N)©Wdlß´›vÝßû5ù+mÔ*Xâç½w·§¥Ìó_Î¥ÙEìªZÒÚò@Š€fDíró6ü:ùÑ'ò3c<è6.á*ÝËœ;!Ͼ š5I™Êòjš!Ïœor Û]kÑZŒ÷Ë9óý]ð´ ù¡Çµë¶{8›x·Ím¡ÓïZw"½¾¿>„ÇZµ­›Yv¯«=úZ#ˆÊ» ¼$RÉȦé5m.ýÆ3¥SÌËÄ÷®µ«, tJ4(”4Rg­ÃÌ[Óne“©¼ uÏIJµeÛԤРRT(šJIPÏ9ŠËò¸2J ™@Ü›¢²hDõ²f‹f‰‚Ñ‘VÂÈjKêKßQ²‘ŠžØCöšÓ¦TÅEVY±L!Æe aŒË½Î2²°>»9¡\c'ïŸÎÇóħҼÍøÞ«vÊæaþ”O©k¾ÔÀK˜²9ü:°8

    -ª‹1çôzÐóŽÂEÁ§„ÆA[u5´¢Ú/óœÆs9žæi¿º|q‘f­ÔY<þ‚®>•¤ß07ñœPÀ”ôèW÷i™8G ä¯ã¡ÌIjÕd‰EpçÌ3«•dî³*² ¢ëÖÇn.lcDcÐV–õãò(ó¶YëvmžÌrîNp°Éù´]x}Òv¦š>Ö L¬«óI—\òO¶xÝÕu%òe%“"ÇEbXš´§ðFÖÛ¦>Qu—‰‚Z´R€й+‹„ºiæK9fႪçŠsáêK^:{yU«]€¡–c¡C•«Žw0‰švÅ“5Š4j„ Ùb±F‰¬Dk£´F KÊ®­05 i–ä|YÊ„TBMsJ¨b—8sº³¼d2‚ë±Ôà”Ãízk¶}¼qV€‹GîdŲ׿àë•RuJB§ö®Àx€8µÁÃÿÂðŽpwýLXx 0€¹mœÛC tw3þ¯põn2ØöbŒ1|¦Ü¯pWðú >{gþŸ,ÜBdøüñßÀó_$mö ~ýUYzÞ?5Ôø‡šÁ³-è5ýb„òìÇôÿã+ ÿÝéOnªø~ø¾u|Ýñ¡ÕW»ü9ßIƒuý1cãNkôï°/AÃò¾„þòsXÅpŽ'€À4Ÿ‚~ ‡#€ø5 —pÁ>B:Â-è<Œn;>Ûhè×Ϥøer‹Ž+`‡n9(Ñw ü¿Ô½YdIvøÙnwõ%–\*jc±»)¤Äj$è}^óç?ÌÛ  ÇP"Ød³šÍªê®¨ÌŒÍ·»Ù~æ!2+³ªk#À&0÷%Âá~ÝÍsÌηٻÒÌI05Pù°E›mŠ4ø–ºê—FÖ”ûlÈ•O!Q™q ù…Ï7u¢uȫŦ"G…¨SpD¡pFB}²6KÆ2‰Âd%ŠefB@³bŒ(œ×CÍþAò{—ÿçyYó"K•<9.2Z3ÕHæMˆÐ)…’gV`9 ÆåóŒÄÈ*”LsŒ’©ÄSóм /š2ƒJHÍ“/1I6(VK¸ü|ô9ù9Å•ÂZaç/Êô¦ü—N^eö<‹¦-¥’A£ñ)ª!©í¢ž,²Û¶c¶â!²)”ÏbÛK³Èóþ$´dÔeáóÝþ^9cþsO«ÊV\%qâõiÕ3³T캫7¨M Ž»É4¥«äJP—h%¹°µàœñÕB´[^]ï~}ûÛýét·ûÕðâý>·u¿Ãþ¯yßIs•µÑ)a¾‰ã»89{s‚?Ó^0kÇê“¢‡†O–{Dá2Ý/ËMŠk<³Òdxš"œ1’56®ë E,]5oâJsÖsÝ1‘9)UVm¬ÀÅ)¿:”hrºÚ‰.ª©-^dh”"DT•À]G—UN†É Ì—,¦¡‰ÉŽ´`ÙhÍx5›ð22—ª6Ø£a}•ZvjY¡xÊ,åpWäŽ((žúIÂw~‹1z1ë†\IÝ`b1!*Ö?µÛ³º/œÓ˜5ÀŠ”*Ž[Á•,‚¸ÎFeS×"v€PXW¶­¤aF2H’ÈsdIÍ©0£/Έ!Á»²VH&FÉ“QÉfxô²0sDµÓËKcä Åž±îÌ_ïãñ–dÔ«IØÈ›†u£àI?íýxŽÓþ*þUØ£l[¬>ÍlkôEüÏpº†¥'ë±ÂK£bÝ–9â¾`80#kC˜>~œQ¬ K‹Ãx‹nX`è<F hà üç#0k`ƒP öá±Â±ïV2kÃýãÁ9 XãwÔíŸÔTþùý”^Ã!¯­ÆÊ›ø¸î€[`³|[ øŸÚÞ¹ÒhÜëÝ xùÆ£û-„n p±z` ]pµâׇ*@~ч”ŠÇdÌþ aFþ €_b|ï.®7cŸ«JÀ™<œGµUAð‚ñÝ.G5ñÕä•ÈÊALu§´mCGX¡:™ä4e1:sŠþ7Søå„³|ú‹)×$ ©´9Ýû"9±…wÉô2²Ú“ȵ‡ŒˆŽ"ãIÙ"2©…¨`d/õÍ$ÉÕ„*ÍY˜™µIi«¹(ޱ . „dY3Á¥—™ŠŽ"3’&LvB¥¬m,5 FS:UZ©TÑ)Ê\–`ZAç2ULp SÉ©Ls~àbGt™˜E„ z‰gÇp$ynD¨$ƒ:^Õ§¾è@ƒS± ÅyòO§1ã+Ãe,jI‹8¹å·%rÍ:b³Wü@Ž)3Yñyd¿r_þëã‹çgÏÎt}ÎÀ‹Œ$#µ”–=wóÌÖ•ðõVZÑ%MÁ¸æ ¹„’T`!·õ±°i&ÜlóC=ºÃœý$Ž™uÚ®rùÄŒÌ1ÉHI6•Ã,Ó+¹o _I…šþ R,:—«o/jqfž( iv…¢ò¬€ ›Åya,e)f#G•Ö6%+Ósz¾1$†œŽ.¡xßæU E¹þý1{î× [tì+P‘dæI“.«²bòÒ.¤¯g£è—%¶á¤ã s|ʘ–¨ÖB>WÅ"­‹î…VEæ} ³¼:…’bYRÒ²°£uÉ ­tºÙYÎ!:ba‘xª…êͪ©Î„®rŽÜÂp%[5‘ä 2ž’AYHr¦$ET¡Ô\*MR˜P˜%ÕÔÉ% IŒ¹)±Q²trË +˜(ΔO 2‰<Å=§ñ6|9¥EA´ˆªŸ™*êé1Õ2ßÛ²#a•’S¦5¾ÌMñVây† !¬A=XšÌ°” –Opüó>Ǽÿ"DD‹ý=NAÏnÒ €(¨2ÚK” LT@ýWX>b3êi?MÀX(…[Ì¿ùp¯®ñAÀs€€!àËkò[æ%}wY oÙ˜~<•¹z ‹o©jBó?o˜ßþÐÀÕ×ûŸzðÙSCø.ì¾oÌõ `Àì¾ñ™5¶W(×Po'Q/BgB¿fÊ>Þûá ®_™\,À«[þ˪èù­ÏG èê骗]™«½ÕÑC«ÈÇ¥; $…V%¢¿YÔþ.As›sভ±­á’ÈåH2ÌY± §Ã)íBâãt~ëeµ¤¥ æ‰óÄËÙ…¡ì…úY…ÕTr…ˆùÄ B±Yð‰*.˜¤*è¨z"$3rÐìÇ©IÌD)Á¢‘•PR°Š /¹$’uÉJ bEe^Á‹2ñ(³Ç07;Q·¶„™{V˜¡$d1Ú°Úz•b,,š–‘4Ò è ÆEšŒ ð)pÁä3¨ÿ(p>¶˜I•³†Ÿ«§ºÌ4/ÅD±lÅ8¹ÓÎØ2†M ˜„h½[¹i“ +<õX[’>R:&Õ…¿PÍŸõëå²ú«µt‘щ5šr?z7í‚^À¬¥Í%öÌk•6‘sdó Ø¢¿EÅòY&‘ôjµ–Û²ó ÿÓ’Û˜ŸgÙ}n¢”×Uør³cÖn])‹Í”GvµH—múp‰—…(óSÊ!xZõtùô“g—´œw|ow8·9ÅÛ9jÉ&úàüäEñ\‡:$ác ¤ â:{;ÅÁƒK)èTUü“JB Ï£NJwI]ØyH©el[äÓ ÆCLZ éÚ‚éÈ{§ªÁ+þŠuÌÉ~Jµ* ìý{9=Yû†KSJ8#¥òÂÝW ËEêb BU&®;£ØôuÕXm¤ªIW•dÒ¬`›ƒKX–œ’U•×JŠ*J»ø žYF%qÁ8±X ó(V. ™`L³ÒÍe³cñ¸4"®µØH•iøpˇŒe0ô"=ßÁÿZÎQú¹ÄŒ(W§s î•Ô7ÕKkÊ/Së(€ÒîFþm›käO`Ÿ£¾Gª°„?bšÁ~æ5Íù+ÉLáÒ\¦|ÅPÝ#gÀØãüœ!_a¹F¨qŠð~˜ °/¨Æ´ƒ†Îˆ° ÆÁk@ÈwlQMxˤÌ?m>?ý$é\pÊ?q¨ó‡Ïox§é…×Ïjü@ Ï#[ëMŽÃ·¼4¦ïzÿ«7œ¦òúvòâ»D©›oŒt†TPo:ÆçxÝNš7ßÔØ.€ã¼B~¡žü¯ë¶«MS‘‰eÎÅOòô@7gÌøÑÚ¢ì+|ð·EþJþ“½o[k51¥Eµžb‘Õâ+9…a"—F–ö9OnØŽSªïŸïÅs.È _ %D9"ÝÈxÅYçFŠã!'x_|½˜ß›¨jZ•ŒE®¬ÄÙœø(ýÀ©“Öpi”2+£­Ö–‰"µá”yŽ’ž²/œ‚ ™HFÁólkÖ0Vu<×Z1 õ+7¹œo™giœߟ¦šx…ÍŸ –§ UÚœ*3é­¸öQÕ¡þ®5/:ñÇ•üOš?wâyÞSÿH9ò¡è=[”rêÑ\ž?òþÏŸ?yÞ*ŽyZVýñÕÝx㎧<Ñ7ÑÉezo‰k'vpÓ8¤w3Ývñïì2{QVˆòß/²Žþ=Íêu›l+¦•×¼¢–GÎw|zÊ3[RHó)²­E`)ÙÁäSõ™jÙÚÖ<¨‡IZ’Šçníõj¶Ú› k mÈ…X–1ò Gô:ÉœÖP2G䔫VÖvŒµ2%•BJ*¥U©C¦Å3"Dã½…‘\ˆ•U@Ði4È‚R™„÷Æ0Ï2cMQšYÙñ\ ­Yë 0O>¶dŸUA͹P"—(DÜæÝ‰¦{Ÿç\x)ý§¯2ßîYò½pü¥¯þ;Y;£ù©ÏgÃÂ)¨ÊûÎe„g(=ä:Zõ¢³ˆyv´÷¶…N~«¡|w¬ÙWŸž`€,Àï÷0Ÿ Ö€*ø‡7A=òh\|}Ð.‡/œ€¿)‘Ÿ#°ûf‰âÀ8~kôõqá‘Ï9±ïr¢ûÎ1T|mtýGþÐù ¾ßÍió¿6ÀGo˜[ß{êa hóæƒ ˆ@N5t‹°ÿ6ôý½ ÷È™=®ÞZ¦ÇoޤpLÀ5ô3„GþðêàVØHÐY'´4FiÆ !y1øH\šó§sݧ:>¨rŸþÊl~!å¹±­"I¹€/Ý‘•ÁUAöæ(r#Ü0ÍÕ]}Ú•Îî”à]“Œru€ðQ„D1ª)èpTb>IÛä}ã “Cä5r˜ ó­“Ca9e)M«1^C(ΘâLó¨rŽ%'ÛÝh(.LÊ,²E‚¶–«:g‘ y°ÌgK¤åLÌ%²â` \Ça!p¨”9) 4qÆ)ƒ|&ŸEBÒœZÁ׉˘ÊaeòIß–ÕÎ×3ª2j¶7rOŤÜMêûhª™Ý¸KÁ1O͸œr•è ×\½ù3a·\î5¶ÿÀyÍ/Ù²Xi)j¥ 3¬×[«¢x"I¯·Ì)žU«¾å 0ºEûÍ~É·#‰£œsôA –UÅ…–²d6ySåªúõS~fR_ø÷Ÿ|ô¼úwkþ' —±T)e’å1q›H×Òv«F?Ýôïmê5b†‚ÉÇÓ8>œÆ›ûa¿Ÿ#ãy;í¸¾Qy´•™ie—˾ªÎigÅ¿cËfü(Qs'Ú§$VQž§iK…³xläÑÛ&Hšyl¥®+±’í*•¸ ˆ¸˜Øë`u©öÌE¥WlÍU+TÇ)*ë ó1åUΛ”rð,RäcTU©[YoŠQjå$“ÚgŠ3™7B°ºž•.QáÈÄŽÉ!‹žK]p.½‚§ÚŸ «Lå„NÐSC`$Ek´’L%;gžcÎIJÊBRMK•*DA’e®H¯55µ3ͦ15ܪĤ÷9¿Ýü•ÏѰ9¾7W%Ä\.sk`º(E_Æ„yÒAý¬S]áÇ)ýcò_¤¹} •à·\Êl†u)ãü*>¾0úgb¹(/7‹Îû‡ÏèçÀaµ_ÿŸ}Í(­.ƒvЄ¬PfT¯ßF߉§$`½‚,ì&PxSç2°ü)ð¶Ô Â©=ºÍoêoLPþ €_/ÞŠ½¼ú¶}Æ#ÿßý0EHøodˆþKö†oàÏþ1éómtц°®Ço×ñýSì%ôõ¨ç¾ÑfÞP§ÂŒkùcöå`oäuïÝ=šgl€Õ)›×Ó%à9ÀÌᛀa_v€èŒ+j®ß[‡§öåìöaÚÃ0ÎÛu± Û6½‰Ídâ¬è¡`çÿx ¿á0Þw¼ËQ6ì"ìÄÒÇaŒ¼§Èø²v/ìÓ ÎÄMñµ/Õ«]¬¦,üÝaZNAŠÕ²IA˲áÎÄšýNÔ‘X!&³àÞŠuÛWÕªWbÄ™bBeV•ÄÜ’3J9.”µ‘RPç«€X  “ÜØF$É\LLFÆ™Š\ò ·e4DÎ$˜…R)£Ì³®JÔ“ !Sާv³?R”qjéC`båÊ¥€ŒFîj=È8·U½QBÇVÏGF×j©äÔóÜÚ:u‰Ž¹e>ŽÑçÑîs3cäßn.vJþµÌ«qþÙ˜/"äyo–éì.º3.g—ë˜(¹IJÝ ^mÚÄ,“Xa1" ì$Ay.óZì2öé4Ý…»’Y·ŠÏ<Æ%–Ik¯”“"ªÜôøè‚ö´måÅÍÙÕŠ?×a˨3J ÍÝb¦…ûÔ&:LŠ“”EF$Yy|Xw7§W!‡Ó´{1½úb¸ã˶â^4Ù ~·ªù=ëßcG¥Y›°}æò.ò}.ŒW—Ö|E5ß-X …]Q,å*+®Êê½lÎ×c<ññ†iQŠtc—¹²ß•ØûmÓô¥VÁP„t¤¦‹!¯gßžfÌÅOeUÉXÝ5RÔPà*È$P$ ÍkRÊèTé“°ÓÀéŽè6*)eCdH•˜£EpÆæf)<ÍnŒ!Y~V1&…V,×ÊÆ„ÐYs¡bL8U2çŒø¥O:…ZÏ¥ DåžÊ!¸/‡ãîåM>5iX[c‘â(‡»ÓñAÞï§/{UÓ©1Ka½’5’à‘vîÂï°Xø=Nh%dÿQ±OR:¤ûOqN@ ÷ìoºáJÞîù²Çå=ºÿ€ªÆ™@yŽÓ‹¯QÔ¨»#ójït~·ò€  ŒšiN{ªßÔ³ô›zø2¦¯Ëð0}kÛXOßö†ï¯ºî;hHï­ðà€ú¡,ˆ?Poø& Œ€Ü¾;Wz„ Âï£Ê+hÿPëï4žr?üÄ7˜öwuT-°(ÀëÝÁ0Ÿqä † dà¡‚“‚O׈!:ä˜#þÕùîaQ¯W ·w«:=u;kr»P ™mJù÷ÞýÇ!)ÊÉcNaàqˆRUÑâmI‹I¢Ð†Ü<™û*j GãëSÑI˜_Ü2¼ZÂòë“ '*®kÓ6¹w¦¨µÓK¶FÈEŠKÁ¬Ú–®.­¥–+f‚bwÖ0â9©è"S©ª´È\S‚ë¦f¢–¼bVê7ÚÆR8q•´,"RJ ƒîHÅgðÀ„’¼m +HDÑ2¡¢ ™@sf"‚Ï(¥ âÖ‹ÛTü3üÂA’éªTu.³!+äûüBËÒÚdLe…åç%ÌÂYkB¥‡%™eQjvýrUW©¶Ôí^»;±þ\¹õÑݹ‰Å<ÑÍ”ôGÿ1%Mã!«:‚Õ~\õ¶…uœ»äËd!ž³¯) ~¿;ÜŽS;fºwCºÿªD!Nu)3íõùZeÕŸÍwÑÄsyüׯ|ÞÕ¥ª[N]r¦'¥üºÙXÞ/©ai¶‚’0™ã>#O~æãÛÅ ,›ÜiÿêèîB.÷ìpwKm×!›S#!%ÏüXú d7ßN3Ÿvâý,ND{¾üõþóIwuÕJ(*£óeŘ8PYªpÁ¦®Rµv³:¹ŒÁuÓ±î‹Î†O¡°údË—C¼èó“‰ÅÈ¢ "=5ÜgÊù”D¯r»IV)³±ÖVJDJSr¹ Ç“Ê`V)µQ¶Ö©²> EY ¾,´ð¢;f„ÉD²‘ œÙ!PIÉÇI Ô¼à™e.x-±"ÆYæ9¥àr¦B1Eyôù8ùàK.,DOl˜N~ùíïæå3ºrÅ_0W’oXÇòí?_v¯æø”vNm5U»GÙù…Qù<êO!õ‚ìˆË B~áó‘ö{Z‡M;Âkq‡:o.æ¿Âé…\ý_ëöƒûËNãüëM/?¶'©ä˜ ëËßœb âácýÚ_OÓ£ÌM¿ãñ7øf;é,p÷Ýsÿ¸ývézõÃU÷Ýü;BëfÿÁ-øÎ@Í?toøz´6¯/¯{ÂÚ‚ ì§ï€Mô§?ȬúÚ£¼6Þ`ÿ„Œ’’‡Ì¯mäᵎú‘»<à‰M¥§° P °è_N!:lÒ¯&×Bëâ¢òøÓ˜<ô{qäþº¼?ý‘ŒOíÐÍ¢Þú„–áÅ"¿äíÅ©CvГŽÕ>7ËõÝi—¦ÏÆýÓbº*jÊÇýI–œóU-õ¤_µì×¶_|jªHOWòçÊ„¶Ê›7µåÔåä©@²²N¤rauY¤ d)‰FT²}Ý®dÓ“±‘+)Þh)ƒy—K`zVRpˆ(KT«ÉÙ:P,BÁ9œx”E.$T‰© ³pÌîKb£ç7 &ÏêâÇùÁc…#§ESò1(&Ÿ¯ m}4, â;΋]L 7>:î–|¬Â‹ÜýÆo ï/ÖRõ|ÁûUü·,…Y™¿Iârºø¹ä²ª1“ÍsôPÛ%qÈÄcæDô.…!#2àÖtÙŸòqŠ«hš¢´`,û$~y{<sûÁ³f²]»îÖz¾ò·?êƒÞn:¶žhŽ–™»»M7jö—¾,”Ö5 %çgºcì´ù»!FÜ÷_,$çÁl繟¢dY̆KG:oó 餫Vr©Å½£ãÑ­¾\®Kl.ó½Þ›Ç^îT¨¹ã§ÛMóÛ±ÁJU*ŠŒ)µÁ•ÕÞñKòáJävÜјRš(6±°›—±óã²ZÅ¥ñྺ 9ÛÄšÝI#Ð6Z(¤4aïÂÞ+›*Ë,/bfR²ZQ·<Ûc<ÛÏž;×cV‰9'{R*7½˜ÒLŽ’k«´25—‘˜ä Q3!*@P)sŽ<Ä3ónyXÂ~r³wáÄä—a÷>È—êcðU±= r˜2-E޵Š~³®, IóàjÀ|ôþøpùÈ.ô†Vû‘°(=7(rÀ3Øs¨‡o™|èA¾ÓO¾æ¿º.Ü5HšÆ·=õ#ämÁN„P½Dœ”Fú3ŒþÓñ—ϰôÇÿ2áÏíWÏ+s&du¨ª¿Vã.‰mä)Uöƒ­ŠŠ‹ð,’¡PØâÜ‹: T:#£Î»‡½"Ê:w„q/à «~QW9i6k¹{ú‰åæYÞ*—†³nXïK49,Ccz»â¦êk»ªÆ [7ú2åz,$ÏUETb¢ÂRòŒM©)⬨ UuÖ¶F¯¸â  Q¸áP3•@¹NQ   d.Hg–É*ΘÌ®%9—…3%gÅr†ÄÀ(¤C˜‡¥~ŠdãÀâû™M‹‘Q$ˆ\`ë}ey Qø‘aJiÉGyrv4ÏŒ¤fÊ5ð›ÕP¶«ú,Í:ÚÜyQPÑÂ(‡mOT?È'©Y×y¨åÎ8ÐMp‹N¹ç½æÉ2 æœÂ‰\IbÙi61=¥µÊ‡ ðkjp  /{4G`/"ÇÜZQ4ŽôX;ö8L,QmpÖ`³ìoïö¿Å 3 ašÞ@š¯'çúàwu)0vmrøÆæÿ ¸}$:a|§L}—ÄþÇ´báûG_üËû°þðd‰ÿþ¾ž¾3åó˜U€9 …QG¨ ñ =¸vozCófä4½ý²Ng@Ö8\\‡wnP7ÇG-õë=~ó,vŽW 8`3ƒ›°mýŽ6“ŽCˆe¾çäu{¦VóåÄéVHWl?Rø¿õ\›ô’Ö™¿:¬®aê}Å 9_˜¨ÄeOWÃÀòÂT>X}Á÷õÚ=£37˜'?ÿæ°dUú ˜bxÒlvÌwqçLeø¶5u£êµ±I¨š‹È©æâ2ª6è˜Ã¦“–<ó ?¥6øÐhòö¬¨M¡Bqœéo®õé·õÕÚ¬Çú8…]ʉqÇûµ=žªôåAM÷úò´zº~vkšÿWÕÿKm>ÒaË÷¹ä¤åÂì ’)Ž*Ž б³ûœ¸ZÌÅ‘¯± @tsT q¢õ-çš™Žä]Ý·¶7à!ígò¾ !Ö]Ávs“4Ûpem‰*ï¹I‘SDÍÉ e?³t ZjÎtå ³ª—IBQÈ ^ŸOœó1Gæ<1å•i¶•éꆫ’²O‘àÃ<&å–2C:C9Nä†ì2;D)ãÜ™K.Wv·å×ïïG!Å¡‰/é¶‘+ t±¦»àfüøÄ)!KZ‚W P~…)@4X®@×ðÁ¨—Dq6>×OšðÅ|Ò$è— f`‚xBCÔ{Ôx-­ýzÆ=¼)ß! ¼a% Ñ]ÝŒ_ùùã9.¼[‚¿Ïjèlj—ˆëÔ¾ã _§n¿a"½z|¿N¯ ` h«ññ,R>{;SÚ½6)`3öÀ#¬}|Åð\ßÿÞëÞ‰é¾B¸þöYìÎÂwxá xŸë3ø9Ü–õºýÇÙþ.ôÿÊuLÝz zý”Né6óö°ÄÝþvŸ—3Z.Ë¯Ž«ýøÙõSÄç—ÍŸAüyFéèo»0µc?÷›ÏNöåáɓ˳Ë:}\¦çû& siËó-)¥~+Ń/ /Õx¡¡­=?kºªØ®X#!W¬¬t’ÁáHAè¥CRˆ“ÑIeÉï•zfL–U%šZ*€$xÉKÌ`L &++9ùÅ%ƒÐL8ã©€ Î9(Ç”s¾aÀªéÉ ©œf—üœ£÷CŽwÄÈÎyX⋃·–ß“S!¹—ÕjC;P[Ô3ÈÝò_—¼MÍfaIÖ¹v¾RÛ³fܨٚW\}\ô“ÍKyÌžxNŠ8«²ZOÁÌÃvÔjôF¼7¶cb¥dmkóÆ-‹ºÊEs8ÖÚ‰ËÓèËÄÏX’õ>+ÇÕJ=gÌ©Ã4-_žØÄ?±Ä[yù Kçêô•¶ÑJÐ:Åztü4M>™è9fU£9mÙ"ät-Ò)æ<>pûPVOŽJ­›¼”ñhã9liúT5BkhSxư·çc×UÖóYãÄåKMš|<0y§MâK),.ÞÜ›t3—Í~z9Ú¸;c“Ï™ËqœoÝ—ÊÚš|aÝÅX¿µïmf.,yŸ+ÆŠËË¥c¢œ­Z–­È¢°Zó”dIŠÅ$g…¥ÈHT’ƒ eœK(¦!Û.X³ tŠ‹{•g›¡µè` [ %ŠÐÙˆ”JâQð*´*YU%ª Qð™Ø$ÙXò>Ç9Ì÷ói 2h/â8å/céDvj¥Oûñ·õ+·ñc³mrnÂ_…À÷VoõóU­¶Íy‰e7>Ÿöû6$ç V7RÞêårÞ+L5Ö¸U ÛØüÝQaVJ1SºûœÇ“ýtÖ¨òóÝé_™`KÿLäaÀïNq»¢OT<+%¤EçrVMþà°z†Ê.ršæ¼žÿØa]øyU§¾J\øÆÓ?¸°6¼jÖÛ„†¯R¯×}ý¤Á9C2 õ¶ªlÍÃÊ’á‹™Ii„d¨´ÀR`9<¸d¶åêõ¶æ ÄŸrŠi - ¥"&Dš5/ªE”BÎA”(A±dŠ2„ª¤Â"Ò!Ä$‹sùËÌ|Öß6Å èÓ¼›ýÿ“KwÊ?ïôJ2«²aü`åuET¢ìŒ3‘™ŽêYÞ~؈Ÿ}h•¸Ü˜Í™VMgë˜ú)o±E¤˜NK ÷nŠC•§µ)Y:a”îddk÷¼NÕLî*ßðb…­Uct[¤•ÁŠ”k^騒,™·E®˜8ž+ÄRÂÁå{GU4VVUVBdÖìLl¾`ý¹]÷"Ê=ìBµR¢BgoT·KQÓH"¸Øi’7®, dÉ 9 ·iùoîÏ­1Êò”^ºaôwHZµ‹2ûö¸ðá”bBʆÅrõo¤ºõ³¨~n·ýÓaî÷‹ž»¤~ÁͳD2çÙ×ñ¼nyM©àuðq»©+"š=îÏ}µizޱʆòKÑþ=;W¬‘aØ&¸” öU¾)ìhÊZæ5ÏÜ/"h¦¤.*ª˜Á— ’–Eç…¹n^ÌÉ÷‚ùVrPñÅÉg,zž\ñçæy®žHsFR1• ¢a©£ã Í,C~aeï÷iŽû»i:–¹ƒËstGЇ*ï7'Z(÷ àå0âï‰Ï¥ù…¸Òüw×%üÔó’>:Ý#}Ӹ͵ÒÝÜŸÆûkUoL?w2d5Åú“¨jð'ÀEïN`ü䀕Çåˆ'ô:.B¿ÂâöxøfÆÌÍÓè®Ð^#…×uúu“x[Ç@¯5!@]'¦öµÏóë}òWßaq1¿[¦6@K éGM÷~ìê¾; ퟷ7üÄ÷´ùÖ@éq¡$yø. ÕðÃ÷zÐ%ìר?ƒ§@@0À¾ž&Ýß—oó¾q]§7xÿ×d' Ýá*ãzB˜ß°m3Í&ûÍ‚)"x:¸äÉÝžïqOø¼B£qÊÀPΗqûéN 9  òyæÉôó¦ƒÀS`[3¬ý#Žãv桸=XeJÈf÷Àî÷vÅšySãi‹b~fÙS‘[>¦KÖóRo2W9/OëÓF?k«ÍºTMT¥lƒ•PF@ µÖÚ˜”5™È"1jTP $Øbk&>eš½çÏì^¿çÜ{Î ø?l±žs=ñ§nþ´û¼6íÓÂÛ†ÖUQünQQ­ìPÕºŽ]svLnGêWJ˜F™ºQ0¹¨žs£  qPÌYeÆ’TYSÙ¨d‘gJÎKï¶p²ré")ê7Ø¥€/™±ÂK¦RŠÏÙ‡œËhñ1‡D…1*BfSŠYÄÂ+^-CæÀ…ç©g‡YÌ| ZtbÕy­B°¤™úsm‡NÉÆrÆJàŠâ¹ð¤°n _­jiUŽiH£›RŽeNæ,–#²ŸKž*³°Íž‚ã|«Õ{W*?•„6+‹‹LiZ%ûMý¢¤†’ÈŰðI¬‚0ªæ¬“Èd|V) —ÅÐ?ô‡{ô¿ þ7yZÛÿ°Å'[Óè:`¼ëU$½Ùmj·Úä:!ð©”ÁCLºø IDATÈÕ™´«Fi¦X4˜c˜ýËù+®öÐ,}0µzÝV~/íå…;ë£Zü4ž³VåëþàËýáxN¦ŠŸT̓a¥]-­ƒXtJàܨÀ\›Ïº°]r7^óò°6V[[$OŒ /ëÐ2¡ï;}f»'V‹ÚÝÅæÝ|cÉâÏþÓ-,ÓÆÌ†_d|Xч:TfRÍ麟Âi. ´©~¦6B®j¦m-¥R*ÙŠ!)Îáàr_ܦ°n)™©Éš¨JQÌ1“¨r<1±bZp3™Zƒ «ë¤K<§”91 eN ¹"#…>-ÞõÎ…Þ§eZúãõþt“íšR=£q}ô÷bY+µ"QqÅnt^Âr8íp°¹=¬Îœ]^”(ê¶ÌñX͇0îs·v~¿‡©ñd³q¦Ã!è·ˆ¸ÝÍË Ò ÑhLºÂÈWÇóKñ¨-`ñü¬Æ:ƒAyÜ=|Ü}jr¸Íï߆þÍûPž—oÃØÅ›&£äßžƒ?¸Â:¼5xxÓÏîÞ~&€B2@ýÜP¨¿‡×Àé[éåíÙzø·À”~øÓà©ÆÓ½¼uNƒù#D½ß·Ö·½}Þ¦•vï$À}û¥ž5ð„ë…ám“ð‹×;\`Þêš¼¾–w@á@εмÄû‰oZãPÎ麕W/”úmy´uÚ»lé/îR–®âîWQ®Ôg›ýái ~®cwôþeÖ׃y\o~‘tÓðíq«öR•i¶ã¹ÆÝ“º[·?)ñ)Ë'ÃFޤÈۊו1 ×÷ nDÜûr†|¤ÌBð¦*ÆT“Âs¿0Êܱf®yTÄ”îEu*ÉÑ„aD$­ƒÚh)ˆƒ—}™æ$ª”VY×–g`4ä|bQ‰¥@ä¼'_2c,‘*E—œRa"Æ()æ¤`@qGwš¦dÂ*ÎÃJ£’–L[Ç™€”Òf]1©rDˆ¬Ÿ—of)Ô]=ýùä*ï‰%â¨K¥µ—nN2.¹Êœ±ë˜Òõt©Å¦íÐÚT·YUk£Û2ÊÙŸ¾œB»—+6!*…‘U%¢´45Þs(%–ªáˆþæ‘{ÖU+*.–P°ÈéÄ”oY·©;»i¥ÎÄ”HÄG&©!‰9‘}\³*$/ü_&&ÃÌxá5c@Z•ÆX¾1vÃ…L *)óTY&! dæÂG¡Ÿ§c?ûCžY; ¿vË+mèÏNrô«i#º*¯¸®„“9útsÌóžö6™âiNGYN‰a¾Á`ÁõMÛmé£3šïOæ€ú›€³B£a€[£ZN¯‰ÏU?NظN€BQÌTe6%}û%äËJ§÷}øà_À~ÄøÙpüá0fÞ‚NßøzjÃ7r ï™÷ÒÀS¼xiÃ÷g^Ï\}·­§­¬ñŽÎé÷5ø“`Já‡G®&¸ŽÀ÷‡w˜ÿ¨Ë¼¡j¾ñöùsÿíÝû$ góWµ7÷Ã[w½þmï*÷?L枀ÈWá›g:àüñUþx3­ÍW³¦xl€p¨+<­7Ó"âéÜߢš>Vâ·;Ø)ö{ WáWéq0Ñ]ÞÍÕƒs5ˆ ÃQ/ž™å²3—çÆ†ëlb©ª{­)iÎÖÑjÛÕ³hZ.JxÁ½‰Asþï[k¡Á¼_Šš¦Rx)9r™•uÂF–r)'ïÀH¬¹iÈ´¤’P=£ÛèLf»p)¸ŒDŽ1$²ž)µ ÌK++¦ ¸œA¥PN|@ÑD™+šc‘DL)Äžf„"8¯¥Ê‚¬(le”•…„(©Ò¹ktÓªIÈ–Y@¨Ìô€R¨(R&§i‰ãx? w¶NR¦ýxòrZì²Ím#S«‚ j2ŽÕRPM§ñù¾¶êôFØf©k¬Œi9–ËýMf¿-åÂ¥OÔ´³’´Cg$ñ²l\Oü–§{]ÙªO]µ©».ÿwÅ>˜>¦Ø‡¨ÌƒŠs(µR ÒN»Ú$ÉÚ•6‰ÖžîkT QRá­Øa­ï>v×/nÏŽ ÁÉhª-Cc ´£à1L¾!£+]êZXËXË’ü"«V\ù¹bœ©tè—ö‹}Xe׉ÏÇ«¨ošú‘›3ñQAC¹_âȉH¬áê.ê2¢Ätb‚mH±êR¦§yã+pÎ"µˆ€ ¢KºËF1ñÂÇ«£{^-«ÿ–ë],ØŒ!4÷õX15³¬õlå)èžxHñä—ì&nuM¨#)‘=S«ž·›F–t)Æš®©ÛJŠRœ›ãR¸'‘´VUÉ’q—¦Üiáã¢g7 ÅßÍÁÍvÎ®Ž‡/¹^Öò§¿M^htì´OÏæq ¥ug¬íš|“‡ÑÒ—»“ ¿VÏÍþR\¬š.èÕ‚ÏÉ£æ33WxÉ»ä´Í?!z †^áÁ/p¸‡ÚB:´f%ÿæ$$èwxñ ¸æõÿµ7ôç@ðÀçþGDz×RK/5š×Ê¡xŠá Ãë °õûú9¿}¾/º–ï‡âòúÖùG‘¸ 0ÿ!NûOÈE¿ ñþ‡Ÿòø(À Ͼ#Ùý{™û‹·€ÝÍëÜëÍÔ[ü›ç‹GúŽÕôw|§3€ð­dóÒBþûúü"Ý„ú¸ÉÚK‡ëwØo·‹ûeǪ±ýß^àìÐ}|Ì7Î8 4×ø‹n»9]HÞ’;Øå ã—nfŸi µÖ<]°ü:ÿûº>ÉzÅ› ;)7µâBs1±Zd•X×µNj :ª´eÄ‚ïC¯dÜ£KŠ1p˜ÂÄ\ÌŒdÒ"|V¤+HkDÅ+[´Pj“Œ¤vš«Á%”äV$9’$²¼-¤…³X¢„Â…(!/Í:ž4y¾èš¥žºäcár2¡Þä³3ÃV²UŒWŒ¢ð^”L©) ÌäI™”ñnŠsô x®Âp7Ý?Ÿùí¶úEg¤œÝÑ3¥ôÀÈ-W)‰…Ñ¢(T<%™‹GXŽÂ™“Çr+C™ÖÉ®4Úº*Ovnâû¹ï(,ŠäRÆ€"¤á<íÖÝ’X<&š»ŒXi×üeŒÁ*8&—ÃÌr2Lš®UbM3·mêl²«jÛm¬Êuh¬œ "•¥PˆÊhŽÖòƪiúIÏl3w=IðBUu î–Øž'Ë¥B1‰Öµ·™¦@ïñ4£ýÚ*näùPÿÕWöp£ïŸ0³®üÕãýŸIV=…²fá÷ñ>ί /*7;.ºhT¨ú›W.ÂW‰ôÔ5«@›•¬m "WÊ’Ä Á<“†˜¤°”~·{é^VZiuB—…šÓfbŠ…‘ôçT9¯ÈSÖ1øA¬á$e"¹L#ÅëJ‹FeFÑKY:t,eï¦èÏ•·±VYƨÊ&‹J°ÚÉ+Yí KÌܦ\ ‘táM­ª$J/óÜÈÑŠ ) p„úݶÚÚ•U,«ÜÓ8Ç,¸¨[U Ñ'Ÿ¸s:-ñ:¥ö…÷¥°Ú#çI˜7a\Zî‹GáwQ+¾ýùj+9jû€ÅÂe)ÞœüS9­[eꙋ —Ä´`Œ'ÉÅXˆe.›ªêªJT"S’ÈX|*.K© ˆŽ-S !3JæËtçç—³›\É©0?©ytSÒ÷$ °zÒ˜u#jE $QŽÂBv -óÝPŠÜqŠbB K ¬P}¼y4\¼â) þœF©¬W|WA¸#—±T8r¬zÌ׿Àr†j‹ èÎÁ@?ÀY@uB/AºAûöcÀPý#|@²–óS«á[Àôë‚@\!?dÕ€€­ÑÜ}g4øÙjð™~°Ïñ{Ñ­÷h+ýÿ:7¼{ŒoIþ××9€ãüÃú‚5°C¿` w«¤ÔëwáÍ®€0M˜€úMºÐÀÓª\‰!LßkjÚGèñ@÷n³çgöùT—sYûXCûúZ4s©n^îô5dù‹ÈÓÆ=ÈxkîõmâÏ*À|Ù©úQS/hŸÃQ>­ÿóO¸zÈ×}© É[&šJuu«œ‹‡!ˆI~ÌWžß¢ümV?qLçÌÕ‰)ý*ôø’Q/‚`ꑎ+×òŠå3dÁXëy•tQ•0v«tçu[´Ö CF'Yr&✔RÊF%dYD"O)“'Àp¹,P‰922¬ˆPqŒåvÈe,‰ kµªcFY&á<+D6Ì®@rViˆ³ÌRJIBpm¬TÊQ骵Vg“yA<Ë?_dËDëKä'Í5MÑuÒ÷st~J¾—ãý|ÜŸ†DjUUÕyY›ê,ã²Äul Ьj‹x¥)ïѤz5˜èÉÕTÖ²2-­™Q¥yÈ")V ¹ò2K™l»Õ¢î ·>ž…*'å“VÙ&Îa8[Õu«•­Ù4``ªbÍ‘}užÝ}UÒ—^+ 7˜tÚø‘‘¯µŒ"L¤WnŸüµð®Oz oFl·ŠMF¾Ð±yØñò‘™dýÙº<ögjž>qÝÎÈ Å+ÇšG¿»süeâ}^ÞìÛmÄfç«ñ|½®MÝ%Å' ‘Êx<£Ú6K)Ï32É“ÕÙ‹‹©jÌbžÝœ½3O /7J”­‘®áµ×F•ÎÇi—æCÁýLiáªGWx¥H®¹”àYÆŠP!—!xM¥2°Š0>Pvs}Ÿ™R²Öà»qùð­÷ÓÂi†ÿ=ò³g@H”ðîŠЄÓ³½òpzSÌo\+ÑÔ|BøzGvÀ¡=ž:\1„çHí¢»¯4Ú™ø¿+\WЄŸFØûÃYS›Åj}M‚–;2y‰¶>ž‹ºË¿ ýÃü²›³ñƒ®}BÀL€J7ü0©Í½õGkGW9|ÀéÂ"õÏóÁçm6· _›ÜpﱘJaÚ¹qË…:}:Íÿý Ëë&U—ÝÞœS]£È¹T¶Ñö¼µm«$ ©8AZ(ÁÀ¸`¢0.Q¤f¥€‚‰%ÆëÅÇDG0‚"R™ŠnñåäOT NSfaCOÖ…ò¸VqYP¸ˆŽ5Ä»Hª >C¢•Yj ¥Ò|Õ–¦­!Ð%» µð§>Œ³Ë<Œ¶*E»|w§»é~ì5}ªO/Ç¡\çtzrC¥6Ý-å”ÛF –gç|`<©ˆ¬`²È à™J4Tø,Š‹^±(e¦Ì–ÙÔ9ÅvYSTŒÇV4ŒÛsâsò›žm2÷\¶"S¯å)û8ëcwÑ«-*[‰œJèh6ÔPñ˜ˆÝ.”¤V°†«J˜úRZ½r•9VúÅU1ŠÃg>±LqcDM¦nMY» ¬‡Ä]3ûDSPçKý( ëCnT€÷•®¹l`KbÌ,sbIrÆ’1ScTiZÊT|bF³¥H–zDˆ¹Óýjá>ÑéøU”Îò"ç{Œ7‹|~SwJr©ÔàišnQžaXª‚ó ¬ênBZjê=x ǰR€À°º˜º0çüZ2ý|eð¨ÃîçÈ爡Q¨€©ÁÕŒ›Ö]>‰“(ØÜAE°Ï± ß!}ïޝûãûÉÅàSäw0êüÎÙ¿ 8þ1ð€þGÉâéo²×ú‡Ã×ÚJ?bŒNþ—ߣD‚øCOx‰«„ðš8FÀ}ãªÐ4KÀ]Þ]1ä7.=­ _ÈoýÊâk}ïE>U÷W-Bƒ]F„®€×Nþûݰ0sóÁž®«)Tͧªs§86û¢ÿÅìÛO˜{èoÚÊ–²Ý¶›ex˜¶fýk©ð"`Lá3ÕÿYkó™_ -‚“"§‹Lù \Ç ãü#)È2/é•O^‰%ÈB_.¡'©nw2þã"}œÎ]¹ÚÔölÒB@xT :²BkÁ¬b\p΄Fâ‚ ¨’³€œr‘¢™2bBŽœ'b‘s§…´*ydâƒZ|΋¦jI"–"É£H%q¨Jº­-3¢Ò™edNJD#- “‰£ÑZ(«¸1Ì¹Š„T¦¯„‹«áÙm™‹qÂÍà˜÷§Ãx'ú}¬ž$ñÄÄš‡¬ -ExpG,,ñ@Ç12‘ɪ"€ÄÁMLÌR)|Þ7AëåŒËOPFž—4pÉ,r§ªtÌÁ¨쬒[kˆee˜sJÄÖ–³Î´µmšºR$x8¹jž–ãtô‡»»»ßó$˶°.ñ%*7ciÅ))òužæ¬¦qdCêKŸŽ \U­êŸÕgÊ럑?†[Éí(7ÕF5 Ïm¹qS(3lKmEJ7¸á.úÔé®-Ú:Fã™´>_©³*UÝ3 >C{ª² ;ïG¶ø+.[jx™‚åB EZ¡5K•gÙ’_ñûŽÇC(k-•9Ë,"©É>bú‘f¼É{å_Qà,©Z[ÉKà +‘‡]rLä(¥mq ÅëTbÔ‰ ” Ç©IE¦úÖ—Z>œ9sx~^DL|/†/Õôÿ\ÉþÎÿ»N]>UÅÊ=hÜ_nrõ0~Þ‰»iâGùÍ´•-S‘꺊ÓÍk<¸‹‡±ìŽ›ü,ùO^„‘.%Ê[PœEŸp’˜­Íañ:ÀTHÿÌ‚@¥‹ lùV Mï!Hßé4}›?xöÏïµ?co´ÿW‡Y¼Ãû£´•äÿÌBá=ÐØw¶ÿ%Ò;Oˆoךéu{’Žøë ¾-¿GÊ;vÛÈ@ ¬3@ذ>>Žê¤|^÷@:Ãô„þ%îïßþ„6<ÚÓUF_ÂY\«c󋕸iÖ;íssÿ÷/5˜Vø‹‹‹uõ kz”C=šòjÁSž¤¦Ò*æx6°—±增Ïõn'/»T›¿gå>ß/希.÷ýý"×Z›z‡Jéa y¦ƒ0/ç^e·’kËWíG+‹R­F.C:÷%¹¢ç’‹4:u…GQ³Þüg×Ì}TÂ*Q*Ö)–êÃhϺŽõ•cèÔÚn+k«YVX\Zf^³¤XY¢Ó]#3[gk¸1‚Õ%—âs/ÕÁ(B bᔄêÉòhø¢W*¶’4%?òƒ–i*Zäµ×J4;Ù˜ 6ŽŒ÷‘U¡œu)I)HQ)šÅÈ\šÉ-IÉ$£F¯›EšM>P˜‹¥hX®BI|Öw+³lX§£nGRï%-ó~‰ŸdŒ»!=HÖÈ-uñÚ»@M—ë}wý"-Sù'ðãþôËËã…í¦¬©qá)Î/oQAŸt‡þ˜pãz¤æ1¨ÃÜC—5VkANrŸ¢@¹Ã ÓO±£Ë¯N ŸþP”ú¨5rÀí[è-MÍj”ò{Cå|T€Û÷„òï#1ß ³Û÷aK ˜PËîß(7|?ƒ…ï `ükºfÓ[Òeà— 34!¼»iìµy'ðZi›ÂcÂ_O ü]|ß* @«KSÜŒ¾ùN:x\q„ˆÇ¹¿JÏï>Lº|9§R¬UZlV¢5¹ ÌK嬄gg錙]sfO-+a|X¶ ëØV–sùüÒ6M͹à!ø˜=‰>±™?h«I·ž Ï‚7Jb›Õê•OgDVP‰_%¿ÍòÚéuÚ2g+gXP®ï4šft…)m9ãÈ –8c¦aÚN„ VdaP…©TD$QËšf™< ’J(/ ¬*¢ðÊó&¯Ý¬e¥(ƒo\æ…ifµ”†g§-½ÒÂrÅ•rÉJ§…g'S Šk&#W.ð˜Äb¸Í刲dÖ€)*²qÎEù[Ç‚cZ¸Ì|hI[×¥z ”,Ø„¨¦"–†åª;ÓÄù¾ò{“Ž(¾¨¹4›ŠÖ-«yíeÕ£H‰Lzm”мZ/›³ºÉœÅ¦ÇÀ„&Á±miUØ6i[uj+Ò¬,3{¥5•`¢øàý1MËÝþæÙïž_ýËW׿»z®îe–*} ëœw`+7û;j;¬ÎEWL4+ëlâŠÏ^ðÜ J¹j=“‰OŒÏ€KG|¡»ôE&¦"_íÒÅÜY§ÌbQ‹WÉÉãÐä´„ªù°ÐÏÎi­ø"m=P-’–6pCBy¥EÔiÃLÑ«’¶årÐ F®£ð9¥i4ÃPrtªåF1?òâø.;ª­$HÏ}jêI2¼ë¶M·RV´|6Q´‹®åB1Ÿ™ ŒpOÄ|0ù1R&TT#¡‹%SòI{EŒCÑ­ûÓË#½2iÕ¤G ªšs[Bí l"é/®D÷;Ó=`"ÛŸ·T*Vgh*w¨ O¯îÜÇözMìQÚ2äþp5C]_ÕãgÃ-€ö±¼üh“Ì“0·8ÿ'í–!…nD hPpZø–Ñ[¸o|Ó¾ŽLW«¿FUÁÞáø[4oûX&ÿÞ¡¯ƒÔ·­ß~1PÞõ À4ï-» ¼7ħ?>šÿisÃÕŠúnÏè;íForܤÊ×þ ã×UF è_ä–_Ax×Dû+@ KÁò…ßÛ…†Ÿâ+SÆþ囀{ „Ï€K÷`Ÿ7þ@áå°e/V¥˜.‡.àT%€^"Vá†ëÅ’édΔj'§ƒ#«ý}+y茨»”]«¬\Òâ&§Ë ^ïaǾÒ6­Sê$ËœUM\‘cnö™•UvÚ&±˜§öieS;ï<Ù¸<:î7¯+ æmsÔÐݦ’¼­Œ•BIÅœc,³¢JÉ‚R‰ŒR‚`ÐY&¥$e¡’Y$ÏXfŠ+‚N¼’sjUL&„]&•µäÁRæÌÆ“ö¼ÒÆT­*ªdÀ-‚›Ì]|bÑ€ h‘»\b`dž É©ÒlÕ‰vɹOfŒç~Y˜ãE½üj‘ÚQwçWí¦f;®·RŠb±J“¶MÓWª6ÊVz™$K]êµÁƒ5ZÞL!»RBˤô\–å: IDATFÅè¾ÕbË+äÔñ<ä®Mk‹†­:·•E¦–'³¯DŸ¹óƒŸRŒÎ»›Ãõo¿øôæ³ßݽÜç—ÏæA.Šæ“ø¸›Ïýü0¯VÙ²û Õ¬ù’"Bjk!VÉó€<Ô3ºcŽbë<‹‹’wáî._‘,VñeKý–’b³>Ýúëêàæ‚¨[¯ªÕ–Ìyá-u‘¶aµÇ_ù|Ò|ÔRÛ¸Œ1¡x‹A ìøä.WFšV‹Žé&2Ä22®zHCœ Ò/šOAw³Ÿdn»•e9h®¥©/-6kÝYÍL"pç…£”•J°2¾°ÅåèKEA²{™¿ n]œ.íŠI®9×y¨R©BÐEܧ0Çý§D(úËájE¿l¨"*d$–Eó RŠ7 ×¼@gÙmõ8.ÑEJ\0¿»0åT‡y™Ìg—²¾XiSmía:ØdX^í‰lQõݸmKòÕ˜F|ÉÆùwè&px{à Pžô‹×I[Àj´¯Þ1 €chѱ }¦Ã1½E‚ò»á~ Á‘_k·~Ûúí»×;¦ _‹ül€pøöÕ׈yþaìÿ#L)üa.ZO€¯Þ—ÞŸ¾I•-P¯!{„€›¯y¡ï$' „‡€~ó;üý€—é­¯^<~û´o—öŸb_7Øl°N8d ¿–ÁöX?Ú<©Uò½®7È(-úù4hüsˆg`ÕÞ-ZÞ0 bôtiÞIR¨ä•»½}ô‰êÔOÓzóþÙÌ«ÜHZWsšK™ïCÙî¼2/wm0"8‹MfÛS+’_-½ž¨mÆ*%´rÕ®ˆ^¥Û™h[ØmœŒƒ™’+ô]d²KÒÉ$Ó,Èð˜2åäœÙ¡”,`1³™&J%ÈVŒ[¡ˆW 6“g™EŠ¥¤B‚¥œ}ËEÏ6ˆÜ°F¨%ñD"rÅn:[7JU‚åNŠsY›®h ©E)¢€’&/|´&¢c  P ‘Ó™Y"(#}%‡~î[6ä½î ¿lô†K#ì,.-U‘Ç*GÆ…æ¦}Z[£: ÛT¥jJ©§ÀÁÈ V•™¢x\Š@\kœUœ£í¨«’ ¾V±SªÚ•ïxÞLNPæ¹xp7b˜cѹ‰~ùÒ¿K7Ó25§/Ö_æ¸3Ãp6 š˜êdÐ%ñPB¾<¾Ýê”»t»‰*ôMR¬™Y® LY o‚ç£oà#d-‰q9–eò|±°(ê}äbIôêIêõZ=ll·Qz±Fí)›=SÖ—ÂÖ”zysKÉ‹õ{¹d¤‚u u`jðyÝðð]'‹D”Ü…ŒŒg3Ü«úŽQ¬loxS’/&Ü™áàÆÍÞøE* c "fæ"´ F!¥…yOq9fïÒ ®’‰K%ËÓ:$b,ΡhébŽI纥ØiäËt,î g÷åIG½Â•LŸëøÄ7y”÷sÝO¤^ÊÈOÀb° îæ$åÜß[Û_Îì!»Œ‘5†Ëóì®÷éÑÝ‹çÃýu“P t8âáñN<½“-ÆÏ®å+~2<Ú §o¾à àï1-à^khÿýÎŽ¸m—¦ÁŸ¶‡+ƒÿ–„êߣ|´ËØ…Ž^oÔy ²˜¿W1è4]x´´x«€öãÚúó¸Õ¿)ýCíYñubøz;4x€|w¨ïk¼xK¯ 4N7ït ¾Óõô&©¬^O/,@ÀuúÞ¾»\¸;Ãöô‰‡ù͸J ^œú.²\ȯ…ÀGWÀo€ª½Ò «Œg58¿_*Ëòúd©˜ ”*žÜl—/‡pµ¸ÿ öÅ~–õ'ƒœ”Ú¢ƒ C¼jJMåƒÅ‰–0 R±æWr¥·!¸\\L–O’ÒF0'g–<ºàúœ°Í"^Ì»ß!¦7fæ« @Š)vÓ -´’~³2™62c›±ÙÖDÓHL5å«Ì|CLwôÙµx¯ª2³²€¨;–aq=îõ°ø>ÿÎw¾sDŠ´.o;.Š&ºúƵUhðª:«JEˆ %N‰” +Z”ê¦ûøò޾x1›8é¥[ª8‹˜u>p„(+&ƒ'~šûßä=ÏPDŽÅÜ‘éY“¨xÙÎ_þÄÝK¶¨ÈÊæ3Ïš›æN²O7Ìfï$Ý^ÔzµYû IWá”ú5>l!/13Ÿr¸ S¤ý)-+ŒE ãõåK°»!Èn,wÝ|ÝMƒ2I%ÞÞ}VnÖäWZ¥?g²õG#¬Kn/’c6„q—“ד0éßDì¤-øRã‹'@ßa¦¼Û¯ÎÍ}ÃO_¦™í09¨î ÷WÈèŠsíÎh5ÓÍÞ4ãºöû 0Hì<º3à)ºK´/!^¢:†é; Ðþ%¨FuŠéúù›Æ3âMviy3œ£öWÈoCÜ?løüƒñv«íô®x{øcÛ½¶~Ãt²ÂUÂÞ=RKßIaòz¶`ßúíÖ>Ü`!Ñ{p@æù”Xc½ÇúÛÛh¿7¿r )ôU˜®ûï gÃjŸlýÞçA='nVn³À“…€\Ž_ïî2¾Ëi½ÀeÉŸÆöÌôÚ/öTµy!÷ÃÝ~åtš+ÆŸæÌô¡S{"͹­J *Ý(uâ,™ÄÍšå Æ=‘ç”~bË òßUßôU—ò±/{Mÿ¥^Ⱥ=7©ãq%b*… ”°™0PRC°Dàu&ÙÒb!1Ì-aZN(!¡dŸrr1¹B#áœxQ¸’„Qbð™€&BJ”ˆ¼ b ­i\ã‰V)ª5£¦dÎrä@dÖòƒ¦Y ó„i¦.‹B%‰å„¿„³1Õ3ý)­šar·v¬eñä_Q gò'”"Љ“ˆ «äTìJø’§d¤eçi?Ï™XKYQŸÁmØ Ê–è9žü­ Osùû†T^©Èç$†jJœL¬èÅB¨Mˆ§,™I2Ú¢Ò >Ž»œA²#ÓX¶9¹šDœ ~™\¢Þ‡9 syô>›NG¾¡ÓÌìN;û“Š­£ù¤ÕEgب}/Ýì§ÝD‚{öÖ¡²?ÙŠàyÆ“º”§ >ö’ŽgY`W¯Êz_1Sû ‚zÕÿ‚ï|¸½æÎwh´›þ®Z0¡þ xÁ‚ר$š«¢-8ÇNbô8&H{‹ƒÿ.æŸ5(3jÿ¨ŠÝ?’†–À—?¥Ü<ÌÒ¾•þ˜C} _ãzû{®ú–¹êßÔy/àçÔÞÿñòhñ‡ê³†ßó—À¸‚¿LØC¾zø,™ÂÛ»À°\ wðïà{É{Tëé:Âk‰¥‡ÄAÿ'¥f»söŦÀâçÖHþÑÙižYzõb…õ« ¹FYEM¨y•žµaä¯ö\ÿj¸ñlźҭñgg Õè‘ÖtQiŠÆæB –ä8uAòàXš9UIˆ|&ô•'g- ¢1ŸWó²½Väyð{^P·§Fß°pçl:q¶TY¶™ (űŽlÉÐ ’ ETT5DªBR!¹sH$­£”“LX‚ˆ€çÁ9 ‹Ìa u¤„Q:›j(ÁYg!›¤T&ËHH’% Ðe`Ù«);‘ÛP”#919s%d;ÉQC²RU…KÞðs±¡dŰn”R•jØîŒŸSºDVÚ'<É}æD¦RÕ•¤%ÖmŸüaŒVL°5 žÛÏíÍÓºªŒ4!¥|p¡$3 m¸Ž>Fgac•½®Š¢í5§¦æš·1 v1ûÑú¼jò”XVÖ½ÐK+[­³«æTšð•¥+N.dûñjQ»—©çêR°ÎÚüEÖ²C³ß||p^È.¦›¥ÞTî¼›ÙSv>Õ‹i·œïÂSQ–gw¨©CìSm6ÃâØÓèˆáçѪñ4²šÄ5Ý`½Q5ƒ)nTîU÷}éÿUÓÿÝÉ>- чe`"ÎÊ}°/\H¤Ót¿*øª¤ýAј7¬W¼©}㦿…ú¦Ü³ªy•×9mÈjŽ3+;—» ®Bå&¶ $“ÜÂCð}¶¾xÊ™FBJÎ!gK¬æY¹lÅ–çtèBÌLÐfY§lÆ)YÈÓõë¹n5=K¬°2Àüs³ ½;KãÿÔX·%ó˾¯EYøÀïmÍfi¸!Ëk{×fDøçÐ{48–Dƒºí]ºñ쇃Ãà ÝNY߉²/ Ž=p†ò¨'X‹i<ü)ü§½bñKl€£CØÃõwÈKþŽÀò®¸ï¿'ÿÈC½~_bøì§x:€ý3¾Hï‘Þ7Ký {ÑïÎE=b½Æ^"{l~¨kýƒuþ} ì žë£ÍE?žàº¼‘«8à¿YnAå7½ç鼎+`ÿÍ–í¿EÀ¾º‚¿†ñ ¸™þ †t„Çͽ0¹tgÕ+­¬ÄS‰+DeÙrKd%&Îꩉ§ÓšÆzôû)NtwW˜ ¶Ö'¤"¬ÞqÕ³´ñ´±2#ÛDSä!Quæ¼ØäwDLb) ªË¦&¦m eã¸Oã­@Íp­>):Í*3BËL#I1`ä%¦è ’ B S1I˜£9…`óP¼K4åBê"•T¦ÖLiÂRFd `†Ó@’#%pBÀPRq$.¹¨œ™‚””æBr$ÎR&¸·9#KJÆ$Ù±bV$’sëcN<ƒÃR“2ÕÑ«8J]¡DQbr±%¥B\ó¸Îjbæ,±B«Ì¸QÌ¡Zª\A]yF‰K*I$=h¯¥j‹)s<—„ ØÂNˆ:çÒH’c™ÃRd1E’t•<9ìŽöøù!.ꆑº]ÔSX¶LæÂCBr ŒSFÀÊè,݈˜g›çäýºÐŸk5ø°¢d•¤22?Å$,¿¨eEÅn})õ}aU?âeœ89ôõOeÝVº]Ø”S‰‚šú3ñÓ™Nþã}T:ñ}~6-Ù¨U4¿ß0ÔØˆõât±`µ¹kÏnr#û(pðåfQnè÷öÿ³°ºc'Œ5ÈBº;‰]¦]_ž½ê„žãÈ$!r3³-鑹ˆ.‰‰sñ$+*¸¥@KÏU],¨ÖYžfá}êЫ uÙ0>:Q¦28Ç’“UÙR‘#]NŒâkžLž|Êv=ñÇ0ØÈUdf’Ær¯góãÈoG!GžZZbòæØ®FqU‡jaiÙumûM±e(vŒ%êÊμ̦A×\œ–n¾Ý+À@¿ÿÅ4xD\˜÷@½— ¶Ÿgø ÆBYéFÏ'+`y@þ dQÍwìÒ$øW˜fL±÷ßGÝ¥ü1hOxíp| (`û¶tBQÈ@÷ ©t½„?þ)€þ§K ?‹ôiDö;ÊÞ•N~ 1<øöpÀ~ûI,ðMn¨&¸ÄÓt PÀWà“­3s ¸GCRí1ù‚k÷ÍÆ×Ô˜ÚJúéÔຂŸé¸^¾òÓk¿Í7îu_ ;>×ûóɈðazé#ÛÔ⃠èÖûðlAëX®þMÊàeU>Û×™s7ùMæaù· š’r ô+å@Õ‚q8’`b«2"‰’%—Ž|òqµ¡š*ך¬XEyê%'¬åâ’ñKJT¤Á“ÏC]©yBB›&žUíSH”63³šMmb!F=ÃÇ2fn )šÖ\+^+QKB(¥éa̰€$¨s’T(ã ²¨…)F3œ3%¢‹™dE]Ž’83I:G:³‰²)—P ‘cŠ‘%¸$5(a¤TÅ ›*'>3OI4…”kÑ1+Òo@)çëÀµÎË@…IÁIÅ©Ü ì3K1#„`üw]gëÿž•ËÞáèÈfÇ—Ç"[ !Ÿâ÷'¢|%ùuqUİþƒªDõJÒ|¸§'¾/öq•\sÖDÑ0Ú&i=SŒÉÌ>$­ØéÁk2:ëIA"‘š`í2÷¬ŸÈÈâRäÅ!冺%b4‡–É:—B:Õ‹~—'g)zÍr~9!‰Ï?d*1iû_W¯6.ŠýEÃÖ"¨/Îcó¹ì¡0³ŠQu¶;¼…L/„ß¿˜àp- È›¬¥“I/zt=ú p‚1È_ßùÓ„$S2—Õ'¨ÿ~8#þúñÉc@¦¯BÇ=¾&`3Òç¿_[í;¿ßº÷¬ç"¿_²ú›Äpõv—;ùßIæüe.újwøß=‹±Ãëƒ kàãG‘5p÷ý«¾4£NîßÞñðÃØÅý·(äÍè3¬û›GXoR03âaBÏØT¸j*4õÁg¼¸½ŒˆX¾Ày¸ŠdÙúôëžK›Fÿµúà¿é0Ÿìj{·¼ðTaÀÎ ¹¢guµ¯7¤.Õ‚W‚,f6û´£|Èúiª–¡”L¼¤®ÂÀÂlœãž]œªMIÔû˜'?Û"›âÌÛÝDŸ½ìŒ¨7¡jmáG—kÿáfz¶ÆÅyÍV5a^Ú9)Ló8Ρ¶¢©É½‰¤øEœlŽÔy?Â3Šš+ABNaò㘀H*{æSqs¦„Áˆ ³Ìµ±Õr¹ÒuC%ãÅ“û—ôü3v@‘åÂk &”ÍXb¢K²_HKžþÕ°$è>ƒÛÞa¡ÁØHì%`$p5>Æ®_·F ï:{ý [пüWð=r|<Ô~üMHüâ½æÃ°Ûë`û£Eñk§^¤÷Œ´ß…Á÷/$þL¹áýÚæâFïÌŸ{Ës¬û¥wü‘AöZ³úA„õœ`]L¾·q?Äy:Ì« ,ÍD¶ÇoYÄ®9`¶×Žb'Ö±]g/P=-aeåÕ@+/L5ΙQs8*÷õ'4ü¢›ûc=¯&½Ø•ö,ž,x¨L¤*—ÄIÌ9®(=º%æeÉÔ>o]v¾ªP‰ t¾[ôUêÇβ=ÒR&’ކ fMžs\(ÂT®À(ƒ')n&¾$‘:{~IÄ)ã ٥й4ÄivÁ§œâ‰Ñ#ÌIJ0+Éìí<+œ+Æ<¥)Y;SïS¥Üc6ó8qͧ²’Fš ™8AìPœ ÉŽÉç¸+ ‚­9“4rš+9ð•’4SZ`# Ö ¦s{¡V~.ÀN h â|À9Òm¿ÛÑGNš³Íú,±úmõåðå«ãKFB2¹¯ˆ«Š®H%8•"Ræb?ÉHXáÞê\²\e&iæLsšI˜…ÈŒäÀ›Êùup’&YÝô²Š‹j³Vª% ygÝ|?rž«r ƒš ñŠL1Nñ‡ZR^C°ª ùŒ.«®4êùÖîÊj¬â‡ÒÝÕãÍi‰kÎS°Ï÷óo§“¡„ŸÈ^6ÃI! Û ²Œžß.ô%ó•œ__Äê9=ÅZJ²›'ÜßLûWîìMËåž§‚-|Ñ‘J+"g~’Ò½œ§>ŒÓ]•)™~²)s̵Ão­’Ý®¸ ¿øÑÐ<b¨éZn2Óõ\x¸e¼qÕµª¬=_¥s>Š]×+o&!mö`*Qøù1uÌŽaô ªŠè v)v“à‘­¶Aä`ïÝ­1'©4,žæ² 4¥ûºõpøÑá¸zÞ²Cë>ËEhÙ=b¢¦ñj^? ŸQý[ã×»òómX—û 1P››Št…- ‰ë6Fd LÐðé·B"’¿ò–ćñƒðÉž—¸—ËBø%üöc°©F—æQ]£ýV!õ]'ýù]CÅô5‰ @5 q|ù8 ­~gÔþ^À\Ç7sCzsBâÑ–Ò¿_bøcè³>ÍŒ÷¸ Þšàø±/ØHÑûö’`ú6‹ijY&¼YâÀàoçüÇOC~xÃLôõÛ8Hø„ã—ˆ´fF÷¢ô‰N¥:ÌNdÌ™ò ×Ã_Ó~ºˆ¯ôR–¤Ï|u!Ô¹ŠÑïöyÕk°òyÇcCK#On<”TJT%3&<ôÌ)Å"£Í!ZÇvšF.‰ªi-?kÀÔ7ÿ;õø¿8 L¤31¥LƼZ<9=}F]Ç’èäíä­íű‡ SB¬3S…ژ˜ÅLõ)S‡\Ñ$cÒÊ@ÔYhZN}åãbd­ÕL-¹’mâü¨³S9Ð&;]ûã0ØÁ…©ô®?ž´LÕ½²z¨ñIi𦉱0­'zEóÔªxC\H±»ý´ûz5Ï*šýLöf+wö°ê—‘Ms¾Ò†µ÷ÖtF«ªVm}^ËYsµnâ~ÎÝ4²iïØ×¿Ü¢\Ô5[6е¼ üb˜Â@X[ö'$K{ÙKÉäʘkÅIÌÇ€OÈÈò®0ßç¿v™ñ$¤bB/ê DN¤,‹ÈBô1íîNÓSÉ€º‰XôõÆËûÛrëÊZ&E§‚½½š¢é¶N‡‰´ùVäùH7‘rê…c뙇‰† ã»,ÔùÓ .Ï!WÛºq‡‹ûh»>ômx2O+ÓÌi52g ñÉõÎ8GÏ ùåžÜ.ÄNqud«\­ ®h4ãÑûù‹hH=³þ8>üIóŠàªÆ5K‡q†ó’X…ä0ß0òa–›äU!Â(^¡Ïþî3¬#8:GP^a™Ç °†wîÉá{3³¸xéÀÀ¾„Þ·ßË4Ë+¨kôoÖ½-ñýØ8í“÷âG}ÇÿrÃ{¼n¾¯Ùýøü‘žôÝÎ?|ðöá ¿þŽeü½í£ß©Ú¾•¢}¡_¯L„DxÜñéñÇ=kÔFÿVÙèê¡öȰ«çW‹€ÑÖaví|«(qëÄec ÓYgÓ)TuÑb4'ñ”7U—,ž‰ržµö¸#]§û¨è!†)Ý–ðT ¦hEeãòn¤/÷m>úÌK›gÈ‹hIÕ1ñ”¬0#ÌÜ+Gz¹tBØÒË’+¹" ¬ž÷ùÞïÙat‡m°£#Yd›"sc\ºwƒ ºŠÜãG AJÉãHL•˜Ê”RJ]¬ôEÊ$“º(Í™Vžjé(w&¤ÌsÌ”ãC™Ov˜ÉTE‘¨…RŠJÙÐÂcÌ¥TNê–Um¥êü¡´@øF9u…UiÇ©DW×áQR—óÅRŸ´ÍìR™=É=1ÒDž#|W\_\§æ"¦”l݇–™ªbÐ•ÐÆmš:e x×¹YN«¢Íªµª=*]Ã\b²saÎSÛé8ö“cóÉVîb˜Š ù³ÓéEå¶x¢ë…R}É®²4H"EU$pŸÅ¶ÔY¶KoMœ Áu¡í_çÅ}›û•qÔØ²\dÏû£d'’¬ëå=y*ÛÓZÇq¿›ow±OôÕqNZâ6¥xf›f|Bž¹ªŸ*A%±ö~‹Î0Ll€8àå; i€ñ-xãÁ àÛ7j‰Ñ»·CÐþQ›_¿a ÷¾!~ ,Z¾y‡ÕÛq_þ¯„÷*þsû¾ùß…å,8â›åT~ÿb¥¾ÆÒ㳇kÞüÊÜA>NÆ=ìÎÆãæ±9Q©{`Äø €kàðÐC*@™½C=ðÛÅÚK¶ŽéÓ;} ß]Ô/½Ø÷u³9Vmíx0}fì–]ޯϼu›³X3«³ÇHœhR̓fÈaاtKØ×Èý!|BTS©ârºÏþj²yÛ-o·c<M¯«Š‡ìÑÌež‰aºšmg£šÙ騈¡óY+² …ïì̶x›§™¢ÓŠÅRÒ ý< FpÌVqá?"WtbÞ¯¢§,…X+¦‹”%ËZ’ŠL8")…£xÊÎuá$ÏÌF6F5ÁyN+ÒcÁÇ¢`’B‘e*ŒãFñJNïq,¹$Ï$ ¢ÄRü¬‡|‰æ’X…æL0âÝõ@;SmJê\bÑÎÎÅœ#-‡¢f‚´ˆb)8o*oP$o—‹e{šsLvÞêW!V•Pë¶ ªrÌdÏ;ïsVÖ²©¯:«÷>6n³Ú„$éù}ŒwQ¯ªåÙêtÝhÆaû dôŽØàRèÆÜ÷Ó„ì¸Ææ2ðaèuù%à²8}a|U! 8D—î|úÙîІª5ç m¸Û˜$“ 'ìÕ®™:Ñe^§òâÀ“>,ìð¢"õ¤žsÜQáØ4¬žL7Êy2 ewL¥Ô¬ŽJ9AÃÊðu%º8 I 3â4 >B»Ì¹ó^q?ŠOi¼ñ‚:Exé™ ÓDQ7A Dhå…É5u¥Ûß³¸GgƒÑ[T|:'ûýìR·§f)…(T&XfîbüM!µ¯B­¦…žmõGuŽ)Dûe7¢ofq³à¶åc,Ÿ_-ͪºÌT‰AÞ*w1pǾ¤W m@YI(ãu•@O¯ Çð Ç^‘cÉ¿˜ä'{¶ž7B´{ÎîgùÎ>)¾Óˆ@ÌÀçñõɵ{À½¦ùö­˜Bõ@†|íÏ „7=Æ÷Æp¶þc¾Quý®«ŠŒßù¦=fŽïîaõ.%Óüß­nø:Ô~ ô_¼çõå?ú6°óû^ÙCçÀ«wÁSó›of`÷Ø^|Ͼû Ä£½F{xœ†™šT8Bí¡ýK 2Ù" Ž«=©‰pMí?Ž'gu#–˃ycX ËÆssu²éJ ÓÞ†\]æA0›Ù @$ Û6Œ4JB$ë“HÄÁßÏÓÆmý×éëúþÿLÓºØÿ…Õ+i]”’¤®LfΖe2Ìóýš¸uy^“SæaIî{ X¾Ñá¾ååi"&Ž ÁæP¤š=¯iŽbÎŽmK^ðYƒV"£†Z’XCÕÔ+ “œrÏJŽÉOAq2V†ä,M‘'ÍSô9ZL‰vsÅÆH-)”¢]Ìq;g®„Ï4ž=QQVL6к°*&>;Ça?uã<óDI)'0(‰£·ýtŒ sr'¡6uqóØß&dÝ*V†||ζ¿Bø±ˆ…Ïó4—jtK¢Hä;iFƒ¤ ¦¹åŒ Îh­YH RçJ¹È¢Í¦j—FÖ*imsˆnäQ¥É©”ÎO› ‘ªW^oýW¹{fŽ ’>4OW™YÇ|Gæv½¯}Y&EJ“ã¹.Ó)JjÙîh*ð ÄÕŸò…¦œ–tóvž&î•‹`’V˜‡\ªü9SI=—ÉrE## Q”¢õT­ªLTÚ²û¡/î^0ŽöÔ‡ïÎéÈß äE@Ú#_£÷QùáôÝ8Ù¿µÿÿëæš‡Âá™ãÝ×é¿[nxãÖ˜¯Ê„oHD¿· ‘À¾˜ž¿½ê÷'¤­‡ÿV†ïðv@ `Ü[Ûš€$Ö~5‚½¥tx @áÚ=­²‡-Œ]Ã(/Q0ñpÈT¥ê©mÎ÷̇v_eA~så þçPž„r¢kïÃðÂÏË̹•ó÷¼ãÑÝŠ¯.SЇ3Ÿvâ«Oc˜ûéøÛí~¸“ñ3üû倿Ú/—ÿO-¢’ç%/d9i"AF¤¤üÊܯI¿H.ÇÎÇCJMñ%É¢ ;ìf¶‹¹V³žÇ’i!54›MÎe˜¦0GvTùƒJV•æ§ŠÖ”¶1ë„D •4YȧÀ"J‰Ù!8¸Rú‹,IØZ$QkÉIG)½ ž§¶ Š¥~ïeË•ñ\¢ˆªô¢ÖUVϳ?Ãí0=O>„L¼'ÅÙüdYœ³Ì3L¯òvù¢jÃI.^(É©ö¨Ž;>¥T9Rl¤ýXèAh^r­½63OKVĬC¢°CrÙú8“z¢©ºWN(±4:á(Jâ,%¨ÔŒDEªk%µsš‹‡£•/O"³±¨Î’)û'>ía1Ç\¢ –ú}UT©™Ti"‰>'§¹¯þº4Óys Ë›K<ÕU»ð_s]øôåêð$ž^n>æü‚Ò/šO2íÊþ¹K6­ëëÀ¨˜HÉ´ð@5Äp>÷†ß2Ö¤nˆ\Ss9%Ã2[ʲÎã"説3©"±{DÓ4¥Ow»¸uä—r\XO’2d%uë%'Î[гr”d7S“´€OC‡ÄbÓ;ã“¡ndÇÐïó~{6ûç䜣Še±Zù°â›¶(–e* åI<“-Å®-Z—ÊÆ,lU‡T²£ >}Ê{ÈW{ó¼‡(§O7„|ØUk­›Ä¹'Põ™ —Õtvwwê—%ÍçôZ*œÊ}W!s‹äå§°EÉÆ\éËŽl„¨dšj¹Ûëßö~gËúÀLÝ.¬H«MX®ËîqÜ¢¬ÑZÀ<‰Éc~8^¿‰p xPÔù5Ç À/ÿ {Kù»yüåý»¹ãgŽ „|÷ŸSúîVN±gÓ5^|âåïÊ Ão ÀòÁÍíõÏÞÐ3y³Réß@Ù¦zwßxs¿¶ÈÇæˆkx@rø“Gï¤Ã%À—òmßcF Ü߃xÌÃ"A|ðO[!QÖ¾×ä¶¥Ó¨ } sW X/²Z¿«Ä¿‚üC:ØiÇ~ÅÇ]u{¶u¦ûɦìGõJvÌ$› sî;?lõWŸAOþ@%äã÷JüNÿÃÄÿc.L§LÙæ´’R¨ÊCýzîûÎþÊ––f´™é7VF_ŠŒ;27Å’.Rk‡Ó¬¥uÙ²àÚFh®ŒXªeÖŒ(0NˆIƈ*35º€ò1äBLÈÄr>åâc¡žÒ"K ‚(êJ„‹ÊºPÉs ¢ÈÅÊ7')dUU•© 8õÄÙç©;Œ;?쉿­rR›ý4o‡4û¨"% nGã‹#šåb…S)´Y²VyT-SýŒK’ ;Š}½ˆ²§¢g‚*žŸ(ºÈjíôòPØÐuÎu6uª"îïà‚ÍýB B( •,&f—Ž3¨©=å£óû)áX²%Dù¥ ñ03³E*ú¤„D曊+jN;a¤ÊPÕVkvIYZ©LÎ Ûœhvi[™î®ÛÚt!þ«”ÿ«)Ua+[Rn9xïÇJ G)?5Òꥑ«}iJ'ä‘qz‡j§µnF=3“æœU$I†òäJ´}¢$.14Oæé4c©¥Óq<úØ‹ýŒûЦcB¤^Ñ"h’šÐÀÚÒ0ºm3$>‹´e·C:Êr£9QíXºãÜ7¡~"N~>6¶×K•rí•"ꓨM¤§ÅœE ¼Œ¤È@íœxOØJRèµÿ·âDí,ñwywí>¾¼¬øš¶/èä8©1âESo…ÿ±½[Ñ™ñë;÷…|p‹1àVÈÒ{Äá)ß.”¼S›ÝúèT™KCŸg¼ò£ß;`+öYÅÛº™5%G)Ž&'·EüIBùÇÀ°Äv AÁ¯áü^£D\xþ:2sûM9ËïÇ«w½ÞF~Z@½Ù„.2ÐCUú“çùÎa´;`/Øk”Óñ½À¨oEÏßNzwï_j ‰ì‘ÞÚè×Y§¦%pÅÎö<ï›-†‡¾u‹%Ç'DHäOAÖ{ì[ùñÂúâóêæ«z}£ŸaÐzd)_îóx÷¢é;²|¿Àã%©æcžYéûº¿w#ö–~I6ç—{»€,YÓÊYÿ<‡.¸›>W#šÀ>ù(‰ª¬VòÐ|ô™ür…,!£Ë=#¿nجü2ÝÌ©¶¡tópð.2  MW‰mf´š …§Ò Œ¯ˆ` 5u\;%\äZ‹Z6õjcšŠ€çÁ «„PJ)ªÓ´È*qZŠËqˆIúB£‰Âi$¡E°Ì¨#(ÄrD  bÑÌmxKˆVÊ0ÁcˆÖYe'–•¦qçívžÀ-ÉOÖâÞ—B\±µB{–†[?fª“É­V³ÄìVÙìIqœu”& E:“2~„tž‚!:Vq¡’–GΆ‚ïe8j^4/”z?§ƒÿŸ5þ§‚Ê¥‚NlxDúB_=üŸ?·˜r?m–ý“7y·R€{!±ºÀáò-El ÔÐw-ÆKóyÀa‘ì|nS;là[àÏ-š€?W¸«q;:ÀÂט"I([Yá‚N—¶iâì‚/ŸD)·’íŸ&;#é@rYýId¹pJ¥:í]^û"R.ûD‡[­¯§xÿZÎÙü,ëbò‰mÿ[K@#L|F·¬Í§*‰Æ|\5Ÿˆù‚W;®E|šC°®íÈ ‚ÿÈÌDí(õ%iئ[•³Ö uJÎfFj€*f}á)õËfQ•¼LBE§„cK-ÅbQÏÊBëà’g œAÖ•Ò%$`œ;ÊDàÑfXH@‰¦¤‘©PDë U Ž%>'ÊÂd€NŠ‘$´T´šI5#¤æ„Jd‚Ì®d£È`oû®ý×Êì…×MއFÿÂM šÏ³áûdç¢÷éÞmΆ²j³YÅ8±H-£¶âžrtœSÁÂQ&…‹Öfç³c,¥”aü‰a¹ ¡®ƒIð…)úm‚Ô IDATDTYH‹€°‡™¢1ßÚþ&Ð%1UÙz± ¢FSÏCß§¥Q©€9 ¹Û±ZhYh"¹éJs“vJºžF%IU•È_t<Ú…*({Ît0a~8.iI\Ùâïw™Ñ&4v< {–'îE‹ )Ý45R(‘èžíÒ!ÒÛ¸¼ïÜÑ®öýæÜÖòµ\¶qökQ–¤iò`5ÍUr,3;øNh“²P6j:Næê\Õež{­mC©'§|“P‡äÃ8æ+í–²¤È!„¼õ-/ñóvÔåžÐÈ-¨ÔÌó©Ÿb^:²•òö£SýdÅg¡!XÃ![—ûa¼éúývÙ›LœÎ2zºÙëª|j¦ÛÖ~¡ÂLµŽ}1&Gzò×·ù:l^Ãã³ Ëîî‡/Jæ½<,  ®ÙÕ}0•ø´ké Ñ´»Œa/ý7¿ `@\c¨=â%Æÿ=OL8‰PBµÐ%™!ÜîPéðÐLÎ?Å— ƒ_~È î½.vü£ÂîÛÖS¤.ý¾¥‚©ò.tŠñ™áêùO×8?âòzX`þ°Vÿ€êÞáæý÷ Áš£ Èx~óòWJí¬TpæaýÊ=[¾‚Y?'oÎi‹ €2Ã8Ë-Ü­T¯‹úˆºóV(D¬kõ”ýj¦LòcèÇÑÊMïwåçòeè3=—󪣯g Ë|#åQŒÿQp”ösÑûøÜܶò®%ê×Ó±òX¬Å ç¹? !E˜Ämà_“wCa^ÿgø“T¦!}9¨ÖŸf"&·"JKJuØs¿³Âxö-erhÇû¾9È"ò†ë&Ë*Ê"0–Pç0—BWš$"¼>çYöEÍ$ûŒÀctžÊÀAy) ‘”ÄJ® \ ¹!4¦*ÐHŠ™*‚¹a@€Ï)%’‚7Ñ\nIîs"­S_‰\ùX#œÈ¸,±ö• ÷ƒ_zQk–_&"í?ô&q– ²æ:01-3Ï0!‰‚è²äT–!æýM ‹i*„•Ƥ³ Ž1§–TqJÉÖgéîw-“¦Ø]m¦þuôj °\]bÜ'®ç¡‘1OýážÃÛÛ¾vݼÀ¥ …êm6 ¤Ð”ÓÜ ˜í ¨#« /…RzpËÛs:ü"pÊóÎhU}¤ä,ìzë݈©è’šK®X–*šYîTH½¢D|Άê“}ÿÙÍN¿šÊßœ”'8>†’9Ðbà1kR«E-×,óJ»‚Êó€T ÍJq„|+=‰;ÎÍ‚E–DÐ(¯ÀDxšÐFOdˆEÖ!“¾Ç¦ëíC±NìhÌõÈs¡§eYÊùÐ&&c™d½]4vјýd·¿Ûߎf7íâÕ¾ŽíŠl‹1>Ì$ü¹|ʼn˜—²ü†çRÓjA«‚ {¨äÔ¾®6Ð’bUV\å!~á®1_ºq&Cu¡€%’ÞwÜô€x#ÐîèWH­éct3Ò…^BˆáHeÊ'ç_©Ú)æà€éý)ç `ßñžüñîöçÍéÑé÷£Vøa¤¦?kt‘ß]ÊK?!êR}?:—þG`Ç—¯ßýƒW@ýAèwÅðÚ÷ãê­šî.óîk½ƒŠâ9Øû†M§ö €¥¦½µμ9çå.0mö7E ¤‡dcœzØn,pÅÄýqOOÓa&òzQ~T-ì8p²ˆãmØnoÓí¦«¾ýO|õ'™ŸæLûž¤ûã9žy¤+³¢á« à®Ž”_ð4î³1®U¹*Ov¹ß×îâ`TçÂ(_Bþ¦Ô]þÒÙÞV'iâšḙ̀øZJˆ~Фp©HÈ¡‹ BÏ$b²Ð>¨žTw¹–Åì¤.¢#rN©æD—PE $‚ —ÈèÓ®Ÿã³#T÷`97¹‹@sJÙf¢)G¸ÒBiŽÈH$.TQð\Tu!È!<¢§.±ß²öj>m×~¬&yI0X“iɇ"£²$±¼®†‰ÑƒÁ¾žNøŽ*…¥I…â„Ë’!¡‰DØÌýQ®¦b¢ÉDFB§±K/,”t±²‰Q¦8&A‰ì†»®Û»úîÕ8ÞqÈ®Ãн4#Ö>îÆC`Ò£¬_,pîÆÂ2nD'¢·<êfÑn#ÓrUW<êâ㽑tÃ>‰6‰äÊh9ͳF~TŸ÷¥3 BUÕñ²i˜BºÚ‹}ŠŒÆ´—Ñ.†ƒÉëhÔ."¶™øt*¼_ áhKs_ËËÏæ•­uÇÕ ˆPôH•ÍiÉ–$ JóÌ9æde›ZŠL& Éc ˆ¾ e}‚KVÅ5i¦4uÑqW³‚Õ‰ Eظ;…¼=®ÙšÅ,™S!1^Ø(…žUüLˆˆFØ)Ü¡ìÞf?ôÛûéúÖ½¯vþÿ›ŠþsF~9ÖÅí8ͯm ØÍN^æGÅöu}ë+L®3æÅì¿êA*9ŸÀ*)£ËÃÝÝFÞŒÏW~)‹švIÀ{ÈãÓ„Õ5þJª¸Ú<J@;d‡Ü~É¡€!´_  r-ؼbø Ÿ6ä›5wlðNÌ9 €r y£ï ìLޝ>PûÁÑéFê‡}ºé‡þn?ÁÒü=bþ…zJÃïÅIô?®Áç íœv:?ºêÚ= t;à7#?yQà 8¼1lòÀíNmIð)Ap÷NZÐîq™2¦gxã>1 8·ë*á,ùßL"îílØÔuþä‚=9Qs®•-FƒÁmì!ßµzLÅítm”U~XlÿN„i Ë-ùÌëU%†ÆiãbN¬O¨"ÖaQ§å‚¨åò´KñžV%²´ŸÍ‡'§$ñK×}#·Jmfx"x•ù'Ý\&UzÚÃ’ÎËÝý±2L–#ÓÌ%žÂl$–E§õbµžiž„¹Šð‘Y!POJy¬•O¦œ©DI™$ÛLà] ýnhw»ÞNY½Î $ë’’*â’ñ“Ë‘Fžl満*W,ج LK1“ v4 9d憱ۮnÌ®MÌjÏtp§1-•; = ÆÆ8:2›Ïòø"ç¦`·SXÑCr}æõÆò±·cf¢‡Tú—C ÇÈaš†Ë0F[jE)å¹ï‡1Ý"‡\hÎ…&‰¸ÉmÑ«@gfšÓš¶ó]ü6öîú`úqËNýMÖ4ÅužÜeu¨9(ý’ò!±³Áö}9É#x¯ºÿEMÓ‚Ÿ4Å™$³ ãd¾.ý¾ÀÿÏY5Àu¶¬s UÀEQz=ÑÔŠ= ¿$LqÍr ªV¤d\ÒCF™:¤ê¾—Ï%%'ó Döt¼U›Ç#ÿÙ¬¨eWJé )þ®ÑŸsœVͪáº6† $•½Ž¼\Š“ýî,¥ÙÛLT†adò”©äN¥8u{ﺼÛCtfTµ&ǽ)xVD‹óŒO$C†Ü]U"")Þï^m½I†Ä¡ïïwÃî[‡V¬¬û¼ö0Öìu©ÇÄ\{dÛ?-C 4gâßzõEÛvû®óØ:¹G zÝ2¿LÓåv§_à °vZ¦ñuú  ;¨ºÚ4á Gs”{Œ-¾* ê€ç{ÿ³wìªky¿Åx„Írç¨j¾Â;9«nÓù÷ùðÚ`ø‰ìV¾37}3:ý°ÿàîóû¾ºúÇhåýc¯Vëo> ïâ[7nçŽ arÐï>ê÷ÃC3+T@óX夞³ß¡˜ƒï߯(Jö\Ep,ž3¨êklünåNe¯“Ú^ì~Ù¸ÕŠ¸ãLÖ\ÖR…>ÅÞî‡Wmûõ«§‡Òí`ò“ÿ<íú³Wh–mœÙ£¬–¾ò !4»0UdÐU†4J¯ë¢IZÇ$}%óy-ÏÖËùROìËÂtºX¬¨3fù>¥”©tqmå!Æ-å7BÈR8·fµÞùŠn++ù¡ãÑúâlù‘d.vwƒÿ?lü¯JüBÄ; LF–q2çHàGâS4~¢#äÞ¤nÓ;XÊ‚õ>û ÕV$ Θ¤ªÔÈ)c2C&."çxp¢•@’ó£íÆàÓm£5 anrO‘çU8C¨óô„´MܦøÄ¢¾§ÓY¸ŽÓ“2ÈhæM>L´½'[Çf·KVÖ9ƒR–Ü-¹¿ ó;;uI³‹ÜûÄ‚upð@¢'®m¿‰C&ŸÃàs›ÈpUÞOüþkÃWº`ükÐrÔ³Aêqäl3’»Žy£wÛørrÕ”Ïë)‡e1ýUÐ'VD2»iKØó ù%%å²ò’;e©ÚI?ÑÈœ5=u[·™¹æâãÓàÇ›²šÊjžª¹Ì©pZ¹Þ­Ã°w¬R•XLÔû¹Ê1C³b%ª%¯e4…æ•8r ¹à‰%Ï“5´à´Ô²R˵^ÍG‘‚ {YŠ“œK—MÎuåh‚Í£ã92Z)\åjÈc“¿åÓAoNxK¦…L2¶ö½²‘2?Œi1«³Kîžx:µÎÆ›ÄqŸ¿>‹ ìqñK{ß´LâäÂr0qêiòÛ4íýn7ÿb:hÏáŸeù›«Æ)y¼HœRá·ß„{×c£ÙÎÊo$1º °)¡žŸú¿©fzÏò†ˆ9š3îQ$tÛ%Ô%àÂc‡hý …ßLAýf¬XE€{Õ9Èw:ä ³„SàåÎö€|´¢ÙIì‡ ß†wª/~è…¼ùÅ€ŽßKÂÿ*ûcgÿòÖÇ^¿ÃÓKl ¢ø ?«­äà›ŸÙ‚{ƒ %pß#  è€pß;8|\íA¾§¦›$È…6à9°ªôvl^çv‰äÑ…Ã a©þBÄc#nBî<ž÷óR’;š^C®Mô]‰–懒ëb3-kÃ6¬Cc¶'γüJk]5¬lhÈ”I®—•ªy2q¯§Q9ØÐIA›ü,È«MìWÔ6Ì—±¨½XFu 2 ‰)kÂIæà¢Ì󪨚B6”ÒAZ¡årÎxæ.ÄèÙ02H0ÞLÌš’I俥=¦ý«iã–´J¬žŒ>·9ÐÁŒÉRŸ²Kév wÊú–{Rî£P‰Ò*aAÓ»÷Uº&‡hw,Ñ~Ï÷7ÆÀEЂ>3Âå»Bá(£r“,¦´èRÍ~»ux…(Â!WëbÞÏ‘#|ûd{óËnÊÝ44@ø ÔŸv™»¯1Xç¾ëËóµ\׿M%–g(ç(D'!ñh]ìð4bÁq€4¸°háÛ’ûwq?À½ßöøÓòaíçt‰"°yþjü7]7|èZÚ½U$<|7ëÿlêÂÏ~µ{ zø× àáCM_ã›»=°{Ë—Eg½ºÀÑ%üsãQL}®ñ|6Alп6膊¡x"¿YÍŒVfãvÛÎ ¦¸#ak®«ÍWGÀ½Õ,å¶œ—uQé}í^ëÐrâç¬àª Ç)ö’«u›³b±‘ñR§èýe ÞŒMyyp†ôýq†.µÌý¯‘<±§-  yj¥jSàG#«rHŒì—zQªZ;¤{³sãýÞöBëYQ$Ù^lŸºý˜¢žTÒQ7ã³fr¬gãŠ[ ¯Üýó¶ã*b9+ãXl»½aÍbQ͈ .õBz–beîͲšR•:lGG+§/¸(ÔÙ  ëw.™\2jtÜÖ‹›ÄÛÅE%æE¿ªmÕŸÆ¢–EK†RÔ¶Ì2ñÃ$ö†^v{$)úg“ý»‚œR"´r‘}&/gìEQþwóôYޝèE‡JLD¸ƒÔg «”yâÔGšNדÌÞx7uR M‹"¥’˜‡o´cÊQ2atéD)³Jc „9ž¸lE•bá'a¹ur™Å*«S*k‰dÙ˜©÷Á‡ñÐoÛIT8&öžð$ˆ]£ÌîD×jïÇ&(휾>ìÙðåâ‹ËpÕ…'»²zÁõy™OaxÞW‘kŒÑÑ} Ð1s›q a˜^Úÿ§‹z³>1}½é2õÖFVé¼çÚ¥0ð(€¸ÕÖ¹°/·Ãò!^ƒ³ ÊãprC?#ZÀy 7,Œ ˜€¡“€C;"ÆÎŽúÍÆëc6].–cºŒßý’:è¯P!9°ôïÑ:Ïx±2Rt²z¿=2Í3q^ Yí““S1s³Âš"&yTUÉë7œ›"' ²`ÓÓdS`¼„Њ0iÁx4ø8X³7¦u¬í‹!ÑÊ&€g«&#Œ8u*éªig\á÷³·Û!Ýn3Žþ·›Æ–‡ÖÜÍtõ}™<{úíÃo“ô×À`ÀM°‡_¾ 5oš6o5žI@ S*àêq“Žàht¼­Ú÷Rãïåñÿ1Üÿưa:€ýÄÄœ½Mê¿_"4èÞ,3£ñßIþàt~¬Ýöƒßÿ<žcÚcÓ’ˆ$ìªK ‡ÇWáNÏá%ÚN~qóïØÆÞv¿ ‹ñëíÙk*ÖL¯ÚžÞ_!Ì€±*¯íyK%h>)VͤÎ].†¾Ðgi^JÝZÛt-Ã!~¶ô| 7|@ àÖ)%Jvöžd#+0‘8d.ËÏùÔÕç&j9ÛÑø1ëœÅŽwû&•#ª}!­âÛµ<9/Ο4‹ºh&pÏöŠÝÓrª5Ô±OÕŒnƒƒDÌ…unוý(©M`ª y4ã!æI{®,Í„YJs•ÈܣБ‚Ê%PR€ÀÒiˆý.ši$yBbÉK1“6[ã:ìüfÄÎç !•6ø”3EDå:“mDtY´Œ&ªÉ,¦±;è‘~~G+¢i:ëÃÀrÝÙb<Ìl±ÉÍ>1I~úk‹?û]ÇŸ7ù<Ì7ÑÄÌU‹9AÞäÞ³Ûàü41?dd0‘“Ì^æ66‡‰š«^ÊmÞO¢° ¹ºœÏESy®2I<©ÙŽÏŒÝõ‡)í¹.üê`…üÍ‹ô?|Í×OÅÉEI‡w/³› Wðºà.ºÙ®¡ëFÉãQV=Q6š?×»5=xF›O”Òíýþ¶âŒƒM£íÒ½7¯ê°­øÉ‘˜—bå©ê©A©Y—ÖébbM.VµªŽ eâšP•Á9µŒ9 ³·¬ÓRóLË(UŒqšàƒ%!wcØw›­Ï»XŽ˜¦ò0#—d$nçú–Vë±_Õ‚é)–d³‘ׇ) S¹,§,6s»± ÞÃ’%åÂÕIòQ6c]gt<‘¹`±¶âdËÆrƒˆÎ½î[¡‘©â>~åc‹yÄøéÓN¬Ær/Üaá8üIÂ'%‹ØcGGø­‹ ÷wWÀ[ aÙC5°<º0‚NÎÕ#s4£E”ý€úŽ“Ø~ÏìòQUAþ-y3£xÜ– áѳáXg[ /qèÿNt30<@Â=.ÿI÷Úþíaƒü›ìGê ø6©_sIØ„èFùmYðƒÓ‰?rs !ÀaÅ9ßq¢v-6øeÂÜ—óË´w`XGGp9Á@“¡"{îl°÷Pê•üÒ¼Þ‹×PØÐg›ðµÎ9ªqøà¨@žTq»ÓKNG9Ê3—eë#ºñÙmºøº¸SêëÆÌ­Ûæ$ìQeŸÒš“a¸×¤Uê] Ô„Õhš J‰böåÕý6&ÎjåE?±å—¢üuÍŸR2Óu…¹ˆ…u c]Š‹ùH8­²S½W&å=툼qiÖó¦´!ÄhR¶ÑÄDdÂÙ)Gž¬wL2pFdÎ4)²}È);‘³q1M‰xëS×%×O~èœÚÄ1y[¤bœ˜ßnwSßk9Œ ¥=­%×ÊÝå0­…èÄ„y­¥/’¡aïSÞ2ƒ¤-Ÿˆ´®È"û&¾˜“#}ñe)|)–óE¨E⃋‹0žó|® "„°d&TQf朿£þÛ)o¶¾>LÊú]FÑ3Ki´pQߤ¥YÖN¯Ó6Å?mg›¬5«ö¹½ÉýXl ² ~xÑgìß1ƒ ¯¬šþ,}Ú d¡°¤(Kaî_ˆTlýÐÆî—>í‹U\°9—¿Î³ =·ì4’†HÎ`„¦£ÃäÓdªô '¿MnÓè¿Rô\¦œeIr¸œ ÕÌR%¡ÏLÀ{~?êjŒ…ŽtŒÈÏïq<§'¡ÌG›ýH@%è09ß¶öþn·?ÌnÆp°¹†¸ë‹~4a”0¬ØS8rȀžY‹?c‘åw '±—Ç,Ô:µÌŽW0`³5¸ùn×K`^bÓ>«MH€‡»ƒy\BÞ Ù¼jàþ‘`zåCÿÖáMÒ™¥ƒŽâ €ò€ÄÌa ”`(øAH·?ç@ú®sôÝõàq)d÷ënºüdžô‡ÕAþ=‰‹3`@ŒÀ7?~:ËG–ØE…Ëø¸©€G˜™{Ôx3q~¶yPÓ{{i aÐO0wÇ h,Dr0­Aü'eB‹ß H ·O€<žã €Dñ+²@ž¯p×,ÅmŽ/wìú¿p^vUu0p»¯Ô^bK,Éí"O4°z”ÕøgÂ}dêùŒÌýç¯YûÔc¹‡ž}^Ì?ϼ–t‡@RŒ£¡4|Éù%-ž\†p{=¶d81’@ĘرiÊ/ÇÈdZX™S^$ì¸õC8D?`è´¥Ñ.Y3©=]&)Rê5 ̉”<ÆÌdžHð‚êͨ@ýÜ…ÁKRFâS°Æro]¶Ü‚ƒë÷&Î kb”9D&3ú@'dïîL'›C˜y*ç>†œF–‚Xk*XÙ'šT¦9H—g=EØ•ÆÓL¬sŒUŒ$žjS̼˜Pýc¯:ý„ÔR²%;kú‚;îhÈšSἎ\YYÔˆqÆ>í'7nµ³>™{G»(>/¬¨Ñ Q™RMçG„æÂ”„äC~²÷PCû¯Õ¾ ¢é“¡=®,˜¬“õþë°ZÒ‹³ÂÌjâPVì9Ÿ™ÈR7ãÄD¹›RCEÙÎʸVqŒ ¼b'È‹ˆ¬$=K;nïú¼ï!ÙRi™8Õ‘L,êýH‘”Ê<§ät¡¸©àFÄ‘[ §RÇs &”÷1’!S±ø˜×UoÃýaOl¯°/©¢išF{{ç®/Í+Û^ç|ëº~Òir3ñßz“ IDATæ{ )·‚]«Mo âWª•ó>ØaJ6«–.àÕ’ÚÏ·q%’®‰¡tТ|‹ƒ¦ŒÄu-„(¼S¹í77›_ߦ}óÙ•a¾Æ®Í@øÕ§P¬Zó²šÕŽ~š_TܯGw'ð×óæB·.šöÁ© ø°Àóä)èÍw±yþ jå'ntÀýƒ:’{7™·)~ËÑ&Mtùí¦ñ#–¸kH ÒCCC a«#Úö †ð ûï¹µÀê0vÿ\ý¢{ØðÇ×As`B·ûIÉîgï8²^8ö>Ì(@?Ï~¸›ñþ-ë:C²•ó;8ž¢ÀÙ {Ôô¾x¾ì;¾©óû…77lÂß-Óò ŠîBìjSÈ~ ̼Þfæî=öŽŸC/ïNëÝ9ý§’ܨA1{Ìf'´žzA´ ñóçæù6¡d_,òržëÙ8©€¡;rhìü/ ¹,¦SÚ©iÊÔý™Øº©G÷ÌV^n4£b•†²‡fi/Ü]Üî†.md˜*J]À~èG,Î@2@¢lœe™f|Sq+õ‘'˜1btÁ¬ jÜ(yÌ,¥èˆóŽ'Ës‚Έ$ûèÓqco3Æ2»èœs´•Ò"F½àЧÈLŒKfçJ^”³FF¦D=’îŒÌ4*6Î;Å,Ù.Óqtȹ·GŠ”ûÙŽò×k±éšôŸLcu„¶ÎÙ‘ƒTJŽWDΟ*Ž4’.dKy$'SœO®÷SméêÊÌ«”×v¤tor5?•ZŸ ø”•·Ø¹qzöšôûòüüXf¼¢œ©jéIÎv—joÖÇeìçN\,«ÓÙYAä]q²ýµÎZIÉÍ6»Òs+…â©HØžÖÁ¬q(§H€ï‚wÁßì^K™¹¤b–±IòJˆßJ²È8VôHªB%Ÿmî"}Ýê‘2+|âVVº…ÒV¢ókñ¤` ¦Ãövë§;I£¤\ fØÑv£¯ÛÁäoµ¾,Ü™ÙÍ&&£îmêé }fqênë¦’Ž• Gãê3v¶<¶:°ûdé!Û])¢ êÐÆ©¬G®{Ê÷I¦Š“#]ª¾»—ûf°W«Õ×p߉cKˆ3ˆaÎ\L´ô…ØG÷³c¹ßcñׄ8¿fûá²ÁÑ”àS @%Pà ÷ûÄÚæòð]ލŸ¡<ÇJ`7âúk Åˆ ݇ÚŠû辿i ‡Ü!ŒŠáÂ=¸LK¼~–ÿñ›à€0þA]šý‡Âc `÷'®Ëó?åPú_Ñ÷ÍýôÎuñv7äM—P`'¿;¢?¦ÀÙG©Ýw˻ßñý™ö›O®F)î.’»üȹ»,нs}ûRø|{…ç·~„zêâøÛÝ(Ñ;ˆ{aÿ †Ëé¨Ü, Uá²Û=wÀË”ϪÅùGõvEKìžq†rbE+J1*vÎX?³9ÈJºïs Nrb £·e_«MUÛB,ì}™ïr±™'žë°gë¶ö‡+ƒjRe­)‰|CýÁš0¹ÉL²ºSrS°õ¶­©¡}ŒÐ‰ë<¢,E=°™£…aL'n<5– È'Ê)BÀ(Í̃c&^$} žf8xD—óÃÔ‡ž&w"‰È)Ri‰p"iZ1¬ÔÜùä³í²1Z&^Ö’jJ#™êIpÉ’D`ñH¤ÀI&¸ELƒeŒÌt%cQº¯¶¿à_¢ç“¨Ía6§nתTJé§Ž&CÆûœÏœèQÔžYá­öA…,²YëÝ g²¬V’ëä«H“yª-B6lT†Êî9—~ŸËë<‡LHÜëž´őȫ£[oM_áëá°Æ.2‘þR¶¯P(„ÞˆŸÐ—ßß§šÏß›n6~ö]…ð0+eîoÑ-:ù³èCñ¿‚Âw‘o2@^½'.0üQEÆLËÿµ°á÷(ÄŠ ÿ=®ØûÁsÿŽÍá˜P¼7n.ónRpü‘ùû#ótp8\žD7@!_ÀáÒ[>ÿuóyÕÙ#ìƒðPo®ñÆLнî h»¸ŸqwlÞ̲ÀQêÓºšÑõ¡P¯?vrwÿI¶ºmµÏ~x2ÙÚßËx2“,™#yÉÛLåç!>Å'“g¥‚e|œ…(øØ{Ð0Œq?ôŠu¥5–Q®LQw¬÷ãk'ƆN´Þä 7›žš-}±YÈvOd(­9!,;¤øÁ‰ jÊbP:F&3ít˜ ÞxÒx^Q6ÆnþžN¡m¨»8ŒÉ~¢üX®æ ÿ…®Š"@ßWãε]Ë¿ÙÏ–|~úÄher“ÍØd:ò×Cú÷mø„„jòw°»Ë|zfýnVa\79fΖôüt¶ 'Æ‹dËAÖ½\ζ»üúŒBð±ae¾ÿ8§×–‚EjÑŌŜ7Oðíxgo¶C„òžÄ“ò¤œáàwÆ–8'_¨Û/öxÒŽxÓP Œ„ß}‘{`„ olÄÞ˜‰}œ¸Æ³î~lçPïÿ#p…7\Õ„µ·‘šãa£çMÃÿ”1Ãω–Jéϸ³þ°°ÿW†ïáÛ÷×p‡X>fï»÷Gám«î‘ã¾?²(!Wpª¸% €½ÆˆgQ¤ï,í©» .8.Ã÷Ï}e ËD_…¶"Ä€Ù±ã7Û‡ 8ŒrlôËò²*ÝÈirÐ g€ã÷e´v;ˆñ9 nÿüWŠC5‡Ø_ÓÈJ'G›ºº.y<U5PÚç”"‚O¤¸c!‹˜aŒ«,yæ>úöe¹}Ñ×Ó þCç*ôBNWÒþn(,79Ãp(öGü~j+PޏøÝãÍÅCwèÕ‡ž,¡C¸Â}r’Œ•ÀÒ°íßüÿä½[“\×™%¶öýÜóRYW@”H©GjÏtxb&Üa;a‡Ãáßë7‡'Âî¶=–Ý’z$°I uÍÌ“yîûî‡H€AJ#µ&ìý˜•çdÖ>¹¿ËúÖ·>vý!¿4½ÖˆØF}í^?Èö"ž™.Êlüù5~×ÃŒôc.£òz¸ªwÏèNÂör2Åé(/…ì©Vþe¦‹%H¥ɋĮÑÄÙ財SïfŒÃ`Èu²ìfþ4— ây£¿|³ËN2J3—/Õ>ÜliHF–íÓtˆ ·òúEn)+Þ”¶Rº}› ·‡²lHÂöÎ’ÂÕrÌú±£c:OYé{¯¬K'­©³“«;=e.â¶a›Ý0™Ð·y¿K]à+fñAŒÌ»r ¹ä1UZŠŠ%ÊQًÑ+•"Rᤠ³žkGÛQ.4Ì /r@¢!ÎFŸ²¥Uÿ°Wµ`TQÁ¦ÌJAÄ”çÉ ÁÒ•Écâ¢K[6ô¦(78¡Y7´ã¦¯7ƒÇ ˆÌ /¹,ç»*Ä¡$e2k‡h5Ó~6c|~ëºÆ¾PÉ©Ï3Ô4¹9½€»æEj,µ95dåá^ c²µÇOý¨õ6æó@Ld >-$­ 1°¬k¢ì›)&Œ*ÂQÆeÒïQêÑbƒ´A1¦[ž—ÌÚŠLd2bj#²Ì3™Ó¤à¡ê¤=wƒcÜÂó!®iÜjÇëw}Ûf62oµèÕûÍ‹áɵ-¶ýTöN=oøÁZówm×7#9ãðmÔÚ}+,þ^• óÉ?Uiúnõçó oÏ©ßíß^É£gÀH¿Oºö-î~rwòÝôÍà;•€÷lÄþ=_üŸ¼ŸCäñ:á2ß™Ód€ Œf¢ø}x-Ç8‡[ð¦0µ½ÿЃ9Žù‡ÎÝËiž=)þ ¦ÄD³NtpÛê9äÆ1œBvOró$èO‰ü˜ÎfJNõ¶Ím;êqö˜˜S«Dhw9ù²Â“T)Áüá¸%ûžúJ’¹¢ÉOB–«îZ›ÏÛ¡ŒþlG”qUo—ò–÷s}³i´[Ÿ¿^làÒù擳mvÐäꈨ@.é÷Q ‰å¡P§%|bC×l.Íz×î~†ùa]ÍËăìÅ•·íH¬‰´ t;aÛðn#Gï•YäQ±˜FDT‰bAÇâÜqJBTíHvCÒ&¡’[®…¦ÔZÄ>jmB;ô¼1Cîg8UNEAù-ÿ/ïÜ“ÉjŽBmü˜&wðRð̦i™æL“STF&Ü,M"œÝi÷¢hž‰î«#j·§³¢Q ¬$BÌ~2aÂl`Ü㵚ñe`ÙLÿÈüžþ+>q k½Øniˆ^ d÷ù°OC;󳃢ڔæéui­nj8úD¥†¥Œú,Fá©2eª§q´Ü“¸pÉÌ2rkÇ]IŒ"¢1𘪀„ 4´L•Êxê;¦SR"K…¢^˜à†0hßFÒyò2e$÷6ZÚš’ÆÝÕL䦛´Ýï§Îlú«_á)pù¡>˜gÒ8>²i"±ÓSWO=\¦RØÄ’xÅ­¦{øHÙêe›Ö—׃Ô\"7bÙd¶J]¦¯Ÿêù¥¡˜’zÝþv•ç†n:ÖEÓEU}¹o~óÕïÝmwUØ¿aän2?kq\À7H,FW ÀöžxúŠ6hé´éOô7 ¦)ðo€#`¯q;¡®€d}¯Ì6žÇñÂÂÜâ"‡A °ûyï¯'<@ûo#,Ão⫳üu° ÞsŸ^‡¶Ïþck¨Ã7=Óo³iÞˆËo)i|kØÃŸ‰±jþ"µèú~äòûüí«Â=yÇ/Þ3JúÕ‹÷9ß[‡?¦#ßxü?°ªL£ž`@qO` ÌTµIÆ{ê›9lG •A86 aÏçéÅb¸inñ`ÈKsZ"Á§XzåØê‰IqGÑõ ÏÃzžÀsl3tÝßT¨ªá3*ž˜bù“ÚíöïnÛÑL©ÿÂå+9•¥XåBùd` r3©Â6Ó0þßÀñ—±He±"þËL'R¥^hß Þ¿èÍ—kºÚ﯂t÷„ÞAmÀ~ú/G·ÐD®DµXêÆžv"/“„Ê%‰wÖ c{uaŸ¯Ù^ØÇ³NˆÍlŠ®K§Â‡TdNó68ߺ©k»­¬7\¤˜±³™µ†1ÏU ‰ Q/S£ÒÚûmÁo#ÍÇÌxý4NÛÔˆSšoz®ãÀ´·†‰nƒÚŸÞh©À1e Kxêfdú›—¦¼àø©ÝHñeÊwy<¡Qt’ü¨„£ô¾ÚL~C{;籘]MG3²}%d"Ù"á§1‹^(ßtÊ ‰ eôE¼=Ì…Êny6úÿSñOÙ¼¦áZzgüԳ¹;îÖëí©‰ êjN×a?Œªéû…caW°QJÊIie×…:Ø›Žl5{ÀXN £†”]>zª…U§ Î\“å|‘*ª¥ Ü"@áNªAä:PkZCLG²É$®rÓÜíuðƒóÛ!ÎÆ6Û{Œwµý*‰ê.×Yuy@Nü/âÌ%«ÖÒN?wéõµˆT ódmÝûaw¡v4½ë)Éø—6Od³T-©Ë‚0¥yÆùù¾[´·Ÿ´/FzRË DN»œÎ¸ó4š^XÖÝî¯÷íe±a$;Ùr½[Ì]Qû ®F{ 7#¡Žð81Áô¯õ³©åvÜ|ùÆþ9 P`ãºZH†óךwß;ý½&Â|¹€©Áj0`ó7À#`¿¾ïk{vp “Ä”ý>ñ‡8Ã0´þÕ¸3Ps{rTûö›é9Èë?ý…ÖŸSz¯¿=Ä=ªS¿~gà°íû{ÞF¥ó#ûœ@ÞNåJä9ìt¯³¾ê¥2ˆ¨ R,ž¿"6¬9 Gü…W…äºïÕáÇósÂÓ&×ån!»‡á¹lêÜ$ ¾ZGù‘µGãõs45f_ø™ZíÎÐÿ¤Ù¦«‰ÿO™¹©×ù´½ÞŒãHëñJþ®Î’Wîø”5áS?jö±nÜ—dGÙ£‰Ì¬`¥µ [WHÿ(&§œl!þilŸvÝ~íY¨q–€OˆaÁu"vÍÁnYe¡rÜkˆÖ|Xš‰³ JöÎ/Uò¹Jš8]ìL£vcRhŽ#±6Ž“¿k:×Md¢ÖÐÀ4#U%œT™Š¸Ô·¹¯`%DøÀX”Ö Á‘èÌ6ð £°tïÐðÞ¬+•,˜˜Å±Z wΔ¤áÔRÓĦ_ Òã6¸†mi1OècÉæ •Œ-iLUbB¼eVhnúA1¥ª_¯ugc÷,_˜/¹œ3š©ÉsGÙõR²tàŒÉ‚Œ|q£¿âÿùC´Ñ…Ö5‡îc™¹, Ã"OÌÁ¥dž:7É¿F–—lAüg©Ûò+-vizjuÄ&Á®WÁ¹H&ꇩۉ@CHƒ¡… ’:nf Yn™‰íI‘ÒY!T¢R¡˜œÊjzG q±ˆ,#~píêuÝýprº³^_y¶Q!äÙÀ§;ÊsåÔ:ÉW±øo+r\ÆEÊT aŠõÔ5檦­—Ðj ÎñÑÎ[êÏy_sOX?èç·fk$týA˜ŽÇã Á ØÐ&G%ÜCÜFrB\÷ÉÖé¨råïÇ~Sïk±+—,IMÂŒˆWžˆm‘ oá–rHëŒRòh2 à`n€[ Þø/í+M4æÁ²[p‚öîu2ð¦êw¬›ápÎûà| ÐÜCPñuìøJœÏ^A ÿ„¾Á@|á¼ÁáµÚëwqpƒðã#ùÿ‰Þ·7ÿìÕv”Àˆg¯Ð7òí´ïßó [iøÁ©¯EØïÛÑ{…(ôo?• WÙÛÉÝúµK0¨‡ì)p\èL¤>ÉíÂ~¹»3ÑG+^g*W#A´i1‰’œ ²@8Ž4ÅÉ$ÿ•oNXøEÒ1»Ô¬øx,ùÅŠÑDf\³èÛz.“=¨šüX…ƒ~ç6ã`Ÿ'3• •wag`T §U˜Ô¤9¹¥rI¤a[%í¼ïéû`¸ºc×y~›t&>sz>’d¾’‰#lZFr¡µ!»ç²¥™štˆl°|u–8ocç¥K¹8>ˆ‡§ ¹ :H«yçÀ´µÜŒu"s+º§—Å¥õéÇz1Y$d¢ƒ1Ã49MRî³ ‘YB=›‡Ó;ÑŠžá¥-ã/¦ñ å‰œš*DºÜúìuzZ)O+ŽÉ᜘7'ã?‘㎠•O"ÒT,ÓzÁy×'A¦±AQKgRû!‰3bËDŒqê0 ;»sÈjxdOD“ÌÚc¬#22N…W@iFÍB=ab¹u) †ëÛK˜êËäâä¼Îü2ÆÇ{“vú€"﬩ub=¸Ë@‰tb¶ £Ûu³©ÏÃDø2Qz¢î€ºµ›5Ì¿ÌÑLøp·J¶‹Ã 4Nûv½[ØØ^BFi­ÊÏ+Îæ„'ó¶k…hœ&×íhfÑq²7&Ö$}*tÙÕ:ü ì=Øï¤.ÎwäâFI,[ÔÆØö‹ +°%ü/5üþ7¸*‘˜7[ˆÍ›Ã×-RÕ)­0Û¥ 7ÎäX3Œ ž¾6,_ì`›”–áÇ:†ûÆ©ý¾ïμ•ø÷Pðß‹ö¼U™ø36ÇýY|Ã7j8`ó*ºïnt_sÃkvñ½<úû«óoñ\¢7ïÛh ,¤ˆ÷8Vû6‹×¼oU/^‘ 6À·C1å‹-f>³_Zg d¯r†LcK`Ú»òä$MÉ1s4³z-I}yÆÃÆýçE7+ -&|¸CÀ¿þ»I$·žgªÞŽÈÙ,}4_•¥ä&ÇPŒ’nŒÝc—·™@6^‰ë&a?ÉŒš"å0Ñò:l’x–\h6?‘—‡‡Æ30ÿøˆ£gÉ·Œ›ýxJ ^ÞͺiâwõÍ~þÇŒ#Ï„>«›“i\3¶Î{MQÒ)'|;X_Ë~ÐÛd¾ŒÙÜñjðZÎå„8ú’Õ•b/ÈÌÚ™¤n•y§zŽ‘8£!w‘dc Æî2.Ù–|]æA|ˆ1ëq\¿f3H¼Ò\üV»Kû½¾ìÍÂÒîuzs9Ãb‡Çë›Ñ *@Ô³ý³½V ›s—v8_·Ç—ÇŠeÑtûKë×·ª;‚®ŽHÉ=éU¿­¢<›Ï/e £ÇÏ«'zx„¸m$èƒ:µ5 ç£[Ðbi‘¢ G IDAT3ãé•íþ/·¡h~éM®™oÜ%¼Îã,S§UhûжúBHƒÔÃNK†£4-ýb®Cƒðâq[ñ¾}9F\¢-ÆDû¹PgJ%¼ê{SO{­ˆ°ê0g2÷,ó„iN 3,§è×ÎixN-%‘†àã”\“À¨Œžd£Žûf¸–|TÉ& “Â|åŒ$®#M+S/îÔtg™>QÕ,e+¦FîZ"£¯‡ýÐ42 O «g†òCN ©¸[î4èÒ L´çVÒÉ)’÷ébÏ Äs­«/+R¦Iwý“ysÆSdýJùŠêÑÊÜKŒœ²8ç…œ Âi›g´SvàéÐ&‡K?K°¦¸´»ß ý×8lyÐlø¸ ‘A¡£S´¡´n|2º¢t >7O‡úWTü7YÎ…˜¥dó„0$±`‹(ªÛ$ ²+²kM(qÖ³AhyÈÏ„OµNØ"„ÿuTÂ7nÚi‚0-¦‘«Ex| Ï£<ºÂýû”Ôû J=N|u0ðî3g\ä2™ÊÙáÔõåÖ>žµé’§[>ju„ÖäLå*βB•<ßEö¬ÛÞÆÛ¼vÚöͳ%èj!/¦)@I(%Q­’f ˜µ è º:f—1h€)Cõ+ÐU¼]C¿³Ê(5ÎG\Ô0Ðì›m3Àì•þÑ[ÚOŽ  stÿ‡YÇÇoÈ7ü¿üÚ7ØwšÛ?YúÞ ÿ,¾Á¾ôg?¢ñcºo*¹øþbý7wÎa–0H" ̃<‹{€ ñ2‡!ßš½§¿u³W[“ƒÈ°ÞÕÄþ¶ûÖ€‚¬`$LÄEûõíZpŠ¢{æj ûÇSø0Ê«y•TÞëKs7M›¶<ê©VÁ¥ôº ÙO ú/3Ý¿ÒÕ hŽÛ]y„´BæE²˜EŸé¶!ÔÔ¦¬úEñUþI:×û‚¹$¹ÎÍ]:®·öo );aóâï þ=ç<Ïÿh.{ÎníÁEYüLÙLÕi쯤úœê`‡XƒÝ$ó-$HÄu€g£Ä]ÜNÖ?jg»T IîdO3ê"µýZ*†nÍü4&¾âUrˆ;F~f'#ú Lí v˾ɯªˆÜL^ðéH%‰÷’;>îl/m°{G·ƒ¹ÙÕn†bþ!Á‘DÁ˜y¬–ˆ#ü‡»®ªâ“ãùqY$œ5DõNº‘A5 =JF ¢.œ_Lá¯ö/¥˜#FÌ[$–óÞënC1Å¡Ãd²zІ¦´eÚú ¼è¼íLGɘµRa±]@BYt8°Þɱ§4 ª¤EBgİ"úŸCLØÂ|Ùu7âŽ*é†ÉtI—¥:ÌàœìÛä"¦ÀšbâÏ>Š]@.¬‡×®—p)›Š®šq0·CÝÙ~v|°Lǰjk6“Q<ò¬€gžh¯õâr÷{àA…²ªÍcùô)´‘úüc"˜ëý µDHP/N]zx›¸›©.{Ì1žãrpî)–ƒö»„Ñ‹›7^©¿ßòí"¨.ß¾ð‹w™—ïÆ¦ÙGZ½"Ãÿ1DÒ¯Wÿ‡uŒýÑ­fzÃ[àåÛÍ„¯A4ùÆD6 ¨z ì¾7â|‰‹ŒÆúäU Œ~yMðÛñ];›¿=o.Ø 8Ä÷ù a°:´Fvú<âb„IaÞÌ*’=Ì«B†D¸Ÿ˜‰AfCÊ•˜¸Í~Ê'İ—âqªœ£$s¸•Œ•Ö§ŠgPwcÆÈQ3G¨ÎO“‚ôÒ“Üîg~wgp×ü<öK½K T dƒçö¼M)‚ûë VÍT!Ølå&gO{Ì|æÛÒnøò¯Y™‹.3ñpn÷wk—S¡†¬ÜçRyL#j-{·cr·€Ô_$Ó‡˜E¤>õ.†ôÌdÿ«u¼°å#Ã>—¢ Cô× všøÙ&Öl’Oeª˜Š ÃÀ 1Á¹Ðy$Qƒì [c×»PŽ´ò¹[˜˜õ²íÉï×a»7i´¸f ¶C¿wÇfòr ‰ÒùQÂDkjIíEo²w •K³n΋ƒdŠršâ FDV'‹Û*ß+¥â;ýœÄ½¶Ê·Ë¬&L›yL™)–©Ì´c®ܺP']Ën½2.rW¥_A*Yï *%QI»ý féÙñuþà““j•ÊiŒ·½¾IÜ(ŒX†^˜P¢Ód#µiȱ,MÎ:Ñ$ÁúQ£.ùTLÐ [&£KŽ ;šŒ1}Lèè¹ ü°,º`„Ý Þ§¢ŒTû| »$IXAÌ É&T‹:f‰²,*ªlbÇvš¨•awÖ™Ëýð[—ìç‡YÎÈÄ Ün7I«»z¸×ó$Õ;’ úH¹ÊÐÜãí~íM 4 6%A1éåì d?×}ŸvTE:_¯.š­ü"ªì²Æ™îž(‘eU+ÅøP:wŒYsÌvÛOü¸?É`?¸X3ƒémãð­i oïàÛé0¿üÞÚu·ßMß”òþ±K1z2K`÷ËÍп» âF–Þwá?g-úuî“£¿øZñ­Ê ûN€ÿø¹o¢¦€Äàuü•Öýê2¾ëŸ7  öâë ®÷~y?¬éÛ?% œƒ^`0Ѐ1ñ»2€÷âá÷®˜âs·Óu¨NÝî¤ÛÖ|ßÞtí0‡£(yÅ¥êì~0º‰) ïÐå:AÉQnçÏ 2'»1Ýú0Õõí§Ow§€=þ‚]¡ñ9Á³“Ç$3Ö!lÐö-mG Í º¯LÂø“OÃÑiÂŽ]ǽ‰£ã[˜_÷ÉÙ’œl†ìÂ!6˜í%'ç$¹è+Ë—©¼˜ÂnÇÐ;vmòóÞ4ã Cùªñ›(ûnµ¼+WIÑÍE–‡}ÊÉL)Ê*Cè.R.}@¦ÞOúÁãd·ã´ ì0øJ²‰:CÂÿqœþ×sØlçY0ýv”ö&WÄȸ͎¢ÏÖzº—=Ƶ{xdeïr–²;‘ÌL=±T÷¾ !^NIÑÒ}§Œ\rÙ¥ô"ççÊ.œÉšÆhãLÞQšÛ¿ÃÍ,1ÕÑhè–èºA‘Ó=ª½QêjJëV~X5ìt“•g§¿øÉ‡Ÿ­UBaÜY}íì6úiáeCcâ÷n°Y#MÒ“Â1QÁ#’aè»Ûpu0”Çâ@ªY^ø´Ó#LpÜi %'ô˜R/éHdo(Õ“¡4Tq2&’) «<Ï+«jÖ}°×<&l§àÝs¿ØÚr G".C»Üê¢ï>£ìLOd×íæf¬„·­[n¶Å>96óï,·›½köœ§–0¼pŽLIœÉ–Üôb3Sœ&¹œñmöË4åní+CºziGR%0xc÷Ïâõc—Í”¬[‚Í€±5D\,‰q#†AnÊ9ÅB¡.n r?žQìey¢’" ¢ÜïFB‘%ãÇð_`4¯í—d0ú`ÀÝ·­ÜwŽçðsÀÿÿ0/±ø^˘•ÄÚ¼ ;¿’ò~CñûÒ…{Äâ%YN£~×'¾§Bû­×ý;‹Øæ?Î,ÿ'ÁS2p ßþB¯Ì±/(v|!`ö@ ÌŽÚ½¥‡þ[yñ…ùͪŽõïˆ5Öƒ|Sc|óg¡Í+!Æ7Ä~¿çiÞ'ª+ ›C6¸¨×IY„¦âgìVtÝe¤”Ì÷i<²¬¤r˜Üõ¥gí ÐI2¬>J²óhŸx¹ îS&:èÉ ì$¢åpw|?D¡)—>äGnM/—þÂ\HœK):#g‹6yä&¤¾µ´êE0²£U#ê9.5»ìúÅ?}Uã¿hÌâQÍY¿; ÓѤå­ùUmt] {¥(ZÏŠØö”6è?:ìP¦ìQºÛt|.Ø’LU™jf‚Ψ£É1ÝÖÃÅ”–å›îlgRâÆÚ¶é{™kË&æh ÒÍNÄÿ0Д¸´Ù0;VcKŽŠeZl'Iö6ÙòÁv²&†n²ão×ñÃå‰þ,b*åº}ãGì2RDfo{Y ,zeYJäÄœ1tOѲgг™·Á;‹&ÝÆ²;Sê áŽ0jΖÒQ…#dD«jæÉ¼¼U•aÙÑAùà°,‹ÎºNw»!¼`q/ÄÙ!¼éöén¬Rš+Í]\„扤¹ ¬:æâa‘d¤d-L'qj˜LÒ*MrDåøJ²ŽÚ;îô-— ¦ƒi k.>( ¢dÎRÈJV6eÆÃF=¹Ý¾ÛZÝc}cö7SXìO„¢ƒÈ½(ÕÔòú¦z× gÛB6ÃtcI°BÄ\Þv Œcëv©™_Î9!Å ¯>¯³G·V'Âlýo.W‚¯óÁ˜Äô †LÈ|]êßøt¿ÒwLß®à·ûƒr1Ë¥ïÌúsèBfÁ” Ù°0xTb¶ÄAÀ•\<—i>ÿ)ÇIò<ßÍbó¿õ›rÌÃË,bpûMAá\ò í 2àá7ýËGÀöõAþ¦úX.Ñ΀½ÃTc|Ÿ}ßIçï"’Ö¯§ü°-Þ¿á£âÕ{ƒôþG›Oû¶Þ矘<úç°Žæ»›+ß'0"sd(Ì÷Á=á{s¼wäÙ÷nÐÍ{»û–ˆûï:ü`yçÖ¼„_ÀGøûJ=âX,ýØ=7>µW…–ÖMeÈf,M.’åÓ£ÏJ`"ÈΫìØáÆ®'ÌäLšš'O¦ò Œ&{‘ÙS (,2ÔåȦ²ÄV_ÊçÊ›K‰<“3u~âC´?Ù“ÔêÏ\ó÷¾û[Ô¥`ÃŽ]m| xéárÜú^¼/TümÜíÐÞ@u/íVtbØüšô¿®Õ§jyèò;£u´ÉÐI5šb/ OBBìæ¾²T.kضíúñæ£Ey"©´¼ÊŒ ‹#B÷DY¹¿KÙ\^®"FIVõÇ_Ì(Á=¹æ¸jæ×s½–X<ªW4UÊÐ-.C8ïvÝë#ÆTÔ tùØfÿ™"‚‡Ä³òªì¡’êÐvwŸ¿A\ ß½ª2÷èŠéq¡gæÈÂo±É%A 9>Þã ¼ÖêwxxŸoŸ™ñbí`p÷”Æ|9R²×cc,þ„Ñýëµùsã:áþ†w@Ößt= ïê¿À`°ý^ÑZoCuü[’&ÀøF'æßšG½éA̽ٯÿNŸJè_"h`ûJ5wXæ¸ó'×ÎŒ.DÆÈoA¾âºoãŽ2#æø¤À|‡†=î×GÇÀ<ŸBò²)ï¤|P,ŒK{:º%míÒøÒêQ€/eÉDP¥ù…,‰ ÞT¶.üCÍ3­ û4ÏoáÝ £U—ýº`}¿p7õ]p‰Á€c’²NNZÉC»°§ë‘è…ßÕañt¶}¨"éMÅÑÑåI²J,“as1îºkÕÑGL~¨í㦋y˜èøÛH?±Öl9Ý¥tG‘J=ƒcÍNw–…²ë £)Ky«QžPÏY–DÂ=µûaÉñ%úN:ìÌ“}áCÉ‹8”Áq×ßÁw™Ò„o—K‘­ŽÙ¬$w ý¢IàZrØÇ©¥ûÇÑÍMÒ¸éRnl°-5ºbÁ“$gV§£ÉŽB2ïbæùÄ—Cȃ-÷Ò„|b„Ë@ÆZÄ1f¦8”ežŸÕe®ë3Q1ÄàÛ1 ©£$G¢ÌÔ|*ãš*ÏKo†1Ñhu^ø§£œ% 9UR2®OXpczëG.¬‘ð4³[âG 3­:Š® hCÕºp‹ ‹$##³CÛm÷Ó®¿šôó05ãúÅøìb¨V7Ùì 4wàËçûOnE^'L¿—{ʰp&5̳ ?²ùa…L\¹å¯› >¸˜ÂÞmž¸ö„§hÓtŸ~Uv-¶3_ºµ–[¥FFWÙ¤ÌD±é¤oèAfY:ƒ:3<å'†üÕuú¹ÂN¥z÷ÖßLýò8ÎgÊZ^û¿bS’:”IÁ„ògùn¶%}"[ w¯5N‚]at;©é9ÂE„Ù ›^Íây]4€ÛAî^cÎ?&„ýþuð.¢#¤Å¹}­½JÞpï^?®þ¥ÿK8†ì]ù×jˆþ]´ï¶•ÿáË»ÚÔ¼Ñùa0<~Ídæ@ ø¯[( pûC¿)Ì n4Pàaî <0¥Åâ X{,ã“Ô!“g ýd‡™E%zzœ ŠÇ}2«B‘õ¦ÈZX":šnÇbc¤®ù™;*#ù´I¶hé…a»Ç 3dtK/ö£‰ñI·C¹]DwÞeuoJRë¾6R¾¾fÜ''EŸÇÉ![ö˜Šó}¸Í­5%ZTî†Å¸w_L›MƒrkO 9»[ÆyÌ 2Íî¦iÎíüÃA±!q×ù½1»f¹›90ëÒëÎ킌ÅHåÀ3NÖëüyZ´´˜t«¸sûmߨ†-˜':–©‹LÌxȸJY–ò@$M:§õynÀz(;ÛnãÃ~Ìfý°ës?#årq-cIÒÇ‚X=Œù†<üðˆ/iÃ7b$2¥”6òrŠývØÆŒ(þà¸:®ŠlN–gc57lž±@=Zç'â(s"Ãe318žÍ¢#¢Èe’.²eY.qÜ1¿s9/âDˆõJÇ‹•L9¯^xæxáfNÇ~gM„(©"· ÉH–„“çì(1’"æfÓŒ„w’`^EGH£éØ»*ÞIí8öœ6GTÚ¨ØÍ£Ÿš½¥Î4u¿©Íí®¹pîéœ9»½±ãÚ¦9X†Ç‡þÆß}l¥JþfÕ™èM«1PÐ9Èh(k,ê#±Èö’` X RC¬`V·ÞÍîªE†¤œ9.»¶xbW<[XmJ{Ť/ÝÀÖ#n:ó¨ûâ8|¸R•ú«.”ÖXLÖçðÿk²19à^ÍÄ<Û`°lj&aƒ´§lH/È–ñ:IŠ,Öâe½ÔûL§†û7x›np œF¿F¦w2S?Ê?Àùž•Ðùw-ÒÚ«ßé‘ú^$*ùa4ãÿ¾á=”©{€>{ïd·?åj¾ñ Xán„C°ýn\`Þuùw3Ž~‹[‰N ±Û@Pv€D|)¯§7YÖ#ö£ë–zZÎyy 6W‘îõnãúkÐI%â ^~.(9Yåu§­4ðx©qrt0ÒlºôY?!³¨73Ú†0òc$û—h¡ïŒ÷2Z“åÁíä”g«R'§ËMþï:Û/Íç;`…]¡²„Š‘ÊÞIµSÓs’4ÛImšãðÿpSGÈîeæÍg]ý_ +µ ·,ŽSLwÛ—ã&¢\W¬H^ÔÉFn7œZ–” KTQ)‘ž²›)¦‘¤ aý²`©&‚¸½Áv'傊’§‚-ÖŠ02½‰®vDô½l4õ|è†xg®e£Tâc[Ò ë§©þ§é³ÇIJ ‹µNŒ’Ûùqy»_BÅV”ýy•^ 0Ö§ØTp$vò™"Èê;<ϦqÉ!¤”ÖLÙ‚£,ý˜Ž)å]2÷‹±ëòøW“Ñçõõ²€JŒ`˜E×È™I-Ëù‘írÒJíÂ÷ÄÔʼ:x3ü÷†-7~»—ÏA®±íÁ¯ö¸ZÙ'áÙãäô»§·+˜–úÖôk³[Ç@Ü‚ã«ÒàëCšôï`¦-ì›4—@wï©t€ÿ&ö|ó-®Ì÷SžÞaúÞHÚ{Næ]?bößFEãŸÙ7¼Ÿkeþ ^á·é>¾XÛoÄßÕ7âëúù&x{µx%Ãrnpg0Ø!¶¸½O] f/±…¹#É (kvnÿ‡ä³EEþ­ãs†³m!vÖê¢~tQ©Ì—Ϛɭ]˜¹muʺÖFÀ|zÿ±·Gìö‘Zf«1.P$×)òÚþ·O_q¾24'ÒSõPÆ¡ßýö¥Y 3pv‡˜øƒ]žYF‹ÜÓ¬£+ýÿœïM›]ì£V¯ãg£(ƒ°óÅ2) µ½áæ¢ÚÒC\”'Æïá3 &:Ìž•‹Ÿ’Øn;\·%§×ëª:j½Èc~ØV‹<$#%Ÿ÷<ïø"ŠGBä‡!&Èy10×›è ·’Ö“±ŽU'SrBØÛòã‘õS£å—8Ñùì‘ç 5”r'eÝ;çì"߃$Ûi}ŒÃ.%sMeTµ·/İàâ\‘$6µ~æe†È¤ælˆ¼`Ô&n:t~ï5zj)bY6wSìô™Öìy/-C8:µU¬Å ÄŽ$x!SÄÅeRu³Xy3 µþ¥ / - ŒÁ™ÇRÇ”ƒY¿‡®ÑרÞN´Ökа€ìצ_0P_ 5h_ÛqöJSad€ý–yïj PhhÀ¾Æ“g@<ýšo2¾6?¢]+¾M¢,¾!»ÿ˜öó†cø@¢ßÄT~ 8Ž|üýŸ:¦ôϤ,H€øcŸÙ×ñÅ3àMI^—²WÀìî&€™tëwÝöæí{[`ûú§¬ 4€L1Uk€à”áÌ>_<—ã˜éŸÖµbãèJÄ~6Z­ïè‹“=L2ÍÕ ºËe‹¬tähnãƒZxØC6Y‹M"%f5 n˜¾hpTãà©“×Qa÷zi¤G²öuç¾Ìü‰xù‘ú\•7,pf¦OÁnoªºóuª/ëÊ C“ô1;.å F —èg4C\dð>Çî̬R#Íhè,ƒtMƲË\¹Ë…“nœ‘‹_ÁFr;Z­üáN/M‰³l0šo§©‹×¬ü-üífš]R¤FÃ5î6ôÂr&jK¾g¿nÌ“£®j÷™èôݦžFv“:]^Àåíý ö¶›-&HG’Ò¬òA.¤ßG±±rØ«cù,!rXVº’ÕiQÛz£»^ÒB‘rÆÒ¥×‚hÇy`‚ÜøR8ÆC¼ÆØäHðQP¸ŸD´!†LOZw´FePrP# /C¢ :>´^ï‡é徿Ùß4z ì‚ÅŒ%3©ä(g“½‰þ–îÇÕÞË'ΖŒÎŠŠ{1îË“¥ŸQ*\,/`D'™ù‚þ,N$Ú¢wåQe¿=Ä [¶b¶.KVå2ÀwÔ iqä÷b–þãþÖj¼„ä!‹Ó£;ôÓG f‡ƒœ­ïúÛ¤½‚²Ù!ªöþúƒòX ãÌžìhq žÃ¦òwÙØÇв¹Ë~WÈqŽë‹% °-ð¿~o!o±;®c†ÖÁ¢~›G$¡Wвº€Œÿ¿Ô½é“Gž%öÜ=ÜãÌȌ̬¬°4=}Íh´6«Õšé°•™LŸôÿJ2“ÌvfWc;KÙìæ€$Àb!‘UyFdÜáî®UEâ(€d7ØÓ†0X"#ÒÃý½ßù~YÍ*ÙÐÜ·If˜,QI\Þ*`ׇðñ¨¸>õõ ø·fäK¸©î4yÙ;˜F¾3@òî ú{±¿œ?áüiô?Ýe¿ßMy ]}Çá§öö¿—ßeË%€ž ì_móæ×ñ·USwf;êÛB(ž@¨@âNÞÿ?‚8 èŒ×xî¶÷ú¸PÛÆÒcò¬Ù£f¢iå ƒÌ“™l³{ØRüU ÚžÑ|8²¾ôãqçr•— IDATr쪩ªUsuãïèGSl7XK«Qƒ{pL_<,ÝNùO;(Äñ‹´uÒ'RëÎôÝvŸll…N¶×éú‘@u‰|—EóÜcÏb+.K‚Ð=M²ašrÀvÀö Piýô¸Oèþp˜°mCÆ[ÛrÐÄó‡¼FEÔb[[·×Ûf¹¾Zÿ?R{Yê&‡hý© ¿ÜxþV/¼Åƒ(:æ.ûÄ/R4ÿ™õª¢ôV&ã†Ç36Ø1½ŽÊ¸õÚ ŠÒ.Šû>öÙåM©ÊK¶ðËbˆ œ0Á…` ÌZ‡øþA8ñZòÐ]ÓzÄyj'¨;¤¢]c­&NODO©R[ÒwÚjE´c‘èUW»´Sš7TMe©¥C꥽å~gj^ÎûµØƤµ½\§W»¼Ò#®¨£¡ãù\´}_Jõ¢N÷bŠç6ZðVrÏ¥í F`øÈé•$uÎvÖãa3rt9Ð&/šÂþÅÏ„£âñr,R®‘ÃÆbܧ!?>/1]‚{v0d?£GϮйÉ7N29úø±O9‰XD¥G»LJÚWôâ@hÞʧZM”‰rWÕKNàC0,+œçuÀ%  ‘!æò›ö!25„†dKô÷q©¯]óÛƒÉÄ#hÿ¾Ž‡|#ò‚jTš”º«Ÿv߉à§(o¥­G¢3’÷0/¥*Ó…Õ›4õk…‹ÀúmïzhïÀÈ׈¿µZémAõémË{·¿´?á¼Wbx_Š€â½%Byz o…Ìÿ úmo‰à© Ùv/·y°?l¬ €ôzË,EŒ…ƒ Á1ÀSðQë2]}hÒÒ8(ì·õð„óUÐ¥(ó y ¨®~EÇÂJÏ›OŒì;,¹€:­óù7FÊ×ëP®£H#€¼Vú¾~Û±Í{§Í÷­jÞKèÕ©~4¦¿•Žõë)îe‹ÿY?7üÁ}Ûâ§ñ­nÃŽ€t@õj«u0 |—†¢¼‰ÝĈ€…œ›úå—ÌüàÇýw,Bpn±,ꊞÁM Ž”*1§¡qí¨Ý^ >IcÄ•›º 4è<^ˆ6ׄzø æcï¹ìó¬éÎWŦ68øæk8ÁØy¦›´Ì€`‡º5”ÓlF(Z#ÍÝaªP ’Ýv"_Ï¥`p´¬ˆÓK·íå *¤–}‹B ÕòâyZÃÉ#Ÿ¹Î¾êü:m%&AzLá¤&ÙË š ò´ûL^¦^Fa7²Ä>¤\ï·—îÿ­ø‹ö(™d{Öº…G.\õ9½:5îB¦—qÛ«b½×nÍ3î3'_«N&¹Šùª`WíññòAäšä^ãO£Ÿ¹ÜrWª¤~À7÷‡Ó@ù1;»#ÏŒ˜qMïPÙ3£©Cáx.«¸uਆ…¬kMO¥¦Ä e˜C5aZICjB$Z¢2Ó4Ö¨Ô ¸ìt¥4¤Ã3¡·ª–E>ýªœeTìäØË.ËZíZû÷­¿&ù¥\ÞÎÕ¡W ÖZxV8>)•Ìeî(ˆb; {Ç+BÊIÌ·Ó¾ÓaÛ]¹í–1·ÌŽt§81ÄSylæR1¯›¹)êË FIÇÜËq¿ R韷 NÒýx o¤µe¥Šòà¸e‚+å8”ÞI•™K]÷Uw¯I7rUÇ'ë€AÔèPdtáï|3ÄÏ4†5b‹HþbHOeç×é‹*ñÍ<ïn¢¶£ëRÈçÀCNÐ5p{4ò[t€Þ8h/gRÙVÃ^Ýܪ[Pn€F†×Ii)Aç0²¾©®~p{óÞÀíuö’jÞKèWý$êFÕÄðcïò½Cn~˜Ò øæ/ü6GÞW„Jöæ¸îU©í×ËèM…Ý[H´t‰úiKü6 ¹/ÂÚ7÷ºâ Ƈ.ÑîQ3ÐNGéUX#HÚìr ñ³b¬‹U 3‡xVÆI·²‹´ÞËé`·®OÜŠÌ¿¨›ÍÆ" !$È#¨Æp¹ ÓN@¬À_¢üTö㹨§h±#P\ ÿïQ3~nî/T‡^ ÖJÛ@-F—8E;‡ýŒKQ%çØUå ¨SP…cÛnôjE»4XÁF¹KT1\Re;àåb:‚ë‰=ª®>즱/ºÌèË^´Û|wçÐ@ñŒ×q‡±{œ1›7»hx iunåšó¤ÙÝë7þÕ´Ýûžñb˜j¶n¢ú“€ýSežÝëD¡;옻Q÷}y%"¯BÑæ8A –í­[8fÖSjz ‡8¢0¼UyÛ_6%]§ŽîÕÎa1gäJ$]gˆ2=HÊ­'Wý•’YÙõ= xãkP^p£u½m›®¬ªEá¶Ê¯„qHa›¥)¼Þ‘2"¹ß¥¾»ìÍåÈ=’´óú!™Gæ˜Ë¹!½‰xc­¤f_rÙÂ÷õ‡!Ùr²™ú¿kIÒö(³h.»d8PqeÆÎ¨¥á¦g{8Ôõ>h,ÅGžd?x2Êào±l«åð@ú)·cµu‘ESúÌKR2¸\‡ŽÄ.”©wV/”Å´ú"ŒÄ•fýJæ^Éͤ;Á‡§Gz®/¤“c4÷0 q˜øA}è·.X³kÅÓœ«°¯“%v‡GáwÐ;ˆôV±ÆÅgù5tÔ7&Ý6þ¸oáäXlä÷ø÷…@Û_Ïìzz¼ÔÞLÿm…­ø П½½-Á}yu£ü½Ùâï¸õO›‹þ±lvç/”·ó™ßO¶ÃÞõÉúÝe×Ó: ÀoÑÜ•èžÒ¾#aÅ€ê[ßóöy·%LPoYœ.Aw1CK°gÐ'Äñ÷Æ¿Z8'}ðK¦bŸx°ã ; öï[v¨¦ÂeB6’Ú†}ëÏá®ûìavh"6Âë†J®5.·È€ËË>thGôöÓþJbÌÐ1˜¡"ãóÃEߊûåoÝÕølë€V§cï4{^g ¹rˆ¥ €˜ÖNìîw¤I»ÝDtÛ# ¶ëôÈkLŸ¢·( çð9ˆ+[!MCÝŒ2¯ÖU–vTãC‚‘Eu6»øÙÙnÇÒóöUßÁÑ‹ž™­IÉö"ôg®‘“Ár4ì[’«¦ÊØnbâšLÔœ‰`MgQ?‹e˜[S¹«” pŒß÷Ö^Uú£”€K]Òý%|"©ˆZ½gm±×þºõ¸²Ï7Õ×/Í ÚíkŸ«üàÇ$)©¯*-úº£U)¸%Ž›“ÖͶՒ"¾m™÷m­+[4©›±É§m&ßy!é‡=ñWšm= ôƒÓ§N²$Å_µE'm:YéN®&®öª«U7ßú{ÇýkAø}„Cù;߆Î 2-HYô‡±EMúª}zWóÄVÿÆŸzîà1u]A§†5­›x&JÏ7>ßYÖ(ÿ!Ùz3{˜Rÿ§þºR±äèòâP·ïd@jôÿ[0{D‰ ä_‚ÿ¬J_º§Ö< å½Á<²A5:QÉF¨üß±©oÞ­[öeJ'ªÛlyÝd3`ä ו#æõ òÚë 7v÷wÇâ¦Á¸ZÌï6|oN™4x€õõ†| àÕª;Ð]ÞLžïÞQ9y­úy¶(œ.&ê7ŽÞ›ºÑ;gáÈŸÀ²ÿ ¹á`³;?ükÀ>½«EîÌ´¼úIvëY¼YÚŠ—МIx@/ßUîæ¸qŠ_ºKñC'Ev â‚À" …–Ø{W®jvò!!YT­èUë¶`½7ñ‰õõÑý´-vË/ŒîL*ñûQe²†'±6 ººÕp%\ÀÅSÀ-à6‡.täæÈ8Ÿ»l̇J5 Hráuˆ]@G>º?+suÀ­+GVæväÕ!`Ñ›þ<‚çÂÎà¸þS¬‚ú¨¶¾L{@ 4§ªªWfÌ[€€öCñ¦êš“¡Š7y &ÀsÇÜ™Ñ>!ÖñxqìÚ ­§þ`ç·KJ¶t¸¿5 +…“ £8fªR®©´Ÿ)´c°Ñ•þÊŠ}̘ԕ[®üÆw¨›GDW¶±¼ôxYU€#ý ÇUB¢®sy¹qÜ?òhýu¦ŸÜI)5 k„1õšÞ5R—ikì֢ЂøyU—yãä5>צaŒŠºE×ôå&¨¬ÏœŽ¢£:‡l¸¯-×:蔩6ðò öºaÙõ•Ó/I}Êtfêí²Ùæƒ&ÙÖý꙾çKçù>Šk™ß7“=êõÏZïŸi ¤ë+ÎÝöR¸÷}ËÃò¿œ O -zwÝ+ŸÈHz´ÜŸ–]Å–²ñ²¥ÌÐÒGóÌb–C¸ïImžM½ÿq“ÑCXîMznÈÅ}=Т•òXþ_Óý/^Àn£¶ïÔrØNÍþ” ™l“Þû1a¾ÆÞʼè?O{”ÕÉx³'€+meTˆw`íM-è;# .àCé;Å7¿;e͵óÝ¢ò–<€¼®¯MG ?…žß(CS€¿v£ÏÞõxƒ‚F|OõquŽòV↓™ ï%}=‚Gþ`xv¯ãŽæûØKÿ0ªÓ7ý/ﺶ¸þú@ó·,Îàe'(žÌŠ oü×O×µF¸ž;óÈKh84 !Žéls^·KW´"™Cu+ ΗžÊ‹yð•ñÿSá#‰S ,°(q<ÅJbî"0.X‡)ÞN9)á_ÉF®,‚Á‚Ôg0^"ºDô2i)”Î*‘-‰á€ÁÕØ?E!¡n¥¥Êsð=î¥-AÄ)U.™@z-i\I˜9¬ÜíÑW€ðäë=´«Öñ³Ë¨r#nÑ]î¼x4p’ÒF' ®Û lîé…ïGº„øj•ù‚ú¨§ iÝ·¹¯ú|xô±cG¡"¨24ÛŽ~ÊÄ/‡zGÚlFL7ûÙˆw—4JE…AÚy.© €c¿õÛ²1n*ß?³'ëðYïÊ R§¬¤c¯è©ëÍû‚µª+³Z#¼g/ÝWeÞ*ÒÔ÷…é¢~Ïû]»¯öÓf3Њ ‡w’éNKÍ[Ç:éiö)97eµ¯dQÚy§ú¿Ê‚1Y•xе¹â,E…_Œ8’Æ«¢«¬ýl3TõqÙ YµoLKÛt „É(wŸŒ¼9BÜgÌ3ìjÛW #À0BZ/ÌÚ¿­åºÿ  G(Náî€'‰•ÁÅ>$á}ÐÃ?lxk˜á$àÊ='"µ :3rfÿ;ìp·]éÐE\ („³®ãPñA)‰×6Èvz£ì'ë>-`éBX$ÃÓ½`KœjùŒ`g àê``Aº;K=Þ8eW7 3ÀÇ·ª;{ú¥opïT²“w±ôEz­ÊüÓÕ[öØË·‹Rÿ¥Í}ìò†ÇÀpÛžöð% U€û¶‰¬o]ÇáSœ¾›ÛóèZÂÌq(±Ã«£ÛW˜½’yõ GhúêÿmÈߦà`ÏJû¸ëo”ÃD·}j¾R à§CŸ‹­×ÿ^" ü±;Õ+þûÚË ‰‚AÒ—kõ6PÊðºëÉÙç[ŒkÄ%q|6,EP † €¿Ï Øâ 80½î5 Дò;±©ëVÁãŽàVÒªGÛÀ}(àI4@ 0É`+ &1އ{×x^jûª"p) BØá=‘Ì+Gjë¸}gµÒÔ(¶í«OTžSáØÒ#º6² ‡UyU¢Ü¢y¶AÙlj¦^¶!lÚpÛ;M씂(ÛœU‡6½Wnã <Ç Ú™@V:ÕMéåÝiUv–.¶æÐ1^•Gu®<â0á8‰[²Žµ-i[±éÊú°Õ¤%V­B·óp,q\ ·û ­Õ-®bzÑåEÉ*B¡\t™brPsn­£–kûÕ¦ÖþîPÆÁ”Ç•È~ë¶p‡Ë*r~ D¹L™>ûmHbê¯}áûÛ×yEÅÅi 4”ƒ‡žEèÆžZ¡V†ÄýPºĶd}Íœvlw•[‡½„z=Ã@ ™ ç®R]ß”_÷ˆuy*£)éôd áZÖXº÷{9ÓVkÿ¡ (Mùñ• `³¼o~ßáaCïíéÑ—ýùÓåךr÷È€0Y“|Ž!ƒ{©?é6s [Ô °z›ý+)œ—ÉcäßUòõó¨®ýbWBÜÆ„îÄÖæÚÞé¦Í9è×±ä Àí4·÷¢oÞ zQ3AçãµW Èn£ù/Sè´\˜á¦‡oKS¯cïµúµÓë2ŽLMnešÞÈx쬃µ_#8B;ÇÒ‡ÇQvð–ÏÚÃO@>‡~hv­í”ï—ˆÿ‰z÷øì$–‡”$µøuyú÷Ϭ Ý)›§ZbÂtXŸç.¡íqÒ ¥ÈŸ·ûG€K B.ÃCÔu±Dö(„Ž[k=„@åÀ`p|I ©òWRAIµ§¶œ³ ™B – „§ÍÉ@´"Ù³®Óûæ7i7€ þT÷€b(SxSÐRBÁµQnêj´«Ù‹ <€w€À_Õ¨²sÛÁKD–è;W ÃãA’ëCä™W#)Æ&Õh‘yésy˜C^œü‰5 £OHîMÝ9EÛ]‡!“ÝTmÜrÔÙƒ¼#)¥ÝRg­ô¯ÚNä²qtE¹~ è«Ö.@$©½£ Ü ã¡-y·Ž—¥ý’NÅ‚…Ik´¡ó@ÿžúIÿ«žÈÞôo‡“G’Å…níAŸ{†ê" i§Ž¸³Rºb&Ãã‰8fdÇIeõ䲨lôÙÆ~øÉŒ[Í7[²µ r…­Ã HD=h˜Ù¬95©¸B ¶·i?½Š%ŸW=O­ê2ÎâU©%\Àáh `<~æT}ÒŸ/ÙËŸ¿õËØ£žWp£xé3VêRgŸí:Wí?l÷A7Ü?÷dÎ}#½Œ#$“:ê¤sV=©rW¯ªsÕÑ4H6¹óûµàR×tÚ…ŒñÔ…4ä»v¢WIB 7v7aÿÕAñ¯ÇÄãõi[Ì«ZÞLںÞ{Wžù-Æß+@|Ûj—Ü”_RÜùS…è xu¶Ø_7üÄ}pù-ÏO¾µèß…6×S=Þ"—dà;[¿¹×5suz î^¢å·¹‡°B+±èf5¼ñø@ží«¸×kÛµá¥!ÓŒ:}í|ðÀ¤µó~,ot4Ãæ h å¾×)ÆèOQÔ ì?„éùC0{€Ô´ƒd¤Ø+Xç !€ÀCÀ6À“pt-“]1G*Óúö fr#ˆ±óλTÖµckwÝ{å`¸Î2Ï—;„/¶.ôJº4’Nž ¾=øs ™^:k÷ <8DÌ9•Çt²_С #â×â¬_>‘ëÇý`¢–ÑPvºrÙ5¿: “4ŽHj–í}½ luvM\-íE V¬>$úô¶ inj½éó„kÑ)þT‹>cÎ,¦Ûxv +ÊR ÷_*–PZúNÐû¶·{~ÒK[†_1ç©K£xÿUùJeï-¸F?òä‰dú ¹a*ýô¤¯‡úñ–Zu”6Cº¢Ï!Û^Ú|*šFû|¼¡ÄÕ»vø€+žö^oÈ|lF §]›õ-Râ'Ý£-Üž–2üÊz]Ê3SNâÌR\N–ÐçÐð¤‡=ô Gžø%ôMʚ‘P-ˆFD&fȉ1_ïw©Û kóyZ”Ûu‰ååj=ÕOÈk‚¨’ŠÃGÒx¾å !i»Ü­=y^Ò%tW$%•U¿ =Û§¸ü …¸„Ìú¦¸ãeI‰W­®âÕ³f¾;'wc¨æÈwŽL^¾Cœî¿ûªoóÌÉ]hþ6ãïml‘Þö¤ïå»ëûŸ bŸŒN@«ÅûX»í{Lu©Þ¦£÷îwv[Oðª–x)””½šè~û }mïÈ>v7Óýp dp*púÿmBµeŽ%#¤GXh8çIòZ$=ž‘h€1à¤0)LwÔH—·–i-à|;ÓJU`DlëÀ¢Ÿä=­Ö]z½Ï»ëýnÀàÄ• i`U Ýâ,0h×ç¯E^:¨¹L¨ÇÖ¡q¥ø"'— í'½¿ì'èfÅ~Ü“)¢¯0ž:N÷sóD,SÉÏç񴃮ІD„¥tkSwŠþÄ“ «—mþltªŸÉ'ùùr‹®¼²#nŒv郥œ´¥}Ö™²OU×DÜq‚î‘nrZ~ƦlŸh2£ïÉz–‹#^7­¥Üìû ÑêødÝ× µ4ºU½nZ‡¹’9/ú÷þÑT íy,§èÝK¡|ZZùª.ê–¦†0 ÁiãÙ±”tè:í/×hz:ÄPùå‚u{«QŽˆtiûáÓ5 òpè5Û £¬ãpÖ oQ˜C5W{È]à¨A“ïJ÷ôâØ+"çW””0qµ< ä¼H%e¬ '˜l´ Ûð7Àh4ÂbT£©ÁYNêv@ÛK#ånÿ/ŸöÞ$¢ÿ4¡©Ȫ‚Ëœö(3Q×r_áA|–&¿ –jV;ê¼dÙ7ùÕfïãÅ®ÁØ¢q££_£O±ýìz{ÔóÑË—§lÉïGdóŽó(ÐH·AÑIþúA–ùëßüpv=ëÍos1ï~ž|û™ó?MàåkóS~ùOÄ ?¤ïO±vŸ•¯=Rp;äõÝWõ]Æ"û!ëàJxsìå[Ù.fh é4 •&@‚6Á@‚a ï™í‡èï1,‹ü>iOØ“f^C]—[¬çÚ©:ÿú帕ÈNAçð¥s»Ã6#ý#” Ƭo„‹î õùˆ‹qäƒ9ýØÆg(7E“´8àÜ/Ü‹z'@!C`6w ÷P•Þ›]h79“-Çeú ê ìÏÑOr×À¯à»hï;5kXüDZ„D -ÈÎ\.³’”ôÊsðÁC„¿X™ˆ:;ݤöYtaÅ®ç«aÕ`õÄ„ÿ¶|ÔÝz›y ܇Ñ#ÇlœNË/GºqÙƒl¤ºa•yç-§©ÑNzÚ‰¸t˜l4‚f¶É?S½»ã^;_\6Þt»&gÙà¤C7'VÞwÖ‘ŠÓìƒçZÀ÷ƒ^øuÿ ºnÏý½U_DUƒìÈÎT wQwæY…þj—ºõ8þh¥í¾lÐhÐ%3nýÁÆ3p»È-¼Ø„rÔVû•Óä¤:²©s¶o"š­c¤¾@9í »„@¦äN?p¹Sow¿[êK/7§9LÛ쩟FœŸaf&Ãúz‚Š£XzøÔAˆÃJ+—G—_à”÷\^£ÇƒÏ‡CéSîš ¨¶ZöWt/r\nš‘úå)ëqÙkw¯6ÕJ,Ø@š–AÊýDÀBÜLŒO¿ÁþV´ÎB`ù‡N4ø5àâêÓJËên¿ÿÍãv£è÷æ!õ »?‡˜×ïH°ÿ«Ç]þUcJïþa’c®þŒˆá;WßRBý­ÿ#.ú×®|­%b€‘Âi{íg$À½ƒ´¹Åç,E$‰.EéqÓX«'±;n,¹hÝBê«ýtAhë°y<˜Ä'¬?Û/]õ k'_à°}Ú%Xý“ûÐAN&޼˜4•¸hµÚ2éØj¶Ñ0Nâaja·"_b@œˆpêeÔÆ­7©\Í‹ÜÕÒE—«í³/ÔÃ)q3¯:UÚ/Ƈ_Ľ”æWCM¬õõ iï¦P¦‚*írwàÜs”hŠÁ¡-ÙöuKZ¯.'nulYµPùIãøµï3N”¼¯ehm&ÝÂÀ ‹ IDAT¯©ôùÞ"•g?ß»z[/Àæ#îÇí@–e5 ôsê\L|WE“«¢ä™èþÉJ$øŸzxbll@ (•ÄÙ¬äQ põBn,97›sla58Ð)“”©o#PvJã0œ:µåÞ ç ÃY™í—~ò¡Fç§°µ¤K_C;8n“;ÃÜk…ûaYºÈª'¾nÙÈ+›‡m‚ɬޯ}Óógá@6[ì€ p¯ ¿õMθEåô¿¹-nÔ? UÒ·µFïÿ84Q,1üë›Îÿj¹è÷C ÁØýv}óï¥bùjØç®¿3ì¼2.hn;³!Jà€S…S™ºž?z“Jñ0ÎÑJÔ@lÓÈ9úV€ÉØ9wFè² °‡ˆWPíibëT~(M<œtb ¹Ž!?h0×?µ© [5O8$™ V.6éµLÔ CÙML^ ƒQÚ x£³2#Ø!8ï꯿Äc§÷‚ =ñ#@Ÿ E ^JóE)éuÃa$À÷é¡GÆšîºÖÿ†èŒnydÅD5e{…%X 6Ð÷‘LÁ)l ´&Êõ÷SÒ^ÊfY` G yP~ÝŒ&à¡5Ï«dŒÁpãèr*(c¤-QtõEÀµa—„Ù×2Ϻâê…cptõÁ•nç—=ƒc­Œu\µùŠ»E[Á!%£¡·EKl…AG­’ ìÒ õÜåÛ‡z0Ól¨)UƒF$>xé¾9Ø»£¦cãr½";vGyh:‚¥“iôÏØ<±âäØ,r ¿šé¾&º©sç]Ô÷“¥–_“ñ†ƒ§=°b.ô ÏË‘1„ʱ"HœÍÄ4 Ôš«xßO"‹^f#÷\‹g| T”ОóʶÙÖôEõÃ$R )?*F‡ÄŸÊÑd9¨TJíóU|ÑTŠ\ÕÓ1N$¼YÙ|“4–>ÍqìŠÑ ·ùGb ¬€îVب˜ ×°õw‰½ò6É›½D > Þa¿.ndïÛŠ}#À/ ¢_J@¾ÑaGþØQ=òý ÓÉ¿V#ÁE¤†9WâßÂ=jÑlã«ÏJ½¬WM?iêÁg¨´)@æ¡—B¹òª“À\B8Ó½7M&„$Í“õÒLÔʹÞùì,Oáµ~ûLì JÀßmk$z“òÅiÔË®(W’I`#Û†~Þ„©rò¶YLùbæ¢ßƒê„VÀPkªíV6H¯1ø»ö÷C¼h¶‡ì-z@èïh-†{[Ý¿ô/odÄ«bâ´,¿çÒ7Ïù¼Ä€½Ml¿AßÏ ñ»›ï…þ(Äsþ\8àuÝóðÃê·¢ð[ÚdÒ»»¬}@ÞÞ}ðÇM­ß½ÛÞ4n§Îa&C“Ýü¢ï¾ç˜Üöä¤èDa¸¸j侉†[O…øƒC?„3ê˜ÎɺíçÍi±!NMªvaš³3 Mÿ ü–ãì÷ü±«b5òð¸¨FƒŽkÒ€ÎP6Hû¼S¸óé*‹)mg. ¹î½ü\º`yÉííäª ˜„Ŧ™ç2•:F¸Óßhn+/ÃvŽVb„ À(=áŒk­vÐÊä-2IZbŽ »Ñ*¶@q6 ‡Q8Jþµ[°a¬¡ÞCþ*í-(5d±B³Ý!1ÜDql|±òωó_¬9}š†ÝÚ{Œýq”Šî€šØø®ˆ<‚#!ŸrõI¯ËgêÆ{.ÖC¶  ¹Ü„jHÌQ,ÀÚöø%[ý]ß°jØtÃQ98úç:ÒVÈ_|¸J§Îéo·Ä®õ Q>÷HœÏC@?o؃§‘Ƚf”0=Ú.õ±óêÊo\Šî^ÕŽC²¹çnÎ[ RöC¿÷CiGKB±o^¤»É—þ¯p>ðúÆ/Cš§uµþ-Üî^II*¼út«æ²I5ñ‡û$¥fF³»r(¦¦í>Â69Ä™¿r±êïçíCùÅߟCbrý0’]ŽÏܩܦÏÙ×8gSbÐæa×Uç©úæ÷ÛÅPãQ‡E>…Iú‰ÙUiZÊÕðöDivu‹¯_²Þ6×ÕúC°È«^ÂëzsL@¿Œ? ë÷^oÁwpß þÍOWøcçÏ€NùQÂwÿ0ñéýÇßúå~÷BüĵUòíÝÆ=›úµ-6ä`.àw7ßPÍgDžJldzÑ-@Oªpþ]¨#ÕmìwN7D0¿Ó‹ÔíÿQ±Æ‹MŽàpŠüЀQ z–ç‘CÇ’èipòo7•3ÈéÕú2Ø\^8¦³£5Z„k÷Û\ zÇ^tjïÕ¤ Oaæh$4œeBB©È¾7‡³ öŠÁi«kÝΰý8¬åA€½~¼÷¨¬eÿ|“šœì %5É8Õ ; k€¨‹ÁY4‹ã{: ô—}ƒœ²¨£m_¢K!€¢çTTær’eM·Cîû8ðûçŽ:¾û«þÂÏïU¦êöƒQíêAÐÆš@\ÆÔ\:¸ÔÆÛ³tç$åûÉt\™ïȼjŠôjü|4NžF«Üæ¡"Jy¨O†›”#oŸoȯ³Œ8•£Ör)uÜ%5Ð?óPÖjEïbÄä”BwŸlFøù91‹b…~(ëà¤uÏV¾j̦iåGâ ‡RO°nPJ—ê³JòÓ¾úUBÑPÄ#"]kŸÁI½>ñ©%î|p&M‰Ë—P§öM–\–CFìð“E8;²ÓI>Ȉ_þ\s¿¸êw€Àß;Í}Óx+8ãØÇHû£/qF¯f‡¹ùm³µ€½ZåH÷ÏÁ©è¹ŽäE2o kûç‚ã¨A˜@Ör½sl~=êêëMßÝjP½!%ôº1þz3ìGC Íõ¹{gÿÛÔˆó½ŸVxcP¨ü è¹ÜðŽ×ùbxs'½²²w%¯Ä’¼oÞúÝvǶJØ÷Jq|û ”ÀÀ=8àPÀ[C6PÏÑ¥7l¢e’‹áu©‡^,@€Ñg¢ïhðKe&ÞXݧ"œ}tU$—•‹bø SÏØ<‰ðäpÛìyØÚ&÷²¸ïMwpNSŒîzB<9ªcM ’‘¼¶g;F1z(ê_€åqþü¯è~覊cE«ç£ëŠÕ³üÌ ÕnºÛ˜ß–ˆvI pãP/0“ PŠê¸OÜլ«:m (b1òTf@ ¯Ä´FäHQŸ_•c×pJ}OG¬þzPx<¸jí®r†B@Δ>h/5yB]Èíj#fÂM”ãúFL´úä—æd#ˆçîöœú|?³5 ¼+8¹ñòÝñ¨;Lvä¬â~žk|aG/êSÛÏ![ÂÓÊÎ÷-T#ÐéÏ|þUMÖÍÁOþçi$½H9¾vÞ_Ù/æÒ¶—ÿˆç¿Qð€ð¼@j1XRU+åHn‘¬€‹ 9Àó ‰Á¾B`öF6¨®P§öø0ác<¸j³[€>›À×ÿK-Ӏà›ÙÃf6Ðíóö¾<üðñ½xŸ7Nf¶ —È+€â ¹ydw^'ÊàhsÈÒÒ%i1ÎÕÐ+Ûi–C]õ&¯¼¿Ý#n¡€K@"‰€6¸?‹Æ“¸Z介ràq: ÞA•¸@&¦Kûóq)äÐ…jqªò7!ÀšTï Å[zÊÞ*i÷#áïÇýwb0\¢2Pß#àv7{yo9«—ˆíǠߟaÝæOØß ß?¹ÝÄßÜI¯¯¬zÛk¸õóöõ>ÚÓõ·›æ®uo¥™nøãé­ƒ ^’ÿ°†‰…3Gu«$l¯7¨qºÇüÅ·æÆ|þÄ‹ dmû+±WAlœÈóØ‘‹®S=TæxY\÷ƒÎÛ ôâžAe¿¦Þh:Á£Á3ÂA³Vö6·³D7‡Îš=D¸4Ó“'Їû²6òÀ¤‘‡rˆ‚Jô€&0¸ƒÞ÷#¿Š :ƒ¶Àdè´£éÌú~]&«ê>y‘8[F1Œû™hd÷¼iŒ·ägvà¢BkŸ4÷°%ÊàÜÒó}“ŒéC¯ìº[Ò9Ç#:Üð–ã$?¹ÏþŃÎ<9áb}Ðö¶s£Ñ0g¦¡FuÚyãáQ_ue ·ôÙÕ(uŒÝ´UV¨:6¡ µwÐÑþŽ-«™j'³“̆Y¤‘M¢åžŽüh" ôÄ ‡) ƒZrÚ9ªPDgÑó®Ä3àW@{näbÝb1´«ù¿i\  T†¡Oí¤r0€ΣbO«´N±7N$N…òí®Ö~ÊÇ¢a{(v•Äs@ xî:€6‡ÌÇÒyAk°)tDqâù\Øî*’jRš«%Â?šÜ®›œ&–?™ÀuḕûÉÄA˜`å ¬Áž§*øÔÉä¾€@œ<¥&è%¬”9 »È²pMãnqb<¥&>kß×~aÚÒ¤‰’ò\—WÈ/VâÁlJÆJGÅU×1“uäø¥uœ xÈYÿ`A½Z¹dR ðiÒ{ ºôœ=ßȼR1ÓÄ Ú" ÆqTÛZ[öñz>äÕ/ïcW£¹¢!0Ź $DË#!Cá5›¡HÕHˆN=s0V#c:ŽÿÄÉ è.Ý}§®¶°˜Wð#{i]º‰2òâRØËÕãI1 ólOůŽ=Љחýv ¹VŠËÏJ\´×ƒJ¸D°E»Ì=ï5šG(À;RQ÷/ãÔ2 7åîóèþ7ÇÙB!{,F€¥è ­ÏÝÁ¾ÇiAµ™Õ׬”5•»(ÕƒhøT;-Ê»D@Hï@ ò\"…x€y\½åpU·&ÒµâŒø“N 1D@ñ©w3³ë%‡€ËúgsÛJìÝ‚¬öå5$@ò®'Ñï 3ùÓQàŸ7üi8ðí+ûöŽýS-+Fû×{8î|µÂƒl!= ¡ªkYÇ=0ƒŒ¢ß£M ç(dÄÐ! !óÛ¥vnUàAøŸ¡H/º^ÔpÔ=ø¡×Fã¶¹“ÆWæ¾úÿÉ{÷ç6®,Ï󓯛O$ß‚dJ[žn—{§¦'v¢cæ‡Ýˆý}cÿÕùy#¶cz{§{=Óõh7Ë%™– $€|ß|í$’"%J%»ªf2›3/nÞóúžs¾ç¨1ìâÐj ’‰Sž95Þ¬©šš´Ö…öŠºßŠÒ8Z«íÒì„–ÕÖƒ^žãI¬|Μê±KÜ!¿HÂ]óIÐÙ°ëÅ•BÑ•u õ23Óæ»DI&ÚÞymþÅv¶2DO+'+e€ôÐlZ…ª_ë MéPÂô…èΤ  uQ|™I—ËÏ1û³"H´Tˆlažü±ÿ£(ޤ#‘ f˜a$ëC£±š°P#k(øâû8œª —e½7ZewÊ®œªš¡(½pÕfÞ,¨4 öÈŸYví(W›©Ò†q™)i¶‡­Mœ¤iÍ^òL²³˜žk³/ûX6¶?ÈÌnžO Í}¤juW‰0÷ÝC?«Ò*‰™Ë<*ôTºyVÕ{CÇ)R²6 X°€æÛñ}4ûŨL%&OiŽfX¥o|õ‹£/ú»®ÖVhæÑ(‰—ûáôéïÒj˜B*8Ðè›Ö·’N´qªbºA{æMkt.1Ë,L…˜ÚH…ÌÍdö˜3ý%½˜bÎÊÇÿlvf «ä»¨’«âvië´·4ЍW‰dþËÂ%7þ>_“ÛÛØ 6h·òœ^¹Šmíax;,üF|®Ô"ÞGáÜ¡U5q^Ïßúó`]'XÒ†’†uŽä:­{¿gÌ~nÜIÿY÷Ï[ÝŹøóbeáæø¾;™@Ô‚‘Ž\nøO_Ó1ÙøÌCʄȚZ H¯UkÈz#'FÌäv°mŠÌPCÖ¡÷¯y¬ ­L·ŠrÖé¥Zìۉט]UT)ŠiÇ“R]zÄùWÛy[›¡Ë:·£ò!¶Vj~Qó‚h‘º³pÊÔð³ÐÝiÏPlìvž{šºñ«ñ|bªCÝ z}%è”ý6¶òLÏu3ü}j%QŽ\e‘a|_ª™ýƒvE+ÚæÁºíVéŠV³ÔŽÏÅ…¨¬D±b¸’£Ï(&©I¹ì’7 ]ËéFmè¨ÿÒ5ž‡‘”ú)¸ú<‘/¹à@ÝÝo½Ú3’ÃôðI¾÷¿c¶ÔiXNfé bËÒì±ÒÉg”²4ãVw åëªÑ,P þK¢/÷cxãÚ9™V c+aO„{Z@ýåh°³tU¥î–âÛÜ©ÊP %?Xzºœ{•°‹ÖvX4z‘ùMeKÝ:ͬ íɸeÕŒY¥$Kª”vä5ÃÎl{B<ðé X„¯T” Ý—Î &6¸)zájúgögÔ^КjUDU1.fçñe‘[3õ˜jÂYH!à¨íŽe8iµ/íí•Ökªi§ÆÜœÙýƪü‹ÃååEUh T‚–nÙ.c-4] …hÊwº‘‹0w¦Ïóv…ŒTÔAg–ÎFš%»Ñyª.ÿÞ4¾Å^'Ž6Óuã÷ÉÎåíp²P&WJ’¶MÎÁmõ‡÷ÖªwP;W¯ÝËóûK½X‡¼†'á=‹»ó¯£?÷¸ág¬nº±S¨~:ÛpÛCµmá`}uªø–©Ñ¹ZeûæÕÚmrã „íÚñ/^¿:ÀÔÈuÎím½Û0cd¾E»Ø¾yèÕÑC›)uÐaÁ×óð°÷<’yºDì[rPJV”eÓQ®Õæ±\ú†S={ ­ñUu^hUÙ«÷»­£«ZÝ_®ª8ŒH»ÁB š€ù+|*îj?ºÝœU¯.òU1Íw§ZqXÙþ"oÿÅð:êÊošIÓ{± _Ñ„åÊ¢ç´ûij5ut±¯xN@*¯*¥ÁÚEÙŸéÇ^bêíIUž*ýŠ\J˜§r߈ô’ÜÑBa§ªÕ[´K%Þ©Td "‚¤nü³Ðèð ÝRgQ)Šâ‹ØÝ¡o`^%eô}ãL¥vP %[€>Võqd}ÕÃQî‚tUæ¡Q,ºšûPW¨„È\N›Ý\œÛªæÎ[Evä¢#[ ÊÅžî…AÏQU£tŽkµë:ÝGEö«, œ¤Õ/VeÌ,$Ÿ¡MAR-‹5Që#QËMŸðbîcxÄ-å}‰–Ð3‹VïçG§mùÂYý¯ñ™5+Y‰Õ¸ž=Ÿ]Ì/Æz3Í‚: H†-…]š ¹°êRÓSùÊ«‘é‰ÅË=Í?Z:”F¯´4Ž2 2˜n%j™|QÊ…Rú¼>.<8:C=‰[ÒKÆñ®Ü=ä²Ëi­çê—«n°Zƒø3ºß¢ƒ ÑëNã›Üvê=ê ;Èš‘Ü4¯%1„=ØÝNl~+Ï|ßÀB¾Ó>Ýß[ë)ÉGxÏï~ÜÏšÐÿÌ€¼b·Jðm½îˆôA¾—‡ýÂÊ\¯Þ5Ûöfªø%L®Ž>øWáUùúÔú·0½N½iÐÒ(¼Ìi:ð9¬¹ÉFíHt{` R5,oð_¹ùi›X¹Z,¥V|[+ÿZJ-4:ÉT¡pƒ©è–Ú‰¼¶T²?®Ý¦)8œb^^Hg˜‰D)ÒLEí©—Ÿ wÔUòâ ä!ôÇ(ûn¶[F²©ý.«!±B|YWáê·äQ^ôd GÝóPù[–g¼Øgñ%†NÏX:%;ÖR?PSÅ3õ²9k/M‡¤Wý蘘N4Y;Ä tŽ)}¹R4í¥qøÜÑæº:)ŸïæôÊ4¬ÚÑ÷cퟠ©ÉP—£°þu4Ý/K_mwc¬”vFôb9[ÚØ>ÔE¸†; æ/×Õ aVŽÑÅñ£Òf+W;n¹³l¡›L¤áe¶“G9¥]”fÙ:G”˜J~PôÌ]»ôég;nb¸­QµDF1¶&4Åét!Šö)šK‘ ¿Ý¼¦t‰ é{Wòj)ÊËcMr(OóË5–xÜp ¥åÏsÙ˜Y~ÿýÅÓ߯¿—UêTq[Ï­vüB‹’æÚ!Á—ÚîÄ4­WQTÌj¼”'I‘$~i;ÓÞ¡¢x‘Úf«—V†=%ƒZð¾jœ)Ý48+3­ÛJO…FÝÐ&ˆrŠ‹r`þÚpKÓBÖ„µG4ã+îÚkI9y“ïEêï#¶¾¸zž5‰:¢”Ð}]‘èB}½j¨½E«ŠwÏ´¿c|Ëu95× {?^òó÷Š„ô?yÃ0„ÉÛõHòf’§†<>{ÛwødXYrç®7éYæ·4½~’†¯Þ,5ƒïà‚Æ|S‘eÊÛ¦Ú®%-%=Ç[Ê„BqN· § ƒ˜ÏÕ± ê9­dùOx`€ý×DØä«VOͺhü¾& kv ¬Ò°¥ú¹?¥ÐÌyâu(ZÅVlÎÊu\tõ›ƒêa‰è…îîòµMk Ää/«å?ÚùQ+iÎÃ"îá«hOÐsšæ6•ËÁŒ*E‰÷_xÝ 1k—rÂbL‘[Ðo¹02Êx½ÐâTÚŸ)Y•ÛçqÑ.4ùm“s1g)i»x-]vkß~æ½Ü±æ´ŒZIMñò2íNàŸ¨”qzðŠ(òU8!†Œ–hQ‡ÏRm•×±óßÚ6¿Üv§ÓfÒ€–žõ0*¯E3+ÃXì›ÊÓf1èŠxWŸ9~¼cìÛ¦§æ–Ìå2±òæKUï–Ÿ-µ$–4Ql"%˜/@ô"{xQªm“Ë#‚îáÐÖ¨^-+Â5’­SùdFÝK¤¼˜4ßQw¨ÿµ³§»jQ[™Rü•ÒÙÝÕ»ÍNÙX;+þÁ/KS}T›ÚRÿN*Ïj\rôªýzЫ+-ŽÒY¾ŠÃuøyyê¯j¿N«„0 /ËÓI°zâVŽv"—½t5L“‘Å©Å2%<íyhmQ’P7¨&jAÙ'_׸.´;œ”°DÀÐaä!Ûæ¦(.íÛÞ· ]É8µY„k™Þ[¥7•‰6¤·±ËhÓrk¾Èå}|üæ5iÚGf†ßVJ×pù3)Õ÷=èOÜ6|xoËòÉç[z°?,)T!¹ÖEq Küìú¸7yŸ‹9CÉè:IäxÓ) 5¼.[¹u©s²±²aÖÛkµ]O£´— a¹9ôãtA$7ÇPƒ PŸÑóʲ™¡-“¢m Cf'×´ÒÍR+Šf4­rÞS0íR¯”*wiœåƒ)Ú@9Ü×t_ÙçuëÊZMä$œ^¾TƱþ0žV«S;àUÎys8­A{­&C´aH~€´k¦½£ÖŒŒÔ´á,FL8,}ÂÆÒê “©f/º)nŠÛ§l’ËbêOmý+Ë?ô»ìncEÙ|™;Õî®’wô^誗ƒ~­ŒËö7Š^h†!­ÝÔ×ÎNŹl#pèHÚÌÊÝœÛSVbÅ` IDATèƒâ#jär[La\SëWPÙ[a™¦›Ï¬ím†`y‹\—½oëDߌÿÜ:p5¤ïãò€vÅp•hf¸½Í©|oÍÏ_+ô§)]æTù6£Ê_õÇXÑ·?ßÞH?äªdz×Ó;°_s!·47*äÖÔáK JBê"®a²­ 9€Çà üz} k¡O¥’Q*!Æßж(MEJªK³iÅÎNdX3WïHM|†úb¨ó}%}2x¡É_ï"›T ‚r”ήÔá´ì°Y`MZöò—‡Æ…aÉÒGé0øvããß±o×Þ•]X!%ÌßÈô=G¿¼ùLvCi¿ùÌç[]ûìJÁ-¾yùÞâ#–7™? øó>Ãð‡!Ê-\å·;ÇV¹èb‹¸|èõ.kü¡ïøÍç«OlÿÞzC•€!Õëåm*ä|ÐáZ<:’”²¾z¾O¯~ï5»‚ìu%Âå½´(ÒyÌ”]é;”N¦Œóª³7/›2heÉbøm&©Ê¼€Ï–¸^‡Â ZÏxžçŽõ;eoÆÌæÔ* Kà«“ Nýiií »•†Þ–n‰;E±™Wœ)45"Àש,¡v¡ZÁ…¤q+EQC°Aå€l3W#Út:ÇN$\ŸJGÀç>£æ9].ͨ°¢°#žœ÷Åt®uä©o˺ã€ñ]+/.˜oNXà &^†/™šAÑé¦]µW…fM›Q·§ž†g°rYžTa×Ñ2W׺–Ü+«f1 í8Ù­ŽT5û¯ùïï9J}À/4Šï [`ðgÏJ»UøCÕŒñ¿µ–MîäûÊTÕ¬ûÉj¨"lNDÌPgd"eøÄ–‡Î¯±é/{i.«² *(ž!²™Ñ<´_øšQÔZh¨3_èÊþ^ ÊE¢žEå"®°Rq`u;VÖ*%V–TnšéVi?ª¨„`áµ-2%Ô óK »¬§íóPi§j‹ÞP#.7ÁÏY†ð€ÀäíÛí gŸbaW]!Gz馃t~S®Ï1ï€&éÒSDS¬ûàÞX—5këôî`9!I0A@ÓD2%$g¿ƒpB¦ÀC>Sì°cð/ gè x4xôPú†ž;»¯¼àEñˆx¿$y™b\ZÝosKÂèЇ ŽüÖ> õˆ¦4 qÉÔ%¶ÄéíBüú«Y yb ç Ѓ(Í¥B­ G`€ „Àì>øª4ÿCX†m]®Ìª…Ü'íC¾mqfldPmøÊMÈ!¼›L't ç4ލ£À'ŒÐF²ˆ(jëH×0…Þ|›i´ ð.9Z°Û=ïCÓó¦/ôUÓmV"‘¥¢®4õT/©T¾ÌV8 _3QLïw¨Hõ@íØµ>ÐB+O¢²*bõ¿ê$—9çKÆ´PÕrÙÐj}¿®½N*嫹žbTLEO7#û¸º8%%ÜEÞ‰•Ö‰l)»ÖÂ3ïåýŽEÖ¡ºLÔ¢ÈDÞ©òeh-sûyÏk-uÃT“Ô[аĨè-]¯ ‹dYBÌ᪟›=ÍÓ»Ì}Y+ &Øà²é͹[´5¶8?_áÍǪÁ»:X?ñ£•Ÿ±E îzàŸ¦ô³µÞãe/®º=Ÿja’”ζi„[}¥}H]¢h„3¶ÍHC*ÈQ‹  o³rnLÒ¾úÕ6M!õ.4Dk+ÒƒèÀ-!„8½Ç” iþr{†o ½rÏT#e¿¦c•ÂÊdR¾*WµtÅÎåá´JØš8÷ ÚC܉JÕ¥²h×F‹µ¹q tد˜_ˆSgH6‚ŽCÔvdÖ à¸ƒé…rÒæÐRéBŸ8’f…¬Ø)Е‡âø@ÕM-bù}Ü;$.Y>e¬Á…Â?¶Ì ¤àù#}ï…­’ jÉá¿H)Zž5v)dé:;ú´d·@+ˆPKâÜ bƒ¼µáàæIìm‰ó¯X÷¾,uk_a-'†£ü'èïþßföûÔ>±øYØ%îd9üS² ï᫺d¼£ÌàãvöÞŠ>»¹°î^¼´ZL¯£ªÁ/ãÕ¨Z<Ó„ZõJaöä«ÍäŒn!}ŠÀ܉ÌI5ýUØÐß1“='+‹¢‡ÃŽBÖÖvÏh5m ú´½páU„…ã ìtsÛ[µ²™ËùÊ{1ÕÚùг?óJ߬—‹£ç/²Ù,Hp7 ûtUÚsÈhá3÷@¶Pr\lŠÉl’ó .a4•ÒÚLJKdxª…Ÿ@š` äj"Òð |zÉz|w‡_å€×ä†d™S-Q@E¶¤Tu”;V)EYÉȆ8_ £@ùë™êHôpèt«;a¯"(PÂD&µDQH7Àÿßã«ß)¡Ð1šk¿Jî/( 8o°@ê›àÇ«TåÕüîRɵqë¾Åñügä ÿæÏ!]¿wSnÏÙ–Ÿrg%Έôc2W ƒwn€wCÞ"%t™N‚†tN±Í‡)4`Cƒ˜EruãÏ;¢u=ÂxÝ$qÈo~·bgÌÔFnñÜQk"ºRÕÔFTz1Së¼ùK³³¯¨½6‘Q¾Z–+kl¨—ž-ìAwþ sátB—GhZ7i÷¬´«ck±5)¸”²¶Ðº³S\ˆ²lÆ$E¼s’gœ®Ï¶ß•Ú„U QHö·(¹{5šøŸeµ“_þVæ ´ë%€*ÄJ4$’ t Ä˜àTZS9I%ç ~¹ìéAKÐhaÖb$”cÒ4›:"‹À+ë‚}Pnå×[Þ%¼ï»ÖÁEvÍ?k߆W©íí äݤx!„n‚÷Å?'C†üÓÁ”Þ½ï%Þ¯Jávöš_ó–a¸7EÓ›ïÕÜÆíþÞKEŒJd3½í¶ÍFœ,pÁ1¢%€¤BnQ.¡óyÅ3šëßB8ø1Ì×2ZB…„ñõñ)‹‚Eá0k¯H]±þ'KÜ\(ÿùoNÆŠ½Ûfâ·{|.Q¨žRôð )-­££/©«µ/mºžÞŒª(eÐßCtWt¥ž´ÚrD!«˜ó˜°‘ÏKö²ì5G††1 †`ì`Ä,æÆÎXºAk–ºéi™«—“tiï·¥©jÛ)œÞÞ¢ìé¦ê ï*Jy¶ß‘f]8îgma¨Ú{ôÊ~Y¶ÿEõþ§]çðHüˆRI»þjȼqò©}Žnc$•¾Wc¹»†eWËE–ªaª¯VÇ=“㣡¡X¥šŸUé~YHõ¯:=Ç÷öí¶©šóy]4œœ,³*0,D¹ÔgÜt>á%@ÕEoØ ,Pä2ã|I IM­Š´öˆÙúÍÚ`A¨t)=.ç=äæTcŒí\Ü)HŽ"ö ìTfÅìÛ×IÖõá0ªa…å’½ŒÆ!û‚vˆÝÒ¿L;N­vSLÎRÂ,l›nctÓ6ìGXc’¨§[¯ÙÌ ôëôºõS^ïä¢Pn¶ ÝfWÞ/Å·*ñAÄw_Ç[%vúéîùé/ýaÞ«Ü?Ðr\on¼ÿξ!ßí¼X·Ù¼k£©®}¯”oÝÞâ±å»òåÅÍe_©0«¡ ²úfté›ÝخЩÐÀ¹c³4¦.ãµ6Ó;6§„¨ ¿–š ›eHˆ´cŠ!U¼RvÍVШ^ýŸ„–NsI}áå™Ö£,fd/c Ô]½I+æœÙØ+½“%KÑž EC=¤j°—ÅQXë´³õû !œ¯Dˆô[æîÃÆê3óÈ^9Î^0©hm½H£˜Õ Çó'i•K=¾’¹‡5^^׃$§ÐK؆éZj½ßw"ï³sU]´ÇŸë…ZzÒÓʳhÕœQŸhzPÒE/p¼ß¶Á*×´I›×mÞF™nù‰û€ÝýÜMéÓv5µgy®=rö»ÝCÑUì2òÃÄ‹ ý»ùtKÌ#yá8J¨xéb\×…RnÅÞ\ºDE‡|I¾y×]ý¨éhNÆQ>ûKrÿÚ=?5¡—°$ i3lèâ'Bð¹Á3é2öµø‚çý·êÖvµçÒ´VùÏ™fÏ:¥TTô/ƒJËŠ&wÞ‰Køöõ‘»ûÏÞVüWûnÁOî¯ä‡*®D•Í÷szÿfþðXIÞtçëýzÏz€[ß÷îV›'·/ÑÞ8Iëö!ñ¡QôUÖ_CÁH"gP¾vp‚«&'Ýl‡éæ4÷‘.R›=›¾c”yI]—‡Ã¡z1ÊÖQH Kt9u›¼TʲìífŠÖº¥igŠWI¥xUÓÄì—¤/¦ó,ëu“~cŠÍ„T­”.ƒ.\”V:·&–‰ÞÉ §é¿ÒÎñêAnB'du )[ˆÜ)†Å´ƒ|ŒbM!¼È°Z-¤0PËËqiž¤âº&ñ!gßUÝ;˜5âoVÙÅ,®Ú,´äžYÚCÝw•zר³¨N){Ëâ°(=Å)bÝ*˦r²ªé*áajª8¯e¥B}R—d9ù š#%÷Xv“j…Œ—¶¹;Ãú0ûVJ/V—YÖ”aê^îèóq% /s…óv茓}_®9‡ÐÀ Ñi1 ’–8%™ã@A„T«:fßçßY|VöÌ•5ÍÏ} ,‰Oº ¼šf×7W½Bz§µé,_hföØÑ&Ez|×ôX, °ÞÌE÷A ›­Wívè4()£9¤¼@ú?r`Ò)~ù9Ê?3kYæ…œõP5Œš·˜Peý–—ýåWßQÒc|Zõž1”ïQ\ê}Ÿrz%w}w–âz¤’¬õSú4_Cý˜?úd›øã{¾×m'©üÐ{ƒõw“s+®{1JL[^}î3@’Ž@Î!‚ò¦Öe›kÁèÍɨ‘z6*›5ù%FDZvJ!rÏkjÓIöØ֖К6iÏŠjÁé³u‚7™µô<žbœµÌ³Ê²1– äïâæñ\}ä5»Ö©0Ô3Ì1Jãz‚H)$»`Àïõ¼#×ge¢]R?[¯<_§ •8ٔ謞qù˜\¡(¦Úi,)òÿÔ®þ^.X*9ßï9ú΋ ã›™LgiÓVÿÀâß³Ìþ‹Ñè»qéI2ÝâùÄ$%»%j#‡ª˜4ZZemvœ—&ƒ©Ò¬x9Q2§½PêV$3¢kÚ`^çÍsé-—õ=ªcñO ßÏû†>þL¹öîm-³µWíÁÙ= ¥æáReƒýÊ´a·4”¾m{Úö6µ¸öùò&&»©éfAç½U6‰LÄBW,ˆ‰–uv'©¦eo¶¨týp®I[èÕ oÆâùkŠM¥Œö¸$'úJšù¢Þ]æÚ S‹"·;\…’ç&}h”žU‰ºì”Ñ+xF,ÀfóÿÊAÝ',ø~«‰Á" N¨%Öëï"Ã?Ûâ]b欞ÿ_môͺî>=Ízö'al’-©G„¿æ•ÑByþ’cÆ@„ˆ_SM˜AO¹û7B줡¤)p—ØsúÜ[ç%:~E:‘Ì¿W–³Õ$ÃþŤ–/ÆRÿ§˜ÑÙBƒícÅBYÈ– ½¬ÀºbÙ‘†z4y¶ÛX]×/œ®¥æ½8Z´ ÉÅcð2=5ýu¶[ÙžÑv¸Žhi+ÚˆØRNM+ÔH,æ!ä`ºê®ØmÕƒ"Y*rQobÑU+Ls¸êü}i6xsò„,ãùŠ²ÙžÃ}Kœx'¬èÖÓâ nŸÁºpuï-š<…nK#ïž¹[}ŒÎú‰j:ïš}×ÏÿPâS_÷(ôÁjðOÎ6(ÚÕ½›b"PÞýá»G‡ÞsÄëp59Kâ ç¨²‹œpIZ·ÉU êÛÙòˆ7êuû«6à; °èúfØmþþÙŒ(ýÿ|Ž.*{ÌpŽó‚)8°s\6û̪-¦Va›ˆ2•²Å€ 7d‰Z$ä4 µÀÉÑy{H¢mŽûlû¦WâIl…&Ä„bk>£ÑPÊ‘x{µñX<—õFnG0ÎW¢þÖ²zFE û‚Õ‰AÙbViÃä·ø¹ßÍVë@jq,s¡”Òï%ú.eÂjLzé–'µE®¡Õ£– j|u°ß„g«•üþ¬2Œg+­ø¾Ò³• JÑ¢­‡ív’k¸>()j-¬†ý'F^Ò´~¦6êàRó*Qîצ¢Ïqް“¡{¾<í’YÏÚÁfÁjj@屮èìN»2Û{Å.\dO«]w§ê¹n¦qØú?ô…£ˆÔŒÅ"ÜÛ‘•ƒ¨¨LŠ‚ËåÃÀ³°PyÙäÙ9'屩 ÁéÞxD\¼£ÖkRí‡uÄ>rŽLoÁ…^·Ý atÇ@éOæØ]YÄœ~;»põçbíQiŸ’)çS¥oÕl­ø³åÚk³é–lÞȽžr[÷VɬscÚÂ'¦”ö)Þÿò”­ÂÜ“_q!’·Ž¯r3ù!xKD7W4xõfµùÖH(Õ¤‘h‹ÁrÒnñ·àÀhÂ Ú´kHÙŠéKœ›YY…¬3çç;˜|gu)†lc ÃÁX°w†íÑ:“uæ›<‚JH}MaÒÔ$ýP™_Ìé´^Õ Då©ç‹"z™¬^i4VQe Pbªä Ô2f„#Ù…Šj&ßIéûFaî\æjÚ©£µj[²IP*4¹åþ»ü‹Cœn©ûåR÷ÎV‡“‹çAAtß1Ü õ!íµç?(az+óGƒ´x;bÐšŽ¡zv¾ÇþAî™õÌÊ‚F.V¡L/h"2C{ë6À¯gÈõg°a&·84oŠ…”|]bžóëê–2t¡kÃjÃ:y‡þ½K(>رSnÞö×w”ËÿúF¿ÛgÈÆï3î}rÞ?oúVÝ&`šAõõŸØ¦}¸‘/>íÆ5Ð}§]•W‹‹Ò{-þÃ\˜ö=íâîNŽ;¯ü*aÇ›û8iõ¿X{õÙ‚½!“™¼™Í3@¹¾Ð+ý›­)wà—0……ÿÔò„ì9Çx~[@ yH>"yJ0 ’×­ÐrX”eÁo,›ª‡pè4;Nªæa„Tduà¯ñæÝú[å•(¾33¯ 1€ß$M,åzÃvÀÀh)C(ÖSõ$aHõváK8ƒÙê„®9.J¹.˜Í\VÆr' ö¤HÏäi.èà4XEVR:ÅŒNI÷’‡/I2Á¥Ã~ʾŒ÷¾'\¨FÅÚÕºq´hYVˆÊ8@…(äj”æJ뼋²Dwðvp»¢kJC™Ô­'Í"é¶”Ð$\œ¤ÍÑ®õ°êú…EÛ.ãV›é††Ùÿ}¯8¯S‚Àq”¡ZÇûú.ÖÑÐÕG©¦”â’½ %õƒ]e§Ó \Stå°èWÓÈ»t±×fÝhb±Y%íµd”W¹îë>y…ÃT£ŠÐ·UÔéµo^v²õÁ«ÛZ‹[dõ†:ûÝ–òž’øî:Õò¾²vo(!ºGÜðsY…Hß^0îÏÉ¡ÿ”†aøÇ,ÏÚð%÷è¨ø ÅoHç«wgM:mÞI|§1X3 ?»õAÊJm‰“ RV¿uÏíw%ÆhÝBeBÿª)ß28·ógàm™‹'{„3žWœŸ‚¤7Æ…\Ÿ¾yþ%(7Ú¼‡”ë3'ÀébYh=G&õrÞÔx}ŠîߤêªUŸWŒésÒ­™ïý†\ÐH«¦Z'Hvlü±ä•„t@YOŽ^šääPC¼—´‚–2/4eÒCê@âбɟ£Ÿ$ÚQâà÷1ÀPÙ È`zà'š?·æý(uñMˆºÒÅC¥ãÂÈe)Ö1±MqÍ;QÜVcœô¨r„4ÔËhdYa"~-ís±_å_¤q¡V8Ó±±'Êà(2f” ­6µZ}à·´öó{Ðtµ¢ß8}·çxSØÃå^usÝë>´=±¬‰ê‰¶=¨¼@Ñ2©œºåï/ÊœÓ 1AÚ Àße—·€0µÁ&šP¾Ý¾ãÈ m<ô!áj…ëÆ×75£ûæxïÎ>z_»Õ¹H~ýûê¡Ævn§`Ä/Ë¿w¡­þSZ³ÑDzVÈO`ÁJpÙÞ^–Óü‹—ïq껸oX4 ÇîÈPÛ0N¿+µ5Èωž¡É+°×‰×ÿÖn_Ø9¨k”€8[ ~’—mkçf×<©ŒuQ£ÐQKk‰¶@ƒzIÚð€nUmö$ !$ ˆ›$³ÓßMU¨ì¹õ©VÓÜž…?ÞP ^á[ï•–AŒq‰Yo—™É67^\©¥ÉÕ7Xo_°@€<€=TŸ¸G¼ ct(|ä ó-DÇ!9âß$«žÓë9¥9lòGMå“ìèR:Ä]Ê>QÀÒ]ç9®¾ÙÙ\Ôô8aèÏÓjqžJY8ÔŸË.‡C!͸„)“Ó‹¨þ±»Tyªi'ŽájGÓû}¿PK¿µMÙïx{¾í¡Y¦¢ÚqO­»ê±zò¶ IDAT^¦&z÷<7¢YøÃ²ì—uT"©rÉA޽à·ç,JŸ2aU¿ÇñÎÆ™dg£òoéëLÁ~cSš;Ü/ãMÉÜ;ºkÀï-W|íΟÄoóÅþ‘ÒËo´sý©5åòCžþÇ v>&ÚжmŸõ;ãÆbë™ÊO±xñ¬ómGÞÇê¤P[¤ntöºû©µ¼RÃûº¨éu`þœíĘÛ"LÀa¶aÅ~ó3®7߸”ðÃkÂðÿ’ òº¼2Ù+Ø—†ÀÖÈAJØèY@I-œ›æBz¢•Cìµ$ •*,R‘!“…À=Å\Fù ,ÝP&›6ÀíbŠ-†–¿â Î7kÞÎÌ ÈOÖ;ao ¥J}¾¹„µÄÀ¿@ÑêŠz›Û‘.3ôôyå,Ö«8DVd58(œ|¯Ô¼i=«KÞk/£,h?c.È:ÃCœ±›®–Ç`ÀˆlѬãýßGKzj§' ßœ~¦š¶'2Ï‚Õï™P˗ʃRéýeßî×-èûVe&¢jOܾ§˜"«‹¢È¤•Yšîiê)vöT+õ¢jRMæ?¼J.ô`GiÆJ/¢5é\RÃß³ ÞÆrmÞþ-Žw0'(šù®³± E¹m˜¸qÝ'‘ûQå§òS†›êÂÿ4 iUïÎ2¿úÉ-ÓŸÔ%ß_þ| WÚòîãÒ|‹uý‡õ[ÎzWîäF4ýlLîi“ÔÏêÕZŸorjoWÚÙðºÀ™ú'DЦ,ßÚgÉÝËFs\ߨ›.„D² ™u¡dºd‡²d‘·ÃÚ¤ªƒš°e¡„¸Q³ÖéŽp¥QPžÒ®¶8ÏzŒ°NªÓbêxû|¾ÍŠ?Ûâ×[Ìj#‰ý NlÆ"@JU5ÊmÉKxš`w˜‹‰$†–Ä„X`¨,K¢:T(AgȆ‰Jc–Ižz-ªÌP>ïPʬ,å«Z’­ÈJ´x`~“n€z±q°÷d§H™ DmvSó@tmUþE¬:‡ö ¨´c]¨ÙY#Ÿw çFï éí]ÓpL›ÖUöêÜé z;=Íni^&á´ Í,³VµRi•/)¥šËºW—/ìY1$¾™¨ýøÌízq9–ÔÛ±³éÃÅmÚy‡nMm7_‡}˜Þ~Àü ÐùͧÀvĽÀ½§v£½Ÿæ¹ËŶ?j¨Ø½®Ÿcè¶O2R­ýÀ%@d[·ñC ¦›Ð×>ÐÜ”°»OçffÀm·}+È-¤«>Ö+ˆ„‹™¼é X~oXÞAUp OIcÒÿÌmmÚïjaõ^+yÍU´@‡ !u‚FòÏkqê¯Q+à Ë6i3 {ëšF‹ ïY˜ÿ/–D£, Yº“‰QGë_ñfƒ¶Ïí¬'Iȶb+·2&¶{Œ6i8 jÑaØ0J2™kúð jI²+¿&¯5ø+÷•¦¥¬Ê²s„MFì¿.<ÿ€euûKç‹ÿ#ùâIòBµ³/½lRõlÜRH-2'ª·}Þ!(`àŽÐÁƒlÌ.¹%òô1êîWÂt×òUŸ;PÃh¥o–Ö JD©Š£VVå¤jŸ£Õ¢Œ!„àw¬îôš|²Ÿ=¶ή«›m]i¬'Ó׿yJœUÏõ\_š²WÛ}w×éíZª¡Ô ò$Íæ~ú£ÍÚt/Ÿè²[Ú•YµÅªW*ûƒó(ZnÖ6}çFËüR.~t 0êyGéÒ²gwT‰\QØÃ&^‹ vËR«†²ÔŠGÂ_#~mé{ØCØäF>}²ù hAþ‘0†ÇÉ“hâO·³,*»q™LigD­’AËOð 7>[ó ´ìµïZ`à-8hÒ38[ÃëáÜáþ8§ÇT䔈g‚¾†“Wþaö,i#9l Öl& 9Jo0•®°°Í¬É…¤<„èh~á®0äüŽâ;^~ƒákZÙ¿ â3Ú¸—¹aÁv¸-Ä´æg×™wòÞ{;9’´^C-/)€×ÀªAŽ\ÀªáâùìpÈÌ1;/}3û÷Vg¼OÚ-¤¤\äõ7åJ³ãTÉäÈÕh¼8n|Ùнn=ûÓð¯òŽgæÕÇBÞàCÛ‡îÙmté•1 ü¦Ô-©¿À~K¯@潎>ü%[Ïø—®é´{i¼*T3nÙù%÷Ã/âÿºwþXÐß;ý:þ—dÞ÷rÙkû«WöcjNÖ¦ßÉÎEõv(¼z±\-ëo*"#„ÛïÞ¹¼ëzæ¼P¹Ïæ¿Õ"×ݾùç Ûmyÿû];DZÂÁت#íyáÙ6çÚN ô#¾T˜2º‘á^G:s‹'ùýç$­3h(C|ö›lºû±ÌP±6JœRŽE Oão7Û7ßÄ^L~eìWî‚%‘-tËêUšµnë×àû ”¡êÈm–héí¦ã¬Œ@ÊhÖjas-±<èÀ„²&d1[µº¯|,ʵòÃW‡?å®ñ.à_àÜÉm‘“c³EjÅ‚õnÈ­•@›x20mÝ}Á‹9û|\þçp`/Éâ~.UPÒ¿uþ’/5°²3ûÄÝEwoŠ·|ôé”y‘¿«çë¥l!“Õ:=÷ã•v÷g¿óÞâ½eÖxyCŠx¼kô,ù2VQ@/’͆í¡î 2Eɯ½z;Sv´ÊkôºÐûK»Ôæ¸ÊÞÜû9'ogKÃ{ðL¬oJd¹Ón®Ûß5Ñ^.£UKFAds•¼Ö@{éPékŒŽv“×LQº;ð®™7óš¦ç¼yï§Nûü/?ÊȾ¶Î¨ûCr1h¥¨>HWâN|“ô5†´½Óbýã6'qÓ¦´½ø`Äh«´qbé|0+´L]Åy+qçA†lC9¿È!‹c–1ñÀ—h•&Ýຌܭuˆ3Zr*®b¨Gpp"„»%7»¤Ô "Må|g1.éÜö¥Ñ3²ä‹4ÅK§žq‡"›wŠV»Ë¼‡Sßz6V~lË@½P²P¤ý9™cpÇŽq€´=)ïZ~f6p«õÿ§¥­ò²T²8¿00ûœ+Œª¤ –¥~8Çt.ížË¯Îç”þõÁ••ùàkÖO–óá|þp¯#ŠUŠVæËîËß!>RþLÓ¯æŠæœëø¹|±ö†¡ö2ð‘Æ}Õh¿¸>Êšî½x÷ù«þ Ãyõ;[óoݻۼ|&y9€ßàØz÷L\ü}çÇF®~håeæ½.¾9»à9¾6Žtzýö_í«ïìb¥ËxÚ•tŒ+S÷Š/¼âðF/~lŸÎû<ç«N\ÿÂÒ¯>Pò¡éÆŠýi¥HÉr¾Cåf-‰›4§ñŸoØr¬­“±Á²E"ÊIu‘îk-D ŽŠÍ5mZ6²0_ìy9ãí 4ÎmóÇ}?ޏ…35{E–ù-À1‘­®!K홀ø 4À”ã¡c”à³Ñ‘“&­[ä3å#^W­bË=wŽoî†ÖÙÌKêc§@Ð8Ù>æîÚ5&|‰ø7h%†Á"4¡u@³AËGöly?Ýî.¼"ã“;FžÏo•wð¢Fõ . \%ú~AÊ m(¢ç…ã7¹.ñ¯dÀ5nÿš½uÌ®gq&¼àëZõoßœhUïØ-”þ_­€öy‚gz•·z­’­Á/å¼§Uú :X™Ÿzhfß:x–¿±)Þ¼é×?_ð;Ÿß}÷A0†€ŒŽ~\@8|= 1˜5x5p†“p‘^þyÁÁ 0^Âähôh@Ëç-Nà²‰Ñæà†n½O'‡ÊÀUÚ.¿ñ3u´â‡NNaÀ¡KùG2&Å Únðt{–¨  BÆkéâ–¾5 âpDSˆ7·Í,­>Æ9л4Á·Èw3·™á½U¢ à+®ßr¯#Ïu®²º]®Š‚cÜ˾†ÔŠPù甼NÁ¢ õËúY^¸Ùê;ßDs6šN5ÛÏd.ï,zw"ÓÖËwг‡\!à°Nõ — Mʦ_ÊÑhh½Š§÷½×CGú}ã¥Wz>S°ÎŠ–Ε+²åLŸ!}züåX|åȯJ²Ð|Wÿ\ŠùÒg9ç•çý¦——w†à|ÀÏе&¹1lnøÆíŒv¯GH™n¶ú`b/9Jv JÿHv²ž§žÂ˜¯ì%M&3b÷×~nôæ)ð†Ñ¾ÙK•’ؤv¶qK2FÂ,ؾX>Ð #ÿŽR–bûˆNéV‘ð׎釲â1@vƒ=}[c¥xßñ­ÎÝ{Mî5ŠÅ´¬nûår‹Žá›ÏêóÆq«u]ú ¬2dqk\gt9p€,”þÙ±¾¼¹Ò4¯Ñ½ÑL·Xvš?01¯ü!Äbˆ,t=,úM[znûžs£g‘û­«•^õ©IÙãrØøÙ4Þ™x¹Ö~ ΂<‘¡ïM< 5ø|èƒHlõRÄSiàŸ(Ä88qÄ2¹"åhw$5éjëÄñÖ|Õ÷ÈF$ÃOÂHv¤.­ÙF±Rcjô½Ø ý›³± R?Çi‰ÓgqÓ&³ã‹CÕãÌ8™¹¿n »‚ï¹®HµB¦; o5çv/‡™ý‚¢<ׄeŽº‘ØÿB6K}€üÖõÁ-R®`6 7f €Äk¡K^Qëâæ¹uè~N¯?ÐßнË­a>­Ûº™,ꂚ$=œ6gHx‚¼ÆKßåÖç—Ð1éèä-ü>Ö5 :üs GÞL¡æu†7€"ý!‰åRúóoù2‹>IJݶÏA…¬D÷û™ûþFÇaàÑÍók× cn7Ëå CótãÚ2®Ë»Äû8ÆÇkÿؼîϘæï ²1¬ l‰müäÖtUúâÏ2Ó’îÛËà^ÝݵÊfŸŒ¤±"=eå>,̬pvAG7à`œ3w#R¨ ­ÜBtìtíŒxŒ!¦¶ý@E œ®?)ÞÈkíýôG˜ˆÕE·[IéD GúæáÁ¨ÎÃY¬³íNÕ›’]Þb·ŠÈ[yð1Ø&Ó/î,}³õÀËÐy展ÏÂÒ¦¥û'Ú`á{À€£+ :Eg>BPÒ“×ðŠÜG´:9ÈÉÝ#;c'»±8 9(z#c í¶Ùð[[úÝ`zN¡É­ ï9jrð[œÏ)çô)HÌ.æcÆ6œ sfkxcnmŽM ]ÞEϧgøÂÂyMñ%¥<_3qrt«]lÉßu8‡;xÝe0ã6:GÀ}/ÇÁÕ˳ÞðO-P Ë4|út‚H*Œ¿NÖîn¥m¦˜Š·P&}ù¸Ãax‰F3ÊÄ$Æ bLûê´Bô”©“Yƒ?}ìÓ¦”(ókïrPˆªB|q+GØO_lѸs©Â]®DÕÄž‹ÁXÉJC‹„Eº½4õÓÒåvHõZKΕöJ³N9•[¬½X¼¢$é¿y}1pp%£º«;{°@ñæüðΓ?RæÆUw¹”½zšƒ·y(Qkpdð‘ßÚxðÞ“t¿£?Î÷ö¾c@@]Ë÷G­W"#Ê9ïí!‡×ä¬J‡ú9½6ýmŸ¡q"{ƒºÓéö\À?†ß¤bPmq—g`Eg*c.uŽ Ãð~ñÛ6Í×d/È}‹õoá8øMŽø¶¸E‚ÔìÑž,ÎÒr’2èKá)&º»T0&e þÝšùŒ´- §Ó²·ù-¼«#àruø\ª×OVÙ{Ÿ¢gj‰÷Ä„d¤¿0T,ýSá {³?&CÒ†ã\+@14ÈÃmˆ!úòe¥!³pjwPADšÈ +ÃøËÎêy“0 BnuÚ.7þ½yMæ9væÇv#ð¤Ž(2 \>ÊIwë ‡ý…õ(Qóñº $9º à¾^ð2ÃÞÏ´”Þw E4wÅ$Ô™üY[¸ È…›G˜Ó`[¢Õ o`ÿgVÓª”MdŸwà¹Îq–´ÈÉEè‡yK¦>ù÷ªd·ÃqÜÁ0l‹¶èá:€û1w^sF̧NŽVKñ‰ÚíÖÅýÉë ‰ØìºgÖ3-0DŒÂSáZãÿâì¼Å/'Q)o±Î\àž@êð"¬¶ðª3P ÿþ2ÜŠõç_ Jîè)š¤CöÖÈ~¤ïÔàêp ¿7xZ|ôÜ6‚ Tä( Ë…»‰‘^@£@^gȨ#Äöp6kÓ»ž‘FŒ!»¬­ä³sšÞ?ªd^uA¾IEŒZêLìT£á£5ÉgK„v ÌX2ó-rëÝK]èŽC°EßÌê©ZÚ[ÚNá†"Æ7дhÑZ)^BK‹%)nC7”ÞØÖ¶îÇÞš©Ô¡JäÙQ:#†Š°™50¸O¨ó0î­ºãpËðCÍãžÇp€ø™Œ?²™v9jÙã©Aš!ÃADiÍ[dá…Äkq1¦nF0ˆÆ#iÞ¡Ö¡!9ûe‡*±áý ¶5íïh)Á+PöÉߣ="góRRÍúÔ à'YA?Pz&¿¿hA† O«¿BfÌ´@†ý}&\µ 2”ÐÎ\æH‘nëIHž=·Eƒ\o"E×Ô±]b‹B÷öáªi¼&È×ócvmõlJrg?žC`w¶0z´ Ã_µ?ÄÆ=*ÒÚ¯½5æã¥™qFµòçXP´F‰—‘¹!%6;ã§R8`š:;÷vUèˆ)Y×!+§©eŠR ìÀìs 6ù ÜóÅf¼ö‹©Ðšú—W¶)MÎEedQ™ŸöI~!¿žŒ:Ã!iéÁ`!@kb¦_Y,ºD®«¶à­k,8IìѼž@.gÜéщi A®«Í†û?ÅËö–z íi‘àEÀf|K€â ÎÈW|FxÚ¶LººëýºZÓW^–QhE„x"V~3éÀ ‹ü¸=õ`¥È#VÓ‘ñM˜ëPNC`š-ÿ`cÝ0f ,…?ÕÇ4ŦZáu*ü |³<`“QѪvãì ¢TiæÎ—ÓÒ¶3>áðuÂýK¿ì¯¶X h2ôAã&1c/„WMµ¦Kz&“,ëÖzv9ÊG’1' cÈÅy‘5F;¹¢L€QÜuýí]‘8Mñ†Í6ÄnxŒØ—’© ÒYaÌ =«™?À7KO “d£²ç:û¼7µalIF$ßnt¬u—G–y Mø#|Ú>6錛ßMžFX¾ÅX[FÞ»Qo"/rø¯IDAT'&ß7Rϯ–Ã’xàÏ,„\›AX^9„BÙrG\/Á³ØÁÊn©.Güìb³NžâHœ˜=_iU+ÇûÙãç iÙO6à1 —lÂ¥ôÝ2ᖽܑ«q Ä>Fo¢ú W'ÕÙ=•dÕrp¼¬óˆH­èŽÂ(Èg ~wÐ{äµFv±ï&Þ‡Sø½F|Ä€½5a+Öч›UÖí¨]šöÜ_åK/ç¹ì–4Q,(Ù¹GçÖQÉ5ëÛµÔC›¯~§SÔ&êzwûc)"è×Ü—þ¼©ÉOW% 8.Šu¸49"”÷¬¢åW1-kHÞÆ±’Ö’X ‡Ø[šðòK®µè•Ê™äos4ámÌÕ´Ói ‘”1œÁ?-5g|̆¸Èiʼ!»—§È Ê{­-µ*úÇÝ:™ðóß‘$›& 5(&xymiˆöN6ô,îà\×OSô‹ª ˜J:RL”sj-uÔ™‹tŠåæ°ÄÌD‹bÊ 7ÌÆ¶æá xT|¢?,¥LF¯”ôzgjÓ>ro‡ñHŒB[êFO9/ÚÝËSL±‘¿7=Ú,StÉWz–šÒ$_&»Âß 7X¢›³3|>ZJ½´€ŒR¥Û¾B¬òsÎ]Î^¤ÈIYZTèŹ*Cv¹ÍR‚§ÄìF0’YÚã½`ÁùˆUœÅ›m‘GæŠÒKÕäygìá¹Ø”DÚdhƒâŽrƒ ÅéXC9-bÙá©íTFÈîb+/ÓÍA¼Zlaˆm1ÓÆ8HÁµø|oÃÜEVXÙlNV5êoÅÖZØD oæÆ›lÖÅe…yÄŠgYˆ{E·ŸoH7º™¼q˜â`6üj{|cÆõ·H,*;êI±¨Þ%|©lä„èªKk1Ùû±m†›–˜C}!,ÒÜœX¯à%Kÿ.m/©Èu}AF3Ôñ3àçi­ÖÐB«M¯Ï0R6=”á("9ôó† #ö"H‰‘3âpƒ-ž”œ…ù¾nð0#´#tœ0¹UKyë'ä‘näµN*#»ü†"É­âhË÷ x¼Ý6¹î†fÈL&×W›ìw»³ú¸r]›‡ ªIP‚Z ë•z“@ ·[ }Ÿ¤M)qÄž–˜¬±#eÂm-©´(%b's¾¯\ø‹œ­l-%#§EªÒr‹ý[Úhc,VeÐ$³}Å­³ðˆïM7˜r#"tí–>©W“}Ÿ,8u—T56Õùb•¡ÜJó]eSššM6Þ6”\ä¶Kº­ûr›à»:Ô×u/ºyvõ«%Cn.p3ºÑÕ Tw§n®-A±:a%ô)íMÚg¡¾lhÀ)ý¥píBG.N*ŸW§J)¬Ú>á§³ÙÒîƒÔIᆟo8…ßã9Äš™ºyå&b['®ì6‡khouƒMQ™ì¦N¬=Äu<õ1,ÝvÔ/º¾ÙŠÌÏšožÚPž]ûƒù;-’ÆŒ klqÿ{ÊçÕ)sƒË¯Ñiƒak»¼ù*ýóã ù¹ƒ\„WOªÙê%<ˆ›eʶ›,•bAZ··Må`º¨2D«÷I˜ÐT5QN8•™§ÚEÉɲP/)·6+ˆû„¯6&º¿Œîݶ©|VJ])i>­0U¸ÐüÄxÃXå?ƒ?Ã?-YrŸpS Þ…ú£ll7›[š±V…Ç+‘Ê¢'ª¼™0E‘lqÔµ‹¥‚â±&"qÿ\Ä_®Ó^áF~£·<ÿ2=[ÍÞßÈÑ|Âõ”žEˆt~fÓ·¿]¸œÄôÜ*ÉîDg—É ‘væ·\ô•1Q³·QöÓqÅM•>²º–l'ØÐ‰½"¹™_ÚüaMpÛŠ¨Ü‡’ÌU/W$kYÍŒ,T  .¹*/< Æ ¶g@ÌëÓ ‚tNOE-è#ýľˆ°;ÿ/È„†ôWÙs6~Œébçãù›/ºˆîv·\–cCÆe¬€{Fe‚$@F¢ÍfüíifF .}±ÓiZþJ‹i@y°6¼yªÄ­6¹÷S¿‡Õ|D$ë‘é 3ñÇÏÂð³­xu·Æ-!üI ,ÈD†]j«,*uš'‘Á©£wÑ׬xgcõ̯#mLËÆs#÷fCÚ9MÑl2‡ÛÏö’ùN‚8ŠMnÞO-KàöoOMBå½ÚLq¿!õX±÷‚Fä÷’Ú‹lJ¾É«¶õ7UŠs–Wì=öýƒÛ—vëðÿxÃýƒ-ÒŠñ)°z-ùå¥52cX²¾ÙBÊþš–¥[ÂêÚ€Xi¨Ùd!r{ÓÃf1K^ÔÕ¹Óa/5·öá þ gëú—9àB©ÇJ,ð’Òù €IfÇ'b"Œ–¬Ø{›ôUݽä·Ã¸¦O€7<à"í¶ÌªŸür}ý¹ ‹Ì1w½Õä¸CP#I°ãæn›Þžô°D—„†Þ†]ˆtâmœxûHª”yÐß jpmÁ¨·L[Ë{>ûdC>#Þs‘RÞ…Ú†k³f´ëL´k.ïlø»»­U¹vã’D +»Ó|x‘ÆÍ£úºïöu3£¢« CUÎ(¸›ÍXøòéðùèyÙù§î‡O¤˜Yö‰û¥?Ü7¹ñNÝùÝŒ6†‰V~r+%·cùÍWßÞpË@ÆÈ×é®ÔêS—C-svx§ðûèØ›Æ R_èðå š…TGfF3Uõq-‚ÝÏ·VÂ3ä k÷Sú àðA^+赘KúúU/O †–;n¥_ôxtÇ dÀ®ö×iõ1æÌ|ß?vêUÞ`¶wâpýTû¾µâuPy@„·ë*¥P—&uÁyE}ÿy ß9J3b)PbQéþüe°UçÞ„Dyaéý®ÉÜny¨n‰n•b¾nÕßà¥vâT¼A¤½ m)ÖåÎÁÆ2:”åŽÑ-¸—æ¶½ïy\ÿž^*»+`äf?lêî6Uz%`7'ˆs»%Ë€ÿ(oµ…4ð©ñ†]ÐñÝÆ™64(…6fñ‘Nt(ËC«b{Û˜§b}PV ¥fù&2¸½¿5z˜°+Ê:)-´Â¾hæcä ;¢5r§+ëksËi&ïºþð8]t(È8ÆEøŽ’žŠmv×êk r7掤Îi‘¿O’Á<£Ü·'?ÐI2bÿ±ˆÛ›ãjMñä}Xð à/O£ØåîJ±^Þ®ïùƒÒ†ã ]V±û7Ý켈‡Ú™ŸÍü„{ûìq,·ÚðÀôO‚¹Ù1ÞÞº]“;@ÉÌþK=þrâA‹ÌíAŽS)òý Çʆ7Æ.Éߊ6»È>AÆólyC:k'¦À˜· 9$åwF”°”õï"FõMM¸ÓZöëJhaËMÊo–ö¶(©ôÒYSD=É#âÿXîrû™a¹ÿãöÔ±XÄÅ÷}ž7”MIAAAAAñÅ’bÑß išš…ç†gsTC‘Q@‹úTŸêS}ªÏçð©lJ k xƒ‚‚‚‚‚â Š7((((((Þ     °-"ã”|mú©\øêS}ªOõùiúJoPPPPPP6%ÅoPPPPPP¼AAAAAAñ…ý"2†U±ªOõ©>Õç³ bUzƒ‚‚‚‚‚²))(((((Þ      xƒ‚‚‚‚‚â Š7(((((ìÑ1¬£€&_Í‘‚‚‚Â3€¿Š7ø¾b Ÿ4MSGûIÌÆþÇõDeSRPPPPP¼AAá ”ÒðDfcÿc‹z¢â Š7((((((Þ      xƒ‚‚‚‚‚â iCWS  ð©BÓ´Ùÿ}¶ÑJË!ü“™y s²0¼®Zè‹_. (u½sÿ(«Ñh4èÎ_t0Š…ÊÌ/¿Ì—_~_æËI’<ü“ ƒášçÉO}°{†á­ïx·ÑˆÁ`0xø'ŸüÔ‡Äý½ý­ïx÷ËgçŒF ƒÁðÂ÷Ÿ=ñôvﺶшÁ`0zÛ`0 ÛÏ|£Þm^D<ÆIdsÅ+›v Ûàw;Ë¿=9õ…ër"—Ë…aø½9]ÉÓSS€ã¦®TÚµmB,ÿ¶tË“_{×[ßbYÖG>ú±ãÓ©üЊ”A·}}ªù û>°"¹Á`0\Ó¶¡5Çw\T’;î¸ãé©)ÇK_©´kÛqþà®·•¿åO>ôg¯yõ«n¿íè÷>ó¹(³µ»ü7òì·£Œj¦Ž39Ó ƒa !„¸ø³XÆÎ§]Ï6ÈHö¿øÜ™'žx²T¼å†Ã_ûNuÿ¯‡Åô“#¾ül½þ¡›ïæOŸ.ð¥8~ä¾7^PŽCƒ¹ŸzÓ«n92¤lkv¾ýüËõÿü‘/Î̵úåò»ïùGƒù ð¿þÞÿûâéÙ¥„÷ÞväG^s瑃EKÊ—ÎÎ}î«Ï|æËßJ€ÿë½o+ ¤~ÿÃá›ÇwQo@­¹úÜÙ—rƒ×üÍõŠoã+o¹®'ÉSϾøÁW—Ta0®&ãÀªÑv“øi矽e½Ÿÿòÿý7›I{ÞÏÖür¿a½ƒƒwŽ=ÿÄG\º@7fR©Âþ\·6uâô¡»Òº`MßûއJ…ÌK§gj/.ä2wßRNÚ³Q,-K·^¿¿g€»¯Ï8ù²­\à¡ÊíïxäUÀñ'ÛîÈÍGÞñ¦Ê¡}™Ç>þä’ï2sê…v³áeò»Ç8ôH YËÜfRÎ/ÿÌ#iOòó_$¿öþ¡|êWÿà#`™GÉ`¸ºLÃc;\L\è»ß¬}Å«/˜öwþÙ[~å?~¤÷ù·a|½´›)õ°lgÿ]?|úë«,¤gU–†‚¨ºþíe.(ú¾\ºTÈtýà§ßûo!må ¤f³™*¶mxÍÝ7Ï>÷ÂÍ7þ¡c÷üÅg¾œÝw(ã9oûáû€þÕ§?ðWŸ¶µûê{nß/þãzÕÿÜ“§ÛçDMâø¿üú»€Çþ¶úæ×Þåjõ7O~ïų?7þê}¹ô—Ÿ~î?ýÍã8þùÛ^wóuCÙ”ã‡ÑñÚé?ùä“/œšn92ôso~u©™|öŹ…öëï?úwO<óÁ*dßþðý·ß°_ÙÖwŸ?ý'Ÿx¢vjvEo½~ègßüêÁübòå>ÚO>üÀ±Ñ³)·Ý ^8=û{ñ¹£Gö§=ýüÉÓÿÇüW/“»çŽ[Ž*Ý4è? Ìb¾Á`bJkÇ…~âŸþòêÿåþÎòÏšiõýý­ÿñÍ=“°ôy)Ãi/"¦Ô#5PLßð@÷Ä­n”XnJú§åòþ#›©êB«ÛñW«ßü—?ûÝ“ïž8õÌs/¥Ü‚eY ”m=pÇõÀû?ôÑ_ÿ?½°póá}/·“Û®? •$É_~òñL¡”É—¾óRûäéÙƒ¥ü]7úÄ“ÇW¤o}ðÎéNÝ{ûoè¾…V÷;ß©õÆî¾©úÕ§þáD! ™ÇŸœ<]Ÿ}Åm7Þ{Ç-¿øcï}ôÃÙ÷¼ýõÏ™|æ{͹ù×=pÐlœ™=óâÁÃ×ÿÊÏ<\H=þ•§ÏÖgÞòÃÇ~é?ôKÿ燻ѹ²=Gý‹ÿáõiÏyê;Ïu𠝻ïÜö€»n>ôȱ‘ï¿xúßxÖ§oh@·|ßïv»øgæÏΖ®ÛLe¿ñìÉÏþë?8˜sî¸åÈ÷Æíß÷È7þáGŸ°µwì®/}mJHë«ßyáÁûnûWÞýGþì|» ¸ŽN§=aIiYQȦÆ|3Ž"’•¥?ñbnð`'L€ï>Wó²ùP*@)Ûï¶-[üô¼òÞ[<í9KI´%Ò® ÔNžFXŃ׿Ü8*æRÀ åýõþ__úòÀ`~þ«Ï è…€rÙðü‹§rß¡NÖ[÷ô9y¼öÕ©ïÝ{û w½8UŸûwøøK3íßzìS#R‡† 'O=v߯¹ïÎÙ¹ù$Žc˼#b0\U~Ãv®7¬—Û²¸ÐºiãçY‰úßþèk–»Žß°ŽQêÌÏ̯¶"{ø¾7´çÎÖÿá3’˜}æq'û'•ݸªÊ¶î>ø5¢™æÂçŸ~q_éÛ?ù¦×dÒîÌ©®¿åö»o9 <òºW>òºWö~ŸN¹÷=üíï½è¡Vö¿á5ŸùúóÒ‘£7:°/ |eòËZcå6Š"ÛqzJ £H9®ì¯“'IüšÑ_ûŠ›^ýýLJÿÂ;Þ |íég…¥ë6Á`¸†bJrí˜Òz¹SZ+í¿ù'/y ½%ŠßøùGþõúÔêr/"¦‡AsúKqè)'¥J©èèkÛÓ_p­”Z8^uîzÃÆõ×ÊþŸþÑk›WÕNÍ& ·”o~ëxGÜzmÉV»óõ©Å}¨7ÞøÀà¿æÞßýÓ¿û‹¿ûêO=òªwýÄï}ÕËòæò ðéÏå[ÇOì;tãÚ¡y!—­èžg{BFQ¤•~ÝrQæoÿ|íͯ»ïæëY–<ñâ©îËõÉÏ{™œr<Ö[·k~ä‹ßœ¾µ\xàŽáþ®·~ìóßìt×Q@»ëÿ‡ý·ŸùÑn:rð+O}÷3_øÆÃc÷Dq tüð·ûÔÝzÿ]·<èº3óÍoþÙgŸjÀ²UO]ínøþëûéGxhì¾§?ÿ…o<óÚ{oë•8;ß–‚7TîH¹z¾ÕùÄã_ùëOOèLáÔÌÜ·]—öܳ³óúèg?ðáOº©åxÒ²…‰) W‘qØäIBOù³wT~p¹»±:mo¾¿nA¦]2 ½R~í?æ×ö k—»"ãÞý ß«Zñ‡ÖËÏ^ï6¾ybþÐ?°¼°$ŽÃÚ÷Ýv$Š¢ÆÜÜ3tzè† jÇÑËß& ‚0ì&q"-ËËä3Å’VîË'žñ;­tn_¶8Ô»~®Ûnξü¼@ì°Ð8ÓmÎÝnBbÛÚ(¤Š–­µã~êÉ8Žò¥CÙ}ŸÿöWÒuGÓùÚw¾ÝüPy`ß³/L7çê©bñÀ‘( Ξ|Îï´¤´R…æìÙ$‰Ë7íÛ7ôbí{í¹z¿û«¿p÷m7¾ÿO?úñ/üCñÀ[éÙSµvs>è´â8¶,ÛvÜÜà!/íÅ”z«³'¿ßžŸ ÃÀqSBˆNk¡WbèwΜ|. ü$Ž¥´œTf`ðv¼Ó/ï¶’(¶lËMç³…’¥´v<ó4 W 3/ÝqÇyG”>õ¥¿[ïÇw¾ú‡íÄÓßÊ ¸i—~¶æ—½´K9U;wà SãÏŸ½>ÕüΉúþ‘×!Ïó5„eÅ¥;[þìm7ß8??Ÿ|ïÄt³á¬ÿš”v~¨Ç¡@aõæó¶rlí ”Ò’–m+G9. ””–vS¸©ËVÝÔ€RZ²ç híZÚrCeízBH„È•Ýô@¯¹¡Ã¶¥„eÙâo `+„›Êæ#è ënzÀVÄO=r¿à¾çžéæëÜ}Û ­ößñk¶JÒÊ•k¯‘¤°„ ‰ÕËüœgåK‡u*c[JH™$I6 -[ÚËJ‡¥´E_xËV¶Ö¹}ã8²,»—‰ÒÚÖÆ0 W™Û°r&~×±7l&ÕšëÉÛžvÅ—¿ûvÞΜx¦5ã¹ßVÎê|ÝôÀSg[µ3Ou: ð烖›½o}‘Ie×¶Åý+¾QŽ›/Zú_í¦ôª“c{†/}.8÷²Enß9ëg+½(¤BX¶Êä7nå¸9Ç]óOÙUÒk•n0®Í˜Òj“rÅÒ®SúþÉú5Ûˆ§N<Óœ›£PJi;Þ@qH9ž›ÉK³`0¶„ßiµ+Â;óôÓßò29í¦®TÚ¥oΞ|î\LéZ^ØwÐMç¤m÷Vê¥e»^FJ³kÈ`0l‘ÞuO?ý­Í'ñ2¹^ª+•v~÷íªÇËæ½lÞôfƒÁ°æ!•qR™½•v ÛÐóZs3¦E ƒáÚ$5PXå7@knæƒï{§ÑŽÁ`0\›¼ó}\2&ªn0 }ôÑåÿk¯þÅìì¬Q“Á`0\;<öØc+¾1~ƒÁ`00¶Á`0 Æ6 ƒÁ؃Á`0Û`0 c ƒÁ`lƒÁ`0Œm0 ÃƾØ…BaÍïgffzš™Ù¶C™V—µ"ó¥—})b¬N»\†m¬Ú¥×ýʲžxÛÛÖìlW\+¤ºXy¶ý1Ù|G½LEoc§½Ü®(bƒqcM}^bÓ_å¶a畲™².·wgÓï:ÛpASY§ÛëÍî—Ú¯÷ÍÊíå°”v¿d½Éòvy0Ôzue——¸üûŸw²iÖTÝöN÷.X¯ÍhãrÏÜ7Öö¶´Å o¹èmo²M*g½Þ²Ã^PŸ×ò²*wuoûè³Þ¼ãr÷›ËQµ‹zÆÖ“dùü}Åç—…•ÝÞ8Àfêµ±6¶<)îM V—xQÚÞ™Çäb‹¾]bcå¬YâÆ^ŠÆ664Ökzã7¬=Bí€vÖ›þ¬×«®ˆ½ÚÁÜ–©ÍšzÞ==ò‚ÓÞmubЗhvx‚²cA¡ËÔ+Ö||v8î´æÓzéMol攲]÷7Àš±šËTµ-Ô} zšæª½nÐO6®øU½Kæ7Ûø¸­7©ßm5½ÜMÚ†]8¦_¾ñî¬Úz‘Ù«¬ivÛm¹<œðn¦®ÖÁeµ3½«<¿5—·±é¯äÈWöAÛLãj_o÷?ôö·¾ãÝÏŸj,Ýmî}3 ÆA¼¦èÝûöµÙbj pºvüÄÓO˜33 Õ±×f¬f¯`lƒÁ`¸\SûA÷"¶QÁ`¸‚æÁ`üƒÁ`0Û`0 c ƒÁ`lƒÁ`0Œm0 ƒ± ƒÁ`0¶Á`0 c ƒÁ`lƒÁ`0Œm0 ƒ± ƒÁ`0¶Á`0 Æ6 ƒÁ؃Á`0Û`0 c ƒÁpÙ†-ßç·µ„æú@ƒÁp-³b ÜxHÜ–SnMÊ.7333æŠ(ƒÁ`Ø1¶x'èÒ]¯ËÄÌÌÌŠ«_—ƒûš¿\‘íŠoÖû«Á`0\Ë.ŇÙ-\Ê-/EŽÿ[(–ßKÒ¬Ó/˜ÿz©¶–§Á`0\ņaã!qÅÈ|yý† œ‰MNê{¦¬'ôj›Öû~½6þ«Á`0\õ.–GæËk.Ê ØB5–ÖRÖ´7ëýÕ`0®bÖ ×sy"(SZî¿\0°³ÂÙÙÀ làs¬™ùÆ5 †kÍf,“¯€mاiŸÀx ƒÁ°ñà¹æ4}Ù†åñŸõ<ŒÕC¼‰) ÆÙõ†Ä­íS²· Çæ¿YïóÆ™l>OƒÁ`¸vlÀ&‡ÄÍ|s%ý†M:A¦Õ ƒa·q%mƒ‰  Ãîľ‚e«`0 »sŒ5ç° ƒÁ؃Á`0Û`0 c ƒÁ`lƒÁ`0Œm0 ƒ± ƒÁ`ØiÖx¿á±Ç3z1 ã7œãÑG5J1 cŒa0 Ãy¬Œ)½ë]ï2J1 †k|>ÿÎ÷}p]ÛÐûÅΈ2;;»“Åí’¢÷„Ê·KŠÞò\Y ——µ{¼Ø|>¿Tñ]ÕF»°óìþþ¼«äÜ b,—a ³‡Õ`0 Û`0 c ƒÁ`lƒÁ`0.‘‹¾÷mÅ Ï333WêjÏ¥r— pY…¹²—˜.i~Þ—·¦f̯{¨wí•&»6;Õæk½ú±¯‚†Ù1y®`Å÷â#a¬‚ÁtªkÂoXš· …õÜ…å^Å¥·âš¹­.w…±$áv Ä8(Ëe[Ï}¹ôa}=ͯ®øòB—¿âóåh¬Õª[OÎK,kµçºqW¹Xµ\¦{QÊßö¦Ù¶±7Ó‡/Ø….«„ôç5?ïÀõÞдf)—®Š‹XoXÊ}½b–„X­²KÑÂòÜÖìI›—pÛ[h[jº5Í/7k Ó—‰kjr«°d’×Ìmã¿^”6–ÄÞLW¹(µ\¾»yåo{Ól¯ ÛØÛ7îÃ?ìK¸3æÖt»]Ï×fJ¹UìÕµèË:ú¯Ù•jgbA3ËØý²½BîÚ ÛŠ'vu{­÷×k£K/zåßLV[Ö6êö¢ê§,Wdл”¢íËôlìÎÜvsM/¥Õ·,ÉnVï•\Ê8²»uAÍïÚ¦Ùö‘÷êè[î »v²wù{§WlÚ]26­úÜ‹ÃëU`Ò–b ,zm¦É®ÁE׫¬Ê›é »Yiòò=½Û—\Ó­Û ÃÇrÙVD±÷Êæ¢íj¬ÑùnŽ&m,Ûô¼½ÏÑåÈpzãnpÐ7óP/I¾3ÃfšõRT'/‡·E/kæ¶¼.ØÛR5óÙIŸñ¢µyïárTa'Ía¡Ï»Êމ´y16n²m—| úÙaímáaß%Ïàì{›)åRI{ Ò¬ø¼æ——Ï]Z]îšÝúr°™š^&mlœíÖþz9ÄÛ²q¯ØøËË­Š­É¶±œ;)ØŽIµÉÌ·««ïØÓ·#áÅ ³eIÌ™ƒao— ;‰± ƒa7²«"·× ¶QÁ`ØÍæÁpETgüƒÁ`0Û`0 † ±vLi‡¯q¿‚·Æï¶ ëw›Ÿ_ÒónVø^é{QÎ%LLÉ`0 Û`0 c ƒÁ`lƒÁ`0.‘½qžÒÛZq‚ãòSò÷Äe;¬sc⊫Õwy]6®È¥´¯i‘{”®”{BŸ{B«[ÓçÕyÖÞÞ=¸q“÷Ù­¾fÏUd ¿4-²3-²{ÞݬϽշ O{¯ô–ݵ±\ñûÕ“»-ô¶ ¼b¬y×òÒW|^QÐï¾Äޏ{*²ºötEöz‹ì69w¿>÷JÞ2rÇÆ÷-wÊׇ-õëõõ Þ·õÍôYm—‹±žlK—Í®þ|±=éµß=¹DvaEöh‹ìZ9>·EÎ-f-z…ª.h÷PÌíÒû'xx‰’ìé•°kVŸ{¢oyİ7ŸûÖ&ÝËÓ^÷7]Aáwà.î¬ÈvÅ‘wC‹lKÇÞ+ÏÅî7 ;#çUзÁ6\Šô{kƒÐCLEÖ“äb¶]R‘KïÛ{k•Øèó*ëÀ—d®¾Þ¹µV¼R¶mûÐî©È%îa5-²çLàU&çžîÀ»È6\º{¸|÷Õò•í‹ÊyE>[zÁ»Õb¬ùå¶kòÒ‹Ø ÙÞ1úŠWä·äï•Ù19>·KÎ-ç°gü†åUº`õ6øñÖ:Áš©6ùåzÂl ÉÆ2_zˆo—TäRj´{*r9Ââ;V‘](çÞÒçžèÀ[S©Ù§d0 c ƒÁ`lƒÁ`0Œm0 ƒ± ƒÁ`ØnÖÞ§t)7ž_úmé»á¾õÝ绩Èe÷_+¿·nä¼Lˆûzû[ßñîçO5Zs3÷æë»ù¢sƒÁ`0\¾YË;ß÷ÁÔ@átíø‰§Ÿ°÷è¤Æ`0 —•¶áÑG5J1 †k’⺶á=ïyQÁ`0lÌL]BÚÃP >ÌÀ +sƒâ›PMÝgb>~ñƒôùµA‚]˜…Ée?N’äïûຶÁ`0 0 yp`pÕðºI¦`||è®af&F  Pµ!€à"­Ñ’à÷ ’P웊1{X ƒá"ÈC P„‹ZžYöyê0u˜]Ç~t©úÐ^×~TÖË|¹KCbp@÷ÿ9«R-Çø ƒÁ°îh>µê›¥áp¨ŒPÊP»Wcrü9ß~°,þ³Œ1(‚‚q¨2±"óè éÃ4á‹<~jëÙc ƒ‹Í—¦óýpИO±‹š'WGMP‚L¯ëj,äô¬ÂÆ1¢I ÌH­ÿ³s槸<¿™/I® éû=ÃÀ0³9P8%º f§7*ÝØƒÁp5Ïô7õ›U³þüúqùþt¾Ø¥8‹&çSÂóŠ _Ê W#C¼ñrE4ä@1Uê©  Ój=…FPMµïÇpŠGÕ ³"f5Äd lF kÉØƒÁpUÍô¯ƒ“댹˽&€áÅ!xù¬UàèZ r»õL=Ã@C0²låyn`LõW’»¹úTi¢7è÷ˆ‘4S)Ðýµ‚x`ƒÅHL.$Lx92TšT†“ð8ŒP™BEƒí0ߥ"©>å±T[öø`XŸíLL¶ abJƒa/Ä‚!³lwÍòÝ8Ǩ‘‰sè¥í ʽÿŽôgÍù2ÅÚbÆ‚, j8¥~ð=„€Ñ7A$t µ“YN²P˜È{e›sÇ IDATEûÕ¤CÜÆ:ª¡Á ‚¨?sïQ„8mŠº3êǃ ]FÈ—ÙÅžÓÐéËê€d*äÖV„^@”«Ôhö÷ÑNQa| &±@ŒÂ~Sok­(C­Û±ïGÐÝŒµ5¶Á`0\Q_aiÕ7éÚý(q„⺀¯áÇ`>·N4©Øô{/yu  6<<ŒÊá(Ü¢A2Mø`õâE ¦zC B2ýÁ1„áÕ‹Æ58Ê8MUÇømh’®¡z&§ÿ¶Zí§•àR¨ÝEŸ¶˜pjÑ1Ê'ÑÇð~ú:,,&Cb$!L°Á5€&<p¨RœÅ™DN¡G(@šŠ‹ŠÑaß9rüþ¾Û 1ï¾ †Ë2îoì+<‡áaÈõ}ô-„_®tQS躀.¢ T ëäô“w`ÎÂIp åØW “‡~Ž&œ†YhAÈiø:¼_gdzÑçXÓZýŽ[B¦Bº>I‡¸…ha7ˆú~I¯ !tAÃÁerB5"ˆñ›e?V>DUFº8ôK¤^À9ÍÈ ðÇ&¡ ÝÅSQ—¨‹ˆ,þ+@®ƒ!Â"óy"ˆFá:”CEQ¥$¡ù~ø¾tÃêÔ¨ñ Ã:¬ófÀL-Û³|‡¨X¶ê+ ®È¡ªˆ«²4~¬áëi|M ©6áØÒVý>+Ο¨÷£@C¦LF‡/X€®b®Ìl »l_túYu€þJp´æV¥”µÙâµ-t•dñ")“Ôˆ!œ2ã5žƒîâ2p]@\Ss¥€VŸ˜:Ãà$¬idÊÜPãVÐðc/1ÓæsûGkí#ÏO"¨$TuyC€O5`Ü¡5‚Îã{6UÀ¯ÕÛ%:¡ª·‚®¨ÏöÜ¢{ú«ßëìV2¶Á`0lÅ#e¦j+7†¦Á[ñ*Ö0NŽAÅl‰É#Óçíí Ñɘ5\Ô7(+3žˆzÜ©~ $Ô°aa­lÅûý5†d2`á ÁtÀT1(A¦Œ¬! y~–²’ýè–^s«Rƒ<¤pìD=«0 9¤B–È ¶…£Ðen:ÅÌ4>h&h*ùFuò '`°¤÷W$è)pz•šîëÑbDÑ È5Æ|Š1 Æmê0¡ ‚êÝ^àˆ MÝ^\ö˜h4˜¦ªêTä!ïüý»Æ6 † P†Úʽ¤£p ‚&Î1 ,U2ªž& vo¸Œ]#ê²ÁË¡ øý}¢½éyÒ_èm:ª\t†ŠnF‹´¯Áá#Ç3åJªV…Åÿy%FLM÷Å+3Y;ÿýa˜f0GgÒH‹8 Œ9Œ›Cõv÷Ÿ¢;}^'—Äì¾Í[ud#Ó €.£û‹ÏaïU„²€°+BTeßÂN£-¬RDN/Æ\ª¥i<ðÊè>İ$à€Õßh86ÉaªÌ`E(*´(ûª¶ø›ÞÉK/31 SåÊ`­Ú ‹ÉÞ^§i Êhßkë™åti%4~ƒÁ`¦ü3ÌH[‘/á4œ^Œ Âí0Ð_Âõs$…1m‹¡ œñhºî2á#rˆ4a‰VzÑTh…¶AãÀ1ÅB™Lm1˜ãÃ,ä‡ñrVÊÓ–Ò¨LRAVe¹Þ:sŽ @Éæá ·B8Ì`Ž8ËÄQ™*UhT¬È1[‚4Ž¢!l<5€w±Y"—8¡“"få)£ç›„p¹Ÿ´ôº Âþ6‹ÿZÐ(c©±´WÔBa'™z"&Ú–ÚC¦Ý»¿°áÖ*Šª!¸A>¤ûo5tÁïEÒÊPc– (gXrÚSØ%5*þtõ œ†‰Þ;nq5.Ó9EvzqÓTnƒ™I®»‡fxþ–¯¥ý»Æ6 ×+×Ö 1–Éçp dlt¸8µïq ×›#—é*»(²Å0Ô-åSAœBÀ.+’<¡G{š“¯á— ĆBûk‹»’X€œ!tªš²Ç-í'²å'I ìÒ©ñJ0>W®§Õ„k/¾†ì*Â2"Ç@N› ‹“öâÙs”'PL’cŽ"%ѤivM‡ µXúÄÐJÛÐ[ IA €Ç—)0wB»ÌuµÅqÜ» 5Í|¦(¬¢åj)}+!QtH¤EÇ%­±ÊX5ÔâbõXbe1®©'L´¡3}{à,¢ºìåí°Q}|züXΧ€²}? bªí%ÃpäÁf"d·ö›Ã)0bM…çy† r+àØhé‡ÈUÃlo_é0~ŽD…¥¢ïªØÊÚ’Dû±å×ãÀ•ÕHá*M¤8™ÀÍ ™„|ŽC6Nˆn,Üçúï"tsØ)2.–N¨ÖLÅ:]µJ‚-Ð@„JG•ÔLÕUXQ«F÷( ¤eE¢dœz¸-O„ZMÝSAWGá¦6™mZ,@]1›b2‚·B*B'd2t4õe꺵ÿút `3’ÃI“.‘Ρ%Ú†no›Ó ÁsQµ™Œ[Âo'8¡¯d £*>/)^ˆÀÇ ¡LPp¨èaç´Èjÿ(‘P¢óϹt#K¡$ňM^S­ð™ `6¬@Õ éÌöÌa AZ-š±¸ábìKØè°’š©ÂÃÓœ\߉4¶Á`ØNÀ&Ï:/2ÌhŽÛ%¬íiNÃä²]žv_ѵ™ÒE(Ž(=UöGÀ†ƒib›ŒF@Ü%hã7‘ 2‡,´a&GX íý JDhËOä<28œªÛ ¢ç[XÌ ò£&sŒy*â(Ü%QÓøàAêebEÞF $ˆQ Ù¨ê Õˆqð]È ûv.Pªª¬L’@4J"BDdë ›nY´dªÁB.,UgÛäšx]° %݈3S€`¬t€–$ ÂVjƒ°ç…áüu‘£–@E¨K´ÐiÚ¸tRÄ’–Ã鉠>’ UŽÀöëdH¡Ç§Û ÎÓ¬@bª27® ~R Ô~Íl5nãÎ.ñ¦Lô–ýkÄ%BpCD5MHõqÅHÀTƒú;k8h1h“ ÑÅs;Ðtvö¢˜ DzÜ.×½ÚDžuOU2¶Á`Ø]N@©·ÐzþÄjû±QåȰɆ‹[0ú¿L€¨†(!ÃÊ(ê`¨µ­o-ae•cW´[VD·3ø§i×°a_ÿØ7U¦™e.[ñ=ĺi,?-çMÅ'S1®… èÆ8 PPdP‘Náj,¿"ºUÊX‹g¨‘/áÜ&ÈSÓ°¸[¿®ÁF9¹À)Ô-¤M·Ð{ç#i A)ðøô·W•±k<¸ä86Èƒ×Æv¢y¶K ’œ ˜¤Š±Övâ‹)MszÝYˆ± òá©ÈÆlÿu02TòTÏ D²û›^¢2ž"´±zA¡4¢ŒªQ„‡ûÇZÐm¢:¤ÆÀÏxDßÊÊ©ÚaˆèâvÅÅUúa÷ÞÑCâ(¶]ôx„¿1ëûùn0 ?™—Ø:FLj%PËÇo²/K1¢”*f\P§<áÖˆàzè6PpH¡ È-}$L„+Wd¶*³$šÈ& :©JdWç=«’‰”Òlb¬ù ê,‘$- $ãƒ_&·"7(j1mA#œÛ&2 Dý#7bÐp»Ä‹ éÄÐ!îŸU—Ná[¤$ÄÚLµ\¨†“Äe¢l*^¹Z†vÆ$ÅÙ²JÕÆR=N‰®ª.H@I\… ˆÝ2vÞ Ö4’2Z%¡zîJ†Z%©Œ_Ã󉿎.#jøeÂÝaær´q@“J[:í較[P• Õõl€± ÃŽ˜½l8:ïüèŨä¯r¬ªc‚¢‡Ê3R÷ûÛ—Ÿ>TìøìV k|MœÐ.kJÓ‹‡ö[Ðô4H•ëÈCJxÔuËE "IBL<½¸<é÷_`—I…Hd=ˆˆÔ™8˜ c/&ŒHºD]…òH|lPmr-Ú§HIÜtQÛÅ$Ò–ãw@ˆ]Âmûx>Ý<”a™°Æ ¤! íZÕ>JbÙ1mwLtЉ­’Ô¸+ê2žä¸åû~ˆõƒtÛUË"²B/æ–Ô*)ªi Ð`Êœ®.X IA ò– OQ/³P[´qÔ‡l‚- }‚ZXU¼Þk 9›@¹'©Žd™Ìú4*Ø-Rµ±„b<¬dn\©ºUšð(¶(æ•þd‰)>=ÙŸŒ¥“ ãF¨QH$‰j„e’Úâa¬š1Q+ÆeÔúKD½•¤at…£4Cdÿ€_£ ÏOCÿôªSåqÒþ¨ ¥}mRUu™¼‰) Û»$°¦+0ST ºöf*Š‘ SªÆîÂ=16Ù =“¡÷Ô˜U+ Œ ÒG ¾,C Ž-»@ô·9Æý¢S $Xó2ÅBrýW¨z{F{/C¥j6X¥ŠhWm‚M#bDŒê¿Õéh¨aím–Ÿp!J~tpAî œ…ñ´¬[­‰d?G4ˆ ‘ºƒ˜AN#s*+ÑRèÈÁ**߯D¢* dH"âgpt†D#  ¸`Ò ñCZ’NÞô,tªå ߯‡!Q º“•z×[OØAÇ¢ZQ¢ty\O×É‘dЇP ñ¸Ý­«dBµq{*²IBD@ Â235zGeë—Pmì"$Ä!É<:êy‹V9c‘[Œµ’ŒO©úˆžó4cœ.a¦(_*F¹T\hÅ62¬$(°õHhÍÎ84RN©•ž!m‘òÑðð¡ÅþA2J8 ÓÌ 3CE/ÖªäÛý;ˆ¦`0‡_€,¾Cf; „¹i$ ö\ÌZ?8Y«S"ÔjÀ ëI@R[ys‘± ÃæY<)sdÙ»²×ÁÉQ&­EW`¤AqYsjÅ£(Ÿq‹ú­L„9n(€G`1(˜µ™´Àc4E¹Åà=8b’`˜xˆ$.¥bÔH%ÓALÜÅbX‹R)¿Té6ª_œæáþÅašÅ{zgA©i¬2¢ˆmjrYìQƻ֛þW4Õ¥“éDƒ¤Ø ÒÄI j‹Ñ¤¤¿Ó´÷Y*bM"ˆÀ äþSE=àøNLœÂ‡öiìt%UWƒTP&tªm9.¥/%‰íûqÛÕv‚ë`yÈ6”"²±,D\‰rU§LRÃÆÊ!‰Í\‡f86×>\s®ôìDh°[Jt*:œhøŠMÕ?E:G‰D†é£cÅ­C?,kbŠ–Ö)|ÕE·ÑM°¤M# 8ƒ¤-ì#è—`5 q¿F2JËû: ŸXdŠm»¸ uWúF”b 7"r+M‘Kâ\;Ö ¶*èH¨SN(Ûw„=ˆ˜ÍÊÙR2ìê‚Pé°¢ã*mZÌÛDiI:Fx´=TÜ”ÌhGh¯CÕ¤2BuªÌ¬Íœ‹´({xÔÍ‹ïô-ù‘2xLÑž© ª­ÝXçæ"c † 1Å”ÍxžºÃD¡ŒªaçH ‚à øx9Ò9”*R*Ê†Ž§} )ƒ¢kƒ ørñ¬Ñ›¼¨ êj>…Ý"<YÚN¥-rQ'¡»øYü¨ºC¾Jù¾8T3ðàâ-›ªÕß˜Þ þDeT §†:Jbƒ&ŒÁ#,"*%"ÓÊa\S—PìL«€q·\GOÄCø6AÕÀáÜŸô-5ºh0¢'¨Ä]eE:]ÔŽƒÊ©X¼1l/X™b«0÷©‹0$¨º°“ˆºH©’8T½ÝE%HG¢ÂKâb×Q Ž'éº(MØÊEØÄ/ ;S<ËóDÆD ¾œ ä׫Q ¼ZUQIOW÷•ÚD©*A^ÅZÇ讳¢P£´×FÎ(ûtEêª+Md&$pq%nŸÅéyA•ȪÆ›$$†èëDåÊB |ôsR—Kåd%‰«‘¤™T;ò¶Ó¶%C{ Œb,'¬*ÆT€mÏGaWã2öÓVö«R‘Ú§’•U Bt)©ú™q'í»à[*è–«SµÅ½I´Á…¼MÚ"퀋¢9}îÀs Òø9P4ƒêL‡úäÚÇÛ`0œ ôáãèlUCÊÁKI%ò§mÛøQ2qNÿ­íàh„[Q5èTcÆ#ßaÙ—µ@•«4ˆÀVtü^†L± ½´v¥/AèsVr\VÂ8šJ¢‡e¨­È)µ•sJº(»J‚'±,ë°…g£»øvÿ%gÇaD ݈ÀªÄÊF©ˆÞ&ÝYÐñ¨NYØ*›”éœÒÁ´î #rʬ„NÕ[C"ðúïB{ ÊX5¬ „ UO²X*Lg[‡ì·lË ¤5E –:¯=›\]×jø!ãa¦D¨V;$‘„i¢)ÇœèpÒÊ éE‘HbÚ)å&aWƒí“„$AÕš·îñC_ùí€?´»h…‹ï}/ž÷g!†*¶Wµ“záw•åqØs˜Pžjª “ª» Ž&tÆB»è£B1n©ú€5‘ÄÄ‚8¢ @šbBѪiJ~3¤­È†¤4¸ÓÔí›|ådm'©{ILÔFQó‡=k0Le‚–ì4¢Éj0ŒÌPMºÌI2JAW“˜(A H¢ç_'ÂïJ‚6­9â6éü„Œ°âJW­.@F†qrè,n ` ìÄ'ˆð3ÌÁÂ=8 ºÓdÊX eƒÆ‡9uÞ‘éÆ6®ÑµâÞ±šSµ1(¾ŽìMå¡t­î O½¥ÒÌ£­j¦… ]—¼¢_çÅEWètâÛvÊ·±l[‹LlÙ^‡Ñ\MÇIÆSG$YãmYïˆzÚJt î©» 7Àjàf`’ì0ʪÄ)EZ+©°âlØ©UÛ “êh2ôð‚•'•ÞˆT§ªôâÙ;2ÖaÒ9»ìÉšè@€rs]ª:i|‡L)DD¬Ç:ª(-[Y©µJßí’düy›VÖWî|,)¥!•óe)ˆÓÕ´"!}E·LAï³a’2 G!Ì8-ÄÁ ¯€å¼1²ˆå>!];öѶb¯æØXÖ°cçÜD¹n·uý…iãЄh| )F-Ï^ð"i!#™ñ='èºUK#}"°êÐ (×› PnØq= "&´+–V …Òr”xRI~Ô.H+¥gÜ ë¡ÿY¯„a‰­I\"QÑ©êi›’ މ(Z~tlùÚ ~B§ 5ÒTÒ¨"Z }°Qß +)Uµ hEr‹‰ 1–ÉŽë¡°‹´ÇdgBÆ`뺕E'óVÈ™zAŽfŽÍiÍ,ƒj2G×%‰zÛU+VW%gtâh¿K+­f›•fƒª^)AUE€‚4ÝIØ­HªªC잤“aF1—g"ì_Ä]ƒ 2\À0Û`¸ª¼°ËäkýíÿÃp„rO@X¹ãæëæ;Å}]} Ï”öÉÒuÁPª‘!”·¦óÇ(ôíª´+"I¥=éÚà†RŒUâ«(m ˆ¶Ÿ„‰èàÇÚÒ&Йè8ö£.Aã#þºQe!W( m2»€\ ÒÃÎWƒìxàúq¢ìXIßá(Ó­ 8(ëùSébÎrmB™ÅŠèoc‹b¬<ñdɲuäMûªUMk„K¤ mbˆ",YôE1©H:ÚŠ$RB·»‰ßlÏÄ F²õ› o“²•š ê–Ä;^ìB¡KˆÑ¤ûˆbDHdÌM’Ä ±ƒO"ÆcË·tHâûÝh¾•Þ•í¨fÅ9–d‚…^ÒÁmg…ªÈB5 ± ÄQ‘¾rt‚ˆOEÖ¶–m_×3ia'D1i˜X(ãµ*ŽUµÁ‰ÝŠôª.Uüq„g@ûv%i©¢´´%|)°Ú°Pu¬ú°‰ÜjÓ³i TXIu¾–¶SvGκâŠ*  ܃óõªSwk¾„.~Dp‹]õQoý\cCÁ/†ÂÓŽfü$@xØ)l‚5 Ž*!ÕDÑå¬â´M¬†rm“tè4PAÕŠÆÅ¤—ñk~³¬ÏÔ†fQíò¸·PÞ„$ŠV SŠÑ̘§‹®R‰O¢zÜ}]m ¢Oó ̪ÅcÌ'{¯O+¦Ö:=ÉØÞ_èÍwFÎíÚþÑ©²«©ÿŸ½÷y‘lKò;?fvι÷º{DdøËÌW¯_Téõëu“3$<„S$¢ÑB݈"„6*¤…ÌŸ6+m›bhÍl„ g6 “‹NFR”ª»^•gFÆw¿ç³YD¾Ò«ni6#F=Ò³…C\÷ð•ßkÇ̾öýèËËÁv«|urÁá—Ì0ýwìŸót|u¢ë©Ÿ°_÷¾ÃN|XÎEsßOK_j•Ûj}¶¿z/‚ ©´,i/‡ì.báÝDMR—¿}kírÜ=‰ªÓðá¶6§gÛEÛ>Y‰›¥mÓb“§m3db^í…ÚÌæ%ŒÝÖÞówüÓŽ¼¾zòw~¼D3¥ù8?,ŽÃ%eG¬še+%%Yœ÷Ä>³vVI Šx¢Ħ{Ö¶œujf9»ÊQbVŸ%ÿ‹½üɋ埽™øB9ÕÍxOÖmopDÀíkbb<'iDžQOˆ%5cA94îîà‚Sߌ÷ÛlPw½SZN­FÝ)M¦¿Ü?û}¿8y8Q?%¢Å‘ã]Ž>Z^ü•”«\èÍ$Ýf¹LOfyO|1y¯öo†¼ ÅnÔÄýKÂX°¶CÚ(I—ë(™v‰ïºízBWÙSÍîòaPŠÌhsîu¯·éÑiî†>áÆ<ð)OÀÛxw9ü ÁŽŸÊ!Ož°Â¸@žÃWHÞñŒèYs•´;fT¸2àNf3¤¬¥Þ=à»,¿³‘´] ]Øb»hHåö5w_¡‰f$KP¡w3íÀðšÅ—;ý rnÏêñfùžõë‹ò‚ùYEöÄ„7æJ¹¦Ã?xwë:®]K=¬5ßR.‡“ÝS»¢sÿ¿)fÞüìñú¨»û+G«ïrÃwñ7½ø èü·ZCéyy±yrÜðE~Å>7VÆñ…åáÃh$#=J*í9zÊbøòbA½gõR:é8éT‡åx’Š˜­´w‘»ÑîÂ:-‹‹«« E³ô#‡†vï1Áì«&þÐ+|édˆæû$-&º"ý•õµô3Ó?4ëVž[Û•Ô|ÜR®šþ¨J7¤ˆ“OnWeã¤ô»Ÿ/úÙ”&l”C¬Äq˜cíÓ­Û‰tòÉÃÈ<´}Úü BÎÒÙ IDAT(Q„HÃë–ùÒgƤã¤R{ÐXWþù)ýçzù÷M>ÕX¥<¦ª¯äxE#%TˆHè)yBzldÚUb¦Â\‘ôŠgk}ÈY/KÚùÝUJØÃÆn¶ñ”´@Ê9ÇüùaÕúTXŒ«1«®%Ü 8…YQÕÎN²Di]U>÷~Iß½òʱÒó9‹Å«aZš“œ„BææÐÿE¦M·RQ.ífŽwÔinûÚÞm÷ßLÔý-íŒûûÊk‡Î‹=_°{:®­tõVvuýTÀ¨ Ïðvå Þmæºmü€–@a[æKmQt®¯g.j¯[§ÂuåîŽß©Ø zÁ'7Œ™¡’'l„‚Žßsò%ùì*ŸÓÒ¦6Êô9ß;aYÞÀSÍMmÛ‡od©Ó¹ox—Ê¥cýah‹…œ?L#áô{ê;NoþÃ’ Ï^qóÛ‹¼‚ß\ù.7|ãê€ÇcË«—¬Ÿ.¿À ?¹¿ØÍåói\ š§ÞÅðnÌSqeh>4&ÉE»©JÃd¹H'Y?¸q‰¦")«ÏÊžª{¼5=Uûä0´CÙïrÏí8èy.Ï‹-Ö,AcͼV_‹¢ÑÃ'íkmé9²ÃU0'«Á %ÕPÔÖž¦¡M©œ^IÙšå‡tÒÒBhkæ•ß.‡Z¦LôÕ¦Õméùã3]@H·nõÀª„{‹CmCŸ³¦ÅþÉBçõlydpÆZ4fÀFÞ  1XÐàhèøJkI9éåÒwWG¥ApYëùZS ™t¤5bÞÆ@U‰veÂ4n>ä­Ô?ɪ>™¤â”Öóâ¸I±ÕDÚŠY¯\huÓúóhëh'ù~Ö†©bèrŠ «u*ktf4Å{ƒð,}CÞjÙJB/;íøCîRçw;¿A!_À5õbó· ÿ²ÁtÞÜóÅ¢õg·¶_pþ=û‹ÜcƒmýHí™ 3hÞîðŽÓLZ™¦úжLÉýþÞqß<7Ú¹Aew3§…õ93UÊ 2×è—ô3ºÑ‡ÛñœéŒéIXÙ±¼üÃÅÌÀkæ÷½rܶ VúÄôC¦%Ê–ûKÿË9½NúR:*ŸE;)–²Î›íØéoyú/Ÿñhëoºã¯_ù.7|ÿeSBáÅsÞøx¦/n2óå›ëåg Ë%Œ_zúÃîµàoñâçðäåJ/ž|þI:[­ºÜ=ÄL£„išòRr®ÙŠ…iߊ¾Ö¹Ÿyùµ³¬9©Š=”èj“ø žC£/>Ì–½t¼š’JÏÒe˜Bt J«©©uª{X&Æ©¦éI¼NÇC¾û¥Ý’å–£®Ó•®Î¤l’=Q?“º–¶ÐHÄ!|áÍz¯ÏÂï4þÒŒ¶p÷®æè§ËáÄõ$ÂÌEfŸ%¾„1ÇÂô.b¯Œz»û’þ̯ȗ>eç²ÅnNWª4¡tr…_ý¤,¬¦MŠtóy˜oÊâ0¬î=–©û÷GHvTic–?Úà[M° x̱.ºÎZ†GFMƒ#¼lÒ2—\B ôLߨ~ë# z¢e´‘'-ãrО%ÑÇYÒl½æ¾ÉÔÀ•£1wJ­¹Êð¾ÔãœuÚˆmM)OI#yØ„er‰¤„J8¸õ¹K…­:tÜèÚÕ!è§akçÈÄt†åWþlm7¹ëå}ÛÁÕ‹Æ燅z²µréãCÝý0^k9n‡â¨ ö‡Š½˜.°gø91a{ïÖy$‹4§~ló‡ÛËáÝ®~}%×<}ÅtÎ41ìIÀϨPßÒ/^ÍËõQr^\.Nvùp¥åãÊ»Âh»Aù¬ä×Z©;ûŠ-™0aW÷LܯO*%?¥Ì³h…-ã†õÉc÷jÃ1sW¸(\þò·ÐÝßå†ïâÿÃø«ëøÈÉžœ¾Êç_Èjuû9ež¿zæÜØðvZü=Î%?YGÒIïúñé‹y|2سáä“T†,Oîã¾7;æâéÉ\mN½iŸ“§ïKœ†.•bÚU‹M5{Ò4DO-è²cGa–”’HN&²"UH!V]â†kìC[&+$Ìi¾ÍcŠñûüå÷ìd©O³œì™$¥¦ÌÚN%&ÕQZ¨.Öúà=Ik‰‚&K­Ê‡û9¹hI«Hç)¥à˜ɳÆ,þn²ÚIô² ŽujMþ^jë>®IEb¶N9Ò3©£9¼Î×RŠŒ5RjÍìh«ïµ<¥4•c£ß>è\gÿ¬cëtJáX8ìøÕ¼s^•rFYÜ£m"¶”­ —©Ì®xŸ™køV ±¢u0º3ö@?E|m¾–¹Ð1™ûòÖÇšt§ ‚€vrC>oÛ|9·Ù ³×:®¶i"Œ 1ß6»|ˆ¡3ÛñVj%vâHHVÜaI¶9$CWë*k=/¹ÍŸÂ? þÀOY Œ¶«`ä&u°Ý$Á50ôx78èK|è‰.xÚäu–cYNÅ‹ÓɃ.ÓC¿C À§ ,× +ÆBNÐðÇ"úõÚŸ­£”³%‰Tâ¯0]iÂçÍ ¶Ÿu¦#e&ÆN ¨WÓ’¸ØÄuʬy—ª§»0Pìœe`ȼ`û†KêÌ50C…?ƒËo*†ïê†ïâ?÷Xø?Ž¡§ÅCôŒá«“Weñû)Ÿ½ K•ÓjQã?79ëù{Ãp¾¦Ñ“8Ÿ,ýóÞN›­5ŸŠÂCeèz ‰ºïó1·q<>˜«Õ¿‡§j§i\2-Sž(fYr’šP“»õÌBrD‚TDAÔÌ’5À4…ôn.IsvMawJMÃNìû-ß§3™–e©2™ˆÐÞè+dá$íšMdÄ“xd—¢Ùín_ïZ–cŸÐU. º%Ó>‹ïL[J)Xçžï[‰ºôø¼-þ™Kx.M ;dÓMômOèLJkѵLÅ-Ü#ü€OYëpN:!¦ætÝמwÞ3cõÁ=6};;<8¿†·ï¶_pYÒì@šåXµmË%ãì²3DÖ^ñ5ÜÁI=18¡ô‚7n¹¶2<;Î:ÝZº?NÖ 5ˆÃ¹!¿ÃUð,ø@–Rɻ݂ÅÄj@e†Fô]všæ&5wZüz ð@ÿ wrÆf¤â…˜G!M/Y¬0”ÔYïs—MbÛNXиšƒ{Ýô¼CA2݉=mOýšþ ý}Iƒ¹áGrÙÎÇËTæû–Ê,÷®Çu_5çëÍÀ6‰ž1,™dEž˜¯9BgÓÉÜ”>”È<ŒÙd±íwÄúšùKÛïÓÎx 7jå01%îgþ7ÀùãÆx½•G®ÏÏ6z±M@† j;oÚŽÎ7 õ;à»7üæÊw¹á»ø¿Å•ümÜî·Æœc?º‚O^²~ºYœnËðy,O>æ!ëY:-|zàöëvþÌ–£ ƒŽj VÖ?;øH'wOH$$ùd/µ¦¦ÇaïÖ<äaeý Q4™l Mbj"†XDÄàÑ;-‚ð¦ÝEšf£XäbÉLC¢[ÃU¢K’… ‚€|º ÞқǙÙI,W6.ò£óƒ&wan.¥?6àQD²‰eK L*ÌC=ÜÔcq$—$M$[ž5 ‚ƸNú§I‰‘8næú|Ÿ¾§2‰»ZÃçs²šû–;\±¼‘œ½”žÊìóa® ™½œ”ö±è‘RC?tÿ¥–§iq"yáö©Ëïýß)Wó”‹?GÿÏœÑ"ûX½ïìˆ6ò‘®D¾’å!ÚÖÄ-nxÁ†HÄŒgˆmï—Úg¹¥<ÌC®¤?³Ìad6š \)ŠfbFY\gÝ7=mÝ6}¢´Ý #û«èÌy[*mÆnâŒèdhä$CGÜ0ˆÊ±‚n=_tž™©Nm+Kaì …ì8[ \7Ζ `nÌp]“þ6¾f^r_ïÑ#Ÿ ]±a×+ZoëþdHÅq;ÇMU¶å žaªˆâÚh®1¶Âåüv>¼å~3×Z#m¨øk>¼åý[ì‚ Æk Ñ¡ã—L°wyaø~Hÿ ô-Ê6]ãÏàkŒÐ*Ÿ-ø#ã_q…Á—Þn¿1{¿z ïÙ¼þN§ô]üg(Îà´ou~;a¼xËËo#¯ÄÖ«!§Å‡U)E$udî¶Ïþ—šw¼}šÆ$I 0âÌ"×.Ý{í9…XËv uŵ§¢RNL ŠÎIÇVÌ-Äs‘4 p§7£K"’x’Ž9KJf)%‘ŽÓ”‘CMÇdz&zë®ûš'±Qm°aLYPí½µîW”ºeÉž³¥ŒZdÓ®¢ZŒ¬ž“¥OT3Rˆ4Òœ5ÇâÁ»w~$úQ±”‰if!<Òj_×TeÚåŠÝ“eÛó?ÓÑuÞÏs« ›³§QFí $ïE£XÍi+‡KÏR^ íÞ–è½;eàDP®Æ;$ošm½"ĹßÄy"¯-å^j—W‰«ˆ ÇmL„áb§Ž&ºâLJœYóÙN´Î‚“ֈёQ)Nn)ÚeÓÜär–]ø•;sÇÐæ }ØWh0ÅÇžIƒnDçI ·Œ#j,„Öh{ÚŽºâh»jÌš+5íw=‘öDb¬’îˆÄÀ«}[×UŽ|)ãnîWÇÆþ·7¦-o¿…‡¿.`ý.7|7 øšÿuÞÀÇ­‚ü‘)óždN/xzÍû3^ŸÃû¿ò]e;@{¹–¼RÉ‹y5’Æ}³¸s‹üÊ矠0\’P­uñ™¤¨¬hª´­—ù¨Å’KvÐ$2Že¤$SUD—2©$)³9J5¼Ñœ‘.-¤ã©uZ f´‹“ ,Ôt–<šy2Íj)²ˆ7ÕN%@5±4¦4ˆ¨7Z„0%]Y™,%5u‘st4µÖqPU 7GÇ«ª[J")R0Ø4›Õ»ÏÒ´eÍɺ҆&Zó]Dél±'ÑPÔ±î3¿nrÏôgî›æØÿ0ø"‹–-G B>xšVÉil‘k$ÌÞç4‹.þYœ?;u›2Œ~ÛýwæøÑA~•;ǧ[w&a”kâí£Õù¦]äÌRÞ.35mdãJU’yÖð|{/‡9ú¬ÉuÑ=K'—Þsö–¥ë"IŠ,¢Å- -.Dt.®IEÞÃï½+¤”,%Mª"šä‘T ]\é&.bF6OF5U“QÑEÜ$§ljê®AÄhš!÷¼·Ú¢ÕÞ‘$$“Kæ!¸‰šj¸6± ÏÒ5$›‰ŒJäYcåwm™, -šP=zÄAe¯-I|YÌ"¡jЛ­l\ §‰!eÓð>ö>‰wÓ¦.hh—Š>HZJž4‘MƒhöæÂíÌ»Fä<4]ŒUîÝ_Ù¼–ý‰êß®-Ú˯µ?Óœ<ß»æH‰$b¹˜¿8iº±Õv^rPPjAã§È´GrÎo¤Šî‘¯‰¶Ñ´¥`±NÃÚÒBxˆFe~0îuÎÔr»-¿€ŠÝϰF NŸë«ÖÖr~_ÿÉ“‡qš†BùÝ1ý;Ú•|MtxýØõDžÑÚGVÁóÎùÀbà°޼¥}‰|o«ËRõCºËºtÏ_—‘®©ŸRßÓ¾f?"°Ê¯,­‘çzùõ¼[]_={Mºx9Ñ̬Nˆ +GŽkŽëž‹•¹-¨ } _o9€^ðæ[mÛ7𾢜3gŽOÙ½ƒŸ}|ë±Öÿ!pÁygØC‚Ägù(Ššx¡¼9òwï8¿@®é´kîÀqàïƒóTyÿ éŒáœž8i¼ü®nø¯uðâ›Ö">.?Ïa<#?§Ô`Xð.Þr傳Ì*ñZx’X‰˜œ –'”Í«\Ö=åWír9ï†r••”P˜ŒÓÆBù=^-–ßÿô‹³wÏ–ÿª?\Ä铜§®å¶]‹ÜkêwŸK:ÍrB;JíéáÒÜMw& õ6µäþ™å1%OÉz••Héú¡Ç¯ñïµXè!K7zKò`CX7ÍÕ²n1„ š$¨žtÈ)9CÖƒ.¦–4e³djVD• BŸõ¢"ªÉ’dÅ\LD3šäqV$“¤®„{xˆ†ªæ†iQê½´9E ú˜dXˆ*®êh$üQJÓݼY7kJ·.⚢Lº8ÏËÑRI õ˜êݱޅ›iQK¦I¥‡f'çå(LYÅsÂè]¼…4EU"š«SªO¦YlHiH©hÊâ)ÄÝ“Öm•…”ŠMÑõ¤ÅymO¢ŒÝðáx,ïŸÎ¶ÀÒ<ÊíЪØRtèš±ÌnÄžw%õŠ’9Qò@RŠÂŠ>ÑDÆ+þõ«ù߯Yçd—Y]í,ü¬×â‘{ºÐÛ÷Óí‡\ÏêÎWÊÏ/ÑÉ´a³Êë]O^F™ ‹¢©t¸¸·„?£gæ õ—ß2ßp`³ÏÛ÷•ß;ãËßå†ÿ Æ¿=õ}ùö‘èð\ÿŠ˜o/ÿmv'\¥ ¦LŒÔGàLoY²)×ÛüŒC㇙³Æ” ƒ5r‚„¦u>_”0$Gƒ&ô¢"O`Jk×ó§§§vòoOŸ‘úˆzKûJþþzŒääI2•Ôó2ÆÑ=·ÞÕ[ŽN6±ÞV£)mAãÕÝÛõžü//.x½[|y5}±؆ ´2ƒ-©y#åÎy‚Î<|ž5õ¶U¡8Å*¥±ð̹µ2·Òß³ú:ófÉv… #9)вu.ý0·BÄlÔƒl„æLÏÙ/x2ñrÿí{vÃË-F†‘ÓÆP7l¶}Ëá‘ãt†œ# í@Ûs(hæMðBxc¼pÞOÏ8›È#$îõþ5Ë%˵àz‡?ÂA^¿Ë ÿ?ˆ¿ê{õÚì›Eß– =sXpwßd‘orÉú ë5eÉüÈÅk¸à|€¯÷#OŽ?b£ü2óö’›\½¿ãÓ–I#=ᕃQV³•ržJ¬gbSÛ686ú³=«O7‹rbS9–)¥Å*—Qû(Xmá2Kimu˜Ÿ¢ØÝ"¥”TÅzäÖƒÞŽ¥#ÄŸûQŒøxëToâ‘|¶® é:1(•ÞÅ¥OÔC£å­©kŽœTÑZÐŒ¡:‰¸JJ2•>©2‰¤ÐÒÕ0k"–ÔD œƒõ–BDÂ5戹{×É„#!Òé-¤p"‹x 3\}¸ãpÎÒ6Æ­ÎÛ_”?lØí˜º$¯y×’dqëu°›Ö·Í;ÇÆ†Ìúõ|'¹ÚDY¤®YæÄ\Ä„xÔVeïúój`Øð*bÆ“)þr<]ɰlñû«ôo%®g_ã+d¹>ÝJ‡îÛnßÍ1%ÊϸºwÚƒ’·óFê-öŽ¶Øµ™Ör®õîf×¾äþ Íä'ta~`nÔmOÊôJ ,~”E³ó|ùÅq¿¼*_°HL‰3ç'ö×ë§_®Ççeð8K”#‰ubM/=Ïý‚ý5õšù¥ñPh…¹P†Í\¶g sRЂ.KÛü/ðCx?ó¦AåËkrax……b§|}àá§ä >\oÞ·ßð7%þãëc¾W5ÀáÑ+¶ÉŠ IDATñW÷O†k^<ãÍ㈭ñFùâšÌÇý Æ«3Ö•|äÒØÍÔsÄœ©ÂÖ/èo¹ƒÿõüÝãz=~ºÈ«~’?d¯›úá—ùý¼ys½} vö£Å•œÇáÒ;ÚÕà»Ë¡)KØ÷šœ¥ö¼íêÝÕY¦<¥œ¿×_Æ´N«•L‹”Òˆ -É^#4¥Í>N•„´&.º[%Ú¡µûýñÚÍ|út±:M9 *ÕÚ¯ýö±²4I…ÐdEc‹ŠhèÔˆ–­è`2ÂÐ0AÍLÃsHq1Q1•¬1¨$€­KD„‹=ðHz,"¢‡4uÃ]è51«t3G$HMP¼Iïæ3¡âá5º ¸g\"pZô.t%$™ºFIZð ]Ã=ª÷è]fow·âïq‘X–:f*)iôè­Á±IîGgŸ{]q³fæ~hrÐbÙ¤z3Ÿ=rªFK´Pç8sÜ×z«‡YXkV›[kÞ[Yúz Yôžæ9~-~¤–«w)cϲÕi—£¾ŽyíŠû|H´Byöêt±r~’.ïpè¿xÞ½·Cô“Ò#ù\ŽUí]0Õåêðê¿R'•‡Îúšüßëí\~ÜÍՓϹÝzOxÈÃD¸ç_åJŒf¬X[Zk/>åq¯æ|91VÑUá‡tv<ýq.-¸Ôy'®ôîꮡlšoE8(w›) Ô(g0ïÙÿ ù߯*Ô‹Íâzû{pûòFˆ™ãné7ô·´ n®Y§zkkeŒùxƒÌÌ“FQRcÑ6ýe>}º<¬¦Qúpp{ÿuìÑJm%*×ùc›npc¿x%Óºy¡—%v¥]ÉñU×sÏ‹zÙÙýñý•ïI™—•vÃ=øŒ8’˜‚³D/^åëï|XÿFÅo÷…¾i%=ú^=ö- è‹ot ¿8ù†Ëq‰—…“¯Ðô-4Ä‘u°ž)Ê»™,ÔöåŽ3æÌþ÷7¼øW›³M>«RNlN<Œ}GütQ¹Ûrñêý×äÜÒø¤ ù¾êè‘ô0ä<é*÷„0ÍÉ>èä™T:ùdmã©L'L£Ù²&Dg¤Ñ; ’¤ 5Âßµ.n©EÜ÷8J¸H`¥G‘–†æ©Wý]ëìc´XHJÙ²YÎVÒ4H^%·x¯ÃQce2Y”Nr¢E§»XS¯„à†i„îîÞ[ï]<Ô»´.ÑDT¤ˆ™„º‡ 0vš†I€w¢«÷Ž›FÒ&äo½‡]¤GHrë.IÌD5¤E@hé{÷8ºt).]$ŒnªÙUÅP$L½»Ó4Bü˜˜‹çô5iaw¤ÃhEURÐ#ºkkM8h iYHÉ‚lfÕÚ<5'æ`/n­¤fb®)DÄéá!ï£tÐ>„™ ©5Z³zp«q6k饄Øûä×çÇgŸgÁ§+ɶ‘¾µ*!BÎH‘}I0‘9Ù¤¼Öq´fK;ÊÍY·u]¬“ßXü¤pù^VSÈ‘a•ÖËFZ`3·{âï >ÂôóðÉgj(ó~>¶±üî¬>äƒî׋˜~Dùɘ6^òŵDŽ6êt˜–·SZft`žfwc˜DK×9 å Ÿé{ÞmGT´£2RB3­Ñ>ÊO¹ÞŽ ôLùÕ‚wŠ6î•«Ÿ}ÓÚ½æ ¼ì›ÏŽyÈeÔ"²Ìû¯7r»m‰ÅDÙ“o·¾¸Ô§K­(iŒ¯¿î;ðYjj7óžúíì-z-Y”ug]¢HŸ½³ß“Úºõ5”zœ§_a7”·ÌpÍ¿†ï?Ž+@œ{ø NY ëé;ÖÿB¢ÿؾÕ"?þË.µÈ /±'È@~ÊFÙ> œ—°‚Ó·›§lßoxøl¤$ A¸ÂÆ.r\½(r ä–øSØt¶û3âœ9ñ«Æ`›~yiÏç”÷}$Éá§ã×,w/Îÿá›zñúxú’4á{9.¢öÈmÞÈásŸO|X É5ZÑÞlïw§òcí?O­Ét¡ÿ7{oÓ"i–åùýÎ9÷Þç13÷ðËð̪)¯”&¦iõ$R@"†š^© Qø zÑÌFh5ßKK-RQ‹êhœÁЦ 9 4Akðšê®Ì²ð{îË9ZxäTVMw6Í4R›­ üº››Á9÷üßÎ4ë<‘J7ÓDÞCº„ˆ¨˜`Ä`©ãÄô¶ûð9圖žNþ¤æ׿Ú&/*Ñeª)÷XEšV5R²¤iR²ˆ¬F[´† ±(B!Ä‘îuŒ–b‰¸'Ù&S‰Ð‘¥&Bï£UÚƒ QéêÍp±²<’ñˆ‡!ið2uñŽ·B0!bŒÖòèèIÑC$xô1ªƒ»wˆEâNcˆ‰IÈP U‰lÐm u‚DBf›.½ÿZïîÒ탕„ήs8´¡µ…càkÓ¬" –ƒÐ"¹úxhq¤ŽP†¡i¥¹dÕ„ôÇj²¼‹›Üyyå“ÍãŽó"郱ä$ªMä.¸vý½>t×Öû©ÐÓ>U¤¿ª[sØ)–ô¬fjÒ–§§:åBÑQ<‘K^—åÈáÔ>œöVÚAúÎ4×E‘¬y—|Ÿ}0}À¾F.È\Y ã£uM«,ï?ãÃɇ1ùœ©žN¿Ö™yÞ—|©Q£ãVô€ýÊd¯öÊt;<×9u-ÙVnŤ¬}7ËžÜr{Äo9Ù0Ÿ&Êš”)àɈ#½Í ôš¸ o36ïx·ç[eê#ó÷úõþõ——,uU(D]µ›óý7ðò-Ë-Öº¯åVT­:÷s×i®ØuW˜‘ øãåñšt¾›JNsÁËÑùÐóÑ4·¼¦X+Ûñ:vƒ=×LðÅ¿¼f}Mÿœ¬xõ)Û Ÿ]\žø¡¯®\Pvž÷í+p¶÷ÓKÿýúй?¯õ¦å70â~¹à}æ>ák¦{^f¸ ¼9ÈúîÑzöWö¦ýdÿây9{7­Ÿº>Õzâ÷êѽ‘ºfÕä)ǘ}Q!ñ +u½l=~ò]¾GxOÑ0×As,QÄÄ1•Íì"’³Z-‘u:‘TCîF_Fmv‡ˆ‰¦1Ÿï)5ÊÔóºË¼®%G2RÖ•èl–p"IÉ#”$¡‚Š2‚ãviïLnzZwr–”d¤šÅ³vqÑÑk¥7F5]’êêSPÜ%ÀB4D#Â]Ý=|@5|ÑB#ÆhÞ‡»$1ÅL“› bŽ1†÷áK„ïáÇÄ{UO32é"†ºªúÐІ&I†&3E5O‹”`ˆü¥ðëa­þD{džGX£¡$&5‹¨•MÝÕÂß1îBž+CS5‰,}ò}ô‡šnîë¿ÝŽþdÌkŸòPW9JûUD»ñ›³~\ùt2~e‚?zŸ$?Ù̇‰3AÆV}[—MÌ)ÌS^LD¦M*Yå45òm ©‘ZO?Í»T÷vG(2_N¹®•_R%·§º7Å*kAq ÿ%R1AÛU®|XvIöëv9êIýù4ÈõK%§I²æ¥½êAƒù¢…òû½eÔ¯†ð0v#í'»œó<{U©á öaHÀ þ ‹‘N(™´Æ2 £Œ[z#® xàcbGÿòœgýÕÛ´ýcò/Óåëë\ý–ŠäæpÇæá¹M:müÙ«¯Þ^ý§?Ç.ˆkÖ_þ4/ó¤‘äõ—Ò6g;šIJ…pØ|k¨žoö—Ö++j©‹´ž~6Ò¥F=¹«þ¢-oö÷P_°œAæõ9Üðý¿ÄX6lï˜oö3—F˜ÿanø; þv¤è;½ä»Ç·ß¦Þ|¤ _Òžr8Ãÿs4“-]>ÀtÍ÷áø„íÌ6(¥Ôã Ø«E¶GÉ´K½>è—Wùéô‰w=Hí‡ï뿯×Ü~ÎûÂa[X%âšÆÕòÓkJuû¤ü ôÿ~mù^ÓªhîÌ©—Ò”¿:æÃ1í«_2()rDŠžº‰œÄ´®eyâO<–ð{ŽC†ZA¥É¨1šÇ‚&ÕµiI‚ZŽ\¢XŒ(Xàš$‰cóèwž;“›LáIŠK b¹‰‘RjjºÊ6k*a&6Ürru ¢N(Dö¡>F¯Ø:tµdwY"‚aÖ”RÜŠ‹DàM莵Ðp £„‹k8áââ>|Œ  „.!æ#ÆÀ£Ë0Q—0CTTE1 QU#úbÑÜDîMHÉ,ˆÇÚ ŠkŠfª&É4“KÒR¦“1?ï«ÖOÎëÝã/CW¦jBïæ#,F q Ãs"iÉͺùgQ¿Æ-Úe•†‰¢M}Y×å©þ‚åùzYi"…qœâÆÆOŒÍnz~ÞçMI%ÖÆº˜^†Žãj­ÄøQ"ãÅʪvuÚ°’t˜†È© ¤W•q×R:¬=Hu?ä¢ôÕa$Še-íÝ8|2±qlPnë]ý£}>ð-»ñÀÌ>äG)Ngù"¦kÚMÏ<¤4öà ®FÃëßO ’_ÓƒcÙ›¾*óf#ž —eŒC4ܘœœIŸÒœ˜‰7:DƒÆ{Ú¯¸¿!A\p{ýQxVyòÀzÚ>mÛVËY¯\Я?ªHÖ|òæêöâ2oNNDF™NÒö¿ÍÜ_p{ÍPvç7ûÍtPð“|m ÿ_òô‡å³kJ%/ì2û'v‡7¹ ÎóêûíÙtˆÌÚ«ii•ƒ@‡|ÆÉ3¦ÄóÎ;ø³Ÿó 6l®y …0Èö9¬ÿÁßýµ¥ÿ»g)ÚÁò^òÝãowü|ÿÅ\ó[Ø~AyJÝÂ?1˜^ìøÞ^6aó9wÉüfWÈ%(œ±Éy+?x+Z™nª^`y÷|µOå*è.Vû“[>\ЯÙÀ€x+Xƒ?ÂP߃í^ò¥úâÇ:Ÿp"LJ™(}¥7“ýß"?mÊbˆî ‚"ëY剓í“9¦þ ˜Ç-ÞäxbǰI3UûÄ´Êœ™K^Ed!i£“D0Mj2rctUÜÝqT’¨t™Œ´Dñ©ˆ­lšRÎ!¢Ñ%D’õ”‡† 1Ì#d¨‹º ™P"ŽƒE{&Ì5…ÅÀ\Ä‘hÒfžB#DŒ@ã‘öáá„GD†jðèc‘ƒ}Dèn:©šHVDBÝ$4Áh8;ı&!C#ܽÇò(›êCÒP$™™e±\ò$)‡Ê8‰ãéóû»OŽÎ|éV1—ˆû$Cc!´;ç}t‘˜dóÜÊZËD̑μ/£}2–0™š9–,RòbýW3RÑZÜÓƒÆq˜«¢ùUÌÛ–òˆæñ Ï?²²´²a©SÚ«ÆVÈ%ÊY*:ÒÐe)Ò¥¯U†4Z´ûä|¹cþ™ÞÁØÉØwa¼§}@~E|zE"•Ýóõ~œ’:áÄò*¦­®²M—}ueÄ—ºvJó—k{HÅ$yº^Mj•Û·œþ¢Oô΢h¥×}{K| AÀ…6! N¶³L–ŒånøÕ¨˜a‚%Nœû5îtE½Ñîˆ_ãÿ'íšòÿËôsîoøs¸†P­2¯/ÐkV×l>ÑWvÿ Súk/áé ¦3žgÞóúÞü{­â»¥?ÃíÇà7cãw‚†8ƒçÜÃþxül_æ|ñòrõúý?#/¥L°!v‰ýt¶·-¾f÷ú@c?¸„*/Ñ\7‘žŒ~ˆòç·å‹š·×öÙù©=|*É‹ÿ´³?}à¾ñpÍÂǘßußõº'ïpnw±Ù§“?Mé•:Ï‹ä{g÷wãi«+n2EÿÊô§“ŒH}Ž_y{ÞGÎu6YŸfÖ¹»öIÓìÙÆ+è‘õÁÕî~_d¢¿.Ó(úäbɺ˜ ‹Çêêˆãâ‰4%é„JãÁŽS¥ÛÌÔ"Y”ny”䓉‰J„‡†«…¨tíÕL„„܇7­³¡\#ŽÃW!‘5̬ ºÒet“®šñ€D,áÞ¥GÄÉAX„8ÞÕ‰è]ê «È¢žÅ ŠâÉŠ«FHÂ"ÆpJZH)TÜU¥»[´æâtq-Ub¨w5TT%%+–gÍyˆæ¹J™(¥ÝÝqlâ7†ÉÒ-Tú ´Óпô_Ø”d5[ÎèÆç‡þàm¬¤Ïj³Î)•¼r4z “þ¸5Žqßâ§’Á¶#o{.-jêOÕ†¥"RŠÓG–úM+õ’gÊ|¯²ŒãœÙôã*(>¹h5¿'šËÏbü؇ªfŸ/»ƧWº†sô-$¦·{yË8¥œ¢J¤m;ݶRjª–phõ|”Ù–œÍgî‡à!¸ôºËçÿZåʌDžÉÁÎÙ ŒŒÒ /»UÊCË%ª-÷ãŽ÷ûñ 1,°¦5~J6Z ã×´·ä3Ê34!ßæ?<ãùf/vYFM §Ú {‡5$8²w.mÔü–u®´¶Üìÿ ¬ÙþŒ-”·T`Y˜Ïö%óÃÂÒ÷/hor£½ã°…§0C< ×LŸïS!;æŒ`Tû¥ó¶á×Ì`çäŽ@êLËkÖßfù=BÚwìßÿßðÑöÛóÁSØžQžQô¿¾U|$  N>ÎÿÎ|ÿNAôT·úª”úhz8¶ÈöéIyF=ý¿ùÉxsy¤6˜/ê¸n•}ºÀ6䌆rÖ¸ÛP/¨åPÏÈ9sÒTŸÕ­öú¼ñî:+óæf^óTí(Ó¥s¨\u¸{I2VùÕªmKÊ£_.÷‡Û~ëWœoã³,§ÿܦϊ=É:ÍÕËvIÿæW㓟åG¢?ke‡“+#^Mi›"gÚi~˜›žžH™DŠºÆ‰` ]BQ“Hf+±‰fnIGšHý¥ŽI)ªEÔ2ê †zCÔ½‹ƒ‡ªJ‰‚šG.a¥‘»¤nyd¡Cp¼‹,0G¼ªTÓ 6­1šÄ¤^¬BïÒômH‹|*"¢ú€1o½…w×côŠgl¸$ôeø²è‘D²éPLðÀ=b¸ˆá1¼Ñ ‰'‘b2²ÒUÌÔì˜K9Q —*Ä›…ˆV×â*A‰8ƒèá!‘Å'CM³™¡:Ý»„]ÂCdt´Y,: ÷Å|œÉDúhš."xO-†´äÕ4[)ÙJ‰ÈFFDì´Z¦>Rmé4b·8a§cZ×Tè§¶ pÑž{=9¦cïÎ:i6{H¹© “[œÛšwÉGqO<“¶º ?>#î|¦­'LùÞN{Ýÿ|MúýÞ®¯rÊ’ŠC±çë‘6Õè:[^‡ÕÖú_Õ‹»ãõ»Â^¡®<Úି"¶B¾;»ÔûgW²f5á²\£fGªÖ–—½ƒBst+lB¶ þ ¶&þ~ÁTX%¬ Ð60±wÆj}A’,½É‹ƒ¾aÀ 䔳ƒe&Íå¾ÉëƒÂ‘ÝŠüå«‹ò¿]ùOØ•Õ~sŠÀ‰^©ovýsHpúˆ»ˆg@{Su¤A¥Í]æ¡‘n V7D¦4¸ù˜xù[eÒàÏþÿÜ>^ð_ðüŒwß23óÁtAÉ”|?³ú”²þØ*~ó¸g0}›±{Æßʇæ üëGêñ£=ƒÂÁWO¡Ã_ðÅÙ¿8)繜>eÕ³°«Ê ÆYŽÜ–óC½7¬ÎIÏIÁ“À2âÄ5mwu\#iç²ÏÍí+ilnN·Ì§Ì'oV'(»2D%¯F¦ž³y"±M÷[;–ùmSÞ'ôÉÖ>Ù¶¹lòI±õ$ó*MÓªMöɧ®Øtëéò^2ò§)ýâÉØÚýVK±Ñ&–*i D:E†¸øP nÑTÖ*sÊkI)œHEkˆáQn8Ð ˆtAB¤I(Gg – z "a3¶É&Cd¸¶GS‚ô!ÝUð ‚@Ãу„çð±´bÍÒx¼|‹ø-’gÁ”d!Š`ª%‰ç¨Sø½ 'Zp µˆCFí£ÖˆI 7Iöˆ7¡" 2œ÷æqJÚÀš~Ì5)…¤¡â¤N Sà} wÆã;·l˜ŠO îȈñŽñ˜š×ŠhˆÐÀDUÙ=t81*Èm,]<<¶ß×r–²%Ód‚¨‡F ™&¶yMÊ‚˜§]«ªå w¡Ž„u›°+#eHáø¢#º0ToËÝÁÑ~ÑtMÎÈÚí„tã¢Ú°Gâç_zÇÇÅÝHs=yB:!å>ù(mIù˜v9R[osd;^ªü÷®ä/‰ 1íûêrIõg£n:F,èípíž©åþ~ß[ãúgÓcj©R1ÔaÞN±M©è±Æ†H /ËÇvhƒÓ–{k«¯½àÆÑ¸wVÆd¨ )î?$M¨ÐŽ±Ë²Ï…§™wOX­8™®¤´Kc/ŸÂŒïhÏv|zżËÜîõö†™ý“úgõyæÝyí£½ßì?™HYâ ýbß¡_“!_|¤ÁùŒquZ%¥]Ôýx_3Áê{d¸ ½¡Ãr]tA=@½`\„·oœþ¿Ý~g!Áï¼üxÁ?£þ6gðMœ@3?Óö`‘RŽá5ÅÈbED$é£wÚ{æ!·c–bf¢&91ð# Qs¬U|´4º² !(f•hDŽ’sf-¥HÎì/Ç!Ýs,\‰Œ"hÁ›k’Ø„vÁt}Íâ^µ‹ªiÒ"²F+£DW©h}ăM"©‡xKÑ¢{8<ܼ-]½¢XN"Öž\ò¨<%dâèƒ>DKèJÔÇñ@"ÄMºjG‰l¡C½¹zÍabaê#2¾Q‘#Ü„‡»Ú’K“è½z]¤7ÜÅPK¤5‚c¨úÈx•0Õ¢¨ÉP7D"4c’ÈScŽ4uK É’\WZÄ›±PiûÉiêhhoÑ–:Ææ¸+c•|ezª1û0‰h’CÊÐ’îËdiAñÄ]l{ÛtI2VFQ£ù؇]fÙf-&UÁÈP EÓ!”è9/)§bj.ÝroÚõë£å÷Ún¸9ð‚zÆœI ¬"Ž.+šŠžäª;|ï …ŽW‘¾+÷{»G7‹‚Sq$”!¤‚T²!§xÆèñjé[—û³Ëöä ùêbf;¡FW¼ï«P¿ø˜Oׯüb»ä3æ?ÐõÜd^ɧW¼y•Ùžž•þŒÏÒýæÏß~Øq§ ²#Jþ=ê=ò9Ò‰ÏQÐÎ|Žßpß^Õ¾Í÷yî—]~}e@Ö\³À>\|´ÇÈ nÎøóÌç|uÃoþÆ€Îô÷¼¾ÿ¿üÉßIâwˆøxÁ/” ‰©ð|•á‚/®yw+&a ¼¡¿¢ž‘:rçycºæ9¼»æõ£öt†àå ß/<=Þàã´;{³ÿcðžŸq²P2%Q}Ë/™_#¯Ÿ}ɽäam OÏð5:ÁÉ^ } gÖPo'˜aFY!F/D¥ {ýø•ïW¼Z½dºu{>ÇéÅtZ‰ÄWÁöýöx)ÔÜPêÊ›æŸQ.õ¨DÎh«6& aäHŸ…l©>-+K$½qA½NGÄVÙf¡ŒÙÈ6¤wÜõ(Ñ’.¹ß®FO#”£¬7¨‡F$Q"ˆHî#¼¹âÒ¥ÆLÌ5¢YìGE*v$`8ã~ïk\A‰‚baZßà+fêŠu#¦O|÷åGwñõÇ5L |ÕyÙxzÍô’å9^xP´³ºå¤Rn ¦;Ê å‚zý]Xi÷2ïÿiæÉ§˜# ֝ޱ%çõîÒ~u(o®â þß`B)¤Êhœ½~Ü—sÕÃÛ¹ IDATohÏ~\'%O]/Ûê «++tGa¾¥<ª§Ãª˜Ñ„®¸’[¡/Ho¨_"Ï®4Ãüã(›^>Yò*˜»ª«¿ò¿}³~8ÌïÉ7Y®ŸBp?ˆÐÉÎIdwíCžÕ†I±Žþ0jŠ˜rM~æžz”^<Ú”&aÆr”ÔUF“ácàiÕ-cÈRT‡H_ «â**}ÈÐ0$‚ã!AÅG4|4ód‘ZèDH´ð‘"²å‘KË¡ÅJVS±Pu³šÂî^›P̆[$º…´ÒCs¤PR€î-õ½ÕÈ2r E]ƈÑ]Ùi„‡Ü"}¢©Šä¤ ± ûF’”-—œm²È6,t¸JfLÃ7•Àª… Ä#¨Þ1L-“” šÆhŠª†‹‰ˆHC‚!A ‰žTpzE–ÐõY¼÷ÑÛCW¹˜­“Z’¤Z"‹I–u}Ñà>º‹àîšôQ&‘bޏР¤$`A™t®êEeÜ;ÍCC$êIø¬>KÄ)õ!$qÒ†¤!’$ lHrbþ}³ËçÄÅ>¶ÄêÕÈ$ý ÞFx9þT‚¦r™§jBhª{QÒ{€)±d‚}/o­hÒn>Ž÷Â/x‰¿ÞŒòC씤àèñ€ "w‡ñz¦6¦C8éïä_#Éá…cù üÒï¨ßÀ„͸ơ¿¤¾Æ¿Dž A…žvr¾;)ß[ÊHdò§c÷DöëF h þî•ÜlËYŽg—ž|!WÖþ«ÒÖ)UšŽœü(‘å¼ä“rRèò!Ê.­÷þ c¡Ý@æX(Ù°@xÕòÖ#+—i¦tUû®³{ÎÈ¥¥Ü-í6쑈ÎÞ­y²fy¢9êôßuÝ~¬¨{ÃÓlÏ(™úmôôß4 œ|›/T¿mßMzÔÿþ&€èÛŽòøK¦x—¡ñô†-l &އ²| /Hà+lEépÎtÃõÕW}ûEÎß×Ë'óáôáJ+Þ9ÆÖÒÖæ¢­ÆÙ·½äk¢ïjÞ×FyKÀDeéšòö˜‹¤j‰$GL”ÿCì©Î§f=ØšôÀšÚX¬e’"ŽVâv»>Ùj.ý´Ó!¼IÜ3Vú?;—““2åÿ¹?½Tj”j©é¾(í ¢À`ôG£S§*mÞÞñ™™œy¨#‰’öÍþ`9·q’ «±¯KdA3$N2›™•£ OHçéïºn¹€gÿÑ{Ãß}Óå%‘:w6à ÊõïŽöÒÏo¯T}ÿì1€èñ/~DÞ|Ô)}qýeš3«Awta 8Cž}l°aÔ¢³@úùöû„r’jv4a×ð鎜u."%­Ëc³«ç©Þlož§ÿêrùßÏ¸Š â½Þ¥ßσ’¥,†¤œd7é>£±œàA–n¦W2oO"¯âÒúAìj)ŒD5J!!ÿ y¡mmÛ%WáSñïYŠôl3o'o9­äÉ[ärÙ¦ËÙi\IìsGŽDº耱jDG·œ5µG³Dš:ÿÄç=/XSyT†êȤòÁÒÛÆÊb²²ÈT…ˆê£ â’Š) ¡Jj¢£Yô )²DQI’†k›ÓÉC'"»€F³JÕ(¸á„ÆÑ=4g„§^S,F˦¡æâÅÉ*½„ö¡A=71-¡Ò°Pí¡¦)™¨'õÛ‰Þ¥j°D. sL\]­Kª!ê!ˆx"‘MæœJä’¤(a#D& IÔHæá›ƒeDÒÀ‚‘ï>Üûè}øqP¥Z¸-Æ0††  Òá*Ý´‰t:"ÚÕ&4 âôÀC"ð‚â#‚!=‰Šbæ8Í£{ïÞAUÔG©\Œ6’7qšH Õ9É$€OclŽÍ¢-÷£jŒ<’J´¹¯ÌSRdE^šþYè³ÑÊRþä-ãÍFvâñ“ðÔçÚ·ú}\òåÁÇÕø¿vöùþlìëÉ¥j eD%5l_a¼ Ž<#­^ù´)»]v?4®JE”Ñ1ß³¢¤°÷Ψè þ„´B錠÷Æý KÌ…–ñúÓ#u y‚2arØÂTrn­8¸7x†¢s<îrËv[ÒóB¡”Ü|™Ú¡Øj¼áí/9‚}ŠN²dÕ†L˜'BAƒÚá1T¿S"?>êù’ž¾#giS¸ö‹|³ÚŽãjÄÔ cÄ8m»Ú÷¿lœ¯AÈÆIf<¨wovÿòlÿ­ëöcí]}ðù§7¼„§ß÷¿»†¯.xž‘„žò°£8åœtCó›Qà1§:®©ß)ýÊ é‚åÿ¶=”ý¡\¾[m_Ÿ•WÔÍM‚ÞiçpCªûÖ/{¯]¯ä–ŒädÅ21Q½pÈŒy;éöž’ŽÕ<`"):¡JÌXкócÖû2/žŸVuºg"­f,Éä>—ÛZ[*òÄ´¶Q-7ÕîÒȷý…§¹‡)*¤9ì,lS§<ô>ûdeÌI£gSÒZÓgÒëˆcÔRϪ:pb„á-"Ûc飅 ƒ„˜VÑlªæê¨'m"Ùˆ¤f1p8£‹IÒ†Ulöž‚ä#u.ê0tº€·6CÇ@ª9BÅÂ׈jhB²™aJ–¢ÉP‰ðÒE‘*É#eJ%$¡ ª:,$eO)ĺ¸úp$oHUF[•dš7ª3>=v/·€"ÙF²P‡eˆŽPQä‘›ˆîîŒæÞ›ËQ%º,E”õ!]=RuÍ.`:F´§z΢“‹9Œ¡B„~=Zé#¹˜Œ(ñ˜(×…NTz÷j=$eÂEÔÄ’æl«$ë&㨥jŠljà>ÕaÖ¨·Ã–Ûc ,pÒ`®ÛØ)2ÏFߎ1©/ÍHJö&ñLZü éÍTû<*žîê6¾\vËùß\–O}5bÍa­»7¡îvÂÞ&JÛ¶Gé^»sWÝŠ}QX¿RÝ’£F¾ºòÌ£4:€ 7"3 i…M <(Ö‘¶Yјˮ+wÄv´½Ã?Š©óÔ¶ï7—鬦Ik×¶òŸ:;òér1ÆõêîuÓ/kN»2_I‚i¾×¤,B‡æ˜ãG&%3Åæ÷RžŸ5™ÆœŽš{yöé*Y°>ú}Ynìý¾,œB«‰)3)ɉÊñáÕ‡›íñM†K._\_ýíÌîßeoø®‡àOÏØfÊ9õ¯M›¸æÝ9Ÿt hG)! ëõ¢'ƒÔ3ê†Ûs¦–7KÿëpÆ«Œž³ºAßðúˆÖ~<ë7Ì0g¬Á ìš8G;©S ]Ù hÛûí¥=¯¥¹G“´ç ¾Ã–ƒ-¬6YR[V‡¦;O§¯çòò¤¼€©ä™Ô}ë4ПãçIÄ*G+ž6á?ðq9Êaxo²ï…E)i÷ yf=-†hα›Ù— 61„. ÁtPÞ5éÕ ¢I¦{]ˆü‰¥¤XUòÑ–ºyR{Ù¶QÜsüxðÓ=õÒtî:¹*ÿ*ôŠô§cSbÊ9‰æ˜]s/£§1Äz°éHë*šDüqÁ¦Z ߪ&,ªBÄrº r¨¸‹†û¨µ÷ÅÇðHXZ©¨…QƒaˆÑÍŠªHаê²DJL®Ù\²;Ý=†:ÌÃpk#je„²$EµjN˜i$„¤¨©e!‘ƒ—RŒÔ‘ð¨ajo•[+¨&NŠ—c§ S–U2.ÖDB‚>bh,êÍÃ’Úi*ª))Ì=… aŠ©«¸H„Šâ6‹ÅUFˆt‘¡ÙGºw?¸,""²±!AÒá¡=èƒî2‰‘×1¼Å=ÝÑ‚ä† I˜¢b!CÜ} ¥ œÏ£%¼ktgàU!ª¤”QÅT&S+QUÚZF×eèDÈ£§ÒÌŽbK×ã[ÉËí J«SPnOËzgg{ÖDþ‘ô¢c²T€B ÿ‘ú3¹ÝºL.¤ã°Þtd&_6ñNì}>YËêìÿáím~$Ë®k¿µöÞçÜ™•UÑUÝ™¤¨-¡ ° ă~„a$àÉ#ÞÄÐÈÿÛ>AŽ…ðD@jàÆ{BJ"»¥¨¯ÌŒ¸çœ½·Q¤H}QÏÇ4‹ˆÈ»âì½ÖoM^¿>©õ@}Š*EžéÅŸ´O<Ƨ²=èÅ@–Þkxí òáª.?åi o$~º ÛÆj›Qép¸€ hÂ{Ä<0)¦ ¤¢œà¬ù Àã.i‰­÷Rò¦ñ0Æ­”¨ #ľóÜ÷{øÅ¡h/9:yÈhûÑ?õ»’€¡Uï5ö* ä~t8ÑbÀü„Õ‚ußMu?™»å¢\„®¯3¿ë8.Zz1ßa޽}HöÈíãðCÈ ”}Áx³}lÛÇëú?£áòûÚïÿ?iÃ?â½¼Âô ÕPÇoí~ó1Þá~Â*‚¬3JEÈ=ê5–;€é[X¶ˆ²»}º¹Âë¯~‹f!ö[+è?ÿ]—ù%ð#à—_a<½Æ|^ƒÀ˜ÞíbÚ£`e0ƒtø‚îÀÕ! Kë½ÚAžÁ&D‡¼¿ÿ/LßìøG{®^=ÚïotþI–ÏF>_·Ù:|? ýcƒñòÝ­¼ßÍýSYmqºO1Êö„7³¬Ü2Mû%U+…Ž(¾—DMÔ€¢#^éØZ/ö¾Bª^:Ö.ëEVKÕ×"?@^&DäèhS–™‚ìs6Q…âxˆºÕã$CjAæ6°ë6BGJ#TaÚÔ4)ÊN–œD!ä€zh©.¹¸ (¡¤02Eù Œ3œá}´Å*µP-gBbhD.¢Ý$…QÖþ¨¸JÎK Ia”YDh­d”¦H”L%@$è™ÔsœZ@'P¥PCª’")BdäßÁ§DqEJ‹<ň€?,⪠$räHͳ)m@I›í£o¥f¶L¤Uib0T,B¨FôL ³‘(,©9! ¥ª6™ŒkNÃR„NM_©ÚƼ|°©¿-å}™ãRçO¡¯Ün»ü,åOÄ–H˜-)MÌmŠ÷“Î)÷­Šâ ¹¦O«®3gžd¾"müBô\C¸¹’ª¶FWmkPþTòfô¶tÈcÓÍ·+;UŽF—Ýø´,} HéÀû‚¿ÜÙ·ö±Ïf¡„ʆrñ±â-Èjð|Eß¶V²^ZV iëDSH`ôâUæ–(7èÿòÖˆeìÊØç.ðÈw‡4”úêphŸ¡\‰0´@ïXôý¹\ s{¥Ë¶<+ºº90o7:Þ_ÿë¨óhïÛ}?aŸð~…f»{ÙOOQ+ò ìYQ «x¿£•ù{õÙ¦®û^‰_쮾Ú__wÀýÿmø×›Jÿþùÿ€;t×Ï ­@+X~°ýM9y}…çGAýí m…“âE"/çµÌ5bój³ÞF-?n7o—®oq÷‘fñriB Ô¾À“/Ç•ÿ›k<»û($o®ñ¶bõCÔ¾xeï¶ùU±¯nrwˆ~›+ ‹<àøíÛûÄä;‘½+VOÌQó§¨{òÕÐT¹¼ÈúÜÆÕêþ"ʃO»<ísœað÷à/ ˜¾,òy•«ºÜk»˜Új½é›’±U®U„*¹j‡0)ª@2Û…[êטe8Q Õk Ꟁñ´AvÄSæ ¨h:RŠ`Ǻ×2úò!ÇZ2m@JqÒ;šK«ŽZŒ8/Û‚Å1)áQ^HW„ SbðbääTWhB‚bÇôG‰+xðôˆS…Ï``U¤9Ò<ÙG2#tQéækP›H*S•çŽ *€ŒLw¼W]eY§iIJHv0‚PB>P.“*R´”:UÐ$MPˆšœ2$âÔd•rI«:­´^‚%úf Ç|g@L„©tUЦ a(šÌ4¡P,”ÎHú¹ÓRSŒiröDŠD=ÀLMˆ 05Á”U šDz<—ËH,ºh|ö]Ç:ã’¨’V¢ <ÄÝÅGAæ9TDvjdœq^’)¡„xˆ—@|ÌщR†`¨{Õ%!žÖ 3DÆ Åסùº@BEÖæYt¯±h¨Åš_‹ö]M8ˆ7‘0«*­ðMÊÏ ]8û½&z‚mÔR§±‘iÊ2mL@ïßâ —Õ1É:r•¨”ø €ø…üÄxpElº¯ò®â®Æ5xWðÃç —<ª/ÂèÿÝí«}6ïâjÏøL«o0È@¬ ½@ `äö$Û¶]:›¬Õ%+uޕǽ-('ä¼Üú\Ë}[ÞA®ÑÙöãœÐØÉÕ­~|µöo€Óä„:ŠfèÄCîV¾×¿ Ûéz«ÕæF@y:¬Nxjž¦€ÃÞOïßã~`ÞêþKâG†_¿×‹àú 8Ð eö}uS¶M/P£ÙÔå¸?§3Bü¿t¦ô­¢ÿZjÁ[׿¶I/;ÞžO KÇÛ»ZNÞ00]ay‡·ÏðtÂ#Q x… `ž`[e¨§ß$ÊÞ}$›.Ц˜'ýxÙ_üÆdéïùHŸWxVðìÅÇ þŸ <-x’(ckØ jG‹ã V€Àé¾y‡·_¼ÄÀV8P°¬'Ô¨@Îß±Õ3³ùÅÀÌ1?œJ ¬¶%ô¦ñ r›‰¸/1½ÙÛoô]ã_˜_³Wyò­Ü<­ÓªXýwä%ëFYDjùWÀpýwÌnú0奎1Äš¤IÝÃÀØ3oÐÁ*½±v-{ÍW©ŸhU!6V €:8&©Ó©úTm–é¿…œÖhEm–’©58q¼ÑOÒFôÁе¬jbMeˆˆ1÷Èž-²Ó¥B' $4 ~î_k1Ľ ëe1ŠNžÚSe ?©0¥5ƒjj¥Ô:MEM@!i%`Ésg<¦L Œ½ÀÅ=&ÀÞB¿„_ã´?>œ6ÈUÑ욇Øüަ™Iþqhàw˜PÏÏ¿C;Ä ðë Aýè¯ßý9yYðú¸ÇgˆE⢠^ãYÝÍRÌkÏŠ†é¡¼¼Û½Æþ à©cZpQP滆Ýáàø>võóýøÏo_àb̨†i 0¬ þ+Å7uÙ¥úu;|@ie›ýâˆÀíð_¸ÁåÀ<ÃW…9¦À´B)ÿKÌ¥TÓxi!®âº=i}M)HúAâúCÜ]Ö/jꓬ›.µÃ_pTê$"‘ñù*qKCAäü ¶›2ÛꢮhY´­XB9¤ Lþ ù]ÇMæ6¨AºñQ&×Pa•õò~+rˆðÙ¥Bþ7«bxœ©UP(ºàÌ­sã0ÕMQ8Ó¢V¤Â"±d~ CVa%`–H ‚Ì€ÀÃ`0ºÊ"²@ S}°¥k“âBŠ¡Ĉ Cà`4®¢PTM/kEq"Q5¤iŒŒpæ1ô3©YÖR¦©–b$3#{È 9KWIB5¼:%iuäH(S™EÜ€ Uˆ$„a5Ä¡â©$äpM@T9 MRHI ’z®‚c@Áâ$dP —Àª³I,ð÷#ŠÿÞô‰ÙFmöT¸# ây“:!&0™#‡ƒׂj,PMpäXF€Èž'É¢ª¢R¤Ø)½'Œ‚Pq¥dFÃðôTN-£–&QHµËò6ç¿dÛ¢ÀŽHG¼ 2 3l‚ògH‡Ÿ þ#Áú“\ÿlL7ÁÏ"²q ï2j3u¤š£Ó¢JÌÒ2ó;Éz“Ö{|v!9ÐÆŸN`‡¨«Å>ø±ó› MYÑ T]óÃòbXýT¾ÚâEå±™!¬Cï n>²ö2w}Ùç jû ÞLÞÜñ(HBüï]‚ÉE©ãvˆuÇE -V‹Ôþ9ý¬u¿ÁØ„M˜ªž|Âz­A X‡*’[ä6¬º5lÀ‹?­¸ÑÚ­uél{Þƒª{ôyï@3¼¯¸/ø±à1wÌŽ¼‡;FÁæêå 8V¼¿Â±Þ¶ ºó±Ÿò€v‡#þËsÑ?:S†îþ>4ð/hþAÈ`^¼þµ`|õÑ_ôçwÿ¢œxÝ/âË#`øÑ:^ÜA¸7ܰ5Äû&¿è¯±y~‘/QˆB(P¤w˜zýêòn;^ìû7qqÞ¶cC#JŲ‚L(犣à“À‚ýè7è­Ý¡]·wÛþçWû—k¼>c«Ž€ã)ðx²@î1câ(Sp–°”ª^ÙBZŸœõëI £¬mW°w €© ñÖül7þ»ç†K»º’ dy _:è43ýüNž3À†P ~‡O¯¨—«YdÆ$u¡oRFêI„kÉ•Çï¦.:„o4?Ð7ÀVÉY X!Ë->ÙyÇè¿oü•?7¢sÚÙ¬0“QÒµ,0&jh™UÄÂT)¦D‰šÍÛ»‡ÎißÌê9i˜¬8häQÌ2%™La’U˜ÊúZ-ZqL\—ª¢Šd¸L¦Ó²HÊÙö³bN:…¢!ÅÂßÁ3ƒ˜Ò sµu-³™™AÒƒ#!bnʬîB— !ÂÂ5zfcc¤ 3˜I§R#5AA"ÓÒN¤h¢’š$ÚyaOVòl•sðÃ?–D@ dŠQxn““.q:#?5.”&º–2‰ZFHfqL)YqO*Õ —‰õäðÁ$‹‘‰€‡ŒÞN&‡H–LQQMKjp„z †Å@•™­£S²¤¦©QÁäÇñ—œ[Œ¸õÓ¤R‡[_˜ÑÇq_gX@ Ad"ð„1 3B6°,Að$îrŒ\“JDÞªÍ+r¥#ˆû©?p¾ìk\Mòh’Qm)–;ÐP¶n£§-Ÿý²ln±ù÷ÝJQc¢Ú3ÄTðU•w•0-¬ïønÏ/ e—²{%±Õ((7’Åí*«äU]ô7´e¨¤o k…=•y.³ØDU2Ifœ+J­Ð@ë”Hž’né-GŽîcÁh‚áBÏÐH$%¡‘çBaål†uœ¡ê’ Bªª(μ?£ˆ0 Gœ7Óg3‘2" R…d&Ùè¢%tTñE "¢g¨¹gö£n(G ‚Gp ÉrJi7f¤{ôˆÑ‘ UÅ[dDE)’`R"›#žYä%hCóº¢hDªh(ƒÑHC†‘µûEôL79‰¹õ¿6?œCH6C& ¢%zA?íh{ˆG4ìßòf°ELêû‰ÿYøà3¤x¤Ÿæ²69×P¯zÔéC-—ÓT›anmb_ŸöÕndÚ¦VY5çÖP<4â—À· ê³})7¹CýZý*.³»WÄ6Ÿ—<ÝdÙ¤Nuî ŠMCÍ[àñ§~\uð’˜Ê޾Ç™Ãáh—Ð 58 Ùà»±ÓÓÞ§G<þ øå¯Ü:×K­·6üXMCéA3°ý]3¥·¿lðÖ>é–òª]oqWn–ëÃkÜþfçÁ@ í+,Àëk|q÷ñOßý |ùð%Þ~¼€¯0êmxܾŸîPú9ÊPpì˜ßÁÚxø!ìÙncEP-«ÐBÙ1ö²F|ƒeƒQ±žP€Uš£9êý훆ÿôùÎ>Ý?]a"¾ üÍÀ—Ž—¼®øî3 …/`Âïïá_büHÛ÷¸éþ0î»eêÅ/ÕþŒ²ÐÆQëF{„> Ë.®¶¼ÜNÛÕ|©uòÂZ6—ãqý òIaÝ ŽÝOE“m©« ª!¤DÒ;òïÒ·>NcHÞíqð=mn‰q ]æE—÷)Õû6²*¡ ÓävÈÊÊ“r¹.剮6¬“˜ˆ"Á8—Ä2(¤Z©S± ‹B 9\z2rqÂÔtŒŽAfZøÀZh‰y5(ÔP˜°Â,È‘áƒÙ%z‹2K]³X1ÚVÀÈH´ðóT‚¥ŠÖ„@é ´R²ššÎ€ûøÁ«Œg!3mV-ªB#pŽ˜¢L(J-`ä\æC÷ÕæMzÏ‘6„ŽqšÓ˜šù±üQP(a@PÄ Ò%S(ÔJ-4MMj@ÈsƒÐÇA“D R$HžÁ €d-³*f²‘Ñ¡–¢Iæ¹ -“aÔIiùqO`z2€8Cr‡ˆ!È1tq!ˆ! GÉ# DÐSÈg­ BR˜@“P„ ¢ „dcØ@I¯±t{ñ)_çfϾ“i/ Rõ•ç66%Æãáv1ópҚ΄˜±‰]ä‘R‡Í-r…ÒªVK3-°òFK®X6ÚWr˜bgçä‚ÕÅ ,ü ¤Hc|âh°Óù0Ù¶¯'eñ¹Ê‡-_€ï¶ù¦Â2Jä¬ÐZ JúޱÇq—_uþ?Vý Óo/&µ_:´u¶ðî±×Ž´OUK™á,ö»gSYÊô-Áyp ´@*lÂ$–CŒZúzðòòÉ>7‹W”m”¸É8°ßfàÞþêµnŸ·Òô攌ۘŸ¡ jEd·¨„䫹l})Ž,‡üÛÛOÞaÿîsÜ_á¾`zçï~—6ü=°ÚÐ*:P ú¯†Kÿ¤÷ôåo?ÇË+¼^ዊÓ@éÛ†íÃçuùV{{ÎÞ}OíW¨¿†û_‡Ôîðø=`âs¬Ï5§?Ä—+`Æ&äy˜óf¯ïPÏüÛ+ä3ˆA: N×ð‚°½Õ›ÚZr´Së2íÓ y†x‘(‰Ùaè÷P :p‡×?Üÿxë³¢ž\ŸÐÏŸc¹Ä£ ,¨8òc‡Ü qè x[æ°œa óÔw°µUi§Çìo‘'ä—ÈÏ_ñÓ-ʥȼž¯ê\§©5wjúê?»<…¿!7ž£D6éß¡ü´ë¦‡™†5ÈìH\ ðøIÚéþø°s…æp÷2Žóß=VÜëÓÿ0& ÿiÎsN“°@7´Ë¡Õ¸ÑÕZ«ƒV?‡Þ„*J"!NÐ1RTÍR'ÂHãð<`¸N6Á /ô¡AxZÑ HZÂÒ%ASé $"áéÑZª5i) ATd•(™D†$]€”¬P‚âÉ¡U£ZU5PÅ(±Î¸TjƒD" *XÈ"0ƒž ÎwËC<ÃÃĨ*"lG±Ž³ ˆ‹’t‘u‘"*<0A’T˜‘ P&ê”"Ô8·Ldè“Ç’%”©‰ó$4¤p¢mPeɶ8"…¤P›1I£,J£0¬Œ˜‚n‰X[b ;BUHŠI9²Œs]˜:¥çùÿ9 s =’äð³9 T$èðᢠ¡s§ªGv÷eô%E4íR¢~ÖpÓ¬Ü`¢ß6Û…o‡m9WôÆå®>î§ùÖpcóKYÓM¶êux+í¡buÙëÄ!)ê1 4´ 9J~m@‰ý*P’7-…mžû"÷Ù¾uá:-HGóÓ>çÝÉ|ó¼DÕ–+ýäù8,Š*ßÔ,Í'd$ÖAmâ]bcì±¹ñ£a§&¥Ì’ROa§–à è#t>Ô©E¦ 85~Óõ;Lƒ·½ dÂÅçôŒÛxĪì|µ×Y€†,*ŠnE¶nµ× Pž oíÛSEiϰžUˆá°>4bÐi[ÄÖïëxhqrï@àê ÏðÎãŸX*Û?1ºC{ñ‘Bú~Û»“"ùmaø'ŒLWxý ˜ðØ.¨§][•Ã÷ëßÖúú P °ûÑ´ŸŽ¨À 8÷ÀðóßP¦ù@\Ïð{†/$¾ ˜xD~ƒÇ;Tàñ›XQ/Èk”;øäb ãÀ~*§=ÇÁ·0…­ —@žPˆìˆGø{¸bºBÿÿSÁ'¶û¤ì«Á–» ûSEÛà0ãk$.Ö`.¡Š^àŽÛ†WÕ¿Ó?Œ¬Û´W—}”Ç"¥ŠjÅeÁØ¿Þ;vò­­o·v¹Ù¬gCÙD­FdŽ‘Ë‚ˆò‹®—êƒíï’]˶ÌÛTÔ"]¥gMzdIïD šŒ^Û8∶tœêj¢Ìrâìòâ¯í—Ào¿âåÕx2•y­³Õ©²Öu)³M+²*(è OÏ$•ªU4éÑ@$£9µ',SºÃ[Äãàc—cœÙr2Ð=½¡/’+“ NƒgrCxŒ ³ i*} ‰ˆŽ€Š0G†8 ¤°ž˜ŠHG ¼EŠªˆ¨P’’‚sQ% ´RMeæƒK&á)@R@s-¨€äc™`å|ÌD8Òà±/çñl øOðO¡;‘"R¥Wœà(9v3ð"ñåõcýr®p¼Š"«ÝªîŸkÃDÀ0iˆºc+yªu8$ æÝôb¯+;Ø>+Ž¿2”þŽ™’W€pƒØ%”PETÀÅ6×+,õít‚ÄŸêrƒseVmžO ß¾ÉëËñôRÖ:¯6³j¥Mgî|ˆ4PC¾=Éð:šä„<"ªN›R$ ºhG §¦d*„k"¤lUæ{ëYÑVTêÔʪÛêkyºÇ^|GWS¬fÊ\6S½(óÚ¦2™V ËæÑb ¶H/ˆ¨¤ B¤+rxé>GËSºh;y<ŒñÞÕnbP$Iü>x‚0Ó2‚Ñ ¥Ø€”Ì9R˜ƒlI‡’Έ£ã¢÷#]"4J*¨H‚• 2…D†P±"ÓD)-£ŽHBDHJŠºÈy™,ÈD&B#œAb]r$¦Ô€5ªš€ˆ@2E"5ÈAR(ƒ˜‚IP(r>D¤†EDS5TB’yv7%ÍÉ2=Ù™É &"#À ¥ˆ"Ò%ƒ`‰Ì œI|1‰tšˆ©$ “ûHvð ¡EX‚È=¯ %‹ (¥¦H gvú9²=<…>F`Â4–’ +’¡92Ï?`†F@4ˆ E²FcvÙtýý«Ñ{È<|íÌ刱âô"ÕV"e˜ô1HŸ]•VÖ80W…[¦#µ´½;œ{låV°EÖ‘92Cs³¹r.bp¹õÄnÖ=e‡ZFàÔ|)Ág–ã%™ÿ{“Œ‰®â2…O‡ÒЛû©Ó© ³B ™õð$3 =ãÔ=޾o‚:£x„Ÿ¹;e@6èqßö7y½u©îÍ.QX`„ šÂ‘ ùñö=DÂKÀÀ;à{;Á^Û²P£jħ&%çþ\êíK´mjRö+Ú˜*ˆÄN@){Ä W­Ë'm\õ§±×Ó+ùz›½`ÜtDŒ?ký_¡ ØWP ¯1Ý}”{®—ô7FIÏ%ç5ÃË;¼~ ¼žРOÀ'‡ …Å%üÃÓqØjÇü»CÀ+`‹Ï ®nðü€é¶ñƒ4ŒâuÅËGLoP7à ?„ðøó;`.ÈŽÓ;àíîUÇ–­Lq3]Vw·ÄÞ¯! ^`5P © Ñ>àt¿Çe ЊRaº}Û›«Užƒ,ƒY¼N´™µ@PdȨ‘Š“ºx˜6ð”?w±Ùë¸QÑIÎiáüé¯p9‚–«u™­–¢uS뺮6V‹ŠŒÈ̾¸G$È(™Šˆ¤CâìEÊ{—Óä(£ùr£a3u©e‚ æ×™ßIƒ©z’\!˜C´x’ÁaÖƒ0§žŠ6aÉ”`º¸ò(! § (Ö” ±3 ™`JJ$Á„$*¥°›ÌL© I"¦ÇÙùŽt•˜GH€ˆl¤%«ÙºªŠ %Ï7Î@Šœ_™A"EI3™> žŠ ‘K2ÈD&JòœÐÍðHw#Ó3› “gÃ+RÈ4d0✰QM*„Š)T’Nq(Š"Áð! Ÿ)¬ †Hj¥©é¿âñÅ`dH’6"0ç£@ÉÈÄÀ)LÍ å”VóâY—ÁêŒ>²“Cðªz”𹼫¥¥XÓUjÏè‚B…˜-'˜¹dŠ+œmWÆ>Ÿ"‰a»…NQƒŒ3D݆«1zAì|þ˜e«}_ªûԛԦł=tŠ“Ä4 ¯^µ­†£µw?sè»<}ß˽¼ yuôRÞïX÷ÓÕNd¿ÖãûÕ3“ß<žþì~ÆØàJw}µGà{¤î8€ã~¼Ù9ŠßU}Qí)Ô‹q‡ØgÇê ª¢+Ë$POÀ„Ç„'êÕ«²ÛêÏKÁ ÿê_ü¿.2w)³mÓ:ÕöY]ÀëQ6ÞŸN‡Ù0+Б qüc \à€À°r_ú7~øƒ@ÇvµÙÆûÍã¼+§û~³øáwhëk¼¸ûhÝYÝáø·ÀÃ5âî·ü©?VÀå9ûü9Ú–‚×/o€‚·Ÿ\¡NCU" )==Õµ#G`ZÄãÒùh¡ëàPMt+iz&휺vNs}Q"éKñ`fO-@ H'°!Ù%„1A Ö¥ Ñbˆ‘,Ñ%SP˜… 1“µÊ´A„‘DÐÔÔ B!ÁB+fVL­‚HQ$=˜1Î{”TAÂLw97‚åÐ R*‰l™‘H5-2©%=¼!™‘© ©æÇ:JR™<,’j/ ‰ä0™rÎŒd¤*¡™#œž92BxVjM|´5eh@xæ¹tÁžÏ.àYLRDD"R™‰´¤®ÎLFA)R” fŽ7ýA¢l‘ -ˆrAx…ɰÁ!P®µ.ç*DyQ²ÂŽPÄ^ ‰nhÄñ»€'ösGwpAۣ˱_ߊ´…K[ò±½o5?nÛ¹SÓ@tDC>!p‚*Òà$BNUÁM™Ï=?>É¿âò䨔íqS>6}ac¢OQ0ÐFÑ„‡S­ ÛÐKˆR+±^äéͱᶴäÙs×y†T”ù®ðPðC¥rÌ ‹reWõ¦èËFu#R’ßÙ˜ž}`ièž]<ðî)Ò-/ÉÎPqIÈÐs÷o† ò©Ê„º1©ì4M€ˆ&™‰ Q±^35R…’y‡g„Z°7à^ UÕ0-ºêg¡ IAKXjZ¡Â¢¬´‰B‡ щPZU1û0*Eh&Õhk”…"‰F"M¥(T!âéÈ`taÏÕ¢¬¤ª‚èžRtÝ3j‘™>Ô3Œ$?DÕb•Ю¢V’ò!h0õƒóM*!"É ‚™ž‘t™.ð¤Ð?H–"ÜÁdz„'˜ŒpGP¼¨‹{"»ð ¤B(Ib„¢d]K™™0¡QšP$E“j ¨HtfK2œá:†øx’z`T a"«> ‘„µÆdƒˆT‘d&è”<ÏŽ§á_/(¥¸™ˆm¦¤Œ*>–BY¥IŒì9ήgYNyTˆ@ƒ¨¤@*‚-yR¼ÄC÷rZ$6‚’`ˆqFC.½8¶ÕF… ‘ãrNºû|î ò>bŒŽ&ûsî3«7Lµýôê~Ôþ÷ãôײŸm¿íujÍÆIýWœZ-Ê~›å1®ß£î 5èõ~Úîr@ÊŒ¿x¼àAyüÈŒ*qÛ%P~ 2a)ðŠeÆf‹˜Ð ¨‡‘%Æu3ºóu´—¿ðòk#$oùФ7Œ¾“£ŠC ž£À;¦GÔZ0¶†+àÒ1G&6Ž-ŽO¼ýÖò_^øçOÿA ÆB8ü?wÃôüƒ-€ìõ&Ãyà´ÁÍ ¬àùǘßaólí¤.ÿ·„ŒO?ÅsÅT°¿BYu”­Ô|W§†½-À!p\°o>9–›Û}i7Ïñ_²Q?’?ÞÆöLùÇ ÿå[Ü!ðBð‘b˜ â°à8Ã×3~Ü‘7¸ža[¨`Ë£Æíc¶yÆŒFô>» ¾…ÂðXp¾nØ^s@6ˆ§Ž¶Áýîð~ÕN×È{¹ðýÈåY)S/ói*‡ Œ'ä×ÐõoeÈcF/(õnL5¤•h/`Ÿ ãPò˜Wàt€Eš0]¡ÉHÍ Ù]>:R1ôUú+fhM)™"Ã#h%²`‰‘qazofV\9–Vn'ÅÝXS@³h¢‚;¯µÔm)›¢“®"!1² O¶‘­kËÚ„’£çšu½´\a4¤"³ÁkbXKU)R•jY”á …Z`%é ¤PtÜ3-3ÆÀÆAO.™ÃÇÎ#HA7i$ ÏLIi‹4H…*RÖδŒ3n@¡# DXd•R E ‰’á ©µ°Q@žêHψ„¨*¡R áé@MME€H&UÈHÉÕ±Mâ»÷c¬iFÁ•vARÖƒþCN+Z‡Lbí|CE@JôH‡;3Ç€x"ÇÊŒ Ã×–%a*R<ª¦%ÂÃ=5\‘]$Wé¬(eÝŠ+ò¥JC°†ŽÒ­e\Ô°°¨…$zÂ2ÈUûªN-R“ÉTC˜A–L_šYò¤Ù£eS~O8#¦®³`kÍÐÀAš[ê»À™ñw®y*`= mƒ=Í(=´eÍ_±°Þûç4l =´þÑW©D…6s,KTŽ ®‰úÔØ…Ç'–(—§ê¨mie{ÿÑô8Õßü™6YvQ7Q5aEË!ä¨v+Ø/}; }²i~¨~]³ÖRK­tŒÒóÙ55ZG~¯öÔl–úlÈ¥ë/)¿ÝŽ;ˆ5`RÖ#´`cG‘[+Å ýÅì.TÇ4Nö ürÛ{ÖfÔ Ì ×¸šÑ ”'<«(Wx± 0œÖZâŽ]  O>ˆOæ?y«·í»÷ÿïݰT<½`~ zA3,wÀOwØ\A0 VÛ[<}Œÿí? ž+ö/P 3aOÇòp[¤ñ+èÍÑ tàà ¦—§«-ðîË‹gãêb»§öùïùˆ'ü7‰Ø^°»‚µ71öÛKy·_—“ánC, Àfl&LKxžf ô¢èÓ¨XK¢48Ð_%߸^0 âúð˜ÇG¼ù×Íc»}_꟨oû¼ïùû°;ú¡ËqcÀ:øûú-øâ5r®8¿Â"o„û+/*úÆëË›ü£}©%žßÆæ4æ»'ùs_b¢[xô‘.dÚ§üª ýÊ9•4IBVS˜@Áž¾ôþ4²« 7Kù2â{½Z” g- x#ø³ z)ÓeÙ˜Vª@ ²­M2TfZPzA¦J2Ü12<âÌá[Fª3}Ñ`È6J¥!ÒS$ ’êA&],E¡FI”®Ã%„ ×LJæ%EDõŒt83Æ@©ô2B" ˆ*©º«"™™éŽÚ ªf‘`¤d½’•jXý‚J!D HT¢(Õ”d)Z,E"bŒtb²¦­ãϤ˜E<ÐVÀçC!q0…¬EI˜d‚!„D$|Õs!&ùay$ü½m! IDAT°®õ›ÐH®ë!“™ \¬¶<„-Ó9HRƒâª t0ŒTR…š'Â@"FzAh•Q4DÂSF2Ö%†ÌBª¨RÄ9’=Á:zgo9•'ØMèâ˜a3’*1²‹ÂBx¡¸yö¬Km¢eß üi,5½ €)¸܉PQXŠª«jó”³â·g !/Ȥ@íxžn“­&Ffñ¾•#ìæÞ·¥ã¶ŸOçé ®Å1)¤Á<¶gáŽ!éXFù·ËÔ¼ß7މ Å%~ûÎ[ixïmýUü¦ÈãNnËÜ,QÑ] ‡ÎY§”šòýs‰ÂV⾈neéÈÒ&¹·"‚W—ó&K;[ÏlÛ«®ÏÎmóƒÚîø X1™`ÇÔ)\ÂåÒ­ÆN‡âѯ‡«§#ÎèçÏððOÀ *ôõ6 xº &¸`³F%âºàëÄuÇÐ×;S|Ž_üu—«·å øC|÷ ˜Ö^L Œe@€ÿË\W9â5Ú[<߬¦‰kÀðÓ¦kÔ @ø\NùÙªêþú´êjw€½†Ôùn»…á|ÜõÜ•ËÕvžvÒÿòñúÛ§ƒÉqZ`X¢êž—}?×DëŽ{âÞMÁ€R¡ ç]MhÔQш¯Å $qåø²ãÏÝôFë¾±<ùíIv¯ûŸÊî'Yž96ýÁž¢?@þý'G¸à HÇô{àúþ £`\á¼Á}=\Ê~ZöYëÖ‰l`îëÓ+î8këŠÅƒÞÂÕû¦›´® xï²C¶B;D…ëV媠®ÃŽp§‰H¿èã ý?Ä€ ÛltÖ³ê>†²N¾Ýj=ÜKÿ…â#ŒWàV¦–Ù¦¹LXÉ$<]$™9ØF¢‹•Y+1AMÈÌNÅÏÂXÀî^˜‰ «< /Öµ¤« –teØŠ†h! Áq«.±zÄÜÙ‘iZ”!b’#92veFdóÈæ#+W%½‰õ¸Nœ ’Z%¹v®©@J*+QÆÒT )NMSU1[Õæ©ÌḆö ¨©Eõq 92#==2Eåêh ƒ 0€,LÿPN˜k§Ú†aµM¯Ï RVjš †'$¤Ü "dè=>…(H¡$Òµ+;³'!¢Laˆ$[Ub‘™:˜™)FÛ˜›D"GÏe¬XÖj³‘”„d"‚Có[;ÿ˜'•v}?â#²¡$|‚˜ˆ†@áùëÆ[£¨UpÓgœ_æxsyÚöï~Vóz[ …ðàtP=Úª}›1$Ð! 8ak€á@M cîÿzùu8d•‰âðvÃgOÀ#~úî»ìÒwøøË‚}GÝ`3ÃˆŽ§·xþ øl-Qø+ø\ñ㊠¡¬¢ÒÏî&ŸÎ7ÇV€ñìê¨oÑ^¯à'T„Üð¾\f)â”®Ò$î7rÜ|¹¯‘óR4*°éWØÙâ—±ŒøÝí»Og¹ Ã̆ H‡]ŽÞÐ .†â1ñqÇ•Cªà‰h(ó=¦WÙé™O‹þå¦>Û}-Ï2·!DªÝúæ˜ùóž¿é ¸‡|ƒò|‰Üâqƒ®ozÙßã:0טÇ \JëÿÃüÍõ„«©«>m{ßißxß-[½Œ:ÔãR–@kxÑ Ñe+VEJI)lCÐCDò4ÕwÝþé|,ã—•›™×ê1PÒ è%¿'í©[p§Zlžt*¢LAzxŒ‹gOƒb¥*×Ë\Lºd€-ñ dHŒŒFIGƒœ‰^q'žRž¥¹K[z$%BFfW·ìE[2DTAf/pFqNJQ4†d8=4‚A/ n<º‘¥h!ÖäôHñG„$ÖWAj …&jjbÊʬ”DÜc5¼išQšP×|ê„ ¨ÕÏHBEš“Ê„‰u+dD`¤ÉšÒ!’ëìÏæ1¬Ád( *T¥|°^È sQ ]#`Ó¡ž©žèD$‚ɬDJ&a ‰if*˜™D$ ¨„ TDL 0é+y-J•d1­’«V5àRèE–µÒÎɦ0VtJiÒU­RÅR«Bdˆ…Dˆ{å(¡ëÆ… ‘’"fŽ,‚ ćf( 0%™Ž_d$Æ9ñûìß³¸*šjy9¦ƒ œwXV¹çŒP8ï.y{Ê«çs^Éô#ËAÙÊ,H\PBtd9Bö¨ß'7ÂÊtá%qNû²&&¼šåjëÅ<ÜêEJC“£ä¸Z~…ÇCùö¸UHØÑCî²BêÁõ¥û¾ð9tMd}Ú•aGOˆbR«J æ­fs?ÛúWuù#»,u«$1z=ÈÍQs‚¡&|:N ˆ|<ùl—9÷Ëï7ý8üg»|±)/ÜjDü›o[ßO½¨ÝÒN&wÓwÀ‚–`€9À1 ÆÀå p«Ï0p|Ç?¤aý§©­«Ûùó/ðÓט€úõØ ¤ tðœçk“ÏK`§3žê.8ŸÑÑÞa¼ÆÍ±}ŒGàùÀõZC”¯€èt(RÀÚg–lMå"xGž qôÀÓŒr}lò7º-ù‘d/Ì‹2êejzÁ¹âë†gWMÌãÀ§#¿ÂÓÇx·Ã#q"6Àu‡ ²!Ϧ¿Hûy…P½?¿¶‹.U­og›ˆ2…ܸÕÞŸ¿Òúoš ñ·zù¦¼ÿRý¨/ïÒŽsA•ýà~ÊÊVº-F;Kç?÷¸úX®J5ˆÇ>çñ¡X´,Û …zÌ-ìK,W˜vÔ?ÞoTEU,ášçì"[-·¢CÊïf=ö<Uí¦`#™Òé=8ºø¥Ê«‚ç¦Ï¡9%U´Pú¡Í$¼{k¡gà‰ÙßWx^¯âÈì(ÿ„ó[¬[¿ÿó+ü¯@ð— n ¯!o_߇íŽ2n9Z—Ú;7ûwˆcܘ·Ä“À+D0ʧ¥27²Eß”÷r9žïùfÏ=´\îoýëÓ¥ÜáÏÏ*®sM?Ý€$à2'Kë(}x*›”ê©&bMvŸ7é!o8 £Kî0 Wÿ?n¹k%o«£ˆ×µ\xY¶±èi\B2í6¶€¸xpà¦ŒÝæ=|ÊI»´… s'Ø’mÅôhZDDÖ®w„1“#µ¸X˜5 0ûóLB6b4ig]ºè×U~Rø\ËidEŠF"Ó2×ÔOv´%ó)yvÙ v.21’ôôpè"é¤(c #dl„ e›xÌåYòÛdG txFZž‡t‹fëÖȦ° £ÊË™äb1RRT‡é$™2èn=˜î¸ˆ“â(ÍÕ²º–RuJ­”5*¡Yf”IÖþ²ŒL_{kÅXÃ!C˜¡f Z‚+ê CÂ}ˆ®4ŠRr¤¬Ñ~LHfN]ts¶ÖŠôÚË8W§h2Q|XkÖstå>úÆ­"#0{pE%¶ÁTAŽcõÛŸ¹m|š æÅØ(Ã$&mWóØOZ'kfÀÒ2î¥E g9»tEæîÓ׬'`/cŸQ©W¨>¾œaåÿxŸ^»€_¾! m—I‹C‹cÐu@ ÃPèw òñÑ›éÙvUºNìå(Þo‰Ë](šÂ°oÁ'È8öúR¯ +ʳƟôÍ?-S¿j¨CÔ ¯ d©}ÔT½nzÈåH` ¸À•{}Ø©¬ \¿CŸ°Ýbž†˜ûwÃó×xñ»O€\>‚Oø øöé€<~R®nn¥œÊÏîtí|þËK|~ÌoÞLûY®ô¶lOwíc\Uà ðÌár¿¬ø6ߎã÷:ê[ÈOÁ4ÁzÒ@öíOýômKàf`7P:ðÏÈ?ÅS?,SË©_ÄÆ¸Ü„N3(¡¥–ú£<îˆ!Xt__Ý,ì»Æ×Ï¿‡»ò\1øi*1/ó’ŠÁXÒñt©roç_Ã~I{†-‘öµêó1vÛp‘Å삊íô}ð&8_ ì'ö®½%@Z˜_jÿ6P¶ßÖ¾§ö˜ç(†,!צ¿é×Q^&4rëxZЩÊKåL“*»@ ©!žÑ2–TâºÒNù„ø](Fý¹ˆøn9e ã2´þDêèm'Rºž˜ÃGé1‘Ù9šô÷ß‚ÿ\ëµ*')U­P툈d¤¨ÎÕQ†D¢Œä”6ÊØl(Wàì¤DOFÒA˜Š4Á%µ@˜¼!¹ ZA†Éª0ÊIJLC×Ö1œlq%a ”0å¬Z…×$%º˜”‰e’b†ÔD|o„$ €d$0+$I[ß¹FæQ™L˜AÖ&e V´hQ°&Ï1"ÁL€+õµæA ÅDL•BI’X¯õc=$„¢€ÐI¤ÓR %Uá"C-)îšðd ˆ‚Â(0J)E­¬Ê«á©Ë ©"U˜šCáH”Y±©R ÈXÆKŒÇ1édgŽ•ÐÀÊ$À±üÂÝGdëèOÊkGÏŠbN®/BH—+ Sê=ä1kQãœÅ΢áxA}9l—FqOýùAü¨ªA4(d\!¸H‰";I‰ä€xÉ~5VU+ ¢#àg÷ûBݧÏL=âô„Èxvê6}û‡vó·¨Àüö óVÞüw¾ÿ¢}ü÷eþéKì·b2òà öÏðéŒÏê^|•õª6c‚~Œ\½r/Q®Pë){xù–·¸9å'wü¡ZAÉ;8z?Œ~¼7œ žŸa(õˆgǧ~û~nÀ¶ÿåT$×yÔ¿ ÊÏëá§£Üôº•Z`I9 YÀO¡((±g짬?Ñv%ؼ¼@€á¸tÁùéx¿ ì;ò¬AÞâàgh3î;,NÑ0²ˆøuÍuHÅS™šž |fž•!fj…¥ˆH-¹¡lˆIQ bà ÷¨ªV5V‹r]FÏ#Ö Èz°“ ƒWŠH@I*3é’ék7…)L%$+¯ C˜!™Â“"ãCcóCæ%D~¸Å× {u‘}°Ì‘€ª 5…È´ˆÐϰ ÏáF§¸zaØ S)a&VEìƒ5P³B$AE¨w xZZÕ"emehR± ®ÕšP ‚£¡M‰ÌÈ|H,‚!pSÒÓÙÚê¦,tˆ ©®TX7Ô©Ã.¥?šœ½?DÿÛg»H‚>­†Œ†Ø:Ð ý }o,‰[áÉÇݲŽÝËí>õ zé8»ÿ>/=ÛI€ª€)tn>·ál§_µ<¢`”[QÐjÐxSñ 8»u ÿHì· ¨AO9-«â¬Á.—Gno¹…º\=I™›¯Ûînû_`w}96Ç· ìÖ…öñ%.߾ȟìùÃg&1ôRûHB\àr¼=G»¾nMFßDZ:Ú#p¯¿Â¯0þu‡¬øR+AÅwã#„ Ç1°]í0pýÔ5KEÙÍ¢v¹žúË›§ÓVî¶rRÅ(åþu¿{ú ø ø‹wø¨Ú1½ÃŒÿ»áÛì·˜f¨ÁÆA—›ºlŸýnúé;|~Ó€íÔcN0G™ ‘ÇXn7ïÀ¦>p¼ l:òü%i¥ôºóúH|ô¢ €c ð„ÞÐü÷ÿ€÷¯À‹·xÌßå÷µ‚ÓŽ«Ç» ôƒâÈö7‹–.É2SmêZ§­fPg·SÝ*5bØ#/ÁÞ~nx€î³â–8-¼»M¢äAÛÑò5ä-ø ÄÛDÀr²Ä‚¢e'Wï¨/D®©’ ‘ƒXöÞ%듨•Âd‘¡-ÎýûKᤓ“—-{º¾ð¸ª}SÊÆ²”4KÀCz&Âáˆ1–Æñmø»Qáé%bö±‘1œ™6Ì.2›un‚“ÙD­!SªQ&[ÇoZ„€jY 4kÊ5cÎ2Ô&™‚¦2›K‘ÄX¾•p2#™`r•,Z®½‰1pÇ‹ )ÐéˆËËg£¼¬”Éç µwåÀŠÝIâþê°Ôã¿öÿý[Ô/àòù3àÿoÉzÿ‰†µà3Ã_¯æËïþ¼=iÿ Ÿ#ðéË—QNMpµÉ*Šcì–“ŸŸ•þiO=õ‚Öaï`7gÈÍQp iÕAiiÝõH@Ø7‚ÑqÞÿ ÿ¾à­B¾€®«¬âñ ¿Wü¨ Û 6å@[€ŠyR½â6̤JKÌÎ&Ul*¦šnž _"^x{ÁrQZºtÜ\€ï”3ÊÓ‘ã ýo?¼÷—×p`& øÝÐCÃŽº^ÿ’e‹ú¤Rj/2&Œ©ÛÔwžsŠfÝ/ÀÒ2üì? Û5­7¦“ê܇ÄÄ²1¿n\C4cˆG¶AI&#z\åLÿ;Fù]Ú9vê¥,…C&“ÚS7&K­(à4°c˜zI7S*I âÐTLJìݺFäJI­J)Ê¢ZŠ (™£NÍf}°B¤Ckº‰®¦ÝE#\e-C®ç7-R(R V ‚T~Gè@!EáaBWŒPõ"ôÔðAɤQiŠª°ªS±R”&EEDVôBóÿ$ìm~$ËŽìÎsÌìÞ÷Ü="#ÓYU$»’"YM£†7ƒ‘ Z´³$´›ýóGi#hKô‚³k‰†C›jQ‚ ©£NªÅŽüˆwï^3›ÅõìÞ©€r‘Œ{ŸÙ9çw ôAÊËA¯†Ø‹+ý1‡â$¸¬xbHâAFf&šPuPTÉá ?H ‘‘1(IÈáõg‚9|¦:j'@P‡qUÆ;Šˆ¸H"¢Æaï] £?oÌ2(â"—°uÐÝ‘=‘‘IUQSˆÀð„Jˆ]~2 1˜P‘ ÑÝ-ó친ÉÐ*ÞKÄ@¤ë(¢“8"ÓƒI¬y°Ð ê•Ø^\Ê@û‰ ÌiAsŽ™mfŽ7:‰¤27£ŸŒá‘YÓn¼Y&`b¢rÿd_výŒUŠù؃Äoÿ—ü!d›Ú“ʼnGs9„!e}íÃíä‡+â·Ä¿z„ÞãÙ§À§˜ŸA¶´sE¸†O IDAT„â °L¸*˜><àa/‚«Àn{¿;ãº\g™«ÌSVÌ‹œníêÄvs8þ3È ^¼øÓ{,ß`}ƒ7¸L­Ó·÷¾Ðñ÷GhÇæx[ðŠõXß}õÔo׉½ìHƒû?½ž¿Bâ¶u8ï^bóúµ€œ€r?­0+7ÞÂòó„8Þö¯þ3è ¼4(ðì‚úFú ž|I„¡&F›äö¬+ž5+¶«˜3pŠ,ĶyM5FIŒ¬Qµ¬óq÷þ] gi\sãÝëú—¿±ØÃ«Ò÷.EünŽ~ñšŸA Ü`&¥m¯Zbnšÿ‡î²–+L›%Q³4:µ,²EÎd_g_Nï—¶"ºn¦i©S°„˜›öRS,+êDCç&”D$,3¥†ƒ¤³·é±p£×¿Ôé¯&½?Çg‹um’Óš²JN³šK5+ÀÔSÕi*1 ?™âÑÆd¢„Á;&gv^K‘ñ”O˜²™6†%Âê‰ðTcI¤0E6ÊLHÃ+D‰ ösé ˜„19 t§f0ƒâq±…Šs" Ž vÐV³""ìAì0 ½0Ê´P9º–332’%ÒጮÑu¬ï%;£Á9¨ÂŽÁ W0)ÊËR†2©“"TùhëKã‹!…4T‚ÃÅà\C8¦+R(±Q 8™¢UÕC‰Ê-"àÌd2^\¨’”>P”™™žþ1(¢f#3(XÄ¡‘ácÓ.v±^¥»÷îmí+ýäé],eP ºØèÿI±‰Ù;²AW·š¨¢•]äÒH(B•6¯ItAÁ_KFz[33³eʺ:þ³—C®% ]³oh¾hÀî{6]ÖzBFR SO©yºJ«½×8ÒZ¤ÕÞÿE·ú~·í‚ãìï Y«›² y¾&qZÝï2‰;’p—žÚ1s&di¹®m¯/t·w›úÆi»œÝlº‚ÔÚó¼æñþ”8^µ`5Ôúù&®ç~¥«È?`ù/E¾¹ÕK”lÉoÎyŬVCñ†j›¡•™@C$/-Œüè•%˜îÙ[o ­»ƒi…’½8 kÐHÕ uާ…Jj0€â%Œ¡B…Ó )ž„‡"E;²Sº¤7XéͲ õ ñTÃÙƒ!ŸKì›è:@}kå¶áXzYÚ¬ÖÀIrª57ñhËqå‹=C–Èiw®[ÌnStAS#!±O…¥`‰û%£ö¨§¾{ +jî±YÀ>ùÓãéôZ6“OS­4>”Yj^— ºä)—žº(Ò°ª`ÞVíÛ©-Þ¹L•WWŽCˆCûâ‡í¦—rmòv:ù¿?N8:at Ÿ0cûâÖþù¡ÎÀ„4kÂ*v‰mà:nÓg…vdÁö~±ÁÍŒçŠMÀÚ«Â}zí ØIæ÷%îÝá@7¬Ø °¢,/±¾¹”ª}|ùò[ï†üøXϸ¯@Ån®Ÿ½¸ù¹Mï:®8?„wŠRäÎq/ókýä=òø¸¹Á\ ŸÂßc¹B •ÄœžÑ‰%QÕ÷¶ÙG¯>­±AÛ¦D&¼¡ùñ)ÄnËt¨32 „Ýàz?B‹Æ3CE±˜¶œ4jOé Z=œdKÅ´šN›Í|þnoG½Þ¤vj%ª-vއ%oSÐWÕ?ÏÅÀklUv›iS¤¨É¨q_ÌhBƒ­™DªH£“èjÎç«Úë*¿ÜÌ3'ónY”Ê)ʦh8)Õ¸º"=\%”ZÄ3¨i¾¨y¹R½¦n Ï$Dñè&Z?`~ÆÅ,vf»Âª¥”É`*ÐŒÀ=Ø/{’8I³MÜ«KƒÔL±e/áš©ºæÚ¶c"%:Ü; £…¦f¦¶”¾ÂÑk6íHšyXƒôDwÕ _á lÈ ¢2HKSŠ"u?¦ƒ€:AL™–¡š5i«ÆÄ0ë©A‘ ­ˆU±*ªšT ‘d’)–"LÒ$í©ÍfšH*H2UUKQñƒÌLÈ¥oG-©ÅÐòãœGư­ £:SèBP¤a¢bFŠ$Ò„\v\—ÕW^j"Ápú°ÄCëOÀjçb²b ˜#l`Gäh›£‰TÕV˜CÜn9>qPFˆË_ŽÞÑÖÆîtj*Çm£=5á.„8B‘IM%ày‘!X)š‘é>¾F¥J$]ØTà!nˆY3Ó–¤Pš†…YÂ7±T+p¤’1u›Ð»´ìå¸;éU’2O1-Ž%T­Ÿe’ì-ãIúiš®f“jt²À$fCÑTa¢C¤´¼…¨P¾ÎŽ’·.Ÿ­}:·9€Æ®‚ qŽbþ°ùS^}w.".¶šôD„:»£¡µ¾·&D`y(yWОUbŽ÷Ÿ¬óØ~óJ°?ÞÔö¶y7ó=pVüG_ðÿžÓ Cžq­˜åU‘½ÕÂïÜ÷”×]nÍàÄÔnëjõ¸ß°ôÓÝÖï×Ï^÷v»i‡OW æ†Ú€ãž›}ëõT××,¿ŽŠt8pZ‚†« ëýÞàí8ó¿nðõ·÷¾]?ýæRöy…×òå_nÊ<›LµžŠT´Zn*¯F®OŸbS§aÊo /°3 £¿EÿþëŠç[Ü(  ë+Qê-µ¨V>«¥ÁæâvÛëᘯpràÓñÕêûYJ™î¢ÞK¾¦ƒH}É[ä5ô*9±J@AÉ•k$Š»{WmdªÀR4|jt²ˆ´šúÕD YóÜ®Î×€¥¼ý‰à…¯¥CÔ‚Ek©b[ef®™XÒ"&ê!é̾“6¢¶‹MÇiz,zWy³“Z}1.“ÎUf1•*.Ž”ÌáNgïÚ»u¸dÈÔºŠW‰ÈXòû쑽ÀýTüée~oí¹¡Rw¢³š°5’ȱ@ò>J-»ÆÈJ_ž]»ž“:s2©’*`óðvöSöÖM6’‚è$Ô¨aŒaÿ\‘‘Þz†#‘0°DPR$¢÷ÌZ"ÎÈEü$+‹‰ˆ™ˆ¤!{„¢GúbÒ%*]“íÒfc› …>kИ¢dQ™´-F1jŠ‚ôT÷€wQ˜(a„¡P¡„Â’‘Á,¢PUÕLÄ.ŠsfDdD$H ÿiÂ}Ü­™1nÜäX%i#›O„Ô„hB"#ó3¤\n¡L$Gî0}¨ˆñ*I¤1äê‘ÍüHä?™H’ƒ2ªHFR(c¢‘F¤§Hê¸f”ÂfDvtGïÙºy–”ĸ Ä‡.±&`ÉÌ`tŠk"Ó„ÂÐuf‡¯*½Gd‹Ðˆæz•DXUꤤÂØ5EürMR=‘\šÌÕ0邺€ÞK[ƒ÷]nŸX:ø^« `JÓ±3·+#¸þÛº¢—³é7š Ôîzʬ E+¥‡Õ€@]1¡Ÿoü|Ã^— ñE Ñ»ˆâ ØtÒv¯ï·è»ùX?ÜhŸ|å‚ã>1s‡Y¬ü*—òZ}ì*=ç§ùütµæg·¶î}¿®ízåf…þš@qlOøÃ‚çïð.Ð øóØlP|OÝÇ\µ¯²îÈ;ѲÈÝ£òQóE–çq­Rõói=¿ØqºkZÔï¦õþêéµ)b½ÍsYçºZ½Oìð°ñ[_ù7ôŽ:AfX:Þ;NÀúÇ‚ç|ù_Û·ñ”°nþ©ì“À tüæy»«ý“¹æ™ù$Eâl  ¶)å©Þ;°cù)´`Ú@ ô–Ûå¿®þn¡ì @k8¾‡¾8l¯î²¬Lˆ®œ[θ¢9¶g,ïö“ï‹TØ AJñiä×n=îÏÅk['ÛNY²– Š’žÁt¬'K¤i³6ЇwˆJ…KËÚÁO$l¦9Cû¾sƒr-¼v{‹Â,]¤«æ&`mõý,ÚTÛpF8Žî© úÄù­Nû+Ù—¸±®š®l¢'›´nR´0DÒ9žñ)²vk¡á¢›NuLÙ6¡ ¯×$ÖžâkF+ÆëIž—g;Ë­M“Ö ô‚ŸÈìg¶Œsz™qD¾S׌£„8ÔO‰Ê=õ% ]NîÑZÅDV«Ê„&GÄ !£O¬œ"“½u­ Ä#UœðÔH¬ÑOsˆSNÚ¦‚4”Á1*‰ÌÔ¬+r!W±…¼È¹Y4¥'+11'ÁDU†K'ÕɬªégÓOA0C™$’b’#‚BI“Da Ň›)©J1Q». ¨k„»»_:6ÇFÞ‘épOxf|d¥*A^à:W]ø(I ‡ #5§£‰:‘‘ðàXómÔýˆˆŒ ¹Ñÿ€‹Ÿv¼æ°3DdvÀ‰Ph’c'7 !C`Ÿ­ÌüǰØÑ#<ýrç)&d¢#„‘°“žlÁÍ€ÊÌÆJWfGªe ˆ#œ’l!£QÚ’)) %¥ŠÂl S32«³G¯lëD”J ÅhÀ+'Îí!¥7?¸Üd=MÖ„]¡‹QËÆ¨OxºU?¸ýŸžŒŸÌ 9odÝ&k,в’+˽"á8C(ÛƒÉÿžW^?ôxJ–ß§~ǧM¯ïlcîížý÷oqÞï–ŠÝz,ëÓ¿ÇÛ;¼üžõ zøyã__÷·5Ýü\í–éLÁ³]ö(7…¨¹©bP>LzKx¾>àt^â·oð¯¿À³”õV¬$ëêu@Cµ]‰sÒõÿ­ømâ•m'×-¥WEUmó•*'_gB<£áp|~·\¯TÖµµãzÀ‚rÂæ æ¡0­ø»Ž¯_oðÓ—x^^M¶ÿ¤~[ÃO½`z‰úX¿o`a÷zþžjm“ld‰ð¾¬üúgklíà1t@^ ny%ØO¥ãî“—÷:¼þ¯?Ã÷¯€þ~Âôˆ«Í½ ¥©Åtï˜ñ)Á„V”¼Íeƒ-Sj5h[õví‹W}hÙâΚ«Ä² ±XÕ;âÅÀd‡¬‘]°„fJttˆ¹c…ÎTJV²b…×ÈܸÔb“$%“  Õr<áÔ¢©Ï[ݤU>ŒçéX?D[« ½ù|â¶f-išI´J©“éF ,<«xHOËhSTxO×lÒXÖRÕ¡Z0/™-ò‰IQÙya¼1ÛVЍx÷d8²7iž)* !@—$¡ªÛ,ìe‚hjŠvšd¦¯¹˜ØS¨1¶-d/Þ=JG;÷†Ñ[¤t¢³fvJéA'3s†NðUñ ¡ÈSbXjÆ›¨Udœk‘‘ŒÌÔ¶ê…1KN •, s±¤‰h1SU‡å'9®D"d¿JE šI¦ŒÝPœÕ ’` éŽìAˆJІôHðÞ£ÒG‰çGA2$crl¥ˆ!z2  £T"y©ÎáîáŒ0 Õ‚*ƒ¨¤)™Œ¼Ô}"ÇÅÀ÷>ÊÖ€œ.—[$3îIƒ™áC.“ <{¤ãRû@Iƒ`¬³Â#Æ÷ÍÐQˆ†€ÌDˆrñØ-“øx©ªÀU¨‹ƒ;€dU 刎HtéÍ…T K&ãì™Y5CJ*C´%T¨š&†@> oa†ÞíÂÍ{þûO÷µï׋>ý?af$~+øä V åþ«aî}=þN¶²¼ÅiZOËi-þðtjë|¿€ÓŸ¡ß 'hî‰=öu³[Øü=ð÷À*NÀ÷ Þñpzíö ü¼]õÈýV^^1Ú¸ªšâº`²˜!¹B=ã,ŸU*öRžmÛ¶J,iëê±.ÒsM±Â¡P¸2[IŸiÙttF#œ I…\ûô¢^Ó+°†¶.€äB†¡œÀ°^p5?Öþˆø ¼A©š"ý)úC_Zo2Ýp€;VZÔQA«7¦&R 5˜EÜÁ„¸O¾ª¹ö5ºr±iI«•}¬k-Ø4>lMªrR™ÄDêEyÍžéáÙ##º3C S R‘W‘‚B ·’b¡%&rÈŽ¤éi!Œ‘ ή~t•Ìnææ:ÈÏ`iª¬f< &²Í”Aì¶8 ŽOÒ P¤FXdjF£-Ç3—-h …"$½lô‹åE%d°p¦¡P£PÒ5„Ù.D ½ ’HIÐ1r…jŽGøËÛéP$ÈP1PÀcÔ7w¤‹„H’J(†àëù1×6êÜHr„ î58bôì¸Gg¸D%Æ–IdœºŠKßf`¬’Æiþ±<)™š9œcÈÈUÓ½ÿEDÆ ‘¸Ùt§•Ɖ@^çÒESCjWÏч.ÉQ'Œ¬…>¬¯pfè®æ–Ý¥‘cšªšLÍ®*!ê=á%s Xf/2œe}64Jk°´ð¤;ÖÌÊ–vŽžc’òºÀ/‹šy¥q%¡)Äܹ öûz½Å|P=HÂùÃ3¶™¥®Zž‘ÁôK#CÊ`ó1%3F¦pxMA‹¼4fiffÀÌHv 'ix°ƒC•¤fHø€q ,„’ÉŒ!XŒ+h¬Ž "L %\}¨ À0ŒŽàaÂ=‰ˆÈ„@q)òÌÙ=½#Ð/4qWq1D]ªÈ®4²S3²I8ñ‹Ï j†XRƒ¬¡“  •,SêEÁ:Í¥§ÁÂÉ.’]ªGh&ÖÈÎŽ9H—¥«g»KÞ#^[!ûð†1³3D:Ÿ‰®ÏBt–ï@>£0#W©«5içw-÷Ñ3w’¯D_3P «¡ û 0fº²ÎQ<Ë}êR>ƒÍÏeҔ΢;òú†j¸ \Ùï¦7{‰„œ^œ6Ûöøüprìïα:±©k¨¥5‰ ªÉõIÞ½ÖçàŠ¾E)˜ -qýgøð£O*åëÙÐò/mþç«Î½D™zû„œ–|6—£´cÜo£[?Äë쟿‹‡›÷Í?¿÷Ä„04dz36=¢ýË Žü¡àÏ+ 0%Ÿî×(§Ç»ùþ~÷æõ/¾À»,å°¶;¼Ç:é·13ÚE ø9€7°OQ;¬S»Ï÷˜nʾ´¿n÷_½Ç—8|ý¿tE>ƒN8®ÌÃêwÄÚMÖUZ´Ã+^&"&|0üÁ±¾½}ò²h}w]´¢¢”õr° loÅÒ$lü§œzHkÓ곺ÑR‹¨å’ê(nS‡4'ºôÅãè"\M@T&”B“ý`¡±8,À]ŠÅªôŽGê4q#eËZc#1º4Y4mA.¥gýÃwZh~ZãŧX7ÀŒwôûiÚ/6}3#ï~Z|=½Á Lï¡<°mÈ÷¯§o0á/cWõ5€o ÀôåŸ#7Øhè+äéþXñaWšµy¿l[À£·ëæðÿ<~>ÝýÍvÅ,ëŸhà¡>Bÿ y<ìŸÝåî8i°›AÔ©ÌVæ2(2½Ë¼`eibÒБ‹8éf%KaQ²RY«ª"µ „,aPli[äYQÁçz=cR¯–L§ŠÔ(–«œJž“ô¶•MÕjE8]YãÚ“׋þß+§Ä¦ËœÃØ&lRN!TOs÷ô´Z’ˆa‰îÂJÙˆEi’ŠñhsÄ”´Pæfòº!·ô¢acC¤À3{Æ1_™šé-±ÉÔñPLIX*Š@ÅD0û‚Ñ)ÉR©Ã¨þPxa¿B7„#„NÓ®l`k£us†» ENÐ-h‰ ô”ÌRrô ’P@˜$ÊX·)…Z\kQ­‚(•H¥aä˜%}lØ)¢y±ê›ÀªÒFh€ÂýšIƒ(¬@•Lùa´&½ÎU«Ã:¨|CÚõ110GÿϘ <Ò‘17$%.¥>ä uèѺ·F¤(ÄTDAF üEc’|`\^@™DfŽ'þqÉÉ…ö‘!iph'‹1Å ‘ޱ ëÁD^êçDUÌ“2n½¹ÈïLÐ"4`)I‚¦-bw2C]@IEÔL¤LÔ-ëNÊLZŽë3˜žŒ!è,-(’ÂC+LµD*Ž‘éÙ®Ÿ(/ IDATÏ‘ßØxhö®çܼÏkH‡ýa¡º8VÕÛ)U±1Y;bÎexž[QAGdÜv=H×_f—¥}Ú–Y8‹¥⫞[—ÃL¸þª¦LÜ25e]S÷áØ:äík^ó­ÔC5ÞçÍëòË_Ñ7l&(N(×>­ø^;ýÍaøGx€RaŽ&hç¿Ç â9°ýÔ½¢Êúüéî?¢ÚA+¦mX§Ã•à10¿…¾Ýë÷šXŸÊþÁðÂ#/é¨gè ð%´ .Ø<:nÏRZ­gÖ~ƒ¼*õ|‹.¥ÆŠJøQü§èÄEŸ «âbŒò€'û® ÍäðÉR IeWÙ!U! g” GÓѸl’žé}ÄX2#!D.¸ÄYlV«¡’‘á5¢wx‡tè Q— ˆGd6øÊl–Òã — ½J\ç¶Üp¢L¡ïœ÷n¦ 'êÑ}]¼<¶é¹…”¹(IØ$m¥-uô‰©²&š×CW$^MÜ3>í¾Ë>•BuÓ‘œg%¨þ*m¨$…]-ˆRé%ýVª9~îÁâÕ&öëŽÏ,îÁnKÇRÙkn2§sã¹Õ‡¶»Ïÿ Ó€ý-Ö÷°ÿe+ÔP ^žÁÿr‹ïm±»NX>ûg\Ýš¬Ã¶È'˜a2üçŽÍí¡l^ÖŒ ±^Ö¸}j‡«ÄÆQÎð#ð€þȧ°¨Gði‡´»Êµì¶ðGLŸbyõ›º¾ž}zÀÑ«£KÁ:c釿Àñ£3¢½Z¹åS×Ù%ž^Í~½v·è‡¯žðÕ_nñõX|-¯_}ÀË_Nò›gq{ŸˆKøŠ¥”İ‹;r¨ª“ zÖ º£A5USèM(¨Ôb&"®2ZRid"Œ:Ež`[ûíûd)…Zêi˜’;áŽt‰›€†(TÄU¹©2È4e´ŒÕ’jHPÀ CWÝ#Â"-4´³HžáÍÙ#š»{n€‰TêFuC¹*œ&­B’1@hg.€ [Â3JûŠt‰E4ÀˆIA‘Þå|`zöÙµ&+@fÃøž( †ÓFgN. È4ÊfSPhÎæIbAhFAÊÅMŠ0d$ áIK´Ž½R;……Z’%†®:–)Òĸòc“fÅ7D'òc8  ‚Œ„3HJJ\$á.ÊðJz¸wŽ 'ÊhéÉ_Å+$zfï™ÙƒÒÈ´ÌBI¸NqSÕÁ;5£ŠhÁìÌPSŠ” b‚Ìn!’X3­ÅG蓎›aèË2H2h|Dâ_²£™ôÒ0ǿ鑠%9 d.yéÚaÒ™@S(‰2à"©J½T. #Å©DcvɸTYO´`÷ÌHm¨ÕZ†CIÀá=W‹f=Ñ3úšÞÒzF&[+ÌÙ¡ÁTñiŒš‰ˆY¤J¹jz%Pƒ«›D:[Zs…MðÁýwñx%¨çòÉ–³™Y‰Œ¢F6AÒSTåÉì^ò>:¤íÓ¿‹õ*[©a®½gËh YQºgÛSªW!Øž,k¬kö¦çƒ%ðq5aÈ"?@îcªšÏ™;˧w¹¬íMW”û(èrˆïÁ·À¿ÄÓ[„£6Ø9È?Ÿ"þˆé›Oä›­¿,¾W|å‚‚ŸA^@ äú øß‰?ÕÃé'wÏfºžùž×¿}°Ÿ¦ ű}Ž8¿‡ ÷ Ið %î%@)ŠÖí^ç3®ÿˆë2±N÷WßÊÌøúo×OÐVð,X·xœ°Ö-¦kÔ$ðöccèX+ýä3¬[” Øn‡£†°E8a9ï ßÍÏ®b-VãšÍ³¬ýÖÖÃS¾4|}Løzˆ/;þÆÞç7òìºò<çÞ÷Þ7"ÈLfQU%É*eÍ F#  Ðf@4Æ n/Œ\Žá¿cþªÞ ^ô²ÑÈEìÔB3Àt«Q¹m—ä¨Êb’ßï{÷žY¼ g)ÜdH’Á÷ãžs>§ðíkÜ/½¾¹¼»é§=þÎV ýÊ£¯?¦ß2 ÔYC%«¹¡P›7,±Si9Fö°4ã,N)pC§OçI¦ÁÒUaž è)¶[OaU¨0ˆfReþP*ìNTˆ"ždz 4ùÁ @%šF/† T£Óé ÷šËGÏ!{é'Cšc r7á1ÇS H¢b)Ú´ÊÚÜjÉ•žIaÌT”ù…܈%d„G¯ØÈ'}!¥›uú³á‰–òWY÷áÌ-·Ì^å‹œÎ‘Ü ‘WËc#R°”ÂꀻɢábÇs²ÒFØršfs3Ÿ–¤Ë\î.S¡ d0ªg0E3s:ì:»J£yuΠ€f·BLKL‰LÀ™–p Ï± L¦2ƽGïW@Æ<§Ë®é2»ÖÉ`€ R&§ÝÈb®Ë‰IáºËÒœ%çYÿzž'Ì‘>ï?…¥HR©b ©¤ Š&Ãÿ‰˜—»Æ8#غŽ4šl*Î™ŠŒŒ˜ A×'ušBWŒ4ëS4Š Ó 3djïRÆ4I!¯Ï›…¹²0_€ÐÈ €šß+Bch ÏŒ‘[Œ'ô‘!ËéëŠùg‚‚’[ÑÔê R¹xiô·*³’ôáèŰ[ÄbÍ=Ši«Ñ?ÍþÍv¹÷>Vro•VM€iiºX¹ß@GžUÉqvà}iaÊXÕ/EÞ¬¾Zˆ¬M½•„Ï›žã„’°7ˆö¹åA:7Ù[²"/x:Å÷ÈK{ú‰õ膱 ¾Á(¸õ[äcU :ö+ð¥é£­w©jþK j©ŸóÕÛm÷ž@? ïpÓ<ÜþOÇó'ù´lÝ–õÙò¹}©ûrÁrA%ˆÀöð„£€ü- À/‘ߢvxÏDÉ¿Z–(gŒß#ø øìý¿†§túÆò5ÖÏð0*~SÄ—†Ÿè#>ù¯¾Æ§Àíϰ|ŽÃêƒoGÞ{Ô¼[yÚðþ㊯xÄ/úãÃy_qOí6‡¹âèx<ú¯qûÊgÀ-p‹/7À2po÷÷¸ßvxÞ‡pý?°>d[°Fú^”JBamh¿Z¯±0we8Ò{()bdÚ<غ!EƒÂ°É†a%ô*u˜Ôšeˆ=«²ÔÕ„$Ýœà †c˜æ¹0RhQÌ“¨’NÕX‹[£ «_µGÈ X€I¢4†Ô…i3­=…®uãsòRβçê¾/ÅY®ÒCžIšR h¸.• JÑÍL¨Æe£ ìlÖÉßcÙ“K’Bëf£39 ù*=¥Ù WfŠD†Mൠ€ºãûäk©f¤eq8Iz½®|1mž¬þrlÏIºî°0ÃË.@†¹•ÒJõbW•É3FÄ&I AœµŸ™d’p7ÍiQDæL~dÆØ¢÷è›”ÓD9¯ÌŠIKºÚe ¤2JHA™@¤<Í0 â`×äBŽˆ¡Þg¢ ’r`6Åé: ò«É’œüÓL$1ãnœwc¾”=ð%[-¾¸ŸŒÒôðNr—¹AT`îu]³ZSÓæKf—uRI WþŸMᄈP¤0Ñ4<³êH JD­fª`˜¬äÜÙ ‘¡‘¹õdfnÑ/Êu^S3öïˆ&·tK/rwwŠ¹ÊˆêK±fÕT ÀÌ‘#0hÞÌ­ÉçX î÷8 mÛ°Ê$ë¦uäSØÖóÑý K@GÏw›ÙY Û]¬üÛbÔ˳‘õ¶fŬfBÛF~°ç_åã×c½ÃJ`÷å^^eï¸;™ˆÄF à9Àö~Ý!íÁŸà FU”; ï¡+€D&°C½} êúéȺ†ˆA»¸ûÓ±»{¤a-¸Œ·¼»µÜµÝÏmoÿÔ¸÷BŸý¡¶òPÆq_ÐÇ[ï÷þuÞ}ÄéòÅûï¿F~…Û_âõ@ö¿®çW‰¶Ÿ°þy9ÿïù5Î_Âö¸Õ¿‚Ñ_þê« |†_|Ào¿Xñ›&êÜ øñ5ü ÜÜa9`¿ÃyAà—û…­hÛ â¿ù¿ |úÕqûËwåõvÙŸ+açè—ÊçSù€‡ö³ãoñÕ+üb‡7ÂýŠC>¼²z¨mWZÔk\ðñ8ðæhëçiXI–4# è’Lu7C}„Ò4"¶Èè>6´1¼DoM°$Wª#ªdeh@öPbŒ- ©¦ Eö¤:+农Ph‹Tæ’驌–b/R³ˆŠ¨è%Y¸·"Sbd1UÞq K(·PGt{ZùQø{sü(»)e×j)m‚‰‚è=+h™r 3É`JD„†I` ƒ@eÌÞ²ŽW¼4kn³"cOŒH1¨`¦)ÒÒjQ‡!S@ ${ʃ2æÀF#ÝéVìl²Ì½e÷¬¥Ê t#Æœê+Æà)Db*&sYd2ád©¥Àç4©8‹×Vš—Jºõ! ÏìbržÒçÖ£àDÓ™ÑEf¨Ñ{ÏcS”×ô°(Ê$„$"ä³ÂáŠ0zñÅR9µl:iÅ­—3ç@&£ç&jpÌ~ˆ¤`Sîé!Ž„Ñ¨ÈÑGn="“•Å=͓ӌ7½ÙÀ03î<'MW¯*¯ÛšÓðÚè9BÌÂ,ÌgHzî WUûE’¶yb1Z¥™úÚ0Œ¢,žóÛ4W ï@nCb•'‡ŠÌDäŒ^ iþ(‘È.l‚œîóŽbÅP^ÕSžÍ½›tAž=‡‰¥sjb©ó¬~Éónçê{+i~é"ë™?ˆÝh{Û¸»È^er@R|ÿ»ç샧ž˜ÄÜ: ;¹!øèìÆTþâoǸ¿œ±/°(çvè¨*=·“È8â€ø-Æî~­÷Ž–gs$eúóó¶;÷ž}Û=X£o qÜ}„AØ– 3”  CÙ]‘¨CÁc)Ðëãöêô$ áŽÂ7µßÜôý%ÚÃŽÛ@©÷ûûû²Þz"þŒ(*ÍR¬½´z9– J´~î ?ÛìßUüýgÀ¼ý÷ûñYÛ¿©£EÆÍ¶³Ë€þK¬Ÿ"xØmtoøäúXþâ×X~‰O 3,7xã¸Ù¡½ãS|BÃÍ‚JT<<±b×[IlY½=¬vüÍ^ß<|÷¿ÁÓ(¸ñØ…×aJàøþòÝîßÕåõ»òúô´÷AÔ€wì:Ú«îucAÇvÙº?óˆùbŸF2à?êË®”żl%¡‚ m¡’=¶Y8S³”“dªCÚ*T³“K¢`øK×ãêÀ’+2Kn Sq¨>¿f‚ä-#F¸$±›o¢ºº=ܪ_Ç(@ Óƒ™9ãG ËL]€U™èÒV¥ˆ’A#N¿Ðó­•nv\š—RÜýŬNpBüÑe¶ È‘ùß3ÿÄUk¥¥Á6ú:A« `w°½ÐÌ‘a=-(qæA²NpX$³sÎS̬+5¸Ð_³D2Èé ZÜá Š“6$e¤¶b•¾Ì¢4ÁpEU(‘gS©T±âÅ‹—jVÍ}–ä¸ 0Íe–²Y$LT¢’×BOÐi…¬ %EŽ1¶Þ{Ž1ÙÓÌ RŠ™[~!T8æ¡üº!\‰g‚DHnp³âæNŸ}r6Çfî“"•Pg‚fŠuhí1")·ÊÒX a×Q¯µ¤6—ôLÍ>:„^˜ªóYÃ˶…œWÎ5L‡K…^ ¯œªöuˆ6ËQ ó ;n;؆r÷Àçã®@˃î.~×K íœázXãw}<}ùÔ>&/9ÖwëáÔÛû[7;¨bŠP TTƒ7„cà­é~cûw›N]ïGœÚÀ¢¾“;^GAÂ6ð´=,½Þœ÷ån,._96<|Äòkð‹‡õë:Ð64»ƒ>©kyøÍŒþáþ«ú÷·w7¶Oú'Ïãiëk¾J<|ü“ãÓ-nl <â_ÁSZ€ÄáþK´Øpv (HÃhˆ >lø<`€wD¢Ôþ[۶ҟ옆_èío–{ä+œ>G=¡ÿ øŒ=ž ÿë}üìÐâf« 鈀ø–vV™·àºá1²o8EƒŠ}ƒ ïs}ÿ ÷æZh‹œnc±ÜY³Üç.cßcûîâßEd_58ºúgÄç}¼‰^ †ûæêÀžê–´.­2ExÀ7Ó°|®Á‚<0;hž5y–^QŒ=ièÓ{€gŠ6±  X½L 4sH y¤eL·ƒ™uË5íB q+÷È’7%JzkÄ(£c5]²—> Òž¼ý¡á¸Ÿá“Iµ²·#ïe5ü]­'Ç{è›Ïã݇þ[ÅÿØý5^•oŠÇóž—·Ü·¨‡ú®ù)ê{ÔŸ·ºH»ÃúëÜ Æû|Æ~ýœ÷úöàÞ0€]…;Ì!¨<–|0?šP ºôûmäv¾ÅóK¿zuþëýÇÚÅ VÏçX\Q>õý;ó}RK‹põöl6°>÷üö~xHË×GàÝÀÆ/`uË}ÿ1ÿ{ÅÚ€ú‹íûšMànô§í›úø&ŽëZ ù¿¦¿Áñ Dz 9PVÄ ?€ O=q.Ø€±!Ÿßæù>[·mmë÷öXk¿ðt.0ÇOâO?õûïöíÍÝ›{Üž–˨jå÷-[ì˱«¥ƒ#Tc}Žår¯íGý²çÈÑ•küÝG +ä¸i8ý ²£üßÔÍqgÕT-[Ýj+KÝUì™Ûšëó¾]¶þqݺ!ø ü.´%Î]¯7Ä«9YæjäHÀºÀp?ÝøÑ²–þ‘ÚËná=x&V©Ÿ¾rA-ÆFš¦qY ZA1±0É-”––JEú€9é˜.þaø(Û« áél¦Êƒ{f©5—DÁõÈ(2Œiˆ‚žìD߸ukgz—I¬ÝkºÌ¿!ÏÌ”~h¸5¹£‰tø0s²Â¤Ò•C³ª¸Èf¤.§¨ )»¸‚[â©àÆÒ1Rf^³4¹“ä<àÃY‚L®©o‘²ÜÌ_Tª\îòâ(s”.‡#Ý‹Ó_¼õWwêdÕ‰¦LЀƒVœrÒP¨‚ð dʆO°L‘Šž !9×ÞëÅaî7³ægFŽ 7¹áÚâ J–i!Òdb˜q3¸ v­ô!ð¢_äLÒ®œíiOf²š†Ž(€Ìàô—Šg®—%#g³´f€NW9B9b¢èªMç$K¥rHÁÍI!”Šà A˜O_b*+JLœàH!5†zf— ô¤;YŠJD¤’,‘`ÊZ–“¹)¹™¯]–Î.IÎX‡E¶È5•R°G3Áf¢™£L°y1–ÂÎ#Ýa³öˆ5Ó|yV´üè$·ðž:W¾RlìÊóHnÜgÙ›N `\¸t»g»_G7 ‘@ÑËé£ßŸÚrûd¯k+y_/È;ÐPí~´û]6n‡ÊHC–­¬OmÿûŸQ¶‡xn²»ñ¡µ"nêC½=–×o±ÜoõøùÈPÿ|§“ë=Uç¬nÍ[ë^¶=ÿf]ÇÝ?¼ó7¾Á¿ÞÚ¿µ‹}`ÿÝèÐGà~u²þ8´s!luô¦3Ø·íC¿üöh×–ž“Öêím×’KÁ6ðåáøf{÷ZZpÞ•^3¥>v>'|b€P¶!žÿèÞ°¿1| løÛ\Ð ô.üßÛï6Ü>¢|{oqßoÛæpJÿæi7ÃRÑðÐò°ÅÍ~´¬µébÔìå¿nü-ˆ­}}ºùÖÒ6 Ûv¬ëC©UØ×Ýa«ˆŽÜÎtìp@,èÄeƒ¯à†:>Úë„VôÔíPIcõÒÜ[ ÂLþªÔÖ¨%ÇHO~Þ§þdh]‰a¬yãp¸‰k·'–‹Š»F²0¢"cä ÜÔFÚ½8ó Ç‚q“9k–ôºXq³&`XV¡À,®-+LšeÓgo<’6m<{‰°. ÔA——«×W–YdR¡‚}B2ˆð–Ø'ßÈ?ä2ÔG RÍqŸô•«žºWöjÿ\cp ]€¹þ¯ýðq§~Æz[yù+ÏÿØêPemµV ºT»Anq.QùœíŸ²<ă·£½ùùùâ~Wô!v¿öÝ—Çèð“ì{ÓÝ §cà°¢¬Ž•ïvëëÂE¯5ú·Àøµ@Aà{;?n7£'`ýåûñCàîAíˆñ0¬Œó}Ñóî”ÀØ€‚÷·€ßýõ¾Z”ûwmœ~ ,O7dÖ¼@iLh,zRˆˆúÃÝþ0«8‘'ÃëD/X|’hL¨ü|÷”||xúPí®q× Q£â;x¢T¤Á-á °¶‚²C<á†WŽGí[µG?ñı|ú7¼Íp `¤Q£\j=vÂôÈÆþ¿üµ}}àÃf?´þƒ ?êÃØK% ÑgÒŠ ±w•‹¯ÿSœÎ‚]ä}ñ0@²•8gI¶ß.Y÷ÃØ/l­¨uT%‹E³~ƒm‡n‰Kæ£|UÙh22”02)ƒe×–±9,iÖa.ŒÒ·Ü¶+´Ð7Y8Q¬‹Êºª=YYä Ö¥Ö¡$ˆô aÚÅåLÿÊëÁƒ,]«Ã©fú¿Œ÷6½—&©Œ9ÅÒAEh* )’„ÓU"3a€*›Êù\T·‰ƒ£˜›µïÀ¸&0ϵ iÚ,¦}±?«%›¹—Õ\tYÝY•8Gè…Hws«`‰Y°†œZJÒˆy…BšÓ4SÆ#s -¤cT¿^f=Ïôj¾„':”4»RÌ \?®@Ù$sã¥g‡b¤¸òˆª4Hé6¿r²ø„HP¤O™<%eŒì‘‘ättfö®¸&Â221}²ÀÄ~Ì;PÌËÂÈ­UŽddÎnŒ90ºI¤˜ÿ2)›s¶j›‰E¢¬ë¢ IDATFæ3öG:}F4ŠÁ39B=çUÆhtØ, —hYàÁL¦€Ü¨$Ï4d™c«€sñâÚ1Br€aµÛRØ8=½´Ù>˜¨V’E×PLÈTvŠW}'ãE\G?i½±±ÈŠ.aØïŸý“æm+Ïí¨è@ :è¥ бÃÑÃ@oõÎø|£Fè¯òG(»w§R{-ž/[ÿ|Ô(Þöìfç³:n¾{kœË0Dù"üô×úìFÏw¹ÝŽÚž®|ÿÃXËwü/GüúTÿòžË²+õ\ô´/Ÿœ#¶ï¿Áò[6ß6üº÷/ŽOŸaû}°»–c6¬~dDzÃæÇöýK<}uU§ø%ö7æ»{Ô¦ºÍ¶ÅÛ±RŽ0°âÆzÍ#Б väGèÃÝöø²ã ðÙå´Ÿâùö; C øn¾þ€Û¯ðô¿>>ñu+¥mmëøî˜  ~…øâ¸áÏ·¶[?ïßaûñîù‰ÇÛò¶UÜ|ö5 ÿœ¿~ßñ_"OÇü§¨»¿·¶W‡!Ï[ö[QÐèÀŠñ-Êÿ Ü[ûzW¾É°ç íÙåó=±©Zš×Ä»ç4â ‰O˜£(âÞÖ)ÔyŠ´žå@eø9é+oÒwÀHÏR;L® ³mokó†õ³û–ÖÌÍ !ÒÃQ5<„EÈKZ¨$-ŠkÀ0¢«‡Etëhî¡,Ë.ra¶O…+j æ²™R¥È¬`Ò‹Á Zƒ/hç¡‹v†ÂḻçJÁ5 hÊ”´å°y℆Qé©´IYÉå˜ãX öÆíÀÅ­Òä`$ž5g>Ú 0/•X¼3ËðCZzÝUž›ug§§—â¾Ò÷Ésý³âa—•„…$È<Íæ®—5ƒ #颥ÀTŒì]}ËÑÇ,e@Êi8‡6VD‰¡)(€œªÅd™².T±L¤E Y `¸i~¯…>˜à$@É„¦®ŒLË—Èó¬™ÎÔ˜²‡hn&Ærº˜‘‰TÌ´‚2Sfîîp÷‰„‰ ×0n`b®ß=3B•É!²LÅDƒ©œžÜ‰ÑKeÑ|ŠÀd,æî^‹ÕB·ÀÕù;BBá„W™'i”&HÖÒ,_à†â–Dr 0±(îàFtŒ¬¹É9èb&®#‚âºq¥œV@‘U* :«%?À>æù¬Ë~(ˆQz0WÿäÌòHëÃO"¢"¹½%ïc­]¹–þ˜½‡ŸÆ—‚3@â°<-‰U5Ê«í¶ÕøÝl»ÆSkÖþ±|<ŸÀò=_£¬?a¸í¶;ñPŽUŸwó‡Ü=ó‡ÆmË> ¹k#Þí¹>÷1Žðk8FùøXp€©¸/-·Cž[¿[ödŸ×š=?;E opÙa½ÅaÁVàDI01&7ò渶CûË/aö(¯°¯ÑÚ¹´g⑯D­ ѹ‹ÊVˆa•ñpÉãeÀ…òùG}J_îð3âuÁáŒö[àÆ~÷ðԎφg`ç(~ÍÝÅ×8ÿõ Ÿa?jC¯8yA8jEþãÆo÷á‹';¾zóð˜ýdçq¯~¿ûºµÀ[þì¾êؽ‹Ã)ïÞ÷öž†ÄO†}§Zà nÐ𧨕Ÿ"—Šoµ±{<ö´§¾ÅØÝJ]÷!wÔÉÙ÷ù–m?’øÄÐ U‘‰Ûhˆh…¼_°ß¼u—lt²¤ ¯éêP8¸£ažͺ¹È°ÁÈèÜšz²0†çæì}°l]¢˜¶Û¸nµ×Þ\‹Ð„]˜m1c©u9dÙq1͹ôlµ§³P Í/½–æ‹·âÕJkò÷²2@í½ÉEV³Âk[æhyµ Åž(A¦ÏG:l€¹¸àI@î™f!Oœ;ºpx)K«ûº7H¡uK ¥Ëªyµ^xC+VgÒ{6E @ÝaÂô¬ Lgše±iªA$d‚$bBFŽ-úŠè™‘Ä4™0L6†Yæ,oSo6·0Á"xÈ&ñI˜À©ù>qX'†YÌÀ»]ã/5oS<rV×™†4£MC¨ˆ"RÓ44MÍAe¤2b~†ÿr ¢$faÂ8éÊœ` ŒT1FÆ|¡®Ò‡hšw™È©6Æ9*KèÅóH'f³u)uâ -#9‚™Ls'='œ‰HAÆ †e¤ áŠDzÄyÄHÁÐ T*#QS‘0×@nbÏQ&­—2²çìCÝDWì2Šzä&*Ù7Þ¤>¿øs®fÒÒ¿G?Á¥ÃC_޽`¤ƒßîÇù>Ö¶^¶ª“¶ox9æ!\ C–€÷÷~AnµºýáEÖZuŽ’'ÇO>žÇøõýöå[r ¿÷=ýÕÿ1 Ïð(œª¡,:ôa9lÑÖü;ò)Ên-K8ÿ Ã‰>r;º½³|V¶–€6ÕÇØ÷ OOŸ½/»‡Æc.ÏØ|7 Iì»Õ±ëØ.XÝ *ÀÕ°í Æá7b[¾[·ÎG¬ˆ^ ¨oîHlÚZÄvÞúy;Ñ€m tøÍ7ü›n¼JÔO¿x¸GÖŽwº½ZP˜_1Jüï˼¹{¸Ó‘@¾B} c@{ðîý®ø‹Ïî×ãÍ Ô‡°ºFs´•?û‰ýtÏ7m9l}Aw|ïH½/¾=ìã¸\P&gx@Þà·º9¦½ÛÓeíOÔzÛÿ±àO{ÏÛ–ËÚ/[ÝÝX-ÅTÓ2½Ð,¯¥ïtÑ‹LÄ`‚aó³fî¡:T<÷ÄV16HaJ"…Ìbv3Ú†'wJ­A¿MÓZ áPP¥ª,´¢˜ÆB3õ¢tte!%-‰N:ÆÀsa(w`¡•AdVóÚ¼-^K–Y vý[O»v²%w¦aÅ|)ËÎ÷Õ—R K&GÇÖ=CÔŽª@a†!˜$|"x #›X!·+s4 ‚‹ca4åUe!ÈAØp%é"E*m­ÚÌzõV‹-Ën©Ku3DK Š…­X-¶' YÍvTŠð„tM” Óˆa&ô«!Ó2•dJ”R¦zŽuôž1ÀM¦ycàµ;ƒtZqŸÇ»†¡e×fžI¯›ò®`6ÿI¥)ËËü0ç{zˆBÌ+Ë"\¸Z‡$)9+„Ì™~mÇL³ÈŒôk„!2't{r¯ ¼ëm‘ÓR«+™5§ÔJ\`‘#’Ê‚¤êCf¨s;TJsÎUHgªû%AYÜŠ{1sšëÚ“ÊÌJ‚© y2!@¡!á£ä 6å©d1‰ ì9†Æ‰P$<=&ŽÄjYé¹QF8Ͷ‰ð‚£ÔÔNÖJ(a‰èØ6¾–—ì·[ßmç“锉‘ÇÕ°ñÁü8üA^S­oí|Áè5 ÞÀ ú $ûµyÞÔQõ±Ýþhuš:šÞåØßð€õͽ>}Œò·IܶíÕåoo/ﲜÜåå!ëCï²n¨¨·ìLû»ñ ;æ¼s~‚ðj'ŒÞ×~êcl<~ÿ‡‚íxx‡ KÅÒ‡ìXΨÈÀ¹àû†]… pyƒMØn€'¬8]êiíˆSyþÿ¤"{$éV#û?ò”û÷¯ °þäí ·À­£9lÁøÃ}–ûmk[Ù~oøÏ‰€]E~_ãü _Ýõøïpà ¡@înp¹Å;@8¶ßãöÚÿpÌún¼ÚôoÜâ·Å>vÛxÛx ìê…ωu_8ÖÒa'ä+ ËÛ~¸çRQß…qËSd]ÑkòOLDíÑ¿Ûn’·¥Óü¾yÓu_ªœƒhBKÌŠHƒ¹aÌ7±¹–• †Þœ ʆ”%•™Œnamº°t2jéÖ;sƒaÈn€Ålghf`ÀènåžÃ{¦³˜ÅP–@Á°’µ~Ìø¶æÝyj0ÝXšµ†âf4É23*62`†æ|½´›¶¯m×ö­íª3¥¯Ýti[Gf% EiÌE¡ÑÜpéahCfHÏ•! KL¶´MÖä6¦ÞÌ`Î~²’à|¨°îV—ºkmWJ-µ¶b渤2‘ § ÷dU6 HVÀg—ç¼Ô)£#”#G/á,fNùKî)13È©úveÏÐ o€&m^RWüFñkí¤ Nä*rªÞ™1^w.yך9^¥jFÁ™à˜ýc¶å ¥ÙïF†dTÒrÖ\WŒ>·“×$%ñÂý~‰·An˜3›—‹-&CIYÛç5eKèÚQñÒ 7­°³ôgLe»pÆE“Êܾ y½B½¥^ÿ‡„’”Á+¯ÔóÌrÌm0rDôqíd ³QÔ(ȇe—VOõ4Žê =h>.ÌB…g¸ÈÒNÂŽ5UaWpë°ªH|è—K>}³~Ô+ ›õÞ¬ ïö~‚¿—½KßrÀ.¢Ç†çÕ³w`ƒ>‚»ŸhiÞ¬eú¶©Ÿìù!²FoPã[yÝ×ÛÃGç?$†õÿÅë/hè66ç .­À*ÀSx­¹ï6N6€rL!¿AØ ½¾GûCä1žŽ¥àqR€Ä…¨À áÄÀ7Ô^®¦éÍð!ñ­Ð„' ^‰ÔûÀ)¾[¯Ï8=ÃÝ/J9ºC·´ã ߟ¿GvŸÁ?A/loà€:Ò<Œ›zynÏhÏñ]­ðÿ0°tØ×ø‡/ðÕ×À~ñÞÜ ëC‹£ LHÀìÝ5¬ Z¢í»[èpÚ€óR×sï_œjÞ÷ªý²¡nkmøùó¨Èw¯ÊÉÚû–°x…gÇvÀ(÷·ºgiÐ6ÆiŒ_áãÃç8â ”ØðpÎ#âm_Ò9¢a«‡°–òÑòû¢Ì¸ }*S:Ì·ÊR¦Ý˜íÁÅXÝ‘žH+â sˆÒ) ²QA3K+ªm3ö¶Ð:„9½Êš™Y’E³Ú¾dÏpÀ%Ó”pdQŠtOã¡;Y¦ ÝÀ •&/æÂ®Q”ð¤1¼@Õè‹cÙ£íj]ÚÒÚRK1(ÓJ-Þ3Ò•Ð@8²P‡5`g¼5ƒa—¾„bȶ :¢YÜŠP§KŸœZö‘"ᨤsW¬U—ÝR–Z[­¥V+•ÎÙôV3kæH•Œ&Ú¸Þ}ìš)ð+4è¥q'H¨_DÊÔQ&Zðeöޤ%h,iÉ.¦ 7‚>OÁJÒÌáNo†2kÅÅ1}D¼Òìˆuh@0¸©I–Bd††8<9ˆB\[klŽwrƒÃ]L¤S fÒ&-Ñf(™6k(@ ¥Ò”cò_É ãe1“`)d¾ÄšA‡¤ ]ï³pÕTLX@CWpŸ+¡È¼*ãWØ+UJ!$Œ0ƒܦ9vö¡ffbÆË¦%¡ˆéˆÑG9ºÒ 30 )‡ŠaU E2ÂbóD.1'{™®1>éPÅ­¤|C>²Â…’pS…ÔE{V&.[ì´?t?ŽDÝðYÁm‡¿øŽ¾[o€°øøìXv(·ÿaïï#i–é½ï9÷Þ/"2³²:úÉ™&—œHÆ zÒÒXäJAKžþ/Yº .ä‹‚1(G¢¸d´Ý3“]?23"¾{ÏyeܨÞu´](£jTUdÖw¿{Îû>Ì@?¢¢wäˆ-ôŒlðòÆÚþGΆӷð/‘ †ãiûpùízú¿»]÷Oý¼?¶Šµãüí/Š_ü_'¶xÛTäÃ:yz«'¬›-ê‚{Çp,wà ¸µ·x?lnŽö›7ÖoÖs®/õrv¼Çk»_×¥£^¡ôç ¾óƒ•ê£Y4^ ¨þñ°YƒÙqæ±å›~Þ×Ò¬ÞƒC>5F¿ˆ|õ£†Þ±º– ì™ìÅhf0VšaºÆŒdŽ W4‹Ìùµ†ÀN.3«pÒËâάiµ›¯^ÍÌݨ„C˜oÖD W¬RZd¡É ³’â–æâÆ‚U3ÙB³–Ø% `&c¦gIÏ,æÅuñ²k\/KñÚj­^Ìç$œ¾°¸§ >r•F2 ÉÝáÖé•uFFÐc)==eƒ*¦J1SVh"-LÚ¸šã}S¬”²,mSÛfñe)uiui^ëÌÇ¢FxÞ‡6ÍBÓ9ä|cçD Ža#-Sd 7<À ’2­4™™›É`uss7¿Ö,æ:ÚÌhͦ½H”`L¦ù§ÅC€]yBv©•pʤÈ̇™ÓxêÞÃÓyJ3s§Ë„º,úˆe–re0™ÑøÉý0÷°È` Ë>9G[0¦}ê'-æóS~-SZfĵÙ0+ÔF8c³C3j¥Y_¤2‰å›å6ö ³Z̪]+%³Y!Í›%à‡ƒlÞp¤TÌ•¹¦ÑЧ£R ÆÄ›ŸÝëÅQ‹søŒÞN?ª«”Tg È"«ŽšâƒI9(qêEVåyY•åŒÍ’Oo„·£6ß×MmËûV ÃêðmiXGÍâí[ò­ ÒAã8.oÄý%ïß?½ùxô²¶æÛíÅÁ _¨>:pFyÌÿk¿ü¼ßx™AÞFøŠý\êyA÷þ+{¿_]ðD:HåhÀšX®Ô‘„ ¥a;49ކ ^ÎÀ*”N7üpé¸!Ú,@B+ÎÏ0`N< X¯ß­¨øØ¶1q:›?plF¬äØÀ”„×è±¹Ã÷Ä£Àfì;~ó¶_ .ÀòX>Q—¿ëŸáñX¾ÆÀ—ÀWWöÑg‰›¾ÇeAûpYŸ~‹Ë{䊛o°ýîoà[xAàۃő ïÇÍ3jÛçvÉðÿ8ôÝÈw—ÜýôÒâ jí0x”#nðøàÇŸè±æ ÚX¹éåþ¸kh+è èy¶g»GÝ‘n° 12­ùø_-ÿëïGìL`9ƒÿ\Ê×MK¢UO˜ã¹ ‚µáÈ ©-Å*FY%h°¢ék󭪺ã252‚C6’³õ‹SÁPM&ÓÌ“âuîDP‹Uæué0 tÒd3Úh.3yµRjñmõ]óÖÜ[¡Ws§ 4w§!”=!… sÄCwV³‚ Ô«R2Q•’j½¾ê:w1º››΂L +€ÉÝ‹/uY–Ö–º,^7^7µµjî0¢ÏI~€R‰ž6rÖKæ@Ïh³µÂ*¬à6!«e"ScD-CØtØõY äðél*ÕÌÊÄ0Ñ œí¹94)fŬN·Á«ÊœPB#há6Å|s3¡C¦1®¼ëô$ÅF"¤ðùaO€U33BiÆ!$,glZ8[ÝמAF ƒ’!æÈ@œã,›ÓäìDÎ"à$$1S1ÁèÈ R“'ëèÚMUS D—Ñm*à¤ë·•]ï“h5GAN˜¥øÔÇVþ纈ÿ¬™n& ……é”iDBƒ6`(Тœxcz¹0`SÐ’!C]rC3ud ^ÈV,f²`@ÑÎ4Šjà#ªW3Ã_É~:xõþasZK-VW]z.¶/ÙŒ«Ûžù†¹îòé+ín"—sÜ?üôŸÿŸ÷æ k×Î*áf]~Ê×}Éq÷qÑ®)lÆÓõõœëé®ý¦áƒ¯}ôÿ7ü±#‰ñšØð“„u Ù@ 0œ(vì+ÆNˆFbë({W°o¨ø{Б¯p®x~…¼ €w+øÓ?¸YÐëÀÇi¶¨Mh8àö[ÄI`À:WÉ¡½á·[äǃ­uÉóEÿã?À¾Æ«Ü¥½EÁ¦^}ä7X~†vÜ`·ÅÃ-rƒÛÄîrhkÅw­÷ÖüU[À¯pþ%nwh„voTö@EàËãîñíòþ°|UuÛ6ÙL«¯£°¼Ãz9¡>© ç«£ ² 'v†ŸtÜ\rTnúæþ ®Ç VH‡‘}W¬[¶Ê2ë5±ž³¹í¬ZüeÓ©½YŠ–{¿¼lËKÏVº˜ ÕÜU31Vë—Â3ÀD£Vž°Rgߊ&Øš6ÿµ8Ñœó-4¥51¨N“á8Ó:ÒäÁü4ö5Oƒ®‘â\|2D-rNªA‰%d›¬cÃ|DW·æØ¶ÊVç PF"Ÿ*µ˜¯¬éÄ@R !„!3Ó%°dÎÐ,%|d1™#JqÔ &`Ö`«VuòÆQ¤2_7[ñRk]jmµ-^«­¸‰k/y¾á=rÈåf¥¸¹×ZŠYqÎÎôÞƒIK2eeƒ.§¡LÃ%fg¹ÈdÅÌX«Á¯ëzÉy•0»Êl¨€ÒR³=0f›Žf"›çUcÊ'æ‡C1}e×ôÈŒ CSU'hLçp/‘ÚÜ BÆÄ§Út¤bÆ“ÚR«™ žPÄdyeZó²UR$Æàœv³Ù`p€UÚèj&­Ì"qCM!5ˆÎ™»š âkÿ`K½"ºÝ@ZÝŠ™Ìd § ‰ì s… Ûp ›éláì•c¡HEø™Œ‹t—1Íâl̆QŒf½BÎäˆl-¤#lØ0»ÙØø¨¯„âË¿¨iö<¤m…±¢ „Zú¿,vËSSùœ½WðíÕS¹ùçq³¢„ôëªïÄ/—¾Z.ˆÝºú£-Í-³ŽavÉñ¿˜`v`_ 5#.|Sð׎7Ž ” È@dožmSªò¯27æDàO¸þs<½]q$Vâ%N¼6l+–Éc¹ÀVø‚>°îð®Áý„{â÷u‹A\O‚ça¼;žãŒÓˆ§ñ¦`ÖU§úxò·¿'ìþŒòÛàD|.>ñwö‹õÇü À@yƶÁ D?>ƒ¸ÜŸáR€;Ø›'r=Žwy^ãWø€è{Û×X¿Á#°ܾ V˜ï£í;vU/6PžPÿèX_?p·š0¸ëáßBø®øÏ6`Þ ¿Q+/†o¶—}y©¾t»¹,7ã;x™/u@`V½^½«¼ôÍͦ!K…Û\ Y .ÄaíÈøSë±æòŒ°îÅ9v=ÓãEÚzX£ÂÐò‰6Ò^L·>ÜdD¤¡ÍQh$Á&Ì•á…M½zèl (3-M.$jMè¤K²À!“•V ñc¢t½ËƒÏE.s6ì21÷ͳg—•(fF'¨ëŒhôäPN¢øü„%ø´TȈóA¨s}-90AŸÃ+D™Éɲ™ XÌ'øzÇè2 ebûæåm΢>A²‘òDe ›XV|ýäìšÍ–ß´„@#€%sÀ§püº›àÕ*—œ@<Ÿ )ßbV áƒ³¡~õ}f@îÞäæži©n–Î4ɯY_˜$‰9€d)9àÅçp‘°,ìC1÷D*%Ìä–(†ÎûÎ:¶½))Ï­b•â‘%ËzÆÚKÙlŠxcÞìyµïÕ8îb],v_ÇæOµ¿+§§vùç»’ÛÕ<¼ ÖÊKSÀ:$d]™+9Vàv`Ëã8㦠¿jxE|X:< ×ÙŽÙ7ìG6D-/›H÷rƒós>"—^ Ö-¾ÝÿUE%vŽ D çvd nð¼^`GÜUÔ‚\ðâoÄ}žk´‡—z\ïß>|3ì1ö÷k+mmN<'òŒò=/è†5ðî|ÞxüûÝ3ºYYðtÆf tô÷è@~ T´5$Ð ­ÂYåQ¿P÷èþ‹Gw´ |‰å=vØ:Úæý>Û}·æ¨Eý!_õúµžûöò¸ãÛg>üžÝºsƒ»Ö~ÞócÆCÁ#ƾ\ö,­ûº,Z`9/§Ì3ðÙ¥4ÜÕh/Öþc¯Å´±(ôsœOx¾ã‹ñXx(‘6œX±Uþ$¹ Õí9úGK¿”ukvv?¯ RULuîꪕá5½Â9È4ƒ•P512i¹&/¡ " Ëtù¬ÅB”ˆA¬iMB84‰@³ûM\óÊ_¤*F ‹¬ºy1æÌ×✆A‚“%1-“ó ;‡V˜2fB’%¨"5X!Y-Z%&Yši†ü“š|>¯ÞZm^çÍÌ̼X©tçÜöš™»§1•Ñ»„¹öì¶Z·µ´æÖì:¨¤1ó£’ƒ W`„ˆ¸6ÎÒ”@—æÝ¸tY åJ‰¸ÎlHŸ?§²L…ò©ð‰8‹Œ×"ÜŸ\mrÈ•6WÆ`:á–ÁÅu£›F¥Òaå“÷4Æèà¨ÈH"Ëô-Ìú/~øã}rÜM¨Sʯ ˆ)D0êó©>CL‰Y~HQ×p­\°41n³“z IDATi>ÌÜvü™!!íz)A ʸZÆ1·¤ý {H`^Ø035Q²I\é°f„CžB¦{ýT‘Q•°/rd0Ç9w! efGtƒ„E„ ¨ÙÁÈ/sC'ªP’‡ÌfÛÑݬԖ[ß¼¾ØÍ Q-L®n.õrëx^§ÀóæráóÅn7†eE«n½Öµ¿òÕw±»9-uU¿¡Ý^’Ïßà|±¶d¿óÕ¬°=•±¸—d²ÊZ °¢£=}ÅüDx=°½À½ ƒ±r´nÛ£¾î½ÚHÝq·|yðwǸ ßv†/ bë(××d`|Ü¢?µ  a1x¢8†ÁÊO‰m­ u]ÿ—G<}_ùKEiÿJÍŸ°í•»ƒü8NX_ax&”(ï0þ øðõÛ)Uù/ ÿ×?u<`<–ïßž}ƒ¸ÿþàKüwÀÿ&ü¹°'À+™·o¨?;¼º?â Ä9Ö3n>CyB-¨¿;öú§Ã|´#Ò½ø ´yëâA—£Î(q¨µþ#ø/—Öº[_Üw}µíÍ:J¶ˆ¦V¯‡È£„žÈñ™ÛWµlÔ†À?„½{Ñ-W“,ƈޛÿ6ñkˆ#ÆW憧wÐÂKjIóP®qJ|\ðÞÊûð¿­<¸þÄõ{‘ÍÐÜܪXÝjíngr€Á€ŠƒTd®ˆ5y‚ΦÊ*4P#“c‘Ä‚”²Ë‹’¢aLPa”,„"Â5±pé­ÀóæFg:Ák1Ø–)©Çè™ ˜ Ók® œ³ùçô©8«Hf"]*a…f‹T¡*ºiIjÊÞ&ñG’ÅZ­K)Õ¼ÐèæåJKu›@+æFBZ'Š£ò*½µzÓJ[œeJç3{F—| $*µšræèç´.ÝÓÍ9e-i¸¤bdIUÒ\,šÑySºŽÓ'«‡.ø'<]Æš¡LŒ¡122‘dN£Îµå›JÄ M9OØI25NcuñéWPïJ:fm{Ä4§’IŽ+ÙÕaó¿¯ü§™¼½¶&˜Ä\ÓNÏ%o4‚1s®ŠˆOñY%S>N3 &­˜ŸYÖ¼^‰3B«¢‚ÉÍ0ÁS„®ÎØ )M•ÑÄ ÚœçÍ£C˜Þ À,ŸÏjµ‰žp%¦EÎË<‡]Ê4ë0‘¤è‰Œ(I-Å‚–0)fP ËÜD „˜cæuåÕŒJDöaPPr·Â²¨º2Ä 8!r¬¾˜uËq&ÖžÏïø7/寶ÜÜ—.Xù:瀼}˲²<±þÜ•Ã5^åwËyÍ÷?ÕÇ®ÒøkØžeÍ}%Kà8 ÉO(”û€rO|ØË3ÚGЛÅ>²?˜ÖH ÷’1joÖ‚fDZ…Î`Ç™x•¸(1×iÂÙ?.gô êÀ²Åò†¼¼úéš÷°­wÖD­U¯Ë8þ·‰ÿcí¶[sE{·î¬o_ýu*dxèë >þkàÿ~õ ðå _Þ|ÞlÍ ^žÐïË×x÷ ~ñ3¼ÞŸ¯° …W‰Åqãp¢Ðì·÷8oð’8-Ø,[ø x9ø»0Ƹ•ø±ñÃH,qtƒó˜õ#*ŽøìáÚºõb Æ Áhʺô5Uιzïg@ȿؖæÜÈ74D-^êz\F÷Ûžm¼,úhþèG$"çGp/ën5Í3Kº k#pfq4ÏÚ}˜[ðsËjæµ³¯–Í‚6_ã$¸‚ =õâñbÊ!g°k Š@§Y©Ž!"ì$“Ø\ ÌÒ@*s Sa×°ÜhÛÐóB¦Ò]L–k6R@óVÄ+N(e¦ MƒóŒl^33H !°4‡YP`žNÌP¨JÄTf@fæÕ«×f×¥x)VS¶F˜s*£Ã PuUª‚”U+»Zw›ÚYŠ>Ðg©£$T"ûœæË,œÃ ¿ºÙMÈZl'+PvbeІÑL&yŸ}'MÌ@ e^.ðh†ªbÝ´f%Ú Öfq%Åô©B1¹™›‹Ú©žpø`ÿü]<—òQÛf³I{Ùé_?Wþ¾ÕÞåâk+çQ~ãe=ožm¨î™z\x¯txs> <"ÞF¢ Zç ;Ãj°3¼Ã>B?ƒmÁû#V¸ê©´´Í÷Ū`í¥òq:ã7 ú€RPmE¹ kAì0€Üb] §bÅ«v ê0¼\ëþü´í›­Ówu]}é;–¯ÆÃ‡Rÿ|ÓÞñri×Òoÿé±ý˪Á–k¦VMÅŠƒáø;¿ÀŸmìlØÕVDU?¨·¿Ä·7øÕ—øó-ö4b-x<áß;þÌð‡€ê-ªP…Ú0¶ÐH,ëéÀ<®ªG[þ¤hÔ—Rùpþêf[uyXòz˯ðÀVŸs»±>îÌîãwK‡ùí&û‹ •!á¤0‹,ñ·ŒÿÙ˰Ì=Ä}ý„s.ãÉí=tT`ë ™Yw”»(ŒR|&V³mn¬Àã'ò¦×k>MYÌ›—æQK!š"×áÑ=Ç´«je|ÌQ¡-ÓT$Êí¹\mfY<#ÑS˜+_ÀÈÊb™+u‰áÌB˜y‹ÏV™¬6q=œò–”˜Ìa^‹UZÉk'ÓiišScÙ5coÆ£~0' ór.¯a77UC¡ædFêI3·¹âžc$xƒWš_cœž¸ù’kYEj ¥/,›Rš{- sf­‹…L°Œ¡¦h6¡ßWÂÑ$k7( …ÉíJ‰0›”iÎ_??qÞy2#ûˆ>bÌL •”#gGLb̳!2b¬9ÐYJ ÷“4h,uSw·^€Ñ.8½è²N³שGÂç<ñq»{k lfø¨ºØ¿i°ul>q< Zyó•íK)f§€¯_Úåâ9Ð6&³,¥”•’u¤¡LD"Ç·:UµVQEe׌U# gËßyþD_úzäxÀéE}›diX¬ð2àŠAï©Ì5L9™j4º•ÆR­z1Æè‹ eäú¸X$bU ‡#`4ÇÖaEƒ2³œ1MÆÔ~'4”gX%'O¿@çÈKô¾‘ZñF—/Y&2N)ÃÒçA\s‡ ÂY`5éœ[äuA—†à"gãlw®ÏMÎBÐÓR Qfsbq¥ ñê?žé—9¿V©,ÍÓK˜MÙüÌ;ÎS"£LÕdÌ(=lšå5ñH1mfsÔýɤ ÍIqÍš‚˜WíŠèFSÚÜ…Ò +YçÙP¬ó金&woŠqÐÇXLj™#33{ªNM€Ó„L 3bdRŠ +2“y+^k­›º,óv”RÆÐ– Ms¡d^wL)æ@VH×éÔ̪jpµõÌW戈¡š›4L33§8h¢i‡€D®.Ÿ«éÇÊP ˜²Y¤)er˜ÑÍ´ ÍÕw"‡Òòj±H2ÁPˆ dL"ßüò–×ByгTŸ—¾£göÁ0£»›“O‹sRK nJ²!“‘ÁŽ5ƒðœ(MÑ”O ¥At(È ³„·d%£ç1V÷² ÕÒÀìŸn íJì_èáÝ1JR bKy±9¹O–—;ûÈŽ¥×8·87ÚMõòYGFóÚR`©Ð¿ön¾Vž*Çþ­Wl uo¨=?«ŒŒGñ- ñ\޼ :þ1ޝqØŠÁ·HǦ1•Où+ðÁ`p ø °K”økhJÔuÜâÁÿ÷µ Vÿú”_þÛúÙ!KÝn[õ†‚ÀýoÏÛWÆ¿:<,N¦v½òô |¤¿•öaûüªëù^Ýà³úcgÃóÇßôú[ÚãCû½z³{8·G¬o/Â:€ëÀå |&ÜÜÀê¸ 0a(Qžûû3Û9Ößl±óÃÖÖÅû…©Å ÛáÎÎ[¯ãØeßc_Gc[£=®<½˜ýÆ«ŠaWén÷Þ6¬uTà<>'XÏ¿³õu½»Ãìü2µhSòßÎÑz7¬15õÇËMÂ×ê›fµ¹ê÷Wæ½oFÚ*ß`•VdRnؘ/b ¯r“‰¢—¨bŽÌ³eD@Šj¬ÆÅ«ÑÕ ŠD‰\]½§í¢H3–nòÌëÊ.Z%¡^ä(K™Kž uÕÍÏgB¿¨ñi¤lŽk&q9ôÍ@Ÿ¥1Ù$/¤†r(SˆTГL ˜»TK›ô›*…2òÓbŠƒ )NεeŸÈ Ë`$º8Ÿ~É©!02#Öˆ‘1bDŒ>FDáQ]¥Ìë™>ƒ%UµÑÌ á•^¬š7x¡y±Zæ BfF¦FŽŽ•Ñ•=ÇPP*¤Ñ‘ós…¥¨ˆ N˜E…¯@²º“ÅÌg$ȼ¸§»c²,FÀÈTŠÌqý4tMI×Ëž¤"m]Ê«QaŒžq‘H¹Ã]ó«=·ÕADÌ$ì´Ÿ‚3dtµÍǶŒºfe©"EgšÌP>10FfGf†™®{‡)´°™$Ja\7 ×kgJis˜i¤[exÂ3•êc¬}œ/ÓÚ`^èä–p3˰ ­v+Y4TFfö`¬‡4®€ I8g‡#5Èñ”e$n93ÆëI::âÃï=‚XIqFï¡.Ö!óø©ñjþdv7ØÃzuÑza­'ÈüHëÍovGÓCYáØ¾W½tûêo¥«« †5Õ ÌÖ}][\Ö¾ :f²Ø ¥îñÙ^çfZ9ßÚpðÍñRPθ;½ùÓ§}ïõ¼<”Í£ámìæÓþãï0€àòû°z(8BàŠö=¶Á¾AïàŠ$ªàùx{€¾«þ]ßp\½…³JŸ­Ò™¨«±Uz!haâ,Á~ÅØ¦„"rô#úkï=úÐ%cE +F‘>>šúe„.³™‘M„s WdÌ…LÊÁ”“îåʪ>z=ŠØðÖlÙÆ*÷~þËZFì6/oÛoöÂ^ß´Àzù%ÊýA:ª[œÿë÷ˆ_âù=úú&oö­Ö§òPÇc{~ÛV€‰.œŸ­bsFomÜô³#îaêЇG»Ùû+#ÛŸñ³×ÖÚl£¯ùôlíãvWZÖÑ«¥­ë+ŒóºCßà¸ÄfXÏÇw~ØnêöˆØÚŠ-ëWyÈ8æw°ö ¶?¿€áˆ'\Þ¿9·÷µÚÃ¥?î×·5ÊyíÙ×wìEÇâoLXjeöZ¨½ÒëÇÖ[{l†í€áXãëZÆDRõ´¿ðÚû~¼©oZÙßÖZG×åë­©ª.¸lk¯}ì̯i. ŸKåqpoÄ}¶ªú|”ÞÊœµ%ÉM±â„ë•S^;¼†«yÜ1éíu+·µ¶jÅÌäh²8É™$Y–° ÀaÖí}Á!Y7ƒ¸e…”á (-€4¥›äT ‡`D‘·ÒŠ/´jVÜYŒf˜%és¨ƒR–.#Í&¼LÙd‚νݬS@LШ„´y˜ÛÝOÆüª²Q*q­ÎÎ[>¦Ðw&ì’c¢â®oæàô*)Ÿ¶¡Š>.Ñ/Ñ{Že0» ZIC±®—s?úù’=0†u+k¤ˆbP‡A0H¹™Y±â,…îÊdæ[>€Dœ EÆšcŒ1úèc¬ÑûÚs:!.у´j,fåʾS(C‘ÉËe‡’CÌÌKô“"F¬™Ãm®±Sk0ISê‡9 Kàô)ŽFfƈ޳TÌÒeŽû1 j2Èi…¸ÎmšJç~ˆ‘˜j&š®˜q#³™NžæPõY¨¸šŸ3#".1FšŠ³¤ûäVЯdŽ š\ûY”ÎÌy: Ýfô é@%™ i¤NZ‡H„©™ÓK›67•Ì®ré>Pqº_ÂO™'6 ä°iÅTKÏa™~©ÞQÒ-Éi1Vm +ì$Ñ}]ä5=QŠ•ÑÌ ãä–þœö·’Ð8\.ÇÒÑn§^Þnõ`q[ïhXŒ{â¯P¢CoÄŸË=·‰øÐŸÇ±ŸpkXÛÑóZÀÖîukj”°Ù²Öoêd}®_×~ã%îÜ¿Jím.x^0¶H`‰ýËvÿ±¶ðµöÀ P?CDŸ è˜åIÛ"×£/ˆ² ðÆ>ìÏ>†•Ç<¿Ç\–ÖZM3 ý òÅŸ>lu·övå^Ýûòüh|_ýÿŸ Ÿ;^}vŒòW1*ÎFT¿oŸåQ8´¯Ž<¢àPテoðL6 oê¶÷Ÿ_ ¯ôvó¬Ç&t;<áø9@¡Ì®y}Ô ¬TŒžåqBaÿÈŽm‡Wz[„b'Ü*ìÉ­YdÍj™åó—¸…U¸×J•º©(Y~.~y'îäC&òæ¢Ø]/w¥µ‹¬»_*aºæ5ûR=C|…¼…¿²M³B£ŒCÓeBJ!h`5Ǥj-J7VÃ$rБÖe»€If‘Jhé¹#¶#à˜›¹O½T# ŲڬùJT΂]ü“œé–2]à.z¦Ë¨ÌYl˜ußkç 3ÄŸn;=kS‹i‰™o™?ˆÒ Äµ05í˜0kÍv"=ØüšbOä¼YÄÈK_Ï£çË™£a÷‰‚I‹Œóe==Ÿ.O/ýrá—,™Ã0$X™>o+d¡58hN$Lq­]c‚²Óg5‘áè‘ëšcÄ#z¿Dô±J=rd ÈÍ}¯Ñ`èP‡6s MÊÌ+ÑÇx™Ì qú2HcfrÄ€D¸ÉL4ýàêtrž 1ÏÝ®Þcdt2ÈùËÍ tÂ’ z»Œ6í ò„'S¼êê$Í+ŸÀ„MÝ|.),Å+öü“r[™FŽ‘±æ¸d0U’ ŇW‰"ð V˜PРY•œU¾‰fá¤çc÷ÖµiC©™ç`-.÷beáÜ8»B=ÖLyg­W<—å° ï##SÊ5²*§RÔÙäs»rM%™Éšû¦©S7k¤ elpqÐÓq*\ïì%ùÍ¿õ[Ø1xÌ©= ÞlÔ*2›*"ï¬2ް£€Ñö©ÅrÉnë©<>—Žè39÷¸tØ¥æK©Öd¯´½UƒÆÍøjS~¹òïVþ ~_ý³o½ F #á[ °<|ÔZÛc¶^¯µöCÍ£¨ºWƒ -A@[DE4è4„#seYÚ3Ö·ï´û{ÚfJ­cð%ô¬w¿B9О[´ðïnˆŽÕp•3þ—φûŠQpnh \Qc³«¾©‰¿ÚÐ^Ö¥þ¥ü×g›³Ãëûº¼´ºiÙ°¢>ÃÈqwùëesðqÜvŒ3¬'ÀaŽ¥"+nyüƒ„ |hoáP9€G» 4îxl[a!0Ž@iHÚBKÜÊ"p›åvm´’ÎŠÖÆVcXiÒ— ÕÊÒpBÞ!ýw¥¼¶6ÚP ê\’´²¥D© ÈÖ¡ÍÀ&á2ˆ]⤀M¸ƒèÁ†„èFÑW-Ú «Û F¢ÒlÑs0Fª\¸IÝØX’¥"fëÊ-²DŸ,7æ³*%fªgJÃ`´PÎ7Û2аÌÕ-éÉ+! ›Ô6äu޹›Í¹'±%Ι˜´ “4s D}ª'3¯pf(3C‚ìXc7Ñb$chDô É&2ÐP\´Ô3zç—~úxQOf:»%F´tGõ´4©V²Xw¡ ˆ„ÌäÈ«`3Rž2Ñ=°väš™cD±ªg$†,þ?ÂÞ¦7Ò$ËÒ;ç^3{ÝdD&+3«•(µzF* -ƒX BƒÛúúg³„^HÛ!ø®‚ ̪Ô3SýUÌÌ`t7³{æQ³ÌM 6Á`I{_»÷œçÑzžÓgäç<L–BŠ!f¦¦™‘É raVJE\ |×57kN"¥u+…~-3'S‘‹U§¼¢f¡Æ ¥®íŒàk™_‘ž€Ã ± m«¯P®Àé?-”®E#¼„A«]b „Ìœî@^ IÑ5†"òÚE_¶Ðª‰t"¹ÆTÚ5_»"³L2éæNÛÌŒ¶àèæ! ÝlrÐ-ÇT—šáÍÜ­˜ÑJªfL÷ð€¹¼-{’ æðÏÊY}˜ =j^Ü'Ôˆ­²!i±–@¦0ÇæªcÆë´³6•de°½Š½åÎ.ÅÎü±`¦Ý¶ä²~•»œ»Gæù˜?œôŠv†•Sã§ÕTÍO;ç7Œc÷ØoÔ4@‘‘ŒÛô€;œ(€ëqKØÇcûþÔoº¿;ïK¶úVJ70žöx*?¿³ÛÞíäm8欗z|Õé#qcÀ×§Qû!ñÕìÛËhO'øÌûY«ô€òþ˜¹-‰x5¼ÍÓkµöæí%Ëÿ5'„_dÜÆH]Ú|Í?þëÛïöûçßµí]Ïó¸ðô˜õ‚¨¸ø=šóHtÍYònŒÍ°û©’ûRM¥]P,]{⩼>Ô…¾@E³ü懬ÚZyÚ æÀe‡^?ÀîuoÞžl÷Xˆýzä¾|ð~ÏYiâð( íƒÅ})•öpkO[<– çL޳Ôî£P?Ùü[‰ƒcÏQ›Á-QG qfÒÆÎÒ<÷eLëyCÍr»OáçXawHÎVâ ŸjßO¾ïéo-mfL7YfŸ×v6˶œa2K«*ÊÍYj¤i(_ššƒ9ȦÐQ\Õ²&U¤+K§J®p®Á¹` !sò%`+HCŠi¹ÎtÚV¬¸ ˜+þøÙLŠS ”À'¹bH¾¢BÊi)î¶Þ.×$׺r^×È5Éà"æ2 ,´4)ØL›Ã$2eW·2­Tfr§›ÑöµmL€H®xê!é þQ®r锸¸Ofë¯\îkF(µð½>Ó'þ$-Z¼5õ±u;t³Š«t!ËWcÜÖã/C9s¬eƒ"=#-S>Óײƒü¥% IDATcQö¹úy"l)‰B\ˆIx¥7÷B iHˆ!«‡"O+CÓ3,d“ÎBŠÆÅ• "ÝT “Ži‰Áˆ³Â(f‡¿Ì"ÙnÀ¹ƒíXhD¦9×UPW¾kÔ]õ[%³^Ì_ŒæÓJßaîd¦×ÐÎâÅ'ØéûÖ~BjXÍñ`/Oýò¸ÛxB"ÍGîô¼î³cð}9M= t rØnÓ7#?Üû£'Tà Zžòü2Ç¿ !?/¥ÖÒò`íúÞýÎߨÝg¶söÑGï§@'ö s÷ËúSO›c‡ûúݽ}jý‹îÝ ‚¼LȬHË5¸md+–œ–SçÝr6 …U!çƒ%ft¹¦–¨Ø2´ub`ˆB("ñF¼’Šg¡!w»Q6*ËyTSSn…FxˆL$ЙAÄ*aQÿëÞš(`¡]mǺ´X35Ó1ɔЉ1säZ1þï„3Ó3<£:̰֞¤Ü©%i0z±âšÀÔ.“ã‚K7&ÒÉ-ÛVa•0ƒ©{È2‹Š¹­9ýâ/™L‘yqž³ý Ž3tQDj&8à]œL䢥÷uEsVXz#s(e˜–uqÊœ&LÐâ7š±²Z+/ &”;Hz`‘•¹JZIh[ÄZ>ŠD,Y’v--¬,ðzœÌ\íåCM ]U×°×Ò(ä•\ÔY®+g ʵ0Ò5& ¥¹6ìI…²e¬hp’tÕj/ùœÅU­q4±Ð IC–dÕR‚±®Y 2{B‘MÉÒ,2g¬&ºÃ7·ž‘´I›Zy-§zõà¸+©bÞTMìœÆ¨©‰y†pFþ>´;k¿÷[YU¼ƒ£U4Ç–nQ˜ïJHyÞ²ÖðR÷ ·Éž[ÓÖ±ÇÐì~tÜexZãÇÿRÇû£ÏÓ¼{ OîÜvmÞ¿ h!²*@pï`G8þŽÿüp.‡Eÿe·Zò²;ŇíC=ê8—OO/Àáp‹ºÁÚã˜ÇN¸NvÀáËcý®–¿oü¶ÅðòçU÷Ç·r2G1 ñøÃ/Ïøiãép€ysüÏ…*Úæó{Žd½üÝâÞ/8úoN¸ù9¶ ¾`îñxûQ_ôù7§ìÛ'ñç59L7ßP¹Óm¦ÐÿPíwßܪüm}ù»Ä#ßcž¨ÈçŸy¿£5Ýâ\+pÌËéUÇÿgÔÙÚ[¶¯ÞÚìè8yÂttTÎ¦ï› Æ¥Î/*«½´©æÂ¦ªqL܇(ýlRù׉º»¢Ö*vÙj)pE)¥úF ¡~)ÂTÎD³©´sË6ëžð¶ÙËVX2H³‚Rµím»Ôö®X °5\¸j“øâÄºàƒŠDÒŠ%PÜPsC4³ÊùÌXõ]˶Kš¬˜Ä)JÅe,´õƒVÃ|Œ±Nˆšé * ˜Ô+xnPo¹CÙ9·Bs×I°4ø*¶’£+ʺ®¶ÆIZïº÷wøZŒ¯<»Rœ ¯v”'4GŒ—sŽÏÉ÷L™HFVÈLI'}Y¨Í‚p½íÒA&¤rµ~ç¢iï¾#+°Ñ6ZŵVÖç—©èÌ ÒXD³lù¼k®}èè£ç<'&4×2U‚†Ëu-2Òbd"K³ÆIs`dŒŽ (Pб­:\vK “ë]:™X‹eJµìÌ=¥©È$b®ÛÑed@äò.,Ôjê-ù'!bÚr0WEºò¹3´,rC«ºP®•­ÿuà:Ò‚p]J“e•ÓÍ«8/!’ÒÊQ\N ñsÌ @*ç¼R™XÖ&ù¡ZÙ͸ÅyÜaêÑ/Ø]Žö|Â?£íQ¿ÆÎÐ*š}x÷oY/cÜ-³œ¬>èÛŽß‚ßöÛ½œ’˜Ä ŒžñÏÀo¸õqGøí±ÕS)ÂqÜòT:vÀÚ %pƒSÿ l†ZQv@b&êwøô£ý†€}‹=w€½ñÕÉõaÓýÞ*­‰÷gGÔ·¦ËÎoL/È=ÎwðÝ +ö©7Ã÷¥[ŒÈS¹@ϧ;.èVqÉþ=†ëtÛq+d?æ¾ó[ÄKïc§Ø#nÞ¬?rôö2pFm5¼½ÙaØ^m¨œ#_>•KÅK”ò®­ÃÕá…ÕáX¬Ñ¬ñ)æPT«De¶4³)SZ3TM›QÁ¢6áµ”í'µì’7 %à ©¬¸ªÌÅè*ë…ÐæôHÄ&+W#‚œAÓê`';aÀmš.‰.ŒõΛœ52 ú0¹)aS™ªè"aoðÉrñíÎöî/ÅÆ FJIƒDn–.˼ ˜]¬ Âá¢[l-“f…Vd–W'e^ã0X¬eéVGcŽ1f1âZÐuO-Øš´®…¥yDrË…õHG” PÌ9bŽ‘½ÇÌà&çÎUݪY•5pYKWXÈRìÊ„1̦¹EvE†h™œR9ƘE"ª®ré¾ÌŸK P¤DN,¨éÔ´(΄„ˆašš!‡a]<ÀPŒ„CÚ„‘¶ìœŠœÈeÙ«3#F 2»v‡ÕÍN F}vä,ãô”M¤ ¿R^•‘ñ¹ð€œ33!Oq ×§Mb->–¢È|äòT¸¹qí°@jºöéd´B›n/ÔͤÜo}-ëÉN^©X«&m’n¶d1^à€2Ã…9SScæëepN™|$ÎJêšÕ¥­ŽÇj×9B'ŸÅ?ʾÔÝ^7•{׿³rœT“”ñB›4CûÂÐûTuÂMEA]|X™äÈ$£ Æ åÁ³$ZQ„.]èmŽîu´q*»µà™õ‰¨8|ûÄŽÝpžÒ¾A«4Tö؆ýþä„tÔþtYñ¡ aÎññeœJýEÅŸ½Å=öG”“OÜvØOó_0žpùsÀ°sì À=p¿íåÜûÀA°‰OÞ0~Y½ŽÍž¶3´GO¼&>¾á¿|œ°°ÿÚw¨:ikS}*m©Áå×0`õ=t<`8pƒñ/øùÇž 7ÿ#røD9ŸÊDÎÇÒ¡ò·Žcï£x+Ê{ìk·ÇÈÓSÃl¸«¸Ï§ÖpûVsŽóëSôì~ÝýS¼"ïj7^üé’ØçDÒŸêe«£ŒÙžTÁ;Äþéx›u¼âÉqR3¹\¢«Y5I_˜×Í]È(B‹“½Œk‘34Vç?kC ‰hŽæVÜ ×(*ü¿öM<*¶ÔNXÙ+»¦Ë”¶SñÍçŒ%R¦Ã¡uûXpÆ«;ݸjô¦«\Uf¹”æ¶ž‚3§¹ÄˆÝgÔŒ4À(ËuCá„€Åæ ËièÆ SÌõB1Eþª[ØlƒZqô—3oj¬\ቴ]‚bªEÙ§¼¦éB¼0?Yî1º¥‡;#[C8.>ý —·Û^7 ëOÞ?pÞ«¿Û¿‡ˆúƒêÅñwoóxm(†­ƒýt½@9vXñ=AG¯§·„M89¸œ¶ lÂðÝcÙŽf_foý*T1£Ð3Ϻ}te…›–E•v`1×;âLû3ÀÕBrù´OU‘ÍòU^Ý]åRÒ \´y”{ˆ+/“)Mp8Ó˜ÆLX¦Æµ„Œ‹4Ã4¸a7)’N¤LnÝ2s8‚™´ªDOÐ)—ʂ˵’á‰6åb),Ãl‡tMËÁIŒ°ÅÞÒ@b8t-*X±"ÊÊùr˜–±ý×3h “ë&°ø›l_¶z¶ñ¹?·n’äW-™©H<³¬°è˜Ce_p×5Þb¾ÍèP…Z1÷Ï$§ÅÕ™ŠžùŠ9Cò4!rFÌ™sÀ-É+'4è¹SÒ ³Œ%#WÕÓ®ÿ{浺%‚Ò–¹±XÙ±ì7ßvæU@fÎ1{ Îu‹Ø5´f¥š VF kv&™ë%Ê”™«>šš#é%S%嵘WXYq4¤ñ02S3æc`¦)¸¨‹•ìJ£F"dTú#™–H®~õF®øu¿-؆™¹Lý†¯‡rjñÁv?‹6çü•Zãù€Ñ¬”‚I?ÀžƒÇxꉬ0 Ö[’‰“&zËu²Uk™•ÏvGÿo0›—ÖÈŸ¢÷ÃùP~·^†ˆ†yD\ÀŠ|ƒ>A ³<]6D«µÿT`M×_ëD÷ñäWÈwí°ëˆ7ŒDÿ犛¯á;x NìHüÄ!ÍŒ™q9ƒ€*0 3ÆGŒ7¼ÕSØzMð‹î|Rþn?OnW®ØmÁ¥B3ÁíЊËî8îNݱð:>ᎺÑNoâmɱ ” Ïg\âð ¥Â·ì¿=æHÚ´ùÎÞö@ŒÞßþéÕïà?w«¦…$# sÕé·Ä¼Àhðâ>UlÍŠœt&’æ9ŒÞàÉ¥­Ú ˜ži@¬ÅÞ†tf •q1?#’V‰ S Om—‚Úé×·ÎÔª¹_õò$g0„ÈYSE»¡Ê9̹“iºX",ß0U†µ.„*’iRér¦#¦b"/¶šmŸí”Pr _®¨Ö¢¤Vq a¹Êµnæ\ñx⚸ æT&˜ Íë£3449äKœ649ÀµÓ•&´ppZÈ€-˜8è 팞S%P$("ÏѦ\ÔsŠ˜ŒC4§5#]3çÊwJt°€Õ¬V/µ®Œhúª¡—­,ÝÐz6DDïP†dVh;øn«¥Ș1zæõÔ¼æ€-k bs0ÂrAꔩõð—Ò“—R¬”jt‘‰P†lq#"W2X6.ŠURŽp1Éb¶bDEЏ‚\˜Dµ B®ùÏÒT¯ï63rå,!OLPkìC!Œ™œb$ó*$ZàÆ¼ZäÖÅV(™Xø)sS+(îæ¥ØÅ- ÔÕÚ½JkžB¤TJΆIQ²dAsç‰VDÕlšt›UczȦÃÈAõ2Т”9K¨L&jÌ-‘ƒ‡qØå؇&Ù1Î#ÈøcµíyßžöõCñ¿$î”6ãm^zÚ«½V(|Äð×Á8¹°3h€:?LÝcTµ‡OŽGùCßznzû]9ox{Þ¢‡c·ïïësÍS™¸ý‚R;¤ iÀÄš¯$1Úã¬ðü_¶Ýÿi÷GðéÛùÈ~BBãƒÿpŸ¨vxØß?Ùá± è‚ðc–ŠÙ¢´ø®¼ýýŒcድ¸W~<övz½½¾`ʵCWwóÃ…÷Ãë3~äÙðOßawƒÑ&ô=Æ'œ }‹ñÛ'ã—u7‡ðTÇ)tìŽä©tbz,PôaÇûK«Oþð_üé›|ü©Ã; °~0¿Ï­j{0<Ý”Ç9°›vgìšhÄwŸð pƒ–ÈDóçh/3î2sGì²{ ›Oç>Ïù•Ò1<÷Þê°R×…]¥Ê (ÃN¬Š-%颿Bï™ÈÎHN!M9 X.³á‰Ì匑!¹¤ËÅ(¦BCqÆe°œ¯³ ÔÀúŽß‚ª-œ1VÍVˆ4àn4V”œ©³ò<µ)¤²‡«XŠIBfI—9¡LX· Ì4×—ÂúЄ ™ÂÐ̘–®´™VJT­±A¤VÂ3‘ Á#R®²B¹J‚W³‚rÅÇ"-úçò¦ÈÄHÅœž²ºª ˜Ê ,Ý#,Lr È !0édC6Ó*+ÕÃbÊ3—ð Áœ€{¹Ò¬]n.C©Œ,³(Ý’bI”Š*+Å}W¬ Pæòêµ”ÖJ«î.%™ n¤À/V«×JS!_{ùXÔŒDиvF‘þ¹øð¹u Rš×“ÙÝ‹J5:ÄJòPà²d×´ ®MyÐ.Š•µãT7¯™BEq+ŸåH…R„9ei,„/z®yz¯÷…Ä縘’ûÊ:­ñ“ °ua“œâ”yÂR"dº‚‘+r„”FØÌ 3¸Õ¶6?4IÔ¤, €Õ– +Ó+ÆÁ9©I­(®_Ne`£ª¥0KÁ3T䥸Œá’‡m¨ŒÝKë±lضi»Wßµ xoœð×ÿ‰ÃýiJûUñ»Ä-7¤½I¼x^ùCò© CЀl`öûˆûÙÚ¥uþ”À†»À;÷ÃØì¼«Ý_.|ñ\ê8Ô§]¯mБkè—Àœ¸íÈ3xËÙ=¼Öx¨oOqÿx)z»ûTqz(¿xª¿¾ßþâÇæ?é¸oc¹¦OÕjïÚ#f?Ùo¬õÑ™C_ž>íð²Áþ«Øbs@÷U÷¯l¯óÇ|Ñü‡Ž&ö@½€;Ø/a? ãñ´Ž/8ÝÝaWÀ‰iÐïg«öÕC–§1CØ.h¯ðóýÎï/³åè_$r »Š àr?nîUš¶^ J´ æΟïö9H\„ÿøà«3¾õµÞßXmònòïJGÉ£÷„sAœ_îv·ïcÛÝm7Õv›êV¯Ð|Sšìsv¬#Õ"­’mñõ1•,nÖ¨BÛà•i°ôe¨ÙE[AÍ =ÑsN7¾vÂY/K\œ¢˜„C–0Ì•a“€5]Øù‘ˆ©×®7ឥŠé×~“Õ€=¬HR L™èBŸJ*MP È‘cUt †äâò‚ÅT®„ ”L¬Uhfµ¦TVl*}—lG²¯‡(LejRÉ¥PdŒè—yÞ ­¸«"‰i3š³%ƒY-‡qM «ÈA£«'«l—\¥í "2cø‘6S­x¸%Fƒ©°6"ÒØÂj–ânÕ¯:›1YàžÅãª#Ògk¨2!²¼Â„–¥ ZÛUL&#9AM8ÅV`Îb$ A%Äu²C xÐÓÊçû›Ö(P„»¹PsÌ8Ç|ÍõTeH1ÓBCsVïŠb3‡9éÔdNi*•I˜I2N“/\V)è¾0ݼB¯(×5ÙZÐѺ¶IÀÂl.×ø »b)4Öo¥«ò'8åA©8«W9æŸjž‘E™ç¤óº™"å¦â ¦ë‚'3S·© ÓÈ4„c#»ôæ ô¢ùÑY-o2ª–ÝÔ5iÂ-Ë‹÷¶k>ŒróîÕ>Ê“}‚Ýi3df"fföà¿‡ŽŽ“>ãõÔ+.Ö¬{ûæÑ¿¯°6o›*8«ñH=úcÍ¿Ÿö}WþМÿIÿþ+¿ê'«° TCbEº¯àD?㼇W4¢ò>yßÑ`÷û²aÖŸ½iÿý]û?~Ùêþî—ófßö»V Ü*âãtd 64{*„fel…¥ˆ­ ãâO/·{ ÂÝà7BæÑ½šeËùcû†ûŸá ø¯ø|Up?qØÐƒ|úÍéÈ#Tàw°·ûùݽG뵇02a/¨ÿr´—Ê/[eûr`Ûê—ãx÷zÚ vóøªzÎVÙ6ÀQ‹Ž§ó+êÇã¾üµ[ÅŽøw;|/|oÀ¸7ï/Þ¾d¿ÑÓ¾£Ä±¼žÐ1„¾ÇGÇe>ýä ù|w¸ýz?¿ÜFjWQ‡¯Ws¬aqžñzEx¸™Ý8h¥-/”(%¡¨jíó¼ÞjdQ†i,S`q[oRª4…ˆ˜*3k •4ñÚK5EÑR?²ŸÒeØÌbu­%Ë9s#ÓÞ `K\0M0X­FG6TV¥3œ0“#5…kƒ´ Ä”æj TÌ€\ŽR×úëŠbfäP^,C(N“%|Ð$S˜WŽ“™üêeP€"¥C=pI¸d›EÐp¥€zu·bÅ|• xrƘÐTs9 7¸­•xuícZY¬ô¦"2®^š -|ùbÂÂÄD8&1ÑœµZ+Vë’‚qa*R–²4“ýI÷&eÄчé9)¤¹ÄËe‘W– ˆ©èAM:TÉÏ•a35/˵yecµ"l†Ür –‘1gfæ¥ZeA ]úÔ¥_FŽ\µ³yÌœ^f û,ï[Ê ~öò¬Î$¯›hÃzæÃS¹LqiI[d.‹)è$´ü´Ì%•M0Èapƒ“Ã`,†bŸeqÄç?`q5ï5ÄÒp¯LîTа…ε ÑLlZ™™ÃbÊ ¬#Kè¬ÛJE9›· ËŽt*SiÈ7àRÆÎR´œ5Gܾ¿«[õ÷ŽÂÃvÓ^S[R§ù‚þ‚É“åý-€”]ò9â!°œ2ÀrÂÀlˆ‰-1ï>ž¶çþÐõß¡HÚFé'ûˆ— l˜ †æ¥ÇDüºÿfœþû[ bùy»0$² 8VDmÐ'ÇÈÙb¢ì뼡ÿouÇ]mü›¯ ´óÇ IDATñxþå¬~ nØ·>ˆÓxAOˆh††GMPGŸ§÷;”Àc´ÓGÇwøØp 4Ã3p¸›a>y}ôçÄãÇî í€wÄ¿þï ü¢b;‚¿Ã§ßÀ¿â¥YªÏ¿i¸ÇGÝýqw|øê÷'þ瓵‡þ¾¿ ôþ.Çž§VP?8¹Οz%\½Ù@œFÿ0uÿú®j÷«›Ý?Ö×G¾BŽ÷{üüÿFxÓñ#ëoÔþr¶ŸÚ|߯¯ÚœõõAŸžxó¸Ý;O#ÇÄk?«³iV»¼bS´TÙ5³kt9zȬ kÖ@*=‹%LV€zMuK®%êåø]ç$­0s± ¬Nž%SƧËüÄ|Íô´[w `©-Å™%*-+?@l’)SsϜ‹q€!%À™ncÃpps+…\ÍñQײQœâL!¶JT‚„¦£6”²á6M””‘™iZÈy.ãÐ@Ìþ‚Fb08‰%ˆ0K †‘Ôœk;-ÍŒ‰1,giK¯\aÉ\…¿bt·]-Íb†Ù@d$lÝ( Y+KHÓt†3h—aÁJkб"’rzB9s@Sd”êµ²U«\|ê…Ò–pq)׿ ƒ3gÇèÐ(© 92ú9PaÈåžËÈEæ Nêbt3ó’VQ –Ó±ºä{ RE¹Ø€1ž4"2Rs`ÊTÝ ‹Ã0ÎLÆœ™Îdª,{uw3GL3Vº>«à„-ª-%ÖoÁaöcÉ•K[ˆÅkfÙ°€K [r\í «‹mÆ+Ïeq|×È Œ’1G*àäŽH¯A`æ ÆŸ® ME8²õ´ ùF»X6Äa-½»Õ!¿ ø(›Äzƒ²yiDcDq¾D°Ä¼Ò†ªef˜ËÞ_kK«P3ü ;«žK9W" ‰c9OVo’ѽ†]º ;VÒàrCã±îN_¯{a_ÐðdßÜôæ¹C±ÌÊÇ‹ãÍN°otçÊçñú.~Àóé›3²¡ïÆSΚ@Â&¸ÁKpC²¡Û)ôð:ú'í·ðŸì·ýaz-»›y¨ñÿFǯû¿þ îúçs|¥'Od¢ºá¸t¸0¾?-Ån¶Ó%ACOü‡_¾0|]P¯\>"Î(—§) Ô Ç<ö»ÄVð¿Nüö Y ß¡ ”÷Øþ[ð¯`(§’¾ïó늬Eïüò×/çp|_?/Ÿì=Ê¡¾ocÃS=£&ü í`zº{C¹Ôö2Š=MaÌûyûgu¿ÿ]Ém¿GûþÑßãæ€ýÏ:íóá]éw†]ö-}Ûö5›³GÜxþªrÞåÃOu9Î6éå ÛS—D‹È®&Òâë(ÿPªDP¹w&˜Ô`¬¦¤¦Íð2LÅXà…žôtÀ"—²,—ÏE\qÄòD2§ed–T¤Ùu"©HL(ÍÖôÙW†¾ÝËܬ¤L ¼ÎKɼs¹~W[rÆ”.,fµ•U²ŒiEHšÕÂZ½¹QŒ.ç4Ûr™àH(“#戙 ¥0¨ŽÕ¶¾¢Ã ©d`d†0g Q@iY+v­4§¯±›…RHƒ\( Ã:¨–I3sÍ ²ÛUD·ŽÐ‘Yt*a dØÌèD8ÝYlmc¶çœÚL•l„­¢Ô-4lŠ€Ó§7ºÜ)_;ž­h–Ú]d)¹»XÈ1 ¯¨@®8qëÊUW£ÅëúÊ)×”²"X¦ˆ‰%ûcB.æ.©É´6×v×}Fƒ|–Jñ j]ƒ»e0UdΚXÌö«Œ¾îg‹8EÍD¿~óÃIÒ’¶¦XB–4†Dù”u3s…2¿1oå ÄÈKµ²A~§YšgµùÞw›¾l(´6ªŸàbyÆì·¯»ë–³b{˜/O^^p¸EÍnwáÉñó¡äÿOØûüH–dWzçÜkfÏÝ#"»ª§§Š?Ð$ÄQA"@@ Ç Ah%Í*µ,p#ê_ÓrZ Ñ Z[!¾#ЋÞÍ€€ºH±º:ª23"Üß3»÷ha^ÜÖ*J *22ý™½{Ïù>ÿ¡à­Þùû‚ÇþŸnñë²<(ßo[\÷¾Þ‚‡Ç:0Ƨ/£z~|ܵwíüE¼—xÿÏãa·b×AGéˆ Ç¡ÓÚpèç|üÎÞ|ìçÏãöYpñªêh<µ;#ñòðÛ €cùÙé©á³‚ÝmÅ>°9.gpÀ å[ì^c†/l®àËévÁ«‚’HC<ýh‡‡–ßÞÿTN©$ZbxîˆdÅÍ-^M%NEÿ؈ ì|<–†òï=ÊÎÚÁ¹ÿ¨°p{‹ýáïÇk¼©Ç×vªæ/'6°Àñ`å÷Güþ4€~ä¡òÏ÷K9¼møWàûâ—88è˜cË…"öº;`ÔÒŒ{•–¨jw‰"ÏÛ<ßm(f'Äçc{¥m1Eg·­ç+;7æÊþ²Û¶ÌµBû´¦ÖT‹rÌN¥9›‰˜+Vrå!Ù¬6Cˆà eÖ²–½Œ´·Â'f7î`HVEïÊ‘p†Û¤eTïèàq±xƒ,€y­²[ñ%3S˜»n£ù&†2sˆ8$%¥QQÀ&šZ˜œ—ËŠ+óGŽÛD.L&·‘pZ›b$:1QÓ:s`bÐÌ,Ò‚1ë­¡‘2¹‡—¤‰ºfÁˆa. Y@ƒ¥ÀôPë©¡Ír¦nFŽ‘´Ô¼ o‹ùp{räï+%æÂbrM•]ò°bc-¾4¯Í«+27YÏè¹¥.R÷œ¢h‰’ =r²ŸÆ"’ýãç$©`†2,1%U™óéð4&M(4síˆjbŽ¡¾Æ½§lZ;2-FIÍ ã캹–ÝNUC ØcDô1¢¾ÂäiîN›‰×>%­nt³RÜŠ“žš4I×$¬ ©01#29Û-9#b†«Ë¢@…áÊ!0ͧ€`À$q…×B@R¹1Mr™Ë‘E¹)eBváLuP€‰f2y: mQš‰ 7’˜eöÈp–Ú‰`ñ‰˜Š R ØÖò¥sy … îfoK[RÅöDË®•Ï>¶ÝÖ«Ýô²l‰MÚ§Te•ŒÅã•и0~f»fÚfø#µ¿Ø¡-¯ÿÓy«"p›ùTK­:ærârypÁâˆõô–ý]~÷¼½S·­ž/ÀÇx>Þôïï€ûVë‹Þ›Wó¥|ÜÝÿÓx.ÛîOÚSæÃÁHûPêù8üçx¾ÇŸ}Àï>?ýƆ÷åxЩTz…WÄÀë×ÀœáÄÖ0ô.¿»ÿj©¿8¼ÿÙëÇ››‡ÂfÔD1øË©ÝýÔ¾!_ྡ?¡^P^a×áD!zÇù—Û£nN›¡”|È8bg»4Ëò Ž7:ìvŸÚí±•Ó®ž½+ùEjxyïõ74”—›Sþüð»“ÿÍ×·Ã"€}Ø’c8ÞØiè>U–X€}dz™±l£Ü—¥×‚‚PUMGÅ)zn¸ø¸Ø¶©\Å7ÛZY¢³´íû¦b)˜C;¨±Ù¤Ü8 YŠJ™# …4[(¡n¡!ÒäFf$Íô«™S¤VnFÖÌ’è}´ÈŽÜܬFFÔЛ(/@o*‚hæŽ2f»$£ŒéÏ!ü*ЧÌYÁB²™(ôÁ”¥ ]ª9'Íæ ¦0FYlŠÄ’4 ³sQˆB«é²1r*Ü¢«`d¥¦òSœþxf"3¥ ¥Ùd‘škØâ^'©–‚A5*Y‰€RRfÆÈ›€ÒDfn™ç€¥,h‘è%qM°NreÆ@n12œI(àÁ%Ptóf…¥y­¥¶V–Z÷&xŒ±n—µkëÑ3Ǽ1—+¦;36E—A¸4+NÚLúÂ$dRaŒ°`å…Q2ÊÒèVÒ*æîò¢f*SV;hʈìYÛF23á,4úTE‰ó «,ð2y£!Û†6 ÆØ™›kJÕ R™#"’d5Àé0¸Óan`èÇ‚œlz¥§èG¨"3…Pˆ6ÿ»»è˜çú˜nØ& Éðí ð€H$Ì †¡$*8q^MÉd‘S‚S.6ƒæÍÙ€Q®Ê.ˆ¨æ½ÕaتS¥Ê³<ÓÝÃ/ѲÝ1_RwÔ­£íÝKx–¶Á_ €ß{|´hô·\–,{4Fb¤™íòêHW¯I£ö<„56ª 9¹«»beU>êÌ(wÙ›ŒÙ»ÿ«À LBê8¹`Bô/wQo× X¾>Œ¯_c´õ}ùðÈ/ïy¹G¶Åã>õ©·»£Ý'>ϛݞsçö¡úãÝü—øϧòÝWyV};¾®åà! Þ:¾òâ.+;¢oèãþóqó©ÝüÙvÚ@"0þ Œ/àŠåù§Î†m®‚¶ŽŽû‰K™ðý»ËÍýoë¿ìÞÿY<~²ÛÀvòòy šjɨ[ìôr[z㉆–ï4þBÛ]\ª÷'`Í‘À¸Åø ü À;KóuÄ˸eú8ïÏåærª·`Ç&tCߣÄ}ãýb­öšËÚñØq7,¶Û:Íû5]ÅË)¿Z·÷Ú¬®lÚyvç,»K²é¥äGécäm޼¬ÅÆ­² îcKÑÎQ 4&‰>Cꩨœ`ϦÙÓl·mf׺Œ¢Y%Ó“}$}K ‹ºeó€aIƒe‚fn‡¡]Q“Á  •HJÞ³&À*œ^¦sE VÂç—#,hsS<õoçHø| ²”A¸~Ô¤rc*á0 “ )3%Û„Èéd=ay}¯D'ÂM,NLP_a)ÕáV͘•¡ æÏ­l(Fva ƒ)DWqIiØ2TeTr¤˜ŠÁ 6˜èч3Á÷t¥fÆBC1«dñRJ)K«‡Z‡ËÇ*¾l—çuÌÑ“9JŠ´žìJ 4wÁ¦HyÞ¥Mb¤å5îi%“43L~¬ (œVÜZ1ó X°Lws*€«à‚˜ŠˆT2V·VXͦwivÜÊŒ E’9¯0&0†epM*X¡i‘ë)ç@î ¯(ìçº"j™€‚˜Õ #“ÓÞ#)c2#GÒQ›=6CºÒ‘ÐTA` Ä”˜ÐçU"Æô|ÚÈITÇ´ïY5™Ôcڦ΃ѥb$aá–(§,=€_ßU½ ØÊaÙÕS#h¥¤-Ëâ~SBC ë^V&ŠAZå]*ÔÍ ½Ðž²ðK14±æóàÕvna3k¨u+¥¨ù"Û ›åj!ààFC°®âsâœTÇyœ¯­¼‰ºSì{ÖsvˆKc-¹ƒÕnŠè–Ñ­l(»lŽðœïA`¦mëÆò²»Àï8˜Åb8þ{¶Ï½=ö|Øâ¸Æi—€NïçQ°2_|=,ç[ì÷vpßgœ/ØÅŠÔJ…±†Éμë¹ÚÜúeüzÝ¡·ÓfhD3tCÜa#>þþX¾­s³¿‡ûoÑþG¨}b'|&¼ºàcÅÏ ‡Žö„v9 Ûoj{e}_³´ NU‰sÃ¥@YA»×o~êløà« øGüÀ_ão.×Nüñ‰õŸjCÝ£¬k]']ÀËCøÃÑú‰¯OvÂV,$Ý×[:Øêyg0-=êÞʽüï (¿~æ¾Çg/Ó°VŠŠÁÌ'­ LÌkö”0v&³ë¹Sά Ë:멌Ðô•Ñ-Ÿƒ1Xíì»tÛ)[r gÍØU÷ƒ¶3Ÿ±œ)žï!Y&ºLæaNiblÄLT•àf^œbþÎ`’i‚ sCºî )äUÝ 0fªÓ&‡óŠ†Öˆ a$¬:\= Œ¹u9€TótæÆbfp3MyP_ ˆLeNÓ‹ Æ–‰ŒäŒäF»"ö4âîÒ""Õ &-ƒE´[™†Jƒ¥¹¹Ó1±·?¢¿éaê–ógR0FÆˆáæ #cD I,î»Òvµz±T®aÅ= ЉŸ®,.3'Ó‘k€L¯9g4„ŽRK)楔ÒX*aÄ|âÍÜ™(ZþØ6SâºTJ*GFL󞔚¾ƒÛÈ+8#eŠJîÝ**4“9æÈ(h¯´z΀Íè3âœH‘¸–µ³çµÓÆŒÌ1Q´+²ÁŠ‚èᜪ(0uµÀ¦9§|zô-úeŒ-·˜Éà¨/pdéâH™¸d&’4º[s«æóÝ{XŒÄÈIbc ó«5ÈÈ„©šU8Tƒ!-hfW½ŽÎ©ïBºà÷Ýÿ謶2øŽHîU¼«þÂtË´ñ bBW\>•§ï’7,¯-oå–á£HÀY[ô|yºú½7펂1êjEüf+÷„ÃöÖ½û¾¿œÏçÍžÿ ¸ãSÃkÔ,ÏÛ>>-=ñÈÏÐ÷xÙÐ:Ê ´a,x:àƒðÃùô¦}ýåÈ·+no±¼X?ŒÌã§ñŒeÃ]GÊ@íàoÀ#v 6ÃpÄDu¯ØC)Xm­Bû‰³áo ~Hüf"œ>ààöc îN«ýT!û*ê›Ñ^ÇI:úåä oQ·Ó-ðXOÿõ3ü¥Ã^ œ¸~½–þRÆA|ö±úyÉãÀ©9è(É“ùûO»í@¦›ìþ'žlÛ XªôEäÞÕÞŒm¿UßJ²]¾ä~÷ö„²<, ‹cäélØx”v‰š¨ÄrsÌ6†5nû²™§Û(X€}ŽàÉòy/êÁšÛ:Üe¨«Öâ`Â8÷”`8åò’Ö‡E*ç×é…Å„¥zLZ]'Æ÷b!iwc)dº€†Ù™µºÁ4çêä&PŒ³ôB Ø^e`Šæ(É3,‘È®mhldÓ”4Ê0¡O¼2mƒuƒAmŠurv¤ù½ãZŒå•|bs$ÂÌH¨g "ÇÌ?’!$rd‡DC EÀšDh΋h^‰H ´)‘£h ÄœFúÝÀº3ºf«šs]êò˜èÀDbDpkÒmÔÜœ=e“õÍˬ9ÍWZ–@q KC„ú6ÎHet‡!bÛ.ç\WÏtkÕJ¥Zˆï¾÷šI7Îk­ÌÍHLé&B"•C² eLS [)´b¤ƒNTÁ&ÐÙ5» šÃn])·´™ýÊж…aõ‘$5ëÖ##ú6b$•,JG“¡…9XÜ Ìé6*;¥˜WC…ŠXÄ2qx¸GPÏ9"cÎ~B‰Ì‘è9ÿò06°HÔtq[¥(Ÿf¼@f2@C2£÷µ÷mäÚ¡ˆ1 89kõ* ¥é wv+î…n0XÌ„LÉLNgªR0£W³ê™bdn"æËqEIg*ÜU`åP×›n¾²^8½ëûšQŒB0Îûø8ºùy‰ó&\b‰^rŒÍFh|Wú¯Ü¿¦6Øëa.…ðÁâ‘ëVŸ~½?¼WÞ{ÈÐa© ¨¯|?Ý•YKYß°Ýl¢=táÒŽgœhã]¶½F ì1¨ï€ßÊß=Û—ÿjíÞq‡ÛOÞ­ ü씣àeo þ¸a'ºãÙñ†¯XôÍÝe¸Áþ“•8ó¹_–“ÄÍ·P PÁxƨǣ¿Þ°t÷’£‹›åÑóä@«xq€ÅN¶¼OüT¿á~ýÊöð›=ÞÜâ&ÞYÜ·—×e÷f³Wm[bg—÷~©Ô{|›üo¿ª@ù%Þ|¼Æ³cOä÷Àï¿É·û²ò:âéÂÝOC87øqÀl <þW¯(ýËvsɯÊVkYÆhû—¶Œ² øÊØó‰\݆îRÇC?ÀqRyÇÛû–ºØ{àq­ ÔS.ï[–¨&pëݶ^;òe3Ë@Rcà£dI áÚRdÑ0ì4«´…­Y­„!’!ót]œfi¼Qx°¥ïM­y³fÃLÑdÞ[ªÖh†xžRR`î0=>¯E†˜¼éÑå:ˆ•(48ËôÔ§˜éR1똋V¦ÿ¸PѯWÔë@´ÌX1!‡©1°õ±"ŒŠi¸DáõUjЏ‘>;d>‰l³U|•…æt±®²CJΨ…‚_=«Af"‡R¨tÀÉ«u™ ‚îR*×i3½[Ó,©D€"s™Fjo¤LRäÀ8_z!ŠR[ô û:Iw”쪺UÉbS.à ÃUÕI&¸*5Fäèd·2à9¥OÕÀæÞªŒ@‚¢åÜ'À®–ΜŽ¦fíÎÉ¢âCÀ1Ò4Œ9çÊH%”̉@µân…EVÍ Ý‰yLD6˜W›°Çô°Y¸››žìkŽËèëØr\(ÒªT2‰A‹¼ÂYÈ„gRi˜Uæ Ûøq¹5ó ©Dô>¶1¶ ÃàDªo`Ñ•Îad5¯¢2‹Hý(+ºÆ£h4À#ÌÓÈ6ãx4§W„€b"Al9º¥Y–ˆ’ÎncK¸O,í’¥(ó£èÉôn™çèÿÙÎïâù^ñ‰ø£Ì²5_À8œüŒry&ÎZÂèô?Z>ÈŽm{m£ÈðÁ­Üxž=£X1+,…oöU[PGø©œ§›ÀE8ë¡0¿^bëç6b»´Î¿þ5ë»å-°oGç rÃyàc}·o÷9*ð|”3N_Ýàxë¶‚¾@µÞùØW¼t,Àþãë >& °Û^íÞOFlŶ¢Û8Ùö^íÑ`å_þ¤/ú{,ðð[¯ñÕ=^pÀ}{ùy}Ümò›X{-ý<ØVÂ^_ˆ÷Âc{ýðú¹GbjaãÁ¾ÇÝÓ¸V{»}Ü 0¸0 ØÞE¹GÔ—ì¿Ðú/úÕ?仯ìþ5ÙÆGúý>¶jhcóO¸{9àìʧ};EG?~¿Ù½{˲aC)(D G¦ÚÐ0m‹ÑÇË#Ê;ã}Ñ¿§^1ZuѦH®(H›Öuwtd¤©dfDbKFq«,Þf:Ô" B€5£Ü8”¨ÆÖÌ ec8Ò}ÀÒZ·4Éwô*VZH#ã袼UÞ2÷`û·k'J ä™Ô°p Áhæ5'+Z2PkÀ ಒÆÜ15/I$d…¥M=[^™XsèÂLW˜uób¶£‚ò Aª2O*ƒp#ÍeF%g9â:.Ÿ•ï˜ß¥€ ©çu´eH·Â4_ ™°¸¥rDŽb£b¸™{œ‘#X4bÕ˜pô´ùÈèn£X6 C"ÀNŽ£ •àF¬p¦>O!CH-YlxÎSÁ‘2%=·.[…FºŒ“’T½Ø¤ÞuC0%¨˜:p*#˜pá2Ì—žy÷ß2Ù £kálšÁ`SWµÍ‡­WÑé×÷Îá`¸“>R E߯¶öíyôuôu»Œu-9Ý?ž°‘IsÉ‘eš×Li5æ(É›8°k±áº¯È@d …,aR6:s“0¼ÌH®¹Ã!˜"1ƈË6”Ì9õ 4º»™SQ”UG5˜Ùa] ØÐr³ìfBŒ4bæ’Øyk&wÈ™Õw5^ÈçÈOÂ#ˆáºy—úyî¹_x6.ÕÞ¡ÝãRmô°ï™¿’×åä,'ÇÈÍé bHQî` IDAT—¶eãØ¢¸ag¥¹¤l;\þ”^¸{8XÀx9ú‚ß ÜÛm{þìûro‡û›][wõ\Aa+`Áyƒ·{”û´6÷—õSmïÿØow·BÃC_°úÑúéB< Û–üÊú$Ý}B^|lˆºª=®LôŽx&zA.Ø}ö€üÉœÒ?b~ |õWøí ~[ñ—í訥æúˆ@opõ(•c2¯_ÿ´#íÇæè·Ø}†åñ¡\°ëGûì´HÃ0Ø÷ØîGo»m{ÅÇó ¬¿}ÁÿêÇCžÊ%ß)í._>å ·¶~Âå)ñM{y[¾W¿ÛôùÒwkÔÈÖÕn€=+¶#ì„g(HØvÌ—Œ~Üxêûßúø ¼3ÛyñTò9sD/}-/S[i1,Ï‘/HDÀ^È¥ðÖdÒ†—¨rážD02»ªËD%bÓ, n©ÞbM,%§ù²C…¸$ôÚu06'y•üdJ OX£ ÷ iËÈÈx!ª)‚¡*}Ò¡)5É”%P¦Ú~Ö%™B)mžÆ0:y-ÄM+‰:K&ÎâîΊbQr$"]óÝŠ!*®™MO›`ì *™Q2ŒMz¶0eÊ‘™éØ2DÀâ‚RYܦÅáàNÐHKÑgSÍF Ø H…ð CZ‹N…P-Ã] 3Þ‚«Y’™Ì´”eΜ°¨ôùåX™'MiÒÌ¡¸j”Ì©D/n•(cd¨ƒ¤Y‘©"RsteÅÍa”¹¦þUc¶)Ù ÔÅ83ÒçÌÙºè0¿þHpM4a>QYÌsÐ99À™¡Hõëy\Îc=±öÞ×—1F#Ý&Ñ Å€êIÐÍY ¹žô 8¹˜‡¾A1Ų”ÅÌS ™’Èy9™`Æ’YJµb´¹ÁQRŒˆ¸l›sÔVÝÝÝÉ -*C-”59É"0È$GaМNëè¼ÎüÖBZY¶ Û6ÿ±˜¤/ –‹øQúÃЯ»_*d@Ü»½æØ/›aìæ_ŒZbmâ–Ûc¼ v'/„¡ù‘ˆ- ò2¨ð‘KØl…iJGÝ;ï+ÁñÎÎÜûáÆk±fÿo¼±;=^°çq_j³ælîÕÀQyꚎ¯³f´š-ÎþᲜ÷‡;{¹sÜ9¡^ò¤àgC)¨ätÜ8v»ååÁ 4Žeœ¶#VàùŒóŠ_·#ìô¿9ì€vÿSgÃ#`¿Äß¼ÆRñ³†0¦¶³o1Î=!\<_üfôÛ¢ÞzµÆòúuϯ7 ÷çþø ðÖqx‹Ý÷Xö'k¨ !±/õˆ^_jÛ­ípšãøŸþõ¤ ?»;Ý-XÆì|‚8cüîùÙ¹ìŽèx»?±þí'»~¸ ®/£~êû±%·]vŠ£#V4aŒ“?wèËiÈ#ÇyÚG«0:Ó/é8Ç“—…[$ î…-4˜fi-~.4r.I„ÍJP)¸Ý£Y7Ï\ªÃ-aC2cIzÏ1z^º*fµ\ù© &\¼u[èÅd¦ %²”¤†{ºµRUp}€ ˜¤%$¢‡]bŒ0‘asóĨ²:mi”>]™9*3ò˜é¡’(¢h. ²Y)Íf+X@€A‹ÓÝܯù&y5æÉì%…­¨€DKp=Õ Ì¼JÑŠÁŒ0âß #ón›Á.Q …ÄDa’±d†2‹†‰”YÉ$0«7%I ,€OÈ ,¦ðRIå$ƒW"eIòš¯rÖ‰g+Äô[”«˜‡{bªÒ&Ò#sÌæÍfâ+Â#<#Lt91çU–ü‘ãǤÂ…,L$B TˆBº¹[]fW4r6÷8ÑI³³n³k@™12·-¶Kl«¶TLlºõóõð1h²ÒX†³>Ës^ÖEh¾@cÞ7Ê+Ë]„…é&x†´ „ÖÔ6ÆèØ*‰&o6ß«J½«¯£k¨ÄBÎOQÚèîaÖ Ò&DeŒT€ÝM°€UÈ¡AÖ`b‰¨elXKõ^b*¡ ô<ø”þ¢|êüß_Ft~Ïæµr¿øaò¤CpëÜœi…~Aö:÷—Û‚(cĉÛçJGÇ4ßÊÑ`_«¯Žc¸©Vèh:•qß^>¯ÛíάÞÜ ¶ÍÿÏ ŽßëôF_›m»Äþ²Éú§ñt\ò¤õ¤»÷À6¼¼T®´2Ô¼PoòXqÊÄÖ±^€~}:î?œòOð¢«)jgØêáh<‰Ð8•€M1Ê»—íÏË×ÿ߀ÿËþ§Î‡ÏѸ)qéÈgñŒþí§|ÝŸGîñ«ß¡ßçS‰nÏìðºÆ[ŒÅ±µ>¶‘ø„ÿ˜@ÀðSU1„È‚‹ŸžôžcCÀŸ·{^Nù úG,ÿ3ø‚¾‡ù}è^Þ,«ÿ½aÁéB¯Çm9¬vV”[E[í—ÅŸXM,è+bCî°=£ ¥/¨XtX7¸knEƨ7ácÛ»{Æ —;QÌ,¹s®‘®!Ί¥ø’^DO+.¯J˜1‹w!GñHZ(L!h ©Œb’º›Ñb°„<¨N¢Zã}S0„F„WH* ]aêI¢Èl¤À0LF¤Ø§}ž¬2ÊÆàKÒIºšÁ§ìß⑼¶¢˜2ФÌŒ¾(c˜:«Ádœ“ÝÍJÝì=_¥a³µEl30Ä€…×á VÒ]´HŸzéÒ€:ä XAçuQ?ÊdL9ÓžÈ@!5ÜHdÊl…Ú_Ôð1p‡Š‘)8T®g+¼&1MQE7:h“C§HE÷ÈœKt¦ÌÓdJ(”çä>ÌE&4÷ïfl´½Ùb4Ê1¿–@K7Tq¥+Ú|‚ê(MɳºÓ¬‘U`FäŒûÂŒp³9×vÃÄ»JWÜûµC™]ÍRÆ ¸Ê «"˜sïá†4Ëb¨#s°DRæm&s 3ó9Ôr€d1,’¼rÆ€!dnN«ÅÈ0Ǻ*“[g9zD¿ªZâEKµB2 ­Cêg‡(±Ó¼—šè‘³D"æ°KnEë‚ »nÀà%Ó½ÒS ½Î•E°ÈsàcÄ·ÿS¯2Ä|YòŸÏ¦G£jz¹øþR;üœýbþ$Ûòc·~òÞ,Ȇ †`ù˜S"lû¦ºE¤[þñMÅŸÚ¶ÇÚÚØÂ»çIãç;~·+O{~Y¸+]:ãï^lû§(éÿ£ÐÇ’gë0Øò}|¨ƒï¡Gí³aõOq¸{…¶ Õ¶šãd‰¼ Ýë(¹Ýþ±&Þçíc¼yøÇçËxgyO«±zdÈ uÀ úËå>¿ÿwh{Ü$Ú ~âløùù¾Ã®Â;D‡?>à7 ŽÛ/O7 J¢ÙCùºý»õ7V¾l£ºí³ >µÃ :ê×ÏÇ}{Z úÀËÀ×-¦o;ØéÚ÷ÕÑõáqé8,XŽh¯á7P=v«^Kó†ŠZþÛ1¾D[NÏ;ø‚×0K_Âv•å>X'ÔåÛÄ©Tä+`ÃÈ#oOÀ†a Ãu¤ŸÿKÛo]¥»i-}ñôtãÁs?úbÅ P —´4)nIö JÁAº[aÒhé…DÀ‚Õ“F#á²dº®†Pµ•>œaꙆ(]¾À1 ^œ4iøb*©1$¦ æ*g¢EÕt}VÅd`ˆ[(R Ú1wWzg?ö¹HÂ<ÓŒŽ­¹hv ¦Þ§˜¹Ñ'mÈgî=T›v<äLºrtŽˆ4$,™ËÊ\/ÏÊ•‡eTå’±ilP¨lvPØ;+þˆ¨Ð@Ÿ[(Œ)ët&#H ÉKÎa·u/iw‡ØDe³‘e°Y1‡Y:bbRsZ#R0@Á øcÀ ¢ k™Ìap“5Z-ÖèÍÝI &u!§ŒI`N(¶Ô €JÉâ:tp'݈‚Hi…´Yª¡¤„mÊ;ÌÜ|ºßB¢d^ÕÞä|–)i -Cc(&Diô4Raf.kF–ì` u§H-'Šó§fJBÒH­ÒI´šXY˜×âÅéP‰¨K¿¬îºhôTvò Œ:AófÎÂÚ$!¬‰1úŒÖF“WB£32Õ-’i3­Ô÷@%šYQYœ~õ–½8в$c æÖ v'}žÚ…Ô¢VýpàÓ¢, únXË£z/±ïŸv»g«Ÿë݆!¬sÇR°½,7ÿ«fþyÔëû›?<Ê^ìòi¼/^€ÝÅ—-ó©“U° Žw,÷ËZ ï³>Žå!Ê»°{YÝÛ{ó‹á÷Ž·È|¤±¹×ò¦ÙM7Å«­Þ^à ÀIŸŠdf2³ô1¼„èÉQ «šáªn¿B$Ì|N <”œa“¥[/ µyÊDÆ0„°–S GBŽt°˜Ua1Ú|ú «åÃ2ðš.L›0 *g‰A6½õƒ™#9Ù‚ô㤴 Ï18e@Úi—”6ªÂhÍ­T#¯fêjšss¹Ïe¦F`Ú2s¦’àIŸŽƒ fmm^Ï' [I®ó1ĄŦî Áü*ˆÖ&m¦nRI"Rˆ,HpXºU—£Tí;½ÒŒe†ƒ˜‘ê “]Ï(¦¥9ÓU(*•=£çˆž€ +Ôˆ’æÃÌ”YX雥HǬM£OP¡M‹æ  š~¿”0U›0SÌ,—8^ŒW'8KBFØœÍÁaÔ$ó4'1™‰>qx‹u¥pdÏ”FF÷> ™44MƒEžJÑQ:Í.U漕”E"Ôøÿ{ŸɲäJï3»×Ý#òG•³ªÙd—(¢!H^4Àc f%€V„vô D/z´ ÁwpÑÚÌMq†]ÍŽª¬Ìˆp÷š-®gÙ³ËU "2üÝûÌÎù> …‰º²f ¤¦`ë` Ñ­y‹F£¤¹5oMôÔuNcýfXXHÆåîñصÑr5Fn[Õ\LX©aŸ5 J²„LͰÒĘ“Sw&Ýʦj¥’š¦UQy0}Á<²Ý›½JFfq^ƒÃ'6™ƒ­¼+îØÝp—Ï÷×?´ú[ÇÕqÑ AvP tFÁ¶Ì:î[{ÆØì‰ïíÚN¾Ñ¡Ä&äË?úã[ü*Ò§„KÅÇôÏØÛ]Üm›°»1>jûC›yŸ<¨'Tsümõ_WÙqgØtú4ÏOOÐ úz9Nywwèn2ëÙ æí¤ëù2N—jŽ®»~g4>Ÿøé\±±çŸÜøí¿k¿B}öUßáÍ«¿¸ûc»èÀFüørâžØ DÃü õ““ßÛk @Gæ¹æC¶zÝmjWOý¹ÅõÙcùÚ‚ƺ¥~‰2ð[Á‹ +d;×gØ:ª£5ܽ†7,Ç¡òÑD³~wÏ»ãŒnsË ÚïÿcÜ?¾`íŠ ö¬|L@D#ÊŽ½Žñr‡zÖ°aÛ;ÜG"êB<'Ÿ^m=v0ý ¹÷º£íš»,ËmÒ2Y‹ö¹ˆ¥3½jZ¸ i^à\JEÑɱ_Â2š-\l–—JÅÌ&›´[sB0–ê¥j'󚇢¹Œ%C‘L+¢‚ê j¦ïMífŽh!™¸%|²¢¦`R”y’C=ÊQN«O­Xbw.‚Þ ¡ÐkY3ÍÌݬ»…SÆœ‹Û£Ö9ß{¡·S½?S¼;ŸkõÃÔÿ÷÷:žøæŒýé6œçÙ6á´Ã[Ëc\½idîþFla½ÍC¤]fÉß™¾½«3Ç)bO*M;“£l •ª¹†ºE&ªŒ*ãÜyEÉÌT3¡52³›e…IWy‹ZV!¬AwY•iA‡TDJ>Ñ£Òk.+Äœ}Ò ‡• ­Ê× Eª¢aO=«¾­z¼¢öD|ÝÓmaEkc f¨*ö" ¦µ$X{+§Hèë5`%i¸8ýh.º·%a[«HX¹ù®QÙòEg•Pª‰‘¥IÊŠµL£,h[Ó/©™Òšç¤8O\55·Í%Ùar›¼[éÞœÃ"aÖˆÁØI¶'v²0ÜÂLÊZ7Ô*/[SEAò€Åê4ÎF©H$R˜kýB!Ì­1šE ‹&X±Ö èlp0¬RYFë´C†µê¿–éARÖBBÝÌÜ‹|KÔƒ]¬õÈœ#瀻¸¸%Iˆ+\Œ*!«\háÞV%žªÌ%ÔL(•SÛ†ëeäµ´Io¶N£*Þ”ÒJI,9bý7M Á„uxLv-sÍ…¦R)g!¹(çSA³˜RˆâïOZô]¿›ôu‰f¾“ï!l‘îV47sÉ,¥‚¹µ÷ÍMQˆ¡ºÌ‡@XÐÊB€(XC ˆ%%1—~:-ÔàáÉîVSŽÍµ¹}—móbYÈl'˜U²þCîÀîfņP +°A?f,«àm½""» 6a:ìy®˜kè‡cûó÷Ò¾ÒÔU^%¼x¾PŽ-ë㇗ÿX¾©ùó ßöÑ|h5N~={aÆ»Ë8þðñíÛ?üßšðÏøºï¾ÚêNÌ»í9>¾Ãæ£áïüå8fŸß!ÿò“o>ø¯u‡ø ´ƒpr¼ ?ì¿ÔûWxþpõ¯¯¯¾ºïSälø¿¾0°ïlàíáx¸;æ¾;6/ä€92qñ÷?8rwúçÝùÏ)\÷H"Ÿ3àöæy÷n׎×j±=˜ïy –ØêxÜ t¡tÊíD°8Çi†MÀ¼Ûr?æá¼}ÝåÜ^屬½øÃ•Ï|oŠ{¼y{û^ú?Øþl†¿¯G´=Š'àl8#~¡Ïݯ‡+/û¯ÿ©óÓ×4§ôþK/úýWøN?ýó¶‹nì¯&üÚ¶íd:ÏĶÇóW…7|×x¬Ö.zØúãö~ïÀý5Áv²~L;jömn׫ãõÄ!Ñ&B8lP mï˜G©Íù îí6 ðXÏ(¶êcóÇq6a ÞòcZ·a¨Â%Fõ¾¶ãHŒ-¯×Óöü…ʵoÀÝ69JzP¶ÄÅÚÜmlF g-4„yÊeªê«&­²ı– =­’a«†«ªJæLÒ%_oÖ­ÐDr%T–YnSÓlšmܻՄ¦À$¼j Ê­ÉjdD9 Æ’¾/ÅL1 š3L ç¿< Afi±˜‹†W%.F­%-×[i´5š¬ŠZehÊš!î0© 9‘#q!®¨±{–e#wÊ*ÁæJ({"Ì\ÔzN‚^ó2£±v@_®ˆeº ÉtU.f„źôúmÏB.’,’PMdr¨$ÑÍm’¨ò) 7HƒœtѯâæÈ`ï„i§ÔÜR†YšYˆP¸ý¦K¨•ª Z#]‚¸TA «‘sd]½j}ÔL¸ñMs±VË8™y{¸k¦$¶²È] f¶x+%޼­P,;ýÚ6dŽm—ë9”°¢Á'™ÀœÕQ™JG:W¾Œ‹B[ºp É"¤T¬ò™E ˜HQS€¬m6“[‚YÕÖtnNR´@¹+B ›°o]> ¨‡aÕ}Ž6kݱ*œá0ó,Cz¦åKmV µ(3B¬?xMÓ¨fÕYÓ²›7vÊÑIŸ÷s»äv}ñ¯êøÍ?Ň?üñ ë¿ ëß쾯æÖž¡¹Íø·çú Ä_ ÷4bçG¯£eŸmCǽÁ ¼G=½ãØõºm{Çþ²ñãÀﶦ»ÓçÃGØwÀu Çütœu@Þ¥ÇCÅcòýL\Æ{˜~‚Îã€ÎÛvÈü”Þh½UO¢míeþÍÄô(øxif|¹\7^ÏûD¿‚ío+,«aŽâ#Çq^Ž7Ü·l;y³f B©¬e}¶Ž“µ1*Ò¨‘CÉЭ‰Ãm­V•·%+ÖPݾ/O0`FƒCphŠJYuŽ}!ae]-àÍÝî9¯iwõ²7ët¸—9ôË;ªÈ^(b/ô¥dhÈní(™nÏÎ(ËômšÜF ˆåô)±Ò´K•à¢çÔ·[³—ëÆ´–ß”Y9j\†^&¯…kp«W…Qš†rZKè(˜-gI·660%ŸÈ­[íÀ C(N˜D£X C³Ìhr7ÑA#l“™d¸mþ½j–7Z<‘Î5Ö¯Ò„üV&¦ˆ„YƒÙd^1¯µÍ1‘Ûœ9«¢£õëÐBÁhJ¯¹†]URâ6XÊBå :K܄ܪ` •KÓ-%uóžŠs2 î–ÉW“@@±h9[%”P Ömš—9¶Qp“9MŠySóLÖ˜Zjm¢¹PR)•QZ;'ˆ$ÝÍÀÎh(Çæb•­Xöœ³pE!³r›·"ó¯¢A‡îeœEU"×c° )Ób¯¬ò ”¼(rrõ¥ kæ>Å f“Ìõ@' ¤–K¤lÀ%¡Úš¸1ZsSL LC° ô-â@Yq“ªÛ˜Ý7R›WŽ1ÏÏ ;Á °H1Z¤OÐc‡hˆû¢©úV$j¶´¿-ûõ:šÚKö ¹ñ:Ëœ/à6<~ÀÝpTƒOx¡6°¿9’fÃß'àÜ–2)Ñ^·ß?\ÇÝ7ÓÐ6 Pð«/jéµù|ôݽEq IDAT{vŒ:=< ×Ö½ÆgÁÃqüÓ±ÐUÛÓëǾ7ÂÝÏwøø5}}ú¯8`a3ÞýÇB³¸âõG‹õxý+äl_ÿ„u8`×Sk ÙѺíÑ£'·óœ¨WÇÌ£^º=56Tßr·éÕ Îq½)£Æ·oÁö75šú¸{UêöÚîGÃ,¼LØÄÞÎ-ðÆÑ!x!ý¬x0mÑç6çðß_Zg{Žd!?Öö–ØÚhÿœvN?]ò:Å|›ßâúf~vÀ Ñ(X!$Œò ~¥®a®!î͆ ×¢¨½Í `Î6+SbjÔ"Zhd$b2vîŽ+óšÁÚ7Á hH*õÝ#vBuÛ<½Ñš5zO393…rÓ¶cÙm‹08ËLÄ:Ä–Ìq5­Pdú(†(×§Ø!hRµ|är‚ŠàÒdfœ„¯ý9 Ë?+sãåZÏW]GZ yÐl¤Ò²J¢d¢—¹9Ì7Åó 'WÛ‚ŠàÁ!€`6ªXReÌ‚)­ B@–Y[,†H&ªl¤Œ4ÁÄ^•Ãl”ÌÕ‰F™Ì‚ ¤±ÓÌ„0öRÙܡګbæuÙfŽ dKܵ¶Ì€§pPjɵ‘Yès‚n n%g‰Ì%Éd¶ÊkµÎ_À̼ÊÌd¦¢¦ª?HªIɹ>µI%Ê`’¦fêä‹¢9 ‘˜2ÕĬ阎\k [(7¶FA&4AͺÕåfe𥹓³[ÁÎÈÀâ§0åÌ,)³¸Í4Í6›³ÝÙÌ‚tƒÓü}-à&Æêò¤T4MHUe€¥qËÒœf¶L¢l®½CF˜!{i!sY¬þý:·Ò½Fkfã…5l¢†W¨8„nb‰~™æ®Íð„­@BW$OÎ3—(e~/°ÿŒøüÄû3â,ü¯Ó[ʶKã쉘öÚù*;boíZ§¼žçUþù»ðݳí5¿Eœá €‚vDÿï„c¢ˆGÀh™èþ~À—ÁÓ¾¶ç<÷nèz%3·”a^ñøŽßÛîdÿKöëËÏp±udÿô‚dû¡]ÿ<þ²>þö:þ§§Çûo¬Tî;~|ì€/püÇ+úåëÍñ˜§o=εLjÕÇ5ô=dç|~mÜ¡bÃÑÎ §‹µ§èõûîùŸ^,.óðñ®=¾IìH`ûúÝÄq~ÕvxÝÿ<üc3‡)UwízšvƽÁö ±–Ø/lLpMÛ:·?½õÑ_öM°kÄõ-ßï ‡ý»¸?Zk[=d=6bâüEë]/æ? :fOö,¯fWòÙŒ²—iª¤X`7`gæaÝh¥¤ÍÂ÷Pרõ oÕKY9P((Ì;c˜ÚPKtcÈlZifÕ¬ FN°¾kÑ}é>›G‹R˜Ó[ºMJ4Á“r¢‘‚m·ÐLtQiœÀ5!AŽ›Œ<à]&ñÇä+­T¸Ù8W ¶Ò‘* nO<já,#'rÎÜ®—ütåÓĦ™Ì‹¶½¦£@K‡'1ù/áSt[â„P‚Ƭœ5QnØGÌK­4“9Xi™«±E“Ø:¡`7tÐS µÕ­Lo€Ù"]”PÌä²,“Y«–­‡;rõÁeUû¡2$‡|˜ëªÜ8•@´R¦¸9çÀ\I¤\K™Uæ€j¶W\%f!ËÊåpCÕžMnE.éF!§fÎQ2»)T-]*sý€0¸y‹èK~ðc­B©ds1Qµ¨º™·p.Ž04&TBUm˜W Œ¶ª!TÑ!¬Ž`ÙLæTmM‚bÁMMÙ¬7ªE9wÄÊÁÒ$«%¦È4NÐÌIW¥ÀB&Q3k\u½á8¦$vº&¼¬Êú¬®æE³lškV6LòÚvI!’‚Ä(MhÛtÑnÖY´ðÍj3\ Ùkw£FÚïK¿©wžGþÐÄÙckï ð~ÿζcûC+=ÌÝãrÑnu[|êj2t õ‚…é¼ÍÓõ±áCߌÚÍ–K'Ñ/(¡|ø+ðÑ_ëç?Ýì3àKÊQ Þñó£Åt<ß&|ÄW‡zûe¶WIçöòÒ>ö8=÷󇎯ûü-?ÂïPúî‚~Ñ"¾Ú¬ðªoW=ýú¯›§ÿæwç/òÝk<m~õðÇφπ#ÐqÚЀþ=:€ÝWíËBÔ!`¾†N¸+Ì/‘ÆÝ#>Á² &ðIçOõð^¶_Úݶï¶ÿöm;¯Mb8²¡._?~s<|Ów?^Íð«ZQ¨@ÚAwhB#šà‰¥‘ô¹ü$ç¡ek—بǞßîŸÏöŒ°|÷3´¢SZ3ã •ŒÍﺆ¼â*\F*­Ïкü5È@+Üà ÍÑÝ%ø »?ÎÒ¬7È&J2¤1ËJ¤‰‘´«ä ÍŠd€77µ÷tʱ æ Tf`,1˜-û:.f#bY$E;¼—@B^0‘E˜U– ƒaBбHwÄÍ V†U˜ZŒ ÀZ˜R©€vºèO«M5rÌËUÏ›odeiø'F¡åK­[hºœšÆåž^cyµM³jk#Bêæ„Û’OLÖI2–{(×Z\  B¥„¦t…XH.€I^ÊL¾¨†©k‰œ•e°úÊìû-i2ó2+‡³e)¬I^ZÍd½Ø&P• jQ ÖA,Ñd(÷Z¥†âŠæ@$&T낞  ™Úˆ¹úçánŒ2KX¦&*oÖRSxÓ1X†”¨Å52wo­[I“Jº¡1‰ba$ÍDËz ¸-R¶Š@!k^WØ5ª¶*G#"1](²V²T6‹5+kÊRK*R†Â#C›Ï%Tç¼YÍe•Uˆ¤£uÞ.XTs›ójU³â’ªc£·4Ó²)FÐÉ…iµŠA8Ì ¢¬–²OFy9A›¦êˆça×­y ÷OháñÑðÈ‚ÇÏÈi6¶z¤a6h¹;òU·±ñY°:MœýíÑ^Žvßçn³:`n–#W ¨šþĆP5èiÿÈp†¶ø þz+3Ïx¿`&|€ùæ<%Ðó'}þõYS;Å8çG´>ò=áô­_Ï~ÿp}óÅxÕVìÍ5ÜÎÙQ _´óÿhÿ'ŸÿÕìÜ>Ÿ£ñwýÍ‘hÆáãÑ¿Ã_äî´ë ÏâåŠÿ÷Óãüß}Þ¯Çaÿh»ó½ÁçRšãÅQ¯NóØÞ~Ó‰îo7kP“l$:¸q>‡Î½A¸!pÖ U+æqÒÖfô¬†½m\z¸ãPm÷Œ.Ä ,ÞÑ^¶‡>Û’…-Xò¿UýÚý' ›;czÊS¥K1áéœAÁwÃöÃ9Œw·:¬\yÜúfÖip—Ùâ,ÜHU hœ Dš»™̬ɬ`I¿a¤AÈoŒ+g®eÛH& $'LFr—% iqçj):‹–P­©‡¦ê:·kŽ9·ºNMmâ„ÖòÌš*f–fpš˜Ó¬Ü¸˜š\+ºS‰JÌô9×~` Í4ÁîÆl&¦J®‰rн`f+P7+#Ëq5î }ùª+”Rå•+œ7yåÚ /CiÒ§ŒÞŒá+PlÍ­lñ;ÜȀܖbYT.‡g.G“Vü±ˆ¢­%Ç:œ2¸ ÍÌÝè'j²6–BÞàafNy˫ʀæÞ‚-䨦¡Ê…èTdEw«.™4«òVV'kŽ˜Û†,³UŠ\ss§™QY³tc`«*SC‹í?ò=°ÚIos²I@ÊJ„ªä]HY7ÈØÈ,MYV1Ó2#KróænA®%DÕ¸Ôœ5`ÙX±]Ù÷ôªÖÒY `¹TwKGZëI@¤ Ðj˜;žÒ*¥1S륭i§¼‡¸wÛ«™ŠxßSNÔ9s¢åIhÜõl½6ˆoMW˜Öþ.ßvZWu3>2£ûæßmfî¯Âx)»Öåß“s ™°Ý£î¡û¦Ãk@Û)ýÌ m½žw¼à\¯ê_o¼G¾Ýân4?çÊç^NÕ›¢sß'àÑ´.§jm{ ë5™;\Üʉð¥ð6áxüß…¼4=ûñx§÷ý ¨S^Ïý;Äñ ã/Ñ^îØœÝfçöÇrJ¿¾ÀÍò°áñ í3ŒÃWý6`kø7†¿¾‡ßápì±o7Ð0 ÏÛGÌOxÚáø7OÀï±ÃÿêÔßœm‡n@Ž®†gÚ¹ùÃ–@ÛB£âÿ©8æ|]úhõØ‘5¤# K”°Ô•£ÎY9·Œ0ãpD÷¶íçhvŽðÎõßU~®Ëý»´ÜÌÚn³°$F=ZÜ{|ðÃvMœlÍ7BÀ{*,ÊÎ Â僪*ެʢà¦2”×´9c2¹æ(üqË&#§Û¢o†Ð…˜B¡¤é)j®d„©ÒT!mš ŽbAUu+%ØÒÍ,!sWeY€1•·ñ¶WÍx%LfÂ"Í-¨•ÝR«4øÒFRZ])­ÒóÍlÌ5TRΩí:¯ŸÆvɉ”­ ¶»‘o°ÀRw4ÃR(˜» ¤YÝxý«NÍ4h—2Ù.¨š)•*JðÚTá¾S˜–L#×óþ¶jTH…«®£®©áxaìŒE¤ÐÄšª©"jºbºÌÓûi¹„\YÀÝ—íhy¢a¢Ì°ZH¾*ãô’W‰*j"L@I«¨›çíÜ3€\»òé”Ö®„ICÔÎÙŒ ùÂ'Q¸­¥ÜÂ.gª®¹ 9´8¬„ht šÐ Vé¬ ª±Ì*¼ l4EbýR¼ñTU ¹äÎȪ2š„Ê’Í›\jñ­$T™Ê…FUÐ4‹³ª’ÅÉ‚ùÌô^IsóJd@ß×2•$ vã-@µL†s*FTœ/W¸)!³r¥¡ÀÃÒ¬ÑÛJ)Å”™igI4¨*1IÄ ;xØîņuO;tÕ¢LN<‰lÙ2r>¶óœxŠG pß c§Gbõ ögÆÛVŽì[îÇØp¹;¿à¡úÓ§Ý5øûƒýZD$lÃþŠîï!ä8]Çy×ÐïàŽœçLlû´î^ÁîÏÍ87#ÛŸ)}ØáÔðþðæç§ÝÛó¾ø€§Wø¥ãûŸâp‡ûŽ»sX¡¹!? |ºàºÇ÷ð„_î°íÎÕ±NB&OWœ_„ÿ4ñ…p¨ÇFà÷ wc¼~ôÃ{6¼ÌæÙ šˆ Õ‘´…:ƒ=á:‘†,\Aö9gCãÞØûØGNÈÀøâµñsŒ]~²š£¿)ÛÖˆSå{ð¡ö¯ê®¶ÁöbC; ÅJLxÞ»²ÕXݤ\zr¹³z¦Æä˜ž‚+üZœª¥E\›×`¼ºÔ³¢¨M¥2Ã5X¶šoRÒ¬œ73Ù함*Âafà²íZ¾þŠheޤih·&­ƒ.­$¥ µÜ”bÐnbUUËÿy»m“ËÛL–• söˆn n–±²fÍ×n(k¦ò2a¾UnÖ 3×o…ÓࢌæåU U^ Áe¦µEt¼¹VÂH¹º–¬BêúŽQæ20 ´!ËçfN¸fÑiŽ1Õ uIIÍÔëÕ@* §ålª„\ªV 3¹9Òk0Aí7GáxÃoâ2ÁÆœUµÍºŠY͹KŽmô0Cz=yBEmG]›=?°áï­Q÷W÷B3…ÜÖíÙ_¸Û*?vŽÆ½ü½ ^Ë9 ¯¦šÏ|v=¤>|s"^ƒŽég+Ä8ÆvlÏ}¾lcÞçåÁ_ZÝ?x<ö»÷ÚÁãd:óŠî°Dæ Ù=ÂÖ6ö«Ý?÷ŸM=<?Õã5›ùøÜ»Ãaè/ˆB0`qŽ{0Tâ<í€{ðtÚõ³°z´BUó—ñÇφÀ;àøK´/ðpÄãÝÛ÷ü¸LlÀõ€ßþ°vøi‰¶ÆWäËéåé<¾ÇÓÿ7ðË=~5ñgoÑvi…ÉwÀ1Õ>ùæÇÿˆ÷Ýqßßqâ¨ý9:؆çmÃu`@¡Hœ çjÃ¥0t öÜqûèxlú¶û™BæîÄÖ£^!;GØð tm±eó¬SíZFÏxeÔñÞÛ±›Be^gzY¸¡Å2šaÕX3Ó@rÖ&wLËR F›é×dYëT±œì>›¦cÙÌbñ5|H‡Ò­„$ŒÈšÉ©Äfl«ï¹ä¿Eƒ™ÆêVÀ"ŒW©èVí*a²rñ-Ml Ê–—EJhëjè4#Ì·M30¤W‚†©åhäÔ³¦uxÑÌÃ܇Á¬²f¡œ”¬[»~ïÞÉHÔúÊÂD.ºCþ¸xÎúN|NÝ¥Åò'˜¯h{šíkÕìFÁ·bbfi+°Y±ô•ìiÞÁ𥛛æVVåcÓmÐé‹0-_`,úXÛås’Έ5½tÊŒ0Ð+ÂÜš¡‘j%—$·ÒÚÝ/1Ú ¤NC² *wXR"&2µºð5c2+À¦!Ȭ¤4Psá)Qk-‹2°”9 f(N¥’Vm¹'tSó‘& :ÔÜ(+T•i5I&ÀÌ‚(—UT•aÊÌ‹1²f‹$fÓ,À*pÌ&±¼Éld…hèôÛf+©:ªªPXá%S ©4®Èél»èªAf­¥ùmu¾º"’m…4tŠdJVë\åhN‰©ëÀŽš›¡4 Þ…'Ê!¤6áã¨sæÃ¸mëž[°œ…§¨WCÕÕ0!m3¶¡Oñ÷3þî¯K}oÿêÅù‚:ÎÚ_ ð‹×‹±·víÚ¡¿jÜÿMùo¡<ÙKëÏ/ßCà ¯°cÇ&Cu ¡t¶+ì‚E~¯ 9ðìï}Âæi‹Ÿ\üøI¯?ÙöŸõ8õ÷¿§ÛÈ]ĵ C%,á€yÛá*`àšøØÞ]>;~­^‰÷Ôûq>žjžÿk2¬Çµ~‹ííW840°ulÀv<}ÿæŒ7Àæ0 ¯þJ¾ÓvÜhñíƒ_kÿþnðŽ7ÄÁÀ*‰‹Ày|Êãì½|›_$üòîÃõ8ÑÆ]T‹ûÝûû2±í`ϘØ+( Ý;ñXj©‡²Ç{?pz|noïòm÷nOV—än› l~ºÄ9ø‹½ä%n…,ÿôv5þÐðˆ„o˜/£€š}VsE`íw!t×V=V²­Äi5„’û‰‘²Í°Bå!ëP© û¤ŒÝd©Š˜¾m%§TUê!3—•|"Ó|…ú¼\.ã6‰ñãÕ^³U¨•½‘¼ŠE˜‡»ÃéAT­Hj–ÒlÅåÜ‹P ,Μ9ÃmñUéYL¥ÐÈ)N-ÃŒå,-¨›îl®Ù~$½Òˆ€)l.:¼Áì;ó˜%¨2Í’¨°JK€%YBÍÄLÛR‘5X{Ál-zŒ¦ âdJ{a›‚Ò}›®ôv;Ï÷´pßA¦ºfYVլĜ,7Cƒ&Ǩj`&Neå™FwcHC­*Þm4$†òE%\òµu¬ÈXåsÙ;«J1Y“UNc*å̹Õ,`©Í¬ aEnVXžŸ• X´mæDU•Õ¬Jœ P•šÓ¬¤Äª"…L“,ad%U¢ y“y-<)Lÿ?eïóbY–eg®µ÷>ç¾g?Â#,+"³È¨*uU!DB jf4N#zÒE#zhÖ£ž÷Ÿ¥AC“h Í4pÄç ¡'A EªP¦Ò2ü—Ù{÷œ½WÎsuÍ*eøØ{†ÝsÏÞk}_–lÖܧ´¾à»£EÚ ÑM7ûï¥w¶ÿkê5òM=·6~òbÇiÁ¾uDî\¥Ó’ÊÄ:Ÿ¦…ä1ÂÒx„t«–e&†ÉBºªY6sœêëOõ, s7Mè !„E‘HW&+°îÓæîÝjƒ)Ì‚M´nd³Âõ²tYsc€ðä’"°ÄA‹˜`†Ê4 ·¸vŒ¢œË‡º^I­•±Æ]De^Y×ûEYî• ŽTÓ— ¢fi^+Õ4±É€:u¬ùÍ´wì…€yøÑÅJoU!á%ëŽÚ1ÍT²a^–‰*L,C³pï,¯0MdÎÄÜ1æ,Úd¸¯é(AÀ!Kn¨ g™Ì± sA†-–›XÊRL(Òµ4Û³P³r ÒPÉ«+!wi“ÉÎn,‡¢¶rP0ùr`”-g²<«¼@)I+BU3S£ª2%REÔj”/TãÚÁ,ŒrÐikˆŸSsŤ('ŒÞÍe&CYLsdެJ¤D¦…GÀ]F®œî éWX$Y4.á+JHÑäôÚªúÚꯆŒ*F¶´b,4ùÂV•ʣ楔P³Æ®*#eRÅŸ`vâŽpî1Ù\¾ÁZNˆ®iÒ$M+,á£Æ`•ï³|/r‚éð EXu^^à¿)þHžª€ìorî DìN°®K› ¥½ùîñdù[el|èùç;¿DÞÌŠ½fo ‰í¢Ú©=fѾAusØÍ ËmvŸ ì>°O$žè/£xk7›!Û­†Oûçg16ô Ôñwxõ5Žß ÷ùfø~îl‡~úŸ }`+ôZ€ÈO £&0_kмG;ôvp_¡þÐv{œÏ§—;$pùáá=Nÿo¾Äþ°xõîd@Ü?´ÃÃÆþ ÛQÀŽe¦×@âqìm~ìÇyOÇöuñ]Öo:Þ…­ À¸êrûwö»Ýýa?|êí·ÿôòýa~ûåóׇ÷Հ㫟ç£Å©GÜ¢ì¸ÄãDóê‡èž0÷;Þ=ƒÍ¢ã€°™Æ#*ûž?—µ=ì÷ü2ðâswÔnéHò?ëSAðþàç‡öcÏã±·Mé–ìîn+È-©²Ækà¹bª‰‘òa„”Ôô,+/®Ëª!•ÙÅ‘$Qƒ»Á¹Ë(þ!épšmh°Žh„UMè¥É5ëý7/0÷å¸IjÒæ´µá.®×:6¸h4~ÖH +DÃeêYì¼" ÁÅ)%‰k1i¦–6L…Z}‚6¨nµpþ"KVn076¡öª=3™Ã•ž…Ó·²V؃™Q+/’cÌ‚¨´9Y4Y¡YÒ®ni|­Á7Ê‘Ò,Ø…^ð LwŠ [k3º ‚"é EKÓt¥§UY&/¾±¸Ê…rL:ÊIK)ÌáF„›¬i©kŠXW¼Q•µ8Xée~eb »0¬ØØµï5w]}x3k&ªj®Wù „'q5dsVM*Š`™_ÖÜ«` M`$²¼tÅ 6³L„Ê´‹IK³Í-`“TU™3«´\@æ¶ðÇ!cYÀby›SU¹_#X ßmmNˆÒŠ(¨FiLi¹à—*º4¥¬^ ÆTmAÇU,’5 ›¤¹ÃˆE§ÂÜ«‰’™,søRœš49Ò?,¤"‹²f戉Ö€ÏÁ*Ùêh.ðhLhN*£48&àÅUmêwð“b,jzQOfmclÞ}ËzUýð„ïáß>jkŒ~wìÿ$q|i­{xi`æå;içÃѼì¨Ú¥^'(À×ëÀCó~+½Ó IDATüYÿ/ýå‹ÃlÇûn›}ÿEþÐìö‹#~ݸÜñøW1¿éxjõÖ'èÈótÑ›ì1ÐR(c³nr²•ˆ.`Šv@lrûÒ:ž/-wàƒÏ±Ï£vŒË¶ïÚè½u¿Üãö†±Y 6XŸ¶y­ùf¥Ïr¿Ì²a#›=|Ò¢Œ´É~TYVˆfÅ€Éáè²jj¾ö‰VfF­Y ?„h]d9…º˜×¥õJÏ ©U Í“LÍ fp§üe¼k4òJp&äÊBN®Y±Ôš_0 1É%8+h%ŒÊ`)µòùµž)ä(‹´ó˜çÌÑj÷ùѪÊo'["2û˜áH«}×\º_p[Î1±„ Ž0’ô¤Ž2óUÜeHt¹VôJÙθèæãÉü™œ¶,ôLT1 U>åeF™9,'æ:Ú0@ùõ÷k̪Ê2š`nÝÞ„X5àµX²LæÐ,*ÎõI/ðPJ£jJ S¨³0@¸¢©õj­¢D‚‚-’÷ç¾F¥(Ø>C«RªëXižò,Ž¡ZÕ;XºEÀmv³ánî‰HçL‰@©23gjíIh$`ÍÌ,ÌáeæÅ9G•–^c!™H@Å\÷BÕgµÅLf-¢“JC˜ò dU­ûXY•C`YÎ2 m¡S!«¦&–L¾ª;² ‘2z {ñ"v&K3YkÍ–t­ö-iߺìÌ ^­©RHÔn®!µ’ûŠ2ÑÑà+ _7û¹râÒÛÿí‡ÏÂ,]ô»ÝªºÉ7Ëï.ì¹ßßÍž ¬š©ùPlc÷DfG! î³Wƒü÷²Ü­µ—°S $`: `v˜$0ˆÄÛŽÛWS0¾Åöô" ¾­‰9N‡Ä]ÇŸñõ;[ØåÓ6ÞŸ^ûû‡qÛêïÞÌWOv;Û§æè±u@ùÅÙ¼º?m퉘á¦`ϧçñæé7¼í‰þêQítþsÐídÇ7ØöÞpƒýöeàrÊó„â5ñ­wöº›£AÅ}ïÏÕêüxàÉžQ\ =XýìËñ¼ìÝ/¶m­îâÛ^?øÝ÷ßè…56cÃÎðg¨Ã'j@þTTsŒÐ-^¶C?¨õ³ù¹™ãâí ×j<°À2ýQBÛ¿a=ÌÑ»Qý ³Í’&“{Ñ–® ƒŠ–æR¼€Ctp÷x’ƒÍ@±œ–*HatwÐhî67;¸ÝEtïÞzc€ªin9G®è„Ö¾¸Š&?& VÙ%ØÌš¢Y8;Ø akì]Ëï¾`Zýç+K͈0,ZCâÄڣʔZDËFî¥9sVFA„$[î¡D_“h¬|RîTÐ^h«²YóL ›,^.ÔN+Fƒ5°™ TòT³8^LÏn›Sr Wa¼* m+n”/fÝú@3¿×lôŽVÇ(W2¨X‰æâ^æa†¢f} ¡EQäÕAçålfáA¹RXû-eø$Õ ÙµH6ª&W¿Q•!£T¾Ü4È€ªRéZg¿†‡ &BñÙ$þBí`‡L…T–¡hŸìnEåÌ’0‘œYÁ çÕùGÍ)Êœ5FÎY‹U«Ó¿õ]ÒAYÂ蜹X;+@@¦ÆÌÌU>˜˜™9G%lH 9-3vh •´¥ßÃ,«ÚPÁi^fá ×,œ ¸ò‹¡0´ÔånmÉH´pêEÊÕkM±Š%˜r}"4d²MIƒV3zÕ`Jžã%³ÊR¢]<†Ú—¨×ô¿¶øªGM¼X¼‹#¬— JË}Œy»hÛÎîØ«ÐóCØÑæémµÃD/ë{ {ô½úxñÿ2õ5Å(<Ñq³Ü¨×gýõ%ï'íw¼=N„ð'B?b»\ûÅ2ØíQƒ†šÐÄvœ^›¸Ú|¸øÃ`Ú pÂ? oê§C=¿Ü/O¸ý»_ò‡7½ó_ ~Ÿq?ü¾2ÙJ´ùx¸úãú ¯€¯N{à¥ã|±£õ'1Ú±Î'¼àRÈwØï¶ÃCD÷ÃnG$?±úYûËÈÓa‚ùçË£¶vw8x#âÎâ,+ÃÕþ²Žßè/_½<݉vk».³ÙHûôXãÔvTaÛ0ç[»}Ôe§Z€Üášc–æ‘÷þÑçï±íU<Ûnõaâ7s¼N>`ÜŒCܳšÂ}‡£h96É Ÿä$7bZ\¬M`—íÉ..¿)É’¶ËÚPË×lV £ã@ ²ËæŠÞ¼¡·ƒÅ­Û!¼y³h¤™D¢¡YYu]BeR$,g( ºY÷æh@®°¢°–‰iòµ&u¬êÕšO9AqUçƒE+ÊX¨Z¢g”ÖÖS&e¾|ª½|ªœÚ:§0É»€‘?¡g³rÎ nJ«gh”Q€ÓÝj3d¥Ê$’›íw-EÛœ EIÊÑŒPn†.k’,ƒâMàH»qëd1À¶Èå„X“žè`2ЛŒ`z²Ž5’ŒUÌÉ2£»µ°ˆ•›_¸<È4S f!?£Ì×oûÚ °lÅÈL=0“‚Õ²¬Â(”$ÐÖ9[“ [ÿ­5pGre` ¡Ä饕!bý~ÍÁY…Tå—ðIÂÚP¢"—aŽšSš-wˆ-m&>GŸƒXt¤@ÁÃ$ðÊl—jVŽ‘{Na¢¦jŽƒ%±q¥L'æD†qx•Ÿ \¢>2Ìh¹.‰î›YÁ„……­T¹–1ЈR®Ä“Ng“Òu«´Ê½RK5¦HÅÒ¹†“î+xÆâœ,%RÏH˜ü`–šƒ:‡râ™IâCµà¿€ì¯È¯Ýo¬™ë\­eû¿ÐRÚÛ¨‹×Öu9”[v ÄóŒý“ž¢q°2 ³Ž“³ç„ï/¨öm ž ·£Px¬y2ƒì?ƒÏ˜‡Ÿ·»ûOv÷©À3æhG{ì8ÝŒuÀ%…Hbìð$qùCÁ‰/Î-·^­£jãyßòþfºD;þ‡GáÉÿ|ÕZÝË:Ÿ»£AÈòµæƒöùGdXühØ—ñ ðæÛ$öxt;Y¾Âüˆÿ¼=þWkÿãì½|¼öQ/ãùüdùû@½ÃþÍ©ÿô»ÛnÇ€Á.³bs˜ÍDoßÔÝ͹ö/pÃ!ìÛ¬¼|pâ´< 7`¾v¸D;û¿&ßÞØcä=´@víKÅ/9ÿe}ø]Vó-òø›äÛgsÙº%·Ñú†ƒïÞ[yËf#Zšç˜Brm¥´8 1«.Ò^HÍ4089Mt1ˆÀ~e©z­ë‚­%^‰ 6WýiI3øÙÁ·jvÞ S…@Mf!¯¤w’L³rqõ*gz/›4£*šS½Ÿ»^˜ËŠ“(üíäqóÔ ã0â6 ¨¼)¯¸Ii^ú~~:Ì—O<l#í£[_Z\Do¦ô¹wâ]µ_ú—ĉõØ/ì8uÁHp@g­M?Ú½ƒÖq^§`­^%Ð`‚ˆ‘ð ôóº6°áˆ3B'\ÞìcÏ÷ÌqÙOçþúGÞß¹×f |}Â[èøõß ja8[—Ç—ËÃe>fÁëäľýË÷úú÷ûÝÃî_qôüˆ(ÂL¶Û!½uvÃÞ/³Öà\O£7—ub©77™¦Ù4³X²X‰v²ÚV’p§gg;8·vhÛ1ÚÆ¶Ìm\•§ªPî,J+‚ÈÒ s׳Š9L¤'½¬gôêÞP¦]ZYVÔbà­52“ÏÂ2¾­ê'ȼz¶ŒKÆå´`s3^¹=Xˆ;™ ò‚MŒ)O4P‚¥Íá…`à #½ÃªF£bEhh¤Ó‚’¦™MvÁeε4”D §Š[Ó¬ª‚J4iºÎâN‚ OR¦Á˜Ü æìQ›ÉŽ5qáÊ+–`æ4y½ÔèæëDZÙzÙ¤#‚›·fÑ,ŒÆk1oUôÖ§×mjªU@v `%M™h¹x×P"ÇÂT‘Ud‚ÒR&Dó°èáŽLdÔ˜)ì{%KÈ’€ÐnfE®¤š•AµêŠ(šæE”Mi{*3½µ0$0„]¹c†c“§]Ók±¾“tÍ)1’chì¹_(ºÖ°2%jWí•gLqÂÊ—NÊ)ƒrë´)Gµ¤šIRHSåZù\G ‰9ËW!h¹´•† g‹ŒÌÕ÷¨2ƒ|1fÌDؘ0Ñ•Žè[Ãnù©Ø'þÕKýôRw…ƒè啵 ]šO‹Ú·ófc`?ø§gñPo8o•G5ÀR©œCÏ{òíÓÁÛ°þDŠÊïlŸ}¼±ç§}¼Õ†õ’®†N<¾q‰À±ê+û€úÍ¡€õò8û©î1–ðobìØ÷ØÇI_€`Ãfhý {ú¯Oþ¦ÚËíØýéý=ö÷ÿoô¿”ÝŒbîÆ'îÈý¶}œö3Áû0?`æ˜ïñüÒžöþÓßñ¿ÄÇè~‡_ÿkÃ]à`bfG$’`Á ÆêAÅû7?ù-ú·³ýqgÃ÷øPß–çç[Ôhƒ Ü~ƒ|¢uo»Áíó¤ êÈP}…¸Ld{¼Üµ-n>ÈfVœ©¾º}u:'ó±§¢oî[_Ê‹|’aÆê„úg½»#¹ÁWŽÎýmJ?ßjÚKÏv{ö›Y‡ËÑ>µ{ã±Ôl"5ŽÉ[?÷?óñ#Z|Új;Øáà£%E•B±)%΢½7"ÑÀÞ¬…{Э#µ§ÃY¨\•#ö´Fv´ƒYÐÝYa3¨fŒ°÷ú —^/ã_¯D,‹bg‰“X¸¨Î¤O:a/KĶz-+^zíäÖº@"#\ô7Ùªâ’î09 Ê,ä’Ò-iç¶© eµLÍ1³žESô²«E͘¤æI{ѳBBÑá€(äBš¶4‡y(°’UB³>+ˆrI²HwÞ˜} ¾‡l ÀVŲa ÝöÒ\‰+×YigYNZre’VäF4âD ȬRi] AïfÍ·CÛzï="àQB!s`4$¹LÑЄ­ÏlõÞ,aS˜—0H¹ì 9š¤uo¸ê¹E!3˜fA^ïªQY•–ôa•Ü×#ûl>àXÅË„íh“žæ.ƒfp+c¢lÌÂVæ$L3¥™— (ÉÃÀ!”ÖƒVª™º$FbÚJ1d>¡Ê© îƒÓ!C2W¤W••E™«šyev²‡Ü‚pVobIºK^r#‹ð@fÍif€TŠ8Ë0§$jVά,iಕÞOb°&äe!ÀÌîᦊd¯å®ÓÅ4Z‹5÷…­êÚª4ÇHìÉš¯¨œ/D Å ?ZëÖX¸w¸•úœF”¹‰çÄÇ´÷gû†Óa…Nt1 S?ï™w4lÀ†ËcÚébÈ7¬,øn›ú·øÔð¼?T>øK?ôÝΈôéa¼<œ½Û¹Á 1ÀDÿ€ú ìxÞÀüt\ ÷~:ò]öOð„ýðnÄÍ©ß# Õ/½ýøäyþéþá6ïxA?=5<4lúÇ ÿp)ýÎ+çý>—wèÀGp žØÖavª‰ Là|ú—†@G6\è7þL´=32÷ùü‰ã§†!Üæé‹—7í~7íãÒ ú4ñ0õõö\ÀùÌ[ä=ç&†ŽØÿjž¿)Äù·?îq)šå¨ÜõîýåéßÀã/öÓ¯_ð¿·§;C;ÞG¿uá~2µ'Ð ‘x±“¿˜çwU7ì0ÖmŒ¶?CBž¡'´W­ŒûÙåx9d…Ìy"^;à‡Öú­E—o“=ˆÖnƒÍ.ÏðƒÊØ,<ܬÌ•&šÊ*Z´j·hÝÝ"’6«Š!å\1”Sh} 4_µê›¦t3»:bõˆW&(³f)kV Õ\Àz©£,éd¹tÕМ^ý™EX#£Ñá®âucNìƒËo3†4¡$-&3PkÞ¤Hû V¨uF-›ZzíÂî0£Ín)VõJŸ\'w`‘ßl‘¿“\ËñÅ3 Ö`ÝÔL-ɆԲ2a +M.ÁtÕ»í«%ìµ¹ÑvO6'§çÄ -aÃðB;ãð%-àUe¹gDŸYsk=¢ƒ¦LÍ¡qÁ>äDï0˜7oˆk $E_G£J2-µ$¤Uqe%å5Î:ÍR>Á×$P­Ý¿J\Þ3®ÄÌš‘N(«¹†™û¬e’K†U&gŽ(@¿ïD§‡Ó’%®Uu8äÔs·9˧i‡}$wñPuÖ¼AµÏJ×ÒfYf U!±W•hƒ!‘Ž [™Uz–Œ"¯TÒÍèi†Ï¨•#ã(3p¦æE* mu¥‘Ÿ;åƒÑ-/Ž4M7,—m¢ªX…¬aU•¨5ÇNæÂhB·ƺFt:£<ÌÂðì4®v°iI©3•^’fä4ëŽôöœ0ëï“/Õ/¯ @F`R/Qp¦ÍaLEo£? § €•§Ëû©ü ÛËt\¬r^¬~S ñ<Nw ”†î}¿€_~cßeìÆÆ½ÍË¡µoœºO÷êö©£×ðq â€[pÝõÖÄ7SOéo?+mÞÞ ¼ÿÃãxwúŸ¿Âý†ÞPÀ^¸ÔSãÃ-7çVÞÞ+lúÝ?j¿…g|ßÿ;Ά_ýÿrÐÏJ¸ð§_ã_ââø'†­ƒ'4q¸t<ÿS<Ýàÿùs ðú «‡Ž‡ûêwµßÎ'Óo'NG<þažþ~—7íןÞüâîiâ-ñ•e…§úÐк?‡z8³×ŽÜÏÙXÛÁöžÏÐÞêwöp²¯NÙߨ¾3_^^`vžíwç|2Âð¶€Mn'«ÿ£¸9av±³!Üçn’ ŒhÑ\Æ2¹ G«µµ­ÚA­q9]5UÊJ° r&¼1¢ÙÃ7‡mÑ®€~UðX'eL[Ù L¢¤Z¯Òë­]°4MI„Á`¼$ú5¶i-¼™…™ UÌ9E+ U4 ëI¼J¸BÊPe^ާ–¾f•´Ê˜–©²°@›ÜMVÆŒ^i£¤¡CfÖÜ 0Ú¶ÖÏFãuŸ %›)”ª2­–™eÌ(X¦_Ÿ&²SI·ð‚pf²®ñGä>Ñß›ìJdHùLíJ«r †±7ß*ˆBNà°6ŒÍD”¬¼É½Vo ‹ƒ*ƒAUÌ«%0WJ‹g2»Æ`±ìIM;™ÆiLZ/2å%Ó‡™Í`0 •H_GhUªRµO]ÇÒ’L*Q…±ôј†*&IxÌ€H#«t•„:Ý[72xùTS¦ËÔnÚiÏäÅøÕ ± c*¬ÛR(@WÐQ‘† xªré;Ú2•1×O ´4WÀ±Å°Ö‰ Z©jS«”M]JÁL§ j$¹ôçé”Ñε›Ñ•YÈI¦$0e`^Ùæöùž138Åe<1ˆF"˜-b†lšiE—¼ô…J4‰:#wÌß~üèxï°ŽÃ猘=?|³ÝcªžcÌþòåÍû?üÙß\ìÝ¿oÿgÃ.]¿¾Å—?à˜è¨a8>5$Ñ…ËD=ã|Ä»¾¿Å/ˆ_¿ÀæãCµ>û]ôm¢ÍÖsCòtçÀxÀóž:ö_ßàÏnð1ŽyÝ•viÖ„:âṀ›è9w|œûíj=cÏ1æW'| vØöäx~ðOcV}ÚÿM9Òà;nÛ©æ/â“ÔÓp‘W½"z+5”u|–§=ssö-z; ·ô–ðJ̬1z4h3—p#›5oÑzóÍ,®MaT˜‡3ì³$¡°6²ë…‡”!ËŒ£-ËÊÊh¬TfˆeQÖÅÂS Ó›{óháñYá›n\ÊLSU‘WÖÆ2 k­€ÕO]ñ ••i)Nó „Y0:·¾Èé^<',K#¹«e­Ø¬d(ºa®¡Ü¡<ÅY„ ÈŒïu0 IDAT*«ATaLî²p™Y@.š<æ{ÕÍzo­8h kGñ,›Ã•"ò[/]÷^P RU¥lN´Õ(J„Ì"¾¹ÖîÎXúíU5Üåf4‰JÜŒ‚i9K.«[é eÖN•ƒÎöy߀%`3ÉP ºkf W¡TPÍ)®ÜM޳Æsκ~é\ré„£™yb«šô#9Gù¦3|W¢7ïUØñ¯3ÛǼÍíx°ÛÍðbâpº:Íhï`¸’-^±I1ævùàÞÑo¼õ·øèñܼÌSÌoøt‹¶~ÿÚ¬ïÖÓP£Íºïù‚€Sb_Ïí†7DÇÅ „N>ßò£§‘ŸZzÎã8Í_m€¿½ÿ“ß ~öSà5а}ŽþGÇ©aÅ6GƒMHȨÀ|…PŸ9ú|èß¹ó6wÆàˇ¶† ÷?fûò¹ã¦ÿì ðæå?´~3nâtó¢6ëµ1ý„tO´h½×MŽã~8MûìTrûôùñuïïMàù~Óí¿~þ€Vx:àè¸!<¾hqç6ËNÌç‹þíÀ_ŸæÑ¤ÀÏôƒÜhr›nófÛn/Ú¶±yÒÏYû…Ș'­†çî2/Z+gwÚ‚dSÒèf¤ÑÃÝÝÜér•ÎÖ=ØH—á%ÂÌÍÂåVkÚâÆ¢èEK"™âõ´æÖ͛۵x{Åù9¬0ÀgN74·ÙŒf¾d•×=4ÂÔV ª¬†-®*H¸»;¢±›‚2¥³È*Ï©}XƒO,ËÀ@¥ kra¤ÓÛpʸt­ œe¸8.ª=5wà4Þ1+-œ•‡1ZC¿`³p³"NR–]FÔ(w‘È4§Ê*m®¹‹ùlstÊ –Ûѽ™7@”`‚; ©æÔj X §É®¦¼ ‘¬*eŽTE]crN×lÔ4º Žò¥ß+I¢„Њd¡Ã)Oñz^W¡ªRB”Ub–¨:Rr,åkÁ²´mŽâX©8–ØIˆNãš©Õ ¯“½-^˜¿ºÄ«Nz=gÍÀB®™ËVÁ¡&L¨LÅššÂμH¦Õ´W8\$]ÂÐp-(ø‹×:}RU™ ïÞÜs";ÍY$c½·•€Ò5É„²ÉL!YÉëî°M¡IN¸]!â µ^K2ƒVtTí%”h ²Yö 070cWé6 i%7†±Ààeáî­1NÂ‹š–¶•¸Åf·œßÂ?Òî5î[ëèÞZ´óqÞ.ÇþŒêÐ ŒíýNmc4šŒa‘Æ-sÓS;sÞÚp ¬à2ÿà†‡ñöþéüð·ŸÙÃOñŽÜ[ƒ´ï>0nÎàûÀ§'üÃW𳉠Ñnðgx<2¡Sâè´ôã‡æ‘H~øð§½þ x _ŸáØ&`ЀñŸ€o /zA;ömЉݱ‘­Àç¶aÇGÞá‹ýáùüî Û_ŽÛŽþñä¸äÝ% 'ݸ€š8‡ö*Ì›v×ÑÜm¼Ü­jÔfãäºóófï[Gv„þUà³¼é7þ×Ö¿nøý±º#âζ9Žneñù‹¬ÌÌ1ý”¹o§ZhBæÌðÚz;ÚvØÐ8 YÉfqF,ž$Ü$â@rÊ(%V¿Ô‡ù `­ä`Ò²åÈ„ÊEáYËDæaakò$È´>€Q°$ŠUW§‘±nØWä‹Z»Jaí€=jÙu±”AÆb±DÒ–è´XW  *•\ ˆ${‹Ûž:&€숿CÿŸ | ”°í84ptt»G=Ø ïóìö~>=<=ãMC/tâ°ãîòxø'l?hQãñ©Þ<çü7ã/ÊæåèÊ9¾©ÇmQÝq$¬[&kT~:Ú×Î×Àv¸c골»Û¶µ™Û¸m=¶ùÎ϶MVCé7¶èÛvjœ›Ó9eç]ß„Šõ’ÜPfòu.ó%.ƒš­dÜ*BšÅ(4UOœG–¤`š­pK`Z)3Vb-’™²óÃJ;’¤ÓÂÌÍœkþC:èpÒ/@\ ,TÂwóY]GÂ’”Ò¢@…‚±ÊE«k]×ÖÎU+8Wäfñ:+W&¦”QNFÖ‚j0w€ªGhÌœ^Ò.K˜ÌŽ ÎŠõÀ1p²¹¹KCyž9“*õªKq8ÛäT6*Š!zÓÒm_ê4†ìH‚Ú”6¡¦X¸VÕÏaô"ÅõLç¥qȺ›Rk>Óh*«ÁÜK6³;e \ƒí%¥Çò˜NXª8®ðÃ’±ÌÐl‰;ìŒ*V²&$&¹Ã&Ë¥Û,/ƒ™Ã ÎuÎÎ"µîŽ+7Êrå û¬00±{—ä/¯¡9éTùxÆ"OÆÁ=܃Üìp°¼ñm‹ã‹v¸mý`ÖTÚ‡?_æé¢,JB²°æÍ·‡fA,]¹)0á39Ü.û~®å±(­E˜{.\ëp0{µ––¢ä®(öðD+7X¾ôçn¢‰!@U*À·U6%…QÚ h¥üS*‘Å+$P”aMU&¬zªb‰2ÀiK…aUƒÙœÉ¸À£Ü¦3m¹›(Ì {¦M`§.•LlC}÷·¦ïO<• zl ºŽ^Ýœ•¡è+akù°mÿbäáMŒ>÷m<ÛÇûˆú€|y¯ù0ò¾ê¡w´çÌ~. ßÏ5>Õ݇ˆh~Ss³o™ŸŽyDÞ”?ïŸõóñûßÜtô7ðÛ7Àq¾·ý¾¶!Ìh;.‡7ÀÀ·_áÍ_¢?¡/¸æ3âá Ä]Î×Â_ç9ûáâ1í½u˜ÿ)¯€þúçÀD§ ÔWÀ[tásÃpü>ñ ðc ¾F;~󮬩½S<žß¼?¾Á>Î7зØG¢Otáøáýþ[îñúaeðË»ØçÖŽ9y¾ø8ý#lŸGLüR)DS†}ò…G Üøùã¾ß÷Ëãç•Úèx¦þæ/”ÿEU —©9üâË’Q5™ôe1T’Róš‡*G~˜«vœE¤‡%™ Ê ²R ˜]Ãw¹,ÃE[ÙQ‚&[°á¥‹¤sÅý,H¿²L\q4^G™Z)éJ¬^-^3Bb&1M‰ÌQ‹¬·^J»HjJ¬ÔÌ‚Ä)«RµRE(˜ØA[¡…“%$w7˜O™jmÍ© bµþhéÞó. x87ÐeòR‰~_OsN¬®,éN™ Å„& vl+‹“Õ¬šØ xÂc†¥ùºE­ ak—:)ùJ°¬0˜ҞJ)Ky^˜Áit¥Ú,˜“43¶V†U¥Z ¤e Œ“ rñMP¨e+›«à[JÚZš…SU ¿ÐD ¦X®å¥Áê ¢X&–/Ïœ¡pU›]¥»àÖŒØ -hp¦û%Zö€ûvõ‚šy¬•o½m­õæî*Å‚¶ï㲪ǒµfm­EX£l™{Ýåœ9±¾†9‡Äéfîîá4d¢wÀ½3,S‰j…¢—³¼‡#Ì›"Êåkĸ¾]쌂Ó$p.$8‹‹SH*) a½¾M´UDª2­+öwûŠëªB k)¹C*É¢J\N%¨ Ú(á×'!Ñ䘆‘{z)Ê;äé°—¨­êàGoÿ¾ü¿uiB%/Ç4s¿oöÐZþ_Ç|Âþ’ã£ÏG¿@ó }v7âõä©Cbþyñ <2[r<Æã˜3³¾ªúý ÷—zÞêw—yg5æíÜãøÄÛÙûÏí®Ÿ?Ÿ÷7—]0¶‡!4Á·Ÿaþü¿Æë8¿ÆçŸ¡ß@ý8!žÐOpÜU»›ãµàñu†»ß}ÿþ)û†ÅÝ{ ´pjxÐÜt„›„?š8÷ß~œgD·ðÓDÈ>i¾oFÝÌúEåÌ=¸™ã°KµÐaßµ.·ë•Ø@¹¾—º„˜DRË|aŃÅ+¦‡D[9ŽY\õ «h2('ÓhU‘ê©ÈlCã,»ôÍÐ\”WÕÎvàܾH¾§¿çŽÌ{ŽÀÃÝœwóæõå¸Í@³“ôÑöÿsÁˆ^Œ‡˜Á§Ñ_>ÛdzªL¨ap TÇ÷ ›áÂm _ Ž¹Zò·ºÐçxqÂn?ÃþÔ‘ø€ü?°…÷Mooì«„½þÛúô‘/~±ãþ'放^¼Åù·oñÍW(à xÜ}‹—· p à ö{lyß¾lußÕû±ãtl߯ýÙo o®;zp€óÞÆC|… äo‘¿…Þ¢ã}ÿçÞ$†íÐnï9’B»ats5Ë#>Ívªö¡ÙãÉŽfÈñ5&¬õ©ö o‡ö}æûvŒg ¢oçœ#_>¦ß)™Ð&—fçüæÐÇì1›MÏãüü‡—Ÿšíµlc9kÇ@R3¶õ)2™Éɉy•r¨˜•–±°X ×M°opÛw˜¯EC…À)¤^ÕDóÅŠ£-ÝÌÍðÝUšª³˜X8\Û+W™çjL›°˜Zo•JHtÈLZ._ÖÜ–E\E½‰œÊZu‹ÕøB¢€YÈ¥yøîV†™L• Ø ¦c†âðjQ2ÂÎN¼6 Wíi³Â*\îXz£ç49}ìF0àQÖKÍ‹ÈBÙ @ù”=©Î™Iu_¢XYÅy™¤W3‹U?#)ו2 RŒpت”èš(^Ž,l\Ê€°‚‰qº,GJ6mí[«frL«iÚ "=XÍ ª„uá\بLjHg»ª¡š³Ujq8&*µö“`¹¼Ê*ÜËšI˜×s>#Ô¼³‡šgðl5 G‰X–êšgPò†Â˜•5³v(­t½“ÀXUU³L K*Ǻ.g‘²@Ø"ã.«W.ìødÑÜÙ̃t“-é­ªqaˆ¹‚E^"ÖUØšØefœb8&´Nÿ*ðîfJ™3Q`0šÑZOªYJ.?·ÃÂ×@Ä8Z+~!•ëCrI¨Ð§‡ñ Þ™5µa,â (-“)ziHfÌÐ^yj3­jÚ–x=ªœ¯ªìdà@é’Ú•ÏÏï]š8ĵMjãAøùÉÝ÷¦fŸnè<œŸÐn‰Ãþ6¾nŸZœßéãa¾zù7âv°°íŒ¿œèÚð„ý„ÄùéÇ·û~sxîù w çüb‹»~i÷û.à€qÀ˜Øß_áŸãáïøÕs½m³g¾Îƒ=#Æó´|¾‹OJ¿?Å—¯ñå-¾ø·‰ú|óSÌ×øg †ûþé¡(Ô„voó¡ýïè{,vi|ÐÃ%ñljß$~VÄåüEÔ]]òÝD¿À3pù ¯€›ÏÑÞ<¨;Ô¿ÐË;žð¯s¿^šm­¥ûs÷‡öïg{Hƒñ¾ð „Ûÿ* õóçú´ã'wš7}@0hbkïK¨ó½Ùƒ„´_­HW4„_Ú?Ù/ÊSu+;ÔEcN§¯ãÙÌšìltJe%ƒõŠÈÖœ)÷ Œˆ\‡)/c@©B.‚§°*̃!3‘ÆU€  ¶¿‹›¯+ l™ºìŠ„^ÿ4.¯MÝU}^.†ÅvÖw¤8ýG@·ò;¨*ÁeŠ\gFh–Jp &\(¬=_ÉZd—T ˜kÎZOD9lc¸irŒÂi™—«*2Ý,Ü—Gl ð…¾tÉAÆ Ť yÅ"`§W yÉ}ã5ó›ðÔâ%µpÎLƒO¥oüÒŠò*µÛ¢_GÙûÇ+*ÈÊ[°ÁM¥ë°Ï´€w™—ƒ‹P"-ÒúÒ\; ­K6Yø8רY¨iHHYsÎÚóâ€Ͱ™dFN`#‚¼¬8e­.KìB\²¶9PµU=æ,’ÞÌénNɲ,E8Ò‰Fô20Ã)RUY9jzÍE'U+ñ9Œ¡ò9tsΜª%'5÷œ—" ,™r…±b›ìW9ÉÚ çP^+\^Y_;3 Ö„+3lÁÏ ˆe¾¦¢æ Þ 3sUðš©\V*0BæFU˜f‹&Õ`4¬âN ´îQr_“ÞBLU"§ç(\ŒÉ5¢ª\…Uëf*vÉz¾®îª`­Ê¨\šYŸ°_||•5`ŸU{uâåyúÄàm3Õ-LaÏ<Á*OÏ/št¯zàøWQŸíÕ­ÿÏS¿çeÄþŒO‡ÑçŽøE³ö"âôÃc1ÏÐßÝ9>úÛwøê6þj»øÍ~ëOGË-ÿÝ|<ýÔ>fçÇm<˺4Ñq×Ïwœ=.»íà¿>Ãåªðââøx<½…÷ÇþÙÒ_øly>~˜½Îµ¢¿Üþ¤wÀ;üì+Oè7Øÿ Ç×øß>ûâÏâÎf³ñ.žÑ༫›FW74{1r> 0Çož€OøÍÄe8å]Î;þñ–_:ðxG<ïØ€-Ñ>¡n—ÊðŸXuìû¹%nÇÞC±MøVÖçæ(}¼kj[½ã|´zÀÓ§<Ü]l~ð[ùo{¾ÇÀð±zƒ Œ‰¼=MT”¬%jöê¾×~¸œyw¼x>·Ó®¿lú¶²¦¥Ÿ³³o<ò|[è†æ&±Ú"b/€Ù´År#J™PŠR‹>Ì.fkNÝŒÍÃAÑ|­–ÍmÑžc[ VJo-+ W®©J믺¾c“Ëu£}!’ffÁ¯9U8« ]š’'š˲¸x­•5Æ(CRj22T.©ÊÄ]Nï Øwñ”zÎñ\˜æ­n颢(Ѱ-ðßðP"- °æ4g}¢•:¸ M)LŠR¨Ã5} Ix¾G¸ê#Ç· %×%ƒ¨*߉oe%é^±F^^4Á¿£è­›‘å*2W¡JF-Q´(ܼ±—Ñ3Lš³J{ÕTŽÂ,ˆbÎèlF‡‘,ÐXr¬8‚¹*E£œIÌjq CÈhnæaÖÂ^OAWR5š-*Èwˆ Ú,pRÒÐÜçÌeû–…DÉÛ©‰ò9¡¹æùsΚé)ƒd†±V™éMÅØÒÝÍ·òò|@I¼Â© ͺɜh@AÒ¸îm«¡ 36÷X¦rwª’3KV3A ŒfŒÕ(œaÓÉådAH¸™kaaNƒ²”Ša9Ë'4Y“–l…eWUª,=¨F¹'£a7ÖÍ¢,Œ¬QóIù¨¼H¶·Jÿø‰í é—8èÉölf¦Ô4<ÍŸ`?”ï1ü¡>sü ÷ÃŽ)Óÿx¬È¼¼út<>q|î£9¶Fõc6Œÿ~ÃãK|yTÿÒÛ[ë°ñŸ×y«×}zóaÓ÷{ìKó1€‰ûr6Îî—>žÑØüù¾>óÉÊ'±ÝNò`>-DÃ\ªæ! Æ2ô¥LëÜ’•9È¢]hë´uk¾ùl¡õ 4ÅÕž,"©U0¢Ì¾Û+”X´ Õ éz€«k= Wë;PB¢fÕ%sæ`ÄJ´cúbÇê¢ri¨ºÊ„XÎá¥}œCÉ*ÑüAò"ea݃adfô>ã"Ë=Q^ ?„oôNyáúXþߌ´i2Qn03ZgÈš#D*j¶‘Y»g±Ò5»ãì™f­Ø¥Cb3¾ÏYš•S¨ÕÓ¶^aŽø©¡¹¶VXÝB å´4ÐKd)¥QK;¥¬SU‹ñD0,¸Á מ˄ÆÉÄn”=h-|ó¾ÑàDujðJ‚¨šK·4œ&º Ê}¹–èÔÂ>˜S«™¥^i×ëÀ••GÃjh«&†TUµç˜5gÌ›±\Îu¯fÕ Ir4ažQ5/©Ê™5•i2æk9påx)¦@8 ᦕŠ+7J¢/¬¯~9±9ˆÕ&„ÓœK­'`%ÕúoWmq½ÖMy|ÖKtE©I3Ø>a•ƽì‚(µY¨ÊÒbËÂt¡¡³¬Ê)CÜ'··Î^å3£ž@3߫ݎ©þ„ý£>òñûqâ˜lê°}>ŸkJ‚2u™ ¿C¢áç–ý¨ƒÕMOp³ŸÌ×_ÖvðíñUûÞ±ŸÂŸÇÞÌ"Åq˜é6°;æ¡í}Àoö½<ÆVu6ÔxØ ç3¦}qáÝ%Ú‘ƒìÂNDö£ »}ÈØß£_ðêÇÀ³ãËWÀ Là3qÌ'8ö Üñ{ÄÀŸµ?eßð¸3t¢9@èž8à¾f›èŸfp/90{Ÿ£ïûMëvã᜿x {ulÝÞ}¬GðýßãÃÞÅ'³{ h87¼ìoïÇë|8¡g Ý]ú8¦¹YsÎØÿéü|(ß¿y:\þ`íqüø¾zKõ:w=¢f›ã~þ9æÖ¸›ò¡Ÿp;æéúçRƒ¶ù;ÇSÔÄúd˜Žï;ÚÅ6ßTJõ9t04'ÌöÜghÓlýÖÏÁüÆù I¨ ÆêX+7'¬à´ÅÂPV]#¡IîÀ®ÖÍwú1ÚM¡š»ä¦–ò*‹2˜Ñ#Ö:@ß :’×à‘®ú†ª+)kwŒ"¨Ê‘‰œšc¤¸¨Ú¬Z‡9j²Òs"gVQîÒÂòMUSsšy’†&RôrÍ­5w˜eÍæ¼¸ÚÞÆ¼$ÒQÆn¶™yM×¾["åË.œÀ¤†UÊòš2õf=ViË¢U“•Lµ}°¦cÎŽi¯€{‘tW qËP9KÅ„’KJ×ÄEH›U’9[~·Äj»•q̺P²¢˜Òœ™»dpЉf4‚fl2ǧ˧)¹™¹¹_ÅUËɽT*ZÍ·|VSÉ’¾˜õëŠÝ¡PZ]]˜¹f DÑ3è"UCÐæœ/ç@þþ8~wszÓ÷Þí‡ÎJ\¨‘JÐÙ÷=fÆ¿Ûùþ#ñz~³é§QrYw;êöeÛ~6º7¿9tkf8#o Y­éÖÔâ´å震ñûí°ðêÛ ØœïÎù¸?½ÿ”øööîæp÷2úÅ÷W`Ac›ÑÆñv€}ömCýŸ:~Öñ,­2ú ‡ O…;õþ¯pý'ç”~ö¶†¾¡ôÝ­,ˆÃùÁìÝùy?=áû->¢á)ÚxŒ½Îão·x‡w·ú¼ópë0=ùN—ÂÍ©l<ͯŽP?íóõKÜþ€Ç/æ6w<Àé¾.­¾oŒcbžTû«Ãþ<Æøºìïø—°ƒýÒæn˜ÿ¸}\îö‚ü—¯£¬ éy©Ãxa—_pþªvì7ˆ´#Ô ´D ùð;; öù®vJý›™ïârG6/ãZ<ÆÉ.aöjm«îõ̹CϨ†rYG?Xïr7_4Õµ§%h¨>•J:#lÒ„ÃÓlAuborËK]"å>-è͸Ôff ®“&\©Úµ@®•™™™ZJKæ5´šmNäL©Ñ’X`ƒQ¨õ–¼v«JPÊZ %T@r–l¥=%×5±äF307_Î_ÓèÞÐ ÃP«YeÚµÆóDyUi"FéRÜé²ÿˆy63Q¨©Ú1“å*i£bîÅsQU³AæKÒKQÑD”­ZZY¥*¢†Ì÷ÒDŒ‚»2HÎZ~·a=°AMæ»lQáéäœ5GIri+c0ˆå`2CÀ*šIæwfã$“\)!‡jXM’¹Æß,[Š2˜ÔÌ+Û(Êú*rÁU˜ Í"¬™9ÀÔ¼ä€KKA·æZ¨Á9çeÌc<«Ž°7´†¤¹_¥Q`™U¸çu˜9A©™B”fšMîÉ,}Ãz3ÑSUJ“®,óÖ[o½‡Ó´ÖeXI67c#å3ô8tßÂCV‰9«fq‚+Æœf`˜u_u¢+# ¯2TιGÎYØjíÂÖ&|¤(q.eÐ"~‚E“™³ JàŒ¤u‚DqNCÕÜ£rÎÉfÏÖ¶ÑÍXÆl<‡v˜Uþzéó2^çseøÊÛKÅ‹¢—F îÎ YékpN|ñbþ…UŒqf5©)è~¸Ã­Ù»s×ydÌz‚“ÍRœÇOçÃ?øþ±ÌcCìæ@ßõ— ö¼·í{­¿Úzxø¼ ·ÃûÎ CÈ?~ ï Ñ pṵ̈M ááG´#Ú†; o½þF÷?b?'ìG„ÀpÏq´ÏÓ¿À1ûË™ôi\©/ïôî7— ™Îõ¦G'RþIÙÒ1!«çQ2ÎþîèwŽ›Ú½š ÇñÐìæÞøðâæÝ+ÃMw«ætÍj$²£·‹ßÏÛø—û}. ¿™€ãûB,_ÕêÛð²ã¡Dßÿ”îÛ7¿€í-.ßüUxñý¬¿°Å=NÞ|…[à îÛWãíý7ÕžAï>€yI;EÖËü Íße{œŸÞàÛ—…—j®#Éc`;]n¾>=·'¼LÞ>ö |6kƒ_?Ævã!&n^¢½€¿¼³~§ì³öú|ßÿ›S÷gÜ$âò¾ß¼9ð`íX›ƒÈÙl»Wˆ[ôØtŒDî8ŒßÑnÁö^e÷8?–%É•Þ9fæ~ß‹È_ìª&§k(õcfZ@½ ¹àjÄ‘mÄ­þ½YŠ €ÖNBìh%Z"•„È&UY™ï½ënv´ð—3[5Z …ŒÌŒ÷º›ó}•YL‚æžäú¤-ô¯­_šZµ¶f”äP+æD€UÍb9÷åù'‰BFpþ´t”½²¸YmmÂÔsƒ-7¯mÌBËì1Ë÷ÀÓ¡Û ¶›K?¬ÒDÁV€ïlIc˜ïeU59uÄP¦ÎÒù¼N=ô™96>žë~°Ðq6îvéuª’©bl·›ÃÛvç~ë(“Ù^–;}¯}°?°a¾y{Ùïíy¾»ì¨÷¿0¼h0{a6ÌÂ$¢`Dv½ýÝÝð€ß¿ÀÝa;và2¾»ÅϿū8 à‡‡ã×ïÎsÄ©MŒïÏ=óÓï÷|õ{ç¾3 ùž÷°Û{¾™/ïÂoHγÐ_mýñØþùíýÿ³÷·†f÷-< „Ú¹ƒD¿h°^ÕaÈíSîg<ܱ‰xGû©w*w¼¸<ôðv€w¬Çõ0" è€P{@CU÷Y³€B`Â^¨Õ¦nW§fÙT»iÆ,h:Š fIª¬´`sÖàëlØËÕÊ0" Z $J&X) E;›]Ôè·θöÞX‚˜•³–âMæ@|áí%!š$­›ÅòöÒ—åÄzŠ­hl 9° {-ñÝvk\7 ¯vR­1HI)_Çu…1qùÍôåý%2·r‘U¨x£»ÉÞh«¼tqEMͳòûMðÜÂÈÞ#"ÓX-xr'M¥:k\POŒGS³rË4‡—3‡ûtIsC‘*]$%rbSjz¡¯UO@t\íBrÖ9G]+ïtY ù5ˆ_XP*p_ʤB¤§ã@6wÂVÈŒJ„œ4Ù¢¹–4ˆR)¨R[¼,`Š39GºÌl]+“šQSS3URq”âÖy0Ï2Ó ¤^f·w3gÐÔ«u˜ƒÉj^ù\9¼(™Ñ$s™•ÈéaáqèîÝÃÍ‹-ÉJ娱Ï}ì¢Ð›Y[†6“J)×çE5¥` ô¥ÿ)[Æ'1‹¢™¹ÓÝ,È­š«9,8YiUUsÒTYÈ›E˜_=ÚV$a¤‘á4zFªBVB •XI¿hS9•Oâª8……»ée]h"Š-*d-g»4»X¥¼-J€×4'û|Ù-зh}7;g›sÎ՜ɆÊö´û…ö„ù¸gý@#÷CÅaþŸ'ÏõnÛw~‚Zœúüñ lºm|;ü=âÍ…¹M÷ËàùÜ{ÕócÆã^ »“ßÍÑOÚÇÀÏ/xCÜnð†žüˆ(aëx ̦»"£ûÀ›_£ÿó æŽÀxÂw®Ýé 0€ÓÇDZá¬O:Æ17ww¿W/ûÞðéÒÎÏ÷o¾z˜ö‡oGóSŒ—ýéˆÇWûw·#úÃ׉Hàò`~=ý.h>`¾DÍŒwª} œç®múÃm‰y?b€×Æ¿³jàP>ªCá°õ„֠ןá~O{ Êîi˜|¨üsÌsØqi5«¬tœ Ÿ0mºÊPV´ žVC6Ãg38d ŸØªjeî&cjŽå——Êž´Iž% gը䒻ùçÖ< (YUÍ9¦ÙàB*|™"•ÖC6ùõãw-ÁÙÔª>`Õ Vßj—`jKA@K³]Œë…&ˆH(¤Nupu±›Ys÷E»Ôq]ÕÕǰº^´õ q&4 ºé¢ Ö Ók*á®(•X3ÆÌÌ­r36k°]Ð̪¼NìÌ›ÓäVTÉF©æ4\Ì$©hÖW¨b¦¥×´•úJÖœ‰±s •— £á@öR[\Æ= 7NÍ‘™…9­¦MqG¦å’Q4õ6œ\¿U `CkÝâØÐ:b£5"Pºy`Œƒ *©t@2¡±ÌCaˆfÞ{´ØÌÃlñ[ œ³æÔ¾Ëe¿ä –…#)Ét¦Š…uÈ©)ÁÌÌJ×$Åš«UN©ÜÌ—·4:J ‹BÑ £5p²ŠT$ÝÖ? |FƒÌŒpÚ‰Mg #«æµá¹Z›©Æ1,³ýÙ ³µCÚ¼d7Ø+Ëd6+°*éû´Ó`ëu¤ z3¼¶¦>nX 8i&éÓ8Æ|*žj¾@ cø6:,ÿÇq±ÇÏãîïu÷Uu'^ðØo?mõ.÷#ΗKùEùi÷ŒÍjþT[ú.°‹3-Ž'ôž[ŒKÇLœ ±ß÷­¡:fç—sÃÿ{¿}óÀK `8Οр|…—†b?ߟ½ýSÝ×ÌpóÏGìÿsOÀÇ/Ýi €À?F{ýþ«À÷¿Ý>þóWïâÅî4ßkŽçx8x‰Ú°ë½ ´Ó=;îN·í»ã@œÄßíèóšÞŸ'öÀ,ìÀíò3gà´·Óy´þøZˆ„]xŽ·ŸÆÝ1[Öè~qþe:f[§XA;,¡Vo½Ý mê/Å—MõîR©|ê1ÂgRF80á—]ry£n¼ì(Ĭiûiž&Ö5º<’Ø•¥µRSíà(T&7¹Ãm—FÒX†DUQ‰6Ø í€þý†±ò*åœsÑõ¤7°B2“QîBÉWôX.“„A²¬Z}¥dØ.®aðz– àhå^‡R£\€pÞ“×XÔÚd[%W³% ÍKRŠ)ËZàt«ÜÍW\Š#TJaÒ"½ %Ä$³æ¬}÷‘¾-4¸ P.šõ(w§Ae£0çÒ6Ó 8(¢ÖAq@Û* Â8ˆB]JÍ ‰WwNúªä9.ðE÷ ËÌÝŽn9± ¦!‹²¶8ÞS9å%˜2¸ë*èè°}Q( ½j`B»rzBÉ,íœÏv9á|)ë3n$ÔÈž¦YóRsy^¥¹ÏÚGΉ)L± B !DëÙ‚ 9a4‡ñØüзֶÎe-µ©¼ˆî?´)aE/»r¨XœjlaÁØÐ6÷-"Œþ¥09fîû^—}ìs¤P¨Ì9s÷Q^0fC ó^°tY­…Q,…|‘ÇQRU–²ÜØÀʼn1@k­_ -E™l€ÑÐá]Z>‚fÍâ:eƒNí…)[ÐBæÕ¦T¸¤gf×|yŒÚ*¾z&°Sƒs§Pƒœf§<`¤}š8~sßuU#/>Ø9?ìÿšŸñðùtš —þ\ý»¿Úl§äù¼̉ílø+ùÃþU™O°7Ë?Ö~,pÔÿý1ÿ¥U¯›ãaž¢˜;¾i·çwžûé„ý‡Ý>Åw—‡Ÿ;p^ßlâük´_âö"  ß<ÔùÝ?Éß¼^h'¤áçßýøÍ=%ЀŸþ>^Ý¡5”=ü$‘·ÇÇ`´ãd±F솛Ûƒ€i€ß¿mïß%þõĘ (±TÔ6pø€Ñaœ·÷;0ìÞãáv ŸÐ:ò|?çƒåÝþ|7ÏÜañ £cÁ3áÏ0 MÀîôÕF·ËŽÄì³ï¶cŸãåÍ(Ò…4Ž=õyê¬Ë7£Y ƒyù IÖ† û<«ÀÊ:\ØXæ—+“RÀ"µ)KY•ÁÚé!'‚‚2î´Š^èݶ¶ûfíàFgA¥‚t-¼s€;dEФ,Å’ ©‘$‰šd²¦ˆX¬¢’,‰ ¶9TÖ%ú•ÏO°(b…í+¥Äµ5aÀêDÌjáñhP,Á +µ$ÒZY3z ëL¬Ê1ǘҌ¦—¡òj–?C€º€Š**•Ó/*3øJjÊVæªb}žé—YkÍ¿ÖrA4i1ƒž¬âJÑQsî'ªg‹ÖšG„Y”Ê\™eEZhÁ®ßVT+€I_ÅÅ KêԘµ[î9' ÏÆ‹gê3èe57Ûœ±t7¤ÑP^£”5X©š9•S£TUÓªDcÊ€¶î4°€‹±y´ˆ›Ö¶Ö‚á Sù g¹(“¼RP)S%@f0E"`£yÀ;¢1ÜÝV[¼ªrfóû¥†0Á27‹2욬”GKÝÚHF_@a^ónÈå8]®r®ç¾Y¹-ÅÕ^4˜%¿XÖž,‚åU@Ñ 'lá PÊ–Å}µÝ à" ^Û /ò§ªO©^|Éz¡ÜŒáUûômZžˆ)±æVšôglÓà/.mÛ3O­vTîÑ.Ç0»Ý”FÉ—<Ö!Jå'û™3ôy{þlñ7Vï·†³ðùò`çw`ºµ:6†[S‹‹Ž~ÈÓVó_5ûýª7Y‡Ú CøÕï^â çñŸž½´ã+';ˆí¦îûÃ1ý ~y}þ_}{Ýñõ»ÚÛ{wÔáþE=¼ü7ØÎ@6 ÇòøøOy7|üKÀøyƒ|7×ÿñÍñ8¯¾Åñ·7hxq·÷TÝÓ¼p>![G¾"(TaoØ:~bGÃ3ÑOˆÝ1;ž2õŒ|Æë¸¸c¬}b‡ñáÆqHÄåm]îæ¹í—?Úû>ûöÜóæ¿nÉûaá&Ñ΋&‡˜Û½{óêÎ>ŸÃçô ã%28Ÿ·1ýBÂ&3í4bÿdùÉžÁvyS²ÝÂn¹S.ß÷8§8“½ªÙ„Mš˜‹To²X<ÏrÔ %PºšÎcYµ¼›!¼›,µ’*ç—Ö“óúds°Ì#Ö×lVPªrM_3hzeXWܾª,Ë”ôXX3†)•$Vy’¼ÂtÖ{‚ÐÚÆš% ÄJ@Q 9Ìœ.¹&Ì‚ª”onçðÙÒé¾9[p±FÕÜ«jŒš DÀƒµ£V;mŸUK\†a6ÑÜÁ* ©¶b« jRŸ;2Å!6º,(÷jQؾh}jùÄtÝ] %„¨YðiµlóÖÌ×øZ6S•,IU³rî9§ÖÈ‚›Š´„ ªÒ™åY¹$psøT&JÆ“ë9üB?¡½.‹²ƒÙEÍk)xÅ•'°æÔ˜S3çD¦æi¨ ­’#˜QͺÁÄ%vŠâ€h¼¢ˆ(°d‰õïU*!Kc"q[74—5FÐqcy´+U™¹g]vŒ]sQE¬i5QÊÌJ­õÝÊÜ4‹’’ZÈ`“k-À/·45JÒ¬Ê\|U_¿ˆ4ËIUðZá¹8Ë[ŽCc]ÕŠ5XÓh„™· B%C‹ŒD›f±šçš¥œ9ŸmžX½¼%zr¡Ç`çC<[¾ÌKŽÚ"ýl{âséÔæyªÝÎÖO6.…–“¹£¦Ìñ}ä%†åù'û_õèè;x„ñmÛÃmo/N/_Š\c!{éEõfì=÷þÉ.Ãûãôñ8Ψs{ù? ü›[Õ‰—ØgŽVnð9a?þy{q|ÑŽïà*„Þ¾ä{‹zçùhýýÜp \ ;pÆûßùÝðó5íÿcä7˜¯Œøù3¾køÅ·xó¯€m ”ÇÒv`AÒx†íÐå`€íqÂö‘ІË³ÐHø@{†¼ÆÞñ¹€ Nô| àÂpt…~AÕÏæ<>]ú|Þó3ÚØÛGÔ‡}ÿÃQ¯NŽðiÀ 耋=”¿»Ñ®¾Úã ÙvYÏÚër›Xœ=³=Çåoáù7äûÒÛyóÀŽþ•mlTTI°Õy›-v7S¼0Ì”C¨ÅÂD‚Ì\ôšF4»rõ¶ÑJè*¢s Q²4Ò8K”¬Á´&ÿ‹«0`"+œ–²¢•æœi6`ˆ"]¢•­ØwV«1w”T,(ÍÓoAªy#!6AM'Œùe‘° ÎfVf¾FN$b=Ü¬Õ —™Y"U^ÃjDk ,hFVÎÚ™…,–œfæb2!·Â`íÀ˜B!P6kHEb’Áj*Km4m†Äª°]¢së¹E¢ÃÛ*ð‚J§°R, `“• X°VXU+¿i ™‚%åžshŒ—ʉµ&5V‹ÕYQ°ªˆJ K!Epš̆YÑ:×xK&DΨ4ª‚ƒZjOä@Í•  ¢ý.9L¤9¬@P šÓŠcµ--&`UU‰,Ô‚D‚«“€fQ CÁå#4C úŠa–¡ ×ùϬº”Æ@eX¦0£Ù 8•J•¥¡ÊÐm­XÔjÕ,v leÊ[Èn æ¸Â_R5¨iVèšU[‚‹gw½ŒZ‹4[Ð¥õÅpÍÔÕz¿°ÑDŸ¶!Fåk¯'vCRŽœY£lŽy9!ÏhMå3¼"JaùÝÈÿD|5­™Ôÿn{ð…õËÅì =¥]z9Fîû.û|Žñ¹öŸÆÔöà߃ÿü[ø /î^µ­»‡dñ)ëé¿>æa6dÙö×õIsÜÎGÃÄË…Òûæ~¿ÿÉû[âÎ÷V>ìü¨övÔÝÎæç?ß³_÷¿ìAto[üÌâHvÛöÝ0>ç‚õ»dX¼6àäkœo°àÛ‰?šˆ?¸&”°¶§ˆ?„^a‚hvA=c¦pê 5ß"^þœý ˜ýª :8áøá~@¼ž /Ç_bûÿ ü[ÔDh†Þß:~–ãõ´ãœ<}FÉÿ~/|†>?ÖKq LÈÀ:ÔÀæc f­Å¨×¬!ÎvQ\"ZEgó]öcåS¶_Õ¬Ýõø}øQ,UL;Ùƒ†Æ Ì™p`’Æ_„’HhbÒä %Ó,$:TwkëŽ` ™7%¥r×´ Ì(™ËéA²-ÇŽ Ëõõ`-íèR®ŒPB€hKícXq'Š úy ÿÙõž/0õeyQ2ŠZdŽÒUl¾ŒÉE\ß±¥ ­à,š™Ñ¼h“yÍ'¶B)ˆI©1±H;ëg~ª0´cç*—/!<%]G¥ªò-)ˆMáåJ/u©!‰¦1Õ•ÍN +W÷zÝ‘Ë9v Êx^½bHHò*S:dG§c ä:ºRe5¥Ké£+í+_R¬ý|Mi IDAT5gÅÊÈ)-¥Óä^£IG®Œ{fI8ÓËêyÖ¼¤æÈJ™’31£íó¸;lþ«mfC0¶†÷‹ÏÏõoÏPÚÌ‹}>§…m¯Æ6|\„[ÕËÂaöx~gO‰i—‡7¯ï_°UôÆNìÏØ?×oO£ÃȶGãã!ç‹Óƒ}†îÖnɧ¶=lø{ˆû9Ìñ\ïN¸ºÏý4aßîo>¢³7†c–w«¾ü½£î/þ`DÆ¡ð÷¿#3èÀþ-ö†= ¢OÄ|Æ›È/×…œ 0>ãò#Ž„ Ç l ž†ó—†vÆé ÿ#Ü5 avìÄ øÑ±Øq¹ ÚÛ6îüк½£Sïo9n¾ÂØ€ù§¯¡O‡uºSåGºGäûåñãþË¿ÀÇûøÍƒÿø%‚ðã¢¡Ž°[4…}¼‡‡ûÖ*¡Äœ÷{>L½»ñ;ãÅóÄÇò_¢ÁÛ½Y3¡†+¥‡õf´I‘rvÖ0:ËaR¥4U³r”šÌ6î­»Â7©–(§’ª‚.iÉØ:Z¬Êát7#Áº>è ­ÆF8r!D#¸ö ƒ9 %U€Ž ªS…ªEó՜嶜”e…•¡Fb`©vxUù•ò½Ü^×ôìb·Ù:Ú¢Ä2/‹ŠfÙÌK¢,`$J…&j'­®íº•Êrª§R<É1¨)w4“QÁ•›_ðž*"[qÒ‚gx65¤åU5¬Q’æz6by ±þhrgkpJ¨šUÄ:ÏÔ¥ê”yšØS£àô[K©l&¤$T–Æ‹VdŒÍm•ÃŒV´\ŠnUIKD9j:ÝHÄ‚o\¯4UPqÀ.˜±Ì‹Ì%aZht\nŒN»1;7"J5•–¥}Ôœ¨ä•8¶&M~}®Ƭ÷ò5®¼¶Å $³DùbøjuÝÒ`ࢵ8D77™‡Ó›ÅU« %?{åK`²/­Å‰¯‰ÄLJP:ÜMF-ù¡Lu¥ ”X+Ժꚭ°Ò.iá´ne`’NNJ Ty«²¬&(1)9oúp^$Õ¥80¦üäí’ÚÆ×¨5{lÑšùr¶µ«ƒ.´~:pë~°Úvx/ß49z3žñùHÜñ>µã»Þ}¯ŽKÛ…¡ñ€‰§ç{¼€æCn'çkm`8rbETûÓ]¿jŽCÀ m>°aŒûΦÑÏÕõ)ƧO/>ìÛ/>·a·Õî {%rì‰áÛCwL"ðg·ÏÖOÿ¿sJ?6 ÀØ×À„žÁ‰öŒW˜¸ò[\>à xþøÉ¯¡_¢t| —.ŸÐ¾G¾Á‘˜/që(bEü`ŽšaöÄ𻺹{‰Ú­L¨ã86´o‘`‰Ï5°·û°ìpÒ³Íyºèq4 Ä| q`‡9Dx!&T÷ܦÃ'ê‚Óé»yŒz~Búãl@»O<À ?÷QL(W,t$ûayµŽ[lÍŒð*e•qn”—q ‰ÌõÜwƒ¢Ó6Ú JRÈÂÔ+J¬išÅ¡œŠMp©W¡&kÝûé4‡¹Ù¢û-0 fI¹‘$™VJ# \‡ñr0TàUS*B±ðÞËÌ`++¬ ˆ¸Ð0\R‡Õ‡ãš;ûõ¼©’¦a5¥‰«pƒ*h‚Kx³ÜgAõ@1!LSM(×£>V o„4.—QCt¹Ã`‘>–X™¯¦,×oä«ÉÐML³fá-É)æ:׊"0"­›Ë›WC±Js¥C1 35kmâ‘*MD"ìŠTKµ,fÁYÞŠéˆУµh\ÙŵJÕr˲ØcÕPat ŒiÖé2k …“€¦0 C¢È„bAZ»õóîˆõ—Ž{Íc &B¶*&rH¦+<ÛŒ¯MI/AʵiWÁŠh€VbÊŠK>1¹NtX˜ÌÍ"ä4²ŠsÉÉq{½eðe8i4ÑkÕ3!3¥Õb’…›­{žD+È8¯”y¬¯ÙÈ0³¥,Y›½Ä¸4zÉ«09³@®o›Áymâ4º{¹±Qù|^sP)K‚_RŸÕn-oi7Þ ðê¬â´ä±¬Ø¸áu³êJ,ßçí<”äé¦=ËõbsÜØñÙ†GnÇyø4}Æã%ßÎÓzsŒ‘ooö÷í|‡:|Cd¨ü·_=¡·ùß•¾çù¿o íèöz·ïg÷gnýˆ¿9ÜMùPò?ÛóqœÛx—þXo Û·â]Ä×ÌvÚ~f° h@~D£Á¶o wí[½~—íñüõûÓÇ/%j „ý'˜·ÐhŸáÏ÷o~xÐ|µøX&ÎÄÇBŸ¸y…f0GñþïíæÜ[v?¡Uãé~ÇC›° à8Ð~î˜öy;޶7G´ÝâdóßñˆšÀgÄ·°Ž|œˆ?ÃãŠ^€ƒùV¸l˜ïz¬|?ÏØ¿Gúç÷¼¹7ƒñ!ñÖðnz3¼ƒ=bþ]޼ ¼‰‚ÛŒf|iíÆ¶C{øŠzµ„ Kcî•̲)9ÕaèfÞ +d ¬Š,áp›|M «Öƒå0c3ïŒf† üÊn«TÑRð%¯ô56¹˜ª„ ±–Û2(],m©=‹þ%½¾£Åœ0‰¾‚-‚{M†$'YÀ*”Óa23ƒ ªX:M´¼N¨²–©: r1 óZ©F$Ao¶ºkdôM,*ÑÁ"Z™nFC!d ŽÜKUéHä i ÃTDC6-¬Ü'¶èP—“S9&³Lé;°«j))­\óI˜K'>EX6íÖÂxÞÀz„{ÈmÚuaR˜:áB§o`]h*K^Ûƒfp£¹G§¹(&4w(`Õ“àÖ­½°88;a¬¤vi"/c^”g“ˆt‘+GÊú2N‚£Ñ–î‚ū棪²4Ód!´i¾ÌÎX]F+ærÀ X£~½Ï^ïHihL&ÊBF¸°‚Vy—/«É*PÛ ß­0à +!Ø5 geJˆÂdÍ­An¢çârÑ*ËÖL%cyA#-%›«É1G,󘎥,tºÕ1§)u©|ÎÙ{UÀ/Í5óÌYî`†mÓèUÛá!–OjV;ñ\ð½Ó'²åûa w«Mió5n޵MBø;äû—ãݦ»ùU²½ì|ùSŒ lЄ÷¯LwfqÉÏÈïa_ÁÛ€û#?ÝáyÃzÿöÎ!;üîlí¹ÆI—3ÿ² FxÜ]ìg;_¼ì·ðø]˜ ¹€ÃŽùïqþ—Øpwƒ;Ýó«ý8Mü?¾Ûø ÀßÀ¿Åáq³îo w|nÛxçóxï„Ægd€Àxœ€áwxw±ýéóýxއ( 3æG8 oapóñíþénWSöq¼øñSßøÈÄ˶0°}þó5Òì3x(BÛÝô»1»Æ~ÍÝñô õÛ·z¼Ë›¦ÃÞúágiGóNß5ÑΡgÔ矡Mô—qûMÃÁýÐú!ZcëljÓö3y›¬ÃšyXÄu8‡ä2k{Îv™¶k?A†ÁX}2”4w·8°m‘e»$ÑËLÞ¥8˜Lµ‚l,Ó0 ]f‰.ëî±ü‰Q•`ÂÙ›7úvð~c¶±L51/Â^ºdí£&•b… šÈs¥_y¥µ÷Ár`ó?~ *,£Ï"GE¹ÁaÈ5a$W•€l¥® ºE—¿2»’%ÊÉ ¾ —Þj °ÖôÐ(­µ•´A AüE†a‚Ö ²hB"Ì;¶°\?–ëÿ 5Z°XHb²„´Â„PŽªU÷·ŠÂÒULjŸ©ö±¿hsw¾éºÙ¦¦,ÏA(˜ÛŽ›=¶š-'ÒÙÄšñ©æP SåÀÓyçþ—¶u:Ì÷ ÝÚQ­gìÒ龡µcŸ7Çfè—O÷ȇüç¯Q€÷‡ù³‹ÇŽ…çK¯óŸîßÿÊë¨õyŽçOã·7éQß´q¸î.y÷Œþ9÷g{ü߉F¼ò?›øzçá{ÝÖÜx±ß™ñsàÕÃ_£7èk|ÿO¸‰öæÛ~h½ûM›þ§?{õ«Ÿ¼Áˆþ¿÷¼ø€ø›à@áNíŽÑ;¾40ÏxÂýÿñááÛ?ÁSCmChžöv|—|¼m¸å•F¬Ø 6Œ¯áïÚ÷w8ô{ÍÇš¿`ó¡=áæ3â{П`ÿ)žnð=ñò„í Ékò&·ûôv±~b§5¶û²‡ À§»ñ×wã×½O¿?_‚íh0©§{}| øâÞ_ü¤ÙW[·Þ#¬šUØ"ÓTMJ©¢2jféâÚBhEúZSSh­Ü9š­éy‡mô 9aÆp6° 5÷nÑÌà nfXy \ q@¤kMm…’›@ùõ ɪʑkê!¸ÑŘÄuÙ,‚¸ì+4Yn4¿Ö-×µ«®æ,šK(P¥JTe‰RMÍkéj¨LáVŽE´¾œv=û]U5D8Bh’C×¢*éPiVÒ§IŽr¯æ§Z@ÅðK°ª¡Yu°íx|ñòÍë¾%Äé|¶š?~šH–i¸F-ÉfÐ2¹dö¥j®5Máå–”]ÿVÀ·•ë…Ãh#—ƒiŠ6-’ ¶avdƒò«T9¤aÚ'Ã3}ñWŽeq v¢”¢{XóèíqCÐÌ‘s¨ž sÔJI­U‹ƒTÉ¥B%ètI§­`¬XŠÔ\(‘1¡¼V˜™¸ÊÍh0ÈŒt|L–å‚ÏÙÌîËB"$‹ë²pe¥€‹‘¥µMX×d#–‘Ë$´ó@‘pT†UDyÄÕuJ¤¡ŠZôâUt»¶€Ì&¦ÉkmËLæ ¦ëUXž,›YŸPOmþÅs3¥éX:‰Y¸Ù«ÊÛ®sk&ȪÊrÖ.­$+NFæþ<.ãÓª[lßî7{Ød-¡ g=?ïù»eX¿~ò âìàÁÃ/ðîôaß¾†Mõ²w¼°w{D¼Ÿ'|^ö[Ø Ôï­µyèöÝžÀZÕ}âáó›·Ï?¹û¶_ÿgïPŸOï_½Äë‰Û@ð=‰yº®‡ßßqh77Àz’LØóýüº™zlj{8Í~ygûØþú=>`þ§×8Ýâ|€ uÁ0 &ïQŒwî;—±o66>ÈñfÞ-¿íû‡~øk×ëòÛ†[à}käAçoæxkû{8¶ø‡vü/ÛMô£{sÀRÊ*˜¹àh\kBUUbˆgÓÞ–é1$]åÜqåy‰ft˜¡ ¹D[;?ê˺ÎÝÃ,|)7×fùê|SeU*‹ëUc0+9Ö½@FàDH¦R%9™BåI .®E?å([wG9Êl˜i%\!lM×׿JPiP®òö =f•’Àº»T 0™Ê YsQnÈiî×`®6¥UiÑo„ýZbcE釹4¥š²2T¤hWƒª#H(eµ¡Eв)ˆVˆ¶mÛáØú¶m]`BÛ8˜^×ù)Dh‡<5K±*¶f­ZP–™{^FV[œž5ÖvÑ££§™of46 Á ëÕIGË륖l`'á*u]@¤f©Ýt*ÃÏVb…*,}¥P×b:ÍÞÍéY™ûeäb2ÍõFÊLpÂH iªÎ‚`rn¦¯ð›™ ei«‚_°•`ƪû/“øò -AÇ22¬> BΚ‰„•!|½ÖÖS™W¸žH­M¨ë1DXÕNp}bWòèúª Hq,×"†¬ÛŽ•lÁ¼@s”ˆ« Kb+YÃæ\] €~DL³L«á’ƒSØš¾Ötè ƒá¼N†€½¨jÄí¬­õf¶†sÏ‘—KñÂqJMÖ€•f™öÆß~ó«ˆ;âF÷˜qxçò'^i9Úxðö/²¡7Ø„~ƒØ_âÔîÜïbv ©ºa2§ðTñ=;ò+\À†ç‰ÏÇ×·€}Û.m<ß<úö`ö®lwb·]¯âá°ßÏ À´gåéÂ#~7_4¾Á¯6âòŒ~þ-~ýáñçÀÝÇv»½ÜŽýP¿Ç¶7Â.·¸ý·Ð?Cù°oï´í¾A}z~˜7ÀWwÿp¸ûŸ¬ã¼ÿº€3þ«®Ê‚àøâáø·¸=áØÑüHäÄðð]ö=Âöá¾ëˆêÐnü€ÿ³÷ù‘,É®ôι×Ìž»GDeetU7›]ÌP‚4j@-p —„Ð@Ò?¨=Ñ .g‘ |G€‹Ä,Ãþõ#3"ü™Ù½G ó,.$ÃFÕ¦P…ʨJ÷göî=çûðö{|¸Å8bT&¶‚½a^Þm¼?ÍÚÊ#ò¦cfÂÅBT¡òüÚç]/Vò;òï¿HvI$¶(˜å~oìöq»ûŸ—íÊáÆk3wA9{¬Ç­®JHq÷àÅ–B©§Â­Xq§»XÒLr¥"èÉkœ?¤ŒVç3Ю餫 :‘K13#r¦®µ)I/4£e¥Ön ‹œ½«1€`Áú%<¶’I+:orà: LkœK¢ë¥~…bS’®AÁR×'Ö>#†4#/ À P¶–ª\í) dEºI€ 2iô+.Á\(‰%ƒŒf4:×>~¦®»{ºŒÙÖ<|EŒ…°˜ˆDÐTË ALÉqÆâÖ̃ÅÍ‹QEP‹ì#sFvŒÎá0Á˜fZ,&§TFÄÌ¥§!Ëz ¦R«@ákÕ®Œ1çZÁ+“œPO½&GbÂ,§HU ~Z¤.ÞïÄÄJk½")bDì1ÇØ‘p˜©PdR^rš_½kI¬V¸Ÿ5½]óHnDÌ„QÁO³ „ŒHºäôCn¹Æ?‰PNa$"]+ô– ›s­,A¬˜›9|-³×¨J4–•5¦p]µAÈ4A"Vö"32§M1Ò´èG2¯&päDjÅ|¾mb—©b’2 ›°³"om”9ÅÜ2üú=ìƒëGf›ù±ÙV§ \‰±‰PÎ2wö]³sì©‘£›>ÔÇÃÓý°Àöz>n Ÿ(½–7ó©ð!mH…döpiç¿Wý<[ÃT4mDôœsÿ//þ/Çÿüvƒ¬°·ÛÍ{û ó뇗/Ïœ8Ö§ƒªCåiìØxÆ|´—çÀ¨{±——Éÿ–³á pÂ?€‚ŸO”‰ÏÞ|ÿï'Pþñ¯Ú?âðð#g VãÁçùæk4€oÀ[À1ëÕ4ÊMB¨þà‡z<µ?¯íïNøù^í‡óÿ L!9ähwðW´Ô#dà†4ø€@ =É0X«d8†š:ʬüÅCÇyáØoˆ¶ò qsÏÃ=­qï° Z+³v3Õ€|€öTnauØVÕO|šú²`nùAqwœ7ožËÍçõðÓÚîy8±äEBˆH]VxÝ}+^œëÒM–p§¹YsVÚznLZ“p’'r½Â8ÈeF\ˆ.V „%&õ‰‘9S35×ý˜4]§õÓqâN[OT7wp†…™McL­¥0è ,™\w²Oȼ5<¾qQIu-¥U+ Ö "Äu6äõ½ÂµpE‹N—Tš‰Š„&‡‘…æ€/v·˜B E2ÈIÉ‚HÉ@sÑ’žÅ鉕QU±E- ó4s$!f·He¾î¯~©%sØç>ãRÅEµNrDæžÈ‹’I®ýIº[­~jm¼^€©Ù‘ž*d‘[1+&§(´ŒÌ´¹rŸë'FJBÉÈTÆŒ>æH y&(Z8ÆšÚe°)³tLʴ⽈TÊP*ÑP§.Æ93±F/æf,d «v-¬dá•9v"öšqë–³ú„ oJ#ë`H,¶$Á´Œ„¶jg¹rÙ¦L)ÏP„,¸Î.¼S!ë,úµþZ/Ò¤AŸ£QZòTSP)Ï™×!4Zqš#‘=Ô׋«†åHuS¸ç §ÒTwGÒdtµbZù«–rܲڴ¹;2væQv ¿qL Ëd fAhËL|ÿQøý^†á©rúvn†›€zA­h‹÷9°Ùƒ÷sŃÕs”¿ë9Ùs£Ÿ_+F?o|,Þ3²aZ~ˆ¡9_DZœÝQ7Ô AÜ,é×3ô5æWˆÀeâ pÃ÷Í0õ0xþˆ ý‰¨jæDþ ¾è«œÀį/ø‹Ü‡7«ü ü­}õÈßô8aZ:¼œw°?V!` ˆ÷A¿¬Óìyó×G;<¥Æ úO ÿ;ú‡6¾¾-W¬Í ,0 rCnÀøKà-²  Øö ;¼´|º\Â,=:ò§çAÌ w'…–ðDãö!ŽÕZ£7EÏÓ_ÊñÎlk›UÃÅYãÁ*¢B·Þ|¥ÜƒÏˆKÕñ4£Œr(w§v{[÷^°C7ÀHÌHtâµä4«íð¦Ü™9á/³¼rí×ÔÜ|u@Ç:s寝¤#‰P]È&Ðhuµ D¥0ÅUf6˜"‘‰+Ÿ²X[5}¹ž1”ÑÜnÅÌÃÜhi#ëJH“ÏÅÊæ4ÔøÚ-"3e°*¶üG)fN¥r•¿‚>$‹ÑR×á×1@ÀÒÑŠy1o2ÏU1 ÈÅtNwÄÊXhIsNw¡(Í^³qû„ rœ€J e>øë9šŸ{}DéæPtKÔè²vd÷2ExŒZ?Ú]mmØq+® ¾"]_ÿçAÿSõj¾lkܰ¤rF΂Aì²4tÂÝŠ“µ•Ì ¹)=;m3] ÕY…ñœÌ™sK)]³!HM_…ˆF®‘…D2s& ƒ#¹îôø×/Ò%㺎XE¥k-^W¦¥ֈŲ²ÐŠkC [Z_Ó¤¨\`³e@6×0£‘¶$1L Hd0ˆÁKOmKéH¬,k”ÅœëùÀ˜T¡3“@KÐåi²4Crý²¾z­¨š53Ø„|®)X@cZ&À( ­d¼Ëlš­  qš±§öËD‡,îÆÓ†æ!Hnk­)KeŽyy‹dn­7ÒYÜjópµt}_J3¯¨@qZ\,™>ÉÌ”"gvUV€˜SÖ˜3GĈ>"Åú©é¢«QU5¥](–n(tÑÒJáB MĸgŒ^ÍP‘ÛjÕu ²LÛÌÝš»{!ÊšUúšó¹d31ÒFrÛT+a Åm=«iîfÅH13¦Éf^<ŠÂ‹–,Z¤‚’B(ø´s)(#3§V0Š×Ô™qÕÆ”&põìÖŽ¸2uþ $|¥(ôé6¤ % 2,ƒ¾ˆ~´$RŠ9£ïsG\»´¬' †±Wš±PÛsÈIDɽÌH5øj¥¦ÖˆØu@¨èˆh²ÒYgRS¹'ôJŽpàÄe–×цµ¿ý ê| pGé¨'ÆËÃdÁç÷Ìšånúá&.eØLûö²ï³c>ox}¬‡§S}ö^B௧w¯o2Z9©tv»'aB˜ÀXv»{ûÙ=Ðltå|‡9¶ w8±yÛ™§ôê—öo™)}¨ÀÀ¯¿ÃÀËê:,„Æ[ôòþ#°ë!ëùq¹ÇÙ IDAT{8 zG–‡ïuþî·íác¯e6gËøZ}¿=>ÿÍáô`åǽÝg¹ûw#:P 7%QO°£FÅfâ5Q¶ýaöó±àðöޏ½¾î#sþ+´ ­ádp½óy½âåÑæÚûЧ$¨;ãÛX‡JVj0Ÿ"îç¼W?m›[©µ9k!¦mƒ • `Sl–U¡ÂÔ>£S}Ãwnp°Ñô#jU-Vˆl̰ɦ\á †s˜É-Ö4Zs=µ™HLEbæèâ ôµ"Ö“€ˆT2,&_èîk³ymµN›å•Æ®Ñt5Ë3—± s–j¦’4ÍõãXb˜œ*ÈJ9•$Ö¬èºe¸Ö—œ°€ 2ÑB \‹n&úÚHÊÌHÎ%«3±Ãf”•\šMBŒ4Ç']Ðu ÍR¬Ílž©Ì‘érŒnSi@® o¡›Ë·dyÒ$;Сœ±Ïl³´B• W7[°h5¶Â&7¡àŠŠóÂâŒRPhp©4,WRBÂvAg`ær[†sk¤G*42ff§’ÛD~´Ù™Ü,«f·úâ°ÊC©²"V¤/×EºÄ˜Ð^¬xuóêæ`…®ñ‘ «£¸mµ6_óK"‰G.EõÚãúb_Ø‚x¬P ÑÖ¢Xv˜ÒÍÅ4—ºY²¤\"æ*×'ך2fs‘d¥ºÑ ¹èxr‰±JhJ[5û’©$‘«NJ9§ff®WˆBˆšË죌 hιïýuß÷¹ÅÄÈkêÊ Óôꪖ \FC)ƒ¸ é }?e‰te%aåPJEÄÁÑ-vî¯n‚óK>'ËJññ¨ú2O»½¿I ¿Lš.5û]nM­4¸p8p:ûHΈø€Ÿ¼€7‡~êÇòØëÓïÊûÍO¥s q¸+Ï(ßi"„[  •0Ü#ïc4õŽßo¯#Rš¨¿g{oùÀýŒxЬyiv8šaTCe¸‡ù„¸Oܺ±ÌÖÒ꜅S´±ç%ó¹Ú÷iÓ͈ÏÜ7Úuc-(.§¸‘VYzq7º¬†·V¶bÄ1¥1c¦Ùö\ß ¦3ç‚­Áà\„‡\ø²u,)Ö—òz&h9dpZÚ’= Zˆ‹Ñn0w‘ŠõÔ°¼®ׄ£p½‹p&øœXCï &F²8lÙ{ 2M0æÂ´*àL V^d²„“Ç4_ EîJ¹!‰Ð\ÏMЉ⬥l^6XÐÌ:s"&&²+¢rDÖÈÚHpuMCŒX×§°æQ¦‡ÍaÓ¨YI3w§`Q|ÆÒb%áP:ètúÉU šYI¶”­gîšÏ­ÁaáÄõUÌÍ V>‰@*ºaoTš“k'峯Äâ—À‹ë£ÕÛR»·æ•ò„bíª˜0$8ÝgÁVŒî\îN:Š;†Um5[‹ZÌKé5ÍDDZ€±UæI3_6[l B¢‚üÊ^Ðs×ú“,ƒ (WšæjÕ/Þûº,0_1w7/(k% ÈP©¤©,åìjoãºh[CW*,“ %Ë ìÊÐŒÜ/³¿î—×ý5{çŒäàß³`ž<èY¥Åd Τ-“ÊÊg&"A«£wb·™aˆx™]ž½÷¬O½–—ù\˯ö¸á'nÜjƒ À;ú}=þqÀõ¥ç?kÎjÙ£/ QТ%oNí(§ªãÃ(çøÞ&Xÿš·{‹è¡ÁyÆÄÔƒÙ¹<ϵ>]‰j6¶zV"ï¿A~ƒjˆêO·À"J>µ‚;£ûë­;ü%pâkÿ>4üñ ÷/ïÚ7÷ý¾>éÑŽOYÞ»§Ý×Ú>³þ¶â¹Azú>pSªé./Íð£2ºþþ ñUßžþ]ÿ‡ÏÆ»ÏÏ¥Á(GÔ„ P0_ãÆû}Üïw§öãTp{°Rg´dq™Õóáôr.|hÛÙÚXc´¸4þÞ+?<Àÿ„¸·c£h7*@ž±ƒ:ÇË#÷n^ÑjwE‘éj·%†ÛAÖfšG{#u‘=™Ë¬9šáh¹9 ‹qép ”›±s·£ùD±²måØêV­ ˜cÌ>B#0&BÓ°².‹ÁŠµŽƒ®ÙMK.Ý—!W|Hë^J‹,Pž´bF†t³5~‘R9!¦0™‹{÷¯ ®ˆJ&rµOk‚ , Sb.“äk}ˆb^‹*´Â[ Mb’iÈ5ÏZ°ŒWtQ\k‹EO7¥;•ɘË_¥¨õ¿Ö KB–d.AX"§—„–ÈÂ( Œâ~]¦G"$ŽÅ¾@lnÙŠ¹é=i°(nåØÁn ã„tÄõ¿}eñ Šx ý”T-¹´à §ÓëR!!I €ÕY\VB d䀺) æRE¦>šžåæÀ ¸›yuô%CžÆ%tâtmý¹IsùÌŠof[³­™y#F&CZ !L!3™,@á¬VK5¯× 0¥d–ÅçUͬõVÃ\¢’d†0pýmÅtLObÕ“±ÈM0Ò‡Òé¾ò+§Å ‡ÖÆ(MŸ ˆW¸cBžZ~i_Þ¸kç.Si¹xݳܟgéÏ—18ú÷D(JoYË4[ pÍ 'D¦ û°Ò£UÖÅ­¤êU×°•ãz^ ýƒükás+Ämú~ó×:ÿúÈ·[9–ô毻}˜ùø“à—á7:Ù Ïæ ô)ª=ÉY:ç7{ÃvcØÐ­Žîç0ÇiùÁñÏ}ÜÇ¥cèIönÛïQ*ÊcòižÞ[² ìûJ?=Yƒcƒ~‡Ëßcÿ Ï ÛÏáo€ã Ë£Œ÷îø½o€‡·8ß~"³Ž˜K—ûö÷÷õ«vø²óK´ãKµÙN³mÕzãüýS`æ_Õ êG§½E Q'||ý„¯êÛÿ4þâO·ývˆéÀ§uØöŠúò0û›öù›yÓ¢UÔHûMäõ(ú©ŒÊrÄc¹TÇ#ûSjpôòö¡Ûwo žä7YJ….Áäö`q†žF·Z}8žÈ‰8ËÿW•ŸÈNÂ-µv¡”ˆ½ºUlÁ,ÔæK°\P™•«ààfT%eµ6³0«êVˡ֭Òå\×~F¦K&cY_†›¹ãÚ ˜ŸJBÒº¹¬>é’†«W€˜‰LäZäB$Ibb,io Aæz6sË @ŠzÒåëm>Wç f×ɉ”s}•I/ 3w¢¼ HŒ˜ÊE€þT®‘Qkf…\WÑÕX_¿Õá`ÒÀä\«î¤p“)TÍ–(mÕA 5J¦ QÕX• L#ÌdÂ&tÌ“ ¯³ÊKÅ’\ÓWÑÍv³Ý`”kuh¡ˆn”ÜÓne>¯65ÚÉÛVë7Q˜«ÓKÒL2¡ŒŽ  ‚K9K¥‰ ¥Ñ^ˆfHn€ã”™ áH­6 W·§Õ\)¥‘Ë5‹De©nÕ‹¹Ó‘™¡i¹â ²qÕìD¥œ^ª{+,¾è%©°µÐR‘RA.³,„¤R©$¦¸CqýA¦l†DÉyÍ ¸z¥5XÙù‘È´L^áE×Èœp…†Ë€ÕÅÐÚ_eKךÊ5é\F1³_Ô/ñú4_s¦Š½.âëAð4OqZH2ä ¦L#åj”Ã-ŠDqÀ–8.9“!íÌ/âé Ü~çöæ_”RâèQk?µl@ZôÁ1/y*q€o0Œ{ÍÉl/Ú8ä“ ¹å%òYŠþrº</µb¨=ŠYQP‚ãýË øñ8&ìôXŸïíó¶{O‡„ÝÞ×àãŒÄr(M`Üàõ+ì_C‰~U°`‡ŽÍý<Þ÷ŽÚð¸á©ýâ=&ZÇÏ öþÐg­_µÃ×ÍîÁßÖz/#ØýuocŽsÇ·ñ·ŸÅã1zþã À]þâÃp´ºßù«C _pº`6ìD3äÄœ@ 8œiÿ±omËm^tŽþ.z®åeOÛͽ×{k-²ÇžŸÊ·ðßU‹aÿø wÈD"ú|,¨ÈGÚSëƒíÁq^ÄfÙ»Sáxƒâ–4“i05™ÊìR`Zãv(µm[Ûj9˜7gƒƒÅÍ’²¢"˜[܉jµÔâ•‹Òjî–žVœf™TÂÁÂêf&0ÈO7K(i\±ÅŠå\¶PhëœB@¹°Þ‹K¤•E’WõÎ5CË•\L^y‹oéI|Š* (X§ÅzÀÙb_µq¹&8¤¹ÞQf '¯feºñ ôLÄRŽ¥VŒQV)cõ‰i‚³U LR0¥€†¼s’¾Š|«¿-yz Y0 á ³+Ö•™®tÑQBÞ\²«¶$é«=f3“ËiÞé¢-%· Ã8’&°ÊŽIOXš ^M«åF²B[™®´•éŠDö©}ÆXʿȥ®˜±Ö®f¿¡TÅÍáHl™›¥›%at¤ëÚ»®“ç JRŸcÎ’ùj\.¤.ÈÀšC1>…ÿ%Jk€htc¥U˜‹S9WQE@RˆU4X7]?KkËÀåj£[@¬ØŒÅM¥¹‘nfÞ‚eqví Ì®s£РÛŸà1åLû”§p(RÌ EĈÙsΘ¯xÙõñ!ã;ÌÆq籺ýIu‹ÎIÉÒ`¨f‚# +Ūҙ¾¥¨Ä´UŠ‘]9O‘"/ŸåM³ÔŸV?Õ¬Eu´h”Ž ãœYmØÛž¹/AO™^0¾¯ýå9oNýîy¯G£•ÎÃsÎïû-_zùæÿÀ|HœÃñìx 솷cb|ÀìpœË m{8°ÖÒXš*f©Ïó¡êœp†Ã³ciÐq„¾D½G{Aäf‡á<îû¿Cû_þ´ïo€Š¸E!ðòp;Ï}üõ¡uû3nzyÞÏì¿lå)÷ê—aß=ÙgðÄæÈ‰ÚŸò‚xSóî.þ»–‡¥õ‚' ø€;ޝ(måwØL @ùË<ß4봓јœïñ >?Xž…‡˜µ”S6 Ïý–þÆñà‡3þ (ÿÃÀ¡ctv³ã¼·K³ì6Plž³BĤýÌø£‘[5ç˜\x•="Æšª\²z±rhÛÝÝÍakÕJ…W¸«’žîª"õšOIÂÍÍÜD¦2Ò)Üxaf1lemÅX¸Ôò,E¤óì[ÅipÒ![¸íåw[¥…¥ÖUë@iJ*À$¥\sðê0´<\ì@òz„Šd«¦ ÆèÀ’i\o5‚c0 5h“Š…ÖǦȡœ‘š¨Ìæ´ë‹d˜®Å7•t ±ªÃ‘ÐSHä\ó "3%ºyM+Ä™TšCE¤\ZÞÏt "kÍ8ênþÜ9á’!RD­;º¬­º×¢R‚nS"a ˆÊâRÀ(h§ªc‘·¥ ‘¹HšàMÄ%õÑ#rEueD®ñÌ4ÊÑÝÁ*VÉ+u) Ü–èzÃ^Ã7aŽx‰Ø<¨1㢌s“+¥˜Êˆfd¿`¾(ÃUH—­§ÃbU³*«ÉbÀzõT¦)󚊦®ýå•IÎ5á"µ>˜t$¶D± aæð–, 4SÆp^?¤–dñe![˵E|_±ŸZKéè±sιkîš‘¡Þm \f|TH«òújïçkÎÁ°DÝ­vºÒ ŽÀHMîªôR³lŠ=bX ÍŽÝrbvh~ƒ†ÊYEÕ^«WÏb]¦Ž›=1‚&Z©Ü`/Ö©Ù'°oÏl§a/=v‹dÜ\ˆ][¤NqñÓC^γãuâã ¾I<|>Û—´å üéçŒÇÌn`ò<+ðÏ Çó†;¬ l8¼ÅåÔú‚tôƒcj`Ž?älxX¬k }óx[[y(,ÐýÛoßtû¯ß•4·û×V;¿ ãѲÞìû‡_•o¯ˆ#ö†Jèò—‡½}¾áíGÝÚAPÔð‡²áÀóØ&ê X¡þŠ N ººî</…ßyžuç|Áe”íÍÝ-X­ÜÅ€ðÈ·O(° | =Ü?À²r³<ñÙlÀžªo™ÓAûeÆ­fA±]ÓM0Ø8]VMäÇj³Öv:–·w§»»ÓÖNg ÃÚ=‘Mh2×®o­•¯|eŠ&úÚÙÑŒ€ŠÇÕÓŠ›W  mY áàRö,Ði*‘Ôd¬`*åH^Ñë zµï\QÛÀ¢³&>ó évý¾!"sÅ•¢®u&D]ᛟØÊ úoWž>$£¸†çù€¦i±þi«iMXR´È¡H*è‘s(vª(á0–”ÏÂXiPËÔd+±²è÷×ÜçœsâD,]kCÉB‚ÄU[‡¡˜Ê4Ó÷C Ufó9Ëðš•ÍÆÄL–F|ŒþÁÆ–c›¯-i2nࣕé…½è%ò8tP”Ñ3$(]íà•ùxîy§òã~kx*óD0_ØÿEzK´ïE6ädàâø |¨ø›5MK`âÏ'no7ðyDF&ç“ec>ùŽy .iˆ 8$¶„N°VÔ âŸQnPïlÿ/ ÿ•gÃx:¾Âªýçeüìt†߯}ûò >øó£|þŠÔ^’o§„È.<å7˜¿Åü-^¾Dÿch¾c¹Çm½´ñÛ­Ðeh£—¼möãC֌Ǣ§Â÷Up>$Î"¶>¬Õ›¶‘‡>/B*0=1Žx-¼´V•tµØ~䥳`6” ûˆ´÷óqxˆrÞì]ÿ¶t·±5dž1NqÈ4»Dl‘Þé7»ß…J…—ª–r{%†óùæÆ>¿Ù>;o‡¶mÏ©X¢P£9½p%S3B+)εB`ÏL•H¬t¡@MU1­Ò›– qE0ÒL¾,e™&M†Ì$’N8ÓRë…Üì“;Ò® ‹u5ç"¯.KÛuèËë ˆÁ$Öø ¸ˆÍ‹¬™L3'r…p0`ÝÆ q¿¹<ÃWU­‡éuü°ì±$ˆàu÷=(w›‘`ZŒ±nÚÌCf²üS¢'€ÌÌ`îL%Ya¾Ò•`&¼Ü™^à Ô f28«ÍUªYšHŒ5q‰˜Ãùìo*Õ[ñRQkmJi 4 QWÊ€ëo¬ðB«D…5Z…›3º”ê’Š”ªåªõµ4ˬYÊV½»W‡¯“׬ ­ZuU_¦n‹7ˆu{œc¦f¦ÍZdn© †)"#£¤<±BÊ ¿^ }HvµÉ9JS-æŠÙ]?Èj–nÕ–=–$UR‚&F¹™ÑàH¸à’\¤÷ë|ÄS)wÊÜÜ®M¤Â’\£>@´•êš¡ÌTæÙG}Ž1fÆÈì=¯NC",\¹!2§bf䌙=3U[‰i5ÌGE²”´ qJo–îfJp&Í=-gF>SÏQ8Ýg#¢Œ. 3V×L Â sFgåKK4³Š¦ýª;fü²“ûÑ?­^Ð[Èü<ð:<ÛPlÏ£âRñdø¹€Ž_¿‡‡¿Ès`¨öNvŸªS#bOüjÆ€  ¬!FŸ„8â`PC<„½Áàw(orž£bêœ)=x÷uµ/Ç6Ÿv=Ü—Ú·¢õRö×Y‹OŒWûã)€Ë– ¨îöо>_þßâG~öŒãŽ–Ö¿/;ô´Å›žþ¿œn/·RñY}Ž éïòp/«¬üø—÷õ³ól¬Ï5G2þ6ô«¸4¼îx)˜õaªV"J'4ôZl·}µV Îq þgäŽlç2QË}}mã³ÚñÅSÙ1…ä_µ`1wMM<9ʤyËM³ñRj÷L?øÍí—ÇÓiku«µzHeh‚q/äO‡kásMe[yô+¿2 „]eW ½–`M«ÄÊë.!eËãIÌëpí=DÂV@ðªEÌÖȘÎO„ä•ùYÒ¬kunýˆ!%Eð:4Xe:'2Wr ‹aPà+5+:h´ò‰Ó üº¿‰+Ru®}œ¢!M= à"DfÍXõiZrᙃ±Éi%t——w&#sçø¨”p¿µRKYÐ6:´žþ€¹ÁéEfikw¾ªMæ ׆B^ŒÓ1Qëéx@Ûµš;ÌWjÓ¤r-:ǰSVŠQ† ãuˆ_hin^P]V–Þ§•FK0P²Z2䯷bªÕ¬HY¦YšÂ‰br«ëš½(uÈ”92v`D:Ö#õêUPÌ™WÈʺ€:—ËÛcñ6–žéS'Þé•ÅÍi&äHuæ@Ì7Òèn(îÅá¶(±ð‘®\/qa–¶¶&f€ÅP‰R® ®´°ÔÃòÉÿ¶þf®Ž…]1੉œ3rÄÚ9Çè9†f®RPä\©Z£ :0Áð™3bfŸºDly`LS$5¬–u¡ kaÍĦ¨† ÉFÔLãø‘Å"3F”ÕȽX¶Ï¬bJÆ ]”»æÅ~«ü/¹ÒF©ö„D|t«öéöàÕ, ¥Rûø§gáÿÊ/¾0¸†ýoîÿôZÞVð“ÿÞÞ}?îßÏú-aOŸ½¾¿³ûRîÛlØûÀÓø†(†SEyÅfHC&Âñݨ8Mà“àùøíî]‹{Ë:/ãÛ'Þÿ!gÃ/ðþsàñо;— {EÞ>†½¼zýÎ"'†ÆØ­Œx6Od™Y$û8¶ßœ;?ÆÇÛw¿¹ûٯ뛟ãøëàω/øá'öòÈþÙ‰‡ùM½=&¾Ùj¿ù™êÑ 4ì@ƒÝ>E¢æË°x0öć‚ß_Ðâ¬ñ8³ÞѲW@û¼´¨Lª?Üf`ƒs5XŒQΡ‡ï÷ç_ç—¿àá–pXžïÇ–ð@ÏûÏpÿ³}‹þ»ü®=ü³ZÛ²¡Cªßz=¨ÀÄ›Šº¯£ã€Ï0üÝ?7”Ÿàó ÿÍí}Á=þÒÞßDz,»Ò[ûÇ9÷½ø‘Y]UM‹ªEpFm40€ „‘ r†‘Ž b,ýy‚ 9 #wä(££DgØÕdteEf¼wÏÙ{/çeS®ØeFf$2^ÜsÏÞk}ßèñ~ì/ßý³î _¼Â©ý ò+ŒGŒùôrxþ?°o$ÿÅLW*–²°DëQ„ßÍ%E¯Iüë»æºÿ¬³¢ôjà IDATÖ_ðÊë¸:Ÿ³À¬ŒŠ™™Å,Í” a¡JBH™Š^e\~M%È¥š4Â\ ¢¥q2by‚j.3'°+Ί4a!UÒÃ|l‚Rrí›×\EWA\µkë¾`H݆qïff¥ŠB&GedE•UJ1[Ä·ætDó2]ßHr%Gƒ“œ–a+…cÕ• nbåDÉ ² F·æªƒK±®råÔ¤z&$½ªŠ‰ zÂQœ¨•¥pº^£Á4µÌÙLÕiN1¼`UJ'ƒÅRM°.f&zm³C¡Fm©•×ý–\ÕL]Åþ ňJa™ÔâÀc!…¼0IRQªp1®¨UY%fq £"QZÿŸÔuÀ•¬ÊÊŠd™*Yš‚ò9²0)&„íô*!è• ›ë”yH±j6Ï2ƒ0é ÑJTèF³%jE 9—îÈ ô"T©Mq,ª!K¦ØÙ¬u9ÊŽLеJ³ÚqóòååYŽ?Ž~cc?ÎÞO¢@4ßj0ãl‚©Õß„ãøöåþǸ¶ofÿCAç½ïx<ðä…‡j‡¼¹qýxÆÓo›&n†·»á½ =Οĩwüè‡>A°Ô‡[Ümkóƒ_8¾¹Á/:ŽwÕ[²³z—j2ÿŸ ?ŽÀ¸(À¾‡¾~Ç@úãŸNßèãÍqyزíÿÛ|ÛËã]ƒôæÿæ!Þƒþøƒ·Ÿ£kò™äOó|ÃóžO…·¡£ËpÏ›íÒõôïD¦à=õ0tûx§ÈÃÛ%Þîxª|‡‰,”bâj”ùà j‡þÍ;{ mmž<ÁðæÑ§ÚÐ&ZA¤¿áíÃùæuÞükíGvu'‹Voˆ¿Ø~Ój»±÷·ûM/éÑ­4¶+e!|Oш$«µ—‚[GlµÛ hPl–ŽÉ „P6ÀÖ––^j¹l>`%­XªFSÀ.Ÿ¦¶\/鼿NSêŠÓë(—Ì-Ó*…‰J)J\Y¤(ʲXóJg^)Jêõq\)\˦ºÔŸÞÕy­Ú-Ð®Š®"T¯á”«÷G?›dMδêŸÈh+˜ÄeªÑJ­¥“Ϩ@…fVd0×LZÌtò¿UX½²Éš†ûºP’C*бA¢¹©9H“l aU®%—ÔTPŠ©¨šàZûû¡oÝÕ¥\ݱRŸQÌ£b¯ÚcæÎT¸þ QSª¦®”ÿR`FNÍ‚"™ W]·1¹„sGK°Ö‹ùl ¶ÁU•`øˆÌ(¡À¨êÇuË$"Ša3h™bˆ´ªE1œ«SA ÐT;–SG­>]¯ŽÕb–2¬„µˆ§&0,D­Ù º¸¯ÿrE]óIŸ%A¦’¤*D´èälËw\Ù²@©ùʧŠÔÄ|ýsºÖr5ÁáºRUë/›ä\Š¢Êê£YY¦TT ¢™%Ä$5a uG$j/ÙxIµS)V©ÌªnK‚)—¡ çMΣÕ+‰MÂE ú\þ#m—fô¡~/™QkYæ!}o?Ù_ýö×íò°?¿>ξ=ÉQoRo…q9·—Œª†²»‹}ñaÃ;à£~vŠÎÁ|Ž:e@„›Ý·[C¨MØCÇÿù•èø êgýøÞ¿zºí¨À”c;`Øk8aŽƒâ‚×Àñ‡þx´êmÔ@à=ÆÓœøîôϹ7´OìÕëâW }#Nã_áßÝþËÿqÃ_¼<þäßâFÿèáNúÖ³À÷Äã§?Œ·ãÏ Ç·ûùÿs»\Áh ëÑ›9‚ñó˜¸ðÜAÓ·÷øâ¦á%‚¸ Ô6Ì€^%"q3@@~óœâ;ð/åæG tB^=ìÇ^§5ÝBe\:‡}œzþ€í}î)zž”ˆð¼€…Ø,£.̆ܰéæ#u­‚}¦Ž=EgèœV)bbÓSPXøüõiWkµÕõ¯•_‡AV+’¥QˆªXÑ¡õÐD­F[.;J$E—¸ R¬VdUŠ¢(A0U¢‰9~—W\vµ•gÅ’ðòÓs=Þey°®Ç[, ®ÖëeUV „”’Á•NtM½2ª&¯á‰JÄd&³X¤TˆÐU³2J ˆ¡â*xQ»²ÁIB®,«šXr± Ӯթ䪫Q\Eý:°ý²ÎPb3¼J”£ß¡)ºB }%LyóßúCZÞ¶’9ž.{;˜?¼úç䔾þ¸ Ëñ‰3ëw~‡ÃŸáèø¬/ÝÃéÁз·± z«l‡vûÕWxóáüÄ´l·5Ûxê€ß"ÙoêåV>?^‘-JÂõñ©ôlÔmûÂÄ”ßRþ´ckCKOÙáV8Äç‚ñù›ýC‹ùöò/Å(Ÿ7½}kú¤ãØ¡ùÚ`7³úß" tû(ó—gO6ô¦ûçu{˜8¨ú,JŸ9 º‹5¶È—>MÓo.r8j‘2Ë(äÒ`ÒÔDW'Ál×C’Äv®%f&ÔËX,IU3ëR9³Õ‚Di@¸¶Šù”â»"¾?áN™µ–kKf!AaBdѪBQ]Ìî+)¼¾ž­ ÿÔsX_ƒLa­åÇêã®Aë§9ÓÚ¡ŠºV—ð Bžë¿JAÓdUH~”LƒšBD)€‰B•J½d+]iˆ”p$Ï…Ð]¤T—Ô%a, ædA˜^G·&Þ¯º¯©H)¨ª43ïT”2Ä¥-SóâÁš‰)Ä£¼(cŽçËåÜóE°Kµ0$Ñˬµjˆ VJKà¥Z¢(MÓ)’Ì%ºÀ§ùÌïv2aV¦j.Àïæýkþw}² lQ©ÀˆTL§n)BIÑZËÝePT®Ìö%Ò&PÊd‘"!( Á¹ÂI$Kójì‹ j%Aè ìÂ) wXI©ü]“OOŠ˜š¹7óUª\M]e…jÍQMTÔèB\ÍMš‰©ˆH±"l9?s…‘®$¥®¯ë#¹°Ã•kLBWê:ª‘°JeHŽÕ«ŽeÙ“åÖ‚OÉç&àFö[4/¥d³$DR2Ë¡–¦³1œ»YŠ‘cVßáÊ'ShNÑÿhújÍÃTÍížòýAqS0AÊ£TcvzO ±ûƒ …ÜL«B0ïe´öëþòýa¢â„†oþNžòþÏp¸eë…†ŒÃœÐn]öž/ ?G<' ðŒÖB7º]φ=1 :°ÕCÇÐãO/—_þ˜ÿëù„_½Þþsî kK±¬Œ¨Ÿa{hh_£ºb+ü¥ãpÄñˆÎ§Ñ±ÃZºº?Ì÷èý—ã…Ç'ÿ5ð5 ß=7ù‹[¯Ãè"ý’Dç—v¾µ¿¾=´úü>[W@9L§o§P@Q‚£àа pDԃ͇ó}yû=ú-ò®Ú¸r +Œ¯NÙÞN¾<Ï{vO9þÈöñ½ÎíÑo›À›¬›ÝýƒNd´‡z%æKäËž{è¡ÉjoAh˜ IS$J³¤„UȘ¢%¥ÊiîSšR“ˆ2#Wú™5"_2Ï™µU„±ßT!S ®bX Ô’¥‘¬+›»”&"ªëŽbËhRkeeº,b’rÕø|*?È5^þœÏÅI-¨ÚZ¬’Xƒž•„Ò5ëaIa±d!cY•5³f­¤×»©ƒB ÂEÄl…oÓ°ƒYŒ"IÍŠ¬eòZÕŽ$Gr$'Q…"¢®ÆèJTͲJ3Ul¦SDIË5ÅB„¤ƒÙš ¤©ØŠÙ2+CPc)U‹%3kΣeHN‰)(É„ÌCáJ5°XšIVÓj(@¦¤”šuoÛaëÝ ¬ÊQ#*’‘×[7,^ÝÚð”²FQ+âtòwQ¤ HÉ…ÀEj£ºðz ²*®ßš‚"Õ(¾¾;.4­e:×5Âa«Ó†P ©ë“XÚM«jV®¸º³)*¶Vé}ÈÁTQ‘U¬ŒÅ‚´@Ue½KÀ.j*æ**Já’X‘ x*DšÔ•“!²dŠEjE&2£rÌ£¼H+•D¿b_uŠ—X”æ"p0Ò#Õ>¦=±¾`õ.¬o8Lª<[ÌBãÌ9 Ór’:Óbgž§¨< ~õÇðS¶7êZêU]«Cø ž$'O4?1ßÒ‡Ô‡ög|´†³ŸQr)ùMòÉôT…¹cïxñ‡'}øÝõøõðŸDAÄ´¬ŒC›DéðšÄÉ.1h î®Cáw™ r‡¼×Û;ݺ ¥„ÅI]1T"f€Lu5åQÕUÚ‘UËSV”BDí‘—9÷JT-¦› ˆB‘ÈŒH¬j#@YþÈB¥æÚ,Ì5 ¢.&bË$JÁêH³Rª‹Qz…òÈu;}MÛ^å)”O]H=[V­¶þÎr-J@ *¥"M«}©ë »êºsLƒnÄÅTf—OÌfQd¡g••5«l­CT”W1+ QPp­ßY©“T¸XhÛ½ÔÑAjfiªe¨”™B˜ÌUüedÒ@‹rV+µ(Ó"¼bcÜê—˜¨ebï-^AÒðI†Ð°rRIsßw‡Û›ã¶¹*2s\ÆØ÷1ö3¨ªeZpY+—†ÄUåC¾0£Š“› S-áX/µ²€ÖX´;-æRÎkÔ,KÇãK‰ä’<K/QŠU.”ÑL›B•p¨%$(f$MDéhÆ×êf»ÞT÷Lµ©­±—^ië3h Ï.¸ò³–œLDJ®9@mQ•>-“¬èî‰Ìk~Ú±bÐë`Žˆ q©ú¸'småÊ{„×¹²&¨‚d•ê ASw‘Wl‡Š#±%UZ&KkŠ‹i¦ZôcÖ˜Qè Û!ヸJ¯l!*'Ê) «wûBÓˆ«¢ìe/‰x«h¥oáOÀ;³''BÕ§ 4Õs×ɨпGøã~sŠÄûÇÛÖþ›ÞÿDßÁ?ˆþÁ³ûR^<½ ŒÑúË<Ÿ¶žÑƒýO@A]P{Âz@#‘ó _|ôóÆFi£É<¶ÓçÏxåþeÓÖÿù¬½o×júkl 7Žê áb  O4‡¡Ï'{ÿÕÁZøç#uîOø{àt áÑq²Ÿ¡^Ÿ²ýWûÓç‹ÉÔÖJ¤›·îÈ'Ä;æþè¯Oí;€ °Zp¾1<ˆÒÚ­Så% ü8¤õÄÈš6NLp·ùކc=Z?µþ=UéoÆÝÉè! Ï–ïÛ|²á>ä¥áv‡ö!·éZyøkï±µ”Ãï¥76)C²’@I ÊF`‡]àC*´n4EbÊ.Y&H‚U•iR‘û̱3\d8DE±\n”D.5n±‘ôÜ> ,ËÒSá*âÔåQôŽ”Rä“x@¯%X¨ª &²šT%ë'ri ¹~ ÁkµK¯ú90©ü”£¿âuV}Ct9îp6,°ëbƒ“TIµò!¬‹H`s3U$9µR™ª£P³ ¥E•²€4†TĪO©¨®}úDQa®nÖa½Ô¢™¤–E’PSwqC76KjDŽÀDj„ L¦•7ö#}KjPƒVl¢±)­¨RžÞwmlê®MÑ ×\&I ‘0¥R`›µãáxssss»m›‹23WƒNª$©S4«ò¬$L ÅŠªd /Câ\šD…šÌ,‰¢°ô9ÓEb)S¬›*²*)«¿Jmæ"Ò€ÖTH·5í¶2®+\-ëÈÔZô.È’J#¯WRs[Ó(ÕöWD-RP SM5Õ¢íêº;\ã +”J]rS]¿”^‚—u_Y[®œ`±‚9*#r$Gñ…!à¦s9amm–+Y2\Rà ò¹è…Ú8»ì æU„î‰á•ª\ZÑlóÃÇ—y9„Êåhå¾qz øtžŠ°„ì¨ …w‰w?裆.þö?ݦLàSß ¼Éú™ìk˜òõKÌG©“ ÊÞ }x¾oå­æSû/ïîãßë]{¾ii­éè·ç‰6À8ë/ÓoÛ pü;è—ÈŽËÄ8# `S —BއÃñw‡¸‡ô ýIæÓ6±=#ú©Þî>~+øw¸û`Ã…8'JpÓÐ'rÃËcüxÚžžà7¼ž%O¼…6è‡7ú«‡ ÍðÖ^?áówáÏ#~¨‹Ø¥÷Wì±I“²’ÅÌmŽÇY'ܨpE9 HBWõ°àÁäÐŒ ò)§è ƒ­Ž“ùT¨À :ÐÚIh'ŠùKé_LÞ„fžu¾ÿ|üòPèç·È>w™CnŸÖk|Ýl‡í­mÇv¼kîÚ–i}MP`%ªl tЃ˜ÌÐ)¥ÐD]¥9%¤´D„Ð(¶fÿ&‰œ˜Q{VIí®R4Ôâ!À#WLj*§­\Q$kr¹ œl¦hTeŸ–´øD´„ˆHiº”Ñ×Û½Šª¸‹˜ÈI¸°¢ª‹% )³Õ= ¶t/ ˆ2Š,Õ5è:*V£ K")¶ŠÁ‰ßáu–Ö”b¶Â*ºŠ ’寯ȵ¯v5°$PÇŠ1m&"E®\ÝЛ´¦m}U¸ »°º€&ÞÔzÓ­‰9(ÜQ¬‘UV)Mo ‚.&A%hM÷€Oö±õqh‡®ÝÐEÚ².Ψu¤ &j‡v8Ž‡Ã¡u·¶PAUMÔ!vÍ Ê4Ó+t’ª*˜…” amÊL`‚Æòµu¦$%DH¤ŠX‰^w6¬O)²u”*uQU_æpÁ‰ÃMÜèJ”^[iÊëlKh€RW÷¥TTÍšÑ,Å„j%BQU½2.@.x©B ð¢ÒØ Ÿ`.X7¨Wôîú¿Š/ÏV#ëê¨W#UUefTìchÍÊ¡ëXÖžP¨-,¤¯» ª*##Š ¦å‹B´ŠÊ x]y@Žƒ*«.Ö¦‘Žjš£~û|U/V?lè¶}uâ @æcOµ£~‡ó žûéÇBÙ_Jÿò_Ê™Å<£žcô³ý)ò~^>¿ä™;jýTŠæ<ìòðâ]C>â¶ãð7`?àOŽ—;Ó2mÏð!ÛÔ›ÓKâoÛégį'†“DCŽ´‚:ÆxõÀ—¦?¾=ÿïOþo¿oÔv Çtè|õ`¿ú©@äëQ âÈþ×Ä[~м­­í9YeU£ÌGé”ËéÃ4l‚c@ÊЉ:gÄåq¢•v¡CqÁøÞ8Éÿô‘zÊÏ‘À¡ ¦ÐÂÕ7£Á¬7ŠÉ¡yOôb âUýãVÝ¡7­ÐëöÈ€JS÷Ò#´»mƒ7š)€,ÄUý5Ù½ ¥SQ’(Ci±$‘µ@=‹^µu±– t$1„È„HQ¢2ÈVeTIZr²ª˜ŠI¡eë ‘2Úµó¼, صop}¾\—ùÚ`MÌEkñ|ÍBÈÕ/ŽëÚC«Ô Š2Bò:®õêºØàŸ ¬O¾5ð•‰T¡i¥A,­Òa&âL½º‰°°Ó ª€  r±ž´‚„„ÚE€ ÛB*IMiÛ¨F]ÇŸšª® E­^¼›wSU)h&w2ƒ{«dn¦Væ ÕSP¢w»¨œ»—uíý¶ûm“[ÅpPŠ-KEæRÚ­É©7ïÍ›BAT0#çŒ1Çœ#ƒ•¢!W*:mÅw%@Qqê-T)íj÷%·¤£V8{äN°A›ˆ‚%×®±–¯©f•REÌÔÅL †JPIÚz_G¢”¢ -î€QuÕ,xÄœfPˆ0`8Ý“2¬+ Öô© EIŠ.>Œ¬rÛ5rÇk¢a%§Ö½SE\ETá_6k"æ¼ìûeŒÜgI¦OT9×  (–z][ Ö¬ˆœÉbÇ4£«š0*+_{ä¯C³×fM6´]² ÓÉ ã&"?xþÖÑxngWüD4 \üe~¨ý->>a{WŽCÃø{yüIé—rx­íà †ê§KþUùý¸Üñxè-?{´W's°!-¢_ØI¼Öæ/¡5º|Øê¨ç&ŸßéÜžp÷tÙàÀ¿ÚÑ w/or>ì­é×o "`÷|ûO?¶ãêæ^¡¯M6TÃGØsÊI(¨ƒàÆïw6,a…üê+Ä·ô€‚š=â;¾‡áx.]Þˆ¼…ë_üKÿúßY~wæ—Ï#NãiÓÛc}q„£3sÿ(öœ˜åOñ ¢€#µÃw4{Dðü(Oé§Ë|Û}0P1¦?NkÖâsÊ×x¹ƒÝ#;DtpìŠ@=¨üÔó(èVÖ«zÔ=¼Ob€ÿûBK*³wiÒ:¼£mj»›QUU-ifžfl†æ”Â2¯È«£HVÍCJ8t‰H”H“f"j¥–4P™ •æY9“™‘UÔ\ûAäâp§J¨îW€é"#™¬éšAIÊê`C×hMŠEUÔE¬‹5ZEH,Š*Ìu@ŒB©º¬îK:GYW®Ï¢¼®"’ ÎBd!KkX‘RqT­)‰/ÓðÂøE²&0„¹¾PYK—#%•hCtJ‘%K±]´¢l­P Üš­Ú„¨PD bŸ ¨e\î1#.UL©¤÷@æá@u îîÚÂ{3ßÜn MáŠH¥)PÈ„Úò™òZå{ÊŒ¬9sŒ}\Îóå1³t4 a2cb›´(aÁV[Âxuû±d+n*]hdHP«Bõc3°¤µláT(yõšJ¥Z­wfƒH9ƒ•š¡ŒW…š˜A̺ ëÁm©ªŠ;̘“(² ŠL]IYIP ®r6Krb²ÔUW½çU‚^‹¢´>×aJ%M¦‘3$ªÆ˜ûyŸû>¯º¶"¥RJáHc)e2‘3Î{~œŒéÌVÍ4&L™O2ÿVôcÉg‰‹PEÃQT©Æ^ueð(àŒ|`þ¤¢Ë”"Uˆ9+÷-j7mýc˜³5 g™±¹@¥©tÐ@¨–+VPM`ÄÀâ-UÌ9eG1D²8çÜGÅØk¿ðH³ŠÕX Ѥ]éÖ—€„¹„6ª!]Æp.0Ea• ¡YF¡~âR@˜×M„`U’§ˆI›W°v© $…!5kfæäê6ƒ¶Åd UyÕ~€+Pdj®êõÉÛ‘Q$Õ$J‰Búê»±²¬Ô]Í;¬+?ïzÉ\6P\©ˆ¨˜“•ÈXT˜Œç˜çQ—2;ŪP`DMfÌRßuõª‰#y>G½ìMWýœ6#e~Tþ­(€?(ÌY]ŠÈ]õ"@G IDATCïGªgCÜbšÞ6†ÔM홲%iš€áö†ö(rÒùàñð%ºf[>jòÀ(MÇÇþ[Ì㙎˱Î_<ßûß-±@è˜Oúr¼‹çó¯çóóÓåýƒý,â5_z=qt~¤L¹X\™¬Ûý‡ÇñÛöqöËûþÒýæ.¶Íw×и¿}î‡è‡›Î À9g~<Ïÿ€:0M Ð^`ïï™Ò~í ì·¸SôøcàÇ:½Ó·ø~ü‡oÖñZÿühš"ÏφÇvÆáš&È×sÿîrõ÷ÿž¾†~÷¸áþægA¨ÜÖŒç|<žÂ€ë¸qXA&dü‘\ŽÄOòUç¥ê«c}v+ýª óüˆý¯áG4…\ÀŽö=ôõ7©6ö·ryâñ]\`ãäxÛŽÃõ\:™Õk wQ$ÞLù¯§|.²¹*1 #¬BGàÖ¸YQB*'çȽéÑèô’óò1 ZUiQÙÆBÒ{a—Ü¥¥E¥ãú#ÕÚêŽÖb ªR¥#„X墾XVZ°&FmÒ\››YsÀñ»z3——kIâXyïâ]ÌEUÔTT¯•·*f‹ðº_-3YfÉO‰¦µÔà’¯¬¡,!W¶³*2‘Ù2´¦ õZd»zLÜMÕt.ærN©é• RÄT¡[Y“ô–MÕ:´"IFæ’4H;ë ’ÁÄdAK$›I_Ý<‚X„\(8  drDÍ´e+*›eY5CF~šÌ¾¥mœCØÔU²^ •)Ów5Mº”“3k0öš!Ó¢ÈȈ9ÆN‰¡cÇ,bËT2PII:E*A.Šd’™¤ ÅxP7¥JMÖ0 »&HÉÔ%‘Xò*¯dBÖϸ„ ÃŽLÕ±î •Zfåœ3#Å©‚4)±E@GE’•‚ÒE¸5q¥@ ¢˜¦%š‹Óµ¶M¤±²¸Ú˜¨™®VW•š´«Ï YA" ™œ‘cĘsäœÌ¬Èˆ¨¼”îôÁôªHa¦ÆŒœY—bKÙB1aêR`éûÄûRS¹YÅïbŒÌºÌ ¦Û¹~ÿ1øS)jÖ?4þXÒÔšNbŅ̃YľÅ\—k¼B8%þ‚Õ¬ú@oÊeµ™nMEˆóøÍûøúŸný§Ç¿;â]O´3´¡ò _dÄùoý|ùõÇo¢¡áß`~>šÛÀzn›]󴽇þˆúûÓ>ÞÎïÆÿ¼ù7C^ùøÑûÆ-ž_qÌ™­^!ûˆËóeþ‡KnXG, ;úËï}6|Àðó ß6üø Øž±'~¸ê ¯ñíÏ _5ÜøïþqÞ=ŸÀþïõ3࿟»eüÙËYþú?}‰oóÍ/¾{xÂAÑn<ܽTN=œê€thǶ¡ z¾‘ü£Âë¼½›Û]ˆ1(› _ª?"OÀ‰ü}[’ø=\PwðÃCɃUï—¡?¢J‘ÀèõdÀgòuS³87±‡H܉Þ›`º:­‡â¹ã´®ø ¹ëüˆi0aóÙì£V•)€Öòpn¤PæúA„µ¤¤qeª¸Bà,Ok0)ÍýÑlfw•O4$4h]šI“æÖTºK÷¾‚¼K}R,ÖºÝUB…(´©7ñ®ÖÕÌ>1òW`¤È AkA”Uo9áW'üJPËÕÜø»Ø É"GæLÌdDV…æ` á¤-‘‚¬¡†]°BA‚¬J‰ÀL­²¥Õž‰MÊz¹§8¥U) ©¥Ø¡Å,•Óbh²È°°¦µR¦bÌÕ›("Mj-"uÁ@“^Í Ô´Y>WøÊ ÚŽØdÄèMÕ¬]ä¦Zæ`_K–Êéóc%²jÆ\•¸=*JÙ*¼&4–ÛÐÖÄŸ(ÑÂCÊÊ̘5,s'LUÅ?@Ó`‹+§dMd$ ;% -­Ë@­‰%‘^µli–]¶Òš! ©x¥Hšºèµ¹bÑr¥¯—,Y¯- 0$‰€Ô"¯d®‹c@PVd‰®´=×7hm.p%öš™@¸®€•QYœÁ1bŽ9çœ9÷Q{Ö¢l›”hI8‹cÊLb/RPLŇç.1”eÇn-áD ÁäË(\`–Ç͇éAxǹ äRU½Týgå­” 9ÔfÓ_7=ƒ.I„¥¢„XÏ…KámU ÜWakã¼>ÝÍz%_xÒÝü5ðñ}ûðË»ÛÇ?¾;í¢Ÿ¡;*‘x˜ù°E=Çᛇ ~ù«ÿîm`|vüÁÛÇÙº~ð62[œZ@@|üOüù×­Úü.?'!íg÷§cCßnåæR ûx‰|ª€8ºÁ¤0 µƒöà7¿÷Ù€¯†o$¾) ðó×ø¶€w˜ø÷ˆ òäg/—ÛsÍï€/ÁÏQ÷¨#¦ä†âÛÏ€óÃ7öðÍûÿ{ñpÁÍÓ†'yA»cSt«™GàžÇÝf_×ë:h@}YŒ¯öd[ ®Ìa-´»$0ڬǗ:uÅl¼“øÿy¶½gt>cØ=­ƒ]µ UÅáó->@ªÞS!©@¦áņ¨´"»å”2†ÈC²#&¡¡sÊKðP»iQ-‘LŒÌsUlëy\T™”ƒ*šl1¹Wô;¨@+ôÒÖÔÜTš«{3íÂV%K„Pt©o„Y£$ó®mo Y $ŸLÔ¥"ÔF®ªñi„D~Š;añ©k‘¨¾–¡u•׌ÚgÈÌB…ä`]€¢D³TA¡t[ca¡JeÕ^5’2Ѧ+ÕE`Z]iq+k©­èEÍ´ H)š”¤IVR˜J*MV6J-Ñ„R+É,b“ð()™ýÊÄ5Ek””кTi(F@á=õVÂs`Ž&}m`âT…ØÚj Êd:Y‰ŠQÅʨI†èŠÒЇÄ^ µ»˜CLDV•I ³²„‚ªŒ)Iòƒp7½…lB[êPª2‘R%(©¹Šˆ)eÕ4¯æb +« VèŠÎа€†Vy,Íx•Tz¥€×.©EuÓUMÄ /pUI꺞fIC¶ÆDjk­x-ΩS—6Ú®Â=Ö•¢·nsÖZÖGì³æà>x)ÎüP«'8YQs§V8Bv*ºl¬l&*Ã’©q°,ÕñUNu¸ÌbJXëð@þ¿´½M¥Ëu¥·ÖÞñžs²>n%y)¶I -A$p– =3š¢ ÃÂðDsÿ2Ù£n ž …Æk ÏÁº„į¼U™ç¼±÷ò NÑF·'–d €º£ªºYY'"ö^ëyw–³ÑÜ#1_ßʼFáxíûïúh¬Ü™™!êL׎úÁ´?s7Öã,™OmË$žBɉì¶Ã ¢+¤Ýò™ª>²bÖž(G+'àh ÏÉÙ•@½†GnŽæðàÊJkà&¯æ¤1„T¼Á«ÙVj-ÕK13w/­XC›‚@[ßEG¾•”ArÁ$ÊfµILd CÊ›qÁmq””ƒ·®ÒºËŠ\C§€BZËj|é„#æ²âdŒŒÕǘÊ.õ\ŠÇ”1(@ÐXmíœWÙ¦ZlÛJ;²w6dÁÕ4Ä 4¡Häú+·›@ŽpÏÛC túZl„Í•(.À±ì Ó£¹4 W à!åH3¬+GôܯI©Q€•–[BíÈ¢,RIYJ±4Üd¹¤˜£9¦)•3"„)º``®õÄd5M£[]È”L™!„4À¯I¤|øzj,ÀH9ysòYÖ^ÞM2*-r&¦YÚ-<;3(ïV½ÊVKžkлŽ}d ¨\§¼É@X¬æä:Ö§|¦e"r•ÊXD™1Rr†èVÌ̬|b‚@\M9PLeIqý†hdŒÙLj9bŽ}h^•»bgvd`&gš‚9 Ïá>–ácÊ/bát7§2|Àm”ƒ ·ÏHz&ŵÌðlf± %PX¼Ð„Æ8¢²Î}þÞŸOxîd™åÝćù¬×]¿¾æoFžáe¯-šfcöv÷Áñþ‚þð+ÕbD25?Øñ3õÎF­zñ8óý$6`œË|w`gÃxÑц^œïŽp‡ô œ?î¸ÄÃ,gé­—wfö®ò±?¼/¿ý绯aÛ¿rü@żOgv~‡ú?Ÿ°¸v/@¿Äøñ?ÿlx Üx‡¯÷¨€ (ø¡áø¶ÿäX>ìî ÿ·_à¹Ú£}Dmhãlx—µgÅÎÎÇ<¿¾)ï¾_û1qWúÉ>¸Î8ßâÃýõCm/ßíå±÷vyW†øußÞÈ-‹?ûiŒòûÉ_`‘°ŸàÀß!æ ×Às<–z… Øãb£Á0…÷øpÏlå[ ÷Ü>臟£Ü±ªDÇÌà. kÇv8ÙÖè¥AžÓbVg¥¸ø¢kö’S#Øi1+Š93ÁðW²jшê¤+)»ÂwÃ…ídl̆,©J4.vâÆM²£yauÔê¥ÕRÝ«›{¡•jæH“É#A“%à‚ÀÀMµ¸€6u-¢W±Zã¤náK[H)-iÏ °¯Õ¨QB‘Ì5GZC)Öèú9€Y‰÷@Ÿ˜f6½€æXÊÏN¨N:•f(›èäVÚ©ŽVk1º&£"z$UK1—ÉX=í$ƒ GO™§ 38P Õéfp'Šd–ò,™+»~;Ò"F Â5³„L@ru dŸ²&sЬ5‡²E{X„@,§Íù‡ÔpfZ.±Ù̸";m³ŸJF(ÇA“‚݈iLóL¥…â.3l5³&ÓdB:¬‚…­“h1!f/²$Db¦f•æwgŽâ)ßQ7–™°%\‹œÒR.Mc˜äó“%ÐÖ÷t.jï-yB*’‹tn™„T"æjGÐ*«YåR¨.=á€K.8b™[Sš‘}ö>öÞ÷ÙGŒÌ‘9FŽ=ó*uå°\€¦ˆèÂu ÓD74Ójwä,tÃdébIO%Fh†Z^KHÚ€1K oq, 3¢xÒçP&­íÉ<•QN#+.ÕͳÎÎNNGyª=ðÔ ž·Ó;{îØaê>F¿° gá{ Ðm:X¼¼ç±Áz;ߎ¸/ªß²w L¯ú|dK᎟çá˜ßàãåüqb÷©{Ù©ÕçÜà¯0wPÿö(áÇÿüÌÓÃ7¯Îß>Áx%0P ð#ú3`@m8Mð>`~öÏ?î{ ¿ü4\úù#|¿àõþß¿ØÞ¼`«~bóݳ±}<<·ç÷má¦À¬cëŸ%.Öß ÜYõ><£Ã¸ÜÛ—÷4|Ô¸ìñ±~òýäׇš =‘Ú_³€ŽÒq2À+Úõ { µ‹s\Þ{¢~|hyΗ°ª­‹ÏC¢ÖhɆè8| =Uý¢ÔŸÊO0ejÆžþO*wµ%X^DºšÙé*쨚&ذ„²Ód¼kƒšá D Òœ†!›ôðjV›ûÉQ¡ ÕT‘»™¹Å¬•eC©lf¥¸ÕÂæ¨«2d7E—br5L†$)OYæR9,n0½õWžéÖɺ](×!´´_K6· I 㡘R¦2FÄuæ5r_Z³É ²ÓzñͼÁLZ÷÷pYáp¯tCn‘L”fíhÛ¡ÔZK•²ÌŒ´˜Š3¦bJ£i…1WQ„°L˜«é~CD.›[Yå¾)És1¬Àœ=æž2Ê,V«›1 ™¹kžT6šyI§ÑUHÐB>?`”¾ê e™‚pÓ &C&,#¨fˆ™ÀÆŒë>ú~Ý÷ëìý&ÔsΞêÔ(LÈEoŒ«Ì]*°’b[²DݼØHÏb§" †Ùqº‚láî¥df÷L*‹lýái*•çÉ}£MÏqRj¹ݽ#pîÄ¥á]ªï£ðq›°ŽZp²Ç .^FdÒ·þòt-Ö+„z‰ï]õê[…ýÚ…ÿøiw{>l—úîu{„½_ òeáái“Èð}èèÑŸA³p¿z6ÚLNV¢4ÆAf ’š7þŠ6óê,ÍU¶H if2ÅêE‘†â,ÕÝÝ*øûF@]{aùª 7ž_Ò*ºRŠÐœš}%È “9¡Ð x©OC#)oki)׸ãS›·ñ½˜Š™1bæ„bDÌP¿Ý ÒiQ¬ºU÷RìS ŸäõN+F/)åô@œ4ÂײCiXšÉL42ûBo„BCa™46º™ž±øBJÌ MøÚ³,þHñDÉŒ•¥1äÂ6áÅ›{:‹™D( ƒ’¼–â(&ÃZ«X·âîN@1ƈŒé9É`†qn>Û–15sÕÄ XäÇQcÎqí£ %ܲx `(=ÓÖ‡S†,Ì/š Q:V¼ 4"Í–šÔ°œ³ÂT²£Œ²itÐÌ´­ìæPÛcNpª þ)júé'Ü?)µ ÙÈÅ\É«'‡?”ØN‹{sßÐëZ>±Ê%–¦"×Aß#ÇŒ½÷ýºïûuöP€ÃbÌ9còæ†%0?Mïzh¦I”¦Y™‰ÁâaàDŒ¥]Ús\’sskVaŠÐNû  W©ÓÌ\Áž}‰EʺAš­T8£yÙRŠ]µDÍp»Ì¼œâqïxAl@Õ{Ãzž«ÕÁDÝÞÓàþ“¡_ÈߢýÙ.ÿÆlXÞ‡òà/"=ü2âÃOžòû_£û肈Y‘—‚·ÛÙžÿüôܼ”Üæ9àöõˆÃÀwqÏqï—–¥ká‚… Ç~TÜ ±V¢`VࡇÞÙpÞ}Ú0t`çU…{õKñ“ú—mÃæ§Êâ9¤R¢ô'àBÜOŽð%&€ã¹\€/ßb|ާ?Æqà çØ†Íófïø&Ì`‰Ã3¬}ï1ëφ9Ïý SˆÃ¼áP±bb7àøVõ϶ÃKSóœqy§|œß{oJ…„è@ax¾TlƒxTâ°=4V’™{¹>gv¾'pàv@q¸epú@~»fÓP¨H’fxp†•«LÉ?Z-„¹—õ,_Itp’V“…›ÁK6óU–Úa2€àL1!#c/Ö¿:Æâ¯bÕ‡H§Y,Vå²8®–k®XbôœÈ>© 30L“ˆ%ãYάÏâ5¹Y©W.åf¾½% H­[|Nhf„›n«_†ÂF7V[YK…,o~»e0LÅŒ9MŒÈ1VŸÚ#@>õì¸ÔÔ!æÈõ9¬Ê"«‹ïW|A0'"‡&sÐ |kéª9çM´Ê€¥SÕæ¢W23sb!A!ôiênp÷R‹£0Ô…¨&/ë—¥¹ˆŽxîã‰3 äf®R ‘5Œ¦¡Ð*‚µÎ^}ލûÀ4¿½~d’i^2œìä§y®fãò‡ßq\]‚ºr¤¯F6Üxú<˜·O/Кì`¬4 Ó"9g·®óâñJy«G¤0ÅLÎHS–%G0p¹¦|}즷]û*/nµX1sÝ,­ì'›ƒ™#æ>¢9ÇÜGßûå:ú>§‚ KÝÆu…q–s&bFGL„S¦Ôdl>M@Òh›iä,K¶#Õõn”¶ô¹KÀ l˜UDö>§Psz%a=“+HÈ0'ÖpR1®̾þZ§…ãCåC³óó _ /ٱ߶v?¢öx7âήm§åÁ¤Z3?Ó £YF ìs áªú5Û3ÛýÄeV+äùš޽áÕÓOß<o‡'îOíëó¼Çx ?aVм׭>7#òZãΑxÞðøoðmàÎq$pE®Ä3Q°ŸÿÙ3¥ÇO/†ñé¿oU¸ïàøÛ¿ÊíÑݺòš×žÝýÙÆùŸ0¿Á«/€†D~ ~.wØëÃl甜8î€ÖÒ~|hÏÓ¯ŸcF¯Ê‹soaïg8úÄþöÄvB3´3±·ïíþrâEÃF ]m<Ù¬GjA#ÜÅÓÞú/ ;‹ˆÀ‹~¾«ïOâéÊßîÛÏ©·Ô}è!än¶ƒ¿7žÈóÄ(XTî€xEÇt&.¬W•£ŸBØÜ›2m‚»3«gÕV^VV¤00f\æ­”+I 1 78‘ÈP®xJ.ؤŧD?Æ…I0gmg„æH5xáÍèó©Û¶”> ¸©ÿ§ÔS«}, 9¡ä-‹ž9—.Ó¤ÄrHÒ‹¹»Û¢_,Ö*jk®Ï‰EÔ JŠ™9çˆèRÑ0e.¿ ¶V·]/h@€HæŽð ›tg—æVÜJ:ÌÇäžÖufe4›r˜“K~çNÚ´„UkÖ¬x‹êëã•P€bpN/Å+[õRœT2Âfæäb™ÉsÚ¼’O„ŠÅ¶Âš°"š¡8VÌbÊ"dÁœ¹; ™¶¸·éJMm3%=ƒëöíðv3gb Ci¦Ío;Á2ìFStCeV®®²L·Jx¹¥”8…‰ì˜¼ÅQKÆŒin&˜â.ôD$JBw±ÊHº„e­áM°t«3ºªÌä§]óºÄঈΌÈ9£÷دš#ûˆ>³Ï¡å­JZ³\Ú«rŽ˜1cnƒBdîUásĸK«Q˜F jdœ™¹‘THéи‚ÓÌÐæG-ÃDª¸»»rй#ÏSfÏžÒ®¸Þîð 6óíÐ{ìh€ô6ë=TÃßm|¤ÞcG \Ã}‹ûÒNÁ‘cÂM¾µÃ!¸]«íTfŸ×¡ žŸâÝ‹Ù=qÈÎ6žŽgk†a¸7«½švìŠÁ××À×Â9€x~µŽgÍwÛ¥—,½ÄèíÌĺÞùÃ)q˜ç&h Ôe>Ã…Úûÿp6¼ÿ4\:ÿU¸'àîO¿ÄPÛççÑÑCZ>~Ü‘ÿˆúOP_£¼ùö¯ß¶Ó=XM︼÷_£l8ž°~ŽönÀfgcsq8óˆFô‰=áÀÇ‚}¢~Äñ HˆF80õ 9¯jÄ6Pš…û1wð´ý þ«fï]Qùv³û^kñ1òíìï{ _±×Ç—ª*s¼°<Ì¿8Æ·ŽùÒÇÆtŒÀnpG=φWCk’Q(6åŽS„e9Xe+8˜ ˜WèBæÅlsoNw——°BÒ˜fv#ž*™‚`I+dÌHi9'Ó–i™É&–ƒ ‚0«æÅé4,©DÞ`HkvÅOÕ7H+©*bEoÍg¬mqërFNqrM¤àæðjVæ¾N:"nŸ\Êê4*×\fU%rFLå—Yh*&2‹p(ÅÍ A‰A4‘„IÊA+æÕ}M‘b–ÉX(†D¦¥ÙB‡”šUÊ«J( Jñâ%È0­Ö\Ü¡JUgu«Å·Vk©æbbƒh4f®­>—eP©¢¬ŽbQ`„c=UnUBKBa‘Vmd^‰Rpp‘i& a ËSÚ›,eiŠfÎP­ÂiÍÞiZà]Òè¶þ®©&s"8Ãf¸Òhòâ&bFŒA-ÓÊw±§ÖEÞ¥B–¼!T©ë÷2€X0©¥ƒÈ)…˜Ò­§­D̘}fŸ9"Ç̵ÖRNOs˜;`reŸ³*£Oe8ƒž™b‡®®K˃†<«çY‰Ø’ë_ÒbE¿É£uñ¯2Ž¢½ŠÐ¡y)îäŒ)Gt-„æWÏð¯lüº¢°¿”9±÷&¨ š÷{ÜËÚD/Ä@b'8žçëj¯5›yìÎ9†qº›µpšÍ˜CøªŸñ1Ÿð¢ÔË6.xôgáÀæ‡Z·‚öEêGcs%{C§7ø°áÎp]èççG6Ø¡ned{Œ#†þöh?Øtª´6„ IDAT’óœï·Q ‚õûfXÿËwÇíõØHþäãá4ÏíŠí÷öžý ÔïYpm(@{ |~ÿêÅ}+­Eo;òŒ…ì‚N ÀVO^²=Ú:b`îˆg\ p!h Ÿ¿€9*a‚MŒ}Ìéãd ÝEV·»ãþ¢×z@–à~oåþΚj¯<"®Ø;.þþî‚R~ênàý ý¸õÃÁ[iÍ2-Ö7„S q—,Ëa²tj bò˜æ #è¥oETO&sŒ¿cÛ÷Ð6Øô´’îlžåvÉ^Ú.BB¡‡Œ±`=RšÄ,æå–2]•´%ãL&‹XÌ*¼Â+‹™¯©²Ù ®€µjà·WǪéšA`¤(4¥ÌŒ äLL1e`ØkÈŒF/æfN#U¥DHH™™ÅÒ ½PHóiž† « ”¡$Ãh„\·8C*&bܾ—sRp[zlgºe1¬Ð¼‘%X¨&éIµÞd+µfôj®Äˆ®V–ÌRM²å¯àÊ㻕Zj«ëCÄ5]1ÉXÊÒ#"æˆX–â:Ã! Z.u@%¥Â Å*= ;²€ˆ£ž.é¶Hði2¥S/T¶´"P=fO‚¬fr¥H‹ô³Òë ±HÌGž\½M!h(íäLyM”œcý?0G yìôçE`—@%o6x‹.ùª¸¯¯ûÂTI™˜©¼õ ‘ZÒ¹ŒŒsŸ³‡fLäDcÚ„¥Ã Yµ>þ~Ι5²¥<#„¼ôœ•ò‰¥<”B»ÈB˜köŠdÌ0‘5³ ó[“éØŠÕ47§§qZRAÐêS¶¤¾‰ý7cÿ‚öšÓ÷VÉ*{˜<3æ¥îÇvU+ÌZ®x>ÛvþœÞÝ7++H1ðëäç,•Y‚òªÎì˜}´ç~NzoÂðß·޹c×qöË;Î'üåвüöéôó|Æ7_<üM9ÿø»^ðÙ‡÷Û3Ÿ=àtDZÞò>p'ÈCò©jÑÀ3¾™àÓ¿¼ûö_–¾o*®j¿ø†¸4Üû¹äÛ÷öTó‹wøþc|ñ>?Çu¢×‰íðpw¨ukGoÈ^÷|¸|<‡OÄ3ÐÞïx;·ïÕ6m»w«|£cß à‹À©<èt¾¼ªÈx;û}²N¼ë3Ÿ¯%%6ŽbÔKÊšX÷|°y®Ïø¦ÖÍ·ìH¶(?ÛâWñüþ°áXЦy»ÏlQåØÚÇRÝ\évãc×Èx®£Yƒ­È»AÉoŽbYÙ6rV>Œ;’ŒiT>!ÿ^åßêâ¦ZÁ4'ÍÌšcs[U·˜Jqˆ1‰BûŸR*9#FδYá%ié,éRu8P“+ôf¥™W–ʲn“ôel»)‚ ?w;nºšü4IvP´Àš¬}DDÆŒ¥‡\l˜rå ±r+«L»F ™Éå ˜•e¸&K¡—…ܰ)›æ è–.X#$fæ2ïô{Žë{LeC…À&¨†ô•®!iD% ÓÍÏä¼é’fîÅ Á`Òh‚%Ì–¸Òàž°å÷ÎUWfIs¹[m¥V#JÎ>'3˜šŒ‰ÞÕ{Ƥb†l!L"Úr*¥#SSsÆž³÷ŒÍAƒÂØu‰¤ÍA#.ÈCªÊÚÚ9‡2rŽØ!†ìùl_c^q|ñÀáŠà„…â’è{½×J®ßÌ®-ž/èY9ó\&*ÎÅÁ NpÇxÚ1û‡G›€W½óøHÃÓñm÷û¯Xw%ÿÝxÿjàÀ .óŒ‰Ü‰vyxÙ^Öl9Û5ð”câåÝö€q¶uØ>~ý¯}6øê às¼ž(M§<7CŒ{î÷ûÖòGý©b|Ž#`_"+^J;ïèÕÀìý0âtÎ×øúkÌ [âZÀv¿éxðæ¥/U¸_€xu@ÇÛ|¸?Õz,?;m¿jþºŸå~Ö6¢—~1Ÿ[<Ñleëb»Z¿èî’g¿Bý̧wdçË£Ñ]ÇÂ^üŸ¡qˆgÅhYšÂfnµvÁ(ÆÉD # v äÓ¼@&VKCM–HõȧáaAW°±¿"wÁà°f^Š#25ƒ›fjB‘º&'‘´A:`°¼0TDÄì>¯‰fQC5é2O+d‘ ­ºWóUƒ(‹‡sûÀ^Ÿà·DŠ­§ÃÍø$=I¶”Ðk>@.xv&#rf å§mÅ71éÁRèCeèDÁ±MËŒÀÊ[ZA.Ù0èãªHe(– ŒË~–˜#ú{ŒKöKFf4à`,ÎFni(”)”Œu¥½1>I—½SZ–Ü$YÚB‚fšp˜‰N/„­xˆÓJzA)VkiÍÈŒ"ôìcÆÈù©É;úÌ‘N£P• r‚,Ia"lîš—¸rFÈK1å¶LÉ•ç1;4U¡’i¡[PÀä–SŒ\è®ã·EæTÉD`ú’+‘RIåX³F—/¦7a"“á33“P.,…ÀB¸è¦†AÄ”I<Äí%”&ÙÒH­»2ƒ”n:òÕ–„RSsÆH%^4¬oZfN,ù:± R=4ÂlÊèe…è´‚#Ø”#¦,yLrÊ;rph ïŽQ|„ß½ÍÊ™¶@ò7·ìA›@“#Œ¢ÀTîô´e¼¼Žøø¿ÆóÛl÷c¯|=t|—ĨH>úv¬ö!b<öG&.÷¯q,çþ¯;íýYׯGüÂ껫×Ì‘æÕ.r ¶­?Æø#?7ƒ[ÀûC ÎzÂå+ÔßwÀ|¿ÛÞ€Çólè‰æ÷¿Åýߎ†½x¸3Ü¿vć…zA^òÜò;Ÿ%j 5úÀ‡ Ϫ`â²á«Äïÿ?œ ø›¯ñïñÖ?ÞßÔƒ½‹LeÕS˽}õ(u›õù|wÆéû(_ÀK³¦FÆcŒ—à†ßL<]Ê¥þÑ¡µÞ¡¬%Îl8ÞÁ*¢ß¿8}×üh-7?šFÖÁãX&ŽºøÓ¥ùl>Ú‘•RûNâî2˼þÕóüò´ÿo¹¥†<)5]Ký‰o¿ 1â¹@°Ê£rÏÙÔ™u!ÅHìæÍŒÓšÊ|‚76ªEÅ4+ŸéžšlŠkh­u`ûA!ÜJ•UYM+¹à©Ÿ`E¹Ä‰pY]аÃC‚ŒZç91ž"¨¬M¸3¶åÕ¡ह9hn·ëRm7ÝÂÍèÁ[™a1Ïn¨ݬm"ažKùzË×#9C‘‚ä¹Ö4¬¥³ ~Ûââæ»íµtÙ‘M/…ÎÕœ WÝJÔL%‚I­ÁÑÄqs.¸Ðà³¶e«¦™9çÌ ,×!J uû1•9Ò 1D¡NªBõæÆ£§ ÅYÝ­¾^OVXªy¥—…[¹MEFŸsŒ¾÷Ë—˜C·]އf²(-—}hdŽ93,.y[©~ªÕÁ(Œ’f–]Rô¾¸{Èžc5Ír“¬÷btȪ(3HÕYL´õ—ƒ3™!I)RÅÜŒeIÿàF[^“ ÊD%3É,Ë÷'%E `‘ j‹ i[À’[V€IÊÔŠB"”K¾ʆ´Ú‹L =•IƒO£Ù"_E¤2£+®]1¬L_ ïbVŒ­ÕŽdS(‚]¡šò.ûzõL*•¶»êiS¡LþLMbq¼m9nÖoP¨I̲”Gaåx*f›ÏþnÿúQ§ÿ8ô ÃYÀsâ)ÑËÛÃá¾n“¸kãñïÿ7Ã_àÛ ¯Žõ‘†1?ðih>®×öXOwÓÓz4Ê®‘ÆVÿ‘`C¶·ûøÁëqB‚þ'©Èö~ܽ帇ÕQím±÷/ÊCú9Û[´Çß¶z¯‡VÏÓñìxNà‚JœN¨G$ï`W쨗gÇãÇ‚¯Ž¨¾éøâþÿMãö/9n¬=àÏ~ áþîû÷w¥yíªc¶þÊð»Òÿæ4þ;QqzÀá70€/Áß¼Ï/‘Ÿ=tžŸ„§‰þ‡7ìuœã]”¾ ù¨ñaàÕùnâîÛ(ÃCzåÈãɶ¥yº„ {µ4–Zú‡¶ÿ5¿y(ß:û„¿Fê)ùªõöaœr¶¤Þ+1ÇÏÜzgó€^êtÊí¯¤ˆ>gì×áÇÖP‡¶uUYaÌ#X…"(•Ó.j×ÚŽ¥šÁ-á4~PÉõ¤ vtGmÞŒ5éi–"–Nù‡`\ ²¦LŽPv1•ËcÈ9©g…!ŽJ?©Àž)dH#ÍÄT)])ƒWeC:ÃÓŽb)"#b Û>µ@&TŠ&A¶‚”N«…Lˆ)Ó’˜ÊY‚u¹Êr²ŠdYp’Ûñ½·}ô}¿>??õëSß¿û—™‰¬!Ãm£¬î°d('$Í>ûÈ9Ö=ÛWçÀVE@&' ¨\8'ÎiSBFYY´¥ÕY9Ò7ye-yó7Ãà`Ê¢`1Ó´RÊ\pÐŒ·½ÊŠT%NÀ$¦À\Ùž¨áF×Z#I£à[)Kœ$cÒ”ÔbÁ¯ëóæ:Œ\dÙõ¸ä®”éHŒŒIÒd˜„#£$#'"0ƒZ‰ ,­Ì(VÍRVw=»LŽÊV¢•aʬêMjÈHÃW–¯¼KÊÉ͕ŽX pB*m*w×sfÅ0H3ßJ³r2~Ͻ" ×À⛉߶û?Ù¾û¢½,°V^ø?ýÇøu¼¯èï1¡ñ0ìÛ¶ßk–ûË©ã—m{‘—V¯üt®Ýq1€÷›ÝÛ~‡‚°C´§Ë¸Gå½áž×–O=;¼Àp–½;°[ÇgìÛ6ŽvÞ*†ƒ !xÃa¢8 Áò>3´#žÏixz…Gâ«þnÿþ_÷lø ø7ÀH<$jAÃlµ¥&ö—‡GÇËo—éÿ;ð?üo¡ ñ xÆõŸÎǯ_¢¿ÄëWÈ’8ìˆ'l‡G–»=|äøöôæ½ Pp–ý /3˜ n–1c¾˜40Ñ ¬Á>ž×Hü$gE?F4›žã4¶Ÿ°ü‚‚ï¿Ò~Ÿ¬s{™jÅÍœÏÝ­LX•¡§6‘8`³¬.¦!ªä)uDƒ—ƒ¿2“I@š–<Í’s©.¸iÒ=Ks-¼/•æPÉ´î ŠžhHWz¦’EÚŒU㵸%ЉDÒHb"fÎ}! +\söõ™¿†FkUø)K¸ày¢ëã_ ʺ6Zn7@0Ò–•Þ NÑr A×XÉ@sÚm)én7娭_,–6Î>=/n›vÞÄn‚ E„è‚+3TW.{qš`,,Q ¢t_J?"LÃóIV‹W³ÍÜÝn“!ÈÖBZ_µR‹Ñ ëªÖYª¬Àn)ª…ͭЩZŠ{˜‘¡¡ÈÑ÷ç§>|üðüáãØ¿šããT*µ™š™"Q>‰tÒœŠ sUÂñ©É†PN¦ ƒ9JªR#Õcñè‚ ƒ‰,ðË)K•a2&†Qt[%­ÇÜ—[{Âe&wºûâ;ÝÎx ¬»}"Ã53,ëÞ [Û‰t÷âÅk-kHi7ÿóÊóææA ™ëé;¤.u ‰”Q+ÙšT35#9ZÒc2ÜÃÖåEY=Á§{’ädIä™ gˆ>}„NR%Ýa%LS)h^\¥„ל^J­^É ˜ ˆ–¡ Í©=té>7C1wè¦ÿÈ×Ü~NòÝ!G?íỨ==ïŽ^Ž:¼ªœùô{˜8DíÐxý¾äçvw cC÷«ÊÑðeâ4ë@<¼ŒóKƒÊC¯/{k{màEWÙíÁ*^ËhQÚìÐ¥JywK⿱êm<Ò`ŽêC»ƒ?øˆt CÌ~žÐÏè?Â7oðŸPð—ÀŸ¾£½³a9àÀ ÎïðEŸã8»ÏÁÓWE÷ž¸ø¡°{_¡œ Å>œ¿ùˆßŒ‡¯^œ_mè@Âwä{ù;óa¼ÓF¿÷¶Š÷€!õ«,Ǭ¬—Ù‹®óº!ŠÇÈ¢ò³:gyýN§Ç´¯˜Adëy—9Z8¾*@Ýç÷A<ÏŸ<ðtø£cowj§®µí95;›Âž‚fݼwKmcW÷ÈôÑTësRa18…iV“[Ò¹PEÅĸݸ„9S™ä„”Qvm‹Ú¦E¯I2MhD‘DëKÆû±ö>¯–gÙ•ßZ{Ÿs¾÷¾÷"#òUe–Ô•ê¶ ƒÝ41ˆ¦nE -ÿ…Ý##4и ÌÅ š´]`)Ë’ªJ/3òý¸÷{ÎÙ{ypn”Ôà‰‘r’If¼Èï9gïµ>–J#ÔkRDŒZÉêEÅ<ùµéÏ1U%ÿQ…m!•qX_Í=Âg?Ð"á­$˜q0Ú2n_ûØ0‚&sÖÂ%Ÿ[ËóëŸ4BWÙ´¢R Nt-Ö]KJUYS]Ù3g 3i`µB¯ÅËòœÉ5ÃÈ+Ì<˜é«B[šùfVõ3)*% K9!Ái¤ÛZE0d(p+ŽZTœ."™ŠD,^Ä\½°ÑÏçóóó?¼~úûþt™ó%™Q ¹9,Ó%¯L<-F2Á„îÔ†õ¬aù=Ôš6GVq07¦­¿Š8çȜ̲ôÌÕKc)ôºÚüFSØ¡A,®aº:aIa³dÂååztä ”®|ÁL˜Ýb×*ʧ n4…3 24º•R¯ÚéKª„Ñ ÈuëÈÄ\¿XF¾AíÌðõB–©2 !ådL)'’),epJÒM“ùˆàâ S cZ8ËRsä¥ò#ŠPd6ÜöB#KXZ(S³\*‘Èáð¢YÌècæˆÈ½Ï=컡t®Õ¼Á„zö¡ —z4¶¢îB!¬œ¾?žÃÜè²;¸c›ø¦7ÏñõåòXÆG¼Þƒ?‘Ýùí!éœá¥Ä#•Ïyw»]£:>Øå1n>Ö7__쳦ãÑzñ§VNØ`ö¥Ï‰‘}ÿ~\~|j†¿0ÜÚCúis >˜N`Å$ËIŸ0áéó—Ø?T|_ð» iø&ð£·ßýóœ Àé/ßÁµ1å@àqê§:ŽÃÞ>Öv¯r_g»yª¶ã׉_s{øÒO¯åýÝvoQküûø’ÝÚ‡V½~$P6Qêi­4$ÚVk>8N*ƒÊÇQDk©]—>^/öƒôÒË-²ô4vÌh`wÀð'Ä¿6µm¶È.{.85Cm°Wôïàø³ýëy~}T}SÊkàÛY^8Gä8\¨,ÆBµŒnñƒùÏð ü‚îO–·²³º1E5¢”5p‘‡×a {Mâ»Á‘cEFi“MÆtb¹\y•î3ìsU²’Uæ´ëÇ:2 W³Y2-Â#«P¸P žeÑGC P ä@3"bïûëëëùùešyé F©±Ö- e.t"e3˜°]™.:мÁ€È+i™ $‚DjýÊ€dRÊÔÌœ„MgÐä\ó:£¹C«æ25—v‰npÁ ¯.“*åëÀ‡EÊ"#{F\„31@Q±º H–  7nQÜ™iI.àµû!)23s§3MóÊ^ H–RÎä›BÌ’Q³Ï9)fäN®X ±=ä@VÝg Ãç‹+]i„G…*YX©²èJ¯–—\»¹Tš) fQCѰÐÌ [‰sÆ®—{Z¼q ÝÍÒºÕ»O»©î³ ¬–(çZô ýÔù åñˆrSZcº’é5nmT¾Ç|(½£Ýº™AœV4³`´vþ1žúèä½E3õœÈ ÎÇC¹-¸x஼ e{p;ÉGbª¾ÆxýÉãÍü€»‚Û “ø~òþ2kìÊáQó£ÃnàÞÑ¿ÃÅð²ãü]QÞác~gàG_ü ÇÿçŸz6ü#+ÿoGÀñ±ýçöõ‰x Õ´V¬ÝY©—§ÿöÓ±šF}ýW´Ýî¶ÝdSÖBÜ}1¬öfx³Ôt/8ü ø5ä§l½QÝç@9 "´JŠnûM^ºÿ½ðËG¿KÍVvµà1j+Ux0üç’÷a?r¾VýÂ*,á×ïÞ'àËÇ¿Æï Ûf£¸ [L÷ãÈ›QfÇVZA±a9”/Ï¡®bÝñÂxñ|ƒ‘åeÒ3–„-É ÌmVg±YN)mp˜Í€Τ¡¸6´”E1“ªñ ÇWBéƒ $á$Š9mQ¹?×Ö†$‚ÈuA³ëc_ú‡+ý•‡ƒ%Ÿ7[ú5o`@‚W‡#á”q1,¯<§HÑPÖôêPÂZ‰¯ËÞ%p GØjÚ­÷ü¢:ñ:pºjxrº¹g.æ8±p9뼺’B¯³pYÁçJ°¯¹Öº•_ÿ=´úXRîFw™X"\p°h-ˆL´+÷VH)böИ41S™{Ÿ}̉´˜ƒ1ç5^“ÊÛœiÁ4›T7ë¦Dl+%=g‚>A 3IÍÌ@˜Òè†ab¦CèÊ.ç"ˆ ¤)¡É¬+Ãû,Šf(‹Ó‹Ñ‰º`´­f‰4]÷±ØèsÄŒ±‡^ /²õc Ð 9ÆÜs…’e¥L c¸¬˜ƒ%m!À´•›‘‘ŲP…t¯©ʈ¡à Ìfç ‹ sZjK_4Úäv™A#¤a#ŒÌhÕfæ9Î9.Ù?eðB5cdXÈvaF4“Q¹ÜéÇ%j ô‘é£x¶ŒäÀeÚÈ2*¼¢ˆê0Å¥`\|¤9ºÎ>J?‘¨‡ÏKÚ:KªBÕvÞôv|=¶²ÿ«€™wWÏᆗmOÕ/1«6–7­ œuøÃ?¶@›区•í‹{5ýÃÈÇè²_žì„7¼­¸5´Èy?çý9ÚˆnO(¸&Ÿ7Ô€‡×_áõ[|ú}ä—øË‚?h¸'Ú„îоý§ž ÿˆÆ üðPûG |‹Ë7§sâ’§ÈLÔô[ðÐß´h¯¿Úfk·Sùšuw×±šaákpU\|?ù¸€ôÎGw+lÈ÷’\ÿûç£"šzÕSÓ^ë›oþÄnÿíÏ‚^ÌAlê¦Áy’#ì½tÄeN¿7Ÿø8 TÐqþø/ß¼ßp¬¤·[”˜õeÚÞo¶yh|Ã'Ë>X|I;gËÐ1y¼xÛÛV¬J¾³yP±°³jƒŒŒ"cb§Íé[±°¤%³ðt“M™WçfÖÈb|5í°DòµL1 QP–)›„¨Xþ¥É1ƒ¥ÁŸÁdŽ@tMÅ5ɽ,=€AfK†ÏQ»npÍ1]ÿ¸’Y¸ÙÉ%þJJ4-š&Á¤²Sb®ùþZx®GÄ5뚘„#¯ßà™ë!‘×i§8R¡¤É˜–Âòjš­Ïa&d™JO0¬i,²kTVL!V*tù®ƒ+dfts3À(˜Vp^àõhŠÌ ™Ê˜sŒ±Ù虈9!¸¥*M3#³Dtaª®<ŽÌa®WçSSߦ9 ¦Ùçkdzf*{€b‹œ;”3XˆS­Sjíœëò6hIÇ5Ó5)ä>b¿D*QS„W.€¬0ωBsH’]6Fô‰4/ÀNOØaa®Wå1%up‚Írø yÀ²–ëkc•–Dz¦e”\["UªÐ)”ÌsΜ#lOY D7}/¬¹o6}å}Cuq†Ï¡1 6£†jÉ1/ýòÃ8?—iÁdm¤É")X¤í°Ò rlR ר:’{±l¥LÄœýœ­æ­Å¢º·YWÆ: 2Ò Ÿð—DóîÆÌË%^/zyÚþê17ðrÂÞ|äœ)Ì€ðõÅï÷ííSÇÁØcî>^´ë¼ÕÉý¥¼8χü‡ÀÄdC:4J9ˆ‰|=ùZû°Ù}±ÖÕ‡€3Æ÷§Ã/ѿư’0n@þ¡FE´ÜÛ'•ãxòí㔉»ôŠðo€ŠcÁ¿kÍOMh‰¾C¯èŸpù§í¢ÿ ëÃÃö³Óü-ø-À¿þ?ð|Á¿Àã»vàÖdøê‹íö¥Þy~ÙX»uÐÅ¿=ãPËO±å@vÌ1ÇéòŠÒ{¨‰ÝùÀršŽKG$2àÂ'Æ¿WÖ¸˜ª­4»-vø V‡}èÆ¨ç^ÍJÄctÔ Æ{Ä:“‡žÃa4ÄOÏ86lÛOÛáXËÁ<¦_z=ïM¶ØŠ ½¸!Ît&|êÝ” ðÅ›j;¸½5{G¶4Dó´W+gH̉ TB´% ¥ä•N/^¢š¹5Ïj(ôÊŒ±Óõ™iVa ˜Ç± IDATSðA%¸Óvƒœ2é«å¶ô+€ÌYŒN9„9SœÐJv[«iù›&Àâ)áênÄ5,éÚiƒ4cšea¦CÕAK+¿vŠHb.ÙÄŠÅÒDØÂø¯‡1‘ë¿À†Ö\e*¯€‡ÔW΂ø¢7­êõ°(Lf*r OÅ™ndÐbZ²:‚\ )½ âZ^¯ìŽ–ß&™(ÉÅò[ƒ– EdŒ³Ü“;¬:EaXÉØö°3ÇÎDf´ž…©4ehLMÄŒœäÎÒdž^Órmÿ)æ`Œ”+âfŸ‡M¾'bý’B›F5Ò’nlœYZñØÄœÚgÌ3Sü m墭¤ hjî !l‘mÂF¤ïIA_uìD.½3fd1ÖL¦ðùnpå1®™W€s…Y]W°S‘ùbJÆ£c'€œ‰§Ãé0#tÛbd'gb$&F+ùbª˜Vû¨ÏÂ+ÂÓŠ¥OÖ‰¥¬¦©œŒ‘Ñf¶)ŠÇª9 ÊîéHs¤oƒÕXF´ }dPrõ9Æ‹—_:¦Ð‚þ’ö8ü—ÇË©ÜÁgdyž÷7ªÛÒã,SǶG€¯j¡'ÏbÏVJJûëíåìwù8v´•Çn¼îcÜùc!ÌÀ„^°ÿÕÃok-h^½¾ö‡Ãÿqê?‡þ-p@$&Þ÷jo²Þž£îæ=Yof–FÞqýÙ~‹øÉWï9ï{­ÔÅcï»0ž‘wÐ?ílø/h¬ï0îqºy ¿oxÈít9ã‡Ox¾¸_Ü=•ÃÛ]•în¦Å^;Ù3vzUïM;¶½Ž×x´Ä8àP°àĸPxŠ@ì¸ƆÞÇq‰Øô{‡ß`Ûîu¸ïhR÷|tDÀ<†_&bi>‘;ò 4é0dÌaÙ#Ä´ÌR`™§™D³ôë ÕXh ò\k¡ÜSCاÆÂÜ´À„`¦å´œ+œQrë2ÖÓp ç“6`ãr™Ó̥닕WóžÕéîŽv]*³˜‰IN¿¢ ™e¹n¬30"G2rA^š{&ÑÀÚÖx*Ã1g¤&õФ/ör_› Œ¬²Ä-Â8}¤_j± Q®DÆY=5,£LÝwÕ¬¼èÙaÎC:æ6 `ØiÖ¤zyƒ:4 {ç´rîíÑò”7ÀWȉ{Ùqoÿ„Üò]ýåÜôÒç¹ô2{åqòÐú!/1™ý˜(þñPáx¸+§•æ0!8²Ÿðç,º¸íeŽýò”?Gþ ¯\~À 0âwlûšw‡Yùª{³£E“ß7Ï(ψü„ñ ð-øé¾á¾>·|×E ¡¸Cößÿ§Î”®4ÖßÅØðؾÝÂêûÞîuŒ¿º}üø«¿ûç8~s:üËõ˰“˜O»?MŽËx,/Û|àŽÒOê*§žèwÀØ0…jX"W°‰ìÚO¾a?àRÑ…K<ÀËv)_f)‡r(ÇÖl¢ÍÑZàÕΟmãûqÖœ8ZÙ=ÍêÚ1PÃöpÂnP?E9ŽÎJLsê–ìÕ/ÎgƒL°9 3lÖªWa3"Ó^<¼:áYW©27¡#ãœanN;ŒÌu³k?™Z\1d¨ÎNV±‚ºÍŠf^ ؉N0­v³Z|΄‚ bÕ~×S_º‚ãDËÅB»æßס™HYYûõþMfiq4¯ƒw-aI™eñ‰ª% 0+ɲ¤Ò²LK±.”L[eÞkÏaq¢VbŠÈe‚ Œ*`J,ëyê<ÂÝ- QrQ%ë h¦Ô"µ®O'S†·fKÐ,ÅBƒSî0Ù\Û˜‹±%б‚´Å¿½Ækit®Î³ÃÃMK8·L¤VáèV–[RiEæÌY‚ΣC¦×F6‘55ɘd‚9à{g\“)^6k·Ëó)ö_ãå-~¨8~õŸ*>µúu³ F©6¢œ²BïÐÿɬ½+õ/qú1пEù ãÝ}ï÷Ïhûèö‚?øÛÒ ¶œv¡7Vή'•—WýÙËD³÷îKT懂GœÃ(¸#:aJã}™÷úeÍ·Ò£}¼1…'å÷¥»‹µ»[O†ZLÜŽ5À.ïj4£—ò³¥%<^ÀŒ ÅáÛ{~ ‹ygiÒà9‡'­d| î—ñ´Å™aŒ£á­üð@Tí"ëfFñ +IÐyœÈ$^˜¥fr˜ÒŽ”`JÂÖµës[&@&wkD’&ä4+mö ¨Ò"zàGÑ“ž×«k`™W”™`Š(_1’kè}Á¶¯2ùÅÆù›Þ´@À„¸þØ×ñ°N ¦ÙŸÐWdׯôçÕÄ’ÿ,f*üFF÷YÄ@¯´"X®u5 äëLªä¤Ãmñö–XÒ vu2é0˜ÜÓ©—úJ [»ê 4傿41é3L‰ÌsŒH89Ý*< ÅàŽkNfõºÝ ÓRí.::@f%îÀƒhé®”!+He!ɰ2DÓô2 ²mE·ÒYH)¨LžÍ¥€mLØLÚd9œ “ÍJE9ÈkÀ#eÔ¼ß1ÏÐonG·eGmN2±úë¡}#¼çL…1³ F d×ÍÁA§TäË3nTÀ¨v¸Ìˆ)2"æÙ)I¥Åp$9W4iBS½çËœl°…%ÜsyˆÌ´ æz¨•ÉÌÚ¡®¤Ed3ºÊ-k*{5½zÕÈœOÀÿINËmsx6K—ΨmM¥‚1K?Ó{±ñú­ïWhJå·KÖ0×­tœô~+þÖ:œúžœ±—ÓàÏx½ëúíÑpÚeÿxû=üop@~uºØûKùWõÑxTâÓ þÓ=þ‡8î‰&XY•WôŽ2¹ÄšóÄ·dßZÃÖðÁ¿yŒ:UNÞððCf³y#jŸ‡—¼9w`Ìvš_ã2ðÝïbçŽ6Oeû{Jost;ÕgŒwèퟭ}úÈ#>=ôc=ïíhù‚?øTïöpóöÔnâð§" “B'GèÏž_M|5ïûòØü'7X„ÛÄËD1´ '\¨yÏý^_5Bq oØ0h>4uÌ̘k^óèO8¿ñÑ¢ßU ;3¾Ûò¦ " ì|ù•ô§² ÖûÚÞßY+6§òœüÄ b¼Žî…Ó~¨ó‡/¾OàË,ÑÆ[G+Þt© O¤J`›l{¶„h MD–ð›îY§ SNÈS.QÍéfÌ¥WçÚ5çÚá.Aôë¨RW ¤'¹­ ¹XiGZKTpŠ3ˆ0éYȤ_ ËXe‚¼~Ð\úÆk²Çl¤ dæo³TR >'æ×Ê{…–`\p7…Äõ/|m[_)Hr¬’}¥pWGDZÂŒFe$m‚I&×vÙÖ„§@ÅfâJøÛ²2!ã*¼Yfœ…Âj«AKŒ<‡¤%\àˆ½1”Az­*”š‹e¾N€…_Ò¶"Jä„TÇÉHH¡.Îô²;4•ÆŒ¶àµÄ„‡Y’™ZlÒ!Mc‡¯ß!»Óž* šÏ´RÍ7³ÂÒàEðPfG/|1{2=/R ɵx6³UV×°@ÙêŒ&0J®öö¬&J.#  å!±颫 ,AÃA—3Ww q}Iá”™»ÁMŽ ­ábçΉñÍéë"dË0Ë„n ¤-Ùá™">©‘e†(C_i L#n… ë3>eNêÿ2|”ùµC™/è A[t(숑 Y}fuk6{f¼ÝúöÒ­G™õU…*ŽTÄ1f}ê—yê;n_qIí±üùßÔç·ƒ7µ 'êÀVßÇážw5øáÂǦ?9ò—?ã¯1wø½wøßÿ.јp=D9í‰ö Oà=ÆW`¾±ñËûÒ›¾¾½ÇWOœØKûXñ_‹_Ü%Î{>ï=¿zÒÒb~¼Á¹âï„;á¾£Môããì¥Æx¬ßc3ä€ïæ?_÷-ÛÏOåçì›þcàý·}Ãh¿_ìË*õR>ŒÉíùïÒªqL^ÊÇóñÛ 3ð7g¼Í÷÷˜5Û‡K<îûÇž¾ÂWBÜ"üªúq»œ[|åü´éÓÍåíkT ¾× ¬ÌCG™¯£úéx[ÑØîʉy9 äfòê0ʇæÏúˆñX&&ž0x;xßú­ Än~N+šØ-¬Î,^müµ×âÃ^N牢~‡ÒN¥ý±1±qAŽ-pO¯Ön K¶&›7ž,•hgÖ]Qâ\äž(8h«5ªhËßB€‰0Ê`¦æ*Lª2V¬˜7«ÅÜÍ+u ˜KE…r—|•i!Å3Ä•ÿ÷iFùâÕ-™ýšëRb¬›.C‚[±Êe»YzF䈌šA`ùÏV¥H™ Ô€Õ¥âUÁ‚˜Ðg¶ægKæºõÁËÏk- óúÑ®=3µâY´D›«î¶¶Ó‹¾WH¯nMínÅM/È}ΑŠ‚4[ûv)»4€™LÒDÁÍ¥ëB‚A%™Xr‰)ZæÂ„ËósT"¡AD¤ i¥+H_JÓ…p,ÈuÌÅbA$ÉðHd Ë0w¢Ò óô’f Lƒ|2+]äM×À”&åÈ-³Ò™PÎl3o¾5+…e™rÂrŠZ¦½™#õ)5FV騹ç„)C†Ïþo…,™YÊÁœÄ®,Om ·LÑÉ 9S¦´a•ÉÜa`&Vâ–©YRȈëo:&,)Æ®jéÅE¤s$3¯^!•šSQr.Zw¬QŸ-|Š’9l^œì2ºN±*ÏEm¬¦´dÉÙ#.˜i8˜ ƒ)’»¡’ÞvÜ Lp¯ve-“º€A¯v(Úr”˜öÚJ‡§—Ž×’—àKW§tíyy}Ч'þâ­øÝ|_p|€mƒN÷²‚ ÖÊ^·³c„ì ;ÞHG¾³»[; vàˉ=FÞ_Úý<´´~I<ð¼akh†Í¡<É>tõO£èXË—ÀEû—Moj·ŸÞÖÍ>žcüPžÿÃwtÀÿwþ-²#ëû‹ß£TƇãöxãíŒØO#ßa~Bù9h¿ó¦³aÙ@äÏPß~´ ~õ°}:þðøUÝØª7‡Kůøx*ßÀnà­ð&q,ñ%zVæðþ•÷f÷jÑÏǘ/öŒíbhÎÂÑnËG³½ààøX:¬?@ØÛO©7°#½Ô«*­fÞ ›Ýæ‹ðQ‰,'%bCù5ûÍ/4ß®çm ×8ŒKÙ/Û,Ð '&¦œdݲ¤ì°«‘E­²¶’­JªŽ p 5ôŒ‚,07‡Šëà4w¸«8œf¶Ñ6¯Ôì+-`š”€å´0œ3)›n™ók. à†€q±ôåβ w€­@æ˜sŒ¡!s•LŠ©š94!p]M¤‘ ÅÌåzƒ¬êÙµK¶ f¼ÚÖkk‘ž‰Ïð:2¯OÍ„`Zç^‚N:ݬxiÍË+\ æ=âÜûëè#zÚôRŠy#Æyäó@T¬©×H Hºe¬Ûg Ò2Ẇ@™<)B‘È`&×Ò} Í}iul¹ðVª*–ð@3sΜ3g^I¢KxadiÕÝWoêJ –p(Rä™ê²,˜Ä«¨LØç_Aór(e³VYF.1÷ÔŒ²Ñ5@œªÈš t—T àIRrcʘ&Q¦p¤Òtˆ›ÔÀµÔZ#8"3‘4ʯx¥%ª¤4 ˜DÄÔ˜ˆ4Š6áSœ‰Ðn¥$L¦d!Í)šE*cæ~+$†® ¦#,Ó4 íR¢$JŽÊˆ˜[Æ•‰ #°‡Gؼô´ï[©¦CÁÙk§7ðMêË@ —ØŠ…ÙÖf‰¥#ßÓ§¼É*àE,©XPsoÃzæsìaó"$ùó±Ì_ëÇÿÅŽnï7ä~„—­€và|âåƒ 6m¢”ayC/ôZé—Rà§Š÷Û¼s‰C×!ì£ú}}ø‹rú X;¢>^pû½9îüWfÛ;ÕÛ~·³’Ùb´^ö¹ñáøoNý¯ðòs$ðÅw°ð~ÓýÙ›J¯ÄF!˜|ý öv ÿùÞ ßwÀñ-ô%PÀyÚ8áÓ‡ßý²ÿxÃ={©Ãý4¿Áù n‚¸8LXùØ7ìí!òd;¢cw »ïm¶6»wPg$þ”ø`Þ,áªE£{xO|Î'm0}б¨¸TíÖ¨#tDl¦Â‰ö0ì´¬Àºƒ?Ãð>ç}ç–˜11ÈýGãu›£Ê”³Ÿ©KàEû‘ Ýb’¥›íÄî“V-üÖ¨2§…’4ººbxÈAZŠY%ÜáÅ…Ë k —´‘Š+ñè ƒ#8Ú\J¸Ö•ÓTIrMÀ)3‰in¤›•U ^¡ˆ3ú˜s¦N!Ó"8»ôCg`¡s«Ò¥\ö·4’™n¬K5¸ÚKʸfW[ãz2`)åÒˆM¥4k­nK=ÐW.k=çŒÆQ¹¿ŽË°iµKÛh6çd}íÂPÇL³˜/t¶œÌÕçN]§^$e~]£–\’‚Eì\fØõ`À•µ3²ÏÜ—›,§fDfÌ©Ê0HN§ EÅ­9¡€E$9KΚÝÎæœÚ ƒ™Ë, gA2™»v4ÕRÖÊo:++”CdÒËÕ’Têˆ^™ ¡,C‰,%—¹¹OÒ¤ÖÄtyƒqºX 0ÍÅMDN­çh)a.CDÌ…ÝM81‚rdÎn1}ÑKÐÓ´ú)Hï´ji‚e3k–Ô$Œ#•cæcby“’R(€:„¿È‡¬[À57Âk¦s:0’ê ²ŒîCçÈÔÞš.ÅF+ |£<(&Š—‚Ö¬†cb¿t$ÐW[©"ê˜-A]Tæ­Ÿow·Çz.|}š8XüG'ÞÊ„]g;Ý”x ËQbŽ´’¯|×êV»u·ËÆvÖŒÕë½îGi´*`FwëGŒïu‚ G L$ýã,RwÏHÔ<ó²»¾¢ÝÍgígÐãpsº1¼þWøkÀ~ûóýßÔý®=ÞµwGL«óް‰øŸ°?ç èÿcýÿûlø —{¶oP*X` ¾¯À7@Dǵ±´ú¨#í¹áVØ:j@Bq¶Ó÷@%ñ¢‡çY¿PÛÔJÀöjù€×Sî(x”Aõ+›XïÕFê¤;Cßcî(?yÌv»Å!ó "Êx•U+Téãûrº1°Àò!§úv Ûî‰{ªetíg޳^îüR·F×ø~äßYùåÌŸ´øR¯7™¯ÑîÂkrTOW:·Ï7g"iS‚—[s1Ó2§±/Õè¤yƒ¹¬ˆ®Å1½F{"MT’¸2Je©TP#TY¸ž„‰0„ˆiZš!I–ƨyÅc3•3 0§Æ˜cjÝ rªûHCø,¾aµ’†õ·+òºÓe.M‚9an$“ ë?Sk¾”¹ H‰¼¦U‘Ÿ•ó+Æ [«nA`ÒÝܽ¶R·R7zÅ•V‘‚y¨ØŠoìœVê±¶Ý9gsgŒKr[è…{ËZkNiŠWÜÍiVœNŠ€fîNVÚj2P S¢Ì˜½Ïóœ]c`fä*é…$L/¬îN‡ JAs9™35Qºª2#)M$e>3êJ/á ^ šd7È­n^ÅB?²ÜIfhbõ©ËDJ¥÷4åX¤@]®›ŒTJ1"¯· ‡‰ ¸UŒ^IJ"ÁË&·hº‚%+Üiž@‰Èt-*†}nÍddvi(?ÓÞÇL§ Î 7ŽJá¤# tK·€íÓrx–Œ0MeÑ’k0ÌÒ˜#ùY R×Dì1º&9b\¬ú8x›Ô®üûÌwð< J)Õê!ŽnUUsƒò2û€ÒJ]ìÃ:ü]©u·¦B—C)·óÜgýÐìñÆ>–x_âþ ZõÁüѶ½@%\°ñv76ÿ_ÖÞ¦GÎíÊÎ\kï}ΙIò¦xï•|)»Jv» }õ ‘(FÚ‚!$l°Q#û§yÖè­Ö@ž D!fp@UT•ë^9ø‘ï9gïíÁ Ê?@8H0Df$ç={¯õ<„D0—m¨A£IK<¦ïG¿Q+aÕ—z’4œ´Ÿw[^?I\'vÒXí&FÙ‚åÄvÌc)¥”m\nÝdåx¶;”\Àå?üùñ7ò÷( úú±Æe{«øñhÚ û€¡_c à |Å£CˆÃ>Szöš‘ÀöìKØ€10:P¯^¿Ý¾ú1¿iÀuÛ½b}½¹€–›ì@ÙǰA$²á ëNû7›Û—ÒžÙ›I§¢\›Ž×tDüüØD{»¯OŒGà„²ÜŒRïÆÅ“Ó6%]žî+OžŽ‘«Øáʱâåz €·¬•¥¨V‰­ H¿ËÓyOUuC$OØA.¬îá¯|déÇ£o·\šl¥¸wHWû䈟 Jª!B«,T£`ªu,¥$ôÌ”8+{†Oè&)Êd¤õ>|´töLIdÂF3§…Áƒ³®ÀŒDÊ4Êrxxöˆ½ûè3-$l<=N")™šº µ™rÆ<|&^™BQ1(çj4“!© 2˜Îs̃äÉÌŸò<Ô LLf¸NUË|ËÉÈø|̃͘Ψ5X“Ee+’3- 8çNÃçül†ED•"J«V*Õ4¦zY¤‹¨ ÅBȹáô”pï}ôcôìŽ@F¸xfCBdcVJ1ѹÑPBŠ©‘ÎO3’´pGØÏQ£!3kЍ‡HÒh,…u-´Ï¼“ IDAT!Èèlk¬§ž#RÎ!1bjš5d£Ò% ŒôÌ’“ћԉ¬`(<Ë …B˜¢1;&ÓÛ'žSÔ$ø—¨’LŸ¿(ˆÍy`ª¦Ljá\$eœ»FŠÐÉn¢EÜhŸå9ÈL"@O(.ˆtÌô,5a#‡GHt¡+˜²$Z&ÁŽ¢J-Š!}ºòX”u§1 Î¥äf)Aü‚½g{šB„^ Kñ­¦B2·"L¶‘OÁ¾Úê~äøNvÐúòš¼’R¤C¶ÝjsEâ×’×8Õ¥´±`tÁ*P%¯=®Yk ÑVÕ¿÷SñQcÁ0Yx~Xïpú´ç7·¨m­ÈlK6øŽ²¯ \$.;–8rÿ>nµ·ú öX¤Êª¾-QBÖ£OùÅwVöf€½ÚèõóõËßoÿú›‡ív­Ëá_kQí'?´ pA(. t@€«4Ãå˜aýý ºÎì8` .€©¢þ|{‰gåºbˇzô¦ 6Ë««åÇÔ ñ§õâo¬¾žíxø€Ã;¼}|{€âTJ»¬ýÉ…Öÿ%ðÏøèñø•cÝþ² ðþöý j7X ŠÍGè~?¿Å×Gç©•tô‹6ªŒ¼ÂÃÖ_wBýº÷ëÁú)ÛBôå[û‹Š¢"´"R3ÿ¯XoÒ[Ilº,XÖS]¤ qÍ¸ŽØ™ì2Åõdgñ…G‰,vס æµ\5³œ½6áÄ:©>ùÖÆF¶DÐUS(€°á¹v¬ ½d@Iž‘È9 ™ó Á…Îý7} φðˆ g¹1ÊÔ4Ol]:)cBñR … p5%@‚ÄYüy=±Û1Ë!ÁbDL?¶Fº p¦È*¥Â€SBI$ïÉù.UU#32¬ETÔe4Id Ï¨ïÈ6؇Ä(H1&l™Hª«U‹*s¾Èç"¦àš¨¨«‰¹CHé):r˜Ó5 E½%1Qäb%‹83{z=3“*Pu#³)m  3•>_y¡ÐTŠ‚’2IIØlÄI`€BƒðdH sŠ`'—І¢È|’PQMft ¸g'èRæÄP3kz%Š,¦ešÏy>ŽÏÑ5a)-è Œq ¬F15‰ÌܤŸ4….‘!Œ„sù`æ‘»Ì\Ò…2DÙDö¥Ê€µÔL»eV ­Y¼  ™aÙº„G´Ñùø‘ºg½QbY”¢%m5 )§ò³È²É7Ž¥”&7ºoÄqé7;)*Uu»È;õïZÅÈý¨ÝôÜÇ@;!Á÷¬qõNï~„Ã6÷U°ú€ê@@MpŒÃ•@õŠ›ËÃæ}ÔíØ¹Ö »«¹I§æõ¨_óéå“SYþ$xÙåÉÝv÷6Xcü„¿Q<ïøú•(‰²‚]Q7ØÙ0WÐí3}­P`ŽÀÛ/ ~tu³ÕR×ÚP[ǎ忹â5õ¢îËæxõpXÈ ËwØðøðæõ%ðýÿqsÙþ‘pk›§Ê`Œ'kœÆíﯯÿ O_àô¹C½B¼ ½ðâè:†ÆØl™UŽmñ²Œ’e´ú`õÉŠ6ŠÔŸ‘•@ØÞx?ÄñYŒîب»e³­nÿæã@ÛÔFÔ%EÖÔ™ <’–¦Û€(kDHNLCnAƒ‰hš=èÎ髟ú§7F“<‰v¸J”Y™ÍÌðáŽÓŠÓ:ÚX%:áaÃç6“9£àW IC ]FÇ„µ1"²xX¦&„ì™6ŸßR…çXjeI…édV¤èä@ÏAε’HÿŒL„ )óaUæyÇúgÎf´øŸ¦(LiZ&ºnôžÙÎNÏÙâC$sž>F¤pd÷Ռȱf jj™í¨†ôHJDŽ„ "B,U\9Q|J5ÑB1Ò.¢T¢0MPço-3Ó]"ˆHôžJTÃT†§E¤„HBg®5˜®cv—HK¦â%Fá"J'JOî$-‹p'Ø+É`rú 2•³ÏÒð™åEh$E‰ 1o)¤ÂJšA™žnª(X Ä@ŒlÌPaœƒg0x¾ßé̘ÂfÒ)TŠ1!z–Jgjb†(È]RMŠpáçíÓ3"B°ˆ¦Ô”–ié–íC}V#Å! I ‰ 2Rzr œ„.RƒTAxŒˆ'æ;eª¨ bÑÅXCóäÖ;&/Ý2ŠfI©”ô}}œ(>n—O[–ŠàóäS5! +CFÖ­G¹nC¯†@ô ÷§ÄC†cÙ#ÿbAÙ¤€eÔÚÛ~M|l8ÙöÈ#x‡ò?}f[è ÷†¿Kü³‚‹ (P Ì®yœk§ ø„׋ ~q#ý«º½ŽþË~TO߇®ËÀf¹Q/ âBE±[äâ]Â2®ÓËît;øë×þÂp1°ýüÿ(_ýž)},À%`@>¿À§Þýß?ª7ÏÊ~£·DÂñ)ŸÁ¶wv¡U²: ÙW&7Eö6@?Ãöw ðãŸ`<}Uð /žÞÕË-«‹I.EOu˜|ì86BˆKdERÑÿü:d‰ÐiùÞ#”@]`vÜÓ‘·¨m{DD€ã—Í6X”dÙéøÇº½#3þÛfÙ’W‹Ùº–vÔÿô˜ñÁ6v¡[± kEN‚“jª´!ŒAÛ¤aæD³tBX3¨:MÈÙÒ5<#G'ºJhІf’#&¡¦ —>¼ÅºÆ]ÉŽ•ùÀŽTÎ4‘$ è<” fOÏp§Å}˜ÚöÙKC†¥7BƒÂ@R Ø•j”BJ$EÒ(ç¤éç3KBF’‘1f€sBãBILhöbINÈž$ 0 )C1ªA- éé½¹w­5ÝçÂ"§…l2ZAÖ•uU’ƒÙ™ 5Àqž©M·":/H:£Â&¢2ùØ1)Sé1Ø WPÉÉ.šð¨I…Ì ÆgÇõ¼0 3‰sæŽ{æ@Ìø¾køDƒ‹“T5÷$4DàÔĢś€ƒ–Et!” qO ñfšœÑv€DÁt ”ÔR}¾Ö© T|Ž Š@3!qPUf„ŒYPŒLL-P :’]HI¥—óȉs}4â ¦ÃÃy–…‹PRÒ,Y’‚J,” „`ÎLÍÔT XNã&X<˜.euq£Uu!¨3‹‰â 7mÖ„'ë)9å²mMn=wƒËNHr…P¥T:f£{ºù©œq(ƇÈиc{ð¶f7é¨¿Õ ´ÞR¿L½a‘Ë*í.¢at—Ã)¯…ÕTºÇE¶ÄÁ•Ø.´D'„0;Âð~Åßà©ãJP¶¯ž|{½Å—褕ëG\oðä iX'Çš(j€£$Âp/ØÚ>ë«lXÖ»qßÿóûxY~‰|…gŠËØŸ¶·_zÛà¨YNöøýØÊÃõ׌ÊOmùküø7ø;à×_ágð;XÃx„®ðÙððg«ô,Ãý‚¡¯žóz[ËFoUéXÛNåä“Ôz×걌Š]¶–w‚½è Æž )§Øöüâ¶=]n@Fl,¹‘ÊÌE—Æ-ÊåýMýv¿(Êr‡Un2ö§å¦/%vµ²Ú}ƒÉUõ õ©‹Âkã­®‡<òùEÙèUÆS%Jˆò( ÚÆ‹V݃½ø{®Í–*›¶Ñ÷JÅGðQm˜¸Še©Qª4yÜð8j¢ACR\5˜1 \!1/ò¤(Lž+ ÑÂ{ RED™øý¡‘I!Þ‡7÷AO6&…Qˆ U!%!™I r|FÏ)¿9ü Ob¢ºÌÛŠ#'"Ç™ŠLxÓý’röâÌÕD»ªL¹—1%‚Ñ#G†Yo›O¬s ý{5 Ýq.G!ç_‚ XA©Ð 1QÕs]Î=F÷~í~ôÕ‡ÃóŒ@=Çh‘`šJ©RÔ„E©&2¥÷9³3ÁÄì^ì,×EDÈ©P Ê”Ûg ?«ŒÝ“ŠH¥N˜¸L3§ Òqæû'í#f:ÀϽ®É çž‹ŸóRâV©¤fU hPÓ•&ð‘CERÌ¡C D¦&Ñ9@šæ„Pô¹…Ùr„F¸L%K@"çÎ:¦–‰I&4Š”Ð¹qÌHè"Q©Uh""êàN„KÆ€hˆt¦OÑPfm8Ò{øˆ´”JK~3І3!܈lD*ä|ÎLa@"4ÕQU’ðáîéii”Fº¦§Älº©"ƒ^â#Gλ÷ ’Q*PN¸lÜfl" tvxžûž™è—1¶s鬡‘àFRÞ2Ì?~Db³ôE¾Ñ8†~z,™óÑþûê¿ A÷Û¼Ù  °u_",îÀ‰Ë@°Àí¦g뽋Xó.h7'ì?¬x|‹›ê^ Ëõõòƒ¯—ؕ¨£å‹ÓÍ6ö(°Ä}sL퇀‘ŠRÜ{ö–ía)[l-d <Ð3t6"#‚QŒ¦ÍÊ7b"¶Î±Ó‘4fW 5"ܽGw0Y™+„8¯þ‚âH™8#L‘¼@(jjÕJÓ³¬RET¦q}*8ဇ‡O>)|NÇ@ çÂtÃ@†3tÂï(A%KIÛ¤Õ”""¡3£ ð†qŠvôõÁ»‡gŽôÈ1²ù„?PhQÓ4aQ˜¥ÊÈÈA† \¦$  IE¸Á¬`p^[$2#=#à=Ý‘"‰ä˜ø*‚8<129]N#"#}nlÇ4 ’#1ù°ŸŽÏimCœ7AŸ¹µêJõ˜ ·„ ‡[Ì—Á\gcpzÅ£3"B¤ÎŠC ŒðàHøÖô!LÕ.29Æ©p:¦YsRH¦þ4° ¦Â*VDêÉ–ðiÚ! dš½Ó¡Ié¡Óç £J¥%dVIºj+¥SSf À`Ž€'<Ò‰ú‚ô¤Ÿ=¡^$«šÙ|LE`ç@ö>º rxêXBFbë–GÑ*ŇúP“Áx¤ug6/ZG¶ÌÖ ÄH;õ×ífñŒKJ`æãEÒ =/˜4a©( ´ íŒÁvÿŸÃè10Z®§h‘¡d žS/ׄ– <ûpm«ÄD¶H¢Í„"&4ÊV¸0HVz)¨ç6÷Ú³Œ® :Æ #šfŒèÉ1AÈ\ðO»ÜYB¡3©™°8³¡‚˜7DŠF ˆ` †'²K6õÑ¢ÖN}í@Ö©€$q®›döä@2Ä(&"äH¸£C’©ÌZ› ÒGºŽy›T„ðüÒ‡&áˆá>àbN¨ègƒ«3Rj’‘–`xmkhI)%g©^Í,‹IV")*bJPB&µBÎÌAÀˆ‚1L¤Óî$ âÈœún“­è–,)$W±!™zwïko­µÞúÚû9ú2Fž#Âcôð¤M5Í©D‡{fO|'~eD1¿Š¬éé‘V<2Qe4´6O]ÁP5Dìºi~ýiP3ï*Í3|Ô»~G¿0^ŠšªQ <Дl†–±ÖŒ6×kø+Úk]à¯9å¦nö¶E0_‰^g/íãm»:üZ^CðRnxÚ (<~vQËóûZ¾ÛbÍZújËcâ¿ç¦ÄIéŠkbÙ`Ut•$à Ë /·Ä[ ¨x <|= Š¡(˜øqÀ:Þt¼Þ>Å[ÃK{ýD`Û½ßóø6/ ï _âô qÂÉa„{÷gùÛ³Š¯mAùxƒŽÃà ü®üÃþ¶|Ôîv}¢°{ûxöŽë;)+W l¤-KÚ;GÖþÄNr7긳_\ÆÍ&÷)ð¼ëÃf{½­?°V ;Þ ¤—ŽRâÁméûñˆÿºìÐÀÀ&qpG–²±žã pä)¯óy“,f˵åÅ’—²ÖôÖVăµ{Û.u|ª Dµ«žQ,™.]/›‘Ý'm)cñ¾£ï ;³*f‡ˆÈ6²{îpK"ݼKc‰ÊÆ–8ejøQdGlµÈv`3[[¦Uê’¥ªR"ážÁ•út#¯5‡$"Ý=Ý9­ œÁ¯©:y~!**qÌ&p5)&çbÁÙo“3#ƒ9ŸŠGD÷#<"¦íçLg’gªÒyK1¡¨LÃC€T£ª¥È,=̾U¸GwoÑWŒU¼!BÉT¸ÁE"$$cÀ{Ý35]Èì‘"ˆ¢pM‘)v“œZ#I”H͹iÉpÁ˜°¿¤%ÎÐ<Çï3Göˆ†~”q‚·h£·æáKð,ëFZá¹£—D¸£¥4fD˜NˆtÐ!žÊJÌ©Ž˜ª"t'*g»ER Æ¢jóª52›Ð¨0£$$=GHf(’ 1x¬À ¢Y‹hr(S!"¥X5µÂ³}-HŠŠQ•"LÐñ™a>› ¤§!—Ó=y¶ý…ˆSÝ…E’NÍPR2•¹U0Íg*zd™t­N§Çµ¯­}ôîeÌ•Uˆá¾ž[:dB™Ø2»ŒUÜ%‡@-MóßÐ9‚--˜ÑR•6Jˆô §?(ÔVOœ8±:4ÖÚ”ãjpl?vû[”»ˆ]X+ššeD EÅ]àÁÔN[oì6 "íÆdÿXpÂÞ/qG<çÍίѮ Õ—öÿ ‚·ÿû€ŽWäu)å W «¿ñÉoµê¨Wwn¼üÕÇ ¬w÷ç MˆÂU±(PH¼'ÞŽ`sÝ0|øüo¤ÈŽxìÏ/}ÁóÄb8zÃ8î½#ÞáôÄSŒ| Ƈ­ þö o€çxÙ°l¨ölðºT¼}zƒG@ÊËÇgË›^!öâ˜ï°ÇOoý«ë¸ª@µVÊÝ¢Ýò‚¸R¨Töåꓚ't? Œ†‡vóÉÊ_FýY/ 6¥Hâ :ýhŽ­qçñÛ ‰7—ħŽBCÅë’¸(7Ãö'AWàGôŽåø~ß*üâvä×RŸ„nåA²IÜÇéoz7þô™hÉQ"¬«Pm+\“"lY›Q–4kB±æ%|ÇÜ™nÅdúl<#מÇÖ×–k‰$=ÁL‘íHXFRY a%…ÜÈÆÑƒ°ºÄ²e1‡NûD0 ac>É\\J*p†ŸÉ© Z¤DʘŒ S­¥ˆ’ˆDOºÈVÔDM¤œé×ü½µ!#AG ÷ÑÚÃ#<æ¡1SA3ƒ„Ï"¡ Ub"‚ßÛ´P%™éáÑÓGŽá½{ãäýä­ÓÃ2 )ÎO"é*á©â$#Ò"G $s.Ä!)ª¦§vÍ‚P›î1OOxA™ÖŒD8ܧ¯y÷qÌ~d„wï}øȰEŽ(¡“µ;³÷0Ùœº¦H É$e§ 乩<Ÿ&T ™NOíƒ0r¦RÂ8C`™š¦¡™†N!U<9ĦÂLlQUŠé¡RU“ªT#…Aª°ˆU5sLt*¦c’ ‡D"FAïpÏAZp¸$¨Á’)¤$R=e²ˆÉDF¤kï™NÒ½¯­ŸF6ŸKœYÇ™ ¸\g€ÑítʱŽt_zYð¬êÆ‚â[øÏl:\‡©‰>LÍU4`Ñ«@k„¦ëºKDÓDúHõ&'Ót-÷¦ÿuDK)©ÜžÂÒCéñÝru\iYòçBA/«Ý¦Ä^ßñUÓë“_-¾)c“'^|Ÿ=-m?»•—,´ÛŒ –e‰ª u<ök¼Û”7¨/Úò}OüŠ‚«@¿€7Tbæ½ l– íôª~¸Æ(¸¼ð×/·‚äŠxD*b€  FÁn‹¢u`ůþ×OèwX?‚€?ŧ/ƒ È{œþ_à×À¿z÷G™)½Ç[àyAëï1y9à)ðŌ۷ëñ9Ðxw·à·‰ù¦èëRëÉ›ðñ øã•ä?±ï—ø‘$*x½:ŽŠš(Ä{ÁDzÿÀÛ?—ö,± m¼ öᯚ#zÑazÿ[}|M`ûÿ›ãÑ uȤb· ÉþÑP#ñq  hÇBl7ÐqãV4ÊèvJÔ“Ç€7ð\äêË£WÙu—£–™¹Jœ¢­™š 3VŒ p¹ ,@AhDч¯½7?Ö‡î}tÁ=ó¸à‘¹ˆ0ÕJnHCXÀd^ Ma¢E”*ð(bžu£µ†ÙÈ9½G†fãÈãÜ iôpU„i™ÖÓ2´D­K±¢ÌÌáéÈÔ4¢’u>J'¦š1‘>éÈîÙ›·î>FÌNìL§N¸(E’⑘Ñ$ˆAtJÔ”3#gLhôl=Öîë:zîaú¡‹pÏ윸É2a =!%B€„Ä #C¨ôÐÐâ®™8f([£N’ÓŒ™i9“'ÃÃWxøÙ½£Ÿ€“ç)c Ä@8ˆƒÁ..1éêAøœ™…0¨C™#)(D¬‰O”D¬ÓÁ,¡>ÑUd¨Ä »:\Žì ’Ã$YÎÁaI£†E°ŒÞ!)æ¡#§ø(´ Ó¤bÆ ‘¢R%gWQ(”*ºhYh¦"c&ʈ9ßÓ‘ÞeDÈÌÖû9¡ä‘ëüÞB‹&!– >W"î”AéÇî}˜Ù[”˜p9‡<1ãLÑCc̾FúG_…)I q IDATŠm‘PDO ï>Z®†fº”ŔΠ¨!6ˆ¢ì®82N¢ Ë­øá«çǬF¦ÉQâqèþ‹Qÿ½t!$¬w(§_.wQ·Ñ¶µDƵKÍ–,P@åz“×é5N…àߵ;}ýv[åŸn¯«Õ­d­±¨¢Õ:Zô»þNO?ùÞž–Ž~ÀGäZ…7\´£T `7¡ûÐÓŸr-výrT|jöˆgËÏ/a+¬#ßcøMè~äe»À0àÁñ0ðò;¬'œÞ ò­ |‡þˆcÁúÞá% /þ(gÃ_À‡o±}ƒ{`Ð_ ¼4¼­(øð¢à=ÁoŸà5n€g·rÙ¤@¢Soþ«ÕQǰǻÜí©ŽM”È›Úö©x´À=ükÅR6­n2õµî7ì{í0@ôæR÷kÅf OÀ˜$Çq¦ž(°Ö†Pœ%P—}å­ãÑc{—Hãc“=ñŸvO‘_Þöm q~ߌŽË§P¾ò~R(·økO4¹éµœ¬>—ºü—ß—úî&ºÏ b‹Ñ_5\ç›ÒrÛ¿:Äx½5”ø¬lXO@‡¼Á|S;l*ˆaxýø ^>ÊÏíóæ Þÿâ¶ïPöë—x;åAã5:Þàæ[ìŸð'°ÝA .K¹h]ã€=ÁÇ}ô[´GÏšÒŠö'm¿(b` \*TpY_ïUþ啌êý?X¾×åÿÛoöø y]jérK;¤½þ¤xHì õÎiò(bGl ØÊSh¢Êa4dzÜiëË"•?¸ÔËŠmžÿÈ"Ãzæ‘Ñ´Ç0·Ôš™Q #óѲÎsú2Vz˜ž¾?®§ûŸœ§øÖ\®4Œ€HH$Íqvª©‡Å%]º`ð÷²åJÆ ÕL:‚5¼G¤‡z°¥4„§ÑSµ‹,Ì|³ V-:§ÙÞs$AÂ3Ü9”Yšž"眬<„‡ûð1bŒ©˜ s…šˆšj5S+)ª¤ †0yÖÑgEúüž’ÃÇê¹zG®-û`L¬BœGTZ63š&L‘±&6HÉ^JŸþ¸Èᣅö¹$‡ÐͽʨR * Ð´)‹cŒˆ²e8B¨‚’!6†ÂƒDw€ ¦VX†A’lS‡úY˜j)Ãe.ëÕaÏž)dœ©v)N9ê¹3½qÈ:Y†g\E™ûb@ –¤fadAI²N8„Ð5½[ºÆtbTÑ"R!³:­HžwÊç?PЉ•"³™˜!L`DD¸GLÛ35†éWg•x°{8½»{[K 7ÐŒ,WX:§5ndœPç>¢ !h‚Ö³7ˆ“kËX™%‘É¥jŸªé¼wÚ \cucXwnPÂlbbÍÅ‘ôÁ>pœ:Å$ºP$ˆÕq”ÌÌØf¹z™Tö£ŸîZC·n9Z=%K „ce?&Ù$hßYÛss "UNç&Æ÷…Ød[½É—‡íæ»ûr _nGm>o#Wâ(²t~õ?h{›ËŽ$Ë»ß÷‘™|ÅdWÙSÓƒ‘¸ P»€( f£†ÐˆmcþDmµ(m…Äàíà"a ¨b¬zÌdD¼÷®»™-gI¦0U2f®qÚå©Ô–‚T‹ª’QKŠÔLxŠ2ˆW§–"[õ•"@V©jA*º1™.yBQSk€*3#ծœ9[{RU©LÎJ`³MÒ0³tXòESL­M :K2S•,j¢‹ÙFÅ F‘­ÊVm+•IJŠ’’aÎt)ZMËdˆg6Áj9ŠÒÌ´)MKƒ¤>çYUdVƒ…AREõÇ•d2#Ýs v猂’°d¦b"TTt²Ay]{k» „µ0Ô´Åd­À4†ÏÃÏ1gL3j^ÈsçÒ¥^j)çPf€%ªuÄ>êEÒj“ÅŠMP¾°xÈìªØ¸Ž1Êyá¢N»Ó…¶Áœ½1F–mæ ¢Â!gäãØ|´Ã)‡2J&F.±bàâ킺6Ök7Ÿ¶C®—ÚÎ0t˜Uk³Ë¨c?ÆG§Ž5!ljžuA9]ñÖ쮵ãƒ.+à@¿íõìîêû¾n?]c]’øûÄo?àîŸyú‹ÀMVõa_ŸÐ×ÅÝÉkŽ´}E”úM»Ûúq}BSð[|À#/±©À _àqƒ›úÌkj‹ãó/ðn/ Ð~³áçøâ€Wù ºÅû¯ðåW€Ï€×ÀGø¼`q4u I,‹Ëãüépý}}Àý§Sùå[{…²¹#ŽêËCEìÍ*¿ºèK•Û&¥+XUþò;⎵†7F‹£ÞÿûºU”vyZým^vƒª¨…pb$®D,°å(;øú;íÿIu£ƨâ¢âµ ŠÐ%«œµ,û“É“L~FÿØWÈâi)e(E2R¢k®Û^·!û-ŠÈb©Åk“ƒ„Œ¢gèUé)²¤ˆ`hžÉ.ÁKQÉáÀèâUµ…‰@U5˜‚‹¤<HMTYÍ´–²”¶”Z´BéœUQ¨–À“ÌL¤¡˜ŠÌšTN¨§ÄLDNXí9›d <—¢ET™E1#2óÇ×Öd:Ò}äºâÒqž  ]$9qÞAù±û`@ŠÍÔ4Pƒ!V ¤M[4gš)Î…,Hê"4FB‹ˆÌ& é‚!s ˆA…¢™uŽA¡ƒÏq¨©Te‘”`B P’=Œt“@Š[¤nT…d‘!.¢Š¢3ªÊŽÅD±ÅT ª‹é^l3ÅJÂÁŒi™zòLUJÕªVE5ФÁl2VkÑjjJ€*ÈY÷˜´ùÅs-NZ䜥d¸GÞǸztÇHF =$œé” Z¦ŠÞņ¯-/éƒ2BÔå`ÚREÜÅ@™H˜›ŸCÍg±Pòª™(Ž,ŽrÙ–Š”ˆÐ‡Î÷À!eî¬.™‚H_»"ÅÈ+G·îë¨Ú‹Kd\Õáñ$¾áµ³ kn¡k¤yl¾¿2Ó®°ðˆ‡ì;ÐÌJĸ,kXŽ5ëÙ6Ú,P­œÜ.£¨B ]Ù”#Ô¹”h+í­(ÐÁDÄÛÕqwqZQy¼m¿€®ˆ‚¸¼áòïp®xñï¡ ÐŽ5ïsà“¦jÚe#rëã>¼þr[=-WÏvį! Ѐ^1îñ¡—¯Ñ^÷—>Çï—ÀrÁ ä#¶/Ñ>‚lÑÖ†?|l8°¢kÁ;¶xÕþŸGÃÿç³á3`W;ZG_ñê3àÏ›î lñNð7À¦"ô qðŠ-ËçC¼hëSÿ}î`Û°óãFá4~qHÑÜ,ßrù…•LqA@ùÌãÈû,Ý¥jÔËz­j¶[ÁÖziŽ$ê@)Лãst3 ž€pxA3°À&ÐxÂùv‘‡¶ìYn]¤PÖn­]1¿+€Ä?„çº"™ç凨ã¬ò$‹H…иM7 Yl1]¢Ö`5/|þw Uaà ®’¯‚—ž¢”NNòê­É±ªªÛá¡ÂâUP¨:i˜{x¸$ K ×¾hS¢@ ›²$  Q QHþ÷ð‘R3Ò"ª©ƒbÎ dÆy‰g½g0…™ùÜmʩϙkVR2˜c’0Ü#œ`€Óµ–‘1²¯XWgDHºÂE)†‰€âó1“P|^~`.ÉSšˆ)ÒE$•YŤPHa¡*+²@ &4ˆ)ŠÍ*4ØÉî1Ü1œ‰a†€(Càj¥©…ˆøl¤PèLÉ”4JÎå»!sD×´ÈEªVÑRX@q2UuBŒÈ°”­iQ,+* ˆÕ­é4íòGûj"’’à*yU S5¥L§ªÖf%@}VPÈ„î‘9›êtˆ‹Ŧl6“ÓÌ1ÃÇÑ{¬W¿\}í~õô‘d†fgv—ÞÑœªTDZú<‡ÀÉ”\àûÄ.e¡ Kš&ÔÁ,J„™²(…¤¦P[#칡Õ@=Kac¯ñ¢¢ÂI¤ ó,ض› Z‰ŒÑ4a棱G&A¯ŠŠâÕÐ…kયƒêâ¡1¢|Wý·úRŽ6îé#Å´fb„ôë”^ Û<Ö¦‚ [ßP«ÈÈØ¯r î½íÆô^x¢¼uÇeÅß<¸"ÿ²Ã½!,†€c£ð ¸ÇºÇ÷ÀƱ\PÆ<äuÍæ‹]PwÀͲʶ÷º@oþ³ná¹ Î,ë¨_žÀPˇ8•z÷öæˆ?ï}ü&Ñ ðŒÆ;â‹KÇúˆ÷^ã󆨭?ݽá¿åuOúÞçÀ; ¸ _nËõ YÁ+”`Ü‘5_´XÚhHÔ3î68š£˜¡ ¬  Þ0Úßy——?[ $ÕSÆX}ÅõnØñ*°<5c«º“sA¿-–›\÷[0«Ô»|¼›/!{¼køøŠóå§:¾Æ»¿ÂÇ úúÖ¯ñîÇÍ* ø…aW±½Ànàãv̼ÆGô‡ÞOûñ)Ž­# 쌼"ôn9Ë€¼„.-¹)E÷1–e÷ôï§6Ç+°!¼¼ÝÊ]¿l½­+™½—%]ÊH=ö—€cûtÈ ¢Àz†`WGt&À8Êæ^rÁ ÉSâ[ê1ä.å8}<_>š Ãtø0¬‘ïÝ]®?KÈòTm˜í‚Z†5oZ¨ÍQ<5ë bM<¦R…e‚ê”HÈÈE²•QY”â¤fJÀ%ÖÁ(Z‹-Æœ˜K Rº‘9¯NºD–]t‰B+!  32##îá ‹`x©4K•‚© 6U±TËg`‚É̱x¸¸Ïþ³R™‘b™š‘™ÁLxrxöâ©‘… z$ƒe$ž”9§šÌ°ŽqŽA*‹Z#JzJ0ÉD²¨X(VÉš©‘é‰fN¨(­Tµ‰ûààÜžT§ŒÈôHT.:‡n*ÅTÔPÈŒáÙ%W""`Bå3 c(QJŠªè¦–e©­™¢D’>e¯LF@­ (¥bòLHA2˜™ *‡dgž“+05â¤U–ÈrUuŠ m¶ð($èàPÐt6ÏL´mFï9ºÌ ID¬W¬W÷ˆœ$mH$¨!yNvg¸`dfú<¼µ\ EhÉR´9^!Ô†hŠê´qª6kGO;;C.Àª+太Q—” /Äkp“ØQ9Äüùm'‚$Dk±5êô(™ìàO¹9¯ÊU9¶7›º•Ò¼Êl¯`ÁØãÿؘW;¢âJp¦@øÖÖ»¼ä¨û€k”ГåqÉ7¤ÜRœH| Ú±ÎqŸÉ€hsc_+þt—ôã/ϰ§7úí½úßÜ=åæmi(fØ” ¸CCЉ%‘ê¨\Oµ Œš9ºîk]¦ÝBÚH{b}¼‹z@éÏ@`Ǹÿ€Ã‡/~ÝñÂç_¯ˆÍ#6Ð×x¬€â]vÀöû# ï ž¿ë§Ù7ü+Þ_€=–'¬žÙÝøl^ˆñy ª¢ÜBÛ Û7¡ûŽŒ„—~ZWôvWÏGø›x8ä?VûâÞ¾<ɯ߶î.µU²m{•+âim'±S+€aï(ì: †¶œ#¹ >Hy ž1%@wÇ\àa/ Xƒ&Üñ§ ¶· V¤Ü ¯ ÖTiùšqë—O§!èÀ“`¬¸±[yhu+­ìÜ0|“íÖÕ–uáP®`×Ñ0v0!Ë2T]:àç°¢l »RŠ™ÊˆLµ´”Eª‘P1Ò’ y”àâ° ªh¤hXqˆ†ØÄ¾õFV%,Tº’â óG)'SrZ}ø92Ó¥¨xËši)€RTT'¨§d˜=L—¤ÅÌø+ÃÉ)Y–ÙzöLŸÜþÈðÁá%B˜&@ü›“„äôŠŠé3Û) hRŸ ¢¢`8™Hdzh0­ºƒLŽ‰è³”çN…ÊóT֙鞢f*ÜÕ|ÅÍ ºP6‹kJ¥Ìêpq„ÑÕ$© ¨˜•Ö I†«­.mÓZƒÚ¬^c.¯Å‰HˆNr-Õ0HÁôDr˜JĪéÀê:ƒÖ4Óª(Ðâ6õΜé`a&s‚¯*ƒBƒ@ $…ÀÛ2ÂÇXWïkd"Iï]"%ÅÆÜù»0#9Y%õ:]¬–`ætz³$KRFjJ&W£T"•SóWtWmÓtµŽÒ¯®+¥<ˆ} -7™Å¢gƒÊH£”&MU’1t" a3aªjU‘KÏoÖ2ÜöÍÚ¦tE‹ä5Ý™¾ðO‹zëÇÈDMdGè›’ÁK¹XF‰½^ì²”CË7KB°w=ŒDŠKýO`¼5BýtU3}3ìyiùÝ'RêFï_îN‡üä ÇÆ¿ê›Š2÷qIHÀv±ípA(ÔŸEYLoý;°Ü‰ÛæÆ_Æ~Ø›n8çáq__è½ê©ïßn; á_Ü]¿¬ímù€QµÞå8.[üå nætç|‰ññø¼àÞ|ÎÃ;T”{”Ó—x‹ÍOx6|…/|†Ïÿ|cð5ðp¼«øÛq7.G!ü¹Dz¦ŒÊÓ»¾¸ÞãZÍï7coXô®evþºEâ(å~\ž¢Žf´å±oµ¥`+x‘°€UŽRÿMÓMÈø¨ôГ–ÿ“vœ¸áaXñf»9ðZ‰ûÀ OoãÔ ^Q–ŽWItEß Ú1q¿²7‡Flx5^k8¼Þy=v¼Yë§;ýY‘­.îº –¨]wvᨌ'ò‚@ 3óÔ¸X öÇsèÕ·/Eª™BSeEÝx-ƒ*AºYQˆšJVKJK©¤¥P(4 CÎæšºd"C<+IÕ^TF„tF“"“ûÏÑÔáyùq¨¯êŒ @"E9]¿2÷ÁeÿI:È„B åYý<½Ÿ³òçy;úì÷~Í Ñ„%…A™>Ð0Š’Ïé­ù²=»ÝT 6 #ud¬`ˆhÅF`ÂðÌq>KˆP¡Ì5Ó=<|Võ l¥íGBܘì)GŠ<çx¢KtuG&iip'¬4¨IÕbX%RЉ±Êé6IcŠ›‘ù; P #dnÚæ%)58ÁTTµœÉ«¥j+4™Ï~Ntô`È@*©‚‘ 8 rUÍk¬—ѹ&<"= î­´bB4‹.â™p‘Tc)VBʼnɀOͤ9#†:ÅÃadM¶_ĸ7Š¥êRË"ª@Šdº"•XMDvY4¸ÍP¸Mßt‚+c(¸¦$oÂtMxºákнpëËZrˆõä%òiØïty³Xk¹(—…×`\Ñ?#å(À¤Ï[‡;˃¬ô—~¶ø¡œ_»½ÚªoJÂ:¤<^°U·WÑ'5È@·ƒÈßQd}øã^ËÁ¬5í±Ýbqœ›Þµr‹­T“;Èqè¥C8cúy×óX¯p `üýqÿòã·÷£Ü$EÎ íз¸Åá•4o½ °(rv,¸¿¢à«þ„!Ÿy@ÛCö( YÁŠüÝ1Eñ?õCòð1Úûè_–9³ý φ?—þoŸ|ÀË›WÉ›]¯xà¿)þ×·znî"êÊö„vÚô÷K>ýòÃöóïw/¾ãþÐëÇÆ›FÁêýÎåø(§¾«ËvÄæ$í¨ŠšïJ?–GdG–;Õ?Àž·ÖZ=YS0ˆLd`#ñCK‡ì±u¤ ’0:nNøý» z… ¨'ÔowÜ”uƒ÷-7.Æv›7Ÿ(÷¡7±T4ÃÔ!-|‘J;h­Šâ]Ñ™·®]·ž¶dµ-& ïIòû_ból–M]AÆŽìàм*jZˆ)`ÅŠš‚–0&C&S8IËŠ‚™ ³Ps•N-P"¤”ta)æ"À$á{ôÈ+Ç ¸Ù"R¨B&"S#%§[ ŠD%Q£ÎæCÎ>[â9¾ÄÄ<8»mâÎîÙû‰Ó{0É€(TS0'G )Μ,S5Å –“­À‰™¯Å2 "ÊÈHŽiNS¹UÙ(ja%:Øói$ê¦MRÉÈ‘cøá„ÍÇ/jH¡­šF(#1DT#Ø-ºŒÌi’2ÂÅAˆYQ3©¨¢™óšÁpú¼)Â$U‚Èbôœ0&T§?ÇF:K*ñì_Uh3«TÒ̤¬¨U³b?Ê6 3!J`γÖ))L0'ÈÑU!pŽ‹¯½»^Sz¤GšX+µÔj!"d®b¡æ©"lŠD…3R\¨‘9†3£:)·ö!KjÞ,DL…³é2-ÜL2Ò«ö ÜP_Z5ižÀY“XE=p=óÚc톦,Rƒt¿>^®–Jš®†+D‡•'èïwþ&ì íQòF×^yí$Ì? IDAT¡ãaÅ¿®#+ѰAôMê§Ö‹^7ì{÷æÞüK±ÿ¸2Ë&ºÅ3·ýC{ªu¼”R·Ún!wÊcM4"Æo%q^ï>$P>•å¥eêÃ@¹¢—Xv}[†É‘w}=ÊÓÝÐc `y“~­¦÷;©¼=“õÊ ÊùŽu„üpne‡­Üî¥6Ë6·ª¸ky4À+ì³Sû50ˆS| { ]` ˆ¡ø—ð_ã¶àã›»öXóÚ®›²Âï0Ž?õÙðÿVzx•‡ƒÚ÷{FÝ|?žn> }žì÷ß¼è4¼«›ò¹7øÏÊ_lêâÛWc{{-›Þý<¼W౿•·¼»ÖãNQ Ô7ŠCéUú}®âÙjêœzÿVÇqH±Lú$Qϸ>㺻ץ€è×C¿¹êaÙTp¬8‰¿¡žðrĉÂORO!‡ŽCgsöµ  bƒº¢|òFÝVl†dóÞÅñøm¯·Û‚Æ*€®Ý0´ÛŠÚáç¯ß Ü%ŽðÏÀŠ˜xgœùù+$ðجǂûqé¸`ÙöÏÇx—GœñÿÏÙðçëK|þÑÝ‹rÛ¼µµõÄ÷Ÿ§vûÍË»Wí¸Th;½w¼ÛÔ/¶ã3;mñ·XÚ¶,7/j»åææ\ÊC_GØ ÙQöØ^ÑöÇ›+¤A”ƒúA¼eï]á†Ìޕȇÿ,¥!¶ÀH˜¼‘<„lλJ%Ù‹MUQ6Åæ‚XˆM`Q,œCîo®íаÏEµ”&Òbð])ú8Êã0u[2ìoS‚u«u«T”Zš…$¶ÄÖk=oËË‚3k±ìk]¬kP:2…ïS+¥2¬ %*VbŒ@GQ4S«B…Qr(~0»Ò¶HF.‘BN _¡)#泓ª`ÉÕ2„‘)ʼš?´Ø¼Š¥Á6´"LMGfš„Mb†æI.É2 ÛiÝEÈ*"D$sî¼cí W¸Í¾³Î–‚ˆ¨˜Îž3A! RâY¢–Á c’™‘H&9’L%4a#sÀ"K’Y„Æ€%LEŠˆ©šKª‘ˆLð"q®¹’!i`šÈ¬¼Q‹J›EgœAQ)Pg€±fˆ.J B­‹ä` ‚„V èšÆÊVb&¥T(l*ˆ2gÆ@žÕ?’ .“V¨ 5¡j**ªªb:±ÚU™ãƤ2$f¹ J´L’‘ÔîXá©Ù+cxœW&iV¤™ÒžMs™Œy_J±g «$I²Ã;¤I˜ä•Ñ…{#r M}dç³ÍÒë(Ë@WJFчŸÏ×§µ¯‚à)ÊêiCK¼W}0†p³“}ñ›°¨¥°DÌe°u”Uÿªl¶×f˜\÷p±éUÅr£ã«jõÔÔ[@_ E*Ý@ù9ð±è®‚lgÉo©e©kž·5n.åéÖrÓêÆ°{ôÛ\¿-O_yà½~r²‚Û-nwÏOþ°ÁWØæ„@A-c\·§æo_8êãÕc«Þçr{ɽe ‡¶—mÍÖV¿ÃÝÉŽ¹àÅáPo¶kUz_WÆér®úí N¹Z+cÀOmE[a¼“Ç<Žãø¸ùËk¬gC6 ‚Š|‰0 È8)¨zïp¾ÿÉφ_ýLz ¾¨xUŽ7íÃ+ÖÚ?Ãúuÿ/¿~øü£ãû‚_T¤¾}µà‹ýÝ«vüHïöÐ-RAl±Ù³nðÔòw.à fh7H`ãhwz9Æ‹;XiYZ_Š›_·%BsEš¼Óß××(¯-¬AûAÊái³¹¾ÖëGåôbœv »Ä¦À% èKƒ½Ä~‹my6*†Â Uçò@Û)LVĦSóOð*2Ò>bHØ (H4EU4Ûd| «¾­«µ—rk²GkØ®j¤þ)ATÊE%R~€m/S_ˆµ²€6 ‘LxDôÔsx‹ÜêbVL3 *È!bÌM2"éŒT‰"E Àù.‚ ¹ƒÞ ÆU×GøŽZ™EX!¦HÒH½ÙmêMeÕU òÒ¹³Ü¤„l;Â,µvy§›š›µuÂðÀë·ëïû èÍï(G\ÐOoJìË ÜN+Þþ3À[à7@û[àx¬‡=Î@-ÊÛ˸û—rœÒ«Ÿ’§„?'V?zRá{|6ð‘ã'úþa\O_C?;ÿ¦ž^Ôš€@ßa[Õp+ÇùÉrÙjn3íLy üÎ ¢!ïw®GÁï_ÑîóËSÿïGm7X·ý±ÑmS»ŽRoþú} 4ÞÖ M~hýíæúýöõrlŠ&…™@ nP‰y[œ+é(ŠcË{•sVQCÕkãw"§âoGÜÉ´±{e¶£iQ”cݘ-=L½´¶H-òBu—fYZª!wé>¨OäŠì’H£9Ž!ð”¼Àµí™;—](ŠŠ²agŽ‘Ã%L%¡©’n”FaF‡÷1&0 ¡±J–Œ­DWU f¦t$.YLT“2BcMŒ@zƒt€jŒñ¼`§& ªVµé rV6fȆ9UHIÓI ÊsÄ”)%LI O$˜6ÝB,ˆÂ4@¨ôBˆ-ZMJ‘ &2û1ÉS’ŽTI#D3a`!X$U­È³ì"˜¨A’Žs KENQ²6EV”ñìÞÁ"Zl¦‡r¨§Äà€'•V )sh4q}jÈœ’MME%ge"$Ÿ"2‰$*6¡ç„L…dî£KAwç zI IG0œ 3#$9DE¤™Õ¢KAÑù—Ì ‡„wÏàÌ 'ÄC9:œººdȃâѸš¿ª)Êm`¤#ÄW¨Ö,·päPï9i)ÌH^¯£_ƒƒ5KˆwO6õc«,(·”]5·¥×Ã(nkA˜ºÕ„…T£NÖŸNW\ÃV ‹iÝ¢/냯£œOµ:–O˜7…mÑ*R@Æh8IÛ€¥ôª8ñÁ仇W/Û“÷-ÎM,ˆ¼¸àé¼ûÇÜÃ÷pCHߢ.P`%ÞÇÑž 6Èõ;È×ÈÏŽù‹û¾?_QcFóbT+ß´< Öë(ÅOæxyÅîzŒzßÙ=èæ£ðø‹ ~öË+ldƒ/Ǽ úá _ÍÑ/À#ðGàð9ðh_A¿‚ÿ<È[G<¡O àâèOø¿lÏWŒŸöløìGzR€Ï+^^ñ³ï±Ô·>î¸ùúøÑklr¾ËÝqÝO†a°:N•{íW_°Žs–+ž |ù&ëaŒÚ/÷~ÞoeÁM“Çî/qùç_¢hõ2.M ¸Õ—µØ²oÅþAøOþÝÛ~Áú íz Ü z°éoäá—åxcØê3­;®ŠRà‰ñ KE×çÔóè 8Px*ƶ£05~«3’üCá'[öl K‘’ g@°Y&­_DJn µä¶¡¨h*Ø4¨Ñ¹*%CwêY"%¡C5êv©”"VñزjX§Í̇D¶”mîèŽp%§zÞ|0ßÑÂdÄ"½s5$´‰š©––º×\0¤ô„ÂWÊS!R˜3™BMÑââ—¾*"¥‚«–EQ$Žœ5Þ˜ …|¶H«ˆ’Š˜Ü†Š "玙p>ó®CÈ „…D¦XÑ¢$ÁB'ˆsJc(I¸¢(Ͳ©óŠ(SD ' J¸$dÍÿ‹¶·ù,KÏüž÷ãœ{o?2£+³»§¨Q«$ŒÛµ(£V ½•2 ¯o ¯ü‡y7ðj‚ÑKà „Ø Hjd‹­VwUE&“dĽç¼^\vax©æ‚«I0÷|¼ÏóûÁÀÉX·/_±:VÚøšnb&WÊÂÖ48J§`0ëz;Bà X…ª‘3ÜÒáQõ¥¬!ÁT$™b ò&­wGÁH"¼ds_á«ëO Bˆ‚œ’‚Ö@”À/õêîÁ&ä¾JeW³wáÎè @ÔiÅ—LŽ\{Û °ônáæä”LÉÈ`DaNˆ²¸\„¸b“6r¯,Da9$–ná5A‚AS(à Á–Afa‹çpp¬Òn#?Kdi‹:ŠUŒ&Sw~”éQ*ÂÅwFo:'ÓF˜|5o–ž#yÉ%ûsõ ¬S«ù!æßLǃûœ U @3¡`„J ú6/K’.[<úÞøÍ³ÇåÒŽ™{³CËwŸ6»¥–oä|üoÊݳ#tÔ¥b*È<-(ŠFxÞü å Âá˱5|'þ}NŸÏr³Hb;Ú| ûÜŸm·µw~7ÇvÆÜ‹DÇùŠñ-(#|@¯˜ 3ÐÆ}{[.¾­*3.?aÿ _?`ü~VP ÀÀ€=  ¸ã×x|Ø£¾ìøæá_vmø]bõ÷+Oyn ÷XpØ­Í»‡w»,¥Ñ-Ç&w…±5pCÎw8ÂöˈÖÏ‚ç@T<èîébwu®}Î_Ÿâ‹*T*^¡YùðÁìïþarX Âû)§ \S¸0†IþKÔ¼ Âö¾ót*Òûvs¬Œ"/Þ¤H<&ší•È ,3ZG $îpÝG¤ œÁÏÈO{þíŽ7?F¹°±».” ˆ2N)âXÅ:¢6„2¢é Yå>…@Â>·ˆ–MòG’ÚOÜfS¶¤ÈÐì‚Væ+)ÌRC@lN ¥zR¤ÃK õŽhÉkò[ˆÜ™xáRƒŒÑ m+Ý `J©! ©'Ú‚Db :¹ü6¤$†d(»#2¹’LŽŽ%b¶äô*2¨«“&s˜“¬J.–BÄ«e‚"Ék_-Á‘á Yºƒ:<öD¬E&d½r2ÙÀ™u…TÖè:Œ€$Yåf”¹*®}ͦe–H«Œ̶"[‘«.±n⓱NB˜à)AÚŠdŠk8׬hI(‡”ZxS¨ÖuºLÕÈ3½# ë*ÅIÉ’‹PfâY¬ç©õ¦(x=>auE2uQ% HA2"SÁÂ"X÷þ¢žÜ\NÁ=$–‰S†pr„Š‹¯S4O÷RDÉëƒVYs³°¤¦Ä„‘“8KÉJD,cêÚ5BIHŽènh¦Î^ŪVå”ÈLkÌÒ{´¥[³ r‚{'oég†ä:‚Å / •IäG(?À·Ù³åCÈYBœkÄ9ÒûSDq¸ÆÙì™à@ÙZÒr =ß²ßÎçOÔÉxŠV’% –‹xKúþ5—šgåîø[‘¯ÿÚ_cö0EÛ5+³ß>òö¸>RÚ—uú°VQfl ”œ0N˜:zGUœ*l@'LÔÓÝæˆŸ\í?ÒŸ,ó›e–bâIϧœþé‡ ´ñL`á®<@±=HGLÐ)P‚)N„“ã”øTã7íg÷匲`üˆ·_áÝŸâî0yÓk´+Tà˜Nàßâ ¼¹Á©âÕõ;”ÝW½¼šo‡÷ÇÏp÷/}§ô{öjÇîø½’týéÀ·;`‡¯*¬9@²üÐKÃðíóÃ|‚ =°Èþc-W\»Öº´Ÿ7LÈЦµõÚE¾CèaÛß½ê»ËåòUK}Å›Ñ+EQLIö]i%]ýñWi&ÛÃw ŽP"ñ®÷Ý)ŠÙíçz¼Ô»Ê/ïúòŒ³ +lFýQ‡Ò;’^]*ô¡f¤g7Š…JýTäLöG«›Ò Ù7e•…Á°ˆÅBPf(€–krºT^R{ò¹3=y¥ð&¥@'ˆ8¡!zzd¯ x"aÉš”`â‚K¡€Ï®lÌTDŠS©$`"'­9{Ïî` œ\~ˆ8jäe÷ÂnˆÐ—»qNags6‹ìæQ¸òªŠÊ$ADDHH"VÀRVÀ·sø ¸™(b-½eF’Ezb-HS¬INtfQ!& q¢S$’(Y¸0(#3ßõ@‰—~5œ‚àLF„„fHô .&JœŒH˜dä »bELg:¥–6¤+5޳bℼΫƒ4i`½t¬\„’$Ý"3=Ù]@k´>Þ *@É”À`\QxéXßÓÕœEÙ(ÎɨšÉ:pQ*´Ñ XI’‰9S—¥óìbL vH"™gNã xFxæ²nÖ‰VYsUp’S¨5<Kr)©ˆQ9bv ¹R1‚‘¤ë’L™-)8DòTkRU." ¦ôèÞsii­G›Í{h®¨ÐÒÑS´dNhŽ'á-%€XÀsúdb#AÇd”'Z¢i¦æ¹p ³ûÄÆ$Õ¬ö5qîˆvÌgò¾™—Ž OYN¨?„n’w ³ç·í>6Ý:n{îúsýÍSþŸc|3ÉW´ù¦«^?á¯ÎËóöû¿>—¯á†ÃÒ°b‹Sb°T”Š` zÕëGµWÍ¢îݸ rTÛbF™7{ʃ8¸æƒ(pL€B«ŽãÅñùñ àã«{œ!Œñ#Æ÷Øý9p\z»ÄüÛ ÁeB>ÁoPî‘÷¨_cx½ûRw?µ:}hh7ÿâó†oÿSN‰¿@ÿ­€Þ`yÀó·ø¸À^P:*¿¯öç%GѼ ¼•8Òó][à[Ø„¾ÁƽÃ:vvx%·o¸„«‹†‹NÏVKCÏzT@l+ÆØMóîúT7¿õºjTnceQ‰Ï¹]Ÿ8"¯'ÿÎ:vI,„Ê€€x·µD¥Þ¶„-Pdðù€%`eFtd{×c÷tQ·zìb»«^s,ò içî8}˜=¿CKàGè5Œ3¯–…h Â"€Âã7¨ ¹2£€‰kŒQHú˜°®Ý¢·H¦yÀ눒/’_"ÏpvsC,)&ÌLˆ_˜™%#&ƒqF? =ä°Þ~ÈÐyTÒD Y$­ÖΗâowyž™Ÿy„Á“ÙáEÚ`‡ktj3æµ8 PÒjXd#*´ Aƒ!%=x¡"áŒ|ñÒÚšÎp_HŽ ^blÁ”¢É)¤‘ò‚muZÿ©zU¯·U3©œ ¸¦+1ŒÕÀD±2ÍÕjùB¦]õÈÂ"ÆïùnÙ-¢¹,©†U@À  0È,’[ch}UÆ«R†" °ðŽnÞ‰Aʤk¦´vØ’¥( ]‹!†­d€3#<Éñ¢[òˆÞ€tWÈD" ’H]‰¼$!ƒqs¶¤ XûB™žÔô!`sølé4XTW摆lIÞé$¸B#Ã9‘Y€ÈdI‡’S Q@Ô£Œ¢â$”T%ÁáÞ›µ¥ÍÔŸ‚Ÿ’ÁeË©ÖÍ™I™Z2=–™.‰P\®8mè,sðÀÌ.Ï:trîCkéÿØ6·=$ŸaÔ|è‡þ p‚?ÝõW8êþ·qåèV®âu;8E\Îð?=µë-ÓZ›gg£†XÞ _w©íòÚŠ.òým¹9z¹;Mhë óðô¸A}A¡ãFAÖw©Ÿw™Š0Ë#Ä:WsmoGüSiß¡³šá Pƒ4°¢Wø€"Hƒ1ÖXzuL ^u Þí¾ÞׇËö­¼Bý·¨R°'øôoÀ@(¶ J8¡)N÷0 oÐʾhù£Z_¡Ž— }Aìÿ0Ö{| ×Àk˜†p>qxÂíghtƒQ ÓH,@I`VôÛD0Dð™b`üxÓ°¥ãFP¬ŒÜéÍ1Ýú®‡! ŠbËûeCusªÃwàï\¾vƒÆx–R¡5§h5p…_~~Y̘N è°/Cª{-¥ª{‘ƒØ÷c¶†F€ŽÝù³Ý}©ÓÐzFT3k}ʼžçˆvþëÏ9x‡Ôè›Å»õ!€R8ˆBÉ)Œ¢ÓlT… WIîšpóÞ£%æDãÖ׬¢•Y“84l °‡ekœg¥Î¼¤ªD6 †15(#غJ NAÏ…¦ÀÀE0iŽ ˜¦yúdA”DNœXf™žì@9k™Œu¯”“…ÓgŠ`§h.…%È=™DœE8«CÙ™D DxYˆVŒ¾€Fáî½GZ$Ö„h’;YCOB¦g¨RKOxR6ÍîŒ N¬ýàðŒ$æ\Ü B&V(eŠ‹6fâ¤d°uD j ˆ `"Å „%¸%[b >'GRM¬Sx0™ƒ†”¡ŽSÝ\ã¦%xÆlÝŒò2çHÎL$ˆ$IG°FiƒN¿CFQ$R„WK}†d†YgI6S}¡©3 ¡0W)&Cs#Z¹âÈŒˆ°BœFÝ—žfì 'B&§‹¯Ka7 š<%x%}8!<2¼€ ^ɹ@(|ÍéB3 ®žÕ¢¬+š{‡Í§à䣰“Èxd äì#9fW6!p)9–œJ™urZ†ÉFRNM“"c¦ · jy|J‰ÎË‘´ÀmOv° 2Q¦ƒ–ÿúyó§³¾NÙd£”V~ô©À­åðCN]ùHRDU.’â>œ¾Ô¸2Ú–©Öqðí™k~Åò§ ' Š0…Þ#¸ÇT¡oÁ‰z šÀãNi’rŠr²ägƉگ6Ã.§ÂÜ?áØ ‹¡o‘#\à‚`Œ^pfD¢Ž¸š€Žª‡Š·E€­ /8¬N3˜Z"äå|†{,ov{…6D›kmúöÕ}û柘¢UÐ þùï_.—Ž_Ÿár‡±bl¨-Õý‘c¿õƒ6 Ò116„Ë„J¿«’{N¥º3-}ìTßqÜ 4·ˆ–@ Ñýœ6ò+±Þ:=<{LKðBÀÈRM˾äg”e Ã-£‡Ÿš}èýú —ï@;dÑév«GÅ0í›”Oµ~§>£ÇêÒ¶‚¨óèùÛ³´%2ÈÒÐPQ&$!’Ò3z¸×B,9rUSÔUš$‰¢Ywb&;%ÏYZpo;ÊG§šÌ™L‰ 7§¥ÉsåFpe Ùz ©ƒƒ)eUÔy<§’TX,(¸zÈ`éé*ÁˆN<88-ÒûˆÖ èÎp—¬Êœ•@LB¼v©×‘rb5m",£»u7‹fáJ0s†#’zd †0¶L¶àH†'X< †Èž/¬nr“²$å üÉ3ˆˆŒÈ_|@IÐÈ”pÏ4Ç*Õà ÜéD‹r‡öœº™Ô85¢" Àf-©DZëf·›a•9£» Eu&h6D$"DÊ”BA"æt ¬ø!b‰¡ÄtEF‚"9IKÔk— IDATr¯dY 7ïÌ)ÎëÄœ”8EHE‹ÔHÎÌ$,Â,ssçtÎ$‹hžÓÍ2Ò;Qµn=iöº0k ©EG†'GZ‚8{p 0‚KFIx)ØÒ«Yôµ·ß£[óîFD idÏœ.$—Áˆ.§º)¼­tÁ9"•#ŇÚd¸¹ƒCƒ À‰­t”2 •#É8ù¾,H9LË;ÅŽ³ÄxË8Êön»Åëúã6×2n=r`—)p~¦Ç'y¾Øüò‚Žb 윫)W‹Ò®Ë?Nt·ÿªÔdá R¯„ž R†Ëýi8´‚ËÄ8‚`Ÿ8”oQºÿçˆéR:Õþi8yë~à§_¿.‡º Ú!èì5|ƒnBLðİ‚d´Ä§ (€r,7ïË€î8ž€OÀÕ=â Úa‰GBžñÃÿzó²ß=`Âñ¢ r±Úçq{®»?X/úñ³a°¡v¼¹Ç;¬Ž»o€¯î÷ø/Þù“ŦDïíòÏ ÁeG}F!±O94ßë§7ä£ÑmÈÎÇjÛfŠâÏÈ3ÈÑý˜gà¹Ä}/ Ó¯. =j?fÃéyªÈàéõÔYC€¶ 4‚ÔŽäÈs±³žë1.;•]åšÚ¨‡®ÿ-†ò7…!å]ÔGþÇš; ujG’€)¡È;ËñØH;Ì¢õJJsF÷…<ȉÙA–¢Ñ25ER2”¼{ ŬR*¥Bœø ê '¢ÔöÔ½P&Œ‡3ëÔ^®Q7 '§*ód<‹ã‚˘ âT2™WFP†gt´ôOM—íþ$ Õ • rˆéݳ›d£ôXŸb!YÄGäz#rEJ€•)ŽfÊ’@‘óK±,Ò-¼EÜÈ×’s&ñ  Iˆ…!!Aì(¡a¢«ç1Vj£e7I&M¨K¬ØA$ùêr`¢#Á“@âHQ "Z‡ÛXÛÖ,b¦äÂêˆd¦•wDRY¤”‚A™E´ÔiG]ÅzaéaIÆlk: ÆÈˆ“h…†¤Ä:¢'(±`]82(DΔ@3”y55GsGPÆB"Î<0Q ƒ‰ ìéáf‹›ÏÝÎÞ‡pE¬£ =Ñ"–îd^Ó§lÐ"à–p3)D 8QKrÏ™™F”JËdJO "š3[‚­ `fIkè©!1º^yJ°þœíï4Mp(e¯åOD&)×.DR$2Óó2»±%"ãT]gÎò#ªµD ó_2؇Ây;æVûóÆçSŒ`Æ q=¢TÕ c‰˜3ˆ;?Dû¿Ñïì—ï oŸ°÷ÚŠW{ϨxܱI@ùWàs«ñ¬ãÕŒm¼èsŠ °CåÞìp_·Œ£|q‡kø‚n°óqÛ¤™ãØšãló¿ ‚8jBôP ä9BÞáèÀð@˜|ªhŒp,‰±ðY¿“{l°gÚ N÷øx~ ˆ RðÁ±ûKCùà ãßÞ•äý~þõó_ãòØ‹¾{À/€ë‚ÚQð ø#ÁßßðøîË«Ÿ|ÃdÌõ×¶ƒãmE”w°òZèçÅ\âm~:Ƨ»9ö²)óem^•”É÷d‡<£ÿGœ·wü yØ3€¼_쉵 fä¾ÿ_>õµñU>‚A °" Hðù.í>}Øùr÷éõ_Nz9åfó €öˆƒ7Xà´î(w‚¿êwÕA¶×ó!Í!€(HÁegå'N—ŽrJx´ÁL”K¸ÇÆÁÌÊX½݉Ŧd ¨,”çÔ–¤# s¸;õ–FÔˆX\z›*¥/Y;Ó,rÎb¥ ‹Ï…˜Í„?)u"*Ê›¤!’á°nBA½¸wç¹§YGënÚºÕ™$•§€pB"2—hž‚Æ¥ F€©±X†"bvZ!gSV¥H–Y˜•h†c"(Ì"ºçì IH ñºÝ%â“ÉÝ):Q I“‰(=-Ô#[¸G§0 Ä„ÆÁ 0"ÄÊóY‡ Zu3,ŒL2)U’5ˆÌÄàÌД4I¬e„Ë0”ZTD’ˆ„µ†ª³v ƒ—ä™Ä¸€H¡!ðtH¤9¨%…p±+)‘* ¯µnO£tÊ4 ¼Ô¤ñr)‰ t„8ÂÈÔ ¶ G…ÃÂ=ÂÝÝÍ|1k½-­5;Y›ÃZfM&¬&Ô~r?‡-äúÄ=F#!šnå¼ eJ ±F Œ)±jWÉ2Iì ¨ä@‰%èSvGo¤PeVø&béýìéhîí1OF ùŠË+®?B¹$ M&&$Ð#)О< q++ï·…PÑ$:gîæ¬ìI®ðW—ë’ê’{à—*ÿ=•9 ÎbOíü›Gkÿ{ô÷qãØ€3¦è»ÃXnIš:6½]zŸæƒ ²ßµŠà¿¼¬\¤LµópôÕ[è€cW°“UÈÐ5ì5Ba èã1e }üÞú„£T(CqªÂà€’Ñàßâù |†ŠlƒOpÇ?xåøhø¦ã« ˜ùâ ×ð‚é >>àóoAÀÈÄì˜çÄû ø¾¼Æ°¶•Ðq˜ðŒÛW¥ý!{ш¿…Ý€î_:Óï…?ê;èçß, zàÞ{1Ù¿EvI;ãë’éÌ èo!7‡~û¼o~Ö@½úAÙqæO #úýáâç{\r>È#xŸÑç;NûñÍaX–èŒFØêX ¿Þ1Oç›_ZøÈ||í1•V¤ ¸#|?Ÿšqÿ’õ÷s«¹×åPü@ïkŸÈ´ÇT²L‘µ/爋†Í\4 ?J8÷+«[¡‰XAçœÉ׌¥R¸PsQQàE™„`Q…áB¢ä®­Ç"•¼uu_œ’ËÍО2'Œ@‚ èˆÆ.L+&šÒÒg#£HŽè­g3Àq9÷H y¦)EÏâ΂d·D#, õZEÒie‡2§(ŽÞÅK'b@=9À"- ‹ç&àM‘†q4òpÃÒÉR2‰)™Š(ƒ’¾:8` 9§LÍ’æJDÊUâäDDg8˜’¦a+²¶'À´z+Á@f–J¢1¨1¡–akò‰A`IBè ð)À)¥Ô©Ö"²7$.Üž„…ÙK¨ %“#„^Ê«±Ç(=Ș„E•* ³³¬b9Z³¿e]ùt«¼“rÀ$NÄ’©ÆéJFÑ„È=ÚÒ—¹ÏÝgó³ÍgëK›}‰^ã=ðÍküL!¶.i8‹#ŽŸßüA{ÑÀøñ=6X· ÿŸWîP&Ðô"Öyj@ÿæâð³Ø³”Æ·¬DV±Ñòè7ûáþ@_·ŒOV†ÖŸìx D"Ëc9£¼‚ü̆|ƒù¯€ El@‚ãå„å#ä±  >”Ð^ öÄ×ëºTs†|kø 7E›ä¸#l©·»Þ. ÜÛŸX¿ìý„Ãg WX®¨üÕˆäÉ+–š:˜”ʿ绲ÿQâ'ÄÛ¤1P#Š?U'df/ÌL¥ÜQç$áR𫼧YfHïÜ›CD‚+IíÔzΞ£$Á^Ìœä)¹ á­g;S`6ŠHxl9ÜI+f.5BÏ ‹hè^èTEx+ÉjIœIâ„ÎÈ4Àz¦%N)cj&ŽøÁîs7骦Yh²³{wµ^,‰I°"F™™HI"Ää¬iÑUØ“ÈÀ}íeyf$»Wf×=8Ck&‡8(@‚¤„äpŠ@Zzb…®Jx(µ’jV5å…ÀaKz‡V¹‘p„ÒZÆ"Eùug)Iðu„B‘BL:ˆì!”LÁ§èS:Æ< •‰@¬´d£v—Â!Œ5Øåëú@žé‚Á;¥u¸ÚœÄ=–¹Ÿ{Ž8G{Î6»µîܘ—A癑™,gj,&§¤×Œîá–ìä…Œ¤3?Ÿ ãÌ瞨0dHSÀbH“X]L%:C…8+«û¦,Ήy2Ô¹wsÀªD’¥öƒ79Œž1çB$ÁDœ “ˆXÌ¡Ü4º{˜»‡¸GúAæ;ÌØ_,z-·<7Tœ‡46¾j6ÀgÇìU÷y>Ðùß‚ô¿ÐüåÉöO èáŠ7„72dƒ¿A< ?Þ‘ƒ¯÷d`€ Ò`  ôPΨ„Íó»«çÝÿq,ÿÙp_£oÛø¦éCG?„aD…Æ.Ÿwù“ªƒá«‰Å5΃~KtL½« HÙçé`´7;à+p+ž*& h˜þã d‡>bz  œÀçÀ¨ðúnÀn*¥áö܃Ýcb¨ž€_).+@ Î7+Kûîg÷È^4 ¾¹ÁÏ€Ç{T çßnö(Y¡„ê°3Þœñxüò;Üçái¸½Â©£¼¿:;Ù‰z—ûƒ¸¾£ ï½ãS`+KÀ1ÈÃwŠi€ P_ Ú»W»|(}¾}~:¦Ý›³BΈÇÃ?ÿôFžµn@%("ÿø{ä{êÿU˜ùíPåñ¨—€•Ènç£.°G=¸Â:rAo(’¿‚Lœ¨eŠ-@ë©É#Ç!B(¶±ãóĦ±xáR)éL¡âÐ U§ôàÄëFœØƒN 6hPº¸§ykɽº_h”–µezFõ‚ðX2̲œT/Š<"<¸#ˆ!ê(MgBl(„„•«ò C!J@Ï.æXˆ‰WŠt†«$ƒ"A³ B£˜q~ /®Y(™ÝS‡}Œ®}á.…$Sq“´Õ‚‘ÌÊ !RD­êˆHR8"»0ŠP‰,™šÉæIîðERUHàJÎ.¤É=S€º(()R9Å,àPbö`BŠP)TDkЍè+áƒê 9$€¬T”«R)D«¥M#ƒ’2ˆ")IHY@Œäˆ$"¦&d: eJQQ©JŒ\¥FŽU§í}­—3±é=<Ò23‚z’yF$QoZ#!e¢X²µ<»£?“Ÿ©{D¸P®¿a¢H:U &ëheø§Ôß:©µuêÝÍÃysVœ‰X43èšd BAä–äÉB *Ê%°"þ£ÐçPS…¨*‡ö@¤8g°B—4\9«oL=:ù¬âG8YôlÅ¥ž0–fç¦Øa,å}‰C d~8’#¶—‰Ççaã°)šN›ÍÙ ,‚§Äíà¸ý¾§r÷ T°làÿ §×ƒñῆ3ú$D ð «B|ÆpÞ½yÞ}BýŸvøó©]ñãtîÛéHÿ  +4Ýw*‘5–ê7B2T-T îœ2&øÈÎòÚ‡ŸS÷з´ÊÍ  éÐ{( ÷(÷ ¯‘€P ,ßc°ŎmwÝëñ¾ýC€«'ðÊ, Ü_Õ×3~ºâ Ü{ôüÛûÿŸ§û¿h/Z÷xs¸/xzƒ«|úöw28÷¼¹ýí¤AÎ_ù¿{uÂÕwøäø(Çï  ^!£yëùp\×Ù"‰ƒ.ø¿¯Q\ ƒ ðDc\L8?á‰Á— ­¸v“î®O?´ú[ÌÎ(€/ð‚¹#|ÿ<ú'¸Y+ mŒÁÅr~•qÑß^žË¸Ü?ÊæŽû0ô8dyǺC-À-–£âÎ6¬Ó»b þÜP’ìžaGK”Dí :PüqjöB hƒzlÜ*r`&Ö`!ÀÓdÁ ©âçÌg§!²Wn©];±mó´EÛ@ ·ä„XøB Z,–åäoJÍQ©Ò³ô'mß’|vÝM±¸ HIDEª «HeŠDèèÏhKš›)&²,ªHE"Ó"a!>#žh8¦±…¦sÀÔ—h‘ÈþìÂM ‘4ªM¹wÆ‚tL¤S®½dÊH÷LØ"—@ÏT&g0:€H6ˆA„899dHh'‰âLr #@©&»’;x !™ÁDLµRTNëi™ÂT…‡"\ˆH“ZH Xc%‡Óª®PC˜ƒ3iF…S€"%±:ÃÅ%R‰RH˜ ˆ°XI…–ÞÂ{xðÚ`HPf$ žªÑ5ÌÍ#Ä—Þ¨CšFžÙ‡“­ŒB …hb›…x`KÖ*\þ˜t"œ) #4 ô6“Ÿ³G…t¦˜Gʪ•©†¯¾£0‚©P!bDo““ï ùïT/‰7@ÎIgçÌ¢¯É&V¥R‚“z¢Yð9’,‰šç)íQæv¦K É”ì¹ñð!_%ÅáŸäo9À¦Z‹Ÿ¸<î[<–ñˆÀÒ~Bé;`G±1=aÂTA1HBgÅæÌO¨Œr‚]à̰‚bÈQÏ@ rÔ§ýð\®—úÓ7õýeüzúáŒç¡þ²,xÝpqB! 8œùö©4‡Ò޶¥0D\k7ó m9÷wŽûµ¹t¸˜Ð ì  vðï$ê¾~Ð×`« O¿™ñ¯>ì­”¡Wy¨ |ómQìqsˆŠñgïôbW¨ åöæcýpÇeýP€¿Æë‚á_ãøõ¢ß¡ï0¼¾}¯GØÝ3ÞŒã|å#ú{>Þ¯ \¿Çîþçà~ÿr³—{ 8Ô/ö¸>ÐT¸ÃØ‚‘Q&TE0¨güÐqz@Ý`ºÀ€½–ÂZ!µwÊÕq/rÈ‚úŒÓËýá¼ “‹ySÃt€¥óF>}x}ÚM½Öï›N`…Ê;šwŽ‚¼ÍÍ–§!¥F6Ihªè@,°¼ëÊ}m‡Ì}ÒÁãLØ$Rx¦œ›ŸÎÂà$v“lðÞ…ÁcÕGZ F­–Ê&î" uáÆÅJ­h[æ dàR’»‘²'–NóI¥ SIFEˆ?r<'ùcÒ5;—Þ5 SÖ …%(~ð„“Á=,!CcHŠ¥„B,JO‰ú˜Å!‹—1s±Òº< ̧$ËC˜›qãì™c‚¨+w²ÕSšÄœêÁ GZ‡õ,ÁÁOj`…@&ÎÙ‰=Ó2-sFœÉÆfëßß“_ª „ €µQ‘XB ‰ža¾âŽÖê qee³©[ï¨f©¹ÂÑf°$)H2á©”Aî+)€%Ö;¨Dö€g&q8­G·@ “P p÷ÖúÙº{ËìAÄ…A”`iˆFÖyYOkÖ1<»“XQ¼È·‘álf‘ŠPf§ŠÚ¢$Q@j^ý?´½M$Yv¦÷ž{ÍÜ="#Ó+³ŠÅŠâ ‹‡ÈEµs´^‰A#-4 jAéïQËM­D€°•¨EnD–(v9ÝUí‘învïùгæÔˆXDÀŽÙ9ïû—æ*Õ¯¢C»î»ïÛ¤B—ê/*F•7Ä›d‚XÊžîŽ.ˆ'Ó¿aMÖJ¨— i|PfÉ@ÜÑ ä÷¿ô£Ð±òòU`óqÚÛ¼¼õh&9…G¬™Ïd¢žéÝChá\„Bx㊠’Äiy^¢uJÊ| F4‚‡7DºEÆ‘Ø\ÎvÒ™Hœ &'к®3:è˜ ðQ4(lâ1*¹h‚‰(C’22…#•˜RRtnqIâÜDf’s ”ÀIiì¼~Vüp28ÎdŽŒ³kôƒ§îÜíPOX†YϾˆud„¸ u"Š?ô–½›µ¥·eÖÊ™â@;¯¬"-²S Bà KæäL±!͓έ" 5Îé€ÎÞi‰LŸ L²€‚9Z1¾ Ì5(,¡Z¦‹Y`@ôlœ#$“gZP:ç 8¥9sE8 -õ1åfÔ„ä'%6’ç—8xDd‰p²ìQp)~À2À?ærAeMä€}þ·šàõ®Öéb}ckÙHA%8ðððÞLBñbi•AÙª€(aL-+Ñ ;?N=A´;\xݸ>O¿ógŸô c¬¶z.¯7ÐüVx‹¹ðüKÅ7ßáö;û!~™0|‡m¿«ó?­zMÿiäý _a ¹¸¯ôI¶>b0‘ :Õº€ýfç×ßíðåÄ ;¢Ù~>ncêúòUg4Á~üZPZ¡@´kÔ;<{µ=·ûVW«&Ëä3´û—·‡‚%wk›6?°WgLÜt´fX¡ º`:íÿ eˆ¾EÙ"ê1&àhx(@¹.ã‹þq}x{…Û-pà;àd`þøÝÆõ6j«ö®¯vx(ï¾^¿DÝÜ)^eµNxTÛ­Ý¡\cU Šdã‰ñ@ Ô/vÿùjÂQð¾a–ÛaÄÚw+Ÿ”AŒ¬Ès|Jv…§A ™ZÔPr@ÇþaÀ£¢^9jLƒýå²*:<9Žžö;GéK'Ý;¡\@"èøa)˜/v› à^áôv–­gyŸ7Ï–ýÅü·ùí'³ò IDATÿFß/quqºæädkäÄ!X Ð!s¤“Žd¢D¢"dˆº(¥°GXï½w3ÄÜ3¹®ÔÕ\dæ<ÊòNÙÔ Òƒ’™Ôc`ïC3å"ê„GIAÓl'>ª¬®Ü/8Æ-¶P‰ßGü{Rõø¤÷µ{©¬gªƒHzEhr !$¹4(!hì@dDÓ‰‚’ÀÞj™NœÊÉU@‘+æeuf@\9™’ΞG Pp ¹2„œáªJ,…XÓ’éÉÔ“Y„™ H„I$>tˆƒÏœ &'â³ìÌýŒœÎB ö øÀÆ‹ˆïçâ2%è|è aæh]çÆÝ]£«,‚  Ad’zÖšw 9OŒDº$!ÝÃÎÕp­¼³7÷\=Õ<œ¥™F\ Ÿ)Š*$ÔJÚ ”¦4JXH<²7¢ä¬-é‰`cê¬ÿ:–߉¼­øRã²ô5ríRÉd2¬fkðÿoÀsQ¾F  |0óØ­lû¤#DöIPò’§„xÇÒýt Ÿyô’eà$¡zbmÌıQ Ç@ï ÇÎû ' {1ùøq‹ñ„Rþ„óOòøŒæËËäÝ“O51¶sDÙa¶Mü‘øêâÜWo€÷ýö=°^ö-ë6¾«úÜt8ŸÇ¡çÃó5 ZKÁъЮútÞAJ}Šü}7Åïá˜Æèѭᑾ\—M/Ãùkc`szÀpCtä;~(õÙ¦‰‹¡ÔaWdÚøÎÀ;Ÿ~ |TP®;°`|ªeÓû€=W€¯ðïØ­ŸŠ¼¨¹ª?R/z_ËkŒ«ëqs·­@f€öæ+ b6|ë¸ü8ênÔ’wõôe=¾ÀO´ü£èÀñ+€Ÿ=ØÅ@›¨µO‡åôjG6µ#ÞÿÞuÜÞæÝvõ“²ÚÞè¸gº%æG¬ËTÏØcAš¿uÙ2¦â=Ê­;ú3$Á;†DéH‚¯nIðoú‹=ñK¶ô˵è\Ò¤;ϧ°ß÷"&@ÿËp‰•¢DìXôÊ· 7ÐýAoCPh›¾¬l Ü#—NÛ¶‡—÷­N›Ë‹Î;(“3©rˆ:ÔBÃ)2æÙ(¯H= ¥¤"ötóè‹·'7( "Áäû,·iˆùÔ]<;(ižK§Õ™(DLYªç@¼" 0H ¸È²‚IFô<–èNHþuäÛžXòRœj#™:ò„7")а,Ô‰\8)-aΠ’ Q_œ)4gXPTÔÑ.DÀc’ƒ…±pR$(%‚Êt6!d°df¦FAr¤ñ™ü#¡ªŠgµ²«ˆ ‰8‰#¸Ÿ³QH¢O¸‹FÀ,šÙÒ¨‹ˆ2‹“XrÐ9¢{.îÍÏGãsÏ ´¤»-èf½k 7êl'á Ê̳¢9ÑY\{!G²ºq!þá0žp I Fd,Ï ¤‡‘ DÉDgj$ÆÒD˜‹³à ·£úl9 ³j÷î^ÉÙeeˆ%3À+äj±BVC˜¼bª”Òi±´9¨¢°²Ÿûè"Ÿ åK¹rÔ\ 4‡ ‚dã?(éel6}ŽÑ{.J‹T¸pSëýØ'zÄ0Ã/¡q CÉ]ø}7/xš§§owEÔø5e0ȸüÊeG:%ÞFÛÎY½`ÏÙà^áÃ~v¢c¬õ0”¹ŒOñqïoWýö•B€êpìì²t¬j¬Ë G ŸÕOŒ— ò½’ò‘.#½¤BËû~ÿKßæ>ÔZi@gŸŸüÔ}¶ÀY¡Ùq~·}rm¨;Y¦h{Äç)‚ó |D#@˜SœS‚d  œÄ 8™ )À O —„„‹(ŸO?¨þ8™á’M(XèKç~:zZg&®TŠK5R$Qff:葳g÷ð$"$Á);²ÃÃ;y' 3²µ!ÌI SÎÊÉH¸e‚ NÄD‘¹$?Q ’BK "ÝѼKW"ƒ°ˆSÉ55²²$”“ !=q¢¨ð` +"(ˆ“B1“fåÊŒEq.k?'¾d‰]:ÍB+3zVù½h*FJª†Œ¤•‡JE‚ˆ“¨HÁ,ÖFácá‘È<Ê,r*+ó÷Þ=™[/±¿xÐ ² „à˜¢ÁçéxÀû†Ãý´oxƒ‘8=Ø[Ö}¬L*ˆ¸5…ØnÐ)G¤Á:…œø6R1VæÍ«Í8vaÛ á̆g„\a¡é0ÿòDñX¸ÜY­»?»ʤ}â«?Íç7ªcdz‰ïI~¿ùn:üæ­ül[‡‚«~ª{uüà–­B+¼€öçXf´¿ÀƒaÙáòùkP-Ñúûe¿¾F­ÿˆzµ‹Õt <îG| 0`¿qweUÕòƇ½áömw O¸è°ÌçrÁð ׆OëDšÈWð ûúC1ù«»ýWÀÏQ~¤ÙpÞ,}üå?‡ëÖïzÃtn¯‚· ®È†?ë¨4Ð íqÿô.¾,Õú ì›ýöÍÝ/?EÆU./xQ<ÕVu§9inéÙÖÿ©Î¿i×øÝ÷_áù¬ö»EP5EEIw¬pÍpAxt'¥PÔ†zLÈ©ìT'ðŒ˜K$#W»!Êë¨_Q}]ð]9}Îø1©ûý>¯0ûŽÆÉ8 Ö‚Û®[•5LêÀµy,P*Ïênމýojkc –6ŒÊd}…÷ñ놛ÁOÛ¾ÞPW±än$žÜšHåQ˜%ˆ™{rjŠ0+ˆˆ%,<ü\ªÂÁã˜ËcÉ~•9wrË5ªM¨÷2é€þ½±ÍRT¨ ƒ|Åü˜í}Q"^ÜøÂÈU<YÑ`rÀb9'Q©Ém tBÐq%+°8Z‘{ÎïSV ²` ÌæÜ#ö”å`ü‡äŸCLBR$¼;"„ºH!¸ö•Ì\…ÁH"æP?¿ñw "b ŒK†¥žmË‘ÒÁ*?ˆÏ•“ ifãTФ3áàÌì†èIÇÒs>öeîéÎ,’\À|h‰ðDÄ™¡×‘ͼ‘ €4ò…Ì(®I& ¢ÅÑ‘‘É A$°$j ¢‘¡WxS )ÇL¹^£øõ o÷|ùˆÕ=4îf¤ñ¾Ãõmþ+ÚŸì¨MªXÃèˆåÎHÅ&P6b¹ÄøgNø3½]Á;Ã4ÆßâÅÖW¥7§Üÿ®Þþj¼Áë¯>ê€_þÕ׫#Vý×xðY¢sú Ì8ìQ t€ À+<×xwwN ݾVØýx³À_àîª<•þìÕþýî¿þ0µØ°­XWH€þˆöˆ§‡[O»˜ê8àêa÷G°á:¸`Öx\ÇBº¬&Ñ ðR۟ק?Â~,ÿ°Þ½þb5'Znèp‘F1\Ô(èJ FByİšh¹Á¦cßš,ý•Mùá(8A šô~nÓ†nÔÛO+®j[¯6ô+é;¢I_½mv“ëbtǽæí3ÆØw,\âQÎoº‘½QônŸ°þï56c¢Ð’ë½Ô=ÌàÄÕ‚Cß¿š7W¨£1E'  cgœÚ]²i:%‰‹• €$©Ÿ[£hˆ'øûÁS£PòÁé^«UŽä}ºBVȘ‚„Ò•Be=ìYS8B/ÒW1n çròì+, Œ`^D#¥ZÏxÞ¦’ê¸H¦.! 9€f —C£êžƒ×ôb6fù¼óÈ*•™”Ù¢Ìé=Óà ò|õŒáüI&#êN ™:\zõD <"g" NI!A”Nªç16§t0¥rw"pœ+”™é nÝÝ2Ä”Ñ{¶e‰ÞLÈ4Eqr̼gvdD ›ÃAf’E&<о(ˆáT”„NÔ#‘®@F¶ ‘©! öÌ%óL·HnHä“XrvN Z§°L‰ÂT8#hqŸá'ÊAr#q!ØHÅ Rͳ@²§8V=³Óý)Æ£g˜ .g!(r8{™‰XÀ’ Y“bMÀ%I Ëôìþ|pIW„ ”ufÏLŽ`‹aövjóÒ‹9S00z©têN„ô‘©„Àž±½UŽ·¥[~?µ=–OÑËÛÎÛK‹9í{»í+,§œ¾›Wsû¨ƒötI#Po´ï•ÀØÖ( 7¥ìA·½ W@â»ÌI Bo+¶NKxmÍ{ib9ß0Øm…ºˆÏ–è‰ a ÔR½DŒ¿RþkƆ\Ô5âÓÓrñÙiüÓ§þÛ¡Ý^$V†s €Þ£lF†RÏ.VpAcüNñã­aÈ>™#ÀÛb[‰Ú½u‡~vB|…X€Ÿ]ïÖwöñuZ» E Þ­0Õ+Ô‚ø¸ü`@¿†_ƒ6 5\1¯pqÿ ðxcxþ ü€Ë¯§u6Üâ _½ØA§×¶ûïý†×€*à X@´{,_〟b:Cž°Â4àæâî„kˆ…Ù#¯¿ FêôÈ7æ#¾[µÿK;6Ó»ŠÏ-€¾/u»¹ò=U_o+AqΚϰÀø÷1À¬ÈÜyÙûà ;* ÄÀ‚Wy¿ÿ3 nʸíkÚ š'^0Ûv·¢•¬AA¼@Ç)pk4 µž9÷'ÓåK²í ƒøR†ÎïBÓŽÚä„’·eF‰_hþ1ŧFQÌ—Þ@ɺ!I‚äq0'ø¨‰$2ötWX:ÂÐÀ÷„5¥f J.K£’%ÆÏ™Þ&߯0þOˆ“£$Ôh,ªÿ7âÀ’\J=r< ¿ét›ø#†~´öÚ2a~!4]*~Kã@„*”/àlÜ¡ÚK-‰QP%ظëL`°%9f9tiþañÎègh)I÷€!Zà˜ få”ÌhÁæÂ®îLˆ FΚ§Š ûg C¥8e"Ö<‰–¥³þæ.aÔ9g7êA<p#7$’R™ðn 8ÁÏšHë d©ÎZ‰–áîÑØ–LInURÍ]2(ðÌtO— „"´ – À©òÀ£†@½K–Ftê„S’t.™ŒNþ„ª¯ BE%A™šÙ‚¢“;²‡[•fÛœ kr2êè:Rs¢sóÁ+s€òÜ<çu328 qe¢eQ.’F´Â¡ NG±‡,6œÜFK£d•!màlANoŒ¬Ôb$[jú'D–}›xÄãMl÷Yo¶Œ­E­Þ<ÐG´Š¹â} æý²àp,þxY~_åãdÓdÀ¥@d+TŸIë„# 8ß>³m"v؇lÝþ¸lÄ­ÏÖ—Áö¨Úüvl[{*«¡ýÍÂЯ?³»KCÕ?A^©»¸¹Pjú㺽ÂÝiü ‡ÿ1Á¾|Z$õn¨ß`° Ȩ€F ·†W'\Ô@Œ˜|ÀÝnóªØ\ÇCÍ'+õ~7|?%P¿@»ÂÅåtù7+k¡8–öMö[›~ú džÀÿñ X*j*ZÅIð÷ Œ€ã¹áÅP¯ñcΆ E½yW ž>$Sß}—oÐN(k "F,ïîeÂ\áÀꋽ\kôE|Ãí¶dà„ý1ðïC¹÷ŽõþÍ€çÇW~_Œ×ùÝZæDÁ’å½ï0L ô³úÿ]ô6q²Ýrœ.&Ð5p ;ƒTc'41€†áˆ‹½å;”ÝNÖÓ¨(»’¥keT%dÙìx˜$ Ç}ލ(={Ë}Êó…øiõj)WÌ+e]3RŸœ~}"lá…ý¦´}[nÉýï,œçNõä\œ¢1jY$’y𘩫v"‚û‡8=3$ÜiMFœÂæÑUÉ¥¤R¾¢þz0EIXýCÆWk5ÑçAá/@`ϺÛ)ãoÉá„Ä×mÉ•°ÚQôA«üõ@¿6D=t1g„º]f¿lÓÈB>Èj ®¬E4\mòF²)ž Å[žàïïÛÏ->WW§ª›Ö VA#¸aÀ0?àô-wX]£ÞA¾D*ÒàŠ÷#¾è;Yöå7ÈëbµËÕþøÇ WHG-P½%Ê.ûÄŠwÀkÅ“c•HƒtÄ8~åcÜ^#^—Y&؇Vò†±&ˆ¢ßý¨³ÀÃ/ † ª(ÀUvx1A±"HÃ(±eÞÎ\ÿ Úïÿ•ñÆð¼`0lKÅà lx¢탎À š(÷xݧw+¼qµàjƒ:¢¼ãð~l±u`ÏØ< \auvhâPplàßàt~‡Í—Ȉ(Ù¶i[Ÿk Ås„ |ÁkW`:À†½ L £ÓGûVÑ&†qñ„„ó®•Bc­R?‡i´ïÓǺ|ŸØ—‹R•ª -}³[æiaÀ66þs‘¼Ôˆb`ËNkK=,t œË݈5…!é(霣î-÷G+'ª‡Ä:¯6¼ªî½-¸Ñ¶Pej‰=Q`0ÏKæX%ЏdD¤ºòIq•·”[Y¦ ¨˜¦k"€'<¯ødÀÀà>âˆ{6´ O7X5 ›LP<¯xÞ°ywC)4Ôj1ô^€Ýóõô©aˆñð Ë€EQå;`ð„øo( úƒ·è?í OÐKxÇjÆÿ¹¿ý鈕î6uâ†/ Ë¿Aí `އ»ÝŒ‰ï×X¤"+pÛé±ø¡š×&À«ë锄"gˆ@d†ðíÓÁ®ëdÀ,¸¬Ï¨÷(½œØo^Ö@³¶îûîí¿ú¯"»Ìé?ëÍ…4Wˆ´E4æ‰eþŸ*^ *YK=Eù'Æ–å%õ+öÆs¥ÇRU°à¡Óx«,ÆdéUž0gCÒúÛø+mx¶îžƒ”£æ1bôpŠJT%¡ùþ&äyÖ±çeF¥^Jg¨PsYáaK9lsØ2ªˆ‚OµPø#rá8‘Ï•N(EAÔB¬ÊAÊ#ç^ÛgJ'â!“f8t ÇšüEö P(Ó2]ˆ£8ƒH‰œHÜ“2š$ˆФtUf6!Mf8Áøÿy{›ɲä<ó1³sν×="#Ó«²ª›-‘ ª f èƒHÂ# ‚3ZhÚÍßÓ– äÌN¾k 0Èj¤Q´DV=32>Üïù0›ETc~Aó/à^;ÇÌÞç 8 à SÙ1ªjjbÍI%K×.¥GWé*]© $½eT¥ãâ¨õ ‡D$†K`FÓUSí"Öa(Cñ‚‰kEF¤,‘&l4d¨u³A<Êá«Ä¢š°)Pï>dx;ù¨Fr]íÂÊÞ%(]=¤Z ñr7S¡… QÅÝMŠxòp©Âå:ŠÔjŒæÛö”Ä‘™‘¥‹Ôa½¥ˆ&E¬Im–ã IDATº‘Ìâe+:[J˜aè]´K®‹‹±Ú ¼ÒªE ÓW)'ÉÅ-«oÐ+¯µ÷!cñ˜^2é­ŸÏë¼ÖÔOaâk¦+iN2.é#¤}/~L6†îe$e'd´mãXi·"¨ïñCvd%¯¨ÃOLŸ1)*·¦¿i9žb¥F÷xHãÉýoNÎü°"?w°ù<ÛEÓ|dÜ"¯aþã²\îm[ДcÚßÛ!+*Ç ‚´jÇú†ûÄ—Ü(‡wÂW•7{ºí|ÊûÆá˜8²Ogþm>|yº¹ÀÊ[œê¥Ùù˜¨™sP׃ØQ®ùåÝO:ƒñòç=SÛmÓnÓKnµßßüÕøÛ²*+ÿá‘¿gO†é‹99¤÷í_ˆ¬¯ùBƒ tã®^U;FŠ!ýR)êBÕœ"Ò˜~ÑóU˜õU¥#1 Aºó¬œ/Ýÿe“#o#/¤¡i$¤hÃÈêX´ìŸ2ÝÙÎišjÊEÅM\=Å —:zïú¸Ú}µßã«iH˜,!2zH÷ÜHÍ»H“—Ëu÷‘úÐÚ¢‡ÏeÕ$Xíæá¡ÝÝ»ûjt‰!˜¼¸²CFG(’LÔLE’˜‹)a¡>¢kt—1$5÷¨!2÷”b<Ä:†Š âN Có¢]$"’ÖeDV§%ëÇJ-â™*c‘bf.ó!.=¼ÅxÒÑáÂC]íÅ»‡¯·†\R0BÏ¢TÀMƒR]Ý,¥)²Eò'UFóRסýÌZ›µu–GÔ$f¯"ç‰UÕUJf²ˆ3Õ¹h"™™…ŠXv&ŸCVm³–ˆUÚI|5÷4 uÖžËëȳäI²¥„ÅÐÞÂÎÔç>ˆö²ØÚœÑG}ÐÔ1OæéÂ%gLB2U½Eíãù O¸‡ÀÞú!:Kà Cp=„£058á'ªâ žHçý¢Tï¿zJ´³®É-R²¿9)Qx†<ÛíóÄöb¿l[Ã+›ï_–GÉ­*­ùaJãV2Óõ^8¬™Ç m‹O¼ht^¯•m'%Zb”C/¼…¥.„McÚsF—ìÚÚz¬•Qaðä<%ð‰2!ýöýíOå¡Bý~ï_äî%Zñ{œ¶éà™üyÿ¥×œïkÎàðÍ÷ô+Þg¾mpÏ×¼{Ï2w7¼=¾ë·úÀTøÜÐÞ™:gò‚ùOójÿƒ¿€û[€¼§^(­ïáO3Þˆ{*è·G¿Îý®ÅõñÿºÜß¼9èLº@WŠaíÝ’vôŒÜ$9Vne‹CÓ%_ÿŠ÷[>…m)•ô9ú Û{Ì[òqOƒXˆ >ÓeWÏ» ,Ôf8C–=ÛC\2ú±¿!Ȥ–ËñÅ^Ù:ÅÉ@'­ä3éÙ„Ô¨ƒŸàãàkåãÂcë¨ßêÜs:,?P§›¿¼ÚÅEù?½~ÞŽ_Ê_9¿I²¹t,Ùkµ"L¢Eâþ/WÿüËâ_Ö6×%æÎ듉N´ÓÝ$,Ð"¤fm”‘Fø®ð´“^ú˜ÇÈ6\O"14ZîÉÛsö‘Älì<ÿÒôµZêIÎáUFW!6üò–ÆŒ¨Š¨DNi„NXi1¤Œ¦îm0SÒFsmâ†L.æ>ûh}ÔΧÕþ}WÒØgùbÑK“æª*ŒÁÓ`t=gE’HoÑ«×>>:#±S±w× u5u³†ûH:Òðôâe¦Çb„W÷©› D\‰þ¢×†{òÐ<N—¦M55¬ªViLH(щIyA)A¨à*¥CFà®êf¨N w=‘êx„{?I?Éj¸F²n2\D¼D+¬¥ð¬ˆûÀΈóH§éK’*‰IU(R'¥jy´D›ñtnqŸyTGbç!=óŸ$)öb„¤…+Íçs¤´DN~á4ï«´îêcM¬/}4Gž5™e2CÍ‚ÑÂ"Öè#ª ž —¨tqO§P–í¬ÙM“…:Ä:äwÚ_EÒšÞY¦¤¯æv‘%%ICè„Eäá£Ú«ÔðV£=ô“K%%AÔ0m/úœªѤ «ú)EHdA¥9R%$ð`¬P{˜F®.Ò‡kÉÄ’DR‰´º×®ªCzä´†œVIkäA7wMde$Ì$œ3TuˆE[³Ô& þßþô—5(W莲! L؉çß¾ìþìÉùë·åý}yý_}—·ìõú0îo˜ ›0ŽÈï+¨ýÑ?Bmø}sék^ÃÏa¾CAàøKÆ=#oÿùþæuÝý\ÊìU +5±Ö}[s9—7µ”Yò˜öët aöîÙ!ù ¿™úï6z«ýÅò²o_Φ ý5²b"³Bpü»A^Ðí79?–øâ0®nbÞõ©x®Å„Ä»»³åQoNëñÃí4~H¼…Y¡½ÛÈN§vqÌõv»rñ#íž×\ –i Î%,Œñÿ-Îa{}#u,«÷´ßµ¿!þwž,æl½•–§Æúa8¾üo!K“_–5ɧI_ERºðüªSâI‚¡Öl`‹$SM)²K†c½æUE'oçnQ½ã=o…çÑ-ùe²m¶I³ijKj´¡©É{¬ÖTO/UtH".q–~ ? ÿ1Gq•ý¢DÖl¡Ñìô"ø ÷_½šÿ¸Ä“ð¹a/~{ª‡©êˆ¤^ºØ'h¥µÉkÈè¦&b“¦Œ’$´4v©/t¤@σO#<<® œ*˜Ô¤nªêš1P·ÔS99Æéè*îÝ61’we„ö£ö4\KBËñ¨ç“ŒÆÚÐð¨bÍJW+F$Ï ÃݺZ´°!E]U4K¢+ŒMuYݺtRÁHj»¤‘%KSœ‡œ%ÿ]ÊŸ™l-Dš÷8ÈX´—E" ÝtíÑúhÉ×O£ ĬªE¥§&ÃV‰j¢¡C´u_‡ŸÏVeT(¡ái.Þ»ö°Ä4Rò!CFï½õñazy‰{í¬ýlmË©»œ—1vKc :èëõsúœP¢Ð€´÷”¥QÊŒ~Ѹk_oÇ”B„Böu/~ȉ2ÁŒ&Ò™óþw¯9_ò‹-Û‚%D§x7úW|èOܬÛ#r[[(g¦‡½ŒcWjNõ7–~·‰[Q8 m˜ ”gR'ý:£í¤Ê¹Ã¯à5«PO?±)JìvS*a¬´“ë‡Rn.ÓQËíž·û¿½8üD…m|ýÈûŸšE´Â5i‹dR¡‚5ò–rÍtÅ»7M7S¯¿‚WÔ mæàwœ A1ì iaœèè?ßRÞP6ÿ(µáö×È °å'Z,åŠÿû =ñ¾ï¿&O¿-óÛ²YЗåe?ü¿ýpá7ŸßWÈ©FjM]Њí~ÞF_®ž|“—¤hÇw‹fó›çtÁL…¾a†‘:³"F ^HÚ}óƒ]£wÈÝ1ÿ ›säÖÓñZöãa¬+5 ÒØv©ñÞãÂýo^¬‡!s‰DÃK¼®'÷ÇIXFÌ}$ªËXµ>÷)§1륑ÕRˆŠšFR‰bÝij!ˆÅjîIÝ^¬O 5±ÅÌ&-Òc0œ![i½[š™N£eÓÙ%F²Ö!U§~–."fE_ƺ¢.Y¤Kˆg âBåçÆ†¸ Ÿš‹¸·Ôz„kKÒ„5¨øGéo¾jÿL{6’¥”aC ¢{wB:ƧO9j‚!Ò1OJNjzVùĸê=¼)ª”x¡™c]³ŽMg‘ÜÅ{H!½1(B„®¢ÂðˆÌšEÓ‚«vÁ\&ËVL‡GX$‰ó ô±Ö‘Û9´Gj«èÙM°¦Úr;Í2òÙ,g7=¥!‚sË~þ4Fŧ4,˜‡õª­I r,§E4‰¸Dõ¦2N½¶ûÇí¹±6²î㔥/Þ6©a+›ò•ÂWįy¾g­ÒçC6i¢t£ÉèôÄãóðG_ûöv˜ë!=ý&Ä펫…ùR³õdûxu°é'¡Àóoùá-§gAÀ+d45p¹*g›æòçI§õ3–µÉ‡ãtÏ }‹(¹`Š4Ê–ø‹Êø@MXf‚"¿Œ¸œü"3¤ü¿Úþµæ¼[v»$›Hæ±´j­¡?Âo¿z±–Ù5l‰@.P}'yÇ&»Þ4Ž£ÜŽ‰û-?ðß _;¯ž±ÌMÎURÒE´¨¤ÈÏŲúžtø£KžŒ“éÏ¿}) û—‰}€@ÜÓÎ+G¨OÌ÷ þšÅ(r{),mŸïtXátÇöW?íèŸï?~Ë/~Í—™9ýÁkËœ§j…4Ðkü}Kéü%\tþ¬í'ûw-®qÍvß%.Ëívbbïé°v2®ô`þš³ÒàéN•Äõ¥Ü£è/aÉòfïzhÆØðøÀ»ãÈábw³¡Z!JEZ´ÃÈïôºfÑfGËᦶjHý‘ö^/¼‚×ÁÏ9l¹I÷µž­–Ü^Æìýšž!1 ´Sâ÷@«„ùvbÔ+äoèìñƒ @É~Wä*Õ,çìyÖ”ûЯ—êŸY.–‹ç>´EœóxÜð£ñ0õªlä1üÙºM‘‡÷O¶®1¯#©,]r²¡b#4ÂÕÑ¡„™©ÆT$¬dµ¢gTÒºGôT0U\¼‡ð‘0³Ð!’ϲUËVÒ›…@ÓPLzÌÙˆl’eT»¨j©:'MÉÊL1ãä5&ÞEG„ˆØ(ч47i6WgÄœíUäü_£l zŒ .M¢ËPÊÈ*,¾Êìr,â6´‡ÕA kbj˜’­m…ŠdiÖz—h£›Ø*½Â=Ä…–$Rv-ÉÆÓZ gÖs˜g=™”¡NJ5 Ç+Ô‘Le63xcDm²†6æs÷ID=¥¬¡0i®[ þ§¢xk1/*âi†'Wy èΨããy2ü•XrÍ)j<›¸š‡gBRË2/Ë«ËiN˜õU8Òã4Æq=´¾?yr/­™“ºJ„o<2¢Ce¼„6œêC¤Iê-{gä‹jW'Y°íd¹[J„wo±}îc†¢uDí©ç ªL½g‚±jôˆÿxJþ`Òd{Ê“Røµ%Aœ4_œŠ6Óƒ%€V!s¾æã=ûm:ØL©2Ÿn‡3ü72/ea©_ÊñÕó÷Óé ƒþáô–ésrPb_ôàŽÜ1ÇÂ’iñNü«³öÅÔ(ã„«'‡×c_JN¥è¬Ã²Zèš|uÝ\÷^öã×Í„2®8;ä˦âZ½°káûÎÙ X„¿P>ßú»Ïû.y>ÿ]mÕ/|¹©˜3F‡æ×}Ë´cšé™ù÷wnÈpsäø%·à;êw<_s†åŽå—|öÇ|¸`MHÇv°ß‹¨Ä £3:®xg×™®±{Ö7ðî)í!¿§|Nù ‚ {çðøKæ+ÈŒ·›¼Ê\6dÜXÙÃ!îÐÂ|ÅÕŽYY ªÚƒO°…I˜ãwb ÁcÉ+§ÆƒÜ¡äÏ`¡¦7-Ò¡eªÐƒ§×øŸ‘Ž\ÜSCz£‰Ýië­÷}>èBrb:z!$;í}:²áÏÆ«‰‹ÁvåŠüÛËtýÐ9滟N|\35ôDžà’ö/ÑKê´ëìwÿúù[ŸçÜoÎë1åÛ1¯õü0•í´t¼¤)©ô“¸9C9»?Ù}ÇÕçæ›8K%R“´æ¾.ˆ³äíÈ>ålúbhf1Mª!"Iôe »˜2$©ÑFêW•`ÐR0\SU™"‹ë ™Ô¡«ˆjIó‹qA¤ˆ&š%)²$ÍCÓŒdê%ÆFz£5Ü•P†ÂЈâLgÉ«ŒKÍsù™ñÿÏ!ë0WmM¨^šÊE$S)ÉgcË‚Ht—>ÄC]•xÉ÷ö×ѨÕK…pù fd‚¨Ù¥£ !Ñ-ÒÉôhÕŸ'uñ*˜ºx =$;â1Ä»r²T=3¼)$™¦0)Êx¤pÉ}l‰™êž.CçÁV„1ZÄ?Œþco~VÍÓÔ&fÓì¡ÏÚ]CÏôhS3,Ù|±/__l/Ê”D¢Ót4z«áS?{_žz<3{̘,î=TÇ1(1f„ˆåÁèÙ±“i‹hf•m³ù?kÎ’?ÓäH ™ðNDêcö°0SñxÙãnŸ’ö–Ù0#)¡Ìéz÷înwKúþ @…Ow,×¼é ¦ ˜øOð³Hýÿ ƒ€@º£¿¥'dAOL”;ê5õ¿üÃÖ†ŸpaP…ƒåŠxóÊ? ?°ÙQ ™ñ_“îñý;lOZB€WzãôÈmÁÍ`å¶ôÏj.Ç«õGê{þkþr—¿üY›_u¦&ÎÁʺðÙàM°,·`±§†Ð¡gêJÝT‘åM·Ã©¶ïãð¿TÔØl@)™iP*vIÝãNjDa…ñ36Ÿ“&’Ããþôx `mŸ/¦7P¥Àëê?6EŸØµe¡–†Û»ÌNNoûy–ì‘×dOž {ü¢õô\s¶EÀFía©‹œsZ¯rÿMgüØô¡Í—ÏkqÈ#l„×ÇVR­«Ö‡\r—œòÔÅÎ!âf&f¢žÏ’Ep)X´!]i îê-B<¢ëh!cˆÉ ®HrM~ZuK¦yØT3k^Nl+sr ïÑUÍ’Iš5õ˜Ù^€Í5źÆ*Þº3Ì‚t—\‡çˆ¬ä!VÅ»]˜üÒäJÉ}äX›œÝÎ+å^íUd.ºO¡QtDTo­ù0`¨B(*ê’º/MC_ô<²Ššð¢Z !†‹ éuy‚IôRb²n&}¬ý’ùŠËÌtM) làKøÐ¸RÖ»Ÿ² ý÷ý›ù‡üHiL÷THwŒ·ØÃ¼§t^‘•¦äë—æ © Œ±…Bd¼ã Ð¡Á¸&^2 Q*¬—{6‡w/]ãgŠïO#î£~Ì›÷וüìöë-~µ—í¡,hÂ…~æô"Á(¼ZXf挌Øhž ~AmØ™õÌ« <Æ:©ryb;˜&FÂAaGÚ•T,åÑ:nvè%S~§cW×Ë8¨E IDAT1ÿÉ3„Ô¨7d±ùHκ4&û®œ(ü–²Ïýªo_5»`›«zêŸzœßw9ôøw:7¦á9‘‰ÚªÅsŒuáTÑ“Ë_Uß?“*;ñÏóÖÝR¤ÜO½§“rÊK*š7*SÕi›ò¬2i2ñá½S}éa#&Þ„!¾ª #ˆ1Üc€a"òM"ÐÃCm„;žäœÊC΋$S ìܽ÷fî`**ZBb˜"ÞƒaCÄ}ŒÔ\O¡8ªi)r`–ÕšSð®V}kòÊGÑTV†º˜¥/Ð6¢¢‘À\|ÈPÎ.D¤v[3æªá A}”as-é<ÉIÇBK¬Eú]eØÂÃQUNÉuÍþFc£a& iV.áZ\ex²a‚žBž‡%Ù:ËFTªÖ M/H¾aî!Žà’F¶k›{<[×hêe´‡æûΡ̷Sé)¿cÄ£ú/MöÜ‘’G¼LÉrÊb&&(á/hïêãäí±§§vµ6Õ:•d%[-!Œâ®ˆH/óÀœ“bà&³Ke}Ž*dC·2}ié1Å¥´ÅÇÒÍžL°–©ÞšÇF{²Fšº¦bªÛðìÍ»&ìÁø^ì€Oïän7Ê¥ó…ôã’nËkò²Ÿô‰3‡<¨/Wÿ©?^¯HìòLQŠÆ… »ˆI¬-é)Í‹þQñäÏ6ŽÇÓGίñÂE¡ù´·’{/Ú‹%üêRÇþ3=,²Ïé õ¦¦êpê5·“¶oÁ@a½­ç›¦kÈÃóˆì‡ïysà‚¶å<°•ÖÉðÛ=×™;üÚ¹—û3Õsð™Ð`›Ø:±27R;lÓMYj†N½Ê-åfäí¡M7Ÿ.wŸ—/ÖºuÆJ„ÀtP¹yUê×ðž í[À×ðþ Þðo+h‡39¸|¤\3îxº&îè/Ù:8Ç[öåú~Pz‚zÿûÔβ6Ü[ö‡¹þÞß ™ˆB5ºÐ5“®éw øtÇô5“ò “¾¾ë–—éæ•§J:íêó%iþ/}þ¶ w…_gvû÷‡Ï—C_ˆ ¦Î_‘Ê›ÎÒ˜gÒ„\YÁƒ³$4a‹ bœà\t.?±}`³’Þ0àlð¼ï9—"s™ ƒ<¶û>Î3Rˆü‹h;ß–V4­}äÓS«ÆÑ–¿Ò²÷8¨q“®ê6SÞÖËïÓ|Õ㜒õ‚ù@ÌÛÃh‡U÷Ÿ¢Ön«ê¥ÈhZ°ÞEªõ:¼J{,äÜm¿úṿëÈJ,Ó,‚Ô¡ë“u]{Zr®Þ礯òÆ fÙ_OÃ5÷Á£yˆöHêæƒ$ýe7¿iDŒ‘†Š$éàÞ½öÖÅ£—¨Ù{™ƒ\´˜£«8^]RxÄÈ1¬í½¹…zÕ1r÷ÍÚÇ9†‡…©šŠº'› e‹¸Gò~FÕ71±ê‹Cg훑6.³| ÑPš¬Æs÷ßqd|¡kÒ\Uˆ QJ·¥Où4ñ¨µR_?G 㫈ÅHË[õ¢§u’ ÃÌÕ›ú0d2D„ˆè!1r+.>lï6tRÉ!Y,«Hr5E»¸„+-Æ ª{ïžû :î+㪷’£»ªJZ>ÊæÝì¿Xd£þ<ü1:©n¥M–ˤÒJERÈèv‘®6zÔu]ϵëHÙdJ©çDJª/MA׎‹h°ERÅEc¼°`_„E”™MÑ”|q¹ ™ª©§*rêc.UmhŠ—4DòTeÔ©{taôWð+•Èü¢\ïâ»â|V®·¯vïb»+9§t#zzÛ„açNÌ´ é¤qH?ÜÈo«‚_E~EÝŠë">ëCY…3„ð½?FãS' Ò„Ê!ËMDÕ‘mÊlç‰?ÉüÉ4ªù CÎr|”\´ù8.ƒjÈô·xÛ·§| y:•ÓÊéïò¼A^ã/ŠžŠ?ïåù ƒÁ¡ÝÝtžÎw âòðƒÿO}¹Å•ž™@Œ‘a°4$gr×vÒcú½fÞÒ7ûuÎÏ©ü‡Vþr¥?f«ûx>¤…ub-ÇOð>g®wÇ—_íûkÈ|½áÃ/µä™ô7JZÉW¤KäWÌö–õžúÿw×서ïnŒ£s{‚ þqrÑ_ƒ¿Äß?®÷<Áå êÄ£P…| 6çÆÕé-<~Á]¡'~¡,¾+y—µl­þ¼½Ídé•Þ÷;çý¸÷FäWEw5Ùì$EõPž™2Ðp{aˆ¡Á@¤í…Dx#ÌÊ ÿOÞxç…‹”½ D^®E†Ç%i&‡ät7£*+3"î}?Îñ"«eYðÖŒmÄî"ÞóÞç<Ïï  RÙ,–ééÓ·¼º/\Ö•´#c‰®ˆU.Œóмel„‚G:X¤NÎI¨•³Â9¬9nÛå®Áx,ÌœíèŸÃ„:´º¿º‰—E#šJ$úa—¬&lØš¯*ë®c< ¥;'E4e¶9ïܱJ^ïc¤¶tÞjöÁ6K\ªÆÐ,‹×úì¥Õ[åŸ×Þź·’KëÚ¼w;´ê}Öèm®…9õô}?>O¬û••!”à1Ï›Pj_µì=Öƒ,Å5!K—ÞûÜTñh(–*è,ƒ'u%‰E7ÑŠRµ· æMÅLL­57ǃ‰Ò55RKq˜T•‰Qh£7kK˜‹ÚhM½i«6b ^cµtìñÔç^\UÑìAl0K–‚{hîÒÕê±×Ù’´¤&&îÈÉeè1†0¸ 渴@±pêmnþûïé¨ü9cG»jÔ:îf±¹»Ó®®¡Þƒ?¦¾hsésõ:7¿ì,M“% )Ådˆu«ÞìyÕ‡Rje–!ÒƒˆvÕŽ ¢ÁU=Šh"Å,ÌRj†é‚š‡Ú{é]‹½Šè õwh–Å6"¬»aÎP?[µÍÐ×Qi6–j~Z±¬“¦dÑ4,¦Vûtœgï„"«s*õ±XmH 12©6µâ¡‰¸zóNgQ¡Ó\ÄM‚åDP ÝiÞ*Z»µi^Ú0Œq•–UULé‘Hˆ}î4i¦eÄm‘$ÄвõÓ“ËɼtE£ÙØëÖTWñîb`Èôpçú<»K”<ö"No9%̶§¼K‘P@(mo®“§ÚóZ‡¡„!uËÏ,}-RX¥Ð2Pßr\sr¶žwµX·Ÿ> ¤1…1„1v†¹z+%íá™­„]È p¡pê°«rsjå›D+åþ»u㻑º&PÌ)‹„ÈÔocÝ:»¬„Ïß~DŸvót3Äò"aVr¬öõ®Ì”öŒoÏ_Ôm»Û=9Y—wèsX_re}OþšñŽú%ùéÄÆ)r‚Ghl2›@Ê“ZÓ¯y¼ã«Kxöÿÿlxrà>‚ƒÁ=¼}ƒÁókì9í÷‘wB«¼~üäøé—„D8c“ ðWm{ÕÒEɃå1³Îs$œe$wóùóë_?ð|ÏÌÜÂOœ #FB'V8¾A÷Øþ© Nkî#Ÿ€ó…õ×/‡¾Ñl¾ýÞoã#å+fð7pI;cUä“}ZÐté)xÈáÙ o÷º¿­F‰ôd[EµÒ«õrˆÕØY§?!;ó­fƶµeWaõÒÓ‡Îi+­Aß ^6Ã6¼iñ¼2Œt!¨wúÒcƒT 5¶µ_Ú©Mv‰Ž2 IT½©kP )ö¸ÖPEÔî[;I]@Ô,X˜‹Ø‘šMZ —Õ¦A²VÉ®\Ô‚˜Òƒ?­¼w&ÞžJ‘»…("ÕeÊŒ0©g·ðÔ«i)jHAš÷BŸYiÏ-i‘Ö¤¹KµØ=6Chƒ´ˆR›˜IT•%ÚiêÒª¶%Ü=Î]ÿwã@Æ&w7·¦%Ú£ðЉ±io¤o‘îq!º0‰¹.¸Usµ>x®H¹G)™ãØ-U sí³öšÅGz¶ª]*Åâäà®ÇÅS‹j,‰Jp+9ºŠD“nꢆû ªI%ªå5¨$X7ÁÅ U ÑŽ.-,[4T‰K•v¥á¿+ýÏíl(¬½7IúßÄ0¥0&mH¯Ì«vLÖ 9Ù‚wźÏÍÇ*mѦAKÐE験2á­Q“È1H‘ž%š{¯>w¡ES¢?¡+TÌÄ‹ô%XõÜ™´Gõ`…ZÌSõÚ-"¾îuEequ뮦©Kª„•ö®Ö‚™”U[þ”~LKn_êpÓ®W¾© &!'G–$iSLqs$á7n{·>ÒÓíã¬^mãvÈ A‹AšéÊB+~<ŠìÂù‘5,ï_>6åÙe’[_k‰Õ•*2×СÄ.˜$Ò6èN+jT‡2ÑiÊœ÷%²Š©­êê°/ÆÛÈ"¨oÛj^žk\pû6l?bçà;äKø”VHãÄSpÁȈL»± ÂBa”½ «å´§â¯ÏyžWþô~'×Ô;þ˜`ì°pH%Ây"€_>¡Ó‡âË>qöH¼Þþà.er$'°Ï“\nYïÒõöã¼»œþ Ù7…'?¹Ã[øË§÷‰;^g^Àëî¡À/¶ØŠ<}(]"/ŒWe÷‚›VJ<²Y•1<¤SªÞÊ’÷ð츇éÉ"Š%Nk4f‰ø ýû1eÅ£rPN•o`rdapâ°QÛHÌúPä-Y±¯Ð7thׄÄlާÛÁaú9ãlÂBxKü\ïüóhi”±ÆdN­ýþ4ÖV÷­“g’£Ž$’Ðã®ÂRþæ¶ü6üYÎdÍ5f]hÿóùi»=~ï¶ðQÔóÊú«x,fóà'ñ‰ôaàø}¹3}>Ê'I’h_bo¡W%¹d•àÁU²xLro‚}Oz𛵢¶èÉê^õÊü·Îw«û€·nNÜTEqkÒ»™·f„*TïÝ›Ô")¦1ˆ1™ÌhݬQè&îÞ…Ú­Žø‚­±(Ý¡w÷f©š.jÞM¬¼Ä¥mÕ#Á%4¼t_š5ñØ\´Õ?6_9#$IVé­·…¯’üŸ±]ùòË'LƒDH÷‚…Uõj k݈ jiŠÇ4{÷Ç,u¨ššú"Ò½†hš¤G¤úáAl…©©i8¹/EmhÁrž<¤ÞµAPí®„<ijJ ®*&aPñ'΢H#4‚ª¬²·ÑIµ¨Ý[Y:¹ÊÔ÷>©)”(Õ¼”®¹‹‹©µŒ‰Z ëVýÐ[‘âœâq²Qc,J Ÿ{¼l¬kÏ*÷âTï»6Þ´´‰–9íÄ€9§„?òŽÝ´GÏœ€ÅÈ|ìµØßT.H{;Ã~El o7óýæ+.ÿ6…?®ý¼ßÇs‹µXÇ,yÁæêRRª*;Uܨ{äév-ŸpŠ,Sº•‘!n¯dwÊ”çÄy{E²%«åwð*'ؾH;®îv—|èåž>à—”†­˜;Zé…Õ6 ‚-è4¥6æ~«eû®ïÎŽ„{Èäš!3\ý9vÏ¡îH¯è_R…s8oŒ•pGƒÓp¡;ƒÐr¢TÎïv‰›L0Jÿní›xJ7xÚpsiû?Älx2N8þ{2Ökà ¯ŸK¯x¯?‡-\²Œ¸P¥²ÌÄÄ?É\Ô}íXMþûú8î LJ’Xý¾î/ëîû[~»ãÕØò¨q¼B4gzË Ö—È;£{ç_yø¡2à¸m«DÌÒ²¿Å¿Nv·Ù­`ýUÎØxpz„3N¶]r 1CžŒ³O’\oõnçÏÿ¶=?¨žáAØ'Z–ÝÁù퉋L.„)ó”R=6æKÆ{Ò7„üK™nNZÉSZþ³q^¢þò,üËU ¦®éhé¬XÍkS*ãPBŠ'ÉkíçÁ.³£òèK•ò;ç{èZCöÜ‘"íAë_ ÐMÅT‘gc,N¡kÈ9é"TÑ\ÓÐ,£+5Ô1“*ObhéZ»yëÁ–1hNM’IÝiÔî­+Õ}Q›]Z³ªX3 ÒªM¤K”`=Úc§ã=ÚY Ékï-Ëli=uq3ïVâì—‹CËcTíÖs;1›ß›íB…^_>óÜúY–.Eòº·ûHÌ£æ Zµ7J VMݺö%Y ;V‰6{bwO .ò34Ⓠ¬¡ªÎ!¤.\E Žng¦ƒø€D÷h ·Ò[ñÞœS÷Xb075×…p¬O=bÓÈ4ªY¨*O,0Ųª1zHÝ Š/Áê)=zSÖ^²ÄÈ Fè"ÍäÄ^¼ 2Äà!*A{xÀnQZÝ­9¨&×ì!xm8N©ê-‰$R‹ÉæàîÞÃ…éªHrU¡8ê®,з.Ö–Á‰^ˆx,Ê<ȼøûSŸÇ®Üg;¡ù½RCjú‰±9ép4=@ò^-î—°]HKÏê95¹o=îbg §ïÒ/9¤m>&óÜ›ž*oüÍAø¥}Aƒv…d:[OIÎVé×ù®ãÙ] ¬ÒdU<=hÈ5ÐcQ¯Íö±#Є('â¯Ñ/à=8*c£œå]†ÐX„«Qv›å&?–2s5R¥í^W¸ãcžà¢L`o8¼A·Â=Ë/dµõ°k‚[æ* J§@Oè5ùöTÁæüuâËŽ÷-º…À»ÀgÛUÛë¿!^¦ÃX_4{ýí!ú&XóÁ{aþŠÿã’«GÖ•gyät‰)ç¼OÈË'¬29`”úŒ28Ìà×ÄÄðÔEˆy¢œè0ÿš=|çyò}‰?‡ûÀÿäüø_yñ5߿㠔[c[®wÓÏŽéùûtFOëvþðÚ7³0wpµxìiUmluaÉE”èeªQTzñE95ù{ã¢ûJ›ô¶àwê®uOâ$‰'kÉ]»ö:ô,#D÷®®¢³ùÿêþ²*¦j1뜨j"Ýûk±üäÞì±k ]+A5®ˆ™Õ»Er )²`¸$—ØŠHÞÃoMr÷ª¤$4¤àYëà¦.âQKÁDµªT{/õ¨’-‰Xn¼¹U¼‹ê¢~2û¿Ä6”vbèz·êæ&ÕlVt[¬H§̃$y’<…g¯UzŠ÷=MgâÑJŸ(a.Öø#¼ÇBXDjû›¢Qñ‡´œª§}Œ·ýœ~µm«ÝÍÞ»£³¥Ã¼×„Z ­¶ÓþÉ>ÞLPцf>aß?¦J*Rëw÷§÷/Ïv'éýNûº¾µÀp±VDïò,ðØýì¾MûØ®wšÐÙ¹Xâƒs©ŒwtàƒúÈ•¾\¦yŠzc}ŒÄÍt–†·5]îëtu–4ž ÔžŸÿÅ«7¼‚ &X¿ácxwM¼£<ÜÏ8(aAáï‰÷È%iDd'*%sZmÝK“¤Ú+VÏÕsðÐ=ºùPNùV)Në)cŒ9HŒ®Úz³&´¦ÍÝ›2Hz_SG¿®úØY›† ±“šéÁËâ:z­GkMÒ(š[‹Úr/Ùÿÿ‘£T bÏ>T}WeA‘´N%x«nÚ.¢9¸JÌ#Ñ[÷SÏÇÊÃÌ÷Ñ£«X@9s5o•ž[óZºegjĽ·þXìAkô´`fI‹>­vˆÕäÞĤwï]k †¨ZÞk Õýò®‡ßuI guUDúÅàã@Œæ¡Ú¢ï-üuÔ5ÅÖÚvvM?lƒ)ˆsœi{Ò Ô™ƒ3<’¾B A{ÃN_lßí71oÏ"å©ÓeJ›¬9]–˜ 2›OóúUf>¹áÍþ·'˜¾]»ðk¸ãœ]9ò,‘z$~mH „Œb$dR|™m3Ç4ßÝìÙ¿ãö5lîy„ï¦LLˆCc®îø1ŸÈwès¤q±ütá·ßðêþI>à÷OZÎ%§çì×Ûƒ¦_Õø¢ŽòxÔé3^}+.½þ+áxÝøJ†)‚èãH /]6qŸªÞô¾Ÿ—Û÷¬¶›cÊähÙ;ór.}Ê®CV†ê‘Ã7ä‰Õøò›û ¾÷~ë•ÉHŽNT¥ezf²îš’M›'w-²À„¬¸8ò0^Èü/ ÿÕ°;bÛFzŸ/~Ç/H!ùÇ[Yí:ðŒiâGg^ð™vÏXWÒ€œ£Ä±ý¢`—UBrö—}_ÝRê–ÓÎüeΞ%5 {‰·1l çJˆ} ¡zÆq³¢­„uÜ=e K¡v,½lú£¤ç>'+ÞŠ²¢5Ì…Ç@QÏÙ[Š3¢²y:õá´xªªª9Ø€Oµgíã´R!ª†ˆu¯&óȱ©†ÇR||&cöïE6âç‹ ³'ñpòÐDG™ôà&ÑT´Åd1ôÑZ´­+±°´œMR¼ðÑUEU¢JL‹[+ƒö+Ô;ž}¼’³3ֲʥQñ }ŽÄ,ÝM…dãÒÝÝkŒjÑÁ[Å-ÐÎsŸ\Î#ѹ¥‹ÞþæË– IDAT_›yà}¢Ði]Ì»Y[¥“¦(Y=P¥z‘‘Á\ @»HóÐu0²¦Ôó\ƹÏjë -„Œ¤ÚÝ–ÖâªAžžb°*}–šqº/G o翱õ¾åÖù58þ(̼”^Ìz'z¥Q¥ãíof sø42g[ùãÈSûíH"ßXSi¹’±¹Å¤Èìò•ë_w½]òöÑ>‰ºÑðÌ𗂤ìRGb’úÑIèh¦ÔÁÛºz°ç›cùëÎÐ8/»ÓçÜÂ<Ð×x•)ê,#ù$5B‡¸óöÔúòdœj¬ŒUFGÈ «]ÏDÛRÿnާ®Ñtiíçmj]obØ;·ÞYlçŠ)ñIL¾GèSϴĤ\~Åô† 3xù–M~<ÿìãq=¡‹Aà| å`ÙÔÎC jNLÿ%úFò+S®y}ÇÇðdMÒϱK$qñœoîy|ÃåÈ™ ļmmWŸ“ÖÔLz¡7’`ljÛÌ-/×å›;"üäß»jÿfæùÌØ RîYàWðO¯÷$ˆ¬+¥szõÿ’sÂ5«Äîu÷ØþÓZlÉËo5ýº¯ÿPý ÿß•pïÖÛÉw‡dÐ NtšR„œ6Ó¸éçùñTÚ¢ÔAvc¾‘c)%•žªŒÇöI8½¹µsÖ ±Á;8²zEûœérÓF5›.°ÎdHg0ThÊûÄq g#QPÅtë!…œÑ,H9l ;Sþá¡ñqã]æ•ð¶€³DbÛ•~“Ö%\_•°v®Äˆ>…Š…2rê 0°aOxNø,¡Nh·ç~Ãd«iÉAÞ°€<î‚m»Ýöˆ‡­§ÛÓkÓNýª$3•’”*ú5vC dçÆe_ýöTéFŠŸùpîráj4âcM4éµV—ZÕ{OJú¨á™†«ÞܬúRÿþ´¬R~ÊOAc]ܵNW7Ì[×fÞš·F˜-¸jšâY´ó±‹.¹ÚX{ð¬fšÍ¬ !ipMçaî#kÓÅô/¤!í&Õ£×Ñ«%£¶ÄIXÆ84­-¬çv6ˆóÄcô˜ú4†=FW’²JåÊ뚨ÔÃsä‘ö{/X}èú‘µÐ›¶àUæîJë ‰U½Ì~cΩH|ÔÔ%ŽYš*⪶W£5õj[ÍUæYÅÚ:ÍÑþÞ+%GÂú%§§‘¹#ÐéÊ™•èC¾‚Käœé™ˆ™ÜY£RŒä@èééϵkñF½ÈšñëjÐ6iË­”®<}bE4œ,†qE?Ðß ààפ»X …Ê6°9c3\æË”f¡×Ò—"õ¡…‰©,ÊØ ía˜±²’Þ›èÕ¨òã»ô+¶ïØ=-™ÇKâ3RdhüGß®"^¦sWŸ„ÕÞSÃwõDyG­ôK.tkSj§\òû;^“~ÂvÃ._Rž±üUãå[ôk†;ô[aæiÕñ.žÈC× w\‚Á˧@òÓ/ï8À…ÞÃãø5v÷6Îyd\]Óú‰°5/>÷·ÆoÖ¸\£ËÉÒ=uÏ= áË6~Vùg÷%Q¿ÃîɵÿòM<ŒOúDbümP¾oqS=‡ôq¿Kü=åf5ïMo;ã·º;Î7ÃÛ²tÞQ^P/Øåkòò9ón_ÀáWŒŸ¼‚ŸÂ6| ãSî·rÎ  óú-?-œnÏ:¼ú ÚžÚ®ÿ Ö+Ø|‹ üÞW×›ïÜeÉ¥<ãªò…g ß)|’v{½¡—áÈÒŠiŽ»œ‰ÊmhÛXÎÛ.Øuæ.Û—i·}Ø3žX¯…¨Dvzy“WåÓsN±\ŪºKBTzçT© °¸R'dÆwøh_CL*5-û.œ ƒ¡=`!òBøaæÓÎÕ‘Ooç~¾„iÑÉsˆ0¿ôãÆk²á¦¥ý0ÜJ" ÿD¸k¬WdžîÝ`´Îä iwÖor+"H-N­e§Ç›~ÿ0È©ÖëÞo‚¥xºñû}ø}c£í²ö!ö\ÕJ*æ‡,ÇK Ù<Í1–Ÿ»·œkîÓ Xð%z Æð>½ÕVzS{8õ~/«½¬e\Ï K—½%›L+æ˜m:õQLÓc;×ΤAqO­=™‹µ<š õH ÍÔ‚Í´PfÄi“DQ73ƒØ ‚iÏ&1ãÕ ÁΤ©ä¿³‹Q]̳¸hŸ½¤Ó{O tSÌ‹WÉæn=©àÖªÓD›`¡5— ’ÔŸÒË-[¬AúìÉ4ãËÛ =”h*ÝúÒ|°†‹t‰ê£wåD;ÐÍ–C_§ç%¬L‡#)ù3±_†Ž7x…‰56Çmj»1rvÄV„ˆvèPvoˆç0`#>ÂLØ9ÿl߃1 ·o;¶ÎÎËÍú×A®É¹,—uH»XÑáCËÂ)ÖHü%¾€W\ÀêsÊ%–˜ŸoÒýÆÞdÿ<åKÂTz.ƾž¾:ÔOVys¼Ì'+‰ç_ø+VOñÞ7?+×:Ü¥‰:²ŸáI¶¿½ãÅs.¦†Vâ+üËmi«å¸Vr ®–U#é(#,BHìá¯dÿÂy-é‹/ëÇ÷ûá éNi,ðºñEåî8ƒg0ÛëüöÛKyƒì[¡éD¸úœá’圗ô·€±Uv¿âèaÍßn¤ŸÊA_¾}y™ž§|ö&OÍ)Úý—ýáÏ…à%Ö±Ï:ÜÇv&yõÞó³ÛââK‹½[Ÿ9ÝN%þ6mÛÕ.œ“W耦?S~YúÖúnâFÒ´"¤´à'““ù½Ú¥øgÝb‰’¢¸[)&着қuo¡¬ºy7ë+«¡‹¶¨¢!kïæ1š…¢I.Ñh' ë9L!eiøxè~ryެc•<¤Úã)Pš™y§I8Y˜<4¤t°RB7Sjôì®QbÈ“Kr‹&Þ… M4h@4l‘sD¦¤£¨š„îCl =}p+å“°j¤ —^+A;S‰1è0¨$ï±554drLQ%¹ikn}YZûiDÏ"d9ƸÝ›î, BŽ»8€ÿLlÓƒ‰œYY•(‰“NÉ&Æ ÞjÌdñf¢+Oc I‡a ú(!‡ž¤%o&)Cî{8÷ªÍ†_ÖLH;™®íçékõ¿ø@«Ô]³OŒÐe¥¥Ñ†.gÖs«ÚrU!XbþY?hÿM¶Ã’xwÁz˜5Áóó0‚ÝtöÆm‡ÓýËÆfJiŠ7øÇo­2Ò0ǽâw´çØ€¥ý þÈòá@/×?ML™³NqŽüq÷O· qŸŸ3Þ'ÞÔÿ›··i‘,Íòü~çÅ Ðt/@Eï´Ñ|+}€nÐbŠB´F›¦qšËl‚!F‚™Ôhʪ«3#Ë"ÜÍÍìÞçíhá­ÒvÊV¶´…ñœç9ÿ—ŸgWo´@=`=óD‹HÂ2¼þ Ûåj£ž\‚Ñ]W“-¦RK›wùé!.b¸ŠÎÓ•½¼ÛÆã‡ï/Ý–›3ÆüþÞ<ð| dú¤rDZÑgí¯Lš"Á4ƒk›(cöœ;¾÷oΡl.‡q=°üàðÀÞÈ|ÿœä:t„/¸{ó‘¥v€ò1}¼z °¾ ^‘ÎØùÍ\ÆÉ>,ž>sñ1Iñ»ô°xñ¼_ºWWw½O¡À»DÎÃi”þà ¡ÿÍéþ×ÊÝð0~ÈxªG i€Ïwú5•c«ïp=Ò1 ÞhŽxl<é½8ó›ÖF¥’#%ÝÖ²>>-wŸÆãžHk¤ÊiÁq`¢¾C¾£,F§ÿæœÿ"â• äH½dþ³Ìê‰>ãÐO±ˆo#zWj:$c:6ÿãT.‰îuô_²ÃFd¬õôŠZƒÆÓÌùŒ ÆR(î>Uܼa ›vT ½# 8œ%d­Qþ- g«²Œæ)arnWe—ÝfZÕv¨NJuLŽ8,Ú¹êœü>i,­k®2Ô¾S¾Šr³·ëMºËáŒ: øK—©u”¼é4ø½VuÇ–r“ßúzð9x™Õª¦^MT¼ ¬ÕœçÙÖJ™¬‰yßâsRkЙՖÔkU RUÅûÖB-ˆ±@°Ø7š½¯ú]¶'“·±]×êU>§“É©ÒæäuV•ÎïŸ Æs;8ó2eÌ4¸Z¼ÈÌðH¬¶(¥¥Ü”,±x'ªÝsv´˜LÍæÕDUªII¢ê°rèë{•®³î™oÔ,—*Å4(5Ks‘*®*YTª«8Lƒhpßh­´f!—pšS>Ìõ;'YQÅê^Üûóó~\6†G?“úÂìÌ|ORCsm8SeáÃÒ3” µeuÙÊm|'â–Ž^E5V Ovy´š¶"!KŸUqõÖ…µÆ(áäíÁ•S¤Q*ÒÈe—mðuoîÓP/\ -y™jŽ'q)¸ì˙Ե—E,­<ìËű-S;¤¶8Ó´p1¶˜j¦7ä´_­¹‰ÃuŠ=&(ÔwÈ %óô€Ýl4Œ´â2mF„ÒÈ`¤ÕÆåñ.qyÅù‘¡GËœÃùœî¹Ä†¦Ñoi[äK¸Â¨¢3n†#ó»+—psëÂÍ—s"¶ìºNe5×\š¤­ííî‰ü]HŸy†˜–äƧÚ–³î§ÀèÁL6|0g&Þ7¸-üç´‹±´%í—Y´¾,ÅNø¤’Œ¢4áQ?D ¿ˆã…ðÉLCÝb_Óàõ ?ÝaÅ3óg]ùÞyCú‡ ù¬{™}Ú 1‡[âºóá¤w¿vÝÓ½Þð› ^_ýÿŒ‚ÿäÖÕóϽÁÍïˆTB yÒÝÎsmÌþ™:Áà9¿à“ÀLã¶§<{„ˆ ¥G/îû\òz1¶úqvj´J‚GÏØò‡¸2ªgv›C½Ã×µ¹õLÔeòKžÁL-RáÔm¾Óñßy>+¼üšù5×޵`‘ªXOôœñO„‰üÀ}Jqœ Õ]ËØ)Wù=»¿KkWÒê†ø:²{1æL»Ä"≅V±‰<Á®§WÌ Äûe¸³|†ô­z ­•Š´«µ½%'+׸+©ƒÔ>97‰~KO•ýÓËáèæ°ðgG1°ÖØ\jïg\³Å®NgýS¬•p“”¬at)êÉžRñJßputrç,¹ -¹v’ùÏœü /*¡˜-^ÔK‹NUÓR¥´:µSK­¾W±àºgTBP×µjS™ÍÒzi=óÒ$1õ½3q&½Ñgd¢™ÛßÎrfœ,„Üy4¤jeª%çCË2-êäX8•RÓlYÌO‹¼4V–mAtGìºXšç®Î­Ó“juÎW)?·º¯íT¨9›Q’–SË%Ä£¸§Žæ,Ò"J³Ü b.8’¥ÚZU¯Í «x#ÔÖŠ™”fµ”6•<—:ÍV];¨¿¨%[ÖšP·¯Œµ£ÊmµµùP9s\#‹¦ ×b\ˆë°2eRj®kâÕ9¯ªšœL¦Ú©C4ˆE‘H853kÇÚªiç:q^†æj3£Å#¤æ6®ýPóà-:Iâú‹Qu¥e’ݦ¼Nµ„ºvµóÚÉ©ó¥ÕÓÉçSrßH×\]¸ºŒ>ڜʧ6¯¿)á/íò¿×ì\è$,‚föÕo¸Æ‡³pC$n°Ñä-e½)¯}»Y—m°ë»pܵtïÁ²'_2•ÛÂúHè®ïÎØ­ì>òAo³Ùóã5Ý"§ ::¥]c Tt4GÍô]bþ+Ì7Èö–íýõE=§RöæwÍ–Qgª]iWÞNqËíòzwU‚le—2º%ƒƒç·Â39Ç>®qþðsÞ\À’××|ñÀ98X\®hþWçåà/ÎÒW;Æ6IY‡jÆ;>]Ð9^Þƒoâà 2œÃ϶tp ×Â*áàôSö›È¸àƒ?âÞ–pØâ®I§uòë¹Åû’8ñEæ ÀÜóüÎ<¬—aÖÓ5”û¹l,oá¾ðO…hÔL„UÏù@ëY®`ÁÿÒóâùMá‰àæ'Ü ß1ÖM©Ž&¤F(H‚)Ü$âWèÍmÛ®Ÿn¿ßÞ}zÓ¦m8ßÄn{G‚…ÍQÇŽ[ñk_•¿û'mû{©_r2·šð63tˆ2+A3öšÓÍf¿mIS¦Hw¸{Vg—Ç^x/·W™Å68rÇN^! N¹ ) lBö 0Ò}Nx‰4\Æg­a­«˜¡¹’擊µé­ØŽ²®9$²_.Õw²DCj~ŸçJ+„ãÎ}ËÐïõ³‰oÖÍÁv1.J=ùÌ;9X\œÅ~òÎb‚sLàÎ(Ð5|Ú©!5XÉxÔÿ©ïœss“ÜðTm“SGšZnÕ$y9zö'M*¾hçŠ8•ÉYÑVžylÐ5¯µJIÚÄk±*¾Cµøv.%›ßOe4Ôn°®5-2›óYÞͳOË©UõÊ{å·Rû”þ¯’×Óñ‡“,â|ÉÎŽÖŽjn)"'ŸýK±S,òPÛ¾—bIù(Q‚BÍNXèºd^ˆ;s~‘Kl…fÙ¹“iQ=hS™½; „ÖY¡¯µÌ6YÉ!µÖæÄôXÒ£¥ß¶ü ¢’±ª©6¦¤m'=ÕˆnÂZÚ9nYÚ`m¨tÍyçÄY«¹åäJuJ×Uç‚5WšÔ£«ÞõQD½ *­V_»P¼Vg©ø9—‰"]pÞ;måYêr1ÊÒBñ4/n/²o¶‘6’©•ZHu}<­ ×'zßœz KÜÓvR~AÙ4ûžÜÒ¹Uh‹O¦x§Å…©÷\E~Î-ú³þ‡ø^òÖjNYÜʰÖ¤æ¹ì&å”quÓéýâÓMlÔ'4Ý„6ž—:¬';k¤©ª\ú :!{ì™+µÃ+(Í#φ¾tßf¨G©ÈKTUj¬^°Ôr1ri £xWºVtöz”xz¤Õ“, *&Z‹0‹œ„*åI›™ÿ.˪¥™–ÚJ©sËfÁ)*BSIº˜y"›\ªo^çN¬¸jj56K­,̦×b›\IH®ö?AfŽõOO¢õñÃÒÙKR ©åÇT‡z"`VŠ™Z<Íf yùÑ×…–Ð"CË!W7Κ ÅG±¾JÌâ'‡K¹9sdÓ{.êBÌåÁÕÖä”kÊŬ”R§™òý;kß–ÚhЬa߬DpmsæÎ:–ƒ­´v¦C±X˜kâE¬¢N%øêL"†j‘Ö¼œzMÃy&\h1Xç“ó¹é\¦\\Tû.t8Sb1LĹªt°ÚŠ…&QëX¥frÞ”¬ÅZ§:UEZ¦¬¤¿G´Ž¦?j¥o%·¢Vµé²èâÔZh„©=ãlu?tíǼ<Ó.ÒJ±Ôösœº»•ìúÕZWkõ §n™ÔûÚOè)46³Žy fÙIã¯B\E°À¼™¿åííãv=wñ÷vÒÝKÃy𘃞|„ç3Á¥BA2ÞÑ]a~“Kièð vÓfüáã7l†VÈJß({Ûåîòë°`çoÈÛQ²À‡ò" Ø5sÅ^¡»Á- RäQôþ†aKwM_ðËcÝ"P;À#ú_ÁÑ–<8ø°šùðRѧÿ‚½B^7¥^2õ´¿§¼ñìIýÇYb_»x“.·¼ºI¯·Æ/àM…w¿½á¹Zü’õš¹ëÙyîŸ]d3üõs&îéƒô ¥Ó}³¬BÅŒ kЙÜX­Àÿðá铸‹ þÙĤüÀqq¢Ûã¾Åe¦(÷Cû×ËÕÍà·Û§7×»Wp¹³Ý ‹º±9,¦è§¸<#|·AÇ&·¾®?áÉÝõm'îÞBÁöÝÚ-ÖçCì]ºt,+Ö˜ gBo´Š:èÙÿ>öc_Ðߣÿ;ü}àB8Mä§Mùnt¯ ÜÚ—ëzª¿+ì"÷-m{çcj¿’BØ%ù¶0>Ý‚ø^Žî|cñ^ÛÔiœá»p+²^ÉÅòú'Cõ’ ¹êüÒþÝÎo‹|j›ÄSàqéd±*Ôt‡¼Åu´Šœ£Ì3 )>7ÚŽZÐwèå¦Õ«oɉÔ\%YJ§ÎW¥„¹wOøYÔ¤öGikÊä 9Fç¶w¤Ö²¥¥¹3¯f67µæ¬P«׋†ª4oÕBQeЉ^§¥ªªZ-ÙB­5Q]ì³² ¹VCÙÕ°‹íià¦_FÙ49S]–º²§Î*E¥Jr›‹Í&óA#~Qæ(û ‡NÎv44%¬f)E‡*}’Î;'æ²s+Ú¬•XO–‚39˜ëò0!®„Þyç$ieJeªùØÒ„{T·¯í¹à¸«’4 šˆYÚ(ò§½Óèû>,½,fq-ØDSg•êÄI •ð°Ò´–XkWð¾ïú 8ïcT4t®ó½6_Ô«&uÞ÷ÚGß©—ªÁ¬Y3EŒÚÈ…êj…FM´ôXRÓ]ÐÔ„R‚om¶ƒ¨ŠWü¿$ÑÞaï~U–‡Z>©³–½¹˜4y9Õ·ÙËù-uwæY‰Ã\aoޱA IDATayŸ"ƒ;†Áùâ†Øœ–¦hsCÃ%]å4ŒÇ¹{¾Qî>ái.՜ѱëhÛõ’u%IòwÛ¦÷ãp‰[z ThGX&É'bÅ÷¨glj;NzÛ–·ûʯíšPFæ»ÄéifùòPmAì #°ÝTÆçs³ØyÁn†/qÄD€èXx~*üÍÀë5¯·üñÄ@ÈøPnÐ@ñ¨à=>àoÐ-ìH[®n[T˜á»’vƒmi_Žåw”ƒ¾È¼³åWo;~ÉG8Âôñpwà?~qб›·|Aøf›a÷ì\zxŸy=ýNfì;Ö‘8žG™@¾ _ñ…çÍób«ÂÌ›%/‡*þ­nN6Ö„îY¿£Ëi‹»¡nQ˜oHkþÆAÏV q®t{º_£o?Âã~Êj=ºáN?sñ¤—×ÊCÏ×oyøÅë« 2Þ* µŽsº+S*$IÚg“1 ÕÖÅÖ'‰}—H$7梛èCó±“89­›ïòèÞ;ôœ rÈ=ÿGàUšò" z;—u{ º»óìäfMXÛb¡gG”tE½Fÿhç]bŸ…]ǘ=±g‚îÝJ¿n}¨î.ÕåûSã)1³vmý…/õÖ+5MNnÐõ/wøD¤–´•¼ ñ‰~N7žQ#ò U©‚6žyd8hÏJ;ð/6Zþy!¥\eî«H8BN*'wÎt^Z¡›3ö€Z½('+ùBãúëÚî[Þ´ÃHüLºæ$/¥h.¬fZ£óBreÖ0é¢'®|èµZ׎:ªªIFZ¬LÚbD-¹ºG¿U½#*8‚§ÕñI_[”DvÑŽa¦Ö.;­ÁOÃ\ÛHBçü‰°wr2­*ç¡:ÍÍd®®›BŸ+Ég…§4O!‰Y§nhΕ¾š„ÔEsT¬8+–›‰ è`m]ÓŸŠý2—Žèƒ†ŒÇãª.†Î‹9ßLO"ê Á¬Ö,-™‰°p.tÏzµYsM3®2TªS/ËNœo¼‹¡smÒ$“Ïâê5JšEÍÞJh•Òž|&§‰’ò´±2V#LiaWÀJHýŒXjÃÒ…¯÷u‰4ÜLâ¾EJÝÔ‹—e¹&ÄäRïgòA¿ õUn®•¾ÈB[C ñJ$œÉ2Çà ü¾xŸ$á$¤’œí£ËÕí²çØówsL*»¹‚³åIwç0oAŸí쟻p´3ó/Û¼sݽk˜R•À:L˜a†Ã }Mü’V0в“Œmƒá3¿ž(úÀ'Оv¢Ø1ô¯½C] *©‘1C¹¡m©4T¦ŽƒƒÀ;áû°ú ù=Ú9xžžå`𛯹„óζ,žã-ó5¥0C+h&FäK$ ל=°úXÄt„G¸þœá°?b¾F†SæSèÈÆîïùïáìcvås;ñ¼¹ ¬6_¸ñMD=ëF³]›HsÐ9×¼kž*›œCK1®¢y¦f¿ylã'uSÃØÎÇfw]L”4ûþiŒžÅô¨ÇŒ)òØó¦Ã.+“ Š*ëi^?åè¶IØFýñÅÐÅØu¶Íƒß÷Å6ŸzÎÜ*Ìt œ­ˆýÚku‹¤Ç9S•Câ±l¨gƒ_HŠ–cub-Ì>MýU³ý0o4ïD˜» 1ǸûóQ#걆’°‚©‰˜Ñdê;Zõש¾H‰2Y,Ns åÑ}ŠjÑiZÔÎ dñi¥í\¦¥}×åªí/ÌÑÊÆNc›ÿDëÂ\gÁ™ÏEÍžÃIR+ª–=ÎY²ïVÍ/v*ÕŸÌNÕJKZLN5¤(‰J˵îÕÁ‡¦F„EëÍ?Š?s±æ…oIk£óÍgG˜ªŽµ&¢wåPý/Eï ª¨KÍ.›tÝc^2’ÐÞ¤Uš×¤z ¢¾.=Á¹`êfuP³äæ´ŠªU´Ì¡Ö®µ&ÍKQ‘_·™’‹Ê/šûï¼ÿ…ògbרÒ9mæf*ލÅ–M+)OÇ–kq¾‰÷Þg&Ö¼˜x'ƒ›3%D Áœ '*N¼˜om˜½žª+ÎÀœhõÖ¢£ÍÖê¢Õ}µ”æÌn,¸¤.©F‘û©p²M±•[Ú]Öæo³Ü·@X2/žWü£Ømê)1Ÿ±\y…º±\S¸«å$!´({•ÙwÝùJÕeë¿™ÜznaN¹œvV Ë‘€Eªàž»È i÷+ãjã$þk“|N¼ûÀòqì t‚F=C;²¿o|ÖÚ²ÃÕ“£ävulkËo5þh{—Ï";ÇgN^øù\5?æ?Chs²éÏžæƒ.ZmMºÚü¥ÉPgp4ê”™›©HÑbÔÖ¦2íçIjé~¯j÷‡O‰äO«]˜½ÄíÔßKF§îò•#Z—4Ì^›_t“t–{=úجõÕڻì­JV:Ñ»\Åê7ÎðÍ_U§YPK™’ÍKËb¡Óæô¤vrZ½öž ­¯âBsÍð‚J“ØšHmâ)Áæh5{3«¨ítÍÚé¿*‚è¿Pß›ôÊ¢š)‚"ÕµÔ…>jQbsmÎõ˜Jfi½Óê}ÞEñÁy{óBð;íÑ!"MPÔ)j¡Ypâ¬Ø\r-ŨVMŠ5­YÛÞOCŸŽº«q'ËÖñù¶Y„CÃ23#9­UÎñÒB*PE P+sà :¹oñ›¬~åÖ⃻ñ–½.ïgÝÕ;…4{ô×¢¬] CÍù´Ë‡û\¨²™Æ3Á?›rmĉ ¥êÆòØ&â#Ñý@Ê´ó‚ÇÄé¥ÓƒÊ4óô\ÚÔ2fÏT8í9»b¹@„SäaÅöšï GxýÜ]:ž¶wO¬31ݤåqAôh2÷…MfTÈ<¾¤õƒåí-ùã!U ÿ&óù–õ–ö%Yèà‹Â3Ýáï?§çýçÔOIK*¤LýøD ˆgŠÌßÁ€g»ê+†„%µGUš" i#žÇ׌RçÐÁâãìy‚÷ð <Á?yn¿ ]‘pë¯9@|Il$¿é†ðÏ~Ïs¼Z^‡ÊF'à†nÉ)ðýHñtB4…!S&ê„dÒÿfñrçP}œ×ÒÒNÝò$q§uLB’#4†Hl¨§ê[þ·-¯¾Ü± ë‚’ß—Ý›º¦[¿îãeLK¥–_”'ÊéçõíP¶C}åêšnI6“9sò|3|0¿iüQ%RÁlLùîñ»ô¯^ó3’»ðù§óÅ`®(Õ—šÚ&¤õgÓúG5:KÙˆO›ùÝ(à""£÷?‰Þ^¨¢Îš_ø/Û™OÑ…’üÑRmÑ/³úG¿úºOÛ•ßóò‰0Œšˆ'¤PQtp¶Äa†>áúWÔ/Y\SÊFâ(O´Ú)=Åo*É烜œ<µ¼˜›j«][`!·lV)a§ú!'ï¼ó/\ª˜ä¢ùÔÒоñ²Ü•GUCn]–PƒÌQR‚å8%ìT©ÐW³ä­>ƒÛçºJþoÓ´<¥î¬Äé]á{:Å–¢[ 'BuhÛ°¿²ýZ—ÚìÓö»®¼è’ˆ‚öx/¥ÆB˾–A}4I…] ¿¨ö§%z¼UñNl°Iê©r^«i¾æ(“”·ÎVŽ‚šÞTÍ9úR /е‚•¦‰^qŠ”28¹Pç[êJòenOUñòA[,¦”çN%íðCˆN}­ƒ˜¤òÀÞYªN[Œtâcð.D±Ž…à Q½ÇIi­ÕjÖs¢^-x§]mÅjI”V…ÖªI«ÚOÑfü)ô;¹DX…ÐÍwâv¾ÜÌíÈyÞhyáʵM«vtµžê°/m#Óè0ÔQ  5ƒÞIýTý@ln58G¨÷G˜vÏÈ5†y£¯Gù’±„1.÷àiKÌøÌêx+~]}HíNó®K÷a‹^PMI‘Ö[˜£Í\«-¿#ýÝ>û¯Æz³ÉÛñxCÜrþS– <Š+ÂKrϬè|I ›ÓuxK|OüÉ’i®Ûسá' ¯¨¯‰ŒÊ p=¶ÀA‚t$Ž„W,Ÿžòf~¸Õ”k;þ­òOÌ/qãF®)e| `¨àï©éH‡´"&úBkèý[ü¯pÊÇ…ÕGQú¹mî3Ho°ÀiàIxnu itÿð;š ÷‹QÆî†PO€!±8ß ôkÒ×pƒ]óÕÝå"uÐÍÉ™ËÃØ@/6§0†LðXf5qóüJšfb†·‘gø¬ÀíFÇ]«I=)ø“çÏ­ Ô r,¤†+|Âíª­¡å»ývwÅý«^‡ûWžï³ii¼/h䣷¦Oͽõ çÞÄ— Ö¥ª©v¾NEæHˆAh¦¶9¡M>U9§…U­É ’HFhÙ´D®½ÃþÏÆO«ÎÁG ƒÊJ[p¢f•šÑškkU 笠!J‹ƒ+bg’|K¡7e'æ's*!šS¿rËà\ðÞ;_|?·Nã’ª%ùà%,4vw®߉ó₈ÕÚ¬XkVK-VUœ3¡µ&4sÙÈ”¬f8«*¶2ßJ¬µÍU±õB£^$o¸ŠÀY¹­¶ÎSðåL÷«úäDöä9;ˆ _¾aB~¶Ñ„M"x :ÌcòÃ:Ñfݘ¾ÅC]¢Âø"Ô€ÏÈvÁ|IKxàˆ~·Ž~}¼ˆGIbøFŸà+ê Ó–ôåféCî£3uͬM*ÓrÞç*p—¶¡q—·»xsïʇîk³Í’ñxÁÔSñÈðÌö)w+Ò{øß}úIÌ'ÆO^p+ýÿ€ÿÝb7ôÆ¢@ÃÝ ¯qÜÆ›õ° Gî»÷Ý×ÌÐnþ_/†çxZñú=üaÁÃmç>«›ÅãL{÷£ùô«W«ûyà˜YÄ#7ø j‡ -‘'¨P0Où[ÒWü¾€\=7îB »ƒ©=Ót"yÅ£# '!îñ_Á qûÿµ)ý§íaßÀ‹-é_9|ð˜>[¬ôøÌïèˆ.XðMvÆmd}¼ ~qWÝŽ|ï2—'xÂWbî>1m1 >ßþ†v³Kÿ%µ a‘q§…ò„õè‰Ôó+·ùIý¼Žóºÿ.¶‡d8ny}Íeá<ŒRH‡qõpw9§ÎXY—[ó|{g)]‘‡dÑÚàRìJzÎ_]æBñ…3eð·Ãr-s9;vBÙnÇ¿¾á »ý¬röýœÃqgóŽw‡Ô=M}‰:ºh/–óp•üg>,R]´JÐ9Èã¥Håàëµ›»ÔI3狼.úlj_q å}€ó¿lOôŽ.þIi‹CYÕy°ÚzGÌ?|ÞÙ@=Ò ]ÐVëÖâb×Rƒ6v=> ì´!ÁÍY» Ϧ¹[eé[ò“??}.‹CòËG#¤ìäĉxrOŽî$Ì.øØõHÙ×ê`Û•I—8ÛëêaÁo›­C~á›L®þOÕÝý:ZX ¹va9Z»ËVíƒØ‹µx×l´99onNÔR[r \/b3›L§æö-ìHë.$ià’X†-þÀÜ9¶ðM45OIòéÚTšW«ê›ýÄ!E{kT‰ÑB½f“”¬$Z–RÕ¬Q‚EÁZ/V\x¥âî}kír ÑD¼<.xç‚hÀ æ3KôµYZ.´NCp!ª÷ªÎ‰´gX„¥’O55×Ôg§ sµÒL¬zªZi5VUé<Åš05»È1Ÿ¼U&ÔÊÆéOë’ÖžEMN¾òåUk/k]´Ö_©iwRvÁÝ£, sá4S¦±ï~.ÖèÈ ­µh·iÇñ¢Á§Ï–M&hÏÛ¯17¸-Â&¿óŽýÌàÐÇ ß»ˆ%Æ“GJм‰Û1òA€„ñ‰;™“¤&µ]Òo[åêéåó¾9“-W×´r[kJÀ߉튻?:Ú‚YYU–†”]œ¸ôá¯%¯Ù½œy".ð»ä¢|ˆ ð-y‡N˜'†LÚ¢7´íZ·k#FÒ¾{¶Y°åá7Ï‘¯¾Ørþ¼Øqt=¹ç2±uìÖ²X–™w_õ¼:¼ö¼vü1”‰sˆ ZO0a'ä-ÝW¤W”×Tx„ò±"ÃÇ2áÞÃøƒgÐ)„ÿ`\fÒ€ßþ½^þ»íè~Zíu”бY1þsð°*ôð.í–_!¯Bïò>잔շĴs£ˆo5¶ÃÐûØgAÝÆÕq™h`Ž0à–kgkŸ£{L퉋›_ì·ÜY>Ý¿“M-£œ¨`‹]Œ(½|Øôv­õ|!Ý©W'¸RÉ’à(Šsæìõ‘s±’3Cl6±*:gË_¸Ãëò nãíy[rÚy5ÿõI¿ïXMeÛDÅ@UUaBÕØ}E-6¸1yœ£Ú½b¿‘ÅØã©´iݤ«87ÕzØûiï«çpHZÒ!S»ÈtSqÇ)ø‡ÐwÁ-Å;ïn6;¶¥—K¤Ã_f]ä¬×” ,Á#v—m×É/BܬâW?Ь™²¥Šµ.—¡.¼Šy)Q(E$ks†•U®? n‹„jÓ¡¶·%}[ý(•Xný#Bõ¹ŠÄð¢“«à†¨Þf#©¯fÝ*ûg»êÊúe«/À7)μóÍ—„Þ$š/Y“´©†œÄQ‚GÔD}Á‡BõRBmÎV²6×[0 •jWÞ­ÅRÉ¥Õf*V¥¥ŠËEQ/ª^ƒ§M¬5kFRN*G«EÚ€X«¾jÓZ=Åùê¥b®bBC¤9 -5§SÒC’Ó¢Ö¤d‘QÓF\ÐkPŠ–MⲆO2CvAš}’JBÐç‹sEO´ÃsOѯÓjh¢MO?Ëè¢ÑG´D”‘1Ù··úùZ.‚†»»S¾ŸNÿ7qïóÙzæy~ž÷×9'"¤â¦òúúÆu¹³šê&§IHf“˜¢6.šB3½2½š¿o3Æ ³iŒ0g1p!²éE«‹êp]û¦RHŠ8缿žY„ÔU ³.k¥¥B::ß÷ý>Ï÷óe>ôp}ØÇ?ÀßúHJ?Ý÷'·äd@ØígÉR0B}=÷gòºu·mD"Üãaó´ï=«¹_Õ´‰Ò²oùµòVÁÑR Ó ‰&mÞº¾fâˆ Ü ³'´G¼Gפ-é…ôš¶Ò&€òžÑoÆ+oö!Þ†þÓzó³mº"T˜½%=Ÿ®xµgQo)Ž–õgÞíÂÙ“×é­=ûÔnÞJïÁWL÷léHó€î)>2½À'x ž÷q ܾÆûÊk&OQ •wO\Dî`‚ÁâŸ_>·¼·æbËòÂg¸óyèö¨®bÓ6k9T‡•/BvLÎ_ʦһJW)Ó·Ï{°uMÜ>ǰo˜–›qÞßÏéLïN¬ÓL± Žò*Wôá»u¼Øb‰Ý·…¤ô-áÎÌ%þF®˜ï7zÛóŽú‘ÿ¼æb{³¼b™7ž^äÚ';ZÊy4MJô>!ø–ÒR»M>Ö Äb’—°9ß;Ï¢°Çþ®®-n&6þìLÿò|œ›cë'ogÞ“]µ…|,58ëÄ£Á°(NJ%£Z5NêöÆ–ì.£õ{oÝ_Èo]ø¿>v~užW󬩶ÆuªÇ"SÔ"Fx-öƒ­75Sœë‹¿žmÄ:ÈÜÃ÷´k‘D±¨ô%¾¶õƒÖ¤`ðõë/MÄUÄ0e8R3æˆôÏ^K„ÔFÑÅK Záó?mF€· mqWŒ™éaËÒKÀûOÓíó‰gßíT÷O+á~|º¬Ý›ôÎïl|øÛ¶§[h8Fi£³)J &PO\3æK¬']a÷È-•²\åK?¸ë?èî‡ã …T!2 Â]ØDü§X‡[x3|µŒþqv•Ü~Wo±k‚§uÏCËÒàðDèz³„3ÿŠÖül¢¹ë——vZ0Wþ¡¦ƒÝ8K,ŸÉB”þA®g&6`‰©IºìÍk–-s%<áGÊGʆäHàr?º?+¤W÷¦,J—<7 e4¹”r—‡™±^;‹ŠA(J±EçS¦>¥\gSò3W9þ¨êÂra7¯Ô/l˜—`cö³û’mÉ¢“Z3­N¥VuÜÔØÇ€‚/»Xñoþt·«W¸ùãWo¸nÍÎ77ƃ#Y"}™®k€‹Ñ`Ó’h¿‹ÑßæÑF¹ü<ž_<æ +Öµ'⪑d›h«QÛXgj+Áë³-“‚ñ—hJ•¢Fôç……æV'[õA‘„KÕ®˜8ÔyWNƒ5f>vM‰6&K2njªok–Æb]¤ >pXÙ¼4î_-‘Ÿ“‡à½µ9©Pˆ9M5UL°e_`:‘&ÛP ÁÄ9qâ+†X4•:Ny|2Ó(cL&G—¥NEˆ5¶©.˜Ö¯V³©ÑŒ–ì*ÎF묩^j1ùXÅ9©x.Nz|2ÉIÙ¦ )΢£-cW‚&Õ*b³1#f›EÄ[_Š“b´äZ $d´u²ZEl­F´hÎ%¹<Ç?ñ×ã±y˜¹@4YOö‚¤ x¯š(;£YJ¯ãuµv²ÜILšf¦ŸgRfʸB¦Œ7ãÄãìçÿ/Ýmg°3afÁ Š›°™É¡g¨Cu#ç¾– 6Œ3ñŸÙüÚõo\ø›û5Ÿ¶¶ý©f€ö”êÚb¯p™W0æþ‰MHÞç­š4¦å¸xóøÍr÷Çü¨O\§yOÞǻߥ<ôÌ9µùÜ'€æLßr«5+8û!â@øœ©#gG¦=òöKZÏü ¿'¬:Jà‚Ýäñk?-—»X:Úü IDATà˜ççCpYã=Õñ6ð >z>®ù_¿çü|Ó ½ƒQ`Üéãò1÷fØæOWü4ó,3.¡{â’'OI˜= 8(МƫðçðÃ$Ò©¡ùïß´ÿÈ?Ý£0y¾H\í™ñvYó§Ò†ÿ©xawó’„«ôÇ×;âý¶ñ»õtññм÷‹YêtgRÈcfL [Žï±—´ŽyF!Á¸^áWGAÿn`:` õÀ<´8ú¯šâý–ÄËýÇ«_¼eó*÷_‚@Ü2»"åMõ½±§Ç+h‹,0¡á'p?2"ü³ˆÛÞ(ï7C×ï"3¸ GZ¨1ïÆB^îRÝ[º¡€Š¾GêHhøíÛî÷’wqñ± ÉÞTòq’c—0Úëí©­Ž®h7óô¢Vƒta2RâÅmŒíƒ»D§˜.ªìfD7~ÑØ¹ÙsÔe­?ŸL>|—;ãnDoR">näc?[ gw«Æ¬&BtQõÙ8ŽJÑ ¦÷~g2¢>{—C8†.ù ¸cEœÆm­WÉ¢í^‹uÙÔèmk­†b´Ò„6i §b³ºcJ¹Ö2Y«Å…¢¶”4•Æç )¡fË‘„¹+Í×¥qÅÌrÕClÅ4-ɈǔV5JÕ‚LOM'˜àTÆQ̯†ŠVK]»ÌÎZKá1’Î5›±XUm޹¤ê°AÕŠŠ­V‹žÌîZEŒŠ)hr’NSzziðFªµÖ öÑÙ€Šj[+Ö[‡'Ù‰Cƒ0ŠUuSu…"5Úú$à$MË0•H*þ1¹Zm“ÐAm‡ŒæÜZ§Ægç£øl¬x錸*¶ŠV)¢Ik42Š$¤Tñ_¤æ:¥qðÄŽˆÉ~$Mßîž‘> °|¼Ý?S¬¿Þò4W©G{¤öÏ£ÝÝ’x‰sLÐ@ù½B3È7³Ä´Ú¬|pÔ€xô‰´†-zÅ"ãxo?ܲZã¿äšvçý Où°ÿ£ôî¿ex» ›Ö÷'Þó©¿úñâ»oY¿`3ìi¦ Í ¥#xÐÓÌ™ç&Ñó—‚µûÓ'¾ørMØ>³4ü ®5ý µáŸ–Á¬Ãîax¢ypd÷ø<ïÓG¿ãêæ'lxì½ÒAФãŸ÷üzÍ[Ϲìç°Þ·^®æ»ÜýgÊÛ\óÝߔϿŒ·<¼CÔәݞwéí—»OŸBÿn„'šwL?Ü—Õ×wÞ=]»×»ÑÝÜ€WЦ@lùðÖ3‚y ý3Þ¤îû±£N°Ü€›‘²½™2yØÔ»~Üòð/i8TQø\õšLŒ”žøþÆ:Ž_Ê÷?®6×’ÌÞ†*õMêqL»ªÕÚèÌ¢¯“>•½ï«¿6ÑZE‰Ö%»èÏØST¼˜äÃN¸ñîÚGO¢ëÌæî<r¿Œ§;ibàqÕÿîgü–6msæc` ZÁø"›Œ;ÊÊ9?ãÚ›*ü¢Ô må:9{0>$™×Æ‹;§oçiáÒ¦II…Xüè§`5N¬kѬr•§Q\Õ\%:£!d·PçR Õ7E‹Ä,u^M—ÅŒ1I ®[&çD,Øa¸ZÆ`mGÆRÅ’r5ic-då,Ø®º6x±¦¥ÁŒÙ“3¦øÑ¹‡êL©Åb‹¹¨Xr­:‰F4Ô싚©X©¢1§CŒÂ¼ÖÊlnÑRL: ¾2mĘ*¢’Ä‘bJ5¥PíTÅ(FÕ0X›h;c¬ÑR)–R³±.g AœdL}Èñq²­ø¢­Ö¶8mQ ­hÕ2Ö2˜r¤VaT5UÛ\RRRÌSyH:Ô>ͯ˱ßÌ|lÚ"¯sü€¿‰G&úƒ#|¢äéfÚ1|¹‘¶¿2ÌaÚèÐ'¨—x÷ܜ㽿û÷‹â˹9.}òáB¯…¹Ý”Úˈ.),¸»Xœÿ¯aý‡ù__åë‹´ û›‡çSã?žˆkÌ–z{"lc¶§Wä.lÐä«K5ïæ¦qØÙf’þ?sóUC7þ©_¼£ùÈ+ËýâÅuøtËÏà.aáÔµài^æ£ÀaÍ÷ž_ÏøY«ÄwÔ=åÔä°ä¾,èÞb] êžž÷YWY}u”è^ã+&õÍþº®yŽÄÿp›¾¡—5²Å¬1ï±—xOþ+þîŽî[œ½ˆe§dÂé÷3Âîa —ÐÁðwðËÓ©nËŒçÏ%ÿDþdÚpÿ¤—hþrcyöò¸ù,7\ö8Þf~sìúDì>æ~ ðéŠW/j,‰¸íŸ¸6{¾Ã|ô†Ô~³7û-³7ß=ÕqÇ–,ßo~vÙ× ¾™ñð1€lÞúOµ"¯þ2†¢LÄwò,_!+Sæ§žóÊ\¨óM\÷l)nI·Ì×tžW)àî‘0Ç8âß÷Ã-Æ<ŸFœ8<ÈtS{fÝÆ²«çœcÕ·Á·Ñ®41d 7ÄÀÜâ2úÈÔL¿€óü¡I+#¾4ׄZý/‹ lJìµÃ<á?c->0Ιø0˜Õ½uçËWNy”nž V7ÿÆþY÷÷]³=sk5[šéåPÁ¿Á¿¦© W˜=·´Ûg{Ýq3}Yn’ïÛDØ3[~м*G6»ÎÍîo¹y{Öã9Dþ’8{Ù1ñÎóÕš‹í³Ï ÜR×t0l^ÄiÜR×ßY¬el˜YÜ- ó5ºFgˆÃ ¬bñ¤%·(4k~²å7lÀÿ„Pßýˆ¹õ²ÞøÐ7Ë]ñè•O%ñq÷ÌÍ{òœzAœñ`ùá%© ÿˆÁ ÁÇ—oNä¥%¬^â'-i^pß㋜žë%Nïá?6¼…%›/Nlñ5õeµ¾LÕOÀ{` ¾ç¸4ðªb »ƒÃdnNûÂkÞî©°ó4‰iÏ=äuýt;Bx÷Î^|$à…Íã²ß_rï¸D œ¦~ÖÒ¶Ô†%0«â?…Ÿ¿%|²á?äÀÄOŒÿ ´§ðvââ3÷ÊÏùFéì™­ŠøÇ¿¸W»øùæeKx¶çÓŸÍnä²÷2qI9­ f…¤Ø²:¤•Hhr¨n‹B ‹5ݶ—5ÝЛ#N©Ã¦¤^ 5öb_Ûêóºõ*™Ð»uh¾I0î6és÷c¦#:|îƒGê‰Ôx39öã^¯š…ǻʪ%ŽéØõÕ@Këi-˜UæLgј©ŽS¬ì‚n2¨Ý€)µ“d2ŒöƒÊʪ[Wï§f¶·aÜZÌ^ÍrnËdó®:+S“†TüPƒ5¾-…œ]õ~2dRsP1®¤¦ZñØÉ­tb¬SÕÚÚÌRÈéÌI+Æ"TSK[3UMöµfÑ£vÿEÅÙfeùÚ$K1©”aTÛ Înº²š7!àͤªZÅLâ3g„¶RJ(âjq?FÀ\å¼pX²’SЃDjÔ8ϤÉ6‡ì1ͬeî¥éÄ5j¼ªXQ'Fª±Fl6FÅÄbjU#Y©±æeJö1×U“)©’s±¥ª¯ŸŒPµ:ñÖ9µ¡(9'¦2MCªs’>æ¶-­«ÎMΜ1Æ”D±ª F©¥~ŸÒç8½LJöøDž¢mí«Ð¥M®ge²Å†\ÃX½ÔÍxß.‹€P|&XZG#´neuUtž²“þo•Hc¼Ö¡’¢Ù&ËÔ”Xê×™n <ŒñhºÕ‘/ªÅfœpf>töë….›Õ™n†¨ï«™ÿ»ú¥ßn!¾Áþ˜vÁBhGF6…þî¥À€½EéͶ87+X‰"‘†w7žeK× ™GÖg/þ"ÑmùoÀˆú}žP1½%ƒ¼¡.y˜ƒá£Bå+ðžºæ<`^Ã’Ü’…”pQœ§®1[Ž<\ÿíºçê:]Æ…'¿ŠÃ]j¾íå=íå™áØÈÔÿä=O{¦p\!s’gï¸Ao^VWy1ÙôÅJ:í­~‚/„ ÷’up/K@'ïèå ³%GO¸‚=åöO£ >±úWøðæº[îÄß”+âžrû¼{ÿõŸ®[%.òfE21±Ûs¿ä+OM˜=ïÞÀ’µç<‘ö ‘‡-7oà=ø_ò£ë·˜‹,«÷1ìSŒ}ôüÚÁï*+G™ã m&´t‚QF»ú7²Z¹PÛØ¯\¬°Kñ79‘û“Y¸Ï|Õ07Ìøveü—ÙH ñþœéÿ÷?â_ÿw ï(?LëÞ·îZÂN¹©}Çå¼#XLÙŒêk ù)4Þ{—6fßÿ71ï¶Ø5³-íÎ}0y‡3u¯§§õ7UwJë™’ßù9&Ф  Ã×ýø6ÐE¬â˜™c‡QÔ3\ÐXÁOÕå"ãXLõëh,ÎojãºlC„ÃèšRá&8ÜtMÔ»,»ì›Œ}šUYÚW]Cç LÁÞkù{™–˜¹äƒ‹±ë¼óîB¬× å)eÆII¸Z¥VQÍŸ'sf3´Ô,z,Fgƒ)­±âJëêÑVšâ«ux5ç,£‹£›J)•Dm™†žöÚÖ/½w®*¤œs˜ÑF 4xŸð%ªäb½Åf‘\ÕGE´ÉU³´©Ì]nêdímKÆ h­eR†jæÑÌ´ ÉÚhlãBtVÁÈ„ÄSÈ×”j5—*QÉT,µšœœ¦¦LÙjÄ£¥(úäÅ4jlu¢J-h4Q#ø*R ”šrÒÊhœªŽS8=ŸsGㆮ¥ñÞ[ÑV ªZ4–*Q픞†éééøÍÃÃìn`²Ç®î¼¨@~´xF¢‹©¦cés ŠuŒ™P_i¦ÁºŸL˜´{Â'F1šsõ`Ç”d‰æ–1,›²šÐM³ôØ™}X½þ¹ñ¿mò\b¡“•/]x‰šúÕU[½‘ Ú½ÅÂá5Ó;g·†Uðþi}½Ûî*7'pPYÓlQ¨lò­Ï„ø.¤œù¯Ìfnû¥#84B¡f^E>L, Ëæ¤@,@NˆZòÉß_Ò]qñ!»xq‰f‹Û 3bKq$8fÄÐV Ì2.!Ûgç'¼ár‰÷ðz—fxë‰ib'küK‘Ú>z~#ü´!Ì™f¨çÁñ·'.S„ÄÍG^Á¸;è¤ §LC}Áµž–}OÆTó" Ïw 5aËÙ’rIuóóýO¢ «·¬ A–‘KŒ£f* ^ (^Á»7|\‚ÿð֭Ϋ÷×!íØß4·|Ý;ÂGâ®X\ò•£Ë(<}ËÓéuÉ;ÇEØÃ"z›“°ã[?âm`U1kX)Õà,vÄU\Ý8ë!üY £àQåñK“þUÙM‰®ÐŽ´¥bÇß®Œ,ÄÛh‡‡ðøy¾¹IýÛ†¡%ÿ˜ä‘W«z·r)L9ZÈ™bÀòÃKòŒÆPk_òõ£1³øç$·í+ä7”%ö ÷´™pE{÷䕺NÇ‹ÜÎóHð7ZÉf#¦×‡vƒé „…8&ÀÓ˜(#õ‰4 -ÙC`.=\ëtМrR}ü,û_êr¤OJUjèóóÁÖGËCæ·±þÏ6û° ¦vL l'u÷ß¿·¯»`Ž] Ø%=Žãt\äÖ{ó¥.T§¶=ëŠÅõ ꘳ˆ«´4UœVl2[%gžtzˆ%ŠoŒY4ÁŠ §²Úƨ‘ŒZS£ÏS’yŠ—4‰‰±ýk’VJUc&ÉÙKR7ygÔ»¢)WÄXS]ñ&ù::¦ê‹Ú’+b’)šG¼&O2îIÝSÁ¤Žø'*ZR¦‰­¨•¨V°AÌPSNF,PG#Iª3Ù"G+I4 dÑÉžþ]Eˆ•RmÉ”£US³je-U²Ú¬Hç•\«¦<Õü˜k6vž³+•" µ³ÅšPm›å|ÐæBŒT•’%WIʘgCZ¦_ì3÷fó z͸üÁè*W/š2•ÚìFÙ9˜Ö*ʉÙa@<êû˜®Ó¤Câ³IM'jµæhKMeámžÊûÅ‹OZvNVvŠLÝU±Üvî6Î7+E0óM±^SÀºúeÕ zÎ0ÁkÜ0õݱ‚œ^y+£+1A¶±fo˜-qgLdòӾϷיøøD}¿‘ôeíg• Ø …6nÎŽý*±ûÝÇç×èå5Ó‚Ëù³¥a<Úv…{…™seø‹^ÌxÐ iIi)žC" O/4•ù„»ƒý‰ŒÂù’zI]@wãZC/»Â¤Ó†Õ‚á4Ž`ŸG5ñ“ÈoŽ0À¬¹Ý>»Cþ…QÀ@ÝšŸm Þ0.±žzEÝ#·˜Þ°_Ræ´kæÆ!Oz÷'І øO„WëÐz¼ó6‰þÞó‡5lé ;¥òNï÷Ùê‚U3…ÖDöÄ[º7 KÂá¯@87\4t0ƒê)kÎO`WÇÅŒ¯ÜM[n#Çþà‰ëçÂê+XÂ,á1äB=P©mošëYñØE÷mþ…e³¨ý”IG¬eÑbbÈ  ´9øhˆÂ“¤=O‰WKfŽì6)û@ð0g^Üfš÷á ×` ZÉJ4»½òë…ÿYHóÛÝéÊx\’®(ó@wùöÂn.肞5gm­uSK/†Úôê>ØfU½7ævÆÜð†Æñ¥g4¨žzäqO3qXVGµ(w9q8zù.Ù½èíµ[{>_sµ«ë›è‰á·ÑvàÌ7í`SÛ‹È«›®y•žÌ‚P)Ý÷C7snˆã>N»³:ÎæÿwX~P·2úMg­ ›mL)ÍÃ̶bU$“9-Vš9¡Z/Y‹–hãSò¥¸¹ÆŒ‘EPÑê*±dÃÑ–G‡–BV‰Y“%íõh"2ä2XcŒ15¸¦ðµæßÆüMÖ¶ª)V¢#I+–hë$PR2ÙÔ:¥qÔÙ>•Ç£wþ‹ÏÒu‚-“›:hšH9LVÝSdÈÙŒm³uÑYëk'EE+VŒUÑh¡ˆˆµ£øQmñÁX#E ö(2åZFõUM,z¯2%§O. V‹¶IuÈ#š&“ƒ±UŠÌ(ø\d¨zòXÍù ÞW•T4¥4%=’÷ÙßÇÍçÔÿGåµï/ ’p¬´®JMñÎâœZY-äp'¬^ÄLˆŠ…⨖¬4"“¦±T-±Æ‚±U}¥Q'ÉŸý²8A'oØ<-{{‰œ1“ ,#5SeK‚OW¼¥Î nês&%î€Ì—‘ Çü‘V1žš©™Ãòþßìjâk“ºi×FÂØW™¦#x|E iG¼Û$ïk&û:RŽ~œšúÉn G¸¯hÚÞäë)ÅË×|ÑG¿IÖõE¥šMt}ÃÍBø_ê_»å¯NhÚðtÆã%Ò2N8³üÄì3Λ…oæêÄÕJ­LGŒajVUV*ÁJl*¡"§ UA!€ÁFêœ!ð£Ò Æ<{woâ~ÿ×þÛ_É›ëó÷«Ö‡&Eßq8ð0ã.ÝXK¨__j¶%5ìj! TŠíýìõµèÌp4ì­ßY³*Æ×âyÝ»_þÚl°¯çæË…çb2Ô!ªjú\jgL3CŒÆmœÌ«â¬±šS16ìL¸oóÊ?/ìµØ(ÎJ­ˆ)ÔZÈJ¡aÔZgÉ„5;i1uW*ñ±1Nê<ˆk˜Ù¼ u^òå8S[T5bÔ„ Á{o‹Q[S¦JCN>罪è½á¿Hm}:÷n^°%–˜rå<gRQ‹jªQƒi/¦…%H4u.¥5Xgl“E‹A©M1³ƒ¸£­Æg£YöU§"{©?´øfJ¥JÅf|ðò:oCL”£è$G#¿wÙaŒ)mTk´%3þñH;éãXº2H›“¦)¥q,ă¤£¸X¯_%?K×jv¦æ1ûBHSP5ÕÕ,vÖú‚œN²˜H4Øô\þ“"TC®ŠàL¤*ñ‘î2Ÿ»Ô:±†Òòàû}8³o<~®D!1Ç4 }]p¯PvÑ`ð_˜P3 ¢›RI;M¤Ãs)ËÅ…Æ÷Ö\çïc¾¥A=i¶î[OÓQê ÇŽðD]ßÁoZíýD0p HnÅa÷!ÆX¶Øõ3Ž7ì— ÕÑE\‚'Ì÷„5Å“,0¼2tÆb×èzžï*µ` +¼ ¼ƒ‹Lw Êû¿½©W^ö×%íÆ|3)±Ò&šJw„;,Ô[ È»·½ó\%{v{šÅœpàrO¼…÷pÉÛŸ+ùKø—|ó÷œßâÁ.1—ÏÍóµA+‡¨ßÌÖý†9ÿuÆ×"ù‰²'UšDW8?ÿSxJoÙ}‚Нû4°Kž‡Äßî~zJd@Ü2]ýy½nml ÎGñɽëÕ3vÄÀ“c2ÜGÖGžʲçaÍw[Øóé’ojÅÌ„¹C÷¸-Ã’iŽøŒa xÆÄ°ç>°XÒt7&ÛÍ‘¾*ÝR0 ãÑ3tŽ3}>Gèç>s­ÛÑ4½ÓÇû…aþ5\sØ}<»¡ãmå“ì°¼›¼_§¦îN»¶¨Ô®p^Üu0ò**Ö{íÞí²½)gÔs´Áy€ï +\9ŒÅ,’kņdÉ¥R&b`¨›ˆÏ)àC…/uã¦^+g $sl0òl¦5—ìþžÿÓñÁa ™ð<|Hw«iòõÍϸ gWA.£xÃ&HßDTo‚¥M_{Qâ@ª%U »°Ýc–$Ó®è:Jû7G5»®¹w×ït÷•î.,Kñ^“V©ƒN~(!çÙG/¿SÚœe¨]*s âgU,8«¦™_žý²MSÎRiÆ<ºÇ&°ÌÃöƒ\ݘRq™0îDe¾ê[ÁZŒ’”ôýæý¸ #Á¼÷¾õ¹êËžq ¯± Äax î0·<¾áiÁ—©ÄÊ.óEbæW8Gv„¦`”.:b¡›¨wÌöÊruy\;e„C, G¾ó\8ŒCÁL¸B]3m? ¬ÂGo¸öë]»½ù ¿†Ÿk.·tÀš¥çgŽÚðãi‰i ¦ˆóà°RɆYæÈ‡˜W%ùÃözZïî¹9åàºÅÃ|Ë Ìû^mxÉ4ÜüàØ´·½YS·ÏK§´w˜=¯`¡»Ùk½·É,væ`уãPù ðw<}æUà°ä;ÿ|Ãâ‰ï:–•1ÒÔÏè–ÌKÐ%Ø“nÉkî·üÜ¿‡+¾rTä}U‚26Ø#xЧœ€IhÅNÙ`Þøh~ΰâ)°‹o·|Ú@sªßPÈ~sG¿N”üÌ}rºb±"ãcÁ &¨‰jIW”9]ËÌBa¬ ™ÇéÃ"¬æm¦ YÊroK_”’™r§×;b3pi¢Óäb/ò„$"%¦ IDAT¼A ´;áÒ&¯û7à'…ßdH«·íê“ o—ñÒ“æQuŒ2&ßô’0–ªÎ`+éÈQyH¸Ë‘M6} TBòæÞ¯þ–€ÄŸ&:ýżØXzͤ#eظû?ó®«ù,iÔ4Œä‡äxn;ûª¸Vª”ì¤õ_´úóV~K~Lã¼Tj5LÕÍÒ£¾Z›š¦Øöʤƅ&ƒq´î„`±Oõ;õ—*b«7¹Õƒ±M0ASÕTŠº89ë*UЉe:RïmýÎòŸª¿Ðú++¨gÙ¾žÍ.Œkª›k#eæŸùíX)†* ¯Ýø äêïBÞÛ§¯íü˜ZÓ¸çh1IìIX4³ÐÛ5媷RJ™Ïç¤äöÌàÑ‘R¡Lîûyî뺯_ûâ¢Ý0¾º’n—ðÚ'>»ç#˜^¯ÕÒ¬‰¢•µÀl)¡Pè‚ë?ä„lpïèÏ^£à¹íAóIxyìFx¼§½Dl¨ÀC¿a€Ç%Áüƒäjà.A䳈ö$‰gËAr “Dôà‘°$nÖ ì¢99£Òæ×ötCyÓ6é]»þˆ£ÅAûv¶!XJð†¤›47&Za¬‰šŽçÀ¡ÄOM 9ØVÁ<¢2ö€|Æ>×V×r"cÒ ÿMÐ%‰Ëì‘ûCy»ë®fæã?Ñè™=4’6ZÜÊ#*ÞØC-½©ÄjJwÖ§p’ø,4ÁÜZ ö.󿤝KWÈg…¢ ‚Bc!ö7A×X£íJû.‰uÚ‘Þk&¹eëe ÆŒöØÐì£ÙUöZÛºÏvl„oSn½€?Þäï>V~!ΫDìõsð³ìK1£*²A>‹$¢°Æh*éëÔw10 “´Îá+!?îËŠx&à ž•VR̳Ò9eJoRÆäFÊ6 ¢¤rˆI(샔‹(SEÎÊr$+´"!‚ ÅœEpbôû}Úý-­þ—J"ùÛ’g¡egÔT›¡gb icPÙåè ¥E­ÉÒ§Qä¡~°‘ÂöòŸFNü_¬:è²@ŒzLnŸc™S¶ì¥îMÐ1<‡½òXìD ³6™d’’”Æ­‡çl¾²I›Üýïožd=95¥X•9•þrÛ¦ï³m'6ü„öë öö‡­>!Bðnt¹Ç‹,k¸(²ño«ñ×ËÍwÓ³;k¯*§ãÃ'‚âÇÌ ÷ Ô­Q= ÷HKŸ;4*™çÑ×cgã܉ŠZ»ý^åç6Jb‰›%)1D ¸)Ž6h¶–˜sÈT`~$ž59 LÁMD ÒqJ’ŸÈ÷vá¾I´iù‚9›%ÙCáH;BEì3{ƒ[viÛ¥91>éËÈÄ~™d¡¨ â„tNöT™yŠôŽõQ ¶|f(4B’"¾öœœ…­ç4&Í„j㸵ñÓiþbâ?ͺˆ+›Œñ«RvZ­Õ‚X5¢7¿ÃJ¬Á\ÓÌhc•?DY(Hñƾ¯«l¤\!»B®³€„NôKä ÊpðØã ŠÆ,M¹±êÒºwœsEs×µ·’«=l¹ƒÏ^ƒ7ìŸÒÃzÌÑ+aöú6Ç5·áknaιÛruÿ2íP%TmäŒ2‡þ’iC<^/ktK¬AO5€†ÿêùhûâÊz„[hÿzó²'b^ý¿Ü~–·‰MàjÏÝÀ£nf²4zGRHE%É 4ýÂ9ù)Mk5ή’qµÃ,Ýxh‡-?¯ ·žÓ-Ì=à ê¼-ç+a\©Á9"…pƒ´~–Ÿ¤ŸÚL=Õ®Ò˜Ê +.îöÉ+lëKœÂå{8œÝ~géÜíYüææ¿ê·Æ²Êta·Žš“ù±Îºfn•u³Ì'vO=¶=«[÷2ÕKlwês)šR·:#FŠÄC¨û²¶r"åAJL‰ ÌÎoJY«GƒøùXí‡â1¡yh•Z ©vRÌò\ý<žlÔꢲªÒBE{íöÊK팎Ú&=IB /*…E ÖŒ{ÃÓç4¾l§Uã«ó$ûlUR,£*“.¢J:¦?Ëñß“‹,þ‚²“ùqRÕè¹4¥ÐÂ…”mHÏÒ9‚…̘=DFïSJÏã°èûý>u`6;QERDgģޯʢÓé?¤Ø˜ô†$Íh¬ö™.óñTTAÚѺ,;!þC·ÅÈVj‚Â7£ùX–Z™€ÿJŽë8üÍséKñ½L‡Ä¡òÛoFʈQÓH®D²ÎÙɬ|8Ï>xž[ë ‘<"E-ûº0Ó ¤Dÿ·ù‘ÔºÈÊü«®üÖü¯À,nä¼vÊŒ£ ˆïdü@cõÜŒsé08[v%ÿé¿`zgy f™É³ºI¶ êwDåÚŠØ\ ­9‰ºˆƒ û1ª>ŠÃOcùK_á#&¡8|ÚÓÃÎ2Bˆ´ÆN(žÔì4Â’†¨%iƒ[¢¦ E›*zÙVáÄ Kv7Ã;Úé%,Ž˜O²ÅÝã ‚´!œzFÍ6pðl7ëàͦ)ÎÛ£[ÒzOß1©_ KR!J‚gæ)aÚÑ ‘OKŠS‹…”ð‚`x” 8‘x‰R}¿~•„ÛùþÄñYÅûÿÝvZïk=X\¬È– ‰²Mb%wî륩6FQN¹0ÜÌY÷¯MN_2,ˆ¦–¾îŸ­Ù;¾‡¯C‹Àk2pà%0¼ÔÛVnV g˜3§´? íÛxß0Â5<.y¿a„ÉŸÒÃz?x±¿P­0\ò~Ag`öÿñG/–Ç0ñsÆž íaCºF̱S ɧ‚b‡ë!ü3uïú–S(–Œ¾~ɧ½Ì«=Ý kó×q\§TÇå»@áÙínÞücýøÖüýduEwêÖ_àø‰¤°˜Ó—¨*l‡ìÑ‚\t IPF%?µ¸ÇßsJ3Yò½M[@y‰Z [‰³œšnn‘Ú¼”‚a"µŠ•§)ÞÆu‘ñšâu ¦ÖLV©p†Ñéçç|h9!$ö§ÎNU½:)~­ÆÛmÇ{nëšÛú#lÂI˜-á‘M\š|nóܿę7.4SÚéy èþÃo½ù¿~í»ŸyºÍëሇF¥…Œ‹,l*L"†ÔÈI;™Ô&-•®œ—Y Ný­Pÿ”Šuê¾3e­DQi‰·ýPïÙý#¼á„Æžš³3k³"º¢ïUH)9#1ZbÇÑŒ&ìq.„6œ~öîÛÝ‚ýE{ØÓM´Ôó¯³úd°CRF§C1Q…*ÍäPùû1Êœ}¦÷j›¤Ó†\TNê¨Ó}?s©×>¦EŒeDÚ'ù~HU{zvÓÉ)+¯+ 鳞-‚ÈIæ=Y“r‹CC#JüXª…•Â@V&ëfT­30Py¦í×ùl#'-R⪯žÍÇäJû‰Ì’oŸâ}™ù–{q^û3¢^‘aoÞŒåêÎ(¹2ªS6ÞTƇ 'v|?Í_Æá_{7q{‹¹`Ñ1ì(çD[¦…í•û]™¿¨äÏ„)J¥žeqˆ$´1&4Ÿ”-ò—À[Å¢â$Q-Qñ&ùº&°C'üLßþRì°T ãÛIdœ´qvaJLa»Wì¦áÍj,ºB¯ýW=ŸqÛ—U,k=Ó-Åm± i„Ò2€ xÛ°ã¦ÚÔaidZåØmYçÔ}I˜5þ3ºü‚|FÐäÐLh3l!=þÛ&ÑzÃèq[Ìá„v²†‰dØRÞ#?"VÐ åB¾#¦Æ§¶ðÜl‘÷ï8 /Kg"SXÞ¤¢,J0Q(wŒ»g9øCšT¿Pö§3Ûvtäl‚n¤nÅïéFÏéFU” JK­_ó#è¸óÆavÁÖ¼7Xås#/ óóõø–Ù9vKuÿBb8nfx:µ$ƒö¥íóbCq—°àW†Ûs®¶üàOyo¸~-¾Gûí;èÌÎ(*Þ( ·¼´Ž«kö·/!VzK€Á=j‹„ è œa„/à3Û€ýï¨{/\›qûW¯{wØ;܈¯‹æÇ5´DpHpÌõ5{{mÝ©¥°üLc=QÓkFÅN#*¦-°#j+×X¬n¦©U=šøÁȤØpàÏ2ÿT,Öꌨ‰_k>Q¡ÔŸ;Õ@«R®Œ˜-&îê$±‰ 1 9!tŒ£¼×SÈDxþ¦°¶( +ìŸOá†ô7wpû©½ý½ºçóÙ¦©i¡u¬¼qEÆF§“/s[f*0Õ—k»$nšëËöö-€Ì6#{R ?´¦øDUJhT YÓ*ñWFž æYÏâ(9< ±ce@=…<¶b¢tö0 #tó÷ßk¯vüå¬=©Vé¬$ §soĪ(î_Ö¡Ë%iƒ`7Ä󯇶„* ýËê8 Š3®4w;¨ÿ”÷†cžø±+ìáý±jÍLàÄKœàuâ´ PŒKž7êþmú» ' —8ƒ‡1ò˜`ä1©{¯ŠEñ»û¢äÜÐHL}ƒ}„„h­~m yƒ;G8`C“½Yll´¶‚ª4Óª)e+%)zÆŠ^0ƒR¼„ëeŽ”‘«Zm¨¦èeͦ.˜V0¡ Ë}28 B¾¹¤6Æø´ ± ±1µ79 UØ T0nhrßbH±…1¬3Û8ÝÆ Áb†÷PË)6SDe]¡FcÝAýÝ›´z,ÜmÏŽ¥Ü´/:ÿ¦›³ F/‡îHeÐK†“eûöžòiQR‘3i Æ&¤8ªhuˆ*š+ј$¥œæ<ëU12çŒ(‡yr”m‘Úz\ÍìA)k”K•¯[*îžš!ۙ芄ÁäèSî&`I¤‡àlNo¢_¨=á7_íbªµçØV7V·B7ј…Åá¬FF_¨(1krLEJE26H9"üàŸkƒ.•¥Ì¨@ŽyœšKÃNÌš_›6h´i>¦²Ö([Jt2èFÐå aHñ©<|ÉÃ;fKú‰/Kw"=©U–â_íØ­ÊÑ ˜7ò$ÝA[)8={Öï½Ôg(d3ñ­ÎKxÛä™ñ;~kÃÅÄiÂ_öþžÌMÞÔâÉ“•(»ÄÚ àš¿cì>Øßv)MMÊíTS$K† êÈÅÜp,áb‰ùì–xè6<ÒSµ¢žgkq¨Þï|ñk«g.+²qÑû¼mÓ=q‰ØäKÈ))·¡K2Ôæ}mÞÛ|Ž:ÛÛÊGé¬|ˆšÝÌs[înÏaËÕ=w¬ÿÍ–‘¦r­œ,^Q*Ò qŽ:Gúó†m«[dó’LîE³ïÛÝm›|§ŠbbÌAæ­î)ÅB¤Ò'‘¥*`I§úùW²Er#Ñ®3SÌ“zÖª+äÍ5ÚX·"u2|.C#†¶ÔÈ„Óìí/r¥G)w-T¹«ÔÞùmî?ïÿ5ûùžÕ¥4¤Õ‰è*åGéÎZ;‘âY37~e&xGR8+còÁŒù°KÏ¿'T:œöS£’Pi´þ½Ußfَѱjƒ^M•VJ¡UЂ¤d®ö)ûáð­{žu”eQ¶žTÈDNˆÜ†j•5Qd‘¼Éù+å×rD=qöLYQ–HÒU¬³²Ñ»ìûø$tQ–˜Ó¿”ÕUeáÜì#ÃçU‹Åg²­ìÏgÒUƒSx™Ú(‰ ¡ÿ*%é¯4ÖœWF¯S§$‚'ʯ’žwR!½œ‹‰ÊR)½‘ôA­Þ‚¾9)j‡1ýJÚ.k'‰´ƒX¥äö?,ô a4§BTE¸·žË´”ÉØ¨]Ò/UµRÖ™ I¸_I“ÚYÂz”Çl^X4%TKÒ†z—øÅ+ˆEò‚+Ïù‡m{}¿:Å%¨î]@ë¶s‡\0\òÉý =Ln›sbìÔÛÙÖHTâ‡)"ÁÓ_6‹E{VSÖì J“-¢aøÕ{®2ºà”o æIÛ§‰]Ãg˜‹‹ÆÞ·Ç"c7¤W¬©X’7˜KX xˆ‚YÂ/(.›xoò½ïí~éúÍó#{øåQ Æ€çnË8ÐÍÀaXø|Ö]ïBí {—ð“ȉX›ÈA5Ø ¨¯F{—Ê£Ûkõ’r]€^Ïš^C–_rzM¡0%¼Cnyò<€ÓÀ™gºùSõ†¦I¼&@½Tð-¤ÁxL3 °¶ÁÞòÝ+à©zž±4޶ãÅüóÇqߟÕæÿØ­á Ìè4$L…ÿ˜.\ ÄJ#þù%»k¦vÓ=Fâsìüq=’w‰ìHœÁgN ä[ĦÃ$Ð{ܶåòB,N“1ñ¹uùþYnÛT`L# SY[e«÷Åîq²ûöïÇŠnº46Ý11e÷Êõö÷ÌÀ.Éçä3 õFmlZZ³u†ß›yöwæ—ɬÏ•nîÞ´W†»S¨¸»øÏðïª6œ!#è&ËvŒHƒ8#p3èz æŽÕ_,»Ö¾ºñ¢Þgó`Vÿç²»q] ây*}J‹p"½¡’’¡â™x(HWŠ»’7‰É{LFgÆ)Q!©ïbM°?Hî<ãDߊ„üó©F0ÝcªfÂ*ó$ô­•˜ù¿jü¤•óZWµŒVŒNRê&…Aú:-f&!´M!úäF/vT™$ûQ0"~'ú·R£…pÚ˜ŒNB·'0ø@:àÅÐg{­+…–9§¬uV™¬ú&Ûu_«ÿhìÏŒ}k̘š¢j1¤Ü YgŠ¥ÊŒ¦¢#Iª/1—ØÒà'ø I5c²uÑ IÏv³îÄN&F˜Tô¾ryðýs›K~bùÚôM!k+­•hÙk¶Æu9‘<ÂCþ…–T]Sü¨Õí+[Qˆ‹›lê„Q£WÅ¿H%BcrS¦Ö€1¨ß!$‰:‹Z ›J——û— дw/7’i@‡º¸Gˆ—ð§üòÂ=w8ªošGÚëò²)Lu3X³Ã~ªÉ›ƒùÀ5Z­Ö7? ¤óæ½üaw›xkžÉ’ÆYç<5<&nϹª ¤~ù«^&xW†ݾxzþD3¥?ì.…ç#¹¡xý²Kî¾Ç›œ€§1~`¨–”4'†«‚îJ¯ï<ÀGprÌ ¼¤Zpk¸:Çoñ÷/Ï#wyÖ Ñ´X¶Ñ 4Ær ~ÎþÇ †áCÔ×éwèûæyÓ~ó#ÒäѾ‘û6ÁPãÀÈæÕž”Èø¹$@¿Áƒ~×峩ÔCd‚.ÝÃ=éÇ-ÃÊ(§Ñ vRnòÿµ±\>_-¾­ R¶…e¼ç‘&ÐÞ½’Ç5œn(jÆf†3ßVò‹íÜzé>ñ=ü1GÏSOÚÏ&%oG½áô{¨“%?c~bçôèuD]cWÆKâ„¡¨½®‚ýfæ®k¤ü¼”ñ¯b”Q”úʧ‰È2$|ö1:“}ðFüâÎpU¢vØE­žkö–S#t¥t¸N–`+ÏèÍShŠªÕ ]’'‰’À:àçrïÌ­U—N,|¤=)©Ö =©‚RŸ'ÙøÐŽ@ÄäUñ;pH‡!ëœr/ÒSöV„ï‡Tˆ]åKHY—JO…%JŒfŒˆR|컈)õÓ¬²D§Qª].©ú¥œ¬ÜÁ|j©¢ËÑ Ñˆr~Îi‚Ï$T2Ž&‹V±l«{ ¤%j‰?e°­Š«(\ŽˆÞMzÿ[ÿÍ­«?-Ÿ…µ•$'7J¯édbQ5§¶=µüêQÖë“óÒ•ñóccÈ;Â@‘&ÙÆ9¢@Ц! Žœ et­”s‹n,y¶ ™‰oõò@”ˆ±Áˆ`…±ÉðÍàš¯íoÑ~}Éó¦ dÎ’²²rýÉÃø.O·Nm)qÅÔ“ÛPà'x»Ž lS©¶†ÅÈD¢,>Œ ¤s†#²¥âá‚ï€-‰2¢OA`4ª’Ob¹.7~Ϋ~V•SuT,´ádIÚðƒKÔgº™GÚ9÷%”+Éša¿ºÍólÙMgsDAŽDÍØ°1Dƒð[ xsÉLa ‰Ú¶‹oó+¡ÿÅÐå£ÌùJ;¯ì™ñÕÞ’6„%Á4•ÅB6ˆe×oSá't>¸dwÁ,_ë›ÛPsnØ®ŠûN±´Ï6´;þvÄœzùý­™.ì´ƿˆÌ…YÝ6nÓ~`ù¤gZc:Ò¿!-‰tï4wškÍg°ÈL‹…`˜:ø’_-y³yqŒþézÃíëpé ÔpŒK|£6xð÷\-xœA¦€13 Tþ%–=@ †Ú/­3nÔÜ®árÇâši‡ÙàLÎøkÍ}`,p÷/«:ò5½V´’Em0n³â¼³amÁJ™0Ld=ù²ü}âÆÝ¼ïë¢3Ó¸¢ì´c:¯‘æ±Ò¦Û±."!–/¡=È%˜µÒHÛ˜˜V.Q4Øßßv¼x6Ã<ï­ÞðÜ× {ÑRr•9Ü|AͽárŢìïÎ_t†;Éõ{K|×ù3JmTð%‰/ÉK¤¸|5ñ IDAT%=Ä9¡6L±àÃî÷}‚šÝ¨Étžg)eèsÆ÷šàMÒv*¬œQ)Ãô§‡Ê²}]>SæÃ}Sõ­°²¤ÎzÒ£PBjïSCÇ GûÚ±Ë&õÆ=Zñk~ <ÛZ/•+¦,ö.mýóE»?ÁL˜H´BÂD©©úJT5±ðù¬KU£u«òÊG"Œ.Œ>ŽmÐ(Ó’¤dtÔHù…5Îz¿ãÁ#§„*±l1Š2ã“Ö2c“­”F*knäìc?@˜30ìs¼È±Ç¢Ê|—tç4Awèh¦{¯}-1¿¢­gU¤ƒV—‚N÷êòÆlVbÙ »–?DˆŠ\p ¨hôÁO÷ÝŸwûùch~àÛ™Á¦¦ m’7V­ÊÁ¤éÊ’²0ÿ ûM´ÊS¤gG“}KߌûvÜ£²†Ê^pŒT±%yh¢4IXàÙ«æÑ–=àŸqžÔ#,jÒbVÙ¸ ÙávÊÿ†öW04ŸÝ¶5ØO[]Px„ü©4aÒf{# üÒTxµìÂ’9|ÀAÓ¼n“¥P ùè`nðsò‚ y <ÌH‚A£ ¬&'$hI¨ÈIb¯1¸lÜE…Õ¥}P”ÑøÜÙ¦°_¡Íëð4š A±þÒ ‹ng¾ ç­/’(5Aâ ö5Û¯ _²X2Û nû»3¦G¢ç‚ôåZq/>þ4…à븽‰¬‡#—þUt D:Ö·qƒ;Ç ˆèq›µ‡ŠfFkA\’Ä›_2¡f¬oµ}‹;½d¾@z ðO™·ð¦b¾¥üÒG¨”à–ä ’(¡(¨F2Œ †w8ËÆGÇ…’SKíXÀ ”ÁÆ®6$x8ÂVÿô™Åa›ŽëÁG’ϸäμÄ_(̶/ÈÉfÄ8¬ßØñ‡&Ú*ÃÇ–‰BJ„Ä[æ–ì°‘J|¬Ä\‰™‚ä‰ïóÍ@›YÆ3ŠÊå‰wå/µzÊ.%n´ûØø…l'¾‘ÉÄh1Ò#Áë˜CÜùò“öÞ:_5WE{gxÚ'µª‚³äÖiüÂ~#/êcñyÖí5;ƒ´Hš"·Ç`e+¨ &ÅÚ–ˆeŒu=”†¼²^ˆÜÅÞäw¾ó]‚!‚VDÇC~ø<—-\£Fô?}œÔoì¡(»\TƒÌ…˜K¡%J[™šÃ/c&‹?/üÌŠ™D Ücþ½Wý·ñ7³ØN÷’­°¸„RëY‰è›ißÊ@Þ"OˆšƒDÐEÉ4í¼ÚwrW«}=ÁªwNÌá,¢h ݺÀ^®ƒgrhô¨Ë}}ªÌ'yûî,5¥n-mêÉ»Úu1³9;rw–}L.E„p{é¥Ð¶_åƒé¿:lº“·km(4ÄD„DvèІ~••;œh_8/üžvpÌÒÀaÏ É„BgJÑ™„Ãìñßæî1Ü\ùš[S,n7_Í~·Î=öÃe-ÅÇr¾’c§wŸëe#m+¨ù‹C~¼ÏŒ‘1{\$è{O€ø†Þ ÿŸæ.q Î%SÁT¡$Iàà˜;dyɰhód•Kg¡rξصù[$KN _k¢å‚iÝò&nˆ˜qáÃY÷¤Û/?{ÀôŒs܈€ï}`cKþ·×Æ–`k¨lÒ’t_ŸÜW¿YZ½9.·½ì@˜éµ¤×)2hà°å÷¦”{ؾÀi> U`/‘?œ!JMÉö£ÊÎwL.Œ4èÖ ÂUø²,ÍB Š´ùyâ«Ìz€aÃa‰Ý ®oÐ3” Nñž~­™¾pÐÂ;®4LÕ€{0TèK¦÷¼v¯cÿ?ioø„»×ŒÇ œC€w¼iÿù•=í?°ww8”¿²í‰Â–˜åÔ°™4U‰ÊLG4Œ¼ÜAi‚B177¤ztf¯Vש)ŠI[x$+9•Ï.|eѤ?–*8¢ë³‹ñ—Š?–ñLÚ©Æ é„ŠFöß𕜴'ßÎvØ †\"Ú¶Æ£;”&ˆ ½Xé[†&>skí;+Ïg&åµ É„´BçóZD†];ûnEU›3[ÊC]¸gó~%¦)‡ïò·&aÓÂR"…1z¬Ç. ½÷ºm=µßÛá[7ÝÎ1§àÈ•°qœqì‘ßa·bœ‘cx’<)ñAà,b·¤Œ³|k%Éqx#×JàR³Oí×#+S|ïé]uf’9¯òó嚦Noj#¬T.€ñ„M+ßÁqBРyðôžifHøÀa`ç‰;=ßDê«pÐeîÉ-\eNF”ÄzP Š1Ó'òÛ½ƒî¤@F >Ýð[&÷/³þxŽ ˆ/ǵµ„´lÓ4é8GŸ£2a‹›âÿeä.€çÓW»”†°A39¦–„GlÍÜbßn쯡Âìi¦´Ž¥â¸( ú£Jêiv´ß½ŽžŽµîV~wAY¢ ŒBÐÆ°š&Wö̤+“G·Þ }h?Ö+„ƒŒ ËÊoÔ Ü%ã‚~Îþ/§|T¢,$FÍ~ǯ5§‚>K<.¹Ýro¦ö”[ªaàKúÅñÔürjïþ§ÜŽÂÃÉ+Ùí–— ^õ^Iª/Å’qsü½î–éÝäb!8(¼Âx¼ Eä@1ãÃ’‰De¸†Žhñ 0äY;˜UÎn X\ÂsÖ>k´¥`÷Bµˆ{Ò·¸ z‰¤ýH®¦Âé×Î…g©0 rtyðÁ·i‹¿ÇC· 8£Ò¤@õ€ýÝ 5¦DêWðÞkŠ”³Íø®MqÞš-Óoq¬¦Ô:åïɳIù,Å)Ûv׃æ4ó¡b¡(-º„óÐTsç6 ›*²0É7J´¢ H¤&'âq$™%ä5ú·­¶«4öAâwI=?§Û¯Ž_Öžµ¹%5M¦ 'ÙÇu=294Õ¡ÕñÂ,ï² Js>»N=ûÝ7ú}m6Æ7Þùîñ¨Í nÄõ§;JßL7­j3Ô›´aåŒIr•üTùÂI«“+FRÉô%Á9#îšýÌ …•Í”0B7µù #9¢í%¨ŒNµ µŒ6{·]°HÃÇJÌŸux‚Ž^žìéÁØR;wñ¸ëŒÅTuæDæ"IãR–ÑG=¤ô›'Ýž*ìœØ3þ@²Ä¡IQ!$"£*ƒ'blƒ$OÚ¬†;‘P•KÆG-GQ?eëF÷äy@™oˆÆ+µ5V) O(bbð£°êÞM–ÈÚ%áµýEpè¾ û–±é§&jËלּL±môY+$Ú¡éûHïIqK"çkö;ÝÍÝ£Ìç0±§š]ÑbøU„Äu`×s¢x*Z 隓Êg“ IÍÇòÉ€ÍѪ„Mˆ ×m6¸ aA3DÎvH  ‰÷Àðžý Ý;ŠgFx´àt{e¹ƒ7‰éˆß3VÄŠÿWBâp²Á.IaÍšáÐêöeqµ„ vˢ߾ŒþÙ´Õ9" á¯U‰ ”ÂŽìОÛ-_ÀÏ!‚?Þ¶$0éIÛ›L e‰©ÈáF|¦õ¯È„¼‡GøÔ hà&P;æãââî¬C¯±¨uÍg´jÉI" lzi?æÐMàÙ[/Œ°?¢Ž}§u‚}ö•Û° #h‹¶;ãWs>­ø"ócÍ™Â&œç!sÚSkŽT´£¦{¬À3ègØ)¢e€'Ã~ÉÙ \R,þçñ¢ÿ‡ËÄËÏKÓp{ Š+ÃÝ9lá~ `l{ü@33"Ö£±£üÑP„Âä”üU’fƒÔHÅLt}äÌœ×tJƒeo¢Ç¤ã-ò’'IT’’®mBçòÛöÏhk´ò¤n¤aI„™Ájö–9(C¾&$´f°†tM©PæFž×©2E¹Úë.‡5À—0?ºI儘ËÓ2ÕÙª #jÏø7vŠ dAVˆ=AŒ-å*Yç £Omž ×¯Ã´‘)ÅŒ²¤xƒÈß㓞§n{ëãíx~IXm›nÏÐ#ÓgÊCkZ¤wxKë!³÷MÛ§-ç[Ò–¼AЈoÛÝ ¡zî¶|±åßm[µD[˜‚&ç:«i5YøäP«Z†FÐÆ H†µß«ÌÿOÜÛüÆ’^i~¿÷3"2“ÌdóªJ•*WS=­1!paÀˆ a€i5BzfÕ0¼ñÊÿša¯lA õ®QHbW„?D:Õ¥ª{d’ùñ~z‘ÉR©aoGü.o‚yÎ{ÎyžßãÆcœÖ>ËÖÈ1JAF%²‡Ð¨ƒ)¼-¢-daâËsjþÛß æ%¹Ò |sÑ_vãâ1ägZƧÿm[1.›2e…ײ—!ô1lTÑþ4R ‚ÀT×t«ÙŒØVÌ5Tj²o³ ŠëÈ{¢€bB!;»E{…9¹Xì„ýÖÙŽr0_ÚßÞÈögj¹÷n´°BØ2Èœ*±[+ŸØ¦EW¯{™;ÎP‘ƒlãˆþ²uj¹ÍîÍçœáª¯]› g¨1* -Q"¿Æ¿jòó’ìa"¿êí N³¯ÕO̘å»wn•¬¾… ×î¿0Ì|{ÿΖ)i¼% £ =l¥w{gáØù¨ÚÁÀ9Tb(^â;C‚Æ$` _n¸¦¹—hy̬ZUw©W²ÇuØß6rѺKf¾Ë ó–‘Ehbß /­Ü4{Z%„£›õâ^5²'ƒÛ†”gìKôѵ#(÷ä-CÏìÄe;¥Rg­ý” šDí©¥†)=tŽN¼Æ«à ®_ "?é© ûdfèñQúsonYÔ¬ÍKÖÝn¾šôÑãÿqjÝHÚ|E€'Ãà±o†•6ÿwnã,¸ï­3È3ÞM(4ï ËüÃÀޝ¶\?ò)Xƒõ°¡€ë)÷ÜifcÆžuµþKàI2[ã@Óˆi;™ÿ9zÃìurùÿýÇŽým —0âþˆ×øþgÚžòw‘;ǵЙS!¯Ð{Ì€2$IV¤ nB%P!ÐjUi¤o”mu(,»‚,ؾ¸;~Ž%~)¬€T7á¼ÝIž"ß>š¾h Ë`©Œ©vã G0 HOês†Ð$ZH;"(u-©S¶N¸4Â퉳@:âþÓ`.¢)’Õ¹LJ&=È¢orl.*m‰>åˆê#ä¨Ë#„2.x¶¬š!µÛÀ I.ª„5”gÜJ½Üâ>Ý}½‹:q+X•¦˜ ‚†@·§Û€aêQäÜœ p çyŽmµál µ'ç=´þ ÷pSòI‰‰|>Ã[ì9Y#Tƒ7$KiUáìe²Î»6÷ÈÙéZèÆ(Ó¥Ä8šBø$º£lЕ /˜Döô£]KZfgL9RÅ>Tÿ;K2ÌòmÕ×zo~œ¼Ofýky…€‹-jÒŽ.–&;é·C$o£Hÿ¤;Ì$9áómȵ³F†¥›t¸ÕÓ†$nõ¥1…]Bû•Ýa>œTvL‘# ±Ê™ìš!µ9±í—OÙ}‘Âå¿­$H¦÷•xÔYMÝÈF+¥H)¦½Y¹ýø»0Ÿ]ò›ñ#FAAñ”ù¦äIuè1³Ï¼švbŒ?'OI%J _ÏzáŠßÞÊÉò½p2òn/};°ôµVD7˜>ÑàÝÝI ~»æÍ‚³5#~§›*$R…ƒÓÞÎÛg{ûOð³Þ /^N»\rÐìsO8`4e@¾ 7ˆ)êøø Ö àöúá'0b1b-g7áGýNd܈ƒ»Ý†ºú±Éz™MWèÕ5, ãsÎ.°å­òµgjÖÿV?DÁ¹èäzuÜþKP×ì`g` x@€l_a4& 9wDøâUnäA-Ø­é~¬5ŠÆcV"ÎÒùZõzyÞ¾.a~°3o£ã¿_[æ†ÐCChñ5ëì¸ÞPCiÈóû‡cki=ˆànð “(Áô w¿Ô£ñ–ή9ÌI‘F‚}‚×Ï|õßqÿÀ%¸¬pÐÕ\[ …(‚>²O|ÐÜ[~þöVlê81ååR»ÿÒ½áú·èã]úú‡sÃü&`!p ÷[Xœv…§é1Áþ/îÿ’›)?UŒj*P_Á[¼ƒ³dÁ!’*#2ô$C”ÑbÐ=êÆÄLYàGT{fn¸7Pä›ÄH€EŽÛ^ñùûüž»¡å‚k –bÄ… ²ÈI¡ÉêÇ·Aש7/aét7LWaÒÄhÔÞc“Á ST޶ʧÍP…$’™œ >ÉÅ‹ÌmYSI¸V`+´A–«`ȪQQKUûƒ ,ßÇ.ØÕW ÿ!r€™G‘BƒEPçPåÆ:í8&:¤!i¤e‡'žÞsý{_ >>-S•ÀÌŠ„o ÒÃé õÍ7ð_Æ9¨é‚0ÂŒP ]’)¶),³sÙ"KgTÚ‰hDðâ¥sÈ)A±?Ãö‰4¬¦;4ôm,HŽÝÀ¦Ç•h…ˆMέÊô¡+Æ?A 3Š…9,tº•fõe«¸Hµõõ(ÙqçÒº .ÜFšòÐi/yï‡ß¦üæ×ZPcmª¯ŸÊº/¬ÖN…Ù¾Lõ;YWo¬´nHè-ú[äò[R:Eø¢ñ‡vèñ‚ïÌ1•ñÎeDF‡Û‰ÿÔÜã~l¡¢Â!R;­mU¼Ö¸Çåô}gÇ+½%|)¸–«§Ä'¢I¦ s2ìÏé-cÓ(у¤›ÆÚ8áý¸[Q½Û¿|²õeßÉ»F~a8·ƒ²:Q&ÿSS=´ò ¦\ÎçL6WÈé úSÑùâMÕé ”^}@6m,p%ϳçý–¢'ß‘È5Ò´AJÄ o RßR¿pv¹6#Ò¸&s/ƒé÷ÍNÔrRï·ÖZç2Æq g‰KI1FUµÌµØNy£,ÑNÕÁ„ïÈ'·Aà>À^†X T ¸è‘{Ćjèa“+Ì”h`Îû <ð#0´™eÆ@â/ž6ÃþUô=IúúOƒžþõª¼acNõoksÿÐ@ûîÕ'±mf³×UU¯Ø^p®1ýˆdˆuSÑjpp©&›¨Õ3ç/\¶§uý'Òñ {=ç>po¸Ì8Ï÷T¤ª¶ÔçXQ¸‘ùsߢ‡ÿÏÆpsd=BÁÉ৸ô<­¹þê¨g÷Êæ3|R0)™ô¨¼Àoˆq̳b+`Òc=lgÙžadFâ=ú=ê³S#ÅRh®ï¸ ÐÜ%€O4É2˜æ)µÃ¹¯ùB2Xœ†³…÷dsÌQ×&ÔáÑê÷n˜ãÏØNIºMaéNE°.[/R;:#e+‹¥ç`_t²×}ÎúØÙÌhš‘5jO/¯¥G(bÂIúÜJ¹”òGh¡zWkv;‰œHŽTá™&F“+Ï«`f¦¯õU[ÍÉà3*ð?AÞA1%}ŒžbÎÞñ€÷YžœJ/¯¦wà“ÎßpöÚâ5ƒ9²ì) 7öH Â:;¬”kd߯ä·!~N_Ð[ÉØPn¶E#}bÎy·…¬S4ˉè¢Xí³QÚk¤rcã®ìdU&’j¼3rkí{[lˆ˜aÑ ë6ÃÑZX‰õܘu;,gX‹Ö¨@|l¢3ñ`幬5èæ\ð¾5—c;±•1èl^R#»V\0Dœcr@id2B‡=ŠÕ¹@™Æˆvß3<Þþ/íæ¬¢Ôk}>7q$¶Cê9½—tÖŽ¡ŽÎjã2¨ÙRBåY’AB»ƒâˆñö9Ö—Ñļœxas)Êe%„$_ ©KùíÙÝJ/ãe°.RpÂyáZà|оàR3 ”G„çB¹òI#žZ@SØ&ÓNrk-aB8BLCSù¶¿Ã€z…^¤¸B¿!'Äs…v^Ÿyì-®ÔaJi0:“ð OX3ñÙ+ðû޵yj‚àïÇ·_õWÊÀòZw÷f…âç. lÕ Z§xãaZ J7•5`1–gÌsù7•ýÍ^qˆÒÄS–~¤»2¡FHAL:íP‡? 4ì£_‡=¼PhŒA°¤=å#öx•¿ v’¤)Ý\öÓˆî@ÿ2Ÿ7:µQ’%VÃàȉ Ø`¯äÆšƒ³“¡U7Ø Š’,Ù ~ œ§‚fØ URid„DµAŽÐ@X×XøÌ ê ]œˆ%9²)02dP=y³J=ªl’oõ•ÿв ¬O}?¼!ùg¨4UIÜ£ôÄ„€œp’dkCí±OÎ%OUþj/ÿgŸE+—ô#1ìrj¼k;ß–ýÒÿÞwè+'ßúhps|$œÁÂ’qÜ3‚EŽ †œÉZß.oÜÁP—ÎX_™v qþ?L1•’JmªÚnŸ“Έ9%/ä5¦äØrÚ£úeûBü—OóúL2ÑP])]…”… ‡˜ž¶æÿÌ«>ué¬Ã<“µ‰¶‘´Œ)vL ,К¸cWaJž÷$[ËTוּɉá=k¼+{ ÍLZ]*k{CÙ¡éÌKòé¸@_` h„EC3€(‰#"´jDns¨%fÌÒ˜.›UoðéÖ uµ7f³ t=«’Úcé,¦˜¹"üEc·­ž¿±›™~0Lãã…SgO1nÓÐõ£6…%Úa)œûøÉŽú7³ÎŒê¥Ö]¯bXy/ƒQ£È>ær/FÞÓ>zsWäï šþ˜<å`xüß™¿ôŒ¿CÁèUlªA,8¢Æ[ÞÃÊÀ‚Ùú¸Û^Ù¬›@;À ü¼ƒ)D°œê»]œ qOðŽ>gwÉÙ/wt¯°†Ž)\´'tȚXƒš“7lÇÆvE5Åü„‰À;b k¤¦ÐN`ºýQì´¡‚lÀ#7TW0¥0\ϹßÀ÷ Þ7ù÷5,øÒ”ë1÷ùTõïi’—)8’uÁù?Co¸ûA?¸y ¬¸ ²ú…uÚùÀ¥æé‚‹âö"ÕfˆK—Òï†_ßÿqžS†Ö°Á èP‹³Z‘亃\­_øD6UnITG)zÄ ¼[É€ MîÛ\±Í.´“€±'ß®'}M¹À¯á†­â‚¨Î&afû*î“ùο™ú·Â2ƒ ðOHÉÎü21ùù,Ÿé¾b€êšr„.IãÑ`4 ¤F€ŠÐî¤ã¨8LÀxÄšóÅiÕ«©Àgˆ¸À“£ËL,µÄzª¡QûÖ@¦U9‚ø–¸9-ÇÅǨ1Î-OŠ­ |ƒ äˆMέI\šæGÒ€ƒ­ÑÌw;õÒ¼¸ {dÚ)é®=8Vž›ßvÿî‹QS+.ÆYzËçÇnЫléKÆ#`rÚ+g‰÷DI°¤«N)¤4ôŠnc‰ÉX:²{I2±áÏš30û„„”%òµ‰š„‚àš2Ѽ&vëé`J‡8ääœ{ÜôívÄŽå0¸§&×ã-í6:Šè‚&Âá@8P˜Fjóƒu#ý‡>ü-~,…ÖÕKx“ôwçrTa #Î9ÁÄUÞ“}£|+vÄcýœ| ï ô;dAΧòš:b=<Ö{cKïâREÄX[WÛÖª…KŒ3ˈ)X*:»XÙ3äÉÞ×µ~| IDAT&QÇ`DµTZôâŒÑYz>O>…ìê÷›ÛUèÞjÌ$xåÇgÛºš[mœÐä!vÙ3l£ú­ o"y3Ðõ’Að”7w ðtSî —sÊ Éá%sˆ|.™n±óº}:NýšaÎü±x®×ÌatÅxŠ6¤y«7ô(øë×õöÉævEš¢ OsŠ WŒYY˜ÒLhï¾/‹Õ1ãÚ¶÷p=¦˜œÒÙÜ1ºgÁ°nÜ´Õ81èÅ!ÉQ¢-îÈ¥^ð/kžà“6¯¼?À¿Å]0hîrÚ¹žQ”X¨zøŒâ÷G®÷ ˜?1ñͶ}Yùþ¿ü½á_i“f?PÔ²x]%Ùté^r¹ÇyØüÉs~vA-Ðô‚w¹gŸ‘ª,NãSõ“¨–äøŒ›1³ŠB2 Ý·Ùá¾>!ÑY#椀ßCàÜÿ‘È4[Ss;]ZØ)‡*×"zmv43ÝZ]º¶û1kúY\’ºë·+µ¡Ø Áš.jDeøñ™*mHÁeÍûȆj¯>GA¨žàq›“k_lZ>¿}ÖõN˜»œ•|Z9‹Ôìϵ8¾Ò/oyÍžQÄŽžÕ¾eLª®’•¡`}@ë[O]úù@évJ}—{‰+’÷~’ÝÔ6Û–cdA^0ÖÌ<2 :avˆ@pøoÙx©0ã â-Ôœ!b h‡ ì/#~gù4ß^É:j£fKi»$WÙB¤WÄ‹“-CMaÎð¬YIn…"ÈÛ³¾¶½Éò +ÕJëe\&Ð s—™rršwã‚°ÆÃ3¸+|Å$ãaÑÆ;øÙ1%_ 52œG#ØÀŽGÉjЏ}Jü0†zÚþ‡«‘57s> mz}àl­;chnïSýó…±vG(VEÂ:ÆÙ¢Þ’4d {¶kÊW¾µ€—5 Üo4OÇ‹îFÍý¬ýÜ`@0sxýeì«I/Cà®_Ÿ<4iÚ“?«†õ_ߥ_O%§MÎ |}bnÿÉj¹ÅjJƒJX‰L¤Ïê@|A­Io±¦y/Ì]¶d P›Ù¤©¥ZõFºeL‹ÕaƒL6X¦þt.{zå>¨-UùP)‹èçN]x?jGMYš!Xb5¤ ö+#™ Ìæk èÅJÎIoþF—ŒäGaË@ô×܆öÙ!þ óa‰º‰©}†Ð3¹ƒ¨š²~2öNº›ÀGÀs¬=³õ‰2›áw‘/·ÜŒ¸“¡º éa¯>(078…5üÞ£ªúãòGQLJŒ9¤þÁG’;ÄoÆî§Ö[Óê%‘‘ä5P:L 4ÈHêÉ ·!ý#Û5ý[>”T‚ ˆÄA³ ”xÉaÏÈ€÷Íø}»ýo¸/ø‰¬÷¹. ›•ó>ñ¢ØKþPq¾%53ä ‚§‚.3ÎêCªãÖ2¸ìк)ugùŰñ‚N~½[帊4]hwšÎrï¸1|²À® –81^Y'¬|”–M°íFò”Ùf.â­¡.´IyR7Ø•›cÓ)cÛIžƒç|Û¦°ŒŽŠP8¢W±­hò¶ ‚"Q¬Ge² 8I´x…uVµ4SkUx+ì¦Û~½•óßå°Rúý5³_ÎW7%‹ÙßÔá7EJ¤ i•™^ÿš,~©ÿýX?¦Å|ã=&‹h¤óB «³’F ÕØåZH;HÇ{x\7†öÄ~xÀ7ô uŽRèGâžœxòÄMûå wc™M]!ýÛ'/Kp»}l÷Ba%DLZ4!´Ðxg¶Â¾+SktnÌ¢ME0QXŸmÊ\qæ^šâkDÓ¦‚ —ªr¾@.)o1ÈôíÓ‚oÚÙÇ%ƒ¼•¶~73Åh9̺›éênzhÞÁázÔcÁØ`>&M‰?çiCï8L¹( €Ý-\¿%Œqº8­3”A.°Ç¼°pü–¡I–Áà˜5 Ìk};‚¢oà§&2Ñ{¨nŸÊLÁrÐÝ“®ot}l3 ƒBÈNSu48OÜ` €ùk½4ðÚ4gu¬¢Ü2©97L–莸:ÝÍÇ'>ÛýÊ×_ÑAÉÝ”»E{kN6¬?[oøWwi ÷?ô¾E€»õŸ$nàE¡O9RyÌ3þÀÄ r×¥/tkÕRRKa.yÜš | _\ÀtA¹&ÂÙ‚—5ß„&b"6 $1­Ù<]V Eû]µô1Û!ºA>n35÷4ŸÛïG< ¹üM?ZJéJG9¸¼?´ò…OÖLÀ>ܪ¦F›P.•îÜãJ-ж…)´½¨,‘»d‚oð-áôQüü8^áŽÈø²½³qãËOJŸ§N.öfÝ îA^0£)l´c«p8ýÂÛ‡ý{^—eçfrˆHè}Ò#çˆï…Žýšý‚­Áj”¥w0&<.j-_*þVQ:èoÕKm7F°,RwÃ7˜™°NÚl‰Òìcó’Û÷äX¸öÜškšûÈMâow|¤Ð¹Á™ðhãÞÊÖ ¨óÅYæ%ÓåuÐWmùo`†vKõØ.&3ÇeàcY3;m³Yá‚ÄdWYoÊÖK‚ ƒ* S]äÚb“v‰+9¡Q’2’â@캸!UgÄ!…f)½1Ë"tI¯Ä±¾W¤IãL«3¥!Ñ$L2#QZ‘µÒA=©ç?ÇMëÁ¬'oîÍíL×—ÖŒYJÛųUFadFER$@(~é iìW¢‘O³Cþ @6¡BäVìˆûFi¤ýtŸÎöÞš¬§W4KI—XIE+&Èc3L‡ÿ ·hòºýϰ¢ ]t÷Àö–ës£ ?ãi. öÎi|e[4·½Yƒ;ìQÊ™ÂOŠÖ "möK¼›ySîŒ}>OüÛðE —o\ÑùÔåÙ¤äê²D8#7|“¸[€æúÀýYýŽº¶vT8TDÈWÌLàÚ£×ÌœmW'J' °ø ÇyŨÀo8ÇÍÈ"A9t@xXw0WÇ/à)ÀcÖ'ŠÆqÎøXøO`®(¦LŽ&é Ŧ×_Ží¥ûJWÈð ì;‰LôM’­8ÞÄ<¸Ïk4T¯èÒøj̞ú?VÑšQ¶×ÒyÈ Ñã{ÔŽ_¬I . Owßû *ØHϧáÏí}{z¬;ð»ž^-o”ðöhyûccøé‚‰¡9Ê-ê÷Œˆ ú5·‰:ÌÏ\x3äêžmˆþ>u—®qјhÙØôacÍ-Çð¸£0jMõ ½sÒ†øÐ:–' ãààþ×çïkž¡èþ¾Pé«¡®ƒ»·Û>gú9¾FÝ‘DEe:!°É˜ÏÙq¹ŽÜÖZ¤mÖ –R¡ÆèQËx©´³’¿®´þ0neÏ7üÉb“¡˜2\ª£FïŸgbwnÏFêe4îì¹Á< !¯ù˜–ùRg9ä@òýhý~GW¸kß¿¥ (OØÃ3~Ͱ¦{Ã0B dA´zžÆt7ìî¨æL\`ðË`x:¾g±'»:}Yg¬Ã Å}ü~¹H®]TþƒkÃzªÀ»ž"GeÌ}â:Bdùdà<£bÂÒ?º¼a‡±W¥Ÿªƒ1x°¿ŠŸ¡.a ‚ìd+5U`ìÑ[¢ÇlªœéœÆ ²/U—9ãã}#0ÒZ)mÎHm”kF©­$6 "eÀoq‘t‡\Ù¡ô(ºBnmŽnx"v”P®IW·bZ§Ú¨í2]t:¯zÚ –!ì³4yã^ŒR®ßø‡ÛŠÕG Ò{$¶¬ùl^ÏB=ÆÁ%Í`x*‘–2Òc#ÑߢÞÙyoÇ…-4›âÜ£L ñN‹T“Œ/–^tâe•‚YnqiGµq U\ذvšq`™0úfÏ;9Z‹rˆáV/jµ6åœî–Õj¦¡jï¿g¢­W̹¯ÊöFÞV¹þngÆxèâ”sC)ØùnØ3|0þÜ[Ñ©#š4ÀЕž±Wå¶Ôí(¾­Ü<ÎÕ^#ã¯üŽá¹9WmöNWÙG}rá÷¡¹îÍtd?J¶DŒ¦¹Ý·«ÃÌSl˜@µf4oÌ¡EŸ£ zKVè‚QÄ ¸Œ ¸Ï{î+nA?P`GÚœ¤4î(—™2\õñ¶DÜðüÊ÷<€„Ë#‡†×Õ4mä×Flßl!yg_RÔiïd€G'ñÕ¼- î€ôÄ5¼_ÿh]½þ/Ž.¼|D

    !§¨9t „-l骇µÉxO·]ð~ÍógÌfœ‹Õ¥â)ýòFË™3ÅÁ_ª.tc~R\ƒÈŽœVV¢bC߆"­ÉWÈR½ÉÚÆ`=Œ¬ÑESÚV*BîBÄD3OþœNj\ÉL°ÈÀÙ‚HÃTׂ:¯æ™©hª¢•‚dÿHŸ-¨ÈM'!š¼7›ùõøWQÀÄÐÆ ÁžSň<âP’-R²7 þ^übƒƒò £‰–§ɰJ®GxŸ4éÅÐXÿµŽQ0„æÚu2Ñ{S9cw¾ƒ-êìŽò½97ŽYOøI棞q~GÑE€³ŠrxSº‘í5"Q4¹lµ{›D²ñféM7ò«rKÑ#ï^1‹kü‚ÌjP¼ÐT£vï‘oq‰Ib¬ÛqXªì¢Ä ¯S«=…£8*çß#5¦B†F¼­ó¦ÎÞaöI •?±Á³ÓF.žÚlÓZ\Ô¹´±rGá½øÐEGbrÊ…ÊKyX—[ê)œAZÿ‘àfiÎ7Fa¥±L‰Êtó^´ÿmÆœP(õn÷£ƒ˜k:º#ý$Ká­oû~éb]TÖ.È„oq]—Á¯AÛ+¦•36ÏQ•˜„E:wbJ*pG³±ª%µÀ¸òÈ}±0i)^¿§ö5Ö1µHfjUYì¸q‹ÖÁÄ0ÊØˆÍ«ç-èš Ú?X2œÄ{X]ÔèÎØy!óX{ÆjäÕKHMLmÿÒ¦=#…0dɳe(¹?.kzpí½[þ,8[Q—¼÷»VÞÌÔkFPpk¨‹I,¦Ë~å*úep™Rp&)1Œ 9Kˆl{Î>àÞŸÎiXS@\0öú(AÞ¢zw<Á^ÙùÕçkÎ5ÿgkÚon–³±«+¬v.ú®ÿvØ×ýΰñÕ´³!N¥ûü î[øèUç_¥•Çýý]özÝÞÏ—7¸™gžÜ´÷åû6ÝS¬qßoòféðŠò| Áìá¤]þ³õ†c&Ï9œvDGzÒµá^sd`¸ùLG=ä <îõz¦8Šý›Èèl1Þ>Œx€FãúÛëÀý#wEs}Þƒ²ÆN½ û¡ó.À{¸¸Á_’Æ a‹»a¬VÊP,1´¶†nÎç%`#S˜ðë-ü(46¶èç£cä„ä°ÛÈǨ‰Ï‚hs¿äʼnGÄØÙì‹¢Õ‚(ÂêÞsߌi§=h PhzÍìÄ€†{Á;ÏÄQT­.ˆ;ƒ}ƒkàaåÁ-±nãë4j_›t00¦Ypþ9õ[ ¦„_’ D¸5ÈÅßœ=ü¦Ó`4EI´tÇ’Qp_p©p±âR;3`¾vã¹ÿ[ÝRQ0 ïÛôúÄ7v–ü–ázÂLP‡Ææö˜ÏÑ€Fû•™#«¦xóÆLë—Ò"Üaï³n+påë”k7Ø? .{Š€ñ½k=²¿"Nfô’}&Êv‘þ„ Es.GŒîb `øÃ!¥=Õš| I2·”µÒg)”™r؈/g9]´.â·‡¶–ˆCægâÌæÒ¦L× ± Û½k¢¦×?}oÇO½ûÎ.Œ£´Ç— M+–ê­ s¢qãwº}Š0àÃñÜôÑ F©´CDßû¡T»R½²K¡ÉOföPY©Ê„¢ñ£ÖÝ­º×,¦Ët¡¢¦ÙY[7"ÆÑ¸ØÚØL¤sk­GjÍõ´=šlOß[Sx?âzD!°{¤F¯Ï „€õœÓv6PŒ?õ—<´‘7Ó¯šG=‹bØì}tíaCúŽÍ;/kÜÛìôÕ¸Ö|!¿˜,½Üu2r_@±n,­„’ÚRëqqÁn»â0e³¥ž€APD‰×„ÈIAä>péyÞ Ö¸+Ô”Þ çÈH¾c7‡€‚Ç@ï±w|ó½å“7û“×Wï°&~ÆÎbÙò¨ tEÅÈi¼Ýî°:h¾Ù4çíÇo)tSèÖxöÄÏÞð|ÉG\|ÍèUÎÙŸ>:(^Wï XpiºId<˜)¾ÜuòÖ§v•¸5îSeÁÍšÏáìAj¶Þð½H©zk ˜£J5°àtzý|} #ü‘“”þß}º¦ˆ+ª)ÑÈ~.êà;}353c ÿËË(S2+ë/‹N§@nÝ ÃÝwÇãÇ“‚‚¢$HvŽ~B§™œqQbrK¢÷  ÊŒ_°“‘sK¥Ûêñ–ýˆ‹„–d¯‰H’<^Ö Lã#¹¥ËTïMñÞÛygŽÖÁÞã·„Q{LQæœTQHLJäÏÈŠ =_¼p¾A;Ì.ÈšØxÆë“0NñŠ_·þ/|üùëý˜Â0ž4wš/M©Q†¤Éý鶨èðßKÿ£zÍxñ?Ùú±HÿGÖ0b*ˆp]5÷E‹!I‰‚®4cÆ o7ÝâöRlåóz ‹ ÞGL4µ½-¨­4Õ°< ÉË_&‰”T‚j‡·Rܪ­Í!xº´£Oe“±a°‡iÍß%Bf ]`ÕÌPód8X6’IÏñtI,P™a» ’½ýå£=Ÿ_†Mçç«H%»’!×FÔÑZñ†ƒs‡÷nó“j÷ÑØã/R7Íh¬óUK]Æ‘I*»èrö.µò™pÿ€§}nHÕ›Õ™Ar=r_=´¼ŽøÇ„DG7\П›\úgÑý½ãfËe@âCj‡´ô3W„ÃhŒ½Ø½—É”¿® (ÿw/Ñí²q¹ô}ÑSžž¾ƒ‡v²@™Nj k4ÚŽ¥.ŠlÀ:Ú”‘¡ry~á (\Ä›Åkcȯ«““¼!¶÷¹¹¤Í W-†L“L4¢bôcÙ°s¨5ú-悬 ¶ÛÃ#qºQÓ*šacè’Çü÷p¢S#¦ó†t|{A gÜçÕe`òؘ؊)‘ÞÞ~µ©ß=ÇR“2F`V.(Ö&Ѥ‡¶‚ÍeQoÈ3D…,Q- ™¾ð|xÚR9"è)á=ÂBpoq0y¤8ñøx‚/ÿTns?‡‹výÇT{H ÕêBR¤ÆäÖÃDñ­änÚ~qs[\ÖÅØ¹L¢órõXðÏó£øèn øþ´ ;¸8Êj×äù*=c÷Õ­ê %‚»âyÊÖPÌ6<=¼j2×|òºªâUÚûçé '‘Ò»Fÿ 5éh1ŸÁ…a,!²[°]SqÚÀz°_Ÿ&†Ýé© `¦­ºø ¥_&!o Y´îöÕÂ×êþ­}‡“ŠNýª(ÔÛûi­´ 28/ÙK† …—0"JR ¤át@—¯7t­Ñöê$ òÄ¥è%NHÒ€ˆ¿@%¤à˜xíòJKŠuhµea8x7üÚñ?® ä9Ã/Aà%fû¢CÍÅ‚ññ õ‹½Á]á>æ|L>#þžÍª~ͰÀ­é×ÔsF± ¸Éèò(b G?ùŽn¥_œ3}¡í¸×`$@Úcí­Võ}07,g¡+Äê0P «t@úƬÛãßœZÖøŽã¤ºB¾!NÉ%V#um¨ˈQ}è—¦ŠUNÌJEJ+'p¡ñ}˱!lЇ¶/Ep¥äMé•Ò¾ŠX‡ Ð/ØŒÙøß-×"…¢ôŒzønØO8ŒOY߇ /…tgµ*¬»<â •Û$xÞ7°gsÈY÷Ã_öîì…QG„œ•ykb]$£ÃYÎÖI³ô¹±û™{ŸG’4MﱟîN2‚ÞÁ¬Ê.¯šÚ˜QO# ”—…£HìE[ À¤°ýwtl4ÓÚË AüV± „=½Ý¾“U™9žÁˆà737ÓdVÎh¤k Èc A'í³ïûÞ÷yeè|`0èáöpÚM:Æ ÌRûÿNw¬ŽªÊÞÀF·ómAfë>k"ì¸ØP¾Áv¨áU§9OŸ6ÑÇßeP ˜xG_†ÁÊé›­SìÞYÞOXz˜¼l™Ìæ£p—ó… Ál¬Úô±x’ÎC7éñÑ3±]¡ÑƨÊû¶ã€Óÿ'£ê;|I;½ùê×: “ìE¤Cχ)®ºÓ«Rcduf]ºœ5E`o¾ç±B¤F[æÏ†¾ªY5iU›ªÑÚ£éuÒ šÝÙ”› KÃQ ÔóÃY3äè%Èö%Yùà,­ t/®]>Egg^¯³b ŸYÄ”AÓÃ>2 HCŒ‘@ò7<¾ÅUüCÐèŒ Efèå;²wL€Ý?…-kþ~ÊábãÀ¥Cj¬c*ù|Ì80 ÍQC ßMË¿ÉÊgcÜ`yŒ¼Ñ§ßÙÒºE\£¦(Ãp¤‘kÆ!'Æ ðuÖ(Í0&¼ây͇)í% ÍMøé÷¼…—pq¢ùŸ·6,¯¹šâ z†[ãU=xøfÅù5ö+ì^*¾ú óL\Õ29ÐV ³[’Áë?ûÑæ9]9e=Ä·k»Š9™Âƒ•=?óYßÐ,ÍOÀ×ãò£e1ã[G¿ÇfˆÀhO¯˜H¾ËÿŠ4æ°*×+Ä”aÄCF¢Î´±Ê* „DZŒL–¤ØöÈFrȨxØ6j‹kP0©Hߣn»¬ÃÿÒH­3a•.¢±Û[¦§~CóH– _&¢CJTEZпªw“æŒå‘šÖ\~mÇÂ’¯T/Îb|a]—…9û{vnoØÜóY7>«¬g_*Fª'”q¨­B…Bîìð Ý&ìwñíÄS‚Ä$Æšá_ŽØËùkÅÄÔÑŒ#æß2ìÙÍx·¦_ ¸bçš¹„Ä#{ËxÁøbr=r\C#%™$w‡¦ŒïKÖãv¸œßzÉD QïEËd͘R™By+×:U¼õ}ƒ!°ŠÂ’1×åëØ6 ÎàfÍ’SÓ੼]—Õ4“j‡%ʰ©`\>Ue÷ÖJçÎÇäšsK YŦåqÆ(àa(l’F¶Hׄ)Êf¤5qEWÑ–œ& xBNÌa ¦–#sSØÅ…å+n~0fÕ›i'/M®½ ÌyIÒxH[´A „ÅeÂHÈðàZ.füáÐÖ)ndm²+¦cÔiV\Âÿlr>åâ’©Fä¢GÜ–(6d0²h‡(HÊ‘ n.ê¥0mfŸ…=wøgÓÛúB5ô{…ù%j†.H9B“‡#;6rI¯‰S’!÷d9Ò’ ¡ ›òÇíqb,3´\@qÈŒƒž>½©ÿ }Ô‡KÐl©÷q‘ò¼ž2`¦`Б³‚ì‘ø ¿æù ¼©p-ϰ‡kFS”¡Ÿ0ˆù&±ÕõcÞ<øúbÚ$Ü F¯ÜTøšC”ǧ…ácËò.SÏ9ØÀÙúÈnàa ÏTž|X!ÿ niq†¸E<#& ÙÀ“ç{{n?z.Ö§ýÊšCt»“doÙ¬ø‘;I™azîó¶k™ªúÇVæqE„ßVð+n –à&ÂŽLs¡)46#¨hI0Ü"ÆxÃÆ"AûZŒ›,#Mq%ÂÞKyaÆoî'ßuf5w·”#7ŸÄÓ IDATº1ã³»IV*iöᾺæl¨{»y¨)ÅXêLdJØèïâ(„?VöËcmÀæSÿÖüŠ?ݧ¶3>ùû³Ï‘%ò lArµ0Í¡AñàT3–÷ФÄ`Œ¤ ZŒ”‘©‡fPìâ !ïQX¯á;%œ1ú*Ì¥Âè:„FqP~Âκ_ù?¯›å²Sã9ð&0*Èvv'ÊRó_íýû¬CÌIͯ³{»qvÑô*ïQÉöœmÑo»ú…ÙçÞO;1j¬¹w±ôýØîä~7 ÿèÃp%‡I|²±‹î÷"Þ¹#åýHv™ž‹€Q$…±±É$ň$ >[ŽÎÐt'“Õò™«5 dUÛ¶ WôS˜4 gL@Fuܘ~mwXW!ÂS¾«³¼ÑàÂS´\B±ª FT6´V˜a…¯pýèÈ8‰=ÆuÓW8xÓž®œ=l`¨Y˜ F%ö|¦³‹ ö#©ž„®Õrb~ìíû©½xÂæÒÖš&‘ÏðÙšù˜ÈÖÇQIühWž¢/é5ûpœ³=CßòpÈSG(ËmàkMö„:`WMƒ¹¿°Ë7Ú=ì|_ýΔ®¥mƒ«Ž?¡qùµCŒÄÏ(22‰ÐŸ¶¡kn`™îÈÊ%n/æ™=þ€€‹OÏ“Š C©ùÅ),z·gøÀÎ`)þg© ·pQ‘Ì{´á¢"kO·Š‡1“œ½Å~‘˜€‡þ1%ÜŒ~à»L¹º$hΉnOÈ›ïÍí3TmwˆSk¯é–§ì Oá±N¬X·Ü+¤!÷Çixc÷¼Û°xæŠÅñÝäOȯ2œÉ6c¬°SRÉn„‡ßFnÞÔ|ß,O/qLÌ^1=uʺâþò2`5î¾8Ù&Nã¿Ãt÷5<‡oId¹å62‹èm‘0döxqØ[Þ%ÆîÎRâ÷2vÙd®Fļ<§«½3·¨z„¢Bÿª,Ti¬µÁ‰GDÃ3Hš‡éýb´y­)¤-†!#*]¢qò·vznX#2—2åBar{Qº¬=Š4RÅÿ¯Ç|6¢°uæ´îKùKü}º­Ÿ¿‹ô†‰ë. ÆDȃ3))mccÒ!'è±cxÇsËCÍÅuF®±¤ñûfÿÞt\Ïͳð›‹nYÀ°ƒñ1Îo1áÜ’i YÊ·%ÞfÚ‘Sj¤A˜N>0<Ÿ )ßfùŸ±Å–rkRSæò”u‘5)ÙÎÜ`ÙÚ÷ÿHñ÷ÉVR}íµÚùd…=Œ'²´{› W€v(‹Ì™ôàk”dÐxˆñ™â»ÀßsßÜò]-ñúnóª#g÷úónÞ °E–ˆÞ7awVn€iëF3¯Cà ëùæ=Ùúx!4‘{Úƒ¼É9|¤Ù•¬#™FŸbý€ûœ~Ì<|œ$>47ÜglG•1ëÁƒí·rêã¸INÞO+,&wåàMê {\Á›_r1ÃB^`'Ø+é!¬Ž3 QcWËÞ*BËnÖÁ9À­à׊Ì1’0=hÙýRñ¿X£¼ãN¿cðšpjPö-[øqFPì²w˜–t‹>'Ⱥ—eØW$èzúÛõcAáFàÜà+R{bK4-ÙŒQà°2LlÁV -æ#®Âµ<Âú_óð| °v؛壿YwÙ ûŠQE ›3 <;$œCr¤pÌ|>raµÅúyìîr`ËEOy†Õ8 ¯øÃš«Õ!¹&§ŽâgÊoh±3\øÃé ÿ©­|1c±ç&ã/á Ì€I$Àðð‚ýˆlD=Ô`‰šÎ²q˜>ñ¯s,‹ 7–s–zX5n*–;†t¿ÓÀîX°ƒËaøD‰ÑlÎÉ2nÆæø¸"­&ì,Û#yT\gHÃ`‰òî[_š±¹ªîÚnÁü0‚¼ãÀ¯'·Œ_‘˜ÕvmÞ¯ìÀ¾†c© §ÕÖ·e¾‡Q¯>ÍÔ¶T ù+¤f€> $´¤WÄKvš'ÁÞñå¦Ô”“oxj)£ ¥.ˆ##¨šXÕŒ>ÕÆ Ï䃨 šmÅ…én4™8»K£R¦„6å&õðÜÉ qF'c±…46WL^E­i¼áIfîeŽÉÌ™¸°ƒÅ·öü—wt6d1ñ!Ïöòbó-ú<þÏYüóXÎ …6HÚà-ç5ï§¼ŸpnØ„DlžÙ½ã¹œûÈ8¯ÑMáxÝóàX|ºÔ0e®yMýYnŒ±[iMäJ™™©sÝdqþ]½y~±S僱һ¸ö‚FÞ"¯PY£óz#›ç¡™¦Ú]„½yþ×}7ÝéóáeÆ¥ì³Ôëá}ý™ZÛqÔ9OJÖ)5Ø!CIâ–Ü‚#å 0DLèÁ½Â¬)VŒ![ð?ÂÚi)/ˬ°fç"<χYÃyB ‚@B4QWÝykÀ§u׃{&zäÀw ^C~º¡tLÀ?_wÔÿdXL¸Ì“€Ü°W„’ÿsÄnF§dËC™AßvEaã? Ãd-Uw ¢º‘ ôfÜ{+º¸Åíp‘ÇMPiÉGDÐìŽÕtKšø!ð‡öa[qåx¸€œ_ .yR¸ˆÛ£ZΧ‰IªoØ@Koéa0 ±fOð‡5wÈ•g´Æ´¤k¢ºs×!Ž‚‡í¿Bÿ9ŸÍ½a2ãvý›Åbnv·HO¨ú¢Ùû#¼¿fy:R–k¾^“8-«½…h…ù3é[Þ\3™òÝAr#`;'À¶¦i–pu‹»¢Ð(IÁ3$B ‹ k¤A{ܨÏi†–4C à"à žÿ}ÃÍá^[ShÈÉôO\ñÃ[Wä§„¸Ÿ)¿a},¶‡\0þ¬{ ËÈ—q™†À^ÒF–š›Œ¥íà"z¦žìO\þ7l,‡ªºüœ«Œh¶°æ“ÂÀOÐÂQS{àsØ·PaÇÄ{‹Kô9zà""2†Ý19d¿`«Ð¿$jv©v¶q;ÌÛD–Ê+YÚh§¸üô»Ã„`ÊÙ%…†ÐÀ½Ç}Îâú¿Ã„[Í|ÒØòÌÒs·æ Fk¤³£AÔ`‘š½E9®ê~oÖu­ÍaÀÈQ­ íåJ¤ ˆèíî'÷ŒÍ…òúÑš?:5Ñ,œ¬|Q5ª…–ÍlN@në}xt9VfNà MvèBÇu2Í^ß'­¤F'…W¡Ñ 5ú¡LÛÒû³!ÇY™ô°u<~0ó¨± S®®ß ýƒÎ’› ¯ÂfЃHƒ7åqÄ2¸ŠèH;=¿okÊæ®`bš‰b6ðÅÁOÓBÅ2ÇR6!ÝKéìka› gW°6Í›wwßµP™×­×t ¢"ewÁ”Aïï³]çd§†qöêÜ.s^O'¿(ĹÍô°‰C³~ºßwäRºŠ3Qi7£Ïð–EDîˆ!ë¹ãkÏÆ°»€@„ŒàE…hé«ú/ÎÌã™}°Vj|0oªúbÝ0}f4abHén%Þ¨Ö›ªWíïŠ›ŠØÒì,‰`upðÎl©{š8åÝ!ÜI0OÜ>ðÒDtƒÎy ™æJ#Ñ‘®<¿PóóKŒ®eh ïõË£ô~`nÓX±Q;ú€ t‘µæa„V ¡±ïaŒ«èÛ£’Ò¬ ?…—ý›…ÄÅ@–ÈAKˆÈHáèwFbý!-œÒŠÛêPøÓvS‡׃ŸÂeùœ•Ûal{܇|Zlì%BcÃÁzŸƒáxþø¿LMæ1ëÚÓ8xxqâ ³ï„×Ðâàé$9ýËüþО’]òZó Xx8ÉùŽ2E‘‘Æ Ù3!0ÒˆHaO\ÜYJ…‰ÜKº°žGˆ†?ª|ݘX³„¯+LDjŒÅÀÇÍëÍ5?NùKÃd†,~¾ü³:ª¯®ZnOpV> ]qSa!•8…4l=›5Ë)h–ñ¸¿84ƒ­™l­É\=ÄE¦¹I,ÇG(ÓæÓ´C¡:!63†ò©ÙÈà6 %ð y©("ƳÿÄA¼^3º¼MÊ_“Ì}¿ïünŽ©¥4cl~f‡_¢gæÛu­VÍøã:ýk0º¶£FlLg*Z£ñŽîc¾EYqÞ2ƒ˯¸:¼uðY[g4ù uKÌröfƒ ü+ßì÷΀V^Ð ñþùÜÆBÚí³ÃwI•ëe>¶éFc¡Hé‡à¾!…ýò†5?ÂÓŒäÝÈ2X3|Š=jÀ´ ³F_`B—>š˜|0]82â–ðº¢4§!Ïa£²ÿäL¬Xðí@™nPïQ#ÐŒr¤F}`O e‚‹àWìàù–~qäÂ}÷©îæ0{öÓÍë”Å%h^BÔ?ÇLéáä}>@ÊÿBÒò×àZ$Pѵü_×P€çF³LܲÀ8÷Ã]A)1pOìŠÓ:÷S*øÍ'¶»¬åjÆC`7ÌcÛcÉßC ´Ä¯È2db¢ùLc#ãˆôì6ì[ÞþÇÙs9*J)윒ô:ݨüžàd†š¹bç?£9üáòšý”½¹³—¥.Œ÷ÉvQÏ=pÂxd`®)§ä†ñŒ³5zu„¶ ]3žÞ)SŠ™ÑÜC'>›‹3¤ED<˜#‡Œž|Í–nšb¢K«z¿2£[ÞŽ†ç_ú§~˜¸s£GVVK$C<—!j_º8JúÔì»ý hçé—º®1 Þ“`,Èûy*²îCÃàÉó Y†÷kuWÙø+&ÊÛ×|÷zÁ”»¿nK93Ø{A7„§ôá"ÌbéÜbHÍͧ!`Ëò@´ÙB`±…†» Ù–åßÜZk\ï)êõ|¼ïΊÍ.yi¸”~žgÄX{Ùx—ØÕ#{НŸŸæñ0}lfµÛšgsìø Wõ5²1/¦JÝÁy[OfÆî¬Ð6ÄÆˆ¢¾M]ȉÁ¨èµîŒAV¨–8E]btIQÊú袦?c÷K–UÃ[Xqå”ò’ìl{úž I)—eÒ¥ Vàz+ÀâC„„v¨†¬:ÊÃ=sµ¦9(Ä÷»…+AV.µ^]ÿþü¾•îsA õ‘ˆÆrmla¡V¾Q%¶æ,•½÷˾c˜/÷'5Áô(Sá-À¸­‹ë3;µÆX&Œ¼‘®xߘÅq4w°Èø çŠA1NXƒ±Ä¼IgOŒ°e¼C½§X0ƒ‡pyØkvxeœö¨uÊW>ýÛfŸaú k»Á0`•·®SÏ‹&r?b›°·Gõfm-ƒóuä¸àI½6ù´Ž41°‡]Æ&BNÿ°Ÿû'ÐuA“)ôˆaz%Èh$÷¢rÆà´F~¿mC_‘Zµ§ñâ1iŽÈ÷z¸,°‚$qš ÅÂñ—KÉUÄI§‚$±W‘­ vL] ¯1 ´bØwÿ0”Ò˜Ù½Xw=s “ç+Fõáƒ]ºTnÅ(„m ø1ES?VÍø˜nO:ÍÁ Äkö~ê„\ }€=2â"#”ºúW„@6 ýqޤatŒÊÀ_"u­B£G¨ i®4 ZvÞ3ö;C÷b;èNG‚c½ça}60k_Ð妯·¶»Ê>ú¼–u&›‰dd8·èÄž¯ùãÇÕæÀrñÓ(åk0k$ÃÄsµ&ƒ/áÍÇæa °0à¹Ð-ÿíìÁ-èf?»Æ½Ñ¯]\ùnÚ,ÿ%ì×,§\œ'¬±ZŠÃuó“0°ì& ëòŸú—“A¯¹™²4,g\­QŽø–u…6ü¥æÂbþ™‘d—±Ï°9RÔnk¼±©²ý<î ãšMsbÿ4¦¼K”c¹·×™Î‡È7’ïÖ<¬( «ÈÛC )²CE3DT@'Äšð'²u*rg4z}/qÑ0x×^Ò<ª¹×jÝ7¤'¶ÄŠhØèz83*Ú°AB0›qͤ¹õ,FWŽ_&s¢þ†ŠÔ2THЦ¦0IØ4¶›-dFÊ:Æ&öŽÉ3¼Eœ”¬áTW$GÏmAg@bBë3º4EŠî«ë̽یÃcævô…SÎ4ƒEñ¨Y¾ÉÈš#þÞ·DØ@Áˆ–ÔâÁWl[zøýKCþ/ sµ“Û‡dGCú“aUâñ46¬¬‚P™¡ ¢ú_KS¿Îÿb:*þš"ôêªçá knV,¯á7=ååíÝŢ̧¹¾4Q'„‹ÞöÏ/ðÆ®ï©:ÑÎÓGk‚ì¸Ê‚ãx}lO[ÆðÄx}DÖ®/ü#wï)Y™%–Jü»vè+L5NÃ] saH %°Óyx`³©÷“fë¹ðŒ®au˜‡öXE‘¯¬¬˜¾Åã-.Td­“x^5R#5xv=]FžŽÖ$%H{¢D=7*gHÍÞà©J×È)…é¤'MÌ`ý³ˆÑ²ÑÐÞ)ÊÈ™âEl;7›÷§Ã%ù# ÿìó5BŽ0 9àá’“4Š£a-¬+"„5=d†à‰ëc)¦Šhî”þÂÛ@~ïuG>׆^0Dü0w’>Õs YscXöÜ–;XÍêlÕŒ@Tôíý·ƒ?ÎÜÅΗy3Ú“F; "®B¶ô‡Õæè¤ýýx£ÿ8E*lËKÈ9cÕiÜ¡Xæ|û úñfâ²Ûid0OÕ]Ÿ:€Å'&†ëÕMP ¾?šÝúCQ<`;àâgª ÿb2èO ×)Ù%WšÁà &’ÏWL~ ôLg Az¶—¼Ë‘š!4C¸WÞ©W¹ô½¯ªæeK„+êHsÜW¥kKƒµ8=E\Rjö×S®ùý”o ã·èÕ‘Oø É2€ˆ ©=2€Køì0ú\u€¯Ì¾õ©êB€D®q°‹ ˆ¸5BKúŠw¶y÷•u1qî1~,« |Eþ÷d3l@Bl=½%½B´&ž5qt¬ë›Ü™àŒM¶£ß?áÞ2ZÊzê'Nà©tœxÎ%jCc*0 i>Ú«ý¾ ÿx·}[î1ºðªïœ+ØÂ¥áµ'3Lj†-~q¤ ^â0ÃÜÜH×¼~A̘ç :¶0Žq’w'§^Ñ ¦½?°nBëh½¢’œ§`° ; ¨w†}}»h+ý¯§0˜€íËq]bó  vëüóxO9^Û|ê2ƒœ‘Öô+öÃ&C*Hô+ ? ?¼ã|Ïtqœ|šÓ?` |O¹ÄÞà–6í^Ys6$™¬d äÀˆ$IÏðÔü¨ø"A>%1÷¨Mà>¿UFqxlÃêxlÁn;y…ã$‚ö™‡-á™+ø+ÁÅýÄø{\÷ ‘‰?6ˆaJ‰Ðsæ7 Yâ^Ó¾””VsãÃÑ) É£Ö„kôûÃ/  JŒC÷Lzò^'·‘ë€`t„‚?\Vˆ|¥%1芴¢¨ê¥Ù+;²6áƒñUíÚF‡yndñëUŸi‘†Ç¤lN—kmÿ ÝM@Ã×fD®ïòP¦Ì ñ~«»G;p\XŠ u‰ÕÓ#—b»B@ªí“Nþ}{Çì¯zÎöNʰ #2€¤p‚xý†‡]sàù,͉ou:g5Í„#‡fO÷¿Çܬ}FgòœÜbôå-¾âÊ€f‘>Uâ“!Ï‘u|ˆãèxyËbq«(¸äFæé{bÅü£ç3Ë–úÂ4šÚz¦ ,>]'|ž&À˜#¤à H`W8è2Î럯6,þYRôG…ë§kÅ,ŠqDdŒwÄ\ï ©cÌ1c$~Úvö¯Œ5~<ëÎ×Hîåó†ûþºsÓ€1ifÓÚ:‡2ÆèZÙæKØxSÞ䌣ú`·œâ {ÍnOvðm®ªj_¸T‚y€M[ïib‹ªÐ 108Ä3â}ËøS9\ÈÉ…0rð¹ì´ÀËZˆ&åüç¸~`0ì=ÖüS¾œqE}f›¨ ¶û”ÑÁïûŽ'vÏÌßsÛñ—-û#Fø.R®1ïªûqÛæ‡]W8¹êÏhr-r†ˆ-)4f‹oæ¶B´5«FTÄ¿b?Áåì%¾µÒMo '¾B¬Q«ã0zÁW¬/y((®àçp>bŸó­æM˜ü&3r, øÍYWÔ¸H÷U§AÃÌçtÎ J6²¿çnïFÞoÍK(*,•¡TmŒÑ† úàûp~b¤;{üÚ~n CÝÓì+ö-üŠt$Eü†øq‰ž‡þ´½ä§oq­1û;%ÿë© —ú‡3*½s<ÙP×ô–Ár® l8–2ÃPáZ¹E¨NÚD|Øvæ jG³Q‘ [èá½g¹àæšìY$÷dkàíak…ñ˜5bÅÖ€ÆÈ=Ù§Ò%‹s"º…v,±#ª½]Õ‚&Tô`Zâ+â 9!Yz…J„‘ýˆÖ¨‚/NŒä‹ÈX0N(‹ñ y½ãá{3¾ ¼†_žÎ#Y!Û&ûÕßZí¬FE·×~Ó6l“Û–PÕ: z2ˆú8ìžäÆõÖ>äËÒl½PÍFŠrº-u´Aºu Â"pëyÙI¡q–Íá#QáÛcôÍ¡§ÙŸ€Äö°½þbWœíÒïö&äõÊ0€ òÕéÊ9†ŠeûIŒMŨÅjÃ+ä%ÖðíñWïx0,4KËl º¢oQàgè@:háï‹Öh{oèöfþQúé ú%LÚ£Ú#nÛ7õö“>ægdt/ÿŸ ×;Ã0d’o$™F€õ¸1¼cÿ=ºÆk‚bcé-ÓÀx‹oæññ²vºÉY†^•P*l†ÛMé.ßNµ×Áß;f>…æ°¿B’Enrˆg¸R¤ˆžá’^³tˆï¸l1pÎa†žjoÓƒù="‡ Ð{âæõ ïoY§<ó—%ëÌ6ÖýF‰{“‹{EWæsíI=ñûšªZv·,¯î¾—Êï­ìz5V²Nª)JÑq‘cgˆ5Û†^€ãÇïIDATÒ_—aj ãâŒíšýêh­§¥ƒ‡É¬Q  x¤W$Cš5iMtDC1dœ‰»,–Vô½°4ó\¯Õ‡@yhJ^°+ù³å ÇeAþ«9œ0$޳ìw¹ÂŠZˆfÐ8ͳæÏáWëк14: žº¸†hœ÷Û¡“×Ä)ÖPx¬F«#ï®ä÷6>õ—ÏïçÚ}+ØKgƒW²cbɤB*L J¢#ü€ù†äÉÖ|}2ê§Ó.À@¸‰+`Zeò¡@Y^…Iòì csÔþŸL6 =´ä×Èé5?—jšÞ¡ ã Õâh¶Þ0@ØFÞôG´ÍrÅ_¹#vì°S+pYû“j~øŠG‹ô¢Nœ… Þfà=­ ¯‘SŒÁÌŽ¡a ƒe€Ø ¼s< ¼ê~$5È 9c¸$+ø&rn°kÑ¥ë *Xs å!b bˆw²*3e ¹#¬³ÐéŠl‰§T}Ö0y‘¬’ÃH¹íï]wÓ°|eަ;ëot³TÌuM07Á.½½[3žšhêo}£ÖœµŒgøÀ3<þãÉ,uö´¸v°là™ú?M¹¼Œ5bí÷ÚUMøk.·dg(ÃD¢r⸣¿ØóYDô¸â¸Ô9~ë#<Ã9¼¦9€ê\ËPa¨ízšZÌšòÄ¿Ëø ù{ËMb9Ëà ®™N) nF¶f¿"^â/Ñå°à¾ÿI\tȲޞ–££5”Áû2­Ëˆeåþ‰¥÷oÀ Ä“Ù"ž#ßzS¿ùÙóþe…ëÀ=×ý¤ùîœ× xÜ×ò®b)4;Ëb Ø’oÈÖdÞð¨›íˆ!aL­j#ßÚae/+ó£Q }voc2½|~R•ß­»,CGŒgXsù‚ É—ŠDˆ‘½¥ƒ?€á×0œ‚9GŸŽ8IfŽÝëŠù dO¾°×|1%˜p`G´H©cºâ,õy„¸!çJ0Õwf\êÊÄö>ÑI5¿ÉÊ­)E²6ºa‡NŒa£›Ë€u°&Ó|£É4) ¶µÀè©_Z­Ù3P?ÓìNO'üxÅb…lI¯§tÏöÝqGç@…r¢K#mR® ¹A™;Q•©5‘û@çoç® ËYf\IÔ1BÔ`˾'{ÁD S#)Ðç0"‰ƒv¾1žM@i2 Ã<ìÙR?«¦Ë‰Ÿ#.A Û#Þ¡E†ÎºhѽI½ŸeÝ6²³–7ÉŒðè®0˜DaíëøÔ¤¿#8Ì‚ÄñË,awœÅ«Âîôp]„/m+õL†<×~ˆû,D½Cï‰ùqE$$J⟑ÏHËÛ)vg ½fŽÀö½Ç¶ÇƒÌ´¨nKrhxùžé‚«kä”p†Ó¸pLêWx0íqÍsˆ‘9ÜÜJísñÁH“”wzý4j˜úlæ`+C“ 1'HœGx¼gÓÓ¼—\$6=#°×°"Y4ôŽï,¯ ¦–B)’B’µÜ@ã aák† ƒ(å¾Þ¦'§'N?ÿÖ?1my‚ÿ7Sâ%Ù9Ó¬K†Á= å‰Ý²:¬^ÍÝØËÔeW‚‡Ð„ýýrën×ÌVîoªæ0ÉÁ®I¶ò'ÞAvª ê”{s ¶ÄªùÚÜ3ÚùŒ‰ˆâêÉÝþW· ˜‘Í8“H…Ò: ¦Ü˜q}‚ÑŪ޴g ;`=8Ì®­—4ÿÌppÒíÇó3¼ù—nêËêÿgµá¸‡XÝe”}eì=Ÿwã9mè×<À¢åfvŒYßâ¹BAš1\âQ£óFù{;u€hM5Ë_ U(—§NLÞngA¢×¨.FñÆò¹fƒÇG¨Àµç±%˜œnÜû“î%;È¥OÔ åÐüšUSü%çš×‚sß¡4ûü ä¹c¢¶Æíãvâe”©‹QiR©f6Z'˜ú3ì(ZÝ£·&ô5YÓk\€·¥·|—óÚâ Å3Tæ>‡f°®ÀcšPaÚcÊùAøq°ìÓ"Aµ¤ a@³³$xgCèþïöîçE’äJðø×ÌÍÌÝ#"32£3ªU-W£É& uXš¤K_–tØ¿eÿ–=,ìu 3G‘Î.lCò¦@×–TÙ™Q?ÍÌÍöàÕ¥VK­_£ÖLۇơ»«#‚èLnÏž½7jgC´‹F`ĨUœákï&ŽIÀ´X .ðßGF~8è€^ 3¤Gl¡@DD‰TÈ …áCëYÀ[G¡ÈbD€Í¨þÕ™S*tDX¤£]‘i¤C´³Lݨœ½šé¶.7]JáæSxÍì§¾þ¾&dœHŒ¼ÊÚI{¯ƒ½ÞúÅZ݃xA¾$̱ðNºz¤>cðk™ÀØ 4¦]ŠÿÖï‡êÿcñ„YGCV"$Á£WHh?C€¨ÙuïQ-ë=o‘Kä¡ë²©ðK2ðå.æÔ«#¬båÙý]‰C˜ïöÞVl=XŒš”v²]êž!»¬Y‘…¿\˳#1|ÊÌ¢õì!g#{Ì’õ²?8}6&7´°)0㾋ѶûÝÜ!wø!ëH‘á»ñM?[f ' ƒrD;œµèˆ‘ˆ@¶ÒÌ2ê“ÃÑ¢ªäI¢ÕMNΈõ'’WMWb>›Vu1…S¼âÏj³8«™p4âiÌB5ýj@ƒžÃ9ñ§«17çÜÍ9;l0d *\Óÿ’†ÓETøB·RÙø‹ÕúFB¶$Ë‘Ò $Úp`‹ÜSlû§Ïx¸M=æ%t‡ÊwÓrÆŸ2T =]‹XwŠUxøc·PÑNø®¥5XÕ÷U}®É#†MÆj‹Ñ´-Ú‚%:ô-yÅÙg\^r{#îÆ°ë‹zW±™ÜS<¢OˆÇØ·¸Ç÷C·†8‡1^/‘ó÷J¡¾¤ù«‰ ï–3·“ &w¹À2ç¶âh¾˜ z²$‡}ÆeÎmÎë–Á3Š9Ä’"ç^óX0QìÕBiDu¤š¢\òÔ9™Ð­Æžb¡U8Ù ˜3qe8+Qœdo ÎÈ–ŒáVë¦_NZ°ðýøÖ.±ö9ÆhŒ#3È9±»5(>ð fE»»ÚÞ~wq9^g¥Òƺ(Çí[Â=—dh™›xj<ØÏt;åÕÆý(Zá÷–Ï\¨êuC¸dqK^±ox|ÁEÉcFŽh Ù|Á¼V8áÞVŠ1F“Ìœ‡)q‰œÓ6„)m÷“í™J|ƒý˜Ç=¢>‘×Yk‡‚1Vïœ\Ö>Ìv¥Þ|dž¦f³äÙ\›fVü]ý=73eëb…ºE€¯hÁ7ì?!38A ð¿$ŒÉ4E ÊóäÈ»¹(š0"h™1,(3ŒÆFÈh5ñoðþ*“'t&®‰ ¸éNØf6”Žç®þ§È­áGЍÈäDÊI&ÔVþ€TA¦ú$[×ßæ]¡„<Ôvƒà/˜<ò!”-FÍ…ÇÙj­j‚¿í7ôÚ 7EA´#X_ –0ÇLɶİõ»b_óؽ×9Ã1êÐ…MÙ~ã+ÌW" Ѱ¦¯ë—ȲØU¼mxjØM™0otæÍÈ ×X]írÞHj&ƒáL j$(Ö’]Æ&cày˜Ö•j”V#*Ú1«S¼âÂf¬ê,£=¢-;˜Ñ9aN¦B‚ÀRïäµ4ÖI gcæpu· ›Á÷&SþyËF `¿«íŠWoú’©G Úì5FR¾é7l«ì0ÙFcŒ{ߟ¥ívÜ9zŒÐ‡¾¿€h} ÿål“Õo ë!¯.y™1RèHô´Š(J>˜ÏឬézÅaÎçï=k¿ìBu…Õ¼U ²!@«Xž ëö~ ~L”´xrÇ'·„à "§X(7xÇΡwd/(4“)Ý4±~vaóKìœÑ’–~¸¼×¸)jÛŸK/Q9Á³Sl÷‹Ù~YK8-iO áöŸQBÑs#ÑâЀrÛýÄVä¡0†<×ÜV„†ÈLŽkŠVßå{¯“l¡å‡×í`a"ªå0@Ø)T$÷xOÏ,ë-f‰mXŠñ¿~c Ý2¢a謗yXÓv=Àx ×O¬Ûbs"°Ç>°_ò ^.q°"#.'3Yä#ÚÿÍþEPÑ@¹Ð‡wÜJ.›ÙstÀœ .±·ìîxÃaÑp1¦?ëð®TËÀ{­2þzcÃÝQúPÃõ v«ÏãÚiì´/iïKQ˜’wû9Š›‚—ŽÇýÿ¿‘%?äyZÔŽ«¢ANuÜ:§{ÏJÍGÝ‘¥‘õ=ÏZÌk²3dNP(CæÉ¦`úêàEÉÝ–«C©ÙðP±ðn^RV‘iÚ/ˆ‡£ Ý™ÕüÐ$]1sh ­Ê¶ –?)ÖêǹǷlYXËÚës?m'S޹Q çfzNà~`b1+lI)xÉŽØÍÐíê°›©ÛÚ½ÀJÖ´]glEì%»†§9äŒ\aоÓoðL<:»íø™ÙÕê‰Ð"Oàhá ·J_xçª Ì'‰¯ íòií˜Ý3lSHG ØH°¬=‹Š²¦?Ä&›¾Sê„[Ö/úí“Ö¡KD æ3ëQF.É‹Ù^ë]4o…züFG÷Ÿ—a¢åÙµf!ìZ“ݳ³´ dŵñÖdèc« TÝz„Ç)˜â‡\M‘]º@s9ådÙ7Íͨ×ÇØ[ —ìnÇ÷“Åã`£·ÛnèÂ%ÛŽp†½BzòK3TÀX^7WÁN¾ãú%‹ 7¦B QŠÖÀivÌuJÌûÜvt˜ˆÙ•M6¥~׎þ@Ù™$ˆ–`ûí²Ý)J ½¿’Ü >CV(‡tH íHÖ‘áÛ«üç“ÝÍȳ˛¶šàØ/ †Ý“1#&#gòƪ êÊ›É:ÓצZÍM7”ÍCôè&ª+‘7d~&†+ÜMWvfŽ„uÅ¿4Ý)ð]ØŸ£ÇXMœ–ˆ1j@«f™×&b\…mtÆÌRwÛBþPh'¡ôÉ'ÍUÎÄTÚ ¯ƒZ8s#Ái²jB31ÑÛ˜5ÒqḠýIÀ"#kÉö¨Hð¨Þö{ŠT…=Œ]úÒ£í¶p³äSPz]í—lGì°š¡#[ÒVXÍë’G8±ä[ö÷<6\ÂhÎöÅzh*ìà3lÅJ£,ì%wZ.<¬¸{à uɵÁÚ>×øÔ†w¯û³ØC™yó„õ—O%åïRu_´–[ä`Ð%NŽœ¢ø¾æwÿnhÉ>çN÷'˜ƒâWš¼b4ÁxJ‹PxËÖ+|sc`´œIê¨ÉÏs²ŒL#$Ž™Ôõö’UšÒ±{B]UJIT„16°=âÎôEåÇEÓ÷hõŽ´a?¢ÍØVçøYÃóŠ=™Å(2Këk_]»ÆÆ ‰5z›—ÿóÁ+ÏÙŽõgo¢gïfÿ¸¬¯*¦š‘¼ª—C¶eÓ§®3à˜†Á”rK®ÀÓ(ŽCu5ò“ã¶ÕµÕ‹½ºy%ø/)ZKæ‰×ÐÕ¶´êû~Ëc‰—ƒQˆU,ígxðÿÀ£ºy¥ ÌPõ¶aÇ, ·˜MÓ ÕŒaíG¸!oxÔý„ð䎣Qõ=,CF>„5üË’è7ÊgWm9ɤ.³ë‘_äáFÅZ‰ë,XamÅÏË('íÈèÂf`vDƒœ0•¬=¯=‹°ø8 3MpR,ZÛ7Äë Kü€Éã°ŠòÐê®/Y芲y’¸QN†?Î5Òð¼ãlȤbØÈ[îÿG…ïz)ȸ8åNqå‘ãIùÙä s…ÍapŽ#K„¡…•g£˜OùÞ²d#‹Û0ô¨c¤†lâÅd­ÍÏ„î Ÿ*ÊŒp¸§›vx £­ÚäŠÉPã/ÉßàHP¡ Ù2Å$g¢1¢²mC˜³¡Ÿ !¾`¥ bvµqÆ, í§3ï'–Iîq¶ïcêJ°P.ɠД’gƒÉIœmv#yô\éÈVD…€G~¨i»‡Ç†“)™'BîOˆœü”Lø‚§¨ððèyð\JN|=öŒ+²¦\ƒ}€€UçŽq-FÄ‚`Á&²pdŠ5´/È4nŠë6<könýîç¬*Æ]aØÙ9Ñ¥)°Ê£[2‹`AD8¥ ã@ÈÛc# !4ÙL˜Z zîá'+þS¼Ù¬îf±¨Û Îã7Ä÷÷Ø#BN0ÌZ<8ͦB7pŽ~v“²él°¬Õœ“)Å Î2€û@¾fÐô©pWñ¡ÏOº´·€a?okȬjSÛ 9:ÏÔiåDh÷ˆÞ–Ü¢'];\Ó.9ÙƒžÉ‘δEsf™þž¨ºPˆÈ&"²™]ë1˜Ì¢…ÎG3E3öü¡%ö˜¶`fE®ùØø±š0Õûål?¯ÿ_Ó7¹Ûk#'m­ãõÑÊ*‹ÀÜfÉíµñΨ%:žÏ¸švJ\’-gíWgÚ–6Ó§³RÕݪx(ê+€ºD±¢$ÅžbÕÅ¢ý"*„ÒV¹{¿Ð‡ÿª³›#ÁͰ _Ì.”~Ôf¤MVÒ Íj–=ÔËZr½Á*sÛâÚª5ä°?ç¸D 5WXS´%â#Ì”‡’Ï JEæûÊѯ|´…‰d²jŒa‹®­‡‡~pj;f£Ù î"N¼ÿ"˜ãèO¹wmZöpÓýÉ!w±%§‘áž±ø)ry#çf{ê»ßèx­`ý®ãõü°VxñE jr.çÃÎ °]’w3žOK~5¾ÙŸrªfÆÔ#Eq‘±ãá ÿ«ØÐôƒú°¤…±Ë)r¶§ýOg×oÊV,ºeÄœâ«=~A®f'Q”¡0™c°Ó'³3]w+\aéÆ.UÐô‰Ô®öãöP ý}͙ôȀDˆ’Md+Ù5,áŸ+Øòi¤\1~bÐC[-²†gè-NŒá”,GBÞÒ VŽÏ·¿%¿E¾ÀœÒ*œgOß%Ôj÷ç¼óR3vdíLgZJ#2#3@{7cU·ò&J2?Ã×Î üµXÙuÁ‰´A8O&@+¯ùtöè78jžáë®ý„Œ•da8‹X‰nÑrPÛ°8Gý-'…@îê>‹¸¤,‰a¦T=¢dtŽœ# mSrÅň»<\žNʺ×bj1ds›WNêZ*€` [lˣŭødÏ«\,9›£ ¨0Æ…±Í4e.×…"ËPXĦä×iÛˆÂJá ]ó  Ýã>g·!z\I4²6âZhÛNi±Ö» õ[¸ 8ix5í;ØÏ/„C7:àv,VóúW\ÿ¤²× Váòq-OñŠàÐ~V;®ÛK»¿e[Yû‘³ªÞ šPAÇ_ù¶«ÝÏ09J÷‡f”Bˆ Ü”¶˜-Mý5g“¦ÿ °®8¼UXSßéë mWC†ÚŠÖ®¦Å̉,lÑà‹}·jéŠÎÇøQÿRÛ-÷Ø)œbö‘A00ýöﯥ1b…nfghƒ±•ñš½ÒÙÑL?ÕQ³¯p°Õ,#íatƒýŠçã® ë¸éoÚ˾t*îÂ)Ç ã1 òPåÀvSoùâH ¯ÀU¨÷û°¾;#=€È¥æ?̽AÎû ½Ë¯ 1F’$I’o7™¾‚$I’$ņ$I’$ņ$I’äôåý!DúR’$I¾m¾´Ùü[ë”Dº¦kº¦kº~k®)§”$I’|’$I’’$I’’$I’’$I’?Õo­SŠâ‹kÚÂO×tM×tý÷}iÝ$I’¤œR’$I’bC’$I’bC’$I’bC’$I’bC’$Iò—õÛg‚¦"ÖtM×tM×okkZ7$I’$)§”$I’¤Ø$I’¤Ø$I’¤Ø$I’¤Ø$I’ükûí5¬}ASLßQ’$É·@ü]±!Æ ’$I~/Bˆ¿ü=óOÓßçRN)I’$I±!I’äÏäI´üéoúû¼BŠ I’$IŠ I’$IŠ I’$IŠ I’$IŠ I’$ÉŸ›J_A’$ÉJñþßþ«,ýæq„wïþû¿ï—^äk?Š I’$Œ¿@ë—îà¿y—ÿ}N±}å‹|íçO9¥$I’¿Þðóg9ÍðG¼HZ7$I’üIõÿF[ ýîÏŸbC’$Éó0þþMöß\xøÚÏŸrJI’$ )6$I’ü©~ÛᅴϟbC’$Iòei¿!I’äcü¦ö¢ÿ,oýµ/’bC’$Éy{ý¦Þèxë?ôERN)I’$I±!I’$I±!I’$I±!I’$I±!I’$ùsû¢Nip|úù¯ÿí¿§/%I’ä[hp|ú±áKÿ"I’$ù¶¯¦ï"I’$éˆãüôGé‹H’$I:ÿçŸþÇÿ ͘n?¹˜IEND®B`‚saods9/ds9/doc/user/rgb/thread.xml000644 000765 000000 00000026455 11213747166 017375 0ustar00joyewheel000000 000000 June 2009 <long>Create a True Color Image in an RGB frame</long> Original version

    Most astronomical images map color to intensity level, e.g. lighter tones may correspond to a brighter intensity level in a greyscale image. An alternative way of presenting data is via an image that correllates color and energy.

    ds9 has the capability to create an RGB image and interactively adjust many of its parameters to achieve optimal display results.

    Creating an RGB Frame

    To use the three-color capabilities of ds9, the data must be loaded into a special RGB frame. This frame will contain all three files, stacked together in separate layers.

    This thread uses Chandra data from an observation of Cas A (ObsID 198); the level=2 event file is named "casa.fits". The same file is loaded into each layer of the RGB frame; different energy filters will be applied to the layers in a later step.

    There are two options for creating the RGB frame:

    From the command line

    The command-line syntax can be used to create the RGB frame and load the three files into the red, green, and blue layers:

    unix% ds9 -rgb -red casa.fits \ -green casa.fits \ -blue casa.fits &

    ds9 will open with the three files in one frame. The RGB window should open as well. If it doesn't, open it from the "Frame → RGB..." menu.

    From the ds9 GUI

    To load the files from the ds9 GUI:

  • Launch ds9

  • Choose "New Frame RGB" from the "Frame" menu.

    When the new frame is created, the RGB window should open as well. If it doesn't, open it from the "Frame → RGB..." menu.

  • Make sure the "Red" band is selected in the "Current" column of the RGB window, then choose "File → Open..." in the main ds9 window and select the red file.

  • Change the current band to "Green" in the RGB window and open the green file.

  • Change the current band to "Blue" in the RGB window and open the blue file.

  • RGB window The RGB window indicates that all three layers are visible and Blue is selected as the current one. rgb.png

    Each frame of the RGB image may have different binning, scaling, smoothing, and colorbars applied to it. You can "lock" the frames together, so that the setting is applied to all three frames at once. This is done with the Lock menu in the RGB window; all four options are checked in this thread.

    Lock menu in the RGB window The lock menu is expanded and all four options are checked. lock.png

    Use the binning and zoom options in ds9 to adjust the image so that the full region of interest is visible. uses binning=2 and zoom=1. The "Scale" is set to "log: minmax"

    RGB frame with three files loaded The data is loaded into one ds9 frame; the RGB window indicates the current layer is Blue. ds9.png
    Apply Energy Filters

    The following energy bands are used for the RGB layers:

  • red (soft band): 200-1500 eV
  • green (medium band): 1500-2500 eV
  • blue (hard band): 2500-8000 eV
  • The values are just guidelines and may need to be adjusted for your analysis.

    To filter the data, first select the Red frame from the RGB window. Open the Bin → Binning Parameters dialog box and type "energy=200:1500" in the Bin Filter field. Choose "Apply" and the ds9 display will be updated to reflect the energy filter.

    Without closing the Binning Parameters box, select the Green frame. Type "energy=1500:2500" in the Bin Filter field and choose "Apply" again. Repeat these two steps for the Blue layer, using the filter "energy=2500:8000".

    The colors in the image, as seen in , are correlated to the energy of the data.

    Energy-filtered RGB data Each layer of data has a different energy filtered applied, correlating color and energy in the image. filtered.png
    Smoothing the Data (optional)

    Smoothing can help bring out finer features in the data by removing statistical noise. It is an optional step; experiment with smoothing to see if it improves the appearance of your data.

    The smoothing capability in ds9 lets you interactively smooth the data. Note that for quantitative data analysis, smoothing should be done with the appropriate data analysis software; ds9 does a nice job for publication purposes.

    Choose "Smooth" from the "Analysis" menu and the ds9 display is updated with the results of smoothing. The "Smooth" option can be toggled on and off during your ds9 session.

    Open the "Smoothing Parameters..." dialog box from the same menu to adjust the function and kernel radius of the smoothing. This data were smoothed with a Gaussian function with radius of two. The results are shown in .

    Data smoothed with a Gaussian of radius three The smoothed data are displayed in ds9. smooth.png
    Adjusting the Scale Parameters

    This data is being displayed with a "log: minmax" scale. That means that ds9 stretches the scale to encompass the range of pixel values in the file. Adjusting the minimum and maximum scale values sets a threshold for the background data and brings out features.

    To change the minimum and maximum values, open the "Scale → Scale Parameters" dialog box. The pixel distribution shown is for the band selected as "Current" in the RGB window; when the a different band is selected, the histogram of pixel values is updated to match.

    To adjust the values, use the cursor to grab the red (minimum) or green (maximum) vertical lines on the plot and drag them to the desired location. You can type a value in to the "Low" or "High" field and hit "Apply" to set the limits.

    A basic guideline for setting the low value is to minimize the contribution of the background. That is, adjust the minimum of each band until the background of the image is flat (i.e. solid black). For the maximum value, bringing it in to the last data point in the pixel distribution is usually sufficient.

    For ObsID 198 with the smoothing applied, the following limits were chosen (listed as "low:high" pairs):

  • Red - 0.4 : 20
  • Green - 0.3 : 35
  • Blue - 0.1 : 10
  • shows the image with the new pixel value limits set.

    The adjusted pixel distribution for scaling The background of the image is almost completely flat (black) after changing the scaling values. scale.png
    Adding a Coordinate Grid

    To add a coordinate grid to the image, choose the "Coordinate Grid" option from the "Analysis" menu. Then choose "Coordinate Grid Parameters" from the same menu to open the preferences dialog.

    Coordinate Grid parameters dialog box The parameter box contains fields to set the plot title and axis labels and to change the axis spacing and numbering. grid.png

    From the preferences box, you can change the color, font, line style (solid or dash), and line thickness for all elements of the grid. The font style, size, and color can be edited, and you can add titles. It is also possible to turn off the display of individual items via the "View" menu.

    In , we have turned off the grid lines and border. The axes have been changed to "Exterior Axes" (from the "Type" menu).

    Final three-color image with coordinate grid overlaid The three-color image is displayed in ds9. color.png
    Saving the Output

    Once you are happy with your true color image, there are a number of output options in ds9.

  • Image formats: from the "File → Save Image As..." menu, you can choose JPG, PNG, or TIFF file formats.

  • Postscript: to create a postscript file, go to "File → Print..." and select "Print To: File".

  • Currently it is not possible to save the state of the ds9 imager, meaning that you cannot save the composite RGB frame and reopen later for further analysis.

    saods9/ds9/doc/user/gui/button.png000644 000765 000000 00000003065 11332353405 017416 0ustar00joyewheel000000 000000 ‰PNG  IHDRj6øc"bKGDÿÿÿ ½§“ pHYs  šœtIMEÚs×øóÂIDATxÚíÑ‘£0Dmà ’C C;ß{* „H=⽟ó±Þ¢§53B‚µïŸÏçÑô}ÿÀ€Tî¿ß’èÞï7.¤­>¹÷ Dß÷Ýø‚šï÷«#Æ„°Ô*ë·è¤]ÍÃ0˜Pûz½L×—‰$±¢°›þ§"Ã0Œy© Æ„°Ô*ë·è¤uÍî…ò‚Ãk±¾L$‰!…Ÿk‹ÎéÚôì ðžk©j¶ uúËÌFEðTùÚùì¹mmL—¦M%MÏ^—Oƒ¥íkQœªd¹+NÑTKËQÒ˜Š~¼¼2¹SP›[K| ²¼¯«7µöëÕpˆ‡ ÷>Ý ÖÎät,==Ϧ鹼9¯¿ðp)oL§sªWêØî§­ß; Åt×CÞs…z “.ä˜M²´JÅ©Ná§Ê+S}á‚ w­°x…’1"eú@Œ†¶ùèPÅ Ò;~I¿µv%U8Šå|`t¸K†`q'|Öe–i°öS…q߯ªLh1gI•QfD’ZSø R°íïÖT%+ß"Êʽ+Ñë ÝK·ìÎ3ëo¨Å¯ÒÖ¯PI©e·Óv¦Û‡f«÷aÂyc¢É®ÝÞhl¹øÅœÛ6 <“ <íBid¤–i·ÏÚ¼uóG™¶åÝ[ÐïtSå³û^m<[& FÓè¶mXvÆðÕ-|Ó¥!K|krA)¬;cRe§ç3\.`œ÷\ÓaÞ̃ ç=‹Î¶F’ÉñkÐòê\m<ÿ³™¢ ‚ã†3A§ð½t<ÏèZúíB6Ïc4ìl]† ÙkïÁZ«ò¥*o-•—ãR'Ã'ÍûiyñÕ33œáƒmÌ“AD³‚àÈóUw ]¢zJ¤JÝ£“í¨¼caú¨†¡»90£Ã€ê3(˜óœÕ'Ó'ÀùümÞà£IJŒ a ¨UÖoÑI‹šû¾ÇaB0¤ðζ;@êÕ›·Ét·&v!n·Ûëõº)íÿ|¿_ô aÄÕR ­æXžÝtî1½ŽãqÕeg)z‰{ÄÕ@ ­æX¶lÞ$Ãô Àô Àô Ÿy+ŠÚçG{õ˜©<²ËoÍl#¥âÚŸÍ|w½‰(6¿Â]' ¦O€¢¸Ê_~«¶ì—!ï¹>ÐŒ ô ¤ýÕ§+•ÍSkfW"šK–¡ûE6¶*YºV®šì¬Xs`|¡Ù£âê AÌì°–r‘£¹ÜæñÎ>{xè…w˜Ý{–»Uš¥%¥ÓU¬²q‘²¨öE1FYñ6O¹÷ ÍŠ?(x•–‘rRyØÕ–Š‘Œï-éšÎjª¼zLˆ_ )lrÆœÝûžQ¹¸íÙÑÙ § ýÙ=g:Ëœ´÷Ó•qGù²Ô–H`pu\R[@ï—<)h” Âp13@ÕÆuYmÇÄ#D"3; ÀÍ€jPI|¶"úýŸÓ¿–ìó§»]ñÐÇÞ¬µ&í¬íù^«½‚í<Š'¸Ë>ÎÐ@)ÕÕÕÕÕÕÕTTTTTTPMPMPMPMPM®(2Ó*´ø­¼Eï>É–;,ÿßÂ=§wüÕZp¬ {s¬ ª ª ª ª gq·ô ®PŒˆçÆìuç\4êêùU€‘ð|—é½=zcÅ!—Žºe~ghè*&p…̬5§j€jpÆMÕ@2Á·x…SDU€yƒ«2$óçg KÀà Óõšª [ù6¨&¨&Ôò5͇CÉ'=IEND®B`‚saods9/ds9/doc/user/gui/components.png000644 000765 000000 00000634021 11332353405 020272 0ustar00joyewheel000000 000000 ‰PNG  IHDR4˜ë7õÁbKGDÿÿÿ ½§“ pHYs  šœtIMEÚµ5/ IDATxÚìw\GûÀgËõÊq´”ÞQÀˆ vLŒkÔX^[ìšXc7jòÆäÕèÏh0Ê ±kL4Ö(6lÄB•*½õúÝÞí  Dßd¿þ8v§íìì<ó<óÌ ò4çÙ´%Ã_ÍÊùïGGôÀq _´iwÿ·'05ÂÀÀÀÀð—³÷è%A¢Â»ãÝû®¬®gj„á/G`«ØøåNþ8 I½NËÔÃß‹Ùl2H‹ååA€³Ø8‹ÝúXœÅjs,ˆÙl†?p’$ :uC¯®a›5|.PgdqE2ëÔL ¦SjÍ,¡­‚yå o8$i1è4,p9ì—‹1’¬¯©ç Å(‚t¸ì׋/£(N Ñ_…Àl1Ó¤«ÅÔPÑÁÓO,]OÎÔhqWð»´ÏP©®.2 ÛÓ#20000¼™F ör9‡Ë}¹$³XP´ºN¥ÂY†ØÛÉ9Nkb±[Ëb± hu½J͈~M¿ 'A¨ ‘ÔD:—TTËmeþnv÷2 IÃ+ºŒiª¹ö"['zD†7Vwâ°Ù\¯%A ‹Åµõ $ 96·òŒKE’$—ÛÒX†‰E¢ºzMš tá„þ–‚²ÄöÙ¹í/2©ÄŽo.­|&Vxúږ¡ J'r Âpö?çÅèáß5ÀíçûO“Rò˜fÎÀÀð¿‚ ‚¶\€áQE¤5± ­Ì …áÑ߉&kÍ €a¸ÀÁ++ûž¼ºŠ$IÔ„jj„B[gƒºÖQ”” ݺâìfõ5 E|Û; t’KL„¹¢FuîVjva¥Ùb¸:ØÌÕGÈç\KÎ:w+Ug0Át hß7ÄÇ^&Ò‰ô¼²+2Ë• €Uï 8‡ÎÞÉÈ/ÿ _­L,tuâ^ÓÀJÝÅ1,ÐK1°g;©>oæ³rÂla> †7D:4=äåá ‚ükîè>Aúзgï”VÕC9AÑ_£øàÝ>Š~yø*~PÏ€`_×?&•)~ÕŽPšD~N°q(ŽÛút+ùå'œP i1ó-ªŠêR¾K6Oš—ŠR±pÎèHYÏJ F“‹£œÌ„`l6ŽuðP8ÛKI’ôVHeB¬Xo@1|Hïc¢BjêUy…e"!¿o¨‡³ìàw +ëE®€ËÒÔU‘fƒÌFf"Ì C&‚0[ ã†Þh2 ‡sX8Š¢&¢3-E›Åfa i¶XØ,Lo$ô‚ ,ã²qEÌRg0Äï¦ÐPá±Y,#,E H‹ÅB’8Žñ8, Cf ©Õ=\äsFõ)WÖܸÿ¤“¯ûô·zí<ús^I-É| o„lBZ§¡(B^ò8„ÉØ¨[ ø¥¹éf¾=Îbÿª5!ŒN…q´/×oßé[&ÂÕÍ/¼³§Z£-|š‚J¿ÆBèb¨³Þo ΖûöªÉHDÌ:½ªÚBÊ.É-®ÐÝOÀã\¹ŸyîVš‘°ôïê×£ƒŸËb±ð’ÊúÓ‰³‹*ím†…¸;”TÖé ¦NÞÎgŸN|,³÷éâêïÊçàZqù^æÍÇy”ºƒ ˆ‡³í[ܲg¥Õ’R’Ð.¾í†ôê rL&³Ú`Ús쪛“EÀ/©ÙO]™øvÔÛý»{9Š ÊjÍ$Ê| ÿsf=ô7ëÜïbÍ^ù)Îþò´pÚ(+ƒÞïŒ»ßø`t'¹ø½!ÝòKªÃ;{VU×í[Ì!lÅZþüõû²Ke¶¶ö¶R@>‡ÕÞI†¡ˆ^o@To 8l–BRPVËæ 6¡¨A­9uñfa•ÚÃÍ5Ø·=ÀDXjUZav”ËÌ$RRUKHfAù•{îŽÒÈP?.5M³É€±„(Ê84200¼ NµX6Á9'€4š÷±šB_…‚ü6GõûXf’|V^ãæ$”U*5FÒÉÍ›M¹¢H“Z͋օ#Œº†Â3a’´ëhn(W©+-–Si‹'b ¥hö!1 ­ª×&œÏóXݽ†õ ñk'¿pSÃb Cü\¸»8òù‘€ë(»ÈÅeu*að¸ÞnÎJ="àslE<6«´²Úh"%®Ñè,(›ÄX$ ªjê8|!‰â‚@JœþÝ|:º;fçiuzÊr„´ I"(ÆI0‡2hBù.—‰Mf¢²ºº²ºº¼ªZ¯S³øAဠÌÅøb™…üÕ’©Õî¤æÕÕÕÉ„œ@/×a]H€<ȪΦˆà*•JÀeúy4¨µ3ó̃o—ù.þjÍéwó:ýC½MmqãI~­JGÿ{'o¨$¡MjNÏåú\Ný,º«wX'weMÝ7‡Ð-"¹_;; C¸™V§Öÿ¥u•”·k3¡¶kRêí½lœ½1[hëL¶¦HÄÅHÔÔP]Àwôi®Ì€²‹BÀã£(,­8{õ®ZgìÑÑÍh2]¼ñàêÝ'Ʋ·•ŒØ;Èßãä•û?ÞJmh¨ ðpwu´X,ÏŠËÎ]»›UXÁÚ6er„ú#ežü5@e­:#¿´GG·á!9ÅUеAo0=È(pq° òs—ÛÔTU×8Ú -$i4ŸIø¬îÃ&ÂR¯Ò¨5q6Å0AµSRJ¾€Ý¿GçâªÚÚ•ˆ'`ª°“tóoÇba\6+#·èÖƒTã¸;*ä>8ŠV(kŽŸ»–W\ÅËQ G˜9'†7À¬G7µz8ÙˆšX{þÊu—à,6øÍOáwº¥³Æ Ä6ô( ¹øWõëŒò› ±“§“F«ûò›#ÏÊj~ïea(âí"o¨,4sd΂–ÀF"€¬ÿöja™’ž™QU%5–WÖ‰=ºãœ_Àl2€ÚüvR à²kUÚ"“WêМúÈgYôõ•i1› Þ¨Òl¡M{g…¦¦¤JYcB9\¾Ç1Ï¢o(,.;ºñ98‹4Âh2u“ÆhÁ¹"_äæìPYQU«²±SØJùÙ&ps÷ TÊ¢’b¶ÈÎY᤭-¯ª®Ã6r[jRtjµÖ`g'o¨­©VémÚ‰¸,³¾^£VOx+*¢kÇ= ?&>Ê“Ê8¨%´Àl4™LF“¹N£Ø8r"Å XiPi´có8¬*e ÉÛ;8`„Ö¤SÁ§«Ó˜$v ;‘Q]m2ôƒJGà<1W fsùÌ& 9F½NÀÅìá¿öRAAz2I6^‹YZ¡lס+›ÃÓëõ…%,ïw±lÏÒ4ò””+Ý:vcq¸z½¾ ¨„Åæ yl{{»ç±„¹Oî”W7´÷ëÌæò·¾ucs i{3»ÞÅÅÖÞh$Ÿ••é…,žÐº,4è,:‹$ͰŽ€ÏEq§FcRi&´c³8lÅq•‰ÐiÜ ˆå5è-&ƒAøåqQ›ƒ³¹e5ê:=Ê‘:^R£%¹2.‡[«ÖkÕG숱9Õ*½ÁˆãB›Ã×™ƒ!ÊåWª-f„/I½Û9vëè^]]+p»ùhtú{20LjDp#a4Ía¡,„o#ÁÙjÚÐLëô(@D(‚iõ$"°e³¹=a2X E9€#qQŒÅ©Ó™uZ„”ÍçqœÍa±ȳá9¡¿[±TU¯eÛ{ÐX̸;xa8›¾ËÝU¡ªN˱÷²Žåñ[,ÄÚ•¼ªNÃwòõT ØóÉ ­Á·ó²¥ÅjvÓoÂɨ­/©®cÛúñ6Fý,® HCT§–­ÁdÒcl¾¨ÉŠÀX,¡Tn}]"wúŽÅÆX¶ŽÔ¿<¡Äzó€ÌÁ•ö߯ÒU,ûMocs~ÓOù›FÑM$ÎÁ±°ÎÞ$I>ÎÌ;têbZoãäˆ`(†á<¡ô»M±ØÛ¾‰ëœ&"‰döÌ7ÀÀÀðfšõH,$Iù)¼`—€ÙbA0AQ­‹…¢ŠX^–Æb7ŽÕ„·Þï×9 l]¶®ÍåÍÚ˜ îÿÈ[)QªöžH¬S–F‚ 8›+±wa±9Îf,n ÿp6G­Ó Õ5b‘è¥-sqI9O(BPL­UcÕ5¢Ä2›ÍÅ¥<AQµF¡-UZVÁˆ[·ÎéoW –a¿9Í£Îbs™Ù ††syBµF[ß n‰¢ÅŠáaƒ\¾H¥ÑÖµ0–à·X -Œ… Ü籬4'‚¤ÅL˜þÆï†Ååý^\›˜öÊÀÀðÏÒŸ8pZ˜ Œ$‹Ã­Œ…b8JÛÔDÊ…ìnþÌËc````øKÈ*Ræ”5üÎ!‚´vîÛ}:1µÃÀÀÀÀðçSRR’››KÑNiN¿b4M¦ßÛ»Hèt ¼”–"¥¥Hi)¨®¶|ô ™Úd````øã(•Ê7nTVj°mZ8Y,J8!/"Ož€¢"¤²èõÀ`@ `0“‰øàÀá0ÊÀÀÀÀðÇQ©TJ¥€ßyàÍ…F¯\AnÜ,–ÆK‚Iæ=†×H³Âɼm¨©A~ù9v }ð€©)†¿^8€LFöí 0‰áOäe›¿aàñ˜jb````x“„#œð6ÄY½zu‹èÔ©“ŸŸßÑ£GÇߣG?RŽšššuëÖѯ̙3ÇÏÏþÎÏÏß±cGŸ>}Ølö¥K—æÎëëë»|ùr>ŸÿñÇ·*£>úH(®Y³þûý÷ß_¹rþÞ¾};—û÷³=yòäµkרœœV¬Xñ¾û?þ¸®®ŽúwРAC† Ù·o_JJÊÆ%I›SNIIÙ·oßïA(úÅ_üÉøèÑ£ØØXêß•+W:::¶$âµk×Nž<9iÒ¤ÐÐÐ?^Œ:tþž?¾——W“ cÁ‚žžž¯ðñwìØ‘ŸŸOýÛ½{÷ &´0îÂ… œœ>úè£WûFRSS¿þúëÁƒùä¥Rùïÿ»…áãââîß¿¿jÕ*‡¿¥ÀP«Õ+W®ô÷÷Ÿ={6àØ±c7nÜX²dIûöí…½¾¾¾µY/]ºô›o¾ùúë¯W¯^ÝòXgΜIHHhyø.]ºÄÄÄÿ¾{ †¸¸8j@÷îݸ¸8¥RiÞª®®ns^mN}úôéܹóÆ;F¿>uêÔˆˆˆˆˆˆY³fµ­4Ñϱµµ…ɘ1c¨?ÿüóÆóóó'Ož¬R©JKK?øàƒÖª/%%%óçχ_ÂáÇ׬Y“ššºqãF£ÑXTTñœ#GŽ,X¡Óé #""6nÜøê«¯"""?~܆gìÚµ+|@…B±eË–øøøˆˆˆk×®Í;f=eÊع|ýõ×_~ù%¼X^^Þ¿ÿˆˆˆ¥K—¤¾øâ ª´A´¡0& //¯¸¸øèÑ£7nT©T}úô™>}zRRRDDÄZ•¬õ/_¾\QQqòäɪª*ª´l²Íœ:uêСC[·n…«««áVu(ººº'Ož´k׎jN·oß6™L¥¥¥T1¨~gÒ¤Iðʼyó¥óÞ{ïÁ[°Í´ŠÂÂÂI“&9::nÛ¶-::zÏž=Ÿþ¹ÍÀaš›6mjeÀ€ðÖæÍ›;wˆHII;vìСCÛðŠû÷ï\ZZš““-0‹áÇÃ0ç΋ˆˆ8uêÔªU«"""*++7oÞüõ×_Ξ=KUWFF 22rÚ´i°aÐÓ?Î÷ß¿fÍš &Ì™3'::úܹs ,hhhxôè‘‹‹ |r¹üÎ;F£±µ‰'%%{ö >oJJJFF†Åby÷Ýw׬YÃçó飄&¾zõêC‡>|¸wïÞ~~~ÎÎÎÇOHHXµj•@ ¸páB£6¼víÚM›68qbøðá½{÷¾qãÆ£GÞ{ï=6›Ý*nppðÎ;W¬Xqúôé-[¶|óÍ7Ap8œÐÐP77·ï¾ûîСC+V¬ …§OŸ¾páÂíÛ·kkk‡ ‚a˜¯¯/LdòäÉ?ýôÓ½{÷ª««‡ŠaØŽ;Z5ÌÌËË qrr´k׊ŸÌÌÌää䤤¤™3g²ÙlºM"++ëÁƒ·oßž5k›Í®©©III>|¸F£iÉé8͵7‹Å‚ Š¢6lØ¿\\\çÎ;vì8|øðeË–Íš5kâĉ÷ïß?pà€^¯‡oßl6_¿~}öìÙï½÷ÞÂ… çÌ™3tèÐÛ·o§¤¤¤§§[,–1cÆ|üñÇ<oܸq-,L¿~ý6lØ ÑhHÚB~‹Å¸gÏž“'OVVV:;;Ã'õ÷÷±gÏž¥K—ž={vÆ ÿ÷ÿG¹¶œiÓ¦eee¨Õê‡Λ7/000%%eÖ¬Y»wï¾qãFÏž=/\¸ðöÛowïÞý‹/¾øì³Ïf̘qøðaÝh4¦¥¥yxxÀb¦¥¥Æ^½zqñâÅ .¬ZµŠÇ㥤¤ †^½zY,– .œ?~õêÕ<oêÔ©'QDõ”ÆRRR’”””˜˜8oÞ<ºé%##£¼¼|É’%óæÍ›?>—Ëmá8¯-šSÿþý­/Ö××azNônÀåË—ƒž“””TSSC’d§N¬5k™L† †aR©´UY B7‹Åb>ŸOu¦0G£Ñh6›ÕjµÁ`8s挧§gÇŽ©(»víÚ³gϾ}ûzõêÕ†gœ}ú (Z]]㸕 l3¶¶¶¶¶¶T›Ñh4,ËÎÎðšš;;;©Tj0Ôju«rg±X'N,**š9sæ¼yó<==333I’¬®®†é/Y²¤  `øðá±±±)))\.6`8ˆ¦Ô/³Ù ßH£[m¦ººAø\z½ž>ÄiîŽã¿üò Qµ–€€€Ñ£G7nÕªU°UÃfc±XjjjŒF£J¥âóù[¶liôi •J%ìììØlvmm­ÅbbãÀð=êõú–†Íf‹D¢mÛ¶Q“p$IvìØÇñææ8q;vlqqñܹs-Zäé陚šÚ5š ˆ²²²ŠŠ ú{üä“O† ‚ãxuuµ‹‹KzzúöíÛaͨT*J?sss;{öì÷ß¿råÊõë×=zôäÉ“>>>l6Û`0L˜0¡ÿþ©©©Ó¦M£?©^¯Ÿ8qbTTTjjêßL2ݼyöм›.ì9 ‚hÔªr¹üÌ™3‰ÄúÖ+Öœ®^½Zj04yëƒ>`±X!!!m›ÚŽŽ¦ >¯ wîܹ÷ß?99¹¸¸xéÒ¥C‡Ý»w/ 33sòäÉð«¶±±y刋‹ƒÎ#™™™€áÇ/Z´——7iÒ$(q[žÚþ󟸸8…BÑ6ÿ¹\?õC‡-X°ÀÛÛûU=fUUUYYYûöíÿˆcÅA­V?}úÔÞÞ~Ñ¢EF£q÷îÝo½õ4L5";;{ôèÑR©ÔLۙάY³0 qwwÿKž%..ÎÅÅ¥mq>|XRR2f̘êêêÒÒRxqýúõB¡0((ÈÃãÏ>(G.—;99ÊåòŒŒ ‹E¹>Y£Ñh233íììæÍ›g4wîÜ9räȬ¬,úœô‹)((hhhX°`À××·¶¶¶¨¨ÈZÍ=räȺuë<<ŸÏçó£¢¢ÜÝÝáN:ýøãyyy™™™ð›‰ŒŒ=11± ™êt:XÛ7oÞìÒ¥Ë °­â—_~‰uwwÏÏχé8p`ìØ±J¥266ööíÛÁÁÁ¾¾¾T›9|ø°]TTÔ+¬O‡~ýú¥§§Ã”––¾óÎ;|>ôèÑðñÅåååƒ ’J¥ÿýï/\¸0tèÐüüü»wïÂD,•JãââvíÚµdÉ’Ö¶4''§;w²Ùì•+WÆÆÆ.^¼8>>~È!‹%66ö§Ÿ~òôôìÚµ+~ôèÑðÖùóç½¼¼è·^={ötssûñÇcccg̘qïÞ=ggçðððÇŸ>}ºªªŠØÕÕ5,, zä>\ ¼¾Þ­ÿþ7n¼qãÆ§Ÿ~;mÚ´[·nÉåò¨¨¨ÌÌLø‹ŠŠÞ~ûmÞkضF$ 6 ¶X6›íååuþüyúZ ww÷F f~þùç3fܺu«cÇŽ:t ¤n]¹reÆŒ·oßîСCÇŽé·þ–Œ;Ö`0ÄÆÆnß¾}ýúõ<]Fãùóç/]ºäëëÛrEë;bJƒFo'æô t'ÂÚé )(@iŽ+Ë{ï>ŸÇã…‡‡ûûû;;;‡……Áϸ¡¡$ɘ˜˜I“&µöñø|¾î9~~~C† a³Ù8ŽÏ™3G*•†‡‡{zzzxx„……I¥Ò>}ú˜L&GGÇ–¯Þøí¡ÄÆÆ&,, jPíÔ©SDDDdd¤ÑhÔétÓ¦M ùµš0¬W¯^ÁÁÁ(Š:88„……)ŠVPÔËË+,,L,SßCXX4¦Éd2•J… ´DÙØØ„‡‡‡……999aÖ¹sçÞ½{£( c 0ÀÍÍ NÞtíÚuåÊ•‚´ª<0MXÛ¶¶¶“'OîÕ«Š¢:tèÝ»7Ç BQT¡P„……µp‘¬^;;;…BA½MƒÁ°|ùrX·r¹|Ê”)=zônÔfqvvîÝ»·ƒƒ´¤õìÙAøö[eƒ’J¥]ºt¡ °lÙ2X¥°öööS§NíÚµkhh¨X,nhh³fÍ2 ööö°æ o!2|øðñãÇ·ö¥Ëd²   XooïE‹=EQµZÍãñÞ}÷ÝaÆ¡(êééÙ»wï¡C‡"BÝ:t¨u›iíû…mA[[Û°°°:99©T*Nׯ_¿ ÈåòŽ;êtºæææfggÏ™3~QQQ°ð¾¾¾‹/–Ëå8ŽÃ† HkÕ<ÜÜÜz÷î-“É0 ëÑ£µžÌËËËÕÕU­Vëtº=z,_¾\"‘ëõzX ÿ¥K—¶ÊÞŽ¢¨¯¯oïÞ½¡d¥šSxxxïÞ½íííQ íׯ_÷îÝ ƒN§‹ŒŒìÞ½»Z­îÒ¥Kxx8‰:::ªÕj’$ÇŽ Š‘‘‘&“I§ÓI$’‰'öíÛEQ???Ør¨[&LèÛ·ïßC!ÂápÂÃኢ¨··7lº‹E«Õ ‚±cÇ4ˆºuèÐ!‹µwïÞœœœ±cÇ8Ð:Ù†††¼¼<5ÁҾɠ¯¯*ûV4²þàÕâŠ:ñ¢qýôz½õô&’˜ˆ-^L¿B\¼Zé-ÃÀÀðf’‘‘±gÏž 6lâĉgÏžMMMmÛ*׿7>üðÇ ç®ZH‡‚xúôé Â_¾|¹LÏ«¶š†ÚÂô{§¿ÙÎl_ÄÀðÆÞÞ^(~üñÇï¾ûîýû÷·lÙbË =­ÈÌÌ\¸p¡½½ý[o½ÅÔÆŸÎTÃ?[[ÛeË–Qk•<==_ë&^ÿ£´k×n×®]ÐÕ©VqâÄ ²MçÓ2‰៎ÍëX5ñw‚Ïçÿí^mv³z™Y$õ¾8mÚ)‡áiN ¨ªF#Ðh+÷Y$)‰ ,àóT PfâŠáONj5úŸÿ ee ¦±ÚDݾ¸º‰„ìÒÅ2y2x¾ýÃëN( H‘ð¢™,™ ´rm C[…“Phiý ¯^8þñcZN“[•ÿ&œž={vûömú^R ¥æT\\rùr^kÌa`````xÂÉh4:88 6Œ©†?6›}å—¼ ž5NÇ™mKZˆÑh4™LL=0üù`Æ|§ Ká„ã¬&4'†Vñøñã’’¦`øó±µµ}ç<10¼i0©ôìÙÓÓÓ³m20´‹ÅRQQ¡P(˜¹aF81¼½^O0Û 2üYÆÄÄDjûpF8100¼¹¤¥¥ ¦^!ÎÎÎð÷“'O˜1èk…Ïç7¹sy³Â‰$ÉyóæY__¾|ùîÝ»1 Û¸q#S­-áéÓ§;wŽnK—.}ÿý÷€Å‹$%%ÅÇÇ3&<<°fͳټeË–´´´={öÀÔfΜ ˜7o4ZöîÝŽÖ÷îÝ›’’H$›7oþƒÕ’pûöíåË—»¸¸ÔÖÖ®Y³^‰‰±>ÈùñãÇûöí£þ]¹r¥½½ýÂ… =<<ÿþ˜fм¼¼Ï?ÿðÖ[o•——ß½{—ºåééùÍ7ß¼õÖ[ÑÑÑðâ‡~(&Nœ¸cÇz:kÖ¬±±±Y¼x±——×Â… §NºråÊ‚ >\QQÑ(ß)S¦„††nذ¡²²^éÚµëäÉ“Ož<ùóÏ?Ö®] ù~UdddtïÞeö_~¥Ý%½zØ:y}°X¬VkNñññžžžÛ¶m£_”H$'NœÀqœN-ÄÎÎnĈíÛ·oònbbâÊ•+#""† òù矟¼cÇWWW؆ âãã½½½)átôèQ™L6`À€øøøaÆM™2^ …AÄÇÇK¥R’$-ZôðáC(㣢¢´ZmiiéüùóàèrqqY»víþýû÷îÝËãñRSS·nÝŠ HÏž=cccoݺµxñâW+œ®®®oˆ¹O$¹»»?yò¤U±¸\®——†a%%%J¥òO.³»»{aa!ÛyxxÌœ9ÓÎÎN¯×û‚8::®Zµª  €  &I’ÚÚ€Åbq8œF)›ÍfN×ÂbäååF(ÛµkGÕ Žã0©‡‹nnn>>>ðwii)Tì¸\®½½=¼¨V«aRô …B‘H›L&8ô¤;r8˜‚ l6›’Ó€Ê I’šnW«Õ”ë2¥Á[,XŸ€úúzØl6S!µZ-A£Gþå—_¢££U*U«Ízb±¸ÿþð÷¶mÛ~øá‡Pwoܸ±bÅ øû³Ï>ëÑ£Ç?PöDGGÃö7pà@8ü_»ví•+Wà‡úÓO?åçç¯]»v„ ^^^ü1>Ã[<˜;wnII‰F£6lXNNŽN§ëÛ·o^^^MMMzzú˜1c|||V¯^M Ãsss/^º¾¾žêÙy<^£ˆA´¼*=z%¢X, d”A\¾|^ ¤Ä@nn.”C€iµµµ0)z ¥R)”©PŠÀçÅqœRTb¡žE,K$J3…!IÒb±À‹uuu°0$IR’Øl6S¶P¥R •Ùl¦D¾J¥2z½¾¨¨¨¹ y‰p"I¶ ÃJKKÓÒÒ¨ìŸ}`ß4pàÀ!C†lß¾~p,†¢¨Ùl¾páÂôéÓçλjÕªFcjøñðx<úÈ+Îb±D"Žã¶¶¶›6m’ÉdGŽ£ZkF ?­àààƒÒ­PúÒçÃΞ= Ÿ9sj<8ŽK$½^ߤ ¢‘éûþýû&44T¡P :t×®]Iû HOOoÔ¸»»WTT@kN§ËÉÉÍ£%í ǽ½½srr^¼®þš“L°ÏjR2Á·Oÿ—2¬5‡¯¯/—Ë}ôèÑ+¯I³ÙLMX,¨¬4 @Õ³Éd‚‚@ž*Dý Füûb‡†aô§’¥wT×OÝ%I’zƒTH’¤çK ìrÚu‘’(‹…úMõð‚P]ŠÙl¦¶6ëY§Oà §:@3`Á‚Ö®^½ Í¡¡¡üÞ©ƒ)))ƒö÷÷i‡øè£>úè£E‹1‚ÅbýôÓO;vlmŽ:.--ÍÖÖÖÝݺøäÉ“Ž1‚’LsçÎ%"11‘.™ _~ùeÿþý+**(#õ+äÙ³gï¿ÿ>lpr% àéÓ§?^^^ÖíõÂ… ÿú׿þõ¯5’L-düøñãÇÿôÓO—-[ÖÐÐpêÔ©ÈÈHë`§N¢;Mœ81'''??ÿÁƒ:îúõëô[t ‰î <8??çÎ/.ÏÓ§OU*U—.].^¼8zôè³gÏzxxlذáÏoŸiVÇXù kë=›ÍnäÜa˜X,†C`¡Ph4©7??_¡PX‹ @ÐäöÒ”¤áóùpôÖœ … ½ßwwwúô)= ´*ÃNÃ0‹E×{šr-áÅ…gøóù£®äÆ û÷¿ÿýøñ㢢¢W>Íûæ3eÊ Ã.]ºtýúukg¼sçÎñù|jä’–––ŸŸ¿fÍE<8cÆŒ¤¤¤Ö星Ÿ=~üxºÃÞĉÁÞ½{©+;wî¼uëÖåË—›{)áááééé-Ï÷É“'………ááá” 9|||.]ºTPP’’Ò¡CÀž={~þùçñãǯ_¿¾Qø .L˜0!$$dݺuô뉉‰jµzèС/ή¬¬,990vìX’$wíÚ5vìØr«ã›››AÙ´iÓ¶mÛ"##›sj„‡‡‡§§'5Ç’%KnݺU\\ìêêúé§Ÿ>ü oƵµµMvÖAAAz½ÞÑѱ¶¶ú‘Âa{“JŒƒƒƒµä£`³Ù …¢¾¾Þ`049Ãçóq§rb¾Q™L¦T*¡xc±X2™¬´´´¹ìp§/µÚÛÛççç7'V% ÕB^ê)‘H –OWÍéyAÏ&ë·ë„ÍfS“CtýƒÒ·àƒSc*YÊmkk -‚PcG•‡zNG=µ\.·V0èZ”F£Ù¡(JÕ¥œÑ53‹ÅBiEô‹Tié_½p²³³‹ŽŽÎÈÈØ¿ÿ±cÇd2Ypp0}väŸÀ»ï¾»k×®ýû÷kµÚÈÈÈ'OžtíÚÕÃÃã‡~HKK[¿~ý‚ ¨Ífrssׯ_?hÐ .—KŸYÄÄĤ§§8p@©T:;;÷éÓÇ:G›Áƒgeeíß¿?---** j?z½~ÿþý0LçÎáï¿ÿZ·e2Ù;ï¼COgݺuÇŽ#ÂÖÖvàÀ™™™û÷ïÏÈÈ0`€\.?~ü¾}ûöïߟžžîç眽aÆ#F¸¸¸ðùü·ß~»9%æÆû÷ïOJJ*((زe œ¤… Òc…‡‡_»víÔ©Sp¸ZUUE•?""ÂÇÇgÕªUYYY” ³†;6))éðáÃ¥¥¥<ðõõ ÖKÙ$a3fÌÕ«W9²uëVúg™ššJfÔ¨QtsÊ Aƒnß¾ýbåiذa©©©ß~û-‡ÃÉÉÉñòòêÖ­Ûÿ\ÛÖëõ°k£&¥ìì쪫«mllè"ä:Y£ᤈ‹‹‹Ñh‰D555t-Ššº%%%ô¡d’J¥ÖÒÇq×BáD’ds’ 777jˆ’ÍAùà4EQÊ׎N“ôÒýî¬SÀ0Œ*¡¿¿?ÌÚh4þðÃðb`` ¯¯/ü]YY eCuuõƒàÅèèhº=†’(”P¤ä}VL$Q^ÔÛ$‚iÔÜ‚ tÓèK·'ÅúŽ˜Ò Ñãf·“ˆšÐ£^IDDD§N¨‡÷óóëÝ»·T*íÙ³g¿~ýºtéb4 ƒ§§ç|@ùŠüí)--•H$b±¸W¯^ptæââ2nÜ8ƒÁªÕj CŸ>}.\ˆ¢¨\.0`€³³3¼Õ·o_h&EQT¡P„……999uëÖM$©T*‹5bÄÊkÇñ:ôîÝ›ÃáˆD¢hqwwŸ3gއ‡ŽãÁÁÁ†ç899¹»»ûøø@7$ƒÁÀf³ƒ‚‚0 svv ƒ}4‹ÅêÑ£G¿~ýBBBà{ôðð˜;w®››[DDI’z½^,;vÀ€NNN>£õ$l|}úô!Â`0ØÙÙM™2¥{÷îðVŸ>}D"Ñœ9sècF³xñb8H§Êïîînooãxhhh=Pµ±± wwwÇq6B¡PA„··÷|àåågþ‚ƒƒW¬XãxIIÉÿûßÐÐШ¨(ÇýýýY,LŸËåRU Ãüýý{õê…Š¢2™ÌÍÍ*LçÎy<‡Ã ‡±PõòòêÝ»7T"‰DáááT*‹ÕjµÁ`£G†úß™3g222fΜ 'ÌÚ0í‘››ØhÂ#==Ý××÷³Ï>£`ùƒsÀf³™næ’ËåA­VÛ †aööö0VCCƒF£‘J¥:î•LTóù|ëy 8GhþÍ/…ÃáøùùEDD¸¸¸PKKKóññ9~ü85F©¨¨°6ã‹D"©Tj-‡¨X&“éźByy9Ì”Ãá´Á EÏ Çq¨™ÍfÊKÂÁÁšXÕh4P`Àµ𢧧§uˤœ šË‹ÃáPúP“®äô™*JcƒÞz ÈË˃rðܒšìâ“A__U2ö­hdýÁ«Åucõ`tex)÷ïßo×®³³3³tüåîÝ»ƒ š9sæÖ­[ß"M›6íäÉ“ÉÉÉmˆn4/\¸0nܸF*ÂñãLJN÷S T*•\ZNûöí­­v‰D£Ñ´¹ÁCËX“öCØÁÙØØ¼Ø+“ÉL&SK&w©4Åb±F£i¡òD ×6lØÐ£Gj*ëèÑ£C‡;v,ô]‚&nk[¢“““õZFÇ©XZ­ÖÚ¢åšÓËghhyQ+–iN¡¡¡4'¥Rùb͉ËåZïpÝœæDé¾”GTp)͉’s¥¥¥jµú³Ï>»téÒÔ©SU*›Í¾p/ûìlMCmaú½Óßlg¶/bh#¨µ b}é.ý:]¢îbF]§~ (J¥Ðä³´däÁ§6òèÑ#ëE ¯[[[jZûÅÀ™ªGkäüíææÖ¤†Ô‘Ynn®õšÙ—ŠÕF¾æÔfq†±Ùì–ï‘Úêêê¬ílmÃb±4éh±X¨ý_èDEEÁE5:Ž’š|>z„šÍæÛ·o¿ ;‚ ¬§¾è¿* Ê5ššgª¯¯·. ‡Ã™tèH$¢„¤cÇŽ0ºÙl¾{÷.Üʺ}ûöô4©“ Î;wùòåÅ‹GFF¾ôHRRÒ'Ÿ|;úåË—7yÀè§Ÿ~º{÷î;vÀÖýýý…Ba“ç65Ç­[·ºtéË|÷îÝcÇŽ)•Ê Û’\.oTKaaaÖ;‰uîܹ_¿~&“ º3êK>c÷ññi›ƒ^¯on N‘H$‘H¬½±Íf³R©¤Ô¦‘3[ fÿ€Ã@?V¯×ëTàŸ;±ÃqU“hî$\A ²õÒ§stt4 Ð!n$Ëå(Š6·­0Ã-œ`ŸÛ¥K¸¬Maa!lv«V­š?þ‚ ¸\nYY<í´gÏžjµúæÍ›/^\´h—Ë-**Š‹‹;}ú´——WPPÐØ±c:4kÖ¬uëÖ-X°€Úüão ÜÍ J5ž7oÞƒ¼¼¼¤Rivvö¤I“:DF)‹-µw¯Ùl¦_„+¯^½:kÖ,xºõ¶WÍ¡V«‹‹‹¡·°°°É¹ë²²2•Jw’4/Õ‚ ÈíÛ·£¢¢|}}Gõá‡Θ1ã¥GlPÛp¡(Jiýð"´Œ¿th³ÙÜf;„ÙlnÎúßÜÆt|>ßÅÅ…:¦ÖÓÓ³¬¬L«Õr8œ®]»Â]šœœœŒF#T‰!³Ià€{ŠhÁ&yÙÙÙÀÑÑ‘ÛÁO€$ɬ¬,kw$x—¾Ö˜.~’““Ùl6<# Û6ÜÝÝ©#-(¤R)uŒ}yYsj(üagg…ÃGXÛ"‘ˆÚ>ÜÅÅ~A‹¥IaIIM; øAjä'—Ë©RQ;…Ó®  tô d±XT'#‹áÇ(‘H<==Å2›Í………Ö—D"oŠ~L;üÆ_<'ÚÆÏÞÁÁáäÉ“çÎ3 ôn®®®úö蟣V«M&“D"±··§ŒÔЉ^(¶ðÿQÂÃà ‚(++3fÌš5k „ nzh6›é¦åË—Ãóè|||¡¾òí·ßRÔŸ~úI¡PdddŒ9rüøñ­=¼ŽÇã?~Û¶mp“|¸ó•?²¿¿IIɵkצM›¶{÷îµk×Μ9óÅoyÀ€ðëêׯߎ;àÅùóçóx¼ââb—sçÎ1âçÅ$ÙÇQx„Á šP(”J¥TCʼnDþþþz½Þ¢$‡Á`xòäIpppQQŠ¢uuupˆ:¤¦¦‚¹œàGH¾iÂLGŸª¡.j4ú®H¥¥¥8Ž7¹¬¯¯onn®5—IŸs‚‰C‡õ?2E_K¿Ørg ªë§ŒDß%ˆJŸ~*n“ÅbÁÀô 6JºÐýèк¥¯ÌmôÆ ODÑáRy5ÚôˆJÖúâ«N/ ¦¦fÆŒÐÂëääô‚SRþöܽ{·ªªj̘1J¥²¨¨ˆ$ÉšÿgïÊ¢¬Ö÷™}˜aöM5QQp_ËÔ®VJ¤•e^35Í¥®”˜Kfiefv-¯åšÝЛšK–fjn¡¢ û³Ï|3¿?Þ|Ç™aÀµÌyþqüæ|ë|œ÷¼ÛóÔ×ÇÄÄ%]\\\SS.xW­Zå(WøÂ /¤¥¥Ñ¯TVVzm;úöí;jÔ¨S§N555­Y³æý÷ßo©“ÿNpúôi‰DÒ¿ÿ>úhÞ¼y‹/îØ±#„õZÂO?ýäÖûôÓO 4~üø‹/æääÜI³m™dCBBp=.†¡ÍCSS“c©‡Ã¢;£ v\B|}}››››››/]ºD!ZBª‘Râäb$‰L&ƒÂw 3‚—Ãår9¸`¨ÆŽûÝwßA<¾ …‹¨W¼hý\7þa½¡C‡^¹råôéÓ yyyׯ_ïÙ³'ø˜ƒá—_~qº—Ï***Μ9½Ð6›íÿûóààS§NuìØño,Q²bÅŠ1cÆlܸÑh4;vlÿþýP£˜››Û»wï÷Þ{]øV±k×®ùóç¿òÊ+̳ƒ\.ïÕ«WIIInn®Ùl®¬¬LJJ …ø7²nÝ:>ŸzNŽèܹ³J¥:vìXLL ‹Å:pà€SÖT¡P˜œœ\UUuñâE@€/†Íf6lX×®]9òè£^¼xK=o[·nõõõ5kÖÁƒÝ«w‹…Žyxxèt:»’9Ç>'‹ÅRTTã4 RYYÙÐÐ9‰Dõ]¼\BöòÍYV»v%0c^^^‹£^àå…B±XLèÀ2Ñ_ÖÕÕAîÊÓÓÓ.‰EëçÞhñY¹\B· y†öof³©NѺs88‡ÃÁX7—ËEÏI¥RÁѰR†qŠ”Édp£ÑˆT*„öNèêm”± 2½^vœ“éõ Ã0È+A3”Ãaéø0í!ß«ÉdÂI§Ó¡÷vËÆ‰Åb}þùç³fÍš={ö¤I“:d³ÙÖ¬Yš%F£ñСCMMM;v/öJIIÙ´iÓ† ²³³Ïž=»dÉ’~ýú;vl×®]~~~K—.]°`ARRR§NºvíúóÏ?_¹r%,,ìaÓÏm;2337lØŸ'L˜0sæL¥Réáá±&•‡¨T*íîúÉ'Ÿ¤#{ø-Ö‚Ã:·ƒÒÐÐPÇ' Êîvh×®~ sÜK,ãF,ÜwÁ‚3qâDú¿qqqqqqmy1`ét»Ó¯Z}1œ¾Nn8Âjµº®Š¶Z­võ⃢p„R–#7cÂî+¨Ý‚%0Ö§Ñý¹´a«¨¸¼iÉÌ$kÖBȘ1¿ÿN(aB'¡'tµú½¨ÿ¯ËQÔÿ®qj ¶mÛvøðáýë_Ž¿n¸áÆŸ‚ÀÀÀúúz¬¤¥Y¢èEI$¹\n§LÖ§OŸVu{ ›Íöôô4™Ldâr¹ÁÁÁÍÍÍþþþ¨„KéÜ9jÒ¤+JåÆ)1‘ÔÖ:1NŽäß"‘ÈËËëN”/üýý›ššœÒŠÛ…[RÂ…Ê™GFF¢ƒ…ô UUUŽ""‘)ä}}}i}[4ŠøeÚ=<hé{§‘:˜Ý’7ó°Þà ·.‡ÃÁ• ÷ w¨ÒbµZ‰DBÆŽ%§NÁ9::º®®CR|>вl„HärhµQYYI¤aÓÌÓS«ÕšÍf@`³Ùd2ÍîJé[_‰ì!{™øù—ÿ×$=[È÷öoØ (Dî RtŸ“üóŸ¤5’=G}Q‰qY,–D"q”Ô#Tu†P(ÄÐIóù|@Ó.àH·^¡ P(Ä‘PÙHnîÆåñx8K;(v\ãŽw„¯´y …p.h³»AúP4Fçè xÄ<"]žg2™î”•Ü–páÂ…‡\Í×׋kÝxIÔW•””@,ˆnÂ…q™LV__V ¦Ñ±cÇ>|¸¤¤¤]»v@MmWô|éÒ¥€B! RIü½ˆŸ³P‹‡‡‡Ãáñx7µîâåååããƒÿÅ‹‰D-‰Ö·*­{K¡B±XV«6Wxƒ ÂY-1]Ž„5ßR©;¥ªªªà°f³ŸÍî´; ㇴ…ˆ»Ëb±0{$‰0ÆÈãñà µZ--ª‹…õø¶TWWC­ ¡¨’hú"XÍ´Dêè6Nw„^½z=´J¸ ÃÔÔÔ¨T*×If7þR´ºLú‰'JÚµ„   öíÛŸ;w®¸¸X øûû777ùå—ðmvv¶O¯^½ ûG"‘Ð+hBéKvÏ#] yœÏ?'¸ôöôô„Ö:6›Cˆªª*GÒ9Ž5äFׇÃi»î»B¡ÀÙÖ wXïÇC«„«ÓéŽ?>nÜ8÷;ðÇãñx<Ú8‰D"°LHáéé©Õj===kjj¸\®L&³›²³³³‘ˆÏç744ص»j4š‹/âJè´Z²cÇc~#äã#ºxƒ‚‚***är¹N§F‰6†Úl6[Kk# és4r. •JÝÆÉmœÜpÃ?Ž­Hì‚)  €ÏøA.—C!–ŸŸÝië”z•PY šîA£á|uć,¨$„ì'dÿvB²ÿÌ0Œ£„®J¥ª©©q–h©ïØ–á3Pb·êâ;ŠaÒ`±XB¡V@önÔ¤+è\ŸÏ§ël6J,c‘ ÍÞ‹i-™L†DD4“&À£¥(F#ëëë1˜§àp8µ£kçð †Á`,bÈÍò¸ô{…G°Z­xÌÑz•\.×jµÞ&+ù‚ Ølö²eËà¿ßÿý¾}ûþùÏÆÆÆÒÃŽ;¶}ûögžyDrݸ×(++£5ˆ_z饸øx÷cyÈÁçóûöí{üøqø¯···^¯·›‘e2™¯¯omm­š²"%%%H³ ù ð]Ìf³^¯÷õõÕh46›M¥RÅÇÇ=zÔu¬L¯×_»v ús1ÛV^^îçcëcó;ïwñúENH466bš\,ƒÍ‹ÅØ…•âp¿°Q«Õâ}Éd2LJ¡]–<»û²Ùl4C ÚoÌ¥A-»ëRò WFF-w›••µmÛ6GO¹  `Û¶m4§½÷jµzÛ¶mUUUãÇ?~<ŠÁ¸ñ0õœ<<<|||´Z­cý40¶Ñ¦ÅjµB,Ëh4:­,0™LÍÍÍ:N¯×755effº&Px饗:vì(•J …X,Fil09… mÏÙ¬'¬ä!_RæÄeáfB°çAi@PPÐ-š3¥¦¦Ûì¾rã/ŽÓž={jjj^xáBÈwß}÷Å_,X° 11qòäɉ‰‰‰‰‰À’‡˜3gNbbbCCCUUUbbâ‚ !6lH¼–Ä.ݸ%Ë”ššÚ³gϵk×0`À€g‡™ŽÆ ŽZ­¶±±Q¯×;ÖA™L&µZM[›Í¦Ñhd2™ŸŸŸíZB, ³ÀÀ@.—[YYé:ÎVPP,š°@Æ÷åË—­V«¦\Sw¸.?/Ÿ2P50\N¸ˆ‹Íg]]Ý-UÖÙqëá‡Îçóï„iÂûŒÃzQQQ‹úÃkkkýýýçÎ{èС£GšÍæääd‡ƒ\m%%%—/_¶X,‹åòåË_ýõ[o½µxñâñãÇ9²GHKìÆmÏAeeeÕÕÕdfÁ‚“'Ov·uã¡ÂmTèh4»¨×¸qã¾ýö[T«#„TVVÒ7}úô9rä!Äßߟ¦Nøå—_°ZÚf³¨Õjˆ¬°Ùl†až11~„¬9~¼%;ÚØØˆî]Wm‰DâççwŽ:iCC1<èÔÐ9rIµoy Ïf‹D"´µ´B zœ Ã`,.00þ* ÖwxyyüQPÿÿ?“ÑhÄ~~~4£Ãz!!!vc±X˜Òjµ˜ðk×®jj [ŒÍf³á†††"Ãæ´L&Ì‹Åb¸/ZõêbðjÁÒ üÑÃÃÃa‰L—¨èõzÓÑ-6›6`y‡ß­)Ã0x³èxÑeë(J‹5„pU¸oµZq/¡PèèÄ཰Ùl¼$¶€G~)<¬V«E' Ý) ›€Â†x®††£Ñxûbƒ …â­·Þ8pà€FM1bÄùóç¿úê+¡P8vìØ¼¼<kǯ0‚ "¹Þöѳ IDAT?ÿü³F£ùðÇþøã»g;P(?~ü… >ûì³Ó§O÷íÛ×-Sâ='¶Dçã”Á­¯¯¯¯¯÷ðð€Þ[±X¬Õj- /ðx<.—«×ëE"‘Éd’J¥MMM*•ŠËåbñúúú‚ i×®H$ÊÊÊ‚œSuuµX,6ŠCCÿhtõðð v6F,‡‡‡×ÕÕA¯X,æp8ÐÌçó¡Û¦¬¬ÌÛÛ›î˜i Xºíú õ[á\N‡™ÍfZÏ^ `Æéš»®®&zºÅ ?°Ùlü³åp8h¨á¦d2 lFðYi[¢V«ñá›L&8‡Ã¡¯ mxåѯu”«ÀRo:i0p¹ÃårQ[]] 6†Íf+nÒ9'HëÀ»„•÷/^¬®®vkm¥ 7 à­·ÞBmÉ“'óx¼šš@°lÙ²íÛ·BºtéÒ­[·N:ñùüºººåË—·k×.22²wïÞ w«×ë_zé%”(tã¶!‹—-[öõ×_ëõú^½z 0À®í̇<O¡P´]ˆ°¤Å ‹Å²#ÚÇùŽ\ZZÊf³ ƒcݨQ£Îœ9Ãçó"ÏËËK*•ŠD"¡PNXÇŽ>íÛW÷éÞ½}Ÿ>ÂÇó33o:‹Åª««ƒêÐû!7òôÔÜRÞÂÇÇG$•––¶d·«ªª¼¼¼°ÁNØþ–2"nü™a=BˆŸŸß¬Y³è-)))ø¹¥¯p;‘»Ÿò]„···Ýcwà BˆÍfkK° QUUÔ °ò¥³JØŸ‹[T*„b¬V«£e ’J¥B¡ÄdóòòJJJ f¬¡¡ÁÃÃ#44´¬ÌüŸÿôàñŠjj4ßßP[k_Sr·2™ bYjµÏEÇ*[ª,‡exhh(oì`0\<%†ajkk݃Œqrà 7X,–[-ˆU«Õ×®]s¬½Æþ\DSSSKuêAAAƒaß¾}O>ùä… NŸ> ^¾Åbill šó’}s3ÿÅ¥åå…ÿû_‹W2“ÉÕjó‰L&“¨T•F#WBaN.Y,Vdd$»£Áçó###ÑßÊ%|ìè‰b¥†T*ïa,Q‘Ëåø6tìQ.—Ãè©Éd‚Ý¿¥V«ñ×9sæ d’ E—.]ðv0ÿ„çâñxXc‚>¢@ À÷úúzx€® 1˜\DÒ#úø999àU ‚!C†àÓÀ§§P(àtt 3<<ÜËË‹q'7Üpã@»nK~˜]ÂÆ.›%—Ëår9L—555f³9::zß¾}1118Àd2566VTTtèÐÁf³åää•–r¼¼H»ví ×åôìááá•••®ùîðª õõªÈH“R GkIgÝ5bbb\б³Ùl©TŠƒ–P¢ ÁÿVårK¤R)f\èÖ´sÞ³€Ät6› ó[´”IUUü4V«•½ÅSã1éLÊXÐõåôÕâgèÝÆ%  ïW£ÑÀ“ …h“è§!°° I¤R)]ï6Nw­®Ífk)uìÆƒõ; ¹\®P(®·Ü'Ô’ƒÖËl6wèС°°z3Ùl6ô†a³Ù&“éÚµkf³¶[,VBHaa¡Õj¥õ÷h@-†‹R®.]º\¸pÆ0&SuuµíÎ8Åóòòî\ÊÝ» ·qºMèõúäää‡ù ´½0ìn®O}xÿb¹\Gb³8>ì¥%7:CíBs, Úäoð¡]‰‰‰)..Öëõ‰$..ŽÃáœ:uªªªª{÷îíÛ·onnž0aÂÒ¥K»uë–&Ñë ÁtèÐì–ÝÁ†éÖ­Û¥K—Zú¹í*Í@$þNžªkË­iëØ—J» Ž-´„jAµëz¦;v³Z­V¸¶–c¥R)øFb±Ø©ã‚îÊîRé.]ŒÚáF.—‹uíØ{ÛÒpz_8QÐþi™TÞmœî.\°“û|ØàããsŸ•p³³³‹‹‹ò†J//¯îÝ»;NÖ!!!Ž)“ÐÐÐ+W®À”ꨋÅ6 ‚ýüünÕm¹†ÍfFTx :uê!D¡Pðx¼’’’ææf†a–-[æïïñâÅ   BšhÅ…+c6›¥R©F£ f:1æše\"‘Ü]L†aÔj5jÚŠÅbÔ™¥m¿£HI …¨‹F‚Ífãû,‘H`Ã0ŽuØ4}m0F… ¸òÀ>':óÌ3îÇî&“騱c&LhË`¡Pí™`œ8ŽÉdB%Ü’’…B£ÑtîÜ™6NÐi ,S}Xhcª©©¡å%ICC›Íöòò‰D6›­±±Ñ××7 <<üÌ™3àñTUia!®P(4SvhWÂÖ¶´ÓÒ‘¥ÂÂBè÷´³C, .„B!võºá6Nn¸a-[¶TUU±X¬eË– ;7îØ dµZA]£ÑÈår™LÖ|#ðb2™áÓ^)ÀRcƒÁPZZjÇãWZZ*zõê¥×ë#""€ÓH­V{xxÔÕÕ]¿~]¥RùøøRƒ¦¢¥‹ÇVâÛîŠÅJ0OOO³ÙŒ.¾Ó⺶.GƒJKê §´ªô‰pQ…e{<÷BYš1ˆ.£ëúð¼Ð\ºNIfiÒ£²²2Leá3 €Zs†aœæ,ÂÃáܺÙ`cpp°R©„+ÁÅ ŸÏǼÀÀ@L“%–••Éí'›Í6mÚ4zKjjjfffVVÖÊ•+åryQQÑŠ+úõë7a„¯¾úê×_…aJ¥õsZ¼ÿþûТáïïÿÖ[oB<øßÿþ|üñÇøãBvîÜ „µk×r¹ÜË—/øá‡8`Þ¼yô)öïß¿{÷î©S§BâG£ÑÌ;¾9r¤#SÔ¥K—Ö®]KµpáBXÇÅÅMŸ>}ïÞ½ÿ£ÚO<<<Þ}÷Ý{ú”vïÞ½hÑ¢ØØØ€€x¿ï.Ο?¿aÃøª»üüüÊËËí.¾-½;C(r >Ÿï´&›~UP1§iz/´C4áÊXØl6tõÓ–P èt½—ËE“†‡¢3dùùùŽ a( –Ž·ŒƒæÓßßî–A°Q&“áüæççFÏxUUUÈ{t;žÓŽ;Úµk·jÕ*øoDDÄG}tðàÁôôt³Ùü /ðx<øs=sæÌŽ;V¯^î¨Îû°aÕªUk×®]±b…\.ñÅ­VëâÅ‹/_¾¼cÇŽ×_½OŸ>v¯ïÿûßôôô”””ÄÄÄ©S§Nš4iË–-•••;vìøÇ?þ‘ššJA…fBÈï¿ÿ¾xñââââÂÂÂG}ŒSJJJqqñš5k>œ––ÆãñFŒãÕjõ¤I“êëë³²²BBBÀ8½þúë_}õÕ¶mÛŠŠŠ@÷ý±Çÿ™çŸžÇãÝkã´hÑ¢>úhÕªUO=õÔ]?xnn¾>eÊ”?üðå—_þúë¯}||vìØ³|ùrx¥é¹#55µ¹¹yÙ²e{öìY¸p¡@ øñÇ7nÜøù矫Õê… Bhû4}úôâââãÇ÷éӌӗ_~¹råÊW_}566ö™gž1›ÍŸ|ò ŽïÝ»7(±jµÚ”””äää®]».\¸°ÿþ?þøo¼‘ššº{÷î{÷T[[‹ŽQ}}½cê§¿zM[¶M›Z´%0gWð'²‘@ ©¡'Nœ:uÊÏϯ¨¨È.’ý¹vËg©TJç½$‰¿¿qq1º ’Ëb±œfl6[=·ž|DÈ«„¢}JKÊ9ðÇW-µÙ>èhnn>räí9±X¬¤¤¤ºz¨•°žL&ëׯŸÝF«Õ:räH@°yóæÀÀÀ 6ìÙ³çƒ>˜0aÂj™¦OŸ~þüy‘H´iÓ¦§žzjÈ!ééé·}´œœµZݳgO¥R©Óé.\¸°ÿþO>ùdöìÙ3fÌ@rÆÂ‰'Ž1búôé»ví ”ÉdB¡ðäɓ׮]›9sæÈ‘#—/_N/¥“’’BCC?ûì³+Vüç?ÿY¿~=~uòäÉöíÛ÷ë×/>>>%%E¥RÑí+V¬8yò$®îÁ«0ýúõóòòª««ËÏÏ ËÔÔÔtâĉ{ýØãââòòò°{÷î»{pµZÝ·oß~ýúmß¾ý§Ÿ~ÒjµÏ?ÿ|``àöíÛCBBpäŒ3Ξ={àÀ5kÖˆÅ✜œ/¾ø¢ªªêÅ_œ8qbûö틊ŠÔjuNNx½[·n]»víܹsˆ‡ºzõjuuu|||Ÿ>}l6í'B:vìúõëºvíZø­§L™Ò¯_¿mÛ¶ét:zuyK ….:IÉÍì -©DEE‰Åâ=r¦OïØÔÔTXXx3ÿœ“Q­V/Zt)6–L˜íG;v¬¨¨¸~ýúÉ“'+**êêê¤RiHH!9v~Œq*--Å•P(ìÕ«WYY]S®ù†¼Hlõ¶–QÍ–fÒãÆ" ±’VïúA‡Åb Þ¸q#èzÐ;·Z1NV«ü_ä£%„ôìÙS"‘üüóϰÐnll4Ë–-[¹r¥ÙlÎÎÎ~°LÔ¬Y³222öîÝ;iÒ$­VëëëÛvµª6”+7mÚ´mÛ6“ÉôÃ?DEE™L¦¢¢¢ÚÚZ/////¯Y³f8p ¦¦&33S£ÑÔÔÔ?~<99Ùl6ðÁ=ö›Í...†Lott´cüz*aÅJó‚p8œèèh»~{hÛFEm:°síÚ5.— kü{Šçž{nÕªU‘‘‘qqqcÇŽýî»ïîõKKK›››‡ Æ0ÌÓO?––Æår«ªª€b.::Újµ~÷ÝwË–-[´hј1c äÒ£GµZýÈ#¼ÿþû°r/**2ááávõŠóçÏ/**zöÙgù|>‹ÅÚ·oŸS QPP|òäI= ___쥿 Fº"œnU‰DW¯^åp8V—lÞ,«¨¨(%%ÅdÊúþûl›ÍÆ0Ä1/ ‘ˆ#" fÏ& \¶Z­R©õ…âòó/FG‡çæ^®¨¸vé’Üh4æçç[,–=b³²²¬VVqq›OÌ\BD¤sçι×sl#¹¹kËDLäFXÁÈ2žË9çããsÓ˜i„œ&DIÈ>:†ø€ ‚Ṵ̈âz)Æm56Ò»woBÈ´iÓ^zé%ŒÿšL¦¦¦&0NóæÍ›7o|Õ¾}ûîÝ»_ºté2N:nûöíñññ'NœèׯßÙ³gïú)Ƈµm#FŒHHHNš`òñññÉÉÉ×®]ïæÏŸ?iÒ¤$$$¸îG)((èÝ»·F£3fLZZºhN±oß¾áÇ÷íÛ×®ÏqòäÉ.\ÈÉɹ ÍZ­V$yyy9sfÒ¤Iw~ÀÊÊJ\K9pùòeø‘‘ñÜsÏyyyÍœ9sçθüܳgÏ«¯¾:kÖ,ÚËgΜ7¦¥¥¥¥¥9=þ»ï¾»wïÞï¿ÿ¾OŸ>AAA#GŽ¢9‰‰‰\.÷رc¸åÃ?üòË/+++wîÜÙ·oßÛ{òvâ¤aaaÕÕÕ0=éõú‚‚¥R9lذÂÂÂS-$,,, `Û¶më×[ÿý+öÉ'äã¹VëÿÛµÐPÝwßB "“ý1I-^œµha³s¹\‹Åb±r`©d6³Äâk ár9b±x£V›Îç Ÿ·]2]²2­È^؈­‘46‡ð]!Bú’EˆÇv²ææ•ß %$ž%„¸ìÛW¯UØÑ¢;ýœö¥¶tÇCaï­ÝñFÿ x.¡¤Àr8vûâa±Ç¨¥µ š †að¯ Û„!¬ŠÀ¼q¹\ºO™>²ã“CÝQŸSÇŽ1Q8tèÐĉÇŽ»yóæ:””””••EGG»)m\Äú BCCqåÒª½¼xñ¢OdddÛÏuüøñ-[¶¼òÊ+ÑÑÑ/¼ð‚ëñ?üð!äâŋޑÛü1È„«Tª—_~ÙqÀ™3g¸\®ÓÞa«ÕºgÏžY³fMŸ>KKîæÎ;mÚ4¨U)//w$€¸ 86úÔ××oÛ¶Ín޳[_ÂŽuu¤];"‰D"Q}}½¿¿F£Á˜XN¿zòdoY|<™=›ìÞÍöõõ…$¿R©¼pápÖuíÚõèÑ£¾¾Êž={?~<:,Ìf³]½zÈb± „î´õòòjhh‹ÅNbw] YFˆ”B¦òÏgˆBAÈÒ›ÆÄ2š#„L#ä¡)Ï’ÉdQQQðáop;ìÛØ‡ÅbíÚµËßßÚ´i.\øê«¯FŒa^°püøqFsèС޽{?~¼´´ôî:?þøãˆ#ìÒ*ÍÍÍçÎËÏÏÏÈÈ õ:¯_¿>bÄ"ÑØ³gãZÁŽ=š‘‘átçô«ÌÌÌÊÊÊþýû;ª}ß#üôÓOƒÌäcéÒ¥û÷ïß¿ÿ—_~étÀ“O>ùüóÏÛmüõ×_3224Í /¼ …øbdddØõâ\ºt)##£Öu*ææXbFF¤âùå­V;|øðûü†ÓŒÔt´ÊËËËn# )Ág¨ijj‚ð”âû¦M$)‰$%‘?&O?M¸\Ž··wqqqAAAMMMhhhcc£L&ƒ¿¦êêêÿýï ¿ÿþ{ff&š:‡ãïï¯R©0–%“É:tèÀãñ0v- ÿßfO äiB’iI!NLH«T*{ì±¼¼¼õë×gee : ^|ñÅvíÚÑxDjjê¾}ûÖ¯_öìYÐ~$„,Y²äܹsµµµŽµ­ÙÙÙË–-+//¯¬¬ çióæÍ¿ÿþû‘#G0¢}O1räÈwÞyÇ`0|üñÇ´I¸+P©TC‡ÍÊÊZ¿~}~~þc=¦P(ž}öÙ¯¿þžj\\\||>¾´´Ôq¹óÆð¯Wu žžžÕÕÕ}úô)**jhhP*•N-ºÅb}[lo‰DgÏž5™LèÿUÒm:óZ»[B&Ò›BH2!ý ÙäÄZÿÿ !„86íÒ–Éf³¡;R]] O’N1 Cç„E"èL•S:l9¢ãoXN§¯hÊ¾ÆÆF†a ƒÙl†®¸›Í±;´Á:K.Qžƒ6'1 ã4 §V«a/§ôE&“éðáÃð9&&Ë*++!àÜØØh§âºÏ‰3`ìä&­Ëè£üevË"‘HÔ¯_?zŽñññ½{÷æñxr¹¼[·nV«599¹OŸ>ÐOзo_:Xÿ@ 66V¥RÆÙ³gÃoƒuØNQ^^îáá!—ËZþ¸¸8???£ÑÈb±FŽ9yòdÿ˜˜‹ÅÂ0L||üœ9sÄb1‹ÅR*•IIIƒ Šˆˆ€Ø«W¯×_]&“=òÈ#Eh×®ÝË/¿ ºÎ"‘(99„‰¹\ndddbb"t%''ý¾ŸŸ_jj*d Á#<Ò³gOXùûû÷íÛ~å=z@KŠX,~â‰'ÆŒ±;vìÝ»·ã*›†Ùl¾~ýzÇŽ¶÷·ñññÞÞÞF£qذa˜ÑtŠŠ ©TêááѪD7!ÄÓÓ3>>š?:tè0}úôÀÀÀ¤¤$hXñòòš8q"˜d>Ÿß­[·Þ½{Ëåòøøx\FDD :ÔËË r'£G†|/ÇëСCbb¢\.g±X‰¤_¿~ð§ëÊþýû¿úê«ðKõíÛ×ßß_ tïÞ½W¯^0¹¨Tª˜˜8¾-ÝÃ0W¯^‹‹³KæäätèÐ[>œ–Øü穧ȉÄ¡C Ñh¬V+Ãp¹„Ë%ee¤±Qn±XL&“Á`h£j”Á`hll4›Í<lŒX,¦É‚CCC•Jess3d×é*s­V‹ù3¨æ¨®®nQ¨©G"ª›˜Ëáú}´'´„b!ä!úÀ&“Éî€àÉ©TªáÇá¼™óÓO?aç¬V«…Ÿ€Åb¡í¡KƸ\®SX×™*³Ùì˜s¶hš%së?^¥R…„„<´ôE˜0a‚´k×®ÇÜÏÏÏžb±X*•þáš|û-yï=rêTÛOíááAWm ¥R ¥­555­š«°°0B”DÒó‹Åª­­uºÔ€N[h™òððhIý–BþùO¢P¥Kép¥\.¿=½.]º¬Y³¦W¯^x³;wî;vlZZζN='@€ÎzN„*ÌkÕsÒjµŽžÖèW‘H„‹ðœ—HŽ_]]ú¦N=' †eÝe·í9ï¨”Ü 7ÜøÀb±TWW»VÐi5AM¹\®R©´cBí BHII ¤j,Ë­rA,¨íƒU**á:¢¶¶Öq¦îܹ3Ç;wî\OAåh=Zp#]´“D?s|¼´Å‘¸í9Ñ*PNCˆB¡Œ]›àô‡¦`Øæl0hIxGÒ#º9Éd29iºB¬¯¡ ¢ú[˜Ì6  Eé6N÷­.!äOl8vìXi ù’¿=\盓—kʧD˜(­„kgQ`þº ƒä‰D¥R]½zÕÅTÂíׯßÉ“'írrvÿ•H$:t¨¯¯÷ðð åóù¥¥¥-ÉÕ»ñ'Âmœn:î!W½ÿbNðØœð¡Å-¹Ž\.×Êá8úGr´^¡¡¡‰„v‰ ÆUÔ--\¼½½ - Çc¦YK¯|E3¬ IDAT™kËDn(áòù|­VÛªÖ—V«…f¸[m¡í<ÜHvIwÎ:ÕÅo±×ÕÎrz.ì´¥>§ê´4;;ícцŽþ‡ÃÁÈ€NC À¨Vw¼ú¹a¶Ê ]ÿXnãt›ÈÊÊú»’H¶>>>b¾oÈÎÎnIGî!R©tTÂÅp“P(t-Säã㣕HG( †a#cމq‡dGâ'‘Ht:Ì5‹…Ïç+Šæææ€€€ŠŠ Ú/Aý\h¼½þ7‡ÃçóñÐþþþ—.]ºÃ Ò–,‡ÃÁ<–\.Çrºº’N)aU4‘¸íÎZ,Ìa2†î4¢µ3p–G"y“É„WH?ü|åÊ•ÌÌLøÜµkW¸0…BEÚs£Ðýüü€r³%téÒ÷rZãt9•——×ÐÐ`çÔºÓÝAÏž=ÝJ¸÷ßyêÑ£ÇC«„Ë0LeeePPPKΓD"ñóó³3N …‚ ¬¨¨ άWÛ‹,Kqq±L&ãr¹<¯ººZ&“y{{k4šºº:™L”»„__ߪª*»ˆ™X,æp8F£±sçι¹¹(„ÑFÈårNg±XØl¶··7›ÍÖ"‹ íbóÐÐo¯\.§+×ÝøëÀmœnn%\÷c¿Ÿm@J¸ Ž=ÔÞÝ+a³Ù"‘µêêj‘HTVVÛÔÔ{Ž•°Zÿ ƒ·zyB¡²Yû‚¤/ŸÏ—x{×ÖÖBë’ë¢DrC Œ“H$Òëõnãä6Nn¸áÆ}E‹G µ¹Š&“©ººZ*•Bî,ˆ«‚0cK “%¿ÿþ;¡¤\)þ!ÞÞÞÐk±X°©±±‘PN|«Ì¹:ŽÃáÈåò¦¦&Ô3t}Ù P…Άõœê ŠD"ÁA~Îñ°Ÿ—½…Ê{øŒ{¡D!0tà^Xo„C0€Ne9F|||âââÐQ†` X, ÄØ\ŒG‡Ÿ. [Çn£Z­Æ_`` Ó§tûÆÉf³ÙQg¢î{ï½GÈ·sçÎåñx òÖ*6mÚtòäÉ·Þz+ à>ÿ1ççç¿ÿþûC† AÏ --M­VÓº´w§NúòË/Ÿzê©®\¹r¿ÈD€¯>ù䓪ª*Ôšš0aBÿþýéaÙÙÙ}ô|ž6m䄦M›oOŸ>}ž}öYBȧŸ~ Ñg¹\þÞ{ïýæÐÂÂÂ+Vôïß=ƒ%K–TTT¬[·î^œîܹs6lxâ‰'† Fyûí·ëêê>þøcøöÇDªòÅ‹CóÇ•+WV­Z5xðàñãÇ;}gàó”)SzôèAyõÕWa!Ÿœ^ÿþ÷¿‚R$Ù‰äÞ( «Õªv+“Édmg t:+Á,ï[ ®¨¨€y­´þþþõõõF£‘ËåªTªêêjœ—›ššœN‘|>Æ„……ažÌQ?—NðØÙ0×R#3'4"‘ •ÓZ¡PÓ1-—މ(šRÈl6;’AØQ•c)9Ÿa¤·H$Èo„ç¢>:¥R‰óö?üŽ£‡‡6? €Ëå>òÈ#èeâÕÒæ“¾Ç' Ñh°3„(oÇAwñÝÎ;ÏŸ?Ÿ’’’’’Âb±æÌ™³zõê;wÞ^‘è?þñàÈi NŸ>½sçÎ6¥Ü]ÔÔÔìܹ3‡„}ûöÝ#©¡ .Ìš5kçÎW®\Y¹rå'Ÿ|2xðàÇüóÏ?§Ó»ï¾ûÉ'ŸÀ™4iÒ•+WRRRø|þ믿‚@€¢¢¢iÓ¦Õ××§¤¤h4šW^y%??ÿ…^øá‡RRR¢££—/_¾eË–õë׿ÿþû )))_}õÕìÙ³ÿ Æ©¾¾~çÎtßÉvíÚu/Îuùòå3fìܹ377wõêÕ£GþüóÏ¿ýö[øöøñãóçÏ‹Å)))¹¹¹©©©õõõ£G~ñÅí^ @yyùK/½TYY™’’b2™^}õÕK—.M›6í»ï¾KIIéܹóÊ•+7mÚôÅ_¬\¹¤ wíÚ5}úô?%ë´fxeìþ®…B!-Éèt/šŽÈ)‚ƒƒo#h¾äF;­ÉdÂ4[ii©S£ææf˜…ëêêD"Q¯^½!z½¯»zôW8ÉÞõø§w‚VXÉe2Yrrrrrrhhh~~>ØU«ÕÚ³gÏçž{Žòí·ßöìÙsÏž=0~Ĉ ~ôèÑž7èâÅ‹—-[FùùçŸñ«S§NÁò·8RqßgtíÚuÉ’%[·nݺu+¸%%%ßÿý]?ѵk×>úè#à%„äää455%$$$&&jµÚ¬¬,ØþþûïAÁŒX,^·nÝæÍ›“““ÃÃà èÕ.ìåçç—œœìïïŸÝÜÜüÛo¿ñx¼ää䨨ØÊÊÊëׯ_¹r¥®®®k×® dxeµ÷:uz÷Ýw¿ýö[ Ÿ5kVAAÁ½xìeeeË–-KMMEïó½÷Þ£—Ì]ºtÙºuë¢E‹’““===Ïž=ËápÞ{ï½iÓ¦9= ^¯¿pá‚Orrr```nn®Z­>sæ ‹Å"Äêêêk×®]½zµ¦¦¦K—.ÉÉÉ6›í^Ȇµ £ÑèããƒìôâÚqÅi2™\Çèì€t54ªªªœêÁ·jDÁžY­VFãááäzTvonn6PCOè!ø ËBX­Ö?¥;Â[ëáë ³ÙÌçó¡ðqÀ€}úôyñÅ“’’ kjj@rª  ÀÓÓ333sâĉcÆŒIOOûí·Ÿ}öÙï¿ÿ¾  @,ÿþûï)))ãÇOOOã7RSSA‚Öjµþøãû÷ïõÕWÍmC,O:•a˜ùóç/\¸a˜C‡a¬önhµZ-­§î³Ù\SS Ï„Ãá´oßža˜-[¶¬^½zÙ²e÷_|áÖé:®²²R§Ó³X¬[’³j#@—…µT*•J¥¢{þe2™L&[µjÕÆëëë÷îÝ+—Ë=<˜={ö… :t耡^NÇçóårùÚµk¯\¹Ò¾}û'NìØ±£¶¶|óé‡ïx<ÞäɓnjÓÔÔ´zõꘘ˜». ›½dÉ’íÛ·»ÓÜÜüÑGuíÚõÑG¥ÿÚ·oß¾pá L›6Í59Õƒ…áǯ]»vÆ —/_>v옣ÚÐâÊ•+¯¿þzFFF«#çÎ{ùòå^½z=ú裷:‘ýéïÖ­›§§'X)™L&‰êêêÊËËi†7™æÐÐÐððpœUãââpþ¥*‹333cbbœ­¥íðU~~~«+9§³›V«u4?Àd2?¾%Ëäâ€m1ù.dpÐ[ÀÌ8îNotà¨Àëx"\… Ln„”•ÝH`1Gà^ÐÀ¸Ê¡5«ì`´"€Ö©ºíɓݪ«~îÆŽÛRXÙ××÷òåËZ­Òh±±±çÎ[³fÍž={ºwï¾qãF×±é“'O&&&Θ1ãßÿþ÷_áo»¶¶öwÞ9~üxbbâܹs322îz¥éرcgÏž}âÄ èä-,,t$Çüþûïóó󃃃Oœ8óã©S§víÚõ¯ýköìÙJÒâ^cüøñP;°víZÐô¼»xì±Ç,XpâÄ ˜¯_¿~«¤¢F°žÍ.**òôô„šé1cÆØ™È¢K¥Rtí>æçç1bìØ±ƒA¡P@"½¥´vaa¡N§“J¥4‘„ÝR¬%â¥ììl×=ž·Š»{47þºa½¶ 55õÌ™3ÀIÓúúúŸþ9"""==}ñâÅiiiNõñÎ;wýúõÁƒ§¦¦úùùíÝ»wÏž=“&MúÓ-¨Ï­X±bذa+W®…*Ç­;Á Aƒ6nÜHJà“'O:'І€aP µ~ýúýû÷8ЮŠá‡~`„ Üp¡C‡Âó„ë3gÎ S2 ´´ôôéÓqqq­ZÇC‡éõzÐuüKV<µµµ …B§Ó•••Ùe•O>Y¡Rù———{z{ëÊÊ$J%Ã0¦%HFBv …Á2Y9%¨xžÒò3ñ ×´LÞáâÛ|BÈÐíÀÃääB‚‚‚jjjý0©Tj4ÛÂÁår[8§%šhÇ C´ º vuwŽì>6›Í‘”ˆašÓ‹yAÚí …ð_š[ÈjµBŽfB »h¡] Vá6› Ót(ËÓÓ(ðÆ}||`#Í~„¿ŽÇÇ „knˆ»fœ!ýû÷?zô(R¯kµÚo¾ù¦±±qÔ¨QÞÞÞqqqŸ-¯¬¬¬uëÖ}ûí·‰‰‰“&MÚ´iÓºuëôz}RRÒ©S§þÄø~^^Þ† ¦OŸEÆóæÍÛ¹sçœ9sî®qB¹ÕíÛ·Ÿ={vâĉr¹<==ý믿 …J¥rÔ¨Q}úôA¹aÆ>}úƒ>Ø¿II X><""bÞ¼y:îøñã=öXnnîºuë²³³‡îëëûì³Ï®]»vݺuùùù111 Z­ö§Ÿ~ÚµkשS§D"Ñݽ¯¿8°X<##ãôéÓãÆsÔ0khhøâ‹/d2YRRRiié„ h—‚Æ›o¾Y^^ž™™9zôè‚‚‚uëÖ]¸paÈ!'N\½zõºuë £¢¢z÷îm³Ù<˜‘‘‘™™Éf³]ôÒÞv,Z©TÚuíˆÅ⦦¦‹/Ú¹ä%qq¤{÷BBˆ¯o9!žqq\¯þæÆU!y„ž=íÝ2G©P8þ…ÂÑZ ®hM&øV,³9ÍIÊ×ϯº FŽàp8ž E]m-ùõWòÝw„¥RÙØØH'Äb1AFÜñ žžž YŽÇÄ&»ÈŸÏG# –äæÜ -™}N´A¢- R¢ë¿Á`ÐÍOhçh@šËs?hàpS´qâóùhzñ°´ ¥F£bN‹Åâ´`gĈp¿t}ytt4vbá¡ Êgg‰u:îí§ôôtߛ߶”””¾}ûJ¥R«ÕšžžÛŸxâ‰íÛ·?úè£à¼¿óÎ;ûöícfôèÑ?þ¸J¥š?>Ç£¿3fÌèÑ£U*Õ›o¾ Ô^111ƒ>vì!d̘1¾-¼ë÷aaaééé]©¥ÜÌ™3ï]O|||zzz¯^½ºtéÂãñ µ˜žžž’’B›2eÊc=&“É ÉÉŽáñµ×^3›Í*•êwÞÙ³gÃ0#GŽ9rdppð¼yóÄb1Ã0‘‘‘£F‚¬!—˽víÃ0o¿ýö”)SþRöcРAíÚµ»§géÔ©Szzzbb"ü÷•W^Á5]\\Ü;ï¼óË/¿0 3yòägžy&¬ÐÐÐôôtšNpÆŒZ­ÖÛÛ{éÒ¥ÿýï†:tè°aÃÂÃÃ_{í5±Xl6›CBB–,Y 6›}åʆaþõ¯M:õîÞ‘Ó\HYY™“5ò—_Úï«P°ø|B‰ÀÀ@TñP¯×ÿQ†Îf³¼¼È­„CY!!í‚‚ªOœ‹ÁâpȧÍòó#·eœ‡ÃR(e#Ñs¹\ooïÊÊJ¸qŒIØÝ ((ËÓFãß2Ìû€âî(ánÞ¼yÅŠ;vì¸ëUmM¸•pÝJ¸÷w¢„ ø£ ·…öA¨2/--5 J¥²¾¾õs¥R©Éd² ÅÈår.—KsÅr8œ€€€’’ǃûùù¹æbH$b±øVm½WxxxEE…Á`QQQŽŒìJgšOqqq×®]Ã7Ù©î“O>ùïÿ*,@°SÂE/Ê©çD£UÏ b,‘·ÙlÈÉU ¸—£ç”——&™Ífc¾Ùl¦…=§úúú¶{Nx³@uhç9Ñ@aÃ?A wË–-Ë—/Ÿ:u*:Rn¸áÆý‡Ã‰ˆˆpQŸ†óˆ‹R=è‚yéïÀ¡¤Í!—Ë ¹víšÁ`°óɬVkK}¬h™ —Ëu4BF£ñ6*èh^s ”Eó.=-“\.‹ÅV¹zõj«¬6›Í`0à寠m@!xD`œÌf3>:‰D‚{¡‘€9;ãÄb±ÐbÏf³9ZGøiàÂ, zÿÀDË´Ó¾µÁ`€#l,//‡È ‡Ã–;в¿X¡.“ɰS‡ƒñ •J%Ê ÁwÏ•p‡Þ£GÀÀ@$Œrà 7î'èyÁ\7i ·PBB™3g §íè¤2 çrÌiC÷1kjj²cÏk©.ßé¹Z…Ùl¦%!à&“éÒ¥K.*lµZ-2e´JrwM_žcƒc9Þ—Ý^vëǽhÒ#º47ÒÆ 3‹ÅB;FPôO“ûÑæE¶¬V+Þ‹^¯‡‹Ïç;íâ ¯ŠnðÂcÒ%!hœèF.Z*÷~(ázyyÝõ~”n%Ü?¿üò‹ÓÀÑÀ–jÉl6Û­vbc¬\.W(4'ÞùóçN XZFŸË‘ù Q^^Û¹\.«¿waO|.”m¡qçጠ?Xp³’ß&t:]UeûâÏRÂíÝ»÷m'Gÿ¸%%\r£ÒÌÑtEGG_¾|dåìœlj;00°¹¹Y­VÇÄÄ…B¤@är¹AAA NóX8pà¡C‡ÁÝÒn¿ˆÅ⨨¨ÚÚZ úAß®ëÞdÇÎYÇN} š "xЋîE/;PèÖn9âx´?çâÈÍ!Dt1…B!¬~h :¿…,´Nez¤Á` _9<¾Zô`·qºËp+ẕpÿxyyuëÖÍqb’H$N— wT:¯®®n;åÎãÙÙÙíÛ·Çí!!!&“©U‚æƒòx¼ÈÈÈ–ºtÛ@@óúÜɢʎ½7((èúõë‰ÄÅÐÒétÌŠžú1ÀLNð-&;¼½½ÑñÅX"ÝED›ÇŽ%Ú0Еñø#r8GÇšÅbaû³H$¢ ßÁ&566b…z—.] ÕD;âÍÍ͸vÁÝéB,ˆ`Ö«W¯bÕxÿþýá!˜Íf»¢·Lû=(áÞgÔƒ†aª««þ,%܇ó±[­Ö–”p¹\n§NNŸ>[üüüÔj5Dö-“‡‡Gddd]]R¥I¥R­VËãñ°<¬%`—«P(”J¥8µá•( 6›M3¹ÁÄt'–‰"•Jé S[  Y,–‹!D.—Y­Ö€€€?EÁ ·qºûx˜•pOœ8áV½Ïp¡„Kwhd2™V«°XQ|~{±Xf±ˆX,6!z›­Þj5{z?>((²w<ŠÅ…B!]¾ÕÊÜÁåÛÔÓ½½½kkk¯_¿ÞÆrƒ¶À‘B¥U@xʵqB%ÜË—/óù|…Bq‡×)¬ªRrÌfXOp=<êÿz"nãä†nÜX,;ÚžkÝ‚žžÝ…‰ÌbáÂ"„!¤Îj-1™’åòß„B(,Ñh4F©TjµÚ¶V8Í~™L¦ÂÂB°XJ¥ÒÇǧ¢¢¢-\5w ,+ ê [eìõòòR«ÕmñÆè :º£ˆ® c±Xl½^õóϾdzoÜ2·[·ê!Z­=~´—´X ðY›+ñ¼t¦Êl6ãÏd±X08F€s±X,:'„é%%1™L¢4›ÍBÄ×f³!n¤…ÁPsÒb±äååá^Hrh±X`°V«ÅšÒÈÈH‚¼ãd³Ù¦NöÆoíÚµv_½öÚk[·n¥eüä“OâFãŒ3à3¾3«V­Sáçç·dÉBÈÁƒQ8ñwÞ¹×Ô'STTTQQQ«S¹Á`€*V©TŠÌo\.×ßßßi™%­]{'À&\×® £ÑHWœ›L&zƒ8“Úl6Ü ?X­Vb³)33™™lÊã`ZtÑ©qBöwP&²;/mœÕÆË0 R’;5Nhºhã„ mf³Ù©$<Ú!¡PˆýUØNKq|Pf³óÁÁÁÁhœà°˛۷o¬ù.~W†ë›o¾9|øðö­©©ùæ›o.\¸€[öïßß‘…;Çüùó¿üòK0UUUß|óÍfKMMMMMõññ™2eʾ}ûRSScccW¬XñÕW_ÑûN˜0áÌ™3©©©þþþiiiûöí[¶lÙ§Ÿ~ òŸ}öÙâÅ‹:ôæ›oz{{§¦¦fff>ýôÓäM}}ý7ß|Có“úèŠ+@OK.—Ÿ9s†Ãá$%%ÅÆÆVUUÙ-6OŸ>-‘H’’’Ú·o_RRRQQ‘““ÓÜܜгgO­V› J¸íÚµKJJ’ÉdtþüOG§NV®\¹k×®/¾ø‚2sæÌ‚‚‚{úØ·oß¾yóæÅ‹?ÿüóIIIȱ{èСsçÎ 0þÛ½{÷¤¤¤°°°O>ùdèСv|ð§OŸ‰DIIIÑÑÑeeeeee „ûÈ#ôîÝ[¯×geeUWWFDD$%%yxxœ={öž® „,Ö‘(–χx“ÞjýT­.´XBŒ6Û¯C †¤‰åó‡Ý(Á B‘\.—‹lX8c®ëp™Š¦Ífk©|Æ`0téÒ%<<œ^Ñ:vìHÇÓ!•••-YÐæææV¥mø|þ½b!„pôz¯ß~“]½Êz(«uîZÏ9iµÚ>ø`îܹ?þøãäÉ“øë¯¿šL¦ÄÄÄ)S¦ <øÝwßMKKûÇ?þ1|øð®]»ž8qbذaIII>>>iiiF§Ó 6,33óêÕ«çÏŸ7nŸÏ‡pG›`µ†de±~ý••›Ëªª":ár‰¯¯-6Ö–œlëÚ•ˆDä.éŠD¢©S§Z­Ö ,\¸$zcccïéÏ`2™jjjüüü°\ª±±ñ×_íÛ·¯ÉdZµjÕèÑ£>c4Aêïô" …Âàà`½^_UU¥Õj‹‹‹Ùlö=%ÄÒjµ&“é£>úôÓOõzý©S§T*Ã0,Ë.à©V«+**’““½½½ÿâORÆf{q8¼×-–ƒTUB‰ÅÒHÍž26»‡@ð!„ê™…PLKÒmiø­¯¯o»ÄœÙl¾t霺¸¸8$$ÄÃà çòòò¬V+N»Ãô•Édr¬]lÐÕ‹¹š•üV«2;[yæŒN©45ñ¨Îf³ÑÕsŒšr8ÔoÄZD†aÐcFÇf³a Ž¢–‡Õju̪ €®†ÏÎΆ')ðU¿xñbyy9!„Çã!Ïý;þ{×ÅÕµïÌöÊËR¥³ˆˆ€QQ{£¢h,ÁMQßhì&ƈ‰‰š¼ýŒb F½cGPAªÒ{Y`ûî|Ü8︻T)k²Ï?†i{çÎ{î=÷œçðDyÜ/^´à <}úþ1p<11Eѵk×¾ÕÌ ÷or82™,‹!$ŒjˆˆHJJ ®¨¨€|…þL&GEEáÔËMMM¸°¶¶§soc‚\ºDZ¸¼|9éøq4;P(ÀÒP(HVzò$iåJÒ§Ÿ"OŸ‚΋à¢P(‘‘‘&Lhhhøæ›oz÷îÝéJ¸DÔÕÕÅÄÄ̘1J5BçFQQQ^^^FFÆ`S8\ IDAT”)SæÍ›—””4lØ0‹•‘‘qàÀ?þøc×®]ÿ°TÂÝ¿¿MVVÖÍ›7»”ydþüùEEE/^¼ÈÈȰ°°èß¿¿B¡¸páBrròW_}E<&\8pïÞ½ú_5*U²LV¤T*0LŽa'‰~+ †)}AL ëüÄéQ'¢…Þ¼]³C"›N~~>Ò Tˆ<8tjòÒh´æœ~­>WÇaÜŠ ›ädJSSq` øMy°v™@|‡Æ Ú;µ3v‰'àÚµP@| p} JióÜëó%Þ­¹— A¬ùæDLÚ7sjeee6lHJJ277oy²¯R©>úè#À{ï½×Ö±TŠœ8þø#¢P0&5J={6°²BRSѯ¾B €BÜ¿H$`ùrÌÓ èÛ7¶ÊÊÊmÛ¶%&&¾÷Þ{Ÿ}ö`òäÉÍÉ€¾=þûßÿ* :~çÎ'}çÎ8Né"„ÞbêÔ©YYY_ýõž={ºúÙKJJòòò„B!.6XTT´eË–m۶ݹs6æçÏŸëdÀÔg¨øE$ªP*G²XJ ûµ±‘˜ŸKys@ªÂ0±Z C®Û8d¤P(nnn8ID7ކ‰Ta‚ØÚÚjÏílllh4ZAAF$!“É$2·v.(2™Ez:?/¯ÊÍ­F(¤¦{ölMMÍõëלœÚrsäÁô¿ÿ…– ðöƦM66ÌËK=y2éõìMKS_¾ŒÙÙ·?«¬¬Ü¹sç­[·¶mÛ6bĈ;vÀ(8bŒVçÂÕÕ5--í—_~¯WhwïÞ}ùòå3fࢂÍáþýûÅÅÅááᆦÜ^üù矫W¯Þ·oßôéÓá‹Õ»woø"RSSçÏŸŸ0aBbb"›Í Á¯}øðaaaáˆ#ôóÑš0ìDSÓ‰¦&è8²65Å“1‰Ä$ à1ì©LÆ`0¸\nUUU["5ärùãÇ©T*•JÅmŸÏ¯­­…áPá Sh£hhhÐ Ç0L§×177A;;; ãÄãñªªªÞ²$oæ½.†J.7ÍÏï•’"c±Júôi˜@:[¸{ µoòá;ñ ‡†f.‘X?™È„_…û5´zá•JÅ·MLLðÐJ<ðÈ3„;‰!àG'™çÒá1ÁÛ§¾}ûúúú^¿~]$…††¾|ùò÷ߟ2eJzzú©S§p²Šˆˆˆ­[·îÝ»·°°ðòåË6lh ó ò×_Êá¨}|0‚9æïOl8ÈÓ§HAöÖÆ);;*á®çÓO?=~üøªU«ºÎ8…‡‡ãÖ¥_¿~"‘hÏž=Ÿ}öYffæÞ½{Ÿ={6räH ‹Ù³g÷Ýw{÷îÍÉÉéÝ»·¿¿?àûï¿?sæÌ³gÏæÎ{æÌ™½{÷&''ûúúöíÛ—Á`$%%:tj¯3¦OŸ>¼yó¦D"©¨¨˜3gN—º+õžžžýû÷¿råJUUUMMÍܹsÁàÑõë×ggg¯ZµÊÒÒrÕªUΡ!8ÿðáùsç;v ¾¦~ýúõë×ÏÌÌìþýûGe³Ù<oüøñB¡000011ð’’’Y³fc‚»|"¥RA‰jHÐì\]-À©©x"“‹E tµ=Œ.–à6§Š€K,Ð8A ZÀðáÃ/_¾ S}áú„‘‘‘ýšN‚Š7õy[…@ ÐL‡K)‚˜™™µ÷†xo‹—–èQĪ«{=|H‰ <=Kml¤ZÂx@ñ[#²ƒã¦·D{€ç7IÁ‰â¸L;ž$•J¡ÓŒ¸@Hd%§ÓéÐ&Ñh4ü*'''kkkXTâJ‘ì—ÁŸÅÒÒR»ºŠ‹‹Û%zÛnã#z÷î3pà@À¬Y³‚ƒƒ¡nLLŒƒƒÃ€bcc!Áþ’%KlllH$Rlll||¼‡‡‡L&ƒ¢UK—.…™Ø666±±±méWW|baÜÝÑ·¦áÛ-.m!mööö111DÛ¹bÅŠNLtoŸ|ò‰\.777=}ú4†a£G·µµ]µj“ÉT«ÕÎÎθ¦íŒ3 Àãñ6lØ`kk‹a˜··÷‚ 8pà@ …Ç111pãÁƒ0‰mîܹzhœ† ÆãñºZ ¸—/_¾`ÁâѰ°0333è^»v-þCL™2ÅÓÓ“Ïçùå—Ã0Ù³gÃ? …½‚111³fÍÄÆÆÞ¹sðùóçÏš5«9Ý÷·r.Q(ÆÆÆ=¯=™ìL¡”©TÅJ¥1‹ÕŸÏ.“Ù!´L›šöÖ×g+€úúzkkkA4H`u ~ ·r¹߉ܦÄ^nè¨Õ>_Í]emm]Þ1iÝX, ³Éʲzù²Ñظ¨woi3œñt²qBdéÒ¥pß;v,~¾öƒp{þüù555Ÿþ¹··wHHÈíÛ·ñóçÏŸßÞÂaC‡bYYˆX ³°ÀZ^©jj‘>bmm?ì_º‘‘‘p£W¯^ÅDGGkϺ´ß<‡ŸŸŸž/¢øûûûçÄ]lŸp¥ö-\¸Pãèˆ#pŸžvµOœ8Qc·····w—>‹Z­Öž÷,32 b0êÕê• `˜ ¼Ü:‚¤P(¿UT\klÌ" Åb±ö5—Ë¥P(ÔA4 ŽÚ8 ¹té’ƒƒC^^âEd±“H$4ÍÄÄD[€¦3ÓÜx1??ßÙÙŠé ‚””âQ333//¯Ë—/wJ³kkÝ=ÂP´ÔÞ¾ÒÆæßë…èfãÔa°X,ÿ-[¶œ?þÕ«WË—/×&Qn«q3Fmi‰Ü»0 B\[(Ú)Ñð.B¥RiOzzS©nT*€ÚÔjšJÅ ‘ÔôR*=ÈägTª¼W/\?W# ˜N§ ‚ÒÒR™LfiiÙØØˆ/ü°X,GGG~¿eTUUiìéÕ«Wee¥T*…Bí%]m.|¹¦¦Æ›AïÖý †•””Ôµ?I†Œã -"‘Á0Ÿ‡Ùõõµ¦¦YB¡A诗y4 Ð-F WÃg„DVr|?‘|ÈÚ@\”Â=Ãd2î—H$¸(FÃIˆ­ÿ]bIð[Ý•xÕCá+**à…:ó 5>>·Æ÷8Þ¯ ðš!³eÿvç'6sæL|õX p¹ÜÞ‹ËÅ Â||†KÃö iioœlb^“Ã`À¿kŒI&»ººâÌf8bkjÐé¹ ÅK¥RŠaöff㌱J¥€DšÂf‡0'ÅâÍ"Õ¥\ —ËËÊÊ`/I§Ó===—ÒÂö‚!“½—žNW(êy¼ µÁgóN¸õºj5rë‚ç ff† ÞdåêR455ý››N(á655u碔¢¡¡A;L@©T¦i8à‡€š˜W‹aR ;#‡³XN( 0BÑ1Læ ‰ä¦DbeeånáhÚÈÈÈÄÄäåË—666 …¢´´7µç3}#nM,Cv†éh4î²ëNhä“0Ì'7×L$RhoªÕl‘ˆJ¥Ò¤RéM6’LF¯®•Ê&CE&ƒ79du†’ë ¿&Žˆáìp?ÑA‡ŸL¤‹%æÉR(ØŠH$’öm5îß÷1‰-pò\â4ˆB¡à.>¢F"Þi@œœØ †¼<ôàÁ¿ÃãóÕS¦`!!ݹ攖–†;ëÿàóùݯ„›žžŽ;Öÿ011éð".Ä …¢‰Ð÷Y’Éi´› ä¹a±X‰EQh™0½c`2™Ìßo++«ÚÚÚºngV…,Ýxí(‘ô).¦)çÌL‡7c¦oz;yÙÙž¯åÇ«³¶&Ns5¢Æq‹¢íÁ#…+•JÜY‡_E"‘¬¬¬ð <FÏÃÕÕÕ¸KÓÙÙ/îW”J¥pK\©âp8¸JOO‡ÞW>ŸÓÙ¤¤¤À¸*•:tèP¸ÓÖÖ'ðÅ/¯©©ô8Zv9¾kÆ Z¦Ÿ~Brs† svVƒº7ŽÓ „kPÂívº´´´W¯^:…”Þ7HNd2E_(¯”J …‚§%Õ©TÄ. –„·ƒƒCvv¶\.ïðØ‹˜ŸkddTSS£R©Pår¹b±˜˜ºÛ^àŠ D°ÙlEE"—Ë¥R©555]Ý<••Ì׈ÑÚÂI¡`¾î‚IÝ>ç3¸õº¯SÙÙè‘#èÝ»@.<ž:(9óõºî] ƒnüú¿Y 711Q§.€L&s¹Üšš{2ù}'œÉH‰ɲª*1†±X,SSSh0Ñp¦tn 41?÷à!Â`0áñxÍ'¨¶×^Ó#Ó¨T*ô#u Þ/6O#¸”XZ>EºTªÁ˜g0Ž/^° Ð`jZêâÇbC"Ô?Ó8)ȳgȯ¿¢II@¥ÂÔ¡¡XPè(Í¢üó@ ”ÁXÈåB:×Ilö/ T*‡ƒç*ñP”8”“`XaD_VVÖ²ÎÆÆ¦¢¢‚ÇãUTTi‰$‰v ŸJ¥*--ŵ!,--+**,--qæì ººšÇãñx¼òòò¶Ë j?T +ajµº©©‰ý:¸†ÍN27ÇM#n™ q2­¬$§Zsóä!CJ®R7™´GZ*• ¹&®ÊàgWˆ»øê‰D‚KM‚àgÒh4œI9-- Þ & Àø’Ï:§ÑhÚßMMM85‰‰‰¹¹9,*‘¯î?l¯£¥%%\ÜÃÈÈÈààà®û®rss·nÝ:tèPcC¹yðýå$=ÔãÆa!!ÀÑè"c]·nF;›2eJXXػҿ|øá‡`Æ Ú‡/^ ›Z```TTàûᅦé&l6ò”'&&:tž¿fÍ(“Óm¨««ûôÓO½¼¼´SS[øò-Zäàà ošËxðàôSió‘ïܹ†nC:À¥K—âããáÑØØXssó²²2(@ ˜6mÚðáûp˜I&óx¼†ÚZ3ÉøõwAF¹΃šæ`jjZ]]íD¡° «³•*Õ3éœvB’ö¼OøÅWÛ>ë%ÆæI$(b€ß¹ÃsJ˜ekk[\\Ü%.([^]]mcc£³‰J$<%†(/«3HA£#U½6HDE|ƒÈN­ 1äšüBŒ)'*¾Ãý$ OH"†9àWAw+ܾyó&îwÕ¶=07-ø xa$ Î ׺d2ÙÙ³g»iætòäI—o¾ùþÛu,ÑJ¥râĉ"‘èÙ³g&&&šÆI©DîßGãâ¼<¬Oud$6``³›pš0aÞÊoß¾½}ûvwÂ8}öÙgwïÞuuuÕ6NóçÏ¿zõê‘#GRRR¶mÛF"‘Äbñ7ß|³zõjWWשS§*•ʹsç~òÉ'ýû÷Ÿ5kÖæÍ›£¢¢âããͺkr‰aØ´iÓ=ztíÚ5Eµù,š»êäÉ“>>>zeœ~ùå—íÛ·¯X±ÂÓÓóý÷ßW(?ýôÑ2ÅÅÅmÛ¶ÍÔÔ422R¥R9ò‹/¾:tè„ Ö¬Y3sæÌ'NÌœ9S¡PlÞ¼ù?þøüóÏi4.“ÓžEee¥Ã2ŠW …ÃëáêP&shSÓE‘ˆB¡Èd2€PÃìµõ’cX²Lv»=ÈòÌ›3'ÆÆÆd2¹²²²Õ¡ h›pmË7Ä‹Q]]ݱ§šÎ`>3 sÑJx›Ízýû÷ûùùeee………=ª @@eñ™3gVUUÁ=Ÿ~úi||<܆J¸J¥?ûöíoø"H¤]»v­X±BgמüþûïGFF®[·þ4>ù»té^#^PP÷|ûí·ß~û-Ü~›h¥vá£>ÚµkWsYÓIII$)((ÈÝݽ¼¼üÕ«W/_¾¬®®öôô R©T)))uuu999666AAA&&&¸ÌW·!??ÿÑ£Gk×®}ñâœ@Û >èmæ£>òóó#ö x›ñóó{{âÈ·|ÊÊʾ}û!¢¡‘]__ß¿\ª*//ÏÁÁ!((ˆËå>~üX.—'''óx¼   {{û¼¼¼V'%o•JÕÐЀpU"ù¿††š×ãeSi£±q8“iÌåZ›šF°Ù“ÙlŠÔ<‘ɶ×ÖÖjuè8!YÇ ‰4Ö~ÜÝÝñm ‹ö*uißP' n\ïiii …§;s°¯Tj(á¢J%¹ó”àÿU ·êr³?*•ZYYùâÅ‹!C†H$E'Mš·sçÎE‹q¹ÜÂÂBŸçÏŸ§¤¤Lš4 Aëׯ¯ZµjÒ¤I×®]‹ˆˆP©T÷ïß?þü’%K ƲeËðÙ¢³³³îÁË«W¤µk‘êjÌÚZ=s&æç§;^\­FîÞEüQ=k6|8 PÒÓÓÇþÍ7ßìܹó‡~8zôh`` »»{ppðÎ;çÌ™3{öìuëÖ-[¶lܸq·oß~þüùÌ™3¯_¿~úôé?þøË/¿¼~ýú´iÓ²³³ñ°ý®N üŽ6&2™ìì윓“óÅ_ØÚÚÂ63zôè+W®ôïßìØ±K—.]ºté²eËîÝ»wüøqbœñ… –-[¶|ùòåË—Ïž={ðàÁ©©©Þ}ü3?c2¹OŸ>ééé‚4°«¾>G¥úØÈÈ…B¡àJ£ý×ܼQ­FàðùdQ`˜Aâ¥ÒãFF%%:GB.—ëíí]YY‰KáÀoßÙÙ¹¤¤„Çã5Ö¯íXËÈÈ FU*UpppZZÑä2™\¢«<Íyê ?BfKÐ`dd¤T*[åº%‘H?M*•â#HCa\_ïš•ÅhläH$¦oÒªYæå 9t¨–ÃyØ»w©©)x¢íÖ#ªTàcJÜqJô5Í_¯~Éd2¼ %Zh,Ã^^^ð'D"Ñ£GàN???è S«Õ8«¡L&Ã}Œx= …B¸““ï@&“qÞÎ’’mZ^‡»ßrrrZM hÅ8eff2€kÚòùü7n˜˜˜H¥Ò¢¢¢²²²ÆÆF|% .2™LÈÕÁf³Éd2$uojj¢P(eeeuuu¸ q+¨¯'ÅÄ UU0dsr:Ù‹ÕjäÕ+äÈPR,,…"‘HÞ{ï½€€èŠ‘ËåJ¥’N§Ã%Mè_–J¥Ã*£ãüTl6›N§Cj ¥Úm”äï:àjÄ‹/JKK‰Lû§N‚Œé°æe2•JݺuëË—/‰œðPcccYY™L&‹ÅmÿË¡T*322¨T*›Í¦Ñh¥¥¥MMÇWVz©ÕC™L/6ÛH©d"ˆ€W$ÒK©ô‘X,öñÉ‹ï?xЂu‰D7oÞ$îwuuMOO‡–¦]lxDûQ\\L¡PîÞ½«arT*•J…¦«·år¹§åx …¢!à hÕå¨ÓÿŒoày¯¹\PSÉtzƒ`¯§SÆõõT™ OcÒ¾x“”Hûw5Î$šg|£íß NJ„¢(±¶áÝ4Õ´oK SÄc:ˆ;›ã%ÂOh˼ãÔ§OŸk×®áN'À‘#GLLLd2ÙÿýßÿmÞ¼ÙÍÍ­íI‘µµµü1 ((H磦É9yC6• IL$5ó!µQ(€Zyx`FF€‡B60C·Õmxòä‰\.www‡¯ØÙÙ¹   ]À_ý•šš ˜Ý©{ô®ƒJ¥š››ã.h¸^} €k ¨®&“ÉpfaaÑÔÔÔÐа=<¼âõ§Ýv%\¢š(•J¥ÓéR©”è:†qä­Žçø|~CCƒFÔxuuµ™™‡Ãi{šm[cÍÌÌD"Q‡“«Ú‚r3³ßCCñ ¤R©xæì¿3í¡;ÜzÍ¡ººzåÊ•£F:zôèæÍ›wìØÑ–«Á™3gŠ‹‹ïÝ»×·oßVÎ.+C/]¯'XˆR Z{͘½=àp.^¼¸`Á‚yóæmÚ´éŸÑéCoªž—sÅŠuuugΜÿþòË/Ÿ|òI ç'%%é Þ={öÊ•+ËÊÊpß…ž °°ðÁƒú9è‘Éd-,ŽB&‰DRVVÝ27oÞÌÎΆG  —h×/Â(äÊÊJ¢q‚Aƒ­§æâ¶;0šiL&³ººº½¦=w‘ËåÚŒ>DÖbx·1kspÊ‹×ÌͰÙ‰T*•¶­mhhÐVYDQÔñµÒJ¥Â-%‡ÃÁ% qµ@&“‰¿âë£FFFD²%ü¶L&wÖÁ`¶~•¶U&“Éøm¡ƒŠ¤+Üúm›Íž:ujZZZ\\Š¢}úô9sæLË kÞ¼yû÷ï‹‹KOOþüùÆ{÷îÝÂùHJ RSÚ娱·Îúõë¥R©¥¥e\\þÖ]]]ž={¦V«gÏžmeeöäÉ“¸¸¸¬¬¬‰'ö “iË8vìØO?ýtñâÅÈÈÈÝ»wÇÅŽxñÂÍÍ- @*•^»víäÉ“< R©3f̰µµ MJJŠ‹‹{ùòåÔ©SÙzÆÔîàà0xðà( üGGÇû÷ïÇÅÅ>|ØÇÇ'<<œHãß ¼xñ"±Í=z´`Á‚7>üîÝ»Går¹<oÒ¤I...AAAD¹[‹5kÖ¬;wîÄÅÅݹs'((¨ëâ]étzÛc÷|>ßÑÑñï8åñxJ¥²íÓ&ß F0`ÞGSt.wõ5´ýoD¯—D"Á³ †öU:½jùxü7Ñàc)âb —Ë…¿E¬\hC©TâLHFFFxn²§§'49ÏQijjÂÝz-&q¬ ›Ín¹wjÉ8ÅÆÆâùY€ &…BXh.— ånÆ 8p`zzº««+|`(wëáá˜4i’›››……Å_|ëÎÝÝ=""B;¦ÖÖÖ666öÃR±´'_c±0++@§ôÑG±aaa>>>pœøå—_Âü­˜˜˜K—.¦M›6a¨j ‡žžž±±±PÕôƒ>ï éÒæðÕW_3ÕÇŒ‰ªV®\Éb±T*•‹‹Ë¸qã ‰D‚437nœ7o|.è‰9sæ”)S´Ûk!::š%’á¶••‚ 0õÇÍÍ-&&ææÍ›C‡}òäÉ«W¯PÅÅÆÆÂEŽ9sæDDDtCJs CQT£ÍxxxÄÆÆz{{ãr·±±±3g΄5©ÃæÏŸ?sæL‡sôèQ@ppð{ソˆ.òé7®½W9¶¬Þù¯„Îà2™lÝ5Š ¥ãŠBZhÝÕŽq¾½öN//¯·¼­-äóçÏ[šŸl8t½¨¼Ž&¯Õß* @Z R\ ²³AÛ#¡i4Ìݽ{#=zdkkkmmý¯¥/ºyóæ”)S:À­—’’²wïÞ &Œ3fÚ´i—/_ÎÎÎnc&Vrr²………­­í¿–¾èâÅ‹3fÌИœÿüsèØØØPz‚´÷Ÿ333•îº+«×q×3“*Ct%ÜŽË徟ý߬„Û‰ë`0Nÿ@Ðét2™Œóñü;¡èvRXíï‡oWÀ0Š7À`œ h0ìªUÖ:}úô1T»ü댊¢Ý0m€`€›"-:˜ÿý_WWG$g4À 0À€nCii¥nã¤T*µ³Ž 0À 0 'gN&&&ýúõ멸^±XŒ¢hs©a&‘HÈd²~z8õ¤–Ú¥R)—Ë©Tj·êE‰ÅbÈ‘ªÏ%¬©©IMMÕòR©T\xâøpr ‹TL IDAT}Գן „2Á%’ð*G‡q¯Å}»? ëúõëÁÁÁ(Š¢(Úƒ³7¥Ry÷îÝÀÀ@EyK²ÈNÇ7I$‰D’´Gº´ûQQQQ^^îææF&“‰„˜Ýƒk×® 4¨Ç›S«%DDÏK(‹ E×±.u ƒL&C=ÿ¥¥¥µµµB¡JèCFÚýû÷ÝÝÝ™L&™LÖ= ‘H”=`À€fgN¸ëþXU<[¨gæ äl‘ý^6ýçáojjÂUº¿&õ¿¢ô¹™i”Á`àrvz‡ƒ8é`}cc#.êÑ#½«Î±#$ÝÖ“D"‘è‰F`€è ÆÉ 0À½CG«1 »}û6þ¯½½½T*-++óññéA@VVVyy¹¯¯ï“'O(ŠŸŸ_eeeFF†££c뻢¢¢—/_º¹¹™u 9zËHOO‡“åààඈ"÷îß¿¢(Ñ㜭Íé|û Г¨[·nq8ooo=¯·ªªªôôt‡^½zZ °°0//¯OŸ>|>¿…Ó>|¨V«ýýý{xæôçŸFDDyÔÔÔ¸¸¸ñãÇ÷8«ü®]»Æ_XXxâĉӧOÇêÔ©î)ÀóçÏ9ÒvÝú®Crrò’%K¾ûî»#GŽè¹ \dd$Î qïÞ½#GŽÔÖÖº†cÛ¶mãǯ¨¨Ð“òŒ?¾eed=Á«W¯Ž9Ò²Îп ñññãÇ¿wï^˧͛7/22²‡gNÇŽûì³Ï(ʰaÃ|}}Ï;G$T«Õ{÷î…Ûƒîôʺ|ùrff&€D"EGGrrr.\¸ˆŸãææÆ`0JJJ.\¸¸sçNXX˜««k'ãÂ… 999³gÏæñxµµµGŽquu533óðð€ú~‡† ¡666'N|üøñÝ»wGŽéâârèÐ!™L¶pá„„báß=úÏþóäÉ“… þç?ÿùþûïMMMÿüóO???©TŠÇ/]º´ªªêÞ½{NNNP¢pôèÑ=ª¨¨`2™óçχLŸ>øº;eeeñññ°ÍX[[{xxÐéôýû÷S(”‘#GÆÇÇ{zz†„„tîÞ¹s'99ùï/LþðÃKJJ~ÿýw¸gĈ°ÍüøãPCÁÅÅeäÈ‘‰‰‰fffÏŸ?/..¦P(¿þú+ÀÛÛ;((¨Ókæüùó/^¼Ðh4¨y˜™™yùòextÊ”)–––R©tÿþýpFs"òõõí Ͷ³gÏB5©¶´™´´´ëׯÃ툈>Ÿ'üüüÎ;7pà@í¨­ãÙ³g7oÞ6lXvvvAAÁ¼yó~þùgxoN ………ð¥¥e¿~ý<<< çp¹Ü9sæàýLuuuVVÖÌ™3MLL:·&÷íÛÇb±fÏž••uéÒ¥   ooïßÿ½¤¤dñâÅGŽg÷ë×O»ŸéR+UVV¶dÉE_½zõçŸÂý£FrrrÂçÇŽëÓ§—˽ÿþèÑ£ßFÐ’4dâ\Q“”¬’¸Xr0 k9Ø133óâÅ‹(ŠŽ9²¾¾~Ù²e½zõ‰DÏž=‹ŠŠ:xð`\\\pppffæ±cÇu**jO8ÜÝÝQ%“É-²_¼xqݺu\.×ÔÔtË–-jµÚÚÚzõêÕéééJ¥òúõëÕÕÕ|ðÁ¢E‹ž>}:sæÌ[·n¥¥¥¹¸¸ 2ÄÔÔ´åb¨Õêììl777‰„¢hËq,[¶lùþûï### gΜ Âׯ_pûöí7úûû×ÖÖîÝ»öeëׯ ìÝ»wTTÔ•+WV¬X‘’’²xñb@Ð+žžžËF¡Pä-j0–••]¿~½¨¨hÀ€ƒ š0aÂýû÷³²²~úé'Øè©Tª@ عs§D"±²²Z¾|9™Lf2™gΜ¹ÿ>Ç#“É1114Ëå®]»öÕ«WNNNGMKK2dH«Ù9"‘H$õêÕ‹B¡¨ÕjRÖ8öìÙÓØØˆaXAAl3§Núî»ï¦OŸ¾téÒ+W®¨ÕjüPç6§âââòòrE÷ìÙsùòå¹sç~ñʼn‰‰žžž—.]ºuë–¯¯ï¡C‡¶mÛ6hР‚‚‚ŸþÙÆÆææÍ›'Nœàr¹ eóæÍ2™ŒÃᤥ¥8qÂÙÙÙÖÖ¶í%$‘H-—ðܹsëÖ­ãóùÆÆÆ›6m"‘H|>Íš5¹¹¹...ÇòäÉ Aƒbccýõ×€€€§OŸž:uJ(&%%eee}øá‡Û¶m;zô¨¿¿ÿ“'Oþøã¡PØ7,¡H$ª¯¯où‰NŸ>½~ýzKKK##£ÚÌ®]»,,,üýý׬YSXXˆ|˜™™¹ÿþ^½zAê@£Ñär9‚ T*µåáÏ?ÿ\³fM^^ÞÉ“'OŸ>]]]}èС   ŒŒŒß~ûÍÑÑ1))髯¾²³³»qãÆŽ;***ììì>úè#‡¢¢¢õë×ÛÛÛ3ŒÍ›7³X,±X¼bÅŠœœ&“yôèÑÌÌÌaƵšÆWWW'‹­­­)ŠJ¥jù[˜0aBFFÆ‚ ®_¿þÉ'Ÿ…B??¿O?ýôðáË/þÏþsîÜ9Ÿ;wî\¸pÁÃÃãôéÓýŒ»»{«/7''ÇÎÎŽF£µZÐqëÖ-‰DÂår¿ýöÛÆÆFWW×Õ«W'%%¹»»Ÿ;wîîÝ»|øð~ø!'çï,³’’’¯¿þ:00pÊ”)[6ØF'OžÌf³áˆ¦  ààÁƒ~øá'Ÿ|²fÍšèèh‹uèÐ!èÊ(//ŽŽvww?þü Aƒ¢££Åbq||ü«W¯nܸáççmooòäɨ߶ *•¢³ÍÀCaaaiiiø,§³ŸT"‘|óÍ7"‘(!!ÁÙÙ9::ÚÛÛûÊ•+EEEÇŽS«ÕÑÑÑ&Lxñâb¿r劯¯ott4‚ çÎ‹ŽŽ>|øÓ§OŸ>}Ú¹%LLLÌÍÍÍÌÌœ:uj\\œ»»;lNÞÞÞÑÑÑ;wî3f •J Œ‹‹‹ŽŽ:thrr21söСC&&&ðÐãÇ;=©öæÍ›ùùùS¦L‰ŽŽÞ³g››[ m&??ÿæÍ›ð]||<̳©¨¨(--=xð`Äæ[ŵkצNzðàÁßÿÃáDGG‡……¥¦¦&''_»v­°°0""B{ºvõêÕ¢¢¢ˆˆˆ… ŠD¢?þøî·¶¶ž6mšÍo¿ýÖé©ß|óMiiéŽ;ð=?þøcvvö–-[9vì˜MttôÆçÍ›gll û™ÌÌÌO>ùdÆ ]4mrrrŠŒŒäp8‡ª®®>{ölïÞ½aqá ï1ŸÏ7nìLÞÆ±ÜùÙûUUU£G®®®îº æÚµky<^cc#QDµoß¾¶¶¶­úF; ~~~|>ÿÒ¥KR©ôòå˃ òõõ½{÷.ñœ‰'âÍW(:99íÛ·¯‘H”˜˜Ñ–ÁÎ[ÂÑÑñÇtssìÝ»÷ƒ>€oª*´ÿ÷ÿwûöí®£^d0ƒ>wîœö!&“9xðà3gÎt]å$&&îØ±còäÉz(µpá±cÇ~öÙgÐvüøñ7nàG7†±k×.}A~~þèÑ£»aý º•.^¼ØÞ ]\\~øá˜|Óéøøã—-[Æãñ>ýôÓòòr½Sxxxïû™.ªÀðððE‹ݾ}÷<|ø°ªªjĈDv ÀöíÛE"Ñ´iÓ ¼¼¼&MšÔE8p †óòåË£GÖg`ooº{Í©UïÙ³nwºO_)Ÿ%…B)..ãÀaaaaaaöööûöíÓ9‚±R§gû8‹-Ó¶oß¾~ýúÁƒ5ª±ð›ÛúˆØ‰øòË/>|¸mÛ¶¡Yj'Nœ {òäÉÔ©S—,Y¢}Zhh¨Z­>qâÄÙ³gׯ_¯qÔÊÊ ÿ$[޹ê)°Ùì.²Lggg|fjjJìÖ¬YóN·Þ¾}û ·#%%…D"ÅÄÄtÏO¬[·ŸMvÅO ÞÈPåóùOž< ýí·ß:÷þt:B¡ñùü1cÆÌŸ?ŸD"1 ¹\¾yóf|…B¡Óé2™ìã?¾ÿ~çÆÒÒÒÄĤ°°ÐÄÄÄÒÒRà(jjjZ__?xðà;w6nÜ8vìØ &üöÛo÷îÝ2dHppðîÝ»»³5‹Åb©TÊårù|>—ËÅ0¬e7™Lf0L&“Ïç¯[·näÈ‘]1'.++›2eŠX,¦R©ÝÉj¸iÓ¦}ûöíÝ»×ÜÜ\$¡(Êb± …H$’Éd&úEE"QSSlNÝù¾¶lÙbgg—••uåÊ*•ZWW߈L&‰DóæÍ …EEEµµµd2.MÑh4©TŠ/eq8xèÖ­[Æ ëô9(¬¥¦¦&¸Ê8yòdb •J%‹ÅÂ3Z8Ô àp8°wJNN =qâ,|ccã Aƒt>Wcc#Þ0ºÇHߺuëÎ;W¯^-...))9}úôï¿ÿîàà€ ›ÍV*•"‘h×®]NNNçÏŸŸ5kV¯^½ÁÙ³g NœÑ¥@Q”ÉdÒh4>Ÿÿý÷ß1"++‹xÂÉ“'wìØ!—Ë™LæÛÐ vd´èè臙l6[(šššÊår¡PH§Ó=z8|øp@ttôâÅ‹;·^>ÿüs©TºaÃ8¼téà×_]³fÍÒ¥K.\xþüy*•êìì CæÆŒ³k×®]»vmذ¡scð!nܸ1zôhÜebb" 9N||üäÉ“¡}ܸqÛ¶mƒ–ÒÆÆÆÎÎŽÍf³X,[[[;;».ê‹ÍÍÍáE;;;¸ùòåR©tÇŽ;vì8{öìøñãW¬X! !EöU¡¡¡ßÿý–-[þúë/ÀŸþÙéÑzNNN½{÷Þ°aüyóV­ZµlÙ²ØØX¡Pß# ¾àp8B¡°Ó'âFFFŽŽŽ[·nݺu+N¿yóæÙ³g-ZðÏ?ÿxõêÕÐÐP¸gáÂ…_~ùåwß}' ™L&•ÕNX·Q¯×‰Õ«W744|ñÅp˜ ƒô8°aÆ«W¯ÂŽÀÆÆæñãÇÇ>|øèÑ£·mÛöý÷ßÃ7H¡P?~–Ó¦Mááááááx?3}úô]»vuzâ}œÇËd277·“'O®X±–äàÁƒžžžŽŽŽøxhÊ”)¦¦¦'OžÌ9w?§IT[þ0áàöægN†üðú:Y¡`l¶zõj,, è1 `€îÝ»·uëÖÅ‹›™™±X¬¡C‡êDÐ’[iãꂵ5 –É x·0wî\EssskkkW­ZµbÅ C¼ ÌÌÌ–/_Þ¿ÿ.7N m3>L(Ä Pñâ”ÊçÏŸïñò( ûÚ’q’Édvvv§ì($™ ¡ÑLý—.í†%%¥RÉd2»‚:³½í^¡P˜ššölIš+žJ¥¢ÑhzX6 P(hP…BáÛ?v*•ªÇ›S«%äp8úYB˜~daaaff¦‡ñ„†a†¢¨þ˜."‘HúôéÓé7¿7ŒSjjjVV4ÌššQHxVZZxîP(€X $ R `2“ ОÔÒåp8¡¡¡ …Éd¶L÷ÛE€Y$‰Íf÷HÄb1d‘çr¹=R‚ÆÆFE!í±ž¨I555ÁOÝÈȨeÞý|›y{Ë I¨T*ƒÁxW¦¢(Êápô¿Ì …B"‘ ‰*ô\’­Sz 8ÍhÖ8¼½½ÿžxfd€½{éFF¾Ã‡û˜™!iiHFò⨫ faÜÝ1¡sq<^đìi‘H'^=’3{êÔ©qãÆ‘H$X¿Ý_€ëׯ÷íÛ×ÌÌ Ã°Îͧë0ªªªž>} J¥­ròw.]º4`ÀcccµZݳÕãmæ-!‘H._¾ Y d2™T*}'Š}úôé‘#G2Œw¢Ú_¾|YSSãëë  úºÛuÀ“p[1NÿëúáûS*Az:éÑ#$9Z!òêxø;{;V=n°¶6ä9`€ÐY ·0  ÕÕèï¿##õˆ€ÍR)’›‹<”J€aHE”Jõûï½d;6À 0àŸeœH$ Eƒ…„`C†`§¼<äøq@‰‹77lèPÐÙ4ˆ`€ü;Ñl8Ö·¯úÃÕ³g«çÌÁ¼½ÈdÀfcêE‹0‚BR^Ž•——×SEºvíZTTÔíÛ·õêeEGGC^ðD½Fff¦>”móæÍQQQm§Ö=räþÝòäÉ“¨¨¨Ó§OwàÚ?þø#**êÙ³gïÊ7^^^¥SéMoÛ̦M›¢¢¢ôd‰«ùX;lútlÊð¦ö9ØØ`C†ì†¤§#UU“Óv(Š„„¨ùÝS¸pá‚F Þ“'OêêêzªHyyy zõ²¢¢¢"""RSS—-[† È¢E‹êëëçÏŸ_TTÔãe?~ü¢E‹Ú¨ÝpüøñM›6õíÛwÑ¢EwïÞ}ÿý÷»¹´eee ³ë åååïÐ4!!áÑ£GúV°ÚÌ­[·ô$š±Å@p è”pEÌ×—¸£1+K^Sáëë[VVæíí½råÊ'Nx{{Ÿ>}zéÒ¥ÞÞÞÞÞÞ0ãÚµkÞÞÞ„×N›6mÀ€Ýÿä/^ô~¤¤¤žzgÏžõöö>vìXO 33ÓÛÛ{ãÆÄaaaP¬¥§Û LeOMMÅß”¶žd7à“O>Y¿~}CCCNNŽ¥¥¥¿¿?ŸÏOOOïþÑÜÜ\¼*`›Ù¹sç‡~X]]ííí}æÌooo\äsôèÑðd¨KT\\\VV& ýýýi4ÚãÇ{êýÆÄÄx{{gdd***ð‡úé§Ÿà 3fÌ€{fÏž ˆß¿?`Ù²eÒvÝ€¢¢"¼„ÿýïáÎÉ“'Ã=óçχ{¾ýö[ü´ ܱc‡··÷“'OÆŽÒÞ6¨««ÃÛ `ëÖ­ø”Jevv¶··÷W_}زe‹··wZZÀ××7""¢¤5±A Ó†‡½&ä€`cØ ^-/Ç0L¥Råçç:tèøñã eÉ’%0öÔÅÅÅÎÎn̘1K—.-/////—Ëå …¢°°°¶Û]‚IIIË–-{ÿý÷¿øâ‹%K–Œ=úîÝ»NNNÝ\Œ»wï:;;¿ÿþû}ô‡Ã3fL7 ªªjõêÕ111sçÎe0pçÔ©Sá",,ìâÅ‹Ýÿu­]»öàÁƒ)))žžž÷îÝ>|xhhèÁƒ·lÙòÁœ8qbðàÁÝYž‚‚±Xìëëûõ×_¯[·îÔ©Suuu‡rppèÎbˆD¢Ñ£G÷ïßÿçŸÞ³gl3¥¥¥ùùùð£+--e³Ù3fÌX¾|9‡ÃÙ·oß½{÷ž={VSS3qâÄ5kÖè‰F{\\ܶmÛœ‡ òôéÓ~ýú¹ºº^¸páðáÃk×®…j°<¸uë–\.÷óó‹ŠŠ:pà@FFÆ®]»¾þúk—î,­T*õõõõòò:}úôáÇ7mÚdbbräÈ‘ëׯgddÔÖÖ¾÷Þ{ ÅÇÇgÓ¦Mß~ûíäÉ“ƒƒƒ½¼¼ 2d÷£¦¦&???,,ŒÁ` Ò®6ï0nܸŸþyذaT*ÕÁÁá믿þñÇGåççׯ_¿øøøÊÊÊÒÒR©TZ]]ŸŸ¥ :W‰´ù™SC’¤¦êÖÔàŒ@ÑŸöïwssÃw0Œ+VäååM˜0A­V—””`&—ËG޹aÆ;vœ}ºnݺüüüºº:í6¸}ûv¼9YXX¸ººS©Ô7nlÞ¼YOÜJK—.}ÿý÷I$|¿0.??¿ººZ©T*•Ê}ûö]»v­±±±¸¸ÊŸ’H$ÈpC¥RÑnOü—Éd(ŠÒéô… æääŒ7N.—cF§Ói4,!,9…B¡Óé(Šöxú—……Å;wòòòÚÕfpçžÎçBD*•º¹¹:tèĉÄ%óÀÀ@µ»xæ$¡‡!¿ý†`˜zÔ(õòå@ƒåB£ÛârÁ›d?!!!«V­Âÿݽ{7‹Å quuX[[ÛÚÚfffÖÖÖúúújçw5êëë÷ìÙsüøq'''è[0@Ÿ‘––CBBB:] ý]R©%%eÿþýL&3""âÉ“'×®] pww?}ú´¹¹ywri“Éä¹sç^»vm÷îÝ÷ïßolltss›4iRjjê¾}ûÄb±µµõ¨Q£lll|||.^¼XZZZSS³`Á}0N­¶HMMMNNn¡Í¸»»GFF.]º444ôË/¿6lXmmí¶mÛ:·ð¤!犚¤d•ÄÅ’IˆMMMZܼ‰Àá‰R  à䬬þ¾H&Cãâ×Â$j;»â€€Aóç_¼t©²²ò‹/¾!!!ÎÎ΀޽{ÛÚÚBúðQ£FÍ;^åè蘜œìçç7jÔ(|)¾½ÍšF£Éd2‰„¢h»bóy<ž——…B!“ÉcÆŒñòòôïߟÔÎ<⌌ WWW2™L¡PÚE"‡ ˆ©©éĉƒƒƒ™3gNß¾};P ùùù€ÅbÁªh×µFFF¡¡¡3f̨®®ž>}úàÁƒ™L¦§§ç’%KJJJBCCñ0¤vA,———;::BÂÊv­¥Ñh4—ÀÀ@>ŸÏápß{ï=???F&“]\\æÍ›×1+ž››kmmÍ`0:VQ!!!AAAx›ñððX¼x1®YÕ=m†B¡À(;2™0xð`‰äçç7lذ¾}ûîÙ³§ÿþË–-CQtîܹîîîýû÷†Mœ8qìØ±vvvÎÎÎ(Š’Éä   åË—w€ôZ©T¾|ùÒÕÕ•D"!Ò®ïŽB¡ØÙÙYYY±X,__ß <˜N§“Éd[[ÛY³fùøøxxxÀù±±±ñ|@£Ñ,,,BBBœœœàÓµ·ØYYYÎÎΰ‹kWµ£(Khooéåååååeaaa‡Ã?~ü¤I“lll„B!\ \¾|9…B177 é€dLmm­D"±²²¢P(*•ª]îMƒááááïïÏf³[h3 033a±Ð£G‘²2 “¡wî`yy˜@ššW¯€BP³·çLšTvçÎ/_~)س'77÷èÑ£m)Í™3gÖ¯_?}út`€`€o¢ù<'.›4I€xrsAq1’ŸH$`jªööÆ0š™Ùªðð^s ôêÕ«-¿:xðà³gÏòù|}S€6À€wFFF)))s`À»fœt:ppÀììTS¦èßÃsrQôï?x4Çkׯr8œîÐ3À€*Pµ··7Ôƒÿdã„ ˆfPÀ»À5.“Éz„_íW*•=Rœ½ðäÄ#‚(å'‹õÄ¿W”Z­îÙŠêñ6óöß¾-•Jß•GÀ«]¥Ré™Åb1¾ÝØØø®,ì½}Ѭqâp8\.÷rÀuB ÃJJJz„®ØÈÈA Ãjkk>|Ø#•ÃߥRiO@fffÐ ¼|ùRO’B`Ô †aMMM=[QúÐf:åýbVXXø®ä°³ÙlEáî¨v8V«Õm2{w[”æL Öãkl˜K`€ÐÍ “ÉçîfèŽÖ«­­}þü¹¡Ž 0À è~””¼1AüŸqºwï^—²o¹»»Ëd²/^8Š¢õõõïJ­9;;Ã’· .— h!ÆÌÌL$õ¡jgÁÆÆ¦¨¨¦ŒTëän?¨TªX,.++뺒#beeU\\ !‚ Ä—E&“ù|¾vàó¶|g‹E¥R[å×·°° ÑhYûPUUU'f´tâ MLL¤R©@ àr¹†UUUÕÕÕuìí³Ùl‰„ûm©ÛÎm· oIEEÇsrr²ë7D·q*++»uëV«÷²µµ-..î…¶Z­f0eeeÙÙÙàVßÜ´ ‰T*…‹u•••°G£ÑhÚ.`&“Éårëëë1 ƒŸÏ/**êÓ§OMM þI°Ùl©TªÏ)uVVV555-/À×ÖÖR©TÈU¬T*Û;Î055Õ¸ŠL&óx<¹\N´ŽŽŽ/_¾„Û<EÑšššvý~•µµuee¥B¡022‚ëáÚN§;99iûàó¶j\Éd2q»¹á …B©©©Ñ6N\.·©©I¥RQ©T@Ðj7jffÆãñŠŠŠšûޏ\nccc§p§²X,…BÁápÜÜÜyöì™X,¦R©MMMmwÚXYYÐh4E!ýAuuujjªÎºÕÙϘ››766êüQü±Ítà=þ3`iiYWW§ç,DÿþýŸ={Æ`0"""ZX€üÿGü¾¨©ŸÁ`´`{T*õÐãû1>Ÿïìììâ1€H_¤ÉJÞ«W/.AC*•–––O‹Å{æÆÆÆÚÚÚªªª²²²úúúšššŠŠ ø.1 k.¦ A>}ú´åþÕÕÕÛ_Ëd2íÏC¡PèüzU*ÞôÍÌÌLMMQMMM}öì‰D²³³kûïB’=‡£ó*è­xMlØôêÕ §&#úA…‚ªªªv®†œŠ.äçç㯘Ïçk×­‘‘‘¥¥¥X,nhhèÝ»7±7i®Óáñx6oJ_!—ËáU/^¼ppp€i,KgV†aJ¥R#Z•Åb!¢P( 3Pg7*‰ìíí.¶öêÕ+ÛÅÅ…F£Ám‰DR^^.ÌÌÌÊËËáúººâ}\UUÕ‹/töª2™¬¡¡¡Õ—E&“{÷î­±³¨¨H{ú^YYÙ\Üee¥¹¹9“ÉljjêXn†a·D"Ñ.¼¥¥¥©©©v?Ãçó-,,à௰°¿°±±º4p‡^¼–F«°³³k5S­V¿zõ n×ÕÕµkZÆf³›KMc³Ù-÷µµµ-GÃkÔmsIOØ566Êd2 +ó76º¾`ûKcL›6 ƒn+"Š¢:ÒªtÙ'8%o•~2Q/láæÆÆÆÚm—F£ …BA,--á¼G£$Ú7$‘Hýû÷'²‘"‚¢(Q ¿F ›«ü* ‹æ.ˆ÷AD±Gí0äáÅŸÂ××:Xˆ…$þ‡‡4¶¶¶øÎÞ½{ØlâãÛà;™L&QSØÙÙ™ÉdjT#ü!gggh `µP(‰„ßÐÓÓ“(ô¥Q¥Í»P(E!É/¼„XÐùûû …B2™Œ¢(,Uo޼¬ ü*6£Ý¢`©´<î‘o÷9l{Ú;¹\î[vO-ÔC[ZuÛEç­à~ùþÚmA2™Lz‹Ͷ÷$]Q¥«OoÎ/;KµY£ŸéÕ«WÛŒŒŒ`#Ôù–,Xpêú“ù[â#Vÿ8þƒŠªT{€ÓÆZ kˆá¶ó )еµ5›Ívrr"vv:Ç\p°ÐªX–µµµ‰‰ |=‚è4?ÄÑÑ­W d2Yvv6ÌDADƒü˜ÅbY[[kÏ™’““srrˆV«ÕÄ3^«666=µÎá~UYY‰Djnjbii‰R*•ÄŒ*• ?'øš$ è€K#ÎÎΙ™™0íƒÉd±<†ax9 Fjj* ¾¾¾  ¿mff¦B¡ …Ä!-l}ûö…Wb±877?áÅ‹jµšØñ*,,„õ, Ùl¶………µµ5T':¬H$’¹¹¹N•qb±µ;M¢ystt„ê«ð*2™lmmZ(Š:99‰Åb6›Ý¯_?SSSkkk‹¥óæD=VÈŽ½•JuwwÇ¿6£q7çææÝ4 ¶ â9EEEp<®ñ¹‘Éd2™¬- Ëãñ´¥²1 ‰D¯^½ÒX´wêÓÂ@¸³’#ñ· ¿GýÍùu±‹¤Óé £OŸ>oSâ°ÆÉÉ©Óõt`#ÔùFÚåÂ{c§Á”‰D¢T›aoÜÂŽXB~¦°°°íÍõõõp¢ÙÂ7ûÆ÷«s͉Íf·ìP†Ë›N´622‚Ár¹¼ºººÕ ‰Ä`0Zõq×××›™™Á)-•J555Å'ÝÚå§ÓéÄÚÙÙá‹0¢¡¡AÃ"—Ëëëë!ÿ<ìÚ»€…ÆÿŸ¸7‘%ËÎÃ2#—È-rß—Ê­–¬å½Þæ¡{¦‡Ó˜Àá@sì±E‰Áì‚ÒÉ¢úe¶É‚ ‚e hs Ð.³ôôôt÷ë·W½Ú2«rß÷ÌHÿøôŽoßX2*«u4úUdDܸ÷ÜsÏ=ç|绩OVÕ‘(Šâp8ä\%è˜Åb‰Çãð;çr9ò6ØíöT*e±XdY‡ûûûõz½P(8NØ\0ùeYÎçó:©u†jr¹\N§Óåry}}­åbÊd2$`[©TÊf³³Ù¬Ýn[­Öáp¸Z­@Ðívkµš,Ë‚ Îf³U«U¨{Y–·ÇãAV :IC2‹Íf‹F£“É„ýÌÑhtqqQ­ÕjÝnw6›I’ÄNf?#d‚QM$—Çãår™âÒ¶N§s¹\Rç'“IµZF.—ëààÀëõ6 ÕOƒ|²ç~Q}>ß|>gt“ÉDÇí ï6.K­ÍâÐúž’»ÝŽÕÚëõT]»ƒÁ€Ül6çr¹jµZ­VïÊÏð^(šÍfV«•äÄ·©»ï÷ûEQTAÒŒøØ-K&“i·ÛÊÙ§K:·K’¤-{M2£Ü¿üå/çößbcNV­!Sõ³ûçmÿk³’$M§Sšu›Íæõz•Ãg±X$Ib-™ù³ÙLkgÂ%IbÈûª¶I €"ƒ‘(Šb¯×SÍ»óz½ãñX¹šÍf¿ß›Ü!—ËÅRX­ÖH$²\.m6Ût:…g£ÕjƒÁn· ô)õxŸ³AÖ¤‡Ü'»\®Åb¡¿>;Žê.Ž€R©&Ò1&“ b“ˆ«Ùl¶\.÷ðáCR4™Læüü|4)gZ›ŒŒ~¿/‚ËåRîî¢(Â0’$ ™&“)‰x<žápˆ]ˆ]“Δ&“‰èÚÌf³Çãa%BSlˆéU¢¦ÏçSMŠI¥R²,?{öLËÜáä“ËâÞ¥Õ†ÇãÙ€ÑJõì(ŠâëÈÊAc-}‡Ã!I—¤ Uí§ÕjõâÅ ›Íæt:ïe>Ÿ÷û}ò¯°âq›AÐ1!iFfj¹\j%(ê\b-f}™ù+ñØl6epušöËËË ’Åï°qþŠÉdr}}ív»¹€GÖô œ#}£ƒ3ű;N§Ó©V«J{Çãñ$“É-ß],Ãü–~QlðœTù­V«õûýápˆ1Ìår‡g&àP-‹———;;;_ÿú׿ò•¯ÌçsäRú|>›Í†$1­I±X,Tn¤Õj­U¢(AY0t»Ý’$ùýþëëëçÏŸÏçóN§sÿþý·Þzëþýû~¿ç'»ÝŽó{Pƒ^Æ^ÂN &DQdyܻݮª0 °êÈÿ¹Z­®®®²Ù¬Ïçcݹçççì†Ùg£lLŽmÜü6Á`P.—Y«Ù°§Ýn?~üxcœ& }- –0ØÈQƹL߸AëõzÊlH5<¢Ê&‚ªÎb±¨:‡×6<°Ûí²³¿Z­X§·N»iY8¯×‹E4½¥¢0Òpxú«ÑíªïFÜ2×ÜœTÏR×Åb7u×6›Mî év»ƒÁ çñX,Øc :1¡Ñ”q#v骮"Y–ÕóI"åñxT{âóù¼^/ù£ >ð¦Æ&¸×ë Dû/..Êå2Α­VËï÷/‹³³³ÓÓÓ|>OúÝb±øý~ •-—K¥uR¯×¡=oêÏ$ߊiÁ`Ðáp :5·Ûí÷û±âù²,ӳ݀~ç.ɲ‹ÅZ­w¶ :† IZ&“™ÍfÏž=«×ëZ_!äC tuuÅ&†h5ˆD£Ñ`md‡Ãq#J}àB:æ"Ï X½ƒ‹Ì»aÎdY~ëF¯Ó‰W*U94›Íétz:j™ü\ ‘=ÃjµƒÁ!à]$eb\AÙl¶ÝÝݯ~õ«ï¾ûn ¸˜šÅõWFa|(ý)!«ÐãñlóF·?‡Íçóf³©úFN§ÓHN3¼I:KHé<ÌårÍV«u~~þìÙ3å+Ó\¯×oäQ ƒ7¥#A‹F£‚ àØaµZ‹Åâr¹ÜÚÚr»Ý{{{ÛÛÛƒÁ ‘H8Î~¿ÿÙgŸ={öÌãñ˜ÍæëëklrÐwÀâ(Gi3PÚ|>o·Û(U^­V‡Ãáp8´ÙlÀ ]__W*•«««V«…ëFóN§&î.€Œ/ÕÛ±»ÝnB^³Vs.—s:ù|^’¤H$B+û ý’»ÄmÙKì þúúZ)-,2šÛ7}òx!"™LB“š^%“D"‘n·;™LÆã±Ámœƒîn ÛÞÞFÍÓ+üg›ìììùf jÒÅâ­V+åæaw \§jPA ù4h¨n†Û],ÂGM&“`0¸··—J¥€Åb ƒ?ùÉOb±X³Ù|ùò%B/²,³M¤HQϋŢjjÃf•,Ë»»»ÕjÕívÿä'?A͈³³³§OŸ†ÃáÁ`P(”»`©TB`ŒŒ>À0‹…*î‡KñÒšÍÉd‚Ôè_Ó |Ûh4êv»ØíT›/v"89|®* ’&f2$_Ìf39E1NsžÞ×ǶZ­ù|~ƒp)ûQJ8íM—*÷dvFØ»b±X.—Ç8s⤳¸R©J` Ɉõ`ÏçsM¹uGên<oÛ“e¹Õj!ñŠ;æn\a­2ÙL;iP&ØY«ÕªÎ[Þyç„ËoN˜E6›h4ɲ¼\.µf1‘Hˆ¢˜L&É ¡¡ü½Ýn/‹Æn¿U7­Ñh„Z,M‹V‘¦åÍÈår)AÀ¦Ôn¦ÿDMç£Tm‚l6 ­±\.³Ù,¤Ùf³½óÎ;Éd²T*Åãñ@ ô’(ŠÝn÷£>ªÕjðã¥R)³Ù‡[­– ;;;Óé4 ҚĆg³ÙvvvšÍf8FêÃÑÑÑÚã{W"‘(—Ë×××ív»ÙlV«ÕO?ýÔçóµZ­~¿ßëõ”Ðï÷YÏç0›‹ÅZ~-ó¹\¶Ûm øt:¥ GGGåryµZ¹ÝnŸÏG¿Qú Ün7Y ÜP ‡ÃñxŒz¬Î‚Ý Ós$×ÀJXkÝëH çAh½^o,c7¼ÃÃÃZ­¦µ0od<¡Ãw¢QdµZåóùn·Ë®b0½a*`–Ù}‘³år MȪ…ÝÝ]NÚ‹ LÉv»}}}Í!‘ *¢t:-‚r_WU&’$±¹¦dìîî®ucÆãq‡Ã¡ Âcðõ·êõ›<àûûûÝn_bY­RVëßp¹þ{¿ÿ~-øûÀß’¤œNŸÅÒX.­’4_.+• K|§eWÒA%ì¥QY7pøe*•²Ûí•JsoPÔX¶.AXõ„6ÎE£Ú½×Ú …‚jx÷ööhi±ÂÊS±X|þü9õßuïÞ½~¿ÿu.—ÛÚÚŠÅb3âHát:EQ„-çÂ6²,w»]ÎM´³³ƒlxÌãx<&wº„(rµZ)Ý¡ápøàà`0ôûýÕj•Íf«ÕªÅb)‹§§§‚ 8N¤•S ¸RŠØo÷ù|¡PˆdݰZ­²,Vœ°aŠ® Ì3¾w%üNm!Ó}¹\{pËBóër¹¶¶¶TOcì÷²£„)¦"u¶Ùl.—ËF£TÕh4êr¹XïËN0ì×¹Ýîd2‰ær9È M1d’†ßPߨK7Ú¢8cËb±ìïï7 Œ7‚ @Ýá*îÒqÆR5ËL&#B6›í÷ûˆ¡‰¬_²‡¥ » f?ŸÏ¯ÙœHeY6›L!‹å¿p»ÿy$ò‹^oÁf›šLg‹ÅÜdJÛí%›í›.×_s:/»ÝGÝîÌ€˜"üŽ}%‹Y­Vn{ŸL&ÊY´Ûí¹\Ú°ßïß²š!¨ 6›/§Ó¹X,DQ\.—ápØår­õ¢ì©²Ã«ÕоÔ`k·ÛÜΈ;*D°E0öàŠ<@  ‘•×ï÷ïÝ»×ëõG*•*•J{{{Ñht8>þü÷ÿ÷Q5à¢( …n·+B©Tâ”CËÛëõp5$‰v» /3«ŽG£‘ÕjÍårØùÊå²,Ë;;;/_¾„+.i:µ ­Qg$!3HBãz½Þöö6*ÔqñÎZ­Ðq$9<<áòò’Blíô!ìD˲¬”²—†¾§+‘HX,-?ÕÖÖ9m‹E«ÕâÌêF6›ÅCT­`Œv»½ÖÐÖ?ãº\®B¡ e>{½^U‹¬¶›ž«ŒTþÝn·³BH®6³ÙŒ"„œ d<CT<Ͻ{÷†Ã!—v„5nŸ?yò“ÎÕþáí·ßþÖ·¾upp Ëòþþ>*¹™^*¡ý¹”¾ôììÌH…oÔºÌf³Üw¡ó$N§S5ÏÛétÏKVÍ`u™jšâ)yú}`O{———àÕj¥dàEÜ”ìô««+dií³™º@p[;÷@Ä1¶$ù:YW”úôéÓår)‚|‹Rœ¬V«e0 ²»(Š™'Ož°[N½^Çž}||Ìî n·Ûx,Ç …B´:”}f/e›Ö¦¤kV%7›LK’þ~0è“Éôd>ÿ[­¿œNe“i°Z}2Ãé [,&“É/3“é£é´ûÅmÙétÚív@gàîDaã×äs»ÝápX+ý ºHRi.—KƒìÈ WÅóã\Ün·Ífs4Uµ›PÓ^¹;ÂÙå÷û'“ "ðô.å£_§´_F£­R˜±€ÊN§S¬¤ÆR޽/ ‡ÃFgSL–Ãáðx<ì 2 ùý~ê<¶ kììúA i²óù£+d†µúIf<O8¶ÛíÀcr_Mͱ´‚Á bc\º3ꇾýöÛ‡‡‡¨}~vv†7›Í±X¬Ñh4 N)ƒRNW§Ó‰£•o±X\.×il§P(ŒÇã9æó¹²FŒ¹ IDAT‡@ž‘x+¦<9ƒA«Õjðu‹Åb“_yW ¸iJ”–ÆÀ&aÄ`‡´Tçóù(c“äÁãñØívZ&€ÓÚ÷z½‹E!¸¤?YÃáuX­ÖP(´¢ P»‘ˆ¢þ­[$I²Z­7ʶ˜N§ÆùM,K2™Ä¯%„d4x½^úL ²6+ ¬<9Y¹o&siÛfûU¿ßa6›L¦åjõ½ñø“ٌ䫲Xü_Ãá?|…^ò ‚Èœœìv»ÇãAŠþi¼’¼ÛíaíŒF£QÖÅäñxü~³ÙÔÛ”ñVm¨Â°ñíçççÑh”ëNV«5“ÉŒF#2ÆA$‰Û$Iòù|8ìë€7óùüG}äõzŸ?Ž£ØãÇQÙDµZ­ÓéÔëu„ú9 FÜ܉¢È¡"§‘H»»ÒÈr¹\ËåU‡Ãá@ÁJ¤ H½;;;S L·Ûív»Á`ÐH,Ðáp†¬ü;ÊÝb耯¢èüü¢«…à±X,V«•sÇ›ÍföE@€Ý)95ü®l6[.—%Iº¸¸€Å°Ùzf=ûìašõw ‚‡!i$oZ“õ:A°7»Ý®ºm6›Ž¯¡Gú 8&6›MUqâì¶Ì;¡Æ‘¶J ®UÉžmÊè¶@ÇƒÌ åP¨šø¨Íx'„UËåR¿b7YH€?ƒÝÏF»1´\àf( âDù‹’”xåkÊòç³Y‡5~W«?Ïf³ÕêÑlöÿ ‡Õå2™LØçqØP„šÔjlIoƒOî7²,++é;®~«q¾H¬,¢>î‚À2 ã›.—Ëh4úÖ[o¥Óé{÷îÝ¿zÀ#¤œ²•u¸…ŠyD'&u:üñ~ðƒ““¤$|ÿûßÿüóϱ„ºÝ®I•{h‘ã.Y–9È$€Ûår™Ms¢ùe±xtc¿ßo·Û:{O«ÕB °–pÚp^¸ÕjU©TTa˜f³ùôôôòòòìì 9ëì>¢ÓéÄÉ= Áp8l2Í#’£Ø·+û6þžN§wwwK¥ÒxÚ8ÈÄæþ¬ådÐ$ÕÉR} TÐÚÙçBG˜,ØÔ™‘[¹õ>þøcà¼&Ó?…B¯<û/æó7ž2–ûÊdêÈòdzٿþípøÂçëÊ2j€bŒÖÂá0LwvvÈÄ0˜Ë¯L²¤»r¹\¯×cœˆßLo—V£YK$kïEŠ‹Ò–ÉçóÈaM$JA‡ä±YÚÔá³Îd2©TªP(Äb1Y–>|ˆ¢>ÄG7™LT%R„Åb`Íx<^­V°Â*• v)³Ùüøñc˜9^¯wgg?^;òGGG(·£4÷A Œ&Ó«t/<–¶= vMÒY”ù w 80³ÜØÒ'cK€·Óçó‹E!t$ QÀù|~rròôéÓZ­oîB4Ùóù\ÄÞXÁ`ŸIC±5ú %²‚O#æâðð0ŸÏ{½Þjµ KŸøB¡0UeFé<0›Í³Ù ùÓ:: ÓÊö"t»xægËWŽÿF’¯ãæóïÍ/¾fn2].Ïæóòb1\,7ÑÙ'9º[3{·U¹Õn_ÆÍ+²õ "k7¼Ñï÷£4*i. âYß7sÜ%V,<¢5H‹‚"øüóÏ·¶¶ÎÏÏU3zЧ[[[¨¬Â@ùTV«õÅ‹ø  ûÊ@ŽÖ@!¨¦õEt) êä§q7*9—M&ÓÞÞÞÕÕ²T8vZ$ûAó¢Hñp8D"÷¬¤Á“yuuuyyY¯×œK$¸ ûÁ½£Ñ(›äÊìš^ñ.—ËX,¦ªkØ<2Îf³(Àh6››Í¦2R5{Õ‹ð¹ltQ3™ Þ…?ês¿Òþ¤úà«ØÝÏ„jÝ(ëM™p7vž£¬>lDËÍ/b´ét:·Ûm€üvww‹ÅÚ˜ÄI–eãŽz̬ªf@Ò ¡Ïç œOB˧ÙGþ{×mðÔª˜nÊùÀ< Z…›}ø´ÌVBRAót¯ßœð»_p»¿ærÙ^mN?NÿïÑhøÅ™p¹\TŒ‹x»ÝnÕ:í,ŽE„Ý­”ßÉÓÔ’¿T*ÅæÁã„% Z[£Î% i¿ßG‘S$¸7›Mì(ZK š3U0懣T*¡lÙl®T*©TŠÛX–ª;“Ïçã`˜J‚`Ô¸B¯ööö(°ì §J±XÔnƒR©äv»{½{Ê$(!ÌFÕ]“$m9 Pý¨Å‡HÌ|>ÿò—¿Œô³@ °¿¿`ž¾i‚wÁƒ­j!²‰Çã‚ 4 ˜ ÝnW’$”ê`W2Þˆ‚‡Ã\.‡OfG‰¾ë6Ï ¡ ó ¬JqRæõè·W«kmp%Hó¢XW,K&“ñxÜëõ>~ü… R©T,Cðèè¨Óépu¶··kµÚMãÇZœ+óœZÐ×Q4ûªwéY o£ßÓÍ Tk³ë]õïJ5Žv»]eÕnŠ3™ R Ñotsú%¯÷žÝnyµ9ýd:ýýá0`±|Çãù`ðŸ„Bÿ ø¯Ž­ñx"Ëõår®bUC’•ét:-Š"ŒG¤íMñL©TJ§ Ä‹VðÈòÇhù|ñ±T„‹§E£QȨ$IüljDÊå2õŠÅÍ!%Õ·ö÷÷É`D˜*ŸÏ?|ø¨WWWËå5ȹ‘7}çÑäTɽ{÷b±+j@H˜L¦û÷ïg2™÷ßÿƒ>øò—¿Ün·ONN@)«\f‹ô<6› ¾iåodYŽD"=b“àQë<6]}¥Ùl6Qà€›G<äúúúÞ½{–z½>a}ƒÂG_Màj,ã†Éd:<Æ$Ãá°P(ôûýû÷ïsº&›ÍN§ÓÅb¡…~­ÕjZvn¯×K¥R?ó3?ƒ:rØØÂáp2™TRJ¦R©­­­^¯wÿþ}.ÉÂÄàQ?‚˜!ív; P$6ª˜ne«ÕjÜw!/kµZ9N·ÛÝh4¢Ñh6›•$‰øàÈ:[çáÈÄC0¦^¯›Íæíímdöû} fØ¥®ºæ©Ê†²çª¿w8ú½º¾¾fW¯×‹F£¬÷U’$%œ–0ÝÊn¼÷ ÝÅŒ ÿp ;(‰81¹\N’$ÇóàÁƒýý}¯× ä©åv»é«Q}ØôEè.ÛpÆ’$)ãH­DžºÝî|>£jåZóÕl6¯®®nš>@O“eYëDk\Ñ6ÉmrÈ·TÝ,1Ykk$ªª;N¯áF"‘ÃÁæ~~I-HY­?œNÿÃxüp6›ShD~Q’~}k+ër™ÖRP("—˱ \¥½¦&IÒÚ¬VT^]]}úé§ú©>Fx‡íñãÇ“ÉD‹qy2™\\\|Ïï÷f³Ùl6“Éäo¼a6›ÏÎÎàÑ~ùò%J’s9==Åo±X”ù„¬­:cú‹Çã9<<|öìYµZÍfý~ÿéÓ§‹ÅâúúúÓO?EðŒ}Âååå§Ÿ~:?üðCVÖŒF£„Lôx<;;;8öKíÉ“'Ø¡JŒ'e¥R)Ô‰E1ã‰DÐ]¤±x<¢Ð~üø±’K…€‡l B”eùéÓ§ì¥H$²1KºVî|£[¸Lý~¿¯Åúq£f@µÙívŇB!§ÓI˜n”ópÂô W¿:fd4ƒA”ØG®y»Ý¦r',ÒVYDÜd2œœhÙ4ŸþyµZýÑ~D[æÏ”$)™L¢œ¿ñ/E¸ñgËÄf³L®[Ûžÿ|4z>Ÿ/V«N§ ©òe¡Ph<;ÎH$‚T(·Û}£Ú¦Z¿kç’])q¬ç.Asß…L§×Q‚Ïn·»\®›B€™‡çàà T*ìïïƒdöää¤ÓéL&NG"‘ÓÓSš,—˶§år‰ Ê Ù¹ÑhHOÌh4êõzEQ´Ùl———Ož<)—ËWWWô ñx|8‚ãX«ÿ˜M p 0POÀùW*¯×K‰R * ^¯—²†p—êB‹Å"™LN§S›Í€j‘Á”…B¢(~þùç@.SL‹KÖ‡Ãä'pŽø:À?YI‡n·[+=8ë ÕÀ¼Ñ.²Ù»ô bÝÀÁÀY±G.‰é¸'O§SpnF#¿ßc+‰L&°’~ÿûß¿¾¾žL&6›EÚrÄ`„W„é lÀü†B!³Ù<™Lb±ØÙÙ™ÅbᶨZ©Ô v€îpö±´ªh­ýÆÝV Õ_r“åt:·¶¶ƒcú¯@2‘ÎÉIÝæZ|qøÎ‹ÿ½×ûÝáOúñtú[­’ÍVzUó Â7]®?¯—K“H-‘H¤ÓiÐŒnoo§ÓéýèG¨õ«õÒ–Õ N‡¹ÓédKª6@#/..À ¢ê2F©’`Î÷ªú]:è<fPdO Žc¡‘:ÞÅ©†ëëk¤åÀÌ,—Ë;;;àpê÷û£Ñˆ8–™–V«•ÐÝ\eåT. ¦wyy)ËrµZE òu4òììÌn·ë™T¢(Â&è÷ûÈ1½Bùá{¡ŒL ò?Š¢hµZ«Õ*LZ´ð! ¬ø;ö`:qb½! Á.QQÝn7½ˆÝ¹1Y° ƒA2™„ÿ Ñh°³¯$_ÆŽ‹²l·§N§Ó|Øëõp¬Ñ?CÓÌB¤i‚t¤”ºzqq‘H$dYæ¶H;RzØt¦øNf_UÏè/dGmÖTŒV]ÿ—ú3þç]Ý{¾Z±£Ù쇓 ;ØËåïqSy[%AÀ®Ê€¾¿¿‡ß{ï½8N°V#Ž­Õ9Y–U‘bÜÄ£·ÅbÑ9_S¸; t:vwdŸÌ]ºñy¢GiÅ6õ %Tgÿ¢d5Uz ØúÅÅÅÙÙ™,ËN§¥ã…ÅÍõz½‹‹ ¨ãJ¥Âº9dY–Uä•J%™L^\\°^xY– =›ÍÖ:è»Ý.)VLÖp8¼¼¼ä¦X+ÐeŒ3;ò(zMt`·âÜ;¦WH[A‚Á 7A:1êét ‹˜bø«Õ %ô#Û$–1ÝFñÎd2\5i¤Ý#lä^n*•ì´ãñ˜Ó¹¸e2™ pp³Ù|üøñ£GþìÏþì/þâ/Ün7JŸ¨nHä¬&IÁ&ÛU/1K¬¬JäOÕ¨’ÖßÉì³3…üo¥º[Û½é]ìæ„d"3´qRõÿsB¥¿ÿ8¾Ë¥ÌÈw[–ë_œƒéjõÓ/ŽfÂjÕ¯ýúøñcœ c±˜ÓélµZ¨?Ù*wK£ÑPýÈv»ÍúF€àQ¦8s*oí‚äXM7h@€ª+RÙ½Ùl¦ü ­€³NÓg5±ìt:ΚúÓŸþôÇ?þññññþáŽF#³ÙÌ–kÔbVÝÚÚ²Z­¬§ö]Zµ$”A¬v»íõz)<ãñx”…AYÎe¶™Íæ­­-$åÇc$÷ã²€Žâd8pì’šC¸„)XEÜéa{{;ŸÏÓ‹êõ:Ð4P³ÙŒËAE²Ýn‡è‚Øãóüùs˜hv»]§à&Ǻ›Ïç $8VSôÐårÁwêñxHâйqU@½AÓ/ŽIk·ÛììSz'Ÿ¡PˆJ½°$&tª³Ùl‡C’¤v»`¤ßïçLÕj¶ÙlÖçó)óPÒé´ÒYÂê™z½~Svs¢Õv::1Ý «gTS<Œ4}J0ƒÁ$D¿¢Ñ( !;•¬2) Zkÿ ››­{Æ}™B'.W+n»²™Læuç¸ñx<:ŠÐ`åZ­VŽ>™5aÖ‡ÏçK$ZÍ^_Ëçóœì‚ñáöOjP(Êd2.—K(Pú“ûc¯×k6›ÿæßü›‡þøÇ?¦¢Îª.øH$‚•Œz—ìëÆãq(’$©X,ÂÛ©åç‡Èqb÷Œããc¨Éd¢ÜªÁÁCîPÒæ«Õ öïl6Fµ¨ÍfK§Óª™Hèáx<¦wù|¾R©d6›///}>ß—¾ô¥B¡ÀÖt¹¾¾®Õj`°Du×N§“L&EQTõ@7&¢´3€œÇ÷*Mø½½=UqbI¤ÖZ*l…lôÄzØ¥H2©lîÑÑ´ÆÖÖWô&£R³ÙìäVõ»tþîóùÖep8BûsÃ×´Éd‚*Ÿ†(•JõSà*àÖ£ªèÖëuÕüøf³©Tñ¬ž!ù\Â!IƒÌØíöÝÝ]бß^](‡—--ÁIµªŒ³ã–›ìãH$ÂðÙ©dWqµZåf_}sbA6ŸO§sf‘8Á¥HLââRYÖß©‘ýò»¿û»ˆ–ãï(/OáM®>›‘Öï÷7¨ }ûvyyÉZ…Á`0‰Ìçó\.w£Øhd[­ÖB¡€ñiµZNÁ•µ¾ €ÅãqVív:Tg³Y&“ñù|{{{˜n§ÓY,ñ.¨rÀu¡ãp nh«Õz~~¾¿¿¯ÓÅbq~~Žôwv=“ÎE|;‘H°ë„M¬h6›¬úÐÉÁ[,§§§:#C±ôl6Ûëõ¬Vë·¿ýí|ó›ßt¹\ãñuù¶··l£wÙívfÜÈõ<÷(ø_Š2æìv»±9©V( |Ë`0HÙ­èvÕ¼2n;a+Cß¿2€Ñ¸¼¼äL™ÑhôüùsØWWWÜ Áˆ!M‡Ùñ£RœtšV©Ûíþò—¿¬üû“'O‹Åáá¡rˆJ¥gkRúûÅÅ…ªS‡<Œ Ò^A0âÀ¤´rå×jj#9¢N‡N®(† V—Ï>ûì–®­aÏçóJÔn·Y©°Z­úky³¶X,’€©§?JÑhnnÞàæ²õh-—ÿµ$I¯6¤Êbñ—“I›™'‹Ét Šßa¾ÿ'³Ùwƒ®ö\¢0ëññq§ÓA]Ö} G°vppÐn·m6ð"JvZB?àiÄPI¤T*¥¥Ùçbò˜–=™ê;ÎÑhl©jX”ª•*MÖM£G4SápX’$§ÓÉUõÅKU-K(7}À ®íímb{ÁÖÒï÷UkØë ß²íììp4íª8VÄ«Øo<<ÿüsöÚl6”†DÑÒ·Þz+ŸÏ¿xñ‚¸PS©"ˆÜsˆÖ¤ Í.‹œ'Áf³±0{³Ùìr¹”éOܶZ­ ˜geÖ:ˆkîííÅb±x<^,m6ÛÉÉÉññ1øæeYf­%ú½½½^¯‡=¼>«©Ýn8“.¸»»»\.N'åÒ†™Aü4åóùÁ`P,YØUß0Þz‘e8oÏh4ÚÚÚRžØÉ2.„F~\,Ÿ?~||<“ÉäfË$ ‹Eð¼pJâÖˆM²ˆþ`0H5;8wb ¸iý7pb#G"¨ªH£:ÏKùNÑŒ ¬ÎhC;!š[©Tts‰DBµÂõÆ ìk”~rSÀ/‰S(úÆ7¾Ë–47§ããcˆ¯ÉdºX,~Þív ‚Édr ÂùbññtJª.h±ü·>_áUÂå“Ùìév_jO‰$Iú TV„k@$‰n·;”,p¨“¨õXà`dYf§v¹\Þžõ$‹ÕëõµŠ¨4ã)¯×;ŸÏÁ†…ÄkNˆÁ4Úëõ†Ã¡Ò›4›Í´´'!+Q'¦¨VŽs©xŸÏW­Vñ®d2 ûàüüœbѤÁ• …ª6p–‡ÃáÀ~ƒ½V#hÖŠ óßf³åóy.AÃÄP!¾Š°%©Qƒ¶ÇÓï÷].—Ífóù|‚ 4›ÍO?ýôÉ“'Íf³Õj¥R)¶R'Ûùµl/œO‘ªp8Œ’ÏlµCˆ. s°ï"Æ,”7m4ú2ƒŒ^d2‰‚Óø™$IìӺݮ(Š\u¸`0È•5Òi¢(j±hª*kŒÑ7hØì•Ò#Ö0â2EU‹FªVQRõF²N‹H$rÿþ}‹Å2Òé4¨mX¿7½Ëëõjí…BÁívCqw±Íï÷Ãú„`(@;åÚµÏzhÖîL:=W6Ĺ!]7º‘'¯×‹Åô*D°,ΟÍfÿ¢Û…+Ïe6ÿu—ëg].·Ùl2™|‚ðŸ»Ýï¿Êƒº˜Ïÿ×n÷Ñ|®sŠƒR ®ÉÀ·N ·ÛÍòL£„²Ëçó¥RII4~ûV©T SP_€Mâ6'6Ûëõ*¾©Æ%¿ßo6›ñ4”ë ÎC—Ë¥õ]Ü%Œ΋>ŸEz&“Éöö6—¶ÙËËKÚƒ‹H ò'BÁ-ੵ˜¿áœÄ¦øâÅ ®‡J,(Øëõz·ÛÅÓ˜Pª6‡ÃÁ~o  é@ŽÉd:??ŸÍf•Jåw~çwþüÏÿüôôÔçóAÙ©Os8([n\$ªÕjµZ•$éêê 1'Ì>²9(ÂJá(¥2Â'שÌûD"Ñh4‘H°Ë‡îbbOž<é÷ûLA”ÂÉ®Gš,ãj‘¬Õì¯cÝ)O{$Ÿ>Ÿä³‹% ü‡ß9ͪ LZ­‹t'¦Wüù|þððÐf³qŽ¥j=öÙ³gÀ-`iR«ÕÒ?…€wãÑÓJŽ(‹ÆkX°Å!U?4kÅIµF‰• ùý~‡Ãê·z=›Ùü7=ž¼Ív_ÿ;¿ÿMQl,—)«õ¿ôxœfótµú|:ýWýþïŒFƒW¸Åb ƒœ™}·qxi4åÖ7Ä5 ªÝnC ÀÉf³ >ß «’•F¶}x9T¯B!²Ë‰3.°f·Û§Ó)ô>¾Z߸өFJ—"‘u Å’ŽŽ ¦!XÜ«×ë°úµ^Š=†lø¸˜×RZ®Õ@Œ×VŒ Š yDAKÈ\Ó O±süà?H$‡|óÀ&+݆­V ;(;_ª×¤n›^%&aÁIñ-:]¡ü.6i›Í†# ™©V«0Y|>ù²º‚Ì¯× 39•Jõ‰é‹˜YBI___óO—Œ0´šÚâ tÔúmöžµà\³ÙÌj°ƒaùÑh¤¿ã*©uÙ)Æ ‚<øJ"‘Ƚ{÷:N£Ñ`ņËAU…$+ÛcK2£•Djü¼¢ecéÌ•¦5)àÞªŸLR­zêÒ§cæÕ{ŒíÈò¿èv½Ùü­n÷£é4eµþ]¯÷×_’¤‘,ÿñhô?w:ÿ°Õú׃ASÁ £*I€ƒÀ…¢´æà+Ð@<Ùl–YÇ“Édvvv°¤qÜF=›ËËË "Ÿ\@„§ZG¨ù|nŸ«DÛ`­Ñh¨ŠiSþ½×ë±{'‹Axˆ^.—dY×jµ>úˆ\ÛªŽV¡ér¹t2µƒÆ:S¥ IDATÁÙÙ·‰Š¢Hyɪ$Ó¬kTÇnÕoËå0·Û Dw¹\²XKZWÍfóéÓ§P^ý~ÿôô9¯ÊÚ¾¨¤LQMô€”ºÝnRC3øÙ à´¦å&3V-cÔóåÖãåååññqµZes;•r‹¢RûÇ à´¸Å8j’BN>7›býp˜n¸Ùa0ÁØn·Y̬j´ƒS:£dµZÓéô;ï¼S*•À@™–ÊÙ}í6¥§PU‹LÕ:¨¬¯R9#\>ËZÕŠdqÄbuöõWª¼/l²üá¥(þ«F# N³Y0›ç«ÕÄb±G£?¨ÕzjkUÕ./¸òP¼Yy#çEÑJ&aÈyöì™Åb!-³\.ÏÎÎTØ`•Á­ è³`sžžÞÔäÌd2t‹§+ äPz“ɹáñxprÅ·“"C÷FÙ«à•ÑùR!Ђmu±Xx<ÚwÈ#Hkgòûý‚ ÐlÖj5l¢TÇŒL×z½.úà÷û£Ñèõõ5b?õzÝb±pRÁíPü š.NãE(üzqqÁ ¸MÝÈår¨~ <?h6›¹\yð“ÉuáTƒÞìCdY†Byôèuãââb>Ÿ=|øÐåry½^œ6F£Q*•º¸¸Èd2'''ª‹Å’N§ul|pù Âˆ‘92¸F ÜQÃãñ¸ÝnÖl'ï‹Çãq¹\¬ý§ºR©T£Ñ888øì³ÏHfà(Ö'%X3‚ÿÇìÏçs,F¸|ŸÕl6Ÿ?Ž£Î¨³ìõz[­ÖºÂxc{h¤!J ß„ à‡ÕjuSëA’$6©Í`©e,å»Öæ ªó9}A×ȲÙåêÚí»Ýçóù³ùüÅ|^1™ìñøÅ Ï•à¹>Néí‘eÊk0¨R^â öRnµØÏ*;»ÝžJ¥nÃ=ƒ–Ïçñص±>¿ß¿½½Í‘œÁ‘äjY ƒÊ UJœ¶»»»>ŸOë‹‹E¡P@ðy4…Ãa¢ób“Ô¹b‹FÌ´›2†í&(J‘°€Ô0ÖÐÔ+‰ãè8…>³ìÉx:OL¸ôwåb ,;T| šf¢-§áeeÉåra3‹Åbo¼ñ@W¸Y‹œõ&Âöö6¼èQÛM&Äù:N °Z­löKZüƒ>‘4}؇A@÷æó9ÐZõz=8În·‹Zú•SØnÞ à#Ñ2(3•&ËM̉ òB'“I±X$¥ÜR·ƒÁ`<'jàÙlÖn·iÛƒ½«L-ñz½(ʧÏ#>ŸÏÁ§HÜÖÖÖh4êv»———ßûÞ÷‰Äùù9úFܤ äÕßË‘âÁ¸©#Žxotü%Æm’Hš‘ü– W?ûL¿kߥ,üjúù§¿òϾû÷þÑo}ç;ßѱ幠+çí]ÛJ¥’‘Ø ø™ÕjUF>”Ý0îÖiàƒÑñJ#²²7úE1›Í*ƒô]ú1$Aµ"X@†*ÿ¾»» Ç®×ë%̬êþ§mg³\,(VýdLÊ]u jýèèH޽=Ì”Íf{ï½÷Ø¢˜Äh4 çóÎÎ2A¸ÒÈÑ'݃ƒ›Í¦>=Éår_úÒ—à¥ùÊW¾‚zð:ï …BJ׊êØ¹ÝîR©d$,dŸkÜm€Îœb@6piL% É•$é½÷Þ+‹n·{ßçó½ùæ›ô@ ðÖ[o‘7ûàà@gº±Z7è¶Ö] ¨¤¦Óit Ò7‘×Ý~åW~åßýéOÿö?ù?ÿæ?øß¾ò7þN­Ñ2´9™L¦d2 )Üßß7>¬ÉdñU9Ó™Þ> êñxòù¼‘)×ÿ6Œµ? ƒ™L†ÛœÇÎÎŽA!0›Í ”Ùl†bµÙlápøí·ß&DµhÁ5AOSU…Zë¶X,Rî“ÕjUu›^!×jý½s³©WT4UVˆázˆ[ØÿÂGôî»ïªæ‚Ò]V«¥”‹_E\bßÅvO)¤gµ¾’×ëEi+hwß}÷ÁƒßúÖ·~þçþÝwßËQ<W}ýðd­Á%Ô2g+‘8Ýrš Ê›‘•‹±åÄ Sé ãMUfh‚AÈçó h!=S(Ø¡xoúö±Ùl–$ ‚±öí7ê^<WÖE»ÛYÆ<*7§õn=ò&# ¤Êa¡s¹P”0Ìt:M. ÕÍÆå éì¿ö +Fÿ‹”ø\dèqwyÕnOát:¹ââDðªä™ÝÚÚb+H±mkkKé~aQ“ý~ÿßøF6›Çãü1½ì’$e2b§ÎçóTÞJµþ,°8Ê1!T/rô+•вJžÓé´Z­Édr0¨²³Óúª÷n°RfP —›,Ô¦ìv»„WÅüšÍf€0¤@žX-§ÖÎÎŽ’™ +dÜ!Q˜ ’ç#ŠôðB¡L&!l 2QT¸\ÕëõétбF£pƒ£¦€Æ‚ ”Ëe¯×k·ÛQ÷OÕ;”ÏçYžY`º%I"×¢ÕjÍçóWWWì E‘ŒÔº¤ïæÚ¬ŠËåœ{$N6›pudkUÈ ƒ¥Ri6›•ËeÖI€ Wq×_¤C#®¤H&eb\ÝÝt;DZ  B ÜV2³â¤þGùæb±¸ž¦ý55ˆ ÜåXŸ½^OǃÉ26½¾ê°›bÇ@g©z*ãñ8t>™P“’$¡"=´±­£u»]­Øœéœ¢ð·Ãáwß}·T* ˜ÌWWWºt:=‘mL î³Sh„,.< %g¹\®V«u:¯× ¨¯ÖúÇèI’4ŸÏAp»Ýà¾BÏ9ü£ÁÖét°¼‰Ò©ƒœË{>ŸCç†Ãáx<>ˆŒy€" K¡PHYøGÎjÁ]È6FY¿t:Ýëõ, "ä4Å€–oooªÑÙn·h”$ ­Š‘¡P(\^^úý~ÌþÛo¿ýöÛoG"§Óér¹4‡‰%_'IÒjµ ‡ÃÕjÂbºá!Ä’Ô™bP “踷À.¹©ŠÜlgBQWÌ#ǼÅvô›‹ÅâöäŠX¹TŽM]“$I’$ *ïíí)ËÞW’ÆÏ4‹ÅÂétn2˜u¹\O­ b—¡³Y|®ª8I’´X,`ÐÔj5=švBƒªîlÉw•`nÐ6›í¦Eæ×ºÈðCÖTþ½V«ºíââB9ÖX&“©\.C)w»ÝT*…‚ÐÛÛÛÃáÐjµ¢6W®QŸ Êpîu(ËÅÞ~ûíû÷ïïîîîîîÆãñX,–ÍfN'øçó9€u»Ý=·C§/”÷Gz€ k_4(XãÂ¥Ñ0èéæ0Ý,ŠŸÐï÷Éüç<<Ãáðôô”tÊl6Cê*www'“‰rôxp<³¾”d2 ÀrèÖzç{†y ‡Ã(ÿÓn·ø+Ð ÇCoá¾—ÛPÙ©gP(íp8€ÀÅ6qqa±Xòù¼„ Éd« ˆD"¨1n11’éW«•ª Q—p—–Æ8>O‹Å‹Å<Ïh4l,ƒT Wx¹\"¬ëp8¢ÑègŸ}fdËW-°q-J|W"‘@æ–…ÀYe‚ÌI%Kù|žãm1¢L OÚí6Ä©^¯‡B!¥¦£ÓtŒ9 Ø1ª=a!€œ2Á„nFLÌê™Ý…Rg7ºÄ®zö`Ý l¹\‚YMwײÙìåå%-3hI#7"ü®„és¿Þ¦)ö¹†ÓÀÈšÔAÚ"ºS¯×q¾A09“É€Ú¤Aöê]­ã6ÙP¯ÓéôììL„T*Õív°}ùò%†”“¤ ° Ìív{<ýj(À¨éü@k²Ø1ä@¸¬(ƒx<¢Ñh2™´Ûí?üáu6'³Ù|pp@QRÖ~Ò‘{]UU.PdV«•ø  †NÅRÑ6›Í”RÁIGéÂ6hÀ7¨óÉ’$5›ÍápˆÔP‡ÃQ­VK¥ÒüÁ¸Ýî“““L&k†`U@ÞÀÁËéY„FÝ}ùòåZ³ÀˆÌ|Îf³«««gÏžaL8®´\ß^Ô2šeYîv»§ÑþdD™PzòJÐ~Cô%F*q*ˆt½rjÖ ¾žÑò–Çãq­Â7À•껵ƖáóÄŸûù¼Ã„ˆù|^(H˃ïËÈpë+@ªG"ý¿»jP"e*û]™L¦Ýn¿|ùòÙ³g  „a+Š"²³TŸéñx`j±ÜÛÛÏ ÷:xöæ‡:È{&“ ŠŒqÓÄoÓ[ëâãF!wêát:5‚!%< ÷÷ÑhGV"‘H§Ó£ÑèåË—ZÛáöö6h5”²½½ò_à,ïõzH堨ƨ‘ã‡Ï‡h$>Áz>ÇÞÞ&+Sµu¥”BlvvvjµZ±XœN§±X¬×ëÅãñår©Å4ŠD¾áp¨ÜYÙ?Ât#÷ 5PjµZ­VF­V«Ùl"•uå2½¼¼|úôéåå%1¼ÐჅ{ã-UƒS¹\.[Ð_½^¯R©´Z-­ŠG6ÞtpÀYO&’ê\.×ívuÔ­¬×§X”+ˆbqp¡[ÐC}ýã÷ûý~¿rÏV…Òë<Ðô î­µ¥m€ÍE1‰`”xjÇóõ¯=œÞy]Ùzóù¹Ià|Ms È÷ë8Q ‚°¿¿t£V4O±XŒcœ‚Ÿýùóç§§§N§ìS”(‰D°—§Ói,˜^ÂØáúÐï÷Yâ«L& =:àp8ØÝŽ=`‘COKvõw&TJå$¶óR³Ü‡½^o0dõ ”Aým6 sY–Ýn76xî¨],G£—ôˆKo¾ù&вn·ûââBGÛ–J¥\.—N§³Ù,çúØÙÙAb–S§ÓÁ(¡~ Ë•€ÚÜ9²T*Z€}b0hqó cPU3â^‡ì†ëëëf³Ùétð]o¼ñF¥R™N§~¿?™L‚‰˜%„çgwzìÑÑQµZe‹VÀ±©º¸ i‰DÜétf2ŒÕx<^»Q†ó *—cãŠ| dëÒ÷*×9{ðÉ8R»ÝnNœXcQÉ\ªÊAÊ)“@  …ô½X£ÑˆÈáp"Dçi”NOO•›ëîî.›©ˆú÷u#GÝ¢ºTïÖÜ'ú¥òt:ï¿ÿ¾ÞæÔjµ”:H5BÀ½#›ÍBÑ Òèfåì8c\,ì!”—l Ãív åF(ÂÁÁ«hÈ£¢¼ÄÎÇ-Y“áoa©K‘e ®×ë]__˲|ppÐh4Øt– ·ßïèQŠ£¤¦ûý>ˆ#ûÞ½{¤£•®9¬üÝÝ]Tâ~Ïç÷öö:·’ƒCÙ™L&ZÑuŸÏ‡}ZE¥8ÅU•jµZÙívQ?ùä“ããcY–Á'I‰œG{6›Q 3@êÔjµétšÏç‘YÐï÷•ü¤ÐõÉd0d$ײ±Y°¬–ËeðÓt°hµZ±s AˆÚ®T*=~ü¯ …B¥R ¬êív“ËiÈ{ ³tK&“AF;Îîîn¹\îv»Êx*™&(Ü¿òàIHâñ8ËËgµZYø$íúúOfýœÜhpR‡³£A+[‹.Ý q­’]3‰`·S54Qü‰Ê\™Œ§ë°Š•N~()%k]”áp˜ÎvÊÞ·ÌöÚf³¹–rWé„t£2fª“ýær¹m©êd*‹Û÷hnN?üá¸&÷öö†Ã!;(ˆÃßá6 «ë½²¬Y¡Pxúô©ªd°rƒøÐþJ,›‘À },@KªD .³Ž³ú]×±JvvvNNNÈ‚ƒ²æêÓw¡`9‹‡Ùl^›Š‘Rª ·Ûm³Ù8‰ß`ЧÓi·Û%à¶Ác+à{ Ö&—qÌ›´ÙZ‘80;HÇÇÇý~û ñ“PÀÀ`0˜N§‰Ä‡~øðáCöÃA´X©TرÙl,¸|2™Ôëu–òƒ PÇëõ>yò„»„bWªb ‚ÓéT²xpgYªáë÷ûƒÁà£GÜn÷ÁÁÕjU5@[ŽC°²Žß`0@F¯Ùl†ÍÎj¢(®ÍmQÂi•Æ-Äb± ¦Z»ù9X÷¬j»wï^³Ù´Z­`Íx}qÕE§ÕÂáp>ŸGÏIH,‹=1Ö¶Ø»r]BfDQT…[(OHÊ$ÕŠZ'…ƒwnëÖk47‹ÝÞÛ¦J jä rUŸÏgi‹òtÊŸmmmÁ …®I§ÓkãìY‡3¸Ty-KÂч"ð`Âõûýñxœ šœŒÆãqÒ’€ ‚ o©QUPÕ“>[˜uã†a7þð4K’ï‡Î¶Z­N§s>Ÿ\¢ìy4Eí–÷ßooïèèÈçó=~ü¸Ûí*5ÂZ£Ñ(“É„ÃaœOOO?ú裭­-dÁQº Ê0ƒ‡÷F£QT³¦µ°6©ºU8ŽB¡ÀÚIÀŠår™ËåôçæÁ™[©Tà\BÞ^±r#ï÷û~¿Å—•—¦Ói*•Ru¿loo#Š£¯îpáÓbD¹Bƒî>ã|¬ƒÁ@ggRÍápà@s{îì» mT«Uäè’ ×ëõ⟪Ժ’$¡jöfc¨#NàƒÝ@iH’”J¥`zúýþo}ë[œ[oCô‡ë\Û‚ÁàÆH) 4óçâ]DÿŠbû‘¶ªp°““š•^¯÷äÉ“;ߘÝnw4åp-è|µZ}òä‰ê^¨¼´7g2 Â%$ãlNk¤Y­ÖX,¦Ê€‡\^L=Hr¹„¶V«•™‚Á …óù|,ÐÄÊ¢(šÍægÏž={öìÑ£Gßÿþ÷çóùÅÅE±X$1óx6¾ÑhMÉY%´ F"‘»ª Üh4Œ¸‰AedäÕ¬Ì ‡ÃF£Aâdä|©\9x ê£(SoÍfs6›EvµÏç³Ùl Cu dðÓ¦\WƒÁàäädµZy½^T.‹‹‹ ¼Ëçó ƒçÏŸ›˜B™l*UIØ”=ŒÅb¢(ªÒÐÍçs6¥> " ©¨2½áGLÖÉÉÉ èQ”†Ëd2žÒ©„2â*ÙÛív6âT:™Lü~¡PÈårÚœCî«ÖK5h€*{H9î‡:” {:MýÊvÏãñ°õM”ûZ­¦£sÃá0Í‚Ýnç¦X©´XÖÖüŽÅbìö/Š"í˜bú.”Vêt:kqÖ‘H× åÒ»€î¿ET.—i5F#¥øÂxQŠšj„ƒëµå÷Ùc âöÊ 6nv(íXì.H†Ïr¹¼ººÂµV#Jòy%Kèö×±9é§Ãù|>¶Ø ͽÇã!Adow:wËS %:x)ÐÙáp&ž–h*efmÆ#1á.—Kåö ©ÎAp>Ÿ›ÍfÇãóùjµÚÅÅÅåååÅÅ*}PU£ÑÐ:7/—KDŒH¨è.Y–‘duqqA_ÁŠt­V‹Çã‚ °w©Ž ;w‰Dê$uì/ñ?ªôĤÁÃáðÅÅÅl6cmÛD"¡ŠÃO$ F.†ªÌÌçóz½Ž·s¥÷©(†×ëEX.•JÝ¿ÎCÜÂÑÝn¼|8N[-M&VSsÜÙkm º‹Na×y”Î?¹µÐétT]jý~_?‘ËlÔáb¾QçÑ=Ìþî…8ÝF±'V8sÆFõµíZðh4Ò·ÐoStœíá|>º3›ÍªÒ*wAБĕÏçÍfóZ§¹×ëÝ €¼Ýn×Ù†§Ó©Ïç£ #aekG²¥†ŒG¼ŒŸq•8Y–ÙC'pµ>_)3\9NU ÑYWÍfSÇDbK*•ªÕjÇÇÇÈ„¼¸¸øøã?üðÃ?üP•΃kN§“=f³™%XÁ±•Â?øq `UI¿ß×±áV«U¯×Ëår±XŒ2Ç8Ô¹ËåZ{<].—ÀzÏf3VGã¨ü=BGÈ>ב™étŠÍ›[(û éÍf³?÷s?÷³?û³ét/YЍRÿ¿©¦Su¯ù|¾T*EG‡Ã …ÈQÏ9uÉ+Çõé&t­v¢Filk·Û,g&'¨,]ìíý\t墸鰯­[¦üäd2I‰`·¬?§š'¼~sºÑQ€µFS©Ôå\µÀ˜]‹ÅëõÖëõµZ{µZav @7‹›Fp:á«p8¬JM­»&“ ëCè÷ûÛÛÛáŽÇãD"qtttttDðù|>#‘È;ï¼£ê2ŠD"ª׺4™LÖ¦BÑd©¦GnÖ‚Á ~]Dý^-‹«««V«EóX­VËår«Õº¼¼T®Ø£££ÝÝ]ÖOö¬·?ƒÈÙR©§4V*•J¥®Ïç ‡ÃØ„¸ .”C¥CñÑõx<ÑhÒ’Éd\.×T*…3r8±T‘æ°V¶ãñ8„Íjµf³Yhs$†lmme³ÙÙlf·Û²Á‹ET\Uý´v»ÚToTÞ¼‘å‹–Ë%Ê©f]âCV«Õáá!Á P¼\©‘QHÒÂq{½Þx<~uuF1ÖøPMÀS]G6“Éd"’‡tù?üp4´·Ûíb—]+½^“1UUáRY¬Ëårkk‹ncßÂcáªÒ–’¤‹E}I›ÍflªýÐZ 8q­…Ê×­Z•‡(iIBuè/{{{ZUQƒ{†SRfÜÁæ$yB ³ÐФ)O3ðn³#Žœ"ÐIœT`0xqqaÜÙ¥ ë[­V¨²ŠÄ|—Ï籜ð(Õw¶EZquooïäää~ᎎŽü~¿ß¯ÕjÝn7›ÍŽÇc€”eô&“ÉóçÏI=!u 5F‰ã‹Þ ì64øÊùºQÛßßït:§§§œRe—A/Bþ 7€`’]­Vûûû(QˆK¨,P.—+•J¡PøøãQ^…;­¢ñ~ô#ROÀ–ÒªS !ª@Åãq˜*´Y«qˆ(„sô `ë”Ëevg"œ f2C“bµZŽŽÎÏÏ»Ý.H•eC£Ñ¨ÏçÓ‰p šˆÔdA$Iúä“O iÍfóþèùÚÚÚB!.^`nô•¸òÕXoUåM/Ê IDATž;ª²*RiT±£Í.:eùÁƒŸ~úéZ“BKqÝyc±qZÖðëÛ™\.W±X¤XëXæäÜ Øs9¨‹…Š (Õ ™ì`/Ëçóë7'§ÓiiÌnþ4‘PÄP J–l”ü9´Øçó%“IÎm²½½­¬ÐjRT0RâsתÚ`0 …8å%Â^êt:‚ ‹EìðÃp=¤ºßï§’-˜H¿ßTÁÕÕÕÓ§OA /A#ý~?`‰¬âʹš^qÚ²#›Í–J¥¸ê7šb²N«%ÜÜ%Œ\.—J¥0Ñ,á)P“Fƒr‹s¹Üùù9…PY…ÅîõzýììÌf³ÕëuUÂV»Ý¾µµÅ !>¯¯¯Ãáp0DEѵìÉ&“éààž@¼(£tˆÖ:ª¿@óHïB-%(ëH$éÍd2¨ ˆDw0(c¨&볇 e!â …Òé´Ãá(‹<ˆD"———?üá¹AƒOR‰Uç¢÷,Mêën$3eÁiL‹Ay^QîLV«UB¤é– ±7²HŒÃ‡Ýn×ßþá¥íD•qû6mkk <>ȘÕ"¢œÏçívÛÐÉ u0w‘XMM¯PxœÑšH$¸º^ãñ˜Ý™Ìfs*•âJÔ@Y³ÀlQm6Ûb±Àý~ÿ¦ ÈÜÜn÷ùù9²rÙ*d·Ü™ð@‡Ã ˆðœ O;®²ºI¥REñââ'Žk’îªV«k?•ÓXÄt Ç4;àå#Ø©‘)ÖÂ_ƒ×ò–V F§Ó©V«˜}8ÇrÆ 2M° Ò+—dF=ÌfóÖÖÖt:ÇãJX%yḆS,ˆ]€Vbºív;€±`›•e *{™Îommõz=âêEs»Ý@Pʲ,Iõ‡BD%Ùª‰˜Aòè²¢ëp8, ·7@q‰Ó¡àªW €ÓéÄøommår9«ÕÚh4¾÷½ï±Éô’$¡Ä8ª“`D£Ñ|>â¡Ô”þ4nG‡Óªê;Õ(¯‘g’žáþîv»½^¯êAÇãñ/äs£‹Å¨ì/ø¥t¢×$„=†Ãa}…ÆtX¦fƒ#Ïò s[#L±7ß|3‰‚€4w2”§1=&\j/^¼¸Q}u·Û­ û¢†Ê›Ø¨U!r«ÕJ¹3ÁŽfKÁ£2 = ±jÁÜTQ¸õïP’€€ãÀq\C!H}‰ùË¿üË>ú~°ÛCÓYÄ4 †r‡HãÉ,`±S½„2w5’ !EÏ „«ê¶&Éq»Ý¬Žv;V˜!i9q’·ƒ×ëåàÞ'''ý~±Xôû}À'€é&.é,9¿ßàK<ÿý÷K¥Ò|°³³CXK$׃AÿH2ÃÒøšL¦jµ*Âp‡X&ÁF!fä‘;% Çf³Qžclpk<¿|ù²V«}òÉ''''ìÆW§Ó ^¯—Z¨ªÕn·ý~?;’“ÉÄàÁ…„MUÌð],Ø vâÆV¹5µ¨.z½žœà–­R©@€Ãáðl6Ó¯LÆfŸ=yòD_Õè¼*ÕµrxUA~¨1-IÊ%sêÝårÑ]:¨A©hb,‹¼áÆñ&Ng¬93«X±g®wµZ‰ƒ(o5‹‘n]‹™Õqèu»]¬i8è6V‚Fª>™i°S+q‘ì¯V+‚ß³wé¼]k"*/»Ý¾Ù’྅^D \¯×›J¥R©”jŽŸ**U³Ù `¬’á W«{dD´…‹õââÂår•J%Tº|óÍ7Ãá0â=¬·½\.³_ÁÊ kÖø|>€sµ†•ZBøÆo|ðÁH¾êt:ʃ ‹d‡}6›f¾×ë}öÙg?þñ¹ÍÉb±ôû}<°\.“ìY,p£»ñ=•Û9” \¶‡‰D‚Ô@  j›²ÚiµZ­-;‰£ç}ÒA1ßí!IǼ3RÇ)7½KÙàýVÖ¬QuËsçE‡Ã|8^__òÉ'JuÇÞ¥ÓCA'þfpsêv»lÿtðÃËåö…AB Uè.kS˜˜ (›¬æÚ‹l6‹¤U>·µAî–t:Dz+ó6a·t:MA,ƒ±ýH$²X,¢Ñh£Ñ€÷èè°¤D"ô¥Íf«T*ÛÛÛÈAP~Õ7B1!UÇ ƒêS¸ri÷Á`Ðáp´1eYÖaC"; mèwP$°„“Vûx<ÆÁÚO þÓØÂ¬ÓGÏáEÆíåT*5›Ír¹çºÄ!F©ªÀ„ÀŒÙl. ì™,’œrøK±XÄ»à(g… \2™#‘˜’Éd8F‚>ý2“ #í¹ŒX,vzzºµµü\½^¿ºº¢ÓI>Ÿ ¨&¬JÚ…Ž¡æ¸ív;¢Ê˜b@vH–ØÂæóù'Ožø|¾««+¨×h4ŠKHP†kŽŽSÉd2™LpÊjµ"çBµZ1‡æÄRµ(Šž¨îËåRk!«^b_® [šD6›-N7›Í»­aÆIZ>Ÿïõzªû(¾HµDµò˜}#ŸÌM15 ¨´ ÆW±ÙlN$”Ȫ3úÍh*9?t¸&Ѽ^/J¼`sƤ*oA4[YN_g+&êRÕ½`Ð3–H$œNg£Ñ N'N‡B¡|>Ç···³Ùl.—CPý{ßûÞh4²X,Gi2ØívªÛ¯Ã“‹*×:>% Œ}Úîî.vÐÍV-–îVÉ„›N§¡õˆ… œ¹¤å‘®ÉN%¢²ZßxæMiâ0J° ^º[ö(wDŸß{#¼ˆ§•ý.<ù>ÛÛÛÊ*'lªú‰D8v8lŒ }¦yd÷rv…B!¼|ùÒápüä'?)—Ë@ª¢¤z.— årY‹èH§Æ#NÆ06•ŒÆ.—+@ A¢Z­V­Vk6›v»B…|"ªûô Q"‘h·Û€INA;˜&¬çHrçóy©TÛȽ{÷”Ø~¬Òû÷ïöÙg„K%Øœ’­U'¶··€$Itž¦¼Dåì§R©X,6^¼xQ¯×¡Âá0ŠëÏçó`0øüùs¨%Ò…ɵ&!´h4ªª@Y|. ü3àf–„“óà F#Œm‡HVâ]ÄÔ¬Å(7/»T×¢ÑU?Ùf³…B!Öö7›ÍGGGµZÍív»Ýî ¨žTmãheŠñìííiM«1ØÑáÏÝ qzUY€›âápHó»Ê¿Î\åædúù§¿òϾû÷þÑo}ç;ßá”ÝmN²ÊÈ äéu•e³A8<°'ÁE+‚ÃáXr¤D{÷î™Íf§ÓÉUÑïz²Wý1|óÍ7¿ýíoÿò/ÿò|°qø8Vö/ÛÛÛZõW€€Éæ^þ̽ɒ\Éuó<Ïó”™‘3¦À"YÅA&“™d½mm´é¦VúÞÓÔÿÐ ý@›õNÚÈŒšH‘4© @U ddƘ1sôân;Ýß{ñ2Å–/h,DÆ îׯ»ß{Ï9ܰCïXòdúÙgŸqiµZ˜®Â€(ð¬“éÆãñ`0øøñãŸüä'ÏŸ?Ç€°æ„Îs¿’H$PøG„å^¯—¥ì£Ž9NnRh4ØÁ×ëõ¤â!.IIû¬[ÒÙØæ÷û×ò8«YãÌF/.÷RÊ£„–ÉdÖ’ét:IÇEÄÞêG)ŸÏ£¸fã·°ïžCG–††B!…¼7¼ ΄µÏh4 ·¶¶ÔKçüâ¿øþååÿöþßÿëÿñýàùßo-Y†ˆûìíî“<0788H¯Ëå"FN|J(ÂçZ­V›Í†ƒ$Dhìvûr¹´X,ív»X,¢^6¼y󆞜L&¹5{·S>aíììp‡M<÷6Äßò“Ÿètºz½®€ëçôd2¡ZN†XM,emœÐëõ>xðàððÐårýó?ÿ³ä© r÷c«ÕºX, „PqvúšJ¥v;8›‹bC[ÈyHž©kµš˜l¸¹¹8¡‚}ÊáEÀ üx"‘(‹…B!{½ÞjµÊ½3™ KSEÄ^¯ÇÞ¶­Vk2™„îç.wvvP8@c›Éd`ù\Ž®hDOe6›‹Å"”àµZ-ö×X,†™²Ùl‹Åo hòÒ;;;ÍfÒº³Ù, šÍf±H"¹wõ’@a† HU>aýbjS.R**nKÞ¨$×öööZB2'üçänE£E¶¥Óépä#wmÈzbÕ8et6g3œ3A­|;J@‚ßIYUX^û>hJ9Ü}pf³@KöY¡ªh4z{{+†’ÉäÞÞÔr¹V8¼Û7ß|suuÕjµ¾úê+®t„Piš?ä•„ar­ÙlŠcÈ>d'''šÅþ’ëäZ¬5ˆ|ÊÍív+wÕh4¢ à»o¾ù& ’ö+!4£Ñ(å'@YÍÎB"‘qœ˜®CÜÙõét ñ%w‘^¯*µFÊê~¿Ïêšã¨[­V%yÁS ŠaM×år¡J"‹EeEcH$FpâGÝn7 ‹þ®ßïcl­Vk$ÁæÇ!Áûý¾Á`ÈçóN§s±XƒÁX,†Á4µZ û=Åð¶.—+N÷û}سÅbI$ OÕ|LÑo°Y·T¯Ïç[«tNÃîp8¾ ½4¬wU{J°± Ai+ÚŒÜò‘\à°˜.ki¬}r>•ÔÄëÑh<ä!CecM—£`¡ôXûˆKËõPÁqÝu+QÂu:bHJRòÒl6o@F¾¶qpZW¯×ß¾}«pJ‚Úøï>|¨×ë©z½~vv|ëÛ·oÿõ_ÿµ\./—K°Â`1òÍuƒ^–•Ö½«´’×ë%^jŠ•×j5…£+ 䨬é#…nFÄb±HÞ²Ãìv»ïß¿ÿÿø^¯G¸]¡Y,É  nê///iIÃ0`3@MB½V«% ³ÙŒ*ô_2&ãt:¹¨î¾ÜýÃb±”J%ÐMˆü;c¹` ‰ä*7é:N§Ó‘ƒ³ðíÛ·ãñØd2AÓ1X`ÑhD¼Îf³5 ±z¹\™¹Ÿÿüç?ûÙÏúý~¥R!t6RªgggÓé´ÙlsÚív‹Å"[ÜA·7•:È’¡ìX,ÆMV£Ñ`ó=’Fèõzñ?Þ >¨æVP¹²â6‹£‘¶dœÍ(àv%ß3û¤˜¡ìÝp¹\’tÖ±PúV«µ¶È›üÌ]/ÄlLæ$·©qÔâÍÜG(ÙÀ]M ‹ÃN+“< ­åQ_Žz,])è&T¯×? Ž€)(|ûö-B˜ÂZ­†R „A =©ç³ÙLRøNýR÷x<“É„P„mÛ FÌŽÎ+•ŠB7©#9s.fX©T o£ù¨ŒÅžtè#®M&ºk±XªÕêb±0™LÁ`¢mxßT* M³Ùìõz‹—£ GÆívëõz1)4z½~8²â؆Ã!”^¹Àm5ttGÕjÕjµ³Òn·%‡…Øíè¨D^†ür­V ƒ•Jô-ZSà>·Ùl îøÃÏ>ûŒê³E ±dÑêñxX¢ÑC¶Ž†í¡B ’«Ë—´¥Û6›™àîn„©„$Œx_Aì[ù”«¼$‹›èrƒd•ˆ™­×ëÈ9Á«ÚívàWp]­V———Õj5ŽF#”¸ÀË$ …×T†˜±‚§¸ìSiœ$}ÃÚ9æÄ+›Í&¼¤r7ð:ÄÉF3,ÜÕ\Ãbg™¢&“Én··ÛmØ P“pÓ$xzWh$®& B!s"à ƒÁ@r)Šxj¸ ÎÔ•§¸R©`¦0Œp4¤i»6ð˜Íf=ÏücS€QÓO`ÑA‡÷òòJ1u"¹È§Â¢t \ñ#;–Äç. dI°ª¤ÖjµËËË/^|õÕWý~ÿ;q®Õj ÞAÚ»–~H¦aöööPÔª<›’3"ŽR³Ù”ÜœäôsåëÃÙ\:²ÐM/9Kk·ÛȶH~‹0Ý 6£tK¡œS·ôîåË—âYTÅâËÒé4 ÄV4Ê9ñD"!gä¾›ÉdÒé´Hu•L&Y’Ye0,€fóù±þV«u{{kµZáªHÀ ÅL&³AÅ*]’4  dá;;;‹EÍI6‹)(ü²Ú3 >ñFr:qxY|®rc“̨ÁÍårívànäÅŠD"w’|&p†¤}ËaÅÊ”V“IƒÜOV˜Äd2©Óé¶AA ¦¶Ùl`µ¨~¿ßétðÝÕj8‘äomm•J¥Åb‰@ ÐëõF(n©Tj6›~¿>N \Lf/çh DìG$î“J¥°¾À6‚W*4W‰µŒÇã³Ù¬×ëá¤ëú´ Ià êœ3Ñ|ĉo–úr:Çãñ|ÿûßßßßÇhɨë1°ö9ït§Æ=P²‚EÎcР3N«ôi nA2›áFFÙfTåœÖÞ|Ù•Ï:$u¸Ó®Êò|>¯×ë.—K%EÐÍÍ Mr{5¦Oñ¨dú¹DL T<¢%¥R‰å:à Õãñ¨¼îäóy¤@¹ne³Ù?ýÓ?½ººª×ë’•î`WÒ|GhµZ*—Óx<^{kŽÅb÷×ÖÄ!š;\ãJ:ŸÏu:ÝÚó)'] Möð¡’Æ—vhMà[&“I²ú\lv»Ýh4*ßärlý~kk ÷­Éd"7ìØ·pMgC”ìŽ>ÊçótÞF¥R©T*¡”îw¿ûÝû÷ï …Âd29??w8ûûûÝnsyeƒA¨ÙÚl¶ÝÝ]îB‰$ðü{{{di8Ñ#“Ê-|ð¤5›ÍL&sW„ Øá<Û\.×fwšápX*•X?gB‹—å‡m·Ûw­Kdm¬Ûí‚)Ñf³ åp…ÛíOôNf³™¨9 ÊÑ΢ø“‹sŠÂʨ1f­Zô¹\NežÂëõù|>IýLØŒÊWCÎXéæt%\²¼ûÄôP´ššß’Ü„Q€¹3†î…ãñ8Nã É^ØÓM¯×Cߣ*—Ëjz( :Îf³Fc{{„Í‹ÅâúúZ’®ð=ô0™Lʱ ˆ¼ö\J*ñ¢Ñ(‰ÔѺÝn¹ªk†ÉæKfM(a ü¬×ë¥ì‹$·ÛØ)F˜Hj¾ñrÓ4™Lž={&>÷ððÐd2½zõJ<{a´b;¸7 O–Édp¶…Š•Óé„;Öét¸uqŠJÐïÀ‚J®X,Öj5‡Ã±··‹Åôzýéé) /ñˆ·ÛmDŠ T+÷î´]­VF#‰˜L& JAøDØp¬â½½½T*õòåKZw@Àív# 'w"V¯¢ÂÚŒšFêÉ(î‹4܆¬¥Á`ÔlSðøÈápD£ÑF£aµZ§ÓiµZýꫯŠfQ•6M…p¡PH¥Ô§¤ƒ…¦3¬WóårI˜nú!rwôQ6›E8"ܸq;ßï'”צÓi»ÝfÃ6x~Œíb±ÐëõþçJíªá®}¨æd£Ú³Ù 8-Û¨‚EDbK~K²e³Y9J\ŒFãŸýÙŸýøÇ?ÞÝÝåú f’É$ýä@¡°ú™Rý¡ôCýÙƒ!{×Ùßß—ËÁà#ÉO¿øâ‹¿ú«¿úë¿þë¿ù›¿ùþ÷¿‹j&÷÷÷i4¨ô†•laÄj±—üå_þ¥xôËd2Ož<Á¥Êl6ïîîN›J¥X*hAŒöèÑ£gÏž=~üX#ù„ÉqXKnö倢œ †h>b-QsO™mL%a?óùüçŸîñx$ç7—ËAÄäñãÇk!Ø Ü@ €]P§Ó=}úôéÓ§â()çÞïÓîãgÄŽ~®­áïÍê¿’ÉdœN'ëgX±¶¶ùÉ“'÷.tù]ýç]›rþÕh4²FÈ Ð?þíßþ-ÂÝpsú۲٬®À…ªÕ„-‹%Ž;µÝÝÝçÏŸ#ÃQk‹qÎËò½|ww÷N4É3¬¸$Ä‘ ¨â#ÔëÿÅ_üÅ/ùË¿ÿû¿ÿÅ/~ñ£ýˆM®(MÞaºD"®Õj9A¯ Z$9>>¦CÅ­T§Ó¡X ²f¦+¿ß¯@Æ»W~.J¼»»K¯l0âñøñññññ1ý#Ê+¸ÂGbÍîÖÖ–d1ý-SÈ`0PÉb±8Nì‘ÿsœ†‚â„f³ö¹¿¿o2™¶¶¶è/é#…µ¯Óévwwÿ8=¿ç'sâÞ e®jž›Ùà§÷ööÔïj¬9Q»CħjXv»ýÓfAå ºN• 5¤Ñ€µU+±XŒW½k6›årÙãñˆÜ ÊÊ•Êyû ø&u'UÜ'w $£×ëø.—Ëf³± zS—Ë…šì\.‚—Ëåuh j>*wø|¾f³‰AÔ…•x x”MKÿˆ ÆÍÍ ÑN§n·›9ºÝn§Ó™L&Áó6u: ê@éóù¨j\.€6ìv;©? °sssƒ€>ª×넵NÄ%ô‚œt)’(ñxÜï÷G"(t°é±ÛíO¦0P’"¹l a2™`ö‹•nïîîbw¿¾¾¾\ä»kÀ-´ÛmÂæ‡B¡Åb1›ÍPpÈfé#î!v»$°(˜‚*X+A«òŠCˆ~¶m\èO1L˜S8fYám6›Çã vôz=× Ô•lÀÀp§žsÄhw+ˆP\¯×+ Âåän‘p–ÃZÊ} MR·6è$+ôz=ñØC%«j ¯A§é«««ïÖ®ÕjÕKÐÒö»8Ÿ’>©ÕjÅ„*1@šÀ<­VkµZú:g¯@–ÐétšÍf¡P( ý~ÿÝ»wçççÿò/ÿò»ßýîË/¿ìv»>Ÿ*JïÞ½ƒmøý~+ÚÀà>Øàj0 ‡Ãn9á½Ô ¡&Ûív«Õr¹\8Eú|¾ƒƒ«ÕúôéSƒÁÐjµ`Õšµ„´U–cŽÅb6› ô"Óé”ÝÏìv;^а–½^OeNââââÝ»wÝn—5'²™N§c6›÷öö¸8ßïçРkGÉårqël¶Dû«\&޲òOH^Õ4—Ë … ƒ(«]©Tä´ÕAÁ.ù‘Åb! oÍG9f›Í&yo¨ÊC“oZ­v­P'+…*‡´-—Ë,Äp8”„T²Ätú\ër Ãç¢¬ÛØ·F9.©×ë£ÑˆdR•¨ð«Õª~DHîVŒ8¤n0à0ÈÍA:r×ÀôW–‹‹‹»‚påð€Ÿ¤™¤¬E‚*çh4j6›¡¼°X,à©×Ú4™Óù|­Ìÿ÷'i«Õ‚+¬"‰L&“z½Îž !EA£ÑÈ8Ìfs,ÿ0›ÍThÍf³f³IÒpƒ!‘HàDœN§¿øâ ÜÀ@ÔD‹Ÿ}#¿ßÏe"¡¦C¯†[#=‡Ãqss#wóðù|Ø#u: Gáž<ùqÑœÈf,‹Ïç+‹ 5Ò|;Fc½^OÔA6ŸfŸ» ‡ÃËËK:’³ßu¹\ RhÜÛq[¦¨g-'¬ÌÍ ™fr2¨ûÀ¡¨)ù[µZ­Óéà8Eg¸Z­&—Ô \ÌC986 ž‘ú IDAT›ÍªÕ*9ŸÏG'5LÐ^¯f¦>Û'©î-ò”Ëeb*Û_7ÈÛ}²Í‰S6”lдe™+¹îÚI¤-PY,–`0¨>¶&ʤj†v‡À3Ù&“I±XDð$ Ý3ó©Â€Ê··d2ù©2Òjí4ÍñññóçÏÿäOþä‹/¾€zÈ©îrX®p›Óõõõéé)Ý*¸Cæåööv¹\bBI¢¥R‰•5Z,Õj%Ž777ÀQ©,ƒÍ°0ÆV«Ü÷€kq»Ý6›@¸„éf¿‚2™L"‘ úIŸÏ4˜Á`Èf³Ÿ}öÙ矞H$P×$iin·Ûår±3‘\t’ýwªâšk38D‹E¶i>ÖŒU*±'ƒÁ@óÈ¡˜¹ù£Æ\ó‡ðÒÅbáóùØ0A°97Íþ§>‘+@åÖr«Õb›ü àØ®è·€è’[ ƒÁ€:k±ùÊÚÙÐGæ~ÄÐkcb777˜”››C«9 ‹Ã²É¥'¹³ÊñT 5©Pƒ¸3‚÷I<CïOX‚°¯ëŒ×ëÕjµìGj¨Q f³¹^¯+ó'“ÉZ­ö]ýT¶P(äõz¯®®TÒ:H6³Ù ‰FH (¯Õj}þùç`.@ 7ŽÏ˜kP#šÏÎ>IdÁ0ð[Z­vggG¯×KF±hL&v6›Íl6ËQÞk™žƒÍC%Þbkk«^¯ƒO¬ÛíƒAb‚€ïâââúú:™L¾}ûÖëõ¢ºZ¯×³Ðux.T±w:JbáèMzK 肼ÝÉÒ k‰˜DÿR©T¥R™Íf7776›îX±X å¼dù@A„B!"_.—8ÔÓUOa=BS§ÓÑßpì¢ìw9DÒNÜ,K:!úû÷ïåÖ‘èæ"‘‹’!;áNÈSÞÉÔQ4ϽäIâ‰LŠ%(ŠÉ‚°°ç){éið­ø9Dq²fwäݸÅb19t8»Éd¢þeC¡Çg ÷§|á¾¥×ë£Ñ(0@tBˆê5Pll»÷öö¨ú`>Ÿ#=N÷ööp®ŸL&~¿¼p™L†±CwöäLœc={/;eZ­vwwÎ!¸Ñhq÷ápˆ{ÊdXÓ¦8‰@š¼F"~,î5 è‹y Édr4A' ~…B!ø|¾P(ÄÆ iF¼^¯Ñh¾ZÒõzôÂÉ[a”ÖÊ1‹- BAuwwüè¹\Ž;ÇãñL&ƒfYR=iµZ•J¥ÛíÞ©Š‡d¸•ÿL%òUOfgŸ=а%\}çg¸Pä3‰ˆ§aEcÉÙOI–ò8b'9.å¯är9P_ÒáIHËMŠ_§ò•%ãë%3¸›,pûØT±HvwwY«x¢B%Í4ý¥Â·ÔoQô͸à€™¿N‚§’‡ÜDHÅ+ðjµêt:Ü+pCQÕt³†ònÚÈÉÙÉm¢r“Ëå²Ùl³Ùdß…“U¾¿Ë} \‹ ¯V«Fã›o¾a}wb‡‹=œ°ÐyüûáááÎÎÎññq·ÛÅ=LÙõüà?XË>™LÄã-I¿Ã±®V+¬LüÛy”ä=}út_«Õ6 §Ó‰$M>Ÿïv»[[[Ø\¹±e{F |ztttzz: êõz³Ùl6›ì©“É$€šˆîOäsqÃy#‘Èáá!ËØkµZ9‘-ÉØC*•ŠD"§§§_|ñ…Õj=;;c§okk äl¿ûÝEÁ‚«†.ŽÐ\Vs? ~ÿÓ«F£9<<$• ŸÏ‡Lé³ ²ùùóç‘H$‘HzŒöí·ßîïïƒØq•d2 Z p"¼{÷ÃÎÍ>í[r¹\»»»ívûÅ‹&“‰ÝÒÀB{~~¾YÌ_⥚Öjµ$;@†ÃZM³àµppÐn·F#ÝZ€õÆüÊ-·ŸÿüçÇÇÇÿõ_ÿ…ÇÒØ¢‡8Žx<ÎÞÝ[­ÖjµBþuµZ¹\.¬üÐ'øãããr¹¬|ø â5ÑCúý~îTMçcØ "½pw<`=9 ”r÷ÔT!ÜysÒétÈgr‹ì!HTq¥Ká¶ p#ÚncÑhôúúšÅ‚p÷ Tj¨¤é•ü!ˆWb(YUSÚŸ8=4¼ûjµÂTéõz0CËé¬m éÔ|¬NäȲ,‹ÂÁÇf³­V+ÉýŒ¾‹Å*•ЏGbåÜ xnØ¡Ëår`ÍŠÅbbÄŽf<w»ÝP(d2™J¥R¥Ragm4 1¤£×ëÃá0¼<‰äÎf3Döìv{µZ­V«ÜeÚ‹Å‚›¡k½FJÕ®Ùn·“Í@V%aDät:%¹¦P­0N½^¯ÉdFWWW§§§××× ˜¨N[”eO§SP³ [†çã" ñõf³év»¡'‹¡«×ëôÊØZh×Dì.‰¼xñÂf³={öÌãñL§Ó—/_^^^¢j#C&íétJ"8¿ãÞÃ¥XqHhL&“ׯ_#ŠË~ÒRåInÚÍe2'¤ÀÅ.ö¼Å¡÷¸µ»‹áÍ\ùr¹¼‰Ö>{¤ ƒPÛZ,ÈétâÖÈ-Ò$ÕP¶ç›  ×ïñxr¹vAî#îTm³ÙP¬a6›‡Ëå*—Ëäîë%Ã@ŇrØVe}ÜÝpNn·Ûd2¡0—+Éÿþ=È‹5£ð’«P(Äþ‹ÃáÐëõ'''v»½×ëÅb±l6+IKŠ9“¼&›L&¡Óé$ëdÞ¿/ú ‚˜`=sg ìOЫeË‚•àT»)ÙC±¬@ ,9‘). ¨Æ‰Ä’»¼¼”»ù©‘*€L(:===99¹½½È¤Öj5v³ÔétÊà-«Õº\.É^OOO± ƒÙl~ÿþýþçbcà€\AÑÉÉÉt:- ¢¥QF#öH*ÇçÂÖÖV·Û¥Ù‡$W×õõ5ÜM¹\ ‡£R©¼~ýz0\__¿~ýß"«6›Í°–P(”H$p4 E&“a+`‹Åû÷ﱡ‡C9,T™£¼Ûçó ‡ÃP(”J¥vww‰`=vÇS.—Ãáp*•aÿïÿûL&ƒnÓ#Y f4Q:åõz …ÂË—/g³·|¼^/ªsål†=yh¾ã(k¢ F…BÁl6£2 ®-Ñöûý™LæñãLJ‡‡³Ùl8â[ ª2Ǿ¢Ñh^¼xqzzZ¯×/..XsBSàuc²ÉdO™(v¿Ïàpx5Z ívûõë×j²YÑhT§Óùýþ`0(ÚÌ|>'áJ,Åb±¶²¸X¾7Uœ@ô59ÜùòS°nmF—Ë%VI-—K®Åçóy<›Íöüùóíím³Ù\*•úý>P6’sIó\.¼b¯n‡C§Ó‰ç¬+‡ÃAB;ÜæÇõd6› |k6›y½^|ŠûE‡Þ!®‡8RAËÑl6£Úèè æt:qîfßÒŸôÀ@  |¡Ämo­5¸ÝnÜŠØ;p‘4Å,¶v[rOr‡©ét*Y>g4ƒÁ Ó鄨#—*“ûdgÙ`Qý~uçV«+Öv» zSå,M1 ó»\.M&‚‡˜}:c@B¡Ø(p£B¸ÒçóA€‘ÕéÖӇɥßb?Âå éÕgÏž%‰Ç{½^ˆ£W«Õ7oÞT«UÜ :N$ùÙÏ~æñxp…ÂÖÕï÷ƒÁ ÞZÒe¬V+\.QxI¾ŒýKö#î`¡<âÛÝ@VFò˜Ïªóq ÁØ< CtAÔ=0zHÞŒ¹]ôÿŸ}öY2™t¹\NžC1ŸÏa38:c4jµ˜vÅÊ1ˆk>ò´b™ˆV­ÓéîSÌåp8 ƒäjå¬Z!ºƒ³'JÏý½Ïç[[…³¸V«U¨åoNJ;^¹\N$Åbq¹\B$—Ý?K¥’B"šøhÉA©V«©T 7\‹Å"§•© û‚L[˜+&$ I…»¢²(œ£$|€"P˜Àú8ÙF'Â5K–YÏN‘_0¯¨ÙŠÄÖh4 ÛÃz"ŽýÓ$´¯æóy¥RQ–ä@õzýíí­ÛíFPe2™\^^Ò‰GÁfÄJ 0ýà‹F£ñêê ô0v»}0°îrµZ­-£ ‹ˆæcÍîõõ5j»³Ù,„á5E¦ÍfÓëõÝn—ÅÏf³R© qÈ` ÇÙÛ†Ûí^­VpI±X bN`üB½þ2 ¢^´P( ”7µZíööö‡@ú·µµ…}«P(Ôëõb±ˆ¤ Ö£Óét»ÝÍf“E·Z-ô JÍwòŒz½ž¾.YdÁª`›L&Tu*<¸.[‚ÙJ†ýW‡qÞW¿ üÚßß÷x<£ÑHNéXèîÒÕ- nÀ/.g‡÷TýæìjeÆ•Ûb±%ªq‰,•J`ú@Y‚÷@åug±XD¬•tX/ƒXñ 岜µM¹Ò®\ô½^ïÝ»wâ©òÞkß_î¨ÕívG£Q4Íf³¬£ï÷û×Ñ·Ý].—kqs¸”Hr·ŒF£n·«Pû®ðTM5 ”|ÉK®%‰QF±¼ rkk‹S]§\EÜt:F QD¶–Ý~€…C™Ïç Ö³Oö#`c³Ù¬ÕjE{>Ÿ×j5Ÿ»¶„k±XPØÝét8sBhŽìÃtãÒÐï÷[­(1&8&·Z-¶ Ø#Ä‹úý>[¬<›Ípã‹×ëÅŽ8 …ÂÉÉ "/^¼8;;›L&:ÿ …0˜&“ PÖZ­û$÷gëzXÏ® V —UPå>êõzV«••F£‘eãålIž úõdT))No’…µ›%½‰»¼¼|ûöí›7oÔxliŸ0ÇÆaºÙ& oW)ÇŒ´ßï«Ä]±ßbSGøOa—˵½½ˆ×ý_\´ é°€5Éd2 N§S,­x­¸*ØhƒÁÉÉ â \lײ¸‚ÐLe!ƒÏçãB…*¿?"žÝn·‚¸N(ÒétwÅóJjP" 4ŸÏ!Bzו#N–ÛíÎd2[[[{{{¸à²§*ˆ‹Ñ Óa3™ «®„:`hÚÊéÁ BŒÕ~.ûF šŠAFŽ»ñ˵l6‹-v2™Øíöx‡|F§Ó©V«gggÐ&F´Š F“Ëå:k«bp†™UƆÿP(„Z ƒÁL&‰'‚d‹Q /'ÇÌ])ØQ]g¬;Y›ùÇ~¿ßh4䏸Ćª­V …63¯×k³ÙÔ;9aeq9ÀQ¯½¡`í®>\üV4…>j¿ß÷ûýív{kkk{{ûúúš+JTÎíIŠä©ªÖ›L&£Ñh{{{8 …ï®üXËÁ`Ðh4..."¸½½%8­nmXfgg‡½l¡²Vý5Ÿƒ1* ˆI>Òápˆú]‡#T*…½‡ä¿î*Ä|±`F‹Å‚ê2 ª×çóI¦ N§×ë­V«>Ÿ®ÿ믿f þq¹\nooDnˆœ]2™¤òS—ËE±;å&.EЗH–JƒH(10u®•†_žÍfؘQ×@ 1ä¹F£‘Ñhôù|¬ö¶ä‚'—²+${ˆF£z½žÞw2™Øl6§Ó 0,z…Ë\í¸¬€+}2™üö·¿½ºº ¨ªêv»¨ÔçfŸÛ}%}¾ÅîLè9Ê‹ñ@ŒÞw¹\¶ÛmÑ]¨̪l(£Ñ˜ÍfÕL®ú†‚=õgD¼·#‘ø9`2ËÀ¥Ö¼^¯¸ QR“åõŸÏçœOÓ¨s±Áqm°3Ñ=› “\›Ûí>>>öz½óùüêêJå¹_n4îVJ~ssó]ÓóÖo þ4»Ý*98­šC‡e“K™*LŒ€4™LºÝnÚçºÝ.h"Q¦Ün·³Ù,{ŽF*UÙ8؈ŠÁ`ØÛÛSņt©x'c£©$­«‘BõºÝn¯×ËÆÙ‡ôû}ŸÏ‹Å^½zµZ­%{Îõ·Ã–‰ñE8ô ›£lÜt¢YƒAIã•i²Æã1”ß©S>°™=ë û(vñ|>Oá;5ql2 ùAÚÄ„s½Â·†Ã!âi½^,5èÆîîn:…BÕj¨^§Ó¹»»‰D@¶ …œN燖Ë%îív?¡‘Âçœ*•Šœš0kNÜûJ.XÎøYÍåû‚ ÿú Ýtî¹ ¬D"áñx()ÎÅ1(`a¿Å9úpÑTãr»Ýz½ž¶.ѧ©i’ÔrCò•ÅyÄtƒ9 v»Ý¯¿þ:‹.kkkK<ÀÉå_ÄÍéÿü»¿û;`K?¹¶žBÛÞÞÞŒ!Ÿu¨ÜÕ02©’mggGäÖTù¾<ðù|ÏŸ?¨â®ôù|Ož<áÊè©ÿ¨ØÞÞæJ-%)­Vëöö¶Ü­ÉF£l1îÐcµÙlOŸ>ýâ‹/~úÓŸ²êÀF£QNŸ”ÂßœH.·)Ã*O´^¯O§ÓOžþÆæt:I.]ôCf³Y,Àq8Ož¬º«ùÈ™„º^î#Š: lO«Õ>yòäÑ£G>Ÿï‡?üá“'Ož?NIjïîîâ® Kgm`}Ø€}R¹¶^êOîIb±˜8ÄÚf·Ûs¹œN§K&“"ß¹N§K§Ó¢‰~ÚWÞ¬êA²ì£|>¥5÷®­Pè¹ÁT*åñx`3÷ù9·ÛýË_þRVlpÞ)¾yó…C÷¹-Ý G&‡÷VhŒ¥¸S øð჆AM*ÿÛ½H$"r=ˆ­Ùl~ï{ßC½)ðÕ·ÛÛ[6m³Ùè4l3èp¸0‹j²Ûírx@z&§å~ WUœX ÉHd¬@¹"qvv–Íf///ŽŽ‰D³Ù¤êÁ|>ÿí·ßr/#ˆ[$»Áæ 6#öù|6›­\.W*.Þ‹¥Â2PKI)‡Ý8‹‹ ¬ò™rÿNÁèù|ŽÃòh4‚„Ýp8ôz½t3h4œðO8‡˜äíÅŸ“TrÐ]HÆápr nqböM&“8Yq\µZ­êt:,]G#k6›±¨&“ (£Pé‡W¦t5&“ Ô|ápØétB–_d½‰ÇãÇ···äŽQA‡páv¹\\‘!lê!øw¿ßOC t6ÒÎÈ?ÑØZ,˜t¹\ÆŠÀÎÙ‘ÛÛÛÁ``µZ?ÿüóããc‹Å.Ýåri±XÚí6ŠìÛíö£GpEÀØ"s^.—!rm6›‹E8ŽÇãv»}8²ŠPbjðSÕ&àÕ8'Ô×}޼Äßj4N§Â&ÇUYX4õJŸiöñª8.+Ì#¾%&)9Ÿ¦26CXuƒÁ éBÏ.ÕÙlvtt„?£·`'‹z¨æAz‚¤õû÷ïtÁc¨÷V>¬¬ኒÒV  GeäÑív#Í+¾¼dÞˆMÀÐæ7›ÍDÁ´p8l0J¥Œ­VKQŸËµårÉIëú|¾ápÈþ#ÍØ 37€?I¨Z}[,•Je2™K{“¦vuuʼn³iò&Às`Uv:Á•Ëeä?ˆÄA2Oàr¹Úí¶ÇãÁÕ­ÑhƒÁjµJ¡ô°h\’@^àñx÷›L&år9 ‚€Žâ*Á`Ðï÷Ãe˜Íf¸[9ryy9-‹Á`@ŒQ£Ñ”J%­Vk·Ûñ»ð\’ Ýn£p'‰Ôëutw#Éù%ƒ§±ÕétÁ`z¬‘H\‹äd§Ói¹\¶Ùl D ±;ƒÁ€•;Æá±x£ù|ŽK3æôK`¨CÂ_2›Ì,»ŠF#¸€[krÑh” EH 5m*W“¹áÞ°"¹uçv»Ù½{šXG@Œ«’ °hÖA!eƒ—‚;d…þ½\.?þÐ|Rv­¡PÛ',MÒEœ½zõ fÌÖý*x'Ôò(SÓJDS$ÏæðGàZU`‚;¡Äb1qÏ_Rò&F«€,a¥r ü7¤d¥;¼ñYl±XD"‘r¹Ìš5·ø9#S)2Ë.ürTÓhÕ4ǃ£ÐÚâTMEoŠk’| ¼±Xt8±XL9@*\óù<¢vd8Ö\\\`ÒáR—Ë¥ÃáX­V©Têìì UjãñÇ,p¡zOÆ´X,À»ó¬V«Eaw¯×óx<~¿‘U€Þ!â,Y×Cl¬a øL§ÓIî,‹±Ä¯t&`kè¢üËå2 f2™\.W¯×ÏÏÏ3™ŒÅb1™Lù|^§ÓµZ­N§óë_ÿ$žZ­÷$ÈmX,–ÓÓS³ <ñðçâ/M&ÓÙÙÊ«ÄÕçt:].¦,#Lkvé)!-›Í08¿»‡èK+ƒÏçs8N§Ójµ^^^²‡räZ|>Âr„Ÿ¢ëç\3®¿ƒÁ@bCádï÷ûQ>JÃX¯×Eæh­Vëóùz½Þ`0àö-jì¯Ótàÿ8Nœ®ØuM‹Ýêb±ØÍÍ‚ÓX,wÝG4’ \<ÁG$‰µa=:É©µ˜Y6 lµZ•anØ™ö÷÷ƒÁ n9™L;ß‘‰O&À䔸¨®Çãï»Óx™Â |ÿûß§Ü/*—Df• Øly1”RƒÁ ‚8€¢H(@Læó9Ü.ÑÖ¡²6‘H`½!í„‹‰ªúµÕjµÛíz½ŽïRÆf³A[„¨¢Ñ(beÁ`¢*.— d}>ŸO¯×çóyµÅb1«ÕZ.—Óé4, í6x“¹S4ít:ð‡ƒ %\.—™L†,èl0ijGr&“yðàÇã1™L§J&“`ʨ×ëÝn·X,„Ôh4V«€½@ƒÇcœÙ ê€P9»ü A,¡Ýn‡ƒf»´Z­ÀQÝ^5FÈzFH²É| 0“É$“Ép2(lÛ¶  IDATàW½ÝÊQƒAÏx<†F , ™B LwƒUl2™ ¤R– 9Ÿ `çŠ9â1x¡÷ïßW*Ä{Õ(·ïŠ]&T¤œGW 5¼ ëqN ;“æ#êP=ºû™Ü^•H$Ö:k*aRØÌÜnw>ŸO&“±X I¿b±x{{ËÍ:OïÃÃÄI^*#àDàá]‘¶ìLN§“Mƒ±NÁétBí”eŒeëAŸ‘\*¡P(—Ë)ãaý¹\.¨%¬¦ bÏf³Û`Î)áÕ‹Ò€t:’9ÈÂâoÓÀÿGl6[4ÃøGDP:XÙC„Ïç«×ëä}ðàA4 ¡PÈëõ^^^¢4Ûáééér¹„ˆµäZ˜L&‡cggžWóÒ§ ÊÝe_þ.L§Ómooã`l&“I&“6›íÿñ}>_«ÕÚÛÛK&“°´/¿üÒåržž"s p(‰Ãáðz½™Lf6›!2 ÙØ­Á`•p1¶N'—Ëa[‚Zˆ Ù3¨Y¬&r®ì¦ ¯ ée?%±cêüÚ¤½Ûíöù|ÕQi+K–F"Ÿ³Ù zžw]ÅÀt‹þZdG g qg’ÛlZß옋óy­ÝÝ]ÉÐÜt:Íd2j’>÷Úœ”¿ŸÉdD§¯p•q¹\€ñJú&¸ÂÕjõðáÃ`0ˆø*¹¹TÙÙl†ý)ÿæ7¿Á+vr­ñÚÈú2VN.^ÁÎô§Å ÊÝ0Ün·xËDçáPr¹q"¨éÞxÏd2z½~8‹ÅP(‹Åt:ÝóçωBs€`û8&.™L¢ˆÌ \À™Â9–lcj;5Ž’Ê1þŒÃS“*Øþþ¾²ó¢ÞAÔ&²$0öàà€-(ÅQ€ÍÌI>΄ƒÍrˆ~9~B»Ý~xx(n÷$æ@!{½ÞÁÁ$>WY„—[û€‘qG–ûnN­Vk{{[¥à:¤t$¥Wi ñQ­V£®ã[kÎNÿjµr8"DX’ìà> .Búl’`³†jx…QRÓH˜þE2þ¹bÐÜ/r¸}£Ñxxxˆ·Æ’@™ìüãB¡@J£’ƒìr¹Í#®t£Ñˆb0Ç …`îˆ)±Çp Ëår¿ÛíæóùW¯^aßBe&œ5(2 ƒÅbq8à¸ÛÙÙÁY݆ÜKa€à8ë2>|ˆ35HW! ìp8vww?~|ppàt:ûý~©TBB¬wƒÁ€È#”'är¹>ÿüs³Ù\.—Ùùb×0Ì ›1þ2µ@ÚÝÜÜL&³Ùüûßÿ¾P( HÏét"€ùí·ß~ñÅ_~ùåÇ···m6[³Ù|óæÍÖÖB”GGGÛÛÛ&“éúúºÛí6›M Ùi›AàÚçó‹Åd2©ÕjC%éêAŸ‚:ö³±2í¬‘£fíæ´v%"‡Š¿yøð¡×ësNõz]¸ g³Y¶|Àét¢¦2 ðÝÝÝÅ}¡ÝN§£&0›Íä..PÜFò‰,&Ëív‹¤Ô8•Ïç±ÓÃu ‚I”–kÜ~&jj6VÂeg”ûùÿ«q»‚Õj-•Jggg_ýõÅŧ)®²$oíà’&‹š¼gs»Ýr •êÛÎÎN«Õ' PPIXt6›åÎûlCóåÆÞâ“Éäd21  GÐL.´B"¹Øiòù<)kHJ¢ ‡¡PÈåra=ÀÒØS j|Ëå²ÑhüüóÏËår&“Aer0­VkÝ3 ÀÌŠ&m±Xp¤Ã,JÁ[ªÕjÁ^o³Ù¬Vk"‘@1÷·ß~ ¥æ~¿jˆ¼ÈI®p˜DŒ®×ëÛ½ÿ>‰Æn·k³ÙHt•,Íãñ ˜ÓéDˆ&NCZ7 ¦R©ËËËd2 ŒnÆÃáðôôt<Çb±x<þ£ýèèè( Úl¶ù|þÍ7ß@µ‹Ž)§§§•Jçñẋ‘2gmZx/¨ ²Ûª2ó>"¹¢ ­òåŽö€`ßsÁ&“IƒÁ"àR©ÄýQŸn÷lwÞœpÙ@WÂh4béþqö*£Ñ¸X,ˆ P«ÕPÔív³Y• õµf³¾…ï@Àf³4r³®ðÝÇè=§ÙQÈl³jÒçómmm±+‡ÃINK=„ð+lÀh4‚™ÂjµV«U%Ö:ÂWF"Tlj~0Ý Ë„’da΀4 …Bðéív;™Löûýf³ è.H³Ù¬Éd{èv»Ýá>Â-YHnck·Ûíà x±X,‹n·;NÇcŸÏ×ív©°Øb± ¾ £‡Å J*—ËJœ ™ä,ÒÔ‰Db:B$PóQàµV«ÑP€ÇÏjµv»Ýd2i6›G£Q¥RA‚ 0Äiq¡£ÄÞÞÞÎÎN:FIa­VFµZ­R©@Ï´Z­ÐM ØÌjµòz½ÐõÁîp8şӿÜ84˜ø@œrT@ —Ú¬aÊØ³80¶˜¸óósÑ;qXI…ƺ~egR(äâX ¨”¹«?‘Ûõu:Óé” 8(Jp  »SDŽ"Âjì€CÛ±šÜÜÀ©Ù™Àaƒc]©T톥Gít32Y±{’ §„ÉdBÛm>Ÿ¾H#ï÷û!£G±g…R©‰(|„n#¯ ‹ÓŒƒªä°[­V‡ÃqWùg±AÏ;“IÑ¢½Él]ʲÅ)d1…zØOq4;™ õ¯<·¶¶àA)„¥©8eÇR©à¢¨ÌƵ&‘H˜ÍæV«…Ø Ìâñ¸N§Ã- ± dÝpwDRG^¯"‘È`0¸ºº2 ¡Pèææ V«µX,Îçó““G˜Íf²@v é÷û´)•Jz½~>Ÿ_^^ÒV%@N8þÿ´{tˆ¾¾¾¦‰&“X­VH†hµZDMÈ> iKÇvPKZyƒP‡FìÏîvà|áß'P¦¶V*ÂIuàPð ü÷„\.‡P Å—¢FqPQ½Xþ···[[[H ‰¿%çîÔoNÊ~fmK¥R£ÑHýf@¿…²L…™Z.—Ñh”=²¨÷²Ô£ksN:6·öæÔh4Ñn·q~”äT¾½½½?äÎÎŽÑhÜÝÝeO`‰•™ð÷8nlÐçç<&"<ܸÃñ)?´qÍf3)åÐG,BáxrO56:B·4“ɨü­íím.œúnžN§¬xŒÜÈîS…ÃNP>ª!ì: ív»€ÚÄãñp8œËåðƒ<~üØårY­Ö|>ŸÍf#‘ˆ×ë…‡êõz¨ ƒ———(cgNT¹\ŽnaKŽÅb ði4HK»Z­*• ŠM...l6[<·Ùl¹\îøø˜Mæ‘Í  rooV#£Éçó$Ëäñx"‘ÐÍÐÀ·«DûœÏçïß¿‡Qáf‰+K$]újµBm:Ýlnnnnnnp¹ÄðâBssƒâŠ|ôz½b±èt:ãñø£Gôz=Ôx‘ð ÛáãÇ)Ä„C@<Uë]ON¤zµ\.Õ„×0J`Êàî¡Ph4¡FQá«ÕêÝ»wˆEÇb±H$r||œÍf%ƒ‡­V OÃìÃBÑPÝ 6h6›s¹œÇãA<™L’VÖüŒBs:ê“ìou»]¡BH–Užï^¯üŠ’÷N¹”nNýÊé×_­þZj·ÛQÀ*‚7ív{<G¨'N³ô”¤jª¦sÀú±°*`Hå„e×’(¿M* ”o⨪”<Ú çt=88Ðét0â~¿¯p©:::úT·xê9Nr2š6›-N³)S1ûŠ)ÞÚÚ"ø=¼<ü—u»Ýà9·F£9>>þöÛo©±X eŠ³ÙŒèM&ÔüÄb±~¿ï÷ûÛíöÓ§O§Ó)HH÷ööŽaT×××ÈlƒAÄÓV«U"‘@ :®ŒÀÆg2DPu:ÝÞÞÞùù9jðpæM§ÓWWWÕjÄÕn·Ûf³A ܉@ÈCï,µZ­V«Qàˆ³ZäËåÒëõ>~ü;k©TBu;ð[ãñ8”Ëe +ã âyÖðH„TóQ 2+ qÚß߯Õjñxüââ"‹„Ãa‹År}}½X,¬V+X”0懇‡(1ØÛÛkµZPÂ…N.6ÑápøÿðÅbdðlž+…•Õ4ö[F£ñ®R@Z­öøøx8&“Iÿ"h¬æÌRà~¿¿½½ýìÙ³|>ŸH$,‹&f¿Õj‰Pk• „‹-P}*/^w œªé©—±[ìp8ÜÙÙ‘›£Ñæe9 &-q.·5jJÉ ^j6›u:­åðWø‘+ê·(·IéMìïïÃyaŽÉDDÐßr¹ÜÞÞV çb£Žð&ô¾lè/) Î~êóùË&.TÉÐêx<®T*4÷wB«iÀ¯B¾tíšÙh‘k„"àårùƒü@¬(AL 0L AâPe¬ ľÛ~¿˜Ãþþþ»wïˆìl6»¸¸@Òèððcà 8t÷ûý>Ìf³b±ø«_ýªV«áœ‰DPÕ&YùP,N”©‘H¤Õj¥R©›››~¿¯×뱘Ia õ™ûûûNgoo…ÝÅb±T*ƒAPêÁÒf³ +Y;$*Òxòä =ª¹p?³Ùlf³™–ˆ'ÈB'gÕÃØYñ:nkkkooo{{;›Íîîî.—K“ÉôöíÛ'Ož M]¿V«Fè¡€ :”€8ÿòòÒápÛÄ®V 0ûd3«Õ ÍÕjutt öµÑ$ëJ[òœ/N6’prɆy„Kñz½Ïž=;::ÚÛÛ …Bívûßþíß”·tŽ˜êÚíÄétnoo×ëu±: “Kû®@7Ã]>|>âäÈ­j>"mÙ#æöö6ŽÎÜGì·`¬w‚3!å3q[ÂÉ ”ÿrrE°IÑkM&:­n²9áH;=zäp8Ø.²´ê!u±XL Û)AÉ F@j­ÀgÐ>Çú;ÉÓ–ÊÌät:Åö#ŠWÒGz‚E ò7rUø¥„KRˆ,G£QX®0‰"œ“¥ÆG œ¹—¬uL&“ñxy8BAGB(áZ­VV •`§Êbx7bÆCQ8Р=PãÍ›7ËåÒårA'âææ¦\.7›Ív» ‘ûV«@«Ûí~ýú52Õ½^*GËåêõ4Œ$¦×ét^f{NµétºP(g9>Êçó777çççdiv»= [3ƒCׯÛÛÛ/¿üòåË—dif³9 ‹Eš}ð‹;NRÂu»ÝÓécKKö@M "T«Õ‰D@RŽåóâÅ‹`0¨ÓéàÅ®®®ŒFãüãþð‡ÉdÒãñx½^¶¸ZYÕjõòòÒn·Ÿœœpæd±XR©T¯×=—Ãá Ùlöôôôùóç¤J2-t^+j47Ö¨T߈=ŒòµZ-‰ ¢EárñÍGà¶ÍfdB kƒN§ËçórÙ ³Ù,$éf8áoÍGÖŽ’/bÜ—ûŒ— ©w¹h†îjÕ]®©×A&ÃX¿9õû}¯×;N¯®®`‚§á7¤uZV1VÒSÓT± •‰DB~xc°7«ð»V qKN\'âï¬Z+ =?4=P«ÕÏ!·E²}-ÚNÉå”pYZ9¶„AM’ñ ñß%ñtÝn—­…øŽ„ápx:Æb1@;)ô ¥µ3ÒétÈœÀÙ7ïß¿GM h]¦Óép8|ûöm¥Ri6›­V«ÑhètºÁ`©òóósúnÇãñ~¿?qì .×I¡ävÜÅbAÉI?S•‡d€Ífã4—ï” PÈŒ¨—–çtŽ’ì0K” "¨•J%Ö_F€U«Õ*]N9Hšìœ¤XM$¤q¸vyyù]æq =eSF]@B¸O€µÿ®ùXñI÷6ÖÁg…D½h(5îõz\’I§Ó!k Ö8ɉ§"fÈRˆS«Õî‰ê]{åbS¸°xˆÓw|1¨—„hNý~ÿ믿F…+}Hó …ׯ_“rüp8<;;£-6‰`cÀ’v:‡#›Í"¤ïñxÐy«ÕŠ#ž¤>©dÑ×ë5™LÛÀ@éõzL1+kùáÃd¤¸cçÑï÷ƒÐµõzÝjµ"ÚÆ*A_ÔëõÞ½{w{{p '»²‚º„ˆÀ¯ƒ:ˆb±Øï÷M&È¥R jggg,Úm³ÙŒXB,“3§@ Àºî<v l¬3mˆß‚Á“¸åŒð® ‡ET»‡ùòË/±‚XÄÎ>âÌår"X¸Ê`u:ËåÂ}}ã^áø"÷i¹\¾kaÌiã2 G­¦ÁÒÄ‘§ú®Á0Ìf³ø-ƒšÔ¥8:X$r¬b’uÝétr;0áæØ¸êh4‚YCxTò·>RNŠª$z ¨ «ôª×ë©RQ9)º\.K¥ ×ét§ÀÚE†˜óB¡ ð-€Þ}ÚZ}ÂÉdÂAÜ ëdïµôÜ«Ê> ¸HÌ/n!Óé,G`F€Â4¼dß\.W&“t“V« ¶„r¹\¶¿Õjù|>ÔLÓíšå¸‘H^dƒa'®¯¯ãñ¸ä‘Õçè ]›‚Á ¼[2™´Z­8ʇ;•-ÒQ{BÙ|Œ­V+§R©V«U,¡?Ûh4Âáðx<~Ë`0@Êïôô°wœjS©x4 ´o,ÃÏA±D¥.A°E·o½^ÿÕ¯~%ÇC*éL81Y#ÏÆR„„ÍÇz½^³ÙDQ\ƒ4û@¿¹\.ÎÏ =s}} ’eKïJß°¶Á»†B!•9n/Ô0šË›Å¥Ä5.)6Õ]ª_¿¥SörµÂT´’k-©TŠEbB^ˆ"éìÎdµZYY)½^/Y€Èu# I ’nÜ [#ô41ü8¡BLa#ÄÊ_,^¯—½m˜L&Žmœ‚Ûí~ðàA*•¢û>}Dç}2ÄO[çrwx.³Ù‰DÔoùDIñz½8.ÑGœ)Ýë9„oÕjµÉd’Ëåàµùd‘/..êõz©T Ø‹Å2NS©êë …j¦1 sS\,¡i„¬V+îC‘HįìYr0Øívœš¡(à{(’Lm–J%”ç±6_©T†Ãa»ÝÆ·PIb1ãèv»)EæÚ©‹Å¼|±X¬R©¼~ýºV« …W¯^½xñâìììòò²ÛíF"‘H$Òn·Ýnw¡P¸¸¸899¹¼¼,‹ñxüúúÚh4â&„&<5¥aX-iÌB4åvNj4µŸžžþ÷ÿ÷«W¯ÔûÜÅb!y¾ä CsÑ\E?C9BEå.%ÜG"2ŒvèÌx<¾ëùøÐÖ ï­ýúf_äŠh”CˆÔCÉoI¿‚ƒëD.oJbîeTêh°ÇLRLàRg€U²¿Åi‘¡ €(~Yw€¢gÉÊf³ÄQ§´¨Ýnw8ÞßßÏår°Q0ôh> `K¢QÃÊ¡êÄRÔ×ÞÞÞÚívdÝEü#ò(ùÖétê7'PÉ1 µÊý0ƒâó%‡—ŠGQÎçõz‘)!áZú-Íša-ñLÔÔ9Nœy»Ýîùù9ª½¡R«Õ ЬÑhâñxµZ•jê´Z-Ò„;;;(QC)‘(¬ ?=ƒŒW“t:]¯×Fc<À­`f"jI­Ÿ$ý@ý$mCœ¡HS @e¯×Óëõ ·E±e±-Aê‰Ö¾ÁÓ»ÞuŽQˆ;QçG%̢ͧQ­ä iDÚ¹»-”§~·fgã&øÅb°måa§yôûý‹eãÛªBãÊÍU±’_‰u¥Òñ©Ü™¸)œÍfX4R(@âzÅ•ŸÍfqʓ놜V¦¨Ñ©~¦A‚ñæp8œN§Á”c0€EV™C p'ö½$…†ét ÷M7kJB ªP®CšñGý«¸¼éßá›`ˆð†’  Ej4s¹¸û$]‰Ýn'VzšÑhÌf³‹ÅBœýÁ`®¯¯O³Ûí½^Ïét¾{÷îðð”¯çççÍf3™L"Op~~”O«ÕÊår‘Hܲ À{q}ËçóÕj·E|¨O#Úù|Þn·@µZ­T*¤ *U*4eM—ý-V—¬š¶œ%Ífs"‘¨Õj ™?ØÙÙ™Llô` IDAT&»»»:ÕžðbNçææDŸ•Jåää;""Š$ …HƒZ,vÖ!4 ¦ŸJ¥Âw²D åŸ\c3…ðæn4ÁåîJÑ;‰|KPZ!wLú¹Ø¹Eyß  ]Ê-—Ëáð$ÚŒØÃû45jæœ×¨ÏZqbÜ*›ªÍ ÆAíË€= @AUrà¼^o0ŒÅb?ýéOÍfs¡PPèáÞÞžxÑÞÙÙAYÑ: ¤-•Æöz=»ÝŽÌ¢L…Ba¹\Öj5ŸÏ¦Zê¿^¯ßßß¿+¨Ö`0ìîî ƒÁÀŠr«k±X Êï£æÉl”†;(áßU*AyJ¥ôz=[7ˆGÃ+§× …De|k2™p³¯ÕjwvvNOO1×`ˆðù|z½þÇ¥R ¨{{{>Ÿ¯T*-—Ë“É<)jš‘Êöz½@Æ˜Íæããc¨ÁR”aiàõ+…ðP·æt:Á~ÄQø‹ÇUQºT΂¦±#Â9„¨^¯£ˆ)OÈo÷z½½½=€mA6ÿþýûñxÜétxðàè!{\…ìP4%yˆ"búP0 | ŽMÎJQéŽ2ƒm&¨†mæ®úßræ¤ÐغÝnˆ±éõ~wô»ú‚íkdän7Cñ$z§m•…HJR¬6 ‡Ç<²Ø¸Í7'•Ðb…¦’‚³¬f¨ÜÀA>`fF‰D1‡@7\½ƒ^¯Ïf³777’!f@êÕCÚ®V+»Ý˜Q¡Pø§ú§r¹Œ€Éíí-é»Ð«Ù™ˆÎf³ÄŽŠo ‡C»ÝÎ*HŠ$ùèèH2‡y||ÌJs"S"yO_‹gÜÛÛ# ƒv»m³Ùôz=»9±…¶Ü¤à[’ƒl2™ ¸z½%ÿ5ˆÞu:"Äááa±X<::BÝŠ×ëµX,Ãáékì.&“éææ5€"}öÙg¯^½"é/ÜPŠDB PAI"d˜4. ðþbŽÇãívüãñ˜ÝX\¹F Î’H$le2¼r8éÆa=ˆ>ƒl7æ››£ÑøàÁƒßÿþ÷V«5£.±ÑhìïœD"0º¢Nu4]‡Ê J¥B+€®(wH6CH[öš…Ød 8c¢¡g ÁSeyRNÀ[ô¤···TmÌÆZ—  «V«TríÐ9ÕMÚk9ÁuÉFˆ~ÊbJ.ú-…U¬üFŸäJ ³ÏNjì¢TÁEE¯š]4hçççÅbq±X°’—›µ@ J´étÊÂÜ4‚:­Ë‹N§a³øÑÍÍÅb¬J£ÑàÄ­Q¡¡)6ÎÑÀ‰Si0àd¹gµzÍf3S8'6›M"hç&(‹Wg4Ë®Ón·G"‘Åbqvv9v§Ó‰‚TSü~§Ó` æ# w£Ñ¸¹¹yüø1èjHX =ìõzù|&HÓâS»Ýmr—Ë&.4Ø04 pck·ÛÁºF'ñ@ Àþ;òØÎG£‘Ùl†d0Q5‚îŒÝnÇè5 `–QŽˆpÔâF#\}hêµZ-bƒgggƒÁ»`–k4v»]§ÓÍçs€pc±Øl6ÃË’Í`#´Z­q³’„ûä0Ý þNq–t&djžìõz!Ji4ÇãñÖÖç0Äõ ¹p’p8`š—skÅ2ϼá®\MŸ¶% ä¿Õ,0,³¦Ë5”tI¦ÜÀÆHöŠ-ÿclNkqs‹…•²'—ÇY•œ: ®õz4¥Ø …æóy­VãLp-ÒM%L¶(çUTÁ_®M–ŽF#:¤+ÃÜlZNKwmqý(¿ïfHôÐf³qҥؙ¨4M0 ƒ’1É~¿q||\«ÕÜA ¸´ H­ ~Ñh4ôz½ÑhÄ]3§Bû_¿ßO¥Rß|ó êY ¡çv»<%Õ”Ày”Ñh’P\S@¸àt:A=,w¥jºô ‘‡$+8!ñ7ëõz<‡n·¼Ôv»˜ñGdºÄbF µ+›±ðx¯T*Pœ}ûCd,0®Ñhx<×ÞÞÞf³YÄ pÕÐétáp8ŸÏ§ÓiŸÏ7ŸÏ/..P´ M¼D"Q.—///¡(BBVlÛb±@iµXh© J‰Ý.[;t8s¢Î Ô bkçü/˜&0 §§§‘!;x{{{yy º¾¢Ñ(’ lÿÐ]dSøˆ‰€è¯P(X­ÖT*EWçëëëP(t¹2Ún· :ì+X ‡™…D2ø~¨“wBaÓ{Qï ÂMN󇊑ì߈§:€í×ÉçóÁ`ðÝ»w~¿ÿ׿þ5”ûÝz½ ï¹?±r¬¢[ÀA\«ÕÖëuq”`È­ªqûʆ!ç¸XÂr¤i‹ÂìËIÎKôG!|φŽ#¶9ÉK௮®¸¡Oët€£¡”ÈH¢…°@ưI7 TË=9™L–ËeT**‹‹g¹@z§K'LJý±Û¡ËfõI©Q„zk»Ý‡Ã»»»&“ aI”™y½ÞÅbA÷<ê<ë©©…Åâ boö#.kiììþáïh(z½ÞÙÙjÄ=O¡PˆÇãÈ( BóQ®µ^¯wuufX@ʰM6›M¶~ggÇb±œœœ öe±ÁfªÕ*xópq:ívûææû¼ƒ(]Šúoˆêj>ªâ¢².B®Âb±¸\.½^ÿæÍòQöÈãñd2™>ˆ‡Pè‰Ð5õ¢ô£ëÁ·¦Ó)ç‚“Éä7ß|Cs„‹i¡B\‘Mt!‡:u5Æìr¹\.æšå_` •…BAÁU¡zÐãñàíD¸Ò]Ûb±àÖ¾¤.´4çó9¤uÙ8!‚QŸþy,K&“ìá†^ÔŽŠ«ãÓ snå¸Ê)Œa*•")d”µZ­f³‹ÅHÁNr+7NÄ{ß»>P§ù.Ûp84™LÄEÖ/¾’dF23’Ù#K‹Ü‹%Ô|”QGѽš®"YÚjµî…Sˆ #™ÌQÈ5Ì!™"â.àD!'ÔÄÆð&“ jŸ Ãt:ω¢2;gIΈB~‹ €4%ç…^jÆôe85ûýþ^¯‡ÅÓl6½^/j FC°š¿xÓétŠp–^¯¿¾¾>99AßÍÍ (ìvûÞÞ^2™Ìår:®ÕjÍf³\.çõz±£°G Ù|>ŸÑht¹\©T Kzgg¯ Š 8wÔ¤ÓéR©T©T@»*t”ál}H${{{v»½Ùl‚ïÎét>|øP¯×“sDíج)UIzTF:FzP ø n6ÏÏÏñjV«uggG#È͉iQ@ ÄC$ Q¤çv»H,Q±–É ¥ÉksN‘HDÔë£íAEüôì6/Dâøøxkk‹»)‡ÿ/soòÛZ–­ù±ïûž)’¢úæÆm"#2#òUÞC<©*jdçÈþ<,À€ú {àI ʀ퉂²*²Ò/2ãfÄí¥«¾¡ØH$E‰’H‰”?ß…çQº‘>ƒÀ ‘çpŸÝ¬½öZëû¾^µZ=;;ƒÆ0‘HÜÞÞ...j¨5¬"’‰±ø©.Ô^ô‘@ÕöS¥+<ýCÉÆçlÿš™vvv¦RÛ<øŒûç¨ÖÓLk‰8›TÚ¨ahR5æ{¬ú} uˆ+_0„³{ ÏËœV3n·»X,šç¥ q’¨£à='9ȧíõz“´V…Ó Åãñäóyý¦"¨µáp‹Å¬V+Zy.—ëÕ«WƒÁ “É(Su?ô÷á\ŸÙgµZççç\òÉårÛêêêéééþþ~, ‡Ã¤‹P!ét:[[[Õjõàà€êÁápˆ~R0|òäI:¦äZêýý}„©ðyã¬oa*•‚ò¹ÙlÂ^½,¸cªXÿ2 ¼‡7,ŽnФRþGä ŸÏCe„ß…«Œ…L'¨cUKFx8ƒA¼@ª$ §“šŠÅb0'É7ûý¾Ãဥßﳄ …WúÈ…ê ãÎ ¤ÊîÍ$‹"N¶»»;=XU>’ae=JJxvvöüüü—¿üå‹/¢Ñèòòò“'O¨ô[__ï÷û.—«T*µÛmœ˜U[­Ööö6‚~ùKéט ó ŒÞ·Ö› °%š …z½þ—È*k?U=¡ 2¿þJÉÅR‡B!)ß44è+ÆÍéR©dÈB„çêêJ…&Œƒš\¢j*øGÙ5²Iz%\ ÈQ=çš0©NÜííí$eø^œè5³mmM¢”Ô¬Ã6 ’Éäþþ>ú°ÐDêW\MWz¡dñcάV«*`89IšØ/IÕ^\\ Y‰D^½zEÁ¨~Ž/ý~¿Ùl"¨quu…tG£Ñèõë×­VËjµ¾{÷®Ýns›ˆ]ÊÇóùüåååêêêôôôôôôáááÅÅR‡ÍfÓßï÷Ûív2™L¥Rûûû¹\NN!b}ªIƒÁÚÚZ·Û…Ú#üøñü#»#´#½^Ïëõžœœ\^^ªˆ]™NÔ;©å‚¢¼ Hëîî®ÝnóŠ817„Ýp"—™Öëõh¡fô Aœ\Uò´µµµ‹‹‹µµ5ŠÙVMœ¶¥¥%*DDq{\T ™L’Æà·ô`UUÓVýQ±3Ýnwyyykkë‹/¾õÈßþö·D¤7€`½|ù²ßïÛíö“““·oßjì¯áŽûˆC‰Æé¯_üâKÕ«'†Ú, ’U¨Cb“>œ0;¨"m§§§I¯L’d ‡ÃýלžW7'ë¿ù_}X︧Wÿ÷¿ÿ÷ÿþA­‰D"Bzö^¹\NÌ“oŸ &ÝG¢[˜c0U@@_Î ãñøäeŸßBõQ“¨P?ⱕJåÇò—J¥r|||oÉ ¹ÍÛÛ[»Ý®)Z…!wkk+›ÍòÍÞ–L&YÕ6›íææfuuõõë×NŒL&³¹¹ ¿ÎÊÊÊ»wï‰ôwÓÓÓ³³³~¿Ÿ*v¤)%Äç÷ûÿøÇ?V*•^¯‡&£Ï¹ Íå·oß²3©™Ç3;; U£B¡ðäÉ“_ÿú×···333ÜåóùjµÝB‡„B¡|>ÿîÝ;ù-‹ÅòôéÓ·oߢ2N/9ŽýýýJ¥²··×ï÷ñg·¶¶œN'(ÈÛÛÛ¹¹9ž3)g°ÙlÝnW¯†B!t7dPÌgà³gÏ®¯¯5º‚ôÿôë“O§µµ5ø1«‰„Aÿ“\ 1¸cª:Iì‰Ñ\[[»wRZ¥Aíhº·T*Á¤µ¾¾îp8ŠÅâæææ£Õ•, ‹6¼VVVÞ¿¯ÙKÊår³Ù¼—U zÝÐŒS[­VïmÆ£çŒ\¿úÕ¯þê¿úoÿ¯ÿçc¯ÛÞ÷Ýÿù¿ü[íÉI/¼¨ÉªÈ)AM>Â&šÈ¿êÁùŸÝ§NKu†ËåB𔈖ËåªÕj(®êwÇ ÑvúÞ+w{ïU*•&Œø=èÒ£.Ä«‚^ÖÐ„Ž‚=½ä%šå`fûý¾×ë…,\¾–¯ªZ­šàÕ0Ê>Ÿïìì,CC777‡h2I¦v»Mí5¬¤$A«¼~ýz4×å#FbØ:p¨eÎÌÍÍ5›Íh4 –³ßïW«UŽé/^¼øî»ï,Ÿˆæ‰D¡PÒ`³Ùfgg!ci]”µZ:Äp¡d$4$‚Ë¡PèÛo¿ýùÏþå—_~øRŒ‹‹ 8MØÕ`Þáp˜ÉdPO†‹o0¨êÉTÝÝÝŸŸ›×þ€š:??G¶QôãE›=R:j4O®i;33£fLõ˜îŸêšžž¾¾¾^]]=>>Õ«*n[,–F£Ü-*Æ‹¡*á’ÈäS=œVý-à6> òôÞK »úLÍ0ÔÏD«—™ìÚápZr‘»ÕðƒÜ;g:F÷‡õH/kú‚Êtp'“›\HŒ#0ÖKCÝ *;®·ÐX,¦‡îº\®T*ëŒæWÀÆ3·<µÙlôðèIVƒÔ=¨Vâ^¹[õBÎNó"ã’ȼš´ðqXZHJ¥’ºöÀp8D9)‘HH-ŸÚ·üœÏçK&“ƒÁ_yVHWÑ䆾^QU™Â0îFmä£P(twwÇv˜L&Ãá°Ûí†_ ­lA½^o·ÛT‹ÐÙÛÛ£b¾Óé š‹Å(r•l–äí …B(b³‘ùÿüùóÝÝÝD"Ñn·qíóùª:Ž|>ãâv»ÕY#Kq¦jg˜]÷&³eÇŸŸW9ôT[Ä1„ ö qlœ%<ÐétBw©_€ÐÈÜ:¹Ýî eÎüô›Jâ¥Å”ÏÃÌý¸ Ôºzä2¡ÖƒV«U]0ø@ŽÕÙÀ™”±×ˆqÈ®f#çEŸš{Db‡ùÄGÑhT]ü¾ä“\™LFx''‰¬« üÉO·ÔÅ ‡Ãt:ˆ&dÓs»ÝÖt1gP] ÈøâÜÅb±ÍÍÍçÏŸ#W177Gõ*&â >Éô@Ƀ=<‹É"¿½½íõzv»>jfff|>ßíí-ÒÌLÝT*…ü¼œ³9!©œËå ê̤˦`åýú5N7)‡››0­VKîgggív+9’É$h*ÖÄgw:™L‰ñh4z{{K‚ ^‡Ã¡¡îÕ˜$0³ð¨ŠY—ч:òz½ñx|4ƒAóùiù¤„ ¡ÎCU_ÅbD"Ç£Ék.õHÇLÓ@§07 U0‚Ñ„‹ô"@ljÍ55£ÏÐë·ÁYÛi‰ä¢Ò°^¯'pÚq&Wh‡ ¡»²Nš=W¬ßïc«Çõ¹ð0Ä›‹ÅpÑ0,÷ƒpùh,Ö÷ ¹"šÐ„Å-:à.6¾L§ÓÑléú°€ÛíFÞUU-¾ÕjÅãñq * ;™ÉU(ôI~þ’Édô”H¾kwwmŽIHcï-L888Ѐp O1Q4 `Y/Bj³ÙF¿ß'’Ëœ‘O/..ÜIº¨P(ÌÍÍÃ=;;CIHï'ªÿ‹)å¼h¼²PY T¦§§Ù€¥­V«½^ÏívcNNN‚Á`¿ßßÝÝå”˃ú[µZÓŒÀæ`Ÿšš:::ª×ëoÞ¼A–c´Ävˆº ‡CÎRLé~¿¯"õ°ÓÃÃC‚ò°¸c¹9ŽF£‘ËåØP/..þæoþ†à³pßAß%ο›‘€™X½^¯X,–ËeèXVRâLŽA…@ÉÄImyfVf àÙIÔT‡Ã!“ðq;còX¢áL“¸¢¦ È1“€T{÷åÞt»¦Ç¥Óô«9f|I1æóyÕЙ¯}uÃ0„î~Î%ø\Âà㾪ón·ÛUaåD"AxÙ„Á¦?èÁs,KNw@)Çð TªEý*·´xâˆLÂz@¥Á7½ÔÓçŸl²Ùìþþþ8·å@=İt‹Ýn'È« Ú¨UCÃáP½kU 2ã>â¼¥axDòNίÙl–"ÝöÏþY¥R‘ü‡¤ƽ@H}½X,ÎÏÏ»Ýn˜â:ÎÑÑÑööö`0xòä ‹çíÛ·HÄÆb1²’‰Dã·^*•š™™±("¹#E"»ÝÎÙ…úrÈJ-ŒF£ÝÝ]ªï‘-..:޳³3QO·TpÇÑ¡š±P(@2Ûl6m6Ûîî.Y:Ùƒëõ:ûn©T¢È;•JE"¨Ö1 õzhA¿qííí½|ù/L†’¦¦¦ô u·ÛÍ„q¹\‘HDcôõ²ÅŒ¾Þ)<::šœæ'¼PÜ#ƒ¾‰f³1ÉÁÌÌÌÄãñX,Æ]N§“lB.—£LÛÉÉÉÑÑ‘à‡H´JG6¨š5Èã‡ÃḽPƒÜ’»T˜ètë÷BM÷^"\k¨«'W­VH[€úRµZ B†q[€6¬§?ƒkdR¥ÓA>ÚP·Û‡€˜„&¯¯¯¡e¼÷P"ñn C€'û“ÈPª¨4}VPÿGøŒ½oÙíöR©4®¼Âét’QÿX©TÒé´F©OcòdÇwµÆT‡˜â`ó5‡DG¯¯¯§§§Ù~677ÉNÏakDú)zÆétZ$’¥Oäð$Ó@3áqADè¥s^?Ni4£š ¾ð§½ÆIZ«=½°²4RÒBz‘Oj2¯®® …‚†E\›ŽåívC™®ba)m•U/ žG[ fšìŒ”É6 ·ª]•OÕ‰1n-ÿTÚ²M¨‡9ùiù"®Á`ðœkUƒo%÷3®£Uèk>Ÿ¿»»¬®6”9ýhAÉ~¿?;;Ûl6a¡žÜ®Û)Ú ”´ÛíOž<|’õFÝ*¬ßfôÐ]r~† Uý ‰ôÃ$¿f¦‹E5Q ggg%\Q?Ž|4Ž«âúú<¦ÍÁÁÁË—/)1gÙ‹E¶&ñxœ<¨ÉX,V­V©Â µZ-—Ë---µÛíh4º±±bíÜ…/Ź$w»]ŠðKJ¥Ò‡noo³§êŒ¨=´+"6H¶ Tæh4ZYY!ž ÆSz€-ðèèH?Žù|þäädff†ˆ“iZ–Pb¯×Ûjµòù|¯×ãtˆí”ØH ?OJ™vŠ´¼¼ÌQÉíT*E©ñ³gÏÔ .sFVºÊ“&3‡Ye®Ÿ?Ée²FÆY'ÕÓ±†òÓÜH˜T4 kÑÏ£-ç}ÕöœY­ÖR©[ƒ‰æH-Öé¡´2†–1 Ü¥¥%•.Ž“Ñ„#øh¹[ýµ¸¸H ³9Ê2^?ûÙÏðˆÕ[z½^¿ß Úq:„†<³ËËˬÿ@ ¢b;çDrQÂýó… ÄûðûýñxœÙ¶ººº³³ …&ÜœØ]Td$cª÷Gt6›UIxsšµª‘¡T-.áCÏvÂìÎû¢Fž¶:ýd˜žž®T*æžʹ¿ýíoÿÃøœ÷ÑÒ^^^v:ÄînkŽéøì½^#K.—«×ëàpIÔÓ¥½^ŠîÓÓÓÅÅE@¬Dç Ì´²²‚V¡ËåÚÚÚÐôÉɉ,r¯×{vv†ò .°ÕjEtª×ëÁ£zyyùí·ß€&ð §R©áp8??ŸËåvwwqÎô T IDATD&faa¡Ýn×j5Ì=\œB„jág?ûɹ„3å7ß|“Ïç}>_³Ù ”<ØüîînqqQ X¤@Þééi¨ ¨_¸¸¸h4ƒÁ@rKš»Ôð/¿ÎGÇÙl¶………F£FE©yr6Ï]÷Fì5Öiii‰ò3Ë<3Y,Q¢|>ït:5;æ‡XV«kÎ$TŸcQ¿8 SSSV«õÞ¤žÄ$–D¨´ÛíÏž=s»ÝûûûšÍO§UÁ"è/ŸÏšç34ª˜qÃÍÉòoþ×_ÿêßþÿÝÿð?ÿ«õ¯>2­­­=®‰«««Ÿó»{Z>‘x>ú9n·ª1¢@°ªË¤Ñ_”y'o¡JÒü“_¡P¨\.KVý-rÔŸ?”ÏŸ?w‹(J&0‚8úæ›o1ÏÌÌD"‘ÅÅů¿þÚ¤.—ëùóçÏŸ?/ ¹\îùóç_}õÕ‹/PH"Ó£qŸ>}ªv»T|ñÅòe›Íær¹¦§§áÊÓ´\bµ|ª&/—Ë ‹ñœþÅ¿ø†ár§Óùõ×_kša·Ûççç¿üòK·ÛýâÅ nŒÅbÅb±X,>þ<Z­VŸÏ÷í·ßrËÔÔT6›•\[[óz½+++T6çr9ž)Ô_}õU±Xä·¨OY]]e„B!2nºtÂy˜ÉdÐÐ’â M›ˆèŸoVO²¸ —¡,ºÏ¹4scjjêùóçÁ`pyyùÞ‡8M®R©”H$&´Ÿ¡PhvvöÏÝŸè¥Éèk™šo2ä/bg …iQÍÄPE}ß_ýêWÿû¯ø¯ÿÇÿí¿üïÿ§oþ‹ÿ¦qÒú\ú" œöÞ­X§¥H÷A{¸Ë‹Å9B÷ÉÉÃðÐÀúwž “!GU1ÖÐ1DÀ^DT®®®–––4Š¢÷î—p± ¨ÔP öçFfŽ{õà8¿ß¯öƒP9nD²Ù,n2ã¨ÞõÅ_¨žøÅÅgÁ`ÀoqìH¥Rà €Ïd2ÑèïºÝ. \§Ó¹³³Cæ =5øsrrr~~2ÒØR©„Ž$rÂÝ…O£ÑXXX ¹b8”•J…–·Ûíf³ ýòò2 ?«„‹E´äÕÑ'2yrr‚4-æóós`mëë눩/--¡T(‚Á ýlµZ].ÚpæÂ ïóùvvvŠÅ"‘v¯×»¹¹™H$B¡P<·ÙlâJ½ÀÖ´ÛíÝÝݳ³3ä¬ôô6úÃ4ý ¤innîââB¥·Ûí|>ÿçëYÆ‹äªX`xðô;¤í㮹¹9SÁ$¤­Þ¦©Öiؾ*¤á6Ü ôqš…¬·½Tl¾*Æ­·œ™L&ŸÏ>¥@™jî1A*ÊjjjÊãñ` T#£?9ÙÆíφžrUšá·¯RIe˜êWÿHvÿÊg–ºÆ_>==¥7ùÈjµ¦ÓiÍ]2§ùhòkyyyÂã‘ÉEå´‰‡.Ù]£‡U²p¾¦¯À±Z­ÔMµÛm©ßòi•j.C¡ÐÒÒ’ú[Á`Px…Èܰ!“É@gÇ]ÒÃúÌ4»ÝžÉd„¡•*!F£ìS?XúËï÷CÌ*fëîînaa–ƒA»Ý¾¸¸855555…Já›7oÞ¼y£‰Òœíîîòœóóó>°Ù;ˆˆä›?~L¥Rì Œ#3mgg‡Z M¸Ãåríì쀘á¬IÿôŸþÓý¯ÿu,#AÕ"èe´Ûíííí©©©B¡€’²Çã:}aaazzºV«åóùÕÕÕùùùµµµP(´±±‘N§Å@ÀéI:VV®V«˜¶ÕÕÕüÿñ_þå_ÎÏÏë×¾Á£&l±Xö÷÷³Ù¬Óéüðá¸fõ.u¦©½FÁ=nÕІ…pv»8¶Ïçv­ÿÎéé)ý p‡ž+ݤ…>|&¬Yƒh–Z>érÉGœ2Í_Jýß½½=Ù ôõÏšAìõzjñj0´Ùlš»ôü2ÄæG@ÄÉT‹áñxX_КЌóós ðêÄP[(÷û%ãšbxH§ê_Py™psB‡Qذq’#šô *²¢¹øèîî èt:5mÐèËMxPû|4dÆãÕ@  _$Fcœ™~ýÜ;ÛNOO%žÀJ/ÏäQ[[[[[[×××lu"åÀGãæÌÖÖ–æ™ét:ŸÏ§Óé‹‹‹íímÉè’òa¡âF€r“±€ÛjµRQ}wwG´×ëå·šÍæææ&…yjDQ¢ÛâïsJV§–T3g¶¶¶ƒZÈ .LŒ Á±Å¬‹•'þ†è{2™$,¹¶¶Ž^¯±Åââ"ª¹¹¹ùùy^‡ˆ™ÃáØÙÙaá€|ü'ÿäŸ,..ƒÁD"‘N§···©ZÆ 0gö÷÷eÃz¨ú”Ýn7NkBš‘H1=ÎßÜøˆ8¹×ëM§Óår9NÛívÃró ï2Óôé¨Z­V*•J¥Ò8± iŒjß±Bš¨†‰€ 3 æ{ΚÌêT*Å]WWWjÀàààÀ¼üUí ‘Y‘™f¾9éW1E=Œí‹‘ËåLb­Ò ½‘ÔŸ7à|¹KÙœXøûûû···[[[,PŒš$>ŠjgL†c7'*ˆô'á¬þ…Š[ÃÉÑívõGÚG‡€YøëA8jš5Ô É¸Xs"Ôoív¹¶ÛÛ[C°ÅñññÎÎν¿Y€>üuttÏÓ$oZ­VwvvdÞûý~u}‡Ã\.çr¹ÔÝËäÕd ØívÍÁTæŒÆ¸“ÿ___WXxc¬ƒ´´¹üµpÍf“š…Z­‹Å`m %£N~üØh4NOOAÝÝݽÿþòò[h0£_ýõÂÂB$ÕÂårQÞY(Êår4-‹¡P=S( ïÝ<Ünw>Ÿ…B2Äv»&½{÷N%2¶ÛíÌO¥©P(x½^ ” '§uJG"JXëõ:Àmt‘ÉeŽr…f %{“ýI÷î÷ûš5pZÍĈÅbұࣉñÃïh4¢yn·Ûðl7n¦ PoFÊèAFÄ!‰MQ–‰&ÀÃßAô›4ãââBsîÔo‡¢@¨^NG`Ô€Ž‰„¸>z@7èòoNºî: ÷i1’¡üÿÛE‚D©3ÁçŠë‘ÉdÌ÷‚Ìår û ¿ϼËå"ë.£(ë„‚>ˆAº[Ï‹h~©šjû)Ï¥©š™­Gü £|hzzš “ù®v{{ ŒÊ2Ë'ê<¦»ß™q:µZ @¥lذUQg€:Õ½Ýn—È8 պǜœœ”J¥|>_(4]”ÍfìÑc d©Ž*ƒ2¹ÃÃÃüñòò²Ùl’‚Rƒ‡ð•µZ-¶Ÿ«««üñßý»ÇÙÐY(r¹\°ÃáÔ‹Å©©©D"\étÚçó%‰••§ÓyrrR­V!ª¨Õj ìîúõU,\ÎÖ333„þ†ÃáßýÝßÑ~bÑ„•ùé÷ûQ!l¾fs’]AÕt»Ý?nnnJº¢Åq°ý /ôÒ4žÄÑÑD®333c§á^õz,‘¸VìL¬úééi0°±X¬\.W*•ååå¹¹9‘·èôB”ÅQ½™çÚÈ]Ÿ®X,¦1 dè7¤_`Îhþ˜H$T·àææF=B¨¥ó6›MS=„šš™ hXQ*•...(B½7¡w/ûPýš8•°¦1ý…Bá3‘L“oNø)HùEQé„$OLY5âD­„°…²È½^¯ZT­Bà¬4ìdæöPCÁð`ô5ÈA€‡'“ɨ~ï v²Hu”///¹Kæ .ý"_ZZZXXðz½n·»Óé$“I&=ú€T¸E#a~uuU©TNOOI.ªƒrwwK,ŒGPgI’67d2©™iù|>‘HÈ’ÃHQÅÛétH¿dŸŸŸ‡ê[mŒºQ?|óæ ÄÇív§ÆkøFŸ>}úäÉÌÓ`0ØÚÚz÷î¡¶b±˜L&Óét8†ªÓé í2 Ôn±|b³´@ì½ßïSBZº =8T>§L5¹ÏaUÊZ 3=²R*ÜÛÐŽËÚ7ûk®L&Ã/ªŒF£Ôð‘&ðp{{ £ ü.!G!´Û ”[ÆZæ6a4ÍÏÏñŹ\. îïïÎ¥7`ÆgL4kDZÈáX“4=ù*æWîîîæçç…ñH“È0<{™[ÝÉÝ¥ájF_3X“âœ@ñÚª†@e~~ž's¾}}Y¢zéì yï>GÑÌÌ `—{¿ù Ébªð«¿TáÚB¡ù©€7ô*“ÖªÃ?î·~š ýKé­ fÆ«)Ôs@¯ü~ÿÉɉ4¬"µ ê]Ýn·R©Pø ³Ùl0|úôéêê*åa¿ùÍo„‚åüüüææ¦X,›}RËŸª'3@‚G£ÑÙÙYÌ—Õj}úôi$‰ÅbˆµcÙ›Íæùù9d¬ ”äÁf¦Š³ÁÈŽÏ;???55tw0 ±›Ëå`09ÑH$ … „=:: «««›››œ¶Ñ0¼¹¹Éçó©TêéÓ§Ïž=‹Çã¬z½ÛO*•Êf³ Ož‚÷–ã ªª®,’|±ooo…BÕæ½–——K¥R0lµZoÞ¼‘Mer¹m Øßð•dLĺþóþÏÀi6x±3ãzÞ0j=áÖ5‰‚" áÞܤÕz 3&o"›Í‹E¢®$lüÖ4¼L…ÍIßõø\@ R©X­VÁ¸s@¸ÖÖÖÌ¡Áþþþ#NÏž=óù|üA>ŸWëswõû}bÖÀ¶õFAö›?‚äq 4 ƒééél6«Fð¬V«Çã9??ÇàÊïîî^½z¥w ¯®®666dÛ‡ •Jeqqqvv6™L®®®...þðãш ÐÁÁó„@5›Màúj ©xÿþ=‡¡¯¾ú 6ÒX,677‡È,Íã¼Åéóüüüýû÷|´¿¿Ï¦¶ùððu»½½-“IÙ—/_þö·¿Íd2n·ûãÇ’0s:­Vëúúziié·¿ýíÔÔÔþþþññño~óäáAøbå9å°µpô/™LÎÍÍÍÌÌär¹l6K ¦àããc`¹\ŽÙÞÞfØÉ]«äUTcÎ.ùc"‘(ÓîîîâââÍÍÍ÷ßÏäÌf³ÏŸ?Цc\¢ÈçóU*ͯÈyKè×7Ìà\/wdµZ‰ ìÏ OS Ïøh{{›Çú|¾©©)9Ik2è¿ûÝï~÷»ßýÍßüÍßþíßrÞ%ÄׄËgeeER/*G‘zƒÁ{ÑQ L¦* % ¼:¾°ºº o½~DÔžWÝwbtÃáð¡Uc& áV蜓Ïçƒõ6Ì£££J¥òêÕ«r¹|{{kµZOOO‰ŒßÝÝ©ž²È'³æeîúý~¸È·KQ ],WWW!ÂdùSz]Mž45Âwz. È@ÝáLk漇£V« MõòòRï¦Åb1! _}ï°MˆE(—ˆ˜ye‡e¼h$ .“0F›<èŒ ƒp¹\ÒWê7¿üòË““4ÖÖÖG¯×cΨƒY*•¢¶•,Z\‡‡‡ðÁÏït:———I¶"a@ä0 x~¨Ñh8˜ÎÎΚÍ&=ÀFurrâõzÑñ‹F£ìg#hÔÅðÛ,Ëâââ?þøâÅ `IµZ ÀÁC#8ÑBË'lG¯×[^^öx<Ír¹¡!¨˜ŽŽŽvww›Í¦ÃḼ¼¬ÕjÄôz½^"‘¸ººÚÞÞÞÙÙét:N‡]§Z­öûýd2 üëââbqq‘p9 Âéù|^Ö9Bǃz¤˜ú¯×K9"æ¬Ñh¸\.9»¸¸8>>æi`ïØŒUœ¬΂ªŽ-· hœµ#$ R\ïC!Ï·«™°,Ztz§n·{ffþÜv»ír¹ÓÞf³IžOoLÄΨ™›IÅ:-dÎèoÉçódçææNOOÝn7$ïß¿—âÆF£¡yAuÔÔY¡ÑÉM“Þ,„B¡t:ÍŠ@ñRó(µç- ÔÉ,¬×?Ý[__‚Žj¤fKX[[Ã$¡ë#8¹ËòI$9“‹‹ aÊeø‰¶‡Ãá_þò—ápxee%ÔëuâàSSSúNÁ´x„ ¯ì[ê,ÔãsÇÉPr‚Ô¸K¢Iú¡Âµ¢OªÿH¯*rïÅ!ƒ •þÞ|>¯QZ3™|ƒB[‰£gøL‹®(—¯ ©!jü `€D¿þõ¯«Õ*ÓÃzyy933ƒ;†ä/’ËåšÍ¦˜ŒD"1== }[.—!Ш Gl'@+&êþǽšZ­†Ôüü¼*CÊv{{Ûï÷³§b¼l6ÛÚÚZ$ùøñ#Åx×××êKÏÏÏ?~üxpp)ûéé)¡¼@ Pl}}½×ëÕjµN§óñãÇx<‰DÜn÷«W¯œN' c—ËÅiËËK€0Þ¢Õëv»777™ºªÜ­˜ X” •㣥¥%š¡ÏaœžžgÏžqzfÐËå².F"‘t:}yy p[ugõ—ìŽÀ´'™öD?ANV¥æ·Ÿ fÖ˜ÏLà$ ÆFŠÅm6 N)zÒ¸¹ÕÎV/8Ã4 3õ$'Xàáp¸»»‹¢¦ì~çÀOR˜ær¹r¹œœDù-Ž1.—‹=ÂëõjÌ ^;ûþÍÉvÙØÞÞ™CQ,©å¸¹¹ …Bïß¿‡`_Êê5°DƒùtzzÚ(K@ùùyp^œ+K¥Ò›7o&ÙÃ=Ãá0±¶WÎ'+J¸ê 0œ²,W“f¡2Œ4ªÂµªB%ú¤N­Y­ÖX,æp8X6¤O,‹a¸Y¨ィË+*öH†R$’Åq1yT$‘݈ä~ÖÍÍ ¨õF£ÝnïììlmmÁíÖív17.—Ëét">{ww‡¨.¢æ$–eÆ;Žd2I28×p8¬×뼘•ÓÓSÒ™Lê9¬ŒßïÏårª.ï…ü &à·Ûí2îjõÜw^¯wjjŠeÒjµJ¥Õ=€ºÐó¬×ëä¥D0ðêêêèèˆhö´û<O«Õj6›0ûíìì¼}û6™LÄs8@¯ö÷÷9½I•t|ìµü= ^]]©{ ÕŒ‹:X÷$Â!X?ÿAqåWè@©j³|ýÂÝ™0v{{k¸3qžÓØ8 âèl¹ººBêšÍÖùqmÅm§Ó©>C;3¡q‡Ãã:—Ò˜ qš¶l„z·òѤù‰D®®®dtìv»^"9—ËÁ.¨& GÄ,çtvv&½··§é/FЇÂM¸@îÒXdâ'üÛ¡I {cc£V«QË‚ÓÇÇÇ£Ñh¨ÚŒq.•„z5¥¥áp˜ ÔGàsõŽ¿Iå~0dÿPÏ%R[­V'g­õz½*Ê=—ËÍÏχÃa=Úƒ¼ˆ~VM"£ÅLª×ëjìNÊ{»]óú†$h®¾¨Éx<¾³³Cb_¦“  9‡mllP•ãñx䨧‡Ã!Jí‹¥V«Ñ~¨Ð[­Öáá¡ø×‡‡‡4Cüß ¬6'<*­¡ ×´x¼žq ›ÍÚívöžn·K–þŽN§szzŠÿ›‘×ë%úW¯×[­ÖË—/¹ à~ooïôô´Ûí¶Z-þqssÃ8’òé÷û‡‡‡*ØÅï÷Ãõ äôô”4 k! i’:d&èFÍ`ÕëuQ}|®>cI}õêÕÆÆ†!*ñââ'àó‹om6›9«1ANÇ<«ŸÉdZ­V,3_ø2?¸ ó…¹1¼‰„t;¼ï¬ h4z/—ë^Ç âØ ›ñèK…Ó²UK-†|>wܵèjí™åò¿‚WGqÀäFÕµW±;šÝÖÖÖ÷ßÿ»ßýîÇß}÷Ýææ&`Œã`nêG3Ý ƒÁ`³Ù”ZíÃÃCy`$Q Óg^gggzçE€±„§U‡Ô˜2ÉÔŠ §ÓIèÆp~cž4þÔƒ^™²`ýßýh4ªZíqÐ]Ã<ùÑÑÅQjå''†©©)^‡ÌP À÷W;n›@ 0ea x{{»¿¿ßï÷U@¾|¤I"æóyuz3gÄÓ§†U­3±Ê^¯§.ì¸ ɹD"!ìMGGG×\?88ØÜÜ ÇÃÃCp¸N§3•J]\\°¯ÜÜÜT«Õ?üᇇ‡××ל€I¤{èv»ÛÛÛtpZÞÂn· Ö’óhµZÕ{-21ôƒŠwCʆjµª_ûÃ|vGoŽ»nnnêJêMÓI8mU‡Uãç±çÉÄ`dõ/¥Yà†>ÕîµÛm¢a“,I§Ó O•¹ ¨NN=ªWÍ©ÖÉ04!¢ßðíÔaÜè›ïÇc7'Í¡»ÛíN¨k9î´NXÀãñŒ£¶ëõzïÞ½ÛÞÞF3‘¡º¾¾Œmx’E¡Òäç,c0Âò@Рú6‡ÃaF â„&øÖ³³3󪦚çççªK¸··÷‡?üÁ„´JzéRÁZ>4exNÒôðCÀæ´X‡P(D¤N,!‘@ À‚N yèW *€Ä!¹éõz4õ2²Âóù<[¯ÇãI$”,ËûŽF#²_Ä7âñ8Üßß'¨úÔjF'•Jq$J¥R©T SˆRÆh4*•J‘H„è ð3QLOfŽ\Ôh4"é…< ê½j11»êA™ ¡¡ãÏÄ0”»E€Ø$™/ºDkqžñ ¨ƒ:s/¦[oy)º3Œ}©&rÒƒƒT>ÒLi½1999¡¨ÒЛ„%êõºZÔ.ÂÊ<Ðä¥ZÓȃéK?á W:vË%qdµ'_È+@6ÜÆY›Z­f¶Õ«ÖSÍ(Z¨’ûÞÞÞU×hMŽF£l6KzÜ;S.A ºgjY°úMáÛXSk|õ?§—ֽ׿š¯ÍìTQG/£i*Ã1¯Ô¿bK†cDmU.—ãT÷héR „P]ðšÍ z_s@¥ÆÉÐÌ˧’Hõ•ÙÂAGÊÒÂ( hc0ÌÌÌ4 x{{KìKæLlxhºÝ.G"ù¡P(äóùD™Œ¥õÍ7߸\®jµÊÌ”Î'O‰B1ç(ÌÕ¹oß¼$Mrww7;;ët:#‘ŃÁF]ˆYG£>zÁñxüÝ»w©TêÍ›7lv»}{{›š¨l6»¿¿ YêRÐ!Y±r¹ …ä¸Óï÷Iš¢Ìäõz%ê(Ñ…ápX,å,È35b’‘H¤T*!5+ç9ÖÓùèx‰ºî„—¾ÄKl®F¸V¢Cê[ÆÕ- Ì€TA¸ªk¥ÉþOã4Xuõá©T t6H¯{«ò(%Ÿ°4 ƒ†b²$õykuíÆýúý¾:úòd …&2M38û îp’½ã~.@*(B£VÄ fV°¥˜þ.Êx*jRíG’ÀÝÕ6è§/Ï ªLªù™Úðšžž¦Mý­áp( 8½›É8‚þr¹œ¾Æß¥Ã]0›Íêe!Ucy,..šºÝîd2‰w†ÝyhmºE!#q:•JÅ$š?‘jÐ$éçL¹\ÖWmÀ[jƒºøÅrч«««Ðè5›ÍD"áv»%'¯NéP(T¯×ãñ¸n2}>ßÜÜÜÍÍM,kµZ?ûÙÏb±ØÕÕU§ÓAÁ+2g€ý9έ­-ÚŸJ¥˜äTå k6›Ýn7‘H¤R)XÃi’Ãáøðá¤MOŸ>=>>î÷û(Šmnnv»]»»»CPø@y´Pft»Ý|>”°Æq^\\|ñâųgÏ‚Á ×ëµÙl¢ÊŠ<ÇÞÞ^  ½T.—‰¬ÞÞÞÂÙl€[d óÉQÏò§ú³———ò¿"™-ø\8sõQ„x<>77G…‚:"ªw/ ŸÃ(ØJªÕŪǽQc:­ Ñ8 ¤÷úúàݸÍÉf³ÍÏÏ?”)Ôð”6‰„7V0ŒD"ãüEFf/zÀp[; áÖ2l]ñ ÙŽû7'’«ü5Eß~û-Ïö¥jPÌ•`˜j~¿Ÿ©5uY|&4tÑ<ç‹/¾@²ÓétŠ®åÔÔidu¢ÜÜÜ hy}}­"]î @K’–‘¹Ðp·gËå²kÞweeÆnÑÐdÅN&©æ#ôŸ4_ÀLóG}ÊdÂÛÅÊTßòä`CQÿÔüâÒÒÒÙÙÙÊÊ è jwóQP猔2ªjôV«Ø\»Ý. wwwBòÆÃUý\¸ææææÖ××ïîî8lI>R†º)„JƒÁW_}Ášå%TFív»T*Y­Ößüæ7çççwÎÎÎp 8|,//ûý~ð@D¿¥oÛí¶ÈX ‡Ãóóóz½~ssóìÙ³r¹‹Åò£š€è"®C­V‡Ô^Ÿœœ4 ²¤h# º%I IDAT”N§¡&* ’%R…•óùü×_]©Tnoo766666ÔYÔéth¿ËåjµZKït:V«µR©ñ>==•¡TKï0åú‰§Q§•qäùÉd²V«éa‚h õÕW¼û8/S])Tx3Ú Í%‹Næ¡*Æm¸®S©¡uêòz»§®…L&Ãɉc·Én1ÎÔ˜,»Ý¾´´$iU ÷ÞÍ ÷KÔè SSSS™LæääD³-e2¤ò˜+++ÍfçÃÃCõjãÕšäŸlsREüž?¾´´DTêêê þS>]]]UËÓÓÓÄŽF£qv޶ðkVWW»ÝîÏþs‡Ã¡ìt:”ó‚¶³ÛíÅbä/j=ïß¿—àÕÕÕ•âz§\"H1NŽ¿*,ɺãÄaX GîÞã¹þ¡w aL±XLƒ4œ^sss*S™æiãZÈ"Y[[S#Ý4çp8æççÍKÀ-Ÿps§§§¢à®B)å·Y8F)v8årgÂårqVP+éççç;¼všWf°€Ö1—(Keˆ=ÏÚÚ•xââÚCv÷ñœðdt8ð|›ÍV(ù©¯`–ríD"ñúõk‚uœö÷÷[­Öôô49ž©©©ƒƒƒW¯^ÑÂéééR©‹ ¸ýápH£º°°`µZ_¾|yqqDáÇäDèõz›Í&4H(›\]]Ùl¶F£ ù• D@ø_4y…««+Êó(3ùꫯ`Ø´Z­`Booo///Ñ>:::>>–Íê)ŽP´™uÍp,,,p`å·x~ô^Ô¹Ó霛›;88à¦×ÁzòäI¡PˆÇã¯^½R%‹äÊf³êy ˆžÐ8€ ºL„«ÁnÎÎÎjœ]H¡,ŸØ å£h4šJ¥„= Y«Õ¤°Nˆ1šûÇæ¸ãq/";å-&±2=6Ö¤‹ÈÜÜÜ|üøQ`Rh4µZ­ùùyHR¨’“Çª× mšÍIýv»Ý^]]Bú¤P(°D5=xvvÖï÷gffĉ@7›Ë]Õj•…ÍÌÐè®2AÁZRž$QD}=Ûôô´ÄýÆœgff ΠA¸¼”^«×2vªšoC½N™+ $ ƒà“0Æ’~Ð첚w™¨ «’—&—7çp8ŠÅ¢òõ×_‹ÅÝÝÝ@ 033ÇãñøÑÑ^üììl¯×S•…BüÀ¸ÎÎ΢4!˜ÍfÁ±Oe9f¯× ˜innniiiuu•c˜Ò?Ì ”–ðf4*Ô‹E«Õ ã88q»ÝNÑ¿ÕjµPXÇ –YÚétjµÚÞÞžÓé|ùò%i*Z˜ÏçËåò‡jµÚÊÊÊÙÙ™ÍfCèäõë×···ñx<•Jmll,//³ã¢&œËå€ÙV«U¯×›Ífãñx³Ù”!°Ûí¥R‰=¡@ Ïçá˜øãÿH ÷ùùù`0ˆF£Ýn·X,~øðBGñäTŽýL£þBF?™L’3³ü©æ²áåõzM(¨G£Ñp8t8­VëààÀ0LQ=BMcb.@}5ùBwˆó …‚ŠÒ#¦ªjš<ðs–ª&þ)!ýq  ³ÙlGšäñxø_uç ò4ay—X KûiøÑO¼9Â#ˆõHãúrm•-Ql®á]-«TØMè)J ÇafÇA\U7A¸Jq‹Ø&= Ræ±>8KÀÇ]Ôõê_6|¾\´˜!ð€ápXŸc3i¡á¥ÁZŽ»4¸¹Ñh¤ß™B¡Ð‹/ƒü (žiKÆëêêÊívÓBs,p8&÷€–Úóîbb ‡C¶™‡²$;Ž•••ôþÑÔÔÔÖÖ–”–-Vi0ÿa®ËËKݳ æ¹åPËd°<7aúœfLòÑä›ÓØRò`0ˆwöÃ?¼}ûö^'å^ô™åO!W'''&ªxåƒ^Çå„4° C@¥t«êâ¡€T«hhƒAÂwáv»ÝI(÷^6›MÊŽ[­–ømò^ãFy’¯i ØRd¡Bˆq”P… 7Tae} Çñ@8¶Ùld.U¿,K¢àMÂz‡‡‡” 8Îï¿ÿþÍ›7¿ÿýï÷ööD®Yk¿ßÏ&'“°T*ñ@<$ÁZrÝŧxO€Û°Òõz= c±X2™ŒF£h[нÝnA6BŸÏ‘ÿ%67ÚÔÔ”à™noo©@¿ßëׯ9C³[ÏÎÎ2!)ÿF©U£ìæ}›››jöWõWˆóºÝnAgÛl6Êͽ^¯*!‹2N²9éÿÎ 21sÛÛÛ`“Í''¥24“pÜÅÄà½Ìes '<˜ªN§CIm!ïKîC=7˜ZÞ{‰¦­ùÊUMæ½|>Ÿ`B£.h§jµº±±1¡ÿªû[îƒÍjFJ'†wÉ*kî4¾ª4iH›Ív~~~||lÈ> ^z‘\P“jºlr\¯3«IÒŸÍf¯¯¯ÙÁÀòÑÔÔR°,'~Dg>ŸGÜn§Ó ‡ÃÝn÷Õ«WÔz`¤†ìììD"‘z½¾¸¸xpp@%÷ÚÚZ¥R ƒ0‹#°»»{yy¹¸¸X,¥›W&¯„ä™@ÈB¨AÄF4mgffÈ6y<²­j€áâââüüœ„b·ÛÕˆS)†²Z­¦R)—Ë5ª˜Ë僆P˜zEóýÌðpdh>Úßßq‹Ž@µï†Ð(Ãédù$éb¸ê¹ƒÁæææÛ·oÕÁÁÁlÍ¡nËü(6n÷É]½!Rá´šRE¢†¯¯¯³ÙìÌÌ uãjkÍ‘¶°.—3×g9Ç‘˜WKÙ4#§LÈBÓ#ê‘_¯…ª¿ü~?”…êJ û ©ÓO¯Ï?N~‚ãÆÁi'¿&t¬4ø\˜› IÒ(Tª››°µçççú4/5T«Õb„øh?é «ÕªAªSèE^Ä|ë•Fãêê ô‰fÕ‘¯¦¢—dõÝݬQ”låóy p?7—Ë©1Í’É$t…äY!¾ƒj¡ÿé‚C½R© „[«Õ„¥ò­@ ‰D ’1ÝØØ(‹¸Ûår×{zzo¯×ëõzòj+++‹‹‹•JêØ³³³Z­„¼—N©D"ñõ×_—J%öT‡Ãquuussspp@8TÆ‹âÛóóówïÞý§ÿôŸðiZ­Ö`0@<·Ñh #®‘H†oT‚óªªnA•©—ÖáÇáiî7¢¾ßðƇ"%®¯¯„«‡ ^__omm]__žçTŠ96­ããc“·6e½nºþ–ILÐ`0Èd2¹\N/’«š“ŽÒ€ý}½11¼l± ú/Jëþ‰×¢æœ~øá!öz½årx;Ê`0@ u’Á×}UóÓbóW¢.ãA!éÏ µ•Ëe“xºáÕív'‰SS 2 6n½T,ONNÔ£![¸5ë–êÒ{{É\Ÿ`¬ä`ô» Õ›Œµ?tW”ÅØ W]?ú•<55E-r`ùþ-8kX_kµZ¡P¸¸¸H¥RN'‰œŸŸ§R)‡ÃA®Ù§D"ÁfɆD½>YNŠ’IžžŽD" ‹8#f³YØ]‡Ã!õ GGG}„Ãa¤c[­ä¶°?X­ÖjµŠÚ¯Ãá@= Òä„Ôn·G½^Ïår''' B JõP©TÝŠ`08ß½{×jµnnn …Âþþ¾tµ”Ì™™™™ÝÝ]0Èͪ3DU;W(¤U¬Ù?“>'‰D£ÑÉ ¨á®P(Ä9ZÝÕl±ñ˜yuv"I§ÞöEý¦×ëzrÎÃ4Þ«Ojˆ¶C÷¬Õjõz=äbOOOçææó&†ÆF°Õi´ÕÇAýÀöz=·Û å•aûƒÁàåå%>ʈG£Q4å”5Ãññ1ÝH ºƒ>{öŒ jO(ö:B¸ÃápnnŽçX‹Å( X__Ÿ››ƒo"N£c;77W*•@øíìì@Š …"‘R¹ƒÁàÝ»wwww\Ùíöjµ‹Å³Ù,é´H$Ò‹£Óé hKÔbYœŽMn·›'pöŠF«Õ*‚¿ LMM!À#“ÓÐR£ŸË8ªG1™K2gÀÖ|N½žéĬ`!bËå2+Ñ\;ÛP¸Öjµ>yòÄçóÛÒ¸kBÅ[ýÏf³Ìóûù—!3KR4´2™ÌÎÎνÍVïº7…¯1&Ÿó Ä32™L¥R»9y‡g‡‡‡XdY¢lŒ¼˜Àß4Ç|z°~ÉHÃ, ëõ:È ‡ôAFÃ’- ‘ŽûihÈäLþ„Á`ÀKéÓã~Ñjµ²9ÜÝÝåóyûzÜÇE½—â‡4îž ?äS=$¯¾1ãл’V%cd6DÛ ª¼ºÝîôôt2™ÜÛÛCèA¾LGÉ“C¡ÐÜÜÜÞÞž TPVE»ÝÆ:KÏÊ[¶@²/œAQ]:::bi! ¨rM©=Ì?R©ãèv»½Âã€Si³ÙJ¥Òh4‚}™ÃÍááa½^ŸÝÜÜÄ_™žž®T*óóó…B¦óL&à ª@ èsï[[[Ðá­­­R©´¾¾ŽTãÞÞ^:i‹égÇÊj­T*qNÐap”¡ÖY¶óP(ÄiR¥up8 â¸hð•z¶f.i,Æä—f¦ ñ‡Ì ži¸ñ¨ÀmÃ/÷´µÞæPf8Ûý~6›EvK5&gjE½è[ug ƒ«Õj‚s2±uš«ÝÎYbg]½K3úúorÒÒsmË]Ùlv~~žÀÃ$[ìùùù³gÏÆnNÍ×ÿ÷/óoò}W’s»Ýß|ó ª_Èàúý~*ÑT*„S¸’ݵŒ—p}Ä%Ѥɟ©¬ÑÐ@h\‰r¹|zzJ€·Ðà^ç6júI#`UP>ãD³Æ½¾ù@ \1›Íz<ž•ÂS}ÆâíÛ·lØ2îX\\ĨYJ¥R³³³œÕÎWOŠ- ƒOŸ>ÃGŽLMMIŒ»ÛíR¹$8ë7oÞp8^\\´Ùlbõ](<ÖV«uggg4!%5;;kµZÝn7Õqd}2™L2™¤Š’moaaa~~þõë×ʼn„ÃáˆF£n·™V«µ··÷»ßýé Ñ„Ë5JN‹åǹ\noooqqq}}}zzúääDŠûAgßÜÜx<hЍ)%çDŒ‘:~\‰°™¡÷áõzEäþîîÎårÉ-É`çS•Uh —?ú|>“Ixï¥AÚšÏÞG|§ÙlF"‘l6«ÉTY­Ö¹¹¹wïÞÅb±t:­Ïc!’‹÷©†ôçææ>|øðP“bù¤CÈ´á™ËËËïß¿—¯© ˆñd %‚á·ÙlÔhL¨Ð­Ù™àS–{aÄ7¹ Æ}…q‹#ü0î$—à-Ÿd(½^ïÅÅÅÔÔK´T*!Ò…0ÏÆÆ†!Ëe]žÓÆù´OÀX!d|Üs Xº¹¹æ†ˆ{ÁqŸyi& pÑÑhD˜E/[<‰£:NÔf³î÷á -JÝ_3¿à£Êd26›íúú$¦™ÜÏÇUmbUiT"~Çív“ ö³³3PVšì«!ÎÚf³Õëu·ÛM<¹U¡è¢"E–J¥z½žÏç[XXØÛÛët:”HœžžV«Õb±ØjµŽ/..°h———Ôõ­¯¯sŠ‚ôëééi«Õ¢… Ü+• D 䉕ñ‡#‹ÁÈw~~Ž:¢Ãá899©T*ÉdÒãñ SG°ŽIX­VÙ·8MB€d2Ä©Tê_þË9;;KmºßïÇK˜ÕLuR¤‚´ÅçðûýPÎÌÌ@›i1ÒÎ~Ð¥AÚþ´—ßï¿»»#Ìe¸oaˆØïƒQ`i¨b™¶/>œl?*ñ•æ#½M³|R…¿¾¾ŠTÛ‡Ëå²*¡ù  ½f5šåt:}>Ÿ8%b4@øšƒp9ÁkbcÛœ&Ahg¡KKK­VkfffaaáæææÛo¿å ÷w÷ñãGáE†YàÄg qæÓÆÁi=©#Ã(óäW«Õšð 4!ô,‰¨ñhÑÏä8ùy+ßÝÝy<ð5@<ó2‡@ 5œˆWªcJ¶cyy¹R©8NôÈ OZpÊ‘tÕ4^€ôòʇÃèƒùCsyjjŠú79)’؇•@†àv4-—Ë.—ëÝ»wÇÇÇãäDõ¤-¯ŒA£ÑǃR 7“.¢šÙétÖj5‡Ãq~~¾µµ“f¿ß÷x<¡Pˆb‡P(´··W­VÑ•ßÞÞ¶Ûíl*l9@àïÿþïÑÅ ÿ ÃS"‘Èd2¤oñöpõ8±ÍÌ̸\®W¯^e³Ùããc»Ý¾¾¾Îa ñYÎ^&.š~ˆ¹¾ýöÛ•••@ ÕSä™ ¾ m‘ÑÂÏ ’çã ®ÿ`W¡P8==5·3„š5§7Ã÷ªT*~¿ŸiŒê&lìÌ#\m¨O8‰šP„ÃaI¾ÄãñËËËqñ|>/ãFbÂIoùõ";Á`0›Íj¦ ƒôí¸ß‚©O°ùwww”­®®N µŒGh&“I»ÝNˆ\ƒ›K&“6›íÙ³gý×].—ñ)ä5Dö…øœ §ŠÉªÍàhIU¡„ûÐ ô‰þï”ÔàÚº‹téäÏi40³q—`„ {C“L …Bà:÷öö,ж3;`ëñù| d€gjž&W‘¶òÿN§3 1‰D"l|PtooO[À{$Ãn·Çb1*Ž`Vm4¨(OÊçó÷d½áóù`®¤= H<5 jv )âE3Úí6 Tè]\\¸\.2CÄ…r¹\4™™‰D"çììŒÐV"‘¼uqq }6›- ß!†øøñ#;.šñÅb1‘H”ËåÕÕÕ|>Ôo4%ñIáCÜét„눵»Ýn¡ô¼¼ ~\†Xõ&ù÷îîîÑÑÑo~ó›ßÿþ÷oÞ¼ét:@é5 ŸBÇÑDÓ¶Z­b¡T3ŽýfB.µæ@`5yÖjµgm1‚îF£Ñv»½¹¹)ÇhäÍoéaûúkwwWâ¥ÌXC°¿h5î;;;â,úýþH$2aÀƒ.u»Ý&Xà³³³ _ESJ&†ùÑKÓÓÓ‚64\fH—qM¬†ÞŒÖjµR©”L&Ýnw&“!vçõzÇ=÷÷÷'œ‚Á`Ð0AÇš7l¡zôyÐt‡mÓü™&$`*þ7ä<`8½¸¸8<+v?•JÝÝÝ}üø1‘HP‡†«Ôl6K¥’àÕD@ÞÈf³ÂM.û“Úç@£Ô¬5C³ðõŽì‚ÄÁ¢Ñ¨€F†Ã¡~˜¯”ϼ áá†1ê HxÛí¶z‹º é-Ú%LQ¿ßÖ׸LîwŠM3l¶Ïçs¹\†è.ó˜°v»]&À„}‹›¹~ {?ÿ¶C=pûÿ{ò$Z×C,[•­T*>Ÿ¯Ñhloo#6 ,ìj(Ó¨Ô€p …½÷¡eå÷vá¸Ø°|öîîΰûÆU=P”)QZ©L€rÕ`ŸYüX´ÕÕUçEEÀ™ÄR åke"æóyËŸò¤I«à)ØÚÚ‰ é[üÃÆ«‰Š^¯'\ætËõõu"‘ä(ÉtBAµÙlª~ëÝÝ]·Û•9}zzJ|Æózww†ÌÞÞ% ¢Ê8€àw!\k!©V«(¾K±—ËU.—Q·òx<Ì¢ŽN§sssT¯Ëåòù|ìC±X,“Éà¦øýþt:H$¢Ñh:fÄáØ |U´”È{“¡`½g¿T*Á°n³ÙŽt:Ó-01 ü/õ#ÛÛÛ*ôBÄŽebXtlè9ƒA(¢;Iý”~IŽV~Ð%po“+•JQR?Ée©g÷5—Ëåñx_L|UÏL(˜î³³3MÖ¸•ycôH[ä•ÑÀiÍGŠ<(U “d=ÐãºÌ¯‡pëõº! ÒÄY>•›{¤< æJ'ÿãü>|`uÉ6£‚pÇÁ0UÉK½®Åbѧm?ó¢³Ù샪9 ›Oá`P>Ì'UâS¦^¼Òëõ~ñÅSSSäBÆQ"©8u£°'ã¨ö°æ#Ëx ‘¼ ú `¨jÞQˆx Ô°™l¼ñ÷\.§µèYú0‘H/Upà™ ½ºº‡Dõf(šŸŸ·Ùl¸º·m6Âv»ÏçN§Æ4@J |‚jòN§“Éd.//Óé4a:Îg{{{ÑhÙø\.… ?üðDvÉdrvv–àÆíííÙÙÙÑÑQ£Ñ¸¼¼¤B oår)z½Î” KÕ:úRÄKᤠµZþD U#wK៪ì—Ëå.//)·Ó{„¥R‰ ®  ;Ö”V“›d¹M¬™äÒkÚj~HÝAÑL0,„Pªù9#…A»¼¼4TÜ6yšl„ílóN“œýÔÔ”z§ˆI$î­}0}sã©ÈA&È=įä4÷¨u½\KKKzçE*îc±X£ÑØÝÝ}óæÍwß}7Ä»FÈÜ©êáêµ°°jBÓ9333rXd° ?.ÈA¡™ŒàÉɉz"‡ê-‹‹‹+++íI ÙªY€Sø¡ÏiµZ¼ ~è -†œÔON¯_¿ÖŸÐÛÈ`Sïor'n°¹¹‰~ÌÞÞžô Ëå¢n5™Lšœ4>è«y0ZõÜœÛíV ”5?4u<W[¨~!N/,,få[ì'VOÄsåuˆËküD4ôbƒLÜ«««ßÿþ÷㨘T´éêꪆm9W½Û"˜Y«ÕúÍ7ߪº©Ý‡™ß²Ì:ŽÝnöì˜D .-!¨IÕáବ)<ÿqmm 9W # Òår­¬¬x½^>çT­VÕ]™®œÎ±>kkkáp¸V«¡'977÷ñãGUÉŠêÈfCi" d<°^¯Ë‚IÈï÷£W}||¼¼¼üý÷ßãAC»°³³³³³óìÙ³t:}qq1’ÏçÛÜܤ”Ëét†Ãa ˜¯Õj½^ïììŒUͽ͇B¡Ÿÿüçù—ILïøøøôô´V«5  èV“3ƒ:( ®¯¯ßÜÜx½^än5”%õzýúúzzzúèè‘E‡|·Û ªþç< eS5£P .×ÚÚÚú!¶F IDATúºL<âÏdr1œØ²ÆÁ“Yþ'd}©By“Ä')à&Åï2ñ¬Ÿ.‹Bb YªÝnw~~^_ý«A+Z<ÑÏåSL¹êçIÏËíT«© ZÍ :âz»j"ám 5×éÖø4 •Õ/'-%§>’œó~¿¿°° ©Ç×ÏzÊëõ²#·ÊéŠØë¸)‰PÇiyyyBqi6Ä<ÔDéIKív»fTæææT÷ N*õ *Ì­×ë³ã.//ŸŸŸ;Î/^@ˆ {’4Fþ¢]¯×;;;KFDŸç[]]µ|B㫽Á‘žCIAˆ´ÕTíh4a6n¤Þ¾}KÛ¨i6œ@P=ª ¨~¿ÿÍ›7b¶PpWƒÈH)É…¡jiiéââ‚H#”É)Yv&HZÝn7Ñ­jµ*<ä2EN×f³1Äj ].eFÃn·ã.Põ‹7@ƨX,~ùå—WWW ûûû———n·{ee…Èß„> ylN~€´>~üFgggC¡Ðöö¶Ïç#uDÍq"‘øðá(þÂÏmmm±šþöoÿ–-ŸM‡ÐŸÕj=99ét:D¢œNç»wïÞ¿0ëèè( ¢óKíÃååå/ùKÐNý~Ÿ úô»»»½^ïéÓ§~¿ÿõë×ggg.2%è„««+l¥ªj*rõDäïæ! …–——é^Ááj ô–O ¹’Ì ‡Ãâ˜~~@Oý9ðþ¬J6+fÎækÅ2èé¯ô@QÙS5G¾ƒœH$l68=œ–_}¦^1Öì?(à¦ôÜa‹Ð490y)½âöä!"x­·3iÔ“Í"ô›Óìì,hAü8SN‡Pµyƒ¢Ñh À1ÁS=Ò– Lë÷­íL‹¥\.£¼âõzS©ýG«Õª{Ì– nnÜ@6›M y!é¡ÌO ´ªOjxN÷x<†é\h¤kµšfß’’`0”jŽD"°jTM¥æ^DeÒˆy&‚ùý~â6¿…ʰ|S•@ÔŒÁõõ5Àm›Í°ÅÈݺÝî/^ÜÜÜ$“I¼ûn·+pïr¹Üívý’!Vçm·ÛÙ*4=8[———èm7›M6ÒœPrx<<$ô|)š˜ŸŸ‡x—#‰#awzzZ(666(Çïõzëëë³³³@»81‘¦Än·/..¢àçõzaÛÄí`gr:Ýn·^¯ÿáÀ½»ººÂ¨Áû€®<âñxìv»~=^__£¦x||,Ÿ2aòù<^Ëììl»Ýf]är9ÇâXä_AÚòRðt»]¸Þív;”²ìàs‰¯¨ œß·¯ßïkkB°ªáEM’Ï绺º¢'5qÃëòòÒ0.-šËäîM™€\v»Ý¤3;N:Þßß¿NËÇÁýˆ%Dÿ¸†¡ÅPånI.Šº 8ÜNG™l„Ÿ3Žõä‡p5 Ê&ä8Í#¤âe£1c1RPM§ÓŸëÒCØkPCRÚdìMQñ‹_übyy9“Éàæ«±£q¿‰D˜Êjþ‰Ð„ ö9K©®¡.V -m ª×ëõ’AÕƒãX^¯W>¢ „°4ëSí¥`0(w…Ãa(ìTÛA­¶fƒ$èGËÜs8€ØVG£ÑÂÂB4ýæ›o €À«h$C<55‡,±€øT[!†t}}=77‡}>ßÖÖ–Çãi6›Ø šqzzŠ&Åòòòíí- Áëõnoo_]]­­­ñC‹„­±ÕjQÈÞh4ÎÎÎgffÎÎΠ– “äõz[­V$i6›§§§ÏŸ?§,›R·`0HÒ‘ÊÉ"  ”-eë_°>>ŸO04¥R)‰œœœèë˜ OÙÎ)Ï<âñ8$Ô”S€þ¤-†•4“Áãñd³YÜVF„P¿~2gªãA‹Nƒ'£Z'CÃõ K6cô!ï=ºá+¨<ÑnÇãõzÇ= 8*z‡†ÆD“+!}~oãõ"㾄 VŸLG, IÝ¿9¿2é#¦»IÒHì]¯×#ò0 âñ¸aÔòüüóϤpÁ9‘HU«Uó±ÜΔL&ƒ[ËÁÁÁÞÞÞ$*Ò€]ƒA$¡ìǤoÕLHÁÃØe˜(scJ˜ÍêÌè÷ûê¦Å±Ÿ]^^z<y)µ—Ô»âñ¸†³áÔH$ … Ò«z‘Äë‡Ãáéé)1ñ~¿?33³²²òäÉ’§§§Héh¶UY °çy<Š†Ù›“É$ç€x±§‰‘#|D30ˆ²™Œ5œ3¨lµZoÞ¼Éf³zq3™„j’ˆ®à"Õy‹ÅJ¥¹¯×»¿¿www||̦…QÈårDÀªÕj8¾ººKÏÐLMMÕëuÚF¿µÛmŸÏ·¼¼\¯×aBâ¸CL6›%Ç@åÂÆÆF8&áõz].YN'PÄb±³³3ǃ gggÉd’ò"’RÇÇÇÔé‹Åh4Já%§x¤‘ÔVé͹¨p8\¯×)ƒ„×`BT†fµR¯?¹¸Œ4ãq[ óms¹I5'çÃ~ïs‚Á ¥˜Bi¶ýÊêv»Lu*ìMlt6›…‡l—¡é÷ûz³ Z!4Vˆ`«FÕju~IÌõ¸¿Ó«3òZKŠ|¡‰cÂGàuPÓÃÏçIüª…ìpãävÌ?úü‹è|»Ý6ÜhÑ'ÕäèT™T¦ï.777ëëë/_¾\__רq`.†ë“EÊCôªHª-Ö°˜ wkù„ö}DäóÞã ÿÍfSS}.3[¿Ô‹Å¢ÃáЀkµÚáá!çJŒ˜3ÉdR8K@g  ²Ùl¾zõêûï¿ÿãÿøŸÿó–’BàÞ•J! þÉdx`»ÝÞÝÝM§ÓU«Õd2ùå—_ær¹\.·ººº¶¶f³Ù %3Ú‘íím„8T¥Óéµµ5DÐm6ÛÁÁ/…e ‡ÃÙl¶Z­¾}ûÁ$6¡—/_Öjµb±˜Ïç­Vk¯×‹D"¯_¿‡Ãð¡‘÷Mu~~þûßÿ»^¯ïîîîîî@#šJÍ^½^O¥RårŽápÈbáTDqA±Xœššƒl·ÛNçùùy§Ó™šš¢{ív»À Aöz½ÈRKùƒf(G}i/£i¸ÀYû J6›ÕO õÍq“†W(ªT*XÒ -† ö¿w™èëæUŸI4m¥å  õÏ4žç¿Þ~nœÙ¡bÖdS©È¿5uCMÑ–‰ç*`j1A\Pß{×Ã6BÜ *ÃøH”FU©D»I/OˆÐÔÀ0É–ë‡ÊP&UãþM}3|>‰túWý-}¤C¿±As®Þ5pé[5^§yŸ«:GhUèWëÄð® /Cø°d°…Æpc”‘WsllišÍ¬\.g2™““žÆœÑhh"ˆÇ>  ’]­Õj©hbçZ­V¿ßŸŸŸªrtt¤™„$“2™Ì/~ñ fÅÙÙÙ?þ(µÔ„8‰­¹ÝnˆÀÃá°¤ÙŽÅb±r¹ ÿ‚ËåªÕj0Q;Éd2N§hs4lf0„mnn.ŸÏƒg€0+ª! ž¨Õjïß¿]Kò œ'd|“É$é4§Ó™J¥NOOëõz¯×#íÑn·Ëå2utèú|>Lõßétú‹/¾…B0ùJ釩ëq0Lµ,[V–ÈW’ÔÔLxõ–H$âv»'Aéjž@,úAÂlâ:ß»L42Í\ÓÓÓRóFW¨ænBÕP(‡‘8Qu¯AÀ΀7l<\VæúgØjy5¶Æt:ͬžf, ‰òù¼ÞŠªNƽôä)MÆýÁ’^¯—õfù$]ªéÙx< …˜1ÌÎqM´Z­ãtW5¯†âªô…ÉñBœ}•ëÏÂï÷kNÓ/<_ÕîË &“I¿ß/ñw›Í¹[“ 5f>ÌÁö“Édx5^ꫯ¾r:FUÓ~¿Oݼ:§Uå‡Ã¡Öщà)Ý®ŠäêûPæ4J(†Í“áTM21¢Ñ¨Š(Êçó² í …ÚàÆ„këææfzzúÿe~Éò3mÞ{ï  ©"«ºªº{z¥Qh¥ØXÝí_º±Š64Ò(F3Ýå‹$a ï’ ù]òétŠx}£Ñˆük¿ßO§ÓÝnw{{Ûáp`ì{vv†nþ‡@ _¼x±½½=™L¬V+u§H$Òh4ÂáðÓ§O-˧OŸ:ÎóçÏÁóôå9ÃðÎÛCÚ+àb9ˆ‰:/'xXDEL4P¹ŽÛwÖ X\«E ÎZ‡‚-EîÓ¸\®X,kMÝ`c'µ Æ}†Hs¹¼¼”Ï-0·ŠÝ_±³ÊDôø^|+ÞÂÄ€Û o rÍÌp—µ÷ÆÆÆp8 ‡Ã:0ï{NÌ î Pƒ¢{†È?‘òÆÆ†>ßjÞ«Š9$óé0¯É-HçÍ`4rf³™ÍfËf³år™ýBfÛÊÅêF¦¿™L¦~øAøzÈf¸‚'œ§Õ'ZÚšxMÙÓö^?Yäd‹}h4jµZItšÍæo~ó›V«%€æòO¦m+T™I »¢ÁQPó&ÑÇŠ‘½_xNòbG£' õ™'+Ï ŽOZ;â¡(POdÆV«µÑh¬®®ò‹b±Ø»wïøÌÉd²±±qzzzqqa³Ùž={‹Å¨<ãÂl±Xb±˜ßïÿôéÓl6Ãà€nÐ/¿ü’Ïç_¼x±¶¶f³Ùnnn^´F£ñêêêÍ›7¹\ŽOÞØØH§Óˆ±ŽÇc B_&x‡§OŸ‚° j¾¼¼ŒD"~¿¿Ñh˜Íf·Û-ðœÂ÷o‡–ûÿñ‡‡‡•Je:®­­íîînnnZ,ªü|”Úg³™ÝnßÜܤÉa2™†Ãá›7o–——QÊÈd2ãñØn·üø±\.óÞõõõh4 A;PµÕ5SÌ ñô­Vk0áN±XxqÁÙןÒÐò×ô\Öù®E¾Bá› ˜EÄO2ËE\jF*`Œ90çàÑ—J%¼EÁe°‰Ž²Ì™Åb°*åÛ¸ººÔ`3^>³5ÓêÌ­aÍOÎd2«««w‚9Ûðo=œ  v”x¨PÇã±,§¡×h¾jµZõߥæ‰Htÿ‡T€ƒXM&“@!Áªq`+ON¦@ 1ˆ Ï_Bc—òîñx|>ŸÌA¿ýÈ8ó¥›››;;;@€ê6Úþ¹\®ßï ”¼ú&¼?¨‹2AØð•c0ÖÖÖ„7cÛëõHŽy ¾Q @Ô›QWr`¥H„¡:«ÕʹEH…ø)E6¨å‰yˆ›››0x¼^/¨῾µµå÷ûwww18ÿçþg`{;;;Õj•‚•Óéôx<•JA»ÝFGÜf³ ‡Ã££#€Ü­æêã¤8â’É$§ý9ìy;ͧ££#²4~€xNîN§ãr¹¨ÎF£V«uuuõ/ÿò/X±À¢C¾V«=}úôÝ»wãñ8Nóuà#6773™ Þ‰ƒÁ ›Íîìììì윟ŸSHI§Ó˜|…€¶µ»»û·û·/^¼ßO‘› ¼ûéé)Go©Tbb(zÝn·P(d2™ápˆ£]4ÕtK•.μp[AÏT¼$ó|eV¯¢á¤0A—üö\.-RøÁS°åûÌ<4:t=ÙÍ鑸{AªQÿ(Å„'s’¥ÝämpqjÞ é°ì¿½¦W!Ë tÔ›§ÎýjN¸:Ƶ:Λš×òò²f@­ßÏ—Ÿ±×ëU[ërZÐXbSËf³²`õN§Sq¬f³Y*]"Øy@–Í ámùÁP…\? *LPžú«W¯Úív,[ZZÒ„È “\ßóãhÄãñáp˜Ïçå-¿"dFåZœóµÛm‡Ã‘ËåðÒ”æƒ\Ìïä|E„!¾+ŸÏ‹ƒÛFZN"Q¹¸IüÑù÷f³ÉïÄmHBN§ȸÍfc#ÆÇ€Ãï÷óÆã1„VJgµ§Ói¹\>>>î÷û¨ùò%‘H0¼x Ð¢÷‹ÅðJ˜N§èˆ£¬ˆl »r¹üþýûV«Eg ­q`®“c±Ø§OŸpŸ‚5l2™tÀ ÐívCWÌd2ø¹@K¢–8NéKw:\©šÍæÊÊ `@ p||̉üüü¼Ýn»\®Ÿ~ú .ðÙÙŠétZž«¢¾Z—ÿjδ³³³z½^(0BTœLbŠé¤PmÀ'Svê#Z× Õ±³b¨Y½"ФÝ(6®~¿6®JŠÍDQóŸ‡ß»¹¹Á[ëææ¦V«ÝË?A”˜QF£‰€E¶ »Ý¾ îÑårÍ+ê,rÉ›‰úR¦´¢ïÕü5'ãÚp8ìóù4ã&ƒ–?éâ>³:õbM0+tkñ]ê2‘œuôÁ‹ìk©0®Õ¿è~˽MÙ¼R0mü4ø˜Š’½[€¤šoÄ$—ß.¯FŸÏ7NONNf³Y»ÝÆ‹ju*Å^^^*æt&“ÙÛÛ³Ùl.—K} ´öŒàZ*˜ÅlÁhòË£AJaøÊÎ&qoDˆ;\ZZzöìöá2 V¯ÉdZ^^…B˜ßÜÞÞ’E±ó"d‰ûõõõÁÁÁp8t»Ý'''Ô!Ñ©s¹\dÛ@ÏÑÜCÖh4Q£öxÅ*N;æ§0<åCªÕê`0À¨‰£\.#È"²Ûí¡Pèóçϯ_¿þ÷ÿ÷wïÞœœ´Z-1gH×4!m···Ÿ•‹™ÙlÆJs “[ x$æÝSMïMÑX%#ÔŒut^Ò¿4—*ÙªŽÌ„ú%ºkÌêZ­F¡UÞ`·Z­h4:›Í4»ÅÑhT”³‡ßï¯T*ÙlVè9¾((ä‚îsuu%Vƒ®|¨`ÚŠ°¢˜ÉF‹±ÕdõÞ×H]¨Ke:ROót‰ÝpÕe+îïòòR?•±ŠÞŒæÔÔdäóy!v)Þ5¯¯x¯‹jÛâ•CWç1måÂ43~7Bç%ʼn¹@y‘w©o^‘o0Þ6(»ÓNÓÌЉÄÙðl6x†¦2¢&”2àÕ*>~®üÒp2kRMê”ÊP(äñxjµH¸‹Åb$A›.›ÍbkÔï÷=ÏÖÖôææ&—Ë‘p°ì1 üB¸êõzÝn·Ãá@@Ÿ ”É8- ( „…úýþÛ·o9±ŽÏÎÎ@HS¤­µ»» î ÁåL&ƒf#'''ý~ßl6Ô=ÁÝ¢­n³ÙÂá°Ýn‡ý*O˜Åggg¤A ›æe*Åb±P(®¥ŽjŒÂÓV‡f+S…D…C“ð»`á^T ÙÂm_+ q)GÊc ’§“Â5Ts –©]šE&Ã|dÁl6›0:Ün÷<¶‚R¹H3ƧÎyŸTÓiƒÁ ˜B6›MMÁ~øAxßžÓ}Óï5ÏÔ£É?þ%¾”ΰþÌ•úgÀíí-û‘NþñV¼¸R©o_]]ìjªŸŸ+p‘H„ŽŽf Ðkàƒ<×ex½btòÔåååÑh$(Öc‚_^^®T*4«ÐøaË •ù¹âëõºø:ªg`^¦Ó)ޱd€<‰ÞúÙ'''n·ûùóçëëë©TÊãñ´ÛíwïÞƒA§Ó)¤êÈfÜn7h.0Šèq!z7"­8J+ØyPSC÷þý{Ê€íøcN8Îi‹Å²¿¿O.e0h)žž&‰p8,¶ú©P)‰K=‹Œ4ðîÙl–ÍfkµšÕjE©r•˜Òš$q‹ÅòäÉ|§†Ã!èDœp±„@šÝãñð»Àõ ¤ÿÒ‚þ³šÛñ·ì j“\Æ"°|‰-HŒ¼èO“ ƒA–X&“abú,Þ¢y®ËÛB±XаP(DF¢¸d²ÛE"WÚ±(£Ïû¤(®®®òù¼:UW´ôOä¸z½Þ¯ˆ§(^õŽìt:eçòòò<ìÍ"Qÿ½zqŠËï÷Ï#«& ò[¾0’¸3[ó¼ò”‚°¦ó¨ØÄÕcÎâ???GÀ›íR“̈Ì|Òé¤ç„{~vøùóçE †2/rÞæ+ÿ»ð-UïÅ‚ƒ}}}]«Õî{2É”:˜¶êL6‰ø|>z”‚xh˜§ŠƒÍív£³È½),/ !åô\vÈ–= …лBfX¼*ÿc¯×ûíokµZAæX|ª»¦Hû§ã¨ÆhˆU:ox<žããcDî)'â>…Ne%d–òù|¯×€ñô- ÕÅjµZ­V¥,1dÈ©)±{ŽF#ÐEd`4Iï45ÎÛ‚h½„B!Eún³Ùæ^†»ø²ýô¼‹¥JËvÁåÆ*¾—ïBÅ@ñ÷=úðáƒØg²Ù¬b4ØC@0ÉdÒh4þ×ÿú_B…KœOìœ4 766.//eË4fò“'O\.W¥R¡ÞŽt^nuuÁyO¾Wkcžåîv²:—âé«ïMÓ›XÏ ×rÑ.—Ë‹0§†§25RóÒ§Ô= â'\#­V«(.©í“.ôä¼ I0àÀU_]]¡Õ(¾‹KÙ& á ¶Î'½³¬\,Ýnw­V;;;ãWÄb1Ã_°qùoMË]ÍËb±`Q¡óL…n&“Y€}ƒÑhä]èº]Š{€#ö…çϟ㺭ŸCír¹K‹N;=dZµµZmuuõàà R©€Â:99v1éýœžžF"*××ׇãíÛ·à#0«µÛíᾚPðX`X­Vt=ˆ ÉÞúý¾Éd h±XºÝîÁÁÁ?ü€¹{8¦.zuu…Ë"t¢áp …VWWg³ÙÚÚZ£ÑˆÇã¤Ô€îºÝ®\¦£ºÈÑ’J¥ž>}úüùób± ï¢u÷øñcˆ½$vÈ.(fµÝn___Ïd2¨ ݉L­ØÎÏÏY>( ßÞÞRìRlý ¶âÒ9™ÄmÈœÙ;/Þ%dËßÃAý–jµj±XÄ>Ã+6ŒµÆã±ÍfëõzÿóþOÈŽ`+:›ä³gϺÝn.—Cá×årµÛíétšJ¥Ø nnnêõº|`hŸÅEF¥ï¸ý°<ò^B êbüD1&6è“pÛåüãoÐôB¥L)f0Luñ\ñ½–³&¥îΗ<¦„Á` qfÙëç1Ðieá%õ%„¡¨îõz Vo*•ü\ªÉ îÔÑK€Võ¯v»}yyùùógA‡g*Z÷²“M7d,uŸOþ"äº_2˜ÿûÿïn·;ÄïRÌiz3L­@ P¯×q(@(Ïï÷///;ðoôÒØŽ›Íf0¬T*8T¡žg4Ù§NNNÄàŒF#ÑØãK iá“°4hSÇÁ)E§‡PFÔÙ΃ “³Ù,u|v±ããã?‚H6›Íûûû‰Dx 0îÉd²Ñhx½Þ~¿ŸO èÛû^__ÓyÖ¸ÐjŽU<¬~·Û ò^*€Åø‹)MÂÑh´»» -WP¼í ôšÍ&j°———«««àP8„H•è 3¨»| %!çLƒ0h¥R©Õj› ùÍÍM(êõzåry6›íìì„B!¸Ïù|ž—®®®Ðºív»Ng<38ÂåèèígQÓéôíÛ·Ùl¸¼Ñh¬o4?~üÉW>>ˆÆ âŠÝYA;ÓœŠ"æs8ñx\ŸÀN¿Ys3YðÂ…‹‰¡˜-där·Iþõ¨/ß»´´ôùóg zì3Õju<C÷6›ÍPˆ8þéWaåÇœ„g&P‘|`¥RAÂcÁ-ΠÒC`b,¸5)~¸¼²t.jš•ªûJHè ¯Q}Z $‘Ïçõ­Ÿš•j®åÃ. ê*6á€bIk»ÝîV«¥YLPÛPB bÒ‹³S‡„Kì‰Dº¿W_B.a8Š€VƒXv»]áédrâ]ôqåùÉ¡~yy)vŒX,Ön·Ñ‡t:¸Mú|¾Á` WzÀ¦Ï‹ËG,ëõzrf#sóïu©p+•Ê"eÕyˆöRu†Wy8 ë E{ ¬ÔeÄ¥¥¥•••;[ý², SpÙDªaú²óšXÃáP1šD»Ó³Ù,é‚Õj•-¥f)Þ¥ŽJ(lú|¾yu!ÍXC}µZ-ªÔšä—è3Pô·å°—óRQXYY!ÈR¼”Ïç5\F»¾šÄȆAKö7“ɈÄŸ:às@`ccCXùVÓé´<°‹“¤«Õ²\¬¦àH­V£Ë"v €¹ìÍf‹ð¨ë¢h·½½m6›G£Ì'Ê\Ã* Ç#ˆ® ÑÆî÷ûív»ÓéŒF£Á`¬N`Cð‡¢ê¼8fT…B¡Ñh ð‡™–Bkgoo§v1ø©T ¦p¿ß/ P;„Xp>Ÿ§ªöéÓ'‘MŽF#.äõ(úmÈ/ MX ì‡Cži<·Û€Ûí–Sm»Ý.\áén*´}ÙLðQl r/@ßNqÑ¢ä .i$ q|rX ‘YÅa¦ÙŽRLBõDoO>ŸHyI¬K¥ ßãñÄãqÇS*•B¡•½£££x<þã?¢cÔétÌfs8ž'è§¶™~À…X­æK äÕ:o×¼ E‹g^ÛE=´[_Šž“ð'U?¶;5oXBìz:$\ÙíJø®ª‚B¡À¶Z­ÈȾÒQuncq> ü\d¤±þÄ.Œ*“X] ÁM{MÚ¡ápXáܪ¸19)ÙÜÜœ'¨%^õ\.—ËåŠÅâîî®LÓ¸±±±··Ç³SÜž0¤Q¼ÄrRKZmllL§Ó••îÁívÏë-)Îlyä¹s'•"qø›ÜÞÞ"Ïl–¯I@O?c¸ÀT™7€¥R)™L’B!`*Àœ£Ñhii©T*žž.--ñ9ƒÁ  ’úüôÓOÔ—––°Ž ƒ777@Àb±€w¿½½¥Çn2™h'0…c€uK—Á1b óósê'v»ýßþíß1d2>~üˆPÛÑÑQ¹\îv»Pš 7 ƒT*…÷p ¬~)¤R)P!«««ÇÇÇ`—åÂuKù$¯êÑCÆMaˆwuu WÞ®¯¯Qvn6›¬žh)ý^,³ÚbTþ—”ô Ô=Ã"{o§ ‡Ã¹\n2™ˆïZ¤Usyy‹Å²Ù¬ˆƒKŒÇc9`BS1“ÉÕjµx<¾²²B+áÉ“'ËËË6›“,ËåÚÜÜ GGG½^Os-h¦,ëëë;`+µHˆ?ÏZW.ÞÌf3b;ýµ/̸-|‘@g'\ÑétàZŠ’¨<( 2Íf“ãýN®á+·KØÝ.--e³Ù­­­Édâñxxü ½€oô×û@v»n·w{{«ð&a~Ì£Ó£AüÇp8lµZ¹\îàà@^cÌŒét*×Õ±Œ"ýeF[ýL+¦ÓiJˆðÓ³U aƒÊÏQ̘¶¹\Ž]RÔŽÆãq4ÝØØh4§§§àÊòù<€È®X,BP¥¬ÄýL&¼Ddír¹€`¥R)xF©žííí^¯—N§)’€ð ïp8‚ÁàÁÁ¨t•J¥~¿¿ººŠ9: ëF£‘žÓû÷ï±c§Wäóùnnnh‰¢ln6G*r #&“ îV“ÉüÅíííëׯ±fGÃõèÄÖÖÖp8ÜÞÞæüøYøÎÉÀ–`0Hr³¶¶öåË\BŒFc F…Báâ‾‚PIX±=Q»-Šì¼ › Ž+„ØkµZ*•¢˜Ã¼g®j³ÙVWWÅ’»<¬; c„MˆÉ$ôûý1D¾ËKâ'“I«ÕZüz"ƒÁ@°Á _Õ‰HKKKß}÷ÝnGÉÖ¥X,â)'þ^6œUTÒ¸õçÀ€£‘®öPѼC1"=Uw€onnì$@N§ÓKKK“ÉwmƒÄ"dáÙl¶E9¤,ì&GOŸ>­×ëŠçH[¥V«ÉfÇê oEqO&Òcˆ> :ÎÒÒR½^çƒÁà?üÃ?¼xñÂd2]^^"Ó€= ÏçCO †¬œ^ßÞÞ¢œ+ÈœØï`¹u:­­-„é0h4øÌv:ÍÍÍñx\(ƒßïçHÈÛl6=zt~~¾»»KC4™L¶Z-³ÙüæÍ›ÛÛÛl6‹»ŽS‹Åãñt»]dƇÎÀò0!ö~øðáßÿýß].×õõu:FQéíÛ·œ@™LÆçóåóùB¡ðË/¿üÍßü }«Õº»»Khr}}½½½H$¢Ñ(Å«ÓÓS\6ö÷÷é]]]aPär¹NNNÈJÁP(¶3yÂpt›&“ Z$¥RéãÇò\õGѲêt: »ÝîÚÚ84B uг±±! LôÙl÷Â=¯¯¯‹¢ŸÚãULBáB©9?ag/ø½,2W·Û8¡<€ÔúDܰ±±AÿïOú“Ñh©Ëó?üðäɲð~¿ßï÷?~üh6›[­ÖÞÞKÀ|>ÏB`É«Çö¾;­[¡ $ÃagÎÜùÂ~~8Ê*¸Ò¨?ø’˜"BZJSD¸Ã S€2Õ /½ób ÆüMü£\½Q0m¡âó ™ÓéTpfð†Ìh4noo÷û}Å©ðøñãV«¥J»Ý.-òãý 4EÈßÌS]‘jµì·«ßàû>½ EëX–R© lõ2üG±Å£qP«Õ¸rS8³0ÈÐ õûý(W ά"7çe¦Ü•,@¬×Òï÷çóùÉd²¼¼Œ6Ýþð‡ÝÝ])\Måç(o4P°†Läa9Žv»°]X,æñx+Ç“ÉdÞ¼y¸œD!—ËÁ2Á{‚/­ÕjôÉÞ¾}{}} iŸ<žOˆ$R-ÒG“ÉV©˜¥µZÍf³ù|¾ÕÕU``dÎÏÏÃáp»Ý>>>¦’Ìb>==µÛí{{{¤eHÙò¼hGÕëu˜›<à6ÌÓ ÃËãúú;`ÊG$mŠu%Ëçó%‰““Øl6F£p4&H‚RÖl6ív;ž¹bð›Íæòò2B¡ ¨¸ºÝnµõ‰Ü] #v Q'P“pÅ$DuWž·òü6²aqii !¾ZÝròptt$äZ­Öòò2AÖ<µZ nÕéápX­VÛí¶Õjm6›0̰”eh á ”‚W¨Ñ¹ÀË@`U˜ä**" ^²~œ ÏÃ;À÷Rì„ NÑhT“`$**Š–¸ÌJ{0©óa`M¶-qÉdF¡"ÏÃl6C‘s‡Ã¡æ4àÞ­XÒ^¯×jµÊ?“‹¢ÌšJ¥õ_jA‚§¢8oä8N¸VkfEr7(šfX(8fD®cøsž ªtãñXøb¸@^ņ…Ãá˜Ç…’i˜Š²5ÌSŠdE´vÌfs¥R¡ϯ3™LÉdÏ=1°,§›hÆ•üsЬCš(ŸÏSõâXåæ©Z”`§ 4™Lž?N8ppàr¹Øµ¯¯¯+•Ê“'OÜnwµZív»^¯÷üü<™L"l+œUP>¯®®ªÕêÍÍÍÇé-Ñ.å èv»ØÔâ…P,Å´óóóÁ`@"~~~^­Vùí²3ÊIbv‘}RÅÂÀ·R©Š™¹\Ž9‹Å™n: >ŸOÆ(ÉAX<¯D£[^°….//Ãá0?¿ÝnƒET+dªëÀÙšçÏ"êW:$\§Óéñx檅ç²é*fš¸t6kêÀd¨[]\\x½Þz½0MŠD"Á)e4ûý~µZ=88¨×ëûûûØp÷z½\.ÇŠP?N‡´×ëÙl6º¶³ÙLXëòD¹³ŠÇ'“I2™TC¨âñ¸ÜtÀErÉ);ÏS”V®bg[èp’4ÅtõJ™©ÀáÜÙ<ÿ/J[ŠŸÝjµ …HŒÀ:ü\è´rW‰øú1kzCȨ6ò(þ#8›Í¦( T¼9H”HfÉßu/ê®Éd’%9å‰D¼^¯ÅbAz€­Ùl’0á šÍ¦ü ÷ |w»Ý%€>:88`?ít:{{{FƒßFonnþëý¯¹\A&4ÛÜùù9¸s*!ÃáˆZ“ TrWU*˜ùrEËd2¡išËÝh4J|&ù­ièoß¾}úôé`0@c :çp8¬Õjf³o:ŠZ`ß­V+¢|˜- ¿ººâ@GFñ·=<<¼¾¾Îçó@4Óé´Ì…\__o6›0ÌÈ`ÐRšÍf;;;dd2¸½XËc¨FE"+¦Ï#xÖc»Ý.’Š OîÈ_6›M"ñp8 Ì¡Ûí"’+6¦¨9‡B¡y} }b¬8;){(J ®œ!B¯>ê šÍ˱L&S*•â·øœÍf”ø†Ãa"‘8??ǬäË—/È<¾{÷®Ùl¢$ j†b=°;šÝn'ò¸¸¸ çÛ­V+ÚšÁ¢‘«ÜÊ/=xC¶X,Hf„ž×1t¿ž“¾*9ŽœlÖ¬õûKŸLÄéóZ,¡PûÑy™/ý=$ׄæ" ü;°pÅãñE1(ƒhbdeµ|€ŽÂÜO¸\®Õ7P„D…àW/|-/Í»2™Ìâl;²1V®w5›Í; HË\]]á› ®~RZYð–“þ`YƒNA¯×ë÷8iÞÖãö¯×Ó§O———××× …B2™ì÷û𔬋‹ `†9Ά9®¦§§§BöB0m£Ñ(4Ì£££~¿ÿË/¿ìïïïììÀH×h4`Ôw»]Ú0¼E@ö…3[ªÍfD5¡²T*‰™æóùàMó¶ÛíGGG”1‘¿/>‘-Åb¢Ñ5 þô§?µZ-@ðˆª á)çt:ÁªÀÆ7V«Õޝ®®Ìf³€cPç™N§Á`ðððä Lbp¸ %DR&j*•"Œøüùs·ÛýôéÓëׯé´Z­ƒƒƒýýýƒƒƒy$qÅC¤îÄóe{½^&ƒ‚Â! ï=z‰D®®®ŽŽŽH£©>};ç^ÓIüµO· nS_:bk:…k¾¤àækj™‹—H†z½Çx ìïïÊúô‰„˜– K©×¾PEÐÜd¼âvuóBgŸÑyIÍêý–ëÏ2§f³©¨#æ8WЏCaò(¼…‡ÍåKR1À*9€‚n¥i¦^?h"È‹¤X,‡Ã|>zzJè—H$À¯ ¯×û0¡xPÝS£òù|t×E®&ÇtŠIó€ƒP! Šu©PÖ¡ÏÉa2™jµZ§ÓÁ;\ôEÅ»¨&ñdçN-sRº÷¢^'-‘HÐΤÚs3‘HpJ$Ä1™LHsw¬¬¬t:L•Î¥Ói2.H§ÓÉ +^ÃWF t}¢NÒ)›Í†CÄp8¬T*àtqQúðáÃåå%Îît‰È°éZƒAòZ$s@3ÒÖÂiDâp8|ñâ 6‡Ã1N)¨V*€…üÇãAØBT&ÁY0,Á`²0€TÞŒFã«W¯øùÓéÇB\†e>@:ݧžN,FŒI(sSœNçãljÄãÇ‹Åb,ã×¥R©J¥òî´®ð_]]ÍsÆaʈb}ÿÏh4ÊQ¡ælE£Q挼ՅÙ•ìiër¹èíÕj5(®°˜áÌ ÃWÝÈx<MX‰mA¬8ñD4T‹Nò΀fÇT\æí3wnAj[ígNv8½~ýZ±¿ßÉJS¸Fâ>Éd@²Íë]Éþ¹:óXÓyAA)м677ûý~6›,H$,K*•‚(¡Á`pcccss“ì ÚÁ‚çS.—›Íf˜‰ñ,ÖEdÙCÁQ¬«Eüsóù<§õâß%¬KéùÇãñr¹|ssspp0™Lp}•i³òÆtyy¹±±1> Š Qu´¥xЉDb<7 ¡u„R8« ã` u!å‚‹Ê@q‡×××Á`£<Ð, ¦®Ìø,QcR}â8üá‡gÓ‰Éf³“ɤP(”J¥Z­Fï- íììÔj5¼9>|ø°µµÕívËå2jxܤÃáàdòûýèÌ"AMØ[,_½zåóùÞ¿™ÂÍÍÍÉÉ å~Ø6›mmmBÍl6K¥R£Ñ*Ïš~~&“i·Û¢ÙÖnÔÛK© IDAT·©Ý1˜BŽW>Ÿ¿¹¹¡wuuµ¾¾Î¶(s-®˜zR¢|ôèÑ£GŠÅ"ïp8æÍXáƒü€52Ïq[s[€|"¯bìÁ÷©~IlJ¬J5(ƒ!U,v‚™„ûÝwßµZ- 0F#Àþ`kk+•Jíîî¢ÓØjµÖÖÖ&“I>Ÿ?88",‚b[± ¦À‚—&gÖ i,Èý…‡]Þ ï8œÞ½{wssS,öˆápX‡ñ«aô;–À+K¥ÒÕÕU*•Ò¡+ßù ìv»Â,¢ ,NÃW‚$ÅâPÅ···¥RiccÆÒÙÙÙÞÞžp¾³&œZlvâÔü2Ì84W—p†…ŒlHŽ2?wmm8k}}]^x Y&¯×«ÃW3©é‹‚c´Z­oß¾=88àoÄ-fŠß]ñÉÅbñââbccÃjµjî52D£QŽ\ŸFããÇIúý>+ ¦R)Îù~„;å“'O*•ŠÇãùî»ï®®®¨°ÑnyòäI£ÑÀÕœ wŽ£•Ì¥[°ººúøñãׯ_—J%’¤£££z½¾±±»°éÓÓS³Ù Ò/—Ë…B¡H$òÏÿüÏFcuuõ¦ápHj±X:ΫW¯ž KkµÚÑÑ~t”"1é¼(£ÑÈN1)BRº¾¾~öìå ÃW*Ép8Ìf³Ãápii Ã'y ï] 4Ãè„ÑÒäMÑàA‰Ê²^NKx¹e‹óF³Ù¼»»Ûét^¾|‰•˜ŸÂðTl ˆ¾kÎOûT§Óét:õ!Ôâí[[[Ÿ?v:‚ë"{Ä(.ñ’Zs€i/ÿ#Î[š·ÁÌL¥R iJ¥Ò§OŸ`|O&Ù€˜T¯×ív;晥R ™u!™LRàýµòKµbCÇýÃ=Z¤q VŒ•‡Bq2)ÆvÞƒ^ÑívÛí¶|0°_ð°qÔ<…¯¥~'3¸\®OŸ>…ÃáV«…qν "õQúüù³üÒãÇÅ„›Ç ¦ÃY,ó›ßllläóy8%µZÍd2íîîjZ÷BÄ3™LTrøõŸájª=¢£hæ©Çpuuu4ËRðs9„666¨äÈ?MNPúýþ<>27/ß3«Õ‡ONNöööØáZâÀX?“ɰð4Ÿõ+Üðd‡@1tü(§Ó‡Ë岸óõõõT*õöí[ñsÒé´Õj=>>®Õj777V«uuuÓäD"±²²Âó…«ÿèÑ£Ñhôùóç~¿ŸH$`³Ù,ˆ,þpXØÔ¾¤‚÷k·ÛGGGWWWHÒ]]]mmmmnnc3øòåËP(„.ªÑh|ôèXÿv»ÇS©Ôd29<<ŒD"€ñÿøñã?þHêS­V———½^ïÙÙÙöö6°…X,¶ºº*„~øá‡ñxLå¹X,ÒŠÃãêåþþ¾ÃáHÛƒí·@°ÈÝn——ÄYb6›ÑzÇ$[¢Æ®™ÌÄü\qœ´¬&IIãñx»Ýn6›ÿôOÿÄɤpPUžÜ'«X.¨¬¯â¥étz'¹'›Ír`×ëujóÖˆb'å»d~®N“øL&£ÙŒ,LHʆ¯VݲxŠˆy;Õ¢ Å}‚yûFë8Å>£9Á` ’n·‹ãy×ëÝØØ`nÜyß}÷°ÆãqèÞ÷>œ³Ù¬S(˜¶ù|>ŠÂŽÌÐÔ÷µ#Ý é0†óÞ¢I§%§â§®/% Ù.HóET.ú=p<ÿñÿñììÌb± S 8üñšDýž:²ÉULPÜ¡4ÓAAŒÕ$’ð©‰ÃáÈd2Ãá°^¯Ëü\yaË»xõ øý~îh{{›vÎÉÉ ‰J¤TŠ Å`0‡Ã¨éTb¡ˆªkûûûl ýÄcmµZŠÀVá4ŠD$¶7àè(Ø6 a¶%`ii) Åãq¸>‘HäääÄï÷2m.//Óé4%¦B¡€’Løᆌo$Áõ* y<·ÛMCûÕ«W•J%‹íììôz=§Ó‰‘.P“É”N§÷»ßû|>júà¿¡.³³³ÍÍMŠ“ÀÖß¿ORlLJcss󿿯ívÿðÃà/xˆÅb1‰t»ÝåååF£ÁÄà’“q`$ ÈÿÜí‹/‰D$á@•#˜¹:ð‹‹‹J¥îƒ”ªøõõµLÝÕ¹«W| XtŠ—¹8Å ú4™L úFM#7Í}ÜápÔjµ›jn·a-v…úôjÁÃSlw¸ü,èµ6ïZ„à,‡ÎštZͧ_¯×¬¥Ql³UÍ÷îà “ÐF£¡80ŵÛíÊG‚p55ü¹V´æwÌétRÖל:ˆÆó0hõiO GûÆJ¥Bü¥#lnn¢PyssóÝwßM&rÄZ­V¯×ÙGÎÎÎÔP=;G6Šc‰‰µ´´¤0¯ê“òKø‘zÑ<-xswNôH$Òl6uþŒÚ¦ð™žg’Kè'ÿ vvâ]?ird2ÒÂù›—ô •"Uïòx< ›y"¨…Ê·¡ø@™Ó=dÁĈF£~¿kkËëõšÍæÛÛÛp8ìp8>|ø€7}DSªÕ*Õ#°)KŒ­LÝ•iÑó.@ƒP W)n:Ü ¤X^Å‹|—æÕétü~?ÒoD©èТsL¨öˆïa='eÝÒ¿Ø5,‹>¼ßï/Øä\ZZZ]]…Ù‹Å¢Ñ("ÓÂÛ d*Ö×) Ôc„Š:EAÜ?Ñ´($ò/ß}÷Ýæææûoÿmuu5‘HL§Ó½½½ý×-—Ë”wDŽ%»Ôh&aÜ9²â»?Y|¿ v Á8“^¶@œ#|7Êù¨ÓêÜÌÇM&,ìÝf9ó®X,¦þ™¡Pèøø˜N¾CĹîüX³Ù,Þåp8òù¼ $ d'gäjRq8¦® W~ ™ÁR©äõzN'x6N‚½½½p8 u4É,6YʤzB·0ã‡äñx<Ï“'O^¼xñý÷ß'“IÔ"é$ûñxó°‹à^kÿ/½/ãV·|Õ¿noo«Õ*Ž£Ñˆ.®ÜcÞ£û©ó½ü;BpŠ@š)ÿ;,K:N§Óù|>“Ɉ;9>>þòå‹ì *Ì+ù.õÍT*b(âbÍ./Él1°,W*HŠ»+Y§E¬ ’!_I2ôÑ+¸”ºÝnáR#ûŸŸŸøƒÁ\.ÇR§‘£ó±¤¤üw³Ù<>>V\TS#‘ˆÍfK§ÓŠ›O-•JÑ"ç™ø]@Z)àär¹G¡yJ)Cs¡'4›Íêõ:'q6›…º‹9z¯v»=‘H ”‚Á ™ gÉÕÕU½^Çç‡Æã1G=g*]ÛT«U^ªT*¾ Ű¼2…BÁçóÅãñF£Ac¦Ñh°÷ ‡CÔ›Íæþþþîî.`~éÙÙŠ… Ã‘$PÌfæªÌêh4Š X ”‡dÛb1z¢ðèèˆÀ_6,f²qà¾r XgS£Ú¡¹ÞwÅcÂ`0ìîî–Ëå“É”ÍfïPląȵ¨\ÔLÄKù|žò ÊÅâ&£Ñ¨Ž?Žæù4™B⇋O;;;#û§ŸG‡Æçó‰ó©R©(VЂ› \±Ï<ì’µ˜õ‹„h¹ÝY½ûœÓyíøøVó¯…;µ&ÝZÁ››— ß)ò%Ö†hõó` …ÂÉÉI4E DÞh4žœœ¨E%ø¿@lc±X«ÕJ$:…é;Q.B‹ôTN{@(ª×ëGÊ[¼f‡«Õj kâ'©ƒf‰L‘(‹Û+M)~yy 9Ìpº˜ÏçI’Xu­V‹dB*òà'‰v»ÉdšÍ&@Ú`ThqSu»ÝŠƒÁ RLl.n·»Ñh ø{yyÉ7 «§““¶ `rH9t:öè^¯‡úÅÅöH+ƒAØ×××ÑháÎT*…¢h‡‡‡ §­Vëx<®Õjè·º\®³³3fãåå%Ëáì쌲0H1¶‡#™L–ËåjµÊ¯¾¾¾>::²X,XÄÄÛÙÙa)˜L&ŸÏ'&N¸ôw›#…€î»wïÔÀF›6›z2È3ö@õÎ%֔έruæí†wii‰j§%Èãè€ðE€Õ?ª”Ø|&“ V5ܘdù©T*ÔÖèÃŽ2|õ©Q@¨ô«aw²*S©” ç­û¦Jšï²Z­¡PH­ .ïuúƒ£ö%×®¦Þ)_±+‰¨ù¹ð‰Y2™ ~kúßGÑ °ÓÀ(ÉdR-©'_2u×ãñd³Yè–À±ÎÎΞÑB8??§‘`0VWW;Ô]X÷peàÖÈøô£îU¦Õ¤¹ðØ=§Ói*•êv»ì#ŠÖ±üvÁÑAiMñÉâ3AO-¸Âô=†B1Ÿ0_]]eÙ$ ¬ð4±7š¹@QB9d…Ë2B@@HžH§Ó'''6›­X,†B¡Éd‡“Éd:^]]Íf³«««>Ÿo:"AÜ8Ù5g6©Ùl.Iq3áp˜ì9væ,¿ÑhÔh4NNN^¿~MUs:–Ëe4Oiƒ r®P)Ûí6ŽM€è<º2£ÑèÑ£G$g‘H„gMÜéé)jIP1c9ËS©T0|ûö-g6ül6k4á§Ói`#l€Ôå‘7^¯×h4"Ž…ÎÍÿøGŒ?äù D_¤Ù¦t jË7âÊ4cð‡½‘ž®,^N²KÞÌb×ä« —'$j²!èMïùEpò»®¯¯Ýn7i´üÔæ1m¼d>µš·»²²rgçX‡í«/Eq'XópºÑjµøAÂÕtÂu¹\‡øHá…ª3dä}2gí¾8“ÉŠ¨æœæ%Ôà¡•€HY]]%ßÝÝýïÿý¿ŸášÃ¯{òä "˜‚DÆ„fjʆLŽSŸà²Ä2–‘ß24CĤÂñ–CQ½ÈeëRñDèͲ}¨ï©›/o†” "§ä%a' FN‘ {½^µ°ÀyìlƒDf¼ººâa]\\Äb±³³3l°Ñ«Õjf×ÖÖ¶¶¶ü~½^ÿýïlÔzäNÐDò …˜ápxuuu8BËÛØØÀ½^¯cLþþý{“Éô»ßý. R5µÙlä1ø£÷z½õõuŽ+Ô•¨Ñ5›ÍjµÚëõB¡P¹\&¢'ëâ¼´Z­Ñht6›v»Mþ4ñ´EÔyii©ÙlŽ …B{{{ÀÖ¡²‘¯ JÓ&“‰xV1¼f³ymmÍf³ÑïD´Ó霞ž‡ClvŃvËår`hçm1”¿.//Ñä6HQÍ9cø6î}/uçŸ5‚ù…~KMqd2)\r ÃÚÚ&¨¼4/•Áq[f’`ÿHZáŽ}ð7²_5ò¼¥³ê ÅÆÆV¿î­.t8ýüóÏó¶3MNŒþTÖ„ ¥ìjjµZ‹Å"µZÍ“i^!Uf Õ¬3²â%9S3™ ÈcÃWõX¤|///9hkÃÙTlj'\AU_ŠJÚõõµ&tP“Êʶe±Xž>}êv»>³šODáò)Fo8&“IrYýˆAt‘qâ±2†Ü¼¢$\ƒ%Ç#$e···£Ñèùù9f6Šï¥Ó«yT³øõ‚Õ¦ÖÁ±=›Í677QØËf³õz½T*³Ù h2BõF£N§óáÊ·øøˆ`_àÈò Xí…EzЧOŸz½^$áœH¥R···X:á‹ÅÀ"†B¡ÓÓÓñxœN§Ëå27†¨Ät:õz½Ýnw8 …~¿ÏAH§Çãñœ±•¬­­}ÿý÷8,ìïï///G"‘J¥rxx¸¾¾Ž„Å¥n·{{{Ûï÷77798WWW—––ÄÁ°±±=Ž-5#tijc]°SG"˜.¢eøÊÍ ‡ÃÐÂøL|Ÿ©JqÔ¡-CÿÕ~kk«V«©¹ù z¦×ßk³^¼;‹bz&“AX}žœ«ú‘å¥).Š–,Ùl¦P3Rl’ yu¢ÆB¡€Â²ÓéTäL‡W1†šu9v'›Í¶¼¼¼øÙ/6IM3nÑûÍòo:œÞ¿ßO¤Ëª¼ w8ÙÕ”’·Î§ùý~5ÇÈjµ*Æ}Á„šj ãÞëõ2™ÌÕÕU±X|ùò%µª.Â2Ê'Á£LV=;;ÓÿF™Ÿ«Î ðÉÕñ¯¡%gÞæææ›7oø½‹Ûû>zôh<¯¬¬aÖ’H$p.Wô„Å ˜Íæ­­-p8>Ÿ˜¢r+³ÖÖÖÔ[Ñ«`¬ªÕªúž777Q«›èj®²b$/..@^‘KÁ3EýŒãdggÓÂËËË7oÞT*¿ßÿîÝ;aìÛëõ˜„ìæ€ån* ±X,›Íòì#˜Û¦ÓiŒ¶··Ýn÷îîîññ1D‚õõu—ËÅÁ¹»» gq³Ù<;;Ëf³oÞ¼AW·R©Û ƒáp8“ɼzõ b,R¸ÝÞÞƒÇÿòË/årùââbuuõììlggÇ`0üøã/_¾¸èõz« ^ÅÉ—Ëåöööh¦ò«1µ¹¹¹ÙÜÜ,—Ëêз0¯×[(PYÌårÙl¶Ýnÿý÷Á`°Óé–©º‡²¤¬-Ïmyêò.õ”(•Jjf$â÷Â=' MbŸü™rá™&ìQ4ëH2ò.ÚŠïÞ½“·&ñs›Ñ9Ô?œè§ÓéŒÇc\<„!5?D}ZÌë±â Ò=½o!êΓIìó6"!¿ð<œööö„«éÝÝ*“Én·C\ðëeãZÍ‹#MJŠXìaÕ€ËËKúÈÉ´Ûít:ýåˤþÃá°Ú~‚ïòz½B® ¯ãAÁÏUÇbN§SöšÔ¼ìv;Mõ««+f!Ö¥ø?-Rk6›x‡süSz:;;S‹ VbñßÜÜ r~~.…Ûí¾ººb|FC¬éõz²é”Ú\U¶HÖ„E,x¡v(ïz“ɤ^¯38ÕÞÞÞ·Ûí?ýéO¿üò ²#l¯`<â9BŠDÌ›–ú›Ãáèõz<Çétj6›“É$ëáp8²Ñ£îj·Û/..Êå2P¤+PFê‡ÕjÕëõ®­­•Ëe!)2NçÛ·oyŠF£§\.g2¿ßo6›=z‰ûcèt777ét…Cô…ƒ#Ïãë…ÕˆËå²Ûí.—k0´Ûm,ÕñV¯;èqØ2]]]3Ddhyy™½Rijce¤+ø3§Ó©˜ øAèg¨)þ1ëˆAk^ÌR?(•Jêþ™Î»†Ã!ô d8æmApE€QÜéc  â“É$é Yþ¶;¼oðùÕsšX,¦oáô7žOêÃɬH5°¼\ä³ &Ü««a4éiëÿ™ÇãY\ÌÅIõ#¡> 0à²ÙlƒÁ`ooOõv»}Þv‰l ÿ õ °777|¬ü.E¡ïN‡@j;òÈ ¤X¶ZQ”Âè–‰í›(Ûáp`Ȥ8zm6Òã:ÈF‰D¦Ó)yÎ3y²ÙlÈ>)¦> JÊR.—Q!¢ŒFf0`²)È4ôrØ{½3ÇëõîïïÃyéŠyápxww×ð…… H«ÕÚÛÛ ¼Ä¦IL Ëå²ÇãùüùóÞÞÃ"O¶H$rxxøóÏ?ëí2¼$†Ã!膳³3ø`ƉD½^Ïçó¢ÿñìÙ3nøødíëëkrý“““ÃÃCƒÁ°¼¼|tt‰DÎÏÏ àxú~¿ÿ‡~ D6,‹ˆ²)§—ËelˆÅm#|þåËöò¿ßŸJ¥~ó›ß°šX¹ãÂ$¬¹@ŠéAêù°–'܆Å/»Ý¾´´¤þ.y¦)$y™„`)üñÇ_~ùE§‰‰DèjßyŸ RÅt•¯ÓÓSac/ö¨û&@ún|ßr©y0íÄö²÷ñ—QȰ½ ‡Î5NœF‚i;›Íd.Ѽ«Õj-b§„Cå<~ì3ÃWL0\K4úCs÷”é´§§§òÁ &9þ*×Ùٙ⠡Ìâñxl6›à)«Ã%Í—¬V«`}¾zʱ<N0|„ú8 Îf3Àý~÷ë%GO¤êóR>¨Ô\àÅ9zÇÇÇh•‚®„!XÃä:£ÑˆæÍd2YZZúòåËþþ>r ð¨D?o6›±Ë‹f/Gr‚âÎáZÑFÀ[­–Éd‚óË(ñÇâ‡`NjŢÑhüøñãp8DmöââbooØËÑÑ%/QQöät:ÿê¯þÊh4ÒΩÕjèè‹ï€ÞétjµZ$Éd2½¡õüøã÷w÷øñcî¼âT¥R(‹²…\bThÅ6äp8@BªÏ µŽi:üY¹º€Rƒ"0•-”æQépÍcÚ‚Žñx<ñx¥â¥y(øõªM«ÅÓ¿½½•)äòKêÄ&#™LþZÌÑycûàÒÀ¿Èá¤h}ÿZ—è.ÊnZŠ?˜Ç/9N5‡œdS3‚7§sWãñX¤ÏÑhTãîüù¿Êà `,Ä 4ãÁ•••x<®SQ”¡}&“)ŸÏõÄZB}Ï£ÑHì†ú k’ǤŸ&ŠïŠÇã°AÕA–àç*Š#¹>GO4ðD¯×ëÃá ÏPöl&Z­E¼Z­†BÁéé©xú···~¿?›ÍbÀ!×møÕb÷¡«×ë-‹>Ÿ/“ÉüÝßýÝù/ÿÅãñär90xôrÄIfÝf³Q\ZZBB ªM6›Å›•<>†û5²×ë½|ùòãÇÓé4þõ_ÿu6›¥`èñx˜ÉdÒl6‹GLwšrkµZµÛí?~ñâE©TBAUð.8³†¯„JèÞJ•qçƒÁ Ñh¶œáÏY“ü(ùãÑ(é‹<¼ŠN†bÀÿ“ð[.ð–Š­3‹M&“N§£©ŸÍKw®ñ¥¥%ˆÛ†¯EýåÏKòf»„Ú@³ÙT¤M2Ùÿa§Ý"Ú ¿âu' ë/x8 Û›_åj·Û¤D³p©&u ›TÖ°ÝnÇmSñ®yMBá¹xR,~¯Â×’SÄh4‚d“MryéÁOWǯÃ8‘H„Ãál6+R|>1ºæËy‹ÅÔG ¬I(uâÐ‚ÅŒß µ×ëé'¬‰D‚p‰çâ+ Ê«K~”2V‚Ÿ ?fK4ØlTçeì¯0¨æ÷ÒU®V«|W6›¥ÅÈ„ááÌ ¤”9_Q¹yðòò2ÃÂ-•J!_„ûN¥RÉår ÏÃ0 ‚P£NOOQO$ä.pÂìv{2™ùyqqAÐí÷ûIøööö °òc±:–ܹÈrðÕ%9::šN§F(µ×ë½ÿ¾ßﯬ¬`iŠv¿ß¯V«ÕjÕï÷3£L&/Ñ¡¹2™LþÇÿø;;;‡‡‡f³™ïE`#v4å²¶¶¶±±ñ÷ÿ÷+++¨ž«¯ëëk9ˆF¡¦Ò+¦Ó—Ëå'¨<á9ù Ã`0ˆ§¯ñxLÊÕn· …ǧhƒ ƒyåJ^’70Vv» JÆ_ážú°l¨sFÿüº›„û¢j‚}9¯AªxÞ‚4ÇK,æ;â‚ £é„«é5¥fÀÉw¥Iíï©¶ ½×áÄBÀŒ?sÁ€ ,vjvÅ„†'2~>EA©c_¸—i©p)ä9Rá ²ßñÊÊʼb/?pšâþ1÷“cmxÖ´š³Ù,ìZñÓàY ¿NR§\.—ÉdP«V«4ü ©íã-8fY,Ì8 à@Û„§‰DR©¡}·Û…ƒÜëõÄC¥E‚Q$1ò`0¢=N···±ÒËËËî¯$*TÞ™pfÉT¦Ói·Û=::ÂÞP«P˜ v»λðšyöì™Ýn‡ÕjÓUô5Æã1:~âló–›çD‡Óx<®T*`Á[ã3„@›X,Öëõ°HÎf³›››ÛÛÛ‘Häw¿û"Å‹o¬ŠåC¹õ^Vu ¢h©T¢ä Œû4[¼òtÒ\,‘Hd6›1Ÿ¡m,x§l«o IDATÉL[f‚ö™¶†o *ÿ¿v-äçôë^2_Õjµ uB-›W†ÃaüLu y …B6›mµZbð.qzÁçP{2jZë¾²\ÕÿžËå…¸É|>/'UìÔ2V¾Ö××5ÉLêÙ ði0ÈÓšjDw9«S `b~¸¾m± Ô¥Ói½¹&JÁö¥Å"ÈÞOŸ>ít:´XÔïe”æÝ!ÌùIɤc¬ñxÌÂ~âñãLJãììLpºi„ÀK¥R¢—Ë#¾¸¸À­±ˆøoe@rq«Õj·Û?ÿü³Ãá(—Ë·¿|úôi0ôù|µZMÎÏDù¡×ë¡îAÏétžœœÔjµáp¸¶¶f2™HŒ®¯¯IË>þ …þð‡?à¸Á ÊF '–™L†4tmm 9Œ?Æb±ñxŒ©1<¼WWWØbqã„‹h,E×ÛÛÛíííJ¥‚H˜{¼ Mø¥³Ù T0$CEëE,Ów|X^^Vûb(ÄúÔ]ª RíÖÖyžÎnÆÎÀ„) êm $‹LÂÅ6ìN¢æºûÿ¯yÛÂB‡ÓÇåwâ(ú}&‡ V“ˆ£áF£‘ËåtB•Á` ¨Þ õ5QTÜ »§zsd‘\\\ÝIXs:¸îbC©ØúI22™ ى⽡PH°&Å¢ÿ-¯äõõõÑh$þ¢%˸Ûí®­­-rˆªo>“Ɉ}¡X,z<…Ï Í˜Éd²±±ÂBÿ5Í8høŸÇcr/,Ý´Z-¸b¨ E×ÖÖÚív>Ÿw8èIÇãõõuìÔb±nê?¥RIк=t®““³ÙüáóÙ|yyùñãG,ƒ©ÑѰ¬V«lÙ‘Hd}}}:¢`2N‘8"w±Z­§§§ ni”¶ÛíP(„Ÿ>XOž<ùùçŸ …Âéé)ê´étl7yd©TÚßßç``(.//···_¾|éõzöÝÜÜ„B¡V«…¹»ðz7H¦Â$ÚðÕ yrÊÂøFÚívŒá™3Øa@/‹^˜L&zãõz}ggçòòò矆 ®éÛ"7lȹçñp‹n^`§&üýxóæ T?±•)Ü×Ä„á64°¥¥¥ËËKœšG£b¯Šª¦º‘¼x*s/eçy—Z"àÿÖ¥ÿ(çuÍÅ[ô'û¬wrr"§ºápX‡›"Ü`寋>ŸOM§5hñÑPá]„¥ôE‘…Ÿ£âsø—\.§®Sá“Ín¢yÚáªG?€Ë‚„«þƒ ®(¦‹-U³4A ¢U¡PøòåK0,•JTuäY éüü\ó8ǘœÜNÀîg³™‚ºÛjµÖÖÖvvvðSЄiïO§SÎ'ý£TܹØÑäƒsŠyüÜV«¥¹þwÏjµf2ˆÖn·G‹Ö+ß¾¼¼|~~¾¾¾ÇcU|¬Íf#µªÕjf³¹X,>yò$Nã¥ttt$CcWVV„ww¯ƒ”L&].×ïÿ{«Õ Á9‰åSŽ7ž58TaNNN?~œËåX¤g³Ùoû[<\.W>Ÿ¯×ë­VËb±,//Ó ‚þ$þ'''P˜›Í¦xù|u2™¬T*ÈôíïïÛl6àš•J¥T*õz½R©4€  Î6Å‚‡ãñX8áZ­V‡Ãá÷û™6F£Qc…®FY´¾–––Þ¿_©Tnnn>ï÷ûŠ9#[§‹±³æ~b¸‹q¯©œR¯×©ŽŠTH-Ëdܽ SIJ¥{W*•è?E£ÑZ­vvv&hÝ ‘Â\8áþYãDe?-®@  P6zÀu§DÀÿ•4hAõùô§ÖÑûׯ_3ôx2ê׎].W.—Sl OžŸ †¤dggÇjµÊS”ÝúÑt:…“Ùd2A!â4Ç¢‹7’[ ‹d„;N,ƒÇ[° £1›Í2†œOÈàõ‡¢.í1|]Lòx<Åb±R©`{ˆ=j¢6bµZãñøp8$sâ“Eù‹ †cx0̃ãF"‡Ãq~~ŽL”ÅbAÒp4ù|>5 Q>5ÂE=giNÏf³\.ÇT¿ʵÀL01«5cSz l8©TŠR^¯×k·Ûü:”×c±X£Ñ Lê÷û«ÕªN×Ãh4&“IŽ1}N‹Ø‚@oQ7úvãÚû^@…þoéY­Vb yfÜ?œ~þùç‹‹ ¿ßvvƃÄB=WÂá0Ýo¼ÅÉ!/{§Ó‰è<À .^rYì2ãñXLwüit 5X…jRijS”ÈЄ6¢~§JºBuÞmL§S„º···_¼xñèÑ#¬çæ­7DKåtÇ99óƒÅ‰˜)(GNáb[999á‰ÐXZZÅ:Rlõ=Pk’Çmv|^²ÛíŠ0rÜëÊív[­Vxøb”Ün7™œxŽÁ` …_FUœ dú±¬ÛísCÞâ3MÝO±X,.P=,©RÄÐ\>ŸïææFçŽeDXhþ+8ÝÍÍMÇãr¹VVVÔZw^f³Y“£ øUÁЯ¬!\n·{eeE-¡¾0a3Ìçü2 «Õª&^Cž@lõ¿N±zñùFǯR©ÐGÕ”%†Õ«Ž  ‚Â|âs¹”d£ÑåÐëõ†B¡T*õÓO?ýýßÿýúúº¨BF¡*("SÄ¢¹BCKö]•ñ3ü Dfjh†?÷›wxÿä½IocI–&J^^Îó,Ф$’’(Q’ÊŒ!322 U¨Eæ¢zQ@V¡·Ý±z]? —4Ð@íjÛè·¨m5ÐýõPÀU™Y‘‘žžár ®™”8ÏâL¾Å‡°¶0»×x9¸gÔ{¶xèòÞk×ìØ±sŽï| öÙh4¢º3é­œ6ŸÏÓH[ýí‹Kðá°§Òèl$Iƒî[8j³UZ«Õ Ôéé)4æËáp(V|²ÊãñàŒ**†ÎI%  ×ëEq#Z* nàÀÝÜÜ öussŠ —˵½½N§ÁŸ‹:Ite¯×ëõz=z´³³óýïLŠ"MgIÀ0Z]]u»ÝÀ̒€u‚©D(XM¤Íf³bÝÜE*.òK•7­ÄnÔ«¢µD!ˆB쇈îh4ÊårÅb±×ëU*¯×‹"ÂOžŒÇcÄîQu5Ífs2™ÜÝÝÝØØxxx@0ª¾v»Ý@ @; ÇÇÇX„dp¹\H¬b"±È#777>Ÿïòò’ˆ—–è„Ï绽½Çã¨8‡£:µYív»Àn·Û„f)•J]\\3åÈò®Õjäȼ*ˆÜâKA}‚ô¹ëëk‹Å21,<†¬7¤kâù©ð3…ªá8=  m¿ß_.—×××ïîîpšõúõk”iµZ‘HLN(ún2™ …HÉöÄÑl6Ç···±ív{©T‚øý~EªÕjH ‡Ã ‚¿¸!é<þ‘J¥Ó„È\Ñ<ÇâÈ &ŒÍÑÀ.ÿë_ÿ›·vm³H#o¡Á—¨âX¯×q`¡×ë­V+ŽñÀüÛï÷QsRqkAê)Sn謚] ñ»X¤ù]\czÚT™y—øÆE^ªc*D<{ö ŽíÎÎ@ìõzýÙ³gX{ŸH0z<á)ŽOÜn7á!ûÖÓ§O777#‘–ì;†ß¯×ë©™`ÀWBÎíEïɃ‘ßl63 \Þf¡ç›Í&ØKAD$IR«ÕZ__ì¼\.ó¶¹¹¹»»{~~ø'¢R Áƒ7P¯×!pg777¡ÔªÕêçŸÎØÂF£qccä¿ „ØÛÛC¤ l¿Š<ÓÁ`Ö(Øäðù$,H£ÑˆO›W»ÝFíŸ×¯_ÃýÇ4†_Æ`dŽ÷Þ}÷]zõâÔ‡(€½ºÝîÎΔ }¯ÝnGYOØûŒý>qþ0Šã‘DP|ÊOÐ2ƒKøvžeÈÔ™ÅhàhŠP<Çãñf³¹»» ¦Á««+¼GÄ›››áp¸P($ Ìæææ&°Ãø4̵ÕjEFÏ;ï¼P-l¸­´À3;ÎêPI|¾Ú‚åÀkO¤ CK ¿ ¢  †ç3·ãñ88ëq YV¡Pèþþ’ÓÐb±ÿ‹_üâË/¿D†êåó|X¢4²“©0Schµ5žúð¯Ó:{îÏÝ\.×O~ò“ÐzZ5!âÅ‹‹ëëk½^o±XÊå²,Ë|º¤-#üÅ$ Q»íím¤±Fëììì¼zõªÛí~ï{ßC6çíí-aúÒ(Ü4,sÜÊçOóÑê½½=Eˆ.³~è.1 3†òÌLÀñCJ\15PQ½^Ïf³°Ç!Ö4K R“ARjdQ_\\”Ëe×0„¯®®†ÛíŽF£pUA Eë‘1Áƒæà\„•Ãáp½^'Ð]z(Pz,yįõG˜åóy&­€£!' ÚaEàT ¯%³ #7‹!dƒÂAFHI%8kB%Œ ÈÖëõKb6›Á~„cÐïâ{­V+XM{ (Y‹3'TGð}ww7Ÿœœ Y–ÇÙÙÙÃÃă©¾áp8’ɤÏçCƳgÏ …ÂóçÏñ³P(´½½M2ø¡M|>ßááa2™D^¬ª8yà¶¢Š´Z­[„%0D`†¤‰˜Ï„vvv˜‚/Šáp8D¹V«5+.¬û©;“J”èb”Ô ËåÝ0RÿQ”ÓT«Õ°™1¦’Ž#­æiµùø0¯hëa¦IípK I.68ãC;žj¼o·½½½¹ÿÎôòE²,g³Ùããc5êRµI¯×g2Ô&§ãñxooÏï÷ßßß‹E ÝßßW*I’šÍæŸýÙŸýøÇ?F̰¾p8¬Vmˆ€7 æW÷MÙf~.ùt ½^ïõz#‘ÒåIdœH›C#Ù©TŠ©ÈÇ£e±— |ªïèÔ!ºÈN¦ÿ‹ÅÈQùd2ÙÙÙ9::B2ôÉÉ èˆnnn¾øâ‹ËËK˜´Ýnwss§&WWW¨•€Zœ<[,,­L&ä`ÑýÇØ"ÆBÎð˜_ú|>§Ó &_”T,ΚÙõ™Aà#æ±X Åô\§Ñh ‡Ã×N§CД»»»Dt±Y‚O¯×#2›Í‚ ž®ÅbA °>[ÚétR©ô»$IDæ‘qW€gÏÏÏÉ„V«Õr¹|ssc6›kµÒĉÉçógggè^(}­ÎÿF6iƒÁ`6›¿þúëz½þË_þÒb± O«Õ¾òûßÿ1[l¢÷÷÷ Ï€ár||,>ØP ZòãgN÷ dõÑ£GˆÉ“žommñœ¶pâIY ³ðQ(¾tSµL+üˆ ßÔ*Ñ£Ñh4G•@ ær9lTÈÅ’ÜÝ݉BSqûÄ0Gׂ«EËÉ Ó7ŠçEº<‚7¼Ë~xx¨©¶Þúú:­¸F#M›-n¨'FÇ µÄa£Åb …BÈ}²Ûí£Ñhmm ÅŠ<O8°ÿöööææFmÅbÈv¥-ðhÙ½½^/òzÕ2Ôy®¢)Çp¯)ÊœN£ÑH‡}“É$³å¿IÒ¾ÄØ7 X‚f±XVVV ß­Vk«Õ:::B¥$Y¼÷Þ{ÕjÕét¢Øh<GQdB%ÐK'aò+vž¤k‚ã~AóçBf€)æŸø°Ú@‰¯Øëv»kµC“: îïïh¨"‘ šr¹Ì 4·¶¶Z­–Ùl†SЙâL&s{{ ÀÑhD£Ûí"äH» ú«×ë½^/™L …@ dž‡£»üàÁ`kêöö¶X,†ÃáÁ`°ººzvv§‡I½ÝÛÛ#µ±”îîîîîîsqss#IR2™„PU«Õ““’ßó9Ä >ÿüóz½~rr‚Òæj’¦]Òªd4ñìsŠœ¶ÀO?÷–eR9" Z<ŸD"È…¡@+ƽ@I!·ÛÝn·Ëå2êÝaÛŽÅb¡Pèúú`ûÁ``±XšA’7ŠÎaÀm6ÛõõµÍf#²Ïç³&ºrccÃét¢Ô^4D‰à ­V+b‰Ñh´T*‹Å|>ÒG²,ãf³ÙŒÉZ ÀH[z*ù¥ªQc,¢1dYŽÅb›››|ðÁ`0@µõEú µe§Ó‰D•Á`àñxàÃ]]]!¦ ?€€v)ÚÓxà‚:Ø^õzûOmôÎM¢x(5[ž¥¸s[æCó›“&Š*<¦Oq—ìr¹|zzJ¶Ð^¯÷ùçŸÿö·¿ýÍo~CޏÀÊÊ Œ-,IîôÕÕ´÷Óï÷˲Œ»Æ[<CÍ bSzÕ}S…ØtD!ŽF£››«ÕŠú¶±X Ut*”—‘HœC™LgQOŸ>ý“?ù“>øI’$ÞssÐÏh4"$o(Ì£û†»݃DV9+”á¼Þ™HM¯"~¾...àxñš“É„ðÉ*®»Ý~vvV,¦Q¼ĵ4ó¯^¯___Gm †&µ\.C¹#ÝV‘Ó–™8z'¶Z­Èü†Ç†¼€b±Hè˜òTív;xÐ@‘;¶á½½½'Ož^¤!1‚‡ijãù²ù§Æ~ªÕªÇã‰D"©TJ–åt:í÷ûa –J%EdY>j\†2ƒj@‘H$„ |xx899q¹\H#J¥RH7À ]–HÎx<é-ð¹^¯—Ð|0¦$ËJrü¦6põ*."PÉorŠ¿[§Óyùò%9Äbé¥}˜Ù§G`2™œŸŸOU)Ä ‡Ã$µ jõ÷ÞÄ1•ØÇ¸¾¾ž\ňS¡Pà­à.//—E1%1:‘qKAù|^–ed~¿g>W–)À›½^¯P(¸Ýn‚´-‹À‹¨yÄÀTñŸ›éƒn@l˜H…I@‚4"Uq›¤Á=ŠÒ eþPæÕ«W××פ 4`1.—kww%À­ P=RŸ‘ÐÆ/¾øgz‚a×ÒC @!Ë2òëp‚~„$——cf îÎÎÎáá¡ÀÐŽÇãˆÔcm»Ýn€4™¾ñØœJ¥€Û‡ƒH5>™ &©ˆÇZ­V0¨:d«Ò+¢ÕjiQ4™æóyÔ»3™L©TÊãñ …““§Ó¹¹¹ùôéÓ?ü0™LF£Q`Þ“É$hŸ@ä‡[­­†p¦h6›áöÑcËÀŸQšOmûØÎ½^9¤ò:}Ií¤Jmö—µ9}ùå—?ÿùÏó›ß\^^âê ½ºÄÝÉårçççX†Ú7)Á/.R"@K†‡Ó.Øhlþ‚ 1vfÝ- ö­3§¯¾úJms‚IE€î¨XL¯ð96'h‚¤R< „§8%R‹5káü¦ô0¼= âñ8!j#„Ö‚ÅO·­­-8.Õ&\zRQoÁ7 ÃèKëëëÀa {eee0ììì N’ÓéD@e7¯¯¯ïïïkµÚóçÏQüŸ¶v1ìH±CÔO$ŒZ$V ‘Z0Ìf3j!*¢ÿ0P[[[–ç£Ñh€BÍ ¦ >ŸGhÓŠ|¡åyFŒyc,B a É%2Ãpóâ‡×××ÉGM&ÔI!̳¡Phmm- îîî‚}£×ë dL¸\®óósÈÍ‘ ¨5N –‚Ø!$ßåñxÀž§»ÇápX ƒ Qñ’`sR„-7¸GÎ âÒßB¸¡é)žC•3L¸Œ¼içž&ɺ# Y$s0çgÂ=3t˜áÐY ¦RL^©öpzòÈ|`Þ¨–{=Sú ÃUªØC¡ê¹ ƒ©I¨j¯S×ë)³ IDATK8$t¹\@¤ké'r%ภ,/ªd‚y\Íf‰ËívÒ.— |„ EØ0plC6N¾ÛðPùh;c*]= à·úý~ @'äyó2“H$jµš,ËðC/+*&†™1­è‘ë`Ÿ¡þZ 3üü’½´Ùl‡‡‡²,;N`¨N ‡Ã0#Ø@ C¡P( ÛÛÛ¨ÀDžŒ4H$ôoll Fm¡0l>$(2‡0°ç )©¸D€ÛSäÞèÎ4뻀f™/Ã{V}2_LìààÀçóMuÅÏ\4ðÑ,÷™¤ü›ڜPð7öyæ=ò÷••BxŠB¼Äœœ›êa ¢n¬V+O“Êýe„;˜»hòJI’2™ jîÁE%ˆT†+6‹ÑÈm5pM?Š€ê Èü¹Ь†JÆpÿ믿&?FŽ/VÔG}tttÔn·¬KlZ@J"…GIìJ¥‚Ã^PÕѰvþ[h./¨q%XØDŸ¨Šßï';"á)Üq°'Ä£&„8Ö"—ôzýþþ>f9 ‰ƒ@‘ó—ž>|;d†x0: iK6N¤tÓ]Bj%àÉxæx<¾¹¹¹¿¿Ç'“IdBb¬J¥ÒÕÕÕíí-€}HQã{ˆÍh-ÁH§Óô„À)LE†pàb$Ò$uOÞjÄ펎)fø¦iK‡‘.ü¼ÌA®Ê¯VÝ\$­ŠÛžX›idÂ-—Ëè¡Ïçóûýs$Ç/N¡[­V÷ööÄŒ}Š ƒÞY“É$á;…Ç#(‹]&‘HÐ2ÃoNú¿þ»ºÍ×ÌýráwÿÏßÿýß/åhÑl6ßEá™ù¬ØÌäV#¢² ³äÎìÖÖÖ«W¯Ô~àt:}>2m຺º"¦®Á``( ðÀl6ëõzÁ>×ívQ&•%Òøs½^ï÷ûÚÚÚ‚†zþüùÓ§Oó›ß Ð7"‘È`0ÀQ ­JønÌ=ûˆbÑs :L°™ìS•dôMícjª“‘4ÒCpiDSŽŽø{÷ööã »»»ggg›››ù|>¾xñòY.—ô£}úé§}ôÊ)ÝÞÞÆb±HÒO°‚°/¢â¸¢¹FÛí¶ÆÔj†%I((IõB£Ñèp8Ìf3öÚ¹-_à=§î78 Z:Ál6ooo{½ÞO>ùdñE ^y€Ûæî<2k åa=ÒFØ@bpO&±^E–ÿw„$WKûøãòïÿÿû×§íFõúåoþ¯ÿóo¾å9i¤¡4^3Fˆ–© Á¤ OgéEʳ/âÌŠ=tÔ§Í:zYºÝn8v !µÛí½^j~›ÅbLj8"šÝçóÑà3“ÉôÁà (.BŒ‹Å*•J2™4 𥶷· #·{<ŸÏ‡:``äœiPDÔŸ47˜‚\ðTœÍÌEQŒ˜Ù®Ôzˆ¤yàcÈ]‰DBPš‘4`˜Z­Ä)‘Hø|>ðpò{*­ h¬e·ÛÅ\ ›¦ÙlZ,T”@b´ËåÊçóµZ O¨vHâûûû ÈÄPñŒMuNãårÇ 7š­V«‘ñGŒEíÂáð¬åéPê¯Ó‚÷Äì#‡MÌ †R(Ý´ø"E4;“ɨÁH´tž!®eš×ëµX,‹$ª!Ž<&†ß™i⢈h„ŒûÍ©>zögjŠHð)a½ÛÛ[š9p¾†<øªSkCê ÀC€7p\J5IÅwÍgJ¨qhNµßÁ#x vé¾)º „ ßï‘.v\ðn¬¬¬@ƒ€(³V«1+¡×ë½~ýÚb±àQ²,»Ýîóós“É„&b°n·;“ɼûî»ñxü믿][·Û)8ÍŸ«q[2 °ÊQç?e0ÝSsXÖ××q4%ˆ ‘ªn|@› ½ŸöB£»FƒpA‘\*•€h¦y'“‰Ëåê÷û„ïÎår‘¤!ô\¨Ø™ìv»^¯GÕ;§Ói4³Ùì«W¯[H›/0ÏÏÏ‘gÖétÚl¶©º|êøD…Œ<.1LN ¦{VÛÎívCftßà=F£˜`Íf2S­Vç@õª=P‚)†Ú«XËòs_Í´X,jÅk´C\kµÚ²†N­á@gŽ =ŸÏGfŸŒí.Þ¦Û!"6‡ãÑ£GV«˜Á¥¿ næ»°˜96'µTiþ¨Rsyy)IÒÎÎΣGöööÞyçÔIÓét———Æ*ÂÜp‰  »X,3Kb@ˆB¡t:‡£Ñh"‘H¥RDq@\…£èEZEðšçr¹^¯wqq‰DV—ZôcjÚ1¡zRk×××jöÚññ1 Õ%æ–™ñx|zzZ(رÛí[ •ÉW«U²1£9ÀÔ«–J%»Ý¾»»»²²²¶¶†âƒáôô”јý~¬1’$¡ÐC§Óé¸,Ë<³2wðïF£= t­ýÉ%f©Ú´€p …  :Ù÷z½ŠÐT-ŒGºe£z/..€ö›é.šBŒ„Þ\꼎"#- bŠ Ü[£áH\œee¥Ó‚¡Vˆhj£g_ Z¥¥ôØï÷Ï· X²,¯®®F"‘d2©£°–so'LC%ì¹SqMÒb€]–_Ì@MœT3„¢×étÉdåÚ Â1Ø`C`Žè3R„¶x¹é÷û‹uáºÝî/~ñ ð—“%§ø:â€cG›xа3º š?>aÌØeáøæn؇?Y¯×õ•ËåVVVxJ¤p8 < À 4R©T2™t8wwwgggŸ~úéÃÃÃÎÎŽ@k á/Íf³(mÀœ„£î-Ðb±Ìªy§Î﬿ïv»´l/xnÿ&P½stI휉¨~-ùRúÜívµ#®iµÞŒF;€t¦^¯O=à_YY¡ËÇhW­:¦BÄÜmn.iƒˆzû Ö’fµZ­â3@¬1JÙãñ sz¦BeðAœù :”9ÒˆF£ŒÝ*ÞB1PDÕÀŒ‡üoÇS«Õ…P(ü<)Ym2™HYZÙÇc$½óÎ;_}õýE"8 tVÏÆÆÆåå%ˆ?øž¼~ýŸ) ªq+òûý¨~6‡€­®®–J%ía+&Aóõ‰{Nß5@£ÕjµšÍ¦Ûí~ýúu«Õ’e¹Ùlnll¨ †b˜ˆ¯«Ûívý~¿×ë½½½¥…®º\.þGmyîÔä;³—‡ollÜÝÝù|¾¥o6³îv³Ökàý´Z@ÕÞ%Å2YV·çH«côóÔøž¾mAÁX¤Ò¹ÄGóµ_ÚÚÚ¢ÿwŽh5¯ ^¼xñâÅ à´WWWív;8‹ÜhñCF¿ßO¥Rô^²f4ƒ*^ÆZç |EKt ›°îÒÝóx<Œ½ ’±X uhVVVÀ¦úî»ïZ,pK’$&äM$WWWƒ9Åb±X,Úíöt:͸³0»Á|~~žH$˜Oæw~ØÅçÆŒåN‹#3Š*LÜZ­ÖÜW­¥aFò=§ï!‘›wsssww‡´ÒW¯^-ª¯×먑J¥ƒÎX,FÏ>J "¹Fð´x<·@)Ú¢Óé¶··-K&“yôèÑ“'OèK‚†Ñz½îõzƒÁ îßHc” 1=‰W=P™ÿÞ©YÚâ4 $8?wk·Ûý~cc¬Äˆ`)6‹Å‚\pënî ;çDJàL Î,‹“ <:0úšÍf¹\ÆÆÀà:µ9"=šé°2 áéT†J5ºA3Tîííñ¦¶I-ŸøÞljÄööv<¯Õj¯^½B½0B ÜÔKÆs ìr¹Ün·ÇãQä2€V¥õµßïW<ƒå‡]ü]ÌàÓâ´¸Ì(¦ƒƒ½pªá²xZ-AgÏzc·Û¨{ ò¹‰D¡PXÊ"ªÕj@àì쌖XN‹¥Ñn·§òÌ2wÑ.#¹«Ýn †õõuI’J¥R("–V«u§qÂrFuqžÞwªaMíììÐþ:WÃí –‰$I=J$=‹Ê‚¥Ö1)KIÌCÞN ;ßëx=Chµ§W%§ f¨÷Ð&öêê*B®ø½Éd§NX ‡öDû ûö&ÞE¯Hå+æcì3«+Òä=:ª¬ßC-§\÷÷÷DI)"œ´WX‡~¿?£èg¿ß·Z­ýF£ñ/ÿò/$Æ(V»¨Ùár¹Ö××ußpÆ#þ•±¹¹Éô°ÓéÆÝÝ]ìU…BA’$ÅùbF‰ ù;n4 »»»äêêêª×ë%jH-ÐG8¸¾¾îr¹¦{ý’;€Í}T)¸±Ýn3­UüñÞÞޱI dÆh4:==u:LM<>LÍÔ×·ÛíÛÛÛÌK»Ýîï~÷;&nCo'ºo* “+N3Å*•.¤„×=<<|òÉ'¿ûÝïvxuuÖh4nll\]]AœÔ,Œ7ǵºô†½üää„ Ûívz¼^¯à´5 ÑÒx<¾¸¸ˆÇãHkDBæ"Üßß_VVäS\)ƒ¯É„&Ë2”‰8ÒÀ±5ÅsÂî‚þíííÑ BBÊ<óloo#éàîî!ïH$22-Vâ…BÐÝÂô›#ËDÑrFóçšÍ橬ÕLŸ‡¹Ùl6a»¼¼h¿×ë×jµ©µ777ID¢à韋Œa$"S<éÛH¬à9£dIy¿ßïóùÚíöÆÆ†^¯òäI&“!Eµ›Íæêêêd2 ÀÓ§OÉî‚b»Ùl–ïCO >Ytƒ™úÒLmêì3/J§Ó‘H„°ÓÒ—ŠÅ"úàp8666pàÄ<ªßï“ b~ÉvÈ]Ìåráp˜qà˜ï3$/™áp¥Ê岚åËsÚʲÌ? ’szzJl€Z/_ûºèø»\Dޝ]‚"Q}8Çüw¡d>ªO1F@³ÙŒD"0F[­Ö"õX9‘BF(ãÈ¢>Ȭ3Z™hLpI+zNº¿þ»úøoþ×ú/ÿýg?ûYrˆ¨¢¬­Ç癵éõzÁYÅ‚Íd2)Úo³F:-ukk pZÔÜ{C/M§ÓËšÊ`0ˆTÃ>úè¯þê¯þöoÿö/ÿò/gzÂöööÔß ™åa¾kšËd2‰ --‹-˜3ÒĘÐâzò @Ý7¼«ô f_û<ªM®à„ãM4¾ã{ç«q¾¾¾îóùPJ-Úd2e2EÊd2ìììhÏ CÍáp¬®®jü±8„³ Jùøãÿç?}õþëÿøËÿüß~øïþc¡T‘ý øÝÃáDAh¹\N ì×(ŠùÊ’$ùý~þÒd29==U»‹4_Íá²Ì`RÜc曋ÅBßxzzÚï÷Ÿ={¶µµ…ýi>ñµÛí‚}·ÑhÌZ±ÙljÝ(‹ƒÁ •J™ÍfÐC ÚÒšGNÇÄLè•@"'¤Ôț۰gm.— 5Ÿìv»Æ¼,ÁeæööÎ=€pDèíÊëõŠƒ?²,“}Ôõs|”ÇãA±Á[ˆ²Âj³O.©Í£–È6­gÞB³X,Ð'ÀMk\à´ ºººr:ý¨íÜý~ÿåË—Š©Òý~ÿÅ‹ÙlV»ÒИx¢QcqjµZ<B­E"ABÍÒó\6'*5ê¬Yqj 2£Ñ˜N§Õ’@ *¾D‡±©ÑvËFÜsfÕɲ,þ"p¡âß É—–#AMbàŒôöö„@}5Ióó €ß™¶^ÁÓB¡P¯×;>>~ñâÅgŸ}FŽ"‡à.Ô>!O`®ú|>—ËE& $¤årùM”Ñî!Ñ–#Átkß/éO†Ìx½^ˆ“×ëD"Øí°'1he_…2ó€î.øD0F£ÑõõµÁ` }PƒÓªi†™0so¹Aœt:[¯×‹ ¾ a4½?nF€Ô™ºö§ÆÁ­6 ØSõ-¯ Õ&HñïàAV»ëèèH ‡3U¿œssúƒ´ápxuuÅœn¯×!4›MFm ÌLY–Õ28—ÄÇZ­|.AÚ*2ô%„‹€µÆ¸ýÉ•JeVð6ªüÍñíårùúúúêêêäääÿñŸ?Þh4šÍæÕÕ•ÀÕžŠ´½»»›za6›ç¶×œN笱/2ÂÓâCü/ :›n€îªÉ Î'p»ÝnÓ–“v@%h‹5ÊŒâß Ê‚‡{¿åf0è¨?T“eÙãñ´ÛmÆ}!<Èó5P]ÓB(Id#RÄoŒž!A-CMœ¦¦fvbAJˆ,Ëj¡oƒÁ@Hk5mNHú…8Yi>Ôj¦F£l6ËœìÑ \Å#GñnÇ÷­X,"@Ío biët:¤ M*iL¶.F øsq’ …ŒF#ý ‡C&+Æ`0¨9—ÄdÄE{HçAÖ}S\ñitÊM’KÔ4–à`†?Ñ%D×ó‰“F !¯ð“"aZGñçê(Ô¹$IH$mee…T·›Úˆ8ÝßßßÞÞ‡C|FæQ`ßÞÞÒŠ†dukY¿0¢§AѬ©V«Š …B|lœ¡IM$²,ÇãñYçH°T—Ûø{ˆ¦Õ¦uZ 0ËÍÈGõι3SÖ0˜ÒÔÆVm±Hj¾$³VƒÁ à4L{®H-Å¿ …Bx—ßï_Vù"F£©¡U—fòÖ™Úødà:ñGæô—À~K u½^™ïñx¬–KV©TxpSquªl©p/ñíôôSL›Mõ&lp-âD¨´Z­ðVÔ¬±r¹ÌÛ˜8«H¥Rz½žù.xT$kV™QË¥FäÁþG-ÚÉ_̯ ®Äææ¦Ú+«þ““ÆR®V«-"&¶//Ï}&œL···Ý*IÒê= ÜC0G“5JçÎνk,¤h±XžŸïÉ“'|¸ápýü;í4ïïïëtºp8¬V;®Z­jƒNs‰š}‰-•J=yòD(Âðrë=b؃Áà|qén· ¸Õ»D–êÞÞžî0fËÙ ætkƒoŠšP´9ñÒáp(°Ýf–Þ90ßÙlvÖ?ØÚÚóWîïïg³Ù?þã?~üø1 äՌզ¶i+b„ gh,#©)™L†NF¢A¸â¦×ëéR˜å*°m§U¼$ 4 Ïž=S ;H’Dð¹S×*ü `œq€Á”càÏÙl–ßxæC7ÏÝ$Izÿý÷ÿâ/þâG?úɼ½½EqZœ¶ôW¿úÕ?üÃ?Ày§Ù€ÀkáÖÃ?x8­â(Æ^¯×ívé³åëë뇇‡ýý}f%Iº¹¹Ñ~²X­V_¼xAHoEküàà@¯×?<<Ã2Cµ{¬hzöÅjaY ;Ùµ«=H$wÑ’$éòòòÅ‹⯠K2 E"˜Y,vB@¬x꿨-5P<ÚL³¯Ö\.×áá!Œûd2‰Ýz¦Õj]]]F#ºÃá’Ñh4î¬F£ñðð·ütªfª \³Ù¼»ÛíB}O&ùÔxo<7™L777t)I¡P£Ýµd2yqq1™Lêõ:©sšN§™  Á$2X¿`0ÈWGu8à“m4ÄV* óo‡Ã!]|h}}\æšÍfdkÅK€Ô1¤Aj %¶H¾×ëñN7ÉD‡Â"_A3¤@í|ÀX^Êùñ—e9‘HƒÁN§óúõkÆT"¿·X,¨ÄJüd2ÙÚÚ:::¢¥”DZJ’ ].W·Û5™LãñÿE¡÷Ñh$Ë2ÍÕép8‰D¥R‘e¹Ñh0b¦×ëM&“×ëEnþ˜Ïç‘ÑG/=ô‘@Ý793ÉpÖŒ_¨Óél6["‘(•JÍfÓãñd2™`0X*•Ô*·òò¬†žµ¡B‰ƒŠS‹ ¢Ã˸Ëd2aRˆª™éزÝn»\.¶/Ø™vvvF£Q0¬×ë ØŸ]"3;;; Á<8ÕÞ%Xí*·×ëÝÝÝu:I’ÀûL?y2™à6ÿ^픓ɤR©(.rÔ7½|‘N§K$V«‘(Ö,([€¿hÿ}¯×ƒ±‹Å`MX,ÞðÇgggv»ýìì¬Ùl’|õêÓgŸÏ‡#1ò@²½ñ§ °Ý[º{yy %%Iž W›˜Q‚RŒ£ÑHcÃLq8žÚò.—ËEŸ‘Ð}h6›Ì®öòåË™Æ ÉŠ|–H—ËU«Õ¾úê«Z­öððÀ¬I³ÙL² ÖÖÖŒF#:|õê£X‰ÌÐÛ¿ÉdÊår>Ÿ/™LZ­ÖHñ@·ÛMxŒÇûï¿rr‡V“ɉDƒ³O€Ç » c31OÈf³sœÇÜÞÞŠmR˜%ÔÈ]Ÿ~úéoû[yÄf `R“~5›Í3­ z½>wº6Óúý> â•ÎmÎårZŽ… \.W.—³X,jwÑ2sttÄlº¹\NmŠ-‹ G@CÅKÀY3â„$ÅæóùYë¸+*q¡m­a=€pÅ›êÔ§@¥ZT›¿$IZž#1 œ‚¡jX¶ËËK°>3«‚_,HÞ¦ž£ÙíöÅ7ìÑhôúõk²ïŠ1RN§S–åÓÓS)$ *Õ®"M–ŽL­“wU«UÚ¢#ŸV«uÁ€¸b:L.—#cÒ*• ,ú\.çp8˜Å‘é!dFà™A–ˆÌ€r…¡Õjm4777(>äv»_¾|™ÍfNg¹\îv»@ ¿ûî»^¯—[Æ¥Fm*&dª×ëWVV~úÓŸ¾ÿþûô½@`¦ l™©?“e™Ù‘YÏCpÀ7„{ww+“6\.ا>P\@}j|ªâZVÍ«ÕÊ Þ€<‹F£ :Ôºøw¹\ž/QÈápŒÈÛÛ[gþîõz=z”ÉdéÅ…ÜŠEÅçú`I¹1„;µø¼ ºP %5"‘‘¬ñ”Þ%m \^^ ‹Á²˜›öØý3ˆšÍf½^¯𮊟c³ÙVS‚š Rñ®p8Üëõ´CÄÉ»Ä?€êŸ—ºÝnñbP£»EMÑáò—N]Áú×nK’Äô t·Pv^¯×ãñx<žt:}xxxoµZ‘±†» ?øàƒþð‡Ñh4Nw:äå_¤¨ ïïï;N,‹ÇãÛÛÛD½^^^¢£F•­Ef»AÍÌf3Ðo­1#xwwG»†ív»P(T*-°M@”ÌgkT\Îü*6 ¨àÌïd¼)&ƹ3¦I©TŸå[­VÞšLþøÇ?æý˜b±¨ø@‡Ã¡ÅÊt:ÌëÜn7-Zj/šAŨÕj¡PH»+­qó‡L:ÙÔÀ÷¿¹æõzùpq›ºPµÕÀVz;ߨ&±X —¬V«ÇãY<)Ÿh¤ ÂÕP ¿ßqqµjÒëõ«««(OËFvn€©‡ÃáöööÞÞžÏçÇ|g Ü€$I{{{ÿüÏÿ ãÃëõöûý©k7778ÖªV«ívÛétZ­Öf³9kÙiÇ{ý~Ÿùí+T£AmµZ‘Ö¸,1ÓØ¦²",Þ@¯âÕÕÕûû{ìñ ˜Z§Ó©·—Û盥vÎ-- 6 Ä–Û" C¿ß—$©Óéhôœ–ÞÂá°¸l;Óƒ“¨&Ðãñ˜Ž\u»Ý••š*µæË„A‚À¤Ä2ÿ]Sc˜ËÍî•e@&›±¨›d¨­‡Lt:Í'¹ƒB¡€8I«ÕÂ^ƒx#ÒÑh¸éõõuÅ U’¤t:Ýl6‡Á`øÑ~ôôéÓp8l0ž?n±XŒtpVU*•h4Z©T~þóŸßÝÝ ‡C£Ò¹mÈãRÜr&“Éùù9*ë µ‡dÃ2S¼²²ÂðYhi‘HDã]ÀkGõBœìv»×ëÅ¿‘ÓD£éßfãÕÂÛiDư;jé”-ÿ÷•••¥€/É€@ _½z¥PEÏþÆÆÓ“`0(Ër«Õâ;ÏPëb(hÇãäFM ÈÅZJ;£Ô²ùKÚÉú–ÒªÕ*ÃXÃ{¸&“i}}}*y¥iK&ø^ ý 5"3ý~¿ÕjÑÀmAÉê©…ç‘ñHÃÀ{ï½÷øñc&º»ººÚét`3~I+‚«Õ*Ê@”Ëe›ÍÆWa™L&8>Y]]…f×ëõP|~¿¿\.#¤S«Õ0û···/_¾<;;££Ç´`H’„u΋RO¡ôz}§Óa0Ýtà—þ‹5IZ­V[.x“×JÄh4“ëh·ãí³,· o† {ŽV¯×—¢ Ýnw(ªT*×××_ùR, IDAT~ùåååål<ëi³Ù,‹Z ›u!6Oß^m½Édr¯6"Œ8.‚dTk©TJ-èIoà)Þ_„ÑÑjµ´oÛŠ'=¹\N vwwdcZ&“Yî§6¤ ë¾ Ü­g2µ«ªt|ŒþîîŽ&;æ3;p›™ýëëëñx Z>RG6 Àîîî>ÿüó/¾øy›››{{{±XŒÎ_øä“OÆéé©ÇãÁ Ü&8kZœ677ì÷û`D›üét:dyÛíöƒƒ@#£Ñ¨b"à´ô]jí½÷Þ›[†Ãá"á–b±ˆPÿß³ÞÈkoZ&KKkµZF£1 L÷LÙ.ä!Ì_H0c¦‹ÅÜn7ø»g ë‘vppÀ,Ôq”HpRì2ôëXJÀl6§R):¦ 3Q×ùž9p$®f 11nÅiFü7¢˜a·Ûe€ŠÍår‰Ç%Ibøì™¦X}'•JiÕÐwv]‹‰¤×ëG£^½»»«Æ¯S/QÈwýú׿¶ÙlñxÎÀFø=j=ð' ØføžÐÑ6º3˜)I’2™L½^÷ù|ˆ¶¡¼æ'Ÿ|’Íf766R©ÔÚÚšÉdr¹\ N§Ó/_¾Ä×ÙÙ™^¯§ 垟ïv»cdµZA¢øðð ±ÌÁýý=#6´Ì,k‘ªE§ÉP¼Í@œâe2²$J[¤.>CU³Du§£ ÊŠÆèd2Aâjíïï«áÕ[2™d4†øuu¥4#HÛl6 sÒï÷…Dj£ÑxùòåÃÃÃÙÙcµÐ=ôx_SÃY3B8+JmÑ1¯fÓŠÙ¹PAz½^ ¶ÔåriIñÐëõS&˲ötßÅkÙ(‚p‰Ì‹EGQûÏÛò–²õ4ž+,ò›?TãÉ+µ4BxÊ ý;ß]âÆGB¡Ðr“àgz`µZeÜJ-˜nž"™nHþÖ"~˜,P—ŽF#Ü•ËåÆã1ñ:Ž`ß%³‡eY¾¹¹!³ïr¹hmÈ {µZ%±ûëëkr—€ð´^¯7›Í`0¸¶¶FêÝäI’$\¢ýEBw‡»Ýn¯×cÊh¡Ö½¿¿_"¶¯P(,I‚Âq ×ê”Ø“‡Ã!S€j‘¦¦hÁàQ½´ŸÍ!Ù¿ív»F–-m&Šäl6«1ý‡Ùœ˜#ñ@ @‚ªXá‚{Õ·¿#m2™,^¸^ÍÚš#n Rš¡ì Ú óZ[€êÕxž>-l' pÕápÌʈCû ³ºŒ­V‹¡.EªÙl’,äÒ$¹ívã™Ífs¹\¡P —ƒJî–vš •i+++[[[p¡L&½©t»Ý««+Q–v4!‰f4mllÀ×±ÙlpœN§ÉdŠÇãÌë´{Û`Ugœéííí7T»Äb±¨1|k]þ—Œ5Cï=ÀÌÑUšâ`¾¦ÅŠÜ[í¦ueeÅb±h‡¬´Z-µWû|>gö½^OP™ZUœH¶ž±WsÌ[Pè£Ñ¨ßï¿…lQœ¾ªmøý~›Í¶8‡Ø*¢1 ÅŽZ‹ÇãbuZ:gZW䣼^¯Óé|xx`èç™Í‰ÑÚEVíkkk Â\0JÃáÐçóF1™LüzE£QL-·j<  —zmm1«Iå¢,ðh½~¿?“4¢?kkkHþ¤§"Os8n·;ŸÏcéaÐÐÜèñxÀ³< Æd2±X,™LÆf³iDYª‰*¯ã«N§ßàM0…Y{¦Vր̬¯¯«affjð³±ßh‘m^ùKø_¦ ΙÆñÔ®  Øjµ¦êQ¶^³Ù$Ví›3và6Åãñ·S©Ýn ¼®z½®±.ˆ ަ.]VãùxaBF‹ÔÎmv4©•N...fÒª+++b§ðþþž”Çžª/€ÓŽ@F¥RI¯×÷}gg‡?kÝ­NºK{¥Š,j¼Ú"q€Nh;`0€¶˜—4žîÖçóÁcèt:F‡‘4ÃÝ?~œN§è‚Î:Š”¬µZ Ù}„=¹ßïçóù™Ž énMÌ¿0U0˜‘s4Om H^Ö‚]]] NçææF££ …‰y•JeY9-3¨?Æ)Fàg*áH—(Sûg³Y€ö樔ö¿='˰v}}ÃL„òü#í¼/b`%Ð_ÓeQ¶Ð=#Á‰®åŠPVZ?Öëõ¹ÇdjyJµÖl6»Ýî÷¿ÿ}Ç |îR,ñB0úU»Ñ ÞÌF£_ÝduuØ&Å©ÔÞ§Ó‹Åh"ÑJ¥Â#y&¨ÒøçïííÁÕ¨Õj>ŸAh’ˆ€–ð, ÃÁÁA,óz½¸ ŒT»ÝÞÝÝm6›ù|žyP“ŒS‹žcð‡ÃáÓ§OQZÉl6£îyoµZ …B(ó/i~¯¦=I’ö÷÷!2;;;4º€PÑ}¸•š¡[Z­3¿v»}mmMÑ<¬;øÖf³¹àá–Õj=88€ÂDÌ|2™h?~Ãi¥Z?g’ê©/bö9Fªc˜;ŒqâÇ\ãP¸ÝîŸþô§ÁµmeÏ Œ8×××2fS …B$ ‡¹4Ÿ² ‡Ãäìn<úé§ôoŒF£ZºŽÑhT¬Ï,•¥GØüâúA:@0Ôh-†Id:v¹\‹…Iº¹¹óz˜Í楔5¢c&˜ºêø!Íår3> 0™Lä{Ž û ž>‹Åeæï_ý5Ö¬~ŽÇc»ÝÇA²·»»ûçþç«««_}õ¡^ÌçóÈÈ7™LV«•é `Ñtç1z~¿ßï÷¯­­!ëÙ³g_~ùå—_~y{{»¾¾‹Å Ãîî®Ùl–$é÷¿ÿý|ËØ%©TJ ƒõêÕ+zõù|¡PÊdª•Ñu:«««¼`´ÛmµŠ×³‰Ð¥ª5Y–t]Pûw:gÏž ¤šBE‡ËS<+©Ä‚+Ž=E!î<ó(Y–ç¨×G‚X|êµjB«b]Ýßß½À’˜¯ÝÝÝ ²ƒÁ Zb0L$Pëj@¼¥ôðM7 , ¥RÉf³M ¡H’ÄdR¹\®~¿Fg=oo´^¯ŸÈÌ„AhÁXÐÙ]<í•i4j2‰ÌÀv»}uue2™´s£–¢¹€TT‚XÙív'‰µµ5«ÕÚëõ˜1_YYÙÛÛ3›Í<¬Âï÷ÛíöH$ÂèÈ !VÖ}Ãä¹½½N§ãñx$éõz@àý÷ß_ÒüôôT£ö,—ËÚ©7à`5B¡°˜°N§{xxPJbá,1{M,„>ŸO¸¶X,ÂÆó«ĵ‹t@’¤¹W–Óéôz½¤óâèp8<>>^âÐM飯[&Δ¼ÌåräªÁ` Åùµ4¯×»”ƒJíq^lÀf³™ cdYFm—ËU¯×q©Ýnƒk\ìF£óós&*íóùÎÎÎfåû¹¸¸ 8S\{Yõ¥x‡Øív/1©ÃDEÂ.ö1"€ÃL&Ž|:991Ä °ÛíH‹òz½FDÆ$}C10¸·Á`¸¾¾Öëõ€ý‘PÕõõ5 °¯Cÿ-¤;Ïï‘Ñhôðð¤ƒÇb±ûûû?üÐívK’ôÅ_ð)õ’$Aê𿇣ßï‹Ã\˜}Y–m6›Z޾Éd2™L*PÏ cEÍ%¼éPÄj’l³Ù–Èà³tÖµÖh4F ×¥„|òX`·Û]¯×;3€D§«xYöx<ó­¬n·Ûï÷N'Šx!™eý)˜}Ѷ:õ¨f¶ø$‰™& í®¥ ƒ™Nª¦Æ—Ûˆó'Ër0 ›››}ôÑÁÁ$I’$år9Y–a•R×t:] P4 yÆZÚh4œV{¤s·n·;S%Jσ_žÓ–™”Z­V­VM&V ŸÀí‹E¢LH«Õ:™LnnnPÇÆÒ hÍf³ÙlŸŸ#oMÍÔUì¹ ì£×ëÝn÷ÎÎN,“e¥[°¡Â²X,HP¤ã±²,Ó©&“) ò>Í„‹ÙWc5Å â¤"®‡µ 1Řn‚}þN5†V[­•J%˜t<§­šê  ÌÈ:ÊJäVKÀ­×둊mwwÀ/!ÉÔÈŒn^îr&Ûï÷+<öx<€†è4iß‚Có(éF#þP‘emmmww×f³U«UØJÝ>µÁ!F¿#kÕ`0„B!~›!$¹‹4Zœ¦Ž•b²,OBª×ë“Éäd2áîà*D%r’ár¹ z0p¹×ëEvÃêê*ŸÚpyy E¬¥¢²À@)&¬®®*Ža4Íår777www.— )|è’ÃáÈçóý~¿T*ñ "‰”J¥P(„×U*¯×‰Dr¹œ¢DE"‘B¡€dtÅâ{évص‹£_aLè¾{mV­5·–cP#U ýÒY_mµZÍf³– ýÊÊJ©Th¡ùf_ä91U MÕ”†ï‰ëàiË*×ÖÖp"7Àø­5ÿÈàp8|xxH&“ßûÞ÷‰D<ßßߟÉòù|j†R¹\Ö’c·ÛµT“ŒD"‹œÊªA’{°v1Ó‚-‹j§`Ī#)È' ><<äóyFÒVE!êb±—Á` ×ëaÂ7›M°ãÐ=Ä%wñ“…€ÏÓét’€—Cl!äï¨A~uuuqqqttDÀU———¹\ÙÛN‡®QY(Æíí-(C|’ñà p©hŠ}øDmÏZûM·9€ÛbÅ¥Xæ]æ\Ð`a,¥‡41­‚:[cØP§Dã«ì?çæ¤=šçr¹ëй9Sl‡AF£n·»¬ýI@ɪÖ677¡Ôìv»â&4‰!³²²B,âJ¥‚St‹Å45’²Ô†KÐCºÂô|æ'Û§ü 5ÖÄÇŠÐ1¡'3†$wVq¢} »ÝNx<ûý>éd6›}öì¢O‰D‚+!ù›9¤ÄÉòŠÅ¢Ïç£#cív; ÚíöZ­–N§üS,cަiGê¼` È¥v»M»Õj•GýêW¿:::"Í<Éà4-N§8'E!$Éâ‹…9º_Vù"-’–L&µÄ÷\.—ZýFÏГ»D;pbgkÇo©é™™Ú܌ۥRÉ`0¤R©Á` ñ4Z‘#MÑ&˜©Ò›ˆÏIûaÎÍæöX÷öö ¡˜´$j—ñL*Ú2Ó`! ¨+z@>ß ÕÉ@†¢ß~O½^G¡ëóóó““¢aX ønll´Z­£@Ìñ. 0öÛÛÛS¹¬¦ö]étºV«5›Íŵ䓼5 XZÁÎWßaвÀÇ)’\ÚŠÄ¥V«Å_B ;=)äÌ%¦e2™Z­öèÑ#ì²ÌTf2™—/_¢ çh4ŠÅbåFXq0}>_:F™8L´`™ìííq‘þ_‚aeeÅl6ÏŠ›!’Fk·Û É&Š -’¬¸Zk8ÊŠÚiŽ(Q ¨m¨qá¨é~ûáË)eòðð0_¥%H/Í;5_‹Åbz½ž¶&3¢Sª!Úœ´:_’4. ÆíŠ!®ºi8Щ&!åGœTù|>¿ßOÃh4Bÿ'“‰Çã[„` Â׵ÛmY–kµÚÕÕÕd29>>îõzäð’D‹¦îÛ(B†©#f¸ò˜4¾Ìd‘)[]]%É6ÕjU£È2(Hª¬ýï"¯ ‡Ãn·åa•'~&ÈŸ˜ nŠ™Œy¯×›šÌ9#‘ˆ$Ixàp8d„¬µK{{{´À./„>Ÿü=‰äóy€¢è¦Óéõõu ®È«›Í&Q âÅ…Y9=öü˜Ÿe„Kâô%’Šf³Ù€™UÃY‹'‹Ñ$è|¿ß§…V£ ”†^¯+“› x =€¸E’$ƒÁ0O)fG BçPw´Z «•(“¹·–ýý}qÁ*ígÅC_µùÍI÷×÷OÿÍÿúOÿå¿ÿìg?“eyŽœú•••©0Ìt:ýÌ´¡=n"¦’$ñîp&“™5øøñcAÙÿ©t:<èáÎÚ4BêPKtÖOfšßïWÌs»ÝëëësC PK¨£ëë¾ÉS`ƒcõx<‹GNè¹ÐWÔhðAé¢Gâ™}úôé£GfY–Óéô[^nŒ`,rÀ©¸Tµ4·Ûýøñãh4šH$f*_„Zïûûû~øá‡~ èâc²¾¾>o*=ûK/; h6›m¾×¹\.`ÚÛÇü?ÿé«ÿð_ÿÇ_þçÿöÃ÷ ¥Ê·´§×ëšn¨S‚aNÍaÏf³ØÉßÖ’H¹@;`¤xéúúÚáp{- XJðüÛÙÙÙóçÏyó‡ mÅ”$‰&G±Ùl.— Þ˜@¥2cË£zN§Mwzz: fýdÞÞT¤¨×ëFƒéÀÔF£Q°ÔK¥’7A©T¢ÜÀÊÊ ­ÈjµZ6›Ë ¢ÿ’$©A•=#ñt-•2ð@r¬B>™ž,I’%²Ù,êG §Ó‰RIÀ§k__j¨If‹Ù“éïšC0±ÌfóŒ±ÂçÏŸ£F>H ³‹Å¢ËåÚÝݽ½½ýÕ¯~5—rFuuuµH ½Ñh¤V¹ãM4µ*޼BfTn£Ñ˜ ¸ò-yšZñŒØ>Ì_‡X|½^/dìŸK# Oèå!Pm„ÕTM8ÈÄÃÃÃÔÄG1ƒªØváÆÐh4*nÀÍÊK—Ë …°c1 \: „»hóùäZ­öv(œ§ÆëJ¥-3F£q?•JM]êS%MG:„ 2¸\®ƒƒƒD"¡†!ƒƒÅp.[­V’“ýúõkbr "ðŠpÇc0ÈA½Ûí†z¥sd}£SÞ½^¯ ¤©O¥Rù|ë ’Fï—€:M¤/Ò§Ù“}>Ÿ¢ÿêóù4nNLÛµ’$ Ì©N§S(æö9Ï««Õª6PV«µ^¯_^^Úl6T?:;;Óýÿ¬u»]ERAÞÄY°ÞÇ·äIL JÃ4›ÍâxàÍÍ <§n·«½® ³óUXhèF¹\œ¦€ÕTçõzÕ‘G¥Ûj¾š"÷÷÷Ýn—(8®H·~¿ ©Ã{vv&>F]Z£ÝÝݽåºâÉËŒÝnƒ‚´Ûí‡iuKé¤Ùlöx<ñxœXN:Š$—xü ˜ H¦©H[^2™‚¢WJ°–˜}Æ<º½½‡Ýn—Å0™L` &¯&lºoØ“‰;x{{‹ƒ ’>Èw)n777óe“Š1ÝSËÍÍD «q!×ëuµœIY–ëõúçŸ~4Š"DW-À¸`q)è4Xà·Ùh’\zÅ͹9!mi¾Îâ¬HS_5Y;¨6 |§âcÕÎèÔþNó“ÎÔ@BšËåHª³YF£Qò—V«¥xȨ3ŸÏ'6“#‘Y–V«u&Éfü¿ß¿¾¾>«Ž ef8ýþ÷¿Šb.Êå2¿ã‚–^£·Mâ¢Åbñ‹/¾xõêÕõõ5Ã(xªÑЦ½bvl.—›zbl±X¬V«4åÊÊÊúúº ²P½ôK¥ã)2 èŠr ‘Ѿ±±üóÙl–y,HÑtJÔɼÀ(JšàÆÑh$¶e¦ž)øý~ÆV°Ùl0ûÅIб²–ÊÅZ4ɬÏ!Nÿúú:Â*“ɹù"œ¼vÿÆ`0@àÇÅ gúØ·Ä„»_b‡ÕÔ®à•Š¸Z­¦–ÍÌ_¢Q“ó}E³Øè¨…À“ðù|á˜ÊÔG*G£Q¯×ÓÎkÉDn·›É/êv»°µC¡©Ì+˲âi^¯_[[»»»«é‡‡5ËI`™*>‡^iFƒh[¬p^ƒ `ÂãñøòòÒjµnmm© #3„g¤Z­2ÁXµøÕT«q8ÞÝÝ1Àf Ö’–4¤íF#TZêõzg4‰¤…Ãa-Y6qNŠ‘ŒïrSü®T*e6›-‹^¯÷ù| êø;ßÅÃü3™ŒØ±Z­ŠÇ„Dœæñœl6/ëƒÁàüü\ lB€~å[½^'N•Ýn?;;Xz½~)8ºË`-}>Ÿ¢¡½ ¬3ZâŸN§;;;ë÷û<Ò– 4«¾ËãñÐχ4‰I¯‚1žÏç?ýôS5pœÕj¥gßáp”eÙív›ÍæÛÛ[bV“dºµÛm”tÂFûææ†> æ•ô»H»¹¹Q<󣉕ùa/‹ðÃ4ÊŒËåj·ÛÕjÕn·Ÿœœ0Bèóùh9¡é˜s¹ÁÌÎÁ2L–«ÚiŸÆE$8c'³tt—š^Å———Ñh”±$ ‡ÃûûûF£QPÎ`0ICý½©k_#Ö[#~ü»Ó¿ Î1NõœN'Á'̤$Å>EÓA–åù•uZ§ÓáÑ–ˆÐnìt:<ÀY $§oNŠg˜ºo¨KµH•À"v»Ýj³âv»ÅŽËd2Y .›Íât”ÆZbu1‹\ 3«ÖÑ DGÐÁú$–AÚ¢¼04 jéóùp—Édr8¥RIpÚjµèð‘8·Õjaö~ÐH³ÙŒŽÑë€Ý·!ŸçççÃá•ý“¤@d—T~4 %?ìâJdg50u¥R@¸Ä'Ã]ù|ž>å6 ŒÞÒÖ1· ZŽUF£ÑLIMºoÒm6Ÿl2™ º÷÷÷ôî®–+ˆž›L¦@ ë |Q€ÒP0†ÇãáÃ+++3­±j["KòÒ›Ùlâ ÀétböËår¿ß¿ºº"(ûh4:ÕÐgj¨™5Šö4˜hüøÜM Ó4^Lœ?è©…ºÔétÒÄüá¤ÙlVss¹sæÁg óš ÑóYƒ¹~¿xob˨ŸuÙL8Ô#ÐÎ'k4‘ £×ë¿úê+5ÿ†LÑÀé Gæ.`-qW»Ý>;;i·â˜0ŠØh4‚=ˆh^ŸÏGÿ†T¸m4ùó¦1‚ÁcaÅÓ—€HŠ:—,iEë`0 î>T¶Á`Ò›L&›Í¦E2Ážus"ó–, °ÂÓ=Ç¥p8L€Û‡Z£T*F#‡ÒÏ:x[{²ÍfCÉ z½~îì-a½%–.\zÃ@‰{HPç4A6&E€f!u´,Õf³©H.EèÊ÷Ï0ÅSá´N§Ón·3 \§Ó5 í|í¢¥²” íëñ~_¡P˜¯®»Ú3Amà'ú³ÛíŠFJ·ÛUË—ÕžF‰_ Ô“žê@×@/¨ÍH6›%$¤ŒtòøG0#]cÁµ»Ô€Û Œ`:‰ªI'Šü3î8Ò f’X,6™LàØ©ýøáá¡Z­Öj5:¥X–eE¯Žì=¸k>ɬV«| %qC‘\"º‚õ8iKI“É„äX6´H~}}ì(ø#˜™Èd]__ûb¼1ˆ²lôz=îbÂÑ•J…¦²,ó™“Úĉ‡Ó¾…‹ÅÔƒÝëëk1b©T*!½‚ˆBÇ^¯„b)b¦X 3LnšÑh ‡Ã‡Ã`0Ì ƒÁi÷—ôg*Ä|øb­›Óà8Ý·±–Íf“ιZ³Ýn3z§¡TÇME¤V*ðµÛmœ²ôz½@  ”ðz½Äj \“t4ƒYB†¹±±Ç ãGÞyçÝÝ]’Ù¬qæ4b¸-X(E§Ó­­­Ím|ñÇ¡•J…1Mdþœ‡E£Q³ÙL?ÁçƒÁb±ÈœuÓ0U‹åûßÿ>ÃH«c±†‚aHžH»—oÆÔ$ðg$^¤qöΜ¶ÑhŒF#ð?u»]Ü{r¹\ÞÙÙI$HÓ²ÙlŠ<Ȉçr¹`0ˆÙ7›Íápx4aØ•e]Òêõ:6ãD"1çÐŒ´Šôù|S²š±¿H±iœ˜2i¨Ñht‘²IÚµ“À©âõ d†ù=(fƒA¯× ƒ³žƒ2ôÓê©pÚV«åp8xº©ÙüQžÏimm ãŬíÕÕU-f,ÊÔ>…B!£Ñ8Gñ70úÌô̓Á@cz%ª“u»ÝN§3˜dM»Ý‡‘À†eÉéÊÊÊd2i6›´Õàr¹l6[½^î2N¯®®îìì`£* ˆ¥Ð€X,ÆOÿõ¶¶†s8‚51‰èõzñïEQú¥ð^ƒãUG±Nyo<×ëõjj%™Lб\ºYˆ•Å=öD 8P—v»Ý^¯G,DþEkkkd¯Å'!)&¿Ák£Ñ@=E¾c2€D§Ò¤:Žp8Lïô|µ¿ß¿³³ãñxÎÏÏñuä7ŠäмiO<†%‘Hð–S§Ó@tP:ÞÝÝõz½…Báøø˜(a¾ 2ƒš#™LûÙÎÎŽ×ëÅ9ÿÝÝÞ5Aô®8õb.TñQ©TªÕ*¶ŠY­¢år7ë„´Å›››µZHè}I$IÚÙÙÔÐþ]‚¡ØÚÚ⹘ù¡p:+++üöƒu7 ´øjö••‹ÅòðððôéÓÕÕUÄ*].×O~ò“ÐzzÊæ¤Fk[«ÕfŠ˜ƒA—Ë…ÂtŸÄ:Æã1 ‚3—HLân6›aí¢Wt÷F£ÑTêRÅ-}8®®®Öj5I’‰„F‡µj<åápØjµ*Ýõz½ÙlBVP·bzyy „c»ÝN§ÓD«íL(†D ¤&“IÆïf, Á`@XhÉÈÓD·jCÄüE‘×2 ÞR«Õ:Ž,Ë?¦ ™€ƒjN§Þ`˜L&£ÑÈn·Çãqœ|±Çûûûù|ŸƒQ´F£xÀîî.ü0Äqƒß€ðÔáp¬®®Š-<Ïl"‘ÀæG´˜ØðÇFãòòòüüwÑSC§V~+/I¤óŠ_]¯×“É$³oÑG8œGúe·Û}þüùññ1¹Z«ÕÆã±ßïÿ£?ú#PfH’Ôï÷‹Åb&“Éd2|ðA2™4™L¥RéË/¿„ëvppÐl6×ÖÖêõ:9Ö¢ßîr¹3 F£1N“Î üÚÚZ¹\†O@ÿF;«²N§ÛÝÝÅG)Þ¨¨‚ÔŒf³ÙÜjµ2™ ÓçT*e2™CO ™—$I±v&%“É,…צV«iäÅ£2Ü(û#®8k%!f* °òÿ›ûï,™¦]pHUB¦™ûX,FìY^,è¨ÓéD"ÅE>ß™¹u:]$Áža±Xæ«ùÏŒ;]ãRñ©T *u8‚ôìw¿ûÌIœL&ºtwµZD8777Õ{{{´q'nF£Q¯×óbŠ)®×ëz½þððð‡?üa©T …B¤‡Ñhtcc£^¯Ë²<ëðnmmÕëu„p‘‚C~`T±¨Ôž‰ßÐ_W©T’ÉäÕÕ.¿ßOó£C€ÑÇ×¶X,ãñ™lôèñ²AN ÃææfµZ5‚ÙA¿X/ ˆí´!)üááâÉõzý—¿ü¥Óé4 įÚÙÙ8¬ÙlîííÅb1§Ó {.¬­­%“IdlbŽ …B¿ß'ùMkkkصµ5Ú¥V<«@œ *MÇì+~ Ò5Vî/•Jd Ün·ßïïv»´u¢ñD¼Z­B­ÁÃc²@N¯¨‘°‚piwwWí]‚3Q‚B"Ÿšòæ‰-nüz$2oµZÇãq±X<<û쫯¾ú×ý×r¹‹Å´¨jl&“‰œiƒÓVmHµˆ/à{HÖRL…Àw=~üø‡?ü!âìtN×íííóçÏ;ÎÔj1¼Ìœœœ0ë ¤GOŸ>ýÓ?ýÓ@ ðøñcA·IµBw{|| €0þ\$¿ôz½eñ1"ùÓb±lllù>W0£Ñèøø˜Á>ó ûЏv»v†L&t£Ñ‰DNOO¡Îsuuåp8ˆä9¬œ`ŸŸúé§©TêìììîîîåË—§§§×××år™(}Œa¥R¹¿¿ßØØp:¤ •ðôððÀ$Sh4µC2·2›Íz½ÞEÈÑ1űXL‘;›È!†”nÏÇ1-«JR<ŸZ1€ÖN3áϬV« KžgÜVô™et:ÝÆÆ†Ú%åÍIR7«ŠÔ8ñ^¯ëP$—9.eïd¦‡°šjAÚª7iM` ¶(›ÍF.}þùçÃáðþþÿeïÍb$K®+Aß÷}ß=<öˆÌÊÌJ’"R Ô5 Øú@´è¯îúêÆ|Ð@C€ 4 ýè[ÓÝ€ ?5FÝó1À 5¥µp˪̪Ê-öÕ=Ü=Â÷}›3i2šÙ³÷Ü="«8òûQ¨Œçï={f×®]»vÏ=ÅW¯^ÝÞÞ6 !‘¤N.<á)Í NäøøXKR‰Õju»Ýåry4 ?ÄÅbÜb‰D‚Î_ ĵZ°{Zt&ëõz»Ý¾»»Ûív‰Î0<ÈÃá˜-úš»L"á&VRBa®#F@%½!8<<ìt:¯^½"ã â+Ç*tf…: g=‹ÑBŒÈÉÉ F¿Óé ¦C¥R9??·Z­pA 3‹¥Ýn¿zõê“O> ÀK=xð Z­~úé§ŸþùþþþÁÁIç!h¿^¯wzzJïx¡ÂSR “É´­v©Tšï¨Ÿ⃃ w61& p[i¼$nºdÇãÓÓSÕ\\‡ÃA3k/Aër¹B¡Rš®œdœœ?)9¯^½RºdR2p£ï@ Ðl6µ5 … ¿Bâ¬RuµK)ùV«UøÝnW•8ør¹ÌœT1†““³ÙŒÆ3¡ ©£Û …PýžDù¨{½^”¤¬V«¡P°ÑhGú_Òƒ! Jö dËår àÏ·noo}>_±XüË¿üËx<þìÙ3¦£Æãq8¦ýëEt¦V«¥R©O?ý´ßï¿}ûùñ ˆ‡>íṯXÌ`0±Æb¦4úf³9‘Hí ÏeÚ OtpvB*].0 ’»´è3?Ž„ÐÂk;2ôèÁr8È÷!HÛN§ãõz‘5¾··*p8||| [­ÖÉÉ ²ÌƒqøÚØómqÈDZÌâYå÷ûOF ËçóµÛm‹Å¨’H%ü™¼"Á€X­V°ç¨Þ …p¶¤¸M?p¦@T¹\j[WÔÎl޲ýH4£^i? ÞA;ïê€GUàwôûýJ¥Â³šŽF#2À‹ïÄIì{>>Áe¡Á¸rÃáP_æ!uáp˜™ u)•ôÊ„®À 0`çét‰D0uåH[úFºìžöÑÇëŠÅâ³gÏ ( »ªjCGáèM.¸¹¹yûöm³Ù¤+WM§SNKˆ’G‰³F%gGìt…ߣ „ÏN§4¦ë(=úÂÎA9œ™4S©“%Ð]ú¯×;ÏÎΰÝÇZ|.ÁY …³³³³³³ããã—/_–J%¬y€XЧtß.çWn#AcÖ§Ý­›R"œæ31¹¬±‘‹]5 M¬LCUˆ Rí+áWÌ»“¿Ï$€—ó'©ÀB˜[¿ß§0y%#n·[)RÌ |M!8N˜ÇÌX•"u½^Ïjµ’8ŒÃá`4 ÕjÑC8 @24 z ÄA% Zªq ²H«ÕJ;GV«•+>ÁZꀢôY´R3è“U &Ûí¶°¦Ž I¢R.•í"0LšZF²Q£7ˆ™L†ÇYkÜEt8¦+€~eî*—ËMÙÞÞæœÍféÓŠn·«zR5_%§™¬ªVûýþÝÝÝ‹¢I´Zeçäp8Òé4ŽXè>µZ­=ÒRˆw R©”ü¬O Œ/¡M6¢:RÇdÂ)|ŽËåB} æ ] ¶FÀqý~ßétnllôz=í»„@ °½½=…q¤X,†(–ü!ŸÇ. øG-Çoˆ°á“ j²ÕjñͨSÉï BÇ™€Uãñ¸ÅbQRÙL&Ç­Z­Úíöïÿû(\rrrÂßâ÷û=zFÉÑÕ½+‚Ã’étÊ#jµDùéƒb ÕhªÆã1¢|@ÚFTÒic:– ÐÙ›››d1~¿_i×ÒjµÁ•ÍfQ‘3±×ë¹Ýn`ªªÕ*zN!Ôõ¡ Ü›!W£0³Ûd2Ñ(%UAI6è®R®2°Ï™Le8Tßοëöö–Œ,¹Z¯×é½ýd2 ý²œ«j`§Ó)•J3UfÈÌ;§N§&lfNöûý_üârK*Ì4k·Ûq€TEÉår‘WâÍ,o¿ãZ|pǃکBGÁd2Ák¦×*f—†à¶5ƒÁÀëõJJ›€@KûÖùt£\.c¾~ýÚl6O&·ÛÝëõ’Éd£Ñ ‘§ÅbMeú¡Óé´Ûíh4Z©T˜½EKU1DSgÒm¢‡Ø Ƶç &¨uéò²ôˆ ÞÏh4Â¥ð-äîÂí“É„év,ùÉd’Œ~£ÑÀ!±ÆªwP'æ¬×étªÎÜV«EÂsl‡ª&BÃè 9}ÀhJÚ /^Õëõ0úBcâ÷û­Vk·Û¥á%Z$ëõzz¶:„˜8òîø2šF+!Ì;ª«´Z-°£Í4 Œ’w©ìœ$£Ð„Á¹£~sju¨æ¿KHr¯®®æ#옩„YéBHš¼¼¼”—îÐRôÁívøá‡‰DÂãñÄb1Tåb0³J€_-B°–ªR«Õ$uSxS€F%=¸œÕjUbµËår­Vóz½¡PH‹ç%„aöûýW¯^5›Íb±ˆÂ‹åè舞É×××…BaVM»½½íõzig‚µ¤‘¶<’‘ zÉ%†Z×årɃ‡ÒÓ0L~ Ä%ÜE@¸ Ð£Ï*ÏÏÏm6›Fš‡–™5Ê÷·žî¹k»Ðà¡1a²µ Oá $5¹é÷ûÂ,*éÃ$¢„ƒ˜'p dè¬';ôÌ–øÿ.1sRž"R(° Ó*·hrÔbq´o ívûâtD:Š·ÕjI¬§ËåbÈUyS%AM#E;’„i”nÆx<6 >üö·¿½··‡Wü#Ù 7 Ìç³Ù,Ÿ` ¯T ´Ò uì§\PóQõ—ƒtlÐ1Žf³ùææFÉ](•JÂK¨£ŠÈÊQmϺK_ŠÇãtÌýÙÙ½ÝÁ8òsZ‹Å"¼øÉdB›%Å cŒü¦‡v“aƒ˜K¸ JˆC&ÌNß%y—’¦ñ\¨uÐg½K¨us¬(‹…¶¡@}L§Ó¹Ëª)Õø—[bâÆãñÅÅíú%„b#Û€‡Zk±3Ì*Ø;ÅÅI»Ð{ %.TULGãg‚›éõz¥,>ÉCh&\ŸÏGÿRHC©%©ô^œ»D£Qèh¿ß¿¼¼-%`ìàï,‹’yeí)I¥\.ŸÍštFÁÐH÷€Wã Ì}€tp¥«Œ†‰?Ò G²kLo!“–t¥Æ3'%Ìè£^§$}×ív ·5‹hì]NçN6¡ß¾…7ìL¿ß¿[ÄÕâÝÂ$•ªG£ÑPò›ïdôç\œhº[‰(!mùµD ˜FÎ<% `J¾¶’-Üôœª±Ã!¸®%?Ãæ€|–J%ðô ƒËËË?þøððP Ó#4ßÚKß•ÄãqfûˆêΪ7¦Ói‰‡%á‰7˜®êõ:˜46žÁt‚M˜šUaÂJÒl6É–Îï÷ÓÎ5rg°KÀ%!p»Ýn;ŽõõõEÈWWWÚ'!§-oh”‚wsmm- Ê¡4žŒÞéª~c0T Ôjµ¹Ï°³;ÓªO¾Hû]n /!¹‘6€ÓÞ÷äEž¤ÒÕ@ `0f)beN—ËåH"jD":øD¶ªÐ]­‹“Ýnf¶hív»ùª3ŒŠÓÆl6 ¡étªd¡h»Rü‡¿„z6sø¸«ßï+Ù}¯×Ëø§ªGâ o£Ñ˜Ëå®®®~ö³ŸýÕ_ý•ÒÊã57ù¬dµ f¢Ûíj Mð":ŽÝn—×0Õ½ Ðoll¿Ð™Wjp¬¥RIx9T‹…Ñ´jµJ¯ñÝnw&_GÒ'ôH)94ò²F£X,*r*•R-“_*•Æã1ýEµZm‘dò]~¿ŸÙX{<P J¾¼·üª Z/îý¸\Gn¸×™NÈÔ"JtMˆL&Ú 4ù ë¼€ÍDx õúb±˜p·0_·ÓHšÅ öSé»´ûÿm IDAT¿KŒsÚÜÜ¥ž×’¨š„×Òëõ†ÃájµJ®‚®Ýn£²cè‰ÇÍf3”{8`4…B 7!¥–**D®á“WVVèd3¹ ªÌÁQ ŽQ&Çf³e2-•ç“N§“ËåÀIJ/$í€îV ¸À3o¢ì© D×CIsÚjaãÕ©e »oÞÒ½Ê$”O&“9ê¾øý~>““öØègFBxÊ\âo$ÅPè»È:*á]Uê(%šÔd2ÉøÈG˜²EúÉZ”œí©zº+++r­æé§µXd·Û=SPW£Å`”j¦çóQX þÒxY£ÅÐét;;;F£qñÐE¡PÄrNOOŸ?N&ˆ–yÇt,%síóùHá¨ûC&©Gê¸Ñ7›ÍJêÄîœ0î ôËìÐ8†âÓçóÑ,áN§3‘HŒÇã`0X«Õâñ8¶Âߣ*»ÆVÑ •c>¡PÈãñÆV«E«‚Ñh4™Lø«ÕJ¾Èårmnnêõz&bn³Ù˜bLÇn·‹"ó¡Pˆáª§Õje2r ¹ ‚¼½½- h¼ÝnWâ'¾‹¦—¹¢‹pËööv±XÄ^ù?´2àäYânÓÝ®*ÛÛÛ :QݕΡBÕ NÇ`0ÏK„G­I¦EÂá02â$¿Á‰x`F#,»ö` ©×'wY иÑA¬R37 rK#¡­FA´JHä:«µ*)íO;X3é§–OÆñ6Š&3†ë}J4õûýô¦|ªïœ...´O?”†dÀƒAÂjaµZ™6Ox ³Ho§Úív¥R @*ÕN%;h†cM¡984—¡Æh¥Ra&˜Ëå"ç(kkk䥭Vëùóç|²¶Gªó³R©œžž2†d£:îää„\2›Í|ÞÝ"g­ÝnWȆ*à’?ÀK…¦„Ÿ¬¬¬ çéý!Lq:Äy¤ï™ÌLBÈË«W¯Ð!BÕUR ùN…ïa§Ó IÔj5¥B_´Î0úÏ_ ßÅoU=Ë““ ƒ¤P¤Ñhä± `s'64¹*³›éõz Öe6777Ú)Ž”„LU‡Ãq·5?™qDãM&“Àƒ|°B¡Ð|È9°'ók¼Iâp8x”ËÅÅÅÕÕÕéééL!P¥!žOŠÅ¢ö!*û;%®IL<‹Å‚JŒå’€ãºÝ®:&!åQ“FãäääòòYö’ÈÀ0ÂSÞú“e|mmMcè|2™ð ¨×ë¥R ÐÈZ­†}?©TY#ç–~¿}}MP“°¼ÊK9ÚCŽ3l6›¤î'€±ruû3…t{S^1°Ñw ~S"IªÆWƒ0II1ìv;ÍöÄ _UÂ|>ÿõ¯ý«_ý*™ÞN§“SƒZ:Ã?VÈ„«×ëé™%b¥òë ü+¹G(án§Qö@€áò|"•J8kz°05ÃÕ«]Èp(iÚy‚Áàp8”' ñˆ~^1®®®f:«#†Ëçó¡è}•GÚ2vPY‰£¦Q$Àí{ª†…Þ%4²Ýn2;ÐùÀqF£1‰x½^8Î ™psõzýððððð°Ûíf³YÚ#C ü`ž\«Õ&“ ß¿<ªW£Cg6›áØ  ¶B­~ÞkFåEf³y>QSU­‹Á3ƒh4•H­PVDh”AÿÈ\ ‡Ã̈ðn~¿ß'¦Äçóy<%ÛT(H ŸÁt£æ ¹ \ÇCœ$œS*O`eZ­Öáá¡0n_¯AøÀH$Â{‚à:r:Ø\NË ˜g-kF§Ó)íjóùãr%´Ùlý~>eÏØèjµÊ˜HÓÍø‘ §­¼˜¤|q}Æñêêj0hé^—ËÅLX1=‡n¿¼¼Ô¸„;øÅbÑH£Ñ¨tÞ©q/È·¿D‹“פFŽ2 ´l {½"¼~¿Ÿß±2q<Þ¦Ñét ¡I4¬¦üžšÇâñU‹0„Œj4gggív;“ɀˇKâñÖRKŶùð†½^ÀšjµªŠ™ó¦Ò‹@%§tÕb±0«8Å?•Fø9Žšù\#¦Çôzý"Ô«Óé´ÑhÐ6w:*Åå&“‰ÙlÆ<'ü¹gggü19Iœ–V N7»S‚ò:CHTg „<™L‹Ål6›Ífóù|$™i ±ÙlJ®Ãi«Ä¸ý¥¡YˆF£´Yh·ÛZrkaLh°¿$zÑh4H^h¡PÀ`áZ¸’Á}!cz}}|9aûusÏ2î;!¦û}¤m5)`âí8Õëõ C:Fè<“ÉÀ7 £Ñˆ¶†¤ŒÛíF¾_»Ý.‹¨££@¸àGà‹'öz=p}‚±BÒxá(Öj5ä/h†Ãa`-iL€P4ò®20·9DßҔÝK0$þ×ÍÍ ÝQN=£Ôõz= ÉwJ9uzˆkµNŽonnÊå2³Ø»$ë}ä^©T0ƒ†Ãa±XÔ¸ðKjv(išªèõz ΋Édr»Ýį’oH× ”·oßÞ•@&çLŸ¼ éP)‘H0ÆD‹ ç—4Þ„Ì‘>ª*P'!¦›M%‡@ÿ*AÏ”°–[[[8àQmÐ`0´ÿñd2q:£Ñ¨ÓéÐþƒšlµZ“ÉäéÓ§Ož<‰Çã‡C¯×—J¥jµŠLÜ'OžÀÁø8@¿Úíöx<Ž­\‘«ÕúðáC,-étºÛíÎêõ´Z­B¡Ðét˜×õû}šnÀh4@¬j4‰9CÒ”¼¼g ‰9€SCLy&QÓn··¶¶"‘£{{{NGÈA÷<öŒ> ‹Å’Ïçg­B¦êéö!aDìõzétz2™ÜÞÞ"½e<w:P(ät:•òàÓ#"„`C‰ÄLe§IJ0¤¨ÄHW(à±ÏÙlv8‚pW‡Ã!r£Ñ( ˜&BÍ‘\2›ÍëëëÌ`‘±@b½Rº×ëD"dD”F0ŸÏW*•¹K*ðÓ!ŸÏw»]´j4Õëu¤ŠÌ½Ò{½^»ÝÖÈ*¢eÿD·ï!o·Û]__ÿÚ×¾–L&¡ ‡ÙŸ•{¥RA]+ÚÍGz}©TÂ1,y8ŽÙHWÀIçX™#Àµµ5˜Œñx|{{Ë0Š‚d]¯×ƒÌM²Û0 V«•ñ ív»ÕjU}t{£Ñ@÷Òì´NGI9 C-·bhv4•¬vŒÞò}ÅÌ 螤•ß…ˆE¥RÙÛÛÃYÖ›n·KGðÊ%F“1ĉDÂn·“Æc-WýÔýcºq0hÙTñlªö!ý@²^.N@Lïü˜™{ç±\.70”ÙÉd‚ÌÒ‡ú|¾f³i±X~þóŸ£\Ù÷ÀË‘£ív;LÐ]m&“ ÈQÓd2­­­­¯¯ƒ}c:~å+_Éï=/NåãOò“ŸÈß:oXiéå§^¯ÓKšpe²Ûí¼Ó”ËåˆÛ2_Œù?`ð XxàÄëÉ*ôv=¦±ä ^¯›?DÒùÓrN‹áÁ:D÷†ËåŠÇã¨8R­VIs8JÔB Äõææ&Ã ÆÆùêêŠ^ÖÖ֚ͦD;ÁžSt©­7N…ÇQè‡ÃÇÉL`æd¯×Ó’üM£;uƒp X*•¦Óéææ&@…’çD£QE2‹“öƒ¥Z­¦Å² 7Ûí–ˆ Ñá'™ÌèçóyÁbv0€¢Ë›Q*•4·‡"o!èl‡Ã‡}Ö½2 -£„ªÏL&“LU³ÅÅjµÎšDG;´ƒÄgR9Œ¼Ëd2­¬¬Äb1h‘×ë½¼¼ê–ÈmmmµÛm%eS=öæñòÙÚÚBæ~½^úôi6›ýÊW¾’N§JýÎw¾J®«Ó´»\.áAE$±X,Áª¼öð<::RÝ¡+¡zõz}(úéOúÃþðã?.•Jggg$X< @0¯*a@…¯³ÙlápXÝ5™L$ëŸ8˜ü^/Ýo¸ lñ$3[’ ¥Óé, ò >w4ñg0ûûûtä„ÜÌheeÅl6‡Ãa%às™3ÂLß™Ô&‰  _’W6›ÛžN§ ˜gNõ˜Àö‹Ö|óæÐvÓÐH(ŽgÂáð",…étZŒÕqùZÀ`0Á½L&F·›L&!ZE#pûòò’^Ë :ûúúšâÝ¡e –]cÆ3Og¼¸0)yóí˜s¾Åž‡N§ã5 A…*d¢[­V¥¬¢7oÞär9-äJk„v²Gí±^Úl6»Ýîóù?~¼¾¾¾±±ñÁ|ó›ßä£h¥ˆ¼p›|~~Þëõæëëýý}ÚWR-´L+¨°Äút:ÅòS©T䥎#䕈‘[Ün7­‚Ãá°Ùl ¡» ¯t¹\ív»Ñh€^]É¿ ¡‘6›­×ë «ÕŠ»HohDMb¯CT•2›uïÊë(Úb-b³ÙȈøýþP(¬¥ÙlF’\íãˆ5XÈi+Ô´~¿O£_-»½½5™LJßE1‰`<þgWwk¹èw©²š*)†Ðdœžž IHÉNëêê zHÖ'Æ¿¹¾¾~õêŒu0¤9mé÷û<˜Z©…ŒY 9m§•X‚éæuf_ ì?4Bš$dÇsËÙÙQB ®}!ÁöŠt;¯i­V !ôóósÄú€¹*ád2ùüóÏçN’pgKüfmp¹\———Åb±^¯w»]€úùÅI<Éå(Z¡ºàüFcÊ©ÑhÔŽ ‡LÿƒÁz½.Ù샟”Ö lž„IíÑh”¦CX?7™LN§“~¦Åb! ¹XðìÞ˜r-¢ü’$F´¨¸Õj%ë¥Åbáw n·»™¿Ó~±Õj%XKÉ s3l6IÀ3ÑÚc#¤%F£Èp8Lš„¥îööÖãñŒF#%øÎïÖrÑïÂA´$øì÷û 3›*ö–Áç‚‹’·ztDEbÁOOO#‘@QJ£Ïߢ¤] ÷E¾8M„ŠK’fÓm·Û Ÿ6+$Yè€êîMl6[»Ýžcñ“+†ÆB£Ñðz½Ä,ð½‹Å€RGI_€µ}>*í ÷ñ‹lî‰C’hÖx<ŽF£ˆ ÛíöH$’Ó²sJ0ÄfB¸œéįÕj-¦£åEûìõë×gggÇÇÇ?ÿùÏùÔ ‹S¯×ƒU:þ ™Û"‚²ß u)33G£‘„?Oÿ“`ª C6›-¢´ZÎQ‘ã¤Á{X½^—sÊk¤Åbá‡íøøX‹ùðx`ˆÍâ½:¹$ιø‹è¥)p‡uÆxuB ²ÆÛi^ƒh4z·¾Pè9ÂŒò¬þõýû“µµ5–p¹\ØsÇãñ™’ÅHÒ&µ¡ï»@»êúý~ÆÈïîî oÄÜ_°U}ôÑ_üè“õÿë¿øwòßùץʭÊâ„ù …ƒ ­…BÕÔB^)¼‘±(CGÿ Ò±4`‘N‰D"ªÂ%"d¡%¹H*C=1áí¸x)sªÁô†–KÁ< gúÖh4>|ø'}òvŠÜÅÿÏCðJ>‡ffÞ(§»åc ÃîîîL£?_%…ç/ÉIc• ´Ñ›ár¹>|HvoÚ“ƒïvp¿ ëÕj¥mq6›•¤çñÌÔ3õ<3ôªwíîîÊ>ɵ +ù¬ÄËá?gχÑÏçùÅÉ _`1½kµˆU¹óXB¿ßóæ ùçÉɉ$ˆÇ´™Ø"-ßb0˜¬ê]Ÿþ¹ädÑh4’ÊuFx¯Ãá CüæÍr6ã íí”Ð>ÉÃìtß/u”äžápÃJøIùo|a¸H&“ƒÁG&@¿’Kr‡K‰Ð¥#eú’Íf“Ì=mðùZ ¡ÄY4 F^]]a†¿~ýZ£±Ý-)ÑíñxÆã±êù9r"È?IôŸ9e}õêÕp8dÐ '''Ýn7‰`#Ø£n·ËЩZX›Í6{2î’'1<ÈP_úÔäíÛ·Hìt:/^¼¸¼¼ôù|3Y«Z­6í‹îÒ–üóðððÅ‹´És.ó¦Pií$ÉårY)CÌjµÞÜÜÌD´#DLkÙZÑþŠp9ä±Ïs!´ŸËå2 ò⳪q­/Š@nÐþþ¾íÇhšªŒÇc²¬JtFh?m6›Ð%¢³å"SÓl×ÚGß t*•øIY†²P( öEï-€Ñ+ Œuæ¹&uïp¼Á` × /1ü¤Œ€¼òððq[9–çÁ`@–‚÷¢s™PZ‚gÂ¥!uØ)~¿¯ÊTÆœ"’>¤ÁqJ`jX2?­V+œb±ˆ@™Fc‡ñ^g$ÂÀ0ƒÁ ÞÌ*yÎeÆ+*—Ë÷M‰F#m•ÖTÆäF~ÚóWÂi«“²î2ïšu¥!èl틱×ë%êL·pƹÝî9"œÐÌ”×x£ßï×ëõdÃ7Ç8†ÃaL: tWÈ\ªQä8k(†$f¨ªislÓùbÒµÛíW¯^ñécBt¶\¦VÊÂUº‹Å” Ø&á—hÌÊb-åC莰X,L"“’‰áÁ›ÓéTÉ‚0 Ýn·X,³¥%û…c1½I½¾~¿ŸJ¥°ÎÙíöL&szzÚh4Z–(7¶˜õzT⻼^/<ƒÁ`–Oºëóùz½ž„i´P( F`îÁßµ{^¯7“É`QÔ®3:º‹FÒ†€OÂl·Û̪y\¨&“Éçó)9žª€J~" 6Â/ü{‰÷# G ß …x®2¡¡¯¡P¨^¯Ûív¾ñ8?ÆÁd£Ñ¦[Xhx>:ƒ¥)’%‚ý10Uyª`F(ç1™L®®® Š¥b+e´Z­V “ŽªÀó$ƒ…:³ÃáP²qŸºKK‹¢ÄÝÎ IÒ“° ðÆã±Œ%p«a"5‹µ4j’þ}("4KªÒétæÈ:å[(¯%%  «AßÜÜÐŶ Ùxéޕ«×ëÍf³R©Y¼ øÜétÊ”éDµíæÕh'P“J‹Óùù¹K¦ª“ǧÓ)AºQêÞT*¥téêêj<«Ö¿X¸½ˆ>k¡Ö*8-éyf°jµqÑ&“‰¤6•pèùd¨‡ð,e HŸÓ­¤Nñx\5²g±XèHtf¦à*¦ÉÆÆF.—ÓÈjFý~ÿø`!$þŸTât:×ÖÖ‚Á`±Xœí€24±XLHF‡ï5[U§|èÕëõ”¼pئòçÜ–ÝSÂYóq)Ùâ¤*$ ŠÆZ2;*¦xe&“1 õzî#PÈU/€pïd´z½ã02ÿ ‡ÃdûººJXM!+++v»½R©¡9 ˜M¹ ƒb±È<BB\ZYYÀ~uu•’4b±H¯Ó£Ñ±,Ý;ŠÉgò£ÎSœN'›jÁh4ÒÇò©uF#–Ûããc¡ÄZ‰D4æ7ßáèÏa©•pÖ¬( ‘s°š •¸ÀA¸ ?`ÆQ‹är¹ét KZQ'Q %ø ¨2ØZ%öDUêõz±X,—Ë¡PHRQ‚6&×××ÕjµT* Þêv»ÑhVwƒÁo|ã_ÿú×xð€Æ´àLéUd_"‘ óDþ@g‡B!-µ…T»Èl6Ë+ ¨‚pïjöâQ@@#³ô >ÆcÐóŸÔõ'Hpú‹˜IÅÖ¿“™zƒ¿ÓŸH:VJТԙ0ž"fƒŠòOØÞÞVÒ^É%-ãHcŸyæ¥oaþNŒ i ñÉèáÞŸÏ óƒd2É8p‡ÔDÃäã¢ÝÎ+! †T*¥”‰NŒÉÖÖÖ“'OÈßg®1“Øl6¦•±XŒ>%&Z}÷ŸâVWWá›5Ïd2¥Ói>ØŠ\œm:Žííí½½=ŸÏ'´ƒz½ž,*Ì÷¢+h3ù^£Ñ(4ßý#}»±±¡ô3~£Ñ¨R‰Ïh4z·\jh€ª‰™u‘~ÿB´]£’KÌ]™LCOr$ç´¶¶Æ³Çãq²`˜L&Uo€Ñ™1@D«“ɤðx†àÇQGNuˆy°ÿ}ˆÅb¡±±©TJËù«Á``&&Œ ¶Ô‹ôá=aŸ3™ÌÇçîO-ºžx‰Å^š­BĬ‚ 8ý—b±HÇ(Éð»Ýnh­¾.Ô;7|¤z Ä;::ê÷û>Ÿh¤Çã!ÜÆn·›k§Ó ò½ÕÕÕ>øàøøøåË—ápøææ†?>TÐét:N¿ßBäJö’”<ÂLJ‡‡N§“ &‡ÑhÌçóh0zJO- •ápøüü\is ¤´Y¡ Oss}}M±mñL‹ÅTWbžwVá;ðNO/NJœ¶t Fx&\RÑœþd·u:ÝÁÁ¬¾ºº"9Bd¹Î$ l#TGÁf³ñfÎãñ`IÐÙŒÎ8¡Óéö÷÷%ÑBò½B°?žy‡pZRr~~®¥bºÅbÙØØðz½Œ1™L& åaìÌâák¡œžž¾xñbn>{‰êÒ1=”sU²OÈ Œo®.å¥Nª:>>VåtA:xµZEû@.ü1¸PgE)« Ñ?ÇÃ<ÜëõžŸŸçóyÇCC òù<¶ù>Ÿ¯Ñh 9¸ÝnW*à-ºÝn(r½â>@Aqâ]*•œNg8Æú4ŽŽÀjŠß®îFæ´5›Í/^¼@À,ÚÑÂPyqq!9&999FdnЄ§:eà3±ï‹×g;99QEÔÎDÖ dXy̬„‚V‹ÐpÚÉdrzz*ì ¦~<-oÞ¼!•#Üf¶8|jŸŽâ™Õ( cVÒ™ƒƒƒétª”ïót:]¿ßg²u˜¶U*V¥Úxì¯×ë ±ò=¸h¤Öíõz¯^½¢ƒÛ¤…39Ö>Ÿ/ ‘ʼnØnÆwÑú)ŸÅJ#"T]²((-:e®Öʼn`‡Ãa¢»6›ž`ä(eÖÒ¹z½> 1ÀšB¡@¯áv»ù€Y½IaTH†n·Ûe,àÙÙY0l·Û‘HÄçóù|>Üu}}=™LPíP$ó ëÀ·ÃÃÃV«•ÍfI_Y­ÖX,$‡Ëå `Ó« à#Ǧ¤X,öz=Ô¨…«X*•ªÕ*i?¶u»Ý‹ÏXRDƒ¡EGކÙl.£ÑHN£LìþLÕ ø]õ¬þr(b"Hõz6‘±XŒá\æëõi‰©2{‰Gñ„ôÒóŽLUbtÈèÓ³˜öÀìv»M„$×1êDç¸W«U>=ªÓé¥.‹X9‘H(9Ýsô¡H†Èl»ïÄb˜ÍfÇ ½^OèNÍT`Âb±œŸŸO§S¤¶ÏäjhnϤ҈+¤Ói-ËžÅbá+ƒ3–D „k4•@&fºb'Kƒ:d"¡¼$(k¡8Æx@§ªsw›dIÏ4<9™L"æÐétxT<²ÚÊår£ÑSÎt:jr4a•r»Ý CMÕ~¿yy™ÍfƒÁ Íþ%ØÙÙÉd2ÓéÔívg³Y%Œ½Ž£¡dº„L™¿ã.àÞãñ8 u ž2Bžê(H2ÝŒh4ªÑ¾@1´´P‚ëÇ xNƒ|×.ç´å•sþ\N‹¥zúp>a8V*ƒÁ@P“¤Ù¤¯Hß §¦¡c¶X,J¬QJ,Ãx¬Fx<ÏårF£‘``…=?kö©| g! U÷ööÖçóiô¿yc»1Ã.á] Àø3•-ÕÜ·–b«êóùȪ#á\¾¾¾V A¸©TJRÉAD ZÂiKîÂ4Îf³(_T­Va޳Ù,’ÂG£‘ÕjL&ÄÇlµZN§óææ¦Ñh t ©¹§¤ßô¼b¿@àöök$])wPÙn·©¹¤ wn‰F£ø4 âp8dš¡™dµZqž§š~-äxÅq­ŸDKåù©N§óÉ“'’Ô€/!M8 8üÌêv»ä@¸à&ý„KÌí :{<+Y+¢i 3$:ŠpIK⮈‚´ÛíétZ,©Ã©]Ð<¾€DÍÆã±0¡I ˰|›B°ÀÂ`,3ýáUÙï÷ï¶¼ÞbµZ‡Ã! „È{C2}з„Ž™ ØÎÂåc¯¡PHùôx<Á`Px‰Î!ØgóRÇ€Z% 9¥%zuuµR©Éœ¸’½ Ðg€¸âÃá0NW*Ài‘@6:Óé´×ëu:—˵½½]«Õ°‹J$H.—+‘HƒÁV«µ²²R.—ý~½^_[[ëõzdÓ©ÔlÉØƒˆvggÇëõƒp8ŒÂ†À«Ô–Ïç­Vk¹\ÆÕf³ è.Áèùý~Ç£…H^hª†Ãa.—ƒ>ÍÔxæ90ZL³ðv2úf³FÝ;ü£Ò£’ÉäÖÖV6›Eš ±’ÑhÔl6Ï]Ùá¾ETBMÎWs„Þk|šÿO§ÓôDƒÅ¨Õj`A­V«ïR-œûJó?æíU<—3—ky8Ú@CYyËh46 Ú¦X™~õ"HÛ¹÷ ­V ¦Ì`0Ð-¤ë0£/ì"WN¦žÛíþîw¿ÍnÑ \ñâôá‡RÞÑh¤äKjuhÙïË«…Vxò.—Ëåt:•h³é_6 ¸“’.›L&ø@Ôž à&ûö-|„`0˜J¥Æ£GŠÅ"Bð£Ñ¨ßï{½Þ|>‹Å\.—ßï'Êt:ýÆ7¾aµZÇãq ˆF£ ~¸¼¼´p2™är9˜WøòÛÛÛÃáÐï÷Ó ¼ÉdÚÜÜÇÙl–N1ºF£^¯ƒöî3A¶ðÁz½þèèh2™ Î1âÍf_:é’{{{ÚƒN(¦W©T¶··åw9ŽT*%,„èp8à=aóÄ\õù|ápXâMœQnƒ\][[ët:ü ‡Ãát:Ýh4úý¾^¯'Çiý~¿×ëÝS$y>ùàƒp<ùþ_ ¿MÒ›››PcÞë§wx°p˜Heʶ²²bµZç({šN§WWWëõ:F_>÷…FCÕ1²½½-¯õ@·a<3ì*( ÔíÄ:Ñ›ŒE–ÉùŽBðù| éE}¥¾•Èh4ÚÚÚÊï>U_œh_”Ê4(BD×]&Q/yô“®ÓŒXg³ÙÔèõ£ñhú´~¿ÿàÁ2Ib±˜×ë-‹ý~ww÷Í›7‡´Éd2N´Z-Ä‘3j0?~ .R_F:ƒétZ¯×‡C›Í6ö³Ÿ]\\”J%üq2™¬¯¯·Z-bµQÏÉçóa㼺ºŠ5ûÜn· G‰œ%|ýë_¿¼¼\__‡ß@Npl^(H} æÀl6¯¯¯c+Iþ¾µµuxx8ù¡!wmnn+Ùl6{½Þd2‘ìßÑ·ð—•Ô§2dé·ó…µÌ&¤ÎO€D"ÊoNçïÿþïN'Q„ÑiSˆ½¯Rûq0@÷-­Nr›ëõz#‘ˆjÑ ’#ŽQÝ/We¥Ušïù¹O¶ðL8O8ª„0NÈÂt:M¥Rßÿþ÷>|HªJj‰š Z7÷Âï÷#Bˆ63ŸÌW§¼ë¬4;˜³Õ¾ý¥h•Ѹ³³CåéóWúu¤“Þ˜ueÚÜÜlµZÌ]ô!®ÉdÚÚÚÒ2.|…õétê÷ûáU ë¯Ë•“?KžN§?fÊ©‡õf»ÝŽn+++WWWÄ;^[[›µ`šÕj…1µX,ÛÛÛV«•1x—ü˜!âä¦V«­®®¶Z-:Ëf³E£Ñp8Ün·ñ÷h4Úétr¹Žø&“I,[]]M$×××™L&‰` @—r¹–‡ñx¬×ë»Ýî§Ÿ~zqqa2™ƒA(Êf³µZ {dzvÙl6”$'†Õ`0ð*ˆ=5ü}ø2±XŒÜåp8ž>}úôéÓB¡°¾¾Þh4ôzýx<Æ/Þµ¾¾Î£‚o2™r¹œ°^Öd2™ÕŸÃ>æóy¡3~‡Òl6»Ýn±X¼¼¼Çt#q‰ AÔj5“Éd³ÙxßËëõ2Û\ù' ¤ƒp8Lp?ªª‹}äÚÚ\Tr‹ÍfK¥RÍf§˜Âf ÍÌl6kL/r»Ý¨Ž?™LªÕj*•ŠÇã‹äqÀúD£Ñx<îr¹.//5† €Ëå.NÃáÎ.pTw¼¿ŠJô^¤óÝN› ÚÖ{½^áäÚÚÚ¦S§¡â—\Hè‹7&ä\CueBö)ò„™A$EfÖ“¸¼.á8y _[ï.'ÀÀÇxØl6\¹—áñxxõÇã¨)‡d>S3›Í2VÕívÓ…4ƒ,f8/q»Ýð^;^C¯×ÛíöF£ ‘z‡À#@Egggv»}<#3 :Žx<¾µµ…¼DÔ;ñx<.—+“Élll”J¥ ìü†Ã¡×ë%cl4ae°Í">>®èÞh6›ý~—°Û;>>¶X,^¯w:>xð —Ë…Ãá`0pEd‚ÀòÞÜÜOæW -•%B†x¾Ûooo¿ 5^Ýn7SêǨ¥êÞÎn·ëõzòEf³9ŸÏolllooW*¬ŽBÕå‚N§»¸¸ Ñ…L&* jµŠÜnaà´HçS-KºÞÞÞ.ž;×ívñ¥———ÅbÑápÐ= ±ÙlLÒ&_—õƒA0\_____GxÖh4Æb±UW£‰_$ê˘ ²KP:=º½½]__zB#9‡£6ÓC iˆ-I"rZÊþb:X­ÖÑh$l†¦Â¯!Š% Jr+½^/CBÂ9L2îü~?ý.r \ɧòp0šƒƒ—³³3h‚!p¹\_ýêW¿÷½ïíìì˜ÍæÉdrtt4ÏÎÎö÷÷{½ÞÕÕ|‡n·ëõzbŽD"éte{âñx:ÞØØH&“^¯—ÐkbÀVWW‘˜>Ýn÷õõu£Ñþ \³ÙL'@ŸžžâŠo<.Çãããcl+óù|$1™Lùä>ÏAf-äŠÂÞCÍyÏ Õ‰TN§SÇCšÁp7 ²âʉ¤é­˜0r…mý|®ªÕê³gÏÞ¾}Ûëõè“cb1„£ Ìâµ ’\²ÙlrúM˜ Õ·bå¹­1Ó0B *œûüºp·M‹qQá˜øÝ<>,¿3½•ÎÉÉd2ª® Fc…T"åL&“H·Ó½Ã·Ÿ"”O{£øœD"a6›-ËÑÑÑÓ§Owvv …v¸ÈÙV®Ñh ±Ë’Á`«««v»=ŸÏÆjµê÷ûC¡ÐÍÍ |F '½É‹D"ØÅ3—”\]À#ÊåòÙÙÙÛ·oÏÏÏiõê•Édr¹\•J¬É: PIOiZ•é!&.ç¬äªD„Àm¡ÓD2DxaZȯx Ëå -T FgVWWih$Q ²a¶4‰äóyá ‹ÅÂ<†+"9¨Ñh\^^ò€ª^¯GsQær9¥ è…TâZ¦£xub•H %ëœÄ&ΚNÉlp€D^”ÉdäȈ> &¤Ò¶0Wó‹à.$—TQÌ3qƒAÈÓ=‡(%d2{5ÚÝ M§Ìh¬é˜UaBD>ŸGî€ÍfÛÚÚ²X,…B4šƒF£H$”™–W8­N§Ëf³ÈQF†´p LÓÝjAM c€ÁÞÜÜär9$U# ¾Á``·Û‹J ÇF£R{ÑhôààÅ6PI}0àè Ø$!Ç”ƒÁåøŽaq`†ºÝîúúúíí-ýáp¸×ë—ðhJäãy<žápø×ý×:îåË—¨ïr¹')æ (.Z/•‰3I"‘Èd2FCÉj¤R)>Þ•H$¦Ó©F;È·œZgï„§iFoàiXªÅF I_ƒA&à=±-ƾ™`Ÿ <ŽÁtÓÓ‡4†N4I.íõ“á —R©ÀѪ¾‚|ô±ï'¦Ÿ_ñx¹rrÒï÷M&ˆ®G£Ñ“'OŒFãp8´Z­HCèõz(Œò ÏŸ?ït:&“)ŸÏ¿}ûç€ã­¯¯{½ÞçÏŸ£Z0›´–üÏæææùùy¯×3™LÀÍôûýX,vvv¶²²‚ÜBBu:ƒ¡ÂüWG¡;…͘u(…}®ûe é{¦¹\ŽÑÆ~úé§ZÔ1Þ|>¾Å|>ŸÓé$§é,ì ƒÁ°½½Íc0„¿Ïår8ÏŸ)¶ÈY™_ôÉìa±Xôx<'''LGÙív~J2ß%bÀòh <} }õNÔLU çÐÀD"@‹Òw1â÷ûN§–züDÿJHR·æû^íß‹ÅâñøÑÑ‘ü\ûÛ#f¾ëÁƒJS’ÈG}ô?üÿæÿø‡ýv£zöò§ÿý?ÿ¡AiÙÞÞF‚ì×¾öµ\.cÆñ_¾¾¾>ÓÇlnn’N§éi€˜¿b3—°ª%‰@ ÏF›N§@WèÞåž2§ÄŸþùx<¶ÛíN‡ìH¶··a¶œNçãÇÝn÷ëׯ±a±1ÕjÕh4Úl¶Ñh’ÜÇ?|øçUÙlÖl6'‰P(´¿¿? =z„]Z:v8 ¤[ öOÒÃoÞ¼I§Ó&“éÉ“'àz˜L&Ïž=s:$™!G œb±)IÎKéÿÒcçr¹øŠ÷ æàj¯1¯”©,gŒ Dg¹êt:•L¦=ÑhÔëõbi'?¨V«Ów¢{G©ä Ñàš‡üñøøx¦• -¤ € yÚ!ÃiKS»3´½½ŽE¸Þëõ^\\0ynȦ¡«C?ɇ~"Äcä´ŒV§étšËåè‡#2·Å˜umžµÝ/³B»Ýn¥,;èŒÐw¡³éè9Λ ÒÕ™Lfî(ýÉÓéT# X,>{öŒ†ö ç¾êÓìvû£GR©£Nª+“Ö3§Z­v}}ír¹öööVVV€•«Õj8k•Ljg­)P.—1Ì8Ĺ'ãN‡Á$ø½ÁG1•J•J%æðÐívO&“z½šÍ& ¡ 8©¾ººÚÙÙÁ s¹\rA’z½n4ºÁB‰DþæoþNP­V….иV«h†ÉdbµZa"{½ZëñxF£Î6h[†š˜½^—êõºÉd"1ÆÁ`€7sCõ?¾?q*†h'?ßâñø‚ž/ˆGþâõz••°*s) OtäÒjµ´T}¥Q“V«Ûù-§˜Íf¾@ÀLÂŒ#0¶ƒÏÅ´"£o³ÙŒFc«Õª™L&ý~ÿ›7oxTo6›-•Jdô‘WF³ä æ‰õÉï÷‡ÃáÉd‚èãt:Ëå2=Ü Òö^«z½^›Í¶HLÕ5ÉI°ö|`fäÀ]Ñh„¸$ÄçêÞ1²’ >«5A>™™& H\IVWW?÷3™ Jw¢„ oO°Ño4P'§Ó©”ˇKP<´–ë™$9?ÿüóo|ã&“©R©Ð&ÀqJ™Ä‹‹„ž„¾ ™ô$ŸÏ‡X?ÈdéKØ#¯¬¬¦Qf<®¯¯›Í¦Ï绹¹A1ñQ‘Ó`0T*À8Ày{{›H$ƒA¡P@J÷p8<::BÒ`¯×ûøãuï*v æ *›Íf³Ù|~~NOW¿ß?Pÿ‰.®¥{Ç3ËØkš…q…Ñ!a=rŒ#JÙ2eÍF£êá]<«ÕÊLWUŰX,v» ¨“Ïç;880›Íô™7‰ß%‰Pë~$Hðª8VœÌ!´²²b±X`èAò«}ò^U¤íß;‡á´r ‡Ãó…§ÈY(ŒFc³Ù¬×ë‰Db{{;‹M&lÄå \Õ8TšYÀ˜Ê7<‡ï¯–âoUgØ ”^ Ê^‹Â ½º‡yM«T*ª¨/Xá%«ÕŠÑ¤á´f³ô=LGéDl™´»ƒz§§§JC†sºººòù|ŸþùÉÉÉþþ>½2ä•Ì¡+?Éëå§»r¶ÜÉ;‘}’8!MØŠJ‘øËññ1˜pù ÙÕÕU(zûö-•···ÝnW¯×“ˆóósܳX,ø ½^ŸÉd>ûì³çÏŸ#òS(@Aºë u@“$“IœUŽÇcPÒ-I§ÓØþŸŸŸ3—C%YÈ ·Fãìì Õ £Ñ(bëÉd²T*¡ÔX*• ƒàÃW(y1˜Ãª¸1½^˜‰¼77¯\¦ÉÈ Ø=äï%ïâISœ8NDÌs2™Ð§;¡P(™L:Žr¹ «Õ*VkP9á÷Ê•p{a2™äá»l6ËpÄÍÑršµOâŒËyHiøPœNg0·i¯×«Õj?ýéO#‘Â)Ây'™Îòƒ:Ô^AcñZ¥³*ÆLOV"—\Rå0d»sDÒ·ZèÕ›&,LNÏ}a0Mþ"áU ´Á`X__Íé]ñøñãÌÖ#MgN˜6ˆ.5 —¢áp¨tÄÅ“ÑÇcíW6›- ý~Ÿ©¬\­V Ø¢^¯cþ |ŸL&»Ýîh4B6+‡ñâÅ tñË—/Qmžì]šÍ¦Éd¨(‹u»]„ãð4,u¥R Ôs.\•••Z­–L&ÁÆD»:mPüN§ê^¤­g³YÕŠ¢¼óÂx^´½Ëd2L%_毛››oÞ¼©T*dSu{{ —‚þ! GöqŽ`%Á¥`0(?¡Q’`0h±X”N,b±ì;ÊÌ/25€f"3«««ûûû>ŸÏf³AÙàœÊ½uy3|¯Édât:÷÷÷kµZ«ÕÒ²KBäÍ~¿Tõùv{ðD‰þϧZDâÔ¿\”ÓéDA€b±H>ðóTufñÚóôtÆ.ÂápHfœÏç Â#a5Nƒê䟩øÄƒTJ®A·Ûô#Y@Zäòòr0ǧX!2™ } «Ç3 pv²»»K¢ HëÉÉ ¼$œaDC¡¤gœ_ûIudp>þœxÐÇÇǼþ‹EÄÐ$¦§ÓéüèG?’Ð*“hžp+ wòFŸÏGª¥Ñw½}ûV¾ZwÓéÔår ×-`ÈðÿJ)C’ Ÿd"•¤ Ã|l4F£¹\n¦…ŸGFãððÎ A3_¿~­ºçcÐ3¤çƒÁ`*•§a¶B<ÏLEé¯W]ZS)qCⶇCzôI÷2“ý°¶¶6+‡<Ð2w&È|ƒK†9Ùüëõztüƒ(!ݤâ3ogfjÌÎÎŽÒ%yã•ÌB½^nŒT#ØÈ `ÿúú£þð¿ýÛÿðŸ~ðƒÃðón¹ÄËÎÎŽÒºE»Hkkk^¯—¬®V«•ô,¬@彊Ïç[YYYYY!ÛIÂ¦ïÚÙÙÁU³ÙüðáÃßùßÉf³À$F°f0&ƒé®L&3_˜…·Û-L÷ Á€‰Dâ}NÈ{%PªûÅàU…Q{œŠ“‰¡ßr·T:v»žtápøáÇ‹sq‰D"Àª¯­­ÝGâœÉdZ__>÷nŸ ï)-â}Êêêê¬ ¥ét: ºÝî»Õ4¹7èÚuFuf å£>ú‹}ò¯þãýÿîO¾ñ;ÿºT¹,¹'''ØßðÜÞ'''ÝnWhÚ^¾|©ºO‡õz„b"‘ù «ÕŠJwð cqzÄüÌåri¤oA>Þíí- ©½zõªßï W~Æ- ä®×¯_' Ä2™L¿ß_YY!Õ¯ÁM‡£Ñ(ÑKÇc4³Ù,‰Úív¤T.Â=ƒ’E†Ùl&sûòòòž`¤N§Ób±Ì]`ÂáphôNˆÎ0+Ö|Fåk°*WÅùù9¶¹d"Ôj5:#eeEn2 ÃLìjñxœ†˜”Ëå/^Ü!0¨T*áhóàà@KÌ §3vö÷÷<½[¥º¹¹Y9^.MÚ¥KrÕ=::B¸[»bœ9Îõõu^ÓœN'Þuç¾&oùµë Œ0}€D7o&³ ÞÊOz§´¢ç¿ß‡7×ívQЬ\.“ ©×ëq°/~÷Ã[Þ¾»\.aÉ,Â] ®ÅFÛl6óz€‚xÎáááÑÑQ¡P888@q³³³p8Œ>ÒŸÏ7In$JÍZ­Ö@ €Æ›L¦98o€µ^Roκ_áu ‰€½Þd2ŽÆ/k›ðïÌ8áÕà[ßú¿ ¦k\U«U%¶lrtt$ë“A…*Õ"šÇÛÍ÷&ãÿ†B!~Ò GŸ† P£X­ÖE¡ªa¹»#ù¢P($™ŒÌ%—Ë¥e°$SU¸>={öŒW —Ë…šÉ ß•:Ùl¶H$" QÔj5ÓB7Ïf³Ñ·ÈkΉ'pÚ*Á¾f‘iÁçÊ·º°So2«,_(øc‚ŒF£t|– Ü•6§ƒ&®µÛíÙl–„YmŒ«GGGGGG/_¾•ûd2ÙÞ•JøGT)<;;£™°Æ££#4~VD*XË÷°ë"mm6Ûƒ†*‹ív{îýêQ GDËÎr:îïï¿}û–?b}(]&T€ !VÖ¡×uäÜÓŸp‡Þ!½IbZÕå‘sóñkñxf æ[,üÎÀÈK~ ±if³Y)ý‡7A¥RIKöQŒ¹Åëõ’”×™ 2}ŠÉ;ëÚG5‰ÎH0ÂtóÀžC<ù|”¤ÝI&Áêõz%ˆ™dœ¦ÓéL$¤üJcÇ€ פä®R©”Íf1œ( ’N§½^/öC(?€Êr¹ŒˆJ¶D"˜Z³Ù¼³³³µµ¥äkÐæ‰ æ˜ÃÖ~—ÑhTeÝFŸ»F‹ÅâÞÞ^2™\__F£<£±Éd’dòhí¬¦ãñøùóç¼æ,bT©K…†“V#«)ÐÙÌÔ+•J±XL#Œ}>Ñét···LüP ÓMøMCµ=(†ÕjÕŸ+!V–6Š`óçFgäÉN{ß2äÜëõz<šUr‘g¹Oœ{í‹I@SÿèªüÖoýÖïýÞïÝk‡z½Þû®¬åv»‘½}‡wƒÁÛÛ["F}*”õz½ô%£ÑHûMIã“tš ®´8†Ì5†G€ÿ׸r»Ý³nqPÊ–±‰Ýnœëív›çcÕ½‹³ßëq×½jšÉd²Z­3%à¢âªöDA¸Ã¼@56-Z=ŸÎÌ'MCùÄv» Åp»Ýw^Aø‹»Ý.!Vu:¼/ƒ Òüâ°è{’l6{\SXœ²Ùìoþæoê–²”¥,e)KyïrüWÏÉ]öÈR–²”¥,åË&ÿ¸sêv»÷𬹔¥,e)KYŠPøÃø\œþìÏþìûßÿ¾ð6-ø¯;ùÍûyˆF8ÛûyÑ—§ß~åºîË3Fÿ4»åW«ÿÿiΑ_!Óñ»¿û»{ßüçâÅIø ü]~†ü…ü“ÿ‹ð¿’K_àëÑ⯛éi3õÒ]5ûËÐø¹å>ºb¾ÿ2O„_éA¹[Í|Ïóî=ñ{3†s´í¿ÿõ zZž9-e)KYÊR¾t²\œ–²”¥,e)ËÅi)KYÊR–²”åâ´”¥,e)KY.NKYÊR–²”¥,*²J‹_·Zÿ x¨,@I>àn·ÿ¤Ó,;u)KYÊR–rO‹“^§ûgGb–:ÁÓew.e)KYÊRîBda½oÎR^·?>‡Óå µ”¥,e)K¹·“Ï`øÀjÅ~h¬´äèõ†wëÛÇÃáùx<‘Æý–²”¥,e)KYhqúŠÕjÑë_ ‡Ÿôû­é”^uçÕét^ƒákKÆdL§ÿg¯w+e]ÊR–²”¥,eÑÅiÃb9ÿ—jõGÝnO¡pÅc‹eÓçËètŸ ‡?î÷;˘ÞR–²”¥,å^§ÿ§Û=ØíŽjöYõú]³yÃlnN&ÿ{·{8/—¦¥,e)KYÊý.N/ƒƒ¤”lÄ`øžÝn×ëÿ¯~ÿÿî÷ÛËmÓR–²”¥,åŽdN®Y¯ÿšÕúM«õd4ú‹n÷èKIK¼”¥,e)Kù§µ8õúÿÉíÖët?ìõ~Øë-—¦¥,e)KYʼ8YôúÿÙëÝ6›:ü¯­VkÐ[ÊR–²”¥Ü©h*1¥–£N÷ÏŽép\ŽFÿ¥Ù$= Q•äò«ü?µÿ@ã+ø«: l]wÒÔ»ú÷Ö’;”ûý»bA%ù2ô¹ö¦.ø!÷­~s÷ùŠFuÕÞçJ?»«yÿz>·9Õëõ¡PHqqJ§ÓßûÞ÷TW)çþþïz“©™ÍNÎï,·MK™]àîL—ʳ”/±üä'?ÙÙÙq»ÝïÿÕ———Fc{{{Áç ‡Ã¿û»¿ûõ_ÿõ™î ÿðÿð­o}Kþ³ƒƒ³ÙœÉd$¿ùÛ¿ýÛ'OžØívþÒüã§OŸÚÞÕ!úîw¿›|ð-ñâôÛ¿ýÛôG$oÍäì¬ÿû¿?þ»¿Ó»\Oþý¿ÿß~ã7–¼”¥,åÿ—òï|çÿøÿßöî&¤4Œø3“l"³&"Xô U{1¢Ðªk!ô0âx¼ÅCü¢‘ţ Jé"x‹"¹z‹DDP¶ƒõ#jm\ZIš¶×Mš”_ùØÃ¨uÕÕDM"åÿ;%oæe†y23ï¼oNNNôwm0VVVn++Ëçó Qooossskk+-,,QII‰ÕjåãïïïÏÏÏ¿õî˜ø"! žeÆ/uv¹åBcLâ¼ÃÿEn¨&~Å•@Œ]8_>­?ÒW†¡hñº<8(N€âp!1,{,ˆŸÛüúÑû€è³ÿåaÏÍ“'$"†a‚?ÅÛ<~›ç Ñǰ,Ë ¾§@ àÚý„¼@Ìù}'ë­ g^ŽO_ˆ­ß»M–ýü/Æåžq,~IEND®B`‚saods9/ds9/doc/user/gui/frame.png000644 000765 000000 00000143051 11332353405 017175 0ustar00joyewheel000000 000000 ‰PNG  IHDRsß… ÓÌbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ)pø® IDATxÚì½w”Ç}&Z}çNÀÌ`2A`Ä0€"Å 8”)Á"MCñøÙO¶)ÃAk­}´kÔ þ˜=y3ÉfŠ…#‡Ì3°¤v÷ ,\”ï±f=5{’Þºç±oŸ?è ž9sæ™Ã]‹V].lôøÁ—{?ùÜÁÓ«¯yn 9fOŸ=vøÊ+®Ð?äÑÇ#„t÷ôæu¬˜Y‰çÑ[—^zÃÉ=?Øpû;;::vL|vס}½C˘#OÏžXÝ{ìŃdùš˜ÃÀ’Y¹òÊ+¹òÊ+}ì±î}y+fV/JÝ=LJ.ýÛOýÃ›ßøúË/[óÌ—¿~¶o°ÙÕCïÓØÿ³³ýÇzW-êÄ­8çyž¹Zó(d¬ŒYÌ}ÃË_zöÕ‡zxéÒ%—^pîžx`ùÚ·Ò:þÐîŸ\±bàÁ§œwÅÕ¸¼ëæëÇn|Í—|ü¾ßÅlØ2kÊáóÿr8VK³XzáÚ'òõÇw5ÁŽÙ}»~´ì’k !Göí¾h˜|÷§»V]÷ ±ýX¹dð×ßñúKW-ëlvÌ9ñü+þzÇw>>^ò±¿²d¨Ÿ²ùÏþõ¥}3á×^¶êß¼vÕ9‹:—÷þú÷§¿üàã¾O!ÿߦw ôþÅg¾ùíï*ÐÝ@!¾èe¥¿·û~óÖ¾]_øÖ÷=âßrãõˆzÿø;‰™Æ®ÎæÅç.yüÙ—;::n¼æ’'ŸÛóØO_}ùE—_¸â?Ýùö÷mù»³^ó²ÕËŸÝsàä©ÓøUPrbµ´Ê‹î“?~`Í5oŒ=ö#¿ÿλÿÇŽàó=¿w›ìX™f¿ t4»—_õóû~¸³³ƒ4Þþ]ßo,]vúì‰ÞÕ7t-èíúâÁ¾¥Ãý³§NÿƦú^£ÙÙ=Ð×}ìØ±ÞEç6›Ý„7_} !ä©g_¼ä‚s×½éµÿôå.^Ù¿ û]?!äþùÒ}ÿò¥fWÏ_{ùß÷kë^¿ös_x߉vWý¹¹¿ùÐBÈøÎÆn¼ª§«óß¾ù“g^ÚÿÛ·½qñ`߃>û?ÿí;ss>!ä?¾ë¦KÎ_¶°·ûÔ™³»^Ø÷·_xøÅ½3„KW-ûí±7.îÿÉS/>zâ­×¯ùÊCÓ÷îABȲá…wÜrýå,ïlv<ùü¾¿ýüC/ìa8²zÙo½qÉPëpÚ>ð«·Üð¦×\¸°·çÄìé÷ÍüÙ?}}ͪå} ºžß³ï¿âïô¾öÊKW­\zñ’ž]ûÏxD|+¬YµìÆk.yý•«_ÜwèÿìŸ;úú?øÉÏ~ë_ëìêY}þ9ŸøÐï/ì[°°9{ðLãö›®¹ä¼%=öÜÔžþÙs/â „ÌêÒ¢ûËÿîø?ý—!”þûÇŸøÓ?jø9l9VƬÒaô,ê»à†ÙÝŸ=ëwôô6Ník¬8où*¡=>{òÔéž®Îßõ[Oî9ôäî½ÓϾÜÛ3ÜÑÑAˆ×Ùì¸áÊÕ„jâCðË— _rîâWNø—­^ÑÕÙô}ÿÓ_øfÿðÒþ¡¥O¼|bϾ™s–]uñÊÏ?¼‹§¡Ûß²öé÷^{ù…wÜ|ÝÑã³O<÷òð£W_üÀ÷ùéîCÄó– ÷óáŸì;0sÍe^{å¥ïûåÑMÛ?30°pãoí_Ðý“égŽ>rÓ WBŽzuæÕ—Î9wõÝ¿yË¢Þo~ïÑý¾óçßô‡w®ûÃÿ÷3³gÛç^ÐÝùÿ×[ût?òij'½éº¶SÙU—¬¼õMW<÷Ò¾Ï|þ›}½Ý×\qɱ{f—B-VÖZ¸]~ìþËÏ}øß½#B«×ß(8¯Y©‡÷qÎ`÷•—®ú?~á-+—/¾õ† ÿrâ¡fׂ7]u!!ä»?xÌkt|ÿ‰ßrÝe?÷º«?ù™¯91Kééîêë[àu4Äó†öB96wö,áL»v¿4¸äœ“g|BȓϾ°`áЙF'!¤³³yjöDGÓû_|ݵ#¿Ô· ;<¤«ÃëëiB^سx‹ÎYýÊ¡¶9wÑ`/!ä‚ó–ÿËÇ?n\±dèÈ÷ŸX²"0Þ.ì%„<ÿÒ^Òh,^yÁžÇ_;¿çOv½ðýÇž¹öò Ö®¹€²÷Àá-÷}îåƒ'þtü‹W¬è]¹lxÏÞýoºîÊ7_·væðnnŽøó—`x ×ó¼öìýÙ“O¿¸ïÐвó»{û|ßkt4:::‰ç­\ºø®_½iÉ`ÿ_úKÿ¸ók -k4›Äkô.>Ý{òèÙΗ;´÷àeõöu’¯ì^´b5~ª”J³º\g•µFYt¥ÇþÉ{n ?ú/?òÿ|òóÂóJ4«„ÒO9xd×ÇÏ6/ºîí'ï?ðÓ/7ÈYBÈÌô7»¾³»w¡z¨Í޵óröà±£ßzô¥ÅKö«ïxs_ÏÁ½/®¾ôò«/=—rëM¯»õ¦×û÷õö¼v͹?{æ¥S§Ïtu6éíoþòŸot7^sÉÊ‹B¾÷“鎿ÏÙ³g›ÝÝÁ¤œ9{¶³»§1ï]åûso~Í…7^sñK{|äãŸ:vüĽw¿·ÑhxžwàÐQBȹ+–võô¯±jÅ’°Áƒ‡OBv¿ôÊŸÝÿ¿ÃfŽœ=sÚ÷çMBÈác' !K 5;»=ÒX¾¸×{úÌÜÇþák§½²rÉàÿùŽŸ{óuW¾n䜉ï>ÝÑÑý½'_9óèsý½]¿wçí„<ú”×ÑI¼ö%øóÏL­XpzÝë×¾ç]ïø÷¿ÖñÓ§^|à±Ý?š~iöÌBÈšó—þ‡_yKwWsË_þã—¿õ½þ¡¥}ƒKš=Ý׬9÷k/¸êâsææüòäo»ïÁ<ÒÕÓ{öì™fg'~®”‡Y­¬Á ±5XÖZÄ,:ö¿þÎ-¡Z –fÿä=·þ—ÿùEþ¼fxîÌécO—xÞÊknîìîí\Ú{vÍ'žþvwwWggçÑ]t_õvõø»:›ÿáWn½ïØÏ>ýÍ¿øç¯¼ñª‹nyËõï½ýÍÓÏîùèß~½»«ó?ýÚÛšý3‡o½öo}cG³ù¯ßøéÓ{fÞ÷+oY{ÑŠ§žßû‰üâ—¾þÝ£ÇOt-èXrî‚þB|‹Û 'fx}è·o–íù¿úRô(qLª†fž70௾lù¯¿s ^³ N|â…-YصwàµóÑ™‹Î_³ïøU Owvvú¾ÿüs?¼ðZÅ:=÷ÙïHºxÕšÕÝ´áuW_Öü›Ï~å{O=ÿü c7]wÉê•Ý/íýÜ×ü—/|kAÿ`g÷"ñ¤¥7Ó{|çÇOœ7|ÕýÇ ·ö[?>9{º§»“rböÔ¶OMþæú.^uÎ÷yòËßþÑ-£¯=;7G9yêÌŸŽñ—FG®¿êÒ·ôôúà×®|ÃÛh©ËhM鉔dž´œåýåýÖÛÅçeê³>óÂ^æ‹ã¯<µºçÐwY¹öçè“ùssg^xèºËV={öÐáÃÓ‡úú–] ùÜÜÙWž›>{úô™3³þœßèèXÐ?Ô¿hiWgÏ+»§O<Þ7¸xá¢e¾ïBfO›yåyxË/ºÂ#äè¡Wg>=;ë¿ÙìZ00Ü7°¨£ÙÕÕÝóÜcÏÍZºráâsžÿÙ÷ !KÏ_Ó70ôÂ?>szvhÙy‹Wìñéc‡ô,Z´bÕÙ3§÷ïyöÔÉãFGïÀð±™ý¾?·ä¼‹/^öÒ Ïœ8|àÌ™Óûãß»ú² ?þwŸûöO­XÕììšÙû‰cGNŸ<>77×ÑÑlv÷ .Y¹ oa` &„øþÜþ=Ï8rðÌ™ÓÝ=½žç<~48ã™S'_ÝóìÙÓ§ü¹¹F££»·`ÉÊ®îû^Ü5{â¨v®£ÙÑÓ7´pxiGgWW÷ñôùþìÉã§OÏúgΜ>=Û7°¸³«ë¹Ç¿Çì5¼bÕÂáå3¯ìîìîéìé#ž×ÙÙÕìì’¾‚‡^}ùÊ+#e`ùîWd;¯}ãÏ·XöÑÇ—¬HãØp7áÆàØðÛƒ{_h×geˆúÔ‘ý«{=±ûÀò+n"ˆÎõ::æ–®=~jæ²K.ñ;‚ÆÛ6„Ž¡¥çvõö7;:½FÃ÷ý…gÏt4; !] ú‡—žÛh4½ùÎw4;›]]ƒ‹Ï™›;ÛÑÑ éìêjv-P¼Ru÷öw“þ¹3gΜžíhvzÍ¡åçõôð$¼pÑ ¯áutvA¤PfÉʪÀ«Þôv£„^HÎe6ª3ED¾8úêîéã{V]ßììæÛíéxdÿñ^}ääÉ“§OŸ:rúxÏÂëä]&½ ż;°h9³¥³»ghéÊðÏ®žÞ.®:OK¥-;7ü¼hE;¸vpqûÝ¡ÙÙEÒ?¼„oç¥W¿õš ^Åê³§~ä©OüÝ¿Í9¶ä¼s¼FÃó¼ŽfgÿÐõ%éìîìî~µ !¤OTÌ/ó^H‹$ÁÄÌxJJ­6õÓäÝ,Že¶Öàçö¨íEÜ»{úØá™¹³gF³{ÁÀ¢eÝ zú‡(9N<~âè!Æ0«Æ£>¾ °«§7¯cÃ-û÷<Û¶{5f‘Åçôô 6šÍÀ¿«ÑÑìYÐßhÀ™ åN}ôqýCôGåu,ƒøL•Ç‚…C án( ¹ööw÷ö—ëX³šõøáƒ¸¢`ŠÞaN³rüðÁû?øn̘âݼ?$W¬&@"lß¾þ³Éï133ƒiŒ3[ YÀ%À¬f0+€Y³˜À¬°hš0<<,Ü~ðàÁૃ%æÏÅ4ž‘>u’nðÇÒ}p8´äcÏ;wîd¶¬_¿>Ü|NcŠ0L¯Lûãüg¢£¦tj‡7mÚ=dN¡xnç3á¥w5X»3˜ÛÂBxqSý™4íËòòèœ+íþäu;üg2èÎ;wîܹ~ýzWœªx‘*ÚOtxx¸ d2D¾]J29¹á…óéöÒ‡7sf«žœZͪÉð©J=™² ï~ëû5h!ÍÕ£³»Ir¼ñÊH«ê©°»ßš ïŒ Þwdï²ßd.æ/Þ4ääµZ8ÏÅyǤùR¨J‡‹¶>Ä?a3~½+¸ÙÐT™þ̪ðךüÒ;ŸüX²—«™WIÙ ÔJ°:sϬ:'sE{_{¡•5¥¡YŒÝâq^ÿùuÖúüJÃûD½î;ÕES Én²üÊh#ÍKïêgh1oê7€ Þ þʨ°¸B³È?ѾÝah²U“Š]š¢ýøéþÄŠ-kTÕçoÈ)”ÕAèNáðÒÝÒ!ÉYÜBáX„ ªxpõ~P%ÆuˆFO¢”ÞUÓSšÏzhÌJ^)^Ó»4U¥Õô&6Éµà—–‹|YùîSµ—e>Õ“,3¹Õ9Çô7hwõ›)Ýš<ë8aз·OõËra‡æª'L¯2ëì:k¯PÂ!dv]ø©Vt@}öYØ”¢ñŒocõäÈùþÐtî±lz¥ó3ç'P={ÅyˆÇz¡˜ ;¥ä]ó·ßùÞç÷:~øàý|7!dffï/À8Q¢ Äìåx[ŽB~0³¨w`xß »v?ú²Ïc«ÎñÎ (À¬ä€Úz¨Bî×ML9’+€9¬ÞÜB³€K€YÌ `V³f0+T‚xÖ Q4ëöíÛ1)à†YA«¬5xÆ ˜ÐÇÐÐл?x¿X³àX³_0 ì€ À¬…ÃüÁ`€òbff“`V<›ÀÆÇÇñ^vÀ:+@³Ÿ–Å$äzÍW¡˜×Å€Y‡‡‡…Û<|…¢öF 'žÛpc7*æ\xEb/“ðŒú‡u¬Ä¹€YWÂU(æu  k >ÈjM« cÑ,+ÜÈ_£“ªQŸ1öp žð€ !Ëá£8„¼ßq‚É·=òmv{x®Ö>ïgÏ.ì ³3H»ÙoG>´þäXöðo‹;o:WôИaÎÌÌ(r+5ìèþSÀsG6o4Eé3–…j¤/Dø™ÿ Ó ú(úB3Ÿeç ‡WŸ-6Gù›côF‰7J!þµ}¬ý9h!üìæmiïž(ØÇÛÂvÕŸ"þfB>:Lîžß41ßìhëÏ ÍðX¾‘`ºóþfâÎ÷jsd¼aoù›¥O¡3·nÖY 'C!€ŽŠ f,°±3…{ÆR¸ìBȾÕáïðúððsØ8ªÊÇ-î™hd‹ðæÿdÈŒaÇ¥è#ÌM2Ì~¦;éOÍï¿™ewñ›Á–/ehîg^‚ê]Í =êV°òÊUa fŒð±WAÍŽÂoÝ.¦â½ … µojŒ±– ¥Õ^È:íSQÆkÓ¤ŒÅ# :ÑÁü!!sÓ–E '™µZeÚ‰í¼1³ê¬ðzMiµPºtõ”¡úMÅš‹e{Òæ\a—h>ÿ ì·4e¶lņCfT¯bgÆjͰæ|ºŒºÁ£9–½ì¸6Uæ­`†«XÕèO25ŸÞM¼AB¶Dåìün2+li“oÛ¼,1ØZ¿a„ É„ÚÔ?‘™f5zRC¹ÊH`Ìzjª,žýuÄ ù¡XÀO÷o{"˨ yƒ‚žx£”sÓfVPÒkœ‘“Ž ˜H ¶êáóÛ‹²²:üê†YiO $“¦¿Qݲé…pâÚö7ä õÓ_Á»:¶VÞ™6”¡µ–æÎˆ-w³\ÿÍ;û‡"šaùÅÑЊ+4ù†M1=áÙZ6¦o*ñÖ`þ)I /Ån@ì|Ê|š47*vž%v£º)YÏq@©y—ñéÕo÷ïmû OotþÿÍ}9jª%dÛvãAq?™FXIéÚÐz{ 3j~„ÇêyƒgÀBTOàŠ¥í”4ô³¥ðûðD[¤ò,.\7år±¦œ¢ørT5FÆUJ}vµÓ˜µ²4Æ r‹P ¨He¢mfØŽ6±2ŽH¡Ï‘"vEm©¦e#l=*mJÈ—*ê3,ëùËŠbòØ*@¨š&PÚî~ne\š TæñF ™ dŒøcâÌDä‘Ä´Ø„;%¦ÕXž‚Dcd­fM¨J@‰ ÄBÇ›¶>‡ä:Q¥í0V*ëakyU¯'B¤ÖÆ ïBFç£zôoÀ¬©%)ÈLhæBÀ‘`ЩHt #>EÆ­ýGÅý—…¨Šžl•e¬(—}«.0kºPC€âCX{(#­ª Ê–³I?1¡TF[e˜ŠdaÜ¢ò7Öé ˜0f\>ý/™Ï ÌĹªé­þpL@·‚ݬW¦qíËZv©Y…é„Ù ìRÔ!},«ƒÑŸêk¡³€JÂI~ýF˜„…‚oÇâ™)ràDŒ¦Œ”™›Š.âN ÖSe%á4‡™Dýk1«°· ±e\ë ¦†9Õ•ÓyÛ^ ýPWÚÑØR )™c#lšþÑ8—¥èŸ´1™¯L%€H`÷g¸Q_v ó&*”wRfe2ÕÉX!ÜÂŽRüÀí; ^w€ºÃ‹R©Oˆ9›ô(¾ [‹ŠÆbšz'Ù†EKÇó0I ‰¤Œ¹,·°Zv‡‡D{K»M£9t°ÎV Š0![w¥4I¢9u™Á†¥ßrªu ÍIt)·€Šèü…BJ$˨<É)êÛÈä²EœLh7V/|ùο IDATÄêó«fµ¦Ãº )ú}"3Å:+°²µ6‚•&§äb7¶DL˜5""7ýáXÚ:Ü ¬»rzV»ì2%cùªS-Ò±­š“™ºo0ë²~ZÒ­Xg€ú¾KlqÙ‚ÐYIöão&žw°ži‹¨h¹Bމ¿«Ò1I«Ê^d´«\SgÖƒê|‹ÓoXò€ñýÈŸµ¥U»õWo‹®†côhè'¬ð­/ßN‰·„µÖÕ—µô0¿1v¢bݤSdVr–å[ vp›D"LA³W¬´m™a7 ²81ëµ²´J¡WùJ«iÙJHL–cY­&#À€âRŽWe©jÇ‹jÎ3ææ»ÛtãÊ%*FÑò¾WÂ5Ô6Æé)§–p%î ê³f€ññqLeµš ´Lmð–½w0Zu|JkÙ2R5J·êÚæmõ9!à`Y-t~Œ²³X¯UƒYSÊG@Ñd«ça&г,§RP~œ(·Âzæêµ[~OÙ‚•f®’9ßšŽÛ—¦k˜5]lß¾“ À† 0 Ý€M›bùlj>¥þ–ø6ãݬ¦ÚéCZe6êHÒ–˜´Éî³ÅxÈ`VÖ"bff“dKDÄ#XmMDÒÃGÙײ츙õoï0‘›¡?0#aÛy%¬1VгŽ9vQÌ òÈãããxí€Té0¨VaãíÏc pÀµ„ˆm¿4A2Q§‘ÿå¶âÀ™¶<ëØ™Õ¹Ÿø?™e ž€z0µ¶ê‘Z,µšæä3J;,Žoe½‚Å §XÝl‘¥ù&_l±Ý¨´”:ű:¾–oG?U$˜€:¡~F`žÜPàÒÑ«âl‚cmfÏ;yàãvxíÛú0¥õÑþvLwZ„iݬ³Êòï ƒV‘&¢° ëàõ–®óånjS¥•ËH’X;³Ì´Û>vÞ#W˜çAšqJD½„-Eìæ‹R>"ÈA«ja牨Ü,=^}@³Ö…VQ¨"TŠÀ%*#WÅQŒÃQ$§à”X€ -M~‘lJ¢|ÂD’Xó½ÞQo·dVE ¹a ü£œ>„ùŒZèÅçNžT˜EJ"_mg ¤PÛdJ  &#q‹»j¿$Eá…®Ò¼õ‹…³†,hJ‡2y å €!3x ÿùï÷¢Ù"<ÿJ¥Gíx‚ÎÒÀŸHê ;*îž,,µMoSܹƤƒ CN…Z–­öº…mY¨•ù8Z£šçfšUȵAòIᚉéC¢*3f¨µÜ¥í|v{2.=ª3 ±ƒ•åüã£Y„Y˜Îø‡ÚJQ¦;ù´a¼©0®”æ?B"Åãx,KmHS,OíŒêe}²jV"2üÒF]ÞÆË|Å‚‡{ö䊙jªu™·7ÿÿGíe\éÞ-øÄ± -¤¨6AŽŠ ;rÔ`„AuÈXø'E¸ª> ÊrÒ«¹|¦FÍ™"¨>¹¶‹Qcp5«þð“ë`†‡-ÓœD‹QEXª‚×Ûé…%;ó«Èâôý’1 йFõ«"}1˜€:B(ªjB«©šøI¦¹Šç-ÖI’—HV@yÉ(Ì_¨ù® H:Á,óÅïÒÊP:Z•=úëI´/Š¥ åÊ—²ar¥WÖOJå,dP™”ú3«Ë:C >kêÇ$@1©ÅèqYIé©¿v¨˜%…Œké<Âj>E F#Ê$©" Ï”:N^Ârèôý¼ü`ÖÔúÞ;(ž¤©–/ÔÛƒ>SIô'O{! ö?DÈ=‚²áêÙföWSšp»¬ÊºæQŠ;Dÿ>³¦‹íÛ·cذaÌ ¸@i³ˆl£©b+é‹…Ý4 ¹‡IŸÙg¬]Эµÿ M7ô¯ š‰ÜËIX‡?0‰=Ì Áš'fffppÜÊS'õGk M–Peêž 5.!bùëöÉrPĘ”·D†£Ù73™³âÙT@Œ„Õp ~,$šÌ’©É+|åí2² ];8%¨.œ^ù…Ç —NÝY±JªfâÀ—Êh%ÕÛB¾_µ|ƒŠ¥…ÐQ—êdÒ¸—‚Vjnu;ÂHô¼©òŽ:{ÐOޝvù;ÌÛ~é…Õ„³¡U”þ´Ða¦ÙC‘gqM,ÃN‚‹xN’…ІuÈÕé‚uúÉ«Èè+pe=vaUöâ­ÁüsêàÁƒLZúOf¤ÓÓœaz¢bçÏÒ¬nPq”º)Ó£rOMœå©e·}òiTß )«¤<¡Éˆm a˜=øžH Õöv%s™Ð”ðÅ”xÍ„c$1m*ü{[Nè–§¡5·Êÿyªm%&Êec{ͪH<+|˜"K­æ£Y!°b'\ø*£¨/Ä¥nÊè¨|-±áÛ^Æ´ªsE¬'_x'¤}®œ™Ò°>[g%u‰P—‰#|Éç \!ÉÑù˜hϳ0»!Õ‰ãÙ‘é•ÑÑùå^>ë¢Å•pÀ¬šz«ªÕTè5<‡¢ÿ¦¢y^¦¾P–„W„©ÌË×q’iG‹þÐwšìµDÅXT™—hÓ¤a™ýPV 4žlª^D]½`)ôEŠÍÍ+ôÔåÓÉÔ'‰+i.¬Ç쩨«X‰7²”4>_P™å.~˜<­àcAu¹ ²4Þ,…w‚iMÀJV¤¥­ 3ž8<Ñ2OLYI5êBˆGü8ŠõæwðƒC*Ȳüná +3½²¬:Fùñ†_uìôŒc‚nû›[)Žõår#ÉÏ[a¶ª˜/IX…)‰?~cõ‡°o꣘®Ñl“ø³yéQ¬nêhYM¡©ø5ÅþĘlY¬Á„Ä[ƒ…ß2fdõ?âïͤEŠóÿ¼ªþÿ£õ«‚b½rÓªêõBF·f9bîŠÍüJ¢È¡¨õú5¿<ïFÒ;³ ×üàŠY4Ñ–„È38ª¤ˬhÒjîo%ýyª­ÁþfÉ·ï¨þGæÿùïo¶üGs§'çNŸR®…Ì϶íÊ{·hb¦Ädëñ¤ÎËÈïš(⛉Æaõô¨®¶&É×Y™_/ ˜®åI8€~ÖnMÂyN‰VñkR?¾#ûQgÚ‹æJŠˆßêˆQ{KÃf)W…©G'E½6ÆH«:iº:ʼn¦‰·ý§ìDvÃÉ£§òÏqZ¯ÐÞ%Åa\žtl¶²oíŽ*È5ʘh„šÐƒÉá%«öÓ\!pM‰S(J¤ÏVMB íÀéÈVžÌÒk<–̘uVÆS)Œfá¥$-^‰< ~XN˜+JÜÿ»Ù®òÑȜ)é ¸·k’k%%˜Ñ‘¦W£ÓÉæÐn’…GÙ«€W™‰HÉÑØ d¸,'¿,—Lú(׎º‰M—£YãE]¥øu[ÕfX·8*ÈÖĤ¸ò7 ÂRムD‘¬|BÊvuÕAÕ#àþÑ6…3Y™Ô2šFSó™»Qç¾ìäšÒ“i×Ùžš—Òú(R›š÷|–“o}ÉŠEú‘6‰3Ð:d‘¸vÍe®¡¬4òržƒI¶,ymë.E‘:tÑ<ˆÂ8TJš ‚Oü«3üqÞM¼Áh|ó–HˆSç' Í £P>@¨Ïâ'f2íaJ#¢ù’f &~”IîOä†wAhì¨øB Õ§cl?[GÝ3Oü[¨8[$aƲTá!ßf…**fffpp€*‰õ˜J5£¥¨Ö”±£`LµL¼,݈΄ðÕX‰í‚YñlÊãããa5\ ‚_ ÌH¥J¦ã|"XÎÇÌЙøhUJÔd•‘«´¬ºFæKõS¾ÁT öiƒ`:Ná´Øk"&O«fQªJRä½t®8¿¤š]F~ ,j>¯ÃéõTa¡Öv@ê””žCVºÉ6š’"½§Ð©J‡æã­ÁÂ$¨É³Z´Pœ”§|OÒîS›ÓÉFÅUÕlªÈþ©ODoIJ¤R­Ò)hzÆã—¶Çòù#ÖÚ‰¿2ep„#RwOXé‰Ú]Yxrµ©ÏꤤFMª{º}XÓóŸp£æU¶nªÎWJ±(KøEü纀\rû¶…N¥ƒ>ßb½‚™|¼‚¬ýáKÔ˜ãi^xk4’?JdÅYù¯d; ‹„(*‡ä¾*mªú í·*&Êå…gáO¡(‹^ÖØë[½ dN^Aÿ•J¿fÃÍÂõζ~½‡ø‡æ»D—=—Ô†’Ÿ‘ϰb¹Ærsºùé²q¦’ËÕ[|îÏî,ÍŒ©Ö+ì{L}ô®úRâ„lÊúr²¥k«3ÔU˜^uOì5ÕµÂü §«aô³g~ùÌ#@H2Mø_rÍLL$1!eel¦šw5žÝ¿ú V!G*æ¿’dSÃwvÂÇ"ú’1ðÊV@y~e62NÈ4qò¶eY^‹ø÷'ÌÊü¶­)Aÿ¡Pü7tÆØXpš©áÂvf¯>Öv`p$Dj¹†ïê]¤Õ“«ZiúéÆy=*‹“ kùìÿüÿ¼Ä!»+fF¸ëL³š ™¢Õ|šèÜ"Ðj5‘°1ºšCæeK¸"µÎËžú›çóò_¥’ž„h•“S”©á÷çËÆ© á G‘)³ªŸ ±4Y–'ˆÐ*ž^ÏN‹ìp<¯›è[B¸¨°÷Å'¬§Ë£¶Dç [cœ!Ô–Ew*æ¥7ùÆæQ¢w£{Î`WŸµ™ÆS†_@¢Ÿ¼–å¿¥72;ÔóÁ­ž"‹ÛÒ¸”¸@@Yôh;TfР«þ!WŸËú+T«æÌ!ñYØ|¿q`bjÛ‡OÍ—ºÛœ(ü¦©ó,PoŒÝAö°HxŠ|Ÿ:³”êÝnLØT‘™¬gL>ÕU½@@1å¯~²!kRÄ+™O ¡RºcTfü{X*¥ÉRŸ ™Ð –&žh—ºšŽiw'u­÷Ö`دŠC“vò×UÕq¾m¯¥»‰·Eœ©Ÿá`†ò ‰¸6“0I^A7+L䤆cfEH;@q “Ö Õ³ó´×fÓ{ÄY‚‰$ p,å3ë¬ú¹‚ ‰OiToǽo0h Päj-jÓcå–ñv”ãÅ)V) YSG+[Ën…+“f˨Ϛ:ÆÇÇ1 ¸@PFÞÔƒ3!N–ÙÓQÕþj7%™¨¥÷×tq"’„þš3fM%- %‚‘sll*”…¤¥Y¢\“&™z;²Ž©yÚôÌš¶oߎIP`Æ ¸@¸@€CÚË8üÆŽÈeRX&LÖtSôS“›Mf…Ê333¸@¸@€sVKO¹jr¤þ’0·~ú$™ W'râÅ1¬Áx6ãããa5\ ‚_ À‚ÕÒ¶ Çö'½Cèñšž¤ÃlP±‘B ÜUbYM"ÑTN´µÅþ²ýF”¬jXU¦*;˜ jHBŠŠ” ;£s ÖdòyŽ¢ÌªætI ìS³o Fò9É`–d' ,%$«/$,yfÑTñ+evN`ì¬VìééT t˜eÉZ4«÷ØfçsòEâüÍ„Œµ¤¤Â©Xß+XŒ ƒÙ€f-‘ó9#…eìÔµídUZõ›ªRí¼4ˆÜncgÈÓ“ÝBÝ)­£RmªH‘(3&+¸V±³¾ ½aúø KNòÅɇ)ðÄÀÔª,~ms˜ÇVÚz(af«ZŠpn€Ù.³£„ä'ÌÈÈdV8E«4¦È]´ŽºÌ¶ûvb¦Y‡‡‡é×a£—h†kËþfö¼,¼UÞ÷˜2ŠWõFÙmƒ• t¢6¤Ÿ„R8–)ÙÔRR±òªÃDZg…pu£~"ðu[+ Œr|ê—­åŸéuxvg_©TŸ,é×2f}´ d,OSbÄ„g·Ë÷$Ìͤ“MÂI7ì5«[aTv Ås!u^) E«ú‡@TꊳÇFV_"òF¦ó>ýœþSZ 8 fel¼úÄPÆJ‰ Ú0ƒV@AT9–™3}Ð4>3«¶ô¡×’`¢FÅ®ùT‘ÓQxxî3Â\È5ù¼q þ–ƒ ˜1Дåö‰¦² fYºA!¡êÅ w¶ñ1ãaºdV~õˆÿÀõä³þ©¿1¥¦ÀšjoyÅ*¼åqU§“HŸo´0‘ˆ˜íÞ릚>À±©©ØÜ£ÆÃŒ÷`.V}þ¼Ký›—‘SNj·1aS%ºR™Evjý›§p®êx—žruË©ŠBxþæø÷Y¥9·#ÒœÕÔ­Á°h„nô«[3¯¢5F)ò&_ȲPÒœ›U—™"’¼ÎÃ<=tˆD–¹7ƒô‡áWF4Š…ïÂ4'3#f%%÷¨¶rµH[Ÿ-~¿ŒE7\^•Qolé7a~ÍþÈ&*vVQŸ5uŒcp 2Llݲ~¡òÛÂåU}VK{¤:K­`ÖÔòѸ@’ Lƒu*{;'³¤…h4fÉ¢AqmFÀ¬ébûöí˜6lØ€ „ 8'*kZòýr!¿’ å ³ÒÿkžEȦǨùªs­Æ£/:-ƒY¡‡Š‹™™\ \ KÒUó„ç}€^ÑL)vEó@¾«lgYÈP­z[Z¥^Û{NDvS8pi ÌŠgS>/«áü°óÍ4 d}f#¯G…Z6ÔÄšÍê•Ï*»Âg²¦Š64†õéXX±äewz•YÕÙÁ¬uäT-ßA“ËV‡ÜlíOD¸sBa*3ƒ[LB¼5X–Å40§N~^a6¨RGÙÒ#’ D˜¢–?Êùl'—EJTˆ^=Õ±×H½¨'\-pZó\Üì¶)R¬²!Š §Ù sÌöàð¼£(û¯(¶’0µ¤ú¨"LNî…o‹páøô7@J Ò¢žZŽaÊϵµéTü!âr£iz0…?fæýÖ· ·3ŸuÞµÓLí) 3¨BAÆÅ—zLÏù[N½bÒ}nLSjAXK.â¸$ÞÆêdêÁÄ?õø§!½Ñî][VWË9­jvO=¨’*§´gÛî¾âÿ¤‹ò´jª š•hd®·Ë<œ­Æ|˜‘‚?%ÎãÛÍ\ÿ6Ì*|æ¦jYewødDm"*ÞžÒl;²úÛˆå¤ØuG^Ñw©ÍƆìFbiZºs4bfÇý*phÚSYg>άµjÌD­°‡Nn Ü``$U“ëÅìÇ¢ø–&WB"­llÒ„`,C[Lšƒ¨Æì–D˜fðL„`•-Iè{ɉ€F% &)™r¡y£—uežPn*ª½¶·µYV K¢!°úï …ˆgÍì±^Z­›P‹lY& È—kSÉï¿9©êÆž XvŠÒšq££%¬N‚Ó™qÝ0p!¡ÝItžÌž<ÛÅîàêA,†††ÞýÁû¥ÌJ c\K h.lÇ*ÐÛ"÷?èI¹Bt‚år]}ü¾0„’öFSs¿Œ1>>ªçByo¶cèm‘ûO÷¤,v¡¡¡pÒÊrõñûÂJÝÃð —³˜À¬P$ÍnÖð ö"Å+BöŠî^Ž]-rmÑòÖeÛ¹s'!dýúõ±ZÝÒ¤äÕ|QŠ8¥éJob›u»Þé-@™œ ”àÔiÖPÙ ˤ*­hÓ¾9„çâ{ňװÿÙ•B:Ó=— ë´iOvMùI£»Dog>gð:5üÌÈænT\hÙÕÒìDF×´ ?|ýî ˜é= ?(Ån±‹ ^‹uMW$Ëǯ°ÎçÐ~5<·¬aùéNoés o_ýþg|í3˜%»kJÓ­°«Ь ¼ ™ pçÎ4§}ëp&Ã!ëÜ¢FSšËHÿšç‡oÚ½l~}ê”ú©¥î|ž!W$½ž˜öÁáÖƒ)Gî^Z££dï_‚§ŠÂB-F³4—Ñ´Î<€øÛ@öm~æÉ{•ÍÐtÎbÚl®ˆÑ£IýrYÀǾÎ5³ù¡fùP(#ŠÜs¡~­Ï¥)ï[õCSç… ö‚–ñŠçòįÃOÃè֪Ɠ¶Y›µÈO±À°£¾¥Jñü•-¥TŒ`jþžÚ!þ:wœnðÓ°¸µ*3ÛYƒCjÉå\ey¿¦{ά±UÃe7›Û ÕT‹·Ò]¡š^¾|ø¥þiv,ú¦pPEP«:·ŠÃ9odp2˜Sá¹è; öÉà^ž¥8v£IÖW®Ù0ï_ý0£ð„·h®¾~ÕwBq~øÂgÎ-žZÅ\ö>×éƒC ÓLÞWæ³pc^2Ÿï•ðg–}÷tf)—™TŸÔîÛÌ:R)Í©ê¹Üê9N£]·ÕC(HŸ‹ÐaÍóºúÝá)‘û-aÚUWýDvC€¢ Ô6mÌ P8”hyP ‰)(¹¥žshV³@Q!¶§‹…êL):VÞ¹ÿCCC˜=ô¹b¿¯R ¡D“ì]ó·ßùÞç÷:~øàµC6lØ€× 0zá~÷ïïÞ÷®Ý>k0¸DSȽiœiff†¤lIËà®:YÛ‘ñ£Œ†ÓêÝrfÅ.RÌÄ0«p¿„íÌÎÏìn;YaÃûÐÐPx {-jrËa˜»XH‘Ö`p 0+€YÌ u@}ó[$¼fjPЕ)+P“œE¸‘¯¾YÉa&¹7p5Kñ.æ*p-*öÛI~E‘¿F?c×õÀébצ޸šÅ¿šey¤”÷ZTéº8¼"5eÖðçNýªÂìÏ¿þ;ÿU(ô1ÓI~#ÝI¦Ÿ²J¿²Ÿ#qÒþ)æ8LþúVx˜Õ¾šåE.Gª¿ìâÅ]gMµp8§ŒEWö‹eöÝa˜÷)º“²ž÷}o™>Œ˜û/¥‚‘Åfª(à0+y5K:Š”ìaÕ¸YÄá³L¥±NäÞ‡ô~W±´§mŽ+΂Bª=©°çAO”Í@20eg0‡Ïºf’¤$×èÆ«ººi!¯«}ê܇™Í*W®f¿©jü`+@«Ù $³âÝWÍްJ>·®Þ00Ìì{âöyQaf£pOJ„•ý·SÆû ¾ÁήYâ¼^,2þAa˜©FÝàj–îPwúÌ’vÄZ¯Hq™5 íWM;Lši'¥gb`úç;)ܘÒD¥wŠ" 3K†Ë}˜Ù¬æ”újf6Š´CZ+óãÊ` §¢Öš•ž¸ØIT윟Yo”uUÑOõˆÒû±j˜é·8ÃÌ~y5³a–n¹,¯¦w9ªñ0tÕø€K€YÌ `V³êo½ë IDAT`±oðøøxz§LµñÌN‘CCCu¸ÃJq-0ÌZ ³2 ),¼ëo¾ãö;ßûüÞCǼvèÀ† ðºFJéݼ¿w`xß »v?úP³žB Rˬ۷oǤ€!I™uãÆ˜þVâmÂ48šLß?{žWÓIØH¼möI²?n6ÀÙ<ï Þm¸ÙüwðþðOøÇCF«þV3zjýã^Y…èGßiMi2Üߟd›êÌyþÝ=ÆÜ{·a¦YÔ—Y“S‘ wÅÖ“Si¦ô7 ÈOŸJ…ÄnôÖA¼mÎÓ¤=f7%˜Õ /ÚžÅQ0,×J¡ÊŒ´Þ6{e)k,D­Ã=”.˜µ.D›MB¤ÖñvÚù ´ô&áBMV†Y¤h$UçÒÙJÌ* ¿4Ô¤Âû Œ[C¢Í¸AÙ*ßT·ë\¬µcÖXKÏB+l9ìȵ‚7ÛF›-ú*“Y£eö®à 7@y™ÌZŒKžòÒ¦>AÒâ8øäZ1Ned¢p•ßG­2™h 3³^~Ëœâ0¾Ÿw¸Ü ÌZGÍš°}æ¦Ù40á©:/pÚŽEª]|õ[kvd©&E;§b-4«³L™›ñ–‚l­!ÓZ–¦Fž&õ ¹:–d Ö7Þm Lb¿ƒÖšYS¥ wãyWÖ­V !þ4+dJÝ~¥Ê”?DS’Ò{Êê¶V’ÔHk&!éÈÙÇpjÀ¬vjUó(Ån ® hµE®Ä÷»Á©Õ#Q†É„K°jÚó'͸P-| mÚön#þ‚$’µ`Ö¢q¼·‰»ºéPÏ› Å+Pâë«Áš:ÆØ¶‰xò17Cê¾ß§£‰JÝ„·Yêׄ78—̼\O»1˜ÕüÝ-¡Ä|b¶M«›î¿ òT“®t²ðkžÝ[G¥3Ü& OÏ;&<;^¨¶‚̘Ñeg¬g4˜Õ˜J¡7myl~ã]Ý«­å”§¦)“¬ƒÒ~OúɇƒÖÈÙwâJVDžJ&&Éìf­¨š”ÝÄN5¥ï·´ÕÛ‰ù/îõ§‰·‰øÓ0WV¿êä5Ô7ØÊÚiŸ'#[¨Öð؇ëÉ»®èSÈšÈì_Af- Y5]Pæ³¹òù"¼âo%Þ! ×ÒëW· ÷Õ.öŸZ¬üÎLðhj_µù °§§w¹ˆ'Z¬Ioo1èXën–ªDº *sMáüR«¢'B'd j§}í콕·WYâÕžEe wÞ7ÛŽdh‘nÀ¯tWáÙT¾[q£Á·Âº­ ž–…Ã*¾z91Ízë@®e"<ßOáÑt[ÖÇV^ïVY¢]„r¤(aH«·)IM‹TBYÓ¬³¥àN>Ó½QÄ*N¡° Œ#ËÈ*ì:\ØB>ÙDôc0šª@T7¦<·ê~›ž'”¿•rY"m#°ïw·CqFðH)Ƀo›®âdvPKÉØýBzfÜ‘²”ÅÑú#l '¦2´+U7¦Ü^›t¿MIãúÓ„ŒÍ‹Ô€>'æYüÞYßï²Fð|ßv$ À¦±$GˆÔcˆh$,”yEÉ2ø =~uT t[q¥a¨&Ž BÞ`0«½M²³kFŠm55Öþßófùöéœ@>wˆI\0ØTÁ£F…Z…üªCÃ2Jö7¯TUÃg¸8T—%\m­ŸiŸÁ¬™R#OHúhÄXvôêNB!ÏÒÛCåÚò]kEæöaþ¼P®E©š© e†bÍÊ6êXU† ùÏBÏaÖb¼xËÄ'j_ Ý;í6Ç,èûë­©NsgÅ¢oÍcrJϬ§Ù+<çµ–WLj7³Žx#íZ7U:A¼‘ÝÒ–aEQ 3©J W@Õô,kÜ4V‡.„ÎE—©ç¶Ýx¯Ê?YfÜJólôvQͦáÎn¥g}„,âY¼ŠkLj72/Cï&ók®AFˆVôê´4Á!5N]Ÿˆ …[dZšÞôS3-ðR¸¥P'¥¬Þ2±"7õyR¿'w¤»¿‚zÝJÏúÙ 2+µ"°OkiMfÚìÌFЊüŠ:ô·òÄlÀ²-;ðšrWw P[>Ã÷΂GóI²e™èd*œó»Å€S†´ÊP¸Ð¢K{Ë"s˜<ˆÐ¬¹§i ™â2E”ðÉ8#øèü'Ñ£B³3߈X¼®ùå@¡¶Ò0ŽK÷N‡)#Âcœ dz­Ó¦:žJÌ­°<Ëþ’:3ïÔ•ÝЬéÞl·ÙÐOÁé³Ô³º¾Å79ØMPç‰O„ÚJÛÜÕÒ¼š³eü Þ-‚®U¹þNJI+>믆qØHJ†Æa&P‡ˆ<›ÔrÈ—qK!þàÁT쟭El_ó¨–ÙïSúþ™ ä®noS«¸Mdÿi3"‡Ý8Ý{ccR>cô"Êb‘\‰aßXCq¸hÚÚ¸“]Bæ‰6òZ°^ú–€À²”¹`ÖDdªí›ºµ¿ biî ÿ Ü—¹ µe¾¦Mæ0ô¶.ôBªfãšq/Œæ3ª‚λ ÅjY…´ 8’7#3 ;¨šÎ2®èÔþ$õr°3žéz‰"}„Ñ+%s¯¿ùŽÿÍ7~÷Þw~à¾mÛð»q}ÏùÝ#†úÕ÷»Cmêom3«eÊ\¨J5!m”B¡&ÙßmÔ ï²«î•8ph2¢>ýR“u“C$ÏÅ· öfK›•sL\ãG½çîûÝ{wüÒÆm×ß|G ÖYSªïæö,Bj kàúÔ’¡OÌrAX!.ˆa ¥¥ªÂ—*øñpFÿäÖ‹m1|cÁ»Nºª`ÐØ`o]K†2†zzY»‚º¬”:o©žRv¡® ùØßQ2F/³:Ï@$´µ&ɯDDeÌ[›W¥ÓóÁ6÷N‡$ÚúpW7ïxú ËälèáÌfù\°lÂò/ O·qÒ¦©Ð6«fP-=_½.Ô£­=×Íû=Qfd¸2¥Í[n‘X˜M"›q•ËV\&ßàÌvô”$ÝR¥#óY Öt“0AÄX4)ã½³ÂS‡l­6+€l4®þžšÁ< •¶Dä:éþ$š"äEž½uV†ñD–wo[û¬cqý°»¡´-˜µ@¼hDá6æV*¡’7BÉ(K—(K‡$[õ”VxÝ+Ø“)œ-í{¯¥‚#3›ªâD ©Ñ¨ ˜5ÛÛk“ÍW$YAvŸ‰ˆš•a߀néÀ›Vô¨ÖÈ6lM«âДm¬¤3»×i)×Ö"è:ª3뤑aÉOþYa|µ,ÊhWj#Iÿ×A­ù³{itmYÖY¨¥žŽT/—uX\¬¼;‘–K²ª*Zy–¾¬2‰a Ó.ñ¿LýsÓA c"ç*§`­m¦·Ú®°LV¬•ãè:knÌš¤w šo1â|Æ%Þ#É÷GøeŽK<Ç*ìb2nî»äùo]qŒ];mT G±âÛ¦ÌÉ}*Ž*©¸PÌj곃TG¥»Ù áÁ”ÁB`lJ#k6Ut>X œ’¼Bî “Æ÷Þi¦ñÀƒ‰ˆ}y¥Hœ«¨–ZÅwÅ:3ª“•(ONœ²üæ˜Å×v™ÕâFx“2íèXzÕÚq8~_ìñ<@ëÂÖ·Ëùõ³¡sÅK†¬¥{Ï(Ð:kªb‹w 5=‹)Q…^K„´Ê²2™%"Y–ƤçÒY6Ó%föÖR²×IRhoy)C6¦ véõùýC÷Ý6ÖK]«dµáè¯BNmE¾®g³DÑÒ=ï˜Bè ã_ôȈ†Ms%&Y%MØÛ`£¬¥ x-³ò²,­œªïO{õ®nu—˜jíÍêwÇæë—eƒÇrϤxŸPÏÅ&Tð%s¬5å´O±¾M{d'!¤5jº.ºÐöë­›¾ë[†4Ùv]^—( °£¥ät´ ÃyÉUoÍ ²—Y“‹] ŠÕVÑôŽcï%­4ù1ñ¦²*u­v¼Y¾o‚âêé¼TI¶¶ÙB”ŒžŽ~1N–¤Ám:•æbJ ï$dgk Þ6*c¾H OÄÒDâ‹ü>ñlì”2¨b–XXÁ[F$êÄ ªà×pcfI”ê’9˜R¢¢Ð§×÷Gø|IÌÊ+ÿA'³Rƒm2v*ñý7™ És?%ÎPWi•%NÒï!íQìO¯ ¢œpÿØ4L…%Ñâ–,,=¸êdM\±ŠâÁ¤Ÿõ>m$´£2ä׊“ Óo"„³«—å` ÍÙÕˆg-\oƒxÄßJ|ÿ&¢Œ[­@=óRÈëˆOÍ=Õñ<úQ¡|Í8Z8*^Ô…ÊY%º1r":˜GHü¦šµD¢Ó(øÇ‚ÏÒóø-¹–5o°['uÎe_ùÓ„¬!„{§½M„Üûu"÷œâ×_…—’t¸VÌ­Ã[ê%ÃØLÂ̽D#õRछxg¤Ka)~çÈçI±Ìå]‹iãÈ!’‚6 a*›O,µæËšúbÑ(øG§Y¦{éÉÖâºM•wÕ O˜6¢ckõýšÌ Ön¦š”Œ3¡ÉÜɵ¸K_ÙLFvâU‘ÏÈZ.k¦ƒPì*fZ¡22:6œ·\‚µÎš5Ë M]Jûì¹Ù2iV5 8Q±¦#M9¿¤«!ä‰iBæ3Elm/¬ ³@x#ÆÐï¹0Ô5’@qkülWëYÖZìœ4(;C¸•Ⱥé$K–<«‰‹Ÿïä¶%ãN1Õµv¸Š ÔY æ‘wƒ¯ ÀûCž ±JN½ƒC÷]¡ïq¹…«¬Y þ¤vb_|5ŸÑ°åÊ4ŸÂ¯¨Jä©öúfa:ÎñÒd)#4ƒ[LYN ˜°'Šþð:X¶ÔJ$•Ìc݉õ="»aÁ5hI{èd\êF2›ºü5kÆé|eì•DòªŽ ä‰Y2AÈ]#ÞH$…!}¸º–jlßÔ—bë³ò‡TR°Ê–™eHu:†ÏüÉH#!ýð¡«|(-ïlÌ0¯ƒ½uí0SÆ,éNAçÃ…ØV¼ÍN-6Õ/¢ç佉0 ƒjf¼b'õY(†¯®~“›~-ø:köq#֭щøCFÿ›6Â%X£HÖ´«»WIF°ä#­,о%gAEÍ» DÙ³Û•³Œç}ÄöáÞꆰ֩"[¡Ù7mæ+JîˆBiVÓœ·Qcó™÷ÛåÞ„ùbýŒLß3Ä;LÓ¿´_.‚Nu+#Œžï³ðkæ$qk“ Ÿ¦ØÞ ›åûI ±Q•[?ë«¿±d7[ŽJHGzÊ8RHÿ%²Í–Ñ÷ªÐ™"4+~«Èú@ûnªñ‰Y>…a˜%?(o®ð]¢U,pßttQ ;¡£zËåeFG°(êÃðéì…A2š6ØPä1MÉÒå+ò'Èbuh!ëO J‘QôÓȯš/¹ÊÓE·(vÝW¨„’/C†ÿÔgdøÒßA|mxý!¬t4 Ÿ«A¨hù-i$õ5­Äîö’eʵihÖäOê´c^·¯Pœ¼]W¶¤ªŸó!½¼Çi_ '2ÂÉalr%Þ誰aä qö ‰S•ºª«lŸˆZõû²©–Z@RLx³© šÊ˜Ró!.ÜÓ÷×2 J}EÅooá·à’vg¯G竌s<{¥<˜rçéù9펰ætÔ$»•åWÆh,#ÔØàœ˜@Ø­–s’êt•Ô]S³Zœl»,ù‘ØxR+àG3Ù&]o«H­sæ+¾_q.7›‚k´Ì>¾¿Ö÷#$ò¨BêóºßgO`vžÌ¹ßl¥dV·å_Üv†OìJRß¿‰¦I·Š¹Œù~]=ìO’:„F?óƒLÅêDò}”ú•‰Fmî÷‚µ „êjÍ;kIr£è¼å6 K>c4+OÌô”â\ëêµ wJ+]ÄN5kJê–!TÆÆËlaŒÃ±¤˜’8÷÷‡Öà‚ÞB\6D&ñ1Ì<,t>¢sD÷ie‡˜Ì‡Òô߇Jp³ù6OÿØ²é¯ j„J)åJHž~Iˆm5bÖ¤Lšè4žãi´©éýD{µþœwòFZlx…ulÚ-OPQ7cº=aÜšJG¨i<£cW@íøXÓMWÖŸ°JkXa†®~Ór&Z' zÓõíú¬í}æƒg{oXÒµE¥{ ÙIÈO[G1¾WÖ ü¾¶©þ,Ö :þx,1ë·0´JÅzù³Bîym=˜¯ÄÔ2ÖÞŽ¨‰tÏ‹—°üW¼ðÕ SÑ¡@ϻД,‹’á¡àš5m1äpgëMÆ5‰.qC42ï§ZE•Ï›(ÓÍI®‘ES)¹kº]Àsr¸Eà,S±Ô§iod…•¶IC€æ¢z33XÄÉ„‹£moÞ¹®çÚ÷QÜ*W£v÷5”ΣT[£ã£€v¨dzv—xGÖjjÖÒ{09L£h5›Ý‘²qA‚Ã85IÌÝz…$m–Ó>pº;R`g%™+²~…Á!“1ï ¬ËÒ^{"/øô:éªõkœfêÝ6­îh VB">GmršU%l€”Òd¤Î/ÜùôÆîl°ƒíë±bà…"`kfMd Î ßB¼ ÁÊ8é̤yï,™˜7ꎵþ¤Ò&¿ ÁcK”‡‡Y…yë®0OS,1‡~Uy]hƒ+e˜ØÖԉɚ˜¬LD´ ÌçQR¯°2¾Nªµäõ„¬'ä#­žÖ`>L6ÉôêûpeCÏEpw M»-Vko$d'ïz!y·Ï{„Pv×ЮKÛré/“h)Ò«yC±i†#Yb©p˜B2½]Øy2ónSëœÓH¡Wš5ûåY<¡Ô÷7‰—Kõô«“Q˜™Çó+cf ÓvXµðˆÑQœú¢S(UÉI4>G•öIÄ¿wÞêKY€“³c‘enŽLBãêübêZÆ:J;µãdüÕK$VVÞ ¬¦„ˆ€Þ!=?Ö‹©ÙX}‹Ó#Íjì9¤¼w—0(z¥¾ßÝú·U‹ð4éи:¬ö‚q–É?ì’<|cµ—[gZ…Å8BÀ{U½ÞljY¸ÐÆŠëê%ÀêfîqëÝ!þ“iÞÍ‚½x{r,˪݌ÝRQA\y6iÀnrk°QЧúq¬ùŒVØv˜í¡Þ5”*êxkz;vNNÛƒ)‰lމã:Ï;1´Ê¶–Îi¤æP¿sn3Ñ”É ;9V?£s QÃ;"1ß  ‹Â–Èù(/%(xÚ_æ?Фí¥RÊ;I¨)Y6ua¦ÑqVe³j³%cšÃýìÖ7¸,É•2è°ŒMÚ«] ¤ õãœû«=cÕéì-šô¤7²”)cëHÕÉv±Õâ3b¡øÞÒ­ÔÖ¶ÄÆÙZcËà0.ÁL Ô¨Egè\e”g±ÔÅbóaÖ|ùÏš]d8š–*Tf»u)›T­¦—ó¤ÿš;VÛÅ-+ê$6RHO‹„ûºÌ*òHjmôû„>Ãaõ7B…¨J ²—i2ÑáÔ¬L57!%0tfÃçãI„&Âý±Ë±Ù¬ǼÁ(÷Ù0kÉ °lMzH+˜5ZÍ&¨.§ ó\’F%ïL.;{Q;©:DQ>]!suÄ®Z‡) …‡>M„r.ñë|N76ì ÓHmTÑâ¥"¿ ãâËdzZ“‡"Í¡[N))JTM³ŠJcË  W(iZÕñò ›*lÓHÖÜß~, tú5aô¢q"¾¸“1ÊÕ([½`Ë^©¢U)oάêFñ_K—ƒ‰ÄeDR´HʘKW“1Ïâš<§ïl¬#‘e'ÕIVUìýEgVµ5/–ç4¡³/ir°&M*Lµ:a<Ös¥o .ˆf®Pj8߬æ*l„¤çë¡¶ÖG'#”ù*ªY ›pÒÍœT† ³¿Ùx%":•¥bä¯">U ‚wˆu³©”L‰ä¯òLRvH˜”±Üšµ(N1¹h¯­m•)ô Ö¤+õzgö¹‹Ï¬ÉŸõ Iªïž#UÓ‚ʬ‚ꪓ‚råŠì†$³ú0®ËÉåÈÍÆš5®žÌ|~àµìbùOÑ0"CMÂ@yÃ2˯°†©IªèÅy„ÐølQw&ѬÖä—Ï´+%µÌù«ìÞL.+Ÿ3°.B˜vá)4}nÛN´¡[ã³F°C3¦ü°¼9³? õÔ•++–êòÅÕQaJÖÐÛÙýw¶¿Š%lþ¼ÞºÈÁFƘìlW]pÆ´0=UD*~ßÖ~ÐEih†`Ê•Gî¥4‹~‡5y„R2†æ‹ÆÐ[±]R—a7êR¡ÜµuùmlçZ‚Ú‘±ZÀ‚aÕ6¾ œ7"í CÃa³ÌÎ|›‚ruÓâ1:)PR~r¡Z3’4dÓöþë#-xëæÿm‹ïƒº«ùVµóÉk/UY·Û"D+ã¡ÈS³ ªËωéÿ63¢[£ƒ IDAT25çʺ¤hGøÒ æïÛr¾gê¬vR˜g€Ÿü­„Œ±ù˜„É‹ZYg„…tËÐd(jCŠ ø[ÝT¶¢¼TiŠÑõ‚hÒå 5¤go]Kª¶ ©Æ±‘¦HÍžPeóê’ù4æ©ÆÞðºÓßÑ*¤Jï,fåbfh8ܮϱDn¤5ˆJA{Š· ᛊ0»“phŵ!gàÁ”±*Ê Bhõ: óª1agô}zM¬@<«>ÉñëGg ³øò™ú-²U85-«WIyšeð´,¡z IœÆ/y@‹æ!I:f”Rª¼7[!|ƒƒ„õjb°®šžRz?EÑò„))¬sJèÏ@A¬¾¹gŠÐác!5¶=˜&Y¿$&éRÚ…5×Ü^ã¸\Š4÷NFÕ‡8$'»­úfjÍöuÒ_“˜³cV'®Â [N©*SFX놘’êð¢â,:£È Û~‰˜U ;9?áп—ý¼1QERöM•;ëCÌ©ÞlŠdô ÊÑ÷N/‘«Ö\¥KLrHqøµñ¬y%”7¥áù"¬#L¦ý³¨“Bè§Œ3ît±ÔjŽÌšÜ²¤Iʆ“r«fZ¶„û%z3¥I‡Ü“=;Ÿ.ͼÅdÖ"z0É¢bÒ ðˆãî&ÝîÃUbÇ3kAj™%ä`!ƒ*\„ÔUqøvÄ©žÀâ[}³_ú²ÈÑ_:6J2Fç•äë|³é+Z ‰Yjörè‚”cÍ€‚2«­ÆÒ†…4L`ÚæÈñ6‰ŽÍÊÂ\¥‡]râÉŒÃR%³Æ§‘(ŸbšøÓ„LPK§ó+¯Þ!cííÂB4êöK”­°Ô¨ØGŸx W%šÿ·ÃRŸ™’¢"ÌÔ‚ ¬×jÚ¢‹™Å°Ö̪ö¡Õçc•ʉ$dð·¶þ s5ðŽKú]‚ÍîVÑ(0çD·™6bD~¦C‰M°:#lÿ¿és˜C.”÷Çæ¼t90k¡)–XY€š’^×ô§U”9ШZ*(¶˜¤[À³C†„ÏûC†¢’ðS¬õ8–qcccÔþ\Xg-Ë*vÐ!3>¡ºÜMȦêSÀö[d¨ƒXrc±~uHëFJà—ëÜ:Ú²»ú–¢6yÄÝB©Ejɘ5K²±N‚Ø~=*3DÇ6ãlÒ¤DŸ ê’y é°].ußt:¤õ¤MWFÎŽtßãPYÚ5„¢ê3z•¨´dÌj#)qU5;§\/š S†’™Ãa.¸òËòŒ Bp°CùȨF;·&Þì¬NA\aN-³&áàTC<épB"8Dç£Xg­@ZຠÙ*6á]¦¹•y‰%Wº bY&©š 4Ìj‘°ÞÂ}ɈÈŽ “ZÇüЫ°±™(€ Ù\¨R¸PjÕ‚™\•²QçV;îVÞÌ[5fÕt,2U´É ž_eR# s;/P%ù˜ ‚>«ÍǺV–PÂùšnUkž—›Ys¡êØ£„ù+t™Tƒ]5›Â,è3–z 3$KKâ¬ùUlÍs0k™ïHGÅYÅãi uS`mµ/a Z\5ˆEÐZÑ¤Ž’c¨T‘ËþÖ:;„¿Ã $jUË›WœY]ñMB‹+³,J‹T>àUg,Âzs@U)Ù¨4 ôk]î™Û"3V¡j6¥ 3Ùâ+/+õK¢²~Â~ §B³ãæ+ß(²5éx«³Fh3P‚ACå …fµ©2EÑõI.VÅ:§ºâW)³fM™jbS;L)lÅüYbƒ\r'½Ñy¾X†+¯YöŒ°lœ:¤ÿä)Y]ØÎ:…“ñ‚Y‹¢#­[ÐL¬¦a}Räxøö!^‹û(ÔfŽ)U•Ô²±<ǨCE¡&°‡–ª2ƒ³é­—C³–ä1§Çg:¥R5[ÐÍÅ?C½ê0Vˆ× S;Väé5¥^‡ÅãüI\ä’iYEDkLó«u~Y Ë€Y«CÀ:ºVwÿ‘hˆÎ´®Ò…Z-¬0Õ$6f7až^aNlûNŠÇµN½¹¬B6yZ|M&Ö<ïß_kJÆ`֪ܔ ‹c5ÕÁÞH$?¢"Þjµ\tk·›uBÿäÚ¶åòrªÞÒѾ ÞåM¾žG<ï;é f-=‰ Ôá´AkÖ)øéT K2HìÒ_èÛÚÞFš¼%[=µK‡DGÓ*T¯æò0˜µœw¡^á0ñ¯Nkü*©¦G1Xp¨8:“«Åþ²õZßì›aX³®ªbyÌZY–uØ [÷fk[k.b=0òjúúµÃ¥âlc¢±cT©F§Xg¤„§`>ú«¶¥wDÊšBv‡…0MN½Çu“ªv x…R2ŒØIR¶æÅãêȬv¢P'¨†Y1 \“˜ MêE\Ö: SkžKB ×jkY'ªQ?“blE0kuŸh&iè?õivMbbGZ;ð‚\›ýðuª¶–e¸M?³ÏAá!Å›CÌZkÙ*ÌÞ`”M)vzŸTk³Dj=5«Nˆª¬êœ:ŸƒÌ%¸Îò´ÖÌjZ:&=žã“1A¶‚É2 BˆÔúhV¥¨NdhªMA®5eVSÞrÅs‚l…# ÑzÜrÛ"4iÊ” BÀ¡œ•q^låuÙW}± f\*W¶ºÜ´AØ+P%–ÍÆ­7ü¶_€¶Ü*8ðTªY–< fÍHéÆRr XQÕ¼^8§$¦õž%äoH^ ´÷ª«ÖØåúÀ¬YëÔXbpjÝkmzÛ X0 k¥UùÓ‰Á¬‰h/¶"zØHfÛ/…C°¼0M›ö°ÎJ£Ér†¢&=@OÔ]ût©×âfp³e: ˜hV³˜g`×Y½°Þai9E]ôÚÍ µÔƒ{ Hùf«õ“ÍŸ$Þ:Ü9<Ù YmÈÒ”V ÂlÈ­ú“î ˆE­™UXv&6¢F“tÁ¦úO€jÿó7{þæÈŸÌgŠÝÎ¥s–ÊϤÉ? ¯d)cPè`0kÜ='*;æHJÒ´oŒ-ÄÛBüÍ„Áÿ„o´µ›ð¨p·ÈSo3û9h‚dhRGw‚AÁ¬)2®P˜"÷/ÿDcqŒø› ‹Rà˜hOn ¿CØHð!`U%NÙÆp©5¤Éà+ÚPŒåX0kQHWŸzù¯€:pª¿¹M~Éy£ÄÛÒ’§ÁÆàÏàƒ?áÂPãÊ•&c!e²çÚÒf\ âO¤uâ4ƒÊögHךÈ0kêêVA½0×守r!c§eH7øð.C®²Æ*–7)õ¯¦2T“2™fA´`ÖLnî­nöÊ®Yú20 ‡DZniÆm™©Â}€:0hø§µ§’'9 Ì ŽL*aÁ©õÔ¬<ÿ…ÿÈ„Xà6a›*+tjî®u‚dþt¥MÓл`ÖZÐ$³ÑyÌŒïw y—­…º­xe´ív¥ÒpV‡_eâ•qeª'X¥¨/½u1A®v åZSfU¬zUÞd9’’ОçÍ ÛAØk=Åkè[Dh?£Q6GÖ¿X+Ü¡Uè׊ѪÃ,èPÆ…´6 rêȬ † j©ÊèÍí gšÈVšSešÒ”ÕþM<­B¼VáEmÁv2©•y ù58x·¦ÌJ$çÎ"J•ޱQ“oõø2vKHuB§ß02‡ùV³YÒÕñ4*&ji d‚VJOa0OxFõ‚YkD±Âê¥PúOzéTaOV°8h¸”÷Ï–ø-¡™×Ÿb]™˜(U¹*̹Œ Yh–u ¨6¹ÒTÊgŠQ#Í|niX-¸Á¬%¼ÉÌÓ5¿ex‘þ3–cíÌÙÖÅP—‘·°C¾jÁ¬šÊRß+ØŽö"Ì=-óÍœ‡˜¾B_±)˜bS:‡ñ‡r­¦­–K§ÚÉYfKl;ú\+Ìú~­2³êG¶ÈH×!ç…á=Nހܫ©•Ž^ed¢ÂŠ+‹m•-Ê*ò)`SMÂãå,³Å!ÿ)œ‡úæ`’ù¥Äú'‚­Œ`eŸr3íå$äNÙ¢¬â Àî½(2ËêD¶èÄ¡†q«ù› JkÁ¬ÖfÛ„–%ÿAÅ–—bišŒ$2T†ÄhúËVjA¨¹ÓDuibE¡l†…ÕåtZVû›R>˜µ¨7_âµOÍ}øCÒ&¼°}¨Ø 0±zÁ•I&¬Ã|LÒ%Ùž:^Wpe*‹fMBWjoá$V\}Ku}ȵ‚Ö`³µ‚CƤgíClDÂoªù|”˜yur*©w0­:g-s\¨TŸe9vÄœœ -V‹Á¬¥W±LŒC3޾ôÙcûàmЉá­–…cw¼|ùÔ ávõYx¿'Ó.µsVÀö[¢çØ:ûõͳ±Œ›œ ëéÓT»L:ì¨æ6WF`>ã„Ò2}Þ™$ãmíMS356_„Ñê¬,g“)¿ªOZ7ÕºM)Z²PŸIÎèªý´Æ€û×5íìö §2Ñ2ŠÕSõ:¨ºzkHÛ G§6>é8Ó[n]„_~e”‘Ÿ· ó"X͸I´²)÷ƒYs¦L;óoÚPßà¬I¥kY’1# yöâS=0eæ4IÝÔ`KçúÙ]’6á\ø•בD™ª£ýIâû}|kv<êj€`Ö"Ý|rƒ­ºVyª‚Ï"O…š&-¨0¾j›S9%¤»¥ 'äZ»óÆ®GU¬ yZÐ[T£FŽG’·®å²+¬Š#£=·DX‡5ײ2«µËŒO'"ׄÙÒà¿pDàWWBÓùmkê=mBõ72IÄÏ[,gË"P-‰…-ƒbs'KžÛtÑT®  ×wÓ`Agc0k†w¡ ÚóBðYÂÏŠ%dÍTêêL8hp«V…†ß6áMPv‚ÝŸöV7.3;ËŽR¯óÚ‰AºyŒN’B».¿p}—$È¿¯?„J–Ð)qÔM¹ˆIê%á‚®`·iUoRr6nY O}i(üÊŸ"þ!cÄßÜråõ¶ob²©I*dPº3I²IȆ s¿²; Ã‘úT'2U'•.w#L+ÁØ+Na´nÙ‰¶‚ë¬öÑi“u@°qBÕÛˆzžNJ´¡,ëàÓ¨æFô–6ÃÕÍàCZá·jæV87%É€(EÀ êÈPlJŠ66soB*âƒjdù(»q¹ûíÞ<À¬éÜ‚ÓÚ{Š(‡6ÿ*rk¶œð ÀÑÕ ÒíÓ‘\ ×äêÍåÃbT`’ÕL·Ä윰ÃB1*ìãÌ/îB¿Úg,¯˜šaT[ý&ÉÚª~î~»fK*^Ë_ŸU›…n>tœ+ŸyØT=+ˆÐÎ,³Ë‚\ÃÙ@ža mjÍúÎ÷‡™Œü 3i•S=$M4¡>½šéù®Z3™‘ŸºÐÙØîep¢ó,ŠÉðA±šd$*ô]r’ï",ËS(¡_î÷¶Ôþ%!9–PßÖv#6/1PtfuKšñ¦:esx÷Mß`ã‡Ú´îûAût.4ž®2¢iÚ#ýóê—‡“½%„éušbÄ7ˆV“;³ÌYOŸKáÇäOÏ;ÖNÒ´ÎY Lz ]pî/‡“eʤé”­h:)‰ª[ZgDEØê¤Á1¾ ã\€—•Bÿ[ÓŠ:±#âËBTõ"3/#'ö¡¯_fÕÚYIÁÖÒ,ói„Ui(æm–ªZ8¥ú®È`Ö´¤m¬Û°æŠ&S±•g)çIóuÊðÉŒ}©ücÉÉ”Œö×ÏÈÛxõ—Q‰¡]ZMá±zZ±0ìDÜWä[§¢M" ÉÕ‰k±¢Yá„ìèvu9¶ ˜ÕXí™Ê,ç²L(aisNWFeÞe݉±lJËêÇÑéyÕù( Bz4v0Õ¬²®j/-ÈV}JPic¥¤"Ɣؘ²¬$j»ö¼cÞ:âûoHU­VÉ7ªˆÌšô×`å¿Í—·ô³@ %“ý¸ZòT7B“®N táÙ5Õ¤ðÔ U»¢Ô"\MÅ™µ"¤³’8?aáYÔ$¼þÕªÒäÓfu¦_õùÛ ĤxNŠR«Ó¬‘½›b¡SM¹Ó.Coë¨1i;üR¥kÛ[ÆŒ»$Ì_ÈœH&:i±kd¬x’0eSÞ‰V¥úË· ¨ðuj1·ÿò¶¾TWJË$S„EÀŒ5¡Z÷!˜QSBu»sº™"²×ʲ„ûD;ƒ&±Y¬ 'EAæ;÷LF)}¿Ï¢M‹­³I$¯Hc´ú[:©ÊdŠÈYê6ÓSÄJ[¡k’Cq™ ó‹ÓŤØ2k^ô YMs£ÛZ7„ÿP©%iÅs09!`EñóˆZF¸º%<Ó PeaÖ¬ÁŠ5BWËX3/³ƒ"™pdî¦u;©(Ež0¿„þÔñ.WXjO]†‹‚t"@>‚Ehk-z#Hí4¥Åê€Ô ÈÚ—X3MqIdn¹i2ríÖÅË?'\úç•Ý„fmíÒKåˆ|ÖY³\óÓa~Uìø3á`˜vV¦‡ ‰K­¹«^oKü]¤SŽNíÛ^kY^T'2Td•RaŒâæ©ÞcJD“2±˜âCx]ÌW²uÜ䉟4Ûq^t½úÌjG*ÖTdÄ(LŒPþjŠÑäÅV“  5UŽŒ¾'Q{£fMö«)–iZ «ÔµkÁ*“gKŽÑÄ£âϵ6HT P;nJé%G4%6ý Ã)Q æTÁã)f.yªýc-¢:E[“„ɪŨº“i¼s0åÓuæÔh#Â\.LH;ó¬î à'MêJ˜£1¹­ª58y}7‹t ¤[w^@X½@[:ãm™U¶&ª ~e”](1³ë0Âb,뤓Úãš …õÛk˜†©ÆFŠøS«¯fmš†cE$s"'Tg$@J»WÜ"2é¸aôÖn~Ÿ1.4–ÞH·¯/k‘¤Âít%)äî …ªÏjQ9<Afä lÑÏ„²Îª§3¹Ä…ñ N5[–kÏTdO}Waý>k.²Írठ©úóë Éi@¡eË®ú'UGõ(–uùîiÕîµ)³¨›¼¢SܞѺ‡ÖD]3ÿœTƒY+ÀncU‹Ê‘EdÖlä©þ¹ü§̪¿³õ͆E2är1kŠÖàЪð¯1µLšæ öÊǨsô+,Ò골ý¤bË üÿí?¨%I–Þ#‹†‚-X± îFÖxz èÁª(‹Œ*X9¯ÆÕ+X9c´-¦`à!´B,^3v ÆX ÄÚSבQ…MÑ”@‚.ë-ÈÈ™©14Fe줌Ìqâĉ™‘™ß¡)Þ»73òÏ»}ù8ñâ÷d«„‡"‰M=g™pÂä’·Šì¸^鵨Fâ ¯êû!·dŠUbyè¾ËŸáìJ=rÖW %Üx“ÑT6˜UmYæ¦g·â|dÞ¥J΋ÍjÖ¿ÇI". Cùžq ú®tµ4kÐ0Ì5äZšmÓì2ûG|)S#*sÝÓX߃)ê›}abõwcºµËc;ù쬔w¯î†É¢Ù\„*¡frR7ªŸÝö¡[=¼À’Ó´£'£ŽIöê.7&zwYÓÛ:Y×åA0i¼Q\­ÞPodm-]¹îôglý”»O%“¥Ë;ЬQR)­GiÁΦ¥ (ÌÍŠªàšo•¼ YkͳVºK^QSʸ¿†¿±ä$Í)X‰³qÂ_a÷þ­­úHkël?.$e÷͘ÖvOCÒ“NÍ]2¬uDÂEDm>ñÈ¿Êåþ B'8­å7$ç|>Ð’?ëkÔÿZ?¡ž£•/ ^ïšQ;\j°Èi$œ@措Â|-ÇÔûò¸­hÖü¯æäê®`ù>îpdù’OSÊG–¼µ{墳=8òûDá0ñé#-u ´¬¼æ…òþXµ³Ázª²MTðdZ¸®²ç°À5>ÏZƒ‘QËO *ÖßÄ›]-ü}à ¥Ò¶Q3Á•‹­6IÖ H•Ã&³ÝIÍÐ&§­,qkwlE²–Ïw/l ´¶áB5 äEù€e— %ßíÌ;¼¢]æ‡}° f/«ÊS³ûésäšïÏ^ÿý”wÕ lÌ ä-“·EÙGÖ5e䫔퟼‰œp½oóà2y“ó4A­†ÝLoÿJuÝ¥ÆÍ£ä4r¯zÇÖŒšUiIaR´¸BNtɾQS¤mšf¬õd—¯Y×\lS¹ÂÖt.LØ7áô–,5Z°>¹°f%WÈ”"D u@üj¢Y£V'íLf§7ñ”Sð´«dƒë-I³†(î‰/GcÐ#ùE ã3ïóæ²ÁÞž0-‡ù…W^¯‘ÉÄšoñ}Ôyâ"ùÛ¥þ4ÅȺ¢[°‚‰;C–yLçso±ñemë€ØJyà-®çie=kŒ£tmTÁ”œ+9íí¼…K3G ›yç—$k>Évï”V”dq=A/#pÓ¬«À ÓJÂ'?š^±²Ö’Ö¬j-Ó)a ¦eHìFÁޮɒn8Ÿ)Dñ2éö­—Ú$«\·LJIyR¥óîèýïë<¯|Ÿx-åøºSDÔfÅåom°Í’À†N½ØG^Ð+¸ Y“õ¢¤Ñ›P>úËt ÷AZO—òLµN;vúy-­ÙNçóÂd‰³{©´ ~éËgjåo·2^ÂtwÕ)Rµ¸f]X×;’ÁÁÕ´nÕU¹RË‘þ(;߸ùΓ°ïi ïŸÔžX]Ñ¢¹!²–ªýY~6‘)r[ôÈÖRÒ*»„˜üusÏ+k õÝ÷ÿœ?VÂ$+ÙØUÈBÉ,ïz«¤ª÷ºIØÆ§Pù×sÎS´H—ÕÍý+Õ÷_­[¬”ùW[æ|ª÷º‰âÐ)V¡}¥Å i¸Zùô]õ¿²Á¥0ì³ åL™¸º¿ã’d­aÏ[¤æÖrdéø(A#ZdªªäÑ’½2¶¤YsÀf¨Tb)kRªÌ i;6>±FÖÍ­´É<áüëµYû½tùòÑfß'ŽßšfeDaæ÷;I//}/N®:yë©’»"Ûþûmçc÷VÌT*‘Iל~/EÄ¥ f¹P[q†5çé!êÒj,ê=¸f­7™ÊLdæ¬@ Žiu³žÀ²ÆYd-îOàØ*_Ë@_"‹y]^ª?ϦçMÒ¬Q)ßàr”Ì´dƒÒmù´°Dß×ðî_…¬ËëÚ%§T%ˆ:âßg‰Ô"2´Îm, YìÉûžQÀ’½h.†V2ÝË ÚEµ a«·©o¤‹\ñE®‹Q° Ó,‘3ÏsùLòºšuún+q¼”–lìE÷ʶ€fmÎåçU¹ì¢7ø ‘©†ÕÖ¶.·žU¸Y¬6‚A<õtäZËyó%¯`J6é2# [ô\”T!Y´³„ðï[¾ Kw‘«'Iãÿ{ÂÀ̧¶-Üú,‚W÷ƒ<:YóYU¯H5¶9ZB¾´öÚÙ(ÍʧÜNTÒ¬K¶x[‹±íh¢Ælç27MV¾þ¨oäFù.J-IjLÙ~e5·©Q ²ÖUTË+§Ò3[eו–½¢VàVÎç¯!i™¼M`½ÊüèFkƒsudjQ’DkJà-)¡š×?1_4šŸ?É<ù½ªÛV4ë–÷™ºsØ—*6N^.¼B²zíÚà-¢7í„£&2-`o¿¡ÐÊd•T§(¨P­5ÌŽã$«¹´¦B¯|-×?n…žäk8Eí@³–’Ge eK"Ž2·ÿjHöZ–ý«t°aš 4ú¿íZÙ` HÅ‹W‹4¤[±?OÚ4mÚZuC"; r«"5Ó·µ:YKͼ¤l´¾ &eä„é8FƸà]ÚSITL«]|*}Ë÷JLèÌÚ>V[#k¦_|#B-Ü«õg ¡ pl!ñª÷§ÅU7 Èß„âä‹`}´uέìMQižUøåž6±Wª gùiEkT¿<“ar³Ø«ØÍdjù¿ÎŸåíþMÞÿ’ƥ߇1çSÉSr'\íWž'æâÖ:й9š~Ýœ¬Ý‚"™5ÃÖ”Ž!ClR´{6n9M>³Ç×G™ÞzýA½þÐ=S}ÿUYte.á:â:ó©žXˆ¬Ã—{²xâÙ@¾[pWÂRzך.UºÕ¦~]QäÕ¡±ûJÀd¿;ˆ¼Ó¸V®ú(&A™Ó«q¥[—G$É‚_ývÑëæ[Ãúg ±ú-çÊ)bÒ5PšÁFÓßZP7ÑØ.N;÷*`Ù–æ^&Ì—Õ~Âe9‹­Ô,µwÕAM%­‘ nP3U:%Ií.Zæ•àyMl#lŠÔ„¨nûš¨©Våi0g [dÉM~±UëÍvÚô`J›V\k±æb [ËŽÓ„!ózó¬»l‡žv”àÔlÚàËv³iˆ¬¥,ø&;g%H†½¾¼_µ—·ˆ©U°5rbë̳R/ìÈwù·ÜîëÝ BøæÓZ³ÅEÚ²¯1 ‡î8Ö²×#gƒ»oVûÞ¯šuç5ƒPÔó¬Ã4­d/óîùê¡ö—õ•þ}Ÿ¹ï1Vݬ|Õ¿(¿eò^±öL±#·¡_›È»€Ióf’è*NŸ$õmŸOÇd _‰´¢f]¬¼ä1 {ã»Ö&Ê’%Br”6þùkœ¬õL”ø]–䜛-ë]¬ŒfefE6„©­Èùy\r’µ%ºu²>hä´È„° Q]¦knæøñéåþ®˜k±;~©¼nÚ­ƒ¢8ëoúÍr;š»,™J5×ϸi^óW¾öØWútÐOÎ3o].SL¼e¤gS$s{%Ï|!%|­L¯µåàƒèƒ½Y¯KÖ¯ˆØ ¨Ûu³ÁõڣƸ°ýÂ’ Sá±A¼À°ÑµÄß·,s×ÏWÊ£&™k„##¶­Y£Ö‰Î2ÀýÃR¤a<„gžÐð•7Ê\»ØrPüpŠØ æ¹ÅË$ùÜ$Wa­µ RPºÜ"µcò°ÖS_-O×ý`n`-§™i\A5Ð+‰ÕÈš°Àf†À¿û˜,Ë‚¤‰ynòÙÒÁÖëd*[~Âü¯î[HWUr ;åJ¸Å;úì |9aþ@&Pœ –Ñ!‘§õÌź™O’$/Õg:×”²Í(x;ˆÁ/BÉ81VÌûÚΤÕéÔ¿½¯~ˆœÇ”us&wär€Z œŠÄ°›ém¾¹}¾íÔ'#‡œMä§éì·Ìž6–¤öå„‹ÀrÇÄmÑ)¢,Êb¦R·;á˜Ø9àöå)ÈÚÑè;w %K›qä÷Õýïµ®»Åч3ç´ùœ±-²>hñCš•7 æí&„ËuTF·sr×w>úWf3É9è³Ý½?âòR2ðãúãó·:-<ÙJüÙ¬`˜1š@(Á´¥N®êíÍ”/¿îÅb¤o{sµ{¦ÔënV¹¥.ŽüáÙß|òií}Dsde*n|ù}›‘¥=&Þäé\áRÃEXè…Kià©1HSø1Ê0™s±ä.Àj¦2³<˜ÔÜΉ_ßb9. ¨5ÝëžIÐki1nZѶEVI!«¤³ipÅj°}MwåÝÀ]bËŸ*}Âω3 6í E,óánˆ–R®L]’¯Ð—÷D$¡;‰Ô§úWªïŸ ã» d'œ÷O4­éaŸU¹!>šnZѶEVI-+OÄ‘ÍÏUw!ƒ 󡔯½âr¹/CèMºvD•¾_,·WËwÕ¿¹biD-Í$¢íŹ'p?ÒT{ o†¼rö²8‡|P‘öOi u?ùáÖ*˜|xc&_ƒMe§—ì'Ó~ïšè+BSMÞ/Ù_¶í§‡FkƒIšœ‹ŒÈ&qºvÉ•Ëz‰Nl±Âýfkº‚I2ÉJúJÆÌŸz æ«MÙí}¸Ï½r‰HfCmýÜÿS¾)p½iN™ç€ Aå69w9hYߊR³²É˜©ýâ"I?PIàçãfOŸõqYôî–Ö ®º ÊÓR®¿’&0 Èܯ6;ÿ ÍZû`õÑ Y«2˜4‚PörÕÁLø‰[Öäkà =ºsÍÊËÖqæò*:iìSŸr½[ÛÄ+lYÆ­)ÖÈ ±'F–‹ÂÑ|FÁˆ‚ÊUyJœ¦Í ã$‹‹ú‡®ûпR]÷ƒzúHcuœp¥j€sf77Ýú­^<Øèy»\‰]~ZŠF>)Iž!ÑçJô@`µýAx7±¡„ê°˜Q«Š,qzúÈüÕuú»Ö<}2¬I–·¾k}ÖÒ+Y=¯HNUy–뀲M“•·fHÙß—©ý‘lfMû¯¿Ì9 òÚ7a ÐnEkVpìabµðýdfU©fpÖ:Wi¯Ð9áþÕ8uj²Ó]ÿã!ûL‰£tíŽ- ö@Ö4YBÌ ÉD/0½çøÇZˆjf‘9²Á;КÉIh2³Õ‡3§µª)øÈb%7«;Äim:êÔ§Ôë†úþ‘5;kÂ’l+람Dv´gY²l˜é$™¤#_E?¤'÷w³fy‰aD³*¶†¦Z—'Ÿ$²»k>œu†‡¢_WóñÊï"g§õ©ærØ©øõÈZk¾VÒ²&¸™ëΘLЭgÝYsÐ’ãA!ªH;ýLÐuUü2b¦Z.€ ª´*çÌ“ô@»"b'Ø<}ÄA׳Éìþf‚pöÓ']÷AW3ù¸ä«uÌî`ï{.öÁ±>Á @%>û*o4Í0±º*-e¥Ë»øæ«[þº`¯¿ò·Ó³iVÕ‚fy‘93êò©¥4AÇ amÀ4¯ Έ¦¤NöAÜ÷\ìæÉ*lÇæ*B¾<Š©J€eúzÖ{|á4§J‹°Ùœ B´6ðÜ.舵àª($嶬qÚ˜Oó¦ºÜip–pfXkœs;〬%e¨ù«¯ä‡YêŽÉ˜ã{Ë”î£.¹½Yx%q?F´&a%ÂÑ7?š‰7á)!ëÛ>_Õ¼éÛDÐ PÍ^7ÓOi«¦qåë|3[à6ò¿Òî2Ã;Ï» M–ÅCWo|5\^$ìöU%}ü%vQˆªªÎ¥Qƒ“”Öyúê• O7DYk>ÕE‘½¢t¬ ~bN¬òãV¯éÝ_fxWd ¶ŽI›°4Qç«76Wʶ¹þÕÝѤ/ª‚[€Væõ$2iÿëΛ¨›ù*³<ç+S§J%§ÅÍP©Ô÷Ô묖p GóÁæ[»cUz ²’p’̼JDíĹûDf»©i!†ÁÔý|cþ‚xE%“;'±Üÿ–¥ªùƒî7æx% «V ¹”e1ÈWK¡6xÛ¬eÔá5è¯ì8w%å4y2rñØ “…¯žp]KPvÿÏFeë¥Wù#³œºýZ*vfdxѲ5ºÓÔà.ȺåZD§J:›³°±˜ô Dj럱)èΛætfEíÒ¶dëPĤë•Hõ9Õ÷O¬E«B#ˆ¹ ²¶÷¬7‡Ó¼5Ó°|á®&eÁÃPA Fy4æ×[!”¶9­^ÝŲæ+±EI˜jÝ(b•ǘ©ïù᧺îíë¤dFüTh‚¬Œw®Y§_¯ìùe3“ÿ‘`+3êÛ]ÞÊu7Ò6èÒL>rÿÏg¯¨NmOÇUª]÷A=ýj° &[©ó¨+ÕK®ì ë&å¬Wƒ^ÑoI:Ìék.ȩױ]ú"tP‹gfÉá×Û÷í3Ö/ˆº(=zpñzDwC Àܤ13“67.Qå+™›y€[Äš•ˆ¾µŒBßi5Ž.kêŸ(¥ºîß.q&Ï"Øypñº7²’X²läÝr„G±j¦‚Ýa}ãó•̈ÝÈÐ":µÔQàÍ|®žMÂ#n_X‘aHüˆ¬$–´•¬"eÍe&[_Jéˆz%DûψFU„á¶ÏˆH”¬K—AZlËš`…TÔˆ~†ê„ jGÈÐÝ‹×Ñ"ømse ².øÕF§HM__ßÂܯ°â ±oièÓˆi ÌWéƒXWªŽñúƒ¯j)S°Ê÷ò50G<8âGó.BSš…Á–E°õzšnb58ر`•+ÑR‚ÕÇKwü¨*'uŸÈ4/ìñãDAÑgO$0"úkÉ^DÍ4o—r6}Äõ¬ihô!6¹Òj‘)XÁcÄBßœ¯¤ï’=@ÖýËVÒB(4…È4w/ÞÒõ j"šUÏã'uÏ‚U²½¤¸‰‡®µ®Æí|ŽPª?ìÝ7ËSêXùQ†pišõpó¬¼Á¡b{×ðVþAúš …`E µ±Z©¥9"ŸØŒ~ÿ{ýϹ_õ+îë¾£‡0>l¸ˆÅ>l=þC@³"²"²â Q0ìyÖ®ëpS¢¢¿VÝ›Ùîv3?ø°¹ñõéçê=î>l.ÿNÚéÒÝR²¯¤{æ1?lЬBÓXE$pTÿ;DVÍû«ÉX¾Ï#o(âÛXedåÄhÛ€Hä¥$Ž24ÕC‘cBÝ"‚pµT¦’§ƒš kE1ê“¡iħ.ð’Å¥ EDáÜÛÈô5¨F^dmº‹í…Ørý\½GæQ—£Ží®¤ê3«ð’Yë|š!C2åÊ‹N!wgDꄌ%%”.ÈZQ¼úø î"‰(Lö"'Œà!Gdzï¥ÌÉ C¼—¬•8ç[lÃ/Ât%^-"ÆJOÍfwGf(ÜcÊS›¸Wö.排Þ_n"óü”=*Y‹Ostô ë¾nÒs®Ç¬ùØÓlv5+£b!p Rå0Ó’Ô]cCÖ ëÞ\n‘îÅ(…ƒ'vØø· VŒ&Ó4=¦`-È<í#C ÄôMu?¦Bà™¹_‹¸nÃM÷’#B³îMi\ûôNøøíS•òz4'Ik.Â1Ç!F6ø(âõ*%Ë(Ë¡ßå,Q|5òUƒ6J.ƒ¬ûúÀµ­»[|üö£JûÇ´$uñ¦ß%É')wrBþ Q»+ÀýVMÀNFNW—z¨«¡[Ô§ _ù[¨WÚ¿nx;ÿ‹_@ûÙã÷fýQ°àHO©ÆJaÄÎ?`©ƒ äxþ¹Ó«Jœ¶$ïA{8²„£‰Í·¢œúÁàÆ@M ¿ß¾ýT׬?ò MWéºæ°FD©Ì œå=ú35(ïE ²îîÑïMÀ2Sʱ pPå´Ñ¨Y$««“ò $OøÛí ¨Ê¿¶U.m­Âc«¸)º ëÎùº€ )£YKéHß4­|«îB[D˼ n–# }ìÔÚ Ø· –Yð ²ìS{½SÓK[F ø4• *cLö8“ý`êfd€,g[*ãjCζúð9[ðzwh{t² 5¥¹YlMoZ 0&\Û¹³RP­úê„‹ˆ`¥>k'Ä&ôë°û@¹ÄDI)ÎüT±®~µH/oõ ²"ÚB>¢YÐF ÄC‰´éXR¹B¿nW¿v/Twe— ù&M5 I‹VïÂçàëóJ¶ƒ=f Üâù@°¶™:/_¦á_M‹Ø®~õÎÔ©’ůü»æú_!h]dƒÛÂêp>¬íõsõ¾ÿY:J}\4Ç—Ì/~Õ‹k݉aðu+°Ì¡¬Æa%Ô‘¥ÈÂŲ ëÑ%l)IŽÃ˜ûÏŠ§ e×xݯD4Õ±ãËO‰wê×.Q†þˆôzQQ Uywþ‚ÍÏåŽKnRúP±C²æàGhþP\% -Û‚Z¾®¨YLf¹|ìÿרDÉú#¦Ê=J‘V<ˆ%¹;Ì’º•·ÖbÖ%Å4ï%lƾ3 ï¬mâGÂ{HÒfÊx/DÉ>×Y‰Ñ>¼uÿtT¢dýS å¥ÈE!–ç«›Ú vWÂcáni•[¿ }w–Þ6YyU)Úñ]ÐùV¯ˆ#È¡ ˜fø|ª }Ý•AÅ`oW9çøéÛÃöjÝ$Y5íäýS“YÐò×Ý@LÝxU‚ °èó¸€LÔ~ÅB1ê#èp2ª+ÊÐz£ :’ç7™›ËZ¯ð»»èÒD3ȺÆQÀ! c  +xwƒ„ A¬¥\ÍÔ«YX›L#«=N‚¬´–´òŠÓ×çNr2в«X¾\h ÏD‰¬ìrÎWö+œóvüý}X4ƒ¬ÛSºEvY x³íV¡<r(­zÈ5~úìg¢6i ÏÑÓˆJ*–T„|¹¹/㳟<Éö#Ëç}Ôw™1Þ-YÓ¢oXíC³æoì[Òšìè;(irñ\eZÃæ¯ªm Ù‰ˆ÷P…-ÐIuë{Q‚Ï`M²i¾8ÛæåžeëfȺVR´àqÑ}jÕgõͼ+’Sk 6á„…ín»ÈRµ‰¯>¿owåu`¦E}5M¼¹27lñR©ç¡„‚d]BƒnîèÖ icjÌ‹©U׺ÈmA#1a §HIàuoÓ›§FI^wд¹¯¾«üÈÒ_ŸâôÍ­º5M±Mè|ŠÖäåDý+{3ó茛ñvY ¦F‰î§>Ÿ"•Ï9–µ0i^Æ¿×]{Zi ’½k*Ñ»ˆ‰I¦òÖ'%}Â×tçwëŒ$}ß‚ aWF»îQúBø<öv§`÷OV½ZÔ¡U°¹Ëôá‘?m€¬­ˆNÞ Ð}¥,¥ÈÑŠHasdTTT¨¾D®|ê4=|úw8PÎü«Š¬pJmðuK° !du#÷Ñ—_TTÕüµ˜,w…²%£÷Wdƒka¯àhÁÌ0¢,lÆÛî,•¨À„f5ÑIç‡ñ/þ–;ó‚.¿QŸòF˜Ž]º#ržÏ^w¨¤ï{ríµf¦{!m«ÎÈnu±­2 h=¦2„H[Ê è³Å'ĤïÐ žˆî±>Wïɡr-óý“´~tTxWþ.7ýÃ`!’;Ÿê&¥u¦šA¬U”¾—Ô–ýCù…o‹²%k½2˜ïÜJ(a‰[Ö$i}#Ÿefa‹¨FŸ±”ïêÀׂ( jµXœtÝÇ(u<ЉXùòZ¤®û¨<åW>¨o¥¦©9²ÊÉ´°A’pÌNÆëÊV3íé Y¾ÌÇêç£fœ+ÿkTÙ°d­-™Äv3À ²aÁÃZš"!¨o‰ Íž«i(wRÖWI¤üÞú± r|¦ÁD"úÞ{™¤nÖ?·¯\›#k™nJâ-?‘Çï 4Ýžl’,a'oMÃ/]•èiæWIÙ0¹ÖÖ’×ÖD”…„le ä<Ǥµ†¬ŠÕÖr1í–AñÂî:WßeZ?·¯\7œ în›ã½ü”˜t4 »¼r ¶)P$wT0yÃÐÚä¢P} Ï](F‘Û'¯?{ü^E¦šI» PVŽÕÿ¤¡å ¸žhV*|oK,Òm?xþQŠ3ªEȺ±¨G;¡#q‘$9ÔšQ…µî³Mº™X&Ahež…“¯Ca‘p…klcóA¾óÂ= ·*Ö JÀU>³ßq„—)§aæM/b—”ò¬¹p–÷‡"ïFÔ„nËâõpdMÏ@»Ð’ªá7…<`Xs„¤XŒB‚™F61és@”àÇçKÌ\¹‰C¾»ù( -Djœ°»‹AÎKØõ.1&–ùÑtJ/ ú&ä`sꟃwÙàö>åo²öõÁ•‡.g#‚Õü5Öwž·Yp…oŽëo‚‘¯d½)ßÀ|æp¯‹¯†H@Î=*†CÂ5'î2t•©§†¬‘Ð Z-ZS­V-•k_L>|¸6mž¬õzÑÈÁ¬ë›,'Ew¯LSÃ4®#„àaXHN=ºòÃLmlëÖªZPž+vóÛ臓̞îjJ±Æf5ƒ. ¼…¡Ä5f*¨Èù·¬Ò¾X±X¾ö> kILfvŒ)#go¦øA*9)"\DΚ …x¼iÆè †IP&1;§›À-Éó-ý¥9Æ/El¨UkÒ˜‰g§ÜÂIkîØ«f¤gæý4›¿6¥bÛ"kUBÔsÙ%K‚k¬…óþrÅ·Õ>{üÞGĨ2"&ƒ«e£”(ƒç¡BX²PU’ q%ú•Ÿ&ŒZÒêS«±û*Y¯kî/g!Y{»®—,ÂòuïY—¶Ë »ØÃÅ’x[MÉS¦¹‰@K‰ºæÀ¾T³ï@.SÉs k— —p•-鉈χ é¼ÏÚW"=]oBjl`Τjùëêiã%î½èazª¸—*ïêñ§þýŸÿû×ßþú/ÿêo~ùË_ès}”ËlêJ-¸†R IDAT{#ÖåëŠGŒ:"gëKöFie^¬7(X[ø°ÉÕa©í»H37#œÃ*~@‰>–ß 2¼$_û¾ÿË¿ú›¯¿ýõ¿ü7¿üÓ?ÿ‹†4kJ{|šrgÄ Ný0xk…Øê!~“<"ãM(g°už’N±îq£Ê¬\ï'ÖJXu‹›ä0ó®–v›ÂN›ÝÓ+^ôš×„Z'²«¹ˆÖÝžÙ—ùu8yW©¯˜nˆ¬ÔÅöS“凊b|%< ‡µ6“{.î>Ç|••T ‹’\üøX妚ø¹ÕÈEž-˜#’Ýa…­0ù:CÂsQÅ;eÈC‚¬ ²- ØùW_ï‹ÓÑßꞣàä—ܸwÀ;Ú•sÄçKkV;ZËç3i]ª5%‚ûë «ÃCrXŸ’ ÝeÎsá]‚a‚äõ"¹PIþ@ÁƒF5êžpB_ØÕ>ÿkdƒ‹Xú©PæsI¿/_N\ÊdݹÕv³ÁE$£ªV©[—«7.Øù<Áq¢»~’ÃÓµ|¹>þ«†ÜüHùëƒÒ\ïƒ<ã½¢Åú”1V ½Ù}B_,,7, ¾žÀ‰ê•”AYËWܽ_'®¼ÙÙ‹iæªÇd’ÞÌ‹Öå4äqœ ¦›…4¦.£•î’’t]ˆ®UTÔ£eKrrJ– žF=ýZ#°›[l»ÉÒvž!Y÷ýCå)¼šmzP`VÁ®(® n¹ðGN—z–úv¯¿zÔ£'{ýz™,ת :Ó¨¯·*É,ÉšQ!&£Ž’¥CרuïÞò¶zÚ—±¦w¹/|D¹®¥ggïˆÁÉn²ù×BÜ®ùÜAp—*’â?lf6xWó¬i¤lDºYIàYÊ÷:À`ò*øWÖºêjƒsvdÈÇ.yº1m]MÚeW%µójêÃV÷+û>,ׂôM>óœ $ûú€-á}„ÍEÿÐí‚P•¬»šg•»"˜›­e¤`¢´?_r¶·Æ[:?|3þ ×ÌèéRk:Öܽ.÷ªƒ<ÞzÆ89Ùh¦…5Û¬Ž7n¶ÓWEL¶ÊqDVßJÑžÿB÷-ŸÈŽZé´Ñl0oÎWÀƒ5®Å´4,1ø‹ðAk$ßeJ’ØôÕ—ö[&õ­°Ü0ÆÍîg·nyÞ¡úäë¶4ëþJoú³êß]øúNõ§Y¾—üÁgÁD´"Í›OÐ%Ôø,Ù <ªê8*Qì;PPˆ—š9.~Ç6ZìêT&+‘€A’9[W*ª7ö‰$61Ëä–Ý|¯>±Y…°µñ"šui²Ö°0L¡¶>jw­tnÿ;ÕŸTÿS‡Ù ׳ Ü-ÉŸùܸ${\ã¶Ôû²+»:E‚O&O›Ó`µYã…í=¶n–¬ Â7Á5—„–üÈt”Sq¾ 79Ê;÷ýUß?œißû’”­› Îììù&÷Kß:ºù+™>M»Þ±R÷¬Ô­ên”ºUêv„¨RJýT©/•úQ)¥Ôª¿¾˜9 ÅÀ76§já7SºÛÊ{› itš7Ö1ØÍ'gþÉV™Á´ª’Mvã|öx*‘5û™›ä³ò´ŠrHÈv„j2(XI„ ³ÍÖfÉÎþGä}žó‘[ñëZ7} ÇÿµSSÊVÖ7Ó–5-}mjV3Ç«ÿåzµþÝ}×}TÏ•z>2ÕL³—V0ÍTÚ©Åë¯UÿNõתÿêgèW¿{©¡gÿ:V…úWF¡2÷'JÔD³®r>™.†ùç“–7Ö¤,[f•“Ä^X³iÒ»Z‡ŠÎªÁ2`FWø=p袤;{—Q‰öWîDìøÃ=]UÖGb«µÁòºÖ•=†N¦ž.d}71Õ½ ëÅéÝs(w}Ù ¸EÂêâeîgñ/;÷[Xò¥œ-èX”¼œf­‡†âÈQw¾àõù°­è7”“¡Í‚è]¸)[„Ì”í¼»ð“ ¹ã öýC’â¨j‘µ7«ÕgÊ#y5/ónUèŽ`¥ÔwJ}­Ô——Å?RJ)u£ÔY©ïf¨SJ©ó”¿•þÞØzÌÍ”RêÇË_ON¦pͲ©’ÓÒ¼ ‘%] Ö¬ºÙ]~pÆÆ¡*;µîd|’cK|ÝÄuðÎ3uÔ«D) ˆ4`¹Û°¤¹ü2ÉC“½q¦C<·7¶ŠuÍÞìÊc4â¹ NwÇᇮû8ß?Ô¦QÝÕåxØñeV":6Ê“5ªÑ›e‰Fn`v²‹j¿šù,2þ¡ßüã/oT ˜ˆýƒÖV ]Ü1xžòÞs>§~Í6~ý妿«n´Ý ìçþ§‡—Jýã‡ýRß~${ͺº¹ïªo?*¥ÔϯôAõ›¥{µ6• nÊ´A¸ÁˆÛ3±ZÆÊÛ®¿'ØÖƾó±›Á]‹*{}%ÄKþuV)×,þMÍÓ®¬¹?3Tq‰v¶•yÖv¨Ï/˜Éqˆ5ågæ;…/VÚy2yè’ë,ߥ´ÓÎÿ°-— άÝ] ¥Œ¼ÖÂqÚeŒƒ*½™øÚÿNu_\’ºç¹=;ƒŸÆª`½1>f0ÏQ_Ý,9ÞŸf‹„ƒ™QJKþNê°þ±·sxZ˜ƒ»ÅÉ™÷09 [¯UŽÚB-q]¦õµu›%o#›»/ß–Ü÷Öè’ÿb”¡V#šº¼ÆLòvÍ“™RÍ/çŽK÷ÄiïCá?âæjƒ×l$nu’Q3•IÊÁ ´È¿íBüŽ{ h╱þ·¥ŠN%ãd¢‚IçSGhœÄˆ9“ªŒŒaßš•×|̲×Z%äfsM5æ[>Õž¥öA3Íž|¯/ÁçžáKÞ¥I\©_Íz¥¶¤Ê:EìÏ"_®öhë|ÍÈwÑÃú̒ȹXÒ…*XTÜÂç/øe—3 ™µ=„r †6WZxü¨ê0Þ"1ÿº6=ÏÛçX/K}n\ηõöÝÕeöt˜©½ ¥y&k4«ü]‡ eÉZ_òÖ÷ 4†¬T£´Šop²÷¯wK–êѬµ¥g‘™]yutУ*¡am   ?l%[‰Ý-±K¡ó%élÊ7¤s}5Õì»Ì±ˆf•’5Á²§YÙšv »=ê‰#¢ÕšF™þû'*ñ{ ùïŸÙ™–®w‡K%è2 yU°½yÁeµjÁyÖ²°†Èü°-óe-צÅ1Â}ÜQ|­ÚÍ”/ƒÏ²S›&ëFUfÙÝ]iRÖv1¼¬¢Ñ*Ö­%öËÂvT›¼hs Yz¼k[˜ú*[ß$ÄU8³] ÃïJhœýY—–ÃÎÍu‘kSH—ÂÁ뵫y)j*ð;Ü$q¶â‘ùUž`=oí>[0sž©—ÊŒ.ƒ užŽÕÝ*uVýIu7—ŦßÍ| M³ëÅÑmÿ²±^«j+c*íÌ[LWj-ÞÏö‰è+Îð%<éIY·ýŽÛ\]y&%6÷Œ_ÿpÕîŠUÅšW—/Ÿ Ö>‹¾+"ý&™4ÀV!ø3’©¾ÖrÑüL*é2a¦M3Bëzêt§¿Mü‹e4ñ@³WÍšÀo&×j&cI‰i.iõ9ÒeÆ'nÅ*?Ú¿°uIµZDFäÌ¿¡µP}.æ~6ÃZµ«»—ðnOk¯• iPª¦AW²bG>ÿ<“œ¶«ßö£dƒKÞ²Ólz•™òœ˜7Ï›µ\&Æ]·¹™Õ¾ì|ˆq‡¨Ú”F>rlÉ•ül3‰•àJ|«’µªÖ\,ÉÌ—%JÆ{B­¶üر².êés]qLŸ„½Ù‰jëvž~pçVÓ.Äõ£Xýþ·ðe'û_é«_^%»@­lr©TÁr-þLª¸ì‡my$¤ÍþªÔy.“zÚ½e*ךgõ™ÜZÿÒ—ÌF]…½¨ôöÒ‡üDûÚk_»GÛþ”ºñ¬‹õ'uÉ…›?'º‰•T伩d}jpËœ¯{ß”ª{zK’:¤i~ì‰1ËRù1ɾ{Œï±dn˜¹›ˆå×GŽÓ¢Vsv÷¥ÎS8Næáä®ÅjÉpÙQŒ¬ÁosÞ0!óû½T}YÎ3ËÐÞLÕIºÁ*Ñ«Õ8óîv"®Y‚ä>awÆ-kš½{¿­4ÊÅF¬pôaÀ­¯É™Ðþè!‹:æƒU¬$l4+?y¦YîëVWY5Ìߢx{öuÉz_ܺäg—¦‰âeß.YkÈØ2ײ—ÐÝå»·“¾ì¯Uw3âv<¥[cnõ4ë g|šu‹SÊþ•æèúÅšÁM eNÔêR•ïòf½ûÙco_ Ã+.|z”iOn]±þAH)߉™"8HD«Ü—o&Ï܇aœ ¹kƒ—–_"ÜEÞž}[´åÉZOî, ¤Æ¥ÛÙÝëÍBÚÔîGcˆ/ iKiMS[ÊUEbº4ù&Þ¦ß_ŽzR•_Cb¥ˆ5'È¡,bé_»·ö[¾Œ(¹fÆ¥)šåEIÖUµµy’üÓ@ð¶—ùþ(î_m—V[&AÂùX¨“?^øÖÉk£Ü’cßÑÛ$în׳¦q$ßi,;²;ªž&¤Í„éyú·»™¶tÕ¡åÚ?¨^³ÇjÐà7è¬Ï¦¸¯ãÇG4˦ܧ áU0…¾ÅÝ<¥JËŽ\K:+U}HV¢Ûšê~ v9(…æ‘5 €Í<ð„Õ__@{£”RÝÞúg·LÉ<×ȰÆmÙxµd–ù¬ô6ûíÛÀron>6MGòTˆLY3EULeVìU9€¨1¢>yÕ^0³E­yh²æH.f_MÓ©ÎèvÔ‘V•И4þã^¦6õÎ@e€'ñòÝ«MûBPñ¹zßÿÌKë«?9 ÅÝ(¦J(%W{ ³­yeåYÀªœuJ–Q¥U»AZY„ÈGk\Ìí¸¬º²&|õ3† iÇ’$“Í|ï #uzvP¨cÆø<å„ÝS}8»qMȉ)è¹±c%šþïݯD„Ó·<ƒ‡° M0›_ v&B‹©IVþÙe¡ϯìÝhÝâæ¯ù~~¾" 4B¯"‹»8‘ÕR kÊWÎz’8~§Ô =/“¬Ã<«º™zÚŒ‰ßóä»4âöLÕ4©IøJNLÃ;ç¹áÈÁÏüùÜõ¬U›z{_¹oW’e±uÎdÂÖW‡Ìøò`ŽZÆãË!'¬îÝ.Vƒþ±¢MXOEèÌÌíÂSªÁ-Û×Á[Êó½Ás¥ðÿQÝÍEª±œRJÇ%ªÓ.·³´­6ް»®žlñ~;+‘¹â‚÷g»AZð›Õ:’¯{~K¦ò(GÆù\ùPæÈt·¯ Ørƒ’P™)QÞ2ÿ;Ó¬&V‹Ëç˜,é|¥¼ §´¿Îµ›'«0‘›ãL õãÔA˜N)Üï&3¦q"vÞî¦{£úw¶3°Î!û¼ÉŸ»Úv*ê†('›}(ÊúL!äšRX}»Wð¸>g(êÈ#úZÒF‰c%0ÄœŒ9›»×’¥d VEKAØw/âì„ç°ûÉ×ÉÊú3û&ì!3ú^€ª•k÷Å|ÓÃCX:}1í>s~˜g†­cßÅ-…å7PÃþPS°¦á­0rÏÂX%K8’Ù$ÒȾâfüôªËQÉU»£é[íç`*¹ÿ\¶½QËznl è‘^jnxõG“½‘5P¸+ÀI–Fà½SýÉ0,$‹Nã‚×±`øÆ9ùólݪu9ºÊ)ùÁ"§Ýqd«kx[©˜Ü²xG‰ËRÐ Ùš¯Õ±’F7ÌSŸÌ­ñ‘{±ÄhëÖïD]cþsC”á0È* eõ.c…Ñ×Vµÿ¾:_:ÞÜ+\Oª?O­o”‘}eúÕO‰¿3°å…ÄêÀ•ü½pÁˆVÒœUÃÏw d¡PízÑ‘9«*4ST1+j°hµÛ‡ E!t·ž.^‡¬Kxë‹Û¿ŒéÙ›Y÷˜‰”§™Ü;¶Þ8»û5ÓÉ'·%‹b±ßøBQK1­Xyüðüsm’‚— ü‰h¦RW'-^ò-få¦Áˆ"4Zæp® þ ~O“¯;ñ`b:¯I;¤y‡e6æVe:žü»_Ûü³­ü¯gç[ÄëÓÄÉO‹+ ›™v¥´rÔBUw3w±Û߆Ÿ\häkBG^ã>Z±®«G«r×ׂF¿¸:ÛvS3¼™yÖR"˜;ÄyÊOýÏOÓV‹‹S¹“#"™<-“4ö‰QÞäë²™â•!V¶}"¡¥s´LëÖ éIì¹Ë´è!>xoñ™ Ó¢l¹ÓDáž’À+“5vž5G„ñ˜xžƒêæ²ãwc½í;xæÊωÆ^]„\ž–¥/?ãè¦X]\kkÓ.)CŸdŦŽÝ“t$»Ì"-,çYqxl]çÅVoâz·1ÏškµÏ EΘž/jõk–7³%m©OÞ’I!µ[_ž&ô¨‘,Ót{ ºï戹ª7¨¹K \Òì‰!£&™C-¾êÎÖqõ©?ø†%í«ÌBåàòD2Ú†6G š8–º-ûHo¬YÒ½[¿eJÇàîvòÙŸÙôŸh`“ó 3åzCèQRÂÆÞÒ³ QÞN©Ùq;Æ è šý2à´4.Yå2[¿¢E°•¿^×?—lÙWiiî3>ä×ê ÖRœ•’¥äy9Ö†|ö7FÖ(¢$g†É¢Üþ¬úw—IÓó(U ~²œeXÈ1Í”ë-­G]+¹ ^é®Qb”±Éµ²¦&QúÇÊ×3¼{›â/á*NfIË6Òp8¶‘€Ï° ju»¨^Ås_8VÝ”þ(¼)¹§PÝNJ½œŒ“úß–¿S;9·¬wŽÌÁÝ0ê‚, f„¬o3DÉ||åÕªkM,¬ìµô±›øN»Æ®¢qÅ¥¤úIQÆŠ¦Í1·B´Ã]¡çþ1˜o›¬KKd« ÍíÅï÷¤ÔÓ[Ú/Â¥ò¨_u®ºµœ¯Å°‹@죆܉ Á¥¶ó­™QÆjT•TQůu—Öød®rù猪¥Ü¯ –(e1Õg"Q ½ý=ÈÚÔgÑS%”b–{6`y3N¬Ž¯›îKçܼÉV“¦&Ay‹XÊ’† i&ðxËû : ¾ô2”, vq·¦EÝ}uù’y½ýÏ”˜<˜V‹ð`*.Û´ÏD¢ÔEuW kKL%áÁØ'e'—¥:¯{3οN›9þYòT(“猭ü3¢†~µ~öåN}Ž€±bŽÑ²’×]àùö%Ë—º_‰hÒÅÂy…l]]ÔJg%#?¼m²–dãê»KóóEþ8³ãW§IÔvNïUS>2.ü.>™â8Ù(-[}ZÖ÷îÐ1H Ö"'/wÉ÷9527+mVµ ìõ¦¿{ßTkÎIÊG8ô“ûRu7ª×ÅÀg¥¾ôlyÕ­NíN5GN8Xmäz9åÂ’=\AÖZJ—œãœV¬žT?hÖ§VåL”jñªüIéipS•ž9@ζ<¥ÈS²º ‘£V…ðø\½ÿìñûÏ¿÷-MI†:/”§?ýÛðàLV™\2KZã0þˆå£&åOûÜ'öÝM’UN ÚPpКÚ×ðùø«Þ`Ô‚—6æ³éX¿B5á:îrCoF4ƒ» ‹hîÑííäÄ«¨…­AŽÆÎ§Ê7_cµZfØr¸RhÖ½br­³òå“w°°u“dõ½}â.ÖýI)Ãxüvä¢Ð=Äà&á“Å Ž >;Ã`Ë9¸HH¹ÂÕM¢ò е§HÜ®å¡Ü|r8öˆÄßà©ç¸´âE¬qðp'>½Û FK_\êY©ï”RJ}y™mDíÍLÝÎìoç…N’³zãÕµ(2R¾W™”"©cšôêiNc$>ƒ¸ÊïÉÃîûÜšä’qXE»3ø¬)ð µÝ¨&ÏFo¸¯Çêßþ4©Ó^† ?¯D… ÌM… (n·¤ST‘-©2­Z$kq*³4V˜s&¹ë¾ Ï )ÚÜæ:¸ïžº¿‹¬9BÖze$¨éêpk8íÍMŽòÔ}‹™‚El:„<3ûÃð´³lý­|2éÌ3²ê•"6ªsäfp_©GÄ‘$ï–Èè´*Ü÷Ë 5µ¿²'8õDi÷f¬íç³­ &}-Zž‚ó¬ˆ%±JfY©*A¯¡Ïô_Åt—’™FlãòÎþwù˜6øÎí–Èš£ù¦j£Ó¥gÜO¦ W=ë9A÷z­9á:Ž6·ì÷UNù| ¿Ã ¤‘@^‹©¦ âGb[ßÿ‚²ieÃdyp´Pþ…ª®m2bÓZ–\á*_~Úß{­ƒ[â kI¸&È>lÝ­R/§ asa¨¦¯58YIÄW3ùfRÓ®L]1´·c"HNŽË€»§”ÑÕUØýÔ7ìÒךvw”X#שAF89\¥[ï’‘‡ ktgĺ̤ÝXMÊËDó’e´ët(lÑŠXX­_Qó´°[m+Ì ûí$,Bì[§›Ðs8³^ {¸;+j,‹%“¶§„¿ÏŒ¯OœœµS2ùz¦€}rk©Uß+cqïÏ&Qki\%v+ê˜øJcÒe0X Ö" R¶{‘[¯tE{$ßàóØ3nlÅ:o³ªÔ̿О@½«ˆ%Y>LšB~ˆÄ+ §¡WLÌAÓü ®õ:IÚ?¶×ó@ò‚š óãß^%ìQÈ:v­¹Uê¬Ô휑·ˆžÇrJ¯7½½”5yfRÝŒ®Š¯æM—íˆ×„Â"×) ä¼ä•/¼1}†%q0íº?ŽJúáÔ¦;ò^%ìQȪW¬ª¥~2Ú*e›+i‹%­VÝÔ±OžÊûØøª|¡V7ÇÚ ÀMv`°ª¥äÝrxZ»ãð&È­3U£«…$Æ…dÝG9h}=Úº¢sšjuÞõÏ´àŠW¾[»Bc¸ \ÆÝG²¬“ñiñ’ļö~BmðæÔg ‹#M²dö8"ÕŠOvyUt~õ×Jýt¦SÇwOörÕ ùÍÃ&á8­[ KòUH’„0Óf\[2Çä×ጟ±·)J±æ×Ú‹5wïïìøåc¡Y· ÚÕýC¥n 1zÏf±DFG›2¿ÎõþnIDAT>$—¢þ1Ñ·\QH$Aƒ«iðw„Æ­ fu§p½êûk¥¾_éÞ‰_å,}m›æ0 o„Ü’$8ÞN?}Ë}fý2}eG¤e„„¦äÄžY•…‡²×YÙør*ñí¾0jšætô-}q˃Í©rùë¾¾î&˜YÕ Nu;¼šâ•ornýì‹Ĉ=¥Å7ÀÉ¡Üq²öת?OÞúcÜÒäëÞ¨þ]h´¹·ƒÏ?mU+b‹(%­ùÍ_Íž6¦^´Ê‹È]|¾ÿÊXBcÂÒÒÄÈ÷A­Jf=¡GAÖbL‘ï²hU©´$»/ L«lbαѮŠaVàðòQãVâ»ä£¾{°vOju™£@¤‚¬ÛNFÉÒù¢M¯m¿$ß‚÷u_guFæB°î_R<¶‰ËÈM’…7DW“Yeóukd¤‚!v kö§j¨]¬—nlªYÿö§ÉGÂÜÒ’¿QKtä2±ÝøúÔ-MbJyQkò’wr wTž¼tæ»ÕUÛÐ, „]:جWBcT„$‚ ãHâêÒ_—Ä’.o’±úg0jµ¸®u݇ ëHD'cø°é ÿ9ý³d{4+@  +@  +@ @ @ ˆ †]Üun @ ò°ŠÏ?ñlÖ)Õ)õ@©y?äAå“ÙëuéÔõ‡êêù‚,ùCþ.[¿Ï[ûôå »¿ë"þïìvzaÖ;»÷dƒ¨ +@  +@  +@  +@ @ @ @ ÈŠ@ ÈŠ@ ÈŠ@ ÈŠ@ dE dE dE ²"²"²"Y(Ÿx^ï•ê•únÐ>âø[î)z¥þ^©¿ÇØÓŸ±ñ¿bßsdµÞF DãÑu];_ÝÅO&yÀ¨%ËD6@ ˆ’²"Ķ£©\cñ“I0jGÉÆòAV@  YYY@€¬@¬Ÿà "9ÜUž]× ?,\´L7çd’Y‘E2h—´° ›s29"Œ@ ˆ”èû¾¥´í¬£…fE ÄÞ”tAʺtÎÉû Y‘…Òà+«œFþÉûJD6@ ˆ’²"²"²"²"ˆ‹©6øþøOþçÿSÿúßÿ'Ü@ ¢âþøO²Zo H׬ïÿïÿƽ@ "?º¾ïÿÙ¿øW¸@äÇÿø¯ÿåÿ¢ŽM×põãIEND®B`‚saods9/ds9/doc/user/gui/index.html000644 000765 000000 00000027236 11555611701 017403 0ustar00joyewheel000000 000000 Introduction to the ds9 Interface - DS9

    Introduction to the ds9 Interface

    Return to the DS9 Users Manual


    Synopsis

    This thread provides an overview of the key components of the ds9 graphical user interface (GUI).

    If you encounter any problems, please email saord @ cfa.harvard.edu.


    Contents


    The ds9 Interface

    This thread uses Chandra data from an observation of the Trapezium Cluster (ObsID 1522). The default ds9 GUI is shown in Figure 1. The main components are numbered:

    1. Menu bar
    2. Information panel
    3. Panner
    4. Magnifier
    5. Buttons
    6. Display frame
    7. Colorbar

    The default setup is a "horizontal layout", with the information panel, panner, magnifier, and buttons displayed horizontally across the window. This may be changed to "vertical layout" in the View menu (Figure 2).

    Note that the colorbar remained horizontal at the bottom of the display frame. This may be changed with the "vertical colorbar" option in the "View" menu.

    1. Menu bar

    The menu bar provides access to all of ds9's capabilities. For a complete description of each menu, refer to the Menu bar section of the Reference Manual.

    All ds9 menus can be "torn off" to be a separate window from the main GUI. To tear off a menu, select the dashed line, which is the first item of each menu (shown in Figure 4). The menu will become its own window.


    2. Information panel

    The information panel displays information about the data file and the values at the cursor position. In Figure 5, the object name has been loaded from the header of the data file. The image value and position (in WCS, physical, and image coordinates) are updated in real time as the cursor is moved.

    The fields of the information panel can be customized from the "View" menu. Any of the default entries can be removed, and additional fields can be added (e.g. detector coordinates, min/max data values).


    3. Panner

    The panner allows the user to view areas of the frame which are outside of the current field of view. Although the display frame is filled by the data, the panner indicates that more of the image is available. Clicking and dragging the viewing bounding box in the panner - shown in blue in Figure 6 - will display a different portion of the image.

    The panner also contains axes to indicate the directions of North and East and the directions of the physical (x,y) data axes.


    4. Magnifier

    The magnifier displays a magnified view of the current cursor location. The magnifier cursor - the small square in the center of Figure 7 - outlines the size and orientation of one pixel, taking into account the current frame zoom and orientation.


    5. Buttons

    The button bar duplicates many of the options available from the menu bar. The buttons provide quick access to change the most frequently-used ds9 actions (e.g. changing the scale and color bar, blinking and tiling frames).

    When a category is chosen from the top row, the options within that category are displayed in the bottom row of buttons. In Figure 8, the color category is chosen and the bottom row shows the ten most-used colormap options (additional colormaps are available from the "Color" menu).


    6. Display frame

    The display frame is the area of ds9 where the FITS image is shown. In Figure 1, a single frame is shown.

    Multiple frames can be opened in ds9 at the same time. In Figure 9, nine frames have been opened and set to "tile" display from the "frame" button. The current frame is indicated by a blue outline around it (second row, center frame). How the frames are tiled is set in the "Frame → Frame Parameters → Tile" menu; the default is to tile the frames in a grid.

    If the display is set back to "single", then the current frame fills the display area. The other frames can be accessed via the "previous" and "next" options in the buttons bar (or from the "Frame" menu).

    The "blink" option may also be used with multiple frames. When blink is turned on, ds9 cycles through all the available frames. The blink interval is set in the "Frame → Frame Parameters → Blink Interval" menu.


    7. Colorbar

    The colorbar displays the colormap, bias, and contrast settings. The colormap correlates the colors used in the image with the pixel values in the data.

    To change the colormap, use the "Color" menu or button. The contrast and bias can be adjusted by right-clicking and dragging on the ds9 display. The "Color → Colormap Parameters" dialog box can also be used to change contrast and bias.


    Setting and Saving View Preferences

    All of the view options described in this thread can be set and saved as a preference. Open the "Preferences" dialog box from the "Edit" menu and select the "View" tab, shown in Figure 11.

    The "Default" menus are used to set the defaults of the "View" menu and buttons. For instance, uncheck the "Panner" item under "Menu" and the panner won't be displayed when ds9 is launched. (Note that some options require ds9 to be restarted before they take effect.)

    After setting the desired preferences, select "Save". User preferences are stored in .ds9.prf. At startup, ds9 looks for the preferences file in the following directory order: ./, $HOME, /usr/local/lib, /opt/local/lib.


    History

    06 Jul 2009 Original version

    Return to the DS9 Users Manual

    saods9/ds9/doc/user/gui/info.png000644 000765 000000 00000006137 11332353405 017041 0ustar00joyewheel000000 000000 ‰PNG  IHDR^¤P7цbKGDÿÿÿ ½§“ pHYs  šœtIMEÚÅ_Û¯ ìIDATxÚíÛ•£:Eé^NÀNJ‡0zB¸^—¥‘J¥Òû὿º±ÁP%ŽJ_¯×ëø—oB!BÐ?þØš_¿~! ]øýû7A€}ùû÷/ÒÐ=¸{Õ¼nÇÆ\ (žÏ§øÕ×ëõþˆë ±„ôÎÈ‚û_e;^߉«+ Ås7îmÛ Y~E‰FYð•“â^"~_‰­rê%Úü¬ŒÎ5pþ!çðœ¼ÿ~>ŸJ{ÒåÃ[Ý[è®âí¡}#ú–{ÈDìWê»4wÝÜí(jå}ÓeQMÞ«'@{iHF¶S‡pX9ìEõÞø^¢œWb—"¦LÜB¿ÜemYŒØµÞç†qËž`…±-kÒïMy9àŒø®i÷wb:éÖÃ7>zÐÄOïVÖÔžÿc×úPM*“{ï€rYÍ)“دľï-ߤ³bë–Eî~k‡XœêÍ;L½È¬¹W‹ºE‡]†¢`@áöÆvq©×ôdüs‹‹Võu¨s¤!÷˜¡28c_  ýF³­šS“ˆÙã/&Êù¯oª ÜEhWuxÔG’scão—€uÆÆ±SNßöû_ÿ®êæ±þn²Ó”õAV(ëÊFÖZÊ7s·SÿâY¡eû×Gq[qCOù wwî˜94KHíaW¾Yy‚¸eûÂܽ}‹•ÛÉœláÅËÞN™kðB4à¤ûâ¬nÈû.tž¡8ulxöz­—¥ Ý€ ¦‹Ûe¼íîöš;Ùoši€¡l7€]|‡ûíÒмž€`ôHøüüüؼ!)ð†\€ÀÒ ök¸T_ª«ô>ͳm&“þšÞB=2ºÅ`rûW`a˜ô}ÌJqÒ I܈âïx¥ZMÚ.*á…*iÈrõ#ôJL’ÖC¢ÏÊ•2t?ÕÝz?ÛÄR1>4†Ñ^¨’†ÐzLt½lî†W©åá‡ËJ“Sº¸4ÕÊÒTHßGÏ5ˆ6›WŽ!"É2 ©7eÜ%Âã¡|®ÁR-[ñl0†E…q “Û 3é)ó¿ËŠ t—†¬®rG ú{JÆ®+ ƒ"Ë-Ë€º(’Ùº!¾vpkéJËó†öÊÃj¨ŽaDcig ¯Ôµ4=ÙÉ…¤¡yÕ–4q %IüŽ};WÊŽÑò£°ú€ÂâbxÙÜ c›/|@«i ñ6uA® å¿£áü tœkÐ_‚–5î9H^sÈ ,QBÚ5Ú–¯/$ÜnÛŠ½Xh®6 (.˜i¼!iŒži¼!unëA ºÅ„4P2 eº; 2&i8°õ¯‰g=H‚O÷5€Òi—'Ø‘.ˆyFZ )÷z·}Òÿr){KæŽÕ…J¿ÆéìÛ9é­)FŠž#æ5õ¹äGÁÑÆ,!7a€J‹• ¶7ÝÑ.sí;+IxcÀDÍ>öj“ÏÿY|T> i—F€âsFïc7jiŠWÃ×»0×§añ¶?~Ü´\¼Wí¢ µÒp—Fï2‰Ñ è`)%&(¼K<¡Sq~R¾\Ñ}Õ¡ÀDs.eÔ—\xE¬a¡ûv»*Rêk¬eÒteÛTæ`ËQ: @TòÎ;è5×Àøi€–`%D‚ÀGˆÀ¥ÝÑHæzCU=Ò¢`¾†4ÐúÁ/©ÐÍàâ% P6 ÈrÑᔥoÅßÈ$¨ —.xN!ØsA³ªÁ}Êí’üùÄþG÷‰¤Ë ¡†qUCAÿC—pNÕ@GtÆtÃ;_žG@•4x†•¦}´ËñC wHø±ž‹Ð«jP¬¢³åÀ9s ¢ÓNM@Y;k|AØ¡¥4X*Uñ}V¡-ã‡î\)€ÆŠ\7>£¥ôVt0´j¤€üÚƒ× €a àóóóCæzCRÐÙ„4P2 eº; 2&i8°õ¯É:Þ$È’ ¤v…W·w…‹—°«.`Ò•‡"Æ7÷cÚÞ¾bbpc_wÅŸ˜cX¶Ö7ûL®â}gYãÉ¿Û)eÉà×OØúì< ".>«ƒ"ØYø¬šÚµ²6K¨¸–}SaÌ/6LY2bek‰º_ŸGM¤®sM¥ÝqlïcŒmßsÐ+[K)¶í›Mû¬0«ù•¥,©#•>tÛx@Q‘c4â>̑Ǖü-ñ ö0¶Ùuz×`pÁ’|e@—[˜VÏGÍa‡Ç<+IF°cªÖX Å®ûþ‚q­Üä* Ùô^Áó+?Á¡_)Ár×*“€‰ùV>¬p˜>ƒ‚¹ýX#;ï2ÁÓa|w½B½P8× ¼¨6mC];ŸM ÆÊàï® WÙ} ŸP;ÜoºëÕñÇ{w\Y=XYw·£‹ä¬¼‡1öi}ÊzhwáÝníàîâ1 á0»É¡‰áJưl-û¿à]'Ÿ›z÷×»þtMðË"Ö0Î5·6<Œ•Ñ òȪ²íÚ/k%÷Á²PŸh4þ–åÞ‡5+ÿY)ËŠXåZY)ë; €ãAi€â¹¨+!„4€>B$辸[‰îh$xCî’ ªz¤¡à ¹K‚†[ÿ²%Þ%ˆ+ €4€@Ú29OY|ûFÏóÅ 9˜Ä%AW5`× €4\Š@\ÿzQz.â¡FÙŠeO%÷ Œ=ÒR ™s ¢©÷ИøâÅÎôÆG³ƒkp‚Y«ÇΣ +çY‡ìQ5xE~åw¶Óq +Ð…9Uƒ%èG&fîYÖª”O„=§·$ö䊋ëÂ…³6|rÕŽÙbc¹ÐcÚh¤—\’å´´x×e½Ò«·¿]¿ùÄkñéè; ¤i€8ø5´+!„4€>B$èð†¤; Þ»$ˆªi(xCî’ ¤áÀÖ¿lI…7äF â  ö†¼ùlas„‰ÖƒÞŸnRÂ|é cY®ÜÔ ,’ eOÜŠ§Øj JxC6|ÄðÞä6;¯Í%´ˬæ›"Aî߯P¿t¹™˜ GF*zSÊÜÞo‡Dìäûçôdg=Ìv0+$H<9õ}XÙ4ì» IqÒ•lÓÞieoÈØ^aW·ògq¾õÖ&Z˜ˆå€2ØÓŸò¾=ÖÚH±,)Ån÷sta°vg%hGá~dUª]“´‹×Sn³èÝìÎè£+¶Ð…«†\ˆÕÆsÞRb,RŽòÄ^Û.,5ˆK&hß\|÷‹Úe{)Þ“Þƒ½!Ãle*Û¾»D{‹òĘ Ü!Æ: z4 S8+«=ŠŸº ½/€1nWêrzÁ¦x¹CÛ¡èeödŸž «7d®û£n¦XösOˆs1Å?m¼TÙÖÂs/9¿·zË·äbÍ5PнœG­40ãp$µs ˆÒ&°"AHà#D‚oHº£¡à ¹K‚¨葆‚7ä. BlýË–TxCn” à@i«7ä°j{•x§æî3¯zˆ65},Îû.7ÝmçÖ™ö†ôT½þew!O†hSÓDzgÏwTóÜ:YæýáêVè“> ¦«]ïC-0§´ÔHönõ-lrúòë škÓ¦Ó]¸T7%ºÝZvO?(h>èó<ìĉÁÇüzPÕ v›*1Ï€m]JˆË9ó§IƒîPœ2 ] lè\ƒqÐ^ÓP2|²"x½NÍéM¢'Ì5´mcÔýCtáÓüò’»‘çè²ûYR5”ù8Nt´XWža‚x¶é£ûŠªØ›Y×<¢ä¾-˜8“7d®ÑcìS£af۔ؗ·=®í,+צýÛ‚º¦/\-qÜ( Œ›i€Yùµ£çÁCÙ°Ÿ:Ò°%X ‘ ¤ð"A€7$0 ÿ¤©b"hÅIEND®B`‚saods9/ds9/doc/user/gui/mag.png000644 000765 000000 00000005066 11332353405 016652 0ustar00joyewheel000000 000000 ‰PNG  IHDR†ˆ­¶bKGDÿÿÿ ½§“ pHYs  šœtIMEÚæ ´ ÃIDATxÚí¹nM…{ŒYð°/F`„H@2Ã#‘8"!e^€ !!1‰¹G## $–a_löK÷ÿÜ®c÷H¿ÄtûÜ„«V¹º¦‹:§îVU{÷î]fé'ð'ð”X‘ÁÙÚí¶¿EMI–e­VËŸ£¿¦$˲Z­Öl6“í:NèÇŽ }zz:Ù¾Ñh„>11‘lSä]JÆÆÆB¿ÿþÿò^5†^ÇyêÔ©Ð=zz½^ýÓ§O¡ïÞ½;˲³g϶ÛíV«e.éïURðúß§Vÿ—±Ï"«Aõÿõë×Ї‡‡C¿zõj²=ǬÞËöÔ‹üv®Ú7oÞ$¿u®æ?~xÇåM°ÅSR.i6›ÄeµKQ»/â,Û³OÕO‘ѦM›’\¢„Ø]dœ;vìýîÝ»É>?žÜ5q<Û¶mKê_¾| ýû÷[·Î«ÄÀeñ”TÊ.á¾¾WEá5Ÿ8p`QN¢•Ûív“VzKûàÁƒÉ½?ù€ý?{ö¬'žcÚ%”/^$¹‡¿ñÞ½{^%.‹§¤:\Òét”ŸªWBñŠÅ=E<»lOÛ‚ØM¿û!Œ'ûäw ÒÞbÿÔÉy+÷»¼J \OI¹¹$G ÄM%½rŒò}­Zµ*‰ÅÄß“'O†NÛÐw¤¢äú¦h¯p<´ohÇ«èãø)ïß¿O>ç{½J \OIé¹$+–q¢Ú¨ögΜ }Ù²e¡?|ø0tÆ V¬XúöíÛCg¶û/Âäb:9cß¾}¡oÙ²%ôW¯^-Ú?…¶}†äѽ{÷&ùÌ«ÄÀeñ”TK(EüNó »?-_¾<¹÷'ÇìÙ³'ô$m)r }J³Ù…ódzÿþÐ׬Yóß7LöON"pÌ9›£'y•¸,ž’JqI‘x¸òe£_¾|™Äå©©©äßŽŽŽ†þáÇdò‡Ê»åÞŸã§}søðáä8‡††BòäI’Ÿ”_K}+•#—³ó¼J \OI¹¹D1QÉÌÌL£=:ã?þLb7íâ8±›6Ç·oß’XO×Ó§O“íoß¾äÚj*¾Âqò9mò\.?Í«ÄÀeñ””Þ.QµE*zÑçCÜ$'ßW®\™Ä_òý`ê¹ÊÁel†vý`lOÕºÌ3&çÑ÷¥âóªÖÒ«ÄÀeñ””žK&&&T½7yEÅÞU|[ù(ÄbâïúõëC_»vmèŒÁ(Þbüœ|À~h1ÎO[Šc NÅr”=W$§Ù«ÄÀeñ”TÁ.Qv†ÊßåþZÕŠ3§vλ}Îw­^½:ôß¿‡Îzò 6„^«Õ’ý|üø1iÓÇ $ß«ò}ùÝT.²W‰Ëâ)©—äÎP!¶*]á&±›¾ âòóçÏCßµkW茫ëi»Wè#ýùó'9òuU㢞+¡C~U>@ú¾¼J \OI鹤Ñh'z­$†RˆûÜó9}V###ÉçÄtÆEÈä->§Aì¦/‹¾/ò"Ç©N1¥/Kñ+Û0þÄL¯—ÅSRz.©×ëÄ;ú»Tî–Š‘gY“¡boß¾ }ëÖ­¡³Îƒvy‚XO¾áß’ É7ó¸Ø?Ÿ“ •Âw©ZE—ò*éûURF9}úôü‡çÏŸ÷”üK! es}ò¥Ÿ’n·[äëÅâsòqŸvÛç¸*„õ(äÂ;wîäÞ>ßvQµŸ¹ÚøÒ¯’+W®¢Î2—X<%KÞ›Íf¯ü‘‹‡¨Ú Öp3§O‰±w· Oð½ÔÉI쇜GŸÏŠ'Çpü*™ß„:9ŒþÀ\¬Å«ÄÀeñ””›K†ªëVX™»0iClÞ¼9tÞeþùóç$¦³=9†:¹{Þ=E¬g{öCNb{>§Ÿï♌ 1f£âI|WίèUbà²xJÊÍ%ÓÓÓôãs¿ÌCu 1”\òúõëÐé;¢ŸŠ~-:Eøœûz¶á»èw"W±¾]å“i‹(¿m& óÙÈ»ä3Æ™r÷hy•¸,ž’rsÉðð°Š+Q8{ãÆÐY«È½Ìß%óœb7sˆ“`,]÷ÎØ ¹„ö q_ÝÙ®ÎÞWç9ª»LÔÝb¹ºw¯—ÅSRn.Q‡q-`sÐv!70†O›ƒ± îñ‰¿äÖ¦(¼¦¡îÈâ9`ªV_ÙO¹;tC[¢°^„<ÊÜhòm¯—ÅSR»DÅÛÕ™óÊ÷5ç°ž¶ßK9@7LîQy_Ä÷;w&í!r$s®ør5†‹Ú%´uÔÝ”^%.‹§¤ô\²ÀAèããã¡Ó'£îo?räHr¯rp‰¿ÄYæqñŒ,â;yˆ¼E?}e¬ù¸víZèÌ7»pᢟEÝAÉßË6Š?\_bà²xJªf—(Œ#¨8÷Ýôqñn+Æ—œy¶9L¶é:V•Úc¾Mô‰Úiiäíma°„pn$õl ½•³u/ ­[’Á5Ü&‹ò÷Fª¯Y«·=³²Íy–_q]×mÛl NöIÞvàÇq?VM7©E' ŸÔÓ6ôg2 Öo–L/§²>wÔrsá™ÜÕéøy‡óµÂD›³¬f_ÁëØÙëŠ×ï_ MR:ÛAáÖ/½g>Ym“X W/m2¥8¹llá­ž*ÙõÈJz'ÄQ¤4ÇU)ïm¾½m3/’ùÑœëªzoª®•6ªIK®“_ðõxûƒÄözMã—¬FËa—\±Hí1Û¤té)!‹“\Q¶°E1ád\èkÙ»º$™˜xßX5e)4ù¶”~@·’ër[nÊÝT|ocÒ'uöÓ!Þö­&¦z{6 ƒ»7çwz¥ÓLéF¶JªÜGZBo.þm-ÏÝ$bNŸ7Í;­â©y/«ª68´É+ÐN®Uø^±Û„ÆÉ£¾)y";~+µ·~¿=ˆ¹öü1“2ôVÛ°B7¹À(ÿÎ;Baâ¯cqµÝö&\Ë=±xXh¼íí«=·£’&FO=¶âkWwÉ2†¾(¥ÏV‘B§/É)x«òÿ¤‚ZÍ»ÇAÓ©Óì×Ë+·úÕµà)ÚW´rýBóÔªÙOØ–XÄu=‡56ÏçÌý-zÊ"ç.Ì~ùOSJ÷ &ú‹UæÅEŤ@že)øÀ¤ÜêöèU§7ÑA§©ÜÞ]C3fúOº0,.±Ô‚rŒ mN¾•ðæƒÓX'¹‘çn4MޱJ³Íceõüb~î)4ƒÐßqû¾Ó}W _$ êMLKþå :•~ù!ÌÏw˜…Fð³ŸídX\Õ0qP8(œN 'P8 ø8ÇÙÛ8IEND®B`‚saods9/ds9/doc/user/gui/menutear.png000644 000765 000000 00000567126 11332353405 017740 0ustar00joyewheel000000 000000 ‰PNG  IHDR4—aGbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ9¹< IDATxÚìw@GÛÀgËõW€£÷r"¨(b‰]cAc/1±F}£F£ ’¦)¾æKˆÑ¨ILì¾Q,±#ˆ‚HÑ‘ÞËõº»ß«›ó@clÙßÊíÎìÎÌîÎ3Ï3Ï<mÛ¶ÍÃÃ#-=Édûùû!ZXXˆãxPP§§çùóçM&“··7‡Ã¹téRmm­««k@@›ÅÊËϯ­­•J¥Ýär¥J•——‡¢¨P(¬¯¯··· $"??ŸÀq?77·“'Or8yPÏÏÏÏ7~~~ _Ïɾ¾¾žžžçåå•––ŠD¢=z…ÂÚÚÚôôt¡PàààX[Sc±XÜÜ݃‚‚òóó+**œe˜«­«“J¥AAA ……·‚ƒƒ]]]Î;WSSãêêÚM.Çp,,ÌÓÓ‚`ÀåË—‹ŠŠ¨2ÔÕÕ¥¥¥ ??? à ˜Lf`` J©¼UT¬àóx=ÂÃý|}©”Ê̬̚šGÇÐÐÊŠ EAX,–Ëå€ììl­FCÀf³{öì)“É´Zmöµk&³Ç0­NÇb±|}}ƒx< ºº:%%EQÿªªª¦ÆFg—ÿ;ee•••.ÎÎÝ‚ƒ++* Ba÷îÝù|¾B¡())¹¯x|^HHè•+ ÓÛÛÛÓÓ“ËåóùüîÝ»³X¬¼¼¼úúz ÃÈ,R‰¤ °Ðú1Õ×7äåå©ÕjêÊ(Šzx¸‡†v‰D€ªªª”äd³ÅÂb±‚‚‚‚‚‚8™òôéÓ õÎÎÎ!!¡"‘èÆyyy"‘(((ÈËË«´´´²²R¥RiµZAÂ#"üýýFã•+WZ[[!Òét€ ÜÜÜ‚äA‰†áòòò¤¤$—ˑ˻ùûû³Ùlò^¿ýö›Z­–Éd†ÕÖÖòù<@ØÜ܌㘷·AäS€a8//Ïh4øûû§¦¦¶¶¶ÚÛÛ;::º¹¹Ý¼y³ª²R&“…„†þqþ<“Å 4………±8´{÷šššââb‹ÅBÞW „††z{{3 €N§;~ü8ãb‰„Åd  9{ö,†a~~~<ïÚµkB¡Ð×××ÕÕµ²²2''ÇqªyÙlv€¿¿J¥ª¨¬”J¥þ~~••U••‰$H.×ëõyyyA„……¹ºº¦§§×ÔÔðù|ggg‘HD5 Í3ŽPÀCÚ¶m›«›ûñ³©UJŒnš§Ë¼É#ûõ A-¬àN­…ïÕ;Œnš§ËÞ“`8†š1,ùš¢ïÐñM­*ºQhhhhhž.·ÿÛ}õôô×Êq3èut£ÐÐÐм¨`‹Ù¨Çñ‡Ïà@BYl“Õµ\„29 &€YÌf£¡“¹LÊdRGÈ©V4 €TÃŒ=uNÓP!@M<ÇhÁ5%Ù\ŽÀqLÛŒëš-,{®½#ýÔihhhže7êµl&"¸ç—Ô8†5µ4²yB† : —ÅàqîPƒY°æ–_ ȨÓðØ,‡õÐ\‹¥¥µ‘ÃÀJ€’n`AXûÁ ŽEU=(z°J£KÏ+Õé™(˺>aÒsMõ­z-àH­3ÒÐÐÐÐ<ƒ˜M6qtp ÝG*É njU!(ƒËf8H¥É…ã8€¡¥AQ‡å •¢(ÚA H©Ö±¸ü»w… è®Gþ€-qcnþ@?O)çFU Áô‚a„’M@yf@8ß…Ë·³ÎHCCCCó À`0˜VÖ³Ž#—Ëmli0; A.‡ÓÒª"‚ÅdvFžåp8­* %JÈÿÐ{‚"÷ÜûØöÎ7ª:Íu>ŸÇ'Ôª–®ÔB[[âÆGJZ€ÈÍ‚áV‚ @àÑöNV‡ï§$ u†!›+ÎEwª²êš<œ÷ tñ¶H& f2è4Êf‰/²6«u| ‚@‹Jý€c±àJÁhÈ$B‹ ÃÃUZ½JcÀpœÉ@ìù,&ª3˜ b H“R«ÕQ¶p\AZ½©Y¥5[îs/a3Nb C|.†!€öBž=Ÿƒ 0†áQo2”÷óý#ýzC³rò¨þsFG~ùë9FÛx.+:Ä­g7O™Vo8ûçÕC§.`eqÚ™³ ¶+‰ îÔåUx8ÐKk°X0 Òê]È™:,|@¯nŠ’ÊÒŠ>‡E„Vo<–š«Ójz…ø÷c²”mf~‘F«E|F jÕ÷Íœ:$lÂÐ>•u- -JJ:º;ÙG‡y³™ ­Þ”–«(¾Õ«G@w©ß‚YΧ]ûåØÄ@™lF:? ICCCó™õ +¯lO™ÈŽ×Ž_[CY!8# ¸§ÿXûr#(²åý%L6×:‹½€sWºëwÝs@¿›ËK&ªmhÚ’°W#.ÎÒé âë"©*γs ´rî»_^¿veÕ–½‘ƒÇÖ5Y/Ê!ŒMe¢¡L…ˆ½Â(sŽYðú!"@àõJC-.e ¤2Wš´­ºÖF3c˜à ˜ÉˆX(ÜRWa²`¡„ÁdÃ0„¼µ¾ÒŒÃ/€›Ì:•Ù ·`œ€`—/”0Ù\”0×U”)•yèZëZš›ìe^"‘¨®¬ÐŒöŽ®(”Õ¶wtc¢°ª±Êd4 (“Á`hTJ¦@$söÐkZtÊ&‘»æé&“yÇ᳕-&žPdÖ*M:•Ù¨Ã0œ€`„Åã‹™,6ÙR ´ÍÕF­Ê‚cL&Ûb6Yp ”º²Y UcµÅlÀ10ƒ#Š0ƒF§nÂÌfŒ“dz“0X”Á¤? š§‹É çsPGÇ»¡PÙLôÖµ?ÛŽïõzƒ_~(ƒ©×ë+*kP&KÀe98ÜíçY äVö¥¶×é ýaÕjuU5uʰp%1y–‰@…Ù— Ç#°;iˆÉ@*oå65Ôõ~ ‚ FSS×ÈáÛÝÕmšëËo\Aß\¶‚ëÑÓf“IÝ,…•U͸È;²ò„†Q& Ôb-~î,N‹©VÕbä2ؼ¶e%€™<¦= ‚RÑAL@l{F”É`² Æ,fŽØEÀdÃа8fÁ ¾+u™L6Œ2Ì&‚+uCQ¡€m'u—À0bÂÛ^ÆCP„Á$À»@0# €2™|G¦‚`˜À1{¾‚‘Á½¼Å ->îŽR‘ðÌÅ«¥•ul¡!L¾ˆ€_ ß“ù(ƒÝsÇ Ä8 .A€˜ÈŠÀ(ƒ/aA@ÈÌ0Œ2 Ÿ3`!W<3L¥% Í3 9Ý?çd4cž¡QkZ”Då2Yp¯‡ä¢Œ{å2ãÀ',Ú:™Ù‚;ù„8ùü•ë>D®sš0~ìÙë5àþ9.³Q[­l×Pµ ŽÄdsokŒu7ªMF£Ñ‚\=“Ão·”(“eFáÞñû<ýPS ú+®yÛ;,6ƒuWe²þREùöémLÎ_š&×Î6ŒzU£FfÇvs67·$¥e¥\Î!`Êd“.Œ}Ím}÷ûJng번  &‡G444ÏžpB,nÁ°Îc%Âh2ÁÈÇ-Ž¢H§r™Í0‚@0bÆ0 Çäá¹p7š,0‚ÚÆÖc0PÐfÎIàè €÷ƒ®ÅH,@Ày~Œ¢¬ñrV®VÙLŒ L6Ç·c0ÙE³¥¡¡¡yqa0Xzƒ¶±±™ËíÄ–8ÞÐØÂæ ÖéµMMÍœÎl™aMÍ­l®‚ ­N 7µ°ÙÚ2£¹UÅæòmáæää`ÿopwæÛKÙ|x'·(¦¡¡¡¡1 z½€¿–â /ü_¯×Æ'v»3gÎÔ××Ój Í߀îFihhhhž1áDñihhhhž=͉–M44444ÏœæDK'šgM8±é@¥44444Ï(Ú•=bcc³³³m.X° ¸¸8%%eÇŽ®®®§4§OŸþú믩Ÿ‚$&&R?üñÇlذaçÎÕÕÕ¿ýöÛ7V¯^=a„E‹uþ.×®][·nÝ´iÓ^{í5òÈk¯½ÖÐЈŒŒüè£þÑŸ8q¢µ÷àâÅ‹Çÿ´RRÒçŸn}䨱cUUUo¾ùæˆ#–/_þw.þæ›oÞ¹sÇúÈüùó'Mšô„ë8}út•êîšó˜˜˜7Þx£3¹4ÍÔ©SÃÃÃãããÿ~0 7nù÷øñã/^l“ ??ÿÝwß8qâÂ… cÝùå—_~ù…úéààðã?v2ï{ï½—““säȑǻX°±±qΜ9QQQqqq?ýôÓþýûׯ_ß³gÏéÓ§s8œÝ»w“/áöíÛÉôÛ·owww¯ªª²n™µk×8ðîþöÛo:uª«ÞÁƒù|~gÒoß¾ýرcŸþy·nÝ^H™QWW7wîÜþýû¿ÿþû€Ï?ÿ<))‰|L6)7oÞ|áÂ…~øÁÙÙùQ„S—Rß¼y3==ýÂ… €:(‹OŸ>žžn0þ~µÓÓÓãââ&NœØölyyyzzºR©Œ5›ÍµZžžÞ£G.ÝE©T¦§§GEýµ+IVV–^¯?þ<—Ëý§mFF†³³óáÇɟ‰ä)¾g ééé«W¯ž1c`ìØ±#FŒ8sæÌ7ß|cýˆØØX“ÉDþ}öìÙµk׎5ê WpÚ´i©©©iii€óçÏoذÅb½þúë'ééé,ë±cøðáµµµ'Ožüã?Ö¯_Ïb±æÎk@¥R¥§§GDD<ÞêWTT¤§§oÛ¶­ÿþ†EEE½öÚk”OÿùÏ Ããj “É”žž.‹©âµ¶¶®^½JöþçÏŸçwfÍšõúë¯/^¼øå—_NJJ5j”““ÓŽ;_~ùåÂ… ÷íÛ×ÕæZ±bÅŒFãÈ‘#Ïœ9Ó¥NÃ:‡sòäÉ#FŒx´îø¹Àh4¦§§S›§§§ëõú¶)oݺõwä£lîéééííííí››½oß>êTUU•›››\.÷óóûàƒm‘T*õ¾Žã©©©žžžqqqÔÕfÏž=xðàŠŠŠÙ³g~úé§]»vuþúƒ Úºuë¶mÛÈaÚØ±c«««“’’¢££W­Ze2™6nÜèëë+—ËÝÝÝ‹‹‹kjj\\\æÍ›GŽ\\\’““ÁÁÁ}úôy„ 2™Lª‚Ÿ}ö™‹‹Ë… zõê’‘‘ááá!—Ë}||¶oßn6›G]TT$—ËfÍšµ{÷n¹\îå啘˜ˆaXss3Õà«W¯~´‹ÅdaP-///))‰ŽŽÞ¸qãÿû_—#GŽLš4ÉÕÕU©Tvé²®®®ÞÞÞžžž¥¥¥ëׯÿÏþ3oÞ¼E‹ùûûËårµZm±XöîÝëíí-—Ë===“’’pïѣǵk×är¹¯¯ïG}G>‹‚‚‚®VM©T!‰\]]a6 :î•W^ ”ËåQQQÆl6õÕW>>>r¹ÜÃÃ#77—òb5™L[¶l¡Þ‡›7ovµ Æ ËÏÏ¿víš··÷ܹs ¦L™²dɲ|}}Õj5•X¯×/\¸<¨V«ÿüóO—>ø`Íš5...W¯^íjœœœÈçk±Xª««Ífó·ß~KU633Çñüü|ww÷eË–mÛ¶ÍÅÅåèѣ˖-‹ŽŽÖjµ×¯_§ÞÉmÛ¶™Íæ &¸¸¸N™2E§Óu¡ÇávU‚„BáÕ«WgÍš5qâĸ¸8ooïÄÄÄ+W®ðx<¥RÉ`0D"‘L&srr2™L]b£×ë+++ûí·êêê²²2FsöìY—O?ýtÍš58Žß¼yÓÝÝ|.[¶l¡FWz½ÞÅÅ…4òÉ'...éééjµÚÏÏ|Ÿ/^l0¶nÝ——§R©¼¼¼ÈSK—.ýûc÷gœÚÚZª/еî‹|}} pîÜ9??¿?ü°“ÝÔ£§[·n”——c¦×ë­ß’>}ú¸ºº*Šøøø¯¿þšìý¡’………555111 Û¿?%º ƒ»»ûÞ½{sæÌ!%Gç?ƒa±XÈÑÑh$‚Åbéõz“É´ÿþ-[¶ÄÅÅ) __ß>}ú âèèØÔÔTWWg±Xôz=Žã¥¥¥:îÑ̘F£‘¬`CCƒÙlÖëõ&L‚åË—OžüðÃõë×ÛÛÛ?‚$&"%%eöìÙ¯¿þúǼeË–C‡íÚµK¡P †¡C‡¦§§/[¶Œ¬ËСC'MšT^^^WW·téR…B±~ýúÿþ÷¿žžž …"(((**ªóX’ßÿ½GÆ 3fŒÏåË—/^¼råÊäääÄÄÄk×®Þ}÷ÝäääƒÆÇÇ+ŠÐÐÐAƒQ]ÉÑ£G7nܸfÍ…B!—Ë£££I­½KÀf³IK5‡ÃùòË/÷ïß¿cÇ…BaØ Aƒ¨Ä7n<|øðž={ …V«6lù8¾þúëcÇŽyzz>‚*SYYI~M ÃÓÓóÌ™3±±±d ÷êÕkøðáõõõ  ™0aÂ7ß|£×ë1 3™Lz½^«Õ<¸G …bùòå~øá‰'ŒF£^¯óÍ7ûí·óçϯ^½ºó…‘ÉdÇŽS«ÕuuuÔÁÒÒR†/^¼ˆã¸ÉdBQ”ÜÉdr8.—{éÒ¥ÖÖVrø8yò䜜œÈÈÈ®êñçÏŸg±X§®®nüøñd÷µk×®þýû÷íÛwÔ¨QõõõóçÏ5j”B¡X³fÍÆ=JÉNggçÖÖÖêêêæææºº:‘HÄf³l0N:µoß¾œœœ~øê" 8uêÔÏ?ÿœ••ÕyƒêsZ­&; jÌÚ§O™L¦P(6mÚôí·ßîܹÓzdPTT”˜˜¸aÆmÛ¶u²)ÐG(Ö'Ÿ|‚¢h·Ü+o IDATnÝzöìÙö¬N§KIIQ(\í£G¦§§“RdÛ¶m”²LvÁ¥ee2™·÷_»)Z›ø(œ’’¢ÑhŽŽŽ»ví:tè–-[D¢»{ì¾úê«:Žzw»* Þ{ï=5±ÿ~F“™™™’’RZZÚÉ« †”””7n}zTTÔØ±c­ç8ù¦äryIIIJJ ie²¡¨¨(%%…š»zòxxxÄÇÇ;öòîÙ³'111--ÍÑÑqçÎ'NœÜ¾};%%¥¥¥Å:åСC—/_NÎ%<”ãÇwþ-µ!55ÕækêX/wwwOOO¿xñâŠ+~ýõ×wÞygéÒ¥ööö]½oVV–Í-Z4nܸŸþ€¢hrròåË—SRRŠŠŠ¬“±ÙìÇGDDÄÅÅEDDüúë¯;vìïÓ§Oyyùøñã¿þúë]»vÉåròÓôíÛ·ªªjâĉ[·nݽ{wPPЋ$œòòòÈšZwõz½þA¿··÷¶mÛ(£SÂ)¹¹Ë¦’½{÷ÚÙÙ‘R¤íY•JuàÀÀôéÓ¡Úo¾ùæœ9s(;á?ѲC† ™={vff&ŸÏojjJLL´ÙN833³¥¥¥wïÞ] uww÷ÿýïäßkÖ¬lÚ´ÉÁÁÁh4~÷Ýw»ví4hPç…N§£üѤÈüùóÉ)ú°°°ùóç?~üqÕôرc|>ذaOë:}ú´Z­ž:uêŽ;Þ~ûí'NôêÕ«m²²²²O>ù¤´´400t±!;;[£Ñ„‡‡‡‡‡Ã0üä+2qâÄG“L€uëÖ1âÝwß=|øð¹sç¨Îð      &“ù$ë"‹ PTT5}úôÂÂÂÖÖÖ˜˜˜¥·X,‡vtt2dȦM›Ö­[÷Å_ 2¤_¿~¼ã7Š‹‹ •••••sýúõ‹/¶Uôøá‡­[·6ÌF8ø|þСCËËË!êÑ£‡§§'€T4,X0qâÄ>}úlÞ¼™J¿}ûvF³hÑ¢‰'öë×ïÓO?íÞ½û #œúõë·gÏÀâÅ‹Éþ‡T§¨¾(((ˆ´L<2ðÖòó·Ð2™,!!á?ÿùO@@À# mDNNΕ+WtöâÅ‹]ˆŒŒ,((X²dIŸ>}ÚNþÏœ93!!aÀ€¤Õ~üøñ999‚¬X±âÚµk×±Š|´ñññ!!! ”sWg>õ„„„•+WóÌÏ?ÿüóªU«Þ}÷ÝwÞyçi•!>>~Ù²e¤Õ»íó"§š:tõêÕ£GNš4)!!Áßß¿íu¦Nš0hР€€€®î={öl‹õÃ?ØW_}õóFŸO?ý´¥¥å³Ï>#ÆÄÄ$$$ >< €··nݺpáÂ?]//¯7Þx#55EÑ„„„¤¤¤ªªªM›6\\\ÆŒ“™™ 8räÈW_}¥V«—,YBZM† öcS§N]¼xqÉ’% ›6m*++KHH°I†aغuë¼½½¦NjsÖÁÁaåÊ•™™™ä,lïÞ½I­t÷îÝÿýï'M𔑑A :»víÚ»wïW_}5qâÄ´´4kÇãGGÇ„„„åË—Pj1ISSÓ‘#Gºt5ôñ.66ö³Ï>[³fMQQAÇ„‹9r„Ô`Ž}ë­·NžþøãuëÖ………}ú’iFŽINA×ÖÖ^¹r%((( àòåËõõõ£Fjk9sæLMMÍÌ™3d*9yò$—Ë¥¤ˆuH£hJJ Àd2Që„ÆßÚÚšššêååÕ½{÷ëׯ———¿ôÒK€‘y{{‡††v©Á+++mTï±cÇj4š””.—[PP)“ÉÎ;GD—>°¶“4ݺuS©T¤¸EQôå—_¶)CÿþýÅbñÉ“'y<ÞK/½TQQ‘êíí}ñâÅ–––qãÆuUqùý÷ß)Ÿ+ŸêM&C† ”””C¢èèèëׯkµZr°UTTD™Ñ‡þë~‚°yLÙÙÙAÆŒÓÔÔtéÒ%__ßàààk×®‘MÄ`0FÝØØ˜––ö_€|“ûôéãääD–A$ 0 ´´4//L3xð`@ ÓéΟ?ïêêzåÊ•÷ßÿûï¿wuumll|ùå— CRR%Ø|||.]ºÔÔÔ4vìX­V›œœìîîÞ¥‚uü5ݾ};??Ÿ²Àóù|­VûÇPÙ{öìÙ%_$Ò‡‹|“ƒáìÙ³ä)² uuu£FÂ0Œ´|R™ŒêôŽ=zèС 6øúúRjéæææ‘ŸŸûömòM>qâ¹ý‡‡GWW¼<³¯Š‹‹ i!'_×!C†p8œ“'O’iÈ79++«ªªjèСþþþžžžÇOOO'=QÛ^¶¨¨èÒ¥Kåzž‘¨šëÊò2º&œž/*œþ *œhhž5L&ÓØ±cCBB¾üòË„„R8M™2…n™¶ÃÙ¹sçŽ5ê):ø<¸¸¸xzzRÎGíÒV8¡+ƒÆ8v–n>š- ãã?ž8qâùóçÕjõÊ•+I³5“'OŽˆˆXµjÝOtkÉqgÀ¦‚†æ_ A}ûö%ÍŒAžŠGâ3Ž››[~~> Ã6ž½4¥¬¬¬«Öxʀ膦¡¡åÔÖሆn¢Ç¥š?ŠæäŠÂÆ¢þDA¨¯·>‚¡¨™ÍÆŒFâ N¡I ¨¹úóOEé—òŸB,†BBèf ¡yAE&]-¼5!vî$î_I`ÀôÄ‹q×iéÀœ~¹þ¹1ìK/A÷¢VÓÐм˜Â on/„pºÛmÍœ î­üE„Á`XÌfK²ýn—”h4š˜6LÿètÄž=t3ÐмøÂé«45a›7»¸¸L›6n"š 6›½ÿüõK7«ÛN/0:Îz;yšgŸêêêË—/“755‘uà–z½¾ù^¬'nnnô¤&Í‹ Å€æ9@©T’Š/ªTÊ0™Lõ÷Gù 'ú­ ¡… ÍS&((ˆÜ\ŽhlÔ ‰¢££ÿMQTT ×ëé·‚†NÏ7·nÝ*//7›ÍäЛËåÚìú•››«Ñh¨ŸNNNÔ6b$iiiÖ?ýüü©ŸjµšÚ·$<<Üzº¾ººÚz0Š¢‘‘‘Öé ›šš¨Ÿ"‘Èf3®ÌÌLj»<€»»»»»;õÓh4feeY§ïÖ­›ý½0€ÆÆÆ[·nY'èÓ§udåÒÒÒššêgW›ˆ ›ZlšH¥RQ{ǵÛDUUUeee4‘Édºëij4poëxú/!//ïîô Í‹-œt:Ý‹]C©Tj—Á`°Ùlªkc³Ù¾¾¾Ö]?Çc2™Ô.—k#*Äb1 ä·=Ab±Ø&½½½Édºk†BQggg뎆a‡C|™L¦§§§uWÎf³Y,µA"‡Ã °vî·³³CQ”šB³³³³)€T*ÅqœÜ‚AGGG› ÿ|>Ÿ*ƒÁpss³f]m"×AÁ0,‘HÚD\.צ‰è“†æ_-œJï”upúÆo¾ù¦ÍA‹µ{÷î™3g2äÃ?|Æk(‹Åb±N§£úwë~Öd2 …B›,Ö®F£Q*•Ú$ û}RiÀqÜ&Åb¡<1 CQÔ&u,KÛÅXÖ;Frwk¬e•Ùl¶¹>ATp‡a¸ã°Ùl6›ý ³‰p‡ ¨ã&b0”bÊ”)æÚÚ#¤§§§mÙ²zõêÏ?ÿ<11qÇŽí>ý¹sçÞ¾}[&“ÅÅŽõÖ[Ö§~úé§%K–ˆD¢_~ù…<òÍ7ßi>e2™ûöíûàƒbccÉÍÎûöí;xðà³gÏ.\¸pÙ²eÿrošÎûùù>4‡Ãq¸ÇĉÃÃéSæwÞ  “Éd%%%t›Ò|0cÆŒÆÆÆk×®¹¸¸„……ùùù}øá‡Ööj‰DB‰êMF$??¿¤¤düøñ¤Ú”°cÇŽ¨¨(ATJk½–Á`ÔÖÖR?© ’¦còo;;;AÁ0Ìd2ÙÛÛ»ºº2 ƒÑV¥¡¡i_sðùMT__ON¹·]Ÿûã?îÙ³gÇŽ“'OîÕ«×!C¬g¶ŸZ[[i§ç ëp½[·n]°`Afffrr20€<¸dÉ’[·níÙ³çàÁƒb±Øßß?00ð—_~¹qãÆ¶mÛRSSGesͺº:Êy$88¸cmJ)“É\]]ɿϞ=;|øðC‡u\ø©S§êtº½{÷~ñÅŸ}öÙW_}Õ³gOú™ÒÐtA8u&Ñõë×·nÝ X³fM» ²³³Ùl¶V«}6+Y[[›””ÔÜÜL?ï‚ÆŽÛÚÚúÆo,_¾}zìØ±rá³F,÷ë×oõêÕ}ûö¥$SÇðx¼… îØ±£ƒ4—/_^½zõ¶mÛW¬Xñí·ßÒ’†æ‰ §¡C‡&''ïÙ³'99911qãÆt›Ò<1f̘‘™™¹yóæ#F0™Ì7fee566Ž7®]I“œœL9”ÇÅÅÉd2‘H4mÚ´Ÿþ¹W¯^ÖÓBz½žJ9bĈ˜˜ê‡Ã™3gNÇ©ÿþ£Gþå—_Èð€:îóÏ?§Ÿ ÍcNGޱäµuëV½^/“ÉŽ9âää´iÓ¦òòrÀ¤I“ D·)Í?Á§Ÿ~ªR©`Æèáµd 22ò›o¾illìß¿?AAAAdb///ëìAAAGޱ>"È?‚ƒƒ9âááAúæ›o¬ÝgȈ «V­zíµ×^^^GŽ¡&¨›7oV«ÕÔOÿ 6P‘A&Ož}út'—’’’… bÆb±ªªª:TPP0þüõë×/]ºÓÐÐPPPðÓO?}þùç¾¾¾eeeóçÏã7^~ùeFSRR’––6yòäU«VÙÙÙ‘ýéÚµkÿøã§µÁ]aaá³¹¸ûÉÃb±yhL) 6›m±XlvÚ$JªSðòò*,,ìäɉ4÷Ði'ª««©Á\YYÙƒöü|P …õO2Bq2˜Ãá (ªÕj;ßD4Ϩ-L§QýêY[[{á‚ ›Ä™Õ~I C­=diiiA¶Í•’’RZZÚÒÒBþÅ­W½½½e2ý¹’TWWK¥ÒN>;;;Fc#x< Ô®_XXÃ0ŸÏW©:Û888°X¬Ž¶«Õjk'‘Žc›=H:ÚÛÛS[Mv,–¨ô|>ÿÎ;´pzî…“Á {á+É`0´ZmPPÐ_ÎÙgVÿ¥¿5¦ 2 Ö{@PäååÕÖÖ>t„èããóᇎ7nñâÅ Ô¬Ÿ~ú)..nÚ´i6>QŒ3fذaí.ö?~¼½½}FFFFF†N§³ÞQ¢c,X “ÉŽ?N…6ïÓ§ÏôéÓ×­[7lذ={öÔÕÕ}õÕWÖQ·Ÿ}š››é¾Æš¶aà;P÷Ûlmmµ9Ã0—Ëm+œ|||ÔjuCCƒP(d±XÔš³;w¹µN‰¤µµµ³›L&3›Í’1¤)Þºx<O¥RYÙl& ×0 ‹ÅâÆÆFê¬õÎd]ÅÑÑ‘ŽÉû '±ô_1 ‡aØù–Jqõ¨õñnAÝd;Ø·yoÙ²eäœÓƒ‚„††Ž7ÎúˆÉdúú믽½½§OŸþh¾páB\\\HHH```—&„ÿ÷¿ÿ}ôÑGãÆ³Þ¢©_¿~ýúõ;räHYYÙ²e˘÷ŸüýýÉpi ƒ‚‚û^‹‹Å: -…»»;iXƒ ÈÚ Ð®óúCõ9ÒÉÞÞ^(’KP:¾BÛQAÖilJe#êììì:³ˆ»“…§y¢ÂéßPIr–Çãù½>Bà›_¾ûá‹–¿ù )™:?!ÜV®\yîÜ9jª«\ºtiݺuùùùï½÷ÞèÑ£»t³gÏ–——Ïž=›4îQ²9""âÿþïÿ¯½öZÇ®}UUUÛ¶mk{|Íš5G±úGŸàã}@Ï/7oÞ|’áNòòòHõH©T’®@2™¬µµÕÉÉ©¼¼¼í°ÉZ‰ir ŠÇãéõzWWW£ÑhÅd2=ÔÁZ½ÃqœÔuD"‹Å²‘¯8ŽwéµiWˤyZÀÿ’zZ,­V 3Pïú½=à6º¯ü­I™¸ó’iôèÑS§Nݶm[LLÌ;wvïÞý ”‰‰‰jµzëÖ­111»wïž7oÞ€Þÿý˜˜ƒñõ×_·›ËÎÎnëÖ­YYY§OŸŽ5jT|||LLÌ_|ÑÜܼjÕªFÓ1÷èÞ½{XXزeË^}õÕï¾ûîÆdl‚¹sç8Êâææ¶~ýú”””˜˜˜ÄÄÄwß}W.—ïØ±C¯×øá‡Ö+Fß{ï=ÿyóæM˜0þ`žø|¾³³óß¿ŽµáN"‘ˆÅb•Je6››››ÁÛŠI¨ÕjZ[[—¥N§kk“$½U»Ô Ãfù6Í3­9úhåÊ•^^^üñ5G"‰¶oßNN#âëë«Óé222Äb1àÓO?•Éd cúôéQQQvvvdô ÒøîããsñâEòjÖÆ:òóËÈȰ>"“ÉÆ§Óé`öôô '‹çãããèè˜àîîàr¹´YˆR IDATóæÍ1b™ËÙÙY DFF^¸pÉdJ¥Ò—_~™,^ppðáÇ CgBÕÑ<#…BggçGž€ñððhnn¶‘¤æDúVX{:tÒ]ˆÂz6‚    ß<D"‡Ã¡Üÿ¬iw|i2™îܹó ÿÀõgÖŠæÉ 'Ç?þÎ;ï,_¾|áÂ…óçÏ4hЕ+WÌfó­[·BBBÌf³Éd"×&$$=2†a”MœZr¨ÓéÈ¡Š¢,Ëd2•——ߺuK­V?±xᆩÕj>Ÿ/ðvt 3999999Q€ê—¥R©õ\4‚ Ö]¶L&#ÊÚ†Ìpvv¶Áq¹\*£u‹E·Ž¤þ ÁAPÛSÖ;Ú‘gÍfs||üï¿ÿ>oÞ¯!š3§OŸ¦Ý|‹e½¦Íb±X»$‘ù⥥¥(Š’^3‡ÚF„¤°°ô0‚ è±Ï=FZ2½°ÂÉÝÝ}ÆŒ—/_NMMìÞ½»¾¾ž ÈËË{Pìá=z¬_¿¾oß¾6óIEEEëÖ­;þ¼õÁ§µz†æyaß¾}6Ž^4¡±±±m0Ц¦¦Ç¸˜W,w>Ž j(""‚´à=ÈHC §vÉd±±±!!!±±± ,Ø´iÓŠ+Þ|óMò¬H$ºqãÆ™3g-ZD9w9;;¯Zµ*==}Á‚}ôŽã<oóæÍƒaÁ‚+V¬ÈÉÉ!u©·ÞzËÛÛ{õêÕ!!!ô“ ¡ù'pttl;ÏÔ%˜LæƒÄ†Åb¡VVtrv‡Íf“=€Éd‹Åz½¾oß¾¤S_·nÝ:Î+‰lVSм¨<|ÎÉÕÕuݺuä+óæÍëÑ£ƒÁpvv>yò¤T*åóùýúõ  ¬ÁÒ¥K©Uœ‰dÔ¨Q‡&µ(GGGÒÓ:**jÏž=¦_¿~ô“ é€ØØØv#óÒ<•JÕ¥…>íJ 2ö±D"½ZXXèààÀápê½m6›I}N§ÓÕ××[,–€€‚ªÉuuGZ>Ÿ/ iãÞ‹)œ@›5:䨇’(ÖËtHìììÚÊ›v˜­·1¥¡y´·Þ£ñ÷ w8Ž“.6.éÁÁÁ7nÜ ÿvrròöö.++£\ø|¾——W~~¾ÍÕ8Nÿþý©½Éâ?><<üòåË!Il–Ì[—¡]t:½né9å±9D¼öÚkMMM”Cù3 A{÷îÍÊÊzК £Ñ¨T*©ñ&ŽãJ¥’ryê½^¯T*q'B©Tv~”§ÕjÛ.F!¯öÏ­ï±X,J¥ò±‡¥yj3 ?rÆLë”ӄ;PEEE”®¾¾þêÕ«Ö{ljµZ[Ÿ½ßðz½>)) 0X ÀÛ½ÿmÝÙmîÞî)Œã¸Åb¡ZfàÀl6›ü»m([šçOsê ?þøã³_[‚ *++ÿøã@^^ùM¶]£·uëÖM›6íÛ·oÔ¨Q€ÚÚZj'ÜŽ¯¿bÅŠddd¸»»92""âÛo¿íLÁ&NœxõêÕúúzëÂÄÆÆîÞ½;))銌––óöÛoôÑGÏøƒÓétSÿKèÀFçë뛕•Em•Ò%ݨ­ŠCÉ-ÿ‚‚‚vOQâ‡!¤ÝžÏçk4‚ `¾o'šQTà 0 ãà­¿®ö A˜ŸŸ_qq1ƒÁh;Šò÷÷ï`I/…H$b2™dLØšš ÃØl¶Á`B¡°ÝØê4/”pz.¨¨¨HJJb±Xb±X£Ñäää@l#Ÿ¼¼¼œóóóû÷ïÏçó/_¾,‚ƒƒ«««©•[½zõâp8/^ …nnnäWJº;_½zÕËËkóæÍäÌmEEÅíÛ·É\‘‘‘G§ÓQãD??¿Î;)555QHhh¨X,NKKƒa¸oß¾€ªªªâââ   ''§«W¯’ªž]=*++KJJär¹££ã•+WL&SDDDNNY¼ªªªgÜQª¤¤„ŽxFÂçóQm7 dQQÑ#H¦‡Žç´õWïÞ½³³³ÉEKööö†‘SSݺu+..V*•R©†aòÁq¹\£Ñˆý‰þäà @ç¶Þ%7Btuu¥Öc±Ùl ÃÌfs»"“¼—Ë¥¢KXÇ®%¿_//¯¢¢"•JÕùÍiháôR^^ž’’Âd2CCCCBB***233É=ÈCBB¬íÓ¦M»|ùr||üðáÃCCCçÏŸ1gΜ 6äççwëÖ-55uÁ‚ .œ0a‚¯¯ï!CvìØFšæN:5jÔ¨ &DGGóÍ7ëׯ/)) LJJZ¶lÙÿ³wÞáQ”Ûwvg{v³%ÙÝô°éACïEB‰Ò[€ Š ˆ¤EŠÊE¸HQ@¥^þDšôHƒôº©Û{ùýñêÜq[@I`>ÏfÊîììÌœ÷œ÷œï™;wîîÝ»wïÞ=`À€‚‚‚ÈÈÈ5kÖ´åø›››·lÙrîܹ„„„›7o¾ôÒKK–,IMMe0÷îÝœ={vùòå»ví‹Å ,HJJ2 ………Ÿ|òIVVÖš5köîÝ;~üø 444\¿~ýüù󀂂‚tpãÔ£GØ'Âb±ØÊ<‡TTTˆÅâ'¥«Âãñär¹+ 1‰Äãñe^ù|¾§§'ÇƒÆ ßöâÆ¼qãÇ+//g2™Z­–Ëå677[¦X@¯0 €'a:;¾R˜Ífëõz__ßššG#Íápär9}ºúRŽâ„qzj”––^¿~D"uíÚÊýýým6´O‹¥{÷îîïöììì£G®^½zéÒ¥ãÇÿý÷§N õ‚,^¼ö´-//OOOÇâÚ7oÞaœ:‹%$$„L&F»¤;©T ‡fv™uýúõ LOOçr¹,+%%åìٳО%%%Á´xXÖ.‹¡ej#Z­vÁ‚2™lÙ²eÍÍÍ7nÜhãŽeeeiiiL&355µ  ÜÉdò–-[222vìØ1dÈäääçámo‡Óg‰`mMìð÷÷ÏÊÊjWU“¯¯oCCfé¡o! ÊûŸiÀËËK¯×Ã?ñæÚ,Ë€Á` ( ß¿G÷îÝ3#´Cpê?!„?»…f³Y§Ó………µ´´444H$¹\ ª°Bà––Ìü8Æôˆé¥NÇs‘I µ/­V+•JÅ+¬Ðh4Ì29Î$¿÷Þ{ÕÕÕgΜÁ'éEDDŒ;öÆ;wît3z6mšãÂ¥K—>\­Vÿúë¯^^^cÇŽŒŒlû·Ëåׯ_ ;v,¦‚Š ÈСC›››oÞ¼Ù¥KW-ŒeË–9ÎoïÚµ kfHÐyijjrSxàØúË×××h4BcF¥Rƒƒƒár•J…¿¶ñ2J¥«±…ép|,‘Hðİm°â§ÒÒR³Ù ꘠_åT7¶It\n4kkk¡iiiqtu:vØÛ)•J) Š¢Øy èÐÆéîÝ»ñññ7n|ì¼0ûäÞ2ÂÂÂX,‰D‚™Üƒ ZµjÕ§Ÿ~ÿù矿óÎ;Ž’þ/¼ð¸qãÖ­[—Œ92--mË–-ñññ_~ùåºuëÁÉ“'¯]»¯V«§L™²dɘÑà”©S§ÆÇÇÇÇÇgdd|òÉ'ÇŽ‹‹‹ëÓ§Ïĉ[ZZ$É¡C‡ð»ìÞ½[*•öéÓ'999!!aÓ¦M3gΜ9sæÊ•+ €5QìÙ³gFFÆþýû-KBBq3@æÌ™=æÎœ9£¶¶¶¥¥û– ¼õÖ[ømÞzë­§räX?O§Øl6»\™Læëë û™L&ÌÝ1 ®²þ Þ3£Óé!!!UUUxcƒUMÁf¤ðussóµkÖ«¸“&™^}ÕIlV­V7448½…U*´sz½þ‰×ÿUVVZ,³ÙL$—wްìW‹ ‘°Ñ¼¨T*›ÍÖjµ°hEÑææfA<== ƒF£a2™Xj@Gˆ) ‡C¥R¡T³Ífse™ çÎÃîvƒ±dÉ칃¢(‰D’Édø:>@ðÝwßY­VEá* …²jÕ*L*î5`ÀÁ‡sÅØmf—Ñþá‡â‡pZxòäÉ …2kÖ,è Z­Vƒ‘œœœ™™ ·ôöö¾zõ*ˆïÞ½ ’¢¢¢ìJúöí{çν^­¼Î­V+™LÆæo Cyy9—Ë…ÝÓáIˆ-))‰ŠŠ*,,äóùd2CLLL—.êêLžž@.Àu_úË}j7½„ Hdd¤{%÷H$³ÙìÔæÙø£÷B§ ëwíÚu̘1ƒž={v]]݆ ¤R)œ;‰‹‹ƒíNŸ>-•J8С¾­ÍfS©TðÒ·Ùl:Îý…ˆ¢(¾ã,*„ÀÔ>*•jW£N¡PàZl™L¶Û ®¥R©Ð*`kí>¿ŠJ¥¢(Š49T*Õf³ýöÛo©©©xxðÝH$Š¢˜„oHX&ÈòåË zôè-¹råʲeËÆß³gÏ¢¢"³ÙL"‘rrrΞ=k4e2ŸÏçr¹ð· R©ýû÷ݽ{wGø:XZǸ–ìm ‹ÅÂ,v)^ºt ªÞa{AŸÛ×ׯÄb1Fó÷÷ojj2<n™““ÜÐÐE¥RáEH"‘¬V0bøé'ûCòððp“+kµZÇ2jkkÝ[&‚Îç992cÆ “Étùòåßÿ}Ô¨Q;vì ‰D·o߯„ š››óóó:Ú†ù< Ãh4>_V«uçΩ©©ÄÕüÄáóùƒ®©©IOOÏÉÉY¼xñìÙ³étºZ­þì³Ï:´~ýúqãÆÁ/_¾ì´åyGC¡P(¸\0b¶$21ñÆŸùŸ±EQ‘·w• ­ àãd2šÚ®s@¥RÛ¢¡NðÔŒ“¢…ðv œSQQqìØ±^x¡oß¾ØÂ>úúLxËÔù8ydf¼½½ñÓ<OO«Ñ\(CòºººŠŠ ›ÍÆd2Ùl6[$2àÁªHD¥R‡GEýä¼ à­95›Á½0¢ñÎõëdœÂ¯Gh4”ͶÁN–¡Ñ˜W_‹Åuuu`È0c†Ý*A„Ba}}½« ÑhÚÛ€ƒàŸA'0ß0mÚ4©TºiÓ¦ôôôÔÔÔÏ>û,!!s¤:)eeePç cûöí"‘ÈÎ2}òÉ'J¥ËÒì CQ Å®ÁX,vœq”Ëån4ø-‹^¯‡!8*•êíím±Xrrr¸ FþË 6›ªR©ì“ —ÓƒquœþþþíÊèóõõ%&_;ÖåêÁå·ºÑÏ?ÿŒǼùæ›+V¬˜>}zssó‹/¾S˜  ‹;¶mÛ¶êêêÕ«WOš4©ãß Ü3þüo¿ý¶°°ðöíÛï¾û.lªùðáÃéÓ§ÃmfÏž=xðàÿþ÷¿Z­vÊ”)ùëX­V»€¶F£%€(ŠŠÅâÊÊJe„`›©TŠ×µ466bJz‹¥©©ÉQyKa…ò+Øòýë×Hù€êêj¥Ri³ÙL&S»r8W™ …¢]ÕNXªAG1NîWGEEýòË/ø%ÑÑÑÑÑÑ0»”Ïçck[·nU©T # à—_~M3 :Û¶mS©T4  ¡”"\Á`0~üñG|9ÌúÙ¹sgÇY­V;¡Ì®X,hr õÒjµÐ7‚Ru,‹ÇãUUUI$­V‹ ßÁÚ#ÇÂrÿì„<Ê+"À™û€ZN—ý!L^[[k4±¹LÊÏÏÏO.—»Ÿ†‡çÌ2Á–PˆÏ „„D'3N,˱<Ó©z–rJ§Ó‰ŠN‚΋Œ‚@ °i9ªèB»õÔ<%%%//ÚH.—Ëårí4[©TjLLŒ\./Å-ŒŒŒ,,,¤P(þþþ………Ð&a‰sz½>**êþýûƒA$uëÖ-//ϱ1¦MMML&S"‘`^—T*­­­e²˜l)û¥/^úÆûð€Elñññ¹¹¹˜màñx,«ªª k]ëªoS[v!¢$Á3©S§4 Š¢ …ÂQMÜh4feeaÝÅ ‹ÅjµºšÔÉÏχ…±?üðƒ£à7ž7ÞxcäÈ‘(ŠÉår¬˜–1eÝÊ2zs~É:€~†RwSW¯^Å{----P£Ál6CãµnÛu*bbb°Â©úúz¨žN£Ñ‰%.•gÁs" è€Àv ÏçwoU×ÕU>7H¤.]ºÀŒˆ‡‡–õáp8t: £q¹\8K{¥cá»~øááÇ&“©¢¢Âßß6±E¤¬¬ ¦' ÆŠû]`†…Óéô[·n9J.Á"qìÓ-‹«"\‰D§ÓuШT—î´±o=òóósÚYE@§¿ ¹\þÜ>È:ñuI¡¸iY¤R©\µæ‚O¶~Üf³á-@*•VVVÂöÔjµø ¤ˆˆˆ›7oÚl6:Îáp0)Šúúzh„`5!ìÛK¡PÔjµZ­†™ß1¬ Åõ/Èf³I$’£`¹“È‚ˆÅâ2x<S"±s í¸rå qgÆ©¡R©Z %èh0™LGÉ …ÀãñFŽù<ŸŸö'>Ÿ/—ËÛž–ÍãñÈd²Åb¡P(žžžf³™J¥b®Éõëסa¨««Óh4,ËjµêtºÀÀÀÂÂB£Ñ¨×ë¨Tª\.÷ññA6‰DB£™Çk¤ÑhT§É§wnN‡v[b±XÊÊÊ€TZ'“×– ;<âÎ"ŒS¢K—.PE‰ Uœ>IQuS…C ‘H%õì4…ýˆˆˆüü|»q€D"©®®†ê®Ž{A‰HøÚÓÓÓb±èt:Ìs0 >ŸO"‘ø|>üÉd2ÙØ±½V®ü¶¢3†|ø°ËCòññÑëõd2¹¥¥‹d"[â:6fs Š¢\.·±±‘(`ê”ÆiÛ';@Ÿáoh2™žÛÆtÏ!NêÜ 2 ÐÕ××óù|Øo ¦)¢(* kkk¹\.€F£)•J˜Å‡Íß`n^‘A§Ó544X­Ö’’Nçëëb2º^½tN‡Ãa±X&“ KˆÀ€‰Íf·Ñ´Ùlа¹Içñxf³Ù•GðA<<ØÄY xfÀ*dÛâc±X,ø/++ƒ;???NÆMMM6› ë„k0ôz½F£1›Í]ºtÁÛ!FƒfÐKóóó›5k–J¥Òh4^^^0¢  ÿÕW¯þi<«! FPPƒÁhhhP*•‚H¥R*•ŠÅ?Ôj5ŸÏÇw uœu¿N§Ã¯$I*•—PG1N“'Ž'ÎÁ³A»Ê­š››±ÖSðé/“É1ãÁ„’õz=ìÓf6›kkk½±)S¦P©T³ÙÑØØxéÒ%___ooo³Ùìååe6›…BA` bæLPU"¾0q¢½Cc4KJJôz½———¿¿¿N§ƒŸe6›ñ¶°©©Éi8ÄÇÇ'66ÖÝ ©öؽ^}Y›Íæ´ÉÁÓ1NŽí\1jjjÂÃÃ-Z„-™={vxx¸£¼dÉ’ððp§i‚ ;©!÷ †.]º`pa 8¾Sbtt4~¶F$y{{c‡Ý»ùûûWUUA9h`îß¿_WW×ÔÔTWWW^^T^þ0=ý)âîÝòÉ“/|ñ…}Òb±h4¸WMMMss³Õj…Kø3 ÑÍû³¤I&“Ý¿? ÀUÕmyy¹Ùlvs–ˆéÌdœÜ¯¶Z­uuu° ¼¥¥Ž•l6[ÍŸÀUJ¥N„ÖÖÖÂŽV«­©©õÛpc7 ÁO{["‘ÉdlzO^^ÞÈd2»[˳‹Åz½þêÕ«ÁÁÁ&L€oÅårƒ‚‚,‹ŸŸ—Ë…3Oûö}k³ÙL&³BaÒë)®;$Éf³I¥ÒV[iÓéôИ+a±X`™—«lF³Ù üWÁ\âêÆÉÇÇçÈ‘#ç΃ý¿W­ZuõêÕÿþ÷¿÷ïßïÞ½ûÌ™3“““—.]Š÷îG 8sæLttô_|QZZ:nܸI“&M:uäÈ‘ÅÅÅÄI' è8@…ˆ¶LáØA&“ƒ‚‚à뺺:¥RpæÌ¬ØˆL&C‰Â‡²Ùì°°02™l2™`M•——l­ë///‡STTäªç=ƒÁ€’²z½¾¨¨ˆÃá@MÞG&00°  €¸:çä”}ûöM›6í—_~Y³f%( — IDATÍñãÇ;æfãõë×çåå>|øäÉ“¥¥¥+V¬ N:A‡‚D"¹±®°X,EEEð5‹Å’H$õõõZ­6??6怹b±˜Ïç³Ùì²²2oooA<<8ОUWW³X,§iîPXÏ&^pp0~­\.ÌrÆâââVÕ7þI(5n'½½½Œý9räH·sç΃îÛ·/;;»óõ×_Ã1Áߟχ¡-üB‡c0`ú™Lær¹ŽÊ B¡°¬¬ìq>šÁ`(•J˜GÇápL&CQÔb±À΄¡¡¡&“ J?òÈÅv´Z­Nãl‹åÉjat&ã´÷?à»qugΜùñÇgddäää|ðÁ"‘hãÆ{öìY°`AÛ{(•J.—»zõj¬ÅÆS!;;ÛM…“ÉìÚÒ†ÓRSA0 Tü6\.×ÌbÁ[ø‘kTQõôôlhhÀò×Édreeeyy9Š¢d2¹¡¡¡¹¹™L&çääÀ¾vŸå&ñ]§ÓY,±X\__ ŸÏÇÏx544¸qt$I]]£jAg2N/¼Ðã۫víòÑG͘1>»?ûì3>Ÿ¿téÒ“'Ož:uÊq—:t¿dÞ¼y`ùòåÚ~‚äää¸jŽI¥R‡ ‚ýùÕW_]¾|yùòåþþþN·ß°aCuuµ@ xï½÷žìAæççïܹsäÈ‘£FÚ½{wNNNFF¬lï¼ó>õ(%%ï·‹?ü°¢¢âßÿþ7þ1GÐÑhhhÀ_Þ*,üüüjkkñšf³nÁ-˵k×ðñ1‰„ù%ÕÕÕØ*___XF‚EäìT`pÖ¬YùùùýúõËËËÅÅÅ4­±±±©©©ªª*22€?’âär¹«–¤WSSóh£"«Õ +jù|>Š¢Xº„¯¯¯R©„úLÄEÒéŸÏçóÿ7/… ¾÷— ¶ÊÓÓ¾xºóLIaaaccãš5kÞ|óÍÅ‹ÓéôE‹]»víâÅ‹¨ªªJNNîÝ»÷Ž;6oÞþøãM›6 6¬_¿~III×®]KOOÿ׿þ5iÒ¤#F|óÍ7yyyf³¹W¯^~~~§OŸ>räȪU«˜LæÃ‡óòòú÷ïÿÕW_ 4ˆB¡|úé§®žP‹…L&/_¾\¯×Ÿ9sF $$$̘1#999//oéÒ¥[·n½zõj¯^½®_¿>xðàøøøýû÷úé§o¾ù¦›2m‚Nô‡Á"{‰¤¥¥Å®¦‹ ( ‘€Å¢£RÍL&`7‹c³Ù0B"‘¼¼¼}ú—––*Šððð[·na„M&“Ó@±···¿¿YY¦aA"‘X,–——LÜnhhP«Õ®šäÆÄÄäåÁ}åJ9À}ŒCX­VBr³£‡õˆSÐ*"‘èĉl6F<°äWgµZ•J%•Jåóùt:]­VcƒÐ˜˜™L¶k×.½^§sQ•Ëå<ËåšL&µZ=oÞ¼ììì^½zÁˆ‡\.‡½s Óƒæµ´´P(>ŸÏb±ðj`.\€í ð}0*++÷íÛ·uëÖ’’’¬¬,¡P¨Ñh, öTZ¹rå+¯¼B¡P |§B¡€Š5F£Q£ÑéRˆVû‘«Õj,ÿ»¢¢ÂQíÅjµ"B£ÑÎCªª¨åå´ÀÁƒqœæQ(??¿ÐP¾¿¿¥wïp6«K—.‡ËåŠÅb“Étùòehö(”¿ ˆ¥R)6ŠÅ›½ªª*ÌLzxxôîÝ[­Vc)…eê2µY pÕ9077×Vú‡µ¦Z­kÿwØwîÜ!®“gÇs"h/L&óÛo¿mu³šššU«Våççóx¼ææfh–ž þþþYYYØŸ%%%sæÌ­5P€÷ö¼yó={öäñxÄÚY¶kˆÁú37¯UAhh¨§gþœ9‚’Š«ÒTø†žž`Èo‹>zô=o½åWRÒ —ËY,KÝ¿ÿîÝ»Z­¶¸¸Øb±ÄÆÆ…91N/E»€[||¼ýØë Š(À À _ã.ñ<À€‡­Ü­&“©½â„qz–ùúë¯ÿûßÿ>>MMMƒ€,~¸ê ÀxÀ“ðd™¼¹•L‡ß‘ß>3#€õD `qõÜ´ßm2[¸€€ÿ¸{¡P(—Ë ãD§g ±cÇ–––îÞ½;;;{РA°6¾tëÖ-&&æÜ¹sµµµcÆŒ9tèÐñãÇcccû÷•e³Ù°ÈÆôéÓûí·Ý»w_¿~½GgΜiïÑ<ø÷ßÿꫯø|þ¤I“nß¾}þüyÇgÓ„ îÞ½»{÷î_ýU«Õ†††vœn6›±¨ÔóLDDD«iýT*•L&cÆ©´´”B¡OOÏ·{yzzæææ66*zô°'mQ¸qƒA¡Pð>>¥ßÈÓÓ³&1PÖ½»·Z­öñá? ãZ,.—ÔØH2@Ïž/œÎÊ:Táå7‘ËåNÃÑvXµ”»šΟ°¾´¥ƒ¿hà>üÒÊû?|ø¸¢ãôô¡ 8Q‹&8.'!$`ýßdorrr`` D"Y²d | DDD¤§§ÃTøéÓ§÷éÓ‡Á`0ŒÌÌÌo¾ùF§Ó 0`øðá!!! .ÄîáØØØôôô¤¤$À¬Y³†Š¢¨——WzzzTTÔ€ÞÿýììlN÷Î;ïx{{ †ðððŒŒŒsçÎ 4(66¶´´ÔÃÃcãÆ{÷îÕétqqq¯½öZbbâÔ©S{õêÅb±¨Tjzzº£ Y¾|9œþßPròd …RUUÈÌÌ„µhééé/¾ø"`Μ9#FŒðððÈÌÌüòË/u:]RRÒ Aƒ¢¢¢æÍ›WWW׊œL&Snnn·n݈[·Uè™ÍæÜÜ\)ÃJ$™L†M&)•Jl"*#“_xá…ßÿÁvÀ’% ®]€±cÑ>ú0™á …B¥"…‡sª«E Ã`0 (¹¾èõ OôÆ ’HDF„ÔL£¯¯¯L&ƒÒp‰T*mhh`±XøÃûƒ)Ô`ÀÀÇ 3¦pî/Û°˜ÀJ¦ðÄåÐ Sc}õóómQ8lX—.]ÚâdÀ$l8õo•Å‹Ã×XV7ÀÇÇ[™9s&ö:<<<<<¾ž0á£(°] 0`ÀøëN “ãââ°·²ûì †Ý*–àŽgüøñ®ÞpâĉX”ÃnÕäÉ“;ÎÈd2»uëöܦZݽ{·k×®öõÖŸêõz»\m@`4P0÷B¡Àù¡ÈÈÈêêjÌ€••M›àüyt:`µªa8º¼¼<88X&“±X,(|€Åv•••v‡a0°œÀYvªc†^ÏÁ?RXäRX¯ºº:((hþüù€M›6A—<..®ÿþ‹Å²k×®ÐÐÐÈÈÈ.]ºØl¶ÜÜÜ.]ºDFFFFF†„„œ:uÊÖ*Á?‰DŠ…=ÜlƒM,UT€‚‚?þUT€ÆÆFÔëõЯŠe0Ý»wÇg~âu]I$™L&‘H:.  {÷îvÊ–eee·nÝrÉ ‚Å‹åúõëíý¾¾û3EBH$B²ó§—Fr,·óT,‹²žòòrÌ•iÕg"“Évå½xC(‰ì„lT*•ÅbF‡…BE]–”Óh4§}‹IHHÈÊÊZµjÕÂ… g̘سg@«ÕvëÖM¡Püþûï¾¾¾ÁÁÁ½zõâp8ĉ& x*Ðét³Ù îF£±°°ÐÍÆr¹¼íúª‚øùù•”ü%/ýLÝPSSƒ%8<¦ÏÇb±Ü'{°ÙT>¿¾¾žÃáèt:;+hW/H"‘<<<$‰¯¯ïõëס$þÎs²Ù\ÆÜ¼½½·lÙR]] ²!çÎCdïÞ½Nwa2™‡ y÷ÝwW®\)öìÙIœh‚§‡ÃyÌ>Ÿ(ŠJ$Çå‹ÅÎ2áí–£(Ñã'G¿ÇÞ¬*°ÛSxxx«J+d2Y$)•Êüü|Ø‘h…Ú­¤¨Ý¾}ûÈ‘#ØŸëÖ­Ãw rD"‘üç?ÿÙ¼y³\.Ÿ;wî|Pë¶Ù.ÁßG}}½jNwÚ¨‚J¥:•ª‚ýsG®nfqÈdr—.] Z4›Í~Ì.nV«µ˜8Nss³ÒŠ#°”»¶¶¶®®®²²ÒñtÏÉqò÷÷Ÿ2eʵk×h4Úûï¿éÒ¥úúúwÞyÇÕöz½~íÚµû÷ïïÚµë|””ôÕW_Øÿ]»v}²o¨×ëïß¿ßêf|>3B‹IÙl¶£ E¥R½¼¼žžž©y ˆÝ$Yuuu«Æ‰ S@qoœÄbñˆ#Ž=:nܸ7Þx#%%¥¹¹yöìÙ€°°°W_}õçŸîׯ߰aÃ>üðÃÂÂÂÌÌÌ;vôë×oöìÙÝ»w¿zõjÇù¶—/_v“:Èb±ˆk‚ SãXÌô§®36z…88CF£±íÕcõõõÁÁÁMMMqqq—/_æñx ÃÃÃC&“‰Åâòòrhœètzss³]¬ÅjµÂLq©TªR©Ôj5ì+ØÆ …ƒæJÁïëááAÚ^¨D£Ñø|> DÐጓûKdÙ²eV«uùòåÛ·oÏÍÍݼy3—Ëݵk׊+’““eee+V¬è8sNeee®Ú´Óéô1cÆ`îØ±ãÇÄþ Ûºu+q¹t|r¹üï˜íohh0 °¨V«Õj4š   …RQQ,ør%Š¢~~~°ùEII lØ®ÃS«ÕØ]\__%ôz=‡NçóùÐV…††»y¸a5X¥RIdCtDãZ3Nƒ¾uëœüôÓOu:6ß( W¯^ ¡(оüòˉ‰‰Øî"‘¨Cu«C•Ñÿ•9.rzƒ‡ƒ¥®–””\¹råË/¿Œˆˆ¨¯¯OIIAä£>"®‚NG}ØÍ¯íú=jµšN§³Ùl™Lݲòòr³Ù|õêU÷Vë®ÛöÌ@æïï_\\ ˆ‰‰ill„lj¥ð™L&™L†}îÇÝ»- 4“UUUŽ” #€X[3N, kæãã#•Jñu|žžžÒ?¢&T*UŠ££õQ%Ym¨ÒàøËq2Eìçç'•J Ceeåž={¤Riddd``à­[· ƒŸŸßèÑ£OŸ>-•J·mÛf2™&MšókÃÃÃSRRt:Ñh\½z5,Uhhh(,,ôóó[¸pá–-[üüü¾ÿþ{âB$øg`±XNµ%i4šŸŸŸ£×…/ªuD¯×c ÁŸ‚@vÉ‚b)6›­-<___¬ûvll¬Á`(-ýC.àÎ;N§±…B!Ü%<<Üf³ÁLJÃÁj„¥R)>5C©Tâ›ÐH$RLL q‘tãd"úœº¦¢¢¢°°°´´”N§———ïÛ·oÍš5‰‰‰C‡miiÑh4·oß¾~ýú²eËÖ¯_òäI½^¯ÑhfÏžýý÷ßÿöÛo‹-Ú³gÏÎ;7mÚTPP  á |äÈ‘;wúúúÚi‡ü}h4šŠŠ Gq<ƒÁðàÁÇYL¶Øø]¨Tª£…———Z­Æbhm¤ºº›<ËÉÉ!‘HØ1»jÈ[WWU\žß´iÓ>ú裚ššâââ‹/âEÀâââ6lØðÙgŸáwüî»ïìºy\¼x@‰D«W¯†%ÌíÂ`0<·õ £x‹ ƒÁ@„%Ôµ!¥Íf»jƒë”   šš»jY¬†ûÒh4nq(ŠŠÅbÇ„ò?êsíråÊ6›íªtf :Š£t ã%n×lݺ5þÏÎ7ÕÕÕ¹¹¹‘‘‘P÷~åÊ•‡öíÛ , 8°L†N§{në$ Š¢­¶Ì R©G«Õâ'œáñxUUUªº:à¬Ô —Ëåóù:ŽÃá`£1‹e6›?ÉdÚl6¥RÉf³µZ­£gÆiÞöA®’• IvZêD"‘ø|¾Sûãååe4]'½^OX¦oœ9Ķ‘}ôèÑÕ«W/]ºtüøñím >wîÜ—_~ùàÁƒDÆc¢Õj+**Z• x†ÉËË“J¥î•L¹\nPPô/µZm—.]ètz~~>l5Ùh4›Í:thmm­V«e2™---¾¾¾ …ÂÑ¢P(6›­®®N,;=0æ*ï€F£ÆGK¶Z­>aaø…B¡°¥¥Å•zAç1Nm#::zìØ±çÎkjjêÝ»w^^^fff[vìÛ·oŸ>}Ž=zóæÍ£G®ZµŠ8™Ôº&ÎC[L8æ6%&&æççÿe‹Q£€··›w¨À3,ÌèçW““cS(lL&Ë›…B½^ÜåŸ/\ ÙÜ~P(ÍÍà‘Ûètàðaì/¢1Û3bœž7lj!â'n^àä‘÷×6í©©©ýû÷Ç÷ JOO‡2ƒ½zõêÚµ«B¡4hÂ:T,'$$øùùÍž=›Á`ˆD¢ýû÷ûùùÅÇÇoذfÁ¾ð £GÖjµû÷ï ®¿GùŒ¸¸¸ç6ý÷Î;Ý»wouæI£ÑÀ¬9‘HD"‘nܸñ—(ÖO?úúV?«ðÊs—.Šª*oooèr5þ=_ÊÕÛúùùÕ××·>Í&“‹111MMMŽó‘|>ßb±´%)EQâ.ëžÓóÔæ„J¥&¿œ¥SÜÓµkWG˜ààààà`øÚû¯£N˜7À®lE±Nê111øU|£w‚Gæ´±ßݳÇÇãââ\­íÖ­Û;wðK`§û$ºâbP\Œ_Àd2ê¹Ô³Ùf­¶™N-–jµÊÕŽððp*•ZPP`6› †——6k(“ÉœŽ6š™L³^ïÆ£ ðàögee¥%c³Ù§±±ÑÕ¡z{{›L&lRÍb±ýp;Èså9%''Óh4¥ ñG‚ÎŽcr^¯7›Í•••nÒ àføæ€¦V«­V«V«åñxx;L¢”——{xxÀx¬]²eMM«ü§¹vokg‰±9]8ÔjµÐ÷‚£™ððp»4úææf±XŒÕTÁ/K\HÃ8¹õœnݺ%‹aéÙ³gÝ\â½zõ m×Ç9R,ÿc1b‹eu qAt^Èd²«h'–qળ@°=  ¤¤Ä`0Éäèèh€\.Ç[x³0 Ç[>66Öñ©b0®]»ÍfÃßk&“ •Jmµ¬Êñmét:v áááXHƒF£‘Éd;m¤ÂÂBh¥°™K³Ùì>Qà)'w«m6›Á`˜Þ¾}{KKËÖ­[§NºvíÚ”””èõú³gÏ>|íÚµsçÎ]½zuuuõ‘#G |ÈæÍ›U*Õ®]»&Nœ¸víÚ &ìÚµK¥R%''¿ôÒKìÝ»÷–-[ˆ_‹€À ÅÅÅ<g× ÏÇÇÇ}¦û÷ï·%àÁf³{AiµÚ¶+øµ‹ššÌÌäää¸iû«Óéþ¦c x Æ ?ÀY¸paTTÔ‰'RSStƒH$2f³/èLðô=§M×nŒŽu¿ÑéÓ§oß¾]^^þÎ;ï̘1ƒF£øàܹs¼|ùriié»ï¾Ëáp¾úê«iÓ¦ 2Êÿ@AÕ;vŒ3fΜ9éééW¯^ݾ}{NNNEEEFFœŽz²üðÃnòÅ9Nß¾}‰k‚ “’››‹/AmjjÂjoCBB`'@l­R©T(°k­V«µX,555f³Ùb±´}Úd2UVV:ÊEÊd²èèh|Lƒ„§]ä!°ÌËý6X§à††E¦Ú<ãTf2¹QщÇ78 …pVó¥—^Ây.— ûJÄÄÄܸqƒL&‹D¢ÈÈHLrÛËË‹J¥öïßÿæÍ›p‰‡‡‡ÃDFF^ºtÉf³I$’èèè””¸@  Óé.\ =Q‹ÆÆFW c̘1ØÚ÷Þ{ïØ±cß|óMTT\ò믿.Z´èÍ7ß|íµ×íÓSSSoß¾}ëÖ-:~õêÕyóæa«>ŒÉŸ<J¥?öÂ;vW>|Ê—””À‰«ÕªV«y<‹Åj»8¬Õju*d¬P(àÍ §>|Ó"þ1bbbòòòl6›Åbq_Ã$‘HŒF#¦  –‰k©C'÷«©Tª£o P(N—c5äL&Ó.A§»ˆÅbø‚N§Ûm ‘Hžø¦Êõ¾ß: +¾±×Fؼ®\.¯®®®¯¯ˆˆ@Äl6Ëd²êêj¸B¡€÷6‚ P[O§Ó©Õj½^o2™ASSŠ¢ C©T²X,&“¹mÛ6£ÑH¥R¯^½šœœ›ÍF¤EtçñKÛlŽÿœºh)))Ð`Ü»woÁ‚?äb«ªª&Nœ˜œœüòË/÷íÛ·¤¤D¡Plܸ±_¿~‡~å•WÂÂÂêëëÃÂÂRRRŽ9Ò¿ÿÌÌL¹\>cÆŒÈÈȦ¦¦Å‹[­Ö‹/~õÕW™™™‘‘‘ÙÙÙ÷ïß?~üðáÃ_ýu™L–žžvêÔ©_|±OŸ>ÄÅJðÄÆ¤¸ÚX»å0¹ 'ØÝÅÅÅp‚¹Õž‚ÐétðWp§– PPP@¥RaKh???¼¬%ƒÁ P(={öÄ–x{{ø‹#EEEð†uo™Ü—ptωàÂ… cÆŒÁgÌ÷Ýwžžž{÷î‹Å"‘háÂ…¯¿þúöíÛß}÷]»Ê¾ŠŠ •Jµ`Á‚µk×vïÞ.d³ÙLJJ>|ø«¯¾º|ùr¸|âĉ.\8wîÜĉ±p⫯¾Ú¿Ì¿$€«¶‡žž1§.†‡‡‚ Ž § ƒÁ``ùM‰¤¼¼Ü郾U)*•* Ûþ3ùúúZ­Ö’’’ææf›ÍF§ÓaXR,WVVâý›Ço‚ìããSüWÝ[‚Žhœ:Ne\$999--­OŸ>[·n8pàùóçóçÏ ùí·ßÃo¼ñƹsç.^¼ÿŒŠŠZ´hÑŽ;ÚþÌ=tè]ßQ£F}úé§DÁ ƒÁðÜÊYùùùµ¥®{\ÅîT*¾bÉÐÑ@à%ˆ ×ÌAœ#q„°LÃ8¡ÂyrÉÒ¥Koݺµsç΀€€ýë_Ð8ýðÃkÖ¬éß¿ÿŸ²Z­555žžžË—/ïÝ»÷©S§K–,!,­V[\\ spžOîÞ½NzªÍnBBBJJJþ&ÉfG¥; …Âãñ°IYˆX,–ÉdvÇ  Fmm-¡åÚé“–èî–ôôô+Vཟ³gÏ–––:t(44ô£>Âo|øðaG̶Ãd2W¬XQPP°gϵC³Q‚ ®Är\áëë[WWçæyM¡P¼½½kjjÚî¼þ“Ç/ûÅpš¹`6›M&“¿¿¿]S¡PˆÕtã´uëÖSóˆ኉'¾ÿþûÉÉÉgÏž…KæÏŸŸ››»|ùr.—»}ûöuëÖ]½z555õÈ‘#©©©àÑbâÿþ÷¿§L™2eÊ”††‡rîÜ9âü;B§Ó£¢¢žÛN¸·nÝJLLlïÌ“J¥²ó0„B¡ÉdÂ|ØZÂÇǧö©²²’L&ûûûc“¬þþþ*•J.—¤R)ìNÀårQ}üÿüs¥R‰ HDDDll¬§§'‹Åª®® üé§Ÿàôüùó0ô4qâÄ>}úÅÅÅ©ÕjtþüyX‡¿hÑ¢)S¦„††²X¬~øÞQÀßß?--mæÌ™aaaÄejÇóÜ ·ººÚ©Z˜{”J%t͇š]QQaWeµZ›šš(í ò[­V™L†ýÙÐЀyfØøL£ÑÀBàY³f;w®ºº:""âþýûð"'“Éõ­u‹ +))iWŒN*•:Jb>vÝ8%%%íÿöŠ{‡ú/q .y´w»ö}œr F›8m ÌXu¿¿?Öî&Îq¹\,Ã_CÞµkן~úiñâÅiii°–D"!‚mìíí  aã:Ž­õõõŪ»ìêpýüüüüüˆk” í¸*$Âü‡BÉ£ÑØÒÒí\ëííÍãñìRr\ƒÿ,¼/‹Y,wüøqX® =*@KK vkãëœì(++se™¢££  ž°fTN)))ÁbÄfs×þõæÍ›|>ßßß?:::::Z"‘\ºt)(((!!á>¬°°0::ºí2zááá±±±OðÛNœ8Ñ`0È]Ъ²²+†¾jÕªmÛ¶EGGݺuËUÁߊË0 wîÜ6ÀÇÇG­V+•J|ÁSmm­eBQ¶šEß&ÙÆS«Õ¡¡¡øZZhT )..¶Z­°±ºn\ä¼¼<§¥¸yyy¡¡¡qqqÞÞÞãÇ·[±hÑ"âRéž“ÖÐzoòiÓ¦mÚ´ ’’2fÌè’«ÕêÂÂB‘Häëë[^^ÞÜÜM£Ñôz}~~>ŸÏ ªªªÂÜönݺùûûùå—0É­²²˽5@ …UI¥ÒΕ¢6cÆ L®‰€à©kfÝûd2EQ½^Í-•––ºòN¤Réýû÷‹ŠŠ„B¡@ ¨¨¨À<$l"Ö(Š’H$8CæL …F£±¥¥%00°¬¬ ¯”ö˜`ouüøqGûíÞ„tãtúrÁ#ì¦Õj?~ðàAŸ>ø 33óøñã·nÝ‚ÑÞÁƒOš4éwÞY½zµL&“H$çÏŸÿüóÏýýýŸõà>¿³(F£‘Åb•——Cû´wïÞV‰ÉdR(|æ—ËU((Š¢(ŠMY…GŽ å­§–åççþùçŸþyMMÍË/¿L¥Ru:F£yóÍ7¿ÿþû³gÏB ƒãÇkµÚ'Nøøøôë×ïÌ™3?þøcllìÖ­[.\øûï¿coxúôé_~ùåí·ß>|øð믿~åÊ•JÕÜܼvíÚÇ8ðÃ?$š(´‹ææf7¢û¼ÏäuÄ/ñòò‚ËQÍÊÊ’Ëåx}£VQ(v9u0â e'‰ŸŒÀqª¯h½¹–^¯ojjjjj?~üæÍ› †@ X¸p!¶ÁôéÓ¥R鯕JåæÍ›CBB¦Nš””´jÕª›7o®_¿žD"¥§§;}óuëÖ¥§§ûùùÍŸ?¿°°0333;;›øaÚ ìyÑöíù|>”¿Ã€¹<ØŸb±ÎH‘H$˜ÈWWW‡%P<Pó[«Õ:Mo÷¼%?·Pf°ÿøî7êÞ½û²eËÜoóÖ[o®Y³F$½ù曀ž={öìÙó…^xûí·KKKåryjjª›KvùòåF£qòäÉÏsñ?Á?†Éd²ó´t:ÔÈ7 jµNaËíSx<žÅbyL“†a6›‰D»çÅsÚÿÅ'òFC‡åp8'Nœàr¹C† œ>}z„ (ŠîÞ½ÛÛÛûĉNwœ?þ¼y󚛛ϟ?:}úô¿£Í Ás‰D’J¥ø%*•Êé‹Å‚Ô`}”1/…„<,‡"$$¿êP©TŽâ)žžž¡¡¡‘HA ŸãôßëèÑ£øË¢OŸ><ïµ×^{ûí·årùéÓ§±U©©©)))«V­êÛ·ïÉ“'ÓÒÒÂÂÂ6mÚôí·ßöíÛ7222))iΜ9D×d‚vá>·ûË€µX,˜2¯^¯ÇL`uu5‚ nB#L&300°½§V««««ýüüètúÇYZ‰D"EDDWQ¡•‚ðnݺÛ¦³²²`õܨQ£Š‹‹±æ(ÁÁÁJ$„Bá¶mÛ°A“@ °X,ÅÅÅ4ÍfÿûßÿƯÌš5ë•W^·©S§Âú7ÅtÀ±cÇÜ”šóùüaÆaw>âÅܪ_X ;8m–C@ðwã&í-&&æÞ½{m©?mUM<,,¬¢¢",,,''‡Ãáðx¼ŠŠ »›Â©¾Œ âsÊa!°¯¯/,ÂÕétÐ Ål6s¹\‰TYYi³ÙÍÛƒ…ÀÅÅÅDå{ç0N ÅQ{êîh4Öq£¾¾~ذavÓ•, ¯ÑI&“±w³[ R©ØZ;sø¤ÐëõV“™¬uRÖÇïâ÷Ê+¯`u¸K—.=pà€H$¢R©‹…ÏçŸ:uJ(:îxãÆ#FÌŸ?Æ €W^yåâÅ‹D.Á?OBBµk×ìna«ÕjµZsrr¨TªT*ÅZ1a«ìÞ¤Õ”¿ÂÂBðgÁ¯R©t:ŸÇs®´Y±×Ъaï«;ò ìIít-ÌØ‚CäúúzFÓÞSWPP@\?É8µ?üÐÛÛûÛo¿íà_U|ÿë¤OÚ˜[K­À~Àõõ×_ÇÇÇ×ÔÔDGG/^¼xëÖ­ÁÁÁB¡077W¯×ÇÆÆÂkº®®®¶¶V§ÓÁÛ,;;»_¿~*• $J¥R>ŸïÞ=³Ù™››+  Rqq1 `R(”GM# À°³Looo¬K“Éd‚Ér‘H¤P(\éß³Ùl­VÛª¡rF‰DxŠÉdêt:èÖP(2™Ü®øƒÁàñx­úU°ÿS[Ÿ¸a‚gÙ8=ó'ëÌ™3K—.ݱcÇ´iÓæÏŸ_TT”›› =îÝ»—••UUUožýû÷'$$ìÚµëСC yyyÇOKK›5k–L&Û´iÓ‘#GÈdòæÍ›ÍfsZZNçóù.\8xð`ÿþý‰ëÒ=:Î.ŽôüàæÎáp±3'øª&2™, 1QT(²Çår•J¥c( ¶ 5A;…VOOO¥RéáááØ{ ‹RØýFB¡Kv÷ðððôôlii1›ÍxëH¡PètºS{©ÑhÁrìÕ‹ HCCÃ?Ü„à5NÏ$'Ož¼~ýºB¡ðòò6l˜cŒÂËËkÍš5#FŒ6lبQ£ßÿýÅ‹?ù䓺ºº 6Œ?~ïÞ½kÖ¬ùôÓOáf³¹¾¾þwÞIII9vì˜F£¹uëÖ‚ V®\™™™yçÎÂ8µŠÉdzn“e‚ƒƒ©TªÓ‹ •x<^SS“ÉD>è´x¹n.—Ë`0h4šcC ðçô‚ \.—B¡`ÆÉÓÓS«Õ²Ùl•JÅf³]'Gðm0 mÓëõxSÄ`0Äbq»š¢Q(‡ÓÜÜÜîg…b0,Ëãw& ŒÓS¡k4NG&“i4ÚiÓÀ`0ÒÒÒ~ûí7øçˆ#ÄbñçŸn0ÄbñâÅ‹‰ÓîFsÿþýç9åäöíÛQQQŽjýµµµ"‘H&“Á4"‰„mƒO,b0t:½¥¥¥_¿~t:ý‡~p»³Z­˜â%¾'Œ@ßëÐjµ‚˜L&»ù*ƒÁ Õjy<^»­6.àr¹‹ÅÎ!#zÆ©3mÚ48ç´mÛ¶3gÎ 8ð‰ÄÀ3þ|Fc0V¯^Mœy7Éd,%‡À½^o±X ¤2>—VTT`ݰ`ƒAè3¡(êííÝcƒ7T*ö´ úA >÷ïc— 1íy˜ÍæVÅ&Ë ãôl²~ýzÇ{ïСCX‰†Á`ÀË;¹á?ÿùÏÙ³g7nÜxøðáäääü‘0Nî¡Óéaaa,XÐÙ¹qãÆ‹/¾èjß}t ®5 ƒÁËËK¯×À¡ÅbMlÛ…Åbillt<˜¶H¹úáá=Á3æé鉢(Ö€0NϳfÍ¢Óéf³9**jÓ¦M,+777##cýúõ‰ÆÐãââ222>úè£7Þxcܸq;vì3fÌ+¯¼²gÏž;wî¬X±"))©¾¾þý÷ßÇ â=zô÷ß?iÒ$ƒÁáp¾øâ â´· ò?Ÿß½®®ÎÕwß·oŸ«Ô;GP… nžù3I¡PH$RÛcòjµÚqJÏf³=r¿7‚¿Å8Y­V»Q N‚­i:é&“‰J¥Úu6kX V ü¿aTˆÿK´#‘€+°ÈÌÌÄ+ÕR(XÖ¾aÆôôt6›=|øp(`0óæÍ›:u*œ[æp8/^´Z­\.7$$däÈ‘ðX,Š¢.\€{õéÓ§¬¬ŒN§Óéô/¿üŽ=!ª£:šÄ®ÇkÒb±`NFC_|Š¢(,Ü6 Xc=¬.ðï ¸¸¸Õ®çmyz8úˆG%NÎß«‡^+ÆéöíÛÆ ãp8XyìñãÇñMÊŸ Z­V&“}öÙg{öìùúë¯1±†GàáÇ)))cǎݶm~¹P(œ4i’«Ç>*Í`0œ*tAsÀw@Q_zŒ­¢P(v ÊNW1™LG#JðÔ1™L'NœX¶l™——WSSÓÚµkg̘YN÷ÙgŸmß¾ÇãÉd²={öŒ1âöíÛcÆŒñññQ©T&LX¹r¥F£;v¬^¯·Ùl<ïØ±cÞÞÞOüPét:™L†@ žøX%‹Å"“ÉsçÎ%NËßç“81Nm ÅNž<vÂdgg_¿~=>>þÎ;€ÍfcÕ ÝºuCQ4'''886{ R©T0ýâ‹/’H$¹\ŽUb‡‡‡ãg¶sssß}÷]|‘à#˜••åØxfäÈ‘OJ™à™§¤¤äõ×_ŸÁßeß¾}íÚáõ×_/--}ï½÷V®\Ù³gOh‡BCC/^¼˜––6yòä©S§¾ýöÛ×®]+,,Œåóùµµµ?þøãÎ; °}ûö“'O&$$dgg¿ôÒKiii<¾sÏž=¿ÿþû7b†€€€€àù¹rår«åääìܹsçΰ¸Áh4nܸqÁ‚=zô™™™ûöí _µj•Á`¨­­ýî»ïöíÛ7~üø£G&&&îÛ·O(¦¥¥UUUmÛ¶­OŸ>ûöí8pàŽ;Ú¥5B@@@@ð¼xN õ A­l„©1b%ëׯŸ9s&à÷ßÿñÇþùç¶wU¿sçκuënܸAœ}çÆ‰Öý︸¸ÿgﻚ¼ºÿŸìE a$ìVT@p H­³ŽV´j«¢ÖZkíkëªZëªZ\•ÖQ´ÕZ‹ÖYGq·nÅŠ"AV€IÙã÷Ç}ßû{¾OBˆm>%ϼϽçžsϹg€â¶ÿ½‡H’éÞ½{K—.  >+77wêÔ© 4{ccã¾}ûÂÂÂзhµÚØØØ^½z;wÎòK¿ÿþûíÛ·ÿõ×_}ûöµÓœvØaGÛÂiÈ!*ÿE žIr ï|‰éñß.E—iðàÁ_|áïï¿{÷nƒÁ°xñâ+W®P(”¬¬,pÁÛo¿VƒŠŠŠ>|~2„N§Ÿ8qÂÅÅÅßß?33³ à¿…á3224͘1c)++»wï8>hÐ ‡sôèQ‹% oܸa'P³P(¥¥¥ÿÎo·ç)°ãß"œ/^<鳕öŽÀàÀ999W®\a³Ù‚¤¥¥•––~óÍ7 111'Ož|øðáâÅ‹ÁÅÅÅÅß|óL&‹ŽŽ>qâÄãÇçÏŸ?kÖ,__ßž={=z\vìØ16›½{÷n¹\·zõêŠŠŠ¾}ûfddܽ{wÅŠsæÌáp8o½õÖ.\hN­A¯×wÍž“ "((¨µJ¸vØñF '{X‰¼¼¼3gÎ,[¶lÁ‚¹¹¹;v쀱_¹¹¹gÏž]¹råçŸþðáÃ~øaΜ9@7b³ÙëÖ­ËÈȸqã‘HüüóÏwíÚµ}ûöøøø˜˜˜?þ¸W¯^eee{öìÞÉ"‘èîÝ»ëÖ­ëÙ³§½ÏÍ(¾$RXXFû7÷iIu;ì° ';Ú@°iÓ¦ž={VUUݸqcôèÑ@CÄÓÓ³[·n?ýôÓO?ýtÿþ}x‹——×Ö­[í[S­Ò+‘èçç×¹Åèì°ÃŽ×@8Q(ËÞt¯ðxü«m—ËmmŸýŸÿü'***99¹®®®ººg³ÙvÉd öÆ¥vØa ÇÆ §Û·o?xðàÍøÔ€€€vìÞåË——––Nš4 ”2dˆB¡xÁö̘1ãÂ… à·T*-..~çwz÷î keÙÑ®\¹róæM{?ØaÇ›ÂF<‚0Í §=z ƒp»À˜ÞY•vÍÆKáðx‹aæj‚rÖC€ïÜØ±c `4ÁüqðàÁõë×ÿüóÏZ­öêÕ«ÎÎÎNNNL&säÈ‘)))7nܵk—V«½yó&‹Å§àÂßÉÉi÷îÝ3fÌpqq¹zõ*‘Hܵk×òåË<¸iÓ&™L6xð`{%\³ˆmo2‘Î¥%Û§ö—×BÛ4¢’H$<o˽gÚ™6ÕZ$?2™|äŸÇ⼚ÿ²ä:qã¤ÏV¢3Dôèу@ tñ¦«^¯—Ëåx<žJ¥’ÉäNy;‡Ããñè ðññyçwZk:ÎÉ[È1|øð€€ëïR©T‡Ã¡ Û …N§Ãápl6Û6Ó=Èår£Ñ¨Õj:dk݈ÇãûõëÇápl¶÷ÐÐét---x<žF£‘H$[ðgŒ‡Ã±X,[è@ÐEt:ýÿdˆ0{iKKKk™^>|˜˜˜9K§ÈaLp¾··÷°aÃÌ–ÂÉ. lJ¥²]놬¬,&“ l€ÉÚÚ]¿~= €ÏçFÛ\;w®OŸ>t:u¾ä IDATÝÁÁDæÙètºF£Ñét6Û{hTUU•••õë×P²å$j]ƒ¿þú+>>ÞÁÁÁ`0ØBVVV–——þAÔv†x]0pà@¹\nçõvØa‡6|ÎãÇö^°Ã;ì°Ã¶„Ì c‡vØa‡¶"œÞzë­ŽÝYPP0…üüüE‹}üñǯü“fÍšµxñâ¼¼¼;wÚØŽ-þùçŸ)S¦\¹rÅFÚ³bÅŠ©S§Ú~¿O™2å·ß~³“ÀÑ£G§L™ò¸-ÛǼhÑ¢N|/±c~¢ÕÕÕÓ¦Msww_¶l8âááñ÷ß××׿ò®<{ö,Ç[¾|ù!Cì„eÇ¿ååå§OŸîðê³ÓqíڵǯÃ&‚»»û¼yó\]]í$õÓ§O·¹°8wîœõõЭҜ\]Ûý8•J•˜˜˜ŸŸ÷îÝþùçêÕ«ÉÉÉ0ñ6‚ ™™™Âÿ†v.ú÷ïž¿`ÁpdÉ’%B¡°¬¬ üÍËËKKK³ÖƒÉ“' …ÂN÷¨,//¢pöìYAFŒþΚ5 \¶~ýzxN§+((˜3gÎñãÇÁ‘+W®¼ÿþûB¡ãnÔY8}ú4|;H~/‘Hà‘~ø\6qâDpd„ ˜'$%%S“'O~-ܽ{7lH$B$??9räúâ'OžÀS'Nœ@ä½÷Þ‹ŽŽ®ªª …_~ùe'6ìÆB¡pûöíkÖ¬ …¹¹¹‰‰‰àÕ ›%‚ ß|óP(,((ˆ‹‹2dHIIIrròï¿ÿŽ È²eËÀÅ111‚ÙÙÙÇŸ4iÒÝ»w;· PRR’½k×®_~ùeùòå«V­JKKWA¾jµZÝØØhçéoæÍ›÷å—_‚Jçûdooïììì;wîLš4©©©É`0Œ5êöíÛ·nÝ:tèÐÑ£GçλmÛ¶M›6­Y³&;;AˆˆýsõêÕììì·Þzkܸq .ÌÎÎÎÊÊœ¥qýúõiÓ¦ :ôÖ­[ñññï¿ÿ~UUUxx8‹ÅÊÎÎþúë¯üñǃÎ;÷ÁƒçÎ;þüÅ‹ÑBhÒ¤I—/_¾pá™3gΞ=;mÚ´Îmá¡C‡–,Y2wîÜììl@ ‰ú÷ïš=iÒ¤Ù³gÃEjMMM||¼P(ÌÎÎ?~üÌ™3ÿþûïÚÚÚÒÒÒ¨¨(•JÕ¹žÖJ¥²²²rÅŠ{öì«ê¬¬¬ììì½{÷‚Üÿ6løñÇ7mÚ´xñâ'OžÔÔÔh4šÊÊJ‰D²víÚ;w~ÿý÷ÙÙÙõõõ±±±jµº²²rÛ¶mŽŽŽ±±±C‡íôÒ-jµºªªJ"‘€–777777WWW·´´¨Tª=zxxxdggÏŸ?ÿ»ï¾;}úôرcoÞ¼yòäÉãÇ_¿~½s kh|ôÑGk×®•H$ÑÑÑwïÞ4iÒðáó³³ûôé3bĈ¢¢"ØþÊÊÊ­[·r8œ˜˜˜!C†<{ö¬ƒÂ©ƒÖ@"ù_”+æ”ÑhÔëõ2™,//¯±±Q¯×wz”‰^¯7 yyyåååF£Ñ`0 £ÑH 222`¡RS4555¶©Tj¶‰ÔÔÔ¨¨(AZ‹Që0p8‘H<{öì/¿ü²yóæ#FŠ%‰ ›Á`ÀãñD"‡ÃíÍh4‚ËÀpy Ñrt:=<<üÌ™3›6mš5kVVV–‡‡à%‰ãÇ/((˜8qâ?þxöìÙÆÆÆ¢¢"0)ÐóÅh4ƒ/êÜ‚þ!D"ñèÑ£yyyA¯×ƒâñxpš?€î§`ª‚¸¸¸¢¢¢ÔÔÔN§.—›ššZTTê…æåå•••a÷Ï?ÿtvvÆ|à*`d!íM›6mÆŒx<þe0·7nÔÔÔ$%%Á#K–,¹qãÆ_ýÅf³a¯NŸ>=??ÿwÞñööŽˆˆˆ‹‹S©TçÏŸOIIyIsp÷îÝ¡¡¡ @×566æååÉd2Ó~HNNž>}:œ,”2/éKrrrÖ¬Yƒ ÈàÁƒ;ýù:>_ X¹~9sæLkE BCCažÖ¼¼¼ÊÊÊ^½z±X,µZ}íÚ5WW×îÝ»[~>XyõíÛׂ€´FsõêU.—izV&“effzzzAC*•¢ÕÓèèhÌ4³~bèt:L­ú7MMM?~ÿý÷M­a¶€èèèk×®ü’>uêÔÑ£Gÿu„††ÚÂ6ù‹`Û¶mÀè=pàÀððð]»vuY¸»wïžìÇ{5ÂiàÀ»víºwï^~~~Ç¥eÉäÇ×ÕÕ?>44 §“'OZ6 ÉdÓãL&³_¿~0X:--mß¾}W®\éÞ½{CCÃøñãGŒqàÀË­ÊÎξwï^·nÝ:6T2™lüøñƒ6;KKJJÆŸœœ¼eËôñ–––mÛ¶;v,..A›7o6láÂ…°<‡õøôÓOåryIIÉ¿G2Éd²ï¿ÿþôéÓ+V¬°ÍŠD¢‹/†‡‡¯X±bÍš5_ýõ¨Q£àÙâââÛ·oÇÆÆnܸ±¸¸øäÉ“!$$ÄìÊ—N§?~ÜËËëåµöìÙ³b±øí·ß¶åA?|øpCCCFFFppðåË—áÊU¥R¡Ë[¿àp¸÷Þ{ïÁƒ¥¥¥~ø¡N§+))yë­·0Kü¼¼¼û÷ï÷ïß¿¨¨¨¶¶ö§Ÿ~š;wîÉ“'SSS»l¯}øðáëׯ¿yófii)¦hÀÓ§OŸ>}js‰ÃáL˜0!777%%åÒ¥K|>?!!¡s_‘œœ¼zõê”””ÊÊÊ{÷î­Y³&..îÒ¥Küñ‡‡‡‡eE›Á`€<"8::Z£^¿~ýöíÛà÷gŸ}¦Ñh~úé'@àéé ¨ÜÓÓ“H$nÛ¶ nÂÅÆÆÆÇÇŸ>}://A*•:oÞ¼òòò?þø£wïÞZ­öÁƒ|ðŸÏ¾ï¥¥¥çÎ:tè… `é÷ÖLɃaýúõ'NœX³fͻヒ ÈéÓ§Ÿ}ºuëV‰Dâãã3|øp.—uòäÉüü|™L7Ò»À\“žžž@£Ñ&OžÌf³çÌ™“žžž’’’““ÓØØ>f̘¬¬¬;w2™Ì)S¦Üºu æô|ï½÷>|¸}ûv½^ìØ1°ÚíDDDD 0àâÅ‹¿þúë¨Q£ÆŽ;uêÔ›7o¦¤¤Ü¼yóí·ß „«À?ü0333%%åöíÛÆ óóóë²ÎüðÃ‹ŠŠRRRD"Ñõë×׬YÓ¿ÿóçÏ;vÌÇÇ“enàÀ.\8|øðÝ»wõz=ôŽy©Àãñ«V­Šˆˆ¸wïÞo¿ý¶fÍšÌÌÌãÇóxl6›Á`øûûOš4)***,,ÌÛÛ›B¡p¹ÜéÓ§³X¬€€€!C†ôíÛwàÀà”““Ó˜1c¬L”W\\ìååE"‘ M-Éh¸¹¹…‡‡ƒìÛ·ï'Ÿ|âààÃb± Fhhè”)S‚ƒƒ ЫW/x*,,lêÔ©ÎÎÎìÑ£‡õ6@°]ÔfïQ(”   þýûóx<A"##=<<Èd²››Û{ï½÷öÛoûøø©ÿ믿’H¤yóæùûû0 ÿþAAA4Á` }úôèÑÐdddäÌ™3]]]Á)‡ôôôwß}wÈ!^^^3gδƿ\&“I¥Rÿ'¥¢Šúfµ²EZWe>+¹J¥zU‰_©TªÁ`èÄįè¬ä¿ýö‹ÅB[Ÿ1š4ëÍŸ?ß¾}}ûöe³Ù*•êŸþ1bDBB‚ ~üñÇÉ“'…úÞ½{À‚?tèÐ)S¦ìرãÆ™™™ÁÁÁ"‘hÚ´iaóæÍؾ}û_ýÕ·o_>Ÿïãã³~ýú±cÇŽ5jõêÕ+V¬8uêTNNF f½ââ⢢¢èèhWWWÀÒÓÓ „1ëiµZWWט˜˜ .œ?þ×_ÇSRRú÷ï/•JCBB Áª{÷î|>¿gÏžõõõ/^ìÕ«Wÿþý7mÚ´oß¾]»v;wnÖ¬YMMMéééjµzܸq ,€ql¯ +yBB‚Yclk€‰_™L¦'~e±X2™ÌuJ˜øõÌ™3cÇŽµ©¶Áį/Þ{GŽ9qâÄ¢E‹@µ –““Ó¹­…‰_i4šN§³©Ä¯›øõæÍ›#GŽœ;wn»t˜ø•ØÑ:¦NºpáÂO>ùÄòeqqq7n6l˜‡‡<\?·oßnVQhçæçç¿ÿþûƒ jhh°¦µQQQ .ÔëõgÏžùm=<<öïß?lذaÆ•——ðÁƒ ª¬¬D«ç˜e>‰Dêß¿¿}èíø— ÿþ8næÌ™ƒ ’Ëå´÷‰€hï Ý»w‡5Ô-^<==ÑG Űaƒƒ}}};öê;wnÚ´iãÆƒ žmÂÅÅÅÅÅí~B&“]nß¾}k×®]¹råÈ‘#‡ÚÔÔd\;ì@„ÇãíØ±C©T‚¿îîîö>yÄÄÄäååuŠóž]8µÏ˜ààà •JE"°§µvehh¨““Óž={D"ƒÁ`2™T*µ±±Q$áp8.—kö.<ÏårÕjõ/¿ü‚Žöpuu­««3«?‘H¤ÜÜÜN˜08•R(³%€Ñ2¬±±Q,#rêÔ)>ŸßÒÒâèèhù.;ìxSÁf³;àÚj‡YÉäÎðæ…“D"éâÚÌèØ–––N‰‡e2™˜bƒ¡Í{½¼¼"##_)‰DŠŒŒôóó›8q¢R©ŸêÔ©¹sç‚×-Y²„D"Q©ÔnݺÁ¢ïÓ¦MS©Tééééééû÷ïŸ5kHû4jÔ¨   +W®ìÛ·/222<<\¡P Âb±`ólÍÍÍ@šZ ¥R ‹·‚Hp[›ÃèùÕ®Oë2 ·F¬™2] ûo4m³÷Ð@ïŠ577ÛBI9P¬Óél¡Íî{™qˆ …7nÜèút \.·{÷îd2ùéÓ§ååå/þ@oo´CÄï¿ÿÞZ鿪L{aaa¯^½&L˜°k×.[n'pˆàr¹í @ åóù4íÂ… ›¬¨éììL¡P222l³óûôéC¡Pîß¿?hÐ [kpÚ"“É ¢ƒÏ燆†R(”ìììšš[hpÐÐjµW¯^µ‘.ŠŒŒl£L»J¥‚‰º&00FE¼ ‚‰9Ò§OŸÖ”Bôé²@(¶Ë[­B 0À–?M­V¿¤t±…^½z|•6Fc㽇ë°°0BÉòoÙlšN%%%¶éÛÚ\]]=<“ÉdÛɉ`7nÜ)ÙlöÀ»øí :Ç‹‹‹spp¸xñâÅ‹Ç/ —.]ÚŹ|ù2Häáêê *P0™LÿëׯK$0álÊÉÉ!í8näÈ‘yyy«V­š9sæÆ?ýôÓ¯¾ú*..ÎrEŒ—„²²²Ç÷èÑ$=9þ+íïïb0ÓCÄÁÁT­+..eÛy…ñC¹¹¹¥¥¥ýúõ{øð¡V«íÛ·ï•+WÀ)¡Pèëë;~üø¦¦&FHÅÝÝýÑ£GݺuƒÑ„*•êâÅ‹îîî111‚>>mÖ÷¼råJQQQRRƒÁØ·odz²ö×É“'ëêêf̘aêþþçŸÂJÒÖ´Á,?~|çÎAƒ¼Ž’éÒ¥K©©©ýúõ#ÿý÷–-[ÐE­º¿ýö[ZZÚ… &Nœ¸sçÎÝ»wççç ‚®W?uêÔüùóÇŒ#•JŸ}ú«RôwîÜùÉ'ŸüñÇ*•jöìÙ‡6lØÃ‡=<<¾ùæ›U«VÝ¿?//oÊ”)!!!ï½÷Þ¹sç|}}Ay£Ñ¸wïÞ»wï}÷Ýw eéÒ¥\.×ÓÓ3==}Ó¦M~~~S¦L™={öúõëúé§?þø#33ÓÃÃcÊ”)ýúõ;sæŒ ™õŒ¹‡Ã}þùçyyyÇŽ»xñâÝ»wi4Ú_|±|ùr[Èê Óé"##9RPP°uëVµZ’’2gΜœœœS§N©Õê#F¬[·.%%ǧ¤¤øûûOœ8A‘#Gv½ÝiíÚµ'%%eݺuqqqZ­2½Õ«W×ÕÕ¥¥¥eeeeddŒ5*%%Å××wÆ ¯68içΓ'OþòË/ ÆÊ•+SRR†úçŸ>yò£vïÞ}ðàÁÇŽƒLH$~öÙg¹¹¹'Nœ8þü½{÷f̘‘’’B¡PÖ¯_ïåå5nܸÌÌÌ[·nÁç|ÿý÷ÎÎÎS§Nµ9³À¬Y³¾ýö[ø7))iùòåÞÞÞ¿þúkmmíœ9s`^©ÄÄĽ{÷¦§§/[¶,--M(ZY ó2¢šG—i1bÄ7víÚæååµlÙ2Ÿ?þøÚµk‡×,[¶ÌÍÍmÞ¼y {öìA$33AÕ«Woß¾½¸¸¨A—.]:~ü8¸kÕªU...555°×øñã[ËõwðàÁo¿ývÚ´iŸþ9FkllŒŠŠrqq9sæLFFƧŸ~zòäÉšššU«V-_¾Ü2zôè!C†¤¦¦æçç¯_¿þ«¯¾ š?>š€ ·nÝúzöÃ>åÕ{öì¡P(_|ñÅÅ‹úè#6›½iÓ&ÛÔˆˆˆÀÀÀ«W¯655Æ?ÿüü^¸p!‡KJJÊÏÏONN–J¥üá‡>ÿüóƒ‰D`±2d‡;xðà¥K—®_¿þÕW_Q(”¤¤¤GM™2¥±±qÚ´iOŸ>MJJ"‹-BOQ4îÝ»WUU5dÈà…åììùä“ãÇOŸ>ý·ß~Û°aƒ@ HJJ"‘HˆíÇàÁƒäryrrr^^^RRRDDÄkÔþNN£Fjí‰D›fË–-»té˜9L&óÖ­[d2ù¦šµõõõ………~~~ ÎÎÎ÷îÝ6L©TêêêzëÖ­o¾ùÞÇ9 IDAT2éÕ«Ì…U[[[\\˜žž¾eË‹õý÷ßïß¿?!!Áßß¿¨¨˜-£ïÿ°qãFp$''gÇŽ7oÞܼyó¡C‡‚‚‚JKKE"äb½{÷–H$¹¹¹àÈ„ Þ}÷]:ŽVÆ_#ôíÛ·{÷îË–-{üµ:YYY*•*>>ìT[žƒ{öìéÛ·¯\.?v옓““-;OHHàr¹Ë–-û믿JJJD"QdddBB‘ˆ5ð¬X±âáǯ¤—.]êÛ·ozzúëB0Z­öîÝ»NNN€áXs‹Á`=z´åkþóŸÿìØ±#66öÖ­[_}õ•^¯ÿã?:±åcÖûþûïkkk‡~úôé^½z!B ¨T*¤ªëׯwëÖ-44T§Ó½ýöÛ~ø!8þçŸÆÆÆÚ`’¡o¿ý¶¢¢B£Ñ¨Õjww÷?ÿüóÚµk‚¤¦¦þüóÏr¹F‡DGGï߿ߚT„ÐÆ`0 4ˆD"YŸìù¯¿þzüøñèÑ£{÷î b&öîÝ;|øpPZZš˜˜H&“DPPPcc#F7[àÊö±sçÎùóç4‡Ãñùü•+WvqˆD"•JÅápׯ_ …€’'OžüÅ_tqKŽ9’н{÷ÀÀÀýû÷Ï;ÇS©T¸Úºuëˆ#†úí·ßâñøœœœ)S¦H$F“••Å`0ÒÒÒ.\xæÌ…BqàÀààà®l?‡£R©@½ŠÇã322z÷îª×ëûöíûñÇ#RSS3cÆ "‘xéÒ¥øøø©S§îÞ½ûùóç›7oþî»ïºX ¸sçNttthh¨V«MJJzï½÷F ˜‡ ûý÷ßÉdrEEEJJʶmÛärùõë×AÂâ®ço°cqtt¼pá»ï¾:uêÔéÓ§ÿç?ÿQ©T€ƒÁæ[™L¦Ñh7n9räˆ#V¯^Ã᪫«gÏžM$õzýõë×a±X2™ŒÅb…††Ö××S(”Îõ·êá¤P(RSS=<< uxܸqãÆƒ°X¬²²2Óår¹Á`°Áz:îáá1räHF ƒþæÍ›·`Á‚ÚÚZ¥R ªg‰DSÉã4щD*•ÊÑѱÿþñññ'NœØºuëêÕ«[k‡Ã¡Óé555ݺusrrÂ2  Õj£££cbb.\¸––¶xñbxAEEÅë’½·M0ŒóçÏ¿ÚÅ ÜL>µ¯ L&½oôÎ;ïÀß@«(,,„SSSÑU•IJJêÄö‚ÇãÁçÅ‹CŠ5Ýùé§ŸàoOöÅ_tý‚AwwwLL…B9uêæ² €2ž¯¤zÓêÕ«!cÁáp111ðìæÍ›M›÷å—_~ùå—ÀŽ ©hûöí¦o™9sæÌ™3Áo°v·E³Þ/¿üwêÔ©{÷îÑh4+ –Œ3ÆÓÓÓ6«lÛ¶-44ǶèìììççWQQqçÎÉ“'O:ÕTï d³Ù=Z¸p!8Âår}||ÊËËïܹ“”””œœ |c¤Ré;wôz½»»{aa¡Y7ªeË–Íš5kÖ¬YçλsçγgÏLwbñx|TT”\.¿sçŽJ¥òðð(..…"/^œÍb±lÄ{Ø;ì°£«5'°üù믿INNF;ìYÀ… ÂÃÃ7oÞÜÅÂÉúýÕ„„¨¨öéÓgÓ¦MHKKóöö^½zµ££ãرcÑu,X`4Ïž=»ÿþ/¾øB ÄÇÇoذáðáÃiiiAAA6làp8éééË—/OKK>|øòåË/_¾bêŠöÍ7ßàp¸cÇŽ!âëë»k×®œœ&“9vìX°¿E >¼pá´´´ÄÄÄ•+Wfdd€%Þ¾}û/^üÉ'Ÿ,Y²äüùócÇŽÑŽƒ~½êuÙa%âãã}||^ßQv؆™2íåååQQQ¯]É :®ÑhЉåÉd2NG—i?xð`LLLkÎoL™ö±cÇ^¹r¥¬¬ _k€2í «„‹FYYY]]]ll¬)©t1e—/_îÞ½;—Ëe±X¶¿>+//¯©©éÝ»÷+'×.@eeeyyybbbeÚß`DEE…‡‡·6a/Ón‡vØa#0/œh4ÚëâÖ…ÇãaðlNN âCÄÓÓ3** }±@ x]ªv¾þóŸÿLš4é5uÌ3‹§OŸ‚q/‚––˜ ûñãÇ0)T×£±±ÑÑÑü¾uë&¯Êk•J~455ݾ}ûµh3ÌÅ®Ñh^Æ~碥¥æ¼òä‰5'¯/ …i¦y¢Yõ‚J¥¾.Õ-ùdÕj5ÇC—0xŒZC\\ÜöE|>ßÕÕõÅŸÜAx¯àí …ÂßßÿÅ+Ðw=‚‚‚ðx¼Á`Àáp¯‹ÇMPPà jµúµh3$W77·7ž›™.¦±Â‰J¥úúú¾¦Ÿ÷ÆxNÛa*œ:7„ÂvHå ð¥|]ö§Ñx]Rý«8Æ—+œ.]ºÒ7˜X+uìÅ/r/ú!F£ÑÊÍ¡aÆÙ9ûëóãp8gJiÖ˜mRW»(¹]ûʧL ½Õ±N°þ.+½c-!F£±í'ÀwW¯×wbm}?¼<Éäç :‚°Í §Ã‡cR½nfñÐÐв²²Žåa ‡yt: oo簾& >u î*Mž<Ù.œÞ ìÛ·/''Çö² b‚ Éd²OQQøK"‘ÌÎy>Ÿ¯P( …V«5¥d2Y§Ó‘H¤ððð‡‰D³¦o<>ñìÙ3‡9Õ)ÚÐ.nååå%•JmÇ9-,, ÄÛצZHHHQQQ›é½1O ËË˳†Õº»»k4L.³Ã*`­&8x<n¿Aê2  ÁݺuS«Õ ÒG»xt¿~ýJ¥º|ù2:~Íß:²ÇlŸ»»»kµZ¸-÷’Ö% o@k|ýõס±Ão>­þïõf/rpp€ƒÁàñx ‰µB¡°~bP(tÞŽŽI&<ViŸ?Ž‘L$ ]gÚÓÓó•'®¶ãeƒD"a `7•B¡P©TÓôJ&A\]]ÍV4¯®®–H$€Úñx<ÚîêêJ¡P¼½½år9™LqffÉÞÍÍ þ}òä Ö¦ÓéÀfN¡PÐÁv"72È]]]-WU7ÝU®¨¨x’ÉÁÁ¡c7ÂL,ËÑÑ‘F£™¦ÎC#??ßšÂhëâÓ§O¡d"‘H, ð"ƒ±‰D¢Ö$z˜ CAAf˜x<ž¿¿?†áp8xYNNN{%P_ššš***0‰7q8Uì0Y,–ÙS"‘è%I& Mðx<—Ëuqqió7{ÔÙÙö¸L&“J¥`––——·&·Ùl6@@ÓN7ë0F¥R­w$Ããñhô8ã =OJJJ^Çíe;Ú†¡ oP©T¢—™­A&“YP_¤R)à†D"¾…Á`ÔÕÕ)•Ê¢¢"±X¬R©Ì&1" ¶ÁÁÁ½>Óét2™ŒJ¥º¸¸ e @°ìA¥R¿«¬¬ÄdPĺ#¶6›Úë'Zþ‘H$‡ó‚ѾMMMb±˜ÉdvJê9©TÚÜÜL¥R™L&zàµÀ刳³3LBh WµŸ™hb±˜Oðx|×ÔJG‹Å‚†)L?Èd2é_­VWUUáñxWW×ÎÚä7ûœêêjp}V,;99¡¹v'¶P4P©T>Ÿ–…,K¯×+ ww÷6%°7@u ¶Ó”TÌB"‘X_Z¡½ÝK´¼¨±lZa³Ùð¬·W²X,‰®W(¦mkSUb»Â'KJJJJJììûõƒÁ@g™âñx………˜g ­‰DWQQHE¯×ƒ52fŸ ¹¹ÙÍÍ-00Ç744àp8ŒæëëK 0ôÏãñšššÜÝÝ[S ƳgÏ,|”^¯·ð ˜= r³¤®P(4YÓ"d– €m:¸ººšM±¸Ik¯ðóó³ÜfŸÖÃA·½nÊÕj5ìF<ïìì\RR‚Y ´«mnnnÍÍÍà3õz}CC“ɤP(¦ÖF£ÑhœœœŒF£D"Q*•pA­VwJì¿Ñh¬¯¯'‘HŠT*Ch‚„Ìçóœœètº@  P(¹¹¹è=çÚÚÚÖ"KµËåòððð§OŸbŒÁÁÁíÕ ¾õäÉ“öÞe6𢲲ò‹––³ë9…BÑ®zTKꊹ«îì|>_¥RÕúi`—š\>@ièÑ£òàÓL»MT|>Ÿ@ @ñOYf_¹e0¬ñÐijjÂèâjµÚ²UM"‘´—­µ‹ñêtº’’½^ßÚ]:[```]]Á` P(›V §ÀÀ@‘Hd=Qzzz* 8öð777£Ñm ˜ €¯!ô ¬®®¶l— P(>>>è•NPPiVÇ‚àì°M¨T*•J…Ãáx<ÞóçÏa„)¤:À 1£_[[Ëáp´Z­B¡P*•½ÊÓjµ!""¢  ˜! Ï! €͆³gÏà\e³Ùl6ÛT&“Éd2«ªªÂÃÃëêê¸\nNN7]³w̘f‹è }öì™J¥2 @êóù|µZ-‘H ƒ…ÓŽµþ,Zj¶÷[Lì`,,ëd^^^ÍÍÍP“P*• <Îl2¦‹€H€_„i@Çìr:±Ò¢ ÛæâââååU^^lqèÞ6ÛíL&“Ãá˜-ëj68ÝìðƒF£Q­V[–t&ÐKÅÅÅè·[ðñ¶ 3ï...æóùÖì¤AÊ’ øÉÀúFµµµuuu&ÌJ¨Ö0™Ìnݺ¡ÛЦÅ\­VcæsQQL8®MG;^_H$Àúù|>Ø Áápt:º~¨M®®®uuu?~òäÉ;w²³³‹ŠŠÐŽI¾¾¾EEE «ƒÁðððàr¹0F"88Íæ€·’——WXXœ2R©J&è¸E&“ EEE…——ŸÏïß¿}}½N§ÃP2í´ÆW úY‘H$ËŽEyyyþþþè#ÕÕÕ >>> 8 mPEÏ} i~Г½MÝ^Ó[ †§§§ÙGáñx2™L&“E"0Õ"ÿsM\ÞÊ·ãp8X´¾Í6ƒaê0 ·6¾T*’k}}}VVÜ%j3åRss³YÉ̹À÷ ð@@EÐïÎßßü ÑhÖ„Ua\¯1|¾°°°ÃûmøÖŒ¼(âááa4-½øzëi4šNô'‘H­ÅHÚñšÂÁÁÍ Èd2ˆ·•Éd|>¿  €@ øùùùùù™ºz_ ¸$'ÍÍÍ™™™'Nœ‰Dt:ÝÇÇ2‹’’µZ bEU*•X,®««ƒÄ‰É;Àf³™LfYY°˜6ÛÕÕÌ^FSQQþ:88¸ºº:;;‡††š åááÇãA|.&Ò:ˆS©TDÂápÚŒ4­ƒÖ¼*• ̓X,Ú-Öì] Ø9:aÚ€ï•ËåÏŸ?§P(¦ëN°CÃápœœœ|}}]]]A˜Ž———³³sk®ÿ˜/©†,xL‡Éì):ŽV ÓƒJ^kÊ WLdNkca½aóÀi4‡Ãa³Ù...D"±¨¨0…BD•JµüÃårÑí$‰À%ýÅÇýE]Éi4l&–N§› ™LFÇ^”••ŽP©TÖg­·o¼x…;l,‹Ëå‚H[È—!;&5N—››ûüùsÓˆB­V ¦¨S]]—————§ÓéÊÊÊBUUƒÁ`³Ùb¹\®““‰D2͹€†X,ûØŽŽŽf×ÑpcáÒh42™ ¢ ‡ÃÁ$N­ªªR(`6Á©îââÛæìì ì ---Àú$‰^¤N&Ú?¢±±±MÏ[L Xû8޹èN''' Z:²Íp ZZZe2™B¡`0¡¡¡^^^l6»¢¢ÂÛÛÛÏÏ 0L˜Pe&“Éår­·¡‡Éì*ŠË境p1LÏ´Ï1ǹ’Éävå{%Vf.n{ð¯\.¯©©‹Å:άÁ‰N§[0DUWW£÷zI$—ËÅ´Ü4”Ý@äf4™äF”H$šêÅ wzõÑØØhvÉéââÒÐÐÐÞí"WW×úúz{ÙÀ7 d2¹ºº '*•ŠÇãͺA·´´X¼€Ó!‡#“ɉD.—»¸¸€èFC¥R“®•ÛÈ`[$Iû"L&<ù_ø¤D"!“Éb±¸¢¢B"‘èõz ˜òe.—+‘Ht:F£N‰8ŽÃá€À©ö.¼@¾A‘Hf•J¥P(Ö8ÊšMNNNõõõvk2kr·l„G›ªZód2™~~~ÎÎΠך——×Ý»wU*U~~>H þT*$’¿©TªD"!‘Hµµµ¦Ö'‹¥Óéh4ôÙ³ÒléÌ2=+‡É2%›#f‡$p‚kŽÖ\-ZÛÏk3Þ ¥RiêhÒ ¶H$Òëõ`v¾p²°^³Æ9ÇÍÍ d‹!“ÉŽŽŽh'œŽy1Ø}ÞHˆÅbȦ”“ ‡ÃQ*•`æWW×Ö<_ÑäŠæ¶:R]}}}PP(fÆf³ y<˜íÎÎÎ*•ªMƒö¾›nnnMMMx"(‹-±MÉÌ¦Ž­ºLwþr ‡óðð0u[0;›^på§×ëkkk1ͲK.—+—Ë­‰!a2™ÎÎÎýúõóðð0 `Lóóó1‰¦À‹@5,Áì—‚q*•*//¯5×///´Õ§Íd:ÖS» Õj[“:íu Ã|‘5ðð𨩩ií-ƒ31Åb1Ô_µZ­Y¹Øª*Ù>µ¾¾¾` H§ÓÛÜòñôôM`Ib00^vP›À7ÛÕ¦7ÁÁÁ`yE¡P¸\.`Ö*• .á1®ää“R©ôôô„‹5v¤\\\är9@R©4::šÁ`¢:¼¼¼,çL3 --- o‚\.‚0µúúzÌoÍÇ666š.Õe2™YNíììl9;NSS\ƒoihhÀx‘™õÎ5;›$É˨DŠÃáüüü Ù¬@×áñx___8L’H$À¦ˆD"—Ëe³Ù\.d…`2™fu@GP­V*R*•f/nnn‹ÅZ­V*•‚Þô0½ö¦Hðöö6kp “•€”ŒÉSŒ&ˆª*‡··wkcÝÝÝétº\.o/ãmhh°ìêÙªp2]Ý´ h.ª–/¦P(D"Q&“Á0Ÿh‡4 ‡Ã „¸|KK‹V«  ‰½)ÕæÄðóó#‰AAA@­qww—ÉdÀ}èô………b±ø8) Fƒ™NNNN¦¹Î´Z-š477Ã[´Z­^¯Çp·‡\.o/T©Tèµ …pÚö²]k¼Z[ÝC¶¥¥E.—Ëår°ò™4 èXwww6›-‹¡t @>Ù'Ožq‹ñR«®®6eˆ€ŠÌ¶J*•VUUÎÚÀãñÀ úùùI¥R©TÚ®Š‘ å5ú €bu:]g¥7%±XÜZT«D"Q«ÕR©tpª´æ-þþþ–—z­šõ:1 Þ¢×ëÙl¶³³³iú;vóùóçd2¹oß¾õõõ<ˆC4EPPzÿÙÇ·°0qtt|ë­·ìbÀ6A¥RûôéÓÜÜl0Äb1zŸä)FþÛ„ Dzó2¸¶¶V©T#xyy¹^¯¯¯¯©Øš››‹ÄápÀ_ÞŽ1ëa ×Ož<Áé<ÏÝÝ>¾Èì‚Ð`k²SbÐ=öCçŽQMMM¼|MFTFNçïïœÄb1´€©Õꘘ˜TUU¹ºº^»vÍÝÝB¡Ý¿?$$“õ ³~"‘(  ººÍѤ‚¶I‚AAÔ3ˆæD?ÖÏϯ®®Î”…zyy"fåºD"é@qØzô}AYY™YWeeek¶¯ŠŠŠß@á‚A7í-¤:§Ã…a1÷Í´­MŸ¢©0°2êÛ=kCÄãAð⯩©ÉÌÌT«Õ¡¡¡ ¼€H$âp8t£AvKOOOÌÚÄ`0`–`HAQQ‘õˆ,U{œ4# GÝÿ€ÑK$­V{ôèÑîÝ»#ÿsAqvvÞ»w/Ì«˜ŸŸHœÍf{yyÕÖÖÖ××ûùùUWWkµÚ°°0`€Ëy???ƒQPPÂ<5 `¬á*• NB>Ÿq2þ×¢´´T.—‡††ÃÞƒ[¬T*U­VCzƒ [???¥R ûÓÉɉÅb={öŒJ¥ [PP:®Ä!ªTª€€€ÒÒÒÀÀÀœœ2™¬ÑhÈd2X5c¨ŽD"u=hƒV«ÍÏχæ#°] ˆ…„.ƒ2£ÑH&“ ƒ5ú'‘HÐÇŒB¡hµZƒÁ@£Ñ@„ h9X°×ÖÖBÉÔÚô´°4¶>ŸYuÊÂYбyyy4 ~5ð•»tÀè L$ñx<ø(¶¬P(@óŒFã³gÏÀt ðàAii)@€K´‰Ž;è2™\^^nš\Ž;ú8lX‘˜Z2[ë[p’+z;e§¼¹¹ †††–––ö>$Æ} O×h4&·ì^77·––05h4šZ­F®1á IDATSòÿ§p¸R€ýÞ)ñS­Ç333êJ$A’ A ÀŽ®ƒƒƒ©Ã»B¡°Æw–N§‰Ä‚‚‚—á°———7`À€-[¶À#wîÜ:tèªU«æÏŸÿñÇìܹsÀ€iii)))C† ¹uëVSSÓÖ­[?øàƒU«V7î—_~Q(#GŽtL÷÷÷Ñt:½¶¶m¬€±±J¥Øâ`89zÓ:Ñ ofÉ0Á¥!ÔEP‘¶­à€ÑްFø^µZmj]qvv‹?SáD  ƒCW€ ŠÈd²•RŠÍf›NžžžÞÞÞ¦ò T%vvv†6U4Ã1gè‹Á6(wkú–ÚÚÚüüüüü| WWW;99YS—¨¢¢Âl=øššš6ù¡5Õi) B€T@¶-5üâ³À´ð&ÒÖ¬pj­Îø  N‹Å°ÚHkƃââbµZ]QQË=ÿÿæÍ™3çÅ[ãììlM.;òØß½{÷Î;@•pÑ3Ò7,Ê`0,Çêƒ*ÚÀÆÝY½,‰ž?ÞÚµ^¯ß¸qczz:úàgŸ}K¯Ι3§¨¨hãÆÀÚc¥ kãÆ7nܰ +ÇH­Vûúú¢馤‚ÇãÕjµX,÷Ýw'L˜àëëëââb4A­6¨UÀå-4•À DÀãñp8Hgg!]&“¡×Ë’MÉ.Å€‹xäe Å,³ .á1©Þ E}}=‹ÅBOøÒÒÒúúz‡¼dÑkv­V Ý—Ðpvge…ªªªÖ ¦~\õõõ …Â| &‘Øšx®­­…ûð %Ô}ÑF¶6÷º^œ1_„¦"È=JKKÁˆ ¸ŽåëC‹pP „D"™> ãsÑZôk{üJã¥P(@UmhhhWJ{ÓÙDܱc‡éu v×ÊçB]›Â‰@ X0U1™L€qÉÍ€qdîîîèÁ‹A¨'¾ NŠÆôéÓÁžSVV–ÙÏáp8góæÍaaaçÎÃ\PRR²téRAÞyç뉀D"q8œÑ£G=:<<Ü.~Zƒ£££^¯ú»»;Ì#€9Fƒ²²2µZM$=== †@ `³ÙåååÀƒÜÔI£ÑÔÕÕùùùÉårH±€u:e®G§ÓÁ²Äá”——{zzšõÅÒjµ‰„ÇãÕÔÔnRœÕÔÔÀ«f-Õ˜ÐE³[;¦îF£Q¯×ƒz²­y£ý2€ÄzÁry\.·¹¹ä‹2àiV¹Áps`b•J¥˜ãà‹à >Ÿ_WW†©¥¥…Ë嚨 ÞéþŠíâ‡fo4{Ü”éa˜•Je2™ ö`kƒËápT*PÍDw¸Ù  èáh0ž±‚ࣣ£M¯»Ö?W*•ZãϪ×ë-ËRFƒ™°‚™LÊYKK æã13§ËöiðxüôéÓû÷ïùòe³õD"Ñ•+W"""¦OŸn}P³——×ôéÓœœ._¾üJÖ}6>Ÿ/0 +µZ ©­˜* hŠ5ÑAç»B¡ž æÎ; +Ð0Ð"ª®®N"‘¸¹¹¡ÍY Õ–#‘H!!!Z­–L&E­Vƒj=NNN€’]\\ n ÈÎ @É@éDÞªžT*U ¸¹¹@`SY”HÌ)Ö®²ëV^ ¾¨²²R$uÀ[ò_PaÖtBí°¹¹Ø3!ûÒétf¬õz}ö/ºuë4`__ßÐÐP³‹N©TjÙ- Àlïa2€`d³LÏT ˆß‚ç·R©ìÜŠz< mèXZP¢㕎ïÕ«æ:___FÓéy@ÒhËÂI­V›RN÷ööqyÈÿj„cv/÷¥b÷îÝt:=11ñÃ?lii1ëYÞ½{÷eË–>|811±_¿~ݺuûðÃ-¬@ÙlvZZZfffbbâ²eË‚ƒƒ­Ÿÿo6ªªª0㎮ì)‘HBBBà)77·ˆˆàu몪ª¦¦¦GÝ¿?33“Åbåççƒ:ܦ3 $ÞnW-"p=F)¥9ìÁx ©TŠq7 @ÿÕªZZZt:]pp° úcÍ.òªªª$‰——„hÑ®V«Ùl6ÆZ¨ÑhÚ•EͲF8A†Ø±òÙÈÿÒ˜òÓàS´p¢R©fÓgèt:kŒNžžžhÞÜFø|>нÐcäèèˆÞö­™%kjj ²èììlÖù_0²Y¦²h³­N§kSâ‚prË×X¦.SLCP–¬cƒ«R©0!e‚àêÄ“>[Ù+q”¨¾‰ƒ4\;¹ïþýûVKÛ4XAÅ”kÓˆ6Öa¢"À.+fð˜Læ¼yóÖ®]‹fa¿ýöÛ9~Äh3‹MW'h#SH¡PÀìÂÀŒC§Óñx¼\.{lµµµ0“¦“““L&kii§D"ðÆ掎Ž,ˆD¢‹‹ 8Öì XÂf³;Å“çµFNNNVVÖÞ½{M} ,Pp †µÌá)wwwP+™Åb•••BÔ¹¹¹ °fs‘ÅbuëÖ­›À@ J‘H$NÝÐA¡?SË««+‡– „aü¿ýüüœœœ˜Læ;w U»»»·¦ÏäËz½´=©A…ˆ—š‹²µ¢‹»ä°–à*nnnÏž=ÅÅÅžžž–£[ ØÀ4 "ÕX,V÷îÝY,…BQ©T2™ìþýûp½rôAF„&HËÔ‚¾«]€ÍëXïÁð; ¢¢¢Ìnd´‹ÃC„‡‡çååý?öÞ<8²«<ïîÛû¾/êV«¥níÛÌØ3v0Œ16 `ì EÊàr pp@X;N?–8@ Tâx «!ÄE±0”±ñÆhÆ#if´K­ÞÔê}ßû÷Çóù|‡{oßnid³é-—kÔëísÏy÷÷yz¹È;ï¼sèÄkŸ8É¥v¶æŸf–WVëR½gh´Pª¨Eå­¥³Á`p||™ûÞ4f³Ùl6³ú…Z­9·¹\ŽuZÈn‹Åäq¹\X#âAQ´`~¿xµZÍëõ¾ñol4äÆƒÁ·Þ|3£VrÿÇŸÙ[Ò\SôºN!­V bSÔ`YOÁ£ç‚N§“Édjµÿ¦ŸBZO‰(²T¼å0fÚÙÙ‰F£gÏžå&Ç].×ÄÄD©TªT*8Æëõ`Ó-Øß9½B¡‡aÀ~ëó[­V*•r¹\,jzzš5úî÷û‘*”Éd˜|Äÿi½ƒ· §¶Ýnk4šf³Y«Õ0NŽlYrͤ3­¯¯×€ê”J¥ÔjµXƒÁ@ã Êd²‘‘¢o‡zÍd2@ЏG@†a&&&‰ô`/ê’|,Pm.åî—J%Ód#ò'Ƚ‰Äèèè¹sçêõ:bAèœN‘D¹\¦ŸÕh4ýýý¨|¢BÇFM&Ó«^õªË.»Ìï÷ëõz†a@ˆ%âpy‹z¡Þ£Éd¼dï<м vww—÷¶ ÄĬ͚.RÁ›rl·Ûè©a½`jjо}W_}µÉ=¼½›¯–‹ÙxXrï½÷r?¥Kú¹\ÎmבJ¥êü©TŠ·É 7ž dpg¬V+†×j5^ü‰D255ÅM§‹ÅéééN+{à 7ä:ËžzKåw"t(FIoòŸÅbmŸ yõx<¨Sj4•J¥Óéìv{8N¥R###ëëë§OŸ^\\žë‹t:ÏçËår¡Pˆ†ˆ‹Å\gsmm Y~\†T*ÅÆv:$ë"‹q b±8‹mnnC¸ à+ۘǢ7››{úé§£Ñ(Ñõz½Ñh9™L† œÑht¹\¸‰D2??Ï{šð£•–ˆWzéëÃïåæHX­+++Pý\j`ü(Ö'Èåò`0èõz‰‘V=/è"®ˆ±¬dékW(XUÒ¤±V«­T*<ò8U*#ôg¾Ðne:ÞS¶™^=‡ÃaµZ±t ÃÐm®½‹§©—7Êår.¿â‚€qíµm<‰¬EÖÞ~[>ŸO§Ó(2sG²EÏ7‰â‹x¨´Z-Ð/¸çÆÆÆüüü3Ï ­äÕj•C)sÃntö£aO±Ûl6[­V†a.^¼(‘Ht:]±X\]]]^^>þ¼\._[[k·ÛN§³P($“IèÉ®%pLƒíuÀfFx¢¦S¶˜çH$"“ÉàoaÒ¼—›Eü³}êT«Uœ”K2N@kæ¶KõmIÛl6+|ÕjuWãt¨¦ÿ4…8nr¹¼Gìv»½´´$\ùÀ.†OM&“Ùl^[[cü $ó U*qhÑjª;\¯×CË#áÃò1···I¹\.Ãh‘kØä¹\N,#?ŒüŽ4þÚÚšT*Å…%‰l6 …P "WÎ2ᬂXÏÍf³Ífë Á×û|.-…Bk0êõz0$ôäDˆž'¹§_ a†!Æ)çóù¥¥%²°Åb‘·OéÇ®ÔèïǽËåv»ýÌ™3ÿû¿ÿûÄOüæ7¿A¹Õjmll`C–Ëåííít:-| îàA'z”q?hV«U:Ò ‡Ã,"ya¡Gw¹D‚/œìaàkww³]b±M)pº¾‘`ô8ÇGæŠy khüPþ4!x/¯‹Å]Ý=( €ÊH¥Rt¶Z­l6Ëjo@'”&Þ…^º e0PËh¼Ùl6 .H¿ÓédE-ä:Y»Ý®T*G8®T*ÙlÖjµú|¾‘‘‚S,0kÒËDÈΞ1¬&¢»JŠÅ"´Êîîn'š–‹L§=¹¢Ñh¸æ³Z­ X&:°‹F£P8F# ! ‹ …H‹“ÝnÇ\6Yg»ý½"ЋÅb«ÕÊÝE$<"°(, |Ôž8é/‘ñÅ0Npm,ï©SïjµZ¼»Áëõ ¼WøÙC9®&âx½™þþ~bÐJŽMBéÔn·‚Ã=«ØÉÅb‘aµZÍ=º@ %nÙÆ†öpY3ƒÁb±H$r ¼§‰¨KÀ^0 ä:›Ívüøñ±±1´ qסÙl’j¶Ùlfùà„é@ô|0iU%¯¡Û‹ •JeßܯD<Ïþ,œD"êÈpyUG«ÕÚk/ï[Ð;c4- àèÛT(B¡i¸ƒ—"o»ÝŽÅbÀ ‰D¼a´ÄãñÞׄ{Ó÷!r¹\ÀGT«Õ¬´­H$’üÇìá 2™ ZìöÄjEx  ·&&ÜÏs‰Ý>‡ò§&µZ5ˆÖÐîÖìôØØ=|в6Î$¦n-K'²r¹œH$X³kZ­v``@©Tær9»ÝŽª;ïå š§®R©Ð@333NS:¬×ë@ù³Ûí“““ÇŸ}å+_9;;k0ðÓx§|L&j3øzFóôÔ|¢‚ñ®¡¡¡N¾¹ßïïƒþ¢}ÜnÜ\߈$Qè“ÚÓÇò"ŠžÇo-•J,þx´ÓÊwtttÈ@¸~,Kñ˜Þüûžqæ­V ñN$y6›•ªÕjršh`bzP‡×èrï‘äŤ%"€+v»ø‡ÆéPv©T*»ÝîñxˆÅâ@ ÀÚs¹<ÍíímúÌÇãñz½Î0ÌÈÈH»ÝÖëõ`¡f½]§Óy<žJ¥B[&™LÐP®R©Ìf3úÔI¿F½^‡íïï×jµ±XÌ`0ŒŽŽô¡¡!…B!€W‰ŠT»Ý###W^yåèè¨Çã%n4¬ª°L&›žž&œŠÄ "S„È€î›Çñ^AW‚©caNﵿ9ŸÏïc°S®PǵZ­“q2›ÍÓÓÓÂ>ƒvPréØjµJ×C¡Ð>Œ4¹= \áyíN266ÖõòÊå²pXŒdË®“Ó”L&Ééà…Â5(•J·ÛÍEµ°ì´W¼ÏçÛG255%‹[­,p"‘¸ôT-n·»—Í×î&‡ÊýT0?€Ã¢îh4ŠÃÐn·IG2Ù*äXÊd2·ÛMŽX,®T*¨Ù ŸX§Ó ›L&ÖI. ÜqF£±µµ•Íf×ÖÖ¢Ñh&“©T* (U*•* ßX,ËåòÙ³g¹Eæ`08<<¼¸¸V0–YšššjµZ.\Ðëõn·;‘HäóyÌuˆÅâh4Z*•T*U"‘ƒÈó\{íµW\qÅ7Þh±XâN'ˆˆ^@À{šÌf3Í A[‚l6KO«ð&”ÄbññãÇ?Îö.‡ƒÄvkkkâ-(’ï¹xñbDŽr¹üرclÌçó¡Ù’hXlø%´>%Oõ÷÷›L¦b±¸²²" RÄb1¯m  0F£‘›gb½ô›ëëëûˆ;WWW»j<Œâ '*XÙK²¸<¿ß/àcáXýD¤ÿ8ûTt …«Ž¼M,Š6îR‚K0ŠÑ­®%®K‹_ûÚ×:%OÑp|íµ×²2³øj¹\Ž”(xi–—Z­†VÞÞBÞtv4¥S=‡ré2??/“Ɇ††@è…½DÎ}~šÛÛÛˆ{.¢Ûív8ËËËÀ ƒ"ØÞÞÎçó^¯÷Â… $ù@7r2©Tê÷û———޲3Xh—–– …°Ïé£Hö6¡iǬ"Ž Á> 2<<¼¼¼Ì0ÌìììÜÜ\¥R‘H$?ü0Ã0Éd²^¯'“É'Ÿ|Òï÷{<P½éõz“ÉtõÕW'‰®õÞÓ$0Î"¬{ÒßßX¶n6¡#àF£AY²°° —ËQ5$õ|šCN òžŸŸ¯×ë ißÜÜ @à¹çž£×M`̈trkN4 Ã‘#GÊå2w‚LÑe2–AiòÖÖ–Íf£Û²{¤¦”H$ô+÷÷®^ž"§©T*Ñ £ä-dHq—ÿ+îºë uHJX[³—–_Dv(³n'×}¸¤+l´‰÷¿ïÀë_ÿz–UÝë^÷–·¼å¦›nºá†àÞ~á _˜ššzâ‰'ÈËVVVn¹å–¯ýë½g0¦¦¦n½õÖC‹ré;¢VÈ„)w²’•%§c)Z)ÏÍÍ €Gø|>Ìiîìì„B¡åååN¥ 2NŽ žF£wïp8ù!°¤+ét:£.+pd¶··÷ÌÍÍÙíöcÇŽ]~ùå'OžÌf³÷Ýwß÷¾÷½H$âõzÏ;p ©T V‘T*‹Å¸<{jµšøãR©d½ÔK¸‡½S!èOC ¾ˆ÷ö$ƒƒƒž¤W’wêŸk? pvwwaWWWçææ„Ün·“¨3gÎt¥Ñ!IÄ X\\, Ü¡®¤Pjµš†îE†±Z­pÿt:·…ušXé1µZô/= FvëÇŠ¸4í—nœ\.¦ X~D×ä&¯KU¯×¹,dˆy{ŒÓÙ÷»Pëûçôÿüaš¦}~~þ=ïyÓéüÊW¾Òjµn¹å–w¾óÿþïÿN^ðØc …×¾öµ}}}ï}ï{qHΞ= —J*•¾úÕ¯Æ"\Ã/yÉKÌfóÏ~ö3$6Ïž={äÈ‘C³?Q(‰ .¬Â¤B¡ÈårH. LVÔ($KwoeeÕ&•J… žÙlÎf³ÍfMzd“³¶.ز‘X“Ë値Êd2R© ‚×ïÆ5h‘eé˳Z­þ0 œJ¥R©”N§Ëf³6›muumëV«s<ƒÂá0l6kB#œ?®«J¥‚e*—Ë]'ÿÑ=±¹¹‰{!ÜV(.^¼¸¾¾NÈ0>L<†P(´À Y\\D~+ Ñh"‘ˆ@F¯×çóùN ç@D ž¤Ñhjµ.ð²¹\N£ÑH$r#”žÃáÀe³v2½þÜ’°•ÉdR©´Ó5£»uO?ý¢ß†GžÜÚÚ2™L,óyÀÆ©ÕjƒA‹Å‚ØM =ã§ý…Ó}÷ßÿ™3g~ùË_¢ÙéŸÿùŸ¯½öÚ|][?þñ Ń>ø™Ï|ÆçóÝ|óÍ·ÝvÛÞð†|ä#N§³¯¯ï¡‡úìg?ûÒ—¾ôŸøÄüüüW\ñ裞:uêÃþ0¨‡ÓéôÅ‹SïB Ñ× Ãd³Ùjµj±XÒé4I.á)ÌrºÝîl6»µµ¥Ñh:å« …ßï—Ëå©T M$S„¾¢Ð ð¡YÆI$±®è_†aªÕ*¶+àþ …‚F£áa˜SáÅo•Ëå2™ g{{Ûjµ¦Ói¥R …àÝ£¬M],wwwM&ãÅñ4 år™¦i€Yí”Û àî:Íf3Rý2™ŒXë%UÈҕĺËd2F³ï£&W«Uò½J¥Y>Ö[´Zm³Ù,—Ë@À²ðf†a¸OY­Öd2Ù)Uh³ÙvwwÑÛ"ÜG§R© h¨ˆq¢×Áb±hµZîʘL¦|>O ª\.—Ë唽kÑJ¥²§îŒ®"•JÕj5kç7›ÍN™^ ï‚î ¡õz=‹u*÷íI¸ì2f³9&õÅT”¥Ré½ï}¯B¡øÄ'>Aüá877÷Îw¾óî»ï–H$Ÿþô§××׿ño\}õÕwß}÷Ç>ö1‹ÅÒjµî¼óNäþê¯þêÐäô(‹…•é¤=UÉÈ!†{ðˆ5•JåÑ£Gm6[4U«Õ¼á& ÍÎÎNMMÑ©*•Jåt:¥R)z¯766 Ýjµ«ýO"‘ 1 C¼¿V«%‹Ñ …úûûFc<‹Å&“‰›‡%|§°ƒÎ¾kcc#›Í¢sÁb±h4‡Ã_ͽ<òFÚ9Åê…Ãa'…BÁJªãD“K¥Rz¶”L&±.‘ôÎhøÔ}ïü"–M%Ĭ¼*›¼…p²tš¸â½6áñ,<‹-*|å‰D`ç"‘ˆw^›aÞ,ë“ …B××jµ"ÖcZK@ŒFcï4óÂ<„…BŠñìƒ^Èœd2×r°†ä/½ãžK}„ò&Ëñ#ê‹©+ßøÆ7vjgøüç?ÿ®w½‹ëE^ýõïÿûy‡N¥«ÔëuÞ±A´Ã‘§Z­qÇloo‰>×q–ÉdN§S&“ù|>Ä"ô½CÙ-9Êþ6›M£Ñìîî ØA¼øÒt^,ÉäßþdggZ‡¿¨ÑhjèfepydN9NÓG¬Õj±útX':‡Ãa²>¼ R·ÛÍB@š±ÇŸÖ‰SŠWáðæšXGÞ¼†“aVÓ+xíëëC$ðÎyïE§ÏÇõ8§FÈÞâñ8½ ƒßï×jµ‰Db¯Ó¾H×W¯×¹Ž£@^Mà^pM†ôK_â¹Á]¿ÎívÓÑúž˜Êzn阛sàåôüÊË^ö²ééé¿ø‹¿P«Õ/²Éü#–\.‡mz5/‚d ˆF£ccc×`{{;‰ˆ„fLöz½±X¬ÑhŒŽŽ‚)›Í®¯¯—J%Ú-‹Hè ]øª^¯—\C¡P€v€&"jˆN_¤R)úà‘§†††¶¶¶x÷‰ßïg†—a™$IT*ND,“Ëå…B¡Õj W¶Z­t:-“ÉÐyÄ:_˜šÈŠX'Úb±– – IDAT´ÛmácΧÝá,o|`4÷‘eªÕjÍÐèuþƒÁN§ëõúÁN¿ð.]ï/®T*È?c'ã7ªÕjUÂ\öîîîê‹Åv»ír¹’Ó^ïE ø¬ÑhduXHþüÏ÷sM8/!:oß™jEwOˆD¢»îºëª«®¢+á?úѾÄu ¥ƒ`¸µÙlv"›AVdrròĉW^yåñãLJ††d2¯2ÝÙÙi4r¹üé§Ÿž››ûõ¯=??‰DÜn÷ÌÌ tPìd2Y:&þõèè(} ½ð^wR`Рƒ0›Í6::j0Âá°pÖ¥R©lll˜Íæ™™µZM r¤Ùb±ð6h! å½$œ¦t:ÍkQ„炉©>@6 #ñèr4ôˆÎP«Õ:aˆD"§Ói2™Ö×׫Õj»Ý~á*èûË*e³Y§ÓY,ÉöCQÇf³ñæuŠÅbïżññqÖ#ƒƒƒ¼½Ž©÷‡Õ4>>NL)Ð7~Ë8}ðƒ<©UÖ?:Ù§^Xé.Uîî]0Y900@ÏwºB•JE£Â°.H"—qÿc½Êår=ôÐCƒáª«®zéK_j±X¾þõ¯;NôÿË¿üË{ÞóžF£ñØc‘·|èCzÓ›Þôö·¿}|||uuõË_þòW\ñùÏþ«_ýêøøø<ðOÿôO}}}z½þ‘GyöÙgúÓŸÞrË-‡V§GA½§ÝnÓڥͱ±1¹\¾¼¼|âÄ £Ñ8>>>11D?±1ÇŽcíV«uñâÅsçÎa–PÖµZM*•’éÎR©´¹¹i4 ‰oHºÕj%¹&±ñîÿNuaaœj±XœJ¥’É$fq*•J§iÖ©©©™™™V«D‰óçÏó*t:½»»;::ŠJÍsÆžžÆšL&LG‘;;;û5Åó¦U¦¦¦bêõzjß•fü.Öƒ[[[P2$_Já l•Nª‰uyôŸãã㬄d<GÇ ¯¹ø(Þup:¼½×V«U˜˜[¿'‚N T~H,mll$“I^‡Œ¾éäÔj5oxe…ÝÒ IânvZ¢®²²²B|¾D"Áêš‘~ík¢›þÛ[‰D"•JebbbqqQ8ÖÆ°¡Àk|>_</‹Fƒ;cƒÙ‹‘çû: …×ë%‹·d»>ŸïÂ… 'NœàÞf×ÌÈ w}¨S²’þK«Õ>ú裬—|øÃþð‡?,‰n¼ñF®EüÏÿüOÖƒ7ß|óÍ7ßÌzðøñã{â ;ÑofN&“ëëëÓÓÓ2™ìñÇ'sB …‚pV*ÞvµF£¡P(}É.U*•Hß±š FGG1! ~X†ašÍf§™œ&¿ßOæÐ¡ÓIíü.~‡ÃaaЉ‰‰•••Z­†ƒƒªØàà`&“aåP-Cs¹H$šŸŸïtÖÇÇÇÏŸ?ŸÍfYñÞ zràþMNN6›Í'Ÿ|r|||aaDôÙÜÜÜo@»ÝfêÓ7vn£÷G ¤ÓA2Ùh4ÐÌ©×ëIxÊÕN w`` ‘H çP©Tz<úÆq×·D‡]$¼2###ñxœÜ\Fc³ÙÐ'I~éää$ˆûz,%Ë+•J¼û«ÕÉ'+•ʱ±±³gÏîû,³†pÉj³œ'ß ð¨v»-l™ ¾»Âlll'÷JÅH›kZ§8 :ët:^+(‰Ün÷ 7ÜÐè û(U«ÕóçÏ›Íf.®è¡¼²¼¼\*•ÐnðÔSO|qqñÌ™3«««½´~ÕëuÚ_]É›E"»ÝŽö\¢hj2™„‘AÖÖÖ$ zÙIêŸ4 z½^òuù|¾¦ÁR©ŒN¯T*¼>¢ÙlF¦A­VÃiëäùŠB§Ó±N4” ‚Ë™™™'NØíöóçÏW*²h‚'wäm0Ÿ«P(H$Šo___禕è| }›:%TVWWœèñx²Ùlíj† mnn’nøJ¥ÂRñ—¾D–––h·£X,rÁz¸v½ëÁ¾ÿØc½ï}ï»í¶ÛMÅïDL&I8”ËåÕÕU­V[*•.^¼ˆñ ºJ©TÂH ðï‘Ü‚Á` ;¾PAéëëC³XøÖ××É&ï¥ìj±X fU*U©T"šŽÖh€VµZíTÇB#†ÉdB <â¬:œL&ÓjµétšL¹Z­V–L§¹1,‘F£1›Í…BA"‘¸\®?û³?S«Õ««« y"jAHkb'Á”X×üR©T©TÈãaÄb±ÍfÛÙÙ1 Üøƒäâ´Z-Ëå2¯©6™L€™o4“¶Ø9Ä«¶Z­àñúìpƒÁÀÂ~c ´"ƒ=NP Ù®F£Q,wê4‘àïé½áýRÄl6wbÊÊd2f³™ Gö‰Õj}àÞõ®w‰ß•D"rn1ÂFóù<Ã0áp,´´˜™™!{¸^¤Å?‹±*= …B*•bÊG­V—J¥½*©`0¸²²²±±Á0 ðxü|>¿»»«Óé‰*Èå„Ïôüå,Ï4 vEî!zƒƒ ®V«X¥z½^*•ŠÅb«Õ9.€“]‡#¹E:ŽÛ… ž¤D"l! .677Ëår,Óh4´ži·ÛDµ¥R©L&£T*; ¡Z%ê%z#nmm½pl{jµZ8ŒP«Õ{â<ÙÜÜdaS¥Óé^ºär9k`F€OôÓ/HäÄ’N談#™Lõ©0»\.ºiÒb±Äãñ}0FÊ¢hµZ³ÙœJ¥H(ìv»ãñx¥RASÜ^î©ÉdñxÜ`06'îä&ëLbz_,ïìì\ʤZµZíi‰Åb„ }}};;;Ò’¤fIgœNçîî. ÿÏz  ;? †¡³Fb±UÙl%X©Têr¹­V+Y·^ 6o›e× Ö °^OÀã‰tZa³Ù\.—Ëå²ßïïš>ÁD^¯?Xz$a¶§u;(‘Ë僻hܶخ”ö~ŽÀ¯#ÛX¥RqÝ”‹œÜn7\'¹\Ž&’ŽG#&÷-.—‹åÍéõzV¿T*Ó%bçXǯV«èóùâR<ºPki4¥R ;¡¿¿_*•¢¥;‰$ ‚»Kû¼©TêìÙ³ PÀã˜Æ§ d'Óùîî.Š=J¥²÷†4p’M®T*iÞ#^!¨€år¹Õj‘¼bˆ@ €O“J¥###¬#cµZ†ÙÙÙA#÷ÃQœøvEB0ŒF£‰Äd2]—a€\Ÿ(5Tm÷zOóù|×4ëDóbÄñ Ù*´~À'ô¢g÷÷‹ö!¥Réwؤ.“ÉhX—ËÕuZ@Xjµë4¥ÓiÜAðY^nŽŽÆi¯°o™L÷¾Ñh SY*•pÌð··;›ÍÒ‰u­V ú5ðYö‰¸B¬¾'òøCùà >`ŒTôü"T­Ëå"ø˜:Îh4Ò*dƒøw¹\ÞÙÙ1™LrâÍÿLÇ6›­Z­À@ ‘¯åFûûûñEõzž¸Ýnçm£0›ÍDS#­Ñhàí!ß…MÞl6¡aiV¡ÍÍMèÓF£Áëòïîî Oº€eŠ^s¿ßŸÉdL&“Ïç÷x<;;;Á`^"ð€”ËeÇCü_¥R9>>Îm’î8ãqÐB¶ ±jP=Får™k8Õj5MjÅJ´ö‚a±éëë#™L¹\Þ{n™°/U©Th àl6{°&9“ÉLNNNLLøý~¢^`NöjœöÚ§€L4ööwµZ¥!·1(úôn ëd‡¥R)Ú†c(Òëõccc‡ŠûOAúúúÀÒÄÝÄ àî°Ûí\`ô" E:QÕ¹\.nä´¹¹‰™'§Ó)‹kµor Ü€‹æ°\.»\.«ÕzêÔ©ñññf³ }—N§ …‚ßï§3Pñpìhжr¹ŒF»J¥B&mÛí6^I‘’X•J588ÈÂÍçójµš«Ý@Ä»ìÀ’X^^V©T…B! Ñ8RJ¥rvvÖd2¥Ói0(²êív›,î ϵD{Þ­Bî‘° ^#T©T:¥ Ëår/Í–û§^¯ gùL&±‘ÑhtssS8“Dö$K'÷²J¯×Ë[7êëë3.—Ëãñ€Ã¬Ñhâóùºö(H:åyÉ÷á:22"’#d±X°|¬\?/ô™\.¦Üææ&KaçÉENNNvÅX<”?DY[[#ýudº–èœ@¯°vw€ãA¬Ö2Ý DÖȪÇã1›Í^¯UbL “!\²“1ÛJ¥666úûû/¿üò™™™W¼âCCCÃÃÃÄ`ÊuccEÄiÅQç¸þh4Z«Õ:•ñ¹'´R©lmm¥R)hR†a®¿þúW½êUX"e~qFív;mÒæææ–––’ÉäsÏ=÷³ŸýŒÅ¹W­V/\¸€5F£=Ÿ___'Q#WtÒ<ôŸÜÁOǃ^|‰DBߦNšŠž• ²lÏáÒK$’ÉÉIäA º¨c ?Ø)|ŽééiðÆ G*ÄmªV«år™^¢Þeii Å]éôB¡+Ý…6¢õõõŸüä'µZuÙ¤ñOœß8 “þ“ÉÔËøCÉ ´î$“I42 tE Ek’ÏçÑŒër¹P©^\\WÊ Ê€€Ê —¥ÁVžžžžžž†c+“Éèó¬R©è³¼N•JÅ…€ÐîÔÎÎt|Ñüü‰ö4ÛíŽD"tþWŽƒf·Ûé²B¡ÀGÊA¡P¼êU¯"H¾<¼^,“SÇIâK¡P4›M©TjµZÏ;—N§777iôF3==MR&^¯'÷F#‹õÈRûEHÊY‡]¡PêôP(„|Ýèè(f1y׎<èΩ®ãŒjµº¿¿ŸUãfíÛäôÈóÅËëå+ –Eî Ëc]ùÂÂÂ>ÊHÍfS¥RÆ®‘n«Õ’Éd´[€€) ¦R)€½rç¢ÈíÎ êÔ­{ Õjj)ììp¿Šµ)ñi,·èR´ý="B>üðö¦D"½âŠ+ˆŸ‹ÅfggIÄšJ¥.\¸àõzƒ}äÈá°´\.ÏÍÍY­ÖÑÑQòàéÓ§ù–CÙ«4 z£÷÷÷§ÓiRZ̾E"‘ÓéŒÇã^¯—Þx …‚ # °Ò×*•ŠTΕJ¥Ïç‹F£ ò³X,¤Ñ]?¤5yccchh¨P(,..àJ,ƒÁL&“L&—––Ðæ@fÆq 2™¬R©p¯A$­®®¢¾Õjµ¸-Z­¶¯¯oyyY­VëõzÖæ'¨×ëÑY§T* …©ºƒùB¯××jµL&ãñx‰™hĺK€±«P("‘H©TâΣ …Ó§Ow:Ñ,ðrÐT*¯#X«Õ¸¨9$à¥Æ«p.E«¬ŸÊºMÝ.â•ÁÁAî:x<žÍÍMZ}Y,dz»šF¯×‡¹%4½^ßl6;ýØR©Ô£Šv¹\ù|žTIé#y)"ˆm­Vk¡PàÝa´h4šF£Q­VM&S&“i·ÛÅb‘ûƒm6[¹\à|c‰ÑhÌårÆ ÈåíõËårÞö ­V{õÕW“üÅ/~ñÁüå/I°Åž|òÉ·¾õ­ýèG­VëO;;«R©þë¿þK.—¿ò•¯üÎw¾3;;û²—½Œ7ÛùÄO\uÕU"‘è»ßý.ÙôÛÛÛ?ü0þýš×¼Æï÷ÿ÷ÿw£ÑxûÛß¾µµõýïÿøñã‡ïi§·ö†ÕjEAô| (ü_‡Ã‘N§YÖ+™LZ­ÖVÁ>©T*™L–Ëåè6‡Z­‡ÁŸ]­V­V«B¡ í¥R §Ý`0T«Uš}µX,ÎÎζZ­H$ …2™L­VÑáET(7ük“[,¾©xY¡P@Æ’è/ÚA†gI¼´V«µºº*—Ëm6&pyï…V«…Wʽ†aèVi eìõ¾c˜šåLØíöÝÝ]¹\îv»d ©ÝnƒA«ÕÚ»qŠc§Ñ1Öv%gßápô>6ÔË5ÐПçÍ s% d‡_œa¦ÿøÿÀ¹ ‡ÃßøÆ7ðà÷¾÷½;ï¼3‹}ò“Ÿ¼óÎ;ï½÷ÞÅÅÅ;î¸ãW¿ú÷Î;÷ãÿÿ¾ï¾û 5âñøwÜñÝï~W,ÿà?¸ãŽ;¶··?ó™Ï|êSŸ‚=»óÎ;þóŸš"ZÀHË ´Ûí¬ä;:ß:}‚†H$"¬%e2™Ãá@¸#•JÉ–ã¼éÐ\¥R-,,ÌÏÏg³Y0áâ-d7NommaÒ¶âWFƒ›Í¦P(Âá°Àþï„)L?žÏçYú—öN™p$²Ê/è|(}ØòöõzýR=k« NÆ}Y§›‰DÀ#¸K„;x)êK¡P°ÐÍY×Ð5×µ»»ËjOek¯M»>F:¦;ó¾á-„F«Õê…*‰Œ r^îF°÷ëã ›xw:=2îI>ð¤Óéüã4ÑÉ“'_ýêWŸ;wŽ÷Z$ýä'?yä‘G¾üå/“ŽR©¼ñÆÿõ_ÿõ]ïz×ÌÌÌüãX,öéOºT*½ãï¸çž{^ö²—½þõ¯?4H´tJÓW*V.¾T*¥R)è¬N TápÓQäÃéóìóù€³€†¥l6[*•är9lI| ×ëâÐEY ?¬®®nll ´BQHüòù|¹\v»Ýn·TîDQ©T*šÔÀb±UüRò\W5a·Ûéü³R©ä%hh·Û‡Õ)n> {uªÓÔ„i£Ñàæ`1Ÿ‹¢x§éN’Ië„Ï‹¢ëðþ:ÇÀa[B«lÜAá· /üÇ^sëÄõ1›Í­†‹…FÞ° ¬p ·fß–¸‹qÚ9#÷vrKpõzýR Wûúú´Z­ßïçvf³Y¬¯D"éDS½W¹çž{ž|òÉr¹‡ï¸ãÞÊË_þrO¸úê«Ož<¹²²òÌ3Ï|ðƒ„^Ðëõ~¿ÿ®»îºþúë¿ÿýï“äÞ}÷Ý÷ï|§Z­~ö³Ÿí}ÎàOD¸«Ä72 ¬ø£T*Y,aȲD"Ñ騠lƒ©uF.j«ÕŠóLˆr¹ÌÚÌ^¯—¥ŽˆÌ›rXZZ"fÕ`0èõz(Aà“’C¾»»«V«ARÕh4Ž92::ŠA`r 9zô¨èytƒ‰‰ ›Í–Ëå`ØðT½^çͽƒ x¯Z2™L¢;ãw»7¦;‰.ê¤OK¥R/ºž·âEß&ÀŽ^ð|>¿ï)Wô‚’üS)(^!ipôñx\ª£P(ЫDz n·Þsˆ5#â¾ Á;§ÉÉÉKß1O¤¥R) qÛHP³ÅÚí#©Í+³³³R©ô5¯yV«Ýß´¯Ífóù|ŸûÜçyä‘©©)L®¯¯ßtÓMf³ù _ø]ƒý;þü7¿ùÍCkÔ»„B¡f³)“Épz!ÈÅuÚÉ~¿œ~N#žÊf³ÉdÒçó²u€ëõ:+ °¾¾žJ¥­V+R bçÕG¥R)—ËÁ Ñjµ‹%‰àÈ*‰ èÌçó6›íÔ©SÛÛÛ˜ö‹ÅbõzÝh4Z­ÖX,V­V†™šš’Ëåz½>›Í* ¦Æ©f³Ù©'¨«Øív:¡„"S©TêûÒµJ§¸J¥R Pö@€‘‘ÒÕm0x×A£Ñ°æ”ÇÆÆx§'éÛD ™0•J¥ÃÃÃØ6‡ƒÆ×b±ôR=ýv]‡Å±ÈÞ`´ye-‘Ùlf±³âW˜;ì‰ Ä8a»ÝfõžK$’v»¶··YކÇãA"EàkhRµe|||ee¥Ñh`¤Ëb±0 ƒtp×ÄàÂËÏÍÍ]~ùå?øÁö]ºí¶Û¶··9rå•W/5—Ë) ‹Åb2™d2Y¡P8~üx&“ ‡Ã¿øÅ/þú¯ÿZ©T~ËRü'/GŽyî¹çs#f3ª333ô!!ís.\àn?¹\ÞK*(Añx¼¿¿ŸŒúBOqJ´A⎘½ÍÍMò2¢àðl»Ý&­X,nllw1 ƒA%™L611^·Û}õÕW †ÙÙÙ{aœŽD"A¦F[nµZðÞè+$‹Óµ&ÑÑ“•HÜnw£Ñ 2–þ–ÑÑQ.­×ëu86› »ýÙ€„#›¡¡¡Nh«««äj;­C©TbÍ)///ó!†aÆÆÆ.\¸@ЉD¢`0H†xHë©OOOÏÏÏ“ KÄkoúúúªÕ*Rš´Zë~A[âjGFF¶¶¶:)ÃN:yee…w‰`¸þœÛíN&“’·¬SF_Þžòf„vLµZÍápT*ÞGMv H/^¼¸§ä#=İïÞ¼Nw¥ëkÇèè¨B¡P©T@ÛÔét`¼®T*x*/O±°þärùèè¨Ëå’J¥}}}V«U"‘ Y,–áááï~÷»ï~÷»O:õþ÷¿_$}ä#ah6›ý~¿0…ÝŸ¬Ôj5À§’Й´ØÎÍÍÑäd³µÛíÑÑQ–³U«ÕÀNKÎ'N÷Ìã@nmmŒŒT*•B¡099)‹s¹Üöö¶X,æÂšÐÇÿSÆàà ŒF£J¥2N“ƒÆ:>Ÿ/ ùýþóçÏÏÍÍ™L¦±±±ÁÁA—Ë¥×ëwvv®¾úêz½¾µµ•Édär9©á“¯Öh4z½ž·9ùx1K=z£^¯ËåòF£!—ËiO4‹%“IÚÖV§>/þB0dF&“E"‘z½®P(œˆ, 0Q {EÏãËtú(ÖS\ý¦’ááaL&±Ö»D"‘Õj%•3b™È•sa; =NpÒ9d¥R‰. Éq(¸‹@_<ýìàà ì£essƒ}¼ëÉbˆ¦/¯«ˆã‰ÔMÿ矮¸öÆØnÚ"J>öðƒO=õ±X,œâ˜~‡‹Å†•ˆ:c Fú{ܸyi6›,£-‹a_ßò–·|ík_+—Ëä¿þõ¯ŽŽ^wÝuÜäß!<ð¡ð :MxàsçÎuñ³¤R î9{ •¢Å®Ýn $FFFr¹\<';Ùh4Êd2’ÔÒétöÏÈÈz²é“U¯×yý_µZb²X,F!ºV«©ÕêñññË.»Ìh4þæ7¿I$»»»ÛÛÛƒ¡\.‹EµZ]­V{ÉOèt:Fär–«ŽBÝÖÖÀ¤‡‡‡a¿±DÍfÓápd2™=^hN#±Ô¾o“ðÔh4tC¿Àíòl§iß^¶J«ÕC×Ì“O>IHy—šu ½ß¦?°“ð~‘Õjm6›$ÊäU×û¯×»³³ÃÒÛJ¥’‘N@î¼óΡ¯}â|$—ÚÙšºKk¹\¶LˆœÈf‹Å¬g¸G¼;•jµZaºeâ¸ÙívÂxM'îƒd_ž‹Åãñl6‹%"g–Œd²d2ˆ†Q«Õ=‚ñ_Dƒ·â6u:Ñû£ËÂk(žÜ¥RIóæ­¬¬ìÏ2‘up»Ý—]vÙÐÐP³Ù—k§×ŽˆÎ‚Û$‘Höúcyµk'¥§×ëq›è·$ ºg[š«®{o€ƒ…á?BEM ¦ÿÎ\ IDATÝ{¿ƒÜ²Ö,¶Z-n|Úûð6ŒœÙlîų¨×ë¼Óõ¸…BÁ5Q'Nœ8šáCù}NG ð¡îÑ JT§\.ïåvW«Õt: ÂMúƒ‡£þÜî,™LFÈ<«ÕjÀÜ©T*¹\žÍf3™ γÓéÌd2}}}èé’Éd»l+S­VCx½Þ@ €¾^©TJ2{€‡:®×ëÂå^…B¡Õj].W*•7y"‘Ðëõõz½\..%Ðô¡< òóõz=. S8%lòYv¯Ås§Ó‹ÅJ¥wž”Ü‚Ag6›A¬ƒw±^o³Ùè¤%-v»=‘HH$F³³³£V«“Éd.—[[[£‹X¼Ž;æéÔ(±Äýýý{Â×@z™6?¸MX:xÜqr2`ƒœËåÌf3 UZ­·™E©TÒÁ™F£‘H$¼á¸¡éÔ-=b´ã^0 c0XöiÿdƒJ¥’5 vP’J¥z™¯êz#_8fåCù}VmÀívc2Éáp q‹°A û|>âE:N™LÖßß/“ÉL&S2™ä-ö’o1™L@äd¹ÉÙl–7+Z)òçúúz£Ñ@þß‚™'X z½NTI&“!¡l¼+++ív»R©D"NúÂáp­V ƒétZ,§R)½^ïóùx³ñx¼Z­nooc²’tjàY ìÈd2´“a¨¨ÝnÓ¸D$öåŽÓºÝnG¾—3^(às‹ä}—ÀO uAü#?õÔS¿úկбÅz±ÙlÖh4(6‡Ãáz½N €Åb!1\³Ùä­'uEç½`zÚ—õCHl@niŸi6›\#‹ÅhoFàææóù`0Ø#úFÚ¹c¡\.ã þ–qúÛ¿ýÛ}ï¤K7!/„€ü¦V«]J«å¡ü :  É …‚V«%Éœ••°$§ÓinÀ„IR“@p¡P`Æív;NÒ˜„ÉJ:³ÏçwwwÑûÃ0 §‰5›-âë2‡-D/ýøîîn? /l6€0ðårùÈÈÈÈȺ1/188‹/%7AT«Õ´Z­Á`@ϺÀP~W&“#aZñ•J%N'—ËÂáp£ÑÄÐ\IµZÍÛ'}éR,ÌF×Xš–)NÃfðÀ¡é±Óù|¾f³‰ÛT,c±X,ã•©T*õzîÕ¦Ÿ"Æ SbÜ·÷îñ³n‰f:EŸØÉp€J^¯—N†—J¥‹Rôþç5ðôÕt’ãåN Jöm`Æ¥WÒ^ ‡º÷Á‹Cù’P(Ôn·ëõ:QådÂGygg‡ë—@£•ËåP®ÕjËËËtv¹;´¢Ñ*2•JaW"‘°z)Óé4m` †X'‹àøÑ$ ½]s¹Zû–=B­€%€dÛ0>Ç Ãäääää$mVÉp¥Ùlî4‘CëŽNy9b×óù|>ŸO$ô5˜Íæ+¯¼r|||墮²?8Ñ‘‘4Râ¦Øl6͉D‚“”]§5â6X²Þ’J¥†‚¹ ^,»Ž~v¥›Ü&D`t¥M«ÕvâðåZâýõk/v}[a ðË%ŸüÄ'^ŸW&“½8¬µ¼”‡ò‡.###¤C£ƒ7 zlWtRÊù|žîòr»Ý¨$ÑÕSÇsôèÑh4zôèÑñññ‹/êõzÞ’CáHñ‡Ñh¤?ÁwŽíj2™@& …È/ÝÜÜ„I ã0Öö@íêê*Ã0,f9´ù€`zzzZxV«Õ P€#t»ÝPåä”Jåàà \.ÿ½:t`€%[%•Jáî€a’¾ÔT*Åk•Ýn7šÐàЋE…B!À1¯Óézá½£#išL§ÓÍÝ«=‹Ñ»ºT*ñ•JÅâТ‘öãöþb‚™ ”sv«î*&“Éãñ`„˜›x¥ õùóçëõzW§Àjµ²Æ¼1-Dþ$ Î‡ò§&+++£££¸ûƒÁëõb^gdd$‹çÚjµ^uÕUn·ÃùÀ‰hµZ½7h­®®âØÔj5N744Ä0L4U©To~ó›GFF0![, ‰ßï'Ȱ†kÉi‹Å¨„£—¬Õj¡hÄ0L:F¢^¯§› r‘º 9ä¢ç!+çççÏœ9Ã=MZ­V"‘€]‚|àÀÀÀ±cÇHÁ¼P(lmmÑßE_3þ‰DX®.¾šŒ¹ŒŽŽ’ú?ýF"\bVÖ¡æe_åU—¬Nç±cÇÀ±”f³ÉhÃ…¡’Ö’äš LW\À)¥Ç›dcõ‚MMM («z½ŽQ6Ö"ˆÅâ®Üµv»}dd·ixx˜—ÉžÞEØiëæ ÖdØòò2bÞÛGüá$ÞHÇJc/ ªét: …B!nCN*•¢›ôX…Vˆ’5ŸE3á"k/ ˜v(¬Òn·çççq³Ùl0´ÙlF£±V« (Ât:ýì³Ï6›Í‰‰ pŽŒŒSChy@¶ §P(x<‡Ãa2™À°±±qìØ1¯×‹ÁR‘H´¶¶F† ë–J¥˜ÓDŸÚ‘‡††ÐhG,føIã9M«««N§sqqñÂ… h6™LV«ukkknnŽN?¶Ûm³ÙŒÂŒB¡À"Èår´Ûmò8ÑngÏž…÷‰¬1 Z­É%ÚŠÐó§¯×K—IÒé4 ~L"‘°¼{:)JþŒÅbsss]û߆‡‡e2tëîîn4ß1Q2~¿³Yív›îø=G¦k”J%m~X{ ĵ¼–ƒ„d„ÜårA³)•Jî±$§R)ø7ðºzqÙ ƒÝnçn0 ¥½GóBuêÎ( †±c{9h]Ö¥-¾ØJ§Ó9Î}OpÍl×”w/Â1T¤yC®_$Lê¦çC3ðû,n·›4 ïìì€ô‹îáV«Õõj< …z§s8ñxû„a•JEJî&“Éb±looÏÎÎær¹P(d³Ùd2Ú ˆF.—Ë›››F£Þ`0lllŸB¡P˜Íæp8l³Ù¼^¯Á`ðù|,^[[ÓëõJ¥’|N§+  .Äh€ÖÖÖü~.—ÃEµZU*••JÅívG£Ñb±È0ŒÓé ‡ÃR©”r–±z¼¥xâ z½^£Ñ¨V«Qó¯V«´&{>Ad6›U*•ÜϬT* Ã;v, ¡o÷¹cOÐn$“Ùjµx“.]9zx÷‚Vn'•J‘šåöö¶Õj…o-ŒÒi·Û;µEMír¹z™8&ÞáÂ~<ùw__¹~ZÞNÞêŽ\.t…\.gE~¥R‰>Y†€â ˆR©4]-è]ÔÑ8=þøã¼6¶“a4›Í„Ž·G1 •J F³ï&:Ô].W½^GÉZ§ÓÑŽ’^¯'„¼¼H…?ÿùÏ;-®T*=zô(1NO?ýôêêêk^óšNSo{’Ó§O_¼xñ•¯|¥Ýn¯Õjÿó?ÿãt:Ÿ|òÉË/¿œ›z^[[{ê©§Nœ8!ãþÓÖ¹ÕjµÅb‘Öz¨Ð°ük› lAôg2™R©”B¡Éd …"‘H”J% ‹cƒ‘®°óe³ÙéééH$‚#Ýl6N'Á8F¯D:&Û’d†p vòîî®ÑhÜÙÙAfIô|ÿÝ*‹¤Œ …BQ.—iRT\y¥R!+Óh4677a¤÷Ôî$“ÉT*U.—“ËåhFçvƒÁºXôì1 £×ë;¡Ñ vL§Ó {rGDÒ)Æh4ö— T*†!‹Å²£ù|ž60`! ¿}(ÜO&Úœ«‹H:qOX&“i}}{…²¾¾"ZìRl’®_˜ÿJ¥ …Ìfs×àcU]!á–^†_%ÿ_C`ži@t½\.—H$Âì)¬XìcÄž½@? P>y? w |SiÏípÿ»âÄ Ì*‰zè¡Ûo¿ý ÐÍ¿÷½ïÝ~ûíPårùöÛoÿâ¿X(677yú_ÿú×·ß~;¯ßp(ô«V«]Ow’w´“Î0ŒT*M&“0Eî¬Õj´ÚÝÞÞn6›7Þxc @î –P(T«Õ@ï-¼ÃI.^«Õ†ÃáH$¢T*•J%+§ Q$@Ÿ‡ÃAÒD2™Ìb±äóy$Õ- ùp<Åúö®Ð×À>G©dÁ,Ì­V;888>>n±X°€¬%âê© .,..’´gðÛRpvQt øª\q:$Ó…›Ë ËX^¯À.r¹\Âí6N§½´{ÑãïÕëõXjà·íÆ{kk ° …B¡Æ/¢«0])¦ˆâ}ÑDúÖ·¾õGϬ ¿³ä¨³ xyË­VË`0´Ûm¢|6ÔÕ`‚.½‡ý¬¼Á¾¨óSi˜Îð0]^~Ùå-‘P8¸°°ðàƒâß·Þzëèèè]wÝ¥P(þáþáܹs_ùÊW®¿þúk®¹æË_þòÊÊÊÇ?þq\3¤V«¥Ói¸‡_øÂ¶¶¶þñÿñcûØØØÙ<ðÀâââ?þã?Òd_â"—ËM&FsXîžB¡@8ò[wœSÔ%%RÇÿC, gÀ-‹N§C1 Fˆ05c¤Ó©­V‹õí Šw8ÛÛÛø.½^`æx<^¯×Y'Âl6 !xù|¾¿¿ŸÎ7 #c2™ÈƨV«°vpår¹Ýn'dBn·[àÌö÷÷ƒm`ggÇ`0ô-ˆd‰p®£Ñ(`ýö§§ö)ÇRG¼6‰V8¸xœÕEýÀÚ*¸Mõzþ½DãuŠù†‡‡µZ-|bz€žr•Ëåf³™öúúúâñ8ŠéõúZ­V,q={{Ŧg k—êt:†ah‡@*•Úívr%V«œXb±˜»D½\Þ>}ÉÍ7ßÜõE¨âÒ¶'‘H¨`–p¨&`r”J¥Ûí6 Z­Vxß{<ž}„ì[ÖÖÖÞûÞ÷nmm]sÍ5«««ï~÷»···¿öµ¯}ë[ßBÒü¾ûî2éøÃû—£»ººzß}÷?þž{îùÜç>7==}ë­·Þwß}<ò^pÿý÷×ëõG}ômo{Û¡M¢v#ì„Ûí&~MSK¤P(tê,"*•Š7¬V«áüêt:؉………sç΃Á\.ü:ÌZÑìm¬³Ãr¶ªÕ*Wív;Xß #œä åóùR©´±±.Úl6ÐÎNNN ŒŒŒH¥Òl6»»»›N§Ñ ^¯×ƒÁ`*•Æll>ŸÇãR©”´¿³òZ¢çùÎËå²Ñh ‡Ã ¡¢¯\¡PÔjµP(´oLñ@dµþ³–”d¸³Ò¼»ˆ¾M´3m4‘ÒO§Óø)¬VëÈÈÈÐÐÏçS«ÕD’!žÝÝ]îž, «qj2™¼DÄp Ì ÁŽŒŒtš×fÝSŒ¨c,K¹\Æ"€1™ÞE.—‹¨êtyûøQ=ÁY,›ÍæñxèN98þäOÌ:Ðï· mÒpãM&7+X«Õ’Éd©TŠÇãn·ûÈ‘#¼‘‡Çã©V«/>Bk6›=}úôÀÀÀõ×_ïñxžyæ™\.÷ío;‹½ç=ï!/ûÔ§>uæÌ™û￟•üÝßýÝu×]÷çþç¬ÇçææÒéô+^ñŠÛn»~üºë®{ó›ßl4÷M%õG&h%o6›86PÜÉd’¸¼ƒáétšö[NçÔÔÔÔÔ”B¡ eöL&Ûžì¬B.—Óëõ‘HäG?úÑÙ³gDt™ßïg%v¦¦¦L&S>Ÿo6›.—‹T x6ð,ÐFìF8É‘©T*@¬€4›ÍÙlvgg§P(;vljjÊív3 Zz›Íí¯R©úúúB¡ÐÒÒ’N§Óét˜ m6›¼æ¸Ìà>}úôööv¿B¡ OƬIÇÿ 'ýýý䈘Êh4 Zò€ãúúúèôk«à6‰Åâþþþ©©)¯×[,Ѩ©Õj‡‡‡†¡IO çÎxP X¶áرcØ®,ÕŒ{166¥‡T?¹r±XÌ;ÿ$,½`ô•J¥H$Â;T­Vé2ÕØØPµ°ù|ž®ì¦R)zaIúç/Ç8]wíµOk4š¡¡¡L&{Kgf›Í¦J¥"-ÿ¡Pˆe3oó[6›eaNOO·Z-…BqÙe—½ä%/i4.\àýÁ,FZ|>Ÿ]ã !ÓÓÓt§»H$ÂÈäää$ï|ÀG?úѯ|å+_úÒ—>þ ]‡6‰Èúú:ÏÁ„i¥R¡éM‰&"E—éééF£Af’ÂÜ9¨Fƒ7Øm6›Ø‡v»=ooo+Šb±800IÞ ™4Ïf³ËËËp‡ÇÇÇõz½Ñhd)Â#“Íf;aÿ#RÉår»»»@`ddäå/ù5×\sÝuס0‹‘þÄs7ÞxãÄÄ„ÛíÌårdZezzn/H0Ÿ›ÏçC¡ÜpÔÒh•Šü¯óJ3µ³nÓ !Ñh”è"Ì çr9–Vi·Û¥R‰ÌJÇãñ®–ujjjssÓf³]yå•Ç7™L@•ÝÜÜûn“Ýn‡{],üñ‡~+ž[\\X‡`0xäÈ.jC»Ý¦¤ê*,ÅK´ ìq/žýúú:ÆpÇYGƒDT©T†††ºV1”Jå±cÇö4§,ýéOú–÷|¬ÓÓÅbqssS"‘¬¬¬1CÚfgû›YiMÒ®Ã5-ËËË'OžÄ4C³Ù´X,±XìÌ™3¬*%M Ét=J¥ÒN1ø !‹úÑn·£õ¡’¬± –ôˆãû'+ÎÍȳÙlív;™LLÞûf³É fÏœ.--a;5•J1 333súôiÜP¹\N&gq ˆ?  ^"‘¸páfÉ766èý9<<ŒJ\.÷ù|døÈI Ð%¥,|¸ÛíîïïO&“‹‹‹KKKÁ`ÜíHµÛmÌ?MLLäóùçž{mî™L¨pÌ1•LêËËË‹‹‹Â«Ý©›K¯×ët:ºç˜~#˜µéZH×¶=¼Åét–ËeTYoAÿz»Ýžœœ]噼…@&ö¢L&Ó±cÇÊx~ÅgÒõl@o\¸pûùÂñD©Tb5‘’Èill¬ë¨Sïõ$ú£œNg§è™å‰(ºW"ããã›››¨<ˆ™a˜v»ÝËÐQ¥Ráý½ô}gùôqç:°F£» &àœN§€bí*¼ctä.>þøã[[[!ŒD"çÎãöÏD"‘®(CCC=’‘ô"ËËËÏ=÷ÜsÏ=‡}>_2™|î¹çÒéôÐи}ôѹ¹¹ýèGKKKÙlöá‡~ðÁ÷:;=00 V«/\¸ðÎw¾óÐõêUQcƒ@ í\Ä+ …ãMÍfsuu•Bìëë3™L333dƒ% VíÚëõ^¼x1›ÍF"‘ÝÝ]âm ]¼xqtt”Ž0VVVÀZ È"âD÷õõ%‰z½î÷ûa·4 8Ëå Å7¿ùMë% 0,ãvJ¥ÖŠŠU¥R‘¼ºR©¼xñ"Q¬:ŽvºU*t ð ½dH#_tJŸÎžF ¬€ ×àp8Âá0é[a½Ån·Ûl6†a[­–\.çΊúýþý¥}>ßöööúúúÓO?MóSÈùóç.Ãæ¼Oñ–v”Je/w0‹í©ì‡d&ùóÂ… ããã$o,‰Ün7à/]ër·JG %±X „˜b±(“É”JeWÖAaañõ²dSétZ.—£r+ÌC#`Nº(5µÒñ²YÞ,¢â‰‰‰S§N}ç;ß!{ýÞ{ïý·û·O~ò“"‘èþûïÇvT©T§N:räˆH$9uêï\Ôèèè©S§Ð^/•JO:5==Ý××wêÔ)¯×û7ó7ívûþûïÿö·¿¤Çã9uêR¦W^yåáh0ëÀ”H*•Ò±æÊÊŠßï'h§äA@Ö!o·Û‹%“É8Ît:ÍR ƒ …âÉ'Ÿd½‹øÈd“[,0&Ðs•ŽÓé$ðz$Ǹ½½A«X,¦P("‘Pe«Õê¼ZŒjÍÏÏ ½^ܲZ­Æ|¬Ýúúz<ÿ€ná°“ËP«Õ‡È{$åNWæN'\F TÐe9Ì–Ä&½^º‹H$ºüòËñ‹_à)b`Ðþ×l6…õ÷¸ª#öõõ) ÜåjµÊ%êú-†Åò[æôz}>Ÿ_[[ÓjµiCÙØN¾Èôƒ.—‹qƒØl¶®X £ì‘vA@aÅ qb±˜J¥*—Ë333 Ã<ñÄhÌéåcÕju½^gЩTjgggh ãÔn·/\¸ Õj=Z¯×1…þ©«ÕšH$°ÃÀÁƒ D“É”N§õz½pÊžôÚÌÉãô<ÓoWþß?o½õÖ[o½•õüC=ÄÝäÁ›nºé¦›nâýà›o¾™tEj4ò–“'OŠD¢_þò—@àCúYák®¹æšk®Á¿?ñ¢ óþ¡ˆD"A‹wz©Ñh,--i4 5›M肱±±'žx¢—˜Iô|ïúúúå—_‹ÅXSh[[[ …¢¯¯XÄXÜN¹\î…ý™hU™L¦V«ÉÙÆtçÌÌL,C_ƒèù ¿\.ÏårdŽV[[[^¯‰‡z½žËå4Ùl–Éd8M°å …B.—çóy@idŸ666p6¹“•ëëëx ×€é|Ôêê*·Ö¢Õj{áìQèçƒM†×ëõóçÏ÷þzƒÁP($ æµÜ7„V¾ …‚ì ǽàj*­V‹A7b¢xçs»¶hc‰hï§w) ,‹ ÒEð|*•Êr¹¬Õj-‹ÃáÀ(^6˜ñ],t×ä#ÚX÷×nÑ£ ?“ÏçÑM¬#ß'´°ÌÎÎ9r¤“•ý]‘¦Óé»ï¾{ii øIozÓ›Wìv;¡äÅWv¹\Àï)‹z½žèÇ DT 4pØé?Ãá0ËÍÄÄëòò²ßïw8¸Q”–N€I@çËd2f³¹X,Ã@^¯Ãk3:.ÞçóÃ$ë ®E& Üí‰$‰8NN‡À3ÂÄ…G3ºˆjìÆÒÑ ·^¯k4št:-púXŒõtˆÉ}1Ë™ ëp ªã`ãr‹Åš’t8»»»ÐZ­V©T‹Û@¸þPƒ&¯Ó齤ˆÓKM%@ÞJÇÎÎŽÓ餱-ö÷{yß‚Ó$à+°¶ëæÂ9(‹ÃÃÃ"a†×˱ÙlÜ^üñ/¤\3«V«éN˜KÌæíoùPÆêt]&ËÍ˾EËäää ÿí[Þð†7( hŠ»ï¾ûÆo<4E¼.-´j~Üî,Ú£mƒL&ÃÈ]£Ñ°X,b±oôx<‘H„öH,KµZ%E¼{Òëõ¢ËöÿÛÍf«Õr8„v¶D­Vózô¤žQ3:ø@—ËØV™LfµZ‘cdéxo6› Ýç‡C­V¯¯¯«ÕjŸÏ°€µµ5‰D‚ú®³SÙlÖl6×ëu2á$—ËÝn7"9ðÒg-ÚŠï5GÄ»{­V+—Ëi˜éý]ÔëõÀƒgm$@6§oºT:}2¡Ýuîß¡ŸbÍÛp&º–Ón·¹ ƒý-Qר¥Çqd2¹¶¶–ÉdÐBÂ}kŸ ˆN§ckI¸)TÔ`{IJ”pƒAüÚÞ?Áív+ ¬N׊ëöµ¯½å–[n¹å–CË$_6›Môs¢6É*Ÿ²Œúw|>Ú£ãñx6›-•J(À±jæôŒÑèèèÑ£GY»´^¯g³YV‚ŠcóÅb‘lW¥Ri·Û¹í<2™l`` Z­B¬XlWµZ s¡P_\³Ù«E«Õ2™L$» ëõ:ÿmŽÆ‡õõu ‰¸/  •J…š¶Éd‚šÃOQ³5ƒƒƒX[¢£wwws¹\:FÕ™hºÈ/êzдZm'ü²{’Z­v ìÛ˜¹ÔjµF£‘Ë Y©T¬V+}yÙår¹×ë-•JŸÙl&–Ë;NïÕ^Ô¶kqǨÉmb-ÑÐÐoc×Ýá^¡p^nttÔn·§R©………µµµd2™L&¹!]¿ˆÞ,;ÍŽœ0åP­V/1Çe4•JeW;ßÉ8u•±±1ºæ‰ âRºCù=`´¤Óé|>Ï:u¬-åìxðˆƒÁh4Š½Þ™£G$úT‡B!äýF#<åryii‰.˜ËÝ +•ŠÃá I{o6Û•5#‹Åáp˜IèG@Fð€R©4 áp8“ÉÌÍÍ} µ@ Z­ǨP(ú–^¯HHd2™X,†ÎìL&¢,d«jµM”U*•*•ŠÅb)•J8°Ü!¼§®\.ì¼¼Z­F~o …Bh°//¦xµZ ‡ÃÜ$U'¼4nä$,@`kkkjŠ{ “““Ñh”Ü&ÖÏ¡Ÿâ®ÆÒÒÒ>&ÒärùÑ£G§§§Ëåòêêj½^'#}—¢{¹ž‡„û LA“‹6¬NÍ®\Xp éÇ& IDAT_P®ôõõõ©©)’ÐC–œœ¢C%þÇ*äæ²Ò333¤‘Éf³¹\®ÍÍMZ°“Ëå2Ì ò{´)ž)ë‹9d¦¯¯4yƒIO­VƒÖ–Ww¬¯¯Ã& âb‹ÅâÉÉI…BA6-‘J¥rìØ1TŸ>:Ü”J¥"‘¹ìjµzîܹgŸ}–8¹ù|زñxD×^{íÑ£G T+,ßÂÂØß®¡odd0²étÚl6ëtºr¹ŒÕÓétýýýµZ-ýËm> ‡Ã´~ámÙ· ðÞc’ŸWÖÖÖè@¤Ùlò6¹µZ-ÞËÆ c×l˜Óéà}‰D›››FC@M±VY[‚u ËËË9^§Ó±¸ŒËåòôô´J¥fÍJ¯­­íoVZ,kµZIÓ)ô‰k;'‘H´ººJG&“a5„tÓét^¯·—hN&“ñF~¿Ÿ·©``9™Z­./‘HÇY>)À¡÷G6|(¿·rìØ1™L611Xq MCçb@R­VcXMtËËËF›ûcLx׉'Äbñ™3gÀ‹¤ ÔŠL&[ZZR*•‡ãìÙ³H !¯ Ó鮺ê*°´žº±±1L’|8ªG"‘h||œa˜ååe§Ó‰MË0 p¬;77GF :^E³Ùìt:Qí@±]*•^qÅ7ÜpÃÑ£Gc±±Osssóóó`e­V«È%:Žþþþ—¾ô¥fttóRhåâ'4ïÊÊŠD" ‡ÃhC±¬L&»êª«®¼òJ›ÍôX’Ss ‘HÈA#²à½ÜVü¢ÿ§’$—ËÅE8C íRúýêõ:.y `é{ä íBß&Èöö6«ˆ¥×ëŒÐßßo4Ye‰Dâñxè5 w¦Ç¥T*1™ÀªÈ,,, †ÑÑQ‹ÅBëIÚ·£)ȱ-Åbq§æ‹v»½¹¹ùÕ¯~u~~!&¶Áé” ÄŒTï"í>§ #G{ò€Ð˜VáW"Âýév~ÁÀ_èe,‹n·»G¼úCù„&n·;—ËA±&‰|>‡ ã)jµšœÏ­­­±±1Œû`@}bÏ<ó N¨l6[,ƒZdfii)•JŒŒìîîîìì ë ­VËn·ÖëõõõõT*uñâű±±éééßüæ7ô5“I{¢q¬VkµZ5ÑhT*•w^&“ªœ˜7´5çr9’9ìïï°ÐÂÂBµZF£W\qìS.—S*•cccÛÛÛ—]vø5Po[ZZ:}úôèè(¦ôA^%‘H²Ùl£ÑÐjµ}}}ÑèÿÏÞ{GIZ•ùãUoåœs讪®ê®Ó3=aÅAXÃÂÈêê\ ¸¢²°¨«`°ÊÙE¢YÝå° îÁ,, q‡ =Ó==«ºRW®®œë÷Ççpᄎ& èwîá¡+½ï}ï}žç>Ïçù|"F£\µZ mÿEA}Q¥RµK P¥ÑhA0$µŽÆç\.G6, c‹V«u}}½\.CD]ŸS çkÔj5zØ`0d³YzF.“É ÐòNÈA÷ˆ||oô9e¶+üâ Nz¥ûx‚år™;Ëåòââb{=…Ïç_qÅÉdR­V—J¥ŽÐsú¯Ûív¿ß>×ååeø*º%'|+ô_Ëh硟;Ïô\ÕÙ9ét:"é$ Åb1ý4­T*7Å€ÂlšÙkï)ëøÔju8‰DÝNÜd(ŠÉÉÉr¹<77÷GÀ^Ì¢H&“É …Åb’µ€hµZ.—K¯ACknnÎd2>@_“l6[£Ñ€ž•Äe2ÙÒÒR³ÙD|$a³ÙjµZ§Óe³Ùh4ºwï^¨…ÂZ­­Šr¹ {ÇðL¬×ú4éÁ2Zb±‰¬Vk"‘@Êás$‘Éd kÃúÇ}Åãñr¹Lˆ× Ó ‰,ËÐÐP6›=|ø0Ž,;vì0™L€Ú®­­ÍÌÌ$ ¨«Õj±ôz½@ H&“µZÍb±,,,ˆD¢|>/•JÙl6)•áDÅjž ³ÏÄz ã' & :Ób„úˆÃáètºµµµnEhœÆ€j©T*Ý0Sr¹œ0÷3:êø€§mŸÏ. w½>—Íf{çÇ„B¡L&cà±\y<^?²{Œƒ&Ô¿N1šÚ-³D"9|ø0ŠUýÈ雌H$©TÇ{^½^ŸÍfé(AƨT*tŽ«³wNôJ{VGÍGÆ`L™V«í†]!TÊÝéÖ&¶ ›[ …n·Ûd2e³ÙvF„®=–ÄÖ.ø€7ìXYY±Ùlù|þ€´A Ήx&©TŠ&\FžH$"‘HÚƒ!@À`§UD.—³Ûív»½^¯G"½^¯T*³Ù, é|>ßét&‰R©$“É 1Õ1Ë](´Z-ÁG`%#ÅAVÔ!p pN ã+‹|>¿\.ƒ˜åœ`0èr¹´Z­@ X[[3Ç·Ûí\.7“É„B!À(\.×ñãÇm6ü_0Ä/F©Tº±±ÞH$"‹I’­ã¶…‚à/ŸÏƒÀÒã×vÑ †ÒǦÇ8'rJëèWŠÅ"žäí‰9R«Õ™L¦·ßâñx‰$“É Q”€Sd2&žµƒ‚OïJXÇXäf;NKo“ÈårqZ蓚@"‘œ_ñvHŒÃðv»6ŸÏ755ÕÃ9Å8›ªÌ¥}5M>Ÿï‘}F†Ïç †|>G”ÇÈ ö~E Y,FsìØ±ŽÓô‡?ü¡ÛÅóx¼½{÷’ÿýõ¯M@\,Ël6¿ÿýïýÌîüãP(t×]wu£¨úÊW¾Âb±Ün÷õ×_~úàÁƒÏ<ó̵×^ëõzÿíßþ­Z­~êSŸz£¹%“É´°°P.—ÇC‘lCÌ0›Íáp˜œ™(ŠR*•õ!¶€>·‹ôäíÇk Žx<žÙlZÏn·«ÕêF£‘H$Òé42oƒ!™LB6)›Íêõúndn¡P–Z¥øz}}¬ç°}xx6¡ÓkZDGãôéÓ‡£\.G"”jŠÅ¢X,®×ë‰D™‹5<<Œs XW†††Z­–V«Õét©TêðáÃ8Ðg xh4ªV«‰ý…Ö"ØWa[Ñ—JaÏ—„t7+ßÛÐ1c„”VE lŠ &K…ñ˜:fb‚Á`Çò`ÖÄ}âFÿéF£ÑÎd0è‹–8T@%I°Þñ XfûEžã³@œGrž\.·[nÂ'Š¢ôz=ýìØÑÂ3?uvÛŽ’eÝÞÜl6é˜TÆÀ Cž%>µiº>I§ÓHňD"…BÑíË-Ö´/Úÿ{Ëåo¡#©žzê©{ï½—Ãá v“U<_ã?ÿó?ï½÷ÞnŽó³ŸýìC=488Ø^%>÷ñ‡?üáÞ{ïÅéÁjµöÿdÿ˜ƒ]jµ˜ ÐLŠI#TÅÙlvccj³8CW«Uz¼‚/¤(ŠÜ/ÈðA¯×ëõz‡‡‡wìØ±k×®ááaHFH0ÌÍÍe³Y£ÑH®¤ãhµZ¡P(‹a7 ‡hÃét‚ıeùz²5ˆÀ6€[±XlaaáСC@ ‚gÈï÷///ûý~W¯×ÕjõÐÐÐää¤@ €ºúÍfóøø¸ÛíV©TV«5K¥R@@Ü HÛ€ÓXŽÅb¥R)ðÏ’M¤âß8Ãn·c–Êå2ñ18 o[3–ʦ?D8p_B·x8çiµZ:w¶@ `86| §=òR?ÆÕdˆ5c2™d2YGæO±XLT7;E°öL&ŸÏï¾§[ònëŸñ)Æüœ·“S"‘è_9© cÔëuúi±ŸÎ§F£Áøò|>ÿÜsϹ\®@ Є‘ª6dKVÞ°ÇÓ.Ó~ÕUWMNN¢tqàÀ+¯¼R*•>þøãŸûÜç~ò“Ÿ ù9<<ü•¯|å׿þuµZ][[{þùçY,Ö÷¿ÿý›o¾™ÅbíÝ»÷¶Ûnc±Xßþö·Áð&‘H~øánsuË-·lÛ¶m÷îÝßûÞ÷n¾ùæ·¾õ­wÞy'Þâĉ÷¾÷½O>ùä÷¿ÿ}¼ÿÞ{ïµÙlû·ëñxÞþö·ß{ï½,ëÖ[o}þùçOœ8!î»ï¾[o½•Åb½ímo»ñÆY,Ö¾ð--Ëý÷ßÿüóÏÿô§?e±X÷ÝwßÈÈÈ“O>Y*•8püøñ/ùËø•;î¸c×®]·ÜrK£ÑøÌg>sÇw\qÅduDØA‡Ã  …‚Ùl®Õj ða³ÙCCCKKKÕj©|Üu£R©´Z-©TŠŽßïG™‡ÃáЩ¸añ;ør¹YŠ„ìI'°»Úív‰DB¯·ÓW5ŸÏ‹¾5ÇÒÒr}Èsf20 ¢YÊf³þÕår) «Õ 1§ååeÈfV«Uœ&‰•••p8̰ݩTÊáp4õõuòÞ‰[X]]%¼ÅbA‡ò¡<ÙnûpÊÂï¹|9bD@6ÒétÇlG&“q¹\DÚ SÔl6Fc$Áÿ¶g4aÖQ} ]ƒ¸Ïne† m7• ®Õ¡¡! ÉAºÝí³äi* ô¡+•Êb±800N§ûÄ­´Z-†¿ïÇ/p }H[jµZ€vÈ/õér^×A„„éÏ`}}}}}ý¼ol6ûôÓO;vŒÃáÄãñ¥¥¥h4úøã‹Åo¼‘¢(‹Åòï|çŽ;î¸çž{ÞûÞ÷^{íµ<ðÀñãÇ?ûÙÏBëþûïÿêW¿:99ùÖ·¾õ}ï{\Bû)óé§Ÿ>tèP6›u8·ÝvÛ÷¿ÿý[n¹åg?û‹Åºå–[^|ñÅÛn»íšk®¹é¦›n¿ýöüæ7¿yúé§<øË_þç÷Ó§Oß}÷Ý×]wÝÕW_ý‘|äË_þòÓO?ý¥/}‰ÏçÏÏÏÿð‡?üá¨R©@EqÏ=÷\qÅKKK×_½Íf{饗ؽ馛ÆÇÇïºë®ûî»ïƒüà£>úâ‹/‚íûÊ+¯üÚ×¾Æãñþ$âñét”š2™ b¯ñx|pp¤ïkµZ8f³ÙV«U­V/,,t\«N§(X²ó‰ìH4Eõ›$y’É$Ô•ŠÅ¢P(ÜØØ˜½ì²Ë áR¯×»q…1èË¢úý~Ø&ü¡¨Ñjµ2™¬\.—J%l¼^ïüü<Ùÿ„´) ŽW*•ååe€]á›GFFfggS©T¡PÀOT*‹Åâr¹FFF@Kè](J&“‹‹‹ÃÃÃ&“ ˆÕÕUØ/€Gp Ífsff†ÑF;6¼Cé£Çãóz½í*Aý @`µZÛK†Ý¾°ãC/ ¡PèÜÉgI@ãr¹ÚEëÍfs¡PØØØ K‡¨Õj;ø|>hpéIÿäÉ“B¡ðÕW_M§Ó333/¼ðÂ3Ï<óÒK/=õÔS§ÇK§Ó¤-O ìØ±cÇŽf³ybbB*•z½^·cÇ»Ý u:26H-V*ÀpR©ÔÚÚäšpI°8°}l6õ­áááF£177‰D&''õz}½^7 ‰duuudd„Ëå"YÇf³WWW;‡†ˆF>Ÿ7™LÐ!Ìf³Ï>ûl(˜6›N[4oݺµX,V*6›M$VËå2\£ø±)³ ]•Í4íïQ©Tt4ÞS­V;b½Èvû6ÆÀ•3úœÎtT«UÌ•Ïç#« ° çÆf)è,=zT£Ñ€Á6ðùü™™.—Ûh4¤R©Õjåp8 7ªT*ðCø-õœNg$],ïܹsaaìš*• ân·›õ;C·.C@$ðÞz¬ É«öB]_›ÅbŒŒ,,,tc'_¨R©„B!©É㱇Ò~˜CŸý¡ŸehOQäfÁ²Hÿ6ú¿ÉÛúÿEú*Å­#¢· -$ÐÒwF£Ózû:¦²è}NÝüNŠýœ_;8§M{ÀG áv‘HÔÓ¹X‡Ã±¶¶(‹F¹dE©TbÌ ¢ÝêiÍfó¼x¦ã£ýèâââòòr>Ÿ‡÷êgüèG?Ú³gÏ«¯¾Êý£»îºëÕW_}õÕWu:ZÖéãÔ©Sçø_×2ç®]»r¹\"‘¸øâ‹y<^8¶Z­"‘hppp~~U}µZ ø˜*Fƒ ø^¡k.“ÉŒFãââ¢Z­Æa«X,Z­ÖL&ƒZB¹\~õÕWÁV'‘HªÕêØØØìì,íEàƒ¾ãïÀ)׌xY,cßJ¥RÐ] † ’—¦wš£üV=’º çËå²ÃᘟŸçr¹ÕjU$éõúx_©T"Ì,—Ëw>vÐ (cÈåòd2ÉápÞt8@.—#X‰Dårymm-‹ÍÎÎîÚµkmm Î -ý|>_­VƒœËåBBÂår9NµZH$Š— :5:°X­V“{9ÞOƒÁÐ1§‘H´$ýÈJ¥`œI¥R N§see¥ý´7<<<33ãr¹ÀóÄzM0°Ý9‰Åbô“) z§-кS*•¹\N§Óù|¾~Ôüz7rµ[cŠ¢Î yFÍÈ2™¬^¯‰ÖûYT«Õ@ @Wþíhüû Jzåðÿá·ýò™ƒVçp¾X³Jéðʦh´Êã*I×·J¥*—ËŒ‰ÉdÄŸuA­V£‘y<^©TÒjµëxV«—·eË–k¯½¶^¯“Y;qâ„/˜WM¸ÿé/™h±þÿüa©T2o~ó›QÕ¬×ëÍfsÏž=HUïÙ³‡Íf¯¬¬T«Õ;î¸# ¡-ß¾}h¡Rb·K.¹äÚk¯E‚( ^tÑE_úÒ—לËåÜn÷å—_^*•vïÞ½mÛ¶r¹¬R©öíÛ‡Ùžœœ¼ôÒKM&“×ë][[ ƒ6›íK_ú’F£ÙØØ¸è¢‹vî܉ËÖjµozӛЪ955uÉ%—T«U@°wïÞë®»&,•JÝsÏ=áp˜ÏçÿÍßüÙlöûý·Þz«D"ûÛß¾sçÎ`0 5ÍwÞéñx²Ùì–-[.»ì2$`÷îÝÛNÿzŒh4‰DŽ?ŽC^¯×ëõf³Ùl6Ûl6>ŸŸv´ ý‰DjµšV«•ËåhZ¬×ëÐîÌçó2™ ½J‘H„Ïçƒ Û¬X,F£QNGQ´¨‘½i6›°Ý|>?N xGº¼…¶!²  ƒðz½À¹ ØtœiØl¶N§Ã) ÄK`Bi4z½žnï°›€¢(Êëõ–Ëåd2™N§9H’É$Hav‘uôûýÁ`°ÕjY­V$îÊå²T*U(¤G¨-Fc³Ù¶oß¾k×.0 ¯®®êõzK„ö[’dÙ ýgzì‰ ùT?-¥ÕjXyÆoñù|©TšÉdªÕj¹\Æãèö…à‹2™L LÂIšðq0¼~T«Õ ƒÁÀçóK¥½ÓH£Ñd³Ù³PMÄA³ÙlâÁ‘¥ÂÈß ¶khh¨w‡£E l:f¬½v¯i2™ˆ×l7þàëhù{œöíÛ§²¸ñ\¥T؈…ØK+¾ö_.zËÛ×ãi +ùü?~å•WÎ4ÙÒì5R¼zÈåòv¬]ç”ËåèÝsqÔjµŒˆžX,Ö{ßûÞŸþô§ôIä‘G.»ì²nì„ô^³ ã 2Nœ8qôèÑßýîwÙlÖ`0 §Ó922’ˆ'N ¡§^¯‡ÃáH$Ç ïéõzÀsL&CÔ¦Ñh„Ba4Õjµëëë@«Õ‚ƒ‘26ˆ«èÇèþíܹS(BfM©Tnll`·c«”J% Úâ›™™‘ËåR©’ PÖ ¯d•J w4mZ­vccC$ÕÉãñÌÏσo0‹Y­Öjµ ˆ0R‹àV‡ì7z¼R©”^¯‡%•‹Åb4uY,–—_~'ÑÑÑééiòÓ ª¡×?Äb1™¢3=×'2>Ð ŒvW±XÜ'c¬ŠÁ`(—Ër¹|Û¶m|>? …B!¿ßßíœÁf³ÑNpvªðíM¸Ä² …ÂL&C–ÊyÜ;Z­¶a<‘H„ðˆ~y ùí¶üH>¼Ûw¯·[x‰D¢R©ÒétGÏ÷ÏÿüÏÎ]W¿t*œMEý'+ow;§“ï2&‘~¾¿ÑhÄãqøa²"‰D£Ñ豃Ä?1Æž={G7ÜäÙÈ_„p’äÈe¡2$„B¡J¥zá…šÍ&ÁbÛg³Y@€Z=¨¸IžÍf‘ñ[__Áy2™¤o¨I¥Òb±¨R© Ü@£ÑX^^ã‰Ùln›\$—Ë5¤ð€€Úf³•Ëe«Õ*“É|>”/²Ù¬B¡,R‹d#Û£«Ñn·½†À ²Ûí¶Ûí+++N§Dp™LF.—ƒê©\.+ŠT*œ—ËM¥Rh䢷Êåòúúz,[__‡×gl%¸º¨ñb®0E€¤®¯¯÷S¿a˜§³8"zW.—‰Žð¦õÜr£Ñ€2žËåðU¥Rõ 8€q ¿.šÜÛ šÍæ@ Ð~|e#¶‘,•öV³Ž¦Rñ ¬ÅÔm~‘dñC™“¼d43™ ±ÉFíôŸˆD"t(|ûÌG£Q…B€OûºÍ ÄØúɲº5á:N¿ßÏápÆÇÇc±X*_%E÷Èkw|©ã°Ùl ¹$Ö„83úAU,·“%·Z­n1ÔÀÀÀ¹æaô<×€°E<çóùù|ù%PªŸO$ÇŽ#;sccuú6²ßï÷‹EŠ¢GG€R2™°M<: àî²Z­0vKKKÀwlllhµÚ@ Ðjµw …årY©T.//×ëu’Ÿ©T*«««±XÌh4[ÁØMdŠR©\5 IDAT=˜CyF&“U*ä{Œ…›6ÑGðþþL `Gf¨:`Ä•Jå¦ègbpú,±x<ÚD¸Fq‘,×Þ¤·`Ì¢£ÒÜ„ƒñréÉRúqÐápz½Þ1Wév»±YI·""ÙMt¯v5FÍÉ?< ‹Eǃ– ÐkÒˉ¤û %ý¤ÂŠÅâ¦Á”\.'Õ,$ŽÑ‘àr¹âñ8Ùˆì zí«¨½ætaüÙ ÔœÀÆX³X,Îf³±Xlii ͤ¡PH$ ‚h4Êçó…BáÚÚZµZu:F£1™LC×\*•ŠÅbâHß>„ŽJ¥ÑmCàW¡PÀn¤/<¹\À#ä²Ùl±X¬\.ëõz”(ªÕª×ë=~ü¸ÏçC==¶+‹¸<¬m™LÆr( …^¯…4ú ' ¿¬V+rž“““*• Ãf³‡u:Z­Fnddd||ŒÚh&þU"‘˜Íæd2 !Ý\.G7”*•Š>EŒ 7R, …‚×ë3r¹yK”ú<8¥ÎÚDœã O°Õj …L&ƒèõõõßÿþ÷>ŸÏívwkàCƒ „•ìÇ‹ ¤y:ÅÚ ]Cg›ÍƘpÐYU«Uºl¯îÓï—þ}%w}“‚ ŒÅb¡k„D"} ±—Ëe.—Û[l*—Ë‘ƒ'9*uÃÔ“‡tá$ôÿÂ@¬×l6¥Ré¯ýë£G?~"$OQÔèè¨Ùlž™™‰F£¤Ït||¼«õzÃáh4šK/½ù›Í622âv»u:]½^Ïf³¸åùùy23ñx<“ÉD"‘ÇÓ^±X ƒ¸¶özu&“C9àaVˆÈ^ýµjÖÐÐÐðð0òBñxGœÒº5ÀvÜÈn·ð¼ó8&&&¸\®Ãá@Øá÷ûŸyæ‡ÓjµèìÝô®ÞÑÑQ´ I$œMY¯‘äyÛ±w^ðnwNä%“ÉDdŒP(Ô1KމޱZ­gÁ~@NN=xºû9ú`ê—ɈŽÕäÚÛ¨¹=Š=Œ jÿ;6XŸÕ£z½NZÀèÃø BuLÏ™"AÌz­Ñ¯£KÇT¾Þa×…ñ'èN—H$¯¼òÊ[Þò–Ó§Oca$ µZMQÔÂÂB³ÙäóùÍfS«Õ¢í‰Åb;vlll¬^¯;ÎL&Cꔤ– rè¡¡¡@ @´ê±X,³jÙl6‰aµ¶¶Æçó=Ïòò2}C6›M”…¶lÙ‚ÆaHÒ¡¡Ñh€Íf›™™K^0.ƒð„5 z9 ŠL&³¸¸822rêÔ)4½R8:: M‡H$R(’É$Rm©T*™Lær¹ÉÉÉB¡ÇÿÊår´0ÝjµD«N§›ŸŸ/•J؆Þ‘Ìp:«««Õj•!²700€¬)¬<Âa²£13 ¡?2¼^o{ßH{ÉýÜ7;ÚKq ˆ:F؆Ãá`Áà6¡­LO$:Î@ pòäItÚu{eoþuúc ¼Ü™–Ò13 Â?»Ð_©TŠD"F ZˆŒwÒ-<äžûrNôÕÀår;:LÔåȆ—J¥…B¡÷\àÛ¤R)éÃ"xy¨Z‘ç„…ˆ‡¢"M× %6‚ð›ÑøÆ_Lràì‘‘‘p8,—ËÁ÷ŠÓC½^ß²eËÌÌ ’øóóóz½e«ÕZ(VC$²"‹•ÏçUÇK@x?~4¯ØŸO,7›Í`0‡Åb±Z­3SGT‹‹Å "W¯×qZ¢_znz4U*0Ùî%ºEƒð‡Ãtð¬My©TêÝ„Ô-­wÖï‹År¹SAØ«ûïêø\ŽhT8Ç;ê6ÎTR€¾Â­VkûB;Wo& ‡ÝtœÓ¹§PU*U«ÕÚtë¶3×öP¬T*n·Ûáp€î úrhP`|IÇsè©S§ºá[ø|þ•W^‰ÿâ¿øùÏ~ë­·NNN~úÓŸ¦(ê[ßúÖ±cǾûÝï¾óï¼æškX,ÖÝwßÅêr¹þéŸþ‰Åb=þøã¿ýíoÉ·=ðÀ<ÊùétKŸ¢(™L†æÐb±ˆÚ‰R©´Z­H7•J%°áI^h#Íçó`sQ©T2™ 7€<Àð1\ô;ÚS X.’J¥­V +Öáp€‰:Ö‡žöo@Y‹l* ze´Ob¥U«U¢% ¡‚‹oµZõzÝívã „¿c kµÚZ­(¹ÇãY]]e„äH–Ò¯‡\3ÝŠ•J%¡P¨T*é;—‡,+Ãbmk` {`ŽÑVߣ4R*•Î4o;Øïýf‘­%Ñó¦ÜÖ|>_§ÓïÕ±¿eӱ饞‘eFG¿ÀÐg`"è×î¶›ÎÆ9»îrŸmÀ¤²¥×ë7eEá¦ÅbQ©T×Ô>_%î˜±åæ«º—:y\úƒ2øÈ©S§{ì±ë®»nrròW¿ú‡ÃùÖ·¾‡{ì±ááák®¹æ _øÂøÃ‡z¨T*}ò“Ÿd±X£££wß}÷õ×_ùå—³X¬÷¼ç=õzýÁ¼àWÎïÍ+YZF£² …B§ÓÑõZ­–R©„ä’Á`n DpÉdÒd2™L¦ãÇÓ7 ÚÕjµX,>}ú4æaŒ¡¡¡………L&Ð)©ZÁºöL:ç&øõI†½}ÅV«U“Y,h*âÛHÔEßPèü#~/E£Q½ˆ%-‹ Ôjµn·ÚÐc¬qmm>¢c„ÔW<i§‰DŒp× ‰ø|>¹)·Û ¡Þ> 6¥Ø­CÇËë=Äb±Íf‹F£</Ûl6’¶¥Ÿrjµcˆb Ô¦©FÝ®[­Èd2åóù\.GŸÕ?þè8=·ÔÛý‚Åb!ݾV»pùŸ2­×#Ö€± ãaªÕ*Ð9<<ŒÆÆgAe†ú៥¿allìÔ©SÝЙT½)\ïPµ6Mí2íÇ¿øÅüà?úÑöïßßjµ&''¥RéÿüÏÿƒAÇsÉ%—ÀFê ã|ÑÑѹ¹¹B¡´^­VÓh4kkkhÜ‘J¥;wîÌçóÒDP?B=üå<Ú6›`ùR©â}–¶nÝšËå%·X,:nqqÅ!>…BAW,ƒcŒÉdâñx$ØjµZëëëè®Ç_ìv{:†š !—ÃáðûýÐÓ=Ùàà â§§§[­‡Ã±Ûí@ÜgÔl6AcCl% L l6ÿHzÖÕjudd„ÏçŸ8qB"‘èt:$m’Éd>ŸÇÍJ¥Ò¡¡!/1ŽGDŠü‘ÐQ0Îf³½^/›Nf Mz¤UÚd3¡Ì¢ ø2‚crµÐCéxyôfÆè­|)‹Å:¿è‰3d:Þo{ªÙl6C†¦ãb±X7ÏDVQGãïv»Û5?ûuNç,§B¡Ðf³‘MˆmÀX¬¤“ƒþtÉUâ#=„‡_~ùeVw*¼¹¹¹þõ ;ŽO}êSÁ` "’$,•J7Þxã'>ñ‰O~ò“`…AíÁår±X¬|à±XìsŸûÜwÜñÄOüá8/%Á Ãét.//Ÿ>}šÇã]rÉ%áp8“Éx<¿ßŸJ¥víÚº(ÎÍÀ§Óéóù …R©ŸdðË/¿l6›·mÛ6>>>66¶mÛ¶«Õ*•JårùÖ­[Íf3ÒzËËËn·›Ïç =z”lu›Í†åzòäÉB¡€Æ#ÐÕX,Ðo×ëõ£G:tèäÉ“à R*•.—‹¾6€}Ç¿H$ÂI޾J[­ÖÐЈkGGGy<\,‡Ã€T|½^©TêèÑ£étÚçó>|8à•••JU(@ Þl6N'~¢Õj üÚÁG¥ƒ}B¡P8‡ƒ¢(ǃ/¡_1h Â1Ñf³Aü»ý1­¬¬Ð=\)œ¢‡÷Œvîðð0®“õZ£ä9.§ááaúÿúý~ä`è ÑhèÀK¬=°¶£‘Àl6oß¾]£ÑìØ±ƒa‘»uùP&žËÅçóùöö#rG˜sP#¶76¬¯¯Çãq즎>00@/IÊår³ÙÜÛ\·»7²6ÐO7þJ¥R¯×#·¼©¡î:M­Vë¼èÉú|>¹\NïóûY‡C— Àh  ÙIDÁíÞ ËtôªH$B{ïyÁ´¸ÝnFsôèÑ©©©mÛ¶;vL£Ñ u{(zþùç£Ñèõíoû›ßüæí·ß¾{÷îøÃ,k×®]F£ñw¿û]¥R) ÿõ_ÿõòË/ÿâ¿xÇ;ÞñûßÿžÅb=ðÀoðÂ8ëAøRÕju¹\ž››ƒtÄÆÇÇájµ!ÚA „Fr»Ý®O4EÍÍÍÕëuŸÏ§ÕjÇž={Ð/‡•J%EQ(V1Láôô4›ÍÖëõ ÷F',›Í†ãáñxðÉ"—Ëå¢E“@ Ðétx †”²N§shhÈn·G£Q°Ó"Á \ˆ˜1 D nbpÙEF¥R‰D r„šÑðX©TˆƒAûÇ#7‹ÝÄ0:@?¶ÛV¼Ôkr8œt:Ýc/ˆÅb‡Ã±i³<›ÍO¹[ñC,wk‡‹Åð¬˜"4?‘!“ÉÚ‚V«uÏž=[·n¥Ï0æ Ýf³yhhœ¼Z­Ôôè¶ý; Eÿíg½SÚSʇ~y89‘)Å´À£€}û\ÎvÅb‘޹÷ûý‰äìlò©Ï‰žãê†Ù ­Ž:.™Lö8úÕj5ú,à'ÎHùìÆ 7Ü@QÔ=÷܃íýè£Þ}÷Ý[·nݾ}û“O> XG³Ù¼ñÆ/8•ó5‡Ã©×ë°>ˆÎòù¼N§S(ápX­V œ„2™ H} æW(b±X¥R)‹Pu+‹f³¹Ñh`u±‰D†&™L …B‚šclu0» ·J†ØÏð@P¹EI»°„Þ€ VWWN'üÉ(€lI•ùùyÆ1oãñx8ÕÑÿŽã‘X,†kÁ•t¤w¡ã\.ø¶É±› l_¯×ÁĨ¼Ý7ô#GW©Tࢺ=VÔÉ6åm6›ý žd½¦ I¯Áðx<ü/¦ˆø0œob±pÿ¨üg2>Ÿ?22b³ÙR©H,ŽÅb³³³ƒ!‘Hðx<4t2,GÚ½ø™VñAÀÑgc@ è(ºHQ#¤0›ÍX<O&“Õ‚o…BFâ2çeóBíèœÐ†}èTŸ÷Ü;ËÙ± )”H$‚”Bçç§ULüãßuˆÎ(6«Ùb8¡}ûöAûk_û(¨1Þ÷¾÷ @$¿úÕ¯¾óïd±X_þò— EÛÝwßý|à‚S9_#‘H`ó Au+$ úý~•Jµ{÷n2PÀÉHzQzS«Õ2` …B`;Å®n6›+++&“) †B¡ÀãñØl¶\.G"Ž`ž>}(†x<ŽZ½Ëåòù|À byî.— ½QpÜiµZèÊG" IåG™H$I7½^ÏHÞ&høÔ+q-~¿I…L&Ó-¼S©TÐù¥ûËŽ{ ë¬×”Òè_Ç(ù,Ìý¦õ—Ë ±;º½™<ÁŽÖ•þ˜Èr=;åUЋu¨Óér¹\ŸÇ&´rÿç$>s^ö5T©TºAû˜·þ{{{ë.wÛ`ží†ìäñxû¯ºj`` Ÿ ¸êª«È¿‘Уw½ë]Œ¿ìÞ½öñÂxýx…B"– ïI§Ó±XlÏž=XfH-‹,B;N>Ÿ‡BÒÊÊJ"‘ ÜzDµÙh4‚éN¯×CG Å[“ŠÅ¢Ýn_^^ƒ:n```ccÃï÷C·ÙlªÕêÅÅÅxAµçp8*• Jb³³³"‘ÈétùöƒàJAÙ§ÑhJ¥’\.ªACCC·«Õ*N åryllL£Ñ…ÂB¡°´´”N§:ê8NǪ2ÌŠL&CýÌl63(•‰«@ö šOÝ&œ¢(§ÓÉ8ZõÅbƒe\-ÃsÀÅ’-Y­VI ˆü±7ÑLŸÝh€Õéth!H$„o@Weon0B‘œM6›5 Q‹Su"‘J¥ …¢ö£öl}ŠÚˆŽtÛ™L¦Ÿv°”ËåŽðK¬ã&“‰QɤgÉ1PŸìqÈ«wsßø¡7hñŒF£×ë.ŸÏoll²ä¶oßn·Ûív»R©Ìçóe±Ùìx<žN§Ñ](“ÉA>ŸÑh´Ñhðx<—ˇ5 =“622BÒs¹\©TÂÕf³Y¡Pˆ P*•N§S&“¡ÆŽõ|øðaèü†ÃáT*ÅçóQÁªT*¹\žÏçÑ­$="bä‚L&ÓîÝ»Ùl6tA­„LËÆÆ *$®‡ÁÅÝaÛRåv»ûWQ¢W€!´›žÚ5“ú¥R)‰EÒçG0Eí>Œq’p8ToµZÐ(Á§l6›Íf[XXèMZ! ­V+Imuc1ý%` a»ËåÚØØ˜˜˜ çŠzÛdÄp=nö\†B¡€Ì˜Õjehe1Î`dsP.—#rçB¡x×|>‚¾}ûö©,î@Ÿ‹Åæææ†‡‡ …B8‰D¥RÉn·\˜C©T‚ s©T*—Ë ÿÇÌÞ½{kµ‡Ã‰D"áp{šîz½H$£Ñ(‘HVWWöær9ÂúHFGÊ8ƒÁ±Z‹Å2;; `B.—k4•GO.Ð ±XÌëõB<žÏç‡Ãá|>/ óù<XŸÏ7>>^(„B!ý×—––*•ŠT*]\\„ î(æH$¥RF5M&“ï;CŸW,cŠHðKg}¥?£'Nü© ¼àr¹‰gÍöW;Z6™LFhÚÑÕi±XœËåªÕ*VÑÚÚÚÚÚšL&ƒz}·y(—Ëg§'+‹Åb1Áô¯®®öàÒíxGÀ£Öëu©TÚg±_"‘ôI©N”f;ž›é'¸¢r¹¼²²¢P(ø|>â*ƒÁ€¶q‡ÓÞ›Õ5­Gä‡éM§u@…HÖno N…B=’È€ºö.ÅãqLG{n,»à™þß<¯^¯C·„Ð ° ™Lð9¤Ë––– Åììì‰'°\Åb1OÕjµ^¯÷V«…["%ååe¥R¹¶¶6==}äÈ‘jµ yu|' ¿™L¦P(d2™¹¹9‘Hd4¡ŽÊ¸Z•JÅÈü€bu}}]$”ˆ¢¨H$¢P(ðÒÊÊJ¹\F†E—ݦ¹¹9¥RIö ié:êôþÜ@ €Ð)NÄbq{;- |"‘ˆwÈGH§­L&Cr‰Íf«Õj>ŸÿºJNoÚVæªö9'}ÊxèŒWéSDoÂEG­\.F ÊA­V«T*É„c¸\.üP»ôvû•K¥Òþé!r¹žÂÓjµà Æ1!½¥ÏOïk ÷| µëÆÆI!àòˆ7éðdûü Ɖ¶•OÒ'™H$4 ÃC÷rvPK6›-“É(ŠJ¥Rà¨>w ª ã<ŒFc<Ç*–[YY …ÑhT«Õ®¯¯óù|È^”J%±X¼¼¼¬ÑhØl6cãñ8 !X„gcc‘5öüÀÀ@µZE@§ÓMOOCtIf­V [CQôg!_Íf5ÍÀÀÀÌÌL£Ñ`ÔW¾`x,rá·ìvû«¯¾JL$nÎ X†Z­X,#iœ@ €VSd&`&c7!AG~Q¯× „B!ø(¦R)“É”L&錨p·ðÍÄbâ G”œ”Je¥R9ïp³õ€l0H ‰áÃ?ŠÅb»A§O‘\.—Ë夀_¯×ï'Dì@-ºt£F¡ÊÉdù:øðn þ&iºó>pG›põz=ýpÓûø²Þi[>Ÿî©BŠ¢Hó@_'§Ž‡¸~àêE¥›Åbe³Yr–ª’LJï:c“¢¥J¥¢Ç&õz¬×hY,–Õj=G^Å ã ;@Mm0`¬‰^ ‡ÃXc‘'“INV.— xrn:N$¡H)•J­­­Á9aÕá Áç†è ¿\.çóyÐC€æœ4¥‚¡N£Ñ¨T*‡Ãò6›æSd``MˆDÇ3™Lä^’ɤÑhäóù¡Pòê@èÉår“ÉdµZq G¯×“=÷IR©T¢)ƒÁ@Q¦(2Ì9SÎðL¡P¸5¼DøýÀ6›J¥¤*ϳèêñÔóé¶^Lx·)Bæ†$ý7H$’ö.þz½Þž}ŠD"xptÚ\òêvø»R©„榷¼é•““±‡hi0 ísÅpEétš\CŸ?Ô-ëØñ¸vvûº³79¿+ M “õº¤ïè¼^ô\Ý‘Ñl6IœR.—± éŠÈårX^(ÐÙ.Œ¿€46ƒP(t8è @¹ˆÃáÉp8Ül6ÁNÚJ„´U*•Z­F3l"‘Èd2étšð‘U„Ô1ì˜]°\AþKQ”T*ÐÆãñÈåòÕÕUü.šíkµZ¹\V©T‹BϤù*‰d£‰DbyyÙn·7›M‡ÃA"6¨ÈCr öD"‘Ïç…„ü.R”y›|>?88H¢CòU‰Äï÷/..:Nëñù|‰Db±X6í\‰Åb(·°Nö n‡´XªÕjŠ¢ÎE â|b±c×g•%ŸÏÓF³ÙP¥‡Q©T°L G äÛñÁáp°À:=r¼&Üw.—«÷•‹D"ò,Èb=¤Óéökè!ÊÞㇸ\.éhgÄg;ŠèÃd2‰6#yìVÖ9ÿÎ)nZCBA»=ßÝžO «‘vü}8Öl:k›Žï|ç;û÷ï§se¾ôÒKû÷ïÿÿøö7?ÿüóû÷ïôÑGY,Ö?þã?îß¿û÷ïÿêW¿Úñ ¾ÿþo~󛽯áþûïß¿?P$û÷ïÿØÇ>Æb±~ùË_îß¿ÿ7¿ù ÞsàÀýû÷ïß¿ÿž{îÁ_¾ùÍoîmüÅðûAæi«¹¹9¤’°µ’ɤÝngPG‡Ãáx<~³ÑÑQ»Ýn³ÙZaaÉ¡G¡PŒÓ3rXеZ­P(Èd2ØpC°Ùl¤‘ëõºR©?:ŽMX®µZ ‰DïD¬^¥RI§Ó(0£2W*•<i«Ïçóç…/ü¬‡R©Dh &y‚2™Ìb±ôÿ=x‚Õj•^#p»Ýt¬s>Ÿ‡Ã¥R‰ÎáÔã`{ØÃ|ÂCNн»V¡½7LwN‹Ñ¤õnm&©Îl6ÛQ»´Z­ãããô:iÌH§ÓÕjµmFc’íz§çee "²cubéX<AIƒº\.H”öŸ©ôz½ŒŽ«`01´ÁÁÁŽø¨3Êá9r„þH2™Ì‘#Gþê¯þªýÍétúÈ‘#o{ÛÛX,Ö‘#GÀœøðÃw J¥Ò‘#GÐa³é5 2=räìñxüÈ‘#X7×]wÝ‹/¾xôèÑééé~ðƒ|>_$Ýÿý÷ßÿÅ_\.—wïÞ}ã7>üðÃoX¯ÃårQêï¿#FLC±X!)ë54Ô®]» A s ÓéHºéĉpð¨iÓ¿vuuuddÇ/qº¹Fàe @S²&‰•••ŽX&ºÝ¯×ë©TÊëõ˜ œñññãÇ‹E±X ò‹Åb4Ëåòää${™Lfjj &¸P(ÌÎξýío÷ù|N§S©T6›Í@ 088ˆ N$ŸÏƒ3T&“+ƒµ„ „ÈžÍfåAo¸,š7jµzуL¡¢ðuj1¤(jdd¤ãŽž˜˜8yò$ hGÜD¡P8÷2˜Ïç£?JÉã™â/ …U‡Ã‹Å0ÛýØCºv°ÓéÄu…B¡þGæÃjµ …ôo}æÀÈÃíöCð¦±XÌív/,,¸ÝîS§NAuZ¯×ã°ºº ™c¢Á$È®éQ-ê%6È`‚ __û›»!jœN'ÄBQºØè›Wí6àr›ÍfûbE¯{£Ñ8/JT,ëòË/‡c?zôè 7Ü€?þÃ?üƒV«=uêTµZÕjµW_}5yÿwÞùÊ+¯°X¬}ûöùýþÉÉÉ»îºëÐjµ?üð»ßýnƒÁ@ç«-‹·Ýv›Óéôz½ƒQDMûU9ùîw¿ûÙgŸ=yò¤Åb¹êª«ÀwÞ‰Š P­&“I¥R‘rèŸdP% •Je7Á`‰Åb—Ë…ÍÌápÜn7ºk÷ìÙà2ékkk'Nœ˜™™•CµZEÝ€–Ëåééiâfˆ›œœ¤›f¿ßŸÉd€ (èœG/!øa].¬9–+Ǿ}û&&&FFF ´k×.³Ù¼°°°wï^Ðó„B¡ÁÁA§Óòùü¶mÛp"´Ûíjµ:™LF"‘^x¡X,¢—ëÀûöí3 Ð0[YY)‹ÇŽ›ššjµZÉdÒçóƒAz¯>Η`šàp8R©Ôf³‰D"zž¢(ü"æÃá…BR˜"ÌHR¡ˆE· ¨¥íܹS«Õº\®³Ó‘e³ÙÝvôÌÌŒB¡À{:q³&“‰.2ÄãñFFFAÒèèh7 Z­Vãóùãããh+Æ)Êáp(•ÊññqŠ¢@ BzzWèé&§drñDà´ÝèÑïˆ~ª“J¥&ݬÁ`ž©÷ž"—¡Õj<#íS144$“É—g±XäryµZ=uêTÁ° Âá0I_—úôiry>ŸõõölŸ&ŒvÇN$®Ûß¼²²Â@ô)ŠöŽñ>yíèÌÍ=>r¾XòÐ^«Õ–––è"¡DQ›È.`|ãß÷ësÏ=G^…¿ü—ù—»îºËb±ìÝ»—¼ÿÁ|øá‡¿óïÌÍÍ †K/½”þë÷ÜsÏå—_Jr¾…BŸøÄ'Þõ®wá›1çxêE}úÓŸþøÇ?þío{Ë–-ÇÿÅ/~Ñ1ùF˜"àº),x½^ì´r¹œÉdp02ÑhtnnîôéÓ‡Ìd2zJ$Û!_(“ÉØlv*•âr¹B¡S×q©ÌÎÎÂiõXWR©tddD.—{<»Ýît:Ñî®×ë Ü 8Z—Ëåñx^zé%€ƒK¥Çãóù‡FâP…íÛ·F@°k×®«®ºÊétær9½^ãááa¡P¸e˵Z-“É„B¡Óéíž^¯Ÿ˜˜@ØcåËd2ðDàu:]8Îår C"oS«Õ¥R)•J …¹¹9ôW†Ãa·Ó;œHM…„PD:1ÄE]är¹Ð7½¼¼ÜjµÎB×çÔ©Sd»u¬èàÛíö†K‚îl’ðV«uee…h²`@a™”‚B¡JŒ‹úÂàùm6›íšÄCwÌÊáp Ýq¢7´›Ñk‹‹‹¤qB"‘08/à;ÿõ¸ŒD"ÁÀ˵ «.--F†‘…Bp3x@­VK,Ó¯A(â¡£…™qy"‘¨Gé¼Õœôz}o€üÆŸçjµ 0B&“I$¼ÛaAk4šx<. C¡È7­V+b¸ Dš…Bª$Õ–N§N§Åb1›Íô劌((±Ë/1¢+‹•ËåæççA`!‘HÖÖÖ€ùfp¤jµZŸÏ”91«««/¿ü2‰9Ö×ׇ‡‡Ùlv±XÌf³¨(@>Àápðx<ç×××zV*•—^z)Ú¤–——S©T¥RòWÞnȤR)‡ÃA®Éb±(•J±X îóéééŸýìg'Nœ ±y"‘€';Z x½^›Í¦P("‘£ä.•JÉÁK«Õó%°!ø‹Á``¨ÞÅt7P¯×_yå•“'O¦R)4e3`å<O©Tv4͌Ĵ9¬V+`)XTéÌf3ä+e2™ÓéT«ÕÛ =”ŽY:-ü=ü‰D¨ÓÓý¹†>Çúúz(Â×2Zb=Úl6y<^ÇËë1Λ8Âöã©X,fT|é× ×ëÉAu–þY³ÙÜñ‡6wNp' AßiÓÞäFä´„X±á¹\nïU+‰ÚÕ6_ïñõ¯]©T>öØc.—ëöÛo~åèÑ£¿úÕ¯®¾úê믿žñÒ›ßüfFóßÿýß7ÜpÃîÝ»Ÿ}öYdzeË–_õïÿþï‘Hä¾ûî»é¦›Ö××ï¾ûnÖŸÉðù|¿ýíoŸx≎=çØÀ› ²„|>=-œÉdÊå²P(  µlà [¨R©ÛZ5Íf3ètk¨Ñh@™õš‚-ú1QˆÇãØ´ÃÃÃŒØhíP%‘H¢Ñ(b‘W^yE à{ ú®ÑhÌf3´wwìØ±sçN§Ó‰Îˆgƒ´I©T (•J `Æçó‰]&Þ‘l8§'NH$’`0h2™o)º;‰Çí¸£AY{úôiî ;ºZ­wHï¸/‹‡:tèÉ+ú|¾z½ÞþC$ àp8›¢“Õj5ƒýxH43œ“Z­fpÐÅpœ$umm «B är9xbݬ¬¬¨Õê·¼å-_|ñ–-[1ÊPëX«cÔ‡¤R)Ý”qÃ8¯®®ž´D¡P +îv»Û'‡ÅbU*•Ž{ªçaÿC*•òºK[ÐýÇcØpœ§Ï¦æ„ÇLr¬d˜L&¤Â=O;ø»Û æƒÃá´goH‹_·´Õßb~ä#¹÷Þ{IÁ‰>xànŸªÕj=ôý/?ÿùÏ»ñ|¼ÿýï¿ÿþû½^/#Èb±XúЇìvûç?ÿùûï¿ÿ]ïz×C=tÉ%—\yå•,ëÀz½þ»ßý.‹Å ‡ÃßøÆ7þ÷ÿ÷—¿üå'>ñ Lõ¿øÅ?·‹ÅŽ?~èÐ!½^¿uëÖ;wv|Òâèàr¹Èªk4¬ôýX •*«ÕŠÈ1™L.,,¬¬¬X,–±±±‹.ºsžÏç3™ 8Âëõ:›Í¶X,XÛð:|>Ÿ,¿µµ5¨1jhhhˆð$‰©©©ññqüœJ¥BÌÎf³µZ­ßï…B@ŠD"¡Ph4€J¥R*•Á`°ÙlJ$—Ë555µ{÷n¯×k·ÛQÒ€ÚºX,¶Ûíããã;wî§-t¤šÍ¦F£áp8&“I @:O¥RI$’õõõjµj2™ÀBëóùè0-ƒÁÀf³{ÐÔj5’óQ*•0åCCCðÖ¥R b"ôÒ2£€Á°VŒ¿ \ÇêÒNËù|¾½ñ5¿L&³²²Â°õhzËf³tƒƒ^lºaÑjµøiÒÌa:8(³(•ÊxM?“RE€» †;Iì ÂB ¿= éHE! årù¹Ç{Œ[o½õÁ¼ñÆõ«_á/ïyÏ{Ž9ò­o}ëâ‹/nÿG?úÑùùù{Ñà¦P(|ðÁD"A÷û÷ïöÙgüã?ûì³=öØ×¿þõþ/ìúë¯ …ÿøÇÓét<ozÓ›®¹æš_|ñ{ßûÞO<¶‚[o½õÏÅ9y<žmÛ¶uÌÑÛl¶ãÇ×ëu»Ýh]ÁÒl6£pBÊ!$õ„~À¾áÉØlv"‘€•¡ÓEçr9x Ò2…Ÿ€´.cùU«U W@£È,Ž‹¥\.‹Åb¥RI/IšL¦T*U¯×!€‹-‘CÐßéõzðØ‚´ùòÌfs  ”]£££z½> ®¯¯—J¥õõu€úl6›^¯—Ëå<û—\@½^·ÙlPP¤[ƒÁL&{í`ÚðmF‰•JÙWð6À4ñgݾ Oþ:;æ{¹ãÚWíæ”"í‚OFƒü^BWÝ[ÈårŠ¢è^¼V«ù|>…B¤" 9år¹»ÞF‘ËŠÅbkÚ§*@rØçwr8œ;v( èÐ/--áqØl¶`0ˆžëŽ¥8Æ_@uª¤óˆ¥ê±ð˜::ã¾ ä ?æÝb±,--MNN*•JµZM h¤'K¥¨ZWWWÉ N£Ñ4L&Jú,H$µZ- jàõz{+fìéç‹Áèƒüà•W^ép8(ŠÂ içÎ<òˆÛív¹\ÿú¯ÿšH$Þüæ7 ;ôÈ#€íÿÊ+¯üÁ~P*•öìÙ311a2™^xድoß>«ÕºwïÞ+®¸¢T*=òÈ#‹eâÿcïMƒ»Ê3`íëÕ¾¯-µ¤^¦·ÏbÆÛcCƒ!„¤¾@91P IˆIˆ¿¤L*„Äìà¶p³8í™±gz¦{¦÷M»ºµï»¾OùÔɽ’ZÝKŸò±Ôºº:÷œ÷=ïò<ÏÔÔ#<‚rôwÞ‰ˆ5>ô¡ÁÔå+_¡}Þ=÷ÜÃ0 Ì¢Åb9räÇûÈG>Bžôý÷ßË-·üŠ{¦p8\,o¿ývƒÁÐ ²g³ÙžyæHv"MQ«ÕÈ*B¦®Ýn§Ói†a=£YäÁ,ê l6 ñX"ð‹·Z-·Û ,ú$ Þb-<˜-BžþïÙÙÙB¡†VØÇ‡×××É ‚¶ [B=C$éõz¹\žÍfÑâ:V2™Dì‰t­V “€¦…BVu( „•Ði…+J&“X<Ü)òù|P¦§Ý†ËåJ$õz]$étºR©$•J‰ =‰´0Õj•vx}ä|X%+ ½zÛÈ=ìuQ onn‚§•|ÜápÐdô Nˆ$èÀ L‡8n·{ii©T*à],£§×ë!fO»“ÉD»®þê¬Ä}e2™ôz}(²X,‘H$‘Hd2™Z­FÊqcd¹ÒÃçóq‰J¥Aì ¨~ËØM;;;v»„}ÖC¯Œ(Ç¥ ]Å4Áû899 \4¢ûááa°­ÐÎ †ƒ›Ñ&ž|òºÃáðz½&“ ËÜh€€tåßÎùK¯•Åœ˜˜ Êl·Þz+-9;v ÿ ¯Ðø'Ò‡áœx<Þ‰'H––üýøø8-jÇ$>Óh4\”Õm·ÝÆzejjª¿<ϯÔhµZR©4ôï3¾råŠÙl.‹¥RÉï÷¯®®Â”#|!ËI.—›Ífú633såʲ0ÐJ„@mnnîСCÄiU«UƒÁ`4£Ñh«Õ"‡J¼e·ÛK¥~r(ÁÇb±‰‰ œÆHêÆãñð„Ï‚Ú5:NN‡ÆÔÔP)õz],'“É . û`ee@Ýx<®Óé º°°‰D‚Á`4ÅŽK¥R‰ÄçóµÛíçŸ^"‘x½^‡ÃADwü~¿L&[[[óù|[[[*•Êd2‘K,#ê!d$Y­VC'Ì:ÐÄJ¥r~~]Ä A˜urr’î®v8„̬\.Óf1“ÉôÙ¶¸s5 ú åóyê°$hAØP•JÅ:³ÓΉ•IŠÇã8aÄi¸óÑÑQRÕçÚÙF£Á2̓@eáùÀ²(•J¹±;Ü<èKpc?úцÑét+++ägöá¾ëJg7¸J$}€@Ι¼‚-ƒ ïúpéÝÄŠgþ—sZ^YfÝW¯^¢mbbÝäÜ ,“É B€ç„T2Ò£££„9]^^F‹$B.rAxx±X { E,ǃôËÌÌÌ… :4;;Ûç)’¢ß¯¬ ÞGíoÉ€ºÒ®ùúR©´¶¶ÖjµD"¢«l6 £ïóù4ÍÜÜÂÁ Y~¿ssóúë¯?sæ Ã0f³yss“ˆÒȵZ­P(ÐôŒTÛÈÈиZ"‘èZ¹m4àUš››+—ˉ„…È ‡Ã­Vkjj Jw :zô(JЖU(` ¯Õjh+—Éd&“) ¥R©x<>55… ìAKKKË………«W¯B$zyy™p7‹ExnÜ6ˆÏGGG@JIÖ$ÀØŒH ©£ÝnW«Uœ`ʃÁ ôdY³‰D0¥ˆ‡x/vgÄãqòÇè®»&iÇè5È= ®:1<<œH$H(Fwº³b&œuàS3™ŒÃáXYYéã)é¬ íäèøƒk*1{ûÛ™L©k¤E‚BXQ¸’0¤Kz###\Tè5I29ŽZ­Ff[*• vz IDATáA€ÀDš’$ÛAûßô»¿wnnˆ ^>÷™knþ—&—Ëån·lN^¯3Õét¸%¯T*EÕ]CÅv» A9ª6› ™_L}±XL¥R]7k„Ûøß_±Á'N¼ï}ïëŒ>d¬ÍÍMiK¥’ÏçÛÙÙÁzÈd2 ß‹Å@€,Z‘H”Ïç@³ÙDG8î²ÙìöööÎÎ\.é?ú¬DZ’Qø!®trr’µÂS©”Åb±ÙlÛÛÛtÜF`¹È+f³Ù@ Éd¤R©Z­Få -ãH V«U£Ñ˜J¥P6(‹O>ùäèè(2BårY£Ñ °ßn·kµ u:j!;;;•J%ŠÅb®ïìì8U.—!HšJ¥†‡‡S©”ÑhdÆ`0t::‡ó,ök7=F´`Œ¥R)Ö–ôûý`[__'ÌùKÔ{öª¾Ö+và 7°Z92™ í!ÐKÒë`}ájµ ³Þ'Û™vL2ŽüIJ>åt:…Ba‡Dê[ˆ¤‘¡)‹´u¥ï~düD.r‰‚to×Ûx錬”l»ÝÎår¸l>ŸÇ$­Êú]ÜÛ`‹ ŽŽŽòx?ìuÞ‡F'Á!“€Ù$”'¬s x »ž‰ú¼•Ëåž~úièhµÚÍÍM|…P(Ý2Øcûmh*¼ƒñ›4@™ˆ £Õj±ºƒäryµZ‹Å4fbhhH¥R5›MèøÑçDP¯Ò(¤mé\øÐ0Då¦T*åóùùùy¥R —CoËÅÅE–h‹Ífƒg<Gg0t»Ý‘HäÂ… N§‚¹ñx<j4äÁ:N4u»ÝçÏŸ‡$RI‹%‘H JŸJ¥‚Á °5ÑhtssÓb±¥¥¥b±wØòs†††d2Ùüü<:9ыߕÍÜÉd’»›t:ô1«]Úëic„>ïF£Ç4 @^"‘ôß섳jðÁZ õz½Ñhøýþ`0H?PDóÄϵÛmX9D û1NûÓ?j×δ„àÊÅbñÊ•+ÈØíö]yx%‰ÛíîŸádÝ9YÉÜ ­>6]¯ƒ'¥$‰Ýn熹h+í«¸®û k_<¹3tkccc•J¥½.+“ÉÐ_ÛKðjiiéìÙ³sssçÏŸGS,CìY­Vw…:Éd²]Avã×zƒA¬l ¢Ñ(]£BŸiÄb1Þ*•J+++@¿²zôñV2°5\±T#áÌ€0ÞÕh4‡ÃårÑׄ ‹Bû€B¡…BÛÛÛ@w’œO½^Gý²ÛÛÛÉdrjj*“É ¤€ø,äׯÇÇÁ-D‹Åñ\P6Äb±l6ÛjµÔju4Íd2(Ö¶Ûí`0ȪѮ®®ÒFS©T¢ž;ÕÉd¼´t‹3‹Å¢P(ìÃ3 e5š Gâñx„6iÀ'®ÑhèG ˜×žÖ W ?BBóL&³°°Ï%\Ç0 ýmÂIO0 •J%4â³¾‚fbµµ5â9H†S¡Plmmõ÷LàQ¬Õj´uU©T¬Yeµõ£e¬«¥…Oy7R„âb¯iä>/>Ÿ_«Õº&`ív{¯Æô> Ü~ÝzFƒîÞQ«Õ4I{ŸQ.—Ûí6Ã0à* °8]B"º—Ÿ€€(YU«U4­²êŠ@›§Óiø¹}'vÆ¯ÑØÚÚ[[[£Ï¿0ÄÈ]²»\.'“Éjµô÷èžR:<‚¶S±Xd¥> ù€oåñx&“©^¯óùü••Öñ?•J©T*ƒÁ …Ðí](XçD£ÑØh4 ¨T*K¥’Óé, ###À”Èåò`0X­VAWƒóV6›ÝØØ€/„L§Ób±X§Ó™L¦x<­(ƒ ˜Ä0 4Ójµ Ãø|>°jñ^Ô †‰:j{{~›*öºÛÁÏK‹´Ái †J¥‚¯S(h¾…A„ÞM*•BûÖž4EY2%øjȨ³ö»L&‰DtY^­VwÍ}­­­Áq➆¡cq8§B¡ÀMâÛ …=,[ŒA¡P¨T*V·W×ѶÕkà±hH†a «³J'­V+ëtº^éM`{”J%ÍQ‹ F£Þ&ÞôcÚ_NKÔ+ðDmJÆØ¥&“ íyƒ\—@w‘ìæ½È­‚×É4A!—õqv£CEZª’>Ëà+°€ÑétVÛƯãhµZ‰Dበo¡öP.—Ëå2ÄS4 tÇív;±e´h²Ýno6›Ñh”+4ކ‡Ã‘Íf™?ùÉOœN'‚…BC`±X¬V+|º§H(O¸ Ëf³n·;ŸÏ—J¥©TÚn·WVV‰²…à%jµZÍf,û z@ÜÃ0L¹\†+Õjµhyýôèò ùŸt:Ýôô´ßï‡TnµZÅDašL&ܽ¡x/ªƒbÏ"ƒBÚ« C±XÄɵaò)ºJMc‰ ·HÑÑhd®¹”J¥8bM”É‘‚¾ž.t´M†H$¢ûÖè)b³±º®½^a<1yNg{{{bbŠ-½V2æa¯ùî‹]›îºšJîä F£ÃáˆÅbh……B!•JU*½^ŸL&Aôi³ÙT*•X,ŽD"J¥Y>ÜÉ:êtºááaÐí a•¼½Ûí®×ëäÐÝD$Ò€’ l4‘H„ëcXšjB‘ùGî±k=I£ÑÜtÓM£££}’x¹\ŽðqoFóÓë@Ãm`#"O8(pk$,Jë-ZçVÚc}ó>º‹µ¢ƒ{W 1@Ÿ[Êçóàá¶Î‚k˜¶ØÄÈ÷ñ¾ôcº–Ήȟ‹D"—Ë5>>îñxl6›X,Îf³ð[,öYTØà‡­¾CfD*•º\.£Ñ8==|7ä´aqºÖÊ l·ÛPu#?›Áá§Ói@úLùoÒp8¨Ân¢Q 6Åï÷£8AL¤N§‹ÅhÉs¹\'Ož¤«r¹œÔ;²Ùl°P´‘‚1‚ä———C¡P2™”H$ËËË ‚ ‰D¥R)NãÄb±Ãᘞž>vìX @k1IÛÛÛJ¥Òét"å…,ÇãB¼‚rÈúú:Ñ´‡^±X\^^FÌÇ0 ˜ò!ì‹£+±p-ðOÁðùü\.§V«õzýØØaCÅ"“É-ò:ì&lvÄ@RÖôü÷~¿gg'ŸÏ£ÛeyÇÆÆ|>ò]=Z­f•.|>ßöö6œ_/$/yËét"¢¥%Ly<žÕje³ëõ:>ÉvòzW£ª{üo¥R©V«æúçôz¹R.8=hËF‹ 2úLpb±x}}[šŠ¤µJ¥ÒÐÐP>ŸßÜܤs×q­Æ. ØÓÓÓhŠ•J¥L[XXàRÌÆb1>Ÿ?22²¼¼ ‡°fd|||ii ýš4iV Y©‹r5@ à-r -ö±±±®Å4"‰ÍßûÞ÷útOj4šS§Nx‚_Á‘L&±‘æõù|ét™„H$‚…AÌ –‡ÅbÑëõÐÀ ‡ÃgΜ!ΉœlÏçCÙ€{ÊS(^¯÷Ê•+/Â’Îçó.\ÀÙ ½Ú'Nœ‹ÅÐ¥%¸ \.TI»³F£J¥R‹‹‹v»}ɳ³³×]wÝÖÖÖêêªÛí¶Ùlkkkf³f±X,b;ì%ZêÝnw¹\&Äš€'£’„¦)”²@N‘N§õz=‚¤L&ã÷û;ŽT*­T*ˆíX•q„ÍZ’Ëå˜" ŠÅbÔ'V/F \M&Úâ»ÝI_pOu,¸UÖ=póoDN0•JÑoU«Õf³9==M48ÔjµP($aÜv2™Ü·ÿîó‹h¼ªÑhäóù}¨êÜnw*•ê/+Å tzQ±æÂÍm`³÷Ìáà*³X,dk³®ÓI?©ÁGn·zóÜËö‰?È[àĉ˜ù¹¹9r.ÿ«-⥠ø‹ºFéߢbÜœN'¢=­V;??OÿðÁ½i§Ó!…¥o~{{û%Öþû9'‰DN¼§Ÿ~Úår•Ëe‹ú$. ©q*¬…å+rnèCóTNNNâjONÿåþÈŠt:ݽ÷ÞË}4äi!åëc±XPdF àðbµZÅbq³Ù$‡Fƒ„L,Cûr,c• ‘[8 ŒØëðz½kkk„e±Ñh ¹†•“ÍfqXs»Ýsss ÃØíö«W¯Êårdz±±a±XÀw‡qAœy‘#d©­V‹†ò„B¡x<X·¶¶FV2ð¿ËËËFcrr2 ‚"9„B!±XŒ„Ûòò2:ˆ{¬Vk«Õ:yòäÙ³g;N:F-Í`0ˆD"܆T*ít:›››É‡Ã;;;/¼ðÂÄÄD(ît:(ÀšCy `s¨T*õz!&hmS©«ÝK,¿ýío¯×ëgnnUwÂÅÞjµÀù‚ìp8J¥ÉÕÓgmz³³ì@¯ÍÎÚøÏ>û,+såóùÂá0ëä•Å«W¯"~ESÆ®¶•î&èz{¬ÒùQívûÊ•+8‚਄×ÀÊÊŠßïm™ œ<öí¥výQ¼¦ &K*Þåríìì`Š˜Æá€Žv¬yÀª v²O" |.äoèOu½Ô@5'tâbƒA¿ß¦ÕD"AÞê5¸\&“Ñ]. …bp• rµl6ËòL¿4m§Ûo¿ýÉ'Ÿ|à^ÿú׿ë]ïúä'?ùÀÜ|óÍßúÖ·Æ÷¿ÿýn¸á¸ûî»?øÁbçßu×]ôGôÝï~wzzú/þâ/âñø{Þóžûî»ï8~ü8tÜÆžW÷Z­V£ ?$ Éj‘J¥2™ ˜¡X,öØcår¹•••P($•J£Ñh¹\ÞØØ MžH$‚Šj0W¯^…¼©\.‹Åx+ŒŽŽÇãr¹°’ÑÎêr¹¦§§Åbñ‚ÑhL§ÓJ¥òç?ÿ9¤§@Ñl6—––.^¼ˆB‹Å’N§“Éä‰'ŒF£N§Cåc{{ΕJåìÙ³'Nœ+—ËW®\Éf³ØM›››‡%? ¾ø333ËËË—.]ZYYY__±X,•Jà|xxxddduu•TºtéR»ÝÎfccC«ÕüÓÐÐP§ÓY\\$£… T×'¥P(ø|>Ë@¹ªÿ#WWW«Õ*Wèܹs¤ª-‘HHw˾÷"lìå™h%zÈ‘hqqñìÙ³tœDäÉÁÎN^és ís{|>D9ýgÉh4Ò7\­VéŽíb±m·ÛÝjµzm ݧEÿ.†a<Ï€ÛÖf³aå@ª˜û§Ï ž|òIÖKz½ž4l`Wd2|Žuø²Aä°È&¯‹E$U¡¶ok5¸‡{‰£Óé¼ë]ïzâ‰'~øáï~÷»‰ä‰'ž8vìØÛßþöL&óo|ãmo{ÛO<ñŽw¼ã³Ÿýìüã÷¾÷½Á`ðK_úÒc=†+|ãßøæ7¿ùþ÷¿ÿ‰'ž°Ûí¿û»¿{àlö:¸¨F°PB‹eðx<•J¥Õj5 öÀ¯ìv»M&­Óé´Ùlô™I«Õº\.—Ë511aµZñ@I­—\ÅOÑGl8eL]×* òÞ=WÆä⬔—Ûí–Ëåáp*b±¸kó77lJ&“]³¨ÍíÛZõL!@ð‹¶˜"‘èŸÿùŸÍfó£>ŠŒý¼?üáÓ¯üä'?yôÑG÷Ä'v0hÇE™ ‡ѼÙl&–(™LÆãq°nmmAÁÍÐÂ=˜Íf$O°TD"ÔÐ- 6b`ßÞÞƒx±X¤é%‘µCƒ¨B¡ƒ Ãx½Þl6 À»ÝÂ:Ôæóy©Tº´´”ÏçÛí¶L&3ðF£qxxýD2™L¥Rá€*hèu:­­-¨)* \ –L&?£ÑˆühÝ ¤a˜@ À0ÌâââÆÆÆ¹sçè4&™pvÐfŠPD‡Pñ’ì@¸ør¹Ü`0d2D¢ûØÑF£‘UÑQ©T2™L¯×÷ç›Ðëõ½`¿äö¸‹{eÒJ¥ˆøv]±¡PUOnù€¨vÅ-õy "¹ÜŸÉ5¤˜"ÄO[[[V«µ¹.•J¨›+Íz8¿>‰•ÛŸ!íJV"ú³?û³ÿçôÿ×5´´ÙlXÇ…B ª°ÂX²`—çp8hÿLþìv{,£$Ýé' =dÝëj{¿ÙÜV«õ¡}èG?úÑ[ßúÖ]{:ÁÝûÇüǽx›FŸÑµ} MH®WìÇ'''×ÖÖtM¥Råryll kX ”J%x öé8 Ú€Z­ìt:¥Ri"‘Ðjµ¥R û]‘HBï 0V©Tõz]¥R©T*ÇÇÇkµšÑhlµZZ­6—Ë­­­U«UdP±@Û7 À¸‚Õjø½ÝnCýº$\hµZz½Þd2Åb1ð/?÷ÜsôÆÁÎ…î†L&£;ƒVVVp$W(Pè }Iø]ÜY%;š–.$N²ÑÂÎbUØëFÆ„èõzò¼ ÂÍU^oÌ,}p8à6ìó©®Z©}\3„‡¾¶%ç®?„þèE ÂA>ø½!ŽÈ²VÓà6dƒÙ÷Ãòº&“ ™Pº%£T*!SÏãñÐ !%ò)ì§éØFèE÷ÂÆIÇ}}ߌD¬ÛûÅ9§Ï}îsv»ýôéÓ¬ôz½þðÃÓ¯¼úÕ¯>}út6›íÓ°t0ö4Àˆ @ÉÖÖ÷pC–¾×ëE:Å|ø³`0HV2ø¼QÆàÒ¡*•Jº<`±X€»,—ËÑh´T*¡ÑN(®¯¯ƒã R©€{á‘Åbw:'Ož|Ík^óªW½êÆoò‘ûî»ïÓŸþ4yý`ìo +‰ü¯B¡ðûýè#EˬN§'ûN§“L&ÉÿšÍf4Ýe2™‘‘t¥‡Ïç‰DÃÃÃjµÚëõ‚ž•8*«Õ*‰Ð¡NV²V«¯ˆK ­Ž˜¢PPCäv»­V«B¡S"‘}‰dzzÚd2E"d™“¬×뉤T*Ùív@s%F?E>Ÿo6›@àðáØ"™Læv»É‡{†!€†P,ïÅ <¬3ÍDú×y<žF£¡ àÜcÍîÇãTÖ>†Z­æzHïúY«Ôg¤R)‘Häõz¹oét:4ŒtµË¸Öñx<¿ßß‹¶Žår™UàÀÁE«Õ+ïõzi ˜N§ëU—b>ÎRæpô§2À*âFôc*‹ƒã½êõ:÷ÃNVV*•k¢'›ËåŒFãÈÈê·>Ÿ›*‹iµÚH$Ò²‡†‹^4!×* „Þø}ï{ßÛÞö6Çó½ï}¯œ:uêÙgŸ…1úØÇ>¿ûî»ozzË}ºn·û¦›nB¯3>èr¹þáþxzÏŒ}z½NRÊN§sllìòåË8/ƒ(oxŽtß ÂÀ߃A@zÎ"#—Íf#‘Èèè(xèwŠÅbg{{ûâÅ‹×]wÝÑ£GS©T,Có÷ÆÆF4=zôh§Ó¹|ùr ŸZº!Ëýì³Ï¢‡Ðåri4šD" …œN§Ýno·Û¼²Ù¬F£!ÁÓË_þò^x!¬­­FÐiCÛìÆol6›óóó.—‹–òó,¦¨Õj‘S#ïED-7ÃsêÔ)£Ñ‡ý~2™T(ÐìH§Ó´½(‹år™L9(ØíöõõuÐ:Îê­ÝÓõÆ/4àž˜˜èZŸ…BÕj•a˜®}t¨9ñ8 Ðõî/õR*•Ð̉W@šEßjÿ+à1‹ÅA&\¯×»\®H$2HV ¤½ô+›››Ä!œr×)Â×Ñz`Üý´ýNÿƒ$wÅRy½^Ç€´ØÚÚšœœÌf³r¹üðáÃÈH|þóŸ«J©T–˜ê#N§÷—¥qy}†R©|ãߨ5SÁõ²Z­èÉ!l" Ã僥’}ë[ßúÔSO={vgg#8­÷bŒ?ƒŸ*€íÑhtrrÖäþçÐH)B²%ð)’7FKw§ÓvœH$ºté0 ¢Á`h6›Åbà•P(²p·Ûm6›“É$ŠRP)l·ÛȵÛm¿ßþüù;î¸#—Ë¡³ÀjµÖëõb±(æææŽ9’J¥„Ba0Ìd2>ŸO¡P@ bkkkhhH"‘@A$¡•\«Õ9rD(;v `&4ûµÛíóçÏCTÈœcŸ+‰ßKæa||¼«ÌëáÇ;f2™4VÅçói'±¤­V‹v„ÀD§Óé¡¡!:Ÿ&^ŠD¾è´ŠfIy±r•¥R)•J¹\.–Å'fŠ <ÈÚц‹@¹¡Õ´kº6¤ä1a­rÿža`{x<Ž}¼ãää$p8–¡ïfðíF¿²¸¸ÈzÅl6;ÎÍÍM:ÇFn^*\s …P#¤Ã]œSÿCŠR©4›ÍÜ¢2g¤E"Q³Ù¬V«wÝu—Ñhôx<Éd–Z*•ºÝn`ñèßyâÄ  Xbðª :z%ޝ{Ýëèúí/b|þóŸýë_çwâëþå_þåÀ¯\“á÷ûQZXX(« „’H$SSSÕj^äÜØØ@ö€´»^¯F‰Dǽ^¯H$·Z­f³YÄÓ…B®íH£ONN&‰b±ˆªÃÅ‹±˜ÕjµËåûïE!æ‘‘„\ñxŭÇK¥ÒjµzéÒ¥™™F³¾¾þÄOÜ|óÍÈ1^wÝuÐeW«Õ¨u:ááád2™Éd ¢Ñh s'•JŸ~úé#GŽ\¸pavvB*•¦R)¬©TJNßWmµZ´x< „‡ G0¼|ùò¹sçpÀ‚<]*•"ggˆ Д¯<³GPÏdŒ_½z•»‘% !˜¸†¶h׎$Ø«þ@`âZR©²äá‘{ú‚ „#›a½^áA´Xh*új½¹>@8ÜOÑ*ív»¿ð }؃8'Ôb®\¹Bž;ïãp1¶··É$O–Ü^Ÿ/BÚ,›Í>|xvv¶ÓéþÁvNý V¥R©«xt¢ ˜ÇcÇŽù|>S ¾¡ IDAT§Ói±X´Z-ð('Nœ˜ŸŸïêÄ¥óÑ5‰Ém°ßóÿ‰ýæ7¿yàK®ùˆD"N§À4•‘…çt:+• | ª#B¡pggG¡PàïÇÆÆ:ÎÒÒR¡PÐh4 pƒu–Éd^¯Ë†EÓét:¶Z­ ås»ÝkkkƒÁívÇb±­­-‘H„"Ç»ùæ›C¡ü“Éd^__¿xñâáÇ›ÍæáDZuÑtŽ&`Òkç÷ûA&"‰Ö××›Íæúú:’~нít: (K”ËeµZ /‚@R õz½_‚èm{{[­V‹EØ †a”J%H(ÖÖÖΞ=KSˆuí€&«m‚m<BW‘\<&4š_Û…!‘H¬Vë®bQF£±X,Ò! %I¥R1 µZ ®·ÝnÓž‰Çãý¶²²BÑìЫè„Ü€…|àÄ‘/ËüöW‚ïu2™làÐТR©dfWU›Í,níÚH ÄËæóy.ÌfÐ~k˜:¹™ËåˆP«Õƒ&\ã`ñARkB©TnmmI¥R…BAƒpA½éý nußmèãWpèõúµµ5r:«T*¤a}}ýêÕ«ä,’N§wvv†1›Íb±kÚƒ*•*‘HÀ:“LŒËápŠ‚¬oÇã/¼ðÒ}p óóóèý3 F£Ñ ì:•Jåõz|˜Íf˜Nž çæv»e2™B¡Ðh4 ¨…F†ßï·Ûí¬ÃF>@«Õ.--ÕëuƒÁ‰DÐkg³Ùr¹p'ÀB ¥âÁW45Éfçóy˜À'Ÿþyºð.“ÉÈ.#H[înÒétP¶U«ÕPOØõ Âãö±*ûµZmWÏ$—Ë3™Ì€}ƒb±§øD"ѧ) ›Íõ Œ|$«žÍçóI@µV,µkýœë\g¼W]`ÜÀ€µÀååeØäB¡0ˆ^ÔÖÖ$cÐñ?ø-qu;wqN4C=#½`ÀäñcÂomllÌÏÏG"‘P(téÒ¥sçÎýìg?²L,£‹t±s™<È=ÐÑO*•byW¢Rz0~³„õhÓÍ=úoÔj5M •JQAç4”^!‚Žž+˜lÒùªT*ᱪժÝnG²¨kc±Éd*—ˇ•H$ WÕh4ÃÃÃÕj’êh…#ƒÇ㙜œœžžN&“.— Ù¿|>Íl·Û‡††t:üP&“A™J£Ñ=zT©T¢¯L ”ËeÐ&°yr¹’ ¨T!ñ‹Åt:Zɉ¹Á¿YSd6›¨Ô”N§ÓétZ­V"‘pÑ'î†_ÙØØÀ}:ƪF ôô·*{ô™c×/¢ç[yÄ"[­V½^O@»åryee…ÕkЇ£Ï”œ@h2ÈÏ …¤SéšÛCàÓûÜyWÿ„´×fÝÞ^Ç ‘S6›¥mH$bíÛD"±µµ7:Ô ÔŸzê):ÐC¶1N“[­V¯Õ°kĉêoÃ@¿k‹² zè¿býëƒ:b}H‰Ð 4ø3£Ñ˜Ëå,ËÐÐÐÐÐYäv»]£Ñ€eˆZÒ|ÇÁ3$“ÉFGG r%›Í‚&‘Hètºz½ŽŒG¥Ro‚P(DMª‘HäâÅ‹W¯^î à\Ç E™Ïç·¶¶°k*•ŠX,ÆM"¾!8eX8Î\.g0`ñéÙ€€úÐÐ ´ë ÁxbŸrwx}îìº+ /Ô/g…Bò,æfƒXÇü®}½F*•‚@I4e‰<áÇ¢Òɪ8˜L&b¯é¾ÓwdVÏ ÙíöA¨|¸_IJÉdíõ:ƒO,Ã0,ÏÚÅ9¥Óé>ÍéÀåÑ}AÜn±H$òÄOœ;w. Ñ-ãHšL¦>ä­äú·•×ëõ}´ðŒ_»Vx#©Tj·ÛY*D<Ïãñ@ Œd{ÄbñØØX*•‹Åèu–Ëåtj%‹Šn‘H$‹ÑŒ¾°°P©T, ÉA÷Èn·Ãâäóù‘‘Ü€®ÙlU"/€ÂÜårÕëuµZ=??xh}}½V«Áiñùüb±˜H$677Ãáp$Y[[ ‡Ã-¬T*ù|^"‘(•J›Íf0Ž=*‰|>èþúWÜmµZít:^¯0Ð¥ƒg¶Øãñ°¶L$Éår‡4#W™H$Ð:Dä}ÉÙÂtV›ûân[›ÍÆmw‚øµZ$Åb‘FÞÐÜzz½žU8ÀÑmÐ0Žjš Öß 3¢kÒápp ‡ˆœGÿA¨Fè{æV§*•JŸ PW°W×ÇGVÑž™¢AzЀäÛs䄜8²áØÛ,°k@5Ý÷PëÚÞÞ&§Thz …^Ãf³±RØÀÏØèßÚ‘Ëå`Â"Îf³\êVf©X,‚­ÉȰµZ-:€¬±±1ƒÁ`4qM¿ß6î••Zˆ]$]½zµV«­¯¯ g=dO¸h4°˜›ÍfT¿kµšB¡Éd÷“ËåÉdR*•ÎÎÎÂ8¢õ<‰ ×W(Z­R|ÛÛÛ ‡‰Dh ãóù±XL­VC†ªZ­J$’d2iµZu:]6›%`#Ø}°‘Z­ÖC‡e³Ùd2)—Ëis>ŸG3m«Õ¢')`Âè×1«v»]"‘…Bh9ø¡),‹‰M䊾”a4éHgü»+v <ôx@Z™r¹L[|‚rNb>Òþ ©Î|>OVr¯AO=ðE …Á˜»^Áb±€¾6“ÉÓ¹2§ÑQ«Õ/%A7HHµZeùÑ]œ“R©ôx<ù|>›ÍîììT*ä4¶··ûË “h.›Íâ8366†hT¥Réõz0»týT2™dÝe¹\Þ[„T*íŠü?¿¦q ‘–)—˃œWFFFÄb1í«l6›^¯·Z­•Jx&4—¢ ìv»Z"'™Lz<r¸ÞØØ¨×ëHâ‹ÅãÇ{<žT*e2™Z­ÖØØX>Ÿ_]]F£B¡°ÙlBôèÈ‘#«««¨ªB‰§ÝnkµZ@Ðjµ”J%kµZµZG§Ó® \Gà\Édõz]¡P´ÛmƒÁðßÿýß/¼ðdÔ—––R©´hN'üj4+™äêõz<___Gf¾V«% £ÑˆŒ¥Ïç“Éd¤_‰ËƒÜÙM蹫i»Ý^__/•JðON§xèÐ!:­œr¹\ÆÑi×0wG€†‰„ÐC‡ñ¨f0ZG›¶*´u¦)}éUÔ5aÓ5Æ*‹è3™L¹\޶o…Bh=éŒëäÝŠªÕ*’,¤9ËFVjоÖRÙuììì Âη×ÁZ*¬!ÚõŒ 2ò ÚêÝn76[ÿ#‘ƒãñxD½”›ˆ›šš":r¼nšŒ{ÅåÕjµ—½ìe¬×¿úÕ¯ö¹ŽÙl¾ãŽ;È  oƒt—‚]f¯Ï{ ËAÂÛ}Ñoê@Q„Ïç“¥‚myÓÕÕÕv»M/64‘"’ÀÂ[[[ÓjµÃÃÃèÌ®T* ó©V«étý h“C»ÁÅ‹¿H§ÓÁ`ÐåréõzTŽ9"‘HjµÚ¥K—, 8Â/_¾Ìçóï½÷ÞD"åg±Xjµš@ X\\ .—ëÉ'Ÿôx<×]wÒeÍf¢½Ð£@$cF£T*;w®Óé8Î\.‡28Éã… »ÝîóùÀZËÂ˃') Ò&ò€8ê`°ÙlbV¡Rˆ3%£ÉÞD[³ÅbiµZÐóæñx7ÜpÃ3Ït„u½ª]­R©´X,ëëë½Øù¸ækeeB¸ (ÛÉ à¹ô²<ÄaÉW.—{qbb'ËÒŠÅb"6Øh4677Y3Ðõvµá½lr×y ÍxW/Àý“ WäAëÖÛív»ÝžŸŸgQœuÁ`0NK$¤5xݶóóóל«»ëŒ7fµÎK¹ÿ™ŒÆ×½îuä/zè!Ý~ûí§NºãŽ;¾ð…/¸ÝîO|âû¸™O}êS·ß~ûåË—ùã'Ÿ|Òívÿã?þãO"0øz½NV?VQ0„bÇEûd;´_Qj‹Åà%¹páB¡Pðù|ÈòÍÍÍi4›Í†HÅáp˜ÍfÔd2¾Ð×F£ñÌ3Ϭ®®¢—!looŸ?¾\.K$’[o½ç÷p8|èÐ!pñùü믿^£ÑlnnÚl¶ãÇ£˜T¯×;Ã0èɾþúëo¼ñF·ÛMŽÿ^¯÷¶ÛnÝÚÚR(×]w݉'fff@¼%‘Hb±Ø™3gD"ÑÄÄJA2™L  ÝwáÂVêF.—»ÝnÌ×ëšš’J¥sss‰Äd2Æ)‰‹‰ Ç ' ‚,æñxÏ<ó m"án½®ÈzµZMšVWWÇÅF ©IÒŒ|ýEò t¥R ùÀþœäæææh¡?œ¢èjµÚ>y&ò-«««ûŽNÆÆÆXbƒ4+ý"]î‰D###{=÷ꔡ¿###ØAZé]"'‡Ã A Öõð¢T*‘‹ÀЏWš.‹øÒáptUmACmW´ï5âBÍñ%îë÷<ÿçm{!~éK_𙙉F£þçNbÇD"qÝu×Éåò3gΨÕê™™—ÂáðÔÔ”V«}æ™gpX0™Lccc÷ÜsÏÑ£GQr;sæ ‰ÙlÅ)D,s£½ƒÑË4ðù|ú€ ¡[¿ß®6744¶´£G–J%(JH¥R‡ÃÇ«Õ*òòØ®N§3‹…Ãah2©TªF£AŠê&“)NÛl¶H$âóùVVVÜn·Ïç«×ë‰DbddD&“)•ÊjµšÏç ¸ò x@í¦›n¿—Ýn×ëõF½`š@Ë$t¡@ßétž{î9„\sssN§S­Vollèõú••F3:: ¶iB¬Ž5xwl6[<çýZ­–N§Õj5ú1˜Ï®ts] t«-IöʺR*•ö'aŽ4¦ÃáÈd2{2å2™¬Ùlöé¿`¦T*ío¬Édª×ë©TŠea‘äA/@ &k4}Ú.¼ú¨ÃË>ÓI  ST«ÕB{“$i677-Ëà\ˆëºTh‘xz,,,…B§Ó¹WA†îÎi}}Ïç †^IIƒÁ°½½­Ñh°²¥R)‰:+‹$‘ôB½^o4½ôÄXH¿ÊmW_ûÚ×|ðÁ?üÃ?¼çž{®¿þúüà<ï‹_üâÇ?þñï|ç;årùÁ¼ë®»¨ýð‡?üõ¯ý“Ÿüäã?žÍfAX¾½½]¯×yä‘f³ùž÷¼G«Õ †þð‡Ÿþô§šã¹ƒÐ] ”Ôj5z“pŽK§ÓƒasssnnàS‰D²¹¹Y«Õ|>ŸÝnÏf³ãããÍfóìÙ³dšL&´ämnnú|>ЂA?pff& ?.‰B¡@ ‡Ã¨Œ8Â’Ñhl6›‹‹‹¸ÉÇk4šv»]«ÕÂá0еV«5•JÙíö|>Ðgmm £¹\6\«Éd²T*ÕëuN—J¥är¹ÇãASÁãñÐ"ˆ~¯×ëp8Ο?ŸËåR©Ê‹%•JajµZðª¡]&“¡lF,$ÙÈ„«T*P f³Y–­ ‡ÃààÀñK"‘€ acð€Xå µZMÓ€¢‡~OÝb±X£ÑT*•ÁñõÀ¢aÆT*UR7<<¼°°Ð+¥×ëñ‹€¨V«`¯&éV2ú$µZm¡PÀ-u wc%Áð,ºÞXBÐÏÂz‹àôz}±XÔjµ¬©_p=ù±]ã<♩“sIŸ¶ˆGï9™ß'Øì*~Œ·¶¶¶pìB-O±Ê!ŒH‡ŠÝuå±j&“©+C+‘Šï5®¡‚ûW¿úÕO|âŸûÜç,ËÝwßÍãñ¶··ï½÷Þ‰‰‰~ðƒ•Jå-oyK,ûþ÷¿?;;û /¼ò•¯t:?üp­V»é¦›>ö±½ìe/£ë_ýÕ_‰D¢G}ô#ùÈñãljD,»é¦›þéŸþéÑG­T*û·{àŠ¸ƒð T(Íf³P(˜Íæñññ‰‰ ‘HD–«X,‹ÅDjù¦›n}g·Ëår,Šb1F£Q£ÑÌÌÌÈårD3ÀðšÍæcÇŽy½^»Ý";µZ Â$HjµZ…BÑjµŽ=Š–¼B¡€ãÄÄÄ©S§ìv{ @«*x+ªÕ*ØŒlœ]XX€5Ü0 “æñxmrÓ+• „õÀœ‚Ž—Ë…&°´~¿PJ—Ë…²<Òì¬ÍÚDPyïzT’Édäõr¹LÖ0ár¹œ‹ß”J¥d;£¡±+ORŸ! ÑT¹§R%ÉAu•x`Åd\‡1ļ• ðo°uìzJÁßçóyzöX# q=“V«íU«®×ë$ËÚ'ºª×ëä b0”J¥ÑhÄ5¹†—þ±,ÃË2#hîÿ©®óð’"'ÖP©T½ãv»=³ž"x«ªÕ*Òú¼Þ:X¸]},ë€Ö+¶Ý5潆̒˜}ƒÁð¡}H&“}ï{ß»í¶ÛŽ9BÞ=}úô¾ð…¯}ík/{ÙËž~úéý×>}út"‘øë¿þë7¿ùÍ333wÞyçÏþsÖ•}>ßßüÍߨÿSŸúT¯ŠåÁ`ÁpFÀ°{bbûø!œ“È™ —ËMLLðx¼­­-„f±XÀµzéÒ%ŸÏçp8Z­ÈxÀ ³´´”L&³Ù¬^¯—Éd(äx<žb±øÜsÏ)•Ê'N@ð é;µZ ™Z¡P˜L&QæóùnÏ?ÿ¼X,V*•‘H$[­VÔ!‰„P(ÄŽ(•Jår¹^¯W«U>Ÿ¦v"9ÚétŒFc¡P0™LV*•ÊúúºF£H ¼Z<žžn4©T Gf’ =|ø°D"å Íf“Ëå¡PÈb±„Ãa$á3œâÒa ÇÁétÒtä¬Ý5¬a¹¢}lRÔö?˜rm÷à(W.‘Hd4¹Ñý£ ¦'\£x‘ÛðÌ5A Øgœ_/gIâ e2Ã0¬ðˆõ8:/Ž>Ï‚õ­V .Ö_²òj}ÂY@`µZK¥=ׯ9A:š4Ü>}­V‹àaª«f³Ù5× Pý =ÅÈ~`íÚ2ŸL&‡††v¥ÛdÜÿý¨'ñx¼ÇœûF£ñýïÿ¿øÅ7¼á 7ÜpÇ{Ó›ÞÓ‡zhWxö¿ÿû¿ÿÝßýÝ[ßúVŸÏ÷裸Ÿ]ϨI¥RƒÁJ¥Ð¥Mˆ“% œ*ƒT{ÖS©TjµºR©‡‡ó# ì‰DB"‘ÌÌÌLMM!°àóù@´@ÙvaaÁn·+ ‘HtèÐ!PáU«ÕL&#‰Àcd³Ùòù¼F£*Ã0@Àn·'“I†aÀï"•J 6'•JU*|K³Ù¿`¼—/_&¼J¥rggÇh4šL&¡PxéÒ%·Û­V«U*‰,Á–„ür€ñBõ#Cbcaaú¼`›…ºëüü<9SÒD"‘˜ÍfÚ‘ª;ê/O׳8~¡zdÑΩë/â²/BýH¥Rù|¾­­-–'.•J$¡ÈAò™0•(Aáã^¯—”?@ šÆV«µë•a?ÉyegQ¯×YAzà0ÐBŸ€[iOZ}p«Õ*Y«««Ü~$AÈ ÕÑþë²×ì¬CŸÏï%þ¸ë=\áP(n¹å–H$rùò剉 ¤_|ðÁ7¼á oyË[yä‘p8ÌbÎǸxñâ«^õªÏþó—/_ŽF£§Nºï¾ûú‡çV •JÕëõ¹\®Óé€^G&“i4šh4ªR©&&&ô¨Õj=öØ~𜟠4³³³“J¥ E½^_[[§2Áâ´Ûm…BQ©T&&& a6R«ÕFc||9çl6‡aƒär¹t: ¹jµŠæl€a  Ÿ‰Åù\.‡¼n©T* à†ˆÇã™LæìÙ³¹\Ža˜\.‡è¡B¡°°°¨S0Dc­N§C·ÊT:.Ÿ9sôwb±´åè_Åbù|Þl6çóy‘HtçwŽŒŒLNNrk̈ɉSü›k(‹jµ÷022&‹þ\ì/}IH¥RšÃ‚N{ v4›ÍõÏ*;.‘ mÉw©Tªb±˜Ïç•J%™"®ÑËd2ŠÃÊd2\§X,â#´Ï+—ËÜ,åþ¬ë®£\.÷é^AÝ·?Hˆõ½Þžh¯7JÏ‘ì¤õêû'v{œ†‡‡ ‘L×C«’‰6bú•¡¡!(Ðìïö=>üáø½ï}/yåá‡>yòäÉ“'!juúôé~ô£xë¿þë¿®¿þú#GŽT*•ãÇ¿öµ¯ít:kkkð •Jüñ»ï¾ûï|çê³Ê‰)ÔÌàN(—ËåÕÕU ÊЮËåÐÔ¼­ËåBO]¸pazzV°þ„ÃaÄ4 5™››S«ÕívÛãñðù|(nèõz´är9•JþP`w@³ä¨eÂáp0ÜÜÜÒ½‚?—Ë•ËåV;tèЕ+W =Lÿ kÂ÷´q°PY6óšŒjµº´´Äò¸ ¢Øs wð·“é7¿óÿ½þö{â;/õ³ï|a@u%^oýY>ŸTI¯,$Bú¢·»ëͰ®ð{¿÷{=öêÆxå±Ç3™L÷¿öu]Ây©²Öä ‚ §¨×ë Ôëu4ã(úÿñ/^üû¿ÿ{’'dÇÁ¹âj¬·Èwñ82q{J¯ÿ¦ŽË—/_¸p!&¦%e¯×›ÏçagIÿ²^ñxÜï÷ëtºùùù‘‘‘Ë—/#ÿ°¾¾Þn·}>_, W®\ƒãããèCk6›x¾år9N·Z-p7Äãñéééf³©ÓéD"Q¡P@ILkjµà*‘H”Éd²€a(›ÍBH°^¯e‰uU.—Ú‚Áà±cÇÐmh0Âef|| tœ+++ˆx …ÃáXZZ²X,v»}mm ¦\¡PLLL¬¬¬H$‹Åø|þèèèêêêØØtQqÁ±±±‰‰ Ø‘ÙÙÙL&=‘p8 ê üpz³;ŽR©„f3üÇ3 R©%w(Tq÷2&Ö¶ëfçóùGŽ)•J8¤vµ-€î"ã:8’‰kmpÁÍ£kŸu5|‹@ aMuøðáz½NH úÛ1t÷ @.K߯ ÀXü(·ÛM2É#ãþ^–…¤ïaÀ144!Ý}¸†> \Ö“ýË¿üËá¯>s5šO'¶æÎ¾$ó×ét`@YaR©„¸5’Øê¬R N|䦜)PÅàShèìSÖã“Étÿý÷w} ÒSôùŽÕšBwþ^ÄF£ñíoû¡‡:}ú4íKXˆ3ÚÓpÁhôwõ¸ C66¡P844„’ÌÈÈœ²‰I­@ z…B±µµe·ÛËår8ž˜˜h6›Ç/•J‹‹‹Hs]¹rE$Ýzë­ÑhôÒ¥K×_½\.F£JíXó à ɦ×ë™!k`o«Õ²Z­ þA°N§‹Åp*ív{qqq{{{bb¸Ë[o½U¡Px½Þl6ëp8r‰D“““ˆÛíöÐÐÐÊÊ èŽ9Oø  Ý1Eçüùójµ:‹Áa@¥ñ%b˜ÂÕÕUÄp‡‘*.— "Rä´„ý•H$G†B!¿ß~Eº¿Éãñ€«›õàèNâ®[µÓé@ï¼Ïßh4¹\‹ÅödX!Ü@·!(•J«Õº²²‚öEÄ=´Åõ-K6›- pí½,ììì,J¥Þ§aÝårmooCr¢ìxÕJXÿ^žI.—#ð …‹4´m–ºzÜÒ™4rƒÏ!]ÂgÞ^®ü;,//÷w· Ãp%ý^êÙYQVôM ½È f···­V«B¡àæ¸e2YW~ ƒÁÏçK¥ŸÏw8{í¿óÎ;§“dd2™¯~õ«ï|ç;ßýîwxŽ_ÚËå*•*“É€6/²Ât,º.’N§ÑAW.—ÇÇǪÕêÉ“'“ÉäøøøúúºÍfƒE³Ù …BÍfB­V Ý[Ã0‡:Ö8Ë“ni¥RÙn·3¡‰N£ÑÀ`Aêbrrç\•JU(Ôju"‘XXX˜˜˜@[rh …âüùóVEy½n IDAT«5ËåòD"!—ËÑ›ËåPxK$ý‹Åp ÑhÔ`0Ž"b óù¼ßï¿pá‚J¥R*•­VK$¾(°ô˃Á I …B†aÐ %rì;"=L‚ …2™¬k‚üû`CàJÂ÷ÿ"òÜY¯À3!Ù•ËåÄb±\.'& ¿ÙBô¿t­8 ÝJô”ívûÜÜ”‹i VV´AÜI³ÙÄ= ¡Âí7á~‘ÓéÄGðøXmµZmmm $“Äy`±.Ø #4`HÄá‚“¡—ûa-­®£P(pïS´¿ûÓétxä»öÎõÊìõê§„…vNX:è$Ée”jþÏ­¤ÙlþÖ·¾uà-~ÑB‚ä<ŽÓÓé¤{…u:mHæάÝnF#À ¡õ®\.!jÔB¡pìØ±Ë—/rà‡@ -‹m6ÒwàeAäIHu:±XŒØy¼r¹,@ °­Ãá¹,#hÈ¡UX(Ð׌¶:'“ÉF£±°° ‰”J%¬¼F£aA?!TŸJ¥„B!t܉ùsR±X4›ÍHlôÙÅF£Q.—Ûl¶sçÎñzKØ( –r„H$R«Õ]}Þb9'ô^îcm…BF³§23‰W2™ŒR©dÑ{‹Åb‡ÃQ.—777†)   F€•JE°á½šÙÈšDË@×›Ä[}b†aŠÅb³Ù\]]Õëõ0â½@läj:ŽKhËMGI¥Ò>§vøB\“á’áv»777ñôa®OöûŒœ®9^ŸcŸÏ—H$Èq˜éßÎnf¨b“ ã:bqrÄæDð­V«‘Ù°Z­P©àñx¹\.—ËaÇ ‚Ç»Ýn0ºæóù•••L&Óét†††4M Èf³*• ºM`L€ ïŶu¬IF#“ÉÄ/”+Z­Z3H#S£Ñ@CG6›ÅVGÔ…:ßïíT£.]º„#ÂÄX,†ä0‘ªÁ¾Àñ™N‰¬®®J$à½ÀµÓl6oíìì8>Ÿ+Iüz¯íìr¹ìv»X,†´n&“Ñh4hM´X,ÛÛÛp3©T éJÖA¾—‚h­VãžM÷mRh„é~, §²[­V777q?tIŸÜ!>BÜä€766 …Z­Îf³‹}7$)ÊÕÆ$ƒ¶ãf³Â"¤8’L&Y÷P*•úȳ|Ì ðî¼Þ$å¸s¤" ÷ÙC‹ÌÆžÔÁœ‚Ut œS§Ó¡—^¯G?>7AÜétÈÔƒòk‹ï—Ö~0~5Ñ®¥Os¼ÿÝ¿¿…ª2z®¬V+©%“ šÜ@Øc·Û¯»î:F …žþyÄUèMçóùápÍuN}Þãããå“H$z½Nræ8M3 ƒˆJ$°òQ¨ÀcŸ£ÍoccC*•NNN¢ƒ@.—£ÿ,±.— Å¡ááa¡P¸µµÅ0L³Ù´Z­`Q""ßK? ¤Ë^×$‰‰‰‰ VrŒkÜ!vƒ†7‡Ã …ÐÅÿŠºˆ@ ËÂîo\ ƒÁP­V÷EuÕ¥c)6±Œˈóù|TŒ†††\.×èè(žŽørKf³¹® «îÅ¥ÐÅ÷GKØkT*DØý§à¿®…7Ú}Öjµ=Ý»Ý&¯d\ƒX¤ïKC¥—[&:Ùðg###ÜÊØÁø-6›­T*Ñ$r0£è"ÙÙÙAŸ[>Ÿ/‹hFjžÈ¼‚dõpÇ¿¢R©P„R©ŒÇã"‘zÍhÒk·Ûø"󀆌G Ã0 jl0½^´/^W*•6!äÒjµv»]§Ó©Õjh–J¥jµ‡AžD~ ŸÏw»Ýñx|kk«V«¥R)øÈ¡¡!>Ÿ¨ ½d2i00HÙѳçóùP~o6›kkkÄ3¡îKö J&“‰ø¡h4‹Å–——QßB¾§Ìj6›eA8‰`ñ/?ñk4!XüR®Cäêû˜)Ö@·=T½^ï+^ñŠn¸ÁápF<,–Û#ËX&“±ôËiY$ñ˜FFF~AÉ*ð ƒU‹-±æðí½’Nõv»l[wC¼i=Öt÷rZôÿöBÓÉÓr¹F_ʹ ¬­­½Âüƒñ+8tqttÕi²HÒé4Î@¨ ‘è¼T*‘ã*„Õñ"À’2™,™L¶Z­'Ÿ|°’3L¥RÃÃàf˜™™zI©TÞœ/¿ "•J¥ív-|J¥’4Ñ„T«ÕŠÅ¢T*E.±Z­ªT*§Ó Ü‹/V*•›o¾©Hä WWWK¥Òððp&“!í×t‡ÍJ¥})@ ÕjÓé4¦ˆüX2âñ8ðI¬·€‹${ù1µDM§ÓÉårJ¥À^ÖAžv`Vayiûý Ç‹ÅÔ/¯V«{EÿÐÃï÷onn¢ È}‹€Ë&†yPº^¯#F—H$W¯^:…&¬!>rµZM¯×‹D"r}>Ÿ?11hž…R©Ìç󽜮×ë})6³Ñht­8¶Z­—’¯2N§O‘,W:˜aõÍ ÿü½ïûæ÷ÿÇ9½½º³Ù ªy<{’ýœžž~Ýë^×l68ë~}8žþydº+•ŠÏçö±ÙlàÇ«V«£££¨Á<Ùl6©TJȈ±ÛN'Úd2Ùöööæææúúz(’ÉdgÏžµX,ív»ÕjY,–µµ5—Ë…BK¹\‹Å‘HÉt´oñx<“É`ÈŽ Xና£V«¡-äаZ­Ö¹sçìv»ÓéÔétN§“aøNÎY­V‡Áv Ä7Þx#¸!Ìf3­ —Áª{Æ™™™ññq¯×«T*C¡H$òûý0v»TµZ f¢Ó逨††UÌÌÌà …vݘÃÃÃàS‡ucI¾Ž¹\.VÅbhh¨¶^©TÚ5’Éd‡8Åã@ À2ÀMÀú{œ*ÆÇÇ7€‰•j ‡³V«1 “J¥¾ýíoG",£ÑH ýää$`¥d&‹U*—ËEæ•Qb¸@µÕkò1EB¡ÜÞ^k4½ß_J Åg² ¹Æd}¬O:uJç„v µJ)·a§õ‚Á 7}Œ-Íz´È…P(¥O´ØÒá*Ž òV¯@ ˜œœ$O~õ?:UûŽk›É=¿ˆAÓ<¢1i}}½\._¹r\øÇŽ;~ü¸@ 馩©)@€6tF †‰‰‰éééV«e³Ùž{î9§ÓùÔSO=÷Üs«€þÅÔÔT>ŸD"Hñ5 "ƒë4 ÈJ¡ï]Ojµœ~xµì†aT*•Ùl¶Z­Ífóúë¯w:°AµZ-›ÍÎÎ΢ë©R©\¸pA*•:t¨P(ƒA›Í6<<¬T*o¼ñÆÙÙYàŸvvvÜn7‹?åÔ©SšËårÙlÖår9N½^4={&“éäÉ“·ÝviGFFX›]$abá>ÉQý ŸF2W$Z%VÞf³׸¼¼<;;ÛËà`§óù|ÚnwLWµZí߸Kÿ¢±±1´}Òò]'OžìšŒ*–@¿c±]tG•V~~~þg?ûY"‘°ÙlwÜqxåác¬V+²ÄB¡³ JˆÑÑQ›ÍV­VÍf3²¬ ñ¥íxŸc¦¨Õj‘ÛƒA~‰ícb±xlllßg© ÷±ð}Æ@i=¤h·Œ Y‡¼/tõH*•Ò§¤>팽Þ1s×6yû,Ç®òŽ_ÿú×{¯×ë½ùæ›éWWW«Õ*ñ‚{=;,//kµZÀÝn7Ê ˜ÁߘL&«ÕzàrÉŒÃ@ ‹/†Ãa”ÜétÀÒÒR4•ËåÍfS£ÑÀ?A@]¡P”ËåL&õ?´¡Ëîõzårù 7Ü€G[TAÓI–1’]Ћ«V«V«µ\.C6·Ñh@À t«€âÁˆÅbTFJV±XlssôÒ6›íêÕ«ccc°kW¯^Å!ýòåË^¯×b±,..úýþååe¯×Ç!Ÿˆ u£t:íõz‰„ÇãI$Ï=÷ÜøøøÙ³g‘¢˜I(bÆb±œ;w®ÕjŒŒ\¼x‘ÇãVŒ¸ˆæææǰ¤×t”ÞÈ.Ê{‘í7Ã%ï!ñ‡\.7ƒô˜ÑÞ¥«´V«‹Å8¿"qP¡Ê…_‘ËåÏ>û,÷ã¤ï¼ë·Èåò™™™t:Fu:](Êçó?þñIXV©T€öM¥RF ºN§søðá`0èt:ÑJZ¯×Ñ¢­P(Ün÷®Ø Ø7rGøN¦×b±”J¥®½\»þI:E0=>iðøì圸©Ãz½¾µµ¥T*qPâ.¦=±#‰ßõ'ío‚D"HYºžº >)•ÊW¾ò•tׯììì<°±±ñŸÿùŸ·ÜrË^ï!ßrË-÷ßÿ=÷Üóå/ùÝï~÷ 7ÜpæÌ™ßùßy9Ç{ík_ûæ7¿ùÀ÷ ’Â&i:²9Ífs±XD-Ó`0,,,Èd2NW(X(Tw …ä*l6P56›íÒ¥Kjµ {p0f³¹\.[­V”¯l6[¹\†Êm.—Q¥R1H Éçó (ªÝn#®‚¯"5ðz½^*•Òét2™„h!`¼ÐGgèææf6›}î¹çÔjõÊÊ HL&“H$Bg±X.]ºtäÈ …‚Ífk6›år¹Z­:«‹ÅbÐO(•Êååe‘H„]&•J- hж¶¶X<¤b±¸T*ažÑÖ<::zñâEVN†a˜r¹Üç8ïp8`jQE»JáÌZË>VˆD" …àn¯Õjt(IWÐë¨ÑhT*Ü­F£i4¹\‚°]¯¨Svµ°@€a*°à¼1E`/, :©QŸÏ—Ífãñ¸P(t»ÝD&´Ûí‹‹‹"‘]ã}U°GÇ ¡¬¼õQ"‘€¶‘ŽQà‰DÜÓÆ®wÎ@0Eƒ:'èlòù|µZÝË͸oŠUH´ÁckµZ8'`_"m+ŸÏW©T½–8Ã0¯xÅ+º¯Xëò‘G¿ñÆßñŽw\¹r% E£Q©TŠÍ÷ÝwÿèG?ªÕj&“é®»îZ\\<þü7Þ¸¶¶Çßô¦7‘ëø|¾×¼æ5v»ý‡?üáŸüÉŸ´Ûíßÿýß?~üøüãññq÷ÔSOán¥RéßøÆH$òÓŸþtjj ùW¿úÕƒá·Ü9ÑäÂ$–B¦Žx/(À’‚N§“J¥p8¢Hq¿ñññB¡€  ´û`˼^¯Ûíe8*Oív[.—kµZl?4Dà[©TE …ÀóH|U¡P@W.Å0 ø“o)ŠC‡AXÝív×j5§Ó™Íf!ßh4´ZmµZ…š‹w Fpc«««F£1›ÍBD¼\. …x<îóù ÅÙ³gy<ÞÎÎÔ7x/v óù|G4n¤R)8 —Ë…&cXg:•1_rÖf!L NS*•‚š,‚¬˜ƒµÙ¡§E xTìq€ yI7wÀ!1 ƒ ÂÃ=àÖ=Ós/õtøLÝó…›0 V«Á¦R©†ÃáH&“"‘hggÇl6·Ûíõõu2ÙlV(šL&ÒbÊõ   ae’zéŒ÷h¥_I§ÓƒTýA®ßÕ9íÉ/ ˜ºçDPT,8•ÑhÌårXd¨ÓôZ(J¥²» ò¬B·RÕuX,–®²•Üûß÷xâ‰'VWW?ó™ÏLMMy<ž/ùËz½þ£ýèwÜÑét¾þõ¯ƒÝ9—Ë=þøãÀ>ôÐC¯yÍk:ô™Ï|&¿Ÿþô§øÀ>ûÙÏøÒn·‰ÄÒÒÒŸþ韞>}:Nÿå_þÿì}g”£gy¶zï½K#i4;³Sv¶8îØÁ@B8$Ž1‰Oˆ æp’ð!Ü0>êpL'È à¸`° ÄÆem/kïÎîìô‘fF£6*£Þû÷㊟ïý^•Ñ;ö9þá•4Ò«WÏs×ë¾®»?n6›¿óï”J%³Ùü±}ìÊ+¯,•J333ãããSç¢íæN‚t€Q¢²$‘H ™Ä`0€½†ÚFS©”B¡×çÖÖ–Ýn÷ù|°ªB¡0NK¥R•J¯ƒŠ?¤J`‹±/Ȩ<áHž—ËeÂ¥‰ÙÙYŒ¿èt:³Ù\©Tb±±>ÈäÀËh¢D"!ß8:”7äry2™D²‚é@1@¬– ”©Ä6„ã¢D …„@ú˜J¥¨ÒÝðåÈùb±˜T*¥‘{Þk€ú{:8Ô“Kí ¸PÁë´ 2™ RÕÐétñx¼ko¦ÓzÐÌ7ZnToÍãñ†††677É-" ÇX,†z¬ßï×h4ÓFîn41`0Ølv(ˆ›Í6½€Ž»ríºt:]2™ìš&‚Ó‡ü‚½ Kóv;2ï) ‚Ík6›½¨›º7Í@ïÕZ›kê!1år9Uפ5O¼. ©@xL}’°½ˆÄo^Eœ´µ&û¬§žzŠDù|þ?øƒÁ˜™™áp8wÞy§ÓéüÞ÷¾÷ÿðþð‡C¡Ð£>JÒÁ[n¹E­VÿË¿üKç{¾ï}ïCvÿ¡}ˆêWVVn¹å–;ï¼³Z­~ÿûßÇã/¾ø¢Óé¼ÿþûÉøc^:Ýo›ÍÆãñP˜U*•PHê´DCCC¥R ¤F£‘ì®ÍÍM(É ²ý0Þ„jJ¥Ik(Êçó‹ ˜´]°yŠÏçó„b<¡¹\.›ÍâPmÉD"›x*•Z__'dêÁ`0‘H´Ûíp8 —––@(Bü[«ÕJ¥RÉd²Z­”´ä}{»ÝŽD"dn½ÙlªT*‘H‹Å¨&sÊ]o5`´“Žbf§ž7NÁ½„¨?ÓŽE!ÐÒ{£Ñ œT*µ[Œš6ŠFëL j,K­VSwQ§ÑëzñJ¥rhhˆÐ4c&Œj—pÙl¶ÉdÊçóëëë|>ßf³Ùl6½^ÿ–·¼edd@$Ö6›ÍápLNN*•Êf³‡{uÇ1ñF}0TÆk —AnTJ~A‘H´cd¬Õj;ÚåryŸqUÚϱ‹ž“ÅbI$]·Å€$àhû»Ow c"].Çóz½Z­áôrzõÀ^§u×]wÑtÃú¯«¯¾š˜Â]­ûî»Toä‘믿þÞ{ïí:øG¸ŠÅ¢Ùllš„ÀHA †Ýn'Ò·&GAÌív‡ÃaF”Ëåt:- óùŸëA“‰¨bBÓ¼Aår™Ïç ‚\.Z@°¼¼ìt:QµÇ0PÝñxÜh4¶Z-½^Ïáp677Ýn7ä ‰OÊårøâ€B C‚CBün6›777xFÞn·Cf‰Ú¡éùRǪðnÈ···iU ÀL  Ìår …”î5"ãr¹€¢ªV«Hžö,ÓøCù|¾V« …B´o OËÀVðý!ç‰Dà­Ém4´:Þddôð¡Pa„L&s¹\ccc ™LÉF××ב{½^»Ý¾«Ùh=ò';Ne2»Ý>H荒`ËèËa¡R©Úíö Üœ®®€ÝñññR©´~ÕNmÀþÎ ‹Lw»\.D%ëëëD`؞ܩáááõõõ×ozéÁüÅ/~ñÅ/~ÐÒ[o½õýïÿ½÷Þûúß¿û»¿ûÔ§>% áŒÝn÷EÏDuN_Z^^& è²À c3Äãq2·ˆ ÖZ­†-¤ŸT*Õjµ|>K@€ÃáhµÚõõux>Ÿ?;;k4Y,–Åba³Ù[[[´‡Ã) 8Z¦Ùl‚Ñ5›Í¢“„p|>X ô®žþyƒÁ0>>®Ñh&&&Äbñ©S§ bäV,»\®@ àv»µZíÙ³g‡†† ˆE0Ÿ¨Ÿ¬¯¯—ËeÌ?aÒw)‹Á²èõzpÎÆãqj¬ÚÕ-‰ÅbµZ d>À4H«½3 §Ó ….h‰DL&uʰsÑFYQ]ÜÛ~°Z­Pîå1ÁZ¯×inÒívS=v˵ƒ90”¼hí‰D‚¹4ê-2 gΜ‰DHnФôxwÂ%]ŸBéiðøßlXu?‘H4<ãh¸:ïÃÄÄc~ǵ±±Ñi“i#q´½Gý-ÍœÈõ–F[T—t:M }dìctûqàþŸV ì”f2™ð^k »ÝÞg€·ÿH$ƒÁ@ Êl6›L#á^+•JƒÁø†Á` Ͱ¯~õ«ßýîws¹Üòòr2™ÄS`rûiµZX4>Ÿo0$Ég?ûÙJ¥róÍ7#á}ôÑG_xáh¶^tHd±Ùl°½Q+ÚèáS3{±XŒS \%ÄΩg Ö¡Ñh°Ù쥥%8ŸÏgµZ‡‡‡Íf3~» .\~ùåçΛžž®T*6›ÍãñÔëõßþö·ÇŽC‰Æãñ0U*¡P˜ÉdÄbq>Ÿ3:‹ÅZYYQ©TÏ>ûìØØÈÀkŽ:ŒßïG)c.étÚï÷{<‘H„aU¤‰D‚v GJPÆH͹\îÂÂÂÄÄÄéÓ§IûòE™Lfzzš*è‡"D(Âù"X<811±²²‚Ï%"^æóù>¼²²¢ÑhD"Ñúú:iÓvî^(áö “©¤ÿÏ6õÕEæ”H$LT*2ŠDk¨…Bjï4 b ½3U™…ºˆ1ìÚ,i4°ðÀó7sÑ—à‚Lû3Ï44´¾¾ÎápªÕ*Ttëõúää$úa¡PÈëõ"½s:&“é¹çžêjw¨öÁé‡W«Õ±±±B¡Ðy¢GGG£Ñ(8ÔñW˜2&ZãTa¡=¬ËY;ÚN¬3¶ â×ÎÌ@,[,–^Ò‚½Ú9l6ûðáÃ|>½% Æ©Õjxý‰‰‰¥¥%•Juøðᥥ%Nwøða ¥R)`ÕR©¤“Ûíö™3gv¬¤!×ÙÚÚB—ÅUÌ´A ²OÛï ˆ# Ú¥»ýÛ{ï½w_2íz½>@¬Z«Õv‚[ªÕêëí™Ð”î…}ÙÆÆF§B‡ÃáxÛÛÞÖë·¿Hû¦]@@¥RMMM¡†yU.—‹¨ÓéÂáp«ÕãƒÙl …áp¸â'Ù¢ðL(…Ûl¶‰‰‰|>áÂP¸2™L½^Ïãñ€Ð*Ê è.•J˜€ú¥B¡ËåÈx<zEù|ž¿òx<›Í6??/‰Òé4f˜æççF#ü¨ÛíÆ(Õùóç- RàÀ+ŠÚõÙ³g½^¯X,–J¥(ûÔëõ‰‰‰¡¡!§ÓéõzäÛÞÞ¶Z­$šîê™d2ÕK$&“‰†9˜[IÒ€ìŸø›ÕÕU«Õ‰D4 ˆk7/—ËÙlV­Vóùü>¯;®½ý-rSHŠÀM} l„Ø3ÖÓ`0tõL _É© IDATÃh4öê¾7›Íååe½^ ›ä"‹‹‹&“©R©$“Illl¬¬¬ŒŒŒÌÎÎ^z饸‰Aã …åÛóÙl–ü(ØÉ@šž½+rTö@@%9d±X(t­<õz ÉI«ÕÚ'áoÏžSרò9è÷Àˆ#„g’Ëå„.ˆÃá0 ˜\.ß•µ‚]9§^()ôòŽW\qE±÷ÚUµ³×õ|Àív_t$¯ÓJ$>ŸO$É-›Í’ØÅk¨ž£1C0`jµšZÅ…’ù§Éd‚é‡GAó3=J¥R£Ñ8NL ÍÏσ‰ ¼G‰D"lll`ÆV œ={ö’K.a±Xàƒ@­/›Í¢#Õh4ÔjµH$ŠF£©T £¾>ŸÅgDë‰DךQ€­1Ìãñ„Ba<GSõj‡Ãår£Ñ(X«Ñ—(qqq:ÛÛÛÁ`pqqqaaŸ;O˜ÊNbøtÆ(ŸÏ§ö•¹’ÉdÇŽ{^±X„t„÷ã™ö°Äb±H$<|-:‹Åáp]ƒH$ÒyCú€¿hOI$Rög0µZ­—X”‘')ŠB¡ðꫯ …BÄ4…B!û|¾™™Œ‹¹\.båiÕQFC í)ryØ*ƒw›¨9%•ò §©—¹îÓt(•Jý¤_]2'ê¤-¹šN\ uØ EFjfGÆiiOõJÀ{õ‡@ÓIKÎ;÷‰²ßxÓyÕUWÑxù.®\jµ:•JÍÎΊD¢L&c2™PS*•Àjãð›) 2`ˆAN2QHÛÉ ìÄ”k³ÙL§Ó…BA«ÕÚív@•Òé4q(ÙùýþãÇ:t­œg$Xà»C úL˜¬h·Ûsss±XL­V7›Í¡¡¡v»8ã5‰L&“H$x<°Ùl¾páüÊà4mll´Ûmg02™ †Êåòúúº^¯Ÿ››óz½¸ •JU«ÕD"à©óÈ, (/š é<ìäxÒ"z—Ë…1§ÓiµZŸ{î9ŸÏG¦;î#ØûL)QAU4†Ù®†‚1©F år9 McÐét©TŠÈŽ *¸¶¶|` ‡Ãf³ØtE*—Ë1HÀ Lcö ëeïª J5•döH¯×z­®Õç)’Ìðx¼^IûrNdæ;~aêïA‰D‚ß¾ Ê`¸éýߺVávtÎB¡°Ovuqý~­z½‹ÅP?Éf³$â#„͵ZíðáÙLÕ3®ÅbL&“œyé€ßï2™ ƒú è\<o4‹ekk 0˜!Ì”J¥ñx\«Õ¶Ûm°Úg2µZa ¡PX¯×Y,–H$ZZZr¹\‰D ‰ááað­Aɸm” qÖ|—H$CCCø4Õ¹\.‹Å*  PJ$ßwuuY#bG0#`.5?~4w°Dd™ÉdZ­VBAîÕjEªÑU‹¡Z­êõzÇ=ûD"Áf³ûKâR•vµ¸\®V«ío©…&›Í ‰Ãd+õÚjµn”R©Déµ³X‡ºngµZ\R¹T@½^öz½RFæDúÿ6›M"‘ £Òjµñx`½^Oœ:ÈéÅb16£‡§öv”¨†—ö¥ðMû0Á¸lçàËz™L¦Ñh ““T]IqoÇV±>/(‹Z­öСCИéõ2ijý?K¥RuVëõúž[©×›m±5Ø}d3(%U«U‡Ãa³ÙR©ý¢Ñ¨V«…b±X¤ÊGä·­V+áu2™lbbB$OÁh4& ¯×Ëd2§¦¦t:Ýèè¨D"8C3™ŒD"ÁˆÏ+¯¼+Ãb±âñ8†0Ÿ»ººšÏ硤ît:Áº¹¹‰j[$‰Çãñx<™LF£Ql‚£ayy™!álÐN#ŽãÃÛaúiÉM.—;5"N¿ß àTµ$òÑÔÓ”ÍfaD"2^.—-KJßA‰±ö¹èbƒ›+çE¢ßK‹:Íú8•þÎS¯×W*•íím`La\öð@’D“7öx<‰Dbttô¢Øàïû‚Ø`:ÆÔ'‡Ãn6T«Õ:ŽÕÕUL¡BØ 09ô{ ºäp8 3 sŒ@&“•àà) ` òxSÒÔOA–ÙÕ8Ÿ©k0Žß«ÏVœ HÄ =y#@žÂ-êo—É}0§‹Hî^µZÅÀþÙUõý< /Cƒ¸ÓmàÁÄjuU‡R©T2™¬X,"ÔÃDùކwdd¤Õj ÂI1::JEšL&°PÒ^¶ƒØ ©iBr”vCN'8Ž=J#›Íäñx¿®-+"6Z‡Ìb±ìyøüâz®P(&…F£±´´„æ3 ´Á`ðÔ©S°hµZM @­çøñãZ­¶\.OLL Ùú“?ù2­éõz'''ÑJ‘J¥V«µP(€&Žjyyyqqd¯FC§ÓI¥ÒÑÑQ³Ù|ÅW üõä“Oþ÷ÿw&“ÙØØxñÅs¹:=бe2™Ušt:íñx X*ôz=ÏÆÆÆÎ;¦5ƒ‰DpôÊå2é]aÒÖ`0èõúr¹<55uâÄ ÚÁ`Ðh4ž8qB©Tº\.ú!²¤õç766à‰Ùl¶N§C÷WxìØ±w¼ã|>ddÃd8MP&²¶¦°ÆçŸ~iiissÎ×ON‰¨å/bÓM&•º­^¯“¢ŸÙl¦–C:Çi;fŸN'A'd·Ûír¹·hǘtñx¼k“Ü=2Û ‘H¦¦¦4Éd¢¥V«µ½½ |4íZ­áÎ~ÎN×èÎj*·ÕjummmOÌçóKKK²OQÁ#ˆ8÷H_Ä`0FFF|>_§šv£ò´Z(šÍ&uJ·«Sa±XÚÃdV‹v;¸\.Îè~;ñDlæáy<^­V{饗.çþV³Ù$g‡¦ÛÛÛ,kllŒ(a³X¬ãǃÁ§žzŠl•v»ÍfOŸ> ¢ø€W^y…¶Ûmt(QTáñxívû’K.a0“““jµºX, …R©ôÊ+¯8Ž`0h6›I¤<66& ³Ùì /¼pÙe—‰D"”•‡Ã9uêðµ"‘èèÑ£è3ȧÉ`0¨Õjh®¬¬pÑjµF@”Š><oÐÏ—J¥J¥`0.¨UõUj¼L=;ÍfÓápŒŽŽªT*”A;ëp8H˜èv»×ÖÖ 4ON.z0äÍáõÛí¶Íf+‹‰DÂãñlllŒÓLD×EzH伓ëÜ-ž×F€B¡ðÈ‘#ét#«ý­íææ¦Ëå"¢O-‹6› ezj+ $’&“ •V.—Ûuò W÷ Ak­Vë cÝÞÞNô^»H¼¸ÞàeµZ‘è€;!§ÛíljÏçóz½^¯Õ0É¡ÆX¤rb6› Ñ>ðûýèý`#º\.×år]zé¥ÓÓÓÃÃÃçìÙ³n·ÎŒ5jµ: Ã]( ×ûâ‹/ ŒbÜç²Ë.s8(@6‘£H$b±Xf³ykk«Ñh¬­­­­­Õëu¨:aŽÕn·£\a³ÙÆÆÆd2Ùüü<¤=R©ÔÖÖ–F£ …€r •zë„B!°gh-‰Db±X.»ì²±±1“É …œNg³Ù$ž Ì–•Jehhˆœ\„ÿèýà²X,‰DR­V`IWVV;Î/L‡X,î…Ž …‡†©ÙóöÀå!Q¸ôÒKßýîwëtºååe±XÜU\”¶ÖÖÖú÷ÈY,–Ãá@ÀA´X,ªW@l,—ËU«U܈쑢N§‹Å0¼»Úm²Ûí´­¬AÚuv»]$ rvL1Q—J¥ÔFãž×ß úlétšÅbí­'Ô™ö2™L¥RÉáp¶·· C:Öëõ„…W*•6 ’ÝSŸ¢µ¬ü~¿D"¡%×Èíx<^W¦÷§žzª—Óf³Ùãããhf2Œ .k …]õ ±R©ÔK/½4444¸š{>Ÿî¹ç¬Vë‘#G.zA–D"Y\\DÀÄårU*dtôz½J¥:~üx¥R9{öl³Ù4™Lr¹ÜçóÑPI¤ á÷û‡F£9sæ ‡Ã4Œ{»Ýöz½N§“Ëåêt:ø—H$ ÈK29tSø|¾P(99)‘Hî¼óÎZ­öÞ÷¾÷ÙgŸ}ñÅñì'?ùÉZ­ÂÓ§O¿üòË—_~ù~ô#Ì¥«Tª|ä# ãÔ©SO?ý4þä#ùˆH$zààÕ~ûÛßþéŸþéC=^‘HôÉO~ÒçóýçþçUW]U*•Ξ=ûÁ~°ÅûǶ¶··kµšÉdÂtQ©TBøïv»Õj5æ“’Éd2™ …©TŠÇã)Š‘‘‘……„–°Sd@j{{› Àt€ÂHÊ·¶¶ à‹Å^yå@Ácd2™¼^/`oÀw^ÉdZ­–H$$I*•ÂÁn·Û&“‰Ëå‚gÉdj4 É–ßïw:ÙlE9ôÉŒF#ª Бj6›‘H{L,K$’X,–Éd4 >N”V~!¤ ˜ü…»m·ÛÉd’„wd¬žz¢ûg“É”H$ôz=Þ÷ÿ`÷=«†‚u—Ú "ÃÅPwdPæ hÍ9p‘BQ  NLcØuökÇECŠ#Qãñx…B¡Óï˜ Ò‡£]6Í„hù|œš<íê> Ús2´S±XDðEE…’%—ËI{@ÏŒlf?ÉZ­Ö‡îÎ9L&óCúP4}üñÇ_xá…{ï½7»ÝîŸþô§·ß~;—ËEc„~>øà¿øE‰DbµZ¿úÕ¯~ýë_?sæÌÝwß É¸ÇüŸøD³ÙÄ•K¥RµZý³Ÿýì _ø‹År»Ý÷ßÿ—¾ô¥ûï¿ÿÞ{ï½ï¾ûî¿ÿ~šˆÙçÂðiµZ-‹¡P`h$.6›íèÑ£W^y¥Õje2™ÑhZÝh_ƒ4E°r¹œL&S© qz].—ÑhD¼…þô!‡_xá…S§N­®®r8œ­­-µZ½±±y$@ÛÙl6ŸÏ-úI.—Ëáp€õ•”_‚Á Æ{Iï]§ÓAòw‰D¢^¯k4T«U‹‰D %ßn·!C….œ "n¹\ŽÓd0P0¤ù  ´ ’;“ÉlnnÎÏÏ/,,@ŠzœÅb1úXý݃Á`àr¹P¦Å‚½&™ö0á´ç„›†SÈd2p½;Ž Õj5Z ?7;˜‰}GωÇãõ‰ E"Q'!€ÝnÇÏ”Ëåðq GF;d·Ôg±ÕØ*¿`ç-z=Vç”ËåzyÉ©¦íòkÑŽ„^¯ “Ûí&Ðs¨H”Ëåúß÷>ø…f³¹òŒÎåõz.½ôÒ›nºI¡P<öØcb±ømo{JÉccc§NŠÅbñqã7æóù§Ÿ~Úï÷Cyᦛnú×ý×|àB¡´èCCCSSSgÏž ƒoûÛoºé¦z½N0fóóóo}ë[yä‘‹°CÔjÌf³N§ÛÞÞ.—Ë …"›ÍªT*˜oh(C] :›¨×¿®P(•Éd¥R µ81ÀÈ DÞ #Äb±………3gÎloo‹D"àQÁÙ£×ëá$†††ðÿÃÃÃ¥BvÂd2u:]¡PÉdétZ$wÈNÁúú:Ä@‘ÍfÅb1|êÈȈÛíÎét …ùùy0ìÕëõ\.744T©TÒét©T’Ëå(:¦Aî›V«~!“É$“I¥RIêêÐoM3ÈËaw0}ˆagâØ¨ ÙlF0êóùÀÄ#hX†Î³‰¡±Á1G:®Î÷~V:æp8‡Ê8»ªÈF£4{ˆ¸>Þ®9Ïç6¸Ÿ˜•Ƴ˜T£ý M¶Š,—Ë…íº+yRb«%ÉàúÝo$j¬KY¯¿ÆFWïŠÚÎöf¤ F(" &ä}ÞÐb±är9ZJ‹p’š îYÞbŸë‹_üâ·¿ýí>:Ê7ÝtSW ÏôôôàŸò|àÓŸþ4hü‘/(Ú±Ù쉉‰jµê÷ûÁÁáp‰Äææ&‡ÃY[[«Õjl6;N¯­­™Íæl6 ."ĉD•D”H#ˆ°ÛÖÖr—`08<<|áÂ…¡¡!ŒµŠD"hq---©Õj9rÁ¸ßï7›Í‘H$ŸÏ …B6›½°°`6›ÁûG¢o¼ôv€ÉdB.Ek²Z­Öx<â>x hüX­V°Ó¶Z-°(¡z Îr‡3<<+ûuN¼êEîNç³$ø¢nʱ7‘H¤ÝnÓ.ã È"{-„çÄß|⟸ñÆ;É2òâ»ßý®ËåªV«<ï·¿ý-5€B§­óOºž‹ž©³ ±¸¸ˆ!žH$röìÙ±±±L&RœÿøÇ¥R)‘HŒA‚:sss­V ~‚ÉdšÍfhIx½ÞZ­¶´´Ôn·‘ý !±ðù|ãããh_c¬Ûh4^~ùåÏ<óL½^xßïÇxÝn'ºÏçß+ÚB.—‹HÖòùüB¡J¥X,Ìh»Ýž˜˜8þ¼T*þÍh4Z­Öjµ:;; ª@¤D:ÅáááÍÍÍÕÕUœ¸t:3¡f³)•J¥R©ÓéœD"˜0åñx¸ªÎ`< AeØjµâ Ñ ær¹“““çÏŸÇÍÇCÖl6×××ɨ"ž¥ ª&d¯"R8î´6TùÐW&“éò‚Û 2Üç#R©f„á&[­ÄÔ»¶v¸ h-ñ}ëõ:FBq÷l6›F£Y^^.—Ëãããsssw¬Ø”+ÇÆÆR©T¥˜^u¦m2&´úx&ˆ%,Oçät:#‘ȀĂZ­vÀîYˆõúÄ88u###ÔYåþa‡Ãé<ÜÿBÿùĉï|ç;ÿýßÿýg?û™B¡@Ñù½ï}o«Õ:sæŒ@ ëK_úþ™Ïç£Ñè[Þò–w¿ûÝïyÏ{T*DN?øÁÆãñW_}•Çã¡üÍo~ó™gž‰D[[[~¿ŸÅb]Ä>ôé9ñù|°` ±R©$‰`0ùÑááá¹¹9˜T©Tº²²R*•˜L&ÑhV©TR©´V«e³Ù|>¿¸¸xíµ×¾üòËv»}cc#SwQµZ]ZZr»Ýù|Ì­ Dû*”[aé¬Vk.—;}ú4ƒÁ8zôh»Ý& N§•íf³¹´´ä÷û=šËåÖÖÖ,K*•‚Þ 8FN祗^Úh4Î;Çd2GFF¯¼òÊL&“Ëå|>_,s8˜Iòù|SSSçÎc³Ùh}9r`¼z½5BÆkœív{~~~||œ:ò…/‹Ñ QÁVªT*‡Ãáv»A,ïE{»Ý¦Fô ÊÃl6çóyRÝ‚üüŽñ®çzWö„ñw'#Ìx“ÿ„zaÈTŽ;¶²²ÇßË.ÏÏÏ¢‹dšÔ“¨oGxW òA*Xƒ >ïmuÒõÒ&mûs/ìmu’ÏÍÍá#%ÉŽé”ù$ònW¤$:H^U•JÕIÖÔJÎm3í<¹È¨¦ýgûË+Û”¨Ðëõ–ËåÓ§O?ñÄSSS?úÑ ÆáÇU*Õc=öÄOˆD¢_þò—P[Ÿžž~üñÇßþö·ó›ßL&“?üð¯ýë'N|ï{ßs»Ý‹åç?ÿùO<Áf³zè!¥R©T*¯¸âŠ_üâÇà*•Ê#<òÄO:tè§?ýi:öz½W^yåÔÔÔE·(y>ŸßÜ܉Åb"‘Èáp€‘„Á`¸Ýn‡3;; 5X™L”]¥RÁˆ·ÙlFy¥[[[$ð²Z­(vi4š\.§ÓéÈ.’H$h‹"wQ©Tz½ž@ À1ø›ä èu‰Åb³Ùl6›£Ñh6›ÅQ2™¬Õj …"–Ëe³ÙŒTÏç AqôÛÁ`°Z­š„_m6‚eŒUe³Y©TêóùL&S>Ÿ·Ûíjs8ÇS,WWW  ¹#í… Pä …BØ×k®¹Æëõ>÷Üsè~¡™ë#•JáƒÓé4´äu:¦‹:"µ .Èd2‡ÃAc S«ÕÀGöëÑÑÑÍÍÍr¹ŒyÕJ¥Âår1¤’Ëå€\./õØÊd2.—›J¥H.¢Õj ƒÏç#æ¾R©t*«QM TÁg¸O«Ú5DV*•étzssS&“éõúx¯Ñhv ØÏꄼ='¬v»}°jëäÝ1u:'PƒPï¯N§Ã“Â=*Žf«+2“. ø%—\Ò«ü}Q¦ýM» uDšOÔùŒt: ‘BüN B¡â¸'N¼ú꫉¤T*AE‰ðë‹EÐC £)“ÉÄb1’›L&ãv»+•ʵ×^k2™Àææ¦Á`“5hãŸÏçr¹ét:ˆD¢`0Øl6Åb±ÅbÉf³ëëë‹% åóyÇp°¨©E"Ñ… ‰Ä‘#Gl6‡ÃI§ÓZ­6™Lf³Y@Ä|>V° looûý~‡“ÉdD"Ñe—]¦P(ªÕ*—ËD"±X ˜ÀíímL(óù|Ü%‘H¶t7Ãá0¾f³Éçós¹Ü©S§4 &~˜Lf"‘J¥Pz„z!ŸÏ'm`! …B§Ó™L&ëõz¯¢=Õ¤ÀU`ü™z¢‘¬ nø¨¿ -´Ç-ÚƒÅÔfÈôz=è90‚F´».<¥ÕjÉ´¸²Ù,Ò÷Ί%œÖ~œ\æ(£¿©çù“ɹ6FoN-ÒáĸœT*…@À Ÿ(:ùŽ9²ŸMpqýo-ðÁŒƒÈf³©ú7f³ÏJ¥RƒÁÏçårùÊÊ äò677E"‘R©„‚©›ƒBž ³áxjuuudddbbÄt2™ E ¹h€ã0|ªÑhb±˜ËåZ[[#ÓƒA"‘,//·Z­‘‘$LG£Ñp8ЭR÷y.—K&“Ðç]]]õx<Ñh”¤J°q‘HdjjŠ'K&“«««Ä-‹ÉdÒáp…Âd2Éd2Á£¬x<Ž™\ò)¸ñx\*•noo·Z­ñññD"At€uCs”Ëå*•J‘H4>>nµZ[­Öc=Æçó£Ñ耠ªÎ¹]ê4xQ‹úOƒÁ “É EŸðšÇãÉåò>ƒ´L&S¡PNÛz½ŽùÜA®‡ú¶µZ-‹õ‘Nß?êøþƒrNT—€š@禋Åb±‡Íh4¦R)Z±Žú+2™L—ËU.—©?ŒÙlbŸxq|õf!¨/—ËCCCb±X¥R¡Üijßï'{ !y»ÝÎårzz­jÛDΤ×ëñnÈ-íb"’¼‰ÍfÚÚ»ù|¸¸`0Þ‡t: hÅbz´6¨—FS©”V«]€~o6›ƒA«Õ™L&1vFáf*• p ‰DB&“ŠË³ÛíÁ`*Pä4—}ff¦R©¼òÊ+&“©\.czÔÔ9Ùb±¨V«‰ #ô¥p7pͨ[ ãòš»äØâJZ­[[[Ð …D ‘z¢».µZ™­þAªÃáè…@CxA+ÐY,µZ­Ñh^yå•^MEð£ÖJ«åÀI7 Á×b8&£cƒïÞÝòýñ¬>?îÎI(ªÕê^øúÁWö<êOˆ¸ fPã%µšÎªc<§5©}Ëz½þ¿5uqø’Ëåhr òÀL”F¡œÃ›L¦\.Ççó§§§ÏŸ?o6›ý~?úCR©Ôn·ÏÍÍ•ËeìL¹\Ní\ºÝn…BÊ"µZíõzA¾T*%¸\.XŽ·C '™L‚ ÄnpŸÐ››“H$áp˜ÍfÃØ•Ëe´mÆÆÆJ¥R8ŽÇã:nkk èÄÕÕU.—ëv»¡ÊŠÓáp8õÆ›ƒûÜ`0„B¡f³©Óé Í!p@ñq´Â•/í1 kµ“ÉL&“˜s»Ý8ƒ}W©TxµZ ¿H$*•J…B÷“ËåÎÏÏ#mêJ(Óëv•]Qí@gAouuutt#_döÈáp`êÿ¤v.ñ³v¾9üŒÕððp86 áp¸œÄ%oðÜ‹Ëå‚ÀÊïãÑîóãÒ"¬V+ |P0¥ÑïïjA˜€ö`½^§9'.—ëñxÌÍööv2™„BnŸ7‡²'m3µZ­Ã‡_´æ`+‹aÏ¥ Fc0¦¦¦†‡‡ëõzg)‘H”J¥ÅÅÅ¥¥¥Ã‡Ûl¶w¼ãR©4›Íùùy² %‰Z­¦‰D²²²âñxb±&pWVV¶··M&‡Ã¿ÆƒJ¥æ?ŒŒD£Q‘H”ÏçÁÔÔÔÔÔT³ÙÍçó U«ÕÃÃÃ('ær¹±±1>Ÿ¿µµU¯×ù|¾R©Äø-‹ÅVäl6ªÐÆu¢€Y­VA`:??¿½½}îÜ9Bß•N§ …L&óx»Ý¾ph,..Rw&šTK=77‡–0Ö©T xkØ÷v» Õ%j躵µU*• ÆFäøx<žX,æñx«««õzýìÙ³0¦&“ ëL&)‘H499Çgffìv{8®T*~¿_ €H¢X,ƒ’+‡§d¼†å…dàOŸ> žYHo …ññq‘æçç5ÍÑ£G777©qk«ÕBÚ„K¥ÒßýîwD^$s×ŽÌ ìï^¯²ÈKp¢¡ I2;åÙü~?aÎZ]]…¤á€±ë+‘,â&ŠZñŠ p»Ý¸çããã à”˜“ɼæškÊåòôô4JÁ"‘”7n·["‘PÑö4'‡OW(r¹¼+`I6íõ½¾TŸ²áAyÜùÁIh•R¯×‹ÓÔjµ,K±XÜÝ«3¸™@ 8tèö79´oÂãñphQ… OQ'güžäÇ€6¡úaTêû¼¹†ޏÞ'Üò¸Ïçƒ×êê*¼@¹»¾¾DnÕj…‘V«µZ­‘Hdff¦#*•ª”Žz<Ïãñp¹ÜC‡ H9q°Ëd2MLLôÏbû/ T1Ë …öIÄ×¥ç„*­ÇãŽd­V2’æp6I™ÍfP"fÁÄ8´Oz9 0ÀR]jn„$šä¿,«BµýDú_\oØaP(\YY±Ùlñxã´¤Ç@2 è°0™LNÎÏσé•Ãá„B¡õõuZ–ìdƒÁP,™^^^æóù6›- V¶Ùlóóó6› l{˜¥%oU«Õ0Œ»ït:u:Ýúúz"‘ù74ÌP…ÛÚÚB«€Çã)•Ê••" „Ó~ £Ñ‰Dàúú:x`+• i¨`" 6›m6›!ÛAu ¡(—ËÁ`Ãáôã †D"AqÔM8ÑФ†çÏŸï|§Óéàõqy}Xž% î¼T*‰D"|>„`qq‘`â;€‹4ûKUäñxÔ­‚+AuN,£“711FßúÖ·E.ÚÝc±X€Ú‹‚eƒëÃÃI«Bùý~Ð …BFCЕoÌ …Bû‡ …ƒšŽí ˆX]]5FÙ™ŒSÕPú`år9m¾šl‚Z­¦R©¶¶¶h¡žBU—ÅbÉd²L&³cñOyq1^Dh4¿ß£NˆÆanx<žF£ä —ËPöB_(B¡¦e+• ©Ë‘ K ön˜Tl{˜*hp€k¬l6Q0Ù¨"‘¨ÑhÔj5§ÓÉd2e2ŸÏGÍp F‰DêõºX,N$‹oNv2И¯Òh4kkk¸!4®EA´ºsþ¯Ýn‰'‘H”J%øÝ»ÞíX,&•J‘̵Z-j¬ÙYP"H9Ì“f uT}œD'&&, ð‡¹\ne8¤nƒ[C¸’Üä†C¤»T*a„R©tbbâСCPQ*•‹‹‹ÛÛÛB¡0›Íbq8ü!õñ³ö)NBzTTÌ!bˆ^ö72§ÚdZvÑh4ú„ÀØ[5‹ÕçW‹Å:nzz Ø”wû½;ˆd»êóx<0@ã2¨i¦B¡05ÆÎ_½«LûÅõ{º0 ŠãŠÖõ ²X,½^7ã÷û³Ùl*•‚ˆg2™´Ùl™L†Çã%“IàÀ1ƒr¯DÍ`0@pK(’Ä‹f àlðz8Q‹H<âå Ãápx½^0‡ LÕëuµZíp8ìv;¢rˆ’wp8ÇjµºÝnØGˆub”0‡„ÿg³ÙV«˜dÔᅫ‚AòÔiþúß"(QZ“j1»¾$ë}~ß@ ¼¥^¯'«Û}ˆv\Åb‘86­VËd2}>ßÖÖ–P(İ?¤¹¦§§;6>>§X,¶Ûín·›L/Õj5Zp …ºJÐò­=XTüÄ}Š~PéüA;±iƒ/²:›)ý­1ø/,sB}¬^¯CR”*v»”…¾/"ÍΚ£P(‰DÐ|³X, ¾@¡P¨ÕjdKz½> Q }ýw­^¯'hcòJ*£âÅõ{Tǧþ½ÊPäYL^£4A„YÁå(—ËçææNºÿ{F"°“äjÿêy8†w©T*F£qkkK*• á¿áñxÐ4’ËåÉdR¥Rñù|“ÉÕ Dß䃠Á!Nœ8É(h!Æb1 åÀÒYjíŒL"”$UàbïüF$9ëu‹ð8¤"Áß?~º^¯ÏÍÍ…Ãá^´/¾ˆgÒétÄÈB~¶2µ …B©T¢)‰¸\n<ÇÏÝ+ Älã5ªš®Ã^MÞÃewÕðÝñ¤ì æ€Õ ð½ã°×~†M»8§J¥1i»ÝÎårK¥êã…BapXw§šä€:Îd2e³Yò‹ÅbðÆ+Š\.‡ñCÚÛf³Ù><Ǥ}Õh4ÈQQ©T{vÝ×ÿÖBQŽì £Ñ¸ººj³Ù˜Læúú:ÍÚl6”€šÍfg„žH$œNçÒÒ 1µX“! år9 Чº\4u@LLl(¬9 bC$—ñ¨' ©›V«Å8'æŠ2™Ìðð0Úºäú!?=44 ….»ì2‡ÃÁ)‡‰D@gÜÕ8bJ,£Æj×>G½^ÐiUA犳™Éd0½»ÿ_¼Ýn§ÓéD"±#‘y¯¥T*!¼‡¿…;øËd2áׄ´q:ía½^_ZZší,¢©7°Z­R«A½~¦W×9åÓÁ®¬­7NÓže`÷¼d2­ÜÕÅ9‘ñÜsÏMLL€—Ö6DI]¥Rõj õº€$iµZ‹Å‡õz}¥R z½>‰H$‡ÃQ,&ßÕ×ëúÊd²>Ü!×›vQ±Ú„»W]ƒ«`§>år¹677c±ò'è8À¦D£Q»Ý¾ºº ®¥ ƒÁ@ÅYÁU€Ð©ä)§Ó ˆªT*Qï‚™p¹\KKKCCC^¯—ËåÇb±h4 zr¯×Ûl6£Ñ(m*(“É /…â$ÇÛØØØÞÞöù|¸3ø¾xñÖÖñ£'Nœ¨Õjf³Y.—Ÿ9sÓT½ærpd<•ô*„( ¤ ;'6}J7£ÑX(vL†€V !,îÕ~z0Ät€§5™L dºñx|}}ÔØýÂã$(¡e$´Ëh6›ý] â˜^{{À9å‹r´ÜçgJ&“ÿ+€çÿ©pôwNÔB?$¼  ÓkôŠ˜¤RiWô¤P(I¥RÐ †‹†DiµZ}ûÛßQ5h”A “ŠÙÛqŽŽ®¬¬Pήqý~­r¹ Õ¾^Fv||üüùóÔP ­&*«±tv»4ÕÁ`ptttii ^ét»¨V«mmm©T*›Í‡‰húÚív±Xd±Xh2ùý~§Ó‰Y(’ßcÓÖëu¼ˆˆÄbq¡PXZZª×ë&“Éår­¯¯Ãru5ÜÍfÓëõ^uÕU³³³+++€5“D§Z­¦R©'N„Ãaª_XX‹Åãããv»=ŸÏŸ9sfG†Í ’ä·`0—\rÉ™3g “Ç- Uωþ@p hïˆUI&“»-C "çêñx666ú ×j5´K¥Hå•Jåòò27J¥ݨÛleee?3€K{={ 3LØÉ;¾ ?Óë:Ï«R©u2-Çí$gè ù€c Rî³X,j¯ê½¼=ŸÏ'DœX$…\È͘L&›ÍnµZÇŽƒÀ Ê»±XL.—3™L¨ºu.̯ÌÏÏC¬Í3]\0kccH(šL&jVM Ò.K›`±\.áèà1699 à=ï"ŸÏ‡{ÕËYr¹\2l4···ñqGŽA‘óä hp:ï95üúû\yÿ;ˆç~ä v5ùÄNl'‹mUlzZ¹Ùb±€:s÷…€˜L¦ÇãÙÞÞîóA}n,ã5í¡]á!{å\.·—]ÝÕåQMlõõ¯}À¿ ƒäæ²X¬N´â–×ë%ÿ …BO>ùäÉ“'—––p¢„ŠD"©T:Òl6‹‚‹Æýcá‰<ž ¶f0:ŽÇãI¥RXò¸Õj-—ˆÍfSéËP¸(‹"‘YÙÉ‘H¤³ÞIÁ"•JËår4…x^Ól6ÑX. AZéÌ™3:îå—_ÖétÁ`P*•r8œéééË.»ìÚk¯f³ùŠ+®@ÂËNE AÕ|ب¿Éd2áA‰D‚sá÷ûI… ޹^¯SqªV«•ÃáÆl6Û(´¶ø¦ýÁD@ëÑñÏþú+++×\sV«u»Ý€,îó wÔÇ-PÙãñðùü£GJ¥RÐ&‰®¾ d]ß0•J (·Ñß³}Kê4ÅàK¡PŒŽŽÊåò}^ ŸÏ×jµ˜¦è|€ ýÿîìcÇOÌ,oR3§|>O«<"¤&}$¢_ÀPîá" q{*•*™L®¯¯©.“É–¿F£±câ™N§ðùü+®¸âïxÇÅÌé s ƒóóóµZÍfëtº\.I:™@ŽL&©&iM0¬×ëÙlV.—csbÂ?›ÍB»Íf ’©@Ò ›¼ØÿÔ6ÃøøøÖÖV­V#›×€|msdˆ.#‘ˆR©,—Ëù|¾Õj™Ífx«ÕÊår'''=çp8ÕjÕh4:N¸OdEÍfsmm”2™L«ÕÂ郬Fg©„´î©uŽT*Õjµv³ …B­V‹ñaÈb‘([$q8­³pàœÜà9d³Ùñx`Ë>¤3ûYjµšúCËår•J…<µÕjñùüþjµJ´Á¨»H*•¬dù Ý®R©–ú}Vðt/¹\.ÕæãȤÓé½]]¦½s™ÇãÑ:¨`?¤U'Ãá°P(T*•¹\Žè¯ï9.ær¹2™,™L¢ªV«s¹¾0 .‘H:GIÀÂèÐ0¼¨çô‡´¢Ñ(΀V«ÅŽ%@m¬NI˜x<Ž‚†Á``³ÙĤÊd2”øU@ßdcP \}SjfOü厌ËÃèt:p§®®®& ŸÏwäÈ»Ý>::*‘H`pQrÄÔ-PHL&òN4¢P`ØívÈÏ“IO%oÔgNS ô±³úUŒÿŸ³Oõ*!s}8 šÍæË/¿ ÕÖÖ–Ýn‡nï@ @ßQFåÐ#Ü•,8Ç#—G¨ÉÒjµTøLŸ%‹Y,ÖÁŽ|õg(ÝÕêÜBÓ<¨÷çÜrË-¿>ó9êC+¹;ƒ2Ì$ÍDÃAè €®k}}ËåÒ väßh4æóy2·Øl6Á¨×ë‰ò๰X, ¹OsR"‘ s6Ô(×€£ ƒrùšø^`ˆ(•J}Tþƒ\×4¥×Aë‰Þ3•õ€ :’™½N­{¨mÑš%}nã  sbðf öÍ¿ÀRPïÆÚÕ«ióz•J%‹År¹L  =3ø;tK­ÎáK’pŒJÛÕyUù^ÿ°—ÑhÄdI"§ÓÙõñxELÿðð0͵÷ ¨:¥ýîÃë·a^¼ñU£Ñ Âê‹Å°]¥R©Édú_9Sñxœú»¾x<ͳ:ôtÈÄñŽ÷ô§O ÁºýöÛ;Åèâ®®8 Ã}Ô‰*dz7m¿ßO%XK&“4‡‡ÔöW4N¶NÓóÌ3Ï$‰³gÏö¡[þüç??99‰)«X,699ù‰O|bÇ ¾ë®»&''wUž¦™àÉÉÉøÃ]Ÿ]XX˜œœü?ÿçÿt>5;;;ùÚzüñÇ;_ðÃþprròÉ'ŸÜñŽ;öž÷¼çÍæœ*•ŠÛíî¿‹h1f,#`_Ò‘Êd2]'-0D‹ ÝI¤™J¥HïªT*ù|>ÄIv‚¿"ÆZ­V»\®Z­6>>ŽQ!‡œôüüüË/¿¼´´騵µ5±XŒ#S©Th§zšˆ^;L¼ÍfK¥R½v­V#e&“9>>.‹N§V«åp8ä4mllðù|â©nµSoº×J$ƒ×Z … >Ïív_uÕU;=ï¸` ÷RMÿ#<)ö‹Å=”  †N§ëÅÉ;ø-Ú›¥ª×ë4¤B8¦…S;Þt‘‰Îd×Å¡ò c±Ù쮺×;^19 C¥RAÊ:C`±ÿŸÔKÎ$*¿Õj•JÑ9<Ñu¸£D.—{ì±ÇÚ&»Ö¬7Z/¾ø"ŒN'Ô"NƒA|è¿¡Ž ¦A¼F¥R ŒÅbñãÿøÇ>ö1F“J¥È b±8ŸÏ“ÉLzær9¡PØn·+•Š\.çp8ÛÛÛÁ` ¨Ô“¤V«kµZ0ì„BÍÍÍýÙŸýÙõ×_ÿo|ãŸÿùŸ?õ©OiµÚÑÑQÜL‡ƒ1`0cN§"Ò;Á IDATqÓBÖ8àÑF# …Bry€ãg³YžT(•J¥X,Bë«^¯+•Ê^X•\«««Ô=‰OìZ‘Ç~k47-—˵Z *ФĦÑÅB¡`0L&S  š<ìO„eä¨ -ïÙl–0þ1™LC9r…¾`0˜H$àchê©©)¨.ìç÷û;¿,ü\çQ%˜:ê]j·Û‹‹‹@÷aN™üáÈÈÈÜÜœ×르2ÔHNn£ÑÀœrgÆår].W4•Ëå4V:Úr8ñx\ H …œNçÑ£G_~ùå®`ŠÑÑQ¯×ÛB bö½žU©TB¡pWÚ=4 F®f»†;¾¹ÇãÙÜÜìƒph•¶¨%l°Î>ÓŽ¹ š”ý/ KHb³Ù¶¶¶öCVÈ`0R©1£;ꦣ®×ëý~?—Ëm·Û¸­Ô!Ü]Ý»®g³ÙŸÿüçízSâKi~Ê«ÒÇŒ'Ožì基~©ÏþóO?ý´R©ôù|?ü°Åb™ššºöÚk'''¿ñoàe§OŸþØÇ>†àhccã£ýèG>ò‘~ô£ëëëb±8<óÌ3¡Pèúë¯ßûÞ§P(~øÃ~ík_ûë¿þë[o½•Á`ÌÌÌ|ûÛß¾õÖ[ï¸ãŽ™™™L¶¼¼ ?Ú5&¸úê«Oœ8ñï|‡Á`ÜqÇwÜq‡ßï¿öÚk…Ba³Ù …?úÑÈë766þò/ÿR*•Öëu™Löƒüàá‡þÜç>÷…/|ág?ûÙÜÜ"÷G}ôóŸÿüu×]÷ÙÏ~¶P(üíßþ-¸€ÛíöOúÓgŸ}ööÛo¿ãŽ;Nž}úé§Ÿ†c0>úèƒ>xçwžú(ƒÁ¸ôÒK?ýéO?ÿüó…BáûßÿþÉ“'5Í_ýÕ_ þeo¿ýv¿ßÿÔSOýä'?™ýÜç>Gžºí¶Û‚Áào~ó›ÿøÇgÏž%EÂ{ï½—Ïç_wÝu,+‹y½Þ;ï¼óÁ|ôÑGò“Ÿ˜Íæ'žxâ±Ç[YYùÌg>ƒ?ùÚ×¾V.—¯»îº7^O† ¤;vò—J¥A(J;8OQãºpá˜Á¤R)ä·Áµ£Õjqêõ:ñˆ±X,•Jmll`FÇd2¡Ÿäp8œN§ËåR©Tù|^,_¸p¡³Â Æ6ÔúªÕj4U*•6›Ïçw¶v„B!i†5 x&i+ªcèJ¦Ü«W´ã.ÚZ¤È#‹Ùl¶L&ÃÈ*©tÝ!ÉdrÀŠ­âºŸÚÜÁ{cä>P縯~¾~Û»s»’ß‚ÏçŽ53™Lø«$%€#þ¿\.ï ž·¹¹‰B‹ÅêÕ}<ÈjÌžÅ)È8ñÔԛ͉D, eû¼0‡“J¥œN§Ì—†gúŸ3¹’T\ˆ ›l©Tª«2ØóÏ?ÿóŸÿü7¿ùMÿ÷·Ûí÷ÝwßC=tõÕW“·¶¶¾óï|æ3Ÿ¹ùæ›{ýáõ×_ÿçþç]ŸzÏ{ÞóOÿôOËËË?þñ÷6¾úêï~÷»=ôZúwß}7yêŽ;î¸õÖ[Ÿzꩇ~˜ú'—^zé·¾õ­‡zhÿ¥ü7çÓcµZ¥b  XKŠÅb4Q"‘ ÅsB¡OlllÈår¿ß¯×ëN§Óél4Ñhtii)OLLôj3™L¡PHưb±Øòòr¹\V(Ôƒ]A¢ÏIÞM  8÷:b´$‹ÂM …BdW…Bª^è~ìÃA­ÝšP2R‰DTç„r÷ëºÁ5 0xåpmm(oíÈéQÍAœñîƒHœ¨Õê>»¨ÙlöÊ 8xûöJ@ gÜÀ˜¡îªR©Ô?¥…ÚíŸ8q‚Åb-.e½§þ¿VÞ!ëÐø[®êU]§¦ï¸ãŽ©©©H$òÈ#ôùÄ#GŽÜpà ´ÚÅ÷¾÷=·Û}Ë-·ìíVœ:uêž{îàæÀpqë­·ö¶>öØcwß}÷»ßýnڻ馛>ü; ‹Õ¿Ô¿2ƒdbÀ×3™LH•SòÀ;P33i±VÔB14 P”[\\ÜÜÜ I»âŠ+zœV«…¤„tÕjµ˜['³ðcIÔ SZÛõú(…w]Èei—Gê„:.™LjµÚýùìsí6‡î¼T¸9bÿN£d0b±ØA{‰ ¸ÊåòŽ1n×ܹm0üuò ¬^ytW}Lêàû¢–SöùKäóùÕÕÕõõut›l6[³Ù¤Z¢f³¹ãG€6†š*Öëõr¹Ün·ýã_Ž|èÝÿïk¾ã’ÿžé`+™÷ÜsÏÃ?Ü w·ã:}úô=÷Ü333sã7Þu×]469š¹¹çž{677|ðAƒñä“O~ò“ŸÜm3r¾û·#ÿü¯ÿú¯H$rÛm·}üã3$4{vÕ»iÄød±XìïÏÒétç±Çõ–ÚíöÍÍÍõõõÍÍÍååå••`ö<½Nœ—ËY;¤I¨G çA¯G;¶zg*,¨mE£ÑÈáp‡Ëå:tèЀGÐì‚|vŸH³7r †Î²ŠJ¥"§BÃ.C¬÷@‚6Záq ;Ùd2¹µÆ½Óøÿ_öÞ;H²«ºï÷úõëœs˜Ð“ÃÎÌî*€´J$¡ð3¥B*($,°eƒ/FZa ²Á a@ÑBÂYc@Zv6ÍîNØÉf:ç~œ¯n]î ýºgvQ˜SµšN÷Ý{îÉç|ÄåIgzR-¯q­VÛ®1†a¼^ïêê*¨÷T*¥T*yAº¤ BF£Q¹\Näc«Õj>Ÿ×ét¸’’Ó³ß~ÊóösÇn»NãµC5—”u¾ýío¿æšk|ðÁ_üâkkkßøÆ7„Þùƒü ^¯?þøã?þøÕW_}à 7LOO8pÀb±0 óå/™w{ Ã=÷Üsß}÷ýüç?ÿÔ§>õ½ï}ï«_ýêc=v÷Ýwßzë­û÷ïçeÊ~ô£ ÃÜ{ï½Ï>ûìÜÜÜ;ÞñŽþçþÌg>óá¸R©ŒŒŒÜvÛm¿ÿýïáýû÷ïÿà?ø¡}¨X,ŽßrË-Ï=÷ñÐæùàƒ^sÍ5oûÛwïÞ=;;{Ûm·™Íæ/}éK÷ßÿ¸­P£Ñàí‘ìïïi Ú¤¯¯oyy¹ÝËÖl6‘Å‹ÅÀÕjµù|~+3¶q—*Bq¾ªT*D™ =²ñ†%`à®z†Ëåòù|Ó8QÅc °Ùlx ²_0ã5Ô5“ÃÇ4›M^ž/€·Û ã\·x§šÍævM9ÊårPæ#Ò@ðC[„Šœñ¸‚Ýnçîõ7ûé™påMo{×F4i•Åû“‡^zé%)žšÏçÃë‹ü~(Bœm2™|>_8–ÒnMQ”J¥ò:Á¸@±(^)£Ñh¬V«Pðá†n€„ ZÃ0:®–+æV7”v“ÚaÍÄ•5kkk±XlddD£ÑT«ÕãÇ›L¦¾¾¾P(„‚“““F0¥ Ýzee%‘HŒÍÍÍ!Þu:^¯wyy΃a˜ÉÉÉl6»°°5ÊðÒ®]»X–-‹§N²Ùl€Â’ ÊšáÛìv;·ï8ŸÏ£žâÞÞ^‹Å‚ôt:ÝÐÐP$ ~¿ßl6Ÿ<< ý~?²WKײÇ¿ÑPϫ̠zVJa4MÓ*•ªZ­â þD¯‚Ý@¬Õ[B²zïðˆ4EQçòË/O¥RÐl°•‘¬Û¾ç„%Ú™¬–Hjµ¬aB9ÑþðͼØ»w/˜ä‰D7ÕÇÆÆà`ˆ €2`¥4 4Ö¯·â±êt:´ Ž» )oJ@gG3½†&ˆò¡„L7èàWæçç¥O¼‡ÃÓÓÓétzdd„ÈL@¬áرc¼š 7!Íf37mÀåð¹¹¹\.Gh&™L™Z´£ÑØÝÝͤ[S›¦é ÐLèÛž7ÊŠ''úúú´ZmgRrbbâlòEQÀHDéŠDª×ë===Ñh$Ì­æÊ"†aöîÝ;00Ó‡‰—<ÏôôôOúÓÿû¿ÿÛâ°ð­h&^VAíhܘ™ÈWI,© ¨X,òdÒ]]ݼ@>l*•Âãf'OžÜzñ˜B¡à-ÝfF«Õr§•ÀX–d=(Rô1šs‡^ÔßßêÔ))sHÏ1 wU¥RÍÏÏKè#x¼þ‘L&QP8ÊVq¹ÐrO?ü#NUsÉb± I}~¿_.—«Õêl6Ë%Êd2($ ²³ÍäªÛ3Jó(“Él6›Ä^pÑ.//C°N¯× Q­ÕjÓÓÓ¼’·Z­6›Í¶lZÒjµ ôÜn74€‹¿_¯×KÙy¡ÖWƒÁ bâ:tçIÂÞb0©œ~ó›ßlñ+t:]»0ƒìáå˜X,†¿èÚÔj5õƒ¦áíЊ,KgÃý(Š’2Cš¸ºPkDzl³Ù„hL0ä:âù‚FD“Öââ"ÈD½^ßÕÕW 8¹Ñhà¹åH$"T‘¥Óépí°RÇd2ñ^(ƒÁ_ˆ¯¡~œeåtênZ*'Š¢ C8æ¾§e™¨AU=a©Ï ÄðC„rBÇ„S"‘Rç"´lñ± Íf“[‚ å6) ¡–!veŽ9,³ ñþ’Ëå’ÒÑAK(ÉÍÜ¥£oKÝí½Îˆ‹Ô,ð´Š ÃÕ$®+ª¬E!nš¦Q/ ÍfËd2È0‚™£ßÍfuÚ®®®¦Ói‹Å’Ïç ë _—¸]ç-ûñ­£(Êétâ™wK…Ò{Š'^­T*øÂY­Öšº¤©¶…Ä£[jµZ­VocQ(˲ ¯‰Ã"žzx¬ÑhÜvx›ÍF;N܈œ´´ ½Äk!ÑùÈ-B_ÇußÜn·Hø¢««K¢›Íf[Ʀ¡Xä‘vh‡K!ñ:FÜFCÜeµZ÷îÝ+d÷AÑ)×ÀbÆl6 bŠ?䯥ƒM ï‹…Šª_à¥jµ*1/‹Aª þ_«ÕÂ&$ ‰RO­V[,––ûƒq;ËÛo±Iym (Û®/l4Ùl6•;Ÿ·^¯q¦­áC yáÄmj6›"ŽJ¥Rá+!—ËN'o=}ñÅ t\¿OlVDñ›Ãჴ¿¿¿]Û©Ø éõz»Ýîíšl¸C¯?‚ D.@Z€P¶Ûí~¿ßb±twwŽ“‚_cÀ€.—Ëét»år¹ãŽH‡Ã¨²}}}ÈÔƒ-¯Ín4¥G½ ÅÈÈwŽ*j#­V«Ä¯LNNBdI(Eа%’ ®l±&í ‘Ëåi™›.“NµZ-N›L¦Îâ–¹\Îl6o¯ÐCà8PYÍ[DÈFï˶©«]>”WÜíQN™L†PNh/½b¾V«!d2!óÔpWWdŒ Áe´èmýýýHoeX@ÇÔÝÝÝrŒ©L&S©TxmgOOoE €·‰:b“É´½¾¹\Nú¼G®¾Üºç¤×ë'&& h°··¶¼·b±ˆ&à\ÝÄårÙd2IÌnªTª‰‰ î¹\.Ta!¨œÀÑÙ"hÅúú:ØÅb±Ý¯e XD"! S©T p»Ý°U©T€/%xòÉ'E&@îM%Uðn†¶â0Ü6â%‘okkm¯ã¾.•JuñÅõôôpSñgo\(+•J˜À»ß¸¼GQtä/¡ÿÄÿNQÔÀÀ 9Õj5îÀ”ñ›@"‘ ( ÷ÕjµZ¥RÙÜÜ$ 5ƒÁàõz¥5›Í|>¯V«¹2‚ P(1IœÍfÓéô\pÁ˜ÍæÕÕÕ³ÜfKõƒA)±\.ã#ÈY¼§Êãñèõz˜Q$1¢#“É$ÖOLLh4šðÏx+jµÚLzø«G¤Ê \.o½±'—ËÍÎ΂ɂ¶¶PЈ5>*ü;J´ÊåòÜÜ7²W«Õ„&J*§={ö°, ¸j<6.7ÅÑÓy/’B¡€¹/BçåRÅb1‡Ãá……صR©´¸¸Èu¤šÍf(zæ™gŠÅâôôôÑ£GyöŸþéŸl6Û3Ï<ƒ.ªÍfA¾@ôÑ~Ôf³ÍÏϋũ©©}èCöŠ+®l:âïñxü’K.Ùµk×®]».¹än"¡Z­Úl¶+®¸¢åOüÃ?üƒÍf{á…^:^d``à÷¿ÿ= FòÏ\z½^‹Å200@žmnnâÎ h;îüÝž={º»»½^/aìÙ³úK†‡‡‘I899 q’½{÷ò6ŒŒŒ@K;~eúúúÞô¦7™L&"bÃÕ”x‘t":¹„@e¯`ë5›Íh4úâ‹/¾øâ‹Édo„Ç špñ¿Øl6ŸÏ‡K8 ÈØI_s¹\ÆË”%šYÄž£Oá=U¡P¨­`c£Ñ‡ÃBXb:uª§§gii‰a˜ Þz.›Í†\±S§NL …„Ò‡âíÃ~¿_¨Zª]ï s§‡Ëå€Z®¥"´é&¸R©„AÞ¼ê™Bß•Ïç+• L ›–•r†ó¾ŠTNKsovvvddd}}M$šÓµ¹>ŸæZ"Æõ766ž}öY–eFc¡P8|ø0MÓ¼ÖŠÝn?}út¡PÐh4ÇŽÓjµýýýÑhÕóŒ©Tªééi|Âá‰'ü~ÿÃ?Œ`xù¶k×.¥RY,aŽÄO„æû®®®ÞrË-Æÿƒ“ï{ß{ÿý÷ßvÛmh £££xµH$ABgllL©T>| ð–——Ñuš™™©V«{öì£æÊááaN7==­R©|>ŒþÛFœ·í"¨jS*•D@tÆÒÒ’Ãá0›››HÙ+ 4 ÚJÄÓÚ0H­T*AOT÷ÍÌÌ@yÛÑ£G†1r¹|mm `Žóùüüü¼N§“Ëå>Ÿ€Æ{zz„l»ÕÕÕZ­vâÄ îM~ç;ßIQÔÓO?b>v»MH $J¹h²WFТÿôz½Þ´­ÞXn‘q,ƒã@Î0Lwww4Õét-‘`ü`[³äÿÄô¦i¸n"ïÁw‹Ä0 MÓø†×jµ¹¹9‡Ã¡Õj‰>ÚóŽópv»˜ï‡Óòò²Z­¦išØ=F3<<œL&Ýn÷K/½„Äu8öx<0>¸³õ /ªT*-//«T*éi*ùퟹ㿞~Î×7œ+”4²âêܤ¸ª°÷–s)|>·&‚7Ä)qzf,ëêê’˜„Ìd2P¿ ¨V«½½½ï~÷»kµ¨ëP(ô«_ýŠa˜ñññK.¹D§ÓhV(6› ·A¦¦¦–––¾öµ¯½ë]ïr8çŸþÄÄÄ=÷Üsï½÷>ðÀ ÷ß¿Z­ݳgÏoûÛX,vë­·Nœ¾Çh4ŠÔÎ\zé¥fïàz4[.æÓ‘ -¢–Q,˲RÚl———¥Ø8étZº± Ôð%d ù¹«««¿ùÍo a°{÷n™LÖÓÓsÎ9çèõúC‡ÍÌÌ´Ô©‡z衇®»îºG}trròïþîï`—~ö³ŸÝ|óÍ_úÒ—öíÛ'“ɾüå/£¼ë‹/¾øÄO\ýõ>ú( ÛV*•Ó§Oß~ûí>úè{ÞóžGyäàÁƒF ^{íµ>úèÔÔÔç?ÿytÃ<øÈ#¼ç=ïyôÑGwíÚõÙÏ~.ÉìììÓO?}óÍ7CœýÈ‘#wÝuW£Ñ¸ãŽ;R©T­V»ë®»}ôÑóÏ?ÿ®»î‚sY__â‰'n¾ùæsÎ9çÕã0Y,§Ó Qû|>ÏWQ©T:nii©Ñhˆt Fñ(F"‘@ö©ßï§iÚn·ŸþùW\qÅÅ_,—ËY–•Ëåp€@–J¥œN§Íf;÷Üs}>ßòò²^¯W(Döà ˆ_‡Ã§N*•J …" ù|>µZ·^JAO‡‹&± œ¸ex"¢(½^ÈÔ4qu:Óél·Oe‰¶ÒV_.—777Åá€ãñxÇõ\ûI6‹Å†&%sk¬¹’M£ÑˆdOt:]»i{¡*š¦«ÕªôoS©TâýóÀÜ}÷Ý/¿üò™ÞÃîîî»îºëꫯ޿ÿñãÇo¹åT·:00pã7þä'?™žž>uêúˆÃáøâ¿H`ûþÙ Ðùf4Ô7Ä@ñ—Ëe›ÍÇårE"Âf‚±u„\`Y6•JY­Vä píP„ÑÕÕµwï^—Ëáî@ Ðl6åry__ßúúº\.ƒ333çØ±cLJ29–e Á +áê'š¦Ÿ{î9š¦Óé4á Æ“ü¼ °Uˆ”{Ýh4àç$FcàÂÊår„x -–[,­ÚJ¸-¸ìŠ´»ÄîO¡<–Åb) Ò¡ÙÅ)¾üòË^¯WúðÜÃãÊd«ÕªR©xý`"ÄÝ Ç#EÈQx¾ IDAT,}Û'2h4NÇ ³­Ñh´Z-þ‹ÛÕ_Öh4FGGiš.—ËÄó ©T*Š¢güïxÇ÷¾÷½/ùËf³Y¯×ßpà ?ÿùÏQúúún¿ýv °¿ ™¤ß–O~ò“‹‹‹·ÝvÛYçóù®¾újÞ—æææ>ûÙÏjµÚk®¹ÏcÛíöW›fâ²¢^¯ŸššJ$‡F‚Qjµ• ð²7ÄW¯×a  À´ˆ;ɵZ=22n  $°, ia¥RY(PìÌÌL6›ÅùªR©à¹.Ç‹Åñ™˜M‹Å4M8;zô¨È¶pƒ-r¹Üív‹ƒ×µUJÚ5›M´ó¼c_ÄÉh4R%”MyMbWé ÑBÄmŒíŒÀw‡Ãápxcc#Nwww·[PýP•J%›ÍJF^.—‰‹#ÑÏ?ÿüÙ<³J¥V÷%¥RIÌ4Üâ¡âî$”Š*•J<:³Â@3q£ŸûÜçæææžxâ‰|ýqrròúë¯_ZZú¯ÿú/‘€Ã‡?üaî÷ïßíµ×f³ÙŸÿüç.—ëú믟ššYö_ÿõ_ŸwÞywÜqG"‘H$×^{í½÷޻ŭøÂ¾€úÏ777_xá…±±±ë¯¿ž^áUNEi4"àP©Tð\T2™ä^lHü—Ê>3™LµZåMP%‰J¥R­Vu:]"‘8}úô¡C‡Éf³ öõõáõQ§OŸ^\\ŒD"µZ pkð°¨ôsøDðd2Y¯×[†µK¥þ¼“““ÐY¡ÓéxÛGÔjµÏç+‹-“¾ÃÃÃítÆÍÁ­ô«–J%½^/qXøk‹ HÛÖG„RA9Õj5 ³”J¥ÎΈ+“;[ž×ëU«Õâž&Ð9¹Þ 4oÕjµh4Êke2™3‡ÿ]¯×!þò,è'–eE4ÜsîC&é’K.ùô§?ýï|gß¾}<ðÀ?øAn~ÿþýçž{îõ×_ÿ±} y`·Þzë¿þë¿îÛ·ï{ßûÞG>ò‹Åòøã}út:D¡íjµŠœc¿ßÏ+^c±7H…›uÙl–kÐõôôh4šZ­V*•Ž;¶¸¸xäÈ‘#G޼üòËõzÝï÷ŒŒLLLLNNBã§Á`H$€2 %‘ Q4¸¿¿_¡PàÛ™L…Ús½]ŸfƒºÝn.ZàØØ¬Ab8dmm¸v»ýìÌ`-—˯(÷¾¾>ÄEZ­v‹f\4ÝÞCm90;Ö0::Úw Ý&!òx<"ý¹R/Q+k›ïø'!$\ˆ¡5\öJûÞ·¸ÅNOxÓ¶ˆ‹„KÓ4À ]!Í„„E½^7›ÍèÎ {Ó`0Èåòd2É0 îð‡k4Óé4¼T*•¸4°Ÿ ƒT*A?Ä]„k ïx_¢i:•J¡å …r¹ ý†ÍføùZ­¶\.ƒoßö*QE®J¥šššúãÿ9è,F¥DZ­Öår¡Œ ¼Ë½½½ñx\èfH¸Rƒ Ã4›MÈ Œ …d2©P(ÔjµÝnïíííîîÞØØxì±Ç`U^o4°Œ‰‰‰cÇŽ¡Ës#¡:K©TöööÒ9üèàà ¯”û%—ËÍf3$ÞªÕ*hDBº3BO$“ÉvíÚuòäÉŽÃM[—ÛNcccóóóÜðÎEBH¯"Cs÷÷÷ãz×h4FÞ³l‘^¯·Z­ÐÏÛ:Á©]`@îmr8E ¥ÊhšFÝrâ˘œœÌd2\$\fË„óÆŽqͤP(jµÑúàñxà¢Â ýN)&›Ðcàë‚Wqtdn´!“É@6¸ÙlŠk&ñDà‘(:⪤¨ÐK*•а8@vàî鶬A|y~–°,‹êÖ$"ý‰eÙk®¹Ƽ„Ã0P»oÈçóx­ŠPñ«nÞì U|èêê2™L'Nœ(•J‡"öymm –GFFà‚ ‘T¯×D·ÑhÔét@­M©T‚I;55¥P(ˆàâ ®¬¬ˆó-Œ©Õj‰D] ¨}ŸŸŸï8F„ Y^__"i4—ËÕV!®qÛÝ:&‘ ,èßZ­Öf³ÿ(Šz½*_Hèv3Î-D·“®Õj‡Ðè‘ tg¨]ÈZîmv…}€ÝÓ ¢/ ÀcäWoƒCCm ¹", ¢Øe½^ߢf!‹Å‚D?EQoÔëõm…F>Ÿ‡¢Æð§×õöö ˆJÁLÀ=j9¾DdMÓ"ÆF£A-ÒÇŽž¡i2,Ë*Š?üáÁ`0›Í AÁ6›Mè)9[`²èõzš¦{{{¡ÄüðáÃÁ`¿MÈ”AÆZ­‡Ã VÐx\…B¡T*qÓl6€Ð|9´E¸½Ò©T*‰C …BKͤT*¥Àt‹,47avv¶¥¼ÎårȲq:jµ¤=]­V ;F A®ˆfbFziþ‚|Dkp8ˆ£ oÛ~gkh«H˜œÛ)ÐÍ'$ Zb¾Aµ"JV5›Í……0=Ú”‚üÓŽfzÍÑüüüâââ©S§p¦… qÆãÁa2™ Jƒjx…*á5™LH\* øô]êõúµµµ•••P(bW¥R:€¦ià•JeµZûúúººº†™››«T*"’ðè@ƒšL&—ËÊ­Wp0 sâĉ¥¥¥B¡ ×롘»¯¯occƒ‹¥MQªQ‚¢ÙNÇ`0 %Ê n7B%¥p@”¯mY!4¡o×óJñt¹ºP¥RÁ‚Á 2È*• oX¢³5ÐgM²P%Äô($B …âÕwÚ¡3M'Nœ <†P($n05›M^ѯÕj)ŠªV«ËpÂá0”Q¸\.½^Æ ¥Ói˜³´´„ä>8.¼.(ðÀB"¤ÉdÂY& Á·ÁI›”Ëe¡Þ—r¹ … š©»»Ûl6C;ÆL&øL6öd2I¬eٖç#‘ê9ëL½á‹Å¶·½Ò`0À¶tÚpWIg¤œÀå%‚1R ²ÁÉ–²T!K‰x(jÒ[ÄòÐór_’H¼+ÏårÒVVV:(¥9{Ê©ÑhÝ[^¯˜@d0-"˜‹¼#w24Ä;˜¸•d>aG£ CH[ /ßn·ƒ” xiuuueeÅ`0À§(J­VÛl6½^`àqÊçóBU¿P?†4 ±xˆ–‡M&S €Ÿ€ZX€Çã)l±XL&hn‘G!¯×Kè{§Óy†‚KPšØÙ© · 1 !nik+pJ§Ó­C?½•·¡•Ûl6¥R óæ¥P*•š9¬"åK”Je»þ©œéìH™­LÍÚ¡"x‰aŸÏ'ý#¥R©e›„F£á‚#„Ãa!›‘[¹dµZ‰¨c>Ÿ‡«ŽFšÖjµH$Õ’Ðe%=æ\¯× …‚Ùl÷˜ …P( …PݼÏçµk¨T*Hæ–J%•J¿Pàþh__ßððp¹\–ÞÃíëG… 4kë˜Ä ‡oh©¶ŽŒO'îÒÙl6Nçóù¶ÂÛjµ"wGÊ(t‘åÀ˜wõz79êv»Û4ØcâïéééÜvSB4×A‹P4gNšÀŠ_ý]5;ôš D"Ñh4Úš)L&‰ŰZ­ÜN¥RAW]¼}Òï÷·,€X\\"ã¬Z­f³Y˜µãõz Ñh4V'ŒJ¥‹Åb±\[Þië]]]0zŸh1„‘ â‰DµZF£ù|>ŸÏ#9’H$Úuz¸kH¥RH1ô÷÷‹“Á`ˆ–ž“HÊP Ùív‰pyu ˲ Ë%ZÞf³™w(2e¶E§‚—\”Éd0aÂBH¸ g!=à‡z½Þnè‹æª}F344$—ËÏ\K¬L&ÛØØ œ\@ÙÙ‘³;$B à ԗ6–`á8ŒŒàõétškrâ£*Á¹!Þàt:¡–' ÕëuhtÅiii —r¹ I·Û=55555Q5(«Ai·Û£Ñ(!r¹á¸4 <á* ¾Ÿ‰,n–e)Š"n Å œ0®^!fW÷ôôðFr¼^/·âÉjµƒ*VWWÅ)ŸÏê¦é‘‘¡Cߢ˜J¥R[Œ¶Éår4"9N’²tôÂl6+â•–J¥í²à¹?T¯×q.òù|øøÊvI$Œ·¥K‹…`ÒÖ …BÙl6ŸÏCáðð0^388¸¾¾^*•”JeOOH7FK‚{>22²¸¸»ŸL& “Š F‚¿$Mèõzn™©¸Qµ[; àÕLµZè‘b\£& Ö-NR-yƒws4…/~æÖì€C}ëE †Ý»wk4šééi„mX.————aº9xQøe†fÌZ­†we6›Mš¦¤# ­­­¡åéõz·Û½°°àñx*•J<Ÿ™™á ‰ÁC\Sú|¾\.Ç;úˆ˜à©Ñh<Éš×€3bYÖï÷ÏÍÍKm4PšËÖ 1 388(ÒÙ Ûºè¯×ëGŽá"Hö +¨ ‡Ã° "Boëë$6–ؽP(ÄÕ"Ä­ç“­è…d2‰Dz»…•ôÃ3 °AÙ+ °ˆE`ÊŽivvß)b FGG¹8l@ccc¨§ Â)[d³YnQãO|î¹çöööþò—¿Ìår—_~ùÁƒ` áù矿²²‰D†¹æšk û‡?ü>~Ùe—Ùl¶§žzJ£ÑìÞ½û·¿ý-EQüà἟~úi¨Ÿq¹\]t‘L&;|ø0 a]wÝu;šF"ä`6›-—ËV«µT*æªÁ`€ˆFãôéÓÐY,µZm­V2 õzýúúº^¯‡HZww÷ìì¬V«­×ëëëë0ܨP(X,¼Ê`0 äÖÃ,×ååeÈÙl6äZ¬…Bû’ÙlÆ«ì rxxxpppmm­^¯Çb1@AL¥RÕjÕf³%“I½^òÒ:®\.ŒŒ=zV¨T*Íf3‘‹BZr3H ÛívnöÈh4f³YŠ¢Ð>ÀAë1,Läì …‚ÈõW©TJ¥r» ¶‹`¼@Ëbä!Áµô„ »(ŸÏ£bÃáø¤„%kµ0­\.—®»Ê^ÁEkîá· ø¡­”pÊI 9Þ›fµZS©$±T*•ˆrbæU•õyï{ßûÃþ=÷ÜsŸþô§¿ñoôööÞyç üÄ'>ñ—ù—étú…^xæ™gº»»+•ÊC=”ËåÞò–·8pàôéÓûöí{æ™g^zé¥ýû÷ô£ÕëõW]uÕC=_ûðÿøâ‹·ß~ûõ×_ŸH$¦§§ï¹ç½^ÿùÏÞápøýþïÿûÙlö¯þê¯vTg‰#)+ ÀM/—˼seˆ’Üz½Î²l?€–âÊI©TªÕêZ­Öl6U*U¥RÑh4™LÆd2AÒ¡P£lðÆÆ†ÅbI$€º­R©paÇ+•ŠB¡(‹Á`ÐãñpCd äxû:Íf3äÛ¹*¡\.¯¯¯' h_-•JU+•J0C6@ÿ2RN€ŸÉdìv;ô`år9×Çqý$—Ë•Je6›vx‰·7Q­VÃx0´!°Q‡# n±u¤h¨³£œ4ôJQµZ-ELÃ| ÜÐ!6\:ž8ÞF£Á0Œ¸r"ØüTÞP®{GÄÁ]†ÛÔh4„&<‰-[üe¥R)RæÈ Š¿¡Z­Š{`¹\.NC8dzþ,ø.·ÜrË¿ýÛ¿‰¿gmmmffæÀ_|ñ~ô£K/½ôÀ4Mýë__YYùÏÿüÏ}ûö8p`bbâ»ßý.s$yþùçï¾ûîË/¿¾äÁL¥R_üâ8pã7RõÜsÏŸw:¼Eá ·‚Á Áç‹…ˆ âo@ °øò}yÔ9k0$Ž¥‘ËåÜ)D.—kmmmqqqqqù7ñx|uuuuuFÁ&“It£A-//·ÔP°.~ÍN§^¯ßØØà- àîß—X–•.Ùĉ;^× Üx򮮠%](¤h)‚7—˵ԠpLÛÒˆ–L&·zÒÂsª×ëÒhòÁåÝv1Ëå2:¼F£fÄ%šÍæYÆŒÿÊW¾¸·Ó3Ï<‡qDvÇóõ¯ý¢‹.ªT*Ï>û,þf›ÍXP.—«¯¯ïßøÆÇ?þq³Ùüïÿþï;ZøAºÁH˜„f³9™L"5‚fÅbñÔ©SRKñ0»,e¥RÙh4G$1›Í}}}ŒZ©Tà%‡Ãáõz×ÖÖЗèt:µZMôð"c\"XqT(£@Éd2p†l6›\.á…ŠÅ"CDs q£‘µ„GcàÒy½Þh4Jhüöùý~Ü–/‹ÛRôÌ»E\5 ö-mk«ÕÊ«9¯dkx»rQP“‚”7ÄZ¥³+ÂíŒ|>ßææf‡’Ïç†q»ÝP›-å#GÁT‰i¬”îGC Rgû¨R©¸~¸ÍÛh4àv•J¥h4zF±¥yéÊ+¯|ÿûß¿•o˜˜˜¸é¦›nºé&™Lf”Á`€¬’ŽŽŽŽŽŽßxã¿þõ¯+•Ê#<²£œ¶b<â­ 2™ Ä7˲geeE!<Ô&‰(Hèy+Cµ׺‚ðþñŸ ¿Ê—¶0‘â §N"Ä\WWׯÆêÖëõ:¤[www$gºÑ,Ë d2¤¨’ɤPy}ooo("ä×jÔétƒAÈ«±MñßXZZbŽ i\)~X­Vò„ö¶¿¿ee¥ƒ˜$ £ý‘.¾€][¾ÍëõBþGh¼‹Çãâl,îôPµu¿Íçó% <ˆ£ëm5¬×år¹Ž•S¥Ri9\\böo{‰¦é§Ÿ~šøã­·Þ*ÔxÁ%Çsá…þìg?»í¶ÛZÚóóóçœsξóïœsÎ9›››?þñívûÁƒwŒL&×ét»víj7†Ó××Ç+ú«Õ*HÏJ¥R©TŠÅâúúº8›AÍkww7ˆûR©„!‘àÉívãµs¨ —»Ã›O¡:+ .--áÍétîÞ½ o‘†ÈçóH{Òj) —––677aÀŸ#„©Ãá€PX(ªV«¸ét:ñɞЌðMÚ5#pb}}½Ñh cB2NŠØåm+néšsƒQ@`ëfq[r¹^¯·ô Áåå¾ aDqOPú-k6›[G"ÞÜÜ$¯jµ*}^q,Á ?”×_é‰k4g'$MÑ´BÏ7<’áÅzPÁÕ½½½F£Q£Ñ|àˆF£wÞyç·¾õ­ùùùååe(Ô"K•J…>vë\ðàƒ~îsŸûÑ~T©T¾ÿýïû|>ƒÁ€ª*!#­P(þû¿ÿû­o}ëääd£Ñ8ÿüóï¸ãŠ¢NŸ>ýáX.—W«ÕrsÄEù|U‡*‚Á$x¸R©@7(Ñ !O ‹E°â‰B˜¼âDØaårYhTöüü<À›®¬¬@‰÷bB•y³Ù6 ÓÓÓPˆˆžTü‰lËÒ4Ü/$rÉpÍñ5àD‹ )ÍfSè)$î9Afdd$CE™x´ kf³Y¯×Ëår˜§ðÒK/Á¨º-2vgðßÈŠ;ÊÐÛEäRKL>Nçr¹ð6;ñåá^àJK’Õ‘XâúÛ¾ˆÃ´onnnllˆëmŠ¢`„TZûoÛì¶^mÂ…iì±Çº»»ßõ®w Y+¯ÂZ 780íÉårU*".”‰‹Ñ’“år9MÓÕjuÚâ¯:ÎZ­†bèccc¼Š“ЯðµµZ „0-ú!ÄÉýýý¨ëEüÊ( ˜°ðæ7¿¹X,=zTŠÝ-îkâKÓ4Ã0âJÖИY[[k×ÅA§300Ъ’• ÃpªgÁ5ħ¦¦>¼´´Ôh4¤ú댸%Pï•!¦æu[ …‚;.A¯×‹•Ñ4ª’L&Óvµô}y^¯W¨EQ&“uuu]uÕU5Ú‘þš Ô+îšðŽåj¦®®®©©)£Ñ(ÔÝ íýÔ‚ÍxGáææ&žÝÅ…”J¥âE 3 F£Ñãñ@›*“ pNÆ X£Ñ(RÈgµZ5ÍÄÄD¡P8tèLódYJáQñ!MÓRz!U*•ÇãÁ7D¥Ráh„‹…Ûòkèà@ …‚øÕ‘õz}aa¡ã+ñx/äÓ¤Óév;Ae:&5×ëõjµ*ä¼* ‰¦›Ä:8x±«Ro>Ÿ—>JƒþÊW¾òg δøêîîe$Û Ü½^Éï÷C6E«Õr/›PÁŽï’i4D„w¢]¹\Ft¹\NŒ¿L&“n·»X,ºÝî¡¡!€<'.3Ζåri;P„¼QJ|åù|~cc£T* ¶eh§Ói¡@·é ~H­VëõúD"! ÑjµýýýH1d2™P(”Éd¢Ñ¨PA2™„—ðÉFˆb±X£ÑP(Ò-KŸÏ'½¾— óˆÃâÇd³ÙPžà"»ÝŽ2aâxçD9~¾ IDAT;‘Ì똀P©p$©Õj16›Í%Åu¿Ä08:&!¢(ª»»´i¡PÀtÛ.xi|÷Y£\.g4Åk"€_E6±ƒ—vè5M‘H"`årÙ¡ÝÝÝ`þ Yd¼fPoo¯R©®×ëDT:“†‡‡ Y€†Ú5 nûN,‹Çã§N ‡Ã¼ˆ/¯P(àÐ…h V«ïŠÅbÜþ'˜D,ßR(¸$ÍårÕju``€°³Ù,J¿Ñ4 §F£ñxЛ¿§\.'‰D"át:[®µÕóÊqé>D"‘êúïëëC±#Iç1ü˜²Ù¬Åb—¨èËd2¨R=¨n)ýÛ¢T*ŵ<ËXd [¡f³)…æ²½ÏçÝÉeWÞ(%©œZ~L„Ìf3K ãT©T‚Á xZŒ×€Ý¡72åóy°Î4 ‚-‡Ãm©öx<‹% V*•µµ5„]ëp8p(tîTSÔøÉëè»B"]J7wV:Èü†g2n± ´†å †îînb \j›ÍFD )Š‚LþG˜®T*Ì6ÞíÞh4 ô ~ …l6»k×.ˆÑ!?rcc£³tµ_§Óáð¡"¦ëëëÈ#;€ûF#îñ€­P,aIù|žØ"ôârL­V÷÷÷s¹h[ˆ—‹PuÔ××ǾîîîFN¤Är¯×[.—»ºº”J%ïŒ`âúÔëub!ý|@’‡EÓ\ÅCQþÇS§NI‹Ô¿www£¯,ËŠ«Ob ;ôº'ÐL(4„pc š§€³ëáÇA´0 ‡ÃétÃT=x[4Åý¡J¥¢Óé@¹\."‡/š¬ÑhpaÔáX¥?’2ð÷L&Ã݇jµúûûãñ8aÔW*•ƒ®®®Ââ{zz |U¹\†žJ‡Ãáv»ñ;o¬9†aàÙ)Š:qâD¡P8xð Ò P|111?£Ñˆt§ ´ô·@&Jy‡C 7 Þ´P¡Ph)1Ãáp$Ab m‘DÚµkEQÅb8÷÷÷kµZ8\½^ß1«œ!Z^^æµÖ××Q€at›pš˜˜Àÿ\ÍÏÏ£új^trøB FäÌè‡~XÊ¢w(x"‘‡Ãȃqt¤0nÊ!Ç_.—‹wØÆm¨Ý¡W3Ä*—ÙªÕ*Vv8(šï, P)Ðl6QδDvW.—{<ž……†aâñ8Ç<'ü/*• $r¡PX\\dî…R©ìÌxÚµk—”ò^ºb±„ªôz=\™ÕÕU8p=áÍ‘HU²á»Á²¬Õjݽ{·Åbéíí5 ¼Yq™LvüøqT… …ZVg>}ZН ¸ïÛÈH-3ÜGk+–333ƒ¶ýqqq1ŸÏB«(jä­­?b<‚à;ÞôwŠ¢r¹7Å‹æ³àÁ¿ÐÉ ^¸È0 ¸òÜÝ–zm666x#éu,%–"RW#Ô]HQTˬT*ÕîdI)4;;û¿Im7==ý¿ÿû¿gbøÅ™ôz½P%®»M¸J¥¥sÖ××!@´ôëõzÜTp?t=à%³Ù,—ËÅ/|:ŽF£Z­}/»®¬¬€E=¡©T*‹éõúÍÍM”†aÆjµJg£qÚÚL£ÑÊ©T*mnnêt:­V âÒl6Cï0z3¼· n™B¡€­Èçó¥RÉ`0@øæ çr9Z­¹¸¸Øl6†±Ûí6›M£ÑÀÁ VQ(@}Ÿ5R(-q:ôPÙlV(„‹srK±†Ï•'‚¢ápX­Vo±Vø¬=ñãÐétJ¥Òd2·;K¬YcÄKMX–Õét[œÎ²,2²hšæšWR&aàL@8a\›ÅX¶HwÜqÇÔÔ ><õÔSðïë®»®··÷›ßü&˲W]uÕO<±wïÞ·¾õ­¿øÅ/ þþíoû3ŸùÌŽî‘¢œ E¿V«U«U¡\±09ááÖ™Á`ˆÅb‡ƒ[öÉ0 P`<Âó¶Ûí\´ÜfgWœÃ ^šU*•Ä'˜ðÚãN§³P(À}¬k!)†ûC…B¢(‚€×NQ^­·:`šÍf(B+‡ÂT¼¸¸h2™¼^o:ÆŠhš†ò<µZ"„~¿?ŸÏ£æóyüG{zzÚºìD¬²X,‚@<Ëí"N§3‹Ùl6iY,[.â"´ KF„,ZÄEÍfS ž,w‹  UáÖ¦JôujµZhJ‘¶bÄ`0ï±cQ̼ï}ïûé _qâ:ëÓét,Ër¡ÌJ¥R[µU\âVñU’Íf“ÛH±EZ__ÿÜç>W(Þýîw?ùä“üã¿öµ¯Ýwß}0ö&“É<õÔSEiµZ¸Þg´÷5MÌ+$T‚…û»•†×Èâ:Æh4§ñZ²âÆÖÈÈH©T:tèïJººº #ôñJ¥‚dú!èîDli6› È <V.—óù¼ÏçeS«Õ`A"‘Ò‡ âÃl6g2˜jÓl6AªBUžÑhŒD"ÖÍçóûöík4ÞP«Õƒ¢(¢Ú»T*"”ÅbÑjµP¯ÕÕÕ… Ãzzzr¹Üææf(Â- TÙåt:E¢¤J¥ÒëõñšL¦­”SCù a9Ùív¼æ~+$4¾½%»ò®7UýÔF/A”¾<<5 MÙ"Ú(•J9ŽL&Óñ¡ :àPFÂżêíí•â¶4NË·uww·•K –w¦éïÿþïßÿþ÷üãF£¿úÕ¯FGG?ô¡ =óÌ3À1*•êÊ+¯|ë[ßzâĉcÇŽ]zé¥P ù¾÷½oGåH§jµ R ¢C¼±5Ü©V«`DC¼¾§§‡a(Òét`ç‚…ǹ×ÞívCj~~^©T 1X&“þž¶FÅÎ¥R ÷~ ùT¯× ©ÕjxR¤0¸!ÂmJ¥R¼]2N§±Ôëõ|>_,s¹\&“Az=* "4¤ÑhÆÇǯ¾úêk®¹ÆívW*n9x©TªV«&Ãü~¿ßï·Ûí>Ÿú|¡—Ïçëõz0dFJ ¯Æíêêòz½dMˆœíp‘ñâNS$¨¯¯9 F£ï`#(—Ëu6Ežw ù|WýýýµZ-™L?‹E)Ú“ÉdR*•- uìÐfzAhĵ[ºS\VáfҢѨHÕ?EQCCC¼Õzøò¬V+EQg"Yzà 7@C¾PßœZ­¾ð ò“Ÿì(˜-ZŽÓ{饗‰MÓ—_~¹¸2ƒ¸œ£\ñªÑhl6DEP#$$q¹\Åbqss3›Í Å"À¥¨V«¨éÇãñ€÷Æpæ'®: Ë›Íæ“'OÂÝA¾‹N§3™LâUÔ©T ¿Gõz=—ËY,†aˆ D±X$žšQ¬Vk£Ñ8|ø02Ãý~(B;Y(@§vuu¹Ýîîîî®®.ƒÁÇ­Vk*•ŠÇãèÖs¥rëõz„ é D¥ƒVª-ˆ­GÄæŽÅbÈá€(kKy¸k툳àº;z½Þ`052è˜òù|Çq9¡å¹Ýî|>ŸÉdöîÝ‹Ú9Ìf3Q;C·û½'OžlKúý~°…¡ôÐ`0à£_ŠÅ":?nWD³ÙD‹v»/Ç—G´.n#ŽŽžsÎ9Dýþ!úýï?;;»±±qÁp_fY?‹J¥âv»!˜Ž€;;ŽW<‹EŸÏçõz5 ‚Q'L%ðWü~¿¸8k4HˆG""@Çåd¡ÑJèÛâñøáÇŸ{î9îðÀB¡ $š{+S©˲„Á^¯×‰(´úÆb±@ €×MJ¥"—Ëßö¶·]tÑEƒš½Âá0MÓ.—kß¾}—^zéÞ½{}>_,ƒ “H«ç$rËhš S-:c°þþ~ñ²‰7 Q$ܸîînŸÏ …ˆÐYµZ%ìu!– (ª] g!‚ÒÊ–=³ù|ž›KCÉEîÊqòz½D׊F£peNœ8‰:ƒÁ`2™ƒNµ)ÖÛåŒååeØÔ6HdDC¤Óinºý\4¥išdo]À[S;77W©TfggGGGišV*•r¹< Šƒ) £¯ÙlF£ÑJ¥Òl6Q¤¤ÎHhËT䶓㜠kh6›DÂá² \.£ËÐÐR©„µ‘ªÕj^pw\ç­V‹g@µZ-h¹\î÷û Ñ#GŽ=zï½÷...ö÷÷£Ú*˜ðT¯×_xá•Juùå—¿å-o±ÛíÕj2¬z½Þd2Ùl¶þþ~ЂpLsssçwžB¡Ëån·WÕj•7râÄ !¡Üh4è"Ar¹ÍøhI‹‹‹Ha@¯4MÓx-Ñ©#"ô!}¸°°P.—¡D ÂÚÚZ €w©(!211!$ñ›ÍæÌÌ ïKâc\‰„7#‹óIÇÁ·`0(±\m~e ܪP( 'šãôï¼óÌ –e[¦”Ž?NQ””æP(ÔÁøÞÎÈçóMMM¡UMNN>öØc'NœxÏ{Þsúôé'Ÿ|rxxx|||tt,å©©)~óÐC]y啟úÔ§ž~úé­#…`ü¨Åb¹ì²Ëìv»¸bÑÖÕÕõÎw¾slllhhH¤¸Öçó!x@¨ …†(˜†Ú¸ÔC캸¸¸]à/°†”†Q( …Âív‹”C_½xbµX,¶X P(‚Á ŠJýêê*˲v»=•J!ß±T*:uŠeY4Ãiaa€í5 Àà†Ãáßýîw:.ƒÁ'Nœ>}zuu´>H^µZMQT¥R™™™q¹\áp,bxIDD eª×ëaýA¯4´pmñˆûûû!&äöïY­VTA.Q rHĹhY&¼‡Ô³ôŸ[PèU•JÕ²Ah‹†áÏÓþÒK/¡èÄ¡«G±XlY$Ã0LOOÏææf.—S©T`Erw‡¢¨¶jc¸0í;ôj#¹\‹Åb±šZF¦]«ÕNNNÀv4…83xçZ­–—Ù@~¹ßï_[[ÓjµH@;ŽR©”ÉdúúúVVV¸úI¯×–ñwN3Ó¤\—ËEÓt(BŸ:sÛk³Ùjµò …ÇãI$†·*šeY­V[,á¢ùýþõõõ®®®T*åñx QÆd2AÇ(LšH§Ó 0Â<öôô„B¡jµ*—Ë¡; }yoo/x<´pë)ŠÒëõ”GŸ5R*•v»]âà%½^ŸËå:›) Øâ…ÊY„$HÿÒÒ’Äßr¹\Íf3‹ñ²kWW׿ææVJN€H˜v¡ÂyŠ¢„ê¡EÊNŠD"RÊ7 ÊÔj5ï˜ @¼Ý‘æ¯3ª×ëf³YH3 9Où|>›Í.,,œmm&ñC2™ ¥‚Ð>¬®®f³Y¤™ˆµB¡0›Í6› îÚòòr­V[^^.•JÑh4‘H@óÊÂÂÂêêêôôôÉ“'=º¶¶vèСR©¤T*WWW!/—ˉ&MÔ§Ü™Ãì•24a+LbÀÊjµ²,Ë] MÓZ­V¢f’½2²DöJg’”@#¹L&«T*-[hðXh£–¸° ‘y’ëëë5“J¥Òétz½žÈÕñïÞo~ó¡Ð§Þ’e(Êå2d}“Éd6›µÙlį@ÓüÛétî {}ÃR¥RYZZ ƒëëëpÓªÕªB¡¨Õj¼P„E M_l6›BµÐaÊ5¶xÅ+jÃâ½2“@—ÄO&“…Ãa¸Òx8žðöÚÚ<ÇFÈb¡;‹ì¿¥¥%|¤¬²­2™,N¯¬¬,--­¯¯ÏÌÌœ8qbssN˜P©Tð½µÙlà½âj•þòjí~ÛöJ0Š¢ð´ÓV~+ o}›ôCßvÚØØ@-Jù”ÝnÇ’|xú ÿ;y¥§ñrIgäõzyÏey {ˆ¢ £Ñ¸Óôú†¢\.‡®1pK(éž©V«*• ”ÓéÄg )§f³‰ôÉd³.‰t…ÛÜÜ Rð±Ìf3á–ñÎ÷Ãe"§Ó)? –g0À!˜ ^³7‹ÁÂ`)†ax#øÐ*þ³T*íd•ÞhT,‘(ìêêÚ³gP²§ÙlÆãñZ­7—ËáHzÃÃü’>ÅË`r¹œ;ùE E tÐÊý~?$\ñ›éñx YÍ5¹r¹œtIå2™,D£Ñ–€­ÅbT¾E a¸-¯\.›L¦¡¡!½^š–²Ù¬È5\]]-‹étž÷uÆF£­ñ-“jµºe—w±XÜzšG<'´†jµ Ðr ÉdRÜžÙ:º­9í~¿‹Cm ä4{“÷ñeCnvG^¿ÑÈáp@EWW×Þ½{…‚`EMLLôôô€x…©¦2™lÏž=4M¼Mµ»»›[DG('^sX¢SU­Vñö—z½ªÕ*èH·Û]¯×áç¸~[-÷årž4—Ë%“IÞ˜'þPH9á4;;Ë0ŒÙl†Ýs»ÝµZM«Õž>}zmmMhž4¯8®Õjétº^¯ A©žiêééi »G:A–Ä7 p;a½^/.ĤŒ`?ÓÊIŠ÷f4‡‡‡·2—ž‚S”0dÉn·Ëåòõõuü:ƒÁÐËåjÙ(.ÒITÄ‹Ú>|¸³ÂÍz5W®ÏéÓ§¥û /ìííÕjµB¥±“““CCC«««Ä\Î'NÀÀYüÁ`°e9>ü”Ë®ÆívKð Ÿ*‹¨5‰ –[œm©&…B‘N§Óét¡P`YÖï÷ ¤óù|ð€p­`´A2™ìíí]YYåÁŒ¢]»vÁÍ,P~ÃÃÃËËË"B<§­Gè€ðPðÉçó …Î&b¯¬¬p—“[ ðSÏZ a¯´¬ŽŽF£–8 `xðÁ–oBZ„XD$7‚är9ïèØ–ï@,Ëòr9± øþÑÑÑp8œJ¥&&&àÎ …_üâ/¿ür'ûÂ0Ä4FW%~Zh…|$B;îçqù–Ýî†oñ¡„…B!ñçð °A°ªÕj©TJ$ÙlöðáÃ0¿¼jtÿ?Þ××Ç@kÎèèè©S§ ÚŠ^ÄLqêïï‡Ã K ¦Ý-‚Ñœ‡ƒ¢(q éD˜Þp/D ;¡V˜÷ïÉd°?¡P·ù ¡]¯×Å¡AeŠ Ù.™ÍfFƒ\Àññq†aŽ=Ú®¡£P(úûûÅ—õŸÜ³0›Í¨opppmmM<§:Ü‚Ç/#äË×ÖÖ S›+?!€400 ¥aâ ^š¦†áÎ+€¼´ `}Õëuh†ë¬ü½}ÿáGßþ¾þßõ¡{þó3÷|ûÍo~sËŽ*‰€4,Ëâ€ëBÝ>£qUÞÀ¦Çã!B…ƒâ¤(JB^.—K)×h4z½~ddzE!ŸÁ²,^ç#qÏyK¨=KÃÃÃB•?RÀ0 D}QËžÈ Ò4ÝV¹L mpddD«Õ¾ãïP(ƒƒƒ*•Êb±à¨êEíÝ»Wä,x·H.—Ÿ¡(Þœ.…ɆA¥njµ]O¹\.f'¸Hœ'ÑKhy0 wÛ‡††pV±Ûín·[bêKí@ªl˧¶—¶e DXÈjµâœ,`¬þN·k×.nªJ¥âMr#Œçt:!îóùÚ ë)•J¢„øaÿþýßÿé‹7ù¿ÞsÇ¿½éªÐW_}5wGÄË¡0—aüTPÓ¾Ùl¶eêO¤Ãÿ,øþ‹…÷aC¡‘¦Ëd2ñx¿TÍfSÜNT*•B8Š„Ý}ÁT*—ËŲìÊÊ ì'¾½CÑçóyé"sssB”ï‹÷”¨T*¸f³6Jä¡]†a‹Å"QðnÂììl>Ÿ_ZZ‚ %Máãf³9==Ͳ¬Ð0Þ-ª×ëËËË[ÀKƒI|´E,Ëjõj4$k ÆŽ6\œÁôz=ñ\v\“Á·Fø”Óé1¯âÇ4??³ Ìޕ؉È{qxÇ÷b[tH؎׀·‚ñâŠÇã É ‡Ã„àÍår333\G°T*ñ"lÁÜ)\ë ½cäär94esgK¶$£Ñˆ³ à4ò1¼‘YqG¢„rBш‰„”y¬mÕ2 Ó-Ú­HȆB!‘¸ªÕjÅŠÛ,—ËEæ "§ƒ[«Õj8ûr¹l±XÞö¶·]z饨 ,ãí“B‘¢Î +^AÜ"YZZ¢(JÜDÊåræÝØØh9nùF£ÑjµJ¦Â;+V¾¸¸ 9Q±Xä} 5Àr³V•JEbÈîÁ¬eÄEJ„=p.R(wÁø0ŒZ[[CÁÆ|>/!Çã\d&b“‹E`×h4 ËCM¸\å„s2D!e·Û¹kápÂu&lÙvÁ‘©ÞÁ¸Râ²ÃT§Ž×_øjðüpéŠqèÄ—@/@NPhf‚à‹`•r¹Ì[­Óy++àẺ³LI[À€Ä¸ÌvY³ŠD°ƒÐ'ÿÞŒ/©­õãËälµZ ±l6+$kˆˆbg¿..2Zš½õz]Hôo…‹–——¯­`¬Ùl¶X,F£ít;µ»Ä p<‚ÙlÖétBl *Sœ÷àù|žH°wÐa*Ä'y'‡Ã¯<—Ëá˃>J§;}ëËÛªÙIoq‘Ñht+Hƒ§R©lW~q[ÒH¸Îà]^­VC67ÞG¸\¯£Ý+¶¥9 :NJÜC¨Ó–«Kxý¥R‰î@2™”ÞÒ$4m·\.‹¸tõz>U­V!).¯Á¤5"ñIÙ+í“›››8ÄK&“©V«F#ŸÏ///¿üòËB&BO-±´d»? DRÚVÄY „D?7m '[«ÕÌfs±X”hiµZB\öôôÔj5¨Yƒ8Õj5˜| Ž 1Â2C Ã0^¯·X,rí›Z­–Ífûûû·Et¹\J¥çÔ„+N0 —ûw(Ó¬°“"õ,€ÑÅËBíÎ'ÛR·ÖY9;´Ä7‹=x ?)³ÙÜÁ¦vI¯×‹ø‹ÐÞ®ºµZ­H ár*/ˆžq$xm6›¤¶DÛ¦i.[”Ëe(1‚q™BO§Ó8÷F–e¹Ç,\ Wþív»3™ oÈÈãñ¤R)¼ú¶3»}J$[ÖÕÕ‰Dpöjù[Ùl–«)aãÒÒ€[sÅ.ã¶—SY–u¹\hÜ+'~?¹‘ñT*500 ÞQ T*u:\.G¬BÓtoo¯8БìO¿p¹ b±Z­rw¦Åb1â˜*• !…· ßF£!Ä6"/ÁÆÆãq¡#0J¥R\žƒá|R*•¶2å q#Á*°ÃÐ/RK ]MÜ¿·Üsî1 R©T6›MºcÚ’ÃÅ…÷%ü¤ŠÅâv=²ÅbÑh4¼Ï¥R©T*àSpoqgkÀç ã'‹ä0¯{ ±]ñaQQ6›åÕ=€–L&…2<ÑhÌårð*•Êï÷çóùT*åõz c¾ ýçàà ˜õz¬NÑn·[¥RVN±X¬¥x•ËåCCC[ç€H$R­Vñ5”Ëeñ_çTÎd2Ùl6ŸÏ&da9{ &y£*µ|>ßÓÓeZ"[øß܈BÆV«a.’.ã¬Òl6¥DáÄÇðºM¨ ŽIˆÁd°A‰Äå=\×Þï÷ƒñØh4D<3˜Ž–×ßß{ù|¾¥LtBÊóÚLF£‘èüÇ/;ïÚˆðÎââ"Ñ—#Z>à“¿\zI*Úœ¶j Ä[˜y.z´×ë&V*•¸ÎXYY9|ø0ר "©& ™™Þ-‚cªT*óóóèN§“Ð%¨7¶3ZZZâUÒ*•ª««Kä›»»»y 4t*• ¦‘£F@rí¢Ð*ô[\q¬Ñh„:Ø …,L§Ó‰$f¹\$"ˆ¹ü52°r÷On M px%¸8'Ãoµœ{£¬!¶#tL¼wPöJßzOO‡PWo±XÜØØp8ÜFàB¡ =€!Dh¤Sg^2lŽÈ1‰±{v»½³Úq¼‘Õjiíà/°¶¶ …–——%vz ¿ #kkkc¤´Äâ¶I2 [c0Ün7aV¨Õj‘&.:$ï¸ýÌÁ`0 ‹Å"bY”ËeheÅòÿoïKc$»®ó^-¯^íûÖµuwUïÝÓCÒä MŠ Ù–! Š'm@$h;°^;‘!ÈH~Žü#€!G¶€Ø¤)€(VhhËv(H¢-.3ä,==SÓÝÓÝÕU]]U]û^/?>ÏÍõ}K½ªîYd¼ócÐS¯ê½ûÎ=÷œsÏ=ß9*+ N§Æd\Ç#ÛÝÝÝív»H}©Õj*ÈÊD‡‡‡È¸5 Ø“Ùl6¥³+AÔF‡CÉaôx<…BA%äÎ;²[¿ß‡“tÁ ‚@3ŠžAžç™E.5ðÁ`P Ûëõz!c‘HD (†j´9N¥ü+ŸÏǬÞ`0xùòå^xäË¡­ó²GE%I–õØdù@OÓ`0Ђ¼) `šÒ4¹Ýn‚ÀåyžŒÜçóY,–Û·ocÉ0ÓDS½^Ïår Øh4Òßw8Ó)>¿ß>Hû9DE}šÈ\H%™Ñ`GGG/'Š×ï÷Ke…BA%ÅM#‘~F…ãt:P©”s0N‹Eª¡Ìf3F\,···¥GÍc«êÊzC@  Bw0{#—Ëe³Ù···ïܹÃó<ã1AëÉÈïïï{½^©ëÍÀ'»Ý®ÆÎô‡ X•¦NéPV‚GS!7ŸÍ¥rFŠá¹Ýn¥ý¢Õj …B²ê£P(0N±Õje¬ ì\ÄëP(¤$÷­V‹>‡ßßß'»yÔ• uÁÝ»wM&Š}ïÞ=¥|‡|>½E6›UÒk‘H„Ñ5v»]Ö¿q»Ý¥R‰1ÒP <σA´ƒC²"ã ¨¤ddµZ÷÷÷IL†¬A«Õ:pI€ê[lqÐshXz±3Ó$wÌÔCÈo !G)÷­!*Z¦Én·KQgÜ ò<Å{xx¨±© ÙW„m®ì—e—§lŸ £ÑH¥Ýó¤¬xpT§ÓÉøë¯Ù¹’Ò}ÛšÍf½^?==õù|‰D¢X,Ò¨ÆZ­æt:‰ÛÕï÷ ö"‘H,,,êqïÞ=´Æ¡sœÐ^º€Ëå2ðÒöq„è¼2æsÔ¢&}NµP:N¥Rê@`ª Ÿ2 goÝV­VegØr¹¬t¼ tÉ´ìt:ŒƒU1”ªË7›MiðV:Ù}!aš°ú~S»Ì¿‰iêt:¢(QAþØÍ›7wvvúý¾’t¥R))g”€>Õj•)JvF:==UÊìBîk§ÓiµZ­V«ÙlN”bÏçé;Óg- NY‰"‘ÈÃ&Aá8N%wJišh„©ÒQP(J&“0NXqÈbh„XM^¯—Aý#ÿ°Ýn3»œÑh¤„#Bîv»Õë9…Ãa(ÞçIHû×Çn5JÒX’2% ›Í&ën 58K'Ôëuº=ÑË‘Hdeeå©§žZ__'åý»Ý.Îýâñ8²*Ée0qRii  Ãp8¾J{qP($ë},,,(y²LõîP(D7ÛTÆív«%jµZDe+ˆ×jµÁ`@DÜårÉúËý~¿V«ùý~i„~¿OÛ`­”Æ0år¹é*>í2iVWW-Qš&H‘’¸*IW¹\–F¿ëõº’¯ãr¹G¥‡'Œ¥q?Éd’˜4銆$Ó«‰ŒTÑ•–¨ˆ+w¿y.½A'¶ªX,ŽÍ"ҥćx<®¥£–Õ$w¯×«eE+Mý²4¡½V6›…¶ì²¾ÿüü<"Š4Wñ+¬Ôôûý¢(ÂD¢3’ëœN'¤K,©„¯W¤ç¢Ûí*q½‰VQšÁX,6 jµÚt(`éÈ“É$Ñ(äÑëõ¦Òa¯®®ÒBÒëõšÍ¦lÅ“)ˆéÌIÆf·Óé,,,<óÌ3±X ít:q]\\¤»KûN—ËetRÖrs©¨ GK]EÒ‚‰D\.íIˆ¢h4q\¯4 Hr¹\ änâ}’=üóù|ô¢Æ²µX,‚ ÐR¤eå2ªCafV®JË1fš4’Ê€i=0õmQ™þAì<šÍ&vÒäYf³9‹ÍÌÌ{çõzONNšÍ¦tŽÖ××kµŽ'd ºe"L‹–†OìB¥RùÈG>‹ÅžþùD"aµZƒÁ'?ùI“+BŒ“Ú™“Ò±Þìì¬Ñhœ"æ+[Óšã8%|"³å—Mar8£ÑèÛßþöw¾ó+W®t»]únÇÇÇÄP¥R)ƱŠÅbJ ÔÍu8R_ i»n·›l_‡ÆzÒÉd’dÈ"Á»»»ÁhÙ“ÃÖT¼<½ÎårŒ¨Õëu¦Ï=ãÈ2'|PI‘•“l6+Íæ˜ÍGªÔ“==%Y4ÈéË—ËE2ïÝ»§’ËÈžÉdšG€~<χB!§Ó‰“p¿ß¯‚ëÔ¾ð\.•,æLl6$¿"NC>ŸWÒ³¨WÂ8°×®]ÛÞÞž¨­¥F™¤‡AøP¯×™&“R»«âXܸqƒvŒ¤Xéíím€½ðߣ£#l(i¾qã<3„ß¡%•V´¬Ë:=ôÈ!ÉäZܪ˜¬2³ÙÌÌE6›‡J >¤ÃSrȦΒP¢ÃÃCø (u?š•çy•˜Ór2ß`0øðÃ5²WJ²éŸg2ì&Þ€Çb1„Pe³“'"³àa²f4Ñ‚‚Þ'ÄE¢¿ ð©ÔñgÌ©[­V¹\öz½ÌÞ®ÓéОE¡P @¶«¤ùÙl6¥ a»ÝfæI ÆÈ,H›H§ÉívK·ŒL³Èd2I£ÓANJGGG333ôð4F]ºÝîh_)…§”âñxœ°ýôôtlq³\.Gd[ft»]xÄgìðŽŽŽÎ土éÓï÷Éî¿\.=ïGË ¯Ãá0ÏóZ0ãŠb±X.—SZMgÜ|O‚R_ѵZ áÍl6‹ βÖQ–ÛH×ã[LlœpK=ÇÉK&“*ØXQ±*Tàr¨Ø-;<·ÛH"ÜÜÜœ–‘÷û}(~¯×æIËi¿Ýn‡uGôŒá°Æ6ó2jÔn·“DGžçeÅ‚~Ù~¿¯Q„ê§“” G<ÏKãÚÅbª™iš®’&3À×NNNF£þ˜ènF£qaa†E£Q©µSa‘tu( ;›ÍŽƒ¬ÔXº[c’=îFŸrKk«‡dÉ –J¥££#Q-ˤᎎ>hÇ9<ŠÇã$ÝЂs¼¹×jµGyXMZV4¡½½½ÃÃɲ9ÔçB½F°’YB{C饓““ÝÝÝ+W®´Z­n·+Olœ&‹¤Ï*årYEÝ ´QËu:¥Kív Ù Ù§¤R)ìâyžÇÂît:ív;‹Áœ †µµ5b>Ábí‘h܇[Œ®ÑˆË+•JÌÈI5O"úc3AÛí¶¬ŸáõzÑÅœ,Y02yP¡PPáöz=äôc©c)Šâí}™10IÀŒ·«R³™vqhãBâT0Ÿ*,bÎÛT Šc'ÂívÏÍÍѦ±\.g2™±<Áð’ÉäÚÚšJ…tãX«Õ´—'®&m“‰‰ZzÖjµóÊÞ~„ePñ½^ï|õžôˆÔ`0 ÏªìnXËŠÖBóóó²¢X½ŠÂQ2]™LFö¬•uq|||ýúu>1—äA¸ßÐëõJÁLV«uvvöì„3È,žT*5??G³Ù´Z­ÑhU5¥qÀS”t½z½@ZÌštðÒH ½è,]Z—/_VQКT*5Ö7çy^ ü”þ„ÆAùªÜÖétJSÉé›—ËåF£¡ÅóE±Û툂{ív{ee,\Å\ÐÜ;Ǧ;d?J°ôƒÔÃ}4‹hHÜh4Rº£×? *• Ý&µÛíª€1§§§x›Í–L&Ç'BVÊ®¦F£!k¶ –N#-//«#Õ!ü2äœ0avv–ì{ˆÒC™íéì ŠðS‘ .«XÔWôD0-(ã@ ljié÷ûR=©~Cš{*†t±8§¯}ý¿‡gWUŒŽ=EQ$€/zaK}üÁ`P­V}>ßX®ì~ˆÆ… † .Ð1®z½îv»aÞÑž«V«¡ü×Ôó´¼¼\¯×&ʹÚAºLÊ}2h]ÇM&½ŒFô²ÑhÔëu“ÉÄ܇öDPF}šiîÑwÃçÌq R3Ün·Ô8á·X‡ÚcF£0Cä q `L¦ÿäD$})ò²ø²GÐi¢(®®®¢°ÐØ’Þ,ŽÕ°ÓUæ•ÆO†ŠK(Ü Ä1š XD,'* ðÜsÏáø }´'d+ñgÒüëGn‡ ÃÆÆQ8èͦʦK©ÁÓ®‹È*ÃŒÓE y†¬­­1¨^%YÒFVá6 i‡ÇC 2§˜qéZcÂÑhôâÅ‹´q2þüÏÿüØh¢Ÿ¹\ŽÙ€¹Ò¦¿h®ñx¡3´%öûýtœD¦Ããh4ºuëL­lã8³Ù¬”E.¡o¦Ê¬[­VÙ®ÉV«UºÁ<ê'Áà]¸pÁáplllD£Ñƒƒ¥­äþþ>ÐÝKKK8I\3úBv„túP$!Qµ òâ'F£Qún‚  ç³Ï>K§9˜ÍæõõõIW5Ïó$E¦ãÜáååe²êü~?ÉPÊd2€x3½y󦊇¸¼¼Ì|Bºñj!ŸÏ·±±q–í……¥ þââ"äAåäÉét*U‰žˆùßûÞ÷ˆ‘NHÃâGӉʹç›u@þ‹ll•1K{y«è"uÙë´Ý¸qCE’F#9ô …BÁìÐ…¨‹­­-lÎNÖ«Ìe!Ûˆ'2˜KŽãŒ¿ù›¿©>ôjµ 3£Ô½é¬3)a?k±X"‘H©TÂÉ`ƒtñJµ(Ë´ºñxk¬úÐrbÞ·×ëÁ«Å4¹ÝnéYºÝnŸ¢’‚Ýn·Z­XìƒAû¢òÁL·å†1(¦6`^¯W}ÕçêëåÖb±HõÆÐh4nÞ¼)µg²JOÝ@f³Yu…#;ô¸’¹¤ô$í¢æv»'’K»ÝÎŒCúsT°–e1³Î†l®]»Ý&é•h,­2¤±mžyž'+‡4ù†±Z­v»cˆD"È€FXÏf³™¬d4z‘…ò ‚`4gff èkµÚ¤¥é±È·(3¡Bš:Îõë׿óï`o—ÍfaY{½žvØàòò20Šj0Ís èÁ² ”Žaww—f]¹\~ :Ñ»VéêÞÞžJø86éäJʼny3MÀk«“°ÈåriÜÉu”pÙøÀ'À°¥¥åáŠMá¡Ò+ú1J;²‘ÌX,†µápXË™N0L$±X ÇÀƒU<¤sAoº.½˜tÙ±ùý~(õ]o§ÓÑÞQŒ™/Y«&{01éÎ[£áWR8²*]äm6›?cVÊýЈ›è|S:(‘HhÏœ"ùX:BTBRx½ÞápÈìZèƒkòG.—|rrr²×D³ó\.‡üøH$Û‰]#þ–¬Ãáðé驯¬6éD MN)Á½ÝnïííM ª8ûM§Ó×®]#òù|ý~_zrƒ†fÅbQºÿ†Ñ’>ópšJÑTÑVG È ³TËHyÎLÓDxAíç*?Wº„ã*¦Ii»I›@³|‹GfF;R©Ô`0Иz€žÈÈ&ÀäÒÍa¥&D„D"Ñh4¦@mz<TIf Ó%cµZÏRæqj…ŒVJ:Ùn·£kÆÙÇI†d|GÙ1 ‡ÃÝÝ]ÙÍ–ñµ×^›b4¬^¯+õQ¥å¨äËÒ, ]6ÇCâ6S¾”ˆÑïHߤ¿@ΜG$aZÎÌÏϺèñxü~?S,œ.=pzzŠÖÈtü‡“€Ñ ‡C£Ñ˜L&Ûí¶Ûíƒn·›Ø³|>ϘÌv»H$»ö¾*®# ¨J.U d'×ëõ h 0¦Iã:akk‹±CLr6Ë’…¸ÊzXgoï;5`'Ëa•”¤T*e6›'Ò³Œ‚BÄTÚ 2Á¨iìÚµ? \@˜UN)ƒA¹\&’¬ä-I{»È’,‹fgg5.7ÎL IDATöf³™Ïç‹Å¢ÛíVÏ_%Ü«T*ÇÇÇ¥R)—ËåóyfÛ×ëõü~?¶žƒa~~Þår=÷ÜsÏ=÷Üææ¦ì.Ú•¶³½^O¶DHš>v¾$Ûbì~ºÓé¨ôÙ “ÆéóoÌ…Åb!'RLå=pkûv(µ"M%_^^–ݦlnn–Ëåt:-Û1Þ|¸\.´«!°€>§AbüD#,ßãñ lª…e&“)“É ÷ ý9y`Œ"¹Å£ÑÊ<ŽçùÕÕU«Õ ÃÇ™îyn·­¸i`¶ø&"ä’ÕjÇã$BÒëõ 4}çÙÙYꀶLN'3«½0È4rØÏX,¶··G{'ý~Ÿn5´¸¸Hš~–ËeÒC–æçç[­ÖÂÂB>Ÿ?<Ç9’zJg¿ß‡V÷ûý´¸¢JÅÉɉ´M5î©ã …BDÑIðZˆ™÷±þ8=³²Ð’.ë¿Ó#w»ÝcW4š‘“¾‹*3‚?Tö»¸JøÐï÷-ËÚÚšÓé, ²ÝX°re_“¨$*xV2™¤ý )©k¡‚~¿pŽÊ0` Á`½„¡¬°¨•Á9ßxã ¥#‹Å"EzoooãäY}OÂÌôRY__—ušh)¤W#ÝŸ'O>ù¤ôÈ´^¯k)Z³¸¸ˆž1tYtBsssØÝK7UÜýŠýHÈÞÙÙ¡7 îܹÓét°¤32é}ÛéééÜÜœÓé\[[»páøIe Œ´&,©Å0<—ËMZ™°P(”ËeÜßjµ’äNz @k¹’ ‘ OOáC$ôz=•ä$ˆÔï÷wvvTÆàt:766ξžWWWÏˇ…“®%¶&-Ù‰ãI4TY²›­™™:RM¶ÊO°¢½^/Ä•¤ƒƵµ5¥_u ®âÏHtó@é)²ìt·Z-uý®@§Å¥wïÞ½ÃÃÃãããX,F"N¤÷³-0™L4žd¬K···§äS.//ËÎ`&“aÎ B¡sš" s¢HY¶ÒãùÙÙY—Ë%]M'''˜‚½½=c¢Á´zÕÇ'åÿ¹_ûÜûë_ü½ÿñïïŸ}öYúªÒy£ °[ápxlº!9œš;^¯7•JÑHR£Ñ8‘†R:®º\.:?“É<õÔS—.]^5“ÉÐ71™Lèo0B¡ÐÜÜ\2™D:ÃÚÚšÅbùØÇ>¶´´D^Ü`0,//k9èÆŒF#úÁóüÊÊ þŽÅbá|>]‹æáDÚYIñ †'žx‚ü­þ‚sss.—ëòåËg1 „Esssê] VWWU†}^«—Ü "¡‘5V¹Ø6™Lò,ƒÁ€W#¢B¿~B‹+=AÒwײ@---чÞ@@)‰Ÿc%å@{t0SIuÌÏÏ+åa§Óé³hjš¥h¦§…KÌç&“iee…Χ²HVT4Þ_ºÐ˜/$ &ðèv»I¨Üd2 ÿÒ G‹ð3ÀÚTÊ‚&š|cccss“|þùÏþµ¿øþ/}ñ›?û¾|ùã¯pßýþß«§)V©t½-,,ÐI$ÎÎRqÏÝM1›Íp‹èü:«Õ*ëQ ‚°²²b6›ív»ßïßÜÜL¥RÉdR6F½œ\“¥Fs/‰H§V¶u‚,µ‚F£1(!ÉdY¤ä\ 힣FRï*¢Â¢Ç”„‰jJû¦¥ˆÏçPzvv–h^«ÕгÒp8,åƒÛí¦=”kS_¹´hIÓb§Ó~¿_Öy%–L&UàMét£z@`©$G£Q-™÷Rp™&•ýètjê\hvvvssS{ÛÏ)tr(ÚÜÜTʉÅb²>%cœL•ÓjÏäš®¶ž¬NI&“Ìés¼^o­V›™™éõzƒÁÀívËF Ãììl­Vs:çR°Ûí$¨FºHà)—Ëh²çr¹pì”L&wvvF£0qdo‹ÅÐïüÒ¥Kf³ùÚµkpFP_މ6„B!ŸÏ×l6gffZ­–Ãá ï‚wǃ˜¯Éd"¥á×B“›Á`€Ý›Õj ƒ8‘ÂÈ].—,gR©”z$Ç+%’‚Eý~ŸnáLâQ‹…çyzcÎÄaìv;©Ë2Y­Öd2©Ýn6›cÏxƪ—ËÅœÓ8Ήê6©S,“ͤˆD"ˆ¼ËÝH$R­VérŽ×jµJ~2 ˆ¨Hù€âlôTŸžçgffÈag$Á ÒÚ¤&«ÕʼÏóËËËÇÇÇív’La²Çãi4êÅgIY#‹Å"­ ô7³6ÏH´$+U”Z‘ÍÍÍf³i2™0 2M“viÁÑí¶Ï‘ªÕj¡P˜ny †T*5¶tj«Õ* „{ŒI«]ƒØ3§¯|å+Ì7€‰S9ûA"@ŒT= Ž`Q)¹'¢(Þ¹sÇb±LŠà&Jãñ8í›L&- )Ëf³Ùà‡ÂBìïïã0çI'šÍæ`0Èó|$× $]>Ÿ¯×ë‚ ìííõz½@ @¸‡2‡‡‡àÃp8¤a¤N§Ób±Ÿk4½^ïéé)9Âq»Ý&“‰p†#ß½{Wýtº×ëÉ¿Ñ,¢ñ‰´onµZÕ½'Œü,sÔn·Ç6èd@¸Ó­4©h±Ä OÚ?×l6Ó^áþþ¾Ýn—îB” í¸tóæM¨lY¤­ßï—ëJѾڹ×ï÷i˜Q.—à ÁØ¥g±X¤6”‚dÔ.­Uêõ:“a¯¾ –WŒmºµS°H‰†ÃáÕ«Wgff¤±Í‰vöÈU&3X¯×µç²k‡0;N-{P%Œ0š¿H?W§ãV“®&ù€štn+–&¯g6›':<°Z­f³™A˜2à;¯×KËD«ÕÒ‚ÎÓBx#AßËå2í¸‘ºv»Ýápà„9öz=xñ°@V«@(ønµZ-›Íât f4Ýn·Çã)•JF#‹ñ<¿··§Qq‹E«ÕŠ…€OZ­V¨*¯×[©TtŸ»_Kú²g¡J¥B¼oZ IÑ@ 8>>‹A1 G‘*ŸÏ7Qæ4ÊY1:”Vyær9â½J¹ªeU3?9K9IÆçóÁEóx<*ÉñSpéÞ½{¢(JñÚ€Ÿ]]hWn½^owwWºŸ˜è¥, pÑh…F' kùÏóZ<Tª´Z­©TJËÞÀb±¨t"…šRZMD\ǧb±ˆ:çJ¥¸EQ$;z½®’VO´á›oz–ÂÕc}HÂqiZ9:íííµZ-´¿D-vì÷«Õ*ÂeÑhÔd2¥Óéd2IZÍÏÏ[,R:6Þçó­­­¹Ýîáplj„öÛd21Å©h^ ‚‡±“£Yd6›Ñ¶R©ø|>4Âàyþ|Ë<ÓëŸ<†§ñn‰DåšÆzyJ ÓDgd™ÍfõÚz¢("š¤]ð:Τ¥:ˆ¨’bk&µOÌ'GGG0Z°îdØtrx Ø©ô5G£QµZ%[7•"–¸¤EÙl•ZjÌî!Næ©|;c/s¥U£…”ª†V«Uíe™:Ž4 =ÑK‘‰{­V«ö­“ÇzœZ‚áèÐ&Š"}jÇ• ›ì‡ìj‚þ”] FuÏ¿Nßït:̈™P¸,Åásãð‰‹…¬7œ!ÑoÔjµö÷÷ÅbØ¥á†n·{}}Ýçóa h®Eó! F£Q³Ù¼··‡.,‹% Åf³ÙšÍ¦ßïÇbÇÓÕëõ,K³ÙT±å£Ñˆ¹J:ôp÷k#‚{4‹P|Öét†Ãa0X¢b±Èó¼–â¹ÚIÒ|V¡R©“§áp¨½q VÝX 0gR1“1ÐÜSÏæy>N_¼xQ QX¯×µœ1à÷.Ìáp˜L&X¬^¯Ç ESe]__¿~ýºßï÷z½P—¹\˜§@ àñxÚí¶ÇãAÒ`RûûûêëYÅ*‡ÃF£áv»3™L¿ßG% `ŠQî¬×ëy<t™ëv»ËËËØGz -..2=Z´{g½^IRu†h¼ÕXÀ?d†üüwvvïˆZMJ·²Ûíét:8Žr¹Œ/[,–T*5u §M๬Û'½¤JUw"I`“Ák úÁ´Z­ÄšÍæt: Ÿ¬^¯—ËåG©ÖØÀ _{ŽÄ³tÅ$c*"BápØb±VddTtSîlHÛ©}£Z­Öl6¡xéUO‹ÊÜÜœRQ š í++{>Ÿï“Ÿü¤ÅûÿÍ•Œ“Á`xöÙg‰¡ÂÎ@VôÛíöÔ«byy¹V«©=à!ÒÏJ¥Rc;z‰¢ˆ´ t¼U¹?ÉËZYY9>>v¹\™L%ÒQ—Ùúív{iiéøø†yÊd2³³³Á`ÐápØív4î[]]]]]E—^äøb;U(Žq@µ²²B6 ‹‹‹h¼i4µZ­étºÝncm ]¯×ÃÆ¼Ùlöû}Ò.s4ùýþÙÙYtjÇIÑn· uưÔï÷kï ‰võù|•4ÕUØÂÂñZ\\£¤gÇ­¯¯+54#“Kß| ×L8–îΑxÍó|µZ5™LGGGФØo=V=XçææÒé´R¥Jý~¿Ýn«p#‘H0m3‰•¢•?¸xº‹ y½Þ‰Ò†dyy…KÈëLôî²»•~Ê‹‹‹ŒýP¹-£ˆxž_ZZ‚Õ®L·n©2|8Æ k Zˆ±DT˜5¨ÄfåJ Ø¥K—¼±…ñƉû§E6UJC*]Ò …é ^Q®[º×>6ø9 ½hq9ñ,â1ÂÍÍÍR©Ä´'___Gâ#š¾ãœ©^¯‹¢øôÓOó<ÿþûï#Ñ‹Ón·§R©X,æt:N§(Š&“)ÎÎÎúý~¸“6›-ŸÏ¿÷Þ{H|"ó£?ú£W®\¡CÀ‘H$ŸÏ·Ûm³ÙŒíw¿`Z±XÄÝðîÁ`0#¾‡’Ã-A°u#ª–f¬Á`€Z¡UËåòù|ûûû4‹¤a£ÑˆÕ>`6†’e …Bn·»Ñh”Ëe¥iB0‹HÏÈÑa$J6nŒíRQ®_¿^­VIÑ,Aæææ‡TÝ@2bŒš‡cÑèK9€ºæ¥+4âøšyGé:â8.“ÉhÜ(¨¼”(Šè%A\iÈ]6|"U.—ëÓŸþô¥K—°fÜÖÒY˜¤È3ät:‰ `¦ e÷Î70 ‰’$Ðam•7’¯'žx‚46¤¹G™¬&Fj¤¥¥¥F£ÁüŠ^ì´Âû  *N§³Ùlª4k1 Í9 Nßð…^ø'mÚ5†õ´J¦#”d³ÙIR,üÁ‰îf³Ù0ý~¿~~¾×ëÑœšúœE£Q£ÑÝQ*•ÖÖÖîÝ»GÐÝnw8öz½GGGåra=ìxl6Bd©T Y©TÊëõÂÙFáp=†Ñ5Ò`0à´ùí·ßît:ÄB[,˜¨R©D4T¢ÜýÂàžt‹ u||Üétü~?öpÜý_Ï?ÿ<*±Z­Vø\¢(îýWZ`ffÆ`0ȪW%e¤7×"{¯×;é¯&¢ápX*•šÍ&ªtéR\’žCdç‚^ÏL!`YÆ^sff¥q¸û¹UêKuql6¦ Éx£Ñhii©\.[­Vzl•J…N2Ä—M&“–M!âçFc0àü2•J5›Í³„³~H¥RN§S{s»ÝŒ—ì$­DýllyB´pvvV) ñØ&KÍ­×ë•=¤Y^^&H§XM4ÉzÈ©ƒÄÂoëµÀ󖆑›Í&DgggÉ™,Ic$¨8ÊLƒs:gãd0pÜR«ÕHðÍår ²ùPZ‡R$ øj·ÛÐËÌÄK£RˆÂ‘ÿ6 ¢; –:ª6@à*• ÎÌpؘáp‰D\.×ööv"‘¨T*@•¿Q×Åfffl6[:F>L‘ÙlFšâÊÊŠÇãAg3³Ùl4[­V*•"|ðù|¨RLöy‹% ¡z1ƒr‡=~¿¿ÙlÖj5—Ëåv»EQü±û±@ ‡±©B}v»½¶¶†Ì@ØE¥9%LÜDfê;„é£%AÐk‘$€R­ª¾ž¥’œH$‰Ä¥K—L&ÓÖÖ‡Õ³×à6Ý»wè5d‘ ‰ìµ?ôAÇRµZ%á„F£ôYø ;'ÂÑÑQ.—ƒ™$ÆÍ£M&#“ý~_j™ ]N§syy9NÏÍÍáð&Nwz:É6¿˜ˆ²Ó¤$E¥R øåó]eS/v´ë+ *ò€ã-A/ 'W2NcÊ^É&òªä³Cû399.—K6Ñãñ íÍéÔà0”_ô”4YS¥îA¹ ‚@2DÃáðÇ>ö±Ÿø‰Ÿ@"òéééÉÉI³Ù¼yó&’€wvvÜn7*8ÆZ­ÿ½j›ŸŸÏd2¡PÛ—ÑhäóùZ­p¬¹\áD“Étçγٌ¼€pN'At»Ýƒƒzx´G õää Øãñ\¼xìzæ™g677*÷z½ƒÞØíö3cF£{ÔÄ„‚|˜„ã7x ¨‹±µµ¥=» |€ÂHòÁÁÁûï¿RIùèèh,øŸáêññ1ñÈ$£i2³-ËÁÁ$Yû‰‹ (Ûb±LÚ4çy§ÓùÁ¼ýöÛ§§§ %šl6›tøP¯×wvvàGò<ŸÉdˆK§2<ôoûa‘CQ?üðCÙ‘+­2ºââ¹­BOOOK¥’Ûí†öÀöƒù¾’†—uµW¤3Ž•0Ùɦ3=ÁçŽF#ézÆ)ŽlÀÎE‘Fÿ m³TFɃd $°êÍê‰û@¶/étÚívãH€ÏóNÿjµZ(Z__÷x<€7âø= ÍÌÌ$‰T*§ÁºJ¥Òét`Š‚Á`>Ÿïõzˆ¡ÑŒ¥ë|á-ÂÝGõollÌÍÍE"‘L&³°°0Ñöm4…B!»Ý °Åb9 ”6‘ƒÁ «×H¥ Ù<òù|4^Ûb±(ACT.‘66p²²§åÌüév»RIEñÚµkH–rU .ÍpÕëõJ¶lÏ)‚]f³e‹UN&ueè,ä|>‡+·Ùlžœœ0­Ý”ˆð¡ÛíV«ÕR©T«ÕN'ÏÂðdY4iãs$?^å=¹ô RòȪaRè®”Âá°´.=©«½Ü­xÏdœ†Ã¡ìîrgg‡–~õt8* W¾˜=¯tÑ’]~„G(¦e ‘HÄjµ¶Z-¦%3&£P( ‡Ã¥¥%àP ð#§Óé÷ûQŒÜáp „ @™ ƒn·{||œÍf1r ÎHk¯×«äñ©\¢uN ¬Vëp8æcF;êD"€*"'8ˆ¢ }$+Òz*xœÒf_e ²w@ʆzÌ„~#ˆ·z¦GÁÉ‹Å"uл4ª> Òívcs IEq{{ûÝwß•vЮªd¹×l6™8˜ì›ÆãqFAû|>z‡'Š¢Ùl&0êp8Lkùn·KtЬò’m™¡aºâ Fãêիׯ_GiòšݩĢ)rÿÎ…T¼-|h4ZŒw>ŸÇ*+äãÒ‰ƒŸÍ) }ÏþÐivNDŽý~ÿÌÌ Ü^Rp°ÓéŽ:i0“GÐcE“ì0dã¤L¤Ód2-//“jÍ‘HÄ`0\¿~ýðði‚‡½Çq.\À¡T£Ñxî¹ç€JC •1»Ýn«ÕB;àz½Ž3L@b“ɤ×ëEéÏn·»´´suzz ™Ãçä¡KKKsssd½ G"‘p8\¯×³Ùl6›½wïžËå:>>ÞÚÚZ[[+—Ë*R6”÷û}æ@"N3›†H$¢Ô›`,¬4ƒ„Tzô!^K=“ÉpøTV@‰#ŠW·ÛMÛi¤›_¸pA5IÓìì,íÜ0#Ïd2(@%=PEñøø˜ˆ+†§ô²ÈÓQ‰ìá.r;™(1-`Ãá°X,’H£Jrp³Ù<‹2òx<Ãá<(޹ar1棣£z½.{bÁÇééù’JXYÇçU×Õh4"_ììfxl`øµt5d-b ê38©áœæËëõ»S.—!â‹evv–=õz½ùùyò…±‹ÅH†Øòòòáá!yYOÁívr @u(ŒìñÝÓO?ÍfQ$±V«õûý@ P©TpÌÓívM&´[«Õj·Û¢(¢,6=H/AaP¯× hNz CµZ…yÈçó‚ ±¢ßïÛív4Óët:‹%3™ôsss»»»Xù²)ÑÙð¡ÓéAß}÷ÝV«•Ífwww}>_±XD´º“Öï`>Ñ~Ô©r\±¶¶fµZeS°°=r:Œ3Aª’kÔƒJ½áÉæææ0x#Ô, ï…ÔGÂðn·‹†46› Û ›ÍF#L3™ c (Bi ¨îƒvƺò·¬¸Ò}TM&Óââ"íâ)º………r¹ìóù<ÏX'…Ñ0†¢*$R"mTêõz‘T©Ô<—^Ñê#¡;‚g¢.`ê“û8“Éd򯯡Ûí²>=ïDT¦~Ý2qºhà(Z¾ À;£ H)3˜Éd€{±Z­èÆ0A¶^§ÓÌÛï÷Çb±£££jµ |8¢¹a8Fª;0´gâÓè6$ãÂS€¥EQœE‘†:!%A£¿033ƒžâ¸Þº#—Ëá±ð€ˆÆ*ây>•J‹Eds!Gn0 @ÜÉÉ ,S>ŸÏçó¨Î€þë¬çr¹h4 é¯xYf‘£ÖªÍfÃΆ  à\.ŽOêõz±XÌårÁ`Ðívïîî …P($B¡P ¦)C÷]¸p¡V«mnn ‚@/ÙPêY,“Ñh¼xñ"Z'+¹c½^ézŒçNÔÊš9ƒáîÝq74av4àè$YƒA‹Å‚LQò}únLdCEúr OvÒUbwÌÝèé —°ïTŸ£……º˜×ë …Bô’1«««Ùl–~Öââ"]¼Gvš¸û¿O&+šÐÌÌÌ rNfÊáp,\-vFË ½^¯F¤ùù’(Ѝž÷_.ôSùb%À•Þú_¯¿ýöÛä­ßïÆt:}ùòeƒÁP.—ßzë-õÄ_ +&²áصF”úÖXÁñPHª´ö ¦s¸9Žƒc‹üÀT*U­V«Õ*Ïóp*·¶¶p¶vxxø‘|ÄårY,–^¯çõz].@Ôår1‡b±xåÊTÞƒA…Ï‹ÜñZ­v÷îÝÁ`›7vØv»=#GKÅùùùããã¹¹9QB¡é1AnÈó¼ö…äuz OÊd2GGGL|2‹¡4âØŸC\‘/K£Î/\¸@’¦®jƒ,÷ *•˜Hyj§ Nzc …8Ž[]]ÝÛÛ›ŸŸ¿~ýºôçO=õÔ{ï½§‘4WÍf3]’£"4ÊÿC&”6gj4«(7¸ŒJgŠ©JpNðD7< ÍÌÌ@û)E8´¿ð ´õÂyÊ7ÔûùÏ>}éãß½‘«• {þ½QÅÛJ§Ó¨“ýÔSOÅb1¿ß-˜z.]tU#¡á:0´eRÉìb.É$È2?4›Í(êL¨ ,kT(`ƒ3™ ,“ÙlN$¨æprr‚¬V‹ÅÒétŽŽŽð_›ÍÖh4¼^o$yæ™gоöG~äG\.—Ýn_XX0·o߯~šÔï÷;NiðÝjµ’$”±‡Ã©T*‰Ü¹s'߸qckk+•JÑMrÁ•°,%“I&‰'MÓšŽ3’'¥¦¸”ÍfacÀ%äîkŒ:&“Ér¹L[&ŽãË„iR:ï!c`väþÚl6²dNOO'-~*-—©žñHóã¸H$ÂÈ•Óé\ZZB š“ÍÎÎÞ¼y“y;›Íd1!X\ØÓ“Õd2™A@W'2ƒLÑUf À¥’ÿ&‰×åÛâ‡Åb– | ýW¥AYCb4Iþ#ä hóŸJ¥¦®éÇó<½d4æÇ½÷Þ{Ä29NYi{7—˵¹¹Çé1 ‡Ã±–Ifî~í×ã/ÿæûÒ°=£ÑèÒÒR8æyy¤†J\bÒ2š0H¨I®Òr‘\ÄyÀ§§§Ìfí£ˆob2™b±Pv»¤ ’«HºCR?B¨'''ˆN@.‹Å¢Çã ƒý~¿R©”Ëå@ €›õћ٠ÏIDAT ‘T•Å,ŽF£›7o:N Ž–——oݺ533ƒ (ÄápˆŠÅv»/…ÕóI£Ó& ¸8ºD” h\„òÀ&oæ_v'ÐîÉÉ Ã=ôíU:À; ¡.=M¥J0œlZÀpä0Ñ“ú}Úŕ †±ýa9Žk6›["‘æ#h'é)7jûªl•h>BM(kb6›‚ „B¡ÙÙÙëׯF¦4ú°üL8O­V ‡µd5¡Ü0Š ìd’œÉ¡¶$m¼q@þ{F”ëXÓŽ–»Sß!’ª¦¨f©]Èá­’ *‚(à2dÅ­IY€IÉëõÂc–Õ¢XìcÏ_æççA/•JF#¼2“¥ÞBÍ*0È ?.Aïᬋ ë™Õã N§óôô4›Íâä P(ܾ}›h7«ÕÊóüƒ æª pÉ%žç½^ïh4"“|èe8MäÒp8ÜÝÝ4]šHƒB«¥RI„z½n6›qsøMÝn·P( ,Óh4*•Š ÇÇÇXóX½èœ‹ýe¹\ÞÞÞF&ôÁÁ9ÉCMLºv-æfooH òÚ‘*=N[§Ó9é£Ëv»MÐ]n·›”?‘.TÙ:ß6›­Óé8NžçéÃŽãÆöâDF cðTÆ@ä›K2MµZ Å/˜“KTczƒÁy5¥gs¹\Ú•Ô¹GfÔ›M+ñÁív×ëõP(FWVVj~÷Ýw!]LßEŽã˜žô}±š¸ûènݺ…ã:Æ‚0aË‘9ióò³)±35‘•‹ð¯"a8ZÛ;Õ„"Ñâ}­Vk¯×£§€Ñ¢XìcÝM%´(ü`œw£DŸÏo]FG£± étz{{[6ÏM2Ng<¿zõªÔß2ªK9šIïíí}øá‡×®]#5ˆ 1bÑhT#zÑív«$(3ÈJi,˜çyÄPJngg‡™iìá#à»áßÈžÔE-•J­V í6€ I&“‚ ÌÏÏG",<ôÅ@ù"ìZ ^.—¸´Z­wïÞEúC¹\F6y&“A)JèבöŒ©×먢Öëõ¤˜PBHÇït:‘I(; ^¯—øòR-oµZív»öi±Jw4'Àr¥1Ð ~4¡ØR4%c¨.Eô ‡C&8ÅÆqÒšÈi<ËCa{àbú|>”‹´X,‡‡‡˜ í½"¥D$©I¥Ïç#À nòÆÙ$²ËåRï´„Úýý}¥íòt}­Ô{iå@sˆ=f±µÖ*"¨f³I¼C Á‰ö ”Êršjggµ§eÞE}”ÝnywîÜÉf³wîÜ¡÷qív›¶ êÖ˜ŽAËæIÓWUá‘V@ J÷•¢(ÂC!õÞñ+dÓ"é¨ÝnKŸý~ÿðð›’ããcTh½wïò5òù¼ÉdjµZ‡‡‡Èá&Ý|pýúu`owvvè1t»]§Y- 6› º-¯ŠÅ"ÍH¿Á`8==Å煈ʥ‰¶]²§±\- ‡‡‡F£‘àÀÔ4©ù#9iÇU*¿ßÏœÿ¡À+3M‚ x½^r|ŠzÚ„4™õ‡"瘖z'zÙéÌj­V‹F£È›§³ç'b],£TÄú¤Æ‰^€$€¯ÔZ]ážcÏLÆ¿QBy3âŠYÞoì\(eÛ«*¹0zRªÇÞ§Õji×ÉS<en˜Qì‘Ì,=†ÝÝ]•1äóùápx÷îÝR©är¹ÌzÊ¿þë¿þ»¿û»Œ7Š2w²Gy‹h';Y,ô^Á`0ÐABÀëõ:¹„ø;$Õãñ˜ÍfÒ˜Eí¤õ(¢Ì$Éó¼RQNAPCV¶ãÍMbÒ¢œN§öº\.Ùôh§ÓÉôcK1Aˆ­u¹\êåÿùѹϠ:™ÍfÇc³ÙP&ÿ•W^™Âœ?äizp,’•ɱ—¡Xp¿ß¬ôäDfþ,«`øâââ·¯*§ äÎ餓N:é¤ÓC%Ê8Ÿþy!:餓N:=Vdf²¡J¥ÒÃIyÒI'tÒI'BLO6¬÷ÙÏ~"R?¦žîêØ£o•/<ˆñ<¸wy ¯>ü>¸‡>ükÉÚøç!*?t‹ô‘ ø‡Ht•fÐòÛW_}•Ÿ¹ðÿÓOþäOvÇÝ ½˜OTþÕxéìw“ŽPû¥ó}Ðo:cÏ‹ çÅŠó½Ûƒ˜Áóåù¤w›šç\VÏ}EŸ/+ÜÝÎWºOýðø‹ßWÿ÷ßd|æ™gôí¤N:餓N¿ð…/è\ÐI'tÒéñ2Nÿù÷~Oç‚N:餓N—qúWŸþ´ÎtÒI'/㤳@'tÒI'Ý8餓N:餓nœtÒI'tÒ“N:餓N:éÆI'tÒI'Ý8餓N:餓nœtÒI'tÒ“N:餓N:=jãôÊ+¯è\ÐI'tÒéñ2Nÿé?þG :餓N:=^ÆéßüÛ«sA'tÒI§ÇË85›M :餓N:=VdÖò%QU>—mÅ)´¥’ýDéÒùÞíÑþñÐÞåŒÒþ“‡?ÅèEÎ-ç+Æ_2'âÌŤ<ÊçŸÍ‹< 5ÈqÜüü¼šqº|ùr&“ѶN:it×”\7þÐ÷¿ÿýùùùh4ú𽿿ŸÏçÏÞ ¶×ëýÕ_ýÕ'>ñ‰‰~ÕjµÞzë­Ÿú©ŸRÿÚûï¿ïõz£ÂÐo¼ñ‰O|Âd2I/}ë[ßúÔ§>e4þcÒøOÿôOsB\Ñ8ýÒ/ý񮮠.”:餓N¯¼òÊg>ó™ÿñøþó?ÿóoûÛø‡xÆû”Ëå_|ñk_ûÚD¿:88ø™Ÿù™±¿úìg?»¾¾þ™Ï|Få;‹‹‹ò'b·Û¥—æææ¾úÕ¯òyý/ß&›Lf~nõGéåF«cçÚ—RápXJtÒI'»Ý¾²²âñxþ£yžÇãê›-d0|>ßÅ‹'ú•Ñh c7*V«uaa! ©|Çív?ùä“d{Ä\zê©§èXß•íƒýb½ÛnV ¼`{ñ_ÿ»ËýT¾X p¥Ï|òy}礓N:é¤Óç×ÿòíïÞÈÕÊ…½ÿ^¯¡“N:é¤ÓcGºqÒI'tÒéñ3NW®\ѹ “N:é¤ÓcEfAt.褓N:=ZÚÛÛ‹D"V«•ã¸v»Íf9Ž‹D"$Ý`kkk08޳gIh§r¹<ÉDQ¼~ý:Çq'™LâÃÝÝÝF£a4×ÖÖðÉÉÉI>Ÿç8n~~ÞápLiœt™ÐI'tz´tãÆW_}õÿøŸ|òÉN§óo|ãë_ÿ:Çq/¼ðÂ/þâ/Æb±ï}ï{_üâÛív"‘øßøÍÍÍ=¤jµúÿðñ‰D>÷¹Ïáÿù›¿ùâ¿ÈqÜòòò¯þê¯.//_»víþàööö,ËïüÎï<ÿüóù|þOÿôOÿîïþŽã¸—^z饗^’Í#Kú™“N:é¤Ó£¤+W®|ík_Ëårøo±Xü£?ú£7ß|óÍ7ßìt:o¾ù&Çq¿üË¿üÚk¯½ù替ð ¿ð…/|á!ŒªT*}ýë_ÿÁ~@øòË/c`/¾øâ—¿üeŽã~ÿ÷ÿ¥—^zóÍ7ÿìÏþìÕW_å8îoÿöoËå2¾öÕ¯~•¼—nœtÒI'~˜è[ßúÖüüü¤P¤Métúõ×_WØ>PÒ“N:é¤Ó#£ï~÷»ƒá¹çžÓY¡'tÒI§Ç‚Þyç7Þxãgög×××un0¤'D褓N:=Êçó¯¿þú[o½ÅqÜÖÖÖ+¯¼‚<t㤓N:éôÈè£ý(É8xõÕWë·~Ëãñè=öt㤓N:éô(Éf³¥R)üF‰„ÉdJ&“_úÒ—âñ8Çq¿ýÛ¿ýòË/swåÊ•ÍÍÍÓÓÓgžyæ›ßüæÃa·Û%ÿ½}û6öñü+_ù Çq¯½öÚÏýÜϽüòËv»ýæÍ›ǽôÒK•J_ûÆ7¾1u&û»¿ò¹ÿ¢~ÕI'tÒéÑ’^øU'tÒI§Çšt㤓N:é¤Óãgœ€òÕI'tÒI§ÇÈ8}éK_Ò¹ “N:é¤ÓcEæ/ÿ×ÿúgß¾ÂqœÉÌ×úÎÿù½ì_}XÔù¢“N:é¤ÓC¦£JËh2ý£qúÿò_Â8ŒÆ‘ÅyP¹jUç‘N:餓N™ F£Áð™ÿˆsêuÛ¥£=5:餓N:=Z†Çý?!]\1~ØúIEND®B`‚saods9/ds9/doc/user/gui/panner.png000644 000765 000000 00000005006 11332353405 017363 0ustar00joyewheel000000 000000 ‰PNG  IHDR}b²"bKGDÿÿÿ ½§“ pHYs  šœtIMEÚ&àG? “IDATxÚí]?o;w¢¦å#PÒ™’nûÐ¥ ÅWDŠEB÷PR!Q$HP!$"(/â#\‰ø| ¤ò+¬·qÖÿfÆ3¶÷ŽÕ ¹]ïx<ž??Ç;Æõ÷ªõÌ÷½½=ò³Zëa´ÖÍ{1¡áââÂÓ†ï ÙÑ|$,ßo5éÉz½.yEö‰üW·‰„¼Çâ"´%'•‹Zf=C#«>ë;Ñ3âú}wwwì*ÜNB¸‘A —±z¬d¼+ñ½‚|íïïÏhÒ´÷gx‡dww—ÎaêéQ Ý ›L6³Zë(ßK¢•~ÌM³waWÓ4Ñ´j¬ÍÉ`û||Ðÿ2/·•M¿•àL™2¾Kƒ¶öÀ'`22ah¾‹zµ,ÏVs(ýȬ µ=ša–ñêgR¾ßê#$óË>øìÙ³yˆ=Ù’¾ããcrËöûáá!*‚­<3Úè àUò –¸OŽÈ.ô»úöu;šÒ6É«(•ôŒO{îƒu`ØûßUŠdj}µ\{T˜7Æ(—ð%5§øÎ²J‡ÅI‚(¨´Ö…|o¸ŒE”÷’!‰)Óôß}‹jùî²{C佚p•Ov^¿~ oÜžßëà‘-øn'yÓ1Êý2þ—ù# ÊÖ›vvýðaú†Øçß««±…L## öK„$ÛH°©ý'O2ô\ù¢¼—¨aNOOÝgƒ®ÑÇ3$¥JE3.ª‘F mrAÇÿÔô &÷¤ù>šâ‹‹ :YžžÿT™~Ï,q`l9éN`n 4å!EVÞ›ÚÕ²˜gŠ˜ß9}í\7i¹¶«ü3=&Ђö'kj´Ö÷ïß/§ìµúg¥”R;׬÷ÈñþÑÖu‘ZcFR>JyóæM |Ÿ~7eÊÓM¼Sϰ'›#ÐW£”RÏŸ?—IàËå²ý!ÅÕ Y5[u2†s¼oÜoŒDè[Õ®WJK85rDPçµõgB«<†Q«ñœ˜-=88ðQI©ì@7ðHDA±Äs®]Aëz|| ÇQ,…8 _&s”_Ï$|ÊXTEÛü8ÖÚ€ðIë™àð”ò=Ø(ª“Y[j¯oß¾ÛwqC`Ì‘0ÑduŠíï ¾ã&p¼>|ø˜%ã¿#~~žf1ëÈÑÀŒ‰M z†[y$ÛOû«Í5«æÏtP£ÎŽÓjµ z÷±?Î0õ:É誋aç„kr'¾¦ûˆ¥Ed_¦´,½#'Ð!õjɸ‰g_¶nUÂçsQÃ1,X¯×V›k­?}ú4Æ«¨Ü)‰â%ÆÃ£‰Ø‚€ô.È$i‡a¦òNÔ3Bæ1ùÞ$ü-ˆåu Í ê<â°(âÒ5%|N ÃprrâšV#´Ø„—w~ü=8‘Bá ¯ÅbñôéS÷)ƒL .¡XzDÑ3#0]ÂGà»ÎÎÎlö¬ÖÚ&}h­—Ëåè_Ú5ÄiÑ¥þLì5ißæëׯxU)õåË¥ÔáááÝ»wÿþýøñãGýøñCÝ\°’šuOá Å,^Žïo%¤¼s˼ܻwïÏŸ?<¸sçŽRêóçÏ„©6¡Ö¶ìN¢_ëõ:±7 \¸˜/_&„·l]r_†áÅ‹Ëår¢£ì >yÆ-icb´›eû7ìjú:::B­|ú nxcM,qŒ‚ždãÄ:€Ù¿éS…Þw µ~ûö-Įޒ˜Õ3 »¢ŸèŒoG¢îÊî›™Œ½¬Œb‡sÄ)_½z¥xë¼ È»ß!ˆÕéé)ªmû GbÓ&÷ÛlËh#,^5ù~ƒ\˜c›wl¶Ñ>ÃE{¢X±0g¡]M,øÔÐ31ýN†Çt¨9ŽÍý™B࢜Ýtï0~3­›åã-¨g°þÊÍ/©‰\G¼˜å’Ï5ý'ò˜1‰ðUsÿ*» ô[ÿ³`™!áÂÔÞÿQ[Øüwx^Û¨ƒ+‘µå\¹·ålpºÉèq`8Lê^ïß¿'ó´~©Ÿ€,|MTƒII=ƒ­Í!1*åY› LëáÉɉßcù¸Z­ÇþR×mãl­7&F7Ä”Éjoe¢u==î äM·ûRw ‹x1×íL(¾:¼cZÔvÑìÖ¬ƒPIÏ4)f.¯–eQPoiþGË)R¾KËhÿ›=уâN\‰Ž¤c”lû ω£,€=kHäE‹Î˜Gº²ÿ>©ã¸··7ݶ &h±X\^^²ìák0ÉÚî³±ùˆS‚¶á#s•žÏ‡’¾NÀ^‰:Ù„Ñ7øžÀÛ€M,rm2ÚA¼T‘ˆ¯‡MØD g}o3&öw\¾yÓ5™PÍV“Ü쳨J¤Yê«RÁ~T£³ü0uY=î 6æÆ^ÎoÚ¶‹s¿£µîGØçå\Z¾ßVJýüù“öâwïÞ©¿òº¼¼TJý4Æ`¿JŒ×·IEND®B`‚saods9/ds9/doc/user/gui/prefs.png000644 000765 000000 00000027537 11332353405 017234 0ustar00joyewheel000000 000000 ‰PNG  IHDR)Á#¼;bKGDÿÿÿ ½§“ pHYs  šœtIMEÚ7G­ S IDATxÚíÝ{ÕaçñsóÐ<ûJ=AH6oA lüŠ›G<©]±Ù-SÅÖ%»ÈºH‘­Ä[v ^c{]©Ô.c»²Þ<]6)b²ÁåG"{mÖ ‚ kÀzLkFÍh4s÷ íV÷éÓ§ßûý”ËŒîôãôéîóëÓÝsO¥Ýn !®¹ñ@Âv<|¿¢Þ ž›n½$íšoÙñðý•«oøØM·ÞþúÑij´Wöï=°k{½óù¹SÔ dÏÌñcó'ܯê]ží¼’ì9=?gÿôµÝÿtîhettôÌ™3/M÷.ßp‰t¡³S‡¦_Ø?µpÞâP€tÌÏÍΟœÞ|é¥ú³ìÚ½[Ñ×?Õ¼ò않ýÓ± ®™{íéæM[jµÚw¿÷ûŽ0V9æ\˜?uÞÀÉW¦Äê ¯qÌH0{fg6oÞh–Í›7ïÚ½»oÙ`Vóʳ§rvxôôõÏüõýß|ß{Þ}Éžôƒ/ŽÖ{ûíÓTþlq¨çäÀ†åC£ šJ¥R ~Å_±I^¯ì©:~1ØXýêÏlß¾cllå×?=ùøêË~Uˆ7ç?~à_.]3òÄÞcç\úŽ*zÅèÐ'?úÁ·Ÿ3V«V¿úÍmßõs>]œ=ÕPP}ëÌ«ÕïéÛtÙ ÿòãéé}Õju´6xß3«Î§bæð·5Äc?Ý·áª_ó-ÇWÿæÆÈ›wúæN/ì}ùðß<¼ãÀ¡cŠ~Ó¯¼ã «Ÿ{aÿ£ÛŸyòéççŲþÁŽ?]>ÂÕškv@ó~ù“[¼&ÿôŸ|GgÞ³&“~¨è÷x=°Y{Ùû_ÞþÝ~1/„XZ:>502ÐX=:p÷Ãë.¿¡R­inòÞý¯3§/ظþ²·¯ûÏÿþúßýã¿YgÍ[«U—¼fk !zäñ>ñ\ÿÐhß²>!*B™zê@‘£'ä½/ä¾Ù Ï>~áïñ÷ËŸÜò™ÿñÝÎÏÿõ?þk¯y½ú=ò­ÕûV_~ÝáßSÕjåè¾§ªc«O œwMï²!ýmþßÛþñwìZ=¶â¾?ú½‘¡±ÅC'+÷ý—ÛªÕÊ_mÛþ‘÷n¢ý{®nŒ|ìÆ«/Ù¸º§^{áåÃýÐöƒo˜wýÖ¯]°a•â>qó|âæßÿʃíÅö-ãïºdãûdBˆÖÝ·ê,Кòþ‡Ÿ¼î]-xjÏËú­ŸœY\B¬4†~óú«6¿mM_ïóÄ×ü/¾rdUcؽœJ¥ò›×_õÞ_Ú4<Ðj~á•Ãæ×þöÇÇOÌqbH8{â¼oöï>ñi÷Ä÷g_¶[bÒyÿðëßûÒïü«NäX?[ tÌë•=ž›10²|pã5ó¶ÏÎ/¶kýÕÓ‡«kÎY½A{sßüï±âŠw\ÞùyvvnîTµó«^wå“»_œ;ujæÐK_ùOŸZ>2ðè“»Ž›ÚrÝ{?uë‡?õ•ŸØ½ßê[>úÔs“û_yýÐþɯ~îw—:&›_¬h.Кòú«ÏÿÉÓÏøÝ—½{óÆ;wíØ{´¿¯ço»qÅèàÁCGŸÞ5yîÚ1qêX­}æ3·Ýè^Î…›Ö}ä½—îõðƒ=:8ÐwÅ¥çŸ<öZ»6\­÷pnH¸ßS 5WE:ïÅï|¿W\©çýìÿü‡/ÞþëBGðØì]»¥ÙcKm1ßî}ÛØPoooÏbàÍþôï|Ìúy÷Þý{^|yùÚþÉ_}{Û·÷,üðµW,øùÁ×'¾ñ·½Ë†6¬_{Õæ·_¾aôûÿ¼ëòMccËGøÏ;Ù±ûº÷]µ|tÐ=ÙŽ½Sš ´¦œh}kûO_¨´Û7]÷îs×4yjò=x׊ÑAsúÄíŸýï ‹íÞþÁöâ™ë?x­t9íZU1sâä+o{Ýœ½ÿ¡ÇæOÍ6Võ÷Ö{+¼t Áð©Šj%Ä\•JU>¯×ҬϽçýìŸmûâ'ÆÏ ž«? Y¯4{ 3ýÚÞ3Ç^\X¶j¤wöôéÓóóóâô‘™#ë‡ÇÎÕßä½û_=rÌœ›?½{ïþ¿ÿÑã=½ý=}Ë:¿zf÷¾ák— ëÏY/„ØxÎêo}ýóÖŒkV3Oí­Õ{;ÿ\68º~ÝZ¯ÉôØùùç®X³TëBôÖë§çg—,B¼tðÐü™±s.¨T+íÅ¥5c+¤Ëù»=ó¾_ÚøÎK6^váF!ÄǦÿè¾m‡¦N ÙÍMˆµßçó¯¥Ùî›yÎû…Ä~§î®?Hº^~GèÍÍLÍì{|v±þ¶«®?5}ôØOP‹BsÏ£}Ã[ú†5oºuž÷Të=•JµwxÅÀp£R}3O/,ô===3§Î!¼úú×þ×·­™™3‹g¬‰…ÇOžöšLŸë}}ÕÚ›•Ðn·MÏ !6®_=44R©V{úûkÕêñSò5ÎÍ-ü·oþháøëVŽ~tüƒï»jó».Zû½Ç^¬ÖªœòxÏ­*¿çæµ´³î¹Éæ½ç·o´zš7öw=ñÈæk?dï.¹çíôW÷—?øüo]/_¯cÁñ{^:ø†ã³¯ï=¯ÿø³fÖ]öAûÊÚKKgn¿êâ ‹‹‹Ç§§÷\µQ½ñûwïXZZ4ÆÖ ¯X[?û°—ž{BˆöعŽ•JµÝ^2ß8xêäÌÂÜìÒÒR­V¯÷õ®\·lpøµwž?5ºrÝèʵÕZÍk²ýÏ?¥¹@û”G^}éÄÔáeÃÆò5çõôöO>8wbzaîäÒR»^ï1VŸ30Ô˜>öš{9•Jûè¡‹ §ÛKKÕj­o`hdåºÞ¾eõ²@RŽ9´yóY_ñüÜcÿ×kâËÞsÝ›9´ëùÑ•k’˜×šLúag^ë·SoüÅø=Ž(;=sô¼““Ž­¾ôWDõ¬¾R¥V[»lö´yñù›fffÚ/xñäñ¾!CQM£«Îéí_V©TÝ™i¬^ß?0bÅx¥R[ß»ìx»"ª•Z¥Ri‹v­ÖS©ÕFÆÖU«õj­&*¢RõœLö)‡«úFê½}¢R©T«ÆÊu§– ‰öR¥ÖSéLQ“/§ÖÓÓ[_­Ö+µjçÉV­ÞSïí‚{n’ëö8{—¿÷z¹¤ï Ä>¯ãCõß–žõ‹Gì™êßpu½§Ï½ÜþÁ‘çŽÎ<òÜÜÜÜÂÂé™…Ùþá«…n¬Zïõ«å®¿ªÕ{†Œ•î)G–¯Ö™Lö)†F…íQkõž¡ÑîY¤Ëé9»`Ÿ{nîÈÊl^ì9«s³òíW«5°|Ýi±®*DŸ«8 EÃÆîÝ?sÜþRÛµëùa£R©f5¯V¿[ápvíz^–eC£¹²šWž=ü-$)~†ú†Š5¯g¿gvzŠ= HÂÀHÃÕïbvzê³·\Kí’ðÅû·â‡o¤Mò-Û¶m£^q÷Ï!D³Ù¤²Ñ†199éø{n€´ÕC$X¶%®T*SSS”²Q6ÊÖUeëêì1 Ã4ÍlKÜn·¥»‡²Q6ÊFÙÊZ¶ò pÏ-;Fašf»Ýn4”²Q6ÊÖ eëêìÉÉŽ±vϽ÷ÞkíÊFÙ(e+kÙʪ㲆ÕU”þl¯M{§Òú<öž¦½±LhK+]W¢ˆk-)ÒëXÊO EU¬=Í‚y­Ñ÷„M³<ªbljU½¢\íÙ.Êžp «WbåGO÷E›5@:WB)W ºH©U²bE´úªñî÷å‰×q ÿaÄ“Ç*Rç‡F£aÿÄþOÇuc2Ň)´ÒB&TzST‹fM&TKŠBzý3Û^eN¹YwÔ hˆžôÿ³Ý³ô{ú)ܨ±_@é\(©ûg±Ÿ¨ŠðÖé8¦SoáÖ{‡bïXi긕”Ú•²ôwQöBÒšÇRÉéìMõ}KölzÙã8Õ3¹#a-Ê^éýYÙóJ?Œ·;ïÕ™Hºw¯Yo!Ö{¥ùîM¯¹{uéÜ2B”³ ?•¬s:°ÇÓÎGƒ•íÓ{ߣVúLÕëP“Þ\NçZ&ý‡Ï‰nHB•¦¹7#ÎRÖ¶>èõ"Ç~O Ó>…ºzò½ýÉ)šÂ³ß(õ–íÏI¸È]öx½™æó¯"¹ß’p/{nêBê|žá…³ïO´Àнé5㇬?áý(ý®ï ‹\~•3{¤o=ªßDŸš¨KâþAs‹’8†| ©®ÞÔêÍ·B¼j)ƫߓÔß݉îPßZÍÕs‚œFqÌèÿ*«ZÒ¥l”-‡e‹%~ªVœ“æ©3¶e wèä9x¬ø¹çž{§û”²ugÙÊ:®] [šè?§ùmoyø>+õ·aº¿9…Ò^tÑE{öìq|"„p|˜«ŠÊ¡@#ÈuyÕú¢“l‡Ìy2,^²Ù“«¦‚ÊgQ}K•‡bgé!dÿ§z(¹L¹D‡ ÔÊ«ÖSTc: «zÈÇôëPQu^˜Î ëu;  3Öb®û=êcZg/Çi^òxuíS¾©¥îG{}ÏîZ·ãÜ÷åÒ¿3£8„4¬n%er¼yu/܃)¨«1‰6ÝkÏ*†|ÌêœUWc eSוWë¡.^:uX½¼Ju?#“ûŠúÍðrXgijü°÷l:ý!+„’$Å7KjVTú£SK¯«ø†¤ %Ýqù#Ñ/ VF¥Óz¤|Öã­ý‡„:cT—ì().+TÜq’‡?¡¡®ÝËy~.ë[6ÅNÕÕC5Þƒ&è•HÎ/UrU¼<וÕûQ¤{™àIaO¥¶7‹Õvå°´Qû=޾Ž{H.õ\ÒÁ0Ô#€¥sáá°lŽç=ê I­ñêôäá}ëp‡Pú{9«1õ1a&óÝ…qÿSÚø¤P0ߊʪuê*Ûý[öˆ #‰éL ÒmI=*ZÞõª¬ iëgwêt>I:Ô£ÒiŽh—r£ ý$ý?êcL¿J3mO¿ɪêR8Q¿i W¼tŽÃº”T~zÛdt‹Ü>ÛcüÙ(»ÊÕ7|ì¦[oùã³ÓSŸ½åZ!Ķmۚͦ}¢\0†ˆòÿ=ÖBˆxà®»îbg…Ì×fç‹÷?>0Ò8|pß]ÛýŸ÷äyœ1”ÕÍ7ßÌQ”Î0?U‚£Îê?Ь<€Øãçž{îQÄïÒFöÈ@Ùþ^ƒmÛ¶Qk»ñññd³GáøëŸ¢ÈÏ_)™¦™ó¦¶ÉJ Ä‹iÜsKÛÄÄ›  ËuÝw‰f{Þjµº­‹ ³Éº ýÙ { {dAÄùž›ãkãtÆj 1–xg–ÎôöŸ#Û±X–œPÅúÌQøpÛ’«@¿ÇÇÔÔ”=tZ78ýŠÕ¬[è–~£¡l4FÃÝV:>ñÆ«‹ã^Bľ…££ ív8 ãUÂt: Ò5:ª%P=ëtƒÎiô{|û7ŽÊñ¡þu½c i^Ñšç¡{dÿA¿ž¥›ãøP=;§€Œû=¡[Ì 9: y+³»Ã‘Â.p|¨^/=¹ËÍÇ?†ŸýÅÅm·ÌãÙ~33“„&x&{ô_Íʰ¡§aÕ©ÞwQRÏ{¼;w®ÙóÙgr< ‘®EgEé7Ê^kŒÞ{#`#{¬Úý”[ñ”}ëgÇй’ë—è>Â4ÞâˆI÷ŸÛÿ©¿9Ö¢¤kÌç{Š"Î{n¾í²úCû?Ýï°y½Õ½¡W¯Wº ¯ß&ôêNŪ«%Äæè,™[‘òÒï€ì=²²@öŸz·mp«Õ¢„@¿'=”è÷¤Ç4Íf³I  ÙcH5{¸/°O<{ºí¾Pžûy¦irÐsqÀ ó#|rr2Ð,¼c]`t@Áƒ‚ªS½`äUl!ýÙ { {dAÄùž[£ÑBLMMuIÝž½IW`gùvAו‡]¬.ƒ}ÕÓd~ Ú‹áþYº ^³ô{wSo‘¦Q9®J¹uöMè÷¸Öv\¯9.ÜÜŸº0TÌî?®í ôa ë÷LŠ­¾÷ýAz$øî}Ë|Ç¡ëÙ«¹êYÅn4Yê@~û=ŠëPÇ9#m¡ô—)=ý«`uÙ|?̪äQJ¨Þwö&2Ð…><õ„ÔÇg ß_I£Å±¥ïð~Oüg—ûsõ™£¾¦ Ñ<¥|Ï$ó+S÷²oaO|+?\kúðHçèwwØWä•1Ù¾¥Ëd™¹"Í^rMj£Ñðº¬.VóMÉs~¨ig×£—4—™ÏFDg+R+yˆ*µç¢$œû t­²;P ¹{ÏMÚöéç–×”3<[â‰Eæ%w—Añø$Ñ vÅ”Ž"åd§Êtφƒì‘´SŽ«9ß{;Öoí×nêíËô2¹«B¯íg?MQ|èõžRB%·J«.ŒoÔ•ï5±t½šœ|§t¯E½é!Éõ™¬:)ô† ;Õc?zµ_:³{M©~zŸèI¨¿Æˆ5“hU©´íÖ,¿æþ ·£­7ýš×,pÐm÷=}€.ê÷¤v3Šû åØwÈžìo „»iÀ=‡âî;](Gã–Fl³hòŠ»ïÐï€ì=DQ§ 4µZ-*BýžôLLLP àè÷¤êÎ;ïÌy MÓd7qqœ€~¸¦Ç @¿§¤ŒBí_Eñb?$€2dOúŠrâ媙°7Ð:ãUgX-A‹§3½£ùζÊzÀdýdv\h»/è¤×¹¡/î-?DÓ¦ßÏs—Á¾:E9¥‹«À1Ö¡º¼®Öuö‚fx„k‹E•¨^¨N’îéT@ž¥÷¼Ç:mܧŠôüInùî¦'Êê+r—Á±:E9}¯vÓ ž@ûHz³K}Q¢Ö¯¼V'-Œ{úˆ[í[' ubìuâµ¥* lýë„Ñ?B7©šQm²ƒ¶w™_“*.uZÃ@7Íbßð¼]ÑG/£Ûç•1Ù -öºnÍÏ™Ÿtãn‚tšKéÓŽèe‹²SÜó=„Âu}ÊqøÑÝA·÷{§A7\Çé¼Ù•Ï{#AËÖièÓ|\ŸçÚ }¡æu7²—b€T5¡3Jø½¿¤Óp¤Ð¸D_…×4·±X}&¯}Ý)UôÇu±4©¾wíêK`î~! tiö¨O{ß‹;kÊ@ŽþòC¯Âw :ep¿Ýëþ!‰;Ú&i ¥e ?iEáÖëÞGê½è¸Ê$õ}7È¡zì'ƒãgõë³^¿õ}³KѬë,?–óSsÕ«v/ÄkÛc,pнà»_Ô[­³|õƒ'Aß= täÄÛ¸ªÍjè÷@öÈÙÙ {ˆ¢NhjµZT8„ú=陘˜ À!ÐïIišÍf“z‡eö†AÅRÍîìÆÇÇÏî,†aLNNš…w i#{d€ì€ì[œ[ê¯7Ðð½qõë»õŽ˜#–‡Œ ñì‰" ´;;ÉEÍ{¢Óš[ ½ãWÒž‡ïìŽÉ¬ÌpϨßGqwà¼ÊìU:@ •Æó«åuç#i¬ÉìÍ´zvGÓ/Í÷ŒQâS¿<Š€~OR]ÒvY³£ ž t?ë·®7÷×úÂcûÄ!¾)Y=‹c\œˆ_GÆ9@^²'Fñ6뎨ОP€ì±¾ZßÝw±w;¿uôH:³«çõúP³âXˆ}u¾åt¬‹„“øó«vg‰{ ¯ÆÝ>¯b¡‹ç[NÍ©ö{B÷–‚NºŸáÕ[ò] ãF@~³GzÛÊÝîGo¾Ãu5¤ÝßB Ðï‰7f¼–ûý®„ p‹ùyúÎXçe„p}y5û:ét³)e¢õW¿fMæ~ã˜×þ¡N´Ø§W¼]­X¬×{n€pâ¿çæn u>ñê3ù>ç×ÉÇ4ö S/Öý&^ˆµÒî÷@ö2V§ ¸¥ô{dd€ì€ì=²§µZ­V«U²2 Ã0 v.€Šíï{|Ûîf³©ø­bhÇ4±Újµ6Ý÷¬¢%ZêB*Vš·/|3 Ã4Mû!6 òž=BˆN .µeçVE èhõ¼¾ô3‰fÑ žNùõã'…²E!„išúñÅËžpÜ—ÛöCÒÅr‘nžˆñã(ªû«¯¥£ê)¶+ôº“&Jü(ŠÍ×{­Ï{ÜC$H3)zðü"~"?ûq Ä`Ø÷C¯M<öø ¨Òb3¬€’dOÃÆþ¹Õü9„¾âö ž¸âGsdÅdêß ž(ñq Ù#mpcoã ÃP?±¿$æÎTiІÛäV«å{WÍ4Íò½Î€ì)Ó4·ìܪžFýrD”duÜ ѿ‘j6›¾¹Òj…|“Ê–=:ã^+zIÄOÁ£èýÄE?±Ï{»ßcÅ×ÛÕ^ÓGé1xÅ~ðx=Ro 8{Ðnû&GoͽâG?xì¥.6Ï{„–—±ã ™½™“Ncý=~¾såmAƒGýŽ€ïÏú„Ž{ÒhþÛ¤€eïC”²ÇO¢·ÚÒdŸ„nµ?r‘=Íf³  ·uó­LüoÝ|‹ýå‚Î_öX· !÷{_ëêàIDATŠ«”_9“Ü+mä €ˆøkÙ {ˆW˜ç=ŒHH;{&&&¨8€e||<ñìá;ÁÃ0&''ÍÂó@ÚÈÙ { {Åç÷¹9†Ÿ±¾õKýÍÇÑ¿9–1§î÷8Æ„ñ ­³Þ¸a£ßãHkìK{ÏÆž î@’þÖš=Dɽ@waè$@áû=¾IàÕ;‘þÖ<1®P¶~Wg(bG*PGÝ!‹^$@²'Ñ·ý]ç^ŸoŒ<‰,ï¹eÅÊ?îÂ@©²'öŽE\9ÁC (aöXOSÜÁc5÷Ö=1é{höÙ­}c¬ñ÷¼Üa€\‰óyWãnÿÜëgÅ|3CýhG³0€÷{êEÈž”pß Ê§žÿ"’7@¿²@ö@öÈÙ@²§ÕjµZ­Ò× a†ap$€¾¤þ¾§ÕjmºïY!DK´šÍ¦Î,Ò¿õý“RÅ8¤) Òc†išöô·Q8Wͺ€®î÷XÁ#„Øtß³©õ~ì£3¤0^ƒ=oLÓŒÞûÉ|t (jö؃'DüØ{îAµí_V-\#ñX¿Ja„wG'züØËïøÁ1oµhþÌ×å(Cö¸ƒ'®ÞtÜ«—àè.x}ž\ðhÆO ¯ÜvŒ4am²;žƒGÄ FÊ“=^Á4~}—¼Q?ÚÑéý¸ûs‚JsP éZìóædYdO¤YûH¬Ö ´LRÖýB ,{|ãG?xì#^ëK­UÇ:xb¡³¥ê„c<$åÉEüèoc*}ËÀz,Ÿmü$<Ò- 7¶#òÈVü[Ú‰Ÿï\y[Ðà‘>éÑyühâxãÇž4úÁãUNß W-ÒiÈåé÷¸{?Ñ{<¹eïý¤p« è÷èÆOYƒÇ?dŸ=¥O{üp@ Œ¡ {dñ 󼇡ÒigÏÄİŒ'ž=¼Ù°†199hž÷ÒFöÈÙÙ(¶8¿ÏÍ=¦_ÔH£ß3õÁ`Ì€¤û=:ý!{&9Ær–~¨?; {û=Òà‘ö„¬áŸªggÿýy7Å‹ô·:1ôx€ì‘çAôŠt =ªØˆøê1eR¤¿ïi4<ã²G·ËÒ‰½ûìt€ â¼çæ öÏÝÓXŸxM¦˜@¿²@ö@öÈ@ÙÕ© M†aP 2M“J ß陘˜ è÷\}#=­V‹J ß { {dd ˜b{ÏÍ÷’f³©ø­ÎHÛá†QЙË=À]ô¯ÊÖ;<·ÂíS¯ÊtT¬´~ãk(ê­Õ›ÚvY5ŸÜ¤ØŠÐ°)d®M÷=ëõ«-;·*^*u´PÖH?é…±¬Es‹ò/ô> Q?îpòª·ÒToÊÛ•N-éïG=y9߬«3Gcä¾ôúÄÑ„Y“IG®“Nã5È·b-¾[äuIk_£cKÕ«óí4¨?ÌÛeö¢W¯þvi™îCÔwß³#Ê&K×¥yV†Û¿È³<ïqsjµîƒÒq¤:ÎdéŒ^ þZxÒSË~.ù®Nº(ý3ì8ª[÷µú-HY«7èzíî¾ns/Üw±:gPÄýe½:ûdO¤æL³òmÝb¹ JùªÊ±:ÅVHÏöMyìW šm½íH­ù(bõêäú—1n‚t?Js.·Õˆòßs ÝЇk›ÊqAäÞ ÷Ŧׇ…ØãV •I™‹[½±Ü÷‹k2Íý¨_ôfè÷ä¨3åÎL¡ƒGºÞ"Kº´îh6Íîkdª7'èÔSìGÅ«¤:Õâ”ÙãßN9Ný&Æ‹µXš÷E\¬fÉ¥÷1rØã‰X?e­ÞØ·+öDtßG«„êjLh½ ßøÞE é¥Ï!¥¯$8î D¹£âõ¸5ôÒ¼nõ8J^”{n¾¥U¸¬Õ«¹]:ë•Òúk÷:;­Z:™WoÒ=qÐõ¢Xê¹jŒÔêÁf”þz-¾[¤¿4ßy}K®YÈtv¨~Á‚6”å«^í ºùŠ"þètÖ¬ðè§<ÉÔuÙ³eçV*´dاˆ·Ësö4›M†Ã*ö)’ú%Œ[šsœ¥T/ŽRâ{¬d€ì ^<ï2à;6@¿@œ&&&¨ÐïÓ4ÕcødœaT ÕìáŽÀn||<ñìáŽÀbÆääd Yx×6²@öÈÈ@±Åù·¥ÒÁ9â±Ã±ÇT|7;tiö$Êž.Œ@d³ƒâÕ;±ÿÓ1ÍÔÔ”â÷dÖŠÜÓØ—/] [é=ï±Z{*¸Åa^·×¼nî¹çbˆx(öØsÅžŠn‡ûWñöQÔk¤)þ{nöNŒ£C“BÿCº RJž=^àõ`&öäc§@Î%rÏ­b Þ4j4<ã€îÊE uRÁúÙñC\˧yç=7{s/}Íw‚(ËÉ¿°(X¿GŠ›c@ö¤eÐ…²ÿNòè÷@öÈÈÙÙ {Ý+¶¿ïiµZê šÍ¦â·^Ä…#ýKÕDÿ|5ÆÍçž=lºïY¯_mÙ¹Õ4Mͨ°ßhŒ’nÓcÙü„¶J›=qõQì!$lÐ9F¢³dŸFѬ ÙBŽÕ¥ÜùpÛ«¨îJÖ†t+ÔUé+Àó«1µšNw~؇cPèµÅ Tê*âp@¿GÕ° ¿Á¤è\à»ûIVÃ[ްÑ/0=dO«*m1“l;ÿߨí¾;§Y`‚@~ékÇ ¥D[ö¢Ü¡*\ ÙËó•г[ý†¬z<ŽÍw ¦§Ø.=@öÄÓþªß0v¿…l5Í^â’Þ­Êðž›{ÕÖ'Šbäm+@_^ž÷8ZI{Kê5™;~“ —2l©[*- ­ ”9{¶ìÜÚÍUÙå›dO³ÙTüé~éuùæ@fýžLpC ‡ï±=²²@ö@öº4{ Ã0 £kk¶”›ßjµ|G§ž»üÈtÔ“;ý:kiý £4ßBbó355hðtÆo‰V³Ù 4oB{6‡õבŸÿãÈ]¿Ç~Ö™¦©s èøþærO Íù5Õ !Ħûž ÔûIhsrXÏqùEEÈQö¸/÷tNBé¨<öÓ²(áTÊÍ·OÐøq|w\®ž}[ÿô‹ä;•= w:)e×}†ÐíBq{<á6?‡wÝÁ®÷“‡zNnŒ‰.?ò,³G}ƒ;ÄIX¬Ñh¢o¾c3ó°ù^Á£?î!ˆ¢oT”z–ÞËʶH¾2Ç(! βÇÙHù>Y5M3蕲bôš\‰¾ùÒ%ÛÍ7 C »óô+åæ[ñ“‡àÉm=wù‘dœ=œ{¥Üüü¤Nžë™Ô|1†€ì=Ä+Ìó¾vöLLLPqËøøxâÙÃk<‹a“““fáy mõ‚–›gNù‘Ã?úá˜dWvÉ®,î.£ßƒHxøÇ®»¬‹ú=\¦åAVcfsL²+Ù•Eßeô{d€ì€ì=Qï’íìŒ{ß155ÕùgŒ£Û—o­%Äì „Ü=Çdr«à Jm?RÛô{äg`ç°pçD\¦Þh-ŽâcEÜìJú=ªK?÷ñ!½üth-GÿZÒ=‹×b;?¸Ëæµjýâin]:—áP“Ž:ö`ûµÒèuÖÓïéÆËOÅ5iˆ‹{º¸+ EõªÕÓønHÐMFæ=¡Ð»I³jÛëìÖÙݹïê=^ÇSˆßJŸ*I/m"è!ʦÙQãÖ_ºˆ»)Ç×~é´ ³ŒGqd¼7ãÕ¾‡ˆ%LJ: $&ÄrôW!=ùq˜þ:¬h¸kÍnÛwdg³žPÿW§Ykš1é8rðD<êØkî5û­ų¯+¼nÛwåÞã~¤ïub+~•Ä!ë»®¸¦QLi}H'ŸÇdÄÝŠ"†Y—ì»jWêîæUq¯Öº3WïGç¾V\ÓhnúC¤yLêuìÁ|îGÍ6Äý@¨;÷]½«é?}Ò„¾æþPg2¹ÔŸÚ:n×ää˜ôÝq!v+û4“ý軿ØS‚w¬d€ì€ì==€|+ö;Ö­V‹]ŽI°+é÷¤gbb‚ýŽI°+é÷¤Ç4Íf³ÉþÇ$Ø•ô{H¦ßcH/{ÆÇÇ'''©8@hÜs=€nΞ/|á T Õì¹ãŽ;xàêÈÞs¤MÞïá› ©fß\H÷ÜÙõ{F_¼ÿqj„‘†${¿ Ù~Ïáƒû¨ @:*ívûšo¡"éØñðýÿÿXr‰«ÐRIEND®B`‚saods9/ds9/doc/user/gui/thread.xml000644 000765 000000 00000023030 11224464026 017362 0ustar00joyewheel000000 000000 gui June 2009 <long>Introduction to the ds9 Interface</long> Original version

    This thread provides an overview of the key components of the ds9 graphical user interface (GUI).

    The ds9 Interface

    This thread uses Chandra data from an observation of the Trapezium Cluster (ObsID 1522). The default ds9 GUI is shown in . The main components are numbered:

  • Menu bar
  • Information panel
  • Panner
  • Magnifier
  • Buttons
  • Display frame
  • Colorbar
  • The ds9 GUI The default ds9 display includes the information panel, panner, magnifier, and colorbar. components.png

    The default setup is a "horizontal layout", with the information panel, panner, magnifier, and buttons displayed horizontally across the window. This may be changed to "vertical layout" in the View menu ().

    The ds9 GUI, vertical layout In the vertical layout, the information panel, panner, magnifier, and buttons are displayed vertically at the left of the data frame. vertical.png

    Note that the colorbar remained horizontal at the bottom of the display frame. This may be changed with the "vertical colorbar" option in the "View" menu.

    Menu bar

    The menu bar provides access to all of ds9's capabilities. For a complete description of each menu, refer to the Menu bar section of the Reference Manual.

    All ds9 menus can be "torn off" to be a separate window from the main GUI. To tear off a menu, select the dashed line, which is the first item of each menu (shown in ). The menu will become its own window.

    Information panel

    The information panel displays information about the data file and the values at the cursor position. In , the object name has been loaded from the header of the data file. The image value and position (in WCS, physical, and image coordinates) are updated in real time as the cursor is moved.

    The fields of the information panel can be customized from the "View" menu. Any of the default entries can be removed, and additional fields can be added (e.g. detector coordinates, min/max data values).

    Information panel The information panel of the ds9 GUI. info.png
    Panner

    The panner allows the user to view areas of the frame which are outside of the current field of view. Although the display frame is filled by the data, the panner indicates that more of the image is available. Clicking and dragging the viewing bounding box in the panner - shown in blue in - will display a different portion of the image.

    The panner also contains axes to indicate the directions of North and East and the directions of the physical (x,y) data axes.

    Panner The panner of the ds9 GUI. panner.png
    Magnifier

    The magnifier displays a magnified view of the current cursor location. The magnifier cursor - the small square in the center of - outlines the size and orientation of one pixel, taking into account the current frame zoom and orientation.

    Magnifier The magnifier of the ds9 GUI. mag.png
    Buttons

    The button bar duplicates many of the options available from the menu bar. The buttons provide quick access to change the most frequently-used ds9 actions (e.g. changing the scale and color bar, blinking and tiling frames).

    When a category is chosen from the top row, the options within that category are displayed in the bottom row of buttons. In , the color category is chosen and the bottom row shows the ten most-used colormap options (additional colormaps are available from the "Color" menu).

    Buttons The buttons of the ds9 GUI. button.png
    Display frame

    The display frame is the area of ds9 where the FITS image is shown. In , a single frame is shown.

    Multiple frames can be opened in ds9 at the same time. In , nine frames have been opened and set to "tile" display from the "frame" button. The current frame is indicated by a blue outline around it (second row, center frame). How the frames are tiled is set in the "Frame → Frame Parameters → Tile" menu; the default is to tile the frames in a grid.

    Tiled frame display Nine frames in the ds9 GUI. frame.png

    If the display is set back to "single", then the current frame fills the display area. The other frames can be accessed via the "previous" and "next" options in the buttons bar (or from the "Frame" menu).

    The "blink" option may also be used with multiple frames. When blink is turned on, ds9 cycles through all the available frames. The blink interval is set in the "Frame → Frame Parameters → Blink Interval" menu.

    Colorbar

    The colorbar displays the colormap, bias, and contrast settings. The colormap correlates the colors used in the image with the pixel values in the data.

    To change the colormap, use the "Color" menu or button. The contrast and bias can be adjusted by right-clicking and dragging on the ds9 display. The "Color → Colormap Parameters" dialog box can also be used to change contrast and bias.

    Colorbar The colorbar of the ds9 GUI. color.png
    Setting and Saving View Preferences

    All of the view options described in this thread can be set and saved as a preference. Open the "Preferences" dialog box from the "Edit" menu and select the "View" tab, shown in .

    Preferences dialog box The view tab is selected in the preferences dialog. prefs.png

    The "Default" menus are used to set the defaults of the "View" menu and buttons. For instance, uncheck the "Panner" item under "Menu" and the panner won't be displayed when ds9 is launched. (Note that some options require ds9 to be restarted before they take effect.)

    After setting the desired preferences, select "Save". User preferences are stored in .ds9.prf. At startup, ds9 looks for the preferences file in the following directory order: ./, $HOME, /usr/local/lib, /opt/local/lib.

    saods9/ds9/doc/user/gui/vertical.png000644 000765 000000 00000624276 11332353405 017731 0ustar00joyewheel000000 000000 ‰PNG  IHDR4˜ë7õÁbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ1®Î…f IDATxÚì}wœåýÿ3u{ß½½Ý«{…ëwMàŽ”(!¨‰ý&‘(ìðJ~öÄØbÄœ-EAÄØÐ(Šp´ãŽãz¯»{ÛûÌüþxàqØÝ[öŽ"1ó~ñz±73ÏÌ3Ïó̧=Ÿ‚1 óÍ¡†5ëž @Àw§þõŒÉ%Øîº#O¼úÏŠ™ó„ @€ß9ö~õÉÿ¼«¾êæW_ou #"@€¾sX‡ú;ë÷–e~Ÿ0"ð=‰DÂAŽåN{%†aE“5îV4M’ãnEÒ4ARè˲À±lÐïG'ü®1JD ˹‘H¦Ž½]Äï£L,S…) @€€ ,Ç}1…ÓuÚ‹# ëò8%2%À° Ï#¦š"“hŸì.‰L1ÞVN»K"Sà8pß2'À1,ó-weذ»¿²x †a»ë;ü8AФ§²ß48è‰(³ù  @À…‰pÐ/¦ ƒ^OÓôéu,†Á¬V߃ㄘ&Sô:*™V‘f³yü›H+‘D~‚9îs‚ŠºT¢Ô…¸pOß@Ia~žYu¨£ÐçàºzÅdÐ.1ÊÔ)ü† àÂDZ‰\$%s1I’ ¹Üíõs&•Hé$[Q”¶ÂÇÙJ&s{ýˆ›ÀÿH0 ÃÑ¥ÓªÔ†Þæ ï L.Ó«½Ož’ ›ø¬ÝiâHÛHD•‘É·~¿AøªË&e·í=vðx°Ððß Ã1 K^À0 Ãð ¶Âq ÇÇÓ >±!,¾æ HJn.hhúA:İ,Ǹü"¹TpÙ ”§¹k@W0‡ ÆäŠI”åš/Uœ¢UC̠͹ù«C݃£ÇŠsL7^9S*¦?ÜQÿU]s(ÐqQ‰eNežN%÷CGZz¿Ø×dwúH_·j‰?~ç“oZ{G¾«yÅqÜ V¤éxÄò{ERyÔ"šœR¹`F¡Z!évlÙq¤½ÏÊ&±(@€ç‡9ø/Ù'Ù¯Õ½7^JÄc9/üãk—7p 䵺ÿ¦K‡íî [v£ë—-¨ÌÏHyþï_¹}AÄÓ¢Øy‚KÅ<')uÞ´Þú/¨ˆ—ãfY&, ôZ‡Ô9³Zœà¥ÒÚ[®®ŽDÂ-]ý,Ëf˜ 4ãc˜NÐR1]l1¥êU€Ešº£ÀæH‚¼fÁ”ËgØ=ýZµâòY%9fí†-»žR.Æ<Œ×9‚ƒˆJ© …#8Ž8E–•ŠiŽã¡drES$†aÇ…#L fYÇ11MÑ$aY–åh’ð‡ÂÁPÃ0š"D‰ãÃp¾`ˆaØS˜4ŽKDIâp¦˲KQ¤˜¦aÙ@0\–—~óUU½;÷µÌ(/øÅ5sã“a‡_ø$pa0§|#ùë†S5'¹„v¹½QW*²®¦Cڌ“<a6X^FÊ-WU½õé>Žå–Ô”W¤»ÜÞöÆ)–RÔ´¾eCbN§šõ¾U€Ä mîtGó.Œ úC ìgE4ZLËTØØìÇ1µ\*•Ð_îj¨ÝüEÃBÁ-׉H±Z!+É1[Gæ0'C#;`u‡tjù¥3І¬£Ï½±éPSWšÉ¸jùeÓKór ²CÞà‰ûr ¦2ïæ¥hê–Šét£fw}ǰݽ`zIâÿ§á«-á»xNyyžYB“I´÷Ù>ÜQß9`Ï6믪)Ë5ë:l ³ï}Q÷éÞ&£Vuñ´Iùf1Exá­;Žî;ÖÅqßÎMAVÊÒyf½ª¥gXDŸ°a’$9«,÷’21Ž0v·oÃæF Ë2»ê>ø÷>¹\>ÿ¢²üTŰÇa„ðU àÂ0ëÇÔ†ã†ãØ):·Ç¿ê¾'DâS\ä[ý³“š8aÓƒmN¶zþï_ÿßÕU¹éúkçWzüÁÊ‚ôÁaÛã/þÕbá5È„׬‡Ç{ Vè)µÙ?ÜÎḄaR¡Rqü4Þ£n_ÿˆcJi¾N§íqµ÷ŽïôøCN¤êT©šß±Žº–,œUh1u[Û²Su$IØ>¥ÞÄ$ý6o0±¤é÷罹VNlêÐ*Ä ¦M:ÖÖ»ïÈñª)Eå9)õÇ;A‡'ðÉö}·§¼À²pÖd§Ë58b›39·Ä’ºsÿÑîþ‘Å fr,ësraßìòÊySò¾9ÜÔÔÑ»hîôë.ŸÚÖÕg÷F 6ªŠÎ(ÌIÓ¾³nÔå¹jáì`(Ð*¥•é±í?FÝ^F9j´;Í%ùÙ!ŽÈÉ4“ž–¢ ÖµJä øŒ àМ†a8žôõøIç·¢E’ì¢Éü+E)à8àµò‡"o~¼ïG +‹-©€®ÞÁ?Õ¾o÷3'•ÁkN*ux´Y‹Ùs:¡«p\Øç`ü–Ki‚&0&âe‚>Z, Áõþí³ýÅ™Úbfqæü©“¶î8²m_ MSåùæP(ÜÞ3Ð58:kªgZiþ×u­qǰ,†´HJ$p’$BA?8uãæ?u ›¿üÆdÐi”òÏwî¯oéÉ0dbŠÂ–‰´õZdP¥{ý!’ÀåbR+ÅSÔr·×·ùóÿt¸s²2¦•X”RQzŠÀáó‡LMNªb¨iI)Z…V%uºßÙúï GOÊÍLÕ‚áȨ˛¦W˜:‚¢»FB 8ÚÖÿuÝñÌÕœÊ| cÃÀ„ƒ¸ÀœðÝs§SMgÉÚqí{H¥‰· 5-h:PE;õYÁÓ;âLOQºû#e²'#®0ü„ýgÕ;¹çËN9ÀE|nwo#‡áªŒÖÙïöØXÆÅô%%3i±<ÁKáÞ3ì<ØÐ¢’Ñs¦]1§²$Ûð¯íuuZy®Ã@q^VzšI*¦5µI'´9YŽS)dÙé©£!L!—u š$zú‡ÙS7.§$,F°X.J"ã0Ã0ŽcµJñ峊òÒtG›Û!KÀ1 DZ,Ëá)Uh±“†'ø;Žõ’$z;{û­öÑ ßK‰¥H™ ‡#NÈd:†;©ØzÛ¶ kåâ)EÙ g—‡þñűîÑÍ_VÒ,Žq f–§´ÝýÃ,l àüó& Ãð¤ÉŽC 6Âù¼)îM° Ë(’X8½`zQF{wŸÏ˜3c²ZgüdoÓ o¤9¡Ûbßšõ0¸Û sbXßÀ1&èVdV*S2½# O÷aœó~«°™¶LËv‰̤W^9»¸Øîö²Ì:Š"íN—ßãÌK«Ðª¤n/Õ M€‰D8.*ÏûÇ—G5÷[RoX2¯sÈiÐªŠ²½ƒ#Z±ouŽã0œ€ Çœ OògN§’e¦j&²ûà±|K¼Þáö Û]YÆËk¦ »B…Ù©'˜œ7Ð?â,Î6º<¾ÖžaŠ$MzµÓþñŽÙ]~‡Û_˜e¨™V¢ÜtË„2‰È Uº}!»Ãš¢Ë0”"\Nc³* Ün·J..Ê˱;k#(êć!@€€ïÚ¬wŠ»ö•³‹âúÝ}¾¿Å óMm1·…ûFø·Þçø){H‹«J&ç›»ûÿü·­”D)WiËrM$IlÞ~4Šœ`l8E*ÇÜs ÛÛ%¬‡IÉW¥Z’’³¹H@’‰÷»l=RCöX£a8šÄ¦eJ%b¸–Žž·íf~QI¦×Øúï½{'Òœ¢½nñ¼å…ûdïûÿ>4<œ^Q˜UmŽ0Ls{ׇ_ìéq¨ iñTHŒ§e~»íÖ?âljï¯,ÈX4oF¿Õ ]ï¼þàî#íF­bfEaWÿHßàH~V*ËqPxOC‡„Æ&e¤æ[2CáˆuÔéñùIŠÆqÃp·?ôõÁ¹˜X<F×ШÍáÒ($dzSu¥¹&šÄÅ"ê`cÛ¾ÃM*­¾<ßlÔ(Hïþàó6·\oÆ ÃÍI€ß9sÂøº)“ÒH"izwÓÇ’”¬T'šo[IÄ¢»ÿo¹T©â7Ñ«d'XÔ){Nß¶ªÈ3 Ø_zã½ÁQŸ);õ_»›–Te¥¼Úݬ4å@ûRìžV}ÕÍ/¹®ØÎ?tê"ý#>uÎ4ò¤×8 {k®AD‘øˆ+0Ä¥ˆ”†¸£@à˜ÝVŒc™HĺŒD¥Ë4]ÖÞ»ƒ%$´DF“„V) {G»z‡´y\D‚ápØyC-S‰¥ŠÌTí`g“Íå3˜2"¢³£ ˆ599Ÿ­·o`XªMMÕë<ö«Ã-Rêu5t|n_Ñé4›Í` ¦L Ø€ËãñÜvýUŹé/½óѾ¦~•ÎHca<â‘P8†§?,פХ2 '(ÆË=Ÿ¢D‰Ø¤Tm0èAÐ ú˜HÄ뺃¬&Ŭ‘KB^{$ô‚žCËÔb©‚I„$øÎôyÔJ™N§…¦¨$u±—u÷L‹á¸Çãé´¡QÉ´ZÔJÜÙx N«¾¡‚éó0 s»=ƒÃV '´*¹V«A­ŽÚ;ê gä—R"1@£X»Ž·´¶Θæv»‡mù žç²w7ìç xô¸cÈæTåÌ$E’oYŽHV["”3?;Uërc½ö‘ œ<Õ§ðã€+ÀÂÇ1ИX&“à$-¶ºCžN) $%¢Dœ œÁ°×‡)S29Dp‰×ÏFB †S˜X.•à-&Eâ~›Ç¦Ä*£?‚¹|~Bn i±Íå÷x9±:'E6w0¡i…ޤ%¾0ðûËHp9âaR!SS¥yi¥¹iÃ#6Z^Qd¶nl#(°CáH„Å0£q©4 Nnå1F(_ÇqE\ˆ%d:’»ýL(À± #D@"—Ë@Ð?ðãH0‘L*Æ)š&ER3  à‚~JÄÒˆË/2æÅ^•oÌà ™éþt¢•30f+‡áï>¡VÊŒ"†£¤BOS™ó§¤Bm = Ä@\o½ ÇÞãpŠRËi±,ª´TÑበê üÁp$,"’¬¸ã@Ò"9'…„Jo:e¸D„Ú`FJê¸cªII‡?ÅREÜ[Ñ’oy¤\­‹º?‚É%TÉ´ÂËì¬küëûŸºü!R†ãNR¥&Á„R"±J$Ž{<ÞA‰ð  àBäMÎÀ}Kí1rì\ 'ܧqÃq–ã¾m…¶‡'׊ èo[q,†ñ¼õNÝsR¤X@Še¬Ç‹ºÐáHøo¡ÄŽúÆf§mˆ‰„p'ER•ÞLÒbœ¤½F€ÿ  Db§Óƒã¸L*=íÅ¡phhÄ&–*0 uzp—&Ó*4ÁVÃ#v±T'Î ì{o}’(4$-†Ì`8IR”H°¹  àI‰d ‡Ókužöb ÃÅ2%,(–)F^[r­$2%q­Ð±o5'€aË2Lø{;3 Ä§hzßç— @€€¸ú“Xœôµ\$o+îÌZ…á8/·8ŽM×IËsS…É @€ß Ž´ öÚ}ð÷ ͉cÙ ƒòê¹åÂè @€€óööö£Ç\‹ŸÂœ‚Á`$†I€œ7ôõõíÚµËnRŸ91  ›1 àüÁáp8¾_"“jg³a­­ µkiÁZ[ÁÀóÅÂh  @€€s„DÌ Û±{ë-¬µFJ€œ7$ÌIÊ0˜Ç\.a˜ @À…œ¸yó˜7ßd¶og~óa¤ @À…¡9AˆÅܲeÂH  @€€ ‰9hZ)pÞ@N¬Ù¯~õ+ø£ººZ&“}úé§·Þzkqqñ™t¥££ã÷¿ÿ=ÿÈý÷ßo2H=~èС7.Y²dppð›o¾Y»v­N§»ë®»rrrî¼óÎäŸ …î¾ûî¼¼<ô ýë_÷ï߉DO=õÔ9î?ÿùÏDÜ~ûíßáôßyç,Ë¢?—/_^UUõôÓOwww?÷Üsg’{ð?ÿùÏßþö7þµZ½nݺóü‚_ýõ{gþ|üñÇ“ÉD øàƒ¾øâ‹;î¸cÒ¤IgÞ/¿üróæÍð÷C=d0DBûË_þràÀ‡~X¯×ŸÅ×ôÑGíöoKµ]zé¥?øÁ’ièv»xàâââ[o½õìÎ\?þñgÏžýÔSOõöö>÷ÜsÝÝÝO?ýtuuõ~ô#À+¯¼ÒÐÐÀ_3;wîüûßÿŽnòÛßþV¡PŒ÷Ñ Ã¬^½Úb±¬^½:ùV÷ÝwŸT*}øá‡“¼þ…^hnn~òÉ'ÅãHôß„þþþÇ|æÌ™×]wàõ×_?räÈc=¦ÑD—w€§Ö­[§V«Ï™æƒÅ'QVVvøðáÚÚÚ¾¾¾3|ç‘‘‘ÚÚÚ‘‘tsþúëêꪭ­=zôèäÉ“/^,—ˆ©­­ýôÓOÇõ”H$ÕjçεµµS§N½âŠ+Îõ¼nß¾½¶¶vÆŒðgΜùÝ®³ÚÚÚ;vÀ΃Á5kÖìß¿Μ9‹/>ì¸YYY‹yزe ŸIœìÙ³çÞ{ïeöáßÿþ÷Ï~ö³$Û8p ¶¶vppðÌ»±sçÎûï¿ðŋïß¿ÿg?ûY0Œ»0Ün÷ÙM›6mÞ¼}M?üp’ß‹H$Z¼xñE]tÖ'¥¥¥¥¶¶¶¥¥ðÑGÕÖÖl6[mmíž={ gzúé§KKK¯¼òÊ×^{míÚµûöí»çž{B¡|‘;vÜtÓMxôÿýßÿÕÖÖþñ|öÙg“oõ·¿ýmÓ¦MÉ_?k֬ŋ“$ ¾§­­­Ýµkü󫯾ª­­õù|±WþûßÿëÔ9dN—\rIzzúúõë?þøcþñ«®ºª¦¦¦¦¦æ˜Ø333/9 ¹\ …jjjøêÅ–-[Ö¯_oµZøÃêëëyä‘äï/‹ß~ûíÇ?öØc€—^zéóÏ?î¹ç¶nÝúä“OB­æ$¶mÛ¸þúë!ß:xð`MMÍK/½xì±Çjjjz{{'ðŽÕÕÕð9Ž«©©yå•WþøÇ?ÖÔÔ=ztùòåðÑwÝuàÍ7ß|ÿý÷zè!xÐf³Á?þ8¼Õƒ>,Y²db®T*agrss;622²aÆõë×ÃgÝwß}~øaMMÍ–-[ÆuÛôôt4ï¾û®ßïï½÷Ž;†Æö£>Š»f^ýõýë_kÖ¬©©©™?þÐÐ<û‡?üa¼¯644tüøñüü|´œ¶oß× êÆgŸ}/^´h<òè£FÝçŠ+®€§àš<ø‹_übÊ”)=ôÐ%—\òæ›oþ¿ÿ÷ÿઆxùå—ù×{<têOúà‘G©©©éïï¿ä’Kn¼ñÆñv€¢(øú%%%ÝÝÝ€Ûn» >båÊ•È~PSS³cÇŽ[o½µ¦¦Æív¯_¿þwÞ¼ñƨK###v»½¦¦æÞ{ïݺukMMÍ|p ߯Ÿ|òÉ5kÖüä'?¹ì²Ë>û쳕+WŽŒŒ;v,77¾ˆB¡øúë¯'pó]»vmß¾ýw¿ûÝáǯ¾újMM;}ûnºé¦… "R‹^T àšyþùç៫W¯®©©ñx<}}}èz8\µµµëׯƒ½½½èÔ»ï¾û½·ÂŽŽ¢÷ݰaÿÔ¼yón¾ùæÝ»w×ÔÔlܸñÜšõX–õûýõõõÓ§O×étˆÊìÞ½»¡¡áðáÃ7ÜpMÓãbÇ1 QUU®¹æš›o¾ìé驯¯¯½öZiiiaa!¤ãÉrc/((ðz½ð+t8‹¥«««¿¿¿³³séÒ¥ÕÕÕÏ>ûìã?~óÍ7ÿãÿhmm`YÖãñÔ××Ï›7㸮®®†††P(4±ÑcÃ0xÃuëÖa®¾új—ËuàÀ®®®þð‡EÆgŸ}öÙgŸýÕ¯~uñÅ_~ùåÿú׿vìØqûí·‹D"·Ûýúë¯×ÖÖNž<¹´´tÉ’%ãe!üç8Çq ÃZ[[ëëëÃáp}}}ss3˲óæÍ»ãŽ;ärùüùóÇû¦«V­ÚºuëW_}¥V«gÏž=uêÔ—^zéøÃm·Ýöæ›o>óÌ3Qk† ˆuëÖ½øâ‹÷ÜsÏÌ™3—-[öÞ{ï}öÙgkÖ¬‹Åã²2]~ùå=ôÐïÿû—_~yÆ ~ø!Çq===K–,™5kÖsÏ=÷ôÓO¯Zµêí·ßþío[__àÀ¨ÙмMÖ+®¸¢¾¾þàÁƒûöí[¹r%MÓ÷ßò}ðx<===ƒÚërrr$I~òÉ'[¶lyøá‡% _î‰DüñæÍ›}ôQ‰DÒÝÝ )£Ãᘘ ç—eYXœôŽ;îxï½÷>ÿüs±X\]]}Ë-·\qÅk×®½ûî»kkk7oÞ‡á짦¦þóŸÿ|àÖ¬YsÝu×]{íµ³fÍÚ¹s'Z_|ñ/ùK¹\¾`Á‚$;³|ùò¶¶6Žã8Žã¯“ <öØc/¼ð‚ÝnÏÎΆcRVVÈÈÈxì±Çžyæ™×_ý•W^yÿý÷ùm“7ö8޲²2¿ßÿé§Ÿ®_¿žã¸úúúåË—¿óÎ;?þñçÏŸÿÌ3Ϭ\¹rÉ’%<ðÀ=÷ܳlÙ²Ï?ÿ6÷ù| ³gφ=oooohhðz½555‹å­·Þª­­½ï¾ûäryGGG}}½Çã™;wnNNΛo¾ù׿þõÞ{ï•ËåIÚTÿ+À'ÔhéjµÚ>øàÿøGÔª®¯¯olldYvùòåðÔŠ+Ρæ—s², …"‘H0œ˜âí·ß®8‰––›ÍFÄüùócgÈ)ŠR*•ãzI’|˾F£‰Dè3v8ð-X–u¹\ápxïÞ½,ËòMp>øà¦M›>üðCHkÆ‹E‹UTT,]ºñË'žxÂjµB®€aX$ …B.— R7‘Hd0‚°ÛíƒA­VÇãñx`.DØ[þîBòhjj‚£ýâ‹/>øàƒóæÍ‹yž|òI™Læv»'À‰W¯^ýÏþóóÏ?/**bYvtt”¦iƒÁo áš1 ­·Û-•J †a‡Ã`0(•J¿ß?^Ò,‰~ó›ßtuu]sÍ5×^{m~~¾ÍfƒS ‡ô‰'žèèè˜5kÖÖ­[¿ùæ´t=º‰Ýnç¯jþ© Ãjµ’$i0 …Ïçóûýè”Ífƒ§”J%ÿI’}}}ÿùÏÆû,‡ÃQQQQPPðË_þrõêÕ·Ür \Õ‘HÄáp¯×«P(^}õÕòòS²?ûý~xÊ`0$i³Ùàñ¹sç>õÔSX‰D&“­^½é¬ .¤iz¬m$‘Hô«_ýª««kùòå+V¬ÈÏÏï8Àyìëë³Z­üyܰaÃE]„a˜Ýn¯¬¬lhhX³f ü J4zÑEmذ9~ñ‹_lß¾}×®]*•J"‘tuuÝyç+V¬hhhX¼x1ÿM;;;W¯^}Ýu×544|Ÿ8`óæÍn|q2[Õjå8. 1 ãóùÿú¢¢¢?ÿùÏ …ÂëõF:ËšÓ_|qàÀ¸’2´ùäºuë ÏÖkö÷÷[­Ö¼¼¼$}Î…¡½½=--íw¿ûÜk¼øâ‹wïÞ{eccãW\‘ŸŸW¢ ƒh=¤§§'ïòÉ'Ÿ j\P«ÕGÝ¿ÿ-·Ü288822‚ä‘H4uêÔüüüóü.&“I¯×·µµeee‘$Y__/•Jsssð×¶¶6³Ù¼nݺH$ò—¿üeÞ¼yV«u\]~¿¿¸¸ÎcNNÎðð0_´Gjîk¯½ö§?ý)##£³³3ê¬F£ÉÈÈèëë³Ûíùùùb±X,=z´¾¾þÆo,--ýùÏ~ï½÷"ÎtôèÑ#GŽÜtÓM¥¥¥«V­ºçž{´Zí÷†9-]ºô…^Üpà ÈDßÕÕ…¾”3wí9Ë»v8ŽoÛ¶ÍápìÚµ+++ë,R™¸¼I^£££ãòÔjµ‡cáÂ…EEE±vü‹/¾øõ×_?vìXGG$F ,Ø·o_kkë¢E‹hšnll¬¬¬<ëKí׿þõààà¡C‡ÚÛÛgÏžd«çŸ~úôéüñ¹à£Fww÷£>ÚÓÓóÚk¯ååå}'}ؾ}ûM7ÝôÈ#ÜyçO>ùäŽ;¢(NSSS{{ûŒ3V®\‡·mÛ¶{÷îE‹EÝG,oÛ¶Ín·ïÙ³Çb±Œ«(Ë2C IDAT:nòäÉííí‹eÏž=v»=Êr0mÚ´{î¹çöÛoŸúèܹs_|ñÅ)S¦üèG?úôÓO7nÜXWWWVVVRR‚¾Û+V|ôÑG7nÜ¿yyyIIÉÞ½{Ïî2[°`ÁÞ½{ÿþ÷¿SõÜsÏÝwß}S§NݵkWoo¯ëÔteS¦L®YV«õÇ?þñºq&Æ5×\òìúõëY–5™L>úèš5k,X0{öìÀy´ÙlÉìXLF£qþüù™Íf³ÙüþûïóÍ%%%åååGŽA†¢Í›7×ÕÕÝ~ûíùùù2™ Éa ÃlÚ´éÀð”B¡H ~?°bÅŠ/¿ürãÆ{÷îmnnþío¥•~ôÑGýýý•••IRN"³pŠ¥°Üí d•éáp8®X‡¿úê)æ»U«*•ªºº://Ïb±TWW/Z´H,»\.𦝹æ´§’$0 S«ÕYYYþ“¨¨¨X´hQ86?ýéOSRR E+,,¬ªªR(sæÌ …BùùùW]uÕx‡Ã0£ÑX]]––u¾éÓ§ÏŸ?ÆŒÁ`Ðï÷gffÞvÛm0ÌÃ0š¦çÌ™SZZŠãxFFFuuõôVÇ‹‹‹«ªª` †aZ­¶ººj™3fÌÉdN§S¥RÝrË-Á`055uΜ9ÕÕÕ:Ž ˆ3f̘1Ã0NW]]}Ùe—™L&·Ûí÷ûçÏŸÿë_ÿzÜŠ3IVTTÀÑ6›Í?ÿùÏËÊÊp¯¬¬¬ªª’H$sæÌ)**Âq<;;»ºº:yeÇq³Ù¬ÓéÐlÒ4}ÇwÀ±MKK[µjUIIɬY³¢Ö Žã‹¥ªªJ£Ñ1sæÌiÓ¦á8n0ª««ÇeU3ÅÅÅpçÆï÷WVV®]»V©T^tÑE°·Ýv\NE¹ÝîÔÔÔn¸!dddÀ‘_´hI’n·[,/[¶Œ¿©¼«°°v£´´ôÞ{ï½òÊ+Ãá°ßïW«Õ?ùÉOæÎ‹ãxQQQUUÕå—_Oi4šŸüä'555Qkf\@k.6“ÉT]]}ùå—kµZ—ËÅ0Ì¢E‹V®\™––6iÒ$ŸÏ·lÙ²;w Ü{ï½pö/¹äxÊï÷———ßÿý"‘zRã8ž••UUU5^+Žã“&Mªªª’ÉdAÌ™3§¢¢1€””·Û.¹ä’;î¸#%%¥¤¤-¤É“'¯]»–¢¨qCYYœe8)))sæÌ™3gNUU•Z­†+mÁ‚•••ð)K–,)))q»Ý³fÍš3gT‰²²²ºººŒFãÒ¥Ka+H‚ü~JJÊÊ•+§M›FDyyyMMͼyó¢N}?˜†aöBNŒãxIIIUUÕ¥—^ —®V«ýéOZUUE<õ‡?ü!//ï‘GºñÆãš…l6[OO3L‡piÐïu÷bÕWÝ<ÿêëû‡Gg™¶x¦Ïç‹»½IžTW!"uu@€ß ìÙ³çí·ß^¶lÙœ9s.\XWWgµZ‘î(᫯¾zðÁùË_._¾\q·KKK477ïÚµ«Û's“:—}¨«~) œÿãÈÌÌ ‡Ã÷ÜsOFFFkkëË/¿Œã¸0,Qؽ{÷}÷Ý7mÚ´šša4Îæ$@Àÿ:Ìfóc=†ü³ ÏéÆÒ)Š‹‹_{íµÔÔÔØìSã믿ž€QZ`N))))))Â8$€J¥‚AÁÆ‹ÒÒÒ ´”wpÁA`N à¿”9Åf²n+ à¬2§ÑÑè#ç>Œ\€üÏ"‘C¶};vì°Ù0^}<bÕ*nòd ÓqEEœàX)@€Î)sjkkƒµ$¥¯½¦#— ÖÖ†µµlÅÅG…`=pˆMÕv sjjjúæ›oPbæ– @2eZZZ„‘ @€çDsjim ø'\RW€8ûÌ)àä”åL,ZJÀ€ã¸Óélhhà—1p&Éd›6mºûî»ùåûÃ0XV• ˆÂ†††ØkfÏž ÓrŸééé>Ÿ/ªê£V«•H$}}}€ÊÊʦ¦¦@ Šž~Z”––ÂZ¢èHFF†ÇãuVÏ[Ÿ èõz½^üøqŽãrssN+òJ¥ÒÂÂB«ÕŠöøsšššÚÖÖvNW¹\ž’’ÒÞÞ~†CwN‡÷ìB©Tæççà ѨÖ×9d@ff¦Ó録ãav×]wULû¦y8š9H’‹Å@àü×›ù$£A‚ ÔjµH$âïü3@( ƒ‰Ã0¯×›¼ ++Ën·»Ýî²²2XœÇqÇQ TªÙzZ455ÅäÏݱcMÓõõõ …B§Óŵ‹‹={öDiiiaY–Ï® ŒF#˲ˆÐÐ4›Ê¹   ££c¥“EQ‹%--­©©éðáÃÉ4ñx<ÃÃÓÉ …P½]xjhhf¡M†.Å}ßÓ¢¬¬¬¹¹Ùf³ F½K8æIKKóûýQòŽãpØa ¨âââãÇÿWPQ Ã:;;»ººÎ¾ÞC’üõ)‘HÌf32)ŠŠD"ˆè©T*•JÅqIq4'„;w’2C\zé¥ü¬Ï@`\ÕoD¡®®N¥R¡JzÉ}–õõõð‡B¡P©TƒƒƒgH»1 “H$>Ÿ$I‚ Ðüfgg744@þ—$gŠ ƒÁàõz£Ê/¢J˜[,–ãÇC:‹a|)x$ЦsEˆD"EQ~¿ŸOpù7ä#‰8NŸÏ'‰†á³ùÓb`` îq•JED2¢=zßqáèÑ£%%%>ŸªM4M³,‰D²³³ÛÛÛùoÝ××'‹ ‚à„æÑÈŸ•šd‰gä¬ÈÇ^¯×ívGU†ÇÏüþ)))'‰øý~Žãü~?_ýÍÉÉéëëCr[¬"Ær%¿ôÒKëêêWz'IR©TÂß^¯}{F£þðù|èµáÚ‚_,b{.—+±ùE§ÓÁ‹Ãá0Ud2ªWjºÄ}V$AŸ®\.§i:êþ@àlí±Ñ4­Ñh¢råA€X,–J¥“&MbÆh4 {{,œN'Žãr¹…D;)æ„aXFFârÉb€q‹•±,‹2³ÙŒ⢡P]ÐßßR÷ççç£ zzz`‘ %‹QoÑÂâO¡ˆ„>{…BZ À>ˆD"”žÙf³AÇqX0ò<´XM&Ôí0 k9éR¯Óé '—ACÀw‚ àn­H$’Ëåü=qOI’„Ô–ñ¥iZ¥RAmcÿþý n‡e2™V«u8PìCrX\ý Çñ”””¸Ò$TeÔju8†‚ÝÈȈßïw8 ÃÀSQæ2³Ù Å^¸°£j;a2™ø¶ >B¡Ðàà ˲P¥€eŽõz=¼aìÝøÏB¼~õ€ƒAd~H’ŒE|’!¬Q³Ÿšš:–Ý××—ššÊqÜyØ[2™LƒƒƒH4VĸãŸ@΀\šìâ Fz½Þívóë h½†M`ð}>ŽãÈwæEdÅNž9!SÛi™“Éd‚£ -lÈBˆHÿ‘#G oÐh4]tQ”¾…ã8*Ú-‰Po>Ëê¡ÜÅœär9Rã¬V+bNèV~ÿ ßz ÃÐÁÔC£Ñ딸\.¤&ÂuÜþ툧žz )”¥¥¥eeeï¼óΊ+ªªªþ‹ÞB,«TªXá=.†††`n$}Ÿ9Í•Édyyy©©©†ù|¾½{÷Æ*@F£Ñétò é Ãð­y§}$Š©ÕjŽã•ippP©TNŸ>¦éôôôP(ÔØØ844d6›¡õ†/Ã¥¦¦ŽŽŽƒAÈz{{cíÏÇAiU©T’$E ¡l‰D0 c&³,‹èŽãQåÕù¤P©THMbË œ¯¸§†I°;Å_°¼^¯ïë냻÷höá)¨õŽu«ÁÁA‚ ø[MÌÆ—¤Íf³Ãá@l’D"Q(gþS|„±–PÚèzzzÜîn C´œ’ì^Á²’ 8O<ñÄ /¼0wîÜ¥K—.]ºtÖ¬Y­­­o½õVË[¨u$—Üib8Nl¢ÑjµZ­6ùÛJ¥R•Jå÷ûe2dpO4''‡™ÛíŽÒ³Tq’y ˲ˆIøý~Äärss¡¢V«+**t:]KKKKKËÈÈ4Bç…¨nØl6–eÇÚDaYŽU J¥jµP^^ž——‰D;•H$r:ð†H)Œš¾š’'ë¶zñ†Ç㠇Ç\þìÃSv»=1Ag†oôƒ­Îpé†Ãad³AÊê¡Çãñù|üŠ]Nci'‰‡×år%î<¨£Áÿ|bW5bZH+àÏ~”#†à’w!ÿýïñ7ßLêKÛ¼œ´Lž9ž~úé_|Ñív?óÌ3[·n½úê«gÏž]RR‚.¸å–[ ·taaá믿~3§fU•J%“Éø¥$· Ʋ¥Ä¢¨¨èرcLÛív«Õêt:=êt:†AÒ¥Á`0™L€¶¶¶³bæ ªýýý………P-€t‘HîIÄ}_Dø†ÄºšÃဴ^$uvvæää´··‘’’‚¬î|²›€ü%v4F£±££ÃívñºÀb± $pã‚­"‘ˆL&ƒæDÈøoŠÆx]–ôz=†ag%T(‰Œå™»ª§NzèС±¼Ï.ÆúFòòòºººÂá0Ã0|ƒ~“$i±X€k·Û“±*ÉœÊËË¿üòKø[§ÓM:þ>vìXì´eee¡Í›­[·"µR«Õ±¾é¡P‰?ˆ!÷öö"›ªª*È`ù†Ý¢¢¢‚‚$ ÀÃÃÃp# ðvzär9º’ 8,ËÖÕÕ!u{Þ¼yÐ ÅIxpÒ¤IYYYQ­ z¯¦¦&øEÅU‡ ‚@WŽŒŒÔÕÕÙíöX§”8HÂÈà”J`2ÅÅwë­·îÙ³ç‹/¾Ø°aÃ0 éééˆ9­Zµêƒ>ؾ}; ¦¦† ˆW^yå¿…ßççç÷ôô Êåv»!I=m¼dqq1MÓ‡Bä5ê‘H”••ÕÜÜu¼¥¥í˜?~¼µµ5++Ëd2A)Øï÷Ã8§îînH‰s&ØO~oáÍóúýþ––‰DbµZ¡AF.—K¥R§ÓYZZÚÐÐÀqœR©Ôh4]]]üýÔ±ºA’d^^Þ±cÇ0 (((¸öÚkƒÁ V« …B ,˯áªTªúúúÄ"yâ·ƒ°Z­v» c7ÏÝÝ݉­Rˆ8º\®±´j·Û-•JSSS£ÖLTo£†ýLü/c¬É…Ç9Â0Lb•H©TjµÚÄq ±OA þ™ 6®³³31³‰D"|?‹$ƒ4ÆdN$I¢õÄq²£ï-Š #ÊŽ7–eQ+´Ék"ˆU Ñs)Š‚ÂÃ0èå“ãeÜ­ Ãønø,þ•ü§Ó4 ïõ,x ¿WüÑà ~Âáp²–âäìQ\M 8«áhÈá>®åÊårÁ¨pª›þHCÃá°Á`Àq|hh(Ê,‰¦>33áŽu«ÓƬ„B!þ‡£šà^EQQQcc#AF£±¯¯2°ââ⎎†aPˆ AðI°<Š‹‹›››!W€GÒÒÒ CGG‡Óé,))á{BGÑ·Û¼FÁÉø¤£GÂxU—˧‰w tìØ1¥R©V«C¡P~~~VVMÓGŽaYV$¥§§ŽŽ’$922bµZáPÇÆÆ¢0Lš¦'MšÔÓÓ£T*Q $É¡C‡ _ t*{i‹åÈ‘#qmJ§ÕHÐ'Ì¿˜ß7¸ïýàš‰í9Z3üaOÌÏyyyÝÝݱ;7ÙÙÙ###ÉØ®ÑG<ÿš´´4ÇÃM¢Z%ðÑOFãG×$O-ì9]´5IætñÅç¿o¿ùÍoî½÷ÞiÓ¦!ÿÉ EAØáp$ÞœèêêJÞR‡Ã0¥R©\.§(*==$I(H¥¦¦æççSÅ0 dl£££|¯ÆÆF‹Å’••E’$ôê´X,eeeгF¥RÉåòXÍ ¡¡!ómY½½½LKK£iz,Î&“ Þßb±Ä}¯mу\.×àà Ïç€òMÓõõõÐã)kµÚââb¬÷Yf³Y£Ñ@–ì÷û½^/ôʉD$I655577“$™™™©R©222RRR¦M›ÖÙÙyvý`333Ñ[ǺøÇö­™q û„ÑÒÒ×§ ££#Š3¡Eˆ€ÆŸŒŒŒ(·¸œ‡T*r§Lra$N7–ëi²š“Ãá@á´È§.Š&ÖdƒÁ “¾3EQH*çᢃü l6-á§;–^¢T*‘7J\Æÿ¡p tH 7ÿY.— Z9ŽC£AQz/³µ"Dã<O¬š8>¶Çà¤Rö¦›@¼?ÁœNz0žO¼ûî»jµzÛ¶mh@.@„B!Æ!“Ép‡ó¥R©\.×YI•••Í>N§³¥¥¥££C¡PˆÅâ‘‘‘ÞÞ^>u£(J¡PD…{C¦¥P( • Ç#“Éär¹Éd‚>¢±Î¾8Žk4š »¹óÍ_J¥ÇñXYX«Õ&³@’¤V«U©Tjµš¦é††…B(ü~WW—D"innæ“ÎØguuueeeÁMø¶¶6¹\.“Ɇ††Ôj5ŒÐ4íííðܽðz½É{%ÖÖÖg'Õû@*•Ò4Í8†Q—µ··ÃЂØoA¯× ðµ@‰DÂqŒ¥=“xjZÎ €á̰3±2â˜Ì©½½½²²±™X›f ˆµ³G±·XûµZ­FyN»ºº D‰aò‡iàoäJ®P(øÛòÈtƒ8°Z­F‚üÐÐP¬`%‰ ÁŠã8t>ºR©,..FÒŒŸ IráÂ…H`Aëuòäɱ®ägº? ™SUwóÍÎÒ¿ôÒK÷ïßÿöÛo^~ùåµkׯÆ_ 6=½^'Ž¿år¹ÛížsŠŠë$"55U©T"•Úè E8æïR£7b¥“p8L’dEE…X,6 6›- mÛ¶m,Þ€a ÅåLro9 c…îF…Å7¶àxfffaa¡×ë´ÙlK¡€_±X¬V«µZ­Ífóz½èx,â-y¤}HLDTjkk3)))CCCçÎŒ;ì:.*Žjkæ¬æ …B°‡0]ET?ÇŠ´µX,‡ŽýbcfE"L’Œ"ŒÎ†¶ LÅœø×+ ·Û­T*ý~ÿ8˜“€ïPBÉÌ<ÿOþÑ~4uêT…Ba؃>˜“““››ûàƒN™2¥¼¼œ¢(H;yä‘n¸á‚?d‚€/Mç‰Ó‘$€Ùlæ›;JKKiš†æ&>áæ+Í$I ·ÛE¡ «˜F£©®®‹Å‰D*•ÂMÇÍf3ô#W*•|¯9†abóÍLL :á)-- ðp8 3³9ŸÏYojj*¼ftt&ȱÛíF£íK$±Xeh%B¯×»\®ØS±B1òƒH$R(ãb6³hÅFÇUt‡N§óx<ãÕÑÍáƒNû8þrêïïORJƒâLô7®W†Û„ÃÃÃpÇ. ÅÆêÁ-Ʊ<5ætáa0hKÓ@¼“\KK^/öé§ØW_aMM`tÐ40›¹éÓÙeË@Œ‘€Ó~HPŒÈÈȈ’×úûûY–…§ÚÚÚb*Y–…ÛÂq)‘L&ƒKÉt£¿¿ÆŒß|óM8†V†a ‡BÞXärÓ¸ª))),Ë&æÐ;¹§§†[Át> ´´´´4·ÛÍ#>›‰büF£±³³S¥R…Ãá´´´¡¡!¿ßϲl”t˜ .Ãðð0|ÇØVg8ûz½*£££“&MjkkcF&“éõú±dùX®Æ0L’«âB­VK$’r†Ùlöù|‰#Ï&`W°Z­±ƒo6›½^/d'É„`'3ÉLŒŒöûý±ËI0ë]x€Þ†}þ9¾q#Æ_%hoÇÚÛ±üƒ½ývîÆÁÛ¬þ×}à„B‹ è‡¡ù;î&¶Ïç+û<%-$$•••¡Q|ò5% IDAT]»v‘$ …œN§Ýn—Ëåû÷ïÏÉÉ9vìd„£Ñˆª®ÀJ¸0Á±Ýn‹Åcm¡%³›ÒÑѬ[0Nb¯ ˜Ë•ºê!:G’¢¨ììlè'522RPP––f·Û“IJËÍAkž‚bbffæèèèXì'ùú³jµZ&“566fdd0 ƒ*6Åu’L|ó¸¤9ÉbƒQDq‡}¬Î€S=“ïpooo\Sò1AÑÙ nˆ¤ö¨Ðé  ¥¥E*•šL¦ØýT2u ©;übEAÅ}BP‚@/ŒZ‘$‰Z‰Åbd÷C­`*hô’|e9ÊZÈ·°¡´ªü1â«8° l‚4Y¾Ú÷þEÁW }K8ŽÃ¸ÇÑsWÇjiüèc~g¢ìËc)øHB$†‡`G<÷\¸ª*tÙeLz:îrQÛ·Ó›7c, ÀX–xþyÇ…–-ø ˆ—¸ÄÔ´…Ñ”üL“É+‚§b+áòÏÆ}:̳@’$Ÿaĺ ØîÂÂÂãÇS¬V+ÌP …ÜnwoooEEE(‚ñL|c © c%9DqÇÉì^ð_„ÿ^qÃ3A¼É¨ F“&MjooD"­­­ðb–e[ZZÚÛÛlðð·$ €5™LEÁÃþþ~š¦¡6–Å)–À¡Z½‰$ NØû< &Ï™Î.àš‰½drퟶÉK‹D"£Ñˆ4ãìììãÇ—––ö÷÷x½Þ¾¾¾ÁÁA‘HÔÝÝ}&1ÑAð׌`Ö»°sÀð.psç‚¡¡Êêêhxå•l_¾sç‰yDz½ÜŠÂ&c6Ik9–NÀ—âÕjuòž±_>rÒëõ)))ÐÑ6–ŠD"¥R ¥{È¢Ôj5†a vûß%W«ÕŽŽŽŠD"·Ûm0’,ª ãsãÒqTºóo¨Ñh`¸U$ATzÛívè~;øZ­6Š®iµZè!ÕÔÔ¤R©øi6ÁÉ¢ãJçB°µZ­Õj=“è]¸}†U}'€drJ%~‘\þØÂH[$ ÁRyü)†¬.--mÞ¼y ÃAX–L*•ÂRLpdP,vò€kf|•pœ7·´œ¬2­f-YÂdNbÏâöÛ…1ç¾´ãiÓk&?>†FöööÂìGP Ñjµ0a9F©T*D2är9Žã0α(X=Ö¤©T*¡g¶N§s:}}}…FòëyÆ%èqãs¥R©B¡f&ÖðJî"þ*•J1 KOOGI“ùˆÝ3óù|0¤×ívÃà'¾Š|j ýŠ\ âîÏÉåòäç”$IXÞ—0ê•cC°/4ŒU$†1ñ™¬=–S(ÒétJ¥R*•ƒÁ¶¶¶ááa‰DM‹°ø$Çq2™lbåê)ŠŠÍD&ç+ã¯TôÃ0t;~ˆjÅÿ:;;á¼ò}üd2*ˆ$\±XŒ6ÐNŽã|3ÿè+å§€ÏKPBÍùä UÂ…æt$¹ ƒÇ¡ƒÙÙÙÐ1îŠä_™@â£(Š ˆ$ãüñÒÒS®koÇŸúúú‚ˆµìMLº„Nt±æ¬ÄAŽü€J˜æ~À0L2%%¦ÖF+D.—Ãܬ±É‘N§F£Âioo/,ÇÌ'¦)))(µ]TWá†.ÜÞç÷Ã°Ä f,ÕpxxÅ{ŒÅ‚0 Pt8ÝÝÝ^¯W£Ñ$¹¶9ŽCV;hí!â´I+ Ûv¹\ƒ%2H&lÇqDÍb òÆ*¦±ßxÔSøã÷†pö†IMM@0EQf8¹’q1Vº ÄQŒF£Íf‹D"|v®Õj¡#+EQv»½»»›¿¯†Þ%ê•alõi£Êhš–Éd±NÎd9}BQÛ§Èqí!'š†ÃaÄ ËfÔ#2y톽Hø‚˲üoùµ#S¬R©D߇††óÕXs»¶†‡‡cÓµ¶¶Bß'‚ Pªž$9æææB›Hv;ɬ‘H$Y›ƒBÁŸ3îÔò©ÿ³€¾Ëg…9åºUÅÕl6ŒŒÄ®±p8œššÚßß]ÃÑ— ¿‘HÄqŠ=dî9¹Ýn¸Ò¢Âá¾ê€V«åû.ÆÎ¾F£A /++«»»›ét:aqñ@ pÚxUø9@ýÀår%Ž‘äû AÀ ß$™ô«2 0 ,j%“ɤRéXOgVqDމ+áò­¾èw0¤(*%%e\iD F¥u£nWâ‡=œ˜q¼áÃq[s™uÐjµJ$•JµcÇŽ@  Ñhb·ˆàJ‹j›¤{ÎXï%d%¿ðÀ²ØÎØ[o¸²U”e6™êP’QIq<77œê9õ¥AÕ‘¶¸4×årÙl6x*ªL*Ô'²³³‘ º»»ív{ZZô?r:üª¦ü¬6Ðé9êY±Ü‘ïò>::ʧ:N£Ñ¸ÝnØ*™[äR˜$õôûýPDÐëõyyy‹%ֵī…*—ËU*•ÏçƒÅd- Ì7i:EQHúäåå¡ß~¿î'Áª»›}8e‰MRJ¥26Ù1tÓ@²µÙl†ó× =¼ ‚81±éÌcžÄÌžZ”¥7--­§§‡a˜üü|Ng6›M§V’‹ZiHJ²šFÜ‘öœ.8΄ß?¾m€{ûmfóf¥“E‘‰3Ë3ö¿Œ¨HÛÓª¹‘H&Blc¬+᩸ÕZ …‚ïÁ yT*…r·Ùl+Y'Žã‹ÅãñŒuA¬ÌF“²#z‘L¼êXÁ¶ ®G¹_ûúúT*U\Ù96_- ÄŒ4ÔápxxxQ,Ëàà`ÔLÅòN©Tš¼š,8qz½ÇñXë™×ë}P8îëëCÇ¥Réùwš’ôÛ‹Å&“ .TFc4Íf3T£Ýn·L&kiiAÖ:÷öí;³+±óþšéî›Î=ç¼ñyŸ‘ýèGl¹Çãét:*³èÂ%HðrM& Ô•~ýu M766¼^ï… @Üo£ÔétÑhTªŸÐª@EƒÁ \ðíñxPà „î_YØŠ VysÀm˜– ¨^±B;ö›'À¨QÁËÒÒÒ¼+A,K½^ß:[i;P²Ù,¬¨v»Íf¿xñâÜÜœ×륷o±XjµZ?wöìÙ³:]+¥¡”“Ëå"WšíxHwP­Vi ú–‹‰¢H\´¬Ç@gh6›˜s`‡£™J?v:È.jµZ¶EºÔ cûíÃRà aO…d& *²X,,/M;6y€øƒ Ô·¢_¨ÒËdÇõcÝU·»ûþ÷kÿßÿƒ1,h4âûÞ×ù—Ñ Á‘Òþüçÿ3ŒfsçÃÖ讌y±¾¾þÁ~ðâÅ‹‰Dâá‡þÀ>ðæ7¿ùÞ{ï½ûî»ÿ÷Ÿz[¼ë]ï:uêÔÊÊÊüÇ`{ì±Ç"/”îé¢(Z­Öf³i·ÛÁB´°° ^3aŠJ7Õ }ér¹è Ínbbâ†n@ÄÔ ­V«X,bR­¬¬\{íµår™T¬Ï禶xè{‚«(ªI±–>Ÿm¤?®×ëês6Ò”N§«×ëèD‡¶ÈV«EšÉl6#0Èê9ÔZ­ÖJ¥"û:ùœžž^__çÂæÒrîu³ÙlµZ.— ïBÚ¬¡c³ÙFGGé¡Ìf³ËåB'uÙ-žþ^\\¤kíW9ÉápÈÚè¯Áe7.“Æ×h4úý~®®®^¸pÁd2íîîrÜè>Ÿo{{›­}à†Eg³EN—Ëåd5“’r¥S³m~Hççr¹o~ó›øûèÑ£TÅK#€<(½D’ö*•JX{‚ Ì\r¬ÃßñxœJÉéf ƒ4ÏAD·˜^Ð(”ûA *òûýtˆ«5Ïl°”J¥¤¥ä²R*•dÛ€+¶wë­]»]û÷/¤ÓFX_ßøÆÞ±cB.'\Ú›zÃÃ|DÄ#.S~ô£}õ«_½ë®»î¸ãŽW¾ò•ï~÷»o¹å–¿ù›¿¹å–[n½õÖ÷¿ÿýœáòÁ~ð¯xÅ+^ñ –ÿéù"ƒíìA`ÃÀ8µX,ÇŽÛÝݽxñ"vº~D®ÒÓjú Þ8A³¬a°9ƒ ÷È‘#6›M§Óe³Y¯×ë÷ûYžõ-*•JµZÝÞÞ†‡¤ÕjYÔ¤Â²Ê ¡fYͤæ‘q«²û,îdrrR«Õ ©çê5h@ÀêÈííí¡¡!¿ß¿ººº_/Öd2Y,„¡r¹ë²Øív—Ë•ÉdZ­½YƵà3™LÅb‘Ý‹;tX&“Éår\ ¶Dši ×’eÝ%t6âoý’Ö¢(^ñz½¾R©  R*•Òét»Ý6 áp˜l²ü¹Ü{”?ƒAÁÅ? ë]•Á½—½¬óÀÂ~ üä'Âü¼fgGøå/5z}/éMO÷^ùÊÞoý–fP>àòío{ccƒCÒÝpà ¯~õ«eAþÏ/ …BÔz™mÌ&? …B4M§Ó{{{ÿÛŠW±Þl6›BŸõ¬<ÈMoÔëõ\.Üz‹ÅÇBÉd2µZnü~ìî¿¶¶ÆrÖô+5dÑ œöêt:ý§ u.„´µÛíF£ûìÐÐP&“‘*¡X,f2™¸^8 Òo׆ˆŒ5”+=peagÏ„™í$B6›…Ù­Ð%hccC§Óy½^jW‘ÉdHèt:d¡&&&Ö××)ÿÍ;› …BÊE¡Òi tö@˜°fPŸò«ê’Éd8ÞÙÙªT*Òæ÷@þƒÁJ¥¢&ªŒÇaÛ‡Êéy"Fcï5¯é½æ5Ïå5ÀÄÄÄßþíßr+ê…!õz«·Ùlö[<0÷œN'ûøˆ×¡,ˆû}"‘èG2-•¡¡¡b±X«ÕÐMJ¥’ÅbÙÙÙ±Ûí€ø”Ëår¹ŒÔ+íõ©¦OL<¯Õj±XŒmëW«Õöî—LŠÇã°ˆóù<é0ÀK‰D2™ôx;;»»»Ûëõö´ìõzýMI9e­Ãá ¬8áçõz=Åâöööh6Ó|D"SSS܇¬E‰D(]A{Ûd 6÷¶ÈŠÞ:_‘m Ž% &de¯×£ø›Óéd od­?–u0ƒlmÉ™3gðDìhlmmÁˆîv»\¡T±XTÓçW%×_ý[Þò–¿þ뿾xñâ+.•Z|ÿûßÿw¦:'ÿþïÿîñx^ýêW_ýÊIŠ9  ¤ÍºÙlV*•J¥BÊ`ttšŒãš›ššZ[[S¦ŒÅb¨¿§­?N;Î@ žŽf³Y(Μ9“Íf777/^¼¨Õj/³ýG.—‹F£z½¾\.OOO£Åc=&UN L¸ìWù|žˆkÙ{Ã'èÌÔívC¡P2™,•J•JÍÉŠÅâeê'Í3{€‘*’ÖJpü¹¡P¨X,V*Îëe[‚êZ¶e YÒ —hÈ·¶¶L&“Ãá`Ý/öZØd0Uö ¿D"ù|¾Z­l-Då,âñ8Ú”Ð^¿ç`ø_ Ì[«ÕŠW¬y&|ssS§Ó¡ã‰ò©¢Ñ(ÀÝ4ö§œÈqc5 é­V‹p9Þ„ÔËs:´Kÿ@(–ÊH÷ Nj—fÙi›Í&éÖC§ 5CñYÒ©Ýn—öôƒ¡gd™¨¤þ8K(%ÝïG<ÇßdûHM˜V«% ˜ÿ•Ëm·ÝvæÌ™O|âŸýìgWWWï¿ÿ~ŸÏwß}÷ýÅ_üE"‘xå+_ù¹Ï}ŽýýôôôÇ?þñ~ô£Á`ð–[n¹ªžE«ÕNOO£³µÕjÝÞÞŽÅbn·{aa¡ÙlNNNRur>Ÿg[0ЦCëmtt4›Íbgçjš×××¥TC¡P­V“µчÌ#Z…š€:>}zjjªV« …x<>55µ¾¾îõz766ÆÇÇ©P Ý-vóÍÍÍk¯½öرc§Z­>þøã6› ýú8? €JV  …p8Üét’ãáÛL&ƒ¥Fs¹ÜøÃ©©)ì°ì9²¾¾~Er$Á`õ†9þ\Ô’MNN®¬¬Œ“½È½»\.Çv–’Fk].—Åb¡Øí¿­VëâÅ‹ Õz—ÃÂŽ4Ï¥`Šqjj M ñÉØØØÆÆëÇÐ=¤R)v²U*6|ù.Íz­¿üå/‡††–––Ô`ec°‡a½C‘—Ëõ¡}è}ï{kX¼þõ¯¿é¦› ƒV«}ÿûßo³ÙNž< ËÀd2ýÑýÑïýÞï™L&¶¾ñjn·‹ª¶b±ˆd{{;™L]Ao@@)q- zøpmm Oi%ºlq³Ùy£Ñarr’¥€‚}áB¡P>Ÿ÷ûý?ü0Y6Àë”J¥n·K€q¯×k4¥© ‡Ã1>>¾³³Ã~U*•.\¸0==MåÎPÔáp¸ÝnÚ‘ PIhSômR¶&¨òööv¯×›šš³*=5l¾……üL ݹ*Bj½^<¨½¢3 A¡P(•JNgqq_ùý~Q)Þ#Âììì¹sçb…BAVÍØl6¿ßÏM°r9ýòYuÒl69öêêj¿ªtNS²½Rdjjjee…‹ÚI{â³lA …B¹\æ€êýDMa‹’r¢M‡-Ý&ϩߠ°á/)­¯¦é-ëµÐåd=':Ñ^öƤÑL&Z]‚ P=!kì(/†^¯G›Ë„K´N‡îãW­~2›Íœša‰ñ;Pã{u> Ö!1în·^¯GGöì6›ÍçóQô‰æÊý…„Ó(EZ¤Ër}}Ý`0äóùééiðɺÝî™™™ÕÕUØé¸ º‡l6+ä)‹O>ù¤lä»ßýîoüÆoüò—¿4™L^¯ÏŽ;äü!\K§Ó“³ØÛ›}XÀö¥£±¼¼ <ïèè(*›#‘H³Ù¤ñ—¶0PÉi‹ÈÇ‘#G¢Ñ(|Mð6={6‘H,//FÌ[A€Åɸݶ×ëV¥°±²ÄÙœû«ìÿaÕ³g–Î •énª/ƒd¥ß±F®ô¼_öQ£Ñ„Ãáv»°çÌÌL?$»ò´Q%åtÓM7‘–£‰R*•àÇõëÚò»¿û»4p´Ùþâä:ÒdÄNëp8(oéñx “X°z&“¡ì-˜r¹L&Q4 ZF£‘t‘ê...RþÉï÷+àá;Ñã²L¸§NR™ˆÅbÀó«é¶y(φ€ WÅH$ÒÏθÑ@ˆgVá7Rü£BÆ%‹Å¹¹¹‰‰‰ùùù|>ÿÈ#ÈnÇV«õ¤A¥RéÔ©SÛÛÛ‡ŽU@h¶Ûí¹¹94¨×ë~¿¿\.+$Ðo©ÕjIYwQ°·¾¾N)@‹Øð~¥R¡kižÉiK \£ÑÈÕ¤€2jcccjjÊårmmme2™ùùùv»½²²räÈ‘£G¶Ûí|>_©Töööð¼h¥…;˜@óÉ²î² \¼Äx<¾¼¼¼_²ã+%Ñhtkk«ÕjY,6ûh6›)i¢Ò«ët:`OfϘª^eŒðaWòCyaŠ^¯§&ŠP‰7›M…Œú((yÏ¢(’i%5Bõz=×~[V’ɤÅbñz½ Ü 'r¹\@…Ëx.ù>P …B2™´ÛíÅb‘6Dé¾`·ÛÙN]F£yeT7(œ¿X,v»]ôÂà¾ZZZÚÞÞž™™¡¯vwwY eô¨)}pБ*Çø¤V«K7“Élnn&“Io±ûÿæoþ&šåìîî¢Y™ª ¹`¯âv»¹ÙHõSÂjµÂüõz½\·36%jºååeŸÏÇ]ñY] ‡F;­V˽,—˵¯GN§Ó¹\.ŸÏsÙ#‹Å¢fÎka„•Ó¡¼0UCì'è6ÍýÌétªßâM&°ñ©TŠü­V«Ðþƒí“B>:W¦o·ÛÝnw2™„ÂãNh6›u:]"‘˜žžv8 ˆ´•[éL&´o¿=( ±ÙªEºyöÆèÖ××Ýnw»Ý–â1a s_9Òî—Ëe(§ÓÉ*~”´`‹§èûà¹\îܹsO=õT 8vìX8‡Ãè;…*€……¤è(\Ën·Ó«±ÛíÜ`šL&Ò1¢(RåT?Éçóи››› ¡*«ÕŠî ‚ (DÌ®øZ`œ¢A\é:ºî÷äf³™ËV .ìx&y‚ôföÖÛÚÚb{A’¬­­Q)9¥†††`‚@QQô]%]*M·X,Z 4K¬V+PÁ`6ZÏN‡zÂ’ýU­VY"x¦…BrÈÑh¶R¯×£¹ív›WWWq ƒÁ@qEY·T*Ñ2£‹6 úÐétâ ”™ÇÜ]XXèg~nll(Àe ¤R)Ζö¥–-â—òÏ*¶—ËÕl6I9µZ-n—ái·Û¢OGÉ¢,QV‹æN˜N§c±W)z€¼E6›õx<ŠËb± Ô-“É(Ÿ“]Å©®t{<žgZ^ IDATZ­†ŒÀöö6Ò](ÖPvö´ápXº]‚Ë‘þ$ÖãñŒÛl¶•••V«…>F½^ÕóP±Üs¹\õz·'Õ©l%¤Jd5‚Çïv»ì+fÙ“ûI$Ù"·.³ˆŸ«@€½y5̼Ñh”~æt:ívûÀBS%å´³³#«œ¶¶¶¦´Ùl¤œØ>@l;eåè8ýM¿¤ÆM~¿Ÿ³¥ la]T«ÕÒudÄ:¤Ž/èt:äK†B!ªÿ~ú駉 —²S²I`Ù´D£Ñ síµ×bèÚí6)'t¬T*R“¡Õjét:no=”} õNÔh4‰Dâü3{·+¬¢}¥±ÕZ­Vå¸<Êd¨>Íf³ÆF££§Åæ2::Ê>w”Á`@‹³OÁ!]ØDŽ& æóyvWârKR?Àét¢’Èl6§R)¤X¨£Z¿ ±…øFCº^dq¬­V«Ùl^¸passS„h4šJ¥²Ù¬BèLÊ)¥¹ÔØÛ:9|öf¯ÆØ«‡ðšU¢~¿¿Z­Ätsq.ij4 ¸­J9Ês&hÌ50np(*år`†jdàRÜÛÛÓét0ƒF»Ý¾œÍ;£ò@äŠ(%•¢/--)”rt‚‰DÙriTð`%Ñ###ˆU´Z­F£Áö(.— êÖív‹¢ˆqµ'J¥Òã?ލ#`° ÜbôWäF•lAg¹}íÈý„Åçty C0” œJÝ,)°ì2…&?º˺Ú¦›Eb¤ÓinBpûP9]uº˜‡r`¡]ær0²räÈYW .;‹êe ´-r­%X#¯P(´¾¾>°é‹òsu:Ô¼aKŠÇãápØëõšL&Is233377'Õ[x³ŸŸ¤2„ÕétÀ)Š1¬ÕjÉd’¶³‰‰‰••·±±xF©T"&\»Ý~þüyéQh¢\qÚ¢9ÚDI/ëq/Kúй"·ËõsUű±1ed·Ûm2™’É$ ÝåÔj¥R!ŸÛd2)0/s’L&¹s‡'{!ÂtKS½ìt:ÜV¥œ^ö²—Ñë´Z­äG£QÂ^‘‰Á’Ð}„B!ÊèT«UÜ“Á` œªÏç£$$µ¬V+…wÑ×b{Là±»Ý.]‹í¼‰Dð¶lÆétR‡´ë®»j¦>77§€«Ðét·Þz+þ^ZZ’nUn·ûĉøûÂ… jeØÙ£òPÁXž~úi»Ý~Í5× ü從ø1e.¥ÒívYÕh4Z­Vs¹œ?©R©€'ŸÏ³D3SSSÒ &½íX,V.—97‚vŠ­­-»Ý~æÌ™z½n6›£ÑèÅ‹é è½DÿÕ å † „ˆáW#¡^^^æ Ü3"ˆ —––‹Z__gÛÜìÍ»\.âA[)wr©Å ÕjÝn·Õje½îkén‰D6›ؼGú¾ÔÄW¶,+^¯7 aæôK¦R)vÆÚÚ¶Š‹}›RG!PÉþ«×ëÑ›ƒ{Ë„¿&–ág¼Ž~gçêyˆ|–˜^QÌNÝYzY¶Å‘´ý3}(ôõ³Ÿ.ª¹”Gåxr‰–½œNNÔø7Y -FÂï÷Aå`ÒuÄÑ«©J.»¹FößÍÍÍr¹l2™ÔLcbþf‘àb—þøøñãZ­–-,ÜØØPH˜Åb±•••r¹Ün·kµÚÎÎêª!óóó¬'”ÍfÕ$«è‘÷¥¢&''?ÎvפåÖétŽ9‚¿YŠœ ì) ‚G±Ýn7‰Ñ„\ä#4ø€/555¥¼Ì­Vëë_ÿú'NH«á¹©Å¹r¥ž«««²šI§ÓÆUx®~µ” šÉl6OMM!>¦p~Žá3Ðív?~œ}jÙW<11Á=l?dY]…®Qç2‹¿öx<”6 œåPž§Â6q¹\l‹n·Ënýf³Y¹ŽüâÅ‹œ'Áptt”jj ÃÃÓ““ x‡Ãq€Žï•JE«ÕR(b ¬¬¬°¡§b±¨&W!ÝRo`몉ľN2??¿¸¸˜H$PUnIô-…+•Š”A ïQ¯×[,–d2IʉDü¹šK¥occcc`2 D¦ês–T‘îQø¥Ïçç@ƒû$‘H †°w‚1±G£Ñ8ÐÚ¦¢Ñhr¹ÜSO=ÅþÈÈûZSr~²€‹Eå”Îf³ÒÂúŠ«©Ñ)xNôS‡ÃA±84Úâp"ð@çy2‘È:#{“Š æN…yô¡(Šäp”J%»¨³†iQÁù¡4:d>t»]ÚzÐOGѵªÕ*aÑ­V+îToÒð(ýXÈårÑsÑp]=u5¿¶€´Uîåìv»ëõz¿ÍÈf³5 ÎýåNˆö²œ>ãÖÇO‰Dæçç÷K½ƒÈ’´ÅŸÃá(—Ë ýVé$Ùl6”ØU«U<…rUx µZÍn·×jµ@ P,>é碡‡ ·vð].—Ç㙟Ÿ'âZÜ’%Ò×GT³pa±r}>Xˆ q¹‚[·Û].—Ïœ9ÓjµTV]»\.Haû2™L ôŒ©TJZÍhµZ- [ Žç:@Ùw£Ñ £‡lŽØÕÕÕ~“0“É`¸˜nôz½ÒŒ”F£ÁÛg?§‰¡Ê6RP­§N"ó”õ™×jµ´Ëïìì`hA`¹_©þ2CO˜ÍfòƒÁ ¥²Hµw»F£ÙÞÞ&¾sšµ¹\NY9Õëu˜HN‡”Ú?“ÿH þôéÓ6Áã‹Ei\¥×ëÑ`G6‘HÀ´,‹4\/ùâ¿ØëõþðÿðyzÿjZY­Ön·Ko3pµæèY°»»«[‡—¦PËwîÇãñ,,,ø|>5è5bµZ±$Ñ…p‡CZ‡Æîª•JEMÌì!¹*|£Ñh2™úÁ#ú­×ë‰ÄÒÒR¹\¾öÚkzè!…à!]‹TE«Õ‚…Q©T°ç€+QE—Ë%5>Ànƒ7‚x>^ñÚÚ›¢(Z,n†Øl¶|>/]ø>Ÿ/—Ëy½^Y¯®T*áí—J%õy&Âíʆét:ÝΩÑhÔ°6+7I1›ÍÀç"O!«œ€½-—Ën·[ZDc³Ù"‘ÈÐÐЩS§!11T*§Ã°Þ¡Èxðž¿÷à¾ÅbQnMËBA¥ù€L&ƒ†.l˜Ån·³]vÀÀÂàé„¡P¨^¯³›®¨Ñév»ÚOh˜*ö´”» ‡ÃÒx‹ܱ(Š”p:ÒVÊéáR©ÔëõP½Z­vqqQŠ› ƒý2¸ì¿,› ©”Æ^¯G[!ú‘C«FG°-7Ù ŸÂ ¡ ±oµˆƪ‰NK£Y²3íŠ F8TÖÄçnÃB33@àĉ‰Dö;1ÔS*§_k)‹wÞyçÝwßÿíßþíÎ;ï\[[[ZZBÀóÌ™3w^d/ßûÞ÷¾÷½ï¥¯¾ýíok4š{î¹çÎ;ï¼â5Ü“x<¢Óé°þA,c×I¥RÙÞÞ&«P¶—ÌÖÖç‚´ÛmÎçá<ò ÎP©Âk·ÛܵزUN¶—%i6›Í/ 0N‰ü—•\.70IÃ2\´Z-è¿h4JÉŒz½®¼Ë´Z­L&¾»T*µµµÅ¶>¢`”ld)›ÍÒ Fly§T*¡õ^.X蠟• x4ö;‘ÂáðÞÞ^§Ó!`–Jâ‰áááËì(Q«Õ¤«©Ûí7_Ÿu·Û5‡£´wHÓ‰3Hî.--¡Ç~ó”Âz»»»D"Ç2rV*"  hûôô4ÕÑôE´ 1ºi:»ðhêÔj5ò¸éõPÆH£Ñìíí‘WH?¨×ë S¡1ý€Žn€t·Û Böu²œ¶ìüXZZÂ,4R&\Q'''Ùó8Ž«ªd¼^¯ßÿý¿ýÛ¿ýÎw¾S£Ñ<þøã÷ßÿ;ÞñŽx Ûí¾ãïxç;ß ÿüÏÿüŸÿùŸßùÎwÞwß}<ð€F£ùØÇ>¶µµuÿý÷'‰×¾öµ?üð÷¾÷½|ಽ;ŸcÉårpwVWWÙіŵ( ìn6v$HM*÷Û^k`’ÂÄÄ[¸|™\|Æ#³ü¤¤¿÷ööÀ7¡æ \,èĉR¸•ËåU•ÂyÚí6V“Õjm4\Ì Y±¬4²‚ Œq)½B¡ÀYf³Y„9˜|>¿ß™¦F€³~–Þ~0¬T*$b6›ÍL&£žŽAòX,¶±±‘L&···ÁÔív=ÏiZÕ¾$‡£sIÚ—Ý!àq‡Ð‡:ŽÊ¯iÇGñ"u\:{ ä`!•KR­Vk—¤%'ì„£JqVå°7ÀFÉF£Ñh”­³ó„}UˆàCç%aÏà|¦ì«éïs ç_ÿõ_yä‘~ô£÷Þ{ï×¾öµüã¤eK¥Ò™3gÂáðÍ7߇Ϝ9S*•¾ùÍof2™;Nò±}ìg?ûÙç?ÿy•u¥Ï;Øn·¥EAˆ5Ѷ([L&3[ÖLåάŒÁö2ccc°Z¼^¯ËåCå·zæ-Å—Ün·3ÏJ$‘myŽ?ޝ®»îºË±¥Jô%´¤c³ÙÞËg-k=pÙ+ª/{cƒ¬oÍ)§b±¨F=°3í¹nÎp·¤Uò¬þ¦qfÉMTj¦™™úà4 t’, SSSdÙËŠÙl9 ëÊ3gntt´Ùlnmm¥R©J¥2<<Ìö¥Öh4_þò—gff¾úÕ¯šL&­V;>>Þn·Y;(•J•ËeT÷^%ÏÅFX#Š"tF¡PãÙl¶ÑÑÑT*Ŧî¹ú´H$KÞ<n0…Bauuõܹs0}ö…á›e#Mœ¶K&“²qÔL&ƒÒ¸[n¹%‹©TNÁ`P6>æóùX-N[•Óéäjè¹;!“úL§Ó+++N§“­†W¿ƒûýþ¡¡¡^¯Çds‘[«Õêóù’ɤtØû ˆì.<;;KQ€/‡ÖV•» Õ:ÙÍZYUÄÈJ&“Qð¥Ø8V»ÝV†²c8::jµZAõ233¼3ûã………Z­f±XÆÇÇû<°ÕÜ:å¨1²Xã…ò`ô•Æ:Iäšø ŽŸ–"ý’}ýäܨȊ=Š`¿ì‡ì ÈNJ@`^úP§ÓĘ,€!sÞ.Ãm‘c®|VåèÑ£_øÂÞüæ7k4š»îº‹b¹$ozÓ›>õ©O÷Ž}*‹5›ÍR©„Pr©T ê‰'~Urþüy­V;== ®kéΈG`ç’ì[ãràõz C´/¡ßÆX,–Íf)”ÏçØ?ÙÆ"HÅãNÆÇÇ×××'&&ØÈX¿hX·ÛÝØØ8yò¤Ãáø¯ÿú/½^¯&’ܾ¡_ÃS¶) «þ釆†ØN9‹‹‹GŽ9}ú4{”l_%nD÷¶t:ØšR4 Ý …BF›2ØÜ‰„ld’®%ûê‘ܺR½½û‰(ŠÇŽ+•JRÌ€ƒL„«>ëÖn·|‹Å2<¯×ë©9m|ðö”­`›ÍÖívé@A`z³ø\ ^Á§'E:£Èìóù¼ì{B“@ööp–º Z­Ön·W«Uö«~ûi? \L‹ÅR,[­–tœÏm·Ûì=ã¨V«E(«œú·e²X,µZMš…B©T Aõ}aº- õR`_1Š'¹ q¯øÀB¯¸ßÀŸkK¨SNdª QMöîî.v³ÙŒ"% Ó1H£Ñüò—¿$ƒˆR¦l"Š¥¬¥$$™KhØJQ ëÑù)Í£×ë?ò‘<üðÃ&‘HÆÿøÇ˜tÍf¶ßÛT‰JŸ×ÖÖL`ËÖ©Œ’Ýe2 _À*„5AóÃb±`¸ºÝ.•9—Ëe±X®Â´Ó Lh‹#]jj¸£pH¿î÷äϱ oìþÕl6eý3•:Kbw:d2Éõ½E`mddDêÆžàÍJ¥b³ÙDQ”ºžÕj•Óèýà´ñx|ss“-Øq¹\­VK6¦¢ð•æR²M¡¥>‡Z#ïPa»Ý®¬F …B²•‡z½^vRe22žö5úåµZ­,aÊåOizŲ_ùý~Ù[RRN»°Z­T”ùƒü:ßçó½ä%/!¥G-…¨‹Ï‘#GdýÚÙ,}h2™HRƒ}¶àUìšK G(' (ê&(fÚn·É¼íõzPNl›>½^O x{{[j‚Y,Bü±F+Ù­×^{-‚$Íf“æñÄÄ‚N‡f›Íf ‡Ãl'›Cy¶E¶” ä1û:O¯×Ã&Øét”Q¡PÈï÷/--õûY$ÙÝÝ•-0SøJ½ØívƒÁÀù²µ‹*Ml›ÍF ô²ìæ%›ä@ã"\.ºÅÕÕÕjµê÷ûÙ¢†­V‹ÆCCCz½^6. +p n $ì'²(fÐÝʺ#WÊA'ûÞáp(„gß3¬¥Î jd“@4²ç?Àt’­å+—ˈ»î+iâv»»Ý.½J”!«Í›,Vý”åáv(/Ti4WÖh4ÊK…L:°{.¡p_õ«Õª€Ð’½Ãv»-»ã#ƒ¨ ¨Édo^MÅ;ì e×h4sss@I߀ù,£·¿G£Q“Éd±XB¡rlww—îÐn·ÃZ—î}%Ù¯Äáp@U„Ãa¶i·Åbé¨jµZÊE è+h9Í:44$‚lOU¨…ÖV 3m¿R.—ÕÙl¶P(4*ûŠóù<7è«~YØç7®Óé|÷»ßü“Ÿüäp;>”_­$N[ŒÙl~ñ‹_œN§ )Åi¶±JËØsu¢þnÆî8XJMÏED·FãèÑ£gÏž•½CD¥ts»C¥@6›ít:“““ËË˲û5ûUµZ%Ý3::º½½Íö¦¡1ä¾R~¹ØpуŠ>çÚ'RÜt½Ê¸¨F£a6›[­V0Dé/˺‹^MýL–~t·gÚ~E¹Ok"‘ØÝÝ¥“×jµf³)û–÷‹뫜ž~úé£Gâo{Ò{%wLŠRáMoz­L–UŒPDäò³XRž¢(ÒßÔÙAŠ¿  µ±EbµZí¥/}i ØÜÜÄL&=öØcTøN"H ì¨-//#x=-h·Û‰`wuue?ìQ©Tjww7—ËIñ@½^ïÉ'ŸÜyî¡Hçý 7Üð?Ñ­û ì/Fc"‘PÃûð¿á­û¦ò4€YÍÎêz½þ‹_ü‚öÜ^¯799¹¶¶Öh4pNŽ–•`0hµZ¥I6'JFQY2Y©ŒŽŽîììÀoÀm(ÿ> µÛm®}-5<<,‹yb•%¸ž———‰•ÌÑ}ÑÆEéÍw»]‹Åb2™::É.--qƒ‡F6›e¿bǬƒ´Tý~©TŠÅbkkkøŠ(YI¤ƒI'äÆ_öp,‹±ík1€çÆoDb>ŸÏ·ÛíÇœ-)TÊ 4DØ×¤0Ó ,yîææ&{æ\¨ß$ì«œØ phV©°¯6_ÙòÇgèw-2©(ûWõW”WdùvÙ_Ò‡²Ù®ƒ‘T¤xL…·Eš˜-úàN%»q4ÙÙÙÙÙÙCsE¤Ûí* ;ƾ4¬àÅÅÅááaÙZd„þÙ%8QÙÝÝ]XXkÀää¤rO…¬µÁ`àŒPl¬6›ÍívÃÓëõ˜ÞF£‘N:®×ëlH§ÓÃNG—¯f³)ð\#(N766Fc¨¦¡Ñµ×^{æÌ™‰‰ »ÝÞjµàüÑNý¢½Èï÷×jµååeYgnooüH÷>J÷r_‰¢µ‡ÏÍfs§Ó …B€:±êŸ  ¯lxx8—ËIÃPÃû/ûÜ ¬V«EG”È#$Øh4¤Jw¿[ßív)M ô–}>—'Ð\â–Vó²ü~ÿ~ +\.W¡P:ʇcyyYá]»Ýnš´V«µ×롃Ý|¥R¶Z­;;;x4¶Â+SXEý…^¯WÙmvó‹/‚"`ss“V”G©Tr8+++ jÍ¥ÜÄ È•Ÿ¡ù‚Õj…lµZ‰ZaÉjµ:Ð`m‚ÉÉIRü ÂO ‚€ùY(NŸ>ÉdÖÖÖB¡Ðòòr(’*'t̸?°lœûhµZé´-Ü›lŒ‡ÛË«ÕJ:>«l{‹¾ÊiddT=œ¼ñoDƒ¢f³IÚ ý¼É|#uB‰"³Ù,íÈÇ’˜ÉÆâàÃÄ£¤å99åD†sµZE£T*I—± ‹” µZír,kP硨‘3gÎ8NÌL®ÓŒÑh$ödÚì,‹lìW° ±HWx?@%í &“‰Ö?þðûýÍfSM&™Øiý~?šÁ(ß<ÛL¥¬¬¬D£QéåõzûUïÙív×××m6»Ÿk4•oÄê` ï×é•yå ´^¯§R)¯×ëõz———c±ÌY5èl‡x_agšŸ»»»8 meeE§Ó9V­²à'…©«˜1›Íê[ I' +;|ù ×M&[²ÐŸ{M:”¾S%õ{Èòz½\vA8ºÛÈÖÖ–ÔÔõù|ù|^aoA ÃL§Ó0\Ô@pÕn,.<Ù~?ûÜ¡Ùlf} ­VÛïöX n¹\N¥Rd•&“I ØO¨” ›ÍÂHUŠg)T©T"ë´u:´ W(R¹¼–zI¥R41—–mq¤¦·½4¨CÞÞ@beåIµ¹¹yE¨@¤qEÙ‡:TN‡òk'Íf“Ì´f³ÉÚûøÊf³‘O¯ÀjJ_™Íf®¡r¿mQ!8‰D”I긊^ðçF"*¥\H&“A„‡eÂ1뉢Hè"·Û-Ë¥àu±Ñt:Ý/ò™N§;Ø[­Öññqô"¢(Ф²_y<²”‹›ÕˆÍfÅ+^qüøñcÇŽmoo·Ûí­­-›ÍÆ’ÉR œ—#è‡$%\¦W|95’l00s$‰Ý—V«%‹ÿíÖcƒT‘HdzzšL$xˆÍf“¦#5×0MØ¢5ºªû2 IDAT“É„%ÄVµÙl6$ A ›Å`0%KäÊõzŒªèíõz”©SV¬ÝnÓi÷öö¨‡å¢=í)ccc*Ker¹œäûPž_BQ&­V;::Š&âÙl–æ³Ûíf“ÌGò¹\N„™™–" †B!J­+ã1@¸333ËËËÜ®ìQX˜‰Dwn4‡††Ö××¹-†£»Ý—Ql0b±X&“¡LU.—›˜˜ØØØðûýÒÄF¡P8zôh·Û%­ÉÚÑ &¶F£±Ûí(‘jç†Âï÷·Z­Á.b¶Ûí333×\sÛí. da0õz=«84A.—»RŒ‚°KXg¢Ñh<q~΀Ø/µî³$ÀüHçL_åÄÆ(- íòÈj˜ÂNXåÄD@'±Ê Õ«ø U¶}‘(ŠXxhÀÅ)' CnÆVj‚;Gó̤—V«…vìv»„qc=\õ­—¯T{ü«ANž<ÙívOž÷9Qüñõõõ‡zèío{µZ}ÙË^öÿðívûÿøÁ»S©T~øÃª d?{¶¶“]öårí,A LOO‹¢X©TPui·Û”NxñâEN°»ÒÑ£G[­Ö… \.ZAãs£ÑØn·'&&êõº×ëíõzˆ›ÆÓ§Oƒ^Mù»”u”j_•¡åããã` g£…‘H¤T* …™™©×ë§§§×ÖÖœN'¹)0nä¯T*:nccwðQ¢Ñèêê**ñDQŒÇã¨(ÁJá¥ä9‘oǶBÐ\"Wõù|F£1•J±Ï‚³9s]½Ýn7{f‡ÃaµZqWccc[[[Ü … …ëía:ÉîÑ\y!€íõzðŒãñx6›}6ZBw:ÒL€Ë..@°=Ñh”f{<ƒÁ ûDeh_åtóÍ7“oKÄ6ÆëõÒâ…B´5Ó#ÑÊatd¿€‚…ôj‡A þåìQ›››8›Ñh¤ÚÖ^#Ÿ”%Ú I&“ßøÆ7hÉ!Ï)ŠâË_þr2dJÆŽ,u['bžN§C¿ …B×^{-þ>uê”T½% )5Ùööö~ËvŸUù¾0;;Ûn·¿ô¥/=ôÐCæ3ŸùÌèèèK_úÒ»ï¾{llìÛßþöéÓ§o¾ùæ¿ÿû¿…Bþð‡¿ô¥/}æ3Ÿ™™™yë[ßzáÂ…|ð-oyËÄÄD2™üÉO~ò£ýèØ±cçmo{Ûÿ÷ÿ -‘H¨IcÓ'&×½f¿[8S0QEQ{â‰'d×¹Õj=sæ ,¤|>ÏÞêðððÒÒÒÜÜ<'6¸433súôi½^ UR½qàMàAØÛÛã ‹Y.TPNÐÂ7›ÍÍf“2¾çÎëÒ´Ùlõz½R©p\¨Ñht}}½Óé¶xôèÑ……Ç“Ëåæçç_üâ ‚°¾¾>==]*•¶··ƒÁ`*•ªÕj“““Ð=V«Õf³q›]³Ù\XX@j@ÖÄ4 ™L&Øív6¤íÎÎN6›m6›¹\ÎjµbƒEE% ä•öŽÒh4ÙlV%$Ñh4^sÍ5Édr`Qß³ÁÝ'‚}0i·ÛðMÎÃ%UB•Ãz‡ÒW¦§§?úÑÞ|óÍæÁüú׿¾¯5óÃþPv1ÿjÃzœH;ö»\®b±h³Ùd1³E§ÓY©TšÍf4ŠÅbF£qee¥hÆï÷onnú|>i¸Ÿœ6) ø’F£±½½­rµ{½ÞT*E;)²>€«ët:Ö7›Íz½ÊÉëõ&“Ie4ƒÁ 8/Øû“½Á`(—˨Dh‹KEØíöõõõv»­Óé¬VëòòòôôôÈÈÈÚÚšÑhİëtºx<¾²²222 …¶··ñt   ¬ÕjƒÁl6Cy°Žº•K•Hlkµ½n‚Ei Ÿ;¬ÏçC‘´Ïç3™Lår¼kétZšÒ³ÛíÀÆív—Ëe5š©ŸbEñʦ·U2Å\)¤-;aªÕªÝnßoñÅ¡r:”ÿ‘Ûn» šé?ÿó?ßóž÷üÁüÁ¾xÎ;·»»{çw¢EÍÕ)‡#›Í²j!5¨¨})'´ét:V«µÛíNMMy<ž@ `³ÙŠÅb©T²Z­²Ê LůÓé¨aq±X„–ÂQøŠ-”í÷˜ÍfSZþ„½XŠêeö(Ù '’+ýv»Ý¢(&“IÙ¤‹Ùl†b›*"]ÉdÒh4=zÔh4ž={vee%‰¸\.PÎ/--agoµZ(¦±,4EÉ3KCáñx¨¤^¯sžÖðð0Ú„“ªæ´™N§Ó~¿e{ÒX¢ú-Xà¡t:Á`¸|å¤Õj=Ͼò•BÚ²FE‹ÅrÅ”S©T" 4H±lF´ÑhPƒÂkÔa•}SÜêýA ÃÙÜ ýM­q-:- :Ûašu:j:N¡BJ/kž™ˆ ‡ÃT:HÞjµ`B²Ž|©T¢[+Ot)²07‡Ã1<<ü¼`½ûÅâG>ò‘Ó§Oå+_QyÔ»Þõ®cÇŽ}àP`3ú• úèH „§&‰ ÂÆ2áRþfkk vÄ‚P9‡±­[,§ÓÉn”áp8™LJÿÐÐ.EîQ´ß†Vh4ÒýËáp {·r<“§ÓÙív•‹ÝÙѨÕjà"Êf³`NÚÜÜ ƒ\—±±±ÉÉÉL&ÓívGGGív»Íf3¥R)•JY­Vl8ù|~ooozzUÁÝnu\¬.…B8-7J@ ^¯C‡ù|>2;@wKî ga”J%¨â´½"A6õjÉív7›MÎQî׋è²_ЮôÎûÍ4v1©€lª ÉW,¬W©TÈB÷bîQ ² y&̈ÔÛ‘/Ò"•@º‡UNNGªœØ6줇z½KäA×¢VI½^O63OjŒ5ý~?’aÅbQ¹¸E6ÿ9Î\çó‚ ÷}ï{ߟþéŸþÙŸý™Ýn×»Þõï|‡Ò„²ò¶·½íÉ'Ÿüð‡?ìv»zè¡Ï~ö³WÛ •J%¬.•L¸¡PõZ&Íi6›©Ï »Øà¦”J¥|>/B>Ÿ/•JDâÌس9ÌÆ½½½z½><< ¤~Ê’-Îæj¸ß DM&‰ÍÍÍP(W‰ì°Â&}©ÔûèÑ£¢(öÃÆ’µ½½‰DìvûÔÔT<§öØétÚjµ²p···1,Ò ãp8‡3™L«ÕâÞãöö66<rW;•UÉPfÊs&‘Hp$ñjDýQ*{SíW"‘ˆÙl^]]u»ÝµZ Î(ËN«^ú¡†Øa„±uùàèðޡh4ͽ÷Þ‹e|Ýu×=ðÀäe¾êU¯úÒ—¾Ôl6m6["‘xõ«_ÏAêqß}÷áß믿þˆÇãñxüž{î¡pÇwÜxã¿Úça||œ-W+‹û¥?/ ´õƒ… é~öl£ÑØÙÙ) Á`å^Óét‹… â{<$?Ð,˜z …n·«Õj‰ÄÒÒ’Óé4 EÆýîDM,èÈ‘#;;;Ní0§u:Ýðð°,–/Úf³ÙívÒÐÀ<õK’;ŽP(„’“`0ˆyåp8677AóÁYlN§SºeÒ¶R©Èî•Ni›N§uTö?,K«Õ’­³§9Ó#<66† CÙoÕ÷è»R'{{{ÐF»»»è+0i¯×“öÙ …Bä¤ÊÚ¯% –*§C9¸;ŸÇã¡ F«`ú}åõzé+⥼J„ M(t²ÃÜßjµ`†sJN«ÕNNNnnnz½Þµµµz½ŽF8쥹C¶¶¶A×~9;;›Ïç···§¦¦L&Ü‘P—Úív—˵±±‰DÊ岂¼²²k·\.‹¢HQ°š&‰ .(Qkµ»§+ï_‹åäÉ“çÎÛÙÙ¡¤W¯×ûú׿~ìØ1îp«Õ*ÕsèÑOÄb±h4zúôi8‚èÕ4pÄЫþĉ§OŸÆ»p¹\(%§9Ó/ÔI¤¦²20@j³Ù0g”Ç].×ÜÜÜ~FŒ-,, z«ÕŠF£‚ ø|>)öv_I)eq8,àYQNccc·ÝvEðh® ¨Õj ät:NêõzdëmllP/†X,Fá>Z eÀÔ¥_²ð)j†ˆ^´kÐ¥.–z½žŽ¢6-ù|þ±ÇãžKÅ'NàïááaêPŽÞÉÇR©$½–N§{Ñ‹^t¨Ÿca„Û¸vêé_ƒÁÇXN[Ì´ÅÅEdû¹éMk‡û“)Ç355®^¯…Bè…ª‘C#±l­²8Çr¹ŒM‡rZ¦˜ŽªÕjÄhcµZÝn7vI@YçççQ¨0 l¤®ÂñÉk …–––òùüÙ³gQ+‰DN:¥Óé677#‘È÷¿ÿ}Îâp .—Ëáp(#1¶¶¶¬Vë‘#G,Ëücõ«—¼ä%¬´Ûí>ŸÒèÆÔ/@ªR[¸Ýnp…H&êú¦0ýt:¨“Õ èTZ­Öf³ÝvÛmÛÛÛ±XìÉ'Ÿ,‹&“ ®0w9¢!æN¨ÕjÝnw<ߨØH§Bs(f¼ýb±ÈúRjh—U)'ê÷£yf‘B?H0ñ©Ó€3WÞDØ®”t])Ñ2»PY˜=%À8¾>j¾'µ³Øûg¹£.C¼ú+~MD«ÕNOO#q¨{¯fÁ4 `n|> »ÿ$Ô§ú;$vÚB¡ðØcßéÓ§{ì±h4j³Ù Ñ!q-*Ýé¶9&Ü~/qyyyll ¤M*%‹?>‰€7kxxxkk‹Ê:`@P¿%öU†—Á}%[™—EÉýN¢ža³Ù<ŒŒãÇ¿üå/ƒNgkkËï÷£)‰ìTw»ÝR8­Ùl‡ÃKKKl|’æ- ‹FîÝ¿àŽãÅqÆ5=R‰Öv%?”žt»]¶¤Åh4’™uù’N§±•X,–xL¹fD«Ñjµhãº?ìShAév»C¡P¹\VÈ[ììì¤Ói@¤N^(B âüùó¬ÖÜÙÙ¡†ˆâÒµßWœø|>Y–n·ÛMMÄѸÒh4:N”Ò…B!Qóùü#¾¬&'È :—pÁ@´*Á‹$ˈ ÐQæ“ê¦ð¨Z­eg£¨e³ÙL7@ig¶U’taKn†eåp¶ÝnÇp±ÎŽêçžg³Y5<¤‡ÒO …B?Æ»ÝNÝŠ•Ã/².‹ÖdÅãñìîî"dg0œN§úR¥……ƒÁ€~ç…BÁáp¤Óiôû¯×ë±Xìé§Ÿ¶Ûíd¨ö—Ë•Ïç;øQažÃärn·»X,z½Þf³i4¹¬K’«,ÉdÒn·s¨^Í3«ã€Û­ÕjçÏŸ÷z½n·»Ýn§ÓiœŸ|P2ºõzýÈȺä±OBBÚrGq¾]º=:ŠåA‚XªõÄO°ë”›”Ô1™L‚ ÐÍ‚àp8Pæ§ §­Âþãt:Ëåòîîn±XÜÝÝ]]]]__/—ËD(ð;Ks‡f³¹×ëéõzŸÏ‡†gƒA§ÓÁ§ÇÔÅS+´ –eÞhD²&ÜN§C Ãd2QÓîB¡@¯ùm¯b2iôÌü Ðò¤sæL2™D'Ih(§‘‘vTûí?ƒ¡ÛíšL&ªôA›òüú݆Óél4 *šÀsíC9 ”Éjõ·®\ǯ³´ÛíH$¢†çôPö+êˆýP“h’‡•ºœD"‘\.+Êjµ Ú8.Ò´ ›››‹eccC§Óaÿb3¸ ,çPe‘¶ô¼€Óª´ÕÀ(M | è á÷ûш= ûŽœNg§Ó¦è{/TËÀ7k±XÐÿ†B!ꙟ²^¯³5iÅb•~ÝMöÎà"}‰Dööö®¿þz´|\^^f“m²Ô'²˜îõõõl6k±Xà¢a)zÒo”«1õz½ÛíÞÝÝEÊP¶øÐét:ÎL&s™,šÍ¦ì: rÒõzÿ7•7¿+!l#öC¹œ)Î}R¯×a¸ L§t[¶oK»ÌÚÚ태ËΞªV«¡;œÃáØÝÝ¥ò8"œ7s0„#‹U´••z½ÇÕù8ÖÝÄ–º³³ƒæ)´ÒÓe³ÙX,&Å÷z=Y±nk8Îf³@•±Ú!Mî½4›Í`0ò‘+ˆíV•zr\´U”n·ÛívI=ð¶¥?€¯“ÉdÜn74%ª`¸_îìì †áááR©$Õyä`)H«Õ⸕¹HûeŽs_åÔ¯úÇßÝÙ‰JöäZ‰[¶×ë±€Hð°ø|–é™rql‡£Ñ+£Õj±ý‡¤Åxf³©TMÄuµZÅ<wl D6³µµ•ZéÆÇÇá΋¢HÑÈd2‰ls¿£¤¡d@2ÌeqqÑd2 á^¦ôz½ý¶Âdϱšr§ªV« ’h6›Ø>PáF Üh4šËåªÕêÁúI³i’jµ ÃáðÂÂÂ:•(põÊTqÃ###¨ø• I©‚†F\ÀMúȇCjj”Ëevýêõú‰‰‰b±(R½^o6›°îõz}$¹ÌTëF 5 Nx8-§0¼^ïöö6à…B¡R©HIrfF§ÓI$Ô2ÕR0S»ÝÞÝÝ•Ýyú½,nêJoŒCg?+Ê©ŸÚE1ØhüîînG£%±N¶Ü½Iè(¨?ÁBé—”¯£q*iÍ7ZÜÓÏèºl£?ÒyZ­–Š;´Z­²¥C~¥6› :I§ÓQZnccïu`Á»>¯*¶§çär9¶ âÀ 7ŸEqbbØ>,©ÛG ÜÝÝÝv»=33Ãqòª°šrºªT*±{"AwñïÄÄü•û2+8 ªhaaå¹ßÞÞVVih„&Šâ@S]£Ñ,//KW —ñ!.Êm ív›öÍP(Ôh4ªü£Gv:¶»ç=\‘˜¶Žf³ù裎ïìì$“É{'@`Éd’Ø“e_¨Á`ðù|RWl²çÇWÜœáöÌ+E0¿ÿRò^ïÿllè{½o\ª=”C¹ªDMD‚yDžÉI$9qâ—íØßÒ’°_Òç³³³) ©ý6¨l/^¼8P39Ž'NPòR«ÕJYMQ¯NÛ“'ObûfÓËË˲Y¿âŽ2 €*¶ÛmI»ÆØØ@£\h<·X,ÓÓÓ?ÿùÏ-ËÄÄ;iûy9ñx\Ë…£Z­ÖÒÒR"‘ÀsE£QYíŽÒYvÀÁ“ 7«_+íím“Éd·Û'&&0h•JE6f0ÆÆÆèßµµµb±811!Š"ªÒ÷ööªÕªÏç#­977Ǭ³¦&˜ èû ¸Í‰­åùó秦¦ T¶“° ^èôô4Êm¸«Œ!qS«ÕØÀøòò2¥¯4ÏLÙ(O 5Îý¾Ãz‰D‚õÚ`˜;ßßÜÔh4÷{½É !ÛD!F£‘nš‹þ" R¯×£k QNœ.8œ%\§á¦4+`~ãBmkkkTm¥CÇaÇu:êNÄ2áʆhŸ×Ù£¹¹¹\.wÝu×Ñþ¸³³³´´466FÙÄ«\PW­œS¡¦(rËd2ýR¸ìÙ<ìõz½õzç¦Çï÷_¸pM °"„…wvv†††XÂÞ ···‰Ë v›ÅbÁZðz½Õj³N«ÕF£Q5 çLE|…}SÅ\.W¯×Ñ©HúV«µV«IwF•ÅÖÍf3•Jy½^ƒÁ@‹š@2šÍæN§â«r¹¬æü8!=2¨³h+ F6Íf“sL- õ…‚p*½©ÔÏ1ŽeXs©¦åvîåª?ùJqô‹ÚaÜNœ8ž †õ)¾“sçÎ]™°Þ’IW§³a0ü àñPžïò¡}赯}-»ùÎÏÏîsŸãRW¹ô õ“¥¥%ÇÓï[¢þƒZbe8z½.“ãQ#‘ÈÅ‹A•âõz9}_P(µ¹¹I©‘F£±¶¶/}"$t‰6,•JÑÖÜétVWWr‘vqø>Ð~B¯×9rT5lÞÛn·£á¾F \ò].Kÿãt:Y³5²Ùl0ŒD"¢(²Ãˉ› Ï€L‹ö´N§Sên²çBÀÆëõJý9h&NÇ}¶[%BÏé…¶¶¶*•ŠËåÚ/‹’“«_‹‡‹(вs¦_ù&!ù‹Ån· =KÅÆû˜…ÑZíUé´F£ù¢Ï×ËÈ_àrÏ=÷|ùË_ÆŒ|ñ‹_ìóù¾óïÜsÏ=•J…¾º:%Èû=ªŸåî÷û¥gs¹\ƒÚÃ-,ùOØÎÐa( êõz›Íæóù†‡‡IÁ°žR)•J¬u½¾^¯÷k¶$£l¤qvvvll Û7bщD" Æb1TÚl6ƒ€µD‹•Cg6›‰° ', (4p»ÝN§“@T,..nnn"­²²²T ·¢!¬c7AƒÁÀºŒá . IDATGÔB wÂíã[[[èÏF'&&ú »ôX,A¤ô¡[[[Òî¨+;«UBÙö·û?sÎLã~kauu•¼m½^o0Òéôâ⢚J–ˆR‡z%ív»ÙhüáÆ†V£9oµžu» ‚00$Ún·©(¨P(ÀÐ`¹×ìv;M²zjµEˆ´õø°^¯SQ8ÝC>Ÿ§R}»ÝÓíËh‰ÊÚSd‡®¬¬Hg[6›…‡.B<§‘‘ΓÉDvœÏçÞÕëõè—Ïk˳$ŸøÄ'ü~ÿ§>õ)”>¾ÿýïÿä'?ù½ï}ïÁ\ZZòz½ÿøÿØl6ßúÖ·^åb·ÛAX»/q»Ý‹¥Z­†ÃásçÎ…Ãá\.gµZ5r8€O†B!­V‹¶Fn·Ûn·ûý~ÌRÌj‚aqûbzÓÊý65½^?66f·ÛGGG- h~Ž;FAx§ÓÙn·i‰¢N?I®Á`p¹\œÜÝÝí§ÉA@P¦²+ŽÛÍ‘¡ªK»Ý‚ú¾â¶tž~ºahhhmm­¬e?€àEHy•´ŠÊ(Wõ1jØvÅEÕËÅñt:,LïÂãñÔëõ˧“ߟrêv»¤Tëõú‹R©©JE£Ñ|%Ñ ¹âW©z£ o©T‚aÕn·i†QÕô0]‹¶—ËEG‘ž«V«¸´ tøÎÎÅj?Ž;gíÙªn§Ó922Bs]úD4EQ¼þúëñw2™”V*;RNd²™ªç—ÌÌÌÜvÛmÿøÇ¿õ­oÝzë­ÜW¯{Ýë>ñ‰O|ë[ߺ:•º’#yùúÒ  ™f³‰ŸGcuuuyy¹V«Á kµZããã+++FÃb±ŒŽŽb ‹ÅP(´··—N§»Ý. ¹ ŽübWyWlö$ñÐ7'™LºÝîT*‡[­–Ùln·ÛhÖ¾³³Ól69䓿R¦Š(’ …áááõõu.Ó Ú~·Ý¤m*•êõzÒ^±$¨ófÝÊ|>/ë 5›M°=)ûšD Ëi¦p8 ¬«š.‹ô˽½=ºy‹Åâñx8ƒõ`ˆi²ØW©þ@D•‚Á UʨĨe­¼YŽG…£°FØ©;99¹¯z“ÿ±2ÕüèÕ››žV«§Ñ|©ˆ=”C¹j•Ó~颧§§Õ#¦9?íjµZ$ñz½ÈîØl¶“'O^sÍ5ÍfaÀ­­­_üâ ãããår¹\.·ÛmÔ4k4šx<.å†`Á:ûlR•Jì!`7Åbh9±±±±´´´¶¶–L&ÑÇy_*<ommIb‹{½^o0”[­VÑVÇn·³¬¡tºE ‰¢8;;Ë*!6´Å~•ÏçY7‹ýнn±X”jzê¨Íî¹ýº\ŽB›/94õzýJÑ^¿r0£ wHɈ~£ÁI©TRö&)“‚":JAsSW}aUžÓ7¾ñ Ðx{šÍWmnj4š'¼ÞŒÛmÓé”Ù)PV,ÉÁD÷eÍ3Ùio¸áª¡äÓÆÆU1¾þõ¯—¶šv¹\”@¢£PWŠ¿ÏŸ?OsˆêŽâñ8ârheOï’ÏÙÙY<‘N§£mâìÙ³°ÁA F£‘2U\¤›6HÞîó"ùtÓM7=øàƒ€éü:è³ÅÅEõ {ìüŸ››£…J¥´Zm:¾á†ü~?Ú£!•N§2­Õj€1šL¦x<>??³—fu,[\\¤ õ#´ÞD¬Ïf³¡'^2™533³¸¸Èùj„ú>÷ìÙ³…BAÙçˆD"µZÝ—9ˆë~ù^q‹Op P{,”ennަ“‚Ï­ròcºJ'$Þ£ §OŸ)7*&8ödUʉ˜(okËÐëi4šïD£9 ´t e÷kú—¢_þV%ë.{N8è ,—.;§qÛÇ.ÁÇÑØG½Ö@á~)\õUŽÁ`pllì»ßýîk^óš[o½õóŸÿü×¾öµ±±1‡Ã¯ðDccc²¦ñÕ/²Ü˜'¨ÕVvVt:]8&c³×ëMMMÍÏÏ‹¢‹ÅFFF\.—Ûí† ‰DšÍæÚÚZ6›ýÉO~‚]£ÓéÌÎ΢PM£Ñ`²Z­Äo„Rrú*N­­­ÑÉR—J7†¤¬{‚¢eooïE/zÔt;n6›\º¢FÔi0œ ëíÏÉ;*pmL‡Ãn·onnöz½D"‘L&¥ÞpÇG}úé§©üGÑoN: ·KñC ô èõzáJA¬œpeÒé422²µµEÛ±(ŠZ­Vû‹Å²Ù,%u¬V«×ë½"µyP<4z½^6F§þl³³³(öÙÛÛ£Ih0Ξ=‹qSÃ%ÆŠ$y@Îi´Ryé%ïož~ZùÇŸ¿n}xhèßäÚŠÊÕ/wÝuþ ½é oxÃÞðFóÆ7¾‘~öøã?Ÿme­H›ÍÖl6©‰'Ü}iŸi§ÓY©Tòù<Á0/\¸`±XŽù|¾H$‹Åz½žÛí^]]M§ÓápØjµ¦R)PNœ;wN«Õba#ɦ°·®­­‘ÕL7 _–Ìvp8µÛm):rxxØårÙívlN%ìµZmuuudd¡EõC744D­Q:ßjµf¿Ò\b8ÅÓÙl6Q‹Å¢å ÙÄR¡P 0F¿Æç~¿ßår={–özö(“r¹ÜÏQ`Êãñ4›M§ÓIu¬ÊARPö$41´Zm,ãZ sµþ„³î7°(ßg¯Å¾³Ùܯ ú„nsÏÛëõÈú¡Qp›œóçÏ[,zAèðÖÖÖ®xó¥z½þõŠ¥öº]8ïT,GíI´Z-µrÑëõÔ–Š< Öla›d7“Ïç1¡A 2Ãn·KÅèñk.‘øQ„”jLé®d_9û’`Â`5Ò‡årYeJü¤ø[™ ÷PžéõzÒmËápT*0ß°ˆ‡ÃQ,9åD‘j·ÛÝjµÒé4u”7›Íè®m·Û£Ñ¨Ïç«Õj(\ÞÜܬ×ëF£Ñ`0€ƒÕçóéõzj¢ÃºAä9Éúmn·›*¼^o&“i·Û šå•Á`0d³Ùjµ:??ïp8áÿ³÷¥arUÕÚ§æyž«««Çêîtwf2ÀPDP@‡ Ä+* 80 Á‹€^Aq‚€rå2\(£$d é!=wõkíµözß—‡sd¡="-CW´aK º@ÚF£Q¼ÂÁ`6L‘H$“Éo¤Ñh Ãðð0Ë3)•J¢sM›iàdÁdÆíC8öz½åC[îPÐï£Ñh$Gáû‹¾Ë(§Ä­q­„Z­†´.8ËO9®ûäzýX,VªÜQ£Ñ„B!n©P(²ÙìbíI)­ £Ñ˜ËåÈQ2†2™ŒXi²<¢%’m6›\.¦'žc…õå|>¿(Ó|9çtÚi§y½ÞÃv»ý}Mt®ó°ýýÐÌJ¥øB@ Èd2B¡6Íè½H$Z½z5½F cÍu„$ŸÏãØØ^]r›@šêêêp‘H$B¦ÅÜÜ/Pä,º’a5ÀA>ôx<FÜ€üV%Üåö5,ëXëD(ÒÎ@&“% Øk±X¬P(²+™šš²ÛíHÁÓàM”„E£QN‡·Úl6ŸÏG–À`+@‚¯¤wh³‹mZV±ôsÉÉ<,Ššôz½f³7B^@âÈ2ï‹%“IxMÇ£Ó鸧ÐZ¨g–•T«Õ§œrŠÑhœÕjµ¨Ð#ï)ŸÏ—H$J¥’uwX§ …B2J¬G ‘HŒ!¸C¡Õje2Ùüü|6›­íóù€V ‡Ãô/"($½âö­ªªjff¦Â§p8\ÆÝ–‘.b8tìÇÝPÊÈCnŒÅ’H…Bsss˜Qd4À? ƒi4C¹\.èçŽh! ÊårR7PQZ¯Ódê4™è} Â’›Ïç÷÷‰¾[×®eÊî}-·å¶tÁç`¬Íf+º€u8E58ˆÆ¦BŠÞÞ^@gƒWï­X,ÆEìv{>Ÿ'çâýgñ#H¥R£ÑH¯¸«ªª¦§§Km‡§ÓɲË,»ÆãñB¡ì‚Õjõz½ôM±V÷Øöçþ} š|>?²ÜªÁ`P«Õ+V¬Ø¸qãìì,+MÇãñX,P$äÂf³¹hír*•:Ž26ƒÁPyE>i^¯×û¡(}îŠu–H$Òëõå—SÜÅb±`•Æzú¥&<·ùý~“É*bù+O744 “•"kK^¸l¤–Û¿jK&“R©™(:ÇË P(Ó&%£ápØét²^­šššx<^SSS&\†–14â&&&©xê©§V¯^ Uò™™™ééi¿ßEAnƒekr¹\0¤˜„Öd2q©‹nll$ª¦V«5 &“I’Q Ó,F£Q£Ñp5˜÷á«&“iAªiäµ Áê<²úh|>Ÿ¾_B2‹ÅJU®b3ejiñ0¶ ƒÈ!ôCˆÛ~tIäñ5V‡é‚OÏ›|'…'bÁFC°+Oq—òôe2r`Œ¤ƒ'50%€Ø¬YW¦ßµx<‰Dô•8'Z䊮p#Õ,ÜPô•W^a(Ù@³Ù\[[ûXg'÷†ëëëIÒŒ·ÿ¿ÿ÷ÿÈTÀYB¡Ôco™åfçææˆíhmmExHg´ÊÓ&#FV«Õ---¤W$¯HªWU*Ukk+þÂ8( Âo$•J1\ Ç&ÝV*•jµºh$^^3f¹-Ø"‘ÈÚµk‹föø|>mú‰t©ßïçñx|>?‘HlÞ¼Y.—ƒAƒÁàv»ggg- øÅQ”Àž]ˆ-U±XœÉd¾î¹çP!¦§§»»»É ¯d¥LëpÒge³YˆÑYµÆÆF,?•J%9+ãobhÔäÈÈô—ËÄ ðjZ­V$ÍÏÏWWW³¤¾KYC±XœN§{{{Õj5èÀY…`ŵX,ÓÓÓÉdÒårMNNFlkÙl6ìèЧ€¯߇*j ëëëÇÇǽ^¯L&s¹\Z­vllŒh½ r6ñxÜb±äóy…`…ÊÝ21 ™iE.¨„K~k±t EဵµµSSSeL-f½z‹B ›L¦l6[I漤s¢™ëèâi”ä3 #äÌlÿÜý>Ÿ$ ¸7@ƒÝhñCDB˜æÆÎ-Ë9%“IzÈàè2n…BíŸB¡Pô)F£Q¼x´`©// $ýªP(Hétò¡B¡àÒôbÊÚ]DK¥RÀo.û˜i\vNY›Í¦×ëÉô Ò¥due·Û][±bE,ÃQ²½Å]©L–+  `èîî7„V«Çã===xè--- …GËß‹V«miiN–e¼^¯Éd²ÙläÐÄÄ–Œô1gä½#5AÜ@¯×³jÓ …¾ƒ³G2™L¥R­­­*•êÝwßåö¹­­ ò‰D"™L ‚cÇŽŽŽ"?yê©§’³6êà ÿJì”×ë¥ã¹\n±XÆÇÇɾ5kÑ ŠXœ>55ÕÜÜ|ìØ1FS]]m0À€î÷ûé'ˆ *ŸÏW¢„‹ûR(E)€éÀnvv–öDá7‘HØíöD"‹Ìç󛚚Èb·¼×ÄVÙ‡öÍÌÌ”ú9—Ë566¶víÚÎÎÎúúz¤j½µ_aB²Â,ë¢ÓzÖx|•ßÏ0Œ…óº>g³M¥ÞN&_ü`xÿUQ/\ŠÆ¢©§©©)V (íjkk±»€ŒY*•‰DV«5“É”â(£a˜XÈ+ £Ñ822299 Xh{{{___&“I¥Räçp´h¢‚FØ„B¡ƒ²îÈÇ|>???O¯Ì ^XÆÀáDünuuu$¡—ÌjµZ£ÑLLLÔÔÔ¿…ß•Édü`Û]…B¡¿¿_$­X±‚ ‚µE…ÈÜÜJóù<Ƥ£££¥¥(N˜¿B¡Ì¢Ëåêêê"kVȈŠÇ|>o±XÒé47`¢ôýÄb±ËåŠÇã):Šöp8 Ÿ;mmmlnnîééÁ0VUUjÜW<_æ h-5’œ`l"N‹N“=K¯×Ëd²òÜçek:1 ·­Vk.—›ŸŸÇ\- Œæñx‡ =ÇÃrÁét*ŠŽŽ êðLñCôÏ)•J«Õ:44T¹¯-—Öcɼþß›‹]Xâ!.“.“™‰¿òù$£Bâ\®‰Dt¶Xò<°F4Cß>dÅv4[·o©TŠ›à&Õ€ô ær9òM¤Ô™ Ðøe¢`²°J&“E ”vû'–œD©×˜eµY¨I¬…>FS© Ä% ½Ã„j4‚Ïõx<€.ðù|8'd6€ÏÕëõããã0I]]]Þ.Úº!iF&àÀ4²•a˜+V …ú]ÇDcÉ‹¼áBaCCh)˜¿'"–Z"‘¬Y³û4 ™ÆËEê¤é·£” æ¶T*­ªª¢Q/…BÁG__Ÿ^¯7›Í°PµµµjµúرcåÚÄÈ’L¦D"I§Óà) …ä¹ÕÛÔÔtìØ±þþþöööC‡I$§Ói³ÙúúúHqÉüCyo``ÀårA€Þ("Ú¯eY ày{"•Jé´'ëѳ2,{ÍçóË“-ØœN'Át“¼hà6«v¦(06ŸÏ¯]»vrrrÍš5Æétö÷÷÷ööÎÍ͹\®æææl6ÛÝÝ­R©4 S½^/vªÈ$dY¿t:M?Ç…“Z­&¹)Ð0ã﷔ʷ8É}Z1:™LžÃ¹Ú)§œ‚çA³’Ûív DzÖßßOžŸþô§‘‹‹ÅbÚ&—Ë‘@£t*•ЍÓ­ÕîïïÇÐðùü7’™»Ë …öíÛ‡¿W¯^ TÖñEÖt¦ezzz||°ê¢¶uu"íðáÆ«PÌMVsQ“ÈNôöö* Çy@©T W¼ê£££Ÿk·Û± ¥P(úúú P«P(T*U,ommõx<ц††ðvÐ¦Š«jÊš‡2™¬¦¦ÆçóÑIy$Íd2™Ýn¯¯¯·Ùl …"?ûì³<O¥Re³Yîæ„\.Ÿœœ„úN©„L&ƒ­—Àš¸Ýn sA‰áD"1;;k4i;HÔNý~?ÓÉÉIŸÏ7>>.“Él6ÛÀÀÒé•ìêcCܵF£qnnŽÇã¥R) zñ[‘HäwÞ)sµZÍçóé8,NOLL˜Íæ Õè¦P(ÇÜÜ ãœNçôô4=V¥0Ý GXY&“iµÚ©¤à¦‹º:¬é+$!Gý¹Ï}Îb±`öZ­ÖT*Õ××GcY v»}rr2›Í–ÕÚÚÚP(d4¹Èëåj½åöï•ú+ŠšÄÒæL©T¢’%•JÁ9aiO^øX,–J¥h»<ªãŒFc<¯«« ¨)O¥R …‚v?P5%8G†Ãž‹ÅJ ic{¦¡¡$–±XÌf³¥R)µZǹ†Æl6§Óé@  ÕjYΉà‘åÓh4©T îA­VÃX°`˜4ˆµTÁT£ˆ³Á¶ŸX,è¤ÅbÉf³ƒå‰õ“ ž¹Ýn\ ÚoF ¤R)¤ÝèýÅ2­èwŠ \µR©,³³‡YÏkhh¨ººšµÑšÝR9Iúé@ œ …"“É ÐëõÑh.‡’Éd‘H„H$ÂÎ+ÐÙ+V¬˜žž–H$MMM®Åãq.‘›D"‘J¥d¬oâ³èM ­\¹èr¶ï\6XËm¹±l+bˆR5H^¯W  H‡Ïç766 P¯X±ÂjµÎÎÎbÙ«Ñhæçç% ÌH«š¢ ½Ìßf³‘‚ ¡Pèp8@)@‘wìØ1±X<444==MWÆ“—||<‰Ð =Ðl)ðë…-F%-è›5 Òæ•ËʉD"ƒÁÀ¹ "H8†P(l,„Ðb±˜Çã‹Å´.¨@ (*cH¿Õ]rˆËË|‚5PæóYÑðììì‰ ¸H$.ö¢N'Ã+—ËÓé4, …2™ $&“I(‚Óó3‰ÔÕÕÉårP¢ǃU ž,™¢Ü±Ä¢h—²Ùì±cÇÆÆÆ¸¡UÉȉæí ¦Hµ3¯&•JqÈ€“^’—*NcJçmÁãBç^Y¿ÕÙÙ‰WB,“b6P;3¯3K·5kÖ`tòù<)ï& ýRê´v»k#hê‘¢J¸dDSÎ B>çþÖr[: ¡Àq#Ç«««ôz=â­D"ý˜ééiº4.ŸÏƒ 3M LLL@=9—*.W«Õjµºè>e(êììôx< óa½Ø•è“VUUMLLÌÌÌÈd2¹\Ž%¼Ãá …ápxrr²<‘ }݈Hn(®>>ŸššÒétÄ©3 ƒâ·h4JT:™dB¤.‘Hà~%‰ÕjemÏLNN–rN<h§Å>ål6[Š©¡Œ?Cíû’ší¬b2™L@œ°Ï°´x@ û˜›› ƒV«uddäÈ‘#ù|žU%Ë û ÌRO&ét¨¼%_/霠WF’!ô‚N2—Ë‘ •¦¶£W=Äå%ËJ¥RäÊGB;'²Sj0ˆo{ ¾Ytoýúõx%0?XCÆâ1#­(êphhÙ›•pS©Ty–èåöi44²h+U¥R´©T*‰DâõzQ"QSS‹Å.ºè"½^ÏãñPøK¶ÐQ±–N§é©EÖd(½)UÇe´¹{$[Ün7a¾!ÐH|Äken¢Jxûr¹\*•‚?À…€:)•Jxœ#"‘HP;‡šÍfóûýä­$žZ±ä1nävÆÇÇ“Éd]]‹Ø‚ÆçbS~Ër¹œÓ霚šâóù­­­‰„Ïçûý~³ÙFá¹–’óôÞù‰7§Ó999IÛ+£Ñ˜J¥HÀ½¨8©ªªŠ gÊ4ºø“NÏ:ŽòÅ„•ˆä’w¡r¹\¥R›ˆ“““mmmãããÇŽ³X,R©´<•ÆÅe~¿ŸøÈòcyÏi¹ý+7ž•Oâ±òE\USúíU©Tƒ! ¡Ö8qÔ¹‰ÅâH$Bq–;¤í9¤-(PñIcc£Û톽KxÿèKe2¹\Žj=:‰‹ÅE%a:éü‡D"A †††À:Q4·™ÍfaI- ê’à E"ŠåÈØVWWÏÏÏw•L&ñ7¶ÍÍÍÜ%—l—õ°|>_>ŸGÁºN§ÃÀ6[&„k·F{Ñ(„¬­7¦³M´¢q%& [l+ n³qËY¹ê´\"GÄú¡P©/ÇƯB¡ T*!²\ôaÑH[‚÷z½,òëòÝ^Þsú·n§žzê†÷ÛC=Ä0̵×^‹ÿž{î¹øÎ3Ï `©­­å²ZX,–¢[8z½ússs¨,€Ù%’¬‡ƒÖ2ï“#Cf>[,Üo6›E…ÕjÅ]CžNT®Y³Ì~ñxÜív¨µj4‡ÃÁP´,d¹€Ò«ÕJjwH™„·«®®fm¶±Ö(d` a®Y°ÑÉD$×étªTªh4J˜bb±˜Ïç#Š±Ç·Š:n‹B¡P¦J3-“Éh4à‘È•Ó餿OäniAÞD"ß Çšš°F…Bár¹X{"@€5ue2Y{{;Šnèϱ Y\äTSSCrñxœÄõ½$ ëßm"¤î…BáÈûªN.—kýúõ$TÇ„ ‡Ã‡&sDe„ògãÆxÁòùŸ饗¾þõ¯G£Ñï~÷»¿ûÝïž{î¹U«VÕÔÔœwÞy×]wÝUW]µk×®k®¹æK_úÒG?úÑ#G޼ûî»ßúÖ·^ýõ={öÜxãwÞyç믿~þù¢ €/ IDATç¯Y³¦Ô¶çi4“ÇãUUUÅãq¿ß&VýåaH߆{,á“ÉdOOìr.—H¿…Š2†ÂE¶µµõööÂ6D¥R©5kÖôõõ9Î2pÅ\.gµZ1¥= t1hÓ4½§ýn{{û±cÇð‚ÐQÃẶÙldÍ ¡†ÃuÄbqkkk4E¦níÚµJ¥2;v,™L¾ÓÕÕ…Ac¦¾¾~```xxø\ÖÊ'»¹\ª”¡£ü¡+£«R©Xƒ/‘Hjjj€«å"U¹mxx¸­­­³³¶ C EDæ}Õ]†“­­­Õëõ===ét¸4V°‚d&C æVWWÇãqŸÏW¡„.Áç²>W«Õ}a]äs Û¥¡ñxœgCÜ™†`³ž8PPXLOO744ÌÍͱ¼2wê&“É®®.îhg2™R²#%måg?ûÙ“¥pµÜèöæ›o.Î(•ÊÎÎÎk¯½ößøÆµ×^{Í5×d³Y™L¦T*±‡fŒX,†j\"‘ fš7étšÏç+•J>Ÿ¿ô‹>ZZZˆ½0ét!ê€Y¦¤h£í{SSÓàà P(ja¡ð„ßr8¨S·Z­ñxÅu\.WOOO&“±Ùl±X ˯L&“L&gff¸»<O,Ãs`ž䱸s†innîíí-ªwÓÝÝM€¢å 4òfKâ²,ô+ùÝÆÆÆ¾¾¾ÓN;mëÖ­¨éšíéé}ohhp»Ý4fkµd2 oQ(ˆ:m6›mii¨««Cö‰ÛILE‘H”ÉdЂÏE*C*‰jkk'&&@1…/ …B ;& 3KZCC™z½öä~=ÊRO…VaOOhÉÕHM"‘¼‘™GžmAÿT*†Å–T*íïï§}C"‘èïïç2T1ï#¦Yêˆè@"‘ };†«#ËVT¥kåX­Ô-—tNG]¿ø tz>L¾¬2-“É=ztëÖ­ßÿþ÷ÿŸv?´Ô^yÿ<ë!f2™¾¾>¢…JçU E"‘ǪûF¬Â­T*577Öj² V*•===¨åÎ7‹-T"ÜWùýÂé–ÂZ:Îòì B¡P$!)ÒÜÜ<22‚ø ¸.øNˆfÅb±\.×ÓÓƒ ĪU«4M Ìf³ÈwŽŽZ,[[,l¹e³Y3¡C­V8m©ìñx°ˆPÀa–„|¢‡l6;==-‰L&á *3„)!¢!‰hõd4‡ÃmHµZ]”ŽèlüM&ý[‹m|>_,ƒAP¡ƒ A—–L&YÓI¡P@¹˜›Xòù|‰D‚Ïç£ô†LŒ‘‘Pc%—ËQÃr|7UÄ9Y­V>ŸöÙg/;’Ô+,…n<þøã·ÝvÛ·¾õ­å'ÂjDiåË,çDDr‹j¡jµZF€ò@­Vs ·$‰Íf#9p•J•L&¡1 2!½^ßßßßÓÓC´Pu:]QϤÓé‚Á bÔ5p} ÁZÒgÑæE,á;DÌè¼Çã!‡’É$‰êPï‰DæççACCø E$q»Ýˆá é¬/þ^¿~}¡Pxï½÷èCù‚r“É„ò<@Fi«ÕšN§á/¡ÖA+%Âú;NØV W&“¡=Íqhèt:°ÊrÝÏðð0ŸÏW©TÜCäa-j.lÇ…B±XŒô£Ñh”H$Çgat:T*D"¬¢qžÛíF'™Õ@šs('Ó9µ··3‹AÛ-·ÞvÝu×A•õg?ûÙ† Î8ãŒ7Þxã©§žzûí·årù¥—^Z[[{æ™g8pàg?ûÙÈÈÈ%—\RJ<⟨Aî6Nóx¼h4Š¥7+–%J£E±te¨þM&“ÏçÓëõ¹\N&“N‚õ‹Åâ÷ûéX ù(ü¶¬‘ lŠÊݯÀš –sÂ"šÆZ2ï«îÂéõzø‘H¤P(âñ8íœhÆ„™™£Ñ˜Éd`k$ (<Çãioo‡òx< Ã¨vzz: MMMñx¼¢ÔÆb±xABU®ÉÉdR£Ñ@q›ßïÇCäóù …‚åàWr¹J1£Ñ(ŸJ|kµÚD"QÆ1Èd2(³†H.®™šš2 \j¢P(T¡sª\î–æ<ÄRuªHê’w„E¥A$Š&„Œùôz}Ñ>/—’ÿ[·Ûo¿Ì*wÁ…BÁÛo¿ý‹_ü"Ã0»wï~ýõ׆ùüç?É%—¨TªÝ»wç¸aÆݻw¶k×®G9tÁ†ä;kÇþ ›ÍÚívVB¯è{Ejìv;K 4úB¡‹Å8«µµZ>ÓÓÓjµÚh4²Bg2™h‡A]&“ …B¤|ÆjµJ$RDÇjSSS3’BíJ B4úbè6;;‹¢€™™»ÝÞÑÑdÒM䮹'ªTªÅ¢bŽd³Ùùùù¢¥IØë2™LÜÌ­P(„x<þk4éJwxz“É„m$â·XgÑ6É*ïü¢`¹•£——H>) ÌCð‘L]r¹™ÂÀP¦U"­«T*éŠÐeçôïÞvíÚÅúäüóÏg}ÒÚÚJJfѾöµ¯á¶¶6Ô3 sÉ%—,ûâÆý‰D^Á”[psz¬CØo'jóóóuuu„È.‘Hpì¹¹9Ö{ȵ­¬ÎƒÐ¡TOJ•¢-‹'&HÛ2÷.—Ë«ªªü~?–ÿø2`³B¡0—Ë‘½"rT!ŠD¢©©)ãû <­Ec”îîn.×n·û|>:bý¤pk¸t•)øÃn·'“IâŸ7ŸÏ“n y…@ôA‘Éd ) …ƒ~(UUUI yD,3<O­V“C‚+¬V+)x>ñ©¾¨F¶e¾“J¥HÌ„"=@°e2žû‚¹;îü´ÙlÉ$DO–´s+JÈÿ/ÓN=õT.Åár;‰­(þ‘ìñ–Zr1‰htЊ9ò&Æp8œËåæææ…ÇKØÝÝMÔ\M[¦˜©Ãáðûý¥ M(êïïgEo(ÿÃ}•Yb ‚ÚÚÚE•QÐÉ"¨&ú|>¢„ snk ¯àt:ÇÇÇa͆Á†\&“q¹\Üá…p-7ÝG0³´{Fàåt:=‰uT*•R©DúCÁãñ&''S© =ÉÁ@JbD’…#1V:õx11±(ðïÜÜ\ùµ'·ÌÀVÒjhh å^UUU¤6r•÷¤©©idd†Rð sss°¹èIöý{ÔÔÔ$—Ë;::¦¦¦ð9DCˆ™ænÝÕ××ûý~ ™ÈÊ ”Ì#‰tggg³Ù,ÇÛ°aÃâñ8”knnÅàkµZF377‡§ÖÖÖÖÓÓSêÉ’¿“ɤN§›ŸŸÂuR©Ôàà ÉdR«ÕÃÃÃN§3`ð=Occ£×ë%s†ksY3Û3Ñìò3¡BÌÆŠ+¸kšÚÚZZê‰.gR©T:Žåž!æóùh¸¦¦¦™™™¢ž Ó‰ûôÉ{$‰€ðù|³³³U–vò¥È!“ÉÄb1ï_®>|Øëõ.5î¿Uãóùííí<åÚ4á?ÌR©lhhà àÜ\.§Óél6ǵÝÊ•+q”ˆ?1 ãv»«ÎE:‹:þ ’»$.±Z­Ùl–,å_ÒÈ80 c0ìv;>ÂÈd²ÆÆFÝ‘àÐÐ –ä·XÚE©T ú¥ùÚÚZ°ªoÙ²å#ù >æææ@*H<=þ€2=Ý ¸+D*v»^.ÒŸÏG»@¾2™ zR†×ÊãñÌÏÏWWW£r’Ïç§ÓiÔR¯[·.ƒn·; ‘Í$®Ø©×ëeí~I$’ææf£ÑX]]MºQfÎвòȌ뙆Çãxú2™ŒÃÄ!Ú ’eM{{;¨²Ùìàà Ïçëîî&Ý*JsÕÐÐ033=è2ÓH^î}-]Cù¯§ KÐvE—N¥–[%­BgÏç»»»¡ª^´ /–5©©©! “ɉDzgÁ0™b Â¢‚§E´E#øÇ27Eÿh…üÙÈ=B$—ŽTÈuX0Ìò5E¿PWW7;;«V«Q+<ÏáÇ·mÛF~´P( Þ¡©©Éívóx¼ÚÚZ·ÛâoÚ8ttt@J£Ñ-+Œ;‚D¢¿‚’‡h4Êçó‹“a … ÅÈ´¹¹yllÌ`0hµÚ§á(÷q×ÕÕ!©XÆ”¥R)ÔòÅãq£ÑˆbQ\‡;0E=Í‚³½Ô‡ÝÝÝxÄ´N ëû4}¾O¾)”Ep‹qÊ'“ b`xZ¯P(¼õÖ[ÜÏ×­[×ÕÕE«Ðž”–L&«.U„µþ-•JE£zÓé4ÙáC¸ìñxÊÔ—&‹ñ€ÆÆÆr¹Ü©§žFÍf3rPàþðz½ÜGb‘‹>b‚é†EÆœÁ– ºD¦}Ö‰oÃså˜+od¦ÑKæ'&< è‹Š(ŠÎ™Ð9åóù .¸@¯×ô£e­&.»ì2¹\˜ØÉj‘Hä±Ç[¿~}Qçäõzï¹çž×_}Íš5íííO>ùdMM\.ûí·z衆††ýû÷ÿñüË_þòüóÏŸ~úé ÃLOO_pÁN§óÔSOeæ+_ùʱcÇ®¼òÊ-[¶$‰‘‘‘{ï½W«ÕÞtÓM‘H¤ººú¥—^ºçž{.½ôÒÎÎÎ;vœsÎ9·ß~»ËåúÎw¾óÎ;ïŒýæ7¿yà¶mÛÖ×××ØØ¸uëVn?±ÚØØ¸ì`NJãñx:&¥3KKÐr[ÑC5™Éd$Éé§Ÿ.“ÉFGG;::ðZ¢j’áDÃ`0ÐH{î& €±\ç”Ëåˆuƒ°wǺpr¹d¯Ñh´Ô~ºtr“À±²jdd„+A Ýúl6 ÂVr”Éغu+n§èÎ<ÔѸˆç¤R©‰D&“Á B¦ž#–ŽÀ*l¥p{lZ¯®®îá‡Æß¯¾újOO]3<<ü§?ý ïØ±ƒÅ‰K·'žxoµÍfûô§?Í0Ìßþö7ˆ\qÅb±xåÊ•X2³%“É;ï¼óÑGݼyó•W^ùÐCõõõýö·¿u8UUUwß}÷wÞÙÕÕEç‚3™Ìc=VUUuã7^|ñÅøðW¿úÕ%—\rã7ŽmܸñÑGý¾ÐÒÒrñů\¹rýúõ×_=áŸýóŸÿ¼mÛ6’ÆÇã·Ür˶mÛ~øá{ï½·£££TByy#êÄY‚Õ×ׇB!@€>h’Ⱦh6$²Š‚P($‰V­Zµråʪª*ðÆb±¾¾>”lI¥Òl6 *œ566Fkè]‘“¤V«‰„&ÝJbUS×b±”ÙGŠL$©T*¿ßÊD° Ñ`0THãD»ÏÙÙYè? ¸£Ñ(—ËYΉ$ÍXJi"‘ÞÔh4t:ÒdîoY,–¹¹9–gC’„`$âóùÁ`>†$¥R©D"À Z­ž˜˜@h…0³6› D쥖öàÊkhh°X,.— u Ÿ˜˜Ø·oߪU«&&&hçd0Äb±Çã …äÓ˜nP›£•áÂxˆÌ 9´ØÇñíÈår@@f‹ð‚žŸ˜íåKÒÛ>p›øÌ3ÏìÙ³ç#ùþ;11qã7ƒÁO|âO?ýôÁƒïºë.«ÕÊ=ñ׿þõîÝ»¯ºêªT*õàƒf2™ÚÚÚ›nº©¾¾~íÚµ÷Þ{ïôôôW¿úÕ›o¾ù“Ÿü¤Z­¾ñÆphffæ†nÀÎd©Ï•+W®\¹òæ›o&2étúÞ{ïµÛíG=zôèyçwÚi§}éK_¬úéOZ__ñÅoݺÐ/ùKŸÏwà 7kž~úéÈïGĽDØöþIÛää¤P(¬®®†Méééš5ë,ª…Jð¹E_øééi—ËÅãñ\.Wmmmuu5¶ìv{"‘%pZ–“¨Ü| )µ6™Láp˜6 ôUbèžàï¢T°å·¬FF•+’ËãñèøgˆD¢ÆÆÆ¢™«¢ÝÇÍR*•ô#®««ƒ‘D"1™L@ Ä ¬ëhµÚp8 š%VvÉ@måºzõj™LFpÇCô$ÇÆÆ`»Íf³^¯ …f³á4Þ–¶ãSSS"‘H¯×sŸ VeÅ‘tÿKC#“ÉÌÏÏŸþ‰t£ÌôP*•B¡8×B¡P^8nz½^¥RÍÌ̤Ói z‹rI| ÎiddäË_þ2Ã0^x!ëÐìììÞ½{wîܹk×®cÇŽ=ñÄßùÎwŠ:'—Ëu÷Ýwoß¾}ffæž{îùóŸÿ¼yóæ÷Þ{oçΟùÌgšššèÄBggç‘#GÁ5×\ãr¹âñ¸F£¹ð yä‘Õ«W¯]»¶’nK$’G}”Ä@ßûÞ÷î¾ûnä÷¾þõ¯ïÛ·ïá‡Föa˜‡zèž{î¹á†vîÜI®°víÚH$r»G2h-·Rm||\£ÑÀ9YY ÿÈ}iõz}8v8¬<FF£ÑÚÚZ¿ßTÂJ†555EaÿG,›L¦¼^o™¥ €Šå¯@”pKÍ.Ä4Ñh„§°Å ‚pYÝÈår«f2VD_‡Hëær9ø!Zƒ[œŽ³:†d9ÄŠ½XËù@ @ƒp±ÂˆD":njjªººzrr2 Âoò <,,ÿ‘í„c ¯V«•ËåñxH2#¼ýöÛñxÜl6óùü¹¹¹ÎÎN™LV[[;::êp8‚Á`sssss³T*=pà@y¯OcéV&.S‰öaŸÏ×ÞÞn6›S©Ô¡C‡NÄ9‘n”ɲêKËtÛR©8ºêêêÆÆÆòù¼Ëåâ¦F?çd2™àœœNçÞ½{¹_xá…Ž;VÞˆŸvÚi»vízôÑG‹Zí}ìct˜¹cÇŽU«VýøÇ?Þ¹s§F£yê©§Ž'Š /ºè"ü=33óÔSOMNNžzê©W\qÅK/½ôüóÏ'÷Ë_þòž{îùö·¿}ùå—³2r;wî|ðÁ+_XnPã&ˆªªª‚Á ì7W666–J¥¸Ù-h%‰ÙÙÙX,¦T*A– …r¹\:s& É0LSSÓÐÐP%IÚ$•×'•H$PÚå»JÈP»<::ÚÚÚÊçóûúújjj*Äç¢d””J¥Z­.ê•%‰J¥¢ÕƒÈ €‹=•JÙíöH$b2™ÂÅ# E¹Á¥P(įdãr¹ oýýý`t¥™Îéàîµ(käšÇ¥Ói¨ýÖÖÖ:­V[(^|ñEŸÏg6›E"ÑÀÀªùS©”Éd ) ]]] îår¹¢ÑÏñ!jq_"‘*6'¢[Èí†ÑhÌçó\•T*e4¡EB†Z*•ºú2M­VG£QPa…”H$¸¯í✔Jå–-[Ê|áôÓO'Ù0È_rÛ×¾öµ§Ÿ~zïÞ½Ñhô‚ .(ÿ‹6›Íf³566~þóŸÿÛßþö±}ìwÞYl·ãñøé§Ÿ¾~ýz²aÆ0ÌW\ñì³Ï¾ñÆ„Âç±ÇÛ½{÷ 7Üpùå—sÁíuuu>ŸoAÐõrûàpr555d“–äaÊÄRÜR”iáå‡ÐÜÞ½{…B¡Åb1›ÍÇËd2(ïäVbIH/`kjj|>_™ò9¦X•åw‹&@ …ýë‡#r÷3‚Á V«­««³X,"‘Èáp¤R©òÎÉjµJ¥R² $gém³|m)MØl6‹Wc~~fzŒ 奊Ãá0ÉáNa ÿŸÛÚÚzàÀ¢×‰F£ …N±Ô-k4`f#‘HKK‹F£Éd2###555 R ƒ:.‘HÔ××;v …‰*æ@)ÐóÂmkks»Ý.—«’ê°Jæ ž¾F£‰D"(?Æ£immíë냣*ªçTI+á £ÑhUU”‘1?+A2x½^Œî«”«þ°A¸@&“Éd2£Ñø_ÿõ_çœsNQ½¬O³Ù¬Á`À^+¢H±XœH$Âáð¶mÛV¯^M¾ü»ßý®¾¾þ/ùËã?3ëjR©T(Æb1Q¥Ö. gbb"'“IÔDMOOg2d~Âáp"‘ƒ¡PH­Vƒùƒ»@ûùÏŽd ŠnñBþ+eí`¬—,oý;ï¼C×¼!_„W”€ þ´¶¶–Åè¥ÓéŸÏ'Ð@ òù|, …BÃÃÃû÷ï÷z½Éd’ÇãAš†âÊÜ'>11QÛ/¸g566’’ÊÝòmjj* ¡4~3›Í9rÄëõJ¥ÒÚÚZˆYnÓÛáâ`’ËåõõõÙlV ÔÕÕSŽà‘óù<×Ç@¥[( …B>Ÿ×0—ÞÞÞ¶¶6œUWW°-Ã0ä‚ÌûAº©T ‚ëz½ªð@‰¶··>|˜‹„ÅCoooÇ㄃uˆ˜NŸÏ‡]F¥RyäÈ‘£GNOO8pÀívŽŽ `3h4š}ûö}æ3ŸÁ‹Ö‘ÿ3¶¹¹¹+Vœ{î¹O>ùäì^SSS$éïïG1‘Ðf¦¹¹ú{‚›žžæ®@ @½ò+V¬Èf³„Èb± k„Ý n —À0% ílˆ¥J¥E‰šššÆÆÆX^¿ yð¹Üa¼ùccc¸er¨P(8p4ç:(W¡Pˆä'Iý„«×ë!Y‰Dpº…CCCƒÁápH$’¶¶¶C‡uwwsĤqÆ ºº:“Éô÷÷ÓÂN›7oöx<0Êô¶«°Èl6#þ€/”šÃá°D"Áî=IÝÝÝü‚³•5,p EEu‰·¶,™L"ò–J¥ù|^«Õ:NŒ$„ÉYÏ=ŸÏ5^¢C¯P(  “)A8jªÐéÖh4ÊROæŽ˳bØY÷EOú( +YåÝûp›þÀi³Ùl)<Þ;²ùg·Û±Ö/ÿ[¼Óv|ù#ŸüÜ´' Êú.ØâZ³fÍ?Ö²ôöö …¶¶¶ã»¥Ü8P[[k·Û e èèè8묳JqÌ|Û3û÷ï' ¬kŽ9‚pP¥Ra›mllŒ¼`›6mòûýÄ9±}„¹>|X£Ñ¬Y³æÉ'Ÿ¼òÊ+!ÜGÌ·A Æ®Y6 ²±±Q&“õ÷÷—™¥ ½½½(~`ãÆ©Tªè!l¥Tx× ‹µÛíÃÃË­-v¹\jµš /ŒFc.—«dσî!Öa VÃíTWWsñ+*•jëÖ­ 'wwwÓE"[¶lo ®\ƒÙƺº:¿ßo0@s.“É 1êû!R%-rèw(ìvûÀÀ€J¥ª®®FÁz<—J¥¤:†›ˆ›‹Å¥}hè.X—*$/'S—§=n_º·p-Vc¥Þ#t·è›‚­²[n¹¥fý¹ëûçÆºö/Ãkþ­öÏÎ:묑‘«Õzë­·ÎÎÎþÇü¨·:::xà»Ý~ë­·NOO××׿òÊ+ßýîw?ñ‰Oàt·2ò°} IDATÛ}Ë-·ÌÎÎÖÕÕ½òÊ+ßûÞ÷¾ò•¯,…ûÂt/c›uŠT*ÅKe0òù|Që D-T’Í¡òë§¢Å$qTª¿Ÿi'—„S"‘Èd2dÉÄXÔY ¶RU$IŠ.†–¨sr»Ý‹’Œü§h³³³E¹õþm÷îÝÓÓÓ7ß|óÇ?þñ3Ï<š¶ÄÝvÛmø; =óÌ3Ï<óLQÈγÏ>;00ðOñ¼h.KúC¦´@5Ã0ô 7Î(ó[ ~‡ÖϵZ­åO'Þ4 ˜,¸N‹(õ1ϦC¼E2™ÄÖëõMMM(ìž™™Q©T¸`cc#ÃÁòêtº™™™¹¹¹êêjb0ï‹’ ¡P( úœ¶òÖ¥šZ­6›Í–¯[ã6®40¹fhh¨”yÕétjµä<¯è´¡¯| »ð£…B~#èC€¸Ô}ˆn¨ïÀÆÌÉ’»Ås,UÊDfu%µÇÑ.:›y¿Æ§(MÉuNF£ñµ{ñÁµÚÚZR‰´DÚUW] Á½÷ÞûÚk¯eQúë_ÿzã7nذaÛ¶múÓŸ¸Ó¨¦¦fýúõëׯ¯"þjEùȪM$Y,–ߨ(¿–§[6›€& &‰_xª^­¶¶vll¬cá÷ûY_“H$@k±ªÞis†í¨ùýþ¹¹¹•+Wêõú@ @P”îÔÕÕƒAøýþ|>MVÀ0+¢ó<ÄÄ“^¡¶¥¨ÇEÒ5‰poŽ3x<`^b±¸L­)@¸„±ÂEØÓbm‰ …ùùyÐA1ï 0½&°PÀÞ²üZ­Fhˆ‚Ù™™––‰DF‘yŽD"ô)*•J"‘TŽžfuƒåªS©Ùí&ê´ Æ©ôYÜõ–R©$/ZuuõÌÌ ~àÊ_“¥èœºººÊG‚ÿ¼­££cÆ `ÖY mûöíuuu·Ýv[¡P¸ï¾ûèÜq ¸ì²Ë6lØPWW×ÛÛ{ÅW\tÑE÷ß?÷"k×®½è¢‹®¾új·ÛÍåY:­¡¡att惆ab–…N/èî×%ü +®B¡ÐjµÜ†–¥¼e<½[·‚nÎ`0” |c±X"‘ÐjµpŠsss@Àív#HÓ‚Vf~~žŽxhÇ0??ߨØÈ“påæÕÕÕ¥Ü DrA²G„ïÃl6VrÂÅîQ©Þ¢–Òçó‘‰Á0ŒP(›»\î«Ôœ‰Çã?Ê’…v !”R©4›Í¨› €t„—L&»X¬üd&º$¬9&É ±›ÄCÛl¶h4 =I²¼XTÏ—¢sr¹\ õ/·“Òn½õÖüãûÛßÂáðÎ;?õ©Oþùcccçž{.Ã0r¹üÊ+¯T(½½½wÜqÇý÷ßÿ£ýh×®]çœsN¿è¢‹z{{wïÞ}ß}÷MMMýïÿþïR¾ÙÉÉÉ+V b8‹c=4˜BÚ–‡î_èìõzY‰)ÖëŠít¡PXtã§h|S>Ó•Ïç¹iIú¨×ë-*®HlÅbA5„þººº¬Vëàààøøx86 ®âkjjHáµÁ`‰DsFÇÆÆär¹Åb;©®®…Bä6S©Ty\g:¶Ùl íïïO$ðå‹<”ƒ—ióóóȉ StÅ ­<†BÚ–š3deÀÂY € Åi§÷öÖ[o±Vmmm¤4ãħ"W=Àm‡ÃÁ­ô¡¤¥w6› [ª@ÚVÈU¡V«!+³ÔÊQNÊ3XRíСC555*]"]Z¿~=‰–D"‘H$R«Õ¯¾ú*¦ø¶†¹ýöÛo¾ùf<šŽŽ¼í¨ˆÛ½{÷-·ÜB¦æRÿT*Ä]£Ñ„ÿêÕ«A,ƒ, A’¶¶¶šÍæ}ûö£Ãçó± ÑÖÖÖ××Ç2F8ÚÚÚÚÛÛKäãÀ$Vžýt)²ã#Î, r  ž³üSy ‚ˆœi+d¨>—U(@³NNN100 0PÜ­o·nݺÞÞ^§Ó™ÍfÓé4ínì‚ä‘òùüÊ•+ûûûëêêPýE¿k…B¡¯¯Çãéõz¹\ŸÍôlŠànommíîî&ÝÀ)6lxï½÷ÐaØâªª*°¿—ïm&“Y·n„}Ñh”ÇãÅãq•J•“X,V__ÏãñFGGšhmm-ïYÁKË ¸ÉÈÓ ø\¬˜Ÿ8 ’¬S$ Y¾ôööÊd²ªªª¢5¢ BÆ•bR&­¥¥exxoY$áz,+á~x­òućÖx<ȬÅëø­¢ˆ>´Ôpô*,:N¯×óx¼ÆÆF@ …:ÔÑÑZçööö@ 0== »æv»Ëå"kÌêêêX,æõz‹.!AÁIÒjµ2™lQÚÇ1ùù|¾H$Òjµ555n·›D3`œÙd2år¹ ·+ø|¾D"Éf³dQßÜÜ ƒÁ J¥* 6›v¥êMÐ+ÁBD†•{kÉdòèÑ£N§Ä 6›M©T.Ê7ÓÞ`ÕR"Šù|^¡P¨T*”ÌåóyðörkÍIœõäÿ3—B!Ã0v»Ýï÷wttМ(o”B©ÞŠÅâ÷Þ{d̬VkCCr¹ÓÓÓÁ`0‹D¢ÉÉI£ÑØÞÞ>44Y¬‹<¹~Q 466rGƒÖðÕét„ÙÝ&Xu4ä¶”D2ÁCJ8—Çoõõõ GÑáZØ9ÑoZ{{»^¯/ ûöí#M´îîn¿ß¿yóæ MÕèèèøøøÊ•+u:]Ñ/tuuqÓëuuuñxœÞÖV«Õ4p¸³³3 nÙ²Óh~~žZÞ²eK&“9xð ýáªU«Yqt}}}4õx<6l‹Åo¿ý¶V«]µjÃ0ÃÃÃSSS«W¯Öh4o½õ–T*%ÒºX\ÌÏÏoذa‰GÿòM¡P%…B‘H$òù<¢ÃT*uÖYgiµÚ`0èñxòù<$h‡††:::ôz=² ESSSgg'm†XÄq,|. ö”•tX¥RÑbn‹j¨æç}pa4 …¤¤C“ÉdpEè¹X,¿Ê²Ù¬ÝnŸœœ„7™L€d±êGÒéôää$öðU*nœµÞ§Tɺ­P(ÔÖÖÎÏÏ{½Þʳ&"‘H¡P¤R)òò.ù$…é:.•JÑ_ (•JÔÓ3ï—*är9rMhò!@oa²òZSSSe0õÕÕÕÍ–N§GGGãñ¸ËåÂ2bddÄétÆãq‹Å211Aöy<^UUÕbñL¹\nA±c®K[0óIß/Y¾€ßívëtº ™ˆé¡X´sòûý?ùÉOþüç?¯_¿þСCçŸþµ×^«V«wìØ±nݺW_}•|óõ×_ïîî^»vm…Îé±ÇûÉO~òôÓO©'V{íµ×zzzòùüÿøG£Ñˆ¯]xá…Ï=÷ÜïÿûsÏ=S§¿¿ÿ¾ûîÛ¼y3Ã0ï¾ûî7¿ù;¾¾ûï¿ÿ²Ë.cæ­·ÞúÒ—¾´zõêææf†aöîÝûÃþpóæÍ9Ü´i~Ëb±¼ð $µ=>>¾ÿþÝ»w9räé§Ÿ>tèÙlÞ±cÇé§ŸþüóÏ3 ó«_ýêÁ|ñÅ·lÙr饗:Žwß}—ôüî»ï~æ™gÞ{ï=H¶/·T£Wô ïÄ–ìèè¨F£1k¡P˜˜˜ËåÁ`¬ÉëªÕj#‘Ë[°¬¿@ @•3Èñ¡N§Ã¹‹ê°^¯GF 8˜EžJ¥JÁª¸‡`— …ä@- v"xšL&É®ªª* Œd/k‹`f“ÉdWW—T*åóùb±X*•rƒNÒÎ Dà*´X,€ô–³¢«ÕšJ¥fffðC€|–’Ö*• õt~ ¼!Á`—2ØfÓëõxè!N)ê'PnWží…6ÇX™L&™L†å~{{ûäädOOkšiµÚááaÖÄÐh4"‘4í¬áýpgÈœAŒO_¹|eyÈy9çFô£½òÊ+?øÁ¶oßþüóÏßrË-Ùlöûßÿ>¾àv»_xá…M›6mܸ±¦¦¦P(€ƒë׿þ5¾°yóf@gžxâ $¬Vë%—\ÒÙÙ .çgŸ}võêÕàð`µo|ãx¯þøÇ?644<ôÐCøü¹çžcæ–[niii]»víÃ? çôë_ÿzÅŠgŸ}öM7Ý焆Z2†aN=õÔ믿~ß¾} ÜrÊ)äš Ãüà?ÀSSS·ÞzëºuëÖ®]Kttáÿó?ÿ¹7ß|³èˆ>|øèÑ£K çô/ÜÄb±B¡ ! «- =ztffšC ¢æ†, J1Á°NMM±Dœ¤ÜéwX­Vc¡Ì¥HÔE#Rÿîu Òààpghhè.#àîüG"bì¬V+7; |.ñ7B¡[’E·W¡4ÁJ!‚ÊÛ9¸~ÑÄüD&“A _,›žž®©©inn333è<~r·d ž?Í:$—Ë ÅÄİ"Ay.tÕœÙlöù|ƒvrð(f³y~~ž5t:]Q*w¨¹û|>—Ë…ªýééiÚ3WÃçóÃá0HÿèL<1]3"‹+¾§å¶¢~ú¹ .­ ƒ\¦æ¨œsŠD"?üðyç·}ûv†a.¸à‚={öüâ¿€Û˜œœÜ³gÏððð‹/¾xÇw<þøã/¿üò¥—^zÇw¼ñÆW]uÕþýû_|ñÅþð‡]]]»wï¾òÊ+3™ÌÍ7ßœÉdV¯^ fÜ“(O¾wïÞ#GŽÜu×]Û¶mÛ³gÏüãk¯½v±ñz½ßÿþ÷GGGøÃnÙ²åW¿úU…gýö·¿…sÚ»woQ¾á·Þz«££ã“Ÿüd)«´ Êr+Ó<]í# ­Vkù} ŸÏG¬ü‰3¬³X X¾°ð~«0U¥ÑhJIܞĽX@`±X¦§§á2Ë\™îL6›åV3K¯kŽâ­X,Öjµà\€'Dét*òÉdR£Ñ„B¡d2955UF&Ð]«Õj³ÙšššD"‘×ë•ÉdCCCÀÓÌÏÏËP¤ó,åÖ©©)+U¢øPô™Z­V†ÃáR¾øœÏç#õ‡ÏQ§çóùœNg.—ëîîfÙkœˆÑH$$šDW(ÝíÅŠBq{Ëçó­V+æ0ýô4•àvÛŽß7(гÎ:«ªªêÚk¯%á¡Pxì±ÇÖ¯_ÕUW‰Åâë®»®¯¯ï…^ðù|_üâe2YKK‹Ýnooo_·nÝo¼±}ûö¢aÓ‚íÆoDZÏår]uÕU Ãìß¿Ÿ %²Ùìž={ˆsúïÿþï£G2 333ó“Ÿü8pì Ã\ýõ---Édr×®]ããã÷ß?Í•PIëíí}ä‘GÇË/¿¼Ø{íØÓ—Ûñ5“ÉD`>Ÿ'ÈÇ×hVrîŠ/•JáußÌÜÜœF£aÙ5c»œH$ÈšÒ¥¥Š÷Jɤ2”¦-n*½Ç}4Ä•¡P´uuuB¡°Tž°¨ÜL%«or_è3THè· £ œôŠôH[¿ßOð¹³³³ÍÍÍ2™ ª%"‘(‘H˜L&·ÛMŒ;Î%ÿ…&y"´r€Ì,ñz¹ÀEg#h í[¶lAåg8.OЊæô:Ég‡ÃÑÝÝÇ{zzX#l6›GFF …$*ˆM&“Á`°­­­<µ«Ùl6 ¾IÊ— Â%îV«U*]ACÏjÖâŒü]ÉRE%å¡Çïœt:ݦM›Šnõ÷÷ŸþùÜ5ˆ\.?Y Í‹/¾Øjµ~ò“ŸDR‘|þ½ï}O£ÑÄb1” ¡mܸñÓŸþ4Ã0;wîܸq#ŒBCCQX·Ûí˜Ä/¿üòÖ­[뙪««wíÚuèСD"ñ‘|Än·¿ù曕ŸžËå´ZíÒAæþ 4¡P¨×ëOÄ9•I8D"›Íy'—Ë599‰å¿Åb¡# NG^c@Òæ)‰@äÛh4òIχ21ÁçF"‘Ä$pѯÄì¢öw!‰èP‰¶¼&“)›ÍªT*Ö½“æt:ççça Yê´ø»©©Éív;N·Û-—Ë% ¹>ðÈxˆ(•v8PØ××g·Û€H$J&“CCC¬106 ±¼8.å@Ü4ä N Eã¢èl>ŸªõM›6Y­VÁ粨Çqø›Ó ¤˜XO’rÄ—NbQËWùC/C IÆ–ô0‘HïêñRûI‹ ×À‚e/H)ymmí<@–™Ï<óÌIÿ Ô8<ÿüó—\rÉ 7ܰzõêßüæ7·ß~ûÇ?þq¬)¶mÛöå/ ÉššlJÑÍ`0°><ûì³kjjyä‘ÅvF&“µ¶¶Þqǯ¼òÊu×]Wù~ ñåE3ËmQí”SNikk#ËpîvQKKËàà`…¸Ú2›C©TjjjŠlÏàÕ%ÈMÒèjrì@¬X±bzz: °æ’¥4Z䈎Á¸eÚ.ê§ÁüÆŠ„J…n´‰D‰„>šN§×­[‡bè@ P(PÔJl •¨˜À®ë½£A¸J¥ÄkÖ¬ ƒtt266F#Oggg …®ÖÖÖ6<< üF£A^Î)™ÍæH$"Šc¡)LFžåº kƒ9ÀU4&Ìçóããã‰dddL¯Äî·µµõôô 3 «ªª­0ŸÏ_µjU4%ä~555:®···hL»L—zX´žŸŸ/ê´ÊLì¢"tæ“Æwг<ƒ°üUþò—¿|êSŸºæškn¹å–›nºéwÞyõÕW‘?éêêúêW¿ºjÕ*`fÉY*• ëÖ'Ÿ|ò®»îºçž{@9‡=ÏÙgŸ}á…Þwß}8+‹mß¾ýñÇ?ޏLYÉd"1¡PÈd2¡@.‘Hd2™òšÄ™L†|˜°Óp•Jµoß¾mÛ¶]qÅ+V¬xøá‡þóŸ“b?†aN;í´ÿüÏÿìííݹs'«Ník_ûZ)éèt:ÝÒÒ‚zÂåv|…Í"•Ê$u#¢¥RÙÔÔäñx¸Yr˜-5åà²Ù,À§©T ˆE.D7›ÍÛŠ ö÷÷ÓØXœÂZé—’kÃ) , -‡‡ ázÙ¢€Ê•+Wvww£«XiÑHÕt:ÝÑÑÁçó <6“ÉÐ6+‰H$‡Ã;Ð××ËŽ[fà=zúuÅV~(•Ja4XìD ÃôõõuÖYjµ:™LŽ x;·jÕªcÇŽ/<—ËMLL @À*xÁS.5’4†”[ÂPUUåóù¸¤R©t:Åe0$ìïïommÅÓG7èŸÎår¨¶ÀŸ˜˜€š0KT°®®Ž?…Óý¼B®EVú'³‚?ò:¸\®™™™“¢±777çt:ió{<ΉÇãmذaÏž=ßþö·ÁXóûßÿ~ݺuù|¾¹¹¹µµõsŸûÜõ×_Çw\zé¥O?ý4†éàÁƒ;vìÀ÷oºé¦‹.ºè¢‹.ºì²Ë>ûÙÏ2 sÎ9ç@@öÛßþv*•ºãŽ;öìÙSÆ3ñx¼ææfZZ×f³577ÊD¢ææf»Ý®Óéš››ÁãKŸ¥R©š››é9k``€Ðð@µ(“ÉÅ[†a®¾új»ÝÞÜÜŒâx•Jår¹:;;;;;  ŸËå²X,|>ßh4Úl6¡PHŸE/`ËTðùü“Xòï™Ç£ Áêõz”>’SŠF£ÉjJ¥Ü<@h²ÞyFÌr"‘ÐëõX#ø\Ÿ¿nݺp8L´þè™2éßR'‘HŠÆR4 ’¥»Ê¼/wKÞ Ü2mQ‚[WWçõzIêF,WUU[­Vî*t¨ ©TŠŒ³H$ª­­dM<¦þþ~NWSS£T*!h’Íf‰óÀν’s+qH'ŠÅâ\..  {<žñññRH[¼¿tºUïnONN:N¥RY´€UÍHîˆL³Ù,ã;Àç²F˜y¿ä¡¥¥…4“Ìp)8-ÃÁÌ2ÇU5311Q[[Ëb}Õétb±xvv¶Œs…kG2ø…B¡hÈε'M ÷’K.yùå—NpcÿßP W«Õ …Â+V,û˜™ýù|^,?ùä“W]u•D"Q«Õ0"J¥0¦ò3 @K"`6›éü~%­US…B±}ûv@ —Ë_~ùåJŠ6ŽU Ô××OOOs39<O¡P`éÍ’»eáU­Vk,ãšc£Ñh2™­¥½¸J¥*ŸœÉd –-sÈårùý~Põ„B!¤I«««{B‰97æcéK¥R‹Å‚5Ëó9ÎP(D2í1-‹ø’T¤Ùl¢Ysƒ»Ž‰ÅbpÞ,šsrˆuJMMÍbã¹\ôø+F`ìåß ¢‡*ÑwÖjµ»wï–;×%\þIé÷ÁƒgffÎ9ç.óÍr[n~? IÂ455af²bh®k‰ÇãØ¬¢ù¶+ltmz™7P.—Cizzš[v¥2™=TÌËår”ËåÆÆÆŠâóùä‚tôCn™´ÙÙÙ¢ÆÅëõNLL°²[Ñh4p¹¯X曵_E? lll„Ôf±ŠÇàóù|VZE­VFÖd2Åãq®Ã8ÐÏÑh4b4€î"Ÿëõú‘‘£Ñˆq€¯‰D:Ž28ï…SŒF£^¯çú†_9÷®TO.:PèÆ?\F§ÓÑõ¥Þ ¢­}ç`0ÈÚ­?9Îizzú£ýèOúÓRµ˜Ëퟺ½ûî»÷Þ{ï¢*Vÿ•7H$ýýý¨€*C(ÅÊÕˆD¢E%Ze2É*—y½ççççææ@E#m‘?s¢Wx†åi`Ó¡-K_ŸÕOÚÒêÉôZªªªJ$qµ··÷ƒÐ!ÃM‰ÅbNW $κ÷ '^Ñ)º¬„ûáµ%¨„‹UѼ¸üòËÏ<óL†a®¹æÌþÕ«Wó›ß¤¿ÿ­o} õ¯kÖ¬ùÆ7¾ñì³Ï>÷Üsßüæ7Ÿyæ™ñññ 95>ÐV__ßÓÓC¬Få uôûÌR5M§Ó´]æ6¬ÜÏÅ^=+…åõz1nn·;³b¥¬4䨒x4™LB¡0—Ëa{#‹ÅbFãõzçççA$BUºK7ˆ9q“3>ŸÆZŽíx<îv»ÉN§“ð¸“f6›£Ñè‚V±Ü8IÁC#‰J»Ä4Hå!ëèñxˆÃ£ýºV«R ú¹étÚb±ÔÔÔlܸÑétz<ŸÏg±X‰Äðð°Ãá 5wðz½¥©Le:ÈEŸ¨ÙÉ'V«5 ÑqaQ) T²ÔÔÔ`r£Ä IDAT^¨òÉm¸)n9;ÝX"¹¥Ý,çZTZw‰*áþ³dÛŽ=ºqãÆ¥ƒ· Ÿÿüç%Ém·ÝöÄO\{íµ>øà“O>ùûßÿþÙgŸ¾ùæ›éDóÕW_ý‡?üá¹çž¼å–[ø|~,{öÙgûúú°Š\ Î ,ãĬ[,–T*µ  d™<€d¥Ré‚Rž‘H„A‘Æ•.››+¿[CÛ¦x<Ž{) 4KB¡‡ÃÙl݃ u ½ìqp¦¹Ýîl6KÄ…B¡¦¦¦¢æÊr¬' ÑG&“™L¦R4]p¥r¹Üï÷“ÒJ‘HT]]½ T¢N7;; «—ËåÊ×àù¢d …U«Vùý~Ô[f³Y¥R @[)äbDcSSÓèè(Ée‚@†N§ÃØÒøÜh4 2æ¬ÉS”Ñ5—ËMOOã¬|>o4‰Ä‰“r•ZL”'Óétv»}fffAÞÞòKЂ»\.(SüK¶%¥S•Éd:;;Ï>ûìM›6µ´´ƒA³Ùü½ï}/NoÚ´I.—C“›|]]]8„âl·ÛMˆ¾¾¾'žxb‰"òçX,V†(ˆ•Qiii)U«Í‚aÖÔÔpkÃJŽ¢ù½ ¶´;x%T*UMMÍØØØää$k.e³Y®9noo_Ä·Y*KVj$¹vµnooïéé)_ÝgœH$ˆ±æñxôž“Óé„ÜQQ?á÷ûAµNb#¥RY”ð>ÔÐÐaªÎÎξ¾>N‡' ÙI¯×»yóf¡Pøæ›ojµZ…BAg†ËäÇÆÆˆH.«Aî`jl›¡­X±bhh¨¡¡†•g FMMM½½½$FL&“'WÄ>U.—­Q,ûŠÊƒ…Ãa MOðùKÐ|K¥Ò%«_w"íàÁƒóóóKϤÕjkkk+\ѳÚï~÷»sÎ9géì¨)•ÊM›6­Zµª¶¶¶³³S¥R­V¨ªªÂ–~kk+Ç«¤¦ˆäBô.+W®,eJˆå%Q) ½Ü/g³Y hƒˆàƒu¨Ô¼êéé‘ËåÍÍÍø9Sʯ'è2ïƒ=E"9Ëf³Ñæµ¼%tãE¢D.—Ó¿X(D"QCCþ;11Q*IÛÐÐ —Ë[ZZ@ˆNwcÛÞÞŽ!R(ƒø·ÛÝÙÙÙÕÕ…Àô¯ý+È[ÇÆÆüÿŸ½/“«*Ó¿µÞÚ÷}¯ê¥zI:I'ˆCp@$Ï£‚8 £"èD”aQVA|”A”\FP@ÁÄ„%!k§×ôÞ]Ý]U]û¾×ï×/·–t @¾?xBߪ{OÝ{îùη¼ï‰,_¾Üf³íÞ½ÛëõÆãq8—Ë%—Ë»ººz{{»»»e2Ym-n²P(¨Õj‡Ãát:ÑMÀãñöîÝ pk±XdÖZFFF@„qæ™g2Oˆ›S·­€„2,üSX’ÇãaN§¥lÚpÇÆÆúúú˜û!$?ÉlÇÂ$ÔHóétÈCÜãv)¯~èl)‚ÓÃáááá##eÑh¾¿ZÕÝ»wC?pݺuÉd²îv{nn™‡ÁÁAš¦É"xÈŪßB»¨6;]÷.µµµá´R©Ôf³áÝno´-ðù|$.Á…È¥'&&ð¼ø|þŠ+êömcÊÑ4m·ÛÛÚÚ¤R)®.‰ nרÛ>Þjµ2·öË–-+•JÓÓÓ¨ -,,07Îb±˜œ íŽøÉ"‘hß¾}R©´. Š@ ðx<*• ÅV*2N“Æqæmî˜|lxx8‰ •Ëåööv¤¬áÅ­V«L&#ɱt:=55G…ᑩݽ{÷nÛ¶ JÉýJ®>55•L&wïÞ=>>Ží‚X,®»?€NŠJ¥ªT*4Mclr¤(Êï÷“N?0Y,_¾œ”a.—K(6gYúÂBæ Óù5 PÄ%XWa W«U‘H½^_ ÛËå`1­µº‡oAÙ¿ÿ–-[Èc…B[¶l©ô‰Ä–-[–¾}/­\.oÙ²d\°¡¡¡-[¶lÙ²eÛ¶mÔGÌ„BáêÕ«Ãáð–-[n¾ùæË.»lpppõêÕ4MoÙ²e×®]Z­¯lõêÕB¡°î¡ãÇ*•ÊÐÐP"‘èëëƒ - | lm¢è¹áµ\b ï!Iåiš¦iZ¯×‹D¢ááa¼ä$B¨Q(†o‘uœÙÌÍ °úûûF#ôýع{>ßãñ¬_¿þcûØŠ+ð›ÍÆápX'÷þAQT2™ ä„©Tj``T­­­µÃÆÿV*• „ …]]]ùEÖ”¦i¦//‹£££à[#È2™ŒJ …B(‘ç-ðº3Ôììl¥R'àwN‡8F§Ó‰D"™L†ÑbÇ Ñh¼™˜˜xã7öíÛ—Édêögc$•J¥R©Ëåbж°RŽûöí‹F£&“i||¼R©äóyTËd2 ‰D²}ûöd2©×ë1g(ГӻT«–ÉdM uÁ`°9Ô›Hrvvõµ1n"‘h$«r;Ö>‰çèèuwô$Ó9º’õÚµ&“©É8®»îº;î¸ã+_ù ÕæÍ›?ûÙÏj4š}ìcÌõ÷÷Ÿ{Jåì³Ï>Ü; …¸\®Á`8æ9SŠ¢^xá…íÛ·_~ù壣£_øÂ(ŠÚ»wïõ×_¿{÷îÉÉÉþð‡h$}—͹¹9•J%—˱6q¹Ü\.‡—ŸËå¾/’"‘èôÓO—Ú·¾õ­uëÖ}öÙ¡PhçÎsss\pÁ5×\ÇÁgœñÅ/~1ïܹs~~~Æ _ûÚ×b±˜P(<óÌ3ë.šï™ñù|l<ûûûŸ{î¹b±HÓ´F£YXX“H$år™$ÁišV*•¬ý#)ÞJ$‰D’Éd j·”«‹Åæ=r¹\¥R…B¡ÃöÂC`ÐÉe5[«T*d‡ š. 8d2™ƒêêê‹Å©T ­>Ÿ¯R© Ããñ°ã4›Íù|¾X,Z,D0èžÇ ÁW©T@ÝNbÒ‘ˆ*T.—CËÀIäR©är¹ù|^¥R‘VÀB¡ … ÇW,½^o$![u, ÐPÇÝ „âL3,{À•Ôj5)ÃÀÿ¡Ñœ :xatp¤ÓiˆOâžøýþD"Œö4dV  íÝd2yÈ>øx<ÞhYÃ!‹Å …P\Õ:EQh_ìééy7:Åð“`é iºÉ ûÐh4ÙlV$ÉårGÚs0uϸ\®R©ÌårR©ôœsΡÕÖÙP2ŸMǃ¾Ã«\pÁ{öìùÅ/~±iÓ¦@ ðç?ÿ¹§§gíÚµýë_Á Åáp 9 {ã7Þ~ûí 68Οÿüç|>ÿŠ+®{þùçñzÏ–°ÉÉIVI6 žzê©—_~¹Ëår8·Ür˹çžû‘ žìvûÿ÷³þxçw2ÿ÷¼óÎÝ{í¡OúÓ ~?Þ,—ËŒŒH¥R¬³ÌŠ}.—k¢)ÇtcÇÊb±)ÔUPe9Z–Ü-4Cë†q4M3½,ÓGâB¡Ðjµà_€f]±X”ÉdhT ‡Ã …ÏX IÒ¡J¥2ŸÏ7÷¬T3¨€3QÂe*Ž‹D"F´/º++• 9'Öýr¹Ü¼ üªÌ‘ a…Z ®@`qq‘lÒišG"+ÅÍð‚ÑhÂizzš,µà¿—H$¹L& ‡ÃM$ÒëŠä2oyúL×»zõêºÍÖï£ÁýÀy“¤.6%µÏ¨QÂápÌÍÍ!4O$‘HDî>Ò´Þ%—\b6›ï»ï>ÄO=õÔš5kòùüÍ7ß<==MÓô½÷ÞË\¼^{íµï~÷»h>¹ûî»xà™™™›nºé¥—^¢iúÏþóM7Ý´téÉ£·k®¹fÓ¦MÌ¿œ}öÙßýîw].×}÷ÝW­V¯¿þzê„}ˆ ¥¾¥tHr8ÔW–.Y{XFIËr“Ö2ìÚÿ]XX¨ÍËf‡" €pqhttÔçóE"‘ÑÑÑÝ»woß¾}xxøÀù|]ï333ˆ«Õ*²IXz˜ :f Ïç{½^À`‘ ¨;æ¥ü:tÆ£ðV­VÕjukkkGGGkk+”èÈ'qâ†ív{“çh±XhšÆ!¼ÄªÍd2‚³aŠ}4/ffffff˜>ƒÌô lÆÌM‰D"—ËŬ¾,å.Õ~¦Z­ªT*Ë6ÉÂ!L9$I’ºG0N'&F:fEŠî6›­Ñ!À³¹€cPĶÙl7Üpà 7ÜpÕUW‰D¢ßüæ7M>^~ùåeË–]uÕU^¯÷ùçŸ?Ê^øcbwÝu× —ËU.—“É$3â„îWm_«ÍfC®.b: !žR©Ä ¡\.ËÍÌ'1>±ëz½¾¶‹ƒ•d>dß2 8aíç –ÏçãóùLщw¤÷ÕúéOJÔlO=õÔ¯ýën·û¥—^zä‘G°OaqCÕµ?ýéOû÷ïg•ß/»ûî»~øáûï¿ÿX©ôž°hŒÕ²*‘H “qL®uH±µl6«Õj»»»±§iúé§ŸÆU*MÓushX¶Ìfs:ÆjŽôP∹ÂBðKÇã™…Ü(¢™HÐÊd2tp …|>Ìì‹ÄjµšÏçÇãqâ>1˜|>???ÈC¡PÈd2—„ËÊ(8p‡B¡Ýn Nèõz!Ìáp8Äb±Ýnçóù±X ˆ1`YCjmmœœ$Žˆä‚øŠü]£ÑÈårô¹\®……î. p{…B!›Í‚Ä<µ˜åjµÇ].Rµˆ"‘¹!ˆ˜3mÿþýhØa%÷;;; …AGÕ:ƒZzíTO$µOL bKÙ‚à[D‚ IN§“,ø‰D(Ýl6[)u„‘ÓòåËy<ÞªU«.½ôRµZív»~øáûî»ïÒK/ýÙÏ~¶Dâ×O|â?ûÙÏ^~ùå={öÔmûyÏìþûïðÁï»ï¾ .¸  ’à„}”­§§§«« Ý+G|«ÕJ²1KáÂ˜Íæ5kÖ¬_¿Þf³àT2™Ä’çv»¥R)@Z¬ [cHãZÆétBž‡µâ Þ¿}>Y%Á#G þX¼ ’Vâ ™)¸&¦T*•Je4Õëõh.X¶lY¥Rä<ÚØÞzë-g2 ‹Ö¯_ÏjS‚à“Ï烞l4ÍåröÔÔT¥R‰D"ccc~¿¿T*¥ÓéJ¥Âl-¶X,ˆfffáÄU ’ Z#€¯»ºº(Š"8'¤° …²eËÈÙ{¾Õ䃦R d]fR^e³YæLkkk+•JƒƒƒuOèt:!/×d!-—˵õBæàáÀjÜr¹¼ ‘óð<¦ÌþØ\.GxîÁ¼ul"'Š¢öîÝk±XV­ZõØcQÙY¤R©J¥R©T¹\ޤÄb±P(L¥RçŸ>¨®ø|>úT*Õ¦M›^~ùå^xá}ìHŽF£H_àÁs¹ÜCrKsãñx â?áŽØ8ÎswÿÜ—q¹ R+BJ `jhdí:»»»‡††˜Ÿ_ ‘1ë[ »†vC.—3'Ÿ|òŽ;ȵ¦¦¦ªÕêðð0q à#')þ¡¡¡eË–íß¿_¡P( ÿ\»víž={ §Äj¼ffÏÀÄÊúiL)r'YÞQ§Ó 4utt`ËÜÒÒzxdÞðI&%üÎ<óL™Lz{{wíÚU(Þxã Š¡ÆÛÙÙ‰Ös ƒéh;;;E"Ñž={*•J¡P€R{±Xôx<øîž={ȇIoTkkëøøx¹\c†GÔAÜ1Bfñ²X,òxŸÏf³ßWtlÅÐ_P÷¶ ¦U(R©MÓ“““`wE`>Ÿ'L¾ÌÚ —ËÕjµhÇÀ2'‹Qç(‹¸-x”ù|Ýð‹‹‹•J%›Í2{ fffડÖ©”d29>>¾aÆ–––x<>00€;/‹¥R©H$*‹jµzllÌãñ˜ÍæjµJ: dÅÚµ01mÄ%¡PH*•2szZ­V"‘Ò96t¸yìÃ2ìœÈ–N¡Pd³Y¹\ÎzúØ‘N™ƒüu&$oAÊFµZ- ÏØ¾ƒ´Þ ;憮§÷áˆmppP©TÖv#çÃÊë$ŠB¡ Š dÉ …$/¡Õj™}eµ>£Ö·-¥/j„àÔiºžü…å e2Yó® ¡P¸°°€‘‘\,•Jett‚,( ™);¨T*•¬lžH$‰Dðñ&hµZ¬³<O«ÕªT*&æ½VÓ–å_Ëår,ƒ"êÔÔ\óþG©×ëÃá0‡Ã‹Å¸Û …ÂétJ¥R¿ßî|…¬­óóóM¸oöÄ/jmm•ÉdÑhT§Ó9N§Ó955Ež8ú áøŒ•Ëå&“)‘H(ŠFLäˆðÀ! Q€‘H$,R;š¦IŠ˜L&’C[â4;CŽ91òù¼H$âp8ÌK£GQ¯×Ã77ái„¡åš>Ÿ;3È `œÞÙ> J¸\#›P£Ñ‰DL&Óìì,Ù«2Ë×v»DÌ]ó=/K jÉúIH²³"œN'ÉÖ¢tddÖlÐFÕÈ?5ª: A§×ë}>v²Küˇ †x<®R©HŸùL6›Xõ€Åb Y €½¸|>_¯×ÃÃOc6›c±h ¢U*•ÅÅEº1†\._deÎ ÞÅùçççÕjµÇãCmixxx~~ž%\¹zõj»ÝŽö6^‹‹‹h9©»qA¯™lde«%Sh´èY­Væé˜Ô§¹\®ÉdjäJ‹Åâââ¢L&ò¨ÆM=¸íMà´Ì‰‹ÅÌfskk+žìÜܾU§Î‰ Õ?L† À ‡ñ¾ʬêsõ¬[Ø`¢:X Æ=²Êh(r¹\,R&T¨VÕ0•J¹ÝnR"ØÏ&W±Ûí~¿ßn·ÏÍÍét:,|‰DbrrR(¢ßÌf³-Eì «!‘»EŽ.™LB?ä{L_[—æÖÒé´ËåBx„9æp8öïßOØXË4x%R©y"©T ù1‰DÒÒÒBROÅb‘ÄÍétÚívãZ`z¥XV}>n¾P(”J¥Åb‘Ëåþýï—Éd˜6õz½ÍfëééÉf³p:‹‹‹¼H}Åårñù|’[Æ£$q§ÇãYŠ|"ëF5)š²N¨×ë™-ÓuÍív3¹†5 “«L "½a6›Ñ¯Ïô¸θI.¡ö5Ôh4z½=>µzǵsBl¢ßå*y¢¶ô¾–×&­±My½^hí0A£mòR ͺŽÏç¯ZµjppP¥R1÷ѱXŒ•]„Žb8näÂáp¹\FõžéeɲÅáp’É$¤ ë&»ŒF#óP(jmm­V«###8 |’@ X:!@¸è_`õ©ýj4gffð£*• kQFY¨R©¤Ói‡ÃAed_išfFH¹\Î`0Ð4‹Å˜×Bsj*`CoooÇÆ¾•JE$‰‰ g4'''ý~?jЏ±¹\Îçóùý~B,ÂLv§¨T* ÒÆôâà_ÀDjkkg9ét:H0ãéc’m³Ÿ‚×…Ó² jÑäÞ²Øraï‹}ÿûßÿýïÿ¿ÿû¿h|ÿ€ÚáÊÂÂj•¶)ŠB‡1—Ëõz½µ} ‡tNµé8°9±*Ï]]]@Û0Íï÷{<žÉÉIt“[­Vf‘†©i[·x^­V‰ zí`¥q2™ÌÄÄ„@ `.”¹\®¥¥effæI<èLOOcáv¹\­­­ÌÇ©=&ƒ8ùqBä‡Ôâ:뮑H„,»$8.•JHíÚl6F344411¾|Ò^þY }€åZ,–\.·{÷n@ëÒé´L&ÓÙL‡+“É´Z-«ŒÄŒÑ™yàééifZ’µ[š™™éììÄLcÑEâ„ÌNOO/Åg°¦+L¯µóçˆÉ‘ …ÂÈÈÈÄÄS¶øƒáœNØ{`©TªX,*•Êx<ÎãñÐÒF^'iѾŒCb±øºë®ûò—¿ŒymP·G™W¡Pà$TmŽc—W —ËenHñrËÌõe2„)µ¨^(!MMMÕ.n·Ûï÷c§Ïáp¦§§Y½CCCs³ÛíÌ´£0ÅR—!›z–ñx<²ºU«U²Ê éòå˘‡È‘oJ.—K¸‘´1 \.W,C¯]þøu•JÅçó)Š}ûö%“I8H›Í†Ûe·ÛÓé4pKÝÝÝ}}}{¯V«,|.Æ€§`±X0gX”¸ét¯[6›%3­ní‡tÒ³îÃ÷x4&“©\.7/µ®U*•\.ÇôLxX¬€×|íÊ+¯ôx<[·nmmm=묳üñÞÞÞóÎ;oõêÕ=öX.—õz½W^yå¯~õ+ÇóÀÜzë­£££íííçwÞÇ?þñk®¹& mÚ´ÉãñüùÏþüç?ÒI'Õ3ŽCºÿFÃU£O &‘.%ÿKÒGÌw üßȉ±<“@ p:>Ÿx&tB%(T«Õ¶¶¶X,öâ‹/ær9.—ËlåÂUðh˜Ã ¯4J ø·ÙlN&“Zív{] ³ÙŒÒýþýûiš®-ôx<ØáHÎgvvÖãñ,[¶¬½½Ë:‹Œ)<::ÊZLÕjµ^¯cccF£þ@,Ûl6dYYǺûn‡\¿B¡`•xñD˜'œœœŒÇãTwQµZ%êårÍ{ «««§§ÇÞôO‚ IDATãñðx¼ñññl6ÛÕÕuÚi§9ŽÙÙÙŽŽŽÎÎN€½(Šjmm@i4‘ßô¡iÚëõ*•J“ÉDæ u?ΜNÌø‰ÙS÷·³þH4—ËXÏ©Î#x×ÈÓ¯l‹E.—K$2{ë*á~$"§ññqææK"‘x½Þ={öØívRíÝ»7®_¿>ŸÏoß¾™Ky5ôÞUÛ°aÃ'>ñ‰T*uýõ×ÿû¿ÿûüã7~ç;ßY³f;ðFsÇw|éK_b}ë3ŸùŒN§{ã7^|ñÅ‹/¾¸££衇ž~úé–––+®¸âµ×^;Þ~,`˜2™L§Ó!(!iuQ“jµš ÝeI—êt:–FˬVëää$óœ& ‘PÔ5‰¤X,Úl6¼«¯¾ú*>033½ÍZÍ'hŸãÒhá­uBsss6›ˆ.%KIlrÅét–J%@w™™LÖêâ"“É444„øüßSSSÙlÖjµÆb1æò*‹e2 0R©T"‘ ¥GQ_1›ÍhCW(‘H$“ÉLMMiK™B¡0 ¤ã€˜L&#DñxO,C O¡P$‰L&3== ö `fÍfs8&q ˆ?0˜‘‘‘ÞÞÞ½{÷NLLÀ™Íf‚žFI_"‘ I$RvBÎS("IÓ4Je^¯wzz:—Ë¡f‹Å²Ù,“òC©TjµZ2Ó÷nž@ƒÄp]_U›^ŠÙl¶ñññ£oU×h4ˆ- «ñÁçóI¥RÐY!^ƒÉ9§b‘óúëœÍ›9CCT @¥R”PH™ÍÕžžÊ§?M­^}œ¯Â?þøƒ>xÆgÀÓ Wä /üÚ×¾vÇw¼ùæ›ßüæ7ÛÚÚN=õÔ……… /¼ÐétÂ}ÅW|ˆÓ\ð?ÿó?û÷ïÿøÇ?>>>þä“O²ÞvdziÓ¦%ʈÜ{ï½ÍefÞcœ–Ìx@#·d}²jR¤Ì¥¦i@J¥XyÖµ°¢Þ øM§ÓÅbQ¥R¡+ÊñápX(»Ý®P(HœP6Ë3A1(—Ëét:0Ü4[1{:.þ7¬/ÌC‰D‚ø•JøK0ĺ¬ÕjÃáðôô´L&Ëf³  ‚E~)•J‘hI¡P˜L¦X,¦V«™­%Ø(”J%tÿ×`ÔjµJ¥CÐɼíjµD×µË7¤ZÉ‡É •JåÌÌŒÅbI$r¹<›ÍLN(‰L&“Z­ðù|2™,‘H¤R©H$ròÉ'ÛívHÁÆááarÛu:Ç›ŸŸW(Ó §¥ÓéH;¢ ✀ñ"ÒMöeÞ@ÀThÄ›3h®1«tGðÒ‘F!lAl6[ÝÖD¹\~àÀæÍ®‡vNœÍ›¹÷ÞË9ØVQ5™ª]]œ¾>ÎÔgjŠû§?UÎ8£rÛmT­ÃãǾño¬_¿ÿ•$EQ[·n½é¦›zzzî¼óN÷ØcÙl¶[n¹å /üД?øÁHXÇGGG׬Y³fÍš‡?ffHš¾nÐн¶f¦s"Ꟶ×b%jÇÀçó+• q ñ&× ‡Ã …‚¹ƒÎf³;}¦s‰DÑh4×½ÜRŒhÚÆ`0X» ‘å5ŸÏ3›© µekP&“A G2B¤é ÎÎÎx<®×ëY ˜B¡ÐßßVV¢´$—Ë=H$ªK‡A¶H„°±V«õûýµÍñÁ` àºµ+21ø|>ˆ ™÷V$1esMÓ---ØUD"‘•+W* ½^}æA,S(DÁ·X,H‹Ãá0®Á`˜žžFdLÞJÖòÍãñX`ÕF Ý#3Nº¬#óO\.—•l´IZŠÆì!2’œÇç}ë[Ä3UÎ?¿üÌ3•‡.ÿñÕƒˆkîk¯qo¼‘z—Ëï†mÛ¶íæ›oîîîþÞ÷¾§Õj …ÂOúÓr¹¼}ûön¸aëÖ­*Tooï-·Ü²|ùr( <ˆç?ˆ–Ïç—BY7|k8f1œf2™º0Û|>_·­œ‰´E0 '„ê¡´˜™™Ù·o ÿ ¤-S=82B¬E’¬µ)²ÿÉd.—‹ÊÕFã5¤iY¾™r¹l·Ûiš¶Z­©T*‹1OŠäÌf³L&›œœ$쟉„ˆ×á/À>ãßr¹¾“Ïçwtt°ö*• ƒÎ î X­Vd±XꮪLFy"’ 3Ø1˜L¦@ ÀÉ5:^øéh4:55…¦8t~¯Zµª««Ëjµ¶´´ Œ$|>ßääd>ŸGìÈüÉ>Ÿojj ¨,—Ëß¶lÙ2·Ûíp8jç ó‡är¹#0°¬®špµZŸŸ?âÈ)ŸÏ“9*¦&6›ÍÌ’¤\.W©TKvN}}ÜÿøŸã6›+7ÞHa[¡×W®¸âŸgÙº•sÜ/åwÝu×e—]öÕ¯~•ñûúöíÛwÆg GÓô¯~õ«;ï¼ócûX"‘¸ñÆßzë­½[r:7nܲeËe—]vÛm·¡*ðÀÄãñ{î¹§³³“õùÿøÇ±Xì²Ë.{àN?ýô 6o¿ˆ)]zV,kÅoŽ­Aî‰êÅb¬=r6›…ˆ* ݪÕjmÇn·ƒÌ¦nnÕ±XÜÒÒR,‰ þêV¹ÁyšJ¥<<ª ˆ0p[p!’¦“Édè€ooo_¹reOOÅbÁ·ÉDU)‰´·· œÄh4êõz.—›J¥ p¡P‡ÃSSSÃÃÃ~¿Ú€íííx=óù<\õòåËY#îR4Åb ½‰D‹…hÚF£Q¿ßOˆ ˜+~&“!¿…Ü|+“É 'ÙÒÒB¶ˆù|¾L&;õÔSÕj5º'@ÞªÑhXìäM&S.—Ãv! AŸ0‘H ¥R‰a4Jй\.Vkƒ^¯ÇÍYJ ]«„ëv»ëvrÂuL&9SωÇãÕÊÝf2¦¬¥pk–Öãþþ÷Ìæ¾ÊÅS Ö†êÉ'¿#ÆúóŸ«“fÇm‰eåÊ•Ìg|á…r¹Ü»îº«½½}ÅŠ|>ÿ3Ÿù ÍÎÎ>õÔS> %Øw¿ûÝo|ãèUS*•×^{í9眃Cmmm*•êì³Ï~öÙg% ¹×]wÝÅ_ÜÖÖ¶råÊgŸ}–¼!n·ûßøÆ%—\ÒÚÚÊáp^zé¥÷=]ÛDÐ܈ª)yI—÷¡Vº´¹a‡ÈÊÖ5æ2йº« —ËÕëõµG‰Nk 3“B¡¨%1«ýÆV©TL&r¡¤Îa0FGGI!Ô®¡P¨³³Óçó­Zµ 0‡Cn£×ëåp8sss¥R þ8ƒaÖ`0ÌÏÏcAT©T¹ðx<2™L­VC¼þ€_0±PâãÉ€¯Â0¬Vk<'„å,"vü.‡c0Huáf2™ŒÅb>Ÿï¬³Î*‹€šår9«Õj4‡ÕjM$cccSSS»wï¦iU7<‘ÎÎNW,'&&à@AËãñ@cÄRÅbq[íãp»ÝˆPiš6›Íx‰DnžÜŠ&“©„ àv0<¤ÜåQóüuU<âñ¸×ë÷z½Édrff†Õ¿ÓÌ9qÞù;«gžùŽÃï¬LpÛø[GGÇÉït¨&“éúë¯ÿú׿þ¹Ï}îÅ_4 §žzêš5k~ùË_~¸£%–®¨J¥bÝ™³Î:«R©¼úê«Ä9¹Ýn·Û³>ÜäÐûb.—ë°üÍ£¹"ªèŽÚl6¥RI@9]]]‡ Ú%&‰l6³o%“Étww£g¬Ñ·°V:Ž™™ŸÏ×Ú599ÙÒÒ211•% †ÃaF÷CQTww÷ØØ¸½É™¢¨R©´ÿþb±¸eËÖÕ fˉÙlF„dc{{;z"À‚¡ÕjišV*•ýýý+V¬0›Íù|~ff†Ïç£PQ냙'$7Ê`0 Ün·ÏçËf³¤ÓqaYìîîžžž†ˆ;sÇÐßß_.—µZ­ÉdÂ<N&“Ë–-Óétù|ààašžžîïï‡4m__ߨ؇ÃQ*•:P(N•J%VU ÷°®·p¹\±X ΩP(÷Q§Ó13Í'a¹\&> IÑ&s »»{pp¡g#bb‹,½ÜÕHîvrr²³³Š_µG›9§êÉ'söíûÇ¿ívŠEëËÂL£Lè{ljµúW¿úÕ¿øÅSO=uóæÍñx|nn¢;‰ä{Ì«=ÿüó]]]•JåÊ+¯üö·¿ý|s‰Ïºy¼Ã½„ÛíŽF£ñxy fIÃív‡B!‡ÃFÞr¹<77Ç Á§m´.ðùü}_ºº©’ññq"wëñx‚Áààà`µZˆ§.²™}"Zbè$J¸<¸KȪöööf³Ù¹¹9Fƒš »¸nµZ=33c³Ùд](˜¸cœ°R©ÔjÖÁÇ´´´ƒÁþþ~‰Drî¹çvwwƒpŽð­·Þ"[(0Y,NW·Žˆ¶¶¶*ŠÁÁÁ\.—N§IóK©TÃMÈç󃃃‡¥>500ÀãñÐ+.Ή»ªˆt: Ña‘H„ÚÒðð°B¡xóÍ7Á°Çãñzzz|>X” qíîîî}ûö¶ÌápÚÚÚ°Y1¸Áä¢úßS­V§§§ñÇU«VíÙ³‡ÌÕÚ.žFJ͇;Ûñˆ³ÙlÀD"Áììè蘘˜@ ¾J¥R(‡$lliiYXXÈd2D?÷ðœSå+_©ÊdÜgž¡’ÉÊ×¾Æ>Ìâ"«Á÷?f0:;;™é&‰DÒÙÙ‰¶4>Ÿÿä“O^|ñÅ×\sÍÖ­[?÷¹ÏwÞyEÝ{ï½çŸþGÓ9 …ÂZÉÅ–òŠ¥!¨K/†ÝúÀÀ`1X뙀@À?ß@±‰® žW·ôEøÖó‹E&)¸R©¤iÚï÷Ó4¼Q5e6þ¹Ýî™™ÉÐ4].—G6›]XX@Óàž={0Nð‚ûýþÖÖÖ¹¹¹T*l)¸EôzýÌÌ ÖâJ¥ÂÄ[­ÖB¡€‘€¨=„´f|||ùòå---Æh4z<¡P¸¸¸8<<œÏçW¬XÇs¹Üï~÷;Ü%"ñW÷žP…ÛÕÕ588H®EÓ4ŸÏÏår`G-•JÕjòN¬¤}kk+ö‘H„t‘´¶¶ …ÂgŸ}výúõH¬e³Y¡P8== Qù‰‰ ‘H¤Óé”ãišÞµk4Ÿ ƒ\.÷z½™LF lÛ¶-—ˉÅbò €ÙlÖëõèhçr¹¨5ÖrA±fÚ»'™Q«V\×x<ŠmP…FÄ¥à«HLÖä*M[Éy¼ê¥—–/½´~Ò5‚Ær)ï»]sÍ5×\s ó/+W®$Ýä°'Ÿ|ÿ`ýý„}8L*•òùüD"qÄo5ýÊ|»šøÈÑÑQ©TÊJװ𹃡Z­’f0h¡ ³Ù<00Ð\iT§ÓE">ŸOªô„[‡²Ùl©Tªå~öûýp‡À`0`5D‹¤‰‰„Ùlž››+ Dø\.—k·Û!éõúP(Är¥$ç„R©j†‘‘‘HT©TÀÁý¾Óéììì¤iz|||jj*“ÉÈd²íÛ·{½^œD.—3A¸ÄŸÏg&7£ü m6›N§[XX'©-‚Ï%'O¥RdIU(b±xqqÎ[¡PH$’±±1t1 Ë~¥T*ÍÏϯ_¿~ff擟ü$|ö믿^,½^ïüü<2Þ·¥Ói Úl6&œyaa¡µµŒb„R7'—ËI$’B¡P*•ð»X“ð}4ÌRV[M¥RÉçób±ø˜!9Cç,ÕSN9±±-..nÿ„½3Œ6çôyL2™<€¡\.‡Ž'Sî– mkõIy<T>ëîa¬ž%$FB¡^{[4rNØû;ÎL&£P(òù<ðr¹\Ý^‰D‚Œ dÝÑ"ÁRušššr:ÑhtvvÖáp#Œ7d& h4 …–õºEx‰D 5fz .A"‘”J%³Ù,‰Àˇ íj±XL À;†Ãa mqÆ …BÖRˆ–ÈÝBî=™Lêt:èÍÆp8LÓr¹<ŸÏ«T*4ËAù7‰hµZN‡® ­V‹Ü¬ÇãAž )5ø*©TÊãñN:餞ž¥R9??½Âþýû].×àà ¸bÓé´ßï£Ïèè(KŽ9™LÊd2’W„sEä*—ˉš0&!¶f)yÄG0Ã!wËšlNXS‘Ëå ØïŸsZXà¼øâ?=WYÀ «µR©”N§‰€ØGÖ ¯Éô jµšl´ÑïËb}>\+—Ë(8³tH¡*‹=O"‘ k=‡ÃQ«Õóóób±«-+ÚX©TpM©T*lV–Õšžžær¹4MG£ÑÚxŸ/‰j—!HÊ¢þÏ:- 9È7F"ƒÁ033c2™‚ÁàŽ;PHƒ]±X\¾|ùØØXµZÍçóR©”Ëå"@4 U$Q©TétŠÆb±,y±XL£Ñ@ü‚<; ìv¤– òÈx<MÓ &ºl4óùüüü¼P(õ;ºÌ^‚8äüü|[[›D"‘Éd\.¢®F£Ï" ¦×ë÷íÛ‡¥ŸèÌBY*‰ 5ƒÃáèõú`0H¨4˜"îØú4_÷ù|þR¶_u!Øàû¨=áa½5‚ ª‘£Ae‘sªV¹wÞÉa8ØÊ׿Nì×:aGàœÌfó ÂckÌ7ªR©X­VF388x40¼Ì¬=c©TJ¥R(a2 uv»=“É  A¾v¬P(€“‚‰Š …µÅ.—‹TÑ'¥(Êl6/..šÍæZY[Š¢l6[ Àê½9!Yò„B¡ÅbI¥RÌk•Ëå¶¶6ttwwø0ôÉh!EÓt¥RÁzD-ú šl¶ð0/ š‰DмžÍfûúú ùÇGFFÐ2@n”ÝnïììL¥R<ð),..V«U½^ŸÉd|>‡Ãa­§äV£"H–`&ãªÕj…ÏÆ…Âáp8Öét|>Â’©T ÷ ×R*•QT"‘Pwÿþý;wœD/‰$ ¼”T*mÁ`jµ$B^P0Öë¶ã‰4;Xr·MNÈ’c>ä x”…±#qNœGånÛöÏA|å+Õ/~ñÄjxÄ&>²mÇИ›>l«ñoN§ÑhÐ|4oKüS©TB^H¡PÈårlð!:Ž×ž€+*q¹\›ÍÆâR".•JLʤKq¢OJQ=œNçìì¬D"Q(…BTž ø€Ö)Ðl“5 ë Íf‹Åbð X›ÚÛÛ9ÎØØ˜V«•Éd…B¡Z­:ŽB¡Àåråry4µX,à3år¹\.I'ÇÉçó™LƒÐÏ¥(Êb± EÓ4OÈîØ±£T*•Ëe¥R !Újµ:;;«V«A0(‹I"  ]¥R9;;›ËåÌfs.—Ãm™››CŽÔétNNNÊd2‰D‚±6+¨R©¸\.Sƒ÷ŠlüQ{ …BG§ÓÆÙÙY|+™Lú|>8ªr¹‡ÁªÀårwîÜ988sø~B…—L&ñ3!“ˆÌqñ(ÅÊÇçó¹\®D"±î’0lTG ÿfN§æÆd˜`. Y,–H$R!±Ô“ß çÄùýïy?ü\^ù¯ÿª~ò“Çp‰™šš:ÜVà–UÎü ÊÂG,ÞuÂ(Š–H$ÐJ¨}?óùŸËf³7ŒF£¬!©Õj4ª$“I0¡ðù|§ÓyÈ¢£pNÕ*ç—¿äýìgÿ˜Î9§²q#ÕXçÈ,›Í:ŽžžžBº‰ùÇâ¿GcµÀL©T &Êþ¾x”‰.—ÛÑÑ188X(ð27yŽXÙ©J¸ÔA¹[æxl6zš»O»ÝŽ¥Y©TŠD"&—Ëõ÷÷c`‹‹‹•Jedd+5j*•jaaÁápH$F£ÑhÐ’ŽŸ“H$vìØ…awŽŸãñx,ËÛo¿íóùpÚ`0ˆ¥’}Ae±X*• Y·Û].—‘gãr¹J¥R¡PÌÎΊÅb¹\>88h·ÛëVÝ÷îÝ‹ÕôHäÞiÛÚÚZ©TJ¥ëYLNNB—‹…´eÍ`us¹\kk«\.Á©@÷°°° É6ˆ¦é®®®D"ñꫯ‹ÅÎÎÎ`0ˆ‡ð±¹¹9¸Ì®®.‘Häp8:;;«ÕêÔԢɶ¶¶™™pñ±šYÐëˆsRn¸‰5j*© Êår#€íÔÔTKK uP¶˜bPT0SAèàG[<>S7»H§V*•µ MK–¢*•¸?øŸÏç{½^‚. îÞÙÙ‰xÁ–X,v8ƒÁjµ®X±â”SN9í´Ó<ZÀ?ñ‰Oèt:ìÅb±ËåÊçó¥RÉápD"‘7Þx›´­W«U°¦’ÎòåËËå2´äq+&''].ÿÆãqŸÏg±X‚Á`(joo%koo/VCê ¶™F|K¥RÀ´Z­ …B4¹ J¥ÒÞÞ^§ÓÉåry<^{{»X,Fbvtt”| ¼«ävºÐÙÏårGFFZZZ …‚D"Y±b…ËåªT*€|•J%Ü^ÄÍPúÈd2…B¡«« é½{÷öõõíß¿?=44444¤R©ôz½L&+•J µµ%=ü©TJ¼Üä‰`~2¿ÕH¢°6 6 ܇Ãñz½B¡0N4“x‚•3ôù|årÙãñH¥ÒÕ«W¯[·®»»»V|’:ˆí‹ÇãµÞk©zNÜoäþíoEUþõ_+›6QMéfOX£…¬úänÿ€ÖŸH§Ö$‰N§;$ˆ}É …*Ù¼³z«˜f2™˜¤æ¿ÉLÖW«U¯aðh œ˜˜à·¶âb¤ááa’Éd4M3_òÖÖÖ‘‘‘‘‘­V+‹É¡‘‘‘U«V €Ž¨\.;N…BDœ\.w»Ý.—+—ËÅãqІú|¾5kÖlÞ¼™xA4°1épß„J¥ÑC:ÆØ¦¦¦ŒFã®]»˜ƒ‡"XàÅÅÅb±(“ÉùäóùèËÀWÌfs</‹ÄׂÚG ´´´ØíöÞÞÞh4*‘HÒéôîÝ»Ñ.—˃Á I·"ƒ‡Q»}aö¤…µóƒ¡½½Õ©õë×õ…!THR©”N§C }òÉ'¿þúë‘D76XˆZZZP±›˜˜Ø¼ys±X€—™=‹Åb,Ùûþþ~Ìì?–˜Üc¢u:]“šV]CÍãñR©y¡š,bûŒl'F:::¬V+dìwïÞÍ4Áü.Á9•JÜÿ÷ÿ¸›7SU¹ì²Êµ×¾—d[·nÅc0 Ë–-£(jppÔÅbñ©§žÊüüž={½’C³³³LÈÛúõëY±ËÀÀ@ 8å”SÀN‹ÅvïÞMŽööö"÷h4ºgÏVI üýïÇÿ:HëîÞ½³_*•®]»ö„·8®,N×fÉXâIµoD"9bU7š¦Ãá0+»ÉÂÆï÷º ‘§ÅÅEÔÈg A›ËåXþµ–YÀRtº–/,‹{öìAó1—Ë››j ¶¨Þs8¬8~¿ .…BQ©Td2™V«]XXÐh4¤ïyxxX&“Aˆ—°Z­óóó™Lt±LÌìÔÔ”L&ær¹àÓK¥R|>? MNN†B!çt:³Ù,q!htDSfP¥Rùý~³Ù,•Jý~?¨íðy‘H%\òA& 8-uIVètºx<ÎårÓé4´’Åb±ÅbAE ºJè}Èf³CCCHÅãqFÃçóy<žV«…Obžypp°··w÷îÝ•JE­VƒAfÌ4„täNr¹\¯×;00Ì$}«þT›ú>V™@æÌÔëõ؉Åb“ÉäõzF£Ûí$ü°ô>圪UîøÏtÞyÍ<ÓÔ÷ùç+—_N;RêçŸþꫯ>ÿüóC¡Ð=÷ܳzõêŸüä'O=õÔyçFE¦szov(d IDATóÍ7ÿó?ÿ³µµU&“½öÚk?üð'?ùÉçž{nÓ¦MëÖ­s¹\p'Ä9 ïÞ½û±Ç{ûí·wìØ4ËÀÀÀE]ÔÑÑÑÛÛ‹l>qN‹‹‹øÃðï×_}zzz×®][·n½å–[>ýéOOMMI$’Ûo¿=ó›ßìêê …Û¶m{衇Î8ãŒ.á}1±XÌáp2™ À°M Bjµšåœ˜˜D§P(j ŸKUSy®ËRƒÞ0°Ì¡•,¨ˆ { ÊQâfP”n²ŸÒjI¨’UÏçC˵R©ƒA´ÆP¥S™J¥’ɤËåJ§Ó333Z­6ŸÏ#÷%‘HÿR«Õñxƒçñxd$Eõ‰‰ ½^Ïçó 19œ š hšfm¨•J¥ÅbÙ±cóPaGÓDoѸ¸¸(—ËçææB¡˜U™;hàÒhÇG‰a( H$zE¾ˆºÝn| ñÈV«•Ïç§Óéùùù={ö€›Üív'‰ùùù®®®“N: {¸|æækçÎb±¡*Ë#òxòÈ#f³ùâ‹/^âO½ãŽ; …ÂC=´}ûöO}êS¿ûÝï2™ÌàààE]ôÃþHx8pà¹çž;í´ÓÀyçwõÕWK¥R‹Åò£ýÈn·oÞ¼yýúõßÿþ÷Iú5‹=úè£^¯W«Õ޳z~ûÛßvttÜvÛmguk<ííí=ôEQ[¶lÙ·oßg?ûY•JµiÓ&›ÍöÐCýö·¿½òÊ+Ï8ã ƒÁð™Ï|æë_ÿ:—Ëu¹\Pˆ?žWðÉÉÉ?þñ§œrʺuëž}öÙñññ¯~õ«ç‘Gñx<6lxóÍ7ß|óM|øÊ+¯”J¥@à‰'žÀ_Î:ë¬#Kˆ¿Fj0‡$}©Íò ‚B¡çT,ë æ²¾YÝÂ>MӵܕJ…ÙÔ„þoTÈEÌÄ\¹XÚ£,™L2‹mø½}ÛR©½¦¯¯O,ûý~Hî¦ÓéP(T,‡Ãñù|Èi4·Û=88ˆ&@@_A+—Ë¡ØËåL&T‘¢Ñ(3ÝJR-Ç*&“Éï÷Õ‹ÅÐâ¨P(© …AGfoff¦¶¡7 (œmrrR.—“ìà´\.—<Õ›Édfgg{{{ûúú, hAÌfó²eË€ŽD"CCC(˜ÙívÒÈP­V9N©TgÍ:š¦qÏëÂiÅb±F£a2ÿj4št:Ïç+• ‘q»Ýv»½­­-ÿéOÊd2˜‡Mã[©TŠ•^ú$Sw||[¢€»¤nÑøpœ“Ïǽï¾Ün—‹óÌ3j)œ]»¸[·VN:‰zg½ë¥—^ºõÖ[ÿå_þå…^¸ä’K~úÓŸÞÿýGó³_{íµ¾¾>›ÍvÏ=÷‚;î¸aòí·ß¢ 6Ü{ï½óóóZ­öꫯ|ùå—×®]ûë_ÿš¢¨ë¯¿Þ`0D"‘Ûo¿ý /üå/yÊ)§ÌÎÎZ­H$òøã·´´¼òÊ+¯¼òÊ%—\jáZ;00p÷Ýw×­~_tÑE]tÑ]wݵ°°`0˜ò†Ç§ŽŽÞ~ûíßùÎwÖ­[÷ôÓOÿå/¹øâ‹¹\îí·ß~Î9ç˜Íæ›o¾Ùår­]»öÁœ˜˜øÁ~pã7ŽŒŒ\~ù导òÊæÍ›ïºë®ZYÂãÁÈΣ¶uk\<gc™FB" 4ë’ô4’x_b±ê½Ì:%2~ÔA……&cÐjµ`æfý½6oÉáp²Ùl °Z­P?¥tðR©”T*Åzçóùfgg¡¾!‰ººº°¢…B!¹\NÓ4r }}}ˆÀÁC?·P(Ôrt5B‰Æùùy‹ÅÕA„Jh+'Y}èõÑ4­V«!ÙW©TH§œÙlN&“ià飧Y£Ñ0åç+•J¹\^XX¨T*RA Õj mOµZåóùˆba ¢@±maa!™L’(ó‰Daw.—Óh4d3±°°fB³Ù „³N9??%E*•Ò4 êtfL,‰är9èU*"fŒbˆnÔWJ¥²Z­²æÀR&áOl2ò;wF£Q¾uŸ~Ýa4üéO9}/wçNjçÎC ªfûüöÛoŸvÚißþö·Ï?ÿü[o½õç?ÿù'õÙÏ~Ù6Š¢®¹æš|>ï½÷ž|òÉ?þ8YW¯^ív»ûÛßöõõ}éK_züñÇñ÷;ï¼sllì‰'ž0?þ8Zj«ÖäóO>ùä·¾õ­‡z¨££ƒù™^xáÅ_üÚ×¾FX)ëÚI'´¸¸øÿ÷û÷ï?÷Üsgç´råÊ+®¸â™gža–Ç®»î:—˵qãÆ¡¡¡]»v]z饗_~¹×ë…LÜÿøG£ÑÈçóo¿ýö4jQ;žM©TÚl¶\.'ÔjõÈÈH“·ôhZxÙRT Y× …ƒnMÏä ÈÁ!ð½.e ¨*µ··g2™x<Ž‚Š\.÷ûý»{š¦A$&ž©©©‰‰ {g³Y²ÜCA|tE‘Bu- \Újµ†B¡F7vffd©HKŠÅb©TZ»Ã@‹ ü"ád(›‰D"½^???‘Èåòp8ÌZ™AÉL¸T*A¥ ƒ7›ÍÕj5 Ð4 ½>—ˉD”J%(êA>´°°àr¹P¢‰DàæÈår[.—K¥’F£AG…~?Tt:~,+Üz²@ سgO.—Ëf³uùêIuzu'!Üxb³"‰‰ Œ§6>#O¿.Þ£±s …8ýëá9Ìz¹•+W ƒÁpÕUW=òÈ#Gù>wvv'tÝu×½úê«EY,¦§9ýôÓ³Ùì—¿üå×_ý¦›n"‡~ñ‹_üío+‹ …¢‘†T*%‡¶oßþ—¿ü¥¶¢0>>>11±zõjÈW7²3Î8#_uÕU$!vÜšÁ`X±bÅ£>ÊLm½òÊ+==='Ÿ|2SoýúõÈ5½üòËo½õÖøC—ËõÍo~ÓøNåÉ÷×¼^/³oôhäu …àçr¹F£9ú©©)ô"ã>Ið¹u%hÆx<žÇãAO3²Ùlv)—€²þM0§ííí£££DÇ¡Ú&8ܘ|«\.‡B!‰Db³Ù ë “Ér¹œ^¯ÏçóÅb´op9‹¤;(Ú‹EäÇPëf¦ÅÃdÆI$t@³è”b±˜Ñh4333Pß ŸÇã«W¯N¥RXñ¡ý£×ëYJB°@ €”Æ€ @V‰jx©TÊf³MLLÔm{éíííïïǰh"äB›¸òöíÛgµZÕj5ä@ØÑ××'‘HS©|d"‘@'…V«ŸŸ7™LÕj#ÇTôûýD…àX!Èë!@t6BÆÃ…í×ucµƒª!ôkbHçâ–21Î0‡Ã±¸¸X×S6q¢ÿŒŽV›vîäfßsõÝ/<üøÇ?îééyë­·–øù—^z©§§ç±Ç[âç§§§{zzn¸áê„56@pÒI'}ùË_¾úê«ß~ûík¯½–ô+'%4Vv޹œ‹E„sssýýý@`÷îÝ g#‡`~¿ßjµŠD"´‰.ÝÚÚÚêÖ¢\.—L&ÃþûäÔ 4MmpÏd @Ä •JáY™‡(Šr»ÝL³L&ÃZqð-ê 7` P( ;wî, ¯½öÚŽ;P»Õét©TJ¥RÙl¶¡¡!¹\.“É&''A$ár¹+V¬@§«P(\½z5~(XÈJ máD'&&2™Ìäääää$ÇCψÙlÆž¯££C(jµÚÞÞ^”‹ 6_·–^(4 Ñ. }}} S@ 8ú;v…B&ˆÓéDóúîH‚Ž™:(4\,§§§!Ú‹BT €÷²X,Éd2ÎÍÍ …B´8’ œ¢N§Cêk.—ÛÕÕU.—s¹6î&“ ?¿R©Àç1{ÜW®\)‹™³š”BÞ01ÇÚµkIç×Ò SI|ÌzïÃ\ ñ«L&«ûŠ5á2°iKòL6õNVTƾóï<ûì³çŸþ_ÿúו+Wþýï¿îºë–xN•JÅápÂáp"‘éÒÖP®V«¸›úÓŸ ÃO~ò“n¸Ájµîر#‰ ½ªT*E"”v‘¥åp8ƒáÊ+¯¬›âÇã (äÊd2”ïÜn÷ºuë(ŠúÃþð½ï}ï¶ÛnÛ°aÙ$‚_+•J¡±gãÆV«MíÆñïo.½ôÒn¸áÛßþö¾ð…`0xÎ9çèõú¿þõ¯Hs‹Åb4~úé^¯7 ¶µµ]~ùå—^z)’«Gæún¤ËXÑsxpBxÖ“““ Àf"_ÍårHãÔåFªk„½¦vëƒ7yùòå$˜Aê#‘ÈÂÂðŸ²òσajjЉX‘ë+¸ÉdÒëõ€F2¿õÂîºÿþŽŽŽB¡0;;;66†=›ÍnÛ¶-›ÍF”dfff\.TeO;í´“N: ˆTxßjµê÷û3™ )€K$½^,©‹ J”J¥€ÞÅ«ŠüÄ®]»”JåŽ;B¡6 ¸QµEõÙÙYCJn)¹½¹\ \’WL§ÓØ´µµU«UÐ@À[¸\®ÞÞ^Ô–„BaKKK(zþùç÷ïßF#‘ȶmÛvìØÁãñ²Ù,ΉvAŠ¢Âů[\\D‘ ’Lõ©O‘"ÖñlÈqutt€kÒ5X>÷¹Ï¥ÓéG}zŒ¯¿þºN§{î¹çþã?þãßþíß(Šzøá‡O?ýôJØGä4 ‡Ã™œœÄ%šëïx ŠÌîƒFHø¼ŸøV­ä9?Y÷YÅX¤MÀfÍÜ„6§þ4Ì--3ˆDIœ5~•JŠUüïòåËišv¹\ÉdÊ@Pz<žr¹ü·¿ýmÅŠ'›ÍÊd²+V¤Óéh4ºoß¾5kÖ¤Óið”cåÂæfïÞ½p~,Öö@ .óV“(œ`¼…³ …åryhhŒLÈ'ëÙ‰Åb8ÂÚGO>IrY"‘ÅLt¶P(œû÷ïGC£ÕjE(‹Å8|GFFÜnw<·Ùl~¿ôêÌ݆Z­F<11‡’Íf1Xá,AÚ2ÿ)aÇSK:êr¹fgg[ZZ&&&¬Vk£BsrÖ5­VËãñ‚Áàaí21 ›³D2¥ñHÔÌçøŽìÝ¿\ðgløÂ|0*/…?³®­nsÚ{iCCC|>¿»»ûµâœíرÃår¡'3¯ôYgõnã>ô†]öÊ•+Ÿ|òÉ«®ºªn׸\.O§ÓXìXå‡ìèkÅUYIvä+j ðOáÚÖÖÖ#“º§ieföi~~žxÒPÎÞiJ&x&@²Ùl#Üqkkëøø8ƒÁ€¶F‹Å@.Yv‘vC;Y4Ý»wï²eËÀ'‰D ¦—J¥, ØáȽ­V«"‘ˆÉŒÇ2Œmmmõù|:‘ðR©î-8jI&¶œ–ù»ðDX¢õ¬/šÍæD"a4ÉÄ€×çp8~¿Ù²eHKÂ¥&á®ùùy½^‰D‰HâYObÇ$‘Ë;æñxË–-c¶’ãé/,,ˆD"ò°°“^úŠ!•J‘³m¾¡Éd2Us@zíÌÏd2ÀDóx<<ÙÚÏ49!Hñ}>ß­·Þê\ý©7†æ‘Àôþ·¸'Öµö1$ÇÇÇù|>* Ä&&&ÈäG“}]¿•H$‚Á D"!Õ&²n^7ŸÏ³h7§§§™ë8¡B¡@Ÿ7©¢¦#üQ¯×üp8Œê~þ. ÉÝ@Ü<66¥D’H$@`dd$‹¶\*•êõz•JLè¶··CÓ=CãÜétB¹œø3ŒNM’­ˆnCò»µ£Í¸Ÿ……Dccc<O&“1k„ …ˆ%rBÜ ¾Äãq§R© —Ežòää$óéëõz½^^˜‰‰ •J…oÑ4 A[Š¢|>ñ ™Ljgnn.™L¢› r¹a:_4 —ËEÃ&™3F«Õ²°·xú€93CÀ%‚ÛH ž‰91Xˆ¿T×hšæ ¾Ò¨ŠAN(‰¤5, xĵ‡Nž°Š‘rwsNftÝÔD“KÔöv"eÑèó‰D n+ YDXÒ¥èü&LdµmT@þJ"‘ ¡R©fët:‘41Ýøø¸P(‹‹‹„Îh4ªÕjЛ¢–£ÕjGGGÇŽ;4˓ɤÑh4›Íår%(„?kßââ"ho8DÓ£Ñ(Ü$Ô"Ð^ÁÎùp8¬zaaäê™w^­V¦Š”,MÓ±X ¥4"Ú³X,…B¡\.·´´€*‘N§3ƒHÔºÉd: ÞB&“M˜™™±ÛíãããðÄñMÓÕjuff†¦i ù¤¬VëΈ<¬£ÄÌ‚`â;,ÚI|ÿ- uã³ÙÙYH¨€ª¸îyÀâñpNããã¬îƃAP(°ãÙþq)ær¹H[5úRa$ˆB9 ºz’Gë ƒ!‘HÔõ¦83KŸµä¢>ŸФ¼a0âñx>Ÿçñx&“ ‹&²svÃçó÷íÛ·bÅ ,+Hg«tåÊ• …Âl6ƒ5¼\.û|¾d2‰Ý=tcá…B¡D"áñxLúj¹\Îãñ@Aä÷ûñ»Ðî4??ÏãñYÚw~~¢!ÔÁÒ=³­±ËÅ,ÅÁU«Õj‡Ã1==Íãñæçç+• îÚ*•ŠN§ƒî™Éd¦¦¦±´ %ÄÁ|>_©T"4\»v-zö¨ƒˆc„æÄ?äär¹Áôô´T*%hYª²gaa¿H$Aê°v6ÂÌÒ4m2™ˆSi4gy5àsE"&Æ1ÉR@÷‹ü…ÙÄHŒ ÁN¥Rñx\uü;'£ÑˆÞÊ“µ¶¶2wv'ì}7NW(XÙpV‹Qs#à¹\.‰XÅa±X¼zõjÄ ‹‹‹µØXf Q>Š´Õh4Õj5“ɰ¾EDH¡ ˆÕ€pÌb~…`KIŠôË¥R)´1ÕÖ‡‡‡»»»Q÷R*•r¹|qqQ¡PhµZ`o CWW—Õj•Édp$<šï šWу®ÕjGFFH tA(SQËé¹\m“\.!Ü$Š"‘ˆB¡`)oq)Š!vŒÒ³z”Ëå€2–H$ƒaÏž=b±LtÔAnxˆûùý~°Æh4 ED‚1gÂÇÆÆà´Äb1Ä=&˜œà ÑÑÚ¤†öÂdÑh;R‹™u»ÝP`bNãÚ9sÈL2u,ƒ:j.NÈzXu)(›cÛGçÔ××w”·æx¶“O>¹6¥;00ÐDâá„ÒÒé4¡ib§­­ RÔA¬þ!ߊݭuNHÊ1%-Œ*•J‹…1cÙjkkÇ« .öûdq!H[¨bׯR # '$r·@¸¬=,ÙÚcð /`éçîÛ·MÞ‘HX.—‡ C>ŸR©Ôf³i4‘H4;;‹$•Óé§œV«õûýhćdMÓ§œrŠßïÇúË!À›dT¤À¶zõêt:}àÀB¡Àãñ”J%Ä2Z[[§¦¦ ‚ˆ¯$ ±KìììÌd2q¤ªàD!„¡V«Ä$“I·ÛÝÑÑ100€ßËÊâ2±¥L‡¡Ñhàx …-“üÿì½g˜de™\ùTÎ9vuu3Ý=3€ YWäSPÄUÐ… ð‡ \ˆ„ D\…ÕEPÖu‘U¼\aw1,(Š0H†‰«««º«º»rÎùûq¼ßáTuMÏ€0`??æê©SçÔ ïyŸ÷ ÷}“šF£aŒòô%‰J¥"17Vi»ÁÀÝétB†£V«Ñ£"r3¹\îàà 8Õj¼'ÌÈá®gŒºìzJ¸ÝÝÝ ‡o+’{2:§þþþ­[·~P§ÑVU§r¹l·ÛѶi'lá`…ö(cÁØÁz{{¿;äî0¹ˆÅbä¢Ñœ¶sçNôs¹\»Ý^,Ñ«M¯ú‚¿®u„àÝ^¯a•ᮆ‡‡gff \ú¦Î VôF£$=ÐM'g’:tär¹B¡n·x<‹Å8–°4ÎçóG•ÉdJ¥Òï÷c¦«Õj`J•J¥jµÚãñ¤Ói—ËÇu:Ýââ"cú†ßp»Ý²9xð R©t8¤HÆf³Ó霟Ÿ×ét\.3>(Éàû±nP(•Jþ5NCuûhÝÂëàÆl6v]úé¡á"÷ôô¨Õj¯×KQ”ÃáÀr‡1œŠÅ"”;X,–ËåÿÞòò2ά0èæóù„B¡Íf£™Ã Ëø#­í&òp@[ª6†A"™,õÖûZ‡ßÂ&¹\®T*+• ½Èi´•Ö…ã ‡Ãï™s"¸ŠÎ|?ôY¦sWþûÔöïßßÕÕe2™Z#n°In:˜·cÌÅAÓsaaÍfÕáñxþ†¸‹ÅR,ék[6›Éd†±Ñh ïß¿¿V«=ÿüó:ÎãñX,­VÇ9B¯aF@gýP4ÚHùÚív“QJ!×uLÏÌŽÆãñÆÇÇËå2$\:$—Ë»ºº”Je Ðh4§Ñh€<•J-,,Pe6›9Wm6 ;ÍfsïÞ½Õj•ËåÖj5€·’Éd:N&“§Z­òx<°²âäëõºL&C}Z‹‹‹‹H<òx¼©©©áááÙÙY¸„h4 žo\>Ê? ±Åƒóz½|>ÿèÑ£$oÉb±@9áñxN?ýô-[¶äóy:åU0憆èó&IÛ...¢ÍO¿ƒã'Ë ¼õdZãïW8ž…ÔdooïÌÌLëÓo S.‚lÂ^¤âˆ»N§×kãÆ7q’urÉøÄoÉår•JÅè›À&Â/EŽ6:::99Éç󻺺ŠÅ"Ø R©”ÍfÓëõº“þæÎiuuõž{žöx22âv»±¯V«‰D˜5„B!Y›w†aÒëÐkÇZŠÅb‡ÒAV«ummÍår¥Ói‰DâóùšÍf©TÌÅãñ¨T*‰DÁžC‡éõúl6‹™sÓÂÂêIÕjµ¿¿eeÅn·{<‡Ã‰D Äü~ÿþýû¡"ÏápÐý‰DªÕêøø¸Ç㙚š‚¾É!µ…ŒËår»Ý¸\.M(õzÊ¥B¡E86› mV³Ù D‡?ãÅœ››£«’;¿oß><ßõòÀjµT~ÂÖï¡oǯP(D"ýéÓ‡"ŸÏÇy’5}Ì@U‹Åb‰dÆ0ÆÀh6›‹ ÀÚ^‹ÕjF£…B‡Êd2­¡iKÆ' ç…B!ªÕêÉÉI§Ó >u·ÛÇ[ÁÅï’súö·¿}饗žwÞyW]uÕ÷¿ÿýGyäíÍãñw½k×.>ŸŸJ¥èÚÏãããt†ìp8L‚Љ‰ P AjšÅbÙív Ò-™LË C³¿ÙlF"ˆÎµ Õ ±XŒEú1a˜tOÉf³q@è*B)9›Í&²Ù,ŸÏG“Z¼ø|~<çñxÉdR«Õ:Q`ŸÑ.Áb±@ wÐ=ཆØ.‡Ãár¹PSœŸŸÖh4{÷îÅ<„ œ%KŠ¢ìv;ÔžB¡P­Vƒ /xÊÁå\4©W{ôèQN‡ªøgÙlv¥RA§ ܹËåj £†H.¤Š3™ÌzØçr¹¼¸¸(—ËAèÞ¡Œ$‹‘#Ÿ!ùõrÈz½~mmá!HÙ‰¾êo!}TqÑ#' IDATc`@΃$-;/Ô6Ò\p1hþ …”¨ÐуY^¯—Î%ÝÁþæÎé´ÓN››››˜˜øéOú65??ÇwäÿôÓOßyçW]uÕÜÜܧ>õ©0N¢H‹ïG"‘ï~÷»{÷îݶmÛÞ½{/ºè¢›nºéw¿ûÝm·Ýöñ+šo~󛄱ªV«=ñÄ >øàõ×_ï½÷²X¬çž{.‰ÜtÓMp0Néw¿ûÝõ×_ñŇÃát:ýï|ÇëõîÙ³[õ«_õôôlœ¦vÓÞ[[Oîöícbj4Ä3Éd²f³ÙöG²Z©T2Z›@ÕÊçó±êj‡è2`yÛh44M¥RAÔß[ˆ¡ êñxÍçóÀâôõõÐðLNN …B—Ë…ÞnäåÐ~äȹ\Þ××2o™LV.— &n…B‘Íf1çb“L&#$x™íJ¥"ùl6ëv»·nÝêp8ø|>j~™L$Dšé>¤†ð[$™–L&“ɤ^¯ÓÓÓ¨úPœo>Ÿw8cccèÛ|å•W¦§§F#‡Ã©Õjäþ3ôŽs¹ ¨'Cê)‘H@[¨/ ˜‰D¹\^YYé<¨d2®Ëd2‘0¸u ±ãD"±ÁŽ Œj™LF?ã‚1mÜ8 Ç¨Æa-b±XÐnCjh©G—? ý8§+®¸âSŸúÔòò²ÉdúêW¿úvõâ‹/>÷Üs<òÈå—_~àÀo|ã—\rɯ~õ«þþþ»ï¾ûÃþ0ùæÃ?,‰.¸à•JMÛk®¹æ?øÁW\ o½õÖ뮻žºúê«Ï>ûì¡¡¡'Ÿ|2\sÍ5>ŸÁZ …–——×˹Ý}÷Ýçá‡~饗.¾øâßüæ7wß}÷%—\Âb±}ôÑßþö·_øÂ6'ý“ÐÐ4ÌÐ_XOî–¬w4Š¢Î:®s DŒR“N§K¥Rb±¸V«ˆZAi4“Éðù|h/AK¹ÀÔjuooo8.‹˜ïèøGðëèt:èÌjµZrt:@ …BR©ò¸p„hnÆ\Œ¶ˆd2)‹¥Ri¹\–ËåEþt: ¼*¦xzùÿ?ïðx€Ð’‚ ¢IÈþr8xSÇår!5 gÄ(¥R‰¼§ô£iE"‘ÀwÂ]‘XD"‘ ¢´‹Çãd& !Ëáp2™ŒÉd¢(jiiI¯×¿eÒäñPÔAº!Xƒ÷! Õëu’Ÿ¡Õp=f)2´èø:tºsAcf½ñI€±X ‚V‘Ü šÑhÄãhDNDô˜‘7ÃYêt: ¯;”ëÞ çôä“Ožy晉äž{î) ßøÆ7ÞÁƒ'“ÉŸýìgN§µ—_~9â§x@­V_}õÕ·ß~;‹Åzæ™g묳¶nÝŠÎ"|~ï½÷F"‘‡zè}1S>|øÊ+¯üßÿýßÎ_ûÞ÷¾wå•W/¯þÉi¥R)‹D¢ßê„õ ¹)BëîîÆ(ØÐ7aÞAµ¦µ‹¶¥i O¡„O‘!‹ÅÝÝÝCCCýèGÇÇÇ‘ûj»Èr{•ËehŠÃ@] åb±X¡PhµZƒÁ`µZår¹Ïç›››CG&“©×ëÕju~~>ŸÏC½é/`u±<Çãðù|Þb±sP*•ù|¾§§çœsÎ9å”S”JåìììÔÔT:¯n`­VƒìEQð=H²1<7à\­VS©R…"‘hË–-b±Ø`0`5€Ò”D")‹à×xýõ×_xá…P(¤R©”Je__Ÿ\.sy^Õj7ùè †ÃáR©„ÖD`ž€=¢?b:3®K,ôÈÆ•‹[‹X©tŸäË…B!•J°T4 ‡Ãmá´Ú­þ ¼ÃtÆf³[Kß=œÓ‰ ´ò“ŸÄÈØµk#¸ÆÞ½{7þ~ã7ž~úi<¤|ä#$xË-·üÃ?üÃM7ÝDÙ%ÉîÝ»+•ÊøCäëÛv:lÄöìÙÃf³wïÞ-—Ë¿ýío“BßÞ½{óùüÛÔ¤×,‰<ýôÓ­j1 Û¿ÿ³Ï>{ÿý÷`â§¶ ÜΆ>¨Ö¹ µ]¬‘Ójµd¯õ|__ßzDæD¸–1)“Œ‡Ã3ºF£éêêj4333ô,%:×Kþ0jQíCCC‰D¢R© –J¥€šÔh4:Ó"È÷À AÚ¾Yoâ~\.×òòòÀÀ@¹\D ×ï÷÷÷÷kµZ¿ß†ˆÆbòªV«ápšR(þW*—Ë…v>$<;œ?ùÐh4V«ÕZ­ÖÛÛë÷ûQ‚ú*"ЄW©T}}}õz}mmM«Õ6 4³ ä*ëõºP(´Z­$Ý §åõzq†z½]ò¬õÛÑh´··×ëõ"*5 çÄÀç’Ñ{mœ;ü7úpêîî‹ÅÓÓÓ$&Óétõz}½D·ÙlV«Õ‹‹‹v»}~~4W­M°';+ùÃ?üØc=öØc×]w]ëÖ•••ÑÑѯ}íkm÷=pàªJwÜqÇ!VçöÍo~sttÑg,}Ó~ô£Ñ¿6::zÙe—½øâ‹£££o³ýòom:®ƒ„¼V«eDNR©t||||||½½Pc'ÿݺu+œ:ZÆÛN—µZ- “¬³¯¯äom·áÚëâÅÅE”RÀ&.‰d2Ùøøøàà b2Ljá:$p|>_<?tè2u¡Põ06aâæñx˜bpg ú€-è|ÆÇǵZ-‡ÃYXXXZZ¢(ª»»sÅbqvvö·¿ý-¨Œb±T °©Ñh@g+‘Høý~Ð åóù¹¹9ƒÁÀ ²5›ÍŒ\"‘ v\[[‰D~¿nn.Nïܹ³X,Bñ½\. …ÂJ¥Òßß›f0æçç9ÑÏEêyE•JEQT8ƒ-^òˆs¹œN§3›ÍäÜÖnwuuA†±a€%,‹¤¢õ䥥¥§ ×Új.3 •­!> ßèã3‘HÀC÷÷÷C d``€¾{<7º@[Û•ÿæÎI&“}îsŸ{õÕWGFFŽ‹‰ ;«ÕjµZ5H$‰DÙlIv0e³ÙµµµX,†î <æžžžSO=d$\.·\.£ µ^¯oß¾}ûöíÆÆY,Ö'>ñ Ô-7xVwÞy§N§{íµ×p±X,N£*Îb±¾üå/ÿõ¯}ýõ×ß_ô€?úÑ\.×ÈÈÈYg ‡††Ôjõ¡C‡n¼ñÆ;.™¸²²²gÏž'žxâ«_ýêí·ßþøãŸl×BQT?IDüY‚:äÕÕÕt:M¯Êær¹Ã‡>|˜a} iGmó·ëé{q¹\Fœêt:‰n…P(lE8T*èM´n"¹G¿ßÿâ‹/b">xðàìììž={: P$ •¸ëzsÐøø8NcllÌ`0hµZÔ–|>_¥RÙ¶mÛöíÛ!(¾°°ÐÓÓ‘ññq@>½^/|›ÍFÙfdd„ŸG£QLÙp ù|~ïÞ½„¹z çææÄbq£ÑÀ<€€Çã!ˆ]°ƒ³Ùl¨NTl¹\^ZZB²ê%À  ¹\.D±1õ ¹Ýîd2¹¶¶†V—ËEQ‘-N&“+++ôj%+Áh4Úl6ŸÏ—Éd†††ø|þ¶mÛFFFŒF#†"±©©)z¤Î|jj ÀX´Ar8œååe”¬70Þ¾%‰cþ|>YlAuµ+<,ÐJµðà㤣Á ULçl›i|7pNÕjõÖ[o5›Í¤ÇúÄìóŸÿ|¡PøùÏþóŸÿœ¢¨çŸ^&“¡™’¬?ùÉO?îííU(b±xddä7ÞÀV‹õ‹_üâ•W^¹à‚ ðÉm·Ýö¥/}‰ÅbÙl¶ÜhìÅ ¢/9õzýÀÀ€H$zî¹çÈÑ®¿þú[n¹uxx¸ƒ&ÐÉi×]wÝg?ûÙ§Ÿ~£ªV«•J¥¹¹9n2nÃÃÃ<òÈþç¶n: (™Ö™¼jŒÕO2™¤¯KZ‡ãr¹è¤( <Öl6»»»ûxyëõ:úÐ÷U©T|>ŸÏçÛ¶mÛ¡C‡P‡þ)}¯þþþJ¥ÂÀ]²Þ*¹ ©õL&³oß>Ò£e6›S©”Õj% y,Þé3p  g³Ùàƒ˜žž€ $!Ááp„Ba¡P\]]é-âàX% ¨¸»ººèy-:¼Œpƒ‚+Ï`0,---GŸÏGrqV«à$,Õ»ºº€´]]] ƒÅbQ¡P€}µT*) «Õ:;; {‡Ããñ\.W0t¹\`‚°Z­pN XD–J%¹\¾}ûöb±¸´´‡¶nÝ:== FöR©„à)™L‚È•.ä pZx¸ømâŒe#ýc·ÛG+‹Îðz½~Ôáp¬¬¬ =}#+¡¿…ÑÏ™@wµZm½^ï\‚ÂŽ ég£Ñ˜Ífõz=c¾5§xà:Ôµ×^ËèÛ²eËË/¿ÌøÚþðüѺ©í‡?øÁÈßããã­_øÓŸþDÿï 7Üpà 7àïçž{Žñå»ï¾ûî»ïþdù‚Á .äüóϧ—²O~k §mÖY4‘§5nú'ÔaFcaaA*•’ßjTv0±X, IÏ“K¥R1Vܬvr·f³±;&Ï>ûloo/”¢ªÕjooïôôtooo2™$É¢ÖÊéÚX^^N§ÓèÊÓëõ@@¡P‚h4J—âîÜqñx\&“ƒA¹\^¯×­V+¹]Ñh”¢(½^ïñxäryµZ% pBr8;;Ëår =9˜œNçÜÜœÇãÙ¹sg½^õÕWÉ©b‚v»Ýz½Qs“É$€SCCC««« …Jí+++6›-N›L¦\.‡ÞwŠ¢°lW(z½>‹ÍÍͱX¬}ûöAýÏb±@JJ¥R¥R)³Ù‡c±˜Ýn‡R0‡ÃÉçóR©´V«)•JäoÌf3EQ…BA©T"E™ÉdŽ—'9f@àõzщEa¯°X,¡PèoÃÛ tLÒqdÜg½ñE*ÊKtŸµÑû¬æ´iï¡uwwÿ÷ÿ÷}÷ÝwñÅ3”¨‰!Ú8 ÙǵKkUÊm¿¼¶¶«EýS*•2Ôie-µZMRjÐÏ]/3)•J‰t)ar“H$Œ°~qqm¨˜Àô]­V‰–p mEH‰Åãñ¹¹¹¹¹9PD»Ýî`0ÏîA“ÉDîb»F£Âr`ZÕjukÞ^&“!0âñx=== bzÖ¢±ˆZr¹ä*F4m[öGŒÂHÀÂÓˆD"‡c2™ æÞt»ÝžN§±Þ·Z­"‘¾ýýý¥RI©TâZ@`Ñh4l6›R©L§ÓèÔÐh4 À][[ËçóJ¥R§Ói4@@ÜÏÚÚAÏÍÍŽÖápX­Öcj×"ªÑh Õ+‹éÂÊÈ£¯ªòÆm=‘\±XLÊJ¥²m6X.—ý°~a[ç¦¤þú׿~à:”J¥†‡‡y³×^{mjj ¼™'Õ™›L¦ â<Ï`00˜[YípŽÐîdôà~n21 »tgT C­?ÔAÕíÝ(¢²©u´´e2L^™L†€v%¥‹Êp¦a˜†"†¢(ƒÁ ‘H@ø >ƒÁ€–9‡CZ­SL("Ș@ @‰R©”H$ ËÃIF£Q¡PHVßä×WVVZ×F£1 ­®®ŠD"(Ûâ¹³Ùì¡¡¡ÞÞÞíÛ· …ÅÅEˆA Û÷P(R…νþþ~°›/--‰Åb1(ŠH$R¯×N§Õj•J¥ÃÃÃÏ?ÿJ¸ápøäTÂ|àPÿâ¿xÞyç)Š;î¸Ãår±X¬sÏ= lW]uÕùçŸéÏd2]qÅÏ=÷ÜÄÄvŸÕ,Š¢p-ƒƒƒ¨”X­VˆiÇ}tt~4+ 8ŒSO=µ¯¯/‘H$“I§Ó™Ïç±òÀ¹\.cÌЗ#t±c>Ÿ¯T*3™LWWýÚ‘ Ãz… RÁ:Þu>uXõ;®×•žÉdŒF£ÕjÍd2^¯·C¾šñN1оÈw& DàdwNƒá}×PpLëíííÐÖüšÍf»úê«ñ÷\@>'¶nb±Xv»ñ…“ÄL$h§fäÍ€šÜÈq‚Á`kxõÉdJ§Óë±ÑÐÝd8¤Ù‚§8,b8,çéœxëý h%‹P¢4ʘßѦ{­­­ˆ~:c/z8%•Jqß*•J<—Ëå …Âï÷#¸ÁJuuÕjµ²húR8¥z½n0°DXåº-­u«¥Ói¡Ph0ÇÒÒêRÙl–DårY$I$’t:Íf“ÉäÀÀ@4•Éd ÄæH)8 £Ñ¨T* úYÖQ©Tjµznn®¿¿_.—c¢DœT­V³Ù¬\.gÈ·šÅbáp8R©tuu¸ìx<Žþûååe²:Õ,"0¢žŒ*c£Ñðù|­uPHc4 À¢ÉúÆl6CHO_(‚è¸Þ—Ö5Aë ô]]]‹‹‹ë9QÆï2ž/^I@çásã0Ò@'sêêêb³Ù¤Éûf'¼ºÙ´ã2¨øýþ¶É+z£ÑX*•Hnª§§‡4M`Ú !€–6³§KëÆb1²öÄÒ[¡P4›M©TJש6#9™J¥Ð(•J¥$I(²Ùlñx¼ƒ"G(Z,4 ÁÓt:=<<Ìf³‘H¥R.—›Ëå0AÈåräӞ¹ǚESÝE¹èØ„–¾€j$Á¿ôŸÏ·ÛítÙ$‡ÃD\6›Õh4‡b³Ùà_À&úKâÜa‡Ãa6›ê%È0¥R‰xN*•ŠD"T•À›^©TàÉ@ž„Êt#Åb1ZÑ2™ŒD"‰ÅbEiµÚ¥¥¥••ÆÓGop<7›Í™L “333Ùl:ÈårÙjµ&“IpSµª'Ëd2\r+ÎÇo›ÔŸŸ_ZZ"s:XM&S¡PXoY°@{cUT.—‡††ÐÍOÿ¾Ëå‰DtnÛ¸ KŠl6 Ål6 Ù\¾\.g¸I®}`Â9°%›/Qb¿Mƒ“÷ЀØj~p݃DÙ³ã¥*xíÊ+¯¼ì²Ë:T×ß} ƒB¡Ðh4NMM=ýôÓårs.ý®‚Ú¹V«¡¹¨X,BûË[Ðx“å$Ñõ¡'ý…ŒÛ‰¥é²7•J¥P(äóyr’M"‘H¡P$ t<“<œD©TÂÕ §Ó !|A£Ñ¨T*…BÑ…9T h4ôa—J%r]¥RéÌ3Ï´X,€ \ ‹ÅÂ’Ÿ´`Õëu:ƒg³ÙP"‘€¾™ÁЇÕjµËåêïï37*O}}}P© 7bÓðð0Øl1ÉV«U¤ÚÀû×ÓÓ «ÉdÚ²eK  göÈßÙlviiÉï÷s8œP(d2™ÐR!—ËÑE‚¶o£ÑxÚi§ ¢ë²^¯ÿþ÷¿…Bh¦p8F£Q¯×«Tªjµ :"¹\>77—ËåèOŸÃá ¡ž&›ÍÂ1X­VÄ7äôpQôaC?óT*…Æwúh!O?"Dzb ltCdwCW&“!ÖGV­V;/­ìv{kV¼¿¿?'‰T*ÅXaçr¹D"144D_sØl620FGGÉ&@T+• ÛÌ»víRš{±l¹˜OGVN:çô÷cï_ç$—ËO*ÏÔêœ N’- Xò!þ@ŠþnÓcÜV÷s/‹<~ˆ‘ /—ËÈiÔ¥I*ßd2I$­V ”=(äóù«««ôº&#£Ñ¶áááz½~ê©§ž~ú郃ƒr¹<ÌÍÍ…(zÁ} ÓŽùŽÌ2`Ç–ËåúŒV­VM&“ÃáÐh4EƒÁz½^.—C¡2Z…BÁår9Nh½Ûív°êÑ„ÑhÿáÈÈH¡P@ûr<w8Èn¡.m`` —Ëy<žX,~€=M&‡Ã9zô(ý‡cëÖ­}}}ª4ÍÌÌL¿Åb³Ûí ¾…×Ñëõðp˜$'&&ÖÖÖÒétww7@‹¥¯¯Ñ½5Àd2íÔa@é9—Ë•J¥~á–§ö÷÷“ÔcÕÂr¬·"“èTàaê‘nÝ·P(d @¸™L¦···ƒðàûÛ9‹ÅW^y…þɶmÛæçç‹Åâ¹çž{¼G«×ë/¼ð‚J¥Ú¾}ûF¾ÿÆo$“ÉsÏ=—Ñu¿»¼¼L‹›vö6;h€Œ9Þ§Xâz1ÖËÇ…šl= æ>k·µè Ü(ª*•J¥R-//óùü¶§W(4M(âóù¹\äâ\.—Ïç´,ZïÀ*´ººJ|¼J¥’ËåB öq²/•JÁ`P¯×—Ëå}ûöét:lâr¹F£ZMƒ`ØX,V*•È&(¨¶–¹\n<G¸*à0Ù¡Q>›Í* Üõµ5è9Ùívp:ÌÍÍŽŽ¢bjjjyyY³ÙT©T¸@‡“ÍfAe‹­H¬V«mDäÇãñЛ€pzzôçÏçóV«Äí8%°è*•JP’K ØHB´)J¥’PÅ3ž~¡P@=²»¬·ÊÝâÂy<6ñù|N·ÞòH(B"™h.o|Õ%èbÇF¿Ewœmñ¹d,u–Ä};§p8|饗:Ž]»v±X¬W_}õcûØÿüÏÿ¤Óé v3êÿ÷ÿ×ÓÓ³Açt×]wíÝ»wuuõmN‹Õjµ»»›(,lÚßÎØl¶Z­nK¸BW§Ý¸A •Ïç‹D"†`³Ù …bƒ¼Ñ¨£O »`íßêØÀ°×:‰‹EÂmCš0k·.„“É$ˆŽ>Œh`vvV  ìÔÓÓsèÐ!dlB¡D"A;&J™LF<TûúÓ Z¼J\¤F­ >Ÿ,D% ÞT«Õ–––$‰H$j½.T\ГÏç tEÒàEaúÓëõH=‚GÏ IDAT=i4 ŽQK$èDÏårÑhT"‘”Ëe·Û­P(ŠÅ¢×ëÇãˆ6HY1 ¢ÓH¬¹¹¹jµZ©Tär¹Ýn_[[«ÕjÝÝÝ'F‡‚P(T«Õ¥R `ǃök, w…ÿ¹[zË"– ¤‡ ²‡è¤hûôÍf3À«««õz!wk6›C¡@ @Á¯CàžÏçqáÙˆsâñxR©”Þîp8Ün7Úí!isP*•¹\Ž¢¨cv¥~@œl||üC×^{íÃ?ŒüL*•úÉO~200pÑEýå/yýõ×/»ì2»Ý^­Vÿõ_ÿÕf³]~ùåo¼ñ¡û»úê«¥R©Ífƒ0}Ó—¾ô%(.?úè£øäœsÎÙ Û´÷Ä1ð€*•ªP(à=_ôaƒ&•J &wÖ›XKd3Z½ÝƳyH†Øl6ä²Xo2 àoNG´…Úâèá#i+ SŸÏW(±XŒHÂcéŠYµ:µZF1OƒA£Ñ q¹\.EQ 0t‘o°*CF¶R©0®jµZŠ¢°öÇ|‡¦íd2IV|>Ÿ¢(‚‘"³¤J¥*‹ô´!‚- yÑ¢hq±jµš¢(Я­­‹ÅT*¥V«ÁbŽƒs8ñG0äp8^¯W«ÕJ¥R6›N§ÁgÇÓé4&‹ÅâÊÊ ¸àÐØÛÛKQÔòò2›ÍÆ"qªV«Iõ¨R©´•H&T(Òóùdp®m|dÝQ¶aÑänI}¨R©á»A[OJ¥R1$1Á·KÿbÙIu‹Å*ÛVòåNÉŒäôT­V¿óï¤Óé»îºë·¿ýí /¼pß}÷a¹W­Vï»ï¾Çüðá÷ß~ûää¤F£yòÉ'o¹å–l6{ß}÷ýâ¿8tèÐ7¾ñ lzâ‰'n¹å–L&sË-·<ùä“frròöÛo?|øð¦89Ín·3 ‚¤Ý Ùl®ÎmkF£‘¼‡b±xëÖ­88#MQ.—[£1‡ÐFŒ ‘(‡^†Ü8B³mËáh`°ôBõ\©TÆãqP%áó`0HgHÊd2@‘>Éd2Fƒ>@ø¤+àx<Ô.Å´…Žó‹Åbhºãñx‚VVëÅæóùD"Ááp—&‰l6›\.W*•‰D'i³ÙjµšÏ烯Íçó\.×ï÷+•JÄ‚óóó±XluuÕëõNNNÂiB ‘H<š'Á•‡NR3 …èæ 7.âžÈår§Ó‰GúSkµ———10ZI“C¡3m)•)Š!E4]^^†´ÕzÃ) ž°è-½èÀ¸"nIÏ`uîç‚ Ä®þ¾œÓ¾}û®¸âŠ+®¸â•W^ùú׿(ÜG>ò‘ /¼ÐçóíÛ·ï3ŸùÌgœqß}÷­­­Ýpà F£ñŽ;îðz½ûöíóx<=ôÐ'?ùIâÕ½^ï믿¾cÇŽ«®ºêá‡þÄ'>AQÔ'?ùɇz誫®:å”SöíÛ·Y":i®4C>9f‡R[ƒ2y'Ñóf±XÚ&rQé¡»„g0È|Ýv6A¶ ]Äôz}+U]$—î„0)D_ð‚G§R©¬®®"Qc·Ûy<cx ©TŠâ Ý7ðx<¿ß¿²²b6›é‹blŠÅbô¬~‹~X‡Ã.Dupn™LF«Õö÷÷Ñ¿œËåÁcÖj5´„‘0 á°P±X ‚¹~¿Ÿ¢(ŸÏW­V<ˆKàñxétZ"‘ ‹ Œ…`nÿÅÜÜŠÊ(¿Á8N t¡ŒÖmF(GA ·V«±ÙlFƒI¹u­€ÑмF‡…Ífc­ÃèS,óù™ «ÕêÂÂÒmq¯ôwÒ¥'Ð yò¶ÊŒVÝt:ýNÁÊå2½ë·§§Çãñà_rKëõº\.…B<mr(Á냌޾ / ¢zJ“éÚÚ—Ë…Ø]"‘( ‹Î’Þg …¿ÂMh6›óóó­wØår¡Ì^©Td2YµZ•Éd‹ì ÕjÕãñ¸Ýn­V‹N¼f³‡Ëå²Z­Öét|>ŸÍfg³Y©TŠ$Ûo¼Q*• ½ËårѦo³ÙÖÖÖè+ °Ç»7FÛ"s•H$jµšžøEÞZ­^Ây?¡PH º»»FW@¸|èFƒAžb·Ûc±Ø1yOˆ­'w[(Øl¶ÙlÎårpHx%É‹I6užK?‘“J¥Úö¦­G{üÏÿüÏ;vì¸è¢‹¸#{ÝÿýCCC8ÿüó;, ¹Îårö³Ÿ]~ùå›àýhKKK¤è‰ª)c¡JO­T«U”ÚÖA“ƒà MÒ'–E!í­ƒáQl6ÛqÎŒF#VÖ <Å2ÐþÅbätGR.—kµÚüü|µZÅ&…Ba2™4 ÖÈÅbqdd„~+èž)€Åœ>uº\.¿ß–#·Ûív»e2Ù…^ˆzO.—£;¹\><<|úé§#©åõz[åÏ{zzD"›Í®ÕjÐ÷ãóùf³ƒååeŠ¢¼^¯P(„Èää$€_À2#q‡õ‡ÏçCÛÂÂÂV «ÀQ«Õ °DŸ‚vîÜ9>>Næ@è°ÈÐëõ8ó¡¡!8]´]€ ¬„êõº×ëeÔûúú&&&Pó+‹@?ít:Ø!—ÛÛÛ 8ùڻ韬­­á§y<Ô“622B'–$r·­/B¥R‰D"dFe¼\dcHÓ˜Á`ˆÇãÍf‰ïßÿþ÷‡ã‘Gù—ù—;vÐS·P+@oÏG?úѾ¾>0¾ ¨+•JÅb1AGnÚÉf뱤W«Uºt)æ§§Ìë02›H¥R§ÓÙú6›Mbn"iŠ\PÛndÖ É42sÑ‹ôJø|>«ÕÚVé Í«ÎáD£QT æçç+• ijé#U™C‡”ÓÓÓÓzbè@ËŸ!íÎ …Âíð@@ ŸÏ÷÷÷Óo‹ÅZ\\4›Í»ví‰D.—K¯×÷÷÷ãdúûûÏ;ï<Š¢§0ÇS(kkkÙl=D^V§ÓMLLœrÊ)€+ô¡ÓO?ý¬³Î:ï¼óõÅøÈ‘#8óÙÙY„˜‰ìS¨VöõõŽŽâÒd2}¤¹ÝîC‡6y^>ŸŒ'ˆÛH´mµZi«d±uëÖ3Î8£µ¥‹0_Ôj5z“·Íf›˜˜H$ Êcz9 'ßv³Þ*Œã7õä˜? ÎI ŒŽŽ’7,4°ˆ“H$£££È°X¬Ÿýìg.—‹¬>ö±ÝÿýÏ<ó̧?ýéB¡°gϹ\>::êr¹vïÞýÀ<óÌ3—\rI>Ÿþùçõzýž={ …Â%—\Âçóo»í¶Ÿþô§¥Rittôm ™lÚ;n¤ánàŸîPn4333­¢;333xs¹\ëjõ¦ò(+++$ËQ¯× j²­–Z‡´þ‡ÃŒÄ EQ6› 2zød~~¾\.ƒŽ²ƒ[ …†¼ dŽ shà tÔl6{zzHPð,‹Åêêê‚wÎ^(B(ɾÊår$¹¸¸˜ÏçÅbñää¤D"a¨ŒÏÎÎþå/q8@Àd28pàü#ZÌAçQ.—ñD od6›€Æõz½‰D.—£/<—Ëa¦k4t»ÝƒaÛ¶m[¶l±Z­çž{îgœqöÙgïØ±# ÁÃÁàýe³Ù.—+—ËÍÌ̾ PÉd2—Ë…žxz\ÒÝÝ’F£ÁápŒF£J¥’J¥ l6›T%³Ùl$v¶D"Aø¢|>©SºÝîƒâPÕj•1Ò6Þ×ÀçóÃá0¸§¦¦á»@ H$[¶lŠUÛ#0ŸÏƒÌçó“““ë 6a¤‘0Þ.Ø:>1œ: Ý÷wÍÉl6¿ôÒKŒþóŸ“4}ëòù<]¸öÒK/½ôÒKéû’ï_vÙe—]v#!K?Úõ×_¿éÞG¦Óé"‘H+vñêõúÿõ 6^¯W.—Ó5m†lOkvžar¹<›ÍòY¡Pˆ 9½°ð5,¿àó8ŽB¡ðù|€¬Âñnp¬‡¸‚ã‰D³Ã‡Á`ÄÞ,K­V×jµh4J€@«ÕF"±X<44ìñsr¹\¥R‘– ™Lf4r¹\+èR£ÑÌÎÎ …Â`0ˆR t×ÖÖªÕªÛív8ÉdR,g³Yǃ;Ìf³!”%—Ëù|~*•âp8d¯T*Ñ=¿ºº‰DF0T(è …Býýý±X däPI¥R±X ý¡P¨\.‹Eð´ …étºT*AúP(400àñxjµÚâââàà Úôá´”JåÔÔT¡PÐjµ8Ò& QÜŸÖn‡AZ.—¦˜‰ m×3 ÖÃ*•Êjµ‚•c=,È)ˆ’ËåFcƒ]v|>_«ÕêD×<âr¹ƒ‘¯Æp7ÛTöß }Ñ+¯¼rÓM7mß¾ýmÂ\6í}jU*•Ö· Ñc.];k@Ó-‘„½}«Õ9á;Û·o÷ù|n·[*•¢æ©D9|>h8',f;\>DH‘îåAµZ5'N†Ìª*• 5±X‰Dt:Á`îêê*‹€a>%W¡P(€SnCËå²T*E²½T*E£Qä0á„hEu©úüØl6A™è.¦x¥R‰†@•JEQÔÔÔ”ÑhÔh4Õj5 *•JµZ}øða‡ÃFŸz½ŽT¡Z­öù|DÒÀ4P$ zMN(‚—&‘HÀ _~ùeŠA\6ÈŠŠÅ¢L&#ÄêëÁ½AªD!BØr¹ ”^½^çp8t¤mÛô@¥Réð`|>_Uu:=<‹Åj‹X_/@—H$my•€³n»W‡M/Î)‘H\|ñÅ×\sÍ1Å’7mÓ0õ ¹dk ç¤V«óù|ç8ŒX+Örƒ´µíÏç[,øK©TŠúR Ò–Ìt¨K×ëõsŸL&ý ’cmgO‹Å’Ïçëõ:ü «ÙlÕo«Õ ((ê"r¹ß\[[CÓˆõ0ÙVÌçóI¥ŠÃá V@‘œœI¹\F5E¡PÔj5­V›N§·Y,,êäñx<£Ñdq±XÔh4xRÅb±P( MœÏçC—\>~ J¥Òáp€Û;4›M"’N§ …Åb!û΂åÅb Q5;;‹Ù¿T*uww;Š¢‰D(Â1[‡‚`§R©¢Ñ(yú$Å/KÆ'(Éî¡3•ŸÏG?^"‘À9´•cær¹‡#“ɬ‡Ìíp|²ø KÀœ˜ý½ÔK>þñßvÛm¯›¶iÇôLx»½i]c—n)]¡³Y­ÖÖ±^¯'+ªf³‰tH]± rÞ“!ê!‰Ú"`ˆ.0Â=Üé„Öh4b±xmm 5p(Åãñp8ìv»÷ìÙ377çóùèg‚câ€ç"çƒbФƒ7 tE ·€øAr ä µZÍl67›M›ÍV­VA󃄆tr¹\Ô]PÁÂ1ƒÁ Ãáðûýz½)‰@£ w '“J¥ Ð(‹9ŽÃá Øa(’ Ã‘e¥RYZZ* `£p:©TÊãñÐÇ ˆÇÆÆp9tt¶B¡@¾±ÙlBŠg"•JÛª¿ÓUë<&t4Íår‘H„tU´… £!žþ¹^¯?fßM£Ñ ^¿-‚¸Õí§ÎiÓþM©Tnœ£‘ý ¬ôù½¿¿Süq¡z!¿´‘o¶í‚H kRä@öíÛ·°°f­V‹Åb½½½Ð²“Ëåp¤ßÐ]èå´Mª€Ÿ”Ï%þ IB4U#t¹\ÀÜ€ÓonnN«Õ&“I‡Ã -7Ä¥Ri¿F£!z àÛÆ&ˆD¨T*‰DJÀL&# ûûû‘²-Y2™DØ Á1aµZÑ/.“Éb±b©z½.•JÓé´H$š˜˜8ýôÓûûû3™ ”j±øðù|z½Þl6÷ôô$ ©T*“É©¶·ÙlBÕžäÍpÇär9rªõz=™L¢–S,QB=Œ\;ØÿÀUFº|ÄGˆ&r­V+—ËF$Ñ1ÝÄ€´%JHd%Aùz¦V«[X©T2™ŒZ­¦ã£ÆÊÊ =œB^±õ˜@g·~žÏçÛ’liµZ:ùHgWzÒ¥õ–––:ôû~Œ`56íomè ÛÈ7øÜ¶L@†’yÊét®­­9Nºf(Ý|>ŸÙlnÛã×ÖÚ¾«` 'çù;²‰dQPßÅ}÷P(ö¼õ2û°V@e½^Åb¨Ï3|”™ û„Z½ÃáXYYéííůPeµZ›Í&9 ‡ÃÑjµHë¡i ›B¡J) ¨€6 bÒé4‡Ã/ý^¯G\‚žL‘HÄçóÁÃÔÕÕ•Éde‰DÈVY­V¤UÙlöÜÜÜØØc±ª\\.w~~Þétžyæ™àR*•J`¼•Éd@"HixéîîÖëõétšË`N*•J¹HØ ¤m$Y[[[^^ŽD"px ®Íf+‹t‰d!0݈EZ‘¶\.×étBW¥C ·_  ; õVW@goü•Ìd2‡€pßgΩX,:έ[·~PgÌãÊmÚÛ±D"±Á.£¥¥¥z½NQ”Ãáq5ã%Ç&ÒGÇb±VVVúúúÕcºažê0YÐÍét"å²ÞK1<Ïf³§ÑßßïóùèÁ_Û– ˆQñ$Ü“““Àá2Ê ~¿×®]/¿ü2Çs¹\Ùl6£ì”N§GGGà]^^v»Ý&“‰žpzóóó¸Wl6Ûb±õ)>Ÿ?::šJ¥–––P¬êéélH"‘ôõõÅãq4𝬬¬Z©TŽ9‚ÄW$ŒD"ƒ¡««ëÀÃÃÃ|>ßårÆr¹,‰€À=pà€Ãá7|¡PËå hì>zôè)§œR(6 •J:t(›Íb­`µZ}>ŸÅb1 pEŒŒ6;33ãp8è¹2€pñ7 uäá¶ÒÙÑ1Ýć‘1344477‡Ž‰cl=\&!é2<¯··wuuÂ+ëÐh4Bø¸íV›ÍµÆ >~#I¿“±!B  ®’½þúëN§ºà›žã]° r4å fXom ê¿§§‡.õ†Wñ ‹Å²Z­¨6“¹o"‘ˆÞYË0.—»¼¼Üùl[ ë÷D"133Ããñ.¸à‚•••H$Ø™2FGG'''É—]ke«íú-ˆ]]]`>…ƒYï £Ñ(„Ñ.Æ‹599Éb±c¾k6›»=tèëMz‚ÉÉÉîîîÉÉɃ"}ät:½^/¸Ì ÖétºX,"y  …BqÆg”ËåB¡ …ffffffvîÜi±X2™ŒÝn/‹è×÷ûý[¶l ¾ÏçW«ÕR© …@ Ž×l6»ÿ~äîàæ÷íÛGîg2™Ä€Ã,Z3†††Ž=:33ƒ,k­V[^^ÆMÆÁ/´ œ+ݯ€lá)‰Èq{7>àFúñº»»Ãá0ˆ·¶YÂoak[Á\¼/l6»mƒ¨V«u:~¿#$p›J¸ïªmÆL'¡'Þz‡™Ý7@©í„Ò6N:f¹^¯G)ûx¥x½^¯Ëå —CˆMNNÒµPív{:^ZZâóùÖb±˜äñVWW±;)8AµÕ|gpptás¹\N´ t•è4ÞäÖëuV"‘  E¦6tH...ÒkW\.W(z<žÞÞ^(N‰Åb™LÆápÜn7Än ƒËå’J¥ “ …蘀x‡L&+ z½NH,‡B!ðYd2«Õ ÉÝR©466&ÇFƒ¢(8!@@QT±XÄ Ü²eËÌÌ î-ZÉ1ËcÀd³Y’LëêêŠD"™L†ø‹… ?iŠ£ßö¶Ó79`‡A¸k;Ò6BfÍ hkÀ™%“ÉÖ0•JƒÁjµJQTµZíìMßUçT*•^zé%½^Oø†8ÇÏ9çœ âç;ØÂ‚ÏçÛ¾}»Z­~á…ðØŒF#VX“““$ˆ‹ÅÃÃÃû÷ï§ï~ÆgÐiÊ–——I“ë‡>ô!±XœÏç_}õU’*â•W^Á`R«Õ› OïSk­ AÚ‡áTx<*ÛJ¥²T*mPEp#FF¦ÉdZZZ:®õïââ¢\.Ïçó„nŽŽŽ‚&,] Ä f³Y ÌÏÏÃg WA¯d˜Ífà{ô,À€M+++6› €V|ÿèÑ£.— 94¿anE¡(Âeð[(À¸*•J———].—×ë÷ø{ Ÿ¡Õj> ÝùäÅ_ ê“ÉôÌ3Ï`ß—_~Ùçó½þúë„[ÅçóÝsÏ=+++CCCüã¿üå/_wÝu<òÈ£>úáxzzÚn·ßyçóóó_ùÊW.¸à‚|>?33ó½ï}ïCúÐæ\ÿ0FZO«Õ¢5@"‘äóùõh :ÈlÚöËÉd2øÂx<~b:,` .V£ÑÔëõP(¤R©¹@6› …ÐÜC»=Rt—8'Fãõz‰%h2Àiµ¶ò4gqi•JÅãñX,6›J¥t:Ø5€‚†B!HâÚl¶R©´¼¼,‰är9´'VVV”J%zÖFcwww @ó^,Ëf³ˆ62™L¡PP*•ÑhsR©4k4š¡¡¡|>^µh4Š^ ôŽŒŒx<0¡&•JRÈår˜L¦7ÞxƒÄ…„ŸŽÜ‡õ±X,ž˜˜˜˜˜ˆF£Ð6„ZNô/{<>ŸO¶R©ˆ1HÚ;Î#GŽà›'07H:ᢠEQ</•JµúR‚J§Ópº–bïªsR(ŸûÜçöïßÿç?ÿùüóÏÿÃþ°´´ôÅ/~±-ØFl~~þw¿û¹ßþö·kµÚƒ>øÚk¯}ìcûõ¯Ïç§§§/»ì²o}ë[êôàƒ²X¬_|ñÀ—_~9Ý;øàC=tçwîÞ½ûÑGF£÷ßÿÊÊÊŽ;üñMçtòòI’øÑh”Ãá`’:®Cñx<™L†às;ï…¢ (D[¡‘à2€Ï³ÛíJ¥òõ×_‡ªl[9D mÁÊXn“yS(‚¦+b>Ÿ¼'¤KQ\¡ç‹8ŽN§ ‡Ã˜g•J%h{U“J¥r¹|yyÕ247ƒAF¢q$ql|>Ìxr¹PÖT*y=t¥7›MÜP(d0ˆ¬ªN§#]±X ­ðȲX,«ÕŠöŠz½n0кF±Z­‹ÅèÝ€øú_ÿúW¡Ph0 ‡Ã‰Dèü†¨|½^Ïår`I·X,«««v»]«Õ®®®Æb1…B±>8xøQ4šwÈТÐÒú9t°T*U¥R™…§7DÚ˜at¤-ŠakkkF£ÒdAª¤“ð½ƒ÷=f#yúõnž·\.¿óÎ;O;í´;ï¼óÆo¼ë®»Î?ÿü;î¸ãm:§ÙÙÙT*E„—ZmÏž=ÓÓÓétú[ßúÖ­·ÞJßô /LOOö³ŸÝÄç~À ðRFº¼íçÇ4(÷½/mƒZ£ÿjµŠ½H©Àd2‘ 6fy@=7€™PèjÅ̶EÚÂl6—Ëg‚$¨ƒG"“ÉÄårõz=daÙl¶\.';öõõÑoE½^×étEar„xf­Vk·ÛI3Ÿ‹¦8³Ù "íf³IQ”V«­×ë‘HJ¸}}}ð‚{W£Ñ€l Ӡу³áñxZ­Jýýý ©ÕêjµÇS©€Þd³Ù*•Êd2áÌ Ó :î¢Ñ("B¤Ët:ÃáÖétb±¬q`¦ðûý@ äóy´#òx<¡P …íw:dŠÐétdÊåâEz’Ã-ƒø IDATÀK3™Ìâââ_ÿú×çž{nzzÚï÷CZ·õQZ­VF»]*•Â( !î0×„ïˆ †c‚p¹\®Åb)•Jl‘ÅÓï€Ã}·A¸:îÖ[oݱcÇc=vî¹çÞ|óÍmfÇ6íÛ·ïóŸÿ|‡ï|æ3Ÿùå/ùùÏþ‚ .øå/I” ÿûß?ýôÓ×_}™ŸM{ß›ÍîîîF®F¥R‘×üf@MÒ“ïmem†½€ÐÌår­@¨V.,u/*@K¬·ªÓúýþ©©)>ŸßÓÓƒP¯3 §Bö¢B¥L&@%ëMÌ,ÙD&MPò¡KO@‘^g¨|e¡PXZZ‚ƒÁÝÀ²]£Ñp8œr¹œËå4 dzX,ÑhT ˆD"ˆø¡i»D"‹Åµ#¿ fh4ººº ¡Šjµêp8Òé4ÊKXÃáp8N§ÓÑhT£Ñtwwƒ¨×b±ðx<·Û=77§R©8Î$ÉÈÈ<–T*E2¿§§gûöíÃÃÃf³™¢(ô&d2¨ÔCT=~hØ3›ÍB¡N‘>M £Ñ—ËÅC;ùAð”J¥£GÎÍÍn¡f³Ç+• åÜ1ýºØ1]¹­HnÛAøNh«:‡.>¦Aþ‘Õ‡ûtë¹Ýî?ÿùÏ,ëÙgŸ½ä’K‚¾ÇeÁ`ð»ßýîí·ßÞVh‡ØÀÀ´81sýå/ÁßKKK>ŸoëÖ­›aÓÌÈ“žúhEW [244T«Õ&''×{ýPZ(‹ëñé‰Åb'Ý0ÈQ#al"g8??Ïår1=A¾|„Û¦ÕðzÓ4Ð;€ä}ñ©úK¥R­r·$DËçóä½Àl¸X.—S©Tð@ø h‹D"Ä‹t,0òÄ¥͈2éžòããã333V«;" ‰›¬Óéd2 €‰ÅbŠ¢ ȲÙ,x€Äb±^¯‡£R«Õ<ËåÖëu´E€$···÷©§žÂâC©TºÝîžžð€Äb1¡Pˆ²ÖÈÈH8¦( çp8}}}/ÜúPÒ<@& i‚ ŒÖ#hµZW,!wÛ6ÙÛêœZ£™õ„•Ë6’Bìïï_ÞjpÏÓ»99räÿñwíÚ533311qùå—3:[ŽËÊåòÓO?}á… =úè£,ëꫯnÅE>ðÀCCCš°iø„YW’Y3,c~—Ëå§vZoo¯Ùlîþ&#Š¡èCt1;ÓëXÃÃÃô Â0L­V0P±Xl"‘üÙų!Úd³Ù …ÝS¢DþK$h äÈh4Êårz–¯U$8'¢jŠiE¡P¸\.t%@åÏårÅb1L¦.—k×®]2@z„%voo/<ßé§ŸÞzÐ]ãr¹SSSˆ<ÐAP.—ÇØØÇ›™™‰D‘HÄétBaÝn·£_ÁÜÊÊ È# Coo¯Ýn/ óóóóóó±X¬Ùl6›M•JÕl6-˳Ï>ÛÛÛëv»áž-K6›­"|‰ßï—J¥n·ä­‰Db`` ~d.Òjµ ¹[°9€—¸d¨=®©u`…Btf%“Ép8\«Õü~__#X·Z­É9uV>1k+ÍxMèÏq=¥fCvþ­wÕ9­¬¬œsÎ9gœqÆÃ?l2™}ôѱ±±;wnPP ÕºººB¡ÐôôôôôôUW]Åb±þã?þãÔSOe³ÙȨ…B“Éd( ‡Ã Ëb±XO=õÔí·ß~Ï=÷|úÓŸ&¡«Z­¾è¢‹ „›ÍfÃápµZEîB£ÑT*•p8œËåd2EQ*•ŠËåF"`Ô陊M;©¬««K¥RµºŸ|>F¢T*Õ¡­–#1úfffšÍ&¸mì®ÓÓÓx÷Pn|À‰Ú x<ááF²««‹Ãá D?súi½;‹%‰z{{ãñøÚÚZ ÀüKOý.— y=Ô<èZ· Á&:Œt7®ˆÀt0g2ŸÏ1Ù©©)›ÈÝX\\, 8ÿb±¸¼¼Œr”ßïïêêÚ¹s'‰D ÃÈÈHOOÕj%l壣£b±Øn·óù|‡ÃÍuh±÷öö¦ÓiÜ¿ß"Ú³Ï>!ŽV«Ý±c‡L&ƒŠD¥R)•J±XìСCGßD¡P@#ÊÁº›Ífý~,“Ëå2™lhhhllŒ¢(ƒÁ°¸¸¨T*µZ-ÛÌÌÌàààôô4‘H…B»%•(U ³ÙÌápÆÆÆÄbq½^?|ø0î :æé¸\.///#¶#àVÙ@÷’œŒÈ‰!ðø6Òb±XXtpW6›Pˆq8ÜŠ þÖ»šÖãóù[¶léêê“@m w¦y?f˜Íæ­[·Êd²gžyf÷îÝ ¼öÚk¿þõ¯#àýþ÷¿EͳÏ>Ëb±”Jå–-[è2ØgË–-ÝÝÝ»wïÎçó<ò¾¹gÏ(á^yå•8ìIL»Hš±Þl 0›ÍF£±Z­z½^´3`2U*•@ûâ§µ@ß°z·"4 EQ´f¬·*5Á`ò”ÅbõôôÌÎÎ24…»ºº–——I$‹ÅôzýÖ­[‰„Ëåòù|½½½ŒÅüüà–ËåÖ[謮®¶]ÇÁÓ@ Djëw åа†QÇB‹W½^¯T*t†1‰D"—Ë#‘È1Ÿ FAÒÝ“­×ë !ù2N‘ã8á"nH¥Rhžær¹èˆJ×étƒÁH$¢T*Óé4ÿ .•JÑÿ ¶†s’H$XžƒÊ2¾„Ѻ9æççív;Ü›ÍÎd2‰ ßn·{Û¶m±Xleeêïb±¸V«år¹Z­&‘Hü~¿F£­ž*• ŸÏ_]]M$[·når¹™L\ã§w¹\¥R HŠÅb(áÂ9áG·9N¨.eÌzi‹áÔl6u:›Íƒ™LF©T¦R©µµ5"|n«sb¬Bè,®d80§ Á,³hLK$¤ë¼ïz¼±Ds™îœÞËšÓ¦mÚ»i"‘H©TÒ9TØl6:Ø´Þ^ 3 ³pÛ^‰`0¨ÑhØl6Ç£c’ ÓÑvˆ¼‘ME!_¯T*P?–î °]R˜Ñhdü9 ßïGC͉ÇãáûÍfsllÌåríØ±Ñ (ãpJ¥= .—‹Åòù<&°µP(D£Ñd2™ÉdÐ2î÷û¹\.j ÿ-œ1Äô lár¹z{{³Ù,:ñü~ÿââ¢X,‚Mƒ.—«§§)¾ÅÅÅT*‰DPÉdápÜÐËËËñx;@°¸¸HQÔðð0â†R©Äçó…B¡Z­îïïs:%7‡Óh4àe³ÙÖ7 #’™W$q¹\>Ÿß:f€Íb|xi @¸ñCäx¡çD¾ÈÄ‚qŽ -² 7`j‚ÏM¥Rô òK­ã >7þâÐ%—à“Ikg³Ù â™Ö+ñàÜyò÷¬æ´qóx<OM¾_,‰tuumúŒwÍèM ùTl[4+YÓ7­G½Ìz³Q‚êM$ˆx [Ø5è~…ì¨P(r¹#pL¤žè#§í¹Á0÷õöö¢ë‡ÕÒ¬V«Xðb6!Èüžž»Ýn·Û¡4øòË/ÓC_2EÝÝÝ`ee±X:Ð+‹Å"–——}>_âÿec$»ÊóáÎ9÷tÎ=3=Ó“vfgW$ „õP.°,@UBrQ¶°.\¢(,!–lƲpa2ÉF „ì²+íjgÄžÔ={:眾?žÚãûÝîé•„X‰9lÍv¼}ï¹ç=ïû>!“Q*•jµ¬¹Á`H$  A×%Âÿ‰d3 ‹iµÚÉÉÉ•••p8,“ɇÍfú+8p€ÅbÅãq³Ù¬R©°ÿC8;ÀM …ÂívÆ@ Íf‘œ)Šíím•J…fð/eG¯× …Â`0X.—ãñ¸J¥ÂÉ×h4àuE£Ñ¾Qø9!8ÁÌÿÅç·Z-2¨¦áöź¤÷þ Jxìf‹á“ÿuŽÝü´K48 †¾‹oé166ʽ°ñæŒz½.‰T*’'¬,Ðp»ö>¯î^}Xðrh¬^êB3¸¨…F£ë]_³Q­VKÕ÷¤’pÉS©TŠÅbÁ¤œìj †Õj¥îÇ©ñ_´¸¸˜ÉdÞÿþ÷ÇãñÞÅ‚Ïçk4êâ‹ÆF6›%‰ÑF30´e2™À['‰jµj2™p#¯¯¯ONNâ„€?„î „æ à9‰N§“Ïç­VëÖÖÖå—_îv»RG‹+“ÉlmmÙl6³Ù¬Óé¢Ñ(ìH‚Á ÓéÄçÃÇ¢éh¼u»]dfh­•ËeèÃâ<ÈåòÕÕU»Ý¾²²sahO@³ƒÇãmooÃt2¨G §ÓICÛ“Ò.üsC¡ÐÖÖ¼Á`Èç󻱿kµZ4Í=‡ÃqAS•¾‡A“¨ß}ä@™ô¢Þ…¼yr],K¥ÒݼK18={¶ï%{Œ+®¸âuŠbìÝrƒ‘?˜Ðj$uQ€›Ænìg.681Îó`P@ëë sXê#Èêõ:µâYü­Ñh:N:†¥,aSŸ" ‰„Ïç#9$` ÁÄÉ tÙlV(Úív¨ð…B¡+®¸bß¾}xV­VW*RöH§ÓV«uuu5—ËÁ܈ÅbiµZ‰D"‘HŒFc§Ó1 ëëë‰Dbtt4 Bu âGŽA,I&“v»}cc#»\®ÑÑQ6›½½½N§•Je¥R±Ûí€NÔjµX,Æãñ¸\îÆÆF¡PÐjµÙlÖçóÓÂf³) +•J<ßÞÞ=pà@­V£‚*3™ ,3”J¥R©¬V«¤Õ§T*s¹\¡Pèt:sss°¡¢Òiãñø5×\säÈÉÈR3l ûpi;p‡õz=™«ñx¶-‡Ùy0¤÷01¨›‰Äí(kKKK„1}ÁNlSß&\.w€‹J¥¢b§/Ñàäv»÷œp÷Æ2zó†¾lÖ‰‰‰µµµÞÜ( a«»Klï ºÃQ÷˜ccc+++ÔÂËNÙƒÁp¹\@…>Ä3Pm¨qK(ºÝît: ãZƒ…Š3Ìd2À¶¡”4==½´´täÈîÜçó!7BKF¥Rñùüx?77†–H$‰D¨d¢üq »Ý®ÓéÔju2™ G™™©V«sssZ­ú°W\qE(‚>a0”J¥SSSNÇd2i4šF£ãB¡n™^¯‡a‹ÅZ\\DÒìñx±Ù쉉 Â'àÐår^¯×­V+ǃ©®L&›žžF3 *G€~¸\®õõuÒDA¯^¯OOOSQõ4m6›M󟥎B¡@Áô#ø´úh8š};æÌÅN×@ ¡ÝH$BH]ƒñÐìXÃÃÃØ¾¤Ói³åÒN{N¸{ãM+++¢G‹Å‚e×Ù³g···gff<˜˜@€†ÉÉIØcãC ­F60<%t³Ù\.—³Ù,Ô]û²O®¾úêãÇ÷V~H>‡÷RcÒØØ˜ßïw¹\Ä4–fžð,“É Ú áQ<µ¸¸( M&So¡¢Óé`ÍÇ¢ xjff&h4šÍÍM6›ÍãñP"c³ÙõzÆN›››:N«Õr8œííí¹¹9NX]Æçó={ö•W^™ŸŸŸít: 'I¥R Ôårùç?ÿùv»º%ÌýBú¸B¡h6›Z­Öáp´Ûíßÿþ÷0gb0/½ôÒÜÜ–ÝÎår€ü‰D"  Á^.— C8n6›Ð9‹Åv»Ýápœ;w(j@W^xáÆyP ’-¹\þꫯJ¥RÄB@¸\®^¯‡æ§R©œ››,¥Z­noo»Ýn̸ ÿßBÌáP·­¸F6›­T*‘L—ÃáàjöåtSÞ=žR»­V ³è¢Þ²ËW’#t8¹\êf³‰ÌžFcg0lëø~ÇøL±\ãwªc5þc LD­V»›âì[kD"…B{+`­V‹ÇãT]™½ñ:·5KKKO=õÔ7ñU8,èG§Ó 7:: …Âáðèè(ZÙCCC`ÂÖjµd2IM‚Ëå2µU@C llGFFжS’ú¡P˜N§iOA LR‡ÃA“Sf½T*Á`Fy½y˜=8øjµ* ‰ú@¯> ²‡b±$¥R‰bTY×××E"‘F£™˜˜àr¹ÅbJKp¡*‹›››€8#äd³Ù­­­ÉÉI·Û ÀÔFGG+•J:®V«(šMNNB=Åb¡G…å[(f2x BÒÅl6Ûl6p­ øÝn·Áô‡s —Ëív»@WV«UhC }d2™çÔ©SÅb1ƒgÝh4 Î*|‰P¨Ïh4Úl¶íímg÷ûý‹®TL&z¿ûÝï \'&&†††àVåõz{W6>ŸÚ/€ûäê‹D"a³Ù###Õj•è†W9¸ ƒàúúï,@€«ß{Ç1vað ú-™Òb±˜h3™LP Æu×]§0Ž„RÅzµœO„ßÔàT­V_xá…R©D¾åÔ©S‹‹‹6›@T_spZ__õÕW•J%Bž{î¹L&Có`0Ï?ÿ|$±Ùl±XìØ±cÞó‹y™ßïå•W¨O•Ëå_|ÀŒ‡Á`9rduuÕëõ°´œÞ¢Á Îrb±ˆ)D£QEu:],ƒÒèn°O …fäB¡z<étºÛíBQ›ìÅb1¢#y * ­VËétÖëõF£Ñívwú²Z­¡)ŠÞÊ ›Í‹ÅFƒîS›óp‹ kZ ”ËåÐZÕét°!AJa6›‹Å"ºb¸‘Á½ …BCBÅ™äCjµXó|>¿¼¼Üjµ†††²Ù,4[U*ptP‡”2œF”†@ j4ðj4Ñhtmm j³\.·T*!Hà)pZ—––Äbq6›­×ë‰DPoœçééiÁŽF£ðrEÈ™™‹…V°……¬°*• s&›ÍÊår6›F9ŽJ¥ª×ëï|ç;AT‰D@þÔ*œÆjµš\.ït:db”J%ò2´0m6\»Àm"èÓÞ`€ä£ïœÁ'ô2„Ãáò”;z¿ bN½U.làÈs:€à‹Å"—ËE¦ÈápŒF#ž¢§7µ¬—J¥þâ/þâí„›Íf“Éä½÷Þ{å•Wþò—¿¤¾ì¿øÅwÞi4O:uüøñO~ò“Ðg0sssD£pkkëË_þr$™œœ|æ™gn¿ýö»îºë;ßùÎ#¼§õð2™ {dÆy]‚ñc0&ŸÏ÷%dÀ$w#‡Ã!A­VCGµÙlÒ OÕju&“éåçEpH8 Õj5¨öµX±¸ ±DKÝpx“H$Ô •Éd°IŒF¨$? Nµ8~‚qX\\¯hmmM,‹Åb¿ßàçõzçççAf2™_Èår¬•ðàH§ÓgÏžEi´Ýn¯®®êõz¯×;;;‹P'‘H¤R)–¶L&Ãår›ÀÉ‘ÉdHGJ¥ص€f2Uñ]2™ À¼F£‘ÉdªÕªH$Z\\t¹\È#µZm¹\>{ö¬R©k6›ããã0³€o!@›P*‚e¢;Òk»ÝîñxT*•Ñh\]]EBS«Õ`Ïé\Çùùy°†™Lf>Ÿït:йèË™Eì‹DÀEY[[“H$<¯W1–Ê´%Ó‰¦l"•J…Ba6›m6›½Ô]2`ÈY©TÈ‘ìDìÙ L‹D>*C™Lxä¸Ng'ÜЛí„ûñü•W^yî¹çÞûÞ÷þò—¿ÜÚÚºýöÛ_§Ùàêê*Õ 7•Jõ=eÿýßÿí÷û‘†B¡'žxâàÁƒÿøÿxÙe—Ñ^¹°°ðøã'ÜxàãÿøŸD"ÁY«ÕBÎg"ý'“IT_‘´i4šb±HE܃A‡ÃápD"®ñ\&¥·7Cæ é îdâŽÂ/A»ìDÝÇãëãNspÎår`‚cÇc·Ûi˜ ²DÆf³‰t#ßäýéÇ?þñõõõçž{ŽÁ`<ýôÓ[[[Ÿüä'_p¢:áÞqÇŸûÜçz_öØc}øÃÆÒ …üñJ¥òØcýíßþíÛ¹þ'8¬VëNMÚ¶›´]êQ Ãl6 N“u*ò8 ÅKX±­V+‹íT£·X,X8êõ:bL.—£" x<aï“§ÈEz¡P(d2™N§C27àgì/­—‹ÅàjŠŠ\*•"Oì¦R©ò¿ßŸÏçÃá0ÒDØ *•JˆÌF£Q8£ƒl×v¨‰'‰ÍÍÍf³)‘H4M6›…߇Á`V>—Ë iµZZù|>¢Š2™L¡Pp¹\‰DÂáp¤R)êiÈ °Øq¹\ÈaÀê©^¯£z©Óéêõ:  ˜P(zÔ •J%ü ‘¶6 LhµZápúTç0ж9 ¤®P(<ÏË/¿¼ºº C¡&ÊtÄÚ±7Æ QÉÔd¦íœÈœ0r¹Ž|Àk^\‹–Ü£0‹ƒ·Z­ív{§®Z}Ùåo6Zottôî»ïþÙÏ~ …ÿþïÿÕØ×<ˆîüã/û×ý×}èCä?öØcøû_þå_îºë®üà»×rß—òÈår;ñÏ8›ÑnÂ3- 4óì6^Pê¤ÖFu— +¾à»FFF*•J¯P‚\¯]!ù±ð†0™LxY«Õ"X.—ûn“;P#!‘€§HÑ $\²\¢Eå' Ng2™ #^.—··· „ †P(´Z­è4 vz<žøý~tSpÞRr¹-%à°pC ŠÁ`àA A‡‚>)HÎêõ:ä‚ x¬###±X, ŽŒŒ@Ëucc£T*Ž“2â] IDATŽ‚ãÌãñ‰›ÍF.—Ë9Îd2i4q*Äb±Ãá@h!'xw©T ‘*´ôÚí¶J¥SZ‹ä ÓÄú[ Óé njRŸÚ‰g=ø© 6_z4™L¨Žîò]µZ8sB ƒ&ªv6„©l6aJü1ƒ“B¡øìg?Ûn·¿õ­o}þóŸ¿óÎ;‰ñkÑhôÁ¼ï¾ûËýÛ¿ý›@ øó?ÿsÒUR©Tï{ßûð÷ÿüÏÿüô§?¥ë÷Æ[w ˆ@» NÔûd—r™4– ã¼MûàüL«ÕR‰Ÿù|8é¾[cðrvêIÐ*„X•àÑ' è´Ñh” Mv8>Ÿ¯Õj‚DžBû]¡PPY“4ÉZ±XÌårÉ‚HèP­VK£Ñ F#—˧¦¦¼^/ y±X,‰ †ññq(¢V«UƒÁ044„ª5­V  *ZR©æL¤ÓæÇŽýtΠµê÷ûñc±X©TÂk «¡Ñh E4ÇãµZ í7³Ù¼½½¥\.Ã5*²ÙlソÅðð°Ïç ‡ÃÐjBp"e®|>Ý?\k°­ûÄ€KŒD"õz½ïþWxx˜O&“;ÇzŸ¢Q°/jãÚ]ê½Ïç©Lpò€b6›ÍŠáW¹\Ž Æjµ¾žÈ„ÝÇÓO?ýþ÷¿ßív?üðà ãöÛoïu7ˆF£_ùÊW<èv»‹Åb p»Ýn·ûÁÜ[Ê÷It!šT»ÛÁÅF£7òð #ÃápP÷ÅbÑï÷ƒD iår¹ïƹÝn¯­­õͨçÍó_=´Z­ååe`+ Öét:ÅbñÔÔlRÛív½^O§ÓR©”*l* µZ-•Èi³Ùà”áv»QùÄ~²¸ï:N¹\Æ}½¼¼¬R©ææææææ:¤Óé¶··³ÙìÈȰ*•jyy™ÉdŽŒŒp8œD"¤†\.oµZ =–„R:1"‘H*• ¡€‰¬«\.w»Ýb±øÊ+¯Èd2‹ÅÒh4,‹N§ …W]uļ+•J4õù|Ð_g0W\qÅÑ£G#‘Èüü<=‹óCƒæ×ëõB¡°´´T(|>>M§Óét:¿ßo0öïß Î-BEß]ŽÅbZYYq8@µA&†ËåâóùФ§½}€ÏSïS™Læ5KµîƸvÀè]“kµÚòò2xwJÈÞÚªäv»={<ÇsÇw0ŒGyVÐÔñå/Ùï÷ãeR©Ôf³ý×ýW­VÛÞÞÞÞÞ®V«*•ŠÃá”Ëe¥RùgögðÏ- •A„‡XÌ.±‰~`!Gº{ãR|>llŒìFIÉ®Ó鬬¬p8œl6‡M& q5¥ —Ë…‘q‚qýõ×s¹\R÷o·Û ôî4€X‹ÇãdçHšÞ¤¹MsãF%väd1B¦×ë¡’N¬ ‘Á‰ÅbÁº°·U ©"¤¤½A¾kuuчb±¸oß¾¡¡!ØÝŽãÈÕj5ÚQ‡v¹\“““f³QÇn·§Óé£Gúýþ'N¸\.™L–Éd677O:Úív,Ëd2F£±^¯Ã”vhhH3¥R Sv­V«P(är9ú[5@æU(ÎÌÌx½^ÜòˆaR©འСl6J“““8Û:î•W^Éçó&“ ?ù²Ë.C[Ëh4z½^²M~X_Dª`"a{AS—gœ÷Áb2™à?…B!œŠJ¥²´´499Y«Õab-r±hЛÝšðkèá¹Ýî‹}#­ºˆEZ˜d3Gû]…F3;;û:áã´a4ggg±eƒ#r_âééi…BqàÀÿøÿøÊW¾rË-·0ŒŸÿü燣Z­ÎÎÎŽŒŒ|àøú׿þÝï~÷ÙgŸeœwÂ}á…>ñ‰Oàõ‡¾ñÆo¼ñÆ}ìc°‡¿õÖ[¿öµ¯í-ý—þ¨×ëتÑhºÝ.pï™Ífà”.(ŠO-°ˆD"»Ý®R©¨€¥ÞAÛùŠÅb¥R‰fîÞÉÉÉsçν ´E*•j§M/LQ"‘\uÕU …âàÁƒ/¿ü2bØÒÒ\M1“Ëå(ëï…ý,€BjµšpuašŽM*•¢v`Ä' Ü`2™êõ:ÚÝjµb» ƒèÊf³Ýn7Ð 7:tˆÉd‚é…G`Ëårv‹ÅB¡P(ÂKàˆB¡€b*•R«Õëëë2™L,_~ùå(Сý£Ñh–——÷ïß4 æívN’ØF`b$ ½^/“ÉàÓ!‰ŒF#Ô’D".1ÍÚX¥RdQ,©OAw6‰ƒ8.— z2Q ÁÄ€¨Ýà9Ã8ßÝÄU†Äíë 9¸ú}ÙN½Ãét®¯¯÷ÚÝ^ìwéõúb±HM%íT«ÕüàôÁ~ðƒüàû™ŸúÔ§>õ©O‘Ýñ‹/¾Ø÷eO=õþx×»Þõ®w½‹V!ïúÈG>ò‘|„–€÷~æ£>º·Ü¿uÚõ|>Ÿh—õ"hw².¥¼r¹¬V«I.Åøÿ[|öèQín …¾è‚¥  ³ðxŸ?==].—‰D.—+‹Äј¶.[­V@GAÄ¡PH< n#§¤rºÁÀc2™*•*Nóx<¥RIe¿"8aÓÐw’ô·É ²za×»”9yòrjpÂõÞ¸}z3þ½à´7öÆ ±Sa:jµÚÚÚ:F¤D¨»X¯w ¤ èDô®,Ø;ÓÚN4.Žt¸‰¡²’wõ &*Qø.xO¤ÓixPÅãq²È²Ùl`Ãàj_«Õ l¾§ÉdJ&“ãããËËËhYåóy‹•ÉdFGGE" ÿ"‘¨X,¢ËÕl6!ØHÔäð{aê ŠRµZERÄŒ0£Ò±»W*H»z<&“‰Âc©TBe2™P‚\:ð{€öÅãñééiœL§Óá¬j4šjµ‰DÜn7jz*•ªP(`EnµZ¹\„'<…ßÈd2 AÆÙl6ƒÁ À&$!£u_ÈS½‹q¾³Åçóy<^ïþ¦Ñh`F(ÉZ­–æßÑwP›@´Œ!$\ò®¾t\¸¾ÇßgÏwi®›››»YÞZž4{Ëý›6Äb±@ xmØÙ‹<5:@z»‰O4ÿ\Hô}% ¼À8OÂ%ÿ%K*„…PÀÁ²‹XÂf³!Èì‡ÉP³Ijʈ6L’É$‘ºÀÁ9 "g‚М^¯‡s]¡PFö–H$¬V«D"ØÁårE"(7 0y!ù#—Ë!S ¬A«ÕB? Ù L­¿F¥¯I&“?H§ÓX‹Y,Ööö640Ýn7ÚB,‹ÉdbwoµZ¡~„- ê8WÁ`Çã™L&´T*U>ŸÇ©h6›Hª$I4Íår###hYU*•¶¶¶ãñœ ½àÀÄ`0²Ù¬ßï'E]š2£_›ä" SSÕû²™ˆc7[®Ýûç’ ‰X U*ÜV«5 ŠD"hØ÷¾·o$»tp_'Êün·[«Õî™9½icÀM(•JFc2™Ü‰TM/üW©TBîz—Ç€Í8Ä^©¨¯µ.ž2›ÍhGíö,K©T4|kk Š;‘Qç°X§À´Íår´s‹²e†*O:N§Ó½ ( ½€ØlR*•ЀZ¯X,F£Qä ø«««333pcBõI,Ëd2à&:—ËEVX( ÑÔøCHÁn6›r¹d)X *•J?A$Òh4Àd!0ŒŽŽÂPX©TÆãqøêÑÎf³³Ù,à‚Åb±T*á<Ëd24íâñx±X+ ¸^N§Óçó%“IHQPO”ÓéDAé—H$"Åød´ål†È‹‡‡‡C¡N§Û‰f@Û?½f@9¨]è_Ò’]à<y_2%ð‘bê0Ÿ¼Ôƒ“Ãá@ç“Ú[~Û šNÌÞøƒŽ‹uµZ¬ãuÚƒ‘‹Åb‹L̾1ƒúDehëx·Û¥í…­Vk:ÆòD [}ɘÔDËÓÃÓùùù……ò,6Â4¡kÔÄz{WÍf3‹‘½s,ÃkÈÒ¦ÓéÌfóÖÖB5¿ÓÓÓào!¼ÉårøµË'‰d2ôèöíÛ‡>Љ' …Ífóûýv»òÞNgmmmttý$D87PÐCäC|B¥‹Édnmm À`0x<žD"Am0—Ë!Vq8œd2yÝu×á½ñx°@§Ó™H$ W=\xÝ’b”J¥ ƒ9‡¬ÑhDŠY©T677U*•R©„j¢T6Èù„vJdðÊB¡FSë£ZÖBã±R‹{±X ùbïèe¿Z­ÖT*… ! CßMRßzïN‰™6É1ÇM& ­W­V{Å,.¹à„˜ôö3sÚ—Ô vwaÚDÖ¥R)‹ÉÆ&¹˜jêM¢à&§>%¬Vk¯í[/ñ0;QÒaêe‡À?—D,©¥Rinn®^¯‡Ãa•JE6AÂjèõz£ÑÃrjµ§ïíÖét¨ëcïž7•Je³ÙV«5<<‹Å !… œ‹Å¢Õj5 äbp¹\Hw@¥R™žžf2™Ùl¶Óéàö‡„±ÑXâr¹0p>¢Õj‘ŒªÙlbu0A&“mooÃ?©T* Çc·ÛÏž={ÕUW]vÙeårùܹsÝn×b±€ôx4‹Å‚ôã„p·ß‘œÉZ­699I%º‘ð<‰ÌÒ ¢zW’Éép8’Éd©T¢œïJrizKpSSS4È;u¦á'[½¹‡Ã™™™) ½z¤p×$S×jµ …\.×ËÀíÝNõ„—œÙàŸÎØószÃÍÏI©Tj4øôÐÚ'J¥rhh{74‡Y,ÖÜÜz!Ôp’L&Ñu—H$dé§%UFƒ,÷ÑÁwq8“ÉÄçóiý!‡sàÀ¸ù!í°ÙlXvé÷'›M¢ ±C$#›Í"ùƒ7zò86§Ó‹Å¬V«N§K§Óv»Úh`“ÓÅb±ðz8šW*—ËU,'&&‰„L&ÓëõÐi% $RLNNeÎ8Ú@¿'shhe¡Pèóù8ÎêêêØØޱ±±t:ÍårËår¥R±Z­?‰5½B¡9W40ªÕ*þÛétpð(•Ëeüd$4Ùl' dÛ—^z ÖR©4 mll\}õÕ/½ôÒÆÆF$~]ðq^\\DŸÉh4e¦ùùùV« …:¨„˜AwÜd2¡cD&¼wû–I7cÎ1ÃN&“SSS4ðE©T‚n<ït:(G#« UL$äúR÷þ»›Ú(ÒÔÉL¾ŽV{ÀNNN‚[F=}sý?¦ÙàÞØ NofpªÕjX=F#MvO!±Àý) ƒÁ`±Xäóù4 …ËåJ¥RÔ4``+ ÆLµZM$Ôö¹Ã#‘a1Œ\.g4©] ›Í†åºúlÿBQ&¹õzDÜz½. áÁº¾¾÷#…B!ºç‡Ûí–J¥Xhà+! /Ž…¦Õjáà!…^¯×].h>Ÿ/•JFä:Z­ÞQN§³\.£Ô†Ð‹& ¨`‹&L w8ù|^,kµZR¨Õjðcx<žH$jµZ‰$x[ ó£)XÇ"=BFK¥’T*…A½^@.-//OMM•J%…B¡V«5Ùl†T®Íf[^^¶X,Åb4äV«…ó,•JWWWµCkG$ét:4ùFGGa §V«ÑÙ"w÷ððp/? 2E(ÂzÏ’õèjˆyÇãq&“ét:3™ “ÉPRãp8м S÷µ­N½NÍ}'!4¢H–O›ŸøQûý©§#Gެ­­õŠí§?‘àtôèQZ·¦P(ôm/©T*‹…|ž¡P™Ã³ÄN4NÃ|7à%pw°£‹n4QÁ­.—ËQ€BÙ(™f³ÙÞʱs%@‡”þÆÆÆòù|³Ù„Q*•ºÝîw¾óp0*—ËpGûG«Õ¢-;òÉÅbQ¡P…$Æy4BP¨²V«U£Ñïör¹Œ=r$A¨FÆY‡r¹<55çºf³©Óé@ÙiµZ\.×jµ†B¡z½d¶Éd"kk6›…rX.—c±Xív¢®Øª7›Íd2Éd22/ Ùlvii)‚¥d4Á‚g’\. …CCC0¨×ëPÇk’É$ªdb±Ød2É>6xÚÄ(žJ¥\.W"‘Èf³:.ŸÏ“SD’ZdÂt2hÎiµZ0‹©Áƒ¸Ó"‰„N  ù0à6¨b_E›0‰„öäošÙñnn%TÈ'Sû嘘„˜~ÔèKžBÅ›&S4`W÷ž÷¼G¢µÿqœpßœqÏ=÷ƒA¢ó¿7þÔ†L&ÛåÕ§VÉz+ã"‘ˆ€³•J%âí5„ÿH‰ÅbƒÅbDV¡P€æ[:†²N¥Rq8gÏžCCC(Lõeh’­4ò€÷¨‹ i°»mµZ¨õ#à•J¥|>O#öSO‡Ãjÿ%Ô}b’[.—2'%GxC@•%¸jµŠÖ[«Õø©T SÁééé“'O‚¾* ÑÐ*‹V«uvvöW¿ú•Óé4™Lù|f¸P³„”x>Ÿ‡?Ò#P— —ËÍår°…éu||œËåÂo°V«¥R)t¤êõú™3gÐ/‰¸X,®®®2™ÌR©¤V«aߎÇÉéÂEG1 ÂÂç\*•â* z©Óé*•J±X”Éd4õq@ž“Á`H$hLR}qÕˆN)¢‚Z­æóù©Tjkk ¡t{{…VÌê†ÈN?§ž´ÉC¬T›v*uW.—Sɶ4V¯T* NK;Bš±ßÛ–„›ÍfŸ~úéùùùÇœÁ`ÜtÓMçÎ \.V„+++O<ñ^|Ë-·Øl¶F£ño|wËO<ñ®w½ë²Ë.ûÑ~D`¯Dio\Ê£Õj¡\Ó+ÅOóëD#‹æÚ)tu»ÝÞÐEq‹ÅB Nðw'ŸF%‹@'ƒÍªÑhÊår±X$ŽyÄDªoŦïãÑhÔ`0È%¥Ri{{»\.s8ê± ©ÕjpN±Nñx<½^ŸËåd2 eäÅ„øI+fbD¨€ª—XÇëõºßïGÜ‚œV«F£`þÚívŸÏ—H$L’x<ÞÊÊŠP(D‰/“É 2 ´‚J¥‚ƒ_­Vc³Ù(Æær9HÕ¡Ñ…¨@¨¸HY …W,A<×ëõèÀU*•H$‚š!Ù°Çãq\/4¨ÈÓëõ¨ïáeCCCŒóF”Z­Ð5 ûМ ƒjµ:‘HPƒˆÃàöö•ó`³Ù`;mooÃÆ!X,¬uqÚ«Õ*Âê.´}Òoɾ °CìÏhŸ6 .7xÞönA¶ëEºB2_F=3o¿²ÞÃ?œÏço½õÖOúÓX;^|ñÅgŸ}Öd2©Õêx R©˜L¦{ï½7>.—Ëù|>ŸÏ‡Ö‘H$2 µZ-‘H@`‚:=êõ:—ËEãqžÊ†Ü©X½^˜Vþ‚_;N/´Ò›Í&&F¥Ri4F£‘˜Y ìy±KïSˆúü`a¨Ÿ ‰ E¥R¡Îj"…L«·À(•Jo¼ñF¾ÒLÊz¬·ñRÇÀm·Ý655uäÈ‘éééÛn»Åbýïÿþ¯J¥úÌg>óÕ¯~õ¶Ûns:Ï<óL>ŸÿéO*“Én¹å–ÙÙY|Âï~÷»ííí}èC·ÜrK¡P€HùÞ¸ÄG2™D3 ÷)R‚—J¥P8{Ÿz«@ÿf—’ùاC¸šÖß‚ŸS³Ù„¹ê¾}ûßb± J¶²²‰D:Îðð0H¦(ÅÄãq•Jµoß>ˆ…S ;X  Æðð0djÁ™ö¡ïQAS®^¯¡#¨Õ½ .—{àÀááaÇ# Åb1qåH&“áp¥9$¯hS1Î#5€÷CW¦^¯‹Åb‰DÒn·aNÇ777“É$¨QÅbñå—_‚È[[[Øq-"¤¿ &cÓ€”%J$­Vk±X è·h³u»]x¹öínªT*H’9CØ©XÙ …ROšx!þ4::Š~žÙlS*•F£‘º zm5†Ý`|z7CÄðŒL ò”N§ÃÔ¥=…‚vß9Óh4hÿ‰jëá®øô§?Í h ‘™433C}äcûØ€|yo¼ñf0TËFönFA-Œ€ço6›y<žV«µÛíÍf“ÉdŠÅâd2Ùx°ô[,Tov‚#÷ºšÖjµd2ét:€IÖåv»=Z) £& ¼&‘HŒŽŽnllH$///ÃÖÖu ±3‹±X,X` ~Ó•b±ØjµW…ñññp8\*•Ün·ßïçóù‹‹‹J¥ÒårÁxp|||}}½4£Ñèr¹ dµZ———Àìì, äЗÉdh³q8H\³X,`ŸÏõÕWív»×ë…ò°Ôb±8NÛl6🶶¶¬Vk§ÓÌÁl6onn¢ª&‹¡hŽEßåry½^gf³¹¹¹Éf³OŸ>ЋÇãHCõz=Ø»½+ÚÄÐëõT‰Ng$cõÅjµ FµZíñxa*·Ô­þ@Ãív¯­­‘M-»¢·+•ŠÍf‡ÜD´îOtÍ=yòäí·ßþ¡}è _øÂ=÷Üóä“OÒê¿ùÍoÚív¨Ší-ëoѦíèè(x‚Ô¬" ѶŸ½ý§ÁƒF!t¹\ØG///·ÛmÐãëõºÙlF1* I$`ÙM&vëä]ù|žD…nfÞhu˜t:Ý+lá÷û<Øh4Ξ=‹ e³Ù@ªÕjhA£ÒÕn·‰Œ®¼òÊcÇŽ¡nÃãñ¢Ñ(ä‹Êå2Ô€ …Ö\*ÇÇDZv£LG¾éÎÌÌŒÇãiµZ¨ËÁØ Ô.ÇC]àÂá°ÏçU«Õóóó(.A¯H©Tnnn6 ›Íãùx<åV,‰äèÑ£?°Ùl…BÁívƒ„¦ˆX,?yò$`r(ë•J¥ÍÍ͉‰‰sçÎ!àäãô ü›êÈ‘#¨@... …Âññqˆ¯G£Q›Í•&‹åv»AÂ¥M'xi4 ‚bE]Êa¼ÿ~—Ë%‘HD"@íB¡ð‚~c ±¹¹IcgÓ~õ)8|ÚôôôêêêÈÈH_(ÖŸæR…  0¸’ɤF£i·Û¿þõ¯ï¹ç’`ñx33311'ÜsçÎÝzë­üào½õÖø‡xöÙg•Jå3Ï<óõ¯õÐCýå_þå¿øÅOúÓ7Þxãþçî­òoõÁb±„B!X8 C¯×à—˵X,G§ÓÌHöƒ4ÃuƒÁ@ƒ½°Ü( X,þæ7¿!Aé8ÈI Cä騃ÍfÛívôÞAàí}~ŸÏ·Z­8ÂÅÅE‹…f ðf°i÷ù|ð§@ÿ©ø‘H$‹ †L&³Z­<ottt~~¶<ouuO¡+ÉNräØ t¿p  ^ÉårãZ,NFÏ;wðàÁd2)—ËññxîJb±xk4‘•¶Òÿï£ ð'8ž{î9>Ÿíµ×þüç?¿ãŽ;þñÿñ®»îúÃ}¤ŽÏž={Í5×ìÅŒ7dH$’Ç{ì¯þê¯P)a“Vçr¹ƒ!›Í·°(»^UrêËåÄæ€:@‚¡*ìq8œR©d0Ìfs0L&“(ëñi£Ñ²Œ/ð~4ЛÍ> èíjµJZ|>ßn·çóyj?cnnîÌ™3äàÀK&“PAe±X›››hÛ4›M£Ñ …ÐMÁÒ¯R©,‹Ïç+‹0ɵÙl8dfÐz&‚ÑÏbÎd2!ö9rÝ©D"Ü]­VÓétP …Ùl µ@  ×ëu:ÝÒÒä-"‘L1D"Ñææ¦N§¤bkkkttkºÃá¨T*`éòx<·Û‘Ïç£QG½úPˆ€®D£Ñ°Ûí¡PH¥Rs«xL ‡ÃHþJ•«—ÉdZ­åM¸ÓbS‚ÙH ¨ wX¨×ëX1["’J¥ÔéDfZïS»ÃÃà vjîÝ«‚6áN/ûÒ—¾d›ß1O´‰_Þ“/ú¿ñ½ï}’H$Çït:ýèGÿ öK{Pò7|JþôÓO® Ó9¨Óé€ÔIcZÀÚE€êÒX)|>Fàä ­{ƒ|Z©Øt"@É úÀà"Œ5b±ˆ6¸JµZ ‹`ߟ ümEãr¹"‘w~¹\Fe‰€ŒaëNý@¢œ„0:âA6›Íd2G([U­V¥R)DÄAM …àÖJ%‡ÃQ­Vãñ8œn`ЍFMNN½‰6b'pq`—Ñn·aJËáp^}õÕ`0Øl6a¢>6›MnH ƒA ªÁ$Ãß$Tär9ú‰\Hð»°Ââð`Š8<<Ìårív»Ýn/‹år9—Ë™L&ØË¶Z-¼§‘f2‚ŸŒ¿ò@íËl6;N­V[.—Á¯"O Àd€1Tõð‚z½^­VáØÀçóQ ¼à"C­ÈiÇ»zŸÚÍÈf³ðÙ‚¹‰J¥Ú b§b°œ9£G¾h„öãþûï×h4ÉdÒb±|øÃ¾îºëöÎÉ[t ðBÈêT_íÁc€k;H!(caÝÉ“ö!)€JÞ‡á(Áçó!R \ò üsÁ£%ïU“ºÆÑºTWSŒ^9jÒ{#ÑšÃáÈd2µZ=44$•J׈Çãf³9O€ð †b±Øl6ƒÕ›ÏçÉB‹Å¨¯ ~9N¹\®Ñh¬Vk.—K&“0à@F;44258¶z€s< nÞðÙñx<—]vZkT:-+:ÔóPIƒ„9ú4étÚjµj4šùùùZ­¶¼¼\©T4M.—ã ×´\.ƒ¸=˜ˆP(¼öÚku:]6›Eq5™L‚oK. dÎáhŽ´VX4¼C8† 0¹” …DˆÁ3Ó‰ÑÏŽ™<µûº7HÇ"‘H£Ñ %9l@ˆj·ÛÑh¤®‹¸‹÷2ê¾ûÞ{ïÝ;oõÕg@3Xì<mù|>OLr C:îEñÒð:¡F# ý~ÿ±¼0<¥a͹\.pÌXqÈ'Ü»i2hHbôEP§¢~ÇS*•½q×f³Åb1•J…Ný4›ÍR©zrh¨ðx<,‹N§3›Íf³YêwÕëu|ì—t:]$©×ëøv8 Õëu©TÊçóµZíÄÄV½ÅÅÅ¥¥%6›ÏçaJ EÑjµ ™¢x<޲˜Çã¶¢\.v» ͈n· &,%°/¤1|>_¡P‰D ]u"«Õ ½^ÝqÆy³J¿ßÕWµZ `g§Ó!s†\bxŸ£òÇív»D"±Z­Å“ËåðŽF£(‘H‰dëð98*|,–ò|>uÝN§ƒ6$ÂXÒÔ‹…iÖ7Þ_S*•@¹íëC¶›AÌ*Íf³L&S©TGE2wÁ÷^0mê³Ü[ËöÆÛr@T ‰•‰—@ À¤b±¸{&c&“A±¨X,<7•„Û÷–&önÀ`ß ö(M=(j¼þu†¼ F@:Ð:Çb±t:ññq‚PÀÈår€/ëõzµZÍf³ID¤:€€ÓªT*GFF +Ž3dÓzO;¶çårôdDßññq¬×v»†³™Lm½^ô„X,Öëõ›‹¯0™L0z‡W  £¼V¯×µZ­R©Dûgdd„ÍfG"‘L&ƒ+‹A.—S«Õ.—Ëf³aË"P~´X,8ÔÍÍMÀÊOŸ>íõzU*•^¯‡ß.<æÑþ)•Jè}PçL£ÑÈd2Ф‰D‡£X,ªÕêF£‘N§3™L2™ 2ó8Q¸X0/'9(± $Ê …B!“É a6>>ŽíÑ› «ÑhкzÔÀg^b¬X,Æîf`R­VÏœ9sâĉ•••J5>>Þ‹¤P«ÕÈm6[o þ,ä)‘H422òÈœ¶¶¶ >ÞãꫯޥúÀÞxÁ ŒQòˆËåâñxëëëZ­–Ê”ìÛÚ…®Z.— “êÏF}(®}I¸Ô•‹üH$Pñ§ kR«m¤¶6Ø ··r’Ëå”J% ÆˆL°¿‹F£F¢àÔ·”ËeÜ©Õj""‡@ñS¥R95559‹¥T*=ÏÄÄ”¡¡!HÂåÈf³y½^›ÍÇaw Î~~(BNàõz‘ È.`Cí÷û}>ŽV¡P°X¬H$Òl6!M[­VQC ¿haaA&“9ƒÁP.—£Ñ(ŽÜårûWÀá „_Ýn7dâÈɇM×ÒÒR±X<~ü8ŒÓé4ò âèóùçÔ</—Ë “‰Ñh4P'„¤ÿS©T››››››Ð1‚•ƒbw‰î`ï¥Î´±±1Ø;]Ú…1Ð÷y€õºï~¦e2¥RF±?ár8‡Ã±±±&&!]¤íð ÙOô‹Å¢ÉdºÔƒS­Vy[‚ɤ܀üÞxCâõ¿>Ÿm@Ífi·+•5‰â.“P(d±Xããã449Y;™ÉöÞäo©TªV«iq$Xä)bxzÅWœ8qâ‚%Ä|>OZM¨w^'5©ÛÚÚª­Óéðx<@õœN§B¡àr¹0<…°…Ýn7(Ax›ÈC¸\.•JuêÔ©Z­¾m"‘€ü4vÉïu:Ä©}||<„Ãa™LÆårŸ}öYµZËå|>_>Ÿ×étL&Óãñ …©©©¥¥%¯×‹R-Ð‰Ž‘ÅbÉçó‰duuU¡PLMMÁ–wqqH÷¥¥%”ûrÙ·o€ÔN§“ˆJÄãq¤ƒ³³³èóCq{{kî;ÞñŽcÇŽ•Ëe¸á"8;õ¢¯`‹ÅÂãñggg‘3©T*E\ ªEr8ÞiA€÷|„A{͹‘æµ åóyšˆ~«Õ"²&ù|Oí¤TD&'Žî'ožø„.Þ¢ãĉ¸Ï/v«²7^ÛP(‰„Tá H©ÙlBÄŠ«Xñid&r×AX¡odb0<ËårM&Óææ&êiápxkk«ÛíŠÅbNÇÆÆ ÅØØ˜^¯—Édëëë¿ýío<©9m6[µZ­T*kØØØ€ZÉÃD"ÑÂÂú(B¡¬^j<?zôèÕW_}öìÙ‰‰‰L&“N§¡‡Äáp––– …N§«Õj,+ :Ð% ^ü / †R©tüøq\µ©©©ÕÕÕ••bÒ:11á÷ûq)™L&œvÑ€É:ܶNž< ®U·ÛµÛí@Ÿ;v ¾ˆ›››ÙlÖf³ ˆØH³Ù|#—Ëå••üö£G2ΛŒ0΋3™Ìááá@ `·Ûý~?ŽOáh!dŽÏ'ݯ¹¹9œC·hsïR«ÕÝnw—ú[˜‡¯íæê»O"þ2H¦©Rñƒ7Ž}?m¯ç´7Þ¶#—Ëõö‡ëõ:#Nçr¹ÀÜågô)<²¸¸èt:%Éàž01Å@Fs ‡ÃÕjH6`·z?HV‹D"—ˆŒ{c{ž‚3:6¶Hþ€ÂB&$‘H,‹ÇãÙ·o‚hµZ- •JÅl6_sÍ5Õjºæ‰DÂçó-,, áCSÛÒ9[]]][[“H$‰¤^¯ƒÁX,ÆápÔj5‹Å*‹l6ûèÑ£Àû˜þááaFƒèˆþÙl†Í<L"‘ÈÜÜü™°^£E‡'&&´Z­ÉdJ¥RétZ /ì<ºÝîäääþýûqÄ5Æx<¨ºAèc9Cl6iXòù|—ËÅ`0Éë5%bœ·‚ãããp"FÞ‡% öâ`$Gˆ>&†×ë…|;mÎФE"ÜÐ{Ù{} ¹àt_Ô ÕwföŽt:î fÚ€[l𾩙SµZ}ñÅõzýþýûñÈÉ“'“Éä{Þóž7V¶®Ýn?óÌ3*•Êf³>}šúÔ¡C‡êõúoû[²­s:´zèË/¿Œ¿gggÑè~öÙgêF#JŽgΜU ‡Ã9tèÐ^$xK ˆ±æóy¡PØjµ–––ð8I v †F£Ñ¨ÕjZ[[Ž@*•¦R©¥¥%‰DræÌçòù|$In&“ —z>Ëå2ìØ”ƒªüý~?úI´Ùl`5AqõÌ™3‘HYÚ{ßû^”=s¹ >gllìØ±cÏ…3V£ÑH&“333ÅbQ¯×ƒ[–Éd¤Ri­VËf³ÐÍår@ĉÅâ••8b˜L¦………n·k2™ Åúúº@ P(†N+2T¤kl6›ÉdªÕjx‹T«Uج0™ÌÞÍa‚#Ÿ`œçTÛÜP(DUÛ£úõ)•Ê\.W­V{ç a‚—J¥¾]LìzL*•¢µû¡×ë‘XïtsѦfšÓéÜ ©ÐãNý°758¥R©[o½õ¦›núáˆG¾úÕ¯¾ð ÀƼ_ôÃþðî»ï¾òÊ+xàçŸþêW¿ŠÅb^¯÷á‡þÁ~pã7.--étº/}éKd'›Ïç>üë_ÿúºë®;qâÄììì¿øÅßÿþ÷ó7ó‘|$‹Åãñ¯~õ«Ýn÷ _ø‚Á`Ðëõ?ùÉO¾õ­o}øÃÞ[ú/ý¡Ñhø|>¬»Q7“ËåÕjU&“õ¥ÓÒÞEœÝçq€4«YðÈ]GÅøQ—-ÄÈn· r.܉zWªÓ(°Å½Áé¢8•À8@@|øï|'<2x<“ɼï¾û>|óÍ7?ùä“ÔJn*•úÎw¾377‡·<úè£^¯÷Ÿþ韘LæáÇï¼óÎ………'Ÿ|òñÇ?}úô]wÝuøðáN§óàƒî­ûo‰Áf³iäStGÂáðmLöwØHö Ü!r8š‹B¡ E ˆ·VîmèÉÒèVاS‹ÅÀ7ø¥jµú‚ÕÀÞPß“Éd‰Ä`0 >‰Ÿ “B¡Ç†††€Ä D‚ â:›Í6™LðÍËf³©TJ­VC½Éh4Bõ‡ÃáP]áÃá0€|¡PhccãÕW_e00þh·Û¸X &‰ 4Øqƒóx<‡Ã0Æáp´Zm"‘@©›ÍV*•¤Çb±®»îº«¯¾Z©T¢ˆÇd2þ¶Z­èç'“IxD!Kc2™8h;MNNÎÍÍY­Ö©©)RÈ^;êÞ‡T.—±/a³ÙÛÛÛØd…©©©ë¯¿ÞápHI}Wï¢O&I “Ü×°¢ÍÏ ­VÛW”ºõ˜N´©Kž||>¿ïÝ÷¦fN2™ì‹_üâƒ>xß}÷=õÔSÇŽ{ßûÞwÏ=÷¼±Áé‘GùÅ/~ñÐCQ|ú駃Áàí·ß.‘Hî¹çžÍÍÍÏ~ö³çæ›o>pàÀÞªý'2zë]Ùl–F¨ì»÷ìûx³ÙĺCö^H¾5 ‰¡>[*•*• °éF4ò‚¾nÙŒóRu´ B WV«• @ÇØ%(”P#¥Ri«Õ"ŽÀ ‹Öjµ@ àt:A$’J¥V«umm­R©looóù|X" ïv»‰D¨Ö¨õz½ÛíÆb1hÎBˆÔˆ²Ùl·Ûe2™J¥’è¬ÃS£Óé€[Ê8OÆ»  …œN'ˆÌ‰D¢X,BY ¾6~¿_«ÕÊd2Àä2™ iØ@ó¢ÑhLNNz½ÞB¡  5_$ßET8N6›U©Tr¹|xx–¸'Nœ˜žž>}ú4¹ŽØ²€Ýív!¼$‘H ‰E®# *-‹Ñh¤á¿»Ýn¯!:&‹Å²Ûíív›JeM˜¶¢š’søúÇNÐ ƒÕje2™´ïê=<ê0™Lñx¼ÛíªÕ꾑òÍFëi4š{ï½·Ûí>òÈ#ŸùÌgî¾ûîÁ4Ë_ùÊWî¾ûnÈw’ñè£9rä¾ûî#PzµZ}ÓM71™Ì—_~­Î½…ûí7¤R©H$½f@ÕÛívŸ8qB¡PìÄ`§>®Óé°Íår4nY‘!m€­½^¯ÇG©TªÓéô†œÞA„àÐŽ¢~‘Z­ær¹¨ðPEÞˆÿK>Ÿ·ÙlÑht0  ¡Pvº$Xq€ïÊçóÕjUüpjÌîv»:%Æyl=~¿§çu:úpW_}õÜÜ\>Ÿ÷ù|6›Íï÷C“B­Vc±“H$f³9™LB>‡ ž Ú9V«‰=£££Íf»x"¥ˆ¾]:ž™™Ñh4N§'*‹Y­V@H$„B!%O …r¹¼¹¹i·Û£Ñh<Ÿ™™™œœT*•¡PH&“õŠÁ ·Ýng³YµZ-‘HÒé´Ñh”Éd>ŸÏjµ‚!Ž—J¥J¥RȃGFFpe2J…dž ]J® ÙZÑ2俹\Ž\â×y7õ~„É$ìÅ‚ïtÓ‘4¶#Àgö);¿ùKÆêêê¯ýkƒñÄOÐÎõë÷ß¿Ûí¾ùæ›i©ñÆÆF,›ŸŸ'AK©T¾÷½ï[__Ð=ÞoéQ­V³Ù,Uá­où €+²I’ËåƒÁ`0PeÐç=^³Ù,Äzû=Xy­V+|Â$ …BÂ)–È^Ÿ@Zè/Æyã»t:]¯×ÇÆÆ¨%£B¡@jAÔú^¹\†à Ì)“QˆõQ—•D" …ÛCd"vSÐk@Dž7iâj4“ÚÉôô4üÆÆ†T*u»Ý—]vÙÔÔÔÄćÃC Õ§×1 ¡¾R«Õ Ž·²²Ç¡„‰Öèè¨X,. …B(â¢G£Qì!FGGK¥ÈårP×–H$Ø@@t<—Ë¡Gˆ"g.—[[[CÑ !8}úô©S§Áå—_‰F£º=—Ë …±±1RÝÒh4étZœ¥h4úÄO,--­®®ªÕjâQÂçóNg¥R …BÔ%ûòË/ŸŸŸ¿ùæ›ßÿþ÷OOO#í½×]1ÚËÆÇÇ/ÊðÉf³õ"ë «0^¡PŠzG±Xƒ<1™!Ìà´°°ð‰O|âÝï~÷úúúW\ñÑ~t'§©×0"‘Èç?ÿùÙÙÙ¹¹9ƒqêÔ©»ï¾ä5*ñ‚T!¨ƒH8ï·Í@ªÑh´Z­ÑÑQ@°oß¾©©)ÚÍœËå666Μ9Cî™D"Aó­@FÚáp8™LîD]„2ÞcÐB¡°{ß÷v»MÈèÆ›L&‘Häõz1?Ñ–×jµ}S"üäx<m$ZÔëõT£V«åõz‘Ùà)§ÓI6pDT†Ž£…À«®ºÊf³q¹Üåååb±Ô†ÛíÎçó¤¼ …ìv;þ+‰t:Ýêê*ÖÊJ¥ròäIXi@ðM§Ó¡ %‹ù|¾T*…`üpc±X"‘˜œœJžè¾#µZ-‘H„ždp÷ïßo±X4 Ê­[[[H÷x<rM¥RhP‘R^¹\FÅEW.—;99Éf³qŠàòµ´´tâĉßþö·cccØm—‘Éd ¹„sÕét°óÎf³çÎã\.þZ­¾úê«ëëë‹‹‹¥R‰˜[...6`0Øjµ$ 6L.—K 8Ž¡¡¡ùùy‘H<™™ƒgä>??ÿo|ã{ßûÞ?ÿó?÷»ß…mRµZœœ¼á†"‘H>Ÿ‡JƒÁ¸âŠ+¬V+Lq°'œÇãétºn·‰DÒé4Hà¦R©H$Âd2 Óbo\‚ 8áž={–ÀÉ]züøqêm hó•ƒi24{ú$øçÙo‚@$x‡Þújrã÷ûK¥¡7îß¿?NSU«±NèšQßí6Ùl–š‘ïJ&“™LÆçópÃáp¬V+JLz½~nnN.—¯®®’åøØ±cÇ_XX@¤d2™<¯Ùl®®®1DZ+• “Él6›`@s8·ÛÍãñ‚ÁàâââóÏ?¿¼¼¼¼¼Œ¯X__¯T*ÇÒúú믟››Óh4Nçܹsõz°&.—›H$^zé¥N§"ÔÆÆÆéÓ§ … /¼°°°_(Æyçb‹577§V«Ïž=ëõzý~«Õr:2™lÿþý|>ßív·Ûm6›m±XT*•Çã9uêT·Û˜˜ÀV#‹y<ž•••ßüæ7ápxnn®^¯¯­­á„ƒAêR†$.$NN¸333ð3„­Ífc³Ù£Eø…Pä|[•”\1 IDAT[[###O>ùd£Ñ€ûðð0q훘˜`ÊÌf³aL<`ŽõîZhÃb±H$j0c(ç’æ%èõz‘¿r¹Ücqq±P(,,,ô ç¿©='7??O厎æóùݸ\Ô`±XóóóH«µZíüü<ª …ÂçŸþ¶Ûn»í¶Û ÆC=ô|×X§ÓÙíöŸýìgŸûÜçðìÃ?|ðàÁ§Ÿ~ú¦›nÂ#ý×ýw÷w(¸ûÛßf0û÷ïâ‰'öbÀ¥9¸\®^¯/‹õzÍfcëÚû2·Û½´´Ô[3›Íq£ÒP ˆCZ/<F |>?‹‘ µ´1 ÜÇ/–WL€…ëñƒ ŸÏ—Éd½þ¹´F‹½H?à2™ €ÚL&3 bK[*•`§M{‹\.‡„Édj4V«ê«0Á¯&í}ˆ‘“2¾Õjåóù|>iii||ÜëõNNNBBžpm6v/¼ðùRÿ(ŠÓ§OC ë8“É\^^ž™™YZZòù|G $“I@ØÇÇÇY,ÖòòòéÓ§±Cf)™™¬¶0Ž‚G 3B¡pyyvVgΜq¹\­V«Z­buær¹V«íŒó¨˜ä–ËeÂNCû ù"“Ét8ëëëHÐG©TB6¹¼¼<<< úÒ¦T*e6›×××GGG_~ùe6›ÉdR©t÷›Íf¯v ŸÏo·ÛDÂÑãñ й¬ÇßÛ¯Êd2§OŸ+¶™ˆXcccT(¹@ Ä»–¾Îd2…B!Tšh´—œ®Çãáp8“““o{ù¢='Ü7|À ÷Î;ïa…Añ'5›Íb±xss“º× …ívæI4ï84™Q±X,›ÍFOduÿQ$ÉårO²Ù,Í —Ä9&“‹Å÷¨ÔÝÞÛX¡P´Z­‹„¥R#U*U§Ó¡~>dU{¿‘Íf›Íf¬Œ #Ó^Í‹Z­†”hrrÒd2ÙíöÅÅÅÕÕU3©¯‡.ù¯N§+•J.—kyy¹Ó錎ŽÖëuämÈl6[$!ç ÞzÕju||< Ž/,,H$’©©)‹EZbÈö,K&“>uêÒ¹\Ž©õz½Ñh =Óh4¦§§y<^*•*—Ë€v¡qäR©T¯×‡þ?öÞ<:²²N¿u«êÖ¾WjÍR•µÓé$ÍÒl"âÂð³Å™™—DDñøõ ‹Ê´pôÌqÆÁAGá ¢¨œDpX¥ÞH'é,•JR©Jí©ªÔ¾ýþxï¼soÕM%½Ð´õù+©[w©{ßû~ÞÏò<Ïò2ôVÒé´Çã‘Ëå³³³*•Êh4 "Ëd6›¥R)PM" "¹è'„T¼N§Á!‹C\…Óé>—7fx:Èp–„˜ ¦OÁûˆµÞ ²ÐS‡§´Z­©TjÛ¶m³³³ÝÝÝ·Ür‹Ô¾ƒ(á¶õœÚvh ªÅ(›Í®®®ò†J¥*•J†èºÆb1¥R‰®0H¡#'C&,HE Lâñx°´GÌÄ0 `˜xÿyç ƒŸhh$ðLr¹å8'Ì;Ø$"y0,<+qNÂü9Z«é©Íl6ƒµseeE«Õ"B¡ž,½e2YGG‡ÑhL§ÓH*º\®³Ï>m{ $Ÿ¥«¼NHDTa¬Õjáp׆êæz:3IœS2™´Z­ iÐétápœ¨,¢€N§ÑC‡U¯×Ár;::Z­V<D"ŠHêB¡Ðøøøüü<‰{†±X,UËår*•ëf¤’’Ã0(y<´o— ‹%‹q‡ÑT*åt: …‚Á`Éd®Q«Õʲ,:Sȇ¤“‹÷…N@€ÉÆ&Aª¸µ>ÒVªèåŽF£Y__W(&‹i4«Õ =0Ng6›××× ö7©æÔ¶¶«×ëÂD eU(`~CãÖêêê¨ÆP>A?‘H‹E‡ÃAçôÍdYýWà%yiÓÑÉ=˜N§Óét‘H„.M+ ˆ”% ×E>P&!WŽ˜>”²D2ÛØ n¦áw\.4Îy7ÊårI¥R¨ñŽF¦×b±¸¸¸Ÿ‡Ú>gYÜN¼ËƒKÖh4@ uuu©T*ŸÏ×ÕÕ…¦A´Ÿ%“Is¸ìžN§‰Žy¾§@@ªxÅb×@ Í  „NŠ%Ñh´T*ÅÂL&c·ÛAœJ¾L&ù aX«Õ ƒV«íèèËåý-n–i±m'ÊèÕ(Çq<’†a  ÂXËCý“¤  æzŽã‰ -¤Uª»Â³ó¢(–e@$Ά A JÇ:àyƒÛ£×ã<.`˜dGô¿©Õj Õj5xÐÆ`)­Ñhp%*•jmm zí¹\Ž„^˜oÛ¶maaA.—ã"¶@6 òÑhTèm@¿øøáp-@€¸sôß#/Z«Õ ›Ô°FÍf³ÛíÎf³~¿’…B]ŸÏOI´ø "` ¤¨"fgg;::Ð>ŽË#53t̃‡i}}܆ÂÒC¥R)‹4‚¸áâ) Þ ™‹þ^µ ÝÌt‚ÃâDð:d/›Í‹ÅÊår6›Å&Ò1ÝB9âŸH)Åh4:@…ìv;0Fà05¼ôþ&äh‡ }­VƒZ9T”àwqvÜO¼8‡³ÞÂÂŒh ‡Ãv»Ýëõ‚»Z­ŽŒŒøý~Ng4ñL»ºº"‘ˆÇãÁtL°ÀN§:³Pó’H$öjµZ¥h¯©',\Ш"Ì¿¡€‡ûÙð‘¡©ÝårÑ<¼ÍŒn½!˜núá2oè;‹‚v»ýüóÏ·Ùl©T*•JµâœH®µÅ—K¨y2ðòùüââ¢Óé,•JÓÓÓ2™¬¿¿¿¯¯¯¯¯¯³³3º\8­Ó¡C‡è.—3Ì.¼ð¶î)3xò¦õJ¥¢Ñh05 D"‘T*¹9í 2½½½Ðep8•JåÈ‘#dj€¦-™VÀ1šÉd°T joo/*¼‰ƒ0ã. ’⑘£YCà/tÞÒåruvv ¡H$Bû*œˆè®Ò{!s…x+B¢X…_r„z½ÞÓÓo¸.ÐÙán öêëùùùŽŽŽ@ €èñxÂá°PqZ¨‰Dbpppvv«xáO†’xÐõz}±X4 $ñU,C¡Ê55…ÖJŠ¡…app°««k``@¯×¿üòËKKKÂ^|Þ Ôjµ±Xl×®]‡¦HBçµµ5R¢k8‰z2ÚÂ>,dÕj5‰)›y;¼Nà¤ÐëõÁ`°õUrCÁÀÖmjj çÒétƒ!V”l6{ÑEi4š¾¾¾ññq‡ÃÁ,ûOkç422r¦*á"-ÓžN¶I$Üí†:‰Dò·Û ¾ÎíÛ·;vìõ×_Çt‹ÅUV*•]tÑå—_^«ÕÐS^«Õ0ó‹ÅíÛ·OOO#æH$&§fYV¡P`õÍKtŒÍÌÌ@© +++˜ …xIòsð4†aæææè¤?ÎÕÛÛ‡éT 9 ò²dm«P(@!НÑb 8 ¸Ã™7”aéùúرcˆ;÷ïß%<™ÇAê*<{©TòûýµZ îš{<ÐL½^ÇíÅ÷±Ì…B vïG¿F0$mhrÁwÂáp,óz½ñx<ŸÏK$’‘‘âtáŒ3™Ì…^8<<¼}ûvô’ÍÏÏÏÏÏ£· C˜R›­V«¯¿þúàà` ðz½$&ãÍé&“I­V ‹ä÷ò¼tY2™@°L÷ñ¼v»=“ÉüêW¿Ú,›C³QÔºoƒÜ %].W(‚J„1 ¯ÊiíœÚJ¸m;fìŸÂÄ…B¡ƒ”ŸÏ‡É¢\.8p€ÔxQŠH$ƒ! ‚ë¡»»Ûáp(•ÊW_}­ÌP”ðûý===ÓÓÓÝÝÝÓÓÓBY&²L) ´H$xíwìØ€¦Lú‹‹‹•Je||\(D¢–d2™L&oˆŒ&‰èÒêt:‹ÅBº[a®!‚¼â_[^^^^^&ª»[PÂ>Ç-—Ë‘ïõzÑ‚5Çq333r¹œ–vo;Û»m,“-(jù¡.‹ˆpÀ©±X,ö‘­)۟ζ²²b4u:F˲$ª¿mÇoÇMLLüö·¿EwCCÈt"è ˆgÈ[ ‘\Žãr¹\GGŒétúرcëëëƒ4¬>Ÿã8ÈåA ºè+[__Ç¥R)šÔék&gÜn7HÛèMDt.—Ë!h …Bˆ9Žk6ÙÁ:;;I¾«W^„w пX[[#m€‹år¹¾¾>R—Ëåè)ÇÏÇå---!ìîîk8縷r¹Ø2p. Äãq­V /….¸B¡z\ô”—J%€©q(ænlx …T Áj(•JGGGëõúÌÌL¥RQ©T8pµašttt7y~~þðáÃÁ`$WûúúA¹M <½½½.—k||ü¬³Îr:«««&“I¼nd·Û R3‹F£è³a«L&C3qäJ¥R¸¾”ËåjQŸÉãñ`\y<žÍ²ólHÄ…È^|öV«Õxjl “Q©Tº»»³uõr,SÌgS‘À©VÂ}æ™gÇ9çœC‚‰h4zÙe—(%Ü—_~™¼„f³ù /\XX éøw¼ã æJ$úÓŸ¼^ïöíÛ…Ñ4QÂ=묳Ð-úûßÿ·Ûår¸ïàÁƒD ÷òË/o;†ÓÍÀ žˆ§§òÙÙYF‘Ür¹œËå8Ž›œœœœœ•ê±cÇЩ…ÉZ§Ó¬Z­V—J%¤ø˜74mívûââb½^W(¨Ö4ô¦àÕN&“(¨ ÀÃûšÕj]]]­ÕjR©T­Vg2Ðɉ¢éÈi³wÌ`0°, no®rpà`Y¤è¦[K 6˜H$°‰¬½Òét¥R‘ËåЊF£ÐF£(‰»\®l6‹Å O877‡¶¬©éŽ’ÉÉIè¾²ƒþðdOOOCðÐápär¹l6K‡r¹\­V“¼¢Þx<~øða›Í†d#ÐÙàCB7#ÉG©T*´Œ›L&x\N׬W…˜8,•JÑa´3h¦iëp8ÀÆ$~|tå ŸÏg02™Œð²Íf3H¡¶\zP*•:Nü÷®­­•ËeêfggQƒO§Óïz×»½å͉œVWW/»ì²d2ùáŸ|á _€ˆ!þ;ÎÈéóŸÿüw¾óF³¼¼\,-Ëí·ßþôÓOçr¹ïÿû…BáœsÎyà~÷»ß}å+_Q*•ï~÷»yããÛßþöøC†a~ñ‹_ÌÌÌœuÖYO>ùäç>÷9Fó§?ýé׿þõððp ¸å–[c±Ø·¾õ-HM·#§Ó$rzì±ÇÊå2ÇqÐS§¿€&+²|”FóùüÐÐÐêêj©TVŸä–e2ÙÊÊJ$Ñh4Ø´cÇŽÎÎN¿ß?66L RpR©´R©@¾j°èœV( «Ê*•Êd2¡AW’Ífm6Çqô*›ˆ Èd2èBåóyá2?¹K 4æE²åÇuvvBÛ·££ƒGvŽR?ú¶- ¡$¢“rv»¸pH•JH[ævg„€ñx\£Ñ†rÔÏ ”A~¸ Ñ»Z[lÒét …B.—á\‰D¢T*…B¡mÛ¶Åãq…B±.•JEàGÈë¢ñÜ ôô£oeÙL&c±X¤R)†J8Fû‰R©XÛ`0€äùçŸ7ÇŽi-¯ë’k'AÃøLd °¤R)†PVf³­:F.—»ÝîíÛ·»ÝnŸÏ·eçT.—×××qÀf9C½^š«b±h6› šqþùç+Í$r:ÕJ¸Ÿüä'§§§Ÿ|òI†a~ûÛßú|¾Ï|æ3'JlpïÞ½~¿ÿšk®ùö·¿}Ï=÷\wÝu‡Þ»wïûÞ÷¾{î¹ç¶Ûn“Ëå iÖv‹Å¾ÿýïïܹóž{î¹ä’Kzè!ŸÏw÷ÝwK$’{î¹çÚk¯=pàÀc=¶wïÞC‡]wÝu÷ÜsO­VÛ³gOÛ1œnFxZ ¡F¦ŽÀZªÕj$î¼^/M[ |.þ^\\D„T*5½½½à̾袋z{{‡‡‡Á f±XdYÖét¢m³D"A”p‘Ç@†Ú ÿ …@ P¯×Ay üEH^‘5)-­K ²hµZ¡.73Pcʦ»q@ü=00P«ÕõÒh4&“Éb±¨T*¤­*•ŠÏ烢®ÑhD81ü@< ‡ÃD›S"ÉAÀ‘ÕDËÿîîn¼­ …bff¤·«¢¡ßf³©T*‹Å²l2™Ä&’¿YYY¡ï°Ãáðz½€j †Z­Ç$2ž/n`"‘XXX˜žžN$‡‚UˆoðD™lçwCÒ–þ„·7e`]"Å' šy¨=j[˜ÊårÀM///s Œ7“øU¯×üãÿñüôÓO_~ùå¿ÿýïý~ÿ'?ùÉåœ~÷»ß-..ƒÁ›o¾ÙjµÞvÛmôÖ¿ù›¿Á7ß|óK/½ôàƒ¶gð3غÒÙøžZ­‹Å†††H Å`0H$z¢ä8nûöíJ¥²P(8“É p"*1??xìØ1°‚®­­ÑŠPä2°t%—ÇK44 »P(”N§%I<ÂQàE¸X,™Ôµµ5½^ V|‡n7 ¨É\.‡‚÷ÂÓ^@w‰2›Í`­¥7‰X>ŸÏårpœðÊDA1h‚µµ5¤@¡~DND<épK&“d+Ÿ q^¶Êh4"mHîÏ1Ã3©A&§Ó pÖÙl6ƒÁÐÛÛ‹ŠàÑ£G±µ¯¯/‹uww£ÀC4)Ö××i”(Cás›Ý@l¢žÈ†ÝÞà†÷â}Zì<è®°Ía³ ÃVl~~Þh4Z,–W_}5•J‘æøkBtv"‘ûF<‡Ãvëð›æœ Ãõ×__­V¿óï|å+_¹æškxÞòxlddddd„¬q^}õU8§÷¼ç=ÿøÇo¸á†øÃÏ>û¬¸þUÛÎ#³í†+¸X,–ÏçÉôT,Ãáp­VëííµÛí€ïäóy‹ÅÑ äîA6 ŠÒ•••cÇŽ¹Ýn}É0ŒV«5›ÍKKK ^!==ƒÁ|>¯P(÷g(4L:–J¥}}} ñéBº P?lÛ¶­¿¿ßjµ’ž!ŒXXX —Ñßß(GØ:(\Ñ#¤ðx<´Z82™CÓé4)?¬¯¯K$·Òé´B¡Ú‰>ò†-ΕJ$årÙápÔëu­V;22räÈ‘ÕÕUŽã>ô¡õ÷÷£Õ¢^¯ûýþƒöôôèõúh4ŠSjÆ;;0³„bœÜ[ä‡éf¤…ÌÿE1 cz¢ÝÇŸ`6j¸—ÈÓ?!–J¥þô§?!údYlô'Üðô0Êiíd2É£ä`ÞâW½^nggç ôL ÃÜrË-ÂeŽÃáØ±cô˜›õY”¶1Ü ÙyÙc›Í%ºB¡0 Ùd·ÛÍfs¥RY\\„ìÂÈÈÇq^¯×ívK$’J¥277çóù&&&¦¦¦¨¬Ÿ{î94ƒ1o@|²Ù,¦3¤ËH©@©T ?Y³K$’R©D¸È‰ÑŽ;êõz3:Ìt ôÄ'n·[¥RÍÍÍ=÷Üs"ÿb±È#ÉõûýÐð&ºtþ­áA–——§¦¦Hô“Éd„3,¹†J¥bµZ¡pÁ0 tA! G_qä àmlllÇŽd.‹F£jµZ·¨`uvvâŒ6›ÍívwuuÙl¶÷¼ç=E>Ÿ/—ËÁ`8]…B8h´ûý~ü"rå™L†DágŸ}6©™5 D°Pn9Ñšv€¸çÔìaÑÉ'É@xâAÒá|b x BRE¼uÃEä%™¥ÒáÝÑÑ©•T*ŠÅ"(‡î{á…ƒÁ}ûöuttäóù@ €n”µÃáp ˆÅbPî©Õjjµ:¢NŽ9®m§qW*•ŒF£V«Eë-M+G§¼Î¤¶ÀettÀÃ_|­¤èÙóù| ‡|»F£Å2P"‘®ˆÞ8úx \bØK¸„‚6‡x™±þ&Ùàà Á±:^™D©TºÝî¹¹9² â¤Írò>Ÿø{˜­V«(€ƒ`bC4(q]@ƒ2o`Œèc‡Q*•xįr¹üõ×_§Ÿf__Ä/°Ø…°E2™L$pó‹‹‹>Ÿ/ zìv»‰B öØcøÀðÉç?ÿù/}éK|ßûÞ÷†9÷Üs}ôѶ?8} +ÓÅÅŵµ5’¯ÆÓD‚ÝÞ‹h7ôÜD&k‹Å¢×ëÑ_IJ,ð"H±, õ •J…~<¸ä@bC$ }®†‰ÇÓÐ¥‰ŽVéóù<îÌêê*PŸ"³¸‚è01 à‡u>›Í&$ä&‚§ô‡àtW(DÌÛn·C]‰(à %=Ð Ãôôô@a]*•Òë÷û²¬‰äì³ÏÎf³ápå ƒC¡R©„W  YˆÃà¡ÐåßÙÙÙ0p)‹´g‚:-F£Ñh4¢rcµZQq¤ƒBæ>”Ai Êm½„Ñ"Þ:ä\¹\Þ,1’P‘¹á#>k+áž:k+ážlƒîµ×^‹:°ªÓ‚õ€ã¸t:ËåÎ9眅…šËÆÆjµZèj£Š‹x% y½^€p•Je:ü…׈ÕP$w F•¼Y†dK¶ xŠˆ°EØ2ŒV5eDe|e2™Ûí¦–V«ÍçóÕjµ··wii ½!týMF#lltP.—cYÖn·G"4Úy½ÞT*5::‰Dý+‹ÃÃÃÿó?ÿC_<2½©TJD‚V„\\hN§3•JE¤ÓéhJ´·„ÃaµZÝ"•CÃäÇqÍÔ+è;V(À/✤R©Õju¹\étšžnÁ¤RiOOO*•*—Ë ñX^üm·ÝÖsÎÿG”pÛbƒm;­\.óJ)©'«Õ*—ËF#Ò>ù|3x,3 F£Ñ`0€€¼çtQÁjµ•J¥VVVVWWãñ¸J¥Êçó‚˜)b©sÎ9ghhˆÎhµZèÊd²ÍJX–zÉ`0( Œ J£ä_\¤øyTf‘H„öL"WÈqöå]]J¦‰xá0¡È@J¥RÐËd2!°d}}öLH»!;Dz ‡Õj]ZZr¹\‡£···R©,//§R©žžzX™ IDATž±Z­v»Ý`0Øl6£ÑˆèVh =“ÉdöH*•Ò"¡PH¡P•JE‡8J¥’ã¸åååR©´ˆz4ÈdÃC§Óñ±ÐH$’ÙÙÙÍ’5KÖ»ÝÎÓ`¤Ó¦PCm™ö¶±¦V«A@2ZÒ"›§Óé¬V«Ñh,‹ëëëàÏÉ"‹Å²¾¾ÎëÈŠÅbÀ~ªT* »ê÷û9ŽC¹Çã©V«]]]£££ãããDW:H…rS8MhÆ“‹’”J%:k× [hWW—ïŽh—ÀfyÀ¦*ÄßÚ¼°° ÑhŒF#}R—ˉ‡B¡À²,Þ¥¯P"‘˜L¦d2©Õj‘ëS(çŸ>Z+#‘о …‚צ‘J¥€›ššBAφœ ô5ðž#þå­èÙ_(ÓÜJP‚?H›~GGGC x²Î`&ˆ3þ1œõ¦‚æfôù|Í<­ß0Úã¡¶ÛJ¸§ÎÚJ¸§Øèn=Q¼…t¨$ÈåòùùùR©Dæšš·Ø,—ˈ¨ …™ßIŸ•Ùlžžž~×»Þ.·ÛËåB¡¦ðPT*¡T]Ã%s¡PÐëõ@ÂbÒá8x¥R™J¥V À$~ðfR­$úfØ`R~Þ ƒœÐÊ„=`’5›Í¡P¨X,,E ,‘Núa Ï÷â‹/îëëƒë ‡ÃV«unnNx·áêàõAò¤r¹l6›I?! } q¨8èVy£†Õb±` Äû0í ³|ä¼*•J§Ó•J¥®®®R©477·ív»ú¼Ÿˆ²½eƒû4™LÍÈ–š­#±Ë[À9µ•pÛvüFO‰P©Õj·mÛ ©Íf“Ëå~¿_¸Xæ½Zjµ£˜kòù<èõ¾Ÿ^¯7 ™Íæl6ûÜsÏ‹E’j7›Í )jå'@„U1² dPRjVUÎ ƒã8:Tjæ{N¥õ÷÷ƒz•Üÿl6[.—ÑÈ€+¬Õjƒ7Ï‚ ÷?›Í3ÛÕÕe6›5Íúúz ðûýÇŽëééÙ¶mÛÑ£Gö+§Ói”gàq”J%íÚøÍår(¹\®T*…Úbõ¨Y¡q³:~`®#måxúõz}ËE,ry'ö±æóùVbwÞJ(›ÍZOgç„´µB¡ ‰ÎÎ#í¤m{Slee…㸣ÑèñxкɲlWW×¾}û†††x iÿg'“ f<ïîîöù|CCCBDˆÏçƒÈÓÔÔÔàà /1xìØ1á J¸$Ź[L^¼ø/™L‚×¹ˆ1íçZœƒ†‡‡§§§·°ŠEá¦ú ¡ÐA;\$ý“‚©+• ½žH<Åb~¿¿\.¿òÊ+ YN&“4 Xx[„¾œŒ‚¾¶»»4‹ÁÓEcÞ ¶²²Â»àfNhSO¡éëõ:‚<“ɤT*%I6›Ý²œà‰ŠŸ6ët…è´sNðIgž˜SÛÞ\Ÿ››Ëf³*•Êår'T¯×§Óé……,D– …Ó霛›C;C8öù|µZíì³ÏfYöèÑ£ôTNÞÌZ­ær¹h&‰DÒpž"J¸dÆYS ¥RIû<‚IJX,¼Mô¼Öâ½jØÜŠj¥RÙ,ç ~&=— OÄÉ%32½W©TÒëõáp8“É(Šp8œN§ÁGÇ…(·-$ÁŠ”ÏçI’eÙááa҃μ¡Ôßß?==ÝlîƒJ/†ÙlV©TèBÔh4à»h,}—x÷*•J¥R)|844ä÷û7ëüÞS«ÕN§Søöµ"Úöa‡æ8½ãà™îïï¯×ëKKKЕËå"E±XDP…‚0•Àóëtºþþ~„ 4Ö3ïË/¿ÌPØÒþþþ¥¥%á”Á›È¥zCK&“t×Çqµ©L]3fC7æõzWWW7Œ½ŽŸf¥««kmm­•rûú믓¨ 3(_Äb1qÏ*¼¼çÈ0L&“™™™áu´ÓpZÒŒH²5Ã# ÷‚Ñ¢–æv»;::´Zm8–J¥Ó¥R)øŸ:::Ép¢/X$pº ØV«ÌAÿëÅÛÓVÛþBlxxX.— …ÃahCd2‰Dâóù^xá‘ÝpµK÷ 9ü >’ȲZ­ …M&Jß³³³Åb±»#ý¹L&#™m,¢Aø&•J»ººúûû “·ÇãÙ°@ rz­ <І7 Øä*yž‰lÚ¬qÇ£!§mii‰öLR©T«Õ6Lò+•Ê®®.lR*•CCC¼>±h4ºººj·ÛÅÛ¯»»»éŽ;¹\ît:¡‹H­¡:_³PTëÍêxÃI$çùÄO„B¡Z­}z2œÐR833ó–ˆZ±X,Æë²9M#§C‡ÑÝz&“émo{ÛI=ã³Ï>[(ÞûÞ÷¶'ñ3ÕPcF£±XL£Ñ ¡àÈ‘#è¡_i®H¢Èàœ˜˜ q0tD"‘èõz¤þy\v»½!zJ¬XãC Szö‰$;wîÚífffvìØ!^cÐét‹…dN¬Vk(jø“õzýúú:YƒC°aÀ4[èªÐét¨â´òe4#€”G–Ïç#‘ˆÁ`ˆD"F£‘ð §xòwC˜0=\!Ç) Ú´K³^5Cƒ£T*5KrÊd2z8Ášé ¿øâ‹ƒŸcAÐJŸgC_Îl¾ô&Úiêœ~ðƒüìg?ûèG?  Çã9yÎéÙgŸŸŸß³gO.—;óú×ÛFÖ7@E¥R911qôèQ½^ŸÉdZÉD Q½0îÈ>|¸õ½è¹ŒŽ–——±¯T*\pÁŽ;¤Réää$éGKÄŠÅ"í šñ僬ÑhÈVÄ…l¹ä¾)V(ÀÉ`^ °¾¾ŽµÅêêê†mÓ‰D«ÕnØØÖì `¢‚gE©¬¯„8OV-Nˆ• oV&“i˜~Ôétã¥V«7dˆhh …‚W¨;Ùf4Ñ{ÙÑÑÑbÐùpN°/}éKÃÃÃx9ïºë®]»vÉåò—^zéꫯ~òÉ'±|èêêúÄ'>±ÿþJ¥F‘|¿ñÆ¿ûÝï2 ³}ûö|ä# Ã<úè£xårù—¿üeú,ù|ž(I·íL5:ECŒ´M&“‡#‰la @R¨á¦ ç„æt:WWWNO@ »»ÛårÕëuR€f |‘Þt\!O(ŽKŒF#™8X–EüéóÔ¬Vk82º ;‰Dât:释£B¡P¯×ÉêS«ÕÕÛÑÑÖG2ÄãšD| pZÞhÄ¡÷Y“M Õ[ÏœúÇGˆ-ΜȉgÁ`ðÞ{ï’ÉdGäþ«_ýj.—ûÆ7¾ö_üâøÀ¼^ï]wÝÞþö·ÏÏÏßqÇPß¹ãŽ;Þÿþ÷Þzë­…BÉݽ{÷îÝ»~øá­1ì¶í-a5ÙÕÕµ´´¤Õj•Je<¯V«Pfj±›‹'’+’ñ'€ßÖM¼~`³ÙfggÑÇFWVV0¥Š_99&OZ—yƒ›xaëÖ°´'Ê:::H×;ÁçÒ \q«×ë¼ÛX.—ív;øã{{{ …ú×q@úÑCÀ·áaÕj5ˆ‘Z–¶20ö|8m³•G4m§ü ‘ɈÒëõ2™¬E¶¤Óº!â‹_üâ•W^yÝu×áßcÇŽuÖY<òÈu×]÷ÃþðSŸúÔ?øÁh4úâ‹/2 sðàA§ÓyõÕW †½{÷^}õÕ—]vôx âòîw¿ûꫯfYvïÞ½íÉú ¶f›úûûáW€ŠÍf³…B¡»»zt2zt²…ŠK___3Z pÑ6Ûqff&†Ãá£G¾üòË™L†eÙµµµh4*rñ´´.¯£(×VÔ‡c Œp0Ç®£m}}̶½½½ðêå}S¥R5ì8à=”L&CIС˜J¥H^·c)6ñ`Ú½½½­z½Þf³5ôv„ƒŽÀ°6 §M§Ó'uc±X6Ëô¸5ƒvÚ™9}îsŸëííå8žö¯ÿú¯o»í6ð3þýßÿým·Ý¶)æòn¸Ðñf m;3L<=R­VûúúæççÉ AUúkàÙfÉáÌx£N¡Ptvv¶Nê ›pn¢g"üÍPtp‘2©&“I¡P4 }„/ onh‰DbË“àêê*öU©Tv»½a=†ÞDû~ÒË€¦pÒŒ ‘H¶mÛvìØ±+¤H399™Ïç…š¶ Ãp×ÕÕÕì9 Q¢â‹7fðˆ‰a0* •Èi(­Kó!¸ìåf;&ÄÉËO mjÆ>­S?jN‹˜Ífø•O|âO<ñÄþýûÓéô;ßùÎvçw^xá…åryk ж½UŒÌn&“I«ÕÒIHÍb$pZa2-™L6|W‘ êììÌår$5Q*•Zj^m+++õz]|²XØRÞ{NølNR]¡Å9Š><@¥Ç㙟Ÿ—J¥»wïƒhâàÝÞB¡Ð0—Õßßïóù¯í­^¯ÏÎÎ6SPÝðæËd2¨yÑ—Q©Tš=dž0©fµľäûALpÖ@L“‹'ßcŒŒlÈ»àöÖ|Ì)H ònË[>­×Ì ˲Z†8‹°ÑhT«ÕHkœwÞy lÛoÉdR8å|+øªæÖœNg3?™v:iÎÌÊd²fY;Þ:a–e‘òbYv``€FóMô Å4Çç"7u ø±4 úËΡDÓ–Øôôt¹\®×ë¹\Î`0 ;^ö¢Ùzýõ׳Ùìüü¼ðw5ì±ÎZüúÑU¿¸¸èt:Ië‡D"®×ëÂßŲìöíÛ[¿?}}};w«Õ*¦f4m‘çÛÛÛ a‹ññq²ïé=ztÃõîá‰ÀiµòM¸yñ½d2ÙÎ;EUÞJ‘“×ëݵkÁ©iµÚ]»vuwwãßüàõzý‹_ü¢ÓéüÕ¯~uÓM7=ûì³»ví‚pÎŽ;ð°u:öºöÚkK¥Ò}÷Ýwß}÷íܹ³aÍitt”‡OnÛ[Ô$ ‘µÝšKYëˆä áol6[2™?;dÙfgg¡°·ºº iD:Ðëõ á!Ÿ4ìW«ÕHñ‘™‚eÙ“ÌÔëõýèGóùü‘#G„¤‚"íÅbñ©§ž²X,2™¬!£9/ËÇSŒÝprÄÜÝÝÝ ‘\‘V«UÄOtZJ¸jµÚb±ð4*•ª!¡C3jjèR©o jñÙlV£Ñà·p§R©Nqg d|q1 …Ân·‹óÖÜNg4Å-%{q:yNW$= •Jq.Ë“íêêZ]]%³€^¯ß2H“—lVæõz}OOÏ;ßùÎb±øç?ÿ¹!„‹\!–ð´›T*•‹…Çû'<‘F£éèè…BX›Bt¸\.cº/‹ƒ€\Ü%›Í†ÏK¥’0=­^¯×»´´DT»šµ×ólSJ¸[Ø«§§'›Íâ‘ ¨Õêx<Þl $—Ë o|ŠoÊ\.W2™Ü,QzC³X,Õj•\U‹w£­„Û¶3Üêõ:)QÄPÒ¥:'^¹\N“ñ¬T*‰ä^t:ÙhÐ ’僌oÃ+Ìf³t„‘N§7噚ÉÝ6ìÍÓjµSSS³³³ ›Äˆè*î’P«=ÜžH¥R¡¨ÓépÓÜn7Çqð»¸È#Éår¯× n¯×ÛJ©TÊåòd2I‡SZ­vpp°¿¿΀¾ç`™¢m žiýd2É(f2âfgg>,K¥Ráø4 ¼4©Ñh„Zñ†INÚ€‡;!ï`<§ýåÖîaÛ9µíL¶t:d¯"Õ €7iñÀ†nO$×DÃ3¼i,K¶Öjµ†Äá¼s‘êq("sk>Ÿ§ÝÏqv÷4“» ƒBÕ`0X©TÀœm·ÛyX]r%¹\s“H+ X·™7p¬Ç‘é5‹åóy‡Ã !!˜Ífe2™ßï‡Ûõõôôœ}öÙ£££jµš¾·<?/Äpy.pttôâ‹/'‹ñ_‘1Ób$J{A™LFno"‘h=Ýp|.//ó.ÿ¶ò[”Jåqb®­V놋̈́ÛÛΩmmcb±Ø†`¦ K5ÕjµR©X,÷°,KJ¡„JGpX,–T*µ©e©PÆWhv»=“Ɉ7y÷ôôˆlm&w+„²ÒÓ™T*5™L<øÎ¦ $¤¶A\ù±jµº££C*•¾ýíoß±cG4…Rj¹\Æâ P(H$’w¼ããããÛ·oN¥RPSä¨R©ïO6›­V«N§³»»»¯¯ž•HëZ,–q]-–÷x—Q.—銗ÝnW©TÝÝÝ­¸4tð0Íø‡W*•Âáð†Ýqôßš•J%—Ë%ž–ØZ´-™Ñ¶¿Ç¥×ëõ ëÖ¥'šz½¾a‘ »löj›ÕÉ4Á`ÀÔf0@Ì#rœVj`0‡ÃßÜÜœsJûÚ}ûö ˆÌGF£Q&“‰$yAÍ«ÓéÀƶcÇŽ‹.ºÈëõÖjµD"‘ÏçM&8#L&S8–H$ …ÈåH$"•J!JB¹ªÕjÀÂxO$©TjbbÊÂhy'Þ«•vŒVÆ Y¸ðVtÖ+“Éà†·Òi],yîD*•f³Ùf”‰â®eSØ£†É‰ [·¦¹|Ú9'ŸÏGÄiÎH»øâ‹y Ÿ¶½µŒžéZÁ±6Tù<ž³“£-..nxäÖév‰¾ WªÑhFGGÑNF zç„sÁívg2ÞY òG"—Ë=Ïìì,ö6ñ;ÒˆÌ²ìøø¸×ëÕjµÓÓÓápØ`0Äãñ¡¡!ŸÏ©Ù½{÷¾÷½ï}íµ×:D /_º¶¶ÖpÆÏd2üã¥RiGGÇÊÊJ¥R¡Cú³,;888==½¹”ÔföB§F‹€hâKˆzr­V[\\|Z›5§vΩX, œuÖYgÞ¤œIM´íä™B¡ðx<"*­èºnÊNø›uJ$dKvìØ)^½^o6››!IQhH ‰‹ç-¢Y–u:gÿþýtA»R© ¶‚ÕÕUáxN”år9÷õõ¡W¥»»²­ôw"‘¨Î9ç©T òoDJ¥rii©««+ år9ÜêP(4«Ýn_ZZ‡´_Anpuuµ¿¿eeiUüØJ¥¢Óé …:ï¡Ù,ñE‡bpºýýýhýoøÐ% o¯fc†Ù$.•6‚ê†l³»ŽŽNLLœšA{†8',²áã™dû÷ï÷x<.—«íœNÁ§¡g‚æ©F£!½æbïÆr¨ÍcéL—Õjz… wlh-îåv»××××ÖÖ€.‚|3Ϥ×ëÕjuô^¯7¼M(Þ …õõõ|>O+ÖËeâ™PªNpf³™ã8ž)N“«á•`²ÎçóÙl¶T*ÍÎÎ~F-‹ÓéÔjµårùСC¹\®X,¦Ó郪TªP(4<<¼ººšH$FFFpC@:Ž(ø Žã<48cµ’q¢³²^¯7›ÍMEÎE °Û¶m›™™Ù0—ÛÑÑ¡Óéx˜åÖÇÌq†JSSSÛ¶mR"zk&ÜnˆhÛ™i<íW2³0 “Íf7ôL %wëõzY–QS]__z–eÅ›š]6é°·@ P(HÇqn·[$¹×¬ !ܤ×ë½^/Šöóóó¡PÈf³‘FmºcÛl67áM§Ó"“>O  ¿ à ³Ù\(2™Œßï_]]=pà€ÏçÛ¿<×ëõhþîïïïïïG|¬V«———Ífs(Êçó,Ëo¡ÕjûûûI+ÔiK¥<Ó–e|}>_8Fw;ÚäÈÀ mSSS­xŽH$ÂóLô˜á8nkWØ¢¡ñò”FB2YC$†R©lØÎ·¹Èéå—_æ%‹=ÏØØØi87e³Ù§Ÿ~ÚívŸsÎ9 7áï‘‘‘¾¾>†ažyædN­VëE]Ä0ÌÑ£GÉÐÙ½{÷¦˜•Ûö¦ÇqF£‘·xG8%Ž´¥g²—\.·X,›JžÔjµf|h"¨ÉjµÊKiµZˆö ¿l2™ÖÖÖ*‹ æÍ"4ívûøøøþð–e}>_©TR©T¼Ö2’åkÖv/.’ËSÂ…hÓÒÒ(Òét0ìééñù| .—K­VÛív¹\^©TX–Çã„"n½jÛ¶mÒ?9NÓÌPâ¨T*@õ‚eªa;ƒR©D*r—p»vízùå—ÉÀ€î”\.ßr‰‘3Xl9ÄS4>L«ÕšÍf!æ‰h:—sšœœ$%¾H$òè£~úÓŸ¾÷Þ{O·‰é'?ùI0ܳgχ?üáýèG¼õ¿ýÛ¿=øàƒïÿû9b±X¾þõ¯OOOßtÓMï{ßûòùü+¯¼òíoÛjµ~ík_“Édýýý?üp(ºæškÚ3þ[ÈDðÿÀ±6tNÇ©ÕjálÞL ·™Y­Öx<Þ,¡ßLA•gÒ‚z½> ãòµ~.âÉÎ9ç„5]­×ë2™Œ¾“­*ÅÉ/xNËd2ÁÇi[.—‹Å"™­°Éçóoxµååeá´ ¤­PîÖ`0 …l6«ÕjQÇR«Õ¼ÞkÞØÐ9‘1f±Xh”V$ÙB¦ðçÏî&—Ë¿s ÜBMKhÈÄn"ÒÚÔÑ ej:¾õÖ[‡††vïÞýÜsÏ=ÿüóøüK_ú’F£YYYùáˆO>ðìܹó¾ûîûøÇ?þï|‡a˜ááaÇóÄO0 sõÕW#p9áaS³»Y*•öìÙsÑEýë¿þëüÇ|õ«_ýà?øàƒF£Ñ;î¸#‰œ{î¹?ýéOÏ:ë¬çŸþþûïÿèG?úôÓOãßh;§·¢ét:‰DÂ{%h|«ÐšaM …V«m±)VÛ¢Ÿª7BÂckw`S>•eÙB¡0??¢/Ò$z½^«ÕŠšv»ôï MD/˜¾WèË'MkØ +‰ …¾¾¾õõõ\.×ðD$©ƒW¥RY­ÖT*E©KKK˜¬…ž‰\¡Z­6 Ĺ:Îp8ÜpЇl±T*¥L­V2—t+ƒÜm±X”H$‡£•…Ïär¹Édq«›Z¸°,k³Ù6D§!ÄMù3™L&\ ´Èõ¿§ÞÂp¯×ë7ÜpÃK/½´gϹ\þµ¯}- üò—¿¼ñÆ“ÉäM7ÝôÌ3Ï LMMÝzë­“““>øà¿øE`#î¼óÎ'Ÿ|r``àÏþó-·Ür2ôg¯»îºOúÓí©¹m•JE¸†<%0̆):]ãr¹ÐÝÌ“mÙ#¨ÞX,¶©•¸ÕjmÈ峡%‰×_}nnŽþ] q¬Âû&ô÷¸ q &™y¸cì…‡¥×ë¥RéÜÜ\©TŠÅbµZM&“ •»ºº¤R©L&ëëëCz¥RI&“Åb1‰ˆL²¥R ÅžjµJ'Q!Ô,ƒ‘H«0\˜L¦L&ãv»…KºMwk TzÜZ­Ö °Z e6üN&“Ù,‡2°êâßq84?`×'À9ýã?þã /¼pÿý÷_rÉ%sssçwÞUW]e2™~ó›ßär¹§žzª³³óª«®yùå—áÃ÷îÝ{ÕUW]vÙeËËËétúª«®òz½Ï>ûì ¡,l[Ûš%^„1´ˆà©ˆñöJ¥RÕjµ™'kPi0x< R©t³Ê 3d“J¥hiÑ¢Ñ(ïwår¹ ¼ÉdR8õ¯¯¯ã2Z 7ÉÃêêêé\c:†‚j&“Q©Tˆ´jµšpêX[[«ÕjR©T«Õ®¬¬øý~òô½^/ Ñt:Ýn§wŒÅbøÉÅb1’½Džc"‘H$ƒƒƒN§ÓjµbƒV«uaa¡^¯órBDîvll,‘HÐJ¸0‰d2铟 ®Ûã$µZí83‡ü,œL†‘†$ê†>v`årYšoÅ9íÛ·O¡Pœ{î¹í¹¯mg€õööŠÐ¹Š8€Z­ÆsrN§Ì¡™L¦ç´¾¾Î› jµZ³\‚T*jq–'!H­VÛBIè¼=H¿bC³X,",º"‰Dx¨ÒR©„¹xaaH¦Z­†éÌb±Û^*•Ž;–J¥Ôj5Ù …†††8Žëïïo¨× Ë²ìØØñ4N§“PåÖjµ………ÉÉIB™šËå”J%ˆqWVV4 é½ìîîF¬2b·ÛÍcÐf›BR:ÊT«Õ;vì8I/ˆÛínØ“)ô­´l6Ëãs.€6çœÊåòW\±¾¾¾oß¾·ÜT.—&Úön‹‹‹â‹P™L¡¿ -oJ‹–Nd *Šz½."±ºÙÞbN›P&“ ·˜~\^^Îçó£££­Ÿ= Ò=èÌH&ž‘cæ\è‚ò^Ulê‹---U*IÛÞêF$J›Ù¶mÛ&''é91ž·öÖ.cffFÜGV*•Í2{mß¾]d^€0¹0‹ØÐâ.mêÐŒÞÙÙ ç¡V«&É1- /Û†ƒ`w‡Ãa6›iÝUraôË–e ýeŽãð5©Tj4yo´D"ÊÝöõõaîBã»ßïÇ19ŽãåߌFãÙgŸít:ý~?M˜¤ÑhHa 7š¶´òo X^^¦s\ä' §x|Î㲃²9‚ÛíN$â ,Â!¢àìt:õzýñ¼b-®íø‹§M}{pppmmíÖ[o%Ÿ\qÅ·ß~ûOúÓßýîwƒá÷¿ÿ½ÑhüÍo~sà 7|æ3Ÿaæßÿýßßö¶·ŽŽ"0Ôjµçwj½½½çwÞÖÿ M¡PœwÞyë‘)¦P(hµÚ?üáŸúÔ§py{öìÙ½{÷îÝ»ÿéŸþéÆo„¾ûî»±ðùÕ¯~õë_ÿÚn·?úè£íIü­nh®Ý‚ó8zô¨Õjõz½û÷ïçmòz½"$I'öâ· í»¡„k>Ÿçá@‘Á›=þCWW×ÚÚ¹?¹\N¼ ½!Q¬B¡èèèXZZBʈ€™x{)•J4¿LLLèõzƒÁàt:³Ùl$«»»{aaà£GòêUp¼SÏÍÍA;J­V£½«« ›€sÊår‰D©T&“É……á: Q=Ïh€˲f³Y©T U8Žƒÿ£³y…B7Eä †Q©T¥RIøckX‹9 B¡h¥ýAD"Y,¼;Ý”p§¦¦E9ƒé‹ð,ÛJ¸'Ü „{íµ×Ò“—Z­®V«Åb±§§‡Hb‹O?W*•^zé¥ëëë³³³ÈÕ´x=R©¨Òãÿi^¯×ï÷ŸžIiN—ÏçÕét$±‰DE‹>´Bý\ž¡T#üÎ%“Éd2ÙùçŸo2™Ž9‹ól6Çq‡czzšç3L&S*•Òjµ¼‡ÕÓÓ³²²ÒÕÕÅ£1™L½½½‹‹‹ëëë}}}³³³"É›2Žãl6›¸ƒ¡Ý?­ƒ,¾X‡°²Óé$Àíã7›Í–ËåDð¦°Àm%ܶýe™ÕjERbqq±V« ;VN¼$ÇqårY¯×o*GM¸m4ͦz»9Žã• Ñvüwc³?¡#t‰„þ™áp8›ÍZ,–VdŠ@Ûa±XÖÞÕj5Š(à#~çÒh4z½^¥R ¹\ÎKFFN—Éd„Z­–eYá3Z\\¬T*´gÒét\pÑhìëë3™Lù|~çÎãããÇ™û‚•J¥H$ÒJÃ0ËËË-²QaåP(Dž×ñ[$ iç“›Ök[ÛNëììDÙ|yyY§ÓÕjµl6k³ÙÀ ÐÊ«"í&“ÉB¡ÐŒVµ™•Ëe€x6[Þ¬$릎|bh6›3™ FµZEý_«ÕJ¥R„Pèp»Ýââ¿è,Ðét$´Å.áæóy£Ñh6›#‘ˆÑhD¿»ð Á`P"‘ô÷÷#oAž&Xõh_U.—تŒÌaCà6ñL;vìØ¾}»V« ¹\®«««V«•J%Pâ #E‚ oyúP oY­VÜy–eív{(Òh4r¹¼!8‡v!âCËår…B¡£o¡SôtwN333-¶o!‹ÅbÍ0›m;V,ÇÆÆôzý+¯¼²¼¼œH$r¹RFÈoˆ¬.m6›pâ¨×ëKKKèßšmVðª†'ãælª™P$GÔÙÙ™N§£Ñh©Tú‰J¥B29(ù GªÑhÔju3F> mØår9»ÝŽîj(µ#~BÒž: ˲tk8.ü~¿J¥²X,Í4·xj¼ôÅ7sá•JE¯×÷ôôàç,,,Ôj5ƒÁÀñS©T\.W,CUlFàC"×P,»»»…<¼ÝÝÝ@?O¿!üY§ÓqÇK¥‘Ì( ø±­@ÊDD QÜñ)¶ÓÔ9uuu§²ýi›bjëeœlëîîA™:•JÕ“²D"V«Õ†sw½^_]]=!Óú‰2̹¼~bZ$÷x¬¿¿ó{³/T*2ÿ6ô»Â–b‡Ã±mÛ¶D"!Œ>–——­V+ôœX–-—Ë^¯É4…Ba³ÙÒét6›…‹*•J³³³˜Ž±ý°ü~?wù|tÂù]­V7/—ËWVV …B±XL¥R¤A \.“0H¯×#ébOOí€_TÅບÝ[¤òHl‡ÈÒÃÇ_÷jQÛ÷/Ô9Ÿ·Ûíår™L‚@ T*!£ÓA}}}Ȧ‚ˆŽh‘V›ƒ°sŠàs‰›ìííüˆã8´í5Cäв÷;vìðù|˜î …HµZ-*=SSS¸ÛÙl¼JØ+›Í ÍÍÍ¡-Â9)‘Hl6›°q#ªŒÍîm__ßÄÄDçܩëÍ5ljD¶ì/OGç4::zF*Ⴒ­„{²ã8pØ@ü|N‹Õ߯K—J¥ãW¸iç/ÔÅ€ŒŒLMMaœˆ»‡†ÓñÃË+6s®‰Äl6+ rµŽ¾¹$a ñ+X–}õÕWU*•ËåJ¥Rr¹œÎìÉúP^¯×ç󎎾þúë¥R©»»›¦º( ؤR©FFF‚Á !è“H$< @æ^Q(“““õz]©Tvvv¶2/ðŒeY©TÚpYÝŒˆƒ†:¡/Q¡PlÖE) ô„Ž?¶oß>11‘Éd8“É$^™šš"L&“¯¼ò ïç`ÓÚÚÚx›&&&x·¢Z­âw ý°t:ÓéL&“‹‹‹$¶7Jb4ÖxA£Ñ¨V«Il×llôõõétº#GŽ9r 4a J¸8 ÏoÉår2+mâáááéééÍN)´ó6™LJ¥2 "ЛÉçó-Ž@ìZ³û ¬·šÆÏí¹¬mg˜=óÌ3O=õÔK/½Äæ4Ô'U*•„H´ÏÄ´@ív»"üyŽD­V“_Ì\ø»P(´î™Ôj5i¾¢©äZl‚pår¹.yCLV$‡ÓÐùI¥R^³ººÚJÝþxº‡ …Ãá ?éêêjØ¥ær¹8ŽÃ­V«ù|>þøãÈ–tvvB?÷µ×^ÃâE&“½ï}ïc&¼öÚkøþÅ_l±XÚÎà4LŸ:tèСCZ­vCþ£Ñ˜N§yiqq-Ô %p‰Ä†P_™Lf6›S©”B¡@F«E×È3‹Å²ººŠé‰æ#0µZ-nvMJ¥jµ/!b0Ä;z.;vì„‹Uy+w£¡Ùb•JE*…:®™žÏéò&;!Ã0Z­6 –Ëe·Û ¥¨†B©`4{{{3™Ìââbë©Ö5mEÔ“kµ½dÙpÒk Í¶ŒÒ×bÒÍîˆäùÚÚšN§ÛÂÙ¥ÝÛÎönËd ŠZ~¨ËÂ[n4´xàÚk¯Ý·o_oo/Í$nï}ï{Ÿ}öÙÏ~ö³â_‹ÅbPÁÚÚ€±Ç{ì _ø‚B¡˜žž¾ÿþûûúúhV±‡~ø _ø‚ÉdÚ¿ÿ#<244¾üå/¯¬¬¤R©o}ë[n·Ûl6ßu×]¿ýío†ùñ¼ºººk×®Ö!+++€bÄ@Ø-c­Ô¶ã7Žã&&&üq£Ñ˜ËåD0"d¦#h€ã8J©2™¬Y3·N§“J¥˜£%IGGï,&“©P(ˆ{…jµšN§7¼Â -N7<Ñúú:àAôV­V+“É4MµZmvyÍHü MT*ϳ, A#ò ”l6›È’\*•šÍfÜv…BÁ›år¹V«%»›L¦b±(>9à€‰Ï{!wG?,N‡'Í'r͆ÞÜŽŽ0ìµN|P(„9Rþ¼££Cœ¸A&“ÆÉèç¨Óé€óÛÚÃß‚ö|&“I$f³¹¡ »Åbá1q_zé¥FWÿr,SÌgS‘ÀVÒzßúÖ·n»í¶Ë/¿ü`æÙgŸ½ýöÛçææî»ï¾;ï¼ß™žž¾ýöÛ_xá…½{÷Þ~ûítÿÉÔÔÔíoXÃåÌI²ÿú¯ÿŠF£_ÿú×o¹å–………ŸýìgôÖ{ï½·^¯ß}÷Ý×\sÍ¡C‡üñÇüСC×\sÍÝwß]¯×ï½÷ÞùùùŸÿüç—\rÉÝwß=>>~ß}÷µ(TÓ¶SlàýìîA3öaT§Aû‹½ I§Ó »ÑÐOÌKm 3]-2Êœl …B<Îb‹Å222²}ûö Ê ™Žóù¼pð.mCCC»víêîîYøâ¶Vr†aÒ’Ð $ß ‡ÃÄ{q‰¿fO–äµìv;kt¦K"‘Äãqz®G(K$¨ÈOOO“ËåR(ôeá$îfìv{³¤T*½^oC*“­a¨ …‚xƒ¸^¯G’°Y&놭Ã@ Ðp8m˜uÜtZï›ßüf&“¹ñÆ8ðÿð?ûÙϾûÝïðÀ‡úÞ÷¾×æünÛ ´z½‡år9‘5"pEáê’a˜žžžL&S.—7DU«U%çjQ6ûd˜ÃáX[[ï\ ·ÖëuF …Dvéìì\]]ÝrÃ^Ã+:+šQ1ÕjÍ{ôÝiË4W4®V«À™òÂ5 ÞÓîÕÐJ¥R©T* ‰Än·#(‘H"Ó—!õ ær¹¢Ñh¹\–Éd:Ž$ív{:&©Z­ær9aà^©T¶¶ÞÓ½aÿN³7¨uï(ü°û½×fOóä“O’3­¬¬¼úê«øû’K.ùØÇ>¦P(öîÝÇ_|ñÅþþþ}ìc<’üX,öâ‹/ `ÓsÏ=wZaÛvlÊår4E¦›.b#¢×CKKK-Ò1‹EÞ|700 žf¤s¶n·»u½>¡Hî¶mÛxòD\UÄèé,˜*Ô­6,u H¼áÄ{dV«•T\ÈH[^^. R©t~~¤|>}£Ñ8>>žËåÖo˜ÿ+¬V«yn[xÀV¬Å1Óì]ˆD"ÂÞðéŸçôéOúèÑ£¯¼ò r¬øÃ®¿þzq5³†/áûßÿþÛo¿ÜVͲƧƫެÀhÛNó´oú ‹t–e¹!Ÿx<žx<ÞŒ6}1"V¡PÐh4ƒƒƒ‡"‰fDÝ+‹©Tª••œtvv–¼f³ÙãñanP˜˜èë뛜œt8jµšÆ— €ó6ËM%“Ɇb¯t>§··×h4NLLÔjµ@’ H³a/>Ã0ýýý¡Pˆöñ §#;ò¸00•óNÉdT*•ÓéÄšuxxxnnŽÌ¶à¬Czjûöíõz]ØO¸´´Dnl>ŸÏd2]]]ËË˸íóóó¸xú¼W¸Nø¼ÎÎN–e———…R¼øšp±NGôñs¹Üòò²pÇz½>88833ƒ›FvaY?Á`0­ÄŽÍ–5ôeø|>Þ×ÈpêííÝJœ, CC_ÈûEÍ—Çú‘|Wuýõ×ßtÓMHËÜÿý÷ßÿ®]»~ýë_3 sß}÷íÙ³_ûÅ/~ÑÊ@iÛibPÂ…t©L&S«ÕÍòF£Q"‘€FSÜ9Õj5„ëëëx?ÁkŽ ‘.k_.— ƒô¯Õj•Je3R…BAoÒjµ"ÓJ©TjØÐÁÛ‹ž:t¨‰¥^¯·Z­ðOô]jx ù|? [5N§ÃÅÄb±ÞÞÞõõõJ¥‚µa€Å.hžj]OüVˆX©Tâ g4k&ƒÇãAä·¶¶FÊfn·;N¯­­õôôðI¹\®³³3“É€C‹ã8²ø€E©T‚´.í#IpLÊjµæóys€× ,iˆKZ‘H–J¥r¹¼•&·Û6,/ÊDï–ÒéÜh4*þX;;;›‘Lž%Üd2ùÇ?þÑëõŽþóŸ衇^|ñÅeäÛJ¸mÛ²5TÂ%6>>~ôèQà™–——Å‘¶ÍŒÉ5©TŠæëÃà'ÿ’¿N'xÒÀ|Úðʸ9uoo/ ˜T*/‘¢V«{zz„Ü€ô^LË€JÞ^ÄY¸„Kï¥P(X–ÝðÞ ¸@¥Ri6›yΕ¾-^Þ¦ŒH$om÷žžžfÜqäâU*•Á`à­X–õz½ÑhTØÍžÃr¹\,!\ÛìàõzžÒãñ,..Š÷Ú©Õj½^ßJéhSµ'ÜN…îúúúÏþó[o½õ?ÿó?;¶{÷î6wÛN½)•JZœt årÙB*Cæä^´Z­H”ÞK£ÑÐé,_Ý”Ífgff¦¦¦šÍ×*•Š$ñ@A‡qýÐÓ1ïâåË¢ÕjÕjµÑhD†ƒ7‰+ :[(“ÉàS…ÉŸ†×I’ð®¾øäòZŨÕj¿ß1{aØÇk°¢ù>|>ŸT*E²‘ˆänÖ,Ëñh׊Ç+¸¤|>— ÓéÈÅ×jµ•••ÎÎNÞ.,ËÆÎÎNŒfêÉÉd’Äp~¿Cqç\.×bSÃñמp;)%“®®®o|ã=öX±X¼âŠ+>ô¡ñ*]m£muuU\³m­˜ÇãáMR4¨“aÞôÇ[·ºÝîz½n·Ûs¹\Ã÷S¡Pèt:´X,–l6+þÔxËOñµ-©»Ýîp8ŒËÖëõàŠfYÖårÑJ€a·Ûãñx¥RÔ‚F£1ÉdÒf³…B!a~&‘HX­V1¤ªÅb©V« ETaÖàÝpüAÊx¨Ñvtt4¼W¨1H¥R–eU*•J¥‚Å^¼î/ÞÓ$§ã}ŽçØŠ¨-¼Ô¢Ñ"¹,˺ÝnÞEb` áÅ7ôÍÇ­­­Y,BÛ±¸¸h0²Ù¬ðwE"“É$¬Pvvvž(°ÝiÅI}²êù}}}7ÜpÖwŸ™™iQ{æ-dÍ”p£Ñh.—k_h[+&—Ëéê:Ñ´m=k—ËåR©”N§#äÙÂ÷–¤€Ê¿ §o:¬i}Ò'¶€Ff2™d2Ù,÷À«V«Õd2™Íf V*•º\.úm¢•årçÒh4•JEÜ9ŸK&t½^/“ÉhêR!#›€H á‚[x…Äè‡âñxü~,Jë¶.äÚ FŠg´Hn$1›Íd¤¡èN lJ¥RJ¥’´PBî¶\.¯¬¬T«UÙOiÐív«T*àÏŠÅ"QÂ=ïo8™Îéøc¯¿(%\«ÕÚ×××ö1Ç“Á£o, ìv»Ãá(•JKKKâyL²kkkz½^¥R ›Êå2ñ1<ïEdR1•$“É\.GÏÚ­ûHz/ºäÐŒ~†çNHŠÌ¼µZW¹I§Ógee…v™"Gô¹ÈMÖjµ&“);Žl6Ë»!`R —Á»øŽŽŽr¹Ì»rP0ðâÂfF¦f¡Û¬ÝÛÛËqzCš=ý†Ïqmm­¯¯ommÍív“šÐÐa–J%ƒÁ0<< S©änkµ~#–;X þÿì}gŒ,ÙUwUuuuÎq¦ÃÌôÄ73ïíÛàØ ,¶°0Èk˜/Y# 2 ŒmY!„@Æq’e°HxYY^ïú­÷íKÞÄž™Ó9çîªÿ‡óßËõ­ÐÕ=ó¼óÞöùð4¯««úÖ­[çÜ~ç—L&Î(155Õív}>MÓù|¾R©¸Ýn£Ñˆß&^‘xž—ÿP‡DÃ?Ê÷×l6‹û']8ã4;; ì)$öH¡áæDÎK(Šzó›ß\­VS©Ô£>êóù^|ñÅ`0h4ïܹ3T7Q«$p&ÞB{lC ÇKø7^’+‚¸° ÚîáŸêŒa˜ÙÙÙt:óçâ×Êøv»](ÄKZ¹àÂï÷ÏÌ̼ð ’ØUœ?WNÐ ã;Dw«ùa.!&“ÉãñÄãñ@ Ðn·K¥R*•¢(jyyykkKýÓt6ਆ[Îçóý~·a?Äq\ ðûý7oÞœ™™¹uëÖÜÜœ¸Nòƽ^/ÏÍÍA a0ìõz‡caaáòåËõz=ÆfÃl6;ÎÓÓÓ³¸>±Xìøøx¼¨ŽUZ­–xÍ\8ãyÔsoI>‘×ð<íÚ5‹ÅrõêU—Ë5???55uíÚµï}ï{ĺšššjµZľ^!Öwn·Š@;U«ÂY‹Åår ”¢¨N§#×4v¾jš8%j.— gÂ…øÕþþ¾Åbê‰p8\­Vý~?Ü],ÛÞÞû»_hxn·[§Ó¥Óéµµ5IcÛÜÜlµZ‘Hµ×Ãñç¢ ”C¿â¢ÕjÝ-(;‚Ñnyyùàà`}}½Ñh€aÈd2pÍv»MQÔCË=}³ÙLp«ƒù7HjDà'Š¢b±X0|üñÇ·¶¶nÞ¼ ~ q_Íf©õz¢(¿ß¿°°Àó¼ÛíÎf³‚ uŒpzz'É…MB>¨GÚ@ ~¿óæÍQÏ•«W¹kOûC:‘ÐsŠÅb©TÊjµF"«ÕÊqœÏç[__ñÅ©”ˆBEƒN§¹xFDr#ßl6†Á[¢([&Ìo?Åî°¸ †p8¼½½  WÉd¾ã­š(«2 ƒcËår­Vc= ÄAÁºø‡VVVvvvúý~¥R£ELµ$!û IDATô(:999::w1@{ b¡g6ÑÙñ`„B¡r¹Œü-ñû»½½‰DÜn7^܌ܣ¼P($¦å–“J¥BX&­VK<‘ããã¡·oßþïÿþï7nhDµør–‰@ ˆWÚîîn8&(HÐY4M †z½¸{{{¸I®×ë© ‡Ã?þx8~衇€“%ëõú¹¹¹+W®¬¯¯G£Ñ~¿[³Ùìr¹Ün·Ïç¿V«ÕOßçó‰ ýív;:E,ðôåâÌ*[áèõz¼°KLÇ<ÒršxNÑd2™^xaqqÚí¼õ­oýþ÷¿/›Þô¦çž{.r‡BäO<ñ„F£yæ™gü~?ô¹qãF<üñÇq¥öÚ MÓ6› v©R†-¡ ÝnWMÇ,<(¤ÀOªy–”H$Äi|½^FÕïF T/ðÞÞÞìììúúz§ÓI¥RÀK‹”@kG%<ÕétN§ïñx8Ž“\! m¸­Vk³ÙT³®Úí6‘d«ÕŠÂ#NŒÓë]òùü§?ýék×®½ç=ïyî¹ç¾ÿýï?û쳿ó;¿S¯×õWõoÿöo{ì1«ÕÚívWVV¾öµ¯íììüʯüʯýÚ¯=ñÄ`œ¾üå/?ýôÓÏ=÷ÜÅ1NÐÜívß¼yAnÍfóØd bq:Õjµßïw»]¹^Úý~_™ä 7KÍfÓd2-‹ðm¥R¹zõêâââññq&“ÁÁX@•d0äT.‡£^¯ƒFît:âØæáááôôôúúz¿ß‡„¿\½^? À8y½Þl6Ûét2™ ´ç±Ùlív7óz½žã¸J¥"6Wc 4p†¤Z­6 hšk¡×ë匄(ò¥`œä’ø6Èh4⚌½Ûí†N»€~ð¤Ž3 -ŽL&ô‚è}577W­VŽŽ wrr‚º^»V«Åãq¿ßo±XŠÅ"Œ’íP %ID›'˜ŠqÜú‰v~K*•zúé§}ôÑŸüÉŸÄãѵZík_ûÚŸþéŸú|¾ÿùŸÿyï{ß \õŸþô§-ˇ>ô¡»wï~ó›ß|î¹ç^~ùå|à gÝh4 ­K±XŒÇãNçàà@2ஆºT,âh$TÄ6RýÕr`Z­v0lllœœœ´Z-¢*[­–]~©¡EÓÓÓ½^ |+•ŠÓé„È…¤1!ˆ$~qÚâ?-7›Í&\2›ÍôxŸµ2sèd¢ÄŸ~6›…¨c2™äyž´¯Êþþ~&“¹yó&˲>ŸÏd2 †x<~ëÖ­ÝÝÝ;wî ˆ~Qš­—*9|’}=ǨÑi\ä¶nã4µò†7¼amm Wý×ý‘|ämo{›F£ù§ú§ßøß€ šÉdzòÉ'Ÿ}öÙ_|ñÎ;ïyÏ{¨Ì^C^ÎÚ(ÀF›Ð° Ô¥ @²755…'– …B0Äݼ¬Yì)»•¥R k.—“ì&œÍfC¡Ðööö3Ï<óÜsÏíïïã>A«ÕbYV%Ž»X, ©Áƒ~ñÅwvvòù|·Ûõz½Ç)¨r±Ã,½§v» .‹¯Åb‘ÔƒÐCîa9NÜõz=Pˆèék4šP(DÄ'].—7¹Üs$º=õû}bC+ ͆8 }raB<ýÝÝÝÁ`œèÛÛÛ›››Ï=÷\¹\ŽÇãÙl6 ¶Z-”]#Çø¡1DŽî¸Fº”ÃáPŸSœ„õ&2šp÷Îw¾ý÷ÑGýéŸþé'Ÿ|þ;77÷‡ø‡_üâY–ýð‡?üÈ#\Ì» ”©V«™™!ñ‰åååoûÛÿøÿŸ¿ýíoÿÔ§>¥Óé.ã"Ïó@*·=Ä«õ‰®Ó VSÍ«xôzýââ¢V«õz½~¿ß>«¡ÉÁeww—@žžžž*8=³³³Dô åð ’‡úý>€Qà¿ûûû‹‹‹…BAÒ¾Bøòòòò;ÞñŽb±(WÅßf©T‚¦(J«Õ.--]½zêäÖjµˆÒƒååeƒAeµ ? ÞE&$ º\®X,A3{ ‰WµZU¨[OxÀÅbñ•W^ó ðýx<‡išðIGGGàÛAò2•JE"¨ÇƒÏñ³$#Ã[[[ù|¾X,ÎÎΎשý\¶†çv©‰v~Ë`0X[[ûÁ~ð»¿û»(Õ|ýúu€ƒh4–eÿàþ`kkëää‘Cv»ÝF£ñÑ~ô—~é—.ÚMIêPÄò‰ÐA)_myyªÚ"‘H6›^5Ã@éeDƒ«‘ê~‚ÏHÃY~¿_²›W$‘ƒ7E£QÉCSSSž"æ­­-Iæož², ÎÐC=$é9étº+W®¼ño„[CHϹ¹9§Ó¹½½×:NŸÏ'öh‰1H2á¢ìŽ2>éTªP(ìííÕjµååeþ‚Îx§×ëÿþïÿùF ’ËånݺõÔSO]@·IN Üø\¹ï°,+wTîMÓ’õÊ<Ïü42TW[­VL«æ‡QŠù|¾×ëIj Š³§`q%‰A SŽÂQж6› zýß½{´ €ŠÐ—K¥’\;p—ËEÓ´Ûí«TåÁãb4qGPŽ\N"‡Qž‹@Xš£ÉqàÎÚÙÙév»â¦´{{{ÈiƒB•r¹Œâ½årö7•JehÓñD"1¶çÀaä ùýþñêÈ¡m˜òw”i'ÕzѬ¯¯ñ‹_é”h4:ê)¯¡¸Ýn–e†©V«Z­Ö`0T*PvȽ€ú7I=´+”<=ŠT–ðF¨$–Tâår™ØÔÕ ÃX­Öb±íï@}4 ¹H”Éd*—Ëêë¦p|.LN£Ñ ×®]ƒ:‹E§Ó•Ëe¢ùúÑÑQ"‘ j‘é;'® 4‚UN†"Š=-„¹æ8eé2!Z­ÖívÃlƒ«‡ÊR$o ßšØív0Ì(êèñxòù¼ä´Ã!ØÐ‹EX„:®ÙlâÎq­VƒÐÊhÆãñééiŠ¢Tºa9á+Íl6 ‚0´j·šÕjâ„c¼tj »Ê.ìÄsšÈƒ/n·ûêÕ«~¿ÿÒ¥K^¯…•ð¸ÖØèEõH[Fszz*WW ±¯¡}ÿˆqâì’;h­V‡U¢Ð$±±ù|¾T*AXO«Õv»]BõÄãqœˆOr$âÓéô=bÁo!mµZ­ † ØrƒW^’3¦¦P#£ñ§Oð†ð<ŸJ¥Ô¯Ò³ qïÝ¥F’‰çt!„ rȨBÓ´8–b6›„Zz?üðÃÍfóæÍ›€!¶r¡ .=»u»Ýív[2ûn冈$w$èI³ÙVÖ¡›YÉ]¹Ãáày‰FÔÌ!×B1á'©¤Åƒ dªÏf³y<Ô‚zÂÆãqbœ¡P±=á‚jüÐä¨\艈»ró á8@ŒÁ!¹çˆ?}ü,âé«YiâQ©\3KKKwïÞEnß 'ä#6›Mõ²‰qºˆ233ƒÈÊ&2¶J‘Ð;ý~ßëõÚívƒÁ ÕjS©”RD[,Ï…¸Úd2)`˜”Íç%ŸÏ3 3R‹&†aÂáp¡Pp:ˆ`iìá!ÖùQ£s ‹Åf³)°Óær9duAÔàÂÔ!Am÷Hg©‡îìÉжˆ•å¬~*•"TÀïÆ^0g¤+ćqÆö‰ãôÚ $™Ï«æD@?¡Á`àp8r¹\"‘¸víšœycÿ{ç8¶ ‹ÅÞ6à'UÞ¾(óçâ|Χ»pq¿ß‡–*ã–:Úà¯ÓÓSÈN ƒñ²ôÍfúSÀÐíàüîpH²ói½^¿téÏó@F5†Øív“É”Íf‘MQÔâââÐ Ê=8Ö]‡Ãœd¹\NA3¤Óiq”ØårASs…!-//oooK!åÕË›NŒÓ…hÕ|.»•׳Û$ †…òÜÝÝÝýý}1ÓNE:*–V™YZZÚÚÚ]vrrÙAmƒªñCrxx¸¼¼ D¨r´°Z­V§Ó¹\.Žã¨vuuuccCyiÕëuqìá=OOOÅ»~£Ñ ÷öö@¯×C¤^¯G8¦Ð{wÔ©#懠IÝßßÇÿ‹Oqˆœ˜F­V{éÒ%e¾ÁJ¥øª“«?bñƒÃïkaaáèè…¦)ŠÊf³Csr’ej\åZM•w4TæææNOOUFöÜn7Ñk’Ïç3™ŒÇãY]]¨•Ï‚ Šz)±0¾°¹¹‰¯—ËU(êõz(R í²ÙlC{K#™L–Ëå¡#DW€¤ìÐßx:K¢4’°,ë÷û%ŒÖDyMäÁ‹Å‚ë,1îÑÑ‘Åb (q®Ãá—?d4•Ûç žç777 À›’ß4™L ªÓb± áC9 ˆ¡ñšF„~-—ËDRà©Só[h7¨då ¢x||›ÍæT*5FÐ"‰(¯hÃó`0ªÕ*ÔPàHÛ¡zhж’ÕN§Sî R¯×“É$Z*Ÿ~½^?KûsBFʉqšÈëEòùüP„ìÑÑQ¿ßƒö“É$Üà‡ôz=¡¦Ë`ìær9I%n2™À:ÊÈqœ¤ÂÁù ›Í&^f0(ŠqɳÄ ‰£f³Yò®F½^¿Ááp…-¼J×Êh4Î+MÓÁ`0¢Ž fÆ`0HN”d‹“É4ÔQVè‹öÇÇÇ€Ñét ž1Ô쉗~–Çã‘´@‰Dˆ€Å~L"‘vºÉ@î”ÜJ;»‹pbœ&ò ‹$Öò¥T*!ºCMÊ9ŽSî¥mµZå(ï´Z­B1X5IuŒæàà@LRŒ »r0dš¦‰³Ä¿¥Ì¨+ 2%Äï÷ãY+Dw+y5â" 쬬<ôÐCèx½^–e 3”Ø›†äÆehQ\P¯×ãÏ1“É Uýý~ª 8-±ùÀÍ?>iøY óœL&Å™0œÓ nc¿JÊ+í¼^XƒÁ îÍ81Ny¥Õjq'ÈÆe .TN§$PmÝnW®ì`0èt: L¸½^Ïn·KnÕëõºÁ`À‰én¡‹(qb¥RAa±h4*§yžÇÛ#ágAsnü· gÞsºV«ÉÝu³Ù_°X,ÊEÛQb€ènÅJÜh4ŠË^¯×ívÝn7¨øv»Íó ÆÃ>ÿ(«M<§‰ —ííí~ðƒN§óÏÿüÏ].×?øA)raeuuuyyY ä‡v*¼žEäˆAG0TT^­¯¯CQÌ)]_yž—#ämµZ‹‹‹ cÒ&IŸO<¸ÖcYö,…!êKòúý~»ÝF4¾ÉdJÞ«Õj2™jÁP($éñ4 É.ƒÁ@<‹ôû}9·8—+•ÊááááááöööÁÁúÂñv»wcâ8nnnþžššº|ù²šdÇq³³³?ú7tzzÚjµÎÏÏ+©NŒÓDde~~þ»ßýî_üÅ_LOO›L&ÉÖdP€OÒÆàI]<<ü·û7ØÈ?ûì³÷Ed©WÐìV«ÕívC›%Y\\üä'? ßuäÀ988p¹\™Ly*Iíôz½Ç㬌˜®MòÕ c´rÑét>Ÿ¯V«c´r¬1øO=OµZÚUlü~?EQét:Ȩ‹Ç“N§ÓéôÔÔ”\Ñày)2ô·$µ.þ­V«\ì«Ùl>´-·ñÁÃÓŸ™™[Øétòù<¡ÁψV«EvKòaIº>’ßÔétN§_®>Ÿ¯P(ôû}8T­VÖƒÕj¡V«¡³Qi4‡£Óéˆ]jõµæçΊ‹¡‚=ñœ&ò  °‰+„ð¹ív[ w‘Ïçk6›ðæK†­"‘ˆ¤£†ôTB£Ú„R©¤@×”Ïç%³ÇâÄB¿¶Ûmõ.tšAðûòx<à©D£Q1äÉÙ)|Äš ß"”Ëes c±¸;`N”/ÞívñÝ€d´^¯£ÈX«Õ’ ±¶Z-*ÀÃáðP7]¸ ä/‹%‹kÕn·a pHašW1ݱX ÈYÄ?zBõ›¼1D Áž§‰ŸÇëÍ $¯Õjê§(jiiIyÇ]¯×å´¶Ãá0™L¸U ÃxÃÞ Ž½êÇ IDATV¯ €hš¾|ù²P¹¼¼ȯêt:‡cff&™L‚¯1m£Ñ‰™^ÜeffF²éêôôt£ÑPYÅ 0É@ßEv»-Ùcbœ.„b½}û¶ôa"*…€Ó×ëuPâE…B!Tø¤`E‰§ ~aÔs¡Â–pffF”S«Õp’²ôûý~¿¿»»ët:õz}:‡Ã¹\Rúh¸ùUî CúðöíÛ ¿Õívϱc– Ä„Ý[àBTc.,,ìîîØmñ/‚aY–çyØ…èõz¹Øšx‰ú=ܬŽtï‡ÖÌkþžtÌ0’Vsbœ^{év»ËËËbÐûDÎEœNg©TªÕj&“ j%Ð!½^Ïó<¤m5©|)h”Ž…Ñh„6ØUcYÞ7´þ\–e­Vk·ÛÅݳÙ,ÙkGYÐY(H(×{æ,”3§iZ¯×ÃÆŸã8–e¡O.Iv»Ýõz]ÎðFÔÁÄjµ2 £2ÊDQ”Ùlî÷û#ù¸àXîxaHNûP/GA Ù9dì"‘AÊþ#±Óç.‡£ßï#3¯0ãôÚ MÓ÷ˆÈëu%rqQÔëÁårµÛm«ÕŠ^ (ºS.·Ûí¨W´Õj5›Í¯ŠF£‡‡‡žY0?¸q6‡‡z(™LâÍ`®_¿>ê z<ž1LÚHb·Û¡Í9ìpív;X«Õj³ÙNNNðÙQÞŒÛíöB¡€§‘ð¤Eù|¾z½>¶q2›Ír ÅÑ!XrÎß¹L;žJ”ÔÅ6›­^¯ß O÷Œ›†aÆH4*±/Q°ÓãôÚ‹N§c梭ËûK ±¤Übçøø¾S*•À¨ÕjCF£±Z­¢Öv(tƒƒHðJ-<Èsrr²´´„À4Pöí¨=úµËå*—Ërå³Ö•Ïç#ÊpÝét …‚Íf«T*Ùll¼ÛíɺŒ3/c_p»ÝÅbQeo…òBtH¡ÅãñŒ .v¹\•JeÔ2Çq¨¼…eY£ÑHp)Á^çŒu b'^!øfµZ¡MûØÆÉápÔëõ±aûãt!¤×ë]ÌÏûEvwwm6·jµZ1Ôëõ–J¥^¯‡®FÏâêŒÈ¢½š$LT£Ñ ÔA"‘P¦Ç%t1kQå÷ûÕ«{¼îÀ`0Æ~¿Ïó¼²®L1Ò­D±ß¨©Ž{!âúC»ÝÞï÷qÿF„;==Æo±X(ŠºDG‡£Ûí¢" ɺµ±.X,M&“2 @RÎ2?N§Ó`0ÀCÁgž¹¹9¼_×Ä8MäqœžÙÙÙÁ`pttÔn·Gmh0l6Q­ä.5 âñx2™¿ éJAÔo©¨P(Hbû×qý~r?xfElPK¥Þ‘½ÓéÜ‹=“ÓéTÀ! Uˆâ©ÃÉ#ÐÌ‹ >{½^OM‘=ü´óPi˜Å6µEG¤·ÄàûýþÔÔÔm¶Z-Èö_iÍàgCÏq(ö Œ^¯w||lµZu:«F“ÉäÒÒ`„³Ùl·ÛEn“ºU™NpNyШcjÒëõÚl6@~är9âM›ššRÙ¥­ÛíŠõ&ônÓ§Ngoo/ŸÏב ð¹NÇl6CÕ8„zl6›$ÓÉdZYY‘<Ôëõêõz«Õj’+•ŠzÊ»ñDìJ"bh_QIn³Ù$.Øï÷Å"^­Tx0Œ×z ¯ÙlÊ!¦ XÀKò‚ySƒšòûý¨—¬xúê Åëo|ã!.§Òžñ<ŸH$²Ù,Ì|½^G1sqœ  =üðÃ,Ë*àÛ&Æi"šP5??ŸN§ívûÔÔ¤—àP­V#^¶l6 9Ž£(J¹`r0ˆÕ™XF"D+€ˆk½^/®vÖRYôz=˲{{{„f¬×ë’ºò*›+++çÞ'M¥ÈñW«Uà÷ûN§w¨ˆ§]%=GÇ#G()ÂrÜ–3Ø<ÏÃåpWÝnWM-x¡Po†œN'½ÕHµZÍårGGG Ã(¸Î>ŸY_|L¸¤w˜J¥PëŸÏçr¹{ì±·¿ýí ïÂÄ8MDVîܹ …>ö±Ý_ÃÖjµ@Ý]©TÒét"‘À\z½7B½^¸yxž'(g¢Ñè¨íŸ§§§ëõz(‚Ý=ê{”Ëåð1¨¬BN§Ó™LfzzzssFJ‰ïÁWWWÁÌT«Õ—^zI¹õ*0á...*@2Ï¥|TÌØ;ÔAQh}›Ëå ¡²c§ÕjWWW‰c±˜Á`O{"‘Pö (ŠZ__ÇõþÐ99ÙÛÛ»}û6EQr|ðã4‘!rzzú¹Ï}îgög?ûÙÏÞkœÍ¹ˆq-ÄF`]òðWõµÙlrh’ÂqíÙÛÛƒêƒåêvqHns¸PkµšBé³F£Ú¡P(4ÒOòýï”»×ëÅûÒŠE$÷ääDe~¨äóyØøûý~e&\¬V«zC`öƒ80îZññ‰OàHÒûB8Ž.W؇jµZÔÖh4â;Yžç÷ööX–u8j¢7@\ 7›Mq0 påâfbû§°+/—Ë*w©ù|<Ý¡; q¯t± ¸:–Œ=ž/HSYĵ‘ðˆ%$L’‡Ün7~<¬f³™Ëåp]ït:µZ-MÓ’ÏÏóËièšQh¯Ñh*• Q) Öà‹Vµ,Ááp@‡Ibðñx ƒ º 2ZNGnÉc?A“Ʉϼ¦bbœ&2DÞò–·¼ç=﹌ë\N§Óéôz=R h õQƒØiµZ­×ë¥i½9v»¸%½¨¡Pè¹ EQ UqrÕ££#°@z½žØòÇãqÜ8™Íæ³PÁªÙqƒÑU¶LjÄívq?‹År¯Ž ®ÀýÊ0ŒÉdÂÏzAÕëu¼bûøøZIÖ‘ã)™r¹<´¢_3¨^Üjµ*ÆCØM¼› C¼f`’ÅtÌÄ#FVPLýŒ(’‡z‡UYŠÅ"^ݪ֚§‰€pWVVhšît:F#‘Hx<ž+W®X,ÀóàW£Ñ8NÞYXX@©xü§ÕÈÎÎÇq â³€•¸/é·š¢ö÷÷å&ø‰r´¸¹ ¨½ @îŽ~øáp8ìñx~øa|;¼¶¶v¡Và¡I$»ëõz<χÆ6®80vèlàÓ Ã¿yee…ˆšÍæ»wïv»Ý矾Ûíª_lcƒ¬išÆ"•J©A ÀÒ­Õjb;¤àTMŒÓD41™LýªÑhÂáðÔÔÔÜÜä·‘Ùp»Ýg~~·hµÚf³yëÖ­B¡ ÜÍÍMéµX,>ŸïøøÂJà?ÁÖøôô’;;; Ä¡r]œ†!^N¼baa‚3r‰bø r‘¢@ `6›ggg%+¬ÂáðÐò0|›ŸN§ñ6†a$£»Çõz= ¹(—˸áÓ^(@w%"HUØNiµÚ¡ œ¬VëÚÚÚ¨YõÃP–Û·o+ŒP¯×ÏÌÌH:¥òáá!ÏóÀ1KÔn·… e&¹³ Äo™(ÒY]]ÅC»Šy¨‰»½^O.ð0 ëMäA“………çŸý7ƒÁT*Õn·µZm(‚*5P¸¨TÚb±Ôj5£ÑèóùŠÅ¢Á`Èf³(LÓ´Ýnïõzrœë:Îëõ¶Ûm X–££#0’>ŠÍf%Q¼Y«Õä"rÐ=•J)”Â!lp%r¤ÎÈŸÛï÷%Q“¡PèÖ­[Z­6“ÉÔëu\©…Ãaâ·Û-îsˆÇ$qþ\£Ñh6›Õ´•[\\L$.—K™|½R©Ü¸q]øôä(’ñMÑh”Œ‚ªƒÁÆ›¢¨H$rzzÚëõÄ}::Ž…„X®\¹²¾¾^*•žyæ™J¥¢²;­Édº{÷®¤Q Õj­F‹Å²,'¸yóæ¹¿°8çòÄ8MäAœŽã8­V‹JºA8<<=â,À`Rµ··yopÀŠF£ËË˶ år¹R©ôz=§Ó o2ÇqÀ·_³ÛíÂ`âD<ÚQYvpN)•‚sÚÞ;{ðƒü@2VI|–Æn·3 #®¨&øsL520‹E¯×C‘ü˲:nè\Ùív£Ñµy:Žã¸Z­f6›»Ý®Á`ÀköªÕ*Âr8•JÅf³©4 V«:ƒÃÃÃH$}âÏ2çÇÇÇsss.—kyyùÅ_Ty0HIæÀêõúâââééi«Õ‚Çn³{öõ91NBÒé´šáDä$ŸÏ£^ݤÓé ÎÓjµP¨ ˲¸®9<Q0u÷"œŽ ½$!JÐO]½$¾ ‚²SÖƒˆš½Ùlz½^«ÕäšRKª?ô”¡5Ãáá!ú¤X,^»vM2òY.—#‘ÈÁÁrˆ¢×뉓‘ÀN+~L„„>O¸L7^~R*•¢ÑèÞÞÏóF£Ñápàž7ú“Éd·ÛÕ8å’»Z­6 47FÆhww÷ðð°Z­âE4šWëk´Z­äž…)xbœ.®PÕï÷‰ÇX666€¤¶~åröæDLomm­ßïCéª| »Æññq·Û5©TÊd2íïﯮ®nnn‚¯#†î‚²#R‰±XìääW÷^¯W5Û[5{mɨ‘Ò¶ÛÊågè‚333ÐJÁc€C€µ)Rd:nffÙ!h ðÐC©Xúý~ü‚ý~Wßáp¸T*É¡A›Í&´pÕïñx$Kƒ^¯w:C ƒØQÿt¯×#¢mÐÓ†Ñn·åšêž± Áår5T*Ïx@”+}>ß`0€z¾’Îèøž(Ɖ^»‚hñ&2ž4›Mü}n·Û,ËÎÎΨIš¦Ýí`0À¹Ýà€QHÕ;wîÝâæææ¾ð…çŸþÅ_ÜÝÝõz½Ç]¿~½¨=FøV¸ l;ð}pp vDÎØ”¦éGy„@hî‘dK¡µµ5•äªæèèÙBI°'–ÖëõT*•Édð”^Ó‚ð¿ï|ç;- Ñ™iyy™¡ .//3 #·Ûí#Cœ¶rW§C…>ŸŸŸÇQ_•JY”ùùyè#.¦Ö%D«ÕòtëÖ­ûbüñxÜh4v»ÝÃÃC0¨NG§ÓAû¤­V«ÕjµÛí¸¾Ÿàôô4/Tâñ<¿¿¿_.—‘ÂÊd2°%òêr¬¦@\ {üsèè|/8 êR½^ïr¹$‹Bw”šCãÙQ• “*• JSy<ž¡úšj0J¤³¬Âì)_P¯×£áÁšÁŸ¾Çã(q p»Ý^¯·ßï×j5‚=™aÀ #§ NoµZ¨V~È`0hµZ“É+¡åDQì¥ð& ÅénïѾç,ÄfEI®ÀIXo"ÒR«Õ>ó™Ï,--ýò/ÿ2úðïþîï’Éä'?ùÉ‹?~û@‚ê—`­yµu EQø!Ð2š.çë÷û¨"º¿ŒT³?çv»M&S2™ÄŒC‹=OµZ%îÅf³ñâCç:Vž1•rî<C/(Yhcöù|4M¯®®B‹dù !îD%ž^ðS©ÔôôôÑÑ‘Õjõz½ óZ­‡#—ËÝ붸ŒÝoE,$«U'žÓD¤å÷ÿ÷Ýn÷§>õ©¯|å+ðÉßüÍß †þçþèG?zÁ¿™@@«ÕV*<-Ün·aOšËåêõ:‘1–cV…ÖmÝnWé IEßh4 ƒN§«×ë*Õ.âB…œq-ñ¡dÏìs—|>?PßË CEŽÓv¤ý˜s0B‘H$Úl6d„¦¦¦ÆF4"Äa ¢Ñ(Eèõzõzý’fãQM´ðD$åƒüàOýÔOžž^¿~>yÇ;Þñ ¿ð ÇýçþçE9 &F#èšr¹Üh4€ß`šL&Aúý>Þc™.ÜÆ à'Å“Êa\êõz>Ÿ‡ßÂ=bVàÙl6Èo ‚€ò.­VËn·‘z³ÙLt‘)•JZ­‚œÄ±Z­Ê%R„÷)vìÆƒdýˆ… Ý‹D"CUrœ¶£JµZ™™ýN†«‘‚îʉÍf#È/`l`{Ä®îì …1`R~¿ÿå¥V»ò‹01N‘–G}”ødyyY.s~¡dmm êna+ il4Éd2™LªiBƒz½^O¡²®ÛíJ*‡Ã Ûí6òuÔôŒèõz`3™ ü(, *hš^ZZj6›D¸ieeeuuu0 ðòù¼ú€d¿ßßïm{äÒ¥KÊ_0cøjƒÁß^¤Óé¡úša˜`0¨ü©©)ev®H$ùÅÿýßÿ½sçÎ÷¾÷½\.‡v ÍfS¥;X¯×‡¢Ñ¨Éd …BcÔp‹¥P(Ü#t­ÂjW~&9§‰È¾âXÙ}Ñ vssBa ¦¦¦Úí6”ðݸqnG઱@[®Ñh¼^/MÓÙlkhš_ ÿ°\.I‚N§CÓ4°¼C‡ɨ½ÏçAœÞp¹\Ç%“ÉÃÃCÃ`0€Â'"ÖíȰúU!®HQ”$ä%Cß ñ’7° IDAT)áp¸R©€ 9 ²¼¼¬Ðœ{mmíöíÛÀZ{Æ%!¶LG§Ó¥ÓéX,–H$`X+Ðõ’³$W° ¬Ê<ÏŸœœ‚pûöí7½éMÿõ_ÿ56~Èf³ ”‚’œØããcAîÞ½«Òà÷Ó‹/ò{ô>J††šxN‘•÷½ï}ÇÇÇ&“ …>þñûÛßî÷ûr´Ê'¬‡¨Z†Éd2…B¡ßïoll@|Œ¢(…п˜ð”çyÇÉf³Z­vuu\Š¢pü#’ùùyT¿$ÖP€št8+++ ×$G’Éd$ï…BÔŒÕëõ‹‹‹è;,ËR…:hòÕ7ˉIîññ1]‰¥Ói´Á F¶¶¶Ô¨ÎF£A0(ÎVœ”àq88´¼Ëå’ëÂŒ%@²ÐçN§<*žçY–áù矖dŠ¢ ðžˆÊá‹E¼8b~~^ @Uaéöú l5lÂ#Éxkbœ&BÊC=ô–·¼å_ÿõ_?ÿùÏÿú¯ÿúSO=‰DÞò–·|ùË_~æ™gVVVþã?þã"ŸçyZ„>of¿Ýn‡Ãa³Ù ÝNåNJ…ë§R©ˆwñ<¼Âe‘ƒì€£³½½],oß¾-®*Oƒ–ñz½bý’Éd”[%Åãq¹*/ŸÏ'©°Ün7Ò›ã!1=Æ0 ²‹F£QÁ[ššš¢iZ9¼¦,@*˜N§¡rÝl6ãé–|>/×õI À÷7x¼×ï÷CŠ¢L&ZNg´mooãÙD½^/¹»2›Í‡Cî"Ùlvh£,“É]¸Î—c¼‡5 ëM„”¿üË¿„?¾þõ¯Ãïÿûßÿþ÷k¤Q\ ×úïîîn8>::R(´78‹Õj­V«âä6P6€±q¹\jšœ½E§ÓÁ[Ɖ[7EÌfs&“!‚c€n ŵÛíÕjU!ô¥×ëF#816›­X,B ‹a£Ñˆ?‘ƒƒÍ«øÍñ,“ÛíÆÓiN§S§Ó©iŒ„H–àkæèèºÐÒ4 ÍÅáЫðñû5‚ èõz<‘©‘j>;ª8¨ç„I>/ïaM<§‰<˜Â²,QÑsjjJ«Õ&“ÉQ‹Œ%-“dÉ8ŽU‰<[ )Î|8ªõ`Ê“)þ‡Ã±¼¼<77'Ùx·aÊ{˜¨F£êÓé4ò&åš„ï¥<†RyÕëõðšÃããcå¦Ý£ t@ïõz* ˜*¥R ág¾JJ"‘¸weèz½žhc‹ÑhDX&Æi"¾”J%Ôt@(.Gy‡Ã¡|“…w©T:Ç’'›ÍFT÷êõúP(Ñù»9‚܈á>ÅbQÒƒÁµµ5¢†Ó`0à¹ÓÓÓ³ÔÑÈ!4%ï% 5ÕNGÝ’¤»½=ï Ë$iY¡ƒ‰Â¥òùüá{G¬LÓôÐmŸÜ’ƒ5C„õ&ò ‰V«F£ñxœC¥R)‡ÃÑï÷Qi\§ÓCož…èvT½L¼®@8ôæ7¿¹Z­noo·Ûm¼Kͨ"—YQi_K¥ÒË/¿LQ ç’Eã‰4›MõÕq.—«×ëÁàµZm$ÁŸÏW«ÕνÏB­V#FXiq=á=*Ÿk·Û£®yD­;Ôð(÷–UH¯Ȭ^¯»&žÓD`¹zõªÜ.˜@Y6›ÍN§£¡)–h4ªþ,—Ë5R‹Xä6á0#š¦#‘H«ÕŠD"¡PhaaÁjµ/4ÛíV.èPcuÔ|Í`0ôûýD"A`¡ºÝîY°PÁ`pT8×ë…x"™T£Ñùùz½Ž×éíííáœXÕjU5ޚѼZ%Hl$U6êFå‚~+++ÇÑ4 ¬˜jœ¿Z­6jà®V«©iœÏóüØ}¤$×ÌÄsºróæÍñ*&‚öƒ=öüí÷ûÂÓ¹¹¹d2)ùŽ¥Ói|—j·Û¡žÂÏE"eåEˆÊLõòò2‚­Ôëu³ÙìñxPP‹çùD"a·Û …ÂÞÞÞîî®äÊåòØÜ<ˆîVÍ—«Õê¹À?CÆøää$—Ë©ßÚÛl6‹ÅrzzJÜ24^ªÕj4MíÚí6¸Î¸IX[[ƒö¾v»=¦ÓéL&#¹f‚Á`«Õ"Ö ¸Z­vh™ßHúqîJANNNz½^·Û …B<ÏŸo Ä3RºŒ-ãt!ë‚æLd ýt¢± <È4MCZ«^¯W«Õ`04ÇFÃd2½¦–––И{½q¿ÄCA ¡V«%, ¯×K°³‹Åãñ”J%"šj³ÙA@ÆâÓ.nL'I¬Ì²¬ÏçSXÌf³Y¯×Ë$%ŸþÄ8½Žä¼Ú¼nåúõë6› àññx¼X,·lŠïAµV«u¹\Õ‹§7Ün·^¯gª˜Ìfs»ÝÞÞÞŽD"ÅbqÔ´Óéº èn ÞP¹ÝnŽãÀÌFžçÕ'Š¢œ%ÙV€eY·ÛÏç%TÇ1 ƒ/é^¯7Ô2q×h4Ôd¼´Z-äÞ2™L©Tºuë–x,ËÆv»m±X‹MÓÇápÀ|ò<ßjµ ßàÑÑr’ð-DöÌfs¥R!ê œ5è÷©©)°…°0jµšÏçSîp*éÁèlÀ±I®Üzæ8ŽeYÂ8ñm±('D‡6•¸w2©Ö›Èƒ&7nÜØÚÚ26› èÕÏxA1XÕáp@±Ïó¸ÞÁ™pc±˜ßïcÏçA×ËåuÜn·b ePhš ° …PĦT*©,Í rqH“ˆçV§Ó9Îjµ*N¢ ß)3ŒÊ‡%ÂþþþÞÞÞÆÆÆþþ¾ä¾¡z³Ù,2xZ­V„½½½ãããF£Á²l¯× ³Ëå+b€Óʵò;::÷ÁBìɰ0' ÆLò#®V«%.Hàsq’\ÉønÒ¼^ï¹T¬LŒÓD&r>Òn·áFivŸÏ'§øðClj›~н…nÓà© »•ÉdT:I§UÃw‡4TâgA:$×ÇhzzzTÍpˆ+ØZÕϲ¬\×Ô¡\½*¿LÓ´Íf»sçÎ;w*•ŠËåÂ;×éõúH$B”Ô˜©Z­NMM•Ëåb±X(¬Vk8ŽD">Ÿ¯\.ãƒG £ßïËbÆï÷+[qd;åVúœ¢¨@ Àq\$0ÀH¶ÉdÂ{ë ‚‡‡ò€\X™„õ&ò`Ê`0(—Ë(êÒjµä²zø¡Á` Nˆ»HÈ5A9H‰ ‚ ×wŽ¢¨P(D„z x(!Tâg!è.’kÑh4F -âW“Éd6›«Õ*q‘N§#Ç+q¾ýßÀ˜¹\.½^o±XPߣÁ`P¯×Å¡r—Ë•Ëå|>_¯×+‹>ŸÏét ‚àñxvvv å*“SXpH„L&£¾ÉáMZ,½^ŸÏçÑr‚ >ør¹<==ÉdÔ`r >”\.çt:ñe¯N;T,K$Úѳ7ô›xNQ+ùÈGÞõ®w•yÍåîÝ»ð¢BU1L¸hÿ mI¡ºO£Ñôz=q:G¡Ó³XìvûаÎi‹65™gœ *ñ³Z­°èÂ!¹Þ?c¤¸qÀo§Ó©T*ð[„~©pçBu8—.]R9Û<Ï#µX¯×u:]³ÙDŽ K¿°°°»»;;;Ûl6OOOC¡Ð (ãl6›x0žˆV«ŸŸ'î -§Á`Ðï÷ÇãwGdÇøÂhµZSSS…B…"Q\Ø( m;‘±+‹øFŠ€Ó‚9ê°9Ž›µZ­À+¦ÑhfffîE½ñÄ8M„”Û·o¿ð ÷ïø‘îf¦Ýn+@7 …h‡ããcôþÛívâý'’äÁ`W PmŒþ›ÉdÄùj¯×‹…NÛ©©)hp°²²‚¯9N< ƒR/+++÷ˆÞT’$WR4×ÑÑ‘N§U­V÷÷÷ñ¢tHYœNg»ÝÎçó`;Y–•< A ì¢Ýn;ÎÇ{ì­o}ëòòòÂÂMÓkkk_œ™™A‰Fqq¶ØÆ(䇜9AdǸt»]ÂõÄùs[­ÖYp¾ív/ ïv»C›ÊKšÀB¡êa•L&ÏXknµZÅ´Œä²›”5ßk)§ýšÈÁÁÁÏüÌÏ<òÈ#_øÂ(ŠúØÇ>ö­o}K§ÓÕjµ­­-"Óp¡„¢¨ÕÕÕxÿõ[¿õÕ¯~õñÇê©§ÀÓO?ý/ÿò/O<ñÄòòòc=¦-ô£žç†)Ž­_¾|ùúõëâSb±ØÞÞžN§k·ÛHDZ,+¹Qƒ/ììì࿈þ…B;;;DtEÌ„‹ÅÐðà(ÀqÖ××Fc¥RÙÞÞÆ+¯ÔX&1äs¼]æ¨0[±àAKžçÅR\„.¥ náøøX¼IÛQ¨ÿv dç¶··9Ž+•JßùÎwb±ØÚÚšÅbñù|Nçää$“É„Ãa»ÝþÒK/A-8 ¦‰Ù@8kŽãPƒBpà¶ä”'DYðÄtߘÝÜÜ›à D¹8S<áçØ¨In–9Õy÷îݳÛó‹V«u»ÝjzægY­VÀ£{_á¡b4åÚ]-·Ûí¾GÁ–s”o}ë[·nÝÂ?¹sçŽÁ`èv»ßí#Á0ëõºÍfë÷ûÄüß½{×f³y<|Çív»+•Šš'Å0 ˲°Òð2Š¢ ƒø ƒÁàæÍ›Ä‡‘HÄb±d2›Íf³ÙÜn÷¨•‹Åív#j"“ÉÄ0ŒB¾GÚ*ˆJè®LXyS¨XÔHY|>_.—S£ÙF£Éd§Êd2íííñ<FáCß„r¹œH$hš®T*‹¥×ë ƒh4šÍf …B8>>>&¼4@ÚV*•©©©x<>FW{à™=;ƒ ¸xžPÛrÊVëýâ/þ"ɾb³Ù†B¼’¢¨+W®Hîv•S,cY¶P(àwáp8ÎÒS¥øý~È‹}éK_Òëõïz×»îǵòï|gooïïxŸßGbµZ¡@`wwwnnÚ@å1zL‡ÔÔ}5 õ¶A§ÓY,ñ6¸PÅÆÉétŠa@ÛÛÛÛÛÛ Ã\½z5‘HŒQóFTs8ŽãÄuøË…¶ 0‰t»Ý““eûD Rð VDySßï÷UZ&É >òŠ'EŠ,‹ÓéL§Ó<Ï×j5Ng³ÙºÝîõë×!*«ÕjwvvnܸªÕj<‡"{¨¬!y c[è0{.«:•J]âGmœÆŸÏ§oÊ”=žçÁ2 –eÑ6Ðëõ¢ü§X¼^¯äû¤œè]…Îüg/¬$DΨÛl6ƒÁpÿæó>üá?ñÄŸÿüçﻑ£ LäîØl¶B¡ö Y)š¦Fc·Û%¶ÐzÞ e ˆÝ@l-$Áÿ8"G¬©%/ᯌÁ`Ì 4›MümÊÔ>i vZò(G¡=q)”¸×¢ÓéPrÎãñ0 “N§Y–5›Í°`Y8æÁSlµZ333ét:‘HØl6h©°··Ç0Ì­[·Ã0ТÕju:I…ær¹*•ŠÜ®- xÖ£rÀã¿Òn·å|÷stÌf3é¸ÝîR©Na¥ýhd´ú¯×+éØívœe$¿$›Íöz=5…˜ìQYÅËvOr×”|å¢ÑèyUIý¹ +o{ÛÛ{챯|å+O=õÔŸüÉŸÜwa=I©ÕjxÈ =šf³y||,©MˆU7öÓ[,Ç#Ùƒ`¤å=v̸¦œN'¢dE¯d¥R988G·”gNT¹íSàªüµZ-¨ ˜™X,†¿k…B8A ]=4¸‚bôk×®%‰£££ƒƒƒV«U.—Á– Ó%g}( ÂEMlý~¿øt\Ý!º[¿ßë€Ó޽‘ƒîž>1Zñà!{='I$c·ÛÅ·HÙl–ã8‡Ã¡¾H±ÙlÎÌÌ(»öív4+w|’KÖE"‘““t CÓ p¿çåëT«Õv»}8’ÏQþøÿ¸\.œþK_úR4½råÊg>ó(azÃÞðs?÷s÷‘‚&{’Æpçšàív»F7!’©ÐH$R(FuÇ[­¼DC_„soÃØï÷á‚à!©|5 À0 TmàFÝ´11 *hjj ˜Ë=O¯×#€\‘H$‘Hn‰að2뺾¾n2™t:ÝÜÜÏóF§œ\(*+9xX<Ï7›MBqiDˆi¤yžGOà´på¡ \1¦[LwkµZY–Ej3â”"жÀaÊ+@A¨𦧦¦ÔtRß8I&<ÅÏF²¯°V«ýñÿñD"qxx …†A/a±X”ŒœÎÍÍ)¤µZíÊÊJ³Ù”{™F£Óéăù|žØ ø|¾v»ø{fggñ”x½^;è7??¿¿¿†Ín·ëõzõÑÎ×Vüqä#;tåÊ•+W®Ü§’ÜöQ<ÏEi°, ¡‚ôE©T’|KA?Ž:H´Ìäjæçç÷ööî…çÝëõ@ñá·£¢Ûl6%¡W‹Åb±¨É™ÍÎÎBõÝÐ.N§“¦i‹ÅR,¡¡*þÈšÍf0D7"9‡( €k'˜öíímŠ¢ƒA*• ¸ˆÅb‡‡‡r*4†\FmðÿØ{ó0¹®ê^tŸ:UçÔ„;®‚(€p!”Qó`étšçùB¡°±±1??/>+‹7¡Ýn7ÆÒâµµ“ßï‡æ{¹\.‰9r$“Éär¹r¹Œ}eXÅät¢tn45›Í‘H¤)M z†ÂçÊ%“I®œ&›–ÞÞ^<« …Âââ"ù±šŠ~ÚÛÛ$¾•à¸á].• Ueœ(<`ËÏwöìYøêP× 5uƒaÿþýrѺ‚«•âåryqqqttt``€Bb ‚а!UµZ%':<ž×ëÛ¡r¹<77§~`*€6„'{6cǤ\.‹ ¢¦¦¦$[NMM‹E¹IòÐÐVXÁ`Ðb±€¾¨ÕjgÏžE¥R)ˆÆÇÇåv¿I²T½^ßÛÛët:ÉIK"m©C¥RI«Õ²,›Íf± ÕÕÕEn÷JJSuÆÐCAüw¡MÖZ£Ñ(^ úF­»‰‰ ¹e¨¼ÀIýÀÏX,”â³*• :ŽãúûûÁõ$“r”kb4qŽ}llììÙ³Z­V£Ñx<žC‡:tÈjµÖjµz½^©Tfff°ŒD"„^*•²Ù¬2#†ä‹‹õêÖëîÈ9355…/¨F’B­…ÅÅE2ZºNÍD"AŪT­Ïçk­yŽ9àößãñ@ñn¡Ph ôóÌž W®\!£±†ÛË«–<´ºº*F˜s744ÔÔ8ÖrÏTÜÀø‰J" JºMHy*ÙÁhqq‘,ÇD®pè*yP(„ã’b±811‘H$ÈIK.êBhppÚ꟞ž†¸ŸœíZ­–äehjÇT¡’2Epµ|>/^ ¶ÅÏ€—Jø°dð ´Z­@ ^¯I ÕUàT Ö°ö§¦¦p¦ @»ÃÃáP(‹ŒŒŒŒŒ@ªeYžçûûûm6¸ö³³³0ø}U¦[yžÇÞ‰F£) Û ×!çŒxØabë®òu¨µ@£V«íîînáÙ4òv»¸^L«òº`-M&“x« í Iû µ˜T">•J‰‡Ȳ°ãi·ÛÓé4‰ØzM¨½té’îO sƒâ`2|1™LƒAý>P©T'¦7%¡’Y‹Â5ùª@×RŠÀår‘;Ž‹‹‹ÛŽ}†:19ð)á²Té_ËAwAehµZH ²÷ Þù T[£Ð¥Îr¹\¹\Žº¨9r·?†ÙlÖét*±ó€~mkk‹Çã Ã;pAÜPª©. A$‰Ï%M^à@[\©T`ýÚl¶l6+nDD;|båíFŸÏ·¼¼\©T¬V«Ùlîë뛟Ÿ›y5‚ŸPÍÁW€b<£ÑX­Vc±˜ÉdjabT«U²7ŠÁ`¨V«j¸Tšú‚ªŒ¶ÆV«•ʃaŒw¥RÃÒé´ø“ÉDævA‡ÛíÆvÛãñlllàs¡yp©T²Ùl°ù QÒÕ¥²:‹%“ÉÆ 3ýÜp©Õj±X¬ÙÌÀžP j÷W(HËd³ÙœN'Iú€ç3$²«Óé RÇŸË0ŒÃá[ä„ À&˜ºÙlVy£Xrv&Åãq½^_(*• ¹'Oín6–ã8žçÕ+# QKêqFc³Ù …BWW—V«ššÂ <âF£±)pL[[["‘˜ŸŸ.>rطؒÇ`00 £€Ï• nt:Ïó˜F™a‹Å"¹<ÉÇßɃýS©” ¶µµF‡Ã¸éT*ÕTÁ`@’Jã¨/Èp&‰îîn­VK}âÖÄl6“Íà¤X,6ë[4W­§PÝÌ|>ŸxCwv!E²@ N“ŽØÕ«W† årymm ç=q!J…nµZ3™Œz®nƒÁàp82™ ®•€F&<ÏÆmq*•J8‡Ã{6æú Ïó 8XL7™Jåù¥z½N¹ð ¹…V:„‹•5´Äõ$Y£¬ÑhÜn·¤ª‚IH¦Ôä~I äòfÊgÉÙc èäyÞétÎÎÎ...‚†goÀöÈÙc 0s»¾¾n±XŒFãvµ3¤*Šqn¶¤?¡ÓéHí î ïEÚc ìONBPå³³³^¯W³Ùì÷ûkµšÂwt»Ý©TŠt¬u:]*•¢ŠÈ$µL'’ mö¶P¯DMpÜT[†Ö56›Z`‚ šU¾Ã0Á`paa‚¸ãkJ¦tÁn‘yùîîîx<.އš-À…M, ó«Óé¼^ïõ¶Ô³S(ï'SÜäÌ„‰ÔŠˆœ'‡àPr?†UÊ0ŒÜNÌÍ7ß ei¥RI§Ó‘ºF|Š2Úò[[î4*ô———m6›Ñhôz½ Ãc[.—©õ®° £W«Õpd&÷K‹Å¢Ñh$‹˜Ad |wIÅ"ùc“ÉÄó<ÕwJ«ÕºÝn*C(çÄ“U¯×Óé4˜=åÈC<€’Z´–äéêßýzHË7jÂ8…B¡t:Ç…ª\k­jëõºœš)ß IDAT¨^¯+ìRZ “ÉH~æf£×b±HݺC¦R©ëdœ†iªœfO(™™™á8®««k‡•5iá‡¤× Oá¿‘H$JÚ•H$ …ÚÛÛWVV’É$¥åq–’Tªñ#Ýn7´•SièììœUÐ) Ãlll\¼xQ«Õær¹µµ5…Ù+wÇ@ @UÓ!ù^b•JEÎfHÂ}”׾ؤaH²ä$¯ËåRÐQ‹E¯×SŸ²Z­ÆãqžçÂ(Ó­¦à^¼K‚6{ûЧ |âÖ¦S³Òrÿò&ŒÓúú:ùy(jÈD"±õšJ¥ŒF£ËåRŸ—¬×ëTjÏFÓÝݽńµØa¼~{Tê÷6÷D."ÁýýýçÎSþ½Õj5r:Åår1 ƒ—+5Hà6å*J?l§àL%ÉÁéìv;ЪšÍæh4*—M™¨P(DR¦*d‰¥vVÒ‰š¤ô÷÷OLL‹ëüÇ‚ ·.€ÂîN2™T¯ó$¬V«ÉdG*’}Äé&º5Tñ ‡Êå2Õ ‰[<·$/ˆ!ÃÊ¢ÓÍó¼ßï'cA´:±X b*±¹Ã2<<\,%;á6aœ”×ÀÖ3˜d¼‡“ÉdSO (‹wÜqlj'R©TË@È=y¥‹šjãl6‹çsOOÏ©þ(…%i'Ö××%u7¥ƒ°¦ uÙ7„Òhkkk—.]êìì\___^^V(mÇ\YY‘äžtÕA( N§“çy¬ÇÉî5âÁA †@ Ö³³³‚ ©DÃTªByk£»»{ii ŸK~GÊÛkx}ÉïBöÌ%Ç–z£ÑµÚÜ®V«[Á8ª¬/¸§¤/yò7Ö-Vè{Ò´¶§§G@ÞPL&ä^H@"þÌx˜úúúÀ{U£‰à‚öÙgßüæ7ëtºÉÉÉÛn»Mù\ǃäjd[ÀÈ{r½E9lPÙ²@¸Ô’¦øsI-\­VÃápC.`ÒÕh40s&''Å.W{{{&“ ƒ Ã,--8qâìÙ³j²Ž$ò”4 ’Îr2™$#EgyÿþýP‚÷Ãáð¡C‡L&˲À1aµZÉn­ä¾)¼/íñ*6ÝÝÝx(”…Bzâ³ =+©4HÕ?88Hb¼$õŒÉdŒ­ÛíÆ¦ah¥‘N§%µ¼z¹|ù2‡Ç§§§‹›=Ä ‹×ëºÆ4¾€Ð-z£ußÍ7¿pò$Bó u „žCè¦ûïO½üò5·Cº¤ )³R}`¡Ü|gHkv^>÷¹Ïuvv~îsŸ{ðÁúÓŸF"‘ÑÑÑÏ~ö³ï{ßû^‰”?>11æææ¬V+Ã0x»ÞétB_ê±±± rÁàå­Óé ie Ìf³r7Llç?®`>ä`³€ˆhø¦6›M„-äîuùòåÁÁÁb±(§1ÖÒív›Íf R"*ŸÏ‹nÐ…òc€¿!‘žH¦ª‚óñðð_þ˹÷Þ{Å6»_¸ …'àÉ’N«Ãá¸í¶Û° ¡ W¸\®T*e±XªÕ*åèa@%'“ÉÔJ¥âr¹H•j2™ªÕªÝn/—Ë ÆÉívS¥FXœN§ãDéqÀÌÂ܆Ø6ø|>Xãz½žeYR*ÜK‚±–ZôûýäU×’ˆC$ÁRROµ£Óé¬V«zPÃ0r°}8½ …„EÄO(y/1fšúFy&“ÉårÅãñjµªò‹^ ®œR#ó@x§zŒëJ‰®;j¢­ÖnV­V•¶§¦Ðÿ±xp=ŽôIÜ~ww7lÉRL¸!ôÆ!¸Ò}ݎСG¤oú7ƒ_J£Ñ¸\.qu£^¯Wµ#1I333årV8˲rñ„¡Ý,ûØÇ8ðíoûo|ã‹/¾øõ¯}zzúÿð_¡•&ƒ9\.—Ñh´Z­ÝÝÝsssྸ\®|> 0•lj‘0{± ƒ°°©,º ÷3Ä0A, À؆ž½TÒ OQj«Fî^&£ @’ü±ÝnO&“xs«T*‰Ë+`ù”J%±M¶S,pH ùh(r$Œ´•» ÜËd21 ƒç@½^Ç£iµÕp…P&vmm vkŸX„¥¥%ÊjÁ{ÃìÏ-Ï´ÖÒz²qŽÜ-î 6kù:„÷WÉíhAzzz¨ÿèõzu:úB_@¨ ¡›z\Õ€ —BM‚¶¥HrA€Ÿ4 â-Ü\.‡K¹b±NÑ‹E¹™¡ph÷ 4 ­W(™¯XÁ‹¸Ýn¨aÓëõííí‡>zô¨Ùl&éš¡™äuH­šJ¥¢Ñ(¨cj% |Aèý(¾ÔD(ä$$Ïjø±Â¥.Ž a.—SIÒ#æV˜ ð[—Ë-9‚H¹C$+àOš Q6ÇÛ^îZæ¹N¥Rêƒ?½^ïv»›z°fWÄ‹‚¡ÙæÚ3õ(HR:;;óù<^º8🛛 ƒÇAc=à_ùmJ÷{ý1B„z:!á„B!ê‘H„a²ÊØ?A‰ øIÅ,P¤´ 1{EÈÜÜ܉'>üḣ£ãñÇß®Ö27V ¸n·ûöÛo% .½^O5yÛºûXj |%ÕGËÔ— ¸_\ËB%Eä*¹A2™Œ\M`±X„b‡X,¦Õj%{wÉ­¬\.‡U«Õb±èr¹€ìœTâbêwª'ˆÛí†L bÅ%Ù‰ÚC"ÏR¹½Ô¬øý~°â µZM2ø«V«*k+>V±X …B»§[Í6'r>9Nh™ÕPâñ¸Ñh'[¡_=B(ŸÏÏÏÏ­2Œc­VC%„@è#—¸f­V[__Ç]îñêõ:ÇqðHÝ@% Bˆã8(¬t¹\.—+›Íš2N>Ÿê­F:::šòòö¤Å9­Ñôõõ)ÿ¦P(d2¯× é,F³¸¸877ÝÓé´ÙlnáS!ÉP‡êëë“„ˆÊmˆbÝJÆ7~¿kd5ä,v»Ýb±4¬PïêêR©žÇðð0ø‹¤X,2¸‘30ØLj4Ê´P XÊt¥Óiéõz«ÕšÍf)OB Âíîî¦êª 4Ã…ÎËâoÑšº-Ž)¥Lxž'k»“É$¹}U©T¶è ( îF¡×ëINËP(DÚÈ‘m®Ö#.N‹sV«54‚€ÐBȾj7·Ó¸9Çi4ÒãvœXðÝñ!r—hppp||œLˆéÞ•Åétvtt¬®®¦R)*¹¿'×#Ù0iÐH€a^¾|ú¢¾õ­o5W¯^…¿Ãd¼zõ*x÷Mõ¡ »X†††š­D—séðœ¤HœÛÛÛâZej€ƒ ¸€Ûjµ*ô³Èd2ù|^\³žËåš :+• U›GŠävº‰ŸA ÂÓj///ãU,ÖøjpfÛb'(eBÁi·«#¢JÁqp©T"7Ï$áÞ[”þþþééi…P^6r:pà€ò¥)7„eÙ¡¡!м ð, ô¯¤[”Édpu#>T¯×_zé%ìF±, & ¼ÄŸ‡aè9†zó›ßÌqÊ t: T’Φ8Ë ÁÓ¡C‡×ÙÙ‰•˶²²‚3õ$?)VmÊŸŠeYP>J&“çÏŸ_^^~Õ;‹Åò¦7½éßøÆ?ÿó?ž9sæ—¿üeS°å"TY+ßèÆ»ºº®\¹òè£.-----AY«ÕŽÃWÃûŽÁ` `¶c«‡†‡‡5äc`&ybCÙ·o…]­V«‘HÄf³Alò^u)Ö× ­ |>ä90ϬÁ`ðx< íćËåOiÆúý~·Û‚rº’|xFÝ&BZ­VŽÅU ¦G®äðŠùsÉU¬ÕjyžVùEz{{Õ—Œ)ãŽáùñ(ÉÁi[ º«R¨Ç„{oQ®^½ªü¦²CváÂ…Ót:•¥ ‡Ã«««ð± Þï™››£òuxЇêõ:x¯Á`0ƒA¼ „'A,ÃÎÎOúÓîîr‡Ð½¨^¯W««µš¬Jë‘.ÏÈÈ[333â*Lr{°…}ÂH$˜˜[n¹åmo{›¸Íùî—©©©'Ÿ|R£Ñ¼ï}˜¸|ùòäää¡C‡Ôxß7VZk611Q(ÒéôÔÔT½^(÷ÐÐä¸J¥椘pq*Â8466Ö°´ÉdjXà³!tñâE|A\2:==ÝÖÖ&ε°¹½²²B5'- âÖ2dngmmM\IÆ%kkk¡PH¬Äu:P٠ÿ CCCð9­Ê0LÃÌ­Ãá÷>äê…Dk½^gYVeËè.¨rla@á===TbS§› ÉÀ§pGñ £MÎeàÙÚUi›†STížpÔ’†”JqÌÌÌø|>­V n•Wq»Ý {–ð<åKKKóóó`0l6[8CÅó<.еX,'O21õÞ÷¢|@âš©TŠZ?@¶•1%CA³—ËåZ­vòäÉG}t/Õ¶“"ªY–Á`‚:F£Ñ .44u’Ò”.–ô²³ÙlÃn#N§S\»o2™ü{rr²\.SªÍ`0\§mm°¦,ËJ" Äš}vv–J¯qçõzÍf³Ç㕲,éA.,,\¸pÎ’ÄT6P†[!„Ö×שïÂ0 ~B‹ÅBÚ¥K—Êåò… –––¶}s¥!¯éøø8é:Ø·ÃSW¬¸ŒFc{{{GG¨V(ä³Ùl’x&“ 2UF£Q}¼¾“ÂqµLÔ'£Ñ(¹À 6ÝcccÐKÊn·‹ç4˲8‚ϲÙlXkT«ÕL&c0 €¤t:ív»ÛÚÚÜn7¾WWWW½Îþüçèž{š¬me ÃÎï îÉVXæ.Ú2é*VbÇ…çù–Áa«««b½–N§©­xª*Ád2ÉAëÌfsC×JA  R%ã 5n.ÚÄêBða³ÙTk, Çq‡£µ—õz}rr »ÉdRౕO(9Ó$5¾—Õj¥Î*‹°¡…/(V\‹%—Ë]½zw£XZZZ__—,ÛK§Ó—/_N$â{íÑëõTy¤ÚoœH$$?ßc¦££ƒDƒµ?þ¼ËåÂ&ŸÅqtS}Ýë^i½t:Íf±mŸ››Óëõ€³ÉçóµZ ¿@¥‚þæoÐç?/#+¸ÔÖq ’J¥šb¡Ó®P´'×[b±˜dW‚mÏr@Îív“WÎf³¥RI¹WºÃáØ R;z<2áµ?@H=¡X³75?¡¸N}q±±±AŽzc ???/WìñxÚ-eRàl6ÛÙÈápÈ=3Çqbå#§1 w±õØÙllçêêj¡Pðz½$à;.@ÙÜÔøxYlS›2ÉÐ\qÛãKʬnµ”<›ÍRF«½½# È€1ã³ ÑV<‡=±r¹\*•`Z¤R)\bÐÇF“É$$Ó½^/tã__GO>‰Þÿþk©V«If3}>ßõsôz½BÝü¸í 1Örcc&¡òÄ !Ø Ó š R²Gyl}z‚`0(„¦øI’É$e§ à„Ô§»öÆ!k§|:8 ¤’c’ä\äb±¨P§.÷`^¯$¬g¶2Ôrßk}}]ý^T>ŸO¥R@¹$™=ÆI]É÷jkkK§Óêù8ä2~¨[ñuš± e›=Çz½>::ŠÇ+•JÍÿ-nŽ(œ/•J¸TF„S§NáC¯ýë×××GGG;::8Ž›žžÆùe؈Òjµ Òitò$ú³?C¿ùÍïž×é »Ý^,‘ÑDk ƒÁ000Ю)QæiXY;11¡¼o±' ÃÙýd7E)E@®pà'ÍårµZ RÇâÂ!ŸÏ—Éd²Ù¬ä:t:äY•JÿŒrÅ\¨]]]T›¢¦bq1u)(8èÜït:A€ ÂM¡ÁŠð› ž…»G"üð.—«Z­’û%˜ß™L¦†¬×ë$’×ëõf³Y@«BR9«II ⛚l*»iP†èҨ?rçñx ù„¡ÊT­ Ö*”eRæ´×+’CŠÿÝ´÷ðn³qÂìŸä‡”´í0!><:: ÅN§Ójµ^ºt ÞÖÛÇ?þño|ãÒŸ3€.üú•ýùô­oI|Œd2)Êå lÄ—Ìq‹žL(Sëªäµ”›4dÎsOZåÄ¥ …ë¡ÙÙYÉ•ý[)Í…Ir©³€&ÕçóAÉy Å„ ±‚š7 dó!òá©fY¶³³srrÒd2™L&ê`•‹ø½^/Æc%“ɆӘ|ø q}6 5Â=)ÈÅåñx*• î³,9b £l4uûD2nÃ'ÞÉ™ÉdT–b“½”­¦e¥Ìi+é"Ø|qqÑï÷çr¹L&C’äÞXiÝ8FŸÏG:€bT„²Ó433”Æ81277‡§K.—cæ?øö>4Í5 [2ûÐB×j8p Z­f³Ù#GŽ<þøãèZÕP«Õ$+@#‡††p‚béííÅ=ÖÔd @§ì˜’Ÿ´··wrrR¬ðÔÕh4PˆCIű¶¶&ÖA•J6„pƒÊ>7ðûÎÎÎX,–ËåX–íëë»|ù²XŸâÔl6K)w`•sÉrV5àÙR©400påÊ—ËÅqœÜæØcü¨äâJ$ êïzÀN‘_¿X,¾öµ¯]^^&wq ^æûöíª§­ˆú8CL­«^” ­˜"¦1 8Æt_&L;mœòù<¥ÍÇÇÇaΙL&¯×;==J¥’ÃáX\\,‹Ãûö]DÈ1A‚QüÙr¹@L¨åŽ;îxâ‰'Ä1{oŸõWB!¤ÿ&ª>ˆB7ß|óÄĦó© V£FÙ#èïï—ãÆƒsñÃ+Ž÷°Xxž×ëõ{›R[L«Š•šÃá0›Íb‡ jppž§!¹Ÿ 8±,™bb_ªM @Ñ‘<³»œÀ‚>Å9–Z­&Çë³oß>˜ºÔãiµZ¬”açLܹµÙСZ­Ž»\.¯×;55…ß!´ÿþÑÑQjÀ(*aå[°,»½¸@üŽÐºlrrR¯×SCQ.————ÅWªÍË6Yá‰'† 0[á’ßiãät:qrÛÔ$Öh4z½¾Z­âiW¯× C¡P( `À)Ã%›à€X­V³Ù‹Åúúú–——É„ƒøÔjµ'žxè5±ãy¾R© Ü|àüsç- KŠM• 9Š£ÉÉIªs¶N§«  &S6›…'”|e9ËD>˜Ëå2™L É5šÕDÅbqr¸¯b9{ö¬Íf»ùæ›É?&“IÉ™â' ÝØØ˜BÿåjµZ=ÏÜÜœÉd‚ž&‚ h4šžžÈeA©·äÎVš$ ) ™À¬’·–{ jê™l­Vëíí½rå œe³Ùxžo™›___Xzò½666$ñø[´.FÍë›L¦|>OÝ. ®¯¯oK4C^f&þ‹N§«×ë»Í>ÉVë=zm¢í,‹¸ &ÏóÀ0n<Ï+”®¥ÓéÅÅE»Ýn·Û•ë>»ºº •çr¹Èî¼]]]<Ïo¤6LÿÃôúy=z¡úO¿MÑ›7*DEçç!EÛÞÞÞ,×b±àzMLy">ÔP®4rOT~G˜Æ¹\Žt/¦§§/\¸°•ÎR€íÛ·oß¾}û:::`Úív¼ËÇ,Ú$gÁÿÍf³TÀ3Mý*F£Ùl&P2™”´LZ­–Dá˜Ífñª4 @€¬Ÿ†æFÀšJVÉ”’Œ '&&äT³Ùl&—þ@333×Ã2ak‘ÉdFFF Ôn–2£ÙµUPCéêê|4ÝŠe’ë9†jªVóÆGN?þñaâZ,É9](Ä í‰‰ FCúMrj:—Ëý†¬±“’cÇŽŽŽ¦R)“ÉT.—ÿÌ[­V››Ðý¯º3¿…‘ç7†aVÑ*Uƒ'ÆfOMMµ··7Åép80k¾` H¥Rä!5ÓÜ´=;±BòþØívN×ÂvzC)‹SSS`ÞpòÙëõªg1Àùg Œã8ŽçyEÀœw8À€f+â ¬ÕjM&¼ì˃Aˆá”oÍqœÙlÆÆö]¨ Hu#›ÍŽiµZê1®±ÛíÀJƒÍ'hÌR©Ô°;"À­šE¢Mþ\¬ÓZF=Úív5k¿a{rl{ÿ:†aìv»¤º íN¹8§R©Ôl€a ¡ÖÓÓC¤)èn?6ZdˆöôÓOŸ?¾R©¬¯¯Ãú1›Í‡c}}o·2‹‹ï@H¯×Ëum0›Í¤g§Âe TG¾h4*ž4&“I«ÕJ¢T†ž¬­­]×v÷{B­= k9??¯À3+ÎÔ‰é|ÄÓ O*­V[©TÈmцýuÄ‚‰ àáµZ-&å‹F£Pü¶ººJ¾4WC€€#‘Ò§dM#Lò|>OîFÄãqqÇÅþûÖÑ{ â n'¨RÏ@j§)OBY§™L&eÄ4žNÔÚ—›3ê§ÍžBÁ½Å"öÌf3v×ëõ]¾•°ý}kµU)[­Vñ$6 ®ööL&CFÄx QÓÏÑb±ˆ ñöàM7ÝtþüùBˆÐòî Œê%˲^¯7Lò¨ïv³íÞÐu•ï}ï{—.]úüç?¯²eÀÏþó_üâðï¿üË¿Ü=ÉI(†[£yÅò&ƒaã\,Ë «ÕΕJÿ‘Ë=žÍVUh^øc[[EX«Õ,K½^—t“m6›Ü!Rü~<‡m†a2™Œø1 ØL<»ÊårC?’ºšä$WYæN]­³³s~~^妅Ýn¯ÕjೋŸAe¸‰õLË6ÒápHÒ#Y,Fƒÿ …TÆ‚[´Ö-4ÝhªV¢^¯C‚ÑjµBmÞ.WM­tˆh–îvvvÖëõ‚¥ o…©6ŽãúúúŠÅb&“†JHq@¶R©T«U³ÙœËå"‘]__¿õÖÎ/™Í…-.’c—š‚ÔYõz<ßL&£°Càp8ÔwçÛ:CåËàààí·ß®²•ί~õ«ãÇW*•Ûo¿ýé§Ÿþà?¸›'ú§ìö±pø¿¹\o0µ s²XÌ BP«}«ÉôÏÏÉööbï¤c&OÉd€=Øl60Ï‘H„Ü?P“§êíí=|øðàà`www(r»Ý¤ ””D"OR­VÅÕ¤˜N§É ò66«ÐQ;PP<–e±û¨ÇC†šgP–|>”ƒ-¸/’9öT*EޤÂÃ0˜¶TaÎ\?Á__är9ƒÁ`2™r¹X¦-vÊØ.áy> ♦Ê8‰y1ÔøVƒáöÛo§ û=0T‹Eê+V«Uì8C%Bhrr=ÇqF£Ñëõâf³ÙÞøÆÛî¼=ZøÀgu#‘8ªzN[ÌPyø˜oˆ$“É»7åûßÿ>Bè'?ùÉ?þã?ær¹{î¹çãÿø©S§î¾ûî‡z~ÿ‰O|~ü‰O|!4777>>~ÓM7ýÞïýžÍf{úé§wm~à_=ž¿r: BèÿL&»çæÞ¶¼|ÓüüÙMÕ?ÈqO>QùÈ IDATB©··W¼M Éä_ …B,Ã3À¹,îH&ô2™ÌÚÚZ$9|ø0PuPjñСC;¸2 rxxX’?·¯¯O«Õvwwƒê‡ÇÀø\œ„LJÀSToœ”±¢-HkVX°%ó~äÕ¶µêõú¶á*KgggË}ñÇ©Èd2Ù”'± qr:5NëU«UɺeÕ\,GFF Óüü|8N¥R™Lfzzùý&“ÉÓÙ933(»Ý¾´´T*•î¸ãŽgŸ}‡·°¢H0\§Pý~?´ü±Ùª~¿t>¡­­ÍjµB_ *0LIÔ¤¤`†Jz5íÀ|Ý.¹óÎ;M&Ó¿ÿû¿?þøã_øÂ ÃÄÄÄéÓ§ËåòéÓ§Ï;W*•î¹çžãÇ †'NüèG?zê©§BoyË[4M êò†Èu:ß¹¹‹ðX6ûß6ý⤠|0)ãÓÆ²ápÖÆÆ†rQbÃ9sDà¬UH§Júbbñx<år@×À ÊÇ4 …M-«þÄèWŽã>ð<õÔS‚ ôõõ-,,ø|¾z½¾¼¼ìp8ªÕjWWpddñøñâ×¾Ö‘Ëßð†g¾û]:÷röìY·Ûír¹ ÁàÒÒR±X„{‘N\×"¯×ÛÖÖ´§’“#‰,,,tuuáQ¢~†ßKżKŒÓ}÷Ý×ÕÕ%™» Lï·¿ým„ÐÛßþöžžžGyd÷[&­VûN'^«/‹Ó"'ô±\îÞÍ*¦«RßÔåÕ«WK¥ ˆJO–œ¡Pó `#Aú Ãà†oñxüÌ™3âÏÁó|±X´Ùlz½~yy¹½½³cà{¹ÝnA666䨵J=þ–?°ÁŪ-Nçr9N'žÕð^P@T>Ÿ‘\) [-KµZ­T*ø¾X‡V«Å $”^å®,R9 ¾ÜPàhÿÒ'°‘l0ÀŸ(‚šÖ°ËÇA™\¼xQ¯×·ÖÀ #ˆ}>_.—£l¿²yƒ9ÓìÔÖ¡»ÊO¥Q8Me-ìÊÊ |*¿ßîU>Ÿg?(Fj»Ý.'Ôëõ~¿ÿ™gžééé àæóùd2 ø¢Ñ¨Óé½ú…/éééÿÀhË„emm-Gçç ¾¡#ƒ«H———/\¸`2™ä0zSSS¥RIn”HŒI]º«äío{__ßo~ó›Ï|æ3’Óò‚\¸pá™gžyä‘Gn¿ýö+W®|úÓŸÞýÆ)bµÞEx¸ÏK-ûçrÏ ¡_æóÿ»ÔúáÊ•+ÀŠbµZ½^/I’© ßɈ¼P(Pzš…“®ÌÔÔÔÌÌÌ3Ï<“ËåÄEÉŠÅa!@ÊQœVŠÅbkkkn·[®4ynnÎjµ*?¿ÝnoHca6›%I} ƒÓéôz½äþ6¹²HÁ… ™LfqqquuU²€h}}ÜêT£:)x Ã0 t-H(¢Ôšœ2‘ŒÎe¢æ ÅŒ±”,--5•/å8ö;›}}\þsd;C¹™™…šÊŠÇãä²,‹'ºÑhL$KKK‚ ÜvÛmx à³™Íf(ä­V«Ï=÷¸üf³¹á0©Q(,ËZ­Vžçñ¬ŠF£jr›âµMê1ué.‘w¾óÉdò‡?üáúúúNŸ>M+¤R©ýèG§OŸÞ¿OOÏÉ“'?øÁ~÷»ß½÷Þ{NçwÞÙÓÓ³ÿþÓ§Oÿð‡?L$ï|ç;wÛ ÞR.³D2íœÔæD¡^Ëò²}zú++«òµOù|Âèb±èv»¶ ¨Kc±.%gÆétæóyrK â§ÓY,gffÌf³ÑhÄêˆ0â´ôz=ø|‹‹‹  â~Bä½Àfˆ3 @A‹MDx”:v8P»5xÑId#„$+2(!×#¶Ujt.åþÖëõ¦ˆijŒ«W¯Š/h·Û¡ˆÓM•:ކŸ˜âêu‰ò;âÇ &0á’gñ<ßvìØ±cÇ´Z-øìŸýìgï¿ÿ~„З¾ô¥'NLMMÝwß}Ÿüä'w›qºõZsZ>³ª¾yÑúúºå¨rÔh4¡PH"àì4¨´Z­x É…AmmmÇ ‚ß…‚·SæG«ÕÊa­€y}mm rJ’Ý#·žD¯×ëõz*Œ:ÞúY M ô¿°X,‚ @Ì'Æf™Ú‚Öš”ži8þ[¯ªå8®…áÇA[áJ¥²¼¼¬ÏKÉ¿½*L²¤ÍívG"‘‘‘Ÿo¹k=v“%ÔŸ Eï “Étüøqüß;úAoo/ù0H¤ÜyçwÞyç®Më ][ƒ»R«!„œÍ¬Ö{ÆAž×#´T«(þïtú‚ÌÚSÃq½^o±X°¯æóùÖ×׫Õêââ"uH,™L¸Ps¹œB³V« ™ÍæóçÏW«U…}ïz½^9ZÌ$ÂÂÂ9\øãR*«>Hß)xêr7Ú^ÝåñxÒé´òàȦõå@«ø`Ûv½^/N2 ÓÑѱÅNMù|>—Ë厎 Ð5 ‡Úg2™ÉÉIŸÏ—L&{zzȦŠù|^nwN LÙy‰ÅbMõôÛ“­KøÚ0"-ï2™^…þ§óˆ^ob–aBZíÿf±ü:üœÌ¾ òWã8. Iƒµµ5Š"y%IJ±XTž·‰DÂjµ†Ãá£GBÛe9) ¸ï©õ°–ÉdHeÐHÉ÷ÊårT»Øp8LEl.—«§§sgT«ÕÉÉIÈÉy ƒºTµZ•«À‡Ä´°7P(6%Í61‹"i‰ÄÊÊŠJ³át:ûúúZÛ%ÚvVF ÆÞ\ä$‰´M$$/5N8ƒÁL&Ü—êÛŸˆ `¨ÄÍñx¼P(@Uk2™¬Õj Ã@\533ãv»c±B~±w ‹ÅRÕé:::¦§§Y– ƒdJ}ffFÁ†÷ööNMMµ[ãyÞï÷Ëcv³üìg?ÛJ£°]"®kAµ_éîþÌwdæ³G^¾.ÚLVî. h9¹£E2µ¨aO–‹àÝnw½^/vÑ=N§ƒæ&rkPlp!É''ápÖcooïÜÜ\  ½o°µ”k<88844466622200°wè¾°°ÐÑÑA6“u8ÐJU£ÑÀbÄä¹TCRð¡]…‹WÆ>«Ôä'V™q8 ·!/w=¸[5nºFáMÈÿúý~—ËU(AØ·oV»x¸ar|ô£%g œÕø!4š×¾öµTCÆžž°ÃÃÃP¿W©TÜnwWW×k^óšÁÁA«ÕšL&UÔ®¬® …¹¹9ÈSŸÞKî\ ÔÈ )Wbèî+Nn¹å5@].üµ;‘„ó¥ÒÛ——}33¡ÙÙÿ¼ººx­»}Üélor»Qgvexx˜œiÉdLæÁƒÛÚÚ09¡ÅbÙ–ÓZ­¶¯¯¿W(”©àÉÍÏÏ“jNLDdµZ#‘Èðððk^óš;ï¼ÓívG£Q—Ë…‰âÚAší……Žã‚Á xEâjÞp8¬¾¾Àn····IÔÖÖ]žA@§)¸˜)³Ù‰D<¾ x4$3lÊ¢ÓéT6†€‡/ ÊÍËå²ÝnojìÆŠÚuH—.]ÊËÙÙY ¹¬V«===‹‹‹/¼ð‚œÁ0 0á‚”¾ çÏŸïííÅü7!`Å5 ÇŽËd2~¿¿V«y½^žç¯\¹X–žg0, rìªÕ* Øû¤~ŒÊå2˲cccèÄÄ„ z½> I6PÉ4ª¸Ø5BºíxñÅñø“ÛÂcåòÛÖ×=\,f2™[X8S*½ÐÞnÝÔûÃüg‹åËD I&Û‚X,·ÛÃôƒ^¹r+}§Ói0À}Áœ§pG8D”ëëë—.]³vuu±, \F£z¿nKvë5¯y ¹–ñÆ,|tm{–e<8:: ÅÐPÍ$ ¶­Vë¹s熆†^ûÚ×NNNz½Þr¹<55…¯Àóü¾}ûΞ= (ÆÅÅE¸Eƒ)g¢ ˜<“ SÁ.‰Iòx<†TôårY¡ˆ.›Íª´7}}}Ñh´X,ž‚cít:Y–Ué×ÂëiäŠÇ–JÀêõzñ½¬V«Ãá kO$×¶Ó7mœÈ{ ‚Ôf³ÙívXxkùå—)÷¤\.ƒÁ¨×ëdƒöövhGÿ-‹¤e¾€b±ø'ò'/^ììì\]]mkk›™™aYvii‰a˜ÑÑѾ¾>„®àq—ó­¶²iVq¬†©u1m¨@þ3Àjµ ¼;=<<|áÂ…b±¨¾I¹¤ë}éÒ%9î=Q)8Ž'±Y…zÝH§/%Éb19>Ž6Ùƒ¢Õê·ÒéO»Mo4™HãÔÝÝMöxl!}Af0Î;&ªÚH_*‰ÌÏÏ×jµîîîññq|¨£££P(PêP“ÓÓÓ 4wvvVQÞ¬œ ÅÐtÐz³‘Yá!”2¤RÖZn"sª&2ëïï§Z4îɶȺ ‰l˜$÷gù“J1›ÍPø y4Àž éŒ[,–h4 ÁuG(¢. Oø‰‰‰r¹¼EËd0MÑ쉰¥ å³³³Ðïÿܹs¹\Îl6ÏÏÏwtt@!ÇqÇ¥R)HŠÀ&“Ñh,•J,ˤ©!… Ã0r«µáZSs–^¯¡\.[,تQ°LZ­V²èÞKÂM§Óá†#Û[n@jB–eõz½dl§pHRHÚd2qÇÕ”õo³qb@ *½B¹Z[‹Å¢×ë¿ýíäÒ’½Àê×]¿9†®¯®›Íæv»_óšrooüÔ©î+WVAp8<ÏC¬³²²röìY‡ÃQ¯×}>B+¤·ººJÍì|>Ïó&ûýþ_|O¦¥ž%4PÉÍÚééiôô!Ën;[_w?ñD9—«---A)y©Tºxñâìì,4ƒÍrÖj5±™N§a®ŒF#½»ãCèN„j•ú¿d^ã¿#ô„~ŠPB¿Tz_—ËU*•šb¼j÷¾eeeUêïcå2ÙËլѤD6#sí_òMfÏÅËDDBA#F#0Ç+à“¨â.ÀóCN2‘H@’°…%,qÍ!d¿q9¸Â‡÷ÂG¡r,•JÁ~°!Äb1Àlåóy«ÕZ.—A€'„®¯.—Ëëõ^¾|ù†—Þaoc~~žÌ@5¬nxe–eÍf³d úÉeN•g³Ùm¤Æ&¡Êäó”Ëe9>D¢Õß‹œ;jœ`s’ôøÈªÓZ­Æóüðð0˲╤?ߥRùOÿt± Í Èƒ/ß¾óÊ€£¯½¶¶†º»Ñ=÷üv…<ÿ|íþû—G<Ž*X,gÆËG®Âe76PµZGh6ïGÿ|¡o¢š½¶\YÎç¤Ü®£O ›×Э!t…¹âr¹µ ßP¡ B„B/!ô¯×þà¯ú8BGèçý\i@[ã—¬T*»œ2y—ËÔÔnp …p$ñB±øA¢¾+¤Õ¦Dî‹áZå­ÕœNgÃŒ?Ài¡ €úç¤ö3Z˜-$‚U¹šßïW®i¦B:»Ý‹ÅÈ@LCEí½aµÚ!•Je³Y­V[«Õ&&& R"§ÙÙÙz½ …ŒF#Ž ÃáðÁƒµZ-tÁ¯T*£££>Ÿo~~#moÈÔZZZpˆ±+°²² … Ëšª óæó·ŒéV–†œaÊZ æ p1cGÙl6ët:q¢­Ük{"'R¨4E<×jµ±XL¹iP±XL&“³³³ÅbùùçQ†Ó£[/Ž>j·Û5 ^ÿ‚Pä‘8B(ŸG÷ÜóÛsõ«äùóˆaÖ"‘Ît:ÝÝÝsæÌé@ P,ƒÁàÔÔT©Tç;ÿÉÇ~_&“i˜HÄQõËZ­&éÇ(|}Ùn·OOOÓÃýW}¡I„j‘7â·!ô}„îo}rD"—˵üžH ,?Œé~$›}ï&*þm&Ó¿nÒ(FzŽ]Û»ú_Óéü¦öD"Ð_\|,Y “Édðìj ¾E²Jžç˜ËåäÚè…Ãáµµ5JÏ’KU½À)˜$·V«ªõx<°[ŽGÃd29s†lŠáv»çææªÕªN§®Óéôù|&“iuuP½ A¸ bµZM&×RßQ¡ñA{{;`œ$S¡pCáëã³ …ÂNv«Ž=åßÀk ÕjµÒ9°XšÍIø»’ët:Éê2q½$n&"BèŽ;î YÒ ôâ‹èÅÑýºç4?FFFr¹\¹\N&“§R©´µµõõõ•Èââ"d2™ ù™çææ:DÚዉ€pÑ&nî·Çþ¡GzQÞ2!„~…Ðz¡gú¼ÄqÌô…EŒÏÅ>ãžì€‹EXc_I&³›Ä› †Ã<¦Ô(‹ÐýÄüü·‹ÄDZ\\„y…÷ö=ÇãQX™8øhmã¤^¯«¯Êíì줪ëëëËËËñx\ÁZ^^†wÑjµÒΘü!„Á` Û›áV4øá×××WVVÈÑ€¶,ÐêÉï÷»ÝnHñ‘ÛífY*æ¡þâðáÃÇÁÚl6ªA”2fëbqP"•·”Ó¤+++[)Vóõ«Õ*¥ýÕ¼WËR.—U–]ÀfXk•-„¹r0öS¥R‘¬Ó;À„›L¢óçÑâ©…ÅCoûÎwP"‘€yCzš×®1¢JåwÛúúú™3gN'`Ë)ÖH­V {t0çN:E~‰b©„Ë%8ŽËf³¿«€\CˆLØä¤×ªI‹–*"”BH'ªS%•—/_†¤ ¶[¯{ÝëÔì°ŒŽŽz<žO}êS-œûýïßãñ<ôÐC»Ð8Al„Ð’ |dmM¨×áã>äõsœ ÕjUÏ0ÿÐÖ6¼Y;~I«¥øœÄ$¤±X¬åÈSв,;44$yˆ¯×‹ ¡d¯ñÙÙYÀ½âX¨Ÿ«ÕªBB¿TµZ—œðpH!`Ä!˜Òg¦%æ“§œ>}úêÕ«étzaa!‹AoÐàÐ.6‹ŽŽ^¼xqff&&Î…³È«©áñƒOÜòüQC Mz-™,h'ɱ•­VK¾—JvÚ›nºé†Øîyn‹8'Œ"T£#B¯=B¡ŽvôðÃèþÛü~˲ ´k0 ‘{µZ• uáRÏ?ÿ<,‘^ÈÀ8ÎK—.ÏHéžãª,[«ÕX–=räÈÉ“'å"\HQÕS½¿ß{]F¡ÇzLéMÅÿÅ÷Ï<óÌøøxST;£Ä+• $db±X8†Öx8(4ˆF£ð"Z­¶¿¿cccaazAmll\WÚ±Äh4BâÈãñœ(•î[Yù§¶6VÒj_Ï–JÙzýf޳³, Âw66>¿¾^¸žmãƒÁ 4ó. N¢ÜíÕÕUŽã  Pñ‚ºÄøÇz½ÞÑÑ1??KFŒšTóõ-‹Íf§èéÄó$µ®ÉdŸU©TJAc°,ÛÑÑd7à˜V*h³ººêóùAéèèà8Žìô¡ðlâÀnJ‘jZ§Ó¹(ŽÕ­,©Läž°»»{bb¿šËå‚Á 37d}ÙívŽãTÖlï¨q‚ }eeE!zåyþ·[AR‰ÊÔAÉp8œL&qºÖår%“IXƒ&· Çd2MLLQ—2îÁår¥x>ŸÏ×j5 ý.ŽÇÅ/E.9 Mx5%Á¿ûÝï>ôÐCï}ï{?ö±]¸pá]ïz×±cÇÖÖÖÚÚÚ¾úÕ¯–Ëå?ýÓ?Õh4‹eddäá‡Öh4O>ù$BèÉ'Ÿ¼ë®»>¼«ÞGX?O#tÓüüX,o1÷qÜÍ<Ï ”„“Åâ‰BáÿÝØ˜¾þ¥ü ¤ºººfgg)¯ë/«ÕJ‡ÃuØ’øG$…´“œŸr@Q$êa!'mmm˜í‰:Ëd2)äÇpPÕÛÛ;::j6›Òd0ÀÔh4<ÏG£Q£Ñ ‡,Ë¥K—ÚÛÛâX%ýæ@ €“)I×ëõ‡C²C ¥Lòûýâr 1øÉ4P8kÇD}‹6NP áp8”˲*£«ÙÙY«ÕJµðñz½ét–±Ùl¶Ùlн…BÌ¥åe¤:ƒ €_¹%a0Äó™ÏüêW¿úð‡?üÉO~òÃþï‰: IDATðn³L’Â9ßI&ÿŸ&c q@†6«¶0 ³©³@+±,k±XÄ{‡ƒ4N’ûê˜BZŒë”›ŸÇaÍØš(´»¶X,ÕjUÙ8Õj5(dM¥R ÃÔj5¼¾0»n­VƒŽG 4&''µZ­ÍfkÊ8Ý-peíŒqROÿèìJ¥s€Ô3v»]§Ó‰©1 Ø»P´Z­ÉdjŠ$~ÛŒ“ËåÊd2° YƒÂ›Ê00 #æ½&Sñx|[j.tC¹’ Ó‰B0jæQ E£Ñøý~£ÑØÖÖV*• g'³ Û"G½÷Þ{ùË_’N߃>ˆ{¾ç=ïáyþG?úÑ+âu$é˜C¡TKƒ¦nÍõ#·xž‡Í|r:9Î\.GÙñƃ˜Ý{ ’QK2™k(1®É”‰¨Ïç[]]U‚R€¶¬¬¬´µµ% ûT«Õ°yƒV–X™T«Uˆÿl6›ÓéÔjµkkk@Ë ¬Œ-|#Ðév»vž®Gç·dii‰ä´µX,&“ Cz%þêk>a³£Z­Öëu9sn³Ù®«vb†ì¤îr¹666Z®HlnGkëÝgÍf³dóùjµ*·Ï¬ÕjqOÏm‘†•Žù|V¸Ïç3\[g,é©£ÏÅ‹kµÚujлóÂ0ŒÍf;räÈßþíßÞu×]=öØ¿øÅ ²ºr7‹ø+/,,@^¯×õz=ISIŠÉd’;D¥³• Þ ¬|›Í&Éw,NU*•xŸzN‹ÅmpAÈÄÆkK&á,¿ßÈ™†7*—ËétºC)¸V@Ų3+Qü‰m6›†¿ÆÆI¯×#›~KI.—“ßb±(™y,•JâU!]ƒÁ &ŪT*W®\I$.—‹çyjèF#¸W>ŸÏn·oe(5Moo/¹ WVVv%·{äá‡N&“ozÓ›>øÁ ‚pë­·>ðÀ·ÞzëÇ>ö±7½éM?üðÕ«W?~ï½÷¾ï}ïû»¿û;²èy7…···Skår™šH˜ÄAã€ÎÎN¹ø£³³sß¾}@K ©ž.ÕjHÓfœ²Ù,îà¹oß> N§|–úöE[”îînP ˜"‡•÷ÅÊ„LQ 0===Ta½×ëu}åËåòØØØÂ™3gÔØàX,&‚ÂN ÂM¥Rêë¡€ÿWNϸÝn²Ì@ˆ–––ZflK"‘PÖi}}}Ê}¶"PÝ£òÇJ{N˜g…”ÉÉI?É¡ºl¡þ‰‡‡‡‰ÄáÇüãjµæçç{zzFGGÁ3Å(tÊ Bí___ßÚÚšÛí^XXP¯#HŠÂááa(}q8F£Q}²›$looÏår8:ÔëõíííРswRâŽŽŽ–óøñãŸúÔ§Þ?=4ñDýà?'Ôï÷Ÿ:uÊ`0¸\®/ùË™L0•»äÄ8Ö••5˜ò,·Û](ä¦ñ‚F£i¹ñ¥ðeÙ¾¾¾……q} 4©kêŽTE€ÏçÃM [ÕÓÓ³-DbÑhJò½062ŸPšØÝݽ¼¼L޹Jˆ(†ÒK†#ð +++d8õß],˜_‘Ô9êGF¬ AÀ_–J#áÂgm{.8<lvˆ3gêU«¼ÈÅó “M5Œ¬Á©T©M.]ºÄ0ÌÏ~ö3´ÙÔ’*^¯…øj<ÏG"°(Ï?ÿ<¾ZÃgcY¾}<Ç«ýâÅ‹pn2™ä8Îëõ‚+=<<Œµrß{jj ð(×$ÚÍ»P:gÛö@Å)x2ÇG­Vë­×UĬ¦¤‹RcJzx™‘Ó©¡ôõõÍÍÍ)øÝµZmrr²R©Hîi+œ¨fÅQã Œ´mJ”•vÕÓé4PZCÅ^F£Ñï÷«$ ©T*Txk’’v‚ÅC4<®^jµÚÌÌ dVÆŒÚ{—›NT¡H ÀºÈèĶêη••…µd½ÜKü€ì&±˜#þ¯dŠX,ÖeßÕ«W[ÛÔÑh4ØŸ&gÚVD«ÕRÛ·f³Y£Ñ0 £²bpii ïŸÕj5É>sbU gy½^9ËýÖ_Ðf³QÀ×Å8e³Ùt:íñx¨ÙV(Ä– øÑÕ_Ün·‹‡Éh4&‰­`ë&''Y–mø$8rŠF£årj.òùÃ0ʉQÀ¯œgݰͳrÅ*¬U—Ëe2™Ä›“ð"{ûR[‘ÎÎNŒ& ‡Ã h’¬¦ ó$àCG«Õêv»Ø`s~¿»4#Tš5{“«âpŠ7ÔtLPߺÅ`0˜L&•¸@¬¶ë›*°Ýo»(°ÓÊ‚^ ×Ôétn·»µ‰!Ù‰Ô3¸ôcyyž°)àZµZ•tµ)&Ü-Îdðõ[nCªÊ86Úär¹Ûn»­^¯¿øâ‹êÙ‰666Ž9òæ×½î_2›ÍF£1‹L-C-$A²Ù¬žYâ3—Ëy<ž†öIni‰×a(Z]]Ý ÿhƒ&VˆµZ‚;ìÉVä›ßü¦B<¤ÑhL&“z°iÕxžÏårƒÁl6c°mËÜ^/UÍb„: õÊB§ÓaR¥W·(  Ê±ÝÆ™v¾¾Ê8¤)ee1›ÍÅbQ½©xa"ÕœqZ]]…nsàÀGy„ Œ2™Œ×ëíîî·Z­f³û>™LæâÅ‹ž#GÀö@¬055%Y¶æ*‰¬¬¬HÚ˜ÞÞ^ NÛMâäm¬A‚_Ûr©|>/M˵ÕÚ“¦'n¿ýöݺړ=ÙõòÂÄ‹Í'ìjuww/--ýÛ¿ý•Ê[]]…ý:¨5Be³Y*,Çã“SS&“ÉCu“²G¶¸¸¨`fggårºÞÞÞùùyõ9ÐÛn»-‹™8¼^¯J.m–eûûû)æI«R©üÿ³Åv p1 ï ÅžìÉ«CdÃ0G¥¨7'†Lcp8B¨\.»\®ÁÁÁ_ÿú×dJ¤Z­ž}é¥z.733CáÅDа¾›nºÉd2>}ºZ­B?\Ë«`&''•#*ê10Ñ~~Ø{Ã(n­VKEi^¯—eYÜ V«AÍ+TÇ*”< ¹=i-lÂÑg<ß‹D÷dO^qByjÔ¥˜”1Öà,˲,+vù×××ýë_¿0euvvÎÌÌT7/ât:Y–ÅÁ\jQ¨„¸$eäùóç<ÿ¦*20Ń˜«·a®ottT£Ñpgq'ØÈŒŒŒP½¥Ãáðââ"ùÀ«««ýýýµZ o6ÂMw€˜kO° PѳxŸO²¢åŸ©?Wüwõ·ØU/²½çnûû¾ŠÇêU3â¿|ä#áƒ776N6›M\t˜çÿ“éµz}·Ng×hª-×ë/åóe³Oåó”ço±X¼^ïòòr:Æ6[/ò¿ÀþÉó¼Óé¤Â‹`0(Iq{îÜ9¾À65õNçñxš*^G›88+ollÀ 0 CQ”¢MÖ80Ò˜Ö3™L¾:º’¿ „!„ü/u¨Ù£÷‹Â!ê/[¹‘úÇR~ŒfRù^-†øh /%>´•±?†ø^Ûø·2»ä1¶qÂk4šýñ©ÆÆ‰B{…´ÚoºÝoØñ¥á¹BaÇE´ÚˆÙü.³ù¥bñ½««‹Ä>P2™„¶†n·;N+¤é€ýSºKZ&h?C9ÅZ­Öl6‹`ÙšUgäY‰DGE‰DÂf³ÉÕàČӶÔõ½RdbbâÅ_¼õÖ[%ÛÉìÉžìÉž´,²"ÈNB]Zí‰`[¦ó¥Òhôí++7ÏÏ_ÙÌéÑëÿ‡ßo`–eIþÈ‘mc”ï¥ E¤þX,Õ“E6%ëëë8a833£À _©Tv¸Kä7¿ùÍŸýÙŸ‰Ó¿{²'{²'[UÕzßhksoZ…z½~,–„ÐF½þw©ÔßìÕÇq²Z¿™ÍRutb0t…I¥R@5Fñ)øø1°©èïïF£»„ ]£Ñttt …miÄ{£äÔ©SðÀ„B¡/~ñ‹ð—»îºëî»ïF}ýë_# …xà½õ³'{²'7Ì8™æN¢gÔSù|%F›¥N^»¿ò“éïÓé†ûÿ¥R ’Œ¹\Îï÷ã Äb±Øíö†™±D"Q­V%küv^êõz*•"«Þý~*•Ú%¶S¼üòËþçÞÓÓó®w½ëÁüèG?úÐC}èCšœœüÊW¾òÌ3Ï?~\§Ó;wîþá¾ò•¯ „>ÿùÏ×j5õ¤–7VÎúý]ª»ŒÿK¡ð…Wηۓ=yµŠl¶m``þQC¨@T9?–Ë‘!ÂÒµP¤ùÞ_”q‚ªññq6¹Ýîööö†ñx¼R©¨LʉÍfSÙå·¡qJ&“d_2™,—ËTNfî‰Åb£££½½½oyË[¾ýíoÿÕ_ý•Ùlþå/iûÿÚ;óà(ª}ŸîÙ×$“É$C’ÉJD+ˆ P†¾@4¾ªÉ|È.‹*\ ”×èÅ)@$<—§à±B 1PXOBЄÅÈB&ÛdÖÌÚÓïcúvz–ÌÂ2çóGjætŸ3Ó'=ç×çœßïû‹Šš5kÖ˜1c®_¿ÞÒÒrá½^?mÚ´iÓ¦éõú .DÄÕ)pÜËè ãä[š9*´•$WöôìV(tÄf³™öëeDÉò0 ‰²³³»»» ‚°Ùl ß<”ƒƒH$âp8ŒÜ»†åææ ‚¶¶6*Àâ¿D˜GŒF£?ª€t$Ill¬Ç0®Õj½råJ$†.eddŒ†ï‰wîÜùÙgŸmß¾](:tH.—WUU-Y²dûöí€íÛ·‘$ùé§ŸæÏŸÿþûïŸ:ujÆŒTžû0DŒaq¹Çúûç÷ôx bØÛb1 Ÿ$¿@ÔD$§—%Ž_´Ùív+IÎ Wdxkr8þÖÙy‡6 8ŽSá±0#½5jó&::Ú·q‚‰Ÿçx´L€›7oÊår’${{{ccce2eœd2™Á`ÈÊÊ¢tó„B¡ÍfóhœÚü[Bt¿®Hº9ÐK¢££Úó€²²2úÛéÓ§OŸ>=œ¯+ŽÅºát~èóîšÅãñ1 °ÏbÑ"o"⌓Ç÷Ž®…XHò}“iOw7c€g±Xtw5I<‡ô»£ç…ôG¥\#IR"‘À½".—K’$Ý£Á·³†?pýsPD<n:ãïÜñTp@¸C{ûûÑnyÆÉ€“$Ùè&“Ë5ŒÍæa˜ÃÞ‹sq|›V«¦y:1|áBÉki³ÙJ§HÉ AW@jl‚Nðw7Zö~æëDÜu&r8Or¹€-&“í6!aC8z—kÆ;ÿÞÑ‘vëVúíÛµ¶&ݺõ¾> Ã^‰Î%&>K ×õŸqãÆÝ»+ìïïg(ïq¹ÜäädÆiiiiîaIJ¥2;;ÍV0Þ‹Õ6[5ʧ…@D¨q\°Ù~²XäYYð­•$ßïëûa`èçãøWññIl¶P(T©Tþ7ëm÷èát:Ýw‰:;;Ýsjôõõµ··»Û-¥R5°Ù†ˆ\æ ã¸\½Ëµé&YG îã­×4 ]ùo£‘òÙãøÊ¨¨·´Úþþþäädb©tt:—ËMKK£üâFŒÑÕÕ¥Õj1 ËÉɹ|ù2@¡P`ºÌ«Ëår×ò˜?jU4773üÈ»ººÈ»ºs^__ßØØˆnÇ q8O=õT@U”8¾M"üÝdêr¹0´Û„@DŠqâp8ó\ÀB…B1uêÔóçÏÿ>8ÏÅt`Iöôô°X,*|uHH’¤{l_»v*‡– вQ¬]»öðáÃ&''Žét»åãCsrrèjIƒ:ÂK­œœœææfF?P-Œ5êêÕ«!*AX­Öœœœ‘#G¢Û1².»¢£¥8^ïpT"÷q"‚Œ†a”‘Áá`\ìïð믿¶´´06dRÂr•J%›ÍfˆýxLw‹aØã?ÞÐÐàgš¾?þX $IÍ6衾éééMMM\.×}zä#$6==ýÆîfÆjµòù|Çív{TTû¯¹¹Y¡P„èaA¥óB„8!ööÜã^¸X$z†Çì5™œá-‹·„iÞJUü©èíE@_ÃÛ‹@?ÔG#]”ŸýÊ÷ îßÄ÷òä!ûç®\TÐÿ¯{ý¿âöÖÉÆ óË8‘$ -S›ýB‘ËçÞìéùt@Ñ®¿¿ß£ 85漂 I¥R‡Ã!“Ézzz0 £L†aiii]]]þk¹&$$ÐmZ8-4J¥’ÊTëjµÚcyssszz:›ÍÖh4¹¹¹'Ož´4¤TN˜0¡¢¢"”Q•Çãq8œHâ  A"‘ðì³Ï:|êãÉŽw›šIÚ1Ì6aB>z2’$Iö@¹xñbjjªL& ¥‘îîî;wîŒ;ÖŸ“OŸ>——çíIúÔ©S£úé§üü|úÂFCCƒB¡ˆбÓëõjµúÉ'Ÿ|饗€4chã$—Ëá(¿K.ÏÎ|=:zŸÁ@ÒFU.—+¼[ÓæeI ðèèè–––ööö„„„¸¸¸Û·oSâ­f³yHËDτ˅Gív»Ýn—J¥&“) Ëäª)†e‚‡îÊÙíö€|å .]º¨äû{µ®\é¼q ˜4éèW_¡ÞCD"sçÎ]±bÅ”)SBiääÉ“_~ù¥?'§¦¦~ÿý÷/ÿ‰‰‰Çw/ONN>vìݤ-[¶læÌ™EEE”•}÷Ýw;øâدîó&)))ðEí«$²Ù3hÎâ06vô`Oë_¼äÂ!I’Ê€n2™l6Û°aÄB!\©ªª²k™p1 KHH€f)::Z«ÕÂȪ¶¶64 Axƒøãguõ_7ðã£AD(ÅÅÅ9E{$##ã…^ðóäÕ«W»ç"§X»v­Çò5kÖ0öƒgÍš•5àò P*•sçÎu¯èuæD’êþþ¥4·éÍ2ÙOííp5Íb±X,–Ù4ÙIî˜ 1rÚb–””ÔÚÚ*•JE"‘Z­–ÉdY÷ Ð…$Ib(õXâ¯Iêž=ÿzº>u"B™={vèdddøŸ%gݺu>޾ñÆËׯ_Ï(yþùçéo•JeII‰{E¯3'JÃt{__#mÅé ow\oÀþ‡XšðII X¨w¹–÷ô|BSØ„Æ)11Q"‘::: r«Íf3ó˜=8áS(èõzMFýQæÄ‰ùùùpÙ—AUUU~~¾ÇÕäˆÃ9xõó¤‰@ ¿‚p .×òîîöõ½(Oáó³¸\9‹5C(´‘ä-‡£Ñn?Õß_i6<­Ññù|¨ä1ÊÕèñ¹ÝÝÝ”3fŒZ­NIIñæh7$}d2™J¥ºtéRRR’B¡P«Õ&ÌDòòòžxâ ²===õõõò:€8{vq’JÑ€@DØÌ ð1cÆÐKn:ÿÔéŠ4š--ªÎÎ'¹\ùÍ›cZ[_êìü/£Ñàe÷ÈétúÞXb³Ù†AÇÝ7Üìv;ŸKÕÌyHßjc±X†Qúåb±8---ÐÑjµüñGjj*†a/^ Î2Á‹btऱ±Q&“-Y²dëÖ­2™¬¢¢"///+++;;{Ò¤I:îÛo¿5jÔáÇKJJd2YCCÈ#&OžLÍ, ÃâÅ‹ããã].×éÓ§•JåÈ‘#U*ÕîÝ»m6ÛÔ©SaþÜúúz™Lš×¬Y[ “~p ÄíýE Irˆ‚V«Õh4te³Ù¬Ñh4 •ëÇétÂ’!¥t:ïZÝÝÝÆÇÃ(U‹>6º×2 ð´ ¼'Fj *•J­VûvØ…ÐýÅ=’––Æf³ÓÓÓ‰$ M ›ÍFו6l˜H$JOO‡Îd2¹{œûƒT*µÙl­­­<χwŠT*‡Ã ŸAF¥TVV:tè±ÇÛ¿?àܹsgΜ¹råÊk¯½F…­ÀK—.­­­½|ùòÒ¥Ka ååå‹/ÎÉÉ™2eJWWWqqq^^ÞÕ«W—/_¾eË–ÚÚÚÌÌL‹Üa#ðfMMMõç>¹Oý@K; "ÐØ‡gnÞ¼¹bÅŠÂÂÂââbøãÒjµ»ví*,,,,,üî»ïl6A555°¤¬¬lPòñÁ´µµÍž=û·ß~ƒ6¦ººÖúàƒ “ÁŸþYRRRXX¸hÑ"’§N§óĉ°Ö‡~HÕš7o^aa᫯¾ Åí4Mii)<­¶¶öîÏœÜóp‹Åb8X_»vËåÂ'eÆ¡@¹~ýºÃá€6F¯×{Ì@Áf³­/“IDATE´”»Þhmm5™LjµzH[í»AN×ÑшåõpÝÜÜl?•ëÄÄÄmÛ¶ÕÖÖÖÖÖ–••]¼xÑÛ}säȆ÷çúõëŸ~úi———Ëd²_|‘*ùâ‹/ªªªÊÊʆ‡S–ð¯× †ÂoáMeeå;ï¼SWWWUUU\\ 8qâD___]]]]]Ýž={ÚÚÚŒFㆠ`ITTÔÁƒ=6ÕÔÔ´gÏJ Î`0¼ýöÛ°–H$:tèà•W^Ù¿]]Ý{ï½·råJ÷Fúúú¶lÙkñx¼ÊÊJÀ‚ >ÿü󺺺­[·®Zµ pàÀÌÌLxÚÂ… ƒ‹íñ¥áþà/‹ív;ú ‚ Oëè‡Ü‰ïîî:üˆÍf‹Åbzæ ˜ß>ìÃXà€œ, qb¤Òp' \M|>ŸÍf‡óU~~þœ9s?ÿüóš5kÆÿ¨É&ñJKm[·’íí˜\Îݼ}ˆ0çÍ7ߤ¬Tˆ¾ã•••J¥rÒ¤I¡4Âçó§NZ^^gQ999÷îÚ½'¥Ré.G/¡ïîP‡”J%œs0Ã0‹•œœL’$C B©TvuuÅÆÆz›Z­V†Ó9—ËÅ0 '±X,‘H$‰Åb飭Ûðx<‘H¤Õjýi0ÔQÇ“Ëåðuø;P8p ¥¥¥ººšÍf»çb÷HMMÍäÉ“}Ÿ³|ùò;vœsæL(ß„ÅbÅÄÄ@i: ÃüYÐ ¯Î0¾•ÇãÁM ˜˜É@< K¶ÛítÔ„„„´´4os#J* Ñkq¹\¨„æ§~9e ©Ï2›Í½½½‡ƒ1oc,<ú‡ÃQ*•Aô#I’ƒA«Õz먨¨ðIµxñb•JUZZºcÇŽõë×_¹reH%‘H¾þúëÖÖÖ­[·J¥ÒuëÖ]¾|yݺu555sæÌP«V­2555›6mŠ?wîÜÌ™3ÃÊ8!ÇG}är¹6lØt W¯^=|øpAAA ieÜ1›ÍG------åp8pûê~Ïœzzz222nݺ×¾¬V+5ìêiÁLÑÑÑ,«···¨¨È`0=zÔLJÁX(3™LA@S°Z­Põ•áya±XŒF£B¡ð±CÈÀår 9ï‘Éd$Iö ÞZg]wl6ÛÊLII©¨¨ òÿæççïÛ·O§Óñx¼qãÆåææV¬X1jÔ¨±cǾüòË111†UTT( …BQQQ1zôè®®® &äççóx¼Õ«WÃüÅ3fÌ=z4lV6xÚ´iá㯈@D";vìJ¥%%%ìœwÚÛÛ¿ùæ˜Ã¡®®N£Ñ9rÄ›D^­sø˜ tttPKôôz½žÃá¨Tª¦¦&³Ù wÎÛÚÚ…B!Ôuòãé–@(fddôööÒ †aYYYt—¼!Û¡OþzzzÚV!bȽ«à"ˆ­4iT*9s&½dâĉÔkú!ºZUm=·}TT£AF•JºðñˆSWW·lÙ²WÏÆOM6mÚ4oÞ¼èèè!wÜÃ×8Ÿa³N§ŠïÁ9¨[__ßZ,–öÁýÁb±¸g$IÒÙoo)Z*ô™L&‚¸:‚ââb.— ÈÌÌüå—_Š‹‹ÛÛÛû÷ïOIIÁq¼¼¼–ÌŸ?³›§T*…뀘˜˜ììl˜¦gïÞ½°ÖÂ… W¯^ øá‡ :::233=.ƒÅÆÆîÚµ ÖZ´hÑ‚ ÇŽ+((Ðh4YYYG޼þúë›7o†§?~<8Ç+¯Æ©¾¾i{ß NŸ>:@øÃÁƒÛ`ãÆÐ‹Š÷˜4iå¤à»Aèü Àq|Ê”)ŒZr¹œÚFòØŽãÏ<ó £V\\Ü… èµ$É'Ÿ|²sçN`Šj¿ŒÓùóç-^’_ Bª` uáw÷Âàl@píøY+h³äÕ8ÅÅÅá8þÜsÏ¡ÛâÞÁXðÕét‡x݃Âh4†3$Æ ¦ì ÿí²‡è¯ØÚÚŠº"h¸\®©¸"«qb³Ùá#ƒöˆÌÖazßáÇG‰ïBGrDÄCfœpœeÅ…çþì½Þw uÊ}Ãd2étæÎÿE}~×¸Þ ¾ùñ‹…]ˆÈ£©£ÇYƒŒ†ã[|£—¸Ñ{uÐý…Õrõù]DÔ­îB½€@D"8΢ä˜ÙÂaïëjCý‚@ ˆá°°?oÜZ´nÛ]VE "8¾Úµíÿ»FÆo0Ú%=IEND®B`‚saods9/ds9/doc/user/contour/a2142.reg000644 000765 000000 00000221100 11220740726 017524 0ustar00joyewheel000000 000000 # Region file format: DS9 version 4.1 # Filename: acisf05005N002_evt2.fits[EVENTS] global color=green dashlist=8 3 width=1 font="helvetica 10 normal" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 physical polygon(3535.2112,4184.5,3540.5,4179.1154,3548.5,4176.8219,3555.9012,4184.5,3548.5,4191.9558,3540.5,4190.3926) polygon(3545.7583,4176.5,3548.5,4174.0347,3551.0962,4176.5,3556.3318,4184.5,3548.5,4192.3896,3540.5,4192.2562,3533.5386,4184.5,3540.5,4177.4125) polygon(3541.8511,4176.5,3548.5,4170.5214,3554.796,4176.5,3556.5,4184.1775,3556.7483,4184.5,3556.5,4184.7649,3551.6193,4192.5,3548.5,4195.5255,3540.5,4196.6771,3536.2539,4192.5,3532.8727,4184.5,3540.5,4176.7345) polygon(3952.2509,4072.5,3956.5,4068.3292,3960.6285,4072.5,3956.5,4076.6793) polygon(3784.3016,3768.5,3788.5,3764.6165,3792.2888,3768.5,3789.9877,3776.5,3788.5,3776.9498,3787.4255,3776.5) polygon(3771.6665,3752.5,3772.5,3750.0922,3778.6915,3752.5,3772.5,3754.2336) polygon(3538.3898,4176.5,3540.5,4174.7377,3548.5,4169.1227,3556.2689,4176.5,3556.5,4177.5414,3561.8572,4184.5,3556.5,4190.2159,3555.0588,4192.5,3548.5,4198.8617,3540.5,4199.1539,3533.7363,4192.5,3532.6076,4184.5) polygon(3949.7017,4072.5,3956.5,4065.8271,3963.1052,4072.5,3956.5,4079.1866) polygon(3875.6625,3904.5,3876.5,3904.2537,3876.835,3904.5,3876.5,3905.2614) polygon(3868.1012,3896.5,3868.5,3895.7386,3868.7463,3896.5,3868.5,3897.3375) polygon(3819.1354,3888.5,3820.5,3883.0416,3828.5,3886.0489,3830.444,3888.5,3828.5,3891.632,3823.0234,3896.5,3820.5,3897.8024,3818.7446,3896.5) polygon(3897.7083,3880.5,3900.5,3879.5695,3902.5938,3880.5,3900.5,3880.9927) polygon(3769.1562,3880.5,3772.5,3875.0284,3778.8355,3880.5,3772.5,3887.5809) polygon(3890.1607,3872.5,3892.5,3871.2404,3894.1375,3872.5,3892.5,3876.5938) polygon(3907.5625,3848.5,3908.5,3847.1458,3909.8542,3848.5,3911.5156,3856.5,3911.725,3864.5,3914.2277,3872.5,3908.5,3879.4728,3902.7723,3872.5,3906.3967,3864.5,3903.675,3856.5) polygon(3780.9485,3848.5,3780.5,3848.2176,3779.9917,3848.5,3780.5,3850.4062) polygon(3725.1932,3848.5,3732.5,3844.6726,3735.9946,3848.5,3735.8646,3856.5,3732.5,3859.0234,3731.1077,3856.5) polygon(3921.5568,3840.5,3924.5,3839.3009,3925.5444,3840.5,3924.5,3841.375) polygon(3876.9766,3840.5,3876.5,3840.1369,3876.2458,3840.5,3876.5,3841.1354) polygon(3723.5367,3840.5,3724.5,3839.5367,3725.7596,3840.5,3724.5,3845.9584) polygon(3914.0096,3832.5,3916.5,3831.205,3917.6991,3832.5,3916.5,3835.4432) polygon(3904.3125,3824.5,3908.5,3822.4062,3908.8807,3824.5,3908.5,3825.3375) polygon(3706.4813,3808.5,3708.5,3805.8083,3712.5375,3808.5,3708.5,3812.9861) polygon(3908.4837,3792.5,3908.5,3792.4062,3908.525,3792.5,3908.5,3792.5156) polygon(3882.2841,3744.5,3884.5,3743.6875,3885.0945,3744.5,3884.5,3746.375) polygon(3700.483,3736.5,3700.5,3736.4766,3700.5187,3736.5,3700.5,3736.5536) polygon(3713.0054,3720.5,3716.5,3718.2673,3719.9946,3720.5,3716.5,3723.5914) polygon(3785.564,3696.5,3788.5,3693.564,3795.5809,3696.5,3796.5,3700.4062,3798.8393,3704.5,3804.5,3705.5161,3812.5,3709.9766,3815.6058,3712.5,3820.5,3715.1511,3827.2566,3720.5,3828.5,3721.0027,3830.4688,3720.5,3836.5,3719.0229,3843.7375,3720.5,3844.5,3720.7933,3850.7617,3728.5,3852.5,3731.772,3860.5,3731.9005,3868.5,3734.3797,3870.9429,3736.5,3871.1979,3744.5,3876.5,3751.5695,3877.2614,3752.5,3876.5,3753.1979,3872.6902,3760.5,3876.5,3766.7589,3878.125,3768.5,3884.5,3773.8125,3886.6989,3776.5,3892.0987,3784.5,3892.5,3788.3125,3892.8489,3792.5,3900.5,3799.845,3901.1298,3800.5,3900.5,3801.9886,3898.7946,3808.5,3900.5,3814.0096,3905.125,3816.5,3900.5,3822.975,3899.8068,3824.5,3900.5,3824.9236,3905.7452,3832.5,3900.525,3840.5,3900.5,3840.5163,3893.4375,3848.5,3894.5469,3856.5,3892.5,3857.7596,3888.8489,3864.5,3884.5,3870.2986,3882.2986,3872.5,3880.9861,3880.5,3876.5,3882.875,3874.7446,3880.5,3868.5,3876.8173,3860.5,3877.0982,3857.4345,3872.5,3860.5,3867.1354,3861.5541,3864.5,3860.5,3863.1823,3858.3917,3864.5,3852.5,3868.1823,3847.7898,3872.5,3844.5,3876.1188,3841.7164,3872.5,3841.7083,3864.5,3836.5,3863.7188,3835.0795,3864.5,3829.7188,3872.5,3828.5,3873.7829,3825.0178,3872.5,3823.3303,3864.5,3820.5,3862.5187,3817.1979,3864.5,3818.743,3872.5,3819.9554,3880.5,3812.5,3885.038,3808.3092,3888.5,3804.5,3893.0234,3801.3533,3888.5,3797.4531,3880.5,3796.5,3877.9584,3788.8751,3880.5,3788.5,3880.5268,3788.4062,3880.5,3780.5,3878.743,3775.1488,3872.5,3772.5,3865.5469,3767.4432,3872.5,3764.5,3873.795,3763.0924,3872.5,3756.5,3865.9076,3751.875,3864.5,3748.5,3863.0234,3743.2812,3856.5,3748.5,3851.0066,3752.1635,3848.5,3748.5,3846.4293,3740.5,3843.0461,3737.6544,3840.5,3732.5,3833.7596,3731.5367,3832.5,3732.5,3827.0416,3732.7824,3824.5,3740.5,3817.058,3741.4191,3816.5,3740.5,3815.875,3738.5469,3816.5,3732.5,3823.4107,3728.6875,3824.5,3724.5,3825.0234,3716.5,3828.517,3711.3015,3824.5,3716.5,3821.101,3721.101,3816.5,3718.2228,3808.5,3716.9595,3800.5,3716.5,3799.5234,3708.5,3796.0764,3704.9236,3792.5,3701.8021,3784.5,3707.8558,3776.5,3701.5417,3768.5,3700.9485,3760.5,3700.5,3757.9584,3699.7202,3752.5,3700.5,3750.6805,3702.2944,3744.5,3708.5,3740.1279,3716.195,3744.5,3716.5,3744.8631,3716.8812,3744.5,3717.946,3736.5,3720.7542,3728.5,3724.5,3724.338,3730.257,3720.5,3732.5,3718.125,3737.5329,3712.5,3740.5,3707.375,3748.4062,3704.5,3748.5,3704.4625,3756.5,3700.4732,3764.5,3703.7202,3772.5,3701.975,3780.5,3700.6525) polygon(4026.365,4536.5,4028.5,4534.4086,4030.4707,4536.5,4028.5,4538.5914) polygon(3527.5103,4392.5,3532.5,4388.3955,3536.415,4392.5,3532.5,4396.2423) polygon(4328.1093,4280.5,4332.5,4276.2719,4337.3236,4280.5,4332.5,4284.7281) polygon(3531.0749,4176.5,3532.5,4174.4749,3540.5,4169.3959,3548.5,4168.5659,3556.5,4172.0382,3561.1012,4176.5,3563.8911,4184.5,3556.5,4192.3861,3556.4281,4192.5,3548.5,4200.1898,3540.5,4200.1399,3532.7341,4192.5,3532.5021,4184.5,3532.5,4182.913) polygon(4410.0983,4144.5,4412.5,4139.4783,4414.9017,4144.5,4412.5,4146.8016) polygon(3948.6869,4072.5,3956.5,4064.8309,3964.0912,4072.5,3956.5,4080.1848) polygon(3843.8419,4048.5,3844.5,4047.0522,3845.5342,4048.5,3844.5,4049.5342) polygon(3874.8068,4040.5,3876.5,4039.0487,3878.677,4040.5,3876.5,4042.2928) polygon(3819.0015,4040.5,3820.5,4039.3761,3821.5217,4040.5,3820.5,4041.6831) polygon(3891.6902,4032.5,3892.5,4026.022,3893.1478,4032.5,3892.5,4033.0398) polygon(3945.2935,4024.5,3948.5,4022.4749,3951.998,4024.5,3948.5,4027.4598) polygon(3919.8522,4024.5,3924.5,4017.8602,3929.1478,4024.5,3924.5,4026.8239) polygon(3883.7802,4024.5,3884.5,4022.8805,3890.9781,4024.5,3884.5,4025.3098) polygon(3905.9601,4016.5,3908.5,4008.8805,3916.5,4013.7292,3922.5956,4016.5,3916.5,4020.3098,3909.7956,4024.5,3908.5,4025.4254,3906.3406,4024.5) polygon(3870.0219,4016.5,3876.5,4013.261,3878.1195,4016.5,3876.5,4017.2197) polygon(3819.5951,4016.5,3820.5,4011.674,3822.913,4016.5,3820.5,4018.3098) polygon(4058.8944,4008.5,4060.5,4006.8944,4061.8223,4008.5,4060.5,4009.7488) polygon(3962.323,4008.5,3964.5,4005.7292,3966.1932,4008.5,3964.5,4012.3098) polygon(3920.9247,4008.5,3924.5,4004.2747,3927.4049,4008.5,3924.5,4015.1398) polygon(3829.261,4008.5,3836.5,4007.2935,3841.326,4008.5,3841.3043,4016.5,3836.5,4020.618,3830.7348,4016.5) polygon(3802.1761,4008.5,3804.5,4004.2747,3807.4049,4008.5,3804.5,4012.7253) polygon(3779.0015,4008.5,3780.5,4004.0044,3781.683,4008.5,3780.5,4010.3732) polygon(4043.3864,4000.5,4044.5,3999.1838,4046.3098,4000.5,4044.5,4001.4049) polygon(4027.5746,4000.5,4028.5,3999.2043,4029.0398,4000.5,4028.9319,4008.5,4028.5,4008.9628,4027.4203,4008.5) polygon(3877.8433,4000.5,3884.5,3994.751,3891.9399,4000.5,3891.4693,4008.5,3884.5,4015.0822,3877.0951,4008.5) polygon(3810.4317,4000.5,3812.5,3999.0522,3814.913,4000.5,3812.5,4001.7065) polygon(4031.8522,3992.5,4036.5,3986.6902,4039.5985,3992.5,4036.5,3995.234) polygon(4018.4681,3992.5,4020.5,3990.4681,4024.3098,3992.5,4020.5,3995.5479) polygon(3863.9601,3992.5,3860.5,3986.5684,3857.5342,3992.5,3860.5,3994.2301) polygon(3765.261,3984.5,3772.5,3982.087,3780.5,3982.087,3783.3956,3984.5,3780.5,3986.3098,3772.5,3986.3098) polygon(4057.9602,3976.5,4060.5,3974.9761,4062.4049,3976.5,4060.5,3978.8445) polygon(3916.6268,3976.5,3916.5,3976.1195,3908.5,3973.3645,3901.0889,3976.5,3908.5,3980.382,3916.5,3977.0073) polygon(3830.4469,3976.5,3828.5,3975.9159,3827.1522,3976.5,3828.5,3977.4734) polygon(4018.3406,3968.5,4012.5,3967.3319,4009.5797,3968.5,4012.5,3972.0044) polygon(3978.8805,3960.5,3972.5,3958.3732,3971.0821,3960.5,3972.5,3962.0951) polygon(4015.6902,3936.5,4012.5,3934.677,4009.3098,3936.5,4012.5,3938.323) polygon(4015.3761,3920.5,4012.5,3917.1163,4009.6239,3920.5,4012.5,3923.6957) polygon(3732.5895,3920.5,3732.5,3920.4338,3732.3309,3920.5,3732.5,3920.8805) polygon(3659.3863,3912.5,3660.5,3905.261,3661.4652,3912.5,3660.5,3914.913) polygon(4020.0373,3896.5,4020.5,3894.3406,4026.978,3896.5,4020.5,3896.9319) polygon(3653.8603,3896.5,3660.5,3893.1801,3668.5,3889.3656,3675.0399,3896.5,3670.1056,3904.5,3668.5,3905.9049,3661.0073,3904.5,3660.5,3904.2463) polygon(4023.0032,3888.5,4028.5,3884.6522,4036.1956,3888.5,4028.5,3896.1956) polygon(3982.2643,3888.5,3980.5,3887.4186,3978.7357,3888.5,3980.5,3894.087) polygon(3650.1555,3888.5,3652.5,3880.8805,3655.0399,3888.5,3652.5,3894.5956) polygon(4005.6902,3880.5,4004.5,3879.7065,4003.8199,3880.5,4004.5,3882.8805) polygon(4050.8944,3872.5,4052.5,3870.4565,4054.1056,3872.5,4052.5,3874.3732) polygon(3625.766,3848.5,3628.5,3842.6902,3635.1397,3848.5,3636.5,3853.261,3642.9781,3856.5,3636.5,3859.739,3628.5,3857.2198,3627.9601,3856.5) polygon(4019.7802,3840.5,4020.5,3838.8805,4021.4254,3840.5,4020.5,3840.9983) polygon(3652.7174,3824.5,3652.5,3824.2463,3652.4105,3824.5,3652.5,3824.6902) polygon(3611.8522,3824.5,3612.5,3822.3406,3613.2198,3824.5,3613.5342,3832.5,3612.5,3833.5342,3611.6484,3832.5) polygon(4026.4565,3808.5,4028.5,3807.0015,4034.1195,3808.5,4028.5,3810.2291) polygon(3956.6522,3792.5,3964.5,3787.2681,3972.3478,3792.5,3964.5,3798.1056) polygon(3584.7537,3792.5,3588.5,3790.4565,3592.9956,3792.5,3588.5,3794.5435) polygon(3978.7709,3784.5,3980.5,3780.7537,3981.9049,3784.5,3980.5,3786.5435) polygon(3538.0538,3784.5,3540.5,3782.5634,3544.7253,3784.5,3540.5,3787.234) polygon(4003.6484,3776.5,4004.5,3775.0522,4005.4049,3776.5,4007.5643,3784.5,4004.5,3787.5643,3996.5,3786.5319,3994.7072,3784.5,3996.5,3782.8959) polygon(3986.4317,3768.5,3988.5,3767.7761,3989.4652,3768.5,3988.5,3769.2239) polygon(3969.2888,3760.5,3972.5,3754.8805,3974.1056,3760.5,3972.5,3762.5435) polygon(3952.6902,3760.5,3956.5,3758.8959,3960.3098,3760.5,3956.5,3762.677) polygon(3596.0373,3760.5,3596.5,3759.2044,3597.2198,3760.5,3596.5,3761.7956) polygon(3600.6902,3752.5,3604.5,3749.7292,3609.5797,3752.5,3604.5,3755.0399) polygon(3985.6902,3744.5,3988.5,3743.2512,3990.3732,3744.5,3988.5,3746.1056) polygon(3968.8681,3744.5,3972.5,3737.6902,3977.0399,3744.5,3972.5,3751.3098) polygon(3580.0681,3744.5,3580.5,3741.261,3581.3098,3744.5,3580.5,3745.4254) polygon(3936.8805,3736.5,3940.5,3732.8805,3942.1087,3736.5,3940.5,3739.3956) polygon(3598.1761,3736.5,3604.5,3729.8433,3609.999,3736.5,3604.5,3741.999) polygon(3938.3406,3720.5,3940.5,3719.8522,3941.3098,3720.5,3940.5,3722.6594) polygon(3899.3863,3712.5,3892.5,3708.7699,3889.6122,3712.5,3892.5,3716.0809) polygon(3874.8805,3712.5,3868.5,3710.3732,3866.5368,3712.5,3868.5,3713.7761,3876.4105,3720.5,3876.5,3720.5585,3876.6171,3720.5,3876.5,3718.9781) polygon(3576.7537,3712.5,3580.5,3709.6902,3584.2463,3712.5,3580.5,3713.9049) polygon(3930.8913,3704.5,3932.5,3703.2935,3936.1195,3704.5,3935.9049,3712.5,3932.5,3718.5531,3924.5,3718.1195,3916.5,3719.3098,3908.7174,3712.5,3916.5,3708.6087,3924.5,3710.2522) polygon(3836.6268,3704.5,3836.5,3704.4338,3836.4565,3704.5,3836.5,3704.5724) polygon(3585.6902,3704.5,3588.5,3698.8805,3594.1195,3704.5,3588.5,3708.2463) polygon(3946.8913,3696.5,3948.5,3695.3863,3949.7065,3696.5,3948.5,3700.1195) polygon(3617.1135,3696.5,3620.5,3694.5951,3628.1195,3696.5,3620.5,3699.8865) polygon(3590.8805,3696.5,3596.5,3695.0015,3598.5435,3696.5,3596.5,3702.1195) polygon(3921.1135,3688.5,3924.5,3687.0486,3926.0239,3688.5,3927.971,3696.5,3924.5,3700.6652,3921.3761,3696.5) polygon(3585.2888,3680.5,3588.5,3677.6902,3596.5,3679.8522,3598.1195,3680.5,3596.5,3680.9983,3588.5,3683.3098) polygon(3923.1146,3672.5,3924.5,3670.4681,3925.8251,3672.5,3924.5,3673.9514) polygon(3710.2975,3672.5,3708.5,3669.8854,3705.6239,3672.5,3708.5,3674.5544) polygon(3603.8522,3672.5,3604.5,3671.7802,3610.9781,3672.5,3604.5,3674.1195) polygon(3819.0522,3664.5,3812.5,3659.0399,3808.8599,3664.5,3812.5,3669.9601) polygon(3575.8837,3664.5,3580.5,3658.4632,3587.6344,3664.5,3580.5,3668.2371) polygon(3839.0522,3656.5,3844.5,3653.4734,3852.5,3652.5951,3856.9627,3656.5,3852.5,3662.1798,3848.2463,3664.5,3844.5,3666.7478,3840.0044,3664.5) polygon(3685.3344,3656.5,3684.5,3653.5797,3683.1522,3656.5,3682.9781,3664.5,3684.5,3664.6384,3692.3616,3672.5,3691.4049,3680.5,3692.5,3681.5951,3698.6377,3688.5,3692.5,3694.3146,3687.3098,3696.5,3692.5,3697.884,3694.1609,3696.5,3700.5,3689.8967,3706.087,3688.5,3700.5,3687.2107,3693.2301,3680.5,3692.6171,3672.5,3692.5,3672.2826,3684.7174,3664.5) polygon(3553.6601,3656.5,3556.5,3654.097,3558.9991,3656.5,3556.5,3659.3399) polygon(3875.9601,3648.5,3876.5,3645.261,3877.2198,3648.5,3877.1581,3656.5,3876.5,3658.913,3869.261,3656.5) polygon(3729.6902,3648.5,3724.5,3642.5683,3717.5797,3648.5,3724.5,3650.2301) polygon(3571.4658,3648.5,3572.5,3646.8913,3573.4652,3648.5,3572.5,3650.913) polygon(3816.2747,3640.5,3820.5,3637.766,3828.5,3640.0017,3829.2198,3640.5,3828.5,3646.9781,3820.5,3646.3098) polygon(3654.2643,3640.5,3660.5,3636.1119,3666.1418,3640.5,3664.7699,3648.5,3665.326,3656.5,3660.5,3660.1195,3656.9956,3664.5,3652.5,3666.2291,3649.8702,3672.5,3644.5,3680.4276,3636.5,3674.1195,3630.1195,3680.5,3636.5,3681.8433,3641.999,3688.5,3636.5,3692.4525,3628.5,3696.2826,3625.6328,3688.5,3620.5,3682.4049,3613.9985,3688.5,3612.5,3691.3098,3604.5,3689.2198,3604.0017,3688.5,3604.5,3686.8805,3607.0522,3680.5,3612.5,3672.7174,3612.8805,3672.5,3620.5,3666.4044,3628.5,3669.6044,3632.146,3664.5,3628.5,3662.3732,3623.8015,3656.5,3627.7761,3648.5,3628.5,3647.0522,3630.3098,3648.5,3636.5,3654.0024,3640.2463,3656.5,3644.5,3659.0522,3648.146,3656.5,3652.5,3650.4044,3653.1801,3648.5) polygon(3611.4203,3640.5,3612.5,3639.9111,3620.5,3636.382,3625.0515,3640.5,3620.5,3643.482,3613.8854,3648.5,3615.5478,3656.5,3619.9049,3664.5,3612.5,3672.3986,3607.3488,3664.5,3609.4522,3656.5,3608.6902,3648.5) polygon(3833.9179,3632.5,3836.5,3629.766,3840.0753,3632.5,3836.5,3635.8199) polygon(3595.3863,3632.5,3596.5,3631.4658,3603.739,3632.5,3599.3098,3640.5,3596.5,3643.3098,3594.8944,3640.5) polygon(3810.087,3624.5,3812.5,3623.2935,3813.9478,3624.5,3812.5,3631.739) polygon(3787.5746,3624.5,3788.5,3624.0373,3789.2198,3624.5,3789.2198,3632.5,3788.5,3633.0399,3788.0017,3632.5) polygon(3686.087,3624.5,3692.5,3620.6522,3697.9969,3624.5,3692.5,3627.4598) polygon(3655.0786,3624.5,3660.5,3619.4658,3664.2094,3624.5,3660.5,3627.8561) polygon(3761.9601,3616.5,3764.5,3613.7292,3768.3098,3616.5,3764.5,3618.8445) polygon(3682.3406,3616.5,3684.5,3614.8805,3685.5797,3616.5,3684.5,3619.739) polygon(3594.0951,3616.5,3596.5,3610.087,3599.2484,3616.5,3596.5,3618.7634) polygon(3795.2512,3608.5,3796.5,3605.6902,3798.1056,3608.5,3796.5,3611.3098) polygon(3699.2044,3608.5,3700.5,3605.261,3702.1195,3608.5,3708.5,3610.8202,3716.5,3611.3358,3724.5,3608.6902,3725.0073,3608.5,3732.5,3605.2888,3734.7478,3608.5,3740.5,3612.0951,3748.5,3616.0373,3749.2198,3616.5,3751.5985,3624.5,3756.5,3628.001,3764.5,3628.5845,3769.9214,3632.5,3772.5,3636.6902,3777.5797,3640.5,3778.677,3648.5,3780.5,3650.6268,3783.3358,3648.5,3788.5,3645.766,3794.4681,3640.5,3796.5,3637.9601,3799.0399,3640.5,3804.5,3646.4565,3808.9956,3648.5,3812.5,3651.4203,3820.5,3652.8805,3822.913,3656.5,3824.1195,3664.5,3828.5,3668.8805,3835.739,3672.5,3836.5,3672.6087,3840.0638,3680.5,3844.5,3687.3761,3849.5934,3680.5,3849.2935,3672.5,3852.5,3667.6902,3857.6044,3664.5,3860.5,3662.6902,3861.9478,3664.5,3868.5,3671.0522,3875.739,3672.5,3868.5,3676.1195,3862.6594,3680.5,3860.5,3681.4254,3855.5478,3688.5,3860.5,3693.002,3866.0024,3688.5,3868.5,3684.0044,3872.8805,3680.5,3876.5,3673.261,3876.8805,3672.5,3884.5,3669.4522,3886.2928,3672.5,3892.5,3679.5348,3893.7065,3680.5,3893.1478,3688.5,3892.5,3689.7956,3887.7112,3696.5,3892.5,3698.4719,3900.5,3701.1801,3902.9462,3704.5,3907.739,3712.5,3906.8239,3720.5,3900.5,3727.9399,3899.7675,3728.5,3900.5,3729.8603,3901.6902,3728.5,3908.5,3723.5474,3911.7046,3728.5,3916.5,3735.2935,3923.2935,3728.5,3924.5,3723.674,3925.8162,3728.5,3930.3098,3736.5,3932.5,3739.0031,3937.3098,3744.5,3932.5,3747.998,3924.5,3751.1397,3923.6344,3752.5,3924.5,3753.1801,3932.5,3755.5951,3937.4522,3752.5,3940.5,3748.146,3948.5,3750.0024,3949.7488,3752.5,3948.5,3755.7112,3943.7112,3760.5,3948.5,3766.087,3949.7065,3768.5,3948.5,3773.326,3948.1033,3776.5,3948.5,3777.0601,3951.674,3776.5,3956.5,3775.2935,3964.5,3773.2888,3972.5,3771.9485,3978.677,3776.5,3972.5,3780.618,3964.5,3779.3098,3961.0399,3784.5,3956.5,3792.2826,3956.4308,3792.5,3956.5,3792.5761,3963.1033,3800.5,3964.1956,3808.5,3964.5,3808.5895,3972.4105,3816.5,3972.5,3816.5662,3974.0219,3816.5,3972.5,3816.1195,3964.8805,3808.5,3971.2044,3800.5,3972.5,3794.0219,3980.5,3799.0522,3981.9478,3800.5,3987.2484,3808.5,3983.739,3816.5,3982.1195,3824.5,3988.5,3826.0951,3990.8202,3824.5,3996.5,3821.3761,4004.3098,3824.5,3998.8445,3832.5,4001.9478,3840.5,3998.5683,3848.5,3996.5,3853.326,3989.261,3848.5,3988.5,3848.2463,3988.2826,3848.5,3988.5,3848.8805,3994.5956,3856.5,3996.5,3857.8603,3998.4044,3856.5,4004.5,3853.1135,4012.5,3856.0017,4020.5,3855.4658,4021.9478,3856.5,4025.306,3864.5,4020.5,3869.7065,4016.0373,3864.5,4012.5,3857.4254,4007.998,3864.5,4012.5,3869.002,4016.7753,3872.5,4020.5,3879.2044,4021.5797,3880.5,4020.5,3882.6594,4017.5797,3888.5,4012.5,3890.2928,4004.5,3895.9927,4003.9927,3896.5,3996.5,3902.1195,3996.1338,3904.5,3996.5,3906.4044,3996.914,3904.5,4004.5,3896.5692,4011.7699,3904.5,4012.5,3905.9601,4020.5,3909.9058,4024.1318,3912.5,4024.9556,3920.5,4028.5,3927.2935,4029.9478,3928.5,4028.5,3935.739,4028.1956,3936.5,4028.5,3937.261,4030.5684,3944.5,4028.5,3951.739,4020.5,3947.3098,4012.5,3948.8239,4004.5,3951.1397,4001.326,3952.5,4004.5,3953.3656,4012.5,3955.8419,4020.5,3959.4203,4028.5,3952.7537,4031.234,3960.5,4028.5,3964.3732,4021.4254,3968.5,4027.1521,3976.5,4020.5,3980.4308,4012.5,3978.7478,4004.5,3980.0239,4000.7906,3976.5,3996.5,3972.2094,3990.0929,3968.5,3988.5,3966.9071,3987.5266,3968.5,3988.5,3970.0929,3992.2094,3976.5,3996.5,3982.323,3998.5319,3984.5,3999.2239,3992.5,4004.5,4000.0372,4004.881,4000.5,4004.5,4006.978,3996.5,4006.1195,3995.8199,4008.5,3988.5,4012.2955,3980.5,4011.0822,3978.1761,4008.5,3980.5,4002.6902,3984.0044,4000.5,3980.5,3996.9956,3977.6902,3992.5,3972.5,3989.306,3964.5,3989.7065,3957.558,3984.5,3956.5,3983.1398,3948.5,3984.3098,3947.739,3984.5,3940.5,3986.1086,3936.3913,3992.5,3940.5,3996.0951,3944.9049,4000.5,3940.5,4004.2094,3932.5,4003.0652,3928.6522,4000.5,3927.9601,3992.5,3924.5,3990.424,3919.3098,3992.5,3918.5683,4000.5,3916.5,4002.1086,3908.5,4008.3617,3908.3098,4008.5,3900.5,4012.4049,3894.2522,4008.5,3895.674,4000.5,3900.5,3996.8805,3902.2522,3992.5,3900.5,3991.7035,3898.9071,3992.5,3892.5,3999.5479,3887.8015,3992.5,3884.5,3989.4049,3882.249,3992.5,3876.5,3999.1567,3871.3956,4000.5,3868.5,4001.5342,3862.7634,4008.5,3860.5,4016.1956,3860.3098,4016.5,3852.5,4023.442,3848.3348,4016.5,3845.558,4008.5,3844.5,4007.1398,3841.5951,4000.5,3844.5,3995.3358,3846.6268,3992.5,3848.6522,3984.5,3844.5,3982.903,3842.3146,3984.5,3836.5,3990.6377,3832.3098,3992.5,3828.5,3995.5479,3820.5,3998.1056,3816.1401,3992.5,3812.5,3989.6512,3805.2198,3992.5,3804.5,3993.5797,3803.4203,3992.5,3796.5,3989.5342,3790.6268,3984.5,3788.5,3982.9049,3782.4719,3976.5,3783.1208,3968.5,3780.5,3962.5435,3774.8805,3960.5,3772.5,3959.8199,3771.8199,3960.5,3772.5,3961.6902,3776.1319,3968.5,3772.5,3973.4525,3764.5,3975.2239,3756.5,3969.7065,3748.5,3969.4049,3747.2935,3968.5,3748.5,3966.087,3753.2888,3960.5,3751.413,3952.5,3755.4203,3944.5,3748.6087,3936.5,3748.5,3936.2463,3748.4105,3936.5,3743.3098,3944.5,3743.998,3952.5,3740.5,3956.3478,3732.8044,3952.5,3732.5,3950.9781,3724.5,3948.0239,3720.3542,3944.5,3716.5,3940.8599,3709.9478,3944.5,3712.7753,3952.5,3708.5,3954.9049,3706.4749,3952.5,3706.8913,3944.5,3700.5,3938.1087,3698.4317,3936.5,3700.5,3929.261,3701.0073,3928.5,3700.6171,3920.5,3708.5,3913.1801,3709.0601,3912.5,3708.5,3911.442,3700.5,3909.7488,3696.7209,3904.5,3700.5,3899.7761,3703.1208,3896.5,3700.5,3892.4049,3695.8199,3896.5,3692.5,3898.9462,3687.2239,3904.5,3690.1195,3912.5,3684.5,3919.9927,3683.0015,3912.5,3681.4734,3904.5,3677.7516,3896.5,3677.1801,3888.5,3677.5307,3880.5,3679.3683,3872.5,3676.5,3867.6239,3669.5342,3872.5,3672.1195,3880.5,3668.5,3885.326,3661.261,3880.5,3660.5,3880.3829,3652.5,3879.9927,3644.5,3876.1195,3643.4658,3872.5,3644.5,3868.8805,3652.5,3869.2888,3658.087,3864.5,3660.5,3860.8805,3663.0031,3856.5,3660.5,3855.1522,3654.6594,3856.5,3652.5,3857.7956,3646.0219,3856.5,3644.5,3856.2463,3637.8603,3848.5,3640.0373,3840.5,3636.5,3835.5478,3628.8805,3832.5,3632.6268,3824.5,3636.5,3819.8522,3638.5951,3816.5,3636.5,3814.9037,3632.3098,3816.5,3628.5,3819.5478,3620.5,3820.1319,3614.4469,3816.5,3620.5,3812.6087,3626.2522,3808.5,3620.5,3805.1163,3612.5,3804.3478,3610.0951,3800.5,3612.5,3797.002,3619.5746,3792.5,3620.5,3786.0219,3620.6014,3784.5,3620.5,3784.2826,3612.5,3780.3732,3604.5,3778.3098,3603.6484,3776.5,3604.5,3771.674,3612.5,3772.9247,3617.2935,3768.5,3615.8015,3760.5,3614.6902,3752.5,3614.4047,3744.5,3617.7292,3736.5,3620.5,3732.6902,3628.5,3728.7174,3628.6522,3728.5,3628.5,3728.3829,3620.5,3726.9037,3616.7753,3728.5,3612.5,3731.7065,3607.6902,3728.5,3608.0044,3720.5,3604.5,3718.3098,3602.9071,3720.5,3596.5,3726.9071,3593.1439,3720.5,3590.8202,3712.5,3596.5,3705.558,3604.5,3705.8603,3609.261,3704.5,3612.5,3703.4203,3613.5797,3704.5,3620.5,3707.9601,3625.6902,3704.5,3628.5,3697.0073,3636.5,3701.1258,3640.6781,3696.5,3644.5,3691.1146,3648.9247,3688.5,3644.6902,3680.5,3652.5,3677.029,3658.7709,3672.5,3660.5,3668.0044,3664.9956,3672.5,3668.5,3676.0044,3675.9927,3680.5,3676.5,3682.0219,3676.6087,3680.5,3676.5,3680.3478,3669.9601,3672.5,3668.5,3669.9969,3663.0031,3664.5,3668.5,3658.087,3669.2935,3656.5,3675.9601,3648.5,3672.6268,3640.5,3671.413,3632.5,3676.5,3626.7348,3679.826,3632.5,3684.5,3635.538,3692.5,3635.7761,3697.1801,3632.5,3700.5,3626.6902,3708.5,3626.2522,3716.5,3627.3761,3722.9049,3632.5,3724.5,3637.6044,3732.5,3634.4632,3740.5,3638.4565,3745.9601,3632.5,3744.2747,3624.5,3740.5,3621.5342,3732.5,3618.5683,3724.5,3621.7065,3716.5,3620.0753,3708.5,3622.7478,3700.5,3622.7478,3695.694,3616.5) polygon(3611.0951,3608.5,3612.5,3607.0951,3614.9976,3608.5,3615.3098,3616.5,3612.5,3618.2291,3610.6268,3616.5) polygon(3736.2247,3600.5,3740.5,3599.0201,3744.7753,3600.5,3740.5,3603.7065) polygon(3702.8805,3600.5,3708.5,3598.2522,3714.1195,3600.5,3708.5,3604.2463) polygon(3666.4317,3600.5,3668.5,3598.8913,3676.5,3598.323,3684.1195,3600.5,3676.5,3602.677,3672.2094,3608.5,3668.5,3612.4155,3660.5,3611.3098,3658.2522,3608.5,3660.5,3605.6902) polygon(3683.2935,3592.5,3684.5,3588.8805,3692.5,3590.8913,3694.3098,3592.5,3692.5,3595.3956,3684.5,3599.739) polygon(3689.6808,3568.5,3692.5,3565.7893,3695.2107,3568.5,3692.5,3572.0239) polygon(3640.6522,3568.5,3644.5,3566.4749,3646.249,3568.5,3644.5,3571.2484) polygon(3666.6902,3560.5,3668.5,3558.087,3669.6137,3560.5,3668.5,3562.1087) polygon(3816.9362,3536.5,3820.5,3533.8696,3828.5,3533.6672,3831.7493,3536.5,3828.5,3540.0638,3820.5,3540.1826) polygon(3635.317,3536.5,3636.5,3534.4565,3638.9976,3536.5,3636.5,3539.7112) polygon(4139.0883,4648.5,4140.5,4647.0883,4141.9117,4648.5,4140.5,4654.5) polygon(4007.9783,4608.5,4012.5,4603.9783,4016.5,4608.5,4012.5,4612.66) polygon(4176.5,4552.5,4180.5,4548.6482,4184.3518,4552.5,4184.5,4560.5,4180.5,4564.674,4175.7,4560.5) polygon(3511.6111,4544.5,3516.5,4540.3096,3520.5,4544.5,3516.5,4548.5) polygon(4022.3334,4536.5,4028.5,4530.4592,4034.1923,4536.5,4028.5,4542.5408) polygon(3522.2778,4392.5,3524.5,4390.1471,3532.5,4385.2742,3539.3923,4392.5,3532.5,4399.0883,3524.5,4395.1666) polygon(3171.3571,4392.5,3172.5,4391.3572,3173.9545,4392.5,3172.5,4394.5) polygon(3706.9,4376.5,3708.5,4375.4333,3709.5,4376.5,3708.5,4378.1) polygon(4325.6282,4280.5,4332.5,4273.8827,4340.0493,4280.5,4332.5,4287.1173) polygon(3569.8333,4200.5,3572.5,4199.8334,3573.3,4200.5,3572.5,4201.6428) polygon(3684.5,4184.5,3684.5,4184.5,3684.5,4184.5,3684.5,4184.5) polygon(3527.7941,4168.5,3532.5,4163.5,3540.5,4163.6305,3548.5,4162.3182,3554.6818,4168.5,3556.5,4169.1061,3564.125,4176.5,3564.5,4179.1666,3567.3235,4184.5,3565.7308,4192.5,3564.5,4196.5,3563.0455,4200.5,3556.5,4206.5,3548.5,4206.2142,3540.5,4202.5,3537.3,4200.5,3532.5,4198.6538,3524.5,4193.3,3523.1667,4192.5,3524.5,4190.9,3525.6852,4184.5,3524.5,4179.1666,3521.3,4176.5,3524.5,4174.7222) polygon(3778.7222,4152.5,3780.5,4150.2142,3781.9545,4152.5,3780.5,4154.1) polygon(3937.8333,4144.5,3940.5,4143,3942.5,4144.5,3940.5,4147.5) polygon(3657.8333,4144.5,3660.5,4143.3572,3668.5,4144.5,3668.5,4144.5,3668.5,4144.5,3660.5,4146.5) polygon(4408.0862,4136.5,4412.5,4131.38,4417.62,4136.5,4419.1086,4144.5,4412.5,4150.8334,4405.8914,4144.5) polygon(3996.5,4128.5,3996.5,4128.5,3996.5,4128.5,3996.5,4128.5) polygon(3972.5,4128.5,3972.5,4128.5,3972.5,4128.5,3972.5,4128.5) polygon(3931.7,4128.5,3932.5,4126.9,3933.5,4128.5,3932.5,4129.8334) polygon(3963.3571,4120.5,3964.5,4119.6111,3966.5,4120.5,3964.5,4121.5) polygon(3923.7727,4120.5,3924.5,4119.7727,3926.1,4120.5,3924.5,4121.3) polygon(3883.0455,4120.5,3884.5,4118.9,3887.1667,4120.5,3892.5,4128.5,3892.5,4128.5,3892.5,4128.5,3884.5,4128.5,3884.5,4128.5) polygon(4068.5,4112.5,4068.5,4112.5,4068.5,4112.5,4068.5,4112.5) polygon(4051.5,4104.5,4052.5,4102.9,4054.1,4104.5,4052.5,4105.5) polygon(3914.5,4104.5,3916.5,4103.6111,3919.1667,4104.5,3916.5,4105.5) polygon(4100.5,4096.5,4100.5,4096.5,4100.5,4096.5,4100.5,4096.5) polygon(4026.6538,4096.5,4028.5,4093.5,4030.6818,4096.5,4028.5,4099.1666) polygon(3884.5,4096.5,3884.5,4096.5,3884.5,4096.5,3884.5,4096.5) polygon(3850.9,4096.5,3852.5,4094.9,3853.5,4096.5,3852.5,4097.1666) polygon(3787.7,4096.5,3788.5,4095.7,3789.3889,4096.5,3788.5,4097.1666) polygon(3772.5,4096.5,3772.5,4096.5,3772.5,4096.5,3772.5,4096.5) polygon(4058.9,4088.5,4060.5,4085.3,4063.1666,4088.5,4060.5,4091.1666) polygon(3820.5,4088.5,3820.5,4088.5,3820.5,4088.5,3820.5,4088.5) polygon(3747.9286,4088.5,3748.5,4084.5,3749.3889,4088.5,3748.5,4090.1) polygon(3795.5,4080.5,3796.5,4079.3572,3799.1667,4080.5,3796.5,4081.8334) polygon(3778.7857,4080.5,3780.5,4077.0714,3782.9,4080.5,3780.5,4083.9286) polygon(3737.8333,4080.5,3740.5,4079.3572,3744.5,4080.5,3740.5,4081.0714) polygon(4099.3572,4072.5,4100.5,4071.3572,4101.6428,4072.5,4100.5,4074.1) polygon(3886.5,4072.5,3884.5,4069.8334,3881.5,4072.5,3884.5,4075.9286) polygon(4071.4091,4064.5,4076.5,4060.1923,4080.8077,4064.5,4080.5,4072.5,4076.5,4073.2273,4075.5,4072.5) polygon(3901.9545,4064.5,3900.5,4063.2693,3898.5,4064.5,3900.5,4065.4412) polygon(3847.4091,4064.5,3844.5,4062.5,3839.1667,4064.5,3844.5,4072.5) polygon(3796.5,4064.5,3796.5,4064.5,3796.5,4064.5,3796.5,4064.5) polygon(3698.2143,4056.5,3700.5,4054.7222,3702.2778,4056.5,3700.5,4058.2778) polygon(3602.1,4056.5,3604.5,4054.6538,3607.5,4056.5,3604.5,4058.5) polygon(4087.5,4048.5,4092.5,4042.7858,4096.9445,4048.5,4096.5,4056.5,4092.5,4058.5,4091.7727,4056.5) polygon(3998.7857,4048.5,3996.5,4046.5,3995.3571,4048.5,3996.5,4052.5) polygon(3667.7,4048.5,3668.5,4047.1666,3669.5,4048.5,3668.5,4050.1) polygon(3644.5,4048.5,3644.5,4048.5,3652.5,4048.5,3652.5,4048.5,3652.5,4048.5,3644.5,4048.5) polygon(3733.6429,4040.5,3740.5,4035.1666,3745.8333,4040.5,3740.5,4047.3572) polygon(3724.5,4040.5,3724.5,4040.5,3724.5,4040.5,3724.5,4040.5) polygon(3612.5,4040.5,3612.5,4040.5,3612.5,4040.5,3612.5,4040.5) polygon(3580.5,4040.5,3580.5,4040.5,3580.5,4040.5,3580.5,4040.5) polygon(3679.1667,4032.5,3684.5,4030.2142,3686.5,4032.5,3684.5,4035.7) polygon(3596.5,4032.5,3596.5,4032.5,3596.5,4032.5,3596.5,4032.5) polygon(3707.3571,4024.5,3708.5,4020.5,3710.1,4024.5,3708.5,4025.3889) polygon(4103.4091,4016.5,4108.5,4009.5,4114.7222,4016.5,4108.5,4020) polygon(4084.5,4016.5,4076.5,4015.8846,4075.7727,4016.5,4076.5,4017.1666) polygon(3668.5,4016.5,3668.5,4016.5,3668.5,4016.5,3674.2143,4024.5,3668.5,4028.1364,3665.1667,4024.5) polygon(3646.5,4016.5,3652.5,4014.7858,3657.3,4016.5,3652.5,4018.3462) polygon(3672.5,4008.5,3676.5,4004.5,3682.9,4008.5,3676.5,4011.1666) polygon(3642.1,4008.5,3644.5,4004.5,3646.2143,4008.5,3644.5,4014.5) polygon(3515.6111,4008.5,3516.5,4007.3572,3517.2273,4008.5,3516.5,4010.1) polygon(4098.5,4000.5,4092.5,3997.0714,4088.5,4000.5,4092.5,4002.9) polygon(3660.5,4000.5,3660.5,4000.5,3660.5,4000.5,3660.5,4000.5) polygon(3596.5,4000.5,3596.5,4000.5,3596.5,4000.5,3596.5,4000.5) polygon(3588.5,3992.5,3588.5,3992.5,3588.5,3992.5,3588.5,3992.5) polygon(3387.0454,3992.5,3388.5,3991.2693,3389.5,3992.5,3388.5,3994.5) polygon(4228.5,3984.5,4228.5,3984.5,4228.5,3984.5,4228.5,3984.5) polygon(4156.5,3984.5,4156.5,3984.5,4156.5,3984.5,4156.5,3984.5) polygon(3537.8333,3984.5,3540.5,3982.2142,3541.7308,3984.5,3540.5,3988.5) polygon(4172.5,3976.5,4172.5,3976.5,4172.5,3976.5,4172.5,3976.5) polygon(4135.5,3976.5,4140.5,3970.7858,4143.1666,3976.5,4140.5,3979.3572) polygon(3616.8077,3976.5,3620.5,3970.5,3625.3,3976.5,3620.5,3982.5) polygon(3595.6111,3976.5,3596.5,3975.5,3604.5,3975.1666,3605.5,3976.5,3604.5,3977.5,3596.5,3979.1666) polygon(4093.6428,3968.5,4092.5,3965.8334,4091.8846,3968.5,4092.5,3976.5) polygon(3624.5,3968.5,3628.5,3966.5,3633.8333,3968.5,3628.5,3971.1666) polygon(3570.9,3968.5,3572.5,3967.3572,3573.1667,3968.5,3572.5,3969.6428) polygon(3535.1667,3968.5,3540.5,3966.7222,3542.2778,3968.5,3540.5,3970.7858) polygon(3524.5,3968.5,3524.5,3968.5,3524.5,3968.5,3524.5,3968.5) polygon(4118.5,3960.5,4124.5,3955.7,4129.3,3960.5,4124.5,3964.5) polygon(3631.1667,3960.5,3636.5,3954.1,3643.8846,3960.5,3636.5,3967.8846) polygon(3615.8333,3960.5,3620.5,3953.5,3624.8077,3960.5,3620.5,3966.7222) polygon(3588.5,3960.5,3588.5,3960.5,3596.5,3955.7,3599.5,3960.5,3596.5,3962.9,3588.5,3968.5,3588.5,3968.5,3588.5,3968.5) polygon(3546.1,3960.5,3548.5,3957.8333,3550.5,3960.5,3548.5,3962.9) polygon(3508.5,3960.5,3508.5,3960.5,3508.5,3960.5,3508.5,3960.5) polygon(3572.5,3952.5,3572.5,3952.5,3580.5,3952.5,3580.5,3952.5,3580.5,3952.5,3572.5,3952.5) polygon(3353.8333,3952.5,3356.5,3950.5,3358.2778,3952.5,3356.5,3954.2778) polygon(4156.5,3936.5,4156.5,3936.5,4156.5,3936.5,4156.5,3936.5) polygon(3570.7222,3936.5,3572.5,3934.2143,3575.7,3936.5,3572.5,3941.8333) polygon(3547.8333,3936.5,3548.5,3933.8333,3556.5,3934.9,3558.2778,3936.5,3556.5,3939.1667,3548.5,3937.6429) polygon(3523.7727,3928.5,3524.5,3924.5,3525.3,3928.5,3524.5,3930.1) polygon(3631.4091,3920.5,3628.5,3915.1667,3624.9445,3920.5,3623.9286,3928.5,3620.5,3931.5,3612.5,3932.5,3604.5,3928.5,3596.5,3936.5,3604.5,3937.8333,3612.5,3938.5,3620.5,3939.8333,3624.5,3936.5,3628.5,3932.0555,3631.4091,3928.5) polygon(4154.2142,3912.5,4156.5,3909.3,4157.9546,3912.5,4156.5,3913.8333) polygon(3554.2143,3912.5,3556.5,3910.5,3559.7,3912.5,3556.5,3915.7) polygon(3536.5,3912.5,3540.5,3908.5,3542.7857,3912.5,3540.5,3913.9545) polygon(3476.5,3912.5,3476.5,3912.5,3476.5,3912.5,3476.5,3912.5) polygon(3598.7857,3904.5,3596.5,3903.0455,3592.5,3904.5,3596.5,3906.7857) polygon(3562.5,3904.5,3564.5,3900.5,3569.8333,3904.5,3564.5,3907.7) polygon(3468.5,3904.5,3468.5,3904.5,3468.5,3904.5,3468.5,3904.5) polygon(3566.7857,3896.5,3572.5,3890.7857,3579.1667,3896.5,3572.5,3903.1667) polygon(3525.8333,3896.5,3532.5,3889.8333,3540.5,3896.5,3540.5,3896.5,3540.5,3896.5,3539.1667,3904.5,3532.5,3911.1667,3526.7857,3904.5) polygon(3500.5,3896.5,3500.5,3896.5,3500.5,3896.5,3500.5,3896.5) polygon(3452.5,3896.5,3452.5,3896.5,3452.5,3896.5,3452.5,3896.5) polygon(4212.5,3880.5,4212.5,3880.5,4212.5,3880.5,4212.5,3880.5) polygon(3508.5,3880.5,3508.5,3880.5,3516.5,3880.5,3516.5,3880.5,3516.5,3880.5,3508.5,3880.5) polygon(4125.5,3872.5,4124.5,3871.7727,4123.7727,3872.5,4124.5,3874.1) polygon(3492.5,3872.5,3492.5,3872.5,3492.5,3872.5,3492.5,3872.5) polygon(3457.1667,3872.5,3460.5,3869.4231,3464.1364,3872.5,3460.5,3876.9445) polygon(4117.8334,3856.5,4116.5,3854.5,4114.5,3856.5,4116.5,3858.7857) polygon(3428.5,3856.5,3428.5,3856.5,3428.5,3856.5,3428.5,3856.5) polygon(3489.3,3848.5,3492.5,3843.9286,3497.0714,3848.5,3492.5,3852.5) polygon(3474.3667,3848.5,3476.5,3843.9286,3479.7,3848.5,3476.5,3850.9615) polygon(4162.5,3840.5,4164.5,3838.5,4167.1666,3840.5,4164.5,3842.5) polygon(4116.5,3840.5,4108.5,3839.0455,4107.5,3840.5,4108.5,3842.2778) polygon(3457.8333,3840.5,3460.5,3838.7222,3461.8333,3840.5,3460.5,3848.5,3460.5,3848.5,3460.5,3848.5) polygon(4093.5,3832.5,4092.5,3830.5,4092.1,3832.5,4092.5,3833.2273) polygon(3500.5,3832.5,3500.5,3832.5,3500.5,3832.5,3500.5,3832.5) polygon(3451.6111,3832.5,3452.5,3829.8333,3453.5,3832.5,3452.5,3834.1) polygon(3404.5,3832.5,3404.5,3832.5,3404.5,3832.5,3404.5,3832.5) polygon(4160.5,3824.5,4164.5,3823.5,4166.1,3824.5,4164.5,3825.6429) polygon(3483.5,3824.5,3484.5,3820.5,3485.5,3824.5,3484.5,3827.1667) polygon(3252.5,3824.5,3252.5,3824.5,3252.5,3824.5,3252.5,3824.5) polygon(3387.0454,3816.5,3388.5,3814.7222,3390.5,3816.5,3388.5,3820.5) polygon(4163.3572,3808.5,4164.5,3807.7,4165.5,3808.5,4164.5,3809.5) polygon(3457.8333,3808.5,3460.5,3806.9,3468.5,3805.0714,3471.5,3808.5,3476.5,3815.1667,3480.5,3816.5,3476.5,3817.5,3472.5,3824.5,3468.5,3828,3460.5,3826.9,3455.7,3824.5,3460.5,3816.5) polygon(3440.5,3808.5,3444.5,3805.3,3448.5,3808.5,3444.5,3810.5) polygon(3380.5,3808.5,3380.5,3808.5,3380.5,3808.5,3380.5,3808.5) polygon(3526.1,3800.5,3524.5,3798.2143,3522.2143,3800.5,3524.5,3802.5,3531.3571,3808.5,3532.5,3809.6429,3533.1667,3808.5,3532.5,3807.6111) polygon(3488.0555,3800.5,3492.5,3796.5,3499.1667,3800.5,3500.5,3808.5,3500.5,3808.5,3508.5,3816.5,3508.5,3816.5,3508.5,3816.5,3500.5,3821.8333,3494.1,3816.5,3492.5,3815.8333,3487,3808.5) polygon(3393.0714,3800.5,3396.5,3797.8333,3399.9286,3800.5,3396.5,3805.3) polygon(4140.5,3792.5,4140.5,3792.5,4140.5,3792.5,4140.5,3800.5,4140.5,3800.5,4136.5,3808.5,4132.5,3812.5,4129.3,3808.5,4126.2778,3800.5,4132.5,3795.8333) polygon(4124.5,3792.5,4124.5,3792.5,4124.5,3792.5,4124.5,3792.5) polygon(4086.1,3792.5,4084.5,3788.5,4082.5,3792.5,4076.5,3798.5,4074.7222,3800.5,4076.5,3801.7308,4077.4412,3800.5,4084.5,3793.4412,4092,3800.5,4092.5,3802.5,4093.6428,3800.5,4092.5,3799.6111) polygon(3466.7222,3792.5,3468.5,3789.3,3471.7,3792.5,3468.5,3795.1667) polygon(3442.0385,3792.5,3444.5,3789.5909,3448.5,3792.5,3444.5,3797.0714) polygon(3422.5,3792.5,3428.5,3789.8333,3430.5,3792.5,3428.5,3800.5,3428.5,3800.5,3428.5,3800.5) polygon(3510.1,3784.5,3508.5,3783.7,3507.5,3784.5,3508.5,3788.5) polygon(3304.0555,3784.5,3308.5,3781.8333,3311.1667,3784.5,3308.5,3787.8333) polygon(4124.5,3776.5,4124.5,3776.5,4132.5,3775.1667,4140.5,3776.5,4140.5,3776.5,4140.5,3776.5,4132.5,3779.1667,4124.5,3776.5) polygon(3443.1667,3776.5,3444.5,3775.5,3445.5,3776.5,3444.5,3777.5) polygon(3404.5,3776.5,3404.5,3776.5,3404.5,3776.5,3404.5,3776.5) polygon(3436.5,3768.5,3436.5,3768.5,3436.5,3768.5,3436.5,3768.5) polygon(3409.3,3768.5,3412.5,3766.7222,3415.7,3768.5,3412.5,3772.5) polygon(4108.5,3760.5,4108.5,3760.5,4116.5,3756.1923,4122.1,3760.5,4116.5,3766.1,4108.5,3760.5) polygon(4064.5,3760.5,4060.5,3758.5,4059.7,3760.5,4060.5,3761.6429) polygon(3556.8636,3760.5,3556.5,3760.0294,3555.8846,3760.5,3556.5,3761.5) polygon(3428.5,3760.5,3428.5,3760.5,3428.5,3760.5,3428.5,3760.5) polygon(3511.5,3752.5,3508.5,3749.5,3506.7857,3752.5,3508.5,3755.1667,3513.8333,3760.5,3516.5,3763.9286,3519.5,3760.5,3516.5,3757.5) polygon(3459.3571,3752.5,3460.5,3750.9,3468.5,3747.9286,3472.0555,3752.5,3476.5,3756.5,3481.5,3760.5,3476.5,3767.1667,3472.5,3768.5,3468.5,3776.5,3468.5,3776.5,3466.1,3784.5,3460.5,3788.5,3452.5,3788.9445,3449.1667,3784.5,3452.5,3781.1667,3457.5909,3776.5,3460.5,3770.1,3464.5,3768.5,3463.7,3760.5,3460.5,3754.1) polygon(4132.5,3744.5,4132.5,3744.5,4132.5,3744.5,4132.5,3752.5,4132.5,3752.5,4132.5,3752.5) polygon(4140.5,3736.5,4140.5,3736.5,4140.5,3736.5,4140.5,3736.5) polygon(4047.9286,3736.5,4044.5,3734.1,4043,3736.5,4044.5,3738.1) polygon(3372.5,3736.5,3372.5,3736.5,3380.5,3736.5,3380.5,3736.5,3380.5,3736.5,3372.5,3736.5) polygon(4093.3889,3728.5,4100.5,3724.5,4108.5,3728.5,4108.5,3728.5,4116.5,3736.5,4116.5,3736.5,4116.5,3736.5,4108.5,3740.5,4100.5,3738.5,4096.5,3736.5) polygon(3423.7,3728.5,3428.5,3721.6429,3434.5,3728.5,3428.5,3735.3571) polygon(3412.5,3728.5,3412.5,3728.5,3412.5,3728.5,3412.5,3728.5) polygon(4073.3,3720.5,4068.5,3715.7,4066.7858,3720.5,4060.5,3727.8333,4058.9,3728.5,4060.5,3730.1,4068.5,3735.1667,4071.1666,3728.5) polygon(3486.5,3720.5,3484.5,3719.3571,3476.5,3720.5,3481.3,3728.5,3484.5,3730.2778,3490.1,3736.5,3492.5,3739.9286,3500.5,3738.1,3502.1,3736.5,3500.5,3732.5,3496.5,3728.5,3492.5,3727.3571) polygon(3476.5,3720.5,3468.5,3716.5,3460.5,3716.5,3452.5,3719.1667,3449.8333,3720.5,3449.3,3728.5,3452.5,3730.5,3455.1667,3728.5,3460.5,3724.5,3468.5,3726.5) polygon(3415.5,3720.5,3420.5,3716.8636,3427.1667,3720.5,3420.5,3724.9445) polygon(3396.5,3720.5,3396.5,3720.5,3404.5,3720.5,3404.5,3720.5,3404.5,3720.5,3396.5,3720.5) polygon(4132.5,3704.5,4132.5,3704.5,4132.5,3704.5,4132.5,3704.5) polygon(4100.5,3704.5,4100.5,3704.5,4100.5,3704.5,4102.7858,3712.5,4100.5,3714.1,4097.8334,3712.5) polygon(4046.5,3704.5,4044.5,3702.9,4041.8334,3704.5,4036.5,3707.7,4034.5,3712.5,4036.5,3713.9117,4043.0883,3720.5,4044.5,3722.9,4046.3462,3720.5,4044.5,3717.0714,4039.9286,3712.5,4044.5,3706.1) polygon(3501.8333,3704.5,3500.5,3699.1667,3498.9,3704.5,3500.5,3706.5) polygon(3478.5,3704.5,3476.5,3703.4333,3468.5,3704.5,3476.5,3707.1667) polygon(3403.3571,3704.5,3404.5,3703.7,3412.5,3701.8333,3417.3,3704.5,3412.5,3712.5,3412.5,3712.5,3412.5,3712.5,3404.5,3708.5) polygon(3480.1364,3688.5,3476.5,3681.8333,3472.8636,3688.5,3476.5,3690.7222) polygon(3364.5,3688.5,3364.5,3688.5,3364.5,3688.5,3364.5,3688.5) polygon(4076.5,3680.5,4076.5,3680.5,4084.5,3679.3571,4086.1,3680.5,4088.5,3688.5,4084.5,3690.3461,4081.5,3688.5,4076.5,3680.5) polygon(3997.6429,3680.5,3996.5,3672.5,3995.3571,3680.5,3996.5,3681.3) polygon(3354.9,3680.5,3356.5,3678.9,3360.5,3680.5,3356.5,3682.7857) polygon(3308.5,3680.5,3308.5,3680.5,3308.5,3680.5,3308.5,3680.5) polygon(3415.5,3672.5,3420.5,3669.1667,3428.5,3671.5,3429.5,3672.5,3433.3,3680.5,3429.6429,3688.5,3428.5,3692.5,3420.5,3693.5909,3415.8333,3688.5,3412.5,3685.6429,3406.9615,3680.5,3412.5,3674.5) polygon(3404.5,3672.5,3404.5,3672.5,3404.5,3672.5,3404.5,3672.5) polygon(3347.6111,3672.5,3348.5,3671.6111,3349.3889,3672.5,3348.5,3673.3889) polygon(4077.5,3664.5,4084.5,3661.2059,4087.6111,3664.5,4084.5,3668.8077) polygon(4068.5,3664.5,4068.5,3664.5,4068.5,3664.5,4068.5,3664.5) polygon(3409.5,3656.5,3412.5,3653.0714,3415.1667,3656.5,3414.2778,3664.5,3412.5,3667.7,3409.8333,3664.5) polygon(3370.6538,3656.5,3372.5,3650.5,3380.5,3655.1667,3382.5,3656.5,3382.1,3664.5,3383.7,3672.5,3380.5,3676.5,3379.0454,3672.5,3379.3571,3664.5,3372.5,3659.1667) polygon(3331.5,3656.5,3332.5,3655.8846,3334.5,3656.5,3332.5,3657.3) polygon(4056.5,3648.5,4060.5,3647.5,4064.5,3648.5,4060.5,3649.8333) polygon(3989.0333,3648.5,3988.5,3640.5,3986.9,3648.5,3981.8333,3656.5,3988.5,3660.9445,3991.5769,3656.5) polygon(3977.3,3648.5,3972.5,3643.7,3966.5,3648.5,3964.5,3652.5,3962.2143,3656.5,3964.5,3658.2778,3965.6429,3656.5,3972.5,3651.1667) polygon(3949.2273,3648.5,3948.5,3647.8333,3947.3571,3648.5,3948.5,3649.0333) polygon(3511.4091,3648.5,3508.5,3646.3666,3504.9445,3648.5,3500.5,3653.5,3492.5,3654.6177,3489.3,3656.5,3492.5,3661.8333,3496.5,3664.5,3500.5,3672.5,3508.5,3667.7,3509.7308,3664.5,3508.5,3662.5,3503.1667,3656.5,3508.5,3651.7) polygon(3442.7222,3648.5,3444.5,3643.1667,3446.5,3648.5,3444.5,3651.1667) polygon(3340.5,3648.5,3340.5,3648.5,3348.5,3646.2143,3350.2778,3648.5,3348.5,3650.5,3340.5,3648.5) polygon(3324.5,3648.5,3324.5,3648.5,3324.5,3648.5,3324.5,3648.5) polygon(3267.2692,3648.5,3268.5,3646.9,3269.9546,3648.5,3268.5,3650.5) polygon(4092.5,3640.5,4092.5,3640.5,4092.5,3640.5,4092.5,3640.5) polygon(4067.5,3640.5,4068.5,3636.5,4069.6428,3640.5,4068.5,3644.5) polygon(4047.7,3640.5,4052.5,3637.8333,4054.9,3640.5,4052.5,3646.5) polygon(3933.3,3640.5,3932.5,3638.9,3931.7727,3640.5,3932.5,3641.3) polygon(3426.5,3640.5,3428.5,3636.5,3436.5,3637.8333,3440.5,3640.5,3436.5,3641.5,3428.5,3641.3889) polygon(3409.3,3640.5,3412.5,3635.1667,3415.7,3640.5,3412.5,3643.1667) polygon(3331.5,3640.5,3332.5,3638.5,3334.1,3640.5,3332.5,3641.1154) polygon(4032.5,3632.5,4036.5,3628.9445,4039.7,3632.5,4036.5,3635.7) polygon(3502.6818,3632.5,3500.5,3630.1,3499.0882,3632.5,3500.5,3635.1667) polygon(3452.5,3632.5,3452.5,3632.5,3452.5,3632.5,3460.5,3636.7667,3466.7222,3640.5,3460.5,3646.1,3452.5,3640.5,3452.5,3640.5) polygon(3420.5,3632.5,3420.5,3632.5,3420.5,3632.5,3420.5,3632.5) polygon(3391.7,3632.5,3396.5,3628.1364,3401.3,3632.5,3396.5,3637.8333) polygon(3362.3182,3632.5,3364.5,3627.7,3369.3,3632.5,3364.5,3634.6818) polygon(4013.5,3624.5,4020.5,3617.5,4028.5,3620.5,4032.5,3624.5,4028.5,3628.9445,4020.5,3631.5) polygon(3438.9,3624.5,3444.5,3618.9,3451.5,3624.5,3444.5,3629.5909) polygon(3386.9,3624.5,3388.5,3623.3571,3389.8333,3624.5,3388.5,3626.1) polygon(3372.5,3624.5,3372.5,3624.5,3372.5,3624.5,3372.5,3624.5) polygon(3348.5,3624.5,3348.5,3624.5,3356.5,3623.8333,3359.1667,3624.5,3356.5,3625.3889,3348.5,3624.5) polygon(3324.5,3624.5,3324.5,3624.5,3324.5,3624.5,3324.5,3624.5) polygon(4050.1471,3616.5,4052.5,3610.7857,4055.3572,3616.5,4052.5,3620.1364) polygon(4032.5,3616.5,4036.5,3610.7857,4038.8529,3616.5,4036.5,3620.5) polygon(3422.9,3616.5,3428.5,3610.2778,3436.5,3611.1667,3439.7,3616.5,3436.5,3619.7,3428.5,3621.5909) polygon(4019.6111,3608.5,4020.5,3605.8333,4021.6428,3608.5,4020.5,3612.5) polygon(3396.5,3608.5,3396.5,3608.5,3404.5,3603.1667,3412.5,3603.7,3416.5,3608.5,3412.5,3616.5,3412.5,3616.5,3412.5,3616.5,3404.5,3612.5,3400.5,3616.5,3396.5,3618.7857,3394.5,3616.5) polygon(3363.1667,3608.5,3364.5,3607.6111,3372.5,3605.5,3375.5,3608.5,3372.5,3612.5,3364.5,3609.6429) polygon(3950.1,3600.5,3956.5,3595.9286,3961.8333,3600.5,3956.5,3606.9) polygon(3511.1667,3600.5,3508.5,3595.1667,3502.1,3600.5,3508.5,3603.1667) polygon(3498.5,3600.5,3492.5,3595.7,3490.3182,3600.5,3484.5,3605.0714,3480.5,3608.5,3476.5,3612.8636,3470.7857,3616.5,3476.5,3621.5,3479.8333,3616.5,3484.5,3612.1923,3492.5,3611.4091,3494.9615,3608.5) polygon(3999.9286,3592.5,4004.5,3588.5,4009.8333,3592.5,4006.1,3600.5,4006.1,3608.5,4007.7,3616.5,4004.5,3619.7,4001.8333,3616.5,3996.5,3608.5,3996.5,3608.5,3996.5,3608.5,4001.8333,3600.5) polygon(3909.3889,3592.5,3908.5,3584.5,3907.1667,3592.5,3908.5,3593.6429) polygon(3415.1667,3592.5,3420.5,3586.1,3426.3182,3592.5,3425.8333,3600.5,3420.5,3603.7,3416.5,3600.5) polygon(3372.5,3592.5,3372.5,3592.5,3380.5,3592.5,3380.5,3592.5,3380.5,3600.5,3380.5,3600.5,3380.5,3600.5,3372.5,3592.5) polygon(3944.5,3584.5,3940.5,3582.1,3937.0714,3584.5,3932.5,3589.0714,3929.5,3592.5,3932.5,3597.3,3940.5,3596.5,3946.9,3600.5,3948.5,3601.2273,3955.7727,3608.5,3956.5,3610.5,3958.6818,3616.5,3956.5,3621.3,3948.5,3618.5,3947.2368,3624.5,3948.5,3627.5,3956.5,3625.8333,3958.5,3624.5,3964.5,3621.0714,3967.5476,3616.5,3965.1667,3608.5,3969.8333,3600.5,3964.5,3592.5,3964.5,3592.5,3956.5,3589.5,3953.5,3592.5,3948.5,3599.1667,3944.0555,3592.5) polygon(3500.5,3584.5,3492.5,3582.9,3491.3571,3584.5,3492.5,3587.1667) polygon(3398.1,3584.5,3404.5,3581.5909,3409.0714,3584.5,3404.5,3587.7) polygon(4004.5,3576.5,4004.5,3576.5,4004.5,3576.5,4004.5,3576.5) polygon(3660.9445,3576.5,3660.5,3575.9667,3660.1,3576.5,3660.5,3576.881) polygon(3364.5,3576.5,3364.5,3576.5,3364.5,3576.5,3364.5,3576.5) polygon(3472.5,3568.5,3468.5,3565.8333,3465.5,3568.5,3468.5,3576.5) polygon(3380.5,3568.5,3380.5,3568.5,3380.5,3568.5,3380.5,3568.5) polygon(3315.3571,3568.5,3316.5,3567.7727,3319.1667,3568.5,3316.5,3570.5) polygon(4027.5,3560.5,4028.5,3559.3571,4036.5,3558.5,4038.1,3560.5,4036.5,3564.5,4028.5,3561.5) polygon(3556.9211,3560.5,3556.5,3559.8846,3555.1667,3560.5,3556.5,3561.3889) polygon(3495.7,3560.5,3492.5,3555.1667,3490.7222,3560.5,3484.5,3565.1667,3479.5,3568.5,3484.5,3574.2143,3487.8333,3568.5,3492.5,3562.2778) polygon(3425.5,3560.5,3428.5,3557.5,3431.5,3560.5,3436.5,3563.8333,3442.1,3568.5,3436.5,3575.5,3434.9,3576.5,3433.8333,3584.5,3428.5,3589.8333,3422.5,3584.5,3420.5,3581.3,3417.8333,3576.5,3418.9,3568.5,3420.5,3567.1667) polygon(3388.5,3560.5,3388.5,3560.5,3388.5,3560.5,3388.5,3560.5) polygon(3306.9,3560.5,3308.5,3558.9,3309.2273,3560.5,3308.5,3561.6429) polygon(4007.7,3552.5,4012.5,3550.1,4018.5,3552.5,4012.5,3555.9286) polygon(3989.8333,3552.5,3996.5,3546.7857,4002.2143,3552.5,3996.5,3555.8333) polygon(3970.5,3552.5,3972.5,3548.5,3976.5,3552.5,3972.5,3554.5) polygon(3869.3,3552.5,3868.5,3550.9,3860.5,3544.5,3857.0714,3552.5,3860.5,3556.5,3868.5,3560.5) polygon(3814.6334,3552.5,3812.5,3550.6177,3809.3,3552.5,3812.5,3555.7) polygon(3473.0714,3552.5,3468.5,3550.2143,3460.5,3552.5,3468.5,3555.7) polygon(3401.3,3552.5,3404.5,3549.3,3407.7,3552.5,3412.5,3558.5,3413.8333,3560.5,3412.5,3562.1,3408.5,3568.5,3404.5,3571.4091,3401.3,3568.5,3400.8636,3560.5) polygon(3345.8333,3552.5,3348.5,3549.0714,3351.5,3552.5,3348.5,3554.6818) polygon(3959.1667,3544.5,3964.5,3542.7222,3969.8333,3544.5,3964.5,3547.7) polygon(3944.5,3544.5,3948.5,3542.9,3952.5,3544.5,3948.5,3547.1667) polygon(3574.853,3544.5,3572.5,3541.1667,3564.5,3544.5,3572.5,3547) polygon(3431.1667,3544.5,3436.5,3542.5,3441.8333,3544.5,3436.5,3546.7857) polygon(3413.6429,3544.5,3420.5,3540.1364,3427.3571,3544.5,3424.0555,3552.5,3420.5,3556.0555,3415.9286,3552.5) polygon(3252.5,3544.5,3252.5,3544.5,3252.5,3544.5,3252.5,3544.5) polygon(3921.5,3536.5,3916.5,3529.8333,3908.5,3536.5,3908.5,3536.5,3903.1667,3544.5,3903.7,3552.5,3908.5,3554.6818,3911.5,3552.5,3916.5,3546.7857,3919.8333,3552.5,3921.5,3560.5,3916.5,3564.9445,3914.0385,3568.5,3916.5,3574.9,3920.0555,3568.5,3924.5,3563.5,3930.5,3560.5,3930.1,3552.5,3924.5,3545.5,3921.8333,3544.5) polygon(3854.5,3536.5,3852.5,3533.3,3851.0455,3536.5,3844.5,3543.7,3843.6111,3544.5,3844.5,3545.6429,3845.3889,3544.5,3852.5,3538.1) polygon(3799.9286,3536.5,3796.5,3533.5,3794.1,3536.5,3796.5,3544.5) polygon(3548.5,3536.5,3540.5,3531.9286,3537.5909,3536.5,3540.5,3538.6334) polygon(3400.5,3536.5,3404.5,3535.3571,3405.8333,3536.5,3404.5,3538.5) polygon(3761.8333,3528.5,3756.5,3526.3666,3754.3666,3528.5,3756.5,3532.0555) polygon(3566.6818,3528.5,3564.5,3527,3562.5,3528.5,3564.5,3532.5) polygon(3396.5,3528.5,3396.5,3528.5,3396.5,3528.5,3396.5,3528.5) polygon(3356.5,3528.5,3356.5,3528.5,3364.5,3522.6818,3368.7667,3528.5,3364.5,3532.2647,3356.5,3528.5) polygon(3328.5,3528.5,3332.5,3526.1,3340.5,3525.8333,3343.5,3528.5,3340.5,3536.5,3340.5,3536.5,3332.5,3536.5,3332.5,3536.5) polygon(4036.5,3520.5,4036.5,3520.5,4036.5,3520.5,4036.5,3520.5) polygon(3972.5,3520.5,3972.5,3520.5,3972.5,3520.5,3972.5,3520.5) polygon(3837.6429,3520.5,3836.5,3516.5,3834.9,3520.5,3828.5,3526.9,3820.5,3524.9445,3817.5909,3528.5,3820.5,3529.2619,3828.5,3528.7051,3830.1,3528.5,3836.5,3522.1) polygon(3710.1,3520.5,3708.5,3518.9,3707.5,3520.5,3708.5,3521.6429) polygon(3514.5,3520.5,3508.5,3517.5,3504.5,3520.5,3508.5,3522.3461,3515.7727,3528.5,3516.5,3529.8333,3517.8333,3528.5,3516.5,3524.5) polygon(3823.4091,3512.5,3820.5,3507.1667,3817.5909,3512.5,3820.5,3516.0555) polygon(3807.4091,3512.5,3804.5,3509.8333,3801.3,3512.5,3804.5,3514.1842) polygon(3788.5,3512.5,3780.5,3504.5,3776.5,3512.5,3780.5,3514.1) polygon(3727.4091,3512.5,3724.5,3510.8158,3721.8333,3512.5,3724.5,3517.8333) polygon(3686.1,3512.5,3684.5,3504.5,3682.9,3512.5,3684.5,3515.1667) polygon(3645.9545,3512.5,3644.5,3511.0455,3640.5,3512.5,3644.5,3515.1667) polygon(3529.8333,3512.5,3524.5,3510.7222,3519.1667,3512.5,3524.5,3513.9545) polygon(3463.1667,3512.5,3468.5,3507.1667,3473.8333,3512.5,3468.5,3517.8333) polygon(3422.1,3512.5,3428.5,3507.1667,3433.0714,3512.5,3428.5,3515.1667) polygon(3372.5,3512.5,3372.5,3512.5,3372.5,3512.5,3372.5,3512.5) polygon(3339.1667,3512.5,3340.5,3511.3571,3348.5,3512.5,3356.5,3512.5,3356.5,3512.5,3356.5,3512.5,3348.5,3512.5,3340.5,3513.6429) polygon(3297.1667,3512.5,3300.5,3508.8636,3303.5769,3512.5,3300.5,3515.5769) polygon(3932.5,3504.5,3932.5,3504.5,3940.5,3502.7222,3942.7857,3504.5,3940.5,3506.7857,3932.5,3512.5,3932.5,3512.5,3932.5,3512.5) polygon(3565.8333,3504.5,3564.5,3502.9,3563.8846,3504.5,3564.5,3504.9211,3572.0789,3512.5,3572.5,3513.3,3573.3,3512.5,3572.5,3511.1667) polygon(3510.5,3504.5,3508.5,3501.8333,3506.5,3504.5,3508.5,3505.8333) polygon(3453.3889,3504.5,3460.5,3499.5769,3466.9,3504.5,3460.5,3510.9) polygon(3433.8333,3504.5,3436.5,3503.3571,3437.8333,3504.5,3436.5,3506.5) polygon(3409.3,3504.5,3412.5,3499.9286,3420.5,3504.5,3420.5,3504.5,3420.5,3504.5,3412.5,3507.7) polygon(3329.8333,3504.5,3332.5,3502.1,3335.1667,3504.5,3332.5,3507.5) polygon(4016.0555,3496.5,4020.5,3494,4024.9445,3496.5,4020.5,3503.1667) polygon(3968.0555,3496.5,3972.5,3492.5,3976.1364,3496.5,3972.5,3500.9445) polygon(3789.6429,3496.5,3788.5,3491.1667,3786.7222,3496.5,3788.5,3498.1) polygon(3494.7857,3496.5,3492.5,3493.3,3489.8333,3496.5,3485.5,3504.5,3492.5,3508.8077,3498.1,3504.5) polygon(3379.5,3496.5,3380.5,3495.6111,3384.5,3496.5,3380.5,3498.5) polygon(4002.3182,3488.5,4004.5,3485.8333,4007.5,3488.5,4004.5,3490.1) polygon(3733.6429,3488.5,3732.5,3484.5,3731.7,3488.5,3732.5,3489.3) polygon(3662.9,3488.5,3660.5,3486.7857,3657.8333,3488.5,3660.5,3491.9286) polygon(3530.2143,3488.5,3524.5,3482.7857,3520.8636,3488.5,3524.5,3493.5,3528.5,3496.5,3532.5,3499.1667,3540.5,3499.1667,3545.8333,3504.5,3540.5,3512.5,3548.5,3516.9445,3551,3512.5,3549.1154,3504.5,3548.5,3503.9667,3541.0333,3496.5,3548.5,3489.5,3551.1667,3488.5,3548.5,3480.5,3546.2143,3488.5,3540.5,3495.1667,3532.5,3491.7) polygon(3355.3571,3488.5,3356.5,3487.7727,3360.5,3488.5,3356.5,3489.8333) polygon(3921.3,3480.5,3924.5,3478.7222,3927.7,3480.5,3924.5,3482.5) polygon(3905.8333,3480.5,3908.5,3479.1667,3910.5,3480.5,3908.5,3482.5) polygon(3714.9,3480.5,3708.5,3474.1,3700.5,3472.5,3695.7,3480.5,3700.5,3485.8333,3705.3,3488.5,3700.5,3493.3,3692.5,3494.9,3690.5,3496.5,3692.5,3504.5,3700.5,3498.7857,3703.7,3496.5,3708.5,3491.7,3712.5,3496.5,3716.5,3499.1667,3720.5,3496.5,3716.5,3491.7,3712.5,3488.5) polygon(3408.5,3480.5,3412.5,3476.5,3415.1667,3480.5,3412.5,3484.5) polygon(3389.6429,3480.5,3396.5,3477.0714,3403.3571,3480.5,3396.5,3485.8333) polygon(3332.5,3480.5,3332.5,3480.5,3332.5,3480.5,3332.5,3488.5,3332.5,3488.5,3332.5,3488.5) polygon(3976.5,3472.5,3980.5,3470.1,3983.9286,3472.5,3980.5,3478.5) polygon(3932.5,3472.5,3932.5,3472.5,3932.5,3472.5,3932.5,3472.5) polygon(3916.5,3472.5,3916.5,3472.5,3916.5,3472.5,3916.5,3472.5) polygon(3900.5,3472.5,3900.5,3472.5,3900.5,3472.5,3900.5,3472.5) polygon(3873.8333,3472.5,3876.5,3470.9,3877.8333,3472.5,3884.5,3478.2143,3892.5,3475.1667,3898.5,3480.5,3892.5,3488.5,3892.5,3488.5,3886.5,3496.5,3892.5,3501.3,3895.1667,3496.5,3900.5,3491.7,3908.5,3492.5,3916.5,3495.3571,3917.6429,3496.5,3916.5,3498.1,3911.9286,3504.5,3908.5,3510.5,3900.5,3504.5,3894.7857,3512.5,3898.5,3520.5,3892.5,3523.7,3886.9615,3528.5,3884.5,3532.5,3879.9286,3528.5,3881.8333,3520.5,3884.5,3517.3,3889.3,3512.5,3884.5,3504.5,3884.5,3504.5,3876.5,3501.3,3873.5,3496.5,3876.5,3491.7,3884.5,3488.5,3876.5,3485.3,3873.5,3480.5) polygon(3598.1,3472.5,3596.5,3464.5,3592.5,3472.5,3596.5,3475.9286) polygon(3559.1667,3472.5,3556.5,3471.7727,3554.9,3472.5,3556.5,3480.5,3556.5,3480.5,3564.5,3483.1667,3565.2273,3480.5,3572.5,3473.2273,3572.8636,3472.5,3572.5,3471.9286,3569.8333,3472.5,3564.5,3477.8333) polygon(3425.8333,3472.5,3428.5,3470.2143,3436.5,3468.9445,3440.5,3472.5,3436.5,3477.0714,3431.7,3480.5,3436.5,3483.5,3441.5,3488.5,3436.5,3492.1364,3428.5,3496.5,3428.5,3496.5,3428.5,3496.5,3426.5,3488.5,3424.5,3480.5) polygon(3355.3571,3472.5,3356.5,3471.6111,3357.6429,3472.5,3356.5,3473.2273) polygon(3836.5,3464.5,3836.5,3464.5,3844.5,3464.5,3844.5,3464.5,3850.5,3472.5,3844.5,3477.3,3841.0714,3472.5,3836.5,3464.5) polygon(3500.5,3464.5,3500.5,3464.5,3500.5,3464.5,3500.5,3464.5) polygon(3388.5,3464.5,3388.5,3464.5,3388.5,3464.5,3388.5,3464.5) polygon(3932.5,3456.5,3932.5,3456.5,3932.5,3456.5,3932.5,3456.5) polygon(3722.9,3456.5,3724.5,3455.6111,3727.1667,3456.5,3724.5,3460.5) polygon(3372.5,3456.5,3372.5,3456.5,3380.5,3454.7222,3381.7308,3456.5,3380.5,3458.1,3372.5,3456.5) polygon(4019.7,3448.5,4020.5,3447.1667,4022.5,3448.5,4020.5,3449.5) polygon(3899.7,3448.5,3900.5,3446.9,3908.5,3448.5,3908.5,3448.5,3908.5,3448.5,3900.5,3449.6429) polygon(3867.3571,3448.5,3868.5,3445.8333,3870.1,3448.5,3868.5,3456.5,3868.5,3456.5,3868.5,3456.5) polygon(3416.5,3448.5,3420.5,3445.8333,3423.7,3448.5,3420.5,3453.8333) polygon(3398.6818,3448.5,3404.5,3443.1667,3410.9,3448.5,3404.5,3453.0714) polygon(3956.5,3440.5,3956.5,3440.5,3956.5,3440.5,3956.5,3440.5) polygon(3883.7,3440.5,3884.5,3436.5,3885.0714,3440.5,3884.5,3444.5) polygon(3839.7,3440.5,3844.5,3438.1,3848.5,3440.5,3844.5,3444.5) polygon(3711.7,3440.5,3716.5,3437.0714,3722.5,3440.5,3720.2333,3448.5,3716.5,3453.5909,3711.8333,3448.5) polygon(3664.5,3440.5,3668.5,3438.5,3671.1667,3440.5,3669.6429,3448.5,3668.5,3451.1667,3664.5,3448.5) polygon(3639.8333,3440.5,3644.5,3434.9,3651.5,3440.5,3644.5,3446.7222) polygon(3426.9,3440.5,3428.5,3439.1667,3430.1,3440.5,3428.5,3442.5) polygon(3384.5,3440.5,3388.5,3436.5,3392.5,3440.5,3388.5,3442.9615) polygon(3897.8333,3432.5,3900.5,3431.5,3901.5,3432.5,3900.5,3434.1) polygon(3803.5,3432.5,3804.5,3431.3571,3812.5,3428.0555,3820.5,3428.8636,3824.9445,3432.5,3820.5,3436.1364,3812.5,3438.2143,3804.5,3435.1667) polygon(3708.5,3432.5,3708.5,3432.5,3708.5,3432.5,3708.5,3432.5) polygon(3409.8333,3432.5,3412.5,3429.3,3414.1,3432.5,3412.5,3434.7857) polygon(3842.9,3424.5,3844.5,3422.9,3846.1,3424.5,3844.5,3425.5) polygon(3756.5,3424.5,3756.5,3424.5,3764.5,3420.5,3771.1667,3424.5,3764.5,3430.2143,3756.5,3424.5) polygon(3734.1,3424.5,3740.5,3418.1,3745.8333,3424.5,3740.5,3428.0555) polygon(3696.5,3424.5,3700.5,3421.8333,3705.8333,3424.5,3700.5,3426.7857) polygon(3849.0714,3416.5,3852.5,3413.8333,3857.3,3416.5,3852.5,3419.9286) polygon(3817.3,3416.5,3820.5,3414.2143,3821.9545,3416.5,3820.5,3418.5) polygon(3803.6111,3416.5,3804.5,3414.9,3806.5,3416.5,3804.5,3417.6429) polygon(3729.6429,3416.5,3732.5,3410.7857,3739.1667,3416.5,3732.5,3423.1667) polygon(3684.5,3416.5,3684.5,3416.5,3684.5,3416.5,3689.8333,3424.5,3690.9,3432.5,3684.5,3436.0555,3682.2143,3432.5,3676.5,3425.2273,3675.5,3424.5,3676.5,3420.5) polygon(3436.5,3416.5,3436.5,3416.5,3436.5,3416.5,3442.5,3424.5,3436.5,3426.5,3428.5,3426.7857,3425.3,3424.5,3428.5,3419.1667) polygon(3380.5,3416.5,3380.5,3416.5,3380.5,3416.5,3380.5,3416.5) polygon(3866.6539,3408.5,3868.5,3405.8333,3872.5,3408.5,3873.8333,3416.5,3868.5,3421.8333,3864.5,3416.5) polygon(3671.1667,3408.5,3676.5,3403.1667,3679.7,3408.5,3676.5,3413.8333) polygon(3650.5,3408.5,3652.5,3407.6111,3660.5,3406.7222,3665.8333,3408.5,3660.5,3412.5,3652.5,3416.5,3652.5,3416.5,3652.5,3416.5) polygon(3441.8333,3408.5,3444.5,3404.5,3449.8333,3408.5,3444.5,3412.5) polygon(3874.5,3400.5,3876.5,3399.0454,3878.7857,3400.5,3876.5,3403.7) polygon(3860.5,3400.5,3860.5,3400.5,3860.5,3400.5,3860.5,3400.5) polygon(3802.9,3400.5,3804.5,3396.5,3812.5,3398.9,3815.1667,3400.5,3813.8333,3408.5,3812.5,3410.5,3810.9,3408.5,3804.5,3402.1) polygon(3737.8333,3400.5,3740.5,3398.7222,3743.7,3400.5,3740.5,3404.5) polygon(3634.5,3400.5,3636.5,3399.8333,3638.1,3400.5,3636.5,3401.8333) polygon(3460.5,3400.5,3460.5,3400.5,3460.5,3400.5,3468.5,3403.7,3473.3,3408.5,3468.5,3416.5,3471.1667,3424.5,3476.5,3426.5,3484.5,3432.5,3484.5,3432.5,3488.5,3440.5,3491.7,3448.5,3490.5,3456.5,3486.5,3464.5,3484.5,3472.5,3492.5,3477.8333,3500.5,3473.8333,3507.1667,3480.5,3506.5,3488.5,3508.5,3491.1667,3509.6429,3488.5,3511.1667,3480.5,3508.5,3478.5,3502.5,3472.5,3508.5,3467.7,3512.5,3464.5,3508.5,3463.1667,3501.8333,3456.5,3500.5,3451.1667,3496.5,3448.5,3496.5,3440.5,3500.5,3432.5,3500.5,3432.5,3500.5,3432.5,3508.5,3436.1364,3512.9445,3432.5,3511.1667,3424.5,3516.5,3418.1,3519.1667,3416.5,3524.5,3413.8333,3532.5,3408.5,3532.5,3408.5,3540.5,3408.5,3540.5,3408.5,3547.0455,3416.5,3540.5,3421.6429,3538,3424.5,3532.5,3430.7857,3527.7,3432.5,3532.5,3435.9286,3537.8333,3440.5,3536.5,3448.5,3538.5,3456.5,3532.5,3459.1667,3524.5,3463.9667,3521.8333,3464.5,3522.5,3472.5,3524.5,3476.5,3532.5,3473.3889,3540.5,3480.5,3543.1667,3472.5,3540.5,3467.1667,3539.3571,3464.5,3540.5,3460.5,3543.1667,3456.5,3548.5,3451.1667,3553.8333,3456.5,3556.5,3457.2273,3558.1,3456.5,3564.5,3451.9286,3569.0714,3456.5,3572.5,3458,3580.5,3456.5,3572.5,3454.5,3566.5,3448.5,3564.5,3445.0714,3562.1,3448.5,3556.5,3455.5,3549.5,3448.5,3548.5,3447.7727,3541.8333,3440.5,3540.5,3438.2143,3535.5,3432.5,3540.5,3428.5,3548.5,3426.5,3552.5,3424.5,3556.5,3419.1667,3558.1,3416.5,3564.5,3411.9286,3568.5,3416.5,3572.5,3419.7,3579.3571,3424.5,3572.5,3431.3571,3570.9,3432.5,3572.5,3433.3,3577,3440.5,3580.5,3445.5909,3587.5,3440.5,3580.5,3432.5,3580.5,3432.5,3580.5,3432.5,3582.5,3424.5,3580.5,3422.9,3576.5,3416.5,3580.5,3410.1,3588.5,3414.2143,3593.5,3408.5,3596.5,3406.5,3604.5,3406.9,3609.8333,3400.5,3612.5,3398.7222,3614.2778,3400.5,3616.1364,3408.5,3612.5,3414.2143,3604.5,3411.1667,3599.1667,3416.5,3596.5,3417.6429,3591.1667,3424.5,3596.5,3430.5,3604.5,3426.1,3612.5,3424.5,3612.5,3424.5,3614.7857,3416.5,3620.5,3412.8636,3628.5,3411.7,3636.5,3413.5,3638.6818,3416.5,3636.5,3418.5,3628.5,3424.5,3632.5,3432.5,3629.8333,3440.5,3628.5,3441.6429,3626.5,3440.5,3620.5,3432.5,3615.7,3440.5,3620.5,3444.5,3623.1667,3448.5,3620.5,3451.1667,3613.6429,3456.5,3620.5,3460.8636,3623.8333,3464.5,3628.5,3470.1,3634.5,3472.5,3628.5,3475.9286,3622.1,3480.5,3628.5,3482.7857,3631.7,3480.5,3636.5,3473.6429,3642.5,3480.5,3644.5,3483.1667,3645.9545,3480.5,3645.1667,3472.5,3644.5,3471.7,3636.5,3469.8333,3634.7222,3464.5,3631.1667,3456.5,3636.5,3452.5,3644.5,3456.5,3652.5,3448.5,3652.5,3448.5,3652.5,3448.5,3660.5,3449.5,3666.7222,3456.5,3662.5,3464.5,3668.5,3467.9286,3672.0555,3472.5,3676.5,3480.5,3679.3571,3472.5,3676.5,3469.6429,3670.5,3464.5,3670.7857,3456.5,3676.5,3452.8636,3683.1667,3456.5,3684.5,3457.3,3688.5,3456.5,3692.5,3454.9,3700.5,3453.8333,3708.5,3455.1667,3710.1,3456.5,3712.5,3464.5,3716.5,3467.1667,3724.5,3468.5,3726.5,3464.5,3732.5,3459.7,3740.5,3458.7857,3743.5769,3464.5,3748.5,3469.8333,3754.9,3464.5,3748.5,3459.1667,3743.1667,3456.5,3748.5,3450.1,3756.5,3448.5,3748.5,3447.1667,3745.8333,3448.5,3740.5,3452.5,3732.5,3448.5,3732.5,3448.5,3726.5,3440.5,3729.8333,3432.5,3732.5,3427.1667,3734.7857,3432.5,3740.5,3440.5,3745.5,3432.5,3748.5,3427.7,3750.9,3432.5,3756.5,3438.1,3764.5,3437.8333,3772.5,3433.8333,3775.1667,3432.5,3780.5,3430.2143,3788.5,3424.5,3788.5,3424.5,3788.5,3424.5,3792.5,3432.5,3788.5,3436.5,3782.2778,3440.5,3788.5,3448.5,3788.5,3448.5,3790.9,3456.5,3788.5,3461.3,3780.5,3463.7727,3774.3461,3456.5,3772.5,3452.5,3768.5,3456.5,3772.5,3464.5,3772.5,3464.5,3772.5,3472.5,3772.5,3472.5,3769.3,3480.5,3764.5,3483.5,3757.8333,3488.5,3756.5,3491.1667,3753.8333,3488.5,3748.5,3483.1667,3746.5,3488.5,3748.5,3493.8333,3751.1667,3496.5,3755.1667,3504.5,3756.5,3507.1667,3764.5,3506.5,3765.5,3504.5,3767.1667,3496.5,3766.853,3488.5,3772.5,3481.6429,3775.1667,3480.5,3780.5,3474.1,3788.5,3472.5,3788.5,3472.5,3788.5,3472.5,3796.5,3480.5,3804.5,3472.5,3796.5,3468.5,3792.5,3464.5,3796.5,3462.7222,3804.5,3458.7857,3812.5,3458.1,3814.1,3456.5,3820.5,3453.5909,3825.5909,3448.5,3828.5,3445.5909,3833.0714,3448.5,3828.5,3456.5,3828.5,3456.5,3824.5,3464.5,3820.5,3470.9,3812.5,3468.0555,3804.5,3472.5,3810.5,3480.5,3812.5,3481.9545,3819.7,3488.5,3820.5,3496.5,3828.5,3491.9286,3831.7,3496.5,3836.5,3502.5,3841.8333,3504.5,3844.5,3512.5,3846.5,3504.5,3844.5,3502.5,3841.8333,3496.5,3844.5,3493.8333,3852.5,3489.3889,3853.6429,3488.5,3856.5,3480.5,3860.5,3476.5,3861.8333,3480.5,3868.5,3488.5,3868.5,3488.5,3868.5,3488.5,3863.5,3496.5,3868.5,3500.1364,3874.5,3504.5,3876.5,3507.1667,3881.0714,3512.5,3876.5,3516.5,3871.1667,3520.5,3868.5,3522.7857,3864.5,3520.5,3864.1364,3512.5,3860.5,3504.5,3856.0555,3512.5,3855.1667,3520.5,3860.5,3522.5,3864.8636,3528.5,3867.3571,3536.5,3868.5,3538.1,3876.5,3540.1364,3884.5,3541.8333,3888.5,3536.5,3892.5,3534.0385,3897.6429,3528.5,3900.5,3522.7857,3908.5,3520.5,3908.5,3520.5,3908.5,3520.5,3916.5,3524.5,3924.5,3525.8333,3932.5,3522.1,3940.5,3527.5,3948.5,3525.1667,3951.8333,3528.5,3948.5,3532.9445,3940.5,3530.1,3936.5,3536.5,3932.5,3544.5,3940.5,3546.1,3945.8333,3552.5,3940.5,3557.8333,3935.1667,3560.5,3940.5,3562.2778,3948.5,3566.9,3956.5,3565.5,3959.9286,3568.5,3964.5,3573.0714,3970.9,3568.5,3972.5,3566.5,3975.9286,3560.5,3980.5,3554.1,3983.7,3560.5,3986.2143,3568.5,3980.5,3572.9445,3975.1667,3576.5,3972.5,3579.7,3967.7,3584.5,3972.5,3589.3,3977.3,3584.5,3980.5,3581.8333,3982.7857,3584.5,3988.5,3587.3571,3994.5,3592.5,3992.5,3600.5,3988.5,3603.7,3986.9,3600.5,3980.5,3595.9286,3973.3889,3600.5,3980.5,3605.8333,3985.0714,3608.5,3984.5,3616.5,3988.5,3620.1364,3996.5,3618.9615,4002.5,3624.5,4002.1,3632.5,4004.5,3636.5,4007.9286,3640.5,4012.5,3644.0555,4020.5,3645.8333,4028.5,3640.5,4028.5,3640.5,4028.5,3640.5,4036.5,3645.3,4038.9615,3648.5,4042.2142,3656.5,4036.5,3662.2143,4028.5,3664.5,4036.5,3669.8333,4038.1,3664.5,4044.5,3658.1,4048.2646,3664.5,4048.5,3672.5,4044.5,3675.5,4038.7858,3680.5,4044.5,3686.2143,4051.1666,3680.5,4052.5,3678.5,4056.5,3680.5,4055.7,3688.5,4055.4091,3696.5,4058.5,3704.5,4060.5,3705.6429,4068.5,3708.5,4071.1666,3704.5,4068.5,3696.5,4068.5,3696.5,4065.3,3688.5,4068.5,3686.9,4070.7858,3688.5,4076.5,3695.1667,4077.2273,3696.5,4079.4091,3704.5,4078.9,3712.5,4078.7858,3720.5,4081.2059,3728.5,4084.5,3733.5909,4090.9,3736.5,4084.5,3741.0714,4078.5,3744.5,4084.5,3746.6818,4092.5,3752.5,4092.5,3752.5,4098.9,3760.5,4095.1666,3768.5,4100.5,3773.0714,4106.5,3776.5,4108.5,3779.1667,4116.5,3777.3,4123.7,3784.5,4116.5,3791.0455,4108.5,3788.0555,4103.5,3792.5,4108.5,3796.9445,4113.0714,3800.5,4113.0714,3808.5,4116.5,3813.3,4118.2778,3816.5,4120.5,3824.5,4124.5,3828.8077,4130.5,3832.5,4132.5,3840.5,4136.5,3832.5,4139.3572,3824.5,4140.5,3816.5,4140.5,3816.5,4140.5,3816.5,4148.5,3821.5,4154.5,3824.5,4148.5,3829.3,4144.5,3832.5,4148.5,3837.8333,4149.6428,3840.5,4156.5,3848.5,4156.5,3848.5,4156.5,3848.5,4148.5,3851.1667,4146.5,3848.5,4140.5,3844.5,4132.5,3848.5,4132.5,3848.5,4130.2142,3856.5,4132.5,3861.8333,4136.5,3856.5,4140.5,3851.9286,4145.8334,3856.5,4143.1666,3864.5,4148.5,3870.2143,4152.5,3872.5,4148.5,3876.0555,4140.5,3876.9445,4136.5,3880.5,4134.7858,3888.5,4132.5,3891.1667,4124.5,3888.5,4122.5,3896.5,4124.5,3898.1,4132.5,3902.9,4140.5,3902.9,4144.5,3896.5,4148.5,3888.5,4148.5,3888.5,4148.5,3888.5,4153.0714,3896.5,4153.5,3904.5,4148.5,3908.5,4140.5,3912.5,4144.5,3920.5,4140.5,3925.3,4134.5,3920.5,4132.5,3919.8333,4131.1666,3920.5,4132.5,3921.3,4139.0454,3928.5,4132.5,3935.7,4131.7,3936.5,4132.5,3938.5,4140.5,3940.5,4142.5,3944.5,4141.6428,3952.5,4140.5,3953.2273,4132.5,3957.8333,4127.1666,3952.5,4124.5,3951.3571,4121.8334,3952.5,4116.5,3958.9,4112.5,3960.5,4116.5,3961.8334,4121.5,3968.5,4117.8334,3976.5,4124.5,3984.5,4124.5,3984.5,4127.7,3992.5,4124.5,3995.1666,4122.2142,3992.5,4116.5,3988.0555,4109.8334,3992.5,4114.2142,4000.5,4108.5,4007.1666,4107.1666,4008.5,4100.5,4012.9445,4097.8334,4016.5,4100.5,4022.9,4101.3,4024.5,4108.5,4031.0454,4116.5,4028.5,4122.9,4032.5,4116.5,4037.0714,4108.5,4034.2778,4100.5,4034.1,4092.5,4038.7222,4089.3,4040.5,4084.5,4044.5,4080.5,4040.5,4076.5,4036.5,4074.5,4040.5,4076.5,4042.9,4082.1,4048.5,4076.5,4052.8077,4068.5,4051.1666,4063.9286,4056.5,4060.5,4060.5,4052.5,4064.5,4060.5,4066.9,4064.5,4072.5,4060.5,4078.1,4052.5,4074.9,4044.5,4075.5,4039.7,4072.5,4036.5,4068.5,4028.5,4070.9,4020.5,4064.5,4012.5,4072.5,4012.5,4080.5,4012.5,4080.5,4012.5,4080.5,4004.5,4077.0714,3996.5,4078.1,3988.5,4077.6765,3984.1364,4080.5,3988.5,4088.5,3988.5,4088.5,3988.5,4088.5,3984.5,4096.5,3980.5,4097.2273,3976.5,4096.5,3972.5,4095.7727,3965.2273,4088.5,3972.5,4083.5,3976.8636,4080.5,3972.5,4077.0714,3965.3889,4072.5,3972.5,4066.1,3974.1,4064.5,3972.5,4063.6578,3971.8333,4064.5,3964.5,4072.1522,3964.4838,4072.5,3964.5,4074.1,3967.7,4080.5,3964.5,4086.9,3963.7727,4088.5,3964.5,4096.5,3964.5,4096.5,3964.5,4096.5,3959.9286,4104.5,3956.5,4106.9,3952.5,4104.5,3951.7,4096.5,3952.2895,4088.5,3948.5,4083.3572,3940.5,4087.1666,3936.5,4088.5,3940.5,4093.3,3943.1667,4096.5,3940.5,4098.7858,3932.5,4100.5,3926.7857,4096.5,3926.5,4088.5,3924.5,4080.5,3924.5,4080.5,3916.5,4078.5,3913.0714,4080.5,3916.5,4085.3,3921.8333,4088.5,3916.5,4090.1,3909.3889,4096.5,3908.5,4098.5,3900.5,4096.5,3900.5,4096.5,3900.5,4096.5,3902.1,4088.5,3900.5,4086.5,3896.5,4088.5,3892.5,4089.3,3891.5,4088.5,3884.5,4083.4091,3876.5,4084.1364,3868.5,4083.1666,3865.5,4080.5,3860.5,4076.0555,3852.5,4077.8334,3849.5,4080.5,3844.5,4083.8334,3840.5,4080.5,3836.5,4075.5,3828.5,4075.9286,3825.8333,4072.5,3822.2143,4064.5,3820.5,4061.0714,3816.5,4064.5,3814.5,4072.5,3812.5,4074.1,3811.1667,4072.5,3808.5,4064.5,3804.5,4061.8334,3798.5,4056.5,3796.5,4053.3,3788.5,4053.6765,3780.5,4053.8334,3772.5,4052.5,3767.1667,4048.5,3764.5,4047.5,3756.5,4046.5,3751.1667,4040.5,3748.5,4034.5,3746.5,4032.5,3740.5,4029.8334,3732.5,4026.7858,3724.5,4031.3572,3719.7,4024.5,3716.5,4019.1666,3711.1667,4016.5,3708.5,4015.3572,3701.6429,4008.5,3700.5,4007.5,3692.5,4000.5,3684.5,4005.8334,3681.8333,4000.5,3676.5,3992.5,3676.5,3992.5,3670.5,3984.5,3676.5,3978.5,3680.5,3984.5,3684.5,3992.5,3692.5,3985.5667,3700.5,3987.5,3703.5,3984.5,3700.5,3982.6538,3692.5,3983.1666,3684.5,3981.5,3677.8333,3976.5,3676.5,3974.9,3668.5,3975.5,3666.9,3976.5,3666.9,3984.5,3660.5,3988.5,3658.2143,3992.5,3652.5,3998.6538,3645.8333,3992.5,3644.5,3988.5,3642.7222,3984.5,3639.7,3976.5,3640.5,3968.5,3644.5,3964.5,3646.1,3960.5,3644.5,3952.5,3644.5,3952.5,3636.5,3948.5,3632.5,3952.5,3628.5,3955.1667,3622.5,3952.5,3620.5,3951.5,3612.5,3952.5,3612.5,3952.5,3604.5,3954.7857,3600.5,3952.5,3596.5,3949.8333,3593.5909,3944.5,3588.5,3938.2778,3585.3,3936.5,3588.5,3934.7222,3593.1667,3928.5,3596.5,3920.5,3588.5,3917.5,3587,3920.5,3582.2778,3928.5,3580.5,3931.7,3578.2143,3928.5,3572.5,3922.7857,3565.8333,3928.5,3564.5,3929.5,3563.6111,3928.5,3560.5,3920.5,3564.5,3916.5,3572.5,3912.5,3572.5,3912.5,3574.1,3904.5,3580.5,3898.1,3581.3889,3896.5,3580.5,3895.3571,3574.5,3888.5,3572.5,3887.1667,3567.1667,3888.5,3564.5,3891.1667,3560.5,3888.5,3556.5,3887.9286,3550.3823,3880.5,3549.8333,3872.5,3556.5,3865.2273,3564.119,3872.5,3564.5,3876.5,3565.3,3872.5,3564.5,3868.5,3561.8333,3864.5,3556.5,3859.1667,3551.1667,3864.5,3548.5,3866.1,3544.5,3872.5,3542.1,3880.5,3540.5,3883.1667,3532.5,3887.3571,3525.6429,3880.5,3524.5,3872.5,3524.5,3872.5,3524.5,3864.5,3524.5,3864.5,3532.5,3859.9286,3540.5,3856.5,3532.5,3852.5,3524.5,3848.5,3524.5,3848.5,3516.5,3845.8333,3508.5,3840.5,3508.5,3840.5,3508.5,3840.5,3511.7,3832.5,3516.5,3827.7,3521.8333,3832.5,3524.5,3835.9286,3529.0714,3840.5,3532.5,3844.5,3540.5,3848.5,3540.5,3848.5,3548.5,3849.8333,3549.2273,3848.5,3548.5,3846.5,3545.0714,3840.5,3540.5,3835.9286,3532.5,3836.5,3528.5,3832.5,3524.5,3829.5,3520.0555,3824.5,3524.5,3816.5,3516.5,3810.5,3514.5,3808.5,3508.5,3803.7,3503.1667,3800.5,3500.5,3797.8333,3498.2143,3792.5,3496.7667,3784.5,3492.5,3777.3889,3484.5,3780.5,3480.5,3776.5,3478.5,3768.5,3484.5,3764.5,3487.5,3760.5,3489.3,3752.5,3484.5,3745.6429,3481.8333,3744.5,3476.5,3742.5,3473.0714,3736.5,3468.5,3730.1,3460.5,3736.5,3460.5,3736.5,3454.1,3744.5,3452.5,3745.6429,3444.5,3744.5,3436.5,3750.9,3430.6818,3744.5,3436.5,3738.6818,3444.5,3736.5,3439.7,3728.5,3442.9,3720.5,3440.8636,3712.5,3436.5,3704.5,3428.5,3707.5,3423.7,3704.5,3428.5,3698.5,3436.5,3704.5,3439.4091,3696.5,3444.5,3689.5,3448.5,3696.5,3446.5,3704.5,3452.5,3707.5,3460.5,3707.1667,3468.5,3704.5,3460.5,3702.9,3456.2333,3696.5,3460.5,3690.1,3462.5,3688.5,3460.5,3685.3,3456.5,3680.5,3452.5,3675.7,3449.3,3672.5,3446.5,3664.5,3449.8333,3656.5,3452.5,3654.5,3460.5,3653.3,3463.5,3648.5,3468.5,3642.7857,3475.1667,3648.5,3476.5,3652.5,3477.6429,3648.5,3478.7857,3640.5,3476.5,3637.8333,3468.5,3637.8333,3465.8333,3632.5,3460.5,3626.6818,3454.5,3624.5,3460.5,3620.5,3465.3,3616.5,3460.5,3610.5,3457.8333,3608.5,3455.1667,3600.5,3460.5,3596.5,3464.5,3600.5,3468.5,3605.8333,3473.8333,3600.5,3473.3,3592.5,3470.3462,3584.5,3468.5,3576.5,3462.5,3584.5,3460.5,3586.1,3452.5,3584.5,3447.8333,3592.5,3449.8333,3600.5,3449.3,3608.5,3444.5,3612.5,3438.5,3608.5,3439.9286,3600.5,3438.7857,3592.5,3440.5,3584.5,3444.5,3579.7,3452.5,3584.5,3457.0714,3576.5,3452.5,3572.9445,3447.5,3568.5,3444.5,3563.7,3442.2143,3560.5,3443.1667,3552.5,3444.5,3548.5,3446.1,3544.5,3444.5,3540.5,3443.3571,3536.5,3444.5,3533.8333,3452.5,3530.7857,3456.5,3528.5,3452.5,3526.5,3444.5,3524.5,3436.5,3520.5,3436.5,3520.5,3436.5,3520.5,3444.5,3518.5,3449.8333,3512.5,3452.5,3506.5,3457.3,3512.5,3460.5,3515.1667,3465.8333,3520.5,3468.5,3528.5,3468.5,3528.5,3473.3,3536.5,3476.5,3539.7,3484.5,3541.8333,3491.6111,3536.5,3484.5,3532.7353,3479.3571,3528.5,3476.5,3522.7857,3472.5,3520.5,3476.5,3516.5,3479.7,3512.5,3476.5,3509.8333,3471.1667,3504.5,3469.2273,3496.5,3468.5,3492.5,3460.5,3488.5,3460.5,3488.5,3459.6111,3480.5,3460.5,3477.8333,3468.5,3479.5,3472.5,3480.5,3476.5,3483.1667,3477.3,3480.5,3476.5,3478.5,3474.1,3472.5,3468.5,3465.5,3460.5,3469.8333,3457.8333,3472.5,3452.5,3475.1667,3448.5,3472.5,3452.5,3464.5,3447.1667,3456.5,3444.5,3455.3571,3439.1667,3448.5,3444.5,3444.1364,3448.5,3440.5,3452.5,3432.5,3445.8333,3424.5,3446.7857,3416.5,3452.5,3409.8333,3459.1667,3416.5,3456.9445,3424.5,3452.5,3432.5,3460.5,3437.3,3462.2778,3440.5,3464.5,3448.5,3460.5,3453.8333,3457.8333,3456.5,3460.5,3458.1,3468.5,3456.5,3468.5,3456.5,3476.5,3450.5,3477.3,3448.5,3476.5,3444.5,3475.5,3440.5,3468.5,3432.5,3468.5,3432.5,3466.9,3424.5,3468.5,3416.5,3460.5,3412.5,3456.5,3408.5) polygon(3828.5,3392.5,3828.5,3392.5,3828.5,3392.5,3832.1364,3400.5,3828.5,3404.5,3822.7857,3400.5) polygon(3583.1667,3392.5,3588.5,3388.2333,3593.8333,3392.5,3588.5,3399.6111) polygon(3556.5,3392.5,3556.5,3392.5,3556.5,3392.5,3564.5,3395.7,3572.5,3395.1667,3576.5,3400.5,3572.5,3406.5,3564.5,3404.5,3560.5,3408.5,3556.5,3414.5,3553.0714,3408.5,3556.5,3400.5) polygon(3812.5,3384.5,3812.5,3384.5,3812.5,3384.5,3812.5,3384.5) polygon(3732.5,3384.5,3732.5,3384.5,3732.5,3384.5,3732.5,3384.5) polygon(3643.6111,3384.5,3644.5,3381.8333,3646.1,3384.5,3644.5,3392.5,3644.5,3392.5,3644.5,3392.5) polygon(3779.3571,3376.5,3780.5,3373.8333,3784.5,3376.5,3780.5,3377.2273) polygon(3745.8333,3376.5,3748.5,3373.3,3750.7857,3376.5,3748.5,3378.5) polygon(3668.5,3376.5,3668.5,3376.5,3668.5,3376.5,3668.5,3376.5) polygon(3521.8333,3376.5,3524.5,3374.5,3529.8333,3376.5,3524.5,3380.5) polygon(3474.7222,3376.5,3476.5,3374.2143,3481.8333,3376.5,3478.5,3384.5,3484.5,3389.3,3486.7857,3392.5,3492.5,3397.5,3496.5,3400.5,3500.5,3406.5,3506.5,3400.5,3508.5,3399.7727,3516.5,3397.8333,3524.5,3395.1667,3529.8333,3400.5,3524.5,3404.5,3520.5,3408.5,3516.5,3414.9,3514.9,3416.5,3508.5,3421.8333,3500.5,3420.2333,3495.1667,3424.5,3492.5,3430.9,3489.3,3424.5,3485.9546,3416.5,3489.8333,3408.5,3484.5,3406.7222,3478.2778,3400.5,3476.5,3398.5,3472.1364,3392.5,3468.5,3384.5,3468.5,3384.5,3468.5,3384.5) polygon(3419.7727,3376.5,3420.5,3374.5,3421.3889,3376.5,3420.5,3380.5) polygon(3836.5,3368.5,3836.5,3368.5,3836.5,3368.5,3836.5,3368.5) polygon(3732.5,3368.5,3732.5,3368.5,3740.5,3366.7222,3743.7,3368.5,3740.5,3371.1667,3732.5,3368.5) polygon(3698.2143,3368.5,3700.5,3365.3,3702.1,3368.5,3708.5,3374.9,3710.5,3376.5,3708.5,3379.1667,3702.1,3384.5,3708.5,3389.8333,3710.2778,3392.5,3716.5,3397.5909,3722.9,3400.5,3716.5,3406.9,3708.5,3408.5,3708.5,3408.5,3700.5,3411.1667,3697.3,3408.5,3694.5,3400.5,3700.5,3392.5,3698.9,3384.5,3692.5,3379.1667,3690.2143,3376.5,3692.5,3374.2143) polygon(3683.8846,3368.5,3684.5,3367.3571,3685.8333,3368.5,3684.5,3369.8333) polygon(3612.5,3368.5,3612.5,3368.5,3612.5,3368.5,3612.5,3368.5) polygon(3576.9445,3368.5,3580.5,3365.8333,3582.6334,3368.5,3580.5,3376.5,3580.5,3376.5,3572.5,3378.6818,3569.0714,3376.5,3572.5,3373.5) polygon(3642.5,3360.5,3644.5,3358.5,3646.1,3360.5,3644.5,3364.5) polygon(3596.5,3360.5,3596.5,3360.5,3596.5,3360.5,3596.5,3360.5) polygon(3536.0555,3360.5,3540.5,3355.5,3548.5,3358.5,3549.3889,3360.5,3549.3,3368.5,3548.5,3370.1,3546.9762,3376.5,3540.5,3381.3571,3532.9445,3376.5,3535.5,3368.5) polygon(3467.3571,3360.5,3468.5,3356.5,3476.5,3357.8333,3479.7,3360.5,3476.5,3362.7857,3469.8333,3368.5,3468.5,3369.5,3467.3571,3368.5) polygon(3443.9286,3360.5,3444.5,3359.9286,3446.1,3360.5,3444.5,3368.5,3444.5,3368.5,3444.5,3368.5) polygon(3705.3,3352.5,3708.5,3349.3,3711.7,3352.5,3708.5,3356.5) polygon(3579.5,3352.5,3580.5,3351.5,3581.8333,3352.5,3580.5,3353.3889) polygon(3516.5,3352.5,3516.5,3352.5,3524.5,3350.7222,3527.1667,3352.5,3524.5,3355.7,3516.5,3352.5) polygon(3498.9,3352.5,3500.5,3351.5,3501.6429,3352.5,3502.2778,3360.5,3508.5,3367.5,3509.5,3368.5,3508.5,3369.5,3500.5,3371.1667,3499.1667,3368.5,3498.9,3360.5) polygon(3751.7,3344.5,3756.5,3340.1364,3760.1923,3344.5,3756.5,3349.8333) polygon(3481.4231,3344.5,3484.5,3341.4231,3488.5,3344.5,3484.5,3348.1364) polygon(3732.5,3336.5,3732.5,3336.5,3732.5,3336.5,3732.5,3336.5) polygon(3664.5,3336.5,3668.5,3334.6538,3672.5,3336.5,3668.5,3338.5) polygon(3820.5,3328.5,3820.5,3328.5,3820.5,3328.5,3820.5,3328.5) polygon(3524.5,3328.5,3524.5,3328.5,3524.5,3328.5,3524.5,3328.5) polygon(3554.7222,3320.5,3556.5,3318.5,3558.5,3320.5,3556.5,3322.2778) polygon(3948.5,3312.5,3948.5,3312.5,3948.5,3312.5,3948.5,3312.5) polygon(3684.5,3312.5,3684.5,3312.5,3684.5,3312.5,3684.5,3312.5) polygon(3587.8846,3312.5,3588.5,3311.8333,3589.3889,3312.5,3588.5,3314.5) polygon(3884.5,3304.5,3884.5,3304.5,3884.5,3304.5,3884.5,3304.5) polygon(3663.1667,3296.5,3668.5,3294.7222,3669.8333,3296.5,3668.5,3298.2778) polygon(3528.5,3296.5,3532.5,3295.1667,3533.1154,3296.5,3532.5,3297.1667) polygon(3700.5,3288.5,3700.5,3288.5,3700.5,3288.5,3700.5,3288.5) polygon(3609.4231,3280.5,3612.5,3277.1667,3615.5769,3280.5,3612.5,3283.3571) polygon(3577.8333,3280.5,3580.5,3278.1,3583.9286,3280.5,3580.5,3283.9286) polygon(3982.1,3128.5,3988.5,3126.2143,3992.0555,3128.5,3988.5,3132.0556) saods9/ds9/doc/user/contour/dialog.png000644 000765 000000 00000021126 11332353405 020245 0ustar00joyewheel000000 000000 ‰PNG  IHDRö0Ê8ÄBbKGDÿÿÿ ½§“ pHYs  šœtIMEÚþßõ IDATxÚíÝ{”Õ}àñ[ÕÕÝ3=3=Ýó½A $F²Ac°0ÆA(؉a7‰mœgü ‡Þ=kO6ÇÇqlÇcpp–Ĭ^挱È`¤A è1’Fšîyõ¼»÷FM©^S]]Ý]Uýýœù£§»êÖ­[U¿úÕ­êÛR.—BlÛù1Š}»ïB(ùø~ÛwÓ"Ûv~lßîû¥­7ß~ÛwŸ9?N‹@`œ<6tüà^%ÿÏìÌ4-CˆSc£³SEtrDâMÍ-Õ× ÄÏÍΨß}sð—+›¥æææ………7Æ#-«6šIŽ>–š_}ÕûÙÌìLfvj¼çÊ+íÏrppP­‹Uk^ã/$IýnûåÛfÞÜß{Û­¡PèßzäÈØH,Ñ¡™s~vzulêdJt®Û¦™‚â3===EÍÒÓÓspp0ZßP­yC¼tqŒGë2‰Ëpÿ?¿çÚk6¬_÷ÆOŸZlhV"uêiäó‡ÃS±U-Íì ‚G’$©øüUR©ü¼f!^Ö|Ðì1òƒÇöŸM®¾á”ú*}úo¼}ÇÖëÞqIS¬nzvþäHúïxjlr†, ¨XGÍïÿÑgõÿë?|EÝb8ï_~ó¡/ýñï !¾ü'*¼.¨™×8‹·8Åâ- k¶år¹©™…œcòÜx¸+ѹÊΩlÚ®X]Dñ­>5u¬¼<Ù¹êÜŒo_­S>Û»só+=ùô¾—/]Þúé½EkL’ÞŠ·;¶^öËý¯dff¯éY³ù’¤$Ä3/IO !~µÿàƒ»±oß¾Åé±ÏöÞl\ˆBˆ“C/‹\.ÿïdjd|ôt¡üßtõ«G‡_zeèì±WÕçÍB´oL´^õÎMù×™ÌÌÌt¦-Ùøô¾ß ü¿Ÿ~£çÒîÿôûÛæf lK˜L)„â¶÷nàðÃ?Û³~uǽã·êƒÕ_˜NN©¯Òʦì-×]™ŸøÑãÿìW¹Å¹©Ñ7s‹ €%ÈÅÿÌ›?ö×oÞ®ùÓGvÃåþÕß?’ŸRß×oÞn4ïÛ¹ÿY|^63šÍ‰Ù\äÒöÆH$^”${ýSñÆz!ÄÌì\z|²cÕ:IVY’P”ð5W®M6ÅΜKúo¾¡Dëåò¾wmܾiå}»_ÌÏÛ?ðàÞ—K¹Üm7]³²+ùä ¯=òËÁ«/ïJÄyò¹_=!+á×o5,äG?Ì’ËåÞ^‘ìb>MB|ã¾?úÔÞp}ƒ©_\\P‘‹zÇþøöÂëÁ¡c¯¾~¢¥{Íç¿óï'_?ØØØô³}‡¾ÿåµË:ZÄÌy]®/ðsßzèÍ㯙Mùµïþëž}﫟YÑÕöØSÏ}ûÿ>ú™»>²óúÍ+;âÏ8zÝö­-ñØÑá3ýß} R߸jy÷–žµ›V5?ôó—4«“É”û†Rš*mßÜ#„˜˜œ:yvôL:sÿc{f§3ÉŽºˆ‘xà0MÈe!Kæ’$Ùx^³Ò ï›ÏûWÿðèßüÑ.Šï[¯7X®áíV‹ÛÇßZ}}¾¾#ÉÌÍÍÍÎΊ¹sç–7µ¯\rMÇ3³Bˆh$œˆ7É!EQÂú"-Í BˆáÓgåÒÚ½æìØŒ¢-Ù<‘>—ŸæèðéæÖ®l("„ˆ(ÊÜl&›Ë†Bo•Pß”ˆÔ7v¶µ29vÑÝQYV­ö…}qðHSkw}S"—ËJ²¬i¡c§Î¦gf燎=ü³gѺXCcï¯Ù²þ÷ꣅÉ"!ivnZS ’>þ¡ë¶nø¨Ù”GŽŸjnëžYÈ !®oJ,Èa!D8¬ÌÍN'ãõBˆ5+:üæç ³wµ%&^Ò¬~W{«Ù”š*½vfê…Á76oX³qÝ!ÄÙÑñ¯~ÿÑÓ©iuŸ£û¦N^&]ðf¥©:[Lçýâ]·¨»wþÇ·3\®qˆ—LÎ-3©‰#Ïf•K·ì˜??úòOe±(„H¿út´éÖh¬ÉzU_;12=3W_ùÔG>ðƒ'^Ì/eMwˉ3éÔä´byg›‰J’´²»Mq.5–]˜9!$±¸¸¨D£rH)äã"—Ëße–%IŽÖeæ )|Y·!V/„XÑ‘Pß!Ï››ŸÄáp¸°õI ß/+aI’#M­±¦äõW_þޫמ:;ú•oÞ?•™þßq·,Ë’$e³šoÜzÅ ›/·˜2¿jùM¸°¸ŽÖÉrèÂjfG'2Bˆã§Îüݽ?.Ôi4=±¸0Ÿ“$ýêN©©R(¤|ퟟœ;³¬­ùøá=[zÞuE÷C{^—C2‡1`âe's½Õk"ë»éͺï­çý§vò÷|÷ýïºå¯¿³[¿\“o´àìÂüÔë{„$-»êæp4n-®»~úõ_F£‘p8ÕÕÞò??Ó;5'ÞµqM6›{äÉçä ™þ…ëI{Ǧf„xëo95úÌáŸ2,d>+ÎŒŽw¶Äÿü“0› ­_Ý!ôi¼’$Ë!Ålš[¢ q‘RHVB‘p8’Αpä};¶©® ršeI^rJ!ɪ{¼{÷›\µ¬óƒ7^{òüd2ÞðÎu«¾ý£''ž›œÖ¬¾Ù”š*õ\ºìw®ÛðÊëÃÓ3s+º;…cã“ã©3­]k$™,0 Ö… Ïòf³)?÷ÝÇ/žËøÙvY¼Á¼…åæûg>÷ÝÇóï|áS;õË5 ñ ž~±­)r6~u¼­;ÿNËÊu#™ÑUMóáp8—Ë8öRó%›­Ûè¹C§Žþíý·Ý¸eÃe«7¬i:—ÿñ{޽ܽö_þþîß»~Ã;Ö_Q”¡co~ï_=täDë²5Â4æH={¨3QwÅ¥+ׯ]õÂÃ''3f…|ï¡g?þÁm[7­Û?xäéçß»õJÃ5µ¾‹ÔÅBrü=Ž]ÖßÖséé½í‘_¼43;_ n*›S Éð¥˜[øÒÀîÿ¸ýŠ­›.o]]jbê•#'†††¤püÑ=‡º’1õê›M©©ÒØÔŒ,‰ïî‰ÕE&23=ýü&Ò˜Ìf”P„#0‹ñ6{2>÷dϻ߯+úyóÙ·é‚,ç-Ä÷üR>÷?ýü'v/WSp~¼ø7†Ïj>ÈœZ]7öÒñ‰eoP/,—Í. ïݲ~ÕâââØøø«c k¬W~nfj2}nfjbþBz´¾1ÞÚmh;óæt&=?ÉŠœŽ6%Û£ MÑhñWž"×¾r]C52<1zfq~Aˆ\Û²Kš[ÇFN2zöDfìüââB´¾Ai63ÑhMv¬ G¢ox®P¾þ¼wlp_6»˜h_ÖÔÚ­¨®*f2çß<:7“‘åP,žœJŸÏå²m+Ö6Ä[ îSh9å^!D~Êá×^Z˜ŸMt¬ˆ·v?ùúÔøh,ÞÒÒµJ GÒg‡§§&æg2Ùl6R”h]sÛ²ú†¦±ÑÓÚÕ?wÊpÊc¯¼ ®ÒôdúÜ›GççrÙ¬,‡¢±ÆxÛ²H´^sŸ@ÁعÓ== Âx`Ïfo¼ö¦·ÂýÁWšÛºÊ1oa2Ã7óó>M~{¼xÍcnâüêØÔkÇG;¯|Ÿ/Š€R(”mߘ™K¯¿ì’‰‰‰ÜÇ_Ÿ‹6&,š)Rß…£±F!I²üÖ•pD’CÍíÝÑ©úœ¤P(—!\“CJ¢sy],ž¯Xc²£.W"Ñü™­)Ù©(ÑP8œÍ9I˜ÒÜÖ©kP”°$ËBä² oõI’º|ýÙ²¹cE¤®^’dͧu±¦DÛr!‰|÷}]C\ GòÝ,š­¦ìXQ×ðÖ”ÍË•PX …„M-]õñ¤Ž !Ir¨¹}y¤~,' Y I’”¹P(,…BF«o<¥¦J‘úÆdûrYV¤œ¿l)a%‚ŽÀ¼Wýâø°éºvæ2¼eêú¼š7-o·^üÁä¹ã¯fRu«¶*ᨾܺ†øó™ásfffæçç&æ3uM[¬ëŽÖ…£uFÈ ‰výÛ-« ¯cÍB5ÒY8 ·vj¦7,$­Dë ë£._/ٱܬù“m¶ ´˜²ëí)›[ß>åj²énL” GBúÕ7œRS%%ijéä ÊÑQ£?3Tm^“QªÞ¶v«uQ±–esb™,DTˆöAkJ Òô™X;xð•XSB’äjÍk+‹ä‡_?xðû³Ô76ççªÖ¼Æ!žï¿€A”5Fcþš×4‹ÏŒ§Ø¢àk±xR—Å ‘OåÇAø×÷Ü[ˆò|‚£¿¿_ý¯¢Ÿ"NÓLà;šwÈâ °ñ@ˆâ„x!@ˆâ &(ÅÎL& ßO¥RùR)׺Ñ/KSxa‰êE»R õ¢ÍŠr}}Í ×¿¶n ‹×în‘bË,Ó¢.Ðþ"ÊÔDÖ5YrA¥×ª¬»%‚âÛ¥°³¬òœÉd2™Lz퀩J}4±Ãï-C!¾Ôl¥LÇ’EîVX®ãè£)\Ñ,ÖHÿ©áF¹s|Me4P¾üΰqŠm1w[&¿î…¥h^[ï3.ÖM½ 4×@fûÌ’΢µ9oA£,}ñ…½MÀ¸{ [¤fe ©†kdñ©ãu·¨¿õ¹Í¬ ã—ƒ*å“wýújþuÜbîn5õ"̧i®ŠÕͰ —ÜpÖ­]¦Ú¢æ²xMBTþýâü²C—ÒD†ÙœÙR¬[Õ-¥ò•9ÅV¥WªF])ª'{»ñ®ívníj¾¼p.ÄëÞ°%wo£%OcÎÚÊ0þŽáÑ_³Ñ­ò‘Ts^ÅVUW`ÉlÑì) ¿ì!6Oc®D9FPIrâBY{3]Oõ7¾|‘j™U²Â•wÐ\žjáä.ÆßÂI±¨pÖ&\ !ÞÝKÝ¤Šºp³b—œÀAý­×ÈÝõuVU³*¹Xõjj2zýêë95|€¤{H‰ÍX™­i¶û»·aksY iëÍ·ßvÇÝ'ÎŽ~»•_}?ÊÿêÓþtK,ž>rüà^0€À"Ä!@ˆâ„x!@ˆB<€𠃑&ó_-‹ïïï§Q €!žøA¢í¨éíí¥QŸJ$ýýýÅ5¾ÜyϽÆY< Hñ@ˆâ„x@y)EM­ÿ…åbçu÷çƒýR&x=‹/ľÂϽÓ|„,^“Û^èóú”êY “%“IýB3£a!ö“kë’ dv]RÊU ø)‹/*¯×„r͹¡Ø ûW E•l=1W-j:Ä[p=ç-„ZÇ•ÉÇèb»Ú5|DñE-ÝÚ-q≰ñž>%ä{ó ƒµuì.Ü(t=€_Øí¨Ñß5uÜ7íbÏû’åÕ‰¯ï‹'P+Y¼:º~ ›é°ú6¬fFõŽ{Z +©þHÿŽYý­?€@…xaÒbñŽE—ˆaÄÔ?”¹äiÃæ›®Ôü… €ÀçJ¹…VÉ2Aˆ,M¡ €Oí ¯ðƒ,@Ðâ;~âÔ ütÔpõTìs<1~âKº,ì=ì:@9ÒvÍ; ø ²¿vDv |é~Åð}(7ÌÖ~⫾S²ß¥\Û|Óì#üðÙ/»&Ob@0C<€ðOˆça[pÌ·[ ëØÀ1žPð‘r¤³„x à¾þõ¯ÓÞ·k×.!ÄÀÀ@±3öööâÀ»úúúò!Þ,d ¾ŸH$Òé4!¨uÖ¹ª(‘H”8AÑ!ÞÁÅ"5Ê·ÝÍy'!¾2{R)§&kÖW.€Ó=öíšÍñÅä~õ©¿¿ŸÝ°Àc6þR8¯;è_Q¼S{ }}}6§d‡ˆïKá'ò `ÔV|组>Máe±„x †ßý›Â;Kä ñàÞA"Oˆ¤ðyB<ø&…/6‘'Ä€oRøbyB<ø)…/*‘gŒ †Šç7vü›Â•ÈâBL÷û_Ñïëë#Ä€o¤Ói‡«~ˆ·k˜Á ž»ã3V9ÄÛ¿ap1µ“ÈÛÌzwÔ”o¤_µ%ëp9‹ïííeXj Ô#MÚ¿ûªŸR3£ÅèffYT£ð7‡Ëâ5¾«ãfQOZq›';Õ0{ gøê×Î6?²Rat{B<€"‚fÅ $÷‚R;jœõëU,¿ÐÔÊkµ5¬›Ô/õÔow/oñªW²Ø,ÛÅ.rMzî  •Èâ Ç’~O­ú¤¯Œ×jkX6©_ê© ž­dê‚*V²ØøžR)½’ù¥˜ÿ7ë€êgñ^¾õx à—Ý×G‡Y>(xv»{gXGO";!>P|1 ϱ¦%ÉŽk ·[‰ïE\§{ùÚÈû‘KÝ5Q­–Ô?­¨ŸÀ¬““mJ`Æw_´$ÍXìeDQ''³»££[|d}»•KFB<ñKD.^mxa‹/¹t³ Š}Éeñ´%!&'‘«Pa¹”+uÏ÷£€k«¹\õ`% «ä‹MïµJú·%Q»Y¼¿½òTm\ùzªªžÝôš>_ZµŒ'j€,@P8è²óŒ(æÙ³Ñ‰õwP¸Ê!Ä("¾4mŽý+ŠØN_%÷ÌKDG @|_‚ë㎕uY Äì jtÔµ:¤Ì¥<Ùi˜Âó¨(!@Scg?ìgs.u猾£Æñï ‚`éHíñe÷]A_<â"…·~²¥Lƒ /9ˆ1Ê„Ž v£¼Íž‹± ló·[Aˆà$Êû‘³±K1˜¸ï :j€ Äñ€òâv+Ps̾UdñTëÒ¬g1ümH~ž› ,ñÝâSÇV¿£ÿñtÇC£(tÔäïÅo¬â49£Ô¥Ø VÊ]9ö0g½‡Žk^¦µ¼“æu(9ûžªÍ¹Há+â5‘Î çgMÀõH­€äø6%û¿ùgs.ë!ˆQ®¯ ¦†¿¥«Ésõɯz[ZÌhXHQ鳿á †I„Y­„É8J«l%^>Ó D%õÅ"š>jkB¹æÜ`1cQ×kêK u… &Ð,˰†oêÏjf'*Í›öQlk>êö)žìØ^﨩îyØzt$u”¯V–aÑêSŽõ›@%ñõîWì!Vúï:ÑïêÝ_áF¡“Äkû„áÝ`Í ©*g)Ôl7‹×å»qª?6 AŒÀ†x;i…7ï̘åû;=™ ª•-9ûÔÙ°À¥Œ3 ûä¢ö u à8ž:îy÷ZJ^ÔŒ…ð­ÏžÈßT9Ä ó{›6#”áOÃþŠb;ûÔ·tì_]Úï0qP±¢AG €2)®£F}¬ßÑÿš—Ík7ÃçXœ]ÚymÿRÔ°„ÒAXPå,ä,€ß¹þ(‹õ5v.Ö©k\B<'ñÝÝQ|­6{BÁz.;%À&:j€âìiwWN'îÖ„x>8¸~’€5@ÍY²ÏÝ~ ïì;± Ľ³²‡Åæ×¥â»äûï‰KB^߉ãºtþî‹çë Ø_ô¥Œ™ÔgÝ/ê6ôwÔèó"£¬w¿údQ ë£æB<€R#û‰â.eàbâ¾[|ßÏ•#3Äâi,ø¾/ž° ñŠUì¿b©ƒAˆà•øn'î[Œ-ÌÓÉ>ÂíV€ü„xþG|¯5Æ54 àA½½½4J ñ^Ø“‰D™JN§ÓlxøQ"‘`ïEQj®£¦¿¿Ÿ­ Ö³x°“³ ôõõÙœ’M€,@À?œ ðËØ¿„x>àx€_ºOÑQ„x!€7ñû9„x!@ˆâ.óúsñö‡`pðSoÈ0€"²øòåk___[\ñ½½½ K ~ÇíV Äñ(õ¡ÉÊ"­çÚõÂË·:úÊ—c‰•\ЦL×d] ‹;CW‡¡ØáÑ,¾p€å÷Ë rTÖE”uu’ɤ¾@×—X™¥˜•YŽÕ±(ÐÅ TÅÕ©üA²xJ&“š_ŸñÃØõ”mÉ0áÖ+“lZ,ÅÝ¡Š«CÚB|墰: ®ä±WÖÞ§Ô¼bí£^P™ö³+°ŽœNjon·æ³¶ÊÞ¾d®X”4ìÆñc|/ÓΠYP™öÃý{Ž!Þñ=ØYp9BU°ã{ ÷Ô ßtÔèoµà ÆÙR\߈ï ÄW“þù?‰šåß]> ñU¼?Y¦ØQ•Õ)÷cÑå[/MÍË}²Ü¥Ü«cQ ÆÃ£Y|åwG_?r )¿L‹Ó[¦§3ËÝ€K–Vîg@+Ðnt”!@ˆâ„x!@ˆB<€ ÄñB<€„x!@ˆâ„x!ñB<€¨>Eó"‘ Q ˜!¾¿¿ŸF€*(Wˆïíí¥}ŸJ$di~—N§]ŒÃ ž:O»X!¼•ÅÛ™,ß™Ó××g=OÔ€/y;ý9„xðY"oÿ~,5=ëÖÂõ#mà6G%woë­oó–,!Þ5Á~’aÉ.?Ú¼FÚU?»õH%!ÞMA}äÔËù2mŽLäíïöôÅ€oùb¿Eˆ?]ÌuåêZˆO&“ÉdÒú;óÚŸËY­*¦ZË­.MƒþµÞnm&}!É –|ð~"ï``ƒ2öŧR)×§ôK˜c׬ð&6lód2YXnáµá›€—yu /öæ“Rî£.•Jå¤ÂA¨y­™R@º&ôe*`ñºØpF 7Üô›[ݼΜ6G-$òÎÆ&“+v„§R)uexLŽmM,pñ.G™pvâ7KºÙ(€&‘w– _ÜnÕåòu#è{lEà:‘*¶É–ììÖ7,M ˜%òއöôsñ…ÈK´õug7­áµL>åì+ >øêSᢞ›c€3|QÖï'cÇ[л!^}KÖ°ë¶'Mw0g” l_”Û®]»víÚE;ø%Uww`"ÅkÇ­>Ôj¿)±V…òK,¥oßÊœ¶5ÚðÍ`78{]-S*°'©?2|­™×lz·jeV¦‹Ë­ÙCËlSZ·­[-oó.Qµƒ PQ|­ Ä#ài>OI•Á`¨N”@ˆ÷=¦ÍO¡£Æ5jzÓ¤Ù™3Ÿ¶äù‹ªuûÕz4µw6Š»ÇK! ÓQãf.²‹+'›É¬Û‡Í]ÃĬ%‰ïn)ú|Ñã{¯âÁ]VÓ|Ž[°È³‹»˜ ÚŸRㄳ¬[Ê~ƒ£”"Tý–Þß{ýô\¼á^Ë®ìJænذöspg[AõÀÖ4ÛLC»•¯mõlÐ=»dmçA,šžôpÉ«N}>bçÒÇΔêiôw\ÕÝš\lÛȆ™58Üm[ë7é¨)îÂ_³§.Ç ôΚÚâªÓ¬y­§´?/[ÇÁfr|,À•¶õQ#|²µ,È!žk5ÎÏÅ;»D"¸ ‹â„x€T´/Þï?îî}´0›‰¶¥ª“Å÷÷÷ÓÜ´0ØL´m³øt:ÝÛÛKsÓÂl&6mÌ,@ˆâ„x¨MÚÛ­‰D‚F€ …øX<¹?-î¼ç^ü+OgñêÉâG†Ð0R.—Û¶óc4̾Ý÷ÿü‰’ÖIEND®B`‚saods9/ds9/doc/user/contour/ds9.con000644 000765 000000 00000231352 11220740726 017506 0ustar00joyewheel000000 000000 2.39617839e+02 2.71644106e+01 2.39617474e+02 2.71647525e+01 2.39616775e+02 2.71644112e+01 2.39617473e+02 2.71637275e+01 2.39617839e+02 2.71644106e+01 2.39625462e+02 2.71657727e+01 2.39625155e+02 2.71659682e+01 2.39624814e+02 2.71657731e+01 2.39625155e+02 2.71656428e+01 2.39625462e+02 2.71657727e+01 2.39589828e+02 2.71726237e+01 2.39589828e+02 2.71726237e+01 2.39589828e+02 2.71726237e+01 2.39589828e+02 2.71726237e+01 2.39589828e+02 2.71726237e+01 2.39634708e+02 2.71739667e+01 2.39634380e+02 2.71747869e+01 2.39633960e+02 2.71739672e+01 2.39634379e+02 2.71737391e+01 2.39634708e+02 2.71739667e+01 2.39626954e+02 2.71739718e+01 2.39626698e+02 2.71742453e+01 2.39626506e+02 2.71739721e+01 2.39626697e+02 2.71732886e+01 2.39626954e+02 2.71739718e+01 2.39597628e+02 2.71739873e+01 2.39597510e+02 2.71742151e+01 2.39597339e+02 2.71739874e+01 2.39597509e+02 2.71738631e+01 2.39597628e+02 2.71739873e+01 2.39637672e+02 2.71753312e+01 2.39637453e+02 2.71755799e+01 2.39637111e+02 2.71753316e+01 2.39637452e+02 2.71751706e+01 2.39637672e+02 2.71753312e+01 2.39629771e+02 2.71753366e+01 2.39629771e+02 2.71753366e+01 2.39629771e+02 2.71753366e+01 2.39629771e+02 2.71753366e+01 2.39629771e+02 2.71753366e+01 2.39624522e+02 2.71753399e+01 2.39624588e+02 2.71767066e+01 2.39623628e+02 2.71778460e+01 2.39622603e+02 2.71767078e+01 2.39622091e+02 2.71760869e+01 2.39621605e+02 2.71753417e+01 2.39622090e+02 2.71746581e+01 2.39623626e+02 2.71745433e+01 2.39624522e+02 2.71753399e+01 2.39628543e+02 2.71767041e+01 2.39628236e+02 2.71769145e+01 2.39628000e+02 2.71767044e+01 2.39628236e+02 2.71763138e+01 2.39628543e+02 2.71767041e+01 2.39599326e+02 2.71767199e+01 2.39599048e+02 2.71780866e+01 2.39599048e+02 2.71780866e+01 2.39599048e+02 2.71780866e+01 2.39597511e+02 2.71767206e+01 2.39597511e+02 2.71767206e+01 2.39597511e+02 2.71767206e+01 2.39599047e+02 2.71764163e+01 2.39599326e+02 2.71767199e+01 2.39592075e+02 2.71767228e+01 2.39591366e+02 2.71772356e+01 2.39590927e+02 2.71767233e+01 2.39591366e+02 2.71762408e+01 2.39592075e+02 2.71767228e+01 2.39633358e+02 2.71780676e+01 2.39633506e+02 2.71794341e+01 2.39632848e+02 2.71804596e+01 2.39632678e+02 2.71808013e+01 2.39631655e+02 2.71821687e+01 2.39631622e+02 2.71835354e+01 2.39632851e+02 2.71843155e+01 2.39634169e+02 2.71849003e+01 2.39633237e+02 2.71862676e+01 2.39632854e+02 2.71872929e+01 2.39632662e+02 2.71876347e+01 2.39631319e+02 2.71886985e+01 2.39629783e+02 2.71890032e+01 2.39629783e+02 2.71890032e+01 2.39629783e+02 2.71890032e+01 2.39628246e+02 2.71886626e+01 2.39626710e+02 2.71890052e+01 2.39628247e+02 2.71896876e+01 2.39629169e+02 2.71903703e+01 2.39628248e+02 2.71909566e+01 2.39627634e+02 2.71917379e+01 2.39628079e+02 2.71931043e+01 2.39628250e+02 2.71934459e+01 2.39628763e+02 2.71944705e+01 2.39629788e+02 2.71949824e+01 2.39630940e+02 2.71944691e+01 2.39629787e+02 2.71941545e+01 2.39628323e+02 2.71931042e+01 2.39628863e+02 2.71917372e+01 2.39629784e+02 2.71907116e+01 2.39631320e+02 2.71905967e+01 2.39631935e+02 2.71903685e+01 2.39631758e+02 2.71890019e+01 2.39632854e+02 2.71878623e+01 2.39634391e+02 2.71876335e+01 2.39634391e+02 2.71876335e+01 2.39635772e+02 2.71862659e+01 2.39635926e+02 2.71858102e+01 2.39637461e+02 2.71853536e+01 2.39638077e+02 2.71862642e+01 2.39637944e+02 2.71876310e+01 2.39637464e+02 2.71883147e+01 2.39635928e+02 2.71885435e+01 2.39635416e+02 2.71889994e+01 2.39634392e+02 2.71894825e+01 2.39633186e+02 2.71903676e+01 2.39634394e+02 2.71914406e+01 2.39634813e+02 2.71917332e+01 2.39635010e+02 2.71930997e+01 2.39634396e+02 2.71937835e+01 2.39633958e+02 2.71944671e+01 2.39634397e+02 2.71949224e+01 2.39634704e+02 2.71944666e+01 2.39635932e+02 2.71934718e+01 2.39636879e+02 2.71944651e+01 2.39636593e+02 2.71958319e+01 2.39637472e+02 2.71966123e+01 2.39638131e+02 2.71971975e+01 2.39637473e+02 2.71985646e+01 2.39637473e+02 2.71985646e+01 2.39637014e+02 2.71999316e+01 2.39637475e+02 2.72004438e+01 2.39638174e+02 2.72012975e+01 2.39637784e+02 2.72026644e+01 2.39639014e+02 2.72032102e+01 2.39639892e+02 2.72026629e+01 2.39640549e+02 2.72012958e+01 2.39640549e+02 2.72012958e+01 2.39640549e+02 2.72012958e+01 2.39642086e+02 2.72017502e+01 2.39642598e+02 2.72012942e+01 2.39642084e+02 2.71999280e+01 2.39642084e+02 2.71999280e+01 2.39642084e+02 2.71999280e+01 2.39643621e+02 2.71996990e+01 2.39644005e+02 2.71999265e+01 2.39644006e+02 2.72012932e+01 2.39643931e+02 2.72026599e+01 2.39643624e+02 2.72028554e+01 2.39642088e+02 2.72040280e+01 2.39642088e+02 2.72040280e+01 2.39641513e+02 2.72053950e+01 2.39640554e+02 2.72065346e+01 2.39639371e+02 2.72053966e+01 2.39639016e+02 2.72049413e+01 2.39638358e+02 2.72053973e+01 2.39639017e+02 2.72067635e+01 2.39639017e+02 2.72067635e+01 2.39639787e+02 2.72081296e+01 2.39640555e+02 2.72082809e+01 2.39642093e+02 2.72090390e+01 2.39643629e+02 2.72085824e+01 2.39645166e+02 2.72089798e+01 2.39645743e+02 2.72094919e+01 2.39645167e+02 2.72101756e+01 2.39643630e+02 2.72096373e+01 2.39642180e+02 2.72108612e+01 2.39642315e+02 2.72122278e+01 2.39642096e+02 2.72123798e+01 2.39641788e+02 2.72122282e+01 2.39641955e+02 2.72108614e+01 2.39640557e+02 2.72101031e+01 2.39639021e+02 2.72104079e+01 2.39637995e+02 2.72094976e+01 2.39638711e+02 2.72081304e+01 2.39637481e+02 2.72072202e+01 2.39637097e+02 2.72067649e+01 2.39635943e+02 2.72057407e+01 2.39635431e+02 2.72053994e+01 2.39635942e+02 2.72050574e+01 2.39636966e+02 2.72040317e+01 2.39635941e+02 2.72035500e+01 2.39634405e+02 2.72040334e+01 2.39634405e+02 2.72040334e+01 2.39634022e+02 2.72054004e+01 2.39634407e+02 2.72067668e+01 2.39634407e+02 2.72067668e+01 2.39634407e+02 2.72067668e+01 2.39633091e+02 2.72081343e+01 2.39632872e+02 2.72088178e+01 2.39632745e+02 2.72095012e+01 2.39632874e+02 2.72101845e+01 2.39633385e+02 2.72095008e+01 2.39634409e+02 2.72091584e+01 2.39635946e+02 2.72094990e+01 2.39635946e+02 2.72094990e+01 2.39635946e+02 2.72094990e+01 2.39635676e+02 2.72108659e+01 2.39634412e+02 2.72122334e+01 2.39635950e+02 2.72133712e+01 2.39636206e+02 2.72135988e+01 2.39637334e+02 2.72149647e+01 2.39636875e+02 2.72163317e+01 2.39636914e+02 2.72176983e+01 2.39635954e+02 2.72183823e+01 2.39635315e+02 2.72190661e+01 2.39635601e+02 2.72204326e+01 2.39634420e+02 2.72214096e+01 2.39633908e+02 2.72218004e+01 2.39634421e+02 2.72224075e+01 2.39635650e+02 2.72217992e+01 2.39635957e+02 2.72214573e+01 2.39637109e+02 2.72204315e+01 2.39637493e+02 2.72200896e+01 2.39639030e+02 2.72204301e+01 2.39639030e+02 2.72204301e+01 2.39639030e+02 2.72204301e+01 2.39638006e+02 2.72217975e+01 2.39638520e+02 2.72231638e+01 2.39638137e+02 2.72245308e+01 2.39637497e+02 2.72251007e+01 2.39636728e+02 2.72245318e+01 2.39635959e+02 2.72235561e+01 2.39634422e+02 2.72236223e+01 2.39633142e+02 2.72245343e+01 2.39634253e+02 2.72259002e+01 2.39632888e+02 2.72268122e+01 2.39632010e+02 2.72272683e+01 2.39631523e+02 2.72286353e+01 2.39631353e+02 2.72290910e+01 2.39630914e+02 2.72300024e+01 2.39631354e+02 2.72302506e+01 2.39631968e+02 2.72300017e+01 2.39632890e+02 2.72296284e+01 2.39633835e+02 2.72286338e+01 2.39634426e+02 2.72282063e+01 2.39635524e+02 2.72286326e+01 2.39635068e+02 2.72299996e+01 2.39635965e+02 2.72308687e+01 2.39636478e+02 2.72313653e+01 2.39637504e+02 2.72327312e+01 2.39637504e+02 2.72327312e+01 2.39637645e+02 2.72340978e+01 2.39637505e+02 2.72342687e+01 2.39637365e+02 2.72340980e+01 2.39635967e+02 2.72327323e+01 2.39634430e+02 2.72327334e+01 2.39634430e+02 2.72327334e+01 2.39632892e+02 2.72315196e+01 2.39631355e+02 2.72322473e+01 2.39629819e+02 2.72327365e+01 2.39629819e+02 2.72327365e+01 2.39629478e+02 2.72341033e+01 2.39628284e+02 2.72350608e+01 2.39627823e+02 2.72354711e+01 2.39626747e+02 2.72360697e+01 2.39625979e+02 2.72368389e+01 2.39626493e+02 2.72382052e+01 2.39625213e+02 2.72391822e+01 2.39624598e+02 2.72395731e+01 2.39623676e+02 2.72400862e+01 2.39622140e+02 2.72408046e+01 2.39622037e+02 2.72409413e+01 2.39622140e+02 2.72413968e+01 2.39622909e+02 2.72423075e+01 2.39623678e+02 2.72425172e+01 2.39625216e+02 2.72433994e+01 2.39625370e+02 2.72436726e+01 2.39625901e+02 2.72450389e+01 2.39625603e+02 2.72464058e+01 2.39625219e+02 2.72469527e+01 2.39624561e+02 2.72477731e+01 2.39625220e+02 2.72482852e+01 2.39625701e+02 2.72491391e+01 2.39625221e+02 2.72496275e+01 2.39623684e+02 2.72501165e+01 2.39622829e+02 2.72491408e+01 2.39623272e+02 2.72477739e+01 2.39623066e+02 2.72464074e+01 2.39622143e+02 2.72450412e+01 2.39621683e+02 2.72464082e+01 2.39620607e+02 2.72472061e+01 2.39619070e+02 2.72474835e+01 2.39617918e+02 2.72477770e+01 2.39619071e+02 2.72488014e+01 2.39619264e+02 2.72491429e+01 2.39619072e+02 2.72495986e+01 2.39618836e+02 2.72505099e+01 2.39619073e+02 2.72510564e+01 2.39619535e+02 2.72518761e+01 2.39619074e+02 2.72529014e+01 2.39617537e+02 2.72527884e+01 2.39616511e+02 2.72518778e+01 2.39615999e+02 2.72516048e+01 2.39615719e+02 2.72518783e+01 2.39615341e+02 2.72532452e+01 2.39614976e+02 2.72546120e+01 2.39614464e+02 2.72559790e+01 2.39614464e+02 2.72559790e+01 2.39614464e+02 2.72559790e+01 2.39612927e+02 2.72554673e+01 2.39611390e+02 2.72558098e+01 2.39611082e+02 2.72559808e+01 2.39611390e+02 2.72566639e+01 2.39612928e+02 2.72573465e+01 2.39612928e+02 2.72573465e+01 2.39612928e+02 2.72573465e+01 2.39611391e+02 2.72575425e+01 2.39609853e+02 2.72573481e+01 2.39608317e+02 2.72583511e+01 2.39607087e+02 2.72587161e+01 2.39607219e+02 2.72600827e+01 2.39607165e+02 2.72614494e+01 2.39606781e+02 2.72619963e+01 2.39605244e+02 2.72619629e+01 2.39604405e+02 2.72614508e+01 2.39604218e+02 2.72600842e+01 2.39603705e+02 2.72597690e+01 2.39602552e+02 2.72600850e+01 2.39602425e+02 2.72614517e+01 2.39602169e+02 2.72616037e+01 2.39601145e+02 2.72628189e+01 2.39600632e+02 2.72633658e+01 2.39599607e+02 2.72628196e+01 2.39599095e+02 2.72626832e+01 2.39598875e+02 2.72628199e+01 2.39597942e+02 2.72641870e+01 2.39597649e+02 2.72655538e+01 2.39597559e+02 2.72656514e+01 2.39596790e+02 2.72655542e+01 2.39596021e+02 2.72652811e+01 2.39595509e+02 2.72655547e+01 2.39594484e+02 2.72662384e+01 2.39592946e+02 2.72661536e+01 2.39591409e+02 2.72669230e+01 2.39592947e+02 2.72680406e+01 2.39593387e+02 2.72682889e+01 2.39592948e+02 2.72684993e+01 2.39591410e+02 2.72684849e+01 2.39589873e+02 2.72693836e+01 2.39588335e+02 2.72688033e+01 2.39586798e+02 2.72694168e+01 2.39585260e+02 2.72694877e+01 2.39584821e+02 2.72696587e+01 2.39583723e+02 2.72705132e+01 2.39582186e+02 2.72703429e+01 2.39581609e+02 2.72710264e+01 2.39580649e+02 2.72715961e+01 2.39579111e+02 2.72722571e+01 2.39578958e+02 2.72723938e+01 2.39577574e+02 2.72730092e+01 2.39576036e+02 2.72727591e+01 2.39574499e+02 2.72727856e+01 2.39572961e+02 2.72733894e+01 2.39571424e+02 2.72733898e+01 2.39570057e+02 2.72723962e+01 2.39569886e+02 2.72723158e+01 2.39569827e+02 2.72723962e+01 2.39569886e+02 2.72726695e+01 2.39570765e+02 2.72737627e+01 2.39569887e+02 2.72751295e+01 2.39569887e+02 2.72751295e+01 2.39569887e+02 2.72751295e+01 2.39568349e+02 2.72737632e+01 2.39566811e+02 2.72746747e+01 2.39566372e+02 2.72737636e+01 2.39565273e+02 2.72733842e+01 2.39564312e+02 2.72737640e+01 2.39564078e+02 2.72751307e+01 2.39564351e+02 2.72764974e+01 2.39563736e+02 2.72767253e+01 2.39563224e+02 2.72764976e+01 2.39563121e+02 2.72751309e+01 2.39562198e+02 2.72748157e+01 2.39560661e+02 2.72746758e+01 2.39560543e+02 2.72751314e+01 2.39559833e+02 2.72764981e+01 2.39559124e+02 2.72770449e+01 2.39558285e+02 2.72764984e+01 2.39557805e+02 2.72751318e+01 2.39557586e+02 2.72747901e+01 2.39556560e+02 2.72737653e+01 2.39556048e+02 2.72733926e+01 2.39554510e+02 2.72735244e+01 2.39552973e+02 2.72737657e+01 2.39552973e+02 2.72737657e+01 2.39552973e+02 2.72737657e+01 2.39551435e+02 2.72730825e+01 2.39550512e+02 2.72723993e+01 2.39549897e+02 2.72716184e+01 2.39548359e+02 2.72714233e+01 2.39546822e+02 2.72721263e+01 2.39545284e+02 2.72721719e+01 2.39545114e+02 2.72723997e+01 2.39543747e+02 2.72733937e+01 2.39542868e+02 2.72723998e+01 2.39543593e+02 2.72710331e+01 2.39542722e+02 2.72696665e+01 2.39542209e+02 2.72692109e+01 2.39540672e+02 2.72689832e+01 2.39539441e+02 2.72682999e+01 2.39539134e+02 2.72681480e+01 2.39537596e+02 2.72678443e+01 2.39536059e+02 2.72672065e+01 2.39534521e+02 2.72669332e+01 2.39534521e+02 2.72669332e+01 2.39534521e+02 2.72669332e+01 2.39536059e+02 2.72666178e+01 2.39536963e+02 2.72655665e+01 2.39536059e+02 2.72645903e+01 2.39534522e+02 2.72641998e+01 2.39534522e+02 2.72641998e+01 2.39534522e+02 2.72641998e+01 2.39535290e+02 2.72628332e+01 2.39536059e+02 2.72618870e+01 2.39536618e+02 2.72614665e+01 2.39536059e+02 2.72609696e+01 2.39534522e+02 2.72605554e+01 2.39532984e+02 2.72614665e+01 2.39532984e+02 2.72614665e+01 2.39532984e+02 2.72614665e+01 2.39532765e+02 2.72600998e+01 2.39532984e+02 2.72599631e+01 2.39534137e+02 2.72587332e+01 2.39534522e+02 2.72580498e+01 2.39534983e+02 2.72573665e+01 2.39534522e+02 2.72568540e+01 2.39533561e+02 2.72559998e+01 2.39532984e+02 2.72557435e+01 2.39532472e+02 2.72559998e+01 2.39531447e+02 2.72565855e+01 2.39530737e+02 2.72559997e+01 2.39531191e+02 2.72546331e+01 2.39530974e+02 2.72532664e+01 2.39530525e+02 2.72518997e+01 2.39531447e+02 2.72505331e+01 2.39530218e+02 2.72491663e+01 2.39529910e+02 2.72488247e+01 2.39529526e+02 2.72477996e+01 2.39529910e+02 2.72474269e+01 2.39531447e+02 2.72477997e+01 2.39532985e+02 2.72464331e+01 2.39531448e+02 2.72460060e+01 2.39529910e+02 2.72452182e+01 2.39529718e+02 2.72450663e+01 2.39529910e+02 2.72446108e+01 2.39530935e+02 2.72436997e+01 2.39531448e+02 2.72430164e+01 2.39531667e+02 2.72423331e+01 2.39531789e+02 2.72409664e+01 2.39531448e+02 2.72402831e+01 2.39529911e+02 2.72402830e+01 2.39529398e+02 2.72395996e+01 2.39529399e+02 2.72382330e+01 2.39529911e+02 2.72380052e+01 2.39530526e+02 2.72382330e+01 2.39531448e+02 2.72390531e+01 2.39532985e+02 2.72392782e+01 2.39533818e+02 2.72382332e+01 2.39534522e+02 2.72374419e+01 2.39535823e+02 2.72382332e+01 2.39536059e+02 2.72385065e+01 2.39536401e+02 2.72382332e+01 2.39536059e+02 2.72379847e+01 2.39535246e+02 2.72368665e+01 2.39534932e+02 2.72354999e+01 2.39536059e+02 2.72345603e+01 2.39536700e+02 2.72341332e+01 2.39536059e+02 2.72332790e+01 2.39534522e+02 2.72337232e+01 2.39533544e+02 2.72327665e+01 2.39534522e+02 2.72321287e+01 2.39536059e+02 2.72320832e+01 2.39536521e+02 2.72313999e+01 2.39537596e+02 2.72302041e+01 2.39537750e+02 2.72300332e+01 2.39537904e+02 2.72286666e+01 2.39539133e+02 2.72272999e+01 2.39539133e+02 2.72272999e+01 2.39539646e+02 2.72259332e+01 2.39540158e+02 2.72245665e+01 2.39540670e+02 2.72235415e+01 2.39541988e+02 2.72245665e+01 2.39542207e+02 2.72259332e+01 2.39542976e+02 2.72245665e+01 2.39542207e+02 2.72243712e+01 2.39541055e+02 2.72231999e+01 2.39542207e+02 2.72224544e+01 2.39542756e+02 2.72218331e+01 2.39543744e+02 2.72211498e+01 2.39545002e+02 2.72218330e+01 2.39545281e+02 2.72221064e+01 2.39545665e+02 2.72218330e+01 2.39545281e+02 2.72214914e+01 2.39544666e+02 2.72204664e+01 2.39545281e+02 2.72194414e+01 2.39546818e+02 2.72195552e+01 2.39546946e+02 2.72190996e+01 2.39546818e+02 2.72187959e+01 2.39545622e+02 2.72177330e+01 2.39546510e+02 2.72163663e+01 2.39546220e+02 2.72149996e+01 2.39546817e+02 2.72136329e+01 2.39546817e+02 2.72122663e+01 2.39546817e+02 2.72122663e+01 2.39546817e+02 2.72122663e+01 2.39548354e+02 2.72133595e+01 2.39548661e+02 2.72136328e+01 2.39549891e+02 2.72139972e+01 2.39551120e+02 2.72136326e+01 2.39551427e+02 2.72133592e+01 2.39551940e+02 2.72122659e+01 2.39551427e+02 2.72108992e+01 2.39549890e+02 2.72114688e+01 2.39548354e+02 2.72117195e+01 2.39547695e+02 2.72108996e+01 2.39548354e+02 2.72101540e+01 2.39549890e+02 2.72099232e+01 2.39551427e+02 2.72108992e+01 2.39552964e+02 2.72101019e+01 2.39554500e+02 2.72095322e+01 2.39554500e+02 2.72095322e+01 2.39556037e+02 2.72086027e+01 2.39557574e+02 2.72083170e+01 2.39559110e+02 2.72083927e+01 2.39559494e+02 2.72081649e+01 2.39559669e+02 2.72067982e+01 2.39559110e+02 2.72063013e+01 2.39557881e+02 2.72067985e+01 2.39557574e+02 2.72074818e+01 2.39556037e+02 2.72072543e+01 2.39554500e+02 2.72080517e+01 2.39552963e+02 2.72077102e+01 2.39551427e+02 2.72081659e+01 2.39551427e+02 2.72081659e+01 2.39551427e+02 2.72081659e+01 2.39551287e+02 2.72067993e+01 2.39551427e+02 2.72065715e+01 2.39552963e+02 2.72058880e+01 2.39554500e+02 2.72057251e+01 2.39556036e+02 2.72054321e+01 2.39556036e+02 2.72040654e+01 2.39554499e+02 2.72026989e+01 2.39554499e+02 2.72026989e+01 2.39554499e+02 2.72026989e+01 2.39556036e+02 2.72026987e+01 2.39556036e+02 2.72026987e+01 2.39557573e+02 2.72040652e+01 2.39559109e+02 2.72026983e+01 2.39559109e+02 2.72026983e+01 2.39559109e+02 2.72026983e+01 2.39560646e+02 2.72031081e+01 2.39562183e+02 2.72026978e+01 2.39561118e+02 2.72013313e+01 2.39561414e+02 2.71999646e+01 2.39562182e+02 2.71997692e+01 2.39562840e+02 2.71985977e+01 2.39562181e+02 2.71972311e+01 2.39562181e+02 2.71972311e+01 2.39562181e+02 2.71972311e+01 2.39563266e+02 2.71958643e+01 2.39563717e+02 2.71952430e+01 2.39564678e+02 2.71958640e+01 2.39564486e+02 2.71972307e+01 2.39565084e+02 2.71985973e+01 2.39563719e+02 2.71999642e+01 2.39563719e+02 2.71999642e+01 2.39563104e+02 2.72013310e+01 2.39563719e+02 2.72020763e+01 2.39564817e+02 2.72026973e+01 2.39565256e+02 2.72033806e+01 2.39565695e+02 2.72026971e+01 2.39565256e+02 2.72023556e+01 2.39564487e+02 2.72013307e+01 2.39565255e+02 2.72001591e+01 2.39566792e+02 2.72008422e+01 2.39567560e+02 2.71999634e+01 2.39566791e+02 2.71991436e+01 2.39565474e+02 2.71985972e+01 2.39566791e+02 2.71977769e+01 2.39567350e+02 2.71972301e+01 2.39567943e+02 2.71958634e+01 2.39567098e+02 2.71944969e+01 2.39566790e+02 2.71931303e+01 2.39566790e+02 2.71931303e+01 2.39566448e+02 2.71917637e+01 2.39566789e+02 2.71913731e+01 2.39568326e+02 2.71913428e+01 2.39569862e+02 2.71908933e+01 2.39571207e+02 2.71917626e+01 2.39571399e+02 2.71931292e+01 2.39572936e+02 2.71931289e+01 2.39574472e+02 2.71930042e+01 2.39575496e+02 2.71917615e+01 2.39576008e+02 2.71907852e+01 2.39576599e+02 2.71917612e+01 2.39576667e+02 2.71931279e+01 2.39577546e+02 2.71944943e+01 2.39578911e+02 2.71931273e+01 2.39579082e+02 2.71929905e+01 2.39580618e+02 2.71923068e+01 2.39581130e+02 2.71917599e+01 2.39582154e+02 2.71903929e+01 2.39580617e+02 2.71898468e+01 2.39579849e+02 2.71890270e+01 2.39579080e+02 2.71882818e+01 2.39577982e+02 2.71876609e+01 2.39579080e+02 2.71871349e+01 2.39580616e+02 2.71872045e+01 2.39581128e+02 2.71876599e+01 2.39582153e+02 2.71890263e+01 2.39583689e+02 2.71885475e+01 2.39584640e+02 2.71876588e+01 2.39585225e+02 2.71868176e+01 2.39586761e+02 2.71865192e+01 2.39587041e+02 2.71862913e+01 2.39588297e+02 2.71851727e+01 2.39589834e+02 2.71859487e+01 2.39590858e+02 2.71849233e+01 2.39591369e+02 2.71835564e+01 2.39591369e+02 2.71835564e+01 2.39592905e+02 2.71830302e+01 2.39593674e+02 2.71835555e+01 2.39592906e+02 2.71844100e+01 2.39592138e+02 2.71849228e+01 2.39592907e+02 2.71857425e+01 2.39594443e+02 2.71862885e+01 2.39595979e+02 2.71856046e+01 2.39596620e+02 2.71862877e+01 2.39595980e+02 2.71869713e+01 2.39594443e+02 2.71862885e+01 2.39592907e+02 2.71867447e+01 2.39591371e+02 2.71876564e+01 2.39591371e+02 2.71876564e+01 2.39589835e+02 2.71890237e+01 2.39591372e+02 2.71896443e+01 2.39592225e+02 2.71890227e+01 2.39592908e+02 2.71883392e+01 2.39594444e+02 2.71883911e+01 2.39595981e+02 2.71890212e+01 2.39597517e+02 2.71878817e+01 2.39598798e+02 2.71890201e+01 2.39597518e+02 2.71898748e+01 2.39596750e+02 2.71903876e+01 2.39596665e+02 2.71917543e+01 2.39595983e+02 2.71922515e+01 2.39595445e+02 2.71931215e+01 2.39595984e+02 2.71936527e+01 2.39597328e+02 2.71931207e+01 2.39597520e+02 2.71928928e+01 2.39598032e+02 2.71931204e+01 2.39599057e+02 2.71940310e+01 2.39599671e+02 2.71931197e+01 2.39599056e+02 2.71925733e+01 2.39598479e+02 2.71917535e+01 2.39598286e+02 2.71903869e+01 2.39599054e+02 2.71893616e+01 2.39599182e+02 2.71890199e+01 2.39600590e+02 2.71880797e+01 2.39602126e+02 2.71879252e+01 2.39603279e+02 2.71890180e+01 2.39603664e+02 2.71895645e+01 2.39604222e+02 2.71890176e+01 2.39603663e+02 2.71884105e+01 2.39602702e+02 2.71876516e+01 2.39603662e+02 2.71866750e+01 2.39605198e+02 2.71869671e+01 2.39605813e+02 2.71876502e+01 2.39606736e+02 2.71883331e+01 2.39607394e+02 2.71876494e+01 2.39608271e+02 2.71871023e+01 2.39608830e+02 2.71876487e+01 2.39609297e+02 2.71890151e+01 2.39608273e+02 2.71897966e+01 2.39607659e+02 2.71903826e+01 2.39608274e+02 2.71908139e+01 2.39609426e+02 2.71903817e+01 2.39609810e+02 2.71899260e+01 2.39611345e+02 2.71890141e+01 2.39611345e+02 2.71890141e+01 2.39611612e+02 2.71876473e+01 2.39611344e+02 2.71865541e+01 2.39609807e+02 2.71862815e+01 2.39609807e+02 2.71862815e+01 2.39609166e+02 2.71849152e+01 2.39609806e+02 2.71837760e+01 2.39611342e+02 2.71841331e+01 2.39612110e+02 2.71835470e+01 2.39612878e+02 2.71828633e+01 2.39613646e+02 2.71835462e+01 2.39614415e+02 2.71843658e+01 2.39614769e+02 2.71835456e+01 2.39615182e+02 2.71821787e+01 2.39615950e+02 2.71820264e+01 2.39616257e+02 2.71821781e+01 2.39617231e+02 2.71835442e+01 2.39617487e+02 2.71838857e+01 2.39617668e+02 2.71835440e+01 2.39619023e+02 2.71822620e+01 2.39620236e+02 2.71835425e+01 2.39620561e+02 2.71844534e+01 2.39622097e+02 2.71839730e+01 2.39622755e+02 2.71835410e+01 2.39622095e+02 2.71821747e+01 2.39620559e+02 2.71829349e+01 2.39619279e+02 2.71821764e+01 2.39619022e+02 2.71819488e+01 2.39618473e+02 2.71808102e+01 2.39618252e+02 2.71794437e+01 2.39619020e+02 2.71789877e+01 2.39619789e+02 2.71794428e+01 2.39620558e+02 2.71803534e+01 2.39621172e+02 2.71808086e+01 2.39622095e+02 2.71821747e+01 2.39623631e+02 2.71809780e+01 2.39625167e+02 2.71808062e+01 2.39625167e+02 2.71808062e+01 2.39626703e+02 2.71799852e+01 2.39628239e+02 2.71808043e+01 2.39628239e+02 2.71808043e+01 2.39629776e+02 2.71814245e+01 2.39630367e+02 2.71808029e+01 2.39630543e+02 2.71794361e+01 2.39631311e+02 2.71792404e+01 2.39632462e+02 2.71780682e+01 2.39632846e+02 2.71776124e+01 2.39633358e+02 2.71780676e+01 2.39629993e+02 2.71780698e+01 2.39629774e+02 2.71787533e+01 2.39629646e+02 2.71780700e+01 2.39629773e+02 2.71779181e+01 2.39629993e+02 2.71780698e+01 2.39617902e+02 2.71780772e+01 2.39617484e+02 2.71786631e+01 2.39617064e+02 2.71780777e+01 2.39617483e+02 2.71775649e+01 2.39617902e+02 2.71780772e+01 2.39592903e+02 2.71780892e+01 2.39592903e+02 2.71780892e+01 2.39592903e+02 2.71780892e+01 2.39592903e+02 2.71780892e+01 2.39592903e+02 2.71780892e+01 2.39616926e+02 2.71794444e+01 2.39615948e+02 2.71800827e+01 2.39615315e+02 2.71794453e+01 2.39615948e+02 2.71788072e+01 2.39616926e+02 2.71794444e+01 2.39598281e+02 2.71794536e+01 2.39599049e+02 2.71805922e+01 2.39599562e+02 2.71808197e+01 2.39599562e+02 2.71821864e+01 2.39600587e+02 2.71835526e+01 2.39602123e+02 2.71830964e+01 2.39602252e+02 2.71835519e+01 2.39602124e+02 2.71836495e+01 2.39600876e+02 2.71849192e+01 2.39600588e+02 2.71854318e+01 2.39600012e+02 2.71849195e+01 2.39599051e+02 2.71842366e+01 2.39597954e+02 2.71835538e+01 2.39598932e+02 2.71821867e+01 2.39597513e+02 2.71812226e+01 2.39596233e+02 2.71808212e+01 2.39596814e+02 2.71794543e+01 2.39597512e+02 2.71788845e+01 2.39598281e+02 2.71794536e+01 2.39579635e+02 2.71794604e+01 2.39579077e+02 2.71800680e+01 2.39578638e+02 2.71794607e+01 2.39579077e+02 2.71791569e+01 2.39579635e+02 2.71794604e+01 2.39611647e+02 2.71808139e+01 2.39612109e+02 2.71821803e+01 2.39611341e+02 2.71828641e+01 2.39609805e+02 2.71830927e+01 2.39608268e+02 2.71823066e+01 2.39608098e+02 2.71821824e+01 2.39608267e+02 2.71808157e+01 2.39608267e+02 2.71808157e+01 2.39608267e+02 2.71808157e+01 2.39609804e+02 2.71817911e+01 2.39611084e+02 2.71808142e+01 2.39611340e+02 2.71806433e+01 2.39611647e+02 2.71808139e+01 2.39593377e+02 2.71808223e+01 2.39592904e+02 2.71812781e+01 2.39591675e+02 2.71808230e+01 2.39592904e+02 2.71804020e+01 2.39593377e+02 2.71808223e+01 2.39582699e+02 2.71808261e+01 2.39582150e+02 2.71816805e+01 2.39581296e+02 2.71808266e+01 2.39582150e+02 2.71799721e+01 2.39582699e+02 2.71808261e+01 2.39639434e+02 2.71821633e+01 2.39640532e+02 2.71833014e+01 2.39640686e+02 2.71835290e+01 2.39640533e+02 2.71837569e+01 2.39638997e+02 2.71840428e+01 2.39637844e+02 2.71835311e+01 2.39637459e+02 2.71826203e+01 2.39636947e+02 2.71821651e+01 2.39637458e+02 2.71818914e+01 2.39638995e+02 2.71818903e+01 2.39639434e+02 2.71821633e+01 2.39625680e+02 2.71821725e+01 2.39626705e+02 2.71827186e+01 2.39628022e+02 2.71835377e+01 2.39628051e+02 2.71849044e+01 2.39628243e+02 2.71851776e+01 2.39629779e+02 2.71852069e+01 2.39630394e+02 2.71849028e+01 2.39630700e+02 2.71835360e+01 2.39629778e+02 2.71830810e+01 2.39628241e+02 2.71832642e+01 2.39627472e+02 2.71821714e+01 2.39626704e+02 2.71813909e+01 2.39625680e+02 2.71821725e+01 2.39605786e+02 2.71821835e+01 2.39605196e+02 2.71830380e+01 2.39603659e+02 2.71823948e+01 2.39602891e+02 2.71821849e+01 2.39603659e+02 2.71817941e+01 2.39605195e+02 2.71817283e+01 2.39605786e+02 2.71821835e+01 2.39580614e+02 2.71821934e+01 2.39580614e+02 2.71821934e+01 2.39580614e+02 2.71821934e+01 2.39580614e+02 2.71821934e+01 2.39580614e+02 2.71821934e+01 2.39573701e+02 2.71821954e+01 2.39572933e+02 2.71829548e+01 2.39572079e+02 2.71821958e+01 2.39572932e+02 2.71814363e+01 2.39573701e+02 2.71821954e+01 2.39636436e+02 2.71835321e+01 2.39635924e+02 2.71839880e+01 2.39634388e+02 2.71844446e+01 2.39634080e+02 2.71835337e+01 2.39634387e+02 2.71829868e+01 2.39635923e+02 2.71830769e+01 2.39636436e+02 2.71835321e+01 2.39589449e+02 2.71835571e+01 2.39588297e+02 2.71843776e+01 2.39587877e+02 2.71835577e+01 2.39588296e+02 2.71832647e+01 2.39589449e+02 2.71835571e+01 2.39607598e+02 2.71849160e+01 2.39606734e+02 2.71859414e+01 2.39606105e+02 2.71849167e+01 2.39606733e+02 2.71842331e+01 2.39607598e+02 2.71849160e+01 2.39587273e+02 2.71849246e+01 2.39586761e+02 2.71853803e+01 2.39585225e+02 2.71856086e+01 2.39584526e+02 2.71849255e+01 2.39585224e+02 2.71837864e+01 2.39586761e+02 2.71847729e+01 2.39587273e+02 2.71849246e+01 2.39582664e+02 2.71849261e+01 2.39582152e+02 2.71853363e+01 2.39580615e+02 2.71856627e+01 2.39579983e+02 2.71849270e+01 2.39580615e+02 2.71842890e+01 2.39582151e+02 2.71844138e+01 2.39582664e+02 2.71849261e+01 2.39643992e+02 2.71862599e+01 2.39643608e+02 2.71868069e+01 2.39642840e+02 2.71862608e+01 2.39643608e+02 2.71859185e+01 2.39643992e+02 2.71862599e+01 2.39623464e+02 2.71862739e+01 2.39622099e+02 2.71871858e+01 2.39620870e+02 2.71876421e+01 2.39622100e+02 2.71879291e+01 2.39623102e+02 2.71890074e+01 2.39623126e+02 2.71903741e+01 2.39623638e+02 2.71910571e+01 2.39625175e+02 2.71908698e+01 2.39625789e+02 2.71903724e+01 2.39625174e+02 2.71892795e+01 2.39625003e+02 2.71890063e+01 2.39623636e+02 2.71880960e+01 2.39622868e+02 2.71876409e+01 2.39623635e+02 2.71865471e+01 2.39624147e+02 2.71862735e+01 2.39623634e+02 2.71855905e+01 2.39623464e+02 2.71862739e+01 2.39576775e+02 2.71862945e+01 2.39576007e+02 2.71872709e+01 2.39575308e+02 2.71862949e+01 2.39576006e+02 2.71856735e+01 2.39576775e+02 2.71862945e+01 2.39573446e+02 2.71862954e+01 2.39572934e+02 2.71867056e+01 2.39572579e+02 2.71862956e+01 2.39572934e+02 2.71857831e+01 2.39573446e+02 2.71862954e+01 2.39648603e+02 2.71876230e+01 2.39648219e+02 2.71884043e+01 2.39647877e+02 2.71876236e+01 2.39648218e+02 2.71873196e+01 2.39648603e+02 2.71876230e+01 2.39642073e+02 2.71876280e+01 2.39642073e+02 2.71876280e+01 2.39642073e+02 2.71876280e+01 2.39642073e+02 2.71876280e+01 2.39642073e+02 2.71876280e+01 2.39599821e+02 2.71876529e+01 2.39599054e+02 2.71887922e+01 2.39597773e+02 2.71876538e+01 2.39599053e+02 2.71870838e+01 2.39599821e+02 2.71876529e+01 2.39652947e+02 2.71889862e+01 2.39652829e+02 2.71890839e+01 2.39652727e+02 2.71889864e+01 2.39652829e+02 2.71889009e+01 2.39652947e+02 2.71889862e+01 2.39614248e+02 2.71890125e+01 2.39614419e+02 2.71903791e+01 2.39614572e+02 2.71890123e+01 2.39614418e+02 2.71886708e+01 2.39614248e+02 2.71890125e+01 2.39585885e+02 2.71890251e+01 2.39586763e+02 2.71903914e+01 2.39587377e+02 2.71890245e+01 2.39586762e+02 2.71886343e+01 2.39585885e+02 2.71890251e+01 2.39577544e+02 2.71890277e+01 2.39577544e+02 2.71890277e+01 2.39577544e+02 2.71890277e+01 2.39577544e+02 2.71890277e+01 2.39577544e+02 2.71890277e+01 2.39641307e+02 2.71903619e+01 2.39640540e+02 2.71913875e+01 2.39639004e+02 2.71917302e+01 2.39639004e+02 2.71917302e+01 2.39639004e+02 2.71917302e+01 2.39638234e+02 2.71903641e+01 2.39639002e+02 2.71896802e+01 2.39640538e+02 2.71899525e+01 2.39641307e+02 2.71903619e+01 2.39620181e+02 2.71903758e+01 2.39620566e+02 2.71910589e+01 2.39621077e+02 2.71903753e+01 2.39620565e+02 2.71902902e+01 2.39620181e+02 2.71903758e+01 2.39582154e+02 2.71903929e+01 2.39583691e+02 2.71913036e+01 2.39584458e+02 2.71903922e+01 2.39583690e+02 2.71900888e+01 2.39582154e+02 2.71903929e+01 2.39574471e+02 2.71903952e+01 2.39574471e+02 2.71903952e+01 2.39572935e+02 2.71903955e+01 2.39571399e+02 2.71913070e+01 2.39570886e+02 2.71903960e+01 2.39571398e+02 2.71898493e+01 2.39572935e+02 2.71903955e+01 2.39574471e+02 2.71903952e+01 2.39574471e+02 2.71903952e+01 2.39556034e+02 2.71903988e+01 2.39556034e+02 2.71903988e+01 2.39556034e+02 2.71903988e+01 2.39556034e+02 2.71903988e+01 2.39556034e+02 2.71903988e+01 2.39645867e+02 2.71917251e+01 2.39645150e+02 2.71924090e+01 2.39644253e+02 2.71917264e+01 2.39645149e+02 2.71911629e+01 2.39645867e+02 2.71917251e+01 2.39589222e+02 2.71917572e+01 2.39589398e+02 2.71931238e+01 2.39588814e+02 2.71944907e+01 2.39589838e+02 2.71948320e+01 2.39590145e+02 2.71944902e+01 2.39590221e+02 2.71931235e+01 2.39591373e+02 2.71923776e+01 2.39592910e+02 2.71917558e+01 2.39591373e+02 2.71911352e+01 2.39589836e+02 2.71914153e+01 2.39589222e+02 2.71917572e+01 2.39564058e+02 2.71917641e+01 2.39563717e+02 2.71919464e+01 2.39563278e+02 2.71917643e+01 2.39563717e+02 2.71914909e+01 2.39564058e+02 2.71917641e+01 2.39651856e+02 2.71930871e+01 2.39651297e+02 2.71935431e+01 2.39650272e+02 2.71930884e+01 2.39651296e+02 2.71927838e+01 2.39651856e+02 2.71930871e+01 2.39624562e+02 2.71931065e+01 2.39625177e+02 2.71934966e+01 2.39625484e+02 2.71931060e+01 2.39625176e+02 2.71928025e+01 2.39624562e+02 2.71931065e+01 2.39570785e+02 2.71944961e+01 2.39569863e+02 2.71951270e+01 2.39568519e+02 2.71958632e+01 2.39569305e+02 2.71972297e+01 2.39569864e+02 2.71985963e+01 2.39569864e+02 2.71985963e+01 2.39571401e+02 2.71991653e+01 2.39572499e+02 2.71985956e+01 2.39572937e+02 2.71980489e+01 2.39573859e+02 2.71972286e+01 2.39572937e+02 2.71967164e+01 2.39571401e+02 2.71968876e+01 2.39570691e+02 2.71958627e+01 2.39571400e+02 2.71950426e+01 2.39572083e+02 2.71944957e+01 2.39571399e+02 2.71931292e+01 2.39570785e+02 2.71944961e+01 2.39562693e+02 2.71944977e+01 2.39562181e+02 2.71947711e+01 2.39561412e+02 2.71944979e+01 2.39562181e+02 2.71942566e+01 2.39562693e+02 2.71944977e+01 2.39640763e+02 2.71958289e+01 2.39640544e+02 2.71961708e+01 2.39639776e+02 2.71958297e+01 2.39640544e+02 2.71955558e+01 2.39640763e+02 2.71958289e+01 2.39625947e+02 2.71958390e+01 2.39626715e+02 2.71960338e+01 2.39627099e+02 2.71958383e+01 2.39626715e+02 2.71955652e+01 2.39625947e+02 2.71958390e+01 2.39621751e+02 2.71958416e+01 2.39622106e+02 2.71966613e+01 2.39623028e+02 2.71958408e+01 2.39622105e+02 2.71953289e+01 2.39621751e+02 2.71958416e+01 2.39584888e+02 2.71958587e+01 2.39585229e+02 2.71965419e+01 2.39585844e+02 2.71958584e+01 2.39585229e+02 2.71954681e+01 2.39584888e+02 2.71958587e+01 2.39575498e+02 2.71972282e+01 2.39576010e+02 2.71973523e+01 2.39576779e+02 2.71972279e+01 2.39576010e+02 2.71970003e+01 2.39575498e+02 2.71972282e+01 2.39659190e+02 2.71985476e+01 2.39658985e+02 2.71987186e+01 2.39658601e+02 2.71985481e+01 2.39658985e+02 2.71983656e+01 2.39659190e+02 2.71985476e+01 2.39655912e+02 2.71985504e+01 2.39655912e+02 2.71985504e+01 2.39654376e+02 2.71990072e+01 2.39653863e+02 2.71985521e+01 2.39654375e+02 2.71977317e+01 2.39655912e+02 2.71985504e+01 2.39655912e+02 2.71985504e+01 2.39631903e+02 2.71985685e+01 2.39632864e+02 2.71994220e+01 2.39634400e+02 2.71986387e+01 2.39634912e+02 2.71985664e+01 2.39634400e+02 2.71982251e+01 2.39632863e+02 2.71974289e+01 2.39631903e+02 2.71985685e+01 2.39626599e+02 2.71985719e+01 2.39626717e+02 2.71986961e+01 2.39626808e+02 2.71985718e+01 2.39626717e+02 2.71983766e+01 2.39626599e+02 2.71985719e+01 2.39560865e+02 2.71985980e+01 2.39560645e+02 2.71992814e+01 2.39560474e+02 2.71985981e+01 2.39560645e+02 2.71983247e+01 2.39560865e+02 2.71985980e+01 2.39639011e+02 2.71999302e+01 2.39639011e+02 2.71999302e+01 2.39639011e+02 2.71999302e+01 2.39639011e+02 2.71999302e+01 2.39639011e+02 2.71999302e+01 2.39589750e+02 2.71999570e+01 2.39589840e+02 2.72000329e+01 2.39589943e+02 2.71999569e+01 2.39589840e+02 2.71995014e+01 2.39589750e+02 2.71999570e+01 2.39557914e+02 2.71999651e+01 2.39557572e+02 2.72002385e+01 2.39557188e+02 2.71999652e+01 2.39557572e+02 2.71996919e+01 2.39557914e+02 2.71999651e+01 2.39652842e+02 2.72012863e+01 2.39652842e+02 2.72012863e+01 2.39652842e+02 2.72012863e+01 2.39652842e+02 2.72012863e+01 2.39652842e+02 2.72012863e+01 2.39633964e+02 2.72013004e+01 2.39632867e+02 2.72022773e+01 2.39632252e+02 2.72026682e+01 2.39631331e+02 2.72034888e+01 2.39630819e+02 2.72040358e+01 2.39631332e+02 2.72044911e+01 2.39631890e+02 2.72040351e+01 2.39632868e+02 2.72031648e+01 2.39633635e+02 2.72026673e+01 2.39634403e+02 2.72019834e+01 2.39635171e+02 2.72012996e+01 2.39634402e+02 2.72010516e+01 2.39633964e+02 2.72013004e+01 2.39629665e+02 2.72013033e+01 2.39629793e+02 2.72014740e+01 2.39630177e+02 2.72013029e+01 2.39629793e+02 2.72011513e+01 2.39629665e+02 2.72013033e+01 2.39572554e+02 2.72013290e+01 2.39572939e+02 2.72017389e+01 2.39574091e+02 2.72013286e+01 2.39572938e+02 2.72007431e+01 2.39572554e+02 2.72013290e+01 2.39569646e+02 2.72013296e+01 2.39569865e+02 2.72020129e+01 2.39570145e+02 2.72013295e+01 2.39569865e+02 2.72004185e+01 2.39569646e+02 2.72013296e+01 2.39554115e+02 2.72013323e+01 2.39552963e+02 2.72017424e+01 2.39552578e+02 2.72013325e+01 2.39552962e+02 2.72005124e+01 2.39554115e+02 2.72013323e+01 2.39646697e+02 2.72026578e+01 2.39646697e+02 2.72026578e+01 2.39646697e+02 2.72026578e+01 2.39646697e+02 2.72026578e+01 2.39646697e+02 2.72026578e+01 2.39620501e+02 2.72026756e+01 2.39620574e+02 2.72027377e+01 2.39620766e+02 2.72026755e+01 2.39620574e+02 2.72026162e+01 2.39620501e+02 2.72026756e+01 2.39662406e+02 2.72040114e+01 2.39662065e+02 2.72043154e+01 2.39661625e+02 2.72040121e+01 2.39662064e+02 2.72035562e+01 2.39662406e+02 2.72040114e+01 2.39656175e+02 2.72053835e+01 2.39655920e+02 2.72064087e+01 2.39655631e+02 2.72053839e+01 2.39655919e+02 2.72051679e+01 2.39656175e+02 2.72053835e+01 2.39647469e+02 2.72067572e+01 2.39646701e+02 2.72068629e+01 2.39646530e+02 2.72067579e+01 2.39646701e+02 2.72066335e+01 2.39647469e+02 2.72067572e+01 2.39642571e+02 2.72067609e+01 2.39642092e+02 2.72077375e+01 2.39640993e+02 2.72067621e+01 2.39642090e+02 2.72061401e+01 2.39642571e+02 2.72067609e+01 2.39628920e+02 2.72081371e+01 2.39629799e+02 2.72086335e+01 2.39630237e+02 2.72081362e+01 2.39629798e+02 2.72073556e+01 2.39628920e+02 2.72081371e+01 2.39665298e+02 2.72094755e+01 2.39665144e+02 2.72095999e+01 2.39665004e+02 2.72094758e+01 2.39665144e+02 2.72093390e+01 2.39665298e+02 2.72094755e+01 2.39648411e+02 2.72094898e+01 2.39648240e+02 2.72096418e+01 2.39647984e+02 2.72094901e+01 2.39648240e+02 2.72091483e+01 2.39648411e+02 2.72094898e+01 2.39547256e+02 2.72095329e+01 2.39546817e+02 2.72098063e+01 2.39546510e+02 2.72095330e+01 2.39546817e+02 2.72089863e+01 2.39547256e+02 2.72095329e+01 2.39650461e+02 2.72108548e+01 2.39649780e+02 2.72122220e+01 2.39649780e+02 2.72122220e+01 2.39649780e+02 2.72122220e+01 2.39649266e+02 2.72108558e+01 2.39649778e+02 2.72103998e+01 2.39650461e+02 2.72108548e+01 2.39638509e+02 2.72108639e+01 2.39637656e+02 2.72122311e+01 2.39637486e+02 2.72124590e+01 2.39637229e+02 2.72122314e+01 2.39636870e+02 2.72108650e+01 2.39637484e+02 2.72099535e+01 2.39638509e+02 2.72108639e+01 2.39563625e+02 2.72108975e+01 2.39563721e+02 2.72110683e+01 2.39563839e+02 2.72108975e+01 2.39563721e+02 2.72105558e+01 2.39563625e+02 2.72108975e+01 2.39558855e+02 2.72108983e+01 2.39559111e+02 2.72112020e+01 2.39560648e+02 2.72108980e+01 2.39559111e+02 2.72105078e+01 2.39558855e+02 2.72108983e+01 2.39645938e+02 2.72122250e+01 2.39645390e+02 2.72135921e+01 2.39645171e+02 2.72137289e+01 2.39643634e+02 2.72136846e+01 2.39643463e+02 2.72135936e+01 2.39643634e+02 2.72133982e+01 2.39644401e+02 2.72122262e+01 2.39645168e+02 2.72113145e+01 2.39645938e+02 2.72122250e+01 2.39640048e+02 2.72135961e+01 2.39639024e+02 2.72138702e+01 2.39638585e+02 2.72135971e+01 2.39639023e+02 2.72133235e+01 2.39640048e+02 2.72135961e+01 2.39554117e+02 2.72136323e+01 2.39553989e+02 2.72149990e+01 2.39552965e+02 2.72161380e+01 2.39552728e+02 2.72163658e+01 2.39552965e+02 2.72169124e+01 2.39554117e+02 2.72177323e+01 2.39554502e+02 2.72178042e+01 2.39554611e+02 2.72177322e+01 2.39554502e+02 2.72174589e+01 2.39553477e+02 2.72163657e+01 2.39554501e+02 2.72157582e+01 2.39555599e+02 2.72149988e+01 2.39554843e+02 2.72136322e+01 2.39554501e+02 2.72133589e+01 2.39554117e+02 2.72136323e+01 2.39542890e+02 2.72136331e+01 2.39542207e+02 2.72149998e+01 2.39542207e+02 2.72149998e+01 2.39542207e+02 2.72149998e+01 2.39541695e+02 2.72136332e+01 2.39542207e+02 2.72129498e+01 2.39542890e+02 2.72136331e+01 2.39633390e+02 2.72149674e+01 2.39634415e+02 2.72154637e+01 2.39634887e+02 2.72149664e+01 2.39634414e+02 2.72144201e+01 2.39633390e+02 2.72149674e+01 2.39627691e+02 2.72149712e+01 2.39628268e+02 2.72154264e+01 2.39629190e+02 2.72163369e+01 2.39629636e+02 2.72177033e+01 2.39629806e+02 2.72178274e+01 2.39629897e+02 2.72177031e+01 2.39630364e+02 2.72163361e+01 2.39629804e+02 2.72152432e+01 2.39629420e+02 2.72149701e+01 2.39628267e+02 2.72145153e+01 2.39627691e+02 2.72149712e+01 2.39648247e+02 2.72163232e+01 2.39648247e+02 2.72163232e+01 2.39648247e+02 2.72163232e+01 2.39648247e+02 2.72163232e+01 2.39648247e+02 2.72163232e+01 2.39547202e+02 2.72163662e+01 2.39548354e+02 2.72169519e+01 2.39548662e+02 2.72163661e+01 2.39548354e+02 2.72160245e+01 2.39547202e+02 2.72163662e+01 2.39539646e+02 2.72163666e+01 2.39539133e+02 2.72165488e+01 2.39538941e+02 2.72163666e+01 2.39539133e+02 2.72161388e+01 2.39539646e+02 2.72163666e+01 2.39643638e+02 2.72176934e+01 2.39643639e+02 2.72190601e+01 2.39643639e+02 2.72190601e+01 2.39642103e+02 2.72198300e+01 2.39640567e+02 2.72202924e+01 2.39639643e+02 2.72190630e+01 2.39640125e+02 2.72176960e+01 2.39640564e+02 2.72173741e+01 2.39642100e+02 2.72165557e+01 2.39643638e+02 2.72176934e+01 2.39643638e+02 2.72176934e+01 2.39650006e+02 2.72190552e+01 2.39649787e+02 2.72192262e+01 2.39649647e+02 2.72190555e+01 2.39649786e+02 2.72189414e+01 2.39650006e+02 2.72190552e+01 2.39551300e+02 2.72190992e+01 2.39551209e+02 2.72204659e+01 2.39551428e+02 2.72206367e+01 2.39551514e+02 2.72204659e+01 2.39551582e+02 2.72190992e+01 2.39551428e+02 2.72190138e+01 2.39551300e+02 2.72190992e+01 2.39540670e+02 2.72190999e+01 2.39540670e+02 2.72190999e+01 2.39539133e+02 2.72195099e+01 2.39538749e+02 2.72190999e+01 2.39539133e+02 2.72188436e+01 2.39540670e+02 2.72190999e+01 2.39540670e+02 2.72190999e+01 2.39641336e+02 2.72217951e+01 2.39640569e+02 2.72231624e+01 2.39642107e+02 2.72236168e+01 2.39642415e+02 2.72245277e+01 2.39642109e+02 2.72258946e+01 2.39642109e+02 2.72258946e+01 2.39642109e+02 2.72258946e+01 2.39640570e+02 2.72245290e+01 2.39640570e+02 2.72245290e+01 2.39640569e+02 2.72231624e+01 2.39639953e+02 2.72217961e+01 2.39640567e+02 2.72207024e+01 2.39641336e+02 2.72217951e+01 2.39626618e+02 2.72218052e+01 2.39626736e+02 2.72218810e+01 2.39626890e+02 2.72218050e+01 2.39626736e+02 2.72217140e+01 2.39626618e+02 2.72218052e+01 2.39540926e+02 2.72218332e+01 2.39540670e+02 2.72222888e+01 2.39540552e+02 2.72218332e+01 2.39540670e+02 2.72216054e+01 2.39540926e+02 2.72218332e+01 2.39536060e+02 2.72231999e+01 2.39536060e+02 2.72231999e+01 2.39536060e+02 2.72231999e+01 2.39536060e+02 2.72231999e+01 2.39536060e+02 2.72231999e+01 2.39537715e+02 2.72245666e+01 2.39537597e+02 2.72252499e+01 2.39537212e+02 2.72245666e+01 2.39537597e+02 2.72244147e+01 2.39537715e+02 2.72245666e+01 2.39639035e+02 2.72258968e+01 2.39640294e+02 2.72272626e+01 2.39639037e+02 2.72282096e+01 2.39637500e+02 2.72279479e+01 2.39635963e+02 2.72282906e+01 2.39635420e+02 2.72272660e+01 2.39634616e+02 2.72258999e+01 2.39635960e+02 2.72251018e+01 2.39636729e+02 2.72258984e+01 2.39637499e+02 2.72270937e+01 2.39639035e+02 2.72258968e+01 2.39639035e+02 2.72258968e+01 2.39639035e+02 2.72258968e+01 2.39628158e+02 2.72259042e+01 2.39628276e+02 2.72260017e+01 2.39629814e+02 2.72266841e+01 2.39630428e+02 2.72259027e+01 2.39629813e+02 2.72254826e+01 2.39628276e+02 2.72258237e+01 2.39628158e+02 2.72259042e+01 2.39540670e+02 2.72272999e+01 2.39542207e+02 2.72274241e+01 2.39542347e+02 2.72272998e+01 2.39542207e+02 2.72259332e+01 2.39540670e+02 2.72272999e+01 2.39535291e+02 2.72300332e+01 2.39534522e+02 2.72306189e+01 2.39533600e+02 2.72300332e+01 2.39534523e+02 2.72294475e+01 2.39535291e+02 2.72300332e+01 2.39533644e+02 2.72313998e+01 2.39532985e+02 2.72322198e+01 2.39532063e+02 2.72313998e+01 2.39532985e+02 2.72305798e+01 2.39533644e+02 2.72313998e+01 2.39530219e+02 2.72313997e+01 2.39529911e+02 2.72316274e+01 2.39529692e+02 2.72313997e+01 2.39529911e+02 2.72312945e+01 2.39530219e+02 2.72313997e+01 2.39659119e+02 2.72327142e+01 2.39659023e+02 2.72328054e+01 2.39658937e+02 2.72327144e+01 2.39659022e+02 2.72326232e+01 2.39659119e+02 2.72327142e+01 2.39641092e+02 2.72340953e+01 2.39640579e+02 2.72342665e+01 2.39640440e+02 2.72340958e+01 2.39640579e+02 2.72339714e+01 2.39641092e+02 2.72340953e+01 2.39532985e+02 2.72341331e+01 2.39532985e+02 2.72341331e+01 2.39532985e+02 2.72341331e+01 2.39532985e+02 2.72341331e+01 2.39532985e+02 2.72341331e+01 2.39646399e+02 2.72354580e+01 2.39645192e+02 2.72361422e+01 2.39644387e+02 2.72354595e+01 2.39645191e+02 2.72346677e+01 2.39646399e+02 2.72354580e+01 2.39639602e+02 2.72354630e+01 2.39639044e+02 2.72360101e+01 2.39638485e+02 2.72354638e+01 2.39639043e+02 2.72350730e+01 2.39639602e+02 2.72354630e+01 2.39630799e+02 2.72354691e+01 2.39629822e+02 2.72365327e+01 2.39628745e+02 2.72354705e+01 2.39629820e+02 2.72344068e+01 2.39630799e+02 2.72354691e+01 2.39532217e+02 2.72354998e+01 2.39532302e+02 2.72368664e+01 2.39531448e+02 2.72377206e+01 2.39530936e+02 2.72368664e+01 2.39531256e+02 2.72354997e+01 2.39531448e+02 2.72353045e+01 2.39532217e+02 2.72354998e+01 2.39637508e+02 2.72368312e+01 2.39637508e+02 2.72368312e+01 2.39637508e+02 2.72368312e+01 2.39637508e+02 2.72368312e+01 2.39637508e+02 2.72368312e+01 2.39635202e+02 2.72368328e+01 2.39635971e+02 2.72374631e+01 2.39636740e+02 2.72381984e+01 2.39635972e+02 2.72389962e+01 2.39634435e+02 2.72387125e+01 2.39633666e+02 2.72382005e+01 2.39632897e+02 2.72370829e+01 2.39631360e+02 2.72382021e+01 2.39631362e+02 2.72395688e+01 2.39631362e+02 2.72395688e+01 2.39631362e+02 2.72395688e+01 2.39631360e+02 2.72382021e+01 2.39630437e+02 2.72368360e+01 2.39631359e+02 2.72362497e+01 2.39632896e+02 2.72365859e+01 2.39634433e+02 2.72358084e+01 2.39635202e+02 2.72368328e+01 2.39628285e+02 2.72368374e+01 2.39628285e+02 2.72368374e+01 2.39628285e+02 2.72368374e+01 2.39628285e+02 2.72368374e+01 2.39628285e+02 2.72368374e+01 2.39627460e+02 2.72395713e+01 2.39627674e+02 2.72409378e+01 2.39626752e+02 2.72413484e+01 2.39625215e+02 2.72418855e+01 2.39624226e+02 2.72409400e+01 2.39625213e+02 2.72398212e+01 2.39625597e+02 2.72395725e+01 2.39626749e+02 2.72384003e+01 2.39627460e+02 2.72395713e+01 2.39643660e+02 2.72409267e+01 2.39643660e+02 2.72409267e+01 2.39643660e+02 2.72409267e+01 2.39643660e+02 2.72409267e+01 2.39643660e+02 2.72409267e+01 2.39636358e+02 2.72409320e+01 2.39635975e+02 2.72415180e+01 2.39635619e+02 2.72409325e+01 2.39635974e+02 2.72404198e+01 2.39636358e+02 2.72409320e+01 2.39632900e+02 2.72409344e+01 2.39632900e+02 2.72409344e+01 2.39632900e+02 2.72409344e+01 2.39632900e+02 2.72409344e+01 2.39632900e+02 2.72409344e+01 2.39618628e+02 2.72436766e+01 2.39619068e+02 2.72443597e+01 2.39619836e+02 2.72436759e+01 2.39619067e+02 2.72433347e+01 2.39618628e+02 2.72436766e+01 2.39636096e+02 2.72450322e+01 2.39635978e+02 2.72451689e+01 2.39635807e+02 2.72450324e+01 2.39635978e+02 2.72449080e+01 2.39636096e+02 2.72450322e+01 2.39630025e+02 2.72491363e+01 2.39629832e+02 2.72492731e+01 2.39629525e+02 2.72491366e+01 2.39629832e+02 2.72489412e+01 2.39630025e+02 2.72491363e+01 2.39614350e+02 2.72491457e+01 2.39614460e+02 2.72494190e+01 2.39614716e+02 2.72491455e+01 2.39614460e+02 2.72490405e+01 2.39614350e+02 2.72491457e+01 2.39532677e+02 2.72491665e+01 2.39532985e+02 2.72492641e+01 2.39533087e+02 2.72491665e+01 2.39532985e+02 2.72487109e+01 2.39532677e+02 2.72491665e+01 2.39620610e+02 2.72505088e+01 2.39620610e+02 2.72505088e+01 2.39620610e+02 2.72505088e+01 2.39620610e+02 2.72505088e+01 2.39620610e+02 2.72505088e+01 2.39528373e+02 2.72505329e+01 2.39528373e+02 2.72505329e+01 2.39528373e+02 2.72505329e+01 2.39528373e+02 2.72505329e+01 2.39528373e+02 2.72505329e+01 2.39609465e+02 2.72518816e+01 2.39609543e+02 2.72532482e+01 2.39609851e+02 2.72534189e+01 2.39611388e+02 2.72540160e+01 2.39612926e+02 2.72539298e+01 2.39613517e+02 2.72532462e+01 2.39612925e+02 2.72526770e+01 2.39611388e+02 2.72526882e+01 2.39610335e+02 2.72518812e+01 2.39609849e+02 2.72512957e+01 2.39609465e+02 2.72518816e+01 2.39538804e+02 2.72518999e+01 2.39539134e+02 2.72520951e+01 2.39539326e+02 2.72518999e+01 2.39539134e+02 2.72516070e+01 2.39538804e+02 2.72518999e+01 2.39619076e+02 2.72546097e+01 2.39619076e+02 2.72546097e+01 2.39619076e+02 2.72546097e+01 2.39619076e+02 2.72546097e+01 2.39619076e+02 2.72546097e+01 2.39616222e+02 2.72573447e+01 2.39616003e+02 2.72576865e+01 2.39615490e+02 2.72573451e+01 2.39616003e+02 2.72571929e+01 2.39616222e+02 2.72573447e+01 2.39533599e+02 2.72573665e+01 2.39532984e+02 2.72576149e+01 2.39532677e+02 2.72573665e+01 2.39532984e+02 2.72568198e+01 2.39533599e+02 2.72573665e+01 2.39623998e+02 2.72587068e+01 2.39623691e+02 2.72593903e+01 2.39623435e+02 2.72587071e+01 2.39623691e+02 2.72584792e+01 2.39623998e+02 2.72587068e+01 2.39614586e+02 2.72600789e+01 2.39614467e+02 2.72602156e+01 2.39614357e+02 2.72600790e+01 2.39614467e+02 2.72598056e+01 2.39614586e+02 2.72600789e+01 2.39611878e+02 2.72600804e+01 2.39611393e+02 2.72605931e+01 2.39610973e+02 2.72600808e+01 2.39611392e+02 2.72593973e+01 2.39611878e+02 2.72600804e+01 2.39600118e+02 2.72600861e+01 2.39600631e+02 2.72602811e+01 2.39601399e+02 2.72600855e+01 2.39600630e+02 2.72598906e+01 2.39600118e+02 2.72600861e+01 2.39604093e+02 2.72655509e+01 2.39603709e+02 2.72657613e+01 2.39603367e+02 2.72655512e+01 2.39603708e+02 2.72652094e+01 2.39604093e+02 2.72655509e+01 2.39538942e+02 2.72655665e+01 2.39539134e+02 2.72657184e+01 2.39539219e+02 2.72655665e+01 2.39539134e+02 2.72653388e+01 2.39538942e+02 2.72655665e+01 2.39602300e+02 2.72669184e+01 2.39602172e+02 2.72670551e+01 2.39601659e+02 2.72669187e+01 2.39602172e+02 2.72667476e+01 2.39602300e+02 2.72669184e+01 2.39606786e+02 2.72696496e+01 2.39606786e+02 2.72696496e+01 2.39606786e+02 2.72696496e+01 2.39606786e+02 2.72696496e+01 2.39606786e+02 2.72696496e+01 2.39599406e+02 2.72696530e+01 2.39599099e+02 2.72698809e+01 2.39598757e+02 2.72696533e+01 2.39599098e+02 2.72693798e+01 2.39599406e+02 2.72696530e+01 2.39575337e+02 2.72710282e+01 2.39576036e+02 2.72717873e+01 2.39576676e+02 2.72710278e+01 2.39576036e+02 2.72707924e+01 2.39575337e+02 2.72710282e+01 2.39540951e+02 2.72710332e+01 2.39540672e+02 2.72717165e+01 2.39540287e+02 2.72710332e+01 2.39540672e+02 2.72705776e+01 2.39540951e+02 2.72710332e+01 2.39557201e+02 2.72751319e+01 2.39556048e+02 2.72755225e+01 2.39554510e+02 2.72755422e+01 2.39553588e+02 2.72751323e+01 2.39554510e+02 2.72744489e+01 2.39556048e+02 2.72742209e+01 2.39557201e+02 2.72751319e+01 2.39566922e+02 2.72764969e+01 2.39566812e+02 2.72767702e+01 2.39566427e+02 2.72764970e+01 2.39566812e+02 2.72758135e+01 2.39566922e+02 2.72764969e+01 2.39556048e+02 2.72778654e+01 2.39556048e+02 2.72778654e+01 2.39556048e+02 2.72778654e+01 2.39556048e+02 2.72778654e+01 2.39556048e+02 2.72778654e+01 2.39569888e+02 2.72792295e+01 2.39569888e+02 2.72792295e+01 2.39569888e+02 2.72792295e+01 2.39569888e+02 2.72792295e+01 2.39569888e+02 2.72792295e+01 2.39560662e+02 2.72792313e+01 2.39560662e+02 2.72792313e+01 2.39560662e+02 2.72792313e+01 2.39560662e+02 2.72792313e+01 2.39560662e+02 2.72792313e+01 2.39489611e+02 2.72819583e+01 2.39488389e+02 2.72830148e+01 2.39487260e+02 2.72819575e+01 2.39488390e+02 2.72808570e+01 2.39489611e+02 2.72819583e+01 2.39626785e+02 2.72833050e+01 2.39626785e+02 2.72833050e+01 2.39626785e+02 2.72833050e+01 2.39626785e+02 2.72833050e+01 2.39626785e+02 2.72833050e+01 2.39625922e+02 2.72860389e+01 2.39625724e+02 2.72874057e+01 2.39625951e+02 2.72887722e+01 2.39625252e+02 2.72893939e+01 2.39623715e+02 2.72901243e+01 2.39623386e+02 2.72901405e+01 2.39622178e+02 2.72908571e+01 2.39620640e+02 2.72904350e+01 2.39619486e+02 2.72901428e+01 2.39619452e+02 2.72887761e+01 2.39619110e+02 2.72874097e+01 2.39619958e+02 2.72860425e+01 2.39620636e+02 2.72853352e+01 2.39622173e+02 2.72846823e+01 2.39623711e+02 2.72847712e+01 2.39625249e+02 2.72854016e+01 2.39625922e+02 2.72860389e+01 2.39534521e+02 2.72860665e+01 2.39534521e+02 2.72860665e+01 2.39534521e+02 2.72860665e+01 2.39534521e+02 2.72860665e+01 2.39534521e+02 2.72860665e+01 2.39501864e+02 2.73010953e+01 2.39500684e+02 2.73020982e+01 2.39499519e+02 2.73010947e+01 2.39500685e+02 2.73000111e+01 2.39501864e+02 2.73010953e+01 2.39626355e+02 2.73161053e+01 2.39625274e+02 2.73170521e+01 2.39623735e+02 2.73165274e+01 2.39623262e+02 2.73161072e+01 2.39623735e+02 2.73156315e+01 2.39625273e+02 2.73150978e+01 2.39626355e+02 2.73161053e+01 2.39750705e+02 2.73187052e+01 2.39749873e+02 2.73195525e+01 2.39748335e+02 2.73194680e+01 2.39747537e+02 2.73187099e+01 2.39748331e+02 2.73175699e+01 2.39749870e+02 2.73180231e+01 2.39750705e+02 2.73187052e+01 2.39586900e+02 2.73338913e+01 2.39586826e+02 2.73339632e+01 2.39586756e+02 2.73338913e+01 2.39586826e+02 2.73338366e+01 2.39586900e+02 2.73338913e+01 2.39549220e+02 2.73352661e+01 2.39548366e+02 2.73362152e+01 2.39547581e+02 2.73352662e+01 2.39548365e+02 2.73344716e+01 2.39549220e+02 2.73352661e+01 2.39627405e+02 2.73366046e+01 2.39626828e+02 2.73370291e+01 2.39626395e+02 2.73366052e+01 2.39626828e+02 2.73361808e+01 2.39627405e+02 2.73366046e+01 2.39526093e+02 2.73379994e+01 2.39525288e+02 2.73390832e+01 2.39524465e+02 2.73379992e+01 2.39525288e+02 2.73373008e+01 2.39526093e+02 2.73379994e+01 2.39710932e+02 2.73488264e+01 2.39711135e+02 2.73501928e+01 2.39709928e+02 2.73509459e+01 2.39709121e+02 2.73501953e+01 2.39708532e+02 2.73488293e+01 2.39709923e+02 2.73479900e+01 2.39710932e+02 2.73488264e+01 2.39531515e+02 2.73516664e+01 2.39531442e+02 2.73517423e+01 2.39531368e+02 2.73516664e+01 2.39531442e+02 2.73515809e+01 2.39531515e+02 2.73516664e+01 2.39606797e+02 2.72040497e+01 2.39606745e+02 2.72040623e+01 2.39606736e+02 2.72040497e+01 2.39606745e+02 2.72040324e+01 2.39606797e+02 2.72040497e+01 2.39603697e+02 2.72054178e+01 2.39603673e+02 2.72054409e+01 2.39603647e+02 2.72054178e+01 2.39603673e+02 2.72053993e+01 2.39603697e+02 2.72054178e+01 2.39600768e+02 2.72067858e+01 2.39601024e+02 2.72081524e+01 2.39600925e+02 2.72095191e+01 2.39601306e+02 2.72108856e+01 2.39600603e+02 2.72111985e+01 2.39600056e+02 2.72108861e+01 2.39599066e+02 2.72100943e+01 2.39598076e+02 2.72108870e+01 2.39599067e+02 2.72122070e+01 2.39599095e+02 2.72122532e+01 2.39600604e+02 2.72127991e+01 2.39601477e+02 2.72122522e+01 2.39602140e+02 2.72113177e+01 2.39602771e+02 2.72122516e+01 2.39603678e+02 2.72134914e+01 2.39605214e+02 2.72133160e+01 2.39605384e+02 2.72136170e+01 2.39606752e+02 2.72145518e+01 2.39607803e+02 2.72149825e+01 2.39608290e+02 2.72158472e+01 2.39608773e+02 2.72163487e+01 2.39609827e+02 2.72172847e+01 2.39610394e+02 2.72163478e+01 2.39611363e+02 2.72154850e+01 2.39612764e+02 2.72163466e+01 2.39612900e+02 2.72164827e+01 2.39613455e+02 2.72177129e+01 2.39612902e+02 2.72189437e+01 2.39612657e+02 2.72190800e+01 2.39612320e+02 2.72204468e+01 2.39611367e+02 2.72210994e+01 2.39610307e+02 2.72204479e+01 2.39609829e+02 2.72196835e+01 2.39608292e+02 2.72200666e+01 2.39607285e+02 2.72190827e+01 2.39606754e+02 2.72177856e+01 2.39606598e+02 2.72177164e+01 2.39605217e+02 2.72173077e+01 2.39603680e+02 2.72171037e+01 2.39603468e+02 2.72177179e+01 2.39603680e+02 2.72180248e+01 2.39605217e+02 2.72178239e+01 2.39606521e+02 2.72190831e+01 2.39606755e+02 2.72192906e+01 2.39608113e+02 2.72204490e+01 2.39608293e+02 2.72207038e+01 2.39609830e+02 2.72209942e+01 2.39610417e+02 2.72218145e+01 2.39611368e+02 2.72227429e+01 2.39612904e+02 2.72220381e+01 2.39614441e+02 2.72224316e+01 2.39615588e+02 2.72231784e+01 2.39615032e+02 2.72245454e+01 2.39614443e+02 2.72255131e+01 2.39613698e+02 2.72245461e+01 2.39612905e+02 2.72239886e+01 2.39612113e+02 2.72245469e+01 2.39612906e+02 2.72251044e+01 2.39614119e+02 2.72259125e+01 2.39612907e+02 2.72269348e+01 2.39612416e+02 2.72272801e+01 2.39612371e+02 2.72286468e+01 2.39611806e+02 2.72300137e+01 2.39612520e+02 2.72313800e+01 2.39611374e+02 2.72321280e+01 2.39611067e+02 2.72327475e+01 2.39611375e+02 2.72335214e+01 2.39611723e+02 2.72341138e+01 2.39611930e+02 2.72354803e+01 2.39611377e+02 2.72363009e+01 2.39610324e+02 2.72368478e+01 2.39609840e+02 2.72373498e+01 2.39609417e+02 2.72368483e+01 2.39608303e+02 2.72366457e+01 2.39607996e+02 2.72368490e+01 2.39608303e+02 2.72373441e+01 2.39609424e+02 2.72382150e+01 2.39608775e+02 2.72395820e+01 2.39608675e+02 2.72409487e+01 2.39609690e+02 2.72423148e+01 2.39608307e+02 2.72432104e+01 2.39607140e+02 2.72436828e+01 2.39606802e+02 2.72450496e+01 2.39606771e+02 2.72451050e+01 2.39605234e+02 2.72462281e+01 2.39603697e+02 2.72458716e+01 2.39602404e+02 2.72450517e+01 2.39602159e+02 2.72449740e+01 2.39602112e+02 2.72450518e+01 2.39601170e+02 2.72464189e+01 2.39602161e+02 2.72475503e+01 2.39603697e+02 2.72467118e+01 2.39605235e+02 2.72476451e+01 2.39606773e+02 2.72477275e+01 2.39606790e+02 2.72477829e+01 2.39606773e+02 2.72477961e+01 2.39605235e+02 2.72478391e+01 2.39604669e+02 2.72491506e+01 2.39603699e+02 2.72497116e+01 2.39602298e+02 2.72491517e+01 2.39602161e+02 2.72486070e+01 2.39600624e+02 2.72489538e+01 2.39599087e+02 2.72484118e+01 2.39598809e+02 2.72491533e+01 2.39597954e+02 2.72505203e+01 2.39598781e+02 2.72518866e+01 2.39597860e+02 2.72532537e+01 2.39598050e+02 2.72546203e+01 2.39597674e+02 2.72559871e+01 2.39597554e+02 2.72561642e+01 2.39596989e+02 2.72559874e+01 2.39596261e+02 2.72546210e+01 2.39596015e+02 2.72545531e+01 2.39595840e+02 2.72546212e+01 2.39594478e+02 2.72550071e+01 2.39593130e+02 2.72559890e+01 2.39592942e+02 2.72562901e+01 2.39592634e+02 2.72559892e+01 2.39592289e+02 2.72546226e+01 2.39591403e+02 2.72532840e+01 2.39590749e+02 2.72546232e+01 2.39590789e+02 2.72559899e+01 2.39591152e+02 2.72573564e+01 2.39589868e+02 2.72583785e+01 2.39588330e+02 2.72584619e+01 2.39587295e+02 2.72573578e+01 2.39586792e+02 2.72568001e+01 2.39585907e+02 2.72573583e+01 2.39586407e+02 2.72587248e+01 2.39585256e+02 2.72598577e+01 2.39584921e+02 2.72600920e+01 2.39584291e+02 2.72614588e+01 2.39583720e+02 2.72618333e+01 2.39583104e+02 2.72614592e+01 2.39582182e+02 2.72608675e+01 2.39581326e+02 2.72614598e+01 2.39580645e+02 2.72626710e+01 2.39579108e+02 2.72623359e+01 2.39578492e+02 2.72614606e+01 2.39577570e+02 2.72610753e+01 2.39576319e+02 2.72600946e+01 2.39576032e+02 2.72599714e+01 2.39575745e+02 2.72600947e+01 2.39576032e+02 2.72604422e+01 2.39577002e+02 2.72614611e+01 2.39576302e+02 2.72628279e+01 2.39576033e+02 2.72637853e+01 2.39575757e+02 2.72641947e+01 2.39574496e+02 2.72652142e+01 2.39573795e+02 2.72641953e+01 2.39572958e+02 2.72629782e+01 2.39571421e+02 2.72640968e+01 2.39569883e+02 2.72640517e+01 2.39568346e+02 2.72630354e+01 2.39566808e+02 2.72641242e+01 2.39565443e+02 2.72628305e+01 2.39565424e+02 2.72614638e+01 2.39565270e+02 2.72612459e+01 2.39564964e+02 2.72614639e+01 2.39563733e+02 2.72620113e+01 2.39562748e+02 2.72614643e+01 2.39562195e+02 2.72611574e+01 2.39561003e+02 2.72600980e+01 2.39560658e+02 2.72598747e+01 2.39560312e+02 2.72600981e+01 2.39559120e+02 2.72608689e+01 2.39557583e+02 2.72606590e+01 2.39556629e+02 2.72614653e+01 2.39556046e+02 2.72621685e+01 2.39555039e+02 2.72614655e+01 2.39554508e+02 2.72611196e+01 2.39553183e+02 2.72600990e+01 2.39553065e+02 2.72587324e+01 2.39552970e+02 2.72586805e+01 2.39552889e+02 2.72587324e+01 2.39551433e+02 2.72593796e+01 2.39549896e+02 2.72591306e+01 2.39548358e+02 2.72587724e+01 2.39546821e+02 2.72588973e+01 2.39546705e+02 2.72587329e+01 2.39546821e+02 2.72586233e+01 2.39547785e+02 2.72573662e+01 2.39548341e+02 2.72559995e+01 2.39547811e+02 2.72546329e+01 2.39548050e+02 2.72532662e+01 2.39548358e+02 2.72530346e+01 2.39548911e+02 2.72518994e+01 2.39549484e+02 2.72505327e+01 2.39549895e+02 2.72502591e+01 2.39550623e+02 2.72491660e+01 2.39551432e+02 2.72480875e+01 2.39551797e+02 2.72477992e+01 2.39551432e+02 2.72474000e+01 2.39549894e+02 2.72465712e+01 2.39549583e+02 2.72464327e+01 2.39549221e+02 2.72450661e+01 2.39549849e+02 2.72436994e+01 2.39549894e+02 2.72436439e+01 2.39551431e+02 2.72436684e+01 2.39552558e+02 2.72423324e+01 2.39552864e+02 2.72409657e+01 2.39552463e+02 2.72395991e+01 2.39552101e+02 2.72382325e+01 2.39552968e+02 2.72378287e+01 2.39553497e+02 2.72382323e+01 2.39554505e+02 2.72388523e+01 2.39555152e+02 2.72382321e+01 2.39556042e+02 2.72370018e+01 2.39556226e+02 2.72368653e+01 2.39557579e+02 2.72356622e+01 2.39557751e+02 2.72354985e+01 2.39557753e+02 2.72341318e+01 2.39558500e+02 2.72327650e+01 2.39557578e+02 2.72320367e+01 2.39556991e+02 2.72313986e+01 2.39557578e+02 2.72310962e+01 2.39559115e+02 2.72309873e+01 2.39559731e+02 2.72313982e+01 2.39560652e+02 2.72315097e+01 2.39560726e+02 2.72313980e+01 2.39561266e+02 2.72300313e+01 2.39560651e+02 2.72288963e+01 2.39560409e+02 2.72286647e+01 2.39560651e+02 2.72284138e+01 2.39562157e+02 2.72272978e+01 2.39562188e+02 2.72272285e+01 2.39563725e+02 2.72265449e+01 2.39564031e+02 2.72259308e+01 2.39565261e+02 2.72253153e+01 2.39566798e+02 2.72246317e+01 2.39566851e+02 2.72245635e+01 2.39568335e+02 2.72234394e+01 2.39568655e+02 2.72231965e+01 2.39568334e+02 2.72218853e+01 2.39568316e+02 2.72218299e+01 2.39568334e+02 2.72218047e+01 2.39569207e+02 2.72204630e+01 2.39568763e+02 2.72190965e+01 2.39569870e+02 2.72186275e+01 2.39570792e+02 2.72177294e+01 2.39571406e+02 2.72166811e+01 2.39572944e+02 2.72173186e+01 2.39574480e+02 2.72164707e+01 2.39575364e+02 2.72177282e+01 2.39574669e+02 2.72190951e+01 2.39576018e+02 2.72196944e+01 2.39576753e+02 2.72190945e+01 2.39577323e+02 2.72177277e+01 2.39577554e+02 2.72174928e+01 2.39579090e+02 2.72164383e+01 2.39580627e+02 2.72167471e+01 2.39581373e+02 2.72163598e+01 2.39580627e+02 2.72150330e+01 2.39579090e+02 2.72162048e+01 2.39578031e+02 2.72149941e+01 2.39579090e+02 2.72142232e+01 2.39580627e+02 2.72149010e+01 2.39582163e+02 2.72138386e+01 2.39583393e+02 2.72149925e+01 2.39583700e+02 2.72153631e+01 2.39584089e+02 2.72149923e+01 2.39585237e+02 2.72143540e+01 2.39586773e+02 2.72138001e+01 2.39586857e+02 2.72136247e+01 2.39588310e+02 2.72124396e+01 2.39588593e+02 2.72122574e+01 2.39589846e+02 2.72115502e+01 2.39591016e+02 2.72108898e+01 2.39591382e+02 2.72105044e+01 2.39592116e+02 2.72108894e+01 2.39591883e+02 2.72122562e+01 2.39592920e+02 2.72130756e+01 2.39594302e+02 2.72122552e+01 2.39594456e+02 2.72114333e+01 2.39595993e+02 2.72113512e+01 2.39597082e+02 2.72108874e+01 2.39595992e+02 2.72101775e+01 2.39594456e+02 2.72107795e+01 2.39592919e+02 2.72104668e+01 2.39592165e+02 2.72095227e+01 2.39592918e+02 2.72083003e+01 2.39594455e+02 2.72088930e+01 2.39595992e+02 2.72089743e+01 2.39597499e+02 2.72081539e+01 2.39597528e+02 2.72081193e+01 2.39597632e+02 2.72081538e+01 2.39599065e+02 2.72086994e+01 2.39599924e+02 2.72081529e+01 2.39600138e+02 2.72067861e+01 2.39600600e+02 2.72065511e+01 2.39600768e+02 2.72067858e+01 2.39594877e+02 2.72067883e+01 2.39594454e+02 2.72070201e+01 2.39594337e+02 2.72067885e+01 2.39594454e+02 2.72067000e+01 2.39594877e+02 2.72067883e+01 2.39584118e+02 2.72067923e+01 2.39583697e+02 2.72071016e+01 2.39583316e+02 2.72067925e+01 2.39583697e+02 2.72065554e+01 2.39584118e+02 2.72067923e+01 2.39604221e+02 2.72081509e+01 2.39603983e+02 2.72095177e+01 2.39603676e+02 2.72097753e+01 2.39603416e+02 2.72095179e+01 2.39603128e+02 2.72081514e+01 2.39603674e+02 2.72078593e+01 2.39604221e+02 2.72081509e+01 2.39611974e+02 2.72095137e+01 2.39611359e+02 2.72100611e+01 2.39611069e+02 2.72095142e+01 2.39611359e+02 2.72091773e+01 2.39611974e+02 2.72095137e+01 2.39605787e+02 2.72108835e+01 2.39605213e+02 2.72116896e+01 2.39604524e+02 2.72108841e+01 2.39605213e+02 2.72102458e+01 2.39605787e+02 2.72108835e+01 2.39582800e+02 2.72108927e+01 2.39582162e+02 2.72116220e+01 2.39581445e+02 2.72108931e+01 2.39582162e+02 2.72103259e+01 2.39582800e+02 2.72108927e+01 2.39614937e+02 2.72122454e+01 2.39614435e+02 2.72132301e+01 2.39613783e+02 2.72122461e+01 2.39614434e+02 2.72114254e+01 2.39614937e+02 2.72122454e+01 2.39613002e+02 2.72136131e+01 2.39612898e+02 2.72136363e+01 2.39611362e+02 2.72145436e+01 2.39610578e+02 2.72136144e+01 2.39611361e+02 2.72130976e+01 2.39612898e+02 2.72135855e+01 2.39613002e+02 2.72136131e+01 2.39571645e+02 2.72136292e+01 2.39571406e+02 2.72141079e+01 2.39570818e+02 2.72136294e+01 2.39571406e+02 2.72133899e+01 2.39571645e+02 2.72136292e+01 2.39610692e+02 2.72149810e+01 2.39609826e+02 2.72157521e+01 2.39608873e+02 2.72149819e+01 2.39609825e+02 2.72144516e+01 2.39610692e+02 2.72149810e+01 2.39603504e+02 2.72149846e+01 2.39603679e+02 2.72153477e+01 2.39603924e+02 2.72149844e+01 2.39603678e+02 2.72144397e+01 2.39603504e+02 2.72149846e+01 2.39576693e+02 2.72149945e+01 2.39576744e+02 2.72163612e+01 2.39576017e+02 2.72169539e+01 2.39574684e+02 2.72163617e+01 2.39575533e+02 2.72149948e+01 2.39576016e+02 2.72148442e+01 2.39576693e+02 2.72149945e+01 2.39617388e+02 2.72163441e+01 2.39615975e+02 2.72171833e+01 2.39615090e+02 2.72163453e+01 2.39615974e+02 2.72158611e+01 2.39617388e+02 2.72163441e+01 2.39614748e+02 2.72204455e+01 2.39614440e+02 2.72206512e+01 2.39614070e+02 2.72204459e+01 2.39614440e+02 2.72203283e+01 2.39614748e+02 2.72204455e+01 2.39564205e+02 2.72204641e+01 2.39563723e+02 2.72211673e+01 2.39563354e+02 2.72204642e+01 2.39563723e+02 2.72200540e+01 2.39564205e+02 2.72204641e+01 2.39616705e+02 2.72218111e+01 2.39615978e+02 2.72227003e+01 2.39615311e+02 2.72218119e+01 2.39615977e+02 2.72211005e+01 2.39616705e+02 2.72218111e+01 2.39562774e+02 2.72218310e+01 2.39562187e+02 2.72229799e+01 2.39561110e+02 2.72218313e+01 2.39562187e+02 2.72216184e+01 2.39562774e+02 2.72218310e+01 2.39617776e+02 2.72231772e+01 2.39617516e+02 2.72233278e+01 2.39616839e+02 2.72231777e+01 2.39617515e+02 2.72228010e+01 2.39617776e+02 2.72231772e+01 2.39566703e+02 2.72231969e+01 2.39565261e+02 2.72239914e+01 2.39563724e+02 2.72238228e+01 2.39562493e+02 2.72231977e+01 2.39563724e+02 2.72227598e+01 2.39565261e+02 2.72224392e+01 2.39566703e+02 2.72231969e+01 2.39560729e+02 2.72259313e+01 2.39560651e+02 2.72259591e+01 2.39560622e+02 2.72259314e+01 2.39560651e+02 2.72259168e+01 2.39560729e+02 2.72259313e+01 2.39556611e+02 2.72272986e+01 2.39556040e+02 2.72278912e+01 2.39554503e+02 2.72275116e+01 2.39554099e+02 2.72272989e+01 2.39554503e+02 2.72270780e+01 2.39556040e+02 2.72269245e+01 2.39556611e+02 2.72272986e+01 2.39614815e+02 2.72286455e+01 2.39614446e+02 2.72289744e+01 2.39613983e+02 2.72286459e+01 2.39614446e+02 2.72285674e+01 2.39614815e+02 2.72286455e+01 2.39563145e+02 2.72286643e+01 2.39563725e+02 2.72290357e+01 2.39564062e+02 2.72286641e+01 2.39563725e+02 2.72276320e+01 2.39563145e+02 2.72286643e+01 2.39558290e+02 2.72286651e+01 2.39557577e+02 2.72292229e+01 2.39556655e+02 2.72286653e+01 2.39557577e+02 2.72279313e+01 2.39558290e+02 2.72286651e+01 2.39554735e+02 2.72341322e+01 2.39554504e+02 2.72342817e+01 2.39554407e+02 2.72341322e+01 2.39554504e+02 2.72340226e+01 2.39554735e+02 2.72341322e+01 2.39557327e+02 2.72354985e+01 2.39556042e+02 2.72366421e+01 2.39555297e+02 2.72354988e+01 2.39556041e+02 2.72347126e+01 2.39557327e+02 2.72354985e+01 2.39555765e+02 2.72368654e+01 2.39554505e+02 2.72374261e+01 2.39553956e+02 2.72368656e+01 2.39554504e+02 2.72362427e+01 2.39555765e+02 2.72368654e+01 2.39605048e+02 2.72423171e+01 2.39604542e+02 2.72436840e+01 2.39605233e+02 2.72438726e+01 2.39606154e+02 2.72436833e+01 2.39605785e+02 2.72423168e+01 2.39605232e+02 2.72422054e+01 2.39605048e+02 2.72423171e+01 2.39545590e+02 2.72450663e+01 2.39545283e+02 2.72453399e+01 2.39544975e+02 2.72450664e+01 2.39545283e+02 2.72448166e+01 2.39545590e+02 2.72450663e+01 2.39600793e+02 2.72505191e+01 2.39600625e+02 2.72506219e+01 2.39600483e+02 2.72505192e+01 2.39600625e+02 2.72502452e+01 2.39600793e+02 2.72505191e+01 2.39551537e+02 2.72559992e+01 2.39552970e+02 2.72561653e+01 2.39553113e+02 2.72559990e+01 2.39552970e+02 2.72557260e+01 2.39551537e+02 2.72559992e+01 2.39548410e+02 2.72559995e+01 2.39549199e+02 2.72573661e+01 2.39549896e+02 2.72582950e+01 2.39550699e+02 2.72573659e+01 2.39551381e+02 2.72559992e+01 2.39549895e+02 2.72555333e+01 2.39548410e+02 2.72559995e+01 2.39565188e+02 2.72587305e+01 2.39565270e+02 2.72589484e+01 2.39566807e+02 2.72589192e+01 2.39567268e+02 2.72587301e+01 2.39566807e+02 2.72586132e+01 2.39565270e+02 2.72586624e+01 2.39565188e+02 2.72587305e+01 2.39544146e+02 2.72587331e+01 2.39543746e+02 2.72592071e+01 2.39543450e+02 2.72587331e+01 2.39543746e+02 2.72584487e+01 2.39544146e+02 2.72587331e+01 2.39588566e+02 2.72600907e+01 2.39588331e+02 2.72604275e+01 2.39586794e+02 2.72603411e+01 2.39586076e+02 2.72600916e+01 2.39586794e+02 2.72596127e+01 2.39588331e+02 2.72595436e+01 2.39588566e+02 2.72600907e+01 2.39554119e+02 2.72614656e+01 2.39552971e+02 2.72625593e+01 2.39552433e+02 2.72614658e+01 2.39552971e+02 2.72602880e+01 2.39554119e+02 2.72614656e+01 2.39546883e+02 2.72614662e+01 2.39546821e+02 2.72614876e+01 2.39546799e+02 2.72614663e+01 2.39546821e+02 2.72614355e+01 2.39546883e+02 2.72614662e+01 2.39586864e+02 2.72628246e+01 2.39586795e+02 2.72629511e+01 2.39586679e+02 2.72628247e+01 2.39586795e+02 2.72627425e+01 2.39586864e+02 2.72628246e+01 2.39562811e+02 2.72628310e+01 2.39562196e+02 2.72629932e+01 2.39560965e+02 2.72628313e+01 2.39562196e+02 2.72619557e+01 2.39562811e+02 2.72628310e+01 2.39555496e+02 2.72628321e+01 2.39554509e+02 2.72640234e+01 2.39553258e+02 2.72628324e+01 2.39554508e+02 2.72617899e+01 2.39555496e+02 2.72628321e+01 2.39548623e+02 2.72628328e+01 2.39548359e+02 2.72629424e+01 2.39548227e+02 2.72628328e+01 2.39548359e+02 2.72625589e+01 2.39548623e+02 2.72628328e+01 2.39578946e+02 2.72641938e+01 2.39577571e+02 2.72650976e+01 2.39576196e+02 2.72641946e+01 2.39577571e+02 2.72636006e+01 2.39578946e+02 2.72641938e+01 2.39566697e+02 2.72641969e+01 2.39565271e+02 2.72651268e+01 2.39564781e+02 2.72641973e+01 2.39565271e+02 2.72630352e+01 2.39566697e+02 2.72641969e+01 2.39557772e+02 2.72641985e+01 2.39557584e+02 2.72643992e+01 2.39557436e+02 2.72641985e+01 2.39557584e+02 2.72640400e+01 2.39557772e+02 2.72641985e+01 2.39570346e+02 2.72655628e+01 2.39569884e+02 2.72656596e+01 2.39569781e+02 2.72655629e+01 2.39569884e+02 2.72650150e+01 2.39570346e+02 2.72655628e+01 2.39567390e+02 2.72655634e+01 2.39566809e+02 2.72662275e+01 2.39565763e+02 2.72655638e+01 2.39566808e+02 2.72642959e+01 2.39567390e+02 2.72655634e+01 2.39564534e+02 2.72655640e+01 2.39563734e+02 2.72659027e+01 2.39563263e+02 2.72655642e+01 2.39563734e+02 2.72653008e+01 2.39564534e+02 2.72655640e+01 2.39561189e+02 2.72655646e+01 2.39560659e+02 2.72659885e+01 2.39560098e+02 2.72655648e+01 2.39560659e+02 2.72652724e+01 2.39561189e+02 2.72655646e+01 2.39560593e+02 2.72723980e+01 2.39559123e+02 2.72736705e+01 2.39557680e+02 2.72723985e+01 2.39559122e+02 2.72710885e+01 2.39560593e+02 2.72723980e+01 2.39488815e+02 2.72819580e+01 2.39488389e+02 2.72823260e+01 2.39487996e+02 2.72819577e+01 2.39488390e+02 2.72815744e+01 2.39488815e+02 2.72819580e+01 2.39624197e+02 2.72860400e+01 2.39625213e+02 2.72874060e+01 2.39625049e+02 2.72887728e+01 2.39623715e+02 2.72899233e+01 2.39622177e+02 2.72900810e+01 2.39620666e+02 2.72887754e+01 2.39620638e+02 2.72887196e+01 2.39619308e+02 2.72874096e+01 2.39620636e+02 2.72861550e+01 2.39620857e+02 2.72860420e+01 2.39622173e+02 2.72849775e+01 2.39623712e+02 2.72856937e+01 2.39624197e+02 2.72860400e+01 2.39501218e+02 2.73010951e+01 2.39500685e+02 2.73015486e+01 2.39500157e+02 2.73010948e+01 2.39500685e+02 2.73006048e+01 2.39501218e+02 2.73010951e+01 2.39625446e+02 2.73161058e+01 2.39625273e+02 2.73162574e+01 2.39624974e+02 2.73161061e+01 2.39625273e+02 2.73159446e+01 2.39625446e+02 2.73161058e+01 2.39591468e+02 2.72218230e+01 2.39592925e+02 2.72230655e+01 2.39593049e+02 2.72231890e+01 2.39592925e+02 2.72234268e+01 2.39592703e+02 2.72245558e+01 2.39592926e+02 2.72247464e+01 2.39593515e+02 2.72245555e+01 2.39594462e+02 2.72240065e+01 2.39596000e+02 2.72243954e+01 2.39596156e+02 2.72245544e+01 2.39596000e+02 2.72247891e+01 2.39595645e+02 2.72259213e+01 2.39596001e+02 2.72272656e+01 2.39597538e+02 2.72265209e+01 2.39598179e+02 2.72272869e+01 2.39598934e+02 2.72286533e+01 2.39598126e+02 2.72300203e+01 2.39599077e+02 2.72307712e+01 2.39599535e+02 2.72313863e+01 2.39599078e+02 2.72320305e+01 2.39598019e+02 2.72327537e+01 2.39598006e+02 2.72341203e+01 2.39597542e+02 2.72346599e+01 2.39596443e+02 2.72354876e+01 2.39596006e+02 2.72360583e+01 2.39595653e+02 2.72368546e+01 2.39596007e+02 2.72377732e+01 2.39597098e+02 2.72382207e+01 2.39596007e+02 2.72384985e+01 2.39594470e+02 2.72384298e+01 2.39592933e+02 2.72388865e+01 2.39592396e+02 2.72395893e+01 2.39592537e+02 2.72409559e+01 2.39592103e+02 2.72423227e+01 2.39591398e+02 2.72429871e+01 2.39589861e+02 2.72433765e+01 2.39589576e+02 2.72436903e+01 2.39588324e+02 2.72448416e+01 2.39587839e+02 2.72450576e+01 2.39586788e+02 2.72458371e+01 2.39585250e+02 2.72458202e+01 2.39583800e+02 2.72450590e+01 2.39583713e+02 2.72449996e+01 2.39583656e+02 2.72450591e+01 2.39583491e+02 2.72464258e+01 2.39582176e+02 2.72470105e+01 2.39580639e+02 2.72467238e+01 2.39580281e+02 2.72464268e+01 2.39579676e+02 2.72450603e+01 2.39579101e+02 2.72446674e+01 2.39577564e+02 2.72441795e+01 2.39576836e+02 2.72436945e+01 2.39576026e+02 2.72433708e+01 2.39575116e+02 2.72436949e+01 2.39574489e+02 2.72445864e+01 2.39574368e+02 2.72450618e+01 2.39572953e+02 2.72457061e+01 2.39571704e+02 2.72464291e+01 2.39571416e+02 2.72466089e+01 2.39570260e+02 2.72464295e+01 2.39569878e+02 2.72456372e+01 2.39569729e+02 2.72450629e+01 2.39569407e+02 2.72436963e+01 2.39569236e+02 2.72423297e+01 2.39568723e+02 2.72409631e+01 2.39568339e+02 2.72404100e+01 2.39567641e+02 2.72395967e+01 2.39566802e+02 2.72383085e+01 2.39566717e+02 2.72382302e+01 2.39566802e+02 2.72377995e+01 2.39567854e+02 2.72368633e+01 2.39568127e+02 2.72354966e+01 2.39568338e+02 2.72352434e+01 2.39568795e+02 2.72341298e+01 2.39568432e+02 2.72327632e+01 2.39569874e+02 2.72316636e+01 2.39570057e+02 2.72313962e+01 2.39571411e+02 2.72303309e+01 2.39571568e+02 2.72300292e+01 2.39571491e+02 2.72286625e+01 2.39572897e+02 2.72272955e+01 2.39572947e+02 2.72272064e+01 2.39573167e+02 2.72259288e+01 2.39574483e+02 2.72254875e+01 2.39576020e+02 2.72247396e+01 2.39576174e+02 2.72245613e+01 2.39577556e+02 2.72238937e+01 2.39579093e+02 2.72240711e+01 2.39580417e+02 2.72231934e+01 2.39580630e+02 2.72229879e+01 2.39582166e+02 2.72223868e+01 2.39583404e+02 2.72218258e+01 2.39583703e+02 2.72216079e+01 2.39585240e+02 2.72206487e+01 2.39586777e+02 2.72216662e+01 2.39588314e+02 2.72213926e+01 2.39589566e+02 2.72218237e+01 2.39589851e+02 2.72219012e+01 2.39591111e+02 2.72218231e+01 2.39591388e+02 2.72217674e+01 2.39591468e+02 2.72218230e+01 2.39597559e+02 2.72368538e+01 2.39597543e+02 2.72370320e+01 2.39597499e+02 2.72368539e+01 2.39597543e+02 2.72368316e+01 2.39597559e+02 2.72368538e+01 2.39595183e+02 2.72409548e+01 2.39594472e+02 2.72419990e+01 2.39593264e+02 2.72409556e+01 2.39594471e+02 2.72402124e+01 2.39595183e+02 2.72409548e+01 2.39567188e+02 2.72423301e+01 2.39567411e+02 2.72436968e+01 2.39567825e+02 2.72450633e+01 2.39566804e+02 2.72459985e+01 2.39565910e+02 2.72450637e+01 2.39566294e+02 2.72436970e+01 2.39566435e+02 2.72423303e+01 2.39566803e+02 2.72416766e+01 2.39567188e+02 2.72423301e+01 2.39579780e+02 2.72477936e+01 2.39579102e+02 2.72481183e+01 2.39578611e+02 2.72477939e+01 2.39579102e+02 2.72471610e+01 2.39579780e+02 2.72477936e+01 2.39560286e+02 2.72723981e+01 2.39559123e+02 2.72734051e+01 2.39557981e+02 2.72723984e+01 2.39559122e+02 2.72713617e+01 2.39560286e+02 2.72723981e+01 2.39622694e+02 2.72860409e+01 2.39623712e+02 2.72861240e+01 2.39625106e+02 2.72874061e+01 2.39624463e+02 2.72887731e+01 2.39623714e+02 2.72894184e+01 2.39622177e+02 2.72898676e+01 2.39620913e+02 2.72887753e+01 2.39620638e+02 2.72882281e+01 2.39619807e+02 2.72874093e+01 2.39620637e+02 2.72866251e+01 2.39621775e+02 2.72860414e+01 2.39622174e+02 2.72857190e+01 2.39622694e+02 2.72860409e+01 2.39559516e+02 2.72723982e+01 2.39559123e+02 2.72727386e+01 2.39558737e+02 2.72723983e+01 2.39559123e+02 2.72720479e+01 2.39559516e+02 2.72723982e+01 2.39624837e+02 2.72874062e+01 2.39623714e+02 2.72886300e+01 2.39623220e+02 2.72887739e+01 2.39622177e+02 2.72893315e+01 2.39621533e+02 2.72887749e+01 2.39620643e+02 2.72874088e+01 2.39622174e+02 2.72860534e+01 2.39623712e+02 2.72863713e+01 2.39624837e+02 2.72874062e+01 2.39624163e+02 2.72874067e+01 2.39623713e+02 2.72878965e+01 2.39622176e+02 2.72887523e+01 2.39620685e+02 2.72874088e+01 2.39622174e+02 2.72860905e+01 2.39623713e+02 2.72869924e+01 2.39624163e+02 2.72874067e+01 2.39623631e+02 2.72874070e+01 2.39622176e+02 2.72886572e+01 2.39620790e+02 2.72874087e+01 2.39622174e+02 2.72861838e+01 2.39623631e+02 2.72874070e+01 saods9/ds9/doc/user/contour/dsscontour.png000644 000765 000000 00000716364 11332353405 021230 0ustar00joyewheel000000 000000 ‰PNG  IHDRh 8R]UbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ¼P3 IDATxÚì½y¸e6üÔ^]KïgÍÉ $$$dS”AÀåÅË×wfœqAG”]À nƒã8Î0"EªÑ×ñE¯a>DpX”°'Bö䬽WwUWU×òýq›òpNŸ>KÎIN’ç¾¼¼BŸ®í©î¾ëþ-÷ òú¢¿"ãcãý˜ƒ5?ø±+èŠPPPPPP´Àê‹þjãý˜Yõž|ðcW  º"-зgûÞ-ÏñøÇ®Ó¡     ˜”8)(((()ª•¢cN!Ì)©q=‘>¼Û6!N×±G¾:°õ™ù &‘Hxž·Ëӽ˚îÔ* *Æ›{Jo{7ý(PPPPPLǶÓX~ÒI“ßdËÖ­„IV׶͉“0ÌÈWÛ¯¶^¸ìƒ—r÷‹‡¹£’S’í£¶l8õŠÙW"KVÚœ‚‚‚‚‚¢9qZÕåË—Oi“åË—oÙºUŠ©‡kÛæÄɼ•ùI¶’‹ôãÏ9ëÌeK—ìúÍï|5Á‹òÈ÷°…×}M0•Þ´–  ŠÉ€afêZ‹C¿íxÄÉŽúƒšêèßî¹mmÙÅÇÍ{aÛ³+ÞEÈ·¯ì}å¤Îø†íÅž“N¡Ÿà/Þ³êç­ü͆×~ðÈèjPPPPŒCEì´Œ=ð¿Ã°í¤'жpÅ›¯üÎ0v°,›àœÜŽ—ÚF©æöŸ"xuGïéOxÝÙÄGß{æâÞvçÊÕú¾¡â÷~ñû’a8.ùÖ ÿ'›Ô!ûÿ¯?WŽ6cñü¶ 7oïÿá£ÏFKAAAAqŒ0'CE“”~£¶ýÆÕ—Ž÷ö[¾ûóÉlû–·5}±…â/IÙµâÜ}ÏýB&!$*%%®¤:Îþ­{sÝ'¿‡a¹ ¯tÍÇÞÓ–Òs¥ýƒ¹TB;eqOX/ûËq!äÄ`MBÈ) {†xA&„¼çíË>vÉ™„{ê¶sÒ¢Þ½÷íÝmý£#Õ[î«›•˜–œ;Ì „„„ÍžE4Eºå“—¨1ñ×O=Ïð¢óVµ'•/Þó B8úU¢  8fxsš!S2•pë›/?»ämgM¸í7®¾ô wýÿþ§«þ×xÛŽ§8›ó?ÇK'ÿYîÅGް,SØñ<ÛÖÞðëÊ‚ÕbL›ðÔ3 µ-¥9nãkþ9dX^âªdš¦’žÇó!äœSB¶ïî[tܼ Î>õ§¿Ù gºµ˜ôv:!ä‡ÿùØþó1^”Ï:uÙ­×þõg®xôwsõ?jÿ÷«—BÖ?òìÎ;Y…Ÿ?ùÊ®þÂßü¯³2 uÖÝ÷ÿü÷AB>÷ç/šß®+’ëù;öç~ôë}ÃeBÈâÞö¿ùÀYm)í•íýF­þ®UK~ûÜ?|t!¤=¥ä¢UËŽëxîÍ}¹ýê¹ýÃåQxâ‚öO}à¬lò›T÷uÑê³W.Ô¹î4úråïüôwKz;Ô˜¸o ÷¯÷ü¿˜–8uùâÞî¶²òŽ‚ÇZ]EAAqŒçL†[?ü™[ƾù?îý¡^šnûÅuýÊ€/£G;µíxÄ9îe(ñ´zÜjgïs–㇜¬°nŽíìéèÌ¥Ö,Çv²(üãŸzs òæÞá7v*rŠã8BçV/_@Y÷ㇿzý':²©Eó2Cõpé‚NQàÃ0ü_?©¥Ú´dÛ¶Áú@®ÜÕ–<ù„î_mÜ1–e>øŽ;û†O[¶ð#ï9½f9Ûö ¦ôع§œðìó›_Ý[! “MiOn|%W,¿méÂÓ–/¾öÃç®YûP<®ßð‘wi1é•7v™FõüÕ'BÌJ¾œïïš·à Ÿ¼(WžÜ´¥P,]úggßü± nþ·‡ÿOÇŽIÂõù.5&mÞ¶Û6kçŸþ§z­“u_röI{úsýêIU‘ÞvÒ"³8àt$ !™¤ÞÓÝ‘í^˜ÐUBÈ¢ù›woUõ¥N ŠcFq²ÓÚŠiºíÒÓÎk[oû¥»ùW¼2Š5GîpjÅA#XÅ $N(ߦ‰¢(ø“½ì†ÞýO}ô’ÓW¯ø?yƒ0ÌÛNìQe±lÔ^~mÇ ¯íyÇéKßýöSÖÿr£®È„ÛqMËéh;ŽeyNàʦÝÕFqÕ¶ªcô­þã/½þýYÓÓ™ýÕï6Ü÷“G×\þwÚüöø³›wk‰ì×ø¯};6kšþøÆ×ðO't·§‰]8åô¥ZLÊ—*7~}/Êšªž¶üÙ·-éIÇ•Ýû‡Ö>ðS1¦õÎë:}ù '÷&6n/±¼€ƒž²¸GI…²qÃ?ÞÅ Ò7Ö|òÔeÇãO’ Bª5³o¸8T¶~ü«?8uËe÷¼¹wpqoçn»‰‚|mL–ŽEôÔ4>IG s²„e¦±ðͷooÑëãoû¥{ýÇϼ÷-¬¹ê¼&ÇmJœ-1í^qg#Ö-×uÇ!n¾šŸ§·ÍŸÌž´}à‰¯ÜÓ•–/îýß¿£»#sÉê…÷>ü/ÆÎ>y!!ä/leXîùm}ï8}é;Ï8徇ž¨ÖBˆ,‰ªc8–å8Â0)]%„Tªfàû$}”{ûÙ.Û !oîÞÓ“+Bw:Ç3Ÿxß§ø!5&E›ˆ£Ê}Q¤5‘ýÚå—|åþÿ{Üqˆ³Ù¯aîüa˜î·½G¡Mñ—œWßùŒ$‰‚ Ôv<+|aëëþºÿsžiŸ¹¸†dqO–òòk;ÂÀ_}â|žc­ºýâÖ?¶”7¯c^göÏÎ9í[ÿþÛŸþöù^ræe¾è¼3‡|Â.êÉB{jÓk;öfº6O2숛·<#à$}ßñü W³ìÏù¥7öVM»-¸ýæOÕ=²laG´É oì+Vj½Ýï{×Y}…Z*®ž²¤÷¾‡ž¨í"áw¸y× Ywæuf¯ýë÷¹Œtê’žhó't_zÞÊ×vî¯ÛnOW!¤bÔŒÒÐ?}þ²rÕ2ëΪe½jLzjã«¯ïØ›é^ÈNë“DAAAqç[Št¾ú7ïïÿÀcoݪy/æ$g“m£ã"Bû÷<†WþáÓ=îxÄÙäÀõý/euq8~jü@Wbzþ’œUìÕ‚ „a¸oÏˉ…§µX ·üò÷[uÅ{»:$Q(”Çÿâƒ?!Ç3g¯\Hyøñgïûɯàxò’ÿ¼æ²3NYÊÿß_þvÓö}ûöàüÓ-èæ8voÿð£¿ÛðŸ¿~*¦%)FÆ+¤ašþ“üþå'ö¤V/?þs—}ð—O½l; Y!uǽãÇÿýÉ÷¯>¡·kÓæ7óÌK{ª„Ûõ¾¾þ¿>tN^üY.UÍ×vìÛ¾};#Ä9^ÀrÕïŽÿ÷ߟ¸dõ{Î=}ËŽ}ϼôÆy§-ÅËÕ:Ë ß¾\‘ŪeÿêÉM?{ìiQK —ŒÕKç«1¹P®þøá'~ðЯe%.H1–㪥  86˜s’.­[6<±üíï)TÇn ¥8îZn±&Žò÷ßûÍW?uaóãŽÚ1æqîÚ?<êÖÐöråå½Õîïy°0¼ýϾ´×÷ýŠa¼QQÕöãZ\yøC{Þð Ïs d9.¦%µt›(ÈC{ßpmKMdôt{†„§n–‡ö1„é8þ$†Z%ï˜FÃqBò¼‹§ÔxšãEQ’÷lÝ~²­[Ïtí{ýyBHÛü%j<¹ÛË^ÃI¶÷Ä3…¾¦QTâétg¯ï5 »]ÛbYN‰§Ìr! ƒlÏ ™L{ÿþ]u£èyo}ñªS–.\÷ï?úÌ«éÎ^^ËÃûëfµa[ApÏKr"ÛSu„j !aöÔ«%ÏkH²Â0ŒmÕpDϵó»ý†Ër’¢Å³Ý¢ËõípêµÐ8ž“Õ¤žjãQ”bôÛDAAq, ’\¾ü-ƒC6ÿá·ã½yÅYöGÝòZ"Û9ÛFokú"¶þZÞÿ§yœ£xØ­(涽Ŏ“Î'ì[T*ÃqAÛ Ë-/]´°Z­†»öî4+Òø.,Ë'Û{‚ÀcÃ0” /H¼(dz],˱Ï ’ É„QRX–e…PVâ/8JœaX–c¡!EQæD‰’hïåð„a’í=²ÇU$ÚçñœÀp!DOwÆâ)^adEOf熀ód5Î "!ÌG/YÅÓwï\´ ó”¥ÇÕ¬úã¿B†åmóÄX%dËp Ä$ä°ó?E¸dÛÇñ؉ мHY“‚‚âØœ£5ÜÉg_8™­šøÌø¶£^lm€ð–?Ôò{ß°Jrï*^ÆîWVã› ÖþüfÛ¶ ·Ú°dýôñO™(zsZ§;F½"Hr²­;úOQVÄ1ó\€Tû¼èßéÎ?5•&2z4àqä&Z*;v?ýyã]o;îÌ“Ôwãæí÷üûÏËU3ÛÓŰ,Ã0/hÉlë["HrB’›þIs„µÙt7 Šc‡9§3Pküpë¡ØvÔkÕî(³7qxï¦Q|eY^ŠÅÓí‚“µ$K“Ž3 ×¶êµÊ¨¨iklÙòZLKˆ²r¸¶^) ìþS¨öX®L‰gºd5ÁòmsüSä#<òÈ#¼ÿýïŸ)Êlñœ4×¾¢©TjŽpyD‡÷”fqæÈ¾ézÎì­>̇ìf•”yÄ(ÎIø¬ µñtaôážöÇ{ˆ¶m¡hG^Ú$ŸagêªÇ^ìÈ#Ž|}Ô¿Á­‰çØ̸P˜ðº&³³­ùZ¯öŒÜ‹Q³iºé§ý,ÎØô„_´YOã­ç,1ÙÈŸ¬¦W×â>¶PZ“ù™:u2«7;«Ÿ¼±7iÆùc¼§ªÙþRÍÆ¥MõAµé™€-F2ÇÈ7âó‡ %ÍB»^›Ìuµ^ƒù±kzÄ)­ö¡ùšLõгñ‘h½8MØú fÅZü2´þÑïÖä¯yë«›Þ‡ä0~ðæ k¶¾Òé}œøƒ¼ñ‡àie¼G†ñ¾r‡%656n3#ÅM×yî‚Òì!ø¡™¥'ÍÙ{–ŸäW}ä¥Ê¢r³wkŽVÖœ½…=˜{16­;—oëØÓ››šûHYÏÖ‹<^Àì(nM™êWlz7—Ÿ¥OÞXR™‚ŒhiTÁdëGÝ9{i3u&£Îêÿ„9ÎÙxBjz ‡ì¾Œ]ê'ÐúÍà97ÝU‹âqëÅiúE>¼_´É|ÆÍYMæk>v[¯ÞÜù;,÷q¼Õ›Ò:0«Þó‘~ìŠ}ÃË(ýðÖBÊå2¡    ¡…#géêÍÞ§nýúõ„Êi%žÊíß±wËsÔr‚‚âðülŇž(%(qRPP­µT¬ àéPPPFkxÄ-Uœ”8)((((((qRPPPPPP⤠     ÄIAAAAAA‰“‚‚‚‚‚‚‚'ÅФöB+εk×ÒE¡     ˜qRÖ¤     hÑ¡ÚË.»Œ. E„d2ùñ[Ø\qRPPPPPPLMqRÌ h™Å„ q>JœoÁõ×_O‚‚¢Êå2]Jœô[AAA11Ö¯_OŸ­DÐ'UœG²¥‹0GÐ4=1q¦R©¦¯—J%ü‰Ž Ÿ¦½hc7ykÆîpäûGÝı/6}[‹wNæÅil>Þú´¾ö֚̚·ØýxSÐîAÓ\Ûd'ýù8ì\ÛšS©T ^iÍ%ÑæM÷Ðô­>áZ¼8Éç¶)h–e((f ÃàW^y¥$I‚ är9Q !<χaèû¾¢(¦i¶µµ•J%QF­VK¥R†aðfÇ;Ðl?Mx_šÞbúÅ¡8HH’T¯×†(еZ­Ñh(ŠÂ²,Çq<σllÛEñÞ{ïåyÞ4M†a®¼òÊŸüä'A(Š‚Gº®Ë0 Çqð ‚`F:vGÓ´z½†¡çy›7oö<ϲ¬D"âô¯ëz£Ñ¨V« È¢ÈqبX,2 9 ¹ ªªÖjµd2IaYV–e¨çF£I ÅlÛ¶$IŽã$ ¼ßó¼L&ã8¨eYÛ¶‰„ïûÕj•eYAdYÆ €u]/ ,Ë꺞L&ñèðæ›oJ’$ŠbµZ•$‰eÙÏ~ö³š¦!^íû>Çq‚ ˜¦II$­o;ùŸª 2F*ŠI.é¨ukúâÁ°æ!»„ƒ×ÄGÜÍšÓSPLŽã°,«iZGG‡ïûõzÒ°V«±,KdC-Ë‚°A×õX,öóŸÿœçyY–u]ײ,ÈVEQêõ:h£ÑH&“`Íjµ zÖ4 D;þü0 mÛÃçy˲X–Çã8t,›¦‰÷@×ÖëõZ­æº®mÛ¶m[–Õh4b±X­V+‹'œp‚ëºÐµªªº®kš&þÍqœ,Ë8±úàAùªªzžgÛv,sÇ4Í\.gY²¿ À}ß7 Ã4Í hš†“¬×뺮§R© Æå€z÷ýÏ qN‰\éÏÄ4~R§âRÐô?g[=Ðl°æázD›Fè•>JRÇqð~P lÄq\&“!„ø¾ŸN§AˆÅbÙl6—ËAŒnÞ¼—–H$êõºiš,Ë2 S«ÕXeY–çù虀ã8ÏóEQEÓ4„—q>Ø9R­A8ŽRT%™L&‰-[¶X–…è1N©P( îH$8޳,«^¯C¾B4M“$éÐ'ÕSújlàqÚL3öÙeªûiqJGÙ˜ùw_Æîg¼46Å´Q.—Ã0D(Ša꺮ª*Ã0Žãd³Y„j ÃH&“¤Žã|å+_A •eÙ(F Ž ÃPÅE‹%“I˲$IB"жmäO8á„sÏ=R¨X×u: C(3MÓPÜ+Bgg'!{vDz,¨ÀF£Áq\¹\†ˆ„.Ä !(&’eÙ÷}×u‘æ%û¾ ."ÏÇår9×u+• šÛ¡. ¤Ž=Ïs§V«% <=0 5†a6›!ŸÏkšFdpAŸQùÕ¬ç¨(ý¥o}ÆölŒZ´©®dj¦tw& ÉoÞbŸ£Îó ?03²tSºkî¼é->ô¢Ÿâ¨„¦i¾ïƒ` ò†‡‡!Œ†)—˺®£¤1L°šmÛ¨ýéîîñ€–*•ŠmÛ„]»vA´Õjµr¹Ç)åy~ëÖ­6lÈf³È¤V*ß÷! ÁމD"“É ¶É²lµZ m-Çišæy¿Ç à0 !þ ‰+• ˲(¾…ÈÓu´Ç0LWW"ÌÐÖ¶m§ÓiècEIAà” wãñ8”%Ã0º®Ë²œË冊gppeÙL&cš¦4xò›¶?ÉŸ¦¯Œ×ºGÑb'\´ñVrªmÓ;ÐŒ¿8ÉË™‘ÝN~Ÿã-N‹Ežðˆ“¿v Š)çyžç»ºº 9Ž«V«¨/;"쉾L4eBá1 ³{÷nBb˜hkRE6ŸÏg³ÙF£aYV™L¦X,‚´À[¢(Ο?ïÞ½Žã t\,QY±kš¦ªª¶m{ž‡úp!˲ííí»víây”AµZAΛ7¯P(H’ºkêõ:t$˲…B‡€X,V¯×UUuG×uÛ¶sÆë QY–K¥jˆ8ŽÛ½{wgg'.gñâŃƒƒǹ®k²ž„”}=Ï{óÍ7Óé4Ž{HCµÇ ¨¦¤˜=‹EDJ%IªV«¶mã·©>–eA9ˆÊò<¬a¨¬7@~©ª*Š"â–†a G%²–e¥R)†a@]Ø\E]×EÙ¶mIAÌ‚ ¸® Š¿ï}ï[±bEOO,Ëmmm¨'ª×ë;wîTU5‘H ÐábP²aQ=-8J¡àZ­†äe*•B«(ÚZlÛFÙÎÄ÷ýÎÎN]×Y–u]WEEQp9étÚ0 ôŒó<ëEç ˲ˆÍ¢9Ïx€@ø—'Å¡ˆ(ÐlÅŒ]aîܹÓ4M4G‚~}E- …¢SUÄž½yžW­VMÓ¡\.#צA Š(ЍšAÔT’¤Ï|æ3h¬ìîî¡««Ëó¼z½Žôa,cYõ5¾ï?ôÐC/¿ür£ÑøÒ—¾”H$ mAK’¾TU•çùÈT²çø IDATÁ÷}UUál'Š"º<«Õ*®"‚r¹lÛöqLJêbQ‘’¬ÕjHX»®‹A'4z*•BÖS×uTØš¦‰ okks]7x"a½­ííí‚ P⤠8DÜI«Ê)f¾ïëºë´ŽT«UdìdœïûP“hº „Äãqð, PXë×uQàãyl†jµêŒP•Æaî»ï>twô÷÷Çãñ|>§Ãx<‹ÅÐO Â+—Ëš¦±,‹4äÍ7ß\©TDQDÁÔ0ºh|ßokkÓuç ­éû~Ôpéyô¥išH‹vww«ªºuëV´¾B@ªª‚Œ#&F2µT*Eî¨Êçó81, Çqýýý84®VGÇÕj5Ã0 >[€NG™uÐAÓF: !€ +D#Ñ’bT†aÀL0ªEÖ®xˆè¢(&*á1 #“É Æãq˜øà=„(¯I´i.[¶lÆ ÃÀý ‹¡§“¢(ÆãqÇqÐyR«Õ"C"²®X±bóæÍ°ë«Õj(‹M¥RµZ­Z­Æãq´Ç0 ×!´WzžW*• 5A¢¹\.dRšF?+"±®ëf2™¨ O ÑãÔ*J„|ßïêêêêêÚ°aC¤>¡5Ñ C‰óp‚N9   ˜6ŠÅ"*k‚ ÈårŠ¢  U9`Ph;˜À‡!\0¡óP5GÔã šf:årD‹¦ÐtØ+¯¼‚B¤|>rB¾“aUUK¥,~òù<Ã0 FrÀ6¯X,n۶Ͳ,”þò< &]Ág©T .ð:@1:,£?Á€¾¿¿Ö 0ð)Bd",ŠP©„À,V¼[­V¹…œÝ±cG.—ÃJF-¡ uJœ‡k×®¥‹@AAÑM'>þé7šç> Ã^9HËÁ62j±J;°)¸9Î À`JBâ–†a躎}¢Ãó<8°³,[.—yž·m;›Í¢µ‰@°\á›N§wîÜ VQBÀ”„ÞÞÞ}ûöaÀ‹,Ë–e%“IÔýFñ^8ȲŒæTèìR©tå•W~÷»ß…ao䊡lY¼g!µc±\†éb ¡_áßkÛ6Œ ÓñtŽ¢| 'O‰“ÊM Š9Ц#€]À‹HgFSÀ,•J0›E¶½½¼ˆ&Jlêõ:ìjAu‚ ˆ¢ø®w½ë±ÇC°·Z­bCP/BµÅb¢( !ÉŠš#L%Ce,Z9ÑÓR.—“É$˜±e˲lÛ. óæÍ«T*°¨Åb„†aP‹Ù,PÀh¤Æò<ï½÷êº^¯×ÆÉÃÆ2ô<44”N§¡>1é ±XÌ÷}"zF!+q-Gd‰Õ˜°8ˆçaþVPPP³h1ñ1|ÕËå2‚“9F­Š„ÎÎNhJžç12 AKÇq€Ìçó`M˜ 2 çŸ~3U`¡€&KÄ~Qm Zò<âU<,ËÂ9ÁHðaŒ Ä+¶E­ œr¡áR- (Ò€VUÖí8"І—V%¸¨î©V«š¦Y–…ì,‚"¿YEQ\×­×ëP®xV@¥q&“AõS&“)—Ë–e¡ ±p?˜0TK«j)(((æ. ˜¢y#ˆg&“IÄi-Ër\T½¢*'jÌÍ@rBгˆWÐë ç(À 3ÈYhV¼ÎR©ZPÀÜ [Y–Ññ‚B_Ïó`æŽhp´ÃD"Ø2ŽބŠƒÒxž/•J‚² ì„‚fœ3lðž¨ò´Ž\¶lY½^G=-,‡†)•JÕBï¢h}8wßqÇ”8)(((ŽT R*IJ~0c-O+W®D{x<φaY$)|  ÕPà òñ°, óü©Ñh€Sa€Jì-˜°æ9Út3?è6ŒÎÆ “J¥‚Gå¬h…ÇmÛ—_~9< @Ÿ¨-ÂÀÜ(q‚;öA‰¸+@ÃèaÅ41”/mݺn‚‰DBÈS„d•âl}ßG×ó¼n¸afˆ³©'êxÓ0¦a¡rÔ¯¤Æ õªŽgpÚtò õ¬¡ 8Z¢žT*U¯×¡¥ í†yá…ÇÁë—¨ƒEÀìüµ0(À‰Üò"ïu¸ 0Û’‚nK˜ä¡¬' XP)Lï"]Eá_Y–‰Ä]wÝ1 Œê!ÙºuëÂ04M3jNíêꂼÆÃªª„Ð9LþpJˆëâºðp€Á,ÑâD6aÂi\ xxÁö¨­­ îöx@‰ÔíÁgd†2™á‹´|ÂÅZ¯jÓVú¦“7&sS(((ŽP „­–«V­ÂŒåD"ÒêììD¹M†¨ÙA³ Çq˜šÂq¼Ô!1™kñâÅ't&”aî (ôK B%©hßÔuÝ<Ï£,vÅŠårÙuÝ… BÖݵ.–e;::0,ì¶¹mÍš5µZ Ü ¶Ãø˜ <«ª*xzïÞ½È;BPµ„«‹’»ˆ'Ã5çù•+WbЈŽàN4ç@‘C¿ÂRûÌ3ÏD2µT*E“gЄ:áM™˜8GYˆ5ý™+ƒ&Ô©£Þ6–ŽAB%-QµRMV((ŽV |½ü/½ôR>Ÿ7 CEžçE1 ~{ˆ:‚ó`Ô(BD Qš[­Vwîܹoß>X$ Z‹@MÂÒS½lÛVeÞ¼y‘¹+Ò“(‘Ý´i“çyÇü®]»†¹ì“—Ýwï}¦i %‰;¿sçÇ?ñqÄZëõ:dk"‘€%†W§R)t¼T«UÈkÔ ¼MÓDCŽïûwÜqèM’¤žžß÷kµ¬X–E# ¢»ˆH7l6 ÁЧ ´lÚ´ L„B¡úD…­ªª•Jm¦ÈCPâ(¸ºH[{žW,}ßGT|Ö‰sÚlw ê¤ú{䚌 ÀŽ'7)ÅRPÝ€PƒG9h‰‚QÛÛÛEqçÁDnªné¨ñ!Ú{ì1Ó4Á[Ø'(¤T*íÙ³‡a˜  Q™Hß÷ûúú “É$˲Ï<óL,Cý‘mÛ†a@M& –eMÓ Ãðó7~¾»«{ppðÎïÜyõ5W£þ¥…BõDhHEø“LLÓlooO$x2€nFٰ뺵Zí–[nAw ª|vŽS#)ÇMÓ, ˜Ü‚5AÈf³xæ „4B¡€@1BÖmmm®ë~ô£E<|v‰s2TA?ý£xqìÓC‹UšL–.2ÅQ øÇ¢Ž©Á¨´§Ñh ‡tÏó0Ó¶í\.‡<œ†b±2|ªª*Šbš&ŸøS¡?>Fš,_¾Ü0Œ… "ŠÛh4úûû}ß/‹F$ªë:ªx*•J__Êzáû< yû…£l”sE!’®ëº®#Ù¹gÏ4SΟ??jÜL¥R¨ÜÁ¬lœ0zG¹R”é"’ŒÐ4ªjXFÙ0ÂÂà×hˆ˜¢(===PÏ dUU|ðAìöp'1#Ïãe…)((ŽnÄb±d2M¨¾ð #¨ÛÎï(ÿUP´‰¢(x=2–‹¦}žÅoõO<O»mÛ¶%“I¤-aÚ‡·¡‘ôÖ[oZGà I’mÛ`qÛ¶¯ºúªûï»ÿ†Ï߀ŽI ­FÍ!Žã¬Zµ £FqzÝÝÝÅbÑqœ¾¾>ß÷ÿöoÿ–ÏäY !ð*ŠÜ !,ËZ–•Éd}u]7ê¥Ñ4çùøÃh¶Éd2(ëÅå`D Âݪª"ÙIœçؘ!ykxv2?â“o\¡”0™‡úBAqŒ ¿¿ÿãÿ¸®ëК>úh¥RÁèiÔ³”Ëe–e1À Ž¥aàh8ô« ÀMÈ¢ƒ¬£ù¨§¹BäyžgYÖ—¾ô%ì¬&I’¢(È_‡Ž&]ã”lÛF-’mÛår9‚Í›7Gfxª‘vák_û¹„%K–@)"⊠‡÷,LtQ+ŠâªU«PL„Að£ýÛ B`ljDzb=*z©Ï€âl=¤wdgÅ„[·«èõc‡¦´>S½)G‰Äý÷ߨôÀ—Ç÷ýr¹œÉd@3¨V…Ä$ÜÕ-˪V«¢BT¹®{ÆgÀäcR0wŒçyh8 T&Æ•ˆ¢ëWUU…²Œ:# …Âàà ò¦H2†¶CJRÓ´ŽŽl…NS4ÆãqI’R©Ò–„†a 郼yžß³gÏóííí¶m7 tã@G¢™$ CØÓoÞ¼™‚ÜíùçŸ*J¢¢Ñl˜§²aÓ4-ËÂSˆ(Šªª‚Ag€8É8×è?NjĶØjì&Gw8·éÕMi}Æî‡†Á)(Žz 2‰Z ªÍårØÊ²ŒÎÉB–‰¢xñÅ£¾=-,˾üòË„„.1D Ƴý×-Š"üóâñ8Çqét*½Åb‘a˜d2‰"TA#2ŒzWQMÓ\sÓQ16@¨hEÒe®ÅbÑ¶í¶¶¶r¹|ÞyçAìʲŒòZˆ`4q^ýõ¶m‹EEQÎ>ûìb±ˆ +Jdëõ:¬ ‚#1úÔSO‹EéÙ¶í8ŽeYи‘.È6 PáÐë3Cœ‡ÐL<Ïçóy´9ú¾[€X,†48]‘_«$Iš¦=öØcJ¡=vthY1 ¤"I’ªª÷Þ{o©T‚i;Ä"ÌoA«¢(¦ÓiÛ¶óù|µZE ]bÅpÍ{î¹÷Ž;Öªª Ýûïdo ¼5¢àÿwíÚ•H$^|ñE×¶íD"áy¬t]gæ¶ÛnÃe³Ù§žzªV«AS:ŽsÖYg!DŒR ªmÛˆ6www˲¬ë:Lq¡˜Ñƒ'T†‘N§áaMÉ>tÄIÆ3MÓ ˜À‘*Bº®›ÏçѼßh40‰ÚqD/«Õ*²’ˆŽêºnÛ6ÜyÐŵZ¢Ô(‹~FÚ „ÞDß$\ŒEy-2¦ˆÇâœANÎ…|$Jœ7£ã˜¯R­V†û"PŒˆ4ZY0tsÞ¼yÇíß¿çõ§>þøãä@úéREQxžO§ÓŠ¢D=3(ë%„à¯X<à$A[¨aîîî>¤ÄIÆ3ˆ(ô*Šb6›ÇãË–-CfÎ8(FžìŠ¢À<AHX¥7¡¡!T±jšV©TÚ=ûì³á¡cšf<G?(T,rpÑCáL:Îf³Ë—/‡-­ïû_ýêWVµ,‹òùÏßpß}÷£¼JD… [øåV*Ä{# $Ìű¢‰Ü<Ï;Ž#˲mÛ}}}8mžçÏ8ã ðq2™ÔuYU4¶âXº®ãê`ò‡‘/²,·µµ!= ¶FÒ7 Þ‚z9ŽËår„èçr¶±~ýzºÓ&W#ÂÙh4^yå"È ’FqÇaÂ%X ¡]”¹¢S/Z–%Š"ˆùùçŸG¦Ó¶mL o-h‚Í—„8 ¨ª ìºî-·Ü‚á'x,Â0„¬Œæ|aø6ÆVƒPqa–Ëep"ÌÑ4éZ­†Ñ. dMÓvîÜyÊ)§<ùä“(/Š:; !Åb½¡Ø¹R]×Ï8ãŒeË–ÝÿýA £†ÅS8ÉJ¥ÒÝÝþבM)qNL8¨–‚‚‚b<€ê8ŽS¹½0 ÷íÛ×ÖÖóCH8âeoe2ÔÁ?›àá·€‰Ü£8,àÊ ŽêYBº0u]GÎ2‚E‹aϘÅ-¬‹LÓŒ!¦k´, qÚh‰(qRn˜sX¿~=}ª  ˜°l…ó*Ò–ø•WU£¡ÁL Žã íÀ=¡]]]`Jç¡Æå¯\pÁÏ~ö3HÌD"‘Ëå0ðÙ¶m˜Ë³,;44nFÁ-¼ju]çU*"yžÇ£ó7 –Eµþ 2C™.Xñg‡‘Œ~A@ ”"ºB !ƒƒƒ°Ø°\.㹡X,¢·Ø3:J1|;ò×E/ ª|¡‰[€öqRPPPÌ]X–¦ÁŽãÐÚˆn}Ô³  Í‹–e¡/cL,Ë‚ ;úF"+×J¥¢iì,Ëzýõ×ah€^$1,‹Ù¶ w:hJÔ»V«ÕHb², ÷ŸÏ}î:åBBB"G\djMÓD!+!-›µZ åBžç%  6pÙÅåCã=„8!]ŠB!tŽ"à,Šb2™Ä$hJT'2QµùÈtE¹Q %N Š#h´€öŠÌz’É$¸3û¾ŸH$0c Þ=‹hÌe©DŒçD2½"W–‚{êk …!$‹A·¡éïAe ¶J§Ó%íº.Ø­¢õzý[·käùK’爎¸!àŒ.ã?š^ó‘ oww÷sÏ=‡ÕN§Óö¢LLœ-fеÐ(cÍd„ÅôЂóFM›iÍŽÔ.‘‚bå¯ Ã`ºH*•B³„$I²,C/¢ â ‘IÏó0c$ Ã|>_Y¼'2·CúR&- º®wvvB›ÂÆ6‚sÎ9§X,F§„¶Np8I’¤Ûo¿ùWØ2`H|¢|—=˜¿#S‹£@:ã$ßñŽw¬^½Ú¶í—^z r6‹¡÷>|¨EBÆ”j‡A²³ÑŸP`ŒQÞ,ËîÞ½Cèé$ælW«Udp±°‚ ÜsÏ=³¢8[«œ™Ú„bz7eßIAAqØ^Éçó¾ïçr9P¬ `/‡_|ŽãÊår,‹æy! ™ˆfŒíDºñ„NÐ4M×õX,–$)ŸÏ¿ùæ›8®išˆÿþ÷¿G ÉNt}T«UÄu‘tDVùNß÷¿ýíïB …ÂÒ¥K !h¯$„ GÓ4(NÔ Á—'ùàƒnÚ´©½½ñUôh±‚ñ,²,£" ‹7]0+œîñÄ€nÎÈ“wåÊ•¨§Å8“g ÚO<ñăUœÓP9s„5ÇnÚ”5)•RPÌM E†! ‚êõ:ò…UA”ËeÔÈ8ŽÓÖÖõ [sø躎'‚“ "Çq†‡‡‘k„';ÜÚÛÛ#-›H$`GfÆðð0HÅ>õz=¬ˆãœQ†CQUuÏž=0¦Ïf³¨æ…3!„çy”ÑâhÖDkäBP( 4¡n£®MÓßÅÉ@æb} žñÖUr þ(•J=÷Üs¨CÆA‘pÅ_‘¦Ýºuë gÓñÔdDÜuª¿ïTkÎ5Ö¤  ˜³@v¼…X+• ÊAÑ•‘Ï硱 Ã@¨cLjµ™(®AIQoo/Z$+•J&“A) VK¥’eYžç ÃíœÑ0jEQPLÛ£±Ò|hñ\·înœ<¥’$-[¶ å¾O ÿß÷Á‹ÐʨÙAäÖ²,TG³\àˆ„ÿ„~E±.Ã0àÑD"ùÁäˆa˜L&ƒ ¤Œyj# ’8ŽK&“˜ú©ªê‚ Ð:3ŠsኻNUªRÁ:«¬ÙôÉ&ú7]y Š#`;T–âÿQ#Š"‚¥µZ Ö¬„D"EˆH&¢¯àTè3–e7oÞŒ°¤ã8¨;ÅëpmE×JOOªLq A@½õz±YX.0 ƒ¸(ªuFÜBBP¤*ŠâöíÛA„ 0Y–!û0×’¼ ãîînü¾ð.P¥§§bQëõ:JŸ†©T*Õj­,ñx\’¤b±È²l¹\>ùä“F2™$„ BåE££F×ud‹ †g€8£ŸÚ©þæÒƕű(´,ˆ‚â jÀˆªª&“ItŒÓ%?ñ‰OÀϲ,TÀú¾§!´XÀ®/š‹ŠE¦P’$>„RÔÅV0LÀTÁ^QY–/½ôÒÎÎNÈ5†aPÄ‹ÝFgþ©O} ¡`hÇ0 ‡††|^D°£Ð0b,™LFDU‘çy{öìÁÓC½^Gõ/t*Çq¸@ØÓc>Š€žþy†a ¾£¢'?ÚrP‚«ëúºuëÆd¸iú9ΈÿÆûD¯Œ*餺gVuç$ƒç´¶™‚âºMP§Šÿ¯V«(ðI&“ÐU>ø ÊmAèíí“Ћ þCÀS’$Û¶Ëå22‘¦iV*´»`è&Dx™Q¨OP8È)‚ŸýìgÅb1*V‚2®V«( ¾ÿýï#  ½ëºn*•rç‡nÇqŠÅb½^‡)D3Jj¡/£ è¢E‹hEº7ârü'6Ä%C\ú¾Á ôŸ¶`tÇqæÍ›'B?ìyGú,qŽ ®Ž4MõÍÈ?'ƒ(fV\6]Û¦·©éÍ¢  ˜SøÜç>‡H)&ò=ˆš8“É$¢£±J’ôæ›o‚ ž…€`@\pêqû…Eu ^xa†çŸ>F”B ðX–Õ4 ¼‹8pÔâAwww2™„v$„¬Ys#!„!ä¾ûîËÂá´Äq\OOO&“’©¨HZ°`b¹(öWÌc#K÷W_}&ÝÝݨ¤kü?ø£È€ÖjµÇ<²½E.f„š¦sÎ9X/}éKñx|ïÞ½³¥8)((((f˜y‚Ave²,Çãq4þœF‘$ S¦# :œišË—/7MóÙgŸE›²º®§R©F£±qãFÌÊ¡¯¯OEhM¸Ì†ïr ÿ 劲ÕË/ÿ4Lû!W\ñYìß0 æ ?äõ×_wÇu]4h¨ˆ²wï^˲Â0L$p£#Z‹áèÆÙ»w/^ǶQWhdR˜H$zzz=FäeP˜,†ƒ¾ôÒK„ôç õ;¡ß%N й‹(<‹¡’$uvvvvv²,[*•àêŽJŽÂ±=šy™L&Ñ¿aÛv&“yõÕWa†Û¶‘ËDçe‡&“Ér¹¬ë:ÆŒhšV¯×!7QÇ‹: B&HBúúúÀÜ0áÃA#2µ£ƒ3—J%hÖt:ù—y“ó[!¨ëŸtÒI‘%vªƒ}nDв,cJš(Š'žxâu×]'Ë2Æhà çÙ:Ž«z¬0[)qRPPP©@Ï%*zB”µZ ă*†aâñ¸®ë ¥ªª‘h?ä IDATHéÁ=@–e´3¯'ÊY™*HøA;V«U4±D’ˆšBÅ"þyî¹çâЃnÏóÎ%„\yÕ•`Ó3Ï<3›Í¢Ògppm-(ðAáîu×]õ•7 (ÎHG¾üò˞穪Švœ„Ê[ô›Î›7ÓNÂ0|ã7î¼óN\ô1&`cŸp~GF‹Å"lô[ƒÎãœu¬_¿ž.Å4€&Ìô„4óEõ«¾ïcò3LæðžÈ²µ³³ó¸ãŽÛ¾};ÚHb±ØsBP„ÊÇq:::lÛ^²dÉöíÛ1±ËuݳÏ>{ãÆ¸ù|žã¸­[·¢'™L&†Eõô¢mÛ©T꥗^joo¯T*¨•ÅO'!¤ÑhÜ~ûí’$-X° ¯¯©J´"s‰h3”륗^úÓŸþK±bÅ X½BPËq\¡P@Tzz``7‘ÆŸ*• :Ä(ØF¸®ëbl%Îà :®™‚‚bz€×Z Q‹îL†a’$„DóÂJ¥ ¤…JZAÊår£Ñ§¢¯£V«;£e#»9wíÚEE¶DHy¢¶P(¨ªÊ0L¡Pà8î†n¸ãŽ;DQÄlmˆ?„[à›îܹôX,Q¸„80ò£{öìAô"$,Î0›ÍBGþð‡?dX6oÞŒí>ðŸþô§`G×uQp+IR¥RÁ 1-ËJ§ÓhƒÁ5Ã0°P‘C!^€”8'Ö®]K¡.»ì2  7ˆb<Ôëu$#E1Mr-*öÅÀjäáf‡‰›Xh÷„:ÕúyU¦PfÑä/„m5McYï`ßr¹ÜÞÞžÏç%Ir™ÅF£qÏ=÷DþòÝÝݯ½ö"¢Ø•®ë†aÀµ»0ÒƒLD¦sÐEÉår]]]°ä½øâ‹ýë_;Žƒœ(ФP',Ë2ª \‡‡‡}ôQ”aæ6ð( i°•J2½P(`e Aú†²ÇÎ)qR¹9wQ.—é ¢7ˆb< üÕ.𦡶Ä€Ô&œÐãZSMÓwŒÌla€NY¹rå† п6Bˆªª•Jõ>‘3€$IµZ ,{BüݽnÝ$Ïüvò­ûï»ïšk¯S"GK9õÔS_|ñÅ –.]ºcÇ T1M•®Ãà̛7ïé§Ÿ†› l‚€\†i­ã8…B!‘HÀüÁ¶møA;âm¸®\.‡+‚Ã-ž!`(ˆ*!”.GISJœô§gŽbýúõs„´è šã7èX†MÂuê == M„OQ‹ŒªŠ$IŠÇã°—ã8±Í¶¶6²"±;´g ¼ s¢Z­†7`Æ5JŠ!7®YƒBÌ Òéô®]»0†qÎ÷¾÷½äC"O×u˲Цé8ÎÆÑ200€ÝBG"¥Ê0ÌîÝ»Áx@&Swuu  _òú8º.DhÉ¡cˆQ«ª ëD} !‰Dÿæ8nÞ¼y‹/~ì±Ç&ª¥UµG ¨ÅÑ4 ¢£^¯ã§l ‘„œl6kYô‡Ò¢Lö&¦i‚–@{•Jã½àÂÓÓÓS(P5CÉårPuÇ|¨£U«Õ}èCèK±ßþýûƒ €'C£ÑˆÇã?þ8Î_UÕ R©TÔTË"!(ŠiÒØ¹iš_þò—Ao_|1Ï󃃃0䋼|ßÃpþüù¸F#£]L®Æ$ÔÍ¢ZØq4žJ’‘ŠJã A°uëÖßüæ7ðy ÄIq¬°&õJqô?ú°"„ 'Äó< ^FÝ,Çq¦ibd4Ä:;ñŸh^BÛ"¬Û‘Ï;ùä“}ßß¾}{GG‡(ŠñxÜ0ŒHºíß¿¼Ð¸P™›6mÂé! Œü%&‘³£VKðjp !£ !ˆ‹"7‰˜32¸7ÝtF~øájµšJ¥p½`tHgL«. ÑôiØÍã±»‚R¶x='0<‚ /ºhòù|gg'8‹6á}á'ó“4ê•R©4ÊoväŽz?õr›ä  Öz ›¾a¬]p‹­Æã˜¦s:›¾anÎõ<4‡žÆJNæ^Oò®MõÒt+úÅ<"€r°&ü£¡%Žã ø‰a#Q€nìhsD»$T`½^Ïap&Ä_:Þ´i“¢(¢(æóùT*U,a<BÂ’…(ô}#6‰èr°Ñhttt „¥?G…ݹ  ªªjµZExB¨f‚d„~Õ4 vEˆ$»®»dÉ’mÛ¶!+™ÉdL&„xžwæ™gnÚ´)rD2 EÂhŒAN ‚;NcL7$i.—ÃÂH÷†ƒ"Î ¿fM+é×rª¿¿Óà€±¿¿cÍ÷[¿¡[wˆñÞyxuæ%kNu%[¼8Õ»6á'¤éV‹b"‹yžglƒ†Q%ŸÏcŽ4LÌÑ”™ÙFææ‰DÃ5yžÿÚ×¾vóÍ7kšV*•¾÷½ï<ÄÕW_'¼l6;88˜ÉdJD¡ìßýÝß}ýë_f|Bã˜b¢$Des¹\½½½‘kÊ‹z{{7oÞ̲ì»ßýîßþö· ùl6‹‰ž™L欳Îzì±Ç &‘I…½»mÛmmm°D1QÔÀ:<< ¾GmÔ³Ï> o‡¨‹4˜B`Ö&LÞA¥Š¢Dù`Ã00¡ ½4 3cÄ9IÖù³˜¦Éó|>ŸWUR¯P(èº.ËòO~òÌûÉO~JùY'Š"z4EAiÚ:eYîë닢༭[·¢‹æÙgŸÅ,3BȾ}ûººº\×7oÞ¯ýk¸ɲŒj^BHOOO¹\Îçó¢(¢² ±å¥K—ö÷÷ ‚P«ÕЫ#Šâ½÷ÜûÙ+>‹=ß½îîëo¸ÅS oEQâñx­Vƒ£ÂËQÓ&£AþÂÏav‰³õOüQó]ÅX‡æº&<Ö¨7àô&s†GåÃÍÈñv3®¥&|”™í{Ý:Æ;½)¹”Gôôô ¤R)Ó4Qãêy†nBtêºM{úé§5MSUÕó¼F£Ñßߊ\ÔÂÀR”¦iZ†ˆÖBl¡Z±JTð‚En¼qMt2·Þú÷äV‚Àl4n¥\.Çãq¸BFÆÔhr 8M±X,ŸÏÿå_þeooï]wÝ…­8ŽÛ¶mZN5MCuœðúº»Ö]sí5¶–e¥R©;wâ(¨ŒEÒ—’N§-ËÂh0\„2ºk¾&„DãÕ ÍaFˆÿÄ‚Læ¾ð3øÝûÅ>jÂA#ÉéP š‘kØT:Lˆ›LrJrsîß©C£z'¹’“Y´©ÞµI~Ëš~g)kY€qA©T‚¥\ÿ„?œ †a\zé¥?ü0( ÔE”ª‚5ÁjkHõ™yÕUWFS- !HÞyçwǞ̭·~õVòUòÍI9C!Ìmÿ2úõBÈüÏë>wlù,˪V«Ñ°n”Aù¾ÓÍ7ýëwþo¾éæ›ðßX,µ«^sí5ßøÎ7®¹öšõß_ý ×ûY©išaèmÅ€3ø•ËeŒ‘¯#.íû¾eYëÏq6ý¦E*‡~,éL—bªÏ‹¤YÜ¡O©Nã lì´yú8‚€:šR©c<ÄQA„¨Eïd"º8Pã*Šb­VÃäçl6kš&‚™ŸùÌåèñàyÞqþ˜%„躻暫ÁÐwß}Ot2kÖÜxû7¿yÝç>Ïw°¬eYº®+ŠR,Ágš¦õööÞ´gÏ¿ÞvÛkÖÔj5JUUãñx¥R‰Ôj†ÿöoÿ6ùÕø×ÛþÈ ×^w-ŒyQa‹aŸ¾üÓwÞwçW^alƒDQ„gP:îëëƒm!6I¥R(§B0õP‘ ðì†jÇr'ýf‚Êé-2½5ÓVÿ‡1‘?ƒ¥Ëôp$?â¨/Ey-Rz ½jµýÊG~èhÀ0 “¥Ñ¶¡( º/FÎäBèRUÕ¨6¶A½½½/¾ø"œß¯¹æj¤W¿÷½ïó›·ßN¾‰Ð(( CìˆÖ‚« ]×½å–[þùŸÿ¹Ã¡¡!°&N>‚«¯¹õ8Š¢ æLA F€¶m?pÿÇW_¯^ä‘^…^¬V«’$Ýs÷=×ßpýÚuk¯ûÜuA`¨µeYõz}pp0‚l6‹gô›âla¢„À/¼Šq#º3 ‡Žúÿ¹¯§GÇK]ÍÈ=šSO<­Wof³§”>@FÙ¸z½ŽZYØÔ¥R©J¥‚*Ô¹B Åâñ8‚™P¢èúì†ê\èQÃ0"ÛtÛ¶ÇÉårð±C•©®ë®ë^qÅg !än»"$Y !ñx¼\.³,ÛÙÙY©T-ZÔßßñœØám·Ý†z`\‚,ˆaàÒ‰F¤uwwçr97ÂË¨ë ‚àû¸êê«DQ¬V«vh«ª Ó cAsK:)F®÷™LÅJhßDÛ«ïû¹\NEXÆb1Xà¢SJ´^¯:¯Ú‘Ü9É•#KvŒz2˜UÖœp ›¾a’+´vò¼ü¿®É·WÎø½nz¬é}BŽîÀÑŠh>¸<†ô]Äb1h/øÆuttìÝ»—eÙ‹.ºè—¿üe±XD;#ŠkTUEŸå=÷ÜâóŸ¿Áó<Ó4!jA!(Ÿaæ¸ãŽƒ,Ã0ðÙTM$ÃÃÃ뺾hÑ"Ì<Ùºu+J‡ bÑEJAm0Ã0¥R)НÂЇeÙ‘®{ X°{£ÑøÂ¿Pð ]ÏóPÅLØ4J¥rÛ¿Üvíu×r÷_û‡¯¬ûʵ×]YFà„]×…c>Çq+V¬xî¹ç†‡‡u]¯Õjè|Rˆf,qŽ—Ýï•£òÛ8Õrƒü]žpÍ'yS&s_¦w¬)á¿G‡å@“Y©Þë¼k”&ÐPm<Ïçó}è?Ù³gÏ‚ Ñs‰ÁX¢(îß¿c,ñ‹_À!òH$¹\NUÕ›o¾©Z­‚Mƒ e­¦ª²,_}õÕ·ß~;ìà4‹Š\¸™¦É²ì'?ùÉŸÿü犢8޳oß>„mÁŽº®ƒew+㸎ãÀ];¿Qõ·àZ˲0"´P(  ÁdÔÙ¶ YÃûMÓÂqa:g8÷ÂKAUÕ?üápæC([’$ÌAC(éÛÖ –{s’$Ù¶­ë: ðã¾xñb˜Öâ?Ï>ûlžç5Mëèè•¢•o¨V«è_D³&*Q%IBAP4EýH[‚P¿ýío ‚€ +Èa^ˆ×X,&IÒ<“?˲pÃ0OË‚À`SÞ+7}ìc`MÂ01ØâiÀ÷ýEQЋÙh4¢A+a‰ã¸Ï^ñÙb±gƒ¿ùôß@³âTƒ €i-5<ÏK¥R .„©}ÄеZ­V«‘áqJœG$@ZŽã`¨1áÝ ±…)Ó¾ï/_¾|Û¶mK—.3-]ºêºÏ<(3d@mÛ F>´ÑÍz½†!Žˆ"š zzz`~K´fbJ6”¢a»wïF‘*Ø$‘Dô}ÿï|'*{ÆücŒØô<¯T*a‡årÍ6„¸Ø#G‹ó1 F ˜ï o ð„Ñ›˜ô‚öx2À'¡­­- Ã\.‡‘,„TZÁ?‘Hp—Ïçãñ8%N Š#©TÊu]ô“@i¡#©1œ¤V«AðÌ3ÏH’ôúë¯'“I×u7oÞ|Æg d4êS„<¦F÷ôôÀ'áŒ3΀ÄDÿÆ—¿üer`(2© ÃìÙ³' Cõ ± SBhÆ÷}–e—,Y‚~Ó(MȲ,Ø DøÛßþú„0âÉ©T*£·†õ x$>!‘†®ë0©WU¶ò®ëž|òÉ =`$/Ëå244žàäçû~gg'!z×›N§ !wÝu8µ5è<ÎYÇúõëé"ÐDA1  ð3#¶Eq Z5@ È#Âp•288µ÷ÄOd2˲À (É ‚ ­­mpppïÞ½(ÏÙ¼y3XBsíÚµžçµµµ‹Eø ô´DÁŸðb6›u]wß¾}¢"® #Ôæ v©YHX 2Cj¶§§‡²uëVt 0¸Ñh ÜIÓ4™ÑQƒ°j½^Ïd2¥R Ï®ë*Šòꫯ":‰+ I#7ÜÖÖ†î¨êZ­¶k×.´ à¡Á÷ýB¡àûþÍ7ß ¥Äy˜A§ÓDA1=A€a[PE˜4Y¯×Q ú„1:ºG¢_©Tâ‰'PÍòƒü=,ßõ®wÙ¶½²²6699 xÆ%¢Àð+»¸¸xñÅÏÌÌ îæ‡ã‘þ³ººú‰O|âž{î©Õj±X EZÓ÷¿ÿýL&ƒØ$Ú• É`ÆÜ¼è,)vä 6t6Cðãƒ=kÁ677wðàÁ'N ·¶Ýn'“ÉR©Äd{K¥Óv‡Ã^Yà4lf+õí3d&Șlßüæ7|ð|BÀ©1ÉdnXŸÏwÅWüÍßü >O #ú<Çãñ«¯¾úÑGEpë÷û‘„s‚\ƒÁt:ý¥/} FFã5¯yÍã?'0\µÐþ.//?ÿüó£â²™uÚVß}÷ݨïDa%:º<ùä“€çt:À %4HnÂWàf‘F‹[FÙ%²dÁJáX†6=Î;755•J¥ …2Œ°ù€“–y§‘6]û`0ˆRWœféE;zô舀–™ Ÿ  ÙÀ„àž… -k@ Ç,BzO<ñª8@(S©ëFéóù}ôÑ©©)ÐPø'¡W <833S.—¡ŽÚ±±±þð‡è\æ÷ûÞhËƉ_V¦’H$ÀYÇ’v»}èС³gÏ6›MÐÍ×¼æ5ÿöoÿ=<9Z‰!š‹Ú&ï€T#ð]ÔwB§• 8?rtãñ8‚»@òèe]­V8mB éêêêÒÒÓêƒ< F"‘T*y®ób²j3flt³Õja•Á‡o dzëЪÕjsssÙéà¿~@l}K½^‡|ßï÷ûý膄#" »—ï+훟Ÿ_[[RÆb1ŸÏ‡.f¸ª§Ÿ~š|Hüyì±ÇP₃›Íf©T[…1¥4þÄ}!H‰‚dÆ‚ ¦R©7¾ñðf#ÖÛh4jµÆ'‘HÌÍÍ+g2™Ë.» À0dî£Ñ(šf£Í6Ài̘1cÛÒe£NÉ?ÅãñR© …°Ö#¬‰D³³{÷n”— +µÕj-,,ƈhee Ø@2 5 @Ò|s‹hh¹\fÙ¹©T §ÑìºÙlîÙ³=¥—––p% òÿk6› ÐÀc\ ÕœPfˆÇãò'¢ù²—½lyy¹T*1æ!T ÝÚx<þØcÈ4ð2™LÞzë­P¸…/Lý'?ù Ò”O;66U÷¥¥%ÇÇÇ1VîÖÝU+«f Ý{³Î0:Öº®ÂC»6aRx5vþÝ‘½Š¶•àûèLr.< »+}½ßØv4x2÷íÛ÷²—½ì_ÿõ_ÁÉšÍ&JáÉD®Íòòòüü<¤Ï+• ¸À F"dÂÁ‹¿–J%´Á;¨Ó‡Ãh.‡0>5>>®¸â "ºýÓŸöxñ¿ûá·ü~&ÄäÔWWW‘© ÉD4!þ‚ø¹Ï}°ý“ŸüÖ+(ÍD㩇" ‚¬ápxyyùŽ;î@_¦hÏ"šhÖ12~‘Ûl6[­Ö—¿üå>§üãìK óÃîïêY{í®§Ú®#ÛÎ\P7AºáUÓÃùmS6<ñÄ€ÀåååJ¥2==]¯×á;m·Û™L†) fŒ R>gÏže2CL~-D i€bGxhY—.ð0”ŽÀõzêÔ©Oß~û¥—^úøãÃwŠ$#hô@!/NŸ9sŠ€¾Ž¤®9HÑü’Õϰ¢OD=WWWgff@£Ñfqq·u!0cœŠI½SG9nd¿ß"d ¡W($y‘Ó ¦‹.ºhaaa÷î݈õR'ª«ù7¿Fð¿g¡ñ¯ð'ÝÁò_uoŽb)²-¡S=©<ý7ä[ÞF ñÖNrÜ\Ð Èñ·Ðu.¶×ds1dîƒAÐGè@å(ñxHd2999 }> Z¹\d"Ãhll Ê`xˆ€²dpY82 YhMOO¯­­ÍÌÌ<ùä“àˆ©T Ù=p¼å-o™E®W´ÏÄõ £²~¿Ò} Dªðx‰MÃoüÆo@Ó»wïf'H…E! DˆànEÚ0`8 ¡()TÞƒú ô‹Å"®JIœ›N¡u×ß¼ò`å_Ý?2RKóV-Ê®Âåzºî?t˜þŽšµ~ª™  ;ù˜œßš‚j„åॠ›E™#¢z,ƒˆ6V«Õ&''›Íf&“™šš´¬®®Â]‰†_@`Ì©S§€Öår¼ ÞQDLYîR2™üÖ·¾…¡n¸TZS‰D&“AËk"BÖëÚÚÚ#<‚„aÌ}êõúC= z¤ •Ëe 4ŠIŸhGŠ@&dËår£Ñ "ªŠ«Žb W0€€ß«_ýjÐâ~'¿¶êz)‘O=oÏGÐS:äK]äÌ}«¡<²ë©vÆ¢;;Ëܘ@ˆýû÷×ëõ·½ímÈkeu,Õj•5ÇyˆyFDÔh4ÌЀeïSñí8!´ãQš266ö…/|Ø„7µÑh Dgáƒm·ÛãããP6@òðáÃHqB©h&“5,—Ë—]vÑD„«]í¸2`¶¤V½ýíoÇ·/,,G“É$ʽ(c}ê©§šÍæÜÜ\?SXa{óVmè'=úK€à ÜaÄhP™­íëÅ_Òs$R7A£ì¤1ÖƒÍÍÍAWozz\pqq1 Öjµüàè4O,òe¦¦¦ÀÁƒ!÷ è:qâD$ùû¿ÿû={ö F©< ËÄÄÄòòòˆ)°ž^øE@ñxJ~Ñh´^¯/..‚h‚®A©­Á.¹ä$Ê‚àþʯü „vÁJÑS¢z,7H¿ººúµ¯}:…(årÞW ôSO=uÍ5×@Ûavv* „Çì3.//ïß¿®æx<þðçR©h4Šd¨r¹Œðg$‹iDD”N§îªuÙæ“¾…¯—Ÿ´z:"Ð2üuÊû~¢ë‘ÆC;"ÎÛ mÂÌ]8g&ËšAÂK£Ñ˜œœDœù>ˆM®®®B=î™gž¹òÊ+‘4 W*T~Nœ8±´´„ÊE¨ñ±ÞÑ~¿¿R© uÁý~ÿ+_ùÊL&Fý×%‚ØB«Õ‚\-á2ž~úiV¸OÿìÏþ ‚AHÀ6#¿—  ÇK0DÐD9‹Ž ‡Ã>ú(´ô€¦p>7›MÜJTÑãzffß¾[¯×ñW\ <´ §R)Pj"ÂPlpº¯Î^\RÛb§¬tYo£=¾ñæÈ˜ËŽÙ7c`ò‚µn¸aee%‘HLOOCÜ9>»wï>uê_Á8„³ôMoz=÷Üs>ŸåЮ¬¬À…;55ðÉ{ÙË^Ÿh4Ê'Ñ ÍUž~úéF£Ñl6ÿüÏÿ¼Ñh€w"¾uº`0øË¿ü˨øŒÅb È‘ DD‰DÒ<Àix\‘׋Åà7^^^Dÿ2Ü «^M$p®¶Z­J¥‚6 H½¯®®Â}S"BJ0!q ™ÆL)©U­V ŠB@tpPÈÍop*ÝG.ð©ü«œUozï#æþ¦Ç©嬿3A}¡ªÍ  IDATr!ŠÚaè¨ÕjµNŸ>fË ^333èX MvG þ1¶ÇtáÁWWWçææšÍ&ÊNB¡Ðµ×^›J¥F(í»îºëÂá0 CQj‚ŠÔÀi ÀN¥R­Vë/ÿò/ѰñK"L"ç—~é—À¡ÞNDããã¿ø‹¿ˆ>ÕKKK©T ˆ$c­ÁX×î`0øº×½¿kkkKKKp±–J¥d29>>žÉd@¬Q‹‰P+_!‰Döïß Q-êóù>ùÉO2É@ÈÖjµùùy/Sô¸ ¸¼Ùõ—%{3_±å+c×Qæôüæ†îeÛ-Ç[uÁÞç¢ë¤xŸ –;ÌVWW'&&ªÕ*ô Ž?ÎÚ†€Z5 8!¡Šà÷û———ÿå_þ¥Ñh¤R)G¢cccðC‚¢²ÙlÞqǨ…O U¯×?ÿùÏÃOËÚ› ÝD  á°l·Û³³³HäkDÞ Úùýþ‡zÅ!ð·ÛíÅÅÅï}ï{Íf“ˆÐptbb¢R©d28‘"‹Å¦§§Ïœ9366öÌ3Ïd2\RåÔl6á­Åu&“I$è2¼\XX@'ð'N€¼BŸöÈ‘#p/Q*•5gÚô›ÎÞܘƌ3fl“À‰—ˆVÂiX[*F»ÝFl²T*¥R)ÐAtÖL¥Rhø…„¨ëÁ‹ bǰ¬®®‹Å@ €ˆ#¾emm-‘HàHxAAX"òíÙ³z ð¯âTs"Ö‡*®DE‹Åb4ÅMAÀ_GD{÷î=uêBžóóórl#Úí6¶xïBÃj `|ü~ÿ®]»ÆÇÇÑ€ )ÁÅbÍU´ƒ{œš>»j›È˜1cÆúb—_~9òz *Rˆ$ÕD"Ç‘:‹â t;AQãøø8z‚ÁàÒÒº]²*%‡Ã@;Ð2$ÜÂÉÉÊFWWWƒÁàÂÂÊ1‰ÒµˆhÖj58„™ìN*•B˜bëÈÙЀR’_ŒF£Õcx‰Ð©Ïç;~üx¥R©×ëår±Uø{ñ~| þçR©„Ú*سÏç›››Cc2ø´!éŽ=B­¸°­N#Yb̘1c}±@ pìØ1´Bz&“)•JPf¯×ëµZ )?€.H°"yöìYäû±˜ëîÝ»:X‚[… ‰Á`f,//£¡X³ÙWÃa—_~9S…çÚ¶D„J¤¡‚z¢BzôËËË“““7Üpúcº …„Ìat#¢~ô£­V %4™LáU$Ó‚‚C¨\.CíÂ]à´Ð¶E¬”uÏ^\\Ä&rð¸ tmÌ{™ÓsàvôèQ3f‚ŒÛ¨ÍÎΦR)¤˜‚½•Ëåt:V$L LUT(B6ö-oyËßýÝß1õZ(¾V*•çž{Ža$ïEÈAÄz½ Fo²V«t ƒÇ‡*T„–@ €¤ìЛzuuõܹsèz šÛn·«Õê<)AÔ–  2u‰jLÿàþ`zzznny¶ØI@°Õj½â¯xòÉ'Ñ>ìܹs“““?Y¡„Æœz`WˆX,tˆð‰ˆéøø8Ú“àÜz3Ý€Í3Öã„×"®pH†B!ôñ@¾\H«YXX@_I(Á~ûÛß&¢jµ zšN§«Ùlöĉ(ê@¿h@ ˆÙ4 kàŽ,T¹gÏžùùyäÔ æjår¹R©LNNV*H € ¢Ôn^¤ïÆb±jµº¼¼ ø[#ôûý‹‹‹h7íóùJ¥î¨Õj}š‰ä=ÿüólL@ˆ¡Ò€ +˜1®iDè× Æx‚ŒB ÚîPèÅîáÀsss p6³•ÆòÍ™ 2&0:vÚAˆ T*Á£Èzr,‘‰DàEЮT*ÒE£Q$þÌÎΜ@ÂÐq߈â–Z­–H$Âá0Ê<öíÛ÷ / r‰o@ÚíÛ·ï¹çžƒ¦n£Ñ…B@ ´ -‹‰Dbff"´H¯õûý¨§l4+++ûöí;sæ Ú¶ Þ±Räû@H߈Ð,dXj0o\!´ï#‘JBÑO ê»\`{ ¸HS{á…Âá0ZÁà4KψÚÑ£GG´Ìø]°†¼Vôüf ×µˆG")…•Åb1™L.--A¯gjjjvv–)õxp8~! ¿¼¼ l.—Ë ¬“““ˆ†Âoyüøñjµ:>>ð†ê<®HZXXˆÅbÈËe¤“ˆà#Ü‚ /,,À ï(+¸œ››[YYYZZ‚âÍÊÊÊž={ÐA¥ÕjÍḬ̀ô%TàPÑq¬^¯ïß¿ii) ØL&ƒ`$Raá­…"Žõz:ò¨€¬×ëP΃ߑѕ••©©)O½^ß·oÈÜÒÒ|› ø+R^'&&Ðÿ„ª²pk¸NêÄáØ € ãb0@>œú(ƒAD²>ø`:žŸŸÇãµZmß¾}ˆÔ‚¿ò•¯.¢ôsÿþýðƒ@³+á¢îÖÝUk4 ¼ŒÉGIîò(¼©ëE#_¡÷Sm£‡a¤&H9º‰P6Ýìa®ÍvØÚÚrJŸCÜï8p`vv±:Ôw"XX©T@@ÛíöÊÊÊòòr±Xl4ét|¹£àXp`2ÚGDP»}ÉK^òôÓO#P ÇæÂ ò…^%…㉸±X IL333Àr„áUFf½^‡Â‘ á‡¨'Š/A},•J¨‰D‚.ŠJƒÁ h%k^†^.Éd.\tIc¹H?úјôR»Ý>{ö,:É )Æ-â ãÜá&÷ Öµ9ëÚKµë©ŒÚ{°ÝµÓ¸ @ óâÒÞËùmGCxÔ ýŸWívûÌ™3èïÂG–"„€‚œ@3µ¼E0 ^sÍ5@_P4V©‰P(Ò‘~P¦è~æ3ŸAjJ\jEm Î?s$4ö åS¯×'''×ÖÖfgg‘ )’xQßràÀü¨333@MÔ¤®®®¾øâ‹Éd­ª«Õj¹\+edêHq‡ÏšAìu2™„êl¡«à19È¿Ñå€oÈ wÏP¶ÔŽw9r!I¬‡Ìf¼|]×#uýj\:$› êasã>€^ÚY VºêÅƹ¬ÑhÀe ùYô¬ž™™P¡ –(@„«“©ß!q]©¡+„ª$¦V*è|ûÛßFXôMozÀoee)<ÀÚP(tçw"op»¶¶vÏ=÷ 5Ô¶V«}+•   øFQ‚Hm,‹ÇãÑhtnn¸ I˲À×ÖÖÐPåøñã¬;&ÊL f¢}Œé2ï.b½‰D*zàÄÀZ >„NÅ@" ÑhÔãÇ¿Ñ%›ßÒzÙó²7(Ýî»ã-ïâ$l;¼4óxªmç˜Ý^d´£j&hgJ0ŸÐžmµZW^y% ?>øÁüP†ˆLW¤ !4ˆã§§§Óét±XdÈÔ …H‰D¹¦û·{ñÅIE'“[n¹µ%p¢¶ÛmôÄFµL»ÝžœœŸCª-¾¾ŠÅ" ª¹ð©F"°[8Tï¿ÿ~$ñŽƒ•¶Ûm@>v¡Pnj¤£7ÄoáŽÅb¨„‰Ç㸯z½Ž®¢È÷ ƒ@ÜH$ràÀö-ét:‘H@ãå+ÃvÕvu˜ˆÇã1ˆÇãD411j ƒÐ|³+++HO…šy‘HdÏž=KKKp–B´obb" ÍÏÏC`·ƒ\_ð±±1ôZA- + EžÀá{©Ó€ ‘Kô¯%"F‚—Èœ‚÷é¾ø–@ p×]waÀçççG®ŽS·"lGÞ)¬\Ûno¼y#2æòÞQð0˜¼ 1KK¥„‰Dâܹs~¿~~`‰ÊZ­‘9bBßgïÞ½5wd«ÆwÞ ¹Z„*‘_*‹žZ­†dŸ¥¥%6ê$¬Öj5hÇÃK±¿F£Q.—S©òránE±i"‘@·/œ*Nã® r} <}út4ö>Ñ‚ ŠºL”·®®®ÞrË-È* ƒgΜþ ãÅââbµZ­V«èʉŽÙ,Ћq†Pð“ÿÍó D²KjËãO;À)Œž÷7»žJ`Bb7A}¡ªü Íoj'´ËÃáp&“U\MMM­®®¦Óé`0º±±±t:ìPÔe3^|ñE¨ÖAHUÿsss¥R©X,6›M|*‰ »)©€¨L&ó™Ï|&‹ÝrË-pl"6 ,Ê9àS…(œœ¸Nh °:(öQ§À† ÏF"\"‘ˆF£-d­®®¦R)€1g@&"©H/ªV«™L& ~úÓŸFn0¨'ŠPˆ(•I$ÈL&"æ|Ò£ù rƒA[»ZÐã* ü7ôZùÞÖ?lmáôüæ†îeÛÍÚV]pϼ—ß”ûy Xî0ƒÈÜÊÊJ±XDh¾YFû ”T•ˆ&''kµÚ_ýÕ_½ùÍo†l:þ„Ö•@e8]›ÍæÌÌ ú|ÕAï¶Ûn ôG9žÉÉIVñ f9>>>??-=à7\ÊLÎaDdq¨+ýD~S©T‚ÿ6 ^ýõú§ŠÖx<‰ûE0–„8n±XEìW…qƒòüÏh— U^ŒÊTÐ$‰H'„«ÖPcÆŒëÁhžuùå—/..¢¹“)G†N<Gt´ ]ÀÚíö;Þñމ‰ à Ó=1E<|.‹%“Ét: áxVä Áõ ¹;$ö={öÀO ‰äâ×}>_&“a„ßÎÚœÿÁ ±YÜQ<_YY¹ï¾ûˆ¹H¨Šzyy¹Z­"ý'£É S{€fo,K§ÓècŠT)´[A:D+++è)†}$Ðò„u$€ÓxŒ3f¬C—’ÅÅÅ@ ðŸÿùŸ@àg~æg@Â|>_­VCÎŽÏç«V«P6Æ %‹-˜+÷¬V«hê hA8“ˆªÕªßïŸE•' å((ÒH¥RÈÖ¦.--!ùÑDV<ŠÝF£nb¨KA'NÀÝZ­V¡g›N§§§§§§§¡£ Lϰ@à ½h½‰Æ&HÍEoj$%!«ƒy^FLAÁ‘R‹êOørqã¸wÃxìÇ9Œä m=k̘1c[bÍf3‹±–¡PèûßÿþwÞ b‹ÅΞ=KDèçxÒ@E“P‡TÈåÄÄD,#"”lbYN§ÓËËËW\qÄŽ\üõ0,–955U«Õp`“ ‘ÀlÀÛ«^õ*héMLL õ}1¡¢033çm£Ñ@¥)¾¡ÓD"> *¸#ÔþàïÅŰ =Òˆ K„<)À$T“pN¤PµZ-Gq¿H÷õä 0Oç íèÑ£fÌ3¶Q;räÈ-·ÜBDè² âƒ*É]»v:u nØd29;;‹$ d±"(ˆœ[4¸N¥Rº$“Ér¹ G%ºˆÄb±Ÿüä'ñx|aaù¥år9C*í(J‰ÅbÈŒEÝ !agii ³à—=öhêõ:Zµ †òx@àꫯþáˆ*UôQam®±{€À\ÖPB@.=øùŸÿùüÇd(>99‰kƒn0‹AêÊ´ Å ªè9Þ j€sëÍt6dÌXvÇw ¦èóù&&&ï:??ìÙ………h4 ï"RoX€*¬ðÇ"N‰ŠI$þŒAQU%à¦PÑÛ»w/ÚÀã iµZÅù›Í&\©À'\$®@&\ ‚ hœIDápøöÛoÿÈG>Òh4fgg@µZžžÞ¿ÿÌÌÌÚÚÚ“O>IDHsEºðàÈÅIÊå2ò›œðúÂMòùÊØjZЭÞT`:Bãl¹\î¯ÿú¯‘ ¢ ½øâ‹ßð†7üÅ_üE³Ùœ˜˜€º:⦬ø9GPKصk.8Cx)q@¯P(víÚµ¸¸ˆìÈ5à–ádF OˆÍ¢'ªnÐrðP"|á…À€!+¯r</‹È.‹…3™íˆ Æ Dµ pš¥gtíèÑ£#Zf‚F|‚.XT«UȵCš•iÑù|¾}ûöA|ÁÔ;ï¼3 ¢Èp…fdLZèÛßþ6ÊZsÅí°"α±±T*…k­T*@bY¢ÈýÂR©â‘L Ïs$Á ßwÜqØ$*d¼eG¼U1Íf®iøÀ‘N…‹GÔö0Ài̘1cÛ˜q¢ƒâ—(¦„uœ(ɯBÆ,ȪMfff@þà“„£1Å`08==}òäI"B‡¨àêÀ½@Å % @œœÕ ƒŸúÔ§.»ì2–vËÔ|@|]\\âˆòÀ%»²²rðàAˆÀç<11P+½òÊ+‰rBÐF^Bª~ív»\.Ÿ={–ñ]„rÁÙ‚=£) b·ñx¼^¯c”0D`Õ(/ÖÝU«T¦ÎsÃuÿnÕí t””w¡›;y`·p–7zSúà–Ü ËP+ðþ¦±`p½"¿tmm $ȳGDÓ$㌕Ëeˆ¡Š||n[ î¹sç ºÎè®]»Ð«„;¿Do/8EÑ®M"ª×ëÀà7¿ùÍ_ýêWQï>Ûp½²8+Rd—––‚Á ÜÂgÎÏϺ ò2ŠÓL]¨Z­þèG?B·là@FÌ88%ŽÁ72Ï6ês°…BµZm||uœ¥R©R© ¤CН÷œ^çðE Ñ·kÑiÛýwÕUÎPy³^Z^¨ìT±Æ®Ï¶òïoÛÖh4TPU…DÜÊÊJ&“YZZQ‘Âùý~¨@®Ùl¢š_Žår9”K¢€‰Bpx–J%dÖ AÍ w.ß›ì«_ý*RaÄpÀémhõé8‡Q‡ ƒz½þñ|Ïž=T&<‹ne~¿ÿ§~ê§ÐÝ yF±X !Þ‹.º@FñY|0"1×V«µgÏr {µZEæ’§Æèk†Ä–¢ŸÀ©\¯…r/$þM¹Õ†÷þƒXÐåž]/ÏËM Ó¼‹Ð¦ÃåS#ÂØd°9÷÷7ú€36‚‰DÀœøâEd«HXB â¨E hEF¯¼òJDøUûðÃ×j5&¿°AK8N&“µZ /˜€Ô…ˆ¨ÙlÎÏÏCÿqJðÝÝ»wßtÓMHðI¥R¨àCÉ ò~ƒÁà»Þõ.H D£ÑÛo¿ pÏ"é7 ãñøîÝ»‘у<)5‰Ù¼LG Å£FÃï÷§Ó饥%„u¡Ø‡H§ßïÿæ7¿ ð¾êª«žzê)@5” 4<àÜFKù‚šÊȺ½jT ØM{ðÁ‡üßúÖ·Í‹„#ÄwÛí6ªhÐJ ÉGñ™û›u IDATx|~~DÁZ¸¯™,‚šPŠðù|ÇŽËd2¨]–{÷Óö8aâ35¼PáH¥+Øý€~­³Ê/Ü· ØlÓ»cs¤ŒqŽò ööð_˜ê…lf6‡oø‡ØàtnÊïxÿk×Ç¢ïÏKvÉFo|ÈIR=O—é_éà¶m±&v½xïoÛf:ÅŽ¬‘wcÛ›4Ø0¶S͈ìà4f¬ÿ¤Íx)íH»öÚkMӜƌ ;Í 3fÌçN3¨0d̘1œÆ6`&Pa&Ș1c8y2¨0d̘±g¦‘µ1cÆŒ3¶ Ɖ~߯Œ3f̘1OÀyÏ=÷˜A1f̘1cÆœ6¡Îk¯½Ö 1cÆŒ3Æ,N¿û¶¯h“FÃ[‹”QóæUm÷KÕ]ü–W‰`¹ÆpÛMºùA™ëßF—Ç[Ðãqô£G2â;:I£yUÛýRÝ/~ ýèL´ÆpÛMºùA™ëßv—ÇÌdÕ3f̘1c0œÆŒ3f̘NcÆŒ3f̧1cÆŒ3¶å¶YÉ=ÖÔ †NO4bm+Ø%ñ×¶U×9²]$·i®‡~˜ˆÞúÖ·v}ÓØ…ðÓvnÔjZÌöw”7žÁ jšGáRÍZ33il;šÌÏ8AÉd2:¢ÉóÑ>Ê/’/I žìâ‡E.¬—¿l'(°é¦R.þzø÷…×Cž}™e²×ò‹!<.ó«›ô®ƒ9ä_͆¦r~æÞ¯MùKÐoßåärX×ÅaÐÛ\/«Ps1œ5Vùí}ºÞcœì»uÁ.Qè ÿEÊGÖûÅ“ä z|z›JM•׉åž_ú•ã?œ»{øá‡yÈÜÐ_û5†ìf½<–Ìáÿj¼OåˆüÌ7zmCø¹¹ÿ‚Ü(÷+ßò£‡¹Ä5lôÛû8t;?9h« Q9©ú”nc5Ì[ñ`4ÍJÍs»í<ÞÂr#Ͼî¯[þ£Þü% á¾¼|ÅF¯as±¡UÈ}¿8R {/)8œ_æÐ–€mg#{ÙJöyLÊvܨõ¼8zû®ó¸í&zhðsáü6ôDm÷å4¸cÖ‘\°à‡qŒFÕ6vŠ\°[7æ*t ö{yLV‹ù-x¢vÀ ÉUËðcø_´-6Ëüe ®ï:„Ù\ð²‡íÅöš¼Üè¬máÏ|ûþFóF¼¯B쎶–kzy<ú8Ôþ! ý GSùEüÄw}2=ʯÏÆF‡×;ïòÝ !oÖû/V hÊÇrË'Ýûå¹?#ò3W~ûˆŒv Ôˆ/#øl{ùö>òàæ¯Ux­|sKº|IÊßÕ¯ÍËø  Ý¿±·¿çÊRòéþæðŸ@÷7·j{»f÷ë… Þò«õø¥ýú¡mùš0"‹•—‹ì×É=cÆŒÛ焇mj83flض]"5Æ”4C`̘1c[…ƶãPÆi̘1cÆŒà4f̘1cÆcjWíÑ£GGäúFçJFÿª¶û¥Ê–N§Íš 6—zá\ÿv^ßk¯yçÛ¿÷Ĺb­´øêôµ×^kvÆŒ3fÌ¿‰÷m_‰gfO/ü׿W­1cÆŒ3¶ *¡uß´´´Dv¾ á+úu‘ÛÝáÏĈõÎx`.»ØI7bînGÞ]àT·I;zô(s÷ýäCûŠþ^äöõЧÓi6Â#;Ô;ã¹@îb'݈¹»|wÌŒ«Ö˜1cƌۀà4f̘1cÆ p3f̘1c83f̘±-· W«¶me¡›ß›°ïZˆÊÓö|Í]?²îBn¹Mçb@3²3æb~;æî”7²³ï®_¿/Ã87þ¾F8Í5Ùˆóaç6\üyq‘îù~ü_»ÞÅV-C»‹ gf.¶ê.†“´UÓ±cîÎåSý팇ð‚NâG³ëȺ<ÐÜÝ÷zÌ&÷x©ƒÎqô] '¡f8s1 ;æ]ì¤éØÁÛom¤ÂMÞ©qÕ3f̘1c83f̘1œÆŒ3f̘NcÆŒ3f̧1cÆŒ3¶CMU{ôèÑÁ}å@O>´¯Ø¼¥Óéðm‹¡6wanÄܹ»>šïµ×¼óí‡ß{â\±VZ|uzáÚk¯5» cÆŒ3fŒç9ï¾í+±ñÌìÉã…ÿú÷àŽ¤AÆŒ3fÌØ€LÎ{î¹Ç Š1cÆŒ3æ´‰õ—¯½æ·?ôÏ¿ýÙ¿=üÉ/þóŸ×ÆîöÚvþßÖ |\>Øîöí]ÿ¹Q³=Ÿ¿;›¨À½)h.’½(8³7rƒ¶‡WÞWAsŒÝí0ùSöF¦ÀvžÙÖ?ò·»‚Ëؽ>ŸùšmÕÔëf_û]mΈÌæ?óßÿ×n·òË¿ýÙ¿}Ç?ÿÚkÞé÷¼ŽXÜr`9ßçÍÒ¿ ïXª¯.°÷ÃTלºÁ³‹Yܹ€¨Ý9Ìêü—í¼Ès8juþŸw®ªò=f¹ÿoÔ,ç© ³[È9ï /²ÎÕßÒŒ^Vš}ŒsÒ#QpEw›;³% ¿ÉKÐb;Ÿº‚tñÊ+´TÛÛuŸa«>e;¿¨à¼~6büè ûKœ¼4†›Üÿ3fl‹\µú5Z^âEô S½I³8±‰rÜjÂÖ¬ȹØñÀ°þ‘&E5>RÐ’-„ÏòËtW¶¤Ñ°¤¥œÁ•uˆž:FW©Æ¿róÒw ¯­Î8ç ”å`PÊßTNs ä:Yò†‰½“Õj×y‘Ç9Ë/ l^ER³šœíºÕsÙÀ)0†©¹0M7é!ç§Ø|å¥3dÇXܤ í¿þë©h4JD333?þ8½ð DT©TpÀêê*Åb±õK³ÉŸ!‘H,//³¼H¥RDtÕUWÑÁƒ‰hnnîÇ?þ1O¹\¾H¶P(„õzÝå¯Âkf­V /|>ŸüWáz`cccºÆãñýû÷Ñ+^ñ "ššš"¢¥¥¥þð‡DôÜsÏQ£ÑPÞH<g¯«Õ*ÿíáp˜yX©T:¿°ƒî÷¨4vãüÇåó` Ø´ÊÂk‹Çã¸fvÎééi"ªÕjìvØ1ì«ùgƒü‘Â7ê ¿øâ‹1 W_}5Û™™"züñÇOœ8yÁSÍîK÷kkkòc ùâñcφ|<å‘HD˜÷K.¹äàÁƒÿã\³!à´K¿¥_ªÎÐùÊ%Ïî¬Yélyi‘%'ÈK¡A³z¤´$°œßž—ÈM¾s˜­‡þ‹ø³‘óMê ¦r NFhIà'ÀOp-œ>뀬†±YÜ_- À`cÄ ÿÙœæqʪæÎÖ{2ò®;ÝŒ{ôg‡“ëNbå›Rk9‡T˜\,³*/¸xwÃb‡5‘Y2™dËV(â‹Å.ºè""ºôÒK‰èÀ'NœØµkW¡PP¬_Xhjµš;vŽ‚±]ÅÙ³gÙ›>ŸӃ̷³½›„mÖ}Ë(…KrÇ­±ùùy"zöÙgñâáÄVcnn®^¯ckØGà =ÎÄív›ˆŠÅâ³Ï>K¤N·•B穳9éW4ÙÅDÛéÀÌKçÜ‹÷ïÉ«­?°r´¤Vö©fU·ãpý…é0Žïx’³*¿qV…mÀç¥E¼à$@YU¸Ñêæ‡Tsš0›åœ}ÞÁˆd¾Ê,w…9žŠe‡ÒS­Ü…ØËL‘ÿ K wûÚ®Oû†Â®–ói”7sÂ÷f5Þuþi·]‚»víšœœœœœœššJ&“Éd2ÇãñD"Áo±yÈL&“±X,‹áȾ¯ƒµZ­V«­v, ™’nÊX"¿àm«yµZåi™@7£Ñè†VóñŽ “šÍf˜³P(„}Rˆ³V«µÌÞd÷Î@ãìbðþ‰ gýú¢DÇ~ rÕÚX*t~çY=â kŸ—ݽìŸì‹Ù?¡¥â¯Y•›Q YâŠß윤IQ'ÿc'Ïy^Kuar¬Q˜®»’ü«¶Ó šÓ¸aÓÔ¤‡8"ÎÇh³ÜÄe%ß~V5þ9½?€ôoÚNG¨­ß9Ù®Žh/s¡| Üü¼d¥''«ÂiKráÑo !\XØ@8Þ$©¨aMgnCžf1xãqd®ÕjÁˆÿ3`XXXà™·ì¡˜˜ð‚ýƒ0l†Îœ9ÓÛâÎü›Á†"7ÿ]Âð`|òäIŒ*¦¯^¯ãŸx>AûB¡ïŽÞ¨ÇÛ»%“I¥h]©Tt_t]Gt Mä£)þÚ ª8hAò7Šër˜êä“WÙ®'/¦‹Ñ’ÄiHã ¶<ø®Yö‡$²Ò{¹!Ü[<œ9ÍÞÅö@ijÎkÓÑqKz$ Î;âç7«!y–jdòì{;Ññ¼æF.é‰ì÷ø¨Xúç_éÛpñyØšÓæ¥\ÜY—g{qq¡š¹¹9üÔáïZ^^c¤ëN,éAü’­AÖÂÞ–È•œ¥Zá‰å=7îì–ˆè?þã?@ƒøp]íØ±cDtúôiÄœÿÐ*3td6ï;ìõÖB…°€ÊæbÈ'Âr ,‰F£@œm aE t|—¡Œ43PÁ•ãÉAÜŽm§*•J«ÕÛë{pÑÝàÞÀµ•Ëeïô²…ƒ_Sä$¢õœX[³ß·UgÎj‰ü_ÝÙ•¥Y7“Õ;¥- XIÔ”Y›C}/ÄZ™$,ârÝ…õ¹Ì^KuU¤IxñÂã]2–…kÖͦK$2ǕܡîlÕ…ÒYÞüJ—ÇßK­”ì‡÷x¢N"¢Ò°ŒîÝ»÷²Ë.c„éܹsDôÄO(½µ`!øÿ©S§Üýºƒ¦€ö&{Ž+@uWT%ÝV¯×Ù`*§¡Ê#Ãá°ðOþy³2´O7Ùþ‰¿Fµ7Lõ«ûìsÏ=÷ÜsÏõP°¸QóûýA•­qVï/(Øè{gŒ3v~¾x`p¥)Œ ×jµ9ÎpÙCs_÷‘L³Ê“Mîlp6ÌÔ€8œ‹1êé~XoOEo,<ؽ‘D1uUbJ'ã#+Ñ)åùóÎú„¬žr¹;ͲîEæ—Ê$ÁË'«:XN•5A°-ï?ù uq2÷"“‚ž“Š3ézáªrÒ–b=ñª“õ*„®s— «’ˆ[šqÈzØ)ËQHù^Rwm2±Ö%¹T:Éy¹9MDÖÖÈk ÜÀGAùl ž½‚ìõ0Fzðûýl‘%§¶Ž@Ý™fÜ”§àˆ­V‹§¡Ã)Já°+—Ý(ï™U÷Ñ=º\Øá 0{£ØÔ¯Pº%˜4é6Yç*礈¡0æËQå˜øEî¨é¥è‚¼Å å,Éëw–&jeqÛKUÅïRk¨°Ÿ¥þ.ýXåvv)§Qž¿ IrfwÁ'­ï':‡œã™×«ºÔƒ$-3Üv•>.¨Bžä„(y?ä±HÎéå1+e9RØ:¶bŽÂTçþDÜά‹û<¹H‘ý‰·³gÏÂ;;; ák±@ƒA@&sÆŸQñ‚Ý¿„õP*3PV¡Æ¸5›M$£òɈÒï'¤Ìðï÷ûùüXœg@ñHœ¶\.÷…í-›¦†OÏýD"ÑU ²+H]÷ã¶¢`Šü”\‡¯^ ¢lÓ)#ÇíºÂ¤­©pÿ”\–§,Ô³;K›¥ÙCð2¼ºµ;«r±ê6ë'w.¬ç‰Èwé'ž¥Ç!Tìúñ’ Ý! ¨‚yž_ jÊÌRYÈ¢àZ¨CªM€Žë–°ñ•׃´ ÅW–?e5TÕ&‡¢²ˆ‚1ç/O™µîÉ©HÝ4c7oüÚÊV–-/õë9«HWZÓ_:Ò«V«>ŸOXÍå+  ߌ@ó+A‘Q! ±¿Òæ¤û¼ÊûHòGÊÚX[žôàÑò˜a¬“¼óý×é‚/àËêy€K]¿‹g²ë‘–6$-aäZøhIÃB*T°U9,îr²ëðé‚@QIãò®^Max³NÖh9½ˆJ/®ƒ I„É– @åLé¼äž•wsÎ:N[ÒÖ±ôSSpÆ>™Æº2KöCx‘¡pw(+_³®®õ¬D:•ï{òXòŒG`ˆ*c?Õj„‰×m5oc‹+µR‡A‰©Œ7Œ²¦+¦ÊápxKfÒ}òûx„„?±]^À“Áû6ÖaÆ)VÀ¼27­&ˆÅËÌÞÙC>¨Y&rò>ZSF²¾pY'$2˜¶´"øänJB\‡§såyq» ¹0º†9ÍÍÊXKR 7«‘Wu/1”_§ÿGúÜQ÷½©qyô,½§÷üVÆÉ¥\'P È4ZÎüjA—-§òÖæßCß~Pq¥Z‚ËÈ{ÍP~PxHøJè¼”'ekÂV×Îb2o¤Fr\6æŸûìç„w>ô»Ú$CêÁC;jÆFØ]f4FL+NölIÖ+Cž\Ž”ƒA~ÄF•ß---á}pë@ ÀBÚ‚/}a<Ü ƒF£/lUÇ8³*‡›ƒñt9¶äåËuVF›ÈZ‡LŸíH9igÉÇwŽ,htb-oM¹º¬wc˜KFî>jžØå5Èš×gt½H—ýS¤# ¹-M†³¥)ƒ±¥áÍi:uä^å,çF¶TœÕæR£-Nç(ë$¦.O¹V¤Øªv:DDÒuÒËÎä¬4Å'¶ô Òðo ó"VîNÅæÃÍõÑ~iÕbõgh ˆ½ëλðÏÝú1âB¤wöî›~ç&ÁË7²ä'ÉÊT¦_¾Ywï4[yyÁðCŽ+¿¨7hw¯v`Ü•·J¥’ÍfÙ¥BV—$y\T’²†ôýž„(”RÏÅ_§x9QÅâôW]”oå’A9ÇÒj*¶5äLâµõ¾h%.²@^u=ê0¤„šòøèX%Å m–Ûú†£òû.ù´yÉ™Lª&¯¶$°žÕ‡\<9•Wé/áÿäØ4)ŠYkzà.TÏ=#_€LÁnú›î½ç^†DôÀýÑoþÖoz¿á”‚ììMeÍe×åž}„¯¯\.T^ÒæÞ]a‰ÍÅÄÄÿhÁ«äß‚çVçæ´±lä®N‚~eW i9³ôí,h=LÕvž¡}þœ?ëûçïÒQߤYòµ³çañÙÒjXPÅ«ø¯Ëj8.€ª ÜòàšÓ¯žY½ IK¡ìì•_Ëê6Š€¨¤ƒ/§ñ£!𹂞3)ç—¤T¦ן\‰ü·ë¼ JŸsNãd¶5ZQÂ#‘Séç$¢Ù•ôg=xe•’¤¯½‘ÓŒm•ž­-í;-™qŽueK.öùÏ}žÿç‘;ŽÈÇ?vëÇŽÜsäc·~¬ÕjɨÉV(ïEì#ƒ‹Ø>Ãá0ȃU^•y缡KÔ€ªHÏœ9C\'çžÏS,eª=ëêWðެìH¥{cËMöT«)e6;JoÖzAz;ë€@ŸM\ÛwÛ@ÍO=Ïê¡fNf¤Œ¬JiOèé˜sÕƒ-¨ÎÏwš”kü勱]ÛBâB¤üÇeàG‘RMJN3ìåºĵ“”ý®–ê~³úŠ9"«œ,åΆ:<¯ Í`ΩuÀ_¿P’•ˆ$ hk’]äú”? yØEºwEµTÙa9þOCKG+…¦•²\œÒî»÷> æG~ï#DtÛ§n»ó®;y•ÕŽÜq$‘H¼ïýï{ßûß7ÌÅh£«|¼c.­Iûn‚Ò„SŠòSÆjíyµ?öqˆ”J¥R©4üÌ ÖI´Ê™ÒîQŽ`ø†AîYìMßÙTw°ïµ×¼óí‡ß{â\±VZ|uzáƒü`·}·²,Ò^g™À¿¶õ³¾þnûªï´ÑÖá³muŸ:×bW³]aº¾ioÄæ”×ÑáéÚ¶44EÔe5ÔÍã€Mf²ª» •ŽŽ?9#.ž ÚˆÜvföz‘~õ’ããò ëfÊöðq/æRq+d (NΧr uñðáwS'åR }Bçg2ñâ× ßuç]·}ê¶Û>y›üu‚çöÈGnþÈÍXâù, wpe¾»þ#J¯,^"‘àÉ–Rï†-gŒÎâ,ôÊøŸò„îôHy;JSúŠY V9Vüv‡)9LNN²7Y€Ö]Ÿ§Åìvøû"¹òÄá ƒ /(ëd"ÜxW¢É.‰ßÙ°{t¿´(@GwDT: ”ÊÊgƒmz„¬{gˆÚmz÷m_‰gfO/ü׿w•“ÐiÆæ®¶E[ÒCa:ŒàåwÛÙwø¾þ]õËôõS´ïÁöuìàcë)µ¹ ¡÷ÔȔW•czñHó$O×G…¤"„œÆQ©«eÔÉí š4YµºÚÍ<‡I9 9p”Ó¶µ>d‹ÈnÒ¬TÄÉלTø—åǸšK vê6%ºÀ09u‘ÞkJ® VI_¼QÔäu3ndîÆíNÿs’ú©õÇ€š7Þt#V“»î¼ë#¿÷‘Ûî¼íÞûîššÂ2ú®_CÊÛï¸]ÐâÙc¨‰¶Ýn I’¼1¿+@ ÿW*žü)s,jÊUØã½{÷N‹€,±ÁõèºÓànyuu‡ñÂÈìv¼oGFÜÜ“ƒt˜”s D;K>:DO=Œ¨ÙŽ"xùß×ÿªýËDt;¿@NP;ÛI ’áًʨíaTþU.‚Tö•TsM.WICy_¥CoO¥#À’¬'@R·N[Ó/Å}'!7‰#wÿ¤S^Yª,æ!î–eÖ¾~¤¤ dk×5©[¶ ;mÏZó–Žùéû‚¹Ôü¸‹'ð©Å¤VÖ,¹yàJå “ìIc‘¼ûî½ï·ßûÛDÔ¤f*•jÞuç]÷ÞwïM7Þ$|êö;nÿø­ÿø­Wf ]æŽÊ›G ÞÏIƒ©KI$›Ì[f™±[Gä)#{ÍqÀJª-Ì)eÉқɚv8$\YfNCJœÑ,Q›ŽÑ#ï+–Ô<ÿÆ•ÊíÆ IDATïS;NDÔlGùž""”©p=°ln¸ûÖžôá+ú(OÈ,)Ó’8oª¸^»öÕ ®ZD–³˜D¸È¼”²›“ÚÅÄ#EØãZ€YÒ`²Õ¹ êÃ¥sŠZúZ K3Sv·Ö’²d¼°q¡&EùŽiÒp¹¨úéb ¶^úQ¸e¥›ÁEÔPxö Ò19×Ïʪ~¹Í·FÑüâŸ|‘ù´öèå—_îóùèJ ƒÿúoÿúúÿöú#wùØ­;rÇ‘»ïº Awßu÷͹¹‚ãwBùŽY^^Æû,Æq2RÈ$lÝYéUÒïû¥Â ÐÚ/y¸U¦³bú„Û~4U™ð3™žžæÿ©„mvw^&ÂßÍqg«Z[+}_¹N½D5-"š&ºŠè7ˆŽÐÔÍôÿRÛGDôkôpÛvÊQd¾b{h2å´][H²¼Í‚†0)Üvª ¹x†É¹t:¾EŨ,W²^‚.GL ªá*è$ïU*@ºæT$ÀË«|ÊÛÌiÆ]°¬å[wÙÒ>I©ÿ è Þéà-¡ Ï&Õwy …vuðÚš}‰åâTÜÌòôècÊo~á¿€@Êî€O¦s6ѱ‘%s|Ê1Ï•à)²¿cË*SžŸuFc'4Zg|ÓoÈøtVeój™äà§š_»í*Çû™Ï4‹ïñ}©J7Ä?ü$]þÿ‰ÞBt98M¿òç÷ýþÝôka߯5i6쫟/è•Ê{H Ò•ÚšÕ0Ë‘0—/UFžrz?§òl‘šcúå•ËY-p95çl*¾…çyyÁyÛ¤‡8<•²Ï¶­W‚e9,μ0Q–ÖViË ZKyéÊùÑÎkü±òÆ.çœkg²0ûÊ`¶íA¿Ðö¶Š¡Tºðî,në‹2ÉEXeˆ½÷¾{ý?íéK_ÊÞAªd£Ñ€«¶R©0ȼéwnjQ‹§ƒÃÇK½-50ïÍdQ•Î@™ÿ­®®‚1þÍßø@{†÷×ÀêšÍ&ngøð&dÃâÒé4® Ort1ÂBFw…7uwÔCuSÁÎ:eefùÿƒíë$jÿÑǾJÿý8Ñ7ˆ^K䣫èöö'ˆ>AD䣿ººí ]ÖFT¹ISb«hœ¥ÇZR…Çrašæ´\š”ôNDÔ¾ˆ|3!\.ø‚žÖ“Ô šïØÊ7ßV:¨-:yy'AÏ;Ok¹ö·ÑN±·à_Ô¤œPûKé†Rf?²7yðÿ<ˆr"ºïÞû˜ûÈëÿÛë‰èÿ¾ðßù«ïdo Œs”íСCÇŽëï9-)”kz³Ù„'™ç+ìMAùajjŠ:¹NýªxàsCí±zQözp…¿áp˜ ?JLƒï«Êx3sŠÀ› Ç8¸i«Õ’3Ñ6ã/ñë¼FMŠ:«/r•%öó¿ðöù|ÚŽ›‘þ~úßé§;®W(gˆtÞ1›?Ï5}¶>SÆîF8ÈIˆ'[ÎI;ÜݼІišÑ£NbŸëÂlne%g©Íåœ|¨àªT®Áê´ó´$)¾Bg4 ÜkråÁ–FëG™v”íÐÍ(?à\²˜­ñÙœ’‹…lÎkmu¾ÂV5Wqé=WPí‡ø0¶³y8qR6Þ2ËïªØ×µÍ59oߥ^È«=øÔ9l…w€šÿëÿ‹ˆ>ô»ÂsËGoÁkÔøƶª²•yÌ áue½cçÕW_Ýó(±¤'´ ˆº)ñ…Êt‰ek©Œ‘l¼H§Óétš½9œã«bÊë/“‚žb8–rÕ N¼œs_ï$>› z€ƒ}v³m¶£D9®ã&O»Ùî|NݶG˜¤n€gwëéhiÊW”¾Íóì>À0Õ‰ œR§qc;‘ÀÖ”dØ*&'Pô¬®€DWó'ÔÒä‰92•$½3–¤} Û…d5÷e©¸ZA<âÈ%ƒ±¼’•PíZ&M•‹ð0g%·mAújþ.ò*`îAR—÷”ç.lc&h‡¾ç7ÞCD¬Žó×à¿ðÇ ›·}ê6á³·|ô–Oÿþ§ñú ô"úÃ?øÃ¾/I@€‡Øh4*ૉŒAçQäjÂm¸k×.È«n#‡êÜÜÜÜÜð²ïr?=lA/—‡mì™\°\ø p¤û>`pÎj_‹Åb±X|ñÅŸþù矞%÷n2âà"€`9=Hë‚ÔbßsÍÕÃtx]ß …Ûöü_}õõ躰­»³KÆ ÷:Á)Ê|wTéÉé-( äYíGç~szzÊ„ÓaÊKQRr0 YΣhkð,Ë?ëZ„c«ŠF,©ë–°²Ëå+¤ª«4"lM£7RÍ…|µB&mV³•‘[‰ñú6w×–ÔŒï&&o/,ºøUAú9¸kuÝáÉÑ]%Œ‚pxüU;™}àúÑ]wÞuÛ' ï·|ô“¬¯õ-½…/AA4H¨õÎ*úÎ?6á°éééééiaåy;õ'.5û#"wΆÌÏ ?c¨n»²¥ÕÍ”ì-䣂=ì‘ ÜŠ#TAt~ü>¢¶ÕôQ˜£ù(Lõf;ÊG:×¹æ:dvÕöSÖï ‘!žÛzèežLÙE–åŠ@lI $v%{-IZ('Õ`3Áµ ’#p©"åÙŠR •`N¢­yîl²H¯Ã滋á‘ÐÍ”­y–´ÚñšÖ¤²»» ª2âÝ–ªàÄêæí·¤@¦­ðœJ¬C¦»Ó>öúÆ›n¼ïOîcZµðÓÞuç]¿÷‘ßcÇäòC¿û!"‹!8÷)»>ê¼(½²^•ï“'OÑêê*r&OŸ>í¾pƱIáÓ’•{ æËu=§¾ ýÈ—ÍËÁËÆÇ5e å]Bž´}­ÜܳN1tžìæ8¨²ÊÐV5¸Us¹6rAˆ#NÙTµ•ºx ¾\Yh© j¢b©:Q »9ÉÖÈIsš½Åùk>DOs<î Ò½¦¿ŠòÙ–l—ªVùÏvÛJVI—^Tà›.˱²¡«Ýúñ[ñâŽÛïàñòsŸýPs£¦ìD­¼`¶¤ví;- ²bµÅ: <~Ãn¼‡8nWã—u6\x6êõ:¯½Î®ÿ'û8ÆÇçÝðx™L&ù¯Dî«;Äöö w­Vcµ›»víêax»§N©,ŒS5ñ±fÔDd?O—¬&úh½‰Òù&bY×ÔÛ•¦&ŸÖÒH¼„7 –._$¬€yAÙ|ó‡×ÖÖ¼ f 7yXêyÝŸ››Ã˜ÔëõA09,ß¼ƒ)HŒa{W¶4ó×ÉÎã®Z0P2^ÏR1oRMåoõqõáµgaÜÿÀgîþ à“%›Ûí6@ÿo4rDM¹¸ƒAÃá0ËRÁz=†4вšª \@¬N€såG”p(äÎT*ïP-£æ€ E®p¥†ÃaìØUŽìFOI‹½§­ê‘“ˆKÓÏéÝ›äÄKÞGg»jÇ+}òar'[ƒJ—¬‹÷RÄ`ÎqZèÖ¦Q^ˆ•í²É ‚ƒ4{L½-pI®Y— <ïWór’‚ijz&Gª9ž­gI]HT¾3¤2ze5ƒãâ{PŠÊÚ’ÅÝ«Oz_½­9³ã{¤°%ù~ù=Gn£ÞZ¶&z/HïûÞÛù°È!ÖÕwºÃ¯æŒ7óñQ¶ZñßÎX5âÇ—ù7  «óàh_×¾’…j%0LMMíÙ³‡¸5€X\žÐ;…wu²çGpD÷Àªû@eƒû·ó{A/MÈ•À)TÇ ‹ÎyñRN¤&ßMÿÓ–\|î¼ÁÅI+,ë9ºÛ¶´xYú–TîA>͇$‘6]›bK#ëj«Üv·B5R¹CÑeÌ’|¹YÉ‹Èwç¶õñfÖýæ!]ž.ƒ“õÉspËŸ_IÅò®½½äôœ¼”B,7]ñ’¶ê¢ÅGú…Ì)KÕüÜæÄÿHåëÎkÀXv­“òjñ³gk~çJhé£U«ÕÍѽ4rÔ1 胵œ#É.~Kü“e61ÈáEØ™„Í æ¢‡!ê­Bcii‰ˆ€}‡jWÆÐá‚/½ôRLžœB¡@DÅbçoJàÍ¡PÈ£DûæM™”uušn9ë7”Iƒ¶ªGD^õ-¤÷\)A<0^†T5s}ÊizFf5̸ ‰¡;Ø!ç±–fåÙHŸm›R8¸rä.I'ÉJ; xJR5òäÁ@ g¶jï’m:üùÂÍa‰dë·Gºm³Ãª­FV?–™ä嬼!p~Vãó°ÑyÕ#¤|DݳlÌÆÆÆ”®üjºàeaU®×Š“F.|ó°-³±-÷Nèl†  ®‰Dò„8ÎŒtêDCñšÍÎÆ‡±‰ë”Ò÷ñ?sæ |à#ØqzCP½²²‚1çAT Á•J…@+;’ŠS¬ž‚sù¥¹Îa–* ÓvCË.±ôŠÞüÒ,`Œ| 9YI‰*JI< 󩲤z¾‚ÄH亻k>dG OrË+Ý¡•[µôç×Óá¾m´ê”kIÕ–’8ù:å`f5NKêäô$€ˆ”R³>ËñuY¢H¸Ha”b¹'á˜uIHñü¶JÈêèC oÊ,ß–žyRÅ5HõÕä¹JwEÝzÕi‚½üË_þòW½êUW^yåž={öìÙƒ¾Í{ÔÛ¡hRI×FoÖ¹ˆ•Úë×ßpýç>û9A%ã7“Éä®]»víÚ…ñ\/­Þx6ïÆ¹DeÛ8v ?"J¥R~ÎjµæšQð Ê6Ä8-ÿ«Î[ÏÆËK:˵ٖK´‰TÜT ж†/òàªìlL’ª¸°曎nYÍ:›—P\GÑ䯗at:µéÎ`I#,[Ž(ë”ü%‰ZÉý˰´4ƒf»ÎC¾ÃÍõ]‚›!/yÅ…¬Ð™DÍ’Ù¹9jgÉg;LJÏä’Œ—$”{ª@œè*Õ“ÉMKSá#ëâºdÆf5Ï­×òªÄc'Hvúî)‘ +++ü_™/ŒÃ›|³ïµíCN7%g±coA¾ëo¸~CÇÏÌÌÈßÈß8«•tØ»ž‰6èÄÂOhÃÆ_ø£/t½e¥‚ß6A:‘‰ZàÀªŸé—¹ ¯K'¯ç. #w‘Ìê÷õ:Bii<¤wÊë—¬¹ê^B àhGüˆi!9ÔÝȵYc×{\¿žjÖr¸<é)h„yå(²»sU–;°T®uŽë’™•Áé‚$¸#«¨+)lNzÇÖcOn=5ÁmUÅ°è‹æ}àÊÆãx¼ ÇÌK ëvi.¢»–þ¡u×d¶]wHý1dK:tØ€”E¬hÅbð HCºr,a¼ ØÂòzÿßÏ^_÷›×¹ŸS©ÄÜAÈÐôf‹‹‹ðCÂÉY,[’‰Ã#1@TðmÈŸB_;…aߌ߾gŸ}ÀIJ¥R_ÿ~W‡’ØIƒïk­Ìä%kAã%“3q,ÉqzX³|[*÷ ;*» \g-æ­ÛP³ âͤ9AO@ *8ýжSòÐÒøù‚Ñ‚ó$ü¸éTd0s–ðL€jå, ê²*6#åÓNÿ|ÒXósŸÐø¥ÀÚ­Ñ!ª8ʤyNò!ܹrv´àjÖùá…I#Ò·"pSÔzGèüŠ#âñë—ñ¨ID_úß_ÚzIް=$‰+—T­¨dB2 ê[Q/ؤè1±Ü>¯o¹åÇõxûYv_M­?S^ß-’å%T¶UœÞ’&¶õÚ79Õ$r›uY Å\KʽBYj^E^󜾲¼U'7˜ Ó4÷ÌèÔÈY±š—\=+–F3RÙOñô:U Ù…õ.¹·k×.V,g €ÂiÏ>û,ò9g(SÑ­;’ 9ßFFÇãq¬¿dAäÁËÝÍÍÍAa®ï~×ÉÉÉÉÉIæ–O$0\Tó"ˆ *”µªÊñ÷‚.=ý*QeP-l•zË~ ºnùºÛ©ÿb¹ÖèÖ_KCjmg:‰¢Ke§Ü‚‡4r%F¤W²õïîbi¤!+¤*LÌI2è$y}Q:Û¹c£kU®P×à|N²Íºr¥¶*Ÿ –çœùQ#¼Ó.á˪:ÌFH¬ ê@¸åŒÍ“j¢••¯.õ3Êg^ÌÊ:{àØ*-$’Ædàöì³ÏV*¬ªˆ±¡ZneeéXg½×ûŽñ<†å(ñ+»Ç”àAHÿ(±¸»¡Ð&ïf…+ü›“““W\qíß¿ÿÄí@ÿ;ßùNß÷I]i· _gݾH K#­©\.cÖÙ¬­5¿+í#©‹“b½8DO9õS ª­½íêkå×¾*€ç%Ä6è²Nlî’ȵPTá:¥’CV nåTk.I‚àyçÁ2¸fUžÃ¬ÞCË{©¨œwÃÊfòÅTvDa¼x•TzésÒÃɜӯ.«%8ªl9Ëùt9`ÏY¦’•¶n…8=$MVŸN>BA'¶CAz˜¹ƒ,å›b_d«*|´Ëo,жÊY<¿âŠ+2™ êÙqäòò2rkkkkkkssssss333‹‹‹‹‹‹ÑÖ`ydà ì{ÖÃòò2N^©T°µ+e˜ &ŠêæFãcœcccø dz• …óccc „²®w¦âÅ}‡r÷­F1IYÄ^3 Þ—¾ô¥DtÉ%—ÑàL1Å1Z­†bðËåòàà É_yÝ﮺Î;|ÆÉX¼Áj!¼g»pYÌK Š|y‚š®åúâDìäcd&!–ósDA88¯9qeþrIbÔ¹Œ:èšǵ—ARZ–¥”™\䬱õ-Gäùå9“Ø×¥³M)HJ„Ä%œÙÑÍÍI–T"¶ŠÖ“QiÀ"²–®àv$ç¯í]ÕIß¼y§è/s!oã5cK’~A}P£÷ä ðÈglyâ«Ú!«†nmF<Eö;m­cãœTéØŠÊØ_Ù™}GÉŽm-\¹Ç½L@w9ë;“Éd2™ééé½{÷îÝ»óèEdÀ ãônýUÛª~áy§u+Ó”Å\ÌMv\Z\,U~V"O¶ÊQIªŽ`ät{*½dGIùà®Ìxršþh¶3<¼^ÅÑ!=Jáò¼F›§K9 IDAT½ ±%¾è3ë æ¤Í‡¬qck¦© dÞ< –8“Rc÷6ƒÌÙƒ¶G²hbN˜”ó-ÒÚH©%—'K´at~H¿ëP9Xß=ðφ¦{¨é,Hñ ]v.qiJòp¹H zMâ©X,&(ƒ»H}Îb±¨Èÿb¥ƒãÊ  ~¿²üß{np±Xbéǰ7 Pp™†B_6àíÞ½›±1Nx:;;‹yÁ]0üãÛ;w¥Ý_>úåÿyíÿì£{@Àå;WwEÞaΘuŽÖAgÖùã—•Í%U[¨4ïÆ5-}‰ˆ‹ÇØöpN¯Ø’V=nsNo*¿æ5õ^â¬$±$wŸc«ÑT«çFÉf7-ÀH•2cÿÿì½k×u&ø¥ð(Ð HPEJ”•RyVFmOØŽõ V±Ý Ïñä˜fŠ™µbÛ0I$AŠQ”LñMH>`º”gCÑÿ8Qaý°±…E´1ëql» ‹*)I‰¦Š„H¢BâÁÜçÞ“ç>2»ºÑ B3sè®®Îʼ™}¿{¾óïT– ƾ’ ‹7´`ÂÙ§îì,šº¢  ;ÀÀËO¦"wê„hLêÚH'ò%2 DÔ((UKÅÉt1*î¾Å³P+Šž²5Ô ‡fh;/šC8-t*tv‹6N:µbÅ ‹ ­×ëÌÇþã?þ#½Hv©~ø!¯;µZͻ OŸ‘‘¯Æò2…—sr¹n1Æ•×T‡2.\๒V´üµœ"މ%¨{U¬”ØfP\¶lýn5ØüóÑÎéµ|`a×ëEM¯M1  šÍ&±µä¹ñ÷ÿ÷Wr‰ÇtD—;ݤ‚î+óaHÃÒ¸$CÉ)=ƒœ,q ò^‘¥mûØ·°ÒÛ„9tö1´0Ö;ƒ™*¾Œ‘ÃìõÆ·ÉÊ[û¼oçgu4'˳CgÛÜ0¹DkrÚ¢ô%)ÙT1A]áäÍš‡¾Ý¡7?½p€‘§µ˜ž:uj)âQù)ìæÕµz_”¿Îg^m¹÷ߘçÃ"JN³;}A<çäŸO¾õÖ[÷}ã>šÛÕ«W„KøgV™ïÅÍtSnßv;­:ÃPß¿ó;¿³°K¸zÌžlÒ¢ŒM­aÂt œ¹ÚÞÝœ¼\®sîÁã„H\aªÉµZeø©™“ãÿ#_«“Ø\^¥cmÛ$<Ûb .ÎInY eÛ—? ©1–g ãx˜[½Ä·e‰¿wZÊ8’ÄW'Z­••¢Åm H‹þT7ß|óÍ7ß\‘çÙ³gß~ûí·ß~›¼K½„eYÆÌXËêu–þ˜kÄDã*\ÇÏž={öìÙsçÎÑœ¿õÖ[o½õõã\/}û;¿ý;´k¹ï÷-NFêôM #7ÉYI¹šçùGÎ )l½^§†bVËîãÒR„’^öpð)™«EÊÌËjãRG"T±µ¯è‡\ÖåÝ#ì#³- GT°d8ºð?v(>ŽØRß®õ|dF0[ˆXµ¡‰Êùy¦×åleð:;˜ØW7énz¼üª[_Ä'fòÀAZC#+¢Ft&N'p“6ÈÙ¿^>lµÏÔ“Ðv±¶s×Îy}Üûï¿òäI[nÙò_ÿþ¿.)k o®A>Õ|§è{Qï./ߣ2Й³‹}Ri0äUœ&Nµídã"³Š#)ÏÆ¾(6vÐ%uS”îj˜èú÷eûŒØlsøÚOZÜ©ÅIZH¨ºþEHõ‚ÛžËÕÁk©Z–ZNJ:hB©«}•¾Sa–Sv3ò5çx=µ«¹×Ò/Ñ»É&tûRˬ‡-må)¡Òþ—Œ™Y žå™]ëqÊ7‘’ ŽËÙã9ÄA£ÅZÅ`¢Ï›ð£-F§OŸ^¬3¿ò3 ãÎ+£’õò tô#Ú÷PÄ àç?ÿ9Í̵×^{öìY¢îûý>ü l¹e €‡¾õÐE7î=úØðÏ€5èCÿîïþŽÎp0XŸ¸fͪ‹]ðS÷ñFœ®§Zb.µñp09LoÞÔ1‡“Ò’¶“Q‹Y¥Y’ E¹í§ËËÖÍÒw¦´'”ɸ:˜¼nÛ÷¹n*Ñ»ºüvdÖkSäËí¡$E9IJ¬PlW2Šp÷·jhc5r“!{ÛÉûtŠÞVaÇ;8iÞÌZ˜U}NÖ²ö´ŽJ¢FiŒ\¤Æ3ô5¦ÖM)lì<ÉnnbNfÅÚ&b©ÛY_þ L•ÐâÆ „F—.]"P¤ÖY)ûtÃŽ›žqõ%AeÐì^ÎRÿôÿ'êÞõ+ Û šuÑ2Öd,÷6¯¦ÁïÁ`ðзðøGžþñî\Núc¹/@AI» ”ìµçÅÐZ¡|Ê‹°œé‚(Fô–*–IRy¥Úå¡vQþ/BÌ ¦:)i²f‘‰OúÛöÕHÀ´÷öeT«°›wéYù¹.ÁàîÚ¦N*Ûˆ¶Áp±Ó4 f8ÍMS}4Ë](î`£æ„¹ºCîr‡"4·Œü$€1ëÞGa¢pïS#!¥¶¦×Úz-Ño»šìµ˜(^n¼bœ+†  Xõ8DórkT¸d~I{)*ÓYqÓJ Æ\Îaw´o(»ºäùš5k–îB¬èí7Þ À#`&’*z©ÒKã»Xƒ˜öÙÙYozÂÊ XLæ2×]ÁQEý©euæÂÃ0JÚjhI†È_ºòQ™º+ƒíÔ¤Îù[u“¡pôËELî¹KyY@ÜöÅÄn„*k$¬™‰8f]G\n<+ƒÅÈüQè«%E‰!NÙF'Ò`ïNkŒnÙM Äà729áÈM?K"×,ù€'øÏê–j¹Ç>;%:móÑrÛe…§‘»ÝíBLÞ5¹¨àƒ>X jtéLæøÈ ËÎÊd^º/â°R¤×^{­÷Ì¥œÕm°%w$t@E"l¡„>vÿ*d\«£ÏŠLùò¹xT‹ØtYG”WqxI?”p§Ö/z}ÞëN¼èfÚʸÖuÁŸëMã¹Ç6ÁÛZ+ô)žd[o¹^ê¤<S3Òvâ¾.yœ6{ε0Öµyà9uX(Qxq#”Ðwþ.3iY&™)FNL §F(ô9Iyû¥ËX-ññü‰ü)ÐÎ ~>GI«"Y–®Æ¦%ˆ¬Ôtí„ÜbYIHg¢aÊy=xV‰^UÃZŒØÀ]¤?¤Šu0PÆ‹b¾²<ÜÕ`ù=$Cëšò,i?ùÉOxkõᇺÌ7ÅkìW­´’Ü÷⊙xëJe|¢dµr-IÃ’€Ã2Qó:êÅåPš–‡°±ÙàZ6|Ž|à §Ýclš€C£fEûC·äTÔ•y±ºû·0u*a¬_%ah.©²l?up"Öu ¡ƒ2žsk$Ÿz(Ô+(©= }ޱ9b¡5âK´Y[DÕ$•Ì#Y¬=ýã’›§¥­ÿd‰QêhµØßz8cg†%ŠÒ&Ÿ¡¡Õ¤çs¼Ææl~ž‹ÿ1æ32ßp¾bÅ ªs`öÒÛf™‹^È4ÆÕ«WSÛj*ç ’_™ã½÷Þ#›‹+0dïh»;o=‰Õ½ ¢à„ý’o\á _îüœì]\Ò]9©¬ì+YÜØ‰xÊ‚ÅD˜k·Å‚•úÎÄ6œsô;nÄ즭¬g Ú,Æ4Ç%bZW„ì•YÅâd¬ú«8Ç[A_Lc;ŸE"̪5r2Ë*F¼mÎâò! îç”ã†ÎÓè²ëÅ$t1"‡•ù(ÉFcp,ûCgcd¥{-ä¶‚W[¢ÌçcíºqÃJ-ò’ÁhÕ"{¯ËLõðú’{cþ …yŠ^Îøè£úý¾Ô¬Cðº5ûXâéð¼¿(™£­žYt!t§NŸ>}ÕúÌ9@¬ËyØ.ù-ˆØ1ÑRlºùC»DÅfMjìkó’8ñ_ì4 “[–Ðá%[„Üàù¹uI n<"n¸^BͲ¼."¿ ç9”ÙÊp®ŠU·ËÿRøbŃ—A*°_v mê+Fúï})=+FžçÞæ'’Ä^¾|ù 7Üpà 74F£±víÚµk×2 ¸B îsA+äÓTѲƒ[fs´%bbŸ~êi&T‡ µù‡ºçÞ{FFFîÞ{÷‘ޏäùùò±D~à¹KEÕεç-ó1òo¾, M²ÎK £¤Z®¬zÄ¢p­3*ù­Š9"Ùn6´-ìÓ"ʨéu³ […Çœú¦š£’0@T8õÄ•÷+ôíB_|œ˜äjå.«`ÝK\^&d‰uÍÐ- ˜¤j“Hte)ˆ½Gý !h#‘ÇR½Oòz ´…´¾†©®ÞØUØF¾¿‚¸ð×-œ`ƬpÌs7ª6=ÓÕ\¹Èõ1vGñi¨Ä±àœnMçΣ˜IÐË–-s±ƒò%å]e“ËEq º{ïÝ|Â’êœoDxä…#›oÙ<ä›W¬XAÅH=;½OQÙYÑÛ(ð=0Ï·ÙÜò!®ÌëgÈr”¤¤¶• õŠé}™¥§e™ë~h*Ô.zË‚¼ÂœŠÑ2ÉgW¤d6ÏLòN zCq!íò6¥¶SäÏbs5ÍÍAâ‹ gaO–ÎËE÷êÆ,\—Ô%Â!Çúil €ÌŠC¨¢r¹NpNíJƺÚäy(ª$“’Ma(ˆkžüÐôþ9z+–‡µ`ÙOBh<0AjºjX쮕®ŽòÐ%̦z¹V/ó;åO½\îkëâÚã‘lçúë¯ç3dPj®0*{³ktá4Ÿ–!"m5$¨{™^×XqåÊ•L€¨/ºüøÐÁCôÅž»ö”ýˆ¶ea·{ ãÏŸ}æÙø¶þùxÛÌÍ—ª…= œ~t9+ø,哟´&ÉÁÆ>|… ¬ªï¥*q87–’‹¬·éLÔw?4qüÜÓ’°^ÖBÄzñmû¦”£.¼…ÇŽõ™Ó{"‘ËiŒÔ‚AM+9‘ºmÑ› 3?ârSGÌ;ÿ·Å¯ ªµ…}bòðmŸÙ–·'¬r]üºáõ%¿J‰Q-nx^Ž¥°R~Y©Ýù»´ÙÙYɸzy×—^|© Mݱ€sxæég†|' PIy+¿æo/^¼x๞;ðôSOsçík®¹æÆo¼ñƉ_³fÍ?qè࡯ßýõ¯ßýuûžÝ·ïÙ}² 9€¯ßýõK—.I²áØ+ǼèKÿpá×]wŸä³Ï< 9š\™û¾¼$à°)#Ó!Ö½bçG_Û\£ç4›õ††É\¾ ©i§×_Wˆ›Ü¬•ŒäR³$±BÍÁK¿ôʉË~½®ô‰ÙËNLvq¯óœ‚WoZ±¢Å›?Ø­a ¡ÂjnÊ ªLÁ¢ÄG{Øæz[pï+~mëL!ûçMªeHÇÑÓö{m©ëh«d'çs,>ƒT¥Æ¹F 0+£tHTTèÂL"$>¯«Èù‹À0Ê Éõýº”0^ùAµÿDô iÄ*‡·œ±;+ÞùÒ‹/m½u+F–êJËPS" p>õ©OY$Üd0zí½gïSO>Uö‰>ðà#ß}$˲³8 àÎwjú¢Š¨¿íöÛø=+W®oÞncûŽí„²ßzø[ß~øÛö?·ÿšk®¡Œ#çqo¼ñFêGÍãùÏÓ™TpÔÏ<ý ½‡¿°°sÁò]BMVÌRëì²Øû"—GÓ5Òi{³Ê¨ÚÔHe.šCþ…»]ˆ] ¡•z”`ãí'\F,‡f$¾Ÿ.S M“º\®U`;°-†Åc[nD ¯^½úú믿þúë¿ð…/|á _ bJËeþð¡ÃLz?òÝGìÞµûºë®ûÜç>÷¹Ï}® 5‹¸³$æo]Ô¤1K Ë=ÇÒ¶XK|ê™ÀŒê¬Mƒ[’‘0µ(@±-’Íms&£’LmìtKy£—q°¾¯Sgljv_J|ÖíVÔ†·6*&9×W¤úªà$V¯ ñ¨Åi'ñDÇ©11º…†H5faØŽ…l*`ù¶ò‘HœeÛñÛð—l+¯ºQ¶l]¨žÓ2†kKzÐ{ÈUgY娶¡Ù¿oÿå\‚7Jß^᤬5¾õзžxü‰2è:xèàÁCÿý¿û÷¿÷¿þ€›nºé¦›n‚¶[¢Ál0ÿЋ߸ïô¶UzøæCßtQÓJu/,Ù¹€A¨ÉØÉ9fÊæ.˜ªfTX¡Vä#c3åãÕûÄŽüÇ¥|Qij´ÏB(õþ±©þhdvŒ›:^3V¢7q|kŸ$na¦+(h]zó8ðÑËÖ¶…÷Bßww¬¶Õ0m Š „ô‘•®­å~àí‰f•[ˆ˜¨Ñœk.S‰LÓê~שÞ7HD‚¤T¶2‡fzõ]Ðý®3>±<Ö ;è\·È¹<-„ñPZRž”ŠúœÄ1ŒXíæ¦AâËd'¦ˆ—ïmò^xU÷| Œ×\sd;¯Œ?ªwTˆK­7Ìi÷ÃoXŠÎ\Ìu{›{Éêê@Sf@yÚéW®€+Íj½^'±ñoþæox÷ÝwÿÍü›'ž|âÞ{î%ìÜqÇŽí;¶ŸêÆ¿þʱWnÙ|Ë{ï½GªŸ_zñm¼-ÃM?ö8€ïüÉwøuÂN9þä;R}ž.r{Yz~Q>Àeî;ùE¡®´oÐP›¹2¤™+ûÇu¥,pL͆V,ôuDEY›@«ü#5c ¬§Ù´ N¡º¤ÝÒrcn·¼5ò’·]ŒÊª󬂨Ñ^ÉËIMS·¨$[VfÄŸèzÓX††¾ƒD%ÆLò ¥‚Øä:/Èø¡…²ú#°‰D*=ÙEX$Ys>¬"oDZ¾Ã׫*RÀ©S]>ÛÖ=«IèDiÎD—{&>ëö´¤¯4èNèG¨í{tÕ[T3Ìf›ëؤmÓò?·¥]U½5!ÞÕÄ»B¹L1Ü0ëàb…†é8㋈y¼‰X·ç¥àÞoÜ €„²Ûwl·N즛nºeó-ò•[·Þ*’HÚÕ«W?þØã}ó!O=ýÔÞ»÷>õôS€}ìÑûﻟ9[/[Káæ‚Óœó2'j‘Ãì)+"ÎÄۢĤ1W;k8>ÜvK(‘“À„+îŒX÷•–&¦È"rruÒˆÕ5Øs‹5=ÁAI+f”4Hq¥’©YçQ¸b(AñÑ"²2¬IáEž‡¢d0q(è2(UͶô”²½ƒìO©S†ARÉ =}o¨y˨ž·jGšYòcu!rŠø»eè½6*ø Äq”lŠæ$rdAJ–%‚ïÀέ§1* 1!L£&+ÛQ4þ¬Èa&`æYQ^ËûßÔ`9L5—+lòàæð¬aU>txûŽíK×ãÈ G\³',ÝqòG'ßyç¿[õwLK(W¼O7âƒ>xð}ìÑk¯½ö ¼`û¶íVþ¸U«V=wà9»vîÚ{÷ÞWÿìUÜPGû¤ºüLç yŦŠQs[®ŠˆÓ›˜ô«”d(ãJ¾X0)¯l—WSÀlB鉱¯¹•—NDù9Ss‘%¶0/òy|O‘ŽÕ½ÙuñŽ QŒ­:Œ„QNlvÆÖ1"U*2+¶5 ²<®ÜóÎíhKQ®pŸ0ýƒ5……¬é½žŒc}'ߨêFêâþ¶höºYZšhs%g+À•!Þ¨Ñïàd‡N#èëÛ$·Da†~aÜÃÕŸAÚå‘û•ÛfSøˆ¦¦ˆLöÇNMI6un$*^àÛA¦úPv ”sçÎ-€!¼šAæìììÇ[TSi\XQS/£:É b>tx÷žÝ.˜Í xe› Fr=ü‚:”¤µ¿åq–ñ‹_ü"€Ï|æ3oâÍ÷ßae>öè{(õö;rôøôËûᇿõð²e˼ÚZ 7W¯^-Yb~¼çde¯ð&ÇYíHg¡æâË*I¼´j2×ùÀ!Q½h Sú˜:gBœ­k“ú’|± §‚ÌîŸìMÜåÞrùuèDÏ|’š…)&Š P3ôÅi$¾âõuæaqã‚` Æ5äH¬†­ÁÑDwdñ焎&5"–ËæÒ$-¡5D…¥¡£é ®·. y×0h¢×EììB”QQ ³]{"‘Žì:pSã0½ ¥³UÛÉÅ 8ÎDnt»q·â­ºû•Õ‚±†l±à€àj—_GO eU‰xC@š+6¥o¯¹æª¬ ‰S§N­\¹RŒ+±{Ïîý‡öزu‹uÌýûö/žÝAÕœä‚˲ØÁ` óʤª×ë„ÙÄ óƒ÷¥ÿíKõ×E*Ü‹/>ü퇱ª€ÃU«VÍ+g-Ï|Si+_½gò™¦[·Íˆ‹^V§åjG‚Øì½ìžÞy[1§:?W÷f†Ä’ §3Wb=u34 ͪÓÔ kà8¡Ku ÌàiP.˜ŠÔ:ëf ³Ý"L }Ò$Ã50Ãd-dy]P©‡p#‘ÇMJlráÌmˆ­`Êi!A³´'S°”hƒŽ#Û" Íüù½HRFÜ Çñ?×ÁwjÄÖä´3è­"oft)gêÄ—a‰J‚æe›<ýìù9O¾¤:¤T;ôPJåí×V¦²¾Ú¡é5×\#ó£xyÃËVÄ&^ë8™ê»ò"&ބ֒lûŽíÞÈr^`æÝôXi¹Ý{vïß·ÿå—^¦o·lÝBñîöÛ-9Mò»ï¾ËóyêÔ©S§NI¨ PÐ…ÞON ™jZ1VY,¡æ¿úýõꟽª‚Îo=üð·† ½ÿþûüæ‰?ž˜ü³É'Ÿx²zZ*Üû†ôX²Û»Õ¶år"Î2ê5.GÓÄ‘¿Æåëƒb[´•ööûô®ér¹o‹8)1»bÕµâ£]¹€˜9C_X ßÉ´MßyΩɱÛzNŠƒhòåO'g¨ë€/5sÉr 9ä¸d}—!yú$]Œˆˆ*A ²ž„pJà‰œ__ H[çþ>©Þjô§U9ŠŽ¥IPC£‰^WyüNšù锎ŸarÖMåõ¿þßi7ïÝ IDATךÛn0ª=uÈHqR@$âÅq¬W53Â3H2ÒÎcïºÒÌÀˆSõ>@ïoà³ùMÍgÏ£ª½š‡ÔÊ.)ÈUstsÆ üëÕ ÌE!ÀçðñÉs”OE[·lõ¦å$vº¿üÒË„ s~ô–[¶¼üÊËCž˜‘Ü]éÇKJs’-Eœ7Üpà þéúôïÀWÿø«ßû‹ïÝ{Ͻ<øÀÃ< à›}ÀÙ•gùÚkµ™EȸÐKÕÎw¼˜¼èMpž?Þmy¶ˆÀÏõ£¸’ã}5(iš1§œ—NM,CœÝ½åÊmIŠÂJŠ8*¡—SÓ+f­žE#·Ëyo÷•ÔéJí=ÙS8}7yËÐ'ç "WWd1ízaD§/*(z‚úúf'…aGÀZ¤TîW2ýxt1"HÝ>ï ºZ]ÊàGå˜áTŽüùÿó`ðGò‡Š@Φð1ô0Ý2Zƒ(ï$âN8ºžAð©Æ"ÓØ]‚´éˆ¶1…°o$ëÁ Ì9¼6±o…zkÖ¬ñ®&–¹c[¯õ¼êsãøïŠùñ2')§š'SžFõ™ÏiasôÈQeJ'ÆÖ-[ÿê¯ÿŠÈRÿðÿÐ÷ˆðÁá&æÒLýêW¿úη¿CØyßý÷ sá2ê¿>™³ PóÆOÿÍßþÍ¿ü½ àþÏ?ðÝG¾Ë¨yùl‡b]ȼ5¾uÎàØ%„åo¹c˜^*iyÞ%õ­é¤%¢„ßZÓ­j×Ͻ¬ÊÅMѱ´óˆ¥*Òg›ÉBë*Ê,CA½†>{‡Pôžt£Rïäq¼ðpS³E32“Lt‹Ê´$^'U=rÝñª}BzQ:!ˆ9 ©Ã¥îmé ʤyã C‰&Š*åÝCQ#Z˜Õ6öË×u´0F—ÙÂ,½MgIå$´[˜%Umð òo@+˜aAúRbzéDZ¾‹‘&Ș‰Íj˜0w‘vN€ótñÃj#2p k'Kú Õ„s*bܸرéögÈcQÂt wOMƒÇ®ÕjµZYúsNCö!Ç•çiçÛaêò¡&Ù·’ÀòåË·nÙúʱWÈ€|äÏ;Ç7âÀs>©‡×†Iú:Qÿê .jÞwÿ}wï½{aH‡Ù²ü³ßüg|øÁ§oüô/û¿ð7û7ßû‹ï}ï/¾àxàÁ¼†S—ߢ€ìéå··Æ·VãŸnr êS‡8½rÖj'wW(d¡HâÛ˧fš°íëV˜:9TÛ @hka‰2XÎjöº¢øº—À¡U#³¶=)a­­ÿ][Ò›±Ymb îPK£”‰ðWÄÖ–(vj`ÜΑŷ°¾S”©ôÕ¤‰À á×Ã&fº¡ãκ*gsuM ƒ ˜žÆ:Cøi½®š¶@C ín³Ð]œPŸßFí;{ ú 鿣"à›ÔÄ~ÔA(Bùv¦SÔz ák‰¦XÛPÂcí„ ÊܰÔ<3C5”=o^0LŒ·…Í}¸àZ^qÞˆ=[X{¦+6(‚‘xÌ0éµÛµ*ß+|\Ý H?Ò¥ÊÐYQÇ‚ç„ÆÏ~ö³_þò—pº¶U8°Wûî¿ï±G{ìÑÇîÞ{·5W§OŸ–;oŸ8jqÃO._8Õœ¼ýöÛ'Þ>±ö_KqçþÛÿü‡ÿöñ{ùß>òm”q?¶ÞºUY盨I¥™óêVmQµ2÷YIýDeH—”S£Ö›½­–ìe² ëÔÜ@¦Ø—4 Ez"úBCè/B«x¹‘ïÀ ecíþZÀ¿6¯‘YX¯^#v % ±];ÜT„¼ì§S¸ÚЙ¶ï’­ˆ9ÑíØbÝï3Báå&¹ÜHTFÒb‰<é`#²Ú÷5,à!G=óºd˜ì¡é$8£ “5Lè ,ia¬…™ õNrsi­³¶N¦RØÉ¢|üÆ€´…Y "Õûm›×ü"GØ*˜Kͽ·B‹„!0D{/-ÙÕØ¬îZ®ÅÆAbÂó¨Ž(Ê0I™]GƒŠó´j«B/­ÇƒüçØOŽ›Ì]yüóúÉ]…f³óŠ€ÉÖ@sØw^Œ‹/R°HÎm×^{-™Ánº_W8ü1j>þØã‰–m¤ÜîÌ™3;wíÆÓõŒ ›êÿòÿþúâÿíÒßzø[üÓgž~FZérMã£>úè£ÈÖñ#ßX½zõ®Ý»^zñ¥szì{vßÞ{öÖjµ½÷ìݶ}}ÊŽ;vTО;àMp™òüDe1.!Ž\xˆ… ”+(â)|…eA¨ùFé3n¡TZÒn,,7RÌî–i{™'ƒûbX’j•|u*€0E‡ÐÄc…[wâ|zì¬Ô0?%1ùÏÄt½OõYEN#޶S{»Š€¤¼¦ó¾Âr2J©‹ˆÕúÞÅs cZ{%7Cé8Ö‹’Œ(C½µ’jwõ´ÕäÆjCÚHZ)mƬj£ãèuq‚KY2LÖÐ`ì0W©Ù` .-·¶AºbG]ìláp«w„ÊzÕ‚™7M «wFÐb_ç¡0jÐd¬n¾m¦J›Ë¿„eG ʲeˈ[.¯õÒ%Üõ€%Cã2;G~¼ÃE÷k®¹fIÑý|åà·QvÓÊqî½gïÙ³g©äÝwß%A,y»÷ì–¢51.çlY;¯1 ÿèT{½^¯×ûÑ~4ùçÅŸíŸ<¢Ìö(Ò½ãÎ;>pλS=víÞõÂá¼pøKÛ¶o³^á­Ïùóç9*eŒÌó<ÏszQ>Ü[t^TmR®úqéD˜nsð¥ˆJðرïqßÈ9±¶£M´¿š•DU ¯˜ú(e+A:à'©lÞ:ÄÂݦ.¹Vñë‘oeŒÌžÛVj»²‰[agØÂ,³¦ÂÎÍŠéÍ¥‡j<Žãœâ. å£Åñ 9¨òp_3æf;h'Áöx@Mà„éî$ß‚IæÝU 3=4›ëâÄ1\rÏé45Eöª)ɧ[ÁL7Eðihº84ç!‘V5 ºŠ’ÐIS­­²YÁÙJA$ÿë¨6U)Û"†Ç¦?àŽªmÑk%¼ÊMÞ½P-#cÂT¹âÔëuZ©*‘GZè½×êW®\¹è±5cçeæ8© èðÙM½ÜºL>=‰zÍŒ¸¶‡Õ=sNEcÔezÈ#mãæôOžüóɉÿk"y1yïðOïÞ{÷ÓÏ?=_âZî øs÷Þ³÷©ÃOí½gïðíN‰€%ÈäÍßòåËéŠîÜy'+‡]­–ÁïýÁý»‰Ûßüåg?üÕ¿¸öÔž={Lëê°ÜŽ.u\¿cŸËyRR»¾–}]Ðl©’\#ÊÀÛÁ‡L,·ºrJËÖÄL¯–9ëÊ8¸Ëš¦Y}ÛΑðÓvæÍ”ø ‰i 3]Â3­ß1»xš\t®ÛM3¦w»ªX¶Ø4Œc=¡¯tÒ–{f䆆҇uÓ°ž WT•¾™Qy(«ö7GoºÀ×¢‘j ³=4ùœM# Ú¶ÅEÑå4Í]QñSóŠ )®ÎÐÖ¦b×¥&ßÄcõ¨Èl•>nÛ6lyƒÅJ¹yDN_I]¬x—Ån¸A†Þyç«Ë&­Gr >{ö¬8+0r˜k¤3¼té­z2†«×ëòüé –edd„Îgݺuu ôfŠðdìè:†Ë3¿îºë(Û'g•2”(Ñ|jZ 4½¸eëyG²,“óIðéÎF£A±× ýg?ûYŬzóš•94Ã+V¬  çd§<Žu¯inÉÏÁÒH{+Oø–ÑåУÅí6½Ê&þDïèÒ¥Kœ¼äD/ßz²ª'S@¾/Gçøã‡ÿlÕ5×õßz#ýÿ¦—ÏA¦¾fVÔ38KKÚ2ÃaAãò¼iìÃE¶‡ׄ%ÇLœD#|N.R—T¥,’ÆL}õ'¶È¡£õ°&Ó*ê‡%NÌÖ+v]¦¯îźAºV|ÜŒMØØÙBá8À4=·6*èß„ïOaÐîà$ ó BÝâddÝwKEeKdú"S®ÀÐÎŒܺðÁˆ[˜íjpê úúS-ÌvÑî"‚öæ†þ¼sjÜŒuSE½)]ÎIyw2ãëØÓî»ÈˆJH[„Æ_J  žËÀöÂ2uk}Ç?òöîf¼óÎ;øïfTÏ +TåÛ\Ôá©~þÀóÞ˜F9ü-ó»äÓ žöæ]lJE–¿úÕ¯±‘™{(//÷Nh*=4x†%pòM¹{ïݳ³³G^8òôSOSèÉ{,é8‹*ÒØ œÞž'ôÚ"ÒÄW㟚‹oⲬ¾wÆ>‚JðÀi‡³ÙSXï²ü$Ìl¥O™k®kc±\&¢FèäYÇJ0Îì£f~Z—4߆Їæ¬ºhÎö´ÔSs’L«¦%_“9~ªÓ„´ohLá”>Úˆé+g¯-Ð12%БïÂqŸÆÂƺ8ÁѪðœ:!o ¾„Î ‚Æ´@wÔ1•œðSØ m{å´È?‘¸­©Y>²ñï¬ï0 ÀFÚC¿† ìÙîfÃ垅膶tƒ:hiÍ uzg£ZuÌ*\(ž¹À*uíãXÏr*]ÚnaV¶ÅfNž¯Z49ÍÀ>ãYèM ë­"­†èUןÆ=iÑT˔ą»š²+”ã^æC.áŸüä'ɦ"cW*ƒjw óNÙHNåè™3gývï¢uv±êJ/sœ>}úùÏmó׆¤[aÓö¥ˆª­Aâ2«é7Mã… è=m³W*fùWHeÆò´«™†7uF×½`¿2qPR™&”e‘™´‹Íž!n+G/- ÇKNõ$ÌâwÝs1`ÍE*È=K¬f4™øÐK†ì@$U?…á‘„úú|"_×3KãÚ.Ü&NÜ/ÿ·ˆê>\€Wg HšèõÔiq¼0òM4nõœ´si ½nÕ…ºÊS%J[˜éàÄ8ÐW4i¨§Kq³ãèM«$%Imû›°nª€vªŒ¤ˆpD„‰h¢×à  •}7Ó°¤N [˜éb„Éáz]œ cj{ä0óC°ºPÈ02ÛæDäµ+bè‚ɇQdÔCS fnóa-÷L±^ÎøÔ§>EI¦÷ßßJR?mØeXðqaծݻžÛÿܮݻÜ-¬t!FƒÿçXÃÂÊ9Ÿ¥Ã²³kÙøÚæ¯-ÊÕQWj1×­[÷¿ñ:Ó¥]¸pá­·Þâl+Ù},5Kùæ!\h´öƒÁ@æ•éëÁ`àRµ«V­¢M…ÚœýàƒÖ®]kaç3/<3ßÒR/pº–¸œ!„ÃÈEŽ2°í$“òܧ•+}nDmán5©€[È<¢Ž]ê>šN"hÕÂO 1Ík ®RWz@ü¢·ag[¯Îp¼ÜdÊÓr`·Ú€Ëòy™ƒ”ÍXŠp)ìÓ†Ó¬]Œ²E 3úÛ~'Ʊ~ºä(Ç€ŒôШ¡ÙA½†}ŠåçÐÁFêÂ)q_6(éM ´µ[,E±Ç;ú¥¨+Ë„šûÐæ-ÌJ¶‹v ÐM¹;"rqˆ@=cñT€ÌN"¤¢[䈫¡3 ±/ïÀuR¤BÛ\Z¼3À|Dìó®îFb/7sn/^üÌg>Ã@B‹ÑéÓ§IUÁb ÂNK⸨Iëé§?ýiƒœ¼jFM¯¡.]È~ô#"iß~ûmZˆ‡1fs¯ñ±G“\ùä1<È%i˜™‘Ië5kÖ0˾|ùr2V¤ã¬Y³†’‹ô¹”μ’ûɸœ ™ähâV•\þàf¢<ÿ»÷ì~fß3V™˜2¾½,Ç 3/ˆŠ?éf»vï­Ä·””Ų0±!©dq“!‚cù[©UñÂßj‰¦ÕÕ$2Ą̀ÖHìæ!º~T(•,ùOêì<(dLŒ)Di+kÕe²>ÖÃl˰’s“(Œ‡Ñê’ƒ!öºKXÑJ8”¡ÞÂL%û4¤+ZN}Qêä)rs •d¨åvcLiÓД $9Eša’ò tu= €Énñ°¥ºGzîs‘¨,‘îHzJs `mjh­"u¡'‹BmA•H³‹ 1´bHüh»|Àê¾$T¡•á[ÜñÉO~’–oZÓëõ:Åp¤ÔðB…7VfP—?¥b»»vJ¨^Š1 æ•H{þÀóÈý•OXê`¸kÏ]ž¯²ÈyóÍ7iÝÿÅ/~ídÄw_ꘪñ›Ï:Âo«Mô⦮©³›[£9'f¯\¹RÆ©Ž3X–5$°:§’n¹" ]^ÂÓZì¥7ݨvîšu{ƒÄ¾ZÌØÑ‹ÆYÑ(Û}]梬N™(q˜‹¡kìhSW ¸}±)TÎ22{bÃ,Wç ÓÚ4ÀO·/˜¹oP ž'U)|6ucRT7íRBž&z] CŸhLbV)ðbñj 3Ý•SÝÔŒç0ébªg`+cá´“$·¼Ñq ¥1I 5g5j¶&s’°˵çŸ2ó£‰MP°Çj×¥kXe{Õh…ŠXZfzh’gB½šß/­:6«bl]4óÕ℉¢?ÍùúZÄ”ðM1ù:ó´4Œ8ÛÇúÊ…ÌUJú Ecô+Äõ•)3‰ó%ø|ã7üÓ?ý“\¿¼ƒêÙixÝm¬¦Zj [¾œN•kxø½V¯^- ihÅ?{ö,Eu?ÿùÏ/ùº‚ Ø÷ì>îûh‡Àl®©*C–ÌÂJˆÞßýO>õä9œ“gõÖ[oI’“¶/çΣ³¥‹š¯3íÒÕV”V¦Ü¦{äu[´Ø‚Ùó³[®%ÊìÞ³»ºJjy98y».ÃqÀIl Ê{OzñŽžÖJg¶+ý`ÛVnU,L®Èˆöþ±V3 õŠk©aÐ ¨ô04l ã’,)„ÌÕ:‡P– ê~ÑÚ  r\²ÿÖ'H0}Ü„@q†ÃT”BRûIi à„µ¥ •MK™Í‚»nmÀt)nÂ÷§.¦D c_Â^ÄΛ*tia¬§R€LÏ&:¾$ER\à+|…ÌÍ„À‡r¢¢Áµp9Ð>c]ÑL›ðž¢Ï&²â© ~•º¡+Zšgˆº8å…”Ôjç©X³×4ÆÑ£+ÒØL_D‚l*âˆuÚ]ñHKQ¦*dŒ?%­tÓBsÞÅÂug•ùǼ–­X±b‰úW— #¶Xáy£¦dAç9ö=»À¡ƒ‡ÜžÉ ™Eöôpwd[u´s6/ãZYMA…<}ìÑ¡úZÍ•½5+k6Éü[óE¸ø¶ø¹£žü´—®ð>ê²Ùç0‘'Ég™tnyI¸YÆ|ºøZ& ·8Õ¶½êA&Cß¡V%ý•ó½vUŒ0ªµl€Øðý1º]¤¦‡@èàb$%&0§¾~¢’»¹v¼+”>ZS8¤Ã4E‚hͶ5‘ž=ªÍÕ3ÙÖbdÐÄXM°aZ;˜Â$s¦;ˆzht1Ô»&_Ý-R†“ìZ°Óµ Z˜éj?ØMô¤þV$Vãi nÆëSˆIÐKD-̳ÝB4&‰|¬àöy6Ʊ~ t]¯Ù.Þðù‡§BÇj˜è기k§Š#=ím¡•më‰Ü.´….=6¹XÉçð ¹6d=-.rõäå†ñ•V"Ǩ4bÕªU”ƒ¤ˆÓõXŠ Ù]÷oºé¦ßþíßæìàO~ò“7ÞxcÕªUtæ,qbØ÷ì¾=wíaø´µ€Ò布&‚E Ù/^¼H·Fe Y@ÉÁ¥|¿æŸ°™ñ’|åÊ•—ß‘t^Ãòа÷%%ƒQMÊFFFèï"Ë2"?æ;öïÛÏç3O?ƒg<>GŸ(C«22ªDP $²W\ÒÕ²ŒŽ„§­ª)Œ0”Ы-’j’ÚT¸½3¨KÜŠEcâÆÂ®s`x“ÐØgŸhÓQ>+×5BZ÷‰ž_y\ úº¸ïq’¡®£Y:)E=äçëB‘†8¶®îŸÐÞf_z?ÕKh_½À8Žk‘ê õŤž&zœ$§òqô„dưã/ÂÄ<Ô¿Ò¤) <žaRûÊçŠê,Ó õ)l âý[‰N¤„‚¦@º­/“*Ž"wK^»ƒf†I­S¾3¥s¦ÓŽ?J|«㶨«é‹ ÑU(†áþ8ÖëÖl„¯#Žó©êzž¶™H€D%çñb郼Þë—ðÀ–Ëë{ï½GßZu)Ò»•~tíµ×Þ(Û¯{q—Q“Æ¡ƒ‡ü¨¹d£¢@‚Š+Μ9Óï÷ûýþ)=æ<æ“O<9¯sX¶lÙÚµk×®]KŸÈÀFõKì·N…1ôuà¹o¬X±ÂªEY¢Vn}=Ü?„•+WŽ8¦©!9!x\}ºÊ`Ìi—Ô«„¢ž$5™ØXjâÄ‚V‡gåŸ.xE«£gbµ«¡az”ÑËayím‹ØŽ =ëGb&9Í)™æì*•Å6§­`F#¥ C[#GõÆi(}(¯‹ŒÔ3Š{¹Œ(µœl¢GM²¼>gf²ƒ´W`7ZâB9:Ü„ï“ÿ\ ãèiLñ)-ÌPÜÜC“?N»Ãˆ:8I/Ö0ÐGͼ)¥3#³Àƒïl[³¦cÚD>Òw1¢»‘ ³[þF5 Z˜eТ QúMK½DÑ3,öm™AvÄ)åMIBlÖªòn,¢] ‹4jª~œµ`¤e᦬¢ãv†Äൌ[FHc÷+ oï¿ÿþûï¿ÿÆo¼ñÆišJ”]t _ܘõÌ™3üÉ#¡·Þºuë­[©ƒ‡‹šÕÖíô­…sn8¼%ùsŽS§NõûýwÄSͨY=ÿ¯}ÿ'œ!{§ðmRø/BBõ™3gè ùNn]À!5 …*PsN®!^á(ñ"(G ¬0 ÍBÉÈldÝö…’p€¼(Ûð 0™jaËP œô)µáëø˜^taQ„£púVH[TsZ­IéPíMX7ƒ±®Äž%„=©ÖvBƒ”v‘@µú ÉÇ€+CP8²†@ÒA³¦|p@O›'(½~:¥é®*U¾ôÑÔðd\ÑE”‚m¢×iZjs]+Ê<”¨u¦g0ÚÅ‹’¤| ³4¡I óí4!Œ›úAM¸°DF™¢™ û$m2yÇ@Ç!‹ABtQ“JÙÜ‘µ_™7 #M¨û®Ó«‘®ñjPÉÇ•ÁªùŽ4M%fÓÿV4Sz²ÐÆ«ur1ûàó‹D¥ã:xH¢æ“O‰ç6+Úy*ŸŠ®AWðU'–¶h^Ä#Êä‚è ¼ø4(8`?XZ¤¤É-Éä’jvƒðŒàÓ 7­ÁÊøË—/'Ô¤6ÎÒ]ÝTè¹Ø±å‚58T‘"áÇË‘òñ]ÒÛBþš³Ú²8äܹs öiZØ£Èg¾XeÄ×\sôÄX”ñ‰:ÑýÖUúÄ0m26)ê,±c2¸êF¡N=N˜P˜¡'WCBTÈP/ñµµ’NªÒ=ô™6ž9J¨ AÀ²¢- ™¿ëÓŽÄåëÎV¹nÿ tp™jq¤…¤¶ÐÄF@ÔCÓíïÁœçsg†Mù® c÷”i «Bê¦9 ¤Un ?Žt"³‡&‘Ædï®£Æ ’Ú6Ñ#Ì €ž*.Ú„u”ÍíâD#|oRÏZ˜Õ¡[ß”zÉ}RÜC³…išØÂX–×µ`µN ä.NlÀt ƒ›ñºh´ÉS¤ß°…1½ùSVÃ@w1kwpR¶‘©¡Aa:)œkhè kšèѧtqBÓþYêÀÍx]ß8£§ ÆPsÑñj¾ºýRH¤úüç] ëwÞ!#B)¤&RÄ7Ë2»^2dxž|ê©'Ÿ"È\ ¯Tkž?Æ©þæCßæmçÄà¶'4½²È„ÅÞ‡ºxñâÅ‹—û†TÀrÕÐGæXô+½FÅ:`uŽÓr·ÑT'u¼&é‘èA!!343¦E¨**:bM%>Í-|ˆ•øfë„]%p»*)›ë,`?6°³ÄY).2g9² ¶f¬UÁkˆÂðO]f ƒ&ƺ¢òã8þ¨ä!í.¢šAž[\q¡³ÍCÞÅÈ8¦¹ùeÁ'«èv²£&ù¤8CÊD6»ú ™RKyB‹eêÀqæ·_À$‚dë;šáìã8ÑÂ]%¡q ‚lU`Êó“ތקpЦ´…±z|#Ê7'›°nJ';ПÂ)ÎÓë€5aùÔSLßÂX×h‘ ÚÂpFËŽf¤U“ðshw‹´¨K·¨2­)#ï`yA¦vðÄqƒ”ÂòÞ\P 'Þ¨"‚+\B”,ùâ~ñ‹_”gEÍ:†K¨mÙÑ#GAnòóûžÝçJd™¤•ØI¥÷RTé%«ÛAËÇplJ·tvqsêßB³•Y 3ØÝŸ1jþÝQGûr’3Lvu’fºœøkŽŸ2DbÚÚoÂJÇ’ˆ†z%àÇñ>]„$º&¤¤„Mô |VY« ÜTüÒ§LPM ±—›ñƒcª*¦GÝ@7`º“×)Îîûõ>MôºôÄæáÍÁ÷I—›åõ.Ð fºAÒ¾¡‰žn1Ý PS£Z cS8A½™¹ÙL%}ér¢.ÚÄrëh2­¡ÑÕ³¤=fg»8QÃÄ(¦{hÒ;én±B¨I“c6ÐnëÍG[`°zrjdÚ _¬€¢aÝÄ[—nÝdèe>sb²âвð¶PY¾ÈB¯Æ²Úû{¾¨¹0È„¶58¢þä¥_rS›;wíôºØ\Î(;àùóç-ÂV&w­”­5QÒöÐÁCäØ`!1ýÔÊSyâéÓ§“£IY"í¤3ðÓO= àöm·ŒŒÐ×e÷haS$낸]Ú•®—oõþÒk€à D“ý+Ø3ñ+œƒŒugàÐŒ,9:„IÆ"$…Y­ÑöûÉ·•5)ƒÏ8P6øŒD£ ‰µiñ‹y¬z_çü)ò|Bç°±nêôë:s™j’6î?r7Àí«R͸’%¥èM6”Ö¡ü¤v"¨ þ[+·7aÕÚ1¦Äœ¤ª Aœla¦†FMêGÍ`@ô,¹¨kO]rÃic½^ú)üíákø av[ÁL–×;ùÆV0³ÓÜòŒ:?sZ”0u*ÿ2rÝÙÔàŸÛú]eôÓ×6Mz™õ3%N]µ’)ÅS£ÈÔÆ=4ɯ†kò@} 覰A3¨–Ѳõ©{4O0A¿"u¶ºŽ¥p] P(•êI>ŽžvðˆF÷c«Æ=–Žw%š.Ïs"ñ˜”#•x?n;,¹YÉÊ=r”~Ä ôYsЧP ëÅΗ^|‰QW÷òv¼˜¼Ç°,–=þü;ï|æég’£É;廊×åÃeüýôSOŸ?ž¾å=·ßu–eÔj”îΕìî}€«-®.óOfy%ÞÄN Ó=.ñFf‡di*ë6È/rgq­‘Iy…— µš<‹O7zöZ)«³™T›$<]œ@>Z‚ÄqÉ%ªÃbQ—IÛÎD¨UKçY˜ìL“8)zºª×Ç„h·)«/&»¦ÉÎN£ÇB\ˆNX²ax&”´=µ³é+<®ƒ “™v3'•Ðæàå×ð•n^Gv€qL“SÎfH»h·%^å·)&'j˜Ðö¨ƒ›ñúTþeä!‚AÚÍÃV0Ã;ŒfF1=…/³_RÍ,Pe0MnÂôNAdôœ£ˆ®ã“ªË ý¡ä-@µ‰“_ÁkÇp ªµ$÷Þ"I‘‚º×ðsO±ÃmJŽå[tLÌVsèb„K,Ô9«Tb›_khPà«W´0‹`¦‹¤ÙAüjE‚yØ N hoƲcúŽ¿Ž›¡â<ýA ;-R¡¾Qžv5LˆЈ¬ûD€ ­YíkŒœ¤Â:`VÄÜe³¿?8†Kš}q*æ7dTÿÚ/JHUŠ¡k´_Môе dÛm©`ϯ°´²DVƒIkµºœâ ^§>¼š±V«Up×^ótyL}/¸lqÁÚ4‚(y¶^¡VE{îÚsñâE Óiê5%vÎ9ø|¼pÀŠ’¥”|/U•Ö»òøKÔ5¥bP]Óœ Šg[kyd‡%òZۗǶØylBeŒ›A$Äúe9Þ¥ÿLD—^t" Üë…qh]™€çìN`™¾ % m ýT"ØÂ¾£–é^Œãø4&zFGÉú8Žë§1è-€°ó˜ög‡PiR•EMiA U7áûS9¨¥¼0ó @ÂW%#ʹÙå@X¤]b¿Ž“¨ ‰ÂFuØÔÖDkŸÞV TsÐÆz˜8Ɖ8£¸63¨¨k½Žf’õ´·Y«WÒ¸Ž°íß8ŽwЯ¡Ñ×kÁ@§f#Í^ô…˜Fƒïwi!.5;SÒâcʬ2ébt¾ÿ:ú™˜óM˜žÒîHt™ÓZL¤ï¦Ìør"*"x#ÙÁÏŒ'âäÄ«|™“že„ ãœ;wnåÊ•K±*ŒŒP¦påÊ•VÂIox½ZxPÄ9ç8zäè-[n’ÀÍz,¬]0‹¸råJF/)<&7†»vRT]Ž·o»=ƒ½W°Ú¢É݆ÄKúZ†e¯þé« ØDÉd*íqͰÎk<·ßߘZyöÞ³—¿¦Œ¦„R/àÅ9ï²xZ˺Ýóçe91 ]‰ô±3™%[Y ³0à [¥;ÌZÂÝÐì–:@ÑäËÊz†¢ŠÜ­¶ •êA‘HÒÕ<á¶ÎwŽ!G+˜A®ÂSýN·ošôç#m—‹Ý€6˜e°OɲG7Ÿjè~Uƒ6vt1eMvEWeøy¬µ¯ ù¤ ©†ÁTþeBêSz`©Nï©Öfd‰° Ó_ÂÕ «Ûí.Fzh~¯‘ó©aÙ=Šr–ÚÔ7ÖÒŒÇõOg¸›fº:…Ã}³V Ü‚8l•üv£d¿ #Kʦ5 h–”~8é˜Z{~‡$â úŸäHúZK<êh q¬'Ù0€Œjƒ Ý<5§pJäÔc½ùHô©N4ÑC³H˜ödœÈ²[˜OþüÆ0ª9,ië… dqúªU«¸{"3gÎÈÆO¤e½dŽ?üðÃ? Ôò‰_¬FŸÛÿܶíÛØ¯gÔ¼íöÛ^yù•W^~eÈ@vqGõ¶cÎ ±„N¤A%7€»÷ÞÍ2W˜ŽH,j%@e'n^Fo–¾ +W®$Ë xò½ú§¯¾ú§¯Ê0š\±s™¹aÊ[?·ÿ¹Õæ ÔÜ{ÏÞ½÷ì%Ç 2 OËf²•æÛ)/_ºt‰f¬B¼Ü—Îäx1ÕÒ•º‰mIJ²˜± Š^unâ³}c´Ð#²N¶"ñäS… ̨ÔlÌXQf_ø*éÌn>Š í’ÔV'Þ̈35éߘZ±Ô¨[œw(³Z‡*u+uù`vª’l¢×µ=%’<$ô)eF§åÛÚ©²HU˽ʫ0¨©òpÜ×S:ʤÕ|<8> t¨cø×„7ãõ)ÍPÊŒ£×Q17ˆLîc¬ ²¼Þ RÚ‚t1’¡¯âQ%b£WUI¢tIÁ@x©§zŠNRV{Òr \Ðã­`†ôÆú‘Ð…•º—²´ fºE6•.I§`ú Íqï`D?{“ã8®p]ж·,Ïna¬ƒQ¿æ£P…=£2 …’zDzR]”RÆ‹.8ø9I+âÌóüöm·çÈe¬à­M1mTÄ:AbÆ‚â&Ê›&Uu™d'pL©Ï!: hI'‘¨3”–㬭vuñþŒp[-ª8»¦»E¶…’SÑ€ : ›š1 Xa¤1H©qæëhlÀúÿ ?~ QÞHw…I)¦%Ôla¶‡ÙÏRÓ’ñàx'ߘŠÙna–*&DZ¾Ã¥ÍXöš$Le»€&nÆëdhŸYªi ŠA3 Â]Vyx“ç»ÔõÔ0`‚ fèLÈ~ªÃ¾±.FÅá?à ‚HIy•$jt/žz_£7Oc”êxˆÚ)Pí«t£Ð E ÒD7éL4Ðï©ÂfqÙþ‰7U©È…÷+hCZ•ˆbb©ª™¼ªÆð1Íî=»÷¿¸ë­[ÙEÈkUC/Ò¢lQ|,k"®RBuuË-i¨Ë/>22ÁðÚ™z,;wít+a,(µÆ­ñ­/&/ÎéÜKƒ\èè¾"¯üXêƒð°mÛ¾í¹ÃÏmÛ¾¸PRh9sÆåZ·mßöÔ᧘¼eøôî¨8ú—û°jJà2·SÞC'&ì¥LLÖ0¤+ežB‘­„/)­ÏaúÅ%àm›W7 Ý<Ë2Š˜Î?Ú ö ø÷îñEÏ ÆÎDµÇ¬Ñ¡3bã@]Ï¥aRtrŽudœŠÍurˆ¥ù¬aB‹tH  ›!ªÂœTXŒiEO,8ÛIÕªïc 3¯ãæ “ÓØp [tF³Ïê˜&zºBc’ƒ?(ïøçãê=ú§yL^µ=4©&„lßk˜x _ÉP'ÌÓál”¡?… ;1•¡¿Ó54Th›‡-ÌPm ߣ “›ñƒn>Š2"'#õq¬'œ&ÕhÙÇq2Äia¶ø $ %‘Í&# $xÐ1œ¾ð<&¤l¢·ÓºðÿDÍ&Ʊ¾ƒº¬3n Ï!tÉ0yŽª\l0%Åm›0ÝQÈÔ¨¶&”eRÒŽáX¾¥ÌŒÇi—Ð f¨^¥ƒ“:G¨6Izkb¨oDλM÷KôýŽ(X$ÿ<Þh F†Iª4åƒ ?}Híq c:k pÖÑŽ¡‰ÝDé4DPú¬b3[ñk0h}Ÿ—.Æ2g÷®Ô¼¨¹ö4Öû­*O‚"ÂÎÅEÍ™`\#†{ óCóå—^¶^Y±bõ7•)êø¶xß³ûΜ9sáÂÒ ËŸ¨³†ˆ¾]æŒwìØqÇŽ#/áWöܵ‡à„Rüú?Ïkr$& ŸÛæQÃûN£>û̳ôÊbµ€Eyw¯ƒ¹#„)u¡kѧãÑÄJjyD_L÷'7É’KÈšˆH4}QbAKH0íé‹q]7 º²²³­P¶€—m'PkÒÚMÿ² ½¾ÇºýHÒʼnd²£éVÒ˜°P?äp˃ÕO£…™†Îöi(¥÷DŸéüˆÆbÒ°`è.!„¦€’øH2J/nÆ6`z#Ž“] ³µ`ÐÉ7’ð‡¾ Ó-Œ½…ߨ„馈P3Ô ¢(î$ìi¢§TÄÁ@ _3ÔÉi¡¾ît6`Sð} ÒíPF´[a›¥· mŽ¡uó0~oÂ:ò¤àh7ÐÏPÇzÞdhn-ÌÒñ3Ý@m<8®ý+vöÐÔ**zÒ)|™~ª³ËOH 3¢jŒc=÷­ûà ½.}*1R Õñ#1á™”Øx”%óµxݲuË0o‹o‹“£ Yÿ\ÎéQñ¨|åÙgž½ëëwYÝQvíÞ•›ÃÝfeY¶jÕªU«V]ºt‰¢çz½N1¥ÛGEjÖî¹÷ža|÷Å'bIx…ꌲÀ™ª´ÜÞát aj"¬IÌ×S' á0iZÅlPbà§gâ(dÙ%´Ý6Á!´{u`¦ÊkýJŲ(¿AÌV5\Œo–뀉bQáÜÖ'– è±Üvq©ÎŠA;52Lvà$—B5¿ìwqj¦ûhLëÖ•0ÝA“d5\UÒ%3×]n‚º­}t 3½`@. ¬ï+ç÷~ c?F¿Æ#øt ÈÐ¥y 8í:‚<œÒ » ÓDÒ*PÌAo¦"]ßB"aê4"w)mA:H[hŒbz£]Œvs YEÌz]œhéÜ¡žj’>ph}͸ª´q }ôZ˜éh ˆ®J:’¥ß?H-Œuƒ´ƒv ZÓ娉^7[.…gdš¡?Žõ$5Ltµ.šK\(€ÖÙtc,[¶Ìkhçµ ¨ÈqNpCJð/sÌ«iè“OgJÎé’¯ÈÏ•6}êM%nÙºåå—^¦Þ&Ã`'—¥²û}[¸=»¿^ðD>}ú•—_¡ê ùVì¸ùK÷a¸çÞ{HWÅ©«.k×î]9 ´¦ÊªË¤ÚyÝ.¤˜ËûbNª61s„2ìs=𬾉©+S8 ‡ÈP†¾Â•X«[-ðKœ¼fìTÄ>¼·ÃV2ìÖœX%Ì‚4Ëë:Šg‰øD&<“¢Å¦DÁ™]2 «Ñ”{GÇÔ„Rp}©ŽGÉá=Ô˜šj\$g¤(AGúRÂÑNQ|ÖD¯…Y‚FQh«dÀšvÎò:±¾Mô¨=5…VÝ|”Lá»ÙŒôÐìà$m(H¥^tü†Ð¶dyU1LÑ®’j{B3nŸIµ®Qe¬ôâ8Ží.NLaCMíœjÑò(…ÂZÅ…+ë7`šok ³dc$a!Qâ;1¥¦%'+ùIr¥ M¿æœ¿d%3X?¥µiñ&¬BY $vŠmÚš÷«¥[ìR[ª§½þúëo¸á†n¸aÁ %àcʎ↋/I(+O.]ºôþûï¿ÿþûô5ÿÊŸrä…#´P>txÛ¿ÅMd®Y³ÆÍÕ 3H®uùƒ)PN"røË1ñöÛÉE#¹Zù°ˆîϸté›Â3~‚.ø´5+&ÖÛHà©'ŸÚ{ÏÞ µ1À«ô°èÙG¿û(œêÌ…q¿îàDì0À 3P Ë‘51eD‰Lêœm,HÝT0«±oÝ-á#ŠlQs’”hwýÖeÔZ@ÑAmñrSD IDAT]ÖÙvÂÙH*—,®ìŽQS3†¦•=¢'"Z 5ÁHñå-ÍMô˜å 'ä k}R¬è¼icPi,§+Yc Åè×0Ðý¹&øléÿMX§6Aª7*8#%­Ò¶è2Ä×ðµ³ÉUEfé ´`¸UsËMAÒňng=B°Jͨ©¿XÍ “?Ä—øÒjЧOcÃNœ%œÎ´\¶…YÑ×:Ò²UÞ·µ;8©KJÀJié.Œc} c°ª “rÏOMÊ=ÖùlÊ46aòõ-^§þšƒ×q3± zªÛ54„™_¬ZÍw-æÏ*7g6B·%ê~<"Æ•c™Q»xñ"IQîÜyç`0¸sç/½øÿôwÞyçwƒáq½^§'ôµ—|caM0†Ü f¾YñSN–å;åé_E ùöm·³i߽߸—ÿ'dÝ÷ì>†Ø‘‘IYK~Û"`>Ћš~/˜ý~øÛ{_'Ô¤ÿY‚ôÂá5Ë4GK”ãô¦#>&º³R\"ê‘H3+›ê¡ØÉ#òÞÜ4MXJnìós÷v ‹‹Å‹r“ˆ‰ ‹Tˆœhƒt:ÜŒ¨9s ƒfDàŠ0T¼j¦Q b¡­xS’¨¢FLPÝ!ÁA)ûã·0–aRÂÝ:=ê&—¾èb„’š*k˜‡ìœ‡<¦þÏkñæ“B'ËëÈCÖ‹ê#P0ªBU/ÜŒ—‰öÜ„é “¯ãæ}Ò©æ¡ÒÜ)oÆZíÁ“ uÒßöTňŽÚÙÃ($_Ák‰? ‚KNR’8–\#jhÐÍ%¬"F”.ª…™féz©¸“BØfZë Ù@_õùÊc:¸–ðpEoº/3›M'6ƒÑn>ª7 Ÿ ©è¦@°¸f#„X;8²›UܘI¢ãsŸûܺuëÖ­[Gûn ]þk4^zñ¥­·n•’n[]6øÍÃ(S¬°˜ëÜË$N„–LÉ rP!):zä( 0ÎÑ×nìEºë©•¦<Ž~ã¾o@èb¬8˜ZÄPÎ’ðÒÊb Ê0šÀÉBJpò{†/}qcM 7½sNcÿ¾ýûáë®»îºë®ûüç?ÿùÏþºë®³Z+Ð$…»¾~×]_¿‹²M„¼±CJóúhQú¨T¬n^±ã‘‘ú÷žÝÞpÙ=þ’6e“Kh:+ÚìÞ³›'íð¡ÃŒ»÷ìÆ2O˜Ì :L¸]¹víZâÏœ9ÃmתÇíÛn?ô¡wìÀˆ­ª`¡üæƒ.\xâàœÑäŸRé‹°²çÁÍe^f©ÉýÜÿèþGå+d>Eu/àé^_¦]b5pZE¡¹XÎ>²iIj–xjçÕÂNJŠ\o©¸ ÝT¥‰v` ¨ÔÔèBR™v•Nô‰V±jü ®b½¶&@¤Ê4¼T(”Ü\¤~ìä)lR½PTP¢”Aù+ª…äD“º@þ-ú@sÖMدVíŽj›Õ×­}eÞ†Ùúu|lºÌRØÚÅH”}|" V_=ÊG60ÝfzhÞ†£°©é “›°îuLЧŒbò[ÒM˜žÊ¿Œ`B2«ì¢Gæ«ú´joò%üL…¨îb¦ô‚I{:8Y+ÚUNlÄñš´Q؉¿<ŠÛÈd §èÍ”º¼I–µ†ÆLwÒuЬ)o؈|Õ{hÖ€®rÁMé¬Zª+ËÐc"mÅ0ÒņZÑp S8Õ*l€b`¢>yóÀ&›1Ñ¢£w'¢g!nº¯Oé!ËjàQvÜ•Íh›˜þgëÏòw÷wüãËUxaf™_èe"´µVJQ ÿH 7øE¢7I׺㎨yR˜6\Ëqþüy7 %E%EfüµüÑð¤ëœ*˜5kÖÌÎÎ/$‘é:÷d†<½;wÞ¹zõêÇ{œ±ÀCß|H~ §‘H–eœä9'Œ”]nÜJ0/ÉçóçÏÓ/._¾« ¯ËðÁ{@âN &«ý%¼ƒ§›nº À©S§HD»vïZ½z5VŸÎÆ~óA¬Âœç¶XÀ ±n;§A«§…Ñ2)u27‰¨ìtÓ9©(kƒÑ¨Ëø]÷ý©‡¾¤£Z›tv3¢,W ÔWD"·7I$W©/*)ÞÀ@K¥)yŒ€M”$mK!™!¤Ýb¡Œ€ö”î²Ó"ÐidÚÍŽn §€±n>*ì“”7‘ä4TÃD7¯o ¾?…S}4Tð‡¦†* |}£ãèO¡YZ˜%ÔdEèNÕt¼¨;{ƒÅSMôzÁ`JG“Shákõ5 Ãä´RÖ¨Ôf,;†zÉNœýKôf0ªšQ°ª…^WãE„O›ñÝà%U × ¡p_´EÑ/,ì öEc §€°‹d3–uñ¯©_ q ÿ?wïÛÖy®ùþX'fdË‘ët%Ù‡÷¨[ÏìžñAÁžÌèæ€ðÌ`(;š´tâ8nÒÖmš¦ÍΟf·qš&NâÖL<ÊD€æb ÞiBØ7#Pa¸;p‹=›Cïêì…ò¸mÒ•:•M[¥c‡çâYßÇ‹”,ÿIš9‚@’)r-ri=ßó¾ÏûÉÕ·TÁN—wî}p¯¤’HÝ%Ä}ùõ2÷=¼ïÈëG^þñËûÞgq×;Æ~‚Ã|Fv}‹Ìk”‘×@ÍÈk]µµüø·ÿÁßüà…C/lß¾}ö?ÍNü» ¥œ á¾þ¯ÿèÅ}ý_¿p)¼›eO±„Ür‹\€ýìïU©×¸ÿ‘ý+Ý¥W n¥­úuý“Þö?üPÙûï¿üá¸ê!]“éñMÎ"6ºÇ.éŽçl8AÁN2I;Z…n¼,v+ŠÝÕÚÕ¼\$n8g‘áË‚I’ŠÄ¶tåXx¨ŠöÂrh˜Ð™pÂC:ó3¡/ÝJ$g#4êX…ÇoF,ÊN׳젦J²:£D•HšaA«’Ìã´êLšjg9ËH……”õŸkk„f³ø&ÌdFæs*Û±Á#PÓ´E0ÊâÖ¾§©yŒ@µ+ÒNdcó•vÇúÎ'òÂúyªóP ¨Õ™É2R É1uYTÞ%2w†í€@:>“ªA(ú]iÌ1ž¡àù$—NvNAïÕiÌ“ fÅŠq&Ï0§,Ëü0KÆ\×RO²Œ”HÒQç¦86»b†|Šv6Ûòy6^KECvºý„m,v˜¬¢ækïáÿú_ÿ+»ï¾>Xzýµ×¯:¼¡›‹Ë,EëÛ+Õ#­„Dw1—7„ÏG‹–Åãqûü›6mºxñbd¾~íåbgHýìÈëGôÃ}ﻎ²ª»úN ª(j3·×Àl{×Õö½ÜqÇÇþñd2yîÜ96…œrëÖ­øÃzÖýIßž÷ÆUtÕ È53{[†«a¤«QZ¿öØrô_ÿú×À|ÀÕb´UHÿ6ykg¤…éjèv³s _6ˆ%úõM{á3×éöZ(´¶c!1º£ªÍáµÍ }—©^ÁXÖ­´Ž#<¯[íD·Ñn‘XgÂÊAT§šÄô‹EGÂS®wFTl…ä;sR!°üÒtC“q’Ú7˜’æLœÉ¤7! M§¨÷€24tœªµiñ!ŸÉ÷ìsú"ҳד»Ÿø´6W+ž¯¦ªü '"˜g‚yéq*ös(öû×\TqÓ§Ïšsxd±3Kg»‰DHmq•s±9ÆN}U•´†q‘ çPÊs§ÖÚŠÍtõ2CáeC.õNV”MdlØìb3ä>iO*ŽW1BªÕN;âïôÃls4g m ucmŸÂ¯ëÖÜN¤b5¿BrŠ“uŠ5Ò°Ðb¦Æ$¦i(AL¿å1R%YgðI=ÇÝ¡æ6F–‘*™q¶ÍG Õ«,{2Tk¤ &‰2êz˜cœððròÒIUI¶|öZ”²$Ï#„{ vÂD¸¹ÀHE‹eÌ›¡Z%LíµiHs\åeñÈivÁ ¡¡ ¾a¥e÷’޳âã3§~ª>ëd¢ÅÐc¨mµc¡E~Ýä†ÈÔIÕô>˜à°¢ÝE‰y§©ÕÛTc]ª¨w‡åI×m-¢úþÓ§OGîúBØ·Ýv[¯ÖcÆ 7Ý4.â¶jQóégž~ê{Oibá[«÷uuœwÝu×{ï½wS:¯š¬Ð×÷OÝϵœhoç/Â#û²ð–÷­F”8¯~õþ©û/}téº?ˆ—üòjÕWuûTx_mNÿú:͘ð²7Šo¬Ñ{þ¸—½üã—e¹÷Â_°x H4ûÒË/aä-»«¼xèÅoüÆMgœÂ•N²BYt´¬½…܆½1ÙA‘n ¡È@gq¦[t 6ÑÒíNC+ú[mˆ!Ûñ,~¥ÓÍuhe,2šsÏI ±¹Å@wšJ'Âô¯eS9ÃIÊ“gbÛœ…HWñÏ’›ê.oQ5з²gÙv>v<À«„7ÜA(×Ûb Ï'™ÂWWÏ ±„%S^S$Ì çJ½ç¸%g[ /CµÄY˜ ó<¡‹xÒ'}&ë0“gÛ˦]ZHQKSc\¢ñT Zñð·|É| ÿò+o›qP!™¥jJ»M`Šc‹¤>Ö3l>—¢Yaм ž'Ùb&ºÍ{Ì•ØS£¦âD˜×NçcÇKd’øõXQñg5Ò2Zjdcó¡C!e!7`”À9c—8hSáôk‹ :­±‹Ò4‘~|&Îù˺ K·{ãp™–½ÅôNelÙ²%b4Ú÷¦vÇwØoŸúÞS«‘N;з_Õia®oRÀ‚¥èæýS÷_韸‰3 8² ^Ò)Ô\¥õÕ(µZ-UU•ÕüF_Â$Þi?Óë¶¡_5×Ó{v¯™HC‘ø9òú·änjÝùQ»$Ömrml^ê¡?üP €ÕšÊ« ÖPÕºóšE'J°oqÕ•³– , ô@`ÙAåÉVU-Î?™±‹±Ž¤Âd³t«~b9#êITbô x¡{ÝÝ4º’4bædÛî\Ûú-ØÁÓÿÃ+•TÜ ™bØ:­„*éìNÂyúì­sŽq'";aIO«= q<¶Rï`èN « éwì_d‹“T¿MåÊ I̪2,[s–Œã¥™3RÛPJ3Áì"£†ùM–4%’¢™æx)*I1&`ßRSÐôüfZÐ)}·~møùŽéD”Ù)ql5¬<ŽO±´Äp…qV5%âr‹\–‘óijsŒ§ð¡)> ù §ëäâddý#ï‚:3*ò—cÑrãáé)ÆêPfC¥M=6Hè¯ØXÛa[¯6»„2,8©Ú*7 X gilš¬+y‹2ÎÕøæFÖô[Ó€ÆÒÏ;wfèL¤ûµ¯MØùýç¾ÿðþ‡×ƒ[–Ÿ¹DmeeÅÆ§üô'?ýéO~úàC~´ñ£›8c°že車Ì/åË7n´=Λ¥ÍéãžRúÚI“«=Òn›ÜýÓÆ‡††ôöª¤üæoº‘dûÞ×î¶N¶›*·ŒyåÊ•¾äëè8FPsßÃûlÁvµHðC/ºÖ|ÍÞ¡¬kºÖ˜ãŒ¾bw:tDs[ì)ÌZ·b¿0Î.«wS-v›¹[:ëâkb•ªr_€´´A')z@Ž9H‹e†=*¿C:¡ën^pÎÈÆ¢åìA%¬Ñu9<¸¡Ó˜ñ¾ŠA;1$;¯ pŒ€3a建¿K"ú™Y{´vz²ê€Çé-LäHS+u΂ Uªhå³ú¡Ä¨5ÒãÌ• Ž'î5Í•)§Ù•ñµ<α xÌR䜇/Y,Ì”ÈeñýI¢qs:÷ØŠi[š@ÁgEs,†¶ŽíæåST+ä 1Ns†N¼z cÊßB»Ú•*Œ3×bF]ÛÝ\$T UiQt²^½Ý:JѬ’‰C‰³´â±íBZä¦Û § 2Ó K0b(ÍÆhÃ¤Óø\°¼©êØ.»Ù•».¼OñÚ´iÓ]wݤÓiàÎ;ïÞ{ï=ÝÚÖV0YË7·ZkÍÇ×Y§ ¬Åã¾Ü«—êmٲŕ5E¬ÃûŽ£¸·WÙôØæ¥½ÑÿèõÝ\ìì]ï½÷žËªulçÏŸ¿Y-O·}Mæ^yêæÍ›])¸ý€z]8"vY/…â ¨V%üð+‡|õ€àÿ–[n¹ªGü¬õ÷8# Ú€r6œUDZ(:¥Z‹¯P»‰±$7ºÁOãäá/ö!vöµ\øtÁµ§´³î?ÆWOT ”ÐW¯ËÉV•M¤ÆŠu›“E‘c]„»!0EHê¡B2>ÖaÏ*á&œÏÜvÃS…ÓÊf¬P¦½³åî0bÅ)6,† Q6%å`õqçÕ“Œyør^÷ÁãVR”çx eqš+q³ÈQ'Q§˜e$À¯‘NSó™\¢Ç+±'Ïñcs$“øóªZç©ÖHxiju³Œìä­ãì9È¡ç¸_%~³ŒT$—UÅ2ÉXÝ3Ut%œ¤Ü]gA$¸e´µ-ãg€'ÜÃ<ä~àCœÉøyj%S|¶ÁÚñØJÅ&Øè1çfPèÄœ™ŒkÅËÔ Y/‘±Â^èp´fËàÔ´ª:LÙ$f¿h'Žè™}¥÷vÓw_¬û”½=õåsÚ›Ÿ?þ­é·z‹Š½J™óçÏ è^öÊ˯¬'\zí%Ò)°jºØyU_½Oò™ŽáMgoÁ¾ç}ÑÅ­Í®ýé¸?´ˆø©-0¬VÆ´×ç ¶Õe% ¤¾c¯BM›ô¢«÷±¯=Æm«öª-N«!Á³]ð¶g±štZ[Fkt×fq4±=n|m[êl8wö†cÎñd/*bÂLLÒÍhËÝIÑQ°Œ3ÙŠPÏ6@ªËö(œ'ÁÙ »«ÊÖZV!*Ô;iÒEãng:c² á¥å*“N£ §°è×3T+4B–CQ Gržm¥ð}ùP¿Jf™9á·}-‰]0-ÃGgÌ¥@(í‡CÇem)ÆFYT-wÇS Œ-ŽÇ0œ6ÎfAË ƒÆ7 ™¿ÇY ¨ΪhB£N:Ïq™™8³ò!Æa–‰¾§ßR«2ÀËS…mfø¿Ü"g²¦»x–ÌÙ÷°J&ËHÕ ðØÝLšm¶pÇ«C _J¥™,~ÅÖ}$mÈôÇï2i¦-=ERÛÖo¸õdz gÜÛÑnæbgâ¬ÔËj,ή„ÛPÃAejjé¡Î\ÃÚ²e‹[Åê] ¾¸¦¡Æ+W®¼öêkûÙooî=ñ¹gŸ{óØ›–±Åb±z½n‹iº¹³ûÙߦ­.š8Ÿþÿæo Au‡º¦^]/›YÿÛeüÏþìÏ€­[·êÈ]í’Û¦íÛñrèÒÍ›ÛÒ{ãÞ²e‹û.Y„îÛPtQÙºM¹Ÿ£ý:òÎÂp‹š;û"–ðÒ½Á¨Ñë^±/íþwÿ÷äƒÿïï–/žûàÿÚzö±Ç6w—d¯šúfíÑ<²¶µ £GìS^¥®Û[t-:莠D\s¶>>41À¡¡¡+cˆc‹¨eÃùÆl•É×\pKÖšå7yÀÑ)¢0lÙHmËñŽÀ CCŒÝnÑ:Åw†üä9`ÚŠª‘jŠq‚ÙY&ä™'×òð…Ú é¡Ô¼4YüÏž‹䥕%ØWFŠò;3¤VÇù¶6ǸmãiuˆåEF=‚a–4j9¢°y™¡™|˜9h¬ò”Îm]÷ÂS—L‚Lò¬V¥4Gö™ëá¤JøE~QïmšZ€'­iîæÌ{¸¿å¾EöØœØ럧N±aºý€½¢Ì§6cÔÑw»S1Q©v·g[é¦Dï^ó9ó+@ÁÕæ¨s´ÿ#kÜÑìœÜjj‚1µå"ðÙ÷†Û×Á½áZö?ÿþê¦,àüùÏœ9s&œ¯½úšeœ¶$øæoNÞ79óöŒ8èc_{Lèe»eú¢º™=ǾS%}¡7¢ÒÛ¥ò²^"œ’ÑZDܸq£°ÓÅȾ°ýæo ;›Í¦6íË8ûŠƒìqÚsìKƒzsµw£/pöýLûFºê_›Í¦¾Ðû¯Ói6›î•Ó·PÜWb¶Îñ'÷aVpÔ÷ZµØùØ×ëûnØsìË8ûîì«oܸñG?zh·¹ï¯ßÞtûgƒ3ÿOã﫟Y¥ÇYî‘ö5Tk8š ²c\`E:…Ф-—”.¦“©Ôíi€ƒ¶õ¨O±Ñ‹ µ$t[ÚZ<¶\¶‚¢e½1ƒš¦ÎªÉ2J¨€ŽCw9,å‘6íLÝ‹N'ܯÀ¢¦ <‘Â69sÏ->1Xg!ŠE•yÒ0Bʜ閅ӟ)šÄ¨´w¦hêJì©3¸“ù³Ld¨ž`·€Á')ÔÌÇŽÇñ*œ®†âÒÀ'9ÅI{ë÷Iêÿb‡:Ád˜vé—Ø#ÔÔ½[wv@Ã'Rç&ñ‡YäW%3ÍfÀÔ³/Ó\©‘R”‚I°“ù0ŒUê#öC>Š}ZŒo{…ª#”­“Î2¯£Õ`«¦Eãx‚ÛQÓÔj¤5î録˜bLo©i6‡²¬,¾§–¸P©Ó)ÆòlK1&xË2²Äp<¶ö¶QÁ×´˜IÑÔ«Tɘ >gusVa'M¾Õû ÏŽNx½åSœt­ËÞö=¼ï&:é|ÿùïÿìÿøgÿãüŸýìg¾ïû¾ÿûßÿþ÷¿ÿ}ä‘b®v°A(VjQóFò ¯{%‰D"‘J¥þâ/þâ/þâ/î¾ûî»ï¾»?ÿöã‘j­û¯nLÊ¥K—n½õÖ£?=úÈG"a™òÊêµ^BJGù$#`õŽmܸñVg}hVäªÖzìk)‚Û½~¨É®± ½ùh׺z³3qa‚—‹=½´²[tZ¡8q`˜L®Éªµ²6ºs= æa‚¨‚Ù‰'ŒìP¡Ebn.fQrDsœÄY11&åî‚0Nª­„ØWEÀ IDAT8Ú.D8ékŽÙíBÏ™¿œT*²k(šb,‰¯Û¥Ípžbƒ5ÿ³n2u[ Ä™TëNY›–N™ºh!MMï§ .CU€qˆƒfÐ C½&Ö°)"ÖfÖp¼Á4»ªdäak»wij:`hžj…džã-fv2 ÆJ1V%“¦6Î\Šf†ª<Ü5Í©ôéµ Õ,#3°>æãÌ ³”6oÔ!z&íK{” fw×Ê-fŒïAöãÌM0«Àε*™Qÿ5ÿ¹Î‚NSç¢Y‘EFKd”¤&ž½ÈhHµÛiÚ ›:Òb¦JÆÆSÇ™¬38ÎBq`TTÚa4 Pa§öu\7 Ÿ¤±×È™ž«•e•óTfn­]Þ!¸Êm¥cÅ5ÝÝÖƒ½7î^³{—üP7 ÝÅ À¹sç¾õø·žúë§þ꾿ZZZzÿý÷ßÿ} A͵u(ïXw½¾¦¯}ïæ7}Ûm·ÝvÛmžYwÜqÇwÜ¡Óá¾VÀ8òúkÅ~ÕßbV$‰,’þí¢r$Ú,‚nø¥Ë¿oʤÊjïÕâ©×S•]O–Ëú—°óš,¨"o¦Fë¾çë,Õ>Ö ¢|%g¬Ðn ݆ìÝi[IÅ`?ç[WøÓè²øÑB¯W³šèv¸5óf†Ä±7S‹4?ë;ÚWEg &Ñé°v=[4%ÆÖ뺟ß2Q¬úÉ𹜠–¶ˆªÛ’fËŒð«2l›²yª%ötéÃcpЙr)§3˜™úœÍì´_¨:ÁìÃn×ÞßÍXd°~ëN™±aTlIVDÐqœË’*8ûŽqà G ,I‘Qܨà¹3ÎÊAkÑáª(ZžbƒŽÜñ)´–£=ÇŠDU[>@é;ì»X =GTæUšPŠ<&%‘Þm=­êØ%Κí£þÚ°.µNä¸k¼•sí…×ÙÀ]S©Ö­®Mkܧµ¢·üÕjµdqàŽ1D† /\¸°yófëu åÅÀÀ€ô´¶ÒõÒ^²¨i_½ÕjõºÐ¹G~éÒ¥h ‰ehnµše´¹Z×ZªM$ÀŽ;€Ïþórt;uêð«_ýÊ-]Ú §ûæGÄAî.Ä&–è¨úV,íYX"Õ·öÛ+è”17oÞ¬WqO|µ‘ÿÞ:¤ýa_·¦¾I&}ÇN"¿®ƒé=q½´í͵šg÷ ìûmܸñÅC/ZÈŒ°®ØˆÆÊžx_'Â^›*=òÕW¯§Tëf Nb׌Snmôð9[•Jtk\Mõ5V¤0á½ô ¯;Т¯]Qb‚½¶,aÝÉ_tžÓ”d­Ž)ÆBmع Ã&;Œ3×M¦‘ØqßÅJ…{鸩²ø‰¸)êΤ¨É‘ÕšÈmgø>$ñ[ t|· ¦Í¹R!™§šÅ/‘FX0Œ…Û‘8“’^?‹gr”EÍŠLqÒh8Ѩ‰nåªq<à ‡f™PQTÈnº—£«|’·€iÈP`VÒ›µ,þS<-4â¤PßÍ@æÙ&N<Ê¢èl†ê'ͼ Êê )‘QpJ6´ô«µ8ÄÁx¨º ðZÌä©f™æ3º“³]ä3yŽçñœ™0I» Ö¨3XgPÞÃäÕ ­pZ‡-øÔÛ¢µøt½6¨Y4n|uJí=q&-ƒT•5ÎJЦ-ÛÊËÂ耴¿É¥hªx`®1ûç“ëS)qèÑm·ÝÖ7)ó:–’C®ïw/\¸ 8üá~øô_?ýô_?ýø·_YYYYY‰pÁýì·†|.pKµ"šú×kb ë)œFÊzîSàï½÷Þ{ï½×h4~ûÛßþö·¿=wîܹsçVVV\ -M¡ôí¿ª þÈG"9_×·n«¾jñöcJAï¥Ë7nüìg?{ûí·ß~ûíßyò;bœ>öh¤åiùëGβ¿Û×j~û‰oÿø¥ÛÏâÆ¯Ÿë.ÕÒÍçrN5âPÇ-¨hêúõ»)]Œî›B£AsÝV Åè¯wæ"òZ:¸k2ž Q^鸸µ uÒF²B©q ¢¡n9C(†äÜ [œÉŽ{@øT óE9ÎŠÜ T ôÂ\Ážf…Ó)šPLS“o{œ•N¯]°&öié£nè>I•pU·´‡„EÚ+:°ivM±AH³Èh‹ CUõ^ùçâ`‹`œ9•vwsBþ´À v <ÇýyªŠ]b8C5kˆéÛÜ×bf7'ôŠy¶©}Xá´N9ESò"u1]ÁÃ~˜³ÅoØ.U¼+$SÆåÇ4 >IU°Õ”MQ3|ZïUYuòñÅ8“{9J¬­Ø]‘ØpÏî䲌èÚn1 ƒ¯³ÐjTÚ;+퀶)q&Ã9 ã*8éâú°YYˆ‹zÏ­nËÔ]¦ú+9ÝŠþKûz•Lí½õ3Ίõ[¶‚© î}po„ŸIœ‘`¬Æb÷?²ß²É5‰]ì´0éb§þ¯NçjO²iÓ¦M›6ÝyçwÞyç_þå_þå_þå—¾ô¥/~ñ‹_üâ?ÿùÏþóŸ×[q¾{ÝÈñ©ï=eíÂ;×Ñâ m—ºq.\XçHI_€Ô“Üzë­:ñ¾Pýé‡ÏÈ9 üÙŸý™dÌßyò;×”“jñRÿ 2¿ýÄ·Uöøá~¸qãFUûUkýãÿøÇ?þqC÷Š|RºÔû^*}«â]5Œ~?Œ¤ZºŠÙBôêçU왪,w—psÝŸ‘Íu¹J.\ÅñZ¡S¿ SJW?Ñ‚A áàfÌ l1á'±b¿N…6\‰£©pbFS4Ò.Þ™Pðˆ©yæl›JBÙµºcДˆ•³P¡¡4ǺC+•ÿe´¾šêÐu0ÚØzISØŒãUñ4y¢KÂ@Íš‡Ú²“S½Txy€G™g®ÎÙ€1é]¸”|è@[†Üa6Á j¶£,æÑ)¶Ì2Q#ý…?Çx–ªGmˆe;ˆÒbf;ç7x9曘EF¡1M9£,¾Ã½W*I±^HÕ› ðægNÏ?ÅÉ%†ëF8¦wµJF€ÂåØtèõªYÒ`žFè;R•Ë+™=L^&ºÌ޲(ݬ-óJjy¤‰Q“ëPè_‘Ä ÂØ4 Ïsäî­œ ATvùQÔ4ã=8q›øfë1–î×½Néb‚Yq³Ê9¥ ›Ïš3ÓPêžN޳í¦SŠ5¸c_e‡Uó»X¸†‚ec6—±7šñð+‡CÐÚØ‰›¼o’ÛûÙtãÛ´i“|q·oß  {„Ê:»ßÿþ÷½·~Ûÿûðýyì/?pìÍcŸùÌgôC½v¬bóæÍ=úX¤Iy#Y’7²,¤õÅ3r,B|b›ª¾`Ü›YÖ œÖîgÈ$räJš³ßþèÅ­š7.qÒe¦ãùÝï~·ž7s5„ÈØåjš ·úZèÈÞ–g¡ûW¬ Ç*`Ë=.ênÁ6DDÇÈ bº$²Ã_±ÃLÊî2ìzêl–°ºw™W^~E®:—èó¾Ñ”õ¬÷ß_¨&À³dZ¥c©š×ÈGûî÷¾»²²òâ¡% r×÷Ÿÿþm·Ýöõ¯}ýÁ½þð…^DZÙ7߆‡ëðúÆÌ­Æ8Ž{7o#aš1ÖÐ5ѯÁ‰ã“ÒÉ¡ìÄC¢Õõ€H7×kok‘Õjú-¥KR«›œagð¼eÛ UVs ­NÁ¹a7á(‡mSJ5º„™? lwÍg2¦I7*]a¥Øäpü¿=@,4²ù!#/j@­³žW» -h–ª3”Íi‘&‰ÍQ5¢¾£G5C¥sLÂlŠæ¶«ëé“LS‹Ó;¨É„O½X1ËÝœ8AMâRS/Ì2‘¥ fS– F:θÆQt¾*´êÿÙ¦óCc° <ÌR••4suÎ.³Íœ¯’[¤Ü®ªf~œ=‚œ9Vd¯ V…Ã,yFR$Ô‡ EÓ†wbbÈLâfšSœ\b¾J|#ÐÝV &2)ü: ~Ø›$›·nJ"ˆ¢ÅuUÃÐnfš´]STµ BÁ˜'agœ•3ÅÌ9Ýí'"Ñîë*«~ú—îø—/_Žàè† 4Kð!Ft_tÑ]uyyYÏ#§…«Þp{I§ûí¡…A›¯Î¹Ys,uý«o­Õ- ˆ[_5\c$i=å\7çuµôšà[H¶_è3ºéPýƒßh6›:44ôÁ¨Ãw—.Q{¡Z»>!«OWµ®péÀ#'ûᇊCë1·Ýv›ûç Ž©Þ?ÿÅÏÿž¿ÿ.­Ï¬Ùàlt'n–ûu:sݪœ²I œ_,tÓÇb—ŠÇ ïmœÜfº^½mË›EãZW&tÛŒ•í ¨ö8“ÆÒlEÆ=ÆÖº·”¥v±ÀÇKQÓdˆAM•…qV:†‚4 gBU„\ŠíD•L…T¬ž‚iv®¤ÃÎ3§‰yÖTHšlBÜ‘v¢nï¦8fÇ+5ñY#]!¹—£UÓ³T¸‡æ=4¨$ë“ÜÁ)©{âL³à¥›ggššiÉËiãÇ;ÁnM4x³L´˜ÑLËvΈ¤Ž3'ï“%2šÅLS“k ™ÄŸ`Ö')o<éTë¤[̈5æÙæ~.•9ÅŽ$¾=wë¨g¦M¼ûx»Îà4»ÔŬ38ËDÝh†[Æ•×Îè‡%ÎÚ)[ nÚWohª§ÄÙ,¾ŠÆF;]¶¶q<Ó/ÏY¶±Lh²Öì\‘¹<ñËz*GFWÆ ]_ðÊ•+[·nݺukÄz¦ïê;ÎØ;õ!X-³"yü[ÿà‡?Xç¡öuRí»6;KC/^üàƒ>øàƒ¿û»¿û»¿û»ÿößþÛßþíßþíßþí/~ñ‹_üâ¿ûÝï®z»Wj1ðо‡~rä'úV¨¹ö/öÜ)”Þ‰»Îž={öìÙ¾ f»ìbËYvXÈ}¤u›sù àÁfñ¿çúçÿç?ôÚ”gµº—œ›¬%“å.\øðÃ5Ñ»~ÆYènRâÌf 8ì°Ø—9—Œ:?/vÇD—mNwþIT^Tp9«É?q†ÊVc¢«¶Ö1ä‹afÌËæ®—3¦B–Áè&RI3™Þ´®åÉ0Eç(š²êLœÉ eHJYSl§ã±ë/¡¬*´y¶ÕðËgEtpš\‰2¤@)ŒBÓø`–ù*If™u€ Íþü({Å+$á´Â)åý&š•Åæä4W޲WÐ5Ë„)l"sW Î‚Â=ªdör4θ NíÒ:g³¡²w çŽúÁ#¶˜I' L {œI“?Zö‘ºU¢!í{ Õ&0n;’)c!¤ƒ¬±¸Ì¾õBéSó d¾ZË⛵®ÍS†´¾E!Ïñíœ9Ì£)jšo©lH L83êWØY‡,óÉW!=ΤG5 mëäž*"Í6œÌ–5s*æç JìñY1m×A³cdÉû$ï5/ÿøe}±§g¸å–[úVÝÛí Z‡Ë?Üúª-0º•Æ 6Üàä†NÐH}í¢¦Ød¯ÿŽ‹—JFsk˜½ÇOØV û¢½ºÖ«¾3úâž{îïÿ“ͽ ­½%Ù¾¶A7¸Ü ǦM›T#µU}ͳêësçÎõþº¶M?ÿùÏïÿ«ûßúo½î}Ûå½xñâÍ2 Y8¨Ü ibE‡©ÁÆñèàœ+*˜›]rÖ¶™iç/Ûtf.Ã*V˜DŽcv Ýu¬ Éeg2ÒÚ Åp:F4Ж #«wh±:Låz¸ 0™bƒ©;g̶e7Œ–gLéŒõvBMMóä‰ÙŽÒ$P³Ïd+œuILSÌSc²E.E3Í\)mÓ%+œÆ¨fê >Ï‘_ò…EFÅ¢¦8¹…óçÙ"}é0–™›cò ‡qp”EMF)öÔ TÞLö¶‡ãóìôvp*`·ç8þÈÁ#¨p:Nfœm%Ngha{…d ?Í6’ø;8àíæÄaò„¡Üƒuc7/¬=L^y€’æg|’u#†Ò@K Ï#€Óu¨“S,¨õ®k1“2cÄ>ÉqæÌà͵+$5cÔ@ §À Õ€Z@P"“b·Aô™8eŠÍ1Þ"¨°Sõ Â€Ä­©XÍÎqêÄkcÑÚGûP!3gú—;³¹SÝ ; -ç_[Ìô–j?ŽeS0}ìÑ—ü²5áséæW _y£øÆW ]ÇóÝ'¿ <ûܳ+¬XëjèjÞzë­?~éÇ®;Ú:—Æ+UâÓÿ-ÜŠÅêÛ>úHßFæ7†|yÃå>Ë }d5úÚ­»¤S2¨›U#è§\Àûtæq^ºtI ìºmß#0¦ÏNøm}š´URöøCß}ÞzÌÖßöެõìÕz3Ñ]°Úu7/m¿³ÐÃA»©gÛÎ’Û’rÁrÎÃ;:Rˆ³Òjó„X£ÇöÖiU†lmfqfL1Å^[mÖˆº$!¡JHiu\=tœZg0ÎA>ÞNn³s ;óŸcE3uå…§|ø€9ÖA9_‰%ÅP§Ø0Í®ÍÝœ8ÊÞÍ'øó£"@ª‹æk­a–†XÎP=ÄA«— íæ„Ï^iPMX·wˆƒš×Ä>‘W58å/\ ðàìN`·€6Î84ÓÔžãþ8ÞQöf¨e¯\šuEL  nRqÒ#°±š1î²Á(Ëuïãgð%“e6˜5C)^¨©ilÆÈ‚‚%†óC,jGg±Äp¿NÎÇKSÓû`5Pb±’K‘äuBÅžQ×Û¡¼«N0ÅKÓÍV ÓéWÿ[¡ 6§ñG³–ƒbЦoÊæÂK˜‚ †¡Wn\wÇËÞïÜÐ+ݰ}ìÑÕ˜J5e#ðÄwž°[ègŸy6‚+}ŸJù'WÅξ˜áŽêÛ¢^eæ¢Pó:n²Y·ß~õѯ¾ôòK_}ô«W¸²o;þ¼[MµDðª}híÖ° ø¸—®ŠíÛ·[ï~ŒçðŸ|E0L¨yð›7 mŠ\Ú65 ]}Q3b½+>mßùkúƒZϧU°L§çWèáÚb׿ƌÇl—Ùl¡«WF}•»^ÚÄjʶÅ@ˆ¬1[I.ÚtGÇdLáÛ #©Õ0{®»; äõjXÝ‚M>QLßÊhPy&DC…T‹ ÅÀa5-Ò• §¡Q#=Δ+œ6s/ž¼’øâd‚½ f%ÂDÆX#ŘÄ/ÀaòãÌíæDœI‡úœÖrËKâ/1<ͦ‹F†ª†ç?ÃöÁA¹ÙË”eQpX'½ÄðnN¨•˜ÄgNœ^œÉólñIxGÙÛ"ØÍ‰yvjØC¯˜ÄÏ‹Zà»wpJ_äÙ–g›äK3û!sE¯Äñt¾O°¯DF®¹Jnàíd>ΊG0Í1ì)NÆñ*$k¤Õ/ŸæŠr]ôþÌ1>ÅÉ:ƒ­@{uµ]g,”+$SÔ*&sMd]{­ö$T*ã£>$ÿI1–Å7ã6½œãã¸bûßuÒÆí¨Ðm… š±¾»÷ÒåÑŸ}ùÇ/ë¿ÞvÚþGö¿Q|#ò‹²AxþûÏ//////_¸pAx¹6jÚ¨›žöî»ïž={VÙŸŸê8TÞvk^nâúè£VœeÛÒÖkж±íK_¸pÁm‹öíêÙçq¿Ä×|Ê—\j/^¼xñâE9;záë$|Ó àn¢Ùj[-%’>]è )vC©+ä)ôjÙ˜œ‰€n*ܤ÷ q§ÖZ0œÕ9˜¶k~›ë±}w¢TÚ Ç!!¤{UÁ sûK(fÙ'i¼ôBR “XG‚.ó—ö€ò7D;RN»TdN=ź1c³&Ž$¤“~%L­T»Q4KeOYæBËço!϶9ÆÝ¤‘g§Ø°ÌP€w/ï¼Ã½ÆËt‡Yšæõÿ¢vZÆŽaØÌê½U¡UÇó/ù¯ÿ™­ç´Ò:(­hkÕ~õºú¹àð9î×ÄËnNœb‡^Ȫ[Õ@•”×f¼èuzKUdV]÷¥ól1G’6F=NøéßÜIõ€ Õ IcÎ0cUcF>S3[|Ô^6½\EMôš¤ÒH@ÍL·ë–’ÚíÒ¹c_þòWè»°ð¦<“õô·lÓí]é±ë´w%—E½Q|C¨)Žòâ¡¿qð6°BQÏözG­¿Á믽®¯]Z`oånЕÛ>´ìû¯‘&å‘×<úØ£ë—&õíqöÂL/pFÞ@ Y}žamVÝ›àŸáÁ IDATí~²}ûÊ}±<ZbÝ79NŸûÜç4Øóÿø¶ÓÙ»úöq#arîqö…¢5Jµ*ÔÛ>¨ýå$e7ºä1¤¸•¾Y轌³÷ 7oÞl_TkAÖ•PÁÑûÑmþnŠNíˆB±û N´ÐÍG‹õvÚä_;/m–]Oö)SŒ+Ò6´Æ¡òòŽYw'n,¼%åÜ}€Q<æRŒ‰L5 ±þé ÆŽ:)›tB)³:móÅäq“ÄŸæE TZ& $L®&§ ÓKž‘ŽFijvÎ1®‰LÍl(®Ò#HQÛ͉c¹THVH* %ËÈ,sŒKU«F¦A‘¦‚©<Çk¤eï·“ù8“V4[#½ƒS³LìæD_Ó)bfsŒà‹"…Pže”Cs5Ò^žªüÜKddE$ žâ¤ÈëqöÄñê¤ÓÔŽ²·Brš+rŠØËQL¢Ë4»DÓãxú9føµÄY[jÅ?Ϲɧ©e™ŸebŠ“Yüc~ˆ”cêžZ)v.}¯Ò:õ€$>äîO<Îd8D /i›Þª [±1mÊH‘ö¸ÅŒÄÞºÀ²ÌÕ÷¤Q'ÖÈãì«ÆìûH«#½Žåº¸¨ië´ÖÜ`+Ÿ±~{r×÷O,Åb=b™õ+9h–ÉI2N!T67K Ûº¨­² d3#+$UËM4¶ìþê,Hg´È¨J—Iü*µH•·¥$g™'&o­ SÊ´Ý@8>y‰: >Ééa–vpê¥*yà-2ª™Û¬Õa #§Ø ž`w€gƒB=qÍ£ìÕÞËQŸ¤Ê-f|’%2ÊS Æîgš]6ÂLО¦–¡ªÁ9èê£16„˜á%RXÓIeq‡µú¶,¨Vê,t3­¸†6æHBÛdäR®°³jq56s£âºk¬†šö^ã£Úív»Ý¶á½Ôt¡BÖšõàC G{±Ó Nq§ðr k½Þ{bïÖᦄŸ|Üë‚Y—ú­Þ3œŽª©îtÊ-βáÕwãó:ÖÀÀ€òI>>¤_m=û̳ÂÎÕ6=«ý½¸Xûî»ï®g“Ô—qÿN6ïd?m¸ˆkd8 ‡>Z¾Xh9 0Ú JÈ=|¹v¡KsÔN˜#)†mQ_oiŽÓÎÉt¦?5é9“–p&UÄ;'Š®L·Ëº/wSê„ÁŲÃ6ìÉ&Dw’øP Ìt‰°ÄÅÎÆñâLVØé“2æìéqæ*ì4¡›;E[²J&Ë|œÉíœ)q6Ë|‹“äq³$¡–gl 3Tµ½ðRŒ Ìò7Ý„¦i‘î “ŖpTú&v`ºÀtÊFU‹ÓJOÛNGoŠcq§~~ãðyƒë¡}E\Úÿã[ÿñ¯îÿ«xéG/¹w™o=þ-2íÏuDZ°Y÷Þj<î,·‚ú§µ‹»Öuά?Õˆ„YTЧùVKŸãùóç/_¾|ùòeû€¾¡i7‘n®‰ÜxµÕPó“|{{³lØaÎú㤨™øå^öY&Ö Vìa@¥aì„ NnN· ް êo -£° ‘OíCG[V>°CaËæ~¶·¢¤cuÔʲž>æ©IqÍ: ijrPSSäL ðrHó³LH†S#­€ \S4¿ÄÏ€%†pQýÂw¸WD°À÷&˜}ŽûÕ¹qæ¶sæmî3¸2V"“¦vˆƒÛ9#dµgÄW×0OµÎÂËú„K Oqx‡{E Ej³ø"Ðb«v¦©=ÅÓš¶TóÕ'©n¨C#«Ñ<èíœË2àém7Ó–>$ÕÄg5ô¾ À“¹`…¤ñ7X)q¶Î‚z™YG)N6ÇVŒ¼HÊm™•ÍÀÒŒÐ×ÀaÁ\™þ RÔ,YŸf—œ³L9¤qãJ–«Žö¯]àµ!'ÔŒøÕ}Âá!W®\q‰—å¾MgÙZèÇãÍf3MÇíóè¦üQ÷²Hÿq,QÌ-Ýkí_q¥CëLáÍç>÷¹OìÓ‰vn]s¹¿¢õÙÏ~ö6gÙçÑá­¼…{W/Ý\{ÝyçŸsÖ '½$bréÆÈ‚CÑ ÝÕ݂ӳéÖÊv”„’}¡o˜–0¾}žÁ׊n»9Ó1 ì\©¶ó)ƺãÌ—Ë2 ñ´(‘Ésܲ„,#ÆY¦ì°“™iv™js8‘brN‰Ò²íÐ&ÞÖÕ‰LâëØ*K޲W§&•ÀÀ–øÄÃ⦴8Î\)l¶)$yPÀ°ƒSªÖßN UMqÌ1îd¨àð<;—£òŒÎ,²ÚÁ©=‚?ßɼœötî‚^Yÿ,1,!Eßï ÛUí¦h±¬¨Õv"=¼¤¹‹Œf1Šå¦¸¯0L Þégu0Iüì>ÊÞ,ó%2OðçC,+äDqÇ%^UíZôN{Žç¸[ša[ãÍSµŠY½b24LPRê>ɻƂ ¶Úii…Â};ü¸³Æb˜ Yy¶çMK…Û¾Ð'(ø$ë,ÔIg¨¶p.°žÝ^WwÓÞô·lÙÒËÖYÈ]›CXÄU¹ÕEÍÕš ×a}þ¿Ë²°ê®ˆVK^ö3ºÝ¬ ý–ž'âë´FÇúcÅïf³yÁYŸÚÏâÖ[oj~ÿ¹ï»ŒYtSÊÛõ\üvoq×]wÝu×][åÊŽ® 8{­lé5Ñ3åY4.?“ÝíCô*vûöY.vWzÃdikZÅ©Ä&:Š¡Xƒpl#×y˜±Y0ß}:1ÕKËî‹–8+šbƒF;RŒÙß5Bß²‡Ï9íÌ&í„é5 l{ÆQ(W§±y[YÓÖ’ÀÒØÈå„všìŒ›¤PPgT# ã£3¸˜Å¯³Å?Ì&“¢•IåË^Žjæ¡Äž*™Í+j¤ïåÍt‡ÉO0{Š›¸¹_sQÓøÌ ºôàa–|’;™ßËуÚÍ [.–5]–‘Qïá×zWeSw˜MÌVɨæ¬GJʤã9@In½( Je¤—gÛŽ‹zú$ªgÒ¸¡!“ç¸_{¦ fçŒe×(i‰³ÜÊf¯NºÂéiëR¤Š«rš]µpwÑY#[ÆOq2¬4İ ã*Õ$Tε—Y]Wv“d„`v޳Qá´³ -|¹(ë‘Ãìd¿È¥_"7nܶm› ³°·qÊv[eZ¤å-™îè»®Édnú?LG^±¯‚©¯ÜÆe´òwÞb§(²øV«ÕrqWò™ˆÃ¢ýÈbÎW‹,%’^¸páãêèK‚-¶KäRˆuûí·ßvµ¥ô·ç¾ÿœæRÜe#TÿT¥ÚÎÑãQ€£³UE7l[v M Ý4´Ðãj‹±f-w{؆´YF®§´!jbÍŒâxÝV™)jªÊ†z¢6´ uÒ®^ÉLËå£+­æ¨až¹3K×b ESÓ¦7«Û*f™¢¦IJ¢VÚ;SŒ©úg !gª¸“ãÌÅ™¬3¨†™¹œbƒºw‚"‘Ñ>‰QóT%ð9ÀEݬíKX­ìaòÏó¸Þ@)E³øØžæ©iÉb³øK ³ô÷æ©Nó€X£G°…ó¸̳ó;–Ò×GÙ{œ=ò40 2, /3t'¿³eÌqæòlSÒ#0}¹ÈV8­Z®FKãxª9ïæ„†Iê Î1þkîâîåè4»Š÷Ôyinc»È¨ÔU’^¸wÉé‰3©S6oØ&«>k̓šzlYŽã…‚vÂìɦÙe(~Qs™áçnüfµRû<Îd‰ŠÉå'µà èRŒÙê…óókëqZ¨¸)ÝÍõÈqõ0íý¯ÉLG¿øÊ˯¼òò+Æ|ã`3ý¦ãñ¸Å=ùÃû~£øÆ[Óo}ÂøgQym­Óµª>ŽC½|ùrïéÀÀ€ ՞Ū]Y™]‘šígÌÚ¼yóÍj”¾ø£qÂSW[}G€Üš~²uëV1N•ÊU^»“º6ã,ö/«FGMŠNOÔþÁL°aB.¶5ÂÿÚ Ç£@ºÜ„mU¶¨³`ó@‡ut@.º[mjÃ*›4ÎbÆŠ¶¥fdœËfû_6*^«­iè(47‚\…ÓêvÂ-¬é‘aŽX;-Y©‘Úb©Jddïže^#¡KiyT)•ûîåi Pªû(ÈQçRýΔlS-Oõ ö¥©©åyo¿æž: £,Z7ƒ f“m"·<ñ³e†ä–p”½;8%£Ú4µƒ Ìô¤2Rê JbZ#=Ärôå_ú$PÚÁ©9Æ­¤Â;8¥:j–cô'[ ìàÔ0K2Ý…ržª-í¦hª »—£Rü&ñ+œöIÖI³ÇS¤Ú(‹q&«dòTçWóÒºð¨Äª·ZW²4·êOs%CuŠ“Ê#Ó¦DvÙØ¼ÈånNdIÑÔôKŠ1›Ù®ßnCŒ™Ox.JÑf¹3VVV'§*mðÚ¨‘ºŸîbÚ†GÊ€×wKzååW\l[ÃÍÜ>ìà7~÷{ßݼyó5Á¶JÁëaœë_VÜQùjIÄûêáW#7Û ]›s¯ÿ0Ô*³:ØõOp^+|Ú†î *yíšÖÚO~S–­cGí7÷[âܺÆ>úè£gž}æ™gŸ‰€:F>¦µZKõ`œn˜´ÿoô¸"؇ÙQnm”ëí´Ñʺr!cÔ6|Ôx œ;HC[xç[÷¥fZ`L\ÁÜŒT¿-`ƒ)ŒìÖˆZF˜±<Ïlù 0 ˜s4M9#Œ²JZˆ…J¥c2é6¿UVq/«Ñ.ÁPVOßÊU°g2MMå´ÈQÈ'9ËÄÏø’?,›ßËÑ9ÆÏqû4»ÔÀ;̦*™)6æ…4µç9(Vó—|A…Ðc[8¯JibÅÕ–:Ãv)hžâéíœyЧm·2ÀËâŸãv‹ÙÀÎë=ã”ÿm!åQöŠ@Kœ¦¦ŸfSššuPʘùNà ÛÍP•:)Gy”E;ˆ©=LÞÖ®SŒM0›ç¸l ”h­gÛj¹Q ‘5BÜQS4å°oºÝgUn•a‚g|qEp5# åÃl’nH@tžãaa£cƒÜq˜2×my”E¥ñXϳM30ÚJsÁ´µ£ºÁ‚íð)­lDmåÊ¡æOŽüD÷c‹G‹Å£Eë_ãVØì=ëúhP/j®ÍBVCqWVóàCÊœ¡ïºêþG<òêáW?áf^;× Æjv^ëäè'3`ꎚô-uØ‹$ò‹CCCCCCÚê©Io—¦k¶nÝúñÍ®lݺÕ=*ñåË—•º£zÀÊÊŠ.ŒÏ8k5ëŒ[VaœeçÛF/u¢.‹ÝÄT²Ø\Ç”Àü®É$i"Øñî‰Ç&[Ìh(¥[pŒã­;ütV̆]_MSS&2^½Óy-8Ô6¶,|ÚVW6€rŒ¿LB÷Ùno ² `±‚©X£NÙñ”Œ3™¡Ziשׂ7úÅŒåÙ6ÄIy‘ËÍG÷_M_X2ª;ûnÎ ´Ô×̇9Ì“>HF4Áì v+)sˆåc>,1<ÍéHm(˜¾–Šø ÛGY^»"<¼a–äìó.wŸ`·œ`eÑž¢yoË6A:šï0›žä­ç¸¿NyŠÅ%†ãxIÆÊ†%¼<@ ÙÉs Q£©gÞÃqªØàmçŒØÞ}¼ûK¾Pg—Ÿ²ðMÑô ‹:[–öÂ*©—¹dÚŸæóZ1þM>+°PbO–yéâxY£$ª“kµôÉ–Bg Y_¥Mñ3àdzoìÒ•oÓu4’Çk…‚ ™N>AÇBèf.%¨«DÉÞµÿ‘ýîmWØyìÍcëÉÞŠ€Ÿû<ökay #™—ö¦æ~qäõ#½¯²B<øÐƒôÛ3¨T+O{¿*B¬FÈÖón\¼x1R›ýd„?ö¹té’{Ó·¶8ÂrŒý8\€xðö¤°ºÒuwL¯›^¹råÐ ‡z[žk/)“WVV~ûÛßê'Ÿÿüçoœqö–CËV%o@+pÐÔQúHºÜaʰ9ƒ^Æœ½ã4TŒÛì‘X×¾Ò’B3d2£9•¼L½ËVJ šÉ3õÞŽØ—&§Ø`LË'ÍLzašlè£ç„Ÿ¤hºgæ1¹)NÒNÐB„²íÅÉ€^ábºSO³K=¶[µ“!€¥˜–ÃllçÌJä$—UÓ1Mí»Kœ]f¨Î  H!YA?Ouœ9‰eô¯*ù Ÿä­'y+2l猄²K x(II+ÔÜεZÓÔòl“Ý<‰t𪠳ôn™b¬BRf{b‡sŒ—8+µ‘سL=‚=?Ξƒ². Ã,&ßbæ ÛŸæ)@Fùijš`‘êJ¥fà({ƒÐþ©¹…óIüT˜ž\dTVvƒâ3<ù7 ÛRŒÉ±VTXÛ”3Š«·Ó¶8ßbFQ£fëÖ0cÁaÞ0Ñ0KÇl¡:[L›kíJÒœÖÃÍGMáŸxd/jöUÆF†O>=+âÎjyöOòÓ×_{Ý­ã½þÚër]xô±GÝ^]¯)ÁÆ׈2ýTþMìjßÄuñâÅW_n‹q``@¥Ú;î¸ãŽ;îøìg?+>ªŠw ¹µé¡"3B?ø›¬6šr­ë7¿ùÍÅ‹×_£^-³áì nô´¡kn,I4ØeÛ6ña1\7öÐ¥3fºÐjœœÅ5œ –œs “wh#Y§M2Va!bL‡1ËÖg¥ÅÀtçŒÂ³ÓÍËXÑ4ÕsVéNê“4¨™åätûÝÁuo5V¥ 5Guä)Æ|¼8^X(Qs¥°q¼{¦8¶Äp†êNæ³§E°Ìì ˜Ÿâäy¶,3”Åhšº.;™Ÿg§íÛTãxÕ §ws±Jf%ùÍ–ÈæàÃ‡É BDìR4çÙY!™¥ª:!ƇÈâ÷y¶ˆ)xöç*Ø Â“øÃ,‰™©ªV%ì8Îá±O2kž0…/x€‹gØ.By†í%ö¤œ2µbμ: ;yWåÄaš]yª)šç¸} ç=yÛætÊPwŠìÆLû¤ÌPl7'”Â&6©Ng‰³„)7ImȪxÌNó@ŠšÏ¤íjÇc+Fé£bn Öì)sªÌOqlÚ(Za3g.lëm«f|Ãý9Ö+¦z£¥2½TOs#b ?9òd„\†ö=öæ12×O:×X}¥1ë”Ü÷ð¾錬ˆkü¯°_~å°¾½ñìa§Ðpµ0«aês‰€®,¬½pßõÚ¬úÓ¼ÜS±Ï«N^Ǻå–[~ð7a‚ºÒo>äC—¶êºÒ_‡Õf»,ùÂ… ª Ëž×ÝEÞùդݫÍq–¿ä†ãX[ì†1[n5“*1îX$Öp6ÆÛÚÑë¶]•µÇ³‰±jt¬ÞÛ‘ækN=§8“NVh¨WjÔI›0ᢳ£/KBÇËs¼Î`ÖÆVÄY|E¸ÔÛiÁˆhJ„X#À³Ô?¹:õ,­&HË,óz~u¿<iv)-DX˜¢Y# i…ÄÕäT ™Ä?ÄA‰lmß.‰_âlžmrç9Ãvk>p€/ æU¼ÕS‰ã¦hÞË;šô§´X8ÎÜÎ_ kŸâi½bÚˆ‡GYÔ¤Ç"£*uîdþ<[ðÍe†FY¬´w³´—£*ŸÊäa‰á fϳ¥FºD¦Jf;gò÷&˜MÑÜÇudë ¦«‘~Ч% –’V6ñGÙ{Š’'Ø=Ì’zÌÖWÔN±Á¨ ÃAÏÃä—ª„n^‰ÌËšâ•zVóÁ€6F>É5c bEãѸÒZzf™k aÕÚ¦(bÕ×Í,#Ž˜§¢S°=r×å?²®ÃF EÛV¼ªeøè±7é>¢_ì{o6›—.]zéG/Ẽ"4nÞ››Ä²6vªf{äõ#6v»Wþ³šÿíõ¡æ' ‘Y«¶0­Õ诨‰I‘Ð+/¿rñâÅ?þñ®äØ~Lͺéga[žîënݺõÎ;ï¼óÎ;ï¹çž{î¹çî»ïÞ¶mÛ¶mÛ4—¢¯7mÚôÀ¿ /«~âÛOßýÞw¿þ¯ÿ©>[ú¡fÎl¥W+X[‘Óªlwò~ãL&ccõvZ@ÎÓFHd†´žj 0gÓM8øjÉ+PHQ«‡ÓœÉœ~d'€ÓÎYêîV1¦@¹jïqí„ò–Ã&e{@ž æH€rEw=ÃŒë@»ðÁ×ý½Î €M‚N4 †TëQƒ"rR•×AÊôüJdlH´æ/ϰ} ç¥':Ξ{yçs¼¿Èè4™,Õ §kÆ57EsïŠÃMqò üò"›žãþ,äÐ9n›û”šy˜¼Š«P‘PVS+²¦ÓøÿËSœ\bx‰a•1e9ôûT,U˶ÞN+ xÌ 5ü I%zú$ãÄ?Ïýâ¿â¿L³k‰aq\(ûLÊ™AýÅ f+ì<ÀËgØ®7DN뢶z]Ûnx +¯4MÍV …r1GqÆ4» L8ÈÛÔËt)ÎJ«= êˆ¢4ÍØUgr/G3£jGÝ\fŠË®‡å\là ¶N®Î‚ipŽEsÂdª®Ã6ÈÞÜ]ºå–[Bâ8ØAÐW^}e à´7)—_Zµíjj£¿É4 ²Çwt,X A_~ýeõ´z…ïØö8-Ýüÿ™»‘ÕE¾F¹ÕVGE#B3ýÐöJ]:nétêcÒÿ7oÞ,¶-§žmÛ¶9sfg!–ÿÄ·Ÿxþož¿&"« û:ä`kìêV+ÕÒêSªu‹´t;$4Œ»˜ SÔ»F6Ýø¤¢3ÁR&Ì;$[ !Ji'±p*ÔÆ¥¨Õc tÅJç hJ©¥¶Yü eŸIŒA0Xr•NKµC—è8+´sºV€v!¬ÑµC ´bÈcÄYiÅr¥v"[‘µlÝ ÆñT*l1ã3)iŒê¨)|‹—ª+–È©x8Äò0Ki†Jœ !Vå¶D&EºÎÂ÷¿ä ïpo• ¡+PRz™ùéOyP‰];8uŠK ïd>Ž·ƒ’®O2ÏܶCy–Iù *’Ók«¹¦†5¥cRR´lre 0Ëijú:v|;g†ùϧءÖfœÌ^Žúì=ÅŽûxû—|A-£a–þ ÿ °ךv=Ξ,ÄPK §¨é›TË“”ê'ÍÒ¾Jdpô0›`D˜:Ç8yª:6E[·˜ÙÎEÛÃö‘¤¨ÞNû±• fë,¨B…꡹Ў1LYOR;Ì&(À¤OëV1»C…²øõWlöµu¸µ™e¾ÒѲ•[äàŸDþ,“dÉ“MMrèR+›öu}mQÌ\ÊWýªÆ.]ĵÛ†×ß{³èè"™~¸yófÝéF:«që´ÖD^xyà«úbg/pFä0½*›Þºè~ë­·êP-`|Ú€ùª¨ùñå˜^umß¾}Æ "»JÏ@ Œÿí¿ù·¯y]×ó•+W¾yð›Ï<ûÌe. ¶#’"{Íëw5—¹aÃ÷oAN‡7~Øk‹ƒÒÅ)×,æH œ‰Fóø¢a ³Á/š*–“¢¢n¬ÑŽ´ÎNÐðB±¾5*J–3ˆB~•LhuÛeì^Ð ¦™ÐDiαám˜&¥œ ¼Ž”Éygò±ãɰ躒ŠÕdÎ q…d™º#k$Q kð- ¥¦TH>ÅÓ%2sŒ§ËSbY.tÓ\‘GìV¥h*AL7Í® §Ux”çœ*®ÿ‰'*æÜÍ»N{¿æž ÕSìPvØ8sÿ’ÿZ#g›5…W Ð (Æ]aŽqÕW÷rT}MÅv ŸrHûŒY&JdN°ûû¦¹ÇôZ¦(Ím€7ͪ*ð.2jGGÒÔÔ•EQ…Ó³Lìà”¾•y˜¥<Ûôrq¼9ÆåØ0ÅÉì†\% €;­Ê­Œå:$'ÍhøGIãš/jµöº ˜S2òZH(¶Z×’ÚäjØtk‰}Tf0Uâ†á— 34•p¶•ecƒ…S¹Ñ%'>úÈÆiËÿÚ«¯µÛmëȪi?ͺéa*{>øÐƒ‚O»é~íÕ׬FßVöÚ=ë¦ÜLíLB߬x§]}í1·Á)¼´ßÚ¯ÿäUY×Ï=¹õÖ[×p`Ç Z±œ)bò°qãÆAg}Úø®AQ]Á­ag5s¢ÑÉ/P íõL+d”YØ(À9¶gŠg„ô8­ÝœÞÁé*£~^ì‚Q©Þ÷ÛÏ1“#]geƒ†Š»“„$ ›%$þ­ZA¤ð z§•:²:®ºÂÖ|ˆÓ™$´‘«õL«è8I“H³¶çŠÐ±@^Í6–±%Ñ16}-½Va˜_IZMé³NêÊpÞJùÍľdW‰ªVDµmëi³´ï‡æJíÚ_†Q[tDƒ2uÁÒпƒ«Gk×èþV÷е@»[}Ð6Dêþ_#‹E«÷¦êšæÁ•¾E•\þ¼«ë½ç±=ngÇ^ã>ihÝ0"¾ýùÏÖŠJßé«ý¯¾Úÿê¾½ûžÿáóvã®äÓ¾§÷ ;WGеµ,OWLÕ€I8Þ íNgg¡3X_ÌAÛÔ¨ô©Db-½Óáå–J7øÝ)E[ÍÙðÎB²*XSŠ,Cd©¨l»ÉÍú,¤:#á]a =ç(¶‹åçBnúgQlPÒ/Ì| #ÂgÁX©Ú ”а—ö¹H¡X!‹fÅê³T¡N°×Â+_®´¤^ì*î3?Gµæz±l¦©¯gZUØQH(+[ZR#æm+ãṳˆ¶2f›€°™‰ÓìØÌ%¹R:$K› ’— Jáé¶ÄHõaW”í²3¨y^õT­Z6rUqªÔ™Û%û";ÂÎÆÇèÐ  K,¶*î×Á(y«#‘Òl7guCfŠ›·è`lˆÝ~îÁóËÞÉb«a®ùÖåªÂF I7ª1Çî\¨”±Ï™Ÿ†/tU Â”†?V~³çU¸9ôö•>lG£ûqM@ËÙ­e&Õoþü͵„›w<‚ÎPcß‘9þêñ㯙öÄ'\YD–Ex³éyäg¯üLÿÖ¢¾{[ÃÍuëÒ)D¶Xëʬ»ÔV;oŸ|ûVÑÏÞ}{%ó´Fâñ]×—ínVÝ™:ÙU$6VoüØMýôÅŸ>÷ýçžûþsî“ÂΗ_zùÀ³ìÿe;²§ÛÓîÉVUUÝ–H«º£°TÁ¤ÁAÍœa1T”(²VñCŽõéûî6KM¢F`,gެϺÔY§O´§ä2Vªµ›f€#±ÝµÔølÐ̪ƒ’í¶BhæÿS»"IHRy ‡Š»3ÅH–üAm…²@>I(Æ&Ûº ˜”‡†@Tór–\8ÔÕ7EcŒ”ŠˆÚTˆl=Óq: ¥¥' Ðp'#ÆÔÏa¦‰ˆ›#µƒÓê$ÑŸi"õL+¬fn”N…S“4u0Ö_|²Û;/v rösÌÂj5sÀ Þnïd¦™¥fŠÆ²ò¦¶à:FGc2ìx †U”½ÄæQ:ÓD¬_¦"T«ü§Ts?± ç3Tu2:FGqã×]ÕÇ‚t‚j˜ WuÖnÎÚ3JJék}eJMç *‚ßJËõê(1 ì±ZEý¬DIÅ®1‰›W©8Jjˆ›3i[Ýx‹qùc{‹¾å€d ¼E£õ¯ÌAÞxÒõ˜<°·´÷îC£æ4ý-¹¥.~÷`(U+üÓÿn¸¹ÊЛ-v®({»ë÷e䪫«¿ð…/X=¿?¾ÿ»ûÅ:öâ1Å ¢ ÙlÞ­ÆS{ŸRèy÷M¨w_T[‘µº¤þÞ}{éyä­Á·T]½œ¹¢ »›w-‹ÿl€®Ì§ûñÅÅÅ;V<^KZ[K+W®\¹råøÃþð@>øàƒ>øàÚµkº=ôNEŸ‹‹‹Š8m§Ægxö€}Ò}ü‰Ž;œVŸuXòƒKýLJï—»œ¨ýF”'…[âß–r¿%ÝZ#øîa*‚Àœ12ÌÙ‰ÆÙf»Kß‘µ¤!öóäRFRi„Iws¶P¬{iŠ ‚~rØ  ˆ¾¶ìdز"é42%‡/ÅO; {ikõåȵ ˜m‡Iœè.NEHOÒ¹Ã鿤¶ÙË€È8ROš ¨ÃNÒ´sB£8W̵qf€^™nŠþcOSé_éÓªÙñ(µ»8¥÷läê1ö_¦VûŠ;íæJQHÛQ<*€WùS}5sJç ŽÒ©M]•$EM 3cS7g±'#ôFHÇHµ¤é m] OѨԴ¹‚2,Ë w?ÇÔÖ9Aóª¤ö“¼»P6Ãy¹lJ–]jJŒ…ÈJ^#Ylíæ¬ôÙ Eè| [â\IµJ³a/-ƒ…ò%õŸ2æûÈ­kƒ)¥/JˆÑYÛ k»4++”m°î(«—9o;…~ûÑ5¢¦¢R;o+O{7Cš¥6lxò‰'ßzûÉ'žÜ°aƒÂ ŸB͹¹9kRlo«@B® =ÿIÒZ:ltÆÚ×À[ƒo¹iÃùeã“8…‘øæÍ›Êc{ž§K­ÚZ‚ëýzlƒrEÞúàG}$P”Hìûï¿ßø¥Æÿüýçñ?ü‹µÕó?|^и<+kmÅ<{àÅŸ¾hŸ¿ƒÕµÔªo¥Ü‘³ö ög¿¬ÞÂGÅJîù(Ûîlã¬Ùc«†JrZ‰ƒo<é«ËJ¢ÅWÖî`ÓX©bÚcÁ/S’AH„}ƒ_/4Ik€E¿ÕÄ—ý˵°%É0¾ŸÉ6… a/ ٌю‡E5˜J ¶`´¿ ¾®M$"l‚+FÅ-1D;$‚lé`LŠi(PѸÚN’ Ð0Kè {doÒBö ÁוæIsã©"cKm¢ïðp²ØðÃdÛ83Mý$M†Ólcv†ºÍ\’¤_²ØÚï}ç=Òx£ÂÅ€·x±&&“p•QRµ\nb2èj¿Öòº‰ÉZ.ä¡RL 1 ô†ÈvsVq­8H¾™ Al7g«™S´º™Kb'¥‰(íe@=62øÌêá¹0ój!$·:ÆþïBšO•S“Z1(¹m¨ÎÁ šÃ§*Ì|’ªAγ-ÉEÉðrSd[L|Ù’' ª[EÈ Ù,¡‚ ±ØñrÐŽi:££`:ìÎöP9BÇí¦íاywsr„ÒhôŸìqú•WlGQpóæMýžŠ9¬‚ >÷¹Ï¹ó¬€puàüÅ[¿°EЛ7o¾ùó7]Ë‘G¿ý(wG±YÖç#u444`|¾ô¥/ýý;Ï&>øàMŠ>? Ë‘5ÒFÜ#×õ¯Õ>ùZÿk’Ãu©˜ÖÃÍZ1&t>½ÿé[ÅkI´~dZû•¹çx+Ñó»ÿÓÿø?ýDZø@ßò‚ö¢ïÚþ¯›äþûïÿáÑ~ÿÐ÷_~éå¾'ú>ú裟½ò³§ö>U`IBÛ§}àö¨h\¿~ýŽyE “=K$Êí9q)¸¾.óŠ ¥ìÐ5é\#¹§ù%à-:zžíIFåÎ×úÅ š2’›ÚÅw+—+Ô„&!!})»fü¢lÞÈ5`% t¨YOZ ¶Ù`Þ˜_vÅý™®+H>ãÏ¡=AF%b† ù 9ÈZ÷fÁÃ~ŽÓ:Ec“ô† fL²Qði%Uwqê >ù^N™zìó˜ŠoÔé¹òML*‡YÇL˜y!¥Z*ÃÌw{'‡Š» ÅŠ´—VP¨,îÁ¢Ÿß{iƒh›*¯Æ êWQ6UQl/ýÄ‚4Šû£ VÑ­h´zòûϱ]!2FÞ¯ƒ1­j˜µÍ£)¢Ri"rÆ*I¨“QõžJžð(߬儊ÄÊW[–Ôõ”u3/Õõfζ >É òÌÛÓT»­ê¬jÑWœ$„ÀÏ´‰·X(VÄ!ì¥3E-ÅüU˜ùŒÑÒ ’J–X?Û2TˆÐÁØWt‡}åZÐJ1çh[®•ò±*B‚=‰¸ZšO¡PP#¬ýÅ[¿ÐÄ=??“›8ÄÚË«³mçûr•öå3ìív ÿ›‡ÿÍß¿ó÷€ë¥ˆ³¼H¶q£ÉÍ1~ÊÍ”²-³Ø¹Êp‰?Òfzõø«/{Éry^yù•½ûö¾òò+.ÇguÚgñØÖb?¹óuyF¶¬è.k6lØ ê¬+uTYY©;V ~øá¿ÿßÿ=0»0ë.MiúE­å?ú_íWB^üjû`CÕh?…äp•í鬂¬·ªq¶/ÍͺFc²OJ;yÚv¿kÅ$Z¥OV*yºÌ bŽg¯‘û©€†¶½Äñ—èQ’Ðja·°Å÷ óiŠâû ßà+ìnü»bl+#çc¡RN¬h±üÊe±B4B±Â¢fÁŸO/Z…œšRÄ£Ã.ÄîQ¿fgvpZ¤•cìOJ• e–P7gÇ舑R ÔV /±9Ìüf.ÉAS-ê°›)^ìT£dÖ›˜ÜÈU úÌP'œëöNÎRf¾“Ñ)»½“}ÞñL1Ò_|R_“x»½“-ÞxÐwfF *˜ŽÍz0AóV.lçܽ‚*^JHO ïõL·2>I“„‡Nì—Q¶lËj˜MÝÊÁ­Šš²ÏP5KÍ8­4 þGéT,«Tp€ ¸QÖø³š¹!¾ž¡J [±¦ƒFsJÒö %U66¦:!UÁ£¤toÄHAÂÐÂ16I‡]Â>¸z9Ÿy xƒFúJFè øZQMª6oÌ« Çé´KO˲Iø¥‹ÑÛc®H|éØK¶¥D–,_:öÒ'1±~ö³ŸuS|W¯^-„SÍíH9hË–-@ë¿lUè\YY©¬ jœ{ÛsügÇ˺ëþé_d Aݸm¹‹YYÙõ‰'Ÿ“VJÂÂNAæÇJ$®}(ci»ƒÜûgE®Ð­ê”²]1ÿi_ýX¬½­qíÚµýÑ‚3V¬g[ø¼-sõ{[ãlpšFz–õ`ÀKøZìÁ³2ž %qƒ?Ö„qÞ  ¾nΤRmA¨ÇÀÞ¢Ñ.f& ™ÆPeÆÔ'jy‰ƒr!6S®@>N§qS鑦ïYM>@—hz"=.æ ú8ê-šN»KRß‚!…ž·ÉIår •¦]s·¥ö(ýx„ÊSx%ÕÁ˜\7sII`9sÑ!Ù$ ÍÙNF61ÙíÄSüÛqZ/°5Et3—lÁRŠ}•,<Ì;âé³Ê„½ô!ïy©ùH{/ET$;0Ä׳„^ãqé43q­“4EIEIU² óº(Š=Z|îaÞQ%8Bz;ç´ß8Ñ:f2ÅÈPqw/—©9¹3Z^H·V*ÀQj›™°ÞÉh3òL©G׿ŸJí}ŒŽ²ú:’\T[’úʤÁ‹O² FHËÐ4@W’Ö8W ]Ôhü¶Ý\†ª8W X–\WýB¸Yä…Ù`ÑZîX>šUº— ™|RQ@$»Á(©µ¨¬]÷ä¥c/•%o…·Ê®8„RŸhoÃïþ¿ßgΞ±Ïüèè0ŠÞ« é9X`«sÅ&Åukûuʪê•iÆZ°¼­p³l#_íõGzÑ¿{xIþðèÑ]XX¸•©¨Ë÷jw~ø¡¥ÛËh• nܸñ§?ýéOúÓÕ«W­¦•Û½víš[:e¥N\}‰OïÚ 1-ìS·Ôªu`r°T§)éûØ*&>»Ç·Øì2€Ú^âûØôo<Âl“b§AÓô„Hgý0ÔwPÉpzŒz§$ô†¨WsSÏRµ÷„aa”Dn[O–ŠLÖ#“OúŸ÷C‡bCƯ«ó8’!öÒ®tÐX3ülÛ|’‹ŠHâ\™e“êvS4&Pxœh7g‡øzÌ(Ó†™’Uì5FG“ÊÇîàô)vb—€A–)LápcõL÷SyŒýð\·wRI>ïø$¨Ö¨ÀÑš;^ðF•z%$¯Â¡DïN±«“ÑCÞóã´¦FHc¿ª}’Á“’{Ïõ¯g:ct Ó¥.L—\SZ?Íiçæ öÑÿpñZ¼ñd±µ¯øz‹÷0PÏô~ŽI9ï¿i3Æ«ÜN·2².¤?ë-±­6¾öƒZDç–VI1µL¿™Òš?;ÓŠË""òP‚½œU{‘•þ­µNÌúpÞÙšõ—ð­:,&…§ž ±-È–$3TÙÖ—¥¡C{œ¾í‰¯ö¤ÜMÒXeEÍl!$]Ã,´™Üo/¢ÑŠf2Än£+D¶@Þùnž¡­…l’Ðë8ûˆ+u©pSîÕ-4Bj‡wà`q÷!ïy!PŸwÜ·Î6ùÛ$)öÄ‹ýÞwöR0Bú*›˜¼ÀÖf&T>Ì,+"Þójt/é m{y%A»Ú:g©©aVôóŽBÛYjv22TÜ­‚ñ ÞÓìH[“€— ’R1U2¹:…Í\ªcæ(ßì÷ÞÛϱùÄD„t¼ØÙçï/înñƨlãL–Þc¢õ‹™ÇR`ךF]¶ŠË•-/j*Â6ríAw,I‰ ÖÌD†›Iÿ> å™—ÅXœ+PåW4iÀ°„dí™QîÄËÙoĹ·‡UnWÝúЂóÆæ:6YbsO&–þRìÂn­Ñ†Kù)ãGÜÛQ†¦úsž…[õ ­ÝÉHQˆ-&åóù®oø‹†KS—²Ù,ÉdÞ}÷Ýå³ü*UØ;ãþ|,Gf•­¼Ïö=½oàÍà›Ýß”u¶`RT&ö™Ï|¬»§MØ®R»^lËUv-ÝtßÓûÖ­[§žýßÝÏ:öwÿ±Ù¯ÌýîJ6#þFö=½ïG/ýhßÓû\6ͽW®\±AËn5ñúõëeJË·‚pU>µ(sõT­«uÐã,mñßx9gÒ5íòßé˪{¬Bºi÷]‚!áärs!²¦ËÓZX·›ägĈ3øÝrŠŒ¬|…4P‰Ôшo7Íš %QSDÃlj¶xã /ŒR ÆûI‘k•æÊŒ!dš¦Ï‹y#·$?FÇÖÉߌºAŠê#ÔaDH·V+¡¥°ªªÖIõfXëv*žSÚ¶‹áSìÂË->óF[¼ñþⓇ¼çU¹”)f [¤£{‚=½ ¤ˆ*Õ) ‹¥F}œZ˜jhƒÀ #S ³£c¨¸[àslÇÅQ*î{i‰C,þ$YlÕŸaæ­añIÕz#¤/±ùhñ¹8¡ï×1ãv¿øà°Ÿcò¾]9MDà=E£`¬ƒ± çÕÛÆ™1:ZïælšÈ’ÕÕýim«ÕÓ)ÖÏ;Ãl ³m'#2« L17€ìSesÝÁX†*-Þ¢n$S;èqîº|sMµ-uusV+B×qݪ?š{²Ý1²Î9½ÑŸìšÁ­4 î²qóއP3ñŸ‰ÿ”øíoûûßÿþ÷¿ÿ½&%€ „xò©'õàÍŸ¿iûOÖ"`…aíGn«í}•±ç±=/¿ôr½öþrè—ßìþæã}»™Û5,-'h-\¤²!À ¾üÒË’ÂWev7Ëå™ÜN—_zùúõënâzyÙ²²²ÒJ**¹Z¦Á¤ ­ýS¹Ù…[Ûò'°¨yÓ$–4°Jíü3·(pâi:b°íæAÎ)I6ئJ’V>EÔ©~uS2c78\$õ“œ7ží5–v¹õXX•ªY˜t˜y«ç^ði·˜Cm·¼Û!W`Ø0;¤†“ ‘Æèbu³NDJ³tH(Ô°tSCnÊKa'O°@E’‹Š)tõq\ôN[ÈÊ™ §5O°¸ ±‘©ý‹’’Ò¬-¦ê¥ùfÇi ‘;ç5àNt{'ÇèH[û¼ãòvž£z#W•ò ’ïç×»8u†¶Æf¨+èæìV.t2*Ÿ2!_ ³‰;Å£ag ³â%)?Ÿ,¶Š¸ÔÃsghÓ‰´q&CU·wRÄ¢=œÍuœÖYjyÏûA-ùË Ó=—¡ærìô®îvùÉYxº×üÃ?´é_÷Éõë×+Ü´²ø®ÎCY)Ô:›Þ¼yóí“o¯²¸ËˆszL„çš ¦0“pº<±z[G4ó†’cßÓnAWZÅim/Pa؉=/ÛôO—‘hßæÔ“0ÙÚ.khÏ%̼9ì„Knj¶0®‰X‚Aßé‚8#ì´1$Þ¼A¥=ee¦¿aEÀaÒº‚~_¯B!Ýɨ´è¤i ÖÌéiêó«™³†ÕÇØ/†N“{8!1Ø©!nîàt¦éóŽŠÍL,P9Ec¡Xñ‚w@:;sTW3§öÍÓì°9Róª™Sh-—«™»ÀV«fÐÆ™v Õ1z¤«—%t°ø“~ï;¾!È/º“Ñ¡ânÑ‹úˆ[ºÍ ölçÜüÓĤU×ÄÁüc³âÕÌõ2 Ôï÷¾s•¢éŠÓ;A³‚´8W²„tÀºìÍL¤ˆÊI´›uYB²š‘Ág7ëB†ÔG\ȧ՘S³l’²PŠò[Ø"'×A…ž“Z÷Ãb/"뇞æðli“ZÏe¨Š;Þ¢~);‘cA‹/QÛ.¶‰2m•!qO¬QV#5øÔÿVîÃ?ô<ÏÒ)ÿ¼l” ²ËsxãÆVÝŠ¶fÙX½dkÇòãÛ=a犼⪪ª2vè*ªow6~ñÖ/”¤-‹ùÖ¸GWûÞ=~Mô–FTFkz­ÿ5VºÏ¿üÒËÏ|ö¾ûî³Ò»ËÕóW< MËŽ-NÑ.vê( ý¯›±œÆµ¸¸h…ÜQöÎål¦¿ðcàÙƒÏÞÖ÷µJÜ•2.Ãï5'&k4è”Cĸ®æ ‘)F$ee‚È„ÍaXû0åZÃÌ«—Iµ!vë¼RDM±¿!N§…IÏéÎ\‹Ví]ªÆˆ*²wß^«c§ñöÉ·o% zW¡Ï|Æ&TmÐ\†ÄÀ³ž½víÚÞ§öêŸB„2ü~æÀ3Š;û_í׿@ `Ó¾íSˆ’ñÖ/ÄÆ*ÃÎ{8”h½•ؽÄÍmfõÙƒÏþø…¯ÕëׯWÛ¨üÞÁ'ž|Âu(vÚÜõrï7æ[žð°H©åÔ'ôE(Öì{¢ïÚµk?ýÉO—ë?Ø¥CÙBêÀ³î‰zþ­Rµ=K„ôJ 5h§nšX’º #—sH€ ª‰™bÄ6tšŽÏ°ÛM–8§L¬ÙKα'+m6FJiR#úZeåŠ, #ÉE+± +N§5òs•>ûSœëIòSv^®ÄöÃÌ;|(4Z}pùGJ=Ó÷itkCŠ¢” âëª&B»²¦R˘MÑx‚=£t>Ì;“4eŠ‘°—ž¡®žéNF%//vƼÑNF…CsTË„ä5ßÈÕCÝÈÕ4‘iêϱ}‚æQ:å|²™K§Ø5M½U’S¸9Cð&Ylag+ãis¦*öyÇ_ðdŠ‘NF[Ø‚—‹;3„e±9GõejìžfÇ•[¹0AsØKgŠ{ ³Œ& )ÿwÞNÕP§©÷ùÆ^ZrzYBýÄFØik½â‰ñ{”çôM)`¾èES™ŽH}Ð(ÇÒ¸âÈ,¡>âIBŠ,téÛla‹tRD“„BdpX«+Ýaæ)öHšQ÷XcÆÃ®Ëå£á{˜GZ‡ÜOf›ã†=èüÜÚ%‡' í®Á‹›H\Ѭñî§f›¬Ó|ú­Ýß²ìÜå…Ÿªª*MIµµµµµµÿìŸý³ÏþóŸÿüçïþH$™öýCß~xô‡R‡YñÏxFð¹<÷hÇŸÿüç……Å»ör¹‹ µË~ùðYYS}Pfa*¤å;ð[¼ñ,!uʆZçbáMáÖË…½ô ü×,¡ÆÅç,WÍLH©z§°Y-íÝœUMÔ0¡3†¶F¦º9kÍ#¯²qŽêfUìlb²—…›}ÅדÅÖ˜7*øiêÃdBdULQm¯‰É:f´OÒ” ø_S1Op+vqj/¯ô“†~”©óÒ³ÔLÒ¤-WÙhó¿Tlz„ÃÝÞÉ£Åç’ÅVõM>È{Û9'žZ.+%+õ¢SìÚÅ)kÝ•$¤¤´¼½¬ún¡X‘&¢th†ª‡yGHf^×Mš´‚É~bú ” NÒÚÈ”"ES}lïæ¤¾ a§B[©óôÊîÛ8¤.f8Ÿ¤UIÑ‘Ì]':OÄÜ“6Õ‘°­é‰ªpèlí¦:©={ðÙg>«âÙ³Ÿýþ¡ï_»vM±uåÒqø‡ÿàð§l• ¼90ðæ@OoÏòëiSÜ+æ¨íÔïÖØlÓÊ}OôÙ ÍU‡v¿Ç²úܾ§÷ýø…+{yO†ª§wàÒe ŸnöS®—»ð•ÆÇna-\³oèånÕ Î6ÜlªC¾-Jñ çÔ~ªL{IÂ×C(6¼Aȼ`Š‚ò·%{W*Ïÿ›èmØ( •´úl,[ Ýqm̲ ª­‰]½ œ¡-Cäð穜p%J*¥îobOÁË«%G|Ò?°my(àgÛòÒ’KÍв%O6H>Ï< n ±@5§ˆB^h$Ží’»“ÐÏ( Ló%£#2*< z“€>ŽŸ!$?@¯¶ó‚wàÊ‘ž`OÄo‰A6)C|]Ø$¿™KÇ_‹Žt”oŠÖ«0ñhñ¹¯5jÐÜË+9ðFãÅ ]ÃCÞó3ÌÎP'œS M·wrŠÆx±µßûÎ$MÕÌMS¯½Ë¹S¨œ'ø¿ðŸ.°µÏ;Þ_¬{é¼ïÿÜg8Ld€Þ>z›É@ØKwòË÷xPÓçV.H¤0O0é ,„0î+q¢aÒ#æÒ™h¾ #¶WÃl/ôFIY•(ebýŠmI…x1I†³t|ì ß®@[+Vø÷ª—3ÒBÃlË0l¥hC™ïS]ðe1röÎ 3Ÿ!QÒ§4Y™Œé+øU¹{2ƒœxãÄò–Dz¹þØËÇ´=ñä :Ÿxò‰YmÙ.²† r}ô‘fyÍGì5&è,º»OºÍ!×®]S×éåéïápÁXA’úL4zí½¿êþ²lذáà÷r¿äw¼k5à–=ùôþ§­ÀÓwŸù®¸Ø©HñÇ/üø‡GÈú%+-žÊ8P}Oô½úê«OïZ*<÷™ï^»vMM“Oí}ê#>²Õè;N½®Òß©iÙ³cقϽ8z¼Èâ#=P…[¶°‰„O®¯×ÛÚö×ÿ[×£¿ováê?þ÷Ÿ»òÔSO9¡dÎI¢r %0_  ÔUR¢Ñöh5½„gT2³ïl_šª-¥ îZM†„üFL#JÂNXøž6ÇÕîȇV9‘+½›sÖø`\¬¥Àp [„‘²CQV!…rzQRV·o'##ìTͬ™ !V ³CÜŒ±É–èô)eAõ¤PViÌ!nj "‘¼z¦¥C«l§«˜ßÀõíÒ3ÔMÐ,Uú·–Ë—©•ºl=ÓÒa<Ÿ¡­“Ñ«lDJÚÁé*Õ :èýÍoøòÕ²•ž£º‰Éyª.°ÕJÎê¥+¨Ö‘§‰(ÔR@}ŸÒ:A˜žWûŠ4iÅB:ÇvšJçŠm¤mf IJÂ6ÆXY"«>o[]ƒ~Ðo Ý'Š5™š 9ÃyûEˆMf¿GÛ¬©HÑ¿͊9W¼ÅY—l®Áƒ¶º!Ç•~&¥Oµ»·ŸÒ3ºW¡ÇUÕ$Ð×÷„&ʲºfðHµU3-¼ >WœõÖ­['‘q¥ïŸvÚreÍ×­[ç6b>ðÀÚÑûï¿_vËw´bë¡KZÞh'SõÌ<öÇïnÚ´éÁ´{Q‹§ø#eU.·¼üZÙ½»{Ôe¿ï¾ûÊ€S}&·Ú¾β#/Ã6»wwld¦ó<¬8ï¯H¶ÒŽ6mڤè®®ž››Ó%š™™Yñ†¹ï¾û¬ü…½ëׯ—µÈcßyì×ßP³ÇêuSíÑ¥UVV–åÀœe1œNYï¼ÕRC«+½ª»HxiTykð-wuµ:pº·½˜ÖÁ=ýúû_ŠEvýàTåÆ¿ÈOÿ6÷ÿ¦>³*¬&Q=·³“¬:m-Чüô˜bÏù%},*jú¨ÙnüÅr&~m0¨™S#] ãY%õw^’³–”ÑB¶€/æp+|$΋Ò|z”v¶Ò€¶ë¦…-!²¶œ KVŽ‚Æè‘Ñ£ðOVVb°s'#16©MP}úS4úD$3TÈ<Ê7}e¢bdŠÆfžÆØ¤õG3õL ᔳv¾ÃÃ*Ä $ ÛÉèÕÖQ¤“Që#&PÑ;±ŽêIšÆèx˜wN±k†º˜7úŽ÷W¿áË“4 ð„IçØ~Š]ÊÏQ­=ñõ4‘ š7qE†ØV{ÖšhÖ1³sÇØ¯#—mK#SjýTÚ6H~§O°GÇù¼¥Dè;ÕÓÌ„tf©Ép^®ÌAUo™Í¦Þø‹¿PO/=ùÔ“Ò¨[]MíÛ{¾ýí=ß¶¨ù©×ú_Ó?#§²j+õœè ¨€wgJ:« Ìd ©tßêË€öÛ¹ƒ°¼»ÖõRÙŸ~ˆ¿zÖTT#[“¶ÿ{žWYY)ËÒÏ:Ã[i|´ÒX·nªb‰—i ßVWîǶuZçú%`¹$mðÃM>E½ñÅÓ¥Æn̨é¦o®Ùîø{WšIÓ}h¦ami×ëJRÍRóZ€.•< TÄH)h°Ú³-Þ¸8´!¿ý`0C•^­ñêæ”TiŒT’‹¶P;R4Ô¨¯5ƒ´p'h®aÖ0l#û9&›åíœ ’—è«R©‚½ h N[%b—äâvÎ1o4M¤–Ë‚qZ[Ï<ÍŽœþ _¾ÊF%u¥·>J§¾ËÔÎQ]É‚¢ºvct(ôÜιÃQ (µ+·“$-ô*{)‹Ð÷xp;çdÆ9Ec5sã´63ñ'ê™nfâø½˜ÍLÈI[BBò0™¤IåÆ4‘휳<á¼CÅÝ 7¥Ò§+ðSž}7D¶—ÑbÕÉ'Ú–ý·VÛle\b÷ÒYBŒÆ‰ÚP2BZef)æKè@ õ¶Ff^‰ }"ò{¢¤FØÙOe7ë T¼EÂõq_?Ù[Tó•ó3i÷³»þB°&Û‘³\tÇ×ÝMä$$“ë¬ïYGÊ7ö<¶GçàÀààÀàòHEã;ÇŠ²–‚4*++]•vù)¾ûî»eÒíeS˜kÓhïã?;®vLI¼ÖÿZÙ‰.[†g·:ǵWÑV´€^¾—åûúØpóîÇŠ‚º«Wæ\v«–Á`ð«_ýêW¿úÕ‡z衇¬_¿Þ­ ß*¬á:YÞóQ±ÒX=k½üI75â>y¯Ò]‰®²ú¹•Vm¡Æ×Û3D!‡‹Nò'¯+ìTVVmjyëhmJ;íj_ ³-ë;&Ì6‡ª{;$ZOú<  'W\ú™ bCd3~)´Â¸ƒq:}{m"ç ª™á|¦”[Îñb4L™ ؤ©Ví"DUÉKVè‚\ŒTœóèc²‘©)Æù^Ûúho!ÛOL[Д ^ð\¦¶¿ióŽ7RÝW|½Ï;~†ˆ|Q”­ÝÁé#ÞɈú/·sî{vqJ¶Š½”Ž=Ä//±YMœ ÚÕÚø5~õ+¾f=¿sdÊyOº y‚‡9rŠ]y‚ã´62%ÎQ«‘{U_éF®JávŽê~^|[ÿ _V9s;çÞãA Ý G뙼‰*ÜÁØivļ­ßÊ%ñe£;8-;³9ªc¤ê˜©fn#W­Ö„M>g Éž3å[…gòÍ0ómœÉ Ч"LZ%[Kꉒjfbˆ¯+»nH:¾¢P ãÉbÞ ¤‹Â^z„Ü,)3ý¿¹Çòº“•Ñ-0cS¼¤·Õn:¡sÖ«ÇzmR’“L˜MIØ–¥"—+ 7I{»ÑÌžÇöüùÏ^œ·˜å9á{2ŸûžÞ§$°4{z{t`öðñô¿ÞïÆa‹,*“6==m““×®]Ò»ÿ[l«¨¨¸]rŠvýÆëoèÁ‹?}qßÓûæ™ÿ„°ÄÖ+*ÛY„¾cÒßþö·«,ªtaopãæÍ›v_Oí}JÞ«Ë¥ìV< —(k³Üz§WUU©‚ ¬þmÕzÝÄ5ŽìÑŠº·;–Ç—ŸûÜçäzæ:Ù­Ô`h ¶"¸‚iƒƒdö§>è‹Ë6h£IWñ@µç-ÓÇ,ÉKîœLšj«Y¶û#Ʀ8ÃYºŒOõyåx¥ûêO±hñÆSñ;aPÕ Oýä8 GbBÆawUÔsä‡%nž&"у,(ÛB˜„$!™TkÞïæì7cäõAmJÍ$üN'û©ìc®Ï;.ZÐ.ï€(©§ÙÑÅð~މÔ$‚=AòG8|˜# äRDk˜­gú m}Ä„MLª„©üêóŽÒ¼À%6×1#R,¯/±Y Þ­\h w…MS4ŽÒ¹—W k3—¤? þÎ&&AÎR³s›¸’!ŒÑí;Ê7U ­åòÿÁÿú& ˜¨œ¡n–šx±3í¥#¤[O‚Q @~¨ZÌPWÇŒ`[žbmœQíÖ*i1!•¥£x?•-dS†"¤ò'FÖ'ÉÅ$=0˜4Â=³ laK²ØjZ±7 ¥%Ôy[15åÏ`ˆm"ra²0 Hír.3¢ÊÁ®C€jœ=¿š°-ãÿÐ !(ÑÂãG¶Â4g¥Ã]à\‹Î+©x¯>WÄN÷É;Ð^QæÓ²R–ÂΞÞ·œf†w£ðRQQ¡k%G­åGn±öç'~ÞûhïŸù³}Ãõë×ûžè{ùÕ—…"«2-~ñèÚ‡­qê›ÒŸî‰/—Þ-£_ÉÚ}p¯Fmm­½Ö­[·Êš¦¬é†žeŽleÕqm|,î»å;ÐUÀw›rˆ3 §•3áèô8U™ehýß±gß\¶|nwy,•_¥GÍ]Žø{n¢$§W¶ÆÂðRž-‚I¢!߃¼\Rµ0_Šò?Iù,ÕA·™ÄgB†Ù–¡!D:N4@Gˆì)v©›ÅTO³ÎEIu1ü8¯‰?#?Kè-§šj˜RœÔÈ”¦æéqZ»9;16E9·›“a¯-Bú`±³Ï«½Lm+ãóZ”Ô œ¸ÄæÍ\c¸LmósTñõ)kÝËÀ®¿Çƒ’q—±×9¶71)ºÐuÌH‘.FJ¡¡’¥—©Ut;K Ú²§›³*Ö1ó71 låÂ{<¨ldê*Ãdº9«>ÑjæÞäÑ1:z8Å.1‰¬2íi"1//væˆtø$O(®Ó(ÍL42¥âq-—8Wú˜ž¦>h${òlú‰…™ORc,Ïø4yqŒMÉù0ÛähÝ⇪"|¥3V ×qtsvÈ»i]24XÌ0Üâw³Èùü|†v|–lĬê%æ—1n'…’¶F‡²ËD®U‚eÏ›´'Iß5¯\äý­Á·výÛ]«§˜VŒ ,d.ï XqrÙ+Ú#Û'︾Xv$6â\˰2o«OŽê_ƒI!ÑåË—gggoõ~1¤VEÖXù»víš½Vî—rãÆ ý©WË€¶Œò£XM ¾°°àÆFZ[,,,èk®y£,j]-oËzùÐñ¯"¿Êw±\HYðyÇa÷­n`=ÐóBñÅÅEw%ºÊRé3+Ä‘E¿ud©äÞ µvå¤}Ô,RbÌz8„ óRQi« ™D âŠÔ &ËyjŸŽšö øýa¶YÚ¼ChÌJ.(=#Õl#åWL‹ ªq¼Å4Å.’çÎpÞP”wc3Jú™6ƒªiu‹¶2®~ù›:K}…½6£¨Ù_Ö`y‚âø(S*LRŠRæÌ¡fwsr'#ÍLÔ0‹—ë/>)ƒ(©‡yç[‡¸¹€_¢ˆ’ªåò9¶×1sˆ_Æ‹ýÄvpz'#“4U²p•uÌt2ÚÉh“:Œ:fZ·[PXÜÈÔ¿ãa2ßâmÑ—6si;皘p*5#né¬sToæÒejÖry’¦iêU(½ÀÖ=œè'¦Vq‹tš:q]g]+Œzí Þ6ÎHüV)YÉЇÈqó ?ÉjaË$Mq®Ä‰v2 KÝDJÕjûIBr·ÖuVmRµF«“ ˜äb†ˆ)¥ðuÏë”ß¿5ÙЧŽrΔÞ‚@·ðoí?}ÏWß;/+ ‰X¿¥*"¬˜ª}¤ç‘S{j•’Ìò—Žÿì¸PÓ–9Kõ˜ÁKžŸ!H)2!¢L½ôxßã·¢fØ:ßw\¾|ùcßSÊ”¦Oí}j•:ëò!É‚å\§ObÈüòþûï_XXøãÿøÇ?þ1›Íf³Ùwß}W¯l»ìxžÚû”ѵA'ðìÁg%ï°Ü£ô.x•*€ÅK‘¤nåCpg;½±­KÕú½k ¿Né“]ÛM+§köÀ ›×2Q¦QÝ,ö,y©h›/sQRÉWGHÄMFw§?ÑÇB?1çS9gšC,ÃrÌ+Õ–'Ÿ%¤ˆ3Yl5Š£UªŽ cˆl†¼Í¬¶Àf.ÉÄZµÈ,Kh”Î0óIB¢½ Œop†¶ ±0{‡‡Õ.’%$¥7@Q—DïÎÐ&Í:äŠu•“4µMÂ8­j”ü!Òi"ê$©b^O^eãÚÂ^gqU=[ÏÑ0M½§ý¼¨Ã¨gZÉÒ&&g¨ëbx‚æÑVÆ7p}˜® ùvµ\V€8Ec32êÒâ ‘)õÀ43q™Ú6Îüš¯áp/ÍßýþõF®Örù[ϱ]û“ wŠFáîºþ5ÌJAP·Ð+#%ôŠø±~°›‰EG ‘‘ÃQ¾c,Ε,]ŒõS‰cÌ™$3mš2Ù‘ÍLUrµ…-Iݽž…À®‚ïÛf>[ê_ò[¤ ¥ZƒŸG1ù‰ž=rªú·Mr1©<±ÿÁv½ÁpŠ.Û—’-‘ãœgâV5ÎÕ#β)Û–6ËðòVqž;¡Ü–=ÅíŽåVσƒëÿìFZ%¬Øª¸áþûïWQ- øÃÜ›*\%ܼ{^ë­$n+V³_„SÚPÛí±RBDÙ7oÞ¼vt®^«¶ô*k†m]‘Ï%´–>»žyöà³×¯_gÝ’µËÇz±­>>¶ÔmßPú»Y«§bM¿c$çH¸=ƒ3¢?6¾ÄÝžNÇêÁë±²IBpqiËì·Ü g+Ç% ž~"3s=$E· )1l[©åeŠ xéysR=²Þb T ÀbºÑdÝBv‚æ¡ c§ÙaäfBz)eÈ&Æ `šz5zŠçi»[`§O³#o˜œjáЩ)ÌŠy£CÅÝ-Þ¸éLµÒ`LNê™>Æþsl¥³“Ñ꨼ÀÖÃVU½iê•(:FHÒù'ös¬ƒ1ýÙÉè,5ýÄúˆ¿Ï4ïçØU6¾ÏÒö{Ÿ`uÌLÐÜÊx% i"j‰ÏHPZÍÜáŸW²ÐË@””r¶Z"ìdD¢íÊ߯‰52ågƒ½ñd±"âfMoIgÚ¼ãgh;Äîo°½ ,£gŒŽ>ÎÐ6Ascª' eˆ å"+6µ½nªkÖ0ë¬Ìüm¨€t€`ࢺ3•7Îq=xƒ€ˆÉÉÛ BÞö‰* aô M¶f8L:ÉyÓìö ûœ“¿írW1Fã\YŠ +øqžúÛSôè1VÃl„MyR IÑrH2$b¤%·`1C^Åé>ú M<_‡u2ƒZ¢a¶eˆœìK€®Æ à -Œ'9 K"Dæo7L·v#‰¡e3´›Õa“wYy¼5øÖ#=·t·VSt®rµì³Ë£OWWèúõëîd´nݺ²…v °“ÑŠNÈ«gÊBØ>úè×ßpEP-šÞ͘››“¤åL©&žäÇæi?úè#Ééõ oÛ$ IDAT>ÚK`IÚpE€`0˜Ïç?!<Hhfß°aƒ1+€«¨¨pk~+jV\¿~]á ¥G­ˆÐ 1ï-È][¬±6é¶Êذo-áï'7Ö­[g…Öœ’Ç3b{ %}…ƒ‹ Á^Ƨ³šL¯­ÓØ€uЩ †Ù–)ÙyZË{ ¬æÌJê(‡æ¨VF””"ÛIˆU$Ðjdª‹á÷yàÞ¯fîAÞ‹’²Þœ­ŒK-h’¦œ¾Lm„´@T`¹@e;‰­\8ÍŽF¦®³á¿TŸ¨6®eA=ÓØZÃìNFÚ8ó_yè£ÿÿá«£tâè¯øZ3òDóý±½ñVÆÈ©úÛÈÔ×øÕ½­Œ7yÇû‹}Þq‰T1?IS’Ð!Æ­ih=Ó‹?Ÿ½qñö˜¾OS˜#Øjå“‚Ž„F2BwKšyeP¡Ë»TMdé €"Î Ù wÛH4îßN43‘Å'c—ØŒªa‰öˆj§{Þ2ÔL5¡Ëð‰}ëÿ‡Pa~,·ÛsQ³Œ×*ßé¾'ú®qm5Ä]Ï C’4}ç±ë\wŸQÒNë.[„vƒ3¸•Ñûî»O ­ÿñV‡77OëökŠÒ¹zä +**Ôºà¾óî+šš¯Õtÿý÷ÛÞ›;†jAãŠq­dö^|åÅù¼ÑÎÚ’¸§é.¹ts®X®¾ã0t\_ÞÓY&Z´:ky>cEA«5§+òž3….ÚŸw΄†ƒ6Íå8 ö, 7ލŠ-”Zþj"`8‡øÊÚ¹¥t‰„$=õæ0Û²t©B™³¨WVyÑdÃ*¤#ÞhÜïxÉûÚî TÄêælƸgˆ‡A+­ ¨©vÌÌȪkJüM³ü7„‚ä“„R~ï&ct†m"» ž•V}Á;ð‰aºTé¼ÀփşôyÇÓÔ§‰$‚äÕãñ5~u…M6 ÜÈÕíjî\ RA›ŠŽj\¦«•qu:ªB©¾à›•n•ˆOg¾ÌoTÚŒsE5ÝIš°Š¹£ˆ6H~#Wë™V”ù6ßRè|Ží’hX ²ŽE±sTÉ7{'§ Üoø²"×Ëßþš¯É‹¸Ôâ÷[µtxSD[HÉ+MñºRÖ‡¼ç¯29@¯Me7S­…ý*n[ž„ì}´÷#>r‹[ý¯ö{Ï·?d‰£›EÖmllt£+Kvż{Ír¨¶Ø¦¥Æ•+W\ pçz÷Œ–_a›:Ƚ9ðæ£‡ýé‹?å]Œe¨y7íU«ÖPYYéªR|æ3Ÿ±§¹üÈí9¾òò+5-EvEà¼'VB«g#‹Sti_*wRªwúq¡š,R•B=ðé gË%6„!käcÀ„ .E('‹`Ó]> íâ\8íq~ÂV«ø ØU†s;L±'ä¥#ŒÆ‰†™ag˜lœNùT@¶…-y‚0/ê‡U-Hs%Ì|¬Œ!“„^àˆ(9@ I©§T°êj Âb¤f©ÁË„nΊ€š'˜)FbÞè¤iú”Xü®wq*CXØ Q¡¯ðëJ.±¹–˪Y6r441y "¯ö2°‘«3Ô¥‰Ô0»• êÝ¼ÊÆ/ó›íR-ø _’ßÎ9Øž&(Ùw)ÄFHÿsþË4õí$r4T² }ŸþßüKk碬¬üXš™´l'££t¾ÄÓÿÀ_)v¬gúoù·uÌ(á¬ôlÒçj Æ© “Õ…R 8BºÆ; ÀÌÕBMiÖ«‹FµÏ y«@+¼”Ïv ³Y {VIÑmY£{P dW‰4SBÊm>ÙÍ#Ëb””«~¬‚}7ë¦hL9}ÌÊâÚž¨,@rºÛÅB2«É£Þlö·¦Ò€_I½'¿í7^c-¨Y&££· ÒW¯^]»Ùç=NW uõTá¾§÷ieg꟟øùŠ Û»Dˆå´°Vxl¯°¾ý_WW‡#£*Ë—/+ÚÖy >kjjÖÈ‚Y}<óÝg„ˇU„_%źzõ×fJ\t×Ç¿ð…/444hY399YnÞjiµwßޛܼWßÔò›|¸]œe$ ,ÖA‹à%Ìᅧ%> †4DÉ’Ìçù=jŽ–J…Si=Û7¬yD,Ö!ã>á:šaÓÅÚ”áqœ·¨ojZóY#àŽ—3Gƒ¦×,¡0é)Yp„™?6B:Ε$íc¢[R„Ô_"$­†ãfÛ!ŽÐ+†­º>ÆI)"ÔÖf¨“Ø^?±0Y Ô© ›'¨Xóü¤xgÔ|!=FÇk<þ¾¼‘«¿æ+—©¥æ2µŒV²p *aŠùÔi/l5sRüQ|,Å¢*æO°g'¢¤Ôâ"’dâ7séÞÿ)Ïô2£A¦Öb´FH‹·tV3×Åp% ô61ùe~ó>è`‚äÊ3­Œ[BS3¿áËò<éeàW|-æÆ‹j=Ê“Wq´‘©¡âó(µa¶)1›%cL˜*~ ORD[tñLå»™³ ¯Àì¶ ç ~X™·%Ʋyæ3 ïZM™2ÅWÔ£@E’\øåýÕ[ûsÍO #äjHÍ h\í æe–z–dn½tº¥‹«PcÊ~ᥠs)=öÇnpÃe•óƒîݰÝok‡Øûî»Os¢=ÎO"Dû䯭ø–.RZ qÑešnÎö6"¡¥í­ ¿ìÒÁ½¼6,ÖÑ®[·î­_¼õÈß<"xvËÒ¯¼üŠl,WÛî€Á«ñ…/|Áý³©©éOúÓï~÷;»M¡ær¡Ä*FÕÊ©Z£¥gƒ?ÇÃÄ>C"ãÇ ƒ¥Ÿ†3¸4~µ,_ÏÅê ¹nfn×à~Y(C;䥯žõoƒ68ô¢ö0ó™b$êç fœx×ï<1=3-Þx”š`Q¨,ìÌp>@G?ûûøn†+š×¥#ñõ€‰ç¹:ãݬ!ô ~#&˜'(ýØ y96KØ=Ìü~ŽÍP§ùz†ºd±µÅO”r¬¶¦fÿ÷x0OðAÞ;Æ~%`õ¤ºBõq‰øØ&f&$0KÍ,5Íßý=GõN(麃ӛ¹ÌSuˆ£)¢ÓÔ‹·U¦ÎQ-Kj NLÁî×øUýó3ˆüWRp,$«å²Íëxæzs¤Ê,A6sé/øGIÿz³KAI±æN‹lœ" +C¾™ê 𣆙¥ë&77ër'Úb¾Ç!nB4Ì|gèÍP¡û-ÈéQ Ð[ "É`˜` [’Teˆvsvˆ¯g iiµ´Kª=Àb’aL/P0w~Æ¿ÃÓG=FÓhO’ ©wø9›jóÎ\€ Qê©mí?àG¿ý¨jœËQ³,[{mò«p®‚›¶=‘Oí}Ê¢æÝõë×/¯/®^Z³ ¢·©f6WXrjÕÕÕ÷<×·ú˜}ñ‹_üâ¿Xš™7nÓŸ÷ÜðòØ‹ÇÜ^š2KíUðÒÕXÑÂÅ&ÉÝeÄý÷ßÿÐC_úÒ—ì]TŸÖÒª,(¿cw³O8 ¥¢‹›¤,«8ú çgb iHÄüRÊO»Õ*”ø´ÃÎ^FÛEÅTÿ *gÆØ'—u‰êg3ŸµóN±A®s̃‚Ó#ºG’*I›-J*hjNR]È“:Çv Ʀ<Á$ù>_ËmK|†¨¢ Üfò!:EV#1â5Ì j˜a§õÆw”NñT/°U6[AÒMLJÃOºw§Ø%R®pW%Ìꪙ“ò{ ³•,|_ʼn‰×#¦« ™1âz^a®C›˜<Âá_ó•¿â$³!ÜÈÔ4õà‹’ ’>­pN„¡æ&®ÿÈ_ôèÊMÚ/ñtóóTýš¯LÒô0ïlàºÙËÔªˆ[ìxI¢5%hïdôû[¼ñQÓ"ã {à'-ÞøQ‘¡6sIͦ"ÊÙ÷ YRáY=0ßÏ« ÚŒµN*Ȧ8á¢ò0ØÂ–$‘£a‚AnK¿¶®iîɈZ—ÖŒ_æÄ´~Ú¢fE¦¤@ÙS0j‘aÒ0¯—Ì62~v7¸“‘ Ò@†¼Oj[)!f#wâX¢ùBe냪 pW>5û*"BÍO§®y[c‹˜2 FTÁâîŠ a}ª ¹­â’»”Qh¸aÃAæ† Êzï!—°NGm‡p rɪHáæ?Õ8ø½ƒe¬7{'»ðlW6Ëaµªªêcïs{5V„üåcÅ7•8«Æ¢+g¥«ñ ØàÇÅåµ–Rmóެ%GáÇGBè’„J ãÃlSIR¦8˜Nv£„„L-\Š¿ÄY\'/©ÑjY?QLž`ˆlž`œh€Å²aæãDUÅT{@|€à½Ð¾ƒÓi"aæk˜M•‡zQ™’­ñ öŒÑ‘":ÂÎ6ÎĹ2A³²²šñ›˜£CL™#öWÅÈV.œ¡-NLiIål»j˜¥f'€Yj¦©?ÍI|…_çh.°5Hþ ›àýKlž 9N,Oð[ÿ#ÿª’…Z.W3÷þ;¾ñ¾ØË@“9ÈÉOû}˜¡î(ß”¾A3UÌŸc»ÊŸ¸.š’Nö¯ù;©ÎÖ3ÝB²3?å™ÿ“ÿùø+©S4Šc¬ì±žlfBŠíã´>Ì;À u¯ñx²Øº“‘4‘:fâD»9óF›˜ìe@™Û#ÎP¥È2Ãy•0µ 9‰‡ÕÁØ_ÏÑí¡k·'f›Ê™ò˜Kr1À⪒„bl’™‰Ucpñ”}õ}Q´h“†‘„® =zÕŠoØ,K˜t˜ya¡a}7¢A³L̰S÷¿o)™`IÜS6Ü Ó •¹òžw@åXîÎQfÙᦗ2q™2Å™2÷•Oa¸|ÿJc9v~ì6¥¼³°t¬±¤ºÊ(c-mذÁ:dIÖGû•jq¡PПëׯwÓª2K¹qãÆr•œªªªõΰf)šùÁ‘åuÄOú;’>QMMMMML¾>ÿùÏë?ø½ƒ/üè…ÿõ+²ju’D”ì ³ÍúÔûÉØbÞ )p–ŒM¬>Œ#Jƒ]ªL›‡ ø†&©°˜%„ñS„öÆ“~r¸Ç‘ j7êØ¥ÞM‰³[KÃy¶I´(L²AÆS³U¡ ’Ï3Ÿäb€hÀ/ƒù}ôFà&ÒÂøivXÝŸÆÒlKC¼€-L$ zišz±jcl‚´ «™S @—Ú(mœW(V„½t¦Tz<¯èБzOäK ÊDØO¶¥ bd|èuÙv¾´¤YžZo‡m¾vrPuuµ€AÄ 5×™nTq—ê·5VL/—ØŠÇó±ùÒåyZTl0ñÑG=Äïþr/”,«þigdå>øààw¿û[qüÇüG¹ÿ»eUɵàYFÙŸŸ_Ñ‹ûc3öÚïÚB_=þêwŸùîãêå†;Ë#NkÖ#ÂŽ¢CÇÚ/—Ô2sfÖÈ[AœÕ·õµÎ™[;ßÒû…¯Žg¡ßÐ’¤5@0Ì6;™Ð³Ý hÂ鼯^D;ôDHë02ÅH–PÊo³£þ“¡êÿgîý££.ïôï×He’tB™4têHh¦Y ']6éC6Ä=gáì§Á¢Û`µ¦j¥ºVkýÑV‹¿Ô¤UZÒ…³L÷œ5’¢žÇm<³tó…úLv fI2&çùãúÜw>$!"ŠýÞÇã “Éd~|r_÷õ~_ïëòR_IÔdhøé#Œ¬&¡Æ&U G+è–E€R«d\®úgƒ1Ê׳½-»¦){]gWgД½î–ì=mÙ5‹yYC|WÂÔòv³j=Û5©Òâò3‹yxŒ«2¯•úC`Ic—ñÔ < nèNÖHöRºŒ}~RñBmÃä2p ÏøHËö½’É yér~UGÛÖ½Ìbé*ºnåniw$ì¤àÈgxûôb º‹9´–ƒ “¿‰æµì”xêÅûXVGÛ2ö ¿å1t¯ÑŸÇÈÃ\;HAƒåÄ"Ùš:ϮմoÍ^ÙýEƒÊ)'ÖGÉf¶ “_J¯>£-l–'ƒ yT8í¦"D:H¢™Mù Çñ•Ð'b·•/ûIéÐSI´‰<]uŽ€6Û!µšv˜D:q=cð“2ÞUÎo4ã./š¬3©é¥¾š2{… ’­ðçä†!–ë)©$2IJu) N««§5sæLÁ§ÐåcèÉÍšjþ?øÀƒ¡wèé¯Üþƒ;ï¸óÇ÷üøÇ÷ü“ýy*OT7³Ÿ@ÊÝæ®Â6›l—~ü4«tJ’ã›´l‰xŽYçwÞyç'ê922rÇîØüÝÍúâ®;ïú\vµ”ízôèѹsæÎÊŸuüøñT*eyü-ß»ÅM‹ßyç·§Z¶æ1á“:UšéÙ`œ¸"6ÝöÓÚD ƒlpŠ´gzÒ|KðÖRMYô¤[Ð!ݪ'4 "fDÿaW“ã“ ‘mnü¤é7{gÐ%Ehð2ZIg5!b Ïh&›+h¬cnŒDœㄽnbJÐ÷ê#¤¼fL¾–=ÝÎ×RËž&òª‰ªn¹—Jy¬&¡vfu·ò|3εˆfȃØ*„ I•Iž!ß¡4¾bIš;ĬJ¢… ä0–$ÐAXÄn=ËØ÷4—^Â3G˜¿“µ?á»#äHæ1²‚½ 8œ$PË“¿æf Ž¶,YÊþÕQY¬egœè©\mÛ¨¬#ºŒ}ó8ú$WhJ¨§µƒ° {Û¨4l4©·òe¹ÏoåË!3ÁYJï RÖo¶Ž¹±ñ‘MB¤eZëÅßDž¦•¬å“)¢!@–8Ôyvµ±†l  ð$õé+,E“f¤¤E?Îð¸MœböõŽs–‘ˆg\öjÊ"M[´5NCÜ|›Àã“ÐjN“g¾¬ÈÖ½_¸i¥ guÈäŒIçûjŽ>$j­¿nUY¤õ×­¢t×_wýYåšnìœòm·Wý_ ÎcÇŽ¹úzhhÈÝþÌËË›|ø8«kqìö:þh—Å`7¼sÎ9===7\ðïÛÿ}æÌ™5>Íí{œ~ÖÙ+Õž±!àYV»îŸë¯z}`pdèÍ/Ì>výõ—¹\ñLì‰g2+Å©ÇÚDÃ;Mu+ì2’í°‘¿'|†§Ê ›`¼wҲɺ›*rªŒirÃt¤Ò¦ðÕ w•àª=&æ‚Õ´K^«±½Ò:#»Ç™w¼ÆFžs²3 ëÙ¾•/+õZúÛ|†E=Ÿž‡d€ÐKéOøn;«w±ÆîÔ·zîÔå9na³µ¢ÝÎú'¸xž•J캋Û2xGÈ{™ÅªÁZtT9WFB„%’7ŸáJ¢Ílª§uŒœ4¾¯ñë_óµeìÛÁºb…ˆ+ïz{Óø$•D}·G˜ÿWKà£\C)%ô]ÊÓûXÖOÑj¯æ±4¾Ý¬ZËÎ óÙÇ2M‘ Såâë·†û°ÑóÄÖì• ôî£D ^Æ¿Ê6ÒÖÌ&½½*·*ÓK}Љu«×¸­>Y3‘™¶víÂÝ<«PsI;™¯¶<ëú›pŽk•D#Ô¸âfí)-5)~ lDãþI¢\¿É‹µ£Ÿa÷C¹Ÿ­¹ÀZ³Ùo¸d#W]õMûwî®ÄNÈ:N§Ó¤ *nàœò>!×pš{NiÄ:Y¬äN•òeÂþ~âÄ )~ݿіø¦ÜÔÜÏç½÷Þ›Òb"3pghØqΜ9ßnü¶ŸpôèQ•@mЕôT*!ÞO2:å»ê~8íŒÙH÷Ô}|>Ÿû}H§Ó*á 8­ fJÖî.–Ú¢¨\ï•‹9cÆ ½ðÇ«|*ˆR½ú[×~kš~ún±S~|îkÃçóÍ™3ç†ëoø÷íÿ®GÖQæ›W}Ó]BŸR4¹Ä=Ნ%6¥JkúKè±Ç²Y6ü`[Þ¬9©¾W“ÿ_tr§ß¦@xñg²N°‰ÙPD@]¼ÓÓ@×0IC‚Qœyðñƒ³r+]¥à– ¸h~㥪¤w<¡"lC€½ã)Ê”R“*æä,â8åJßÄ“Œdx’ò‹/`ÇÝ[^/ûP³‘ÑDÒK}%eØDójã¼Øe,âøª‰¦ðog}5Qõa c…1!O¬–=*Ø 6¶°Y_˜îÎ~_EÂ=ÔVÑ$Ñâ|†Wò|>Ãϳr%ÏwQ5HÁ¶a¾zù ÷°¨—RùÔ²ç%.¼—à†5ìZÁÞcÌ•GNEôË¡‚îòîãÆj"qB²Ô8æ"zrËa,JåZvöRºŸ¥óQ*b¥€Á§¸¬Ž¶(•qBø5ì’®XŒùÅ—ñT?Eó8ê#]Ì!µ<%VJo©ç‰­Ù+{)­ötnï÷ê.nÛÁ:ű 5÷P»švÃGÑgçuäÓJ…sÒ)cOi^§¦ê°z)uŤ„sã¶žë-¥IÐI,hqãÂR½yñCÚüäÚácÓ­ìð:óÇõrƒÆ0Yð Ö_¹˜UMQp^xÊk÷²¿§Òþ¼oño²ä;ã~’À7¾ñó–ŸŸfÎåûök§ÜÍ݈%pš3gÎÞνÀН­ÐÂÉ}µ[¾wËÇP¨´: ÉóÆoA-*25‚b Ånàœ¾¥'¬ÒøÇ_þò— ßµJœo_÷í30˜òp6e¤ëëDY^ýu}W¯N#1 MÕˆ¿a¥ä”=NÔìÃ=IH:éÙÀÉž>ã©„d&}3yR!×AÓ°yäå¦cvU€Çmlã”»³œŒ‹JX»¡ê·êkÖ1‚ÒOB‹èÙ€,Ýë<»ð$õ_[vÍølL6á °•+EF½ø%¹j¶QYE×FžGYÆ>Ý^MBC™·Ò_NLlL’Z?©M4Ëa¼˜C¥ôI RÐI”´âšåÄâøÖ²s;ªèª »Jõ>«=ñly%ØVAw9±Ëxª”^!Ÿt°Ø&¹PŸ@¨Å„U ¼—›€'¹â>nG£‘-÷z¤NKÉâp{F­mAÛ!†3„îsí†a5,UËͲ£# ‚JÈðuí¡j‚®aËÝ|ßÏ.yÙè÷Ö²§ˆþ[¸ºš¨cúêi)äÀFžmä»´)9¤‘¶"ú×y.[›­‚ÞÁí·sG ÿjg1t!/©+)»ƒeì[DÏ›Ìé§H_zVEô×Ñä1ÒIÍ–G™WM¤‡E_ä÷²Ò$IU}© [ÕúdÝž6oÅ1æs¨› IpKé p„¼Bö²"LÇ9ÛØ°mR0ÉNV6{tïeE rÚÀ¶úór7‡(VÝØ&¬Ýê¹3ž[¸àVÉ ·u U$÷S–ÂoBRËtøO^7ª­3…¢ÿÚXSMg„ƒdu1ã2^n5å÷z\³!gÚÒê^TÍ:#Nˆz:îjÚýû IDATˆ€Æ«Ô™?6蛄C[ºz눶ёq"?-auWq™2#å¡xðІ$ìœÒ=à#ñrcç” ”) wök}÷þûîÿöuß~÷ÝwGu×ЮùÖ5¶<ŠõUϧ§³Î81ôÓŸþ´¥¡ûþ°3gÎTÉÎ=ÿ'Ôœ/£b™q|–kŠiÇ×ÄD5EÞaTµ¹Æ¾Ü˨QÛ&íÏÆÇæÿ¹ö÷J†“Éæêù‹‰ê1+‰šyÓÀFfdhí¥4΋fºŽ<«nYˆ´·/`Pz‰fu‹ ÝÌÑ C‡ˆ · ¢Ü’½GV Ãä§ðWSÖ˜}¤—Ò:¢¥ô.c_%â|o2'ä‰Å(Q¾™- çÚCmŒò'¹âe2PE×NÖîcYoUÝTôS´mAà|ƒŸ/à°è¯h¥î<£Ïqq_ý1ÊWò¼üüT;½ˆFÈ&_'#äõR:Hå‘… T馢“š墰sx³—Ò5ì!OöP ÈD"Fù³nàݬê£dŒœUì¤`ˆYƒDªÇ9Ĭݬ ±¼“¡f•Œÿt=øImg}ˆå~R!ÒR)GeMÊñø xñ«xÇ¥2…¿ÕŒRi2ò¨&᥾Zú©lƒ†,+‰ê"Ñ• è¥^E[ƒ‰p0ÂA¯ $W¡%1n™2bÚ°½†Õé0W‹.Èr´³ZGÉ8å.ý]ÇÉvÐSY?ðà“ÉÜ-™G›Æ|à­S ;~ ööÓ‡~j}‚ÜKÙüx³»ç4aâS§þÉO@4ZäFJËœœœ)Yµû§¾wË÷Äk’É䲿_vªg.1ç¿izæ§*ÌŠ¹§c§$Lóšè=¹eëð°NŸê5ý´éªo^5sæL–Ι3笊’˜Jc|*m‡t§ÀOL*Õ¦D"M±Á¤Èœm@:¨ ÕžNʼnˆAÊ-ÅŒ²ù\)ƒîÜiLžIʵM´nЉ ¶éÄ£š¼ŒâWgȸåIýñ¢L^âøD,âÙ€×3÷ÎNdHI´Õ)‹E•›QGT —!Òå´›çÌjÚó^î»ùz#mÃäËÑ­Údsªð(ÚTËUªƒ˜Â/ã%šs¨œ˜t¤5tŠ´­`ï öîdm#M_ãוD+èžÅP€d'5õ´†é^fñb^ÖÌe KÙÿ —õ´¾Ìb™ÐH¶Q'Ÿaò×±ãóå¥7JnœÐ!Š/á™g¸dû’ŠèŸÏ;‘©ªï\ŽÅ ]ÌsXr)O?ÎUa:òé¥t€Â*º.áàMæ,àð½Üt÷¾Ä…… „ˆ' ¬g»&gº©(`СöQ²–›Ù’Â_A·œvÐVÉ£UtùI©Ç)–,Yµm¬ñ2ºšvaájÚãTê”c³PLƒ@²ê 9ÀÙvCKsÛñ§Hª¡™¢íqˆX¸ÚB ãtÙ…|I[œ±ÜO"2. B‡±«¨8¹Zpßû´jü)2gµBþŒ#/ÊìU{ûn/ˆ î¿ïþ›ÿífK‰D;¥Ãä“)±óÝwßu»NÀÎs]sõ5>æ xÝWë¤ r»¥»•Vîvš;üdiÌŒ·4Ô}ûßÐ1NœR O î0ÙÝÞÝ@ýHXµPsÊöê4“TºqšƒÅ„RÇ4²²³Â8Íx@XZ§pd½Æu=&b̃Z†ÆWLZ¡ŽA±ÍÖ0jØn}¿Ú<G“uÌÕn¨ÁJã{ÐmŸ~ÃûYªè±},ó‘~“9+y¾4>ýÞÙ—Òǹª„¾$},»”§õ|žá’¬K8ÎìRz÷P{!/¥ñI4ò]A¬>y­¡³Õ½”na³FKéu;hò|KmÔ.ª ´IœR&IèªcW¥‘\­g»jôµ½ˆ´ !¢¤•DjD6p«çNk"ÅOjÂ¥!h®Ï$$P6 ¬y¨°¢¦CÙ!¿!²n-nCÆq{¯W^ÐÉVaýiÈðà÷nýpüøñƒÌ/}ðÏ,õz2~óÍ7§2žjŽÓ™ËT&®¼0WËÓ1s»8åf¬³ÁÕòIÙYL£BÔ£IÖ˜2Gõ¤kΤ¡—šãð×°‰FŒSì$c¶QA~Âc=»[!¥2„R!–—kw˜ †­:³€Q*ÍlC‹—ú¶oå„—zhUBˆ~J¾B¦NˆŸ”t­›Ù²šöã’m"t’$uYÁ^…tK8ÐÃ"Q4ÉS•ÿ,Cö(l£NN:Ïqñ,†ä´ˆž~оÈïÏËWtçY å1²„Ç™ÃØk\ÐM…î©)OñÝ+xò).ÓJ‹òÑk_ÌËEôW9Âüq@„“úy!/í¡6ŸaõD}¤®¢Qݳ‚îÆ^fq%›h.¢?¯„¾8¡]¬‘ã|v²Öxå,á`5)½iåÄîæëÒ9Û"p„ƒuÌm'¾.ÒêwšB}JŸ‹¡›•™lžäÝÆ™: Ì%£•Ö/iÇKLü@«™¶ÄpMMX9˜‰:P2ZÒÆ§Û$›Ê©K=>®0o±ª7õY£L†]+aøôä¿ËÁÁAµ¸¾Û÷ï¼ëÎF& æwnüÎ0ÓQóêk®æþæKØiƒE-ñ'³=–¢xˆY ´´Ð h|’+êhó’y‰ õø¥ô^ÌsmÔ•Ð7L~€ä9G™'6YD¿IŠ*ÛÀ6Å_cÒfº©Riµ"ôšà,'&q™Ÿ”äB®¦¬ƒ®Ö”=lÙÓ›ÁÈzqJ·i{ÝP¡µš²H6d<úëæhµoÂÈQs/7K%eBž˜[ŸÞµ«ÁËhα/é2î°¡ÖŽ†Î‚hÆÐÓ)ƒ¬GFFN¥ˆy¸éa«ú0\sz1yÇ<Í-ÞM#þõÿú7Áì¼¼¼ïÝú½ÞýC¡”»â'®é†=÷ë²Ø¦RíÝÊiI=}üž²oçUMaMH"ûhpåŸÖÚ‹VÏ\ ázÿ'|ºN¾wë÷¦t·w_üöÒe©_d/­Sµ–?àìȘþâIƒáNy¶ÅDR‡Ý±—®{&]‡7¹4EÝ–“5„ÂTÙ{º \‰q»óŽ@µÀ˜ w¤8O ä‰ùI¥ðÇý4÷nZªåS! ‚Õ¤"´&¨_M{3›t£,ÄŸd[#6$±•^‚&PÅWBŸ$?â1ÙÉ·sÇ66$ D©\Ïö. Ý{RøïÎ~_Z›x ‹ªbÅ(/¡/ŸáY 1«‹ª­œØÈŒEôHàs ϼɜ$y:k°¤™M«ØÝDc !âÂÑ*ºnâÞQrw°î žH¯äyé¹{š=/qá!Šçs$—Ñ1räÛ>Ÿ#=,Zƾ…¼ÚÎê‹yî*¿•»¥¿]Ê~i¶°y;ö³ô2žÒÄËÖ•ëa‘†RÚ¨“«‘!T­•­t?E:·pA{5»É=»Jém¢N„¯œ¹‹èÙʉ:b1Ê7°m7«"Ôx…Ü&¾ÕÈw[h}€$m­¦,Åò¸“f¢øWÓÞæºnÕfÖÒ r׋˜F¾±GpØžZ¤“úë’×úlÄ&´¨ÉšÀ¹Z"€SÃè0æÌÄi9Cœ“…î¿‹c•e;ý)Uµ¶½t×w¹·ìñóõLç¼o·ªˆÂ”€ç¦A¶ ;aTœÙtŠ…LÛÝÌ9MÒfŸð™ÅfY¤w£àîøýúßnþ·jg6hãÖ˜;w®;ÌPëMÖs{çwôA¸_iNNŽ8ßG8tª%9ë›o¼ïg÷Mî>ºË­† [åÑÏûÙ©È¥jég¶ìÅ|úþ^—ÞêÓÔôžò¬1>øè1iüimSÓª~2Ù\ù$H@dMv*)‹RtÆKÆwk¤âe4CØ`jÐFUË^VgrõŒ¸Ü¢Ô{©””ß±‰7Ó&^üå´{šåÊiªcn;•BG? õ¨ª!EBÝ/ùÄ(×ïê¢JÊ‘(•²ªIP¿‰æn*Jè«s9É« »›ŠÛ¹c7«ÔѬ$ºˆÍ´Ìb¨‚î„<±°AÍB†˜5‹¡B(¬&ÒD]ˆå½¤Š9$›…ícPÀ Èè<޶R¿ŠÝ»Yu÷fâÃnåî­l<ÊÍ¥‹y9I`6Ç ¸ˆ窫x<ÏGú^;7ÞdÎ [Ùx1Ïýž/^Íc³9.£‡˜ÕHÓs\\Àà!гÀOj6Ç¿ÇÿÄç$5ß)@ù1ævQ%פeì¿ì¦¢†Îò62c/+–±Oµk%¯5ÒÜME3`ð®öâO-'v W×­¦³‚æ>v=Fy5‰¾ßH›2g*èn"¯‘‘=Ô&ªZÂ_?6Š@ÁѺÛ¨d¼ÐÚwX¦sP‹R3—âc|T)l†UÂðRyrjÞ8ȹl­#—»PØ5Ó,‹c˜5yNš/¾1™qÚ¯¯m¼ö-Þ.žª*%@}¸éá†M Ä ÅÀoÖò{Âþ¥ÒŸ6JÐd ÖãL)ôxë­·´÷}ïûò6™‰>>øÐƒC“iÙ—º‰Ž¾8•ŒåŒ¨S ô»´ãO€„i$6êaŸ=áÌ©–z¨ní®}Ï5m¥ºÏsöêú0öxtM“#;=pºó¬8W‡2|Réɸ y=ÎêˆÊ°;J}†Ö¸©zí~NaÍ*;Li×q¶“Û™ºDÑq/!çW»ÆàÆuŒFôK›™i Ó&©pí+4©Š/bâ_jèßÂf=úM§-C«²9+‰“¥2BðV~¹…Í^ðU<µt7vp°†ÎmlÐ>¾…Íu9¹/cŸôNÖ*>,F¹ìà›øÉ¼ö—]ÈKÇ™­1•0/³¸’h„êJc YA÷K\¸”ýë|ž•ªšúH+Û$D\fë²t?Îì¹{šKij£îRžÎg8ƒ÷w|Iñ)€<ö ò9ʼ ‹èW–õ>–å3§,ª =€P€g“R´SÿMvNµ¦œù¨VKsËW^ñäON(Ò 2z7s l›žh~T|Ô­¿úš«í$ô4¼óœ)覃-®à°WÔ‘¼jý®‰ï<¶1Ù`ûC6ûוµÒà¥Þ„c+;bÔÞÓ¢lˆ´v«WSfÈ¢“'lB,·!Ø^Ï(Ù@QM°87R߯±àx„“B³_ÔÐa†VTCÄLZ²O"O¯×^J·òe=¥[R$QN¬‘¶ÍlQ굚£ƒh¸b;ë…š·zîÜ鹬—ÒRz`é'5Lþ!ŠSøå;L¾x[>Ã<ÏÊãÌ!ïnW—1LGƒŠw#§‡E 8,«zMã;Âü^J/çWîåk{¨}™Å’ÏpÉ•ßD©,`p6Ç¿Âo5iê%ó<+_á³³9žÇÈ:vHÊcïbžSÙLÞ>Ì‚Ù߯†RzßdN]ÕDú)’(‡±!fE©\DO1‡z)-¡¯—Òä÷î»ï¾û &|vÓœ™N3ÀõŒQxò‰'¯¸òŠŸ>ôSÑM}á§¿­í¢õ£p?¥i´uçL]ª5@hèæ¨!šV ØêêÊ8FBfˆÍqfWÔ¥«ÄŠ©Íʾ£š2éþÎV"­q· ag„ƒ‘lM&›K6`}a¬p#álj-*÷zFÛ²kÌö””g„5!x+wI@CU‚2v‰ã³µÙ:¢UtÅñ­¦]†v&s#7F¹fNœmŽÊ>JîæëÚÐe´‚½ÊêÊds7zž«{2O|–¤`%ÏKp»‰f©iBÄ›¨ ÓQAwuG™·™-… ¤ð' ä3,ßÚñ|†3{ˆY€â6eô£péßóÅBnã.¹Â~ž?^ίÎãßò•Zöä3|€%G˜'4“·3x{)í ü—Å P({<,z)!ï+ü6Ià%.l¢QZ=áj"9Œ}…ßjš%Hb 4´º‡Ú:eä'õ2‹«’ÏðÝÙïW{:7Ñ,õlu~R ‚|w»Û¨lcÍjÚkÙ“¡5΋^üW]¢h©šu‹òÑ ØÆçÏÀ3ÇgÚœ ÚÓéõŒºãwÌ  ±ÜåÔÑb&ƒ;··mp¥Æb Ž<;è|«Ôk3Ó,áO®©²äÚ¿Æ:?­ÁNd“’ˆÌߤ̖æѸÓYvßÏs­¿ËÜ}×Ýwßu÷éä=Mƒ“ŸªLSý~¿ßï/1«°°°°°P¨ð¡<Œ¿ýÓ¦Ÿv¾ÐyÆýQ»¦|'íw­+Ч>õ)‹[²:úä'?)¨+(((((ÐדE­g\p³ó)×”Ž?5Ýs¥SÞÓ~×ý€ÖñÕ¾-ﺖ½çW^™9±ù3gàÔñ!K&§i½«'&öyšÀiSM.×±VS¼ÿ‹pÇŒµ^«²š*‰ÚﺎÞIÙj+Ê ·H‰#Ç>ëgf:R-“„KáË­v8Cn„`%Ñ'F–i…]Ë)­ÍÌ™Ä(—ç-ãã}T“P³ð[.B6ýª‘6QR!“Qÿú6ò¬ðR(› XCg#ß&ÿ–ì=ž‡”RÀ ŸÔ,†¶± pkʉyÉôQÈŽ®ˆþf6ÝÊ/ÆÖ±£Ÿ¢Njö²"…ÿÅEô5t¾ÀEÕD¢TV˱ ÷³tË–p Ÿá|†}¤s󓺊LJ˜5L~%äó‹è9À’>JÑ3Jnˆøs\œ$POk }—ðÌWùÍjÚ_á³ 8<@á–Ñ¿€Ã¿å+‡(þ¿Ž2ONF·qW‹Ž2ï5.ˆR9‹¡ l“ ÐÕnçSQ½³·Äésssí¹¹¹h6ƾ?÷m¹ïìqMK7¯¸ò ëñãÇuì»á;7̘1Coò„P7îZTžŒÙ“iú4w8ƒ%Ô<´OÉ8A;lySú…©d aw¦˜ÁQgÄ3J¥QØv“ŸÝ•L“3nL‚ZM” ¹ViÎìÊuª7Þ¤£îž« WLÔOªš2)>¼Æü¯JkD8$QJïNÖjAwˆó¢ €€&òÖ³} »Ê‰•Ò«YÅTi:Å‹¿€AUz7ò¬Ò7÷P›ÇH7ÛY_À L€CWÑ5Ä,AÛF£ômÜ¥ô®.ª2x«‰uÖ°«Š.éǸºåÏpÉb^^ȫϳr)ûÅ•³ ˆþaò÷²bŒ¥lÖÑ6“·óùó öÚt°\F(,d`„ÃÅj"¯’¨`2Ž¯Õƒ”“’Öï´  Ç<c-;Žs‘l ÙÀz¶Ç³å¢›¦;˜¤+7—:A!b÷Ÿ",k\]9š›2—\‹b 4 "¦ª¬ñ0Òœtca.ÅQ—«; §ìÑáÜ-û¶N[ÍÓ3Ë}£õn š={öŒ3rrrôÝ É*ö¯S•øÄ}Ÿɲæ®bœ ,X°`AÈ,ýsΜ9r4=ƒõ“{¼ñÆo¼ñF,‹Åbg!rÌr›M0²j½ÿBßwß}W_è­>qâ„›«éC±P-“££GºE[gcf"Ê4¸®¥[ž|âI~õË_f⌗u9v;1Mɤ-<ë>zo'ðé3N¬¨öuÐ&C®½Åý$C¤íÔf5®é·°•cؤhu(…g•D­Q{5 “ÜT¯ï ¿ó¸'òļžÑj:m&¢yJ­.:ëQY½«¾g¢£¼Ü{“<м¦,¹õ8Õ”­g»&;|†Q£¼‹ªõl·EÂ:#• &qì ’Uѵ 5tn¢Y®@)üB‹.ª¤ÓQçr7«b”Px·uNP›së†É—^më4 IDATÓžÔ7¢¼ËØ7HA#í¬¾„gzXtˆâFšÆÈQjXms96Bž\Ú¨+d`‚Ÿó ¡¬ŸÔLÞ.dà^[Ê~Å­¼ÍÌWøl.£ÿÃ?ü ÿ1BžàüKªè:Âüuì¸$‹Mø?Oãkgõ öV=Æ\͆j¤UãåK8 :HÊ¿·òKù¥ð« «¬™ªþ¬~p]­vVÇ(÷â_Ïö6*«)³­ñ }Fú•i*Ʀ ð´X©ªÚ¦1Ù¡b©.Z–ÈÏ–“m0Ýôñ£š²Œc¹àD˜a•”­ëÊ Ò#$06§Iœ$mÓÝa½óG§3¢§ešlÛ¯¶M¸ýƒ’¹;~pLJߛÔmmØÔ0:iMY?¼âÊ+}äQ÷Ý„¢J›Ùf ãOœ8144444tOor5Ï=Á üùÏþóŸÿ|øðaõqϸ‚m˳Ÿüä'ÇÆÆ&¸´‹ªNoz§é3;môõõ‰@ëú@5Ì)ùÙ”G¥3†Ow…Vÿd^þõË?Ј”¤:÷ßwÿô…é+%gL:?€8ÈU³Âëµ¹»Îq8ðâ7@Ð¥hŸüêL%ÖïÈ1LŠg†\í/j `|ᥤ8hû@~ÇÀ¶ÃÝ%Sž¡Uò ƒÍÉ ‰[é·®1ÖêV4BáÆšâ0¬”J¢uNF‡ÎûyVžA²ßDsœ…pÚ²‘¨'APšµ?UAyj£²‹ªårr¤`1ËKyzˤ-¡OcCÌZƾ½”®b÷2öI+ÔÎêC/c_>òJï¦"@r.Ç$Ü-æÐ\Á“¢žM4HÊEh »Ä …aòÒE¼\ίþÌùðštUG˜ŸÆ7Ÿ#qB7rß›ÌÆÈñ‘^À᧸ ø_ZÀa!ëy]TõRÚÎê9¼6xPCg?EëÙÞKi3›Òø:©é ÜH“î°ŠÝ1Ê/ã©rïª ÎBD¾kÙ³šöFÚT².`И!,ßÎzɬªèj¤MbÔ ‰¶tX‘>+AP*\Ë@عä*\3eþ@’¶ìij˜¡/«b›5ÝËm•.Ôœ;'ì&7~çÆ)±s2E8ч!%§¿´â[¶¿è޵²&{KŽk‰nŽŽŽŠ[cÄ>³Ù¬`O¤ÜVÏÆ«Bëã fppPÿÔ«¹:~üøñãÇõÏѩ֑#GDûúúúúú>¶ñô‰(3§Zº¢ž|âI{ØRØýãOüâ ©É&œ<žøÅnu«;Hç}¯Ò3{™Lf‚FéTØ9ŧ˺lBL ¥¦åÙ`Ä„þÌxÓ¹Ý ¾÷ȇOZÑÓå~:# ±\^hjöY.?Ï6• ÷ÍŒÇewØ É:ï¦HÔ‰ñ–æJ“²@Óq~#ÏöRæ'ÖF¥—JÍHÓ1H&Ô¹¬"N(ÊH‘€Á=Ԋݶ³º’¨¢<äû3Hª®~RqØèyb%mmÔõRZCg#M~R Vѵ˜—5õ1‹¡ò”L é%£Ìyí ,ÏôEôô°¨‚îòpXËÎùyŠËä=»Œ}#ä]Ä Xò&sžæÒ–ÁWùÍ0ù¯ðÙKyú/|&‘™¼½—ëØœÇçòÎü;ÿïk\¡Zµ¿ækUt‘3Ÿ#Ç™=@aˆøE¼ _x ‡E>Ò¢¹’ϳR³+z¶b¹»Ö° !¯–=bV/¥q|·zîÜIM„`©aò ón¥^3?:îÈx¶Š.ù×ÑsKØc>…¹ØCÛVN„H·q Ž™ìÕ€¹fœHscøÉÖàIn¥Ç“ÖI™ŽdkBÍ/…+‰¦<1 n‚3Í æ(ã>|1Ã5¤Îù]a—{Ÿšu¦\"æçÌ›§áöªœ<Žâ>JÏŸ?ÿTP:oMößqÇP|l 9gn/ÜU2ñ<Õ`.\¨U)=ª!K7é´öInQîû¾–›n¾éƒÖúÜ_«énsžsÎ9/‘ýº}VòzÕóWÐÞ¨æô{ï½§×û044t–BªO¹œg€7§ó#D9Õwzð¡)'8ŸøÅnܲA:în„R{mè²wóé'NL&£Sþøi®Oœ²Ç)©Âøàf ;š‰+q·ÃºÈ†œÑÉgSó8‚F¯œ\œ™6Ùµ—ã=”Àñ* 3Ê[̦ãXlKã£Ì•uÄí¯6ÖÛuD5¢rëvÖIȼM4BX{åæ1Søa"‘Ñ 8>(Q'¨4ú€¼âÖ°KLÉR¶fkz=~RŠq.'–r±¡šÒò$ ô°h;^à" Jª/¸ea:Ž2O:šY uS‘ÃX/¥ù ×Ñvw­eçòÏÆ(ogõ6‰ßý…ÏaþaœÏŸÉ׿Äï–²?oûü¤Þfæù¼8ŸaÍ}ªvº”ý%ôí`¤³µìdúH/á@ ‹BÄã„æqt„¼•<ß̦Rz7ѼŸ¥yŒHp{ˆâRzå)¨Wª¢1ÙÀÏ(°‘íÅ:Dq/¥V1ÛK©Þ+6¥ðë-ÍÐcy_µÓÕB½Õf+–ë[AqR!O,ž-W†“‚†6çøeò†ˆ%¢qí8¿Ì˜¢®õCpýÉœ| ¥Aó f~´Å8ö5¼¯sÐ4r,T¨ÛDþÙÝt¤¥ÔšVe Ââm .,++³·k¦BUM ‡BDZ±1}aI¡A¸¢oŒŒLÖ¸Þ{Ͻv×>ÛËÒÑJ=ÿ P!PTv•Ý£õÿÐ8~:8cÆ Å‰¸¹»ýzr½Úçó¹OÖjÇîödàžBQ¨8pý ×?ðÀI‚2K]wýu=øÐ4ÝDaçé×iOs}ÈIâS8Pþƒù;WŒ‰ÎÚ fGȵ5ÏŒëFç0•ÑZLè´ßì/h‰Pcº>˜\_LúRG‚z¡r´BCÐØ‡?îVg€Ýq,Ãë5Û\?»¼Ôouà9"f„BNüu5)]T©Aµ•/ÛFZsý¤ÄxÄf·±![)¯c—ÆT¬|W½ºFššhf1TçÙÕ–]³õŠÂVHH/¥ÛY¿õâ®äy/™Eô,áÀatÌåX3›jè‰,¡ïeßÀ?ç•Dû)šÇÑ çsjžÏŸòjU~Ž?ý¿oÈþâGž›¿Âo1¼ù³¼roüÿr3÷ü/_°õlŽ[ÈÔ“9À’Zö$ ¼ÀE*±Êœa>Gö³ôB^ZÉómÔ]Åã/pQ‹º¨Zî,‘mP/¥ªÓVÑ%·#Mãlg=\YçÙ©嫨ÝO‘ü€ µŽ¹[9‘Ïâ<;HÁ0ù²Ò; G~?Ñe)3ÇYM4ÂÁÌØN%ÙšˆÇq?Žâ/æ{ÂrC”o_Ä1@ÀëOŸâã@Õ¡2ogWk\íÆ{v„p\Ó³´6¶®»%õ§cò7¡ë€q»Ú8fŸÆÉ-’†É¥ÚGy´ñÛÃ#ÃS"§0™ûø—…Lë·w‚žð'?ùIÑ;9­…ì©â_>äé|_íõzU:vsÊ ÑÍ£££Ö<Ï}ŽÑ§Ú‹/^yñ ‘þVŸˆ{øuBxÙõ7\6~㩈¬ýuúí<òˆjÅßnt‘ÍÅDÑé–7ßHþIßu«”íº–tã釹~øRmƒD‰q« 25¥ ËmÅI¹`ãé†Î–0z§Šk–uR³ŠÝÒ_Â3K8ð$W¬b70£òã]ËÎÍl ’ÈdsoõÜÙiâKw³JFöA~ÊÚ8XMÙüöcÚÈöí¬_Ïöf6ipVá:5òP%!–o51œdq9[éOÓÀõÛVS¡Õ„™íÔ¤Ïu„âžd›Ó_°9e6¨ÁÚ@7Ú¤—ú¸SPÁ´íS Fq 0N¡XÍ~èh3\Ö:MZåÑ”Œó}Kjv±›£;tÉ®óÎ;Ͻº¿«ûO0Õ¶kqÂ"Í£p‹šã‚É>P7Aš¤î¦{£œ={ö„§qš³7Ý|Ó;¼óñ•}nzÓþéÒjûMÛE_½¨í7m‰Åª¥šP\µtÙ~1¹8üÖ[o¹áð >ðàEM7²Œé¾–š~Ú4á»îD9›®ùÖ5§Cû„göYØwfllLe {¹ÃGÝ•ÿɬúô{œÎ_Aˆå漜ÌϦæä?ïp»Úñ¯ç‰.l$B:Œ;÷Ô̸þ©8°“ëWÝ—E^üò‹w ‘\b%gfÜù[ zb‚^*WÓÞF :ü”E©„ÖŒ±äN±\µÓAˆH%Û̦ ­°\B!5>{)•AL9±Ý¬R>h;«3´†¨Å œBú#}q4dÑèyHyaÝTÈļ†N9¶ßÎý©ôª~g€d€¤ ³2žÝËŠì}“9òÒ–øH' ¬cÇùüßó‡?ñ¹óxã¿ø'™¼ÆëØQÀ †aær 8—w.åé8¡ÏóGzXôOü×|Žü…Ïá3çñÆ0ùOrE˜Žá?~Ç—ä='£¼‘¦>JrKã+dà&î} .àµçYYAw#Mª‹èßCm1‡.ä¥ìmä»Õ$C-Þ¼šö¶ìšjOç!z1¾ÁåľÆ=òs/`ÊdϤI3²ArC”PVš!"Ö‡”;/އíxFMýÿ „ÉÌTà÷tÚþwÔ3jrup¥Æ6˜f¤Ã;+‰¦œø€¼‘ÔKûã¥ç°8^‰Í8VŽ­ÈlÖ¹P“æLÙa¬(G#t`4ä'çѶLßà<ƒ Î=bq6̧t minQmÖ2`7ž1c†v|UóôV#£•reU3" š<ãWqªRí„bf*•r¿œ÷ÕOS­•VVÿTÛRÿŸ ìš°ÎlüfJŸŸ¯ Àý*$ʽû®»o½íV>É[o½5MÞœûÌ$SÆiN9§:çé1ÿÙã¿øù/&ô懧Ód½æ[×L™²i?>tOÓÈ9ãOó43i­õâã͘—åúm=Ž«{ëV°‡5×–ÅO|üd-âX¿§[””4¢D¾%WÓÞ6CAå éÌVUÙ(Ïæâi ²¼c&|*‘!UÇܶñºªaÖÕˆnYM{Ì„mX‡±ÚÁ5/XJo‚àFf¨{¹žíÂEé?o玆ì/€n*"ëˆ*›³™MëÙ>HA5‘ml¸•»£Tª»™Æ'ÏôuìˆP­H“ìÝËŠ+xò3üå8³Ÿgåe<õ?üCc’ÃäÿŽ/-áÀ¯ùšÚ!â~-»$'íûƒÇ/—ƒÕ´¿ÊÂú~Ç—þ‘ÿ–îË,¾”§( ÓÑAøïùü¼Ä…²=Àa°t7i|ý¥ñ-¢GÑ` »‹Ûšh”ÖIqÙÝT”ë¤&ÂA²k=•²ó1®ö“*'¶Œ}ÎIᯡs ›e”p&n[S”‰˜ÊÙGÕrfäoŠöH6ÒÖäÈ»bçÄÖ¡v¦£)Ë6¨½jÕàAq’¨c.ìjã˜5@HPŸ!·’2UPC,‡XÊш¥Lb<Ú”…uA¦ \M"âjvÚóßÉÅØ° ¶±£_¶,ìŽý›,¿ß»j»|ã7Ngâþ›WógýÌ5¹Áùa–àÓBl&“¥Ðÿ­¬ÆMѼ^ïä:í”ͼl6«·Tïĉ²våWº¿~âÉ'Ä5?¼ªÙ]° â>äåå ª{{{ííj~¸5%M©~Òßn´oõ£<*ȼæ[ל8qâmÞžðÌÏ,ušuÆmãi°v2pv¸N¾ã˜13—î‚’+>i|ˆÅ¦rÆѨ9×·˜þ¨ýu)¦2l=Œfh­6 $v»‰Ó“ú”‚°«_Ș¶S¿—`7Ñ:¢í¬†”þ¯§g9¢*™AÒ›H+$4mf“ªµú®zf1G^K%Qu+KéU/S­Ä_óµý,=±»‚"•IeT{ ldPéϳRs™r¯]îC?Ã%ÅJá—^˜ŽQr÷³´Zú(ù¿ë¢ê·|e)û/àµãÌÖ”ˆ$¯27xÕü¾¸Ç3³6ûÜœw!/ý/_(`0NÈKæøŸ×¸ø<<ʼ·™yŒ¹_âwG™÷[¾òE~ßFÝ,†v²vÍb–¢°—ðÌæ«‹)3Þ7™³–i|;XWJï:v<ÎUëØ±ƒu~Rò|'[Síé,b÷c\-Ô6ÛýþiÕÎAkØÕIMÝÍlãׇe¿6™6þŒ3LÒÚÌ&¸ÎÔxËMŠС³Ç9ÙûLE¤¥J²'– (_\ðAK„ƒ^*¡>>~5¶ÊîÀ6õ¡>CîÉÁœRÛÚoëÉé{¶~ƒuæÒŸÍ¦5B¥›}cJ2!³¼d (,,´=ðúë¯[¨xë­·Ü[öÙJ™€”?{ìgSN»»÷ýd2)¨›LFq…È#lÕS<¥Z»Ýë­öù|úB›û”}å¡¡!wìèƒ=8ÄÐÃ<|í·®•«ƒ»Ô)>­—ìõzsrrÎFm ´´Tàúå‹¿üèc2ÜÕvJ‘°>½óÜÜÜɆ'ÐÍS­û¶Üw:ZqíìÙ³UŸ˜0y2áGÜÇô‰Ö§/˜Ü;•O5ª øìp¹q¢thûgoíWŒñ,f¼UK6bÌè“önêi¿«c—ëÖȹõá3}&UÌü.â+/4¿º³JÛˆŒQ.¿½J¢º¿ÈAÂD^hˆ^¿Læ5³¨¯¦yÍ”q{Ю]A·îPJï ëÙ^À Éñh”ƒ¹†5‡Éoàû öRê#ÝÈHUŠ›^Éó›h.'&OƒNj¬aBo%ǘ«(éòÞfæ«,Ìe´‹*%bþÿro|Ž?õRºWßf¦J¯Àð/_âw!â{= P(èU(X.£¼%ôyɼÓèZŸó/òûÉ>Jó² â“Ćs[È«G˜¯šmýX"¿Àn*ú)’UÞÓ\zOîg©Þ±=Ôf²¹ž‡¢TîfÐEUU«iÏÚÌPÖ³½–=ò²v±&J¥©™;M“'BP‰¼2¤ª) ’på¢ëÕg¬õ“Ò"?bÙÔÏ[NçnÖÑNâO6Vœqòzûí·Ï´ >ó™Ï|æ3Ÿù»¿û»¿û»¿[¼xñ—/þr﫽 .\¸p¡üåß{ï½s¢÷}×}[î»qóÓ\œétZžr®(((8ï¼óÜmûpy½Þi"e&gÀú¼{µýHŽÊ¨Œ6g#—ñ!îsÛ× ËQ(ÄrhPø‰K¾¯ûw„ˆÙ=”ë,¯Äàz3I™Ì2.k!–G88îs„_:Û8åÆÎ” ­ò¤Õ}äÓ¦ä²8>;sÒFe”J;Á¢mZß­$ª9Šén* Ô=•rÕKéíÜa£Ê”’ÇH1‡êˆê÷²b˜üZöøH÷°(NHÑò ŠRYGÛQæõQr%OÔÑ–ÃØ\Žý™ó“Ìé#=‡7Ån/æ¹WYø¾ZIôø‡8!UY{ŠnÉÞ3L~ Û×GI!¹Œ~•ߌ’ûyþxoHå›Á{œÙK8PJ¯^és\ Èia€ÂA FÈSPöQæµ³:‡±£Ìó‘î§Hþ ­Ô+T1¢³:À’!f¢ØO*ž-ÿ‘çæn*2äjàGuoi©:©Q´˜C{¨µæÀ~R›h¶ˆ¸‘g«I” 3 Ît†V5Gœ"9ZSÿ »®Ø†AYÈꈥ2DºŽ¹x0R’ÿ4è>&\³A~q^´wºÅü"„q l1ÁIyIº‹ºt6ÿ´£½aW$‹ÆŸrÍ2kÊï öþÞ¬OúÓŸþô§Ï`ã˜7oÞ¼yó,X`£1Ï0šß0R©Ô믿þú믿òÊ+¯¼òÊk¯½6ÙloæÌ™sçÎ;w®"SÎ?ÿüóÏ?¿¨¨H.}2 :•ßú÷³±„gÌ~E7¯¿îzàÚo]ë>[Œ¼¦1,ä#ò“›_4¿÷ÕÞSuF' „žß{ï½T*•N§§4 rã·5 ¼qóòú Þë§BÍ3¨œí5e:Jƒ±e—Ç쨵â4¥$ë¥'ˆÕ-æ(ÝbŒñô…†@wþtÛx&½Ô+#Ú˨Ý2¼Ž:QíU¿kgT™ÏoÜõ^´Ä¢’¨úZ3nvj³SµPÏa<}…?©j!ÒëÙîůAϱ’ XJ¯Ê¹²5¤@›øjÚ5¸r Wod†´9ù 1«Ÿ¢!fµ³úiœlØEô¨ È0¡“šå3¼šö$ݬ’-Ñ1æ.àpœÐQæÉ èküúmf¾Éœ?ñ9½üBÔÝ\Mû?òß¿å+À=ÜüOEmö¹¸ç³³9>HÁqfa~ƒ¼ÿÃ?a¾ŒpòêK\¸‡Z¹Éë~–W³àB^ÒäÉ3\"…mˆøË,þ¿ÛÉÚaòeÝ~÷>À ýíeÅ,†ò駨™M‹è‘Hi0&ýƒA){5tê}(w’j k3›.K• â¼(c‘~ñûË3´’m0ñ8­ú¸CÄL3Rdq4CÊÖÛuðJ”âÌ<=5&ZŒrÊ2Bc<v™íÙÂl½õÅžT;$µÅ”d1‘f´ a  øóæq¦Ô¾÷Þ{yyyŸp­ìÉëÎ;î°—«ØÃØ–Èi6Nh>Gþ“~›™sxó8³ Þ8¡ÏòÊ\Žý‰Ïaþ?ñ_bÆàï»<ÿÏ>–g¶Ÿ”×ä3¼—jp®äùWYx!/]Àk^2‚Éòú(™Ã›{¨ ×/!o7«”ú* 7Ñ| Ï¢¸Ÿ¢Ã,¨eÏ0ù¢×úñ Ô­¡³œ˜Î+uD)ãLá—Ù¯þ/•×|¡êºÊé:¸¨¿˜r‚9*‰ÆyÑÊz’¦°ÎdsãÙòxÖɃSý?C+Ù@$[c‚.‘N2Nyˆå*„TSærvt{ÏbòRœ&º©å¦lS_¸kl:Z#4$µÁpPÈ6‘ÿF; IDATÅ$ÀãFhÛレ~°¥ ñûï»ÿwÞ9ÿüóe…:888Öœp­ÿŸº÷n³<ó½?(v˜¤Q6¼ZÄ:ÖÊd7õÁ»QC§‡¬³î™9ë†y‡œš’¥Èl(”ò£…”áGp `uY·x'Ì\í;sê6l§¸Ê÷¨9ÇSÈÑ*7êê$hÀ±±£¤Aïßç¾u[v‡$ížg¶,=’Ýßûº®ïŠa¤&£6ÐCëæ{ï½'0Óƒ0N:å¶µšô8'Go—!âa¶õªºS÷ìÙ³…j§nv¦ýÛIŸå¢æTcŒ¶¿¸=¸µæÄ—©Ã ¯8*l+b2'†£]¨ãœ°sëÓ[Ÿ|êI5ÌkjjžÙúŒþ©¸›åýÖŽ‰P:66¶íùmÛžß6666)Öži{t&rŽ|Í®qˆ¥È#*P)fÜøloÖý²Uî<Íô ¦ð8>.¹—dð«F‘xkÜ'5Îy.))/Aža0‘aÄ(ä–¦Œ»¥ØoÜþÔ([™¥&K $»¸U[„žnç~è†|Šd4à±ö n„p/Ay¤Ø+µú« )Ib‚cëLAƒu ö°öf^“]íß²YÚ~ëÉlá–v‹9ÔI›4$×󖤽4žŸÎääûÌßË õKÿÿãoù p5ÿ™?ü1_\ÄáÏóÓ…¡¦ŽÁ<¡_ó陜<ÆïLjÿ„/ØNlš†…ÑÀ²•îç¸WE¼ ްp1‡V°÷ÁÒ“xùÝŒd©9ΜŒqt R¨c°‘þ~b˼©¿ÝÅé9½¥Q Æ÷xÚð•*dý>D>ëì*ÝŠ—7>Že#=³¯ÊÛáyy'É®*ÀX˜•YßÁ¿üRþãǬ×GÎ7aÖSÈèGê¦ÓÉ›¥ŠQ[:[¯«¸ïiUŠéÜ X†ìWÌJB­Ttê%À]å-ÅCndZXÍ?¤‚OÏ‘#G>©çœëu` ÍŠ5«-ÇçÒK/u×zûçÒQöÔüÍo~#DQE2þü£G^¤EVÏ^]]=)¹–S• VGèj.ÏZÁ‚ãÔ©SÕÕÕW^y¥eÍ™=gxd¸4³d{ÅÓ)ħ¾ð,¹¦¦Æ’n„šîÀrÒ·”ÚOö]Ôùd«u¾Òùõû¾þì3ÏÚ—pn[¢3üÜFrZÐ2šK‹šþ&Ó×ê¶;në¥×KkÀÿ‰E;Û“ ‚ŒWêÍs…,G£H!ãïôåŠÐðmöä»mÝ|é[Š&|—ZÙ»¤£Už´ÏújËÆFúwÜ lç~¹À§ ¶1º› Öw MÃ&¶FTñ6²s'ë²ìi1Ôž … K—°ë oó^j[HhL¤ ã½FúŸãÞÕìîcU i±våÛ2 x‹ë›Hj@ø ·7‘”ŸÀí¼’%ò?ø!òrùÛ|v{ÿœ¿¯eH–³×ðÎ^V/‹æqìæ^Ã;?çsŸåí1ª²D"d›é›ÏûWñ«kxç'|a5»USþ  XÕíÏòöLNþˆ/-áÀV6%XÛζeìÓæó~à½<7—éŸÍðBŽìe…úÏêD½5©Rhµ·­‘ÙÃÌÖhSee?«Ù½–ž¯ð¤«NÚŠ4ä@Lf•ò5[ípZ-\Õ ]Ü`ÌÜ}%RQ^z~ú¦.›L–¤Œœ‹¥˜ñ§•(9ï´F­¶ÌËo÷-;Rþõ™qëQÅuÅ:Ü·nC+ReÒpœ,“¦ÊŒY·0+³þ×çÿ9§%@žÏ>óì×ïûúùˆ„IV§¿¢}ê2õíXñœ¼×ÏçP„ˆ=+=׬Y³tÎ. =öøc\Ž‘B…¥â%¸]D!ß'K›fU­ÝÀôs°-z¹oïÄÙ§&ÄÞ¾ôíÙ×Ìþ×ü¿ž>}Z• {X σß|pów6ß}ò»X–í2(Ÿ­ Ÿ÷Ü{ÏÄ“·5©ÆôBEU 5?y/áL}‘,LÓÒ”§¥d¢íK<#¾ü1Vôÿ³ÐÈüºÉ¬)>×IS)@,ë[½7™-|Òv}³eÇ f¥¤5)ÅÞXÑñíËP¯µ5GPú¿Çì«"Sìõ¼ºˆÃ[Ùa¤‹Öófš KlB§˜,rêâýDÖiZÓ¹€£ú-°‹5©Ò*¼¼œ†2Ô7Ò¿šÝËØ·eò‚O†p;ÃÌ¥º†‘5ìz›¯ç­eì»’w•ù ®ýKþÆÆ’( Ô0ò:7}‘ÏfXšÎS\ ¨*Swv³º™^?pŒy—óá·yô§|þ¤qs™ÉÉ4 «Ùý6Ÿ­ft>ïÏçý-õdŽ3§ŽÁÑZ†â±éóÅÙ ëU5SD—3p”ßæÑ6:k²æ‚&ý»ÅºÎQ+*PÐHP ;ÊÒ4­»É5V]„‘Å’^SJ!XU„œIu¹(g¬ŸpÊ‹+ó5ìer„ñ•š1K ‹°2A `Û1ór‹šq£Âì¶Å¢âË–Öp_»žÄO» “ËÒ!“óñ¯É™wÚl–xY¯ååuJ“Óª3vóM9ÂøäÛÒÄN[åh¹ñ<Ï¢¦vжûg+NI5¬Hñb~Êôº¢h›¢ìòªªô²Ë.ÓkTé3EõÈÃ<öøcçÿºìShsàZÌL\÷]‘IEyªŠÓB» Ó–¡ÉtÐGŽÑõ ZíœfÉîøÜŽ®7ݿɽσß|øÆw¾15ÍGØyÇwp—ä¤;³Š$Qm5&-L/»ì²Íߨ pY%·hÒÆÉt€3iœöüMqJ”ËjZ¹§¡I©¶Ç±Vq—**â l.Šík…}¯ß4J_Êìúõó¬Ò#'ˆáQ,UE¼L–nUœÒäE)8²=Q–ªm!Ô“Éé7EŒô.n °®àGp°ŽÒhQ“ϼ‰­=¬•c{3½»Y- Íð!§J«Z¼ž¹Öª39D­þp€åËÈPßNBPežtÓº†]k鹚ƒ?ãºnZ—30BB¡Cäçò"MN2S¸¸€£5Œü)ÿôÇ¥ào½kpôsüüç|nûþ´˜CÿÂ(V1!{9ÎääOù¼Œ~Îçj9Ê‚…ù×2'ú?9Á,±g¯à½j–±/O(Kd6ÃQREËØ÷>óßg~ƒGY<Ê·…6›á!je¹·ËëK•BA¯g˜ÙƒÔ 5 ¶a=;ûYYG¿}çõ&g¨ï %@ÐIxUoS½VŒYü+Rݱ®%}èºVe£õ•%êõ¥J«œh“•Ž›õ&3ÔL¶0¯—`Ñ— çÂäL/·Éñ¡H^—}ΟÊ[×ø8ãÝi©ûN—í¢¦³š¼WÌ5ËE繤BMÁ?Ôz:)ϨB WQ®=õäS~óÁ'¶=áb§ªŸ9sæ¸%ø™æLî\=_,<ñ'6có(£{TÔŠijjj.l–õtÉAQ¯ÏAµ&ç¶¿~QŠáY™vÒ°ó›´æ[§u?ÐŽ—Dý Ü°õïc’OÊì‰û5­ SÑò{ýÌáòjèÓ”šé…˜$9ãížb¿<ÁW³;ËÕ‚ò¤3v5»[èÑmÊr½‚Ú†)Âi¬B-ŠÍzi–FE #ÕU±e9CÔ6‘l§c˜Ùu bñͼ6‡ã«Ù½…[êLÒT x„…ê…a7òFƒ5ŒDÈgN5£XòK>#²Oc³8q”ÿÿôÇ¥¬÷™¬÷™¯”vªYºŒ}¿ä3¹Úf¤Ìä¤Ô,Y"À¿ü’ϼÍg²`'þ^ÁÞëøÙ_ðw@ #ïpÍQœ`Ö aá f‰»{ˆÅ)¢´ícÙ.ÖÌçý7¸QîB{Y1—sh€å+Ø»‹5£T¯¢¯ÅëIp¬ŸFÍ5k…JúœÕìîâô*ú”†¦6°#ˆiK$­²ÈÔj„É)/ÌQk$+®1SÕ´WIg>S™û M‹¡7BÈ®“”‰Üi2ìn+D±²f_‹iîÃø7™Xu›nퟭvr®µ¤àÜðl›¦ÿn»½­"né#s …³:L,ì¬Ôò\%[ßrþP1‘árâÄ û<44$å¡C‡Þ}÷Ýwß}÷èÑ£Gµì§ŠwÀ}ÌI³—/à±ùÍ~ëÑG¿õèæ6ë|F';*þJ\§+¯¼R„šI‰Kú•8±.é霎Øý?™xmœ>}zâƒÛ÷í’K.±¨yÇw(3üþîßúôVÏó*ÈÆbŸÍ8óñÒ‹/MŸìzNŸšÍWW[ûL<óœã|ÜÞŠÕ7ýçÖÛÿÏÑ¡ÑãüÑåÇîÙx©&«Æûá%M‘7ZL¿¥BÓ1ywí°íÑdîY¥OÝ9ûçqjì ÏFãÙñAÁß ã›(MÎÀÒ¯DM”l~zÅħ”b%§U«ÙÜlžØÛ£-pÕ®tiMîÐ'ÆåÍœ9S% ûrl²‡Þjñ}>úè#wä<22ââ\…Ý’cΜ9÷oºÿ…ŽtÜÚ«¨bc¤ÏÚ}Q*€òÈŸzЧŸzúþî× Îºâ^oÖÞÖ“B£}êIí)\³[÷OüóŠ×¨6»û˜öž“¶j_}õ¯R‰›¿õZõœ¹…Cÿ’ÿßéÊŠÓOÁ,"Ac 4áÅ£,5©¸~n\gåûãË=ÔŒYÜͲ'J_ d!’ŒÙ^Ë´Æ6Ê"ŒDX y«M±_Q/ÓÅ­ð©PÈD:¿"Ýi¤ÔŽ^˜m¤/Ý ql  µ™Þ,5†:K?`DžãúU‘ÂìPwq-=‚½,5=¬•¯J–– Er„³H•h7 QûŸøo×ó–€m;¿õ'ü÷Ù g¨‘?Ê‚÷™/“¼¿á/?äòjN2sû>ͯåûó?ùã·¼ÏàÕ^·òmÿ,o–·Âd˜p9Ö02Ju??ãº÷™ßJ÷IfÊ÷àù+Ø;‹—óáaÍåƒ_qÕ fícÙ2öEIuðt‚–Fzi>ÂÂìÍ’ØÀŽoò õÇ™£ÚZ;ƒZ†¶”Ñ}†¨íàiY,U3ºŽ½4°\o©ZF"I½ïÛ^“ Aánar-¤‹ðâª8“)öû´ 5ãòet®:…¥ËÄ ©ë§Åë1}‹¥S‰(}V¦Rþ0fÌ€ºMTu·­mBµ©ã†"—ϲ'BÆ–˜ÖB¤´“ª=9/À4Q:7ñÆ-ëo™¢c)ª½»FLZxY•ºeê»}W/Q!§Óaûà7|ð›ZÔ¼P pÇÇ*@Ýs;+­æ¢*O™òMqXa¨j;é)¯ºê*Iå¤VQú›ñ‡Å9·TÔmàþM÷_Ø—yÇw¸.íÀýÜÿôSO 5§Ùƒ½ØÚSz]=ÏĶJÀ9¦5ã4.²>i¾è(´GN• Ê‚ñiBII.9Ö ?Á—†ÔRs¸y1!³þ(#”BY/o,jë#dCÚäÕ§ôÚn/Í-ô&8VÏÌJ cSõeаjYX #RA„ÉÕ2 ˜&aÈénažËÛŸæ×‹9T ø~ò ®¥ºšÑÿÄû¯ü¿WòîA®žÅ‰kùŵûXö~¹„Xr„…ÒžV3ús#d#dUX²ˆÃ7óÚ–¬`ï5?à«رƒ <ù[¾òW¼Åõ@»·M5ÀòAUáêmX[ŠpÀŸÿ4Ò¯1°IOjÞ™eXÐ]†!“õçÙU¦)R€d êÈ\™Ý3üØ*7ß5¾T•òâöRb)/ðû¡ñÑÓ>3ÖJ×ój—Ó>q\÷Ü^ RCeÙãlói‚n¹Ëž3Sϱ"U~z¶::ÍΖŸÀd`ÇK;6Þ³qŠ;hœù©O}J*?-ë¿ùÍoÜjÀÖnåjW|·¸,‹ª½TbÚÑ#Xö3±uDžÔÛx饗>üÐÃ~ëQ÷z°È¡¶(w÷6'\“ÊʧŸ{Z7¦?³tÇ|Š9¾ÿp[ì¶Oün¸Åâ™0oÒ/….¹?þØ}Ø/íЦCŠ;­$™0ßpáe“™*a¦JõV‹a$ ’K‘4nyV£¢^YÆŒ3muë“,ìÌRwˆ’óƒ¢Èç*˜Z[{HâÏœ’ã¿æh-Îùz> ª…ž^ P¤°šÝ*€Ôû­'ÓO£úrëy³ŸÆ(@é²Ük£³ƒ–>V¥iP™ú-¤—p Bc#ý]ðE~ü‡üó‹Ü)†jWéV=kØUÈæš+Ø;Jµ¸©à·¸~1‡–±ï‡|ùø³‡y¼ŽÁ/óßq¤&ÊÎ<ÈÕ‚¿ä3K8 2Q¶¹ú W7Óûw/cßUü*Kär>\Ì¡jFßãŠy@ôŸ<¡Ù–7¥ú+ümžÐøR«à©QªÄ—Ô£n£sÇÃ,–30Hò[©«'SËPé×¹Iõú@ïÏl†³¥úõÞ«]47³×åc"ƤWIp,J!Gx3º¸Á°ÀöX&3ŒA.àe)Z·¹Tjäì¯Ï.ÌÊ,ñ+ƒäêxµ‹[ñòi‚&Å–û·`¶SîÑjT|Q„L—/š’8ÊþÖŸSšT²¦ˆIÖsZ¾!sñql[3°7CŠÈ ßÙa× I¹9î’:ÍÕxxøÂF;¹ªÞcÅbêF›YýåÌ™3UÝÿÀýS‹ô˜î¿*Ü×ÍÎ>Ýó·è¥ßŽŽŽ t{Âú­ÏþPŸÎ¿ýÛ¿}/þ½;î¼c´fÔ>àßyâÁo>ÈeæÌ'íÊNz=¸òû6Ý7rräö¿ºÝ¦£Ìœ9s¢%ÂÔsIaÏg+é¾uÛžßl¸c°c:ä óÕ ÉlÏX忱LÛM5ÙdV¼Y2B4Ñ›ICʈÙN—zqúUiùöiÄ¥Zñ%¡^>EØøk‡ŠŒ°Ýò2ºÍ¬‰ñaLškªYWOÆhóò´ Œ0ÒI›¬Þ£är„µˆ«6•j¥àx»§iRÐ|n »Âä2Ô«sa¤–¡]¬ RHÒô„·ù+¥\XÄáŽÒF¡¦Žù¼?BM#ý‡Xü7+­3BV³Ïì­cðÞYÄáÚ9r«³è$3/çßqÝb%h©e(O¨Š±¹|p5¯æàA®¡ø_üÑM¼>—fr²Hà]®¡f1‡±2¼Uüg‚–‡y\BÏøÔ¯¸JQÛÃ_ž`ViE»H{ Ìfx‡¯æàBŽ,æÐ6 3{1‡º¸a »l]n€4bq»·mˆÚÒ‚²Á½ÎdÁ¯TThR£[B (Kƒ†Èƒo}W¤P,U‰;–#,¯vëtaªÃ‚¥¥ØßÅi+ ,–,Èa/—x²ŒFYZ¤*@«ëo||ÄñÉkN!¨6$µj“@ÒPŠb檓£BÁp¸èh8wžo-t&J­]RÝnÞÉ“'§è&©k7é*VÑ›:9Ù1ñ¯´ŽL}Lí"4<<\áÃ~Ö¬ªª;ó1®ìÆ{6n{~Ûw¶|øÎ–ï5Ïç˜1cÆ%—\"攚ÕúNŸ>-ÊL…i­Ûq=}ú´¸Nº$ŸÏ‹åTú:.¬Få¬Íäs:ì¼súÇ}›î“7Â+/¿2±<ÍrsйÃ4ÛÖVz8PKFS]˜e™]¼ò;ä©" qÙªAl=o:NÙþ‚ØÂ¼cÂcó€­VRŠE¼ ¥˜¡#êÌcnðµžËX¤&•šR¤`21Bí$R„Ãä,åRib6ÄJ0ÐF§ á!¾/W9ɵ“Ðó›Hždæuü,Oèïø ¹ãÞÅvYÌoá¡ÌÞåÊ5ì:Äâ9ÏPÏìbÍËW³[¯:ÂÈ–¨5­¹/ iàËeÌ»Ž"ìHóögc‚¢OãÛ4ÊË"œb€Öz2†¤=–*­’iä‹¥ª4 ÆÇ?ií.JèU‘j¢)¸Œã£ä¤¤J°6À˜þLNKÒvYeaU’&Q d.iÛªµŒ¡˜ÙeæÍü>1Á³Íãs:%öKxcxyJ1‡s4žzò©§ž|jj6àŰ场]fy:É;ïºÓž¤í¿¹#áÇ‚ tã\}À]ÖÌô­ƒÂÎû¸ße²LçšH‹­vމµã…=&F£Tl *8«öžLpõÓa'}ºiR©Ÿîy[q^( ½çø7]nýÚ­·~íÖigÜŸ¯xA1Ac@È(5“¦a›4óÖ(}fOmq+¦ÅȘåRÍ_›T@XÆD·ëöx„QÓœ)@«j’–´‘~QEHûþ, µŽA••úÖD§Œ0ÒN¢…t”\„LÕVצA+µŠT!eš†¬ë Enï[ÙÔKóZzÄ#ÕÏ1¶8;ØPËP#ýQrQ¯/âe$}9e9«Ù}ŒyêseÁnV·Ò}=o cÞ u 8:Ÿ÷‡¨ÍZƾ¿äošH3»™Þ¿àï,>P3›áƒ\=—ò²µeXRÍènV¿Ç_åó8¶€£ËØ÷S>?Dí5GYp„…5ŒôÓ8““¹Zi'oóÙù­lÜn`‡¤/ï3kšHfÑbÝÌk«è«cpÇUe),g ‰¤üi3Ô‹þ£bQºØ.n¤Î˜ è*ª)ŒÒ'–VéÒ2ÐkQpX‚W}„ã®W,UEÈ„ÉEX)Kd»RŠNùŠö ÂËK’"œ`­ñXÀÌ5»Í„²ÆŽß¼UÅÙBÙØ•Í€šéõ%˜¥™P†L ^<Á1SžVäT'­Õ?/~¦§œí^ÜþâU]Íd‡³e}D/ø õòŽ—u†wÞu§=CëÆ7c"/æÔ©SCCCnU166&rЩñ‡ëÕ>±æÖ±áŽ ¶hv^Œã¬÷8fþÂNW¢Ùb³[kêöÔØiÿP"–W^~åŽ;ï8×=Ó';¦(ƒÁàïýÞïýÞïýÞ5×\sÍ5׬X±bÅŠ .Ô—E¡ÓNÿ[-£žõ•µ*”²»ž5¶Vc*Å*³­nв4â»ÈÊ!ÁrkmŠ“•ÆræYBŠ4k¦hí|±]AvÞxyhê§±4^>MƒÛãRÅ#]¼å÷Z»ƒª"¦ž›Iål ““.Sr ™(S,J®Hw?arêÓ&húCµœÐq!GV³{:é×°+G¸–¡.nXÁ^`Ççp|ºjX"3¯`Ö6$h¹šƒs8~”Išj’Dd&'÷±lˆÚw¸æ=®H-ü þn”êŸó¹*ÆRDG©.ø×Ö1x„…²YßÁ†ƒ\}-¿˜Å‰<¡M] õËØ7‹K8ðS>”Ú `IžP;÷/ä0H]ž†¯mt>ǽËXƾ׸9D~:½d`},OÒ4Àò'¼Í²ùU¿t}b,Ë•I3È.nhg†´¬ŠÆœê±S A(E8HA[ßÙÎóÕ)^\TÛ,{²Ô2N½Å?»Srg”>[ªh?3†hrF•¶–%iZÂÃ,:Ì¢YœØÄÖå \Ë/ZHR}”QRª\<¡Õì~‹ëeRßM«Þ‡R„Å’j%ÊR³ÁOúñR^œ»X£.œ¦›Š xcòû¶h*€v²NaRa*Û“åiªÞ¤æ—oq½è?´¤Ø¯Î^Šý¾°nŒf/+TzŠãÓÃÚ:£äj’9ízÞ%5UZõ÷ ;×3C Î%hçþjF;i¥Z¾µ#Ô„È¿ÍgÈ—“ÌœÉÉå ü’Ïü”ÏW1¦ “+xOnGïrå(Õ/r'ðWtо„"¥iXÀÑ«9øW,àèùòŽ·8À’%(eGXþWÔ“‰Õƒh`©ðêC,–!­¨³‰ÒÚ-¥G¶”Ñ •ƒ/'¤ ŒRƒÖ}AŸÕ%±Óhe¾ú9çj›«ë›,–ê}8)ù»%]<Íôú®³Þ˜¾ •€mXýö»f¨øä[]`ñ09Ó,Q5™´éÙö:7©¸™$í-#ÉÎ)5õôïæÅ#^Æ"ñ8áfYp¢ÛyóW&ÈÅ;;j긫ý®s]w>Y¼âô»7Þ-€Ô¤ÓÂçǼᎠê0‹îÿÑG}øá‡Âì3•k Ž™3gZ>”›hf—cëá~NÇ™–ų"ôÄfìY§›FNöoÏ?|ô¹gŸ«øh¿»]ZI{yLº²䤼0¹Aé'–Ëã’zt•_»ík£¼m™ø;Ü—¸-úŠãÉï> l}f+Ðð¹†wÞyçÿñeUˆŸ0 àô\ìŒû±rQØ4ÞxVU`<ÁZ»·p«ž˜ŠH—¸¡ËÚ÷¨® ; ´(KåYjV±¸HÆ3aÚ¹x¤J«Ö{¯ŠÇñ2‰ÒZÁ¶ø8Ú¿‹´iœöäË-/G¸ŸF5ßRÆWAeÊNÖ%8¦:J.ÊRi×3c9Zñw².Cý*ú Sìo =D­¼;Y'3{y.@PÍ[©W³;MƒÆŠõdnâõ׸9Îc»X³»€{yî Þ«aä³”…¢Qè^V,äÈ>–½Ï|EÈ~ÀÜw¸¦ô•¼ |•„ÈËýîun ‘/\È‘£,£ê nÌi¤ÿóü4@Qù µ Õ18‹_æ‡jÀ&héaíQ¨¯ ,cŸÚæòããi½÷jÀkñz"^¦ÅëQ¥ÞM«„(¶7^Ç ­ù›é••„o<ëû êôe*^>@«évúÄÔˆ—1ÐKÐ`Ì\“¾M‡ .²ìÑe&WD¼¶&ãe‡ñÉ­Yê[˜g®dËôN›6o,ÂʨoYeɱeŸ ,õÚèu3>c†^p³Ã„‹oÌלø/0i­ËºÃÂ;#„lïØ~Wû]ÿ>+'—ú·½a/M›ÎŸÔz¦Ã3G…W€×—˜ÃþüÞ¯ß+ªÑ%—\rz²ÃöZE¼Ômñt†‡‡ ði¢&pï×ï½÷ë÷ÆÚbúǵ˜þæªãÍLì¬Nìí¶¯Mó„®® ¢ ÕËè™3gºýaË2sïðÉdNÛ;¶oþÆf¡fg¼óœþv¢Ž3ïjlëɽs“#3Ç 4Ÿ™¿”Âþa莰2gÌÆäTtGª~A ÈÌ‘aŒ»‚ü ²„rÖï xcY‰<ºüŠ3ÙH½×“(…€¬—·:„«¢ô¥üsk2|N¬“Ÿ ˆzÒ«˜¥^\ øDu †Éídb±#Œ4ò¦Â²ÔhXÅÖÃ,ê§1Gx[·²©Î»Ø^¤ SVµ=UºI¾ÙǪ>VåïcY`?;Y÷*·vÐþ0·Óñ8«×zœ9K8ðW|‰‰Ó;‹r9¨eè( ÞåÊý%Ÿ¹Š_óyÿ&^ÿ{þ\%u5£)¢mt&hYÁ^Å›4ÒŸ'´ˆÃoq} üÙ5‹½‰×æñëøY=™–˾—æ6:c2še7óÚ^V´N°¶@¦H!Cýjv+ÍÔ„´$¡UI5ÂrYu×K´xó2ŒtqšROº´†½•ÙR}–z£Ý”^““ ±wšŽ)G€1I<#d‚äRÆNÖ˜P¤!£Ô'{'–0€±,£*ÁÜÈ;ÎqCç‰9¿’§²ƒ7î>«HíÙ ;­ˆ/9ÉêN›ç¶‰_rÛz’ôÍ%ÐÚeqb£òLŠ”I ‚I•-###Óo¦Yì,ÿïK/Ú]¿mšŽŽN¤nZɤíVýð£>údÅåÅ8>þøc³çyºáÖöR1m*—`ÇHÁzèën*F­a±Xœôµkpž‡Pó•—_± øüsÏ 5-Xê>ç97½H‡°sR‰í¤?ÔêÔ©SjÃè­>tè>Á“'Oú;Ô™Ó›qFÉÙ†RÀ³æaZ%Íö9dŒ÷0&5cc9?v¸ÉTbóDzÔ[…‰±èkˆ:£¦x…w3½F«àç:éÜŠ%ük¦.N'8V¶g3–lílK±J¥j i¹ž7s¦…(-RPœ¡>Á1ËU©ûìd]”œ AaÎí$HÛ*¶™ÞÖ†ÉÉ^ …t«4}È{,QZ;D­L”½‰­‡X¤0›áMl=Ƽå üŠ«êÉ5fEGY%ògüC€âó?g3üs³DþÖò}æ¿Âí_æ‡rÿ¹‰×¥ÝœÏû,¥º‰ä–`É0³ó„4yæñ#,T¸¦èE7óÚùrˆüŸó÷ÖÞ¨£´q½÷j‚ öôÏkÜ,ª”^~ éá–[ÃB]º~ÊMN/¯^k¢´6[ª75Kë¶> V£"Þ¬}[áY%’µæ,ù¾Œæò0‹0b× ivÜpÔÙ jÌ?f\ôb®+ä#dÔËuÖ‹º„#Ê<»’•£Ä $7éó´Ú³gª5ÏÕý“q,Ý œn ¬÷÷™e.³qã='ðjjj-Z4gΫQ¹à/aRåè½_¿×úëž'è¬ZÎ#KÒ²ŠJ¥’Ë‘~yÇË÷Ü{m\»_[ÉÙkcRµ®-Ä­ôâ•—_ù^ü{2ñ™NÀÖÅ;¦¾ª‡ã<ø×ïûúùDrV§Œ "^Æðã1Y%áñœ‹ýfùˆ9V>–ÙjažOrtâþ†:BFëE,³¤6Ù§­âŒ˜sð'¦Zp)É¢ÁP*HJÜ%'=\»·M Ûª-AÃ’i³Ôìd]‘ÂCÑâžà˜(²arôGXY¤ÐH¿äëØiqêLÓ ÐH)ˆ^´Ž`¬fwŠý6DeKé‘õ¼™¡^ýä>Vífõ,N(éZ ÞafkÖXÇàûÌ_Á^k]û%~” å8s®æà?ñ§´¿Çÿ“?>Á¬+xïŸøÓÝÁ£ïrå1æÍ僽¬è%Oh »ò„ºiv±F²–yÞã<¬4M)L°¤†‘å <ǽ¯s“ŠQ ©“×›ÖÉ·0¦÷'L.Å~õKs„Ûè4d±ãt$ÍVÌBKÞ!‚µJkõ!Yê‹tKbk>ú2Ç;ÀX„×ëÑàY¾6ÆÅ RˆH ðô¤ö‡f#XV[ á4¶4'™T[X× ãD&þXÔ÷ž5èkJÏXùb.áwËä;WèY‰šo1šmŽé`OEßOœØYÁR¹)1å4ÏS°zV’í¤z† l–XTv;œ;§%}ñàá\÷=²¸¨£Aá“P9ܽñî»7Þ­KE]q;Ÿ¶ì6-,Ö%»Š]|úôéŠvºn|‘îY¯ÛIÉAö ò»Ojh <þØãú¹mðL8õ–’ÒiÞÚ¸Á&ã³Hãßd°¶ â2†uf¢!×0ÅŽ­~Ü™hVlüã¶a¤HÁè5ƒEü¬–-'ø0¹›ÕÂ?±jõ,í$ÂäD¦Õ"ØÇª …fzÛm #,ï½z2F¤ñ`ù u\ÍîÒ]ÜP¤Ð@ºžÌV6­¢¯—fù iºÙFçË#¬ìât#ý©Òª‡¼ÇºJ·®fw‡wgª´*[ª×`2KÍa©b;Ê‚~u9Ÿ÷ëɤiø1_ü)Ÿ¯e¨…ÄUÀùì3ÏVÀ§Kü9S59)œ æ˜ã|NujªêÔyÑŸàPÑ9›æLG¼3~¡Îá’K.ÑnÁøãÉûÛ©ùe‚À‰Ø©A©; ös­§·U̧ØÃeCDé+8á_›bcE«<“¼=áe,B&Gké = “­a‚9ã)bfIê6žÚãB†Í»#d²*U=Ù„‹^¼Xª’ûAÄËäŒÍžYs›rͤ 9ev³Z·S쇰­M[8%­¹f–cÂõd(¤Ð¼9QBY3½µ uq:ÃUQ‚[ÙÔÎýƒÔ¥ix”oïbM#3\˽:‡™½‰­-ÞõÀ—Jkò®S÷ßßÂ-<¤ÐǪUô`ÖäÀW—p`”ê/òã“ÌTõϸN•èQ\Ë/€ÚÛè¬ad„š÷¸b:h¢öK®ãg?㺠õ‹9¤ie””ô J™ÞË )Y·” xc©R‚ÀÝŠrjÛvÒü÷|€ÖFúS„åßk·>r6HŽ’ÓˆW}‹vFX.«}?êÄËÛX·l)V$–U5J lf^ÂW§øyÑYˆ°2G8눃#ŒÃwÒa ózýkÉW‡É9—tÓ¤ e®í<„èK7fygɸÿ5£ÊñîÝVÚ©<%ðb·!ó ¡r²ØE;&Z ¹åÚ¤ÃEËÜø«¶½pߦûd|zߦûžÙþŒfœ·Ån+âÏM;ÅܤÙgö¸ì²ËÆÆÆ~“öfµJ>Ùñ¤koKÀ“'O^¼X•Iû·ú¡$’g²µk¿»ý$'ÝÍ}¨I™ºÓœUßúµ[wüõ8í£E7Ÿ¼5cm1þ½Sonÿ«Û·¿¼]ƒÛÛÿêvKz”>8}§iyUÇÍbç7 Š>£Ê&ùýØly (Yj ;ȼkU§FÉ¥ÊÍ´±Ò)ŸIÑm–¼ žÂ,[U"kDéK±J¢‚0+s>¤Ê"_Š0„ &°SçS¤©@0ÂÈjvçhƒœ u#¬Ì\ÇÎ~µÜ«5ª.tê˜ÑONt!jr-HêÌÍAÒjÌopc‹ñ‚W³@°ÝÛÖQÚ(ÍÆl†;¨^ÏN5<Û½m[JÞØ:vgÎìP×·–!açøªüùpt/+ò„¤ûTï´™ÞŸó¹Z†°¤Ž˜;‹op£²£ÅUyB‡Y4Ÿ÷åç°€£#ÔÌáøÃ<ÞHƒ 9²–žM”Öf!àµÑÙémeÓܨ å:v*5,K2ES éÇ"åTZ˜— °“uÐÊá—ñ"ÝAæh’N±*B&H–vÒ ÉeÑ¡ªêÈ–b*CS¥U6o5á×$¼x„•õ^l³~¯"ð-u!²ÔPŽI‰GXÙKØL |Q–=«p;ØÇ£,Mš’¬ R€Ÿß‰cŒt2;Ç| z)†g º‹>3.lz$¶¯#ø9#Œ¸½nåýɆ‘ç4QsÿäÛ1.Je"ëÊþdjÊÕ¢E‹Ü“œÎŸ¸‡ÀR†vÖÖÎÝô\vÙeñÑt¨6ä¶Øm^ðî)ÉñØìxiÇÄa¶õв$ׯ/\|¶¿´ý¬ô™xOöª;kÅÙd˜ ~6µƒ”Œ÷ð,DÈäüvV· ‹9äC¿BM”&-@¦NwÊçvBV`W¤*B&kTzv Ð 9¿¾ôe vmƒ\€`=é, ZÛè<Äâ 9ÚšéMÐa¤…y(ÒÝÏÊFúeéþm “KÓãõŽ?Yù¡Ìl)oèfÆc,ZÌ#‰¦è³-J!Jå짨ÑóEÉiú•¦’Q–jŠ©3‘y›ñ8 éî ¥@p=oJ\%×H‚cZžr„ š½©,0ËJWއÉ}…'s„•j&%ad-=-¤Ûè”6Ñ¿L©ÞÍê ì(ìcÕ0³eʺšÝ‚"%— 3[d"µ^×3c[¥  )´ 3MÃË´¼Åõÿ‘ÌYÀQ‘c5ìú×.áÀqæ)‡™ýe~¼ÏüÃ,`ùÌÝÀyæ0w–3àWu^~kÖ±s-=ÚCˆ#¦÷D¨¤ )oŽ°Æ™ò¯°úŠ­]¥[5­ÄGR'7ZD…U‹µ$›Ù•zÉ ©a+K}ú{ñïÝ»íôÌÓ¢UUU͘1Ã…=…H—(¹è¨Ïkã=·½´­âƒ˜´ÛQ!Ûýć•”LßÎ×^xî‹R*Ôô9Ž1vÁ/’)¸¿yím2›â¤XõÚz‹mïØaR#’†$\ÜúŸi?® ¯‚ÙŒKÖ©åCÖzªW$ÄÔseÙƒ—Ï–êµÒ‰²«`§Í¼-ž¥^ÎAZ‚g3¬½ÍãÖóf€`”œLª<~þ¹çŸîùé›ïLç¸-vÛ÷âß:º>ö¸ãÎ;„©çÓO=½íùm¢×º¿zaÛ /ïxùå/Ûó·e´[ O´Yÿ\îšššóLMé|¥ób|Žg¬8#ŒXÃX˘0,‰Ö0¹¬ùzgýÕÊ,{3@+—Vcí]e¹Z³e2‘M\‘†Oµý T`«Ñ^/.ëMj%}9‚ÈÈnJ±"D¼Œ˜œb‚hµ•ýzŸôŸ1ÞOc–=ZèIP“eO …E–`1Á±(@®ŽÁ.n V)ßF4>®çͬk¦7ÁÚ =@/Ír´Ø¤-™0È`hGZïÕŽÒ­jrª¤ÛÅš5ìZÂQqPr¤Î…ÑtV³{Çßâúz2«èûˇ™}#oÈ{Ag_äÇi:ØøÙÂ.àm2VG"4hm¦7¡ù"Á,!–æÇ=¬ÍRÓ¼^Ö±ÓæxšUXçÍè§F²Ô¬gFU@‚8æÓ_ï½ÚUºUŸ¬>Ö(KSøQ<o¬™ÞDi­5Ixú4CO¬¢d„ŒiØ&#¬Ì™FB„ ¬ÌR€|eæ¶®UQ E_dâ:çÅMã¤É–ªÖÏ:¢\“ØÞT.a}gƒØø¶MÒ4`º]£ÇBEÔÚÍ;O?+9ãðÆÞpovÞ3)ÀXäp¹?"ôO¥¸ÿûÝ—|óîw¿°ã7E‡å Ê—N‹ï…†ßFÝùü³À†;6Lʦ™”ª}†ü䦸·ªã͹-vÛÔØsÇw¼ôÒK~ÂZM¹àûæCßühöG²ªp±SùI?ñ‹tˆ[äš+Ù³âR×;_*•6­gÖ¤o‚% Ø1°Êýi¼·bõMÿ¹õöÿsthôøtù±{î¹áw(ö‹sÐ.ätÌp‡nMÀDª­J@“Θt²‚±ž ªoüÕ¼´6êõùä ²ýJùˆz}b©Ø™¨ºoÌŒ£´ö‰â¯ãÖ{Oz ‹£öôPººŽÔ]3ÂÒ6ÛR–äs+jR;‰NÚ¬œ±@0ËžõÌ¢¶–!K®‰z}«è“52åy IDAT¼’>Å?¢v1‡±x{÷²B™eËæ-×óÖ6ÜËsûX&ù¦UÎö‘×{¯ª‹k­‚2Ô««S­eHÆÆåµ`:œEʤXÕBO/ÍÖ*ÖjÿÇmüTÕÐÆš¸Êl­‚öóŠz}jÑW\åú¯2-Ð¥PÀåg•½J+f®F[¾&ÃB—«ùhª ²t\+‚²)`â˜ó-pǾſÞ|ï@;æ,[Ešïœ¯–xžýH"û\1}ÿ ÚÜyç]ö ?‘ý?5ÃÐâeŸeâ=Ýçµk—ûç/nQk“]¤&¢ŽnØý¾î&xp;ºvQ›”¾¨ šr–Ÿ9)+Äž¤»JÚ—3é wïi÷îg̘aueÝP1>pVÜÓÞvßs‹F“¶g'ýt*ÖtíN& £ž~‘W!³ÑëýæCßÔ{nÏÜÕþøc ™ÖMÐ~/½øÒm±ÛôÂwìx (•¸ù[¯UÏ™[8ô/ùÿ®ÎÎ{þÌš¸–¿í^Ü ºJÄõ*‹·Á‰ÖJS¹î±}]‡RÑäü›2æ.Ðf¼ºG'`ðÏ_ûšéUâ˜VÏÊÔ_/.¸RêaÔë³ÑÂÎÒª–RìW¡,;\é 5†”®1Sv+ÝóG4ÔÄ×ÌøÒOYíH»)¢¯™ëyS6­zœ,5눥ŽÁE>Ì"É(7°ã n<×24HåG¼ÌZzdh÷ß—¦ÅGh¯G¸»œC,ÉH^ €z°BDU™/#ßZAoÕ¶Ç®Ÿëdô¿]œ¶;˜"…¨™VZΪ݅”7†>­ºÞå‘S‚P„ŒáàTµÐ“`­í X?wC:-+†u-ùNN­l2\}q™sK©, N%‡óCI·a†Èüx6œ[‰úgèìC~›7.ŒW­$Çï>'vbó΃øô‚)€Sz3§]àÜÑã…NÍ´Î$\ùÔ§>¥Ä {X!ùððð÷»¾Ëú[¦cÉ­Ýí²N¬Û&Ý%¸këèèèD*ò9§Š rî8pæÌ™nïº"FcÒ%^O­G³5é;ùÛNU™sçÎîn¿û[ßþÂ^Ü C/Çvé+ªÏ ˆu hgN÷½º€À‰ãð\œBM¦&ÝÖ¸;†I³²Uk‘¸óMƵAolíßÁÈ4± ¥ ,,³‡dÒ%—*#n>J.EØÚĄͺ™µ•«‡©«(Qô ‰ÒZiS4EéK{ N†r³ëÅÑ xÁ”yj¡'QZ ôzcrr—}€pfå…"Ý-Ì3æ«þŠßBf‹O8Jš**] (dUßÔ>ÙÃÚ(¹AêÔñnd†ú·]Ü 2«@PüÕfz—3ð7 AIT[¢L\·Èb°TµÅÔ‹BV½ /ÓBBä[ArÉ<¡A•tyeȨ¨v³:@rYê×óªP_ñdE 7s À£Æõ©ÐBZ¨éhu|Û¬³‡0¦|€ Ä6r9ÂbiáKV Æ ¤£ô¥ œ›¹€ßÿÏšÖ…™žú<4æô“ŒZ©Æ`öÙ9b4ÿÃ2?LZt,šY»\¡ßl=o›æ™ªˆéNÓP'¾4Û2µCJàﲔʈˆP”(sk}XÅ I§³ä] C×é08¾zËW_üþ‹v/¯RÒµYÙüÍvõS§wêcúºˆIÝ?ñqç]wªÕ,Ôt}étÛþ¤ó•ÎíÛ­'Ü,sh¨|ç]w^rÉ%ÖØuŒ³Éh“šÌU(RôÃóß?}ëÑo}ëÑo/tœêµõé­g½…¥ßBNõ'¾¼ïÛtŸK:s#ÕÄ™šš4QŽ¢Lé‚Cß7ׄ¸qÿ±-©Û’-ÒmÇ–ã'1G£VQ†VR~Þmýe‰eÉÃ~¼|¶jQd˜—7Bx‘ƒl7n$+qJ1ÍD9þàÓ+7Ö4«K¢äê˜1›ÎݬÞÄV5i{Ë4M ’ê£ä3c< ó}³˜"1µ²¥ÅŒìâ†õ¼™åõ„w³’½~c0h§§ëØ©æ­ÍŠr4‹z(³SãÛMlÝB·Ú°_ag€W›é]ÁÞ]¬‘ñP?]¥z¼W—p —æMlí¥Y/¿†‘.N·0o7+uO¡`#o)tÒ¦ ËÖI†d‹éToaázsž’âhs ¨‡‚•Ar)ÂfKV*x^Ï`aß1Çne¼Œ¬‰Ã¬Ä·þQY†Ä×oÈŠÏ̪õ êL¤Ø«Œ)žLÅ.$Xš¦<ØÖѨÇÝÖ¨ªj‘‰ŒÕF‹\®&Œ%ÊŸX˜•Ù²ÿ{’YÓƒqŦ– P,Uøýaª/·v*5 ùó_#\´8kjǹm··me»þ}Ëú[·Ž´ÿªª*Uu<üÈæol¶Ø9i¡©EJpXSS3Q…2|4;U¾˜äœŽššÛô³æ wצX,Š?åþv [¥ói!L|[FGG'öÃíhÙÞß"ÜýÜ_]]ý0>ÅÞS-Pué_ØþÂúݳZ.œuW¤j»3ÎÛý£¢ñ>‘*5éíi§6Yûžá¢CO¶ÓšcYBŽU ¦›7¼Äng-¦õ8ëÓ=’%n¸'û£,-°2ëëÇ[‹tã™’±Êâó0³@ž›|ÛRLT”2Ÿhß$æ^¾…^9 ª2k eO–¦ÍarkééñE5+5>Lùo5~¯*B‹×#ˆ*zlá5c#Œi¬n”B\=Ñyrf’ª¬u·²é( t7º&·€£pKô&¶æÕÐKs-C)Ârý4)½¾®Ò* Å[‘¡ÞŽ6ß (l`‡ÎÊb¶z³jª(}A ^ÏŒ!ÿ•Žhí¢ >°uŒ“3¢­\s„ò’Á,ɈáUuqB–²Už‰c)TYÿâñ»©2ÙRÕzïÕ~Fð2¹qצ?¡Œñs7½LΰR&ü5ëè@²ÔDÊÛzœºž·›$ë“\tFÞF=åb¡®ädvèæ­‹ž™nƬñÖxªŽ9‘µý+ýûiâY vWö¶ÛÛÔœü~×÷'¢ …L¡¦e Mª PÑ9¨Ó L#¥ˆo ™Ï>óìÃUUUW]uðFÏ7®½±‚1TQwN4‰­8\]ü¤¦wö¡žíxxø‘‡ìñ¿ùà…Ý@hu‘¦ *h¨÷mºï™­Ï2ïÛtŸ Ío/È1Ñ:Î>¾«Yj¿»½¢4´m‰éØ D+Þ‹šc÷¦’wX˜•Yò*:"ŒDjô•#ØÎî–±"KôOyñ­F®ÖÂñ2Z$Jk%fðƒÉJ¡”篛"ÓŠ¬” !@³Î*AM€±¬aÊhéWuå[–{})ögKõ/“-…Â^f˜Ùpƒà'EØ8ì$¡)H®Þ—~ROÆ%îÊrAj–ëyKDÜFˆ0²—fIB–úÕlKù\$½á>ÚÕ2$_ÜáÒËh£³ƒê2I þÛbÿÊ?@°À xîâ†(9È¥ Ëž­Æ‚¤éßé‡Õ¬Ìâ«D(…ðzÔZ·dWÀñÜ!ÊÒT™äw§› ½(îjIúÊa«¶²2K2[ž R„a¿ª´"ù(KSTA<[Fâ¤Égǹ(ãôcmÚ]½C|ÃÕ‡ýê³É2×({øÅåþ°RŽÑÆ9 [ƒJÓÉAWþ·o€0sæL•Vžçiu©§va²‹£»|ø£>r™DštêU¶ÝÞvž@òð#?öøwŸüî7¾ó a§[8Ž#.¹(™ŽþÛ¿ýÛYïvÁ“¿*è0îîA¨ùÊ˯TtõÕÖÖº|¨ö»Û;^ê˜~Bê4În£õÓŸþô¯ýk—‡u.øô™¸ãvé£Îä}?‘$Ú*çÛÛäLt,ÇÁw?óÐÔ¢³’¿–%&FY!ÓKs€`€ œf|þ˜åGˆobÉ;YôX¤ªHA´kC£ÌjJ1±QRì· “e¦D½>ßÝ­Š0b¨FÉz2ÆOu$Mƒt‡ë™aN ¬9‘D.ärmMÓMª8ÞX¶TßUºUÑ’ö1Î5!yÇ 2Ô÷±ª—fM eæ—¡¾Há-®ÏŽ’“ Å*&üt­±C,–¹`Θѫù9H²6å8ßI›6‹9 8ÈÿOÝ»ÆÈužibÏE‹l‰V˰c¹<(Ó5íùã`Óˆ6]àŸ±S÷G¶GãiO¨Ë!)R¼‰’%[÷»,^$J¶ÄcS=ãZã,Ñ`§Š½ùATcT‚uAjaÅå=–gd—D]ØT±(Ò'?žï}Ï{NUW¯ž|0ŒV³».§NÏ÷¾ïs¹Ey…Ûðö3øŸÊXbž6@!ç1Upi\S—±êL龊Ÿ‰[a5mÊ£ ð¢ùøŽ2¦ˆŸ;9A¼¤´´í 0ƒe¯Õ‹óz;i’¹8ßúe´xñUAä°ÄS'<†¶jóXA[3O„kɈ}b’µ×…”¤ƒÆº–’ú“r× ”Â&ëé}.ì¹äï%pbŠ×XSù"™n _)."¢«º®§ËèÓO=ýôSOøwûïlúï6õW™¶F¼ÿýJºÿý–› ãòc4yYÖåU…?óÔÓO=üÐÃ<úÈsÏ>÷ܳÏ]£ Ò«Ë|¹ìDëL­¹mû¶þÏ 6ôÿ =3¹ß •2KölZ«‘€÷ßÿƒ>øàƒôM]¡Ðð5Pà»âÊÜrvèpðÀÁå2Ýú³š¶ ò$ŽáÕȺ J]¶ª‚ ÜlO ¶®£)~Ñ1‘ÅôÏÐÀFVue´¤3\oà”ŠáÊhÉS¸Ðcg﹑§ÃNøâÍÈž‹2¦[˜¼ o—ІÀ‹È¨ä¯Ð­m3Ž«É;g¦ì¨S)HìÔÙ^y}Z`xTÔñÅm D.qSÌ`YJª›Ý|¤¹+!Æ6ãxKì—±D”½oá„Ëåðmüçó˜šÃE4‡ÙŸá«[q´€yÈ!ÆÉdóöŸÇé 9Á2\Òw¤6L€û ` â ãI’l “LС•T!9M·.Aéßb±á˜A0Ç•›UÁà@<ð\.f§hë¨,ªPìqG>ÇHe‚µ…fsè’Â-g¤½YÛì¶y]À²šÃl;¹Ó‚Ì#Ý‚ÖÉe”ü•±^Gäþ5öwU¦£ôScVËιnK7Çû÷ßÿèc¾ýöÛ‡_> à¿øwÏþIgŸ÷￟áχ_>|ë­·Þzë­Wþzžzú)ýúÅ^T2ꪾ5ÐYÊçÎ;wîœ~“€Í¯Ï;Ç_Ïøã1¼Š+Ã\ÍthwìÜñâ /ê~æ3Ÿù¾ð…/|á3ŸùÌg>ó™Ë&»¾öêk£”›+.F\û‰«gV®oõÿÊr–Šá3£ªâ<~¹˜šmÜ e,Óa¶7•¨÷à÷P%O2D±ç¶ÛãÕ˜°ÅÐyj;“naE2ŽŠôaÅ?¨Ì¶e›¦ –YvÏ’Ycã7ecÞ¿zŸ :Àt{^!ÜòÇæpè°sXB»€‰¦+}È2o‰ =Dr:‰V -ZÑJ¢÷ŠÑD…:-LÒøž~LТQQÝ‹6aaw•Ñ Å´è-ÜþMüèGø&¯ Kó9|&D,Uù“4- MjU “lY߆·`†å{­6 mhÑ^@‡ êðUü¬³P èÌãtÂØw×Ê#üJ^+Œó “~)æâ»àÝD!&C ‡î#xé|^NQdÌB¼É’ Ô%JТ8ƒóèðLc Ëo$MTwQ 7ÕFQ†h_´¨LŸZ¡SFuŒ©^''¶P:›‡¹ÙtЦî: oŒ7‚8%®©¾kâÏSg3õP“FÈ哃†æ†8œ={–[OÆÎ{ WŽ©uÙÀõêk¯Þ·ó>bØ Ï¿°œd“\{÷ìpøåÃì.^ ‘”ı립ÜÒžðÀÂׯe÷ˆö›:á#jjŽ ÷÷ïÎL7_|áÅ.µ—Ç6Ò¡æ(ñ{ï½7J~ËõYÌï¿Ô¼á­èV™Ò:€?ÿ»ó£¶jéÞ.ó!š-ÊfäÚ°ÜþŒá\Ô©Øãî#½2H €¨àŠ$ŸÅÛ9̪+77irvBŒq?êÅù^œGŒ2Z"¡Ó<²Yr…B,бž|$¸öŸç¯4P"°æ`IÊÊlãe,Ü vŒâE}aó8bRUŒ@õv¼ÅlÎN±0šñNÌ YÆtÓ )^U|²€M[ðÓ ó8ÝÄÔöÑGõwêÖ¯_¿zõêƒ>õôS7ß|óÍ7ß  ö¯kŸýìg‡´jGGÍG}ä÷µYë§sÒ]úõ;vîxãõ7X¯ZµŠ¶8,Žã8æ‹ùðÃ?üðClkÑ®5·­Å–Úº´¶¾Ö¶–È7™5:j>òè#‡^¿~½Þ¢™öìÀ5Ü—# œÆ$ˆ{PUvÝ,œ£^5ÝŽeCß(²Z/‰VøtAæ®H)ô'ß„#O±[k±‰7…¦8¼G¬{Ä}­È›š±1´¤Œiõ‚§GA²çÆE~ß}GÎô ØDi£tÞV·UJøõ: †?r(0ÈÓÅ}9¯Ë•I’†Nû&sŒebˆÅ]ø„¯–*~¶FgÐÌa¨?›ÇÔ¾¦)˜›q|wlÁO98l 4ƒq&}æPhI LˆÅ)4jT’ÔC%)Ûwá“ð?MRÀ4š›XK«Bæ&,8ûR~â"ÿ„zÎë’ÁKU ¼àH¼‡ÁƒÍ^bm§o´¥ _•è›É†ãÑTy ¤d[~–£Ç N>›ÕR ê@]}ì‚Úr»jxûáEióFfš 3È1 3¶n°¾Ä¤@bOø.tÇ àÊñA\tC ±Џ}4$÷OBª²²Îk¸]!jªØÿ‡?ø¡užËhN´y;0¨ë…ç_xáù´§ª”¢Ñ_ÆÀÖ(¼=üЧŸ~Ên¶ž0øŸ£0»úó¿—¾÷ÀÚÎÎ/¿÷Ú÷ÎÈ‚ yêØï¡Fxë¡3‡»ô…ÍábSÎð=.ƒV`Shn‚thQöZb.–k´©6YÀ¦Š3œ«•±TÆôÌÐfA§˜œla’~=?Á×s(Ì8~|„ 9tßÂíªÍ 9ÓaÃ š›° ³ÞfÉZbã¨Îcj§g0Î#Ë<¦r˜=‚â=qÔ~¾´kHæšÈ;Ò/ãh|èðÅ‹:|ïŽ{W-¿ì-ÚO³<ãÌ¡tµýÕKþÎm»‰CŠã 6\N5 (Õ))7ÄȦXÈà'ªE+Äb­Ðñ€Š=D—Öòšx#bñÈ• ùùh‹÷Ó9ªA0 t·àØ\b7¿Ø@µŒ%Çzu³XÌËHɵÅbÞéèKV_èP?Îs¸5ƒ-'Þ¯7P/ÙÍ's’ð\rÔМü:~r3ƒUâ\­BA’Ñ&ÑZõ [¯m”Z˜oÃÛDZ™^BôX/ ÓÂdè Ó@iÍ &€NˆIyåØRÁļ]BûëøÉÏðÕê@µ‰© N615ƒÎ3h¶œWítÛÅPs^·„vèqñ¸×-£½à¼jÑC¾‡¨o¤çp(ŠÞò¡KèˆÏ°â"HœïO.Q '6‰Fç‡ÕUk)(óZÑê ,ï¥.aA?ŒØÌù,=hu.1ÏK2Þ“8n¯.š›äS7Ö–ˆÁËhF¯‡ÅÊ2‹Ø©R~©©˜j¿²ÿýëׯÇ7ív»<úÈ3žátÍ>ùä“;ïºóÍco²»nÝ:vV_:ð‹NN:—“ujbÉðNéÀ˜Žkº®EÇÒ>æÚµkIò´ín%Ũäfÿû¼r¢„ÙÿÀþ'_zòñ'‡ˆGõ13t˜ë¼†Gú\ùÒÌ“‡¿ý°–à£Ù 9Ïóœéd‰$Y)ŽÒ6äu“)h¡ g|vh xJ/¬†I½XTDl£Ðp|¢0!Κ¦Mµ…ÁD$ˆR "õh+Ä" ÜéÈCá&-Ü$Â"˜As>éŒEa\Ìy]8f÷åŽ8i%;uóN ) 7´¦œ¾s©’˜Àµ‚¯—±t;VÍa1‡ýnÉô h‹qnˆŽ´^óœ Q€ÚG/ £„UÍ)Ëó˜êLäÐB³€æ¼KïªQ"IÁÌ&,ÐZfô%gS^ka:‡°@ç¼9£ `úæ<àà0E…Þ7 IDAT7-]V+;@Ô‹ó¡hkA¨Xpù_qÞÐyºÒÌ*˜h%îy ñßp"NÀo£‹äf+ªrÝœÜÀ=G"#ï,°¡¶åM, L3c:4wšœ¢9:TûæZ˩Ε˜;œ‰§A/‹Ðõ¿>¨9Pˆy+ˆ±ŒµÎŠÌ”;ïºóõc¯o¿w;Qó[}ë=¼ÇºÇ¿çã?>ø7¿ù—ßäàSÕè–,Ê~õ£Ã7_b¶Õ¤^S$ÀòŽ3W¾Vì4*dxéÀér2P¹8œ˜j߬µªXñLp­ƒ ¶mßvË-·<ÿÜó;¬[;¤I0Ê«ºaPÅé Â7cžŽÎ{B,Š(Åm¢ ÄSÛùÇæœÐº+Ž?(GC'=š>&Û+3žf¹Å«E8Ûkt\£ôæăòDZ¹’2Ô½âÞš×eÇ5çu·`Õ61‡DÿµÓ)¾ž# ˆÔG Z¼' œwЙA³’²ûÙÏ~ùË_þò—¿\.—Ëåò3O?óÌÓÏ Žøâ¿8Ðf]ùÛïÝþú÷_ßÿÀþýìç’Á?þøý÷ßÿÓ¯ýéþúGý`ÌJt¹zt¹êÁ<4¸ífÖ:Yœq²}­íñ‹C× f.„}-§)Ÿ^:pà¥Û¶o{ò‰'Ïž=›éµŽ^nꇨibW«žVÑH¦ÎÞþ®øè,­]»w=ÿÜó—|0úŒ3’´ç€LÆÖ§%ÞNE.㟈;¯ì/ôÌ›M§RT©Ò“ý+ ¶Á ,C,’?²Çz¨1“D&CÕTÏMú`a< }E×&g²Œi󀨄x‹³9|˜Av¨!xA#ÞÈ )aÄ>Ó¯z¨Ñ Õ'} JhÃ#o³bŒ”IÿPeŠçÛ¸ÓÁ &è¨7‡¯•ЦWÀ6Í`œY²ihàÀJ”¿Èž-%+œN¡y;Þb–Ë׈7²ÓbŒó?C«™{‰,îbzÄX-cZP3’“\Ãì¿HÎ[4,äU:ŽÍÖŠ5Ÿfvòbƒ]¬ãlQ£©ir‹úfˆ=e½Æ E¡¾‹@JÛªéÇ Ýh­š_W€¬rÆ_O'µ¦{¨•±së¶­[·mµÙ×g-—ÇÄ5>>>>>^*•¾ò•¯Lÿ7Óþèþˆ=[&<¤¨9¼v±E'›·¼åO«„£o½ÿýý=Ò\.·ó¾™d’á…øšå×µ@ÍÝ{v¿yìͨ¹ýÞíýuy;3ß\Ž ºcçþïZܼ8J!ŽÍÒjØv³o¼ñÆ 6lذ}ûo¼q iÜâ9ériÃ5¯ð†ÝrÏHʤù& ‚îo¾Œ¥Ì¦ÀN¦RŒ±KQ¶u±(sÊUéq£ùJìSZ¡ÎÇw„ñd í‚ã’ˆT òDª@çCKüæRèDÊâ7íc›Ñ%RÅÝFæEnÂç9—¢Ô ÆS{k\dIDÝ=]zè”1MOÁ]˜/c©…IÞŽ·xõÈÿì8¸š˜zóíþÃä.|¡#Ÿb›(TAS´ó8ýneÿvæ9Ì¡° ŸE½J2Åt.;̽8/#äã¾y¹*h›+!öÃxÒüÒ§0.†S÷`^ê¶‹sR"Qå:õ›çü§&¦HÿQ ‘¾«;là9¥6CVêC¥ÎÚA)Jü1ŠBʵ¦‰Eé‚D†7K ò‡8ææ, òiJ]Nf‘Ì5õ‰êÈV·‘iD'¾Zîœj…(1êU¸q°Üä®qáÂfaæÍê7–[îh¯MÂá¤|»‰Ü»ã^5=XqýÇŸýGW"G‰y¬üîñïþ‹ê„ÁÎëÅëÆ]Gí¾?кa K¢–kd÷£æ@^ÿ7;¯:.ÇŠú½dVgf̽^¹åÎ-[îÜòÆëo,wÊ¡,çÆoìWmñŸ¾ûâw‡ßç,÷ÜñܱO£4Â*l »dÏ&âÝKé˜B³áXEhR¶Ò¨¯‡šü+Ú(1Fc3Ž÷«3^2ôZ‡îe¯‡¬K läH’0,oþ š ˜í$™ÆÕ†hUª4Wý¶×Í=qMã›Ãlˆz³9¾µØQ(CŒ‹t¤ü Q§ýÛ”ÊXšÇTN¬æp‘œdF…«ˆ…'Œœha’±‘<‹´±•Ï.B‹Ú<üº!Ëî1ÛLÌ»t”ú;¸˜Z@¡‡ÎÌ3H§vóÚÂ#öÐ’°Faë||­ËX¢q]@ÀïØ\|—›Yz‘ˆ¯ˆð\B'oj]Ô¦€Ñ7m€ÉQ.I¶V,ÈÜÐ1LrBêÖ´üÿµk×Þò™[NpúçŸþbηÿýŽÎº.éÈÝí&hÿ“ÍUÍ€TÔHñ˜Œ=pYþçrÁý£ß¯˜¦p_Òu~é»/):²[Ë–AM}Ä툗{÷íU줂¢æeH>ø“סÿ¯·+Ÿ+s݆¿à‰fsoÎ sŽøÂôD²k÷®ßýîw¯\qvU³‘æi˜C]Ø­’³P½”[[ÁIò .$°ý« ÚÂYù|•Ž**™Ã×=ÅÐe“ÍÊ`µ#\•xÐÀ)&QQO’YêfWqžtžòÊõPí¼8¤×Ë^‹ÄÚžñí›Bs Võ§R m툊µ«xhn°ǹ{R­_@G˜™.dTÜ௴Á›C—>pp»ÑÔ ‰H…c¦†¦ @•®~ShÎH¿—¿Î²rãSh&âÂØ™Ñ÷ЙLJÂÐe[Ί'"àEsø¼@;á@••=ôgWÏa¯ÓƒVé=t„nqö E¤XœK„–c5Ë8€îóÂã°Mll}i´Vsè’µ$øZ,£Å†3oEi’×­#¡ðôOé£H¢uŠRa\#æuàD ï<ªcwê_Iµ Œù­êóð×ˉ1ÄAQ3ó}¤9\»ƒ?kM;[½¤•a©,g¡ÀºA ®Ûïݾ{Ïî×^}mÕªUûØèà!ËV]ng×Ro uœ%Ð^£È”!.]xðN1ß<öæÀnmÿzøÛ¯_¿þáo?üG¾aÛêóªÔš£m¿‡Ãr¿5Ї}à/®¨³r:d¡I{s΂F‘oZˆ%ÊyåÈr÷ê Š3Î Ó¡®nï9z±ÏíÚšDš‘LùPº¯ Ô¨ÔöfK¡£P¢ç+ÞɆkUE²ÅW…ñ1Flk8£v–õž+_JSh6L,¨¼`T0ш‹“êUf¼ Øiò¡¦0ш7 €é&¦r˜* É))ëÝ’7ÆÅ†4/©TA§éè{¡„6Å!ì:*Qˆâ RˆI–ìe´6a¡oHiM©Z0Þ=e,±–‰©E/}ûÎOgÞn©‹•ª7ìBKI`Ì}|óøËsM†Eóÿu“И·Œ– f$Uxd“; )0*gÀDéÐìÚ(;þÔ±VГ>©:KI-hDpå4èüùó4 ÿøã?þøã_þò—¿üå/ÿîïþŽCM»T†OÌÔ´€¡f»÷ìfͺÿý—áÄvõâµ³—£†ÇÖÍôUßyßN-…M>Âþöë¬Ô¤õk[Æ>tøRÕŸ£,ò~•4ûlxO‚¥Þ%U‡Ã‘¨y-¶}G-·TÍxˆ}V~öÜ 8]³±°Ñ%O¡¢Fu#%l·öbŸ3³·q[ÃíANÊ&Îஈa)¦ Îí…Å_€›tVÅÆ(˜B³o”AQ=túËÅfáê¶)Înj°çUY­Ê ãÏ—\<Ù,‡v¶‡Ú$Æ nŽkËkW%Ì; É){5QP·šª,¾sÀmøiSmI+  ŒÏ»úõT'¨5Åà·‚‰"`i­66õÐaµ‰) L”оo}„ñt hÓ¡ì¹´¥õ{@4öE³VˆIÖ‚ ”r˜â“²fu”eo©àLe–éªÕ¼êwéuŠ'%´«&Pš¡Aeµ26´j"¥›ÿœS+Lz½$ '3³ICÿŽOcÅèä»ÒP™Aü"±iý7ÛK¥XÛ:ÕÝîûmxÊ ð ÿ’YfMEª†j„ôIt…]íGµ«¥r#jîÞ³[mö–[£”¤ºÚí6€‡¾õÐî=»?ŧçÏŸ§×Vc||œ>´„Fò†vïÙ5ؽg÷—X¸;_>°è^­Õßi\ZZº¦Ó>[BñÙWÄ¡/xìñÇ2ß|ìñÇ>ć™o’ì-ÜþzWkåçš#΃y¨ÊØ3ÑÚ‰Ð8P?ªGLõe9â™f×î]çqþZèRú€“çÄjÎ9ÄŠg šq+eÓ}Ç–¨3A™`Û%W3ʱÆ“sñ]9¯[FAôõfÅu¯º nBɨ©Õ–&4/5M’5Ñ%~‹ÍžOcñVÌ¡ \ ½±_ò¦CL²A`­í5/@\œòN61;Z›€â{b6{;Þ’°ÒN ,N:7ƒvyT+hwÜ™`X5…fWú8§ò6ÛÅ t ”Ú¦›(ùIœXÀ&i6:ž”öiC ‡M:UËîQF{ãór˜í ½ÇçP%W¨ƒ¥6º4Ce¡Ncá&ŒÇžÌ`|>žgA„^”7{ÇæR®=uÞ9=ÔÚ‰*©¦‡0Â[ ×unvÔÑrÚ&:×é“=T%_b1ÁnG þ>úAhB'²”ÔXѱêÑŒ.qÉ©9ÂhL«F¯lº@X5‡¯©Ñ•ÐÈE£[òy¿XÓïÉùOŽE)vûml³R¹Œìdë¶­dØ^9|²º\«và¸T!ÍÚ‘Ó=üý÷ß'kôý÷ßÏTZÜ"âñ[n¹E ܉šûîßwnü‰ÇŸ|Ây«ö¯ûvÝ×Ϟؿ=ƒ3ã{>¤›—AÖk©cccË9iíþÔKOe¾sॊ7ú‘ dÛ^‡•áÌEcAi2÷îÛ{àÐU£fÀ5à ëÿ&oÂýv>×uNðÿ³ÄF ñá´?ìŽÒB*@tN +Nº¾HÂaϵ.OÒg6àØ\|¼`UjJÍWШ²~dëIlÿt¸ØÀ)`£táª<2 õsènÆñãØÜFbr'æ±QÕ÷¦"‰q^° Ÿ‘íµd¦toã¶I´BLÑ‘'‡© ì ¾S„4m¾Ñ”@C(N¶X…kélÀ⻄vˆhAªa Ã—wN<ƒÏ—Q€›7wLût¶€æ$Zœh¶± ¨ñÍáke,…(6 f¨ž–"Èä“tʘ^@‰…;]&„QÍ%å!°ª˜ÔóªÒj®Š™@ЃD Ô¨‰ºpY:Q Å’Óø*;6M˜”þU©!sMšd žyuñŒõéÆÝ·bqµO+äÛjº"ŒDAšrH¸JÁÒ_ݧ`ÌiM™«P$æ‘4Û¨c2™©j‚”¨ŽÎu•Ä d ¬#mµÏÚõkîPW‹Dc“:èoðà>ûܳ„Xm²@ÉçóËy¤ ÄÎßË‚£Ë%œ,÷¦2`Ùß§µ®­o:êñ;ÂlW†d;J7ð4 `¼b©wöìY~”™ºÓŽßxý~߆Ç_IŸöÂ… Š| ¼‘¢&ÿ iËý4-*gþR†Ï8ë2›ô¹‡¦Î1dN£Âp_Ük©zÌkê²A8E€úbE[>Ìcj.¾ËL›"³1Õu»>K¤ IÅ$êØ(Û–ïöG¶ ãIVŠ4Ez·õgXÎë"F+q„IšÏb öb+P¥šS経®œÇ©­9™ƒ†£Yµ®nŽ}IäöõÄ ƒÆ%k™>:Ø+ÉicÒ6 Oà:áñåm+h÷§ëžÉ›ôi¤ >A-Í7Íy]º[ðìÂ

    ÛûÇôfùURUž!¼3÷[|›:Íœß^\4™ÏºÐO<ðÊX²Î´î;ro]*HÛ•­êá@±‘(jbµp/fªL÷͸(UsúiìTÔ †ø¼Lñ]Ní~ÙËnîìw‰S ;ìüúYÊâÉQ3 àÉ'ž\³fÍÍ7ßüà¾ðâ |ðo¼QsÍΜ9óG¾“¡ ÄΫҦ~ååW.ÉÂpÄùh?»gˆ±>Å6 YÛyßÎ!vu©hÄÿ©ã«eº2óÿÞ!ÃÑ–{®Ë¸Câk8æÜÿÀ~[ /--Yuïex©Ú<€þõâ /¾øÂ‹—ý·ÓœÕ &Äš@œ¬=Ñh{¶•x^›=Å™sJÖ£ëµæ0 DÒ˜t³(c:cÚ"m«ºpR(‡·T”%e‚8¿=` VYJ…ÃP„û½8¯Fð¦9¥XËí˜dm–kfWíÌ»6Uo¡Œ¥MXAX¥ñ¥Îák|‘!Æœ‡+¶‚§ø“3×Ô0ª*Û(Íàœ&²Mî ã©Yºàh±' ò­"¢ýŒH·aÔs¾Œœ×­ ­æÔ…ñä‘xb¿SŠaj:øVF"›]=ܨa½V¼OØyéQÍÌóèàˆÊÈ6Eë=Ô*hËùŒÚRö…MæË *G"*¦=å –~%‡÷^$åfGQ\‰lfbZ/£EÑ”ž r'8*åf`ðOÀ>Î0¡¶¥ÒÏëòwËJ‚ÅÄÕ’º÷‹%NW‘&óÜóÏضuÛ¶­ÛÞ8º‚½‹µža1qîÜ9ÅìÝ{vë×ñ ecJµœUì'd²K<¨.oýð?$Ñi9r¬…L•¨ò:뛿¾â#Œ²V4q ›YšªH|ñâÅï½ö½¿õ Li••¶cç}ð±±±½ûö^F¹9<»ÔþiX±ÖpL…Öߪ-6]N…¨–%e³„i`©€NÃU< Í,?êÛñVˆ1FƒcZ€–ÐæDv3Ž— 0*hÓ_ÇÑ#˜ Ps—ÔŠ„®ê@I¯1í„..jŸZìÒrõ”bSì¹ÏÂîqChÖÄLÕŽowÛxQ…,Ì#è œÊ9„1¹%´ë0+vAºP (IbOsÚ´‡k¤ MÉ9ȃ#Ĥú çÍ’¤moZú4ÃU‚¥”Úbhg¥nÌï÷Ò¬ráœm‡9t£¢wùB»³i† ØnÒ7Þh±sÄetЇvWh@ª¥¡Ú²?úØ£7Üp€Ä?ò;ëÖ­³ù Ãó«û9M—÷ÂöÝ¿/Óå«qDj/ËØØwX›zñâE«àõ£¯ð·úÚÔ_WÞ̃+XfhÆ+.6ÀìÕëõhü›ßüfÅ9ߊ~°£ŸœvìÜõÃØ:DÇ{ÈC– ‹ïºû®L“™tâ{ü{Îã¼Ê±øIDºò³fµFêÈGÊAl0†X„ÛÈì°S³ a³â4ÔIÓy¸»ÍΠ9/p+7S=G8 È4É¡dæLâ"MÛé7ävvGñ蔽VF•±Dßs þìTÐn¸1XÔÒ×#[¸U@§mt…ˆAÍrõ˜MÝÉiIç4è0ƒñãØ„D•Ø™Áø<î艥¢î1 Œ•±T@§ƒÂÏðUÈ“²mH—Ø>â<¼ 1˜u•YÄYò¼›¹:Ò¬ž-ÜupÉ6…ª´ÓøÌ^r0šXÕ˜¾ÖùD²ZTæ„( -6qT"w‘ÝGßUû~`¶—aB:¢EC®¶^êÊÐIì~fp"Èz5$JߺùÉÀŽ)µc{Æ‘¦h:Φ@Õ«âu`M\{˜å÷høIÑ=¦cì§Áïþ%ýõ< IDAT^ö߆¸Á‚LkÍ[§-;tðÃo2·$ŽM À™3g8ŒÔtÊEž¨ MwYiæõ°Â{ äì‚óé$׺dq·Ô¢±oô-®Z•[‹oÇÉ"ç%(FÄ Ó2Ôô©ºf¶ø:Ñ·®@„SsŸ>y7j jkÊ:=‰\4Bl;´¾ØÁL:«™îîÕ]7™u-Ÿ]¯Lï«¿¾¹o×}üðÃ?2‹CMŽB3‹Ìuy]ZZ²,7úÁ^RTµ¿Õ÷·úËYÂ^ö"Xf¾c \µ¼Z«P(Œòc¹ôZ»Ìâçb¿hv?÷æï+mÛ€3vq/éÌ7Êt“¼°{wÜ{ïŽ{mÅIøTÔìÿEÖš–¡–a ôÿ™ éÐ <ýùJÍÐΘK,qve‘Òl\§Ašï µè# r»ç’ýTw ʘ%¶‰Yh'ajˆ¾S«a$Œ'{qžIË-0M³nJœ¤ßHŸq¢©¥2Íã4±¼A`ðNéb¶JÜÙYöÉû­mÁOÛ(Í㎖ãÄÜ@}ã0‡»$A¥ªÌ”f°‰ó3Zܽ…Ûiòî\×eªÊdè&{³ML•Ñ2f:¼nõ4é¼ZöZÜÖÃxžN—Ý0Ò‘˜ânßøåÒ7|Ôט"hfÏR®Í?…ŘÌL¿šû+‹WøDV{3ê26ëý.w™ë¹{Ïî~TDzymLm:xh9Ô´\¦|ŒÈ”!-‹å£_O¿Œ1öˆ‰žŠ|"|Zwu냸ïþ}7¦‘ûôéÓ.\xõÈ«ÛïÝ~áÂ… T3@æ{¯}oÛöm!ÙÚØ*'ùj¶jÙàÚŒãs¸KÚ˜4ïˆH5,¹9hÚzÆiXOôÜ@®cF¡Eâ¬V”ÍÚÉCE§¨In²šÞlÏÓiP×I&„ƒÓöº$…î‘YQ¹vÙ&,Ìã´î_dêV¼“43ÇZŽób8îôe,±¾,¸êÓŽ1ƒº1jX%:9LlÁ±9tœíNì÷à‡^TqÊ™iºhŒ%çm“h…¨†@YÜÒêÛh t˜k&ó3ç&8/ô«˜ñN0ã…fÁjò1y»ÇîãµBê…\ «êˆª¨W€¦Œ‡õ6 $—Ñ’\U¼…Ûsig1ÛCuÍ…Ù€¥ò»ðò©§#±u N™‡6Ùü6VpR±™– z‰¢©(*?PÛ;­ÚpY3_ DÍ‚t ‰E»Ç+é§3´}@D¢±~hTúôšÅ> n}ˆBf)vÙõl£r¹ €Ã0]ùŸìÄAëŒ?‹ Ô}ˆ†Ä›6Çt¶k÷®«%Z}\Êáâ¥V¢Ç~xì®»ïªd¨¦mðóçÏï¼oç¡Wí¼o§¾G«>$_F#3ùÆ­ùÙ]£¶½‹F§ZÔÔéÀæµë]\Û¿Vl ð–Ëçó|#™Ì€5kÖxí‹]|Ú7« ½æCÆ Þ?ûúÿðßÏnûÕo?úäãþËϜ޻÷Ïô\ìvXªÇí¶¤8é6WƒÙ¢Ù¤—¼ECÄ€äF:Q3Ã*þë©\b†À,ŽÀê™–ìœk’êVø ®Év«Ú5¡¦˜Þ1µ\®ëûuߺ&Ü˰ § ¯’÷«ßW­'_ƒ{㱩0ðíðù\Ÿýìgœ;wŽç¡å”£0ß)`íúáp pòEò£×ŸÌPÀx­~:¼6CËèJùWÃ;_qú˜öä18õPh)xx @ã›OühÝÍ·tÞù£ÿ§9ðr{nÖ%!½®²©h`ƒtajn—¤¿BÔg0>/¾qÒÍK¶`£Òsdú ÈÖƒ4“¯ª•ì˜T2û¹ÑF)Lá$x½Äf–àU Óùû´ãØ Ü¥ikBæ HªduÛCtN¼„¸³WÐl TA»NëôtšÝQƒ»€P.2…&Ð™ÄøQa3‘]Eϵ@’#H aÒù×x-c¦S QÔ=ó4ð™ö RèWiÂbŒ ½8_ñN6QØ„q2}x­ìq§ì|þò•0Ý–ƒN­Ð¹ðÙà (å§³hŒ¨PáZR¥“IK¸¾pÄ¥Sp÷Rò‘…R_–“"Û—_¤P R”×C@¨ÔÄJÝkí]Çï„),”bTÒfà)òE–—› \¥‹ã÷í Ìu)²¸¹èa‹•+äÊ^jûN‰—±z½ÞÖm[éÙŠô·úq‘»aoû½ÛÇÆÆô}z9 ïÂuZZZ ŽÚ8}íÕ×´úäoõcçzh¹zú©§—K‚j›Ë]a{*"Ò\ÅNþ@Ô$ñãÅ<{ö¬=i{ƒÿJÈ\nMü[î5¿ôÝ—F|©|=,ÙZÔòBõ?ÑÀ§¾$9J=ë4– ixâ¶n|³rÌoil–í6’ÐÍBÕyéÐBb{ ¥‰?jXLÛâÏÆ2Î6ëìÔS™&B2ª¹b§Qx¶äÂtä"ÌjÓ¯£/O”œ¡Œhø¼nç‰/áÚÀtˆz¨¸_„;š—ý½CaOˆI}ã9Ìö¼ê”À­ÔC;·@ɼBä¼®ˆyг6@îò. „H" jeIÉn¸7Â+S'á€lWTyôõ=œš—T"PÃ_Ð(±6ƒñqâ1Eš¢A ’~©ñI/:ˆ»ÐF ªàdCÕP)M•&MpÃrƒZ n¦³ÁÂÌ¥¶u¤>ÏëÖ­E›±åÎ-Ã#'ízï½÷®©Ë®­§/‰uykû½Ûí AßšžW˜-sþüymïÀšlQžéÁö·F¼h RII/Q‚”%ƒÔŸ¹•iâOQv´¼gœÏíxË"L줊Ï%d°‚!1u—÷²Š>5-™»’Jì­}AÆ]¨‚“¬Hz¨‘âÛF‰˜¡ð\BÛ1o½n[ãžä%Q‰A« —G†Y8«Û1 - ³?¥CÅ;é2GQ¯`‚ï1É¡–4Þ˜C¡Ïàóâ:´DwjQPd|æ4\Ú¥ë 9¹*]?Ädyé´WÉd–žmWRÊ]ZVló™ý6Jä' g`3ŽU2„‘¤]VõÌ‘-M¢r˜µ•‘¹yªœê"l $ó¹«VJÖÛIBQ`Î|UKØI| `I°AÚŠ½žnÿ|÷ìÎqI38‹‰G|ì8ÌÔ—~z>ª6ÔFÛº½V]jWÜÔ.£¶΄´¯©Ÿt®Ù¶}Û¶íÛ,fÄnpFÄ2Ê¢ŒÄnp|1ëÖ­[oV¿R3³< ú°—TM²b®;"µ&Þd ‰iÇÎDÍ‹ƒy4üu5²øàƒ>øàµ&àêŠë¹ôÓ¹ÂìXƳ¼òò+wÞu'!SÓLuppy¯pDg¥Á§™¹a!€^b:&ÏHšlŽÝc&Xtèówí’¨ÏÁß‚cs€Œ¾tGKR_ëWMèä(.‡ÒÏÐ4Ó.…ŽN©å¦ÓÀhŒ7tÎØX0‘·Ò@M‹]ßû9¯Ûv0PÒÚ+tM`µÃ œcmìà z òÕçMåш}°ô ÓQåhGÒTÇyör_”’Ù1ľXh ª‚ vk•nƤ\•Œ¢_Q$¢Òf>V³ÖHz­“ÎlÖ} S;À´Y;R©˜Cá8Ç'ræ9S©ËƒKÜ«ã;föÌ:µÅZVŔ̓1…)$E€ÍÕj*ø,©p’n°ÎÎób1_O; DfT¤‡”\­´šÌbžoÊS߈2­÷^Ók1ma;6.f~f8vÂ[™å‘iÕ®¸´—{¹—Ú¢Tè=òÊtj«öµ£â°ª_dy±sÇΧŸy:ÃxêŸhî»ß(õ·¢¦Ö.ÁÑ S }‚O2_†ƒ÷(mX]£ W¼¼ÄÎþ³˜ªG[Pê7ù“–Ä»víZþ¤zéñgz£·C‡¯7½© ¦úÅ‘cG4†zÙbqd%ñP_näkáÉVh·H³=ÕÍL ßã6àˆ—f¬…ºsâ5#ÜËNÁÁ€Òké®e„£z²7» /ÁŒ°W¬ïvPÆôíxk_ •ãã¦b%ësÛwJ–lCæ—t™¡ëú<îÈ¡ Ïe_äPh¢cðV< ’QÕN/“*Ã'òN²Ù+ÙX~'C70 ½¥¥'•¦vo$Rò ÁS‡”R%Ó*›°ÑF i¦€añh#!‡B(ÝrÂ^hü`§Ðä¥8„f~qz*>ˆìâê¼3±Ô Xà—Ü)AoƒIaÒ,UrPÔs™t“é¯o:½Õ5ÕÖÊ•€Ú,¨m³M¶ µÍ+Ù„UTNz×:¿ Ò¡@v©H´%G¶lÍ´jÜ!¦U»Š(¤qÃ"Ô­[·î²[W·qw©[¡nÜË%šiÛíà+Y3„åÎ;<ýÌÓ>ò([¯‡^€[™îùóçû_¿z1ò¬Ûí2m‘JüXÑ$}ÅuImØ+Yv::„Œ¾ˆš´¢¥º†›ºù|ž=†ô…m{=5mÔŽZƒ£Áö{·#—"Šó'»Ý®&½_»Ë88«Yúƒ „DuP—"€;Ît˜W«"K(Òý‡[É ÆçMˉIº>æ$=€8•ÃT Ó!jÌÑDÂÕtc0•+q¯$ámNa¢!N~¡¤©%MC𲃂Ôn×kbŠŸ: ÔËž«áɧ «#dRÉÝVØ=TM@Ó=ù²ù¦¤«QCܵJ+Fªò ¦ƒv[ì 'qBŽ/îã¨`¢@Ny&©iÿÀýUcį÷\íèÎF‚ Žõ£¶AßÁ*V;ùºQ’®k}Ý ¿gœâ9åK‰âž'ÅßV-x«ñ > Á˜”'¸,SÀÔ—½®\Êðí‡ ¹ †—Ë6(M|šì(40X›Ð2¼Ü~mºSpÕ\”ûK.’]—––l­™öq÷Ñ=Å—Ê•µ‰«V­âVk[¯ú×tÙ LQÓ>¯âß-·Ü`û¶íý£¿!zú™§i5·ó¾™ú’^¹2l¹YÒ×ÍÀ0™êõWùsoÎí`?Ö\ZÅOظBŽôUì±è? õñÁ×ÚO¿xI˜‘½:Ô´¬+/;«V­²0<66f)ëG›üë8sæŒ5]Z8eC ¤kgãv³¡h)S ]1ZE’^RÏl[ó”Á!¦Bn7I#ô¤­ Ï(ot{:KžzÍ&ާ àTLº”¾ÉŠê¨ª¯S@©ŒV;Ƀ\œB³áa<[¼csñ$;«¶0¦tA¥-Þ±¹¸ŠîSJO·G‡îWÜFì|\cCÜòôuVUôâÊVW%»?QZ¶*ÒÌ£¶«Ž£téÜéfËkIBõ,DD¡ãΖÐ.x'«b,ÎasµÈú‘¶-gÆUs)’ËÒ@Éà_Õ@fU—5Ó­¦ >ìÂṵ̈  ÓI«FÍ’ZäE÷¬æÒY ¹†Aí†+Ö!«ïu¿„ ßMb[è&4ZÌ)P5¹{cÀËŒ$5M¥kª^KJÂ2ÖÁ uÊe.»S \Æ(–XfõKH?úè#nF£ÄTíØ¹ãÈkG|ç‘ï<û̳™Š³ýÛÿåßþËoþËLÅi¥&ýHf›®Þ蟔›W°F!(íÚ½ëJˆ<½^ØÉ‹©å»}Lí3+ʬòû u~¦#²XqRJtðƒú#¸‡·mÙ''pê=³ïþ}‡¾ƒT¶?~q´=í’V¿Žs}JžÂȺÙû|³#Øhë¢q»­i¦ý]Ý£;Ú×UºÉÇN̉¤3ììÔoÃÛ’=¢ØÑÊU\[í¤ÆD´žªR¬K1mp}Úä\g0N? â\Ù=hì¬ØÐãq.[Æ’ëâê_ˆ÷ò̘LˆšjÚýˆ!»af:½,_ü¬z ·k*‹)ÊU•¯5®_F‹|Z¹tEY¤s,‘Ôk~ VÍábZt˜4ePgë¤:R¬æ¢q̨¦½Ôë} Úšù:,•ÚÚÙO-NÏ5wÓi¨l¡iq]z°Ùß œRȳ`ùI ø„ùO÷\)tD¢…U¤\î½XLõûuœ»víتµ‚H­8ûKÌåÀÏnŽý”Ñ'—ûÑ蛑¶ÔFN-©¿ûâw¿óÈwø‹¬TºÝ. ¾ý›nºéý?ø,÷í¼ïáo?üÉ'Ÿ¼òò+Ø;þ|†é³{Ïî .¨e-øõ¶íÛ>ýôS¾TâhÅ9°8PÛ00úQÏUžËýz†U”):‡gÿ­œ&õ~³ß̸4dB×µm`gÕúÊí‹øépDúâ /Ú#H·ÛåO*3ÈVœkÖ¬!KyÆ zñÿß<öæ@ŽÌõç=ϧ~ã×ѧã`€`‡RŠ‚69+-‡Òµ]Þôx«&ù!b›TJ¨ºÙ1ýAžªyºQ»ç¨Hi è4âi—ö&yÒL’ljq(Vp²ƒBˆ±4ÅQ¨j\Æ ¤j z6£;Λ^.*˜¹æ˜ººø\ªÅäC‰|ݽàxRÞcBxqºªN%µß[B»à’OXøìeaÝ@TdŽAîˆ ­‚Á°'f ·¥n }Q䘑HZ?w󪂴¿AÞÐvì¥ÀÞÝ)emG0,2¾ä@é ,wš$]§«ÃºaixóÓ†ïQâØnp7À,kÉ®án+§þÀðÍñúç@Á\æûS§³CàsýúõÜþ>÷¹Ïé^vþüùßþö·úšŸzò) œÿðÿàùçžï/–È:o³Ùÿ^¬UŸ€ÊÒG| f`¥ÞŸ“|à 7üSÎè®ðúôiNmÕ~ïµï;W¯^­Æýó•—_á•´fk×®U'dÅN½W­åÂ… üý­Ö™®üº;û.gΜœƒ”­Æˆ —•‡«¨NûrU!SÐm.dïºR,•Ä4ܱ%{ =²c5 ¹T¤‰û§{q õ„ÒÉA‹Å¦¥ßÈŸ f0¾€Mê@¤€WF«E¸xÎÙ\b%X H¨ÚVvO,UËhÁkótym£DÔi¢`BL5iÑG+Z SB^ËÌA] I(·ðªÆçÂ8ï\ôéHû=S†ðCDHrÖÆr®-Y•&sREõœÛߟÝÀ=ˆ Ua g…Ç4k4‘9BÕ™fÌ6\ÞxÑž„øÎ 9;zîeg°ÐyæI$¸=Ÿé=co3-+ë.BÇ35eâ4›p‘Œ•ÞðùDv)FabjAÏŽ0ëÎz>9âÔÓ¬:'Û RûÂ… ŸãáÙužcQÀ¡q[á‹¡Í–;·¬¹iMæuÒgõÈëY¦èµ¾ûî»úõ@ÔìŸ 5õ ê^ŸËÜpû' —šüµâúÝï~§c鯕‚±<=XTî÷°UàÎz½Œu÷=ws¯ÌTœtê§þXJzñß<ö¦¶^‰üŒž{ö9š! ÑT>­í'ôã¾ÊÛöm#ÚþÝtÓMC:Òƒ'´”îå0Ëp`Ýþ( ¬ -·L¢ø37öî‘kEá§!P]Û‰äI¡¾hB>J¶]±V/ †õ“«—;Ƴ(´è¾¹€MfKŠDÚX“´Ùjêå¦ô¨2¦ËX2’ÓZÎëæ¼n…‹ä³âdAb‘¿ÞCmwè¥cI!yÞEmº–ÑÚ…ù)4+·%" ¹Œ%ªU¼“DMf‰XÙ«\¢ Ý àÕŽÄ-].Iþ ã$ ¡ÜvÖ¨!sÁƒÇõJ2ä‰Óì,Cc,­LÊÍ"“·Ìã4A¢„6àó‚ðÙËX²ñ¨ieäeó ø™{U:·°lXÍV3¹ÓÅ´5_ÆzéªæŸãón«CGMêÅyÉí±óÎÀ¼ÅT;ê«É°>…•]ÿÕ¯«]fw©²9êä>üðÃ!‚9êW¯^Í—Q,‹ÅâÄÄÄÄÄľð… 6°åäì±Ç» ‹;£åõ\ö:ðÒ¢æÀ’z÷žÝ—š×ÿ4\,{îÜ9õL¿`V.—ãý ?—þµÊ,}Þì[¬(Aάçž}nÄŸÔשÍöï½ö½‘ÔšJv%«¯âz‹PZ¢’ùSÑk’˜ÌyÔsè.0çe) Æ¿5­µÍ^;näOUUàtBWV*; 1FaQµ óˆÂT×1ãçW·³e·²ÅÚˆ‹aê`ÖJ›©VµAš<Ž!.–ЦG`;¡òÒ/>¯L*!,…@¥£Øê:·®F©“.ÛÄZS]͆2>ÀÊÜKì_\uÑÞ´Û¶o{ãõ7®<¥gpz2ž‰O‡R‘LÔ\ÀEˆ:\ÀEÝn :(ˆÕm¢ÞF Ž7K3ÛS"E¨ÊHŒ?¢B”C¡àpB]ás…Æê–¬&ÉÃ$aµ„:ëöS±)¶ˆó„©‘nÜ(û¾¯¥RÛSS¹fð¢ÄGè -ÓYȺj’‘mÝÚm”*è4ÈL¦\e´bƒg;¡à¥qªã‹Ÿ•qì,€¦zÆÅœ×m ”ÈàÕ¢\¯9Pì åÜP,»°n‚ñ8pÍÌ„bÇØ2ç¡¢ÐYí£Ñã´+¢þ™ºÉÝLj8ù™@y¶¢õ\4 ±Jp7³Ò‘BÍ—N?Bòzb3¤©¼R»ÇÚeµuj$´[Í6 `ãßSe¨Zñ)ˆZYg”.ñ‡ ‡¬|>okš³±áÜ–ŒÈ=S'Yóë°ž}æY¯y¥\.s3ýãÿêÿÃ[ÿÁþÌrz’ƒ´ã— âÁ.\xè[=ùÄ“yô‘þBS'dýyȗʇÒa³z¨*– OSC]ö]û£Q›/‰ìzÕ—,Wä|©Y?¡1s¡ý“>Ú_~ó/WDåß×\{Ÿ<÷ ¯þõEŽœ<†{jÈÂâo±—4ô¢,£Œö€?£ªsˆ ¾#c¬ŠjÔ~]à”hà"šŒ‹†–Rï9Rh·ƒ&p‡Šê”µËmކv ±t·5Jˆ l5‡BÛl|=AkaŽø6t%‡‚óÒóºtX0q/.‹R“ë‚Ì”Fë¹Z–Ó»j5¥œ Ð Ê„j϶™ ™ÚŽHÏ€ÜR%IÞô6‹ªÅtJ÷^:¶âé¥Rs(ô…É!Äd]¸!kä^Ra#måï„ÿaB¢öE´ÑLÕ&}í IDAT`"ƒ"`™®ØæE&~µ?/fP•ظª[¦€Ç$á$ܨ^œ7†ì‰½ƒ°©ý>r ¸kÅòî¼~½¦Ò‹ª™þ¹™Sd¼à¦OǙ٠t‡²R3«m¿žkï¾½qq`uµcçÎ ¿õ‹ñññ~tï׳xþ…ç?Á'dÅqüãÿûÇÿüÿüûÿ×÷W¨S%ç„ù̳Ïd†y/¼ø€‡¾õÐ3O?£oÀáC‡y@É@¦=+è†;ð›EŠõä“O=Y(Šf}îsŸûÜç>·víÚ'ž|â‰'Ÿxð[2:|÷=wŸ5ë*š»²Ux©×?3i¶¯íR‡Ö×bYs×Oe?^QóÈ+Gz½ úMÎóÍùóç×­[wË-·ÜrË-·Þzë­·Þ àöÿúö›nºIc 8IUÔܺmë5Šh½tàŒa„Ú§ª9"O 'ØOŸ¡[†šêÇÍzŽÿo(™GlîUÐ16ƒ$îV;(äP =GLˆøÂ¾ép£çÆ-Ûœ Š!7aAöM¢> ¤žªŽÍE%´ÅÕ-L¦/ÒjªeLÓÆOé*þŽÔÙ“½8Ïgo£Dót:ïôP«  /r ¨{;¿Ç4±\}ØËXª`"3unà”டþ\Št’c•“sIpõ9Ü%6ëÖîÎÍ}I}2¥mÑnëž'P'_:Óó,£¥¦óì9§opî¬9Ç4†œR½Ð0i?Å«º¿ú 0Ïy]7hŒ¥<õú²aS2rè´—+0Xnµ¤¾y„jú‡ƒå¶ÝÌnµzõê'b9ZÍu~™õO •iä}öìÙû÷ßÿðC¿óÎ;ï¼óÎßÿýßÿâ¿øÅ/~? _>ö¨~ý?ÿÆŸ|ð[îÝ·—E'WíGµ!=mš•[jÌðë™ÏçóùüÞ}{‰ÄŸ|òÉïÝ(ñÚ-µÜrç–þ>­-4™Ú¦£â=»÷è¿þ§è? |ðœYñ|¹!±ù“ò YµæO7§ˆ}ÉÔ}-’Z³Ã:UɱâlÀ!(«Ìª”h1ä« K³ÎZj§¹–±¤5bµBb#^Š»ð²"¥” ö´Î­Ü…xÌcJƒS¤Û5úú:7zÖC9Ì:çX/Bì í¨žCa‹w qÑ%“8’ªª ‰¾AÓÔPöbg†0ßÁ‹VNz>L!-Ñù¿þMüȱxb—?3ƒ& }! ;ëv)©l€ZMÓÙLÂFD=¥E¾)4uwN—€¬çŠ=ä{ÈKíè§)Ш`‚¯_ߎ͑¦Â q^j–˶ÈÊXdºµymj¨‹²|gp"],Šn$¡ŒÙ¢­ªAab§ŽƒIަcúÉ7`¶â×À4™‹}ug |« î~šŽ[p úžÅ_1E‹Î3gμ|øeÎÿbç5„=4dßÏ|“€§[ŒÝŒô›ú“çÏŸÏ|sÄ¥S=bg¦}þ¹çù¿þ_´\Ð|>ÿøcoõ·¶þ¾õ?ÿÆ7þüò'òÅ/~ñ‹_übfçU;…›o¾¹ö£ÚŽ;,vf~rݺuëÖ­gÏùƒ>¸¦'Œ\.Çëowv­­'k¹Iv?ÙõÚ¡¦z%îÚ½‹Ÿ íÙê×VËÅ‘óžÝ{ºÝn·ÛýÇüG_™ü P¿Çªz„§£úfäSìÅHG@(1U$ÉyœSOãgVÕQ¥9¿»ÙO({n톔;b½æ¸ ML '¨ G„“imù´Òetɬ:ŽÍæ)ЧÅt±=tHZ±ž®@‘£ÍŠw²‰Ys¸ËIì•ãLy'ÕgGøG%‡”äâzâ"³ÏÊnä6©>…ÒÍ[ÓÂåqæqššE à Ì!ÐP”ôÜ‘cãªñï­åÐmˆ >°s1Åj޹§H¶šâŠPmëÕo¤z‰¾m:e,Kaâcî‚£ù,tdF©ö*äôR¸pÔOªŽ£"´.îDj©$ä±4cIèI¦¦§îzýå`Ê8ŠJÓ\!ßPd‘þhô?û̓² ! Ý3¼è<öÃc{öîQnÅ'HÙ ßGþëµÈé¼ MÉø}2_{ü±‡Ÿ|øáo?¬@N)ýÁ¿ûâwíR‡æ>ð €ÿ¿ýû ¼á×ÿðë/þg_\ñõ¨žáZ¿ñálûIõOõ†Ó¾®|é)G{¹\®Vm1xíÚµDÚgØ}(ëpæÌ™»ï¹û¦›nÂ:ç¿{Ïîó8ß?xþßú»ð·êÿk½úßV/ûª®È0ן¼Ô<Îe|,…a˜óº=·¡˜XAÏ’«f´©~댶ž S²9n²Õ´“-÷Ǽp8#Lˆ&¦ÒöèÕ &šâ*×såKÇ8ÅŒÕ9Ôáülj¾Þò‚XüO Kd-=tÊ^«‘2Ì+ª÷,¯Rps(Ð$¿†Ý×и‰bŒq¤ä‚N¢5ïØ7ïQb0Ä& V½…vº§ýpó<¬Ñ‡7v‡+L4QBÒµ³)Ç;é$O¦çsd ÕC!v…‰ÄeÖ€«/ŸEb*ÔqýŠ[0ƒæ|ÒVå¬1*c)ŒÓ¨#þAF¢ap;ÆŠŽòÅ€ iËÖ‰ÒcH?Ý’ Ò©m9¢SCî/+ƒ´^eð)ž_Pñ½ó¾/¿ú²þ+Í<•“Â/–«?~¿««}=öøcO=÷Ô@Æ7bæ°ÿzèð!º÷OùŸ¿þ‡_chŸÁEŽ<‡I5b¹ùû¢eõŸ{¬ºÿZ†ôžd6CÒd›Ã‡ë'BS¡½ûö’º¥E§zÒö„Ïþî»ï.--1î½÷ÞË|@ºR“ôÖê7BºZãêAÀéi"D1áM¨ŠK¹rðcÙì×!ªb¤Ò_a ìPªDSh6^L]& ñ(€ùÅbÔ â}ªQŽàÏ#ª Ý€Ï è`ØÈèP  §õ„äL•×|ÙÀg%ëëM¿—‹¢F²qq±äµ(§ÔLŽtJCº±Yl³ ûöMUŒò«Ûc9ÂD5¹%>¹0“_àÌ 7Qõ¦zÎ4ŒÓÄ9\,;SûjÞ¤_H­¹˜éu³ÜÁR m&‘ …”K±Ü™%‰©…&{]Ê¡$º ý‰f¼î“¸é~|# Ø„D@Yd‚t˜¾!å_ë¦ô ’ŠÞÕôç‹ÙÐôh}àÅò¢B#K‘VXÓeh×~—öÌP3X¦EŸÝÄ€•1I!X¾öêk™ìˆd “6oÓ-†D\Øt‹!ó>³Õf|Dû§}úó×4Âɾ*­clvø/Ið±×„XRû×µ?üÃ?ðëܯpG®¹vlšþÚzà¥^nôkk¾ŒFåR+§+ïÇyå!Sá“Yëú¯wßs÷œ±§~Ak'sXózûÞ}×ÝÏ=ÿÜg?ûYû¤êØwÙëâÅ‹6¨UONVù3JMß?ã,Õœ×MW2€ñ!¡8[ŸÚ¢FŸ••N¼ê’JòCÉav-o5pJD:X%(ÊÅOtŠ=ä3¦zôÆkf²XÏñæ¶‘HzEæ¾=#kà'u%´ðáë†AS–ºrCHœ©`¢Œ–H‚dèR<หŒ%!  û”ì•zµyL”)ÊÝJt/DSŸp(µ©sì„îÔª`qePAöë6Ò#2Z@cç$=Ôœ°ÄÑ;}-LrXÈWK0Ø„…ü¼^”Ãì š¦©[¢9\dðˆôHëJ$–Kç TC#ÂS%ûwq MÕȲÙK˜$Õ¹‡Î ÆÉM>ŸÿÚÀF•¦ÈÛ¯~!q=Cf4\E…®z®K‡ %GAP-iÝ—Ñ>32ò í Á‰³F2á 0/¯n %r^z‰á¹ŸuyeAéF•fð™¤rFis>wH2ÊT}?›Êâ©{‘?ˆïãÒPfù†é¥"\›Wþ"fÍ5YNÁr=*¹ÿŸ®8Žé¹jwßýûvïÙ½jÕ*n¸tÜýðÃýë_ÿú׿þÕ¯~õ«_ýêÝwßåy²[é•´Üï'w°W}ÓÚû—kÒö/ÂÿŸBB&Qóî{î&Î)*¤³~úé§O>õä§Ÿ~úÑGAˆiú°=YWkˆ{U€Ó7  ˆ³«6Z“<ŠX´‰¯i] \ xHt,V®”eœ5ñÕOKýªÆ‡})]ŸAÄòf‰»Bí z¨IúŠãQ&˜Ãl'PO™±–µ!­š¾¨cHœÏ@Õ_€sZ}¶jÙ‹^À&7ÃÛjK*Æ5·Œiº1ˆÄSåöU¡›N1µ›*x©~oU >Ó|ûvШZ MXàyE®ùAª8„T“ù´ÁMUŠø@/_ªôU.†‰nÇrjêVã/§„bú6°+’“‡–bu÷Y$õef²¨5®©A•=ë™ægì›ãQÞ^=™}š{Ÿ}ΉÌÊ*²(Ù7`ÈŬ|DFfuÖÞk¯eÀ$ âp1zwkpI;¥­ëf.zZÊžd|ª.yÝQLѬK–šQ© §ªn¸›ð¿6›õ é´p-Âß5¤ýÖcÏÐÝ嬺Š]çÕÄ ƒŠií“2a]w©ÔßIqˆ…J ƒ`yv³Tñ™¢Ó‘Ö)›Ô›O­ºéUbuR^=Ÿ‹§J]Mrå‘(K«ª5!eªv_ô-’ýÐC…m0o5 —eè>œ<‰¤jèå¾’ŠÉŠïå[ÑÔ‡–uTbCoÕ¨6IMÉSÞc©UFš)Œ\½z•ˆ¦®òõÞxo‡Þ]¢ëׯëbøè]ÃÏ®?TïúíŒIÔ•™ŒÑ4á#]ù¤ô÷^:šr£÷ÏnWãÍ7Þ$AÐÆM=Ç#¯Ùµ{—Hœ>ýôÓÏŒ.†À½ß¸§'’ð2->¢ BòºC‡¢X1•GX*«ULj²DZc;¨&2³!±¢ˆŒDH¡«†p×,6#Çð`˜üÇÅú‡*Hêâö SžN©_@AöèëÑT£k`£)ˆ€ÕÀº'öè"mÀ¦?²uN¤ï¡ 3C# /âbi gÁtÓaÊ0Ì%%4u2¶ÄlVè5#´Î’4¸ÕPfu#˜khÙœo6aZ¢Ìò¨lÂÇѤ«›*WÖQ¶Åbc'Õ²a)©ÄY{©«‰µuÄvC¸¸cm[̪d8lT¹‚´»ŒÊ\•.©Ä]‹>ÛO<„ãÌçï&áÎe&ÊäÏ+í†*¡bV…YR!öÌꆔ•ÊÏn#ä=Nð3O“s3‚qÈ™ˆôPÄôÀÀ7x%Y&-Ž¿EdZ>Çy< ÝÈß1Œ'ÓÓr…½\OB êtãù7ÏoÚ¼‰JDDÊõw[§U‡üõ˪gôSª•J—vÍž¨ª°IÇ.WËq›G&ê\ ËØï&wÛ?Eõ¥ºH#\ÈDPÌëg 9ÿæyÉß´yÓøéññÓãÆOoÚ¼iÓæM$¹ÉO¥“"]dúnÎGÔóÐfCÒ´¾“‹Vœ4 gªµæoÛE©Ðµ'å[LGíÜb¶…ÓE­‚\Ù˜%©‰7aëÚi)“ª²„yÃ=¤±RfBr«95j‘¢¶Ù„zBi."5jX8P†šh‚Ÿ8"fº¡$¥qÁŒ“ĺÉ,×c´r+F°ú¾kM7ÁµÓ!BSòBÙÖä,"7à–j*Ç3‡M Õ±`ÁÒµÐ~öÙgŸ}öUS—,YB÷y衇n«£ä·m>~+bF»×y…ç!¶·®µVu„mìù~;±ýxð.]ºtÇÎçßmÿˆ‚[ÈçSBÌÁü/×±šSN0wCNÓœpÓøÄÍ›7id¢ÿZ÷òåËçûâ{8Ýû…tY•¼–¤€O×dÁ‚T`ð>G]Ú5Í=¥€×O¨;w,Z´èð¡Ã„š_ dVnªè3ê!è£Tk2@R™aPÞë†Nñ _FžàlvšðØe¼ —¸rÛ®aŒçcj-Ã Ê Tø_Ìä#UMVŒbj«G±B%@%ÂÃXÚ“³\ì‘-BMp’½ø*\âç±Ã!M\¤Qš÷ oôQ¬Ð–o´xÌ[©¹Ûв…MÀøÈXjªÄ,…º©¬-Æî0nï-•!\$>ÍÏL¥Ô•ÔG±‚U¯‰gËN—H90 ©Ú Ñ3´$÷F˺*‘éÆ.Hé8WÅíTØ6ïr †óœá+ùþ2¬™T´Û‘Ò>ƒ¿“½’¦ö±òÌEÙû¾L¹4«ÁYiFÂ_ÕI\ fšš2í£~•+Ü• vÊ¥…ÌÝ\ÆêkŸ©û¤•sœ÷Ø=ä •òůԡ—òëU‡æÍR÷ é]·K-4Žˆøï°Eû<Þå=|è0ºX®W²s9¨H+Eu¯O?ç¿”YÙ?…Œ³PÆx2,Ç‚¤ZýHK¡ä7¹èÔà8FqÑ#ß8ñ„cÏX›]Ìî6¶>ÜÄà&›ja%+œ¦ï˜:Œ‘É-ãÍt™Š‰Ž‰‚E“÷ðma® ‡å®ÇhÈÇ. &F0Ùàüm©é¹‚£gá&h¼¹PšUáîEGÍSò–"¹„U#j*‡š)´k@Ç¢KÊr¤„ÓSFµÔ>˜Âp Úlµ/W>åוˆX’Ƀ`gGØÒÁ£vÓ¨ã/C•Õ:‚É&ï?†. °I–…R [‰¯ óš“eì#+‚‹@«l›ˆ¬Ý-&™æ(:‘Ö¸)·ߦ pS<3±!™¾Çƒ¤t|õà]IˆÓÇÞ}{:,¼óþ5n=@ž¤OyZ…å^ÇÚŠ‚pnÊzéQÐô„ª¤å\Ë•¹…‚íai™“«Ñš6¹F L5#©ä³cMÈeE› 6S]5ŒÕdù&¥WY›(Dâ«p]ä¬$E¡1¡³ÒmÊ:†fM6Q¬ha¨É¨É "zù+T!”JÄÙãø[2‹"&…0ådXÊ2·p ㉻ë!Ÿ¢ Ôìðy9™Cv!ËÌÞˆõšœ­¦v™°0²Ž5mQ¦S2!l¿Gd}%í”ÙEÜR“Hòeƒ(ÝB«üçŠéª»Þëú93εfG³(¦s/`ï dænƒ3íø³iÇ5Ã;î‰cy[yh­jò \w‡ Á]tOÕƒž˜MµÜ¼=QåM^¾|™ªÊ÷†ÆUn4æuÛ1Pé’ÐþÛ§Æän5}©Ç°ÜHnJݪٕ»«Ê*}pív›Êã§O¾sìôz™™Ä;¿"ÛþJË=0AlSAOƒp:‡Rˆù HL˜TòK Ujâ¢ÒÍÆšs°Sð‰T¹EHxŒ²«ÀÂ%®ÂÉÆ?–\Oá§3JÇÆ L.a•N×Åûü¨b Þ¥Ndé!p’tRS-czW†Á$,Áê¿ÃŸiuÕ0¦È1` ÃZ Ä:^ᣱҵ¦L¤Æ\¥l®$?I c†¿#’ǵPQº&b·DÉ Ìär©â а°¥`YW±¦¹k²c¼(pTŒ‡ÜÖ °ðºWJ1-¿Š˜ˆG(­H!E¸RP>ß"_BNõ[§ûÎv}%ÜÓˆ½Ÿ©2OßÿÊÑOàÃï+æS’kž»~@ž‘P¦Ü'Ð%/厎‡ÕÑCñ¥ËYéxþ¹çg~ÝŽýö´1Ðo©öž¯~­òšßŽ[·nÉÏ‹ù ™÷­[·ÆOïñïŸ_°`¶ƒxrí“O®}rüô8Y=è6v?[º¯ p– z¬Ë UYJɵ‡–êÉ …R#©R`ÆìÅ2›åæÊØVšgÔ=‚[3ÌF°ºc²ÀK¤ íâ—ð†E | «(Ôb)ö¤Œ™ÇŸ£Öצ'±’Ò¶Ù+'—¶+-¬M ƒi”±Í¬®Ô‚Žl§Þ¢ÿÊþc•ñÊÉY¯”ð QA5á= Dd+ÑTAeÓ]k9ô6n‹žˆ°–»ª`}¬Ðß!8BÌ8™õb±#Vv²¬Ep[.»2ûuÆ-¨hì©–$‰“S]'M¤o”í|«±¢B5Œµ’6ã ǘýÒFd呸ˆ6<лì IDAT¤h§‚$(º€O8ssÄ<ÔLeT‰¿öõ.ö`¹¸7èâÙŒdÝ ­öoT¤ ¼rå É÷½ÛëîQ%ñåüñÏ~ö³Ÿýìg„š‡&/žÁª£Ÿ'$Û 7²7f{&ut{ÅÐU ·7Þ¼:ÙöÞÝù®ˆ¸æ] YûÞãß;yâdxû“kŸ ‹z½.èÞsAºåÙÛƒÉko?ðÀ<ð@Øç¾“'˜ÊÔÕ_u®õto²a`¸i&/µPÆŽ©ªY%Ô›N++ã ²‹J*~±¡Lº4Tš|TÞË€õ’5ÍSI5²$œÎÈi£È¸J,Ê0„T™i\%ƒjæM("Ž ™ðн ||ÀþNÐã&é¦E¯É&’&¨gù8ο'•ÓõžÁÎÀCŠQ¥Shƒ\f_É}ßzÇùÁê¦ú¤xT4}û°Ô¨ÅVfÄx£gB ‘‡Sc5StmBõ&IÔ6Ë•üˆ›.ëÕvH¸æ«B¹ª*‰³0{;óäé(ÞoøQbÞ“{³›‰KR3·Ó™Æú±yÓ÷s§ï§vLçu=½yó¦4„¨¿HÕQ*ëuÛïÓo=ÇŸJe(|ÕÅÃn‹¸;ôÏ!¥ô+jîÚ½k•ê{¯{Ò›¡Yuéè2Òå9¨÷AèMÒóéÍ[6÷œ4š €"cÉ0/]ŸÖ–Ö<½ÿéW¾J¿ÒYXxß“{ãVA³¡wÆ89{9ÐâÛb Ú“í¸-*Òo‰¨J,TzIæâ+4‚ÕDò†1Çþf’ÑK¦<VE&ª)hž¿†±5xW­æ9‡– ¹É6)ã5XFçÀncT@f=KʬK¥”HFJ™2³Ì¹ò6¡jËfm¥w×ÁÄ(¦dxCù0èå² ¬%;{Ú…° ˈ3Åœ}Órþ,hžu5]L&¦C"m% ®†ϯ_í3ê ~7k°Œ\È@@8\ƒô8j#2ïš­¤$Hð/Ãï1Y¥‹q` Câ/x/WIIuÄî í.¯7±’¢Tõå.cB-LqS ÔnA¼-È% ›bXF°škÝ ë~[òÅèX ³§M\”"" ›§*·Ú™Ý†ù¦E…u¯5æìªkK¦Š­D™i^F” >鲺\úNz]”¹=KÝ1õò —€*rÉÈíbgìVk² å.”(St›ãüÝkÂyØ¿mû6A5çc÷žÝ»÷ì^\ux…kBh*ÖµÛmíMN­èC;HTΛÎkÝuÉ’%ÚÀáp²ué:*}Ë•a¡PIrÚºmëÖm[i¯ö ¸qãÆ¦Í›Ž=FZVùíÖm[ ˜¥®‹±2‚Réü@¿zøá‡ÏŒŸ¡ÿÝ[थ”òl"’ ¢/ÜÉ+Ü¿v‰œ¤5k°Œˆs…‚ YýMa]qJ¦ó5§5ñ-:¨7ð˜p_£Âl¸År^ÆKRd#˜$=­jȉcq¸äV¼4›ÎèÇ¥ÉuzÇÎav¶ÕÝ;9Ž;þòK/ƒõº=°Sð»[ßTÛ.ö×㤥*Ò5±ÂiìY§˜LÂ(Ø‹BnÈ(Îaš²˜y~³Æê)¯‘¨Rg5åÒ±úLcû² —fÊ%¡ø”&Ę ’6mºá”©Ò@¤Ê¾ÜĶ aŠ®Í2V̤ƒú”qWæû\`ÚaL« )›¶ [€±¼†v »Ÿ'ür OhˆU!ù]¬±[i UÒ$N?Ñä.,Ï{LÈpç%¬¢³jªíwã ÜkmçRMhèx5Z÷MôaØvò:0/sÂúÓÔ>ïÁÈcæfãð·Î#)€Øô)mŽŠs¶pò¹â*GY Hásˆ² ¬îoM]§C·[½çˆŠÀ,®‘– ¥\_YÕF­ÆÎ½ûö’}yX¶½ó‡V½~îÙ ;Ãõ…x˜§…™±…)wxðÁÃ^]Ÿ¨9ÛcÎ…ÖËÚRønýðÅ_ÐiS ¸eB÷.tôÈQáÄú4¤÷¬o|à(‰…¦Né%–,Y²cçŽk¸&Ø900@*„ fRe–æ¯äU+ƒ(3úÜΈšúŸŽy›z ÅA’-¬áMð’ÖÓú&Ù¡ ®ªÅZâbEƒ“5•2縚»O›ÈÖ`²…bú#«¿@/kjÆxÉNùÁdyƒÝ…H"Ôáî) ³%áÖÙQ!eMªW“ÊÒ`ŠI¥<ödȼ՛N:ÀVP’WS%y±^‰¼ôèuÅ AlêâDȃª /ÐCMß….ïX$#aKN@>…a5çjT»Êþ7îX,Ý,6‘ÈöèÌ]³Ž6"ƱY:†­®TÞ© ªä¯—VóÅ;P››d¤ ÐS 1hWÆ:Ñ„‹Laæ—×§¡w{ô2éiãŽýmîΉÖù;\G©3øÒ*‰lØ(MÕ”*\4Mº…¥ãœ1eÎÒ«Ÿ_ƒJå‹-ìܹk'€›¸‰`6ñÚµkz¤’~É’%*Ñ+Š¢ßÒ2x¥šizzúü›çïâ«HFÊÙâÏN [–å¦Í›Ž:& -ŸZ¸ï‘ë/ŒyÃÆ ãgÆ÷ìÝ£o„šîߊý‰'Ÿ  rüØqúc1ØÙÇ¡…µ}î¢|à¬a¨ñœÊ¤dŒñ4hbÆcB¦Zzdô™ `CM¶¢ˆ0!¶ÎI. ÁJ8S(™NëäJc9;‚é¦é̵›&xËœÃÆFŒ»lLcªÉŒa+4m`–íÑ0UŠ~Ä´X³ FgàÁÏÄ{µ0­œq†:(iÈr¡Ð(ÌdÓšåÊ)×Ð÷Q¼ßàm‡Ê΄ðã›6åfÌx,o¶YWŒ™45›6<5W{­Uq¬:’g V¨–iP•‡˜ï1u†ØAuIËæ˜ZYkAgœÓ;Žýl7_ž \d-tªB=Àœ½ ÇÃ'dÔkI:C”º]Ùç¥-Tï3vÛ«^XJõQ‰š‚s• ‘J¨þñ¥ØÐÌ îý!«§ÆTª+//™†‡øQy¨ NOOwË›œíA¨ùäÚ'—-[6«ò¾WQ 3_¼x1õP©’/ŸýVTÖT®8|tŽ6@¯~mÏÞ=m´½*Ø÷‹/¾ ï9êÙ3g7lÜ088øñÇë?ú €%6ΓN',)òñitÊ>;à4èÁÝ¿ššp¯à™(ñd¤Mf$MNîT{px· ïd@u´¸‚Ü¢Ú§üjždÏQ¨$Œ"†ýp·ÉÄyªSuFëš¶jIÏ*\"‹öaLNÉ®‚Mvh ³Ç:†TahQ]IHb. ë9H2Œ,׫¿ñ5l >Æê¦­NHû¯ªY‚Ù,ÑÃU(îØ•T)ÝYèkºÃ‘5ëÀž(8LU ´T) åzεp`íù4#YGÆ3œ\k›Aƾtc¤µ}•öRÊ&ËRÁVW­m»=ÊP’p 67±‰X#ã 5ªMί¨®¿ûÒÀ޺߭Ç9\S»ÄEQTiÈÞc{Þwé±÷@8sÑt>1Ï=Gÿ%uŒîU{; íÚ/Õ`ùsgÏ)¤ç!„ó,„¦§§{“l ²þþ ß×7ιYyPšÊ†öìÝ£= F7oÙ|âÔ ?ñ¸÷(úAn¿‹‡ì{z#hXªµ2Îào›þ¤Û„4œðL¬TuÔP “ì3³‰(­wô<‰X¿²w2‚iª1vT ®c (oú…å¸i³§›–´ån’¨LûA:X0˜1¨LÙ\Â*Ž&@‹F/Èí–îy «¤üËóŽOò XÍ!& Û““x&½@®Ðj|­k›ûZìig.N cM³ ÓéÖ#6š‹v`Ê€ÐR´aUOÁê&Vv”í8gËH@´7˜aâÇÝq£LÌŠÝ"-wÊ‘””¡Â¹Æ:ðRM²&8ðN›ó9ÎŽ°½k¢w/”ßáꦻ8ã+‰ÄY7ÑýT‹6ÎZ÷†Ç:~%Vÿœ=ÔX=‚{fó=ÊÙg[n>fT4ÖR/-,Ìzźn—Cd¥¤) ê.¶x’9ƒw­ô†CÏ• ì]¾|¹Û¥¦§÷?íõg;dBœõnÉYmß±½[–'…¥­ 7 üàø¶mߦñC`wìÜA5s݆ï5 üèT-GdÔ{?bœWqU£&=ăÛ>k­¤…¾óÆs%¨fAd x"#s5 oà16_ɱƒÏá#žœEŒz'>!cp丣ĥà2#å\N¨Äé\´©4›H²XÝ„#3#ƒfGý˜. Sôæä¤ÛG¼Š"PÖà/¯20*c6é0¦ZtÚ6…N³5í0ÄJþjˆä¬XÎÚÁªLbPµ–EOô$’å"3ø‰Z‘3wp?S“giIXØýÇD`ªxI¿É˜œYÝš:‰ÍQ¦.‘n:z0³êUZƒ™Ï²¢PÙA¦0IÍka…ÙšÌe.ù3_’ åwø«"™'…{5$ChñÏ1"Œ!o”¹‘vòŠ’ÏΫ ‹ P £UööƒšzŠcþìâæÛãæÞ8éÜÿý÷ß?)QoW½ß»H+µ,–G=_ú æàÍôü÷Ÿðê+¯Þ-æJ‡'–éÿëmÛ·8~¢ò>á&f)ü&ô†GoܸAmìÓ§N˛ΡÓé<þÄãÛ¶o£Ülªî†ã(÷¬]gâz|¹Mˆ¼SH¤zlü.¾¬fäc«Ý±œg@¹Kù¨³Ã€éQ¬[WJ¿R.¯9M ¬òJj$¸«pI¶öd8° —d´QåœÐtJ:‚Õ—°ŠÆQx.3gÂXò+èÖ`™Îêò øDHÏ&Ù‡O­Ë llj8ÁÒ¡–sò¦îæ€t³XƒwÅÏõŒLsRW5Å • ] 2¥xŠ{ƒ2ÈUP”«¥ –…ÀÆ@Î f¤Ü»]­ž§àMOH¼à~‘ÚF7[ƪ§h½ÚÅÅÞE—D^Ú= ©Ö·³È?s2v Cò17ã:ç ÑLùe¬ªÓ†–¶© 惚'Nƒí©wYf=Þ{¸­ŸCîì­4lŽüÏ_9ôî>?™<ܹYDÿ Èh a6Íœ´ÝC@ýÙçžÝ±sG?öoᬋ\+Ý"=~ìø]©íoÛ¾¾Ï>÷¬Ì¨>t¸[Ù–Æ<:\™.3'„Í6n ûxC/„¤ >qü„7Ý»mû¶={÷h’:«ƒ Z‰zßyû™]S­M+Vô—»«†®ÈŬ)ýä®Á»ïqÇ‘«v2~«f’e¨¥;‘—° ,¸ÁdÓí éðv ^’·°šKYfS¦Ô-^…jU¶0ÔÀÄùF¸9J¥WÒ7mSJ¶-Ϊ,¤­XÃÐ*#&ePª¢ZîÕ6‹;ÈxŒÒtûš¶°¢áxùÆótòÃf~‘š¾¢²Ñ:IǤP*™„Ò»Ú—Vr_ø‰ÕG»–=„(vÄV ¬'÷}u®–ÌB œd¬—ÎMÃÕ –èƒÌw†ÇpC¯×ÌÝœ!¸°±Å`ÛbÌLOTT»¬î”zz„MwK 亯GqêºÈo>îHd¬2øM/¿:œ-É”²çç‡*3ÛÌ…áô+‚šûžÚGKm/}©êt:ÒꇂSÕ”P@·²0+°!À<¯„Ç—1 ÁKýŠýH+}Ò‰tž;{nËÖ-ú9ï¼NF†‚šrÑ„A.X°€NŒn—9ú§ÆQO×ýè£øÅ/~A×D>‘Í[6·o´zè!ÑÇöÈ Ìê¶tï‡W|yÉS+‚ÖÖC©TêBÒ43)‹Pd4.`•›” •0,x™ˆw("ë VÎä,AÊÕ,´&ðgø»)üg•Ð fN0m-¸Û:á…'¬{’5ÑŽ”È%j >‚ÉšI%“ cÈ:Imu3ßsL)ƒôŠLO>¦™}Ó1{£÷kIvƒ¹¬Òïb ŽZík¦6)QÃØ·ñÞ{Š) 1kœ¨Em“ 4£Bùˆb. òà£bQ¥´?5–È9\tÝ6txµÞH%M ´QFuûðR´6TCfw!UåV ÏŸ(®‚+k8¬~›T5Sݪ¯™:˜3Uš»" ¬"/Òס d%ãÁ@ïÌÅJ*¦Ç!ôö=µà“t¾³u5d±zÝï? ô.¢uxbrJúFOk#ÍNJäÖWøÌøÂN/„Ü•yœ<{Ò«Ð× «ßò³®ucr¤ÙÙ°qƒ|(ú}¥ëSÒéèŒþzˆ‰.u ½“‚. ýWBÎõu y³>IRl}ñÅz‚¥’j߸qƒ>ßYgw"Û|ï;޶l\X¤—ÑÊDåÞ«=Ä#S9N† CÖýÞ^]G­¤hrJ äžboÔçѧªÖø4ö¸24Äb×ïÀÈsN'd=qòDX,•ã왳ýLzPéµÏ÷^¹ýúÚ×¾&?ÿæ7¿éñð¯ýëó] ·ª³cœRYbþËŠÃö7ƒ0 ´Ø Ðê æy4¯Ö3Z(PÉu«™T¹„68? ˆÎÂSOU¨GzÑ6{ ‹¶–g˸iœáà.£ÆëN*i7£q.5°Maœ1ÉeaíŸ û§Öa3w¾P)0)(>‚ÕÀÔÆšl-¤öW}c)«1Ö‹°Ã™— ÙD¶;jÅE£Œ·EÇ~ bz›šåJs[×åV"sÄœ ÚN”ÁÒ¿–(ÍØ­Íˆrnj†€‘éPóé›ÓÓD0W¨™©‘boJp,aø$/ f|áBט ‹Ïq ˜ÕHìÉ£BG¡°?] Ÿ•Êá‘z£í-4Úbtÿ3ûÿàþ@þùë_ÿzÎý¶9ív{``€“o¿õöO>!,je£³ªôh­´µ»uë–79þ®=Žp¡ß¸i#YwóµñœÎ=çA£ÞÙœ4lkìœÃéQ©¶7vž=svéÒ¥K—.ÍÎeKÕÑ£`{òÄÉþc5§Õ1¯Û&íÔ{„¢t/ÕZm¡Q(jÎk¨³Põî0Œ)j>M¡ ¬T¡Ä™×í#ݬpÓŽ™.ÏkŽq¼hUÀt¨ƒú(Þo`X l)¢DÙæD…Û3C cHÛʼþ&ÔWâݦ@ã:µHkhcuÓ:òhü3{ vaS@/9S½±œMã ¶RŠ-ÚÙÂø„AVCòì(­j‰Üé”¶´ÖîÆF×ã÷a¯m¤½a†sÖñ™PÊßÛÕk–$¤¼¿™6jXR'E uQ®fZT·JÔ¢±Ž3ïdEO޵¬=%UéaZÚfJ..AucÊ?w¤WLŽ•Ÿ¢jÜVØÍÃ5‘ÏÂÙ·Õ]Q‰¥ Y4ÅΦwyPc'ñNã¦ö‡ÕwëFbfÛ_Ô0æUS…lÛ¾ífíf®a9ýêNÄA½ÕªW¯^­ÜÈ{Ñ $•…Ö‡~˜:vt’¿þõ¯+›v=:‹t¬Kg=‰$–Ð\‚gzË¡”ìÌøšò¤ÿ?n„¾ºÈõêÕ-[·œ:yêõ×^æÙgàŠe¤“JMòµÁÿoŽ…]v»á¨IÎrÓÜ®\‘LS5 5Yë/^<µ¨Í³ózâξ©i-jw¸KGíÒQ¼ß0Vs ÏÂÿ>½+=çŸãBk]0„nM%¶Ô9Ä5 c5€&dÀɰgGaâP žj•U/×í·¦±fî‚"*ŠÄ¿)/23aÉSÖ—g!ÊÙ,»ÀQ«¾fê’­¸i}qc¾ºè™ Åh4ÕÀcÜ‘ÕJÔL®­…X{Â)_ŸÔ=‡\³º[ÛÐýQùn¨ætìî{R7,O—RBdM•ž+Vy8A@?9}Áæ2ÇyôÈQ€ëqlÞ²¹^¯_ÇuSSSÏ$ˆ.xØ)Ô­’œy7LÞ3ÃOÔCÿ QPÏ¥ô?Þ0©G“ò‚¨¾ª½'D»Ÿ [¶nyà^~éånw¦VôöÛŸ>%ñ=wÎtj団7.•uìÊY£°Ã:·!“»Þ¼¯°Ü«¡=ŠØrWºÇÄ­´ IDAT¤f\`ü\œFQ®ö¥Á6¤€ÁÊCØ$¶nW™(#E«v%GªÐvÐÅ Æ•ÄtÎì´L|;ø–À%¬âê+•7­›Ý(Þ—U,pÌÉkšÂp c5Œ ¡E(´- yW1Æð?Æb¥œ¼ô¨ÉV>‰B/¨®ªTq3e(CwØm¨äH¸l(· rÎ Úx¤4ŠcN’MþêLXø15[ª|¦pf6D2“^À*U‚®;ep‡9Å,—MóŽSÒ v@á–ac nÐük$õOÛ_¼d¶5©²""øLø!IpI¹Ô47VßO=ì ¨dŒ‹©z~TM¤Èu(ÜÄÍX¤³Ö°ÐiǦ®J<«lÑÉAe=O>CN+ýøÉÉo%'™ª»zåºÃpÄß½CZn“¨FeÀ… R“:ô-Z´¨ 'y*\ïܵ“6@odoÐÿîÖ» ¼§ó—2õÞ}{C¹¯®uãÔG7»DÒîÞ³{žüªCjÝt=Ǻ}·¯\¹BßùR‹ø(«ŽÞB!È´Z¯8µ /lÛÒ”aÔ$%µ£å—UY˜àT&³^4ív>cà¡v¦2|7Ìo+u&›ŠÏ•TY.æUFÜ[çöí Ø?A—;˜h˜·?¤le@åâ„©C‹…<-åìÓ‚£Þ´C MöXèpÙÙÍì4N~S'€*{q¸a#vˆÖÕv *Ôõ'•SÁ%b)\ƒÝòb§V_¦#ÙͱŽZàæ%µ*\Ç PÔ‰t–‹ö‘ãþêôóeÆ©Tû¨Í΂íNYoJC¡ʸ)e{&>±ëO”Yc•3šžÓºžE©4CpÌÙ¹¯å!qê’`¨Î:ú±ÜóŠ–¯~­Ï~á "û… ›Ú‡"ܼy“¸Žvœ‘Nª¦eòü•2Î{c%ªÏGÞFÈiT6ƒ{Ûwl?>~|žÎœ>DÚI[úô©ÓçßEàé¹åi¶Ýƒ¶j/=4l¦l(Õ?ž•Búx¶–{dx}7úñ'«\€ú žCŠoº W™3Ú;é‰b``€0’RS~øá°^w‡A¤atñâÅŸ~ú)sÿöF•X)¶{€'ØÙO˶ÿw!ýÎÊž:€—_z9|ˆÄªjîÝ·(Ë’¾K–,Á@¯ï[Ÿ*³ù¸“]¯ÚÂkã7íHAjJ|v’$e‹W;“®è˜»$5 cªiS[ãoß6+ò„«»‘ŽšxøQv•xñê·-wTQ·ÜŠ5¸DLAÄ–-¨Rÿ’œzÌ4H íoã½÷ðíêShÉ^‰µ-oV2j²«j”(Q¬ÈØ£¡•TQ¹þt)¬L'5ë Þ@V3Ág‰*qÛ¬G6.¨+;ø$Ø…@Ù&d5Œu¢ºÙ•±Ji=”|âD…cÃöJ¨ENq^}ˆŸ¦ëY‹ÚVñëD”hyšªI”^#®kF/mµ1¡²`µ#GêÂ^êv^Qe¡w3”+d-\EOÄŠé košÅ;ân¤‘¡eH†’•6lÜ0i ]š³¹ëïüñÊ˯ÐÊ^å-á—ÚhB.5-©fb.ã5Ïh–¼æÜŠ«lKŸ>uúɵOžó|ïñ·Î¿€Æ{„ΟD ·ïØ~üäqim8øêAá—ÿ6nÚ800püØqk8?Gû9ÓÖwêö—Å8Õ\—ÈlÑ̔ݼá ]5å*Åš,f¥÷Ù´<µàmÜÖ˜m_uíðꦴ´†1¶+êXlðÕ‰ðnž™­}Ó!(zØÎC^À'0^¦l$äh¦F°z mž±æG°RØÄÝ‚änZ¤-Ö5qQá\ÔE=ï\iCÙÛÂ%è"ÝJÖàÒ{L@u‡•КϜ½ô¢Lâ'áÊt¹Ã­í×YàJŒÐ  †2ü3Vs¤³Þ°¥…L.Éz_E‘ò&.®8;¼Š²•#¡Ê\¸-ôÜ0?OPCTÝ’ ÷*™eLÅAMý—jüàÅسwFM} Þ{åA€¡½ýôÂDx¬W±Y=ù—uÈ{9zäèþgö_õ/å4z_½âKõX³BÍn”èÆ4b`r©EMm«Ûœ^ñYãå©“§Ä™ï©§Ÿêf€@º=®ùoËá}iW¤uÔýg¦—l‰±´4¹J¬ *Ù:òtô b Ç5Ð’„U/ý‰k?Ì>æj‰1†AM ?ÖÕVñE’l9×`ç7/aœ¦›Ò_tê{æt¬\Ö¤LóÎÀmGZ +Eã„›‚«WbÍf:Vç©Õ­©¢Màèl½±Sw®»²RsÑ.£¸Ôà,n6J8õÚ†I=Ј›F±ÂäW›ñ$‡Öð!ʤ?jäŸæý‚UÐ-GYðssî;oâEw%õŒlÈØ< ½¸ fbUZ®g.y ‡+m=ÒÀ«Ù#»…ë:Tœ$¡¤ùb3”å+¤sÚ7²7æ0üÐ'BÐb´dÉ’p6ÔKVéMz;ÎôÕûŸÙ/ŒÓ;NŸ:-C®Ý^]Úr•¯H\“\ª'Ï6›¥ìï}lÚ¼ ‹|`“Ž,%A©‡7nÜ qY¤ëS]ß&v^¯×{téW_nÁÿ®¡os¿ÀÉåÐDç]°€žDLiñ\›Që‚•Ÿ˜î3Ñ›6ê°°;9u:t‰«×넚ûŸÙ¿mû¶7²7êõ:©ùÉãÆã7ý»ÀÜ9jBÅwÌê Ñ{ϽÿcíºµŸ}Bµ˜ËÈ!Ä‹61GýÑDñ2.G7Ç;ºñ왳³r5šÑúŽ r7ºê ÇM'¦ÃX S²†± ¶ ËÕȈ®0§^Ó»ˆTÓ.Êœš„c†`”¨\”Öڢĩٚï’Ó’t3Â7¯-Wû¼JåŽþ§×‰Ôè¨inê¶' c˜zÜ4³áÔìùí‘1`+iå‰ã'¶mß&…ÄB\b™[·mE N‡þYÉÀ„@h&A?_¿~]/[„+äþª{«¢CéÁ8{“¿­Û¶Î¡Ã*x¹vÝÚ°4:·á&Ù¹kçÕ«Wß|ãÍ7ßxS?9o¿õve]sͨK—.=vô˜ªâm7m »7m±kH7çð~ÃêÝ=t)åÞ 2õ„òî”S/†\=Y[c®‘¶Œ'¸ÍDÌÜ%[Û»§€ÜMC2/‚†åL/œWdþš34‹&9Äò©æ^qOGÈ´{ cf*?/Ó‹ì ?Avö¬âÑü›ŠºjU-‰b6ã:Ê‘<âÒ&VšÒhÄ› 5ç Ì2~ªÜm’eLmswg ïQÖªÂÝ=pãP¼îT×ÍÜn¨ª‡.±æh·áÄÁq5*cÅû/u6Ž™͘pÃo(–2J3ÎÇNø" oN«î‰ &,å«×­é7°ƒzi¡äÊp«ñqÕ\ ”ûOâvCÖËA7pOï.DXoÞ²y]º®÷Ô¼÷ì=úyÏLÔžzú©§ž~j×î]¡9€¸ŒVÂ'Î=Gÿ¬œ‘¯<Òú§›ýÄCȤƒB»BÆ)±Ý,dé8vôXîHé+½™¥¾O%êï]jM¸åyô'%žÝÌÃ:íWéø“?ù“J5\%p’Ö1f‹“„èÔ_¦5ý2©¦TÃØ¦¹UÆ‹B U[ËG°Ú¶åK[k[ÃùþX?ŒÉ $¥ 0Α´lÞmg3š¤qZÑÄP爟 Ý™MçíL:çÃ@ï†1åVe31Á‘•´†¶\·LŽD“o\Óó‚‚Ó t~u™¢ŒÙ]ï xï"pÈ‘[çBØ<Š÷ÄD—øÙ„U<ÒÂtLtù±SÖ-ÇùZÔv;WõU ³J.Ô¢¶ÞÙÂ>aj¤Á; lz˜‰ŠÃQWikáö5u5­jU&b6ui(ÂÖ`£ bcõØ8°†Ð Þo_sû¶íŸþy½^§ÊjïrÓºtݺt݆4´„sFÔìá4¨ŽùX³óÑçý_íõ9¼Ê¢E‹ÈIgÑ¢EKøDZúÃB‹3ãgÄËé~uh°ºé9³vVJºèÆÕ^!|êjmHC1m¨¶Ȥfs?esÓ1=v!f:ú,±öù*w›qê…¬4$ʳœ\¨Òh´vŒØ•s˜áP–È D1³ÅOíâ¶ —çËøLõ v&}e%³¥ÅAHÍ!ÉÈ%_ÚRÁ³‹£ÑPŽæ´–{¬ mâ¢j°% ó Šâ}vÀGM r([*fñœ$šò"+–œ)ªîSNxâdû©!…1¨33iæâ}&µ™Cg#áèC¬ý)쬡ùtœöÛ¸m§nŒS B—R#ñT¹1ÂŒSUCFP 9"Œ^×rV¸`¦q.U@,šUå–xY%iÐ΄kaèxÆA›SbÒÛ]r™¸©Ýi96ÇÁCŸÚ÷Ô|öÙgamv¶Ç+/¿BIWÝK#Òpìè±§÷?-]!–•ëڗŠȧ¦·MàÝBz¢§‡§Oîvý»iu¿ùvpPûóñ'§ÚxåAs)ô–)2¥Î”½»†jP†8' J`9+‰ÖöÛÅ áwéX°`A«ÕjµZýgd~à"aÌKs¬+5ŒÕ0䕘6ÌââQi\¥Lν.ka »¿Ú¸1ú­”jup«yÅÏ×x¬\{ƒô Û9‡”µD|Äea1ңбi8£jÝ4¥W9±\@}d2fØ1*#:ÿÄúÌñŠÌ§'ó²…JÊLÜžYlÈŸêÿ±Ú¶¥—ò–±jñ @UÔ µ)1¥øLªJ@Ƭ4³ æ{Bᦓ |¤W…‡˜ M•8¢Ì††–©‹d‰Gá%z,*8±5s‘5wÍËÚŒõæÉ54@—N'E•ëó©gËìUbÝjDÆy"[Q°m·Û^<ðÔÓOy¨ÙmŽ¢Ç±mû¶ÞC‡Öžjw¸µ'¢ðÉ'Ÿ|òÉ'!†’¢h"(ôN~U©õ¨ ¥šÃ">+ Bp¸vÝÚn_îÐãI*+–34¯Iä2´µ#À«„=‚Fr- ûxª1¢˜„‚„â7mìF:’é ,X°k÷®²,=5Ó=È—ž­xín•I¢ÿçõŸÆ6üâògׯüË¿{è“;ÿÒjœ h¤œT¥íÌhš¦ÐúÕØð×ÈDY˜L’AüDy”»›÷\…^yÅF'ÜÊ(€J²´KŠ “õ‹†8]³!§ §Ò-¬Ö†ÝeY|d¥Fʃ޸i½³2W`®ŸÀb'°Ú!d‰Ú»ØaY•ï¡ìøIÄø‰H<ƒruÑÀŸãE·Àï1B œ!+¨Aûш1Béµ]Eà“J¤‰v5rÞr”¹e m蚨«]¸+!ü$ŽcCT¸ÕÔ´ŠÚ¦Už´°O¸üUל‡³¡úEY~C­°°gÏ^°UÐÎ]; *BìæGK›Î ¡‡>èÄñR$Ý M8È4=ÜÓUŠé§TD0éa’—a¢Y^åáz"PN@#M%»Õ£)ôÃÞ}{åž•‹¸ÔNõä{¥XHx½K7[ð~€³ÒtP®9¡&íi:¼{ÏnOs^B>ÝÅ$•7®G€¼«!%Üt``àÈëGèç]»wy;˜J_@z;=ö|RçøôÓO÷æå£y }敯ÞÛüV†é¿ä°sçe‰¿>ð7‹x¸õ?ÿ©øé¥@U[ÆAŒ´ûÔè^eÓÚ4ûëÌY_`—ÑÇ£óoãc¶§Àe½&ƒu(˜4¦9ØRéö±#˜„M¾ãuHü5C…ÕobP¡E1…!˜ññ¿uòÉ~½†¡UX!ô±ÉY¡Ã˜jJÙK=k7nkàÉ•*XÛ@|‚I¼ÊóÂ/ ‰V7±²chx:®¹5´;†¯nZ#Cí±g#<åQ¼«Ð—ðWºIZ7µ×–yHáNmªW,uÕA2®wönèXìñ{2¢àmM„qÊ‹ÊùÐØnæî®|Zµ I=³!¶}€U9U "ªn×»MSoÀTz«e  Š˜»vbÀYMDÎ xæ)M5·mß&ÂKÙ(Oõ%Z÷Í8Ñcù#ÔÜ»oïáC‡:ÜÍsn3£t„Ë}oÞOÛ‘é+Çd+íò iHFK[ BÍO•ÞãíÛ·»… ÍmøÇ;víÞ5ۇЛ[½$dÒgÆÏT~a<Ï£ 彯ßíÛ·Éî¸ò¨G1eÊE×)‡`ñˆ½ò RËe éá– u¹IU/6’D+¢›úØè¦ýO8xÙUýØÁw«ÑIéX—‘Ãý¾œý–¸`ÁBîܬ<<ˆ“fv¬;Eü"Yšw;¥Êv¦dƒ‡ ´@ãÑ#Gï!døäæÍ›Ä‡A½xQig@›ŒÁÁAººxñbÙ:ÈaÌ8=Éœ7ó´mòè&|ï¸råÊ]œ¼€X©“ª O5±b…뇥æO€i•,¼-é`‚ƒ\u¼š›Š,n±Y+E¬«_ÝÞ“îi¡ªÄâ-'³‰«ÐŠHGxÍÂàÅðoP{ã9c}_ ä¨3ËøbuÖŽõ¾Ã™*-&ˆ™Ú$®üG¸fj¹²5©/40L¤•pøh#óB¾,6Å|”n¸ŠìŠÝ2͉Ó*ž—Tq¾Ì$9½HßÓ©£*`.BŽë¾iÉ ÖõXFíŇU6/½Ð1¹sµÞž½{Ð7Є¶$£ÔÞÖguñK9d¯¬mj®¬±™t+Ûwl—{Ò?—<°ä™gŸ!à©×ëÝ4 3ÒÍÉ«d¢••gúàäcòF6_úÑKýÍÞëþ±°òž!ÄÒ-ôE’·VY?}êôÚuk;èÐg¼ý=PS°3ìô>zr…=Î% Ãè%¯“”Ø/”)¹Víêõ:ag7Æ©[¡úyDcgØLÕOÞ8oÞ¼Izc­:ÖÀ)L]Û¬{—È#•ÆI•5ò—Õ£ï=üäÉa3ÎÒ¥c%ß°tJ­nv¡LõtWÉ $Ö^t Û‡>¦Ø¤¶-Í]ÅGÇ{Ê”ÕþŠ¥@"É©$ðÕÿÜ«ãÒ1\¼Ô’%ÉM««`çÔÈ kÅ5 ŸLË}_)»ì‚)Ÿ*­ûÒ¤,í•ÅŠ†1,Ì]IKµ o®_9Ħn 6L‰H¥çš¤a:9Gƒ±~*³µRô+ìâEtyH_ùy¥=l´ 3U\EUœµ÷l©û ÅDE¼ Ÿ6|†¬ ïtv“e¹ÎÎmÛ¶WBÅÙ;wíôV(ÓÂdÁ ¡¦¬Ý¢ûŸÙßcsÝ?pö£»ñ–¼Yç‘×ìÚ½kFàìF ,åúù™gŸùæ7¿ `Ù²eÄ8?üðCÍNºçéS§÷=µ¯Oà„«‡ª¼ò)Ú *ÂÚCÎ,X°àÕW^5_šõ©÷ÆüÎðè!äÍ´}Çv œ(†-ORØö:>þøã°XùX‚ãGŽJòh·C{Eõ¸nèCiÕ8+¿xòðsçΆÀ P 5Œ51ÈÿŒe *Q<£RøMAFM1nåa‰Œ§BåG*uªHx ,’… ’p CM‘ÊÖGî71¸ïªgËT­Ub 5íñ°…QÊJÍsŸà¦Wªb¥§õ ޱ>¨4ÔXÃûààÆ”*l¦âÈUb'(­†±c[¥„§ S·©ÂI8îû¢÷A#âÑF2TòxØ‹Næ” ñ¢§Š;˜ ý0Qå‘6Ê%jf<Ìÿ >Ô©îöóR3©™“™ÂåˆÝy’Tmæ$z6鞚顎}Eð´–î»Eò¢Š}¢ç+úG?^íjÊÏÛ¶o£iÎùö#¥ÙDoèSÆH wϤ†D›G^?²¨ê¨œQévx¨YyŸþà‡3¢&x„¦wéxV‡Þ»ÈkmÞ²¹GqøéýO?½ÿiTd|÷{ßõn¡A¦ãÇŽ¿uþ­Å‹ Üj&ò‚ظi# ¥ÐåZPu„¨t;Í•Ê=ÞéÑÙ{æ™ÜçgÌú šXÝ °ùû„ê!Aa›a$$f¼2’\FÐÈ¿+Ÿ!§›˜»6ÜCi/QÃÐ\ŠQ¼¯›OáÔkcª‘ñ:… ø„õ,-·1‹Y®´mÎh”y¡QŠz¦ìPðHÔ2íI+Õ´Ë•)ObzÉîó+\òê±–bÓ|eHCŸH¦üÙ%5w÷æÃrëÀ9&]JŽÆFn$št7.¬‘±3$…91ÇW!­¡m„?äªé˜*ÈÑ' ~@±×vëØ™—oÊ_§Ì5ŠÒxÄ´Y©Em׬®C^ì—Ö}ŸÛØýAÏtæÊ_"ë2£RTü¡òáͶ‡G¨ýѨ)·Ü‰Dèž„šdÈ×ÿ£È<úéÑ Í;5ç Ô×C¢ÿÔŸ#øüRÃׂCèf7ì”{†×t}šËæÕ*<ô¾§OËõì\¶eë–¦B3þQÌö˜1‡ü¾ž¿-*MLÄCÎø¾–¼Í·£,…çPŠ¢×}ª IDATŒ’2FRwÙJÌ™6%®G«q±¹€ï°+\ö–(¤7áaÓNdtÂ^b;Þ ã¨©~­ãØ Æ1¿hw'«*5 ®m¯öà•boÑ¥ðÈ®rRžG¶MPÆSØÖVˆ,ÿIUœ™á匩àQ"MmC«ñ$óˆÜ| v$ƒ? 2UØ“òÙÚù%r‘˜ÍÂ)S¨©¯L®fœýçÂÄÝÛeÊüVË}µ3Q8Äf#Xˆö4ÚüÏŒñ‚3½ÐÐT™Á‹V¶o‹ ·:‹£Ýnë½ÿæ-›O?qûöíûî»ï왳›6oº~ýú->$ƒÊV'ŽŸ(ËRÖ/=À.Îs÷$„Üê¾zPèÝòåË—/_þ||ãßøÆ7¾!H©¡‚0ïð¡Ã˜Sòšwh' q¸•²ªk{¸4xwÐ7 É®œÐè‡U‡„Œªµº [é ´k÷.ļ“c©:úÇþ>Ÿ¼Oÿ?!ýò["Çî}ïëR€Êa£ÁRg]JåÐÍx*µÉ8x5L-TØúgf·Þf…5ƒ˜EbI›È/ðÂUÇll›Ë=G0ÉŸ1å‚›JˆSB’Úˆ2r¥Ñ*b.ü^döã¼tË'±€3Ò†vòÆm^2ÔV³9;ò ` Q™zFè”uF‰{Ÿl8 U±´ïz ÃŽg“Œ]:Ÿ{æÌµs’²gÂÙÝu%Š9±ÜØ×0Æáh°—®Ÿ¶ggŸªzlø°Çªá¨¸1zÝØúú.QU=-SQ#U©¢©z㱫âI»¨d=£¢4HEÀ¢ïµÑéz„ÖqÝ ÁÇOS{¬Û‚[éáþÎÛïôðv¯´J—§/¾øB¬ÈÁõfÕá9Áž:yŠ~¸O[¶néGÿY™Bó‹á£È^>úè£Ï>ûljjêòåË—/_~þûÏ?ÿýçÃç!ѦvÛ ;§Õ1[ì™q®±3Ò)¶|?~çÇ^órËÖ-éú4]ŸzõpzÎ#¯ÑòJ?ý{¿mò°ó+]ª•h@ét:-™H¼å2¶MO—ëå#WIL‰ …•¥ØD•XÉß.•RÛ(Þ¯aH6ï ÌtC+'Ãw~`bà°4ÉêQ9š2i©; •SJ˜¶z%8i‘‘=^ m½ÙÝF†pÝÌN…ËRÇÎúϱ<‡Z˜æF“å™±\9W<,S6ë;Á©g-G(ue]îípmñ™f•±ùÈœñ›ÌÀêt}8IfHݹ0V ¶°×íÕXŶ¤ÜÎÌŸö+cuXRÕ),Ô×»à’\{X?íDõà¼÷Òi@F½_e &áN[! ¤˜UFJX†•u¼wF# 2µ¿ë¹³çÞyûù^qÆO{ªWâa¦fE´K 6óðÃ?üðÃßúÖ·}ôÑG}ô›ßüæ7¿ù͇~˜ÌZ Èi¡?ÿæùí;¶{Õ¼v»MKð•+W®\¹òé§Ÿ~øá‡~ø!¹’ö¼Jÿ<êA†¼³Ÿã‘Gyä‘GúGÍÑEH'6ûªðÎÝòUı¯Ÿ®v·R¶%­ÜôHVùêþ§L+os؆©MäìÄç‘ð³1½çáN§Ò“¤U—e¬êŠqhÚîfÄ—¬]Ý.vB4ÔQ¸é›<ù. KÄ(щZÊZ/³–HF1%j^éü)Á*·¸¬ûOÊÉ Æ ã;Äj5,jÑPÓâe¢î F +%†ß©­ú™Ø«"ãT þ*Ð;WeÆ£™Ž¶ÚÓ<S[”gR ÒJm}§5À:V3n @³hÙiô:ð£Tfl”ŸóqåêÚ&^Ü4}7¸—:þhñNÜß_Ppܬ r{†*TÕQÞÎ.FºVòú9üÚáÏüü‡?úaçáXäIKÿºtÝòF%nUš¡b}ïñïéœ'ÈkDÇß¡hý†õ3>ÉïýÞïøÖ·¾uÿý÷ã¿ñî}·ònÆ+g _¨ð0I_êð ˜zúÓk×­]»níÙ7ΆÁ&Äø‰´8~âðk‡Áã:¿úÕ¯p7¨[I¨™®OõïgdSß¡4ÒíO<ù–V_´þ­yîä¨ä¾•B$‰Ö©|sø«>]‹ÃRm®:j‰ÝtS‘°Ô›ýÄÕ7B­ò9ÊX •zS¥,öÉ-e\Ã1³L*ÀÎ(½K)â1Ìö†´S¹}VVC­µ˜…¯©…óø`“ԀƷ]É>Å 7I4QQ‘paZwVv¤jÑÐV¨*œu©%2]sü’bí6À½À‚ˆ¾ -I‰€rÃZF°ÚºkeP#‚*¯}Û­ÇZ¹2¬b®øwƽm*?š/r阫ÇDú §LQR'87E{SÔõêÕ¶³ë|d~Arl\V‡:dfÛ±+£õÚŠ¹KR3—ÓWf–¥nwSÚ±EÐOõ°6ôÎíÚàú(€oüá7ÄqÇñÐÐwŸÊŒI’«=ÞòMPp f·ûœ8~bÿ3û÷îqì^~éåí;¶·Ûív»]™$ÚæCÿö·ß!Z&­èõÖv~ñÅ¥:¨™]–¥Hr²s™´³Ï(S×. A”Õ¢6H½zc^ÃG‰tXŠÄï¤ÁC õƒÛÙµP䙨*tïYOÅöJI%ó>”40ñ‰Ý²pVu·ðÐcÇqy]¦„Êp!¹+|>ûܳŸ¯¼üʲeËžîùwÿë»{÷ìýÉûÉŸþéŸRSßÿì Ò³„l/lajŠùÎÛï‚örÙÞõ¦Í›6mÞ4~z|```ÓæMÇŽ»qãÆÉ'×oXãÆ AMoF…Ÿºx+’¥UÿË*® 8ñ@Ý#OÓÓÓÙ¹,Õ˜ñ˜qÖì9ÄNÒ.j.^¼ø¿³wÏ^’5½üÒËtiz¯Ý'ŽŸX¿a}¸É ÖÛ¢¨&LV·™”–sß}÷ Ö ÄjÑÙÂ… ½.©>I êòÞ²&â|t>Ýü•fü\zìfÂç^{7Kµ(1M6Q×ÉPl¼bÃu\‰r«1ı å#ãdEåÖl%²ž¨5 utÙ6ò´ø:^ƒÇðK 2ÕH¥#×–Ç”#Abj›+ma¯¹Ïë ¼M©úšªrV´v øÑÈ «–L&"(o£,\L\zJ?S%ÜéûŠ­Ìdö©ÊÔ¸ EJ™ØTU/MŒLTÒâørñ%RZ-+Òé%²‘ˆÜ î/‰Øu”Í 5Xq Œ5Œ)`3ÿOæ«TmZì„}û¥r¤³®÷PÕ6Å #¨ÌÂ¥P ÓôÌ5¼Í8­eiœ©'Ó+´xÊ-ååü®És uœŠùÉî„QÍ– D±KË$üRW =ã:ùÇ$6ÒžP°§a2v¿-Ž[/‚pŸÓàkWTbj²®[\ÚsS8)5ª¥Þø“ ¨qÇÎÂV""‚€¸>p«»öݲɺ”óðëË¿~däâCT§]¼x±üå?øàƒ•tJ×l{ó¼°èWé¨~òÄÉ;wy¥slïsÈ\»ní²eËÈÂ^'tÖëu:|ûÿö{ÿ÷{XŠÿ0úˆ´õ8¬×A“ñ•¾€7nܘ›_ÑÍÁÁÁ븾|ùrºqçcšsìø±Ûw¼xàE°O,M:§í^yöÜÙs?ñ¸|è²mÒë¾ýÑÔ=£žú )ÒYÁ§äœhþ}otI½Kµ©ÒI*0³±Yî¢cÛ~C -¬]õH4é–@ׄ]VÀbÓCXÑÀà$a¨#X=…v'j±´*DSs‹ØõyÉu³Ìà‹±­¸ÄMY¨s)Ki;µâ|Ä“-ôÜË‚V/™}ÂÐÞ^¢„{œ©JõB€RÔû¤3O«ê‡:ÍM}šPž±ž”¬Š2µ9€öå1y–2 Yjë6h˜ÖÐîD`U^ö¹ÛÎæW¨FæVt¡>¬¼Ò VU¡•>9 › ±ûXöñ~•Uagø–ÃOÇ›Hɺ§xÎ|L_›0øûƒ~ô¡×›‘íõÓ̸ªÜ°ëj¡§Zš5½èÝ–óØÀÚ'מ9{¦@±qÃÆ·Þ~ëW_¸vía¶çÒ®×ËNñ„Ñ{üÚ×¾@¨¡Dß¹×Òþ§÷¢è—ø¥¤RKU¹Gš·Ë!Õ˜Ñgqr>¢Ü¼ïÐÖÃVÍ(VuÙv¶>Ms<•WŸq±°êF¯ö¥œÉL\"9Œ¿ß€T\c0ÅAKcÄáYМµ¦Pa¶iD:† èYkf8ª ˜wÌúÞ²ƒ.ßMßpžç÷ ¡åFO#U\SªvÓÜBLÝ©Ü%R–Fñ~Ã<ž˜*†[J§mô-vÆl3›WM;h¡M¡üRe/g`²i·^;9QÝÊB%PB ðÄxݱ¬-wxUv¯áÔ£”s‹.ÆuaOÑûì’€á9„¾{]4ë2—â}”‚v Ó2žÇB˜Ô­ZK?ø=Λ7oŸ ÕüÓO?¥Uòüü|ýß~ý+ï{ UiÃÆ ¨ù ¼ééé~4«s;t|Gÿ¨9~ÚJéÝ%föÂ>ÂG/xñÕƒ¯^Æå>9®_U£™ î=r´rŒ’–Ñ/سw°gïž×Ž¿Fƒ³Þ©öÎu¡çét:^8°ï©}×®]k£-¨000 eäÞ~|TZï}²Î«‰½GswáÐsè\V¦µÈ§C_!¯G@㤳Î,øÛv3. mȪgã–d—$ 2‹—MŠn–<êDUe/`Ö;ÎÞ‘Z¥CÅ0¦h°Á8µ!P‘¥A|7kLϧQ¨n/ÜqÍóŒ`ºéë>$…#í¨ò 1™b¨jÞÀÀc¶djé2,ÿö"Ã"ÊXN”/Ü݃:aÛQΤH.((+2]+ño2P#J¸;Š©†æ¬¶ÞŽªreÂUåÔ£ÈMŸÌY”Zƒw/à;êûæ¹óÄ ±b÷«Wùd.Â…œXWP³0óKõVCŒ7µhu=ó*΃mM%Ìã=/ô­štR'ïþèôúoÿ4¼§(SÂl%Ý ›d•KLåšEuZ¹g,èkö>};zÌX=,Á‹^|áÀ ¨Ïq Ô”c箢ꤥŸ<.\øÔ¾§¼x`Ú˜RUÛMèç‘æ±ð~!©^80ã¹ÉÞ²uËñ“Ç+ç/>7oÙŒ…Î¥¾ÿþû ´èbÒ ã<@ØpýúõyB5ïøÚ×¾F—Qº³÷ÒxènN§G¸›Wmîúñì`äM¤4“ÀSw°‚R^¾©ÊF²r޵rB=¹»Ê_T¥ÝDé3eIŠ)“µVOÝÆg½Y®äJæ•[yöѳϪB¯Š!¿ñ–«0¥.·ØÇ ÎïÚ[Ü 3cZÆLéÈ¿Wr²ÄÆ\=è©V[ƒ•KM؉ɭê”u”Á4;ï˜½Ž¸!òØ «˜çoà1š‰&ùCÏU3Ïëüy4ËdŒ°I!ªÒB2FM=Y ´É«‚Dt˰Ð[×Q6U~¶º¬ý°ìç¡©nÅRQ…kLòE€íõACç[õ‡j£`zu:þóŸÿüç?¿téÒßÿýßÿ«¯ÿ«‰ÿ21ñ_&Èøæúõë$éܳw-ñçΞóhJ¥kÏ= ›![¢3ñܺ{Lѽvøµ›7o~úé§BÚí¶çx‚qqmoKÒžÞ…¯~¢fBf|õêÕ£GŽ úRQ— óÄñ^8pýúuJ";tðP?c‹tn§NžÒ'¹~Ãzù_ŸJév;Äï°[Q·÷!“'4¾²pá¡¡!±yºÝ帻_¿{ßàìœeªF¥—)$ÌÙ£ƒV cÖyÕp1¶s¹‚µâ5n²$e®ãL¢f Í2ªŒO¡$3ª… ¨èGwóe²>òc·¼füßÍ«ZëÆT]Þ~Hµ5DfFòí„e¦/¯¹8‘Á¿f¹Èebdï›"m$Šš™vÎ*Ê I‚eÍo“LJX³\© z´°Imë`‚;¸©×ÌS]¯¦í¨jh3gjú(u'Ñ…°ê¡Iç4Ü:O%ëhq¹@ÎMŠ£²•ð¸ÌÒRUNþòú—Y€¦áÏ™À’jõÍ~ý-º”|*¸d ÷ÏÿüÏÿñÿø¯|õ—¿üå/ùË>úè£>ºq㆞T£VƒVÿ£ w÷ éfoSÀ9”‚{„Ê4éO~o2äwôÈÑ»vîܵóG?üÑ~ø£Ý»vxjßSÇOÔ¤íˆxº†Öqk×­%‘p,O:ö=µàóô©Ó3º–Ï*¦ÛAFÁäGøÕ!sÝRÉȱÝnÓϽA½·3Ÿðwý-„ã(Μw+c1?ãÿ:#€ÜkL#˜n–+EˆÁx(j&ŽØJî(R 4múV/ºz¦ÂI"]JÍÔ$FZC{•‘ Iª¦‰ØÙ˜…µÔ£úyGôJ¨“,Üú-=dL½‘Ô³PPS•ph"R”hÀ›f1ÅILu¬Ô(•aY=YKt¶) -3M61è[ç—@”T…~g\ß^ÍŽöƒPúUÝÀó2ï‚ Yà㓪RÁ„Û‚Í‘jXY-Üþªîæ¹ w Òž?gÝ9(£ÇŠ¡”¬{Q·ëñܳÏÑXgx|ñÅżpáB§ñ³Êîîô¸‡ "s¥šž¬5šžnÚ¼©2¹O¢¹~Ãz­kñ•D0!—ò‰kþyxœÛ]G©<Ã,p ¬…/·®Û_ìG}tþÍó;vîøxÑÇý/ÂíBÇùg¨ÜÑX;~zœFæ{2SH =³¬ûÞÆë¶­X`o¤F)i…*+«FASEÎŒŸ¡‘MšÚ #*gŒAT#$~éå—hç±}ßöƒ‡¶Z­¯0ùÙ3ge¥òùåþ¥¼Y Õo¹ÿQ ]妎9zàź*Kl[L\»•ˆe;BïâÎCÙ~÷Ž…•·J§hÚ§â EâŸÙ°%"Y9cl>ÀöClTÆ(ÓRDÝn,,ε‚‚ž#©¡ÝáõÚóœ±â‚©£30«É9_{‚Q¼ß(WšaÇ(uŒ‡À~@2Èá0¹Ø>¹RÙÙC@5#˜Ë¢Ì—È MÃÉ/S¦‘}ÑšuÕŸ°Ó‡¥¾¡p´0—¦˜;nJvâãÌÀȃró(rŠpUµÚ@G—å½ÒhR~û³ÅÅ/‚ WOd”uéâg.¨ÇAW²ËÖ‡k°®'ÜËU1,T™eÖGïæAà·{Ïî×Ͼ. J^ô_kèà *ÔpÓæMÓ·§uåsÆ—£ç÷àSP“ Œ´¶hÇÎÇÞ8Öm:åÈëG;·lÝòÚÉ×è"šäçNtóø±ã•0)MÁ%T ÕN¯Ý¸¦ùI—-Z´ÿ™ýO½üÔÞ}{+‡b5jz¤Ó;„Ñö8ˆq|õ n6+{ ï AÐ=8•?ûì³_±ò›#¯ ñÃ*¢ÜË£›Ñôïÿü¯þÓØ†_\þìú•ùw}²sçNU¢,\ÿ3›˜È–Ú™SUtžp¨OTÉÌ‚FÊaÀ¥&I°ÍWFB˜XƒeïáÛìþ3጖FE°–%Ú±HáDážwJ°uà°RUo*#q—cø”Ýsûƒ~*¨Úo¦gFoâŠÚ#ÓMzw6ÇÍ>•‡4•~r²Åáy›êiÑ%µ#À0»©„TBN‘ªs•ÔäL tU⯒í"ÐEPŒMÿ„,àšqÆéU_g41ÈúCʬ,-㤱…­[·Uò6iu+OÉAø¤Yã믽.Ø©)¦FMÍA+¥¶•Æ+ÞùvVz |­$/M€¼ô£—5¼~D¸Ú©“§Ä‹\/Çá‚ë] BMú¯Ç±¤H: òÉ{ååWh¼=}øÎŒŸ©ô¤®§¼–FšnËô¡ƒ‡žÿþótVG^?§@Hå$ ”s:í ä¯^½:#ãô>eÂÂã¼!òõ8·þ.¢Ü9çŒ_ËÞ_`}yy@Yâ¯üÍânýÏ*~z龞äÄHtÜ„x‰¸FœÒÆØ -Iµ¨YÔ4±Ò¢F1"—”%9tíÛžs›ÓŽiL^À*ÊQ:þ\e>Ãí®iU0·è¬mnJÄ E%•„¥J ÿW*„9Tô¦ÀÛH4YU¦c«„RA] ¶Ó‹u¼ k^bv±핬ì)8hCZo†RÃFẜS+®e!ÙêqRWÛ¢ç_ÝiÅÈiÑ‘VˆÏÊ!¡7Îåní>¨Æ yüÿÚ{»;ª,]pE:Ç'3mlÀ¸€&Z@KB­©V«§Ÿ(•æ>ô„æ¾Ì­é—Éu« (üoSü™ l .ü½ù«ÂRÏKß~¸O1%J}¥inuKƒ²¤âÒDC7`cãŸtæI;óÌʽbí½ÖŽsò×6µ—JŸ<'Nœˆ“ûÛß·ÖúVÎ*QpöñÛ"Üë•åšßzÁ†äxæ…y€’‚ö™‡Ÿìqî`ÌÉmÀ OkÝõÄ.BM.çj>ùÔ“£££CZ¨Ç'Ómzþß÷ØÑcrNòöÛ½ÂÎA÷îÙ‹ÿ¡Ç½§[ªÝ=;å›'_^¾|™ªg·nÛºï•}?yò'?ßÿsü¯áÈr¢ˆä»ýǹsç¨òèÔÉSÜ<}ff¦yæ%Þ ä¸là ‡‡‡ùq®Ø¸téÒÑ#G÷½²oß+ûn"ÉôøÇå Ÿë"ÕÛŽ 4î‘Èe Öwœ½<Õ†ÔËA§ª†ŸÙT“ÏÔ¦?«Æ:ÒD&+ƒÈx†iÅàù”Ús°â[ÂЧ¦\cðàx]—DlÎ '¯Ìî»J(Ák6lé™ÑÛ¼`BöCEmÀˆf 6VÖH.îºi שXK —RÕÖF#zóÚÙ€sñÄQ˜-¿Œü8¶ò‹™)ÚWyÌ•ÌüÒš^×·Æ1üó <¢ìɹÖêÈ?Ï<Ü[™»Æ³ ø°+Ùu?¬Âåûæ}h°R×-COE»ÅúãGÆÉ³†\¶}|Óã°x Q(?Ÿ* IDATêQ ü?ÇN„L’jçdÏ&;P9j"é$B†-°ÕLÍ!@à þ*PšGð†uóAOàó±a6³ýk¼ï½ûý¼ï•}Ï¿ðŒ[R”;¾ +ÑHÎοr¡1Q7 ¹Ž²:§Ì5ÅXjÔ)@·§ų/+V¬˜kcû×ìzbµöKìTa{®–î¤ ¾üÒË ðI)X‚±z0²T¤Ë’CCC—.]zû­·ùêéééÑÑÑ'~ò—UÉ®ÏÅ÷ä›'wìÜÑð’’Ú³µ´!ÐÕ¡àüá~¶'²ÓéLŒNb922²D¶ `Ü*‹û‰ÎÊŽ„[~dÎËûœSÝ3„T‹ýN¿?ÍåH[õ8­Ó¶ÃÒ¸C˜3¯—®m¢Mcð [S숮Ä3ˆOò 5»tLšº…ÊaÞö«O¢»ÛzhÜñg ›[l™RÊj:JÆ53;Ú¸i°¼Î·%Þbg˜i_îºÕg $‚âLi× 7€ü;ð§r‘µhjØ%͘L ‚ÙØ“I@ H­~{&y¶ßß“7•Ê7Ú²áÔ^(n&ºöhȇö-óÖ#ù#ˆs‚4¾¬Sšshh¨ê²í"«‰ïõŸ¿ŽU²äÇ„7ýÓ͹¢&íxHâ¾pႇšpCNÖ¤‹Ì™±º³!w{¼e###SSS7î†LÞs>aþ8ÃúÖyþÌÃ9Þ}€µ-âà­Òâ€M5ᇛÚä3¶ ½Ê-ÌAïu¦æ%«.‹jYb›F’ÔÂyùøøƒîwÇ’Ç™CM-‰Ö±Õäð¡Ã¼çÄ{Ω“§Ô¨GòGÞ2o!vöùî«W¯öôŽ;¦§§‰«5ôVba­%633#ûD©ž–Ãê¦Í›Ž¿yœ¿ ÞD¼ÂÔïèùQ{ãçÅ‹¯^½Ê;#‘k¡Z+!4}CHŸ¼.ƒ9¨¾r Ñ¤üAµXIEw|fƒ nˆq€¼êǧ 8ÂLÚ´”¸]z¦v'O*̳¨“y(˧t¡ \Ä,lZ™›¦M(›XЧpôÌn IùA÷»€’ûd…M ñ»ãk8ÏÜ¥áê´Ó}Xw”v»ÐeWÒ1XÈ¡’ù”1Çê–dî€JbÛXÏRÎð ÚzCw?  ²uÛVD²}¯ìÛ²y ¼óî;ô´ááaoh3m2®A ^5 ¾„9 °[·m]¹r%Mq‘°1'V½èAˆîQí¹†Ü3-nˆgÝh‹`»Àz ÑUœrNà”3t™ïZ7‡¤2—=#465švô5¿ü~Ç“á«l Rnë’ê® Û:™²ŽˆúµTÌ€¦2t…Ä0_op¹¯ ”GÚþNL¦êí9CôÜÅ¡Ó;¬ßÂõdèb&¸.»õ—òÄzÐwý¾ «º¹ŸÑ¤‘) K&’’ùQCj]€:ºS3Á%jÆ~UÚ¬X¦F¦1xÐjI;€nÊæ–ÈŸ”•b•®3{®er7çjÜþÎÒųÌšMº)[ð‹È|¡5ÀZïåFûR÷„½Ò&ýóÀë5·lÝÒÐÙyìè1BÍcGÍ_¤õ$ß¹Ä~øú™c¼gW»eë–S'OmÙºÅkôl˜—ÂQ“Lm6]ÉB=‚6"š;åH2ÄK„LF-NƒS<Ô|ô±GéþôOÿô¿üÅ?þ·üÇÿöýè¡¿ø‹¿øã?þcõ€£nÌ{õçä’Ow‘Õ^ü^Hgv>&Ek6øljŒ‰‰‰%:†Zø#kÖ¬Y³fWÐðò9Iµõ ´`c‡<êèó&4˜ð #%£A™%=™u'ÏXòÏxƒ#:Õž5|ééæ˜ïÁ­ÿPpŸa‹oÉÓ~ãuF°¨Ì亩µÂá@ÎȪ„dCn žºÜÎĈ‹–ºÜ×ó]3̃Óz§q)ÜüÒ•8S7A´Ì,fÈÔ[°¾“x2²ý¡ ºÈlLAf¹cðàx͹«Û7^Ÿ-} ?ÁúO2oÂ>2ÔF‰•ý¡×!*½×©)EÎãôÅUWüH]´£ãdlZ Ø™äRÎ5‚Sæþ—GQ¡9·æ¯•ÙVдYU1®ƒ<©©<‡ð졇ẩø®ƒ?ò0´­T 3sEM°Õ–~°óïýâáG¦”´ ásíuQÅRX9¹ozzzÍš5û^Ù÷òž—¯®½ Oüä dŸðƱ7$jz'püÄqžƒÄ5zxxøÅŸ½·Àµk×<8uò”j6ôßûßû?yÄNN 9¬6h°¸9èi ¸´¹–©Ì(¸LQêÿÐh#à¹4ÛÝõׯég(Aü”žøp .‚¦b êGãΨÕ½›ì}eï¹sçäÒpåÊ´}wþ°“õ:,'!3UY®¢.Ä6ê €CIlÚX éå¼Tdpp$_zI³ƒ }FÉTHœôDZÕ÷®!ÅÓ`”û|yÏË3˜_$ìäÀ‰gî½;f É» Î^;zn<%¢³/½üÒŸýÙŸÀŸÿùŸÀ}÷Þ÷?>þ¿ýíoÿùŸÿ¸ËüÈȾ5[µÛí[n¹…¶Vè²{áÂ*‡‡‡ l8å#~8äx…<Þ3ù7G­¼åß"‰|êÝ¡gòyaòÌù;òî‘~î²ê7ÿ9rú°ÜËþßɇµ`½m¹«V+™¬ ipmÕª…¸íÀÁÍ«Òröà¶¡¶º­òsÀwñÄÐRjr‘PA"3.ÍÈxÈ6Áʶ)2•Y¹ÖN[°¾' ¢ÇæL &É$äe”Çá×Uamb«p=»×Ä8«v7§ÞS+t[‰'wVÒ±axb’Íø´s@;Ý6CÍR¤âØ}w´Q”’®å¦Lª-Yïo!\ëj>Çv2nA1תyKí e9q§[סɃOo ¦a”¹FsMðÎÁ„[«8{öìeôø;o¿Ó°p<üÈÈš?òðc?~ìä›'ñ¿9í¯IÄó8(Ï›’G< Ò`>ÑÏodd¤ëF§Ó!eo•A-fffÞ<ñfþhNºbH,mZO‘)¢?-¼ô³—ðôöóþPþñã?–oºió¦'ŸzòøÇ÷¿¶xxóÓïýâ½uëÖáÏ4°óùŸ>ÿ½ÿô½ïý§ïÝwï}ˆšÍ)À9é± S-{AŒžn‹üF7lV¾1¡1N*FM<Êk¥HUsó1xpF™XÚv\P¯ ¡dÜ.kÁú{áãñî®í;0zW:VìJj˜¨8ZWù. —smb”[cßý;ð«àwŠssyçdJ—X{–ëv%‚Xwï¤~m38v€<­8­·¹‘å-™«g‚Fż)Ÿ âY´{0#ß1wmñ!Ly¶Ø#|^5¬|ŽHE+Iª'»šq,ăM7 NŸošmq‰ò*SÕ0öûÿùûïÿò}`s³Cï¾bÅ „Luº]vT,ñÿH›}|fsÉ(v:þþ÷¿ÿÿËøûÿò÷ÓÓÓßúÖ·àóÏ?kÝpôäÑyÁæØIÞIœ¢ñe…?sÜ]ºtI-äQ'böOç<…A&Mø'ƒ%W=OCÎ1øp¼jÕ?m…Áj=í›ÉÜÍ!©ÓŸLæ*­­96Np­¯¨ŠUÎ︂Û%µ’CsrPm›DÕÒé"¢‹„Ö"ÕÔ¤dæà…e„^k ° nÁª:5(­ pdNŽ{èðô¡7 «ð3¦’ë«”Ûn¬è@ÛE/ò²56Ï:—2kŽJä]èXY©ßwŸÓ9J®=ëYÒ”K|ÆêÃÅÿÓ +íTì$ôÚ¹kçGӡТ(D%%$jNOO#jîzbWÈ®‡N“ÖúÌÓÏÀÇ Ÿ|òÉ'Ÿ|rùòåÉÉÉçú<%³OÚ81yi«óS†…Ævã´]={+#ëµl¬ônΊe¶ëŸŠzJÏ0Á&ÕL¥V©ðÈê9ÛcŸ¨‹·»ÍF–Ê⯃ÓCýRä)Âìë1Ÿ§™wr4õ0˜Í)X qW%y-ÅXºÐÌQÉ­Š~öˆ Äú¨)è&âeóI<,yÕRŒ·âó³ÚõÄ.Ò—æõëׯ_¿lYÊÅ‹?ùä“•+Wâb¤SM4šS†„Yü­ºÒQñÑÇm·Û8Ë Õ€ }¢¦ÚJßO¨tê½wß›T#–155EϩʻVTL„[žý ënEH˜Åþ–e€½Õ«WcíXÿ 'óf¨‹Ì8]³Ö3D¿Z°žídzªì‰f‚!›‘Y¯ž–^tÑà»íø±¦wWîVÓtS>’ÁR9èRä:°ß »ƒÇMc“IXÑ,¯Er†“0TåÁ¾ýØÖj»ä;ì¤dÈÁ‹Y$•ñê]9(zYÒÔ….6™ÙÒâ¬ï(J#¸$Ï0ÚW¸¬Èí¨¯R*ˆW*ö ÞËB; pkjøÖÔ%¯ ‘ZÙãs®k¿¯©@À¥O•^saȳ³ü‚¤®›z"¼vþJ4OÄD<ÃÁ>9%ò(£ŠdÜÊ¥¾——«óÈ9Íïôèæ«û^•E³XïÊÿÉ?Žêj;==ÍÍAUª:×^Ò…Ç{ï¾×³•v±ió&ºƒó Ï¥¿<êÅỺfË=٣¿øBf»Ý–†MKGO8S»ñ?SË ©¯™»î°"[§€¢`†/„1¥Ži3y +Nqò”É*±1ÔAˆÑ•”5ã2©;²ƒ*­‘.gþYé8)Õ=öí¸k’ß N.П£Y8cjj‚ë: Ö¶±™(3áÔÿÒg IDAT³lÁzKñ©sÔ+±Ém{®w’i/“<±3°EÀ÷ÆnËL`泼¹ò®Ù;<À«º*ÜÞ³²ùîDýà™‹s… ˜xaáªîíЯÔX±bÅ‹/¼øäSOî}ÿöÛ¥s).Ûwl?üÖa©ÐªR•·j#vÒâÛétÐç¶§6K˯Uë\0GøùçŸ÷l f鹪ßzt³™7ÀÇßa'þšñ9¥9Tsàõ”‰ u§PsØIÀ°wÏÞÝÏí¾¹DWÙR©úˇ¶JR?—b,÷ÛšSrt ¬b±XU“I)ú €.vGpKêiImÊ*­g|ÒêƒEªU• _û¨º„û•¢œË„ò[);C»ëïz]y€ dcð ¬)µæ/ü Uh+™ÈÙ«œ×Õ °.Ïeº?wS¦ƒ½©mõi³ ›Ö¥:N+NÚ‚õŽ•o©Eî¬r{gÅÒÕ[wÙX›ºö•·izÍõ§`…²4¯”^EÖö9k"rÊ…Ür'~wR ;ÍÖ&#×?(em»ÜPÞûä9'àòTãßG£^G!ç2}þÝ>ùÔ“r 'W·ÔjàºsôÈQ2éÞ¶}¶y$I‚ëäÃNÍk×®¥W‘!; âŠ¢ëSO?588è­n÷ÝwþðíÿéÛó^X›ÛEz6þó2Z4ãsé€sq„O®ºcYò®'ví{eõ¥`5lG‹†œ%~öîÙ‹îB &½Ë é6áFH‹^·UÿŒX¨mfO /A»T–>,[ rJšaDZ‹‰«]NmÝvÉD3ï"ñJxA¯ªÚ•Ž1¬?ÑSåOé8¸VV›ñÁN])jêÔ• áúN=Z‹ëü3’ }ÅËíU­Sƒ¸°ºìDŠ–2¿:· cI5€³š ÊÇav™)|­ÁM1æN1ûtnµ©lâ ;7×p€[^¸¥!0¨+'Cæ·R\5"'jÜbé<4NQª^žk#É@bšºÑKªÀáááž^üÙ‹Wà ì~n÷Þ={é o«%Ïž=ë)´=cÛömG ýVµ„ÅÒÓf@ò€-Iß&&&° è?þoÿ~ÿûßÀ… ÐY›ûÑ×6ⱿëÀ£q$ —£¥Üü–NÏÃ})0ùåe¸LÚ&´‰}^†ËsºC±÷•úÛ‚W†ÄX$g^Z‘305§KOPŸé© Ÿ[”ÚWÄN5ý?::º¤  ê<ÎŒµUT°aÿ¼s, ­ø¡ihâfXåÊžØôRÍö >yúÓ_ëœN!k.ð„ú—ëÜÚ_31:‘_vÍüªO$Ohþ‰­.æ•P¹ó};=•¾„>”[äì+ÀR_LþI=%4QçPz›!Pú[œ·.4¨3Z²Ð&9{º+<íÔ “D8ùüɦM'“iãV ÐôÒ0˜3ÿüKXv»÷0¼Á?™Á’§ °ÊfݺuÛ¶:¶}Çö$IÈ-o¥C+„ü™æ”Aì¤Ý7ñ0;ñµvräAŽÏ øê«¯ðãPm _ÙÕ?'€óÍoþè¡y•#\†mt6=ÅÞ-[·`ŒgaÈMè%øÖž«ž9Iµx>SSSd‚Oª2By؉O@JŠÇQ¯†Šmk×®½ë®»ÝøðZ}öÙg¸»ò€³AÀ Ë¨*Ÿºè™jú˜±:G͆ö|¦*ÕJlV§~ªÏ÷±‡‚ÞÓQê©U¼$$ïðM:ÏÕusè¦z©Í\ß5>Ê8U‘nJIÇN*+¼6P\ñY#Dµ<ÓÂHÍ[ÍS·VŸrnYÁ¶chn3¢S§c‰uQç» :öU…Qcpy ‚[ÖFÂ[)θ¹Û"Üdb\ªäýßãâÆ)MRš`ʶ,.‹êæãÕ4›RÀ°W&e¥Ià-çîQ1ƒ@+cÍ' Õ¯zH@`¹ÖWê|r;fÎC¬¼ã+"ò… á¢Úô¢©k¤'[r8ùÔMvú–{8¹ë¦ñkþwôAÎSO>…*î¦Í›¦Á)u¡¥%A¯ ±á•½¯HƉÏGHÀ6Ðf’ ó²ÝÁõ——„,°NçÝwÞU¡“—ÍVÕb·ŸàŒÜ:¬V«…÷¨Õjaj™ƒâÔÌ ºœ:y Yïÿqk´EPç öâ[EŒžÕª´™˜G+¥—¨ó/]u¯#Ÿì=¥ZÐì¼!‚€ÀÜí…àÕ‰¥-àgí¨y¤4uè3Nd9(c’ú„?àƒ###¸Ü{l@å|øäR³³³­VëÇÿ¸J÷ÄOžàRmÿÀÉÁ˜RkœqÎoCÐSTä'yäð‘‚qMYû4bBÏb±^¯¤Œ…£&~=ð —¡3r‰±S5÷¡'Ýn~ÔÿˆŽïÕLyÃòˆúIÏù„ÞհʨˈºD_ ®–rg$VÎ€í´»NeoRQ·5Ýd‡µÕO)[[‹Ú‚–I‹| ÕÝÍ6cÒwÁ*QKm„'ƒúœx\¡\&@@ ¥Ê°×+Wws±ïQÍ+¯³l¸ä7.¯•Å>¤â†iØÜTlEëæW_}Õ°XºŽ)œr0èÿ®^½úïÿþï`ýi/]ºtþüy˜‹/Ï¢ó€±þ™$ÉR˜yPÝKª­–Ú‘2rìµÞ2Wº»oÞ¾ Bæ²ËzbÜIŠÞ Iç,\ä·eÐáÇßI~Åé‘ë¿j˜çÎiqn¹`ÞyÕ™p…–k’(G—¶ÑÓSêRÆJS1l²:C;eE-<ÉÚ§ ¤ýrM/ uPäìj«A\¥ÜS¸w¶áå¬Áªë›ë¦Šëï$«avUzÅ]Všy_!¦ ž&,§•™ÀÕ„?gþ¨‰3§–gÓ¢ŒÜâ s€©ê~ÓZ ÚðïÖ¬Y³fÍ<ææ-›gff$9^”ñ“^é)Eó ×­[·nݺÛo¿½ç[ŒŒŒÜsÏ=÷ÜsÏ·¾õ-¬Œí?ú9~óvªÓéœ;wŽ „=Áœ®Àtc¨û€Å ¤›}f"–RªU–µ–¡Òo]wuNÛ¢ê|}„¿oöKËóN»çPaóP9’qmÛ@k¹+´óø~çºÈVäÏÒ¯¶È@Õýòk×dÜ"[ÃÌ{¥¦ÇÛC½Ù–²ŒÓ'=~ƒÚ¯¨=ÆkCjªƒEsáæšjû!¯JiÂeÝlH}…þÖp™iŽzž.n-[.tûUOÃL1Õ"ýÚLL{M\è‰vH;•ž¢ßƒ;£†ªc›6o‚‹|L4šZ·ö•ª`î¸ã°u4HÑfggqEöjeñú«³Sè KaÝw÷ÝwÀ… Μ9ÓóÉXá…ô”¾ý”Œ.‡æ8׿ñïÐÐ7𦹦Œä“y{ Ï 8Á­›¯Ö#öHíºÇüÓù"RðÎzrÇ# nÁ`2³nvm±¾;°å×lŠE°3 G]¸öösÚT:Ê_-jãùàh]¤dÑ‚õÄNM<7óB”ÌÅ0Ð:G¹xëùÄfÂá´+_óÄ›q×åò;ðñõ•QµºÉ5ÊáTP\ a^==”}»¤( .ðg‚+54Þ(•FõU~Lp}øøQ7 eàqåK+Î6ïUÙ;ÿÀBZè¹8611ƒ6qeÁÕdvv¶¡X”dÛE_z$dzC@çÍÁí" 2,uàEöÆzsÜšœœÄ»ƒ ‘`¼Ô¨¯]»öOþäOˆ>"lüîw¿Ã—pia~£Íþ@¢Óé¨ÏJx`ŒG¡ÝÏ@`‰)Yk]¥[Š2–¬.ªìVëû|Xiz•…[ ]`fª9«qÍܲ´ÖÃ# —%ߨÃÇ=cÈéh­©Æ>‹ZVõ×t¾ªÖ 6ªv‰VçB+™„ÄÔ΂‰aV¹-FÍ™g·$º“2%––fXR3ׄÝúRJg;ÅðÝ€/2¬ÃÞ Õ½6uI=~Ÿ Ñ‚›Î{B® (Ì)»,*Òç¼l; ü6,Ô›';s[­ u¡úsUPáY>^í¨Ø7¿IÁ£PŸpèà! Mìm?"÷þöˆÔB‚ÎøP¦£“¤ªW.÷)t3L5xôC19Lâ? öhÏ1::Š:êÚµk¿úê«ùÕsöÌì.z‘¿&x‰hrøÅ‹/^¼xáÂ… .ÌÌÌ`‘êµk×®]»6lc- zpÅL n(tìS'—/YÆYL½UY5%ä@ñjäHåSƒÿ瓹Ô%ÌŒìT|4qRA¶pÔ¸c¤R—jðEß›É%%P> ù'°ÊpÑ©sº|ºEáš(¡ìF Ì¨Õ‚çlñ¾táÜ»¼³)(„á;¸å¬à]Ó>-‘æI Þ΀CNæ æÚìhÃf«A CƒW™ª2ni•3o „ šÇˆ’Ÿ4ðõ>~&þÉ•ïž7P© Ñ¡Wy5q¥{}R;„dUíœâÀëvìܱûànrY«‡ZÀ“O=¹ÿýØî©ÖµÒR‹kÈo³ØëµtªØ‰lŒFtyFÞo™·É6“ž¹råJ$p_~ù%ʰxÀ«W¯¾öêkÞè8@»ÁrrÒ3 TãÞ{ïýö·¿Ô“(æÔÔÖø,C2»9ð  ^júnpª§n)H?W;€ñNŽŽ.â&OýÂÏɇa°QÔªþ°íèJ/ñY{¹1ÁKU­sil4´L2geRºyø˜uÙÕý€mÞ½géõAÖ&‚þ‚XCB¨q¾^g«£™ååÒØ¡:6ˆª{εE°î”P~Ap¬J7góÃ!lüæ%ªùgñÇ…Z¼Ï…}Oa?2¸Ô_•Oew)h’)„é/¦K7=dd´ýÔ$RöaO³”A*ÎÄ—ßçž< ÈÅÞãÊY/¥7¨)y°á‰¨èc€ÎÌÌ ¼ºïUôÁ™^1¼p÷s»÷¾¶wûŽíx(BJžyBÔÄšš#‡ÝWîªï˜ÅC`áv+SOú.´RU£5Edn 3/Þ9í>³¹ªXËûM 7Y[¸¦WÄdÂZ¨Ñ\m!œÑløgNyôÑÁIw'ÜÊöYhœV¦Í Äž—÷àf*v^ºtiddç¨À±£Çzø!ÎÕv?·{(ØzvÚk#v¾zôÕ§Ÿy·ö{^ÞzÓù®þ|•W‰×ÀÀòK\åñd<ËÖ5kÖàã;wíúè:êáxý'&&Tî®ÖÚÌ#–Ƚvc ðxæ.è@ ªel¥Ælr¾ˆÁe†¡Ô—ç{Çà-ñ±ÈTäV:6 ¥7m‘¿Qê6•¦¢Ë“ÌTO ;oûa»9³Ê£Ñf6Zq.¨§îä“¢:VQ½Â®ˆ* ?só‚à+½ÕÒœñ2PÃͦÀX¦•»Å; ;•¯ƒ;&³å<¥ðÙQ)“‹Ÿ ‰švü§aD¶ tç®J\ª’²Ø%¨Ûþ…”ÓZŒÖ…l\ã{ДäwWg»ÝFÔDôÚóòQvðUïégž^”Å¡è ‹g!ãסÂÎéŸÜi«]ÐÎmÒò9dœ=úØc>†OÞ»g/’<š9ŠÔxv—u^c±ƒFºbqh±—/_æ_o²ëSKÆðŸÍcJqëo3u[Eâ16¹/˜?_ PŽ;>éêF»k(Îñ° d’ â¥Ò‹‚—æBC“9?#êcAË ª€‘µ`²“´ýqT”Çu\Ý ·ÎÓéÚì@»†ÌÈ馓¥£‘ãeá*Øè›“ÚT´ƒ=ãµ° ¢ƒ"ä3^XË…õÂÿA¦N¥áœtqÊ\¼ÌÅe7.-Sñ&Z·(Wå*\„¿EãÆ<#'ÃæÔiÛÐØ‹bz‰ÉÁ@Ô$æ7 >EÃ’$sêæT¾žmpCCCO?ó4 ¿X›ÊÍw–naòbýúõ6l úˆn8dŠ611±cçŽ ˜à¦;wîÚÙìOËcbb‚ê¡È’74‘¦ÿ˜™™Å«Šl^­É"R‹€ÌøÜ¹sø‘‘Àu:ìÎDÎJ*+—[ñ-úöÿ0C ÖLµ{§l†³œUSæz6$bðù!ÕÌäz›/ÝÚx}kìå¨ôÏ·'UиVæeØ~Ô¹<@,xEnæ!}G)V²öFÝÜÝÌ›ÂjúXRTÝ®]H;Õô±¶¶{åB5Ý´†ºåx0½—º<ÕJ“<ÿŠ í(Ä „b)wBêΦÕ l›^p\¿õÊfak=ï€FŒØ¬!ÍÝ.„DÔœu|z›‰RƒsdèûBMîÞBkâîgwï}e/-¸D½Ø±ÛYESu…¢ÙR cž¨} E¦¦¦.\¸€‰ÉfŠ|ðÀÁ9Ù½nÛ¾mdd䕽¯ %/Á§w’*K#rÉ;&''ù­9VÒÎ/Bµ-\A¥oŽ:uGÕÌñAdí¤Tã~eÎÃó U*W¯Ûü,æ*Õ: ãFØÍYMr¶`*è@Z09£ŒÁHZj%eU#“VýX²b“ÒÕ¥ô QÅ£VåÀ!eþàf6ë Kñp"u‡™×lmÏ „sˆ ½ŒY &«Á/ œÖþ±Þ]â Á‡R­²I°:™Ë³ø‘“´½×ÒåÊÝû’†E]£eL5럞FÛfyhΤZ9ÏÄh÷]dÖEWEµB\.nõל˜ ùíAà«ÒWì~v÷œžÿÎÛï4?á² o¹A[5¯3r)bN8àÁ‡œ„Îù *\"8ÁÁ/Ïî~v)Üú³gÏž={ö£>úè£>ùä“O>ùäÂ… ¨-ß«I’ °˜m ºA«V­¢Q\ +ñAÖ~”á¥jsß°a˼J¢™ÙÓøˆ5ÒË©^†Yñyd´&Bó˜„aK¹7ÑŒFá.p™à²N/cõqpPÕ+y-’À$жK›rw0gM_l5 ­Ý¥XRqíæiä¦úÁJ¯`Ç’¤VHœ¶;FŒ—üÒCM£éŠÍD©ô‘œ3B§Mè€Òk.j®‘Ú\Sã›ýü@{9„]@ó0R¿ŸêaNIŽOP¯áfŠa›f«ÕBâE#3ùš‚4èñMŸ8~} øxƒ?&|ù2h j†HíÔÔÔ§Ÿ~b®!Ø‚êüùóK—…½óÎ; Û@+yZ7G_Ü—ôã«0117ôƬz½bÅŠœæ"â/2éôL•«åi [“ã,œE¶kÛ$À`¦»¬¤¶ß1w9S˜PXï¯-بjdβ_܆&·|—7J*–Ùs%›V2éú·¥ÜeW›2mÜVºžˆÍ­Õ‚õÞÇï@[4™¤šeï.ßHå$ Ú *]Ô–>;+#ôê"°FóÓ6Ö”KÓeó2jwÄtyÕO*L 1 &sa¸°¢ã>²d®^Þh’.±“{¬ç½z‹¯ úÕ㛀§O®)çê÷™î²ÊÕ±š(eb<ÝpZk·ÞØ4^–\TSRªÝ°aguÔ‘Â%&BÍ={÷Àbàè³Ee,£Ó1IDAT„Tnê±1DGÂHµšÃ+À¹í¶ÛšO¾ÿŸ¿/éKC žª7Ž «®]»†·€_dâ@Íä’ƒ\sCÎâp£ÁAõ|øçR…SÚš ž`Orý–NAzQ†„ÏIù=¸tÓ­”©s عÓ|MÉ ážì\Å͵“2ìÎÕBhÁd &­ƒ]© t¹—š’ÀàjªÄ<2wŽº¢·µf>oH™ëä<¹t‡£TÞô´± ‘Xrm--ýMÙJ÷‚äl‹¬Ûôê€<›7yÝrV÷”»·zµ‚[íÜÀóÊׄ€Ö ZÒ×½J½gÏ7™äÙ|Y 3‘¯uŽ&:nýëLßÍËoª§m·ÛXrÊœ:eN©ÏùÙK?ûÙK?€çv?÷ÜîùãÚèGGíóåK_}õÕW_}…=Ÿ~úé§Ÿ~J®¹CCCèyôþ/ß'“ºä2Cf4ª÷)UÐ>tøë¯¿F†2®]»644$kÁä—ÄÀ8uÞ!=Åììì’d̓qr-˸Â(‹Tâå&R[­ .Óüz€³ld¡f !O‹%/P…xžG“‘×wÜ¥\["[XëBoÂ0¸#±L ŠäâµVŒ.]rnj é^—E¨ó$DÖ³ÀH£™Ê68+pE0a0–e;RU_â5næÚ—-Œ½+’¿z*±t{÷WͶS©F!PmÔT„Ô “‹N‡\ ˆ÷ÓçZ-R+ƒJoˆoáZæeõ–Á4Nulè?)H/çÙP’mñST í‚[øN?ñø¦Ç?¼}ÇövΛ>6Ì·B¥}‰dpd#Q›ß,Òëx}Jñ pîÜ9¾CjdíyVôüŠcuÕ.~‰>DYÙ* 7­{£¾r±fÖ̽-V@ðýóÉ]? ¹"—,I™àFnòyx1•HÃ÷žt  7N¹Þ"›Õzr한àî@;,kÏ](Ól8Œyø¡d=4rë›À-Ùíiš#ëz¤µ²yn¿“ë;úÇm«—kÀ ZQ˜÷L9bÌû†{6´‡·ð؉»îº K¾þúk°5¥N‡;« .EƇƒ§‘"$sp¥Н;ÒäC>¡ÖGÿ\º<ÖBPóú¿ªžš€×¼áP‹r‰^óZYš:¾¤[¥¥°Ä=⢬õ œ h3–Á…°Œ¥mH5N·‹CíjױХ‰©öBis#ÍäÒ‹“±MøÜ*Á%½ Ôݨy;s·ç$$Kr¦^ ÁþüæX‘`m÷œfÕ•®ð^ß©ÜU5A0'n´²'„뜪–›†ÅáRxêNºãú÷—ÝYu*'´â±ÎÃ_W<˜kö{ Á¼§ÃÏÓ½ —¡¸Ds`?¥6{ŠR*‹fw€˜®ì¡æÕs(µ)`oŠ€N«h'7DÍyÊœ„øb&²¶¥øÊåã…pÕ®¼Ú “¨Cí7Í-¡zUí† î¸ãŽ;î¸cÆ 6lÀV÷ááaž±£‰|x§ç'· ¡Z÷q5xù3 =ƒ&™`¬bAWuó–Í'ŽŸ8qüÄÀÀÀáC‡¯‰èŠ¸Ê‚¦¬Üt&£,–çíZ,(÷Ì· ¡I¢hȇSnú¹È^Â{ŒÓYìx‚X7¤Ár!wæF):ØÀmÕÈ\¶tÉ“g­ì9^GªYo;k±e„iG'L5üÛbÝÌ­®OÏöt‚6ƒ$A>½’·–zPQ<)k} 3=÷†­,u[ŽZ§*ÃAï¡ÜÁ¢RFVù¨7ʦh¬¹íÙ%šX jç ;`Á.oOÛ4,_C@‡ô1–¹i@Û!þ77¡æa™DÂmÑ—_~9¿…©ÁQ¥2™TÕ‡9?ö/&27( ¸ @` §J+ÁÝ'©¿J©#oÚó/ÃæAз¯lOKÛ\Ó¥ÕÒß"<LE&ïçnªì¸å–[°ðÔH\FU*Ùl}—×eu§§§p"– *o:¤'¨=rغm«” ùŸ7Z÷cY§¢¦ZJÃoN¢n·ÛHž°­eNï»À@Ä¥SR¡š‘²ÑjVK—óÓ.\‡ú\sA2`†ÀŒ9…ÆÒ…*†ú g˜šöU^ÊüÌvÞ}÷Ýwß}75Ãar3Ô릦…úÏ]aŠn©—Ú³rd™*jŽØ¸Ž qU RY‡‡‡©ïÞ)ÞªOLŽÚywé¢ÏXý¦F§Ó¡Ž[~½„4¯›ìœžž1'Æ™‹Ù#^Ó‚E†©¬&ÐuGFŠBåîÇó0ìyÉ<.ÒB ×Smip†mÁ‡ãþ'¢ÖIã ÓÖM£¹ m+à-£¥¶h68NÝÁUÞ]5Ÿeà½s­XZ'B/ƒˆB£ä£ìßî¸ã”×Ο?¬‹ƒûÒMMM-zwʵk׸¬7==çC¼avv–ÃãFx2$«Ýë¼OjÑžB+¥ÂÆí·ß~ÇwÐõüâ‹/`a–­ˆ…׫O_Õá ÔjXžy%ª·X^Á×7w8Á@øï¹ƒ5³ŒÍL6î\ÌÔå jdé­>-˜tk_å? /7Òê6oì ÏÜE³:“qxÀ‚fÄ,h9Z Cjà:&¼&J^%¡ÔÔ—­gæèÖ|‰ àï•·¤*_¥Àyª;kf¢˜¤øRÒñpECÂtõêUôIÀgz¢ÓRX%ŒŒŒð<Ö×>.2/Ö1ûÄ ¼Œ<¡+çÜtn8õÌÃ9jvÄ;%³­+V¬¼1}د{x÷ZMîª)I¤û/ ŸãñGž1[ׂå,Á>X2ÚCŒù«LP4äL…ÍM>£áÂíZ¡ÅWrŽ<Ð"™1$3ÌE–XcC¿©¢Yº^H”µÊäðe‘Ÿïé­ë¦c®Sí3šŸ”¼Ö>(ýç*×{–`öBz½‚/î¯|š¨>Èî`P¿ óRw;âMCó¦Ö¤êÇ °O!—@«Êjq®Ñkãî›i4´`½ Îs¾p÷m7¸ó'1¶æ#¨´oš_ònØ’äšøñÛíöÙ³gÏž=ûÙgŸ}öÙg󠆋Eïèq îø:£…úrõ%+V¬X†©[—X|#A]½a¥[ƒZ¸éŸT,¾›[)§_Q‹gï b I¾ ¦á: ¬™ïHðVõiXvîÄf~<ϹB脞!œsõ<Ë!{Í3¹Ü‹BYÙ,ÄmzJ^Úñ)µw•ê©àbl§_ŒB\sf´&\€ â¢ËH­òõ¾6=©îVÓª÷ÄŒ\“mËÆwɵ0õ“;Êõ Æìì,æÞ8NLLàø$ äêâmÀ9aZÄLa(úÇN\ÙéùDÈ&&&hÞ±ˆÆ!Í'˳øråŠ:Ó¿? ¦æ×œ¶YÈ¿ñÓ©ToÅŠ«W¯^´V…Ù%Ò*Cp6©ƒûZymHF2ì@•¤Þ3ö'@@lSñ “yJodt)ô:„´Ü2iãNinhœÈàä]1ÏÛìÖŒËspjæ™!ÞV&c„Z';Îâ.Yšºê¢yíqÙÐËý!e¢7&u‘,dÝ®ºHu½¹54zÕ+™€Œ\êÓm tIEz155…2,úŒ/¼;åùŸ>ÿÒË/õóLT,áæ©Q±K(iǰnÝ:¸í¶ÛðÁû·CÔ”v}NG…g|N?™¼…€.Ì«ã“=®—,<<ˆÑœ#e2Bý¼¥f§%_k´ÙAE?¨900€ök×®ñªÂU€ë·ýÇöÛ?Ü0÷]o< «øÿ=Tèt:¸*q”ív»ˆ¼X©ÕjáúÛϘë%‰û￟®'êŠKà\ÄÏ5==-7=Ô§Èoʵk׌N‰ß²å4:¾Yb°¿í³·/δ¾up«x*9”a[#”ÃRà ÏðMº}œ™ LތƼ—¨(;"ä KµV¨t«C¹Ñ1†¥§š'Ù¡aX+y-†¡ šFK¯:¹£Èž Æ€7´‚¨Ì>Š1ˆY©u„@ÅrŸ¬1ÔŽé ÂêNE~o2@˜P‚ò4ð|U †^6¶ËGàhå¨IÊž7çONx¾.Al€Ã@§ÓiP­¹JI/Ç._¾Œ]›×—$õ£µ6«Žü™²hh)tZ®x«¿%æ·­>!Ò¿üÀ™§ÔE8(l N¤¹kœ¦>ôé¦;µº›‡Àɸ|!Ï2†èrÇ‚ðè±pZr·C?f¿¹[3\ôš„Ü<“«‡Ÿª†Áͳ´$yÏ%_l/<ïÜ\¼$g]I¦‘€ªFî2}8c@@ÓnèÍm àjyšzã gY¶£t»]\Öƈ cÕ‘ãT®°(ùžS'OmÚ¼i±–!UR¾‚“Bé+ïÉÕòÊ bvvÕ”êãr1üfìKá²%Õ†††¼éA.]xš9þŠ0GÛ⟃Ü*5°j¹ç¹±ƒf§Î›ˆ?þLr¦7zf)ëU¯Ë%0ý‰•Dî¡@ƒÉ,@ü³bƳ¹6ÝÚfX#Áé-ìÏ™XpK±8¬U&- FÃðüðÚ¸£Ù$¥.Åäè¥7ô´yà+”özy®¹1Ôæûyck)hæ*®›@'‰q/iƒOSCbÕvà*çö©0áG®0'Ó»ùµi6ûºaç8ö¿oݶ•› P ÷às )‚8Œ7½ûúë¯?f199999¹üŽ?ƒƒƒ¼udV ÕÏ\úø]]+øâÆ7»dÚ`ʱÀèt: mTƒå,´‚s\)Åœ/%ߣy…ƒ  ™¶='Q1·3OÚ‚½¥B1+µÌbÈY» «š ¦‘ðœñ“a^óŽ,i{H$úöÜi‹©Ê®@XÖyÎ ù<8®\å8–ˆ—a¶ ;­ŸnŠæ©Ñ=¼oNÑ]y¯L8zè!÷DèõÚÐ4oÐj‚cňDâ8o>¸ÒÿåñDmµZôA¸ö«®S*EM·–³Ìä#¶ú¼ÃÃÜ@S¥ºñâii©Í^½z•.¬zËp‡´ˆR*AæêÕ«ûÑQn½õV¸óÎ;ñŸü1œ9s&ôüK—.mذ¡OàTþÈm{_PX͈šo*ˆÑÔ0)’ ˆÙ‡|•,4ïÐTÓÙÒFj˜5¤²Š€P)=ÞRÓQ4@é}Zj"^¡•‚æ€èw´`}Ç}иB“¦(r;wAkÜ4KÄûÈT´ºAñ~ðŠA“ß¹­®š/Õ:r³RöÞÕ:çfÛ'Ž¢õÈÛ¸ô›ÔœššBºIîe}9€) zrÞë‚Ï-pÕX¹r¥uW¬X,„/7²”¦ç¢O¨³¤‹Ë9K:/&]d„µY….»×3ª²j¹=ºÑf†«=¾×ËEGÓÐõ¹í¶Ûp'„9fLNÓFçªGGGƒÍÊù×»çô¯=ð_7¾ðËC‡…µÙÐß³ÑÖPüÁËJmºSéþŠÖ|~88¸¹+õ|d«ƒ p5õ·Ð˜¾RŸß3kXj4áÇ„ž ß¾}ê“%‘õîT¾t¡+CÇ)µG¿5½¾E _€†æœ›dç]·²ñþšfuºñ¥ùoÇ4Ǻ,âñ¿øßuþ¯Ûín|á—ø¯ßÛqè/ÿúo€3´ô7¬;êòí¬ïÚ¦â¨éåÛÙÿ®Ü¸‹xbK\aØ—ÚZ/?TMV¨¥Qe#H¨¿-{¡>„¡«yMo†gù© ›â¢¾)¸ŸEB¸éc‡ÔðÅk3ÓkCÓ°27úûÞ6½$gü/þw#gò—ý·ÿûÆÇþõË W.žÿ‹µç¶oß1bĈ#F ßñýá5ëÎ|úQùÿýf ^Ž1bĈ£ÿˆÀ#FŒ1bDàŒ#FŒ1–&üv^Œ#FŒ1bÄðL3š\w Dñþÿy?¸ü/ìçh7æYÅÏx½žs#ívË–ÿ3Þ˜'.³7ÅÅ¡ˆRmŒ1bĈ1‡ˆÀ#FŒ1bDàŒ#FŒ1"pƈ#FŒ8cĈ#FŒœ1bĈ#FÎ1bĈ#FÎ1bĈ#gŒ1bĈ3FŒ1bĈÀ#FŒ1bDàŒ#FŒ1"pƈ#FŒ1"pƈ#FŒ8cĈ#FŒœ1bĈ#FÎ1bĈ#gŒ1bĈ3FŒ1bĈ1Øð»n·ëý#FŒ1bü¡…‚ƒÍ¿ŽãÆŒ$Iâw5^ù?´OwOoÞz)Þb‰N;Jµ1bĈ#FÎßôˆt3^ù?ÀOwOoÞz)Þb‰N;gŒ1bĈ3FŒ1bĈÀ#FŒ1bDàŒ#FŒ1"pƈ#FŒßÐŒ— Æ I’à¼nƈ¿Zêñ>ËÍr‰BÝ™ÞãKwæ8cÜ ÉôóŒ#~µB{ˆ›î©g®þjIÏý(^‹1bĈ£g$Ýn÷þ_ÿÏx!bĈ#FŒžñÿüß÷ÿeDƒÆ(VRIEND®B`‚saods9/ds9/doc/user/contour/dssdialog.png000644 000765 000000 00000015456 11332353405 020770 0ustar00joyewheel000000 000000 ‰PNG  IHDRÈâEƒÀYbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ3”Û•»IDATxÚíyt\Õ}Çï{ófÑŒ4šÑjK¶dã}ÃàBØ1!¤¤iH jrhsÚ’”“œ¤iÙÿJÔæ¤IC“ãš„Ò ) /˜M2Æز°-ËòhßGÓ?ÆLžÞ6oö7šÏçøî{wy÷wï÷ýîï½™+Åb1!ÄÆ­·ÈŒ}OÜ/„PâªzÓö;è€ Ù¸õ–}OÜ/mØòÉ›¶ßÑÝ;@dÈ»Çv¶íUâŒÒ#YaÇ1Øn|8…e´7¬¨¬*l^aS§žjÿÓüJ©²²rjjêOUÓ ÃBG"§ýGŽG&›/úC²ÂøØÈøðÀª•+ígikoBx}þBå5V!IêÔÚ%ÇN½ÜrÓ.—ë‘Gëèïñ‡ê49'ÇG›ýÃïFDýÒšìé ëÈàªU«RʲjÕª¶övoY Py…Uš©Œn¯o$´äW÷?°ù²M+–/}çÉg¢JÅãSŸ#÷¾-wû›ªÊ+ -$I’R÷Õ$ùÏk&¬²æ@ \òØÙ½{÷ÕÖÖ,YÐøò[/Ö¯~¿çó÷w¾¶rNð¥£çæ­\Ë8€¬ «œ–ÀÉïý+@^[ëù€ÀÂÕG^{f` C–åJ×xOÇ+u‹× !{:/‹^ïhZÿÁ¤íh¨©üôõ›–4Õ¹Wßàè‰îs¿|äùÈÀH"ñÃ/~¼&T.„øÊ{²§/‘qÝò¦m^Ý4·Ê%˧{ž9pøÉ—ÅbUüë]ŸýBˆ©©hÿðØ‘Î3ýñõc§z“6Àºm6/²®¬B'U6]GMÞïáF³Ó¿ú“ÿ±“wÆi†‰«Ytîê+Nì}Ä'Æ…ÓÓýЮ¯ïjïìiX³E’]I¯ô®í[jÃå§{"]§{•åk—Ì‹öE§e—Ë-„XÖ\WU!ÄÚæÊÎSÝŠÛ'„ØréŠíÛ6 !::Oޝ\Ü´ýúKªËwìÞ—ðš5tîkn¬¿tÍ +›ô«'^{»Û¢Šâ±n›ÍKHŠË%G£Ó™ ³ÌK(…P€He9äÕ—^tYÒ¼ßÿÂ_û·G⟿÷·1Ëk7p~J+Þú5×öÜåv Y–z;ȵu“ÑQóFOYyÒ¦WWjÃåã“·Ýõƒ˜$+no0àöW5*ŠW±yíb!ÄÑcï.^ÐxÍåÿæÉ—*ªÊ˼Ÿ¸v½bçÃ{þóá=ŠÇwÙÅ+îþ»O]³iõîgöõŒ7õ¾ß>õôK¯——û¿rûÍ›Ö.ÿìMW|á{÷Í™SoÖ€úê*ë¶Ù¹„ºpÅ'·nX± Þ­¸ŽœèùÕã{»Îô !v|c»,K÷íÞ»íòUBÄÞ<Þ}ÅÚEÿµgÿãÏ· !n¿ió•-z`ÏÝÏ·Ù,á‹­I‚'„@( ååüÍŸÿªþäþ}õJÝ0ï?ýôÑïþ͇ãzšøœ(P“7…P@°*°`ãxçÞ‘ñhÌåóË=òœyõMv.uhd|lbÒçqç?säTÿ‘Î3‡öûÂ.—KÉ­¸6®jBüôþGï¹ó¶úšðâÆêîÑØòæ9·‹Åüý³åáÚòPí[§GOõôÍ­ ­YÔðø¾Ÿ¿bfžÿ¿"\ã TþzÏÁMk—WUVÔ•‹á³ Z¶-Ñ—àó¸¿ö×[«‚þg÷·õž‹Üxíå_Þ~Í—ÿå¡ñèy üËk/ÞßþöØèè“ð§ÎIºhÙ¼€ÏÓ70ôꡎ—¿jýò\ºvÇcû*ü>!ÄØøÄðÈx}íYV\nWßðØÜZQ ,›_}ÛG¯9ÛùßWëžéb{G¢ñÏ•åe§O˜5`ʲmv.aýЦª ÿXWwë/~ã)+ojœ»~Õ¢5M•ûŽFâyrßïv?³×]pÉÊÙ¾Á勚*¼bõ¢¹~Ÿgÿëoõö ~ôª+l– xÊ¢Ñ)ÅíaÖA («,d)\’$ç5+-‘nž÷ë?ßýÏ_?CU7\iPoJ1V!ÄÀ©£SçÞž,« zF&&&ÆÇÇÅÄÙÁ³µóí\ì+GO=ýŸ[é]µ¤é/>xUC}õ¶ þè^ÅSvùš…Bˆ^n—d×·Þ½jýò÷]²öÞ‡žBø¼ž@ LrɲË%$)\BôWø½‹kâ…O ÷Ži¼×ºšó¯E†¦¦§y÷éö6À¢mv.¡*B,˜WÿðOïIœ<§&4xàèùŒíÕsË*B±Øôó¯½ó‘«.ܼnÙ²¥ó„O<»Ï[æ¯ í— É2ï 1Ö4b¬f¥©–ó¦y¿}û6uáŸï}ܰ^ÕDÑÇ#ƒ/ŽD• Ö_7:Ð{îõ'eBô~Ö[q£W³$×áV\«/˜û²ˆF†‡žk;Y]ûæ-×o.ø"gÞm^²bí’F!Ķ«/Ùvõ%ñó~ßÅKß|çäÄä”Ç­|ìºÍOôô*:!I²ìR$I>}n¨ãÄ™Eóç !~ÿ쾉©hÈ_qðÈ©sýC6K`¾AÉ댇H÷|v‹Ù™ßüÅž™¹ŒßEµá±äMÔ|ó{â)ßúÜV}½fÂjPñh×+5ž3Á‹ƒ5sã)Uó—öŒœkª˜t»Ý±XìÄñW+®³è ‰ÉéÇžo[<7Ø4·Þëq÷ö üáùƒ<ú´/X}ù… …þáÅ{ÿûñø7m×,mþÁ]-—¬]®Ü÷ØSûž8Ñõá«×/nnp¹äΓgv?óÒÿ®¬¼Òí-s{Ëf~‡LB4ÔWOME#CmGŽ=ðèŽ;ªŸ?93kÀØÄ¤Ù¡X,–è‹K›øîŽ'>vŲ k–\åóE‡uœ8zô¨ä®k^h;¾h~]üQJ’<)•P"Êj3êÕöÒÓ«.ý€zžèóÆ=MÓŠ,ó&T5^Ë7ùä=Ÿ¹Î¸^MÁñßc}§ëŒæÀH÷Ñf_ÿ«ƒ «ß§®,6==Õµwýò¦h4Ú?0p¸?¨[`qåÓÓÑî㇣““SSã±é˜ìr••‡Ê«j=n_wçቱ‘@euEU]|#ƒñÑá¾î’ê/X) 1Ôv|x`r|<&bŠâ) †Á*—âñx}šZŽ·ï›žŽž¿}¸·,ªq{}O™$Ëf ÅìâñÚ¹—ÛÝw¦ktxprldzzÚåR¯¯²¦¡,PqüÐ!bµó—‚¡Ä ­çÄ‘¡þ^!D՜沊°Çë‹Å¦S*`ÖÓöôªU3~øéž2;yõeמÙ¶C•5sr‘7qšab¿G÷{\†„ëÓh€V‡l–àRÜå¡}z•Ñ«¾eв@E&% °Ðã‚å5ÖniÍ¢ ÖEù«&Dƒ,„Wˆ:ÆdE¨½ýMͪܚ¶¶CþŠ$É…ÊkËc(ñGÓmm‡ìg)+¯Œç*T^ca%„ÒV¹×_^\yM=Ö‘H0¬óX…ˆì¼ûVz n½{gB[y; SZ[[ Bjúúúè&›ìرC“‚Ç eV„a@Xa@XV°EÊ[Ô…ÃaÃôH$?‰díôui OÔ¨®:Ãfh²gý¢ì\i®«Ëbk³ÕTCS¦mµœÚ%C"éÈ·™Ýá a™˜9CìÔ•‹•·kÔKy>kϤµ¹hªs.ÜÌ.ykazC"?®äDX“2NE'Gʨ¿¨x-jAï,dÒ†5j*2󝓿M£4­¯ÑN’šRŽY±j£çgøYø³¹¨Ú¬gRí ûåØéü”K‡œÄXÆÐ›6wÃZc m©/ßì¢Ô^Œæ³Í®P{ú“ ó&íÒLòfÅÜv`mJC0ë"CQÈpø™ÙE}‚&1§#߬÷Òë ërìw~ªÖÇcuJÇìÖg=! ‘ȰpõNc˜FÞB¡™o¦ÔkYAÚiÑ·¹[zkF¾fÒe>ø“–cqQv®7Ï‘“Ù ¬6»µ¨ƒnfNk†3ÄNê8†µcžF½QÕ¬ÈM†Ÿ™],®(§#?ºì ƒ Ûl)Ù€¯âØùã4Ì—™w…ºd³È]Òio8‚g߀¶o…̯ÝÚ.¹uek’yè,Ò,FÎÃLÈÑ‚ÝfœÑ9÷†Lº¢Py­Ù*9‹#D¿ÈÈ]¼ÈÚËiÕiÔ•­s,ÎL$–²¯šCaÍîB ¬BÌ|o]{.^R¿øbgÚé õ9/Éf7ªÏÏõZÌâQ[ªOÃRfV0|x˜áµ›ÙÅl|æy œêÐÊä‹3Ó¶þìFÚ°å“7m¿ãÄ™þÄžWì `Ÿø/÷Uùƒáž®ŽÎ¶½|¥ B+ ¬+ + €° _ ~Ý*þõ,ÈŽÇÚÚÚJ§dMXQU€ì‡ZZZ耔…B·Þ½Ó4Ù  €° ¬€°….B„B!:’bs¯U„õ<|9¬¹óÎ;ñXS†/G@VÖµÄX²  eÒ„ÃáÄçH$¢NLüi‘h³üTs«ÇšP½¸ð©EVOâ4Í·ÎEÐJ×c€‚ +ßLBYI„µta(ŽP@±`ÿ·ÁðX“csH1šÙ슬¯ÅpÚ¨G¿µÛÌ¢?šF9ù×ÓâÚ_ǰ÷¬·tKc̘Y3Õê^s¥F¡ž’¶î˜‰…Ù†Wq7ÒhI~­†µ¤ÑcÙ*Çᎃs¦¢áM"1“ÒEi¬±œà—ºÕê¾2ûl˜]3S­(Þ?zq°Îž6rÚÃÎLUÕ)†»®æygk´é/GóYs4n¹8f ·\O'L6çÇXÍZ•´÷’^Žõ˜±pPŠtÍÄìS›Û01ìúnLµ"ÍPL»¹ $•3½¼æs”$–HY¬WsEšU˜áѤ ·RPU}L f‰ö£CfÀÚÿµo>GÙZ­YÖƒAã3ÚÉ’•Úó4àu«"˜Ï³@Uìaé=ƒüôÞ쳑ÙVö† a¤.¥[¯a̰ö ×.ùXw¨ÚK•30§ö@Uó/ _)몚tÌ$}—¦¨åUèB– ïjúŸMóiÎO5ìf^p„°Š|=ó±ßAêX5OKb³»aI½ÅÄ i4-Bá‰2óŒ4›¡€DÜÄ0€’·»¥þyQæ 0{†¨ŽçjŽZg±3z4±6Ãí—S@ÿÅQ#ÞÂÃJµ÷¬­™tèkIc˜9­' #§6Õ@3T4b¢¦ŸvEökÏ«°ZÄïÍÞ(ÔÝi£³a>ÍbAc6ô{§·ã1¶ÎM54çè·´²Sˆc7å«õ^`ú¡o"Мéœ^!ÿ‹;CëŽÃã„mÖ ©MÍö¸ÖÜÕ:k! Î %í4tE ÕÖúâ6Xýåa¹Ò\“7‹ÖÁÖù\°'}3›"¼ÇÊLËë”3ôL±õ¬¿ƒ–ZW§¹ýub§oQ„ìì æ^a}l]¤¡Qò‘=%Ÿc×!®ŠÍyÎL+È„Ìdœ¤d2líd»;¹ú‚€:m'ÝùŽUø=˜Ù!†³+¥q’ÝA…­³bS3¿µH·³Î“ǪŸ çŒEFg®R™cYïF}—¦}4Cë`ë\˜Û¬í[V¯œ{¬.yýä/P0;CyŽ! ¬E ¿;‰­d~#[à±föóÁÖx¬+ + €°@R´¯[ñâ4@–…µµµ•NH*Samii¡{R" Ýz÷ÎÄŸÄX²  €° ¬+ ¬+ + €° c’ìÒ‡ÕF"uzâO‹¼ÖçØÄ¬Eæ±&”1Ž^àòŒCš‘Çjí?†Ãa½ÒiRâ稽Wýç”üÐxiI«ÖTš^]YöX:¥v]Õª¤2½nZK˜aÆ4$Þ°òf^@vm×2ªQí Âš-PúÔ wJ2—¹{«¾aäUXÕKuÃGRêð¨þI½á9jAL5`ÑŒ¤%ä?ì%‹­‡WI¥ôÙì„Ì›a¿1Î  €° ¬+ ¬+ + €° €°5Ú_· …Bt @6…µµµ•NH*Samii¡{R" Ýz÷ÎÄŸÄX²  €°8Å!í(©mSÙ} aͱX¬z\’¤g³à5¾¾¾> ‡8ÞfÃpP 6RœÖ;³Ø/رcG‰ý"5.†s¾áœf#lâLMCo7.0ªªž úib8eì'â±:놩±´Y0!¥›-wfçø°»víR'ž‰ ì̹i?µÎiªA€¤f‹;¶W—I’,|Ìô£&òì‹È±°š)£[œ™Sº=â¨æßi-l £)¬÷ZŠ}r)³À6 §2mïÕBpåëâ½æ?‰>âÀ:y '\×Ù1¹fí{¬ 5LÃÇ4Ì›•“Á¦ü%Ôs×®]i+©aÞL û+H;óÂÌe™“Kž•¦5{@iq´X•Ä?ëS’ ÈP[õ4ªìä5K„|.í ÙO$?ûþif³%†¼f!&R®µÕ,%Õ£I³@¡æ¦ýD Contours - DS9

    Contours

    Return to the DS9 Users Manual


    Synopsis

    Contours are curves along which the pixels have a constant value. ds9 can create and display contours as an overlay on a data image. The contours can be copied between frames in the current session or saved to file for future use with ds9.

    If you encounter any problems, please email saord @ cfa.harvard.edu.


    Contents


    Creating Contours on a Dataset

    This thread uses Chandra data from an observation of the galaxy cluster Abell 2142 (ObsID 5005).

    After loading the data into ds9 and setting the desired scale, click on the "Contours" item in the "Analysis" menu to turn on contour display. Open the "Contour Parameters" window from "Analysis → Contours Parameters". There are two sliding scales which are used to set the number and smoothness of the contours and fields for setting the range of values to use.

    Typically, you will want to generate between 1 and 10 contours; larger numbers will take longer to generate and display. A smoothness level of 1 will evaluate the contour at each image pixel, while a level of 2 will evaluate the contour at every other pixel, and so on. A larger smoothing will generate contours more quickly, but less detail will be available.

    By default, the range of the data scale is filled in as the limits. Under the "Method" menu, there are two choices:

    1. block (the default) - blocks down the image by the smoothness factor before contours are calculated. The larger the smoothness, the faster the result.
    2. smooth - smooths the image before calculating contours. The larger the smoothness, the slower the result.

    In this example, the number of levels is set to 6 and the smoothing is set to 5. The contours will be generated over the limit 1 to 100. The default method (block) is used.

    After clicking the "Generate" button, the list of contours is calculated and displayed in the "Levels" portion of the window. Click "Apply" and the ds9 display is updated with the new contour levels, as shown in Figure 2.

    The contour parameters can be adjusted until the desired result is achieved. Be sure to click "Generate" whenever an adjustment is made so that the levels are recalculated.


    Copying the Contours to Another Frame

    In this section, we take the X-ray contours just generated and display them on an optional image from the Digital Sky Survey (DSS).

    From the "Analysis → Image Servers" menu, select one of the DSS server options (e.g. "SAO-DSS"). The server dialog box allows you to retrieve an optical image of the field of your observation and load it into a new frame. The default retrieval image size and (RA,Dec) is equal to the size and center of the field currently displayed. Here the width and height have been set to 40, but the (RA,Dec) determined by ds9 are used.

    Click on "Retrieve" and the data is loaded into a new ds9 frame.

    To copy the x-ray contours:

    1. Select the frame with the X-ray data in it.

    2. Use "Frame → Match Frames → WCS" to align the two images.

    3. To copy the contours, open the "Contour Parameters" dialog again and select "Copy Contours" from the "File" menu. Leave the window open, as it is needed in a future step.

    4. Select the frame with the optical data in it.

    5. Using the "File" menu of the "Contour Parameters" dialog, select "Paste Contours".

    6. Adjust the parameters (if desired) in the small dialog box that is displayed, then click "OK".

    The optical image now has the x-ray contours overlaid. Since the WCS is the same, correlation between x-ray and optical features may be seen.

    To delete contours which have been pasted into a frame, select "Clear" from the "File" menu of the "Contour Parameters" dialog.


    Saving the Contours

    To save the contours to a text file, choose "Save Contours" from the "File" menu of the "Contour Parameters" dialog. The contours are saved in a text file which can be loaded back into ds9 with the "Load Contours" menu item.

    The contours generated in this thread have been saved as ds9.con.


    Converting to Polygons and Saving

    The contours can be converted to ds9 polygon regions for use in filtering data. Converting to polygons also allows you to select and/or delete specific contours.

    Note that the contours cannot be saved in ds9 format after converting. If you wish to save the contours, do so before continuing.

    To convert the contours, select "Convert to Polygons" from the "File" menu of the "Contour Parameters" dialog. The contours are now defined as ds9 polygons, e.g.

    polygon(3535.2112,4184.5,3540.5,4179.1154,3548.5,4176.8219,3555.9012,4184.5,3548.5,4191.9558,3540.5,4190.3926)
    

    The polygon-shaped contours can be saved as a ds9 region file from the "Region Save → Regions" menu. The region file for these contours has been saved as a2142.reg.


    History

    24 Jun 2009 Original version

    Return to the DS9 Users Manual

    saods9/ds9/doc/user/contour/thread.xml000644 000765 000000 00000016360 11220740726 020277 0ustar00joyewheel000000 000000 June 2009 <long>Contours</long> Original version

    Contours are shapes which are drawn on the data at a specified pixel value. ds9 can create and display contours as an overlay on an image.

    Creating Contours on a Dataset

    This thread uses Chandra data from an observation of the galaxy cluster Abell 2142 (ObsID 5005).

    After loading the data into ds9 and setting the desired scale, click on the "Contours" item in the "Analysis" menu to turn on contour display. Open the "Contour Parameters" window from "Analysis → Contours Parameters". There are two sliding scales which are used to set the number and smoothness of the contours and fields for setting the range of values to use.

    Contour Parameters dialog box The "Contour Parameters" dialog box has sliding scales to set the number and smoothness of the contours and fields for setting the range of values. dialog.png

    Typically, you will want to generate between 1 and 10 contours; larger numbers will take longer to generate and display. A smoothness level of 1 will evaluate the contour at each image pixel, while a level of 2 will evaluate the contour at every other pixel, and so on. A larger smoothing will generate contours more quickly, but less detail will be available.

    By default, the range of the data scale is filled in as the limits. Under the "Method" menu, there are two choices:

  • block (the default) - blocks down the image by the smoothness factor before contours are calculated. The larger the smoothness, the faster the result.
  • smooth - smooths the image before calculating contours. The larger the smoothness, the slower the result.
  • In this example, the number of levels is set to 6 and the smoothing is set to 5. The contours will be generated over the limit 1 to 100. The default method (block) is used.

    After clicking the "Generate" button, the list of contours is calculated and displayed in the "Levels" portion of the window. Click "Apply" and the ds9 display is updated with the new contour levels, as shown in .

    X-ray data with contours Diffuse emission with contours overlaid; a point source is visible in the upper left corner of the image. xraycontour.png

    The contour parameters can be adjusted until the desired result is achieved. Be sure to click "Generate" whenever an adjustment is made so that the levels are recalculated.

    Copying the Contours to Another Frame

    In this section, we take the X-ray contours just generated and display them on an optional image from the Digital Sky Survey (DSS).

    From the "Analysis → Image Servers" menu, select one of the DSS server options (e.g. "SAO-DSS"). The server dialog box allows you to retrieve an optical image of the field of your observation and load it into a new frame. The default retrieval image size and (RA,Dec) is equal to the size and center of the field currently displayed. Here the width and height have been set to 40, but the (RA,Dec) determined by ds9 are used.

    SAO-DSS Server dialog box The fields for Ra, Dec, width, and height are populated with values determined from the x-ray data image. dssdialog.png

    Click on "Retrieve" and the data is loaded into a new ds9 frame.

    To copy the x-ray contours:

  • Select the frame with the X-ray data in it.

  • Use "Frame → Match Frames → WCS" to align the two images.

  • To copy the contours, open the "Contour Parameters" dialog again and select "Copy Contours" from the "File" menu. Leave the window open, as it is needed in a future step.

  • Select the frame with the optical data in it.

  • Using the "File" menu of the "Contour Parameters" dialog, select "Paste Contours".

  • Adjust the parameters (if desired) in the small dialog box that is displayed, then click "OK".

  • The optical image now has the x-ray contours overlaid. Since the WCS is the same, correlation between x-ray and optical features may be seen.

    X-ray and optical data with contours The x-ray data is in the left frame and the optical data is in the right frame; both have the x-ray contours displayed on the data. dsscontour.png

    To delete contours which have been pasted into a frame, select "Clear" from the "File" menu of the "Contour Parameters" dialog.

    Saving the Contours

    To save the contours to a text file, choose "Save Contours" from the "File" menu of the "Contour Parameters" dialog. The contours are saved in a text file which can be loaded back into ds9 with the "Load Contours" menu item.

    The contours generated in this thread have been saved as ds9.con.

    Converting to Polygons and Saving

    The contours can be converted to ds9 polygon regions for use in filtering data. Converting to polygons also allows you to select and/or delete specific contours.

    Note that the contours cannot be saved in ds9 format after converting. If you wish to save the contours, do so before continuing.

    To convert the contours, select "Convert to Polygons" from the "File" menu of the "Contour Parameters" dialog. The contours are now defined as ds9 polygons, e.g.

    polygon(3535.2112,4184.5,3540.5,4179.1154,3548.5,4176.8219,3555.9012,4184.5,3548.5,4191.9558,3540.5,4190.3926)

    The polygon-shaped contours can be saved as a ds9 region file from the "Region Save → Regions" menu. The region file for these contours has been saved as a2142.reg.

    saods9/ds9/doc/user/contour/xraycontour.png000644 000765 000000 00000250257 11332353405 021414 0ustar00joyewheel000000 000000 ‰PNG  IHDR<yûɲbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ7“ìŒ IDATxÚì½{”Wy'úÓOµt¤n½%Û² ~4ØÆÐmyH‚‰Í0†ÜÌäº%™Cq3+w¢1“»’py…$3s¯°îÍš!Mf‡4™¬óæ• ¯ ËÝbƒ –±e[²-K-i[o©ëþQçÔÙµ_µ«jïª]§¿ßòò::}j×~ÿö÷íïÑö¿eð{¿<ƒc½ýÎ÷` Â[lËÌÞ/Ï5nºåŽ·ßùžgœÀA „·xú‰G<üÀ`ô³gNc Âs i!Ä2=~ôìÉ ªµ‘•«[kÖVû¬„´Î=Ã~{èGß¾lMcÍš5.\øÙ‰áµÛ^"-ôÔâ3c'~úÄâùË_þó8Âsœ=sêìÉ×½ô¥æ<ü£ÀÈèXUÏÊI  öÛ Wo?shaÇÛoøÜç¿°ÿøá±ñÜ“çÏž¾|ìäÓ‹°éšíÜãð‘´NÑë®».Ó#×]wÝÃ?úÑÈŠ•U=+'­F’u†FFO_ýɹ¿zí«_õ’Ék~öÕ¯_\¹fpx”ýMóȾ‹«†NŽm[»j NðF£‘]Æh0(ÿYi5¹?¬œØtðñçx`ï† ë¯¾â’…ŸÜ¿éú7tž?~à‡/ݼú{½ô¥7â<ˆð«·Üô¶×¿ì«ßûñ'þî»ØÂKÒjæ"f÷¿ ž5’´"l¸òúŸþðë'Nìo6›kÎÞÿýWM=|àEðÝÚ¿mú—Rë±uýšwÞöª«·m8FO?ùìÑÿö¹ï,ž8Õ}/|tç¿X?¾ þ?½÷àácñƒS“ÛÞúÚë·mY;Ðl>säÄ×çùê÷~†ÿï{ubõØŸ}ú›ßþÁ~f4àÔ‰£'Ž<³fýéo.ß¼öŽ_zåÕ—mX Ç=xÏ}÷Ç]@ %°4`(òpÏþÉ¿¹]õóßûÏŸ5y6ñ3é—IKu)µåú×=ùÀçFá,,-_[=6±iÍÙ§~tàðÖni4R[úÞ;oÙ0±ê™Ã‹O=sxbͪ¯¾4<}ìâRs``®½|SÄXpãåkzvphn¹ù%wÞú*ØàÐé3g_zÕ¶;o»yëºU³÷í¥½Åçž>}òøŠUãþ°V„ ”VüޯߺrÅð—¾5߀ð-¯¿iãøØÏ àRB ¥pVN5dQñýô÷_óòW§>û'ÿæößÿ/Ÿ‹>ÿñoýsÕ³*IKνƒ#›nøÅÃÿøwCÐl6ŽìŸonØxþâé±Ë·¯X•ZõukVn˜XuöÜù_{ïÍÁ¡‘Õ+GNž<9¶ö’ÁÁxíWÀ£?}Õ—üÂk^ñ×_ý^kÝÖU+F~õ§àž¿ýÊ'þö+ƒÃ£¯~ÅK>øÛÿê^uý}_ß{øt¯ªáÒÒ_|hÌþÝýo{ý £ÃCŸýævðÈoþóW¯[³ò{?þ_?û¥¥þí¯¾ñªË6¶ÆFÎ]¸¸ÿ©ÃŸüÒÞ§Ÿ;WoÛø›o{õ†‰U?|ôà‰N¿é¦kþþGî¹ï{°q¢uÇ[nzÉ›†~úäáO~ñ§ž;Æ5ðÚË7þÆÛ^½~¼ó8+Õμeûk^veklôôÙóO>ö§ýõk¶mZ¹bøÉC‡ÿ/ò©«Ö¼âº«·mÝðâõ£û\hZ² ˆH˦ŠïWÞý{âÿæãÌ©]úì|ìóô¿½-âªøs\ ÷¬Š´”Í[½våÛÏxàÔÙ‹áÀèXóÜáææK7m3iê §Îž9w~txè#wýÆOÿéçyü™±Ñ‰€ÆÐàÀöë.€Í}þC¿ók›ÖO\uɺgO‡“—o Ãðo¾ôÍUVoøÉ3§>¶eÃø /ÞúŽûÅþí?wýcO?7õ’+ï¸eú…SgòÄ3­¯»ñÅ÷Ï?ôOŽC£±~bÕ7÷þððÑc/Ÿ¼r꺫ûW^÷ÞÝŸ^½ºµóŽ7­Z1òÃG~vò}ãöàäñç=pË%—ÿþ¯¿eíê±o>øð‘£‹·ÿâk~÷Î_øÝÿçÓg/öÞ½bdèwþ×7­\1òÐO?sò…7N÷lcn¸jë­¯yéú‹ß\96òò—^uò衳›Æ`ÝxëÒ­›Öo½rMk%\uÙ¦‡ÿÑÊÖÒ(EÒjæzª!}vrêu*žÓ?û¾?ûÂGÞóVà‹-0›!‹¥SG—B8¿hêááá¡‹¦Í>1ü³¿ùÖ;oÞþ²k·¿ àÙ#ÇwÿÕ7=—_{éÊÑác'^øÁ÷/üø‰Ÿ›žüù›oœýÂÞÖØ(œ9{î䩳›6\Ñl ;yfËX³zå™ST|ÑGÿüo¾ûý}ÿý?¾÷ÒÍë¿øõïíù÷½·ý«oyýÔeWßÿÐã«Ö¬ÿÃ?ÿò“ûZµªõ{÷}â_¼uãZ8säÆéÉU+Fž_<~×}lpxtÕÊ•S×½8à^~Í¥kW=þÔ³»ÿü¯‡W¬ÚvÉ–éë^|ö5{]lE/½ñêKW®9rìÄÎü—¡‘?yﯿâ%/Šþ424ô…“O?wôÙc§æ¾øÝ³§Ok>ñÓÏ\½mó'þÓ¿€è~nÅèÈù³§ 5‘c&!DFþiB³‘ã©F£)VUZü½úÙ÷}ü¾¼û¶cÝôzÉ{¥¤¥q´:qèÑ G;¿bãêáSçÎ;{ö,œ{ž>IkÃe&ýþ£‡¾ö~²eÍÈuWoû_~éç¶nZwëö+?þù‡W¼æ†+à» ?j4æòôÏMO¾á•7îùô×èé³0:2¼råŠÆ@³90ÆDk%§'—.^„Ëþ׬ßræB?}ü©­ñ Í!¹yý8tõúÍ‘6oMk ž<ø4›ë¶^qèè©WtùÃýOÍÿègS/¹âúk®€çŽžøŸ¸ï™ÅÓ4ûå—nÛºqâÐsG^3}Ýk§¯?v‚†KKK ¯(CÒ²y§¥*Qñ)ŸýÃö­¬RñÿÜóEé{’–‚-ÏÐEºÿþS_4ýæÓ'Žý§¯6á"{ä›#­ÛGÆZú¦ \ÿ¢- pqñä ßzøàº ûfn{íª•£‹Ï=}ùÕ/¹ñêKàÖ7¾òÖ7¾2úýʱÑW\sɾŸøÜÑ?ùØÜÉS§wýþ{šÍf£Ñ8zü¸dó†áÑQh4·m^¸xâ48øìŸÞó™øË£ÇèÅ çÃp©90'Nž€ kLJFÐÜ´®ç¯vþÂÒGÿêkçŽ?»uýšyÛ^;}Ý+¯Ýòùï>600òàOŸ½ðð«Æ†ëηÀÂÃ6† ¡¨^=Ø”«U¥%Ôƒ²g?ü¯ßËXÑ5ضo}ÿý²øÞ êÁ¥ çO>ö]h4¶¾ü–¡‘±¡ c¯yýéǾ=22<44ôÂþûGnx³¾ýÃCƒÿû¿xýÉ3¯zê¹caW_º~ðãýáÒÅí×^68Ð{îî¹ÿùëÿlû‹·myð¡Ÿ~õÛßËë^qqi Μ»ðG³_þå×]{Ó WÿÜèè"=ùãýO>ú裡ÕƒCQw>{áîOýÏ_»uû-¯›~xÿ“ßþþ#¯ŸšŒÞxŒžn6àÍ7_76:LOùâ7üÌWþ¿áUÏ-žØ>yÙÊ£GŽÑ¹ÏíŸþÒèØê¡‘ÍÁª„{Ö2Œº÷ð÷¾vÝÍ?Ï hⳑ„¤|‘öÙ˜±¢·|à¿}õC¿ñfù{¹‚£|Z?{ê9î§ž}ôòÑã?8@·^ÿöeáÒÒ…§˜žÜvñâÅã'NـƦ½´ðÂñçÏžvò'Žnzé¡™ÎK®?uîØäUWRJßxìäñµ‡o³98¾ñÒ¥¥ h4‘48428<ºzý–fs 90884242 Ã#cÍæÀðè@8:¶z`pèìØêF£ÙhF²ÓððèÀð¬ÙxéðèŠF£ ÆøÆKGW®ŽZ±fã%ƒCh­Ý¼bõÄàÐ@ct¬5¾þh@Ä7£+W 4ÞyëM ˜~üÉg®º|ó“W¼pêô?|gaph  Ñh¬ÙpÉðŠãašF£B8Þ“|Æ7\2<¶jp`¨Ñl†aغxa`p†W¬šØpI³9ØèV~`phpxxͺ-KK£B††‡‡‘±D9‚/»Üðš7›<%5¦°þ,÷¥Þ¹8ñ‡ž?ðÈ©ÅÑm7 ˆåŽ®\ýБSO=ÿЙ3gΟ?GÏŸmM«« c-9¥­^»‰ûfhdt|ÃÖøŸÃ£cÃB\ú/‰?¯ÝÜs[³®G˃CÃì#«&Ö‹å|þÄ›^~Å«^zùé³çö>ô(ùËÏ£'×_º¥Ñl6Á¡UãëõC242ºfdTú§–Ð@X)˃@ ^©E®«ìYî»H=øÄ¡£ËvŸ;ðÈÉÇ–.^h6›ƒ#+V¯Ý84²btÕx/™DáÜ™S§_8Îiêôxøá¯Xµfxt¬ªgãoŽz¼§\ÎV«×m]¹¦98™©4GW¬j6Ñ–@ô¢ôT?ücóGV¬Z=UÕ³Ò‹û+Zã+Zã8›IJୱU#c«êõ¬„´"IëÔ‰EQ@x…±Õ‚¤pêÄâ=|ö@ ¼Â»>xOÌ[xsƒ@ ±{÷nöŸƒâ/Ž;†Ý„@ ˆÊ1;;Ë}ƒ’@ j$-@ i!¤…@ $-@ ´@ÒB ’@ žb0ëÒï£?-.Z `(¾‹+<~#ûê"ÕŸeë`±iÅÛ^-TÕ³;¤“­ò~àj•µ>Ö—‰ùDuôj‹“Öu ¹Whö iz[Í÷ Ó‰Çu‘Ó8˜ï±27“w¹®OU¥WD¥©ÞÄÄÄÄÄÄââ¢Ý KÏ(>0–ØpjUy•ŠtŽ'^ÚŸv‡>žÌ¥ –盉sÒJ%O§ŠJŠ'Vî©•?«‘äTâ…-™OÓj±±ìÙï¹Ïe´ëìSÛeÒ®e}o[ ®‡s¿ÚúvŽj¶”\ÃÔþtÄ"ì–%mf5RŽÉ6åº&5Ï1”M§£.võmQušp=¡]4-ëMZVâá>—_ŽþíªtLÚ¥ï"ô™z»œe’õÕ.¦„¾s¤oÔ×°Hivý¦¡ú‚»¹¾uù&I…/Ó[ò å`ÁN/AäTѵjºW¢uVƒÒ~öGÌO=¯Y©j ÷y«ä““çz¤¬§ø¬ ÙÖ¤R]]zëŸÊ£*í%wJSõ€ÓëgGCéðNË£”¼ò¥j7GMËÑö+­„¡ñäj§’y¢oxjW{rð²¸ÜTggßZêzèm-Ãý¦'WÔ«²Uq1èƒ>Ï~Od?›¦ÒP÷ÙÐø&f±õILƨ_™^T?x%+K¯®-}¦)óGŽ)·EJNrµE½åo5͹S©‹3¬á2c›ÆÝšø¶Õ–<4ýÊXî:¶ÈXˆ×x>«X=?eͺô§¾“UŠ¢’W–ªóuì £Q7t+äSg¦?âyÛ4[5ájUÕД#õJ›PÚ¸ˆ]­©€~Œ,ÖYZ”¦ð’§±¾s¤ ¹Ú…f2ÇÊ©•É2;Pß{åô­É[òï7ÝrÇÛï|Ï“Ï?ubñž¾ 0s1@‘ºnX¯Þ3ñ(sñ±µc«'?µÿÀÃ`'QͶÕ7¦>Àò’¨%˜£Ú—ÄQG òböa‘j£¤…@ ˆÚI @ HZ@ i!I @ $-@ ´±Ü ñÓŠÂf Ụµ{÷nì@Ô€´±á3xõàŽ;°Sá ÆÇÇßõÁ{ä’@ u’´&-„ç@Ý’"ßùßÁN@ ¼æ¼EÒBàª@ j€ÙÙYîN’c%sÚ+^ÛÔþÏ*ÙÒIˆ¼… ±¤7›wZ(`Yìo·¤"ÂV¦¶”ó–âý/æ4̤/*Ç<‰wä-eŽÜ;8h¹Ä·VÛ -[Ķœ+‡¢)Ç–äíVÖ’Ud /Çný‹P‚Ó3ÛL4¾èk™£UÊ#u’´š.–.¡âæ³Ú§Ì*ešNš_f-§`ÿ›ß>âɨ€´P½nÞ?ñg}§™t©ô7.¾Ì:ôšB&ä˜Nlùâï9ð¬ç'¶ó~Èú®|uÓt.:„1H¥Û)pÐpy¤ž"q͘w£æžÚ¥&$%|™µžYgH¦;$ÉFUá¬í2o‘y¤Ž©ù0!Z•>ÂEWž1ö @ jÁšf’áR™ÿ2„·¦zx\5H½uë$-D•¨ŽËó £Î°$ ’VÅÀ ÑJZµ­­w-BÒrŒ@ ¤U‹ÚNÃÞyØîy‹´Üb÷îÝØ „·flZ¶ËGÑI Å,bùBš± á³è‰¤…«XŽÐdlB8€(rôÓB ßvj¬¼JäÊ)„!i!„#Xyë0%-iÀ4iü´|AÕ–I˜]U`\MÀ\}!VÙ!ˆ²$RÃ:û%G‘VÖL²èá¨éFñƒ˜ÑX­<߸ $gâK¨ú¦8µ¯D±tÒ’&z׈©r€ø¥ø¡_Á1º”à5¬ÏEÂóè ‘ä­ ‘ƒZŠmI‚—…;-6ËFª|&ý2wò¡:ŠYšz˜¹Xö(_ËGÜ?â¢þ% ^H+÷^‰‚B&ÊQiEÆB \"m÷A‰o4~$¶zb–]‚qDÕÙŠun=ˆ6úÞ@ÆB êÌa¾‰€ul{¶b;ã~*¥–½ »H¥`ÄF >;h˜ˆYóå–ºÛeZ’´¸û*éþ›OÞR}‰“Q: 1«/AjUxA=gàL #$­ÅÅEdýUõ=÷”ª¨øûe¸³<£ùG E <îÆY”´T»aê©_ÿ”á÷ý!'em¬æ(l!%ê½È¿…aœ¢††‰j©%‡°XúO¤…Ælá=‚$¥¾I%B“/ Á²õ Ò@Ø@=[£aF¦‡4oi–±0ŸV 1;;‹€@ Cž“%)³¶HZΉæˆå)÷È¡½k*†„a È]+ç»ÞýÍåh i¹ÅîÝ»±4رcvbÙÉ=éú»\[|Ø-9ú4>®(ǪÝ`‚‰k=!’ŠYUâØ±cØ „Í->„FG‚\å‹Ä“ZÚ½s®'DÒÂ}¹ÌÎÎ"£#ýB™­übF Ÿ@ÔSrVéØÐé I÷ÿÄÖ«lç$®’@ô‹0šóM xkY—ÜH])¤%M¥¡Ši‹YH¼‚4C4ì%¢Ž˜†½JšitÿŠt¨¹Äœ`ˆƒ_¢¤…Œ¥ÈÍ…ŠG å¢à>N£f`NÍX$Á^JNÊ]“À¸UHZš¼$š»xºWýÕRvQ. îãwÁÝf–ÄRMHY t&iIòÖA DVA'”ü˜hˆd)©ªý9I ULžƒ•†QÌB J©¨dñ+°!ΚIŠ’–˜Ú1Þûr(úP7X&oáÙðF"ÎJNÀ # ÷ÏèÿÔ ªÄÛåæÝŒ’G6œ®/ÇNŠ›)XNbV©pêb™‰»î wàVlå‘7ކ5Þµ@Z¹Så¢q|UPõ0êˆ*Ĭò9’ÃŒ¢’¬–¯Õ¥1PgØ‚ o³²IZR‹vFѰ"þ†Ý¹[Ü7{X†é#ZšKòM¬$´ËUñgŽÌHÚ•X©0=(îz"!¥ g¸u–Ï[&_"ˆ¾ìâ<Él3Ý_vhöÎw¾™éþ Õe²–Ï­Eçb(™ŒÎ‰ùS‰ðƒ èšWiØ0ÃÈLñ=hMÃ^&F{‹)9`d¯Ôz:ê$-¨’Ÿ £†-P?5“öld^ÌÃ@k¦¢owÁÎyØ@£æa{÷÷TVBîš•‘´¢dÆ?Ë!Ä´Ìh2"'2 Ó°î‚I†Ÿh÷B‹³}§LiÅ,®ðüb>-ç˜ÅN@ –è-ÞôÁl-‡À4Lì€)X˜„}wÁÝó½gƒiØû>øÈ;à³m {  s{ºÏî‚÷ÏÁÞy˜Lƃ7ɘEÔþË­â’–s`ªC¢ï@Ê5¢#2+köƺ¾6ÀXˆÈi¦öÀÌtOÑÕÂ}pÀ'`ß4À ‘¤uÜ÷‘Îí,ÀÔ3°ùð¡iØ÷¸mì» îÞ;£{¯wÀg»Ì7×µÔˆL3æ¦aj^'&’òC6Í÷UJé>…ùG ÷>:+µÙ¤&†–þÀä)ó¢*TÍÅ©2bÏkÆKÚ?ùžr4Öˆ¼È¶k7 l4H£‘¹dXHל=öyju &&aSyûºÏî…í€@ð)¸ÞÙûöÁdìƒÉ)XØ;»LÁB÷--€€ –¡ íÁ´$ô†´ ¥„~)ÎÞ—XÜÍì{3u2è=Ǹ˜?åÃ¥âÔ·T\&ýŸé©L]gÇ>à¹0”†obXĆé‘åE°Sp|ã£Gv6n†ék¦¯]€9˜ù|à1xÑÌÀ‡àwÁ$L¾»`² s‘$·§o0 8‹@˜¹¨fÁ=B³½öÍQNlf »@jr?0ÏEÒ—‹èË‘ ágr2Ì;SS„ЈHHb¸Q‰ýYR,£1óMé]õà.xÿ]0ù™ûo÷#äÝéu þßÛ7Ã3o€oRЀðnxÀg¡c p@Ç‹ën¶¨›¢ÈìõÕ®ü°ûÞ†¼U¹+2ßiI— NÄšŠŒ€·Æ2÷ÙG=q¬½ˆ/¹ÿ7@¸ñŠ¿$ÌÐhÀM½Ñ?ojìýhcgôùÁÆÔR¢ÿ‡,5 ü„ë!ü÷p°±9Ü›Û   Òý'tÿŸ$¡øKiÍÃ.oùCZ©Ç=½"Q\eþsÆBîû ³¼ÀþAtA”Ö#§XÒš†©îõR” æa!úr&ï‚I€€™oÀš@§¯]¸vúøæÆÍ_¸àe‡Þ»ùSpÇL=ØS*Î,ôJîáÝ;!héÆ^hˆR©ª¯›VvßË[±D¬}*¿½¹¹*õbÌÖ»<#¯Y“#HÖ§ò(ÝKNF0¸ÓŠ¡f¢Ï±àÕ Ñ%uì`æÚÝ4áºÖ.xÿ>˜¼Þù™Gnÿwï¾{ËÍÏÀý7ÿ®©-7?s03s7Á7âBæ™P;Þ“WÍ÷â9©ÐèH`:Xr¼enP¯ã6Û:שúPúÞŸ`YÌ72Õ°Â1rQ•‘gUGNgÂøÕÛñÈä]¢”aNÅj±%zÄ.“°o ¦aßgŽÜþøÆ˜€WÁ÷}|3¼þà8Lß¼pèþÍŸ‚;f`î.øð4ìëf‰lí‚ó° y󰱶Ф©ƒ†+$õK©™@?©‰ôb«pÃ>7“q1)ʰ†° ÜŠËéÉâO™Ï„{ñ+Ù+ÉmâŸJª˜îdºš™‚¹÷Á}ï€Û"޹n‹‚»_O¾ >ÿàºíámð lÞ Ï|ö‘Ûƒ½›ƒ™(êà<,ÄwÁÝÐqO[D."F ”ãë/÷¶{@ J£±T‘ÅÐËx 5 ûö|ÞÜ ï€˜:W/À`&ájx6„­‘¯ñÌÜ×Õ4Û§aªl02š§{:WeRÖ <éD$-ðš ÷4ù9ʃ5¹«#0‘wÀ'§aß¾.øÌ‘Ûça!r=îòVüÏH8Ðê:~±\E¼ê# ˜‹@ ž ÅÈ4ìO„ù swÁä4LÍÃv€`¾Cl33ðþyø0"¡ªq¦á}Ð ÑD"M`ôÈ4ì›ï¾nžOU êA$­þ¦ÇÅB Ò`B ì ¤¢y˜œïwó`ÍEb,LMÌwãf¦a*ú°‡áÂ(¨.S ¾%I]HZ˘IЂ*X$¥œ™¤¼¬1zd³ÙÄwí׃y ]×®HºŠÒ<.0‰ S,íÞoÅÑ:Zv’–[ìÞ½;Aƒ;vàá-{´ògÑêÞfq戴Ë[Ië lÞ ´ s{`!JYìéÈg{c/€ yJ('[Þv’žâ«Då©îq€< >Q\‰_²ú:ÂXúua/À¾ø¦*zf+<åÁжöô¯@ç¡Õ²fæ Ãgq¦.PTðN —ýrÇìì¬'„äùõ#ô4(ÈLb ÑM¦E9ñ(™+2b©V÷7d Ku© UÒž¼…&ïQ!u¥ dTøž …t2·;ÄC»ù9èd¡Ý@M¬»WTK]ðDÒBÒB ˆ’Ae”‚G”x½Äš¼˜†½ñ— 0µ§'*ÅúÃ(œîÀ\Wœ¢É\DÆ‹Yùµ<¤«¥9‹‡/ËQ‚?1ÓÄš¸®; \žhîûÔ/õ¹—RŸJ-Ê”?@ª©j"v`jÐÈ~ e#HL[¨ÅÚ½ èX«o‡žQûd÷OŒŽó0Ù½¯"Ýgƒ$A ÕñŠ«2KZl&+B1¯OŽ}PEKÒTgb*ÔáK}ʼ¨åãæº‚×Cx¤kØbâÇ·´œÄ ‚^`°ø*Õ$ü—œøcé_õx²-²„ZšÞI¥kÊ÷ejù¦ Ðr@dªÞ¥“XºŠ=«b=ÞÜ|‡H4†ˆô|° E0”“YåBï%-1 ((pj •bD䬅ò°äl,R½É—ÒÇ¥J§~Ò)•œ>Êð\•O}×—„‚‰¨Ä~e·bÕz3I(žêXÁˆ2Þ]Öxÿ‡,bVÒXæ;­‹Ÿ]læëÍ[Ý xòÅMd™Ÿ*<Ô j‹–@Ì%ã*q&…TàŒ i"ØÚ’#Â[T¹H<’Æš.¶ ÕÍŠùo"–ùÀX~U÷ü9j‚‰Øm ‡£s ÐrgþJ<š”œfºÁTF!=åadŸ ➉¢HùBU¤¥_r© T—Å)U“º«yÁnQ=Ž[¡Å³§‡°rØÂZ–ˆ cFA­¤'V‹±¿Hd@n'õ{Qú’ŒQÿ¦²+®¦‹¬¿4÷WÑc9¯ÞÔ.Êñ¥Åò‡Òõ@ÔlN"µ†ïêú iIØÁž„-b>ŽñÑOkÐpÁh¾Lýf£,òŠÊ·žÔ^rúF»_,Ês’¨ðæS¥à©é!²“GOO8ßM)2ßK)KHðÁ_ªXÒB…@8‰c^$-‰‚í!¡Ijù˃´P)@ nX* 4:VÓ0ÉÐ&3”íúš´08@8@LN¤Id2`b^Hé'胎À|ZÎ1;;‹€„@ô†EžžˆKx7[®ú¡w;lN£¤ÕWÀLz8@„½-žh-Ô­gö.Ö;’–[ìÞ½;Aƒ;vàá!,ñ‡>³I>*òN£ˆ¤…§ø*Qyª{ Ï!ðG å}ŠáÔ ¹Äÿ{/$-\öÕ`vvÖÂÀò|€jÌd TaBH5°Ôhâ°#D=ÑÊ.¨¥‚xÞf$-èWä` ú«Ñ_ؤOªê%.[fü½4¦¾´zæO¥…ä¢Wûr€Vi)0c ^ ãZ;l¡¤U{îä6ei*NUÐaó§*OÅRÇ3Mñ^ÅBØŒ‚Œ©ŠëOZñÚˆcH‹y'p_B2Õ‚ô—u·/T"fq‰1‰o„ã‚ðL ëd“´¢2Þ2SÅ‚šn‹^©O1Qä”ý›þ%­"‡ÊþÛ1KËæž*f‰C€*£Ê ›S$põÑ|‰@@ Û?›Nª¡XPS8Ê­ž›±þœ*¤g.»±æK¢oõ\%¦s±Ê’­/e/®±% ×½HcÂŒÃjò¬U4VGy‹Ó8•¬|[d“©QUÉœ‘J(ƒ´D±Cü þÐ@Àv烱!†ùS8d.ÆQ úJC8h¸¹eé³Êd î»’ÍQu¾ù—ùžªïHUø^ DE0×ÖÀïØ¹zQ! æ¢Ö@ úAóe¤&A¢B DmHk™cvv;ðu ¡‹¤å˜IðuR"i¹ÅîÝ»±4رc¤…§øz òT÷8@ž¤…ËÞ ÌÎÎzB8@žÁ“@"I @ ÛHWŠñ,ÊgnëÒØuw#Ów‘˜½)Ó—~6ª´ 㺚ޮéÀ!¾HZbdñVµõøO‹IÔ}ðR»HŸKÚÛt‘U%*+Ÿ’U½]ÓC ¼´4KŽûÀžõ¢°îlú;.…kê Ñõ"TeÿÒTϤQe¢÷)®iâ”Ó"±Ü%­Ôã°xÖ‹¶xv»÷ç„(2–aõôBX³Ä²™nDÆÊ*Í ˆ~–´¤"EMO¯º·Öâ—ô{ä$I+e¿`¿É½eà^ƒp:1p‚!Ë”´ —¬{DùâŠYõ‚ Úãà@#}/ü´JK¹Lk¹%ÞLml]:3¦"eHZÑ{+n²ð¸_–ïû¥¯I…Õ³ó¦Õ±½q¥wZ>·(µný=puY;Ø u%-ým–øù_M¦…Ý©£¹ÉÏÚp R²G¦/½jK‘ÉV‹=±¾×À,ký,i!•¯'î€Á‚‘´û jÆÖ±cÇ ü¤…@¸â-ìI a¨ÇB HZµ*Çq€’V €Êq a˜@ µ•´ÆÇDZSQÒÚ½{7v @ |ÂZ%iíØ±»@ ž`||ü]¼GIZP†0º÷A?éOMêX=U…+±,až÷U-År¨³·Ub1hø;ט…¼j ºü©I«§¯pÉrüøøxÜEÞöU-År¨³çUŠÖƒ¨ ´¤…@ ’@ –-ò‡q’æÿo³9”ãú”Y7¯ò<Õ(s‡´ß0iV_NËÚ,ÎÃ|½á¢ßûx«ªî }Ù™ˆå œ‡õ–´âÃûÄÄ„JÀbå0ëã--\¬'rÅvD  ­ªJþ³N0ªa»…­û=÷¹„‘;VUm»¯Õúi–µÓJ˜ù™†©ªåi^GÃm² Rg]iµÕ,éçj—ªþ»(ÏVü>Õ‹ãj‰j±›ØÂ¥Sм®ýo˜X&“Ö-Ú‚ÙíXÚÏîZ,¤…ëÿZ¤¯âF™L³LVÎÌ7¦ —gÖú8Z2úU ßLôµ­d¥çèsKÕäVº¨ß 1ʤ%é€ezª=Þ"ƒÚ Ó:×B›Êm âȪþZÉP¯†£¶˜›õ½Žú<ÓŽ¡?{U¾ÙZ©Æ ëÕUÇÂû¸ªR©«;ßçCOîÍË„\SǨƒè”ú{>gš-õÚîkºþ=Ù\"‚~Zø¹ªâußÙûþ«­4´&ƒ‹–Ë¡+LfKí:³YÂ^àn; ÷ö€ÉV•»ü¨©Ÿ£‘­d€ê¢Ô×3Lj”¼<ë5Ÿý©¼ùŽ·¢|Ëdè­tiÓi»è5iáì ¦Žº‹ÆJ‹­JBÏÚæòV -ªÅ'ºHf•ÔмJúÁ­pyJßXa¯æØL<\ÔžÌU“7ZY݃EêÇ}–~Yš*VCº6J¨I?”ÓWú·äûk µ-vég”þË2;*_=õu®ª’•ÔÐðE¶K%k¹ÂŤbÅk…aœ"]µ…ðHZÁ‹~jõàÔz@ êË[?»%-@ÔHZ¨ äêÁÙÙÙ ëTíÛý¬I«'b||û +‰}è}îÆÆM·Üñö;ßóäsÇOXœ?ºcÇdr@øsØ}×ï[=qø©ý~Õƒ¨ ¥´f«ôcÇŽ¥£bû¸b†5¯£j%Ò Ô·Ï±æØlNjsRHKú»˜•V tZlW,SÍ륻º¾}Ž5Çæ`sR›Õƒ¨ ´¤…@ ’@ –-ú9ö`Žx—\tg6‘•ØYÒ¢r×3õ‘šÖ\LþT£>·ØóØç¹çy}›#­yŸ5§à2AIKÒƒ1jÝ–š¦W`G|Ê›ûèƒ}^ò<¯usÄš÷YsŠ/“¾•´âÑ$oÕü>în±§R`Žs–>liò«Ýš—)yÛª¹8êUó:öyê<·ÛÒJ&ÝW„ô‘"ËÄI˺dÀe¼M=­¤æ;¶ËXš£G¦sVù{Pi5·Û4ìsMÍeªoŸWÛÕ@àèô¹¤å3r®ÓIìUÍ­7­œšÛÇK«9û§hÇ´ÒŠjçy¼±Ú‘Òš#ˆš®é@œ`™IËî• W ¦ EÔw¸`,DÁMÙ"㊰2Ň£™£víØ¢ênþPÕlè§š{¾>õ}>Ñ…x ÃÙ² kn¥9µ^.–ɲ°´5Ý+/G¼ù+y=cÍ55ÏsÖUØçuÜFÌ›S¦ÑoU£S|™øBZ.d¬¸+ÙûÃǶ[Ó›B±M­y™ë¹´šO0À>w]sG†Uõy}›£yªŽ+ÂÑ@ô¹!ÛM©]¦ù±õ»\Õ» m^ «çâÚÖuÍÝ2”Óç[QfÍív{åó¼¾Íé³áb™ s1@ j$-@ i!¤…@ $-@ |‡ÜzpvvÖîk¬è´Ø>®X*ÆÇÇkZóúö9Ö›ƒÍ1Gã¦[îxûïyò¹ã§N,Nݱc29@ ü9I¿ëƒ÷Œ­ž8üÔþ?0Ø7m@ô=xÒÚ½{7v @ |ÂZ%iíܹ³Òš€ ùÁ+X¬UÛ9\U¹R€VÍÇ"R.þ@Sg}'©†ÅžôsU–V½Ê›ï´†…§þÌ~%Ã0|×ï‰ÿÙÌØ*ׄ¥½:SõŠ×-ÈÛá@ë¥ÄR«¹šì˜´¬±(­´¾me©37¦q¯Z91Â}ît…’ª§{R$Ý’RVŸf’h^Dœ-¨ ØHñkÖd›ðù|TQràw’ìÄVÙ736v¥¬ÔÊ[s";ù¼BÃTäüȺ+È^B “$(6™8dç¤ÀøÇÒ*á¬ähÕÝBjØÕD+’9jȾie‘ÂI¹cÏäÀÁ:¬tÕp´œ-b0â™T5¤Äé¡â<š}-8?è4ËêŸE%‹‡YG禒ϼÔM£ÌÏ€D»$léªÚ:gJÔ·c¸ÓiªŸ+Ô›a"~ô¿W‡*s¥µQrP‘îÁŸ…™Ú-A¹s&p9ÿIá “Œæ¿°oºYZËŠ{Üíw³éù~ø:L³’I±> Œc`i²ÕRO=¹UDÜçZl†gk”&ð5mÏÏGˆ”2ÝÝmÄă#¿õ¹Hò |õâËÀã¢q®°Þ‡ƒH¬ÎáÒ˜ùZÎZU+M3¼Q+®Ï<š6&wD+†•ÔßsÏL5 ’¶ríîö J#¥\Å‘´!¨Ñ2)Ü?æFÄl‹'¹*@,mJAß;=ÒågrÞi™Œç“RõcboðD¿AmX°œ ˳¤ÀƒRjqVÖ[êÓ,Á/Š´Âî‰ÊUÚR J\eAÆÙ•ɬÀÊÅXq-.)}7ÈÿHÓýt±0"ȵ³ÔE™£’-ã‹Ò‹(^‚*ŽAÖÙš˜9HŠd¬êº9ã:ÌnšÅ®nÉ8;}ºX;v-LŽb.Eò:dUcšÔŠ”1!oºåŽüÅ7‚]Ÿ»óŸ¸ûî»k+mÔ·†¤¿BúbЉmí_ñÇiöWåºr3Éåßs»V{”pIìâšMY~†w~àÁ®ÏýòλoºåަÇÔç+ƒzôù¼Ð<‘ƒ«5 l̹ì³ÈÅÔ"Üx0|œ B ÜÇçÐ-¥ª­¸Á©âVÉoZŽ{Øä76µýMðåªBéþöþ¼°/)ðº"ñ7‰ÓϺ°¨†ù³¶ªÏ³aÍíöçt@³S±·`ƒ«#_<É–¥r<×X#­âvGÄÒ´Ly.7|»]Í[«ØÞšZ%GQTÜ]ä.ç†ù± (0v's+m Ì÷AÞ²ux ܯÓLe¶÷Þ"=YҾݬb~”¹YT.&¶*Z„bõrØ×ÕÖn±A¹#n"î66‹"þ'¤ÜÌUÅ„Íä,(\>5€‹ÃwàfzU¯M°î\\ÇH€¤ôÅ#‡²¶£üdý/Ü\A¤€‚ûôg.œ#ƒ,Çgâ&Œ,¸OÐeÎÒ„#R É5깋š›e2Á°ì\\ÇNÜÏoÕ€IÏÔË^ ê0XA•ÑŸzsáÙx3á5Þî¹Ï‚vCÛRfËø‘ÀXñ˜§æÍ¾®¬¯ÒÔrÌmÞZ¥÷*©tºçx/õiÎ 3ä ë³ÊØ^w™FÖ0ñ²í`¦ÛtRùú’V1Ì(øjf±@j£pGvb®½|K+ÕKÉ·L§âèZ–b™AÚ_i)Ϋ:íYªx^Ī\G¬Xý9©|…¤EÊzªUѪÈ7ƒ‹¡h®-5Ó˜4„ú±ö BÔ²…£@ãVöý|qa¤²©‰¸ =ñÐe NL59<›!šé âü:ÙÒ›ÕÕ#_جðsd]³~6±î”Öê™zú£Ú¢¤/-M×_¼¨ ;<\—‹’¤é-Š‹­ìÚæa¨|°•%¹f¨vù°çváPÛ×bƒ*MWé< dUÇ™EÝ×ÊŠ¤\$$sîm4È¢âHå9ÃêY ‘iUذšsUšc¦JZ¼z̤†Êá0x64æ¯hi—O X8-“™\ôV°*½ðfÖmêA†˜ô3utiçýÀ˜l³Ç ‘HOfÔ¬—üaóK»ÊŒ¾’ÄC3eæa»Ù¹„:n]q'ârV¨Åü ÷÷ܽ—©ü ¯$`1Ì[þ¥Ý´'¬¸Ûå µU†Fb=1sÔ¿¤Er“ÎECñQ¯ô+'îŸ]ut‘„{…†&9(-á3UÉU21K¥To9›öùJ U¬P°gùf7âCîÞ+Nœ$M+ikJEÓ@€-_º J|ÊEϺf©Ü†=ÅïÀb«%Ó]§–|ûZA«-Rø{Rxn˜”ÐRÉUó°ÝåQÉüª‰è¢Ý1Ëwm´r…ØŽ"£d¹ÔȤÃ(>ÿ³ ‹s±?¶@NꉗM®¤W‰—ezqÜ«C}ôOµA›–›q¾‰ê:<7õfvU9Š8~¬^Rb†¡|Ó²zÃîLRy“ÜmŸ†©*fQjÅò©tlöv;AuÑT(V£' ,IÄý„/árÔäWÚ]9"?voËÞº.8"Aš€U«5mH|Ö÷Íj¹³xV˜–%& ªè ã2C€Pœ0‰Á‚u@…hXŸ{[2ô{2¨Uóͽ@½CÚ¹$y!]seWàLj7¼j¥ýIu8Èj×SrP‚ÜYj •EÒÎe#­À™ïdÉÂJi7»ž¿Ô“ÖMÃ^‰ODW  –ºô3¸ÌtÄÞZQ—µ2ÖÍŠ·¹w#ÍhF h2&Ã4MG>m¥ äâÂRàZI0m=þK‘ÝÓI«Z©%ÓOlØnú†–ƒnÏ3í$7üaÐ辥Ѓ{…ùޱvgš¡Ÿ,1 'ëéÖûäµ’%¹ÖZ æE’¶+™Ê÷Â}ŽðŽCY¥ [±0ˆû¦å›·åŸû•¤åó,É.oê™iͪCÈz~7Ï}@zûQGÀ‚Þçø7.{õþd%ãm¦~¦¹Îzrr:y¨6F”õÝDeI³tr í+k¡üfEçà IDATÞŸ5˜ð%œ-8i.Å  ÃQÎq’eÛÔH–Ul°˜šÄý!Å]i´¤j„Éÿ€*䪮A|èÏ(· Q3‡ !˜:Ä6]¹«C™ÑÜ;èzòÑìo¬>›W©IHmW‚Ýã#%ªîe¥«@#¹Zí™nìíü ·$æ\J¢û6k$bM<=iUsìD4K_¥Æ˜üYŒdþ"’÷†ÌÖ²gÚ`’q¾ìº&Q­ìm¬ÔÚ«ž’¦J+¹ŒÍtÈP$D«iØ›ü’ðTç¶rÓ©º«-º1ºM{R`ÿ%þ”ÉSæA³{‘<¥Ä:wZ‘´<$-TqøÑ9u¼‹HBIØUNÃÞÞ9,snx2aJKÊîÂÿ—zÜÞz>i}ú„ÔeŒüÏ\ôÑ v- Ù­£–‰,Ú!€°Õ±koÙÓ½›#%açóáv÷ËÒD¯Bìu¾Ô}²Hæ$[&ÚšôWrÁ ¹Gæ´Í$Újõœ üX\v§Ÿ^–j¥5!(¶Ìõ“3SR£s‹Ÿ³A4´Hýg›‡f=B’TCs•Fz7U¬µEBØ5Á8›!„]°3i£.%-CCó>Ks Íò\ 鳋XÒ%8:OW6usHZ¾e¬ñgï+â„T<8tªCh ³Ô0?’D<‹ A¡gÖ¾´%|4„á»Â» c”]µ¡§‚»*…M¾1š3~iwªZjøï¦ÒʘîËsjÉ«ÀH_°¹s®ºÛ„­ YÁq³YÃIPÉ¡#«ÁOiö„YOñ&3¯«7ˆ¦@‘&0„#Æ€1€3!¼"Ý`£»œÂ4H‰ÂV¹¦{oÌd|•/åDˬ|+ŽŸ&9Õ w® E@/ ËÓ1Xa˜Ú°+Z6†µœ­© ¸¦~úiU-®¹S§˜ ¬e`òs.ñÿá^¸±Ñ¨JC˜ûn¹è#¶ÎY+Ìu”/š0ZW•<^}ÕáÅ 1*éŽþЉgMÅ]Ž(&·5z!ÉßÈZýß66¿> 0  @:]eïªAÞ†CÁ|}ÚÐÀTË©z®4ÖxÁÈF*ë‰-Èø}nÍAµ9U½‘M\—z> l5²ZáWÛ–´Ð­ª?Î6Ý®BhÇ"”LØêý@)ÃóÑ4·Xñgg,hååÎZÕVQ÷Ùªêµó”Éâ!.$-[„·Ü”¹$Õퟸ¯ QoR½èd{Â Ý ð`c Ð8ßÚÑ÷{â;0›ÇçM3Év!þ¦•iz—eV@ çI¡yã/¤Ê‚ù‚š›7¼U wpv!ó»AÆ×%·¨»(‚bÝbðxuwZ}/Ð?­äÐY§ZiS?‰!-ºþ7]áI·^ÇÚ¾K ßë7.¶ìlíbAÇõœ$Š·çðLõ¨½ ¸é·|¨Ÿ#©Ãª$I«î†eƼ!–¨ŸsHí&ÉZ®srUÿ  붦$©w¢Ž;6“(ɾªÙ8¹UeUOuJ+MoáÛÒ#BÅÌ/ICé)*'-âeçæ#¿’#ÙX$Ë´ã$ÖSOº&NÏ|“&8]bÞÆÇª„´ò÷€ë|Z¹àÔZ,_J!•¥\]$óŽ%Åjr5vû-kÞÞ@mÒfqÆ+|&ï„4ͬ9‚IÞæmiö¥&Fn-5fM f‡°ÔÎ,8‡MÌ}Ûk!“xÏ‹¦eµÎövTXÒ†“©ä¬Y%Èò=?ª•ÝÞßÐÂ2¾Žf¬fDLVPVµ^½ÂOÔѹ ï´üX•§¼"µíéI–¾zfu±{RQ ¤¬;†âºô¬‚I‹EÉ©’ëƒZú)˜i¬ˆ!¨«ã`ɤ•銲,ß4(+áú29Ø­yÂ!7m¤åçãMÜØ"–ÐÄËQË`·¬“_}m‹ˆÅ’zrª¦Ç\“–·£ÞDZ)‹ìn´ÒuHK£'Ñ¡<ÙõÄôÇrâÏÒXs™Œ8³©qÚ«E"]¹K[U%W¶…º6ÄÀp©_Kƒä¿ ¡þ›»Æo¹¯°&«9o™øÞf5S’ž{ϤjØÃÛ6Å‘¢å„ûkø,êÁ …Œ #MX TcHc$¯°ïmÚ?ãZ,j‡€Vלœ(1=ØíðiثՑHo 39z×¹3œߦåò¹Óª]ÍIý[gKí–ûÚÀü¬@KiÉÕŠ¬o´øÀÄ*(¢L¹3ý—ÖÎ÷Ùi­ˆO‹Q5Áê·E›ÖrΧ陹°œv¡¨Ë(? Ò³ùÞZÐdÙðYZî¸Ñ PM‹„0.¹_”U!%F†,yYy| cö™€h±¥µ–’³óM²rhž²ØW%˱rR!Yú\¢z¼„,Ž Ä@fDü²—ƒ’e³ET³oØ%­:yVY:¢š7¶`êX”wsÕ‰ÕA·²C¼$³>s2·BØÊ͵‚.ªæ§“j^J{íÇFéH« õ û:?½ƒpaD›¨´UQÍõjÕͶcNÝÀLÆ„D;‚ ð)4] ý')}Æ:BËý+HöFUf=ˆ‡ýâÇ™r(xr óñŒfrâVk¢RÛèZ 5iÔ×ΤŠFQ3‹¡`dÒ ÄÁ¬vdcœIê-sw"i³—ä^G?î´r«úfG&ŒäT#ƒ°äáp·æ¹>ÌåŽfqf5w$|œ©O¨Uµ1pB(LÒØ„Ä`t¬Ìä2…†:c¤CEÜÿ ÷ïI‰·¤Ò…)ޏùž”’á©ø(êSzqh.Cä±ïo§9K qri1µ6eÔEàfRîµt>ŸôçCu‚õÓécÒ*Á«ÔÛNijj{%­–FÌ™æOŽü‡¶NÍ.ŽD©ŸÉñ.‡|–zΠtkñ  ¿/Vʶ™,nˆáçxîKªh”Éþh컧 €¦56+UèÃðÐ\§b0‚,˧•Ö'$Ë«A«È r±¬h¶@Í~ÈÌaƒ Ì©zê7AZâÔ• º¿ÑXɳ‹®HŠ VW6à‘Â’Viægz•°L¼lx]"ßgX`%æˆÉÍ©9µ7êˆD9jžµ&ùÄwZÖ³¨˜Êèˆú±´3uõc9gû}&õà2QOÕH–§ööw$Gr­4sãêÍT±Ò·¤ÒК¶zÃÜÝØ¨Ø,gª¨)\ ¢ª¾u“~I*Ý.j¿©öÙVµñúH)Ž>ªP_ÇÈ„ˆí8ÓÄ FŒ+“ÃÜd‰úÎ,«»´ëHÓÔlt’aµ²2dïÕ:‚š-/œ‹-’V9´õ–¬„TrNwé±½=RÐ-¢VUöD+×fšEzÀ®ÍRf>±‰ù2Toëa÷?“ú„Ì#N–v¾­ƒªw†j#ÚÞE¬G íKëAOB¹>|‘*”z ÄÝ-jQlJY7á3”™rD¢²1uCÅKCÑ´BØR—Ó̤« #.Öî”ieÉÔIÒrz Ž·€j7ñâöl¾ÖÌ}-&.Ƕ›ÊÚeŽ”²/†^" º¾PûöP˜K!¨/™RYÙ\Ð̤¿µ²–KX׿L©†´jwd¨<Í uÉCÞ‡õÌU®£²f’ó £Ó’¼;¦È|$M7|QnÅ€A¨â ã8L…ïIØ4–ô!—y$Ì·›Çó%êEêè⡊Èâ#ÖåTÒ"Uw¥Ï/타Rõ áÈm€X? ™B´»Ù™d* ÆÁ݉LŠ‚$÷$ =Æo9*i2dÌj•jx¥J¼ß2½WCÆÄŸVô_ìA¯„hâqë¬È@Õ’1øœ•s\„”é^CÜ©&Nímj:¡”€ôB:… wŒ “ŸCW%¬<ˆ GŽÈŠ&Â:õc¨Á~nNZ¤òºZ½ðXVÂYi÷À–S7¹9ÞUdOlÚy9\Í4.«ÔÞÚ!ÙÏÔ25šäFŠf;©lC‘S“/MLÃ^ƒüÅæ)aCvgbð®27.¯9Ò‘¤EJÙ}ÊW1ù9–¤Î­¨ÜÏéIH^–(tP¤ÒÞà×ì(dÙ…ßÛé’IÜlqÒR¨ª•À[ªóx&9¾ˆ‹›·9²Ð•і⤅I¶Ê¤ ¯bC”›Êp/ YÌwWaë)âlG£ßçˆE«•AC©T=O £Ð¤!•+·•Oê÷BÕÙ«² dqÎS£Lê¼5Ù*³ú(ïÔ¸Þµ¦ÆªzbƒäCP"šáò#-!}ŽN ¶Õöü=%îS4ñ×Pô©" (—Ú L²&¹E´TõCìeöq!R[¹añ'UlQI«Ú³@Huŧ))·VùŒ‰‹/iªÝ2œÎÜöÓÎ.HÛ&ÝkÞ¥´XÛUÊ7ᛄA„B}JÉ^Y¶œchâE½¿Ú7ª¨ˆd‰›•8SxuOlß³®šeioß'$˲2¤&‰ Mrœ4­È¹±¥Ó3,VÏ4J ¤æ ¥ò%‘3®IyÕIí(¿ Óm¡È|Tööܨ•¤ÆD69Âáû"¹¼×™V¦“¸'Š×å¬N¤ýÕÈžqÌî½Ì/Ï‹Yu+Ïòªj¤Csu07(/â„R³rŽx¤*8*7LO¼…(l7¨$ìS¨–ùTÿq¿É|7IRæ Ͼ´ðr(™·ŠkGʻDZ"iy¸ˆTš¨ÂRü©|®Z&¦`,ʘ¬ç¬÷(†1Ý­VhÏ–Añ6¡äÂYQ­œ§™çTö,MT#õ‘6‰ì¯B”^k›(GÞ†STåP—s¿ëz§¤U¤=Þ&­÷Y.4·¬%å¶‹ÿkZ _Ã…AÓ6Vs¹A ŸÏ8“f)ÅÍžÉRC%e×2‚ˆ0LD3ðœÔÛ¯)#öQ…ؔƗ*Ê„€EªÅŒç¡L˜K?Ù(‚"êÍî=¥‡Z÷kÆ©Ðîé¼’ï´.óÉRMÌSåТ73­ˆ \n3ZÞ’ËD«U#²ÃcÃËDxŠ ÒOBŠ22)w†7Cø^¦V¡$ ¡Ì§[¤OY˜ù|r9ª#L==Šõæöõ½!¹»=iõ«xÔ7u#¥×°ªåDm׊äʉ厡‹ØÖò=Z£]4cSþZ‹(bA±L¦°ä7&'†g!„ƒ°Y[I*“ò©„k¥Ò’n2¨½Ó ;?©Åß:骗´H}ˆ(ÎãÅëOýÈ”¥`´Ždü¸7$6†ƒ*&° ÑPbûÙ¥4b(LÃ^¦(¹§T,`u?È ;¾É!„á]ax¤§Ì䛄5Ki'˜Xú¡óT;c^ÝÛJã …)Ç >Ëql>«=Šò¾<#bPXÖÈ­_5wgÑ|ŸÙA’¹FJ}#±:I Ú€Åâ§i„MEºŠ:¡ˆ+A„HTf Àiðô._´ÍÛP°L¦Ð1*T&Z± vö¼¾ÂÔ¢7ÂLÊg¡dÔXvT¼+ygjRo"3QÛ³±„°¾÷Ӫ〙Ïòòý$ø[]°3‹LPP¤ËGrŹ6«˜j"o]— •Ѝ"$„Œóä&pT-Tq‹O ZHdtÎ+'#në2íý>L4Hd @šÆTiO/7ÍWÿ_Åm¡; ¾ø#¤"ãƒü1?‘´rÈRÄR9þže\Ê ¥yì|KÖD™*i˜Š¤…¡²Wëe‘ŽXÃ_™$IKM;/cRhCªi!lsî…ÛŦµ%”LYƒ‘6‡(î€i,ÕR>Qx"h¨“eÑ„Išm­•Ußš0Ò¯’–SW$Oâ?^íš³ …$j6RîÔ,YÃΑ2{Û± dSl”ŠBÚÒü)!(ŒÅðÏššãsï¥ê-›$-2„û­D™z…³hú¨9IÕg±>”÷›–+³¬ì?µìTÒFdHZ%vs4<ý1Þ.D7âY9MGiž@ݤ,šMêŒÄôí¡H*zw7Q9&ö‘IB‰:$IˆÊ¶]F×Ç ‘4ùj‹Fì%±\¥çÝÞÚAVÿ8U““`vjÂpŒŽAj'ˆ_ÂýªÌd ]ZJ'ëÙ(¬ä‚ò! »êØk+6±¡ï¥ê³J„öfšhÌj*IÔ4ïêÃ.Ø©h$&¡²[%]‡w9OccB!aj"ù ŽÛRž LCÌ—¤¦'!™E/l‰ÝB;ɘ¡´¿…0ê3iÕËŽôÅ+*>+fâ¥6‰›Hó'.‘FÕëe=–ˆ:I.Õ²rb“Mê'‰úxA€·;ïé'Y C©ˆ&¸ k¦I»N“DãÂf µEºv’ÜqÁðœÆ÷£ý‘ûpc,HZ˜²„a¦zµL¥s.·Ìšã—* fþ²$eXl†Ö;P³7I5Z¢Ë­TŸÆ©¡@ð©¢b&¸=IIBjp‚$$þR9 b'´ù{5ÂŒ»”œ M€5—Eiò­˜+]×Åbq¥—àI`X›Ùk³’Vq“GF ¤º …§Hñ½Þ)™Y|iÖܾ¤˜\e.¥Qí¢É€=¥&PìA¡T·&n‚|ì‰îÏ8ñ޶‚„ÑÅõ¼+ñx;±§“®"QÜî‰Ä°¢W*¹ê“öÚ|™šm‘ȳ$'þ”¨m[®” ”Ä „ürìhÑÊW¢pfqtKSv9òÀµUŽÄÖ>É…™8Ø$º®4¯¼Â`Z‹ÁäPjýA_—ìF¢`i5¨hq×föú6Ï4©žU„qÛâÞHÕY‰Ú¼P€&Ç&þŸm1V–äH‘[I)ÎãõÞZK"-Œ/I­FÅPÞR]gïl"ïª+g¼ôJÿ|ö@}mcÈßf‡ 1U| “É\²$Û7$ô¨Fùƈ;Ä`g„¤:Žw NŠD4M„'?KTFó-:•ˆPCHóî’F¬ÒHJ’POÔ8%›ÏK¬ s1’®¡Í«jä0^ …•“é»­c©òöJMÏEa¢·•ÇôÀêñd!þDM h#s¦†Û€6ïhLÓì÷8?hMR¡gˆWe½ ¹nTŽNiï8©Æ QA6¢ GdV$T.(ë‚YÓ8ºíB6cô7i™°Gö6)ùëü%×LçÁ"’bê³ÔLÞ¥²@Ún¸V§âÓßÛQ!:_ï³ 4ÓËFbžŽ8aï±î…Û™ŸÆÄlóU5DTEJ,M8íe’iÚ™†¨¥R¹Þ¢-7îô“4Ç)Q€½µRý ü9+“ŠêPvH‹ Î!ß‹8ÓÐìj¢‚›ríø8«ÜC ¤,Z8å&K²ÚåñaaSï½Hr›& /(¢Ý‹©Ì¸NT©Ñv½W¥–dkBY#.¨®Ì2¾Ç=‘¥®ùL¿r#²Û2Öi:6Ih#™À˜TáLd —UÃ*I*¦M’™Y¤µ°P=èËÀxb©X•8UDAAdaH–€¹[­dAãHq ß­ ‘Y¢köJ’´Êëõs;!9ÎPû>G‰,û"{#eò¹8Ø–S2€Äà¨í×Å!£ÙPÕ³2á•ÊÂp™¸IS&C¨Š ¡W« ¹®{²Ò¢ÚÃ첂‹Ð–%Ø\P{vw¤e œ¹ Yª»+pBQ!Kñ¾ßVÚJ¤ªà@MB©çÎo˜h´-£ ·%R X´­ôÛ¥Ò’Åm$eÚ’«,I8(Õæ“¼l£Çiäb¹†L.—j#“"rB]\ÜÜÐÊ«´Jy*ãNÒò\ü4IZa­Š¸@9ŠA &±4k«R{Zµ ÿ$æ¹OOhIÔ>°Ta_I3š”äW™«¥¨ø¬Ë[Dá+š“:ðoæ'uÆîêô±-¤•]_ÏÛ,ÙàN‚"TîKýêPã˜ì¹ð”{¡Ñ|ûC-Ôƒ¤&…wh÷¤™†üÖO[D8ÀæsE’žpÍu±)S­;1ˆNÔ}’¾JªH ¿ùKSaõ4ŠÉ;0N¶àBðùåD"ÊQ`[¢êìø#3ͤÜdPĶïÕ¼ÍGRñŸxB•²µ4fGqšT-ŠïUç0*°š ò•[’Jw<âÛ®›´ü¡tR–­déÊn[¬$Űø–TI…zô©¦"¥¢ÆÖ(HC‰ëÖu†_¢°i‰“̈â¿Þ³ŠtŽTý:Ñ"ƒ T ‚Ø$ÚG$Z$V#iÔ®º¥B÷Af’O… »è‘FջɢBf?¡’Ø’NTE”4•²}´*¡ë±$29ÿRÿZ—{¡+W€¹Ý®eãBÈeübbËǾ‚ÊvFiǦš-plGe¼%R’òUß±– ø+¢žx” à”жqWw ‰äK“ÝØ«|2-2•ŠžÝßpöë¬!UÙÊf…4½meG"%IÑÈ Ý §øuå&ßÒ•-iÕHûgQyUÂŽ\‚ß±Ñü¬b¤:“³QsâAnT÷ó4¿ØÊ3¢æ€ÏÞH‰ié‰%?i'/±¸k!™Ã2©–ʼ¯(' ëb®,*“{@ö ˆF¬qòªl™TMoª _Dèj"Ð6U;EPíÌT͆’)‘7©V•íÛÆK ïTyòiÕÏž¢Iµ§K^›‘^±¡Hó+Mî¡—H26‡&­QļÐÄv¢²Ñd~š0–•C[Ÿí0¥’©Cï¸Pýõå K¦Z˜¢Š3ZvKÍ5d¬Æ/).h}€¸µ½eé¼âvOVi&“Ø$:Ø$¯Hü«âËž¸íä=J;i[Œí@×s+Y&Kf!ç0ñl2(‘hYùxÂhË ©Bw ‚Å9£æ *Y*K»Åë½»ÍäÔ­”‘ïeZâ0uÝeºå5ÑÒûãoã*`®Eóhÿi‰ø]=ßøLÅa¤ð”MqcÊR¸Õ$[òĦÙ7’Ûp ÞbBa醫2(Hò1úº„ú½¹v> IDATp;Ë%me®éEî=æªøCÝ™ÖuÊáÕƒ‚û‘•¥¢S«Éîº@å#Üî©.¹ÈîâM!‘]:jÖU+–‹o,†¿¤ŽÚE¹eSEüTz•ô“”8rÄeCªeq}ȃä]9¿æ €"fUO¥[U`rª^ÀT¦’âøI§ÆÂþ›ÌDÌjÞBàU‹!#è$«ëÌYðBž`2E1ïe 7¤–åª~A¥)%*ªðxã¬Õ³žç\¡ñd¦© áte@┊›Ë=ln夵œ›Ç2±ûRC±ÆJ “ø4cµM 5¹s´KØþÂÔîã/HÏõ*hÎc‰È z‚‘ %6»{áö6Kl]æH˜BÄ„Ç^/õ.«–ñÝÛ²èr+¡Z”ŨsP. £V/*M/Ù­dŠ(Üm‘ ¤ ªXA m‚!q2S áIªeÕUï·â "b”Üu!6“@)Šú:ê‚OÔ‰i¯7A¢›ggB!²]žÊ|• 6yHêµ€· —Ç¿èU©§UëYñ1ÆU¢]1+€ÄÃ7aA¤ñ»•gß‘‘½ðIKIìä-Q⺠DÉRYŽ¥b‹œº”©dÚ|®/©ŽKLQ>©dNÑz‡”²32yw‘)ƒz³Û–?'JP%xƤ;*-iÁÊXl&ÉHÃÆ‰VÌUSÿdˆƒ°YŒ1(ªO“QÕ‰,Dˆ¬½¬$×G.€![`27&´å5áåפù†èšÍÅ×à¦iËí,@áÎeâ\d¿J-ÐiÌiùf}^NDÚbñl*d­u¬™Ô=b3TcÄl2‚„''ñ^!Ôœš©LP£²S¼Êd'tÒ‹!PNå{]eW;a+¡Š¥Ûsà•–VÕÕ'º!‹‹è‰Ä"!týv“^Ò¬%abFQ ±Iè « >hH»[Nôì°15:¢aT탰9©í©+c"ˆ³¢¶–´%îqšÙe–:,s³õš¥jDZ•d*œˆß…*4N=S(}ÊeÉu¹ +3ÌREBH‹B1d‰B$ s8*x8ñWDS·0Ád¬§p›“ÄwðÆå\paŠÙÓY:á’oAÏ9,ÖU†¬ŽNìv*ëgʉV¢îQø^ì1ªöw–K„LùT`Ó0Õ•© ‰Ë}#µï¨Ëç;-‹î½Öo_há©PU²Š±R_JJâçDõ_Cñ\ "š¼Bâ‰D޶$˜}‹ÙÓù0 ÀÇhç}¶Ú‚•„ET™®Ó1§¥, 07Lb¢/Ú©cÓȰ'!I¨š1t„XTÚ;ùˆ½ ér‡ ŽeYÊèAØœ”·Tâ,Æžë|#iµñœHÚÉ›8ØCHöueoþŽ$­:Zªøl6RSATÝÛTL"KSÄT8T­R.¿TªO È”~š¸ºâ !—tvä.ñ´E#FÁÕ3ÕK†ô¯ ’6$i Çfw=)s $fG¤’\Ã!$\ÄÂ$÷„ X=P1–•„#äŒÅØñ÷Ä»°ÃIvÑH•lâÕœêOæ°Ååe…/9QÑL¯²L¯ÕÛ’ØW•œ›­ícþ¨iMvsÏy‹¸/YŸ¥—XU ÒÓ‰KXN¤z'õ~¡ñM&jv7V"3ÙUHµ!i•À3q2*kÏze†‚ú1.wI×v#Þ¾i2I‡ Û1” !ä)c+Ñ“¢O[2Rš$ 5`›u!ˆ5œ±8ö†5i…/ !—§¹d˜Œ‹8"ª ,¢㤘̦⾠•õj×uMZUåb¯„Y¥·µrX…Îj9‚¤98µhÜ\Ä‹î0Uo©‹Ý.³ÐãØKw<¡¯kK´Lb¨…Þ¦Ÿ4.gâ\07s¼‡l"Þ eb^pÉAĬ"‰kª¶ ÞÉjÛ¶ñãU1“æI#uÏðví1 †=+G!p”Æu½ÓLöO0—Aà Š—©Ë„‹òNóLé]¢Å¤b/X§™‹«M/[èYãhªÄF!.æYAJj—ï-Õ&”úfj”0ìÞ ²TT!>5ÙÈâÉΉU ‚Èœ‹¹Ö%m.R ‰o§$.ŸÎª'W‰×Qq¬ F Iì^è&ÁiIH ™ˆ–Û)³ó`Ò»+©pã4®Œ¨öÌ[zõaH½ÍäAfS±¯`äKªpçƒÄ³mW³`¯Y*LKÅ­R(U”éj’ÊÀIËÑ™éÁ‚Ueô!¿ ñéJL3TMù4‹@F…-€JœsÅÅJkNÛ§QHdREI Bþ'¾ùíÄʼnDÙæ34vݤ˜Úv_’++šˆ“Û5dg‰‡¾Î™å4™¬ÌD“‰EH»càÞø’»Tˆ]÷ç^M|™?™‹8¶½ü°v»‹öþ™âXœz¦‰°g´ÙVÊ| Õñ¦I?Dq‹²€¹É¤Ï¡Ý ÄQ ]qê½ÐðN‹”ÕÂZÄ \ž¤HrIrE³¬òTšçÊë]Hà<õ†ª-C%'Qí‰[E¨¤-1K£ 1€hñÈ„‡ lô 62§Ó‹¯dÚœˆÆÂÑ„e³ù²lÔæm"¨ÌѪ4=Y˜;!nk¦Œµ!³ƒÈü¹¼_ÊÄ,¡«ÀLP`Nz ì djšÄ'µŠÈrÁPE¾ÊDhÄõ^úE¸`_šK†1ÆH½¶)»†¤Vû8©U7ʧ}•ƒºew’è„Àð¾0”.`îFGðÍâ¼õ0Ug6!Š ¹ ›@6Ï/{_Òf}cÙX· »°:@Ö2¢›F‹ÄŒÂz Gó¼²$’SG‰Ïz=ÇJ³vR ËÒUÜ.@TüMâ"ª[¥D€ù8L3ˆñ­X›‘ÿ>`D:ÄÜK•"§"`å§øOICAP8Ûqr•4<$}òˆâí –F3¦6&6"e¤”`|soí&¬ iõSÂ{R]=ëKÙ$fb6•IZ¸ ¢æ“£$aDÇß̃öÞ›/PT4 ÆÐ¬´—°”§ÚâßÖ«mÏýV|i;ñ!a;íþ¬Š±VgSËcÚÐÓCÆöî±u{,å0âN"xû9–?bi#®<’ƒiB(È…’ [‰Ê0Î×=ZeB~AÅÉÃYâ«-7RWE¾Ó%Sm¶Š¨”¦7r/âf~õØÊœš¼“*ÚYmn4âßðgMáažà€8ª¸3M¥UÓ¤dFÕZ>͘rz-½õ©ÍG¶M&Ó @BU(Ñ Ò¤¬Ùã’xÇgïœXÝ£œ‰ßdY‡âè©(ÂkË„¨ l|¨2I}$>AQ\àÁØnžÑp²±wÙÒbh¬Q¤Iá†$’„øг‹²ˆ¤°ÈÉÇœ#ˆŠâd(E*ÄÂmúGPÄP¦Â̧êÔ‘6¨Œ‰Hu»zÙ¤eECÞ‡"nìJ+ïö´`HaÖWÒ]›OZ¨:ƒ«&RÏ/˜µÑ`r‚°ÛPÏ©™Ýˆ™àC1¡Ò8|ÌU\î’$‹pB a¢7ñî¹°ôœýB2çHOšI8 'ïÕâxQÜÐs´w,+ŠõlOºVB8yv!³™É¤7|T¢!yGʼn'q×M?*;«¹>%,„–³'{0·VN£o‘Òû'“59S¥ö,ŸQF¾µ' Ê ÒI ç¡:ˆEx¹]F2#Õ²>MjÆgðØ0½Í†ÕApÛâ¯÷»w6½Û#®&Ñ~Íhù Å’É”YãˆNNdÖ~5AL†DâÜË›§X¦ÕãÂØ[9’ªóÆ÷+ªQè„kƪZVCÈ ëì="û_›““ÖØOn…ÏÔ3iHÒ¸J!Ó„`0Ws솱çsì`7s¤•)¯„o,XaÎF¯N†¶&Z>i™T­¦Kõa4h‚„P¹"úÐ8ò] -_äT•Úr?'Q-Ce­—,X¤+ú®RÁv §CcX‡&sGõÒ'i¬#±,˰æö ”h;UEŠ#ÎÐ$§jHƒÄjLFc%cÊI2žËíDê," ØÑý½ìÔÂ({C‰ã0/0©ó|ªîÉHRaŠ ÙÖˆÚÛ,ß.—z‘fß9•´hw^¬XŠ2¶55½5q`4´Ñ0X9PÌǨ ÇŠàITi7!‰&G?$P\w .G||#–´¾®mÉÛ{ÂklÍêТ ú^¸=¢„Øè޽cò:’¤“MòiKÌ⹌$\jf¢HJÒ¹cíýÚ‰ÛÊ)“"Z§s„©X+-czKr*kÊÉö²ÓF–8ÁŽÈ|~9bƒ¤ˆyA‰.q]èôn¢ƒq´嬛‡†$Ë?u¨ÝŽ.ùš*ë$ ‰ìJ?šk’w Äfò»¤Â¥4þ/žLiRûGIK’Ô±-ÄÃMì€])ª«£Ì AƬүT¶ycqÊÝ1ÊÃdŠaæ–‹‘WbI®wUÃÆ}ËŒÕzaó4켉Y—©6£ð”æjs6î‰>dD*\/QŽ~böe]³“Á;z†”ÉB(3œm'È‘ £Ie µÅhÊ PÚõb+±ŸÎHe–_6$u€J6Ð0a|ln'iäÒ”«iT«~äîéiXbQeÂ_ÅËL q›Ú¼¡6çñÚÓû1fÀÇÍKœå)—7.Ÿå’è:*&’äEp"£©ã£²ZÁv2£|[®Á‰ˆu˜¬;c¸Árkó†—²ëqá0ÊHXo&­(jì¹R>%/”K#< C¯‰ô¯¢!h³‡W»£VS™J 1H)ÏR÷cf—QJîØâëYùO»Z’øŽÈe)iô¹ÐDLù[p¨’œ…Ûb°¸.m$íͨP¸u—±­`Œ#hÇ"‘nX†KÚ).Šyl†À…Ɉóo1LÀ¹mAìj_k1ò_¯Q÷ÂíC0$ÄŠ ”³VßȆÓm'$0 |Ƀ1ùµùð Ó®ÉWTˆ³•ˆì‹‰½GºŽq\´§¶|–ªÒ"ƒ`7¤šÌÔ UËD\,4—ªƒºß±û„´|tŠÐLyÏ´ò‹îÊá–H2š±$=g5ÞWòk*¢Ž{M´¼«òHï·%wŠ|RS"ìDLù¼Ï,°†éí„æ ¬$ÝNI”]ɈAm>s.Mš·Q6 ;CcœÊ” TÏF’ív²+«ÄÿeëJÜc2ÎÚ>zET·¸Â §òz×d’QkJØQ ËûqÃ$UcšhÈùôÇ ^L¶B…“™¹e¦…¬ÊSZ½\åiå¾ù¨©¾‘xVÃTû¢ßÙ3¨8Rÿ”p¡•exIÄ­Ð/Q¢Þ8›ÑZpâÏI¢Dœ=.G;à ¬X#ä¦RÞQ‰Á^Åþ!ÒÜ%¬y«9Œ¥"ˆx‘½×‰µv¬iG!m!ì^T,Ã"½àÉ.YŠÕÜÒXª‹ës/Ü®ë&×.þ}ÒŸŒý ˆY¯’®T„‰—ŸTóòñG¤i<{,y˜0YDXƒ¼R¡x»xzËwn&2½w‘ ¹–êÁšær¬Jt«Ô†BU9W›[×E æàÏž|~[ÉFf¬"cªUlŠ7ê¢Æ‰Oá(¸Ù2é3BvO„¤KæÎ lØßvÒ{ŒMÌȼ—‰H›È€w›¥Ü«“‘&ze2j=Ö÷–˨ÂeM¤±ê’½âbïŸXðÿgïíaë:²lá­Î1Ñ3Љ“š™c 0ú)c“ÝØO ·Æp(}eFƒ4`˜”½†L“ñÃN:ø&ªœõ»jÕÚõsι¿¼2F0™¼÷Üsï=§Víµ×^‹ÇŸ¹•Å#bV¼'Òˆ5&EU‘HÈfÆ‹"KÄ0èlÙܯêZòuÒJ út÷¨(|8—C,÷ øÖíww9§µ%œø ûínuάw w°æD ®sª=_5[–YÀ«Í :h~>L&›t4#¼ßgAvõÒÎJæÊ6X1/Lm'W0iL÷ „CÈxĆPÇCßñAã‡4ƒå`’˜É˜,ÖGÞ§ †f§Øñ–§<Ê&î‡i€Udí!µ¯ êÑ¡‰é@–ÚÇ X½Iýµfv0¢ÛÇ b‡Õ¤ 9[Ûi)A¤8ù°u4Js³L·'Ó˜»µÂVxésÞxäo²¨rûzbÑí.¯°çš?8xŽ­s¹·xö0¾…ìéµÚ§Ñ±¨õu …«MÍ›b Yo-….ÀÈ©M‹‚Íg‹¾TÓûU‘ÀjÄ#)§~µT*\©3dTàŠvh>Ýg› ˆÜH¿ge®VH‰—Cå˜bIÇzGÙZ…ý gjÑ–³M¯,И:‡0 ‘—Fù9µ®1³ªÆ„{tôœ¤f\ɇZïçÒƒÐ?›_ÛêÁ9Û¥9;r„œ$Ж©ZÖ/Ý&ÀIj"¥ûBÁî%‹a¬Ðû(æ Öζí7Ò1%¢b+Ô=ßpþæÔ®Ä¼ $²P°¡¨*S‹(~pm„•ÝŠ³3'Í:'' ö ÆûRöo°‡â^O8~ÙEk(Û!šò±üò)ÑÑaÎ,Ikv[øäq!2 ”†÷©¼€>RC™“­ž¨¸)€Ç×p•Ñ5’èím>KÁ ºJS]YMi»Û"1ó€í’Ö’‡[²¯uûÔÇZ™g[ÁXsåz<¤óyºÞ ³ÓŠGºtyÏÁ;ô¼œõŽÛîìÎ(¡²F©4ë¼sÏ\M ÖnšMÎèÕÊçÍc³C+žË26ôr|¢Gq¦ÿQ$Cx.þ~‘Sx+ˆ(?‡ÂÞ‰k5kÑõëÚ`cÓÛ{¢Oñ±p`Š}ûfØŽ ¢¤í2XE³Þø–ýÐ@¬R2”ŽõY9‘¡T©ÌVñõ7Ùa…åeùWÙÛçÈ]Öªn¥µ~Ïÿ¸©}ßL‚bͯ`¤Ï,ãñħ“löºFbú¤âëÊÉ T 乎}.ûJDáC=Z8…SÉÈ‚…¢9ÄT@¨¨otùNå”ç`FkHȾž~žgžPiyQË7¸‰U™DîYFÏ…N&Mw tùä‹è‹Oh ¶DíRX°Ûš¯kZe-Õ¥§i1åZ©6ng2ÕÙ—6ïжã{‹*ô£ðn_W`·' µ¹þ&ÿì¦Oæ–Ùp-µ#[ûG½®gn=LÛTºÑt®FŸÒ*Ù\e¦ Ö¾6½ªÖÔ`ÆËMe\$•k”‡s Ó_º…‡‚µ‘u’õÍÅ]Ÿ«˜4X)þÆœ°±ŠVþg&Òr´¶ ÷ü¡qZqgsã0M\$yÒ·ï+7H.(sL%;ÞWüÆÁòœ\É84œkE«&Çk©ŽŸÏp =–´’N÷d«=ñºÃzO­ˆ56žûò1þéÍ|l°Ó6“î›y“¸ÑïkœtV7R`µ )„$•¶œ¼Í b'šaQ¶³UZ²ºF´nz× =TÕaòµÆ¤í übÍòª¢ñÆ1”[_ÍHQ„Y]¨™†¶W—om©' ¬Ž ¯YQû…Z°B£a—ü“[)vkô`½™]é½ù­}^ËžÀÖã¢×û zŸ‰ßܧäW=7㦻—´ÞÄ Ù´”ÑIp_Yïô¾‘"Ð'š.Ÿ*Ј‚Û+Öx?0»HÁÈíµ¥Cݪñ:\¤ ¦ò¢ÈKô:––p9ÈcàÙ\мí³;éAxªÌñ–¥HËdøáÉ6²x/ï)\?5ÿYÁaóöôŸÜö´MÝx0g›s§/›¸4§A°rð^w9ZÙÆé7ìø÷ çï6Ñ÷Z“!ÜöîaJõPWNaކFÿ‰_¥“ß(E ±C½³-Ë/¾a +Lil²$H¡ÅÐEpÑ(°(Æ9—k‹¸pÆcñs`XÙŽäËîë¶Ö`]9·œñX3âƒ*ÿ@šsH­Äç¶°ª†Í>dBGaãÄ­Ÿ›šC%,bÈ3!Ÿ|Õ9+„#ñ4¾%²È¡šÃØšî& œ}äƒ,­[Y®—­´Ü;~»ÿÔüæ^Åíü»w›xnÕe óŒqÎÈË…V?Ýgv³{Ñ®Î%±êƒBLï[å3{&ŒÊêÎ…cAZÂKã`‹eŠ>Vr—±&Ö1]+6Å’{ÓUÊ$˜O( xìoË®KoäËp˜IÔ¥p#2JØ·|›L« CÄ,²Ç˜³XÙ=wÎJ™âL±XŠ9Tþ¹ÜÙªôx6î+H–E˜–Ø@™Âh¿Yg˜Ë`è º÷£ŸËF¬»oi¶-ÛÓÚÌ2¸!ÆîÍgÝŒ5wÄ%ì£o€m¨û5óYS,\J{™@å°­”=­Ð o #»ÆØS+޽t™ky›ŠU‹Ç щ±.4 Ë:Ãx]bÙ7¨0Å®0Š \…øeªã¹¦¶P‹<} rxò­(^Ï}#aÅ„2Š6–HØuÙì3ºG¤HA™ZgöÅ7a˜Ü«â.¥¨«ð}nÖæ·Ù«`ó|…‘\NAÍÐÍpýbi¶‡M»+¬ÖLò›¨F€‡ûÉûƒ}ô³ùÀÍ:.»µOlÎX˜ï¡Q…4ÞR|'Lå—oÝ´½Á?º_q•ÿ«‡šmŸÃUf€Rú)}#÷ IDATÐûmfÌYS…å`!G¥BÖìYUÈü¡­]„§¦ª¥Èc ZËEÉUIÙÆIõÜÊbœ*!Öx7“ŠHK©À£ˆ`v4%ÆG¾ HWìP7=«Z?,oFRy4 ¼½tK=¡56ìµu7ÛÂp³—šmo—7 ZûϤù•ep»©7²&OØ ’å¯ï¾\0tˆxü–bZ§á»#­»ãV欯ÆQ}špr†#ÍªÞŽïø¢‰ýwë| KÉÚnv’ec¤Â«©øý 1›Åk=Wi÷©ÛŽ‘§ °ÄùÐýâuY_šG˜Yâs[¥”R â*æÀI*ü(L2pZµ§·I.N–k5VZ‚ÑYp*÷+¬•§Ù,/ÕØY§SUîG«ºÖµ6g­Ž)”Õíà§úL²¼eÁRpåöaU,@ëwK>}±÷ u°µbvï}ä꽑Ëù„‘oðFnG¹˜º Ç,ä‘Þ¨"ŽÞÅBĉ,äQê=r"r#OpÎiSyEϲÄË#©Í¹Ó^ÈñùRäò4ïÇõP ‘Ëô~žÉSû¯D¼ÈUEæ,Ò+¼•Ëô“«AäVNNåNÏímzôgòNä2½#ÿF¾¶‹ËÕWò­Èå‹Èùú…ŸÊžÒÜÞʉÈÕBÜ W(>“ŸDä…|s*w/ä›c¹äêßÏ–ûU>äê|}Ÿ+Ïä/¿Èçoår!îgùâw"ÿ&¾•“…8}ïÇrw,w—ru*'×òôTNNäö™üå™üåTNîäø|~)Wƒ\½‘»yr*'ŸÊ¯§r÷N>+òF¾þE>×;‘[=ù;9ñßÊWƒ8ýÉ©œÜÊɵ<=‘Û·r9ÈÕ±Ü]Éå ùNOæTîâ>“wƒ¸rü;‘Oå×¹Õ—¹úY¾ñúùëÙŠ\ÝÈí©œ|"ÿ¼•“¯äÛc¹¹ÔS}+—§òþDnã¿ïNäVd¡õ‰Üþ(×ä±Ä/1¢Ú¿ò°Ð«e¹‘ã!Þ€‹S{wñ»(ñõ†:¾‘'7òdÈW]´ñ½äkIÌÃäò­,NâÉ]œ-¦p@W×b™¥i1osïfy±¡²a™Åùc¨´V¶:Ü+í¾ÌîíÉiûe.A×Ú¯I¹^«wÙzpV±hNåT5*Ä˳\®Ú’c¬¸ô“µ­ ®ƒ ÁA«Ìf_ÝTÇÈ`BåsMÆvl{Ò¤óQãpŸ?Ãj•¦J“Å}f´®Nådù“üUö;ñWrùN>‘AäZž>•ë…¸7r÷L~ÒjéXî~/ÿPðû³ü›“ůò©þû3y÷…üìdq'Ç"r+'"—Z“ý*Ÿþ¯Ãâ[~#_¿‘/ŸÉS‘ƒ9Yh™òLþòV·rò6žÆ•Èåµ<'‹·r©uÒ ùæïò‡;9¾‘Û_äógòô…|s#ǃ\iÍt*'§r§O<•»å_¿•¯D¹z+¢U¦žÉ‰ÜŠø[99ÄÝȱþ\«1ý®”k­i‰ïîÀ^W¸„Ø¢ðFžÄï=]{"— ÆÄ^f2@kkæ +Çwæô®ìm~¥‡í¹CUËÔ‘G³é9×U‹ÑÕuåz.?ÿc˜û uáúO÷Kþ|å“ñ¥0½¼»ªz(ôHy7ïí¸ÎßuóÉ·„¼·õ=ocŽªb~âœc±üŒÛ?ƒ5_`¤÷ —X¯…ZA¿dÊqîšUZ9q•ƒ¡+•öY»&îF’µŠâ~›r; BAÆ"E¾q£×C1ÇJ¶ôeA?¯ïx{*ÚL,g[ŒRˆ,Ø¡ õ%ËóðÁþ"'ì­Uô“šj@[¾74„âUŒ|µ.rß­a{‹Ïþ,ƒc•Öö@Ë}œ°AbMÖÏpY&›Q:Ò¸õKþ™¢ îq씌ZæÇ IaÓä×µFjê¹+×Á×4 p²“Øþ¼³Ë–qäƒÝYŒ»Â>•§‰Ô¿Ù¥ûåáP>ÈãûDI4¨Ëº®û,ÂæÊþ"'°7ĈUB/Ozú|>0òZvò$pÀ{ üÀk…#3hU ÏÎÉ_£ôdµ![ŋɊ,Li‹üIÏA-ø‘bÊzCÌÆK®žH¹+d‡½Í–¹ž‡¶·SÇÞ0ŒÜznkƒ§~ùÕ`“ø·%ÐÚ1D¹½v¿y™0K&–…æÏ÷+'ßò­ðaRŽßÖè5ªûSöMÚ3gÞ’9M¹³§JËqþ/æ¢3¨‡8sDKšÄâÆ˜×Ž@GÀr6TvDŒ‹0vÄ€‰P­"îSsŽg°’”p` L7x “ËúHÄÕtWÌt¦´0 ô}ú‚ê6†®X:¶ Ôƒã˵²CÇ#Él›d½ðý`ò½Šš;žæ%ç[»1×oÖv‡ˆG­r]¹»Zz;+[0w_êWkew­ÙÓÚHÛÉ­}œÅ–ÏðAJ1¿ö[@Çhò) KOƒmoÕg W ƒâé Cs{ ©ùÄçpe»zé?Ÿ~åù)'rÛIò¨E’î‹eQÚ$gòÓ ¢°ãÔ…’ø}äd ™ÓFÈ©¼Yˆ@—¨Í¹ÕŸ«öLDžÉSí©¼ãôä™<½”+ΉHêKÝŠÈ[‘ÏåÝ/â^¤šÊµÉt)W q/ä»_åÓ¹äJ;aoENävy#woäkÕ¶ r¥Ý¯oå«kyz#·äÏäÏÚ‘Òƒ.ïTx-Ooåäqª\ˆ;–»Ïå¶Ö.åê|ù…ü,r9ˆ{&Ñ“ÿJ¾½“ã§rý;‘?É_õ‘§òþ­È¯òé•\ªó…|óB¾{*×úN‘Ï”køý,_|!?9•;=á§rý™,DÞÉç¿‹âþ»rü'ùër>®ƒ…¸;9>–»Ïä¶ÙNåä÷òS¹Óïî­È·òÕ©œˆ\ªb0=-´ø(¾ÑnYRu¼ ‹t©DP¿YýG¼Òµ´@S–.õ+‘ËJâ«ýªEC†š;X¾hŒé¿oä ë¹÷v®OòˈkXíu¶kC7›{ ×¢sÌEÿ…KÃêžõ´¶”ÆûÑeh-Wª÷·]®£Ç›óºÎÚ/ùN½å»•Y÷%æH]}MËØ_5ÞK#¥’Ç˶„ذSÒ®5ìÉ[ßrß( èÐg²é!ÂP1l„<±IðÚb³%õ‡ŽûC,üã˜G–Þñ«Û±-ÏE!ô‘Ù;ÔŽE2$˜IŽB¶sÓŽ=àS=ç BUKL-ªÐ³Ü /"B˜WD’ È®\Ç£2¶³êMƒöBêèj©ë­üôªd—Özµ—ŸWäªÛEùï—1¯YV¨ì¶¹n?@OkÏguÝ^"Ð’Ýf¸>7ëâë™ÒNâû—(Òó^ëJä}ë6s£·´ +cL}2û њ/7LÒâ,àJ‡í+«\ϼ² ÛL˜²CWŒÄQjXLEî 5Á ‚*DoŒ»\BZ Ö¤æ¨Ѿ”¢ PHÌ.‚l ¥˜Çé!÷Uš V;ö‘*<é¡Ñ,I+%éêˆåap<µ‹˜ï`XQè7üº†Ò¥yÁûª³[æ¾j¡3aäz«ÁFÆÜzð6ÒŠë>w>hí¬^ù t›æ×F²öøújŸmsƒÖ|cÊw¤ƒ­„æ¥)Åý™áÄ~P­Â±ðÔ)Tý¾Z²iê>ÃXyžé4BŽ÷Ê wÛ÷¢ ©J5,R3r• пµ8»IÊ£E„¯â¦îS/ XH½‚¦ƒMÑ=l÷ Fº *:æ5d2<ØÝÅÉGãöF¾ ç"Iñ…øƒ‹L,TH¤x„NÏ™aÀN*úXP&yž@i‹î`Q¹Òk,n­‹ íNì֧Ϋ,.Z{±õdA2êL]ÄKJ‡!”ñ̹ћtØm°Dk4‰ßÎ'»íòÑ/9<ÑBìa’Ÿ÷Y-+‚hìãv¼mT{Â+”§Ô™ÙìÏÈ…¤" ò°WbÒ“y!&ލF᪋ë,ÿ \™ò{Ed†Â†Òw¤áŽÙöˆ®¿QJ¥¤­÷¬Ç´ä›£4áµ<¸Qg¿<¯èjõàŒ×jùƒaÃ>F¨ÝÂñ¯ !v‹íl¿uŒ¯FIJýÄPÊ@„eʃ óõ ¯ªüª<‚Z´‘8´‡RT¸Oö€dHïQô€cD' à‰cÃC¦:ú:ë‹çxÇS·l®ËDÈ=ÐÃãQÞ%¦ÎôA¡ ¤v‡ë<Μ'É&ý…å[>‚0¬,ÞÅf ÛÚ\Gßnp†•“C¬Íœªë¼ 3s›Î\½Ûí¸ñkä-ø.vۺɊä©Û°ÍÍ>Ô¦42®_½TN~vAìZ2­ºÆr­¼†‘ÎU$3§*õ…çµ[lî™Ù,>Þ {âÖÐøqø¡-¼ …òäëÙŸ¢æôzT Z(ãÈAÃ})ü§ïýƒ<– œ¼…òì"[ 3Åêö¤ >yfQÿAËGY—‚÷ÈU& è…R‰9å‹#•ì9À…ZSÂ9/68&!Y( kcQÔ["e=Í›ÏÕm¥’h\«•G³Ø®ØÈ¬U¢jT/0e kža[BþcÜÃ>Ùö»z|ÎÉu)õ0~Xgî«0O?ǵ8Ð%•—TÝ®e¿Ê°O,g§~‰•iXÏ:¬¼+®Ø"CŠ €;7ЈsÀ•¢$éàý vàÊŒy?­b&áÝ®p¥°æ;tÀƒ§¬X1¾XR<>B’,Ä*žýB–1º\áP`ñ¶³@8ÒVH ÉÝDvÛbÔÄÊîZÜÐÐŽúöf¨$ýŠˆj߉d«Yôú C2ßB _ÐõœÑ3}Kîn‰s+…FN¼Ü–1æX‹‡’õ!g±ã/ªç^Ψ —µYt¾#þùbôr\´È÷…‘°ÈÞø¯OìKt@F·©~Û§ Ô`ÂõÜ”k‘«ÓGïå‘È#žPþÐe4ð Ã#'á@är¹“ãS9y*×7òdˆ¯+?Ê¿ª‹„ˆ¼c²Ãp"òVä.Úa\¾ã÷òäR®œ,Dܽü(¼•“S9ùE>?–»9~› ,DDs°RR×¥“Åÿ9üî'ù£ˆ¼ïÔÂÉâ3y÷F¾>–;gÖ®äò߿ʧŸÈ‡7rw,wŸÈ?ßË“¹ýDþù‰|øDþë—G'ÏÂO÷äKùŽ.©«kyúN>ÿ“üUóù½þê­\ÞÉñ§ò«ˆÜÈíïå7rü©üz'Ç_ÈÏoåòsy—>ÑĬ¿ËN#Qyý‰ü×ò¯ŸÉ»K¹z#wƒˆ“ÅBÜ¿-®å©fqÝÊÉ·ò•Èåäïú¿ŸÉ»GÿíÕãã[ùê…|£ŸÉâ­\¾‘»¹Õ/åXîDƒ¸S9Q—7òuÊ$soeñ£\'_9•“y2ˆ{!ß½6í—òÈÝ„'7áÉùRíKn“ÍįÀ2X9 ? ½z/ÓEÛ”t&øsgzbPui3ç.“1 ©ÕØ"èâŸG"4ñ`1ºž,ú‹óˆHm±j;£~ƒ3¨%AaÓ•ÖR…ŽÓ¯ý¡-5“±^ã0ŒÔ^ãZåË mQ¯'z§nw9k"дxg"¨xºíj@Xì`fàV(#ÓŒÑêÖbp.w€˜îƒ À(ûÁFO¡Íƒé%I,œ2„÷©ñ «ÔןCqo§ Ø-÷>})ì¨%Z1nU´Í¨¼ó( âHµÅÓ^”ªd³ËÝ,!¹ @B †ŒŸÍÊ*zKž¹Øº—¨Bo¨ÅRCèì¥è+Çä¢}UFa%†³&ô\ï¶­rŠó@^¢e-´[¾‰.³G’7RÛ­“•Öš „ó¤6î q°ÇÌ!§ø¬6yçæmO\çÁó·3®M –ÐB[ª°¨**I[K0a!Ñîà…|W}q#^\±ƒËY_jøVàˆnä‰nN“a îLzÿã£?~xôXÂÁ‹ðÝgáö©\ÿC~ÿT®'þùðB޵¤»“ã[9Ñøàï’Nò[ùJ½ ?•_ÿ*z'Ÿÿ"ŸßÈ­¾Ñä-y~z~z¿Ê§ïäópx "?%[#µ[õQÔúÌÅh±ËK¹º’˯äÛŸå‹åú©\kBqÒw\}q!¦ñÊj~¨ÑÉú%žFÁˉÞD_É·É%2ž‚¾Mõl|›?pMо:Iö"±F z´K ôº‹YÒ>ÕL—éå°u¸Jµ‹~¿è¥=“ŸøjL—âA‹ÉÐȽÍpÙoS³ÛÄG52^¹>é2?éø`™5ÄY—Å5WÑÑ஽—¼ì=°¥|ÖW®ºü¼Í‘”û¾ -.¾Ùå’–‚£×µÊõ^q(UÈeL-Þ#ª(.ц1Å|î-µ4ZRØÓA4Ï…^šã¯$—,Î:zžÌ…`¡Í»·~ê÷$¦‡lÖïšN’‡‘“À† Q{*¤¸’«%‚(õT¯oÓ]ñ‚>jSV*rVQ~ñ' ëwÖn°¹;[d%©§£ÈÌô.‡x™$çA“¡ÊÑ÷U¥Ìôn¨Z%äG«“zôª!G²² ßf;ÂHÝ6²³ÜHÇÄo¹^Úå}?Aký"l¯\0Ö¤ñ·¶ÁŠÖÉ=]¿‰`°­Ò¬KÕa.‰;ÛÙ’¾ ™TÉ{¾µ¸¸* ²¦‡1eWÃÀ€$D4™D ʃR@+Wsì(*Ou/BP?t“XˆpT Ž•Š]<Ãô•>7Éäãå*A„u¡ˆG¶¹{6– ÂÃ[:ó˜Äú]+ê} )š 0ŸBÉ–íÂy’ C Y¦Dߩ¤Qа›ÂÄ„üÆ|G+ÖWN˜¾R¶ïµ¡A0Ž—DM!ƒ›=µ äpýñ²• §%Ûk€–Û' ØRÜÙjç<Á5·†Öñ¿ðË_7=Y­Ÿ²qªïjúUâP¬ï77†ãì«p,³Ð˜a©Ôé‰çFèUºïSÒƒ±n’xžãÛPaýø‘äŽFdë@>H 9P«ª}VîAˆ&–¾Š*Ôuž&‡#®ð whõÕù°7nÛ6p¥e/»‘ýÈø‡ì×<ù¼ÄÝ.‹Ìcæ„‹»Šë^_ŠYN[T^'&ÆBʫãºLr .˜h¶)» ÙšL˜Qĸ.å@f…=æ™ð€¢²ÑÕYO»Œê >Pß&4ΆëA8E!åØ{}<²N 7×·¬Å\†Ùë=[QFQ‰D=HÌu ùo8ù"!%óŠŒ%ù»k w z°q×…¥¯½–\(ŒïËgv:©Æ™¯nw„Ù@yÆìc×£¹þ¹Ñ…Õ¨—݇/·Ì® Znù¹ëÝàü>Û²–¥¤ýìÞ˜[æ܈§Yè˜ÉHÖf»ã~]BöCß¹®Y†b %ª‰yvÀ)“M<» Ã4œ&¬Ë+êëxk\b9Ð$Y1ù7ò¥rt’*$@".´¬ÑU4Es( [ 'E)tžÕáH`3¸bÛ'p˜è–éñ&¹?§X“çÆ8áŒ1›³†Ñ,Ô7b“ª[vÖ—"¹˜ú[žÜõªpdÅÎήR$ÒE›*ËQ–ÞYÚ°¾|ŸTþ8ps¬˜Ü—x½ËnáÍ­Yií¸=™M½º§Æ^¥mY+}7Â&‰×êc•Ü`Ï?OC*z½Ëñ5yNg%#õ·«RÒÓº@†yE•“+Dð$ÏÇ´„¡c÷?vÛc±fiµlBÆÕèßÕÔ:Bã p±û M¢JÓ‡iу3öp¸4 zL’?8<6µúÄphf“óƒ°n„ŠôCà W–ìa¨§Ñ1À5þ4¬í‹Iðоö¶©é:Ì/Ò,)RýmBŠL“ªa&åx{k¯_Û$ÒÀƘUÛ`nUߤ.oVîÓ/ñÄýbLz¹ÂQ·Ã#¸Ø&­üÜ‘C­zþ¡.æÜ2¡%Ü}-ÓbTëlx¥­r,Ð4':êÉ7×’º±J­à xH×îÂë¹ƒÞ ™$y¨û´pž àË%¨ø Š 18 a•6ðŠZ°'ˆ¾.Ë=´ã*zJ(ž´tKqɱk¥´j8¥ÁgB ¡Øy/™ÕäÌI”³ iAê›b¿Á:d’ )Ö|6³f0?ñC+­çVayàË\ÙØ¾ƒ¦%Û1LÄ3ŽÐìA«ÐkÝ»?ËÆ²ï;h­ö¶ÝÃx*ÇfÔ–U̯`"/ôÞo}ãùãçã룱_ŸØf8°ÍnNsÐê?ÍîÅL{Ëd:b®ü`ԃ“¹¼Vò²È¡ïƒ™̓º?Êá€ÐË ¡ õ0¯æQeA`*ò´ˆA`éÞ§@©Ò£ÍR*ãÐabõ\œ%©p–U3!•¼Odcäú‚°†^A‹Uûúî §À§ÄðøTõ˜Å6¾q2á-y6B,±#ºb¿&_w¡B³TjÞà®eÈX¤H3NP[þžõË®~CëÒN €­Ýëýös÷±B#´[ÍT4š_¾)8§Øê¡ÿ+#åpð4 ²ìMД#ZJûý‰¡ê¨ÓD—kõä¥0?Œ?B†7Î>F„ œÁªA>@®žÓåµÊ‰w+“ƒª"Å‚æƒ<gªX*bA‚Ïë>*<^,ÁPh‰4]ªP‘ËUèï¡d}&’·r‚‰ºôêG¤žÖ*Z}0¼GÉ[TH­¯ÒÇʼ]LWÈ©µû 'UèI©›JIaÏ;£f¥µ±«:g]‚}2¯Î­±àìû ¹ç•ÖÜO³ÓžÙ%¹Î0IJœá6 ÿ]åé9~Wø*.¨ÙHóÖ[¨©¼ð}ªÓõ2´¬I®+Zy¨ˆ\À[aľèZñÕP6É|•câ9tQ´ôÁ¯XÂk£3Azf„£â,BÎ}^m½–eÀôÆ`Á~/¢v` „ï‘CÖ‘…øièJžõ©U¦ü^8bèßÐ(cÑãrÀ1ÕT[hž3$+’¢Àkdl²°zâ©sÎñÕ¶Ì€ÔDŽV¤¯'.ZO)ŠÍ6† IDAThFiba¸¸'4mœ¶7ûû¥öènåJë£Öà¹ý>™¥&«– }·ò”þl®ßN³81Æ@޼ÍZ\×Xù>gCñr0‹!3;a3%Å[Ï™¬¥."áYíÆÛv™"¥œçá*„%~Çá(J€+,|W„`Ë Ì0·Â¹€Üc¿yŠŽò­ÒŒ =±…¬A 6ð 'Ñ9Ä…×Ï…%Î ¸@•#gš É„>"üòù£+‚Ç„œ9ã˜S¤«!bÉ{ŽPG”;¤ l|Õ‹u˜l?cw(­Pi…RÛ¸²q»…ýñöµî9|Ô=­áü2'°Î$¹[ï%Æ)>ó«éÈPÒƒ­ÄIÕZã[Þõª$¶¢ªÆŸuE3 x6xGƒq^ð”Xöœ$iøY ð€B¶<Y¹Ê ÌÃb­ÜŒÛfúCžÓB–¾®ªØ¹“¤eS†ºô¡éëÂÞ%»I¡2ÉEÅDh&!nä¦Þ¸~Ë8%ÌQÑ;ÊFMG“1ÍáÈüEß#R¤Y/zWœ‰Üº;üÔeïZôufƒ*÷[¦.}‡'dølñ‡³‚X×_Cv“›áV­ßídéßÛÒm±ý÷~0ú¬…½= ›HÜH‹/º˜z i½Dï°j&Ûž¹‘'-­<ýýˆcöE¯0À÷‰ÈÁxw-Oÿ WCÛÓGï?üéÿùï/ŸÈûOåWuÔýðèñé£÷òÈýUþô­|%ÿ"'r«g~"·zþŸÉ»…¸?ÈßÿÏáwŸÈÝÉñÏòÅ;ùÜÉâôðV­~¿’oõ½8Y|ößñ“ÿ_ÿ¼‘cy&y&ùT~ýJ¾äj!îWùôFžÜȱÈB?±t•8¼ß[9‘,®¹Ó/ô& ¿•Å3ùéDnOåý ùîFnSXÌåÜËüˆÕ|ö©\c“¾ô=ò§ kš•‘ÊQ0S…`“Š(áÂh•myQQ‘÷ &‘‹Ó0¼)cx´'oxÖ‘‚œþQÂÐz€¾ãèáp&ÿ11DÀã¶C_Z‘Ç׿LxY ¢†fRö¥MBŒ{ÎÌby°‹úŠC-žvèªÐ¸;fhÙÍcÚC‰"lÏÁv¯Üºá‘‰«fV–´´c´<÷D›ÀS¸~tX÷·Ö\‚VöÞó{ÛÓr›kå=¸n~D%±²ûŸ_æZô«Ö^óùkטvlûuŽ\ˆ 5 ¹—–ŸXox¨²Q†jhT ×aö„³%<4É <£VÆR¡k`§;(ÙÐŒ±j‚he¤ ŸL,|Þ‹„3Ú¡]¤ÕÛ}.õb §‡™-¸Q@@¯ÇÄÀo8ŠCWlW¡¿UtÑÒP rvØ5…çÂý3øNaBy _JÌAsÑ9L¡C)²`T,Šˆ†É|½¡±Ý£ŒCkv˜æüPvU¥2ar…ì¾eKƬƆ®7´ë`ao_è(£d|Ñß[û¸¼?ÔÛÁwà6þAoù¥ý’v‚+¼V5f§[ÇYù‚è«îmc!ØúU‘­åXˆÿȤN¤œQ5Z/¦’ð“B .P„Å”éµl"«vÖø KÉ•î¦l!¨?xUÀ Öüü({/A1ÁÒŒäÐáP¡ša?\ÖBpXxAaºK•ú˜ƒ7<}ŠL\fbrøeˆ‚Dzó( &Øð—„-åt]!®á=Vvï-¹èœ²ÖI•s­úɵˆëÂf¥´wÍa¯"`œÀÊyÿ¥¶ÔnË ”ÛöʹYÐr;_Ç?¾mÂì¦Ýrß}“ ï[Ë»ù4S¦ŒøÇ”%Q=™ÿ.(Šc¶ F}‹÷9Q"áÛó´2Xí8«Ņ¶JÖŽƒ°x`䈧 °v³y|šJò9Øb:J 7I†`ùà¥ä†¢´Ó_)ȆR þ`Î%œI¸Èuž2~ìÎÜßÒÁ/ÆE­À¸lBß+÷ÓgG¨ìSE^·Åè7õ#î²~R*ë}; åêR› )½PGoŠ‚»fL*§k÷?kÆÑ»+][¶>±­ô„&ÍYaÜ&H¯ù¾šÄ.+-÷[6·lìƒ,ÿ¢“…‘æaüµ|‹¬`±¯¦¾«S뢾ÉEÊ=Wt×¹RyÝf·ÝkscÑB3KÉaFV@B„aÜÝ+8…s¹OKdö&“P9W†!5˜ÉF$z(Š$cxÄ¢DiÆQ4®ÕQ08¸ß“¢´!O@g¨ø‹œ„ç‚Ðd GMÇ™˜Ø”ôQCÝþA“0•œS7ó8§‰cG›O’™l„aHšÞƒÆ®¢rp÷£‹o-Á(â’¥cBægØö®ˆµlÉq+ÛÏÐà$×k&}kïÒƒno@hþ³N£rN7ÒwýsƒÌNÓñS a-m(½†Æì½k‘„óMs+k(½š¤J£aÎ ~Ciæ$ˆ±ÀZÆóªLõtT=«øPX(tÝÓ+2¦«s æá0§øÞ§TI-S ƒ@ÿ‰‡«øŠX¬×€ŒqpÄ€˜"ìzö`Ÿ®Ü¡QúF™À sÇŠŽœ9 ý³3ûDZd9Ì,×IœÖèìзç8[y;ÒT¹s…òV"ÆØWãþU~‰%-G6¯æh6Ê‹1ÆOÑû½H„q†ÛÂÒ·¾^c…áQ·YÐZ]>®ü1YÆ™xæ6Ç­w•4-ÝòoÊõáÇÒŒóûgÒI±3l2zÑ…nØçp&S=EwŠ[­`ɼmg^‘F(6ù B­ŠâÚ’–`Ó98ª ÀJÄ:ß9Ärpˆ,Ø‘V1 –µæZ~ …£n°!Dc´í8“¬Bd>¢–ë€v~ êË{*zø$aáˆO•LžŠoÄ[uŸÉ‘AP'„£6¹X؈½IJóP„”ÙMâÚK锨¶å,8«9’>+h¦8*X~¡©åÈmzaܼqƶ+­õÏxLJú~Æ:¾´S·©ã–ë—Ú®0µ·EA!6ø _§ulK©Õ£SJ„¦ØY³uLj-]bȱj üŠOB0ŸÆ±#(¹êH4·âê-¨8eu&8’#KŽ„;RŠ4j-ˆt›à‚l@SJ1 ‰>­å5Ò_°QS¸ˆ¯pŠª¿à!-ˆæ5²Ê{V†¤"™ æq4ÔX8&,í¹öº·£x,Ê ßB3–çËPàGà © ŦÖf%ÅØ–ï@Bqà[l´²ß\uS47”Uj)¿Ð--ÝnÓh´Ü¡V­ÝgbîþÏüµÞÏ/l·Â†îÐrB›¼b|%Æ“Š6lNŠHŸOw-ˆ’ÚúšOÛ&©7¹A/ÙÎ\¨iáx÷ õ]5VÐJÞNíxc¶K~’×¢lëDíUM‡[Ž·G=¤t¶ÓÅðÇsDIÅ‘ ¤Pà8TE@AE,x A ÈÄG‚¡tze;2ö¾Yâ‘2ŽOå}x)Z&*B6o "‹¢rÂì3wáÛË‚Cš„3µõ@[%î®$>ÕÁùÛ/†yÓr, Ú›#†½üÕ±H¹aŽZ3±!,µd­D2ðt{h÷ð=­É¤ÇîÏî­ ÝWÏT×,ÅB –“þ1µ†Âµë¤ö½mîv–kõ´²fŒíV‹5n0 –ãT 0Š` Ñ4¢ _n¿e=LeÑÉxÔ f¨ZÀ›A‹›—í»"Z*)A§ºs §geÿø£ˆHƒDÃŒäq¸•f(C¨/ž j5ˆõ!1Ey*ïÃ…#qÌ\­&©$¾Vÿóô»ß¢–B-(©ØÂî‡S"¹®jt\¾;·¸ª‡–ˆŽMOlñT€™³—}±jI¹sFå^®##lxþö–V¿õ†›±45ÆU· Z¿:li+9)“è¦fÔ›ÎI3nPß{tK”^M‡Pßy/…ÎÊS¹ãF¹S× /–\±¥RIAyag­„%òÌ\V­Š7œ2ÅŽE°$v‘Ís“BÁq7Kz-Y™i ƒ`¬â 'Ö âµðr*g×Ñ`H?`¹«¥%g‹è'£`†Z â@¥‘ªÅjöäÕÃrxŸK´3A ƵHÏb{\$Àéâ’¦‘,W¤da'Á55ðT" ‘rÀ¼=/Uyj4åìÅИôF’;m­&EÑ’o„ºSnÏÖv·‘Jk÷.ônWŸÅ¤‰Ãö˜F¿åOÀu¸D7䨮¢âOºQ#2zÇÖØæ+–ŸE_uăãˆ>,·ÙѬ²p†CMP&!1lË^‚ÔðpÜbÎqžJÔ@ÐJ@F¯eÂŒb’€þ‡vÌ) 4±‹³s¯’>´7 !…RL\xr‘w&á<~žÐÐç0e¬¿R½†*¤j´ÇÎŽ¢ZËAˆ-S„JVur³ 0ÌÅë`óÞ(¹XذŸ~(”ˆ–ó·èè] 0¨Íà+9««¶­inŠNj1V\*8†6ëè˶t˜¹âmjÊxK^z›bìÒ0ñ7Iº¾e¿\‰6í°Y€“«ËUU‘ë{aŒ Zæ»×–GµÝ€³™¯*6Ö†•€8CvðCÕ þ9*'< ó¿ ÷8J‘ dYA€FX¢ê*Ô€Š¢Ž %‘þ?W|‚an¸Å't¡â9 ǃ'dŠˆu…h§<Â…„—¢3[ñ…Žò2Д5‡¨ µ¬á|dL§Á¢—ãQ0û% ‘ÿ¦ƒPa-Ì+–#ƒ–F®¯äBÁÁWìÐ&\E\—'°4Ÿ>—鎸øòn]®³þ:¼»µú¡zZó ;F¾Doê¨Ï¤|¤µ«˜m{ÐbE,¼…ºË5Q8Ù]j+ÅzQíLÍ€'IÖ‘Ä JË´ÉØÚò†—ý Ä„pýw;¬ð ÏrH´Yí â!–ÓÉ_xI0‰» Áo„–#aå*9ˆYaˆ0¡Xý:V„Ñ„C ¯ÈºéPª`I×Ð@…ñ郈Üo´fÖ {øÇoèç2¨d¢$šswvaC;¤µ:ZiÍéfLF7}b¼ÝÀ²¥i3•¸Ù‰õC ºÉ3‰GyÈzUlÛ̳/Ü@í¬XcOv´Ì¡/ŽQ|Ä)Úô1jCHeÐ>h…Õ_!$¢ÈET*_§ÃZAFñ†þã|ž \0P*¢pwOc`pûŠÛl¬Ë(hLVý d÷§/ÇÄpnÄt¢^ ‰ [¼³ìŪ í*Šå»2´ ÒòímsÅŽp˜§;Ðü»¦"ÌB74«Z:zJÝ ckÂæÁf)Ó€³@ë¡Ãí„ܲSÙó3_ÑCk?Åõµf¡BŸs“{«Õ þÇŸ>iS¿_Ó*h1-µ5Tjƒ› k“B  .¥ÆMŽg‡¡*„µà@vy­×PpUj.+A€{±k…ß÷BG.Ä1dÊž‹r•ÑZ ->ñu|ŒwU^©!ÈC¸4Åq«ÃL-âYJQÆãŸ ÷Ø`ø¤çŒŸß§ouj)òwd}1ru‚O0j_eRw¨ÃhE©á [<4¶S=Ïܼ[²ÏjÈ‹87Û£­Û`¾‡º85oj?uû i¶ý®Ö|÷P•ÖäŠ?"ºÛ=¹m¾[õ"p*4?FGLÂêÀMœOèÝoyé¯Ñ¥ØÆ¶F†Ån`}‹´lh­¼ØD§Éµúh0=9o­-.î9 © Eœªé¸Š‚莅ìù¤æ{ !'Tl@E€«Þa_«Có)ŠÝÏt &4@D¹¾ˆ=¯Ò1õñ1E…:n¥Ä ¨KÅ0­„ð-T˜Ä-©"KPþâ#%—¦<˜E-Lg¿JgfòÒE[‚Š Â9×ékÌh„o]o¾Ã H{R*ý|h«[]g—æÚÝè ­M§Å!Ûo=žÆ­6nûËàÜ'î=¸‡«çË4f€})wªTÓò²žÒa¼ó$é?Ùœ4s2ûPtæk±É~úîxí°Zdg;Æ ×ÞØ^¬JbkÞn#ÑQÿ+f›8wCTºúk¯ ‚o•B@˜MÙ²»RF¦CA†=¨Z·6Òµ(hEàA©¤¿Mv‚á<ÖjÈÁ‚ð]‹0Žnõ](|j醔E•±òÐ*Wt‰–ÂQ*¾…Æé\¥/uÖÙÓEË-Ï;ŒrÓÓàå\ÇýÈUƵ®"½¥2y*šµ¾u7Ù›šÍ?§{T.¢éGuˆÊ]ª¸§µÙÕü¡RýGðK‚PïÒ/4—ò¬H¹`ÅaÆSê'Œnn™˜f_a›ëXuøªyàŠ 5\–fØ€d3y¨Ï…r¤E©;•­.Øc·pσ8(vuÂ?PNñ”U.YRÌ£º:!7„½-´ï¥.ý;Î H¼!Õ=ÑÃ"õ·ÿÐrÓÒ )Y±ð:̃Sñ gù1x³Ì1jÖ ˜m¥"!y”s8£qƹÐnÀ!û‘­_{Ž’Êé_0„zo!¤Þ÷¸‡Z.¾òáåf°ov¿F]`:TàVèoñ§ÛWnÓkæ:ÙŒæn•Ö²úH·Ã\–ˆËBÚJ™&#¸RJÕ›¸5eÊ^ Ý Ž×·Þšïìû˜ÁËD Y šxÙòÁž[àãðêf$…”kå9Šžçs‹ÈÔDñ<‰•µmAì«ôZ,ÅR  7*'Xü0DJ=ÚNð°ÐÂ+Ï_ÏóâÊ1r`1j2m±Fý0XZ(ßTÃ$2œ ÁûÝK¶d<]™3YR˜g=ã{äa,8nˆ5>>1~Fï^ú #ÉÚ$¸f´[5è{LZ…FÅøT“‹ïm×ìðþŸ¦nÿÕWï½õ˘ Z[|>ÖŽ3·æè#–¦[¦Ñ›å'‹Ë·mú×Þ‹…ê¸É6Xk.²7çß éèì _ߤƒŒz80‘Â7¼·K¤9ÂÐà=%<1ƒ@HaˆÒµùñˆ’BÐ0\-"Tœ ­Î¢Á¨<Ê£»ú`ƒ8«{‘ðƒÀŸVOÜ¥(`Uöt?ŒrvÕJÄã ~•yËT*A¡…—˜Nú t%âQàsuÉ‚l…f¿ð!³71d…p†<27&ÙS±dÅKá«q÷¯Âˆ…Â'yHKªÉô}]íØòh ‘ ®“\,Ýhãл•ª»2¬°tŒ·¸vŸÛþð•Öî Ï­î&Üä¿ûл¬¹äd*±ëÜUªô&rÌ, ýÔ…ë;¤ÊœJÔu8Æ‘ÁU®Ñ´;kRˆÿ¤å/?··â\(B?­oÿáá™;§Ýî l8 …ÆÍ1±‹ùå2±²ëRŠÎB‰3a½þ$jŠJÞcQ•8CEA>i]ÈI’z|8t ²ÞQṳ̀xË –¼Þ!íïˆ4˜[ì6ªQßžÙ mâÓn ·Ó³¤"]ef(µ]ÅÐ@_Ã7ºSËEèßJAúQ 3É¡-‰×ÜáAèÁm‡f¹5>îMål­;«|hU=¼H#FÞˆñFª?.Ûm)­šsWÅ2á)7ÄÛž«6È æg(ß©çUf¢Ø~0¹$ˆÈ©%€ nÍ/¢bâ(û\€!ÄXUTëg‚!ÂÑöH w¿=à7U[3´M ÆóT¥ fµÃÉ Þú £8ð¹ Å8÷´Îc‘."@ƧŸ‘Æa6ìÀh‡,#'E¿&ôð ï bÚSië[sÄ~¨Ò†2b‘/~ŸÿnËŽêâɵìMÐÉP^Ìc[Uæ“[÷…åÉgO§™ûÈmu¤ÜF¶ÜWŽ&Yj‰ß¥,pKP·Úoç'u.{|טPñ$xp‰^©ý³Ì0r5P9~A»–±›³-+©…òu˜ž©´‚4C›<˜‡7LjèÃØ9·H GåÁÑ Ê8ö£?,þÆò== L vGf#Ñàáƒ<¯c;*ÃÛE¬g³]*z hÏSYÑ®‰ yuÞ ±Åú¦²4ÿ"ªêêú*h•© 濘èÒ%ÇÅ([ßd(ÌFº¤®zñmZg¦ÔRbý¯5³Ë‘'ÂZªÎ¯UeYU©ŒUø@f#†~wèÚI»1¯¦ª;»µ±þœ–¯„-»þ³Õáâ¹Zû c~;#Èù@|9üôä¶µuS§T!™Xœ›& }k¢E*Ür}ú(¶s{ X6ª\Ø©Äñ¾è½aH ûhІiñæ>8¸) u£KÿüWwízhÅÒÈN­£ Í&–ŸzE××Pˆu­•–µ ÙSH½©LÓ™ði(;LEîZÁ×ùI7Ôþ rÚ©ŒM/Ä.ؤea”Þß<Ì´îÊ å7¶€®Ûs{{Ò½šë|ú±ÏÊ5˜ÉЬ{F>g?kÕË žf˜ëðµ‰_•Öè[öÂÐÐ N}Ã#£p¨Uv LÈôL¸‰H-×åwñÛdÙî¸ …Ö„hœ ’bå¡]A¤¨*P—l8ÏFtIÖ‚J*"ƒ8üMY•ÍŸÝwAòŠç±C.$¼UX¨#ÿü(>^éÇòX]3¢ËFò-ÄH2¿PüA‚ˆÑfnŒ)b¡BÕƒ`£À›6 F)ÙãFW-øãûŠ Â\]ÕiRµoE¹ÊîÒµ’wj*Ûuôù6Ú´¦+¦3ÈÑárhY&DóÛW»I@\kÑ^¡§õ±L¯o¤$²ô¥Ð.\Z–b~Þ[p’ÈÍ«ëGG†kÒ2LR¦ñLl‚‘XöÆh.:Y ~˜(ãʸءt:0óÈÔ÷òC)‹Çç ‰ X»xøÅ,¨T™±Ž@R DÞQžÅbkÝ(ޏˆ.ZÏÛ«±~J3•´ya×–®¥°!祃;.ŒÖ÷àpK–zîAèA·GØø+ºÙÌÀünÖHùå—¯ÜG â`zfÕò||,öëŽt¹Wå›y(m³i,4§Pæõ ² –‚MJM”LQB hÁÀü2hî9,½MYu IDATŒ£Ù3$é<ÔíðPG½{$…„³ks†Yªžè>t¹$Uc o9ë<Yñ)œ%xKúÕzÄêMaì"c˜ŽB³á“Ö‹9‰@”]†â(ªOýd(¢,÷Ñ D™… ¢5ÓÝPõ*º¸ÑŒ¡s€ã˜ÚuU„¯¼ÇDLêMéíÒ[‹i«']2̾§]–Eµíñg먖Ž&Ù ªms¯¸Ë`I?™\·Õ;ÿ0ÿÄüÄæ…µÂc[Ñöo;*_™ü¡—L˜zQ!^…>ù…7ÏÄsƒ$ ¦…Sq­ë·šf3*d¹<¸,¸g5ݹ`A‡ãÐ k4{#n‰.åè„E»ÛÃX]Ìf‡Dè%qD|שÌR~OÑèœZbgÆâ_¦–ØË8ž¥Ú¿xÀó\Û)ôjWO±”©~€hD¡ÌÂ!ÛòJ%–ñ¬Å°ìn*+&írMŸUµn0cȬ/F¦¤åì^€»¶c¾Ê¨G¾ÜèúÓmw =ÿš±ûZæ¹T¯¶Žmdhuµö•ÛFOk7³êr÷ßÍjGïåºYÚ ›ôÁ ½K¿ÉÂ×C*¾´ÊT»`!° gÖnµÞÛ»Ú‘d#çS HÐv­\BCÇž­¡lú°#§»¨§‡¢N`ÿP.°ý9œ)`¡ $ vèîÐ.R„ÄÅVS2¶€žf¸` ãXÕ+ /%¼JÍ­WÔåz)R>BTÒ;µ³…yçf’P×PµÏ€;¦na‹v—–_˜\F¢±d¯‹5GësÑåʳ_˜ :L¹$ÏSiu{`çv¨ë(uª^KøOŠé:LðöR~”?†"Ålj”z@VØC1ˆ~˜þ[ßX;£{‡”?pl#°cÈc°¦”;¡eéziU%Ô0·­*xiAZSþ×3|)Ø×bïíÑfÍ«¬Üpoàíl£¿n=°hm/Èy{MB·[¸f«Ón=Ü(Й4"xßÙÝøÎ~­ç¼é[”àfÜ×s—–¬¯#ˆÊÏ¿5˜å-ÂÑ-W5Ù7%©$j îä9ˆÔ¨P?qc *p5%ŶG\=“„ìˆÁ6€`a¯ÎÉ 9/øHt|JµJÁa:*+2^¦~Õs ÿWbOë<‘‡Yv'·Î%†@&¿Œ(9¶iG~ˆa¶™O]1˜"É´¢ŸÂ0…vhõ‰p)FĤh·×¤¯æs=‘«ýTóÅ ·Q úÖ½ã­à°Ö:é¸=Uš£Ñª¶[ «V‹äÜÆ‚ìvµ¶?Œ÷àÃÀïøSˆ‹˜YÃÎG>Ù2òµ*­O8ǶÙ×7I}owbˆEÊ–uáç¸EQذ©àPàŠ®ªcÈËf;nÔÁNwÕ&ªÅ#2Î>‰Há~‹þ––VœA =·>3LºˆCLÁ*ðxøŽÆÍ*-Å?e! „ß`žNX– j™õ½„s /I^AŽ‚ñïC ß'áFjY…è‘Yì{ œ¢à†¥õ_žQK1ÇZŒrÌ#ó¨"Ù¤ªΉæf$;RƧ„â¦.T<¾B>³™£—v-¥†T¶™µ—fÁönX7#*Ï7\êIAÆZà •ÓȦyÍÝÿÆÁwÀ›íº5`olg…Ô¶FSr£zõFî»c•…¡dâÒŸ>iÊå›]1©åòº1/+6D§ˬó),t¥£Ì@H*Øô‘²|ã^rÞc´“x.Lp!ªƒÃ±îó*éÙu)R¬GþðBÂEºÒQßèŽñÙx)>L‹§×©ót˜àçBÂ÷©t;J¦M/Á"ñ1‡y*"{Œšü,ÆÔ@lrr |땽ƒÊí.èÆ×Ô11:=gáÊ£ IZ¥tBÈÌÂ^–¬#üyiCã;Í­"¬Ëw_ÙŽ´‡m `¨{]~s‹Û–ê³mi6Znvhg`ãæ9öÏ·_ê¥ÇÿøU¯× ¾CõßÌ£¸6>É/1T^QØVÛ)ê;Í-_©.suEsTf®™Sq©S•Ëî©àÍ¢Õåú@R…”b¨ÛйA†/l™68QQ MÑ0¥„ö>ÈãpФ£Lú…×IOñ^I8“ð½D—s ¯$üðì< +~ðŠ‚Qyñ<—zñ籞ƒ>^¤ôé0ºUT¼!ÒˆãµE׌ɀ iû”†nMhBœMš×’ Tc©a+ ÒUW¬ïæ<ؼÂGÌÝ›;þ¥$“ì½ß&ºìž9Û<=¸†î«9»y`㶪“5««R]iYF;®³°­qß±‰ëÞ´yL×êFT/²í…´ÑEÊ0I Ê&(/jæEÇîœ_ #P‹ !QP~d4x°éO¾§Á,8\$:.ÚÝžE§vm_ÝK²„áÅ÷òA‡ÿHâKïF–ÂkëAÙ ; swõ›02éÿB–‚ *`tõ°ú³Úsrìÿ„"Ìzq µ¦Ä J\ÞÁ÷v’ëm™ï8SÔ…-¡Tû0ßr)‹ƒuýèÂâÚ®ƒ¡¼×²"#Ôéú§!›T¸µ—ÐMâÜÿÌiCà²è5g–k…ôß®¥ÔeE¦·K«&ê;¶i¾sW7~ÛÔ ·ˆ>Ó©¶··«Î‡íA‹ô“:Çy'Ç1ÄbF‘Óèkn±díFb½ Ð@)×ZU¥Ãá¼»Z õ óX¢Î¨­•&£cŹ„‹È%†çQ‰^Jø[vÄ€–=V]ßKxžþ¾ˆÕ›ÊÜ!>d207®Îrt¤J-rVò…€ØÔ3(SÇjj†3áç`ó±ôoxk¡úÁ'Ï× h=ë«ä.ɰ|®XåªI i]Ï•ÈÞ8¹ôˆ‡B‚èFe½¾,ïÂh§ L-a|ññ›^$·|›­1.KöÉùÐoò ÒjÿÌ)×êæ¶ëWWÙ¡€ E¹Ö¸CZ•\ó}ëMÜ ,žìã/'¼²$iuÔYüZ8Ú]lýW<2N“Ìm' ÙЂ):øÁ<0µˆxrNc’`äØâWÙ"|/÷"áZÂuÂ$å µêz%á:õŸ^Ų)JÞ_§†–º¼?O€÷½ Ñ82“/)Í‹ô„¨½xK '^‚Ä]¯8€ðÃEj_´‘%m$à&1DZ×ûÐH²¿ûLPŸLk:°'ÿó³3šMñÊA*Œî)ƒL0–af ä¡åaÖü9 õé×÷Šê]î¥Gf´w5V<5õÝÔFÌõï´6`eÁnôh%%B’¿fGÁUFsñ³Bzˆõ[vg¢7ïl:GW´£8.+âtªó0DÌöQxŠv†Y…¤ÇØ:ÎZÍÄûE•ÿ›j¬‹T’õíëHý}Ç1×ñoI@ø2 Ï( ò,áe³,š?lÄC$W*8+²>©c2‹Êë™§µËÀíGåçgc§k-Ü~½—n* §WQM;ù™;GßÙØú¯è¥1òɡŠTu3š3å ½„g˜ùCæô«9L?Ìò¶ì×bãè¡×:I’3;Rœ°h:Jª ˆ,¾OâˆïIÝ~–*-­¢þ–h½#bÿž'šñU:&;~ŸLß_FC&¥ïòÌVåGCÞ‹4|˜Ó)cÅvžûsŠØJcX¹íd³Ö<´òÄÓš!b¨*¬k»•W”-?êÐÊ–†RÑ€Mñö·®ºÚ¥7NÓj,ùÖI¶ÐhΤÊtì:=~·Çе‹h·ïm¿iI7zeÖL{˜µ{꘲wχ'1Ç‹§a3ØXÁ±ëO\ú*L6'×ötCi±“Gs@FBØ¢‰}Z!ÙàGb-Ö>bJ¢¥åÜ¿¾³ÌÂAÛÜÈ ’<ýŒ²ÕÄýUrm•ˆÁ ?$ñ:I-  8Š.‚·.²¯`.ïÎrü£R—±Aõ*yzòÀcÔU±yvyÈ!‰ÎÙ-Æ£\…g‡‹Ì3nmRçÒóØÜô­­Wqµ!U¾ Óª‹ÂŠI*g¦ñòHZxÖ£Ir;1Èhƒ´vS¸/³Ó›ø€–ÛšçÇ:O߸‚qlˆ}Éó^Èr€Ò la½]EÊç’øÑ·à­«[³»V´²]g‡Ë®íõH©—Ê</ÁDS‘YÌ3=6‘ıO.;§ç‡n ‰LÙÚg…úŽc2ܵ¤R+·üÚkìÖ ù°k‚Ö>7ñ6UØ-+§qó.ßšØ_jïӚ𨋤в}*_}Äm½¸ëó¡kæfU›Á’Q,†lŒ >7Ÿ¨0r\ÌÁ••`¬@\SÒm 8CÌoaÍUV3JÒz*Jé¯ÂÆ GÀHS”i¼Ê©Ä¹Ê9Ïx“G¯iÖꂺ\GIv^×E¬½"ëxN•Ö…å1€|Õ±¿u˜¨˜׌¢¬DÌ#[ÂcÂïšYÙb» cU ]Öf‰aŠ¡)p¥3ö×.5rC›º;€ìíÿöB±ìbo;Øk]ûÜÍê94SÅÝìÕf÷˲[>çv?ç´ÖGi·¡Ï˯mFâVýF—ŒP -h Õ•Æ/w7ub¥ÔÂŽXù)”-?rcj4ÀJW7’ø“u‚T aYªV/ÈÀúvXØx¦UÓ‘#²Î²¿‘ãƒ_C­Š´Ä‰ˆuúO¯3–Ä‘¬‹8 ý™øOÞÓ€ôf¿Z0Õí2ÏCuƒXåbµß]¥õ1þ™äâ–"yÝlÚ,UXaaèP‚mÝu¶¥MwŒæ†±§Âj$rõ§ÁƒØavÕ˜'´²S#Ü•lãÆ>Lày*VR>xEýíÒБ•ÖX˜EqÆÃ(\âÔÔE4žàÚ(Ï9ÉHU×9))~Èn‘÷{…‹*DŒxë'{àÒ`T‘GÊŽ²1E:Í*©MÙ‡F)FN qÙƒ®ßI²ábh.ðoНtTyf™?dÇÞh€tƒ`ÒÀ' Í€u!L"¢|Ÿ¹»¬Ë8Ë~íÑßö ?$?'Îz)ÈV0ËúÃWQm±ð5 â“׆ž@6ç=Œ?WLú–>ô”úM.b4Lž)¶ŸvŒ'Nîñ;R׌rM™Êf¯ÂÖ S¥Ê E½"6J¸ŽÞ6ý3¼…ž‘f¨š&œæOå"/Õäf¸`Œ<À¯º –õH¸m8šÄ=(2=`ƒÑbÉÌÍ˪,#E|®¬àª}¨Ðd\ÝèûrÒ¾ê*©†2ð^*·ì¬+¤àdX!¦Ô\ /9ÁÄWûn©ÒD]Qªž¼Õá˜5~‡‰Ð{™¼š^Kx.ÑÄöyr¼H®¸èÁ>C‘æu ~™¸Ç3r‹?ŠöN «úÅZEbE\¦ûXÄÄ,}S £D"Ào°e4 [(ªÑÛtù"ÀsÁ «I“qc¶hÅåê†FÀ[³5ë+O–±üØV£WZ °ñͽ뇭¼ó~H†iUÑü ç„ê‘+Ѓn·h±3€ôSà´ÚÛñK§W¨?B `õd±ëN·ÛieÁ4ôï–N¦C¹Ç¤U÷«ƒµlüyåõ„ Úífy*¡|åå¬u5™ÔG0– ±ˆgÍHršÈBÓÄ‹½¦ƒñ‡¯²g.¤ƒŠ1‰M,˜—þ“ôî/“ÎðŒ,šŽŒjø‹To¥Á¯hÓ~”\šŽ"™:v–ƒ¨ uœˆ›éÖ] õa i˜¡&ë[ÏžˆÜdÊ7~•Æ ×[Äâˆ+PÔßCÙ¯-Éê>7²&ÔL·$¤LyªÍLaõ3šèëÓ]3ÁoM-šÇYZò>Ë?4ê,;Á°YdôFêý¯«6}õ^lª´ï>r¤ÌšœóýÀb7Ec6> Û?ðu<¹ÝÊÝÿšBSW(ìÙÉÜø²ÆÚú±bU0f4På¹–ì¬Ô!;[4¡ÁƒP iåêŠ\—Tµ¨/”N‡iÐøerlÂÄñ÷Tf½"7BØ´/ðb°tžK.};yœ9%C²Ô“gÙÉéP0Ó¦‰bàZa‚B,:Fl{Q_Q©†¶öµv¯F{ æ|ú6CUÇ´Ó»ÜFš!s£Ó½;Â2x¾¼aÇhÆ9ôßÎ:¶;–o™†ÜZôàž¿ù-g«]ÇNû7Hü#}q­Àªï“‘ ÅÞ$yJfè1õ~|KXè«ô£‚ªvÄÁк8f4«6ÉÑTˆ<"‰UPlƒ`d+E •ƒ+I^ 4uJšAãG]ø©C[O¿ð2%Ù«?æˆÏ e×Úœrc´"ꜧ ìŒà úõ³È.~Ç:ì[V™$„EæÌô'˜ÍÊÙ"!Ï·áóA÷ЬÌÄפ›Œ!4/Ï™R­zÏ6´0¹Òb¼]é`Ù¹Iù+É»éÅk±ßn‘Z&úaˬ9ź<øolNË­ô“q¤qÛù†ü4]Ž×‰¶,ë½Ó0âÈé›gÒkÌÏO‘8tƒ»|'O«š „ qM"&gË5ó׫n‡9 ³Ò=.¾ì3o=E&¤ÇB!…ö*`°#J؃—â¯`eîÏ“»Ò«)˦óÜôÊúøW ÛÎÈ'÷(oå8’çiëuv;ŒìÌs/–¸bšMa o`ðL«pqUŠ´ÔÞœ†eê'#^牽Æ(a!O/ÃJÒ0!ä\ãIÈŠVé;¶ø~#§9Âß›•týÎЦÄ\J-÷çÁAËmÇÓv³OñkÀ’LÑÜýžd¨°B›µí c/êËYšÎÏ&+šh_üC˜‚ ³ÇO¤¥†É·ís8$'Õ¬#\ÆÉÞ£º‚#D<2 Á¨0íQe¡vH¹Õðìãõ|t¦Hè¥`†?‹àŸ'—÷ÃdŒ›ì—P~Åʉ¦©btÖóXåÙ¬‹8 Í=ìzãèXÁó¬´~&¨·`Ý„èËÂB9Z)M†ŠöÜÖª ¤F:Jkç³¢áåÒî½%&쵎š!Åíηi÷†Ÿ|ňŒséó©?¿ŒŽÃ¯±®éR4“át­ Èr½ssë!ÓR幟ýZ­")Ô7Cr …ÞõM•\»Ö¼“ýÐáúí¶×uüÊû³"a ՟׶?‰ÎñZ>Ç…TP 6a‹WI( ‘Œ¦Vp!ªõqà™"87ÐnÑ`â0ªÕão—˜½©õ:–P±,{eÇŠÏsHc¶~?#9û¹@sŸ 8òhÏZŒÃü¬öx”-0´‚Ô¿Uj!!3ŠEZ™áÂ]Ðñ“öiòeªÎ(D4k{á;SRaL7®"CÞE•÷)){K‡F5¥¡·JøŽÁ®{¸¥uƆ«ˆ>6 ZûY–Í|J“ìžÜ ¸õÎvDnd-ŠT³3•ö/Ô\Ÿ77sh"\-ÄhÆH:,Ÿš*“º‚t€Ò±ð0KZ9&µEª¡å^H @!;Bâ‹Ùd<~°‚åÍP[Ü‹`…U ³º@îr!*rƒgQ g{’û¹ÄHâÃô“£l~)ÇC9•÷ÈÌXç‘¥DgK‰£ž*·²TšÏEYXOE_ŒTGÞÛ9nx\Yß,Ó2£oø®É37©'‚Øfg]Ð4÷7™ÐëtF{U”«P­ñ_1æQ!ÖHTg‰”A¦½­¡›·°¬YTmcåÜFwÍ­Lºý€.·…GŽ€›÷õøÑ ÅÏ=Û0r5øÑ-›Ÿò!tS´»oµÐ|k„ËÙ o“ÿì&2“ÆÝ4Æíð­eâE4¸çÆkò±’8PØ©ª¥2æ)Ñÿ pJ( {»§Ñ¬Ôà$a¥¡ÿV´ÐéZ-Mc€q(ê0u­Ò–ö–T7©? Ãóéuš;~™ ³™SJ*‰Ì^šzª)¤E$;whQ2" +êøƒ ELL†ˆÑDðP¬øCy]ù¶G‰3xÔ4ìÑæ8>õ<6¥rnHrËÍó¿/“;äéG±–‚ç!,nÕQ0ê;ÎMàÚQYÇ¡Pz± ò õF ìh!Îd¿vfwYö‚o™|›L«ðôjíuzïf£SUWR(ï;%ˆoÙ ø jÎJ¥Œ5Lè¼\¨åû›ZgÜzضoÜR %ÉÞÖq bÐþßöÔ=JÉ—èƒhM©†ðuÒ»&]Æ©vA®I¨•œŠÙ‰#šÞ>„cº~°ÁÕˆß{e»îíd·gõ [ —¥m¨çM¬0·KûÁÁM?§òçó’\‹(Ñ«k0*ç Òê+ËXߺ”û/»žøU4·çàÔ;Ï}£Ý¶Éoe¾•íRgëûr NC5HɇQqìbE¨¶®néG·Ÿžðƃé/us¾íô? Ÿg¡l÷‚ÂÕ­ËcËŽ¼Æ…¥€hG!ªÐÓó8ÈC“ÔâO!6¼Ì3ÅXÁÕ>ÞðZéßY‘qý,bóé"æFF)üaæóPWú9Ì™`f=${QSÌ  É.MMFÂ2K´ Ù=K?ÒTq–yC‘?bË2KÞúVÆU±7òõ˜WsújèTZ}3L“ÅU\TtÕe–/u¡u«6Bïš7²[^I¸˜´æ&~i¡ãƒ€–{èÑoáó7+sc»¿¹×·+¯ï‘Áá1GΑya×IÏ“©9˜&ýØ´e’ÖkT‰³«€iÚ´¸(f°¯Ì×9„pHÞ Ü’ÁßP½KR´ƒ{„Ì5 ,èw †þZFDý*‚bj þIq(êe‚(A>d‚¨lçiÄø0O++tñ¬ mïÓúªP¿µD!¨F*CTãÛ¦Yz«4”ŠK¬Õ=æºb×Ýæ:>´Ã¥Š¹q0¨ãý¥Öã«ø¾UÃÈíï¶¼~,L Û[Ð_ëwcœµ13Ç%l|ûr“Ìž4hñåÒC¬‘$eÊ2Hª³õ-C¼/Œ¼ë™¶uÚi?$[Éñæ7EÙò|˜g…4÷XôÒ •D¥ŒØ¦Õ ¦‰ ¥€.ë@MXB’ª–0d÷÷ôM)0(§ÇZE]ûó8P¬E´é±ö:ËfN§ò^Õ*|‡±!ÄîœK™Å-£#X1‰Õ¤3OPRTÕ—BØŸ·Þ`!¥dc-G£{R_c ?¶ŽçhG_1{#2Wã9t·n“+×g”«"Eáåö–*à¶Ô['Ðk¯½Ý ²¹ot·Œm¨ôë5†ÕÂaîëV65±îú@k.}^k³q.fMŠÜtkþ bÓÛ¼_éžóf<¾0PàRìžZ÷$X÷°q'† ÍŵšÁë"ùœaQÛi¼> VWg9ÎÃË9gÒŒó¨$Ì©]Iò‡öTì°í€¨ø¡ŸRl¶¥Â‘µÖ «p²hÐú)±¿ßPqeƒ-ó¾ÁšâûÅN¢”¦ÐœéߪÆjÿÚ ×ÿ‡ïl¶|çèÞ¬îÊ©m®“%ôÃ++{Xum´öÍDd)ÓÛÕÐÈm(þØòröh†X˜V8)îü’!iPvÔßcÙÏ´e¼Ý{;Sñzª40äí•A»"U ˜}Š#ñ\±‘À«%ÏòQžµÝŠLúJî±Z!õÆrP2d:\kZpFàNsTQæ§RäkC¶Á¨jÀ=|}xã:áA¨2} á ºzÔ­d>PHÝîè3‘†ód’è3¡Yf0™¯a#5´Æ]l²ñq±Iª§/ªÚ½ÇNK«-ê¦öÍå0b9ŽÖ¾G sg%Kµ…üA׃9b<ÔŸÕT1+ïGÖÏX?r4 .Ì/±]µ™è…5ŒX·¹Î˜oõºY‚egÍãÉ´‰‡™0w‹ö¢uó˜‘ågìí ²p^ &Ž…DÎÔˇ…žé¸4–„ð7«ÇŒzгƈó‡[n,§ÎòDíh`Ô &Q¢þ¯ž$>m=UmαP¼(9ÌfƯ’óøÂãx(=ˆA…y ÕôvƒÂt®7ð™Ÿ8^ë×óyíÛ°+ZË=¤cì4ç¾vSž8ÍVnù¶Ôqˬ`;C£µþl´vc¶ëW:«^ófÇ_•kÓ€Íi­Pè—c‡…ðý V7ÛóÞ‘AFÓÇ31ª’Ô­P…êElöa¯^¹¦z°üA Ïo­]=*1xrËš•8 ‡‘¿F|:‡rññÉXg¨ý¤èŸ@N1†C­ 0„ref„ð^rç ^‚Š”<šLanPqÖs!UçzWªi¼*lÚsÚ i½ùÛ*2k©e؂ʟ !j-B[Zs ÙÅ0Í#-­ÇxXks qÅüƼm®›±__ÍÈ­Ämjqs›[·ó1¶Òz(•‹_ããvKæóSG+‡Üâé&ŽÄuŠù_‘¸è:¡Éeo j`ÈèU´ÊFÂPb93J\òœ¾X¶nU©²1ÑMœûŽ_B„Ü7 û,¹„úƒ©°H¬¼Ú@BO öN¹ÆJš=uÔÅrMRðyl;Eo‹Är~£þ‚F¤^¥ŽEANâ’PºØ˜1 šyÖ&_Zý$c¬Å•VÅ*§â,T£ô…(#Ôò¢’Ƕ¥˜o¡H3sK¦‚k‚¡˜‘#”:Øvzl•[mðFFnù©§R0„nŠZìÑô#AsM׸fÝÖlM÷¼à„‘ J@öĦ¦½iÎ[uÏT1÷*Öî–_±ˆ&‘” Źº…ððC\÷=Wf´ýÏ5 ÏÇüªCÉndŒçYgÓ DÝ£‹JÂdËtD.WþöÓ熂âÃ)â§ñ1bú^Â$IlîådMGÚ ˆÍ2vÖxó6éKœ¬‘JcjÊ* ')–Òx¢ ÉQ6Þw˜ü⦞ܠovHë7°2»¡W{?+ô‡æï¶çØ?î#5{‚¹‘Ðûm0+@ŽrþŽÌ5±§³é–z k…‰µŒTáÎy(ÖzéI#à+-µ³ýv_ع%jú`Xèaù1Ó–',ïúIA±Ír†Y4}’R•†ìD}J4˜')ˆ"UR–ˆ•¥éSR<òÝ—°êA·VƒáFãNªwã-D ÂQ†j£]E­ 펗þ¥a€ÛËc,Zb#¥9åK3Õ¡žö寑·naÒ`ÎV¸ÇóïíÖ{Çw{"ÄpÛ·+»¹/5±1³ðêÆðT”Ú<ÙO7ËàýiÏz1äRƒvØ“k,ßï¸jq”L÷•} ëø¡T9sÙçxšô~dß.ÖšA@ Aaˆ&VEv (.ñ ‘B"©¡Å£ÍPë¡ }1³Ùn½rð+-¼ðîðl€K-Žj¬vÙ‘¤¾8Y§Ž‡Yk®òr嚆_…šš<¢k£L¬œµ3¶URnÊ]×uš¾ý{9s­½ãÒžÔ«-ŒKdÛásLßW+3¿z(ÐrkƒÓÊȱÂK¯Ó{›¿¡³•V¨œÚ'¡«vv®s“Ìü üìO¦vv7 ÛñvƒE¸†­œYJ{ø¡k!‹Q(a©…íŠyŽ?æ YGéÅFg±,¾ˆâÒÆò='à70ìŠ{1ÝØ "ºO9ÀìqM›ôñ%ÒÐUÙÌCñto œƒÅ­2„J ¨,f @äVöõþ©1Ï^¹ˆýš¤ãùÔ¬½DJõ`¹]kq€Å%']†¼ÍêgHöÊ,·dƬla˜Õmè1ûÒÓzSŸ9a0“v£—È–àÙ-q)„~Vwhõ–Bë^²{ƪýÐ û[Ö½®o<ØÜKᯑQ$½_VC4£üìä–G蘆•.Tjñu£Á’•5BÂŽºsÞ`NÒB1$&CÒc`‹uÞÜ^Òag8P&ë@¯(óK:@ÕeÄÇ'WÃû8A%Ô¸Ê3vÐâs%|¾¶ØQä Þ;—b6«¬ØEõª?Ôª+¤âØ‹ÑÓKÏNe|õ°ÅY›^³9&¥Â¾¡Z &õ­Ÿ•µ1ؘtÞiyþÊTM¹²„o}8Xý û<§µY¼œYÆÎü(—J¾qË=2H)²’ÉÉ­æbQKK%Ñè½ ]§ö¦½›ë˜¼IU!¹Ê$>wª±pT¤“ ¶€ µü$[àëXgh6œ®$eœ„ý ´ !%B=Xf¦ŒAʱ1xE$&§¬áQÛZ>©oóž¨3 ŠH+áQcq†HQ˜r5fC¥]Ñö«Š$‘Óþ1[+oKÕRyKzBß%,·˜ó\«*­ÚÎWÀÓ¯êd‹Ô9–ÝÍâ²KÄòmS+ä @åtéÞiOËÍ«gÝv>¸×Ånö[pS•ÜÔÏÛzwi‰bb¨ú{½Â‹­~ïº7Ùì¶°–¥’Úaȶ^Õ!íìã*'ÛP”NÌ7PÁ I™£ ä3,Øëýî)žXñ;«ts (N¹'„‰qk©L°+q”—CypX[U2A®8Ú}„ºèÛÙnŒ „¬mé?¬mÈ´ÀPºa„Z²G}ìË7<ÊwT‘bÐ:œ¤\i‹­—J¾ëáHc*µ;Yy¤*þø¥÷Ó-­œ„õÀòj¯×êåš±­¿sXB¯¸þ¯â´­;pu–‰ÔxÌFö:ÍrŽh^ª Δ³©1>‹£hlŽ Žc²qˆ¡õµ´ "^K¿ Â¦ÉN«‚Æ{÷`â“cmßßi•Å¥<¹ú~;/Àîëâ¦ÌUÈUò.测øØ©òãêŠåò®N"ÉœæR¨‡‡•§V‡¥®þ}Á60EÓ``s½¢¸ +ן©MÙ°N€”¿¬)‘>Ó¦u®«®~,=\TMNñéD?aMaUçOkn·Rôn(Cÿ˜Óìë \ÈŒ¬ÄÁj¬­r–ªÒÔŠ] ¶µD[µ–E3g’¤êvé’ªßx—€:<.'B뜇òH¹ïºèÅçßÒiÉklå ÜÚ’T'>£’ºŒT8=÷ïqŒBEǦñPCËVÙ [ñ@¾vÀS”_ªP½f\]À´r,¬rRe!Ð7 8$§‰CézBki;C5(ucõ7Ö©X‹„Üœh=¿µzŽu8lͨZÏ*µ ÛãÏKøLÎ ÖNLÉTÌ8A%YÔu«)æ:Xt8¢Ì‚®3÷ø0û†²yn ¬f¸ÐB¥ÖPXòç1É¿’k¹C¯ò¥ô´n¹Ž˜rT'"ÔÛ@²Œøõ2ºÏq)ƒÃ²'£YT§•uKjÐjè¬ü}£G\å[uä^Ó½¯'¶„´ò[m±ˆÚK1޳3ºÔhQ®þrýp­Ÿ²öŠÖÏÔ•Æ–Äk¾’uœËŽÔö¥a¯7ÊŠÒc¯q€ZÐyiu·bl£‹ÆÍcVµÊ`Á ?·? # ´T/¨2¶13.]Zš’yÁ ÁR‰µµ29ß=Ó«Á7ò-îÀýÕ¨Ó’ÛÏõÒ¼G…ŠuÙp ½ÅUÚn{6ÁsÆNܧ¼/.o&×m» V’E¹uÀ¸ðêòù÷„}66A ¥ø1l¶ÅCÐ!PÒG  û«É«TMõ@u±!³¨“õße;þÒ(~QÝ6sÐw›ÏPÔéuÙÓæ@ë–6UZ†´¸M5)ë_w­ RNi›² ÒàšMóEœapià6Vž·à`!Ãʳq*±}h+‡o"£TÏÃÁúÇ)4N-8ôùƒ…>~Uãykyp_·íDüº$~x¤™FÙ|cSУOº:_”L0ÌÕ<¿âIv‰–¿‹pPŒ1àKÙ”’àÎ(4¶'ƒRj ‘fÏ#“–5p€6!¥È¥Ô¹ÌAVXüFb[ÛèzˆxýÛOÂÙjì÷ëÛk„½Qëhfœ[@9W’ÁÛüÓ ¬Ë‰+iS Æ[„2Í ]ÓZl®« ¤%$¤zØkUAk÷G9-/Á2u…ÇT½Õ»ŠbŠâ´âÍc6q†ãæÖ(¬œæeƒ~nZÆ~NI#®aTÇ„8­×qû£~Qî:I(n> E-^nBíÛ$(ó6¡!5sÓ‰$‰üF8÷¦3å{ê¥|êüÞëèWŸè´øºíˆì~çá; ¿.ãÏD÷€F@«£p*þ4±}sçÖLàJœÅÚn¹ÿTéˆÓ{0ÆH³nÖ¼Ec‹EЭzZufPâÔémÜëØ–S†bå{M­TC6ø“-¾%³×%ÍåKz±á¸R´°1 )!æJ.²Ú™G™Ž”wiK^‹½So]ן+·d¦¹+Î]h5êJ*ÚÈa[¬,hSYÄà’ãÉ4šåóôÂ\C_\M»^·)&‚’t=ðÕÒ&yv]¦u'#>Ô.غÛR?É2(1};ãÉ-‡[i H¶l‚M[Eê`¿¡¤+¶yðѫѨ&1m{„UÖB >ÞêQµé·Î F"¬>XÃgæ´VÞêÜ®¾×nƒk)“µ)¥ëÁaªd*+zÜ•l^ŒÏÆ •ÏR”Þ&­©§ý㙤­*Û΢ÍzÉÔ~Q³Ëƒb ‘)‘0nãFwp§-&'¦P873ÃN)åeõ‚/"½Û ¾ã{ʃ|û&Ó59ð]QqºÍûŠ“ÁýézàÌüV±þw¤ÚÑ]pÚ‹ËkÀƲÈ’~`ÙʙԩªAÝJ ²¢šmàl(TcFL‰‰Ðp4“ç­w£ï°bÓ„úõdtë6ÄJ¿+¢¦jBY¡%k¥Íà[7Ó€,ªÜ´P…ɬëÆ+N¤ñK;Ae²ðÌT/û¾ªÛ[ ì©bŽ+c~\9‹÷„ÄﵘvÀÕˆó¼8\E<Áº×U¬ô*VVPéû`•‹•‡cDŸdô4!€Q,XÓ½Šñ›8ZZšA¬ƒ¼4ઋŠ×§f]Zwx´mó?¥IÚ¡ïaÝVSUI Ö¨ià×?\«‹FHS‘â“âö­u°Öqì—yÙ…ÚÂ&5ûlUµÚê(ú ñkË¢ZGU‘NÖ³ªyª§Ëú"œf- EàoÅ#ÆÍ©• ~5û™îµ5ê´NJØÑý:îù y¼ã‰–ÃgË{Š)áéœj±^°&Éõk¶„¼í6J«©Aª¦y’JmLÉ‚êAã5 ¨ n+dF ä¦Q§TcŸê/ʱžØ]*&¤Z‚„4fÚánQN¨&ü‹›ÞmÉÍ:jÝ¢¤vÃUYÌ$^Åæè\‹1VêÃdÆx© à8„˜\3hç@C6Ì]4ƒs]ÆOx±åvJ…1õZæM—qÜâ_=êʧÚg¾ÙižÄ¾yoÚ;Ž÷„,0ÔBÝ—,'Êâ{”â•_œXÒ{É‘g]lÆ– ÙØDgŠ# ¶.¸>~XÃZî¶b¬ˆmSnÄ8@YOgi5]º§¢[qºót¹H¡ãŇou(H Pæ•Ï·"ªÕ>l%°UÚÊ*|i½,Õ¨?Ó[jø!ŽŽ!³­Rþ´ƒÌè8ÝøŒ@!¡POdÎ;¾4aSg–‹Ú๬¸ÉÃf"ìW53ìÇÖéõÙ·ÝÏHXÄ ‚»ä—fÅ—¨è‘¾übëά»¥ûÈ2V,^HˇۈŒ|Y¢Š‹–ê€Ú!À¨Mö*çX‹F®[¡ø ¥Ï»¡Wš¤°Â¸²««²è{-Nø)ÊØ(’È$Ö¬eÞô;s#ïÎÆ&älTí8\ªS±ÃN%¯‘??ÓºÇÇÊ5‡Å«W0ŒÏó6v8fÈÈšÀ‘dv|s/&ÒñÙJ¼±nð8i·#j§šÀ–ª–ϲùYhˆ@ÕŒúu|HDÄ›¶dÕ}©¥³Z>\j©1ÈÐëm$¿58Ð2/Àô7³hÛ”ôà )ÝHS $8ºûu„BK5m]Ñá7Ïù‚ Ô»GƒNl»ª ´’‘ –G‡ŒJô‡*76¶ÃVW-álbè8AV'׫—Y7%m¯[bá IDAT0\|)ü_%¹dü”‹åS¯¼^b?\Zt&KÒa ŠXÚu‡ö°é±?ä6tünº>Œx·¬Å*íÖƒDµáh]×Ú±_;7*%}€ÈIͯΩîƵpG¦ÍsÔd¦*¸1Q}Š+¶ÉLf2ºNžªÌ lâ[‘FLçdzêÇàâ˜ë#a]ÑH¸‘yN VH“9·ž{…A2– NeVzè¦ÞëÕv4kns¢"«Óу]â¾#‡‡Ô=0\±Üí´Î*wòÙ»“ñ×9¹ 6¿°+Bd ^Ôæ”ž’¥|6,·ÊZ´˜…Ti}?²Nªí_C“¿D4Jm ¦»!SE×TáÅí­ J;Ñj”lûSYAá×?¯Z«k\*ÞÅçÝòBMÑTï×yv âàæNø³:Ðû‘m¹eÑõ“/Å §Ý±EîËÛÖ¬ @ðÔæç¢Ñü…ÃgÐiæKå£!æøƒžïQ>½<ÈûíìΫ=%ú6=ôâßwZ™³ê* wruÙï“Æ6çã(ï‘)j"vŸ9ö½”9ã–ŒÔ|T3W8‡TÕ‘ÕWËr$-Ñ-+"ŒÊEQÕ®[$ÚÓ·€õzúW¦Œ-Vh8,”W3“F ŒÂIpØIb“£É'R¼ÃdàÚÞç…Ö–ËðÍ-:ÍŠ†Ž5ÿzÇûüԵ䥯0å‡k€Ý2à‘¿}³žÖ>•úƒNnèY X$Ž_&z+´aºÛcÐI•¿üê¢7 ù’õWôµNYUZ ¨òàÌ4O]Sì⠼ǨJiÉš†ˆº½´hÆBYZ±:!SèsE¬^§k6VëIÖX³º¥ÕeV¾NŠ ÔPÝo›¹è 'µäô Rgxi­î¨-®¼&3Ò'NqX¥S°‚G-Ã$G¡•>Iý<·}Íö¥+æ(9Ó\òÖOg4óvé Îþ)-«³Í;-8psî©¥÷ùÛ.î¼ØÀlc!ÏÍhuóHòªóZ¢ëí"}­ûSŸ.Á®ï°-6|WíOì&„¯{92 Fо—7ÔŠ\£Ò<\*+ß~û—;©°ò _X;UçlÓ8úlƒ¦ ^ |k.v…å#4˜U§¼¤§Aù ¸/ d!0Q†‹–£Û… /ÈáÉô ®ÀùtåYÕ¸EûjHÚÁhM5öhð¸<ÈÏó1W!¼A¦Åg4ŠÎÝ 9üÕ2x« ätCéž$÷$W•¿(]Õ$K°”Dl¡Iüøû`GILÖÕ:é^±ÍQµé‘8§j¯‚>6ÜÝÒØkV|µ+è±Fµ”:­$­#\Héq †ÙUcŒ˜‚*|¼rì0RÖÉîVJE¤SªÃÄ O­þ@ @ÒÈúçdnõd! è{¹/&L)¸×³jvì–1 ôp¡ÎíÆ<’¯Ñ]á âMn‡\i¨Ÿ@ãtºkyà1ÔHìùË{TûFª=¯Æ¸¦áºÕÍî¨|"ÅÚéÕ%öô”¥å(jzZ’ V} ¶=#ªDYŸ¼}Þ¦Œ?ª U<-mù±Jt¾ÉÎgË™ªö7Å· zÞJ s-‘Up¡«MX³½5“CLHÔ2ÍCšÊ†‡ÍÍe#úL¦ª‹ëYR%ÈÝ4ÍAx³`3ª«',~±Nú­<ËZà¹/-²qŽæô•ë‡N‹/õ½hIÎèçwꀃ)qÙAzâX#e o‰ïðÄaëN(¢å%Ë3dH˜@•ÉñÚZ¨¦$×6nÑppxE/„oLd¡–Ç›,§abDeÄÍÀSŠ5‰Z$z5èZƒJ«Ø‰ˆGoþJq/©Û´4CcJÅÛÌæ¬Ê­2Êàó褆R}Æ Ù רNøÝb·•äàã)6ú ¿·R>9ÓÊ»w¾æÆìFòøÉpÚyDÙ¥KîW`($¨zn+æ`*)X‚/ã݃ЕN¾©²æ–,æV…lÁâŒÊŒ°ß¦øý,mƒ‡ƒºÍ-¨Ù¡¿SM îXQåÄ:dÙHžZj(ÅôÑPO-š Oµy¨¥=´n ©ñ®uÈšxýü‚çÊuYÕ~ÉðÕç×6 )%µeO5:6øjê}»~ØBO-¿zq™øë¦D]Ë"I Nø’s1£C~±z[’éQ¡Îpbi?=Áb[è»l²%¡#ÏBó$þýÒs²­õ;ÔE«xœš˜eZªm¢ñš h}¶áÞµUP©jDu£ÔaªêV•WÕõµ««ý_MáX%[ëß²H¨Ë”EÏq{PÖâÅà-j‰<ÜÙ[£E┑;\É~f/!óHç¦ ¼ì¾‰H¶¦¼1cèNw'DZÜï”ieÐW `Ýz Žì5•nîp±ÄCòZ3"‘Ûˆ’¯_K¯“‡›†’‡Ä‹ª6™ê?ŒÁ«±$²üŠž` ž ª§lûJUÉš"aQiA{i,_ #\¢\•2HÝ'k_MØ€ñìhsíkhƒ¥ç@Y;l°«ªù"KÐÞ¢"Ù/'Ú@l5XQ8Â2£áÇ ÚT²uÂ:6P Œ7?ñõ}žK†ô²õÃרuZ¯™¢îNŽ;¸Ï¢AÓvu­ä[zE˜ŒÖ ÆwIAØ¥²1l…†@‚{ÎŒg4n²ª=µÈMÇu6¹X<¬ª‘íIKµ |Ü£¥-N6'QdÎ^‹ ãšÉ·aU€9l‰*ÚþYC*¸׿u`[¡R ,£™*r)[JU {ñ%OÅ_8ƒ¤yqCOñkòÕë£ð/årÛ¬ñPzðº3^CåA¹ùäx²¡(ƒÓ×hGz=¾¾ÁKpµ5Q„4î‰8î9ÐĮ̈Åy¥§ žC{ éVA³íA PKÈm!$¬E‹ºwõ˜ªh…ñ=_YHi=Y!D× á'´*Û¯¨³I4ØD6ñÜH@æ_3:OqŠ„bbû¨ÊÞ8|ÑÔ¨2|DoY„âóT@9¤Éé ¡žŒ} >cç2§—(Ž–}”Vùœ ^ÿ„c}^r^!îU¸!¡ó'™˜.@´—|(IÖms»ÙpïI ¨…«Á!PQÇNïÍ&‹´`ÇÜ0íZ²×Õ +Ê%³ ¢™Š¢[¥ö] ¶‘ž &ƒ'lhÔ¸q‰hJŽq²[‚˜ ãH[Í*K•"-g±ä; 20;TÞÎí Kݰw²„:=:ê÷†øÏO³è<ÂÜ|í”BŽÝà$oSÈ&U(ƒÅèë”@O„Ý„LYÒB´uË»ô06pNrþ²£Hk+½:'ÎtöЊ{/£7òZ[¦ÅT”fR[Ô„OËÍÔcÂÎŒª ¸|›üilåÊI¨ZzÎYíÌT*)Q¡  CL–ðú{;Œ˜øå’*]ö0 †^ð}…di}j÷´Ä`H!“Ty0àvé wf§}#íá¿ºÖ ¾¬dP¬;7q>O•äùørëELhž³—å3åŠâH™œR!õØNõ3 ¹mcIW\ƒÍç*R>O~:ÆFrÏc[§Ú`ŸƢ‚ƒ*û\1«ü‡±*Z!1Ù«$ãËuµ|*µCrÒºä&%]LPFè7BU;½.¦Åš:4ä’(ã"לºÿ'¥¼fã·º` h:$,;ízZ*sãdG?eŸÓâ÷(/OÕ?Ú¸Þš$DI$’rX}Bã·li1 •ahÕ5†ÚÁÖàæÈûÕ•Ü#ûÈ'mÜ®–[éæd6yâÐÚBü!õ8c¸©oèoºÓ-Újx´eh–SÄ€j;Èî™jƒåí» ¿ƒ nª¶œU %Ý|ŒÒc´´5‹RËìLJYÈ2=¶Õ¹Z‚ž9yåD3ç éþ<µ‚‚­ÁÚ‹c>iƒ1~(3Û>ÔRŠ5ˆ=|&å€T‡Jgty’“H橯¶ø`¦uð’$÷ð‘¯Àt0ÆI–žeOÍ}ÔÎÆ 'á+éºU#”N jïFÁ„R+Ü'ø4CŠ7Á™üDMZT›é.6kÚøŠQÉ1úÁ3cÈÅ+J@SÔ’–º‰Z’_ 5Y bÙ/ý”ÈZÌ9´_­”©ÇAE>À¾¾°jhAÀQ‚0pP2¤P±íãwÙgubÿ°|£“+s«°¯NÉF@ì_ó!õœ®|¿G¹Áq>«§•- Žô.ÚëD3ÌÄbÛÉk>È1ñ–q§-\à†ëi!ð'Vê´ÝGl@ì‚çJ{/°J•M³LRË}nÈ&p%J«sÕeƪ¬g^õòDžTCìÚ\­­W†Ôz)Bd}N)UoÕ¨ A<¼y^rf]S‹÷êñ¥HÞ:C%Q¯SjnFôRÈT+n™Î­ŽŒM_ཎ7Æîob0ï˜ö³À3 sdÄžÛ8úä³ïÁ7ÉãIÜvÇk>…~ß+öIÆT5üžnàl3ƒX² æUÖ¥î¡[q@+jÚÌÊXxÐÒÒVU õ ¡à–OjÓf&ÉõÃÈÒÔþÅõµbÆÚ¤e óÝÀA’fµ¼Zô²,XS˜«Ö fÙ¤h$§MåÀuâº+8°Oa)>2_wBò†˜Qé2ˆG—ÇëÖu©žÖéJÒ;þª ¦àÁÏ{/žì?á¦Ä!šxMEš˜ŸWœ3†&R,ž­l«Á³ÎÞFUF¡‘ýv^û^«AÙ¡aüƒÐ‰ 'b!!òɘ^(ê|bú‡b4®TIMx›[…£Ö½d ™qÐ(b@áêŠR|êí ¶=Oji>¢Ã.ˆô2´õëàAÞ =Ò)£ƒ¶¡Œ*ëHÑ`OáæÚÝ }û¾ô6Èû¾‹”+¿®ÂìLºè ôs#q‹xø]¤ÏQËúoq¸k­Õö¸ÛÉ!ka#¿D•Ñg²ÚúªÆH‹s#$½.9ªÝRUÛ)…jœ«nÿQyçÖQSHÈÖè+½ceŤöŽN½Ž?³Ãš#ÃI.ñ-^"ÖÔÌ ¤âAÿmRºª¼fWuþ ¡Jj Mž/”ÀžQ=Ûmš®SyŠ‘‹.óNåâ| ñDçÃ7†NRP±Þê2ìJ³tjú•ŽS—1sù‚+Š•GVç‹ n8I¢,ñ¬Ê‰5wxkm+…êÌ@våfdƒNhBöúvM‚Uê“g³cìt›¨rxÖÓ‹84YEë•!9YeN –šgÈIÂÑüÀ '0G–V‚wGÑÉz—’|5öI 'ãæ¼×”ó\Åý>ìÌo|zðYWÎ=i’Ý #Òµ¾’þ¼ŽþHÇ›ÅsKä°ûès3¢ÔîÙÌ-±s(® ^ìß8ž6£^Oˆ¶n†é“_“ݰùÙîKë!¸a|ØÄ ‰×\5Fè•ÀãB“{ÌâóoÕ|†¢JdõV¯:œ m¸`>½X)”CƒÎܸ#dtpF%ˆö†Ì7|×n6nOgË}|ãžM8â´x¯\Ö‘+9Qî„G’¹î4* ZlÞú¡@V•M®&]ñ‘µDæÐóˆ®ùñB56«Rµ'‡ ÝMofy逻,ûƒ¥¥XQ\Ýç—pÈK]™¬¿ÚçÆ?T>fKÍ®‰#àP×ã Ö—§Æ¤|éΠ„Àª¥ç™©W‚ÎÞõ›âÑÉ‹O_IfXø8x{åŠãæBŽ™§ Ï_WgZ|Æ®íÞëÄã¢)Ò}Cæà8ðä—^\S&lÙh½A‚’8U8$ÄÃõ² õ¨¼r¨8ЍWA‚ÌäÂßcÏAæ«Ù¹¿–)Ø…Pò O[• Ì?¨˜Œ÷¾¿Vÿö÷!ºÛ÷Í®n=Õ§1ν‚ãG=%zÞ;„ÈŽû¡^yÍ_¸¢àì cÚ2 õJ‚d ×8¨oQmÈ0Ÿ«Ó¸VžŠJðzJzÁÍÍ_µ³ÕìSþè_·-ŸÆÐˆ,[úŠå'Y%t’VðEBc*=T“‰Ð‚±¦ÜãŸÌÉ;1νþAðGgAÒ}(¥ôcâ-6†¯ëºnžÓÚ}~òÔ™µÊ³Ôä¾®ÿdgI©ñ9/Ýk7¥B¶.0«c_NB}aä„2òŒL'@ÕÒÙÍdëx*‚Z16®Éí¡T"¸8[LD] lE Iý­­ ¢…Çx¹y…3 Äï©Ø[ 5G2ÂrÖÝŠŸÝZæ0ñËÑž:¨0R’o¢°ér‹í¾Î¥=%I:#<ÄòÞ­_]´ŽRC‰ï4_ÿTÉàÍóF¬‚²?²S|J'Å"_E¦R„õx“¡‚馴Ù‡ÍYçÊÿ, ö–É‚ZƒÕ°|ßLÐ {œ÷‹.'Â&“8ü d~b ŸÄòÖ/ ã…îœegäœâ¹´Î ¢öÜÜ™+(^¡‚ý×áˆÁ͆׽*úuw߯r¸s¸øf%f9ðTeö(ƒúKîxÜJM\iãl•Püña<ߊ~‹i5Ø‘Ma‡z”B;ßd B‡êI¹Ì¸è$!6ÚÂ9¥3²øÉ*o³ ŠE$ôÖk2êöqKtKFaË™òaŸ(˜àD.•!RIVÃÔôS},†Û!ÂLDŠŽy×ÎŒš£K=GsÿdOyEyð×¹q(:=4]UÃîǃ”¸Œ©Š~ª jS^ r±öX‚\”7ÄŠRÃÆ,’C@çu,jàµâ~U€l˜*¼ÆJ_ +__ÑùRû§(޲Ƈàd¿êP t1º/Dcÿáç¶­%Êû:ü¼8tDÜ=&O¢šœâ;•äöȸž/ŽþŽ4ÓŠUt&ߺ¨v·Oê¨û1>é8㴎4Ny28QS¢ñ™Á³®h¡‡ˆ!a¾ð]ÔúýgŸ›U¼Aοկ |¥W\m\£ßÒèAÆf”ÿ‘þ¡êBÁ´RSYÑa8\ô·È`-A|7 (“º$&߸®:t0˜Ž "<@ô¨ôšAÁ›Öh‚- >þÊ͹ûìMr™“žû‘c¹:ËïÆ“eMžK˜+'m"å ÖÉßâë5ä40T XÌŒ~+([Tl<¼Ì¶<æ1ÛÔŒ¡R Ç\P-h›c† ’bc—šgÝ™ªævì¬îÆ5Ÿ¯x. œ¾qÁÒ*:¥pd´ôü¡š0Ë<œìÌT‰`Ú8ã!#{ÎØk…‹1-%HvÔi2-pAïŽ0ù|h÷ØÁÀý&ª«ò™!§µïå°XwâsúþuoönqÈ>[v•QD²â96€\g'“c‡#sÕÒË\£&"r!Ò¿d³{5•øH˜¨ß®oå²ÚYcX4“Bm7ÎÐLa~&2°AÝG¥­Å¾2!ù`8&5¤§CZ’z7ΤK&êÕ<À2øöeŠ4ÉÇXФݥ9ïuvŒ2­}¸ÙU-„„å»Ç5$íŒóê$«ãý–› ̽–˜ Aérá÷Åѭ¯½ÞL(C(ý#ý‰0 }÷²+5N«Ýa›èå¾[a» ˆE$’àªvI|r#ðÕ‹NŸXqê ‚Ê°‚Ò/Ï:KóàÅs»T­U¶×Ðka¶ÌêJ2 Lþ­ÓÓˆûréJ¤ô‹8K¦ËswlD7p~Ê^_£W|7«¥Џ2 ðXˆlBZ×ÕÆÎÖÄ,8b³Îö{Q0ΞOmÑ*£¡Lí¨V7.„CTbßM%Ó› 4ÜžÛR+Aµ;rê¥Y²u&!<Ùúb>ët›šÛÚxt€‚%îão1›K½†ž„ΰ]¯âÒŸrügª¨<‹{pˆ-i´+Èž¡.¹ËLÉŽºã××¹wÛåH¯ ‚l 0CB¬H=Žžº¹Ø‚X‹Û†À?0éb–<ÿŠ«ù,^—ÅLo^dqyžâ„Û¦AÚuÕn©¨Äš÷,6ÀPdZŒ¤R¼gIÌó,#v'¨ûuqž6œçá ¦Oñ7³ÞÌ0 IDATÝ4kwÞó‚À:¥sßøá³¤ÕÎ-UÇ¥K/y!‰ÿµeÝowk CìÔÒ¨%} ”d@™Doʘ ½z¦Ì"æ€ÔÉ$ÿ UOmsKÐ^yq7?À 6åÛši³Å-z j&tQAÀÀÒ0w,*‹Ò¹”™,ä '8áW±U¯äØý ¹‰É´¢cr{5^îæòÒEý9¾òŠîδàµÉ]õVßè8ÂÝ} Ý{]Ãw¦• I¹Ì(qì«£ý ýÝÈk ¾þoí ©•t’ÈÜæ ì#â@°4’x—L1ðë­à–ö ¨s¨ŽÁgUüÊ9YfÞšÝ:ª€=+Ä‚— ºR%zwŠG¶¤žjÁeóß¹À‡Ó]ܱú|ðtÛ’[Îḧ¹(WáÝŒ§œANËoâp¦r_ôÁ¹­<@cu¡§TV™Òtû–!)”{hÍh ìŽªgÁ ©Z;ö«ÜÀòH)|ÄCÓà ƒP¯Ãt]ÒÆïž ÃËGâ±ÏQ 5Žû&l1m6ã¶9Øy£Wl@:m©3 ¹€-ÛbJâêÛû ‰q¹r]ÎtnKâ5«sü"E§æ^áÒwm¥žúô“ô_§6‡ð¨Ü1GßhÞ‰[M(òX-¬ Þwb/˜~ƒ0Å–v²—r´5º€æ7ê–—#%áx5y€xÿÝޞϋÏÎÖuo9A§„Ó ÈPÖ|W•€P'ñ»s¤€¶§Ns±·¸©"÷Rë¹N+?Y•ÇÊ®oÌüí‰»Ž /¨ÔÃÓ-ôœLÝŒœ™PöU‹È!ä&ƒÛ2ã·ÆÊ{^ =ìIø@pŽHKú.o»º¸œÔŽIšë^`QÝt@š,ÎÍ×”‚& ž’6ÓEfêL_įa1eUL$mü¢Çç”eô–ÖŠÒ4oW—ÝòVî]r×Í´:¯túQ»T`-éDÅ1»¨´XP‘$²}¡ç«¾¢VìõÍŠØ]ÁŠÐXxÎÌÏbâc ]z02*0ŠC¨ïтԿl§Ðûù!j4ж,yì'[jf‹MV·¬ªƒ Ñ”ÄzÄD>J¦·nV•Úñ¯R»±ÞÓUò‰È‰6{ö¾`ú‰~nwë åÄ{ЃoÉhUsɇö¥Ë´&q•ÆypCÂÏÏŠö(©hWW~,›‘“µxÎÛ+Ö ÄvžK*–$ÅP9WQëÖ™ú<\Tǽœ`´\œò²õ+„|…ª"âq­{Ú‹ ò†·^Lz¤ê`^X£•°–J†ÐpF?±1Dgž·GÍøU–¨bÇ›E ÑUòïŠ ʆ!¶bÍ—ÄvÝ–]šsðyð÷³ìðYâ^§]×Sœ–œñÀëü߇°à]ƒèÉd_¢h®& CÕBMöÚCáýcÍ ZkD…^ÅàÁ‘%p(÷Å=K$ ,¨[&‰0?æ´%Lj3¼ æ‰þãÖ9¨NâñÉÁ¬ ¶uàB~¿ITqÆóÍîjˆ˜´À¯øä³²9÷ȯÙÓ’ž5<…Eðø]çñsÌ–ÝÅ¡!N¾oŒr— ôÊ~FtóÌXד™ 0vçŒôéA‘ÍÑ£[19U;A*É[6Œ>OØdÇŠY„üSúk>ÜÞ¯€B°t70o.ÒȬC^á”Qåñ®¶Nßj½8#no˜t°ïàáq_å)øqâ¡L"øÙ/ßñàf +¤°ÿ?š|¥J愈ÿýk_f'–ÕWü.?Ø@8ác¶k©ˆcîvÆ›‚ÇãI?/¤ÖÑzOû÷.(ÆYHº†`ð– •š?ÓsQ=-Ç>€°Ëì'Ž=è$hs)ój§q¥Þë®ø¤2àÀå¿ zPÒ—Í'mú‘ªŸôX¶n@•˜‘ØûN1`ò Sì£Ù) ΡQÖ©a¥PL¡"…ÅaFîThͰW0 ‘›Ê®'\zO;·ÞwkΡ²gæøñ@1»0w¬Ç i ™ÝËŽì„ϰ§dNÔ‹fÒM>0ú–ÙØ‹8-ñ­$íÂÞœCuO{_"ŸC10¼BIÖÅõdC1wú%E¡.·аdT3bÇ£.r`ënÓÍjÁ„É*=ÈŸ'šCþ¬nô¥ˆðPµ|°¬É±P@ÃÕZGtJ’ã«#*o¤½ýÒ{¬ƒ:§óøí(ìÿŠì7øÅ+œÖ‰m²Ÿq"YTrš¤‹ùmñÚÔl )yK‹ º0e lSuJ ±ÊÖQ—ð®U©Ô©˜?µ-¾Þ•wó×mUQKÁI?uÒåA†Dÿkë *y\OX‹ÂĨz2 …ñrZø]cçÒym—Î+| bûˆ[úeÝØÑÍyÇáâŽê£!X£žÌsö‘ &Ÿþº¨Â=<5•wÕßQ·CŸ†sÂ%®ø5¥ªÆÂX sn`X}IýzI=$ˆÉÞc/d?‡ ¨ýé«x >˜5¦åÇoG;…M†PCL²‹Òâ¢S@}¶…¢R!x,‡^«|¯eŸg­õÉë|ÍøðcÜžêååÎøõÖ¾-½Êaw7Sí îeæÛëq`I€ á-Š.ל˜ÓˆMª´Ø3ö œò¶Ä™Ü +¢…20„¥žb.ÊlÞVªyÍ6zrÆ.Íòàë&¶yÌ6(ñ? æyëÁÏhܵjéìƒÁd¥ƒÉÄ´Ì—aÇ/f¦ÄIÈ2¸ûE “ î:§^V͹Ɵé÷¡ç`¹ þõ’3\åZ(Íc™ÒWd§04ÌW»ÏsÐxÓˆßİPj¢àüˆüöá„áë8-9¼k»ÙoϺC1ô ¯!™Ök®ÁZæLâ[@å®8’éJìÆc& wï”–J’Д“ž+bçŠ •-T –`ÏQŸ ÕŒ†2ú¿°2ÙrLø& Õ®¥=IB¸A.X ñ¨P)xn•ÃߘÉç¨ b ñœÛ]^üƒ—K®´`ül;y“G¹Á;¾r¦uÊLû©íÙ²û„yä‡#zK…üŠM@•´Ùô?ПÌ:ù|áÐmlƒPFÂJ¹òó&Åaå?Œ–*`rËaAn¢™FÎ!Iϳp_†ªè´ÏaµÐǯ œœïbýàñä:]r{S,²ôDCœ¤LKÄîAm¼EŽ_ìäßÃiFä”ç¦Q_, JvåU ‚t Ë5kJ¦gƒ Y!îD » Ë!$ŽûÉà6Õ<¯å€ïæ1ä´¬’üÈì”.©.o)HK³cL}üaô·þÆÅÉ#þel½Æ»‡¥×¶#[ÈßŠÓ¹ØØbÄkÒ/ì7ðX¯œŠ¼zð,P ûï9¹¤‚Ë8¡LFs²÷ºÄÙ]È\ÂdÇöy:$½íÒæõ zQ­µMã¼ ”¬ùоjԮѕ†J:†@6‹—ë>-ÒqÝ©¢R«êÃÁ?Õé!Á•§öb¯lÙÊ zä<™¡½¸Ù^_wÇ,×·Öø5VþÔ¢9‡°0ãDÅòè Dù3ñ²´.'“k ;]qp暌'&-}ü¶tÿ{Á:ŠŠPx•C2<÷£ /v˜ãÆA)EÁjÒPqåbÀâ“äºcAâåÕô‚¨ }Q!48lÑ7â¦kñ‹Á=öm|…5¼2Ã{§TæÅÏíÛ£÷Õ©Gy #oxýò¿Ÿrôë—&ƒáv>‰ œLcÔíxqnÚɦhq#!+ -L|ù¿^/¸®%F-%¦8¥àyƒ^YPU°­m–Ä„/Ö~ ‡å ùóòÁÑF§¬ºìJ©à,‘´eÞ»¼¾×=þã¶/z­õ¦N‹_ò˜ƒv¡·Ú¶PW4(F¸õ²4²díAáÆõQùqqDF”þô@ `Í ä¤gGØùó¨¯füzœ1(J-éDѱxY`æ:1ÀÐÇ™s(ñ lÙ§§zJ†¨eTh*eÒà\ÿÙà鿹™|ÿà>ÓMþ"™Væ†uûÉnX±Ö*)( b'jÊVÀH%Ô4ŠÊ¤g\»ZUq ¡Ý=nÌu熃m`€‰'#ø›‰baA”‰¶;2>´äÒ—) êuŒj×9ŒèÓ¢sø‘1%_ßÛ|øj+þ‰þ¹úáO¢ŸTÀÕýý+"úü·Ù´ÕŽÿÑ? »±•eùù8òÏÏŸü;ú­Ú„¢ŸDòú=i,ÜÇzt/þH$í ülë{Ÿ®î7¢¢Å5|ÕO~V§DERíHP¾~ûyOËÏÍ”ÿ¨þùúü‡Ù½u7ÚRÈc2‚úQýäGFûái~<žØuê«+«cçed¢ŸôCÌ=kPèéjn:zt½ã\gè?.û.9ãB¸gLÞÄ·}—žW dà`V×edpŽ&i8;‹Sº¡^²È!÷/öh)wAþa7Á[¨ \o¼7t.ޜٖ Ù|Ñ \¨Y$£àüƒŒc 0ÌbWÒ#v†…¥S óéÕ5†^ó~Y*K>ÛÌñaŒî‘’Lßh¼Iþt­k–OØ‘¡'83$? Ñvÿ¤âÝpl_ôÇj$–ÂQßÜ/È5nCK¬zlÐöî€ôµ¾=&e×þ‚J£\nÅŽU¯ì©kÎ Á\¯˜GE1Ç YÇ!‹hÏ}^ÒN·Œ½ï™õEöç¥PvßûÎßÏiežÚÓïß(×;EžI›Kh$“ ¹ Ù–mNã°+åFѱç›H¿tÙT á2jCðd‹±Îvbº`ëX·—r xï¹ÅÃÎànÄÆÔÏ€=*b§X0F76øX&Ôë ¥&_R>8=ƒ|5ÇÃoñ¿Ôp1Ÿ'(À'Ð<7ÄÓOþlo?¾)Ö%?DŽõL•q`º øo#&Vƒ,b›«‚¤8>ÃËÆÈås2 Sè?¤€ÚÁbK͉;…üJpž9b ‹ÇŽ OrÕ¶r,~uoí&x{¯ó>í_ƒGž× Ùkþåπµ1ÂÊ{Ý×» å½Ò;ÛB‘KöŒ`ÉvÖµÜ6önþÛgZ]Ónظ›êøÃ!~8£™XÛ,Ê“í`ÛùІ+fJ‹C;<1“BUf±¥½p{~>uª˜ ±È{™"ÜÂܫЪô—üü[ÃøçE-hÇ–±ð<„¼:ë¡ö¿Gç*lñkpÄ£'ÏäV ïšn~{§•ïåv”¿Î×G[Üc@h e¥õU0Ks«‘ås‘Z’e—ÿBØ8(§³+YþÖp¯bée„àg¬H‚“§6û)„‰< A/Ç¥‘›×îMtZé¬]\|ìüûgã¹·$1Mða~%³súaÛœ÷ØŸo洮莦9œ:<Ö™óŒxQqÁ @ìä.œ%BÅá°8ÐÑTé2{r‚^Ñ &|Ýn¤ ô(×)ÕÇJëAÐ?†VÛR†ü=¶'^õRïyPîN ¶w2”Šž·]Ú}råÁÏ:ÔdÄx•‹.(K§ÊW2UCíoàZÀð‡ÿ–~!OÚÆVUr,DÍ9 Óäxºãá݈~GÔo#ƒq0åç·7ȦӺó6ð¸’ì@1ÍØPƒgœ6ˆ½¯Àe€ ÈÞ2L Þ— n,EÜç½ûU™!&í±Îžãô±=­kqCþàÈo“qdÀnÌíñ]–³ÆlÏ2⯘”{¿n:­ç;3ö}‡%ÛG, vj5@xÑ k41h­Öµ"Ÿ]Þ~£4qzû¥KDaÎ>„/i[Gß/ã‰õ_Â7\UnQ8²¡ç‡¥ObxÞînÖEÎlÈK¾Èû쯼`1íms»é´^â¶u)þ(ôJNɺ”w¯ÒóÄIDATê… Aƒ3a¦´ ¦-$•Kcã¥D_lqö¡$ËeŽ«vÌ×ï™y;²tûiÂ\îå.2dsC\{N½¾$¯wjqDÝ‘_ìÿ6çðÒÓÍÓiž5ï¿19Yq J‰»ßìÂ=v§IÝê4ˆ‚Ö;K¬»h¥¥5r!Þz˜QY‰"L*„Zq0íc?•즧£>2º¿¡ò!÷\ËhZÙ Ä-W8Lø—pEg%Iòò:6úé®î[! §Ó:ñfc7ö€- ©äm›—L5#¦çKººxi"úÂr—&[bìHÈ«jB¡dDŠØ)¬!YBÑHè´ÆF»´¦ò$œx„è˜ð9qŒ÷É+äèv«+¼‘ùæ79Ïé´¾©sg‰v¿T%®Õp.½ë‚$䟵^Ä¡ø'PºÐ[@ãœÒLA!”DÌ‘¡ÒÙÞ](^}Œ•­ôâ‰Ý]“ e">/ÉØc¼¨+*ä'7±ÛÐiÜ?~Ä/c7ø‚ûÎ>o:­+žÎ}<1>¤ªCH~ä®,¯†^Ö Õݨ+l¡*“ìÚ© r=ƒ.ÁŸÀSÞ–.‘¹GõÉþyOéáÇø½Ã%öýp”Ýñ±k?nµOgZÂv^Áóô=‘ Ói|ôå¸Ö+¸<%ö3¶‘Ø6R̲YœÖÏ-…»ReEÎI&‹xz87—¡âz)ùM¦dóé¬B#¸&%Jˆ”EŸ7=->@µîKMFG8ÑøÊàÛD/ ÷ø¥‹‡Ói]ÇÅÒ|;ÊDP• 60ÄØ²Àå„~«ù­èœÆåÚ0b%__yÒ‘_AÙž«äkVíC,cæ¹½]#'òò¤G”lœÑ¹ q¾Å=õ4±ø.öØ!!®‹,ѯ¾Ncå)”ÁÓi½““³'ðGmÔ÷ã q®Yá{ñxm*KA~ 0ˆ¯%ºÄ±1Ãbdy>ýe<šÑÿ%ÍÂ^7íJþÆeNÛ 2JœÍìn ñ©Ïí¥uº9Þ= xéí\Ói]›cI" 5™×ÆSr2H6È ‹£éX|RtV|oTöÕʸuZˆ˜È)÷Çæ>«:©É³˜a„ñàWdÚ8‘¦0NCÝ4î‰}޳îã äô@äÓ~[ûvv8Ö3酪ˆ¢K“7xÒA꓊K©­Lâ»2M𞙌F‰ZIæ7~ÊØwKÉî ÷48¨©ÄO0˜€h€2DM™¨<ò(ÔÆ œ@Ûçƒ*q²aνGŽofÐåÝNxfZs ?OgÈw¿Ç[OLé4´fÆ„OÛ.>¶u™œØgy/ù¿e$æ²µ!¹B?«+Auô”žJ¸ä”G“Nï.= 9Û8¼û:ä§Óz 7¶ƒ„jRZö+T*`çñÉ+0Ï!rf‘ßÙ´!ˤ’pºbê Ö I‚ŽFôÜÛWqrD§˜Üç>ÿ|½¾ˆïõ ¤žÛ53­ïvùÔ×L´gjÈýº“Ã'ÏÀßý‰4'YÇyfæ*{ýœ·¥ìO×—yXæˆ>µGñ‡¯û©Õn‡Á÷0…÷øo³Ôò&Æç]Ó¾é´^óÊp pç¸3/9qOÓl­bï¨39ÎïIB{PBŸÌƼq·!öüø*Ö¾’¤þz–ÙzkÑ)~Yeúo™M§õ”\ŠT·÷³7»Kdà¯ãÏYìê\j+£5“Å5»îÎSâ0¯J¦§Éç«R’• “Ô#6‘{þ£¡ºT¢?Tµ“³_¢ƒ¿!‚’ƒØúD—ð½‡â{Nr:­û™\ó%(0ÊPÈ[ÁG-•rí³ƒçy<³I2Cõa9pÚz¢½%hÏgd¢ ¹þE›ë{®é´^Ç™uykâ>„Ǻ~Kæ+PŽlÔYy¡býêdûÍXð•B§@$îT²?’Ãñ8 þ+x»r2¾ñTï>”rZ¿›ÞãIëGû™Ÿèóè?û¨ â‡v‡…èU¿â0WøH|ûÐeƬ†É?dç4ØÙF^ôŸÿt®ègîZ~ëýñ¯êë>œÍ\MðdzUø>nüÛÜa:ûÓ ¹>F^@îϹ·ã#qÌcßûqÒÉœ·W=¶3Óº1©b?`ß?‘Žõ?×KÆÉh,ß©h ¯±+ï»;Pež'ç¸y½rY4êÍHñ®½âÃ[z„7Ú|«ã79æñ/½ö¬fyðõ“°Ì ±ôøñÄ÷O‰óÑøõdiŽê*4¢:ÖU¦ÚUvY,‡:'â«8Üížòò«D³»$·Ã»˜ŒäîyѮЫ¼ôÝÏwv¿3o:­ï䨼ùb¨~Â#¦dû÷:&üô­§ w ŸÂOZºúѱâÝ[Ê~פŠ(àaÊ\¹&fTÄä”QÜS¶ôÄ<æ¶”èé{y†}x¯½šNëU<Üò*ÆÙÀ¾™Áª)! ¾B–!žèglFÜ«7(]º÷±W”V’¬s5ÙûøÁl2ðµrå‹pi,B ©î|x,eB§Óz3–„ Æ<¤Ý2‡|»-®:9*).òÈ›/ã„ûãüwµ%MHM;œIpËLq®Å?R_Mw·Åø7“ÜË©çÏgX•;©ûðtZ¯ãÆŽ+¬y^ÝOR¾'eôÜø$ÛJ½šÞ‘íò®šÇ´[õ„ûRü7;ÿ‚~½·ïÅy8åê&÷à/íÀ䌧' ŸõL¼$2­Õ|c‘É]/+•ÃJî˜ÞAFžúø¿ŽÓÇénàŽ0\.È9Î=ë×Дúè“|:ÓòÊ7D6ÓiýŠyØè$óB›6ùµÖ ãYæ|†wÕ‹q<¨Ïh*ÆD!ÐU$Ù4â[fÉ!åäuJö²ëVòyp~+;ðʉàtZßÖñxÆaÜÉ$dyF 6ÕoË[pnH~VOKζjDL(a®L{'®ø˜šðÉéȈlÊ ‰×7óOü'<Ö÷ôvù8}è™ x‡m+šý6K[΃q1ïz“Dï£ú[I{'ƒgÛUpæñƒŒ& »ùo3yCËñH®Ï)¯ÎSßÝõN§õö¹qöY©jw»q·(-3ÅIV½8±m­Ûß®¤aåàO²ʽxÂ]Óift±Å7ȇ^âBîÍh§ÓúUÒ©ð·…Ü ™ŒÓ9A‹Œð pe4ÝÙ·ÙÎTw‹cš]N8ž<ßUž1ùIJÏ)í÷#íCž/û/væG/y:­·»÷Ü1Áò„<-c-à‹Ö1‹¼æïî:ÉéE˜Ò£Ý8=>Œa‚™ì»4~Þûõ¾W¿îš,ïO_ƒÖVñ…×aûÿâüyÍ{mi›?…ö;gýƒ¨ü¤òA…ÿþ$’¯×oæEýè½Ï5“úOóyÉ!jkûÓßðä,W"ü¬˜¿ÀÿâäeßÿHJý‰}`Ô¡~&üPþô.ÿýß©×xÙ_%‰yK‡=3­7¹ÇN[ÈUýMwÔôsΔ«# qÈʈªýß©Äé`~è§+™D™¢wêõ9ø…áv7[Ì{ï²E¯å gyð-V²Ã5-^e†b€»c°JÒÑ 7•kyCº©¤Èì•~ck¨äP~Ð¥‡H–O/*y>E{ß »Ë¯©îqÖWì¨è¾úšNëÛeäkºJ€>¾„ÿ*idå<+/Žiî"0wäC‡£åzæ/Œ å¼³â´S¿è‘¸b{ù®4Ö7OËÄy冈à¸7,¼ûyG|ä ýå–/ÓÅi¨øI ÷ÿRÑú+|u²AøômyqÅ÷Á€L Æ÷ 0ýÑÀ> úo­Á…ÐŒuÁyЖÏwÔ†ßë}¾»<ˆ ôŽ¿¥¿å#<±ÇÞ~  ÿpx ¦ñãʧèܯ>ý»>N:·dµ  }¼¶}xâé]»¦ÓzÍõ1þùãl~kíòû‡ù¡¾]rïv®ö3í]ò‰W€…ƒñû9h $á,?ÒYÂÏö?FnñnüÈÇ®tw*|æÅoç½YGøqR@ÀOµÓiÍõ¢©ýö(ÿþdÌôŽ€ôgeýcwŻޮcoàG"WûHoµºÒŸçÝ©æþ±TÈ8¤Êýœ¢ œçnÇOt䓞ç3²ð«_Ï“žÕÓ Åß2ìÇõ_ÿwÿíÿ?üoÿûÿýÿþ?ÿçïÿ‹ÿãïÿþï§Ç˜k®¹æšëuÖ¿ù·ÿþ¯ÿæoÿóúÿëÿü?ÍLk®¹æšk®·YÓiÍ5×\sÍ5Ö\sÍ5×\s½þJýÿ?æ¦Ì5×\sÍõ"«”9­ÕyýîñïúŸîOŽàê?y»ö>@¿£¿üŽþòƒÊçÀÿÍüäŠ?9rÌ·;aÿ'e¾Ioð&ý 7<ãäŸ¼Ý ÃŸÌòà\sÍ5×\﹦Ӛk®¹æšk:­¹æšk®¹æšNk®¹æšk®é´æšk®¹æšk:­¹æšk®¹æšNk®¹æšk®é´æšk®¹æšk:­¹æšk®¹æšNk®¹æšk®é´æšk®¹æšk:­¹æšk®¹æšNk®¹æšk®é´æšk®¹æšk:­¹æšk®¹æšNk®¹æšk®é´æšk®¹æšk:­¹æšk®¹æšNk®¹æšk®ï´þÊùy!úÿæî¼øú Ñ_æ.¼øšoÒ|™æ:ø•9-õë¹æšk®¡õãÇ_ÙŒ¼àåßvJ§<à,Î5×\sÍõ6k:­¹æšëÌõ‹Wk^ðòo;¥Ó¿p:­¹æšk®¹f¦5×\sÍ5×\ÓiÍ5×\sÍ5Ö\sÍ5×\sM§5×\sÍ5×\'­¿š[0×\sY?~üøüëøwàu®ý¶ÛqîÙ‘,ïPÓiÍ5×\çØëõ¿á¿½Ï6äûÝŽ¿Hm`÷Ïgyp®¹æÚ¿~ñ©¬WvÉïrkJ)C§:3­¹æšë››ï_ð^\í´J)Ϫ‚N§5×\sMõ}®ë.½ö›÷a–çšk®é±¾ÏUû{13­¹æškz¬×>÷a:­¹æšk®7X ç==ÖtZsÍ5×û%Ÿ¶û‰]úWpfO¼vøíWœÒÕ_j:­¹æšëœ„#óó_až{íðÛ¯8¥s¿ÈþáœÓšk®¹æšëí×tZsÍ5×\sM§5×\sÍ5×\ÓiÍ5×\sÍ5Ö\sÍ5×\s½úÚЃý7ûÏÿý›ûïç¦Ì5×\sÍõ:ë¯ÿæoÓR¿˜k®¹æšk®Í´þóús/æšk®¹æzñõ£”ò¯þ›ßæFÌ5×\sÍõâëOÿãÿ72ók¢iÎIEND®B`‚saods9/ds9/doc/user/catalogs/2masscat.png000644 000765 000000 00000446053 11332127303 020635 0ustar00joyewheel000000 000000 ‰PNG  IHDR&ʉ* èbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ5zëÖ| IDATxÚìÝw$×}'øgó¥+ï«Ú›ñƒ˜@IˆE*tÒ‘º¥¸:‰¡?$ O!1(®„B« ÆéB!¥»Ø ]PîtZR$@ <0~zzÚ{請ªËûª¬t÷GVvW¥]Ýõ7&&ª²óÕ'_v×ûÅËÌÊ‚¦išÍf2™Ã0M‚à0‡9Ìaó_/†aB|Ï£±®ëã÷ÚÊ*ð½pKKKáp˜ã8$“Ép8\¯×­5~äËýõK#«Yýg?úØáïû0‡9Ìaþ+æ;¯\?Ó!þÒ³g­bð€c¸iš_ýêWÿäOþÄ0Œöå?²áÛo¿mÆG>ò‘çŽ=šL&Ãá0i6› øAÕjõí¹µ¥þ›þU! ÆMM³cŒTM`„„ª®BM7#Óºa(Ɔaè¦ àÖtkâ8JTU7 `”4UÍÀQ¢¨ÚO5 ݸ %DÕÞ …RrO"ˆþuP‚Qó.#J Öÿ%Q`í_…¡AÍV¯¢š®[ïƒJISýÿºÿGµ‡ZL!þ¥Ð;Þ³Bmïíó“@„&Êú²Ùl©T‚{†d¬­­=`„„°^¯3Æòù|¡PxÀ†sssc§Ó™ÉdH2™ ‡Ã¾¡– !Hm¯OÕ»õBèwËgu¿14Œ<=1ÿÕÑEŒPo,àvŠc3k££½àÌrœ|úHg±\[ÙJq_8Ù·±“ÙNå9Jžw 쌧—¶,´ZS–6’”àó'{㻹x²…N/Ç3ù2ãȇ9~mj©RkðŒþÔ§_¼1®ë†$°>~ò uJNõ¾:4… \]áË·ç1BÝQŸßã›ZÁéS‚§·Á§:ªu=ѳ*l%³%ÏÌ®l§ï@9úì“§_¾1¡éº$°^<õÂÕ¡Ç)>rª¯…ú]ƒÝáK·çBÝ_ÐÛB»Â%Ó‹›„àS±Z£¹¸ž¤?|¢'‘.l<u'+1Ž|ðÂñSKåjƒçè³OœúáÍIUÓEž{ö‰ÓÏ[¨C|ôLÿ+C“Âßu¤'rix!Ôñ†|®±I 1ŽN/l‚OöÇꊺ¸ž ?|¼'‘i¡Ÿ˜_ÝIµÐc7¦VÊÕ:ÏÑ=qê•›Sª¦‰<÷SOžùÞÕÛB·C|ìLÿ+C“°Ïy´7úŽ…†½a¿{lrc4Ðâ-㓱†¢.¬'(ÁçŽwïfK;Ž’ÇÏôϯ'SÙ"ãÈÓç M¯”*už£½x굡©¦ª Œ~ü©³6*<~vð‡CÂÏy¼/úö­9„PgØ ¸Ç&–1F!ç¦ç7Æ'ú£MU›_KP‚ÏëÞ͵ÐÇÎô/®'wmôÖôj±Rã9úÑ‹'_š¶ÐO|àìw¯Þºeቇ_š€½Îý±·oÍ"„:ÞhÀc¡ýA‰gm¨>¿¶C ~èXw:_^ßNs”  Ë!x~ðù·Ç!ħxöhÇ«×gÂAŸ³'ê¿4²„é{Üqhz`Ò×€N.íPB÷†K•Æ’n&ó[»ÆqœèžZÞNªcOží½2¶\¶Ðóƒ/^žR ü/±Qá¡£]¯\ŸA½Žž˜ÿêö8[ho‡!4±´M =Ö*UK›iŽrg£[6záD×Ôòv:_å{âLïÕñ•r­)2ö¡ ƒ/^™Ru ü‡9ò½·Ç!Än‡pîx×¯Í „^G_,ðÎíEŒH,äöºä›Sk“¾?Æh|q›z¬'T©)‹›) § ›É<㸠ǻfV)½6¾Rª5Æ>taðå«ÓMÝ”xþÃýÞ[cú°…Bð9ú:ƒoß^Ĉt„Ü>·|cjÍê)!x|1N =ÚªÔ›‹)ŽÒÓƒ±íTÑBÏïšYM¤rž±‹gz¯O®”ªM±ž|ùÚLS3EžÿÈ£G¿ûÖ€ØãΟì~ùê4‚Øïu tß^°zð8nL®Lzc>JÈØ‚…kæ‚…Dw2Å„…vέ&vsžcÏôܘ\+V±žxåúŒ¢"Ïä±£ÿüæ(€Ø#óœì±Ð€Wì½e¡AWÐë¼>¹J0é‰ùm¡GºƒuE_ßå(=5MfJë‰㸇uίï&³ežcŸé¹9µV¬(cO?<ðêYE5Džÿ¨…ì–ùGNö¼te BðÈGºÃoÞZÀˆDƒ®Ïy}b•`Òõ1ŽŽÎoYh£©µÐþh2W^ßi¡ -”{ütïÐôZ¡Ò°Ð×nÎ5TÃÚ½ßycì–øÇN÷¼h£ÇzÃoÞšGˆD®°Ïumb•`Òõ Œ™ß¢„v•¦6·¾ËQz²?šÊ•×v²ŒrçŽw.nî&2ežã;Ý;<³‘/7Æ>ðpÿ7çêM]äùo£¾rsAìwK½1ß;ck‘hÀásË7g¶&Ý!d|)É:Ðé«)ÚâV†Qz¢7˜ÈV6÷ЭL*_»pµI0é »yž]Ü¡„öux›š1¿a¡t±¶žÈ[èÊv.‘­Œ{øhltq'_VDž=~²óí±Õº¢Ëÿ³=ß¿:kä–ùGNv¾t}Bìw‹GºƒoÞ^Aˆ„ýrØï¼f£"Ï,ìPBûb^U7æ7Ò¥G»ÙbmÍBûë;¹D¦…Ž/íäÊ ‘gì¼4¶^StYàŸ:Ûýý«ó† ]2ÿèÉ®—®ÏCˆý.ñØê“#~×µÉ ‚IgÈ% lÕ sn=ÍQÊQò^§w—ë™ÿð7×ï9Ÿ8ûýÏ<êsŠ÷¬:…jó›ß¿>›øÍO?ôñ =£™bý?|ëêòNá?}჋XUÇ0 ëR…ým5L0¹–ùÊ·®Ç|òŸþêSQŸÜª7MýåáÕ¿|aì©SÿóÿhÐ-Ù³¤!ŒzÅŠô‡dh»Eå{7×ã¡ý !(Áõû¶3•x¶j佌N÷ú?ûdÏ7ž]I«“)9ODž>æuœÀ³R¥Z«7¾õÆÂbZG˜¾K«¾¨û‹Ÿ>ùõZHªzS}d!p‹]!ו©8Á$ê—ݲpk!I é 9‚“kiFi_Ô]i¨ËÛžãŽvy¹êVº,2îd¯!žKêÏ/$K5Õ!°GŽ…ßÛP4Ó)òOFpc@ìs°Ó½×GÖÂ~·Ør]žÚ˜D|’Ç)ÜšOPB:CNŒñÄjš£´/ê®*êÒvçèÑNo2_ÝL•Æìõ/Æó{èÈb²XSe=r4üÖø¦¢î¡K`Ÿƒî¾v»…ö„]—'÷Ñ¡ù%¤+è$duÕmi;ÏsôH§w7_k¡=þ¥íün¾.ñìì@`d1Y¬6e]8~gb³¡N‘¿x"úý›Ë`ŸÌÎö_½½† ö¹…žˆçÒäF$ì“|6ÚtR‚ÇWÒ¥½W½©/Æ[hªPÛH•,ty§°›¯I<;Û]Þ-ÜüàÆ² °×B‡[h_Ôsib #öK>·tsn‡bÒrp¯¤,´¡Úh‡7U¬oìZ¨oe§Ì×$ž;Ó[N*MY`ç„/OnÕ›†Sä?yñƲ×Á ½2¼º‡¾3±iõ4`£!ãÈØJŠ#´7êRT}!žç)ìôfŠõõÝ’À¸ݾÕD1™«Iº:¯)ºC`ˆþphU7¡[æÏm¡?Øé{k|#ôJ!¯ãúÌ6Á$tˆ<]Úåí‰8uÜÛÌ1J:<¹²²‡nì–vltj½…ž?º6³]mè=v<úÊðªf@·Ä_8~yhÅBtúÞÛÀ‡¼RÄç¸f¡‡Äs#{¨ÙB;<…ª²š( w¬Û»‘j¡§ûÓë™l©ÕÓ³Û•†æØ£Ç#¯¯ipIü#Ç"-ÔÉíò½9ÖêiÄßB£YÙíÅ]ŽÐî°Ó0ÁìFÖê©¡Tßÿ,'S¬ß³Þ®ÏlÿŸ/M~ùß]¼ç,çïÞ˜»>›üå÷Ç‚gû‚ÿË^Þ)¾ü×—þá?ÝtB+•ŠÓél•«e©ª|å[×ÛÙÊýÍõ?þ÷Otõ¦þÊðÚ_¾0¸:÷:…/ýâÅöYŽ“§9ë÷s/¾u}za- $âYWxÐíu›Ô-_iv¿ø¾›3›7´í’pñ#Ã0ËuµÒÐLµf}wñ–ʺ¢]‡ Ã,×µR]ey%!0LÓ*§5EÜXÌÞûÐéè#§|ûÅ×'6wR¹ðñ‹¡`'F°ÑÔs•¦¦›n‰: !¨+z¶¬š†‘œ»^C¢7Š ¸øÎ ãÊL’ ö n™ /¥)! c<¹žg”ö„äzS_N”ŽD©Bc+Sw¬Ó½’(§Š ™çNõxÇײŚêØÙ>ß•™Ý†jºDva0ðòí-`ŸÌêö¾>¾ ¸øî ãÊL#ñ ^‡pk1M éðKãÉõ£´7$7T}i§Äst êL—”Í´…ºV“åÝBCæ¹SÝÞ‰µl¡ª:öPŸïêìn½i¸Dv~0ðÊí-`Ÿƒžêö½>Gû]|wÐqÙB=‚×)ÜZLSL:ü¥xb-gõ´¡{h¦¤l¦+"ãŽu¸Öv[èÉnÏäZ¾PU{¨Ï{­Ý2Lèsp§{}¯µPÖr]žN`„Ã^Ñï†l”Y(!=!GS3wŠp 7-Ô/ _Ír„t‡šn.lyJû£Î|EY·ÑÍt5‘¯Kýϯ-}ö‰#œQ•Dq5«ÿÝ›óÖ¼#Ôvÿâ‡úœTW5c)­¾>¶=ó|ü\°R©bL$‘ÿΕåÑõ:¦,[VÕ†³†=ª¶S…„ê 8õé§ŽŸètbS­Üwo¬g+úÏ]ìêt 7k&ÿ7o,Ó¾H@pÀÉuúÅksŒqØÃ{$îöržóò£©"£¤Ë/*š±œ¨ í ‰Ùrs+S—ŒÈéênAqðܱ˜<³Y,T5—Èèr-eëŠá‘¸3=î7'wuúôD§ëÍÉ]-Tº:—Á‡ÝÌ+³á圅rOî£ær¢"p´/(æÊêf¦&1:‘7Óu =“g¶J-´Óyk)WS ·Äéq½5™Ò èkCýN®;І:ØðRŽóñÅ“ë*¨š¹”¨í Š¹Šº™®IŒ„å­L=i£sñr¾¢:îd§óÖRÞBOw»ÞžJi:ôÉÜÉN×6”®Ì¦-Ôï`·–r“¨—gO¬%h¡ªnDež9öÐÎÛËùjÃF§Óš¼2;ÕÝB®ÇFCnæwò{(OñÄzÁê©f˜‹;P‘Ñþ°ÏÖ“ù†ÌÓ£QÇ|¼œÛCWòÕ†á¹ÓÝ®KÓiU^™îv½>‘„´7$_ži¡'?´ØBFÆ× ŒN¿ æâN…çhOP,ÖÔõT ÝÎÖ6º°SΕU§ÀèpŒ¬ä+ Ý-r§º]—fÒª¼2;Óíz}¼…öí¡.tñC‹YŠIÄËDFÆ× !~Á0ÀÂN™çHOP*µ£¹z$êXÜ)g˪SàŽw8F÷Ð.×¥Ù´ª¯ÄÎô¸^OBˆýÚ–/ͤ1ÂA ¹ù›‹Y‚IÔÃ$FÆlÔ4Ál¼ÌSÒËumÍFùÆN®….í”³å¦…Ž­åËuÝ-r§»\WfÓM x%v¶ ˆ8.M§ÂA »…› 6ÊÓ±ÕGH‡OÎn•xJºƒb¥¡¯íVmTÙC—“ÕL©…ޝ,ôT—ëÊ\¦©ÄÎö¸^Ûe:q¼3B‡\,ìn,d &st´ ±Ð€Xmè«»U‘£ýai· lçê2O£²…:îXÌ1±V,Õu—Èêr]›Ë(ª¹pÐ#6tr¯…∇wtt%o¡™ÍOIO@¬*úêîþ¡£÷WrGñ@Ľÿbv±)V•»+ÓÞÓÏ=sø½ëË¥ªÒ^oú£î?ý‡Â^ù¾%Ç%±ÿø+O}õo¯/låkÉâÿôÍ7öÚ{dþ³>ñù¾ã\!cT­Ö°#,y y‘NÅk×nÞ:ÞåûÔGŸôê‰ço€“Ýî—Þ¸ú›C˜°w¾­Ù›Ï<~æÃO\øö÷×u#xúÓ]¦ãoÐ þÜÇž(eQw—³˜KÿÓ‹—?wâÔ`Gq{¾V R €yf2„BDD÷Ùƒ‹¼øú¥™¥ßùåŸ}$ šãBŸ÷û|2ûO¿÷ËÅŒ…|Ý.9cÜá®/1ÂaõHtd­L1Žz8Žà©­*£¤ÓÇTÝ\Þ­ éð…ª¾™U$FzCB<§ìUOÂÂB¢ž¯ê.‘‰ˆ£kåšbz$z,&]™/hôËôXLz{&!:I‡_¸¾XÀ‡ÝÔ+s·WKÊžÚª0J:|Ü´¦of#½Aa'§$‹MOûÃÂb¢ž¯j:¶^®*†G¢ÇcÒÕù¢jŸÌoC»üµ…F8ä¦>GJñÔf…QÒáå4,%kGºü|±®ofl´ $ -t)YÏU4—@Dű}ôÚBQÕOæŽwHoÝ^-QŒ#Nàðäf…Òáåô}”•êúF¦!1Ò%QhZ»·Ø(W†G¢Ç¢ÒµÅz¢Czk:!8IO@¸j¡.êwpÃ+w¢1/g˜`1q'Ú’…溲[ÏZhÄFEz,&]_,6uà“¹“Ò›ê =Aáê| 8Ù-žØ¨0Bb>Îpa§&PÒígE_O[(Ÿ,¨Ú:€NnVË6zc±ØÔZ=}s: 9poP¼2_@]4àb·VJ㈇“™Ø¨p„tø8àÜN§¤« ð»Eu'ßB×RõLYs t0"Nmí£7—‹Š|2=Ñ!¿9“‡¸¯ ¹ØÐ²òdÜB½pn»…Vc-Ýé ð©’º“oÊ<íñêè`DœÞª–ê†[¤GmÔ+Ñò[3yà ÷‡ÄËsy„pÈECn6´\$Gܜ̓ñõ2GHÌË!g·«Z³PŽôøtIÝÎ+2OúBÂZºž)«m¨îéѨtk¹ØPÍ6¸?,]žË#ˆƒNnCÛCQ íô³ºj®¦ê"Gz‚|º¬nçZèFFI—T§@ÃÂìvµX×Ý"=•n-—öзgò@A K—l4âáo. Æa7çl¡8æeÁ™ø¨@ÑOäò[üÆo>s÷õi¯¬,&ï7Ë~þ£'6Óå·Ç7ÛKΗÿÝ{S”{—¡×Á?÷ù'þønÌndÛ{üg>tüß?{º­14ÐÊUõRMíŽEºS0QB.ö±s!tÊ-pXàyÜ,+¼®†n@g×¹Gýù§·û¤× €‰•œÚ¨·®A¸z­¶´ºîí8 !aëµb±¸º“;uN˜˜êöerVm74ä9B0\_]NÖå¦ADÍ ÆâÜ´ê=¥ê@æÌjv€‡¬YNM×W*á° »%r{£ÆaqŽ ©í:OpÌCTÃ\N5Ewzi±®oæTÃÝ>.QP“%ÍÅ“Þ]N+¹ªîH_€›Œ×+Šé“È@ˆÝ\©6u”É`˜{¾ !Š8p‡—»¾\!“+¢ IDAT‡ ˜#hÒBÝD3ÀrJ¹ZR“EÍÅ“ž]¹'d7W«MdrÄFÃÜáå®-W0Â!öJdx½…2Š&ã-T7ÁÒ®"r¸ÃKË }#§Ê wù¸dIMX¨Ÿ®¦•¬…¹éíz¹aúD2dC«UE™ †Ù;óe¢Nì•÷QžCñ:OpÔc£wxiY16²-t·¤&ŠšÓB3J¶r'Úd·ÖªŠ2 ±wZh—»j£>^¯QŒÃn,´¡&sIE¤¸ÃC+бÞBiª¤î5'Oºýt-£d*ºG ½Anf§^²Ð^¯6öÑŠi¡~îêR#tbŸƒÜZ«RŒÃ.,04¾Ug{h¢aõ´…r¸ÓGSem§ÐB׳J¦¢»Ò°PÃFk $2b—*&€!wû¹+K qȉ6qaÑFc˜µÑZÓX˨2‡;½4]Ѷmt#«¤mt.Ñ(Ö ¯HúCìöz­®‚€DBìòBE7aØqu’!•özê&‚ÙDC°Pµ…vyiÆF{üt#§¦Ëw¡A6²^««À/‘Á0»¼ÔB{ÜåÅ ‚(äÄA'Zmí^‰Gc6 ˜9ˆJîòÑLEß.¨NFº}tóÞ(7²¹^Yªè& µÐ2‚(èÄ!½¹Z¥‡]XÐØfÍB3; âi¨æj¦)q¸ÓG³U=žWŒtûèVNM•5 ]H*ݬÕTÓ/‘»ºTÑ,4È]:ˆZ£“CÀ£û(´Ð˜‡44s5ÝBÅ;/XM Ue¤·—?4b”Ü»ä€ýKÕÚë=Þƒw¹bmc·”/7î87·‘é ¹Ež¾[ÉÜâ}î‰?ýÇ›SkéýzóÁã¿üì™;6Âýãye|£p±§óãÌ•ªaQ`J£î“Ðk·f „¯ BPo4J5u°¿ûQM½÷¼yýôÑÞO?óÀÐU@CÕç7s±Ó¡Ï|ò™Pï`2SYTÑCáŸ}ö©ÁÞ¨iÖLô¶’c`ÚÊ6²x¦úä#!~ŽqÓ‹«»óô‘îO~ä¦w@ÑŒÑéÝ÷¬éBNèÐÈV“Ã(ì‚S •'(êFº–2šDQÌÊŠ¹‘× uxðnEO” :½x-«ek¦W@]>2›TË ð‹¨ÇGno*ŠC2ìñÓ++  ˆ "nr}MÁ…Ð#Ú¨2‚,4âBº –ÒšDQ̵ÆÜm¨¯ç´lÕô ¨ËKæ’jÉB½ddKih0(Á^ß>³PØBoï¡Mî@EŠb.TUÌõ¼îàP‡§+úŽnäµÌº«–À/¢nßôêŠbqD%t{³I1 ;!߆š,¤4‘¢¨û]P=S5=êò’ù]µh£cq¥n£×VÃDaèðk«-Ô+¡a(šhCçvmT5×sºÌ¡7ÎTŒí’áb¨Óƒ·òzºjzÔé% w * J°ÇG¯­)º #ØŽúd4¼Ù¤…PàÐÄv mhM5×rºÌ¡˜g«ÆvñN´ËKRj±|"êö‘ñ¸RSAPB=~z}MÑLqÀN/¹ºª`ˆ‚Nè—ñ-ßV™ÎÚh½­ÛEÃÉP§Ç zªÒBÓj¡nÚhs½±¦h& ˰ËK®®*¢ øe|kã(DûhC5Wm4W3âEÃÉPG 5<<êò’¥6tb§YSA@B½~zsMQ –a—\YQD!ðËdh£I 9 l¡Eœ!0›ÔŠ¢.ÔÐÌÕlëwÚŽn[h§‡,§Õ¼…zÉäŽZm‚€„z|ôæz íiCƒN2´Ñ$…œPfh,®2ŒÂNˆ˜ÙCu°šÕdÅܸP7¶ ­Ý»SÔw+†»îD‡6Õ€¡64؆†PæÑX¼i¡™¤*u¡¦V²šÄ¡˜êÆV^k×w ßx~ôŽiƒ•¯|îÉŸz¤Ÿ£èž•ÃzvW½Àƒ§r´]Kÿ÷LŒ¯¤î°þ×oß~òñA‘¨:èn8앾ü?<þÐ@h¿ÞüÔ™»7Â:°V×À;s¹Œl×kµÊ¶o ¿=² EÉ9:·¶“Ê–jê[3²ãaþêðÄ;[Ÿ=Ò4ȵÑù\±œ*6n/î&3…+³;Wr¡€·²»üÝ×o\\^«Ä ZÀ-Q­ÒTU¥©Z¨õ/žSFæ·²…’ÐÒný¥Ñm¹½¸òæÕ[¯]›^«¼0wø"#óÝW¯¾54UAžs‰|±d! ËÀÅÃу`q@Ãé]ƒ#0ꄺ2¦@aÔ +M°–7%Æœ0]5·KÀÉ`‡ nÌt ºØáB‹i£¨@Ÿ:Üh|Ǩk( º¹¡k& ;@ĉnnêˆ \Ù6‚dNÙ¨öѪÚB£N˜©µÐ˜nÍtºys¡ÅŒQ°Ñ‰„QÓP@ntsK×L’Aĉnlê°¸8²m`ÃÈ(œJ4XȘ¼®Z¨ fkf¼ MÙèRÆ(4Zèdrºê[hÄ…“IƒÃ-t>ÝBkw¡cN/š©*pó°Ã…–²F¾½"èp¡©¤QU÷QÕD!Ä\èú† ²ÐÛ6*Ü­«`5×úfkæ–…ºàvÉܵÑe îDoméªq'êáí¸… ¥F0·‡j`%gŠŒ9a¾nnïDc.´r­¨( 7ÞÒ›w¡>Û¨HáD FB0—6y#NذÑèAt§d&+ÀÅØ­d\½…Î$Š ý"èp£áx íp£kû(ŽÁ°ˆ\ XhÊä Œ8 ¢e-ÔÍMMì¡.´ÚŽî•&ô‹ ÓnÇuÅ@!tºÑµu@–_FÃqÝB%Ç-Ô ‚³)“u@EËYS¤0ê„…†¹Y²…–÷ѵ¼‘­C…¦Œ²…ºÐȶ®è÷@oméÁˆÈm(nC›mh±an€Ì`Ì “3Q.v´£n4k£6”Z¨ PXÁ;P{t"ÎX¨6 °”5E cNXRÀFÜñ¹œÿçù{ÖÀü‡k•Fóž•Ã:wsw½±zßYÎó×—G—w­…§z<Óå–Y«êü—¡L±þ#f9V•ë8ÿà3ý_¯LöG=w×+{ŸË)*àÊJýõ[Ͷ©«Dô,Vv•|ܨ—'ê CŒJ/Mæ«ñIµ˜„„mÖäÚÖ0 Äd½!Êôær½.H*ÿ½±|-1¯U²p|ø”.E6RÕf~‹§(W(î¤r@ôî}þôêRéõäB³HĨ¬™èö–zulMÉnšB¥.1päʆùÚФ’›†Î…No«¾¯??W© Ž  !r2c,‰(2#’A1œI#›ÙÐ ´R@1"²YUÑf 9¨‘Íl %ªÈÍôˆÃÜ.¡Lùx="›Ë9Tj€ Ed0“‚u †E-"ƒ‘¨™0&iA m#͈l8´Ð°lpNÛ¨aÀå‰>ˆæöPÙÜ)£Lyy=â0W󨨴ÐÙ¬í¡ ¨0*iaì¡.¾…Fdƒa8B<6#’a¸E"1"²YWцæëh§‚Üœ¾7ª‡¢£ ¨¶£À ˆ›‡£‰Êc8B ›ùG .NÈf¢ŒÒ6º–G="ƒÙ4¬i0tz3Ž0#²~:•B ›aÙmhCCëE$S#,›ùFZAéòòzDn¡~A8À\VÕ:–€MF%-Ò†zx8’@šÙài ÈpÞB¥}4"›…Ú¶Ñd¥jÈËô°l®·¡ó6–Áx:G€ˆ¬í¡aÙ(œ´Qà| ĈȦ҆ÛÐÝ JÕ‡éÙÜ( ü]hÄÑB#í¨¤yÛz*R8¹‹2#²` ËfSGk{¨‚¶ËÈÅéá;Ð"Ê7 Ÿ×#2XÈÀŠN$¡¢·Ð›6êáí(g£svO÷Q‡YRP¼Œœœ‘ÍTíÞ Zèn Ë`(ŽLbQ‰Â‰]Ä!3,øž¨|­î£›E”³ÑÅ ,«0(h˜´ÑˆÜÚF&1Yó‰pxahF$CâZhD60‚³$`#"›ªV H¢FX6Ë Ú*#'gÔ©Ù>ŒŸê ̬gÓÅÚÝ%çgºîw`Mdôtoà­ñ »¼€½:“-ÕOöî˜åì=>Öå]ÚM䪧û¿ûß=r´Ó÷­W§¾}i®XU.žìîG”œ½*×r=÷?>ý.'ŸL Ó¾û•øð >|bÿ7®Ž÷:@èËÕ4›јH1Õ€1Iñ‹æp‚GÐŒŠªÌñg¡†3ʰ5À+E*=,êum–‰ƒê!q ŠF¢J2uìejHÔ׋´¨àwA¢yËFßåÈÝ(€+¹û¢.N ŠFÒFƒ{(¯E}1ÇUÕ:™bMNð˜QYur`¬ ÎP†È>j„E½®¡Í‘©õBïT‰‹ÓB¢±[%é:ö2-(èEZPp€Ww iÖÔaTjDc8Á"²Ò޲6¸`£ m”ˆLõ°¨¼S¹Zj¡A¡…†„¨_4†“<0ADV\Ýå4#’Ê0˜Nsí¨`¡úýPœ®/Ó‚¢¾Y¢ûy5(èK9®b¡‚1fŠ… Æí$3MØ!+.¶òL¥9aQÎç¨@Œˆ¨+:Z·Ñ’‚·m4Uéñ0-$[%’TlÚP7Fw9 ͈¤ ÄF% 8Ÿmõ´i£!urZH4Òíh™äØÏ«AQ_ÊßI2Ý„²âæÁHòN4"iÂù,ð>*݉êíh¼Lr6ºRàÊMšAÁ˜I³†#b3 £6ê9ˆNÚ(‚pÎFU­Ùh¹‰ã6š©áÝñ0-؆l4(4ƒ¢1“a íÚ!)^ÞIòšQI)˜LµP á\–òØKºj µ"‘ˆõJÅ+ÄÉé!Q¯Òcø/<}!¸ÏïßmÓªüî/<æÙ=KŽ×)|ágþóKíë[«î þüÓÇïwÝÁ§@N­e~áécG;}Â_ýÄY„`<]þõŸ½àw‰ïVrî7«º×Õÿ7¼YI7çW·‰YÓÐ0ïd‘(¸ ð“ùƈ¨`çò“šŠYhZ4ìkC3*6†³9žÛC ¼Ð†ÊduQ5(¨©:—±Ñ­=TЖ |ÕB™>“»í’jwoÔhµ…6÷ÐÐ,6i¢Æ¹¨ØC¹¦_PãV°Ñ•"_U[èlNhê(&Ö=ÌK‹€]RMæÌ‰Œd¡ÙÏ!#,6 €–m´¡ã͉VYA!¦xm¥ÔB½¼>—O‹† »¤šƒ3Ç-TjpÌäDaa ßM7¸týNÔ'h«%¾¢â0ßðòú\^PtêfŒgÚÐôhDl€¢Ñ‚‚ZRÉN•s¶¡®°Q?S|| µ¡Q¡î扌¨›°Sª98s,-!hƤÃ`:+Ò  <õ°Ðlx£ÜBË6<ˆnWYþ^è|^hÜŠ5§FŃ(„ yžÇzXl6 d¡¡ƒh¶Á¥êÔÃ5ýѵ_¾ õÜ%û(´ÑÐA´¢âí»Q^ÝiC×mÔwÌŠš ;Åš‹™£6Ê0Õ†ÎÛ=U ´n¡¢…2'UƒB3Û Éê3‡_xúØqÅšß%~åsO<àÕníO?uqðÓOi_ò«Ÿxè~âþ¶>x½±šmgòÿoö숈ŽÈþ<ü„^–@#*Ô„óE‰!=,44­UDk!¾^ÓÈVMp5À•KÖy7U|LI5XFa>®áášñªPTiÕÝœºZ«‰ðU'§ÏdÅ@BE¦údÞiØ-–ybNåšQ¡Š!œ+JÒÃB]3ÑZY°êuýG ^®¹] MduOêâôuP}*ïÔMØ-–bNæš1¡Š!˜+ÈÒ#B]7ÑjY°²Q™¨A¾QT¹DwQÅÏ·Pï]èZY¬h$Â×\œ¶P’ýNT$ædÎFу£M?¯d,m¡¬…ÚÐ0_sqÚbIjè8Æ·¡Â” 0k£ÆÊ×Ù¬ 2Q÷Gwj|¾ÉXÝÍÔu e÷F»„²H̉œA3ÚB2"BÝh¹t´¤Ò=TaéóÒ6”«»™ºQËw¢U§Mçš »„²tJ[(\,‰|*5È7ÊJš^É*,Õ`^ªøÚPS7ªbY%aVs·¡NN›±Q™9‚fL¨Rf ŠŒh •x¤…ùºbª á}ÔÙ†z¨âcÍDÏ59ÿAÔÅiK%©¾‡š‰º„²Ìã6Êa0SpPhD„º ábQâ‘n£¢…VTº]ç¤é?ˆ& BY¥¡64ÊWœ6[p¨&ê*2§ç\Øh¾…l´ÙŽjt»&8IÓÏ”œÂíî¡u mx˜ºYJ÷@õÙ‚¬¨S¨ÈTŸÈ¹0;…*‡ÁtÞAîBU¯ßåßÿ=ÖÞãà÷¾2çÇ[%ç½’ÿÖoëi!X(;9¤GXE3ÉzÕ! 5Ī5Æë²Œ•W+ª,©ˆnÒðq´"d›¼ÖÓÚÑWu·¡Ž6T"m(1§Š,ΕÜí(´0«6 ºe£e%l4«ðé¦à¥õ}”V]¤¹Y“+ seÕ–+ކN:XI"ú*Øh'_Äh-ßJ-”K4$iøiÊ)Ɇ˜·PÚܪÉe]©:ê:‰±’Dôù’KµÑÉ¢³“/µP'´H²Q§ÕÓ&ŸV/­{¸ÆAT*kÜýÐ.»§ÀFgKn+&^µP¾ªtÓBY­¢q; ÉI”€zHÝÛ†º÷ÑŠƒª«íhÙ¥6Z¸ åË&ÀKe'CZ„¯(¹õsõ|“OÙènCÌ©ÌO«nڌפ’Æ…¸Š³ •ÛP‘˜S7°SÈß.Z(k¡"Vƒw jª¹&ï§57UÚѵª£¦“(+ÉD_(»š6:]t›öyj£|´‡6 ²Qw´£|5‰ò~JÎ{üÁÁí7¤”¾öÚkµZ­}º´wïžÿC‡ç·o¯W™Ã÷oýÛx¤…¸ÊFà pÓMÛŠà" i»Mà£5@F!®¢¤ ñ€+5¾¢s€n¾°Û”ô ¹†[3àˆ˜Y¬ù=|a¥î0¤…ÛPiÄmT@ZòÑ.¾²Ñ>!·y/´—Ï/×}áÊë ÖãŠËFÕdÓa£fF•A®Ò4pAQV*i¬¢3•µÐ­†K5±….Õ|&€‚:IC´Q/­¡û e•m4Ý”ê½Bn¹æpH²ÒzݱꥵxÃB7“J ÅÐL7[¨jâ¼j£:+k6ªJuz…\\q© Š™åºÏ4!‚fß}P­mÙ¨„›‰ZÇаѪj" °rEç,´“/fTÑFóqÅi£Ù•º×0!‚f¿[²Ñ+­½+ê¡ub£®ªÝͪbÍF·góÁP«~uE¾ª›(g£U+½+: fWë^Äš6J‘ÞqÔ›;6J¡‘zW´ƒ/æl´GÈïÜs@Ì.Õü õN¾¸Z÷¤¸êfà p`ÅA”Å ð:Ezª)ü´j˜SE@˜•k:-i¼ 5³Ð„âP b¡kun"ÌA1»ø®¨Œ§ºIkCë¥ìўȩ¿¦iï2hß±ðÆo<ûì³ïuð_]]5M³»»û=qÖÂgŸ}RJ_|ñEEQŠ¢ÌÌÌ<üðÇ_´w˜Ãæ0‡yŸ}øá‡­cq7oÞüú׿N „ûØÇŠÅ¢U‹b±Ø¹sç÷Ôas˜Ãæ}Æï÷Ÿ;w®Ùl†1<<¼.Çšø8΋/î¦Ãæ0‡9ÌûÏÅ‹‡‡‡{{{ iÕš;¿ŸÆ4ÍF£q¸§s˜Ãæ0ï3“““###±XìÝJŽu^ç0‡9Ìas˜÷“™™™f³Ù¾î”Ãæ0‡9Ì¿NKÎas˜Ãæ°äæ0‡9ÌaKÎas˜Ãæ0‡%ç0‡9ÌasXrs˜Ãæ0‡%çpæ0‡9ÌaþuBÞÓÚ/½ôÒŸÿùŸß½üw÷wçææ^}õÕ¯~õ«O?ýôû߬¡¡¡¯|å+íK~þçþ×ý×÷žþÕ_ýÕw¿ûÝßû½ß›˜˜xã7ž{î¹'Ÿ|ò÷ÿ÷ÇÆÆ¾ùÍo;vìÇs¯_¿þÕ¯~Õzü©O}êw~çwî¹Ú׿þõ×_ýk_ûÚSO=uÏ>ó™Ïär¹üà‚ üx[òÿøý×½÷ô‹_üâ'?ùÉÿÖþz>ÿùÏ'‰ï|ç;n·ðì³ÏRJ_zé¥9ñ _øÂÆÆÆÞÓ_|‘çùÿßW###_úÒ—¬ÇÏ>ûìüÁ¼ÿ×üéŸþi]×_xá…Ÿù™Ÿñx<ßþö·¼íßÿýßë[ßúµ_ûµÏ~ö³?©>.,,üæoþæÞÓ~ðƒôGôÊ+¯üÙŸýÙÏýÜϵÿè'›™™™ö7æ3Ï<ó‡ø‡?ö«ýÒ/ýR2™üçþg—Ëõ.«ÍÍÍýÖoýÖùóç¿þõ¯¿WâË_þ²u¯—½üÝßý]$y¶SSS_üâO>ùäsÏ=÷ÿ»’“ÉdFFF>ûÙÏÞñ÷‹Å^yå•‘‘‘|>ÿÙ¬R©422òÌ3Ï|ík_³–øýþö¶¶¶FFF²Ùìç>÷¹O~ò“ÝÝÝ€¥¥¥‘‘‘jµúc׹߸ßèëë{î¹ç^~ùåo|ãÂßþíß¾{Íõõõ‘‘‘B¡p¿—šœœÜÝÝ5 ãÇÛ’ú§úã?þãO|â¿ò+¿ø‹¿ø‹/}éKèÿeïÍbìþÿÿ3MÍ´ïû>*u·P"ƒ¦(!J!ÙR¡De )Ê.IÒ&!B‘ˆ¸Ý’î[Q -SѾ—öMMû23ß?Îï}}æ—å–å¾»9¿®9×¹®sÍëœë<ÏysÃÆfjj:¡JOAAAMMÍâÅ‹“’’xyy©T*@ø¡z“påÊYYYÀ’%KæÏŸÿüùs<?¡Ì’——çèè(%%åëëûôéSXöîÝû·ÍÍÍ%gϞžåþBšššrrr–.]ú½þcEE… ×¹sç/^¼8uê‡sqq9{ö¬ˆÈZc¾´´ÔÎÎŽŸŸ?((ðüùó3gÎàp8OOϯ.õµµpQäÏÐÛÛ›““ÃÇÇ÷u¶ÊÉÉ9w–l¨-[¶ìáÇbbbŸ¿°¸¸ØÞÞ^HHèìÙ³üüü?G/çkk¢¢¢ZÿãÙ³gŽŽŽÏŸ?Óé!ÿŠŠŠ¯~8,!Ø(¸rå ™LŽŽŽÆâ\¾|ÙÑÑ1//ÏÍÍ 6%6mÚTVV6Þ´²³³BCCµ´´¶lÙ’°zõê7n`ÿ%&&pòäÉ„„€‡‡Gzz:`ëÖ­XœwïÞ±Þ–Édb§ÌÍÍa`ee%™LÞ¼y3•J%“É{öìó0mmmÍÍÍâââ𿋈ˆ444@9÷ôôÄnøöí[ØL#“ÉæææØ)¸‡F#“É–––€ªª*ì,ÔÑgÏž‘Éä£G>xð€L&Ãwø+(..#®XZ¶¶¶€üüümÛ¶½|ù>|øáÇð844^uîÜ9ìªÇôÕTUU…fÁãñ………L&sxx»pùòå0&´pNNvêСCð>·oß&“Éááá°»ŒE€Ù - Ûd2¹¤¤d\Öxûö­­­­¸¸ø… ´´´6nÜøøñãõë×ÇÅÅa ]½zë.ciii2™\\\<&[±†ÔÐУ£ãž={ZZZÈdòš5kÊÊÊÈdò–-[`„çÏŸc÷<}ú4lS_¼x 8qâçåË—_‘郃ƒ<<<0/º»»ß½{÷âÅ GGÇØØXÖ‡L&ÇÅÅŽ=Š…dff~Eº•••Xºòòò]]]õõõ÷ïß'“ÉÁÁÁ0ÚùóçE|Ð… IDATÉdò;w|}}=ztðàA˜(–­d2¹²²’õÎÆÆÆc^ÈÚµk¿KU;iÒ$øÌD"±´´ÔÔÔ”L&÷ööΙ3gppKÑÊÊ PVV¶fÍšªªªâââÈÈH…§OŸbq ·)22’L&GEE’ÉäßÿýÈ‘#X¬>$“ÉÕÕÕ+W®$“Éðyôõõa´E‹ÁÚÚZìZ¬S‘œœŒ|Cƒñþýûîîn&“I§ÓßšÀÀ@øV`!®®®€€€€uëÖ®^½jooÏÅÅuáÂ*•ª®®.##“››û~œÜ¾}°lÙ2ÖÀ³gÏ 9;;ïÚµ ö‚CBB¬­­¡ß ¸¸XOOpýúõ–––ñ¦øàÁè»` Þ´i•Jµ··¹páByy¹™™Àßß¿¡¡aÍš5œœœW¯^¥R©JJJ²²²EEE€úúúÉ“'*•šœœŒÇãõõõóòòdddÔÕÕcbb Ž.Z´hÌÃÔÔÔ¸ºº ‘H¤àààŠŠ *•ZWWçììÌÃÃH¥R§OŸ.--žž®®®““cmìwvv¾ÿ¾ªª žÊÏÏ—••USS£R©—.]âââ²µµŠŠðòò¤³³óx¦¨¨øë¯¿455›››ñx<W]]¼¼¼„„•J‹‹#æææ \\\+V¬ R©¾¾¾¼¼¼T*uÏž='Nœðññؽ{7•Jµ´´‹“\AAÁ¤I“äääH$REEE^^•JíèèPTT„}¬ÄÄDvvöyóæ½xñÀÉÉÉê¾X¹r%¼¯¯/ÀÍÍíäÉ“‚‚‚nnnT*uùòåbbb·nÝ‚-IIIè²{öìÙ¸l’””˜7okàåË—EDDlll¨Tê–-[„„„‚ƒƒ÷ïßÏÇÇwøða*•:þ| ‰GQ(€´´4ì/ÊÉɱ³³?}úTCC‡Ã±³³744ÄÅÅaƒƒ@ ]»v““sõêÕ>”X°`•Jõööæçç÷òòª©©Né;vÔÔÔ¸»»óññ;vŒJ¥Î;WRRòÉ“'ãÍú–––¨¨(NNN‰dccÓÐÐ@¥RËÊÊBBBNNN555T*¾8€Ó§O»¹¹ñòòž>^\\|ñâÅT*ÕÓÓS@@àðáÃpôAXXÖ‡¢¢¢¼¼¼¾¾¾T*U__ZxúôéYYÙGIJJÊËË×ÖÖª««³±±Q©ÔÔÔT<?sæÌ‚‚YYY*•zåÊ..®uëÖÝ¿_\\ÜÔÔ”J¥8p€ŸŸÿСCãúï—/_>{ö,l1{{{ãñø¯éå\»vMSSSSSóÒ¥Kžmii’’"‘HD"±¡¡addäëä011Qóœ:uª»»ûýû÷BBB;vìÀz ’’’pà{]¿ssóÔÔÔƒ’H$AAÁŽŽó !!ÁÍÍ}ôèÑììlSSS‰D êëëY;éÕÕÕ8ŽD"ÉËËÓéôwïÞŒŒ444ÀšâĉŸêÞ¹»»§¥¥ÍŸ?ßÛÛÛÐÐ0;;›¯µµµ¯¯OBB‚D"qrr666bë½{÷îÏ?ÿ,((((( Ó¦MëïïŸ3gލ¨hRRÒÈÈH}}=‘H$‘HÒÒÒÍÍ͘ÇÀÐа  à«Çêêê`óÀÃÓðìÙ3‰$++;<<ÜØØÛ§4D"‰‹‹÷öö’H$˜­°Ñ#""B"‘øøøÚÚÚ>tÊÈÈ$$$<~üxppB¡,Y²DRRú9ÙØØ ‘GGGëëë±–¸œœ´I@@À£G¼½½oß¾íëëkoo¿cÇŽ®®®®®.aaa,ÑÞÞ^xmssóùóç  ¢#===° Á?ÛÑÑÑÓÓ#**J"‘xxxà‹ã766ÆÄÄ0™ÌÑÑQ…Û·o´TËÉÉ?^ZZzpp°¹¹yúôéOŸ>=þ<‰D£Ñh0]!!!¬njooïéé‡é677c鎫©º`Á‚ììl//¯¸¸8==½ÐÐPVOü³ wïÞuww_³fM{{{oo/L—‹‹«¹¹ù+V&‰‹/ÎÎÎöððˆ9sfxx¸˜˜ØÊ•+÷ïßõêÕ   °°°K—.íÙ³vPÚÚÚ¸¹¹I$77wss3lÉÖª)::ú·ß~ÃápÕÕÕ £¶¶Ç)À߈­­-¬Êªªª?~ [¥µµµYYYùùù¬e¾­AZZÀÅÅ%))Ù×××ÚÚÊËËK"‘DEE»»»±þJggç–-[ ?eáÐÐP===vvöºº:ƒQSS ‘Hùùù‘‘‘ðÅ!¬UDkkëóçϯ\¹²uëÖŒŒ èêÿçÆr°Ö¢‡‡l Ÿôòòº}ûöúõë½¼¼þÉáææÿ|œ°°0lë¯ø"‰›Ð%22ÒÛÛ{Ó¦M»wïöóó;þü‡qÖ¯_ÿäɓ۷oëèè,\¸ð+†‘>äÒ¥K>>>;vìØ¹sçñãÇétúµk×°Ë™3gŒ1e‚ÂÂÂPo`¹íAAAV¹ššÚDZª*%%VRߨ7PwÛÛÛ±ZfÚ´i<<<&&&_~Ÿ]»vmܸë-9»dÉ’¢¢¢””EEÅœœœ)S¦´µµaƒ×¯_Ãc<«`¨7Ðeèîî~ïÞ={{{Ö9N;wîÜ´i–(t± þ[zïHJJʆ æÍ› ›†åÈ‘#pZï+ð/^<}úô;wîXXX0ŒÍ›7‘íÐÐÐààà}ûöaz‡‘ _úëÒ}ûöíÒ¥KáÀêòåË †³³3L×ÎÎŽF£ùûûÃÉŽŽŽjØ\PPðÃÚLLL “:>>>Ö2üÑ›˜ššb*œœœp”———ufì·XXYYFåàà€5ðúõë™LæÞ½{CCCÙØØ¾e~ øqßåðòò ®]»VCCŽ(|GŽ?ñ™ ,(//×=çÌ™ýäÉ'''À­[·ddd<<<ˆD¢   ‘HühgîñãÇ£££ðÿŽkêTvv6'ü¡¡¡®®.¨1\\\c’æáátttÔÐÐ(,,ü¨_wzeÕ{</((XRR¢¡¡Á:ãü»PUU5ÉdÒh4666AAÁñŠ—  àñãÇ544>œAÐÛÛÛÕÕ›„üüü¬ÍR'((888¨¡¡½oczÜÜÜÃÃÃ0CY_QNNNAAA oŸá­««—ššjgg¸ÿ¾ŒŒÌ·O’VSSû7Ôèèh__ÔZÖŠãСCp„€››Žcihh¼zõj¼ÏC§Ó»ºº`ןýÃöÁùóç=êêê:fv+LwûöíÙÙÙß’.kºD"‘““shhhpp““ó£/ì§ÐÒÒú”ã–áþþ~ °b,((øûï¿khhøûû4¬¶mÛ¦¡¡‘““ó·._]]]Ö*¢¼¼\CCcóæÍIII222nnnööö§Nú ì7õrp8ë«ÎÆÆC°SQQQ«V­Z±b‡£ÓéÉÉÉJJJ_#†ll¿ÿþ;t¤6oÞ|äÈ‘¡¡¡S§Ny{{;88ÀI8Ø@w„¹¹¹©©éŸþ©¬¬<®äðxüâÅ‹áô‡û÷ï3Œõë×ûùù;wîøñã!!!û÷ïߺu«§§'''ç¹s熇‡7nÜuåÊKKË%K–àp¸ääd{{{]]]:ë߆†IIIø/¤¥¥srrØØØRSSçÍ›wèÐ¡ØØX¬¥Éг³óÐЯ¯/ô+2Œ€€€5kÖ¬ZµjxxØÖÖÚöáÇZZZ¬ÀhhhPUUź\“&MJKK›;w®„„“ÉÔ×׌Œ|üøñ‡Ž7°®ü) PTT¤©©)!!¡¢¢’’’2þ| ,-XT0 ÷ðð:xðàáÇétzHHȇo]rr2…B!“Éð>£££µµµpü NX`2™²²²ÉÉÉ%%%¬Ï±²²ÊÉÉñññ!îîîCCC‡>zô(ƒÁ ´°°ˆsáxmbddtëÖ­Õ«WÃG²²² ¾råÊ.]ºÄ`08àìì Û;wîtss£ÓéÑÑÑFFFÁÁÁ¬©çääL:U]]60×%Œ3Ƥ8nþüùׯ_ß°aƒ„„Äš5küüüöïßÏÅÅuàÀ¡¡¡cÇŽ;v¬©©i×®]...Û¶m£Óé7nܘ3gÎxÿ¦††FRR’©©),ÛL&ÓÒÒ2,,ìÖ­[ðñèt:N „³ÈNž>>X©f­²àñ˜¢ óòò¦N:22ÒÜÜÌÁÁQ^^®ªª ³O]]ýéÓ§¹¹¹–¨¯®6Ǽ;°_®¨¨S”““{úôé˜ /^|ùòåÍ›7ÃÚÉÁÁaÿþýgÏže½s``àðð°““Ó–-[ètúíÛ·õôô>ú¯kkkedd  ^¿~Çã_¾|©¯¯ŸL&_¿~-44ÔÑÑñÎ;°#ûíßáÂàà`ww7???ƒÁøŒ'ñíÀMðØØØ‹/ÌÍÍ-Z§_#ˆoatt4 €Édbßá"þ]îÝ»G£Ñ¬­­¹¹¹|||Ђ7ÿ4ÕÕÕÊÊÊ&&&4­¿¿Ÿý£1.†‡‡ƒ‚‚~è÷ȈÔ±†øv&MšôôéS333è?533c]Ø@|±±±ááá{÷î…+Ä ä þ?TUUÇ;»@|žõëׯ_¿Ùa‚ƒk@’ƒ@ $9@ ÉA ’@ ÉA&@ Ä?ÃØIÒ£££pC@ ¾…×’gsº¤¤$99Y @ ß6V½)**Bzƒ@ ˆÄÿõrSSS'Mš„Œ‚@ ˆïëæOÿ?Ç''§²@ ¾ üüü½½½p›+€f¬!âI@ ä I@ Hr1qA[´ýp¨T*2øù““C’3±(((Ð××Gv@ ?õr&8nÚ´iÈâçàÝ»w\\\¢¢¢CCCHr&L&s¼ƒ@ Yr„„„DEEÇ{!š>€@ ˆˆqôr222"##ᱩ©éòåË?-444??÷îÝjjjàììÌ`0ÂÃÃ5[wuuíÝ»+**8pPXX¨««»eË,fRRÒ;w–.]jnnC¢¢¢RSSõôô°h¾¾¾•••ØÏÓ§O ÂãÍ›73™Lx,""âëë;æaÞ¼yÂbbbbmmýác_¾|ùÕ«W...ÚÚÚý_nnn===aaacN555<˜””4<< øã?p8ÜÒ¥K¡¤íرãéÓ§}*­µµ5**ª¨¨èÞ½{˜ðlÚ´iþüù/_¾|ñâ…ŒŒÌµk×òòò>UYYéïï/##ãêêJ£Ñvvv111lll¬ù›œœ¬¥¥“ðóóËÊʼxñâܹs0š¹¹ùÚµkïܹsïÞ=[[[SSÓ‹/¦¤¤lß¾ýåË—YYY¸wï^qqñÉ“'Ï;W__/Œˆˆàááa2™k×®…!ÂÂÂð¶uuu˜ÊN:ÕÃýêĦ—ÓÒÒ’ŸŸ/##£©© B‹-¢R©¾¾¾âââ ÃÓÓ3--ÍØØXAA°xñb ‰}ûöݸqÃÔÔÔÁÁ!33ÓÆÆ¦¿¿ÞshhhíÚµ¯^½rpp033‹‰‰Ù»woyy¹««kcc£˜˜Øž={ß¼yósš@ ,Z´ÈÐа±±ÑÍÍMIIÉÇLJµÏ‘ŸŸkkkKJJ°S×®]KHHÐÐÐX´h‘´´´¿¿?ìè9rDUUÕÝÝÝÊʪ±±1,,,..*zLL N·²²²··Š‹‹ãCûLôĉBBBx<ÞËË+99ùÍ›7‰‰‰---ÙÙÙ‰‰‰...%%%---kÖ¬áââØÛÛc ‘”” ¬©©±²²òööž2eJ\\œ»»{FF†‡‡ÇÈȈƒƒƒ”””ŸŸ_LLLyyybbbMM     11±¹¹™J¥&&&nß¾=22211ÑÉÉ)&&ÆÌÌÌÁÁáÕ«Wk×®ZµjUrr²ƒƒƒµµõÝ»w6oÞ\^^îàà@&“#"">ô+"ˆ‰ÛËù(d2988˜D"ÉÊÊ>zô())©¹¹™B¡À9 Ó¦MX³f™™ÙôéÓ¹¸¸ˆDbZZ¶/)NOMM766®ªªêëëËÌÌ\µjUNNÎܹs-,,ÚÛÛ½ao[[ÛŽŽŽÈÈÈ1C#ÏŸ? RSS»xñ" ƒ1X»öxÚÛÛ¡…/\¸@£Ñ¶oßnkkËÍÍ}õêU8š2oÞ¼û÷ï®]»ÖÊÊJLLìòåË}ž´´4Øill´°°¼víÚÚµkÿüóÏGa* kkk33³°°°W¯^ Ì™3KtŒäpqq­\¹rÒ¤IeeeGÍÏÏ×ÕÕ=tèP|||aa¡ŽŽŽ±±qyyydddUUÕ˜kYÉÍÍ=yò¤††ÆÎ;ûúúfÍš5iÒ¤[·n ³³³§¤¤°³³wtt eddô÷÷¿~ýš——7))ÉÓÓsÚ´i"""èUG þÛ’#//Ÿœœ|âÄ @uuõGãhkkoݺÆéèèøò› «««ÿd¶îèèX½zu{{ûÍ›7µ´´XOéëëÏ™3§¬¬L@@@CCÃÈÈèÒ¥K¬µpppð­[·***X¯š:u*àúõëk×®­¯¯·²²ºÿ>ìèP(:³råJ"‘¸iÓ¦ªŽººº§§'Ö)ùÔø+S¦Láããû¿ÌÍÍM¡Pttt{öìyûö-¼Ã¸ìvòäÉuëÖññññòòb3gÎÄŽ‡‡‡-Z422ÊÊÊ&&&–••8pê,â?,9ׯ_÷õõ]¶l™µµõÙ³g>|øaœ­[·>xðàüùóòòòÖÖÖ°yþkÒÝÝmiiÙÞÞ~÷îÝÕTXXXYYùÒ¥Kiii¦¦¦rrr0<""âöíÛÛ¶m[¶l 9|øðDDDbbbòòòÂÃõ´´bccW¬X‘›› «Ý… 2™Ì¤¤¤yóæÅÅÅYYYa^»1ˆˆˆ°ÖÝß—ÆÆFeeå‹/®Zµ ªNyyùx%GMMíó"ÇÎÎ~òäIxL ¸¸¸fΜ E}ûöíÅÅÅ8NÖ@ ÿÉ144<|øp`` ŸŸŸ»»û­[·BCCÛÚÚZ[[eddttt>úAÔ›uuu•gÐ~†—/_b­ïŸƒÑÑÑ‚‚…OõÞLLLª«« vî܉Íèkjjjmm•••…€  `jjjOOOyyynn.SWW'‰Ø­òóóá|x<¿ý3Ì›7/%%û944”›› ]©¼¼¼ÊÊÊ_r“3gÎüñÇméÒ¥ýõ€MGG§««ËÌÌLZZúôéÓëÖ­SSS †ªSUU…^uâ?#9üüü7nd2™qqq]]]‹/vqq9þ|PPÐõë×7nÜhnn~ðàAaaaÿ®®.ggg___77·µk×®\¹’@ DFF®^½ÚÈÈhhhÇsrrþõ×_ .ÔÓÓ™4iRTT”¸¸ø… víÚ¹mÛ6ww÷ŸÌÜØ‡5S¦L‰ˆˆÀN ÈÈÈ466JII}ɭΟ?¿nÝ:;;;(6=‚ßå¼xñbæÌ™0!:.))÷%÷´³³kjj:þ|lll[[Û¾}û–.]Ê:³î£%%ettÔÄÄ„N§'''‰DØMËÈÈÀ¢‰ŠŠbû`~ ùùù­­­ºººÂ™™™ÝÝݳgÏþpéû—¡¡¡ÔÔTžÙ³gÓh´×¯_ ëêê²ZXPP°¨¨ÆWRRš4ië ššš´µµÅÄÄrrr:;;aøœ9s°0 áS555ÈÉÉ©©©¡÷@üû’óúõk[[Û5kÖ„……awîÜñõõ=vìØ¸V³··§Ñh£££W¯^400èëë»qãÆ‰'ôõõa4mmíqIÎéÓ§=ztÿþ}CCÃ?þø£²²R]]}¢INgg§µµµ²²rVVVUU•µµµ¾¾þǯ^½²³³300PQQyúô©ººzee¥††Æþýû•””àåoÞ¼ñôôÌÈȈ‰‰Þ¹s§  `ZZÚÁƒ×®] UÇÎή§§§³³‡Ã}ÉS=þ|ëÖ­§OŸFïø÷%‡•ªªª7oÞLž<™50//¯¦¦“ÉdIIÉ/^´··æææÒh4ž„„¸¥ãï¿ÿnnn¾råJ"‘800íáá!//¿yófMMÍ´´4¸É[CCCVVÖä×ÒÒ—––Â@…¬¬,¸dzzº¦¦¦±±ñ´iÓàrÔOž<€‘-,, ÆÃ‡‰DâܹsŸ¤¹¹¹¼¼|Ö¬Y³fÍ’““ûA›““ãããÓß߯­­ÝÝÝýÓdÔ)SlllXõfñâÅðÔÇëêêDDDòóóËËË?~÷î`Û¶mzzz¯^½òõõ]½z5”œ'N°³£Ï­ÄDä+¿ËÉÎÎ~ýú5kˆ••ÕÉ“')Š””Ôß®ºÃ`0Ο?ÿåɽyó&888===99999ÙÔÔôäÉ“3gÎü0f\\×ù¯PWW'­AAŸ={6¦7}}}EEŦ¦¦¦¦&è4{ÿþýG¿ø½rå 6Wâ3444ÄÇÇž››Ë:O@ þå^Δ)SŒ³³³ùøø°ZÏÈÈèÕ«WOžu‡mÛ¶:uêìÙ³}}}ŸOKYYÙÌ̬¨¨Èßß?''§­­MSSsÖ¬Yd2955uxxXLLLKK+!!aêÔ©EEEwîÜ‘––Æ––qppðõõ ãááݹsçÌ€ŠŠŠ›7o.]º”µê÷÷÷‡Ç eáÂ… .„?KKK×®] E÷æÍ›©©©ííí7nð÷÷ïïï‡1wíÚêïïß××ÇÏÏ¿iÓ&QQÑõë×'''ß¼y‹PWW_°`A^^ž¨¨èŒ3Ð+@ ~x<ïåå544ÕÕÕÕ?Œ„ÃáÄÄÄôõõ ”••™Læ¬Y³æÎ«  ¥¥¥ “ÉTSSsrrRVVÆápS¦LÑ××çååeccÓÕÕ3g‘Hœ={6;;;‡Û»w/;;;…BÑÓÓpssS(mmm'((oÔÕÕ™L&“É”’’Zµj•‘‘‘¼¼¼¢¢"LkáÂ…::: CUUÕÐÐPDD„Á`ØØØÈÊÊjkkëëërqqÁȳgÏÞ·o‡ûh¢?ÔÄoÞ¼ÑÓÓÂápœœœ eÚ´i~~~ …¢©©),,L¡PÔÔÔp8œ¤¤ä¤I“˜ÿCAAAVVöÿú¤lljjjÐæBBBð¯M›6 ~£ÃÆÆ¦§§§¯¯ÇãáNL&“ƒƒÃÄÄdË–-<<<0]99¹µk×b‰JHH¨ªª2™L===###ôJ ˆ¿¥©©‰‹‹KLLìoW$‰ÃÃÃL&óåË—iii8088ØÝÝÝßߟ`ee…¬ù}‰ŠŠruuý™FžÄ/¶ÆÚß.ëÉÏÏßÛÛË`0|||Ðkø‡@’ƒ@ ˆ4›öŸ€N§£É`â§¡½½]HHIÎDíK²±‘H$dñs@"‘àJ˜Hr& eppp\[< ÄÄ.ÓŒ$gb¡¨¨8<<Œì€@ hú@ ä I@ Hr1qAÓ~8pOøÉï¤5$9ÿ7oÞDF@ ?Ó§OWTTD½œ‰Hww7ëöñŸ†H$ 2 $9ÇÏÏì€@ ~899‰Dâ—ì 94}@ ÿãœ{÷î)ýÓ§OÃÀ“'O*))ÅÄİÆÜ°aƒ’’RNNΗ߼¼¼\IIiÅŠ(KâW—œ8;;/Z´(??ßÕÕÕßß? ÐßßßÙÙ988ÈùüùóùùùãÚm“N§wvvÒh4”%ñKKΣG,--ƒ‚‚xyy·oß¾wï^ŸÀÀ@,ÎŽ;$$$>|°··Çz9óæÍ“ø0²”” ÑÔÔTWWrrr,,,P® į+9 ctt”€ÇãñxQQQ...ìB ަ¦¦wïÞéëëÏŸ?¿¯¯OVVðîÝ»¢¢"MMM‡¤¤äÐÐÐÓ§O÷íÛ‡2@ ~Qɘššååå-[¶,>>~ïÞ½ÎÎÎQQQø™N}}}iiixxøÜ¹s±«bbbŒÝÜÜ–-[ÆÇÇ—––ÆËË›••E"‘–-[foo¯««ûäÉ€’’Òýû÷ûûûïÝ»wñâE”1ñó1ޱ33333³1;vìØ±c`ùòåüðª1_‰B233? TUUÍÎÎFY‚@ ¿z/çË©®®îééQRRâááAöE Ä”œ«W¯2™Ìˆˆø™'@ ï?IúÈ‘#Ȭ14;Z´@ü,¶¯ì® zð‡ƒÃáäååYg‡#êå ~t:}Ñ¢EãÝ®@ &8h‹¶‰H__2@´E@ ä I@ Hr1‘AÓ~8D"áË¥ÓéÈ_‡#È_ÎÈÈÈWLµB ÉùoÀÉÉ ÷äFü-rrrüüüHrƃÁ(..F¦øTUU¡Å)äüœ0Œ—/_¢åþ¾,²³£ŠàëèééÉÍÍUVVF¦ø<Éd¢"‘äüüíPd‡ÏÃÅÅE$?³×â3ðòò¢2ö%VbggïííE¦@’ƒ@|ÚÛÛCBBòòò›6mBA þ{’“ŸŸëÖ-ìçܹs.\È!..ŽuÄÂÁÁAII Ù÷CÚÚÚnÞ¼ 7‚_¿~ ««kee5&~BBBZZÀÊÊJWW ¿téÒ‚ ÆÄ?|øðÐÐÖo€›µ··Ÿ9sÖÂ[·neO¥Rïܹƒý422211<|ø0##°jÕ*mmmx6""¢²²°}ûv))© hÞÎÎÎàà`iiéúúzƒáèèø‹¹çÏŸÃl…ܽ{îMµ~ýzuuuÖÈgÏžmmmÅ~=z”ƒƒcdd$1÷/++‹ŒŒhkk¯Zµ ¦¦¦>~ü°hÑ"CCÃ1—\»v­¤¤°uëVyyyÖSGõðð@"¾?ÿü399ÙÌÌlΜ9ã½vttÔÛÛ›‡‡ÇËËë{à/š$ýæÍ›Ã‡çä䨨¨´¶¶†‡‡¿~ýzLœgÏž…‡‡ ¨¨¨¨¨¨pss£Ò0†îîîÝ»w{zzÞ¾} ,--…F«««c­ý¡Þ³ T*pùòåÝ»wŸ={¶¥¥åÃT®\¹B"‘à%Põß¿æÌÂ`0Î;7¦¾ÈËËSù"""PoJJJ`Èï¿ÿžŸŸEËßÐÐЦþ¯ÓÓÓ“˜˜¸eË–;wîÝ»îzþË’žž¾{÷îãÇgee±êMMM ÌÇÛ·o™w+,,Œ•Ç`0<==áO!!!Öøååå7nÜ€gccciiiééé00##ãùó笗\½zµ«« ž½xñb}}=kƒ),, -Høåˆˆˆ¨¨¨ ~ŵ£££áááW¯^X½œ‚‚ooïÔÔÔI“&qqq‘Éä{÷îÁS>LJJ²²²jjjzõê•››Û˜6 ƒ@ èèè´¶¶²¾äüüüsçÎ…»wß¼y3##cåÊ•ØÙœœ!!¡7\\\ªªª¦M›¦¤¤D$a×ç£ØÙÙ±ÎÌ&d2Ù••uøðaÖø“'O†I`deeÉÈÈÀ@''§êêê©S§*))©««KJJ(Š„„Ä|}}}=<<Æü©_111ŽŽÖÀŒŒ €M}}ýo¿ýÆÁÊÊŠD"a?™L¦®®îš5kK–,Ù¿?v¶©©©¨¨nYrûöí´´´U«V‰‰‰-\¸pÚ´i€#G޲vtH$’²²²ŒŒ `Á‚+W®„-ƒC‡)**âñø nÕüüüˆˆxl``_ØÄÄÄGÁÀU«Véëë_¿~=++kóæÍZZZ!!!eee{öìQPP8qâDss3ŒéççÇÅÅÅ`0vìØÁÅÅåíí½ÿ~QQÑC‡Õ×ן:u FSWW‡Î‰¬¬,èÌŸ?ߢ©©)77—D"ÊÉÉUTTÀ=—·lÙ’’’RZZ Ø·o´ðÁƒß¿/ üW¬÷÷½aaaX"%$$TTT°ð?þøãäÉ“ÒÒÒ™™™•••¥¥¥'Nœprr*,,üYßᘘ'''''§¬¬¬ððp''§/ŸœÊÅÅecc³téRÖ@)))¨7™™™eeeëÖ­ƒåû÷ïê>sçε±±SÝ8p «« »ºº:99mß¾þäááz{Q{öìsÃ/^À?CV¬XÑÖÖ544 CÏÈÈêÍÉ“'7lØ'¼¼¼sçνpá‚“““ŸŸß/.9“'O¶±±3­`íÚµ•••0sgÍšçRúûûWWWÃ^^^ðl?‡ÃA½ééé9uêÔñãÇõõõ'OžüTºjjjÓ¦MKHHprrâææž?>ëYCCC™ÀÀ@''§•+WbÔøøøÅ‹OðïØÞ¾}{àÀÒÒR …‚Ãáüüüîܹ“˜˜xâĉžž …ÒØØxøðáôôôôôôèèèwïÞþúë¯èè莎ŽcÇŽ]¼xQMMB¡>¾Y³f}>!%%%SSÓ‘‘‘šššÏΘ1ÃÔÔ´¤¤„F£<<<<<<&¸õšššÒÓÓ›ššh4š››ÛÔÔÔJJJ ´´´¬­­UTTrrrª««g̘²aÆâââýû÷“H¤9sæÙÛÛ[[[‰Äøøx:‡ÇãW®\iddS¡ÑhIIIÂÂÂÖÖÖ†††0Ѻºº×¯_××× ¹»»ïÛ·oL-‘••%))imm-##“––¦¦¦fmm-""’””ÔÝÝm``pîܹõë×[[[ãñø¸¸¸Å€_9c­¬¬ °råJø)€¶¶66Â|ûöíÇ···ÿ|ïêÛ·o ÜÜÜ:;;cccõõõ—-[&..þ·¥R©wïÞe¥ÿŠ,,XÌÌÌàA__Ÿ»»;œ»ÕÜÜìãã³fÍ}}ý1ÊËËcÍÌÀÀÀââbKKË‚‚KKKÀãÇf̘õFZZÚÒÒrÂV ýýý¯^½ îîîÆápÉÉÉîî–`= …²eË–FËËËÓÑÑ™Çä( 1`C6,,¬««+,,LGGÇÂÂ6›&2ÚÚÚ7nÜxùòe```JJЉ‰‰––ÖÓ§OwîÜ¡R©EEE0æôéÓ}}}ÝÝÝïß¿¿ÿ~!!!###www8d µƒƒƒÃÔÔ”ubQeeåºuë0¿(™L¾qãÆ³gÏΜ9“˜˜hfföÛo¿až‰¿ÅÄÄdÇŽ0il†ÑFr,-- BLLŒŠŠŠ¹¹ùÅ‹ÿúë¯íÛ·X£ýdhhhÈÉÉÉÉÉÏž=ûÛõ&??ÿæÍ›¶¶¶S¦Lù.OhggÁÁÁÁÚð÷òòÚ´iÓG›¥ÏŸ?/))qrrúÛ;ûøøÈÈÈXXX|ÝXå?Œ€€À¬Y³’““î‹´´´½½=æ°ýº›ìÚµkß¾}¬^Sƒaggçääô·ƒ‘ÐÙÙ ‡‹>ÄßßßÈÈŽô@ÒÒÒ á qooïúõëoß¾=1÷n_¼x1|øÐÐзoßb–êèè,_¾«(Ïž=«««ŒÃáJJJþüóOÖqoÄÒÑÑÑÐÐð½ô’’2æþÁÁÁ¼¼¼O¹Aàðï—Ü977W__ÿ?¡7¿&¬3¡¿Ž—/_Žù—Éd>{ö,&&æËoòîÝ»†††Ï4³Æøàà`l'ÃW¯^999MØIÙÙÙÇ×××wuue2™çÎ+++ƒÎ “ˆˆˆ?þøÃÕÕ5666<<ÜÑÑQOOïàÁƒ[·n½xñâ«W¯úúúôõõYÛ…Ð-agg7¦ÙdbbòæÍ›ƒΜ9³··÷ôéÓóçÏßµk“ɼ|ùreeå—«Nzzúàà ¸¸8ÿI@AAÁÛÛûèÑ£ÞÞÞ&&&§OŸŽŒŒ,))9vìØw¬C'aaa²²²………°-..þàÁƒÕ«Wkii}õ=_¿~½xñbxljjºmÛ¶{÷îÑh4{{{;;»«W¯Â³K—.ýL3sÆ þþþ"""qqqVVVt:@ À«€††, MMM??¿ÌÌ̤¤$///ccãÎÎNxvöìÙ°ÐoÚ´)22ZZZb^OOOÌ¥váÂ99¹ ˜Gõõõ...;wîܳg’¢1¸ºº^ºt f®µµ5t™îÝ»×ÁÁAUU5<<ÜËË ÎkŠŒŒ$‰L&sxx+?’’’W®\©ªª  œ:uª……<«¥¥µsçNXVcbb` ±±ñ²eË ®hhh{yy………ÁS›7oVVVæááù¿*‰]__®I£¤¤D¡PÂÃÓ““[ZZÌÌÌ988*++¯]»öôéÓššš+VL™2åÎ;mmm†††‚‚‚©©©===çγ±±Ù¸q#''gxx¸¥¥e||¼¥¥åúõë·mÛöòåK€¼¼|hh¨‡‡ÇâÅ‹»»»¹¹¹—/_.** ‡ššš¬¬¬lmm£¢¢¾ðÉ#""V­ZµnÝ:Ž˜˜˜+V@çê? Ž@ vww÷÷÷'$$|ø)" «««²²RDDDQQ±­­­®®NRRÎq¬¯¯oii‘——ïëëÃ|Ž***slùÛë2//¯¼¼––ÛÙW[ðfttô«oëCx,&&‡B›šša ¼¼¼˜˜Xuuugg'´pYYYOOü³………ƒƒƒ€©S§ÐéôiÓ¦Q©T</##3yòd‰D¥Rûûû±IXp|·³³›XßÖÆÆÆ¦¦&99¹ÁÁÁ¶¶6XKTVVÂ/ŸøùùKJJúúúàÛúöí[èÊÓÑÑÉËËc2™Pã§NúãÊ'??oo/ƒÁðññù"ÉA`466vttÈÊÊ ÕÖÖÒh4‰ô½ùPr?Tr êÀé-ÜÜÜ¿Â+9ˆï+9ß¹s焤¤¤¶¶6Lr~›‘´ÆÚø––ÆZ‹.6ƒ˜‰Äoñs"ÿ0aaa …L&Óét ‰kúò?’ø7QWW¹:d€ IDAT‡KÞÁ>ëϽ€ ’œ÷Sn}w+!#|ý›ÌÎŽÊØ·Œ±®0ô“TT 4x<ÞÞÞþ ‡"qqqsssTÆHrÎÌaë…ø p âË¡Óé===à_ý¤•1’T¾¨Œ! ÔG ’@ ÉA I@ &.húÀWu4uu<0™L4ŽÊØeÌRë$9?üüüh†ôÂÅÅE§ÓÑdßqÇã¹¹¹{{{‘)¾žÁÁÁ µÆ’Ä÷„N§_½z}þ·àp8==½_ç3ìïH[[[\\ܘ%™í.\¸ðóëð"äü÷­Ìη A|¾‹W’F¦ø DDDÐJÒ ¶’42Å¿¦úȘ(½œ®®®ÒÒReeåÖÖÖêêj)))yyù††¸€D"‰‹‹c—”––vuu©««óññ½}û¶¿¿_[[›H$R©Ô‘‘‘3füÊ£ƒƒƒåååØêúÝÝÝ%%%ØYqqñ1ž¥ººº¦¦&À¤I“à~·€’’8>¤©© Ý)yyy¬C 3g΄###………ÚÚÚØ©žž¸ó´°°°ŠŠ f+ANNŽu;¯ÿCCCyyyÜÜÜÐÂ4­¸¸XHH裵Õ××744ÈËËKII}x¶¸¸˜F£aÆÈÎΦÓ阅' ]]]Ø^AMMMuuuØYEEE ‰1—ÉË˳zœàÛ ÐÓÓÃVÃ...³£WWWWkkë 755ÑétYYY,¤ººnú§¢¢7ýC`0Œ¬¬,ŽiÓ¦ýê’óúõëÕ«W¯X±"""âñãÇ;wîtqq9~üxtt´¯¯/‰D’••uvv^´hvÉž>}š˜˜8sæÌ­[·æåå)((X[[wtt455}ßÝ$ÿ+ ¿~ýº¡¡!$$$==æää8::jhhÀŸ .tqqÁ.©©©‰ŠŠÊÊʘššZYY‰‰‰…‡‡×ÔÔlmmMMMyxxìíí%$$ˆD"¼ðÁƒ ###ãýû÷^^^oÞ¼Áôæ?þ€ûØ«¨¨8::ª©©%&&úúúÂm666ÖÖÖÿQ#777/Z´HCCãÅ‹€üüü¥K—šššÞ¼yóÃÈ©©©·nÝÚ¸qãGwäÝ»wozzú³gÏÆÔ°Ë–-ëíí…[5O4:;; _¼xQ[[oß¾}åÊl{§­[·²ºà ;;;=<<‚ƒƒuuua`fff@@@?`Ïž=£££/_¾ìèè8räHnn.ŒF£Ñòóó©Tjffæ70±©¨¨ˆöòò‚•••‘‘‘°ZZZZZZ"Õaeddäĉ‚‚‚ׯ_ÿÕ%çóP(”¥K—Âýh ›››YßϬ¬,è6ÍÈÈ€›ÑB’““ÙØØæÎûK•ªÞÞÞ   ¾¾¾1ázzzP>$**JHHè÷߸¸¸ˆ‰‰YYY;vÌÑÑÑÈÈ0oÞ}úòåË€%K–œ>}úç¶sssaa!xð@SS³¶¶VIIÉÛÛûÞ½{§N:~üø¼yó¼½½ÛÚÚÖ¬Ysÿþÿcï½¢:ºÇïÙ]v—ÞÛRDz‘.EPDET@ÅÄ'DM,yì55‰b¢¢b/‰&ë‚bAŠ4)¢tDzA:,Ëöòþ1¿ç¾û¥(6DœÏ_»³s÷Þ9÷Ìœ™3gfî<{ö,** ^˜‘‘Q\\|÷îݰ°°ààà+W®@wÓÅ‹Ǡɱµµ¥R©·oߎ‹‹M¯ªª‚ï×ÄÄdâĉ¢?ýôÓO??¿×ÿ³¤¤$•Jmnnž5k–hbbB¥R=ztñâE,qúôéÓ§O?~ü¸èÚ33³ÞÞ^ø ˜‹øs´7§OŸ¾~ýºµµuSS“††ÆÞ½{ccc÷îÝÌ`0îß¿¿lÙ²êêêîîn …’——ºbÅŠ;wΞ=»¤¤¤««ëñãÇüñÇ£GX,VBBÂåË—=<< #99900PSSsÇŽW®\éîˆ°··ÿ‚LŽ­­í† N:…¦•••ååå .ìîî>qâàìÙ³—.]ª­­…s€ß~û-%%åÅ‹ÇŽÃÆÑ·nÝúçŸTUUW¬X!:…ðe¢ªªª¥¥G9:::`€gÈ‘edddjj*ìÉË˼½½±V†Éd §¨¨hbb‡MØA„:::âââðLMMçÏŸ?äÌÇgFƒe,--ÅF*'Ož\²dɉ'Ξ=»mÛ6###"‘½téRRRÒ©S§zzzEÿ*>>þĉÙÙÙk×®õññ9wîÜÇétúgä100ÈË˃ï×ÚÚzþüù¬Î(`ggUÎÑÑñó,lnn®®®þïÿ»jÕªþùgݺuЂ޼yÓÜÜÜßß?11±®®îìÙ³ÁÁÁÇŽËËËkmmìܹ3--ÍÂÂÂÆÆæ‡~¨¬¬TVV¦P(_ýõ­£Ñheee¿þú«··÷¾}ûîܹóÅ9Ö²²²ÎŸ?M™Þ¿ÿöíÛƒs®_¿>===11q¸¿:þ<:ÿÃÂÂâï¿ÿ†Ÿ¯^½zéÒ¥#G޼þ’£GŠ:ÖìííÍÌÌ:„ePWWRÈúúúßÿ=ô¡½|ù:âÜÝÝÝÝÝa†?þøãÞ½{›6múÜMν{÷`Ÿt€ß‰J¥ wáªU«ž@¼—É™4iRhhèÓ§OëëëOž<)//íçç7¤|_¾|98ýæÍ›h#“Á”––b‘EïÃîÝ»{zzÞ˜­½½ýáÇ322nܸñ%HÛÉÉéäÉ“?üðƒ½½ýc—ÔÔÔúúú‘ü•@ Àb´Æ8 ÷ïßGuíƒðâÅ‹óçÏÛÙÙØîîîîOŸ>}ôè‘ŠŠŠhPV``àË—/¯]»Ö×ׇö5²?nbbrîÜ9@__Ÿ›› ¨¨ˆÍfÛÛÛÛÛÛÁ_) Œcž1cFQQQUUÀÍÍ N’-Z´èÎ;ðÍ7ß çºd2™YYYÐqÜßß?mÚ4€‰‰ISS¼‹P(.Zä³FOOÏËË«¼¼üܹsuuu¢\...iii)))ZZZ0 è5„††ž:uêüùóCv­Æ¦/(++ ¾_ߘœœ¬£££§§7ä%!!!T*ªÓñ¹¸¸TUUÁg044œ0aÂgªH&Lðññ©®®>wîFsqqyþüù€tÜÜÜ233“““{zzþþûoX¯@عs'›Íær¹•••PÃãñ¤¥¥]\\LLL¸\®¢¢¢«««®®.‡Ã¡P(nnn>>> ½½½‹/†¨îîîrrrŽŽŽ8®··wëÖ­x<ÞÆÆÆËË Ç3 ‡/áMÉ䜜+++¬w 7ƒ_•””ÔÕÕÓÓÓi4œºTUUõõõéëëôõõÓh´¹sçBc0iÒ¤òòòºº:¶råJ8ëêêšœœÜÞÞN£Ñ~ùål±­P(äóùÎÎÎ𫜜œ®®nJJ FÓÕÕ…Ý4MMM‰”““C£Ñœ¡}ˆD¢˜˜ǃQÈï,¯££#”0ŸÏ'‘HÎÎÎÞÞÞ0t•F£ÉÉÉ…„„øúúr8UUUWWW•ÞÞÞùóçWUUUTT,\¸P]]ÝÈÈÈÝÝ]FF†Á`XZZzzz’ÉdOOOƒA§Ó÷îÝ;&<x<—Ë­««ÃB y<ž¼¼_RRÓp—ËUWWÇLš‰‰I[[[YYF[¸p¡©©é'‘‰DÂãñç7“VVV677‡Šdaa1kÖ,¦¨¨8eÊWWW—ajjª¤¤ÔÛÛ kÙúõë ˜L¦±±±‡‡‡´´4ƒÁ°²²òôô$‘HýýýöööL&ÓÁÁÁÅÅ…Çã9:::88àääôY÷Éd2‡Ã …OžB¡éâsy6L@ ÉA ™@ “ƒ@ ˆ/±†@ o†@ Œ©Å¶\.÷s<™x38îÓn!JyyyOO±±1291náñx#<~÷ãQWW—••õ™nˆLÎG;ƒ@¼€N§‘‡'}Úg`0¢Ç`"“ƒ¨£ÿüó’ñÉäE‹!9ŒÉ¥^ɼyóˆ·‡Ã!'29ˆwARR x[“#%%õ·F#Æ h]@ Æ’Éyðàe(Ž;öË/¿P(”Ë—/Ö¬YC¡Pâãã‘XÄË?þ8 ©LOOÍàèèH¡P:::Œ)Š@ `2™ ÅÒÒrÜ gDŽ5@Àb±-ZtòäI,žÒ±gÏ‹Åãñ›Íf±XG(âp8>Ÿ/ a~€Ãáx<@LL û€´@Œ3¸\.‹Å:sæLPPLÁápØ$ØTž?Àãñ<Åb±Ùl>ŸO ¾ôQ&5üÿ8~ü¸ššÚ±cǰ_7oÞ|çÎÀòåËSSSÙlöÌ™3µµµuttÔÔÔÊËË…B¡‰‰‰ŠŠJww·šššŽŽRM1^m0q8‹ÅòööÖÖÖ...Æúↆ†jjj.êìèèpttßby “Ãápzzzzzz†\ >þ|ÀÅ‹=<<‚‚‚²³³cbb^¾|©¯¯ïääôêÕ+˜SOOOVVVNN)%¯0ŒžÿÁãñæÍ›WPP°aÃ†ÆÆFÑœ¡ºº ¬¬œ=¾Åò®­¤¥¥BCCGxÊzwww[[Û€•S***eeex<Š\@ ã–Ý»w‡……ÁÏÿý7–þèÑ#›ººº/S,oaræÍ›wêÔ)øùÈ‘##¹dÕªUD" ©©‰Ù˜¢¢"doÄøæàÁƒÁÁÁHïnrFΫW¯àäØõë×mllššš¸\®’’7øÂijj‚ñSCÂãñZZZ´µµ‘Éy3 EFFæåË—QQQ4MBB¢¾¾^RRráÂ…!66iøBhii)//‡Ÿµµµ'L˜PPPPWW÷×_µ¶¶ÈŒÃá ;;;³³³>L¥R¿h“#++kii©¥¥…¥¨ªªZZZª¨¨ˆ‹‹[ZZÂÌÞ½{á~b‡š2eÊš5kÂÃÃáå7nÜPQQ133ëééA^51ŽÑÔÔ´´´ŒŒŒŒŒŒ„)G={ö,à?þ¸|ùò?þØÜÜL ÌÍÍét:‡OJJòóóßö€#‘H,«··—Á`ÄÄÄ"ù°ÈÈÈœ9sfÉ’%HÄÛ5O8œœœœ@  ÑhŸ¾{.&&--Íår?ù.ÎåååOž<±°°˜"€Á`0 xÐÀ'GEE™·&G\\ÜÉÉ ‰â}@ërL@ ÉA ™@ “ƒ@ ˆ/±öÑ‘@BxØl¶@ @r@ ÉA¼2™Œ„ðžäääP(´OLâÍ…B&“‰äðn<þ¼°°ÐÓÓ™™Ĉàp8HïF}}=ƒÁ@r@ Æ(|@ Èä ™@ ÉA þ]]]±±±yyy_fñ‰D¢´´4‰DBš€#Œ4| 999,, ûºhÑ¢o¿ýv„×.[¶¬±±ñêÕ«ÊÊÊHâˆQ£»»;ëv¬XÜ‹6mÅ<lmmßxIXXXrrò¯¿þêàà0옘‹Å#‘H# `Yµj•èùcQQQÒÒÒH‘£mr?~¼aÓíÛ·nÞ¼ùûï¿ãp¸ÐÐБ\þüùóÊÊJt3b4éééÉŒzH¾[D¤±½ì¶“Gbuª««³³³{zzƇ½ëgù|>™L‰ÕyñâÅóçÏÿý÷_MMÍyóæÍœ9óÑ£Ghaâ2"ÇZooo}}½¢¢¢µµµµµµ††F[[[kk+àĉÎÿ#>>°uëVggçÜÜÜ•+WÂôúúzÀܹsÇAMF|Ðh´´ÈâÑ…D€çðÉÏ[ZÿMùyŽëׯwvv... uvvnll„é3g΄Zíî³³ó‚ CCC‹‹‹±±cÇxUtt4–xá˜xäÈ,199&þ÷¿ÿÅaÅyO{ …l6ÇÐÃfjjjmmW__ïááÁçóÙl6öTAAA0[ii)–øã?ââ✼|ùòE‹íÝ»wíÚµ'Ožljj*--]ºtiWW‹ÅºvíÚöíÛëêêŽ;&##ƒ$ŽøØôõõ%ߺ+}û¹Xÿÿß©ÇsùâÏ›_]IÊÀÆÆæÒÐÐPZZºhÑ¢#GŽlß¾}öìÙ±±±¡¡¡999ÉÉÉ’’’öööS§N½sçNiiieeåìÙ³jjj²³³ÕÕÕÏž=›––¶sçNçää´eËOOÏ­[·^ºt),, Ç÷õõ;vlõêÕ ,عsçêÕ«Ïž={ëÖ­ÈÈÈ'NX[[/^¼Øßß?&&FSSóíª´˜‘Hd2™B¡K„Vg„cˆ¡¡!/++ãóùÎÎÎmmm)))­­­AAAûöí VVV¾páBffæöíÛq8œ­­miiéË—/I$RGGÇK–,ùæ›o~ÿý÷Í›7„ŒŒŒË—/ïÛ·ÏÕÕõ»ï¾[¼xñ­[·vïÞœœE¡P¼¼¼\]]³²²œœœZ[[SSSÛÛÛýýý,X‰Ôû‹09RRRß|óÍœ9s¨Tjxxø•+W–-[¶nݺÎÎΞžeee}}}YYÙÖÖV:/innþûï¿mllÔÕÕ‰D"`âĉIñQéïïO¸-UD` täâ¹ñ¢æ–+‰8nÒ¤I#ù·¸»»“Éäêêj.—[__Ïçóuuu¥¥¥ q8ÌÆãñp8\QQQIIÉ¢E‹&Nœ¨¯¯_UUÕßßßÚÚêé陘˜(--­   ¨¨ØÕÕÕÓÓÓÝÝÝÛÛ{öìY##£'N0 ee刈&“©©©©¯¯O"‘*++y<ÞÛÚ‰4ÀÞˆZqqñ‘[ŒššYYY}}} .—ÛÐÐÀápššš´´´ôõõ555=<<$$$’’’àsÉ’%?þøãùóç?®¤¤¤¯¯/''×ÞÞÞ××·iÓ¦U«V)++KHHˆ‹‹755±ÙìÆÆF.—ûý÷ß§¦¦fff 11±šš}}}IIIxS¤Þ_ŠÉHJJJJJ®\¹R(þúë¯Äã_ç”»téÒÌ™3¡±A F</ˆòÔBkè–ÏHµÈ絈;:²X¬7þ¡ššÚpÎ(mmm@WW@SSóÑ£GÊÊÊðkvv¶©©)›ÍÆzl<ؽ{7ë“mݺuÍš5{öìY¿~½„„ÄÑ£Gg̘ £„·-~kkkEEÅÔ©SÛÌê°X¬ÜÜ\]]Ý·;šššòùüÁ?‰‹‹Ci@-Z&###''?{ö,Fƒ¿*))íÙ³çÑ£G˜ôwïÞåñxÓ¦Msvv&¹¹¹0N§wSÄx69qqq«W¯ž?þÁƒ׬YÃçó÷ïßßßßÿšK‘½AŒ2H‹{žÛöxéoÃåÑñs6Z6³ iccsõêUø™D"EEEmܸqþüù{öì9sæÌÁƒ222222‡æóùT*uùòå/^„—œ9sÆÎÎ~–——ùc¨¨¨°X¬Ç»¹¹ —'77WBBb„ o[Fii錌 ¬¼ØäÖ`$$$D]è«V­úþûï1ë»nݺ›7ož:uÊÓÓsñâÅÏž=@éeddL™2åÕ«Weee0¿èM‘†‡~áH2q8œ®®.hcÈd²¤¤ä»ÝÌÚÚº¯¯ ñ­ŽP ¦£2õïCMf9™nYÄò‡Œmmm“á¼[ŠŠŠyyyÖÖÖÛ¶mc³ÙýýýâââŠŠŠØI¿ýö›¶¶öíÛ·Oœ81oÞ<:Ž…tÊÊÊ***.Z´ÈÚÚº©©é­y&LÐÖÖNOO2C~~¾¸¸¸±±ñHšoVQQ3ãp8EEE6›mmm š3%%E[[{ÕªUÃY EEÅððpkkë{÷îÑét‡###£¨¨(&öÿº¼Ó¦MÓÖÖîïïÏÏÏ———ïîî†éð¦\.×ÚÚÚßß©÷—2Ê™5kÖ™3gV¯^ §ïø|þÚµk·lÙ`±X?ýôÓÏ?ÿÌãñN:5gΜ7n ¸<##ÃÞÞÞÚÚº¨¨E >6|@l¢ªÛ¥ŸÒ¾Ù'š®éë`þÓR&›õÎÿ\TTdll¬¯¯¿VWWcŽ2ˆ••ÕƒfÏž­¦¦&f̘qôèQ<Ïd2·lÙò÷߯Y³fË–-û÷ïß½{÷¢E‹6lذiÓ&wáÂ…3føøøÌ›7oΜ98ŽË妧§‹:¬F‡ÓÑÑ …...¢?‰DSSSl j8à”——«¨¨êëëuttÔÔÔ„B¡††F||¼˜˜XllìÌ™3aI½½½?%ú?ëׯg2™¿ýö[XXÇ;xðàüùóX,Ö’%Kðx<•JÝ»w¯Obbâ7ß|cccƒÃá8NMM ‰DjllÔÖÖ†7¥P(ЇøÜÁ‘H$‹ÕÛÛË`0bbb‘P>,òòòB¡°··‰â݈onnž5klþFîìâÖ´¦/? äñqxœÆô)V{¿ýrv¤®©©yõê•““‡ …EEEx<ÞÒÒ©b”‘••¥Óé <<|ÿþýhÃÄ8ëðù$}uç3[Ä$Å¢:( IDAT5¼í¿({ÐÓÓSUU}öì—Ë…k_½AŒÐy9ˆq Ç7ÖôK?Åår¿Àw „B!•J555aP8Lñ^VçKvi"5@Œc @ Èä b|k£P(Ä– Þ´9Lâ-ìMKKKtt4@&ñÑ;é)))oµ¦1´LâÍ0ŒY³f!9  @ 29@&@ dr1vAá᎕D ÇH#‡Íf¿Õ±:MMMqqq$drÆ'/^¼@r  ERRòÃÙ9îéïïÏÍÍÕÓÓC¢!jjjHÈäŒ[ARR’‘‘ÅtQLLNNîÏœý’‘••õòòBÛ4¼‘ÆÆFuuu8˜FÒ@&gÜB ‘Þ8$“ÉL&‰âÝz6Hto$??ßÉÉI^^‰âSÂ1–F9wîܱ°°ðóóÃ333ÓÓÓ===íííßáÆ\.÷È‘#¢)jjjÿùÏƱ¬étú©S§°¯šššK–,TWWGFF,--gΜ ÍÊÊzüø1@TÂ÷ïß/))éêê"õLooïÙ³gEStuuƒ‚‚>ÈŸŸ:uŠN§¯_¿~,‡„TVVÞ¾}ÛÜÜÛóâéÓ§©©©ðó´iÓììì<À¦.\¨££ƒ”g$Ðh´ÚÚÚ×dÐÔÔTVVî×K—.µµµ}÷Ýwp¤Áb±6mÚtøðaqqñµk׊fnii¹|ù²hŠèkÏ&§¼¼<,,lñâÅ¢&'--íÀ’’’ïlr¤¤¤Ö¯_èèèøóÏ?AhhèxUÖ¾¾¾Ó§O¯Y³æÿ 0ñx@MMÍÍ›7ábEEEB¡ÐÏÏ/+++%%ELL ˜˜°··¿wï^ii)¼êúõë!!!¨™LOOOXX˜ªªêŠ+DåüA8~üø«W¯V¯^=6MNmmíÕ«W+++£££.\Û¦gÏžíß¿_ ¸»»'%%eeeýôÓO---aaa&&&¦¦¦×¯_¯ªªÚµk—¶¶6ÒŸ‘˜œâä'Òµ=CþªêlA˜0a¸kÿú믴·····ïÚµKVVöðáÃ4mýúõaaarrrLNsssXXØÄ‰aß´´´4::Z(Ξ={œ›HAAÁÝ»wýýý¡½INNÆ~ºwï^NNübll|éÒ¥ÚÚÚï¾ûNSSóøñã›6m’••ðŸRRR›7o”••={öêÕ«¡¡¡555ÿý7Ì`mm=þügÏž=xðÀÕÕÕÇÇ')))55uæÌ™ŽŽŽÑÑÑyyyAAAW®\©¬¬„W­Zµ NŽ5äää`y1êêêŠŠŠ®]»¸zõjBB‚ŸŸ_NN—Ëݶm`×®]ùùùööö±±±žžž€ ¸¹¹!“3***¢r.//¿zõ*üyòÄßß¿¡¡¡  `áÂ…ùùù¡¡¡'Nœ~üxË–-›7oîë니ˆ˜={v~~~IIÉæÍ›çÍ›÷ìÙ³[·n…††"“3BH4¶|Që?z¹«««rùï¿ÿª««=ztÆ ƒÛÃ!ÑÑÑÊ|ûöí¨¨¨¸¸¸Ù³ggee=|øfðññquu½ÿ~vvöüùó­­­¯_¿^ZZúŸÿüGOOïüùóMMMkÖ¬QUU ÇÉݽ{÷윷¸eiiiRRüœ““óôéSÌÞ8p ¹¹™B¡$''ïÙ³§¢¢"***""¢­­ pùò刈ˆþþþöÔvïÞG¡PÚÛÛÿý÷¨¨¨çÏŸGDDdddž>>+W®¼}ûöµk×RRRV­Z5wîÜäädѸ¯ÈÈÈgÏž…„„Lš4i×®] MMM«V­ÒÔÔlooƒ®99¹={öÀÏL&óøñãÿýïQUü´´´@½200022Š;wîÊ•+ÿý÷_*•š‘‘¡¥¥5ܵiiiwïÞýᇨTjWW×¢E‹òòò «óóbêÔ©³gÏNHHèììÌÎΆ‰ .,--½|ùrzzzii)R˜Q ::Z´|åʕݻwäÂÊÊJ¨Ìµµµvvv .,))ÉÈÈX»víÊ•+»ºº>žÅbä&&&Û·oÿóÏ?—,YÒÒÒâêê £]õõõÍÍÍoݺ…Çãž>}Z[[»qãFhäœ###7nܨ¤¤ÔÕÕµÿ~MMͱ¦v ;vì€ñŽJJJГkiiééé õôô çÍÏÏ/22&ÚÚÚNŸ>ðý÷ß߸q¶~~~¦¦¦¨&++«7^»vmÉ’%MMMÓ¦Mûúë¯%$$ž?dddTUU5Üå¿ýöÛêÕ«7oÞB¥RG¨ÆcCCCqqñýû÷S©Ô²²²¯¿þzÚ´i½½½QQQ?þø#…B)((ؾ}»èbŒuøþýûUUU‹-òõõØØØhkk߸qcݺu³fÍúûï¿;;;ÝÝÝá<º¯¯ïòåË—/_N"‘x<Þ¥K—>ÉÃãH$‹Åêííe0111¢ÃŒ¶¶¶ÂÂB ssóÆÆF&“iddTSSS]]mdd¤££SZZ ÷²µ²²jiiioo‡:88ÈÊÊfffö÷÷O:•L&cÿÉçó“’’Èd2ô¤õ÷÷gffÊÉÉM™2¥««+77f£P(ðs]]]ee¥®®nyyyCCƒ™™fZòóó1©£££ŒŒÌÑ™3gÎ@ûÁd2ÓÓÓáðÖÁÁfhoo‡xPÂ0±¶¶¶ƒPÂ0±¸¸¸¥¥Ú!%%¥qV‘° oÞg[O(aÑHLÂ---h­¡„ 9ìEõôô477[[[«ªªæååuvvN™2ENNîÉ“'t:ÝÕÕ5;;›Íf{yy„±#·®®®gÏžB?6¬­ƒ+ülll:CžÚ€x[ètú§Ún}ŒC †Ü3ñ¶`Ç—!ÉùŒ]%Æ1B¡022rÒ¤I¯9RéÂ{êØÙ³gƒ‚‚Pd)29ãD¡Qꉇ[Ÿ!Q¼‡6¼yg®]»†"§G4—ƒ@ drL@ Èä bì2¢ð:ŽæQPP jkkëííUWWG›W~êêêœhkhhˆ}æñxµµµ$ ;ê £¯¯ïÕ«W²²²jjj===ØÙzÊÊÊ €ÖÖVl« )))@cc#vГ®®.Üg¥ªª î#‚Çãõõõ?•(¸\n]]öUBBBKKK´°¢™•””°£É ()" ENÕ%ƒñòåKÑÌrrrªªªØ×ŽŽŽîînyyyQuÒÔÔ”””444`S÷ƒÕ‰@ èééàIzƒ_ë(ƒÃá^( _³¡,ìĉ‰D" ººZ TUU WqD%,##£®®>8O{{{OOªªêØ_’1"““œœ¼téRyyyxggg§··÷®]» bµ´´lß¾=::úçŸ^¶lvìbÔ ªªª266†Õµ¤¤$-- 0ÊãñRSSuuuoݺ5@§–-[¶téÒÝ»w=zôÚµkjjjmmmAAA7nd³Ù[·n-,,”““khhؽ{÷¢E‹ÚÚÚ–,YÂápÄÅÅ+++¯_¿îææVYYéééi`` ššš>ÕÁÆÍÍÍS¦L×××g0 ýõlccc¿ûî; ˜yÙ²e¡¡¡P‡·mÛ–››+//ßØØ¸sçÎÅ‹£Å.l6{Ê”)bbbÆÆÆ‡ÃáDFFB]ÊÉÉ™;w®ŒŒ }çΣGΘ1°wï^¤9¯ACCãÒ¥K«W¯NLLù…›6mÚ´i ²²²§§ÇÄÄä‹ò×””ô÷÷_¸pÁÂÂÂÆÆ&??_EEåõ—”––®[·ÎÝÝ=,, àáááááÑÞÞ~ìØ1*•ª££óòåK//¯mÛ¶a—„……ݸqãÊ•+³fÍÚ²eKJJJBB¦M›Ö¬Ysçή®®¼¼¼k×®=z”ÃáÜW_}õnËÃãââNœ8ûŸÿüçŸþ¹yóæ¯úþûïûí·ØØX…ÀÀÀ7n<|øÃá,X°fèééyðàÁéÓ§+**6nÜXXXøÓO?9räðáÃL&óáÇ£=Ê)--=vìXcccEEņ BBB°ŸÊËË ñ£Ì… Èdrjj*Ç‹ŠŠÂÒY,Vbbbccã¬|òäÉ®]»æÏŸ?^¥ôüùócÇŽÁÏÁÁÁØ â}¨©©Á¤:}útƒázú[·n¥ÓéÇŽ›4iÒ—Ù/lmme2™cíÁÔÔÔN:õâÅ øUAAaÚ´iíííplúûï¿›ššŽ¶Éñðð8uêT||üîÝ»kjjªªªA]]©©i}}ý… ¤¤¤ÔÕÕóòòìííÑvX£Ï¹sç(Ê·ß~çã㓘˜H&“íìì.\¸pvvnoo¨¨¨ØÙÙ‰Ú›C‡effîØ±ëøŒK¦OŸŽ´åÃbooÿï¿ÿb_ëëëKKKõôôŒŒŒ°Äâââ;vô÷÷>|XT÷¾KÓÝÝíää”°±±IIIILLäñxcó-,,¨Tjnnî–-[ÝÝÝ÷íÛ7¤Oþ#š¬ÆVVVîܹÓÄÄ„ËåÞ¿ÿÀßÿ=üõ›o¾9t裣ã´iÓP=ü$üõ×_êêêK—.­­­]±b…ššÚµk×àO………ÐÕ6}úô7n`WÅÇÇ_¾|yýúõãF]]]™™™ªªªS¦LyM6sss]]ÝÂÂÂÆÆFmmíììì––''§7ºÚ¿Lúûû“’’dee§N:\žØØØmÛ¶mÚ´içÎXâùóçÓÒÒþüóO{{û/Mhûö탮 [[[LëV®\ùú«\]]ÛÛÛ³²²›››srr FrǬ¬¬‘D( GGGGff¦ººúï¿ÿ¾}ûöÔÔÔ?ÿüóƒôÕжž_***¦¦¦¯^½¢R©ÙÙÙ:::vvvPVVF¥Ra¶I“&ÙÚÚ&''?{ö Ç777»ººªªªzxxTTT$$$”••õ÷÷Ïš5‹L&üûï¿‘‘‘<H$~òˆµÞÞ^*•ZUUuñâÅÕ«W¯[·NÔ„•ÑÌÌÌÌÌ ÚàƒÂàéÓ§%$$ ɛͦR©íííaaaË—/ÿù矱Ÿš››1©êééXYYAu*++³¶¶Ö××þü9àéÓ§X„±»»»§§geee||ü‹/ ÆìÙ³I$R@@ÀµkרT*‹Å"“ɳfÍ’’’š1cFqq1•J­®®VQQqss÷×ÓÓ ß¼yó–-[Ö­[—““óðáÃ)S¦ØÚÚVUUQ©T dllÜÚÚ /™2eJfffff¦P(|O“sáÂöÃ?ØØØtvvbÆò=!„;w²Ùl.—[YYiff68“Éär¹NNNp7ß¾¾>111ØIJJN:uâĉ؃ª¨¨xyy¡êŠ!..«ëǻūW¯ôôô|}}á½-,,|}}›››'Mšäíí ³q¹ÜÞÞ^__ßU«VÕÕÕÕÕÕq8œ   ¥K—Òét</!!Q÷?´µµýýý¥¥¥kkkëêêTTTvìØajjêêêÊf³a¢¾¾þáÇåääfΜÙÜÜ\SSÓØØhooèСXºêêê¾¾>##£‘,Ïäñx:::uuu4Í×׳7 ƒÏçËÊÊbeTUU…kf---edd`¡”••·oßþA|£'“Éö>B¡ðåË—ÆÆÆuuummmîîa±X CEE“ª´´´¿¿¿¶¶6”§„„ĪU«¼¼¼º»»ååå9–ÓÆÆfîܹ, æ400—‘‘ñóó{ùòeMMMSSÓ”)SþøãIII77·úúúºººÞÞÞ™3g®_¿þ°¸¸˜Ïç[[[·¤æÿ´˜€•×¢¦—H$nýÚÛÛ544|||äå屜†††––––––°¼“&Mš>}ú€ •””lmm±Ú¸k×.===(1"‘¸|ùò™3göôôHKK»»»ûûû“ÉäÚÚÚeË–©¨¨P(6›­££3cÆ ))©ææf###???ÐØØhmmíííÝÚÚjkkëééÉår{zz&Ožìïïomm ïËårƒƒƒ¿úê«w“-™Læp8B¡ðÉ“'iii8‰Äb±z{{ FLLÌxò«ŒäååÑáï<¼`Ö¬Y¨3\#(##ƒ/xàá_ýõÏË!‰§¢¢bÈ_ëëëµ´´†ì¸±ÈÊÊÒét@¾ÿ~äXûœHJJˆíÚ‚@¼'·nÝêîîMÁáp+V¬@’ƒÑÓÓ3ä¯rrr¨2¾dr>':;;Ç:7ÆG Þ–––sèÈQQø|¾”””ƒƒ29㟠     $ÄÇcíÚµHˆ:¼@ Èä b|k£ŸÏÏÎÎFrx7°V¯¡¯¯/''Éáݳ» “ƒxkAjj*¶yñ1¬rFFÆë÷ÓD Éù"`2™ÒÒÒNNNHï:pö5}§¢¢‚Ö-½'o\Š@&ç3€Ëå~ª#2_B¡@ C|v‰@ Èä ™@ Þžÿ3—ƒÃᤥ¥‘PñA°aÒÿ19L&óÎ;HFøP¸¹¹‘Éä!L@ÐÖÖFB „(d2YRRò.”’’"‘HCrðx¼‚‚.@ D‘èèèxÛ%ížžž ž—3„ɰX,´Œ@ 999èýb±XòòòƒÌÍËËSUUÕÒÒ<¾!‰‡09B¡Á` A#BBBû,..>À&...-----=ØC&##Óßß? I#âÁãñöööÍÍÍ/_¾I~´á @ Þqqq"‘(..>yòd1±Y“·39zzz¶¶¶Ø×âââ²²2Ñ NNNõõõÍÍÍC^îïïÿðáC.—‹Ãá,X`³Ù÷î݃¿ÊËË{{{ÕŠL IDATÚÚÚ?~ uttìíí•••………0ÑÊÊÊÈÈ››[[[û>"Ãn innÎÌ̲°€ÂÂÂÊÊJÑWW×ÊÊÊÖÖV€···¼¼< &&óL.X°‡Ãñx<,ú\FFfÆŒ€ÎÎÎääd˜¨¥¥åè設­ÍÍÍùóO›6Mt<{ïÞ=6›}%‘HÓ§O¿ÿþ×jjjjii=}ú ¯¯occ(--ÅfmmmõôôYYYMMM0ÑÓÓSII ×××çÎK$…Baddä{*±¾¾>ö5##£¥¥~Æ$ŒqçÎÑmç%$$<<<>|PPP˜6m µµ5-- f˜8qâäÉ“EEE0ÑÚÚÚÐÐ]__ÝÜÜÔÔÔ‰‰‰ÝÝÝïY(L—ÊËËŸ?u˜Á` ž4uww/..îììÄRfÍšõèÑ£¯Õßß~¦Ñhñññ𳪪êÔ©Sá熆†gÏžB££ªªjdd”žžþ6¸ºººòòòùùùcóñ¦NZRRÒÑÑ!ªK‰‰‰,ëC݇ñX,‡C&“ÓÓÓõôô444>¤É!yyy𫹹¹±±qyy9üêèèØÒÒb`` ^½z5ør,T.006ÁâââsæÌ¹w¬¬ƒƒCtt4Vs?~H ÄÞ/ --ÍÃÃC ´··(ìkèíí}ôè,‘@ À䌩öüPë`"¦ºbbbØ3„˧ߖúúú††ø0¢ï—@ Ð^LsD 0Çಀz?wuu=zôh@ ÔÔÔ¼§àm™0a‚¦¦fkk«’’Rvv¶©©)‘HĆ’“'O†CÉÌÌL¬8mÚ4UUÕØØX''§´´4lÐü©&<ïÖ­[ou¡™™Ô.—[ZZjooßÙÙ‰u›<<<( >>¿Î;WRR’J¥Î›7ïÖ­[°é5‚‚‚"##oÞ¼I&“gΜ‰¹a¡¦¥¥%%%åõýu&“Éáp0íMNN611…ý`&g@+IÊÉÉ©¹¹¹¡¡¡±±ÑÓÓ“ÏçÞépm €L&ûùùݾ}{ìô  ÙÀ 8¸°ÃilPp8ÜìÙ³ããã™Læ¨=³¨ÇÇ/X°àæÍ›B¡0!!ÁßßÿîÝ»¯/5‡333ÃápÐó3F€¬!СÁÌä%¨««¿¾æŒŽRáp8"‘XPPÓsrrõõõá@ÇÝݽ¬¬L´Ã1gΜÄÄDƒ Û>ŸÏãñ¢££CBBúûûïÝ»' ¡ÚÚÚŠ‹‹CBBšššÒÓÓ±ôQ‡Ãééé …Â®®®%K–”””p¹\8”´µµ¥Ñhׯ_¸¸¸‚ÆÆÆiÓ¦·µµÍ˜1CQQñ“kZpppdd$ì ½•ÕÁápVVV………!!!ÙÙÙjjjB¡°¶¶vêÔ©©©©€3f<}ú´»»{îܹ=b0 ,ø¨cÄá:åaáÂ…·nÝZ²d “ÉŒ;wntt4tÀ7E¡PÜÝÝá“7ÄÐÐyxx|øQŽôïãñø¢¢¢ÒÒRѶ²¼ñÈdò¬Y³¢¢¢ÆòÀÙÐÐPt^!??ó"ùg̘‘’’28.ð£2cÆ ltuëÖ-¬Ÿ »½XïþvËØØXLL ›0›øúúŠZ}*•:ÜÂ8NUUÕÌÌ,))é“?6‡322õÓB«Gx<~p‡¦®Sl6ûêÕ«’’’ÁÁÁ4-..öá^½zuõêU--­àààúúú§OŸŽ²Õ©««ËÊÊ222*//ÏÏÏ·°°€éyyyx<ÓÆö866vöìÙcáÁ‘ÊÛº ÅÅÅÅÅÅÐ+^YY©¬¬ Ó?~L ”‡ÃÁ×M¥R/^üñ ååå%ªT¢Ãå7nÀi樨(III¨`===ñññ#i7àGtŠ&&&&ZXXÀyÐcr*++¡ƒØÜÜ¾è  …vvvvvvXû Å =êÒgaoƒÏ“‡Î¥•™H$zzzfddŒ¾sàáÇp.gΜ9D"*‰Dóçχyèt:ôƈzöDí¡¡!™LÆ:àc–˜˜˜ÁÓ*$ Ýcªç6Æ‚½ÁãñRRRƒ§è²³³œœø|¾¶¶vMMMKK ÖLÃ÷]°i&‘H°S ËË`0®_¿.''7cÆŒ˜˜Xy<^SSÓõë×õôô¦L™§£>Fë>>\.·½½}úôéiii4MôÚ \½zu êt¯¿¾.Mž<¹­­ sÔb‚~öìÙûL2¿?÷îÝ ºsç—Ë?¾¨„a˜Üýû÷•””lll°p ˆžžžœœÜè8½-$‰Ç㽦·c®]»&š(//oggC×>9'NTPP€‘ƒár¹pzr@WœÅ‹_¿~@ ܼysÀÿ¨¨¨XYYÁy¬¬¬««ëƒF˜Ò¤I½½½ð™]]];<ÆÈ ÐÐu ›ÔáòP(ƒáÜMƒquuÅk3gÎÜv©ê+|S00xpÃápl6{À#--ÍÊÊ ç}0“3BX,–¸¸8|‘¢VQJJ ~L&S(r8˜ˆuÕa=„‰˜%€]u˜O}ÿN(ö0ðy¬ñ%‰ØO°ïÃårÙl6@€é< cÇ23 ¸‰ƒ¤¤$œ1†q€ÍfÃlX7:è±b¾¦‡õþÀÉx/111LiÄÄ݇‡Åäp8˜œù|>ö1™°Ùl8xe2™D"†ÿ}3ƒ=Œ­­­h §„„„è‡>Lƒó‹:—E_+Çc³ÙÐtÁDå< ˜ðÏóýÝS¢ŠÅ‹ý”““ãââÒØØ8ÜÒ‚…B&“‰ý™L†Z$úf?¶"‰ª1‘H|cÐ-‡ÃÁ^tŠLÈNNNcáÌX[@˜:uêpK ÔÖáš]Ñ{û0˜Ç3 qqqçååõn~¼÷f±va;@‹v†â`Þ<&“9\­y;“ÃápDEÌf³aåa±XF 6R‰‰‰Ó¦Mƒ*åÀ–[ Ãd2ãããi4Zvv6Lloo‡aÊMMM8&VWWJJJÌÍÍabAAAccã{ŠXLL {˜W¯^a½Q‡£ªª*ºj§¸¸¸ºº:??ßÖÖ¦geeÁq+ƒÁ€ë‡ qqq,ëîÝ»sæÌÃpØ%d0ðÚ®®.¸^¤¥¥+f]]Ý[ͦ0 ÑWK§Ó¡àßÃ61êêêzþü9¼WKK 4®\.WEE+iii)\¶bmm ³³³áâ˜ôôt7778Ù›””[üøùùÁu9¯ RyÅÐÐF7‰JÖÁÁA4óýû÷ù|þýû÷ád‹ÅŠ‹‹ÃÚµ¯µ±±“sUUŒE~ñâ………LÌË˃˞]BB"&&&00ðãÑë:úûûaû •J ÀºÜÛÛ›››‹­¬ªª²²²õè¼qˆyúôé¤I“äää†$A{ÕÛÛË`0îÝ»çééÉd2KJJ÷;8Îhb}p—_ |ò¸LâËDJJ =³gÏNMMS•‡ÃÉÊÊHäñx$8n>»Ð_:ÊAÒo…’’’¾¾¾„„DSSÇ›rŸ,ø€XXX¼zõ Ž ±öwì@"‘·ÃÍɽ“'O.--…­6¶Žû³@ TTTŒÐøûûž¥ÚäôööŽ|nðs!&&ÕsbŒðôéSSSS@zzú(/-x#l6ûãµÉÉÉ0v >>~,qóôôôà:™‘ d¡ãîÍ&@ FÁê|±eÿ´Ë“ßgð'%%5’!iWW×ñxCŸ—3òˆ{@ŒcÄ p8œ‘l £ŠÞlrø|>ƒÁxÍòÑÏ11±úúz ÷Ü,kì@ Z[[edd‡0~¦àñx¸ªIFFf|”öÐéô±°›Ë,TKK‹ººúxjUUUÇT°ò{6ííí’’’dѶ„àƒ |ÈTYYYÑààÏ99¹“'Oz{{“#--}çÎ+++UUÕñQ"qqñœœ<off6>JD$[ZZ^¼xáîî>nì @¸qãÆxjdeeÿúë/qÓ{“’’ŠÕÕÕ|2ô»©±@ ÀùK4lD Ä( +_ÿó«W¯*++EjUUUÁ%fææææææ0177î†ëìì<Ø´>|øFÜÏ;v%•J…}[ì°©îîn¸‹šššhǰ¦¦¦§§;-­¸¸Xô@@ZZ4ÅÞÞÞ#weôôôäääˆöÚáÉúúúØ–qyyyðX-GGÇ &ÀÄääd¸µþŒ3¬þ¡R©ØR/&“ Ï£ƒûba†çÑM˜0žÒ)--˜„_ÏǧN*:þ…[VH$lÛ¨ÞÞ^¸LREEÅÓÓsÀ?`¯ÕÌÌ Ûæ {­NNNÚÚÚ01)) îàëë+ºp!22rþüùp —Áb?)**b‹OáêW‹:_Orr²••<r÷î]èP ˆÙ××·ºQVVöòò‚‰MMMp}ñà×ZPP --m``¿fff¡žžž***t8 Ûú—ÇãÝ¿“ð멪ª¢ÓépI $??žø‡é0 %%.}>}ºèyt·oßö÷÷Çœ?˜„eee}}}abkk+ ú×ÖÖvrr}­+++@vv6ÜèÌÅÅESSs¸gpÓtuu`Æ*ÄØØØÚÚZ4NN\TˆµXÅÌž=[RRrȺ3:P©T¸6Ûœ£³³311@¡P°ö°¦¦îÁhòÿ±÷åñP®ïÿÏŒ™±/#kö¬9HQi“%)iCQmŽJëi9¥£NZœrZµ©¨„-"[‰È2';!²¯c†1óýãú}î×óLr:ŽŸ÷_Ü3ó<ÏýÜËuÝ×}Ýï·ŽŽúrFF†¤¤$pÊý눉‰122BBŽhà@¤2ñó!(þÉÈÈ …ú[šœ†††¨¨¨‚‚‚ââbôŠ?~üQVV¯›Ãáèé饥¥½|ùÆImmíòåËñVçùóç¯_¿†3¤d2ùþýû¬B&“ûúúlll€‚ øÄÅÅÙlöœ9sÊËËß½{'((ˆLNxxx\\ ¿¨©©©¨¨¼~ý:&&2Ü›››mmmñZ™¢££ãÉ“'UUUÑÑÑÈäTVV>~ü&‚ÂÂB‡"’¨'EFF‚(CMMÍòåË•””bccccca>jmmµ³³C»AAAîîî0l˜L惀Hx5-ZTWW÷èÑ#PV3f ‡Ã™6mZaaaZZZtt4Þ¨ó06MMM^^^ÑÑÑÈä44ß—¦OŸþúõë7n >,))©££óþýû—/_Â\_WW·bÅŠþJŽpÓ}ûöYXX ÂMŸ>}jkk MÿôéÓòòò·oß"““‘‘áíí=cÆ ø—B¡àMÎû÷¢PwZ±b…‚‚BVVÒE Ÿ6m29÷îÝÛ½{÷÷49>LNN‹µzõj¼q µ\ 6›={öìÒÒÒ'Ož€å.))áp8&LÈÌÌÌËË{øð¡­­í¿nrbbbjkk}||îܹƒæÃ½{÷š™™ÛD&“ñ&§­­-88´KÄÄÄØl6jÜïar:;;i4ZUU¾099¹®®îÂ… †:u*::ZOOïÑ£GÚÚÚ¿þú+†aNNNšššx““ŸŸ¿gÏØrÐÐÐX±b™LÞ½{7LÜíííçÏŸ·±±©©©¹ÿ>øh —/_ž3gN§ÑhŸ?ÖÖÖÆ?†µµõöíÛñ%ׯ__¿~½¹¹9†a¾¾¾ ã‹&‡ÉdÒh4˜\²²²h4š¿¿?†aþþþ¡¡¡x“¦¦¦vøða Ã6nܨ®®®¤¤tñâŽ{÷NŸ>Ü·¹sç‚ɹwïÞ_ý…2î;::Ξ= ë³¼¼<77·E‹µ··“ÉdxŸ¡¡¡Ó¦Mkhh ÑhÕÕÕCYâTVVröðð:>mÚ´+VÔ××ûûûƒJNN>sæ Þä466ª©©íÞ½ðӧOGEEééé…††¢f½{÷nKK‹¢¢â… 8¦bêÔ©æææ"""ÙÙÙpºÿ T*ê…PXXøæÍX~eddÅä”””äççsÚ8räHll,t*YYY¼Éijjº~ý:ù¤¦¦ž8qÂÜÜ<;;;33óöíÛЬ=“C£Ñ·¸}û¶µµõ’%KÀéžt'GGG…;v BDD1ž|ÿSç{÷îýøñ#??gg§¾¾>ÞäTTT„……û}ãÆÙ³g¿ÿµÂùóç_¼x1a„ªª*†×~þQ\\üñãÇþžN:Å%莚¸­­ j”˜˜èëëû]MŽªªªO||¼ŸŸ*?~|UUÕÕ«Wá_ ¡â={ö`vÿþý¶¶6[[[|PâÆBBBÐ „¡¡¡¡¡aÿþ—’’×133ƒ@àéÓ§UUUöööCÙT3fŒONNê÷PëqãÆAÛÛÛ‘ËÆVVViiiàVÏŸ?Ö~ýõ×ììì»wïòø­††8×¥¥¥åååïš9sæÌ™3ÿøã¡Ð2zxx`¡9WWWh56›½nݺ/^¦þ¬¬¬ääd‡ƒ”`þ ÌÍÍñºA\8vì41×"^£””ÞW-++{ùò¥––L^_„‹‹ L¬øB‡pù7nÜøÅ‹¨ªªª««Ãóttt fŠŠøâöþÞ½{á»wïÚÙÙAÞ§OGGÇPN NžnÜ8›äädXCÐétýdýúõð õõõÁÁÁà3–••…††¶··777s8üJë« ##ƒ¤¹ToÅÄĬ¬¬à=þüyÀf…-(}266†-.€……Eaa!DK¸–ø·oß.//?tèÐ7LmŠ÷îÝÒ¥Kõõõ¿ö·íííþþþ$éçŸÆ0ŒŸŸ_DDêH¡PÀÕ××ÿüù3¾zõ D­æÌ™“ŸŸ¯öê†Àûà„¦¦¦©©)Ü‹N§s8 çææ†œ}Ô¬999(°),,7cÆŒY³fáMÎÊ•+CCCaà _Á[·nÕÖÖîÞ½¿¿ý7÷þýûÅ‹ãwž‡îøùùá{rYYÙÛ·oQ`-,,lÁ‚S¦L™2e |áĉIIIFFFÀº ‘èÆ!!!hæììŒOÓÀ¢OŸ>ÍåãñÓO?¡F÷óó‹ŽŽÆ›p™w™KpäêÕ«W®\›^¹r¥¹¹ùàÁƒ?þ)CCC‡Ýu(G# %;›ÍVPPè?*((;v kÖÖÖÿ²ÉnÞ¼¹lÙ2®NL$÷íÛ×ß7‡u:ìå vÁ7oÞP(”þÛvvvªªª<ž„ÍfƒÉù;‚`xx,Å.^¼¸dÉ’óçÏôuúôi¨¬¨¨(Tör0 +// ÒÒÒêŸ!ƒaØwc^ßÀù IDATú믿êêêP‚¥¥%WÒ†a(ºÂC§ ³³Óßß¼o®@âªU«x< h3ÿÍê3Þ3ìå ø”””„„6›ýöíÛ÷ïßNž<ööÑZå_ݸq£¹¹ÙÍÍíʺÄÅÅ¥¥¥YXXôÃ_Dww÷ŸþI¥R!r™™™ÍÍÍýÑXYYá!ùþ*·Ã@AAAQQJ@íÅ‹ƒáá “âáëë»zõj‡Ãb±|||`‹ñÇÄĉaqsþüùÿ ËþŸþ¹iÓ¦O‰655=yòdˆêkrüýýMMMô›ðhhh ãáC!$&&ŠŠŠeç™ {öìù›GA£¢¢$%%¿¸°Û¹s'^aübƒqõêU® oEEEZZÚ/¿ü2X(ãûô¬¬¬ìììþ&§?îÞ½kff†²ÃT¶¿Éù"æÎû7‚Òéôû÷ïƒE罤C¾6‰D¢P(}ôè‘®®.pMâûð;wÿø;!5EEE|ÎôW™œÛ·oÃRŒ7h4ZII —Éyþüùرcñ !î«}ÑäDFFfr^¼x!''×3éæÍ›K–,A›¯»wïF1Ér?&>|øðùóg´'÷_Á¥K—Ö­[7 Éinnö÷÷ÿ±LÎäÉ“ëëëÁ……}W++«7oÞ@¡¾¾> ×›7oΟ?_EEÅÝÝ=00†÷Î;¡ªG…ï£å¨B!???r¥ûÃÜÜ<66¾©¢¢ƒvíÚµà·ÂópÅ÷‡ŽñãÇëééÁÅ………Áwxîܹ"""¯^½zòä †aººº09nذáÕ«W°lgg'%%µaÃtÁ“'OÂÌK$Éd2\™L&£9ñãÇhvÒ¤Iß$¼vìØ1H«#‰`Ϥ¤¤ìììàF ž0777''ÇÖÖÖØØ¸®®5+Ä»ðͪ§§Í*!!áïïy k×®ìü“ˆˆÈæÍ›Qe·nÝŠa˜ººº‰‰  ¸°"öíÛwáÂpÌ= ³ðü™¾¾>TS?ãÇ×××Ç7«‘‘:ÓØØ¨¢¢§‘ÄÄÄ=zë¼yóÐNعsçÐfÑ#G¾ÉvγgÏÐn“½½½žžž““S||üË—/1 [µjÕ`R¾†utt n#//ÿóÏ?«ªªšššB¡   ¬&§NÚÔÔ…bbb '**úâÅ ÈG˜4iÒ`ÑK.}¢R©²²²`¼´´´jjj¨Tª¶¶6˜RƒÑÓÓ£¦¦†oÖ3f f=S|³jkkCb7•Jµ··Ç;þPSxÃd2YOO*«¦¦ÖELLLQQ±©©‰J¥rG%‘HÕÕÕaÀ¼qqq]]]tðh„ 555"""T*ÕÕÕ•@ °ÙìÊÊJ~~~mmm¨©¦¦&8ݨYŒŒ¸tP„……544P4hYR©ÔåË—Ãû—@Í4qâDØi€§l'†¯£££¡¡⽂‚‚ªªªèü€°°0mmm*•ª¥¥…ïKx‹>fÌCCCØT'øn#++;~üxQQQee寯F*•j``3 ŒŒŒ¸¸xgg'•J5ktE4`­¬¬P—ëIIItS>>¾‰'‰ÄÜÜ\p¶`ì ã!)))##ÓÚÚJ¥R§L™gQétºœœÜÝÅÀÅÅÅõôôúï„1cÆ|‡=y~~~¦­­=eÊ”òòrqqqiiiggg ÃX,V}}ýO?ý$,,eXÀ¶mÛ ¸bÑÀà„˜›››™™oòòòà‘Ð|…¯oÿÇÿ:¶mÛâ„\ÇÌÌlÁ‚@Ìo‚AW9999›6mêììÄóM…‡‡gdd\¹rðˆˆˆ;wî¬_¿þܹsBBBPxåÊ>>>üéîuëÖ999Á)n[[Û°°0X÷!ã!Tyyy¸ÌÂÏž=Ã0¬¥¥E^^ôB0 ßæ=þü… ~ûí7øwË–-ÀBa˜‹‹ËP(öªªªV­ZÅd2ñÛ!‰‰‰aaað$ çÏŸl4GÉdøÔÏÏoöìÙ;vì˜;w.Ø­}ûöýñÇJJJK–,9zô¨°°0‡Ã133KHHhmm]·nü¶²²rÆ ·nÝÊÌ̼víå¡C‡ÌÌÌÐ;¿zõ*^@¬?6lØPPPPRRrüøqThffvùòeÐÙÙ¹dÉ’§OŸVTTìÛ·nTTT´cÇ___ôýˆˆˆôôtøôéӧЬUUU ,°±±ïÀ±²;w" ¬5kÖÀ$˜››{ÿþ} ¼Ä‡.«ªª–/_ŽÒf´µµQ¿|ù’·Dž={’““ËËËñÂ?666û÷ïîƒ9sæà傪««=<<àFÅÅÅîîî.\xûöí£G ðõë×çÎóðð¸sçN}}=Þ»wH$Z[[=zTKKËÞÞðӧOïÞ½[OOÏÑÑqãÆ@Ý¿råÊ'Ož žo6¹/^?~œN§ãOP^¼x‘H$ÂE®_¿ÎÇÇ7gΜ]»v™ššnÚ´ ðœ9sFEEÅÚÚº¡¡ÄLá·ííík×®…ßVWW;99ݾ}»££ƒB¡ f…—– ß|üøñ½{÷Ö®]{öìÙ°°°êêj§nmllêêꊊŠÐM;::ììì §¬¬lÍš5ÝÝÝx9ƒ––999àâ­†ùøøˆŠŠÂ“\ºt‰oúôénnn–––`·ÜÝݯ\¹"''—““ ~ô÷L1577÷ññ!“ÉL&ÓŸmTXXxòäIxø¬¬¬œþÌCšÝ»woݺQoŠ‹‹ÇûX\ì–½½½¨7B ¶···µµ¡fÉí¥K—r8xÕ===°¯ªª266†o644€ïRZZª¨¨bz%%%0 ÃwZ[[·oß΃TðY³fãE+ìííI$†ŽŽX<}þüYJJ ®\]] }É××·¯¯/D/,,|åÊàŒ!hmÞ0Nïíí…°°0°ëׯ·±±AžÜ€8þ<‹Å¯ÑÙl6r–ÇŽ››‹f(£P[[‹[[[;::Àt[†ahZ[[ûûçajkkƒ*(RÃtww×ÕÕ¡ç„™¸¸84ßýû÷’ØÎÎ5kggç`[èßû÷ïïêêêO•¦¥¥5`Ú…B:~øðáÕ«Wƒ ¼þM êD¨««sm@­X±BMMÍÀÀÀÀÀ€Ãá ˜ ())Q(KKKƒ'Ož€/Ìb±à"ý]€®®.XÜÀ¿Ïž=ƒož9s}§©©‰L&sÍqȳ–’’ÊN ™L%i®xÔ‚ àŽ………û÷ïÞkUUUåãã311144)°a€N§Þ9iÀ€Ç•l“––fhhh```eeûʼn‰‰IKKôõõ¡ùÝËË ^HðâQQQ!''‡î;cÆ <#‹Åª®®P ®££ƒÁ` 1ñA^^^]]+vµjÕ*x¶ÔÔÔá½^*•*))éëëk`` ¦¦6<—¾¾¾ÊÊJÞYv¢¢¢êêê\éCcÆŒ‰éÈ‘#³fÍ õÁú’ºº:Þß'‰`o>þ¼gÏž‡ByJJ ¼±µµ•——‡B …³´´´ºº:o!®›Šˆˆ @…BQWWïϧòüùs¸×©S§¸>:xð`vv6|jee£ƒÁÄÄÄÀÀ¯ÿ#£¥¥…Ífƒï‚šõèÑ£3fÌàŠ\}gŒ;V]]½ÿy£™3gð`1ïîî¦ÓéÃ&Gæ*g°AEEL@wîÜyðàÁPä0 »{÷.‹ÅZ¶lYLLŒˆˆH^^¨¡Ðéô¹sç¢}‘>øúúÞºu þ]´hQzz: Iƒx†¯¯/•J]·n]7ÙÙÙÙÃÃc‚WïÞ½{óæ T0""âÊ•+xöÜ_~ùå÷ßG ¥¥‚N·nÝÚ²e 0sižGDD°Ùì… &ä>eÊ'''¸ è¡¡®]»Æáp†øzû‡àAv¬½½ÝÎÎ:ç+V˜››ß½{÷þýû[¶l9tè *;vŒD"!ÿ`õêÕÞÞÞH;9)) 6›=qâDÖÔÔdoo n5±±±ÑÑÑ_µ‘ÓW¯^Ýbsss|ʦ¢¢â¥K—à•öôôüôÓO†Í;­r ÄÍ7nµÖ/^àåî¹ÚÑÎÎ|[´ nì¢E‹¸TÀ¿ žžžãÆ[µjÕ0Î!ÖÔÔlذ!((Œ™±±1Fƒâãã÷ïßêÔ©§OŸÖ××C¾uëVHHȰ©é;;;W¯^ ÄÉÂÂÂÖG9s©A QGGÄoŽ9"''7{ö쀀WWWØ¥khh@†ºSoo¯±±1ºæ‰û÷ï×ÖÖâk ͪªªºzõêðxéÛ·o!ÔÄáp&L˜ÐjÊÉÉ9{ö,èþû&§««‹ÅbÉÉÉ¡^8Ĩhll„΄BÀD"u5èdÀgŒVZè^|||ííí/^ìééqww°-étºˆˆÈ`ùõššš`ç$%%[ytwwwwwÃM9•Ë]ýõ×_¡{¡Mx*•zãÆ ˆ pm<ÊÈÈp8.Ùi®•¬……¨Ä?}úžÑR`ØÇ¼ëêêdee ???þõò†ÐÍB³ŠŠŠBÀ½ü*S\\f šÈ寫«kkk³°°xõê•„„D“ÓÝÝÍd2Óž9~ü8Zµüù矃©¯744Œ3î˵×ÅÇÇ7iÒ$HvÈÈÈ€à??¿ ¬$(çp8ƒ XGGÇääd´‚„"8ト­$‰+ÀÞÖÖ¦¢¢_èêꂬIII %FqrÔ˜L&ïÌð†ÑHfUPPX³fÍ™uº+›Íðõööö¶··¦Kò½MÎ0°`Á‚+W® ùÀ¸qㆲ{üôéÓØØX×D6ïìÙ³ çÌd2ïÝ»7tåÛeçtš—ñ"ӨáÌFFF±±±C9§ úˆÿ·záƒrssñ ÐÐÐpttüâÏ ß¼yƒâœ§¤¤D__ºuww7¤0 åIöîÝ‹ŽÛCäããƒWнR((D,î.\`±XC¹&šÙ¿Õ†öñãÇeddÖ¯_?Œˆ­­­æææIIIxÎÿÔÔÔóçÏ?xð`síÚ5”ø7l¥ígÏžEGGÃØ:P¡±£¯¯Ÿššú ¿¿'Nœ8!--íääôÃ,4iR||ü·Õü*üã ! £¿Æí€ÞVvvöáÇÃÃÃQ ‹ÅâbÉÞµkWEEEIIIIIÉÚµk½½½—-[­Y³fûöí<ÔBEþ‡aOîGŽAA?„Õ«W#Åb|‡¢£œ””4  ã•+W:;;÷ìÙó}:Aoooÿ\X&“9 *Æ’%K¼½½!`5`kŠ‹‹×ÖÖBEEEéêꆅ…¡¨Úǯ]»6Ø“ðóó£fB«¨¯Byy9¬ñˆŠŠê¿ïØÛÛ‹O;æÙ³gs¥,CÔÎÀÀ€‡¦2oYÙð&&‡Ã`0¸&å¾¾¾¡PÊAAAôÚ‡mSY,Œê±lÙ²ŒŒŒáEEE(AšÄØgæýzóòòöïß?Dñ19?òׯ_¯££#+++++K$AVÙÛÛ;// W¬XÁ¥åË—C˜èíÛ·NNNðijj*85UUUP2wî\| žëv666óæÍƒoVWW{zz‚àøB&“¿vÃ5ì---mllàŽùùùÞÞÞ†?ÞÇÇ–ÌEEEðé’%K@è,88øÔ©SPxëÖ-XϘ˜˜ÈÊÊÊËËCöä˜1câââàkÛ¶mƒØ3flݺ ccc!Ã9}C'}âªxmm­¼¼¼¬¬¬‰‰ ̉êêê·nÝ‚>}Ž¡¼xñöŠÖ­[7~üxøÃ0¸{{{çççC¡ þ„‰DÂßîãÇFFF²²²JJJtÇÕFø7L$‡aKH$¾¡³³³çÎ Ïœlíííò«¢¢rçÎøèøñãK¶páBkkk(ÌË˃fݵk‘H„Bв»qãÆãÇ¡ðàÁƒ :þúõkGGG(LOOÇo¼}rájP‰täÈÙÿyhhè¹sç äÚµkx^®&niiA¿ééÓ§{xx@Idd$‹Ù¸q£ŠŠ  mß¾}°W:Xà¿áÊãâ­Ë–-[°`Ü«¢¢&âÓ§OClóÌ™3>|€Oííía_ýÉ“'¿þú+C²Iii©¾¾¾¬¬¬††Wjå? àÄ’••Õ×ׇLee%ÍM˜0áäÉ“ðœwîÜÁŸp"‰<š•w*ã÷×h-,,œ:uª¬¬¬‚‚ækjj§ Ûê”;*Ñö_ĨDÛQ‰¶ÿF%Ú¾ØñmCÏ$íìì•hÅ(F1ŠQü;59£Å(F1Šï„A£ê#FÍ _£XC51Í„’ Gkôƒ×hDN#©™¾mˆDbÿü¯ÄäôgKüïŽïõõõ“ÓÞÞÎb±Ølöˆi&ƒÑÝÝ-((8bjÔ××ÙA#i(@äHªQkk+›ÍIC©£££··÷[u¼¾¾¾¯MDŽÉiiiùr-¾áj ¯¯/""bĘ"‘ØÖÖ–˜˜8¼LâÓ)ƒÃ˜CgÿñyÃ#i(aÖÙÙ9Â&‡îîîÈÈÈ‘´íèèhnnþV‰g222\+¿½É‘ykÖÖÖ£k?,F3Öþsd¬Y[[˜É2Ö,--G3ÖëÆx‰¶o`ã±QŒb£Å(¾ ¾–iii©©©Á’×ÔÔÀ9)%%%De_RRutt¸t20 ËÌÌ„˜É”)Sðk=‹E£Ñà´,ØAKBB·766â©é²·¬¬ ÂÑ-ø4//N§cf``€§<úb” ¤¤ÏŠn*''×9YZZ _[[ˆãrssñT“&MÂÓ¿{÷N“aÖÓÓÜnÂÂÂèìUKKKnn.†aÒÒÒHs¡ººéUTT†âªdffêêêâb€dŒD"M:J Ð>Š‹‹ëééq]aÀfIJJ""äììl žC5}ÿþ=¢þl ØL&2â+K§ÓÃ_Ù¡ ;;[UU߬iiiÀ0}út®ÅkWWWff&8°À»ÓÜÜœŸŸ¾ //8I1 ûôé“€€âÍ-((j8===Ä ‚úðÔ©S!˜Éáp€—ŒB¡ >Ì555ÝÝÝjjjýû’––b¾ÊÉÉz4CCC}úPšõ;™œ¶¶¶ŒŒŒ>¤¤¤¡©0$$ÔÕ¦L™boo¯¢¢òñãÇ€€€œœ Ã-ZdccƒËiiiW¯^càââ²`Á±}}}/_¾Ü½{7ÌïÏŸ?‡)))mܸÑÀÀ 11ñàÁƒÈàÙØØ8::~úôéÞ½{0§Ì›7oåÊ•²²²9997oÞq”Õ«W[YYñæf‡‰ ¤SÃccããÇ###aÆqttÄŸ/.. ÌÊÊÂ0ÌÂÂÂÆÆFZZúðáí­­ˆNíÒ¥KÈä¼yófåÊ•À×ÛÛ |9cƌټy³±±qKKKxx8pühii999éèèTVV¿}ûðiÓ¦ÙÙÙ (HOOooowwwþü9¢Ðýú5ñóó»»»OŸ>½««+22òÞ½{0¸ººN˜0?s5+š÷ïßïìì ÄBýõ×õë×aîpppX´h‘  àÚµkÇÍJ¡P‚‚‚zzz¢££A'QJJjóæÍFFFt:=<<¶ÙáCh IDAT´µµÉb(¦©©éðáþ¾¾è Ú»wï.]º[ÙL&/qùÀÀ@0-®®®†††©©©;vì@†ÖÒÒ™œÒÒÒcÇŽÍœ9$òòòüýýaš^¾|ùÒ¥KÅÄÄÒÒÒ®\¹Ž…««ë‚ øøøâââ€-BXXxÛ¶mȱèÚÚÚüüüÈÈH …‚ˆìJJJÇwÁ‚+V¬––þðáÃÍ›7²zÍš5–––BBBÉÉÉL&ÓÁÁ¡¤¤¼ ‹}óæM Ã$%%·lÙ}‰F£effÒh4¨>´¢*--ݰa" ÈÏÏß»wïÖ­[äN}÷î]ww·££ãÇ¡?³X¬÷ïß›šš‚û’ššZ\\ƒ¦à°°0`­ž0a‚ƒƒÞc‹EßÌÉɹxñâ‚ h4Úõë×Á[utt\´h‘€€€½½½¾¾>éün&'11ñÏ?ÿìëë#“ÉîîîxÉöööôôô¼¼¼˜˜$ ›——‡åÊËËW®\yàÀ[·n½|ù¹‰{öìùM·š››ùå—ëׯ#¯:))éâÅ‹°cÇ|Ô5ë£Gð ußÉäÔÖÖúùù566â_Ù«W¯ªªª€2ëÔ©S=Úµk×Í›7µµµßÂÉÉIQQO¨âååº;™™™bbbçåË—x)늊ŠK—.Á¬—püøq`ž={6—¢íýû÷ÅÄÄàÜÝÝ_¿~ \úëׯªàùóçÿôÓO_´Òmmm~~~\|·ïß¿ONN†‹ûûûß¼yÈQþþþjjjžžž†mܸqìØ±ÀysüøñþþB\\Ü­[·PÒH[[Û¾}ûÀÇÏËËsss‹ÏÉɉˆˆ€Û%%%ÅÇÇëèè¼xñ‚N§C¡——Wxx8Ñɰ°°ÒÒRü2 Ã0[[Ûššh›6mZAAAuuµxåÉÉÉžžžxéåüü|QQQ¸ãéÓ§CCCó&//ïÁƒxWîèÑ£€Y`êÔ©“&Má–ÀÀ@<‡fkkëÀ ÉÎÎöððˆ‰‰ÉÊÊzñâÜ%88øÒ¥KCÑ€ŠŒŒ¤Ñh\¡äM›6ÅÆÆÂ>–¬¬,ž«»®®ÎÛÛV©©©GŽ#7}úôþ|ìÅÅÅÁÁÁYYYh~ùã?¬­­AœÉÊÊJ[[{òäÉ;wî¼sçð+»¸¸Ì™3‡oÍš5pßÚÚZú°˜ðóóûüù3Þ4¾{÷nêÔ© ¡¹iÓ&yyykkk//¯;v€–ÌÌ™3'L˜ ©©@§Óñtp’o²  `óæÍ¯_¿®©©ñóókhhÀËœXXX€4xIIIpp04ö?!×þÄqMMMø›2 gggø N÷óóƒÕBrr2Fƒ§ŠŒŒLIIÁ›WWW0êYYY÷î݃Y%""ÂÃü:ccccccð®îß¿ÿýYn×®]ûñãGhCœ7ÈõóóknnÆ?¨5ƒ½ A^ÚÆ‡§9òÍñôéÓœœ.&û 6¤¦¦JHHp8œuëÖáMNKKKÿfý~&GKK+(((>>ÞÏÏ*++———ƒJ4˜/Þ”Qâââ †™™Öúúú6mÚ”››‹Â>ƒ¡²²n§¦¦†§’üû•• ÊÉÉA2L“——‡;¶¶¶ö@ ˆäääææf0(øãââ’à †ººº´´´±cÇnݺõkk÷\KKËgÏž&“ÉCû ¦ÂÒÒRÐ1B »7nLš4‰·šàåË—BBBa0¹aTò¸.;oÞ¼7oÞ€Ë? Rý€q-hVeeeäñàñŸ966¶««ëòåËx污`öìÙ³gϾ~ý:^d‰½~øðAFF†‡(oâUà„……aTvvvfddÀÊcüøñAAA¯^½ºsç΀® ™L^ºt)ü{õêÕY³fñ؆2Q¤E‚c AAA™™™‡âúaEEŇÔÔÔk___›I“&Á€¶¶¶)S¦ ð@dd¤€€‘HÄ3ûý‹PSS JNNÆ E"<þ¼³³sÕªUh =mâĉø0æ÷ÇáÇ1 pˆŒŒìëëÓÅAü#((ˆF£8pà_ÛËႪª*FYSSS[[{ˆ?ŒŽŽnhh077‡ðKxxøP’^eeeávjjjGOOOWWVôà_À„hbbRRRK˜ý‡yyy¸£ŠŠ ^ˆv‰ª««áÖýÀ0lÖ¬Y¹¹¹°UÐÔÔ´bÅ ‘/^,\¸ŸÁÌÏÏ?gή߂½ KOO;v,‡Ã122RWWohh@>,ˆÍ`Xºtixx8‡Ã¡P(CÏ<,))yüø±¦¦&ì²|øðABBBUUõ‹ oHŽ@ °X,kkk~~~333¨bf„TK(¶R*`áÂ…OŸ>…àW…„„¦M›wAùÖòòòŠŠŠÐ¬ÊÊÊ N]mmm$qÅŠŠ ø9^p/:::??ŸÁ`ttt¬\¹’D"-]º¾ÆµÄü*Ðh´ððp++«)S¦|ío FXXXQQ‘——ïo±Ùlä±ýõ×_cÆŒá­d2ù‹ÖýóçÏaaaYYYªªªl6»¤ú9—ÖpBBByy¹™™pc[YYAŽH$²X,d&L”––vuu!ßT__ÿåË—ÐÓ>}ú´|ùò×ê ¶úILLd³Ù ›ùïþu&çÍ›7µµµD>uêÔóçχhu <¥¡¡aiiùäɓׯ__¾|ù‹cuòäÉÈ¿råJhh¨žžžÍãÇ!dŒvê~þùç‹/¾zõ BX^ éõ‚`×`S@zz:DüüýýÔb(ÊßÇÇ›››ñAΰ°°ªª*ÈÀ)--}óæ‘‘Ñ`~qppð²e˸ÂMT** {9PøÓO?Aappð€‹§òòr¤T¨­­=˜Éá 999¸Kjjê‰' ÚSZZŠ[ÇÄĤ§§ËÉÉݽ{7//¯®®ÎÌÌ "Š›6mB«7ô}OOO®TL‰w½œ¯}ÈŒŒŒ—/_Λ7o.EOOϽ{÷***À²~BBBšššŠ‹‹‹‹‹ËÊÊ óòò0™™Ù€&g(˜2eÊP4ý¢¢¢&MšÄ%« LÕÿÑ3ÎBBBøß>>> åÛÒØü@&çÔ©S:::x“ãääË ÆCäŠF£EEEq™œŒŒ 2™ŒOk†y_GG‡w¬àܹsó(hJJŠ˜˜×YÅË—/ïÝ»orìììPÔžÍfCe»»»ÃÂÂÖ¬YóŻ俿vtt|q—ëâÝ»wÙÙÙø;N:5!!¤ŒZZZ>þ<ØÚðC‡YXXàMNWWד'Oìííñ_«®®ÎÎÎæ=;ÛØØüÍ£ íííQQQ+W®Äæää<|øorôõõËËË¡‚L&â±ñññjjjø=ŒÁàïïïìì<ìç|ò䉢¢b5¹!†ÔNŸ>??À999L&égO›6-11*ÞÚÚZ^^ÞÞÞŽ ‰‰‰cÇŽÅïnþù矞žž\&çÀVVVÿ “SXXØÒÒ‚_¤†‡‡+((üà&çßÅ×µ«®®nUUÕåË—á_X Ïœ93?? 544`¸†‡‡O:UNNÎÖÖ622"ööö åäÉ“ðó–––¨¨(Ø”””œ3g\„Éd‚ƒ©¡¡‘——…àÒéôÌÌLÈ!–““ƒ‡ºººììlØOž5kÖ°ÕÔÔÔÕÕáŽ`í2228ޱ±qsssbbbBB|N,]ºôýû÷p¢ÈÜÜ\BBJ€»wïB}ÙlvAA\¹··VßcÇŽ0avuuÁ6~[[[BB¨%’Éd¼zÒ±yófpÀÙl¶““,°ÌÍÍáF===¬(---))177×ÕÕ­¬¬„Oa?ÉÌÌ mªoÞ¼yÑ¢E°°téÒ””ÈP·°°wØÙÙ9 Ì9,úúúP—èíí…UlWW×û÷ï!å‰Á`pí“}ƒƒƒá¼äAãïììÌb±²³³a©ÔÓÓ[†ªªªøf…-}´*UQQ‹[__Ÿ™™ ûØS¦LOÂÖÖöÅ‹0 ®Y³R`Š‹‹á‚}}}(à«ðöí[”иpáBÙ¥§§ƒ=˜?>!sƒ†¡””ÔêÕ«yLô Yú¥K—¢PÕ† V¬X1”Tu Ã( ô¥Á ¡¡¡¬¬ŒF+äp¾ÿžD"ÁD:mÚ4|^¶lYRRlì-^¼Ro6lØpûömÀápúk¹þspqq¹qãÜwÆ à¾<}ú”‡›˜ššZWW‡Wï>}zVV¼eeå¡$X}g899ÂØÑÚÕÕ …ß||||‡f2™½½½EEEjjj=== °IÃf³EEEQLVAAŸŸÿÇ cÆŒ#¨¥¥E§Ó‹‹‹ ÆÊ•+ÁKMMMUQQŸ:ujzzzcc#ƒÁØ¿?þ˜$ÏA×ÖÑÑyóæ ƒÁPPPX·n„éÅÅÅ333 †±±1 ›qãÆ1ŒÂÂBƒaeeçà JKK+++ †‹‹ ×þ¤€€@ZZšAÿU‡Ã!“ÉÈ”–––’’JKKc0&LËWRRÒÓÓ£ªªª©©ÙÚÚúñãGƒ±|ùrØ3œ8q"d!3ŒmÛ¶q¹lL&ŠÈd²±±qll,ƒÁÛ¶mDŸSRR †––LÍJJJ$);;›Á`Ìž={À„1 …RPP ++ Y›===S¦LAGAçÌ™óâÅ 8¶_BBB?ýôÓëׯ †œœ¸çµµµºººcÇŽ€f>}:—1èííÕÖÖ†zMš4)//¯¦¦†Á`üüóÏkš5kV\\\[[[WWä Q(###¨¬„„Ä–-[À«;vljj*ƒÁ?~üòå˹âTÕÕÕë¢PÒ„ PÀgÆŒoÞ¼iiia0žžž¶?cÆ AAA}}ý„„ƒ!##ñO|³à#f†±X,tFROO¯²²²¼¼œÁ`¬_¿òĦNš––}ø—_~÷lfföòåKƒÁÇÇ7 d8_GGGCC8a}}}²²²(o˜Åb1p€7lhhXTT}iëÖ­x6#&“9sæL˜)8NWWú-‰DB'–Øl¶˜˜>Ó²¯¯ONNnÀÌÉÞÞ^þ“Éœ1c‘!‘H¦¦¦D"177Æ8›ÍæççGQedd$$$222 †‘‘$gCæHY,–†††œœº¾‘‘Qnnnmm-ƒÁpww‡C©¦¦¦±±±íííL&ó×_ý§g@~~~¦­­=oÞ¼èè莎‹~pwwwJJ Zý³Ùl!!!üæn__Ÿ´´4þ螆†F{{{QQƒÁ°¶¶þçTòvŠ‹‹©T*Œ—žžž‰'¢sгfÍŠ‡Ñ ç=z{{Q€—Ãáà›•ÃátttÉä¶¶¶ÞÞ^®Ù•÷»ííí¥P(===çÝ»w‰‰‰£ª ÿIŒr¬ýøUýO`Tô‹ÝxTt£Å(FñŸÄ¨ÉÅ(F1ŠQ|' œ>@$ñ›.# €a˜  àHÒËÁ0ŒŸŸÄ4lΓÉäS#h#‰4bjD zzzÂÈ›ð¬¸ÿiÀÞÛ·š@Oè79@Eݸqcww78ß NNN½½½ˆ¡¸¸úÒĉÑ|ãÆ Ã–,YÔ‹ÿqãÆý 籎=êììÜŸÃÉÉɉëõ¢˜0a¾}û¾ŸÉ)**:|øpSS~"‹‰‰INNÞ‹ÌḬ̀°°åË—ûûûwtt@á£GˆD"þ¬Ðž={LLL€cÍÍÍíêÕ«BBBëׯ†ÍÖÖV &¬¬¬ˆˆàãã›2eÊ‚ Рݽ{wgg'<ØÉ“'an‚Ì¥öövø-Hõy{{çææÞ¾} KJJ._¾¼mÛ¶ÈÈÈŒŒ (LKK#<ŽåþòË/¥¥¥IIIx·5kÖÀc3™L F®©©ñòò‚kÖÖÖzyyáÏuÇÆÆ&%%q5ë”)SÐpîÜ9`þí·ßƶÖÓÓÓËËKVVÖÅÅÅÆÆ†B¡p8‡ÀÀÀÖÖÖ={öÀ›šš<øûï¿ËËË#Æ”ÄÄDÄÍ'OžzoŸŸóæM(,--½xñâÏ?ÿõþý{(LOO'ÖÖÖ7nÜ`2™PD$ñRÖ€­[·655ÅÇǃ;Õܱc¬WUUyxx´¶¶â5ªkjj@ þåšãrss•””Ѐ˜ÏÑ£Gµ´´€hîðáÃ'Ož”––Þ°aêU«H$›Í^¿~ý€ò?ÿÖ¯_¿fÍPLذaø>}útþüyxcŸ?>{öìž={^¿~…>|^½zu```DDD~~>¸wÿ.¼¼¼²³³ß¿ßÿ讣£#iEGÃ$77HžŸÉWý¯¿þz÷î*¬ªªêììÍŸÌÌ̲²2 à µµµ¡ðÞ½{ øëØÛÛ?”0¶nÝ ªæ@“ÜÑѱiÓ&p$%%]\\`îNHHxñâ†ašššŽŽŽÀU\\ Þ‰‰ 0xFDD€ˆb¡8xðàž={¸tׄ¸¸¸››[YYrÌ1 khh¨««ƒºTVVr1'!|D^ˆ‰}×®]žžžÈñ733uw€€€À–-[€0//¤Nétzyy9\°µµ5>>Ã0mmm`(IIIÁëzõÇêÕ«-_wïÞ=/ŒÁ`dggÊÉž"èêꪨ¨À‚F£}úô Ã0mmm =:wîœ Ð~,[¶ xŒ`ŽÞþ7Nž<™D"õõõA—ܼy3T6;;51Ô4))©··ÏÎK–,™>}:—Xbb¢§§'ìcqñ›uuu}øðhùSSSa#-- ·Žåçç:% ÃÆÇ%`µ`Á`Çó2)))[·n…÷³eËèÃnnnÀET[[‹<ý¡££ãææ]aÆŒüüüÀ²F£™ššÂe;”ENNNL&Ÿ$ÆÏÏ¿eË0ü`íètzYYTçñãǰ~ª¬¬ìîî†BMMMXæççOœ8 ïܹƒ—ÂÏ¿L&/ëÀb±Þ¼yS©T77·?]:‚¼¼<I@]]]®OÓÓÓ­¬¬@ äÀŒëââ2uêT>>>&“9ôuðßG||üµk×@”‹ç´­­­¨¨>::ˆ555­­­P¨££tyÓ§OWRRâ2þ·`mmmjjÚqppprr‚µ ÕÉÏψˆ€UÝ÷39bbb³gÏf³Ùx“caaÑÚÚ ú+¦¦¦¶¶¶_¼X‘ 6€²5^É•ÅbeddÀ\&$$dddTXXèáᡦ¦‘.iiiii騨(__ß©S§×xO~~~áááK–,á"û믿@$í‹& 0{öì1cÆàMމ‰IMM TÐÈÈÈÁ†ˆÌÌLWWW”Ýakk i—0×Éd“ºº:ggg|‚ H`ãÞ½{‚‚‚\\d\ƒÇ•R¤œ‚‚‚ ã ¤|üøñõë×MMMñÁ˜Ô-Ztj@à½sçNXÃ2æ¾eË–±X,§¢P(ð&7nÜ(++‹uÐB¤¹¹V_,^ñLä0Qº¹¹Á‚’Ë|òFmmmGG ÐÝ»w´Ï·nÝ KIˆ¤yzz¾ÿ~ݺu<(/Á0´µµmß¾/©Þ²²²²²²EEEøÁHÏÎ;7yòäþ ø>‰ýïÜÒÿ´$¼óêêê“'O~QÏ;$$ÄßßßÑÑ‘‹Û›úßTXXøþýûð·àr™œ¸¸8;ÖÖÖýŘ}}}ƒ‚‚ÀYé/ÜŽq8œ•+W†††þà;Ïž=»|ùòªU« ®0nܸqãÆ…‡‡ÿÏ£µ¿ERRÒµk×xäRµµµ•——ÿCq_—Š âóúõë¡°ñà €ÉdþöÛo&&&`uº»»CBBð_STTôòò*..¥˜ú½¼¼Þ¾}…¼KKKccãÐÐÐ> œ½{÷nذaˆÌ¸¢   77*˜’’òüùs¼¿³uëV???¸Ý§OŸð¢;îîî»víBÁ„àààÞÞ^ø{Ñ¢Eh +!!áååU[[{åÊÄ< zôHHHÈËË+::úáÇCqDww···7¸böìÙ`QФ†”‡`€ ÝŽ€€>>¾©S§ž;wÎÛÛ6nñR¹0jNž<Ù?â÷CáÅ‹ F˜pçÎïFÆüw°jÕª€€ç^ ¯_¿~öìÙè¾Îä466vwwÃÂ%&&)cÑWÍÍÍElí $Ã5V………ŒŒÚÛÛ!†’’’’’zÿþ=ÒÅ0LIIIIIéöíÛxÙé?._¾¿ÂÃÌÌ 6¨Tê`nHKK N‡ feeqÖ·nÝ Dñ\êX………...hµêÅáph4>$bdd”——ÂÕƒááÇ¥¥¥...xž¡ƒF£Mš4 kCÜ2AÎxll,¾YËËË•••ñB#À^HA&NœØ××׿²@zÃ---ƒE>/\¸››‹ '¨9ôGvv¶®®.˜ü±ÿ ~ÃJ1;;M‚°…ÖÑÑöäåää9øð!>¾Ë êêjXH ˆÞÞÞ¥K—úúú›‡Ô××—ŸŸõêÕ\¯w(hnnvuu=}ú4’åY¼x1}úÅ[„„„ô×AøçþñãÇø¹ðóÏ?»ººâùÛÁ! Á3›››‡^°µµE˦¡s¤sŸŸb0— †Û·o÷õõ!uWÀ‘#GæÎ i¼1gÎÿaŸP¹p៽½=QœÁÐÞÞnooùòe$…€¬T¼¸¸™))©/.”wíÚ…ÞÕ°_{ll,ì± ¶0ÕÔÔù">>JJJýå°\]]wïÞ—,))Aë9ä$‘œ†N§³X¬ïfo0 kmmÐÿýý÷ß !:¨¨¨€”<Š‹‹¹Dm«lRRÒÓ§O½½½{ä¶UUUîîîý7xbbbÞ¾}‹w_š››Q𡺺zˆŒ;?~ü;'"ëëë‡aoàõ–••qÙ›ÌÌÌëׯÉ‚¯o9Ý¡Bëêêú[vuuݾ};מAqq±††ÆHâ¦ú¡"ü‚aØÔ©Sûg~üøñäÉ“øl½Ùä¬\¹’Á`@”ÌÁÁvV~ùå—“'OBááÇa?Æ îîî'N [¿~=°ýDDD _¸¼¼¿ôQWWÿí·ßèŒ ‹¶¶6(´±±7ÜÝÝýܹsPèááä¶êêê$$$þ&7ßܹs[[[áâVVV°åpíÚ56›½eËoooHm8pàÊø¬®®–””Ä_ˆ·´´loo'² R©AAApe55µ‡b6yòäõë×Cáœ9s`p4ß»wïׯˆ322 8ލ¨(dÁ©¨¨œ9sn¤¯¯ ]11ÿÇÞ—ÇŸ¾ÿ?SÚ7m"%%J«8;)K"EÇV‘plÙ²t8Ö:²²¦E©-Z„HhmTTÚ÷šö©™f¦™ùþqý>÷ëy=“‘ìýzÿÅýLÏýÜû}_÷u½ßÏžräȉ'`á?vìX¯€Üç½#^°`…B¼,--!ÂãêÕ«ÂÂÂ6l8tè««+<=zô(èžrW/N§Óé„L Í* @XÅ[[[áp ++‹räQXT½ÜÝ ·Dw CŽp0Â0ŒÃá477CaY,Vss3!k|aºººà¶FBBÝõ··Ã1ZZZåÈ݇ÁEÀÏÏ}x$Úh4‹Åâîè‹¢V¼ÃXSS“¬¬,t`‡ƒE@ÅäîKø–Åw¤^»17ð™b\mL&³³³?v¸GkWW‰D‚|{Í”»;¡–Å0 ß¿ðm0jP7f±Xííí0T™L&lq„„„PFåÅšO œ‚D[kk«„„7i)šÙlvkk+t`îùð›K´}æ”#((H˜ÄEDD¸YÞ$$$rx‹A¯Þ8܆£!C†pï{%çvƒæ}¹òÉSÞ!„Ë[!!!Âgàg|î’ ‹À=Tøøø¸ (((HH쵆?kSîGõ ¡‘ÿ©fåΫ׻î¾öS¡ì¼Á]ÄI$JáçççÎ_Xüàäv6éµ#q×ð—žÕÕÛkþT_"”—D"õš;w_êû€ýl¦ÜÀ¯èŸ­øêí5Sîîô½× Œ~~~Ôî}œ>5p~>圂 ËÇLJ6LÜóá7Ç ÇÚ 1ˆA âapÉÄ 1ˆAü |R/§/ü¿ ÀyL\\| ¹Áp8üýÖ›Í`O@@` •&X¯ƒ›Ú£ “Ã7Jß}É!“ÉÞÞÞiiíééáÍñð;–(22’GH×oº3HOOHÓ›Í*Â&“9À&&“0À&‡ÊÊÊo59 >¹G~¯%GFF†{ñoðX³¶¶HmxµÞk¿#kµ¼ÇÚÀ(Ácíë»ñ DÛ 1ˆA â·Ägœ¤Á©¿•¦P(Þ!%%…:›››ÁÞ'//ÏDR[[ ®÷JJJàzÏáp*++1 ãç燥˜ÉdâIŠDDD Ó®®.ï@‹­­­à/++K°WÖ××KKK÷}ÃÂ`0š››É †aT*‚ÄÅŹƒ-ZZZ ÊANNŽà_[WW'''‡"9ªªª ¼E¼²X,'@ÁV4 "<ÄÄÄî¡mmm$©/Îß555 x×{ ràããCÁ_¨†…„„¸Púج À09r$dÊ]ØžžàÄÄW/ö¿¨Ì/ò…ånÖêêj0Ä5ŠpxåQÒÎÎN:Žšµ­­ b°dddc+™L†ˆd߯©©¸eee¼½‚Íf×ÖÖöe;I¡Pzzzð¨½ö%TÃ#FŒÀ;”WVV*++£’öÚ—º»»EBTT¹Àvtt@@ÉСCQ_â=`ªªª”””>e Óé­­­øîu´"ôši}}=DA)**¢±SYY ñ1x‘ºÞùBü"ö°ÍúQWW'++‹ú8pl%””Á`ÀFXX¸ý_rº»»«ªªÒÓÓcbb7b{{û­[·€&aÙ²e›6m’‘‘!“ÉçÏŸGª –––øŠ®¬¬Ü¹s'Lžžž|||……… Y"%%åíí­ªªZUU…ˆf©Tª––VHH…B Cª ;vì““knn¾zõ*R]µjš,jjjlmmÝÝÝyâ'¦òòò?ž;w>ÆLDD( ˜˜˜ìÙ³ïªO&“=<<*è²eËЂWUUµ|ùr ½RÎÎÎN‰tûömuuu‹•™™ BjÊÊÊ.\5jF{ôèR=xð jæ–––Ó§O>|Ïž=¼ N_¾|yTTšî‹‹‹mll@Ô××WMMÉd&''ƒl”¦¦æ©S§D4ëíÛ·A"péÒ¥›7o&4ëÎ;—.]*&&æììŒÔW+**ÒÓÓG]ZZº~ýzP ‚Âfdd UÐóçÏ£•¯³³3(((''É•òpknÞ¼ùìÙ³(­¬¬lÓ¦M°Zâ¹Ã™Lfjj*R=}ú4Z(ŠOuuõùó硆½½½ÇÎÎÎÖÖVJJ ôë€ÑàðáÃóçÏ®¨¨Ø¹s'RÕ×ׇU‡Ífgee­Y³†7IkGGGCCChh(•JEMMM/^΂mÛ¶ýõ×_âââ555‡Bª 3gÎ,++ëéé™3gNqq1,@ŸŠTA=<< /ÅÆÆ"UÐÿýwøðáííí·nÝÂ0lùòå7n”––nlltwwº)GGÇ%K–pÏŒ©‰‰Iaa!„õ°Ù슊 àøa0 û„XÒ;;;À}Á‚»víÂï*Ï;\»wï¶°°«®®vrr*..Æ0ìܹsS§N2dHII‰½½=¨‚x}¾JJJÖ®] ª þþþø|étzeeeVVÖÝ»w-jÖ®®.D{ßk³þ¬Å¦¦¦†J¥®_¿þêÕ«ˆ³ÎÄÄDBB:°PRR~½IJJê ---WWWü,ñÝ—œâââ-[¶tvvâÇsdddEEÈôž9sææÍ›{öì9w†ôõuëÖÉÈÈà=zñâE˜ ÕÕÕ³²²@‰¶c&&&¹¹¹jjjðZ*•úèÑ#¸C~öìYzz:¤‡„„„††nݺõþýûêêê¸cÇ))) =«¨¨øï¿ÿŠŠŠúXr2™ =ŒHHHˆ‡—ûûûŸ;wOæáᡪª O7lØ ##t;ÀIŠçˆsttŒŒŒ”””äp8#FŒ¨¯¯okk[·nÌ&ïß¿·³³{ñâEAAAJJ ¼0,,ÌÅÅä¶š››ýýý£¢¢¸EGpqq)(( PzϘ1£®®˜¤§NZPPPYYyèÐ!È(55uûöíxúÄÄÄîînxzöìYÿ½{÷â›ÕÞÞ^FFÆÌÌ .”””üóÏ?°uZ°`Aff¦¤¤$‹ÅZ°`Á³gÏ:::Ξ= /ÌÍ͵··öìÌJQQQžžž ÷Ò\¸p!-- Tã–,Yç`ºwïž¾¾>ÈdlÚ´IZZÚÂÂb×®]»víš3fmèž={Èd2žÚŽJ¥º¸¸À—¬Y³&!!¡¨¨(!!#""Ž?~ýúõ°°°úúzHtuu Ú¹sgPPЬY³Îž=‹a˜­­­œœ·®ÚÞ½{ñü¦¦¦@WWWgooO£ÑðögÏž¥¥¥A^¡¡¡!!!°(nݺ5cÆ Ø]­Y³FNNnþüù§OŸ>tè¶¶6†aüñGDD„²²òŽ;žÞ¿mß¾ýøñãø±H”ß¾}Kà]ÆÃÀÀxHÛÚÚ:::Ð!788˜F£á5°?ÜDâ(}}ýœœ˜›úâj®"` ƒfURR¢ÑhPx› `ݺu7nÜÀs1½}û–ÃáÀÒ"--}ÿþ}:þþýûÚÚZD„ž––öøñcggg¼ÂÍg‡ †aHÉ ­­]PP_Ë£zñxñâEZZÚÁƒK?Ò­©©âaèCçyyy¨3™LKKË·oß‚Ž2,\¸páÂ…>>>øM Òaª¬¬”””äÁï c?ÙIHHDGG3Œüüü†† BÕ××÷ððèèè())ikkãÁݾwï^˜_ZZZddd¸%¼°ÿ ßáU øùùÿ¦ŠŠJrrrVVA­Ö©S§Æ:¬———£LAE©°°J¥ª©©Á$ srr˜Læ/Â'=nܸäääÔÔTèSSSSSS___Â~lMMMÛ·oï‡ Ò7pÁqï'Þ½{–¡^I©Tjaa¡¤¤ä÷Xo°/¥õ444,--…“—‘‘Qßp77·úúúþù,ÎÎÎðqqñÇãwRÕÕÕøsUSSSHHHTTÔÔ©Sׯ_ì3111‘‘‘PkEEE ýã¼ÁCKKKWW¾ÍÐÐpãÆø§`¾€°xÁ6SII©WŠ‹ŒŒŒcÇŽ}–ð±µµ522²±±XD˜L¦’’žÅë‹pâÄ (‚ˆˆÈ‘#GúøWÉÉÉÞÞÞFFF Rcnnîëë ïY±bÞ‘,??̘1x•ŒŒŒóçϳÙlggg´þµ´´…²²2ooïE‹õë­­­íàÁƒòòò`/E½ñèÑ£:::ˆ›õS¸wïÞóçÏW¯^ÝGênaaa¦¦¦ÐÐÐÈÈÈ)S¦¬_¿žûF¤¤¤ÄÓÓsÅŠ : ¸|ùrqqñÎ;ñë.L Ÿ’Bø•Q^^îííýæÍ++«þ‰ï}WLœ8ñäÉ“p‘ãââBØ­R©Ô'Ožxyy©ªªîÞ½û+iÝ{Å—y¬=~ü¸ªª*66666–D"áõ¯>{Ö‰ýûï¿EÑÒÒ^ríÚµ5kÖàL@@s¹¹¹===±±±Ã† »qãJß²eKllìû÷ïŸ?^PPpýúõuëÖñÖtJNNNJJJJJâÁM›–––””ߦ¦¦F ‚ß¼y³€€€«««««+LgùùùW¯^ݱc·é«W¯N:õY͘ÖÖÖ¨¨¨††XoêëëïÞ½+%%Õ—#SËãÇcccýüüú(Û —s±±±|||ÁÁÁpñ¦¦¦U‘””„×#ß¹sç¾}ûð¬´îîî÷ïßðà^eĈ±±±{÷îݵkWGGGtttII oAõÒÒÒ¤ÿÏ\IÀš5k®]»ßfii‰4|øðÓ§OCÁ¥#ZÑñS3²$êéé-Y²„wåddd¸»»{yyÁö<%%ÅÝ݇Df/üüüLLLúg{6lXllì¡C‡ðµþùgllìôéÓñûñ^áää÷æÍ›ÜÜ\TíŸêêêB·­ŸB^^ƒÁˆ1bœ¿ñøøñ£¯¯¯……á\xåÊ•ØØØ£Gâ÷X111ááá¼UØM<}útÚ´i±±±‰‰‰¿ÚçÃÀyøð!w·oll„ ÐÚÚú³;Œ±äôéé鼕²>k`%˜ËKKK Ê:gÏž6lX[[[|||[[[FFF¯’'—.]ºxñâÅ‹¿&mË–-ÑÑÑÑÑÑ`pwqqQSSkhhˆ§P(¨°ÉÉÉ—/_¾}û67+÷zS__„™cccÓÓÓUTTâããKKKKJJ~€-»¶¶– ú¥¸{÷.Þ½ŠÁ`ý;þ`äíí=cÆŒøøø¼¼¼úúú^¯Ü.þ}¿–#@II Ún²²²‚ƒƒÿøãøøø>ÔÔÔÀ›ËË˃ƒƒµ´´‹V¯}ØÓÓóÂ… hǺlÙ2%£Óé©©©_ú‘ÅÅÅ·nÝš9s&’Qï;zzz’““¹=ÔO¡°°`¾ÿ>ªv¼Ìî—ÂÈÈ|FzÍ400pÁ‚x­„¬¬,ðÁ#11‘ 5õ{aÓ¦MøËì_ ÉÉÉH2‡£Gçšï‡ï.ѶwïÞ>Š'vtt|øðaòäÉŸ]¥%$$ð={„ iiioß¾…SBTT”©©)·¥+$$ä+CA DEEñæ‚I“&½~ý.ÜšššÂÃÃMMMEEE7nܘ––öY üüü„‡‡£eee‡;Äââb>>¾ÜÜÜïí*úìÙ³ÜÜÜÏî‹ÑéMKK‹7Wn{{ûæÍ›AV --=räH(W}}=l¦ð¢v{{û¯ ¥R©™™™øyMNNNVV²®©©ikkKKK7nÜýû÷I$þî÷SسgO@@ÞwqÁ‚ðB&“I¥RïÞ½;mÚ´/ú΀€%%%äËðEèììܰaa—ðþý{77·¾¼¼½½ 𺺼žß¾¾¾ººº¹Õ#GŽ?~œ`ÛY·n]nnî¯à^< ±aÆôôôþiþ„%GEE¥¢¢\€0 ƒ…DGG§©© ÁO?55USSSFFÆÈÈèõë×°¥566×ûE‹Áï»»»ÑíVyyy`` ¸ åååá—à9a˜¦¦fYY$ÊÈÈ())­X±­@fffÿý÷ßgu¯?…áÇ+**ÂËÛÛÛá¾´¨¨ˆÃáhhhdgg×××ÕÀˆ#FŒâ`‹wöìY¦ðøñcðäãã[¼x±  à¬Y³Ð›‘í¾±±Õ§²²²‰‰ R~;s挀€Àg︱xñâèèh‰Ä`0,X€a˜¸¸ø¤I“ £¦¦&˜ëêêjkk'M𤢢R^^O9Üöëêê’ÉdB³bæììLP755‹‹ƒ(e¨!!¡™3gÂß¶µµÍš5KSSìu†EDDÄÆÆnÚ´©ß½vÞ¼y/_¾„ê§§§çÙ³g¦¦¦]]]÷î݃H”æææiÓ¦éë룬oß¾™™‰$ï Qåëë뫨¨Lš4©ºº555‘sÊóçÏÑÍ™™r(hii™>}:xÕ)òòòPîüñ‡¢¢â”)SŠŠŠàã'Nœø)ÿZ###ä‰}IVVV]]ëêê&Nœ›Öºº:HäããSWWÇ0LOO¯¥¥•••û~1dÈèKŸ‚¢¢â°aÃàµ]]]àTPPÀÏÏENNšé&Ož¬  0cÆŒüü|ð>Ÿ>>0ZJJJºººÂ݉²²òÑ£Gñ¿WVVþóÏ?¿ÔbƒË=þü¾}ûÀ& §L&óéÓ§¦¦¦òòò‡§ uuud±Dv‡ÿÖÔÔüðáª|iii•­[·zzzBâþýûaŽž7oDêæÏŸì¥‚‚‚øm¨««ãÝ[ôôôž>}Šr9r¤¢¢â¾}ûÎ;wÇŽÇÐZXX Î &&æææŽgŠŠŠ S«¡¡±~ýX FŒ IDATzM†††°¢›˜˜p8 µ´´„ÜÎÎ. ²vppàá†ÏTTTi˜`C‰þû矢º‰‰ÉÊ•+a»&((8vìXƒ/^ òŽ=úä©S§À{âÄ hâ«W¯nß¾N§ \¿~ý‡ÍÅׯ_ß¶m“É/y*•úâÅ 4?ÈÉɘ)cÆŒÁ»ü­\¹òîÝ»PÌ7~i?ÿ066ÆŸi.]º´{÷n΃ƢÓéÏž=›?þˆ#œœœÀGSST˜¿9>£ :0ÀCô7Å ÇÚ¯A޵߃kŸíÆßVtcmƒÄ ñƒ0¸ä bƒÄ ~†|ê=`Ž™BBBưI‚‚‚¦™àvdÈ!¦Dp ÂÏÏ?`JD"‘zzzØäsÂ@J09|“ñóóïê÷]rº»»ñ®l6;//o ©0Q(”’’ñ’¿êêêR577·µµ ¤¡D§Ó Æ› Ƈõ@[[[EEÐí=xЛ%‡ÍfMÀ€9ß`N£DàãØÝÝÝG—¶ßâ”Ãáp Æ€éx|||l6›Åb ˜‘H$‰4 '*•Ê;jû7‚€€Lߤ™øùù¿í$Ó{-‹ˆˆð&ù½ %%•™™9a„ä±V[[;vìØAµ_yä×ÕÕ1™Ì3”ÀcíãÇir””ÌÏÏ×ÕÕHk---ƒª ƒÄ 1ˆÿßñ™³äÇSRRÖ­[‡RRSSªrîܹˆ8àþýûÀÝkkk‹Î puuݽ{7D,²Ùl (–@LÒµµµ·¨®® †eeeA ÛŒ3P¨Ð£G0 û믿[†ŸŸP€lß¾Ï8Éuuuááá œx÷îÝíÛ·1 ›2e 7Jdd$\Z[[hó/]º´råJËíìì |kÀô…aXGGH9 >ÜÑÑýá‡233ñ$‰‰‰>Ä0ÌÔÔ´/œîîîëׯÇGhB¦¨¨(â2ihh€8AUUUˆÃåÆË—/ ba‰ˆˆ€°D0èééY^^ŽaØÞ½{ÑëØ±cÝÝÝ|||ˆ’µ­­ þ­¨¨ˆä! !°×ÀÀ೑x\¿~ÝÌÌ OüsâÄ `Ò;uê^¦Ã02™ìîîŽa˜ŠŠ ^²ðŒŒŒÊÊJDj (¦8((î*6oÞ¬¦¦†þöôéÓÛ¶mCq,ëßÿ%ôaHMMmiiÁÇFGGCäªU«P°··7hÒìÞ½ zìØ±#GŽŒ?ÍÍÍ¿üüü·oßkZZZdd$zdffABaaaܺvíZ‚zÇ?tèЧ.9ªªªbbbð”ÕÙÙÙ@õ;}útnÊÈððp †Z³f ^Sƒ0p0 ;räƒÁ2d’>û18tèPOO   èáQYY ñ¡šššˆr÷õë×ÀVedd„xÕzmÖŸˆ«W¯.]ºσpüøqF"‘ðb`h>Ƀ1cÆ| ?HN9åååŽŽŽ‡ÆK›¤¥¥½xñbüøñãÇÏÊÊ‚ázÿþý²²2H ïõjñĉ×®]CÆû÷ï‡ß>b§ëëë¯\¹‰t:Bʳ³³cbb ±  bz=z²%ãǺVXoººº ñúõë ¤ÂÍÍÍŽŽŽÀÓRåååEDDÀ{JKK ŒU‘‘‘ÅÅÅð422òÝ»w葇‡Ç¥K—%â±cÇ”””à—êßÕÕuâÄ HÙ¿¸¸ØÑÑñÈ‘#xšŸ¤¤¤äädøå«W¯@½ñS8þ¼££ã•+WðL¦¨z•””`É=SHd±X½u'$$œ8qÉÉDDD”––ŸDDD@³^»vÍfCâùóçAÁáÈ‘#£F?~ü¸qã`©£P('Ož„Ÿ ^¸p𢢢۷oCb]]]iÈ}||=<<ð4Ã...ÇÇW/¾YÏ;8Ò”Ã0,33ÓÙÙb>{ö,++ ~ j:°Þ´´´@¢¿¿?,®gÏžutt¼zõ*ž U²‚‚÷ …Ç›7o]\\ðæÑÑÑEEEð†C ——ÈJ?þÒ¥KPäãÇ;::zzzØ[[[œœBCCñ‰ïß¿?zô( L 䥥ÇÿeeeKXXXee%$†††öʯêììLÈ”F£!‰††GGÇÿýö`–““óàÁxmQQþ¬7ð4,, ؃®\¹âèèˆ80﫪ªŽ?^]]6¦?TWW?~¼ªª*D¹ººÚËË >žB¡øûûC³>yòsssA•Ь [õ³àéééèèxñâEP=zTYYyüøñšššNNNøß766^ºt >žÁ`ôQ·÷›rÄÅÅ ?|øðñãG”XTTÔÞÞíqæÌ™wïÞÍ;÷õë×pZ·n]UUAÌÅÅEII Ï4lhh›\P=zôh[[[JJ 9Ô××`&##3oÞ•J A)L&óîÝ»pì144¬¨¨À“ó———×ÔÔÀ²äåå•‘‘?è¼zõJWWdñÖ¬YS]]­¥¥4ŒH ´ž  Š—2ù®¸}û6^Àjnn~óæ ¤<}ú4((ÈÞÞ„M†ØÃÃ#''gáÂ…#GŽ„N•ššúsÅr444¤¤¤{Ö{÷î­'›Í9r$ R€°°ðÌ™3)))éâÅ‹ŸU%þ–KŽœœœµµõ‹/ðKάY³š››Áê5f̘>’îÅÄÄ„††‚­°jÕ*:¾}ûv!!!dwÂ0¬¬¬ vÇ`+PQQýÁ€€4Û¶m{ðàŒÕ«W÷Ű&..nmm——‡—P›0aBii)PYY¹ÆŸ¸¸¸ãÇsw¯íÛ·3 Z ÖÖÖ±±±ˆwáÑ£GK—.å]ɦ¦¦†Á1áÚµkp(ÀW;Q©Ô & Ác` HNNž4iþÆøäÉ“eee...À; v*&“ Ƈ^1~üxccc¨[EEEÄ­ÉÀâ¦N„3gθ¸¸@¸(K~•••µµµ³gÏFÇ8d~üø±µµ5h|GtwwïØ±cèС¼I¸ÕÔÔÔÔÔºººð¢ÈäróæM]]]_°é!ì÷»»»ãâ⢢¢ðKQ}}}QQ‘ž›ßùùùÁ5lÑ7nÜxõêÕ´iÓzµ„ƒ X"""hi—””´¶¶ÎÊÊúJ=X ÄÃÃcïÞ½,‹¯|©?ªªªªªª0ü©T*^)êÖ­[ 7nüÞ𼔕p&ë $%%¡«ÇÄÄàå’„a­WTTTtvvó#‰D¯FŸÂáÇwíÚ…'~ÿkÝ!æææ³fÍBF€ŠŠŠK—.™››KJJâ5”••ÍÍÍEDDÀ`eeE¡PììììììP‡ó|X^^^¿Òëëëëêêà=àÊ‚ºzõêÚÚZÈî®0 sss³²²þG<Œ-ZDí ?~œ““cnnž““ÓwÍfürµxñbsssccc¼ÉîSHHH¨­­]½z5÷#}}}ssóºº: f…;9EEEsssWWW¼±káÂ…fffpÞ’””<|ø0T²Æ455•••AÝÊË˃‘§xöìÙ¬Y³àU„ž¼¼ü®]» ë'N ;†ôôtî-[DDDII‰¹¹yRRo&7zzzÌÍÍÿøã`ØìnÞ¼ÙÑѱtéÒ/r.êêê:räAפ°°ðáÇ„{ÀÇY,árΦUUU}ŸâÔ~7Ùš5kJKK¡]«>Ož<™?¾¹¹¹©©i?:ÿF|||zzº¥¥%º»uëVSS“¹¹yLL Ü]ý^(++»víš……^äGœrx,9Ðw 6·O­7ÚÚÚK–,áŽ$âçç_²dIcc#²ƒKKK¯X±bêÔ©/_¾Ä›àá¬ãéé 6MMÍ¿þú ôÆÑÒòæÍdX»té·î†a666À",%%õ)†ÚúúúÚÚZ( ¿¿nn.þ©ŽŽh¦íâìÙ³rrr–––ˆåaÙ²e|||ý8œBÇ÷öíÛâââ/ýó˜˜0¬}öf;)))>>~ÕªUZZZhùÇû&L˜–œ¹sç.]ºTJJÊÕÕo,Z¼x1‹Å+–¥¥%˜ªÊËËàÆÊÊÊଆ5î DG;w‚Mµ×cåÀ°†$Háýú¨¬¬<þ¼ÍwR.À¾·D[jjjFFó[ZZìííïÞ½+**ºjÕ*îÛcIII“’’’••EP%Á¹GlذþÁûv„7´´´À:×¶™™™d2ùÑ£G†•––:::úûûƒ£‘‰‰ ???¢ÊÿÒ3;a‚ø~¨©© ‡å¼¼¼æ&+++??¿^5Ä&OžŒ'áÇ0lýúõW®\!ì*„……Áè—›› KN_0eÊä‰÷û"ˆ‰‰AÖÒÒÒñññMMMà aXmmmGG‡ŸŸßúõë1 SWWïw.|||èSûÀÀÀÖÖÖåË—öÒ‘‹õðáÃÎÎÎk×®Q©Ôªªªýû÷¯\¹2** &t2™ÜÐÐpùòeîðññQSSÃkv˜™™¡)æû‰wéèèÀ-/ÁLú›âåË—/^¼°µµ…¹?Eü\{Ú×L®®®7n$ˆæýNKÎùóç‘'UNNÎæÍ›áÂiÉðFcc#Á´çVQQÑ~ˆ¢e(è7†Ž×L;zô(r¶qtt\³fÍO”Ûë·ÁÍzááát:D>ŠŠŠúX]IIIgª¶¶¶={ö€?ôaܸq_ ÚÐÐàììŒ?%Oœ8}I|||aaᯠ&ðñãG%%¥/]oàyÿþ}øw]]«««µµµºº:R{õêURRÚ+DGGS(”5kÖ 7€lÞÈö½Ë{ýúu55µþ© þš¨¯¯ïèè ¬7¿5¨Tj~~þw]o¾xÉY¸paGGl!ŒŒàv}ëÖ­>>>¸råJØ.ýóÏ?vvvø;gAAÁ)S¦wBdd$ü^\\<((¬gŽŽŽ¨¦¦Ö¶Y³f‘ÉdHœ:u*SŒŒŒüýýáÊÑ®Ȏ=zùòe¸ÞܶmxãôS§N­¯¯‡ !æ 88˜ÍfÛØØÌ;÷Æ Tµ|ùòiÓ¦á]@Só;wÖ¯_WñàÛ-%%uéÒ%x³‚‚Aí  ‹;wîÀ/çÎÛm’@”€ˆˆ¯9òàÁƒðNðJIIILL~õêÕ}œbÄÄÄxûµãGë”)Sà 3((HHHhÅŠ¦¦¦>>>pÿ´jÕ*Úe¡¡¡«W¯†¸´¸þÜ¿ßÊÊ ârÀ†ÑØØxðàÁ7n¨««oÞ¼Š6nÜ8t= ‰†ÙØØ¬Y³fãÆ~~~heeÅ-éöÓlooq9H¤xÛ¶mpô,++C%š4iÒ÷ˆ‹úŒD…B!“Éxã™L†óûðáÃQ¨ZUU¸~«ªªÂ6¿¸¸xĈx©Ê¼¼·µµµµµáý†Øl6f…Óp7?žPX‰„6 N¨øÂvtt@œ£ŒŒ A,œ7áÍÇ ݉ÉdbDS„ŠŠÊOq’&H´)++ú~jêéé)((ÐÑÑAÕ̘1c¾¹DÛ *èo‰AUÐ_ƒª ¿UA?ÛUA1ˆA b¿%—œA bƒÄBïîüüüˆ¾p`à=ÀTAÅÄÄL3AÓ °  ¤¡D¥RùøøR‰`(IHHà/“@Çý&ÍD"‘ÀOçû.9MMM@¬9`ÐÓÓãëë;JD§Ó£££ ÷É¿5˜L&‰D†ã‹Åb±ÒPâp8ˆuwÀ »»;00p ÉÑ2Œêêêo59(((|ÃÖÞ—œ¡C‡"W¹)))KKËÓ«ÄÄÄ=z¤­­-''70J$,,œÍÇÇ7`>|ø0}úôs àãã»ÿ>·0Áï IIÉ   SSÓã> **¯¢¢BpSìw7æp8x.êï²äH¤¯ ÑÿÕe0KމD2dÈ€i&AAA~~~>>¾S"!C† ¤ÇÚÀ› D¦PBBB|||ßjrµoøyC>{Žf³Ùxík6› _[B"ôHnóð¾à¦P¼:Jäp8à-=›ˆ²Cy9mß—îrçˆwIQéßÃ]À^sä.5¡€½~w JÝÇêíG³¢òâ¹³Ãórä®óÏ¢/änA”/J!Ti¯¥î5Gî>Ì£€½eÄ£/}ªz!;BIáz,øDî2òA„,¸«÷Ž^ËK`²àñß_Ô©ú7þx|ÑØéßðü²³2B¥RŸFAA¸¼h4šžžžŠŠÊèÑ£ñÜ—'//Å$³Ù츸8ø[ÈîæÍ›è…ŠŠŠxîntwwS©ÔÉ“'Ù(€J¥Ž=ZEEEOOª—Ãá¼{÷ÞieeÕÛk³ž9s5«““ªd(,N_ºt)$æååAkÒh4555ÈŽL&6 •ÏëÎb±BBBb<@§Ó©Tê¢E‹ðôÃ4mÒ¤Iðrk8‡ÃÉÏχG–––PRTÉ***#GŽN~&“yöìYHôõõÅÏtt:ÝÊÊ*55Uò¬Y³à—ˆ¨½pÔ¨Q'Nä=‘Q©TOOOµ¹:tÞpïÞ=T½+V¬€Äœœ˜¹h4•JUSSC ‡§²²~fll él6Ì)***[¶l¾ÔÓÓsýúuH<þ<´ìþýûGމ¾¿Wö)ÈT]]‰Yp8ôo˜ÒÒÒð"§,ëÞ½{ðÎÇC^ cïÞ½ð4** •wÉ’%øáÃèNúúúèÛúÍ€×Ðh´±cǪ¨¨Œ?••7-- >iíڵЩzzz!ñ¿ÿþƒò2™ÌÇšõgÆÎüùóñôÄø©‰»˜T*õÕ«WxN¯·äääähkkˆ÷oß¾]\\\SSSSSC"‘€µåèÑ£:::M`8_ºtéÍ›7á©‘‘DV;Râââ£×Þ½{!q÷îÝÀ4˜˜‰JJJˆ}áðáÃ5ÿŠJëêêZ»vm× ꪪ´µµ \mOž<‰‰‰7kkkãç ÃŽ?޾<66h󃃃!¥  ÀÀÀv)))555UUUhذÙì>à›óõë×·nÝ‚?Ÿ;w.pÀ¬_¿RJJJvìØÁÛļbÅ mmm K@PSS«ªªª©©IIIãÒÒÒ­[·Âkœœ:@aaaÕÕÕ𔟟DJŽ=ª­­ ‰111À"¼bÅŠÿý«ªª0 ÓÓÓ{ýúuMMMYY¢RTTDmƒæÙôJ°ÿ)lݺU[[›@wÿçŸÆÅÅÁËI¡²²UàáÇ—/_ŽaØüùó!¥¬¬ÌÕÕ|“._¾L"‘ ½¸¸qMvuumÚ´ ´„¨™fΜ <ðßêêêÄÄD EˆŠŠÒÖÖ&p‡¸¹¹ihhÀKž?Udcc³{÷nHܱc05Ì™3G[[ï5ÔÑÑaee?óòòZ°`†ah ™™™íܹð€€Ô²$ qÍ;wµPF`bb¢­­_Î) R^/--ÕÖÖ^¹r%a줧§Ã;aÆ?=tè< Y¶eË–?~×®] ´&ùùù’̓á›CCC£   ¦¦¦>ü£ÜÜ\ôvvv0+FGGB¢””Sý÷ß***˜žžþ5ÜÛ_ 6hkkTBfÍš•––VSSSYYIXÑËÊÊ´µµW¬Xñ]¿ê“‡Ö‰'–••½xñ/G*""ÂÏψ:¸% ¸órss3‹Å’••…ã§¼¼<¼¤¥¥1ÖÀ”ÔÚÚª­­Í›²³³þ\RR¹6ÚÛÛ;88àõ˜ycÔ¨Qeeeyyyx‚t!!!!!!xyOOï©„sssOOO ‘••miibRihh°¶¶SH™2eÊ”)S F[[ƒÁ dçáá!&&F ç'X’4Yòòò@¹A¡PðÕû)À D¥Ra^ƒf•èé骀jA¿omme2™Ož<áqúf³Ùð·ˆèåË—aaaW®\é» ô¶ ª¶ïmúþý{`úmoo‡äççGŒ [·nµ±±Áw$˜8 ËÈÈàm­­­æææ½j9#XYYYYYùøøàùQú…Bä±±ùj}úìÙ³áå%%%ø§RRR===°…!œIÉdòСCWXX˜­­­±±±‰‰ L¯l6›L&÷J˜–ššjllœ––öÏ?ÿà{-‰Dú¢5!66ÖÄÄÄØØØÖÖ¶ïÂaaaÆÆÆ,ËÖÖÃ0‡’’¨ŠÙ³g#·+2™¼qãFccãׯ_Ìî„ËøÛuëÖÁœB§Ó»ºº¾ ëÔÝ»wÿþûox?(Gào&dee¡3šy b÷ý$xɨQ£`Ukiiíu¦°¶¶666 D7‡Ãihhò½þ¡­­íرc .쇃hcc£±±±³³3^U³»»;***## wvvzyy_½zÖÑ¡C‡^»v ìu¼!&&Ö’ÍÇ×ÖÖd¢vîÜYPP™Î›7È/\¸€¾äÔ©SøÑQ[[ûM®¾7ºººnܸDmêêêjllJ˜%~˜™™Í›7ï§(à}Ù’'ƒ¼¼<‰Ôw÷üØØØ¼¼¼%K–À>ÚÐÐ^Žá’’’ÀÀÀ¼¼¼ 6€a­WìØ±#ïÈÉɉ‰‰ill}ZCCªâéÓ§ÏŸ?‡Ÿ8pÀÅÅ%//o÷îÝ` ᆬ¬,j£'NX[[wwwÇÆÆÆÇÇó–nnnFÍ䡽bÞ¼yáááð~ OIIÉÓÓÚ¿„cöðáÃÌÌLd,;xIYYYXX™L>~üøŠ+zeE{òäI^^Þâŋчuuu-^¼¸J½öôéÓFFFý31"//ïܹs`<3ýÇÓÓÓñêãÑÑÑüüüyyy 4‰9‚Z'***))©®®U;áoZè YÜÒ¥Kóòò”••‘j5ÀÕÕUWW2}ðà ŸuëÖ999Aâ¶mÛð‚f'N컑ügB¡2 <-ºÏü‘———œœüs k<ðæÍ›œœœ¾³¥ýÃÚ·Byy¹¢¢b_Üõ455ûBßÔÔÄÇLJß,8p`Ê”)rrr………T*µ¢¢BGG‡ûÄckk ÷±ÒÒÒõâ¾ãÀÀp‚o}Ü YZZÆÆÆVTTÐéôŠŠ *•ÚÒÒòMØ÷¾íííÝÝݽžÀ¸qãÆ ‚¥›,«¼¼/!‘}åÊ•+W®ÖÕÕuttÔ××sŸ‚‚‚Þ½{ÿ>qâÄܹsûQœÑ£GÃl•žžþEìëÇŽ?~üÈ‘#¡#UVV‚EßûpßA&“/]º4yòä~ĸ°X¬²²2‚ö9F{üøqJJ A ÚÚÚmÀ‘WXXMròäIŒ'5ÿ¢ù·³³Ñxtttܽ{·««kß¾}øôýû÷ÿõ×_¿ìg«ªª~?‡´Ÿ¿äØÚÚúûûîx¿^^^øQ¤¬¬|ëÖ-0\–––ž>þñãÇø«ß~#??ÿ³ÛšŸŽGåççƒÔo„E‹¥§§ÿD%É/[räää„……‘ûìR•••i4$JKKCaŠŠŠÅÅŵ´´’¶¶6rè‚ßS(Ð8QQQƆX¢¤¥¥%%%!i(**¶¶¶B¢¸¸¸ŒŒŒ³³³³³3²Qþ÷ßÜëM1tèPiiix9V©ö#FDFF²X,+:t(j¶;v?~?ÍéééåååÑßÀÀ@TT⊋‹íììÀn&!!¡  Ùµ··£ÛÚ»wïÒh4{{ûþ•ÂÀÀ¶ùT*ôr„……UUU!£ÚÚZøÔ¶¶¶ÖÖVUUU|³r8Ô¬àDŽoÖqãÆÕÔÔ@â˜1cà(©¯¯Ÿ››+,,Ìf³ÁAnÈ!(;MMM===T±±±ÜëMß¡««ûþý{ð—ƒY,V^^ž¾¾~ssó±cÇ`ã‰Wsyùòå«W¯ð×ǯªª‚–““³³³C·úË–-Û»w/L|ЇÛÛÛñ}˜Éd.]º¾¡@¹c¦¦¦&--=vìØºº:HTUUýÔå3??¿––,hÙëèè@/”••=z´¼¼<ÊéÖŒ5ª³³eeeûè†×^êøÑJ§Óau¯­­åãã>|ø¨Q£ººº™jhh ^¼àÓ‚ N˜?&LÈÉÉ2dƒÁ@z9EEE:::¢¢¢JJJðñd2ß›ššP…1BQQQII©»»%%% ’Z¿`jáp8H/çýû÷¼÷Ç-9RRRx1±E‹±Ùì#GŽÀÝÚÚÃ0‡Ë—/Câ¿ÿþ 3²ŸŸßÚµkµ´´¼½½7mÚFÿàà`ðëxøð!èñHKKƒl¥ŠŠÊ±cÇ@­}„ 'OžÄ0ÌÈȈÅbÁ›---alooïç牻wï&Ø^´µµ ®2¼!** k`Ú´i(G33³íÛ·c–Àf³­­­·nÝzíÚ5xúÏ?ÿ̘1eJ¸ç Y¹r%ÜÖŒxÂÂÂÈÙT__ãÆp…cddäääé°ZуŸž?~lffKZHH†a#GŽ>¾‡B³^¿~óÔÔÔ®\¹Bظ|é©—PÃwîܱ±±imm…¾sÜéÓ§ƒƒƒGŒáææ¶iÓ&X*Э†¬¬,a#bmm}ëÖ-(àÖ­[ *ZZZÈéËÇÇçï¿ÿѼ»wïÂq–D"ñ¶äÁŠ8zôèððpt]ñï¿ÿΘ1ãÔ©S¸yó&†aW¯^ERr†¢`C ???h¦Q£F]¿~&8!!!(†aÆÆÆûöí[²d jÙ5kÖ€[ó®]»<<< ñÈ‘#‹ðððéÓ§ã£)}}}D|ûöíCskk+ĵ)**ÛUYYÙƒÐôõõ!V&=====Ã0###}ýèÑ£ââb 쬬€ðj"O7mÚQ·x~RIIÉuëÖñ.»wïÚÛÛQÆ0,!!´L,X ¡¡‰÷ï߇¸ikkk¼5ÃËËkÆ Ƕ¶¶‡ÝKJJ>~üˆ¨©srr€÷aêÔ©ˆ5>>>??ðŋóAë5S„†††¤¤$<ŸXaa!YN˜0é" L-Züááá` °··—€)‚‚‚[¶lùa³áÕ«WY,–€€7­p}}=DU«ªª¢ù0??„þøãˆ•Æ0,111''‡Ð¬?!!!sæÌAhà€ /–ˆ€ ®øÝO9µµµîîîgΜAÒU0l?~L¡P(Ê‹/`¸>þ<==ï߿߫×××÷øñ㨨.\€ß744IssóÍ›7!±  hÒ £££!1%%FNJJJRR$>xðàýû÷0ïçççCb`` Rôá¶¶6ww÷³gÏâIPŠ‹‹#""à=éééˆ>­7¯^½‚§‘‘‘?~Ä0ŒJ¥Rþ‡Ë—/ƒì‚§§'™L¦P(†Ñh4OOOøYyy90ÂUUUݽ{³²²€K<==ýÁƒèOnݺåîîîìì "ÀÃ㣣ƒB¡ÉdOOOèL~~~ðÂÂÂÂ^ 233Ož<‰x‘ñͳpHHHQQ$Þ¸q£­­ ðk×®555Q(”ööv œ¢R©×¯_‡Ÿ•••Aª¬¬ ÄÌÌÌ>’ìÞ¿ßÝÝÝÅÅÏZíííÝÐЯºpáþ÷ííí¾¾¾ð¨¨¨¦ &“‰ê399¶ééé/^¼€ÄÇÃNâáÇoß¾…ÄÛ·oÃâPUU‰W®\— ôN¼~7òóóÝÝÝOž<‰/rBBBZZüyTTTQQLÁ………èïïu^^^îîîÇŽ#HEttt¸¹¹˜JKKOŸ> ¥†õæÉ“'ðÂçÏŸwç³gÏÞ¼y‰À ÏýÍÞÞÞîîîÇGÄÒt:ú†a---0v` …Ö›¨¨(xmjj*~Ûë Ê4<<ÄsñcÇÃúÓéÓ§›››Qú›š/_¾ÜÖÖF¡PZZZ®^½JX\ƒ‚‚à{€~š5&&AÓ/!!!555+ï#44ÆÞ,æææSwõ655]¹r=ÂËÿ SA#ðìììææf K9sæLJJÊäÉ“Ÿ>}ª¡¡„`ëÖ­ÓÕÕÅSØ~*<@Ü©±±ÑÄÄdÓ¦Md29&&ºiEEEFF†aG[[˜H<==Ÿ?>kÖ,Ð8–2ÐÒÒ ³³³„¹sçšššöå’ƒ»€EEE>|Žwÿ§OŸâ5ãââTUUáX¶aÆÂ±cÇ¢óŠŸŸßßÿ ÿ‹/¦¥¥IKKs8œ#FìÞ½›J¥úùùÁùþý{[[ÛŠŠŠôôt õ {ðàlN§L™‚¿ú¢"À ­««#‘H­­­S§NݺukKKKDDèn¥¦¦º¹¹Èn333ãââ@ ÀápLMM'L˜ÛÏ¢¢"uuõÛ·o¶Q¯Eàp8óçÏëM›6}øðaܸqÁÁÁ»ví‚“ÐŒ3,--eddzmâ®®®«W¯ÒËËËCBBðeff¶··}Trr2|øPRR´ž™™™„é,66VWWwíÚµ†­Y³f„ jjjkÖ¬§>>>[¶lAloNNNxŽ–77·? uuuéêêâµ²êëëãââÀÜòôéS0*äææÖÖÖÂËÃÃ#11qúôégÞ¼y“&MÂ0lóæÍ>|ø‰^;†a{÷îý­ç°aÃúØ«¿ý’£¨¨èääDP4iRCCP á­|ØÅÅÃ0‰„ŸŽy ;;›B¡Ìš5 ‰J™˜˜`•““£¥¥…§Úóññ©­­upp€Ž‹Œi®®®Ð_EEE·lÙÒÒÒrùòe~~~‚œùl€„-óîÝ»¯_¿c qö¹¹¹°Ëùú6b±XÐFâââ¼+YGGGGG‡  jddÿˆŠŠ;v,§ 0òöÝ]]]wîÜ‰ŠŠ+7Zr²²²ìììÜä)))Ïž=›3gNßIáÀœuíÚ5”"$$„Xúeeeœœª ¨#EGGOž<ù‹Dçüýýƒ‚‚eøÔ©Süüüx©_ úúú•••h2„Å7«ººúÏåÃI鸸8Bú™3g„……I$ҎŸç D£GFâÅ?ô.‡ÖÓÓfA …ÂCD ¿!µµµíu"–——g³ÙH´¶¶öÆòòòMMM0™b–‘‘‡¦„q´z}Ô4ì#@Ä ØÕÕEØ©™™™%$$ ý2žyþúõëK—.åq‡$&&¶uëVø[š§`sG&؉#þÐ>Éâ«—222ÍÌÌh þ–B^^¾¥¥Ù÷¼½½õôôäåå/_¾¼k×.tsüøq¼œŸŸ_^^ÄÅ¿m¯mnn–‘‘+¼®†aÒÒÒ¶¶¶PÏ7›·oß–——ó6O¯\¹2==´Ÿy“âk››ÛþýûûQ¨¨¨?ZXX|Ï)F»|ù2"EëMbb"÷4‘šš ˜ššJ"‘fΜiaa‘””UÇî>n™›ššxÿ&''çÑ£Gòòòè¾³7(«V­BW‡†AÍáp\\\¸§Å_¢ÔëdØ¿fý18x𠲘;v qðc&''‡´æZZZnÞ¼ùÙÊï¾ä¼ÿ¾­­ ö•gΜÉÊÊB«z¯¸té??¿ þf °mÛ6ØrÂà200X²dÉË—/¯]»KNfffll¬±±1º̘1cÆŒ;vì(**ãÏgñÏ?ÿÀ¾X\\üرc½þ¦¬¬¬¤¤öVþþþÉÉÉ‹/FOÁÍF)éùþýûnnnü½ý †açêÕ«óæÍ{öì›Í.//?vìØøñãýüüêë룢¢ŠŠŠ ?vkLMM Z݆3¶—ÓÓÓCþõkF‡`¢Z¦á...¿é)™_ÜßÀ"rçÎ0ÕŒªy{{ÕÏw9Û·oGÇãCCC‡G|oܸÑáZXXXZZŠ÷7°x§Óé=p9‹-úÊ£ JJJ‚Ód77·Ù³gkii ùnccãÁƒ>üÙ§¼y󦸸ø‡¹ Á0¬¡¡Iá={öÌÈȨ;‡þüüüÒÒÒð‡·[[[{àr†þ•GA«ªªÎž=+¸ŠMOOÏÊÊBûÕ]áÊ•+ƒþlVz÷û°`¦††F “˜˜R¢¬¬¬LNN0`€®®®‹‹ JJJ²Ùl!*…·oßÖÖÖÆ‡ ïæ§ÀÕÕuáÂ…hžaØ;wvïÞý›ºœ´´4uuõ_ÖßÀšrË–-ºœ†††°°°_ËåŒ;¶ººzùòå†B.™ƒƒÃÝ»w¡pøðáæ:vì˜þìÅììì€iîܹsp½¸¸8ä¿©©©9::B¡¢¢"Ê)HJJ‚B æM›6{öl;;;ô¸@öÔÚµkCCC}}}1 ›?¾pë/ƒ~ÿþ=Ü\[[”„‡‡óùü3fôíÛ÷îÝ»×®]ƒ+!Ýð˜˜ü~•››ÛÎ;ÛÛÛI$(h‰‰‰™™™Áét:(ŒŒŒ&Ož …jjjR˜8qbpp0¢Ã:_„ .¬X±‚Ï狉‰¹¹¹AôiÕªUpÏ>}úÀvwzzzjjêªU«PÂRyyyKK ìy:88„„„ÀW† VxË–- iºvíZ´Üùûï¿¡eÅÄÄΟ?Ï`0vìØße0°m`ll,“&MÂtpppÀû?è£G&“Éñ1vìX¼ª§§§ ï$“É\7£Æ‚ˆ™äéÁnö AƒH$Ps6¬Sdžæ.è¡4 œª§§‡Ï(SWWg±X0}ÑÕÕ…‰K¿~ý K 4ˆL&ƒ•À?tïÞ½HuB …ÂårÉd2´éÁÌ™3©T*Ç£P(ª*%%-+''Çb±`‹KYYÿ´´´X,J‡N|Z :Jü±oß>0hh¦E¥Rñ¦I\\æ"t:ÅbA‡‚‚!¼ô­ Rý-!Rýõ!Rý- Rýl7©‚Š ‚"ˆð[BärDADøAè|/‡B¡Îüî ÃdddzM` âãRRR½¦™à\§¸¸x/«Fë55"‘H---d2¹7h&iié¯Éÿƒ¤¤ä7i&2™Ü#ÿ_ërjjj3`ï—Ë%°Âü«‹‰‰éM’Àd2ùç2!~[™EoJ<¯±±±—‡æææ»wï~CáËŸŽúúúêêj ]þzôéÓGÝø·q9222ß)]á§€N§ûúúŽ1¢×¬r¤¤¤bccûöí+„ïà÷‚¸¸xvv6™Lþ†û'¨Ôªªª‚‚ yì 2™Õ›ŒƒŒŒLppððáÃ{µ¤¤dbb¢ººz÷5\„€F£‘Édá\éßÀåP(”oBOù‹²uååå{SÆF£Ó齦™$$$$%%Édr¯©Fkkk£Ñh½¦F±Ö›ÚÃ0ƒA&“åääzSÆš˜˜˜ŒŒÌ7i&ÈXû†.G”> ‚"ˆ ÂZ+ ÿ811‘@ÈxóæMcccccãÓ§O£B(¢»õÇ ò‡× V>þñú!ܾ}äíøñãðuIûÒ¥KA-´ûxóæ P|#DEEÁ̓ÿþû/|‰ -Z… Ú1b¿µµµÆ8€\ͳgÏð…ˆ‡ÿêÕ«P‚—‚iÓ¦áÌ0 ƒ¯#}O Ãòòò Pé‹——W§Í ÚqxØÚÚ"NI¼Dyy9|Ï·aXLLLN5/\¸4,--áþá2 ÃÞ½{!)# Ãîß¿/ج§OŸ†B¤C¸yóf|‹€¼ãÌ™3ñ…°›ÚÑÑÿv“UìæÍ›’‚ƒÂÂÃÃQ¡££#ö´†Ž뫪ª‚ËíìóçÏñ?Ñ–øøø@ XÃ0l÷îÝP¢–]ÁÜÜ\Sû«W¯‚¤___Pè!`Ïž=ðP<þ¼yó ¯ì0dÈccã®H]¿hllŒXEðÈÌ̄߉W)õ÷÷‡B<õÑ¡C‡ /Dû1wîÜׯ_ –w*ûòöí[øñ߃Ðó3.'##C__ßÁÁÏ<ïë뛕••˜˜˜˜˜ØÜÜ \#ÐÐЀÂÀÀÀ‡ ÞmܸqYYYH,ÈÔÔ®÷ööÆëÁ¼xñ‚Åb¸îýüü¶lÙ‚tÜÜܨT*|ýÉ“'À½¸zõj}}ýˆˆt þ³(**Ò×ן2e žÞÿáÇÁÁÁpsuuuDPl„²²2|þuñâÅŽŽŽPø×_7Áˆ#|}}¡¼h%%þ ÒÜÞÞnhhˆ æÚµkïß¿‡’ŠŠŠK—. ©²¤¦¦"Öð7ðuØÁÂ0¬°°ð¯¿þ‚BGGG$ Ç•+WöíÛ‡VÐPWW‡¯ã›ÕÎÎîÉ“'[ß¿$PUUÅb±à»Û¶mc±X†=}úT__ßÑÑQP¯O–/_®¯¯ÿþ}$O‰aؘ1c¼½½áþˆ­P\\ìää­X±lâÇ¡PCCšõܹsÍÍÍP˜••lIõõõ{÷îE-7¯®®¾qã*~*333ø÷Ò¥K½NPP¾¾þÖ­[ñZ‡îÓ§ÜáÞ½{ TºtéÒùóçC¡³³3PlŒ5J__¿   ŸúúúiÓ¦Áe...pj{РAèîܹ^ò7òòò °¶¶f0{÷î500€Â›7oâwð]__???=”Íf£sõúúú666h‰·Â›7onhh ”ïÛ·OWWzçΟupp@ÝrÉ’% J=dȰ°°ÄÄÄôX «0`Àƒ`h¼Nvv6êÖÖÖ0  JNN†B2™ â¿GŽ‘““ƒÂû÷ïã'¦?‹/Ö××Ådñà¨YáÇÏŸ?ÿk(©„€*¤233ãããR ÐÖÖÆårÑ–5Ì€š››) ¶·· Voܸq 'ƒJjkkáz‡ê³†eeeíÚµëêÕ«xb¥ÀÀÀ¤¤¤]»v¡YüßÿM"‘ S‹Ãá€qwwçp8@‰ÖMhhhdffæääìØ±¶·····Ão£R©)ÖNk L$˜ØÔÔ¦¿®®NVVTA‘%“É‚»ý4PØÚÚÊçó /¹+øúúr¹\‚„Dmm-l\‘H$x½\.·©© î ´„ûøøø¼{÷nÆ Èu577S©TTYäËY,ÖÖ­[ Rßýû÷OHH@Ä >Ó,-- ÈÂÂ"33óþýûv}á8{ö,‡Ã!h˜ÖÕÕ1 øm„ Äá#)))¨é¸qã,--! –B¡@³Â‹…+¹\.ZCÈÈÈ6“¬¬,¡õáööváNtæÌ™“'Oööö´œBݸ££^/›Í–””„Û655ì&¨µâI F\\° UVVÂëE•«Õ¶¶6å|>ªÜÔÔ„.>wî\§I<àñxxwÎçóÑPÕÕÕÍÌÌÌÌÌÄËF`üäÉ“={öÀÄ‹0vÐCÏœ9mhh@õŒŒ6뺺:999iié¶¶6ôÄx.¨‚žËápZZZàwJHHÀ´læÌ™Ó§O‡ H‡jÊËËÕ¨Y<==¹\.žüÍ£Gs5;­Ä÷]åÀÑ‚dÈ¢E‹ ˜L&“Éäóù 9üY477KJJ~vëžÇãµ··žÈáp¸\.~gOLLŒF£íÙ³‡Éd>Œ‘„„„ŒŒ žÌøó5'“eddŒªS§N1cT0;;ÏðÖ$%%)еµ5“Éôôô’pU^^wÆ{ˆ¸¸8(즢ŒàÓÏ©ªª2™Ì#F¼zõª;÷éèèÐÏ^ÙÒÒ"..NÈ(mjjÂ+“H$))©ÂÂB&“¹~ýz˜ÂCúÒÓ¶lzzú„ འRû¿‰•*!!Èd2³²²„7ë²eËàÎ Û 5jö@nŽJ¥ÊÈÈv§¡c¶~ýz+++!üRÒÒÒ„&&‘HÒÒÒ?~d2™+V¬ ĸ\.‡ÃùìføÚµk™Læ£G:5‚G¾ Fvv6~ìê uttðxÁ:šu‰‰‰•••P8lذo•½Ãår7oÞýäÉ“sæÌ¦Ñß Ë–-«¨¨••FüC§ê¾iúaèèè055ÍÈÈèT¼àWt9_Š)S¦;vLEE¥±±‘Ïç755uÚ¡A/àîÝ» uÝÚÚzïÞ½#GŽ466¶µµ¡UªpŸ!}ûöÕ×××××T¬ê>Ž9¦q•·´´à÷Qðq(–Õ4:°ÿ‰ðóóKIIÙ½{wcc#²;^éàà°jÕ* éknnæñxƒ ºwïÊ܇:òù|BL²›øï¿ÿôÿ‡/Š¿áa``m„öo¡G ^ùÏ?ÿÀ•H Ô…—éBü_ÏÐÞÞ¾{÷îÁƒ#Ñî£Ó¾ôE8yò$>V¹páBôÚ‘<è!***88ØÕÕ•0Zñ8qâ!Uðˆˆˆnª'üjàp8ø„|†NEˆÿ €}2*•Š­?zuø]ïÎ`0Јª««ûã?^¾|‰§dGA¼ªª*HPéèèhmm]»víܹs¡°µµ•Çã)**nÛ¶íØ±ct:ÝÙÙùKLaaáW®Üa/‡7˜?þ?ÿüCÐɆ½üãjjjÆŒCšOJJ:yò$!ïîCLLìþýû þOQQ±Óõ–ŒŒ Ò©­¯¯·µµ—““›0a2£æææÙÙÙUUUãÇÏÊÊúÒãââò•LÒ<ÍfÔ+¢££ïܹ:4°gFˆýý÷ß³fÍ",&MšäããÓ‰îãßÿÕÑÑáÎ/E}}½……… MŒМ@êÄWö¢§OŸâG«’’’pôßIII„HOss3™Lþe¹säääК¸½½}øðá‹ô˹III*•Šfî¤Óé %$$À"×ÔÔÐét|ô v˜Áß(++ÃõµµµJJJÚÚÚœƒaØÓ§O;Txùòå‚‚Èû”‘‘áñxðu11±oÛºpóŽŽ·Å™ŒŒÌ©S§äää`}ƒjÚ§OŸÆÆFøŠ¬¬,ˆ©Ì˜1ãÊ•+PY8 ¹pY]]H׈‰‰IKKCa[[J)))$ÙQû/­“ɬ¨¨À0ŒÍfƒŽ•J•••…{¢ÝõÖÖÖ¶¶6‹e†¹»»·´´€¿a0¨Y%$$®^½Š1f̘˗/kii%&&⟠á~|eëëë¿9E‚’’Ruu5¬<@¾ÏçúôIYY¹´´tÙ²eóÂf³áÑâââ¨Y9´‹O]]Ý’%Kàý€ï‘••mmm…+á¼-Eëêê PQQf¨WWWƒÄÈ—d¤‘-——Ç÷¥®ö&I$’‚‚¡/Aðúõëx6))) …BèK £½½0`? ‰D ÇÃÊÊ Ö«W¯¾}ûüMcc#<ß$%%ÑØA/ANNꫬ¬üéÓ'6›ÝÑÑñ#µ9”••+++i4Zkk+<—ËåÖÖÖ***±køÍÍÍrrrP …`0 ;{ö¬””ˆ;|sëôõHHHÀVð7<¯ººZII‰B¡à­Äw:ðKý¬ Æ÷³9sæðx<Ðú\½zõªU«0 Ûµk׿ÿþ …'Nœ€9ïÖ­[ÿþûoPE¡g°ÎÈÈ€ýEEÅØØXüÅÅÅ{6þ$íúõëOž< Û¿?>CIIéKÓh4<-Ä„ 8Ü|Μ9 @uëÖ-·jÕªíÛ·:t>uuuù¦Ë—//[¶lË–-†Á®UBB˜1cêëëI$(‘—— ‚)Fß¾}!Îknn¾zõj¸¡µµõ‘#G ÊqíÚ5(tvvîNª¢ªª*¸:@ffæÀù|¾¬¬,t2mmíÓ§OÃ=‡ ±~Èã„4Z•¢ ‚;wþ÷ßð•ãÇ£¥ @EEE0ÓISSþPPPðóóƒïöë×`‘‰ü"s€oÙØØØ &TUUA_‚i½½ýãÇ544<==áуöññfår¹Phoo’¬«V­:wîîܹb>'NœØ´iÓ¿ÿþ‹aØ•+W ‡††Îœ9²°âããÁp§§§“’’’ðÓ-:¦ //ïííÒAOœ81iÒ$///'''˜ZàSQÔÕÕÑ¢YVV¤­0 Ó××ît´B,ôÆPÇ¿ÿþâ‡ûöíÛ·ozxxÉðÖÐÐ@¥Óéøé˜ÔN]~´^»vMBBbÙ²e{öìÙ¿?<ôäÉ“ !týúõ… ¾|ùðððpÐÛEm"ˆ ‚"ü–¹DA~¨]­ ñ{½@‚Û;êB …Òkš š†L&‹jô+÷:8äÐ+Coj¦oX# …òmOtþ›¸\øÞ¨««ãóù°™ßkjÔÖÖÖØØØkІ±Ùl ‰ÞÔñª««ÛÛÛ{SZZZx<^/3\.·¡¡A8³Ôï…ÖÖVAÚž£Ós‡ßØå466âÙ>~û¥•Êãñ’’’zÓ¤ŒÍf¿zõª×èJ‘É䆆‰ôéÓ§^3ÙlooïeC‰D"µ¶¶ö2ãÐÞÞþìÙ³^¡P(µµµ---‚\ï=kq…o’‰ Ìå0 H•뀌µI“&‰2Ö~Yˆ2Ö~ k½É8@ÆÚøñãEk]ucÈXûf“KLDA~̲RøÇ•••ùùùx6—‚‚8Ûˆ×ËÈÈB_ uuõNo9qâD˜Jðù|8¿&..>}út¸ ®®Ž…*++#é¶¢¢"8f``€Ä3²²²rss1 2dˆŽŽþ)?633ëþq÷úúúôôt8UøøñcJJ †aºººƒ&\ÿâÅ X®š››&±±±Ã†  ÃÂÃÃf Îö···ã•¸OLEEœ°ÓÔÔDäoyyyÀmbbbddôÙZ>ÞÔÔ߬ÀpeggGX¼²Ùlà‡UPP ¬0>|øPSSƒšõõë× ^5pà@}}} Þ={†»7n<ôÁƒ@KeccÁLäÖÖÖŸ­BAAASS^&33Nì>ËKHH€Ðâĉñ´=¡¡¡Ó§O'ð466&%%Á‘d­Ož<Á0LCCiÛäççÃYËþýû÷ë×}755UUUUøD8,,ÌÚÚº+„ÚÚÚ—/_¢7ŒÀÐÐOž†`Ô¨QÀx¢;“'OFT=¡¡¡‡L&#&ûwïòx<*•*Hø_SSÂB***Ȧ§§cÖ·o_¤Ði³þDÄÅÅ 4CFð®ÞpuuuNN^ÉìG¸œªªª‡¾~ýúíÛ·èܽ{ˆÿrssAÆ#===<<V^?~d±X‚^',,ÌÙÙùùóçàr|}}ãããÁ&‚¢C}}}@@hzÊËËs¹Ü?þø£¨¨(88øÍ›7`ø|þÀ_½z¤³EEE¶¶¶ÈëŸgMÎÈÈ/--»Éb±ÐˆŽŽÞ¼yó;wÀåܽ{)#q8œ9sæ°Ùlàï‚ëµµµ'L˜PYYAYY™ÇãYXXäææ†††B¯ÍÏÏŸ9s&ÞR:›šš—û÷ï#—ãççX4ÃáØÚÚ²ÙlpÞ²²²< ±þæÈ‘#}ûö—“žž•EÍúèÑ£û÷ïƒ|(Äå¼|ù²¸¸˜@Gíìì\VVF"‘jkkGŽikk[YYyùòeØõ;‚ËyûömhhhQQQß¾}Ñ n„ £GÆ0léÒ¥úúúêêêîîî;vì³baa1a™­[·¦¥¥1 .—«©©iooÏf³;´ž¯^½Ú¸q#˜Eðè¹¹¹HÓá³xóæMNNA-j×®]111°Åd2ñ.§ººúÂ… Ïž=Ã0,%%åàÁƒàr>|øœŸŸVQQQ$ ÞóÖ­[Ÿ}ú”””ôþý{<ۇƎ ËÍ•+Wjkkkjjž>}zýúõ0Ô---ÇŽË`0ÒÒÒêëë üÖ---·nÝl´ŠåóùPàà`ooï#FÄÇÇ×ÔÔ@áÁƒ£££ß¿Ÿ””$}úà;ô׸Ý^ºt)ð¢r¹Üùóçwç> uuu3fÌ@Þ ý¸¸8]]]àŽ³¶¶NMM…ieeµ… úúúBÂpÉôœœœgÏž9::FEEu³‚À㇢¯È~Á±ƒnŠ´¿xñ"''gþüù°’‚‡‚/™>}ºªªê×·‘¹¹¹¹¹¹——¬¨h½¯©©IPýÁd³ úLl6ÛÃÃ#$$”¶ÁÏwaaaaa¡à*ÁÞÞÞÞÞ^lWØ¿?LQ‰˜˜z“ÉôððHOO'JåççC711éjìøøøØÙÙá¥wîÞ½[UUµnÝ:ÿ÷oœœ ÐþI”ïè‚\Ñׯ_ÍL¤ÙPZZêïïøðáî¨S~—½ètº˜˜Ä÷ 4…]áÎ;Ó¦MC;^^^l6z-FSRR‚;‹‹‹Ã|SZZZRR ñ\‚¸wïž™™Ù×ghHIIIKKÃ¥¥¥ ”£GÎÎÎ>wîŒ.3477ÿì´]RRráÂ…pç’’7{öl55µg¿ÍÐ IDAT 333Á†š™™UWWCaZZ^€«›ÐÑÑ‘Édx“Ÿ6µµµ£G†(amþôéS‹6BUU5##¬L&˜=µ´´ à ak°…óêÕ«oBt¨¥¥•›› 'Ôê cÚ´iðöŠŠŠÐŠ-??ßÊÊê³JK“&Mzùò%¼=___•¹sçFFFBë ÓNNNð”¯Ñë}üøñ“'OfΜ‰ßãù,ÚÚÚüüü-Z$øÑ‡‚‚‚ÔÔÔ`&gjjZYY‰ú’?ôYÉdáB‹#FŒ€WK(A¯£««‹÷¯AAAâââ>>>K—.¥ÓéË–-óöö† í¯ïo"""êêꪪªø|¾¹¹ù¨Q£^¾| /<77·ûâ„? ŽŽŽˆ¿üâÅ‹+W®Ä/q>|ø½e~¾Ì夦¦~úô ¸‡=úøñc Óí ·oßÎÏÏ_·nÁ[ðx¼³g϶µµíرí|¡ÀÚ¹sç¦OŸþêÕ«üü|X»ÿ~§S§ÈÈÈ/^Ì›7O¸y=uê˜E)))ü‹&,E³²²P`-<<%2À^2=!!!YYYŽŽŽŸ]>KII¡‰CNNÎÚµkgÏž­§§·`Á‚7n@`ö* Ž°Šï™ÐÙ¾}ûð5áë€×¯_‡‡‡›ššZ[[\NlllJJÊŒ3ÐÖèåË—ñµ™3g2ŒC‡ák¾Û?úúúªªª.X°1wj‚‘^¤µµ5Šòàêꊬ!X.¯[·îìÙ³0„À hkkÛÛÛß¼ySø«›;wîܹsáoKKKggç3g΀E'±8ðßÿa_¡s—””4}úônF Ð\íܹs\.wëÖ­„ƒEEEþþþššš¨ |>Ä„üΠ  äž/^ÜéVhkkë¡C‡çŦ¦¦¨‡{zzÞ»wOp´Lš4 ¿Ä©­­Ý·oŸªªê°aÃìììètúîÝ»>ÜÞÞþ뻜ÖÖVkkkww÷˜˜sss˜QAůy¶™\§®®ŽFk}}ýÕ«W¥¤¤V¯^OùÉ.çKáåå5dÈ Êoll!úY,_¾\0z f±­­ ´'~Y 2D0Yqêԩб!õæWÃÙ³g—/_.(äSWWwîܹ•+Wººº–””ÀôÅÞÞþ7s9Ë–-C‹8¼­?~ü8„Ë¿ ìììð ‰]y”íÛ·åQÐèèhyyy}ú4Áå|øðáéÓ§øÝoXEÕ××÷ žÖ3˜™™!3Aú ²FFF_4 C;ø§`eeõ•GAëêê|}}W¯^wêÈ “Éä®  ™5kÁå\¼xqöìÙ„¹ÿ‘#G¾Fõ2&&FCCC0 ÿ³ Ñh›7oÆWvÑŠŠŠ’““ Ó¸´´´šš”.غ¹á'¯_¿¾wïž—¡««ûÙö=qâĺuë~SZ˜˜ƒñ îëàƒ= ,t9rrrhÔàûÕOv9C‡­¨¨€É¤¤$¤ÖL›6íéÓ§Phjj éUÞÞÞ&LÀëì^¹reíÚµ$Íãñàz Ãdee7mÚ¤¬¬lkk …4 ¾hjjšŸŸ…0r&Nœ…ZZZ èׯÊŠ]°`AÏä÷ë×ÏÄÄ=¦0ñññU,!!†ýïX>”îèèKœþùÇÃÃâxáÑ<¸3…BÍ[ …RZZ …âââp¨ELL,-- p¥¤¤ gì‹°gÏ0îÿüó†a öööð *• R˜E´··GPEy®aaa K†a˜ƒƒC¿~ý£££aU4oÞ<¨ì¶mÛÜÜÜð••––vrrB•]¹r¥ºº:d:`"=æM›ÎŸ?óqÈjkkswwß¶m™LniiA5uttÔÑÑA¾yófZZä°3&&&®TTT„ñìÙ³ÓÒÒ ›|üøñ°;(--}æÌXu9;;C–’’‚ï’Éä7ö ÷îÝCá9s昘˜,Z´èñãÇp|êÏ?ÿìTl”F£¡ê¼{÷.66mê a5pà@‹E£Ñ222à°NÏú‚¸¸øÖ­[…\`bb’——‡Æ0ÄÆÆÒh40<9r$>ýrÙ²eQQQX´`ÁئÓ釂î´sçÎf‹wîÜyèÐ!50™¨««»víš³³³ššÚÔ©S‘u‚}²Aƒ#c-ÄÅÅ>|5200À‡üóÏ?îîîøÑÚÔÔtþüù-[¶ ~•’’òîÝ»ï”+H¡P(»wïnkkëèèÈÍÍÕÕÕmooÿôéä’Òh4UUUCCC¸ZYYYVV¶¶¶–N§[ZZ‚3×ÑÑáóù­­­t:ÝÆÆ¤ ‹‹‹µ´´ð2ì cРA°++++##C§Óétº¼¼ü€$%% ‹‹‹étzß¾}Á…(((())UUUÑét 0T*µ©©‰N§O™2…@,##cbbBo–HMM0`€àô–B¡(++£3­òòòL&³²²’N§6 rX«««ÅÄÄÔÔÔ´µµI$RKK N·¶¶†¬Yü£ÍÌÌàÃ!C %%% ¬lh4š™™Ù»wïètº––DÛ †¦¦fYYN0`¬lTTTètz]]Nÿã?:‹‰‰½yó†Éd"iá"ÆssóÜÜ\EEÅeË–Á022***¢Ó醆†.ÕØØØÒÒ‚—ž×ÑÑVIII:ýúõ“““366®­­%‘Ht:}áÂ…`#† òîÝ;)))YYY˜(Ñh4SSÓ÷ïßÓétØD!üx BŽ•J---íJíXFFÆÔÔ5ëàÁƒ‹ŠŠ$$$ètúš5kH$Ç+,,4h¸¸¸±±ñ‡èt:$4즦¦&lƒ«««KHH°Ùl:>qâDد200hmm±jÈïÀ0lÀ€eee Fìääïyذa¹¹¹t:]YY\¸`×jllüôé¤Tˆ‹‹ãSf_¯¼¼|¿~ýêëëù|>NŸ?>~]%++;dÈÂÄ“L&+**Â/§R© ÝP]]]WW—Éd¢¾4vìXüΫ´´´‘‘‘ðl²²²ƒ†‡R©Ô¡C‡’ÉäììlX©P(&“‰ ‚‚hHÓétsssØ­ªª’€Ð™””Tß¾}ñ)9ýû÷¯©©î´xñbH2:thAA”””œœœð´ºoqqñŒŒ ##£#FäççKKKËË˯X±b˜?~433“––ÖÓÓ+))¡Ó鯯Æ0UTTìÓ§Ouu5N9r$LÔ´´´Èdrss3˜d9$ÄÄÄòóóåååá}ÒétSSS))) |ÿþ=Þ4ñx¼>àãT*UEE\…Báóù4­¡¡¡££E7ßmGG‡˜˜X{{;ŸÏOJJJHH©‚þ–q¬ýú©‚þ©‚~¶‹TAEADø-!r9"ˆ ‚"ü tž>@&“ Û!¿{@Ã0))©Þ$‰a˜„„D¯i&h11±^S#èuT*µ7 ¥¶¶6‰ÔûŒƒ¤¤$슌ƒàû!ði}—ÓÐÐÐ}J’ß\.÷þýû½f/ðêêê””ÁdÇߺFT*õ*süt455566ö¦¡ÄápZZZz™qhmmíŠ0ûwDyyyss3°¤= Æ7a~ærÄÅÅ…>ýv––.,,ÔÕÕí5.GRR²¾¾^MMíw¤¥êbbbyyy$IKK«—¨Ôššš¢¢¢^3”à¬Feeeo2RRR?~ÔÖÖö¦^ ‰ææf_W»±˜˜Ø7d‚èÜåÐh´o¨<úÓ!++K"‘444zSÆZFF†’’RoÊX«¬¬$“ɽ¦ãÑh4*•úéÓ§^S#ÈX£R©½É80 *•ª¦¦Ö›2Ö^¿~ý­Ô£Eª "ˆ ‚"ü®øŒËIKKƒÓÝ!!!VVVVVVxú#www(á5–.] Ÿ‚´†a\.Jð‡ë×ÊÊ rŽ‹‹³ÂÁËË Ê½¼¼ ŽÁc¶oß>ü• IÕ¬]»_òøñc¸‰‡‡‡àõ§OŸ†Oš5kÐY} Ãìì쬬¬ð\#ÕÕÕð]8h†””\ñþþþpåíÛ·»S‹¥K—≅0 ›4i’••þ daa!ÜsÓ¦M‚wè´Y=<< ‰ka¶aÃ(DD³gÏFoñ|úô JÐi¾ŒŒ |€E7±qãFB`ÚÞÞî#HÅV\\ áe)÷ïßwwwGÿúøøÀ•x–þýû÷C!¨ß",X°äPpâÐŽ ¨E8{ö,Ü!&&nÙ² ”³fÍÂ+NÕÖÖÂexžÍôôt(¾Q ÃBCCñïÈ1 ;q─"mW°µµE ’‚xûöí† ð%111p[ U%ÀÍÍ >6Àºuë dÍ3f̰²²úñ4ÌÓ¦M³²²êêHâË—/ñ|BÑÑÑøwK8¿Îv׺uëí}W¦‰Ð¬‚ç¢K›ììì5kÖ466âù¦Âž?~òäI Ã"##¯_¿¾hÑ"qqq(¼té…BÁój,]ºtÁ‚L&Ã0iiéI“&Aohh°··÷÷÷/,,Ü·oÜäÍ›7[·nÖBEEE¤ÉçÒ/]ºÄf³áÊ›7oR(”É“'/[¶ qn¯Zµª;Ì¥¥¥óæÍÒTøäÉ“àà`¸yBB©S§œÑ§gΜ!“Éðé•+W( Rt^³fMHHºØÎÎnÛ¶mÒÒÒ|>ßÊÊêáÇõõõŽŽŽðÝÒÒÒ+Vxyyedd¬_¿¾¡¡ô7000''® ½s玣¶bÅŠ·oßæææà ÀÊÊÊÍÍD"555ÙÙÙ—””lÛ¶ Ÿ¿iÓ&777t}xxxjj*|zïÞ½k×®-^¼øÔ©S4 /_¾L¡P,--7lØ0nÜ80s[¶lqwwWSSËÌ̼ví0M@âYmm­““|·¤¤dÕªUžžž†††P‚a؃ðîY¶nÝšœœüîÝ;DÑþfÆ p¸zÒ¤I _(++Û´i<èÝ»w6l@>&::zË–-h¤]¿~½¼¼®ôóó#“É3fÌØ¿¿žžh¹»»oÚ´ÉÄÄÄÑÑñÝ»woß¾ÅkL™2ú0ÈYúùùuU…¨¨¨C‡UWWãgçÎãñxðtooo …2nܸ-[¶Œ9¸ víÚuôèQ--­?ÿüóÓ§O999ˆp“Íf/Z´¾[VV¶|ùòË—/gff^¸p ÓÒÒ<¸k׮ѣG£}—K—.±¡›››ŒŒ \yñâE …‚—òDÓˆÊÊJüC.\T.>|X´hQKK ž’çÑ£G‘‘‘pÛ¸¸¸óçÏãOž<)%%ŸzyyQ(”‘#G:;;Oš4 Ȍׯ_öìY&“iccãââ"..Îáp¦NúÃl÷Ô©S>L¥RÛÚÚlllðú^¹¹¹NNNMMMøÆêêjUUU4?†÷ùóçoß¾ýñãGÂ$ò§`Ó¦MÏŸ?/((ÀÏqmmmwìØ!%%…Lú¨¨¨háÂ…---ßdè‹]Žžžž——WJJJdd$*¬©©ikk}ÙÈÈH s/++322‚Âúúz‚.ç¾}ûÔÔÔ€¤/77æ¤ÙÙÙp}ee%èL·¶¶–””@auu5²Grrrx9[ Ã***èt:655j/RòX½zõž={º"½ÇCIIÉËË+//ÙApõõõpóçÏŸãÙB¡¦ºººðiCCªéš5kf̘:µ€ãÇëèèWšq8œ‚‚ønß¾}&ÄÈÈÈËËëÉ“'øÕá„ ÆŒ=øîÝ»ÂÕwïÞÝÚÚJ ÎÊÊ233ñX´µµj!,5A3fÌðáÃaZpïÞ=xbii©`³¾ÿ~Þ¼yPøáÃ4ï611ÁK"á+ KIì„@0þøñ#AÝ«+8;;/_¾OÓ “CCCxEÙÙÙøÚÛÛ?|øjnnFk…ØØØÈÈHGGG4›Ú]ׯ_¯©©Ò!Càë...`R]\\ÚÚÚÜ9.\€nV^^Nè'Œ9ÒËËËßßÏfoooO¥R¤ŽÍfC °°pÖ¬YðôââbXa¸ººr8<õµ”””»»;ð-Ñh4˜ÃöíÛwÏž=@¨“ŸŸ*à PÁ+W®hhhu!°:BâImmm§z?Gåp8ø‰0ÇC MUUU//¯œœœ‹/¢ êëëáÇkhh6œKKKÍÌÌàÓmÛ¶ÁÓ -Z…………ÐrrrŒaºvúôéf srrú÷猪Y3---˜ ¢e" OŸ>ë4{öì &=zôWXßlܸ±¹¹™ 7ñúõk### ª]///$Äü£]ޤ¤¤‘‘›Åb5556óœ9s€¿K8€`jÆŒ?~ ij®uð¸  ]!(**RVVîÎN F322"hv7®¶¶ž8eÊàÄìÎC•””ðùÊ@÷iiiÙÒÒƒ <CCCè»RRRFFFfèÊ•+gΜY°`A§J\àk ´»ÉÉÉÆ ª.$?#²²²²²²7oÞ}õêU'''¼Në† âãã½¼¼À‚C&d4õíÛ·¹¹ÙÒÒR^^?#îêõ2™L¼*(¢’sqq±´´B} ŸÂK¡P ÊËË­­­555oݺVSSóÉ“'ÎÎΣG&È^TWW“H$`Tƒ¹†aÛ·oŸ1cF§\ŸðPü964#322êT€'$$dÿþý޽{÷†‡‡?~˜U/]º´qãFPi:sæ >ׂD"áÇÎOPâê€àà` ß]ºtéºuë Y•””º£]ù½·ÓóF£GnkkúZhÖžit}³½ÁPxIIIXXXXX‰Dò÷÷ïæ½¼¼ÂÂÂþúë/¨Ojjª©©©©©©p™Â©S§&''ÃãPìNœœœÖ¯_O˜w|RRRá‰:::h÷y à—£m¤+V¬[·®S’??¿dË*++/^¶nݺÏnØÛÛ‡……µ´´ˆ»‹æééÙ)ãd§˜5kVXX…BÑöíÛß¾} •®øYÚöØØØèèèÇM¯]¶lÙ©S§ ™œ¡êêê§N‚Ÿ¼õ£G¢¢¢Ž9"x«%K–„……•”” :nܸqìØ±aaa'Nœ lçNËÂÂÂNž<éääÔ³Š8p@[[{öìÙ=8µ§¤¤¶mÛ6ü†Ê°aÃÂÂÂFމ,W®\áp8ŠÌ;v 8pæÌ™wÞššš„Ï~ B&%%%¸Wçâ⢯¯vçÎXÖïØ±ÃÉÉ Úqÿþý•••p¥¹¹¹ŸŸßíÛ·#~¿fΜ™””?¾£££Óí«_£G¾víZpp°pͽÊéªÛq8`ƾD‚¦´ÖÒÒ‚ø{UU•ã+))‰žE¡Pªªª„?¥ªªŠÁ`t¥´all ”Ý}úôIJJêôš–––––x¨˜˜Ì£ñÓÕ;wS=l¯ZµÊÎÎnâĉ&õ«©©ñù|´R17…úúz4ººðóùüè—––ª««C`­ûÙ222°…'ÊÉÉíÚµ ª)|;MN¹\.~¸«7ÜÚÚÚñ¡C‡Ð:éäÉ“‚úW€òòreee¬âT*uøðáлÒÓÓÏ;—pýúuwwwA5t à ƒÁàp8hÎîââbcc#&&ÖÐЀ߱‰DRWW§P(„Ünâ¿ÿþSUUuppèÙy^ …¢®®Îf³ñ}IBBB]]]RRâ„hœÂ’•ìÚµËÄÄ„ÅbA<ÀÑшÈÈÈNÕuù|þgû’•••‹‹ N§R©(WaóæÍsçÎ…S#cüô铬¬, ·êêj” ¡­­ÝÖÖökªœ¡ð&òÖd2™°¡ð+#$$DOOoš~]—ÓL›6íÌ™3‚¸;JÂÃÃcccñÝ_ƒ¤¤$8—ó5´7à 0 ƒ±ZWW·råJð7l6{Ê”)ñññ:::æææ< ¬¯)Jwöå|||JJJº¹ÕñMàë뛓“sàÀ®*+Ü&6ìÑ£Gx‹ö5ÑgÔUzLׂ(DÙÞÞ† oÌ`0\\\Ξ=Ëáp½©¬¬lwôÁúöíKÐíþ":tHAAaÉ’%=Ð"?B óÙ³g§NQsáØ³g¡¡áœ9sУϜ9ƒ¶^¾¦ANBÈØé¦síTÀâWCPPPjjêW®× I$Ì¿{¡Ëa³Ù‚Ò¶:::ÝIXêèèè~`qÑ¢EëÖ­³°°èê99¹¯< êâ⢣£ãèèˆJ®]»†¦fS§Nõðð€Í•†††·h[[ÛVMooo¤QÚ»w¯¡¡ágc)`»YÙØØX???B¸’°®ýÊ8xQQ¡’qãÆ¡ÎvçÎŒŒ þ¨?HpÿE€¼ ži_òù|Á95~¡†‡——W]]^묹¹Ž”㸘_>j¾÷¶G¯Äççûø5Á¢E‹ ™L&ì@BùСCÙÙÙPhkk ºß,ëÙ³g†=~üØÑÑ>MLL„àÈ‹1™Ì &¼xñÃ0###(Dm¿DmŸíÆ"‰6DAzi`MDA¾ ºLè5jfø°@/«™Lî55‚˜goj£ÞZ#‘qøÿªFß|3¢K—ó³Rè¾PzO¯©TSS—Ëåóù½¦F­­­mmm@ýÔ;j„ò-{Mø|~/«†K©í5•jnn†”÷oR£ŽŽŽo›@۹˩«« êM«.—Ü›jÄf³?~Ük¤ I$ôlàÜë5âp8mmm½i(Wl/3­­­ááá½&·ˆL&755UUUQ©ÔoÒâJJJ†††ß×åÈÉÉõ¾Œ5[[[QÆÚ/ QÆÚoáo cÀpú[2ÖàÀCï¨ÑwÊXûfADA„‚Ϭ¼êëëËËËŒŒPIEEœåVWWG^ôýû÷@ôdhhØ}VFF†™™¬õø|>¥Ñh@ÛŒaXSSœ[”••nÿêêj¼¸ššš¦¦fII žÈK__æß¾} ”h&&&ÝRùù IDAT?MÝÜÜüþý{TRSS“——‡a“É a< AtÄÀÀØkÞ¼yƒ?ˆ>pà@`õHKKƒˆ*"Dhoo)))÷hMMMMM þè_ii)ŸÏGsÂñòåK###ü4-%%Ã0*•Š˜ûZZZ^¾| Ó:ccãNïSZZÊãñP³¢Êâ›5''HØ $µéééè?™L>|xGGþt¤ŒŒ ¼áºº:àùWTTì”È«+ääähiiá›=ÔÜÜœ°xE5¥Óé°fª­­Å“Ó¨¨¨À!VÔ—ttt¿r^^”hÙð}Ã0.—ûâÅ‹nr#VTT´µµáW>|øäl¨/aöúõkØz433Ãn>þ|È!°!ÌápÒÒÒð³ZSSS8N‡ Ñ.//‡Ó²øîTPP //ßÕh¤¥¥ <¸«]覦¦>àW¥UUU TÞ°àÀ>ª,`РA¨§¦¦~–"ö›#55•ÇãQ(”Nž°Ùì?‚iTVV <˜& ÃŠŠŠð !öð‡!;;[GGÑG ŽV‚=|õê•p+ñ½\NCCCffæ‹/}}}¡°¼¼ÜÏÏNÎ5jÁ‚šššÞÞÞÀ¹;kÖ,[[[A&±ÔÔT‡””ø(!!áøñã0Z6nÜhnnÞÜÜÊzÚÚÚ«W¯611‰ß¾};rxþùç’%KâââVnnîæÌ™“““ãéé Í¿páÂéÓ§–¡«µµ555õýû÷>>>èvuuuppphh( GGG===ô•wïÞùøø€Û˜1c‹ÅRPPرcGMM è`váÂ55µ”””'NÀæÄ¶mÛFÝÑÑsþüy Ô””Ö­[‡NüÖÔÔxyyåççLiiiAAA@@€ššþHs§xñâ›Í^³f 0!Babb"(vHHHlÞ¼Ù¢¥¥%**êêÕ«`zþúë/SSS­>~üxìØ1&“¹cǨ¬··7pCÌœ9ÓÎÎNAAáÕ«WçÎ3½|ùò)S¦HHHÌ;×ÐÐ ±¸¸¸¿¿SSÓÁƒá¶d2ùáÇuuu¡¡¡@|пÿåË—w'@œ]SS³cÇwwwdž={vòäIàwÙ²e ʃf}ðàÁåË—aVô×_™™™%'';;;£!dcc³råÊâââ›7o>}úÃ0++«9s樨¨¼yóæÒ¥KàŸæÍ›gccƒ¼Njjê¼yóRSSÁˆ$$$´´´¬Y³æ³´¹¹¹T*éuBÇÇlccÃb±³²².\¸ ŽŽŽÓ¦M“””|öìY[[Û¼yó `6ÓØØ8sæL4•ÑÓÓswwõêÕ‚ ÐTfüøñ7n,++»sçÐXZZΟ?_CC#??¿¬¬ÌÍÍmñâÅ]…Èà¡yyy0±àp8ééé£FÔ–––——çïï(Õ«ªª#""0 :tèâÅ‹‘:†aQQQHy+''çܹs“'OÞ²eKSSz×/_VRRJNNîèèøóÏ??K}ûm‘””äêêÊåri4Ú?ÿüƒ'±nllÌÈÈÈÎξÿ>Ú®¬¬ô÷÷f ‹… jkkÇÄÄ  Þ¾}{ôèQ[[ÛŸål^½zUWW÷Ï?ÿ\¼xqÀ€Pèàà ¯¯£•F£âçjQQQÞÞÞ†iii­^½ZÐJ|G—SVVæááQ]]fØÿÄ À"=zÔßßÓ¦M^^^FFF Ïáè訦¦FPMNNöôôlllD%ööö0婬¬œ8qâ«W¯ª««“““áÎqqqû÷ï¿2~üx‚^ÐÂ… Aiêí۷ׯ_ŽêC‡-Y²X4¬¬¬Œ?+aP__ïááAàiñøW¯^½xñ"žñþòå˺ºº ÷·|ùrUUU Ã> CÁËËëÊ•+222|>_UUµ¼¼¼¡¡aóæÍ0ÍÉÉY»v-MÖÔÔܽ{7""yÖÌÌÌË—/"S!¸uëÖ»wïjkkñ…þùgYY0I9òÍ›7¥¥¥ÇŽóúôéÓ={ö’)JJJüýýŸ—.]ª¦¦fmm¸~ýz˜èYXX 8‚¾¾¾øœœ¼Ã¦¦¦ˆˆ0¬™™™áááPîççwêÔ©îp…„„¤§§ª—/_ûXL&?}®¨¨8x𠬡SRRvíÚO=z4Œ%¼UÕÓÓÛ¾};†a[·n½ÿþ’%KŽ?>kÖ,˜²L“’’.^¼ˆ'1óðð ¨u…ׯ_Ÿ9s¦¸¸¯x–`nn¬0+W®V!—õë×3<„™™™¡¡á¥K—jjjœÖè ã1hÐ B³FFFVVV• rvv~ôèÑýû÷…§i\¾|¹ºº¯BÝÜܼhÑ"ð¯555 øì•'Ož¤§§Ã³"""ð.gõêÕ ³—••åããƒf¥ÇŽ#L´/\¸ÐØØ(¨/þ½1wîܼ¼sæ ^óôK|”Ó§OÇŽ7.11fß]I¸P^^uÑÔÔ„(8×ÜÜÜwïÞIKKC`DH Ä+†466vª“DÀ¸qãÆçåå…—h[¼x1šŠ*)) ¬åMBœª­­ ª###cii‰Ö¨½` ­¥¥…F™L°bÅŠ+Väs€Q,S©TÐUƒ…r@@@zzº ßyIIIVV–žž¡ÉNž} 6 ߬EEE999‡°d?wîܘ1cm?ûöíët€<|øÌðaþZ{9èëëgff禱±qw,r\\œ¹¹9AÊÞÞn"!!ŸË×ÖÖWUU¢¸ššš¼¼<\ihhÈb±Ð³²² >2þM ®®®©© OÔÓÓëÿbfjjZ^^ó4ï5jÔ‹/ UUUegg‡bzmmm -&&6vìXø.°é¡ØwWì×=N«Ÿ3gÎ;wø|¾˜˜Xw–J>|`³Ù¦¦¦øåÂ!CáUXXXà·âãã÷îÝ ëŒ©S§B½Èd2‡ÃA¶¦©©)55U¸ _Ï0sæÌ€€ˆ[$Ú¤¤¤ÌÍÍá÷Àžr™¨Yy<ZÃÚkРA°ó1tèP´ŽG*=²°°è¦”Ù!333((ÈÆÆFº h4ÚüÕa0\.÷?þPPPÐÓÓƒB 7dȃ—/_B¡‰‰É×Dçi4ÚgÕJJJ‚‚‚ÒÒÒ X,~‹m†©ªª"%KKËçÏŸƒ6eMM]§–¿2òòònß¾mdd„A½|ù²OŸ>ß$aì›cÊ”)0»…$~ˆÓ =×!C†@ç¤pý9.'..®¬¬ v\Ž=^]!&&&""b÷îÝŒ•+WkØÿÕÔÔ€¿K‡†âùóçýüüÐ,ûæÍ›†††_´ÄAQKqqñ®RÀÓÓÓSSS¡‚W¯^½qã>°æààpëÖ-h0¤n„Ü5jÔÈ‘#ÑÆ¸§§' ¬Ñéô#GŽÀÅnP]]ÔÜܼaÃÁ É×ÀÉɉXîo‚ƒƒ™L¦ƒƒƒ»»;*¿q㆑‘L”–.]ª££‚i=ŠˆˆØ²e‹šš\‰âc\.WSS½™ÊÊÊ3gÎ|‘–pff&Ú·°°èjå±iÓ&|`mÖ¬Yè#%%¥Ý»wïÙ³ï3 m ÍzóæMÔ¬öööööö[ÿ{_Wãö†ý4Ï#M%*ÔA¨ˆ2סÌCƒ#cœLQ¡C2O¢Pf•¤D¥A¢A”æa7ï]»ö¼ß÷û_¿ç}vm!޳ß}}ªµŸi÷Z÷º×uíØ‘œœìêêº~ýú3gÎ@Ã퉉‰?öóóƒ(•>Ä»wï}z·Zv]]]›6mêI4™%%¥«W¯ž;w.**ŠWéüùóÓ¦MCKØ5Œ3ÆÚÚšÿZó7„­­­­­íñãÇcccQv®\¹bnnNp¶ÿ&8qâüÁápˆw»iiiíØ±6ûäX/~nt`` ––VRRRdddWW×Ý»w{r‘ÉäÛ·o·´´àGðŠŠŠžä;¿ÉÉÉ/^¼xñâÅëׯ¿û!Ë–-»páÂ… /+))‰wŸ366–WPRYYîÃYZZzñâEuuõÈÈÈÔÔÔòòrÂèükN¥§§C|øPPPÀg‘°iÓ&üÐó#Â3„9ã‹ÿá»w555¡œQðEMM x¨ñ(((€¹ëׯ‡Û 1 8pàóçÏQîåäææ>zôhêÔ©–––ßz/ƒÁà=ŒÙÐÐaßgüP±ÿˆÌøñã{/|æü«R¿¿-ÊÊÊð›ÿÄÄÄðѺÕÖֆƿmÛ¶ßb•ó­°··¯ªª‚i/„»¸¸t«Ù\WWwýúu¼²¬9âããyç€ÙÙÙòòòøÐíÞ ,,ìñ¬¬,|”$<ÖËË‹p$ÓÇÇÇÆÆ/ C§Óïß¿N6€ººº¥¥%h;VTT´´´”••áãd~ ‡¾¾¾|Fuu5‹Åª­­åu‰ )’a_açÎvvv„j¥R©Ïž=ûÖp üàQÐöööÄÄD‚ èýû÷QQQhÏÏd2 a&)))ºººø :88 Xj&“ møÇ'€111ÚÚÚ„Oê%:;;}||œœœð‰%%%aaah»å›ÐíÒ§Ï‘––¦¥¥…)8v옿¿Ÿ/ Þ¼y“žžÎëÍÌÌTUUíÃãú} Ÿ©S§v«YE&““““ñ>ƒßä >¼¦¦ö31 ƒ-ʉ'~úô ‡ ÝõÑ£GcÇŽÅ»Ýâãã ÊsåÊ•p=›Í^¶l\ÐÔÔ„ž|øPKK ?=œ>}zAAIOœ8±7zÏÝBWWwÈ!ðF …KãÜÜ\.—knnN"‘’““a3\WW6WçÌ™“ 'Šlmm!ZzÅŠQQQp aÕªU†±X¬wïÞÁÉ!ƒáä䤫«{ìØ1xïƒ>|¸téÒ>©ÔU«VA¼5‡Ãè>%%%[[[ÈFƒí–²²²/_¾ØÚÚ¢ÛñãÇ»ºº`¿‘P­h'ùÁƒpêð%K–(**º¸¸DFFBfÿúë/ø©­­íìÙ³øÓ9466†¶··ÿÈ™üe˖ݽ{Â¥ @ˆÁ`ܺuËÅÅ…Édæää466BNÁU=xð`Þj=ztVV$*++Ã>GmmíÛ·oa7n̘1êêêøé^\\\@@@_SOKKCs ;;»!C†Ìš5ëíÛ·àFŸ2eJO©RRRóçχ/‡¶^‘Q£F¡Îa##FŒ ‘H(&&Ö›`‡ž ))É_"ß[) Lž²³³ÅÅÅa ˆŠŠš0a‚™™Þœ§§§Ã©ƒ™3gþ»â¤nnnW®\…fX«utt<~üxñâÅÝ^o``PZZŠjy cbbŒŒŒ¾isîWÂÙÙùÖ­[øÞJ£ÑîÞ½»|ùrƒ‘ []]]„À㾂˜˜˜˜¯¯/ˆò~úôIOOÁ`466‚ÍfËÊÊ¢˜îJJJfggS(KKK˜R555Á©®E‹ÁùÕ«WƒF§U`j6a°®S§N½ÿ>¨5C”*‡Ãioo§ü222£FÒÔÔTTTÌÈÈ P(æææÈÌ`0Œ÷íŒ5êÓ§Oeee eíÚµ„”ÒÒÒYYY#GŽä]åN~©©©õë×/--B¡Œ9òÏ?ÿÄ0ìÓ§O4MOOÏÐаµµµ°°B¡ÌŸ?&Èæææùùù••• eÓ¦M°k5iÒ¤„„„ææf …G1$%%Ç÷ôéS …"//¿iÓ&üg°X,EEEüÚ‚Éd¦„„þʪ08vuu7m½ÚÚÚÞ»wB¡°X,ˆ)’••511yöì…BQWWwww‡•eEEᥚššˆˆ¯Ö Àe æ‡ªÉÂÂBFFfòäÉñññ---+K4‡ƒ_¡ªªª0 55•B¡âÄÅÅkkkЩۄѣG£=kk뤤¤¦¦&(^ØMHH°¶¶–‘‘9rdBB…Béß¿ÿš5k Zû÷ïO¨Vhêyyy eæÌ™0F˜šš–———––R(ØÁ",/&NœˆÖs\.—N§CLs·]«£££±±Âb±ð\U ƒ‚ðaÃÔÕÕÍÍÍ +**(Ї‡>j‹J¥Nš4 F ‹'OžP(999X£¨¨¨èèè¼|ù’B¡ :J11±œœ …2iÒ$|(N722âO˜D¥R­­­Á´‹‹‹OžpàœHb³ÙpðUII ÑÌaVZZ|õ€×¯_ÃùÞ3f ž‚¨¨({Zµj0{†††âº8p —$Ó•••ááá@^ ÈÌÌ)==f`Ïž=ËÌÌ„ôÜÜ\‡Ë—/wvvB"Ð2¡õ7nlnn~þü92¥Û¶m"¥šššíÛ·“Éd< `FFÆãÇá±EEE‘‘‘hŽö¦££~ŽŽ533Û¿¿žžLR÷ìÙˆøÖ\\\Àÿ2üõ×_óçÏc2™«W¯†œÊËËCCCáã«««;¶eË–ÔÔÔçÏŸCb~~þ;w,X0zôhD¹rêÔ©¾ÚÀÿn{3pà@˜RìÝ»OýàââÓæááqêÔ)EEEÔ„ ~RH&hQòòò@`PUUE¥RaÒ——ÂyEEEFFFxëÖ-^`OOÏ)S¦a%ÚÕÕõöí[Žß¼yƒd 555 …?zôèQ£F¥PRR1233#\9þüŽŽŽœœ|"\ÓÞÞîááÛ ÜÝÝ‘°!j3RRR°Ž‰‰‰©¯¯Ç0,;;©‚@ðÞÒ¥Két:AæNJJŠð‘***ÒÀ‚SYYÙÕÕé999ßXPP€òxýúuà£#`éÒ¥4-55¥°X,ÄT­¬¬ìîî^RR‚oHõõõMMMðØŠŠ ‚dÆÄ‰€+Ì-TЬY³ Õùúú¢Éߊ+\]]±ÉILL}zΜ9ÿ®~¨UÁ7ìÛ·ÀŽ2ÒÜÜ P999¨¾?>}ú<¿Î䤨¨(Þä̘1ƒL&à 8qâD‚:VOHOOߺu+ÿÝ9999àÄÄ› XkƒžnoxÑsrræÍ›‡…ø@FFÆÖÖ6??or,,,jkk!ƒ£G×Ä+½žâ IDATWáããS›“'O‚» 1ÏŸ?éô477Ó 3***¶¶¶L&“`Ûeeeü=„Ð] ÁxwïÞ…ÅŠ´´4ÒPáêêj:®¯¯_óñ8 z*ˆdlÁ‚½Q®%‘HÍÍͽ” &Ê£Gâ/]ºäéé #òíÛ·{óœ×¯_CáÏœ9¬š—\ºtI[[é™Á ÷àÁƒ »Ônã˜LfVVVDDŸWƒ(Ù—/_ðª È_:fÌ>ЖñTmmmä;466644ÀDmöìÙQQQp¥••€®_¿><<»å/ïÁ¿TVVù{¡·ª¨¨ðÎ]zrB„„„L™2^túôiàåCŠ0¥@ÚßHkîþýûT*Ü6EEEÖÖÖÿÑè2™\VVÆ»öý{9äææ655÷699ùõë×K–,áËúõë :ði€9íÎJ\\\zzº»»;3¿Û- 77· §ùôéSQQd0+++!!ÛkÖ¬¹té|yII ìy!?ž¯¯oPPò’Í›7oçÎà¦WRRB:l$ ܉|¾äÖ­[\.÷«ÅÛ-‚ƒƒa†ÒÕÕuüøq…ä_•••kÖ¬‰ÅWÜÅ‹!³Ÿ?þêôâÏ?ÿܽ{÷W tÓÓÓ_½z…Tø¾aaaîîîàÃÜ¿?^©OSSsïÞ½h œâãÇGηììì3gÎ ?dxx8…BY¶lLn¼½½‘°ÛÉ“'===ù˜Æ®®®U«VÁNÉ÷áĉ@ ýMÜçòòò¨-566‚WíD&&&"¯iNN™L†öœ”””žž¾pḸ8mmm097oÞ411éiÿ:~ìØ±œ¶ÿóÏ?ªªªóæÍwýµkצM›U'Nœ?~¼ºº:HÿWB–>|øîÝ»¿þú ¿ñfllü}B}ˆ   cÇŽÁ~ºxðàA·ƒð§OŸ.]º„ßvý7MNCCFƒa%99ù«žÊõë×;88L:•°Ä?~|PPøÁ kXž={–’’²aÆÞÈ~üøqîܹ=Q ÛÙÙëYYY™Wá ùå[ZZ ƒ………àÊû¼Ö¬Y–Q&ãås¶lÙ‚NêÎ;w×®]hW@\\ Ç………H¶ '@Ùöž´•° 7n8Ö€žRRR<<<!•Y˜ƒP 888øùùõfäjiiimmÅàqêÔ)¤€ëçç‡ßüÀãÝ»w¦¦¦0…c¼ÇÉÖÖÊ-??Ö@***øÂGÕzåÊ•––ggg4:t(Z8p ££ƒO^Ølöû÷ïñlüß„“'OŠ‹‹/\¸ð[µ6ðméãÇøè2™ÜØØˆ²@"‘èt:\œ˜˜¡®eeefffÖÖÖ¶}ûv}ÞíÜŽÍfã#t¾GŽQRRrrrBç -Zͦ¸¸˜N§/X°`Ë–-&LøOœgxüøqffæºuë;óeeeæææÿºаaöoßm©Šà=:0“Éd¼—›J¥VVVþˆfy_šœoEqqqVVÒ455ÙÛÛ'&&ÊÉɉˆˆ@Gå¯üøüùóøøø­[·~ßÈK@hh(´ã™@ikkÃÐŒºÍ–-[\]] ‹Ð¹sçîÞ½{̘1¨çÉdWW×Þ;"°_¥ ÚÒÒ^û¦¦&§…  °ôüÏ;88ìÝ»×ÜÜüÇ?xþüù(lé»OHKKCëBꇯ^½ŠG³@DD‰DZµj~hð÷÷Ÿ2eÊ/à~>uê—Ë]ºtéwœënoo_¾|yŠ—oܸ‘>}…£GÊËË/\¸°' @~~þöíÛ!‘Á`̘1#>>þ÷´7qqq©©©žžžà^û=Ä2º=Î Ý-ë ~®É¹rå N‡¿çÌ™ qKKËÞ¨AS(”ŽŽŽ^ڛ͛7»¹¹ññ?ÿà˜xüøqmmm‚ÐKyy9¯voqq±žÒÅb}úô©—/ºqãFgg'>íçaöìÙ(ÂðêÕ«HÖìèÑ£ºººéÉž—†††½á¯KKK{üøq```Ohjjþ xAmmíæÍ›£££ c4Š@ dÂT´ººšB¡ôæEL&söìÙß½Å]__¯­­ý}<"l6›°þF^µÛ·o‡„„|ë{n󃨫«355åoo0 {òä ›ÍÆ0ŒËåZ[[£Ïßmmm]]]¼öæèÑ£†††ü£~~ 6nܸjÕªžVáÝÂ%%%‡ÂGëýË&gþüùT*†õ%K–À¹Š;v>|wîÜ 3ÄÕ«W{xxà €¸¸¸¾¾> L×®]ƒŸTTTž>}Êç=BY¹r¥§§§‡‡Ç‰' qÓ¦M p cŠŠÊr<ØØØ´µµÁÃgΜ [/^äp8kÖ¬quu ]£íÛ·ƒ¯öìÙ³[·n…•iXXÚí=+ Ã$%%333UTTnܸOÖÕÕå¿ÐÚÚÊår¿[Û433ÓÜÜœËå*((À)¢Aƒ:tÞnll ]III ÁÁÁ( ÿþ]]]àgwss;|ø08‚wìØÁ_/ËÊÊ 2+--‘‘¡ªªzõêUxžžÚv¦R© åÇg…OŸ>]¼xqkk+†aÊÙÑÑáààðâÅ uuuOOOxõðááóLž<™·Z¡îÐFמ={œœœ‚ƒƒýüü š?00‰ò‚Ëå–••œÝ÷áðáÃ(ÔíŸþ±³³;uêÔöíÛA¾/44´'K ¨¨Ù4hЭ[· ½³³³­­ _¼‹-ºrå \¹|ùr8‡±{÷îƒþóÏ?†íÚµ«—bØòòò(b­[LŸ>B¡À»@øÌ™3ÒÒÒ´¹ÿ~fmm a `>Ïœ9£¥¥…<\.WDD¤'ìÏÀ«W¯¬¬¬à\NJJ ˜ÉuëÖÝ¿øðáÛ·o‡¬3å"&&®Ä0líÚµ0Glhh022"„Øü+ðóóÛºukAA~h²µµUTTDÑ’’RBBÜB§Óz³‹ñÝøŠDN§R©µ>˜ÊËË£À0¸L¬àš››ð‡ÈH$’ššš ƒ[YTTþ‹Á` -_ úºº@¹ ''I¡PÀ ¤¤„‚µZZZää事ã#ÑÆd2Éd2~ªK£Ñ`,“••…8´ŽŽ¾ñ9UVVFæ­¹¹|8jjjÐgH$‡ÃAÏ„Q€Ífƒ#Q\\l“F£uuuá'¼T*•Ãáð‰»#H´544ôë×"ŠWDDùIX,D¦JJJB ó¾ŸÓn«­”””8&>³èÝf–·9á½a|$ÚºmNðR([.—ÛÐÐm åTBBÕl·ÕÚÞÞŽo$ЖZ[[aC®_¿~ø7 ™Ëå’H$>n(‚D•Je³Ùh$Bm€ï8Жú÷ïJVE¨s8[ÿjñ¢«  €¶9a†Î[³¼K1üK m¼}uXÔUÛÛÛ™ µ%€ªª*tÕ¦¦&ؾF}߆Ï /ÑFè5l6»¹¹ºƒÁ””””0atBã!…BÿñmÝMhæ„yë´Ï%Ú¾²Ê‘’’" ârrr ~LÓñšÓÐ] ×àM )@£!@FF¦ÛU‹¢¢"ï$¢Ûì«ÀJhì#|>7§½É,@LL¬Û\ó§ó–0ðÆbò¾H\\œÈû^BäE·™åuFõ>³¼Í©—øj ‹ˆˆ ÞœöT­ÝFšôäì"2Þœ÷r øjî6§Ýn±ˆŠŠö²x»í°ÊÊÊ_õqa_Û×áí;¼M_zÙ–¾:DüTÞ(&&†*]RR’ð+ŸÑé÷ñþñï8¼%Ì[§}!ÇšB!„¿B“#„B!Ä/B÷Ž511±ßjyøƒ€ã8 £ @s©&iiiË‘„„„ 娣£CTTTrÕ$///H"@†ÉÊÊöU5á·<–Éillüÿ""", Ñ ØlvLLŒ éœB8@ZZš e¨©á ØàÀd2ÃÃìŽÊËËûjpÐÒÒ255ý¹&GUU"Ö|"Öþ£ D¬ øG¬ýAˆXŒÑ±&ÀG¬ FŽðk}ÒŒ…mB!„Bü'ñ• i:ÞÑÑ´ëèèKä+lkkƒCªªª=¹Dëêê444`7¥¦¦¥‹‰‰A,&“É„“RRR(P¯³³ŽSÈËËC%…BÁûUTT ¾©© ˜ÔÔÔz•â“ÉlmmůºººZZZ`²ÀHÊ›Sô^€††:^P[[«¥¥…–Vl68êÅÅÅQ¨"FƒxBœ7…Bé +6‰DêׯþX”0>”¯¤¤$þTííí\.ªåЯ_?ˆ¨nll„HBNaà ȦÓ" (a>™åÆÆF%%%|µÖÕÕ#Ž@o…a‹Å‚3+(§è½hˆj–B¡ˆŠŠâ£¥›››á\NÿþýÑÌ—D"±X,p2àwá|LoÂy;::Øl6>P•0jÃøæ¤®®Ž?—ChK(§ÍÍͨ-Ñét T@ÅK¥RñgG¡9µ¶¶Â)>¶§—"0 2™ÌÛ–¨T*“Éäí;ݾ´Ûæ ˜·f…ø466*++ãÛRO%Œ:?÷!Dù›²²²˜˜üáàààààpúôihÍÍÍÍÁÁÁËËþ‚aXUU•  ÃFŽéð?ß(˜AÊöíÛah¦R©ÑÑÑxäȰׯ_G÷N˜0dxH$’··7$&''#r->`±XeeeIIIx¡ÆÎÎΘ˜xΡC‡ìCÍÍ͇†_ïܹãÅêÕ«§M›†> è8+++ËÊÊÆŒãØ›wïÞÁ5ëÖ­“@£Ñž>} ‰ûöíÃ+—´µµ}šW³®¹¹9((^zÿþ}xi]]ݦM› 133šSEE ­ÅúŽ““¢Êż% l¤¨Á Ùâ_´ÊùôéÓêÕ«©Tª±±1JŒ‰‰)//BÙC‡]¾|yëÖ­!!!FFFÐÈÜÜÜTTTfÍšEÈÉßÿ ãÿ¾U\œÀJ[SSsåÊHLNNþûï¿£££222 ñÌ™3'Nœð÷÷ß°a°ËH¤#GŽÀ”|Û¶m®®®  fgg×›ý.‰âWøévrrrbb"¼1<<<$$ßyŽ=:dÈøuÕªU***@GvñâE©ûúõë›››ñcD[[›³³3èâ®X±âÅ‹………ÉÉÉðÀ;wîøûûÈßÒÒrùòå»wï~•fÍ××·¨¨ˆài?~|]]0IO˜0áãÇ•••>>>𢴴´õë×ãu àó"""nݺ…å0 Ûµkþ_ ÃwìØ6QQQººº¶¶¶999ŠŠŠl6[GG§¶¶VUUÞÅ`0RRR€‘%333** Ò£££÷íÛÇ_¾pøðá´´4‚DÛìÙ³Ÿ?+' üÔ¬¦¦fëÖ­ð–7oÞ¬]»è/íìì@áÞ½{gÏžmllj”å¹sçÂö¸½½½††ÆØ±cwîÜyúôià Ñ××ÏËË“——çr¹>|è¢ÒË—/÷ïßßÖÖ†gç»qãÆÈ‘#wî4õË—/Oš4 ìߊ+TUU§M›FøæM›6‘H$üK;::ìììJKK¡Að¼£P(QQQ—.]B†!88ØÔÔôðáÆ9;;«ªªNŸ>ÝÝÝÝßߘ¤ÇŒ«££³zõj …LkBü³²²xe >þìîîÞm ¼zõêßq¬™ššfdd¼xñ/4>|€{òϰxñâÛ·oãítW°=À’­§§ÑÙÙYZZÚØØØžÁÇó 8öÌÈÈÈÏÏÇ«'(***))Á·uuuõ’Q´´´üà}züø1öÿr!Å<¹¶¶èåÍÍÍÍÍÍ)JEEE{{;º>22²«« 6ùæ­Õ“>ˆˆˆP©Ô^’ß¹s‡D"mذ/ÑVSSEEEQ[ÒÕÕ…¹ (ñ ÄÅŽÿ~ç쬣 èìì„Ïëé¥àûê–ÒBˆoLéxçÓ§O/((=\h4Ô‘œœÜð~ÿ^&L(//ß²e Ly3ËÂÂB}}}ÂØ4jÔ(xˆ‚‚ÂþýûÑŠ¤¢¢bË–-C‡ݾ};ÿÇVUUÉÈÈ M&}}ýÆÆF Æï@|+LLL>þ ß6~üøµk×âÕÖÖ¦Ñhðä$444¼zõ*8g¶nÝjkkÛm苜œÜÖ­[áÉšššø¾ZPPàçç7zôè7‚o‡Éd0 […àÞ $$fî²²²0榦&¦­­_–éèèÄÆÆ&''c¶|ùrGGGä?vìXqqñ¶mÛøÒéô/_¾ qJQQQMM J‘¿{öìÙ³glé´¤$%%õõõá-hàSVVnoo‡Â·°°X·n]OÄ…...¡¡¡P›k׮Źû÷ï'‘H{÷î…ú}÷îÝË&VVVž>}zöìÙüYS `³Ù………„u¼¾¾¾­­-äqÔ¨QȤƒ…ËåæO7nÜHLLtqqéå¤DFF† þÀ»UC¡PzÒQœ?þÙ³gA4ÖÙÙ⌌ª««Á„#ž?ïß¿711éö„¢´´´²²24!}}ýíÛ·#íƒÍä<~ü¸ªª ȉ:‰wJðâÇGŽ !,Àå{CCƒ­­-Z6 ><11199y×®]þyNŸ>m``€VNûöíÛ³g(?VWWw{KFFü!!!Ñ3]ZZÚË—/!ƒááá§NÂ;ÖÖ¯_úôi ©sÂ7qâD##£néoÉd²‡‡r¬mذáÅ‹È'&&Þ¹s'$$dÏž=QQQ «V­âuˆ÷³fÍ"8Öø\ÜØØxûömQQÑõë×?~¥{xx m¼•+WjhhÌž=þ…ÅðáÃù¬Gkkk÷íÛ‡ŠÝÌÌlåÊ•PzãÇç½¥¼¼I¬ödÒ–-[Ö“cMKK+$$ü]ííí@˜%ŒÖ…„j%ø"æÎ å`oo¯««‹V°ÖÇZAAA``àÇñîâoEyyùÅ‹mmmmmm{‡ÃyùòåÅ‹###ñ'~Þ¿ëÖ-Èflllpp0:ˆÅb±Ðzàííííí½bÅ --­¢b=zt·T*uÁ‚àXãEKKKlllkk«——W·g\ÂÂÂLMMA:ËÙÙYKKkúôéGݺu+´Ï_¬Úòÿ'Þ¾}tóæÍn¹\uttP7IMMõññé®üÏ59ß OOOWW×ÒÒÒÒÒRƒ‘––6kÖ,qqñÔÔTpX#tvv!á–ïòØÙÙõ䈃¨*%%%üŽñ7í$ptõÁƒóqŒðA[[[UU~ºúôéÓÌÌÌÕ«W§¤¤TTTHHHTWW÷I|}Oxþüyrr²‡‡GJJJYYN¯¬¬4hPII‰¬¬,ajü#™ý“'O0 ‹ŽŽQ8ÞAƒÚöíÛ{É«O€¶¶6¼åÍ›7 ÍÓÜÜL"‘¾ûÄOvv¶±±1~ þóÏ?£££SRRÚÛÛ Æ›7o¾ªÀMÀ—/_"""¬­­{ã* ¸>\\\®_¿ž’’RWWG¥Rsrr¾©ã|þüYAAOÙyëÖ-öÜõ±±±^^^)))Ÿ>}ª©©ùòåKo<3H ÷üÄB|7\]]ÀÀápãðÂÿ¾É±°°€] Ã:::.]ºdkk+..¾`ÁüÌ< [·nEâ_í3222ø8//oàÀüCú~ü¬þ§OŸdddrïÞ½^^^ß§ ŸŸŸìر»wïâ‡KƒˈÒÒRQQÑÜÜÜŸjr` o,++ãp8ÙÙÙƒ ºxñ¢‘‘!|ÀÏÏÏÇǧÛ ïÈøöíÛ &à'Âü#‘V­ZõƒGA»ººrss Õ‘ „ðoš9]½z©;cfkk %Æ`0¨TjDDÄ·šœððpmmí3f|ëLj‰‰M˜0ÞÞÙÙ ¢®|†‰ÊÊJ&“‰_yŸ={ÖÌÌ öuÓµï†ššš¬¬,|Pܧ¥¥}Õädgg|÷ Fˆo…µµ5,ÖÁäœ={orjjj<==ÿµðn1hРòòr˜B‚“ð#F´¶¶B¢––ìû½yóÆÐдµ#FŒ¸téìÇΘ1®ïêê‚S…‘#GBb}}=x3´´´ú÷ï®6l<êúõë°0GOJJRPP€)¹±±ñw“ ihhhjjÂ) lM—””p¹\ƒÌÌ̦¦&CCC¸rjaañéÓ'ˆ733ëIw@RRÒÒÒžÜÖÖó÷~ýúéééAbCCÃÈ‘#íììÐ*-88XRRò;h fΜùäÉ:N999333ô"ëëëëêê&OžŒŽÇ?~¼«« ”@[ZZàMMM”Ù?‚7é?þ€Ú´³³KJJ’””äp8(𣹹900—XWW Áu|ÔÏ¾Š©S§¦¦¦Â²Fm‹•œœlgg×ÞÞ~ýúu¨ŽÆÆFÈ©†††––ªV>VÍÌ̬¦¦®444„í+kkëììlu}ú’%Kàvccc‚¨É–-[Ž;ßàçç×Ó&/”””ð;·üñ‡ÃŠ™2eг³3†aEEE`rV¬Xqýúux˺uëÀ.z{{Ãú, ï¯ppp@Ût !!!°5§­­ ;±Ã‡wss;räÖ]´Âðáà ¢U=aÚ´iøáéÊ•+ýõÂh¨©©¹k×.___ ÃŒŒŒ¼½½aR“••…_v¢#MÎÎÎÙ 6ÀiÆxiŸerdee!ÖY0 ¤¤ôöí[333AŠX«¯¯744F¬ý¶€ˆ5‹%0] "ÖJKKipPTT,**9r¤ E¬µ¶¶ UA…B!„øÿ_9iXRR’––†?:—‘‘lêS§NEÇÐîß¿Ÿ™™‰aØÒ¥KMLLº}Ô¡C‡6nÜ'}}}‘GHII ÎÕÖÖÂa=}}}ÐmCxóæMSS0Ø'&&"BL Ã.\ÇÊ®^½ çÃׯ_ß{ó^WWwïÞ=¼,M~~þÍ›71 7nœuÅãáÇÀS¹xñb8?ŽW Ûºu+Q€Ð|aF¡P€TCCãï¿ÿ†ÄÏŸ?˨Q£-Z‰¯^½zúô)†aÓ§OïÍ©ŽcÇŽRJ#222püÃ0‰tâÄ Ãtuu{:†ùòåKƒ‡Ì=z”žžŽ~Z±bPŸ?Hø7oÞLP¯Ø³gP§tttà‰'´µµ¡„?}úìv£G—^âÂ… 3gÎÄS «úÀ„¨ÆÆFàå4hœ®-**‚óË€ &€ÐÑóçÏ“’’0 spp@,>‘‘‘†¹»»#‚÷cÇŽ¦ÜîÝ»sÍfá98ZË---ˆ_‹-Bç1/]ºd›6mÂ+Þ¿ÿ®]»Gƒ›››¯_¿ŽÔ7JKKá(®©©):7ýúõk8Ongg7eÊHŒ‰‰¢­åË—óYV8pÀÛÛ»§MŽêêê'Ož Å ÔqÖÖÖ¼‡dïܹchhÈK<ºbÅ Äâºoß>ƒ!..¾oß>áýƒ8{öìŸþ‰Ž£Žƒao ××׃äÁ!CdߢÇUNEE…——מ={' ýÏŸ?×ÓÓÓÓÓËÎÎ~þü9؛ϟ?CbLLL·[‹AAAaaaˆŸüܹszÿ(_‘H¤Ó§OC °±¡{333÷ïßÿúõkô èvð3^¹r¥­­ RÎ;ÒœüÑÜÜìååµ{÷n<[jAAALL <çóçÏ ‚·7ÅÅÅðë½{÷òóó1 {ðà—ËE߃ÂþýûÕÔÔ ÅÇÇÃ0*•)bbbÀ¹PZZzãÆ H¬®®ŽŠŠ‚1"55ÓÓÓùóÎ…††zyy…††âwª|||àv555°MMMaaaH£ÑΟ?ß­½ ÈÊÊBf¯¾¾å ÆÙsçÎÑétH9~ü8>xa×®]gΜ¿»ºº"##ѽÐÜKJJPbUU:xÏ—.]òòò:zô(ž”/00PEE_¼---LJŸ °)———¿zõ } mÏŸ?ÏÎΆ”çÏŸƒìé7H$$^¹rŒë‘#G¤¤¤ qÿþýÀƒ YYY’{Bvv¶——×ÒÒÒðö¦¨¨žðàÁ`Õ¼xñ"•J…Ä“'O‚px@@€——שS§Â, ­­m×®] ‡ý'î­««ƒô´´´””H|óæ HQÄÄÄ”••AâíÛ·»% ôòò:yò$z)FCÃSCCƒ———¯¯/^诤¤$##2AhH?>LPqÅ0ìøñã¡¡¡H0{ïÞ½ZZZàB&!¾çÏŸ÷òòB³%À•+W455¡Ž4ð 'Ož„Ÿ¨T*(^þºUެ¬¬©©©„„ž ýãÇd2fЇÊË˳µµMOOGünnn„yÓÁƒÕÔÔð4QQQ‚þ˜””Ôøñãaœ|úôi°±YYYñññîqãÆnZ£LŸ>>IMMÍÍÍ Ã°I“&¡ŠÐÕÕÖ;Dz}ñâÅñãÇwë J˜{ddd€?œá...oß¾E¾ä€wM™2…Ðw,,,,,,ð®ZÀÓ§OCBB"""„¢ÏÕ CÛ¶m“””!æ)))½)--}òä ^åï×íåPSSÓÙÙ 9ùüùsYYÙWã‹üýý7nÜH DŽ:T†(ÏÓ¦Mkjjz÷îÝäÉ“³²² ÜÜÜrssÑ½ŽŽŽHÇ0!!ADDþóÏ?ÊÊÊNNNÒÏÞ£±±‘D"A+**Š‹‹ñcÁâÅ‹ïÝ»˯ÌÌLGGG¨?p€`vøðaŸn5t™Lfff&<¹½½ýÍ›7ˆ »ÿþÓ¦M«­­-((°°°¨ªª¢ÓépeqqqEEï$”?’’’¦M›&""Â`0^¾|É+DÏëR«­­]¼x1ll–.]ЍdcbbDEE9ñ¸qã RRRäåå·lÙrøða¼Ç_QQYA …ˆTPssscccçÎKÏþ&¼zõjüøñb·téRôSÿþý7nÜu„ü~£Gö÷÷‡¿+++oÞ¼‰¿üü|--- :ÍÈÈ “ɨéZYYuvv>{öláÂ…âââ/^¼…@öêÕ«ïã$¼víZkk«““Ó7IÔP©TÔk///‡fmiüøñÕÕÕ4 ß–Pß¹xñ"Nwrr"È'ö‹•’’‡]mìØ±È.–——ß¾}û««ØÃ‡/^¼¸÷$¼Bü8Ž= ža.—»nÝ:¤ã‡P^^~æÌ™¹sçvËÙú÷rºEYYY{{»““ðÛó*œ°wïÞ¡C‡:99hØþ[[[Ø'¨ªª:99¾~ý:''çÞ½{NNN„ àˆ#ÐíÍÍÍUUUÈÞ¨¨¨899œÈ®®®ÎÎÎÎÎÎh Å‹ÚÚÚššx¸²²2Á0räH'''GGGGGG´²²²Bß“™™ÙÓñ+:þâÅ ¸lìØ±øÁ]KKËÉÉISSvtKKKi4\Éb±ühïåæää„D"øßÏŸ?wrr"lêŽ5 嫦¦¿=6eÊ''§ŒŒ *•êééiiiéää„wÂHII¡{ÿøãäËËË‹ŠŠrttìÉÞܸqÃù€Í•nñôéS[[[x>a¿MNNÕѤI“ð% PRRâuïàçé:::peaa!^ôsæÌ™NNN °½ñàÁ¸lêÔ©qqqßgoZZZ¾ÕÞÐéô¿ÿþÛÑÑIâššš>}úŸ4pà@Ø“ûòåKgg'$r8ˆ¯{C£ÑaQŒŠ½¦¦¦Û÷2™L¤}Õ-ˆ YNNIýö„C‡©©©AGZ‚_†9sæ@9::ú†aUUUÇŽsttüIöûÙm©©©ÙÙÙ=‚YØêÕ«¯_¿.++ *ø+«««Ož<‰÷Õ××ÇÄÄ€?­²²²³³ÓÄÄdÙ²eQQQ222ns°7óæÍëÉÞ`†„x‘†ÂwÀÄÄhã400ÐÉÉ©—òÞ»wÏ6À/@uuuLL ÌÊÊÊØlö°aï\¹2pà@‚Á-Zddd„R«ªªÀ½Ãb±\\\"""Èdò®]»*2ùùù×®][¾|9•¶?þøÙ‰ïžüÊËËæ Ú0ÏÉÉyùò%(G|¼¼¼¶nÝÚËÕ@/qýúõ¦¦¦ |«'›Í~øð!•J½téRggguu5Ègôþ —.]‚9 rÛÙÙ¡JùnÁ´ŒŒŒììì7öþz*•#ÝæÍ›ÃÃÃù«, ñãX»víÑ£G»•bª­­=xð ««ko4S“‚"©²³³]]]a¸çÝÑêèè øy-,,«1..®®®|Ð%%%xÝÀ»wï\]]Qe·˜>}ú ×ÔÔ$Ì.³³³ÑNÒ·¢¥¥V6ÿ"lll'066–N§Ã²òãǼÔÙÙÙ#táÂDÁôüùsØod0¼vÍÍÍ•••üUA‡ öƒGAI$R@@as«¡¡ÏÊæ«HKK#Hý8Š‹‹µµµ¿CòYJJ ílÕ××———ÃfÏ7MtÌÌÌð›Ž}"]__ÿÕ• þþþhYTT´téÒ¾=å.D·HNNf2™=9l?|øðSíÍ7›œ™3g’Éd˜BZYYÁáš5kÂÃÃ!ÑÑÑ î]»V¬X×Ç•””´²²‚¸µ;wîÀõrrr ±5hÐ OOOHÔÕÕõ÷÷ïß¿?Ê¿|ùÚ‚Øÿ¤ÃàÊÙ³g£küýý!òð'NôFwãǯ««ƒ‡›™™Á@Åáp–.]jccsåʘ¼Ï;öNž< a²;w|íÚµÕ«WCP8¬‡;OVSSƒMoSSSGGGH1bÄæÍ›1 spp¸uë$ÚØØ€ó› [ ÒÒÒ°yâKðLØîNKK{õêÕŽ;P Z^^^WW,/Ö®]{ùòeT­ÐOž< ·ïÞ½[SSg)** keeå¸WCCéÛgggC"†aÓ¦MCJ¾ÃöoÚ´‰J¥B[Â0 bü"##a;Þ¢­­ õbaaQ[[‹ª¢õ-ZtýúuHœ>}:ÄÂìØ±ãܹs2³|ùrØE;yòäþýûa||@LL è=Æ!«<S•““˜j‚IKK XŽ$$$©+õŽ åÆyyù>T!ûž¬¬lŸT“ˆˆH_I½ñ39MMMxbM‹Å‚Ð8F{ôè‘ÀQ à †ˆˆÈ¿5Þ·­ŽÍf RWâr¹]]]68tvvÞ¸qC$ƒi4ZMMM_‰Î©««ß¹Ão09ÊÊÊ3f̘ PTT¼té’ƒƒƒÀ´*99¹'Ož ÌÑ9))©wïÞ‰ŠŠ‚ÿÃqq‰T\\L |ýOOŸEEEïÝ»'H±E 7nܘ1c†À„ÈÊÊ&%% 4è«Ôƽ„„—ËíCÁ{ñžÚ–ÀTö?!j)))19ÒÒÒ¢¢¢SMÒÒÒââ⢢¢“# IIIAÊD¬ Þà9¤®Ô‡ƒD¬õáç ÄB!„øEèÑäp¹\ƒ‘€ä1 ãp8çÏŸ×ÐÐÐÐÐf³Ù†±ÙìmÛ¶Ablll·&‘ÉdŽ1­Îúõë§ñ?½ —ËÍÍÍ…”ùóçÃI%‡sóæMHܽ{7z¿¿?$FDDÀëX,Ö’%K 133“—©¥§ æææ"mSxcLL {ö ×®] ¹f³Ù'Ož„Ä£G¾·` ÆØ±cñÄø CSSSCCÃÈȽèÇðÌ?ÿü“ ö…rwäȤæéííÝ¿TMÀ\Éb±ìíí!¥°°eÖÀÀ@CCcÀ€Y.—[^^—M:¾ÃáÄÇÇCâúõë»ý^°X,ƒ1kÖ,8w‰rmbbêìì$TkQQü4gÎÔbcc!qÛ¶m¨!CâùóçQmº¹¹AâË—/Q'L˜‰H!¦££RLMM{bA Äâð‚cl6ÛÛÛžÞîèè‰yyyèí cРAHáå´¸¸Ѩs¹Ü¤¤$¸×ÝÝ2Žj°ÿþ Ëf³===!ñáÇ=uXƒ¡««‹³@Ù„¾óæÍ<ù‡Ã‰ŠŠ‚ÇúøøðöÍ›7ï<@ù5k$£üêééihhèèè ¾ó À`0ttt444ôôôÊår322à;—-[†ÕÕ«W!qß¾}ßýû÷£ïׯ߽{÷þÅÁúŽ­­-U‚â544$ M€ÏŸ?«ªª¢ïÇü¿Âä¼}ûV__T7®]»VRRB"‘H$’ˆˆÌìÞ½ÛÄÄïß¿<}xtvvNš4 ÖÜÜ€·oßBn}|| eÓ¦M hòøñã7oÞ@¢¶¶ö0 VUU…Ĭ¬,à;Y·nÝÚµk!q×®]pÌž?*++õõõ» ..îáÇðcccD¹سg¡¡!üŠTU.\èíí ‰›7o.//Ç0ÌÔÔ4##ƒD"ÕÕÕÁ1ìæææ3fÀegΜå‚ׯ_Ÿ={gÍš‚Ü—.]B…Ãd2ùoÕΛ7O__/£‡aØ AƒêêêH$RFF†©©)†a_¾|AåãííÍË*Ïd2Ïž=Kàà A_|0+V¬Ø»w/¤¬\¹ìÜØ±csrrH$RUUìojj²··‡ËBCCa`JKKÍM‰4eÊ”^’l®ZµJ__i•ÌÍÍ“’’àQH+U«««+ü´gÏ  Š¿ÿ>$š™™ŽYhh¨ˆˆ$–””3кuëæÏŸ‰‡;gccsíÚ5Hœ6míèëëCJbb"¢"íwïÞÕ××Gê €   Ô–ùfÉ’%[·n…D K˜8q¢¾¾>!jˆËå–””L:¥¤§§‡……Á½sæÌzÍ•+WBJUUÕ–-[@`bÇŽcÇŽ…ô¨¨(Ðö%ÀÊÊJ__/5K¡P€EðÒÒR}}}ï@xòäÉëׯᱺºº…cooosssøõöíÛ R5wîÜýû÷CâòåË«««1 322ÊÏχJ¹_ƒ¡C‡Âà–ŸŸOØP|ÿþýž={à;ÝÜÜ@·0&&¦  •”” ï Ë*++/^LÿÅpvvÖ××'° ZXXdee‘H¤ÚÚZ^æÜ#F .(‘ð””Têäååeee» nê±Dþøãªª*‚D›”””˜˜"ã#ðô›Û·oØ0á!¢¢¢@]nhhÇb±( F¢ب¤Óé¢edd8Ü...<¡H3µ½½]VV¶7¡ƒ®ªªÊÏÏÇ3}IJJJJJÂÃY,ž%‚?( ‹ÅJHH€W+++“Éd˜µ}U¼‡Éd¶··O›6 /lC£Ñ:;;===ù2ðÉ´TTT€²…B¡ô’þêÕ«µµµ>>>øY-•J…¢——‡r†V™•——‡&,>†µ¶¶BfEDDá^*• ÁšVVVVVV0d2™ÝrÙvûaØÿ”蔕•) ôçÞk#1ŒŽŽGGGxµ´´4“É„ûªã›L&³Ùì¼¼<´#Èår[[[¥¤¤x•ÇðX¸páÂ… /\¸€_‰¢•J…]ŸžnsKœœRSS?º„„„´´4d‡Á`Š744TJJ )²X,¸RRR/t„ÊxF"Ô–†ZUUõöí[üœ DTét:•Je³Ù½ï;ÿQ,X°¸ãh4—Ë%ÄXoß¾ÝÆÆ†0£ýŸyó&ö?¡6üZ‚Ð[ ‹Qh¼ìÉд`"Âß“ôøñc2™¼dÉ^£ûm{9sçÎ4h¥¥¥¥¥%—Ëuuuýê-ÍÍÍÊÊÊЯ_?xÈìÙ³œ PPP`iiyýúõþù%vuu]¹r…B¡€èäš5kÈd2ÜnjjЬkmm]µjU@@Àw“¦X[[O™2^RRB˜‰+((°X¬úúúúúz¼—£¥¥eåÊ•–––YYY°¾~øðá¢E‹à9ÀŸ/**ªªª ÷â¥È Æ£G,--wîÜI&“Ñ0têÔ)KKËS§NÁœú›œœ ¯^´h"Žäƒ®®.‹EhaŠŠŠð –––111ˆ.Ã0wwwKKË   ¼@8‰Dš:u*°ä©ªªž;wî ¼pẌN§ÇÄÄäåå}ß>111...ð|Â$]LLLYYʯvC£Ñ¢££---÷íÛ„x®®®\.2hÐ PWRR¢Ñhp;ÞíÐÔÔ4wî\KKËÏŸ?Cgç¡¥¥¥½½=¾ (Н¯ï¬Y³2þàp8ÍÍÍjjjøÄQ£F­X±²“’’‚ô„&„ŒÐöíÛ?|øWΙ3¹æøC^^ž¿^smm-U*ABggç… 8pò¢j•øúH$›ÂÂBBßikkƒ†±víZ>>lذÀÀ@‚s ¥¥eúôéÓ§OCضmÛÞ½{‹ŠŠ¶nÝ Ž5kkkxNaa!0檨¨ÄÄÄÀ½x&üììì/^ÙØØ áœ;wîHHHuvv~Çq¢Q£FA ÇÇÇUj J¸¥¥ÅÛÛŸ¾k×®¢ÿ!>>?²GGGmÚ´ éãUWWÛÛÛ£åNssóÒ¥KáÞƒ.^¼û÷ïßÏÉÉ!xðð“TM„MšÿÓÞ™Ç5um}ÿdS™d(2ÉP+(*V¡jëuzZ­ôzµ[­V[ë|«­^ÛªX;ÜŠ tð±-ZÅY±Ú:ê€Ê$ó,BH óp’óü±ß{Þ\DJâúþ•œœ!{8û·÷ÚkïeʤI“rrrÐý»EðóððHKKCùlÚc¸víZiiiYYYPP*Ö´´4 …‚nRWW‡6-Þ³gO~~>ºÜÔ¾xñâÇ—••%%%¡Çñ×^{­¬¬ìèÑ£} ï ©TºcÇŽ &>>(ŸoܸAv¦L™BzFô jÁT Nž<Ùm•ƒÁèÛžöÈÑÿçŸûÈ0ágcRRÒåË—kjjšššt:]SSÓÄÝéÖDÞ¼y}>räH·é±þ·¿J¥²Ç(ì‰\.ÿñÇår9š‚5êëëßxã+W®iÒ¤Þ,Þƒ+9>>>dĉD‚ºf666cÇŽ%=h~»[\¯‹/Þ¸qãáèÜóþû理¤ôÞ˜4O?府¶¶6&“ÙÿɃnFÒÚÚZÓ0Ã{{ûŠŠŠ×_µƒF£1$$$%%e÷îÝ£FB3¥$o½õÖ† ºqš2eJAAÁ#çBnÞ¼™Ýw”5kÖ<åNÒz½9†ÿüs'†D¥RGމÊK§Ó577oÙ²åÛo¿íí|‰Db0ºYáºAÆB|~ýõ×sçÎ=Òòa1œ9s¦´´”ŒÑeÚJ°Ùìa]{êÔ©7nÜèÑè×ÐÐð÷¿ÿýúõ뼉V«¥P( åáëׯk4š>fÓOrY,évÎwwwW«Õè —ËEýâššWWWSo+@pöìYdP=z4:_.—£­Øl¶§§':(‰È1T*5}œ›››««kWW:hccC @]]yf@@À“R‘»ºZ­FsH‘c4AÈT…ÎÄ0ÌÏÏO(¢K¼½½QË+ÊËË­­­ ‚@>c …âý÷ßGÜÒÒ€a˜­­íˆ#е2™ õ/œœœZ[[ÑA*•úá PöR(•J…Zp‹åííî) Q‹ÜÕÕÕÙÙi:‘ðù矫Õj4E7räH²XMKþ·çž{Ž4飨HT*uôèÑt:Ïç£Óš››I¡•Éddñx¼'î›UVV¶¶¶¢Ä"E///‹ÅäH´µµ¥”Ãáp¹\²XÑxÅÙÙ¹¹¹d±X(¤lff¦··7²…ººº¢9ð€€€ºº:dO Dƒ9²Ëd²'Û¤¥¥…Ì ooo.—ëëëÛÖÖ†zyyõ¨âl6;//ì¨-X°é­­­³³3º¶««‹ .õóÏ?Ëd²5kÖ˜Ú•J%:ÓÁÁ¡Ÿ;qQ©TÒc­G¸\®º­V«E™, Q9r¤J¥"ŠDÏç“™àãリSHHHii)‹ÅÂqœ 4„„„”””Ðét­V‹ž«Óéjkk­­­ÝÝÝÑÿ‹Å¤W…D"!K¹c¶wïÞQ£FýµŽ}SRR‚òŸB¡„††â8^YY)X,–——JQ[[[ßQ.{èÈår½^÷pH¤þJ‡Ã1í˜OŸ>Ý`0¬]»ð… .\¸ð•+WîÛ·ܲe 2øîß¿ÿ7Þ0­£áááäPîÂ… ¨™spp@Ý^ ôí·ßÆ0,""FäñxR©Ýðyóæ-Y²äÿøGFF:¸fÍd{áóùGEÓ†}óÍ7ýìçZ[[›v«ÇG&púôéȺuéÒ%£Ñ¸páÂåË—õÕWè×7"íÙ½{÷{g†b@³VÇŽ›={¶\.§P((ê¶½½}ff櫯¾ŠÞ.Ô _ºt)ºáĉÑ|Õßþö7£Ñˆ.^¼…^}¤Æ˜6O/^œ:u*Avvv(🇇ÇÎ;Q4ÌÑ£GïÙ³Õ¼+W®H†¹¹¹‘nï¼óÎ_|þÆæÍ›Q±¦¦¦®^½ú›o¾A3¨Y!ÝŽQÛ}êÔ)‡ôôtäLåçç‡Îçp8dº0 ›6mši;Ø7¦áþ²³³çÏŸ¦7‘S¾F£Ùºuë‘#GÜÜÜvïÞÌžÁÁÁ{÷îEÅJ>ú¥—^B>Š .üþûïÑÁåË—£6bË–-}ôÑ¡C‡PÉ¢ œ••µxñbäÂ{ôèQ¤CçÎC~t<¯Gw҇ͪ¦+`<===Jšæ¶lÙÿÙgŸ­]»öÀè "eeòÃvK6›M6Ê¡¡¡Ë–-CÉ™0aéKæââÒÍ'mõêÕ©©©èÌ­[·¢0¾=I>ÔÖÖÅ·%±±±A±þ ä»óÊ+¯,[¶ ðÜÜ\‹5þüwß}wïÞ½è×?üù,ìÛ·oÕªUeeeØ–!æÌ™35 ƒÁ@놆³gϾôÒKz½žÍfŸìååµ}ûvTpaaa}ÏÆiµZ*•Úm sóæMN×£$ „h3K DÛðB´™¢í‘Õ¸·m,Ëh4’þ&yyyáááä¬'„hä MŽƒQ|ëG*7Hð$ ­x1 “H$jµ:""͉öuIo#è¾íqæƒÁ°ÃJN·˜bB..4ÍÂR„öôµ˜Zg4-¬q°¼Wi`SD§ÓûØéN«ÕÒh4*•ж—ìÏ–=KŽ^¯G“¥A<°¤(L*•ª½½½ï %Í ‰DÂb±,©âµµµ©ÕjKJ‘F£ÁqÜÂÇ[[[-IG …X,¨æ®ïûÐh´¶¶6¥RòÈ!N¯’£ÕjÑ*zK’Ó®,ãåommíìì´˜uuuýµÛ 8r¹\¡PXÒ«„ã8ŽãÖ8à8ÞØØ8P14‡IÉÀ€Ü ­åèíWNWZZJ¡Pú¹kbo8ƒÁðó󋉉±¤Z¥V«ccc-i”Ã`0ø|~»™)ÕÕÕL&ÓÔ3ØÜ‰D"‘h(— 6h `·µÀæŽ^¯‰‰±¤QNQQ‘»»û@… F.Íè3•J}xƒ5///.—ûðãzlo{6›íííÝmwsG ˆD"KJ‘‡‡‡F£éCŬAËÓ,¬â1ÂÂRÄçó-,E¦;ÀZ...ƒaÀ‹ÉÁÁÁÞÞþáá`oÁãõzýÃÛл‰’Åo9<.d8Óø&OÀIò®©¬¬„üÈñÍ€,,Å6¬iµÚÒÒÒÞJÝ/¦Ó±ÿ¬I†R†­VÛŸˆã< Ú¾?–y6€-|s9VVV:ÞÒÒB„‡‡•Jíê•ââ èëÀ“öºF’Ó·ð0™L:ÞGüª§•œGŠ ƒÁ ‚ ˆ¦¦&æáá¡×ëûX.Î;w¼½½Arà‰Q«Õ …Åb¡Ý9‡Æé1$‡F£¡ «F£Á`ÀqÜ`0À;`Ž mã ‚ …Çh4š†œÿË$ça±Ò° áA£ …Âf³©Tê  ý‘bÃb±‚0 F£ÄÀ  ÚšÍfÓh4ƒÁ0ÂÓ«ä ã8ˆ €Å N§#…‡Åb!áX¿Ð$G©Tþþûï\.7::IÀ3%<ƒ¡£££¨¨ÈÍÍ …{,Éa0¾¾¾æÂ… </<<ŠàÙA"‘ܽ{¹´…††î(m­¨Ó鬭­•J寿þêìì<°O†!2™ìæÍ›(âgDD„µµõ@mÚ«äÂãáá¡Õj9NWW×… FŽiI{â$J¥òúõëz½ÇñØØX‹Åãñü)ðXc±Xnnn<ÏÁÁ¡££ãܹsÞÞÞŠÀ2Ðh4¿ýöŽã:...ŽÁ` †ØôKrHáqqq±··wvv …§OŸæóùPTæ ŽãçÏŸ7fÒ¤I4ÍÁÁaPŸø»°Ùl6›mkkëîîþàÁƒ“'OªÕêàà`(6ó‚ ˆ“'O¡T*§M›F¥RÑ®kƒÍcﱆ„ÇÆÆÆËËëþýûè`aaaEE”"0”¦Èxºººf̘A¥R9Î=´Ééÿ?pqq¡P(L&3<<<((ŠJììì,)²8 % eÑ¢E(êÚ#ÏÔëõƒ%9¶¶¶‰‰‰ …¢ÿ·@{HS©T(E`(Q*• ð4ªÓϦ~7 èt°çŽ€gJØz•¹\¾ÿ~È#` xå•W¬¬¬zkkëY³fA‡ÃQ«Õ¤iŽÞmD§Ó!€N§£x<è+ÌùCH’€äH’€ä@ 9H€äÖ¾¶·‘J¥wîÜ!¿º¹¹  몪||||}}{»öÎ;R©4::ú)ƒÿ…ÂÒÒRòkßÌRr:;;³²²¾ù曨¨( ÃZ[[íííwìØrêÔ©Í›7¯[·nýúõ½]¾uëÖk×®]¾|9""âiþß•+W–-[æåå%êêêÁ¦M›üüü ä,Grªªª>þøã‰'þøã†ýòË/K–,ÉÈÈXµjvTTTTVV×ÕÕ¡«¢¢¢ÜÝÝÿüóO±XŒaØÕ«Wýüünß¾­P(^|ñE6›}öìYÇg̘a4Ïœ9ƒ®²±±™sæÌöíÛwîܹ~ýz>Ÿ_TTT__Nˆ‰‰quuÍËË‹Åñññ………2™lòäÉ666†;wEµ£R©Ó§O‡RøK Ñh´Í›7kµZ½^_UU…Lg†i4šŠŠ ‘HdooßÕÕÅår5ÍØ±cFãÑ£GÛÚÚ¨TjHHˆZ­Þ¶mÛ•+WÚÛÛ:$•JAnnîÕ«W•J%F›8qâÒ¥K<øüÃÎÎ.11ñçŸ^»víO?ý´bÅ …rïÞ½ôôôQ£Fõ8v)--=}útddä‹/¾ •J8àááÁf³·nÝzýúu‘Hôý÷ßwuuoذáóÏ?·±±)((سg­­mppðùóçß|óMÇ+++?ûì³€€€ÀÀ@(x€!€Åbét:‚ òóó¯]»Ö«û€ŸŸß®]»ÂÃÃ:´qãÆêêêÅ‹¿þúë'Nœ;w.†a3fÌHNN®©©quuݶm[zzzllìþýû W­Z5jÔ( Ã6mÚäááñðÍ Ê+ètzRRÒW_}•˜˜xóæÍÇJÆO?ýôûï¿§¤¤¤§§GGGÿûßÿ...F?¬Y³ÆÍÍmÓ¦MR©ô½÷ÞS©T_ýuZZš^¯_¹r%T€¿„¾Üüýý¿þúëÒÒÒ-[¶,_¾<::zëÖ­/¼ð‚é9³fÍrww/++«®®®­­íçS©Têo¼¡ÓéÞ}÷Ý>úhòäÉûÛß*Ik×®}Xç~øá0L%§­­íĉÉÉÉ}ôч~xùòåìììn’óçŸnß¾J¥uuuõ_röîÝ«V«©TêêÕ« < t:ýÍ7ßd³ÙPê ½Ö×­[—‘‘aXHHÈk¯½öð9þùçŽ;þøãY³f}úé§=:§ýôÓOR©}>xð V«Å0Ìh4~õÕWÿû¿ÿ»sçΔ””ŽŽŽÔÔÔGþ×;wîܸq#66ö ¼à¶oßþÉ'ŸxzzöhèþÊQŽ››Ûܹs ”–– ‚ÄÄD ÃÆŒ—ŸŸaXLLŒR©¼té’T*õñññ÷÷?qâDPPÐܹskjj>Ìår-ZtðàÁÐh42©H$JOO—Éd\.—Ë妤¤ôñ/ SSSóòò”Jå¦M›âããU*U~~~nn®H$ª¨¨˜9s¦O×.[¶ì³Ï>ûâ‹/ètú'Ÿ|²víZ(u€¿„^=Ö8NXX˜Ñh4 ƒÁÑÑqΜ9ÈÃØÃÃÃ×××`0L˜0aÁ‚#GŽÄqÜ`0¼üòËÇñààà &ØÛÛã8¾dÉ’ääd6›ãø»ï¾keeõüóÏÇÇÇÇÇÇ£›Óéô)S¦,[¶¬·¿èììŒçîî¾`Á‚øøx Ãø|¾»»;zî¨Q£–-[æïïdñññvvv†EFFÆÅÅ%$$ÐétÇFã„ @r†Œnk&“©ÑhºººT*ÕÙ³gçÌ™y G¡PÆÔÔÔýë_°Ç0D€ä 9H€ä 9Hd’€äH’€äÀð_Á ¨T*‡ÃLfXC¥ö*9 …â»ï¾ƒ<Ф¤$2óIŽ••ÕÔ©S!ƒ€ÁÖÖÖh4ö<Ê¡P(ÖÖÖGÀ@IŠ—ƒ¾‚û0D€ä 9€eAâ+Ùl6é„0<Áq\©T1àw¶¶¶f2™–Z'ŒF£Z­Öëõ~gƒaccc¦Ùò,W'½^¯T*ãζ¶¶t:ÝŒªAZ­V£Ñ ø)н½½Y´F§Ó µä0l_’C‡M:uðÚ¸a›ö§Á`0äååQ©ÔA}oÍ+[ôzý?ü””4xþ5Ã6O´Zmzzú믿õÁh4ÖÔÔ”––Nœ8ñÙÌ ƒÁpëÖ-­Vþ×HŽF£ÑjµÃ0krrrd2Ù >B¥R ÆP௥°°ðîÝ»QQQæØe<Ž;&—ËŸÍêôÝwßu[Í7à( ƒÁ0ü«AKKKnn®··÷ ªÚ`7\OCIIÉíÛ·ŸXo0˜Ë† $É€'`(ÜKKKö)¤R©¡¡¡÷îÝc2™£GÖh4¥¥¥666–”¿wîÜ1õ?a±X}x‚uttÔ××;;;{zzvû©¡¡A,ûøøðx¼g§v*•JrF}0¼i5F£±²²b±Xæ’'F£ñîÝ»duâóùùâô˜pÓyu:nkkK~Õét*•ŠÅbYYY¡#jµZ«Õvs@W(8Ž£º$—Ë»ù,p¹\3ʶ¶¶ Ïžžž¦½½ý¹çžstt|Ö%çïÿ{UUÕ˜1cLËžÍfgff&&&zxx×××'&&FEE]¼xÑ’Þ“iÓ¦ †ØØXôVxð ¼¼œÇãét:‚ BCCÙlvmmmss3‡ÃQ©Tvvvæh‰š3g›Í>tè†a#FŒÈÉÉ)//;v,Ò›¬¬¬o¾ù&""B(:88ìܹ“ÃáìÞ½ûÊ•+þþþÕÕÕãÆ[»víþýû333ßyçÛ·oçççgggO™2e˜'œF£ñxþ|JJÊĉ5MEEEVVRôAeèÜ.]ºtöìÙ³gÏšÆN@¸ºº¦¦¦bæïï¿mÛ¶¢¢¢;wFGGggg¯X±âòåËdWî—_~)..NNN~î¹çÌÈ&€~ùòekkë„„„ÆÆÆõë×dggoÚ´©  `Ïž=qqqo¿ý6†aIII‹-B×þøãÕÕÕÉÉɤq`Ïž=›6mÊÎÎX¿~}cccBB‚µµõåË—u:]nn®ÑhLJJÒh4‹/ær¹ÙÙÙûöíkjjZ·nY¿iB¡ÐÞÞ>222&&†Á` ºDDkkkdd¤N§+,,T«Õ%%%¶¶¶111aaaVVVíí퉤¦¦fĈ111ÞÞÞ­­­MMM–dz*++ûøã#""²³³W¯^}õêÕýû÷———···¯[·.;;{öìÙ‡Bn þüòKF“œœììì<üSÇb±"##9NMMMaa¡J¥ò÷÷@#žÚÚZÓ@ss³éµ2™L£Ñtvvö¸h], …B¡PH„‹‹‹Ô„½{÷Þ¼ysÆ ÙÙÙAAA7n¬««[³fP(œ3gÎ?ü0kÖ¬üÑ`0,X°ÀÚÚ:;;;--M$½ûî»5Ê9sæ Ú“­Ÿ]ªÖÖÖœœœ‚‚Óƒ£FÚ´iÓŒ3̨ †#GŽètº³gÏz{{ïÚµëþýû¨Ïž““SRRÒǵàŸÿüçÔ©SW¯^ýí·ß’Çóòòd2™D"A_wíÚuñâÅ+VL›6mÉ’%z½þÛo¿U©T¨˜““±T àIDATÓÖÖfï’@ hooGFEÓŽ …B‰ˆˆèqÓ';;;dNlmmÅ0L¥Rµ´´ çÕÝOI[[[NNέ[·Ð×ÄÄDŸââ✜d¶%3f êØ™KÒØlvTT”J¥***º}û6‡Ã !M‚½•¬½½}[[—Ë …T*•Åbu¡PˆÜR\\\""",µbLž<900pýúõA$%%͘1ƒB¡`¦×ësrr¤Réý“¡“œÔÔTr.§Ÿ/Ϲsç0 ›7oÞ˜1cЈxæÌ™æ¥7†1Œ¬¬,…BñöÛoçççŸ;wÍHuvv’ ŒŒŒìñÚÙ³g÷§õÖ­[MMM‘‘‘‘‘‘ȼðÒK/eee8qB¯×Ï™3‡—ËurrR(  …bÔ¨QfWsöíÛG£ÑV¯^­P(:;;÷íÛ—˜˜ˆ~ruu6mZCCCffæ½{÷òóó×®][\\œ™™I£ÑF}ãÆ ‘Hdv §Óéîî¡¡Ã0¥RieeÕÏY(OOO±Xìêê:4Mê·eË–íÛ·ïØ±cÚ´igΜQ*•¤QqâĉwîÜÉÍÍmjj …3fÌptt<þü×_-‰üüüètúÿüÏÿP©Ô”””Ÿþ933³««kï޽˗/Ÿ9sæ`ÿyFÛ¼y³V«ÕëõUUU ÿ•€N§ã8þÈΦ\.“&M"ÜuuuEGG'$$(•ʘ˜˜¸¸84Ù+‘H7nÜ*‘H$ ‹Åš7oÞìÙ³u:‡Ã‰‹‹óóóëÏß+//×h4ÁÁÁƒ‰„Á`Ðh4½^ÿHóNWWט1c&Mš„aA&&&æÅ_D‰•H$ eæÌ™)))ÈÚÃçó%ITTÔäÉ“âãã‘£„Z­vss›0a ÇÐÑÑ!‘Hø|þ† ÜÝÝѳÔjõ¶mÛP’étzBB‚T*•H$fòäÉ«W¯î=S(º»»Ƭ2Fc2™F£±?[&ÛÛÛÓétN§ÓélllF…ÜâÑ‘ÀÀ@‚ t:—Ëupp1bAƒÇã9;;;88èõz4»ãêêêííÍf³íììеt:ÝËËËÅÅÅ`00™L''§GšVÊÊÊ´Zmpp0ƒÁø «•J>>ž …Íf£x<<ÙÛÛÛÛÛ•¬££ãÒ¥K###]]]ÇoÚDøùù­_¿ÞÃÃcܸqƒA,K$’°°°ýë_ #11Õ%¥R™ÐŸž½H$jiiquuí¿ŽÅb¡òÍÏÏ¿ví…Ádæ–«;Zê z¬:Ït oPˆ6´Äwvrrr:;;çÎ;Ë/Ð’fÓµñ¼`0âå mf¼@&“Í›7o0ìþü:¡àƒ/§·†'dð‚Áˆ—ƒB´™Kð‚þÇ/àp8ç š4:×ÿz1—n$°3U…˜I7Â0H®=`t©imto­Ë¡P(v# 8eeeæ¸bf@¸{÷®B¡þÿsZN———7lsàé·Æy*É©ªªº}ûö4R⢢{÷îYÞŽ)ƒH$º~ýz·ÂÂÂÂÂÂg³:åçç—––ϵCŒN§»té’iåüôz=“ÉŒÕÈ E{DÑ{Ûͤ­q A|>ŸÏç›c¶ RuBk]‡su"÷OŒá£½½ýóÏ?oFÕ`ödCKÅÝÝÝÉÅÝÇ¿@r ƒ½½=ÚSòYÃ`0899™KÁáƒÑhd±Xƒ±rÛ¬Áqü™­N8Žÿv(_‹;À}É@rà ø¯¹ …bkk ™ ̰†JíYrŒ4«Z§ä/ÏW/™0² xJ2®4c~J£É!(T ƒ÷ ]h»ˆÜjŒj¤1zå`F£3q¿OÔôÿ޶òJUä,€ÅC¸G)9AJ©°¿ç;øÑéÿ$“RYU56ñåÅé¥ÿ9…0àºþÿƒDoýóîz( ‹çFûRÓhÀûy>ÎÄ( ÃÄõÅÇ>|åÖÕ to//¹¨ÉDƒ(4F—X+:Z4rœFãBIX< …B¥Ñ¨´Ç½Ð ×©$Bo//:“ɬ*/ õ}y˃éôÜèÇd F#þÈ€í€%@{…¸¾Ø ×ß:«º²ŒÉdR‚ ¢©©‰dÃs±éçÇy¼ÑA~ß^] `ñàãºìCåâÇØ–÷ÔŽùJ‰°º²ÌÓÓ“B¡Pˆÿ¨–N§khh?Þ8‹ 0Œ€’°|( £Óæ—ß/õööf2ÿŸÁÿk¶ÃªéOIEND®B`‚saods9/ds9/doc/user/catalogs/2masssort.png000644 000765 000000 00000446746 11332127303 021066 0ustar00joyewheel000000 000000 ‰PNG  IHDR&ʉ* èbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ*÷ãÛ‰ IDATxÚìÝw$×}'øgó¥+ï«Ú›ñƒ˜@IˆE*tÒ‘º¥¸:‰¡?$ O!1(®„B« ÆéB!¥»Ø ]PîtZR$@ <0~zzÚ{請ªËûª¬t÷GVvW¥]Ýõ7&&ª²óÕ'_v×ûÅËÌÊ‚¦išÍf2™Ã0M‚à0‡9Ìaó_/†aB|Ï£±®ëã÷ÚÊ*ð½pKKKáp˜ã8$“Ép8\¯×­5~äËýõK#«Yýg?úØáïû0‡9Ìaþ+æ;¯\?Ó!þÒ³g­bð€c¸iš_ýêWÿäOþÄ0Œöå?²áÛo¿mÆG>ò‘çŽ=šL&Ãá0i6› øAÕjõí¹µ¥þ›þU! ÆMM³cŒTM`„„ª®BM7#Óºa(Ɔaè¦ àÖtkâ8JTU7 `”4UÍÀQ¢¨ÚO5 ݸ %DÕÞ …RrO"ˆþuP‚Qó.#J Öÿ%Q`í_…¡AÍV¯¢š®[ïƒJISýÿºÿGµ‡ZL!þ¥Ð;Þ³Bmïíó“@„&Êú²Ùl©T‚{†d¬­­=`„„°^¯3Æòù|¡PxÀ†sssc§Ó™ÉdH2™ ‡Ã¾¡– !Hm¯OÕ»õBèwËgu¿14Œ<=1ÿÕÑEŒPo,àvŠc3k££½àÌrœ|úHg±\[ÙJq_8Ù·±“ÙNå9Jžw 쌧—¶,´ZS–6’”àó'{㻹x²…N/Ç3ù2ãȇ9~mj©RkðŒþÔ§_¼1®ë†$°>~ò uJNõ¾:4… \]áË·ç1BÝQŸßã›ZÁéS‚§·Á§:ªu=ѳ*l%³%ÏÌ®l§ï@9úì“§_¾1¡éº$°^<õÂÕ¡Ç)>rª¯…ú]ƒÝáK·çBÝ_ÐÛB»Â%Ó‹›„àS±Z£¹¸ž¤?|¢'‘.l<u'+1Ž|ðÂñSKåjƒçè³OœúáÍIUÓEž{ö‰ÓÏ[¨C|ôLÿ+C“Âßu¤'rix!Ôñ†|®±I 1ŽN/l‚OöÇꊺ¸ž ?|¼'‘i¡Ÿ˜_ÝIµÐc7¦VÊÕ:ÏÑ=qê•›Sª¦‰<÷SOžùÞÕÛB·C|ìLÿ+C“°Ïy´7úŽ…†½a¿{lrc4Ðâ-㓱†¢.¬'(ÁçŽwïfK;Ž’ÇÏôϯ'SÙ"ãÈÓç M¯”*už£½x굡©¦ª Œ~ü©³6*<~vð‡CÂÏy¼/úö­9„PgØ ¸Ç&–1F!ç¦ç7Æ'ú£MU›_KP‚ÏëÞ͵ÐÇÎô/®'wmôÖôj±Rã9úÑ‹'_š¶ÐO|àìw¯Þºeቇ_š€½Îý±·oÍ"„:ÞhÀc¡ýA‰gm¨>¿¶C ~èXw:_^ßNs”  Ë!x~ðù·Ç!ħxöhÇ«×gÂAŸ³'ê¿4²„é{Üqhz`Ò×€N.íPB÷†K•Æ’n&ó[»ÆqœèžZÞNªcOží½2¶\¶Ðóƒ/^žR ü/±Qá¡£]¯\ŸA½Žž˜ÿêö8[ho‡!4±´M =Ö*UK›iŽrg£[6záD×Ôòv:_å{âLïÕñ•r­)2ö¡ ƒ/^™Ru ü‡9ò½·Ç!Än‡pîx×¯Í „^G_,ðÎíEŒH,äöºä›Sk“¾?Æh|q›z¬'T©)‹›) § ›É<㸠ǻfV)½6¾Rª5Æ>taðå«ÓMÝ”xþÃýÞ[cú°…Bð9ú:ƒoß^Ĉt„Ü>·|cjÍê)!x|1N =ÚªÔ›‹)ŽÒÓƒ±íTÑBÏïšYM¤rž±‹gz¯O®”ªM±ž|ùÚLS3EžÿÈ£G¿ûÖ€ØãΟì~ùê4‚Øïu tß^°zð8nL®Lzc>JÈØ‚…kæ‚…Dw2Å„…vέ&vsžcÏôܘ\+V±žxåúŒ¢"Ïä±£ÿüæ(€Ø#óœì±Ð€Wì½e¡AWÐë¼>¹J0é‰ùm¡GºƒuE_ßå(=5MfJë‰㸇uίï&³ežcŸé¹9µV¬(cO?<ðêYE5Džÿ¨…ì–ùGNö¼te BðÈGºÃoÞZÀˆDƒ®Ïy}b•`Òõ1ŽŽÎoYh£©µÐþh2W^ßi¡ -”{ütïÐôZ¡Ò°Ð×nÎ5TÃÚ½ßycì–øÇN÷¼h£ÇzÃoÞšGˆD®°Ïumb•`Òõ Œ™ß¢„v•¦6·¾ËQz²?šÊ•×v²ŒrçŽw.nî&2ežã;Ý;<³‘/7Æ>ðpÿ7çêM]äùo£¾rsAìwK½1ß;ck‘hÀásË7g¶&Ý!d|)É:Ðé«)ÚâV†Qz¢7˜ÈV6÷ЭL*_»pµI0é »yž]Ü¡„öux›š1¿a¡t±¶žÈ[èÊv.‘­Œ{øhltq'_VDž=~²óí±Õº¢Ëÿ³=ß¿:kä–ùGNv¾t}Bìw‹GºƒoÞ^Aˆ„ýrØï¼f£"Ï,ìPBûb^U7æ7Ò¥G»ÙbmÍBûë;¹D¦…Ž/íäÊ ‘gì¼4¶^StYàŸ:Ûýý«ó† ]2ÿèÉ®—®ÏCˆý.ñØê“#~×µÉ ‚IgÈ% lÕ sn=ÍQÊQò^§w—ë™ÿð7×ï9Ÿ8ûýÏ<êsŠ÷¬:…jó›ß¿>›øÍO?ôñ =£™bý?|ëêòNá?}჋XUÇ0 ëR…ým5L0¹–ùÊ·®Ç|òŸþêSQŸÜª7MýåáÕ¿|aì©SÿóÿhÐ-Ù³¤!ŒzÅŠô‡dh»Eå{7×ã¡ý !(Áõû¶3•x¶j佌N÷ú?ûdÏ7ž]I«“)9ODž>æuœÀ³R¥Z«7¾õÆÂbZG˜¾K«¾¨û‹Ÿ>ùõZHªzS}d!p‹]!ו©8Á$ê—ݲpk!I é 9‚“kiFi_Ô]i¨ËÛžãŽvy¹êVº,2îd¯!žKêÏ/$K5Õ!°GŽ…ßÛP4Ó)òOFpc@ìs°Ó½×GÖÂ~·Ør]žÚ˜D|’Ç)ÜšOPB:CNŒñÄjš£´/ê®*êÒvçèÑNo2_ÝL•Æìõ/Æó{èÈb²XSe=r4üÖø¦¢î¡K`Ÿƒî¾v»…ö„]—'÷Ñ¡ù%¤+è$duÕmi;ÏsôH§w7_k¡=þ¥íün¾.ñìì@`d1Y¬6e]8~gb³¡N‘¿x"úý›Ë`ŸÌÎö_½½† ö¹…žˆçÒäF$ì“|6ÚtR‚ÇWÒ¥½W½©/Æ[hªPÛH•,ty§°›¯I<;Û]Þ-ÜüàÆ² °×B‡[h_Ôsib #öK>·tsn‡bÒrp¯¤,´¡Úh‡7U¬oìZ¨oe§Ì×$ž;Ó[N*MY`ç„/OnÕ›†Sä?yñƲ×Á ½2¼º‡¾3±iõ4`£!ãÈØJŠ#´7êRT}!žç)ìôfŠõõÝ’À¸ݾÕD1™«Iº:¯)ºC`ˆþphU7¡[æÏm¡?Øé{k|#ôJ!¯ãúÌ6Á$tˆ<]Úåí‰8uÜÛÌ1J:<¹²²‡nì–vltj½…ž?º6³]mè=v<úÊðªf@·Ä_8~yhÅBtúÞÛÀ‡¼RÄç¸f¡‡Äs#{¨ÙB;<…ª²š( w¬Û»‘j¡§ûÓë™l©ÕÓ³Û•†æØ£Ç#¯¯ipIü#Ç"-ÔÉíò½9ÖêiÄßB£YÙíÅ]ŽÐî°Ó0ÁìFÖê©¡Tßÿ,'S¬ß³Þ®ÏlÿŸ/M~ùß]¼ç,çïÞ˜»>›üå÷Ç‚gû‚ÿË^Þ)¾ü×—þá?ÝtB+•ŠÓél•«e©ª|å[×ÛÙÊýÍõ?þ÷Otõ¦þÊðÚ_¾0¸:÷:…/ýâÅöYŽ“§9ë÷s/¾u}za- $âYWxÐíu›Ô-_iv¿ø¾›3›7´í’pñ#Ã0ËuµÒÐLµf}wñ–ʺ¢]‡ Ã,×µR]ey%!0LÓ*§5EÜXÌÞûÐéè#§|ûÅ×'6wR¹ðñ‹¡`'F°ÑÔs•¦¦›n‰: !¨+z¶¬š†‘œ»^C¢7Š ¸øÎ ãÊL’ ö n™ /¥)! c<¹žg”ö„äzS_N”ŽD©Bc+Sw¬Ó½’(§Š ™çNõxÇײŚêØÙ>ß•™Ý†jºDva0ðòí-`ŸÌêö¾>¾ ¸øî ãÊL#ñ ^‡pk1M éðKãÉõ£´7$7T}i§Äst êL—”Í´…ºV“åÝBCæ¹SÝÞ‰µl¡ª:öPŸïêìn½i¸Dv~0ðÊí-`Ÿƒžêö½>Gû]|wÐqÙB=‚×)ÜZLSL:ü¥xb-gõ´¡{h¦¤l¦+"ãŽu¸Öv[èÉnÏäZ¾PU{¨Ï{­Ý2Lèsp§{}¯µPÖr]žN`„Ã^Ñï†l”Y(!=!GS3wŠp 7-Ô/ _Ír„t‡šn.lyJû£Î|EY·ÑÍt5‘¯Kýϯ-}ö‰#œQ•Dq5«ÿÝ›óÖ¼#Ôvÿâ‡úœTW5c)­¾>¶=ó|ü\°R©bL$‘ÿΕåÑõ:¦,[VÕ†³†=ª¶S…„ê 8õé§ŽŸètbS­Üwo¬g+úÏ]ìêt 7k&ÿ7o,Ó¾H@pÀÉuúÅksŒqØÃ{$îöržóò£©"£¤Ë/*š±œ¨ í ‰Ùrs+S—ŒÈéênAqðܱ˜<³Y,T5—Èèr-eëŠá‘¸3=î7'wuúôD§ëÍÉ]-Tº:—Á‡ÝÌ+³á圅rOî£ær¢"p´/(æÊêf¦&1:‘7Óu =“g¶J-´Óyk)WS ·Äéq½5™Ò èkCýN®;І:ØðRŽóñÅ“ë*¨š¹”¨í Š¹Šº™®IŒ„å­L=i£sñr¾¢:îd§óÖRÞBOw»ÞžJi:ôÉÜÉN×6”®Ì¦-Ôï`·–r“¨—gO¬%h¡ªnDež9öÐÎÛËùjÃF§Óš¼2;ÕÝB®ÇFCnæwò{(OñÄzÁê©f˜‹;P‘Ñþ°ÏÖ“ù†ÌÓ£QÇ|¼œÛCWòÕ†á¹ÓÝ®KÓiU^™îv½>‘„´7$_ži¡'?´ØBFÆ× ŒN¿ æâN…çhOP,ÖÔõT ÝÎÖ6º°SΕU§ÀèpŒ¬ä+ Ý-r§º]—fÒª¼2;Óíz}¼…öí¡.tñC‹YŠIÄËDFÆ× !~Á0ÀÂN™çHOP*µ£¹z$êXÜ)g˪SàŽw8F÷Ð.×¥Ù´ª¯ÄÎô¸^OBˆýÚ–/ͤ1ÂA ¹ù›‹Y‚IÔÃ$FÆlÔ4Ál¼ÌSÒËumÍFùÆN®….í”³å¦…Ž­åËuÝ-r§»\WfÓM x%v¶ ˆ8.M§ÂA »…› 6ÊÓ±ÕGH‡OÎn•xJºƒb¥¡¯íVmTÙC—“ÕL©…ޝ,ôT—ëÊ\¦©ÄÎö¸^Ûe:q¼3B‡\,ìn,d &st´ ±Ð€Xmè«»U‘£ýai· lçê2O£²…:îXÌ1±V,Õu—Èêr]›Ë(ª¹pÐ#6tr¯…∇wtt%o¡™ÍOIO@¬*úêîþ¡£÷WrGñ@Ľÿbv±)V•»+ÓÞÓÏ=sø½ëË¥ªÒ^oú£î?ý‡Â^ù¾%Ç%±ÿø+O}õo¯/låkÉâÿôÍ7öÚ{dþ³>ñù¾ã\!cT­Ö°#,y y‘NÅk×nÞ:ÞåûÔGŸôê‰ço€“Ýî—Þ¸ú›C˜°w¾­Ù›Ï<~æÃO\øö÷×u#xúÓ]¦ãoÐ þÜÇž(eQw—³˜KÿÓ‹—?wâÔ`Gq{¾V R €yf2„BDD÷Ùƒ‹¼øú¥™¥ßùåŸ}$ šãBŸ÷û|2ûO¿÷ËÅŒ…|Ý.9cÜá®/1ÂaõHtd­L1Žz8Žà©­*£¤ÓÇTÝ\Þ­ éð…ª¾™U$FzCB<§ìUOÂÂB¢ž¯ê.‘‰ˆ£kåšbz$z,&]™/hôËôXLz{&!:I‡_¸¾XÀ‡ÝÔ+s·WKÊžÚª0J:|Ü´¦of#½Aa'§$‹MOûÃÂb¢ž¯j:¶^®*†G¢ÇcÒÕù¢jŸÌoC»üµ…F8ä¦>GJñÔf…QÒáå4,%kGºü|±®ofl´ $ -t)YÏU4—@Dű}ôÚBQÕOæŽwHoÝ^-QŒ#Nàðäf…Òáåô}”•êúF¦!1Ò%QhZ»·Ø(W†G¢Ç¢ÒµÅz¢Czk:!8IO@¸j¡.êwpÃ+w¢1/g˜`1q'Ú’…溲[ÏZhÄFEz,&]_,6uà“¹“Ò›ê =Aáê| 8Ù-žØ¨0Bb>Îpa§&PÒígE_O[(Ÿ,¨Ú:€NnVË6zc±ØÔZ=}s: 9poP¼2_@]4àb·VJ㈇“™Ø¨p„tø8àÜN§¤« ð»Eu'ßB×RõLYs t0"Nmí£7—‹Š|2=Ñ!¿9“‡¸¯ ¹ØÐ²òdÜB½pn»…Vc-Ýé ð©’º“oÊ<íñêè`DœÞª–ê†[¤GmÔ+Ñò[3yà ÷‡ÄËsy„pÈECn6´\$Gܜ̓ñõ2GHÌË!g·«Z³PŽôøtIÝÎ+2OúBÂZºž)«m¨îéѨtk¹ØPÍ6¸?,]žË#ˆƒNnCÛCQ íô³ºj®¦ê"Gz‚|º¬nçZèFFI—T§@ÃÂìvµX×Ý"=•n-—öзgò@A K—l4âáo. Æa7çl¡8æeÁ™ø¨@ÑOäò[üÆo>s÷õi¯¬,&ï7Ë~þ£'6Óå·Ç7ÛKΗÿÝ{S”{—¡×Á?÷ù'þønÌndÛ{üg>tüß?{º­14ÐÊUõRMíŽEºS0QB.ö±s!tÊ-pXàyÜ,+¼®†n@g×¹Gýù§·û¤× €‰•œÚ¨·®A¸z­¶´ºîí8 !aëµb±¸º“;uN˜˜êöerVm74ä9B0\_]NÖå¦ADÍ ÆâÜ´ê=¥ê@æÌjv€‡¬YNM×W*á° »%r{£ÆaqŽ ©í:OpÌCTÃ\N5Ewzi±®oæTÃÝ>.QP“%ÍÅ“Þ]N+¹ªîH_€›Œ×+Šé“È@ˆÝ\©6u”É`˜{¾ !Š8p‡—»¾\!“+¢ IDAT‡ ˜#hÒBÝD3ÀrJ¹ZR“EÍÅ“ž]¹'d7W«MdrÄFÃÜáå®-W0Â!öJdx½…2Š&ã-T7ÁÒ®"r¸ÃKË }#§Ê wù¸dIMX¨Ÿ®¦•¬…¹éíz¹aúD2dC«UE™ †Ù;óe¢Nì•÷QžCñ:OpÔc£wxiY16²-t·¤&ŠšÓB3J¶r'Úd·ÖªŠ2 ±wZh—»j£>^¯QŒÃn,´¡&sIE¤¸ÃC+бÞBiª¤î5'Oºýt-£d*ºG ½Anf§^²Ð^¯6öÑŠi¡~îêR#tbŸƒÜZ«RŒÃ.,04¾Ug{h¢aõ´…r¸ÓGSem§ÐB׳J¦¢»Ò°PÃFk $2b—*&€!wû¹+K qȉ6qaÑFc˜µÑZÓX˨2‡;½4]Ѷmt#«¤mt.Ñ(Ö ¯HúCìöz­®‚€DBìòBE7aØqu’!•özê&‚ÙDC°Pµ…vyiÆF{üt#§¦Ëw¡A6²^««À/‘Á0»¼ÔB{ÜåÅ ‚(äÄA'Zmí^‰Gc6 ˜9ˆJîòÑLEß.¨NFº}tóÞ(7²¹^Yªè& µÐ2‚(èÄ!½¹Z¥‡]XÐØfÍB3; âi¨æj¦)q¸ÓG³U=žWŒtûèVNM•5 ]H*ݬÕTÓ/‘»ºTÑ,4È]:ˆZ£“CÀ£û(´Ð˜‡44s5ÝBÅ;/XM Ue¤·—?4b”Ü»ä€ýKÕÚë=Þƒw¹bmc·”/7î87·‘é ¹Ež¾[ÉÜâ}î‰?ýÇ›SkéýzóÁã¿üì™;6Âýãye|£p±§óãÌ•ªaQ`J£î“Ðk·f „¯ BPo4J5u°¿ûQM½÷¼yýôÑÞO?óÀÐU@CÕç7s±Ó¡Ï|ò™Pï`2SYTÑCáŸ}ö©ÁÞ¨iÖLô¶’c`ÚÊ6²x¦úä#!~ŽqÓ‹«»óô‘îO~ä¦w@ÑŒÑéÝ÷¬éBNèÐÈV“Ã(ì‚S •'(êFº–2šDQÌÊŠ¹‘× uxðnEO” :½x-«ek¦W@]>2›TË ð‹¨ÇGno*ŠC2ìñÓ++  ˆ "nr}MÁ…Ð#Ú¨2‚,4âBº –ÒšDQ̵ÆÜm¨¯ç´lÕô ¨ËKæ’jÉB½ddKih0(Á^ß>³PØBoï¡Mî@EŠb.TUÌõ¼îàP‡§+úŽnäµÌº«–À/¢nßôêŠbqD%t{³I1 ;!߆š,¤4‘¢¨û]P=S5=êò’ù]µh£cq¥n£×VÃDaèðk«-Ô+¡a(šhCçvmT5×sºÌ¡7ÎTŒí’áb¨Óƒ·òzºjzÔé% w * J°ÇG¯­)º #ØŽúd4¼Ù¤…PàÐÄv mhM5×rºÌ¡˜g«ÆvñN´ËKRj±|"êö‘ñ¸RSAPB=~z}MÑLqÀN/¹ºª`ˆ‚Nè—ñ-ßV™ÎÚh½­ÛEÃÉP§Ç zªÒBÓj¡nÚhs½±¦h& ˰ËK®®*¢ øe|kã(DûhC5Wm4W3âEÃÉPG 5<<êò’¥6tb§YSA@B½~zsMQ –a—\YQD!ðËdh£I 9 l¡Eœ!0›ÔŠ¢.ÔÐÌÕlëwÚŽn[h§‡,§Õ¼…zÉäŽZm‚€„z|ôæz íiCƒN2´Ñ$…œPfh,®2ŒÂNˆ˜ÙCu°šÕdÅܸP7¶ ­Ý»SÔw+†»îD‡6Õ€¡64؆†PæÑX¼i¡™¤*u¡¦V²šÄ¡˜êÆV^k×w ßx~ôŽiƒ•¯|îÉŸz¤Ÿ£èž•ÃzvW½Àƒ§r´]Kÿ÷LŒ¯¤î°þ×oß~òñA‘¨:èn8앾ü?<þÐ@h¿ÞüÔ™»7Â:°V×À;s¹Œl×kµÊ¶o ¿=² EÉ9:·¶“Ê–jê[3²ãaþêðÄ;[Ÿ=Ò4ȵÑù\±œ*6n/î&3…+³;Wr¡€·²»üÝ×o\\^«Ä ZÀ-Q­ÒTU¥©Z¨õ/žSFæ·²…’ÐÒný¥Ñm¹½¸òæÕ[¯]›^«¼0wø"#óÝW¯¾54UAžs‰|±d! ËÀÅÃу`q@Ãé]ƒ#0ꄺ2¦@aÔ +M°–7%Æœ0]5·KÀÉ`‡ nÌt ºØáB‹i£¨@Ÿ:Üh|Ǩk( º¹¡k& ;@ĉnnêˆ \Ù6‚dNÙ¨öѪÚB£N˜©µÐ˜nÍtºys¡ÅŒQ°Ñ‰„QÓP@ntsK×L’Aĉnlê°¸8²m`ÃÈ(œJ4XȘ¼®Z¨ fkf¼ MÙèRÆ(4Zèdrºê[hÄ…“IƒÃ-t>ÝBkw¡cN/š©*pó°Ã…–²F¾½"èp¡©¤QU÷QÕD!Ä\èú† ²ÐÛ6*Ü­«`5×úfkæ–…ºàvÉܵÑe îDoméªq'êáí¸… ¥F0·‡j`%gŠŒ9a¾nnïDc.´r­¨( 7ÞÒ›w¡>Û¨HáD FB0—6y#NذÑèAt§d&+ÀÅØ­d\½…Î$Š ý"èp£áx íp£kû(ŽÁ°ˆ\ XhÊä Œ8 ¢e-ÔÍMMì¡.´ÚŽî•&ô‹ ÓnÇuÅ@!tºÑµu@–_FÃqÝB%Ç-Ô ‚³)“u@EËYS¤0ê„…†¹Y²…–÷ѵ¼‘­C…¦Œ²…ºÐȶ®è÷@oméÁˆÈm(nC›mh±an€Ì`Ì “3Q.v´£n4k£6”Z¨ PXÁ;P{t"ÎX¨6 °”5E cNXRÀFÜñ¹œÿçù{ÖÀü‡k•Fóž•Ã:wsw½±zßYÎó×—G—w­…§z<Óå–Y«êü—¡L±þ#f9V•ë8ÿà3ý_¯LöG=w×+{ŸË)*àÊJýõ[Ͷ©«Dô,Vv•|ܨ—'ê CŒJ/Mæ«ñIµ˜„„mÖäÚÖ0 Äd½!Êôær½.H*ÿ½±|-1¯U²p|ø”.E6RÕf~‹§(W(î¤r@ôî}þôêRéõäB³HĨ¬™èö–zulMÉnšB¥.1päʆùÚФ’›†Î…No«¾¯??W© Ž  !r2c,‰(2#’A1œI#›ÙÐ ´R@1"²YUÑf 9¨‘Íl %ªÈÍôˆÃÜ.¡Lùx="›Ë9Tj€ Ed0“‚u †E-"ƒ‘¨™0&iA m#͈l8´Ð°lpNÛ¨aÀå‰>ˆæöPÙÜ)£Lyy=â0W󨨴ÐÙ¬í¡ ¨0*iaì¡.¾…Fdƒa8B<6#’a¸E"1"²YWцæëh§‚Üœ¾7ª‡¢£ ¨¶£À ˆ›‡£‰Êc8B ›ùG .NÈf¢ŒÒ6º–G="ƒÙ4¬i0tz3Ž0#²~:•B ›aÙmhCCëE$S#,›ùFZAéòòzDn¡~A8À\VÕ:–€MF%-Ò†zx8’@šÙài ÈpÞB¥}4"›…Ú¶Ñd¥jÈËô°l®·¡ó6–Áx:G€ˆ¬í¡aÙ(œ´Qà| ĈȦ҆ÛÐÝ JÕ‡éÙÜ( ü]hÄÑB#í¨¤yÛz*R8¹‹2#²` ËfSGk{¨‚¶ËÈÅéá;Ð"Ê7 Ÿ×#2XÈÀŠN$¡¢·Ð›6êáí(g£svO÷Q‡YRP¼Œœœ‘ÍTíÞ Zèn Ë`(ŽLbQ‰Â‰]Ä!3,øž¨|­î£›E”³ÑÅ ,«0(h˜´ÑˆÜÚF&1Yó‰pxahF$CâZhD60‚³$`#"›ªV H¢FX6Ë Ú*#'gÔ©Ù>ŒŸê ̬gÓÅÚÝ%çgºîw`Mdôtoà­ñ »¼€½:“-ÕOöî˜åì=>Öå]ÚM䪧û¿ûß=r´Ó÷­W§¾}i®XU.žìîG”œ½*×r=÷?>ý.'ŸL Ó¾û•øð >|bÿ7®Ž÷:@èËÕ4›јH1Õ€1Iñ‹æp‚GÐŒŠªÌñg¡†3ʰ5À+E*=,êum–‰ƒê!q ŠF¢J2uìejHÔ׋´¨àwA¢yËFßåÈÝ(€+¹û¢.N ŠFÒFƒ{(¯E}1ÇUÕ:™bMNð˜QYur`¬ ÎP†È>j„E½®¡Í‘©õBïT‰‹ÓB¢±[%é:ö2-(èEZPp€Ww iÖÔaTjDc8Á"²Ò޲6¸`£ m”ˆLõ°¨¼S¹Zj¡A¡…†„¨_4†“<0ADV\Ýå4#’Ê0˜Nsí¨`¡úýPœ®/Ó‚¢¾Y¢ûy5(èK9®b¡‚1fŠ… Æí$3MØ!+.¶òL¥9aQÎç¨@Œˆ¨+:Z·Ñ’‚·m4Uéñ0-$[%’TlÚP7Fw9 ͈¤ ÄF% 8Ÿmõ´i£!urZH4Òíh™äØÏ«AQ_ÊßI2Ý„²âæÁHòN4"iÂù,ð>*݉êíh¼Lr6ºRàÊMšAÁ˜I³†#b3 £6ê9ˆNÚ(‚pÎFU­Ùh¹‰ã6š©áÝñ0-؆l4(4ƒ¢1“a íÚ!)^ÞIòšQI)˜LµP á\–òØKºj µ"‘ˆõJÅ+ÄÉé!Q¯Òcø/<}!¸ÏïßmÓªüî/<æÙ=KŽ×)|ágþóKíë[«î þüÓÇïwÝÁ§@N­e~áécG;}Â_ýÄY„`<]þõŸ½àw‰ïVrî7«º×Õÿ7¼YI7çW·‰YÓÐ0ïd‘(¸ ð“ùƈ¨`çò“šŠYhZ4ìkC3*6†³9žÛC ¼Ð†ÊduQ5(¨©:—±Ñ­=TЖ |ÕB™>“»í’jwoÔhµ…6÷ÐÐ,6i¢Æ¹¨ØC¹¦_PãV°Ñ•"_U[èlNhê(&Ö=ÌK‹€]RMæÌ‰Œd¡ÙÏ!#,6 €–m´¡ã͉VYA!¦xm¥ÔB½¼>—O‹† »¤šƒ3Ç-TjpÌäDaa ßM7¸týNÔ'h«%¾¢â0ßðòú\^PtêfŒgÚÐôhDl€¢Ñ‚‚ZRÉN•s¶¡®°Q?S|| µ¡Q¡î扌¨›°Sª98s,-!hƤÃ`:+Ò  <õ°Ðlx£ÜBË6<ˆnWYþ^è|^hÜŠ5§FŃ(„ yžÇzXl6 d¡¡ƒh¶Á¥êÔÃ5ýѵ_¾ õÜ%û(´ÑÐA´¢âí»Q^ÝiC×mÔwÌŠš ;Åš‹™£6Ê0Õ†ÎÛ=U ´n¡¢…2'UƒB3Û Éê3‡_xúØqÅšß%~åsO<àÕníO?uqðÓOi_ò«Ÿxè~âþ¶>x½±šmgòÿoö숈ŽÈþ<ü„^–@#*Ô„óE‰!=,44­UDk!¾^ÓÈVMp5À•KÖy7U|LI5XFa>®áášñªPTiÕÝœºZ«‰ðU'§ÏdÅ@BE¦údÞiØ-–ybNåšQ¡Š!œ+JÒÃB]3ÑZY°êuýG ^®¹] MduOêâôuP}*ïÔMØ-–bNæš1¡Š!˜+ÈÒ#B]7ÑjY°²Q™¨A¾QT¹DwQÅÏ·Pï]èZY¬h$Â×\œ¶P’ýNT$ædÎFу£M?¯d,m¡¬…ÚÐ0_sqÚbIjè8Æ·¡Â” 0k£ÆÊ×Ù¬ 2Q÷Gwj|¾ÉXÝÍÔu e÷F»„²H̉œA3ÚB2"BÝh¹t´¤Ò=TaéóÒ6”«»™ºQËw¢U§Mçš »„²tJ[(\,‰|*5È7ÊJš^É*,Õ`^ªøÚPS7ªbY%aVs·¡NN›±Q™9‚fL¨Rf ŠŒh •x¤…ùºbª á}ÔÙ†z¨âcÍDÏ59ÿAÔÅiK%©¾‡š‰º„²Ìã6Êa0SpPhD„º ábQâ‘n£¢…VTº]ç¤é?ˆ& BY¥¡64ÊWœ6[p¨&ê*2§ç\Øh¾…l´ÙŽjt»&8IÓÏ”œÂíî¡u mx˜ºYJ÷@õÙ‚¬¨S¨ÈTŸÈ¹0;…*‡ÁtÞAîBU¯ßåßÿ=ÖÞãà÷¾2çÇ[%ç½’ÿÖoëi!X(;9¤GXE3ÉzÕ! 5Ī5Æë²Œ•W+ª,©ˆnÒðq´"d›¼ÖÓÚÑWu·¡Ž6T"m(1§Š,ΕÜí(´0«6 ºe£e%l4«ðé¦à¥õ}”V]¤¹Y“+ seÕ–+ކN:XI"ú*Øh'_Äh-ßJ-”K4$iøiÊ)Ɇ˜·PÚܪÉe]©:ê:‰±’Dôù’KµÑÉ¢³“/µP'´H²Q§ÕÓ&ŸV/­{¸ÆAT*kÜýÐ.»§ÀFgKn+&^µP¾ªtÓBY­¢q; ÉI”€zHÝÛ†º÷ÑŠƒª«íhÙ¥6Z¸ åË&ÀKe'CZ„¯(¹õsõ|“OÙènCÌ©ÌO«nڌפ’Æ…¸Š³ •ÛP‘˜S7°SÈß.Z(k¡"Vƒw jª¹&ï§57UÚѵª£¦“(+ÉD_(»š6:]t›öyj£|´‡6 ²Qw´£|5‰ò~JÎ{üÁÁí7¤”¾öÚkµZ­}º´wïžÿC‡ç·o¯W™Ã÷oýÛx¤…¸ÊFà pÓMÛŠà" i»Mà£5@F!®¢¤ ñ€+5¾¢s€n¾°Û”ô ¹†[3àˆ˜Y¬ù=|a¥î0¤…ÛPiÄmT@ZòÑ.¾²Ñ>!·y/´—Ï/×}áÊë ÖãŠËFÕdÓa£fF•A®Ò4pAQV*i¬¢3•µÐ­†K5±….Õ|&€‚:IC´Q/­¡û e•m4Ý”ê½Bn¹æpH²ÒzݱꥵxÃB7“J ÅÐL7[¨jâ¼j£:+k6ªJuz…\\q© Š™åºÏ4!‚fß}P­mÙ¨„›‰ZÇаѪj" °rEç,´“/fTÑFóqÅi£Ù•º×0!‚f¿[²Ñ+­½+ê¡ub£®ªÝͪbÍF·góÁP«~uE¾ª›(g£U+½+: fWë^Äš6J‘ÞqÔ›;6J¡‘zW´ƒ/æl´GÈïÜs@Ì.Õü õN¾¸Z÷¤¸êfà p`ÅA”Å ð:Ezª)ü´j˜SE@˜•k:-i¼ 5³Ð„âP b¡kun"ÌA1»ø®¨Œ§ºIkCë¥ìўȩ¿¦iï2hß±ðÆo<ûì³ïuð_]]5M³»»û=qÖÂgŸ}RJ_|ñEEQŠ¢ÌÌÌ<üðÇ_´w˜Ãæ0‡yŸ}øá‡­cq7oÞüú׿N „ûØÇŠÅ¢U‹b±Ø¹sç÷Ôas˜Ãæ}Æï÷Ÿ;w®Ùl†1<<¼.Çšø8΋/î¦Ãæ0‡9ÌûÏÅ‹‡‡‡{{{ iÕš;¿ŸÆ4ÍF£q¸§s˜Ãæ0ï3“““###±XìÝJŽu^ç0‡9Ìas˜÷“™™™f³Ù¾î”Ãæ0‡9Ì¿NKÎas˜Ãæ°äæ0‡9ÌaKÎas˜Ãæ0‡%ç0‡9ÌasXrs˜Ãæ0‡%çpæ0‡9ÌaþuBÞÓÚ/½ôÒŸÿùŸß½üw÷wçææ^}õÕ¯~õ«O?ýôû߬¡¡¡¯|å+íK~þçþ×ý×÷žþÕ_ýÕw¿ûÝßû½ß›˜˜xã7ž{î¹'Ÿ|ò÷ÿ÷ÇÆÆ¾ùÍo;vìÇs¯_¿þÕ¯~Õzü©O}êw~çwî¹Ú׿þõ×_ýk_ûÚSO=uÏ>ó™Ïär¹üà‚ üx[òÿøý×½÷ô‹_üâ'?ùÉÿÖþz>ÿùÏ'‰ï|ç;n·ðì³ÏRJ_zé¥9ñ _øÂÆÆÆÞÓ_|‘çùÿßW###_úÒ—¬ÇÏ>ûìüÁ¼ÿ×üéŸþi]×_xá…Ÿù™Ÿñx<ßþö·¼íßÿýßë[ßúµ_ûµÏ~ö³?©>.,,üæoþæÞÓ~ðƒôGôÊ+¯üÙŸýÙÏýÜϵÿè'›™™™ö7æ3Ï<ó‡ø‡?ö«ýÒ/ýR2™üçþg—Ëõ.«ÍÍÍýÖoýÖùóç¿þõ¯¿WâË_þ²u¯—½üÝßý]$y¶SSS_üâO>ùäsÏ=÷ÿ»’“ÉdFFF>ûÙÏÞñ÷‹Å^yå•‘‘‘|>ÿÙ¬R©422òÌ3Ï|ík_³–øýþö¶¶¶FFF²Ùìç>÷¹O~ò“ÝÝÝ€¥¥¥‘‘‘jµúc׹߸ßèëë{î¹ç^~ùåo|ãÂßþíß¾{Íõõõ‘‘‘B¡p¿—šœœÜÝÝ5 ãÇÛ’ú§úã?þãO|â¿ò+¿ø‹¿ø‹/}éKèÿeïÍbìþÿÿ3MÍ´ïû>*u·P"ƒ¦(!J!ÙR¡De )Ê.IÒ&!B‘ˆ¸Ý’î[Q -SѾ—öMMû23ß?Îï}}æ—å–å¾»9¿®9×¹®sÍëœë<ÏysÃÆfjj:¡JOAAAMMÍâÅ‹“’’xyy©T*@ø¡z“påÊYYYÀ’%KæÏŸÿüùs<?¡Ì’——çèè(%%åëëûôéSXöîÝû·ÍÍÍ%gϞžåþBšššrrr–.]ú½þcEE… ×¹sç/^¼8uê‡sqq9{ö¬ˆÈZc¾´´ÔÎÎŽŸŸ?((ðüùó3gÎàp8OOϯ.õµµpQäÏÐÛÛ›““ÃÇÇ÷u¶ÊÉÉ9w–l¨-[¶ìáÇbbbŸ¿°¸¸ØÞÞ^HHèìÙ³üüü?G/çkk¢¢¢ZÿãÙ³gŽŽŽÏŸ?Óé!ÿŠŠŠ¯~8,!Ø(¸rå ™LŽŽŽÆâ\¾|ÙÑÑ1//ÏÍÍ 6%6mÚTVV6Þ´²³³BCCµ´´¶lÙ’°zõê7n`ÿ%&&pòäÉ„„€‡‡Gzz:`ëÖ­XœwïÞ±Þ–Édb§ÌÍÍa`ee%™LÞ¼y3•J%“É{öìó0mmmÍÍÍ𿋈ˆ444@9÷ôôÄnøöí[ØL#“ÉæææØ)¸‡F#“É–––€ªª*ì,ÔÑgÏž‘Éä£G>xð€L&Ãwø+(..#®XZ¶¶¶€üüümÛ¶½|ù>|øáÇð844^uîÜ9ìªÇôÕTUU…fÁãñ………L&sxx»pùòå0&´pNNvêСCð>·oß&“Éááá°»ŒE€Ù - Ûd2¹¤¤d\Öxûö­­­­¸¸ø… ´´´6nÜøøñãõë×ÇÅÅa ]½zë.ciii2™\\\<&[±†ÔÐУ£ãž={ZZZÈdòš5kÊÊÊÈdò–-[`„çÏŸc÷<}ú4lS_¼x 8qâçåË—_‘郃ƒ<<<0/º»»ß½{÷âÅ GGÇØØXÖ‡L&ÇÅÅŽ=Š…dff~Eº•••Xºòòò]]]õõõ÷ïß'“ÉÁÁÁ0Úùóç+á^ IDATÉdò;w|}}=ztðàA˜(–­d2¹²²’õÎÆÆÆc^ÈÚµk¿KU;iÒ$øÌD"±´´ÔÔÔ”L&÷ööΙ3gppKÑÊÊ PVV¶fÍšªªªâââÈÈH…§OŸbq ·)22’L&GEE’ÉäßÿýÈ‘#X¬>$“ÉÕÕÕ+W®$“Éðyôõõa´E‹ÁÚÚZìZ¬S‘œœŒ|Cƒñþýûîîn&“I§ÓßšÀÀ@øV`!®®®€€€€uëÖ®^½jooÏÅÅuáÂ*•ª®®.##“››û~œÜ¾}°lÙ2ÖÀ³gÏ 9;;ïÚµ ö‚CBB¬­­¡ß ¸¸XOOpýúõ–––ñ¦øàÁè»` Þ´i•Jµ··¹páByy¹™™Àßß¿¡¡aÍš5œœœW¯^¥R©JJJ²²²EEE€úúúÉ“'*•šœœŒÇãõõõóòòdddÔÕÕcbb Ž.Z´hÌÃÔÔÔ¸ºº ‘H¤àààŠŠ *•ZWWçììÌÃÃH¥R§OŸ.--žž®®®““cmìwvv¾ÿ¾ªª žÊÏÏ—••USS£R©—.]âââ²µµŠŠðòò¤³³óx¦¨¨øë¯¿455›››ñx<W]]¼¼¼„„•J‹‹#æææ \\\+V¬ R©¾¾¾¼¼¼T*uÏž='Nœðññؽ{7•Jµ´´‹“\AAÁ¤I“äääH$REEE^^•JíèèPTT„}¬ÄÄDvvöyóæ½xñÀÉÉÉê¾X¹r%¼¯¯/ÀÍÍíäÉ“‚‚‚nnnT*uùòåbbb·nÝ‚-IIIè²{öìÙ¸l’””˜7okàåË—EDDlll¨Tê–-[„„„‚ƒƒ÷ïßÏÇÇwøða*•:þ| ‰GQ(€´´4ì/ÊÉɱ³³?}úTCC‡Ã±³³744ÄÅÅaƒƒ@ ]»v““sõêÕ>”X°`•Jõööæçç÷òòª©©Né;vÔÔÔ¸»»óññ;vŒJ¥Î;WRRòÉ“'ãÍú–––¨¨(NNN‰dccÓÐÐ@¥RËÊÊBBBNNN555T*¾8€Ó§O»¹¹ñòòž>^\\|ñâÅT*ÕÓÓS@@àðáÃpôAXXÖ‡¢¢¢¼¼¼¾¾¾T*U__ZxúôéYYÙGIJJÊËË×ÖÖª««³±±Q©ÔÔÔT<?sæÌ‚‚YYY*•zåÊ..®uëÖÝ¿_\\ÜÔÔ”J¥8p€ŸŸÿСCãúï—/_>{ö,l1{{{ãñø¯éå\»vMSSSSSóÒ¥Kžmii’’"‘HD"±¡¡addäëä011Qóœ:uª»»ûýû÷BBB;vìÀz ’’’pà{]¿ssóÔÔÔƒ’H$AAÁŽŽó !!ÁÍÍ}ôèÑììlSSS‰D êëëY;éÕÕÕ8ŽD"ÉËËÓéôwïÞŒŒ444ÀšâĉŸêÞ¹»»§¥¥ÍŸ?ßÛÛÛÐÐ0;;›¯µµµ¯¯OBB‚D"qrr666bë½{÷îÏ?ÿ,((((( Ó¦MëïïŸ3gލ¨hRRÒÈÈH}}=‘H$‘HÒÒÒÍÍ͘ÇÀÐа  à«Çêêê`óÀÃÓðìÙ3‰$++;<<ÜØØÛ§4D"‰‹‹÷öö’H$˜­°Ñ#""B"‘øøøÚÚÚ>tÊÈÈ$$$<~üxppB¡,Y²DRRú9ÙØØ ‘GGGëëë±–¸œœ´I@@À£G¼½½oß¾íëëkoo¿cÇŽ®®®®®.aaa,ÑÞÞ^xmssóùóç  ¢#===° Á?ÛÑÑÑÓÓ#**J"‘xxxà‹ã766ÆÄÄ0™ÌÑÑQ…Û·o´TËÉÉ?^ZZzpp°¹¹yúôéOŸ>=þ<‰D£Ñh0]!!!¬njooïéé‡é677c鎫©º`Á‚ììl//¯¸¸8==½ÐÐPVOü³ wïÞuww_³fM{{{oo/L—‹‹«¹¹ù+V&‰‹/ÎÎÎöððˆ9sfxx¸˜˜ØÊ•+÷ïßõêÕ   °°°K—.íÙ³vPÚÚÚ¸¹¹I$77wss3lÉÖª)::ú·ß~ÃápÕÕÕ £¶¶Ç)À߈­­-¬Êªªª?~ [¥µµµYYYùùù¬e¾­AZZÀÅÅ%))Ù×××ÚÚÊËËK"‘DEE»»»±þJggç–-[ ?eáÐÐP===vvöºº:ƒQSS ‘Hùùù‘‘‘ðÅ!¬UDkkëóçϯ\¹²uëÖŒŒ èêÿçÆr°Ö¢‡‡l Ÿôòòº}ûöúõë½¼¼þÉáææÿ|œ°°0lë¯ø"‰›Ð%22ÒÛÛ{Ó¦M»wïöóó;þü‡qÖ¯_ÿäɓ۷oëèè,\¸ð+†‘>äÒ¥K>>>;vìØ¹sçñãÇétúµk×°Ë™3gŒ1e‚ÂÂÂPo`¹íAAAV¹ššÚDZª*%%VRߨ7PwÛÛÛ±ZfÚ´i<<<&&&_~Ÿ]»vmܸë-9»dÉ’¢¢¢””EEÅœœœ)S¦´µµaƒ×¯_Ãc<«`¨7Ðeèîî~ïÞ={{{Ö9N;wîÜ´i–(t± þ[zïHJJʆ æÍ› ›†åÈ‘#pZï+ð/^<}úô;wîXXX0ŒÍ›7‘íÐÐÐààà}ûöaz‡‘ _úëÒ}ûöíÒ¥KáÀêòåË †³³3L×ÎÎŽF£ùûûÃÉŽŽŽjØ\PPðÃÚLLL “:>>>Ö2üÑ›˜ššb*œœœp”———ufì·XXYYFåàà€5ðúõë™LæÞ½{CCCÙØØ¾e~ øqßåðòò ®]»VCCŽ(|GŽ?ñ™ ,(//×=çÌ™ýäÉ'''À­[·ddd<<<ˆD¢   ‘HühgîñãÇ£££ðÿŽkêTvv6'ü¡¡¡®®.¸‹ט¤yxx544 ?ê—À^YõÇ –””hhh°Î8ÿ.TUUAÍc2™4MPPp¼bÆÅÅ%((xüøq gôöövuuÁ&!???k³‡Ã jhh`ïÛ˜Þ77÷ðð0ÌPÖW”““SPPÐÇÇGCCãÛgxëêêÆÅÅ¥¦¦ÚÙÙîß¿/##ó퓤ÕÔÔ¾Ä 5::Ú××µ–µ¢Ç8tè!àææ†ãX¯^½ïóÐéô®®.Øõgggÿ°}pþüù£GºººŽ™Ý Óݾ}»††Fvvö·¤ËÁÁÁš.‘Hääääääüè û)´´´>åÆøÇ€e¸¿¿_CCãì þþûïþþþë‡mÛ¶ihhäääü­ËWFFFWW—µŠ(//×ÐÐØ¼ysRR’ŒŒŒ›››½½ý©S§†††¾ÂûM½ÇÆÆÆúª³±±ÁìTTTÔªU«V¬XÃáètzrr²’’Ò׈!Ûï¿ÿ)€Í›79rdhhèÔ©SÞÞÞpöÐannnjjúçŸ*+++9<¿xñb8ýáþýû cýúõ~~~çÎ;~üxHHÈþýû·nÝêééÉÉÉyîܹááá7FEE]¹rÅÒÒrÉ’%8.99ÙÞÞ^WW—N§Ãú·¡¡ARRþ ii霜66¶ÔÔÔyóæ:t(66ki²âìì<44äëë [4 # `Íš5«V­¶µµ…¶}øð¡––«0TUU±.פI“ÒÒÒæÎ+!!Ád2õõõ###?~üá…ãÍ#¬kÅÅÅ ijjJHH¨¨¨¤¤¤ÌŸ?ßÂÂK ÌÃ=<<†††}:æÂÅ‹_¾|yóæÍ°vrppØ¿ÿÙ³gYï8<<ìää´eË:~ûöm==½þëÚÚZhCׯ_ãñø—/_êëëÃg “Éׯ_gcc utt¼sçìÈ~û·A8088ØÝÝÍÆÆÆÏÏÏ`0>ãIG|;p<666ðâÅ ssóE‹Áé×â[ `2™Øw¸ˆ—{÷îÑh4kkknn´àÍ?Muuµ²²²‰‰ Fëïïgggÿ¨@Œ‹ááá   €€€ú=2âu¬!¾I“&=}úÔÌÌ úOÍÌÌX¶A _GlllxxøÞ½{á 1$9ˆÿUUÕñÎn@ ŸgýúõëׯGv˜à Ç@ ä I@ Hr$@ Hr ñÏ0v’ôèè(Ü@ ˆoáõäÙÇœ.))INNF–B Äw‡UoŠŠŠÞ âñ½œÁÁÁÔÔÔI“&!£ â»ÀÁÁÁºùÓÿϱÆÉÉi``€l„@ ˆï??oo/Üæ  køÇ@’ƒ@ $9@’ƒ@ ’@L\Ðm?*•ŠŒ€@ ~>äääÄÄÄäL, ôõõ‘ÄO@@½œ ‡›6mÚÀÀ2ø9x÷î—¨¨èÐÐ’œ “ÉoÆ ÄD–!!!QQÑñ^ˆ¦ âb½œŒŒŒÈÈHxljjº|ùòF ÍÏÏß½{·ššÚG#8;;3Œððð_ÍÖ]]]{÷î…ÇŠŠŠêêênÙ²‹™””tçÎ¥K—š››Ã¨¨¨ÔÔTGGG===,š¯¯oee%öóôéÓ‚‚‚ðxóæÍL&‹ˆˆøúúŽy˜7oÞ„„„°†˜˜˜X[[øØ—/_~õê•‹‹‹¶¶öGÿ—››[OOOXXǘSMMMÄ~jiimß¾½uÄ/Ë—ör^½zåååÕÞÞnnnÎÁÁáëëÿ)eŠ‹‹kkkûÔ­âããïÞ½û«º§§ÇÉÉéùóçæææÚÚÚÇ´´´ÄÅŽ|ù’5rYYY\\\aa!ü}æÌ™¸¸¸ýû÷gggczséÒ%MMMsssssóçÏŸ;99õôôâããa8…B¹~ýú¾}ûÆŒ‹‹£ÓécÂ[[[]]]333a“&M Boz9Ÿ#33ÓÃÃC@@àØ±cšššS¦L)))QVV޽ÿ>Œ³eËCCÃÀÀÀœœÀñãÇCBB&OžìááQ[[ ã\¸pŸŸ»m__Ÿƒƒ<–••=}ú4 ¤¤äÈ‘#:::óæÍ  P(ÎÎÎ?¡‰D↠œ ‹ŠŠ¼¼¼ÒÒÒX-êêê xòäÉ78ž}ûö­‰‰‰±±qHHHcc# LOOïìì444„ƒ&%% þøã·téR(i;vìxúôéGŸJFFFkmmŠŠ***ºwï&<›6mš?þË—/_¼x!##síÚµ¼¼¼Ã‡GEEUVVúûûËÈȸººÒh4€]LL kþ&''kiiÁ$üüü²²²/^¼8wîŒfnn¾víÚ;wîÜ»wÏÖÖÖÔÔôâÅ‹)))Û·oùòeVVÖîÝ»W\\|òäÉsçÎÕ××à #""xxx˜LæÚµkaˆ°°0¼m]]¦²S§Nõðð@¯:ñŸéå´´´äççËÈÈhjjB§Ð¢E‹¨Tª¯¯¯¸¸¸ƒƒƒÁðôôLKK366VPP,^¼XBBbß¾}7nÜ055uppÈÌÌ´±±éïï‡÷Z»ví«W¯ÌÌÌbbböîÝ[^^îêêÚØØ(&&¶gÏžÄÄÄ7oÞü†&‹-244llltssSRRòññaísäççÃãÚÚÚ’’ìÔµk×444-Z$--íïï;:GŽQUUuww·²²jll ‹‹‹ƒŠC§Ó­¬¬ìíí…„„âââÆøÐ>Ó=q℃ƒ÷òòJNN~óæMbbbKKKvvvbb¢‹‹‹††FII‰ƒƒCKKËš5k¸¸¸ööö˜FB$%%kjj¬¬¬¼½½§L™çîîž‘‘ááá122âàà %%åççS^^ž˜˜XSS(((HLLlnn¦R©‰‰‰Û·oŒŒLLLtrrЉ‰133sppxõêÕÚµk‡††V­Z•œœìàà`mm}÷î]gg熆†Í›7———;88É䈈ˆýŠbâör> ™L&‘H²²²=JJJjnn¦P(pôiÓÖ¬Ycff6}út..."‘˜––†íKJ§ÓSSSÅÅÅ«ªªúúú233W­Z•““3wî\ ‹öööŸFoXÅÛÖÖ¶££#22rÌÐÈóçσ‚‚ÔÔÔ.^¼Cà`LEEÖ®‡=žöövhá .Ðh´íÛ·ÛÚÚrss_½zŽ¦Ì›7ïþýûƒƒƒk×®µ²²»|ùòGŸ'-- vA-,,¯]»¶víZccã?ÿüóÑ£GX§ ÃÚÚÚÌÌ,,,ìÕ«WsæÌÁ#9\\\+W®œ4iRYYÙÑ£Góóóuuu:_XX¨££cll\^^YUU5æZVrssOž<©¡¡±sçξ¾¾Y³fMš4éÖ­[ÃÃÃììì)))ìììÆÆÆCCCýýý¯_¿æååMJJòôôœ6mšˆˆzÕˆÿ¶äÈËË'''Ÿ8qP]]ýÑ8ÚÚÚ[·n…q:::¾üæÂÂÂêêê?™­;::V¯^ÝÞÞ~óæM---ÖSúúúsæÌ)++ÐÐÐ022ºték-|ëÖ­ŠŠ Ö«¦N ¸~ýúÚµkëëë­¬¬îß¿;: …N§ÇÄĬ\¹’H$nڴ飪£®®îéé‰uJ>5>ÇÊ”)Søøø¾ð/sssS(Àž={Þ¾} ï0.»|àÀ‘˜˜˜¼¼¼ððp--­ØØØ+VäææÂjwáÂ…L&3))iÞ¼yqqqVVV˜×n """¬u÷÷¥±±ÑÆÆFYYùâÅ‹«V­‚ªS^^>^ÉQSSû¼È±³³Ÿèçççîî~ëÖ­ÐÐж¶¶ÖÖV~õf``@]]]EEåôŸáåË—Xëûç`tt´  @AAáS½7“êêê‚‚‚;wÂ}L&³©©©µµUVVv‚‚‚©©©===ååå¹¹¹plL]]H$b·ÊÏχ{ðáñx8üöÏ0oÞ¼””ìçÐÐPnn.t¥òòò*++ÉMΜ9óÇüm´¥K—vvvþõ×_666®®.333iiéÓ§O¯[·NMM-88ªNUUzÕˆÿŒäðóóoܸ‘ÉdÆÅÅuuu-^¼ØÅÅåüùóAAAׯ_߸q£¹¹ùÁƒ………ýýý»ººœ}}}ÝÜÜÖ®]»råJ¹zõj##£¡¡!<ÏÉÉù×_-\¸POOodddÒ¤IQQQâââ.\صkWddä¶mÛÜÝÝ2s766bÖL™2%"";% ##ÓØØ(%%C>3¼8þüºuëììì Ø466>zô~—óâÅ‹™3g„ètº¤¤d\\Ü—<ž]SSÓùóçcccÛÚÚöíÛ·téRÖ™uåÉ“'††† N´Ã••µµµ…OÒßß?{öl???>>¾#GŽœ9sæõë×]]]ëׯ‡ß$µ´´œ={v×®]<ø0¡¨¨¨eË–­X±‚ƒƒ£ªªêÉ“'!==L&ëééÑéôžžžèèh))©ýû÷oÚ´éÍ›7³fÍò÷÷G¯:1À„ÁÁÁîîîþþþ„„++«OEíííÅÆcøùù…„„ºººº»»¡_hxx¸··WLLŒ››»¥¥eppPRR’H$666Bo¬¬lcc#¶¶‚‚ƒÁx÷îüÉÁÁ!-- liiáââÊÊʲ±±YµjÕý£Ñ¨¨(WW×÷ïßcB$%%%Z[[¹¹¹ÅÄÄz{{‡††DDDh4Úû÷ï GNXXó,µµµõ÷÷‹‹‹sqq577³®£#++‹Çãá161öudeeÇ<kºc€]]]˜»¯½½½¯¯>ÞÀÀk¶ÊÈȰ³³Þ½{Ç`0àdEVFFFX' pqq‰‹‹úúú0/+,K€÷ïßÓh4¬,‰ŠŠö÷÷÷÷÷KHHprrbšÙÈÉÉÁ9ÙØŸÅþéððpSS äää”@¯:ñÉÉÉúí·ßþv)/~~þÞÞ^ƒàãã3ޱ^^^Öñ[èäÁ>w`ó‚Xßp($XÁz9Û˜JêÍ›7«W¯ž5kÖ§fXýwùðÏbµ0ŽY˜ŸŸû€‰ÕÂV…øÌç™MëSé²" ¥CTT:N¹¹¹?š­æ,ÇGSáááááá($$µ+KÆ“î§þ,@ø[ ˆ êXûÇPWW°µµUQQZ²d r‰ ’œó4ìì&&&ØT`ø™!@ ä|ðx<ë¢8?###QQQ¨´!ˆŸƒA¡P~Éùù`cc#pý4øiD’3áX·n6 @ ~é&82@ ä Ž¢Æ IDATI@ Hr1aAÓ~8hîø)¡!É™XýèÑ£û÷ïþñÇ•••êêêMr:;;­­­•••³²²ªªª¬­­õõõ>|xõꕊŠÊÓ§OÕÕÕ+++544öï߯¤¤/óæ§§gFFFLLŒ°°ðÎ;…„„ÓÒÒ<¸víZ¨:vvv===ŸßTãùóç[·nupp8}ú4zÄ¿/9¬TUU½yófòäɬyyy555ð˜L&KJJ¾xñ¢½½ÝÐÐ077—F£™˜˜ððð$$$À-ÿýwssó•+W‰ÄèèhyyùÍ›7kjj¦¥¥ÁMÞ²²²°&¿–– ¸¸¸´´êèè(((deeÁ- ÓÓÓ555§M›—£~òäÉÀÀŒlaaÁ`0>|H$çÎûäÉ^^ÞùóçOœ••îèèØ³gϺuëŽ;¦¡¡áææ-_WW#Ÿ:uª¸¸øÉ“'zzzÞÞÞééé–––XGgéÒ¥L&ÛË™‹‹káÂ…4-99YHHÈÐаµµ5##CJJJFF&''fëÛ·o¡…bBHNUUÕéÓ§sss-,,Š‹‹a`nnîáÇH$RFFÆÒ¥K·mÛæçç—––æééÙÒÒrçÎ 6$''ŽŽB%X°`Á† ÄÅÅ_¾|™šš èééyùò%dž LLLäå僂‚’’’fΜYQQ!$$tðàAvvö'NÔ×׫©©åääÌ™3ÇÍÍ-//¯¥¥••emm}ìØ±œœœW¯^UVVººº‰Ä»wï YXXlذïøñãIII999AAA ,øwó ±±1##ƒL&_ºt †”––¾}ûVCC»víÚŒ3Èdr\\ܘË;†?xð`ddäâÅ‹±±±Û·o_¾|ùààà‹/BBBH$Ò† f̘ahhXTT´aÃ33³íÛ·¿yóPWWWRR‚$@üPÆ7} --íÖ­[óçÏŸ>}:¶á|llljjªÝ… tuuà±Þ›››¤¤äºººüýýá–kçÎÃî),, +M999ÖžÓ¥K—Èdò… >,%%U]]]WW',,ìíí}áÂCCÃëׯ¿~ýÚÑÑQ[[°sçNeeeì^^^ïß¿?}úô… ‚‹‹ )//?~üxss3k}ýoñæÍ› .`?KKKO:UQQqàÀSSS(¥Â˜‡ ãÉ“'ÑÑÑÑÑÑ4 †ìÞ½.'îââB$/\¸àçç×ÙÙyðàÁ&=cÆŒ 6æÎ»råJô> ˆ‰åXƒ˜˜˜P©TØ@†¼xñbhhs¯AöîÝ+##óíOI¡P°í€ÄÅÅóòò®\¹RRRòuwãåå=vìØ˜GýwQTT444Äô¦¼¼ÜÓÓêMffæŸþ9þü™3gFDD°^UVVÖÕÕßÐÐàììÌÇÇX¿~=G%@ü<’ó!ÍÍÍååå³fÍš5k–œœÜzÜœœŸþþ~mmíîîîŸ&¦L™bccê7‹/†§>|XWW'""’ŸŸ_^^xüøñ»wïÛ¶mÓÓÓ{õꕯ¯ïêÕ«¡äœ8q‚}n…@ &"_ù]NvvöëׯYC¬¬¬Nž>þÃðÜÜ\Öyêñ/÷r¦L™bllœÍÇLJÕzFFF¯^½zòäISSÓ½{÷TUU—,Yò©;lÛ¶íÔ©SgÏžíëëû|ZÊÊÊfffEEEþþþ999mmmššš³fÍ"“É©©©ÃÃÃbbbZZZ S§Nµ°°(**ºs玴´4¶´Œƒƒƒ¯¯oXXÏèèèÎ;'`TTTܼyséÒ¥¬U¿¿¿?<¦P( .\¸p!üÙØØXZZºvíZ(º7oÞLMMmoo߸q£€€€¿¿?Œ¹k×®ÐÐPÿ¾¾>~~þM›6‰ŠŠ®_¿>99ùæÍ›X4€ººú‚ òòòDEEg̘^ ñãÀãñx//¯¡¡!8¨®®®þa$'&&¦¯¯o`` ¬¬Ìd2gÍš5wî\(--Í`0˜L¦ššš“““²²2‡›2eо¾>///›®®îœ9sˆDâìÙ³ÙÙÙq8ÜÞ½{ÙÙÙ)Šžž€›››B¡hkkãp8AAA8x£®®Îd2™L¦””ÔªU«ŒŒŒäååaZ .ÔÑÑa0ªªª†††""" ÃÆÆFVVV[[[__ßÐЋ‹ Fž={ö¾}ûp8ÜGý¡&~óæžžÞÐЇãää¤P(Ó¦MðóóS(MMMaaa …¢¦¦†Ãá$%%'MšÄü ²²²ÿ×'ecSSSƒ6‚mÚ´ið666===}}}<¿pb2™&&&[¶láááéÊÉÉ­]»KTBBBUU•Édêéé¡W@ü-MMM\\\bbb»z$‘Hf2™/_¾LKKÄÁÁÁîîîþþþ„„+++dÍïKTT”««ëÏ4ò„@ ~q°5ÖþvYO~~þÞÞ^ƒàããƒÖXC Ä?’@üC Ù´ÿt:MC ? íííBBBHr&j_’D"!; ˆŸ‰WÂD’3á P(ƒƒƒãÚâ@ &>p™f$9 EEÅááad@Ó$@ Hr@’ƒ@ ˆ‰ š>ðÃ{ ÄOÆàààx'­!Éù'¸yó&2ø™˜>}º¢¢"êåLDº»»Y·'@ ˆÿ4D"QPPÁ` É™ˆàp8~~~dñsÀÉÉI$¿dOÈ1 éø‡‡äÜ»wOéœ>}ž}ºoß>”1ñ‹JÀÔÔ4(((//oÙ²eñññ{÷îuvvˆŠŠÂÏtêëëKKKÃÃÃç΋]cllìææ¶lÙ2>>¾´´4^^Þ¬¬,‰´lÙ2{{{]]Ý'Ož”””îß¿ßßßïÞ½‹/¢ŒA ˆŸqŒå˜™™™™™ ܱcÇŽ;Ë—/?xðà‡WùJ’™™ùa ªªjvv6ÊøÕ{9_NuuuOO’’²/@ ~ ä\½z•ÉdFDDÀÏ<€|ÿIÒGŽAfýˆ¡ÙÑ¢Ýâg鬰}ewÕƒ?'//Ï:;@ P/ñC Óé‹-ïv­1ÁA[´MDúúú -Ú$@ Hr@’ƒ@ ˆ‰ š>ðÃ!‰È_Îèè(NGvørp8@@vørFFF¾bªIÎNNN¸'7âo‘““ãççG’3.ØØØ Fqq12Å— ªª -†L$çç„Á`¼|ù-ÿó÷e‘U_GOOOnn®²²22Åç!L&m‰$çço‡êèè ;|..."‘ø™½þŸ——•±/±;;{oo/2’âûÐÞÞ——ß´i2ñß“œüüü[·na?çλpáBÖqqq¬#JJJȾÒÖÖvóæM¸É¤¸¸øúõë]]]++«1ñÒÒÒVVVºººXø¥K—,X   0&þáLJ††°~ÜĨ½½ýÌ™3°Þºu+k|*•zçÎì§‘‘‘‰‰ àáÇ€U«Vikkó•••€íÛ·KIIM@óvvvKKK×××ûûû3 GGÇ_¼È=þ|xxf+äîÝ»poªõë׫««³F>{ölkk+öóèÑ£###° xxxŒ¹YYYdd$@[[{ÕªU0055õñãÇ€E‹޹äÚµk%%%€­[·ÊË˳ž:zô¨‡‡šñ…üùçŸÉÉÉfffsæÌïµ£££ÞÞÞ<<<^^^ÿØÑ$é7oÞ>|8''GEE¥µµ5<<üõë×câ<{ö,<<|``@EEEEE…››•†1twwïÞ½ÛÓÓóöíÛX`iiill,4Z]]kíõ¦°°žMHH R©€Ë—/ïÞ½ûìÙ³---¦råʉ/ªÿþýû3gÎÀƒqîܹ1õE^^žÊÿzSRRC~ÿý÷üü|(rXþ†††~4õžžžÄÄÄ-[¶ìܹsïÞ½p×ó_–ôôôÝ»w?~<++‹Uojjj`>Þ¾}{̼ƒØØXaaa¬<àp8ƒáéé  ùøø°Æ///¿qã<ÛØØ HKKKOO‡ÏŸ?g½äêÕ«]]]ðìÅ‹ëëëYLaaahAÂ/GDDDEEEPPð+® ¿zõêÄêåx{{§¦¦Nš4‰‹‹‹L&ß»wžzøðaRR’••USSÓ«W¯ìììÜÜÜÆ´YAGG§µµ•õ%çççŸ;w.ܽûæÍ›+W®ÄÎæää mܸàââRUU5mÚ4%%%"‘»>ÅÎÎŽuf6@ “É€¬¬¬Ã‡»¸¸°ÆŸzô®ZµJ__ÿúõëYYY›7oÖÒÒ )++Û³g‚‚‰'š››aL???...ƒ±cÇ...ooïýû÷‹ŠŠ:t¨¾¾þÔ©S0šºº:tNdeeA`þüùMMM¹¹¹$©°°PNN®¢¢î¹¼eË–”””ÒÒRÀ¾}û …<øþý{xy``à¿b½¿ïå Ã)!!¡¢¢‚…ÿñÇ'Ož––ÎÌ̬¬¬,--=qâ„““SaaáÏúÇÄÄ899999eee…‡‡;99}ùäT...›¥K—²JIIA½ÉÌÌ,++[·nì,ß¿ÿS÷™;w®Í˜êþÀ]]]ðØÕÕÕÉÉiûöíð'Ô؋ڳgϘ¾xñþ©øøx²bÅŠ¶¶6¨¡¡zFFFPoNž<¹aÃx<Ñàåå;wî… œœœüüü~qÉ™¤¨¨HPPfnCCC[[`æÌ™Ð9sâĉ•+W³;wî†Wõ÷÷ïÝ»wñâÅK–,ðññÍš5ëó )))™ššŽŒŒÔÔÔ|xvÆŒ¦¦¦%%%4 àááááá! 0Á­×ÔÔ”žžÞÔÔD£ÑÜÜÜ8 ¦¦VRRRPP ¥¥emm­¢¢’““S]]íèè8cÆŒ 6ïß¿ŸD"Í™3'((ÈÞÞÞÚÚšH$ÆÇÇÓéô¸¸8<¿råJ###˜ FKJJ¶¶¶644„‰ÖÕÕ½~ýº¾¾~hhÈÝÝ}ß¾}cj‰¬¬,IIIkkk™´´4555kkk‘¤¤¤îînƒsçέ_¿ÞÚÚÇÇÅÅý+üÊkeee€•+WÂO´µµ±æÛ·o?~ü¸½½ýç{Wß¾}k``àææÖÙÙ«¯¯¿lÙ2qqño¼-•J½{÷.ë(ýW|`±`Áx`ffúúúÜÝÝáÜ­ææfŸ5kÖèëë¹P^^kf[ZZÈÈÈXZZ?~ÜÐÐ0cÆ ¨7ÒÒÒ–––¶jèïïõêUpppww7‡KNNvwwÿE´¤  ëyP(”-[¶|4Z^^žŽŽÌܸ¸88&G¡PàYccc,æÎ;ág¹ÃÃÃ...ëÖ­Ãú+°wþTUUUUUóóó+**°ò‰²aaa]]]aaa:::°Ù4‘ÑÖÖ¾qãÆË—/SRRLLL´´´ž>} ¸sç•J-**‚1§OŸîëëëîî~ÿþýýû÷;88 ¹»»Ã![¨µ¦¦¦¬‹*++×­[‡ùEÉdò7ž={væÌ™ÄÄD33³ß~û óLü-&&&;vì€Ic3Œþ3’ciiI bbbTTTÌÍÍ/^¼ø×_mß¾ýÃí'CCCCNNNNN.88xöìÙß®7ùùù7oÞ´µµ2eÊwyB;;»ˆˆÖ†¿——צM›>Ú,}þüyII‰““ÓßÞÙÇÇGFFÆÂÂâëÆ*ÿafÍš•œœüët_¤¥¥ííí1‡í×Ýd×®]ûöícõš2 ;;;''§¿ÕŒ„„„ÎÎN8\ô!þþþFFFp¤’––VXX‰{{{ׯ_ûö퉹w»¸¸øâÅ‹ádž†¾}ûû°TGGgùòåXExöìY]]àÉ“'æææBBB{÷ñõõ•HOOÇ:‘ETTËPqqq)))))©©S§2™Ìˆˆˆ¢¢¢q}Óº}ûö;wî„„„<}úôßš£ñ•™J"‘ìììŽ?~øðaWRRò矲Ž{#¾ŽŽŽ†††ï¥7€”””1ßðæåå}Ê ‡¿äι¹¹úúúÿ ½ù5f ýu¼|ùrÌ׸L&óÙ³g111_~“wïÞ544|¦™5¦Àc;¾zõÊÉÉiÂN"ÈÎÎ>~ü¸¾¾¾««+“ÉÏäÉ“»»»ÛÛÛá‡;íííµµµ°6‰Â†*ü$D" ***º»»Y}Œß×óŽ-xó-Žæ¡¡¡Ç;;;+((àñø+W®Œw"Æ<ß××—’’bjjúÑÍÍÍ CZZ ©­­…£­JJJ°ÛZZZ*++ «þ‚‚˜ÚÚÚx<žÉd D"QSSs`` ¶¶VMMµ c³«[ZZà7222ÐMW[[ËËË Ë0V–ÔÔÔXõö´´´ØØ~Ⱦ*Ø‚7£££_}XÂc1118ÚÔÔÔØØåååÅÄĪ««;;;¡…ËÊÊzzzàŸ-,,L:µ  €N§O›6J¥âñx™É“'“H$*•ÚßßMÂ€ã»ØÄBø¶666655ÉÉÉ ¶µµÁZ¢²²~ùÄÏÏ_RRÒ××ßÖ·oßBWžŽŽN^^“É„?uêÔW>ùùù{{{ F@@€ÏI£±±±££CVVVHH¨¶¶–F£‘H¤Ïè͇’ƒø¡’UNoáææþ–Àø[ÉA|_ÉùîÌ;—@ $%%µµµa’óÓØ|Œä 5ÖÆ‡´´4ÖZüp±ÄD€H$~‹Ÿø‡ £P(d2™N§KHHü[Ó—ÿä ÍyFÚ IDATÄ¿‰ºº:\òöYî\äüàp¸Ÿrpë»[ áëßdvvTÆþ»eŒu…¡Ÿ¼ ¢Rø£Áãñööö?h8ˆ‹‹›››£2†@’ƒpfë\/Äg€³h_Nïééÿê'娌!ä ò@e ˜X ž8@ ä I@ Hr1qAÓ~¼ª£©«ãÉd¢ÁpTÆ~(c–ZG Éù©àççG3¤¿...:Ž&ûŽ <ÏÍÍÝÛÛ‹Lñ%ððð N¨5Öä ¾'t:ýêÕ«èËð¿‡Ãéééý:ŸaGÚÚÚâââÆ,ÉŒøhwpáÂ…Ÿ_‡$ç¿oevv¸eâó]¸’42ÅW ""‚V’þ[°•¤‘)þ5ÕG&@ ÄDéåtuu•––Šˆˆ(++·¶¶VWWKIIÉËË744À-˜$I\\»¤´´´««K]]ïíÛ·ýýýÚÚÚD"‘J¥ŽŒŒÌ˜1ãWí,//ÇV×ïîî.))ÁΊ‹‹ñ,ÕÕÕ555&Mš÷»”””Àñ!MMMèNÉËËc™9s&<),,ÔÖÖÆNõôôÀ§………UTT0[±rrr¬Ûyý·ÊËËãææ†¦ÑhÅÅÅBBBݨ­¾¾¾¡¡A^^^JJêóÅÅÅ4 ³0Fvv6NÇ,<éèèèêêÂö jjjª««ÃÎ***JHHŒ¹¤¨¨H^^žÕãßV€žž¶æððpqqñ˜½ºººZ[[ÇX¸©©‰N§ËÊÊb!ÕÕÕpÓ?¸éƒÁ`deeqppL›6íW—œ×¯_¯^½zÅŠ?Þ¹s§‹‹ËñãÇ£££}}}I$’¬¬¬³³ó¢E‹°K8ðôéÓÄÄÄ™3gnݺµ°°0//OAAÁÚÚº£££©©éûî&ù_axxøõë× !!!ééé00''ÇÑÑQCCþ\¸p¡‹‹ vIMMMTTTVVÀÔÔÔÊÊJLL¬¨¨(<<¼¦¦`kkkjjÊÃÃcoo/!!A$á…<`0ïß¿÷òòzóæ ¦7üñÜÇ^EEÅÑÑQMM-11Ñ××n;°±±±¶¶þ¹¹¹yÑ¢E/^¼äçç/]ºÔÔÔôæÍ›FNMM½uëÖÆ?º#ïÞ½{ÓÓÓŸ={6¦†]¶lYoo/ܪy¢ÑÙÙYXXøâÅ‹ÚÚÚððpxûöí+W®`Û;mݺ•ÕWXXØÙÙéáᬫ« 333úûû{öì100}ùòeGGÇ‘#Grssa4–ŸŸO¥R333oܸ‰MEEE||¼°°°—— ¬¬¬ŒŒŒ„åÐÒÒÒÒÒ©+###'Nœ¼~ýú¯.9Ÿ‡B¡,]ºîG[XXØÜÜÌú~feeA·iFFÜŒ’œœÌÆÆ6wîÜ_ªTõööõõõ ×ÓÓƒð!QQQBBB¿ÿþ;ÀÅÅELLÌÊÊêØ±cŽŽŽFFF€yóæ©««Ãm­¯^½ÊÚZ 3û«¤¤$::úÑ£G€?þøãôéÓ—/_,Y²äôéÓ?·ý››› ᱂‚‚²²2™L–€]½’’’††MMÍÖÖÖÖÖV¸‡7Öêêíí3g''gjj*N¤¤¤Ì›7o¢ýÇššš   ––¬YµjÕþýû?zÉýû÷sss±M”!7nLII½j ‰–––ááá   ¸ƒ2FcccPPPGGk·øíÛ·/^¬­­µ°°ÀÃÃõ´´Ž?X¿~½¬¬ì‚ þ£©­­ kÃÉÊʪªªÖÖÖVTT())ŽŽÂý¹i4fRmmm‘œœ•’’¸«¾¾~ff&ÜÚÈȈ}ÇŽpæôôt ÌÌLAAA¬ð«HŽ˜˜ëëÇÊäÉ“ÓÒÒ®_¿0}útOOÏþþþ5kÖÀmÕa[»³³»páB˜””“’’=þü_Gr„……ãââ***ìììXÃ[[[222_²¥®®nMM ¼DCCs†¤¤¤À–ã‚ ØØØ899ãââZZZLLLþöžuuuð†JJJ° þùô&44ôÁƒšššµµµJJJÞÞÞ÷îÝ;uêÔñãÇçÍ›çííÝÖÖöÿØ{Žîñ{v—Ý¥÷^D:RDŠ bQŸ5±ä±k¬1&*&**ö5ÑX¤)¢ô"½÷^Ø^Þ?æ÷Üw¿€ˆ )óùkwîÜÝ;çž™3sæÌ̪U«ž>}úæÍ›   xcrrr~~þ³gÏüüü¼½½ïÞ½ ÝM·nÝ…&ÇÒÒ’B¡>þíÛ·çÎÃÆÑ?þçŸׯ_/8…01QTTTWW‡£MMM×Ï3èÈ2000!!ö¤¥¥³gÏÆZ:þ®9YYYCCC8lÂ"ÔÔÔ†Ï0eÊ”eË– :ó1† R©°Œ………ØHåâÅ‹«W¯¾páÂÕ«W÷îÝ«¯¯O$áÕÛ·oÇÆÆ^ºt©«««¶¶Vð§"##/\¸––¶eË77·k×®½xñ¢··w 9@tuu333áû577_¶lY?«3XYYA•³µµ»“… åååÿýï7nÜøÏ?ÿlݺUWWZÐG»»»ÇÄÄTUU]½zÕÛÛûܹs™™™ÍÍÍ€ƒ&&&š˜˜XXXüôÓO¥¥¥òòò***ß~ûm?­£R©EEE¿ÿþûìÙ³;öôéÓ çXKMM½~ý:6eúüùó'Ož˜˜˜ ̹mÛ¶¤¤¤˜˜˜wýÔõë×Ñù&&&ÿý7ü|ïÞ½Û·oŸ9sfè[Ξ=+èX³¶¶622:uê–AYYÙÃÃcP!ëèèüøãЇV__qNNNNNN0ßþ²sçαnrBBB`Ÿ´Ÿß‰B¡dgg¿ëÆ7¾zõ Þ 9räˆàøXdáÂ…ØÐdß¾}±±±ßÿý?Ã;wLMMýõWèXÓÑÑ£Ž5ssóãÇ¿zõŠB¡dddô«Ëœ;wîŽ;°aßÖ­[?â_TUUûí·~¿?>V䘆†ÆŒ3***:::|||DDDrrrLMMûù‹Acc#¯|"ÁÁÁÃ\Ñ¢¯¯ýúõëׯoÚ´ ¦”——c#žñºº:,c?ÛÙØØ‡Çã}||Þ;š7`sˆO¤¾¾þܹsG‹‹+..¼äááM >ÉäL:Õ××÷õë×ÕÕÕ/^”––^°`Á ò‰‰©¯¯˜þèÑ#´‘É@ ±È¢OáðáÃ]]]ïÍÖÚÚúâÅ‹~‰ÉÉÉ>œÒ¶³³»xñâO?ýdmm=èØ%!!¡ººz8?Åãñ°­QNTTÔóçÏQ]û,¼}ûöúõëVVV/^ôññyoþØØØÛ·ocs ˆÏ¶û€““Óëׯ£££ƒ²<==ëëëïß¿ßÓÓƒö5´?nhhxíÚ5@OO££# 77—ÉdZ[[[[[çææÂ«***0Žyîܹ¹¹¹eeeGGG8I¶råʧOŸÀwß}÷.×%NOMM…Žã¾¾>WWW€¡¡a]]ü>Ÿÿ®h‘1¶¶ö¬Y³Š‹‹¯]»–œœ\UU%Á5cÆŒÄÄÄøøxuuuP4¾¾¾—.]º~ýú ]«Ñé JMM…ïWBBÆ7ÆÅÅijjjkkz‹…BêôY¼p3fÌ(++ƒÏ §§7iÒ¤1ªH“&Mrss+//¿ví•J1cF^^^¿tSRRââ⺺ºþþûoMMMX¯@8xð “Éd³Ù¥¥¥PÂápÄÅÅg̘ahhÈf³eee´´´X,–ŠŠŠ£££›››ŒŒLww÷ªU«`ª“““”””­­-‡ëîîÞ³g·°°˜5k§Ñh666áMÉäôôt333¬w 7ƒ_åä䔕•“’’¨T*œº”••õôôèèèèêêöôôäççS©Ô%K–@c0uêÔââ⪪**•ºaÃ8ëàà×ÚÚJ¥Rûí7l±-ŸÏçr¹öööð«”””––V||<•JÕÒÒ‚Ý4555‰”žžN¥Rííí¡yˆD¢‡ÃQÈ,¯­­-”0—Ë%‘Hööö³gφ¡«T*UJJÊÇÇgÞ¼y,KQQÑÁÁÁÍÍMAA¡»»{Ù²eeee%%%+V¬PVVÖ××wrr’ Ñh¦¦¦...d2ÙÅÅ…F£õöö9rdTx*ðx6›]UU……r8iii¬.Ož<™ÃádggS©Ô9sæØÙÙ222¤¤¤°Üt:}êÔ©ØN€ŽŽŽ111mmmT*õ÷ßÇz0P¼ð0¸\®¨¨(¦á6›­¬¬Œ™4CCÖ––¢¢"*•ºbÅŠ)S¦|Y‘H$<Ïb±>z3iyyyccc¨H&&& .¤R©²²²Ó§Owpp€qS¦L‘““ëîlÛ¶mºººt:ÝÀÀÀÙÙY\\œF£™™™¹¸¸H¤¾¾>kkkggg:ncc3cÆ ‡ckkkccÃãñ‚ݘî’Éd‹Åçó_½z•˜˜ˆƒ‘àÝÝÝ4-,,ÌÓÓÙáÏ‹„„Ä•+WV¯^D14Øk#ï€ÍÎΞ7ož‘‘Ñš5kBBB‚‚‚Fa ô»º}}}qqqhµ÷‚í±†<.#†¤¤doo/Çó÷÷?~ü8ÚÖ\.÷Ù³g™™™¦¦¦%%%žžž#FŒ@LÉA €››‡ƒa]ÞÞÞè ™œ± ‡Arx. }Mmœ={ö˜Þ Ç#Ž”ÉÿZîèèˆm¸‰@|v$%%­¬¬Ž!ÉA:®££7åE¼—O W›˜À¸&UUU¤cHÇÉA¸Y,ñ…àóùHÇcäÙD 29@&@ drL@ &<(b @ Þ@U‹mÙlöX<™x?8îën!HqqqWW—291náp8Ã<~÷ËQUU•šš:F·D&çËÂçómllˆFAA!44tôÔ课yF<™Äÿ¡²²rïÞ½HÄG@§ÓïÝ»‡ä0n@&g$PVV^ºt)’ñAàp8‹…L29ˆƒÍfß¹sGLLì›o¾AÒ@ †orˆD"’Ãx­Ë ø|>•JMHH@¢@ È伇ÐÐP•Á8wîÜo¿ý¦¢¢rçÎÀæÍ›UTT"##‘Xm™Ž@L~þùç~MeRR’`[[[•¶¶6G§ÓUTTLMMǽp†åXãñx cåÊ•/^ÄRà)¿þú+ƒÁàp8<Éd2 ‹Åçóq8—Ëåóù0?@Àáp $$„}@Ú‰@ Æl6›Á`\¹rÅËË ¦àp8Øéäóù6•€¼¼<çp8 ƒÉdr¹\0ÑG9˜ÔðÿãüùóJJJçÎîîÚµëéÓ§€uëÖ%$$0™Ìùóçkhhhjj*))óù|CCC…ÎÎN%%%MMM¤šb¼"Ø`âp8ƒ1{öl üü|¬/®§§§¤¤Äb±à¢Î¶¶6[[Ûñ-–09,««««««kЕPþþþË–-ܺuËÙÙÙËË+---,,¬¾¾^GGÇÎή©© æÔÖÖ–”””’’BJ‰@ Æ+4­ëp8œ¥K—fggGEEmß¾½¶¶V0'@(//ÈË˧¥¥o±|€k+44411àëë;ÌSÖ;;;[ZZúÍa(((áñ(r@Œ[>ìçç?ÿý÷ßXztt´……EUUÕĢœ¥K—^ºt ~>sæÌpnÙ¸q#ŒqTSSÃlLnn.²7b|sòäIooo$‡79ç©© NŽ=xðÀ¢®®ŽÍfËÉÉ!q#ˆ N]]ŒŸ‡ÓØØ¨¡¡LÎûQQQ‘¨¯¯ ¢R©"""ÕÕÕ¢¢¢+V¬ áááHÛÄ¡±±±¸¸~ÖÐИ4iRvvvUUÕÍ›7›››ûeÆápzzzíííiii§OŸ¦P(ÚäHJJšššª««c)ŠŠŠ¦¦¦ ¦¦¦psäÈ>ŸÿÏ?ÿœ:ujúôé›7oö÷÷‡·?|øPAAÁÈȨ«« yÕÄ8FMMÍÔÔ400000¦œ={öêÕ«€?ÿüóÎ;?ÿüsCC@066îííÅáp±±± ,ßö€#‘H £»»›F£………yzz"ùŒðù|EEÅ?ÿü³­­­°°ðæÍ›H&Äp›'ŽÍf›™™|ý¸8›Íþê»8¿zõÊÄÄdÚ´i£ÿ%JJJöööòx<ÿãÇ£@ FÊr#Œx<^SS®@F dr_vH¾zõj$âCa³ÙHÈä >>ŸŸ——D@|(T* ™Ä°xñâæææÛ·o#Q Á¼yóÉA wëÖ-$b|@£Ñà~h_‘ÖÖVdrbœÓÛÛ›••…DL@|Ax<F£Ñh𠯎‚‚291nMް°°ŧ€–‚"™@ “ƒ@ 29@&@ ±öÅABøt˜L&ÇCr@ ÉA ™LFBøDÒÓÓUTTÄÄÄ(drïÏçÓét$‡#///''ÇÅÅ™™İ`±XHGuu5FCr@ Æ(|@ Èä ™@ ÉA þA\\\XXxb¿¦¦&<<¼¸¸ib”0Üð¸¸8???ìëÊ•+¿ÿþûaÞ»víÚÚÚÚ{÷îÉËË#‰0+W®TSS›€'Å2™Ì`0ðx¼°°0ƒÁxï-~~~qqq¿ÿþ»ÍX/~mmí[J!µ¢Ò¤·§¯¯ÿÞ[6nÜ(xþXPP¸¸8ªDˆ‘69/_¾Ü¾}»¡¡á¾}û=úã?p8œ¯¯ïpnÏËË+--e³ÙHÜ#›ÍNKKëè蘀öFXX˜N§óx<G$‡cuÊËËÓÒÒºººÆzñëêêòG’c‹…úØÜÔÊr[…ÓÓÓú®·oßæååýûï¿jjjK—.?~tt4ZX†øŒ ˱ÖÝÝ]]]-++knnnnn®ªªÚÒÒÒÜÜ ¸pá‚ýÿˆŒŒìÙ³ÇÞÞ>##cÆ 0½ºº°dÉ’qP“Ç.¾¾¾ùùùð¥ìÚµ+!!~>qâÌsçÎìm>zô&9rÄÞÞ>11qÇŽööö¹¹¹c@­ñxÌÞø|>›Í†ç ó¶mÛfooŸŸŸïëëkoo_[[ ÓçÏŸåãä䫆½½ýòåËkkkííí%loo¿ÿ~xWpp0–xãÆ ˜xæÌ,1..&þ÷¿ÿÅaÅùêëë³… Ç õ±:‡üª²ô~TiiépnŸ2eй¹yDDDuuµ³³3—Ëe2™ØSyyyÁl………XâÏ?ÿ ˆˆˆ°··?yòä£Gìíí¯]»vãÆ ,ϳgÏàûöíÃóóóaâŠ+°D¸ˆÅba)Ë—/GUxrfÍšuìØ±'N¼yóÆÛÛû‡~˜7ožŒŒÌ¥K—NŸ>½nݺ•+W9rdË–-/^¬««+,,\³fMGGƒÁ¸ÿþ¾}ûªªªÎ;'!!$þµ`2™/^¼`0wîÜyýúõîÝ»i4Ú;wBCCOŸ>ÇãÕÕÕ9²téÒ 6œ;wîÀáíÛ·ýõ×þý÷ßx*âè·7¢¢¢4MpƒhuH$Ò0=l555………+W®¨ø ™_ˆEèœÿÌÇà§T–€HœNWWw8¿£§§‡Çã‹ŠŠ¸\®½½}KKK|||ss³‡‡‡——×±cǼ½½åååoܸ‘’’²oß>giiYXXX__O"‘ÚÚÚ`WfõêÕß}÷Ýü±k×.œœ|çÎcÇŽ988üðëV­züøñáÇãââ‚‚‚TTTfÍšåààššjgg×ÜÜœÐÚÚêîî¾|ùòÀÀ@T‘'„Éûî»ï/^L¡PüýýïÞ½»víÚ­[·¶··wuuÉËËëèèHJJ677÷ööbzÿ÷ß[XX(++‰DÀäÉ“ ’ø×µ:ííí:::µµµ4­§§GGGGQQ‘J¥¶¶¶nܸÑÑÑQRRRJJJZZº­­ ¦÷ôô())=z´®®.99y,ÚÌê°X¬á[À‰'œœœÈdryy9›Í®®®ær¹ZZZâââ9998fãp88.77·  `åÊ•“'OÖÑÑ)++ëëëknnvqq‰‰‰—‘‘‘••íèèèêêêìììîî¾zõª¾¾þ… h4š¼¼|@@NWSSÓÑÑ!‘H¥¥¥烊ßÔÔ”ö T"ª„Àè#ÉM®,¸Õ8"KJJêè興ˆ°Ùìšš‹UWW§®®®£££¦¦æìì,""  R©«W¯þù矯_¿~þüy999)))¨K;wîܸq£¼¼¼ˆˆˆ°°p]]“ɬ­­e³Ù?þøcBBBJJ Ǫ¨¨ÐÑÑ…ŠªðD19QQQQQÑ 6ðùüßÿýäÉ“xüPN¹Û·oÏŸ?Ę@BBâÁƒþþþ€žžž~Wa1Ê‹@§Óccc-ZÄçóÍ­Niii__Ÿ¹¹ù{PII‰D" zICC'ÉÔÔÔ¢££åååá×´´´)S¦0™L¬ÇzøðaÖ'Û³gÏæÍ›ýõ×mÛ¶‰ˆˆœ={vîܹð’%|pe’jgIFãYÜÁí1‹+žT)íÐCšBúÐí0zzz¦L™ÂåòËÂÂÂP•+WúùùIHHHIIüýý¯^½J¥RáU99¹_ý5::“àÙ³gÇÕÕÕÞÞž@ dddÀôÞÞÞwý)bŒ2¬¹œˆˆÝ»w‹ˆˆlÞ¼yÿþý}}}}}}CÜ"++‹ìÍWDGGÇÔÔôƒn¹yóæáǽ¼¼’““}||Æb©áÑôÏŸ?"OiiiGG‡±±ñgü_ iaa‘œœœžž^^^~öìÙ   ;v¸¹¹%''oܸ3ðÊÊʧOŸvsskjjZ·nl…W®\INN....//lÊß ‡Ã‘0™<íÐP¡¤Æ?z(»Z~ÄöKâââÉÉÉ©©©åååpÖö]ˆˆˆºÐ7nܘœœœ——W^^¾téÒ­[·>zôèèÑ£ÉÉÉS§NÅ:4ÊÊÊp ÝÔÔdbb£ÄÄİ?Åäƒÿ&‡Åbutt@C&“EEE?îÏÌÍÍvŸ_‚ÎÎÎÎÎκ…Á`ÐétYYÙÓìk׮Ŧ¸G-8NFFÆÎÎ.44tÐ åååmmmVVVBBŸº» †††¡¡á»F²²²™™™æææ{÷îe2™}}}²²²ØHñèÑ£Ož<¹páÂÒ¥K{{{±NIIIYYÙ•+Wš››×ÕÕ}ÐSqø<™™¦–¿­ôªá¦¥êÞÎlþ°Î€°°° R©%%%ÐŽÃádee™L¦¹¹¹‡‡‡`Îøøx Ìš´@²²²þþþæææ!!!½½½,KBBBVV{ ®®®}}}YYYÒÒÒ˜êÂ?e³Ùæææîîî¨^OÇÚÂ… ¯\¹²iÓ&8}Çår·lÙ²{÷nØN8pà—_~áp8—.]Z¼xñÇûÝžœœlmmmnnž››‹"F†ÚÚZuuu%%%>Ÿ¯®®þêÕ«²²²¡oùñÇétºŸŸßÙ³g8°~ýúÝ»wŸ9s†N§¯_¿þÖ­[]]]ß¶+ IDATÐY?Ê­Ž¬¬¬­­mXXØ‚ /UVV655ÙÛÛcs0Jnn®6R^^Ž9Ê fff¡¡¡‹-RRRâñxsçÎ={ö,§Óé»wïþûï¿7oÞ¼{÷îãÇ>|xåʕ۷oß¹s'‡Ã¹qãÆÜ¹sÝÜÜ–.]ºxñbÇf³“’’>h”óÿ¬+ëbnñë÷Y¿Þü?öfƒÇ$ŸÙLöûÇ7666ðŠ‹‹ÕÕÕšššPTUU###…„„ÂÃÃçÏŸK:{öìóçÏ þζmÛètúÑ£Gýüü8ÎÉ“'—-[æááÁ`0V¯^Çã)Ê‘#GÜÜÜbbb¾ûî; Çb±***H$Rmm­††üS4ÊàH$ƒÁèîî¦ÑhaaažžžH(Ÿiii>ŸßÝÝ=žÃáÀ¹\<ïååýâÅ [[Û‘|†ÈÈȆ††… Âæo˜´··¿yófîܹx<žÏçWWW×ÕÕ988L­#‘HmQÙ¿ßæsy8<^ÿ÷Éÿ™;Ì  â3"))ÙÛÛËãñüýý?Ž6¼A ÅÞ½{ÕÔÔ=zÔÛÛËápDDDÆJØ¡œœÜ´iÓbbb`°Smmíı7‹%ïfe¶¨°ÞÚEÈÞ F è¼ÄPœ:uŠÇã8pàÀ€ÀÀ@kkë±òð fff EMMmæÌ™íݱX,ÅyÖšKg2™LdoÈä Æþþþ0rz,¢¤¤´jÕª ûîX,:1ª@Ž5@ “ƒ@ ˆñr¬|>ÿCWÉ 0Ðä29ˆ°7ÁÁÁH™Äï¤ÇÇÇКÄ@ÐþI29ˆ÷C£Ñ.\ˆä€@ (|@ Èä ™@ ÉA Äè…|qÞu¬$bPàÞÕHÇÉd~è±:55µ'B!É'ˆˆˆ¼}ûÉa8¨¨¨ˆŠŠbG8#†C___FF†¶¶6Å0QRRBB@&gÜÂãñbccõõõ‘(Þ£‹BBRRR}æìDFRRrÖ¬Yh›†÷R[[«¬¬ ÓHÈäŒ[Âk6F‡ƒd2™N§#Q|\ωî½deeÙÙÙIKK#Q|-Pø@ FÓ(§¤¤äéÓ§&&&‚‡É§¤¤$%%¹¸¸|Ü™]l6ûÌ™3‚)JJJÿùÏƱ¬{{{/]º„}USS[½z5 ¼¼<00`jj:þ|x555õåË—A ?þ¼  àå奥¥…Ôw ÝÝÝW¯^LÑÒÒòòòú,?~éÒ¥ÞÞÞmÛ¶æÒÒÒ'Ožc{^¼~ý:!!~vuuµ²²„††bSŒ+V¬ÐÔÔDÊ3¨TjeeåÔÔÔäååßuõöíÛ---?üði0Œ;wž>}ZXXxË–-‚™ïܹ#˜"øZdzÉ)..öóó[µj• ÉILL>>·oß®¬¬üá‡ÔÔÔΟ?ßÖÖ¶sçNIIÉ~¿)&&¶k×.@QQÑÕ«WïÝ»çëë[QQñ÷ßÃ æææË–-{óæMhh¨ƒƒƒ››[lllBBÂüùómmmƒƒƒ333½¼¼LLLîÞ½[ZZ ïÚ¸q#œ$mHIIÁòbTUUåææÞ¿pïÞ½¨¨¨ ¤§§³Ùì½{÷:”••emmîâââéé X¾|¹££#29ïBAAAPÎÅÅÅ÷î݃Ÿ§M›¶xñâäääÈÈHggçðððW¯^¹»»×ÔÔdgg¯X±"++«¤¤Ä××wòäÉ€‹/¶´´lß¾}´Wf!! ÁÄŒŒŒ—/_îÞ½{×®]===‹-ÊÊÊ*((صk×Ò¥Kß¼yóøñc___dr† ‰Ê”Îmô’Þ,'eeåw…\þû￞žžÊÊÊgϞݾ}ûÀöpP455¡2?yò$(((""bÑ¢E©©©/^¼€ÜÜÜž?ž––¶lÙ2ssóþç?ÿÑÖÖ¾~ýz]]ÝæÍ›ýýý»»»á]‡þŒ½±áóYXX ?§§§¿~ý³7'NœhhhPQQ‰‹‹ûõ×_KJJ‚‚‚ZZZwîÜ èëëfOíðáÃ***­­­üñGPPP^^^@@@rr2àÕ«WÙÙÙ€èè耀€ÒÒÒ;wîœ\SSsáÂ"‘;¤£¹¤[¶lÓ]àqÌ•+Wêêê|||¶lÙ"%%åçç×ÛÛûq?•ššzôèÑììl•üüücÇŽ%''ÇÇÇž?PSSxôèQ@@@GGÇ©S§Îœ9#!!¡¢¢råÊ•ýû÷öQ,jPPœœ\XX˜`ríÚµŽŽŽzzz©©©ÁÁÁëÖ­Û¸qc]]ÝÙ³gååå[ZZ8 %%5¨¯içÎТ¦¦¶eË–ÆÆÆçÏŸ»¹¹mذáÉ“'÷ïß߸qã’%Kâââã¾ß¼yããã3uêÔC‡ÕÔÔÔÕÕmܸQMM­µµuº>¤¤¤~ýõWø™N§Ÿ?þ¿ÿý/ªŠ_‚ÆÆF¨WºººúúúáááK–,Ù°aÿÿþK¡P’““ÕÕÕßu¯ªªª§§gbbâ³gÏ~úé' …ÒÑѱråÊÌÌLèê[Ìœ9sÑ¢EQQQíííiii0qÅŠ………wîÜIJJ*,,D 3 öƒïÞ½{øðááÜXZZ •¹²²ÒÊÊjÅŠÉÉÉ[¶lÙ°aCGGÇÉ“'sss—/_žŸŸïÞ=ìÞ‹/VWWïØ±CYYùþýû½½½§Når¹£Ý䨨Øhkk§¦¦jjjÊÈÈ,X°[[Ûªªª€€@VVÌ<þ|<¿gÏžšššƒþøãƒ®· ‰­­­7oÞ433[¼xqJJÊÀlS¦L±±±n4,1%%¥¤¤dçÎZZZëׯŸ7oÞ… öíÛ§¨¨øóÏ?Â8HQQÑï¿ÿóRþüóÏÈä|!DDD,,,ÀG-ú›5kÖ .&ooïÇòÎ@Œ÷îÝ +fMMM^^ÀÁÁáÈ‘#p<55)̈qâÄ ™¶¶¶áß"!!aaa‘››çíííààPRR20›¾¾þ;w£ÂÂÂZ[[—,Y"--ýË/¿ôôô8p€Ëå’H¤³gÏŽv“£­­mccsáÂqqq2™ MÎÇO:åàà`oo_PPGs€œœ8rÌÈÈ`0âââSXXø›o¾éííÅáp'Nœ˜9sæGÃÉÉ  ®®¾{÷îÈÈÈ–––³gϪ¨¨Œ*mëêê:yòä±cÇPÅûÒHKKóÍ7ð3Œ¿˜ÈÃþrtt4Lœ1cÆŒ3Ïž=ƒaˆ/Ç™3gÊÊÊöíÛg÷îÝ»k×®á,¥RVVþæ›oêëë‘‘‘ÿüóÏÇ=Ã’%K’’’7n¤Ñh,«_lçÈðaÓGNNN¶¶¶JJJp’••U^^nmmíííuÿüóÏk×®ýôÓO·nÝÊÎÎÞ¼ysggç»~V\\|Þ¼yC´sæÌñòòzöì‘H¼uëVkkk\\œ¯¯¯àüùó¾¾¾p~L[[;22röFétzhh(ª~£ …1œœ»wïîêêsŒŒŒôõõ}òä‰`â­[·|}}1?âKßÖÖ6{ölïÿ!""<ü #ÔÔÔìì쪫«‡xk¾¾¾ööö—/_ž1cÆ­[·ÂŠ‹‹<ãŒöîÝëëëëäätíÚ52™L¡PFû(0yòd33³êêj##£˜øí·ß–••]»v-,,ÌÑѱ¶¶öÏ?ÿ,//ooowvv¶°°8~üxdd$ƒÁÎ_î۷ﯿþZ½zucc£ƒƒŒvÕÑÑ166~üø1÷ððxýúueeåŽ; ‘³·· ܱc‡œœ\GGÇñãÇÕÔÔF›ÚÉÈÈìß¿Æ;ÊÉÉAO®©©©‹‹ LÔÖÖ†ž· ÂDKKË9sæ~üñLJ¶cÁ‚S¦LA5y8˜™™íرãþýû«W¯®««suuýöÛoEDDòòò½¼¼ôõõËÊÊÞuûÑ£G7mÚ´k×. …2L5=èéé ?~œB¡}ûí·®®®ÝÝÝAAA?ÿü³ŠŠJvvö¾}û'£¨ÃÏŸ?/+++))Y¹rå¼yó>ܺuëÂ… ÿþûïööv'''8>oÞ¼uëÖ­[·ŽD"q8œÛ·o•‡Ç‘H$ƒÑÝÝM£Ñ‡/---999ªªªÆÆÆµµµt:]__¿¢¢¢¼¼\___SS³°°îekffÖØØØÚÚ o´±±‘””LIIéëë›9s&™LÆ~“ËåÆÆÆ’ÉdèIëëëKII‘’’š>}zGGGFF̦¢¢bbb?WUU•––êêêjii×ÔÔa¦%++ óÚÚÚJHHŒý¸rå ´t:=)) omll`†ÖÖV€% +++a;% óóó¡’““g ÛðæS¶õ„–Œ4Á$ PWW‡ÖJXOOÅbÁ^TWWWCCƒ¹¹¹¢¢bfff{{ûôéÓ¥¤¤^½zÕÛÛëàà––Æd2gÍšE FÜ:::Þ¼yãéé ýذ¶¬8ð³Á¤I“u `ee%++;먨(¸áÍGï±VWW÷êf b\Õ W·y«y;TàŒŒŒŽŽØ”ÄÄD¬ûâêêC$ïêîî~󿬬,\½ÛÜÜœ››«¦¦fddTSSS\\Œõ* ¿{­uxàŸÎž=‡Ã€Ì%%%{{{y<ž¿¿ÿñãLJerŸËä ¾´É™€ô39ˆ/mrŠ3sgNôª¸†F[¡erжž1\$DÞ1(äÀCûy 291\Èd2™LFg “3ªÁáp£gniÔòU¶ß7´··3ôn"ÓÓÓƒ„€LÎøoIW­Z5ª&œã999´ÕÍp@s-ÈäŒóŽ@s«Ö¿|> გ’š9s&F‹ûñŒÊ!ƒî™‹øP°ãËÈäŒaFfW‰q ŸÏ œ:uêGÊ#CBøD»zõª——Š,E&gœ(4ê@}4‘‘‘pë3$Š!àp8hÛæþýû(rzd@s9@&@ Èä L@ F/à èííÅNs‚ÈÈȆµ´´tww+++£Í+¿ UUUýN´ÕÓÓÃ>s8œÊÊJ‰„õ†ÑÓÓÓÔÔ$))©¤¤ÔÕÕ…­'///##hnnƶêQUUÔÖÖb=iiiÁ}VÊÊÊà>"x<^GGçk‰‚ÍfWUUa_EDDÔÕÕ +˜YNN;š êp¿’" |>_ðàTA]¢Ñhõõõ‚™¥¤¤±¯mmm ÒÒ҂ꤦ¦&** ¨©©Á¦îª@ÐÖÖÀ“ô¾Ö‡Ã Èçó‡ØPvòäÉD"P^^ÎãñtuuËÊÊÞUq%,!!¡¬¬<0OkkkWW—¢¢âè_’1,“·fÍiiixg{{ûìÙ³:«±±qß¾}ÁÁÁ¿üòËÚµk±cï#†——WYY™¬®‰‰‰ð€Q‡“àéé©¥¥õøñã~:µvíÚ5kÖ>|øìÙ³÷ïßWRRjiiñòòÚ±c“ÉܳgONNŽ””TMMÍáÇW®\ÙÒÒ²zõj‹%,,\ZZúàÁGGÇÒÒR]]]WWWõµ6nhh˜>}º°°°ŽŽF“‘‘¹yó&lÃÃÃøáUUU˜yíÚµ¾¾¾P‡÷îÝ›‘‘!--][[{ðàÁU«V¡Å.L&súôéBBB,‹ÅbB]JOO_²d‰„„T§ß~ûÍËË«¹¹yÕªU<L&—””P(”3f”””Ìœ9ÓÀÀ€Çã544DDDhiiÅÄÄ|ÿý÷ðµJKKߺuk`j$ZL!¡!¶¢Óé,ë]{¢WTT¬X±¢¬¬ìÑ£GÎÎÎD"qÖ¬YT*µ¹¹žÝ)Ø[ÂìÍãÇ<¨©©I¥RŒŒüýý1Æ8sæÌåË—¾ýöÛñãX›?~RRRRRÒO?ýt÷îÝ›7oÂôsçÎeffZXXœ?>..Õϯœ'Oà "‘H...0±½½ÝÇÇÇÂÂBXXxíÚµïº÷åË—III{öìIJJZ³fÍ¥K—(Ê©S§BCC:”””äèè¸k×®ŒŒŒM›6Þ¾};))IUUuÙ²e]]]óæÍc2™ 111===‹/þº¢ÐÑÑIJJú矨Têúõë+**°KIÿÚ›úúúýû÷gggŸ>}:))é»ï¾»ÿ~QQÒ¨~HKK'%%=}úTTTtÅŠØAÈGGGLª‚öFû÷ï777$%%ÙÙÙmß¾=''gÆ %%%ÿüóORR’²²ò’%K¨Tª››—ËMJJŠˆˆèîî^ºticc£¶¶vRRÒ•+W²²²vìØñµäÀápzÞAjjêš³~ýz!!! ‹o¿ýó( F£P(‡úæ›o’’’ZZZþý÷ß¶¶¶¬ÿÑoà^]]••ÇëeeeYYY}}}EEE £  ÞÂårsrr²²²rrr`q²²²Þ¾}Ë`0²²²°×J¥R±©©©ÑQÎÔÔÔ455mß¾Ý××÷‡~(--íìì„>ÄW*“’’Rlllaaáš5kÞ¾} G?ýðððððð€íoCCäI“”””Û”±ˆ‰‰‰¿¿¿»»ûÁƒïÝ»÷®l—/_~úôéÙ³gçÎ 8räÒœ!PUU½}û¶Í¦M›bbb†ãÎ;wîÜ (--íêê244œP~ø‚‚‚¾¾¾7n˜˜˜XXXdee)(( }KaaáÖ­[œœüüüÎÎÎÎÎέ­­çΣP(šššõõõ³fÍÚ»w/v‹ŸŸßÇïÞ½»páÂÝ»wÇÇÇGEEíܹsóæÍOŸ>íèèÈÌ̼ÿþÙ³gY,Vvvvhh¨––Ö¬Y³”••O:õÇ0™Ì[·n©««ß½{÷Ô©Súúúmmm:::'NœÐÒÒÑQNsssbbbbbbee¥††G_¿~=88ËsìØ±ÔÔTT-¿ oÞ¼/ˆÇã͘1ÐÓÓ³jÕ*,CYYÙöíÛ‡ø…ºººãǧ¤¤>|Z ñGcccâÿøŒ}· N{{;&UÁYŸmݺµ¯¯ïòå˦¦¦GD;wîìÃ}óÍ7·<<""âÂ… áááÿùÏþùçŸG½÷®üñèÑ£ááá222žžž>|ñâ‹ÅZ¾|9ÌÐÕÕzùòå’’’;väää8p@OOïÌ™3§OŸ¦Óé/^¼éQNaaá¹sçjkkKJJ¶oßîããƒ]*..މ‰é7ÄCŒ07nÜ “É '((Kg0111µµµï°ž}ZP÷&ˆ¥éìì´³³‹ŠŠXXXÄÇÇÇÄÄp8œÑùÀ&&& %##c÷îÝžžžNNNÇŽÔ'ÿMVcKKKŸÿ‰&çÆT*õ§Ÿ~²°°hooÇŒå'B d2™l6»´´ÔÈÈh`&:Îf³íììàn¾===BBB°9sæäÉ“±UPP˜5kª®°º~¹¿hjjÒÖÖž7oü¯ÚÚZ“yóæ544L:uöìÙ0›Íîîîž7oÞÆ«ªªªªªX,–——ך5kz{{ñx¼ˆˆHÕÿÐÐÐpww¯¬¬¬ªªRPPØ¿ÿ”)S˜L&LÔÑÑ9}ú´””Ôüùó***jkk­­­O:õKW^^ÞÓÓ£¯¯?œå™§½½]SS³ªªŠJ¥Î›7³74ËåJJJbeTTT„kfMMM%$$`¡äåå÷íÛ÷Y|#'“É<ö¾|>¿¾¾ÞÀÀ ªªª¥¥ÅÉÉ ³7 ƒF£)((`Rwww×ÐЀòÙ¸qã¬Y³:;;¥¥¥Y,–ÓÂÂbÉ’% æÔÕÕõ÷÷—X°`A}}}EEE]]ÝôéÓÿüóOQQQGGÇêêꪪªîîîùóçoÛ¶í30??ŸËåš››¿kIÍÿi1 „~+¯M/‘HØúµ¶¶ªªªº¹¹IKKc9õôôLMMMMMay§N:gΜ~7ÊÉÉYZZbµÕÓÓóСCÚÚÚPbD"qݺuóçÏïêêwrrrww'“É•••k×®UPPPQQqssc2™šššsçÎkhhÐ××_°`@¨­­577Ÿ={vss³¥¥¥‹‹ ›Íîêêš6mš»»»¹¹9ü_6›íííýÍ7ß|œlÉd2‹Åâóù¯^½JLLÄ‘H$ƒÑÝÝM£ÑÂÂÂÆ“_e” --/øàá .Dý˜w5‚èð‚O^ðí·ß¾÷¼"‘Èb±JJJ½Z]]­®®>hÇ}Â"))ÙÛÛËãñüýý?Žkc‰ØØØ¨žžžØ®-Ä'òøñãÎÎNÁ·~ýz$Ç£Ñh]]]ƒ^•’’B•qhÉK´··Œu~×øûÍ #GíÈyÐ IDATár¹bbb666HÈ䌼¼¼¼¼¼_Ž-[¶ ! ¾èð@ “ƒ@ ˆñr¬\.7-- ÉáãÀNXA AOOOzz:’ÃÇ1jw@&ñÁðx¼„„ló"âKXåäää¡÷ÓD É™Ðétqqq;;;$ŠO8;DŸ†Ãá((( uKŸÈ{×"ɰÙì¯uD&b"Àçó Ò1ÄØ°ëH@&@ Èä ñáüŸ¹'..Ž„‚@ ˆÏB¿ “þÉ¡ÓéOŸ>E2B ÄçÂÑÑ‘L&br‚††@ !“É¢¢¢q£˜˜‰D|”ƒÇãeddp!ˆˆˆH[[Û‡.iwqqQQQçå br -cF @JJ z¿ †´´ôÀs333ÕÕÕŽoˆDb¿ÄALŸÏ§ÑhHÐÁ> ÷ó„ ‹‹‹‹‹‹ôIHHôõõõKDAÒøHðx¼µµuCCC}}ýpò£ oñ1 ‰DaaáiÓ¦ Ëš|˜ÉÑÖÖ¶´´Ä¾æçç f°³³«®®nhhôvww÷/^°Ùl·|ùr“É W¥¥¥gÏž hiiyùò%LÔÔÔ´¶¶”––æääÀD333}}}@FFFee姈 ûSHCCCJJÊ …äää”–– ¦888”––677fÏž---  Ã<“Ë—/Çáp‹>—˜;w. ½½=..&ª««ÛÚÚ*++322†ÿü®®®‚ãÙ&“‰}%‘HsæÌyþüù ÷ª©©©««¿~ý ££caa(,,Äf---µµµ©©©uuu0ÑÅÅENNÑÓÓ—,YB$ù|~``à'*±………ŽŽö599¹±±~Æ$ŒñôéSÁmçEDDœ_¼x‘‘quu477'&& “'Ož6m ¤¤$77&š››ëééÒÒÒª««a¢£££’’ &&¦³³ó …éRqqq^^Ôa6pÒÔÉÉ)??¿½½KY¸pattt¿×êîî?S©ÔÈÈHøYQQqæÌ™ðsMMÍ›7oF ÑQTTÔ××OJJš€ ®–––´´tVVÖè|¼™3g´µµ êRLL ƒÁø\Ãá ‹Å"“ÉIIIÚÚÚªªªŸÓä„ÚÚÚÌÌLøÕØØØÀÀ ¸¸~µµµmllÔÕÕåñxMMMoÇBå<==a,,,¼xñâIII›àà`¬æ¼|ùrÒ¤Iªªª0QWW×ÌÌ,77×ÔÔ”ËåÂDKKK‡5'2¿ª¨¨ØÛÛC«#$$TSS#¨O\.·ßíD"î>;{ö윜œ®®.À¼yó¢¢¢ ÆòåËŸ?ÎãñˆD¢‡‡ÇÓ§OÅÄÄáÃËÉɹ¸¸ÄÅÅ©ªªNž<&jiiYZZb~/$)!!þ/T©ÐÐP6› Ÿ¶V‹-Ôêàñx8¹§­­-++ ÀÐÐÐÈȨ  À¢··&ÚØØðùüúúzggçÂÂBØ º¹¹½|ù²··wÉ’%QQQXOâ­‘HÌËË«¨¨€_íííy<4ê$)>>¾»»ËÜï˜Ãÿ¥¥¥­­­áÃ+))988$%%ijj*++ÃD===SSÓ¼¼<3336› ­¬¬ø|~MM££ceeejj*`Ö¬Y©©©‚ú¡Lžz ‘HýöÆþ¼oJXX˜L&cÝk[[ÛálÅýÁŽ5Uºàg‡ÇãßûÇAAA°ù&p8†Ãáüe.— ‡Ãáp8˜·Ë…*Îåra"‡ûôýÆù|>V¢ÚÚZ<ogg÷êÕ«…‚ØØX>ŸÏçóa£Ü‰D6› £¡jâp8!!!¬˜°ìPbýŠ9|Øl6öý*€‡Ãyo­¨¬¬¬ªªÂ¢¡Hác`r†%Âd‚='‘Häp8Ðä|–ˆ½_@bb¢³³3ÇkmmíWØ!èîîŽŽŽ†%âñx˜œ1užjLÄTWHH{Ðoùô‡R]]]SSFðý„~Ú‹iŽ æp8ý\P¯à玎Žèèè~5PQQñ‰€eÒ¤IjjjÍÍÍrrriiiS¦L!‰ØPrÚ´ip(™’’‚õ]]]ÃÃÃíìì±Aó×ÂÛÛ›@ p8œÇÐFFFPOØlvaa¡µµu{{;ÖmrvvVQQDFFbã×%K–ˆŠŠR(”¥K—>~ü6#†——W`` §§ç£GÈdòüùó17Œ¬¬,tÃ466ÆÇÇÝ_§Óé, ÓÞ¸¸8CCCXØÏfrúµò˜¤ìììjjjjkk]\\¸\.왾«MÉä >>}}}!!!|> ¡¥¥%??ßÇǧ®®.)) K1p8œ¶¶6ŸÏïèèX½zuAA›Í†CIKKK*•úàÁÀŒ3x<^mm­««k~~~KKËܹseee¿º¦y{{Š——×Ygff–““#""âãã“––¦¤¤Äçó+++gΜYRR’˜;wîëׯ;;;—,YM£Ñ–/_þELjïꔄ+V<~üxõêÕt:=<<|É’%ÁÁÁÐ=ß”ŠŠŠ““|òw qú5tÎÎΟ”£«« ýûx<>77·°°P°íÆ,ïý2™¼pá   Ñ°N1™Ì{÷Šz{{S©Ôˆˆ؇kjjºwºº··wuuõëׯGØêTUU¥¦¦êëëgee™˜˜ÀôÌÌL<ic?{¾hÑ¢ÑðŽàHåCÝ üüüüü|è/--•——‡é/_¾$ýÊŽÃáàë¦P(«V­úr…š5k– R —>|§™ƒ‚‚DEE¡‚uuuEFF§Ý€CÁ)F˜cbbçA?É)--…bcccøz ƒˆÏç[YYYYYaí/+ô ô«KcÂÞJJJž'Ký*3‘HtqqINNyçÀ‹/à\ÎâÅ‹‰D"T‰Äãñ–-[óôööBoŒ gOÐÞèéé‘Éd¬>j 8­B"‘°Ñ=¦úpnc4Ø<¯««+&&6pŠ.--ÍÎÎŽËåjhhTTT466bÍ4|_ÐÅ›f‰;•°¼4íÁƒRRRsçÎ ƒ•‘ÃáÔÕÕ=xð@[[{úôép:êK´Îµh‚¥¥¥––¬>#ìñ>ðC?uèTxWGgVHhÆŒ° ù‰Ÿ˜˜˜––ìëÒ¥Kßûfà`Ç:%‡8$iÐ0WWW6› ‡õŸÇä`¼}ûvêÔ©VVV­­­‚úíææÆf³[[[çÌ™“˜˜H¥Rï]¾|ù½{÷F¡ÎA÷úÐuiÚ´i---˜£ô›7o>e’ùÓ ñòòzúô)›Í^¶l™ „a˜ÜóçÏåää,,,°p ˆ¶¶¶””ÔÈ8}($‰Ãá Ñ[‡1 ÷ïßL”––¶²²‚¡k_É“'ËÈÈÀÈÀ°Ùl8=Ù¯Œ+ΪU«Ló :—_+‡Ãa2™ÐtÁDåܯ˜ðÇûóÓÝS‚ŠÅ‹]JOOŸ1cFmmí»–ôƒÏçÓétì×Èd2Ô"Á7û¥IP‰Dâ{ƒnY,ö: S„@ `B¶³³ g¦ÀÚÊãñÂÌ™3ßµ´ _m}W³+Øboãñx&,,ŒÃáfÍšõq~¼/÷f±va;@ vÞ5ÄÁ¼yt:ý]µæÃL‹Å1“É„•‡Á`ôÐh4ØHÅÄĸººB•‚‹r`K­†¡Óé‘‘‘T*5-- &¶¶¶Â0庺:ËËËóóóÆÆÆ01;;»¶¶öE,$$„=LSSÖe±XŠŠŠ‚«vòóóËË˳²²,--azjj*·Òh4¸~Á`0ž={¶xñb8 ‡]B–œœ ïíèè€ëE±bVUU}Ðl F|µ½½½Ð ôóïa›uttäååÁÿjll„Æ•Íf+((`%-,,„ËVÌÍÍabZZ\“””äèè'{ccca‹º`Á¸.gˆ …á÷Qôôô`t“ „aamll3?þœËå>þN0Œˆˆ¬]ë÷Zkkk19—••ÁXä·oßš˜˜ÀÄÌÌL¸üèÕ«Wöööp¡RBBB¿1ú‡Âf³åää°‡)...**Âê|lÌŽb§ß›…/-<<|Á‚0±§§:ÛÚÚ °\ÌðÙéééÁjk[[[rr2,&l†°Všs F‡ùÓÓÓÕÔÔ`Eppp°²²Šwttüê­mHH¬­P£Þ•­©© Ó¢êêjè‹f±Xð­1™Lhé±&155ÕÎÎnêÔ©€—/_N:µ¯¯/22rΜ9"""aaažžž_Έö[×Ñ××ÛØPàp8¨T<Öåîî l}dYY™™™™ Gç½CÈëׯ§N*%%5È Ú«îînâââB§Ó ö;X,ÖHb}v–ŸÇã}õ¸Lbb"&&‡ž€E‹%$$ŒªÊˆÃá$%%û%r8œÏ7ƒ] è/á éBNNNGGGDD¤®®ŽÃáL›6­««ë½Ã;èšc0âââp'iÿãÇ>Êèr­««åáLC3cÆŒ~3Z½½½Ã÷É"ˆÏˆ‰‰ISSAbíïèD" lÛÚÚÞ5'÷AL›6­°°¶ÚØ:î1Ç+))¦!pww8K7¸ÉéîîþÜàX!,, Õsb”ðúõk›)S¦’’’FxiÁ{a2™_® Œ‹‹svv†±‘‘‘£yˆÓ6›­©©©©©9üÁܰL@Œ€Õ™°eÿºË“¿"ƒŸ—3üˆ{@Œcî-ù™M—Ë¥ÑhC,{vUH¨ººZUUõ7Ë=„ææf ‰!Œc<W5IHHŒÁÀžÞÞÞѰ›Ëg,Tcc£²²òxjjkkGU°ò'6­­­¢¢¢ŸeѶ„à š€¤¤¤`pðXGJJêâÅ‹³gÏ7&G\\üéÓ§fffŠŠŠã£DÂÂÂéééx<ÞÈÈh|”ˆH$666¾}ûÖÉÉiÜØððáÃñÔ8HJJÞ¼yÓÙÙyÜôÞÄÄþ?ö¾<.Æõýÿi¦iÓ6-Z¥¤E§dO¡…I¢lm…Ä9Öl"$ÛAHv*¢½(íQZU´Ð®TÚ—©iZgæ÷Çõúܯç;ÕÈzè×û¯ÜóÌóÌýÜËuÝ×}Ýï÷˜çÏŸ+(( T†þºnÌ`0€Èwp.G—£Å(F1ŠŸ´¬dÿq]]]II þ Vii)1ûã?þøã(ÌÊÊ6\¡LkxxøÂ… Á•`0àÛ"±©ÖÖV b‘@Ž!°b¦¬¬ Ç©0 ËÍÍi¸™3gqB||ü”)S†Êhkk{ýú5Þk«ªªåEEED‡ ²Z³gÏ–““Ã3kÖ,tú'$$…­^½ðžž¤e‚a™L644„7 ztrrr Ò†aXQQ¤!jhh@J{DFFêêêâ׿@YÁÅÅ…h£( “700ô>………ýýýˆæ 5«¶¶ö¸qãÐ.###tp!88X!V­Z%4 ÎÓ /\¸ÿ8iÏr¨“=&Ož Òp€°°08x¸råJ–DÌŽŽ º›?>þ£>´´´ f-((=ºiÓ¦Mœ8ð´´´?¢ë,XŒŒ„S#Ë—/êßAû0”––R©TÔ‡1 ËÉÉÅ?---””˜˜G_.\ˆ×£ 655e þP©Ôääd###øo}}=$ý7N[[ ‹‹‹á¸¢ºº:~™žž.--šuP úP„–––7oÞ 7Œ@EEESSsàÀÌ›7(îãââ€ÏñâÅ(¦ÔßßO ~Ü1ÉAgÃ9!Bsss\\†aRRRh>,//FUUÕÉ“'³iÖÿ±±±Ó§OGBŽhà@¤2YÐÔÔ”ŸŸ?Zèïir£¢¢ KKKÑ+.)) «¨¨€×Íd2ÕÕÕ333Ÿ?㤮®ÎÜÜ| Õ Ùµk×ëׯÁä<|ø ‰D¢Óéfff@ÁüBBB ÃÀÀ ²²288f½’’&“9uêÔ·oß>{ö z555Ë—/GV'66öÀ^^^Ã19T*5$$¤¦¦&::™œêêêàà`è1EEEL&D$Ñ ¢ µµµæææhÄ>þÜÉÉéñãÇ`r“““á˜N·´´¤R©;wîD ,''ghhX__æSTT”Édjkk………ÁįšÕ‰ŒŒlnnvuuŽŽF&çÑ£GHeŽN§¯X±¢££ãÉ“' ^" À`0@1÷ïߟ>}ZUULÎëׯ###Yš5666>>&_ …biiÉÏÏœœL§Ó988ètº……Eww·ŸŸ°&‰š«ªªþý÷ßÎÎÎašœ„„„ššš‹/^¿~™œààत$Hréííµ±±Á7«ŸŸª)NÓöæüùó\\\`ròóóŸ>} ‚íUUU¦¦¦JJJ·nÝjllDÎÄÌ™3EEEŸ>}úâÅ ¨4ÍÚÚšD"ùúúwôᡪP^^ž’’òòå˱cÇ"““ ´‰Ÿ>}277—““‹‹‹ƒ£*mmm‚‚‚AAA4mß¾}‹/ÆÏþ7oÞ|òä ¼Û†††€€|_ÒÑÑ).. } ÓTSSËÈÈ(..~ðàƒƒÃP&êäädddÄËË ï9<<|Íš5Ðôááá•••ÉÉÉÈädee>}zΜ9ð_...¼É)++CÚ¬/^¼8w”TtttBB€ooo·´´3fÌ“'ORRRèt:À?~œ’’„7ýýýà)"ãêïïÞ‰°°0ƒÁÐÓÓ+// ·ZVVÆd2555YšÕÌÌì?´:±±±uuuçÏŸ¿ÿ>29ûöíÓ××·‰D" 49ÍÍÍ×®]{ýúõÏ699990 RRRêëë=<<0 swwŽŽVWW TQQùçŸ0 ³µµURRb19¯_¿Æ3>åææÂM,X`ffV[[ûðáCðѯ]»f``]XXxýúu Ã<==CCC§NúôéSøúŽ;233ÁäDGG'''C÷zzzrrrZZZð…¹¹¹999wïÞÅ0ìîÝ»x“¤  àììŒaئM›aÄFDD¤¤¤àéÅ>œššJ&“™L¦””ð“ ÃÏF())‰Í€€mmm`X+]]]ãââØ˜œÂÂÂêêj–“À»víÖÖVmmí+V444ܽ{ìPJJÊÙ³gYLÎû÷ïŸ>}úéÓ'UUUd},X ££ƒa؆ &Nœ(++ëááqðàAXiiiòóóU©»»ûСC`º»»srr@4™3g²ôp„U«VÁ 811QLL ¦ˆK—.¹¸¸S”››°{8p //¸ ”””~šÉÙ·o_II 77wgg§††ÞäTUUàwttô­[·ôôô222*++¡¾ñññµµµššš!!!222‡Æ0lË–-òòòÿ¡É)---))x2ÆÝÝEÐo\ýüüŠ‹‹ÿƒÀš¼¼üùóç¼¼¼Pá¤I“jjjÀ`$TŸ…»»»¿¿?>¬tæÌ˜ôýýýa¾ “Éúúúpçîîn RTT”••…ÂŽŽw·nÝrtt¨50DEEÏŸ?ŸŸŸÿ÷ßãk=aÂôDä²±ÇÕ«W]\\>+ÿÞÙÙ wE¨oÄ®]»0 ƒÐ‚½½=´ƒÁX·nÝpîóêÕ«¶¶¶%K– N#‘‹‹‹›0a‚¼¼<†aK—.MOO‡@Í¢E‹ °¶~ýzˆnÙÙÙ±yÊû÷ï333×®]ûüùóaVnÎ;‚¿¿?¸ü›6mÎ}Þ¾}ûþýû5kÖdee±¿2::<-SSÓÏ ¹3gΜ9sæÍ›7ñŠéȪ%&&ÊÉÉÕ 8räx$,ÁÃ+W®„††Z[[CÉ„ ¶nÝ «™>°DñX±bÅŠ+¶lÙÂæ7ƒ‰×çââZ¿~=ü-!!qþüùììl˜[Š‹‹¡‡khh 5v¼½½ÍÌÌð!¾€€€¦¦¦mÛ¶ JÉõ‹£   ))iêÔ©l^øèH˜áîÝ»¼¼¼û@mmm`` ››ÛÉ“'ÿ›½ðññqrrBP‹——w8ü¯>411ÈVÔ××wýúõÞÞÞýû÷ÃOXXîL"‘`òòòrssC!›ôÙgÏžMž<™}`z8àáááååEOdóæÍËÍͽ|ù2Œ.3œ={6{íU¨‹­­-ܹ¡¡ÁÏÏÏÂÂBFFfêÔ©pü¼Ëyldd”——oïÑ£GVVVRRRVVVáááPYt‡­[·ÂS¾…,!!!55ÕÔÔTCCcøß‰¶ 6 ü¨¢¢"00püøñàÓhhh444 ¾ô-Ó"ûƒJJJºººðêZ[[™Læ@˜˜˜˜ &àeýýýúûûïܹcgg' °yóæ[·nAö×·7Ïž=ëììlkkc2™³gÏž;wî›7oà…T+øÏagg×ÖÖ,;×®]Û¶mú¨µµ5::úG/+¿Ìädee555ÁÅÝÝ=)) OŸ<>>>?~tttD‘DƒÁ¸téǾ}û ¤¡¡!$$X355æfX‹‰‰Ôu ÏÏÏ·´´dã*bvá˜ùøøð/š%NUPP€kºººøù^†a0í­_¿þ³ùˆ|||ÇŽƒ¿ß½{çèèhaa¡  `eeZ/]]]`r´´´˜L&ìU~ÿ¼««+>°Æ~PPPðôéSMMM###“ûúõkSSS”´9 IDAT'rïÞ=|`ÍÌÌLHHÈÝÝXsppø”šššGÉÉÉYXX°‘OHH@¼DK—.UQQª)ñµ;v Èd²££#ôuVTTøûû+**®X±Â××—ý«[¹r%Ú²611ÑÕÕ•’’rttôôô„Hâ&9räÈéÓ§±ÿ<âãã322–,Y‚vž‡ƒ¾¾>NNÎÝ»w³ˆ6UVV>yòd„ ¨ ³fÍ‚‰ ÕP÷ô÷÷G+° 6àÓ4ðvîÌ™3lÖFüñêá^^^ÑÑÑMNPP¡¡!>PÜÙÙ¹{÷nIIÉ3f¬\¹R@@àÀgΜéëëûv]’ÞÞÞÉ“']¼x1!!aöìÙà ‚ˆå¯y M¹ CFFÍ„ åÖ­[ÂÂÂööö?”âÇÞܹsGSSóÆ02/^¼èììÌÍÍíîîÎÃÃA¡oLa£UUUuÿþ}YYÙƒÁ€ùâ[ŒŒÀðÀhüø±°°0Lduuu·nÝ:|øð É ]]]·nÝÂOŽ(щ€€€„„(œ={6Lë®®®?º æååEDD0Œœœœôôô¾¾¾W¯^Í™3'&&&;;{É’%(í[ðñãLJ®Y³ÆÍÍ­°°°¬¬ìÙ³gW< ÍŒþþºg‰ŠŠÂ+…½œ²²2sss777XÁÄÄÄ œ„††ªªª4uÈŽÞ¹sþ ‰ð”ººº¯ ï‹ÏÌÌ422Âï±Óäœ?þ¯¿þrsskmmmjjºsçÎÆ«ªª=z¤¤¤Ä²!l ''gkk sqq‰DXÒ±`þüùßx´µµõáÃ‡ŽŽŽ¨dâĉhÃÍF8<<œ@ °˜OOÏÕ«W³øþ'Nœ€D’¯©ÉÊÊâs¦‡ ‰±hðc888`ú¨ªªJOO?pàþâÌÌÌ––¤f=¾ËÌRXXɯ䄇‡O˜0á³Ì™3gvîÜ9h÷øõ#((øE~2®^½ºnݺ&GXXÍN<<??LLLHH†ajjjjjjøP^HHˆ ¤‚8pàÂ… à9B´a̘1pg‰s"‰Djll„B^^^ðOyyy!ÆŠ¿_Z‹cÇŽÁlH `³°°€qqqmܸBjùùùkÖ¬Á:ºººÀ)—¥°±±™4iÒ¦M›¢¢¢ÂÃÃ1 ³¶¶†õÜ¡C‡Îœ9‹h¬-[¶ Ê:88ÈÈÈìܹ­J ÂPëŒáÀÉÉÉÃÃ^ïÑ£G1 ëîî¾pá¡C‡ˆD"NG5Ý´iÓøñãÑ£}}}³²² ûSOO/&&®ObÍš5ééé ©¾`ÁØ ¹|ù2ÄyvíÚCQDD¾K$÷îÝûµxúô)r„---ÕÕÕmmm ·bÕªUƒJù’H$Tòòò˜˜+++øoii)VS¦LYµj//ïÛ·o!»DPPð[”Ðxxx:Äæ ôøùùa#66–‹‹ ¢Ó±±±ÚÚÚxmc{{ûˆˆPëÖ­ƒ±#&&vüøqƒÔ‰Ÿƒ#GޏººÂsaø´µµÝ¹sg÷îÝÒÒÒÆÆÆP5ð`¦NZUU…&CHåçç¡B%%¥ïå±}G¿@DDdòäÉœœœú&“Éd2Y\\\]]——WII©®®ŽL&«ªª‚ ;v,…B!“ÉZZZpºMFF†››»··NS²8¤BBBüñ )OffæäÉ“®r899¥¤¤Pf0™L–’’jmm%“É3f̀龭­‡‡GJJJNNröÉd²±±1ËÖ‘°°0T|MM€€™LÞ¼y3………ÿøã>>>ä‹ÀÔ$""boo €ÚÚZ¼u$‘H222pf€H$2™L*•J"‘ÚÛÛûúú†ŸÆÉÍÍÝ××ÇÅÅÕÛÛËd2SSS“’’Qíèèx÷îËÑ„ßÀ±fmm=ʱöËb”cí×âXôÈúo àX[ºté(ÇÚPÝl¨‚vvvâ*²èå°¨‚Žr¬b£Å(~FMÎ(F1ŠQŒâ'aðôð}5þó€†a|||C¥“ýv€c‰¼¼¼#¦™ i¸¸¸FL ×qrrޤ¡ÔÓÓóÝT~‘ÉỨËü:“Ïwi&€§òúQ&§½½ý+ŽüÊ ÓéÃ'Yù-ÐÔÔ”šš:bІµ´´prr²ÐúýÖèìììììIC©¿¿ŸF£°É¡««+&&fÄH´aV__O¥R‡ôÛ!$$ô]˜ŸØ™nnnHW3f ð9Ž˜ô*•*++;=ßo..®ââbŽ_ïýû -NÎæææÊÊÊ3”888BSSÓHšøøøjkkÙœÖúí&‡žžIIÉA“ì¿¢“H¤ïȤ0¸É!‘HßѬýçâààIBÔüüüÙÙÙbbb#)c­®®Ž@ Œ˜ŽG"‘BCCÈ©d¬qrrޤÉAPP““SRRr$e¬ˆˆˆ|—fUÅ(F1ŠQü®øŒÉyýúõÁƒñ%ÁÁÁúúúúúúÀ} ¸pá™ùA±råJ /Å0ŒN§ÃõÕ÷rss÷ìÙ'$$èã€d¼¼¼ Å”ñWâõÙ£¬¬ (¾á&.\xýÅ‹áÓøøx(Ù»w/þÑÕÕÕèâŋ㩠›ššà8ü’’GèAAAøw{¬]»–Å 100Ð××Ç„üðáÜ/ÖÀ‚‡Ú¬‰‰‰,WnÚ´ A._¾ýZD9ÕÐÐ%HÎ ;;_/ ‡&þúë/¼6 †aæææpŸ|Ã?~„¶oß%¯^½Â?ˆ~ r†ÿú‘#Gà2Ðh@°°°ýJþ†Ÿ­Bppðµk×ð%—/_†¯ÇÆÆ¢Â]»vA!(",Y²q¼vttàŸúiii ; Á_ ²†9sJØ+n˜˜˜°!-,,Ä8¡@',€ôC·mÛÆ2pLMMÑeˆUäçÀÐÐP__PúçwïÞÁOBóaTT¾F,ç×ÙîÚ¶mhN² }}ý¡Xµòóó¿æ@ Ix“ŸŸ¿yóæÎÎN<JhhhVV–§§'†aaaa÷ïß_¿~ý¿ÿþËÇÇ…žžžD"q GËÊ•+_¼xf° ÅÌÌ Q ¬[·‡Ÿ>}:ÜðÇìzãÆ à+Ã0ìÞ½{ÁÈȨ¢¢bݺuH|w8g jjjV­ZÕÓÓƒßIJJ ‚›'&&^¼x‘@ÀA"‘àS///"‘¨§§WVV¶yóft®"]K—.mnn]Q(§P(ëÖ­ƒïVWWoܸñÎ;ÙÙÙÛ·o§R©øcáúúúè_¿~t9‡ÂÆ%óĉø;\»vƒƒ£³³séÒ¥áááUUUNNNðôâââ¿ÿþûÒ¥K,·òóó;vìbB»xñ"///¾Y]Š]DDbú:sæ ´,N‡NÜÒÒ²qãFøîÇíììnݺÕÑÑÁÇÇwþüyøÖ0w¡öîÝ›’’RYY‰þ133Û¿?pàå‚>}ú´k×.xtiiéŽ;<<<ÚÛÛEDD¯%œê¿ÿ¾——WCC~t=zTYYˆšÎœ9³gÏuuõµk×–•••––â#Ú¨g655!Û6("""Nœ8ÑÚÚŠ?AyåÊ7¹yó&‘H400ؽ{·®®.ÐUwîZƒ×ÔÔˆ‹‹Jô[^^Î^²()) Þ€‰‰É©S§†óÀå |^„¨¨¨U«Vµ¶¶b6Lm˜˜xôªU« ô„èÈð—¹»»;;;WãéÓ§á+àñ šÑD§Ó«««ÙgÙ ˆ‰‰áMêÌGŽ™7o’Ó} –/ðÛ!H}‰EAÃ0Xmß¾ÖOˆÅnß¾}¦¦¦ƒr}BðåççGâ\\\ŠŠŠ …å[ ”ˆa˜µµõPc§¾¾^GGQ~a¶fÍÐAF ÃfÏžÍÁÁÁÅÅ5|‘ßÿmmm ÜDQQQQQÑŠ”ÿ `.xÞhîܹ@ °„ŽÁ7mll”‘‘ùq¿ê˘¤#""ªªª@üþýû=b/g‹aزeË®^½Êéêïï×ÑÑ‰ŽŽnmm?~||~üx 0e@@@II ‹ä- ®\¹‚äN:õ¥Þ4 55õåË—PÁ°°0OOO<{îÐÛÚÚ€óÿÎ;(Þ½aÆëׯ:Q(”íÛ·ÃËËËY¤…Y"CŸ}½C…࣢¢`)faa‘””Äþzÿ²²²C‡±È“¸¸¸¸¸¸DGG;vŒ““sþüù¶¶¶{öìÔ¢O™2e`ÆC[[;''ggg|0ð‹`ccsýúu°†††ø%—¬¬ìÕ«W¡z{{A\nþüùH:<<üäÉ“Cu§S§NÍŸ?¢C;wî”––f£/ÐÙÙ¹xñbð/‚‹‹Ë„ V­ZõEçóóóá ssó   A¯´´´D¢Dwîܹ}û6"Êtrrš>}ú²eˆ™©ÕÙÙ¹zõjàØFFFÈBž={©áGЂ þüóO|ÀíÞ½{JJJ666<––NKKƒh^__ߌ3~q«óðáúºº5ýe‘œœ ap&“©©©ùöí[¼Ëèäääïï?ü½ðnrºººúûû‘¤ÞkË—/?|øð´iÓX–8œœœñññd2™@ 466VVV:88êÀCÙ¨P³l ttt ª'¨¤¤;+""" Û7ÝÝÝÝÝÝPA`NeqWÿùçè^(>Žw“a­0è FKK ܹ¥¥¿=( Üñuá…úúz nnîÆÆFö¥¥¥¹ººâOä[YYqssÃkÙ°aƒ•••¾¾>òFYÊ>c›‹‹ õnnî>2†a'Nœ@«–Ë—/¥ZÝØØ(** cÙë"‰Ó¦M{õê†aYYYð8ôhNNN6ÒÑ …‡‡.¦R©ì#0™Ì¦¦¦¯VÊ8~ü¸¬¬¬¥¥å—¦çT¶¶66}‰5+“ÉDöÀšššæææ°Z]»vmJJ ZAÊÌd2Ù÷%ôÞØ¼dx½xûzóæM"‘ØÖÖS!êE===ì72Ðh4:Î~vú¥€º+ƒÁÀ¿Þªª*;;»AAÁ_Èä|)ÚÛÛÍÌÌ`yÞÙÙ©©©ùþý{hüLM§Ó³³³Á!¥Óé½½½ëׯ¿ÿþðdgggmm=DNNl—}Ëé4†QdÉÊÊ꯿þÏß½½½°Ó€ýO÷z̘1ýõüŸ ©Tª­­-x4ÍÀÀ %%eø'7“““oܸñàÁ6×ìÛ·3üj"‘QäÁÄÄIJäPý·8qâÄØ±cׯ_ÿ')ŠAvvög¯|ðàÁ‡ðù†:thÒ¤IkÖ¬A®Ã7PjÏ@Ïc˜xúôitt4>p8`ñG544ÒÓÓ¿úgŒ‚=¦M›–»P,>ñÛ·oñ“°Ïofr¢¢¢PÊÖ”)SâââuPŽoZZÚùóçQ„Çßß?++ ¥9 …îîîÏ*¥óóóãQÐ#GŽÈË˳¤8wuu}»ˆ/ <==;;;Ù+b}/¬^½¥ª{xxtuuá%5ñxôèªéüùó½¼¼@xVEEEì)Cèt: ~nnn¼ÆÒW ²²ÒÊÊ V9ø@îgý¦zòäÉ,É Ã•}݉wüz…=úúúf9÷ôôÀ‰NT²Uöuèïïg“QaØž={æÍ›÷Yá¯ÎÎÎ¯Ö ÿÉðññ)..þE’†‰¡^¯œœš„322ÜÝÝPÁgr988ð]sýúõªªªa÷î݆>}úÝ»wP¸bÅ Èj777ÏÈÈ ‘H\ÿpŸšš¸~þüùyyy°Uˆþ¡?—>|¸­­ ¾®­­ IV>>>wïÞ…Â3gÎ _ŒeØ›™™Á}Þ¿úôi Ã.^¼6ïøñãÅÅÅðéÒ¥KAè,88øÌ™3PxçÎ$g‡_ a&**—mÛ¶ íÄB†ªˆDâðIŸH$ÞšÖÕÕIIIIHHÌž=öÆïܹƒÞl8GDDlÙ²…@ °¼|xîéÓ§ß¿_133366æääd¹ÿP|eÅÅÅ£££á»;wî„s'zzz[¶lÂ/^@Èk¸ž''~+;//oþüùp+àdëèè¡ñãÇß¿>:qâä’-^¼xÅŠPøîÝ;hÖAßó­[·‚ƒƒáÊC‡áEÇY^2*þÚ ÿ NNÎ#GŽHüðï¿ÿBÉ7ð¼2ø§ '''Ãe›7oƆc° Š WòññÁâ•““sÏž=èÑlLðm*((È’ÇÅò¬åË—/\¸îYUUYÂgΜÁ74K;>{öìèÑ£ð•'Ož@šFyy¹†††„„Äĉ¦Vþ8'–„„„††daTWWCú¸¦¦¦››üÎû÷ï{{{5;¡jþ:Œmœœœø~[TT¤¥¥%!!!##6¦¹¹yÊ”),“0‰D4~þí•hû-1*ÑöëcT¢í·À¨DÛg»ñ¨DÛ(F1ŠQŒâ·Ä¨ÉÅ(F1ŠQü$ ­1jfø˜ÀªÑˆi&”L8Z£_¼F#rrIÍô}kD ¾ozÔ&g [âï  ¥Óé#ÆäÀÙ#ƒ1bš‰F£uwwóòòŽ˜ÑétÈIC "GR( ƒÁIC Γ}¯ŽG§ÓÙ'"~“ÓÖÖÆž6ê·[ Ðéô°°°crB{{{RRÒÊ*ùOœ2àÚù¡ÇÐ~2 ox$ % Ã:;;GØäÐÝÝ9’£T*µ¥¥å{‰Î;ŸˆûCLް°ðÈËX[¶lÙhÆÚ/‹ÑŒµßb.ƒŒµeË–˜É2ÖŒG3Ö†êÆ£m£Å(F1ŠßŸ Ë´µµÕÖÖâ)2kkkáœÔ¸qãÐáó²²2‹PUUeá{~óæ þ¤ôìÙ³‰D"“ÉN'...tÚ®³³x!………wÃ°ÆÆF8€&--tt***à ÝB7/((7nÜѸvvv–••á%FšššàH¹¤¤äÀådyy9|ĵžŸŸŒaS§NEDééé@ˆ0gÎ(éíín·1cÆ ²È¶¶¶‚‚ ÃÄÅÅ‘ À§OŸ@Ý`üøñÃqU²³³ÕÔÔð 1püž““SKK Jh4°j ©««ã¿^__g¡‡¢fÅW6//¨ç¦M›†N­Ce988ttt ¤§§ñ•Å0¬¥¥¥±±QEE勺i^^ž¼¼<žº"33èytttX¯]]]@#((ˆ777éX|³~üø±ªª ð &e5†a………ÀZ¦®®ŽxA²³³!î§¥¥ÁÌAû0ÔÖÖvww£>ŒïKÊÊʈù õ¥)S¦ †½ŒŒ `{C}©¯¯/##Ã0>>>$¶„ú’˜˜zè/ÉÉÉ!”ÒÒÒúúz Ã&Mšä@ƒ"==}æÌ™CEœ¨Tê‡ÐF ##Ø,•¨©©‘ÉdTYÀŒ3¸¹¹ÑÀÁ0ŒH$þL*©ÔÔTƒ1èC;::rss1œDCCžže>äççÇOMÿ!rssQ_BÃ0À"•„&á³Ä79íííYYYoß¾MKK¦}è¾þþþpÚyÖ¬Y–––ãÇ/))ñööjÛÅ‹›™™¡é ðíÛ·óó󣉨ÇLJ/!!tJøøøµµµ;;;Ÿ={x·" IDAT7nܦM›&OžÜÐÐúS¦L±¶¶VTTüðჯ¯/Ì) ,X¹r¥„„D~~~cc£‹‹ËéÓ§êM Š®®®´´´ŠŠ t»©©)88822fœµk×âO€—––úøø@Ï322233ûöíÍ›7?}ú„a˜µµµ±±1//oJJЇ‡l»õ÷÷ëééõõõEGGß¹sÃ0QQÑ-[¶Ì˜1£­­-44444æ[[[UUÕêêê'Ož€ðŒ¶¶¶……¹¤×¯_wttìØ±ãÙ³gˆîìÅ‹ ÀÆÍͽcÇ®®®ÈÈH"’––¶··×ÔÔD7‰ŠŠ:sæ 2xVVV+W®´Yß¼ysóæM˜;lll/^ÌËËûêÕ+ÞÞ^Žþþ~]]ÝÞÞÞèèhÐIÛ²eËôéÓ[[[ß¼y“‘‘QTTïa˜¦¹¹ÙÙÙùÒ¥Kè ZjjêÕ«Wa+»§§gþüùèzˆË7””””½½ý”)SmÖÊÊÊGÁÄ­§§·jÕ*iiéwïÞݽ{9ÍÍÍMMM333===! ÅÞÞ~áÂ…D"1>>þêÕ«`S·mÛÆ¦×ÕÕÕ½ÿ>22’‹‹ ‘g—••ùøøïÂ… W¬X}éöíÛ ÇbeeellÌÇÇ—’’rõêU0x}}}úúúýýýÑÑÑ@ %""²uëVèKaaa!!!†)))ÙÚÚNš4©¦¦æÉ“'@%>{öl 99¹âââ€Êê’%K–/_>P$55µ»»{íÚµ%%%àXô÷÷gddèêê‚û’žž^ZZoðäää ¸è²eËð&'..]™ŸŸåÊ•… îß¿¿»»Ùu///qqqKKK 8½ÏËËûÓLNRRÒåË—ét:‰DÚ±c^g²££ãéÓ§þþþ†啺ºz||üñãÇUUUášÕ«WËÉÉ•••}üøÑËËËÄÄ„½ÒÕOÀÛ·o[ZZ8póæMäUÛØØ(++Ã6‰DÂ÷[ùðáC Ãdee7mÚ„Ÿ%~¸É©««óòòjjjÂÛ˜˜˜šš`Jwww ܽ{÷íÛ·UTT€ßÂÖÖVVV–EÉÕÃÃ?qcfii NVCC òòòªªª®^½ Æ,11ñĉOž„Â;v¼xñbõêÕÏŸ?ýú5,}†‰ööv///¾ÛŒŒŒ””¸ùÝ»woß¾'G¹{÷®‚‚‚‹‹ †a›6m’––611qqqÙ·ox÷{÷î3g//ïÆSSSÉd2“É”’’ª««koowrr‚qþñãÇëׯϘ1ãÓ§Oè}xxx\½z5""¢µµ ]]]CCCÙˆN•——#…oÀš5kjkkA¢M[[»°°ðÓ§OçÏŸ¯<%%ÅÅÅ)±/^|öìY| ¾Y7lØ ##cll|ôèуÂ, ¥¥5mÚ4yyy[[Û¬¬,AAA:>nܸOŸ>Q(”ƒ‚¹ÊËËÛµkWlllMM ¨pâg¢Ï"222''‡%”¼y󿏏8ØÇ’€¾„Vl§OŸC’žž~äÈ‘°°°ÌÌÌW¯^Á+}õê•’’R`` :99ÅÄĬ_¿þÂ… Ë–-ƒWqìØ±ºº:AAÁ'OžœÁ£!úYÍÍÍ­­­ÍÍÍ+V¬Š ¹««+(((!!A@@€N§#Ÿ·®®.88XZZú‹L&˜šš†††2™L..®ádÊËË ¢f]¾|9 °`Þ¼yùùùED D“ÈÈH‰„ÎpssëëëËúÌŒ‹- ‡¸%Kùøø´µµáÑø *XM¾yóFNNÄ©†º9H„544ÔÖÖ®X±muDGG755~ÇÄôœœœÐÐP“Y³f±¿2,,ìéÓ§Ÿ HÖÕÕ‰D¼¸_qqqpp°ŠŠ ¦NÚÜÜ ¯šr8 ‘Hì­»¬¬¬¤¤$ô"yyyƒ1]÷õë×ÒÒÒHùWOO///öZ[[W¬XÁÇÇÝ vúûûMMMM{#'''""õUTTd2™¿E²å’%K`¹aðsNkkkpppKKËÒû²Áóòå˺º:"»»»?{öì³VÂPhUdll<¨É‘––Þµkøìõõõ0ªgΜÉ`0€C»¨¨LŽ™™Ypp0¼µ/Ф=~üMˆ è9èðúõkØ„¸{÷î£GðsÓš5küüü`o öÕYYYgÏžUPPÐÑÑ™;wîP&§§§§°°ðöíÛïÞ½sttD&GSSóöíÛwîÜ™>}ú·7êÖ­[ñµÏºŠººº£Ç0ìÌ™3Ïž=ÊäìÝ»÷ܹs °‰²Bþý÷ßÝ»wwuu!RtAAAWWW_` ú±Gvv6l•a¦££ƒöcYàä䄬áY&ÅÅÅ]´hÑg·+‚ƒƒaëˆ}–}}ý@{ ÁÅ‹ŸƒÁ°µµ…–¡¡!ܳ··‚åååeee†††jjjÕÕÕð)“É„à¾Y¡²µµµ=‚F422‚Y¸²²òæÍ›`Î7oÞ Ëôݾ¾¾ï.¯²víÚ'OžÀë…<¨ÞÞ^__ß 6ô÷÷çååÁR©··ÎÉËËËOœ8‘¥Y§M›–žž…ÂÂÂ`ê ‹‹‹¡pÖ¬Y`\׬Y“ ••¬6ìììà2:þué°ÉÉÉh÷kÑ¢E²{ýú5ìmüùçŸ(­èÎ;°ßK ¶nÝÊÍͽzõjxz?ô% êªªÐØTQQY°`ººzCC‰DÈ)hnnNMM…ƒ***Ôçâ₾4&Nœ(''Ï¢R©tÊÈÈàä䄉" @[[ߟ—/_þêÕ+8¬¶dÉH½Ù¸qã½{÷888˜L¦ÝO›‹íììnݺÏåßŽŽŽððp+++qqñ9sæ@Õº»»ŒŒàÕ•——CaOOÏpÎfý °µµõññ±£µ««ëÉ“'ëׯ‡¾ºœœÜÈ»#‰Dggçžžž¾¾¾ââb…ÞÞ^tXÁ` 8ƒŒŒ 77÷Û·oi4Úœ9sôõõ1 SVVnmm---¥Ñh+W®„¡›žž>~üx!!!--­×¯_755Ñh´ýû÷CŽ¿¾¾~dd$F#43fŒªªêË—/i4šŒŒÌºuë0 “ÊÎΦÑh3fÌX´h†a&L ÑhEEE4ÍÄăÃþ§ }:TVXXxëÖ­è—3 !!¡KNNÎOŸ>qpp°ø¼¨e555Ñ:cΜ9/_¾lkkƒ× ¡ ¡®¡¡‘˜˜H£ÑÆŽ ñO|³Nž<šU^^¾¿¿ÿÝ»w4mÑ¢E°¯®®^]]]YYI£ÑÖ¯_Ó±––Vff&ôáÀ{Ö××þü9F#‰ƒ"ˆD"•Jmll'ŒN§KHH œ±þþ~***âââS¦L)..†¾äàà›U===pYWW—žž‰Dš5kVll,F€5 ƒÁèêêB7ž4i’¬¬,‰DÊÍÍ¥ÑhhÇNEE¥©©©¬¬ŒF£­^½šÍvlOOÏœ9sàˆ ''§®®.@(((€æc0ÜÜÜhŽ;VXX8++‹F£MŸ>æåââbƒÒþþþ‰'JJJ¢ûOŸ>½   ®®ŽF£íر¶Ítuuãââ:::zzzþùçŸ=sssçää€…ŽŽŽ¦R©ýýý‰×ÝÝ––¦¥¥% 0qâÄääd6~üxkkk 䤤ƌ“““C£Ñ´´´ð±Šþþ~EEE6Yˆ?\\\¥¥¥d2ÆKooïÔ©SÑîã¼yó`´ÂÔÔ××—””¤­­Íd2ñ]ˆoòäÉprŸJ¥’H¤ööö¾¾>”ý1œwÛ××ÇÅÅÕÛÛËd2SSS“’’FUAKŒr¬ýúUý-0ª úÙn<ª :ŠQŒb£ø-1jrF1ŠQŒb? ƒ§ÄØ82†ñòòŽ$½ ø¹¹GL3Áæ<‰D15‚6âää15âàà&½‘79ððð|6'ðwì½}¯Éô„~¸É¡R©@ExðJš››ÿúë/ ÃÆl­†½}ûØÑçÎëàà0ünêêêjii‰ËpttÂÐÀ~)§OŸà|±²²2MExùòeii)œ-Ç0,00•mmmÇû¥K—@nÇÙÙéáîÝ»=///8Uçâââ/^d_…˜˜˜††ü·>>h¥ÞÜÜ|êÔ©óçÏ£æççC¿š={6ÐÆÆÆG-ÀÒÒ'÷ôôœ6m{–£Í›7_¹re(Á‘òòrŸ#Gް €‰‰ žñ Ôcñ4û÷ïßµkœ…ƒ¢^øžù£akkÛ××ÇÃÃøIJKK¡/M:æÃ¤¤¤ëׯ£ Ð|èííýüùs ömÛ6B££GnذéP ƒa¾{À|s¯šš‹2Å79ÅÅÅÎÎÎÍÍÍø‰,666%%x/²³³ƒ‚‚ÌÍÍïÞ½K¥R¡000@ àÏ %%%ÙÛÛ£¹ L{zzlllN ¤¤dÇŽè lJJJdd$Ü9??ß×××ÚÚÚÏϯ¦¦ ãââ‚®®îÙ³gEEE¡ðÂ… ûöíû¬X}}ýŽ;:::ð:T™™™ÁÁÁpŸ÷ïßß½{ouîß¿O¡PàÓ°°0"‘ˆìëáǽ½½Ñ„²yófSSSXª[YY=|ø°££c×®]ð]ê;}útAAÁ½{÷ °¬¬ìÚµkÛ¶m«¨¨ ‰Àó&›Z8p ¼¼üÕ«Wx7+++øÙ===›7o¾qãFmm­««+<¨®®ÎÕÕ®»ªªŠN§#¢RüÌîééyåÊd3áëë‹èOìììÌÌ̸¸¸˜L¦…BÙ»w/\ÐÜÜ|èСS§Nååå=xð \n8VÇÍÍ è½ñÌùÛ¶m322ßÅÆÆæÑ£G裆††£GÂSêëë;†¬Nrrò¡C‡P“•––•)))þùç¥K—øøø ðúõ뎎ŽÊÊÊ{öìÑÖÖV ‡›7oòððDGGƒ~"ÌŒlªðâÅ‹«W¯VUU-X°z{{·´´Àƒž>}J fÏž}òäIYYYø…§NúçŸddd¶nݺdÉȧ²²²zôèQggç† º»»ñLêïß¿¿}û6ܰ¼¼üÊ•+Û·oWUUEÍôøñc»uëVttt~~>â<‡æææ„„$AF£Ñþþûo˜¡jjjvíÚE¡PðÕµµµ P ÿe€³gÏ–‘‘¿Ï;‡È[ÁÞ<|øÈWÀ6_¾|ÆÎÏÜÒ_¿~½••(&lܸ¯ñáÇ‹/›üøñã¹sçöîÝ;qâDônCCCÕÇǧ©© ÊŸ={6PéùgÂÕÕ5///##t766ÖÝÝXKX|µšššS§NÁÿôéÓÉ“'„Õ²E%%%ß¼y“ššŠÿMàfggWTT`VTT¤¢¢…¾¾¾@‡Ž‡ŽŽKðh©ìììðZFåååçÏŸ777a˜2š››áΓ&MÛPVV& …À©îóúõë¡ÐÝÝ}8YOBBBŽŽŽÈ1Ç0¬±±±¾¾îS]]×r3¬  Ÿúùù¡asøða ¼m~ùò¥»»;¨‚‚ñèííÍÈÈ€â»wïÀ?jmm­¬¬„R(”„„øúøñã‡)­¶zõj`‹ÀÆÇÇûúú‚xxd4-//V}:øjPYnnnGGǦ¦&¼+ÐÚÚZQQ?)88HVV–ÝOž}:žŒ Þ¼y³|ùr|~ˆ¯¯¯èÕ‡††~éo Mšõë׳É@˜Èâe‡††‚Œ&//¯¯¯ïpžøôéS Oµ²²B“xqqñ´iÓXx£ß¼y³jÕª3ÂòåËûûû‘b,¸½›6mš0a•+W¾ºƒ‘ oÞýû÷A°g ù---zzzðb1 [³f··7´µ‘‘p‚ }}}ð];ÅÅÅøÁ•ÿý÷ß™3g²!`Fj:Ë—/ ß_OO/øYTVV„qãÆa¦¤¤¤¤¤„–hlŠ_dŒ3}…OOOO@@€ÅäÄÇÇÃ;Y¶l‹f~5fff†’nß¼ycmmÍÒÌÍ͉D"‰DúбóóQ]]Ýßß«:Ô¬/^œ>}ú÷üRÝþ@ôÕ«Wsrrrpp<{ö _ÎÇÇöæÝ»w=ruuýörXðSbcc_¼xaeeÅþ+7nÜ€™ðuëÖª¹‰‰ ~n‚!qîÜ9––|yll,™LvuuMNN¾yó&Ð߸qÃÞÞ¤¹ Âw$ÿ/,,,((€ ¦¥¥={ö ïï888xyyÁã>|ø>ãþýû7lØÀ æîî¾sçNpùAåp 455W®\ 7lii5øòåËÍèóçÏýýýUð0áââÂ<4ÍÝÝyúCÁØØÉÇÆÆBóêÕ«ŠŠŠFFFøåȾ}ûìììA.[¶ÌÍÍH$.Y²úqccãÎ;]]€`[ç IDAT]?}ú´}ûöo±:qîÜ9GGG°ñ‡ÆûÈ’’’LJWJ¥Ra%”ššš˜˜xðàA¼ÛþâÅ hëÐÐÐׯ_³È]#ܼyÓÙÙß`OFȶ¶¶¦igÁÅ‹ùøøðÚ£l<ÖC‡}6ðãÇûûûÙó@ÝÝݧOŸfGÀCOOÏÏÏþ~õêÕ7ð>"sæÌAöu÷îÝ,!àà`XG‚$(R`ú5ÚØØÈÂx}éÒ%`ŽÿŽÇY¾üýýûúúÀï766fY|CÔêÂ… NNNß—¤ÿ+MNSSSww7Lˆ±±±xeÌ¡€Ÿ‹ ètúŸþùï¿ÿjhh ]¬êêj''§“'ONœ8?)`6cÆŒíÛ·ËÈÈddd Èµ©©©µµµ˜˜Ø½{÷XLèëëƒD™LÊ{jkkkmm… æææ²ÖdeeV¯^ q°73fÌX¼x1‹›–››«®®µœœœ¡~’€€ÀÒ¥KÁ‘áä±cÇ¢Ô爈ˆ¯X›çääL›6 kHd“ ÄÄÄÄÄÄà︸¸ºº:OOOƒamm3ûöíÓÒÒ222¸Ä9uêÔ¬Y³ð•>~ü¸ŠŠ ^ó—{xxÀb 'NeA^^žšš¼%–×ËÍÍm``‘¼¼+R>kÖ¬A3ãð9ÒYÀÍÍ ¯öB:::ÂÂÂ`J¥P(ÝÝݲ²²øMÄáy|(Ö4oÞ¼anG e\‰D¢¥¥å Qu<–.]zôèQð!~Pؽ{7¼«oyíqqq°Ç6Ìë?|øéš«V­Šˆˆ””\¸pahhèoÊ©såÊ++«Ï6ë…%K–øùù zJ´²²òÀçΦ„Ò/jr***ð)aå€ÕF{{ûŠ+<<<$%%ÑŽQvvöÍ›7ñ¢èß ***ß8hÏŸ??nÜ8Xå G… ­¬¬\]]ñr à TÞ½{—%M¼µµu` Æ…BaYKíܹ¥ê9;;ëéé͘1ÃÃÃUÖÂÂÂÍÍe›çÛ1vìØ¯0TxÔÔÔìØ±¿Á£££ƒö½ÃÂÂòòò@jøX½zõÙ³gYÆ!Rnþ:444ÈÊÊgb*++SPPÀç†}>|H¡PØK¶‘“4:::Øtuuýì]yû³‡ÜrËÏókï³×^k¯ñ]ïû##câĉ,KLL ¼àTTTœá™ºººà¸ñêÕ«—/_:;;¯]»}Ö-[¶8p@LL ™ÔDEEGŽ),,Œ7€ðóó+++Ã’?!!aáÂ…<<<>|À0LZZúï¿ÿ†ª««Ã±óÔ©S[ZZ ÑÄÄ õ½ˆ]»vmKK †a )ÙÑѱtéÒ„„999ÈE[[ûþýûBBB¨uÉÈȈ‹‹ƒ²Üž={nݺwGØÚƒÁhjj"dšSww7²*tvv‚Û›˜˜Z=ôØØÛ0‹Å‚Í(aÐA¦E¼D…Ba0ìm5QÔqÀ*0bÄhKMMMhYНaƒÑÖÖ†?lë±z ùrþ¬466JKK£^ChëîîîèèÀ×0{oíììäââ‚6L"‘øøøz$l&4'h½½IÄþXà%Úùâk¸»»–8h<$4'Ÿu0Ah#ŒK콕Éd¶´´HKK£ŽƒÖ’’’?\¢­]???!öXHHˆÝÌ*&&F0â·–½¹mpqq±ÉðññáÛ#©¸¨¨({bןî×.——0* ˆËðƒ>{IÏa/777;%???{"aKÑ'Øk˜½¯òòò2Â8=~VÔ'ûÌñß¶?`·TrÄ·%žÞr!4'öùµ·†Ä^Ã\\\ßUBõö؆{,ió“ðV=Vïw}VΕÌÞU mž½·â«—Ë$¡ ƒ0ÓôB¾øæããc¯[öòööYÿC°op Ÿ•››Ú‡Žó1̱6Œa cÃ$ O9ÃÆ0†1ŒAB¯z9¿ÚöðßLᢢ¢CI¢ Øe†Ògb2™BBBC¬áñññ ¥ÀÄkupR;dTAapø] qDýÄ)§¡¡ÁÇÇg(M­t:ÝÇÇg(M9t:=,,lÀ¾³¿ìÊ ==}( gL&È܆ º»»‡ØàÐÝÝýðáÃ!68”——ÿ¨ÁA^^¹±ý¬)gĈà±64kfffCI¢ ï±6ÀÙcíwÁcm€à±64€÷X%"x¬ýûf<,Ñ6Œa cÃø-ч“4„kà—Ò$ Â;$$$CgSSØûdee{óî­¬¬TPP×{<¥.š©TjKK >F¬³³Â;ðÁ‰†577óññáÝ.ëëë!bF^^¾ÿ ÖÔÔ„§Ÿ"“Éo!**ÊîŸÚÜÜ ñ+222È´¶¶"9!’£²²K1zôh&“ ñ°~~~”)…Béèè@š¨†RRR}ú³VUUÉÉÉá]y0Xª««1 è"¡­­ÅbÁgE%à¿lMM´´4Þ{¾¢¢¢dð¡Ët:½¾¾O B¡P@ñADDä»(‹jkk¥¤¤ðŸÕðèÑ£ ›×KÊþYÛÚÚˆaÒÒÒ¢¢¢©ƒL (Óªª*yyy;‚oü¼¼ì´LH$:Ž÷Xí±-ÕÕÕuuua¦  €¯áòòòQ£FAI{kK]]]À"!,,ŒšS{{;”HJJ"ÿïþtXø¬ÊÊʽÙ½Õ0Ú=ôXXÀÈ‘#Á{›½ï@a!>‰Ô 8äK¥R”OHH‡È‚ ÛÒÒ‚ˆ_û¬ÞÁA?{+aC#((øÃ¹Eú˜rººº***ÒÓÓ###Al[[Ûßÿ š•kÖ¬Ù»wïˆ#®_¿ŽTAW­ZÅëPVV¶páÂÔÔTèí7n„23 –••E£Ñ¾}û–}÷î]D©M"‘‚‚‚*èáÇeddšššš››¯_¿nhhˆä«««ÏŸ?ÿùóg ÃìííçÎÛç¬ÓÝÝ]VVVTTtíÚ5xy˜áBCCAÜÐÄÄäøñãxWý††777¤ ºfÍQQѪª*[[[`®trrš9s&ßüùóEEEÁ–ÊÏÏŸ””ÔÒÒ2yòdO>~üø‡R(”ÊÊÊÄÄÄ·oß"%Ð/^ VVVxù5öNB¥Rׯ_ŽPqqñ–-[@ôîÝ»jjjÝÝÝIII  :nܸ+W®°‘­­­..."""{ÿàÁôÝkjj¼½½—.]ZYYI¡PvîÜéííÌ»%%%»víUP??? ƒQRRRYYikk‹ÈÉdrTTR=uêTÚtuuuggç¾}û®^½ŠbÐJKK÷îÝ »=“Mtww§¤¤ UPGGGeeåÎÎΰ°0PCŸõÞ½{žžžhsæÌ™U«V>}:%%»Þ»wOWW÷Û·o4ÍÔÔ4..°ˆÞ›Á`Ðéth{=¢½½½®®.00L&Á†a7nÜÚKKËuëÖA[²³³Cª ³fÍâçç/--¥ÓésçÎ-..†#îöövÄ“¯¥¥åççG¡P¢££‘*è™3gäååÛÚÚ>|Ú ëׯ߽{·””T}}½‹‹ ˆ¾XYY­\¹’½ÃB¦&&&070™Ìoß¾ë3ôV}B,é111GŽAõ³mÛ6<Ëν{÷QsºwïÞÂ… Ϩ¯]»6mÚ4^^Þ¯_¿‚ߣG~¿$ œª ¾¾¾ø|©Tj\\R½pá‚‚‚B{{û“'O@´tÅŠ–––ÒÒÒ®®®Ož|X[[‹'Öõðð°°°‘ùóç+))±#444@ËÆ‡þ½}ûöõë×£¯¯ïµk×ÑU777UUU¸jaa1bĈåË—:tÈÚÚ„„·mÛ¦©© ›¶ØØXB–¬¬,ü!??”Iñ¢¼6l·úúú;wîpÞ ØÛÛççç(½gΜYSSLÒÓ¦MËÏÏ///·³³ƒÜSRR:D`¡onnöóó BücÇîËÊÊJgggØi9;;gdd”––â{ôèÑÈÈHQQQƒ1jÔ¨êêêöövsss†?ÀÌËËKKKƒwxúôéåË—/¸ºº¦¦¦r\¹råëׯa±)''‡'ˆjÈ%==ÝÒÒ2"""!!!66ÃÃÃ?~|ìØ1 ÃöìÙÓ0NNN„ƒÌ?ÿü³¤¤„@5 Oc0ééé@AÛ’““š››×¬Yƒ&MšÒ {÷î•’’255=zôèÑ£GAdeæÌ™¾¾¾šššÇohh@tdhOFhK………oß¾…ÄÐÐÐ .ܾ};((¨¶¶üüüŽ9âä䤧§sÿÖ­[eddØuÕNœ8Q__¤ïèèX¼xñׯ_a΀ÞJ8J\²d >'ÀÚÚÖ•••NNN0©;::ÚÙÙpÆäÉ“CCCA*0++KDD„J¥jjjâeì*æÎ[TTmººº  Šv´aaaP111666~~~QQQ999ø÷߇……¯Ï‰'zÓ d8;;øð_ ÃŽ;!&&Æd2•””ð‡4555~~~P¢ÄÄÄ£G Þ”£££“””oC222ˆòºŸ;/33³ÀÀ@Â<›˜;w‚@€ªªjRRÒ‡ðbõ&&&°Fhll¤Ñh`¢Ù³gÏž={`*F€ ¯¸¸˜D")++÷‡†VQQ1)));;ûèÑ£(¬…P@ …B8SRRêêê‚«ø¹ª°°°³³$Š!%++ ì~zzzh¿‚‰\OO/)))::/¥Œàëë+$$´iÓ&¥€EÖ~Ò¤IÀÄ…˜ÓúDHHH}}ýþýû C†a—.]Z²d hœ þ¤øùóg %“’’JJJ*--©D€A[[[III{{{?m&ÎÎΆ”l´µµóóóAÌqÝ#+“ššÔsuu5~º™úúú¦¦¦È^w*++£ílii)$jjjÂÈ"~„ŒÐ¾ßÂÂ"//C–,Y²dÉ’;wîàmqH‡©¼¼\\\œ$,6:/)((8~üxx=77·ööö¯_¿¶¶¶þKrFàEÅ«ððð eœŠŠJRRÒÇ j­ÍÍÍðV²²²½]Ÿ?~õêÕ°D¥‚‚2™¬¦¦Æ]]Ýììl~~~:ŽÖæÿ-ÆŽëííÝÑÑQTTÔØØˆö—04UTTÌ›7+++¡TTTþ[½à‚#¬'@èóçÏ ƒÐ¤UTTsæÌ;w*++=:((¨f×®]Ûñ½ÿçÏŸ§R©=ê~‚=\UU,ÿñ”óâÅ‹ŠŠ atrrzòä gÝ‘ÌÌLGGGöóê®®.sss‚Á¤ÇÑ000——·?#ÁæÏŸ¯©©ÉnXKJJ‚?øøø¸/©©©‰‰‰P@___///¼aÍÇÇGUU(-,,äää€ÇÚÏÏÏÇÇGKKkúôé&LPWWG»ƪ­­G╹¹¹ŽçÞç(œ·8½aÅŠÃZŸ5ÌÇÇ·oß>D‘‹·kÍš5«O=ÝÔÔTggçþ8N›6-::úéÓ§®®®ì†µ’’D,8nܸ޸¶¶mÛÖ›a­¶¶öâŋȰvêÔ)x«¼¼¼9sæDGG£ÏºiÓ&T½666/^¼Ø±cÇéÓ§>ðåË—«©©qF£P(`kØáÁƒLLLú³tÃCTTµ¥üüü}ûö!Žç)S¦DGG‡††:;;÷F|èÐ!ì YYYÈîm``Ðã‰wggç¦M›8vÖ¬Yè­¼½½ïÞ½ËNîââ²`Á‚3fàa¯3yòd]]ÝQ£F­_¿þ?1¬õ ]]Ýèè蘘{{{???ß Q¹¹¹ùùùÙÚÚîÞ½­S÷íÛ'++»jÕª_pÊ c7¬¡-]tttbb¢Ý Ö~Ž?¾uëÖ‚‚‚‚‚*•š°bÅ ¼cgÔÕÕ…„„pssïß¿Ÿó_¾|QRRâ¼wwwqqñÞ¦œáÊ•+•—¤¤$###<óqwwwzz:‰ûÿ qqqoÞ¼Ù¿ÿëׯ¿~ýJ¥RËÊÊzÔ…ì ‰‰‰^^^Ož<ázÖÒÒR^^Þ£y áíÛ·hbeeõég̘×5Á0¬¬¬ŒÅb!‡@NNÎÈ‘#V²¸¸øñãdzfÍ€Œ:NOKK#´¥ÖÖÖÒÒÒ~n¹> KuÐE ÉÊÊBÖ˜9YÕ××744 ­ðñãGuuõò&H$RAA;ƒòÂ… CSqq±€€ÀÑúIHJJš:ujƒ0™LÎÊʘØù¯2åLŸ>IÄ“ÉäÇ/^¼˜———ÅbÅÅÅõÙÙRRR>þÜ͆«W¯îرƒý§OŸZ(èîÝ»SSSñ„ööö½{÷‚3R¶ð ñ󠤤ÄËË gBoff&L9999’’’}÷víÚ•‘‘A`ïqYpëÖ­§OŸr¸ÇÜÜ|ÐBACBBº»» î®®®¦¦¦ý‰ƒf2™ñññöGzøð¡²²òÂ… ðÛŽŽ ‚Jznn®³³3Á+¤GäääHHHàÏZð¨FJJÊ‹/zsÀ0,;;[ZZðçŸ^¸paÀÛƒ†’’’3gÎÄÄÄôyç£G”””~÷aaa‘žžÞãÙaUUÕ‰'5è—˜rTTT¾}û†ì'à1©££ÓØØ‰ŠŠŠ`CKII7nr Å0l„ ÞÞÞp°Ï`0öíÛÇ¿œQYY‰²ÓÐÐèm<244,--…;uuu¼n’——WTT„ç´µµu®°°ÅbiiiéèèÔÖÖÂUè<Ó§OÏÏÏw&0ý/Z´èõë×üüü, Œoüüü³gÏFOæl»þüyWW×€c¼—/_ÁÅÅE£Ñ@!JTTÔÀÀroll„ÃÛšššêêj¼ÝÌÍÍB¡ SÀ½{÷ôõõû³3‹ŠŠ‚¥1á¨AVVVUUÞ¡¾¾ï¤÷½X°`Á›7oÀS²£Óé¯^½Z¼x±°°ð”)S —¦¦&()á³Âɇ¦¦fnn.$ŠŠŠÂy»jrãÆã lF§Ó---ññ1ß‹ììlÔ¶'Ož¬¨¨8uêÔÂÂB£Ñ××ïí‰ÏØØ~ÛÞÞmIZZZCCkjjà”t̘1555ÈÍÍ ‹˜>´µµÁªbÔ¨Qýtâååå¬6¦¨¨8räHÈ«³³¶;ùùù<<<0PܹsgÚ´iÓ¦MC?™9sfNNØvŒŒŒ  -Y²äåË—¼¼¼ céÒ¥ƒ6/]º4**Ї‡‡N§ƒ¯…BIII111‘””ÔÖÖFu;eʨºüü|Hìîî‡ mmíªª*H9r䀕-ZôêÕ+š ïÐh´7oÞ,\¸PTTT__^¾¡¡áÇš‚ú;åÈÉÉá ¯ÆÆÆ, DW¬X‹Á­[·þý÷ßà¶´ÿ~ØÚ§¦¦Ž9t¶|ùr´æââZ½z5{vÒÒÒÆÆÆè_eeeäµxñb4åüñÇø®rôèQwww¸óÌ™3ý “À/Tõõõ™L&¬ÔæÌ™³eË ÃŠŠŠ`ÊÙ¼yó?ÿü¹ìÝ»×ÀÀÃ0kkkgggÒ¾xñ"¼Õ7Ž;Îï°stt?Qeeeü¹¨‚‚¾‚9Ø'/^Œ­¸{÷îÞ½{¬|Ìääälmma1;vìXxÚÚÚŒŒ (`ܸqxÕp}}}‚Ý `bb‚ŸÔW¬X›øùùÑ”#**Š_ÅO˜0aÛ¶mð>S§NÒ~ÂØØo5½~ýúÉ“'!.N»»»cbb/^,++{öìYpšÐÐЀƒ===&“ Ûå9sæ€5iÅŠ, ¾¦™™4¼xyyA¢µµ5~£¹dɼ'$77÷w™é544ð•6qâĘ˜Ô¶•””Ož>¾R"à]ý¹SNWWWvvöPšo˜LfvvöPRa"‘H_¿~Ås÷þ©áççJߨ©©©µµu(u%*•J£Ñ†Øà@£ÑòòòðQt¿;Z[[¿}û†ç´þ7àããû|ؼ½ Ðßå1õëïo0 '¡Q"ðqìêêBEC`—Ãb±h4ÚixÜÜÜL&“Á` ™qqqqqq ÉÁL&÷?Dý ?ä3ñððüØA¦çZú7a¿$$$222þøã¡ä±V]]­©©9ì±ö+÷üšššîîî!Ó•Àc­¨¨h( âââ999ºººCÉc­¹¹yXtÃÆ0†ñÿ}ì%‹ŠŠ’““wî܉RRRRÂÃÃ1 ›?>"˜ bÚ­[·ö&TãààpìØ1ˆX<}ú4Ða&)) ì³ÕÕÕ'¨¡¡±gÏ Ã>þ a§cccˆ ŽŠŠÃuëÖáÙ2îܹ3þü£{CMMMpp0^íË—/?Æ0lêÔ©ìñªaaaõifftawïÞ-**B7X[[ËÈÈ\¾|i òòò…b{{;ü!//ŽYYYÙÙÙˆê?!!tê/^ÜÎG—]»váoÇEXXq™ÔÕÕAœ ªªjoœuoÞ¼¡Ñh¿1z€;vÀþÃËË«¬¬ ð'NÀëÒ¥K@ê k" œhmm…Ð9EEE¼ÂÕð•+WÜn ¤¢¢bii‰aXnn.RÀÃ0lÆŒ+W®Œ‹‹…4ÀÚµk!pÏÏÏÎ*öíÛ‡§©‡L?vmƒqæÌ ÃÄÄÄΞ=ÛgRRRš››Š€jxÓ¦MˆÍÇǨ3;†=þüŸþ Æ …‚%†.--ÅNêëëC0fRRD&.\¸E=#¶ãíÛ·s`E»pá‚]o‡‘‘‘ˆ²uÀœ9sðܨãÌÍÍ‘—»»ûÆÙIììì ¿ ãßàÖ­[«W¯fçA8sæ b»'tÀرc¿+^ûßîrÊÊʬ¬¬Îž=‹Øa1 KMM?~üøñã?~üøêÕ+˜oJKK!188¸Ç£ÅË—/{zz‚Â.†aãÿeee˜TjkkoÞ¼ ‰T*BÊKJJ>~üˆn†.***;;R¢££?|ø€aØýû÷­¬¬\]] be‚›§OŸÆÓRegg‡††ÂÃKJJŒUaaaÅÅÅp5,,ìË—/†=½aDD„Äkjj¢Ä{÷îaÖÙÙyùòeH‹zåääœ?>..þMLLLJJ‚;ÓÒÒ@½±7\¿~ÝÊÊêæÍ›x•_kkkT½0倞)$2Œƒºß¾}{ùò匌 øW^^áÝ»w0Íxzz2™LH¼~ý:°>?zôh̘1ã‰Dú믿 …ŸŸßÕÕðÂÂB++«sçÎ!ª‚þàÎ;VVVnnn ` °··G¯L øÏzíÚ5¸Äb±<==aV@eiiiIIIÁ0LFF%æææ‚柟_ss3$úúúB©—.]òòòBmU²œœ\$ðïß¿·²²²··G©0ßž={¢¢ÞÞÞ4 ÝÝÝ¡È.\°²²òòò¢Óéð[*•êïï^ÖX555oÞ¼A‰0Ä$'''$$@Êû÷ï¡•——Cb```b?/^$dJ¡PÎ;‡–/VVVgΜÁs‡—””dddz+¾9¥¥¥?ôÍ›7­¬¬ÜÝÝÙ5Nž< g†———••Õ7ê‚°$õññ!$òóó£oÄËËÛ§ÉÞ刊Šæååá—ð………mmm ›áääôåË—ùóç¿{÷NKK vB;w¨ (ÁØÛÛ+++ãiAz’L&ÛÙÙAwmmmMNN†Y÷Í›7žžž°ÑQWWÇï±0 SVV3f ¬¸>\RR2yòd AAAü2ªOVVVVVV¢Äòòò²²2¦}}}ÓÓÓñ÷ïß«ªªÂûXXX”——Oœ8qº8::¢…?,01 ;rä(tuuEFF‚#ˆ€îC^^Þ“'OÔÕÕ{|^^ˆ=Ã0—§!`„ òòò„Æáçç‡/¸xñb{{ûÛ·oaÛ‘’’âììLØè$$$$%%á¿S¦LUÿƒV¯^ ´(/_¾´µµò%##£ýû÷IÉ–-[@6íu¦OŸ|0YYYVVVVVVââↆ†üüüßåe§©©)""B  Ä‹\»v ]êè舋‹ɉôôtKKËQ£FA}¦¥¥UTTÀê{âĉP¨ccc vzûö-¢õ\¾|yCCp‘]¼xqôèÑøõþãÇaÝP[[»hÑ"ºDÒÒÒ†††x…M ÃF¥¥¥ä{÷î-++›4iRll,^t×®]#GŽœ4i…BA¢à!!!B¿€í!1??¿££²³³çÍ›—ššª§§¬?[·n­¬¬‘7<&MšD&“ñ¬ÝÝÝOžþ\\\ü½522òÎ;`Xëód;11ñõë×›6mš0aû”“™™9kÖ,tö8}útnnn°¢SØiÁ7…ãz42®\¹2++ ØvûƒG¡­À‘#GÛ±±±§OŸ†ÖËjü”óîÝ;¨öôôtüi\eeeSSA#.//OZZ¹œddd ÚOKK‹ŽŽ{ŽŠŠ‚õcmmíÀÖƒ>À|›Wh`:ƒN$--CCCñ{w@<n~úôi]]ØÜઋ‹ êtxÐétÏ„ýzooö{>~ü¸`Á¼[X¼xñòåË9Ëý c`8|øð¼yó–/_ÎaFommÍÍÍÕÿ~Êù^¤¤¤|øð )ÍÍÍæææOž<é-U\\/AAA˜r’““?~üˆ”Æþþþ¦¦¦ßû2Èû¢O1±ÁAkkkxx8®Ô×××××ß¼yï;78¨ªª †é¼¬¬ŒÉdŽ;–U0RÑ@¾p»víºyó&þ³¶µµÙØØpPëâðpäIðû¯œœœ‘‘m¸¥¥Ú0^Å``xôèQKKËúõë{ß9£££ãرcÀ<ß‚LlméÒ¥è³ö(ÞÕ¤¦¦¾{÷ï8ÄÇÇWWWûùù±X¬îîîmÛ¶äó0~Þ¼ySVVfj:¾yófÿA~‡Ÿ;å\¿~yReffîÛ·6t cÛ¶mxèòòòëׯÃI;B}}=ûZ©¤¤„°™è¿eó'…‚ÚÚÚZXX¨««ãÍÌÌ=zÄ!¤yܸqÈs7%%%55u`‘ÿÞà‹F½àà`*•ŠÌhžžžãÇÇ;/œ={ÖÌÌŒ­™˜˜ˆüšÐ–ï`ÝŒ;ö'…‚&''øðáÈ‘#øÄþùGXX˜³ì««+rÿôéÓ¾}û~È’¥¨¨HYYyó ‰‰‰ì+˜ÌÌ̽L?å«9£®®Ž³èíÍ›7'Mš„ô{Ûù!ŦÄÄDü¦yÿ÷îÝC„ioß¾e_à–••yyy999ý*SÎ’%KÚÛÛa/bll '„¸sç$nܸ–K§NÚ±cþ „ŸŸêÔ©°¡c±Xiiix³‰¬¬¬±±1$ÚH$RCCÞÄÑÐÐÇ'òòòÈ&[QQ®ßªªª°1/..VPPÀKUfgg7Vý,ëË—/„‚Q(”üü|èÃH±¹¹Œû#GŽDCCuu5œ·=/Y\\,//Ï.ßËA¢B¡”——ƒ¯*Z-–––b&##ƒ/ÄúÀkee%øøŽ3©)**â óŽŽÞ$ÝÝÝ s!!!‚ÛEkkkkk+øãÂöTº{Ô &H´åææjhhàWߟ>}Â0Œ‡‡i>vuuA†¨¨(¨42……*“ÉÄVaaa| cVXXÜMãLJ|(,ƒÁàââB‹ ;TBaÛÚÚZZZð™8Þ°×pvvvww7†aÀcÄ`0rssÁù •TDDÍ1ì…Å0¬¦¦†›››PÃ¥¥¥pX¥©©IhK„6 » >>>BT€ ÑÖÐÐ@£ÑP®ªªÂGá;Ƈ7ßšjK‚‚‚ÈÅ™D"ÁÉŸ””{[RPP@nåååS¥¦¦ÆAµ)A¢L&WVVâgqÔ[eeea¾Ä×pyy¹¨¨(>`PPP ¢¢‚ÚBffæ 0ë y‰¶ÂÂÂQ£F±›‚QõÒéôüü|hÃìãá—hVý-1¬ úëcXô·À°*hŸÍxXtÃÆ0†ñ[bxÊÆ0†1Œa zvàááÁó— ƒì ‡˜*¨ˆˆÈùLði‡X‰øøø†RW"“ÉÜÜÜC©DЕÄÄÄØ“~ë†',,üC>òØü‰SNcc# Ò Óé„8†ßT*5""b(EÌuwwsqqAHÖЃÁ`0C©+±X,ĺ;dÐÕÕõèÑ£¡$GK£Ñ*++Ôà ''÷OX{žr$%%QHù€„„Ä;wV­Z5dZ•ˆˆHTT”¶¶6…å÷…  à§OŸ¸¹¹ñÞ2¿5øøøêêêòòòÀuhl¸¹¹CBBËÀ€¸¸¸ŸŸßâÅ‹‡Œû€°°ðëׯUTTØ ÖŒY,;õžr¸¸¸~‘ý( ??ÿ™r¸¸¸xyy‡Ìgâçççáááææ2%âãããååJ%µ¡78@‰†L¡¸¹¹Ôàk?ðõxûÜG3™LÖZSSî†ÂÂÂ'N@âÁƒ·mÛ†aXDDDBB$ª««ƒ\ÇÕ«WGŒ‰>| gúùùUý´u***´µµ×¬YƒO|ùòedd$z~ŒÀ0ìÂ… èÍ£££AmÓ¦M666hccÑן>}‚”œœˆînnn^ºt)$Þ¼yiRRR¼½½!qþüù NýøñãöövHììììô°aÃmmm K@PSS«¨¨¨ªªJNNú¬’’’ —d×2¡R©·o߯k•ž;wN[[~ ,Â6l8sæ $îÞ½ ;qâÄwïÞUUU•––%~cc£©©)Üæêꊦyóæ¡o„×Uã€hkkãç æL™ Ï&„òòò]»vÁ¥³gÏÅKLLLDD$ÀhxäÈH)..¶°°+„¥¥åêÕ«!ÝÅÅò511yøð!$Κ5 x !åÅ‹ˆ³G„‡‡kkk4•µ´´à qqq‘‘‘†mÙ²åØ±cxøðaP¤ž;w®¶¶6ÁkHVVÕ$|###ø·¬¬ÌÃñ¬îÙ³Ý óÐ¥K—¦OŸ)OŸ>Er´x˜˜˜hkkã§s‰„èBJJJ´µµÙµ Ö¬Yƒò"P˜ÛÙÙéé顾BòkÖ¬¹pá$nß¾hM¦OŸ®­­ ëËÁ„––V~~~UU }øKYYYè=wìØFE333T^Ÿ¹té’ŠŠ ¤ÄÇÇ#¬ÿÚÚÚ 8‹Gnn.¼aII û–(-- äû~zݺêëë—––ÆÇÇãù€…„„xxxÐäÑ'4{ó „AuxHss3O¥Ç…|{{û† €}DDD„ÉdÂÏùøøÐ¡_[[$JIIõ¦ÖŽÇèÑ£KKK³³³ñÜ·ð:Nà¥ÓépîD—ZZZº»»Ÿ?Nبjii777·””ü¶½½ö ºtvvrqqq®dP= ÐdÉÊÊ+‰Dê³zÑ„]SSsêÔ)´¾ë­°=r¦|aI$b¢R©Øgèû÷ïc¶lÙ2|¢´´4’.&pvqssKHH@.x^dhH+V¬ |VuuõÍ›7c&..ÞÕÕ?á`Û),,„%!hêp(ÂÚµk×®]{çμDR?#‘Hüüüªä«UTTKQxI^^^B[Љ‰‰ŽŽ†zƒÅ;Ü)** m ©Ú´·· ö˜5huãù¸¸¸P1544JKK?~üÁø†¼„……Ùy§ Ç®®®7n@¦RRRð °äWSÝÑÑQKK ^8&&Ì/÷îÝ €ÏJ?€M›6¥¤¤|üøø—ššš¶nÝ ¿½|ù²™™†aS§NEßhÆŒ£% ©© }& í ,†GvxUUUGŽKÇGvrrr~~>ðrâ?«››ÛÈ‘#a‹ƒa˜Í²eËàç·nÝb7Jà盼¼¼ƒx¾ijjrtt466&ìáú„¸¸8ªÉk×®áEQ#""ú8jrÙÙÙ4 i766^ºtiõêÕ0bÖÔÔ jïÍ¢ÕÑÑÁ™,nÑ¢E(¯Q£F±NoÞ¼9þüìììgÏž‚õÎ;mllà'–––èœì·ÀÊ•+QyÅÄÄÐâæÇ›7oÐà‰gK£Óéiii·nÝâÌ>Ø»œïÅÖ­[Oœ8A¥R ètzqq±””To~JZZZ?~„JñôôDû*ü Ôªªª$%%9ïm·nÝ ç±RRRp ó£p÷îÝ䆖––‡ ïÛ·oš`dddrr²­­mAAACCCWWWSSK²Ø žy Ã8–’ÉäææfÎTƒ~~~_¾|¿/_¾Œô¡ÿ=æÏŸÿcm¹¹¹‡îñ ¤?hhhpww722@Œ ƒÁ(--ElëœwQ4°n­««»víÚ¢E‹É寿þB¸þþþH#õ»@"‘:::8(~þùçŸ}j¢ÿFhoo'“ÉýÑðþ¥P\\¬ªªÊîVUUuèС€€€‚‚‚òòr  ÿ!Ä ƒ:åhhh ¨ÖÖV++«ØØØ'†®®®ÊÊÊþô¢ò<ìVK<’““Óg177wüøñÈ100°©© Ü6$%%KJJ`;ÕÐÐÀd2'Mš´}ûöo.--9räÀÌÖïß¿¿uëÖÓ§O9ÜsìØ±Ád’®««ãææX8í¼yóà”n`pwwWVV˜_‰DZ¶lYAAûF¤©© êüõëW‚óØÕ«Wõôôð¦<ðú—xýúõ‹/ û›"***55õ‡kAýl,[¶,==]û•ŸŸ_\\Æ2™\WWçææ†¶ËÿÙ”####((ˆÜ‡`†5j…BD)))(Laa¡¢¢¢úí„ ž={£•žžÜO"‘`PWWgoo'ùuuuà†$%%%..w"­EEÅ––HDòêêê 8jÔ¨~ú5ô8þJIIÁsÈd2èåÔÔÔ€ TYY¹«« ®JJJBIÇŽ[]] ‰ªªªˆ©iùòåYYYè\‡——wܸqp[mm-hœˆ‰‰ÉÉÉAb[[:­­««C•¬¬¬ü½6n===Ø/’ÉdÐËTUU…gVWWƒsdkkkKKËâÅ‹ÑèãææF¡P`¾5j8‘ã?«§§çÔ©Sá=ÕÕÕáxÒ¤IYYY‚‚‚L&äxyyµ´´Pv —#...++Ë^Ø@WW777,{#ƒÁÈÎΞ4i??¿ºº:ä‚Ô\ðŸ¯Açëë+""‚7rªªª677ÃH¡g„ _¿~mkkÃ0L[[…e oÄÏÏ?€mnEEz‚ššš”””¦¦fMM {["€‡‡g„ p[]]ÒËNü¤.++‹rÁ+•••¡¬5448Hæà3EÚK=ß[©T*,«««¹¹¹åååGÝÙÙ W¥¥¥!G---ÄËB||üñÇ™™™¼¼¼4 |óh4Zaa¡ŽŽŽ°°°²²2¼|CCèÿJKK‹ˆˆ@"ƒÁ€S[ü!..>àÓÊŸ‡‰'fgg ±X,è;t:=77wâĉ`íÄ0,==ÝÁÁágÌ7}O9x}­eË–1™L°t™™™þàÁƒxæÌò»ÿþöíÛñ+V4þ>þôx¤¤¤@¶REEåüùó‡†oë2cccƒO^µjÌÀæææ÷ï߇ÄcÇŽíåâÅ‹çÎ WWW‚&4 ã‹éÓ§£—.] B­ŸaffvàÀOOO¸zêÔ)pprr²±±s“——:Ž344Äï^tœ¿ÇŒ–ÃI“&íÞ½ÜIá4E^^¾²²™wïÞMðäîqŽÁO/^¼€X 111€”””þúë/9ÕÑѹzõ*ìÃð.JJJ(dçàÁƒ7oÞ„×°µµ Tggç“'O‚·7XQ‚‚‚Ö¯_ßÙÙÉÍÍýüùsø¬·oß×;55µ›7oÂKš››ÃçÍ›N¥ý„¶¶6ÞÍìŸþÙ²e ¸@ŽT*ÕÑÑÑßß_AAÁÙÙyïÞ½0U@·™6mú¬K–,fa˜³³³spp€/ øÎ;àjŒaØ“'O@íjòäÉè9òÁƒœ‹@°ÀŒ3&88VÐqfΜyåʕӧOãnݺ…¦FhNÈ"-&&vÿþ}pÞ=z4r£—””DÓ:o@vÛ¶m0¹ª©©=þ|Ò0 ³··ïMŸ©ˆˆHPPþª¨¨(Þ½bΜ9(/SSSøqqqëׯ?|ø°»»;\={ö,Xe¯_¿~üøq8y½{÷.~i…7Û"""LMM»»»A­µµµÕÍÍíîÝ»ššš666LJ:ï’  Fµ~ýzhí{÷îõöö†Dkkë_A*IGGo– ܰaCGG¸Þtvv:;;C\j`?ÏØ0,Ñö[bX¢í×ǰDÛoa‰¶>›ñ°DÛ0†1Œa ã·Äð”3Œa cÃ$ôÊ$=°PÊ_|||Cưáåå2Ÿ νxxx†L‰àä’››{È”ˆ‹‹‹Éd±Áaèu¥["ð§øéSFÃú °X¬ŠŠŠ¡¤ÂŽŒ?¶5ü·hjjJ ¯¶¶–L&¥uuuÑéô!68twwWUU %E†ŽŽ  úQ@^$ß%ÆÑãxÛó”C¥RRph€ŸŸ¸‡Ì”ÃËËK¥R«««ÕØØå@,áK¾ûc{)™Lîèè2] ºOww÷Pøøø FYYÙOâêÿO …RSSC Yp3–@±k@kÙŸNZ^^Žw¹ìcÊ2R††IHH̘1cˆy¬éêê{¬ýÊcx¬ ™®k555Cip///722öXë­ƒÇ~Sˆt48 55µG†åa÷a cÃÆ`mÂúÜ}þü£óåË—7oÞ`fdd„µâããAhéÒ¥ÒšþùÏ ½ÿ~d ¤R©~~~H|¢¡¡ÁßßðQ£Fá‰@rrrŒ ï/''‹âçÏŸã7û›7ofçåî¯_¿ÆÇŸ›®®.;'æ›7o€lñâÅHà(88â·lÙ‚ØÉ|||ººº¸¸¸Pàagg'QÊÈÈ@-ÔpXX†aZZZ‹-‚ÄOŸ>%&&b6}úôþxÁûùù™ššâ‰l=<²¹¹ùåË—@šYQQvmmm“~6Óààà3fà£)ïÞ½K&“1 ;t赯¥¥âÚ×­[‰ÅÅÅø†ÿ¬ééééé醣Ðú¨¨¨ââb ÃÖ®]‹{ýüü òtïÞ½uË`0€ÉQDDÄ¢Ï"|ùò¥­­mÖ¬Y(åíÛ·@ºhÑ"---H Ù333d͸sçˆJ>|Õ0‰D ÅS¡;v,b”ÈÌÌ„¨rôYQo¬\¹²7&ooo ‹ÞêêêQ £ŽÐ××GTë€×¯_çää`¶lÙ2¬ýôéÓÚÚZ öoß Ðqà*??ÿþýûm4¼uëƒÁàãムi;w.QÇH(áÇCˆÍWVVî3}€–ºÞ.TWW»¸¸899Á8…ºÍ‹/H$‰DЇî—žž‰!!!;¯§§ç·oßHÿ’‹îîîvvvvvvFâƒàžüü| I/((pqq¹rå ÐEæ¼íïïÿùóg”Kĺ[[[]\\®^½Šgå).. …‡¤§§Hß¼y“––WÃÂÂŠŠŠ`.((€Äû÷ïÃÀäååÕÐÐ@"‘ÚÛÛÝÜÜ0 £P(^^^p[YY%TTT1‰D⬤‰âââboo1šÎëêêà9À/ŽÐÖÖv÷î]¸TXXÃÄׯ_CBBŸ5===>>_¼x+‰çÏŸ£†ôøñc˜\>|XQQ‰7oÞ— WWWH©­­åL©ž““ãââò×_–šoRSSá ááá ¾ŒÚ’¯¯/Ôy{{×××ã ÛÕÕåâââììŒ'øª¬¬ô÷÷‡Û>}ú£ffæË—/!1..¸;###SRRЇèÑ.ïãããââráÂD,M¥Rѧlnn†¾ƒ×àÈÉÉA™ÐŠ`¾yÿþ=\ q°€€€ââbH¼sçœ= '´´´Øá~*<<þ¼aÃüªÔÛÛ»¶¶öСCxË0‹ÅºqãØÜ~e¼ÿ>**jÆŒ@öŸõùóç>|ÐÐÐà,ñ÷³Côááää$((ÈÅÅÕ£fÕÏÆ÷¹P(:.+++++ËÅÅÅAD áðáÃZZZð“+W®€•öÂ… HÄ>>>YYYaaa`íí¯^½! Ä[¶l144„\îÞ½‹ßH~¨T*•J…çðòò6ž¼¼¼pîD—nß¾ÝÕÕµsçNX>4551îÄ;È·´´¸»»;Ž7h4™L†ÛðÙ‰ˆˆÈÊʲX,dxí?à™#FŒhjjêóþÉ“'oذ~òîÝ;8«‹ŒŒTPP€˜)))YYÙ¶¶¶Þ|%;::¼½½ ³ººúž={ °t ¸ÕöV½°šikkƒK¢¢¢`ú|þüùùóçÓ§O‡qt¾áN:Ž7ô=zô¨±±ÑÌÌ xK›››%$$àÎææf´l„ŸKIIõ§’{DxxxQQ‘©©)Á À{{{IIIt.ø]Æ·%SSSccc(N`` Øôú³dÆʲCWWwÛ¶mðØ/_¾€•ÐÐÐââbYYY°¢ù¦««KVVÖÝÝÿ±ÎŸ?³×¯Œ>ÄÆÆ?ú«W¯Pº¨¨¨¬¬,F#XØÚÚŽ5JVVVFFæüùóƒÿß'^››ÛÚÚ ëJ''§?²Ÿê€?™×Ðа¶¶¾xñ¢¦¦æ®]»ð- ''gii †µ%[^½z•‘‘±dÉ:~;2þü5kÖ°KE:u  QQÑÞ꺴´ôëׯ°/ñõõMJJ‹J%''ã k¥¥¥°Šñòò¢Óéøãôà kÐyÚÛÛõôôŒcuuõçÏŸ‘a-..ídõõõõõõ/]º”™™I8†íÞÞÞxÃAN›&L@«ì«W¯fddtvvæåå-_¾œÀL £œ‘‘‘¹¹9Þƒ­K._¾}ŠŽŽ¾wïÞÑ£G“““ýýýátýîÝ»¹¹¹œ«£££«««««Ûã0:`xzz²X¬M›6qPÒ„55°Äãeƒ{DBBø° RSS ééé±±±·oß>zôè‡N·nÝ‚ƒ_ Ñh>LKK;zôè•+Wªªª®_¿çd}êw)((èþýqé'²³³CBBŒÑPÛ>|ØÚÚºnݺ>m³ÿò˜¡ÿó͹sçFmnn>€XŤ¤$¼— 000-- Ÿ¢¦¦†ª½7‘ž>‘™™‰'ÀgǬY³Ø7s+V¬àÜq~ehiiÌ-ááá#𯆳gÏÀpòŸír€gÏž­Y³¿nrwwƒ ™LŽŠŠ‚£‹ÖÖÖÈÈÈ>—ŠK—.E­eee***àHúæÍÎQ„Û¶mû¡ ±±±ÖÖÖ}údwuuEEEõGõ(??¿¢¢bÕªUƒÖŠŠŠ²²²ðkÖ¬A•™ŸŸ?vìXØÍÄÄĨ©©qxÚÿ±÷ÝaQ\_س•]`²ô" "*b"bE°aIl±w01»,`7hlQQšAE¤((Ò”^\aé [¾?Î÷»ß>þóø²Þ¼ySPP@Ø6KJJâóù#FŒ@%ŸšwÓ!Š‹‹ŸÇiòäÉÀ2‡aÌ{h4¡ÊÈÈ899ÁØSPP€­!C†üõ×_èÏašbddäää›çfffP¸zõj8‹€ûØÙÙQ(p9öööжNNNà{¤¤¤z²J˜8q"> 1oÞ<¼ð%ŒQ£F‘ÉdHF;v,¡?~Ä/ÓñvYIIÉÉÉ Æ$Kýû÷Ÿ5kt¨‘‘tñàÁƒI$Ps:” WJ˜» ƒÛ4 šŽƒ]OT'''===005466†xààÁƒÉd2X ôбcÇ’ÉdØÓýé§ŸÐÔÛÏÏïë3žÍ˜1ƒJ¥ŠD" …{ÃÒÒÒгòòò(T£¢¢2|øp0NNNh‡Âõæææd2¹¨¨f¥=IýÒðôôƒ˜:u*•JÅ›&)))˜‹°X,'''˜=+**‚¾s¯C¢ úCB¢ úýC¢ úC@¢ Úí0Æ«‚ ‚aÆõ„c-<<|Ê”)4M¢ *H Á·ÄåH Hð•Ðñ^…B=‰>À0LVV¶ÏÖ Ò---Ýgº ö¤¤¤úX °Ðg¾£ææf2™Ü—Œ NÞÍ IDATt“ŒŒÌgg‡ŸÆÉdöJ7‘Éäžùÿ¯.çãÇÀ‡Øg  ¬0?:jkkcbbú’$pCC™Lþ¶Lˆ½  ¨èKŸ’H$jhhècÆ¡©©éöíÛí“_~\ðx<.— ´Ëÿýúõëú\D/¸YYÙ/”®ðMÀb±üýýGŒÑgV9ÒÒÒ±±±è¸L€””TVV™LîÅÁýTê‡ :$ úAd2922²/YYÙaÆõ!j&“™ ¡¡Ñ!‹Ä§‚F£‘ÉdH9þ‚.‡B¡ccßd$+((ô¥Œ5Æb±úL71 &“I&“ûLh4ŸÏ§Ñh}¦F±Ö—úÃ06›M&“åååûRÆN—••í•n‚Œµ^t9’ô $@ ¾ÖZ¹ëË ¼k×®™˜˜˜˜˜œ8qîÚµ ñ"TŒ7$§0 ð{IÁþýûáxÂ%K–@!aOkذaˆ–˜Çã᫃ØQQ ãoΜ9ƒÖîîîÝj >¼‹ 2BøpíévîÜ —ÚÓéOŸ>¯ì0dÈ“ÎH]¿,,,LLL«Ïž=#È¿@õ‘··7¾ÚÓi}Ì™3oчÓa ¿yó.!öÏöÈÉɹÙàE#ñè”}àÅ‹ÎÎÎmmmxÞ:ÿÌÌLпóóó;}úôêÕ«÷ìÙ£©© …Û·o§P(ˆQaüøñ™™™ˆõÝÌÌ ´m>~ü8f̘øøø¼¼¼-[¶ÀMRRR–.]záÂ…;wîb±X  Ía`CxöìÙñãÇá†ÑÑÑ[¶lAvðܹs{÷îE~èÏ?ÿ¼víZCCC[2£G®¨¨À?´¾¾ÞÎÎ.55fööön·¥¥ÅÚÚ^"¥øzzzêééÁë¹»»S©T$Ë4cÆŒÄÄD4u2dHxx8“Élkk4h¨µ~ 4(::šF£5772)c–••5cÆŒ¶¶6ü¶\pppRRÔèòåË>>>7n\³f rK›7oîÉ‘É/‡E‹%$$ÔÕÕáeª««###ÁB6 Ö¯_5zþüùÏ?ÿŒhÝø|þÀÉzד“kO!Jí¢ÒÓÓ?~Œ·M|>_(¢-khЦ¦& ……­­­ÈþâýÍÙ³gñÜ‚555ˆ’FB¡°±±  (ÇÀÝ L&#E“(**V'²²²Ÿ´—®©©™žžžýÛo¿¡ÂÖÖÖÖÖV¸•J%´W‡5V0LçΘ˜iii‰$‹‘·¯¬¬tvv C ÇaÆ?žÉdBÌ’[ZZÄb1¡‘;ƒ¿¿¿P($HHÔÔÔÀƉD‚Y9¾y™L&A¾™ÂÂÂ7"×ÕÔÔD¥RáO|}}Á®Õ××3™L(„ÅàïåååÙl¶P(D•-//Ÿ?~HH^¾ŒF£}j¾Ã©S§Aô¶¶–Ífí“)ˆ;Ã%iii¨)zî­[·ŠŠŠ`•Ž6…B!ZC¬X±ÂÑÑÈ“AAA 2šx<Xa4†[[[»w“jooéÒ%¼àØ–-[H$$¶µµ¸5¾y¡y£££Åb1”L&Z²­­­¥¥ ét:Jl=þüû÷ïñ—;vìpwwïZV.**J$á—­b±­ðôôôÒÓÓÓÓÓñ²0è¬ñÃéäÉ“(ÓÒÑÑñ?þX¿~=¾såååeddø|~{}“/x.¨‚žkbb’žžžœœŒº ßÔÒÇaÈmÏÖ­['Mš„—>ùú8wîœP(K<:T‰D][ …Bé!Q‡{çÖàhXC„… p8‡#‹»µøÑÆd2 ojjâp8æææŸÁiÊçóÉd2!?xþüùðbøéIW!E2YVV–ðt‡éÓ§Ã}²²²PMüsssáêäÉ“Ô ¡¹¹YJJ ¥ùC}µµµW z´¥¥ÿD …-—²ï! ûžÐ¶¥¥¥jjjgĈ :Ð-ÚÚÚ€”P¾qãF‡.§ç‹ÅÍÍ̈́扉ÖÃ[À®Á`0dee C<--ÍÖÖn|VÚÚÚ—/_†K{öì!Áµµµ‰D"X`Ñét¨¯§§§Š7¶´´Ðh4ü¥¥¥¡[ ôôéÓO=î@¥Reee «::xÆ vvv]ðKÉÈÈ´ïâêêj¨c·a½ö= ‡ŸºîÐöG¾Øl6Z¿Â·C0†Â[u5]·n‡Ã‰EÍ‹ÿj¾ßí‡NêÛµ¢P(ŸúÕô.À8´w àp8íž‹½®^½šŸŸ_YYYYYI"‘º5‘mmmãÇ¿~ý:žWörLMM+++ccc{Hd  …Ý¡\„ÿý·ºº^ÌÝݽC;Ûú?´_‡áãÑááápSSS‚ÎîŸþ9`À¸zïÞ=´ƒa˜½½½¯¯/~禭­MOO¯°°¾vÐ?~ùòeû™ÅÝ»wCBBÎ;tÅŠêêêðé~†³[QQQYY™””ÔmóŠD¢Ë—/çççü+†aÛ¶m³¶¶®¬¬ ÁW¶[”——O›6àûÇÇår¡õÆסÀ¥@ @Ýsü1dÈØØX¸,+ñîvñâÅpéÏ?ÿÄ«À$&&¢È §={ö¨©©­X±‚L& ‚+VÌ™3§={7U¢££QâiYYôA-ð“ó–-[lll\]]?ÉæÊËËüøêø÷ßwÆá&‰ÎŸ?_^^Þá®dgÍŽ"iÔÕÕu-«›þ›cóæÍÖÖÖ„0Ìw‚7oÞTUUUVV¾{÷î›x/;¹˜4i’···ªªjCCƒX,nll„M¥R “ÓâèÑ£$iñâÅ I€pKKKg¢Èxß®¯¯¯¯¯ÿÅ---³²²`&[__?jÔ¨„„„†††¦¦&‘HËp¡P€v8«V­‚O·‡ëÈÿ‚[·n%''ÿñÇ ÈîÀ%ooooø$ðx¼qãÆÅÇÇ·¯l·¡í}ûöéÿwîÜù¢ommõööVTTDÓ—õë׃žcCCƒP(lnnFÂN¶¶¶¡¡¡øƒt:úèó6Z[[ÿøãKKK´ôI+Èž¿víZFF†‡‡êÙÎ&[nnn¨Ù‘<è§B tÝ¿GŽÁ[a— 6A„¶©© y»ÂÂÂÊÊJ wMSg³Š¯ƒ/»îc³Ù苪­­7nÜ«W¯ÐæÇç-Ïž= º±±188XIIiæÌ™Ë–-[¼xq×òÅÅÅ_è\„àñ‹h++«ÄÄDV‚çÂlN(644Ì;744411ñï¿ÿFyw(°#‰¾š†N¿ÿ>ì¨oPRRêyà«Ã®H$ÂWvÁ‚ÁÁÁOž<9uêT××wíÚõ…˜¤ÁàâÕNž{÷îÕÕÕussûŒ¿åñxÖÖÖÝÒ4HIIEDD@:êÙ+V´ÿ%MýGDDDÜ»w¯[áW‹…^†ÇãMŸ>0ÖÖÖÊÉÉý¸Gè`×ê»=å3dÈäää÷r¾G—†í‚ÂÌb±2 hë?²X,¼ òÀãããÁߨ¨¨Àïkjj@è…J¥²Ùl(lll„î…B¡Åb­]»víÚµhnii ÊHòòòMMMðK‹õÙ!TƒÁ`0à>mmmróYYÙkŠaØÜ¹swíÚE;TUUÁŽ4‰Dâp8PžŸŸ¿xñâÐÐPd Q{2™L99¹ÀÀÀ¼¼

    ßÉÉ EŸ|||š››Á ³Ùì¶¶6TYH@RPPhhh€Byyy«¨¨TWW†Ãá°ÙlTÙ7oÞ,_¾6Tètº´´4ü-ŸÏÿ/:ÓÊÊÊ\."o ß ‹«««UTT(м¼<<¥¾¾ífß»w/..ŽtÞØØˆ_NNÎÛÛ¥ö:99ÁƒÿýðáÚÛàp8$iìØ±ìËår‘@ß§ÎTÐÓååå ¾yåää:Û¤%‘HŠŠŠð³ÚÚZA¢Óé222PØÒÒ"''çêêŠVÞÞÞ$©CÓó™D×Ò· ƒN§Ã øÒ` ㇓ɔ’’Âç%9òêÕ«ÉéàààïïÏ`0ÚÚÚ¾¦6‡ŠŠJUUFkiiçB:LgËd2i4Ôì”ïÙ³ÇÄĤ[½ùoeeå>@ŽTS$q¹\eee …‚·_èÀ/µ[Œg®®®"‘ÈÞÞð_ýD…wìØ±wï^(>Ã0'NÀ=‡úÏ?ÿ`–pÿþ}///üªí3ÿþûïûöíƒ?9|ø0të¥K—/^üâÅ ÃBCCAüüùó_â}$m?$$mß?$m?$mÝc¼D[ccãСC{;mll”H´I Hðm q9H |%P;[AÛCL_@‚Û7êÂo~Ö¬7ç>d2üWR£ïyÔ¡C}Ï8ô¥nêÅQ(”.NÈõšË …_“jâK£¶¶V,óx¼>³—S[[ËçóúLðúúzƒÑ——ËmmmíK5jnn‰D}Ì8…ºººoˇֻhiiiOÛóÙèöÈc/¸œ†† ,ì#K9*U$%&&ö¥IY}}}FFFŸÑ•"“Éuuu$©ºººÏL6[[[ûاD"‘ZZZú˜qhmmMIIé3! …RSSÓÜÜŒçzÿ/=®¨¨Ø+™]¹6›2wû cmâĉ’Œµï’ŒµÂß@ÆZ_2±öÓO?I2Ö:ƱÖk“KL $@ ¾Î²²ëËUUUùùùxÉœ‚‚8@„×{ñâp¦Y[[#1@LL žÚ}úôé4M,Ãù5))©©S§Â¥ÚÚZ8ª¢¢‚¤ÛJKKá8˜âOÌÌÌÌÍÍÅ0lÈ!ºººP˜GîÇßs†|—––†¤;0 {÷î(‘èéé¡Ãç/_¾„åêðáÃÑ$âñãÇp,ÑÎÎ 0 ‹ˆˆ²2t¶¿¥¥È1Ùl6’ª¬¬„vZZZˆü-//˜IMMMŒŒº­ETTÔ¨Q£ð<èÀ?¢O¯««{ðà†aJJJúáââb<çÀ;ëÖGq¹\ Ã&Nœˆ¸‹ÂÃÃÛÚÚH$’¨hnn099¹ &@áû÷ï!&ƒ¯lOðøñc333|·Þ¹sÈfÍšEX¼Ö××/€¢¢"ZatØ­999 edaa¡¯¯…IIIååå†;<ŠŠ-ÞiÓ¦A0S$Á1RƒAàïxÐôôt i6lªÅ0,>>B‹&L@ h,¡Ê¢±Äb±ðyò$’Ÿb2™ÆÆÆiiiwîÜÊ¢n}øðáýû÷¡²µµµ®®®²²²!!!±±±€D" —–––[·nAeeeeE"Ñĉ+++ƒƒƒÁ•‚øÅðáû =ª¨¨8räÈ™3gË ‹‰‰+ÌçóñÜ£  è)''' mmmñݪ¦¦Ýšb”EEE3gÎÔ××úôé½{÷`QUUåì쬤¤tïÞ½èèh )kllœ7o•Jõ÷÷fÃ].**JNNŽ‹‹SRRB.çåË—ïÞ½ƒ±4kÖ,--­GEFF®oMM‹‹ ›Í ‰‰±ÔÖÖ6gΜÖÖÖ[·nÁÞ$Œ¥I“&UWWÇÄÄdffâ]N^^^hh(Œ¥¼¼<±Xlbbòüùó;wî¯IyyùìÙ³Û3 ‡……555mÙ²%??HûÛÚÚîÞ½ ‡@ëêêîÞ½[\\üèÑ#ärž={¶wï^¼·Ã»œÔÔÔ;w(//wrrB^çþýû›7o —+ Éd²P(üjÇNƒ‚‚bccE"…BxòšššÀÀ@à¹PTT‰D£G.**º}û6Ì}_¿~-‹ÍÍÍñÝZVVæääô ½ÎÇ+++½¼¼.]ºDp9«V­"¸œºººÀÀ@°òòò"‘èKÄ„©]XäÄÄÄòòrüçÉ“'••• h{èСÈÈÈÞºuËÈÈÈ—,Yb``@XèìÚµËÐÐ_²qãFX‘TUUM˜0aÆŒW¯^}ôè¸åS§N7.555''çìÙ³†9s&$$Ä¢´´ÔÚÚú÷ßÇ0lݺu)))ºººçÎC´žvvv#FŒèÖå´´´$&&¾ÒÓÓÓÒÒ@ ïâÅ‹·nÝ»œÀÀ@=== ÕYºtiÿþý555³³³—/_sä‘#GŽ?žÅbmß¾=11QAAA,«©©¹ºº ‚‚‚hºììì5kÖØÛÛçææ>xðh=¯\¹bmmÇãñà—{÷î}ðàA.çÕ«WeeeH¼°~ýúŠŠ ‰TSSccc3sæÌªªª .À ãéÓ§ÞÞÞU·qãÆ”ƒ¡[¡²?ÿü³¾¾¾†††Ïo¿ýfÅÚÚÚÖÖVVVÖÝÝ=55$Ú´´´\\\ÚÚÚ ¡ ›6mš8qâëׯãââ€ÖóÖ­[W¯^í‰Ëyýúuvv6A-jÇŽ111°Åápð.‡Ëåž={6%%ðäääýû÷ÛÚÚÖÔÔÈÊÊÂû nŒŒ$‘HPèîîþäÉ}}ý¼¼Ÿó 555sssx\]]]·r[íÖ„AôóÏ?Ù¶P(œ?~Oî“ ¯aii Ë›¼¼<(ÔÓÓÅ£)S¦<{ö,33Úknnnþþþð’é,k÷îÝuuu·nÝâóùŽŽŽ†ihh 8ðS+ <~(ú ˜;wnpp0;èB¤ÁÌÌÌÌ̬  àáÇ]wëâÅ‹Á¬”––ZYYÁ¸urrŠŠŠ‚¸Š‹‹ A°[ >|øðá~~~0>Ð&°ÄÔÒÒ"¨þà±gÏøÇÅ‹pOZZä8ëêêbcc!˜©¯¯ïëëhåÀoÁ¼$%%…B¡À ±ÿÅÆÆvhwïÞa"Ÿ…ÅÜ‚ àß ä”––F”ÊÏχþ555í°‘=z”——ggg‡âáÇŽóöö†¹æˆììì§OŸZXX@ º5!!!''GSSÏ’÷õ¦ ÷xüöÛoYYYׯ_ÿ÷r`±Xt:âûšÂÎ0gΜ÷ïßßœ?~ÅŠt:]GGJÈdò€ ¤¬¬ …RRR°h‘‘a2™P(++‹_¸p¹Ü¢¢"Ä ÇápÊÊÊ@=uêÔŒŒŒüü|X»ÿ>ÄS§N:uêºuë^¾|9`À€k×®ák&LhoÑŽ?fQZZº3÷œœœÌÌLX‹ˆˆ@‰ 0LJF€¸þAækäÈ‘S§Ní‚–_AAaÿþýXsvv.**zòä ¬aó„§§'>°Öí:`èСˆªÏËË+..ÎÊÊ*""ÂÈȦÕ?ÿü³‰‰‰žžÞ… ðµ3f°Ùìàk¨mûõë·ÿ~¬Íž=»   )) Ö‚ƒƒñYÈCøZ¦#íáåå…¬ÁlµðºuëN:!xü_YXXXXX´ïÖöX´hÖF­ªªzüøq|`mÉ’%ŸºÐél_711qêÔ©ÝF Î;WYY¹k×.”(ÑÔÔäççG¥Rׯ_ßíƒ ‚·ÿþøøxHˆŽŽ~öìÙ¬Y³ %=88¹çE‹u˜}ÓÒÒràÀ¥K—v±”D²çλwïÁåÔ××O›6ÍÂÂbáÂ…æææ©©©ÙÙÙK—.í"á;GKK‹©©é”)S|||bbbËqttttt\¹reFFFOæ|_ .\x÷îÝï¿ÿÞá¤\YYyÕªU`o¿Üiß/ž$}éÒ%ØÕï-eÊOOOOOO” rëÖ-ÈeèÍÍÍ…¹¿9^½zÉl½…¦¦&¸ŸŠ¶¶6ÔGŸ}æYII úè—_~A|Œ¨ „‡‡Ã†ð—F\\\RR’ƒƒ^à£Cœ9sæãÇhfÚÒÒròäI:Þ¡˜7/^¼€,P<¢££SSSg̘žZZZP³6»É›7oºr>}:Þ¹^½zµ²²òúõë^^^>|8þ|]]Ýår† BHVŒ‹‹ƒ¨ï>>>B¡ðĉ^^^B¡/ÊŽB¦ðí@„ùÛ¯r>çÏŸ5jTϳ–{‹`±X=Ùy&`ûöíÿñ(htt´‚‚»ûÆšššÝn6558q„×¾7¼|ù2##åmÿw466žµ;wîܵk|Æ k§¨¨èââ÷¤R©0…(¢‹‹‹••Õû÷ïQ·B¼kÊ”) Phjj ݺdÉ’èèh8p3wî\Ø]óðð8zô(¾²222Ë–-C•…P[ÿþý­­­QeÿË‘‹Í›7Ÿ9sæã £Ççó}||<<<Èdrss3ª)ÍÌÌP·Nž<ð1cÆÄÄÄ@¡’’˜ ggçÔÔTÈýé§ŸàèÕêÕ«¯_¿cxýúõ`ýwìØÆð¦M›>£÷î݃t Ã\]]MMM.\øèÑ#XqΞ=‡:™Êd2ÚÐÐÿÀ0LUUµ³©Ì°aø\nû±tûöí¼¼<ø·››!¡´CHII¹»»wñSSÓ¼¼<ÔÈÀPK£ÑÆŒ3uêTd%,,, €ßö ^ºt)¥Ø¾}»··7 'HLý:øý÷ßA6D"mß¾¦/W®\Y¿~½ºººƒƒ²Nñ4xðಲ2ÂWcoo…¥àoü†‚··7ì666ž9sfëÖ­d2+¶páÂ/ñ …òÇðùü¶¶¶ÜÜ\==½ÖÖÖêêj8H£ÑÔÔÔЈTQQ‘““«©©a±X£G†$ ]]]±XÜÒÒÂb±¦M›IeeeÚÚÚ²²²æææ4Åb-[¶ >×aÃ†åææ²X,0 L&ÓÐବŒÅb 0RNA6•ÅbY[[ã©©I¥RY,Ö¤I“À0T€X,Öœ9s40 ãÙ³gƒ j?“¢P(***èL«‚‚‡Ã©ªªb±XC‡…¬*.—K§ÓÕÕÕuttH$Rss3‹Åš2e ÷ᜠ‹ÅZ°`Xá!C†3™L6› ævÑ Y,–¶¶öœ9s0 c³ÙZZZ,kРA°ÎPUUe±Xµµµ,kܸqN„étúëׯ9ìO²Ùl 4>|xnn®¬¬¬’’— †‘‘Qii)‹Å244„ù~CCCsssÿþýUTTäååA;|Ô¨QЭ°W •:u*„¤MLLjjjH$‹Årssƒü‘!C†JKKËÉÉÁòò#ŠŠŠX,–ŽŽ¤HÉÉÉijj¾ÿžÅbYXX ó¡ÿwîC¥–——w¦v,++kff†6c---KKK ‹ÅZµj‰D‰DÅÅŃ–’’211)))a±XРݪªª Ýjee©Ÿ £¾¾žÅbM˜0fý--- £ììì Û ƒ j?†‡ŠÆp‡Q …ÒÐÐP]] ¶UJJ Ÿ2Ëd2Y8+((ÀX‹Å,kþüù`³Ù ‚Îb±Øl¶••‰Db³Ùèo•••ÑÒF£©««ÃÈ„8 KcÇŽ·*--´‰‰Ig»rrr–––0¦R©VVVd29++ G¡P8Ê>PTTIrBÀnÙ‡ †ššš®®®H$+1}útB†Œ˜ZYYHKKËËËÃÌì‹BJJêÅ‹FFF#FŒÈÏÏ—‘‘QPP€™~[[Û»wïÌÍÍeddú÷ïÿöí[h.˜‰*))õë×Ëå²X,ØàÔÖÖ&“ÉMMM`"zâË{t:=??_AA\8‹Å233k¯+//ãA$•””XXX0™Ì +ça)ŠX,nhh Ñhuuummm=ß{“’’jkk£Óé­­­b±8111>>^¢ úCB±öýC¢ úC@¢ Úí0–¨‚J HðCBâr$@ $øJè8}€L&‡‡˜þK@Ã0iié¾$‰aƒÁè3Ý]C§ÓûL`ÔQ©Ô¾ô)ñù|‰Ô÷Œ“É„ ‰qhß>ÿåTIO]N]]]ddd_r­B¡ðþýû}f/Ã0.—›œœŒ'Ôê5¢R©½¨ÌñÍÑØØØÐÐЗ>%@ÐÜÜÜÇŒCKKKlllg„Ù?"Þ¿ßÔÔ,éÿl6»= _/»))©.HŸ~8ÈÈÈëééõ—Ãd2y<žººzL?ètz^^‰DÒÖÖî#*õãÇ¥¥¥}æS"‘Hd2¹ªªª/iiéwïÞéèèô £Ä÷ƒÑÔÔ¤ªªÚªÉž c:Ž'xý".‡F£õ¢òè7‡œœ‰DÒÔÔìKk/^¼PVVîKkUUUd2¹Ï <F¥R«««ûL cJ¥ö%ãÀf³©Tªººz_ÊXËÉÉé-õh‰*¨H ?*ºq9©©©pº!44ÔÎÎÎÎÎÏ‘îãã… ¼Ö!æÎ‹äA…B!üñ¨c–ŸŸ…øCÎÑÑÑPˆ'(óóóƒB8øý÷ß¡$Ýzˆ‚‚‚5kÖàK=z÷ñõõmÿû'NÀUÐ@lÞ¼ ñ³fͲ³³Ã+6r¹\øžRâùóçP'ŸPxãÆžÔâçŸÅ-„‰'ÚÙÙ!N Ê‹‹áž@÷Ð!üýýñÝêëë ‚ç–߸q#âyšíìì@rP]] ?ßæKII¿þú듆é¦M›i¸U{*¶²²2¸„—¥xüø1úøø ÂË—/C!žm÷îÝPê·€%K–@!â ikkƒ8ÕÛ-BCC ¼s§N‚;€#`ëÖ­PH òutto Ãêëëíp€ã·@Y„pèÐ!øqPP”\»v ÿþú«[É€™3g‚ôj‡xóæ žÄ}8€¿ÿþ›ðû£GÂ%` AXµjþÃÁ0lúôévvv@ñ51yòd;;»ÎŽ$¾zõÊÃã}yPPÒsé¬[¿!Ö­[G ½G•m_XXX/ª(_Þdee­Zµª¡¡Ï7þüùócÇŽav÷îÝ«W¯.\¸Ð××WJJ ÏŸ?O¡PÚs´Ì;„#‘Aƒ^WWçââP\\ìéé 7yýúµ»»»——Wllìýû÷¡066öìÙ³¿þúëùóçëëë¡ðÚµk ÅÞÞ~ÇŽƒ ©®üùçŸèvg(//Ÿ;w.‡F…Ož< ›ÇÇÇ?~ÏÔ{òäI2™ Wÿùç …2vìØÍ›73—=<<Ž9¢©©9kÖ,±Xlgg÷àÁ·dÉøÛòòòåË—ûùù½xñÂÏÏ Ÿ?~ðàÁß~û-(((;; ÃÂÂnÞ¼Ù…Q[¾|ù›7orssá`ggwôèQ‰ÔØØ8kÖ¬·oßzxxÀ=óóó7oÞÜžÑïÖ­[»wïe ÃŽ?N£ÑàO.\¸@¡PF½qãÆñãÇðÖ­[}||ÔÕÕwìØÁd2Aê4**ª¦¦fÙ²eð·oß¾]¹rå¹sçRSS/^¼…)))‡êð&ÀÝÝ=))©°°‰µ€¿Ù¸q#®ž8q"ž¹²¢¢bóæÍð”ÂÂÂ7úøø$$$Aá“'O|}}7lØpõêÕ÷ïßCá­[·ÈdòôéÓwïÞÝ¿çòññÙ¼y³©©é’%K.\1Ì9sæIKKOš4 Æ0Çsuu†ìyàÀ.—‹Ÿœ>}Z$ÁÓ/]ºD¡PÆ¿uëVà2رcÇ¡C‡´µµgÏž]]]7…B!HRÂÿBªU}}=‰DBÝ Ä·oßÎÈÈ€§„‡‡ß¸qcÞ¼yG½}ûvYYYçÎÎÎUUUø‡644¸¹¹EDD`VRR²páÂææf<_{MMM¿~ý€ñÃ0‹Ä±cǤ¥¥áMüüü(ŠÍúõë_¾|™ŸŸÿʦM›¶k×.)))@àààðÕR|øë¹œþýûûùù%''ƒÄ:àãÇ|>äOîÞ½ ªFFFPÈãñÚÓÁΙ3gݺu Žüü¾ªª %jjjû÷ïj.— ³×Ðп|òä Lä+++Y,666ÉvIIÉøñã¡°¼¼¼'Y}ÊÊÊ~~~yyyÐÄ€ºº:÷yþü99±¢¢BOO®ÖÕÕAM‹ŠŠœ¡ð¯¿þÔ““cddª  hª ð³MHcc㇠ðÍ›7@íÅårÞ¾}¹3üñÇ---®®®øÂÌÌLsss/€ÅŸÏÕB°M j‚G```VV^ ±¼¼¼}·nÙ²EII l\II Ì»³³³A¼ }ea) 6‹ËåBaNNÎË—/{2@ׯ_¿téRMçëׯ ¡©³²²ð—Z[[KJJà)MMM°VÀw«––¼64,^½zøÎËÊʆ …»v퓚——§££“¤ÓƒÆðû÷ï»fØ´±±ñóó À ^¸¸¸P©T Gª¯¯‡@qq±££#ܶ¬¬ V^^^ =?^æüRø.—ÛÚÚ …aaaPå L:?GiC‡ ü]$¡…¦šššŸŸ_vv6a)£  Ðþ­Ðp277‡«ö²uëÖææf]OÿþýÉd2ŸÏo//öå=pà@P%ûëFoûóFyyyß*—êÓÒîß¿ÿöíÛðððððp‰„Æz˜={öñãÇ544x¸ÉñãÇñ~ëÕ«WÞÞÞ‡*hPF±éuëÖÕÔÔ@aHHHï6GrrrBB¼›®®®ŸŸþê… ´µµájrrrbb"ò7nnnááá6l³òðáÃ)S¦˜™™á'}UUU‹- _·n¬Ä‡ ¶xñb¨KO¢L=„““Shhhxxø¹sçz¢{TPP@à öóóÓÕÕ…Ê&$$$''£KóæÍ[³f L#?~loooff†ÔPÿý÷_¨—³³s¯Ú_~ùåøñãðnøí@Xsìß¿.-Y²y—¨¨¨{÷î…‡‡+++ƒ¶æòåËÅb1¼$~ÏlÓ¦McÇŽ ?rälç¯]»~Ù»ÒU{öìÑÑÑqvvþ¤S{l6;==ê¸iÓ&h++«gÏžAá Aƒ€ƒyîܹêêêðæxïûhllìšZxÒ¤IIIIðÒÒÒGŽ!ü`×®]úúúááá7oÞìÖ—ûûûgó÷‰°°°ŒŒ ÂôåâÅ‹ªªªÐ©©©„]«ïãÇ¿wï^‡ç^õôô<£¥‡Ë‰Þ\åt6ìòõõõÝú›­[·6Œ0G+//‡›Ðh4´ïíééyñâE¤oÍd2çÌ™Û\—/_†Y›ÍÞ²e Ð3w;]ÅÃÄÄÑûõ뇼 RïF§Ó ö…Çãõë×®677£8ɱcÇÆG£Ñ>~üûUjjjáááAÃŠŠŠ7oÞTTTäñx ™-%%åàà´½%îÍ µn³oß¾˜˜èéé‰ßÓ‚u‡ÃA•E«Ÿyóæýúë¯Èß@e#""D"‘P(nZ2™Ÿß»çö{Åßœ={ÖÈȨÃ%•Jµ±±Ï699ŸIôÍ\Χ¢¦¦fΜ9àoêêê† ’™™Iè$´ÖÛ¼ys`` ¬¬,aI ¤¬¬,ZÈËÊÊÂÏ>é[MLL„†îuÚ…öçÈ`œ€B¡´?œE§ÓÁtvèørhii¹zõ*ˆaƒ!`±Xk×®íðÇóçÏ_¹råèÑ£ s¨,>yŒL&C½@q¼çÑgdïz—UEJJª} ËÈÈÀSð“>99¹öÑQ¤1Ø[ƒçÀŠŠŠ‹/î:Û!x<žòÍ€”””ãÇÿûï¿í=Ô®=}=ÂÉ“'QjO‡ŸgOp÷îÝèèhüÎ(,«'¬¥¥eBBBoû=€Ïçûûû‡……Á¿E"›Íþ<Ù¤¯ .—;iÒ$í­­ÆÆÆ„ü^*• Ÿ-š÷ãÀÚgŒÂׯ_geeeee©¨¨$$$< ~rÚÜÜL¸†Ïsxyy>}ú3^Fþø ÆÝÒÒ²'˜§OŸöŠ ã³³sQQôÑæÍ›W­ZÕ…HIcc#ƒÁ ø›AƒrF>|ø¢;Ÿ &“‰ºéKŸ?~üxû´½1aÂBÊòGss3™Lþ ó˜öI: ýæÊåË—»N@s8ÔìŸÍûÒÚÚÚÔÔôß[ƒ¾sÛíè舾eË–u6Kû®’’’““¯M§Ó_¼x¿ ÇT¾ô;tïrðÓº… Âö#†a•àÀ¬¬,(œ9s¦ƒƒ†aNNN))) Cú P(L&Ö%%%ð{[[[”¹„nÂáp #vúôé666PòîÝ»?ÿüð­[·VWWCáðáÃ!}ùòåþù !ùIa ôïÉ“';::Â}²²²à¬Œ¦÷îÝ›——W§L™š»‡‚B???P¨{ö왵µ5‡ÃQSS{ûö-DÕ¢££ág«W¯†X›¥K—Battô‰'0 [¶l™ªª*ÊÊÊ®^½º'UÀ¯”ß¾}«¦¦ÆápFŒ)d÷‡™3gºuíÚµmmmPhhhçÎ †B‰ŠŠZ°`&%%ÁĨ¨¨JìííñÙ˜=¬™Lþã?PK‚ÔìÍ›7= %gΜÁ'úãÿV^^>..~¶|ùrˆ„@Î1Þ½{¦e .D`0x³H3Ý~l6»=gþŽŽŽ&L@®ÎËË Fõ¡C‡^¼xW]]]ñûê„–ÉÍÍ533ãp8½îé»@aa¡‡Ã133ËÍÍ…ïÈÆÆ¦Ã¡P(~5»víBÆm„ =Ñ>ÿÒÀ7/“ÉD¯M&“aùËårŒa˜¾¾þ±cÇàå=Ú[)NÄ÷‘H´ýˆH´}ÿH´ýH´u;Œ%mH ü¸ $@ ¾:ÍXë3jfø°@«™Lî35‚˜g_ꣾZ#‰qøÿªF½¾Ñ©Ëùþ“Fz”ÞÓg*ÕØØ( ÅbqŸ©QKK ŸÏ—––î35jkkƒ ®>S#±XÜÇj„aX}}=œŸë3•jjj‚”÷^©Q[[[·‡¨zÁåÔÖÖ÷¥Õ€P(ìuª‚o[£úúúGõ)C‰#û“ˆÀ¿ó >Ÿß—>%àŠícÆ¡¥¥%""¢Ïä‘Éd oÄsŒý—WVV644ü².G^^¾ïe¬Íœ9S’±öÝB’±öCøÈXÃSbÿ而µ©S§J2Ö:Ɖ6 $@ ~Ht³òâñxïß¿ÇëjTVV©µ††ò¢EEE@ôdhhˆ¨Aø3ÉC‡¥P()))(Î(%%‘áÜ¢œœpûcöáà¾WUUÖd ÃJKKÁëöïßyssskjjÐSÌÍÍ{H˜ÑÔÔTTTdjjŠJ>~ü˜——‡a‡Ãrk„’’¼ªlNNl 4Q§¤¦¦X¹Z[[ḯ´´4¢ûäñxJRTT$hü¼{÷ŽD"©««w[‹W¯^á§iÀÂI¥Rô Ã°æææW¯^Á´ÎÄÄÿçUUUx9---uuuBe LûÙÙÙÀ­‡¯ìóçÏ…B!‰D>|xg•­««ÃŸ%TVV†c³=Avv¶¶¶6žœ"-- XÀ‡Ž_¼òù|¼,ª,êV={å]» IDAT==¸úöíÛwïÞa¦«« §›1 ËËË‚2DT‘žžq?+++|¼B dddXZZv[…ÊÊJ>Ÿ\A-l``€˜ÐXÂaTY<Ã[kkkNN¢Ríl,½ÿNËjjj÷Wqq1ž…ÈÈȨ3v“ÔÔTKKËÎv¡KJJЪµ0@MM .Ó™•ÈÌÌÔ××ÇsÁp"“ÉŸÇañÙxöì™H$¢P(íž444€L†¼¼<²‡èÃQWWG¤ã¨[õõõñzBß YYYºººˆ> %ÁZ¸©©)##£C+ñÅ]N]]]zzúË—/üýýÑð½u뜜9rä‚ ´´´ .]ºœ»ŽŽŽ3gÎÄ3‰­Zµ 8àýýý¥¥¥§L™2räHdz.\¸ÐÔÔ Dr:::¿þú«©©iuuuPP¨XYY-Z´HOO¯¤¤äêÕ«)))†9888;;«¨¨ ªã—/_Þ¹s§3Ý„–––gÏž]¾|é÷q¹Ü Nòõë×G6mZffæéÓ§bàçŸvpp`2™ÉÉÉGŽ#åáá1jÔ¨¶¶¶˜˜Ð6UVV^·nÝàÁƒy<^XXr›˜˜,]º â•••}ÌôÒ¥K'MšÄ`0’’’Ž9ÂçóI$’‡‡ÇÈ‘#ÛÚÚÁÙäææÞ¹s‡J¥îÛ·ÙßË—/mÁ´iÓœœœ”””233Ïž= K–,™Þ¼yyyyà AZZ|¶MMM©©©yyyH™÷ñãÇÈÏš5 t /^„IÏÌ™3gΜٯ_¿W¯^ñx¼M›6]½z¸¤¤$ooï¶¶6 …âîîN8ÿÿ嘘èåå% i4Ú¶mÛ€lù›;wjÿþýW®\ibbRUUÌÖÖÖnnn:::EEEW®\N™:uêìÙ³¿¡×ÉÈȨ­­Ý¶mÛßÿÈ…çÍ›§¯¯Ó&äŠhVyéÒ% ôµµýõ×O¢qù¯.§¢¢Â××—Ëå¢Ùö?ñ°È‡ ؼy³ŸŸŸ‘‘pñ.Y²D]] qzæÌÂî…B› p¹Ü¤¤$(Œ‹‹Û½{÷­[·ž|ûömqq1<.00Ð××÷Ô©S°Œ»yófRRR·Ú¦×¯_/,,įð0 ›={vEE0IÛØØ¼~ýº¼¼ÜÛÛÌëÓ§OwîÜIH¦˜:uª··7áæ«W¯Æ[ ‚‚6lØkPkkk ]]Ý… ¦¦¦‚D›––Vyyymm­»»;¬Y3226mÚôàÁ ¨iUUUPPPÓiBCCÓÒÒÀÉá;"&&ö±8~ÎÎápà)uuuááá0ïNII‰GÝêçç÷×_¥¤¤ôïßûöí`Êïß¿¿xñâÇ;::‚"( 6ìßÿ=xð ,7õõõÓÓÓeeeE"QtttOrrrNž|8°Â¬X±X…víÚµaÆ1cÆ€‡077744<þ¼ŸŸ¬· ²---¾¾¾„<¢wïÞ@AÙöìÙ³wïÞ­ªª‚Âýû÷ƒþæúõëÝÜܺxç .p¹\¼ uSSÓÂ… !äðñãG__ߺº:BöÊøñã;k³gÏš››ƒÇõöö.**êׯ_```vv6,}ð¿¼víƒÁàóù†††x½ó/Š9sæäååD›¹¹9žk§  àÂ… =uàÀ«W¯ÆÆÆæææ¢OJJÒÑѹxñ¢††®\¹8À¾•Ë ÎÈÈh¿ sýúõ×µoß¾=zô(.ÄÇÇïÚµ ˜±¾’Ë122 |øð!~ iii#iØFâããa¤ÚÚÚ¡X,†›ÐétkÒÒÒòöö®­­MJJª¨¨è9§;wîÜ»w/! Ö!8N```ff&ž9”ÃᨪªÂ»ÕÕÕu¶•}âĉ‰'vÁcZèÑÑÑÀÞÞ¾³Ÿ™šššššVUU¥¥¥UWW£•YXXXKKKúÓ^^^†VÇööö‘‘‘$‰Ïç÷P·´´j­¯¯æYYYP8xð`˜ƒ‰LLLäñx–––ŸG÷›ðòåËÊ·€î ÐÙáM[BB̾;SÁ*((¸zõj2ÆÀÚ’››[XX(##Ó…°>zô¨¹¹y̘10CË—/OOOo/»NÀøñãÇïç燗hC‚ßÊÊÊhÍÑHy3** Æ’¬¬l``àÛ·oñ^ôôô„EUee%šÕv6ÿ…–±´´ÄÏ) wðß•J…OÊiiiõòòr¸­ŽŽN‡a™W¯^•——/Z´ ª þ‡³l*|–ÉÿˆÒÒRíBÕû[ÆCûäÁƒ£>Ìïk/‡˜âž•‰‰IO’‹ÆÿèÑ#øw}}ý¬Y³¨Tê”)Sà& C(¢Fár¹7nÜPQQs ®®®¬¬ S†ÌÌLXUA!aôôéSØrøvìXxí²²2‡zãÆ ---¨uQQŸÏ711?ýpuu½yó¦X,¦Óé=QHÓÑÑa0¨[œœ `nn…………NNNÈ,FEEÚÛÛC€ØÁÁ!::šF£!ñ))©1cÆ@eñvb³ ›øÙ˜1cF`` Ló m(¤öêÕ«Ñ£GÃÿªªªª««Ãû¼zõ ¿é•žž1xð`M°²²Bëx‚ dXX؇¦OŸ.çîÝ»ÉùôéééÁÁÁÓ¦MëV†çîÝ»W®\évÇ($$D$¬®®nEET'77h e=[\\4¶··ïv»âÿ°wåñP­ÿÿÌ0c_K“ÈZé¦]%‰íh¿¡•ÒJ´SÒmQJË• ¥Ü%•¥DD–ìe߯>f,3fæ÷Ççõ}^çuF“6·ü¼ÿªçŒsÎsžåó<Ÿçóy¿±›˜˜ðù| .((“cccƒ´b׬Y£¥¥%&&†¼[³gÏîRÝ£­­mëÖ­B¬ìĉQðÈåË—CBBÒ|G500°²²ÒÒÒ²û¿ÿ~dd$¸ ~ñ-F 8{öì½{÷\\\~}“sîÜ9øÇSQQùÑÏ?Åä|?~zôhØnâJp–%ŠŠŠPY8Ëéæ› VÖÔÔâìúZŒ7ÞÇßß?//܆<O0Ìg1 C ÀÇâ7mÚtæÌ™›7o²X¬¶¶¶ˆˆˆ¯¥©OKK{ôèÑÌ™3¿è—»wï^llì™3g„ Ñétð¼Ô.LMMÁ=…¢*’““ñÒŸïß¿‡o‚a˜àhíþü[^^ކ€ ¬­­» pçθ¸¸oÓÄêaþçzW_ ØU›PÓïarŽ;æïïOèÄÛ·o'˜œªª*OOO‚É)***//‡ÓTüX¥P(‚¡ÑÑÑzzzBvëçÏŸÿþTÐÄÄÄþýûã‡kTTÔüAx®‹‹ËŒ3ðíÚÑÑN6ü ëããƒ79Æ ÓÔÔÁÇÊÊJ2™\SSó³MÎëׯ333 &',,lذa“sîÜ9‚ɹ}û¶……¾²mmm>ty•—— I\ºté÷§‚677ÇÇÇã=eee?~$œ<}ú”ÃáLNll¬††ŠýxxxàM޵µ5´QGG‡ÃÉÈÈøZ“®ªªŠ\BàêêÿE=ÍÂÂÂgÏž¢Brss Ú| öÒ××Ç÷aˆ)øN¤¦¦FFF 19Ý„³³sfff¯¡ÕøÕàââ‚ÎÔ“3bÄˆŠŠ tž ù4S¦LÉÏχÂ!C†Àp}øðá„ h4ÚÒ¥K£¢¢^¾|‰aØòåË¡ªýõüžËåÂ2AAAÁÈÈ ÛÚÚÀö0ŒØØXˆ@e2™àË¢Óéééé|:Nð2W®\qppè~ªG—ÐÐÐ2d¼ƒÁ€ñ“––ÆçóáøáîÝ»zzzxÏLiiinn.Ì&&&rrr௠„rëìì|ÿþ=x™Øl¶……†aÊÊÊ£G†Ç1™L###´«×%…B!L”Ý­­-¬èy<&ÉÉÉ™˜˜ÀƒÚÛÛá4¾¨¨èÓ§O&&&Ç///‡«|>²LÍ 'ÉóçÏûö-„ºÎš5 V×®]ƒÊ®[·šõýû÷GÇf³QÐNNNNrr² Xò×bõêÕwïÞ…Y bêØlöíÛ·áLžN§ß¸qo---qqqúŒšu̘1ÉÉÉPAyyy°ë•••©©©pF5~üxðÝ-]ºôéÓ§à¦[¾|9…BAÑ} /_¾Ü¿ÿ7Ô"!!­LMM‡ bff–šš ÞØØ…Â+‘Éd;;»ÏÝ5"†a:::ÆÆÆ/_¾„D%Hâ™6mÚ§OŸà—C‡%dÏ|T*Tì>‡!C†¨ªª¢±AÆ)))¢¢¢cÆŒ™:ujaa!\ÕÑÑþP˜(¨TêÚµk{f*\»víõë×I$ŸÏÇ#ÄF¯X±¢ÿþðò­­­àÔÑÑùøñ#²ÙlpZNž<ùÇP¨ªªúÓÑÏ€••ÕíÛ·ñ£µ½½ýîÝ»þù§¼¼¼±±1aþáqssƒÅZ~~¾¦¦&›Í®­­… .—+))‰¢_TTT¨TjJJ ƒÁ˜:u*D° 6¬®®RØ–/_g†¯^½RWW—““›ƒÁèì섘"III]]ÝgÏž1ŒÀ´UUUURR2jÔ(|³N™2‚&ðͺtéRhÖqãÆedd”••1ŒíÛ·CΑ‘ÑÓ§O˜L&ÄÊS©ÔñãÇ?yò„Á`ÈÈÈ 1J.—+%%ÕeÊ”¨¨hee%:uy0fÌ´W644|ñâE]]|^8ŠŠ‚ 1¸OñK{%%¥þýûšºzzz:ƒÁ˜;w.,hôôôŠ‹‹?~üÈ`0à ¼» Ї]]]ñI‹|>ŸÃátéa2™µµµp“ÎÎNŸËå¢ —ËmiiA7”““9räàÁƒEDDÞ½{Ç`0¦OŸË—#FÔÔÔäåå1Œ•+W 9ôf±X†††`ÚEEEŒŒÈdò‡`'Êãñð¹Æ4M^^ž0Zsrr¸\®ººúðáÃét:ìºV¬X߸·¶¶Ž?å*²X,TßÖÖV|ÒÕÏ€˜˜XZZÚ°aÃfÍšõðáæ¦¦ööv nmm}õêÕäÉ“eeeµµµ_¾|É`0 ¦wРA’’’oß¾e0“&MBv¨¹¹ùÇ ÃÜÜŸ¨Ûc R©……… 0^ÚÚÚÆŽ‹öèhjjii©©££ãÅ‹p.;räÈèèhƒA£Ñ`­,""Âçó™L&…Ba0§;ÉéèÛr8*•Êf³ù|þ›7oâããûTAKôq¬ýúèSý-Ч úÅnܧ Ú‡>ô¡}ø-ÑgrúЇ>ô¡=„®ÃÈd2ÞaÝ †‰‹‹÷á?¨ˆ˜˜X¯i&80 P(½¦FÐF"""½i(q8‰Ô+'‡/Æþ^C‰J¥þf=¡Ÿnr˜L&ä6öðx¼ÄÄÄ^s–ƒaXSSSVVžúwGee%…B²Î^ÓFÍÍͽi(±Ùìööö^69ttt$''ÿA³_uuu|>¿²²ò‡ÜMBBâ{(]þ?îr$$$H$Ò·‚ýš£P(½i—C¡P{Ó ZDD„Ëå2™Ì^S#‰$--Ýû&¨Q¯19bbbT*õGM¢¢¢?vÿ×õWÿYê¾rrrqqqC‡íMk………jjj½)b­µµ•L&÷šŽkL&³×Ô"ÖÒÓÓ{Óä ++ûöí[mmíÞ±VVV†×3ûÎnܧ Ú‡>ô¡}ø-ñ…½dVVÖ³gÏðYÑÑÑAAA†-Y²1Ë^¿~ø¶lÙB ÒwssÓo^ºtIBB‚ËåB⫝̸œ¢™+)) ¬Q£F9;;Cáëׯ!vΜ9ˆÎ($$tÛlmmQ¦ØéÓ§A&îàÁƒÝOú---õ÷÷žJÀÛ·oA´fæÌ™ˆý!((ê6oÞŒ˜=?ԙǎ†éíÛ·#:K ……;vìÀ0lðàÁˆí4++ RÙ ìíí¡ðÉ“'ÀÈ»lÙ²îP½îÝ»w÷îÝø$ʵk×òù|iii¨ †a 0|øpÿ`ll,žgséÒ¥•…˜1Pf¥‡‡¤ñ#  Ã6mÚÔÚÚ*""‚îÓÐÐÝF]]Ñ;fdd9æ”)S6nÜØýnzìØ±+V8Z€õÚµkr”ªª*È/ÖÑÑqssƒÂääd ÃŒ!¡ýÁƒx9¿þú 2%ÏŸ?Ÿ’’‚a˜‹‹ J“ܳgH=^¸pˆß;;;!WN^^(æ„#::º¶¶vÕªU¨äÆÏž=Ã0ÌÞÞetzzzû€»»;¢˜Û²e 0ÆBz<Ö×ן8qÔ+ðx÷î]RRi-""‚D"A,àòåËúúú.6oÞ|öìÙÏ‘£|úôéÖ­[H¿ À¼yóêþþþ111Ðv(ôèÑ£………†yyyáY£lmmýüüzx6´³³ãp8âââ‚Ê?~„nuww‡¹ "—ZZZáo]]]=<<²³³ýýý¡°¨¨èÒ¥KöööOŸ>MIIÂÔÔT‰DP‹ÁÃÕÕõÓ§OñññˆŒÃ0kkëU«V^P#WWW»»»Ã=kjjŽ;æûööv¤ÆòMMMð'÷îÝ7nœ‡‡ÇàÁƒ¡}9räÈ‘ØÛÛÏ›7J¥òx<` innvvv†¿mhh£¬¬¬ÀÀ@(• 6|±ƒzyy¥¥¥%%%ቇAš\Õ666x:~øðax Nwwwwss{÷îÝÝ»w¡0??? ÀÆÆ¦  €J¥¢¬F°gçÏŸ§R©ðËË—/oÞ¼YGGÇÙÙyüøñ˽eË–K—.‰‹‹¯]»úpkkë¶mÛÐÊIqqq¾¾¾¥¥¥x2½àà`d>|H&“'Mšäéé9pà@à‘:~ü¸››Û AƒfÍšþtkkë   ‹egg×ÞÞ.(_öþý{gggBçðà‡‡ⶸvíÚ³gÏ222ð,ïlÙ²¥¾¾þùóç°D€jîÞ½ˆ”***›››ñ:{••• ÀW‹aRûFö†ÉdB}CCCÉd²¾¾þ‘#G455a‘zàÀþýû¯_¿žÉdFEEõ°ÉY·n¥¥¥ˆˆ‡ÃY¿~=ÔP\\ìíí /_^^~æÌ™;w–••1™Ìõë×ãûÏÍ›7ét:üòÑ£Gd2¯.ÚÃ8vìXfffbb"^&îéÓ§ø© ߂LJ—¯®®öôôüVç³&hQÒÓÓAòÙ@‹Â>ééé œ—““3lØ0(¼}û6AãÃ0CCC;ä³gÏ`š`³Ùp6°JЉ‰uÛêê꺺:¸sQQÝÈÈÈ@¡ºº:„R¤¥¥ÙØØ€îÎßÿMЭé222vvv%%% / ¨©©©®®†›WUU!"}@nn®¦¦&\ Îãäää3fÀr‘L`fbb‚óÿ믿€Æ1;;ÖG ÅÅÅpÚš`Ë/))éèè€BÊR‹%K–€6 ¾0*** Ä @A€Åb¥§§ƒ vBBÂýû÷ ÷QSS#è5egg£fUUU…èÛ·oMLL`>¾;tΜ9ãÆ#Ì­111û÷C؉¶µµ¥¦¦‚NARRìcèt:jV===§­­M¨õÌ™3 ûEت¾~ýzÆ Àæ')) Ë&Ô‡«««>,¤ :::vvv±¸I“&‰‰‰Á>&<<¶P)))HÔÝÝÞsÕªU“&MBk5 ÃÄÄÄìììêêê[œŒŒŒÀÀ@SSSÐB<|ø0##¿ œ:uªººº mooÇ·Qgg'ƒ——·³³+,,$t¤Aƒ}Nõ+;;[OO®ª¨¨€ÀyRR’™™˜777XüYYYj{OÐÑÑѾ¾¾  Š—mÄ0¬¹¹977¾XTT¸y`\ê;qâDÔ¬÷î݃fý¯`ff6iÒ$AÙ-SSÓ.UAåååmllÀyÿðáÃÝå$™LÆ›œ9sæ477Ãö|Ê”)]ªc bÓ¦M-¬—†µ··/_¾\^^þ‹ªS]âêÕ«<غuë7³,KHH˜˜˜deeáMΤI“*++¡‚cÆŒ!,ÃmmmÙéÈ IDATàêÂ… ñLìNNNyyy>>>(.nõêÕ0M€@…B™6mZMMÍúõë•””Μ9ƒwå¹»»OŸ>ÝÑÑð ܾ}žbhh(\ †+!ïîÝ»@l,..Ú?_Ä£GÀ¢¯\¹ÏÇ~îܹèèè={ö|ƒ zUUÕÆ555»ãwú€¥ t9üüü¶oß3rXXþFsuu…¯§¢¢‚ûÁxêÔ©¹sç"§Ó­[·^¿~ >ØJ•ÜÑ£G“““W¯^?'·³³£ÓéÁÁÁàÇ §HII WvQVVVVVþôé^­ÑÑz{{?^ˆ„b›¥( ÃDEEMLLÊËË ¿lhh(//711Á›œ²²2‡ƒw56lذa¡¡¡BÞÞÄ%))‰¦Z)))XQLNLL hùÇ™3g^¾|éââì|]\å¿E¤OTTÔ×ÒÒVЬ/^|òäÉüùó»Ãþó®4å"¬^½ZTT”D"EDDàË%%%ÁÞäää„„„€pOŸå––VWWÞÛ˜˜˜×¯_4áëë kap—߸qCRR’Ëå.[¶ÌÍÍÉdZYY¡®ÜMøùù­[·ÎÕÕ¼[]jw~òóósrr ‚ÉÉÉQQQè|¶ýû÷‡«aaa¹¹¹02wïÞ½téR77·ãÇ«¨¨Ü¼y“ÃáÀ_-\¸$¿`áêêZSSãççwþüyp建ºfffž:uj÷îÝ)))L&ž˜˜øµ”Vžžžàmkk;{ö, ÁܹsÑÜL°77ntuuOHwÄNjkkwïÞíêêZ]]½}ûöï±:‚8þ¼8Ž9‚g~ljj ƒ¯WZZzãÆ Pº‹0`€««kJJН¯ï¦M›V®\‰&zð êÜåË—Ïž=Ûßß___¶­vvv...òòòÖÖÖ7oÞ”8yò$=¶´´øøøtÓ´pîÜ9111KKË~ýú ÿ¥……ÅîÝ»…X¦¬¬¬ÐÐPt4‚¶8t:ÝÖÖööíÛßùÍ;::Μ9#äpbúôéhù{\éõÙ³g¡;ݾ}[DDDø1Ò¯SSSä<|õêUPPbÚž7oÞ¸qãîÞ½›““CÐ^ùÏqëÖ-˜šø|þ¢E‹`AL˜Ásø“4S¾ÎäÐéôööv°„111ÝI5ÂÓgddtvv‚ÑÝÝý?þ ÓéÀ¬þU˜;wîêÕ«•””nܸAnÞEÀõ,//Þåo ‚ÙÙÙH· PZZª©© W¯\¹äü°Fž;w®””ÔÎ;!S -óù|Vˆ‰‰Mš4);;ír†º}ûö!C†”••¥¥¥£†ÃáÀS¢¢¢¾!<199yâĉàXƒ{ Ç€P°ull,jVssóeË–õë×ïÒ¥K¨²Ý„¼¼¼››ÛÈ‘#333Á¸v.\€Ãs Ãöïß?ü œXèééÁ;ÃQ?~fÌÏÏG‘h5£§§·yóf Ô¬ƒ BGŒwïÞÅ;„Á=z”ÉdBÉîÝ»©TjFFèm§¤¤ÀSª««¿¡ƒãNTT¾°ð_š››;;; «ÎÉÉ9{öìÞ½{µµµ‘Éyüøqbbâ¦M›húçàè蘚šŠ]º<år¹è7]BQQ½áû÷ïÏ™,,,–-[¦¨¨ˆ<–¿5ú÷ïöjoÞ¼Áo:544444®]»ÖýÙ©Ç€¦&‡ŸšŸ>}òððpuugøor¾k×®=|ø0¡“H¤ï¡õVQQé’â^8¼½½a·þÃs¾tttõ:`ñâÅAAAxaºææfÁC™ÿ\TãÁƒ‚šâƒþâlø9P(”oà„¶´´DaK?$«oAD!00Ë墠 À¡C‡Œ¹ŸGŒñcU­.\¸ÀçóW­Zõżnssó={öLœ8Q]‹ÅŠŒŒ„°I ýwwwWWW¿uë‰ÕÖÖ‚•íRÅrË–-è|kàÀßV£—/_ÆÇÇÃίK¨©©ác‘~wô¡}è!ô™œ>ô¡}èCAôs{ö_joøÇ¥ŒŒL¯Qà=Ƚ£™ÄÅÅ{Y(Joª;÷¦A3IKK÷& Ã$%%T3¥ìÏ59µµµ/^ì5_ŸD"uvvB˜V¯—Ë ïM:§pHžÐ›æ2T„½©ãõ²ÉÃáøûû÷²6*..þQ“ƒ²²2>£ÿ§˜EEEˆXë±ö›‚±Ö ôá·Ä‚¤;::˜L&>p“ÉdB(ºŒŒ ò655A(º¢¢¢ K´¦¦òr”••á4Ÿ¥,""A{29ÄÄÄP`_kk+¤SHKK£ËææfÈ3——‡ØÓúúzÈ¥ 0€šó9p8œÆÆFü^¡­­ rG¤¤¤IkZWWù@&**ZUU…Ï¥’+.— ™¢¢¢(òµ½½âý%$$Pœ7úȲ²²]RS~á~ýúáÓà “Édõˆ>/•J [g±XQšÕЯ_?½­­­…Ĩ)\­¬¬„3Dç…*K¡Pàóvtt@Þ@RR²û™‰µµµrrrø¼ô… Ä:;;AWÕ}d´ ”——oiiÁ ö¥þýû£•¯`æóù|ŽÿÈBÀd2¹\.>J}ak‹º¡WVV*++£mz—} }á/ö¥ÆÆFH‘érÀ~î¡°ÙìææfÔ—ÐÀAñ.+ûmÝ©g£†D"!ò=|e!gE\\͇hÔV–B¡|UžÃÏCmm­¼¼¼à|XQQAø¼hàðópO˜œŽŽŽÊÊÊÄÄĈˆDCÛÒÒTíË—/···———¯¯¯?yò$$¯:::.Y²«^QQaooméïﯧ§G&“/^ ó—Ëåñx™™™l6ûÕ«WÀÞ?zôhЪb±Xaaa S±`Á‚;v(**666ž?ÈÊ6oÞ¼råJiiiDøQYYùìÙ³/:;;;ËÊÊòóó½¼¼8Gkkë½{÷@–jΜ9ŽŽŽxs[__êÔ)>Ù¹s§………””Ô å*› ¥¥ell,..s•JMLLär¹ïß¿Fwuuu•öööÈÈÈ£Gbfhhèææ¦¤¤Ä`0üýý™øÏ?ÿ´³³ÌfÀ^6›mnnˆìŠ‹‹---!}5((HMMÃá$$$}ÃÈ‘#ÿþûo|l~KKË7 QÙ²e›6m’——¿zõ*¢ ¦ÓéW®\™7o^UU•££#0oz{{ˆŠŠ–––þùçŸÀ>¦¡¡Àb ©©yþüùAƒ¥§§#Zn&“9gΜîÐ}VWW·µµÙÙÙ8qå •••ÙØØÀh EBЬ‰‰‰Û¶mÃ0løðá§NRVVNJJBʶ---–––žžžW¯^õññA« 777 :~èÐ!hÐ#GŽÌš5KLL¬¼¼ÜÞÞ Ìõë×uuuÉdrAAШ+((\¿~)xviljkkCBB˜L&REkhh8}ú4ÐìØ±ÃÒÒRJJªººÚÙÙ9++ ðӧOO:•B¡”––r¹ÜéÓ§À4Íãñ222€ûcðàÁ/^„¾ôôéS °˜:uê /ÀAŪU«6lØ ''WWWwâÄ èó{öìY¸p¡`r <ÔÈÈ(//lÇ«¨¨îd‡S^^þáÇ .{†aOŸ>ݺu+²@ÖÖÖ  ððð¸ÿ>²yÞÞÞ†††UUU;wî"(Ÿ‰'ŠŠŠ–””€Z…B ù!d<ÝAqqñŠ+€}àÖ­[xZH6› š †7ÎÝÝF£1™Ì[·n„¹¹ù–-[š››;fdd ~ÿ!`ìX[[_¸px4ð•8q"AÛ¬¼¼ÜÂÂ-…Gމ—Íýé&'??ýúõ, DáááÅÅÅ@({âĉk×®íÚµ f<==1 [»v­‚‚žÊiÏž=>>>Ð~ÚÚÚ©©©²²²@ÚÁårß½{wìØ1˜:¯_¿wމ‰Ù¶m[hhè›7oJJJ Ð××÷ܹs‡ 2dnݺUVVvùòåHO¥´´tïÞ½ÝqËÖÔÔ¬Zµª££ŸC 7÷÷÷?yò$Ô púôiôh[[[…  £ÔââbGGG´ùò%~ßÒÒrèÐ!øÛììì5kÖ¼|ù2%%åÆPxçÎC‡]¸páéÓ§$ =´eË–ÏÕÂÍÍ-''‡ài¤¨¨(&&–™™ ÿí3('æåå±Ùì¡C‡âIYZZZ¬¬¬€aISS300°µµõãǵµµ°´155555mhh€µ<,Ìaí\UUUWW'èû²··?zôhw˜·UTT³²²ð €²²²rrrPÁ¶¶6Áýµ¬]»Ö××­v³³³ÁCû-yyù°Ùì¼¼¼ÊÊJüœDC[SSC&“…dXÀ EÐÕÕÍÌÌ$‘H,«;¢ çVWW¦‹ðÄC‡™™™& pß¶µµ©««ƒ}…uî‡:;;AÉMQQ1""*[^^½ $dnÂ)îáÇ€¥Á/‰¾ˆ‡æçç£ N‡¶4hlgAß¾¸¸¸¥¥…F£ .ÿ@1“Ëå çô›7oÞ¼yó®^½Šü@ÉKK!Y[Â/ºedd=z«ïÒÒR!} ¹Vª««ÍÍÍ»lâ]ø™LF}ICC#11155t‰á{öë×OpìTTTÀUuuu!ñ»à/ôëÇ’Ô××WVVΞ=f§-[¶lÙ²E”ý?x׳gÏþðáA)ŒŒŒk×® JéôÄYÅÅÅà£055¬Ìçàîî^UUuàÀDÅÁãñ²²²Û½’’’;wjkkƒ‡ ””têÔ©iÓ¦áuïÝ»¾téR<áO~~¾ŠŠÊ÷¸Puuu  ‚“'Oó† ªªÚÞÞþîÝ;]øK¹¹¹êêêÈ->zô胿Ož< ò|àNÙ¹sçÀ cµËMq@@À!CV¬Xñµµ8yò$tzIII!úöÄÆÆúúú𵤤DVV–pèræÌ™¼¼¼Ý»w㽎ÎÎÎôÐбÄÎ; ´oß>¼›»©©IHwï8pàÀHÀ?ܘZZZÐF¹£††&“ ¼«† 8ðñãÇÐÖ‹/^µjò\ÿóÏ?‰‰‰7nîÕár¹ >>>Â6… ´´ôâÅ‹óæÍÖÔ¯›Íމ‰ ñóó;D£Ñ âø:N ŒŒŒœ={¶Íçès¾ ðàV‚ï9uêÔõë×ã#¦ÔÔÔ"""À›geeµdÉ99¹aÆ•——ƒÿ‹aØ3‚z÷¯†ººº[·nݿƌëÖ­ûªê…ŒŒ ð î­­­åå忊^ΣGÊÊÊ€œøÄ‰7oÞì¦=.aäXƒfeeUTT„ÿÙˆ#¢££cbböíÛ‡†±™™™™™™¯¯ïÕ«WýðæÍ›7oÞ¼uëÖèèèåË—£YoÏž=ÇïòЉ …Bù3]BBB\\TÐßßÿÂ… xÇÚ¦M›.^¼4Ãx­_ ömÛvòäI4C¡—çóùÊÊÊH}àÀÑÑÑÙÙÙ›7o~ùò¥cÛ›7oªªª‚:ç×ÂÌÌŒàXëÎ_YZZZZZzyyݼys÷îÝPø÷ß¼À/;iÒ¤#F *?zô9Ö dРAÑÑÑ™™™[¶lOŠaØëׯããã¯]»ö9:œuc6tèÐÏ©õ¬^½úsŽ5eeå“'O‚‚xKK ÞX>þ<336jp$ãììüèÑ#І8Ö444;H>ŸÿêÕ«‹/†„„|óáÁ?ÿücbbò ²¶çåË—aaa`o`3mooÖ½®®)q%$$L™2%::ÚÃÃ#$$N¹ÈÎÎFŸ}̘1]°X¬¥K—‚c­K¡~rùòå+W®À–íêÐÆÎÊÊJYYyöìÙ§OŸÞµkôO||ÇÛ·o=ŠN‰~Y¤¤¤L:5::úìÙ³pØó+#55õøñã·nÝdáCÈËË»zõêÏ3ö?]/çÝ»w#FŒâ @¦5''gܸq‡@}}=Á„‹ˆˆ9­r*a0rrrß&ŒLœåùÙ›7o&L˜€!ãp8ïÞ½Cú%BPQQB£ÑþüóÏžéˆUUU,ë‹þX"©««¼@‚•e³Ù©©©Ý©,ÏŸ?G“š££ã·IÇ«ªªÂ±|RR’‡‡‡ŸÏ'ˆæää())u'PçåË—W®\ùf{óéÓ§ÀÀ@CCÃî» :;;£££ïÞ½ <cÆŒŠß»wïéÓ§P¸dÉ’uëÖ ¿áíÛ·3227æ×çF+Baa¡”””`hrr¢U`BB™3gðg¿,æÎ ³ÁïwwwØ óx¼øøøž×Éþé&gûöíp JX!ÆÆÆâ ¥¥¥»ví™ „W¯^=}ú”À’v‚‹µ´´4 !q·ßŸ«ŸŸŸ/!!!8 SRR†ŠwOÿõ×_oÞ¼Á¿ ƒÁX·n]vvvw¶’=é~öìYff&œ'æ_yyyü4±ÿ~‚-±¶¶~÷îAÕÎÎ"¯Žˆªª*!Á„¶¶¶ßé¾okkKKK›2e ¡¼¦¦¦®®ó;wîp8BøÀ©S§/^Ü<èU«VáwW_ UUÕ9sæ|Ãß2™Ì;v܆EEEhsóUÀoG¾¯_¿ŽŒŒüÜÝåË—õôôá))):::„Ìš5k233¸to0 344 †óx¼K—.L“ÉÌÉÉùÜÎþ?09jjjÅÅÅH Ž…GŽÙØØ…ÊÊÊà,NJJ:t¨‚‚‚¡¡aJJ ¸¡ŒŒŒ <œËåÚÙÙá³sdddF 7©®®†:+++÷ïß ÛÚÚ`5tèÐ’’(TPP@þÓãÇ;88|n‘ÕMÐh4pñƒ‘€£éÂÂB>Ÿ¯££óöíÛºº:ðrÒh4ä?xðà¡C‡ðç&&&111bbb|>îܹ†Q©Ô©S§Â›šš`ýÞ¯_?MMM(¤ÓéèdëÓ§Oè#>ükuúæÎûøñc‰ÔÑÑN)))}}}ô Ш¯®®®ªªÒ×× ±¼FFF0òx<ÔFÆÆÆ_[‹ììlt}}}eeå‰'ÂÕ˜1c„œJvtt ¿•••6mZMMMpp0¸p«««AhK]]½²²~I&“¡#éêꢫªªÚ͘QQQSSS!?PVVVRR‚Û¶¶¶B¬A~~¾ˆˆˆ––Ö¨Q£šššàªŠŠ <ôÉ“'ÙÙÙ°§œ0arè=}ú…:wîô*‰DXHª¨¨899Á‘û¨Q£ yòdƌ۶mƒ¾?þøò ù|>t¿ùóçãI€Î##£.µ‘-Z„–/=“#++û ‘,_…/¨‚öôq¬ýúèãXûõÑDZö[à'q¬ý(UÐ>޵>ô¡}èC¡Ïäô¡}èCz¢ŸÛA÷šm&•Jí5mà!¤R©½¦™àL^TT´×ÔNADDDzM@wª—M½o(Á,G¡P~HDDDð´Å?Ëä´··w'œ÷7ÇËÉÉéM‚f---EEEøºßÕÕÕT*O‰ô»£®®®¹¹¹7 ¥ŽŽ6›ÝË&`fê&÷üo¦¦¦ÒÒR Ûÿ!ËÁ(™ÚµÉár¹(¹BŒðLõ½`ÇÆçóY,$·öŽ]—Ë…H–^³Ëéììäp8½¦F$‰D"ñx¼Þ49ÀV ¥¥¥×¬u ]"HH7Jߟkr$%%¿-§ìׄœœ\jjª¾¾~oŠX«®®:th_ÄÚ/ ˆXëììì5C "Ö>~üØ›&YYÙœœœÑ£G÷¦ˆµÆÆÆ>UÐ>ô¡}èÃÿw|!´°°0!!OS‘˜˜‰Z3gÎDt„oß¾Å0lÕªU@_pþüyDj‰aØþýûÅÅÅy<cJKKN÷ööF?6l<4-- d‚¦L™ öÑÑÑxBÌeË–AZ”ĺoÞ«ªªîß¿¿iÓ&T’••©s'NDI‘<zÐ+V ²€«W¯c¶mÛ6Sïðl"ׯ_Gra€ÜÜÜÔÔTD1ùæÍ›‡¢«fff_¤;sæ (¡H”€ôO Ãjjj@ìNCCÏÉaXJJ žÒjÖ¬Y&ج~~~x–âÝ»wC†æÑ£GÛÛÛÉd2¤¸2™ÌãÇ£Ÿ©ªªâ¿pfffnn.Òhè®^½:wî\<ÕÐñãÇÁU}ôèQBTHmmíÙ³g1 SSSC\àBšõñãÇŠŠŠxŸÀÀÀ)S¦HçNž|óæ †aË—/Gù˜è oݺÉè;v $5ÝÝÝa§Ž¾ð€úÆÇ!WOOò¦1 {ýú5dÈ›šš¢|Õððp ÚúóÏ?…l+=ºwïÞÏr”——?~üTñ_`hhT„°¶¶Æ+>x{{¯Y³±¸>|˜Íf‹ŠŠ‚â\áàÁƒT*ÑÀ#”••óššðgúô鈻5+ajú¯péÒ¥E‹ ²\¦&@uu5H 2D8äßå”””8998pñj`–””ôüùsMMMMMÍ”” "ˆˆ(((€ÂððpÂÑbHHˆ”””æÿ³ƒ‹‹ üWAAˆ) úMgg'̹ééé>„BÄ¢  €~‰hH—/_>sæL7™¯êë뜜\]]ñÊw>|‡›€j~ØäååÁÕû÷ï‡Ø•+WÚÛÛ¡ðüùóx­eWWW”°Íb±œœœ\\\nÞ¼‰~ðñãGà\@$Œ°ÓGÌÍÍ}ÿþ½Zx{{;99y{{ãOªÐçURR‚^UWWwþüy(looÇó¾`–ýþý{ôPÈU&4ë‡0 SVVF?»sç<ôðáÃ4MSSS]]ÒþEDDÐÏÄÄÄîÞ½‹ÿ‡BÄÒ_„ŸŸŸ““ÓéÓ§ñÍêáẾ·¡¡áìÙ³p‰ÍfÃ4‘ý¹fŒŒôôôDPÁÁÁNNN§N*++C¿9uꔓ“Ó¹sçðRʨ‚ýúõNá“’’âäätôèÑ„„¼½ÉÉÉ;üûï¿ÀªùÏ?ÿ°X,(ôññÑFwww FB•mkkóðð€ …öxB¡°ªª ”|bcc¡0)) D·ÂÃÃ‹ŠŠ 0,,¬K¢q'''߯0¬½½:îäääææ†_©&&&¢ÏBà㈋‹£Óéè*žç÷ìÙ³ÞÞÞÀQó>t3UUU´`긹¹©ªªjjj*++LNEEÅÕ«WáÍøÝ»wq©©©™žžCøÑ£G¨Y>>ðò,‹@ûÓw9’’’zzz ¿ªÍÍÍmnn†õ݉'ÒÓÓMLLÞ¼y3lذ¿þú ðµk×–””ÖMË–-#ÐzêééJ+N711quuUPP°³³ƒY¸¤¤§Ÿ>}ª¨¨€ý¯¯ïÛ·oçÍ›7nÜ8à8 ›3gJ…½|ùrggç)«¨Tªžž^EE^8«¤¤¤¨¨èÀ†ùûû¿yó¿"†ïikk[\\¬««éää4bÿþû/Ruqq6l:=ÕÓÓ«¯¯‡Õ%òºêéé‘H$ü|:jÔ(àv{òäɤI“fΜ)¤ÚÚÚ 1%¼xÁš››_¼xS^BB¢÷G9r$Ô aРA#FŒæ¨¿þú«¤¤dÔ¨Qh‘îåå…ôrnܸ´ž ^pìØ1 ¸[uuµ··7¢(ÍÎÎ USSÃËM ‡††…B!=ܾ}/^€—Ìiiiyöìl΀IÚÞÞ¾¤¤äÓ§OЬùùùhv‹ŒŒÌÌÌÄóF«©©q¹\X¥"èèè())…‡‡ã ¡‚,ëàÁƒ‚‹b<ôôôÐCÊÊÊÚÚÚ@ ¸aÆ¢¢¢Ñ£G?yò¯ jcc3`À€áÇ/X°B`h4š§§gGGGxx8ÐzææænܸqÇŽÕÕÕ`€IzåÊ•999L&Ö3fÌxýúµ¾¾> À5kÖ”•• 2>”ÅQ ›Í†Œ˜˜˜žž^ii)ay§­­MèExh=aƒ.!!çÒ ÊÌÌ”’’UÐî >}'ñª ø V]]]bb"Ô=***((ÈÆÆ¦   ¶¶ŒbVVØæ¤¤$ø7nüôéA¬'¡©©)..þìÙ3B9ajBhnnމ‰yõê†añññÞÞÞBZóÇ›%%%kkk‚*è´iÓêêêÀI¢®®Žß8 Á¡C‡€føäÉ“ü°fÍ6›½}ûv*•J —¯©©ÉÊÊÿ̸qãJKKáqªªªæææO…¾¾>â{þü¹ƒƒC÷¨ddd¬­­³²²ð+î?þøããÇðÄAƒ!%ÀÒ¥K>|Wÿøãü®ÙËË«¨¨hÿþýˆP9$$$33‹‰‰Y[[—””àw9´¶¶~òä Þ#žžN¡P„§ƒ³öÂçÎNu …‚×û‚ØØX¨×üùó‰ ä‚‚‚ÆŽK`âzðàŸŸx™¼¼¼\]]!cï…Nüúõkäd«¨¨øøñ£¥¥e÷Õ8ÀyKÐðððððð`³Ù°FÆ_êׯŸ½½=ÔENNè°ÉÉÉ×®]344D>Ìôôt111ü644444Äïì±ÿ±QÀOõ÷ß ©‚–––––VGG~qƒt:uuu…È#ùêmÛ¶kô;±jÕªGÁ'šŒB*ÁC!Þd2yÖ¬Y¯^½BsŸ>}ºwïÒ«©©©¯¯‡Ç ‰ïöíÛªªªèÃÇÇgæÌ™Ý]ŽÚÚÚššxbIII^^~.ÈÏÏ—––†«iiit:Nœ8±hÑ"mmm///¶k×®cÇŽ}O ÌzænâÅ‹³fÍ"‘Hl6;..aúôé(h`u`÷#%%•ššZ[[«¢¢…îîî¶¶¶HÔ ..nÚ´i …ÏçGGG£C:~ñâE´ÈÉÉyñâ…ƒƒþlïÛðêÕ«É“'Ãç}òä ^È®­­-==Ú¨±±ñÝ»w°MLIIyðàÁ¬Y³JKKoݺÓ.‰Dš7ožà˜ì&ÚÛÛ]]]»4EÝDPPPcc£……Å%j¶lÙbdd„Ì †jffþ÷òòr!º«¹¹¹òòò !ñîÝ»ºº:AAtvvÆÆÆ aW›0a8$0 +.. Ã×ýù矈 8,,ŒL&=ÚËËkÅŠ¿æ×"..®_¿~³fÍoíâÅ‹—-[vÿþ}h…ääd33³_íwíÚåé鉜1x 8ÐÎÎ^¾¶¶¶Ëßüijœ.QTTÔÒÒbaaaaa ý~n•jñ?<{öŒÃá G“………‰‰ ^û¯¡¡!;;’òòr:+))‰×_IOO—““IJ …baa!QIIIuuµ§§'úìxI<8ΣG„ÜVEEõ")))t<3f ºZZZZ]]}âÄ %%%h¿©ÉA‡B¡À¶žžj…oSºû©Ø±cÇ”)S,,,ºœš`rƒ—‡I855•àAéé]Î7ÀÙÙyÇŽ„x PøQHMM-..wnn®›››¯¯¯ j=ÙüáÖ{Ê”)Áãââb83ïììü±•ýxñâEqq1A;òúõë***ß YÙ%îß¿_^^ŽaXuuummíåË—Q8ÞÂMŸ>þýc¿ÊÊÊúúú迟>}ºsç,)òòò$$$† ò ‚Ðߌ7nÔÕÕ-]ºô‹Ó¦M›æÎ;þü/Ò5õïß¶§òE˜šš¢CLë>SRR¶lÙÒåÕk×®ihhà&Y,¼gYYÙŽ;üýý»£Çúë@MMMÐ-‰Îb‘ïƒçÏŸ—””@ÀTgg§••a‹/++ ]HNNîíÛ·555ø³çßÃä$$$Br1 <Ñ‚-”ŸŸ_wN i4ŠJܽ{7Äö`VZZjnnÞeÇ={vϤ‚^¾|¹½½µ±`õ¿ˆˆˆˆöövtäð³Q^^ž““#¸Íê’Ú`ß¾}ëׯ´èÔÕÕ9r=Œ9t K$''wIé?|øðžI]¼x1Ì `\i4Ú×ze;;;mmm¿YÑxð`°ë ¯^½rvvž3gNSSjV0u7n¼víjV”¶’––¶téRüþ믿:::H$ ëêèèHOOŸ8q"Z;£¤ €úýVÿ­[·BÈ2,ÙZ[[íììnÞ¼I£ÑÜÜÜàµUUU¡]&MšTYY‰šuÆ ƒFÓýóçÏÕÕÕ„ƒÇã%$$â¾vü£…°‹‹ËÔ©S9ráÂÀÛ½{7J/[½z5$LjˆˆDDDHKKŸ?ªÓ¿ÙPUUÕÑÑÂ#FÀèüùóoß¾ …Ó§O‡“˜Í›7£–µ´´ì¦½‘””DÆ]bÚ´ih´Ž?6ÍÁÁÁbbbK—.Ý´iz¨……Å„ ðŽ))©I“&AÜÚ­[·Ö¬YÃápDDDBCC{l: ]¾|9—Ë¥P(ÎC§ÓÝÜÜ®\¹¢­­½~ýzxymmmÙ9sf}}=€œ£‘‘Ñõë×}}}1 [´hÑ3êzx·6ššš››·mÛ ¨¨8}út¨‘ººú‘#Gú÷ﯬ¬Ìãñ~à;|A¢Á`ÔÔÔàCœét:Þ 4MúÅÅŵµµØÿbva§¢¢Sff&˜V}}}Xéðùü”” Ã( Š]imm-))!,6ëëë!J›F£T0ÌÈT*µËà´ÜÜÜÁƒ|…H´µ¶¶ãWÖ ?~Ä0lÀ€àÛc ˜’JJJ`G¥¥¥…2rssAZ!99Ã0QQQdÂÛÚÚà0LFF¦ûÆÆÆ††0]6k—•ÍÉÉQSS#|áÔÔT.—K"‘PeÙlvnnn—¢ MMM©Sá„7‚Íúþý{8?~<‰Dâr¹PÙöövXnKKK£îÔØØXXXˆa˜’’Á–—••‰‰‰á h4 >dddŒ1åEòùü´´4!‘f‰6:ÞÑÑì\YY>Œ?p ÛiÔ¨QñŸžž±y†¡/Ìáp aKBBùv œÃ)**¢uOMMMii)†a***Ȭ ØÏ¹¬ÇŒƒz‰6‹UZZа‚£µ¢¢‚L&Cx‚‡feeikk£PièNd2Åõý<à%ÚÞ½{ÇãñDDD YîF+“ÉO€¼¼<škkk!\YYV;>dÈ”ÜÚ“ H´åä䨫« f ©©³³óÇ™ÕÚÚ D²²²pÌùÃ%ÚúTAKô©‚þúèSý-Ч úÅnܧ Ú‡>ô¡}ø-ÑgrúЇ>ô¡=„®ÃDDDŽìßÝ!»¼^¦ *%%Õkš j$..ÞËjD¡PzÓPjmm%“ɽ©F0'HKKÿ@²_¡ãIJJþf"‘H?JêM˜É©««óóóëM¦µ³³…Æõ´··?|ø°×Q ÃØl6‰Dúáyÿm¯ãr¹½i(ñùü¶¶¶^69´¶¶÷&ÉàöööŠŠŠ%:7`À€ï'vù‚É‘——GY/½²²²~~~ .ì5½JJJêñãÇ£Fú½Rç„@LLìýû÷d2ù{è~-‚¨hMMM^^P¾öŽå3™L¾ÿ~oŠ-’‘‘ ž3gN¯ ””|ñâ…ššÚׯýw ²ú‚÷¢Ÿë[½¦°ÿ Q‹‰‰õ“#..N&“)J¯i&qqqQQQ2™ÜkjD¡P¨TjoªD¬õ¾ÉjÔ›†Òœ bí¾^_ø@úЇ>ô¡‡ðY“ÃçóÙlvTT’Ä0ŒÇã]¹r…F£n—ËÅ0ŒËåîÞ½ ïÝ»×¥Iäp8#GŽD»³ÖÖVø½®®.$ôÁãñ\<ïÖ­[ðKWWWô¸C‡Aa`` <®³³såÊ•PøöíÛ.™Zº¬`ZZžY‹Çã…‡‡Ã}á‰\.×ÙÙ®Þ¹s½|ùrÚÿ ¨¨i¤gذa4màÀ(¯¬¬ ~fdd„jýìÙ3(ܸq#Hnp¹\(<}ú4á?,›Íž0ažŸÍf8F£ 6 =(33î¹hÑ"¤»E¨Ý©S§Ð—Ëutt„? Gß™ÍfÏœ9O±Êápttth4Ú Aƒ ²|>¿¸¸þvæÌ™ð<ïéÓ§P¸iÓ¦.ßAðD333ÈFOÔÕÕ…[¤wø|~NN\š?><=—F£)))íÝ»*èéé …W®\A\»v-ÆÅÅAGâp8Pˆb˜L&”èéé!²Ú.Áãñ@,/8Æår÷îÝ w EO777‡Âôôtôt6›­¦¦†¨JšššQLMM1 KHHèׯ*®3??¿þýû£Â .À£·oß%<øÜ€e³ÙmmmøBüØIJJÂ3%ß¿ÿÅI'''%%%t(¯:;;ÍÌÌ $//ê €²¿{l6{ðàÁ 6HhP¨oll,^?…ÇãÀ{>|ÍNÀ%O£Ñ€µä?œÜa옘˜*űÙlÁTz>ŸŸžž/onnÞÍúÃLNjjª––ÖÚµkñ…AAA………555555HÅÕÕUWW #""ù[[[§OŸŽÏµÖÔÔ„ß¿xñ} ´´´€ áÑ£GIIIðKUUUÑñôôTTT„Âäädà;Y»v­­­-îÛ·?!~¥¥¥ZZZˆ¥ðäÉ“À}F…Æ0ìÀC‡…«‘‘‘@Ò %ÅÅÅüñœçOž<Þ¼ªª †M}}ýœ9sà—¾¾¾³gÏÆ0,111 gÍšŠÂ~~~5ÿ‹ÅòŒÏaÉ’%ZZZx= ÃÔÔÔªªªjjj!wúÓ§O7n„{îÝ»WPšÃá\ºt ¢@³Ž5 þäÁƒ p³fÍ---Áö„ Þ½{WSSSVV‰ýuuu ,€¿õöö†‰)>>UÍØØ˜ Æý9ØÚÚjii™Âرc_¼x·"°ô—––ÚØØÀ¥@B_¾¢¢1·_¼xQLL Ê ÈÞÞÞÒÒ ½¼¼ÀΙ™™Cá”)S €GKK Jž={&<9îîÝ»ZZZö³ãÇ£¾ Ì7+W®Üµk:88]”)S´´´QCJJJ¨“ Á§éÓ§£B(ܰa*õýû÷@IHHhû0mÚ4---¼Ô,ƒÁ@´R?~ÔÒÒ"èWa¶téRô,¼ÖàÔ©Sè*ÐÅ®\¹ÒÃÃJþüóO`}ÍË˃’œœÉÅO…¶¶6LnYYY„Å>hiiá520 ©\xU999;‡ÖÐÐ@“A;±‡aee%8Z1 c±Xººº‚¥°°ÐÁÁ^~×®]øÍ•J•뤥¥%%%» nú,ÇÚ¸qãÊÊÊmbbb"""ˆŒ¯å'3fÌ Ã/ˆà& ¨Ë‡ZVV–’’‚X\¸páÂ… ;::X,ǃ(F .**úÍ´ÐêêêeeeYYYH:>(•J…› jŒJJJr¹\¸J¥R šðfff¾¾¾0BØUcc#ŸÏB(b`````ÀápZZZ8Î7 0à“'Õ+((466â?ïPYYéââ‚Vµ’’’¨²ðAÞ˜À¸ Ì+PY‰$++ Ëb±¾'Xx3 <‰òòò È“Ÿ—L&KKKã[[[‘ $$äǧOŸÆ0lëÖ­†µµµµµµ‰ˆˆq|ÜÞÜÜÌåråää¾öDpÙ²eË–-»zõ*~'Šv<, N}>÷ç`n ¼Úhˆˆˆ îg‡ƒÚ ‘൷·C¡„„Œ àc±X‚ÝÊxf ‰„ú’¶¶vYYYjj*aMÖÑÑÏdµ¢‡’ IDATXa±XpUZZê‹4à›››¥¥¥ñ3ŸÏ9rä÷K+ýèêê–••œ.Þ¾‚|Q{{;ŸÏ‡o‹Ÿ"„7k˜âÉàuuu?|ø DQIø^"Â=I=jnn^¹r¥ í×å,^¼XMMmêÔ©S§Nåóù666_ü“úúzyyyB¸Þóçÿ×ÞyÇEyeÿ™>ô¡H)AŠ0 MŠ.  X£&Æ–¬.fMôÃF×D7vÝ`%I (ÆÄM &Š10[$*Ez¯" 30ÃôöÌ<¿?î»óÎ" * Œçû<ó´[ž{î9÷ÜsrÐMºå÷}œ .DFFr¹\”éråÊ•"‘]>nܸõ¬‹ŽŽŽE7¯­­í6_³fMcc#ú5::Ú0‰@ °´´ìV¿qqq‘‘‘(á|ܾ};22ò?þ@0šp¹\.—ûlñׯ_G/¹hÑ¢þDPW(8Žw×®][[[‹î‹²#÷AlllLL̵k×0 ³±±IMME×&''ëcHgÏžMHH@÷ï6Ig³Ù{÷îE?}ùå—†Ù>”J¥F£é&ÿ¾úê«ÈÈHWWWÃŒã=òÆoDFFž>} ¦ööö¨PܰgC,oÛ¶mæÌ™O•Ë‹D"Q©TTÆ7ß|Ù«étz]]:¸aÔÑÔÔôòåËèàÑ£GQ TÄŽ;"##_}õÕ¾3é177ï;_“ɼ{÷.zÖîÝ»QÔA=–––GŽA¿ž?^¥Ro¾ùæÉ“'õÁý0 kooï†ßˆ\.OKKÓét(ÿìªU«Z[[Q1'L˜ÐwùŸÏ·³³ëqÚ„¦/¨WëõоE©J¥ÒétÓ§Oï1ÆÓ‰œŒŒŒ†††ŠŠŠŠŠ ‰d¨õH{{ûòåËSSS»Eû A7ÉÌÌ|b«,X° ¢¢‚Íf£ô‹‡¶¶¶F—ö?)ÅÃÿÒ[*$ ³²²ÐÍ}||º%Éþä“O<<<Я999†¬ß|óÍ;wÆ?EÆÉòòòn)œ{¬+**bbbPŽzd¼š6mÚ´iÓVñ´–——WTTdee=QTÈd²ÿüç?­pèINNöññA…ÍÊÊêÑüÒM×ÑÖììì|뭷е»wï^¼xq?ß\(ꛩÛ"!S¦LÉÌÌD÷ïX³¥¥eÕªUè§?üÐÐ2|áÂ…¼¼¼n®uëÖUTT444<1hqNNNEEÅÌ™3ÑÀ]PP€Ú¨GûC? ›œœÿüónj\``àã¡á†T*=yò¤R©Ô'2Þ¿¿‹‹ *æ­[·úŸp}hhmm]°`ANNNû^ÇŒsèÐ!Ô«7lØÐ‡DA[èz;á÷ßG[†{üupóå¼õÖ[6lÐétuuuZ­¶¡¡ÁÚÚºÿ»¥R©\.¨È• ,@«y666ÙÙÙƒZðÆÆF—'nÅR(B¡ðq÷ù„„„„„ ÃÐòÕ ráÂ…?þøcÛ¶muuuJ¥R(öa ì±°®®®²)õĉÈL‡V;*A\o#>AúÙ}OV» h4Z•år¹Ï jwvv~öÙgOLþ8:®¹¹¹[<ìû’H$Òh4Ý6oñù|ƒa¨í%%%Ý»wý}æÌ™g3¹H¥R™LÖ›jòøC1 {ôèч~¸{÷nÃ0ê#‰DòÃ?H$’>FçáÆôéÓ?Îçóù|>Aõõõݺ{{{£^}ëÖ-´Tß›¢ƒ\*zTûpŸ2eJocÈàŠwww½ãŠ@ XµjÕµk×ú¿bqõêÕ¬¬¬”””y™»wïÒ¾œ¦¦&Õ­3fäææ>qàÎÏÏ?tèÊjh£Óh4CfU°²²ªªªBÙ>:;;u:¿¿L¦z¦NšŸŸ? Ñ5Ö­[7H‘¤Åb±T*EQôõâM£Ñ m oÙ§Û°XYYù<)>ûì3ggçnþ2ý/ËôéÓ»¥/,,Ü¿ÿ¹sç þôÓOuuuhñÆPY^ºt©þÈ—_~ùü5üÛo¿]¾|¹7ËǾ}ûƇ&RzV®\™””ôx5VUU ÿÁ/^,++ëc\†xzz" †a8Ž/_¾ÜÐì¯V«[ZZº ¡Þ‰D"‘_ѹ}û¶R©ìc¶ýt"ÇÖÖ–Á`è^¤°Ùl…B²X,4ôÔÕÕ9::*òçÒ¥KHÞŒ7/‘Hú¥Àb±,,,ЙjµŽŽŽ"‘433CÃú+¯¼ÒÑÑŽ=ú™Ã%!w t…BŒËÈ/9+•Jô+:]õÞ{ï%%%~$§²²ÒÔÔ” ä3F¥R½¼¼Ðµ­­­ÞÞÞ†™››5 ‹Å(™Êõë×KJJÐä—L&?ƒ’‡ª—D"Éår4‚3 777ô .—‹’©ˆD¢®®.Ã…„Ï>ûL¡P y3zôh}³öqüüüÊËË‘[JC¥R===ѵ=BöF ;;;}»?Ofx__ßêêê¶¶6TX ôZmee¥ŸŸNwwwGOikkÓ§ùý÷ßsss¿þúkýMìíí=z„Îd0(µ‰›››P(DѲ··wCC²§ùøø }nõêÕÈÒ+‹Ÿ-Hkk«þSrssc±XcÆŒiooG]]]{óh P(ÞÞÞúÖÔ÷%{{{tP$!?I[[Û‡¢ƒ$iÔ¨Q†9;;Ëd2tÐÚÚºŸs2™¬÷X{âתR©¾ÅårQ=z´\.×?T¿pX[[«_ðõõEÇÅÅ544 ñpìïï_ZZJ¥RU*JA¤V«ëëëû˜X} ¢l6%'D¾ŸÎ;C†áŒÄÁÁÉÇ«««‘³Æ¶mÛÐ$¬½½½oÙÓ£¢ƒÜ ¢¢¢ú0Œnß¾|SRRÞ~ûmÃ>¤_]ÏÊÊBܵµµ¡ ÝÜÜܰcccõ{ã7PŽÎwÞyçØ±cèàºuëíe×®][·nEQÔŽ9Ò=ÝÔÔÔpZ©âìٳ׬YƒŒø:néÒ¥«V­:zô(úuË–-úeŸnyHÏž=;þ|‰DB"‘Ð++«ôôtägéîîŽ&ƒAAA+V¬@7ŒÝ¼y3*©N§C—/_ŽR¯>QÆOW¯^>}:AÈ;ÃÙÙyÏž=+W®D'£±²´´ôÆh áää¤_×ýç?ÿyäÈôÛ¶m3´ãs8C¤ÌÌÌyóæÉd2 …‚Œ×ÖÖÖiiiK–,Á0ÌÃÃùy‡„„üýïG7Œ‹‹ëz¡§[ gdd,^¼yå!§|¥R™””tæÌ''§¼óÎ;Hê³êÚØØtû„–.]úí·ß¢÷YµjZPÙ¾}ûÇ|êÔ) Ã8€:ð‰'–/_Ž\xúé'TöË—/#?:›þ,¹ÙÛÛîÒpqqùé§Ÿrssѿ۷oŽŽÞ·oßúõë‘\LII1Ü•¬7]ZXX|ûí·h…ÌÍÍ yg$&&¢âLž<¹¢¼þúëú¾ôöÛo£î·víÚƒ¢ƒIII(o„„„èjnnÞM…2333üZcbbôßÎ믿ž˜˜ˆaXvv6ƒÁX¼xñ|pèÐ!ôëG}„|||| #ž:u M°BBB†>PÈ¥K—^}õUFÃd2‘ssWW×Þ½{õohnnn8­´µµmooG%BÝ)!!!11ñË/¿D7nÜóÂÅŒ¯¯ïãÞƒ˜Aöq™L¶k×®ï¿ÿÞÕÕu×®]¨á»­Æ=®èÉänŠÎ½{÷Ôju>z EÛˆR´  EÛˆR´=±÷–¢Á`èt:½¿IWW×;w‚‚‚ô Š¢ 3´^.,,Äqü‰’Dð, P¼† …BŒÖDûº¤7 ºo{ÜH„F£a „J¥M3! …bd%B1}¦×ét:#ŒïSØQ©Ô¡õŠ…B!“É%%%Aô¸hÔ/‘£ÑhÐb©Ñ@DKK‹1ea’Ëå|>¿ï€’# @À`0Œ©ãµ··+ c*‘R©ÄqÜÈÇÛÚÚŒIŽJ¥ÒŽŽŽîú¾…BAÑ ýýýŸ¨âô*rT*Ucc£‘‰ÃWÆññ·µµuuuM‰D"Ñã™F4‰D*•Ó§„ã8ŽãF68à8ÞÜ܆ˆÅâ{÷ŸÁÁÁ¦¦¦´W‘£<ÎÎÎ*•ÊÒÒR$eee=Ú˜bâzd2ÙíÛ·5 Žã ÃÆÆfÀŸò5ƒáäädcccmmÝÙÙyùòe777‡Í`(•ÊßÿÇqµZE£ÑCØôKä胃ƒ•••½½=—Ëýõ×_===}|| ©F.8Ž_¹rE§Ó)•Ê)S¦P(kkëA}âSD`2™L&ÓÜÜœÍf·´´üòË/ …ÂÏÏš `dAÄ/¿üB„L&›1c™LFQ×›§Ž±†™™™««kyy9:XTTTUU­ ¥)*ž‘H4gÎ2™lii9díAäôÿ H$N òõõ…&† cÊ,C ‰DJHH@Yמx¦F£,‘cnn/•Jû CšL&C+C‰L&ƒJ€ç‘:ýê0A÷¬ ƒ½v¼T‚­W‘#‘HRRR Ž€âõ×_711éA䘚šÎ›7*,-- …Þ4Gí¦Q©T¨#`@ R©(úÖü€!D"‘ r9ˆ¨D"@äÖ¾ÂÛ…‚‚ý¿NNNÃ°æææššww÷1cÆôvmAAP( {Îä?\.·¬¬LÿoßF¤Èéêê:qâÄW_}ŠaX[[›••Urr²¿¿ÿ… ¶mÛ¶qãÆM›6õvyRRÒ­[·®]»ü<ïwãÆÄÄDWWW‡ÓÐÐÀáp¶nÝêáá-`<"§¦¦fçα±±?üð†a?ÿüó»ï¾{ìØ±÷ß©UUUÕÕÕÞÞÞ%%% èªÐÐP6›ýçŸvtt`vóæM¼¼<©T:mÚ4&“yéÒ%ÇçÌ™£Óé.^¼ˆ®233‹‹‹ëã-§NzàÀ‹/îÚµkÏž=›6mòôô,..nllD'„‡‡;::Þ¹s§££#::º¨¨H,ÇÅÅ™™™avùòe”ÕŽL&Ïž=Zà…@¡P(Û¶mS©T¦¦¦™Î0 S*•UUU<ÏÊÊJ$±X,¥R9qâDN÷ÓO?µ··“Éd…B±cÇŽ7nðùüS§N …B‡“}óæM™LF¡PbccW¬XqüøñwÞyÇÂÂ">>þÇ\¿~ýéÓ§W¯^M"‘àáá±ÿþ   S§NmÙ²¥¶¶vùòåûÛßbcc.\ˆaØœ9sfÍšUWWçèè¸cÇŽ´´´ˆˆˆ”””¢¢¢÷ßìØ±†mݺÕÙÙùñ›kµÚÕ«WS©Ô™3g=z4>>þÞ½{OUŒÓ§O_¿~}Ù²eiiiaaa_~ùeII ú)??ݺuNNN[·n …ÿú׿ärù_|‘ššªÑhÖ¬Yà…Зû€——×_|QVV¶}ûöU«V………%%%ýå/1þøã¸¸¸7Þxc Š´~ýúÇåÜwß}©€†©Èioo?þ¼³³ó¬Y³>þøã>úèÚµkÝDΟþ¹k×.2™ìëë+‰ú/r:¤P(ÈdòÚµkmmmµZ-Rž‰ªª**•ºråJ&“ ­ðBèÕ°ÖÜܼqãÆcÇŽaæïïÿ׿þõñsþüóÏäää?þøcÞ¼y{÷îíÑ9íôéÓB¡ý}üøq•J…a˜N§;zôèþóŸ={ö,[¶¬³³óàÁƒO|ׂ‚‚»wïFDD<ƒÜ®]»>ùä— }À‹Ôrœœœ.\˜ŸŸ„AYY‡Ã‰Ç0lüøñQQQ¹¹¹†…‡‡Ëd²œœ¡Pèîîîååuþüy__ß… ÖÕÕ}ÿý÷,+!!áøñã_ý5…Bѧ#åñxiiib±˜Åb±X¬eË–õñ–EEE¼sçŽL&Ûºuktt´\.ÏÍÍÍÎÎæñxUUUsçÎuwwïñÚÄÄÄ}ûö9r„J¥~òÉ'ëׯ‡Vx!ôê±fii¨Óé´Z­V«µµµ]°`ò0vvv3fŒV«011™0aBttttt4º9•J:ujbbbo¯hooÇf³—,Ya˜§§'›ÍFÏ;vlbb¢——RÈ¢££-,,0 ‰ŠŠŠ‰‰¡R©8ŽëtºÉ“'ƒÈ2ºy¬‘ètºR©‰Dr¹üÒ¥K ,€:KKK©TªÓé<¸{÷nˆ±  r9ˆ‘€È@ä@ r9"‘€È€!á’ÉdKKK¨``Ô2¹W‘#•JOž< u 3gÎÔ§cþ‘cbb2}út¨ `@077×ét=k9$ÉÔÔê(‘ƒòå Á}"@ä rã‚úÌW2™L½ÂðÇq™LFÄ€ßÙÔÔ”N§kŸÐét …B£Ñ øi4š™™Ù­–—¹;i4™L6w677§R©#¨¡R©”Jå€ß™D"YYYˆñA©TªÕê¡9ú¶É©S§¦OŸ>xcܰ-ûó ÕjïܹC&“ýýýõ»YÕ¢Ñh¾ûî»™3gžͰ­•J•––ö·¿ý úƒN§«««+++‹}9kC«ÕÞ¿_¥R½‘£T*U*Õ0¬šÌÌL±X<¨Ë僡 ¼XŠŠŠ CCCGâ”yð8{ö¬D"y9»ÓÉ“'»íæp¤R©V«þÝ µµ5;;ÛÍÍmP¥Ú`\ÏCiii^^Þ3Ë Ör€!D"‘ÏÀP¸'–••=îSH&“Ÿimm]PP ‘HX,òÇ …vvv#¢BÚÚÚ8íââÒÔÔ4{öìÖÖÖ_ý5%%eñâÅ/»ÈA|÷ÝwNNNèï›7oº]*м¼< ÃÄbñƒ‚‚‚AII úÕÉÉÉÛÛ»¥¥¥®®¹'655yzzŽ=zDtvéÒ%ÔK8Ί+îß¿/‘H Ð ¶¶¶þþþ<¯ªª ðGÕ××S©Ô††wwwÇ>|àëë‹aXiiigg'º6$$ÄÂÂâþýûr¹|âĉH¨ßºu ðèèhÇÿøãt¦™™Ù º>,‰¤´´ÇñÀÀ@‹UVVÖÖÖfgg§V«õ3S[[[‰ÔÑÑA"‘lll:;;Éd2ÒqïêêB§Ñét”J¥RéMLLFâ¦Ôëׯ/\¸pÆŒ§Nâóù+V¬8vì˜þW¡PX\\Œþvpp@zúpÐÁ1cƸ¸¸ÔÔÔ´¶¶úøøtvvòùüqãÆ ÕY©TZXXüå/Aö€ÜÜÜÊÊʰ°0 Ãx<Þ£GìììD"QSS“¡Â'•JU*ÒbÅbñãnè!!!h¯Õ•+WþüóÏÙ³gÿnÐÚÚzðàÁ«W¯nÚ´iÉ’%ß~ûíÙ³gkjj %kGGú;88õÿ{÷î) t0**ŠB¡èt:4V /"<<ܨDŽ!óæÍc2™eeeè_‘Hôý÷ß#Uñܹs®®®ÇŽ;~üx```[[›½½}rròï¿ÿ¾eË–ùóçcöóÏ?ïÙ³'11qäÎß¿ÿþûO>ù$,,¬³³“D"üðCFcgg———·~ýú¥K—–––._¾ÜËË‹Éd^¿~===}Ö¬YW®\Y¶lYll¬R©¬ªª:qâ’èƒÊйäää\ºtéÒ¥K†¹ŽŽŽÄ0ÌËËkÇŽÅÅÅ{öì ËÈÈX½zõµk×ôS¹Ÿþ¹¤¤dÖ¬Y¯¼òʲ  ‚_»vÍÔÔ4&&¦¹¹yÓ¦MÞÞÞ[·nÍÏÏÿôÓO£¢¢Þ{ï= ÃfΜ™€®ýá‡jkkgÍš¥7|úé§ùùù[·nÍÈÈðööÞ´iSsssz=1â ›IDATLLŒ©©éµk×Ôjuvv¶N§›9s¦R©\¾|9‹ÅÊÈÈ8|øðÇ7nÜ8¢¿4.—keeN£ÑòóóQ_"¢­­-$$D­V)ŠÒÒRssóðððÀÀ@>Ÿ/êêêFîææÖÖÖöðáCc2=UTTìܹ3888##cíÚµ7oÞLII©¬¬äóù7nÌÈȘ?þ©S§ÂaØçŸ®T*gÍšeoo?üKÇ`0BBB,--ëêꊊŠär¹———··7Òxêëë 5€G^+‹•JeWWW›Ö;::¸\.—Ë%ÂÁÁÁz¡C‡îÝ»·yóæŒŒ __ß-[¶444¬[·ŽËå.X°à»ï¾›7oÞ?ü Õj—,Ybjjš‘‘‘ššÊãñ>øà£Òr.^¼ˆb²õsJÕÖÖ–™™™ŸŸoxpìØ±[·n3gÎêZ­öÌ™3jµúÒ¥Knnnû÷ï///GsöÌÌÌÒÒÒ>®åp8ÿþ÷¿§OŸ¾víÚo¾ùFüÎ;b±X  ÷ïßõêÕÕ«WϘ1ãÝwßÕh4ß|ó\.GsÀÌÌÌööv#ø–8ŸÏGFEÉ ‰D î1è“……2'¶µµa&—Ë[[[‡óîî礽½=33óþýûèßøøxww÷’’’ÌÌLd¶Õ3~üx4±)Ec2™¡¡¡r¹¼¸¸8//ÏÒÒÒßß_oì­e­¬¬ÚÛÛY,—Ë%“É £›àár¹È-ÅÁÁ!88ØX;F\\œÏ¦M›‚˜9sæœ9sH$†a&33S(Ù› È9xð ~-§ŸÏåË—1 [´hÑøñã‘FßðÎþþþ/C^Ê]»va¶yóæM›6)•Ê#GŽüõ¯Å0 Çq}‡qtt4*‘Óÿa-i¥¦¦Ö××ß¹sÇÃ㛺3â077ß»w/ÒZNž<‰aؘ1cRSSÛÚÚrrrº ƒŠŠŠôq·÷ßÊ”)YYY|>™­“““Ï;÷¯ý ð£G¢) šå¥¦¦J$’óçÏ k@ÐÑÑaeeebbÂãñT*UuuµR©ôõõ533»zõj¢r©T*§wœµµµ ”H$]]]¦¦¦#Nä¼õÖ[gΜÉÈÈX´h‘L&;wîÒÞ ÐÔÔÔ¦¦¦[·nyzzÞ¸q###ãý÷ßOJJJNNFêõHD¥R!÷333OOO$9ººº]\\Ñ™µµµ•••†îÎ666555¦¦¦ún0Òñöö -///** ,,,,++«®®îã’ .ˆD¢mÛ¶‘ÉäcÇŽ­Y³9¶™˜˜¤¦¦Êåò³gÏ"/ƒ—Eä°X¬×^{íÁƒr¹|êÔ©ÍÍÍéééùùùyyy6l0¦‡µµõܹs‹‹‹ÓÓÓ«ªª®\¹²nݺI“&yyyEFF–——ÿú믭­­=^;eÊ”dee566~þùçqqqè[¼xqJJÊÂ… ‘'1•J]²dÉ… ÒÓÓ;::RRRV¯^=kÖ¬QEH×ÖÖ"ãZ¶··G–zƒáääÔÜÜÜÜÜÜ£ZÉf³…BaSS“T*år¹žžž,ËÎÎN*•655uvvJ¥Ò±cÇŽ¸žsøða …²víZ©TÚÕÕuøðáøøxô“££ãŒ3šššÒÓÓž'žìæææææ†ZÖÖÖvÅŠ!!!ŽŽŽ“&M2"<<<6mÚäìì©Õj;::A``àîÝ»i4Z||<êK2™,&&¦?3{×ÚÚêèèØ+ƒÁ@í›››{ëÖ-NÏ®Tt¶6j5JqíÃe€¾A)ÚÐßa8ÈÌÌìêêZ¸pá`l¿@[š ÷Æ ú䃑/¥h¡É Äbñ¢E‹Ãî?Ì»J^0Hùrz 0<Ñ'/Œ|9(EÛHI^Ðÿü–––—ó*ÕÚ¯w®úíj6UG`kHÒ:U§ Ä` ¹ÕB)(íT7íË!‘H£œÍmÙP5Àë²¶l‹QÎ3ß%‘)I"@ä rãây÷å466644 ¡p/ƒJee¥q’1D£zðèèèÐg|)<žðiÀ©¨¨‰;f„ÂÂB©T:üßsFµZ}çÎa[Ïç¹DNMMM^^Þ RÃâââ_Ä”Á†Çãݾ}»[àE ¨¨¨¨¨èåìN¹¹¹eeeÃs¯Å£V«srr Ó€–óÿÑh4t:}0vo ƒ”íeì-0š0H¡q´Z-Ažžžžžž#±Z©;¡½®Ã¹;éã' †úhee5a„Ô )&Ú*Îf³õ›»‡-ÖÖÖ/@ähµZ+++SòeC«ÕÚÙÙ”‚ÃNÇ`0cçöˆÇñ—¶;á8>üGØ¡ü@Œþë÷D"žÿYË!‘HæææP)ÀÀ¨5drÏ"GG1©·›õù•Úw'†jž“c7aÖ25­‘CÈJšM Ÿ;"¢ˆÜ–NFÖQh=i9†Q¨tÜÚcçùºþßÑ\Rm&o‚š0zv¨ÌÒW&äö÷|k*õ’d’ªkj&Æ¿¶<­ì¿§Z\Ýÿ7ˆwÓL`k %Œž»íÌœ&ºN‹÷ó| •Ž‘H†u4–œýèõû7²¨n®®ÞCD¢Ðú»ÅZÚÙª”à ZÀè!‘H$2…B¦<í…ZZ.ູ¹Rétzuei`Ę׶Ÿ¡Ðèv¯Œ{ %K§Õéð'&lŒ‚xÚ+:K´õ¹¤y5Ut:DAÍͽÆúšÙ8ÎÙúãÓ<^g-)·RÔCC=¸s¤È*@Òñay/$/– ¸5U®®.$‰DüWj©Õꦦfçéô,‚À0ZÀø!‘0ŒL<͘_Y^îææJ§ÿ?'‚ÿŠÉÔ'IEND®B`‚saods9/ds9/doc/user/catalogs/2masssrc.png000644 000765 000000 00000611527 11332127303 020655 0ustar00joyewheel000000 000000 ‰PNG  IHDR&_ÄŠbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ ~Ýò IDATxÚìw˜UºÿOåÐ9LOwON0C¢¬aÇËUWEtw®UÁQLq”•Õ5 †‹zWTqEQE$ 3ÃäÐÓ=¡s®~¶¸:¸¬wýÝþ<óÌS]ýÖ9ß:ç­óVsº¤ªj0ôx<=ö˜Ïç?HGoÄ™cY²dÉ’å—€ Ô`8Vâ² Ñ>8Ž!ƒA›ÍÃð›åçç?ðÀEEE999h0\µjU[[Ûc=VPPAàýÿý£¿ùúßfk1K–,Y~H²üö¦wÿûžË8Žûáæ]ûÿÒK/Í›7a˜¡¿öÚksæÌ‘$IÛ£í¼­ýïíí}òÉ' n¹åÔãñ´··?úè£E"è[`>y[”¤/4ýË}X±³»/$R~®%Í ÑDÚbÔé(Üçâ8Zì¶·vFWä×·ù#ÊÜ-ݲ¬¹mÑ“H±v‹Eá`œ&qW޹ÃlŸÙ(-p „b +8í&YQ‚‘¤AGÚÌúîÞ C•%ƒí+Šœ=ý!^òr-,'Dâi³‘ÖÓ¤o ‚cHI¾£¥«°}U©»­g@’”B—-ždâ)ÖfÖãÚŒQ$–ç°¶÷øÛªÈol÷©*(ÉÏ Di†ÏµU" =MæXô]½!†F”ºÛO–ëˆp¼èv˜yA ÇR&mÔ“Þþ†"eŽæã…U–¸:¼Q’ \ÖDŠ‹'›YOàh_ FXÓÚæ9NØÈò¼£}ª¢–äÙƒÑTŠáV#8¡£ ‡ÕØå BYžßp| —æö",'ºrÌ‚(…c)“ž2èžþ0ŠÂ…ΦξÁöÃK\]¾€ ÊùNkŠáb ÆjÒQ$Þë8Zè²·yN¨ú¼æ®>EQ‹óìáX*™ær¬†BqšÂvsç?¨ú²G0Æp‚3Ç$IJ(š4ê)‹‘öô…^ì<Úqœ°¬Of}ògðIŸ?`Y6nÌ¿·…‡ HQAB¡ÐØd¶E‘eY3þ{‹Åòì³Ï.X°Àãñ ¡Pèá‡Æ0ìGS‡ èÝ/[abÒ©_ЛN¹,d:•ôõИªÃÕö.Ÿ$0¥¹ú†ÖîD">¶Ä~¸©3‹,²6wxÃáHA Gûúýf FU±³§ÈBž…ljëI&ãc¾µ[f?ÒÜDKœ†>`À´0Y`=Þ~ H6=ÚÒéM§’# -uM]‰D|\©½®©3 Ë3u{ûÁÓL°é¤·w€ÂµuûDŽ)wZº‰øØR{ÝÑŽX,6¢ÈÒÚé …"ùv:ööL$„CR‡§O•¸|}´Ý“LÄÇ–ØëŽvÆc±1¥ö†–îH$Zœ«ðû‚6=ªŠ\··UÅ#ÞÜÑ“J&G[ëš;ãñøøRûᣱh¬Âmôô¡\3Á2©߉*&jíò lºÂmÔ„Óìc±ªBK[·/ çÙ¨x,îëó@"rGw¯"²…9ôÑ6O"Sj«kêŒÇb£Kl­Ý‘H´È¡ Ãý+YèêéCT1ׄ7wô$“‰1Åš}|\YÎᣱh¬ÌmôöùýÄólÚãë'ÙB#m>–I Ï7Õ+±œÃM±h¬²ÀÜÑÝ …ÝV2™ˆ{ûüzШÒÞÝ+ l±CרêѪ^6ªØÚÔÞG st¡P¸o `¡X:=}°"¸ÌdS»'™LŒ)±×5uÄcñqåZFÑR—¡·ßï÷‡rŒ˜È3ݾ’m4ÒÚéeÒ©ª|ó‘æcU¯ žoêìé ÃYŸÌúäÏã“o¿È³ÿyf9˲?ÚÈÃ0|äÈ‘ &¤Óim§ € Á€‚a8cߨØ8fÌ–eµcUUûÊ Á0ÃÚ·“&MzàP¯×[PP‰DµöƬÒiÕg²ï¤S¬XYhÓ’È)Ü¢Ç!J²B4-@¸­´¢‚`œ$!i\QÕhŠO±Š@.+Nði^<Ï.$†Ød(Áq¢œÙiÑfgE9œàDY±›h@mްìs;ÌZúŒ4>ºÌùe}M`gŒ(Ú×èª:¢ÌÕÖ‰&¹Ò<;ÃË]ýQ·Íh6êt ˜hbDiîÞ†‰MUüy]7Ž £+òê;)V,/tD’œ7/t˜I’hìXôdyAÎWG½z Ÿ\YðÙán GÇ /8ÐÚÏ ÒðâÜÞpj ’*vZŒ4{C9&]¾ÃòMK¯ÂÇ”;¿8ÒCØÄªÂ¯ŽúEQêêè‹ElIž•ξ¨Ëj°™ ‡ÛûM41ò[a“Gï®ó 4ºÂÝØL¦…²‚œXZèñÇ rÌ4M6tÌ:bX‘c_£WOâSFì:ÔEâè¸aù[8AV”Ûeúé"§FæžÝH:­û›3Â<4N¬,üúh¯¬(U¥Î®X(Æ”¸m‚¬vôFœ½Ãj<ÔÖo¤ñQ¥Î½ =:›<²èË#^£ÊÝMžP<-”ä$XÑ3ËÏ1éõTC§ß¤#††MýVØØaù‡ÛX^ª(r¢L_(Y”kA1¬É´èb·­¶Ég ð åÎÝu G'Tìoê•d¥²Äéñ'‚1¦Äm“T¨ÝεèvÓÁÖ>MØž†šÀ&(ÚÓà…!0²ÜÝâÄR|Y¾=ÅIݱ<»Éh ë;ü&QYâØ×àÕ“Ø™£ >;ÜM È˜ayuíþ4'V:Bq®7˜,̵à8~Ô´ÈÒ|û×G5a®Ïëº)?¼à›–~A’‡—8½Ád š.vY³>™õÉŸÇ'4É$àGŸo2|fûPGðW÷žÐêÞyùÄ+¦ ýÁÔk>[’s÷¬3lFê³:ï£o|uÍyU7V¦ILÑñz½ˆÛí¾á†8ŽÛ]ßûÐkû:úã#Šìf= Ãpgüñ _¯ÿ¤±Ôe)vš!ÚüE i°’8öŸ“ '—ê ˼7Äèõú%W›Pf«oë‰ópÃxåÔâ T™K8­ž@’¦È».ÑéñöEy%TŸ–¿b§qιE mž8¨0ªØ@×L+-·Ã# ͱLÉ)^%8§E—cÑlZ TQ®é`GÀ±—©­/ƉJ™ÛJð1¶Äi’U¨£?á¶éÍúHWÈf¤ sMûÛ:/qšz#ª •ºÍýQ&”àËÝfVTºÉ|»AGžHމÎw˜j[ý&Yœk:ÒF¤Ôeê ¦âŒXî¶$XÑJ: †5û¢N‹.ת?аèÉ"§ùPGÀ°—©£?Á r¹ÛNñýQ¶ØiTÔÞw[õV#}¸ó˜°oÚ4‰—8ÍÍÞˆ¬‚2·y Ê\¹ÛÌKj—?™o7tDCw$ÇD8Lµ-~#M9M ÝaAJ]&o0e„r·%ÅIÞPªÐa p¬É͵èœ6ö€YO9Íu! CKœæÎDš—ËÜæhJè‹°%N#!m}q—Uo3ч;CVU˜k:Ø ¬ØejñÅDE-s›16çÊ\&QV;’yv½QGÖw‡í&ºÐaÚßê7ÐD‘ÓÜà CRê2õ†Ó‘”PžgIórO0U£' ühO4׬sÙ ß´Ì:²Èiªë aRâ2wû)N.s›ci±7Â;Œ´öÆ\Vݬ;ÔÔ„j’Vâ2µõÆI-s›ƒqÖãJ]&Q:y6½IOé Ûta®ñ›V¿ž&Šæ£žˆ A¥.so˜ 'ùŠã*óŒi^õ†Ò…9:ÇÛÝ\šC^zæ”p ÷âñUžÎ6%;yŒß—œ>©ôݾ^`;»X÷~ë˜ÛL]Á*¾(ï2SŠ´õ34¹,dS/+Ê`J™¡®‡aEer™éh/“âäªM©tý×µSzuO&2M¿àÊIf=9ØøØ|j† ÆLwYu_0©Å›üãÿ,¹,ÏnІŒdËùôhlÉšvןO–™ør'Õ7æDuüè*˜ñ‡“‚ÝjÎuZÍ&…¢Ñ¨$JßNûÖ}ÕЋ„?Úõe<ž°âÂH':çÒ_{ÖB5*3|þÅ—­TUd»³èñg*ÎwBl˜ vÊÖQ¸EïøøÓÆt÷†ZzB×Íü9¿»*À‘:Â󯻼ҭ „"ËRÊ‘^Cá‘yÔWŒ  1ô7Ý 'aN²+$„Ór¡`%µ+,Úô˜Y‡6öq† s’û»‚ÆÑû:AU.ªi€Opjqc垨˜kÆInà))É!ö° /Ò}Ùž–hDUçc”9HBêKn AP[@0P¨Û‚×ù8 …GåSû:Ó €FÐ< 'Š\ÒB)¹ÀFð²Ú¬z̪Cú8C†»ÈÚn@иBú«NFA¥‹jñó1N-Î!œâ‰ˆ#FpÓOâH©ƒ8ÐÃB04¡ø;aG|lZ¥2˜’úb’Û‚#Ôô$šoÁûXGÐû:Ò² ʧö°¬*rIoD¦ä|.*jGH°è0»­ïãp©t“µ]Œ  ±…tmÃK`¸‹l ð1V)²I^鎈¦§¦~žÄ‘²\â€GFïéH‹ á¦ê{¹”JD(%õÆ$—ǨÕÏë¤À†ö²-¤÷Fò²ŒÊsÉÞ˜HÊùV\VAGP0ë0‡­ïå0®Ê#¿î:Võû»NÃdGPˆ2r¡H jwXÌ1`F =ÚÏRžK~ãa _Dïí`T¹©Æ>.É«%9D„‘½QÑiÆq nñó4Ù‰C^áqEº=iI…FæQuš0Ù“RžWÔL4ê4áYŸÌúäÏ㓊t™F‚ V›z"M=‘£ž°ö×Ðe%3)`°1‚ÀenKæ¯<ÏZžg¥ ‚¡Áö™mAT? ɲ*+ê Eß=å@Tâ2/ùí™O½³ßãO*ò¬÷þnªË¦Ï„A À& ûõ(»a’ËL!]>O¡‚U…"P=‹¢0ºÈºçhßÌI¹WŸg¢ ¦–öκ6Ÿ®È¤P58T ” ÆAfÊëë D“çL¬ Å™¶ÞÈo.>%ª Ú|Á|o°©¡>ʼnÞÃHð@BìH^Z}.b-@" ÜáRÑ@ISNôöEíBbÀb6íÞ_/b6 À ä™^Àà| Ü*³ÁÁ”H«%DTAwDv`…ém4ì2"û½…Ãù¤¡OT`{ãr„UËm0+‚ž˜’g„I >: åè`§ýÚ# 8ߌò  Xà@… ŽsJoB)4Áµ¥\=l×£¼‚™„óÌÇ„XàÖ€È)P¹ ¥J-± ² º"²Ë›h¤®O´R°Û„|Ó#P8\`FD‚Š-p_B3j™ f%ЕóŒ0#’†]F´Ö#8ߌö ( X`ODNð Â'yÕW L0Š@ÍÉ¡ƒs è7š0rÐ'à\`ÛC"+2f””ZlATu„d§6ÓÈáÞï„‘8œo†ˆ² Ùà„bÔ2+ÂËÀ•ÝF˜&‘†~Ñ®•p Ó„õŠ Xàž˜ã@…N ÀWòM0†BMÉ¡ƒt`"á|rÐ+à(\`;BRZå68Ê(ýI¥ÈŒj ÉN=lÕ!‡zE kUObp¾nˆ¢ •Ù`J ¦ÕR+"* ;"» °žDêû¿­úo…é!*´À¾˜å@… N‹ÀSò0ÁM~)GçÐÚŒ°o«¾3"§4a¬Ò—TŠÌ0A­A)WÛtèAŸ–õɬOþ«}2󔣨à• ïîi;¡£lÞe®¯;øÇ4™ÿdŸü”óeCïão}=8Ù}G{Ÿy§vѬ3íf]Æ| AcË÷\sæÃÿó%‰¡÷þnêˆ"û Ý| €ã¬ZÛЧÚÅt¤«7l-}´óýà Í:×ðám¬¿µmfS¼h•úø¸¿³?QsTÈôòŽÆ†úV¿`hë¹ôúOöúÃöõvÖ¢<¼Û§¢þÆÖ®–îº1hƒcùÖKç·yz„'$ò‰p_˜U‰"À¡´¼©vÀ.Dµ » h Æ#ú¾¸gמý¾bÌc}þæþP¼'¦EzÊѶ°*©p¹Eñ&@œƒFæ¨ ¦Õr àdÈ—P݈Ġæ b"!+ZC* Á&ÅS“4Ú¡ö¥@˜ì )@ýIµÀ0n*6 2‘ ) ì6ªQ5-Bcª7 ¢,¨²ƒûSj± n ©¤ÇAS@ÑáP®t„UQ…+,J&Ì®X8˜VË,@P o\ué! ƒšŠ‘„l:ÐR˜”ž¸šà¡Q9j 3ê0+H P_RÍÿV˜•‚Ìh *8»JwTM‰Ð‡êK‚ *m ÊÁþ”Zd ·„T HÐPhMXDdhDŽêM€°«A¦ÕR3ÈU]zˆÆ æ b û·ÂŠLJOhÂÒPˆQ+¬€‘ Þ„šo€j* ²P 9¤bœgTºcjJ8NXŒƒRj¡ 0ÜTshÈ@‚¦ Bá°S¯vFUN†Fæ¨Þ$ˆ±Ð»bá@Z-1Y…ºÂªSÑ8ÔT2U¯¨p‘YéI€ÌQý J«åÀJPoBÍ3@53 Y)ÐRQÎ7~Wõ½)aÀpˆ ð@R-4›ƒŠ†Lš0 véÕΨÊJШÕ÷mÕ‡98RKÌ@p[XÍÕA:4–õɬOþ«}’‘`ý·¼$)'ÇÀŸ4Þpñ¸ãƒÊ‰1gP ßc AïîiepÑÄ’I•îoí“dåÓCžÙŽÎ±è¿g,'“âè’œUw^„ °Ûf8¹›OVY­!Uæªl9Ó¢N‘ÌpYÓGª¬?ƨî8Ö!8TÉ åÀ$N3 ^Û'(޳ZS”b? Fèú¤¬:͇ûUÉ~6¬R}1IUŒ‡@…¥…y¹¿*)$éÃ/¿ñ’$z‡*[€Bp¬"@ž¨ÒÅ[Y 2ÁÑ®¥€°‘8ÔË\  f¤N&¨=¢Š ïà›"'6Á›Àb<\lÓ"Ô—Bì”D"jg%Å­—š#¸¤€ ¾1Lð2cç;£DR„ÊMBŒGÒˆ“–`tÆ&çÐJ[“0ÊÎׇAã|s„`$0Ü"ÒHó ¢¤@¾$b"d3®´G1¥&¾1BˆòqÂ|I,ÊÁEF‘¡¾b#%U;¢«ùz©9‚‹ƒ„¶óÝq"!@e&!Î#ýiÄIK(:c)Zjâ’&Øù†!È`œƒo‰Œ†Yă8Ï **ä"F\6“J{”™ù£ác'¢ «² }),ÂÂ…F‘“ Þb%eU:¢«…F©)|œ°Qv¡;Ž%¸Ô$$x¤?äÒ«Q”D'-µhÂrùÆÁË`\ß%Ò"¨0‹añ§a·^*èŠ"\¶’J[SU0ÒÆ7ÆJ Ê*ô§°0 EA†|IÄBÊz\éŒb¤}+,s"#mBO‹óp‰QH pÉ¡$üÛªw饖ã«~lß%R"(7‹ñ§a—^tF=.ÛI¥5Š) eãÂÇU}¥Eð§±DQ†¼IÄLÈF\éˆb0ŠÂÑã…e}2ë“ÿ"Ÿ›Ãv¤Í øþßOýëÆÚBÎò?üzp#Ÿ™kp×Ì3n}fDZh³ ®>ÆH'Gû~7õ–§?_á\0s’YOšôÄCë>ŸsјŠ|ÛqDgœqÆîÝ»S©ÔP¦l_ù_›@îèŸáeéŽ/…X/J[¨üñ¨!çŸLB” Û§U¸‡Å4_Ç©ö¦ðR°‘rsŒ2`R™‘?Öш<ÌÌ5Dt¤”¹~†H‰H¡žãd¤ŸÁ\¯ÃÕö8iĤ#_ÖéPy¸™=Ò“ˆRf亓$/CE.)¢AË£y ]I‚‹yz±!BëQ¹ÂÌ é(D)7±mqZVA±‹ðX”Gói@pO Ï!;)7/¬ÂÌ5Fi¨¥ß +Ðq‚ ÷¥q'%p¥í$a‡BzQÊŒ\OŠä$¨HÏ¥$4Àbnš'PЙ ̸X ë #¥ÜÄvÄ)I…Šõ\TÀ"š§ã`ò¤;!æÐRS”2 R™‰?ÖQˆ<ÌÌÒ%ÖÏI)Ðq¢ ÷¦ñ\J0áJëñ†™¹º°ƒ”R#çK¬ê9FFÌMóªv$H3&„#ZÊÃÌÜAM˜‘ëL’¢鹘€…94_ÇÃ0ð$ !æÒÒÑ(e@¥r3¯•­/³Í IDATp…‰mŽÑ€à°¸€è8Y…}iÜA Rn‰QFL*ÕJ•‡™¸úˆ…”R#×›&Ò\¨çµªwÓ<ªí Ò„IEFáH˜>¡ê»’¤ CÅ..b!ÍÓñ( º“„]:±1z\Õg}2ë“?ƒOv&p2Ññâ¢ÿüáF>³ñ /Üzë­ñx|(áÕW_={¶6£úGíQ2e ¾ÿÑéû·µk?ÃYv®qâïéªÿ€ Î2)Q]4Û‘¤xÉ£™0yÂE±² u§(;Á0¹1¦7b’“âG $¢¸h®9N+rÓìKD-c%Tl€§ÃYJG£"ÙËÒydБ2X1N‡ŠmI#…HvŒéfô‚Š’ñ~ŽŽ‰Dˆš°„ "Ýi}Î1aF=*jÂTòÈ„Õ%$¼ŒŽy*ÀSÅTŒ‘±Fç$Ò(¤´§Œ&”7¢|{ʈÁª‹Hy}ZÆJ©˜Ÿ§ÃYFGcÑËÒn" A #e°`œ[“F ‘8ÓÍèy)¦bý<ýVX?G I…»Òz;ÎR°Ô–2êPц±iƒ¢Âùd¢—Õ%$¼”Ž…MX\–K¤qXiK¨`Bùö”T‘ò²º”„•RÑO…²”ŽÆ%ÂÇêÜD †Ôöc„¶”‘Dd‘ö0zVÆŠ©ØOGDB+á>ŽÎ'² w¦õ6œ¥©-eÔ!’ c»ÒY… ÈD/«‹‹x ”Ÿ§Š¨8§ FïÀVÚS*˜1®#e€!G¤ŽU=u¬êK©XR½¬ÎE¤HmKÌo@…Ö”‘€å\"íaôÌ·Uˆ2:É>–Î'“Š w¦ 6Œ¥©-i¤U½AT‘B2‘õɬOþL>IE4Þü£ßå Ñ2¨°°pÑ¢EŠ¢$IÂ0ì„^©Œ@o(©"ä/ôª"²2 a‰WU…pX–UHVaR H‚T’y=Þ^ä‡%Y…eF!@TR±“ì3,‰*¢¨˪ I*Œ@ )‚‚B@%`‰S°†@ ©‚‚@J@2w’0^AÕã„;‘¡ ƒdIE2ÂPÉ“„°$¨ˆz≠E؉%|ªÂ`HA z «‚‚@@%à“…I¼‚üa8,I*¬ü³UŸöãUŸõɬOžŸ„EQVr-:UUOnÒOÞ‹ÅÌf³¾×~ðÇxþö·¿u»ÝÚö›o¾)Ëò¸qã>úè£Ù³gÖ¯_ÑE5j()÷ôôlÚ´é’K.6l ¶¶öË/¿”””\qŧ½wîÜyäÈ‘ÌÇ9sæäääülU˜L&ý~æ£Ýn7›Íz½>77÷'$xrugJò_JCCÃG}¤m3æÂ /üÑC¶mÛÖÕÕuûí·ÿ3ù~ñÅû÷ïTVVΘ1ã„oW®\9|øðêêêþ÷ïßÿÅ_d>^vÙeååå?zÔš5k .¹ä’ÓRÈ;vìhii™?þ¡C‡víÚuà 70 óöÛoϘ1£²²R»pEÍ›7ðþûï·µ{Ýýo~ó›²²²SÊî¹çž«¨¨¸øâ‹‡büúë¯#ò»ßýnˆ%yÓM7™L¦l#~Úéêêz÷Ýwµêîèèxï½÷®¸âŠ’’’Á6­­­|ðÁUW]UXXxúŸr<OMMM8®„$I555Ÿ~úéO>±?þ¸¦¦¦°°PK$¿{•κuë^|ñE£ÑXQQADMMÍÁƒ‡˜rwwwMMÍÑ£Gµ_~ùeMMÕjÍ„´Ó˶mÛjjj2%CÄÏéÉd²¹¹YUU½^Ïóü‘#GR©”N§\ž§EQ™sEqpIþëðx}úÊ•+×®]{Çw˜L¦T*õâ‹/ʲ¼}ûvA¾øâ‹¢¢¢sÎ9çõ×_—eùƒ>À0lÑ¢E²,_~ùåóçÏÇq|è¹[­V›Í&IRWW— MMM¹¹¹>Ÿo„ GŽ)...,,<ùõJ'c³Ù´sñù|K–,¹ãŽ;¦NzñÅó<ϲì½÷Þ{é¥—îØ±ã‘G¡i†áwß}÷oû[qqñK/½ ¯¾úê®®®C‡3æ/ù EQCÑÏ0LGGÇÌ™3§NZRRòÜsÏùýþp8<}út­ôÖ¬Y3vìØuëÖ½öÚkAäçç¯]»V;VÅ^xáÍ7ßÄ0¬´´tÕªUúaz{{ÿûß_wÝuwÝu‚ ÕÕՆ͙3Ççóñ<ýõ×Ï;W³L§ÓsçÎ <Ïß|óÍsæÌÑ.Y–wìØqèС¡×Ô\PTTÔÖÖ¶qãF†a¾úê«Á%‰¢è‚ "‘ȵ×^»téÒµk×>úè£S¦L©¬¬üãÿèñxA˜3gÎþð‡iÓ¦M›6Íår½ñÆ~ø¡ÃáJîz½A“o2‚˜9s¦¢(Ï?ÿ¼Éd:ãŒ3PÝ´iS8ž8qbQQ‘ÇãÙ½{÷з—N§?ÿüó½{÷~òÉ'õõõçŸþÔ©SÏ?ÿ|»Ý¾aÆ?þX§ÓÕÔÔìÞ½pÎ9ç<ôÐCÚo½õÖòåËßy犊ŠõëׯX±âïÿ{WW×}÷ݧÓéAضmÛîÝ»Ÿyæ™qãÆíÞ½{éÒ¥4M«ªºeˣј ÿ"𛛝½öZƒÁH$6oÞœÙÖYgMž<¹°°ðõ×_ߺuëÞBl¨¯¯ß¹sçÁƒ“ɤ×ë•eYÛ¯] »víºòÊ+¯¿þú@ pJgòé§ŸîܹsçαXì’K.™|ø)ÕÔž={vîÜÙÞÞ>f̘T*uBI>ûì³›6mzôÑGŸyæ¯×Ëq\ooo8Öž9¶lÙ²hÑ¢ûï¿¿¶¶Öçómß¾}Ĉ‡cèÝÅ+V¬¨¨¨øæ›o´²,8p`îܹ—\rI Ð.€ËåÊÉÉ™7oÞâÅ‹|ðÁ+®¸¢²²rïÞ½C l€?ÿùϵµµùùùV«õÑG=xð ÏçÛ¶mÛØ±cm6ÛW\±gÏžÖÖÖW_}õ¹çž[½zu¦/×l6˲¼gÏžX,vàÀ£Ñ(IÒUW]UYYùæ›oNœ8ñÙgŸÕš p8ü»ßýnÔ¨Q6l¨ªªzþùç³á4RWW·sçκººL?pUUÕ®]»Š‹‹ó›ß ¾oÛ±cGEE…Ûí¾üòËOOÇšFGGGmmmSSÓ÷Þ¢>ñÄ{öìù 'öÍ7ßÔÖÖÖÖÖ¦R)mÏM7ÝTQQñO–×äÉ“3mÁ™gžyB‚kÖ¬y÷ÝwµíǼ¶¶6óqß¾}ï½÷žvëtª]4µµµÁ`P»bŸxâ‰7¾õÖ[F£ñ‰'žhllJ"/¼ðÂ;ï¼óӺעÑh:¦iE{x9räOHð™gž‰Çãÿõ_ÿõ³¹ø\°qãÆ¥K—Κ5ëöÛo<<öÇ?þñ7Þ¨¬¬\²dÉ×_ýÌ3Ïœ|øûï¿¿jÕªŸóš;vìêÕ«ßzë­S:êðáÃ6lxóÍ7/^l·Ûµ·'žx"ãÿ»Ý¾xñâMêœsÎ9yðéGEñÁÔ¶yž_ºtéß}÷Ýo¼ñFIIɬY³xàÁ"‡èEÛ¶mË|<ï¼ó2ã:\pÁ-·Ü²yóæ¿ýíoƒ¹øâ‹Ï;ï¼%K–´´´¼òÊ+wÞygIIÉâÅ‹“Éä}÷ÝW^^žñI’$/^ ï¿ÿþÑ£Gßwß}Ù8qimm­­­Õº×4ÚÚÚžx≓;ÓÎ>ûìLÏéìX»üòËgΜ xöÙgOø A‘#GŽ9òÖ[o5›Í§tb÷ÜsÏ©6îCaêÔ©UUUwÝuÃ0Ó¦M;áVtذaS¦L¹üòËÇÇóüiÉñþûïÏlçååiÎ÷Ýwß矾téR­áG6lØÔ©S/»ì² &œRî6›Íçó>|˜eÙò\¶mÛ¶oß¾šššŸÍ¿=Ïý÷ß?wîܹsç2 óÐC>|øäk`þüùçž{î¤I“NN!??âĉëׯ?Õ!îŸÌ„ ÆwªGÝ~ûí:†á§Ÿ~Z»1ÏÉÉ9rä /¼àp8>þøãµìššš?üáÁ`pýúõ«W¯®ªªÒfèœÌ{ï½÷öÛo¯\¹òÏþ3A7n|ä‘G†ÒÛ¼oß¾mÛ¶=øàƒUUUãÆaÙ²e¢(¶Ùµk×Ýwß}óÍ7Ÿ0. ¸õÖ[÷ìÙ³lÙ²‹/¾xÚ´i†ÝÿýÚ<‘ššm¨Rë¼ÿþû;::æÍ›÷þûï§Óé¡Äé,CdÖ¬Yÿñÿ±}ûöÌí¸Ñh9rdMM MÓ§4ª÷Ÿrþf³™ ˆ‰'666>úè£étú”~¿ßï÷‹¢hµZ9Ž{üñÇOx–BQÔ`0$“É?üáCOù©§žjooÇ0ì®»îÊìÔétAŒ3†çù‡~¸³³Óår=ûì³Ï<óÌ 7ܰnݺ… .\¸pÊ”)§¥ÚšššôzýĉKJJ‰F£ÿÈR6zôhI’~øáŽŽŽS½uåy^’$EOµKðöïß?oÞ¼¹sç^xá…ZÕðßïO¥R&“ EQ³ÙœN§µ™r§eÖÃ0_~ùecc£ßﯪª¢(Š¢(«Õ*Š¢ßï_´hÑ\ u´–””L˜0Áb±0 £½…Çq½^_ZZ:lذx@›8òóóW¯^½víÚ?üðàÁƒ'Nܾ};Žã@ ‘H †ÌµÑhÄ0Ìï÷'“IƒÁpÂsä©b·Û‡~ðàAžçÍf³Ûíž8qâ_þò—wß}Wsƒæææž/õz=ŽãÁ`0kÛ?9÷³Ï>;2 3cÆŒºº:«ÕZUUظqcKKKMMßïŸ>}ú=÷Ü300ðÉ'Ÿx½^EQÜn·Ùl¢kõõõuuuyæ™3f̘1cFqqñ¾}û/Á…BÁ`°ªªj̘1ÚÕ­àÆŒSPP°oß¾âââ¼¼<Žã¦M›öÚk¯=ýôÓ.—+sßH$Î>ûì 6¬\¹ÒjµffÖeùW`µZÍfóĉ7lØð / þêÓO?]·n V«õô<åX­Öêêê̸PIIIuuµÑh¬®®®¨¨x衇n¿ýö ž{î9›Í6ÄsÐæž.Y²Dû¸lÙ²;v,^¼xüøñ7Þx£(ŠùùùZF¥¥¥ëÖ­{ùå—üñ¡—‘Åb9ÿüóN§Á`Ðz! o¿ýv†a{ì1À½÷Þ«…–ÊÊʳÎ:«¨¨ÈétNžù /L˜0aúôé£Fš7ož  .¬[·nÔ¨QÕÕÕ#FŒ8¥‹V»p´ù¥¥¥ÕÕÕùùù™’¬ªªÒÜ’eÙ·Þzë‘G™3gà׿þõ¨Q£îºë.ŽãxàÀÚµk'Mštá…Ž=0eʆaNá6†«««+++Ó¦MË ¹—””hÃH ,(**Ò¦f|°iÓ¦!Žå¸\®êêêLTYY©] ÚÎ<óLQgÍšÇ_zé¥ÌÕ­M^ÍäUYY©‰$Iò¥—^Z¶lÙÒ¥KÏ8ãŒuëÖmÙ²¥ºº:77wÍš5Ë—/?räÈ9çœsB;˜åŸ¹%ª®®Öê:sEoݺ5ÓοüòË ™*þõ¯a˜Õj}íµ×~4qèŒ3ÎØ³gÃ0Z»œL&³%ž%Ëÿ_|ñÅÞ½{ï¼óÎO?ýtΜ9ï¼óίýëÿƒåðâ‹/nÞ¼ùÃ?̺Ŀ9EEEÓ§Oùå—ÿ‘ÁÖ­[eY¾ì²ËvìØq×]w¡Ù"Ë’åß—˵cÇŽ¯¿þ:‹]sÍ5cÆŒù?XkÖ¬yâ‰'Þ|óͬ?üÿG6ädÉòoDyyùæÍ›µ)-z½^'ÿ¿ÆìÙ³gΜ9ô ÙYþÙ¿ÿ) CdCN–,ÿ^œêœÏÿÿ0ÙuþR8Õ;ƒìk=³dÉ’%ËÏD6ädÉ’%K–lÈÉ’%K–,Ù“%K–,Y²üŽ›>N§‡¾@@–,Y²dÉòäÓéÁ ©|rTUݶmÛÀÀ@¶Œ²dÉ’%ËéâûCÎ;3J¥Ni…˜,Y²dÉ’å‡V¾ 9‚ \uÕUÙÒÉ’%K–,§íµ­'†œ,|>ŸöŽä,Y~qL˜0a(k¿fÉò¿B6ä|~¿_{s¶(²üâÈÆ›,ÙóËÃáp˜L&UU³E‘å—Â7ß|£­%K6äüòPU5r²ü‚Eñåy¾¯¯/[2?ÌjO}}}§kíàÿkØl¶^—÷CNOOÏK/½tÂÎÛn»míÚµ¿úÕ¯.ºè¢liþ#V¯^¢è-·Ü$I[I 0þüœœœ={öh«€”––Þx㙣vïÞýñÇß}÷Ý~¿?³|eeåìÙ³ÿö·¿i+!NŸ>ýœsÎÉòÊ+¯ÄãñÌš§Á`påÊ•3fÌhllôx<³eË–:tèïÿ»öqÒ¤I—]vÙêÕ«ûûûW^yåøñã3ÕãøC=ظqã‘#GZu³,»|ùr-…»ï¾Ûd2}öÙgŸ|òIF$ ?ùä“'ˆÔ¨¯¯ûí·µíqãÆÍœ9óå—_æ8îŽ;îÈ:Ì¿ŽT*ÕÚÚZ^^ž-ŠŸvÓ©õR8pàT—ãË’)á>åô÷÷¯ZµjáÂ…çŸþwÖ(ºjÕ*A²!ç{Ù¾}ûêÕ«:TUU¥…œùóç×ÕÕ­X±â©§žºá†V¬Xqçw^uÕUgœqÆ­·Þ AÐ 7Ü8tèÐüùó=Ï­·ÞêñxV­ZõÐCMž<Ùjµ®_¿~éÒ¥+W®ljjš?þ+¯¼2~üxÀ«¯¾úÈ#Øl¶Lȹá†öîÝ›——wÖYgiË)®]»vëÖ­?üpccãªU«ž~úéòòr§ÓùÜsÏ=ùä“ëׯߺuë­·ÞúÆoÜtÓMÅÅÅ7ß|ówÜÁ0Ì”)SxàG}4 .Z´hÍš5/¿ürOOÏ#<²|ùò›o¾ùž{îY°`Áõ×__^^þ§?ý A–––={öìß¿ßb±œrúúún¾ùæiÓ¦]~ùåàÛWÏnÚ´)™LfCο»Ý¾wïÞ?ü$IUUEQ”$ AUUQ¼8´¢(0 C¤µ³ÚWZ“¡­? ð,ËA4cI’2m A0 kû3f–E HKSQmÙ\m§$IAh ²,k鈢¨‰Ôò‚ H–e£Ñ(Š¢ ²,#¢IÒ¾p°ÂXb˜¢(‚ ´ÍÇ ˆ?Ò±6lذiÓ¦^|ñÅššš>ø@Û?00pùå—SFçÏŸÝu×ý“«Áÿ{vSü÷ÿ÷ÚµkÍf³$I›6m‚aøºë®cY6•J]sÍ5wÞyçgŸ}¶hÑ"‡ÃáõzwíÚuá…þêW¿ºøâ‹3‰<ùä“ñ|øôéÓëëë5/Åb+V¬øío»bÅŠp8|Ýu×]wÝu3fÌ ¢¤¤¤¼¼ü7¿ù Aýýý©TJ«¿>ø ‹92óÓÝY³f=øàƒ3fÌhëz½ýöÛ}ôÑ–-[š››ï¹çž?ýéOS§N¥iº  à–[n™;w.‚ »wïN$‚ 9r䬳Κ6mAõõõ£Fâ8În·K’”N§yž?|øpYYÙ´iÓ6oÞ,ËòÞ½{{zzªªªÆ‰Dzzzî½÷Þžžmaï¸þúë[ZZR©Ôœ9s®¾úê‹/¾¸¢¢¢¡¡A–å+VÌ;wöìÙ¢(&‰Ù³gß~ûí™å7ººº.ºè¢9sæôôôìÚµë½÷Þ»óÎ;gâĉ7nÌF”¡ÐÑÑñõ×_koæúÏÜÂkÍ(AZ„㸢(Š¢¡5:3ÍFkÍ%IÒ.ym§,ËÚ‚èn·ûСCZƒ¥5ô™F&á; IDATAQµÜµ=ªªjq A-YM ÃZØÐD-A´–NkÓµWÛ@QtïÞ½Zâ(ŠŠ¢¨å+˲–…&RKap DQ”ã¸ÌYÀ0¬ªªÓé=z´ ƒÀ˜J¥öìÙ£éQUup¨Î´ãZ²’$RÈÉĪÁ úØswrÈÉŒ“'|oÈÑÒ×ê(³ó”BŽvÓð½9Ò4M’$˲‘Hä{Î÷‡µ¶¶vãÆŸ}ö™(Š©T*£à¾ûî »víºîºë-Zôÿå; zzz–,Y2iÒ¤·ß~{ܸq[·nýôÓO vîܹpáÂåË—744\{íµ^xá®]» ®»î: Ãôzýàûš¦Óéô’%KÂáðæÍ›µ_}õÕ¦M›8 …œÏ?ÿüÌ3ÏÔ¶q¿ôÒKY–}ê©§f̘±gÏÇõzýúõëŸ}öÙ•+Wþ?ö®<.êr{¿³/ì›" Œ²‰¢à‚ ¥©¹å†KÞ\Ð{]P3QÊ45--5ÑH-×,½”¹€¦B¥ä.Šû†"ûΠ̾ýþ8Íù½Í #îÊóéÓg˜ùîΜç=ç<ç9QQQR©ôÁƒø-¹|ù²Ýo%‹O:ìååeoo?pàÀÂÂÂU«V 0àÂ… <O(&''ÿòË/[¶lñ÷÷‰‰¹sçÎÞ½{>ß±cÇÀÀÀM›6íÙ³§S§NmÚ´uÆÞ½{8À`0ÜÝ݃‚‚²³³8gäóùB¡Ðì“ܰa!dÊ”)aaa€šÓ§Oöññ™7oÞ—_~yîܹ¤¤¤äää›7oÒߥ÷ß_$EGG_¸pA*•gee­X±ÂÆÆÆ,¶YÍBrC«ÕÖ××Óàθ-.— ø›Ë†%0‡Ã0èX!æÐjµ¾ë€Ïe2™~~~¶¶¶J¥~àËàÛ ûB¬Ãd2y<†/ˆ\.Wåjµ® ΰ¤R©· ˆÁSÓ~ÙßߟÅb!fÀôz=Ü2b†)–<±ÁCãp8p/`OXø¡ …BLJ»†øõÅ»8&¦R©ÄbqCpõˆÐ¤®®®¢¢6¹\>þü .4áŒÄ²eË222æÎ6aˆH>ýôÓ›7o6ò fîܹeeeëÖ­kÑ¢E^^<ÕÂÂÂ%K–|õÕW555uuu³fÍZ½z5!ÄÎÎî»ï¾ƒ}SRRºvíºmÛ¶/¿ürõêÕ?­[·®}ûö½{÷þöÛo !¹¹¹GŽ™9s&8°¢¢¢­[·~õÕWPÅc:99íÚµ«C‡ëÖ­ÛµkWJJJ—.] þôóÏ?WTTÀ·öèÑ£gÏž=þ|QQÑ AƒFŽ a_EEÅ?ü““óù矯Y³æìÙ³f2elݺõŒ3† ïíím´ALLL—.]ÒÒÒàÏ-[¶Œ5jΜ9V,i¤'ç‚éÀÌhñx<¥R‰ :2À@”N§lÀhƒÉdÞ½{÷Þ½{ô¾°Žf±XàÙÙl6œ ®01¼ ×F§ìèLb ŽV«7)8Üór øî»ï”J%‘Z­–Ífã}ajÑúy~öÈyóÍ7ãââ!)))¦àÖ¿ÿþýûBÜÜÜšÞ£qpp˜:uê;ï¼3vìØ#GŽh4;;»eË–íܹ“Çãeff6æ Ó§O¿uëÖ®]»D"¾Ù«W¯^½z-Y²äôéÓùùù>Ü·o_QQÔc¸\îèÑ£ß{ï=Øxç΋/Þ´iSll,¼³}ûö?ÿüsÍš5ׯ_W*•ñññ*•ê÷ß—Ëå„7•Ròòò¦OŸ>}útH»B’““W­ZuèСxÇÝÝ}êÔ©„mÛ¶5t/-[¶œ:uê©S§þûßÿ~þù祥¥Ë—/šçíàà0}úôÇÿøã~~~ mü믿fffb‚×j\÷p86› ü5–pK5ªR(€àÜ! Â|@8wtú36z½þÚµkP,Á ƒ®áft]Ž& ¡<xÇ@ n B4ÄB•J¯ÙlvÏž=OŸ>-•Jõz}ZZ„Yp6›  OpH­Vs¹\+ä¿yóæyyy2™ŒÃáÀ1ëë룢¢nÞ¼©ÑhZµjåäädooÿþý‡:;;ÛÛÛ‹D"©T {{{Ÿ9s&44tË–-wïÞµµµuuu5½÷xxxœ…Í09¦P(ðO¸Zú8€ xF€4@>ä5@¾yòäI¹\·PZZ ¼$¹\®P( µˆ7…AXC‰2.—Ëår9ËÄèúÑf€ ð„-ì± —ËÅŒÞx´Á¿"=}"ãÀ  Ä§Êb±8ŽÀĸ³€¸ðpŒLn0¼•J²Ç‹r\]]Gމn´M›6#GŽtrr9rdXXØ»ï¾Ëd2“““ !ßÿ}“lÔ÷òòZ¿~ý–-[Ö¯_?~üøO?ý~ß~ûmçÎ?ÿüócÇŽýüóÏË—/ONNn×®ÝúõëaÇ·ß~S‘}úô)..†ÅãñÖ¬Y“’’’––výúõÄÄÄiÓ¦áéÂÂÂFŽéãã³{÷î”””äääAƒ-_¾üÀ#GŽÜ¾};l–€|Í7ß|Ðþtss9rdPP“É8p`ÇŽágéïï¿iÓ¦;w&''Ïœ9sÞ¼y;wîT©TpU„ ìÚµkåÊ•ÉÉÉÑÑÑkÖ¬Ä)ä²V®\9gΜäädww÷eË–9;;õ;wîã?†¬£P(9r$^ž§§ç AƒÜÜÜìììFŽ ¡áÇ·k×¢±„„&“™••õå—_BýÝwßäçç4ÈÛÛ{ëÖ­Ó¦MsppèÓ§OZZš³³óСCóòòÖ®]ëçç7{öl+œ4Æ´:·ߪ0äÄ0‚ªÒéØ,–b&S­×3 Ñ3™[Ûúúz “I u{µÁ¿«u:“©!Dc€€ƒðwÀÁbéôz™VËf³5jµšÁ€˜‰AˆV£!†‹ÀŒÁ`±X½^­Ñè98F'2ŽÅfë !±ˆ…Q“É„ %†œ!!DÇ`è8$­áÆY,–žÁPS…¥¿CÀö홨|Y¹¦æˆˆÈÎΖÉd0`€õ÷I¹pá‚¿¿¿½½½µôåZrr2›Íž6mÚ´iÓÒÒÒ¬“5,ÛéÓ§ÛµkG󬪪ªô’vü]2$ÙðM–N‡5(Ü# .®3NH¶fjµÚb±XJ¥8ÖX—‚íáz  n„Íf¿óÎ;wîܹsçŽF£aøÓ.W­VË[xnlƒÍf»üë_¤W¯gP´0´Ë ƒ6ë©•J%<ˆçŒ\üã"McL§ÓdšÅNSÈš²š¦¡RH,²«‰UðÆ‚ÕÖÖ>CƤ՞ÀZµjuþüy\CÕÔÔXŸ‰kH”…Á`( $@# ³ »dÐëÁÆÈ6ÆJ;äÊàˆ @†ÚÔùy<žV«ÅÒ íž ž TcznÀý 3L&¦Ô0Ë娀„4¸x¨›õèpüC‡ÁíÀýbw‘^¯‡‡€ Ÿ>+ª1MÐÀ Ò4ÂìÝaJã:Þé3OәŠ×c´>0 æpG §¶BNƒ–——÷RxîV³Ú“™P(¦?x­VËçó0Q†ù.\Waý±P}æ€RH@²5‡Ãßd6 ,©*„ ø?’Pk E€:ˆj¸®àUÑ,jt‚p°1Õuà6!˜C¤©ÄÐâ£Õje2™õ»ôüÌ 9æíÒ¥K¶¶¶MORÁjMÛ.^¼Ø®];£¥4 íÙ]]]kjjÀÃ;-F`€9+ìÓÄîQbh’Çö\çðfóà P‰ôø¸š†ë¤±΋„™7¼AlÜAª‹®aN·DÔDÍÀZ¬¦˜ PL‘ï‘ù+È1R= S: ˆ½#}4x¤2TÖ¡ã*\(Ða¥ÑÙiõ¼¼³ÁÑ‹†x}¦·i…œÇHé4oÞÜú¬öÚ™éKXÞ¨¯¯G¶´J¥ú›u¦VƒsÔÊ-t÷(í¡àPÈLƒÃÀCƒ<›‡‡‡L&“H$4`@C+ìÄwì^¼ bèý$† „ íÐAž6Æê—Ë 5¤Eàí`‡rpsç  …q¦ƒG##­Áí4ä‹é¤–iÚÍÔ¡ÓÑ'¼YÝÓwLYF§¦ßH} E+ä<‰9;;›ÍQXÍj¯¬9s&,,̬»T*• œ¤V« ”C°CûY 0™LDŒAGƒÞ 1‡Ã¡Q‡ÃáTVVBcP(„`E۠иÅáp¤R©H$b³Ùùùù´Ï…k\„³°Ùl'''hí¤ãØÎ=7t@Ã`0 sßÄ  ° þ¤…J­fM¬YÍjVkÐ,øJXAK$U¶TJ°ÅÀ€¸UtS'®Ê±HnsSHuÂN§ãóùX–G†à€ŠR©äñx………XËÁÄ¢rê ‡5o€IÅåre2R Û888H$Ì\©T*¸/¨Bм—GW³ž>Ü4 ˜èÊÓàiõî';~#¿'¦Ô8:Õfzø©iƯ¡ ð !g×®] ¢Ö³gÏ*Š?þ866tn!ÇŽKOO_¸p¡£££åCUUU-[¶¬ÿþ(Üòê[NNŽ®!„ <øòåË÷ïß'„ 24¶Á¾þúkBÈ|æçç'''5*<<|îܹð&—Ëm˜;vܸqÇÏXÍjÏÛÐ/0` ûíW vº í> b Å:1è¡k04åEÒàøôÀzšfºL ]´º³§§ç¥K—š7o~÷î]”·²2¶ðÿ€²ðëC27 Òöf÷¬ž¹©;FFv± –O¯ñóÄrpf+1¦fú©ÙTžiÁ›Ö’0sÙ®,--máÂ…=zô MLLÌÌÌT©T©©©È[%„„„„Œ;ÖBZ}}}jjê•+W^£j^^^jjjhhèØ±cÇŽ{üøq˜2ЬY³)S¦Ü¸qñfåÊ•û÷ïÇ'>bĈÔÔÔ;wîhµÚÔÔT‰D2vìØQ£F]¾|966öÓO?ݵk—ÕZí…E?Îjݺµƒƒ1V±X,X)‚€ 0°cƒnyAñi¬ocF $™6pµŽØ€.U6]Æù»¾¢Õjed IC d3¤ õY§ÓÉd2Xê¹»»{yy Hˆ©T*©T -–}ûö¥Kííímmm!Õ†àw !ðÓpDÂ#—çV{6Hl!/ÿùçŸ4hܸq  5B)//ÿàƒüüüîÝ»·k×®ØØØâââ7ÆÄÄ´mÛöþýû¥¥¥}ûöŽŽnß¾}bbb]]ÝþóBÈwß}wñâÅ×ëùùù…‡‡‡‡‡/^¼¸°°¦Ñà·sÇŽŽŽŽþþþ¸}¯^½P566688xúôé £M›6aaa™™™¯Qœgµ&`‘J¥÷îÝ«¨¨Ðétåååð~mm-.K1­ Vª1å<Ù¨T*¨ÕËd2Ðdƒ“B Zß¡òÿ÷€œ•̺Õu,.‹¢LVò6ò‡mÔ©ÊårÙl6Žçqss &ͤx,3{kO9¦—‹¯¯^½úþûïÛØØ`ʨ¶¶6))é_ÿúWVV–^¯Ÿ?~jjêéÓ§þùçmÛ¶i4šââbš2yòäö’0zÕ,##cëÖ­'Nœ€?×®]›––¶~ýú¶mÛVWWWTT€zXvv6Œ4hPDDĶmÛâããMÕ¸­fµåÒ&Èà 4 ]ÿ'†îÌ¡A ….³c¶¦¨ÑZÔR©zBÁÅC †Á`ðù|^¯¾w½ÆWìf2*€ ¨ÉF«h4hÕ„ 1~~~­[·ŽŽŽ†óº¹¹•””œ:u KM*•Š–CrÞ2Í8 ©(|ÙÄëläc×5lp1´ Çã™íÍÀi4xµx|xJJ¥à¿¡Á< è Õ/8¦ð´yÃáI4Ó[{ö­ ±±± Ìhd‡.--•H$ô›!!!PçÈÏÏ}óà˜6MNNÞ±cdž ºvíJYµjUÿþýaxsæÌ™Ù³gC8HATþÏþ³zõê?üÐê­öâ!›"Q™U‡±½Ešoœ€P€KZ(æÓ­6øûx€½†R›F*ÔL&“·†§ÎRë·ê9¥n)—°þºà ‘KÆápø|¾‹‹‹¿¿›6m:vìØ¢E‹áÇ;99A*%//¦a¢ 4rÐ :ˆOt“ B)ä­ß™çglË‘ €ôZ ¡è)<<|„ ãÇ···ÿé§Ÿh(¦Cņ˜ï¯¬½ýöÛ0ëÖ­ûꫯŽ9íڵ믿þ"„ܾ}›#g8 Ì+V¬Ø¸qcHHÈ7ß|cýªYí%®™è!͸ü'„899Bêêêär9¬|ÁƒCj §y©ž`ÜC„êÎØä•y&“ j4z½ž³œ£î©¬òx±1cÆX¿yV{‘QøeÌt!I Wý„’8Ãy”XàÁ18w#$‘B¨ž´0„AFI9v ›¹‡ Á¬¯‘,gš ÿÊÊJWW×7n d{0›G¨š Ô®P` PupÕO¨öL XIÒ/r,ÛùóçSSS¿øâ «™Õ¬öÊöK¢ŸÅ8†fÅÃz¤4öêC F&c[ |„ºÑ(fq2ЫfÏV®íÞÝV§Ó%&*äݼùÿÚˆ…( L}[RR’——W\\ Ÿ¨ ÌÀáxxdKã,d@J{T¯×[h1¤ç5æ±›q†Q”©ú~J+¹!—–k3Rlñܠ0D Ô»¿]¼¡b‡ÝTŸ>ZC¸K÷â|¢XX˜¥Ì=ȉˆˆx½Z;Ë*++š‚n5«½‚ÖÐ8/T@Å wŤ6¬€û. 1þ€døzš:} €É0[µZÍãñ<<ô iÛVsõ*ÇÃCÏåjÔjDt¸?=:¿ŸB_=†{9Q0›ÇãÉd2z”Ç£Gnã¼bbÀ ›\.oèWoi̺i³Óhù‘ê €Y¸$,Pá¡è«5Â6Zt_#DY¸MZÚÎìŘJøê—|𘆲L<®Ñÿ—Ë8øÕ 9aþþþM›T?HS÷dµ¦gôä4ðé8–9cà¯Q†Édº»»Éår>Ÿ/“ÉÀáB]S7 • F‹åÀ6Øã‚åðððŽõ?þxéìyîû_×3)Ø@ÿ…ê - *5™  GÆ3â ÒsEáODMäÚÑóßhŽˆ^7$.€E §Bé«ZålhÚcß,ãŘeä¶BŽy³··oÚô•ŒŒŒQ£FÕÕÕYÿ­›¼A r\J¥Ü:—ËÅò4jÐÃ(ÙlvYY‹ÅãÇ߸q#Ε¡Ñ £Zé uºó†1ÐÕ«W/\P°ÙÜÓ M[B¾'ä'\?¨s¢j" Š@ P((;„hÁÀ„pHì†cB܆ªP"TãŽÕ¬‰5«YÍjObØ–ûlÐ_C—(`ðõb±xãÆ8_€ø]`Пhkk+“É s“l¨¾…t,Ø÷äINI ÑNÔ^%d !E “ÉÂòˆ¡F D‰>Ÿ/‹‰ß¼üâ€ä΀a@ƒ2¦Na¿]N·°r7•×l(X±ð¦å)œtHj´=@Ðê0ôŽŒBL‰¸Ç:ù'…Áô°…F3mÚ´ØØØ¸¸8BÈíÛ·W­Zß±cGÜF*•Ξ=»oß¾F]V3k[¶l9sæ !¤W¯^Æ [°`¨ùBlllV¯^‘‘±oß>BHpppBBî¸ÿþC‡­\¹ÒÎÎÎú­öĹ5ÀtF`(ú}º'‡Æ€c¢ßd2™ÕÕÕÀ6L 0$š}ûXz½^3X“³ƒw‘©'cT‚FW.Cç…íAÀrþ $Pá j?ØèJ‡nF´oÌ(bV°!gS_oº™ešÑ|UbŽKµFÛà LWb:Ÿˆa°Þcá„Ñì5£Ëh ꘦ ŸDÖS«Õîß¿ßÎÎnèСl6»  à—_~éׯN¶M¤={öxyyõíÛW«Õ …B¶œ˜× IDATP’¥õŸ––¶råʵk×VUUÍ;×ÞÞ~âĉ ø:þüÛ·oŸ>}:!!aîܹaaaC‡åñx“'OÖëõYYYóæÍ+--]ºt©r¬öd†ÏP$€¢”1`u3hm-,(͉!æ¸è6Œ 0ŒÀ´“É´d«‹Ñi™Zö16Æ0ô„J”@u8d.`à…4 I¥Rbè/Á˜ á„.ê€n)H±a!Êú…y¾ßƆ’¿ûöíÛ¼ysZZšL&6lØäÉ“"##ãââºuë¶jÕ*BH||<Kýõ×^^^ÉÉÉ]ºt‰‹‹ëرãÍ›7­OyèСׯ_wvv®©© …|>_$ùùù=zô÷ßOOOçñx¶¶¶b±¸²²’ËåY®¬¬lÓ¦Mÿú׿¬ÐjOcv8999::‚æ,LÀVHO¡Óÿ RfðèqÑ)/€PcCþ¡Èt)ŽÁ–V«ÕåéÔ5ÑæC&> ”"[(׆ :8Ò é™ÓEpIxãˆ7(R€± )4â@tEgÍFŠ–çߘÍ_YcK½¡'ܘΧyñ_¤FÎylÈ1k—/_1bÄÁƒÇ·|ùò²²2³›UWWöÙgcÆŒ9xð Z­^¶l™õ7vòäɳgÏŠD"m+,,ü믿úôécooïâââçç—“““™™éæææëëK9tèÐ;ï¼c}nV{J ²··'„…B(¶cèƒõèvá#˜u&‰Œfš!BÀpd€êmX/A—äîg‹Æd†´DéòF’n†³#3Mˆ¡ÑPÖm„V0YÇhôð¹±u”ªÐ5‘liooE «=ÇÄ!ÄÅÅ¥cÇŽŸ}öYtt´··whhèüùówïÞýÑG™£ŒóûÀºwïþÑG9rdÉ’%Ö§¬R©$ ýUÖëõR©”Ëå6Tî»téÒš5kbbb¶oßN1ÞV³ÚXFFFii) ƒ6 *öƒ›1­é NY©T‚8kôïXªA4"I7 >x#Ã|}Õ ("p™L&d›QïÙt¼–Ä[PÂìJŠrÀ,Lòp¹\>ŸÈ„ƒù4‹åìì, ëëëÕ° õ¬ž|#Ó_L¾5> iä›ÏÐ7ËgéáN˜0¡[·n¥¥¥{öì!„8;;3™Ì¢¢"{{{77·‹/bØÎd2wíÚõóÏ?B¸\nPPD")**Š‹‹ÃYmÿËväÈ‘N:ýøã—/_öòòrss«««=zô”)S uæää$‰®]»vêÔ)gggooïÍ›7ÿùçŸYYYPË1ÞV³Ú˜X,V*•¨~F)ÑXäÀ~@#ZÔü;€¶UâbÌ8aW rÞ G‡Jg L77ýÒ¥Ò€(›Éd2¢$mèõú;wîZ@¢Œ¦' 3ÍÆÆ…ÚÆbQЮ †Îi4šÚÚZHdÁ›P×iHÍ ÓŒ8PÕ²©T*…B¡P(”J%>=Ó#óù|›šP(är¹FëQ•Áй#Dái©‡d|b˜ÖÃQÓ*€á‰`R5 4†›ô½Ó*|Fn0x’ð5{òVÐÞ½{·lÙ^øá‡'33³k×®K—.½~ýúÌ™3»téòæ›o­®Y³&++«eË–08'33sòäɳg϶þæ  V«!Ÿ¶råÊîÝ»+•Ê™3g°QBHxxøÚµk?~ñâÅ%K–Œ=÷ŠŠš9s¦•øgµ§1Ì›Ñ#;QL¤íb¶Gðpuu­­­E·Žù+Œr óË0xb¨¡XòÈ‘Ë^°XL”bCâ5 ]C‰ˆ¦wC°E‹:#êуs4K("2­D€Ÿ"W óuÖ/Ìó³G@Î!Cè?g̘av3Ä•=zBÚ´i³hÑ"ëÃ5z’ôÃäñxF(:::::Útǘ˜9j5«=™µk×ÎÙÙ¹ººšnÖ£IÃXÁU-VzpZ¨R©Ä¡”üib1í!G‡M¦èâqñÛ¯Ÿfóf6‹EÞ_}ö,ˈ‚o°;ªÝÀ¹x<”ÖðÉ «x”ÌÑétS§NMIIˆ³ zÑI lŠ]>ÖïÌKƒ«YÍj¯»]¿~½¶¶–Ž`ÐûcÓ =- #ž-Z(•Êšš †‰ÅbàUƒt4ȺÁ !!!¹¹¹4u ÀoÏž=ÓC°ÁžG ò°Ûaé™ ³o›°ßÎή¾¾Ã&ìöG< §D#+ ‡ðù|6›…B¥R (¥T* †\.¶4Χ³cÍ_ —‹7جCGWèâñŸ nÍh¤›åên2Ms™þ”p3ú°´^§©´ÿnÒLß1Už6«ôܘë'&¬Òõ1JÜ=3Á›ÿ)R²¾éÚ‘#G^ØØS¡PØ„Ÿ¤N§;~ü8ŸÏe¿ÌX´‡nGD† t ÇÛ Öä¡ ºZ­:t(:2l´Ä JÈàúj0|>ŸÇãµjÕÊÍÍÍÖÖÎÙÙÙÓÓÓÁÁº2Û¶m;~üx'''ŒN0Q†å(ôk¡¡¡t{,k°°D¨Št§ÔA´ÇçóQ’®ŸÖj³:@kbÍj¯–åååAçïþó[[[ëy• ;1¸l´ÊƼfØp|² 01e&Môz}jj*–FW´Z­H$*,,D™j(ïÃymmmÝÜÜ¢¢¢ÂÂÎ×××–•µ(***//8yøðá–-[`TB ¦Œ )ûrss!¿G§Ý`/8À 6Ñ”˜Z¹‘ zj'F-–5 p{ÓpßlÏôp3(§5Î6r bzRLÜáñMã¤È?2ª~’VÐÛ·o/^¼ÿìׯ_mmí¥K—¾ÿþ{BÈÚµk¯]»¶qãÆ_ý´ !C† …OÓ¶‚‚‚¤¤¤qãÆõêÕ‹òûï¿Ã3ñññùì³Ïè-7nÜøçŸBúôé3vìXBÈ7–.]:}úôÎ;Ó[^¹reùò儇o¿ý–²zõê .B† öî»ïÒWTTÌš5kÔ¨Qýû÷'„œ:uê›o¾r—_~IY²dÉ­[·!x‘ÏÖ$Ɇ zöì¹jÕª[·nÁí?Û²eËñãÇwíÚ~üñÇùùù„ÿûßÝ»w7Ý>%%¾“ܽ{7dDçÍ›GoƒO’’˜˜Ø²eKl/Û¸q#—/þI¾È@VúØàñ 瑾ŒÁf{èì¦Ý`fJ´Ø@Åb) š9}âB¡0((ÈÍÍ-000<<Ü×××É©ž§çÀ'Nœ={Øl6»²²’Ãá`Æ {?Ïp´€‡B¡ÀBöÛC!Š˜xkxÙ€:pmt™RŽLÒ©0¬Í ûÀt3zžéÑÌfäL=;.@nõ)¿ ¦©<rL%.Ìì  WØ äÔÔÔ¤§§/_¾|À€°<™={öÑ£GU*Õúõë7lØðÃ?¨TªË—/gggïÛ·¯Y³fÿ ]f̘qîܹ›7oB{æÝ»wçÍ›7a„´k׎Ífúé§Ðswøðá%K–üðÃõõõÿþ÷¿ÓÒÒ®]»v÷î]ì •ÉdõõõçßÿþwŸ>}âãã{÷î=eÊ”ÐÐЯ¾ú*##ãîÝ»Ÿþ¹‡‡Gdd$ì2wîÜìììëׯwêÔ‰’ŸŸ?f̘øøøqãÆ 8ðóÏ?g2™)))gΜIOOŸ4iÒþýûCCCŸíCP«Õååå=zôˆŠŠzVdë»wïNš4©°°°²²ÞY¸pajjê… ~øá‡÷ßÿ·ß~‰D555ööö|>_­VïØ±cÕªUZ­öôéÓÓ¦M[´hQTTTLL ŸÏŸ9sfee%ˆïfggALæììüæ›ozxx$''Ï;7>>þÇ„ÓÑO2**ŠÉdzyyíÝ»÷ÀÏïI¾7 Ná¨uL‚AÐÖþjµzÆ Ý{ï)U*!ŒmÛxÛ·ó ú‚C 1ø¨¬,uqÑÉål¥’!œœœÜÜÜ:uêÔ¹sg{{ûfÍšw*—·ÞzËÉÉéâÅ‹"‘¨¢¢âìÙ³µµµ„2™ Eá€x¦Õj<†Ž«Ó×ë¡,„˜·Æçóë~¬³aÃd2ë¿­ç&q¹.ì‹· :“ƒ_ì×EzºˆP”D"‘€HÄkŸXsttôðð ¿»ëÖ­ÛµkWjjjxxxffæ×_ýᇂ<-½å+hþù§\.ã7êêê$ %<®­]»öúõë(Tãëë ³>áæééI_*•Êd²­[·fggChöý÷ß/Z´èÒ¥KýõW^^Þ•+Wôz½··w]]B¡pwwo׮ݰaÃè øòË/óóóa@ü‹ÔÔÔ888xxxœ?žòÑG©Tª-Z8::ŠÅâ§oÝ25—1cÆÌœ9søðá={ö|&ÇôõõÍÊÊš={vjj*¼ãååÅçó¯\¹RRR¯/^¼Ø§OŸ 6ÄÅÅ={6///66öèÑ£¶¶¶îîî>´···µµmÞ¼9!$&&&000"""33sýúõW®\ñõõåóù>>>;wî¤/€ÇãµlÙ²´´ôÊ•+\.·eË–Ó¦M›>}úÑ£G =<<^_#@¸]Zñ[[›á5(•A%6.€­­fÉ^FÇð¾ ŒÇãµn­ôöV¹»ëæÎ•ò‰cFS 4kÖ¬cÇŽááá"‘¨Y³fà% ‡£c2™••Õ #((H§ÓUVVº¸¸ÜºuK&“AÃHµýÝ9M´*-'‹C7ZþÍ(`hõZ‰–QÏ`hàé:â+’Ö âñx8ÌrÚÊ´a‡uÒË }9¦í2¦ 7#:]¨×ét_|ñE‡Äb±——׺uë@ÍÒÂpRÓë7¾˜^m#ë[t™Íl¶°QsèС´lÙT¿d2ÙÒ¥KgΜEiݺ5$1²³³ÓÓÓ׬YÓ­[·WóW÷Ë/¿|üñÇÑÑÑ­[·¾råJhhè“AŽY;räȬY³/^ùdذaF‰¬ge­Zµâóù999ÞÞÞ|>ßÓÓsÞ¼yÁÁÁjµúäÉ“±±±?üð!ÄÎÎÎÃÃãþýû:ÎÞÞ–>S¦Lqssóðð˜7oÞƒŽ;V^^þõ×_CÒxÅŠ³"ðx<‘HTTT”““Ãáp¼½½áýË—/ççç·lÙò…±-žê Ï…”Ò‹±ý2`€Ãá@V> †^OFŒÐ…†*t:Ý©S¼¿þâ ŒB¦N­çrµÑÑʨ( !äúu–ŸŸ¬m[5›­puåxx\ôô,sq9O[¯×ÛÚ2/3/íUÊ+Ø7 †ƒ‹C]§ºªª*µZ]ê^ZS]5£©_€L&SÛ^«ùPÃ3H2!„Ÿˆ _€›ñò•Ó”„Þzž¾VoDÓÂç€ü.œBM³´Mñ†¦~Ñ&̰0`J2i¸•õ[ŒWhš< ùʸË'Ÿ|rþüyPþ¥y‰4¨ÐÜeSn4½äÂm€‰2³X‚wYJ¸q ÈÍ|äÏ>,, &†B„Bá'Ÿ|²ÿþÓ§Oä$%%%%%%$$Ü»wïĉ¯ìOîçŸ^²dɲe˘LfLLÌ|𬎜™™™˜˜˜xÓÈQžQQQIIIŽŽŽ„Î;'%%±Ùì½{÷§mÛ¶Õh4³fÍÊÉɱ|°°°åË—§¤¤¼õÖ[›6mêСê±>s“J¥.\HJJ‚bÞÓTÅFÌ4£‘‘QQQ‘””Ô»wïC‡UTTxyy%%%}òÉ'1118D#??ÿ÷ß}úüÿÖlvBB‹Å?~üîÝ»¥Réĉ×­[‡yžWÙ:wîìææÆ`0¼¼¼ÒŸÒnܸ1~üøÙ³gOš4 ßÄjÄ#­¾¾¾®®ÎÕÕµ²²ÒÖÖÖ¨ãèè¸råJè///·³³3K èÓ§\.¿råŠD"iÕªU§Nª««Ÿ÷#mß¾ýÓ<É-Z¬Y³Æhg9]UUåèèxýúõ³gÏØH¥Ò?üÐtãòòr6›ýã?®]»HhÍ›7ïÓ§Ï÷ßêÔ)BH]]VA"‘H¥Ò&О…'”…†<`†ŽZ”1á#CÛæÚ5þá쬬< D£Ñ@T,ëtºÃ‡z=#;›og'hÕŠ|óM›÷·ß\<==5?Æ[¡ðoÓ¦M}}}nn®TêèììóÆQ½”5÷ î»»»7Ó4»#¾SUUuíð5í)­^ªg(,ÍÿÇÉÁ<iO´÷´Â@¡Z©æTs4 ‹ËBÍ7ƒ¡÷Ð!!‰Ö[˹ÌaP'@=åAwQº=1äõÄÐi1ˉ)Óí-§õÀjkk¿þúkµZ-¾øâ ó°s ¦‚7¦Á™å'ÓÈçöØ$i.—;kÖ,&“7wî\‡S§NUUU¹¹¹ùùù½Ê?¼¿þú+&&F¯×ŠÅâ»wïvèÐá)©Ñh$ÉÇ;FiÙ²eppð!Cx<^bb¢——×É“'e2™H$‚2‘mÞ¼yÑ¢E'Ožüàƒ<<<ââât:]DD„¯¯o³fÍ233óòòüüüÜÜÜJJJBBB,X`4 ÂÆÆ¦]»v7nÜÈÈÈ¡¡¡ûöí[´hÑš5krssƒ‚‚ „zæVQQqçΉDBÏå{ìõ› u³lgg—‘‘qíÚµÐÐP;;»œœ¨å8p¶‰?zôèÖ­['Nœ˜““£V«]]]AËçÍ7ß 9r¤^¯?vì>É.]ºgddTVVBÆrÕªUÉÉÉgΜy)Oò…eÕh‘P³¡s;à|±œ8R‡ÛµS1™|™¬úþ}nM {ÕªUØFJáp82C¥b‹Åì~ýÜ££Ç“ËåJ¥²uëÖ•••W®\a2™Í›7¯©©áóù-[¶äñx………—.]ÊÍÍ=þ<MAöñ Z­–s‰Ã8ÏÐè4,&‹Åù[›Óe:NúÔ¦‡ ƒÁ핱³ÙÎçÚÚZ¼#`Ü¡ƒv$ 2÷d}9ØH«P(Œpü61ÇOCŽ­¥mj˜×…|#“É\²d ÀzˆY§ÏçóáÂâÑÐÑèzPo&L?²¨#—Ë1ÿiaÉòðð˜8q¢Z­¾}û6­»Å`0»uëæææ†.00¨S‘‘‘<ÏÑÑ1..®¸¸X"‘ >ܨÐýªýê>ùäN½gÏžë×¯ÛØØšÝ¸¤¤ÄÅÅ¥¡õ;ƒÁ°³³ëÖ­[‹- ”¬ËËËËËËmllÞxã &“þî»ï¶nݺ  @§Ó7JG ÃÉÉ©k×®ðT™Lf«V­bbbzõêUQQQ^^Þ¥K—>ø 00ÐËË+??ŸÍfOž<¹cÇŽÕìÖ­›——ƒÁ€×žžž¶¶¶‘‘‘pö·ß~{òäÉaaannn÷ïß …Ó§O 2{·oß y2rƒÁ¸páž={~úé§¡C‡Z.5Ý»w¯M›6ʉFGö÷÷‡vèÐÁÉÉéþýûvvv3gÎôóókè;9`À€ÐÐÐ’’’ÚÚÚ¡C‡Ž1>êÔ©ÓСCždlllMMMyy¹¿¿ÿ‚ ÀÅøøø¼ýöÛ]ºty‚' ÷ø *òÉåòÚÚÚ[·n]¾|™ž2 Ñh„B!¸ZöG•ex&ôÀƒÁd²Z´Ðººj<=Y••Œââ¿çCÓ¾µŸ…B¡ƒƒƒ““S³fÍàwy-‰™†ÂÂÂúúúêêêšššãÇ9räöíÛ€ ´dêÓóAj8Äÿ¯Uèì+l6›­Óè×j™šf"ÐMòèá²áúÃÂÂÜÝÝÑ ß¾}»yóæÛ¶m3ã@©¾œ†<;]û¡{¡ŒÞy„§¦d `c>Ÿ/ø|>ЦüÈ”ôlÖð€¾H 8˜7t¶–Á`Lž|˜‘-“É8|è¦j'Nœ°µµ ¿té’D"1ÛçváÂ{{û&œÕ=xðà¨Q£êêêžl÷ÊÊJ¨0uïÞÝrníÈ‘#|š`èÕO[9räÝwß•Ëå¯ÚµUUU=xðà×_MMM5Rßr3ôÐ`UšWP¸·Ç ¡èâ€KòšpL‹åééÙ¼ys¡Pèáá¡ÑhlllÜÝÝCCCsrrd2™££#â%IaaaqqqMMN§U7h…Å5*Ü`ÍØÛ8Þu AÜj¦A„¹5ˆBP§ƒ?¸Gè65jÔ°aÃÚµk‡Š 1;¶Ê´/Çl”ƒß”MÓ,°œñD¸#M7°°ÜÁª¾å(Ç4ꢣìs²Ð£ŠØyîܹüüüèèh¥RiggWWW4«ÿ!õ€öZTž^qsuu}­[#ÿ§ Õ3‘ÖŒÞKëX×ö0Ý-¯×ëa øhœ/& kÙ”Áe6›­P(¶ø!‰pp5Ä”@å‡: ^ŒT*…”—ŒÍ&­O¸è3EÔ!†y( ^î\' öà …Bšß…L°†"rLçÍÈårZe‡ü“#‡ .SêÙУNÎBpfK&˜¸ƒN)#ˆ¢Aî×H›Î9hìÁr—)äà#¹îyÕrþw¬   ‘é ×ÑžG¿Ž…uˆ4Õ(ç¿Bü#ØÆè¯AýBQ“(¶W¯^5ý'î à `ø#€@}þ|>ÿÎ;L&Ó××Ú_œAYYYqqquuuqqqmmm]]¸0ìÂÁ‰ðLòòÑA14HâLb ¡¿†è”Hp†)V>,C¸iM¾‘’ Ïé›ÖíþX—a:”Á IDAT*ÓÙâ±k…KN¹ ÏË y‘N¹ 'Ö!¯¾*.áQ‘ŒîEº0v°ƒÿÅaÏr¹\(B¯ ÆF=H$‹>°/6÷ètºÒÒR;;;à ÁÚÙÆÆˆ£%%%ööö>„¥I}}=20–¢•ÖPæ §àŠõ€É7¼Gæ¦Óé Lo á .=ªÇêýžŸY!ÇŒùùù ‚Wvüɳ2™LöÎÒ¡CƒÑ¶mÛ&¿@yÅskØ¡3§iUfºû4jûc³$½ìE”BÆ€“ ÝS__/—ËÅb1“ÉÍ›7/**‚¹¢"‘H(º¸¸ÈårŠS[[‹%8öÊ$`|q¼ÆfÈ&aÜFß#ȵ¡B&¦˜ˆÚ×øD%˜²T¨júl×^°Jx‚hƒ&(ÅIO!&L¸ VÈ1oyyy>|-‹žÆœœœºtéò¼Ï’››û ÖÕŸ¹‰D" ”¶—Ž7ྡŒˆ4'KCÏ[C.=É QŠöYL@ùœ/ìËãñàÈ*•ª¾¾û`U*Uaa!ŸÏwrr‚\–Z­¶··÷òò>æ÷ šÁ¹>r¹ŠCØCCð€Î´4HÁ¡Z%8}¥R‰2k8Ê…±±!´1Ž›¦º5æùÓƒžaäjtÀƦ¦—O 9fržDIúÙ´ZmLLLÓÑV\\ìååõÄŒµÆ›Z­6lXc~™¯©éõú²²²fÍš½²ÈŠI3Ð]F>8¡P5HŽSÆúú&ˆ‰±Wkòˆ@ À.‰´ÔÆÄbqqq1—Ëupp,K©Tº¸¸`Øáàà ×ëÝÜÜ FÁ‘9ÈŠ„ËCN¶Æ- !žžž´¸51pè cÄH!ÓšX³&Ö^ZÞ© “¤Oœ81jÔ¨s.Nׄ½^Ÿm4`â•2ðËX¹a³ÙX’Áèý;ПWÀ¹c‘À‰^&ðx|øÞ½{ß~ûío¼áãã“’’²`ÁØëûï¿ÏÈȸqãFNNÎèÑ£»ví:mÚ´ÈÈÈ;v :t̘1‹-gOOψˆˆ:L›6í¥|x<^Û¶msrrJKKíííOœ8áåååââòlÏràÀÿ 6lذ!)))&&&++‹rîܹ &´oß~Û¶mû÷ï¿téR}}ýêÕ«oݺվ}{Ø÷ƒ>H$gΜùâ‹/¦N8sæLP«óññ™7ož··÷ï¿ÿžŸŸôèÑøøøÆL‹xíRàŽÐ…c˜fìììš7o^WW'‹e2¼cCqI‹}”4qࢠx2iuuuvvvZƒÁ§‰D¥RÁ,ÎÂÂB;;;¹\Îår¡*#•Jëëë•J%=ª‡Ú-QbÞd‚šæ| c¥R À0ƒ|ÆÆÖ"Â0±f:+Úl cô¢ñIfÑIÃPiWF͹¤qÌ Qoc¾6¦wg0Y¾ÇÇ‹rÌšB¡Ø°aÃO?ý4gΜ‰'°E‰D2qâÄ_ýu×®]~øaQQÑŽ;æÎ[PP0qâÄC‡mß¾}îܹEEE©©©sçÎ-..NLLÜ»woQQQBBBZZÚ þ~ùå—AAA³fÍZ¸pá_|ñÕW_½óÎ;ÏãD_|ñÅG}dö£ÀÀÀÍ›7GDDlذÁ××÷­·ÞzÝ™££cBB¾}û®\¹R]]’’2dÈgÎÝš0aÂ7ß|³páÂôôô¡C‡¢ÆD}Àc_$Tz°DO¨B=¸-¬µ@ð#D5MUUdÕT*•\.ntÞH$’6mÚ:ŽÏç£ÊÎϦóf8¬gá á >BîøH_Œhª1X#—˸=àŸYcQ†oÒÿŽ|>Õhž rLOj6ê02ȱsë±ÀóÕ«WïܹS,<¸ººúüù󃶷·_´hÑgŸ}¶xñâM›6½õÖ[ß~ûmDDÄèÑ£?úè£êêj±X¼fÍš‚‚]øõ×_¹\nBB€ ííí§OŸÞºukOOÏåË—=zÔÉÉéEþülll–,Y2þüuëÖíÙ³ç9i·$''Ïš5Ëò6+V¬HMMýù矃ƒƒ_S_9räÈÅ‹ …ÂÎ;>ü9e‡z÷î­P(þøã©Têää´oß¾?ÿüsõêÕ¸M||<ŸÏ1bÄØ±c­CG¢È<W .œrMMÍõëׇ rêÔ)ðb"ðù|T( ™ÓØŠÙ9ðÔX‚™^¯ü@…1¥R Û³X¬K—.%šz6V±è0E½È¡aøkA@™\¹C¤õ·ì´¡!Ü%ÊÆƒ\mém[í¹ü-jÃvºùîžÜŸÏ¢A#[;1…¤ÓA; ³áþ.0…%$á1p>2+8$l<>¾0íO0[¤±¬ž`4ÅÀèÛeô,Þ–$Ý£G´´´ŠŠ øS,'&&2D(¾ÿþû8Vhܸq‰‰‰óçÏ?uêTxxxÏž=ãââÒÓÓ‹‹‹'M𔑑ñœ\UC¶lÙ²ððpàDÌŸ??$$$##ãÙBð©!gΜÉÊÊš0a‚B¡øòË/çÏŸŸ››;uêT? QôìÙ³W¯^IIIsçÎÝ·oßòåË+**Þzë-ÿ©S§îرcþüùwîÜ™>}zHHH÷îÝ7oÞlkkÚÄÊݦVWW·`Á‚ .äææ>ÜÍÍíúõë{÷îÝ´iS³fÍ!Ý»w^¹r¥X,îÙ³gÛ¶m%ÉäÉ“çÎûÞ{ïåääÌŸ?ÿìÙ³ï¿ÿ¾§§ç˜1c~ûí·ªª*>Ÿ?räH{{ûƒ~öÙgùùù}ûömݺu{z´Î­Õ#AÑCA{ øtPQîapy4Èàï€A€A¼Æi4È=C²2¦ûè¤ð›*h-5zl Ðõ¡P(“ÉfŒ4Ó°ÅÇÈuBHÛ[kÏ÷ÛØÐÀ=£àóæÍ›úóçÏ7áy9tþó6…BqöìY«ë‰NVhœ \è^K/ˆAilÀCƒƒÀ‚2Q¨Û3@¤†ÎHµÉ E¡p‚W‚óo€D‡Zpp.¹†W…ЂF‹Œ‡ jH...UUUØQ„M©H®Ã  ¦,«½BÓ´-((èq[‹_#{‘SÅx<Þ‹œ÷âÍ4­ñJjÛ ‡…´öê#å B °rƒ£e L‰I¸#êxbœ’Õ@ÃA×€‚X""†Ò ô僺%Â!rÞ&!GwÂãÜ9H©) ÌÔÁ z(6ùÓ¬6ZŒ6¼ZòOƦ¶hE²ÆTƒ0c‰Ù?zxé kÓnSLs¡&›Qh‹;ÒÁ.ý)-C`:ú“{CÂÃô)&îè›":»rÏ233_q?òôæèèøbªh¿üòK^ÖªU«Wv^ ŸÆ ÌÇ„?ÄŽ% Ð!·\¿J¥‚8å5Á‘¡<3D<666À%ºpp¨1àp ’0Ãjr  ÑS¥R …B¥R ¥)Üp*Cв¥Ø0õGkSÒez¤Y0}mVúÉrY˜ß£!‡þᘎ6E>Ó-è‡Ò;š½kÓ kÌýÒA§rk±±±M»@UPP ‰^À¼BȰaÚp²B¯×{xx¼²°=…Ïç+ >Ÿ¥‘ÚÚZ\ïcæ Ùhôxf£4~„©*ð€8Ðh4í ÛeèÉ`ÈšS«Õ â91Œ„ŒÂL²á˜júÂ`w!¨Ha1 G!`Ò…ÚE.0µi5kbíü,›êÝ:uê9)™š0—š0äœ9sæUž—ƒ¹):Ý9%zæ ]™§sVL&ÓÕÕU­VWWW#m q‚CW«Õ|:â¦ÀËÓdl“Äé/HzÆ ÔA•¤$@¤¥P(›@tÁz1°ÃáPˆ©H+ miLÊ5”{$“í‰}pF§‘ú›–͈³÷ÈKE¥TÓàÆ,#YÑû­c5«ý¯®+Ùl½^occ#ª««A÷Gà Ø` f ¸^¾¾¾ç C…€Çã¡v'Ä@p@GGG˜Ê›AîÙÉF}?ðd€ÞN¼]Ø. ¬i±j8&- —Šz£8ÕÔÈÒÛŠÈi†EC9¨'ƒº|Bþ9 íéûRi-êÆp¦œ),2™Å*³jÓ §A=s挫«ëÞ½{›ä088ø½÷Þƒ×EEE®®®_ýõsZïÞ½ždnn®H$Љ‰ñõõýí·ßêëëçÏŸß¾}ûîÝ»÷íÛ·¬¬ ÷*//8p`tttDDDbbb]]ÝüñÆoÄÄÄ´nÝúܹsb±8!!¡S§N]»v‹‹ƒtüK±ÒÒRWWWlÌ:tè«««©ÐÑSZaa!̼ ]½zµX,Æy9žžžC† ©¨¨6lX·nÝ:vì8kÖ,‰D‚ûæççØ¢M›6Éåòo¿ýÞ øðaiiiïÞ½{ôèѾ}û ¼H.ß‹1€ …BQYY)—Ëaî'Öí!¡4hÐ wwwœ=C µk¡PŒT*I!(ÝÛÛÛ7oÞ:~€;Äi4b±gtBäì5œ’€j7tŽ 9r8OºU«V þ‹E&dCÀ„7 ˜ð°H·C0Í7€Ftîðüÿ™V{ÂÄ bzzz‡~ûí7BH¿~ý a¾{÷îÞÞÞÅÅÅÇ'„ðù|ÐÎÊʪªªŠŠŠÊÊÊŠutt„é„#Fàó—n}úô9sæLnnnhhè¡C‡<==ŸSíwÿþýû÷ï‡'9iÒ¤àà`˜—3iÒ¤£GÖÕÕmÞ¼Y$ùøø|÷Ýw8/gëÖ­'NœÀy9½{÷ž6mZ—.]`^ΤI“-Z´sçNœ—óÓO?½¬y9 {÷î999EEEŽŽŽYYY¡¡¡-Z´x¶gùã?ºvíºzõê 6|ôÑGýû÷T;qâÄ”)S@›àøñã—.]DyðàRò>úè#­V›••õÅ_$&&FDDÌŸ?çå|úé§ÞÞÞçÎÃy9}úôibBØU?UÚá¢MFF¢®–7 =88øÆàµÁ•7oÞ<00ðÏ?ÿ¤©Stï R¢ ¥»ƒÇ§»gPÐEò1þ€|WAAì‘ ¼†±rоƒƒ <Âk9€s÷ì!ÎѺÔfCzŽC#kfcÓÁϦ5y:£e™§@Ï•hh3£ äŸôš:a¬ÀfðÐàPO?EóщµeË–ÅÆÆúøøìرãäÉ“QQQ™™™¿üòKrrrbb¢V«íׯߧŸ~Z[[ëí혘8vìØŸ~ú騱c{öì9|øð¹sçÆ¿qãÆ;wî,Y²äù.Y²dáÂ…³fÍj×®ÝáÇ¿ùæ›ØØØçq¢5kÖ,_¾Ü¬°±¿¿? Ó\¸pa›6múõë÷:º3‡I“&=zܸq0hÁ‚FÒ OocÆŒ‰‹‹›={öõë×G ºj„mÛ¶ÕÕÕMŸ>=99Þ À¥V£]ÊÑ#¥1€Oéae¨rFO=@o±È½{÷nݺµšº†%,¢Àû´”ê¼x ó Òh666cÆŒÉÌ̼ÿ>"r 0xÂ!†AÄcggB ØG`#] IØ i¬™0Z [¼¤7ƒ( `6®2%’™%›íhöP¦ìjœ…jùRi`+!³ž6ÑטÔ^NNÎøñã}||><~üøˆˆˆ¬¬,•J5oÞ¼äääñãdzX¬£G^ºtéáÇqqq={ö„}8àíí=~üxOOÏÿcïºãk<Ûÿ}öÈNŒ ÄŽUYµG[ÑPM‹TT$(ª”˜±ƒšA+Í«j·ZZ5kÖ¨• "!±CHÈNÎ>ç9¿?.ù¾wOÂÍâ=×>ñœg\÷ºöعsgÅ9„jµzÖ¬Y¯¼òÊÚµkW­ZUJüféÒ¥S§N}ò=sçÎݼyó¦M›Pêæ…ƒöíÛO›6íƒ>èÔ©Ó AƒJã+‰dðàÁ­[·>yò$ÙͶnÝzøða>yРAÝ»wÿþûïílƆšPâ=yh¨p²m)@0$ÐÀµƒê5qqqFÏÑ!æ‹rBç $²ãA™ —À»Ã…¶Ä£~qqq÷îÝ#›=N4v<²‚†é$ÕJ«Õâ…4 €J¥â½Üd‡ ÕÇnX+UøW“{îÜ9êHÿàÁ\”ÉduëÖÅ?Þ­[·¬¬¬ UÆÊd2ýðÃôõõ5jÔÍ›7Kü«W¯ÁÓÓ“ª—¦¤¤Øt*((§>c|ùÔQÑY¾|yݺussswîÜYJÁå"‘¨E‹^^^·oߦ™|ðàAvv¶îÙ´iÓÌ™3'Mš´{÷nûÙæA¯×#¸™$$òÃÈFqÐ ‡wª pÈ¿TE؈  "ñ¤µ˜ÍfµZíããC &¸L͈Ä;;;Ã$•J]]]‰©îb6›ccc5M,q)´Ì@14Ž#Iþà»&“I§Ó¡Û4¾RÎãLgÏÚrFTÄ…À[´ŠBÑKp3ûÅ'ÜÆ÷ÚyÄŠª_%Ãròóó'Ož{|§>v cøe°n¥†Ú±.ª·† ÓÄrÈÛÁÇFשSgõêÕ½{÷Æw‰ÃÑËe2Yƒ (¤R¿¼W†ô!øf¬CÓx W*•¤Ù…p§\.çm\£¿è!ý”Qd4dP?¥¦qåÿ·Qô¿ÑzÍE XS!áÃ7Û.:¢¢Ò0÷õç‰Z­þøã<˜™™9tèPj8߬Y³/¿üß›8qbTTÔøñã<^qáW_}Õ¢E‹·Þz‹16a„W^yåСC%[¦cÇŽ;vdŒýõ×_¿ÿþû Aƒ>üðCr ?~âĉ`~GeŒ½ùæ›þþþóæÍkܸñŒ3víÚ5{öìÌÌÌ^½z5iÒ3yåÊ•ððp__ß=z¬\¹ÒÁÁ¡eË–Ô˜çåöF,]ºôܹs‰‰‰~øaÕªUvìØ±zõêÊ•+3Æzôè±}ûöyóæåçç¿ùæ›Í›7ÏÏÏ ›2eÊðáÃ?ùä“ñãÇ_¸paäÈ‘5kÖ:tèîÝ»SRRT*UHHˆ££ãÞ½{ÃÃÃSSSß}÷ÝZã,P‚“q ÿðšØDè2®¦_óŸ'÷|„1i|h$c2ÆÒÓÓ¿üòËøøxàË… IDATVèÈAŒ2÷ØØX8É­V+ì °z!F3ú‰oAÍ «ï€‰BéEylÞ_K7P`‚½yA©ÂcYN³fÍŽ;V³fM___ZÎÙ³g‡……1Æ‚‚‚ºuëV»víiÓ¦ÑiРA=*W®<`À½^ûöíÕ«W3ƆJ%U†Z¡ÊlÛ¶M¥RÑßU«V=vìµÿ) ÀLº¸¸_}èС>>>&“騱c¸4Å-[¶(•Ê:uêlܸ‘<U«V­ZµªÍLJ$’¯¿þš:㹺º–^³Ÿ§‡%K–”^Oñ:üúë¯ô~šI__ßcÇŽaàÍš5[·né‘UªT¡æLÇŽ£ÙÛ¶m|êÔ©ãää4{öìÛ·o3ÆFE+²yóæ‚‚ÆXµjÕˆ‡½L@ P™Ÿ¯TÆ3b0r¹ÜÕÕ•fî¾ö—WFDùüˆ&H$fß¾}€^œ°_!Ý ˆÔÐWxüIáë \@03 r£`9Æå£ÛÙE°Âs^l€ʈå888ÔO±ðŒ1ïÊ•+Ó±”ËåÐ š7o¾qãÆY³f­ZµêúõëÕ«Wwvv–ÉdeY>òéoîRÚHb&Ù?‹i*Š¢ßb6¥Š"Y­ZµEþ7PÚÍ4mÚáð³J`Ó=H*•â›^>...6ÏòÞÇ—ÜÜÜjÔ¨qãÆ ˜¤XaM]Ff ¹@ð+ñ!NG%yÍ›†ÈOƒRlÈt!o q OOÏ7n ?)òiÀ«Xa)Iâ Èî„癡¬0Ùˆx'q2˜ìd2½ÙÁÁ,x„<H¡Aªáf±X´Z­R©|œa/þ†ë¨ÄHu¯mTsLuÑÆÕŒ+òfóà“ÝE|ÐyQ…Œ¯¨ åeXÁé‹Ú‹†Ò!^\§Ó¡˜SQç R_T*D“ça9σ6›Í”Á³lÙ2êbi;Ø¡|!##£I“&Är àÃÜ„fpÂCo G= E³Bw ˆ—Õjutt”J¥999ƒ½ %c±XRRRøÒÔÁk¤QAù€wÍu`|ƒv‚°Âòä>a…UXˆKñß â ¶ “C°+:å£å<„††¾4Scï—S" ×ëO:õ²ÎdŧPR©ô?þ€N€j7H¦A _*†zV*•!#©™u¦Ç³³³Qâ ¶/º¹™Ð¨Àf ³ƒ— )>6n´4¥—³áË`ó©BE‹Fã¿àp(hmï—ó"±œ—AhÙ²åK\S¶M›6e6:™LfÓ ú%ƒ'T¼¯ ›™4Ä€‘%ÍlŠ _‡†朣 Ô#ž”C㡯ÀQ„|u±X¬T*‰7P5¼JÄ É9äáá‘––†9¨2|ĸ lh6-sÐ產ÑÀhùòeª&ÉßStm2ð7ìWEƒÊø~6%¸=”J¥MµM³Ù\´?tQ|¨0]±r߈†µ¢¦ÂÇ 4t?Q›å<;v¬â”ç)%pqqi×®]|h÷îÝ/½äX«V-QESt}B-¢HÐ!ƀ—t3Ñt$¯ðao¬0r F08i¤R©L&#ÿ ÝI¯5D©aÅ‚ÆC´^¡PŒ;6""¥ %‰R©$Æ€3bðNNN”úCHµ£Óé@ûh,AC€íÖ9>˜ IKÅÎ!߯¬h˜bŸ‚÷„"Ï ¹MÑÑ=%ªÅvÓy¯²³œâ¡[·nU«V}‰­º·nݪ_¿~Ùô˩ȅýKRRRjÕªUaûåXºv5¨Õ"7…u dYbL$3«•‘!ÆÂºÎ"ƬŒ ‰U¬‰@e¨â§=b3…Ê âÂ(d™T*‚Áh”I¥F‰D,)•J³Åb6™cÇr‹…‰D‘hfZšqØ0¾˜ÒÉIS˜Ð&‹Í&“D*µ ‚Îj•ˆÅA‰Dbl‚ X­Ìj5‹ÅU¼‹­V«1Áj1f’ý-f³T&Ó›ÍVÆ$b±‘êg“OH"15kf'€vÃZ9ÀËÝ/'66¶ÌP^ú~9çΫqêÆ’“ó"öV+YÉÌf³¨0GG.— ‹ˆ1Ū1F F$YÅbb!V«U,L$’ÓD"‘” ÈÂ&"±X"‹¬V³ Èd2…Å ƘÉbÉå‰D&I¥R­F#-l '+ I0›L„%øV^N+ô6 V«„jÆÄ…ý¨Í‹T"¡{DV«`±ˆ$Áj•I¥–Âð9Ò2ÜÝÜòóóAY­R¨ziáûÍf³H"‘WFŒ/„S¬øŸï,WÔº…+OöUGŠ6)Fð7:d³†>NýB3‚b¿{)žå­‘üKŠ~‘N ¤ÏÌrlІ–x,M:Í»D"yrɼÇM"Hi Y2b¦Åb2™ …ÍfÅ ˆÅbÚRTKŠvZjIR¨Rƒ¦§lÂMär·@bØÌpÑÙƒ9›¶ Us¡›•JåK+Wž9£Ú² Ф"¹Cdr¹¸PÏx±VXôŒz ÔR)±UY!BÕ«Õ*+ ˜–Édh¤†æor‰Dy¡È`0ÐI‰DmÛ¶={öì£Zm…Ú2™L\X2àQéB:Žhô, ÛàìAÔã’~¤…¬‘®Äb‘ɤ”É`‰ A¡TšL&)ixëßÿɦ§'°œ'XÛløÖ:^[×¹(‰æÃ%lnãCºŸ¦…^U¬ °¨ï§è$ Êãq¥Qaø)¸Zµj:u X»vmɃŒŒŒ‘#GöèÑÃÏÏïƒ>HKK{Ö7˜L¦€BèÛ·oµjÕ"""*œ€)1113f̨V­[äææN:µsçÎ}úôéÕ«×;w’““[¶lжmÛ+Vh4š+V´mÛ6  eË–ÉÉÉ¥íµk×Ú´ióÆoP¦äÿ C† ñõõ-ß>yòd£Fš5k¶gÏ~{¬\¹²M›6¾¾¾IIIwîÜéÝ»wïÞ½»té2iÒ¤ÜÜÜ={ö4kÖ,  Q£F'Ož|YYÎ#N#•R.$å{Êårrº!Ñ(œ”_ RÎ%#Ü‹è#¨?ßU¹ˆ¡q€D"‰‹‹CÓòÙP¼aBÁc|­eÎH†@eO¹\Ž–ä†á£œQ:½´Ñ‚åè_r¡Pÿó‰¿v(ÃÚ¤I“cñññß~ûm¿~ý~ùå—-Zäåå]¿~1Ö²eË×^{í×_mÓ¦ xº‡1æïï_«V­›7oRé~ggg¾ÆpjjjÕªUgΜi2™^{íµíÛ·5ê™P—ÉdT¾Œ1¶aÆ»wï¶oßþСCDÙ[´hÑ®];½^f9xðବ¬ôôôŒŒŒ[·nÕ®]»R¥JgÏžurrB»¶Ò`9;wîLHH(úS||üš5kÖ®]Û¥K—ºuë®[·.99Ùd2íÝ»wéÒ¥sçÎíÚµëܹs§M›6eÊ”† Ο?ߦÎX‰Ã_|Ñ¡CN÷Ýwß}öÙg›7ovttôòòЉ‰4h³³óùóçÿúë/Zb>-66öìÙ³Œ±ºuëöìÙ³,wð¸qã^}õÕ;v„††~úé§½{÷¦ë999³gÏž2eÊ´iÓ7ný“O>™>}zXXؤI“¬VkzzzXXX\\Ü¢E‹¢££=<<~þùçéÓ§{xxœåGãããÇÿþ}‘H4qâDÈv¨ €Ž8¼Ý ÖŠXCã>"Ô ¤<Z&pއF¢(Ê?Óõz=q°=ÞÔÃ×U#-´ºbÞø^8`rp?€úPMä$ãDhÜóÏm XÖÅÿŠá—Ôû©A±´H¡PP‘ˆbYð¿šs‰Db0´Z­V«¥øçd9‹-êÖ­Ûøñãé¿qqqýõ×úõëøá‡   ¶mÛ^¾|955Õ`0\»vmÀ€Õ«W?qâÄ€š6mzüøñììì“'Oúøøøûû›L¦Ó§OÛ¼?00044ôòåËçÎ{¾ãôÓO?Í;÷Ûo¿íÖ­[rrrJJJ¯^½ºvízåÊ•;wôãÞöL±Å¾óqé8O¾¹Øï ŽÀˆøL gJÁy–S,üòË/'Nœ¸páÂõë×ßÿýÿ÷þààà &¬^½š'FW¯^=pàÀ¿ÉذX,Ÿ}öÙ™3gþóŸÿÔ¬Yó"¸}ûv…b“—/_^µjUtt4$Œ™3g2ÆŠ ¤ÞºukÑ‹¯¿þúúõëëÕ«W¾c9wî\LLÌ ÚØ»4 C‡Ô¿€¯NÕX*r2®v'_Þ†'Ó 4p΃¾óªñE›":ˆ=ãÛ"Ыˆ!ÁádCßÁ#ys<0èÁPeC%QEn(”®¿úê«Eç°R¥JÆ {·à}!6Uº‹¥û|ón+úþ'3­¢Ö¶¢œ£èƒ|<÷{òˆÐx uJŒåøùùíÞ½;<<ÜÛÛ; ***++«Ø;ÝÝÝG½mÛ¶ÄÄÄÓ§O¯Y³?)•Ê?ÿüóàÁƒ …¢]»vo¼ñƳ¢a6›¿ûî»úõëóÍ7t¥N:mÛ¶1c†N§óóókݺõÌ™3gΜ9|øð¸¸8¢¡¶lÙrðàÁØØØ~ýúEGGoÛ¶­iÓ¦ï½÷^^^Þ¹sç†~ùòå1cÆx{{3fÇŽÉÉÉR©tôèÑå‹vÓ¦Mi¹ûôéÃ_÷õõíÓ§ÏòåË×­[—––öoÜrÏ3gΜ:uêðáÃÏž=KK|ìØ±ùóçûùù7n×®]ç2fÌWW×½{÷N˜0!333  iÓ¦3gÎŒŒŒ>|ø•+W–,Yò²²œ† ¾ô¥4JîÝ»gŠéèèHí¯ìð”pá¾}âù5“×jµ»víâI‰^¯OMM­R¥ 5‘ÍÉÉÉÌ̬U«E¦§§¨Õj¥RIüF­VW«V---Í`0x{{geeegg×®][¯×S´L&³1Èdff’=ÍÉɉï+úôê7nðW\]]Íf35>quuõðð°X,·nÝ¢_½½½Fãýû÷=== ÅíÛ·ÝÝÝÝÜÜnݺ¥T*ù~9çÎkذ¡³³sI¥‚æææfddÔ¬Y“ò]ÒÓÓµZm:uhV1{Œ±Û·o“µÚÓÓÓÁÁA£ÑÐìI¥R›âüÿvïÞ=pà@T(v¹c*•ªzõêééé:ÎËËëÞ½{:ÎÙÙ¹I“&S¦L å—›1æàà`Óyhÿþýï¼óN饂 ‚€¾^´?³³³³²²°ÜüìÝ¿_«Õ’0äææf2™ÈeEòÊóñ­Vëþýû*`õ¬¬¬”””6mÚëO¶ÃÀÉɉ( clß¾}ýúõ+›R/P;£Ñèä䔟Ÿ¿ÿþñãÇ?VËQ*•¼…ÄÕÕÕÕÕÿ¥ÎWô7ê¡„~ãîîN4èq–çH$*öÍ@Œ´Qþ©TŠÿâ›Î4¥......E1´™UV¤éËf¯dáÿ]nÆX\\ÜСCظqcwwwooï¢Ë]ö ‹m¦ÈÍÍö$¿Ü6†d2Y¹›Kh]ȱa§€Ïà7d×)((°Ïá³B±ÛöØ ;<-´hÑbùòåæìÙ³óæÍ ²Ï‰ì`‡g{µÇ‰'žWõ2 qO;wîܹó³>¥ÓéþüóOû޲ƒì`g9ÅEétìØñåîX6££®À]»v}¹7ŒýÔØÁv–óœ@Á*/}?ÚçStžºwïþ—‘&°X,¶sìPAYŽH$z‰‹éÚÁv°ƒ*˱Z­¨še;ØÁv°C‰€££#òœþaXkÑ¢E¹¢Èyù†!¢SE[° ‹˜  "äÿìzÂÌ „LEjT§®‚¯iE>¡6¥"Ê'''”EøËqvvvppx¾BªÏ f³9;;ÛÁÁÁÑÑ‘•Ÿ%//ª-9::–ñ <òóó©ä¢““Ó“; –/dffªT*¹\®R©Êx CAAR©tvv®PkG-•JÓÓÓO:Ul>vùB¥J•Z´h¡V«ù²˜ÒÓÓ+ b6 ÑhŒF£B¡pvv®'4''‡ªÕ•=1/ ¹¹¹"‘ÈÁÁ‰´¶á&“©Œ¡¹¹¹/^ìÔ©++‡v±ïéééååe±X4MÅÙÐñññ•+W®U«–Ùl®PˆÙÀ‰':vìHŸ²ÞkIÁýû÷ïݻתU+«ÕZ§èôéÓ-Z´`ŒÕ®]»U«VMÅqpp s§ÕjŸ¯ULi€ÅbùóÏ?©PžN§«€’ 11Q¡PÔ¯_¿‚ŽØØØFU®\¹ì‰yQ8{öl½zõø¼r{*¨ì`;Ø¡ŒÀÎrì`;ØÁeÏŸ—süøqhmíÚµ‹‰‰©[·n±µî˲³³ccc›7o~íÚ5¥RÙºuëøøø¬¬¬nݺ• ðòòjÒ¤I¹/ê™3grrrªW¯Þ¬Y³Š¹íòóóu:]åÊ•áá|ðà9cìgò9–Ûl6·oß¾" söìY½^_Á‹.¿H– ܼyóêÕ«:uR©TÅÞððáø¸¸–-[í›U¦ZÎŽ;FŒq¾>|Xl•2ƒÄÄÄÀÀÀ“'O^ºtéêÕ«Œ±eË–¡ÅEÀùóçïܹSî{è?þ6lØ™3gnß¾]a7zJJÊ™3gxŸpNNŽ=›òù`öìÙ“'O® ÈÌŸ?M„+,\½zõÒ¥KöÃÛ¹sg``àƒžÀžãââÊSËÙµkWxxxff¦ÕjmܸñÏ?ÿüî»ïâ×Ñ£GSû©S§Úôœ(¸víÚ¬Y³c2™lÆ Œ±•+WÆÆÆ~ôÑGtÕ+W*Uª´k×®˜˜˜‚‚‚E‹M›6­dq8vìXttôüùóëׯäÈ‘U«V-X°€üüŒ±ððp"÷£Fjß¾}ppp¯^½‚ƒƒ'Mšäìì<{ö쯿þúÂ… ßÿ}‰OÎñãÇ'Nœx÷îÝœœGGÇΟ?Μ9]ºt‘H$”wõÆo 6lÆŒ¡¡¡4“ , f £GîÔ©ÓåË—çÍ›ÇS«Õ¥$@§Ó%&&z{{W©R%//O.—ߺuëáÇMš4ILL¬]»6ÍgÉBffæ˜1cèï*Uª,_¾üÇܵkc¬}ûöcÇŽeŒ…„„PÅ„ˆˆµZ½gÏ…BqàÀooïž={®ZµŠ1¶yóæRš–%K–\¸p1øî»ï>xð`ܸqôÓ÷߯V«7mÚ´gÏÆXÇŽ?ùä<¸víÚ0ƺuëfÓ,¼m èÛíââòóÏ?oß¾LÀ“1fƒdDD„V«õ÷÷ÇÁ)YÄÆŒS³fÍ lݺûÙIºtãÆŒŒŒ²G’1váÂ…%K–Lš4©nݺ£Gîß¿ÿ{ï½7räHŸ &,Z´èâÅ‹Œ±   >}ú¤¥¥………уëÖ­+½¦G|÷ÝwsssGE×£¢¢p!Y£FíÛ·÷Ýw`\FZN÷îÝ}}}FuãÆ}ûö!BiôèÑGމŒŒ¬[·î{ï½G=WJ,KÏž==<<"##“’’ ´aÆ  2²ÕñãÇÏœ9Ã#Yâ+”••õçŸ^¿~Ýd2%$$œ>}Z§ÓíÛ·ïÒ¥K³fÍZ¿~}ddd›6m† ’””{öìYNGˆi4š¿þú‹hJ‰CëÖ­»té›0aBjjê¾}ûzöì÷Ÿÿü'**êã?>|øìÙ³ùå—ãÇO™2%22R¥RõîÝ;22²eË–ƒNHHèÝ»wµjÕ"##ãââBCCKå\¾|¹R¥JçÏŸÏÍÍMOOÏËËËÏÏOOOOJJrww?þ|it(quuŒŒœ?~FFÆ¥K—öíÛ7eÊ”ÀÀÀñãÇ/\¸píÚµÁÁÁ ‘‘‘UªTyûí·333çÍ›g0"##ׯ_¿gÏžÈÈÈ»wïöëׯ4æäë¯¿ŽŒŒüøãßÿý… ž={Ößߟ1)‘HFŒqøðáeË–…„„Œ;vÁ‚$u1Æ~ûí·™3g†††Ž92""âçŸ. ôúôéc4###•JåðáÃ<8qâÄ~ýúMœ8qñâÅ«W¯¦ÛöìÙ$cbbÖ®];jÔ¨øøøÒë:vìXddäŒ3âããýüüI­VûÎ;ïÉ?þxß¾}7nÜ8sæÌñãÇ‹ErãÆGŽñððèÙ³gi„Éåååyøð!]5j”\._±bE~~¾Ñh¬R¥J``à™3gZ¶lÙ²eˬ¬¬ÈÈÈàà`¾¥r‰ÃªU«ÜÜÜ4Á`ÈÊÊÊËË‹‹‹CŸF@§NFŽ©P(þÍæ/ù²ž$ø7jÔhúô饴ï\£F¼¼¼r±öìÙó÷ß_»v­¯¯/e]ðP½zõéÓ§W©R¥|› Λ7O,_¸p!,,¬(žƒŒŒŒ„„„¡C‡Ú4r}9 ))éÔ©SáááÏm(=èׯ_¿~ý-ZÔ©S§åË—Ûܘ˜8~üx’-làúõë5jÔ˜>}úÓ¯u™AÍš5GŽYzï÷õõ…ꙟŸŸðöÛoS—ÛV¯^}ùòå°°°   Ï>ûŒ7¢–*Ðìùùù•/ù iGGÇÉ“'{{{ÇÆÆ–R…-ZLž<9==ýòåËtÅ`0DDD{s|||i˜ÝßxãêÕ«oذ¡yóæ6.+‘H4yòäæÍ›ÇÆÆjµZŸo¾ùfÒ¤I ذaøqãlÚSeg IDAT–6\¼xñÂ… ÁÁÁÁÁÁOi ›>>_~ùå·ß~«×ëkÖ¬Ésss«Q£É ^^^NNN[·n>}úÉ“'Fãï¿ÿ^HR5jüý÷ßÍš5suuU©T2™L$Q°¦T*U©T¥Q$Êd2effž;w®_¿~ÕªU[»ví¤I“¦OŸ.‹ƒƒƒ‡:hÐ ???Ú`Û¶msppðòò"q–˜ý³ÙyÉ‚¿¿ÿM&Óœ9s:vì¸sçÎnÝºåææîØ±£J•*aaaS§N­]»öÊ•+W¬Xa0j×®ýÞ{ï‘DÌkß¾=•ó(qرcÇÀ»uë–——·eË//¯©S§Îž=["‘ 4è£>úûï¿ÍfsïÞ½ I±X:dÈS§N=. ·DÀÓÓQ¼CráÂ…ûöícŒU®\ùÉHÒ!*=‚Þ¨Q£K—.½ùæ›ÉÉÉJ¥’Ü'L˜pãÆ€€£Ñ8pà@Ÿ°°°aÆmß¾]§ÓíÞ½»4!.‘H”J¥———J¥Ú¾}û€hö6oÞ|ïÞ=///j2àëë{÷îÝ›7oRÀÈó¨uëÖ'OžÔjµ»víz÷Ýwåryy¼qtt,Ç‚7çÏŸ§‚7*•ªBM‰‹‹£‚7 18tèPÇŽœœ$Iy¼qrr*_3f±pìØ±-Zh4B²Bᆂ7jµZ¯×W¨‚7û÷ïûí·ÕjµÁ`ø7žü´´´³gϾöÚkZ­Ö××7""‚¬û÷€‚7(T¾pêÔ)*xS²Ä¼aƯ½öÚÆŸé©˜˜˜zõêÕ­[7??ÿþýãÇ··h³ƒìð2C~~~ttôöíÛÝÜÜ7n\ArfÿgÁÎrì`;¼ÌРAƒåË—SªÜ!C*lIŽ ßÿ=_ÓÎrì`;Ø¡x¨W¯^½zõìóðo ¤¼ƒÒ¢JèÝ»wËr$|AJJJyY“sss===cæÖ­[g¥sss)B«ÕV(ÄlVãìììôôô²ütNNýa±X*àÁ'‹e2Y…ÂÐHMM¥š x:ššZÆÞÁg‚¬¬, @ÕëõaûÁYöÄü ÈÏr¨ÝHÙ;`k×®Í3ùùùåÅr*UªäììlµZµZm…rA{xx¸¸¸T@ÄŠ.¢T*¥–!eŒ'en2Æ Cœ¢š5k* ±X,•J+`kW£ÑÈ3™Lв7jÔˆËÏϯÈ,ÇÅÅÅÃÃÃjµêtºŠ°ýªW¯®V«Ë‹˜Û€§§§MrÏ?"Öøòv°ƒì`;ü{ PÒb"Ö222Ž=ZzÅãJÐàëëK™@åÛ¡Öb±aÐÑѱâwh/VçU©TRéÿ®KÏd2‘]î{©4åââRqâžK ¬VkBBÂÕ«W_²ý,‹_ýõJ•*9::¾p[T¯×Û°5¬yyyµk×®‚C¡PX­V£Ñ(BùÂgee]¹r¥}ûö"‘¨"[½Š‚Õjýý÷ßýýýE"‘V«­È~Knݺ•ŸŸÿÊ+¯X­ÖkŸÉÉÉV«ÕÇÇG„—fPO2ÒX,–Ö­[SŽóK*•Šê šÍæR*Wz@y9|M{WP;ØÁv°CY)mö)°ƒì`;Tt–c±X®]»–™™yÿþ}¾ø`……[·nÝ»wϾä/+¤¥¥½ûðYáæÍ›iiieð!AèDãJvvöµk×ÌfsÑ›ïÝ»W‘Cöÿ=ܽ{·"4ù-G¸ÿ~i,ñ󳜼¼¼6mÚDEEmß¾ý›o¾©ø3اOŸŠß"×Ï Ó¦MëÑ£ÇË7®=z”x[Ûb¡   M›6_ý5®œ>}zÉ’%Åö?~üËàºqãÆuëÖý/¨‰'öêÕ«Ä_[¡...•*UJJJÚ°aÃàÁƒwìØQ£F?ü1¶hÑ"r„4hÐ !!úxxxL˜0aïÞ½'Nœ=ztTT”¿¿™Õ>Ú´iu=xã7¨@ïÒ¥Kß|óÍ[·neddLš4©´øù矓““ƒ‚‚Ö¬Y3pàÀfÍš]½z•ö·££ã´iÓŽ9rèСðððÔÔÔ7{zz’]»v]°`y‡êêêúÕW_õêÕëÊ•+eÃS?ÿüsʾa¹£¢¢úöíK3I¤€1öþûï·lÙ² FºwïÞFmذÁh4úûû'$$ܾ}»eË–ï¿ÿ¾›››Ùl>{öìo¿ýFˆµmÛ–ï†ù믿¶k׎îß¿ÿÑ£G>|رcÇ^½zéõzÚŒ±I“&edd¬[·nРAµjÕZ´hQ÷îÝË@6ºsçNtt4ýííí=bĈ­[·R3âb‘tss;zôèÁƒc>>>|—“?þøãðáÃŒ±¦M›•›–Ã/ÛÚµkSRR¢¢¢BCCkÕª5gΜ͛7Ï™3gÓ¦Mþþþ™™™!!!W¯^>|¸N§ó÷÷ŠŠZºtéÉ“'£¢¢‚‚‚¢¢¢ø¶¥}œæÌ™CA‡ãÆ‹6lØ… N:5wîÜM›6•\¾|ùW_}¥Óé†~õêÕÌÌLÿM›6Í™3'666**J£Ñܼy3***%%%???**êüùó³fÍúé§Ÿüýý½^½zÕªU“ÉdmÛ¶-›tëÖ-ÿ½{÷N˜0a÷îÝÓ§OoذágŸ}6f̘¤¤¤Í›7S÷ƒ®^½:>>þÓO?uqqéܹóܹsׯ_¿wïÞÈÈÈÐÐP:8ëÖ­ó÷÷ÏÎΦY:t¨F£¡f‘eÉo~ùå­VûÓO?Íš5ëüùóQQQwïÞ ÍÎÎö÷÷_·nݼyó6lX¥J•JÕªU«õë×Ï;·sçÎ...Ÿ~úi||<-÷áÇiO>y¹·nÝ:gÎÿëׯ<ØßßßjµŽ9²l¬v'Ož îÚµ«Z­3fŒ««k³fͦOŸ¾{÷î_ýuË–-‰‰‰D£6l8uêT’>yò¤¿¿ÿÅ‹CCCïܹuãÆ NuæÌ™2š«««¿¿¿¿¿ÿï¿ÿ¾mÛ¶;v̘1£yóæCòüùóãÆsssëСCDD(á_ý5~üøªU«¶mÛvÖ¬Yÿ¾Áy ‡„‡‡wíÚ5++ëÎ;—/_¶X,*•*11ÑÝÝ}çÎÆ óðð0 ÉÉÉôH•*UîÝ»7|øð²9QwîÜÉÊÊjݺu£Fîܹ“““sñâEww÷É“'—eÏ.µZýÕW_y{{'%%i4šÄÄÄ5j´oß^,Sד·Þz‹×j{õêÕ«W¯±cÇ&&& ‚@³zéÒ% nÖh4?ÿüó±cÇÊóüü|ggç/¾øbäÈ‘;wîttt¼råJÍš5wíÚõ8WÙ¦M›æÏŸïáá!•J![äååݸqcÚ´iiii......éééE+åÔ«WjþëõúöíÛשSçêÕ«†ú®¶oß^&“]ºt©F•*U’J¥Mš4)›4 ñññ111kÖ¬Y´hQZZÚƒÚ´i³qãÆb]J¯¼òÊž={z÷îíîîž“““’’¡M›6÷îÝ«U«–ÙlöððP«Õ—/_Öh4IIIµjÕúâ‹/ʸ¯eß¾}CBB$Ibb"]A„#GŽ$%%ýòË/S§N­Y³¦«««B¡ðññIIIÉÉÉiÛ¶mÆ oß¾M½H*Uª4mÚ4tgÇr_¸païÞ½íÚµã—ûúõëíÛ·¯Zµêŋ۷o_·nÝk×®•Y4pBBB›6mêׯóæMooïW_}õÁƒ6γ%K–¼úê«E÷gBBö¤OÓ¦MïÝ»—‘‘ñÍ7߬X±ÂÃÃC¡P\¼x±K—.K—.?~|Ë–-ƒƒƒËÀŽÂsrrjß¾ýÖ­[ ÅŽ;ôz½»»ûìÙ³;uêôûï¿wìØñâÅ‹...íÛ·ÿõ×_7oÞüꫯîÙ³çí·ßvwwÏÎΆ+++ëîÝ»NNNnnnYYY©©©åoXãA.—ó‘ùùù‘‘‘Œ±ÀÀ@‹ÅòÅ_œ9s¦Q£F|)§õë×—j獵™L&‘HÊìs"‘è )·„ _äÃ`0H$ªÐ•››‹Y¥+ãÆ+³lªÅ‹çççøá‡:u=z4d…Bñ¸dØÍ›7ûí·¯¿þzjj*ŠÑ®ZµÊÅÅ…:ÈmÞ¼ÙÃÃ#00Цö¢X,^»v-c¬,—æ)!&&æÏ?ÿ [°`/úQ3«¢ððáÃY³f¥§§óíÝÜÝݩմD"Ñh4XVì²ÏË.zÜÜÜbbböìÙ3uêÔ‚‚‚7>M…G™LÆW÷¡å¾yóæ„ ¤Ri\Ð'ÀãÖô †Ÿ3ftíÚ•k‰DÒ¡C‡š5k^¿~ýý÷ß/³:{W¯^MJJZ³fB¡ œ5kVûöíßxã/¿ü’'ÚŒ±´´´™3gfddPEGؾ}{µjÕ7n\±´pwwŽŽpuuÍÌÌüî»ï¢££+±ýû÷Cñ*ÐëõäŠx-566vñâŧOŸ–J¥ƒ¦Ÿ*UªÝ·oß©%þ¬°iÓ¦åË—ýõ×o¾ùfTTTnn.]_·nŸ–›••õã?Òß‹-jÓ¦Mtttƒ Š}'5m$Áùß3ÞúQzNN OOÏ%K–ÐE‹Åòí·ßò·?~œºù&%%ýöÛo}ôÚypqq!¯•««+˜÷š5kÊ=û¯   <<\.—ñÅV«•à¥K—Ž9RìS{öì¹qã†ÍÅÓ§O=ztêÔ©3fÌ`//,Z´ÈÇÇ'::š:ò]½z5,,¬Y³fãÆ;v,ùKÊÀœ3aÂ///*?xòäÉððð?þxĈ‡ŠÅ?þøã¼yówìØ1jÔ¨¥K—}Û˜1c/^ìêêú¬Ü·LYÎüùóF£ŸŸß„ jÕªU«V­3f|ÿý÷~~~‹/>zôè¶mÛÊ~7 4¨]»vAAAƒnӦ͊+N:uñâÅÒë.\¬ èààðý÷ßϘ1£Aƒ ,øé§ŸüüüŒF#ùôüüücW®\9rdBB‚D"yë­·c;àçç7qâÄ:uê”}eâ×^{móæÍ#FŒ¸|ùrDDDƒ """6nÜ(•J‰a„„„´jÕ*<<n•¯¿þúèÑ£~~~ƒ~øðá矎·½ùæ›IøÁܾ}»N:Å~tâĉ5jÔðóó‹ŽŽžÿüómÛ¶ùùùåää,^¼˜16}út‡åË——m­Y³fááá‹-ÊÏÏ_¶lYŸ>}Þ|óÍqãÆuîÜ£þûï¿9B-}}}‡ ¶pá¡C‡ÒrŸ:u o‹ˆˆ E óòòªY³æ¬Y³Ö­[§P(H-_ßËË+,,lÙ²ejµšP¥Ó½zõêE‹µjÕªÿþ .6l˜¯¯/-wrr2:C]î/¿ürüøñ_ý5żd°bÅŠ .øùùuêÔÉÁÁ!88øÌ™3={ö NII9{ölàžž~âĉsçÎMœ8±^½z×®]8pàñãÇßÿý®]»ÉY³fµjÕªU«V!!!óæÍ5jÔüùóøáŠòh׮ݠAƒfÍšõÞ{ï%$$øøøü[_Ö³]»vׯ_zÁ`J¥V«U©Tj2™¨}½Ñh$ÝÙh4RQ Ò²A z;r¹œê×>Ÿéož©wµÑh‰D2™Ìd2Qá)B2))I*•Ö®]{À€ׯ_§ Ž§¼y¦ÈÇ?xðàÍ›7iÆø™‰D 1<ÂV«•¿ŽYågû™æož£Ño±Ë*“É5jD­j a›-A÷›ÍfþYƘÙl¦¯K$¾:–Ùl£Æª=ÍŒ=ýXPðæY›XÓä „ãââˆ5’9”1F±X,f³Y$ÑÌE¾ØY5›ÍT…úéqCÁ›g!,•Ji&Åb±Ùl–ËåV«µX„ 1›uåʹ\îííÝ·o߇ž>}ûË-‹é嬰§–›fÉÆDÿÿ¼‰wwwú‚7„ŒB¡Àlã@ш04^þ E˜f‰FJ¾› ÿ|§o ÅÓ«¼ØŸü Û488h¶·?ézÑú”öç’lDmÃ-Š m4±X\ŽFj cC’V®\yñâÅ#FÜ¿Ÿt‹²~6ø¿ÿ_„mfµgòqÈáÿwK*vÛ\´™„'ÏX@Qo\ÑQØÜ ‘H@kþ_ä1À²TÑe"„‹u=>nFFFÞ¸q#44ôÁƒ½zõ²Y)~¹yÊË_,3O)Jš€Ãã–¬(Âü,=n×Ùi-vÚlѧܟ%»"ö® láÂ…?ýô“V«:t(ü%¥ AAA%Õb¯BÁìÙ³Épü¿ µk×þüóÏɈÿ¿ K—.ݺu«V«1bD¹äÙ¡"ƒå0Ê×+Ë/vïÞý¥œIÊÿý‡ªU«–ñvªhàââò?>vx–#‹+~ü¢H$"ó¨ÙlÎÊÊ*GL¯Å+_LžøÆ¹¹¹0ûþ¯|‹åÅZÁ'€V«¥ Ðr? eh ôBP°g%wô‡Ñh|áV³hkó°¥RéééYñ[´ÑYbŒåååQéšò•jc&“©Ü1yV /«Ùl¾~ýzù¶*_ >èæ…[Á'Y8óóó_¦A=ªU«Æsww/‘PûŠÉP³²²^¸Õ”J¥6qÕÿXÛ½{wÿþýízŸì`;Ø¡dO1k‚ ”K¢Œì`;Øá%ggç:îÑëõV«U©T©TJ¶JA ¥e+BŒž¥G$‰Éd¶2™LºŽU ¬hö_bµZ)éD"‘ QƒÐ‹ÅÙi0±A¾h¤Ð0QU…2r(ù€¾hµZ±îô7-"ÝLI”-AHÒ·(ë‹ðÇ L°…èN¹\N×i#ab8æ°¦´tÍæÓjµZ,ø!軬05„&×)›„–’.Z,©TJÃ1›Í4K´“i}éìyúºÉd¢OnXn&- }Z*•Ò›i€„9þ& ‹¿7‹Åb¹\ޱÐBÐbÑéTšL&ZJú‰ÆBÕžD"”p¦—Ð@D"NáC¿b¿Ñ΋Åâšb¡Š •J­™Vv“Ñ€3½Vÿ©^‘ªíI$777“É”““c6›…š‚a¡Áy¨3aEŽÍ`0ÌŸš•YJ·ýnC† tppˆ‹‹›?~JJJÎ÷9’‰qê£ÍOã¥94›Í4:Ú´.´»hP´d4Qxýõ×_,Bm±XöÂG¬ñôy©t(.ž²´@wèƒÐÖ‰D:Ž®Ð td2™T*5 ôN±X,‹‘Y;Y-§-YYYùùùr*ELÜQ,ùë¿D„n¦ÏsB7ÐXàm£OH$’¼¼¼äää¼¼¼G×™U,y”H3@£”Géú—6.C": È:«-°X,ı±@£‘†zA³Mo#¦E ¢Ÿhª 7K!ðdŽ– < ªô!Zhž“ñŽbÊ}£+`–‚ ÐRâ)Ú'„6ð£gi2‰ÄƒÓ¿8͸ü×Á¨°Rf³™–Ô™xaB3I¡é¥íMÛ˜¨’ûˆÛHѨåryAAÄ)šRªhõi‰œñÜŽ0(FH¯%„1Rbc˜ Hx<°^´=hVÁc¼ì+È LôE“ɤT*ÁÒŠ.60í.f³Yì"6šE^"s%³DÙ"IŠDºWjN}Ä€ L&“,R¦=¢uÞíl0WÐm[±jV«Õ"X FƒF£‰‰‰©S§Ž««ë±cÇ222´Z­Ùb[żÇOÏãiÅM&It‚hØ/°‘íEg9´Hd½žvh$D´€ý ²†–G‘v9Ò¤AÊqƒÕjUlQè†ê$'%Œ1NGhX%Vc€Ññ G‹`¡æA˜€L€Šñä bµD"‰íf­V{çΞ¿2¡]#/ n8ÃD¿[¢°4XÌX ]·A¯‰ïòç™nΠÝüAb…D&“ º&hˆ0!ü‰Ùó¬‹]éЂ A˜Å³ôN> âͨ3Ä^€°ØHñ(>Šlf³Yý±ú¿æ ö_+oâ]ü tÓ†#Ao–ž’JÕRÓ {Y«Ùl6y™¤f©Ãgf‹†xVXQ&Þ\¿:1<y«_™‘ù¡äA¿Æ*mB6ôz=¨ìZ¼íŽŸa]³ÊëD× 6A %o?- k|qO⣼KZ,½ÐF,€Óžn3 ¼~Æ;1WÐç ñ1 ØoØf¼¦· ÊG²Â ’¼ÞÀ‹À´|ôdº9^_¤+0ÁAߢ³C?Y,¥RIª?-œZ­6¼å +û!(dvž‘fF£€¿ 3 ^ˆˆ b¢x?ö3¦²ï!£ó yˆV€¥OÀ%‚L*S(¾¾¾]ºt1IIIà4Û)áÅÂÍ]ÍÊJ77·:uê(ŠÔÔÔ´´4±XÜu;ÌwgÝí,§¬Åø=…ÍJ;;›7‹Óî$’D[Ä&]ç‡$¢:¹Žð_<ȇ6¶‚ Ø8@ /žðFZ­VÉ^‰òÒ2ÀbUZE‘t¥T‘¡ËÅ|”¬…ðFðÞh Bá+¢Îµ€FãÇ;„mìKôb@ïèÌ!À±Dœ ¼ê¿DwàyÆLÂÑ %y¿:ïd¦giÃ8 öÃë4p!€hBpA .,œ6±mø›>Џ5^Â%ŠISñˆ/¿È»!ù8‹Åâàà@l†v€óaðrC_? ;DGGÇû÷ïÃpG£c\½Þ½ßÀ6.n°U°^YÁêãp§cÅ‹üÒ€{ÁˆÇ‡Jò&Mriz½þÔ©SwïÞ½~ýºV«…Ÿ ;ûŸB[É Š  žû‚zÐÜÚXؤ·¤¢É""MR™”W”19<ž<¶pR?4zøy(++[µjåëë{æÌ™cÇŽI$’`ü%ûÒÎrÊGËá=Ïmø0K~-ùÀ'yð1Qðü7JM&£ÓÈ¿†;ÈÔØ…=mÜEd¸€,ÌŸ"„ÆJ$Úô’_%dF7b¹>Xâ¬Ô‘_„—dÁc8ü< ° ¨þÁˆBÙÐ 5¯C Nb o·ù¯ªP§±‰¦0S<Å[ºA¼(nw×ólžŒo¨„ Èõ$JCë¢`qLÏ¿y=†ÌPx #X)>Lºé†ޏs=ÔDŠw· +Àði‘€Ûø"¯–ñE›–g^ÃÖétdm¦© ÉO{à­ÙļÉÔŒ x~EØâH¶2z„fBöi¶ùˆ8zè ŸÙXù¨h>Ƈ~ROTë¾Ò±–œœ|ëÖ-Úi"‘HûµV9F äyÒ¡V«yÁ…P"äùåW&4ÈHâ ÏùÀ]™vÿG ³Æœœœ+W®´lÙ²k×®ÙÙÙ/zm…žå@ú€œ#/ÉJо‘mà ûXÀó ù‚÷vð¡Sdï‚tO%Ë®l¢Mè´)߯…pOô¢à7ºÙ §Ô&:þ²,á§Ù†ññôNFÃÛy~ÆS:žiÙT¯"ê@¬Ø¥ûá¿–hNh%žMß…Bió9¨†ô+?L˜ûp3¬ ôE´~Ƀ#…S T˜âS5 pXWÀN@»áGäõcú›X ^¯G0vaË«ÈdXãc.lÔJÈ(ôiðØ{yyE¥RQ #\ô„*iW´oÁDi~òóói¶‰Å*•JF‘ˆ·ªAÛÀÌóÛj.Ñ\:$aD … OåcOÀȆ{ø®NØdýƒ*OÒ!/Ì=2rÜ[ÍVc+£ä®Ä|ß,“É,n¡žÀäLr]"ˆÿaÖãƒ×!PÒùPô…“ ¶M‘èˆ*z(ø  &]|Ä×ÄFo£øŽøüùóyyy7¦ÉLfÉõX=;Ë)–C» ÞEÈ€ 9upp -Ácün¦ÃF¿ò¦ l}ºŸ6RsL€`'´câ­C°fð9pWà"Ä;6Y®à(¼ÑKˆ°B6+ÏlÀMmr!¿ƒC@žEàµmŠOzà“¢ˆò†ØCxó/?ÒO|Ž” ÿãóH`ˆC4< Ú|Ⲉõ‚[ðÚ!è#Ý ÝH¡PðQÄ0xû”i¸^±Â“f˜Èlêx«üŽp9ðòÜÌCŸåJ’uÅ›pùÝ Ñ|–.‰A$ã#¬œ˜T+¨¹¤mÐã ²?¡ãÉË=¼óèa­ÁV a–•¼@²N.¯ßc}yEY"‘8„;è¦ê„‡‚([d™™33W6ËË¥&©Id‚A’>Eá£.¡¯`Kóv`ÚEdæEàþ@|ŸnL3ɧ<+) 3 ²á2N—˜˜xûöm“Éôé§Ÿ.` ìáå^íÁ ²¯h#=+!Ž!Ö¯…ÿƒw)Ãà ƒ8Ÿ'–€½ÈG=ò'„7Ý€xÙp)ärÛ©!Ð1®Üc>ÑŒîÁžæÂg û;!ŽÛ×x¨0f`cÈVÂ(¯’„Ä ›TIž-ý7nµ0¿c$阭ˆL,Ì2tàAe€TXø]0ÿHl"üyþÍÛv ñ±Ëàš¼[‚ßt(;áÆ†7Ðñ¼œW³xÎ Sem"Ëa¦}Îç»äää`íøèp›UÃVăË& ‡¨*¦”4Kœ22™òAØ |` ¯¡òñÄ6Á„ˆ&àɽ8Sì4ÝÉüªÙÒØb±X¬­òr‘H$Rˆ ©ðŽ4>~Á&kG ñ„¿ƒæà+Còüwm\˜b±ØúÀ*Ši£´ÊH%Kbf³Y ‹¨1ƒÍ°ÖÊå`+É׺àÓ°Åb1É}ÏŹe\“cD¯‚´AêgÿÌ?ç¥lVØ8Ÿæù ü“|¼2þF4'oL€E›O9uS©T¼îžáäՆР)((àSÏè°À€&Âéóoè¡!‘P.—ƒ €p€ªòÉÿP;@³1Á»%Se“øÉ£éTO^±ãË¢ðHÖy-b5h¥Mz¼ƒ_ yúÚÃ)H¿Â«‚Å«8Ál1[d™RfµZ™À˜õJ6vÏ_mì6nm°y~°dé…ZS4‘tœ¯¤À·ýæc"ø @ú(ňC釱‹¯œDZ¸MX^BjKb“— •²GŽÂ"—‡ùÉ‹—Êÿ–“îb[°™ùÁÒ)ç‰[áMaPªø &hüPy?(o»æ-u0W Ç£SŸg‘­‘YkXu“t–±H,Û*tPßÊ}í,§Ü kH§€¡‰D P7îÈöB‚-Ÿ‚ÎÇV²Âb°ì+‚þ «7„/Ú|ôN„£f ¿5qƒÊEä’ÄO˜ø !˜÷HÃd‚þAô‹¨Yó;‹l Fã‚RÏ›¿ Éårrkóš„J¸Qc ŒŠ|ˆÏ¶‰æâkšñƒ”ðV/z£æ•-$âÀÃ%ða²©f㫃·”6´‚çÃêÀÿ(7“gT|ZH?M/‚ð©—¼ÁP$™˜oÁ2ÉR`-1‘:RÍn1ëe+?WšU2&“(ëõ°¿¡|ÂU°L6ex:K“^¯GJ5ïfãS—x‹oÚ¶ç…0Þ +ì„dÌ„€B+ •JeµZµZ-ö°«¹½‡á#*ù F¨¿ÇK| ©^¯—J¥„ \zØl0{ƒ!–ò¸ù|X>Ü™;x“&o gÿ,†Âës2…óD,—©>RaàuûÔ1‘å”§¢Ã›°°ü< CI:$|ú=¬7|q02× çƒN ïQ„½u¨p°yUAtH}°q«ðEð>Ñ’w-òÆÐ,Re¡Ë¸ê–¤Õñy¦<3Ãð’É×gäí pY#êW&pŠøø%˜DÀ ø¸ÞDn9Æ—ùâ£àøø%Lˆ:»‚ ·ñ^nѲ¹ÍŽâé36Þ£ùd,^i€g‚bF`8zdñoaz "‹ÈùmçG~‘9&s[³d—Dö·¬h‡ÍÎAý^ GÁ>ï3\´~MlŒØü|63Â…‘0ħˆA€l]á|ØŸµ€®,žIó5 ùñFÈ” 5Ž·¼¾d­R©D+ã*ÙÀŒ ]ØLÑó/2¿ÓøøR0JóelÂO0±EkYÙ#ÖÊ YØd­óá’6¾Þ­÷ÈÒ¢©gŒI2%Žs!gÁ$‚œa±Ûô@ÛˆÌP\@€p>!$ò®B°=è.|¢ˆmeÒHÀü œ«Ð]ø bù ÎóG·Ù €à‚¡’Ø'ü4*•J£Ñð1©6r.#A³äÉÁð¨"h™žXJž\ò™+¼h KOhøBdÅšOm8=&–BaEä}õ¼Š¦ËG6ò!¼[›'.–7,Š8…d„’ˆcê…jŸÎÔÝÄþfðVòëEeÐ,y2GH‚çñE^pÑ Cb™ðÁ$H;Ô™ûDÐ Ÿk|ÌMxD>œÏSÁˆ U£~9¢9è={¡ÌVúÃ7ɸ>Ø„ì ÇóõgÙ?kñ< f1¾&)ø=â $ñÅÜÈ.Ç‹&°³ñ,ŠßÒ/.ˆ_t‡Ï}£e3”AÍ XxqñQޤÌRð[1بŠT9.w”ï•çÌÑ Ò1É£[ž»ð9ùˆ±iˆiÁ ŸÊ SØx…÷ CÓG7¬|\,/®›AIlÄy#ôˆO´ñ ‰Lgtµ@¼øº¶8HDƒø·ñ%)ù\<‹ÅâèèØ¨Q#OOOÞ4ˆ \ò¼íŽ&4ŸŒÛïÂ!£‡B¡ $¾v_üŸ÷Ù•d ž ¿^¨jC÷ÂzÛPùH'TÜ¡I#?ù~¬b™XqRAƒBÕ"ëA« t-u|Q"Þ{U(Vã uó•àºàë{’ƒ‡·nÁÖJ&;’¥”J¥MÎŒŠ(¬‡PcšU•J…¥„‡ 1>|Ð&êh ú ýÍ{’d2™B¡“€ÒLÆCÜ­‚JØ|\ ‚ƒp0$’"è><e&` Æ~†Í “76ò`Ìeê›ÉW·c#´é)½^˜X»–Sž¾Z0^æõ¼Ñb¶©v£Vý‘Zš%5™L‘…1æÜÃY3[#tD‡E¼óD û‰¼r7ÈVŒ«DÂg£éó °b!2Mø s˜ž@¤WÆW!J‚f4 ×j…WAëyûgÌjnn.Ÿ-DãdÊåòúõëëõú‡ò¡S|Álˆ„6Þ)Æ0† BÒ=¦‚HÝFO|P ƒR©©TŠ–Û6Ùò|¬-ãÊäð}w¨+4¿¢VY‘HDUé(R?º1ñ•Сá,±0‹1ËH«ïîîN]0¬yV‘XÄo=±Fø1W>žŠ|¡ó…9¨BºÈ ýƒ¯˜ÀÎA{ Jü„0„¥$Ö³X>B””ü%PPXa‡*›,4ÞJÌ׌'îBÆ7t¬àãQßê;½„"¿ùÏ%Ø„3ðÞÆRbÓ¥‰q¥+ˆÓÀ2oâÁ—!§£A R`Ä*]'Qœ¯~dg9å©åa‡ZƒP 'ñ+ú|`—@6·5‹/ŠÅz1ïö4›Íâ“bKk‹"FÁŒ¶•PØ ’oÚ¦—ð%ŸÑBÁ ER„ÿ³v 7Þ¦v2OîïÄŸ  Ý›²¦q6l¢P¢ŒòГÀ5ùŒW›ìTDÐ >ʃ4çS>Žû Áú|PØjlöÒ£ÏY‘ø¿5"! ¾$ûg¡¨Yx™ìøj~E§À–ÀTè\𥵠`3o¼ŠicìB,¿ ùŒ¾8)ŠüóŠ©MÅ&>æ›/_FQ‘PÑè)èë6-EPO; ‰VüDÁ FL—ßZ¨ÄŠÌ'´åkL`ÒhGñ/±)$ȇ°â)˜Íù)Å*ð‰Ò /쟕³í†µò@!$‰¢:IEÃá­V«å ‹è”Èœc¶X,žžž;v¬V­š òrs³H%âM·0ûùùH|ä–óÆž˜Bká-'EÙøÊŒ¼OÒ.Ê×Ú!¯/eÑó WWW¾Ñêc#˜ƒO@Rƒ˜Ï;‡ÀkA2x…L§Ó¡ Aþà±y_&ŽsƒYq¨6QΈ@¡nwwwÊæ}¹X&>µ–§¡ð4ð¦žRóÄÅh4’õ“†9D:¨#"‘H/L‚ñ#Ù„322(JÔVdÕ[åIrdÔ‚-ñÕÇùÚn<Ç²É ³épÁ‘xƒŒH`ù4HN¼ÜÆk¨ ñ|¿^5çÕJ~nù ì[h30öþ{ooiYyßÏ´÷³‡3ÔU@Q€B ŒV¢ FD1Nm·H+obÖ˜˜Ž¢‰o›Ÿ±µ£1v’Žiûš8ÄmQ‰CÔÖv€ˆ™DôePFA (Šª¢ªNSgØÓ³÷3ô‡µÏÿ\çÞôWð;烿²8µ÷3Ü÷½ÖºÖµ®‹2Ž'oø¹ÆBe9{¢VÊ ÓFšêbxBê•@QZD8ú¯,iEÞ<¥]/ÿðèó°Å™¦©ªM?èîcï»×ë™'»‘d ­- a@pF)£(jµZ\pÁe—]vÎ9çH µV}ë7NêNÚç@wV1úÅèËË,UñB§;é?©† $ܪª&!*e£²dÕ+A›+´|xnÀzjƒ¦¤jý%Œï䢘•[¯êa¯ü]Ÿ9ãñnÕõ«7ºÿ¹#øê×`¨ŽÙ„+õ€Ðųòèa<Õ vìØqÖYgMMMÁ¶÷f¡”ÚǧEQ”§yÙ.‹vQ†>zS;^«úU¹» ¦Çl¨¢(ªvåç\Ï ª£Ô‹O˜èØ’PjL2 ‚¥2¬ lô oâ:¡µˆŽ¯j– yÏÖÊ k½èãBf‰0F°±Ý‡EG©Tˆ¨Í°bÌYE³Z&ÚÃQ!»É‰+6²f3ÊDE˜Ñ–(`šíP~ßnJÇHmå*¨R ŠˆPê©d5³†›ÀÚ‡åær,»;‘CF9xLyÀ¹]®ŒKÓ—=pàÀC=”$Ivzætù «v5Õö u†QÓÀ$—×c—c‚Nf»Ý61]xG*ÌãSÇ5PRàQmcq®ªjaaÁóTÖœŽ?¨3®m'»Z; ¬ÖN4K9a¸{Â^Áçù!’§ÛdYfáÍ¢ÂÔÔÔüü|¯×ƒØG˾Õ{Ñli ÒÇ·8§ÃóJF÷Ò:ívÙóóóN§ÛíZ ™¡f3öØ‘Ï)O+ËÇ—ùks·Õ¹À…_ ƒáõ¡u†ÆŠ“hfÿ%Ë^‘…_pïõ½øö¸ù§M­É@¼ëp®¢pZú¼Løa|)µfW‘ ˜Óà¤l]ÍO+ÅÎGU7°×çÄ Ý­j2Y¦j¦‚ÊeX3å…©QheSŸñ4ˆpzãÄ$Ö W«fN@vèÛ+¦Ða M¡fÚf4™XÉldŸSy=®¼Ó&-OE7{9ŒªéPõ‡µëôŸzåÆŸŠ_¤_Ióãù±cÇæææÆ'ÝkŠäs‰ëº0U°Ë²lüûX‚!H,Þ¬‰[µ›…àÄð—jÝ)ª¾ÚýÒ¥Pƒ¯ì¥Y~Zaý†züƒµ^‹bql0ð:T°ô´ÂSDu LKâ,Ì;è`Â@µ¿G‚Þ‰˜ )-ÉI)'•{G°Õûé§žzæ™gfYfhìÖû581kÐ(¢Þc±”BeëH¢M Ó¾ÅJ+HŒž_G¸:­]1r-×øOd)©ª*»,+_T†§†á߇ªÌ]{w-jEÃßVU¸ ù›Í°bò¦è¢'îâ1Å‘` Ê»0åy»õ²FÜOX±,Vš"«W p4– /« ¯F)'ôQXu:QëÄ€‘ €¹7•“÷&tJWeútn‰²‰T6U­pºýN£ÑвCIª:ÇæÖû´ªÐŸ©Ê¡:Ý¥À£''±r6¦ÊÕd™EÑSÁŠ¢hüEcð_ÁmAü¾¸ªªøÔ¸÷Þ^ô£(º;Ò¾=@*evN‘ é%y3‰ô(w(ÆÙ“yž›Œ ÅФµ—‘ÆÅûÏçý×÷“ï%ñÁØ97xÁ x]1õ†©h¸¦ªÀf6êªn9Ï|ZiÍI:^ªD8b@Øì™àÀ¨n^–÷YŸÐòˆ]n&Ô¤Àvé‰'F£Ñòò2¿©‚ÙöcÙ½:'­M_­Vœ©ÞP¢®t ”†kð/‚$]yj•T–åèìQ5U¥oO+W¹š+˲ö¹šÛê:íLyãø÷WÊÆ;k"¤Q¨i H¦Öv fr˜ÚÄ>®3Ú „{Æ2à3É™àLªt:‡/É8«òÈuvJY8Ci¶«ô Șj‡Coa.¸  Âêd’§BM^|õL1Ð.QF(=|'2Áà„˜8ð}Ã`Úo6›†îª¯39q(&¾*`ûØøy,h¬)‰Èþ`Ý 9ÐËÑ:–ªýÐ~°­µmÛ¶éé鬬¬¸Õ©{wÐ…ÂôK©*¼~¸’>•¢ª²ÿ—©Ø°7ëþˆ3ÌœÅVKéˆ>Õ:û¶xJíÂBŒ‘â Ý _Ìó=yu[€a¤À”¸ æ®U3[á?ÈÀ]X!M…+•ÌÕÀ]Ö9yÕš”å¶nänu´þ’úèx<@jA7á_¹FV\mQ¨ð6€'à§øn½=fKÊvUç7ó})¢¢œ-ƒ… ªGüãŸøÄ'~ç;ßyðÁÃ0 WÂrK©Y­§’ÇÔ‹6&i·¨¬‹—{áÍc/Ëþ¡ºµ2 `S»÷jS­jßžŠÙ†N±ÀôV’½¾bË´tŒÝ¡…‡¾}5$éV«`àA‹“´IbPË]K@1jÓA·‹Q[Ȩ÷i#lI'X¹ën·kÓZÔ7ÚéäÃIVêö&Iz£cæz¦“ À°ì`R®¬¬,..ªÍ-„z‹ON|h”d¥²Q*f, : > 8¬±MT"EÕýTîB¤[uœÓS©(Šþïõë^4£åÐü@³seÇÚ¿ŠŠ( U±f=AÔ=|߉hŠ“¹K=MT_Ç£äª.µŽ€zÅ=©:¢m'p¾ð%.•J#§“Idý{Ïj‹ÿÛh4ìp°^Ž×ES/­)ôVçâGý$åc ¥KVgôÔ(Ér%;4Ue@<ÔÎÖ­àr"(`h Ú\šÑ#g‰r”¶ô©É²,3|ÃÚŠ€D’Õ•r+®hŽó,Ë8CËVi4'P>­Z¼Î–N BA¦P§þ[˜Ð&]Ýô—5œhäÖ›[cgb½ ÷H¦×N|6y¤JFò|IlÙ¨¶áU¤Â’Õ"Ú…f8CïEµÚt<ÓãŒÝÂÅwÆÕªpGÕVË”™p´u4Ú:ªî¨ ¸ÓF±‡µ¢Ä¥8¤½´¼&»Ð< #¤0)29°b%>·ÀÉkKNW,¹6­AejÙjK]I   šÙ(/Ñ‚„NÃXD7Á7ƒ©¹#ª¦ÓìïQʰkصk×¥—^zÚi§AKkµZd-‹‹‹‡6p˜-ïÖ+9éƒRé e@èhöpõÇÉT©¾]{:³Ü¢½*œ£´O@àÍ*ç§‚A@Bmç/h;Œ#:ìµí¢¼ð¤Èùp0qÀwÃa5íu¢n« »¦*œ¶ÃÈžŒÍTnKÛZõzݦjoª-ÿË[þã+„éý÷Þôs§]èh(vT9¦f¬ J:‰¹("øíP;àªÒR3 ÚÜaPq¼4M9<…7(d”­ÚP_N{§–§óâ´üõb¿§Ž ÉÛШêûâµÜTðò^ôý(8%è~¨›|&©ª ú/ìW'WÉåIÈÝk'L!P¸&í,S&£ê¢y¸ûØb³ Û‰cI†z5YçÏ‹Oº˜ÕÃB @ÄŽ4c,SQîLUUöxÙ€Zb:Ñr¶· öÀ¦£GHqÿý÷_}õÕóóóÐL·àœëÄKž3ÊX‡± éCã„L¡‰H#²~ú_-³t«N"ÊoÔ 冨[£¬·‹¨Ü 9rÔ?C‘e{͆hªbxµ3°µm*N"rC5A`ÐL»†ç¢)9Yfa‚ÀÔ:ŒR'ƒl$à0°©á¬‹EQ¹XÆ÷ÆÝ7u“Ï%á°,Ë᳆£½£Æ“ôqñÄ›Ñ]>qâ„79 z›gAMj¦¾Îìms#ØÝÃØˆ¼ö^ðKVl\˜M}E1,QÓ-ÈxNÜN¸«y£²¨xi_„ラ#Ž~H+ŒX*¦Ä˵Vÿj=ür˜½> žT®JÿgÞZ¼QÓ3ÆBÕ\C_œÎó“z“TÙ“×V<¶œ¤aæççù/çeYƒä3‰R'h\×ëu‹=Þ˜ÊgLâ¢À×ALOOOMM-..®¬¬¨8·ÍK°´KÑ€»¨*YÚÇ1ÍÓ&Õ#gZ^^^^^Öñ2/ÝÑBP),¶$ÇócµTÉó:ÅÅ–W×(ž• nQª ª¾no féf•³ññæ=ÄØ¾&³Ú`€49)ËAÃF™f:‡Hk†>©.zš4 ¢‘åyž×þªDæB§‰¹ç¥­f—DGŽ3-ð”³ÈíÙÎR6Ù=VAÕûT/øqÝÅa\Tõ?Óo|¤‘|7ñ$Ò) Y{ö‚8©«ÒÊÈO’dïÞ½{÷î½öÚko½õVô<¾¾’k¾Sª=+·ޠ©'|?ed蛎ÍA+å Ø¼ù)èG­â:†B?œt•ÄSß:Œ,,뵉ǻ‡Žb¿`›¾Ç¥n'=ƒTéuaXXNt×¹¼§´ói]ŸÑhä»äpR¿©^Õª¼È£•(êEà~óXUx¤ßïxLžNÇ<ãBÚ!WoB“WsŒ‡Æ'@ÛÕ“ZÍ P¶_ƒ¨¦ìA%¡áÎ }€ãÞvyÜG<Ì`-ªô,SŒÎˆÔŒb¸õŽ–Ê¿ð 5ä¼›œ|ò>Ó.GaÁR»Ç”P«,TóX¬cÁÕÚ!dHËW/·þSËu]>—APkÕ’Húo采õ‡êô#µ¹b»ÉœA¨ìIÚ˜'óF2˲u*¥…›õŒ>mõÈl#Vš½ée(UÕÂØ¤`‡ xÞ( ¯¦‘wÒ4µ‚Ì0À -GªR7qæ“ÔWžSÂŽ¶ƒÆ¤MÁ›ŸŠ¹øHjƒ‹êÿÐPrjåÄ®ɋ½o%hy–¶I±gªŸ,ËÒ4e¶œ“T‡tyñEvhVU\åÂ"ts‘³ù>±°md9;¡8õ¬»ËºG"ÇnmsÊXnh¨ˆ]¼™ì.´©«?N,Y³,³‘ðÏ ®ù]Ú6ÖrÓÓÆ×À`§ŒÍcÚ“±V$ÎM=2´Õ ´jÑÈ2<VÆ<êÙj·ÌíkôÒþ™“a{½Kþ 9퓤{e–gÖ@»›btÞ(8„‡C°²rP‡‚èÞ(??î p_n6›0î ;·Tw¥zA4Ïó}ûöíß¿ßý£CŒQ{P:‹ý~ŸŠâ€úÙ$]­ã\oÌÐ u’ E‰>)5„Z»Z:Å(Ý)è…L†B,"›ôܾII ÊþgÜK†6UjÃfÈÙH®½þLÛâ¾tèÎuEQÿD7D,Mª  0¶ç?ÁZ¦Q³–—Êê`„ÂA ìØ¹¯³¥È±P‰+Õ*- — ˆ.‚÷Ð4/Ò¦7·o‰§:I}9¿ìË4xÁZeª6Í4kí¢0õÎÑ!MÅèÆöh¿ž¹“]UUµ¯ÕÊ;×ÄrÀÖ˜…ùQbmmZÔ^.¥¡Å0«qbÃÅ|Ÿ'J)ã~˜nyêú¼bEÕ / éSb®Ë‰ð>Eè¨ïô!ú¯ë7>Ú°=233ÇññãÇóž¼Ê2Ôeá' e¯VÖÃÈó5°¥¢Ôg¾·Ùl^xá…W\qÅîÝ» ²cIÀÅgÙ@á|C‚¢—ÊÖºø‹F‘•¡aÞ=¼sÝU·Tîn骥þ«ûyžw:°JÞI%)=$¥çèæU‡!O§ò!EÆÔÔ”>jÀ·^T£ŽòH À4WV¬¶™ÙËžj­ž!$»ä žþ‘ûg’6«œ (t<Òɬ‘åoÎë¿SOV’ ‚<(þ¥§ÃÁ'ÉË}y:³ÂT¶ÓÚW“4DˆÙý\Œ§-¯Ý”t4Ì–>x7à¯wÊÐüÐb›ªÛí:ñëõ4•” CZS´ë«‰¶ê‚ XÇa„À»vÑIá5HP•ºõ^¿N”’í˜+Ï/Ëç–75Â…0>9.Š"¾7N]Úýt·õZv0цÅzÒæl<6*NÕ êÂw"dÚ!«)°C:µJéY‘hÄñÇ÷ÒÞGàÕóã"[ª×ë6`¯¹¶ÂkJó:êpgè,†a,åt¹¨(Š£GšG@žçn‹ C‹Ž¶í.ðoVå:ÜAãÒ¢£šÇ¨Gʧ*Ýÿ/ýðº0º5ŠNŒ»•á-áè%£ìeYü¹ØàÙñRÙQä/ÊG¯9çâ{ââÝEµP¹‘ÓuHùeñ̰e ½ö9j9hÙ€ P©O ÌfÈ~Jb´Oö$¬Ð÷ã!³)Úo i½…:TìÀ³ÅHg3äl§:jÖ«Cª{¯"ŒÚGE2ij Dþ‚öLJÇY DiÍDe…´Šªþåýô-iþoò°§^9e’½& n ú¿ÚoüAC›pö¨•ç8ê膞)P´I<{fµðÒ^½7Ê£ïÂnÞ;Ñ æ1#Y£øDƒ¶4cP%$2OFoŒ¶}"ÉÞž%·$Á5AY–ÁÁðŠ¡Û碑ÊJÎÎÎnݺµ,Ë……[<öBíQ‘xÒišv»Ý1zù–¼l”ιڧknÿ:1½á…CwÐE÷EAìܹsÏž=÷ßÿ=÷ÜSûv­¼´ŒÏ‰‹›Ç ŒÁ»ÓOEáBE‘»Ãµ^Ñê~´›_“Ǭ˜kŸ=s !Ê{öx•æmCØkvì_Ö­G¢±ÚNã™§ZëÍé ¸zYy©Œm"DäÔpKiA›!gãIÒ^ÁCÆÓi§v饗>ïyÏ{ðÁ—–––––úQ?ŒBC8Ûíöi§–$É‘#G;aíNMMíܹs÷îÝý~ÿàÁƒæÝAËV¿Â \ƒj(䢻“uƒ÷ZV¨_„tª€tÞ3P\Ewv‘"*3êÖ Þè5hcŸ pª÷$ŒZ ê#*‹Ò9Wþ\ŠkŸ©Õµ0 »Ýnò7IøÌ°xqA±b66AH›ùh)j3†¡…ƒ&  •’%h³SÛÿUèLg'íÓ4­×ë+++ª&iÇ¥Âý-áøZEµ¦ª7Ù]sÆ™h‚ò ÆnŸjdgßö½ïœsG\ü¿âÚµúJ½ŠªF£Ñh4¦¦¦¶nÝj+|nnŽ&J­V«Ûív:àJ‰g?¼|8|É0ýdZô‹ †¿7 ª ýŸÛcöõÈÄÌÌÌé§Ÿ~äÈ¢õp8LÂ$‚ìõYãà øÐ–HAP_}ø¦að†urgT 8±*IqÀÈ ‡†ÒÉlŽeC}I‡Ï3ášÙøŒi°·ëWYwêiôu €w7IQy´×…“Š®,t~7ç²é¬Óéœ8qbqq±ÓéŒõÃOrnn-m´s*˲ãÇOOO«ê³Ncõûý‡zh0;vÌ>‡L„´ß\;³Ð,aðM IMr‰2Ž˜‡@ñWk ãæ,6™‘Í÷qsû6N¨"r Ê¢6HÃ@C6®%?ñIÇJ`XËm°C\ìså©e~VžüARÅÔÔ”e EY³ÁèßâïÅñWc&Ì-ð`—‡£Lcp”«Y¸"-*±¬£ˆÊœæ§ij¥0bšv¤ÙåñÊàÛwyòŽdÐvÒÀó(ȤÉLs›A”E™~;Í¿“GŸŠ¼p#WïÕëõzkK«^¯·Ûm>mfffvvÖkl(ÇÔ"jµÚìììâââââ"u˜RõÊ—Åö¢ye38„EX–eò½$õСC?üáW\‰n†ÏÖ?<–Bˆ¿_0,÷–µŽ³Ñ;G.wÑ7ÖéÒ¯§Ã—Ë÷–ý~ÿ®»îbŽ.%_Jð¥…6™€²¯m1ÀïgÎ'«§1£DrGÕ¹Ð,J¹g Ú.S¹BuéVD{?:?†aþ¼<» ‹‡qåªÂi|äFwãÝ7CÎÆÄ¤º±½Š²¨ö±ZùÔ2{M–•eÝ…ÿ†ÿ˜ÐºW8Ëà#£ÛëѯTcb`:R?d0Ø~°“: ƒ2 gM-’ñíб[ãÀR<×F 0Gð:ضÖõoPjB¡¤Ùl–«?^›Ý#ãôÞL¢¬ü_+)Ô~ Æ—e©4c¼ŠÕ%˜jè-ËÒÝíÂòVvßݽõ¤[Ã0tßtñwââᢼ¬L¾œÁ:£k 5Uîá\V—3î´þ0$j\ª V ´n½Ê½gÀ…æ7T7Ï\þ—#L-| Ëƒòë§3IÔ:óÔÛ †^«ÕÚºu+0)nc¨íYöP«ÕŽ]|ìà/<åk§TËUQ —/,lY8ûg[ydüOo$3MÓ‹.ºèÅ/~ñwÜqäÈ‘áp˜™¦Añuq¸ŽÎõ¾ØãJ£‡£ðG!±!üfØK¿xO¡ Aäÿ.oüé˜òcχfžžÔºSÔieLªAñª€<,G M-%é jÇÈŽ Õ1²;Rêà„Z±ydE†Š ‹ðçÂð†°uCk4EqþsÏߺkë{Ý{ßìÞ¼r6&êðž æõAÎÒ…Ô}×Õ¦jeQ–ݲêVjMö¥}xOçŸäW«]Iô?íDSœ`YÛr4~3C!x¨LÜ_/«2ÄdÒVýOŠV¯‡T×öËä‰@º9GÈÔÔ ÔŠ8©<4i´5Š($×?þ'K.º9Ц"÷w.8DQT,åÖ2zZTõªðèØŠFé|ž&7Ì4UáÜáu«'¨ê¶ÅëAmuRD%Aa+0/ŒL§=R剨„“)·ê¢¢&³¹H•q¢ªIo\)´ß!Y´Ûí;w6Á``/}jjʰ¦Z­f6<ív{Û¶mÇŸt|´gôä÷<9?–»Ò ‡ÃúÍõì¤lßîÛóî=išîܹóСCö« *{eÑ.FýÑþýûoºé¦Ûo¿}nn®‹¢^+ëÆ’›w£‹ÿaœoåGó¨ÅI¬Í•ÙWÌ.þÓbø°þ™zÇŹEï-½ø½q¸?ÔU ’Æø®%ðÈ ·xfOã (§<é&z„žžÍfÓ^·Å!ìíÕ¹ÊêžÁukWžYº£.þVÙU»/ÕƒO{${¬R5IMr!Ûpú(ÁI1€à™«:“ù;Õ•–n‹xiÖÏEªT‰ó³!Ul\Ÿ}4‰?Þ0(â¢V¯EïŠÂa˜ŒKÐËâëÕæU_6h‡Ø›µäT±>†øÒ4…ÈD=A‹NÊG~Þ˜*äk¥ACÅútœ(F!_7RåSç­VkffÆœ¢.±kNÓÔ<§Ÿ~úI'ÇñγwÜ{ðâ?»ø`~På †G‡SߟZxÎBò׉M\¥iº´´EQø£pô3£þ;ú ïY˜ŸŸ/ËrøêayzYûRÍò3Èšæk1¡èñ8Ź&j~£9B#ñ"2)Å5 E Ø’:ˆ¦Râì,šR¡^{#$yÞx¦•R#¾"j KˉÌ uf"Xùa0–6˜=óÌ3<¸9 ºñUŽ2èñÑycÍ|=ÕKϯ‰óÔ³?™dU’óOœˆâ¨< LТŠS˜Ö±zb¢Ípô<p@K-ªÔÿ‚.š2MHÃ)—y•ÐI¬ ƒçdN^µ/õÈÖ0Ìb0[BÞîGt×O>ùäÇ=îqÅ“Š×žùÚ fŽ5Ž]ó{× ƒ=´gËhËoÞUAP@LMM ƒ,ËŠ;‹ú°>¢òèU Ô} IDAT¸]œV%ÛgAíâââþýûWVV6ýr6òGMÀTñÉðP}aP†3BEYxñN|¦uó3ú§d*ÕŒ¢:æÀUí /æ¡Ö¬EÃxyIî9<ò›ìsæË´­Â,g7+Þ›4$&ÚiŽiíÐz½Þl6 ’6B§zج€(ôØ)7U"E{­xÚ£1`äqÃàû:Q+èv»´Üð6Up·ÞjšƒU+ƒ (N.ÊÝeÿÏúÎ9¸éßÎÊâù^Ÿ=·F£§öOŒ†ßk”wãnh÷ˆ$Ún“e‰¢9¬  T3‰€dÏ Bë ­†ôz=»*Óà± JûØv»íœ³Ù ±6çEÑ)§œ²ëçvýý‹þþœ©s>}üá;n=8ëfOò¤/=éïøFq Øñ?vÔ«úô–éÁì YIàãµZ­Á``¡äþ$½? nÂ(Œ¢È­¸`”nv å9‚£ùy’j³Q ÚäÁ²xlqjËÄÛfŒ /z©¤>äÉÈî°µ„/°‡·Ûþê÷ûF¦PûyU_TÌÓÃ0îÂkÃì7³ø#ñh4š››³{ü‘ûÑõîú¿t¹r6 äxFO:¬§oÔv¼ã .–z‘ݰv•ÁåÖÛ1Q¶“ƒ«Ë2QAÇ”¯©¥AÎÓFSéýKj °&(Š$xûD½ÝôX‡õ‹c›JöºõFŠ“î/l~ªd!‡C8éYÂ<£W 2.C“äб`oCMÑ– '& µö]y‰ Êã"&©ó± 7…a¸òÞ•üÌ| ëQ¯ýcmÒÑD‹DShZ¢ÜTm D`Y*iší^ÔS±sf<¨´Ê‹ãèQUJ¥?©3.uJ–qUv×ÚÔa““B¥‘=ã)àG»šöŒ—å/µÖÞKš¦{÷îݹsçõ×_?77G⩺«vmýŸë×ÊZã®Ff<>ÿ9¾~èžâÊÛ× *M*oò Ð$Ö¡KÛ¦ñFs›Ö±g”ÇtªrÓHÆ,RË,hërlÞ}C/mÞkëÖ­»víb™5›Ív»½eË–Ý»wŸ}öÙ_zÜ—ÎMÎΧo‰nÉ‚ìgªŸÉ†Ù©Õ©ï+ß÷û¯_ùõl9ëlï<í¶§íÚ·+^Ž{išÚؼaƒý~ß $,Ú<ÜZ¦=mBâÉà„(-í({2€À¶UÙ2ö:x\„ «‰u ½o`8´ZÄZXUX F¯PƒŽäÖ;ê”4¿¦©¡*+ÒÔi6›Î¹äûItS4¼`XºÒ9÷kÿÚ§\°ÙËÙHÆÆ\v,ª­ºµsx‹ƒÁ€Y„¼ÔRÅ(u²L9N–ÍBU­ê¼¢“¿*oÿ¿íð°,ÊÁïVÞºÒú–;0¦±ióF]¤X‹ü!˲ðì0ªGa†‡nÙ9ч§ÿÝsBê»™b²¡ªrΓ˜$É©W~kÑ‚¶ml˜;|PmÛX¯… Vœ³×ë)èÇÎFÀñÚÐÒ‹¡1æÄñseeÅh©ªºˆD#èø”¸Ê+·0þðV«•eY–eɉ¤hÉI‰‹œÇz°ÔÕ™0¡Ö²EQX3ŒhMÕe¿²¥µ¡emHBØ™h×0 ð×P~<%µwFúPÍfÓþa»ÝÞºuëÌÌL«Õ2‰+SvîÜ9;;»ÖE[…|ì´ÝUìÚVnû“ôOÒnúáâûfw=qÛË–+++?üð‰'Ž=j²l6Wdd‡n·k¯€ÕÎsƒJc±G±qU@'*ƒÛcüQˆØ£ÉÇ…V-'žOJjЙYí)ZcL;ÎÊS{ø,fEű²¶ßQCaÍáÀ ¾SÁ‘øúqö,o2Ö64Þ¨¹gZÅIÄßÀmC!Q™¾ j‘#C˜V g…ïi”O(‹'íg·Çažþ×4òî׺S/𲥉í4­H &J’¤8¯~6ÈŸ“çõ¼ªªÆê*øúK)UĪ6FV¨×nÕ?Ša°)B ¶R-Š3‘®T+ÕŵPiݪ3&0wu( ³óÀwLÎâvÀå•xfž’wÝuWš¦ LÏ‘ˆ›v×išîرC¦‘é<óÌ3Ï;ï¼æSšþP'èœ\œTÉCÁC§W§‡axwt÷ÌÂÌ=ÿzÏ÷Þqדï:úÝ£÷üøž,Ë:N§Ó1Uo+¡æææÌïS(眅¢cÇŽ©.© e*DäÔ\³³pÈôHÄzbW| ËCGhùpÚ`p8ù‡TE§ý~_[Œª,¥ž2j¨áa†J„SµTX‡Ð9šS1}=nÈo”Jg¿vìØ±üàÇŽÓSÆŠåÙkkiS+‘D"6+«E»Ðv׺à>x~€Ôs9:t×]w½ôÖ—¾5xë[ëoý5÷kß­}÷EÍ=¿þü}÷m½cëg_þÙýOÝÆ·ÏÀïY)XN„Ïu²Í|ÞæççIBÙP¤öjY¨€U‡ëXÈ´%l;33÷G}L´€fP”Ûí¨†!ƒ”‡©z¨©8´ÚÉë’±Ù;åµÚÇ¥`:gIîÄêf•³1s9乬3uŸ„YG5T„˜_ ª‹‚€ŽMX¡mKPQ)[úý¾'ãƒÞXÊk@—ž!Ø”¿Y6®hÄq<==½}ûöãÇ/--‡‚úë½+{õ÷×a¼€D«M'":©îQ½€H ¿,N+zÆò5/ó’AäC¸Y¥°ÓGµ×Aä¶4R Õjõ¦£KtªtL‡àÄwNíˆÖÐÿ?tý?¦oKó*/«2{_V»©ÖúãV–˜k1ÇG‹ÛIthÆkkÛ¹fË`º¹TH–ý¨})Tº­çÑï÷ëõ:C] !nYÉbG0\ VܘʘâªòÔjµ7¸7tÏë¾üä—gU¶Ò[ w§w»KܹpîÔÊTÞ]ã‹ãÝ’eY£Ñ`uT¨} égI¨§'Âb*à ƒ\×*D ;ûÞN§cƒA¬[ÔxQ(W²­–ê©\›òœè×é,¥ÓèÎòFH÷O*.L[ =Ñà¦9ªtðͳ‘Q3ù»-{¯ð^8‘á(ÿ‡ScRFŒA&C uN¬ÃÃòiåðÆáƒ>xÕUW™…báŠâ)Eôÿ}‹Éý±õÔ³u|¾×‚ZPKÓô‚ .xÆ3žñ­o}ë{ßûž™Ç¸d=Ó_ùo´^•‰k½}NLcUXænËÝb§=¤µU‡dSÇH5Üj–M£ Z‘ª¶¨@/Ì=U¶VádjÚ{³×dÓ#);é±;çâ*®½¥팺Ô-˲(‹ÆKIžT®çD¢Ôºâf´£~_:÷®¢y:ÓN~JäQµ8Èw"@0e53®ív»:KÈ(Ÿc§6ÊIvæŒpì„-I’'N<ðÀišž78ïkç-Ïóë®»î‡?üá±cDz,[\\ì—}tl”Åql ‡£NA™(…/»†TÀÖ’ªái‹!'Š<:À €”ªÚÜé\'uƦUÚurÂ_EÖ¡¶êÔ”Çb÷¦å öh¢æÄcT=‚èÁ«™ré›!g#éѤ6^W_ µ&ÉNŠ•i€ÊÏ81Yá”´ÝNZ䜋¯Šó×äéÍi¿ß‡™]†eñò"ùå$¨&©KŠc]ÕDø›~¿ôèQó’2µ%':o½˜B‡lª¾÷ÚÀ‹EóGü`Ge¯y@™6cõ?Aý䟫ˆ0Kýh³9™T±¦±2µ”°NI¡oS;+ö.¸)¢ÖëZv`¥ijõ ½(ýLLnì|$œ«´—ú ‘ÁØŠÒ,›§êe-HÞ1„¯Ü-û¢ååe¸¸íqðSÑÎQ5ÕvDOš¦=([NE·HÁëØ?”*BNÚ5â}ñhߨwm¯ñºFy_YÅè-£ü9yíwjÚàçÕð(·âÒ¯§ƒËåU¥)Àw:¢(Ü—=;Kß›rê© ðdXE¨”ƒÞÖ½ ‡ØÆfä%MÓÝ»w›Ç0g ;ßšw:N#gæDˆ#Xm’ÉßIHuºHÿ¬j˜n½L–Jh'IË&u1ðä°‡ñ¸@ž³8p‡ÚMrkÚ+VšŸ.!oåQDF›Óš8£ÄœòÖAÑ©åµól•”Äaã8Y–¾¢2èÂ0|衇ò<øá‡ çDžYÅÐ2° Õ½Õì.8u›ÎxyÒÝ:8É\5ÊDò¿G¬&)g©°ùX¥É©/‰¶ Ð&°åjïû]E§•„íĉ‘Ö zö ìYUg'…"Ø(¨ ~®ÌÍ^ÎOE­£˜‰þ û¢ˆ¯Öp0ÜI"¬I\pÜ«#– Ç&IÒ]ìï ’&ƒ¿T¯œs­÷µÜ]ÞɃ( ·¬´lþ‘lÔU÷TåEeq^Ñ o*~Ñã#w–«zUx(,ãÒ†Ã!Fpœ¹”;tqTc[m‰µWšNÞØ| x $‚1ΰ5mÞ3ªfªÊUµ¿ª…?«û*õpb=BkwRhÒ‚„¿­1íФØS£äÒoÑn°²òhõaX€<“1rÄ$#SQèNd|G'Õ ÚÒ§ê–(q©€…ÖèJÔã¾ÑhØâgRÕÚ9j™Ì…ÙÚ°“eY¿ßït:…!…gaÕe·9;;›$ÉÒÒ’é ŒDÓȾ:MÓf³iÍ#(*G*¦Eö6Õ}ƒEKHqÚ$*ºÎ/¯ÌÛ&Œš©ƒ‘…yFßx¡r«Ú²ÖæQ1u8>ö4Ì mnD}¿¸f²+SÆÛ$IÿT4r<åWÞœÍB3ônλóóóÄ £u‘À‚PñhOóÚÓvb‰6nŒÊæo4ÕlmŒ ©¦ÑúÔC?øNÍDÙ²ò¦²Ê*ç\ñÄ¢rUò–¤ˆ Ä€¡ôðÜz1…ŒMHض(ì>Ê”<Ï8:AB ¨H^i¥Œsnxò°zMUœ^´½]¨ò<^9,®,Ê¿/ãÑÄRÓLVÑ$·F²éV=Çè!ó àlМH÷kæú1­¶°Ï± oïÅ–A¯×SˆC;F³V{ï˜À‚­y˜­Š)I˜ O±&–„Î2M¥Ò*“ÌPʶ0wíN{½ž){zÔAj—n·[¯×m*–Ö‹ei£Ñ¨ÑhÀß³<¬Ùl&IÒëõ–––ж0‡œÐ<Ö¯£n½c´‡ªØ„ÆW­Ùª¬gJe¸$°XáNd‡X-“' Wî]Œ}ŽåTlªæ®ÓÓ¶HZ­©*«Ñö*ºÝz7úͳñ?Š™h®Ä°…Ž +ðz¦\RÊa¸°p¥€›ô»ÔEçF•7E‡YRþRU¶Öjö¯¯7òWæA;ˆã8üë°Ú_UÁ˜#DIifDD¾Â.˜ñ4uìbÌ“V¶Iw»]ÏÖZ•¡kµZö¤Ì…®ñúFéÆ8Iýƒõâ´¢xoQÿnºÒÌ<ÅR'B8Nìâyò:;e…®s6:”‡M=–1šÑâ®×ëguV–e<ð-b6¼rÊQ"WŠrÊx5qt"ꥲšs°ê¸#z0& 5€@« Juh ‡©¢‘ÖäOÓÔ&r(†IP›„…œn·Ûëõì$µ{7AµÎe8¹¼¼¼²²KKv{ÖkY^^žì†ª*¶–&Þˆ+é‹Î*hWl’FìYµòjÀZ“W‰ÛɧÇÌ;er+yÆ(ºàù}[ L/yÏ7Úæy²UÈqs.gã5ÛÕN<©¼yìn·{øðaU²¬P•!p‹Î^ÂËÒÔ0c¦UêHHb1gSl {µÏÔâÄá‡Ââþ5½aL”Y‚ß¼«UÏ»L‡{LÇ^UÅôx…HDZÛêŠK‹èo£<ÏO:餽{÷îÞ½;Š¢èx] ~e âÜzÎê öœµ#eÛÛŠõªœFÖŽ<ï”±çl§¶Vxp… v†.-----©Û´;jåy]ÍèB!ÛlUš=I›óÐXåCê!¢™ºMB:„j4A:l+Ùî—Õe¥¿åÚœ¼†@öz=`"CÕXºÆ®ÆNƒu6–¯• '5‹ÜÆ_&c{ Z…°•4ähÉ+°ãÞ- èdLÌèóÑ SÒS•8s&Hµêv°'\«Õ¨VÁr‰²–¤bÉÈ~´“Šìy_uñÑ+±€íÍnV9ù£ÒœŠøk*ä;Å ¥#×0/¡Q)ç̓ïÔ€Ë;”iÛŽ²¥ î¡3óˆÖ òƾB—Œ§£H"´:ŒË6Ð)@$#½xÐ3B-Š¢ÓéxâОôï°V'Wáápjvê’K.¹ôÒKo»í¶|ä#>ø`9_ºs–00Ù`"àÓL—˜ÁÔM.±Š²2Š2ö4ºÝ.ÿÉ«ôÕ{û™RÒ–Á‘#GáJÔ®³ë¬1‹XŒÄêä hªQÅÔ§Ë"õá,©ö—šÑtÁGÙ>„™e’Kl@8†¢ ¾1ž›Í¦¹š*C!¤xÀ.Ûòqû5@N@?›€>q℠Ā ÐäV§5íYVdbe(lk›ÚUÜÖd`Èù³ý'»eRèYhÑ ‰û†F<¡^ª%âŸöíÕ0®K®†¸¸Âwê´VIØ8Q§G½ z¥*l†œŸ‚Û‰*Ψk­<=|5ƒgɶdº[çì8îYv¬+óXé+jâdl ¸ŽË¹õJS^ØSBòìŠJ+ï…µkY?sꢪ·Þ9 ÅÖþ/ȸ¶ÍN/..®¬¬Œ«–0p›žž®×ëGޱ©*Ržƒ‘aöÉÆ`V£®‰~'nžŠ£Ú†‡»®¢Ô>ŠËëU¸ŒNµF\®Ü4žôTÏÍG5æš,޵ܤ¼ AöDBµî¤LTÈEå$¾õßÚþY–íÚµK_®…ƒ¿æççÝêˆ>‡»¶ «ªšžž®ªj~~~yy'6–Ú{Žªphk™ð£çNíDü ¥õ!T°A5amΟœ‰ •Kè#?CûJ•Ú¹U\¤¢UùAÀmv¨V™=ă"”MàVçXíö B×m3äl$ªF‰ª›Ü{‹ž­§®o aÑ[ Ã,qµC'6ð—¶—(zTÆ‘1 ½æ™×ꀡ²<êmUÆ;€‘×§Žgä›ê¤@³];dc°¹F߉†Ï.\³ðo|ãÎ;ï+ÖŽñ˜µˆž‘«ZP´’¢Ùlò¦”‰®<¥«^ … %ˆ&¹9´ÂóYçsŒvOfÀTæ½’á#8ç:Îôô4½1Û¬u^'Rþ·U´²²râÄ ”8ĆÀ\ŽªZ¨ “×ýRMwÏôO `ƒå%´ßxÙ섈ådŸÚdͰµõX@%Ë;X Ô¨g¨zXpÍ*q¢•ŠÝÂöchîßæƒ‹ιڭµÚ§jÞØ 9?éŸÏ»Ïÿ¹ûsç\·ì“aíbo¬Ç‡šF3œ¯ïž4öpßÅvU˜ÈMXh'@{:ب4ÄdNMÓ8]hy²+ÄÖ²”ô™²Lç•……ËŽÁ#ž´†îF ]Š¢Axg8úù‘ûßîÀG+-Wž]º[ÜÜÔœùàqØy‹ÚµbÔïam›y5zhCŒ‰è§€6Õ>ç[œ8Ñ©¤ ù)äÐÌì:Aea¢3BÁÅk]â1ÑY3°úæi+ö‚(8¯C•jI¶øDùE±!‚öáÑ£Gó›‚ivBỾj8ýZSžìžÚGšíõ·é]Û™…Ê!J¨™ç‚§J¼ÔOV¥N•ÆÑ¦ÒôªÕY;\JYÚäS+nÞ²¦Éz”­·Ûí0 M6‚RÉt+t*–»Ó+ô¸Îê|¬ý9•.V à-R"]ˆóÛÑ9,,Õjµ©©)«­zËó¼ßﯬ¬åWݵY!Ì9M^¡o  |¤ñ£ÚwFGô\Õõ@Ÿ¥4diOH_ºry&:‰ŒŠ(‘ (ÂÒ&E…^‰R^Jµƒ½{ä¬à:‡¯6³„A£Ñ¸à‚ ¶oßþ­o}kaa!y_Òû—^ýKõÇ€Á£)äü‹û—+Ý•w Žãà;AÿOúT*:£«h’@{U E« OÎÒ)·¿7š,DòS;µ=j–‚<ÔÊ•T,ð2oãáZÈYƒ/§zØ8™ªC³ Ž!þJŸSYb5ùP©DÛovF«j=% Š2P„y,#5æèô8©žFµê½k­ “ÿVÏ1ŠM‡~`¸y.y4·ˆÓÞ»[/¼èÄN’ Á襧 ]•S•XîWq`­ÀëSdÒ3õ¦&Ùf ꜳÙO»B²Ÿz½nSÀsss5Ò@’Öo¡¿HSV˜ý_;޵¡ ‚ ¯NÒ&DN@3F›7¹Ò9*pKÅ0ŒYê9bhÖ¶meýà¼/åÉ=üAÙzÁ¸¶ƒ6¯M€UŽ:ω÷¼«ÜcãçQ¯$­Ì"[¬è 2¶mg8£Ÿ¬ÍÓ‰­Æ†]É'Àå¶tÎPß@pv'r„:†bW¨3e*ˆ‡M`­3ܪ!›v㎴!D<¯PI|Qñ®Õj\€ý'rgô:íÑáUcÏ܃v‹]-˜ ”kOõÄCÏ1Ud{k‡¦( “â·RoÂ9“xšy&åÕ²,³¡B2ušpë ¸¬×aWnÍÖE°³iB¾ÇŒPU l2œ(`rñz Ú{WåiÕU²mSA3êà¬%@hsØQhý[¦Š<)Í’' ¼žºSl:OêH¥Ò8q õÌåÔj£¥_:…Þª†,kØ,¤*¨æ Ü•“™½BþöDÐU¾Z㨎yÒdU2ýú»/Žžÿ\t»Ýn¸!Š"Ó€Hž”„?Õ't3äü$~žížýOîŸÎwçkãœ+ŸS&ÿ’°im,À–&žª’D~ |ÄÁü ô[C8xÀ.;\uPˆ^ªç¯1†8¤qÔ¶4ù¸Ž)ù– EÐ'f²Áó2Ðá⻆*»FóeÎ8mp³´|-Àx*ªŒë7ˆ3w­p™fÖ“öqpŠt“C/œÄ9ñFšèÉëç{æ@4Û¬âôšç¶*\ T·Jc©›iƒJÝ”æÄ?Tkm’emk[bn+S%Í*´‰H?ߊBFÖ´¬'ä{OÒë–{Í0rüÙ,wbJ:¯õ1 ¶¢L¡@¨5ö -*{õ¶ÞHDTúGDjx: )\¹'ZH™d×̃Rõ#ïœÑŠJE ‹¢h¿­}âÚ­g·LšO÷t[—µ&Çõ?&Á›ËÝåŸvŸöþ2Š¢â•Eò™„UÂ9è) 2k™N¦omI–¸R{Á+XÀ¾Ìó+L€ápœøBâTu&5Š6PHwŽv…Úµu¬‡ßmÔ*¥Ö¸õvàTÈâòg…hl«+—P±ÑhX&ˆÜƒªÕiÿÃîÝ#›PTµ §~¯&1©Ú$“€¤§G ýasW@މ'gÀƒõàM*ZOqljY­[]öºü°¨´EÁqL* Fä±.uлGisë~•¤K0¶- -.Ö!ÞŽRB¸#²¸šfãA]‚x×,K¥’£ád{Í2HÔpm·r†#±J%µ¥E!BN6ÉÂç­iTðÄ›õ659Pa{\°QìâM®mf[„ô·Hwÿ³Ñû@/ÿåq¾˜ÿ\>úð(újTöËIòÑf•ó“`<Í=íeîeovovÎ Ÿ4ìüc§vU-Ü¿Fï«}µ¦¡çótª[ãÖO³SyX] †¦ºñª2K¾oÌfìÂìÛ 'tƒMŸ4SgËa#oOÞ }o Ö}»–jcLò;N{?v±hðF@@r84µ—ÃwA…@kËDukUQu`SN”]0L è¯z£ž6«ƒçެÚªª¢¥6<Žã ŠÙbùsËc~àei¼GA¤Ñ×ãàq[ÿo~µü/ì2>g]ª¢‹þßöÝ®rUóO›Á·‚(ŒX$ K!Æl>f“Î>#ÈæŸ†¢êËÎ~M‡öäĆˆÄ£³ËÓZÞ¦}¯Ï¨%ô~â«ãúõìßeÅ;ŠQ0 o k®Uûª$H¼6ífÈùIüœëνÑÝø÷…g¹g9çz·õÏo„aX”é•&}ä¼êð¨ü±  nV”'7uLQV’~§°¿Ùib9>§˜’ÖôïõCqЙM%Ø(Nˆ½ }Z-"ÙpL8´ó]C¯ÊPà{è¼òöí6©WUU±³ˆvEýßï»)çÿmÞF·®9ÐÃç8)€°=Æ ŽïpL+ Õþ!ŒRHTõšMÝNK^Ó©UeVoÍFU¤€ ð&êT¯´`Åþ±'éD”ÞŽªÁ` |åÅÚZéP©zš4u <“ (Šeí1k팃è΢û{Ýü”¼ù¬¦=çåO-çGòú«'GFmšÈZuc^ÓÊPÒJëâ¬P[ØMúÀFþ0JBâoûJí#m^š&-­Xd*v©|$ëìQ÷¨¥<«n„úyТU˵±ÈØê³Øª<(Ï`ت Uxzb7½Ô‰ø ¤r#dÂndY#E #€ËƒEÛ‚òWÊÖ'Zj«ìœ Žñ7ãÑ«GdŠ˜yö9œ’øÌ+‹O{àôBìÛ5«UÒ÷áž™õ޾b¦’& pÃ#  aÞHUuºP5ît2Ÿ¾‘õótØú‰rLTÜHÃ0e§ËçÖ«°h‡_?(IÔAŽÒDy¸+¬¢*:5g=ëY—]vÙã÷¸(ŠÜCÎ…ÎírÅ ØØz2ÒªnÄ;ƒ¶§$ÑËøN {@Ô^jyb¶ød8¾­75ûAÇk)ÁµeœÈº_Z1Ã<ô&íר6¬wBjl‘FÇ›tD”¤›üi\9@]íŒ3Î8묳î¹ç•gõxz`¶6ÂI DMQ5±XEä³ÇÈd•[M…_ŽNÚ¨iø4I€…{_v  Ä¡„·PTÐHÀmž§‡Òó4jµZ§Óév»íMGÊÀÐT· ${Jš‚@Bñ ÖͳñÀšÒ:µg«D~5Ö&3¹Ìä0íPmœ(xâ|‘÷i—¹OåG1†FÞ§ÞºŠ«¯†íZ­¶cÇŽ$Iæææ89p½!YãÒÁR¸I`n &è¾Ò' –-žduéJ&'ìÃm(RÛ]vUœj?¬•ÃtÚ`ƒø€¡‹šq唂äV‡½¿R†OFõ¤Yi&¹­ÄCàÄë[S]ŠªüfçÆšSÃÓP½_ê'".¯"=,'úsºaŠG£¼È˳ÊÁÁ5×\“¦é‰'‚ ˆÎ‰Š²{¾)*ȧÁ塬4’§>%MhWPÔºÂß FÏ¥ßO———×üfÒ xj/VkÕMײYh*Mk°Ñ-lõ¨g4 îD][[ŒæšªóàZm{Øû¤s¹Ê/iPôÌ¥íœG}ÈQQa4ð==;tp«¥%èmNM½éñè‡ëaÏÕSÓ¡âsSFÄ—Àý”äÉi Ų6Ëp•1¬p>¸«0ñ‡HšJR’¸é±¥iy+eÁÕrÿSœ¿$¾º6<EQtr”==Kÿ.¥iAÅ鉷kw‡Û„Ü¡î^FÚæE€žéT&“ŒTʆ‚”ÅsCÛÆ´L(=)§TÍS•RiÎ15L똢½=U/eá1?OÁ‹CzkžÜ§=Þ¾[o=îD4]Kj%:êL4òätÈøÍ0 kÔ²,ž;¬öUssskÈÁʪ¨Â{¢,´&öøôú.ì«"œè, .>ÏóZXK¯Mû—ôÝ?¯«ÚÃF8zö¨ñþFá %é©–JöáÊ¡,V8v«Ç å:‘Ps(P¦©€j"¥©0"#ª³àÖÛK«Î……jÅW7IÒ?…ÖË"ƒg¢šZ“ {›·K®¡šz0Ñ2QO ÙvÓ”Ð­Ž¼Ù5]X²´m´Ì²_8~ü8 —¶è©×º:ÃÃ¥F#hQ_Ïêj|wÃ0º;*/(ƒ \ϹÒÕjµ<Êã“âbGQÝ^…ÉØDµë=k;PD Ó¾ˆ=R¼œiŸ@ïቄV˜êÎQ‹¨ÐßÈT–Mf.@n ¤Ó-(–ÉžZÓ÷‚^E•òwuÐUˆŠ¾h‰ÑìœuHȉº³Jú3—¦-@Û ÆŽ¡žÓ^cíµÁÛÃß¶.oUUU•UÿÓýè`”¾; £5 ̤}²U?ÿ·2 ãc­“†ÑQöälåÛ+õߪ‡…UTe¿ŸO/Zÿ±åE8ÝÅ^Wi¯ÄQ)k´…¼‘&uòf ÃÑÐ,Í&¬á&@`QלÖu΃ʲ̚²”P@š:l†œ å?kž K•`p˜'éæÁJÄ‹0Ž9dVœ¨£¯_]f'§vT¢CMv1UEjãQºž17µÅu2qIˆµýÆaJžèyTs㣫=—ö“íb ]]W•;ÊÎç:éûÓ°A1¼l8˜´_Ó¢À8ëü¨pˆ7bâ)ßèèƒ[o­ÍiµÍnõÍÚÔÑ9ýh{Te~‰u\‘sí3Ù1×ï÷•õ䘲XÈ“GÎ-«mÕ(•ûËè¡È[*šó²ª)¼<øÈ3A·ˆ©Ï9’HÓÔ®å!š£ö%£gÀk4óAýMõbºè}¾WU• \ûUmwÜ©¢‡=œF£ËÎ#j™[r Ê:ÄœIØ­ 8Q¤Nÿ;ì”§—A4ÿ{3úÃHe¨àX;ÑwW­BuhÕHÀ…Qy(ø©"&3z½;TÖ¶ƒŽ4¨{¹…™Ö¼7k£=H²–ë¦yÁO}@ yõ˜Ñg[¢UÅÉ/úW*3¬².|©"ÑZHiPtEí#UX%U2]é ˆØ™k‚ é­•jƒÜ:ÅgY–e²ÛÁD¢íÄ.SÉÇ:…\$ŸI²·fÕT†aýƒõðž°r•6ä½bB»:T¤òûp Î`g–Úši‚©g½Šø0‡dÿ|Íï`O=/«¶Ue£tΕ'Ê¢W$NÜÈÁjƒá1ž™á…h¤Ér†n·Ëþml Ê´Ì]îVÜhy”^•uN©Ü‘Õ 4œTü›ñu-ãàSi5ì·¬TOåþz:~6[–e¶’5^Ò H ¢9>JIØ|‘gÁǽPvÄÐh1²ŒAvMëu­5 ¾*gS+OA'‹"T–Jåq1P ÉÅ­Ê—ð¸ h:¨v"-¨Ü?F©¨”N©QVk}<¡E˜ÊCY6CÎF’¤mÝ E'ÖsâR2’2Üh±(‘‰“ ùd†3´¤x:i#b-*ÃN¨cÔCecÀÕ.”6Zì÷ííVCûY‡Fõ÷õUz ’: )*'’…n½Ñ´ÝNã=ñÎ ª2(™g$ëTRŸvì©JÁEyìú ,…³PU£§ŒvÑ­ª*Øô_Õ&ŸOK²,³'dÕžjðöAã] ë$C¤úÔŽ… yƒ¥*C0>dÓjøÆaý–ºûªsœs.ß“ç?›goËÒ·¥úl•• µ5©ž°ª\§£?ˆº‚ GQdým–Š}’*“l‡¾ÅjbUWôL娙P±¶7×¥:ðÈí7qôPWSPnMÚx:øVåXRukð `¥i5©†° ½:ñEgH¡Q6/ŸOì7õzÝH}ÐýTB¦»lƒ <ٷͳU•¯R§ÔAYËý}.€øú: –Õ.´®~ËÓ­Ü6.¦Š1k} »Q1\žv…ƒÁ€Èä#©­þªªºÝîMkK2zÎhùËA„ÃÙ7Íæ<(Öi{ʾž~Œº¶8ÑÝñ(jê_E‘50¼)}Ð0¦=WÌ-*·ÂN†E”6†ˆ‹ª¶0«onÕ(SñyÅjôòo×2ý­…Ûîê_o4»ÎØ5 ŽüèHö캦r 7ì¯õºÔZIÏ#ÕÀ¦ÝB@åøs3®<£¬¿½>+W9çj÷Öj÷ÖV^»ROëÉ(ÑÔ„‹I`Í£èÒ²G: Ä‘Yk)@Í¡D,x\ü½Jzs ÚêÑ~Å\ÑäP³6±L&-˜äB]×â žçæ`ÁR›‘ZF(áX[qö$Uç—¯¶JÈ›Êä«Õw€*DÁ=@_öME¨ÑWíàPÄ ©š\Ï›!gcBÝ9ú:ʃ3FßÊmšÃ$ –#ƒ¥l‚Oû+*IbÛpÙ‰°•Nõ«N°2A9U9YðE¦»Þn·Í˜¢ÌòÉeÿýôæôÔKNÍó|tÊháã ñuqíok®»N-”=oìÛn·Ë·èHÇ=.#Šhw@@àQXððX:®d­;2 © v1:ƒ­•}¬íùIñ^º ŽÐãÄW¹R=5´]ßÿPêâ©f«ùŒg<ãe/{ÙáÇ¿ò•¯ÜyçÁ›‚Þ_ô’×$$br¥ž˜¿5Št“ÙF¯–®^j=»•‡c‚œa˜Î¹ô•iéWL댡=X;n Nd-yõ †â·*<áÙpè“y²`_ý~ß.%ž·8¾•cmÅh£Ñ Eê ZÔG敞ŸÚQ§j §à¢(r‹¢hûöí]tÑ/þâ/ÎÍÍÝ}÷Ý÷Þ{o“’1>´yCŒ´ÿªB™Ú§»cz†¦÷̪¨áQsq0)ˆ¯ä]nÓŽ$»ÈÉqUÈö Y¹úå¨ö½t-+õªâ*¸7¨ÿqÝ­—áíP5ªScIJÔã»,Ën·{ß}÷íÛ·ïá‡>tèúÿ:Œeá_)‹*î æÜØ£iyD»Û&võäUŠ&oʤÐyaÆÑ£P'j•ûîÔk.¾C@_Y×òXNçY)0«ÎU*ågúCªdªà„!˱žÛ*sD»úvµ,™3ÓFšõ %‘ëf´ªÈCðX¢ä.,-{/”ÎêÆäé\¨ÍóÈ‘#Ÿýìg:T»³¶tÞRéJe1(@AàÚÖ°Á¦R~¸am`þöØ{ó8IËêìÿ~¶ª§ªºgae×$¨¸nj¢1A_£1»ÄME¯&®ÑWA_MLbŒ\¢‰D"PÌÀ™af˜ašžîéÚëÙ~œêo_u7ïïO;òéþÃÎôT=Ë}Ÿûœë\çºúý~–eaºµnôšQ~Aîý J?œg‡iBãöƒ‰Jº» HD‡Fݯw“ë’©LE1<~ع®S»´_W®ªUмÄßcK{ ŠbžEQÔ/®w>ØqowW]uÕwÞÙëõvîÜ9ï´.jUÑ-M¥tø\cœÅ5›=$õ¶[nþ~søwÃæï7¡iØOÿýô¢”Ü\eâÀ‘,2z¬šËkëˆuhåÚ:ˆXàW6Õ´ÜfFmëtãt§+œ¬¨a”‘^oìLm¶qQÒÀm}šÁ`€~ÙßÂ?góŽ·É"™E%€T°g9V»ž¡ª-ñ¨çøã©7  ‘²,¨ùX·ØÛs¸z"«GΊÍåX½où‚Ò+³,Û»w¯mÝÎg:µ?©%{“¢( tÎÕžUËÿw>:{]¡l®0Œzyé°N‚·P5þžLô`4«Õ ¬œì*û}£*° LkµZ'tÒÉ'Ÿ¼~ýúV«¥­W ñfÊ¢~ ö! ‹0jàõomÛ£¤‰j²…'{bÊâÒ<¼p IDAT­ª*;7^8L¾4Îj”g•ÅÙÅ®…ä/’âò"ª"õæÑm¬†Çj½Ý:§5N3Ë ž‰ƒ¿ †o/†ý0¼5 ok·Ö‚A`»©{yT@äÛÇ@Êa…ù9ù¾Û÷µïjEÑ?ª_UD»#·ßynf`ë¡UÏMj’êE†áîÐ Ýè¬Qò“ÄísÎ¹êØª8¡p3.ÜÚX¥r—¤åŽX~:ɯÅ05_·4¥V«­_¿Þ9733c]/¶˜ŽøXa1ÔjŒµª(+0ïr¡)]-‡36âìêíÀ5µ5÷]Ûòæ’®bÕˆöjeFÞ®MÉå^Ãf¾…¸G³AQߨ¢ž70ÒføšŒ wØÕ¦•Ðh4¨qIølÎôg½‹ó9rˆéC½þʸæxFÜĽØSˆoŠƒgÁA0•Ò4%Œª³U”rÒ@lht^‘!z’Ï^Hõ„ÚœŒL»E'>fJ0‹¾õNë=rû#7Þxc»Ý~à|ðÁ ²³²ÆM  L,…xmý$ñã¤ÁܳõÇdóãÆ¨R4ƒ?¤ÏIÝY.¿8×…UQÕ/­g¿ŸU® ?¢#éõó=r×’Ÿæù®þÝ:h{îòꪲUÆ?Š«ÙªùÉfþŒ|ô¢Q~Z^¿¬Î¿2àÑ¢ d*8Š1Z÷«úûjð«÷ ®ŠªªŠZ¦aýmu¬…‰°ªÜc½%#—+W^}]u „0ýX:zýhxæ°UAiPÕ«ô/RÈ~J)Ô¹.èTæ•Îöc¨¡ÚÀªFãÔSOuÎÝ~ûí<òˆ×ÝAÚ™u‹gŒÞ—ª¼¨‡ìraC…¶À÷ØŒÜ$N; 2u™RtÆÑ“ÕYfµà{õ•A{c¬‚¨2 "t¼RÿJXÕ£ÒCWõO™¢#,Ðmõ4È=§DM]=rV¸—£rXz(¹yø¬amK-é&ET˜¸úÜÜ\’$ÕõUï¢^ÚJ«á8B‘ø«5fæ”Ò0´µH­ð !%LÓ4V‹å´(I—žçytMÔ»¨×ÿ‡þ~ô£{ï½·ÛíZÔ{AoúÛÓAho@Ý'u"Oã°¾šŽxZ>D%•Ôµ[¾eXÿH½xjQ{Aí¨G­ÿÚú]Ûwõûýø;qÿsýÊUµËkÞ‹£ !*!-㜽lÔülÓ….MÓc=ö@ïÀÎíœ>º,ËÎuòeðƒ ù~Òÿ~?ù¿ ÿŠËÖ¤Ä-êÜX‰qå]e}K½|v¸Ê%[’dg¢›ß«U\—œÔúê¶0˜M?áaã=쌬ÜX†Qn ãŸÄEQ¸`©wHZC^ùžo!R«v²´J4ÀÇÖÞÎ`0èv»ê}Ž\‹Ð"¸ÎœRßx"uZÚÒH×ù-îõz ÖqÙ*VFždäQS•l‡[¡:: êP¥37zXÚ~WJ**ìANÊ,Ë SŸ-§Õ'D "ŪVìQD¨ï—²d©Û”e¾ÚËùŸÒËq“R»J‡wÎqQ¥fdK[7p.˜pÇ"ûPô¡– ýo½^o6›Ýn—²åÊù sV ¾¶ªÆÁÞ°Ñ 'ö£ÚH`qO¿qzîŸæú?|MùÏåsšk}µý(*ÊBuÌ8±¬³­©Óræ…N¹Zè±DØ6¹1Ç`šá¶›Ÿ™×?WÏŸ•¯Ö¿:~õñ¿uüg?ûÙ{î¹'ùaÒKzù)y½YOª„1ä2="Ö„±BUÖâZ³ÙÜ´iÓµ|íÔë§ÈòÒ4µ¾Èô…Ó½ÏôZohƒ¼p£$7ÝÉZ}6ok.Ù¹qŽ@ªr¸uЄ°×JB¥]=i‰øÖ˜„vÑ:à¢ýp–+€¶Rœs­Vk0Ðòá‡È>ï¾ûnóæ±×m Øš‘6)‚ߨ…¯a€BŒÖ2 ‹¼8Ž-ªÕjžS¸:%*oESIû"†ñ\ x³àØJÐøN ¿ûé÷ûìYú˜'ûòžaghgÅ3äÖþ–öö¸rû:5׿º$$N‹6ÛœÔ+¶«Õ@ÝÉé _2v®©¥NÕåçS/™rç¸ÙϺÊEE‡˜M½ð@”*ª£|v³Ífsýúõý~vvVçŸЖ/ÈÛÆ.’ª¢z|å.pÑGœõ@¯×k·Ûcz÷Î0¾6îýf/¸dŒJó²,Y²iÜ\ô¸¢ŸD£M£øÎ¸Ûí^wÝu³Ϧ{Ò¼ÊãÓâ©SOzÒ“vìØÑív£G¢rÃÒÉJe¦uh sô¨¼º™hh—§´(58°Gjºd¬@' FŠü(µO׈ã@@^Ý ]Û=ɱa(tÍÏÏ£¦¡Ò/j½ÃAõÎn¢ö-vÔ©¾ƒN2ZÏœàà©lb±…{½ìe7(:­ÿKT¤RÒ R+ ž§Ý>ö(œ¨ui)Ç­µoWQÁå3=ÞØ¬É¦Ù£ §M2eÐ)âº*x³ò…•2†Ú÷:ç≇ŸWÑžÈÚ¶Vúôã«c7¿„?k´†ÞõHknÑ#Y…èavª•ñb©Q±Á“*ºEý¥'Á—ót ©?â8®ÝRküZc ‹»’SólèÀÖ6ˆS«ÕÒ4=ꨣöïßokÀ»*Õqap„ 8xÌc¤ñ_âì•™sîàÁƒ×]w]£Ñ·L/%_M´Úà U¸OwÔ¸I{y­wC/ü·°×ë…aXVãc¯ó —oØ·oßfX9f £ä¼JZ®Å«½}ì$¹`Mvy¦4«Ç¨àhd}A‚¦çüh_G#ZKaÒd&Z<tý_˜NºH }ðW^fÏXééŠtq#|¬Ú![(75 åó•ªÊ`#»äé6*kyÕ•ZûhA©ͼA#¼qÞn¤* ®¥ýùXKTˆ6¨()A¯ðQ© Z*ì¦=i {“£QeO½zîQy˜«GÎ kc¡õE£O(X:,–|4üå Ú…sî7¼|Xý¨ªÝQÓu`ûJÉÄl6/x-—Qb‚x€Æ,'Ù¥Ú!äI¤¨Œ•ê9j§ƒ ÞZ$3²Ý­¡tÞŒ¡·}ûv›DQ¼R¦ZmÚ ¸•#ºsÆŒÞ/%ƒ{ÑMQ–eív;Ïsó̽nÔ|]sô‚‘Â)ä›Ô"–×SY¬¯¿»Þþ\;ü°þ¹zôΨ÷…žs.º)êü¤Óiwìí þ|PûÀDàfÔÃ3‰PpÒm9{¶V`†D‹EYËnqºSç4dRêéÉ÷Lår5¦/BTbÊÚ“/Ôü2«2j8V5L#ÈÈÂ/ á<œv»mÞîQ‡6a§¬9²N«Ù½O¿jºý¥v~qî>ïºawá™ ý?é§LƒÃ‚àÜ ñöÆ(@‘)Tµit”ÇÛÔÓÒÁóë;UU…ݰñ®F¸+ {á0FÓQ¸&ÌŸœ7onFµšƒi®py4ä9ûy­*Ô¨µnC†b©¨šª6x4-'#¢*… sÄÚäÓÒœ—«^öäqð†míÀp“×°PcB{›¯r–ŠªÁy3Ó&ÃŽ–[¦²„ÐÜøµ#–Ö rŠà±ã,RSa0QäMVÙ{áCtÊXQnKœz¨èëÇ–õ¨FWW™]Uª¤=s œaÁigI¡å‚Ü—+~å&ª<œz *º°ÚUÅÿ§ÿ”EQ<©è¿·]…ÛüÈËÓËâÌ¢qaÃ-šYukõ 1™K´¼Á³ë±ÿ¦EA@!«Õ ±¿8UP&½r&u€ƒyFJ-O5Ìy„+åŒÙ‹ÖHÏ4õ¦Â°$U& Þ£7!Ïî0V{û^Ž¥µn%OVCe>ôU6&ÏõUN_ãå ÷ãEë\³6Þõ2¨`A::JÑ㜠6õ?©Ï.¢ ru—¿#¯‚ªœ-›k†ñúöȇ؉®êA¶«mŸÏO‚ÆâåEùô2rQòäõñVQ.\ÊÖ•§èé…()V£-¡ÖH´©*—®¢M8Õ'Ö:c¹Ÿ7µßV m; KñÄT­G™W miyíÄ혒¡¦:¸Æ5£_ 4ñå†4°H,>R¦+WXñv +Và¾ïÎæ»u> Jím< yåsª–‡W(zi›'Ì[šÆ§JJ«×bNZÆéä“òË• ÈN‡lBóÿ2Üz 0¤;Àu@-Vf§½µèÄ\„¡nrŲÕ,^Ë Û®ªã½v<>¨×4k´Ñó’’ß9755e €Ž7#­ü]BôÓå£&S¹bAøË u*à Õˆoˆ“ï%Å‹Š*®Â0Œo‰³½YP †ÕÌcjÊ©l^¥E˜Nc¸ïß“àÊÅ¢!ƒ0ŠûÛ{W{SU…PgÆ¢(lØÛÚÖ@æe1d£d-Â8 Ô:–z¹ž£—ù²ºhxøÀmHº¯Ð³QûTýQC -°t0 ‘5‡%CgãÐhÑCZEðà‚ÛWF#ƒ‰|a_ШÓ6˜[ ô¥ì½t»]´Ï&e™4ºØÔÂJK »^î• &XÚ¡áEWsÍš5µZmÿþýL…CÈVÉD•ƒ²O¶ q?÷LCTÚJk}õvr“®ªV¾zä¬X•£ƒ8$Ζ’hVÈÞ³`äÎxb:„¡Q^K+>ŸΦ2 UÆÔeôÚZ‰¦+OÁ °'’Æ*À¥Ô2ø ÄnwrbÚÍnW>h¡ýŽÑ1¼…æœ(Ê ‚ ¾6æÙºÄåyÞívrWѶ(Óþºñ”…špšÄz¥•si>[«ÕN:餅……|@š¯W./»È.É›‰ñŽ'3}ž´aΓ±Â®ÑçVðG¿Îcâú³,›››sË4•Õû€æ–òò½IOÚÕ¾=WEOÂ_äT§^®>E†Õ¤4ÕÎjh")§Ž=:íÍxz0F¦R5gyÚœp±4'QÆ?KTK ºMÔ˜0Ù½˜H¹¦ÿª GqãUQh4h­F]屫µåDœ{ffF¡föT³vÅ´=˜Äüçææ–\u†O=928Ñæ–ttwu.gåçr´TgAØ£ü%¶½Š#8CS„Ò8BýDUàOú¿|¨P}qÔÉʉO"Uü¡Žì-— &˜Úæ¯ÕjëÖ­k·Û&ƒ V§PUÇIõ­U£Á6Ôæ'Ü<ýãÓå§ÞÒó‰ÍÌK¡R„¯amÕ­Ò“I›˜è££©«Vójý‚? X¹èU@O ñvã–"x³SZh¢äõ‹·CUb¢Æeb5–uÎ5wQ3LÕ˜ÀWz.oG5» A¨x‡Çÿ¤M…Ü2½Cj&§dHµzóÚ„žõƒ¢[I’XóÒ,d SéªÐaUŶTLÀMÓ5+ìì{ °u2¬C*µŽn^’¦5p>a ðdÔIH _˜µZíCét:<ò1籯=Fª– »d7¶^à a~XÞÿdßÎ9×ü£fõPΆž§šë|™í=Ý*Þá§Vª’ þl^ó¸Ã>ÕQ˜ŠjI¶+Ž?üpÒ7Ä+•qgOi0Ø×ÂÕÓ‘þ9Cædå: H.FOE9 †pzVóȰ« ¨ªtk÷ƒn,4iEÓo¶‰þD)y<á~¿o a-QÇQ¶1ç°×£6-Ä/…L9D9¿íè…r¢‰½e» yÌsxø›5±ÁB î*á9N.ggØ-ó &Rê£}‹:¸;Ñ'3£´‡c8¦r>>sXüqQ¹*|(lýy+š’^ÂõÛ—ª1.[@G†Ãá`0 î{dq–¢Ù¶”î¯þ4:NK‡IE­´áï ‹x¨»*Œ, >M&v$» ÒŽÃÑ¢¥x( iqàÀÜáFÔª|õÈYÉBÇö›Í¦(ŸxIâ÷„lø;âUL=oÊVFÿ²¾ëºôÒdG¢É;Jxµ&dª‹´ËÓê0L€ËPµG†•åMP4é©*Œ¦ó:¶Íî»ï>¦O4UÔ^‹E1ûqbÅañBٷ˹œ(jµb›ÖN)½jG€~>°\ÛT­-=¥Ný‡ª#Â~æ•Aÿ¥m‹I³š¦xÒÝÌNºI³Kzàèó–õ°¤ÕƒÖ³Š@•c[)Žž…Çžò\TZRÊ}GÑÈ x‹\¯Vq¡z½n:¶`Gª€P>³üö ¹=i>¿Y–eõøjøÑauK•|6‰Æ´ñ©PyûZ¾çy¾°° Ãȶ;8áXùJà¯]ÙwØÿhKOy ª˜&´L†L-¡áÛÙ©i»ÞMZÇêEê^Ö„U¥;t]ö«UÎÊŸ7ên«ÙCTʲ¼t~/lü{£rãØ”^”æ/ɳWdî¯' kIë¬ÝèDOuyÔ/Öqµ _nà¨ú}„iúÆ$€nÒ`A—©…$õÖTÅ\-ÛùsEùA{žR:X„Æek`ÀOC-S^d̵l×S‡ª\1FÒaÝ¢@|J"RŽç7ì!‡ÊB¦k¢½bÁùCË[áïÙ¶áÿÒ°'iN [sˆÂ\PùQŒ¬ÈÖµ§aÅ¥ŠfO+z_ïU*¹9 ÿ+ÌÏÎûÿÚ¯¦Æe¼G­ZØç*ßË’˜§ÑƒsìgºX±©@ÃCåꑬ0'-Š®³º“içL5ýx¿žœ—}/W®g‹Jg€l†I'yU(ûõ,ú—(%¨¡ûLå¯ÏËxÂëŒwDÆ£tUbWòíÚl¦ <Ã@6&³GNôO1D tð ð\àt0À&¢ºÛ´›Õƒ‡?QE(…¯ Ðãò ,âþ©ý]KWÕþGôrœsîñ.®ÇY–EDÉ(¡Qœçy¸!,\‘ìO‚(8âˆ#Ö¯_ÿàƒÎÏÏG¢",ÜaNç=!H ´ ôW+k4NGpUJW^&˜²ú‚“Ù)IÔ<(íIo—›PåÏ{ÏêåoÌsñCñÚ÷¬­Vq<,¢ø¡›”JTr’ô`C蔯-zoÔÉká¦i ¦¡¦÷î±b4kÖÙë£PJkjAˆHÇRì²ùqœzn5øÍA|K¼ö…kƒ ¨Ž®¾÷`zWºþ+ë‹™åyMüAáÔ’øëE_`‘Ù¿Åo[[¦^ˆ°›íF2%ÿð”8G1€±ÍŒ^€êqG©r 4^ÆÀçŸ6 nª™ªŠÆÆhA/ˆzQ¸5,Ÿ^†·L8ë¨Ð/äoÂ×õ $7òq£NØAË ZB/M§aÔëZ×¥¡rÕTLõQ¾t8_áAV—J¸ªe®0ê°\æ•‚‰2ni¨ r†"t»]cm°0ʲ,³qþ®V1j ¨µ}8ª–òL>(E…«r¢ã±IU.ÁÄÔ™ìõG¥’z:™`ÛœÙ>–1¶Ù¼G-Ô†/Vª*«à‡Aøp¨þ^XçY# ò·ªñ*J±zä¬Ð‘sLU¾¦Œóxíûׯãn·;:o4:i½>J¿ŽOŽmUqF‘Ÿ˜Û‚]»víß¿ßʑꤪȋtçØã’±|•‡TFðm¼‘ [ʤ{8/)Ë?Q@v ‘…¶³º¸k¢±ƒgÿpáÏZ¯j…ý0ˆ‚8Žƒ}Aí÷j XÈÏ“¹6MXX¢Q¤)bívòËZìÛçè ‰Î`s‘ìsåPèÊ¢ _¤ÞqËI *À cBSÈÑ›Gç6‚0ÃÐØ}ûöí˲¬þÉzÿÝýtsêDËmGOEëûXÅŽ‘ʘ@»ÈÈr;Š&üO¥E¯d¶~ìÌÖ?‡G­Ãƒb|DAZˆyê¯AIçÅG…ãTƒÒ^´½¨aŽð¾[=ŠoŒ«Qµwï^š4£sGɵITEáp ÕT,zfº)”í öå&U£ø}•S‚ž <7ë.,,Ø6D1 œ¤%(=+Ž@•þ$uÎeÏÉòççåÁ2¨‚0 ‡Oº¾k|¬á©íñ-jö£îgÿçgüÈy|•½.«vT g/Ô·Ö›ïj×ÕæªóOøaû7rÙ Y¼5îõzý~<ñw|æ Wl+ªp<®L±¯1щÀ»ÆqN´@Ø~nÒ”štÆkÆBžáw4eSnR:Û¨ùïä¯6â¬)F8 IDATßT†AÅ)Åèñ£þÛûÍ¿n"@¢^õ*ž˜÷*}`~v¸/¾¤õõÖé:ý?~ç;O}gõÃ*ÿµ¼ì–õOÖGïÑØO/O‹gotÊãË⸢<¾ìükgxÖ0¾t¼Euõ0â`»z’:JäJÑ›{°O0tÈ·§!lÝC«4Ìé$¶“œÓêŘ鴩*·—ë¦×yä‘OúÓ_øÂŽaèíá踬0+­€h†gRƪÕ@šmÛè+ÀÞ†”“½JÂN°Ãï}{”2Yvkv„ ÇyžÚ¤ N (•Ž<”Æoç®»îº÷Þ{M¾<¬Œg—RK{›½^*¼µÊ!2`üeOÉøÍN¤}ìf­ÌUKut=) 7…nÊ)¹€[ã2³Ì&/!ϰš[]3PüÔ|¿(¹Ñ]°ÚQ8`='Fj Bê‘j ˜­¡¬Â ¦_7ÝÿrøáavL6:z”=3[øî‚û± ¸”- ¬RužÈJS-+{2J²ðæCutÉKqhmêïkQˆš8/¶³¶fí$°U:u¿¨ud’&åñ¥;èj7Ô¢,2Õ¸äî$º9ªŽ¯Êµ%m6O™I'Õ¨þWoVòçîÃ;‡Oþì“_ö«/{Íù¯i4ÇÞxì»ïÝ3?šÉ‹|Ð07ç ¾# ÖÝK»¶¦§~{*ŸÉƒ â Cv;ÙŸ¢önQ.‰AE׳ZAg`µ)±")´# [ÆSÄÂõ™Ö¨ÎxG•U„ív»,Ëx`ïÞ½Fê/˲rU…¡ {½ΛžÿóCZU(Ÿ•¢‡Þ&ãnÒüÔš½ê÷EM¦ÛªZ¦Œm…ãÕ÷žtXtJI±f*y€Í75»ŸèÖ~µÖétn»í6$Sûî¯}áÚ*¨œ¸¬’Ô«Ja6 ÜjPSЯ|b96¯Î¨dsYøÝP[˜ê—¡ý Ð5ÀÕoW3SE>ã8.:EóüfùÌrø®aåªh_4uÎT–ee8!ª+Änß}¥?¯ùœv2t°ÆÓ}W\Aáåþqïª/ .s:È©´{æF¡$€}APBÇÑaQÿ7úW4\ìÖ­[·iÓ¦ªª¶oß^Ηîk®ó›ôÿ¤ê‘¡ºÔ`˜˜.>¦AVœ¯¸¯¼Ê½ê}ÕûªªZ»vm«Õªªª×ë%_M†¯V7VQ)#(Žãxg¿ž½ëƒJc¨†Q%ÎÛûÆË¶V«MMMõz=í‚hF¦dko"Ï›©¤ÃêD?ƒªœ?$Š)ï–´¨,Ëèê¨xQÑÛÜ+ŠÁ`` l½^ïÛKÿ#­ò*¬…Ö³µøÇq¯×s2uèùˆ(9GÝ?•ßéÉLñ¸4%uõÔñÝÑs”ãe9‹;@s:ÛÄ¥ fOi*e{—ËèÖ(ÿ@ž|>É·çιìYqv‘~!õ¦¡e+«BEÕTc‚ZÐÉP°á‡ãÏ9®]0ªÚUã`>pÎeçgå‰åèðQü1Ò8Ü‚¥ÕFC% o,—ÓVy1shiøÂ;‚AöBçœ;ÆUgWñ×ãø¿c0½»ÊeâáÍÿ3Êy yÜߺ¥ 7/’õƒ‚9G®Y¡'7éäÄœZ6x2J×D³ƒ¶?lR¢?g6ã5Š«¹ òw@¸ªjÁl©7iÇ3äôõø¶e6lØpÎ9çÌÌÌìÙ³g~~^iJ¸×;T©O:Ô­9?ퟫÝÕoroZâúK_iUU³³³›7o¾òÊ+Üz ÷Ÿ½ðˆ°qiƒ6 I]CìaÕ=·õÔøm;rÈ!/~ñ‹ï½÷Þ›o¾Y º : hG 7PãH]Õ™Ê?§À×ÓÅM–Òà­ýW­ýŽöT:UöKëâX´ûÌîÔ¿MåY¸qE¢Õ*lã±o=?5wX®5Y]þ¹§ ;€É uvÑ‹ v¦ž²ª†ç¼ýcPœsA;ˆþ.ªN©²?ÌFO9çÂÂä;IíæšŠ®j§Äß“¡ ˈAÊb8˲|CîZ®ñÁFEa–e+.~PŒþq”|.Ñ J"š^ÝF”¤ÎSupÏ÷Å>­û‘nýëõrwnÃ0 ×…£§Œ²WeÉBRî(é…8ëSQQõÒæ'MS'ã¨ðìÊU†ÃK¶XröjÆeÁEY~~„A|u|:ðæ½Ü¢8‚’´çªíŠúj­iïÈÓ-åtW…º°ä@œÂw·ÇÕh4x&ŒÁyîéŒF£»îºëá‡>xð`QEY 6íD½Â«D‡ô4 VœŸ~*<­vZyL¹·³÷†Í7|þï?¿cÇŽþÚ~U«Ê Ì·.ÅAí·+1Ìs\·ÿÛï÷mU)fyÜÁƒoºé¦v»mëU)¹ÄYËh¼yþz½Ž]®›ptÎ ƒ4M!Dz’”DOµBñçÜô«§ÛÿÒN~œ¤ÿe?>oÿe»õ÷­äŽòL½^çT4C¤‚FºØ÷¦iʽ@éѶ³[&ã­à¡UZʾ£Ç ‚U5ÍïÔHôÈ#ܸqã¶mÛ¬¶Ó wιÚB­¼±¬ý¨fO”GÁ(Pÿ.²K2‰nͯ¹\aJõ¸RÑt4xÛ ùšfUUFcãÆNgff¦˜+j[ËþÍ=í2wYòŸIôhïë÷Vë«pM4ƒÚ{ka.OŸÝ¤Gýri[shëÂ,à2DnCBª§‚VNxÿ1h‰m—šK˜ÒÙ:È žÃ":nÒåe<ºqS\ÿa}œ6&”¤èFëH Ä‹Å& ­šÇn™)§rç¼) -W¢X!i82í±˜Ç«6V\0ø$qvÿþý333+èPŽ[tH"@ÄSÔÒ‰O+Æbt>ßRuäpìÃÕ<´ªªÀø1w:{ï½wïÞ½ä:Eµ´ µ£¦lÄ`¼É ¢¡ÄiÌŒ“’pìœV¯×O=õÔÓO?ý›ßüæý÷ßÏ·Õ¥Äõ°P%ru"вUåæ¼éHE® ^Þ0¨}ºæœkµZëׯŸŸŸ7ÆWtY4¼p˜|*KÔq%ÛT'úF8¥'$3Ðq1•Ò@rFÏ-mVÏÖø›r)Q Êó|jjêÐC™™Û[ÜEµ(Vž¿5ó•åþ2ýdêBÁôôtUUNGÇ5år‹j~žšÉê‘óSý¹Ì]öÆ'¿±ÿ»ýøSqò…¤xJ1øà ù|’<œ$iÂêÄ V‡ÉÙ@L:i¬7Œ€hqMVEnNÏоNàøL¾‚£ æ mdZ8#I Q¯“Á}ÃÜá_¡í¦ˆŸý! zZ®Ažfs*/K]fa†áMh:ˆãD—ACŒELõ7âYÒmNbÚæeZEA<ýEö¸RxŽ.ã¬Û᪙¬q-ËQz½žb¹nàÒ+Òò÷Ëê3Õp8ܱcǘ¡>]e¯Ìê®Ó~çá3ÈCÚ¯%jŠ¡l+47ƒ Ȭ*«²(­Ó¹mÛ¶v»=n¨¸%"¢r®H#4G+#jÃØÔf¾¶5‚?ªëG~A>uþÔºuëÎ:ë¬g>ó™·Ür˵×^;??ï¾â†ßÆ—ÇÚ™§5¢5¥×·èyã- Ð~ö¨¡l^†¨t´TMnƒé8J= õ±µK5è;I’Á`°oß><°Ã0Œo«Û*w¦s©s•sw¹úBÝÚ{I’¬]»6I’~¿¯NŒišâ¸C§,’Õ#ç§ýs¦;ó’­—¼¤ó’Á÷7ˆ¶DÍ_m–½Ò97,‡N4\תã ÚØP tâ:Œ:l[»\–/I–Šaôµk‚˜ º#ª¿b«Ð´m<Çu6!q°V«YΨR(v³Fc£ÀR“ÅÖ4ú˜v b‚:è =ÞV 0Ú/؆&¿Î9È…8€*«1S9Tç‘)"W˶g¦Ê|“„à^·Hj(ò$Wc8¯‹Znò𔿋Q)Q#®âd[Òi?|Rع¯c´±âÈ¢ÜPUì ŠrÜH°°Z°F^¢‡7"]ªoM Ç®¿­Þ½²ŸF£{î¹gÛ¶mvdv?Ú­ÿq=˲4M=âµgF§*±Üøub” Z”AØa¨(í’éFÔjµ£>ú…/|ái§V«Õî¸ãŽ^¯”Aæ2¥¢hßÈ>gOZëåa¬)GŠ„jïj^9žap7i?ˆl¶¢è¶[Ó4U<“»Ó^¯‡g«i0fY6ø¯Á’Ãl¼Ô˜46Rd{§è`²yâÕ#g~e£vE-ùçu¿Ð…a´dUé&ÝeÐÔ)=xœ8¢{JÕ{fÙ2‘Ñè/xÚø©ÇµPår‰¶˜Ù´ØMÇ^ 9àð˜p!ü.!J 6‘gS¦6̪¥my*79—ª0¬>Ûªª‚÷ƒÍƒ…,|ç;ßÙ¼yóÜÜœ €öÞÚkžÝ4)<{£fÔÿËþx…(.)=ûÄn·kšð€ îk~Ãj7Ii%¸+”ÚsTnBý~ßþ›í†Z•m ªFÍ)I’4Á`@!HÎDé¯óÈËÅãWœøÑÄDyMJ\f£Z1Õ#ÿxÌ>„• nkmXånÑí\ÞèÓÏ×1CŽIÛ why¤é¼A.Úc†âÀciz”$‹\vÁl?Î (¨èü6aQû̆à!ha"MS”% fñüâ0XÔ,ÒMJ,#ŽÌ¥“j‡Œ>4Ïh‡æ“25È£µ’SqÎx´x±è’PQ"‚¾BQ¹/,¼ã#³ñ¬ØÔ.…®¸òæµ£‡A_iµËkå†rtô(N⤟¸»²,Ã$T—R¤Í9oðÏ>pà€ð&æjÅ] ‘¸—*qíMeÁ{ Ã0ýXÚ¾º}"›»j.˲ꗪá [—µ\0†¬—û÷˳ʩO‡sð‰Aô`Ôx{CYp̉ù…YS#ÚºÕ Fé0Úßb;Hë9à ƒ 6ÌÍÍñ–Ï®ª=ºDöEÝn—} {lM»¤Š!¯9+\âh¹FäuØt¢ÐÃÖTØc‹:qFÑ)qà5¦T%ÉÖ¢Úæˆj6›¶”{½ž]†ñ’aÐazMÝó Pjƒ6¨ì®™l5K!æŸtf]/;®ìã4²‹ÑØD5æ®JkÚfÐm§¬ÍfÓ¨ÚÑç4Í â8d$ã³ÙÌoÐZbpÙ9Ÿxƒ*ß Lv%U±<¬³eí@&H€é8¿U„TyM”æ¤ θ}.~(¶YT“öQ¡¼F£¡Ý,mhåy¾k×.[Øp•Ù¨Šæzâª"‘›œ–ÇW©^¯ß*’o'ý?ì÷ßÒ¯\U¿º¾æWÖTƒj˜ á¤äy^þA<Ô^Q‹Â(Ïó ÒÛÒꬪûŽnüîöÒAЍ[ 2¶3ÕÌpGfm`Hçah3|ÈËbðªv¥vôz=» –¸¡´Zé'qðx&ëËç“Vœ8uH? Àâ@¶‹ômQeCÞUK ‘D"jÏLèVÍ%5xQX(iØ-:SA„AöDè–q”QìH¡gû«F£¡s'žîŽI³˜%ìcõP¡ Fpa¾Á4:u@Ú‚ôd ÁK¦P€ÍŒ§ƒ^¼½pìŸX¬Ä1]NšùÌœªÈ&7¨(7«@i&erjž)2 Ok‡rA«F]ºö$•ǯ 4í;På])$öÌíŒäEè‰Käò<,ì€WÝXûX* Q~¥ù‡¨ùQÛ_é5§IÝG“ÿL&Ó©ÑhÝ(¸#ˆ‹8/ǃ2qWûª2(£'DÑž¾Œª±JÉ~€V`Ñ_·ÏŸ‚É’×qÛ0`iѲU±{÷nm³ÑgµAýH9îXã(!BYvzêP⬒¤WX[žQR[5TKŸ-MF£tLÍôÝä £'BCJ¢Löɸ¶ðáv%­èh ª9°cɵmxŽÂ|”Gv`„ˆ’Îb0—Nù¨°Îax zdf¨ö8_Õú®,h˜‡Ìðx96¼6šðŠTxG»ýØi¤ÆÕDRKi5sU†ª«=°.3xeÚSÑ‘R»` ²8û:‘åÇÜA¡T¥ÆjªËª£øƒQÂ൯µ¡%¶)¿tøIß·¨ì…jzÞN”x”ÁL§šœ…vLÚ3©×ë½ã{ÕaUýÖz^äõz}ýúõÃá°ÓéDÛ¢¼—§ñî˜BÝ6jGèÔ©ªÀy³Ü+„^ º¢JU¾‰snnnNZ:ФÓÄ*ø«H%)+ÇV2ä=,'ÔÅqõÈY±S&’-,K܈þž1"íOK„­ ~©:¢[ÀÁÊÜ%ëW¨Âr&º ßÕüE´4~i5æd¦Í+À o¢Ètp ÖÉÔK-•wàͬhÙ¤3tüC¯á°¤¢"}ÖÓEÁF楚ͦ…f½;¨0 ¢ÙÅÃ*Ö6Å%¾{F–èTjÔ`b k=ɼÅãI|eà; L‚þŠŠõYŠmwÁ7úª3" óêa¬Å«:x\ ‚8FÙ°çšmש] &V)o““ŒÒJUÔ(v,Ó§­… Z~x 1{¡£rdÿÑjµ6mÚ´oß>óóUQNEÇŒÿIûŸÛ®rι֫[ÅL¡ %ëPiÍ^Ίæ:ÛV±M­590¸®‡E˜f³©ÁJÝÿ´sC:å][¼¥ÕQЕ?oò<Ž Ü‘îàGŽGäÞ•D»£bGá±™œPE}Ž|£möPÐz'Ög‘Ó „·}Τ£Ý: ž£¬‡±Çâ"5Àª%âÐl°›µ|ß6–e'œpÂÔÔÔÎ;ûý¾Uýê嬢ÚÜ8i@ü%µ @ùe_‹<®ñ+‹G¶3¹#,a£Êã‘JUÒj,TµÝX÷KÉWvïžn yº­ {°½Uš“CK³Q8‡ y<Ä º 0œRˆ`¢$¤Ã[6ú‡þ 傉Köû} /ÂÙúxz±[©^ËpŽmšÇMª[Úwé ³Òøä*éCE»á²ÛcaTS3qO˜Ž4‡NPìjØÙ|Œ‚j]å¸~¿÷Ýw[›pTAQëÕHÑ7ÊÉFï ŽL¿d:‚ÊU W,DF4Ї ¶¿)òy¨†zÄ=YÏœÊ+#Ë1d ¹:¬Œ«@0WŠrpW[ ™ö¦8×qeUÌyõÈY¡ŸŸsùkr·Ö¥ÏI[­V–e½wö†aøå°þ㺛TÇO¯<²¸cò…jzá&çÕu&Ɖl½ ö …ÒŠáûWDIªÔQò‚wÊêõ(HÝhO 5ØïÜÿý›6m:餓úýþ<ÐívõÉp*óànylÑåÝc횀Pú»IidK•ÑË^"riÎk›ßˆÝölɸÁ%t“zJ|qRj²·Zx¿F5«e:º—§mJ;Ò„6?Tø@S´£’*úêAŸ´Rr-ŒloÓB6D ¯G øc…Žæ[J¨ciéCího_çLõ ³ã²á³‡Î9wÀÅWÆú·*æ=æ4ÞgÏÍòóòô«)<õ¢(Â3Ã`]7†»rUþ^™|+i}·e(\»ÝN^𝠆¯&ÿ'ÃÉÒU ›A=EþC‡xdZêÕ«ÝAND¯• £•4׉ œ–ªäbƒ?ÓûgûÀ ‚ |~Þ6ÞÒ Å®ÿU½~m½øåB'ÕÕMV`SϋӢì<Ð.qGçuHµQD·É5ÚSìH'üQ䥵®!˜ 0`MMÛt“_Ãív»Û·oä‘G¦§§=ôPº/´4Çnµ׬qÁž’FsÚªFïñT]Mÿƒ&*€¡UQúÍÏ›×gÇŒò9eujÇš±nrâÕvµN³*žËËR–ïèãhTU+$WUØØ»Õ}PªÕ¤­fWé¹IÝn;©B´ðõLÄÑ·E=–#p8š/ˆ¯æ‘ºÉñOð:”{4X›D÷ÝìµYU«²0+Ž)— ògæ<=ºhI’ÇqíÆZ¾)ソG/6û‹lôüQð€òŒìĬ ªúÖú1Çóò—¿ü¼óÎ;ꨣêõz¼%®’ª<±ô tð‹,AÍñÜ2ÏuJLeè[Sj¥MÞð^€ëÙþªÌ&BfHjþ*°¶ò?å)eðà ùJR–åÆm’ ÏóäŽ$;=”æyîš.?1Ï~5 „Å=Ki\£Ñ¨×ë­Vk4ÍÎΆ? £/DÙáYïúÞ T®j|¨‘oËã{ãÒ•èÃÚýæÇäa®_û‹¿ù‹¯|å+;Nš¦W^yew_·l”îhWm­´ÚÐeÉYb+„ÀC’ݤI ˜$ûÁo=]x­¬jo*ƒ~’"ɚĬÎå¬t/gªªjUp ØpĆ‹.º(‚+®¸bÇŽùÁ<,ÃbÝ’Ö="T¶¤4 O$ÂÚ‚3J>\xÈÄÄ ú¢d `ÊãŒûXWYô>Ô:¾¿Vn+k÷×,Ò1D 4S-hèjRj¨PŠ[ô©µÐfEÚ¸¹E2Ûö·¦¿À¯¹Is6¢Ì» NF«Sýu,8âæ‰·ÄYoÈ  :å°ÜYÇ9×l6Éý¹<ëi9‚¥:Sx»×^+AGE»ô·=ËTç\yt9xÿ X¦_4íœ êAûúvp]PÿX=˜_¢`ØKa|–§<k8M°‡©€(¯ôû}æ”iÃ耤g{\  IDATÁ¢2”êAgOŒA"ò¡Oɳ@Ì0²áÒЮ(ŒœsÃÇ՚*¹#©u땎Fámað¼ |RÜ=±Þ0°ÅÜßÕ/ï-[ÏoU®ªª* £2+£di¦¸Ûš7N Ó¬Þ‹•.¨uÇQ‚†Î™ÙÒ‚¹Ç›”TÉè¦ü ó²%= 'Î5Näâuj)ÀÇ€KÛc±fëûî»ïÎóüÀê(Ì^"Äâ)Ø­ÛLS{ÛZÚRvˆÕ'‚êä*{U¬ Òç¦vNôþ¬çÎrå7ËòÖR©t¾4=1( 'E‚ßÌA1ŒsˆÖ±ÊRQ¡+ÚMN³[Œ¶@OE“eÝ6–rê€ ·@|ät¤:!õ# ЪatIñ7xÔŽF:E§çfæqXɸzBJœEŠM=+¹ÁÁ[ñâxKœ¤Éh4*:Eóìf~Q^½¤ ¿ê'sT³õ2œXzÔ&õ/P| „ÍS€åŒ÷ÌåʤfE¨c¿€ÌV@+™˜¾ ’ úkö Cûãˆù–*ýÛ4ÓN8áÔSOݳgÏæÍ›G£Qí#µþ÷úÍo6õ  ´Š‡{ü‚¦¥uqçæù/äók篼òÊ™™™N§sóÍ7·ÛíáÆa9*ë×]àB†VœJgn´[ Sh¹;¤f4–&RÅ·8äˆ8€ ‰Î*ñ]ðÜ´4Y’VzváîsÉÃIœŒ«a›3nˆ² ²úãêåCÚ©È18Ñ]õÄÑÄdÎí ó£øXû·èÃ/sëÑõ!†’ù¢¤â9ÎÙ1ày`š`NV°]u˜Ü>ÍÚTöWœg4f(ë )1jƒ<¶RË É1Y<ØäEQ”EYÅã÷¸óÏ??Ïó={ö,,,8ç¢0†Q¹ä&gÌcC«t>‰…ŠJíÉîp¶‡IUgþ¿L|Ô×Åpˆãy8Ú?A°ð^ð[vU——鳘°Žß¾3_Þ|óÍwÞyçüü|·Û­Õjƒ Ò7¥ZZ)S™KcÉF¸ôÀÓrp4E{¢æ5ËCËÞw{öQÓLG£,Ë W¨´Z­Vþò0J¢ÚY5ÂBó·›Õ)UïS½Ú…5æ¿¡ê,— œ/$–{”E­‘€²Àb7bðÒ·(ÚŸk[=rV†$†aò¾¤þÑzï=W¹(Šš5ãq–gÒ$Ñ2z˜® % WÒàQ]q'Ú_¤Ì¤?ãä® ~{ì±§Ÿ~º±“ƒ ¨ÂÊ#G±R=+½xÐçÁ``W¨ê¢^³ÉgûÀ¹¹9÷,Ërnnn4u»]„p8§ÕñÐóhp¢³@(WQMT=˜5Ò)éxð aú (je:2Pª›¢³Üÿ/•=¥k…> b-U.Ï®‡ÖŽ|¡±ª{’µÔe•³SÇÔTÛ¾ÿO_mŽó_Ë{ÎqåíåÖ­[­£PUUöÜ,ÞG3QVfÐÞÈåy”h”_VÊX×Ì—²¡Üâ,º½ #e¨¢3jÖÇòìq`#~jKšêŠáVªX%dëp˜R@‡Uñ(‚úeõðµavF–½*+ËÒu]´%Š¿Ç{b>ŠRÔøP_ÃåÖsd FtÔ¬\uOtK…òô!L]2µí’måyetaTUÐ ºWuãëãè˘ }ÚÝöá*Af˜Ø–nx£ŽqðßZD*‡PUç Ð*„ªÆátïPêDV[ñ^×ÝMÚÀ”eY¿¢­‰òyY–y;Ov%”e`z:©þ¿U!ÆæÜ¤oºº xpÆ ¢ž"ÏyÎs6nÜxíµ×¶Ûm­¥ÔÇ][/š ©k"à(Uk.K·¢ÛP9«œ¦À­€¢É~õÈY¡XìÑÑ„ ˰® É©¨¯°ªîëRÓH¤…­jCÂA}|&ýC0¸x]Åo;®†áèÍ£`oм¸Y¸Âû@‹20qÈ·Ø/ ¿Çúà*>©g-qP-ûœh%x9Š',=Öµªôî`͋׌Ãt²„Ú[œ‚7ˆ2‚y7ê?¾‘‘ I„µþ[Ž[zš9!ÂDÀ¥êÂáBe•±°—®(<ºÉÙ^j2þ‰–ïÚc³ø«$IMÿéš(æ ‹/-/W}ÜuE‰\íp8¬î¯Â„ÃWÝenûöí¨•ǔũEü©8J"íÚrm¶„˜ Òf°½ñÑhÔétЪ1 Qü)(á€ÇXƒaK åDÏÞ+ÙWœ Àê´ ‹€d 6§6ÀUÂÏ-ŽOz ?¸¹²«µ‘óØ£NŽ{§YY¿¸¾ä˜,m Å”âåá~eYf¿›µþ°uä‘GžwÞyO{ÚÓî¸ãޝ}ík³³³égÒîõÝæ¿4¹;,Qîƒçkâµë÷ôlàRkBƒõì.W”°§"…Ž¡M màNp^›„¢®£ ÀG§ê@áy†¬û˜‡gö–†9v„pÐÖ´µlठ¥hvìõÀYŸv³žkY»}o¿çÞ¤h”*­ XdàÆ”kL§Ú£Rß)eQ+Ÿÿ¶Ò!3¶?XÍÊȽתó nÒMœ¤ŠË£&«Ý^ËOÉŸÄo'‚ƒ7ªUúÅ´rKi y3LNüˆÕ#Yùùy]-‹©Ë8±Åöy³¾Yšžãê\ÎJæˆÍ‘†~UÙr2?ì?¼ŒLMnRZXi”9cäW £Jeñdµo¯9µÊœ¨›“t)¦¦¦N;ñ´_ú¥_zâŸøøÇ?~ëÖ­·Þzk–e½ §Ñ“¥W/Õât¢`OÁ0 )Ýx·LFg-5'EÃÍMÎujó“ ì!œUýVUP †o_8tÎ%ÿ–Ô?]F¾¹€Î¨È&©Î²hëv8ÜY³k£ Æ?´Ö~_­!àP‰3ìjèp*ŽI‰ v‡½©Å£åÔÊ!E°³œ@Ïy![çùWv¨×p´ÓŒ!-`¢f¹Wô«•²Öµ^u¨ÄÊ;µD3ÁÔB‹Ó:ψãÿj_ÅyÇÉÇN~*Œþu¡ªW®rч£æ•Íj[Ô&Hê¸KÄq|ðàA¦Aµdä8‡kàUWTlL/è–g®™òr)vÐj•³ÂŒµ¥¹ôÐCyž÷ŸÐ¯¶TÝnׂü%J –)áÒæ=•xÃ/«bÝè&ÝÀ Em‰b*«¥2ëmÂIùF Õ롪ª*Š£á/{¿Õk\Úh¾§éœË~9ëü[§õÉVüí±b&Ê»*FÀ)NO^yzÜȸO6‚œhÊ¨B £tpn®×ëö¥nåvódpy0ìWmд»i&sƒybè@DÖ’±5¨dýJðe¨ (H$mtY”z·Ê‰=³ ,ñ i¼û@ƒ­?'ÚTº¯¡°T˜ôBRU°_ÕLš¨g‚j5uÞÔ[M8|Ûm©z½>==mÛ:( ožxB¦8žŠ"½kþÜ0j¤m ;Ï€œSjµÊYù¹fø-MCÜ…$A_;È/´WL¨æTlKåíè'[e£D&Éé¦2²cñȉã¬VK$SZ–Ù­ÕßYï}¯wßKïûâ¿xÄGìÚµk÷îÝyžþzPM='¬Õt7aìx„ÛÉd²:ÃíU…§ ®êÙÉ7zMl: :Ó€¨ Í|:ÀnZ¥+{¿×k<¯AM–~3 ¾tЭ¾Q)Ȧ¯@/Ue6d¯”Ëâä5öu쟨§ Ná¦Ñ¢GŽ>uŠóf“µì&o`y°Â•t΋³ó@¹ܸ‡«8)!WP=q©¬2À@ Édð[û+sõâuîDZB)lj±,$1äËTbGE ùv]?œêá«´Fu¬ç]xSnÚr³ßo·Û¦Ó¡’Z·Ñ›QtT bh~š¦öð^ïÀ~l¬=€5E‡—óæ®=LV{ JOÒ Ãó `k©Œ¹š°©Š"k ¬_zˆt:¦:Ç:‚ÊÆ¨º~àcî¼úÎßݹ°°ŸžÞ0J¾D£È…KšÖZ18ñ–ב{«fVFÅEè 9ëô(‚ðßè‚>ê‘£fVc“.1¢W H±ZÅdoÏÒ¥ëô’ttñ¨þѺݤĤgõ­BÑË%´É'<ð“_¦£KßKa%u`1 |§„Î!b±×”BÖ̤!Ý¤ß ñ—EÈÔ¡¢‹nQ¯…Ⱦ%MSKVö¹z·Së„9±f ýâfuué‚Ñ9\Þ5©˜6:8¬ä}hPüUU{¸xKqø_V¯Q]4óÓI#mpÒ<ÓÁ 01ä9œiJÇV¦6wjò%ÝQ­¹åƒjd°z䬨y£Æ…LNX°S¯wbTÍìTQŠh‰êLMÈõÌ#'R/g­ìFdÿ•5§Zžƒ ¿·ý_é·ÿ´]EíŽZëÿ¶ÊûËÄ%ÃjH¸ácQíóJÓ¸ªU£j”„I­¬ñ·¶è5ÜëTš éb¬Ù àÉøHSzÑŒËèÌ„§A cÌ`êIÁàEƒÚ{kAlܸñ„NØ·oߎ;Š¢H®K†o—LšTS"vkê¾¥jlÚê×ÃUeèÍ}““R4«5FÅ;ªüFÈ9gÜYîÚèmyž§iš$ɺuëN>ùämÛ¶íÙ³`Så…Àx¹6U€|a5 j˜:2bGšÎTzBpœR–Ì)}€(ÞEF‚Ú4Ä}¶¥Ål–rFTI–Ò„“I“ ­õÔ„âaU.˜Œm³ÑHcJ©+:@&¡µ¬e $y\’ý­Á°VU‡IÛuNLUHS<éÇÂ(¨›4{&=· ì¹ÃÒ¨Ð.¥=|$O(Œ8eÓÚNÆ×u« ®h;V' a»Y\0Ö¤O »†ì#b ÇqX†Õ½Uðá úhÔëõ 9,ó²Ÿ÷Ý¢È?Šg 6cÍÊçºáiÃì¥YUUÙÙûœ+·–ÍN3MÓвöj‚&D2 ‡¼Éf)”ƪ½Í×¼o!qS•IMô¬ÕqÄGœ{î¹›7o¾ï¾ûÆCy•ó´™ 1ЏjŸŒ~¾öóP,ÕBéIL{hVAJŒÃžrjjÊÎ-¼¼4™d‚Cía·è`m˲Ûíò0±žc¡.ض¯6!Wg¹V©e*ô _ i¯8Z£†¢öÌANäè ñiZÒÒ Æ•“ôoySYzñ,{ïé•=È)«Ú.äªõ cšç)=O1[˜uãlP2ˆæ:Ú†ÑÚEuÀ$•Qâ„{Âhêp£p%nßÌèØW€Úi‰©²N@Aôq¾)í%{j–Ÿ™—ÛËú§êIApøÓïoìÿû› Ý…«GÎ T9Г–3:4X+ Šˆ%&Ú„P +϶Keõ,ŸeÁQñ½Ànšø¨š‹ «gPÿ¨¼)®MG5ÝP’ÂøÃÿ|4õñ©8ˆË¸4°Î`ëÖ[wj¯­)]ÇâŽ!{p‹“$ Ò`þ­ó£Ÿ­¹x=“¹OÍE;£Ö»ZÁhÂÒ[ ZªêDÊЉ—2”ˆÅÊ ùÑfï{½úÇëÁ•«Ê_,¿7Hß™ºe†.„TÏôÁû|å“X(.¯£…ôÃíÕSÄ0i« lCoh XǤ•£ÂÓâ š®F¿6¼vàœ‹6GÍ5«nUå~ÉXª(¿Nu`•‹¹};ëGe4µ%£"§^ì󶝨cU)Wby'þ§gyG©jžªóUË~HŒ´è÷D€€L‘dåókpÜ=N¥®yÖ‡3V·úØ’©‰ `%¦¥‰mtÂÚ‰…•J§çe>:z”´“äëI­Vk4ÃáðEîEÓnúwÉo¹ßª¹Úê‘óÓþ1 (ÝR*ÛÒV?¯œ‰ ÛW¸µ«Çš:!z›3Ãn4d/géhU{›¤iÚ1R¶(è3Gâ|µ8ÓüÎŽ±ñÉtDÞyQ«Õ¦¦¦;ì°ÙÙÙùùù葨:bBqÙlHHÃÉ|³,\8¨ßQo½»Eö}èk¾`Øs¿ñÁ†eÙ°ìTÆ«½@ü”2¤T=Vm”uzzºøNÑüVsô§£ìЬªªä›IëœV’$.q`enQJÄäF°Œ$–©ðÔ EP=g{{ÎøÓÀÖñ{.mh‘F‘v&,ÌÙµ¡[¡-qø²aæÏÏGo¥W¤k_¶6˲ÁS/t¢/EÁ烰UvÌM t2áäDŸÛ-·£ F³ÝR ",ìüápxÊêY#³fkhzÉM€ßåP6‰šâÁ¸Š °yœÈ)ê<“é<>f‹-Yê0•Î%ˆ`¢Ηz†=¶¸ë_¬^?hÞÞ ªÀŒ«ÇòV¿5J>›,C“snÁ%× IDATE ^EQÇA+H·¥­éÖI'tØa‡Ý}÷Ý333î^”Aqb‘îNÉà4²«1¶ªÿòîtn‘ÚN»;Trúl•¿ í x_NDÆhwiY@çÕUPä …vGªSg‘×â5¿\†æ Ör£ØÕáP}àœ7ÙŸfSŸš:üðßö´§{î¹ívûk_ûÚÖ­[—6†“·' ™C¢Ô›Ò×µ§^d$¬['‚¶ÔéÕ‰-›:µÓ±HÓ4‚ÞT¯ÿ¡~tOßW®ÊŸ˜gÿ˜¥JË»JíD¢ëã–éÆªJž€ž€]rËV¶ZÑ7ÒV‡s•‚¬-}tá1 €Š8›%Ë`’Œ·­CQeûø¥ òx§ŽýG¿ß¿çž{æçç·nݪ@Èꑳ2ÜhMc•B¦]*tš~T?J3&¥mfÃ'®iš©bÚãu"ËÈ¢Q;Š˜Ë\˜Uúû@6Œ¦E&Ή¢Yªý¤¯ñœùƒÁµ µ¢Sd,Žãa1¬ÖTå©eò·‰'¯ÉII" ìÌÊjÜÊ:ýôÓ?þø¹¹¹™™™²,˪ŒÃØc7ØX\VëFõβ8Ε«è5‚(Šúýþ®]»¬¤CÓƒÎßÁsS†4Öp6jíØwÄq/vÙ†¥ØßÚ)Òh4Œ nÕT Z€Zµsö ¨þØMÍ?wþ¿:äŒ3Îxík_{ú駃v»Ýn·g~<³÷}{ ¸#E€p¯ðôte¦0ÈBï|̉Aw W˜ }K:‘ìl6›'tR’$ßÿ³ï7ÞÚ„ÅlaY/“«’ÁûÍßmƒ@âìŸ+%`ͽ¨£ ”qE\Ùh¥«p8ä îìæ¬Ù€ðEíݱ,A<5’ΈK:ƒ¬<=7©A§3:ܵž@v÷»èúhôë£Îç;×\s¡)Ãáp›Ûv‹»åƒîƒ«GÎ T9^Z¡…*/Õ‚ºñú;¬T‹’¨çzv)j©«Þ-¾åv¶)‹ ˵”û ŠUU¥¿˜Î}c.º;Н«¸ªŽ¨ú¯ê×.«…w….pÈ g¨ª*˜ \æŠÃŠlYQ?333 ÊCÊ ê uBñÓ¤/Ký‰i3xc’ôxÑu&ë´Ã˜æš ¥ij¾2z–XÛ\I«J~ÅßW•²œL’„Èòÿ±÷arUW¶ç†º·êVì¤Ð(!!#&$’%“dÀ<6Ƙgc26ƒÇó†Ái° N'li1A¤2"ÓB åî–:V®ºuÃû±»W/Ýæ½÷o4ö×Í÷é­îª[÷žsöÞk¯½–àcŽãàþ—Ëe&݉®hë2%-ey”b:)× rÆ$‡î¡ãEäg\וE"?Êmˆß¡iÒY/Kn5×ÖÒyqўĬV«²!J‹Ô 4€…!ªÉr¹~"T*X*H&“‰D"ŸÏû›|}³ÞøDÃzÍÂH5ÑýâêŠ#Áhí] ‡°#:̇ŒÌðò“þ Vx7Š|YãN`Cæ:òÉÃ:ô,® º®0¢M§Hà•YEu# ‘†Ò6iá¡¡:A•^(©’ ‚àuÿõVÕ:MM˪ìXÈùïþ‚fW¸±X¬©©)±˜DÅÃãWŒÀDöX$ qÛ@~³ˆ%© †›·X‘ÜêúÇçl§X,–L&ëõºdm˜T—VˆðUpÌàa„\$ÛÌ9Ý  ÝS]/ôÌfúŒ4æÉA÷„“ƒ!Õá4wëéyO{¨çêsë†eØoÚžáE˜B¬w±‚†K©"…+Þ´eIDD}lr€¤mƒo‚ÛH$ø“BjÍ<ü+Ý ÖŒÅb‰D"'“Iy  u¬Ãè>S t€vˆtÎ'Nœ8mÚ´µk×vuu172‚ø_ã} û:èxüñÇóùü¶mÛž|òÉ;w–O)£3%³Á¿#F£ð,ÀˆØÿ`Ùp5†â˜gäÀ•lIþµZ­nܸ±øÃb켘aétúðß>}úŠ+Ö¯_¯]¯•_([ÇZ£½3F+$1ˆ‡ŽI`!Ë5C€FÄŽ|d¿ »bÅ$I ~ Ñˆ1µˆ“ªôüqñ¸9ˆ$ìN©ç"Î&¦i¯ZRóxÚÁC Ä“Þ8Xü-õ­1`makK€!X–µß~û•Ë厎¬­Þ!á­«Å2ZT_%}q@B»tĆ’isƒìq¤ßËÒ;ŠÄ‘ÞB-JdöùS?"£²š¦‰xÂ÷}í’1µ=úÅú¬hlô÷÷3%Œ Èž„tÄþ¸Š†#fS`:ñXt8˜Ì .Rjnzs…qýxøûè9$nºðŒ“;#4khâ"0ƒÃ†]hkA½Xðw­W³¬–Å- ï)¥4sD5Y¤D"Q*•äšÿ°ÕÇ6fyAS¨ •3)žÜ=ài6p|Ëå±cNdù3‘HÍÅM,«ÕjŽã$‰d2™ÍfÓé´ã8Ùl¶¹¹¹¹¹Ùqœ\.—ÉdLÓL¥Rº®÷÷÷çóyß÷Wª•e³¼eÿ-žç5ª)™댥ºRf*”ÅV*•dn#N×ëumDdzZ­¦>JY'ZÕ³ª;º3íU-¹09tæê«:Eh÷ì—ÌÕ<0dNÔ4­P( RÁ©-ûÏ‹×*Wùr«ÙÁV)åœç”_('&wîÜùàƒÊö}¿öh-}N:Ж3`ú(,Ãe#"UÀM)¹ihñ¦à2Z^ˆÏÓà5ÙñHò$TB‚€•Ëe øšGT” +®¶ áCŒUbAò7ºA5rö}Õ7'nØH²š¹@Á È*ëho²Mª]H ²x³€ÍÁ.<¯ >±[;ŽEœ¤×ógŠ+ƒ€;2‹3ÊlƒƒÌ Xï0œÎOÁŽå¦t?ô<¯½½=•J­]»¶¯¯'-¾E$gt]O&“ràÆãñÉ“'g³ÙÁÁÁ9 ¡ª€é¨Ñª!kš–N§ƒ xÚ|º”,íÝ»÷¢çõööîØ¹ãå^öð›ßiÎuæúûû1(’( •éº.‰,ËäÃIý?‡à2ÝÔÙñ…éżnyñGö'X ` íÁ°QgDÄ ˜mˆ’ 5Sæcfý›õø«ñÆê†ëºþ~~ãä†ñŠ¡54ðÐE‘Äö Iˆà-ð" —ñ ú‘¼fX¤‡y@ QG•#rÀ¬ßÌÕ#Ò?+V°þB&“I§ÓÝÝÝ…B!‚ÐDü2˜ëÏttzÆ”¤÷0ª}ÀÔ´"Kfñ"ß·,K¼;¢b,b\ãƒ:Ì­ÀµBÂí²‚,c¸ÌèÇò…K G×up`{+\-6!º<ûÍ|þP`| I¡µ"½QqÂ.‹lÞAÉ PbÆäÉ“g̘ÑÝÝÝÛÛ+88ðø‘)®×u=NO:UNÃÞÞÞ7ÞxCCERoSA’.…nÆhp$xÁ‘šH$04.HšpÉâñxKK‹4rÆ7~üøx<>qâÄL&Eä ñx\)µ"½âüòù3Ì;fíèìì´,Ë|Ö|똷âGÄǽ4®\.c=àÀm4ŽãH£†õ)LÓÑhÏ ØàèäÒY!x†Š¤û™JŽK“àXˆœŒçIMXsGý?©b%BÁmýÒò÷kÇÕj—Õ|Ï×·êÆ+†þªîUGš@ÔR{1«˜Åª#ºÐäfZ)¸H>A½Ã ‚‚’X7>,`ºÈ|·N_~P²ŒÄCy?Øwß}çλ|ùòR©ÄdkfN#ÿ“‘U®ybúï—úG I3“‹&’È01 67ĦņT»û}E¢xα$²%$Mƒ%-" ¬™¸ A¦Æ„.ñõ‘óB~ R]ì»…7í’5r`ûÈ¡‹E;Ôîø‰£ø˜P•@†sõêÕ6lèééáY >J’0[›TW®ëf³Ùb±¨† z!Š¡Ÿˆ”QDf›I« mIPGn”P‰„ã8étZŠ›D"‹ÅÆßÚÚšË夬‘?QÝÊy(þÐoÎþáþ¦cî½÷Þ’Éær¹ ]=úQ'ã€'„7 3Á”W=Œ¼D´0˜c†f!j&“ lô$# ‹±Ôh‘„Ü?6P¤ûÉÎ@(ñQyøE?|$TϪXsL÷uUQªO)]…ZÈç>úXÏh« å.ï9;yRÈ– 8Ë‚4À-x’šûðØæìÓÃÓu(_XJ† ¬èÁÊoû‚ÈY™¡Cª×ër:ô÷÷«aWæçÀAD‘œZ¡P¾:&ÝƉdlÝíº®œŒµZmݺuPúb¦õhkHùø²áK¥Òh¾„Ѥ€ãIZ5‰D"•JIÛ@hiét:“É´¶¶:Ž“Éd¤Þjii²€ü ":Ë4”µr,ŒÅ˜¦kòâºZúZÌ´™È$¬´U¯×%†ù¾/®|FHNH×Á‰‰ð§a) ]×mjjš7o^ooïš5käe!axI4ÒLf[ÈÜrj@QAÒÃŽC‡rIŠ®éJ)ÝÜMMæ^#Z lýÎë€4ö$`ó´”cÔîNç’Žðû¢æÀÏ€4ÁTOQ”€Ë`L€™ì&X=´Ž˜¼Ã–ø€Atuuõôô cÊiá•ï EŒl…œ=¬EJ öX(Á?†aÉž¤à@¥‚ÄW?§Ïàt1ˆ |Œg𬣃0†q¬ÔÈ4+ŠwR˜ì´hÄl2ÆY*2JfxÃ3”m§™•Ä@÷„ ¹È”6X…Fø»ršššlÛîêêBݦhXU&À©“®ŒÅ˜ !{Rž‹Ð¡‡)fûH@E£¦¦¦L&3aÂ)Â0”H#×/åN2™”ÓÙÒ¹´e©a­Aëî÷ nœp8|dÜ#[3[ëõzgSçi“Ok 4Êå²4«¬+•Jýýý…BA¡ˆ’¤R)ú±B¸ñÆ]:Lïvvv–J%4W$_‘ù| ™¡V@ç ‘Hb)¿Å>cÀ©Ø%(BDe šÊÌä5Ã- |œz½qLE²ÿjwS(lTuHDØY‘ÇÝqâƒ;†¢-"¨ƒWÂUfĶ\rvg’†Ú…”l)Ð,óô^]dŒïpLåm¬ÊÙóUNÄ섉4Rå 5'_tý„%ÓÝ÷ÄÆ‰–ãÇß¿g³¾yŠ?åë™ßÛ¿?©vÒ|cþ3ÍÏlt6Þwè}—ô\’Ïç …r—X,–Éd²Ù¬Õä3Öëu™õÑU9jåtS$n/E0n­VÛ°a—Éd°tK¢¡†g‡9¼P»ë³¡®e/(é±ËöÁB±ÂÅ7ò¹ˆÍ%xÞ˜6űxT”=ȶe" >®í"®W.fv O0+Œç–`y')+!ŠCqòKÌJ­ÃËåÐrCŽ[\@0‰ËE‘ ãW¬h‰9 dOhÿ€ôÅÉ Lç¨Ýu‘¹¼À”‹Øcà©¥®ën Ý#Ü`¿ ªªúZ½ñjÃZi©¢’Ü– &wIMÆúö6 ŽƒgŒx‰º­ÑhÈ”>Fj *zD»HþËs©hê þǧªÐd¦O’÷d2™Ëå’Éd{{ûĉ…%ÿ*¶%ÈWäÝãñøzk}Kز—¶—­†¤ lÝnWí3ý™kâkæxstMçöúÁëoÈÜð»ô»&±¦Cï¸/qߢú¢sÝsë±ú”Ø–¿¯³ï¶mÛº»»åL”CG n9Ô„À&TÏó*•ŠTo’1Z‹X"$Ô$ ¡áNŠ.XÙ-t¸¡¨HŒ™ç¦#ùVÄÕ›e>І”>,ш‡[D‹î øì`Ù0©lh€l¸Ñø‘ F‘•¢íÊûw†ÝÙ±,Y ìÜX#ñØ¢#$|XÖè_¤”U-LNyˆP ä¦õXÈÙc_8Ñмá?²b`½Åv÷Š4»y3@Ì‹‘b6Õˆt°yq;¹lLYÒt~9m1ÃõÁá?´Œ}à£5¾ÑÐ4ÍzÔ2Þ6<Ï ç…ÞbÏ=Ø5o21TiÕj••BÄô4W“(­p2JåÄEŠ3Îð€>ö3ÜE;&r»lÛZ³žÓétss³ð䤖&Š£òˆeæÆ4ͥɥ ­ñóäÏÃ0<Ñ;ñïyÓójç}&÷™³kgkÆü"]׿—ÿÞrgùÁÞÁïÇÞ· ëÏ¥?‡aè¾¥YŸ÷>ÿ×)½$¸D†ä²%4"·H§ÓP6ªV«¢W§Hš"ó—p‚ó鉆Rʱ+Ÿ­5Pd—Žùöœf:žÙ<È…%*5ˆ ŽãD²7ÀhjwuQ9pQ¾# òÝÁÒ5èhBH ÷Ÿû²R²Ã› °™Ér˜è‘VZcÓ|º­ŽƒŸ|+± 'Ö…œ=É @z΃c8Lùé";“ãOÓ^™ÏÈaIuÂK ˜&žpð@Æd†{µëîiJÓÔb÷Å K&8‰Pz%vÏToIù#S{¾ï75Ç$”¦|冼ØoÛ•+rÀ(ºm‘Æ pn±HR!¤2¯‰±lNŠÑiム ÀÒIXEÙ0¦¤¬‘¶¶¸ö¶´´´µµ%‰t:Írj˜•ëÐD"±2¶ò©ÄS_v¿¼¸Ëíå·$où}á÷15D¾87{® Ôùåó*%Gišš®oŒ¿´ÿRÛ¶¡²ƒD[$ÚÚÛÛK¥R±X”;‹ÅÒét†•JE.Ihr2$¹9f>ØáB®Y:ð¼J3 ¹3O;Ê“jjjn!æ0‚ƒ;>p$|40[ƒš‰ùÓXíÜÝÄü²\³¼>Ëá7’Vj¤*=BIÈ—ˆ÷Dð Îo˜¼ÊîÝ—^>C†—Ë帇É'ERÈùØ­‘ƒ‡Y€Q ô–––0 wìØ‚ë±³'ã R$œV˜Ó„ÿ Æ$ ¨M8ò4‹=ÇØø¶(XÜrnb AV'äÔ„´ªHWq¨&‹™Õ…ÕêwªæOLû÷¶®ëþ™~íåšy™é½í¡ÞH"¿‹²û0(C#“7­é‡¾tbb±X>ŸWJ9g9Õ‡«ö¶6äËrÐð´¿|(ÉK~hxD U²?fdDè:œ•#ƒ$ÏÞã #4À*¥šššhšã8" :ÇrÐì3g2A±¶Å¶-M.=Ý=}¦7ó¸úqšÒw¯¨Ê™™3Ï,žy{óí5U»£óÇvîqîùaû½ý×mA›aº¦'ÉÎJçÄp¢D†”NÜzoØ›5³±Xlܸq®ënݺÕó<áȰNss3['“ÉÁÁAQ—Ç-¶cl¢Œô6äÒ «àÖḗõ î"Œ04Mðî ²‘¼¬âˆ#¶oßÞÙÙéyžÊ©À 꿯«¸RJuÏìîVÝÔ„±³Çz9üwhhbº ‘† <è–óúˆPY_°-FÜ1¹ Ïs¨Hñ%a‚Å( ÃPå]îåNÌ Øk*ö«˜ùK³üb9qL‚e䙱ʄ"y_¹u—#)ÈFÞ0,£¥¥eÞ¼y•JeÕªU•JEõ«°i„ìÇÂø ñ ,÷¨Ç)R–C¥Zzijw+hÖ)Ø…ó‡…Ôy¬ô8C£U ¿N0å$êà˜“:F´„^AÌ1ø²Ú\=Û›ýõê×—ä–U;*­§SA*&íÐ~=ñú1•cάžÙê¶Úš}eíÊo¸ßXÒ¾déGKu]×<íâÚÅ·´Ür}×õµZ m†¾ZßûݹtçROy2dêû>à5&DHHnmmŠ6rdÈNãÔFуJ(2l«hHyôx™|§\.Ëg—D3ªxô¬7Êèö ©n¹÷‰b A [’ub"m{fôo4Ìy=d„<9ÇŒGVžÆfS€¹9ˆàº<Òã™v@©æe66Þ‹_¯¼òÊX=Y¹_uƒýçTGÕ•¦i·.¿õ/‡ÿåuÉ<5o,ä왯?1¢°™ï:`¬r~ñˆÕaõD8£8:q¤Ê_""çjØX+D2Ïó¼s<ã÷†äVÉdgµÔjœÓˆÝ»¢üaYcMÞ"2j‡kД¦B¥”Êd2‡~xOOOGGG½^÷|Oi#­W–¨.8øÌ¨FŸ1M™U#9P‰¶.|6xÊ/⸌b‘uµñ»ð V´Ìö À%ýùu‰72sƒÓxůœ_=3øŒ®ë_ª}é牟ÏUsO®ž¬iÚÞþÞoXoœìžüRú¥gãÏêº~|ùøÙÙÇ}:þô‚Á†a´Ym­NëÏZv|Çñ-^K†¯ïõúú¦õÛŒm7§nÖ”vAႦL“€~]]]˜"”XÇ20R&ÈFdâ\×4ý¸ òÂ7 IDATÃÂÒÀcAm¬T*qñ„QDÌ”@mE‘h&Ó—¹Ù†”  E&{ØZ‘P4«¢®âÙaèi‚Ĩ:µÐíŽÀP‘QS죈«4frYÇS‘bVÄ·[hØ2H›x|ô#ÓÓò)ººº†úX 0Æ¿Çm¹IÝ”R©ŸªŸþVýv,äì™F÷WYyP`(EJMðYÁé‰èËÀÊ"&:“÷ ´“ˆyûh‚Ydü>‚Ú™µÄ1 MÓ¦Nºÿþûoذá£> ÃÐzÄ*ß^¶° 2)3âzÂ"72>ÍÙâaåµvùßÊñoÅwîÜù裖ËåR©äyžûS×ú¶…O!1ù,v—üÆQqâ@†åQZ1¿–¥æy&h†ü¢<€'röE°8°¤¸‹ù2ù±ÂÌÂÛ_yÛ4ÌL9÷‰s…Ÿ&P›”>’+$“IFóÙ€õl÷ìb/¬Ñל“=GÓ´¬xºwyýò–°EùêÉä“?ÉüäŠÞ+h}`A~ïû“µÉ_¨}aUiÕ]ûß•åU¨¶5m+Y¥­ÿQ*•Ò4íû­ßŸXŸøÕ¾¯J°‘yF2—*9‡\$[›£ŽŒ ÏË &÷]"#÷07c°—Å÷d¸’+!™ó 8¼ÝØGôËÈ>OËß%m‡ªkÒ€†ÀÕsÄPºìÂv2`ˆAå- ÿ;ZÖŒÅÓPv;ÃÂ<ˆ‚‚îâl•-' \Ed>԰⛃ e†?ÞW‡ªø/âº9 ‹jßT5uŽšó˜zìTuêXÈùïÖ˜¾…AôÈ|8oE.zŽCÅæ#K’ƒCSdñÄJƬÍ,P7 àÝs¹Üg>ó™… ._¾¼«««R©°P#ûàj¡dŽ:uä'GhÇ«ôຠ>±ÃŽŽß÷ƒd ÓÕLe¿i‹¬q²Ãì {˜ÏÎã8šÂ´T’kÃpg¯,ùH|:ô“ÙG’§I03ÔÎiSoýË[™BfÁ ÚÚÚôfýöónŸ÷Ѽ3¶Ÿ‘Ëæ0— ØÆFc›»m“±éжC[‚]×UüÕ>}Ψœªp^Û¼õߪ~ë_ÒÿR° ÝzwY+ÿ8ÿãó'ÿÙÚg[[[…c6ÉŸtdáÈæõÍ¡>;ýÙcKÇžT:©%lIi©D"1`þëæë·7ß~ÖγDMšç(³dj•íä‘þ6Š?p£]aPgãQ5ì)ÅR{`]²F ?hÎÇ ÿËà0ìj8ãA";gÐâc¬)OƒŽ†8K@äæùb4_#‚I ˜]æŒó À1yLòF‰Dd<Ñ_À=1ZH§ø O(˃ƒŒx¬¿‡CÀÈn‹«mÑ2ÙÌ¢E‹Çyê©§t]O©T³jÞª¶ŽU9{ äÈêg{c ›…S§ˆ–»ŽË¯ÃÙí gI a‰£`±N ¬áÛ¡ ^ÓèÕ 6Äb±÷Þ{O:ðO6Œ×FÄÓääxå̽zI¸ ý Ž ’A8W9ÕVÝ7ÝÆG +f¹{»þ<ß¹ÊQä/$£õt1. ñR9$Ñ<ÙίŒ›Œß•D^ⱯEÕ,4áA¹V»kI –בïl¼jãA¿>¨½ÞžH$’ÕdS¥éŠ?]ñü§žß¶ß¶ýëûC:G¼d*…Bámïí»bwÍ.ÎnÕ[oë»-_Úté5áÜò¹ÓüišÒž‰?ÓitîÐw|·òÝçÍç5¥}7ûÝ‚VØblÙ™ØÙn´ËÑu}’3©_ï·,kjij¶‘ ¡*$ÕHkŒÓ-} 9 sÀ…Ça Ð4òù|±XDî ä6‚s2)‘u`±¡ÈOŒñxNç-Ÿ4l6|S$ëÀo¤žƒúó`!s›"o<ŠÀÂÇX00³FRù'lF Vûض",Þ²‹Ü.ÙDBãăwÓ#ÄQ4@çÃUñþXq#ÉCá\®¯òM)LÇk{ž±†¢H؃— ç†hÀ0í*€28ä /•àfV à/¬›­ÒJáiá믿þÎ;ïT«Õ!=öküäÂd`(;¸´g "r¦3ÎL0Ó4›ÎyŽ¢xÊ‹½KÜšÃ0T! Áù¾ïáyŸð”¦ŒWØ31ù¼!ÆqÏå¦ 6 ‹¨2ËN’>pÖy+ø–ºJŒrá1#܇ß-\ÈlÍÄ«ñ¸Ÿ6mZSS“p½-ºvÜÚcòÇdcY!Oßš¾µ¬•MÓ<Ï;oš7­C︮õºæ|󵚜¦7ÿøKÕ/ýºüë¥ÖÒkÒ×ääižRª5h]â-1BãÒÊ¥ÛÏ­Íý·Ä¿½h¿x]öº^“¿F.8‘Hôgúóv~Ÿ ûTSÕR[éî¶»u]7æ…æ¹u-ëŽn ©.é*Éá( ÀC6[¦†™#Ôgöë”TZ¦J1Ì ÷Lš„¬J vŸäǹ›2 Í´yžÁbSíH`“ï#ÿ-D;—â©/~e6å$,•Îô?¼£"ßÙ"pdP¾óÝÛFxˆ ä²Î‘¹Ê'Eõïy^¸+4×›þ‘þàÊÁ'Ÿ|R)588ÁNµs“Útš:m,äìî‹ä…N;²EÐQİfñp¢5- ¥1áŃ]À—¥ b&6!¹©²²²*Ë*›Æ+†eY³î?¹æ¿™#¶WþÚÝ—A6Àü'¾ÐÃÐxÞPÏsöLÅv†Þ~^åWŒåFúoi×u½Oxå‹Ë‰‹j›â†'|: @T¤¶Ë(C‹ð¼aßU¹“ÐÄ®ÄI–eõÏíoénÉ™©S§{ì±¹\nÍš5µZmïÆÞϤŸñêžišÿ™þÏeéeÖ/ŒûqS™·˜·l‰mÙ™ØyPí %Ú’}à¶ømŸô?y»u{§ÑÙ­uh~¸°¼Pu_ó_´_¼nðº6­íîÄÝŒ }FßÍÅ›¯M_;¥:åàÊÁ7dnøNå;ŽãH‰&ãmsoËä2_P_PJ 4.šzÑŽØŽ³¶%ñRž¯Ð4$­©V«ƒƒƒÒiC€ðŒ#,±>ü+«§sî ˜UE^0ªàbBAÐ>ÙeÍÇ.B`¤ˆ–«ƒóÑ– v4|ÊÙØÈ1 9DEbk‘v—}ø“Åx”æŸì/æ"éIL¹¶ã!Yi²FpQìbfx ­&Œմp}Îý—ý]»vÁ‘«GõlU[ç«ùc!gÏôr"f̦&ô0˜ú‰þ9 *슆Öz€œ©aát胖£iš¦´øÒ¸ý¸]ýfÕ½Ù­i5ûa;yAÒëóüpHÒCÚ¨¦q"0cB‘@SĦ3r1¼î!I2ÀlUù·Jö«Ù–xKk¦µ««+¿2oÜiTþ\‰/ŽC6ÔHÞ8OSšòT¸5„ˆœQÏE„ã¤àbÜ ¶ÌBn.X¹äòlºÊ½„¨ô‹¶U³²Ùì¤I“ÆoÛv.—ËçóB•ŽÅb/¥^Ú™Øù›ÂoÊfyµ¹úŽøõé0Ý©wç7Å›rTxÔ§ Ÿþ™ó³‡ªC½†wcâÆƒêéJWJÝP¸á®ø]/Ø/4ÍWÕ¯:¾tü«Æ«J©û³÷ŸQ:c³¾9Ë·˜-±X,§ç,ͺýðÛOxÿ„ÏLÿÌ^¹½t]/Ö‹¹M¹ß4ÿ¦T*õõõ577à HîXµZ ðP(H½é¯ðˆâ=@¨]êTÃJwŠÔ‘ürÝ ô ¸3àØž ð–4Ù ð-Äè ú"’¢ ;L#{ODæv‹Å"´æ8¢pQ$“ƒ©5ìÔ—ÕX^š1=ù ÌØID¯1X#GQæES“Eä˜1Äö }›IÂ×`Ëp¨Z …ùe¦w©W¹n_dAxÁWâ_™­fÿNýn XÛcÀt½xLšªìB¡žn)¡ÐÐrgˆÀj™¾Â Ÿa‘.6 ÃÐ ,ÍÕìël[Ù#h(m7¿à!œ[a"…‘x™ƒAþÈ'ÕòÑeëMk‚=añ¢Å|ðêÕ«ŸþùÎÎNï/\Z+­0 ½Ež?Ã÷÷4M «¡¹ÜôÞ÷̵¦dš8û 8 W.Üe†Ú a‚.@s€EÌ_BÂçøÍx¸öf»°w!L†»vízï½÷²Ù¬çy™LfGvÇ$wR†[ã[÷mì».¶îÞĽúÞ^ºý¢äEgºgÞèÜxGòŽwâïœSßÛÛ[­V%‘ .¡¤—L&‹ÅâhN9²ˆ–”Xü•JE–4Ö‰žå}DY² » (¨Òü¾,OÉœ{¦,cmCÏ‚ËE‚L+ÃÌb¹3˜n‚Ú]Ò Õž|F0&±!@ù;ûÇsß Tnò€w”ÿ€¢#iÖu]y*qk"øYPýuÕµ\¥Ô{Ýy¤:r¬—³'Cz†(–y@ ËÿAQ1B91YaÄÓøhÄŒO‰OÜ6Œ\*Z&@“ä:-ËJ&“’ïD(×`þ y/û D¨ý²Uxú@ìãÐ8aRÓÐiõ]oòé“[xØ’%Kf̘ÑÞÞÞßß_©T´Ÿiw Ä–Äg7ÂöPÛ¤%/H†áš®ûU7Ü7  µG¤ÑÊV$"ªb¢ò —'AY6Xjw¯0Hcd¡äã‚ËÛ¶Ýþ·ö·Nx«´©T,{zzF.—ó}ÿ¹¦ç8¸\/¿º×«Èÿዹ/þ¢ö‹&·é¦äMfÇÉîÉgÕÏzÐ~p\0î¦ìMzÎ/Ͽپù3åÏtøVÉ2¶'–O||öãO;OŸV=M)õ¦ùæ²Ø²ì”R‡x‡„Zø“¶Ÿ,6;uGs×ukNÍñœçf>—ìKþñÀ?Z–¥Ò*¨ßÞôí&>0wÓܬŸB£d²•J¥X,–J%pÇ…%-eT“lèˆ ÝœŒèos¤çˆ;`òŒ$[Är]àº,ºŠÄŸ?Ì1ÁÉ„ {V¦”¤ž€¸³gqòÇÐ÷è„O^V˜¸èÂ\ïËâf‘ <˜ýÈ)º#Ä Ø6E–4b!sXXg³yœ@~lD×ã¡]£?««–¿ãC[ÿ{ïåDL&øTÂ0#ôvìm “ïxï¸=nimiÎÛs”R¯$^ùræËŒ '/¾=qûÕ¥«•R;ô‹ýbã/žl~rEÓŠã/ ¯) ýö~wλ·uËMwÞ‘¼cJ0åO™?ms¶Éq,¨¦mõz½\.‹a<#HŸ!T`…ÈOb=0B~§'² ®Wä(”Ó¼øE$[ˆLˆ4lÀ Ïx7ÏÙsƒ;`K(Å€"«<)æÎ¨aAÔ.ÈT õqÁàR Ô;áGô @ÜÀ†‚Ó¶!v.ë)H/б"‡*ìzù!Á‚ƒÀ¶Ù,„1º_À$UGѱ*gѤjæqkno*’™Rº8Sˆæ'8©x,Kæ$d©AŽL–àZ@Ƙ–G )ß$huò¢]/ßÁP'ô’c…ã¸áª‹‘n„:T?l•-¹äˆáv-ŸÎ¿òÊ+–e͘1㥗^Z¹re>Ÿ÷gùúݽØ5ÿjºëÝ\&wÀd³Ù>ø`Û¶mÖϬÚÝ5û=»±£>…œ#ІÌ1|#Òü¿p‘@Â˾[Œ(ò´)úÛ"’†(•ìJžx+ÿzÊ¿†‘òRß|é›¶²Ûñ¾]·ßßø´÷iÏ÷Þ5ß-kåÛâ·-µ—nÖ7_T¿è ãÿˆýÇÊÆØÆ×c¯ÿÓ^ÿtÀö½½¨X,¶×Ú/xþ‚gŽ|fµæÇƒ?~2ùä~þ~w9wÍlÌü\ås­ÕÖv°wÛÞGo?z“¶éÀðÀL<Ó¬7ßÐýw|tÇl{v&Ìhš–'ž|OöžŽtÇÉ“mDÑ®X,‹Å|>ßßß/y´@@ÄùÔü"ž7¸?㜃õÖp’¢W„ÛÎ3¼Œzñ™Žih†’ä! Hˆf>xkÈÆxú îAê­Y´ñ8R? }Ž Q„ÓBÍÔB=¬o®ëµÝJ. ½ñxÔ† åeñOXh$~‹¥4*• –.+*Ò1‘[Íqx戂L‹Éë1’ôÿˆ/ÐbʹÏKZDFŠevù`ÔÞ³ëÊB—v4VƒìOYyÓǘHÆ¥WÄÄPY^¦©GDåxÉ3ëpÐ0°†½‚,[Ö#_“s'qA"ÿ—¼~ªþÜsÏ­\¹²³³S†œë¿©§¦Ü+\Ý×-Óš={ö…^8qâÄ¥K—>ú裥R©n×}ß×Ôˆq|€°¯qˉ&·fÒÈû«äQŽVîÁÔ'Ÿ_0ˆHÊnعs—ö_*lžçù¦ïjnk£uaÏ«÷¹zqÿâ’\—¼îúÊõ¯Æ^½¾rýyéóvú;·š[o{ï¶ïíõ½çZŸ›Û;÷öÍ·Wú+Ag*•Òuý”ü)¾uá½3ï½¼õrií|»øíõÖúæ yŠšò_ãþkkfë»Íïzº7gpÎAê ùùӽ铚'÷Ç›¡©)-Çs”­ŽÜyäxk<ü‚ =ˆz½^*•J¥R¹\Æì­„¦Nð€÷óp”ót¸Ë}fÓ&äÝlÀ$&õFD‰Ð±`©'T€ê>bbf,O1 V«TTB+‡#ïbx†¹Ü,|¯ü%Ht$J¥’{„ëŸìÇŒA„jJ)AÞpäA B¥4¦ÖÆÆ> •(×#ðÒÉȉ-Íç ¨˜f‡|=0U0 >•VJºööC¹7qï‹ñ±~ãüfž;ïôÊ髬U[6nINH*¥N}ûÔÍÝ›QaÄgšæÕ…«—5-›×˜çÞœ?|¶þÙõ±õw¿ûÈò‘_êÿÒÛñ·=X6}Ù!‡¬pV8½Î½É{§ÛÓ/ò. ‚ °‚wþ]¯èkÆ­QmÊ.ÛrUµZmppPÜt¤£# ‚qe€£ G<§*Pþ‚…díÔèXêÜÃ@€Ôëå°Ð*“PÀP@&›,%±¶ˆ îÕ£ã›Nv Dí…OŠ%äÏò§4ô’žúv*,‡J)÷T·±OÃ?Ç·—ÚÀxCÀ¹g´ö7®Êâó¢FÇRgé&#áíˆ9ä´Ñ †\LÇBΞ§D¦AÁóˆ±5$#¼¼$©„î$àŒm –·Jœ˜Gšg$Èa¬0E$KeÎ ›§¡ˆˆ–b4+ù&Z¦AT*@pÁJ)ßõcwÆü9~å¬JñÀb„úkºõ”{+æë¾õU¿²n¼c¬]»öž{î±mû­·Þ*—˵³kærSïו64Åͼ)^å˃º®;¿ṡ‡XétZ)U.—±÷P®ÉîvVðY ‚þô›u]¯Õj˜`•¸^.—›ƒæ«>¼ê¦97UµªRêö¯®^í(çZçÚÕM«»Œ®?üǶ mŸØô w•»%Ü"ÒgjXNrš¿åS•O…zxE劷Œ·^H¾°W¸×ªÄ*?ôgήêÕCÂC.ž}q·Ñ­VAý4Â隬7ÎoøÓ|ç|GÏë¾ï7.k¸ ]k©e¼b`Ò¥äs‰¾$X•ìúŽÓúZ‘Ãt誡 •®éØ<ò¹ìk훣CíMÍ5ÝÀ ü£ýø“qk¥å…#*Rò5Ô=šè{‹¼ôqé!”ÌWö­¶s‡ÓÿtüÔøûï¿/­r܇ˆl;#™s%§¢xBÞ¶í|>_;Úñ}Yß²íúö+²W¬­ýlí³G”è.w?Boèí½í†iH(MàZ­ÖÒÒR«Õ¤ãÒd7eì»ñwŸ‹?÷tüé§»Ÿ~Ë~k¹³¼d•6ä6\ÑÅŸrº:¸zÙ„e›ôM?¨ý §ÞsWâ®ï¿ïWýB¡ðpëÃS?œê~äöõõU«U×u«Õj¹\îïï/‹bI Ë ^¯ÚBQÎÀ# N£ÜG].OD -f¬Èv@_½"L“à òšÜ:Vôà?22U[RóÛ}m®ªP•”ñ𡽧뇄'Xc!ŸÈü?×aìM(‹ý<ü˜¦´Ð CwHž®­­­V«uvv†Aب6 ÛeÞ#ŠÔá˜` ±’ÿwÓ¬h€ Š è¸0ew €œ¨/Õ°Æ ¼2'Aù{—Yû»¯r0zMÅþä¬ÍŽ%ÅsûjXÊ"8Úà #É`ˆèÙˆ €¦5m4ŽnhšýU[~²~V=˜xIÏ|Ì­‹× /h þl_ÓµÄE ¥”nêAX·YÚÞZõæjre©+Ÿ>ŒÎqæ%ç5è°è#IŒ¨·1LF€|Å¿÷ ýÓü TEÙÚ–mñ”ŒÚÝÄ;×Óÿ ³‡•¼~â¡Äà)ƒþ2A û!º(r4P$ËÈ’b–¤½„„Q r„Æ&G$òtñ~]¼uñ{ßy|ñøEú¢³µ³7&6^Ñr…L9ù‡#guÏúpÞ‡•‰•d!)ì†þþþ˲*•J>ŸwÎ ©Ò©ôïZ~çéÞ÷²ß{%þÊúØú¯V¾úvâí#G&kÉ{’÷ŒÆ¾þùûâ÷©@%ÉUÞªô®ô-Snq{Ü}×ïÛÛÛ;00 Ú6òÄ‹Åb¡PU4×uÅõ ¶PÙS9ãpO$#Á1ŠÁÜeô Ð?G£ä1ÁyØúˆÑÝÄ[Ô¿R­0¶.fÿʇ@êéUûÏvlûn^|LqÄL ²~;H°<Mò¬1Äݨ؄YŽg†¡ðÀOr®É™+$vx@•Çñ‰ /ïËÖpèþââqó™€4ZŽ5cFÔ{þ O‰?4G+©Ý]?6€±û†¼2ÂÊ@oá໌ØocÀ ãÅkókÓÖãR!´¹4É IDAT^8uZvÙ øløq»nˆ#»Ó3ž1ܳ]ãÏCä4Ž‘€°¹ýƒÖC‹¼‹Xe‹÷Ð?ñÊAÿ¶jö¯ì!`ÄÐ#  º8C:'z™›3F̰,«¹¹¹ÑhäóyÏóbÏǪWUÃGGf°¡Ï L$Ô8DûG&Ö”£3›ÍÊ'TMT¢]×¶±T-‘ûÄ–O\;óÚI“jÅÚç Ÿ[“]óiïÓý·ísÛ>ÛÇöíÚ¡µrS¹­Ð&“Ib·#4ž¾¾Z­6¾:þôþÓ—¥—UôÊÑÝGŸ”>ɶmÛ°ëa}jeêD5ñÒ½.½¨zщÁ‰mnÛß*ûå„_>œx8Ï}êÙO¹¹îV·¯ØW«ÕúûûåòªÃ_R¤²§(‹ø¼H›0L6$ 7œÍ°¤ äð„ Ïôð¸%Zl˜öJÄ–^MˆòRS‰/%ô¢î+¿Ñhý†õ «þú>Y¯o¬ƒô¥†µ0=ð<Àp˜åéT °‡¦sú”öW­ñņþ]ú…Cx@». íŸÙ¨YŸý|V=ä@ˆÓjX”M_Är˜¸s‘‘ )¸½0Œ  Y‘à Ó9c!gwqp<Éã@£a\›ó_"L6r—¥Ôx´ÉG„¢6TÍiøøÎ·OyèÖëuûM[;LóÎòô‡õˆA{¶)L§¬êξ]×M=—ËÙ¶-³ôA=0Ìúôº¡ Ž.R¹Gœ åò7ì'§¼‘xÚNš%hVí³Ï>“'Oîèèèééù¿ÑñÊr|`Sq#⌣ك8Q¬EŠÂ‚—ŠŸ´x}‚n$n² …ê9@]×M¥Rr ß÷û×vÝÜísWô­ˆbš7<4í!/ôÞ¸úO>òI7ã&‰z½^¯×ÓéôÌ™3§OŸ.¾×R”ˆšïû__ýõÇ÷}üû}ßojjú õAµZíëëÓú|wþ¿þEjNcNK_ËVo«¾SŸõî¬Þí½[¶lÙµk—çyù|^n†@#/|‡‘¡ˆñ62DÖ!oYòdŠs i¡HJÉ@‡¥xü9\ä bЪz}Õþ¹­4Ã4dpJ¨ÖõVé±’ù²é_¯a$3RÓÈÚ‰~£<‡+·ËÛìùGùæÓØh µ^¦ëÁä@U•·Å ôOFú>vq"Ü*²`€ˆm2mm´ˆ²;*EÄ!dR‚³îmÄ­ó¹`ÇŒ‘¤÷|/­îj²b;°ñ¨Ýecä‰Ê2âý ’43³e¿ÉF ü ÔBßõ5MknnN$]]]aÖ*µÐ ƒ0PîPŸŸ™'‘Qm?ð jµQ³ù)³9q1Àèå·"sB %³æ#2—¡ð¶aÆžž¦ŠI‡[nÐÿX,{5Ö8ª¡^Pš¦ Ƚ2M³txÉ\9b$Ê[{9ë]B»ZþI óJJŽÂR©Ä¨ È=ˆÓó±zÚ{2™ÌÙg?ÐòÀ_¦ýeî¶¹E§øå_žØ7Ñkõ~tÖ6íµiÚ Ó$Øg2™ææfQ™ ‚ ™Lzž'ÕÏÁ;^—Y§—õ¥ñ¥‹ò‹ÂjhŬGÒÄøñµãýº_QMÓÊÉr©^š¸}bߎ¾ÎÎΞžžJ¥"ü49îåDr¹'Y¸”Jd‚EÖ!3Áà™$E’P'x^UÛ¶AcAje„–s3X,Jþ"Pêñ0®išã8³fÍêïï߸q£çyª¡B#4c¦ßð²¾ -¶£f.ÀØD8„®.öHìå˜Ö¤U/©&V'‚z ”rt•¯7$H¤‘ † DfBó–¾ô5˜ §È<+YcÙŽ p¶‡¡fev+k×òüì?Ûë±Ûi¨S0ç=âÏŒÂïìi mRÉyATß<¤< ¯¡È*íñ <5â½Á:¸DA?šþbßxÊ€*L†^Úóçù‰'¨ö_B)§ðO˜ûˆz1@<ö³b6lïôÂ| :Íww¥X™ñÈŒ>ø ···\.‹EVT’ˆˆAwÖ4“(¦ xroÑØ€I '¿Ü‡@ÀUõh{fœûâ1ÁÓ‘б•"+3ðkpÔÚwÙõê±×b…Bá7Þ€Zã ó7¦[vÃ`…‹2YôZ:p b²Ð'{r3Æv8Cô‡?Z#³2¶†ÐQ °ûxÞˆkÑürÓe_‰1)T¨<–Ä&)È §8ÐÓa[AÖk,äìal ë "Õ,ÜäMœqáÌÚs<Ï-œîînYàwJʃÓȶg»]n°WàÍöÌŽ!ãê`f ï«‡½a°kDKCŽnÉ’ZvËõprX|¾h]géE]×õú×êa[è|ÁÁ)€˜íyŠ + cI²C0-q ôê#¡H޹`ÀТñÃóP}‚:ë†y·™½7[þ÷rå§¥Tâ®Dö´l£Úˆ™1 Ùp^Hr¬'“ILä°L*´På"ÓétµZíïï—Š©wµZ ‚ ­­Í4;LŸ²ÕÜÊÜçæ=÷÷+Œ ~ÊŸŸ¾B­Ø˜Ú8­>­ÉoÚÞ¼½¢W•ÞÊ®ù»*µJc°!’ÆýýýrUº®—ËeÄûYïÏÚíþOÌ}âÍ}Þ ‚`ÿŽý¿üÈ—•¥®üâ•r?ÿåñù·ó[û·‹E0ïå %€£I::.K„ÎEN^ SàLdn »pâÕ¤Žáž fÀyÈ(Žã477÷õõ•ËeL« •È[°s ¯Ë+n.jšÚ¡¿N F̈é±!tŽ5œXj•“¬ƒƒƒ"@gY–ã8‡?}ø¡þ¡µZ­R©ô–{Ã0<õ§ÖëõÁÁÁ…B}Æ*Y-ºÐ`¬ ¥e14Ûj€”€˜LB²éPŽ.b"äf¦q²ÚSðD’Äu'{>1F^!~Y¼qK#(ÚzÍÐ å(Žo<`èïê6Âü„@'0ª^p€.2§+âÙÃ<vÌ‚“¨FêY< _ 8qÿFÖ9MH_sY¦Hè³^¯KM†×áf€ªaã;dºø¼ìÉD,i.ìÆBΞŒ7h½ªa=>Î8p[㇤’…Í™#€üg1j´d²A_7ÿl6¾2zX7Yú€.ËÈHä÷Ã0¬T*jX(%¼ý{ĽQ9HpvÉ5;¶+d@÷¢†m–Á¨=çnìa 耒8òí6K')ö®9¢Ë‹Ð%=©-DžG¾)² 8ŒÚس IC¹\nnnŽÅbI'™4“fÌ´B+N¯K¬[ᬘLTJ­M®}=óºÒÕÙ/ýRú¥Žã:ŽXyDÑ)¾ÈûÇm=†˜¢b ®6…BA‚_>Ÿ¯T*’™  6ü%2âÏ$£Çlñ‡Z •3h²þ±0¤¥Èú]™±*ä•Ñ}d±H˜Çˆ‹a1JÙM2BT­VyÎÂJ)û›¶;Å Ž =Ð{uëë•?ÔUf°‡ègóel:À©Rä6¢R»|n,KùÔ—,Z™m¥” Ñab¡¶JÿP¹N ܰá…f® Èw1â87ÖËùÁ“Æ:€R${@á<â³—#·±ÜYÆ\‘¹›—pŠÇ‚*T±»b€ìIÀhzH‚Œ$˜(mHܘû  ÄY~Y$bl:±hŒHe3—a´”Ô…r£$‰ƒÚ ÒU0&Â0t'“Ɉ+¶:ºM,À8{ž"´(Rqgš/©Ÿ‡‡Eä²¥w=äw¢k¡ =Ï;­û´û¸~cþf}óœÊœ¬\ÓírºîOÝIç%™)™•‡¯h(Y¥/<ö…7Žy#Ñ“ã@àJ¥"gP¥R‘÷•ùP|R9ÓE š}@—òIÕñX9O‡H6âN%´èØÊ$u”˜lмAV÷D¨½`ú)òúdn¤²bA­ÉKÎ÷}ã#ÃÚb ÙÏ„ž¼#<ßÊšÙ2pÖVÄ%ë$RÏqC{t5ìEÉÕ± zÆõ pKVˆç‰N¦¼ ›ëx54‘I¤ç][$syâ>Üß»ÚÍ?BÈ1M3—˹®Ûßß/GdDySiN¨¹æà£çx°J¤—À"êLmäÊÜS莰ê(öž(³ý(jògÁ(5ðM9)âñx.—s§§§GRìD"!f£r èBÉÆ“.A—9Ð0Î- ñx¿‹7Âhà!SP–™Î'C¦"W…¨"5„¶U“—•ÛëU©ØÐäÀœH$ššš‹“9Ö+þ늜ôƒ»a‚7!¦6:;ãö.Ûh2쬽4³ôï˜ö¾ÁœdŽïß(7¾²ú+ËN]Ö—è{vö³ ÞY€û,&>C¢Ë ½v†æ@ÎÒý¼üpz2ƒ!îÄÄãq¤º‘W“ðÌ‹ÍèÙàéÈJˆð$†¬Vüij6M3N dÍ ÁL€>(9¡X‰Çãò²ÜC™‹EÎ2ÌÐü–G‰­ÇbÕ¨BPâ#Ø ÓR$ÜŽv&‚n„:Á7IòNö˺Ÿ\£ŒÎ'`›¢†…ã@aEÄ9yeð50Z„É@(—Mcô=ü%ð:Œóx+²Îä½$«ßqPƒPç6 át²ç9hEÈÖ²iå|²ÇÉ&"»µKì‘W¶%§®P€F݆e‡ÂDþt:=kÖ¬éÓ§/[¶ D2ü¼8 9H±Ù<¯†ýÆã>8Z[[{zzð¹$OÄào‘ÂTj,|:È>J^/ÇÌ™DÞ|±"áz Ö3c³¶ÍZ¾÷òÃc‡_µùª;¦Ý±&¶Æ¨»b»Î¨ñhâÑ^½÷ðÃÇíwÐêƒî;æ¾ ã&ühåžølÑ,Z–%Íù€F£R©{[n¾¬¹·rÓ’É$Z€¢pÏÁD=i„ÈÇÄ!Îàã>Ðaq\‘»ŒïûÂ|ÃÓDw Žyü¾8æXЭ>œ¿£e@¹3 Ž›‹ %cÒ™ç2 46Y*|»x\˜ˆ *`¬OÖž‰ðÇëÃD3ƒÒ,Õƒ÷å˜ ×µ¡A="Î'¡¹Ëc⥠üy!L}Xdz,äì±/IáádEÞ0LUdi5yüÔÃÄ l0ä”GwûNMl‹ $ÍYÄ Ì"D&¾0k‚ò —Ý_Ðuäê>ò”®ënÙ²%ŸÏ‹E æÂP@fd@‘V&ÈsVŽN¯mÛhÀb.GÄMMMÒ'gê3,Ä`¸ƒÃ*ƒ Œ"J$–M)ö8Øì^ùh"N!œòî)/O}yEnÅ ã_0usúàôÉûnÛ·/¨©êØcÝx¬·Õ{nÊs¦mxdð‘ì¸ì¶Ä¶ºVïlêüæ¦o–óeÇqD…SBå86 CôT¤Ú“2¤‘¢~Å‹ð$1F*€Ÿ(2"|È,’Û%ô6¼š<)dè’S3I$2üˆ4‹ÓsföË©*¹<>)krUÇ«Bb­,-QøRÍ“Î<¿Âv¢¨c8ÂgÆ­ŒêjwÝ­F6º\Ѐ‰€¸E²P K²Åð/ð@DÀ‰Ì—cU7d~P‚áæôXÈÙ“½(öGÀY,AÅÜìaÉwyAdR5_åÔfÝLàÂ,Š, @-8?à4c±b« ŒìyázBîWrîi4Û¶mÛ±c®†‡m­Ÿ‡ˆäÉyÊ‚Ù,1Åqùuud€RtÁýdýé±³ÇÒl%À˜8gÙ @E¡819–ùÁˆ\9Óò»\EaCJ_!ÒãeÖ)Ë»±D¿ì 6]ØÂ,5¬Tµ»ZF¤MÍ­ÅÈ5^*"HŠœn´÷ÜO8=óï%X†‘Íf±‘˜t€g© |ãÞ5ÞˆÁk´…¤é-ç¦ Çy ƽzñÄeÑ“–8úÅ׿øZõµímÛ7´l˜èOüäà'7f6>â<ò õà•å+O<ýº¦ëŒ¬ñ»Ìï<ÍSJýiÒŸäJŽÜ|ä~»ö›·jžÔ‘§Ì§L<¯T*`Iv/}Déù!¬²0×.øèh`™à« Ë€Mðèã/&ýC®‚›@|vË@ù ­>ɺ`7Îâ‡ü¬e#Àª'bKƒ^Ëî±ÆO¤pÇß%äì“ix¬e 'ðË‘äaWrØà±6!¦bþÂäB`dùìÒ)ĬPGûP·R£T ÆBΞù‚fx„òÁ¤It±Ee ú Kà3’™2XŒÄ‡-˜ŸEªyAL0vÇõ e†ŒQa oÉ´ÿЇĖFí³Í8ëYàíÖ±£XÔ„¨"†rèQáÓ¡¯>88ØÚÚ:d–CÜnfô‚¨ƒî—”}Üg†÷>mÛjI-%o„YypfPI(r$K$Òòš¯Rêù}ž¿ó­;kýva}a·Ù­‡ú©µS;ÌŽË*—=žzü5çµ×ÔkWU®Za¬°BëÕø«J©,eK5¿öôaOŸøú‰‚°É&7³T*áÝYâ ®Ž°/í›azND‚b%2ÅÉ3aÌ/gÇ?ðâäñáÝѧd¬•ç…ñâá¼뙹Žòg.—›9sf>Ÿïèè¢ ;Ëc´_€"iW ú@J™õ yÌû»ŒÍ˹4gÄk>L¡q.Ë—Ç\|Žy¸Ã< Æûµ#X¢¯Ê, æšrDìTÿ?㕱óߊ­±¹*kEŠxH² Éߥ%€Eƒ•Çø/0&\ñ¢çá.Y€òã¼À̶¤ÛjxÚT2>9¹˜…É“kH<Î`®i&·["«Ÿ„UÆmx+";Ãl\°ù1޹?•J¥¿¿5†4#cªB¢…^!ßC¼ó&xžÇ…gˆð_¯×¥¥/`… F@Ó„ri®`ÞEPßò÷_{çkò»7¶Ü8£>cqiqÉ.}§ö3sgî2v}£öc/žP;a‡½#ÄÏ*Ÿe…ÖãÞã±0ö©OýdÚON~çä¦XS*•’!P¹!ÒÛ Ä?ÐC¤>ƒÇ¹ƒE­7ìÄD*­Às‘ÙHÕ(ç¯ô&QÓ+²–‰ÈbòJ@½Ž: R°r’×Çð–”D¦iN›6í”SNéèèØ¸q#šÈñPá#¾>þâþ‹ô¼¬í²æŽûã÷¯7Ö7MZ6MßÊ~ëáüÃ?·>O›g†æÛ~xþ®óqÀ/®_wýƒ'>øÕÕ_r`>Ÿ—õfôó ,•JÒæÁºªÕjâ Î,c§Â—SÑH Š]Y*PK’£Yº‰B ƒ,·ÐPz²Æ@i6¤á”ù–¼>8fŸ¯V« k#~(Í;bN'@Eˆ}™D¤g]Qð8kôÁ…‹L‰²T+p6hÏÈÿbJo*÷D6|"‘Öqù¾ìdÛ¶›››ãñ¸×u?ßóù¯Ïüú)ùS–íZvcîÆS‚SÎIŸsœ{\SØtZý´R7?%ž/¾Ü‡vAoàvÁÈ^p\¿rÈÌçóù|>ò¦2qF¢ýòPx¼´.DSYøN΄ ‡ÈŠŠœq-6àa­H~ðÇá Á3‘¡LÔ!kd“'®¨°qD¯Õ40Bn h'ÿ‡»%…œ=VâðY1è^Åå¨,(V=)2äì^Ž9´Q»DX•LëD^v¾¤ê<8Íê×\g  qYV‡“„K’Mˆ=ËÇDÏHÀ(ä ‹ÇãÂŒyB§‹G瘄—eÙЈ¶"G î7ðàCêrTAþþ¤œý±€r‘x€Pˆ»ÈTf&“Õ$°§¬=åþI÷_°ñÃ0þy×?ÿ í¹\<ù±Ìc®¼Œ IDAT殊­²C{‰»¤Sï\o¬?§vÎPý„š¦iJ‹Åb¶e755IÕU.—ëõºÈˆ:Ö¡ÐÒäÉÊ‘k; üÀN9݉°Èˆ°×ÄP‡Ú?† τע|’wá¶¢œé¼üÀT/âÖ†cy Ôˆ•Aà ‘Ù&Þ"E?“•e]±¹¨_ ©²“› ¾ˆX€¯Ù’ñìdÄ3¦¼"‡7€Ȇâà˜<Â:C"±!uÒß»ÒÚ?BÈAä`r!ûáÞŠÊgª`Xf1Œ‡ÿ#f…¬•Ä(Kÿ" Ų¬T*åy^¹\æ¦7¼ ¸mƒ×TÃR+¢, ‚“ü+I³½GÙQ¢9˜H$„+%B„«(¾«@±aü…JR4}¡Ï~£ z²BÄÔ   –ÈïЦ’>M.—“©ŽR©Äl(ùìò+¥RIØÒìv@†©TŠ-5åð±®ëÓz¦Ý7ë¾%¥%®ïÎ׿OѦ¼é¼yMë5]F—ê;ô¡^’ºäß+ÿþlìÙ}ƒ}}åo07Ü’¾%TáË?¼=wû 7 ‚a;µ|>/N§¥9'ӸЧ(•J†a$“Iá³A(‚­±>ŽQ°˜=ÆÝCèE㌠)Ë¥rsí@^l ‹M${ ðj2Yɲ´ÀŸF`CBÆx/ÇEVr (|cÑ^H¢ÉÑLMDY*lÒÃc¶WTò¹X®Ub&iPlEÀy¹¸Ÿr—¸‰‹Ì…#–Œ=2?õqác!ç¿ïKø¯‘Ayü’<2¯Œ©½Ø¥Ìƒ‰ :"Š\f9 c2KV#!Åh*“t]‡(K†DJœ!k©á¼FÚÑòw¤örX€‘%—N§á5)Ç4XRy»®+²crdÀ}Ãm&à |Ìa#!«…ç ¢üêQKq€Ä!’H$ g"LáÈGÆP§ÍèaH¤‘X¹\N¥Rr£dö²›Ü“x\(¤@,—Ëç?vþ 'ßpè®CöNzɺ_»ñ?þyŸÒ>Ú~ÔüÑÊøÊ|ïÑz^3^«¹µŽFÇÞºÒ{TO‹j™üØ{Ó8KϲÚû~¦=Vu§»C’N !$A‰azE&E}ePˆ¢(‚ ¨àŽ¢ âñà„ pÈ rD=G)ŠÌ!LÒI:Iw:éNwuWÕž÷3¼VÕ¿VÝ•÷«uàWõ©Þµ÷~žç¾ïëºÖµ®µÒûŽ‹1±V^2:ÈÚíö`0Ðwâ?VWWuÖïÙ³G[žçå<Õe²¨ôUyQ£ÑyÒ T¥Lž*9 ŽW©AÞI¦:ë—3N/o=\Vµ×ÔnÜNéìűÒ­I¯h¥ðWn› rÔæYš¬Qð[Ö°ƒ´.¯à5wÀýÝ„ÍÿÛ*(¨#‚¨;n åU_’gJRK̦‘®Hâ²r¶ó‡Ã×u£”ÐãMX—°„"‚† aŒ†?G*sº^ÐŒµ  “NæÇÒ>ÐYд^þ‘—ßpñ 9ï#Y’]±tÅ›¾©ßï’ÑÛ|Wë]Z^Úziáã­‡Ýk+äÑÓGß˜ßø‡Ë8Ëg[Ði ³VkGÁO!G§Œó&¨ÈõJf]›Ù·7òÎ@/™rŠÏŽÁ&‹# Ï œÞæ4Eº.3èiÎ%ñü .%|K÷â¿Jd([,‰°YÖšÊI=!ßÂ.Dâ6ÞZ„”æÁäæÜÊÄ‚Lpí‚–çÃv~8)÷Â"Ö{rlIŸÚ 9Û<šQVˆ1$}ô±ÅF%êÓŒa•CÅ æqëz´ Ûd=%l6ŒñCV Ά¶ÊùÐ¥³$|•}èd9ÚÅ;BÓr’(ŇtÀ^ó¡<À4n‡·aq¥îêaN&Ô[é và‘縸¸¨é}ÒdÚuš¬TDw!»ét*̰ßï‹ ’#1Xë‚0·»ï¾»išËo½üÊ;¯ìõz­Vëdyryy9ÏóýÃý/<öÂ# GÞø 7jô…'^xAyAžçß9ýÎK›KÓ"EH[s!¨:ßu†Ã!º·j·êô¼„©/g¨S#ò4YÒΠÕj¤a@i⎾–À£ÂI47ÑaRÍKs8u®›àªhÛ8M.R[gŒÚÓHVí•à¾û>uf#ñê?7uê„—ïîV@óR+ð©ÖcrŠ¿£)èì=¯âñ¹u/„÷ä&ñîYÚNÈÙ¶†BÔàÑ"`Ã2õ Ρjj^IÐÄ»òc4d© lú†AVKç zûÔé.ÈæÎíŽ-D2\Œ›8U)˜=ù&Y¶Àzs€4«#­·Wñ7‡(…& —OBMVHKÝlÝF5ÌŸ—‚c_*ãM¡ ˜á= ¾žþW'2iï`0Pæ(ì^ º ¢¨¯DðRFËË˧OŸ>;;û²=—]1º¢·Ð˲ì¾óûöÓþÚ°p6ÇüX´·²,™ñғ祻ßïV‡Ãa¯×ã8Bëi¾kp·”èd\|KUçñÄi-fé58“:5€96¹x} ÅREÞT‘ôŽ“ò©B8ˆ úôhÞ r tŠÛøÂ¨½ äs0hòz]ÂA±•½í ª‹ÅЩž(›x  ¦Kä®(è=Q' yS§Cûm'äl} /ŸÖ¤%î¬PWp&t4У,•• g†¬J€‰ç5ZÃá†r°:U£Qƒ­_#âùÐêðÝH "#í‚ä^¶ü“[û ûߺמiŽ-ýéÄWzÎ<¬®,ÅUsPÒ‡:ÒMTÓ­v˸Á`°k×.zÑ‚pÞ¤D£J ¦×¢7 ½^O8ƒÁ ßïkø*­^)¡6Î OØuÓT9?:¿Swʲ–ÃЫ««zCÜ‚ êüEMta>õ,//ã,'=MíŽè¥’Ø—LèÅSKÝE?õìd¤Ö]‹ˆ:*n´Jѧ¼v!øï1< ‚.镇š·Ð‚)žù&ä„õì³Y–9;óY×>K¬ô~¿âǹ «;’݄ܥ_b%ãïà áÏI+¹? ½OŸ¡ÃàãÜËÊ'i\‘Ö£…Sxœ‚è2q)¡&yÅCášnÌù\Íd'äl3} Èe¾'ÂßeA¸=穎*9±“Îoòè}PSý@µë »Ööd]-¼f!}]zúã§Ïø¾3t(»)÷q ­3Ê( Xf‘§-°AfÊÒ{g}3ÎÙñxŒBSÝ8Œ\Œ_FS }ø †öíYg5N5°éC¦è¡é­$¾éÀ ™2Gªn•#jb‹*¢3Tu¡»U2’²²²¢>“¾Àp84ªF þЭVëmÏ~Û³Þó¬3‹3U”œuú¬ß=ý»ïüîwÞYݹºo±……è!Š—®E$ùDð+DääY IɉªÜQ;GŸ¢Gïs9.¡¦y¨oDtš'^¼fފߎVEÚÛÑÜ(c¿ú?œ˜ ·n€¾8ˆ®î¶;›1IÆl¦—¼ oz¾xJù8'бaÝõÇ•¶ÉÝê׉š@ d!zjH SÊp>‚.JŸ¨Çês~ Û‘~„3q8m ú ¶ï/&Ø"çb:C;!g› +¨î ¬0Ïٽϵ@9¹|èÁ#æóyýÄ:ÿçÜÒÖ¬Ì>™O;Í>‘qè rKÄoœaìäè¼WÓÁ\}Œ™ôÖ9Íœ/¬rm{ $8y÷ ´îaØìãЄæùOŸ>MÈô¦š7-dJ¦.·»5;k–«Ô”ýEÑï÷5JyâĉӧOïÛ·O½iÉp0én«+£šFŸ"4EÞx<^\\iíÐù‡.:~Q9,‡ÅPUˆ2͇Üó›Îºé‘ÇÙLÖãJDô€ÔÈA­Ø“ÕAO­Óé x¡ð¯6O·Û% ‚¶@¿ŠŠÈ)"s6Ñà‰ ZWžöü:˜ 2Ã: …nlãZìî‚èëSŠaøËaËiDÞ†^µ¸Ê: J;")3,IQ– æbî‘ (‘Å`v!` 4ü£c"%ÃO>›AQåb”8 §Êe¡#AwtåÝ7¤z'älg¼ñV§ &oz=æÎ~p"£7QŒ€Xâ-™ÙÓg»Ÿ¸»I›4M/¹ä’,Ë<8 òäÓçNûŸìÓ6Л‹ãp¹Ÿã˜ú¦zA¼Ì×dtƤ£v FßBvDNã㢿e(nªwÅWŸçˆÀ µè5Díž‚Ž3Å0èÈb;vìĉ²¥Íç$8\ûHû'„°²²¢·Ç:ßiºèù¶Ûí›/¾ù¸X,j éÖF£‡ÞþÐ_úáç{Nh‚hÎL“/ö3Š®¿Èñ^Õjý~_ÇÎ>™y»½&y‰®Ýe{ ¶ÁíqSK*ihÍü!‡š„ƒ(PèÒqª’™©œ‚ Gã;ŽUèL3œ<,]#é±ëýÀµãϯñ©58ÓnTãxµžŽ»åò>Ns ‚9 uæ˜nŽ*]_ƒIá’©°"uD÷I ›ý µÌô­xRN’FwœXH6ඪz|<†ÔC $8ÁÎ]Ñï›ÝS™³ÍQÇž‘‹8ÿét{ª¶" T¼Ë+¥išH§O[[eY^sÍ5ÓéôÔ©S!„úuñ™N1½'Ù ÉÂ%\sž|4ùÊ`&=꥓¨Rî°Lå»Y0@Ø‹Ðì+;18Ñëõúý>' ®”Pô“‰iÏ g ßëÖ ôƒâ82\ò ñÛNh„Þ¢ws§d  ²wæ1㮎©:æÖ­Þ"±œ`Æ >Ôåç&‰šóâàåGó ár Ê Ò4]YY9tèЩS§¸>ÙF:ETÆNÍ]ÔüÎ8€AçÆ‘^ǵˆôTl„d'PèÈ!p3YÁt³®È»š÷QÂÁ#þÿs¡Ü 9ÿÑŒµ`2h®FzS–•íœ'h¹«†ÖŽ`¬w¦ùÍùèêQþ›y¸=4M3ÿÏóòñeû·6ìxñÓ—¤¹²F {a9{ø,I’â‹ì½Ùd·ž0Ò7òÖ{’XÄ·ö98–)¸™|r(CGéÄkAç•ú JT;F‚’DA÷üðC6”ÊLz…µZ-E½• ©­.Â+wH û g&¾–ÊŠFeY~×G¾ëŸüç9ïŸDQ§z§>ô˜Ý÷žûî»gß±•câ:F#Á8ÐE‚дPÓ4šàÑ])Ž62g“ŽB}]XЍÀÝwÏÑqN' ».€wnº$¼ÏC§ƒ±Š¶œWŠ|"'© ñERö#ÔJo}»’.GÙ!‘Ò罂æ.---//s'£ö˜—¶1>@ã“g®ÕëÁä¦ÜX‹GbÞÌ€£:©u ˆ{Í72F£çf!±r¶ùGœfu|l Gçtm-]XÉ{æ®Ô !§®ëp*o-²ÿ•Ms:¼xBÈÞ–u~³“Ý‘¥Ù†Ä‹½†«“$™>z:ý¼ø³¢ýßÚyžOp:¹fÒA?=°¡mîÃÏ÷÷ŠáF°É½-™ð'&ôþb<ä¡´»½Äqßœ›•¤¿ÒI­{"ŠCò®ô{Ƽ~T¸ðœMD !qhú+ºib”)0'QÖŇÐzh·ÛgÞxæU'¯ºëÒ»Þú oM’äŒÑOûÔÓç‹é4ÌKKKY–Ýç>÷áBbÞ2¾œN§¬Ó”ˆ€ ë9ÕMÇ®²›à”óÔàPÁQÆ-Tç©.¹ÕjQNEç¯Óè!yr›ƒ`ÎLÐ1ü=¡Î{s¯ùØQÔ¢÷GI2Ø,*ù„30¯õéÖN¶tº`¤&*EqÆ=qš—æ° |¶ÏÇHiÃzçØéÑåðbg¥ºxÌuÏÞ¾ âÍ·IÈqÕ2_qÑ'%³Ðš]Ò†EÈŒ69GdX—ŸaÆ; B:H»?Ûu\;É :9M6ñú»uùÊráq ’ÖŸ·Š?+F׌zí‰FÌ'zAæôngZ»4§2(³^ Ó&•ˆÎ0ï LFÊý‰„°>ñ²EÆ€øÎDtý'§ªŒpLBèýWWWud(Lꇨ9`r½~!úÚRw&J–#I0¦þjaiá_|Àå×^^E¶;»ç²{î ÷äûó³¾vÖh0:|øðÒÒÒYguæ™gꛜÎ#“áAí.’‘úè¯Ç‘¡°¯ÐBço…˜¹‘ŸC%Ú{ê$Eqê?ê|°ã5þÚ!þ·­òÇÊâƒÎÎHv”Œ¨é~Ø€ +ÄAçS£È5µ¼vÑQs‹Ëg’T§?Ív×X‹¶•Ú»þ‚,ÛB„ŽìÞ©=D'»’_~Rh|GbŽ]­ P5ù5]$¸ì¦+oŸ=®Š*˳ÂGXøæÂ¹_9·,Ë]»vIk ªªååeç‚CBsv/ýgI'è—‚'´IïŠU4ð¼ÞåŠà 0¨>Ã’b.h‹‰wsr÷hAþÙMŒÂf‰Ì°YÞÐ%‹\‹ò•tРǾõè“CýpXÏi.~á|N¢eé:Ċ½ûåbî­î‚iÞfÓ+I+é¼FÞq¾h¡@ðãizzAZàð†OG서m¦¹³†Ç[Ň(#;)àv5*Á\Í¡“rÄ»ë¤#Ô‘‰XåÏ”»ž°« UQ{÷î :¼ÚïnþjÐúP˽FôœÃC„ðÉ'žp<,EãtÂ#DFæ~Q) ÃH¿×Ç|ãñéÚù“É„„ݵˆ4üAš ‘ZßA^Ÿ~·}x[Föä 8AÄÕ?A9Cõ¤Ýnßþ¸Û›¼9ãæ3.9t‰ú7\réûžº³¼óâ[.–•Žó/A—Z9,¿ÇÈGJ<ŽO2g9‚+(FÔž£7®œìç’Ì$F$(¨HY»ºïÓ.ñ‚4§ÛºÃ¹ŠNä°Y^“…Êròùh§·1“ ”÷áý½æCx¬‚UŠ–+Í-¿w0!Ýtû§˜r8¸«½2¹OhºyGX×¢öN*¾½€ÛdHÈà’v{yàÜ 9Û\å¨E`œã ÏhtñzŸ9 lë“ù„4Jf-yA„8•‹Ó|mÅWk°Ø¾}ûÎ>û샮ÐM  !·áñM.å®ñxL]ïƒ5~Ê8ëÚãk¤?ÍÁê¥cw° ËþÆSX¼ ð(A¦ÉÔn·õrUÇœæK“€ì^>0£é¦F#õ”s ‡CEwA¦|[â¥ÂX™—G÷½ð«voêžhŸèõzNç~_¹ßìªÙø~ãî]ÝÙlvüøqaeœ\Lcˆ«æ3}zs)°yu ©YR‚ŠgE. â~Èf`ªt2P2Õõ³Ô"=‰:hz00*R¥ÏätQ¥Hµ“ÓÙuþ)ú]ÉBÍà 7“@å©caÞÒ⦙ ;EÔ\ûQ?ñ =¯‚àSPE‚Íÿ+"J©ô‡öªÈSœNm`¶Ìõ"’TÔÚ 9ÛÀXÛ¨!l0l1Ù„€ë0·§r.®¬ü…ê´j©âP0í í.ù£Dí\e”UUe_Î&´®k­¬¬ÈÖemG}W•|iS›×%÷5•†ú…ë"»º:‰°° tC_LY˜ºÀDòI’,//“6úéï¾îo^–kÚÃDpè\(|LõÄV‹xx¢ 3F5é.¢œx±ªª’ÞJŽcNØ vø±G[.ì½yoÕTóù\66½^_ñ‰§âÈ9G.¸ëbë¶Ûí^¯Çq@l¼&@O˜¿ž‹TG™G!Àx"O)ƒiPÄuަgøCUØŒ7‘ñ¸ÓŒëÑøŽ¤¥æv:uØluAücƒÕÓ=óf³ Tl.㺱îµèj4p#Á3A, t°8wíÚÕëõÄþp¾Á†…-ò< IDATíjÖ пi·ÛÝn—N˜û‘˜Ò§aF‚Å€¼z$ÌYÀù‚OwBÎÿ!ÊMD“u  « _å„"‚£¢Û£WD_Q¿1O¡´(hñ¡Á庯oµõ”–†á9^ǯ·¿§=OçŒøè\0ÿ ãdg>ÌìBô÷Ê™aÇêxuŸì­Jº ?Ò¸<}ú´hf:¼”w’4µ”C^ÀâÞ*p*6†7üÅ2w}ŠèȈ"3Šå²@NvÍ@WÐöÁ`°i²u}ês×®]Šm¼ž€áÓ]xejÚfeeLO·WÕ(ÔºÃáp8Jz@ÿJðPŸ?Z~à~ÔÍL)9ÁŒA×OŠ”¿á"3B‹@çVE2ïCx®Í®qÒ< ˜î Þ4 [ô.u½T„ξóµM˜ ëbN¾¿ª¥:w±%÷¿(Ëryyvk0©=/g¥«BòÇÁ²!T(Þ*œþ ~àôwÉr¥\¨ž»48d &{vBÎ6ÿ*‰´m ¬¸í V€Þ3$ÏÒnDÞé^ aø3.fÃVå¥ eèþmwøîaûMíÖZY–MþßÉô?M»oê&Ù†J¦ÓLù\b– É2]à~´—ÜZ˜ˆYqø€4P¡Šm9—Ùpä²Ìå¤8_¼bó<Ú¡|¤¨žý`tHÇOU6³#œŽ#ù>§Bæ‹ÙÅ×5áÞùš¾õ`0à9.--Íf³¦Þ”d -Mü„u™Ý%·9FX9(uP~©¥¾ÕÖÙäˆ …†©7ü\·˜ƒØ £áœ¢4?â\Eë>ðÁÈÙ#1ÈÊì4E-]¨Š»>|êŠÎÓá_‰ÇÎV 0[D!½GP.&¿dlÀåÚ`Ѐ4r±Nˆœ¢™trM{tñS!¡Kðñö³m½:N˜Žð·d矴KY¯ðA}JÙ"’À̸p/™ªºlºER¤ïI‹ã__7IÈ?’w^ÚÉOæuZãLŒ–°'‰®ÊîaÀ…Ofn4?¯ãçAÐ¥î›~”¾y9è£Ýœã>¶ ³ž ›H(e«Ô4SoÚxjø“}{‡L¯Wó–Þ»Oó!<¬2‚[¤·RÉ*Ÿ¨ŽýÂÇŽþüÑ—œØsóAgI’ìÚµëW~£s¸Ó»¹·Z®by \GÇÅ„å‚×¼;%ƒS!ôeÔˆòÞ;Ÿc˜äú\½­zrˆÊvŽ»S\ÂUÔKUø`0þY?^FÐSôîwä†I'°wÜ%(ò-t肱>וâ¢äÏ‹?`Xš¦óOƒŠ`€ubvL=mõ Õ0s㓞ÞðÈMjuÓ“†³=À*$ä>.$EâÆ`”Ì%¢Oñ1:üQÜPÇ17Påàj5¯1ëæIkÚ꾪ë¬÷&@BŠó=¢Æ3*VHp“ßrì^"‡Ëè@çP†íf!€„ÞW`#UÁÚ MÃ1Ad —¯FÑ•}]_KAױͧíð°Q€qMéž"¹7 eÆ$I²:ëÝÑ;}þé¦Óœqݺ ‡.?4]˜î½{o=©ë° ²˜¦oŽ…ZÙ˜ t»]äŒF#åXþøÓ÷– Ž,~n’³Zqw¡Å¹5˜ë³sÈ–¼U ŸÂçO‰ôàÃH!TÅæò<,9­p…1¯fÜÄ/VG¿[šFýÕ”â;øö½¬„#ª¼‘À‘>,Ù˜>(’ñ¡™¼êòc'šêõÜÔß?Ò~ä xņeŽË‘ì0Ö¶¿ÐaÆ\Å’ÔÝgQ8R`*G0øOX7*#Dˆâ¼`Ì^1«›:4!û«¬µÔrŒÚˆ$È#ug»±ÈÜÐë'§·z±ã…MÈq9ÞÄÁ gK»ð 0¼º#SEO± iDø¹ï`—w’¢Œ[B<Ðâ]$q3d~(P4¸"=ƒ±÷ùûûûÁc‡/<|ì²ck…ošíúæ®}_Û7I6`FndļÃN¥@èg⃯aç^«NEB;Çåõ8Y¿Ps8Å‘v‹ñ`Æ”SN´ ¦Çý$22çE·Q AmêKÚû4z+íqò0×oô`@|u£6°Â3¿@#žÑú´†ƒ1td#(%l<Ü 9ÛSå›J£óÌTÄzäÁGz,_ö 8Ç1/‚ÍøyãÙgýwô¥ O4ûpVw4ÑíX,[!f”An•iš‡Ã,ËÊG–§ùt’$É]Éî_ß­gAÝ㌠îR:úJ2âTQüÆ?Æ•rˆÊ°!a]~Ây1‘à(:äÝY¿¬Ÿû¡Úó’ ÎK:ÏJ£?§ †Íú÷(޳<ó·r¶§Ä€OöÁV$Zà§ÄraÙ¹•@*?ªœÃ©­…(ÚOQå—Mhº¿Ô]-ìÞ½{uu5|>Ì¿c>{õ¬ó;ªª² ²ÑF󟞇&¤7¥×uª“U2^‹nˆiSêpçê¼Q¡c—V¢¹dUÒÆ‡±ºuÞ…i—¤ŽFcÆó•›»e™«£E‘Ÿ“Ÿþ«Óé×ÒÎ ;uS§ç¥K]ê ß{w¯™l\²¸ÎBŸøˆÐ0Šß—¾˜ƒàŒ@r@ –CΨœ:‰ŽÚ-ºMw­Õ£ãlñ_Å%Y9{%oåã|Üôñ{†z€L*Èž¾›ô&”dèŽ ‡Ã¦iVWWñ £WGH #Ò“ßø¹ÃÙG %ÚQX ôÓ[1¸Ù€Róée¯.ºC#±Y2—‰ y÷ õ³ëù“çÓ0Í>›uþ¬“ÊÂ4ÀÊ#/ô—¤Ëã ÕŒ‡[âJ¹‘äFDªZÀÇØt>i+FÓulþ‰ž%ñU ÀGq£² C/šµ^…Ã÷ÓZ ¦)\…ÐZà8DÁwBÎvV9Ì£Îh'h3s,lÎc““$²1G‹)Ò6ß@ªÉ¾IqSÑ]î>äʇ\z饷ÝvÛõ×_Ïm÷äOÈ{—õNujòüIñÑ¢û˜nÓ4ÕeÕðw‡­Ï·’¿N’Yâ$`_LŸó~¦ ã,؈Híõ™oÔ°>å§3¾¿‡m0u³%aDÀíã‚éyþ[×õÊÊJš¦ƒ ú?ÕOO§MÓäi^ÝSíý½«¯^-®,ZŸk¹æ•«´9IÉq*HÌùÐf†ðÆA9 ð%ÛtGä(ÃòB2P~úÀisasüIÇCòYtÞÙ)šÂC²©9Y+lQ$sx\—àäLŒ-ÐõNŠ8¨ ÁýôPõY”VyÌ» ¹8–«8[Ï›T¡*¢p!DP­v”œ"yˆYÏíÿq{(ç㊲åcŒ|êÓJR¿ŒÔy[¹ðšû7áaÏÕ{®xØ?û³?{饗9räÝï~÷'?ùÉá]ÕׯÌüÄÃË/O;Óý_Ø/n:È»–SÓ4’¯Ö HÝ ðC&®CG½}1ˆÂ‘)8T.JºÉ¯MÒnÚ„¦õŽVzG꯰Åå2=»òІ¸Û…*û°®ºäÕ•g Ô£Ã_¶¿§¤IÖÊz½^ù…²õœÖàÅ{‹fÚP±)à±z‰4P¹QÞõ¤F§ùäyµ»¯R—QwCnmÞ4…›®$ÕÇþ•Br·'w–r]ÿ訑ì»ÏEQ=ûô Ädi®³ÍÀZø‘0{ÞlžÌ³³…ßY*lVq´ÎŒg|Ѩƒþ0©¼™™äI«ÕÚ½{÷Cò«®ºjÏž={öìyÔ÷<êÃÏÿð|ÿ|~éüœß>g5¬>0ØûÖ½ÝÏu5ðœþQ:}É´÷K=/Éù ¨>î»N:yÎ9çœ>}z8:ÎM0 V©óš¥`n¸šœú €Ý>( Ÿ¸•9Aãï·>×Êçy§×9çœsúýþm·Ý6 ŠkŠ•_]Ùõ–]a¶q«7HJ’a›H§Â3ò-Æ…¬«”BKóŠÊ ÄZx“ëÑ.…Sañ‹Ó}SÁ}{?²wzùôè3Žîý—½Þ“Ïó\C<1ë!fñLìk>ŸK™ÍýÙõuE?×FDr6}ú4ÿë<-Ó¦n&¿6ICzæ+ÎTÄR`#_‰üú¸!Ny’BA2*Ù/‘ƒŽÃ_zv£WŽ:¯í$iÒn·ïÿû§izäÈ‘Á`¼<½zÔY¼“¦ºsv裬ÑjòDö„vz]ü|Àu ãkú+aËÐÃçr<@¨p?½!x §7ð4ò¬—g ·ˆE‚°…kzúõcm;n·?ï;ž×\Ñô¡Ÿ$I}E½üñåâÏŠÎG:å¤ô¾:Öm®¢a7Æpx—eçò0´ÖùM3jæƒùñññ/ùË7Þx㥗^zçw¾ùio>çYçÌ~bvâ—/]~ôSGwc÷±—ûñ'üøGÿô£‡J¿ž–Ú0ÊŒŒ¡prä {VÎF<ô)K׬ ë“­:]8Ý'!<]õ W+ˆý@5@Þ¯¥´N[í™N§sÕUW]~ùåW_}µÃ0JSn#cÜÖT¶råMpNŸº§ÛÁø§n£j‘`:"\à $%Ž¡Âä~“ÁUƒý¯ÛŸ¤É™gžyî¹ç=zô®»îÊäí¯·o{ìmçþ󹎈¤úÁ’ÑQì¥5óDSJ×N}k…@IäñpVXxÁB}¢Î’l>Ÿ·¿ÐίÈ'oœœý;g¯®®ê )@`Eõ«s覜GÓ0Äojuª¤Ø”$Éü¡óöŸ¶Û½öå—_þÜç>·Ûí¾õ­o½îºëÒÒÁwX¥¬F]& ­5 %*ÔÑ7¦¾bÌšÞuïÁÑh$~Šc†^ýDð8|0(ε¡RÔ’–²tmçz’É6ºˆ&î®9ÍcbãDúp8¿=4=¿µCΆ}ÇMïxÊŸ=e2™ÌçóÖRkñ ‹ƒ¿T×UáÖ6›:Pæ.2:†Ü!”öoÄAð˜µù¼¹®Y}ÊêMï»éÍo~óe—]vp×Á§NÜï;îwÞŸ7¹gò£ÏþÑëëë“$YÙ³RܯØÿ¡ý‡J’$$kÙ®fÝà‡¡BanU×õ=÷Ü££>¹‚jÊ-_z$LEïx.ŒeŠú^@çÓŸsj„uÑC²9EˆöÁöôü©ôÙ>ûÙÏÞxãËËËÝn·¸²hl•Ó2Ôk×N¶I¶´Ûm|™Þ'Ôy¸Ú:LŠ.€vƒÆDö3À î¥4›Íš¤iò¦Öý~ÿÊ+¯|Ä#ñÑ~ôÎ;L«iU¦k :xh"’•!ªpðÁå•yø€œÙ¨6äŒÀEMÒIuA•ß’g§²‹.ºhÏž=G=vìXr<™æƒsÕéÊ*|LÆgŸÊ&D¯‰ŽNøæ7>T¯ZÈúBU½6Ëw5e"4~\R¿"C+ dŒXèC6Œµ2ùÇ¡o½Œyüé“Ày…­0&ŒÄ§Â)tüã¼$ ¦ÐC¦ÇH©ë yæe(Ä}÷$e;Ïçón·™‚ÿ¸Ÿ†>3ÿÔÕ§^{íµ—}þ²×?ãõûŽîkšföôYïïzÂv"*v4¹âbÌH4<Ê€‚–“p9Èn:åÆBÈAuÓº§Éá"»~RxG„fòšå凓é{§éGÒr©Tq °qü‰Ç[nÕ£0“&Ç„uR¶"q2ˆ Ý¢æ£&Q6 ÷Ö’‘Û¦‚föÕ¯~uyyù–[nAVµ kßi îO$56P0"êè‹€ ïæ¤þVìêÉdö‡ú‘uïù½sÏ;÷9ÏyÎýïÿý×ýð‡?¼rÇÊüKó¥G--ܸ6EÜõÉY/nÜRšsÙEéèøàp4U=NÇãñ†Å;‹ùOÎÓ7¥7ÜpÃÕW_]UÕÍ7ß\–åügæíw´=0øÂ¦ÅŽ &Ù‰³*ß´@¼+Æôü4§&;ŒêÈãvð´wj26“¸K‘ö•O@û”Ü€Ñǃ"çPç[{â¾-~¾UCÎ?†üÕð««õjY–ý~¿×ëyÛÛ¾ñìo\pÁ1ü‹'íyRyß2ûT6 Óú1õì³â÷‹ê–j:›j‡ëÒ‚fÀPô_Ù(s0m4¢úM834¡É›<nÀ Š6M3i&ÙÅÙäg&óÇÌCù'òüyr$ óMhoŽâ$BäeÁô£ ú(øµoh'ÏOÂcÃòÇ—›¦IïNwÿÜîd’TÓʇLI«]³ŽÖ”Ïo‹!í3"ì[À}§ùiócJ  ¤‚ÎD»ÝfÚF‘4M«å*?’×Õá¢0ºu¤웤ç§é<ížèNª‰傪”»ð&’ø”à,G)!FSú8%š5ožŽÒy~÷Ýw¿ýíoß³gÏ׿þõÁ`PguÕ®ª¥5¯tö¤¦C ÍùèÓ‘ÝnÝb‚ýôìéì!³ÙËg¡ É0Y|ñb}²ÎO箯6…¶6Ëîî^ùÌJö¾,üS(˲zd5}á´ø¯Å|yž&)[U"ãÀúÑ÷‡Æâ~NÚ}¾ô/a°P½!äˆ1ÅJIJ€à &X €¼ô­å&vb2„pÔ;>Å»¿¼FŒ3 ¼âÔÁ¥Eë­è³=?ÿbøâåáòªª:Ä\[ùÝeþ¥'%¯O£,ƒ0ã“+,hÎkÚ˜îFîñ¨+¦ËiÝÔùËó#Ÿ>ò‰ŸùÄl6{Ô£uàÀ ?qá‹,½o©8X$W% [HÓ4I7´À@".cbî>à`wÓ4ÕS«æþMxD!”òùhSü{1?8÷)9UBk!ä'æÓÇOÛooç¯ÌCÍ“šÙ«gÙdzÞ{{N›q§ÅÈ Þ5¬"Ú…Sà’å$ÿßy÷cݵØš„$MÜ9ú[kšfaaAŸÒn·ƒÁ©S§ g«Pð<—0£þn¦ŠôJØ lHTàÓ{íÿs𣃻åîî?u“&ɳ|ôÈQ6Ìö¾aoÙ*¡HÐÂ)ËRÑFi¬)ÜNÀR2DI‡ÒÎ6ÞwOu²d£ÿ1úÌg>£#¸išêÒªztÕÿ…~S4N¬p´»Uè$‘S܆ÑÕóÙsgéíiÿ±ý¦iê~½úg«Ù­YûíìÎLgŸB¾â½æO7šá7'»ž¸küŒñø·Æi’&ŸKzíUU•fb´è™'õñ,-oÚ`®³‡ðŒk-;ËÇR'Ý…Íj›.WJNãfÕ<^)1мW¤–Øl6ÓA¯R€„(mNé ¦ö¤ÐylGQŦ”vFA·ççáW…«þ4ýÓ¦iŽ9’ç¹DVªVÅk "JØlBLlØ!Wl”\gi}º¾$+N®Bë/Z‡^p¨:Røû7ß|óáìðøãö;Ûí·µ“¥¤kÒ*¤Ð+t³,Ë”¡k¤ƒ„‹¸¨žýÌ,ì ýÛûg~àÌ,ˆáɧœ=h–^&·'d ÂyÖTMÿs¹ø„ź®C’$ Ÿ­OµV?¹Z½«rAç8y†è¾X÷*mˉæ¾Èn IVà ,sdaa¡iš'Nl¼qzž~М÷ZŠÌámi±‰7nÄ0N{ïïõ?Ð_ú™¥*©Ê¤Üó§{²cYKô¡#®Ÿ-WH“—J7bñè¾´|=\6i~³É_“—“2I’ùóæåye÷ïºL¹û¸¾Z›J5x¬g`@·ˆÿܸû†nr0©›ºªªf¹éütgök³êaUrGBe‰Æ¹«Ÿmô8ß“¶ßÛÖ,B3DÜ@_öQ0×]ŠB„›ç—Á_±eh³¹žCs^û"§ävô½ÿÄ4®ôÜœÝÊÀ²ËÒ»¨ÒYs;Tóì‚ëúlÜNÈùþùãðÇ/ºüEóçÏ‹¿,ªªjÒŒÞ0êüS§9ÒЛñî(U3|\º‘˜‹ ½~Î9焎;méH ×ee;ïïÌîœ~äá£/?:ê;êâÝEqkQ+ `.hMÛ&˜ suB¹2 F,MÓT?ZõªŸî}.ºø¢ÅÅÅÇ7omN¼êDuNUÜQx¹¦ËŸþá´ýâ6yA¥øµbü†që×[^pøè@0gîhÓ:ªÀÆv®®Îƒè 3¶â™)êÑÔ‡¦ÕAïœQîæZôr|l1 æðé †ƒ^æyÞÿ‹þZM™6!øòéÑDÊxÜ1g?»‘ ƽh½ÃL&„̳÷gõ}ëá;‡M» !äïÍ;ë$_Hš¤ñ:&'µ73ÜFˆÙn·G?E±Gvœ.?Årõ£`3óÀëª00>ˆæœœÜ #Ü•Hz½ž÷“^!¹†_§»@Oç€Ú£L6I¹Õ·ÔåeñÙ"MÓ¼ÈëÕº™7U]a!±F²“)¼çO§x¹¿LîJªÕj÷îÝ~ðƒ§Óé 7ܰ¼¼œ|3©Î¬šv#V¤2zúóÜ%Â, ¨ Ø':aÝE’8âÕ®£sb4aÉGzyˆL•QµxÍÌxCŠkгøiêh˜L·Èc9}Ÿ\ö-ƒêã¢ò ¼á“>¹QÂ}°\tc'älÏO¿ê·ÞÕÊß™Gè™ëÖ`úéŒLv&”|fèÜkv:Þzë­‘¹a„»&1µÈd2©ÆÕh: !„:¸àqt”;×S¼Xhid‹`A0†«ªjZM=®Û­öyçwÁL§Ó£G&I’—yh‡,ËB¹©ÎóïïsÔUU%Y’MúZpmù_§lÂÕæ—Ì( áÎMŽî¿&õP Å‚š{î_Ø•ñ²œ27Œ ä_)é@èð `ª*Ì¥; ïŽ|‚•`<Ò)ѵTœq«#Fw k„à¶_ºÔ!<„ ׆«ò$¯³Ú§}ÆH²o.–Ã9+´™N]uÝÔiHÓ4]XXøÎïüÎétzðàAí‹2)õàbÕ·ž—©BM’œÀ0[ IDATDò?$|>Úâ £3PºÉ ½ãî$Žj"¥Âš24‡I†|ЕB›Žù0º8”/ ±ús…O†0Ý ÏçuZkqý¦é¤˜o·øÒm%¾ï„œÿÐ/u#õŸöàÔF7SkN'{$»â¾³èˆ°u±ÒZwØÃ1˜ãrD Ðæ”Ç[õññáÃDDäyÆd-\ZZºûî»Ó4=uê.#Ng6ŸEj‰·tÆ??î¼¥“$ÉÊÊŠ>«(ŠÑ/ŒÚÕvXÆMM¼}âò3Xž¸SµCêî~íçŽW0|ah?qÊ;§$SÑç#‹S’)xú$ ?>¤É3õ^²Ä>j5H|r+­p3>ÜÃŽ£œ÷Ñ7\YYa¡zý­ðWþb¤g6ÜûYŒÿlQ=¥jþµY^^þØÇ>6G£Qš¦åcËäº$]I“,!`¨+’ãd ;S‹—ù‚wþH8\mȯÅl¡Hwþ|y+AÓ®Küð<·x ïèõ™W¤f!Xû9€œ¹€îLÄ€î9h43ıãUøŽúÀö‡æ9—Åô Š{Nê#¾ BoBF‘ë>› à H³ ¼Oîø>x: ¯ƒ¿¬{&¨=rÎ¥v‹·Ó—M—_¹|àÀáp¨É¤ªª&ÿeÒ}G7«³~¿/ò.@Së­Ù§fù_çXs®mž«ºï‚ãÓeˆ5wÒ½Õ½Â'ѳWHÞJ{#‰ø(\yq@‘`¨ØR_vïÔ`ª”ì|pú"‘€Š¼)n*šå†’Âý]€°Ä~&IŸN§Ø%vhîÕwP0o o¿kS#7öåD„Ñü¡³ú‰W$Q"UÛ>wL2áÃà”Ť³Ž…êkˆ½YpçÆÝÇÁøÙÈQ(rÉѳ=?¸´jÑû ‹ "ƒ™œ;뱪*y´Ð+Öófœ¾L­DÎ9PH8¤¼S­\f«[$!)WžzÖ©öÏ·ÕKw2d æ=3刡gËH#TfŸ7âLÔë£c‚!J 6¯6|^‡ÚˆBž='wåÈÓDº™Ê(×¼ùá-4.™dÒYR ˆ´ê—4- 0(c¶ÁÚe³Ý¿U«Å9B ^Ìš$Lzf¦ÅȰꯅÏo ¯&+IûÚ!„tW:øƒAñþ¢ÿñ~ݪà ƒæÇÇi©0 ƒ¤‚W<ÞaÕÎu;sê¥>£­±¹˜sà+¹êdeâ抑-F* 7ˆ‡ïòsßËî?牶n¢åºðÅÈ•q`‰<>vBÎöüÙw»]H”$ËäÈÑ H07jgWEÜ4tiˆ¹ÀåP‘á•V-ÓÚ‘ñª$4ÜÀí;}ô‡Ö7”ʦiº¿Ø¾i:]žžºñT¡é5³‡ÏŠ÷éWÓy:_^^VWɳë³]OØ5ú‰Ñè%£$$Å5ÅâCÓdÊyŠ)`ˆƒZœÂwŠ,*‚‰¤ysg™°é G!ëâZãЈ½ˆ!á€ÉFGÁëžÚ~¸u¶I˜Œœc|bÃe¼)Ê}¹:VæÝD„軸$DÉ‚©†’YÒþOíæòfþ²yHB:L¿Ð4:FnFNHþy|Dî´ž¬D6EaÝQ‚ UÁÆ™5|–‚™£y.¼æìüU—{m8&ÉéÖÍèPw&uˆ w\e³k‚<›Å†z§ Ôû(Œ) 2¤ '­øØløÖÿù–·hÓ©DaÖyö$J.nDÐ-eTÜ‘99‚KäD‘È«¿º¤BÆoÄõrvÃ=Ä-&ðõǾêþJ·º¤š?qÞ4Mr:‘¨v“6!„¥¥¥ååeʸÒÖ;Zé߬£[a#¦Òçr|œ6˜Üµë8ׇ+„œ¶@ÍÁvr!mpQ%†þ¡Þ%‚cí½ ?}(d7Ð×]Íð•CMœä¯ÏëQ)Æ{Ïo¨è¥8o ™î’GÖ„»êsØÊA0ã{:›îœh)"‚–O®D°0¯¡è\Ó'½µÕþùv´Å€àœ>@cÒE"œÖ¥-]4šbÈ‹cÌ«øÂ^x³ÇתÄx PÇ¥™Ks;5'rto5•/*› š¦i²eÙÖ˜A:ò<* ûï]dê)å½—ÖâQè |vÄ­.m;!g›ḐVp{W êÇõ“‹gOÍ鉥˜£‘G'ÛôÉÅ@×ø2ÎåœõýÏèŒÖŒB¨n. ¼Ñ4º©nݲ&a™‰ÇÚ¨,|IE=)¡ E@‹Rƾj8¿|Þý£®^0ºz”]Ÿõ^×cj'jó V/Nß¿Ûíú˜!+¤;V1Þ(Ò±ÕétÈÖù[ŸUò¸ÂŒšÖÞ={š¦YYYqoÕô®¨ŒÝÊØ¿ V7?2ûkÃiÜT“ÑJóŽZ”ú+½Çæm|­F÷ªñ!°ˆ’ê Lir % 3â¨Ûó`sP–eõ¤jòÒIûmíοwš¦™üÈdöšYïz.§íêÚ”>Lz9q‰ þ…ÝJþÊ)Á¬·6…7‰vîNÈÙfú€[ÈÉeoÌf3À†:â-qLaÝ“FËEƒä)t}ڙ漋¸âºN«jw5Ý7­«º.ëüH ÍDE©qj0Ká,2xNBçÆç.Q»QO›Ùoê?«÷¹3‚ ƒ–f?=WŒ'¯Ç—*“Ì(C-œ­DaŽ0îRîÎË üH DwþýŽàÍÿØ¢¹ šxy“¹V'ZŸžr°êtpR?Ðgñ>ô‡1··“<<}žŸÖ×MÓL—§óëçíÏ·“ÛÄÒèóÃ+B¥™L ë:Œa³õ±Ó;4ÿ³àÚVø°y¾I¥E-Ï>÷3…ÝKXY¶)dýt¡”G @ƒ“ê)À/j³;©Oß_â•.ôL.ü°<§ EÈçY%­5ëÏVÓj¾Ù$—$ùùyu¸r Sˆ†s“ŠÊMà;¹—¥·a mÓWw ‡Ž³{kÅ!Jg PR8•œ‚žTFW'\¨ZÿžrÇq*K§üyÒ@ÙäãÀļîÑ‘ÐË@.ãÒ8¾~œ èT4OÄKô,l,RCg‰†ªGWéÓfÔ$i’B¨§uR&ÙõÙìa³ìKw)‚1Ù,Î+áшæ$ ¢.ÖM]JÇñ‰`Š ßêðÚ·ö·÷ÁYó”ɳ,JH>àõΔe“‚)²ê»×íÄ"I&;ýåi¶'+>W´¾Ý}AwñÍ‹‹ç-6ÿ¥iÎl`¦Õ|JÃÛ€|1 ¬KŸ-I ÝâïFç*„Ï ¹»;ÄðšŽý†øû8¡é9‡¼\ôWÆz¨äz÷Þ½8<‡Èÿ€YQ2òhÒïL“,)n(´víÚµ–É^—†v˜^:¥ÎpôÆ6}âÊ͘óðþRi¯³\Š¬Æ¼cĹèø-ŸëË>j‰ÉÁAÆhõ“âÀ?¤+éF/‘¡à•"D´¢Ü\ЧFAïÒÞ*óÕÅ"ɲlaaáœsÎÏÖ½ˆ‡ÞÞ£¦ñ‘)ïzF¢Ú‘%U’$ãŸçoϽٳvV¼3?gߥA€(ÿ°Tœ4ëÜTäàß"7Àoеûöèå|k_ƒ³Ú#†‰Ž3ŸNpž4;Ù=càZ™lº˜–©{y!–Ûrž<íþu·ù—5‚ãþfÿÞúƒ÷yø}ªÅŠ•çÃîÆèø€W!t a|r hØøŒbaØì.Ìù¥$—^á“j‰zÂ{hPùÍ×(Y"Ýx€—N§£“Åñúh$ž‰Žã©#"J¾’%ø>Rá !,..>àسgC7:&&“‰Ïu­ýáfbžó(£ÑÈë!wœÔu1™ï${fúxÖ:¬é¬¸…o4Õ¡;ƒÒ0ðÖÐî¤)–‡«¦"zFÍž’„’Ô‘‰p@ÖðB©°ÝÍLŸ¨¢  GeÁ÷èÒù—Ïóüâ‹/~üã¿°°€(ÀÁXÔZ“оó!0`v:%k©dØ@®öîÝ»gÏ­1n¦¾†Ú6\;÷Ü&65dt¥Lƒð˜ÄæT=ÐÈøVoçäßa“Nƒ“Ç\0ѵœÐ鯼† éÐÓSbpÄÇ)˜ýôy‚ÉŸN_²¨Å¤Í“$ÉÉ“'‹ç“«'‹ß¿èZ×È(¸ §KB9{;˜ñ-‡‘MŒ˜`Ùë`J?ܦ(Âú,­³lXá„"š¨}D”„µ7‰\xá…I’ÈjS¿5¶lÐÛPxtXFm£©E·c6›U§ª¦nª~•ÒÕÕÕ[n¹EÝ‚igêŽ6òi$ø:yd ñè2qù£’ö1r§•{„†â5„ÿ-FOD€IÉiü‘¡ÙÃ':ÍŒ'HÔàRqæ ¢Fмa†ä’«°è#4çCTZÌLXë—:»}&˜£¹¬¥izøðá{î¹çĉÀŽ »2o$IçáÖ%t‰âPr0ØÕ{®}Ÿ#ir~Ò:ÞšÍf«««<¦ì‚¬>Z»©c-Lø¢gH’á!Ù½pØ/´~'“‰Ëœ£OwcºúÀö“ÖȦÝk9R:!v>øX 9h@N„^}dJÎî”ëµåž…PñÁ.¾øâ<Ï8pôèÑÉdR'ì&çEꧮαwüC#d†Y"§#GÒŠîT`J~!5‘ÁbðBÍÇ"9,Îͪªîºë®N§C¢MMຜJ“5W¤÷5@¯¾×ív‘<‰èLY–%_HÊï-çÿÏ<ÿß9ƒ¢(’'&é4Í¿˜gã^¯§w¦Ø"Hsßœ¢ñ¯°î-íέPHѨ¼³%=?ˆ(õQ—æ… _= ë&H°5l–nãŸb]õz=—Û`=øtš·š˜â8†Ý»õLdÂW+¯°YÈï•ÞääÉ“NW¡ÈˆXõ>°âÂÑ’o‡à\u{Í#ñuíé+§Å/­anLÏ^6ë=¶WV¥kw:7ÒBÓÚ0`’6iÓ4Í`0pú÷¨i*Fê¢|Õ¤rÄ#j„x“Ñ@/‰°$qj÷²#$Cdˆ¤ 4øñAÍÎÙÒ³ÙliiÉ}AœTꢖ (œú.õñLއ#š¦IþO2{ælö°Yÿu}•)ƒÿ6Hš$ýÐFެxãÍvš[>sÃuEÝ&òhº&ü9å§’Lz|\”Ð1_±>l,Ô“hG¬|Tò<†¡®uÐõœ¢Rºwõ™d¢ÔaޤÈ!áö\ò·d]ì2ñØh®9ÔÙT÷0Lh5RÙÙ°_Ï¢Üí-¹;I¿‘ÿû0ûÃ,?œ‡¦Ï˜†Ç„ìd~Û]öЗÇê ’Öu=ÿþyýCõ<›‡¯…ô/Se Þš%,¹EˆËmîåø!ë>4ÚÒI. éþð|n†#lš4ÓÅW\ùUcÃìØªªúoìkØýé®|ä kM_5í¾¾K¹M½‚@ ÉŽf¼2ó¾"D2Ž¿¨h+˲zZ5ú¥Q’$éi÷E]N¾¯wEŸÈÓ£c±íiöõ$Σ [»£·¨EPAP+šdâÀr™ØáëÁo}­•NÓùyó•^Ñ—oÿv;ùm9²9â*Zdæ‘{‚*¹+Åy rÃc¬·\dÖ—™ÃÐCDv @Œ±J§HpCÜåÍ7®‹0C7Þ—Ò,ª)]tÎ%nù<,f…ÔÇ~ñ¨)z‚ØqQãݵûà …C^ÝÙ‰‘ayÔ¡ä;{_Ä»¡žÎ!(&I–Bñ?‹pQ˜¼f2»`BÈ?˜§ïHÓ/§US‘8\¿•*"Œ‘‡’ìKd˲¿ÉòkÔÞÛÓfÞT­’{’úH=ŸÏó3òñýÇÕÞ*¿!GTXG$ç‹dhq“¤%’>¸L¤’å5oÒ4­.©Æ5Îÿ>ï>¡›eYý zðéAÿýý=·gº< Õÿb©  W4ÕÇ9è©t§Óqû°Ù PË©DÎUE‰Ž!ÿ5y…n˜‚ã Ý:ð>p7ŸÏ%„¼vÝÒ476OušºI’¤È‹¦n¼¨ f™¥o®Q„ærrZùֺĉOnZŠ–ÞŠ3ˆ2‡c’nÂOØ,€?ºÝ®xƒ~|û˜³Sï¨NT4À‚ñoët`4X ¶èt:´å\=ÚÕÌÜaı_ £è×Ò‚ˆñ}€"ïtËmú²èÂi·"ÔF®æ˜U’$ÅJÑ\פ?»3„&ÔU]‡oF'ê É&}0(ê7·Z­Õ®öžÐkê&4!/òâ«Eû=íệõ‹êæXãô ×OB”Ï'(vBÎv’¤¡É“r2)Iòlr[§ „é³ipœ ÂYü[#œObºèK¼õ_Z“?œ$Ç“ühÞÔÍ|qÞ<°é^ÝMîÜ @ë„%Ë&µÁ+ ]¤sÉwЈ<=øëÁâ㛦)«²ª«p}X|üâøÏÇó¯Îë¯ÖØè:s!Ò °àM €©(ZF9»— ¡C\ â–”Ù$énÄ|Á¼‹c¥Ýj×uÝ$MÓ4IH’tÃÇÓÛ`˜=®Ð&-€ÒÊî rŠ(ººE“[£ú ŒºÜ \_õöœßE :$΋ó¹4œ¤½Çã\4PÚ‰‰F”oñÍaŠÖß]Ï<Ëó<ùF’~:¥Âàa1dzæ¯1›Ñ¥öu–9X4êAN“q÷°®î °A~@·UÒÊ=DyÅ3ØáðùCÚ~èŒøÀÖÖ"rú˜iöé,i6"kUViš¶>Ýš?qž½+ÞkPTH¾=€µoy’´¢Èè˜qºyË„}+4`àÆÆ¨Ç:‚ï¦TÁžþ¬5:ª¤÷â^ñá"$¡Išä`ÒzQ+»6ã<Õ×àlrSK}±T™-G¦2 ë^¬0ÎâµïÍò÷®Ñ~äÙ³?¾»8ù”“H¿÷9Xõ(ºù¨„A…‚ÄÕ%¹8æÐb6BŠ2Ï0²©ößþ¤ÓS÷GØ÷×cñèý‰¨~¢€öB7¶€ÙÅK•J$M½f$Ñjmìñ™yb46N•ÂN“²ìœQ#ÇlX.ßà¸h„PyӂТ]#^ïm&4)¿¯Ì[yY—å•åä'Óó§ÜIo%ö©óªƒùÚÁ+c°& ¥ù¼Ë–ŒZk$Ú#ò]UXŠFâ"^€û©{ó?BJ¢_wç?7Ïþ2Sݼ{÷n)ÒÖuÝþ‹öôùÓ¨ë”qO2¼$Ý©r¶­Ð ëCgÌ0»(²0®­<N.ZÜ*]µ&@!üDö5âÎnÔYZWuÝlÌÛ¯!B7féuUàf#.2ãðúxá?¬}‚i8³ˆÓÜ{³Õ£ªî»ºUUõûý]»veYvìØ±²,Óϧ§_sºÝ´ €¸½7É¢xŠ‚Â©'‰ôt|H‡€J&oyÔV"‚²¨º:/r‹IÇÄôt°;ã€ÓàjÁT3.ÊàåT4ªu°Àëƒ9ι‡´‹ö“;wo1/˜Xºék)vR`ÕÈ~\¸Ök”­œZ#£}¨ÚqÇŸa©¸¤(Ô­• ß„Õß[mýQ«9Ò¤ÇÓNÚ)ËpA˜¼bÒÿ¥~‘È™Ï ­t²~«ÐWäzåºhÜúà*aÞ—V pš.ЦPH÷¢Ü3 Ÿ×–R;QÙhInl™dY–d‰ìíWWW€çÊd‚£ÝÇÇ$vBÎöüø‰à®èC(&§Ï‰õ,Óq×&¶éIƧOÓ+ÒÉ‹'MÓ$uR¼¤hn¥G6šü0¸8õe+­”ꤳV\Ëe4Dõä(L¹/íeyvÖYg]yå•ÃápeeeyyÙ5?‚ ÔS Òâ4DrÆ 4iYÓüït:d¸L±ÿ¶ÕÝ@ Oœ.W8öÑ  ô˜\V[bÄfÂúØ0ko ´á¬÷±|¯¤ýtð\GÈ'uè.…!U«Ìic-’Ý7­Ï©³…Ó¡>XóÍU¨)ñgU“+UÚZ²TàõykG¯ì÷ûŒÜ2½ëJúÎ`M€T<;P¬¢(ª‹«fÞÔ_ªÛívoWo:V§«äd’¬$Ó‹§ý}Z;бœz@‹B‘O{“`¦o¢É6Å!çì1“ÇX4QßϧáDe·23Ä5‚ ›Ež{"_Ñ ŒÆæ¿µ°#"Rs°i.jò£yUUGŽ!לßž~s|¦ëÖGwØ#¹Û³mÀšÏ©y}êREðG]Ç œúiçEÖ&(hmˆÓ<&„ åñ²÷Ø^Ó4I–Œ~TŸª;ì4šHVl¬–m,w\JoY÷Þ°õ‘Ïôh"C×U·¿Øž=rÖ¾¶½¼¼|ë­·ˆÏ=Ëþ5c¾Ä½Ü„í †7iæÔ©ÈVÕóÓ°® í™»þj×®]ÒVàÀådQv¬mé¦Âз|º6šÉpŸfwÂv’zFEÞÀÜy"m3,¼ð&Þ!Ð9åI’4föœY8;ÔgÕ!„°ÒÛÓôirg".µŽ0zld*È%PI»Ö@DÏe/ø(+Š!­èª=v:Å‹›»÷Ôÿ8ÕýÏÝ´•ž{î¹W^yåòòòµ×^»²²’þJ:þ×ñì{gœÈ‘ûT´‹Ÿ@¼.˜G™¯yºƒÎÓÿfåVÓ^!u¶(ú¸ ±YÌ2™ÁiÛëõš¦=}Ôù›Nó¥ ð¡ûÒîüùóòª2¿9¦8#!KídUèTQŽÅ“¡£cHŽæ;ͳ*öO° ÓÖ[«ŸZ]øË…•••[n¹…÷Ÿ={Öýó®÷“‰ô~ äz‘8¿ÇÁfî´ë>¸Z;™;L®ñÓëõTéÀÝúY‘1­Wãhð)%ç§¡T†-cX7‘tpyqˆ¡x¸¯9ø!µµÃ,a³Ñ–ßäÕ—¯¦·¥éÿI[_m…êûÕÕã«ÉÏM:¿ßIfÉVj‰C…*›ô•œ”A:¬¢Ÿc4ºbêÙg\¨CÌu±€°ûCXSé~èCúÌg>óرc·ÝvÛx<Îó|&¤ƒ”G#@@ ©6¼Uƒ·bÅ<d4xv>OêãÆ.Èæ¸™.ˆsDÇ 8ÃN/gû8æ®UN*†ì(ÜsôZ\aׇý” fHƒVc½§Îgy:M/¿âò§>õ©'Nœø‡ø‡ãLJÓaÒŸt÷t‡É02ƒ!nQ1hcÐvŠŽ ÿÚÐ85¶‚l†Oø]jš&=›"  IDAT˜v¿·[>¥~t˜$IvS¶ð¸…µÀÙLùñ62ö*úÂðg@ω(—LŒ^Ÿ v)e7!ÛEŠ“‰Ž8IÝG½ÅSŽŽxÏŒ6-ÖDØü`4é¦ãÞJ &É1¼ÉŽiPéÄT2‹~á×hýD i¾4M‡ÃaY–ë þe ƒp‚Ÿ^€²_Ab\zdª¶›¦QmQU•Šfb9£øZüïOÕ¢ÿ_•UR%y’÷z½ïú®ïªªêK_ú’kß‘Ec‘Š+t ÷r¿"úÜdšÿn:‰ƒ ­ ÷oõúÕ‡UUåÏg?7«¿TϾ6«ª*< 4ß×ä_ÉÓ*­›µâ´”ÈåˆÄhôÒ‡TœÇÌ~¬ž[eËò¿Ï“l “èþX7<5T?]µÞ°&eͬž/'äÕ©n½±6+×9zF=¥’JsÃf­Rwp¸™¯BùC<æÕ”ÛéHqž{²Û 9ÿ¡!nëÖ=ÆÉ6KÌ:vì~h,}ïÀ3ÎàZ¬þ-›={6>{üÍo~óíoûd29qâDaþ˜y¸%ÌÍ%ŸF‡Ò Cp®wé´cO¨Aó¼Ç ZÇÉœa :ì…¹R0•6ÐüˆK!©'È1î@3û&Á$)Ý]‚SV’náäŽZÄeIØÝjªáËq6‹TF66²ø6z­CqÆ}&»wo!nBä8îɯG)õ?€ï[­Öx Ñ[@ü\|…1©R1Û¿öçIçy§Ûišf4mNæô\õÑ®Ÿ«}D"å:âÌÞ¢™í”¢HB9Ÿn#.Vl.¦À¤­$¹R-ª^¯çÊo.?ášr>P¼r¶y.ÌÁÉ©€ ‘Ų{zÓ8¬Oøƒ¤yÙÇîÜYd-1ü•¢:¯ÿâ8MÓº¬{Oê¥iºæ¾äÈ7•¼ûz¢Sê¥ çBú'ÑŽ¡Òù\K¤+Õ¤ÉnÜ™ⰠœuÆÐÐ=„ˆRô·" wǬ\t­IvÑtù Ë͹M™—MÓd§²l-þÏEW;=#ÃP±åS&¯¹¿‘ÜD"¹6#ºzâŒî%á¦,<‹h6Ó%Ö^¶¿šþð4„•YþÖ QJ·öKڳߚU§ªôtBhzM}V]üIN…:«];Õ¯Ý[zŽ{r F‚‚8*Îè‰ê#ÔBsÇeâ41†¶!;Î #¬Õ5"J1“g^I;Uçìxmꪚ>n¦jÝ}|©±¸4'”Óea‹ú»ˆFBJ”•¨éÌÏž|ܺµµðw Õ±*˲껫ù…óå—,wÞСgÀìºGn׿!`{§*õå©yXçñ!DOºwîítùt”ˆÂà<ÏóÁ«u»Î®Ë’$©’jü–qþ±<ûà&›Úlœõ_ÑŸ<`R>¸l­ä¦$û—,I’¤Øàãù‡:;Žò‹†DÄWôF`X×þRMC”šýölvÞ¬išîÿì&ŸOóôî&b¸t¶½Î†ÜLã€›Ì ÷¹ŸhýPg0a­v†›T6 ¦k7áÖ¬œ–ÕUz(uÚúô’iÒ$áÆ@aYºEK"Ja©`Ƚ|Ùƒ±ëX€ý2´]­Ñ·•“c=±œÑÁ3;!gÛBCŽ9’5WHÜXe­düÚqsyÓýn¡œ—ã÷Œ³¯g½W÷Â|„%b+ò6Qï¡(Šñx¬íGgˆÃŒwþ•E*YÃyÓgA ä¹R—ñ’nеó9޶“h6‚t\¾ÐyPa‹i·óSÍ8)ÐÈr›ib'ËUÛi<9³Nö&»?²»iš²)‹¢(®/òkóÁÿôÿ¸ßL×TFt0Gˆ´ ÿÀªÜp Ÿ õ9>?UQKòŸk(¸áŠ„S½í-À²,W^±R|ºÈæéi! IçúÎä&õ÷×­kZ^î”eYÜTd7¨¦ÊªPùºó»è*!`ãAÈeUÝôšV¢þ\ ¤aüŒñüóöoµó{ò4M§Ï›ÎþÛ¬ÿÌ~^æ4$kDÓN×(O$ ¥B-«naÑB’1–(¦i!"‰O×E»‰,ÓÛ„Íۛɫ&³Ÿ-üäBhB¨ÃøoÆÉ‘¤ÿº>§¼+î0:ƾ‹\' 0@’&xûކJç3žD%5œlŸãáQ‚"̽ÏN/g›5¯ÓwÞJ.XÛB/›fŸÎÒ_K“<©ë:©“Þ“{ÓžÎ^<+~¿`ºEQN÷B‚Á oDØ÷¥R‡ÎÕšÚ®ÕËŒøªùvʦoiÏÇ} ß#Ö´ç\œ¼>ŠÇ‘#€×|j y¾Ïn!Ÿ ë./ü·Ú ëêÔHu)7_þïËû~p_Ónd‡L’»÷Õ{W^»rÆoœÊ焞²[#Ý©IPÒsèOÝ ÄµÐ2¡2sC¼è<’Ÿ М |Äóóó¦Û$·&ÉIHB’$iýÿ±÷æqz–õ¹ø½<Ë»Ìdv„D#²ˆ(ö¨¥"ÅžÖS­µÚjmé9µö¨-ZkëÒÚºQAê‚EWàŠ@–@B²'3ÉdæÝžõ¾|ß¹æš{<þHñ3ï|B2Ëû>Ïý|—ë{}¯Ë˜µF½H¹®º§R™Â›gjxCŸˆ Ð`N¢ëEÅ€£^U•¸ ñ=•[Y¿¼ö§ù‘óF†p–rö}¶½¤=¸q0úÆQØ`MM.W£ÑX´hQ¿ßï÷û˜#Bb­Œ\^]à¶^.fTÌŸfÒ&¯éHÉüL”ejB¥ïMÍRÓ½±;Dwß5ûM¬ï`! -Bà(ÏòÒ$dXTWLÁÀ™dŽ( B&ˆ*’©D&ˆÂªŠs5ä$Þבͪ¦ )g¿eN6è¾yea6ØQÖ®¶g•χø[Ÿ\ÛX³ev@|&(¬„à„l!Å‹" ~þyùƒÁk/˜y # ¼ øB*G¤ðŒ¥šcéh@äÁc „YȈ £ÍŸaB@—Wµ7LwwØŸ@c­]ºt©Rj|||ô!,„?ðå,V 8bȯæ‰ üAgEfl¬Âõ žy|1r3êk³B³ûï.Y¸N´_-ZÔëõºÝn|cœ]—™;{fØ+³62 öH“¸¨GGËV¼£Š÷Œ"j¶ÃT˜üy|ÏPÌ´ÙlÉ¥7šre™þ"ÅØOØkH*Â:“þ•R5`OÌäqݸËäg År¶YmH¤Ò@Úš ú$>Q©I5rɈœ™ªª¼õ<5á…Á=¶š  KÖø -ká`cŒ—ÙÿøìÀPñÚ†"‘{œóL ’ÏÓ—ù5H9væÅ:öC€hDe_Î_ôþ­—äþEÞig×Ú(Š–,Yrä‘GŽŽŽ:çÜjWÛº~a ^/gH‰bw¡”’RÍH³H>À&‹ eY“¹7ÈlÛÌc^ÌÿAÚÁÇ—Ê:fæð–+¯.Aœƒg¤lÆ…ê›·X¦ =ÇX¼xñØØ˜àòdÄ›C“W^i3K}–µ•`ŠGÒ*°rf·+Ò¦¹Yú18NœÕؼÖm"ßÇäìŠh=Üb9ì°ÃÎ=÷ÜÃ; SëÑE£ÂýCa!ç*À31«c½ Ü}v„ãõF ‘R2K”dåÊa‹l|yQ©¿§sG}ôßøÆN8!I•)s‡É/Èq¢{½²,÷íÛ'â09eC3°ÐŽ0 )ã8iñÑB,f÷p2Ámát },Kðø 7!ìq¹¡hȸ`Bº’w˪¸}l‚k+ü¨õàã<«¡üL Yä-t9û;mÎ4(¼÷µ­‹îT7òþ¯¼RªwmÏ­pö›VH_+W®<øàƒøÃöz=cL¦3¬MðÜZïý¾}ûÍ`ŸyéXf˜™BL—T$ÚøÂ“j¬%c1¬—˜éÈCõÀ$W ÏA±o] (™SK@+`g3Tú10cؤciùÈR}/þøâÎ_vF>6âœÛµk—\Ò4M÷|pÏv€<ÆcccÀ{–>€g°¬Œ‰4'!4£À78V‚∃ùhã«ãJeøÒ7¤ú_–WgUEVÜÿý###ý~_)e2Æ59;F~8‹ç‹¸$aøÁfD.¨ÇE +Ë2¦`ᇰÙC @*Óº˜åiŸµ`!u}žaðxœ °$0ˆfá²€}ÎÒŠ‰Å)¯qt:™|`h<œ¬Oý«}ùª²z¸J²¤Ñh+ŠÁAƒhGd'¬ $XƒÍÌ 'fhH«åMÎÀG‡ÕZ4…À&™1WÍÕ¿‘ª ©Ó‡dîÏ«òKeüP¬×è={öLNN &S¾»Œ¿gOeC4ìDïwSïžÒFk­íglº-µk-{6¬Ci÷’6ä³$T:î0†!Õ)½Q»£Æ?üðÃ7nìt:yž{ë«Ã*½qV? —“*‰”âì|÷´Vjî)[B`¼§fÌ:¡%Áº>øòf¹Lqm„jLÞ­ KØ †@¼ª‰C¥æ ¢³5Zî2ED€µõäm ,?¸Qè° ¨Ò™g ¸¿Üç}ÊYˆ™ÇQՇ׺¥ízk¬‘Å«º®ó«ru òÇøò]¥Ý`wNìLL£‘ÖºXYøW(¯ýü:B§ü.ÌfZ0—EŒ £.ÃÒ>‹Ê”ӆ鿯@^%p F—ð¬äÆù’ ¨® †ÁNÚˆ@é]ÖByŠ ŠÅw¹Lã±V`³hŒ±›mòí¤ÿú¾9ÕdUE‘Z¤ê¤û‹1mg#iຈ§æô¡3Àøšuö$ú`-EÀÈoi6›˜Ï#â´`ŽD=·Åƒ Ñ ‘¾I[kuC÷ÿ ¯c<“ kÛ—Õõŵ+\ó’¦ÜýêêJ¥ªü~©WÍád¼ÊR¤ …òƯ0oWs× S•™Mrm’ý~–þyÚëõÀ4‹MuyÕº´¥ŒÊ²  Nâl+Ñ¿‚J'0©$`ÔI, Ê¥Ü|‰Ôà•ñ¶ƒ¼„mˆ!1)?,Ô¯ ü|¨Æ€,±Ãt2öEäÃÀïÄŠÀ¦„+Å@;XÍUxC`aÉ®@nq!åìH)ó8pþï›Þ>awcccišn¿|»žÐѪH[]œ[øŽ·ÚÁ9ƒ¨•¿WªžJ®K ¡m>èšåàNãDVç ig1ð­áÁÃ0ÒÅ5.êùŒâ Wáë¡…ç÷o€•±ùk€¤páËù>ìq2wH¼œ8ÄaM“Õ‰;ß©eªªªø‡qül,,/Ds XÓÛ›9 ü É]qexÿ—õ;OŒ¹ hÇÈ[Á6Œ‰ô¦ÔŸç‹Õ—+k­+\z{ÝEk#g]QÅÙE¼:¶ß±JK“å×/OÞ”Øè±È›R؇»“`¨ÃºŸ(1añMÛ~¿ä›R˜Þ–NŠÌ±‚Ïræ )g?¿˜?ã½÷Ê»zH™ÍóÜ%®:­òï÷j·r¯tɉÿ¥Ï>ùž|[¹èwù-ÞïðÚj6>a–=/¯a¾ÂrÂØ<Æ$øi50à©^> 2˱éØÑ* ¼î ŒH8?ý¸o^g4PJE¢‘Ž˜ÜTý ˧(äš‚†¬‹,1B(1W`r;ݱ„ sI‘Ëg&~+¥R“:çld1ôÆPdÿƒ‘ ÛT󈄈Ʋ¤€w Ê<.“¡\‚y/[©¹öK€DÎGþ>½#µ‘Õ? ež5Ê(o}]×ÙË2ÝÐævc¬Á½ÛíÚ›¬}›-Ï,ý]C6#`™UˆÿáÇǃ?¾(£ 5ÆÔuúåÔ.¶ý¿ï»CR*ýB4¶ÏZÙbÆ8R7L|—öE>,šlÌ$@Ëds^°º¾Ï„˜NEsŒ*ûý¾$ô ¼Àt8ÜÜ@BN5/;3]“ŸeÞ’aMkn€µÕÌÌVðgœF Á5@ÜÇXïÓ=™`k˜ùK±Èë·0—C G†ë0~  ƒ†UT´A-ãƒÁ\¬pÊ̆µqª+ª±}„ yö)÷xê',¢ß $~ ÚƒçqÊùŠúÊC‡>ÔOßüÐDOE¼ú?å+Ks³aìc½RŸñŠ3NÞzòuc׉2«DÕÖH«Óé`²­h§kI('ò’ ´MvíE‘¸‰}ìéË2Ì °±•1tE²ÐÃP¤°%c9©Å?‹.Y䊘èÛ~C»ÿ™~|\¬žàjp¹*Á¥Ûíâ·@dsþ–5+`²5 ë9 â±­\\Iˆ IÇÃ-᣻Ó?Ï—­2J"ï|ùòRM«Æ"ĉMÔºØè›1ܬ°x¥šëÎ[ñÌ,0–áxf&…3N2,`]¨7ôФþ5RÌ€ì1å ŸUNœAoÄVÖì´$Ð%,ÕŒZ[×° 8¦ñX¾A_‚††1'¡¡H’¨¹Ö·ðµC ÄJq@ÛØ ´^3àn "ièÝ™¥ ”OrdDXsŸž„HäÌ Â¤Ÿ ¥_mEb¸ $àÞ'?ŒAª[ØËyŽ^?V?~³z³Wþ°ì0¿ÞWƒ/ jã¸ù“¦_éûŸëKùl­Íÿ)¯/¨§¿4½víZnä!ïLwÆÇÇY ãYväL‹Ú‹`bçCFëì‚âç#zy&Y1òÒì€ Y¡,Ë,Ëúý>ô‰™ÑËKËιêª*º!RN5 Yï—ß’|%ÉÞžA(À‹92B(ÄÜh|¸‘ÞFSQþ‘¶°‚ü,_¾ü ƒÂ2 >8~ëÜ`…Ì`¶ÔC¯Éßj2/÷Í7®7ÆÄOĦ0Å©…LË ååNs¾òúÍŒ|0A S €ñ í¤*çð§hW—L*cßü.)° PK¡@C^›gRžÁµ÷¦r"tξ¥S\òÍ$ÓåË—~øá?þøž={Š¢p¿på§ÊÔ§x®PEOB?$DžLÞ{Ÿ/Ê5]`¦Éúív[šLqyWtƒ]Qk¯“›¥TœÄEQجYgÊ)í¨UÙ_Ùà­[·äd†ÉV•P๾ŒmO9!1… *àD˜ÖZkÕUõ‘µßèÝÄŒ•ê2[]ª¾2» ÛlƒïË€-v¼X’§}H üÙq$C¦S2HÈB;rSÔ\g39Õ`¦„ž™ædH~Ø*†mî‚M» UËŒ¹·ÄIEà=@ª@Í3ãaIxiò ͉; 1@ÔŽxüÙÙæž¼òň«Zü¿ždÊ@Qy1,Ò³rž£—W~µZýBõÂjÅ,[iÂèImÆëÔS30ýQ®øÃÂ&ðÌÿktT—ÌÌ‘ÓÈŒb¸-§Ÿ}ÕÔ\1ù@ÚDP&T¸xÃìÍ^d•®Ä [&1yžË›$I¡ ^ÿd¯ÄVYb—" I`3ŠP?ÞÑCÆ4kì.ËCJæ©©)É^"B¥f6éxr®Z*_>zé¨ónéÒ¥gœqF§Óyâ‰'&÷L6¯möÞ×Kþ&Œ£Dkm¿ßÇò„¤É |e6 —±×ë šïh’NØäþÍrG’$²F£Áðý¡3ñ§Mùåà̓ƿ7¼÷λÁÛöIÛøÛ†óŽñ@t®Xãe©nMx•XÒÐÆff(ÂûŠ\Ž0º@Pƒ6E¦ˆ1U6V@‚„~ ædÈÇý3ûÊ*£º_ù΀l=— IDATnbI!,„Êà‡BºÿùL>†bïu’…=?à|òÙM i•½í™ÇÁŸdR6fdžåY9Kñ"3OdQoáÏ )ç¹{Õªþ¼úü*µ §DüU¦’o&ÙUYrõp¹¸¬ˆîÒ›ÓÒ•Î9û1÷buºüÓÀÜildUKÅwÅÑCQík<·¨^‘Tü¼—@1ŒW Ã`(?ðÐeÕE$00ýà‚‡ZðAy_‹oX;`I´øŽ8u®Л7oÞ¾}»€ÑUUå¿‘G·F¬£>_–%ª<Ä&¬A 0aa‰ÑèlX{_r0ÓÆÄ(Ø»¶kÙ9Š"i¥•L•_óš×\qÅ[·nýÊW¾òÈ#”®,€'ë‹ÿÊeÞOA XÑ`elƒôô@‡ç€$“¹1¿oØ1Ûohô÷®¦îjÍñ̈gŒi·Û˜8²¶¬P›&Ù,ÙÇíÞs|yOÖ9'¢jƒÂ€„‹qÆc¹#¬ªªwf/{Y¦ZJiå”S§+¿Í'×'a1©Bð•C"ÃqlŸ÷¹ p (ÒAçÔ\k ŠD@ðÜ1ï™åBæ']n—B„¹ã,Ì 4X…¬>Ç묀öÊBÊÙŸ¯v»}ä‘GnܸÑS¨B«sS­QöV@|QL‰þ1jÕèÿmß/òv•MnOpbP‚Qƒ[@óÌpø|dã¹Þñ42ïï ŒÂØa:WO,†ˆ3Š…jüÆøÇñàOúu]ÕYĻнÁ%_LgTb.ë0ø´„‡¼åøâH:axšøÜeVAE9‹yVJ«!MKÎn·; ”R6²µªÙ¦,°Oæ‘5K˜p)ÀÀŒÞÈ× G|~åÁàë±ã1\ çœßç“¿I`‘R©!ö"]ß\9TcIóp²`O#f'# ;çêãêì¯2­´ÊUú»)>#{% ;BN T ‘˜mÌGŠäÞåyž¯Ì«—Véº4úA¤½6Æ ^>¨–Wåï—É—––àÎÔdÈ@ sKy‡¡Q°Ä–Ï Þ¡(äýJ–Å“~Wwl’c€F¶¹²Áž8 4„“9«94“¢xlWÞÅá9ÓÂ^ÎsËŠVzTvTgT ¾±wïÞº®½òzDÛÁpìï–:êxWì´;â´#FGG×­[7½qºÞ^ë5:~<ŽnxÊj?nöÙëÑ !ÎqÂså‰eyM©´R…jþvS ”ê((¯È œ(ÆónÁ€}˜×ïe Tsu]·ßÖîÞÚÏ'UUǃkÉ“x]¬ÌläEý%¦ÎhDøÐ#F(Z­æ‡_.O›g\jHËÓ ‚/xÍg9¾™mÿ[»ø`‘üSrÏ=÷lÙ²e|||ãÆe»,®(FÞ7RºYÙ1ømc†5yo‚béR­a¼clð¼yÔ­C*e”ËEËí<Ûßúƒs®Óé,€ ñM’Dò.<i Å]5«ìó™-lûµs.qýŸõÓ¤ÍÏ7]ß±73܄̙©t¼bì£È 1‰©WÔ~Âû›¼|’&Þûä¾Ä»úµKÎfŸ,¸¼sÌ…Œ4î (ÅŠ¼ Úí6ú`nìp@·ªz_A*‘3,÷Th à©ò-ÃZ¦)’…e^>ZâË%ÚlWÊ(½ü|ùÊ…YÎsú²Ê~T}ôjuõçÔç$åŒ[k͈齧׾¤¥‘1¦´eáŠü„ÜåÿǵÖZé膨ÚXcªºJL‚~‚ ? Ï7uF•Á|¦Ê ÿüU¾§4“fä¼km©Êþ×ûöqÛüR3Úïd­mµZÓÓÓìN¡C 'øbÆ  ³± Àù-Š"»×.¹hÉàœÁà_J+óŒiÓ tbx Ñ<Àòspq _6Ü?»ŒÚQ©KûˆöFw ^ñC°~Á™›«H,ö"œÁõ`X{*“nK‹S‹üü|û½Û÷<¼§×ëõï'Ç%ú)í÷͹§2ð£ÅLr5¼Q¡HÄ%ЫF©ËŽ ò1T…y,_ [e.ÜpsûË<ì`¢ÆjFXz‡"'Ø•ZëêSUô±(}:µ‘­‹ÚÕ®yv³üã2»(3ß2¸2X‡âÆšè÷h)0¨Ç¬ªJ«ë³êEï^¤úÈ#<ãŒ3vïÞýÀ”kJ½Z»+]zm f``pÀ³R5WBIfÅ™EçÞûEëÕÏ ‰§ÈËR®<ÖP¼÷ñSqœÄÅkŠâ”¢W÷ªº2±)²¢ý±¶‰ èæìA#T‘å ˆu)ÞЉB®ŸñtŽ/ }C¾:oœÀPJcÝ'X ,þIáq ÄèžÙíØgB¡s>ì^Z©g•Ýc•R­V+MS¡9ø½;ÏÅÅõîš+­@÷A)Õl6™+Œö)‡ì(Šj]+=T@X±bÅ\ðôÓO¯]»¶ÓéÈ‚·zõ£¥æ)àÆãJ×?¯_›áûì®ìn1[ªWx«Ãe€$E.¡ ŽÀ{ÐWÕ\_%–_ÃÖ9Þ~eÏx&²âr±ÇS\Åääd€°1s¨f]×ÓÓÓìå¸rž£×ꈫÔU©Ç>¨>¸áø ý¯÷“û’ø±Xý@;SÂlÔ&3z“Ž¿ÏÊy}.u¹ì”Ì ø‚—,Uð‚=À è›ùÓ¼?Ï7ŸhšÛMâ’º®³—fõQuñ§Eë3-n› ¢ˆäÔ[´±±]Ë–zØy’Ð×2ÖŽˆãâü¬\hãMã±F½¥£ =xh ç"”)J>¦|>J¤|t, Œb„æ`"ì}<Ê ˆKÞ‡e`“]±‘Òø^³ñ7ñÃ6îôÒl6vÂxЯ~õ«³,»çž{&&&ô½ºzGEz\³9,û-!Õ1B%¿K.‹IóL×ê™gžùîw¿»}ûö½{÷¢fJ<Ù‚ÔÅ£µº®ýK|y~=Åwź¯sþe~rŤ{Ÿ‹þ6â/f+vØ äxçãÞ­‘1 ƒ¼Ž—EÍUuCÅÀ°6mêbq•tQè–~ ž—ôjÅ µb¥ZyÿÆû/ÿ“ËãNlrSéjvø¶²ö‹½?ÓÞ1}ç¨sÎ;ßÿ\_oÖz»®£¶wY†JÊŒk´Ûm^€è÷û¬™È;ƃÁ ;4KzÉÉ—]vÙùçŸï½ß¼yó3Ï<“oË«ƒ+×r²n‚çsŽ3)Yśо¶AD]"à/ cC0E&àL 5‡0àø°[vÊ•ËKßõú=ºhtÉ’%ÓÓÓõ/kµE)ôˆÖÙ÷Ƀå@¯ ñÉ@žç<φü-lI‡÷?^LQgv,H A» ûŒÚ©P<ЄÆq™QÇv»-ÓŒ‹â‚±~‘¸¯£º«ò¿ÈýiÞ+#®¿SÇ{b_ÿŠEw´_pr ˆ.Dz¯¼1fùòåçœsÎôôô#<" `XËû!…ôfÐ9?Y®k+ò’ÍIyOY]Uù÷›7oϲ¬( ÷bç_ê㿎«ºbj¬ =1üí‘«¨Ë÷–Õ«*w°K¾‘èµÊflæ¶~³ÏÞ™E¦žª½€h:÷îœA»˜¯E~˜3ð1aÕ¯K£,`xËILAiÅÖ|R·½@ØŸ¯ƒÔAF»"ÑFdš™j+»Æ_6Ô¨êü[GNRû]m·ËåžG#‘”TjFóÏ*3>!ŒC1ÚeMIùß<Ï˲ô• ëׯ?ú裳,Ûºukžç²Ê«˜{ü¡ ÍŒ1³øw»]@äþeÕdöX„þ4œØyG¹PɰnºhXBF÷Fõd %7¦l¢X†!‚<Ø/©—ÖÅ[‹ÑËG[#­3Ï<óÌ3ÏܶmÛm·Ý¶aÃ÷=×G?úD@@î‹ÈÍAŒpø¨â³°“){¹&’ŸÀBÀžSÀfVs}¾¥†:*#P¥¡ä#°Í9 y? íJFI œò†©(®‹ß)ÊóÊæß7£DƘⷊìÓYýå:ý¿)Fw\*á’ÂégþÄ‘W@ô³Z¿HÛÅvÆ ×_}¯×Û»w¯ÖÚ-wz·ÖýYf„Tôý~Ÿ¹‘`ÌéåvÌihk­®´zF¹•®º rßwÃr¦ÓÇjµVÕÓ5/?1])¥#]¾µ,/*›ÿÜL?žö¿ÖŽòÏåÉד#qd¯×Û·oŸÞ£ãâì³ä£ h“¬ýÌ€3Cyò«±yÃ3TnV ”Áûy°ªƒ*ˉÂr—%²ð@«a%É|¢—Êé‹ JÒû›ÀF;_, ÷Æ9§¦Tó-Mž–mêºv…c'îåyá÷˜£ ü}qñÔù¼»ØõF{?þñEVgݺueYÖgÔfƒ1{W>`õ°¶4ºéù:Ö¨"íBV$deû``nŒñ—øâäšaÇPžRêm:ùz¨eKj‘‘ê, TÃbÐk)8úè£ßô¦7½â¯Ø±cǾ}û&''÷&{K]y`/8@áÌ»åý¹¶¼<‹2‚¡?l€~ƇË|TÍ<<‚M&ænÀ"гbçž@,`-SÕ‘Q²È®‰ÄtÄèz¬®Î¯Fß:*RèÞ{û¶uC«{g7¹=™ý²™qF ë3žý°ò>MÓøÖxpÙÀìõ3úÑG…²C}im0n«s±“Ðn·%£šLüܱ®'ofZÖuÿ<.ÓÒ®´å)¥ÓÎã7ã&þרF–a»XñAkmÛ¶óæÎÈëF”RnÄi¥ã[bû=›ÿ¤"ÒIýêQ ÒÆ{s(±ƒìóJÔ°ÌààÙø|‡Ø+`1^./”ÑrÒB&•/ DŒˆÑ¡"GcÊ¿(ÛÿÐfìE¾½ñéFþ'yóÓM^…‘Ô%¨/êhwÉçÐ¥}UUö³¶xoáö¸ä'Þ{ÝЃ¯ Ìc&º1rÊáÚv»Ý@Ø5œPo1# ÿ¸³¸×é©ý™uç8[¥”ºWÅݸҳ²ÈåŒZ£ÕÈ>”¥J‚LlâÕЈÏþ»úM«í‡‡Ò>q;ã ˜€è,?Mèãb¨Š‡ˆ3¼ Ì“@#b씹òjF]Ýܱ¼ÅñwkÀ6û@~ o×"á©!;’ô‰”( 5…™6nŸËËÒS¡&+¥êƒêú¨Zwu½½Ö‘Æ=fofÆU¤N”à‚a jî^1ÞLzuš.Ï«¼ü«Òcµ½k{Ñ£äß&nñ†Ûpôæ‹™t°›8†¢UÇ–@CéH:8zPo©õ÷u£Ùòʯòy'/ÞVèH«Þ¬¯"ÐE<ù¸¡ÖÚûô?ÒÎ;;[¾¸å†nxøá‡·lÙòÐCuǺÙë²æûšˆþˆòødwdØfÍÈKsG¬äÑ JB¶æÄ ŠÃ z”V«%øk&6 Ø‹Âõ‡^sÕ\,áJ‘Ï‚^ŠÅÊP»°x „h†¤S‘7P½´Òï×X§•;hŒq¸ú5kM²¦P)LÅëCj›X¯}½½Önø+°„Ÿ¬I⿊«ªÞ]=¥”ÊÕÈÛG|××ûfT<;djúoÞká¾ e8º¬ {ïãÛcEF®ÁB¹è3ìµÖVgTéR§µvY²lìÛcÛ?°=º&Ò÷ë½ïÜÛì6µÖÕ’ªú­*}g*= k“삾Ê2,üËMo6›Ç{lQO?ý4>5¦,@Añ Šr’|dXƒó–Ÿpù˜RåÀpí²¼7ž½ÉP>¬˜µröÛ Ž,ܲ ?Ø#÷^—_“ûowuYež6éß§¥)Ygžaºù±®_Z7ßÓl-j}öÙccc6lX¿~}çÉN¾!//+“ÿHxjªæjò+’©.$UÞ=ãÜqnú¼éU?[µfÍšÁ`Ð=©ëöö kúÆë9Ån@1òóe>,!‰%±™´Êˡ螲,ctQ´¹Pä"·1Ç•»¤g ±-c!l òÜÓ5´PX'ö.X~‚Þ9²EE=ÕÃèžM‰¬µµªáU$ uh‰êksŒ©®¨\ìjW—7•ÍmMûsËö?Þ{µGU·U­Ÿ½GÃËWd=‡K!Í»N€¾Åü~Öž`ÉT^ •ËÈ?ð÷ÀÈ⣈ä!÷ô€% öv¾`§¾Lû_άl¿ÌEÇDîq§{Z5ñ€ËV¤‡dçÎY–¡@A: ÔI˜“1Ã…ÅR“€Õ‚#*A^Yr姉=Î*z©Á›ý?ËáZ’GZëæçšuR×ï«wιæû›nŸóÚKøS¤>ÀŠI˜ b?LI-[¨ ÏÄSªqyH1Þ!ö<0 FMÌ'°[†k@§aÇhÞÚS3JPxWu]‹<ÌØØØÅ_|üñǯ^½úÚk¯í÷ûZkq}–"Åð­B¶Ã0cø)±¾éÝÙ®óÒÎ (¥\îÌ´‰þ!R‘âF-x!mê-Ä@±EâúWí°®bÃ7$6æéPšÀ„Y Œ´‰hpñ&Þ3Nÿd$K– €lÊj†§†=Ó‰«×7jЫ†,¸ß,ì·-sXböø¦ê‹ëº®}÷¡KXÚï÷·]´-{EfÛVߢÑÀñ3– š'V9Q`òÆæ+Ã÷ˬ±š8³·¹®8‹ÉrÂ˲´×Úümyã†F]×›6mR›T´+ªÎ­ê—×îhW~¨Ô•®;u|M¬ø 8rÚòŒ«äÉÉIT9 Ïb_˜·…øÑC̺mŠt£|{`¾nf§­¿°éCéÔϦšh:çâÇc;a™<:ÐÌþà o)€<×r¹x5  Ëμ¹ÉÉ€˜®\`IÀ\:å\žåã‚’ôþ|íP;v5véåÚïñª3´‚Fù¹Ž©­Š$a‚ûj)°^½d3Eî~’3К0SÍuÔÇ Öq R´k^ù\ò1£(Ò‰ö‡úJUµªãí±©fzù5Ö7¼£#? t r¿äk¤PÜ."Su‚õOñ­ÅFgºõÉVçÎNôÙÈÞk½÷þ2ß¿¼ßüýfòôŒZL]%IrÈ!‡ ƒ½{÷ìpnÈðX)r™cî«´ûœ3`€'‘ d¹ÉCOÏNÍfSžSÞ¬àƒyuœ±Y¿pQ,g!ålµÖªVvƒU/UťŶmÛºu«÷¾8»p+\´6Ò¹övŽr{°Z€*0Óø›ß²ÌvZ0‚¡¦)›û*ZÕf²)AÖÒæJ–]õ»±èˆš»ÊŽp€F‡w­‚Z•˜Y ­ + ¤ïpC›ÅÞ²eYj¥“Ÿ$ê5ø³Aý†ÚF¶qS£}A»ª*¯<õ×­[‡1bºN´mØZœzê©^xáA”çùYguß}÷e­lPâ4f²ès±2% ar¥%b6 /]pã-V»÷ÉŇ"I™l¡¦ÁnºÉá×ßeGî)þ°(>^h­Ó¥óÞ{‘‰Á`¦©Ô1ìÑÎ}<ð†`TÉÒÑ8¥à§ÈgÙMy0`;3ÉÐ3a¿UR/[Uñ£ÁØpY±%ÆÿBÊyî^[Ô–ëÔu Õ¸F]óÌÓÏ\xÅ…î§_¢‹‹ôº^~ªÝ×ÊzÌ[eD+ØÆàô€•Ä¥=06Š—wÊ,ë²ó’|¬ô–Ã:¯Í—”åKJ;aok ×?ß[TÇW*RêEQãç")Š‹ÁËÃM´ÜêÍ:þFìÍlχY7Þ<º°äÇ€£-³ xÑ“ødKìn u–C‘¤ò>ƒVC~ K ³ý¸°¸Â@ð8'äÄO`* š*¢Æ­†LŒÅËõ~–ãçí–ÿ1ÂUª}Í‚­`²1jdŒñ¥wÎMMMmݺuÛ¶m­Vkß¾}kÖ¬Ù³gÏ ?¨ëZ•³&ÍÜ™ò6’]d?—»Evà­#P ¿‹ÉL FFÇ–>ïåàâ8C¨ª*ù—$úܰ®Ý슌œÏ~¿ÿì³ÏÊ-@m„¡^l2áqC¿‚aËæ2˜Ì€?) eƒËƒY–€bŒ„Õ Xqx#H­}êBÊy.^ÛÕö=j(I¯÷뫪2·˜äždúëÓëŒäØa¨ áI¶Ö1æ^µ3ß~´Õ­VKtãYÆ‘….é¦HÀâ‚—í:@`”øŒ|˜Q,´Ìº„j®®°Rª<»Œë»g±#õiU^QÖ/­“‡†f—ñÿÕUu^e´I¢Ä>h«½•2ÃØÍVÁ|b ¡V7Þ?Ç‚p*èûBN -ØR XFLЉYéF£1äÏ4 \½²ËràÎw–—BX½Šÿ†G}L‡e^tÆHeyov”€²ö-æŸpÜ ¦„@8ŽjÈîÖZ·ÎUUS¯žzò¾'¯»îº“N:iÇŽ÷Ýwßö‘íýCû鿦€tÄtƲLh– ËÛE¬°Ì$8yg& tss ³½Ùq ^aA}ƒ©'@NSÀŒÀS _ &Þ¾¸ã…SÚ¸{ã± ÔÛ ÓŠs"¿WFA¸Ú¨x½I‘;j¯€y!Ö…”óœ¾jU_­®þ¾ú>BÃØØXQ¾ë£OFÙ_fÉGé@yàÏŽØPrì-ÞÞÂi’‰ÃýhG+Áˆ0%–ÿeW]è1#€r)ˆîÖ2<ÚA ¡ì’LïÔɃIá âãì#™?Ý«fõ`â»b€B:ž.ú‰Ù€bÓÏÃÆý†æñ¶Åjš™ +’%:ÕzØ;âɼŽýù›4MÓ4…Þ%*G) !W[)¶½AY*w„ƒE°ûÅE€|2 Db@»’‹!“ôF0 IDATNk­vîHW¹Êyç6Î1ÛfÂN1öñ«ëZ÷´ÝfÝQnïš½·Ý~ÛêÕ«§§§'Ò‰ÞÑ=•+½}h6*?VtŒ˜¯Æˉ,Á¹ª% J¡…#WxddÄ#;ÂAmÇ*œ¤å‚„£‚˨H_œ·däAãÏ,ðC0;x!÷s™F$©B®€&YGuX” ¥¢-ÉM9?Î(:ÙV0>èÔA¸rþÿ§¨)ßWý–jÉÿŽtÒI>úhQ:Ó¾å¡yŒb¢[,— Ä|¬ÅÖ«Ÿo]ÌKÈœT$@pï,q•”X°ãJ| D6N·a·Á(ŠLÃ(¯\áFFFŽ9昉‰‰Ý»wct©•U…+b5{5oà?,Ø. @ `w0úð0à:ó,‰\"pçà\ Hš ²xaŽQžçˆ’¼îN9»½IÏ¢A,¦9»,lŒ óáañ+–}D`âõ.Jäâ_y—B‘þf ’€@RÌ dƒb˜Ä Ï–å¡ÚeHW‚iš6 Öà¥v][¯ç'n¡@fÅz©|®€—]š'ÞûäÄüp-ï¡0{efÎ1zR7>Ö(¯,½÷ù‡óú‹uÅñÏbÖŒ‘s.© 8uH®UU%_Kâëãü=ygÞûæ5MµSÉâ3oz¢E(ËjoŠŒ¨¡8Põ„ÐØh4àšêgšuƘ½{÷îÙ³‡-^ ÄÙLaÇBL8 žbtQü<òÊ66c0xñ7Ll1à™õz©ð iŒó7ÜfŸËNëëXãuéçõëy¶Xd•}·z÷gÕgå{½ÞÖ­[s>õÅ[ ûE‹…2Ø=Aµ]YüUõÕujÝQê¨á³wˆ²[êdsb#‹ŠR͈Ȳ.»Ë?¡ÑÆQ“ÈØl6Q ¡ø ð¶?›…×u­cÝýD·}E[´*•Öº¼§Lÿ5ºqjÑë´79œù«r—8w™k\Ó0[LR%Ư½½Ûvÿg7?7u3ƒ÷ßl6A)”ÃÉՀܦ8Ž…ã¨$`´Ž4À-–W@Ç\gù'É%Ò€é'7K`F& 5rÀ È8 ŠÊc¸s°Ç–ØØ Æƨø N0£½/‡™È¢ƒ=4T'òü#/Ål#Ë͇yÑÊ3ufSÆ‚¬ç~x¢N¹H]ô!õ¡óÔy»–î*ßTºS\¾4oü~C¥|§Ùë3h/‚èσ;¶á ªxFóAyd® Á<ï‘Íb'lí>5fýf>Q)óS7|>(Š ŠúgµÖÚY—_˜G÷Fñ7b‘Á‡8 £Éx¡ú”±Y?4’ ‘ÓŸç9” Quâ}ÊÅc h<“`¸qm }I\¶‰åv\ÛjiU¾­LOM¯¼ýʕǬüÞ÷¾wÏ+îÙ{Þ^{U?Ÿ5•áVI‚&—  óó=ŠPyÃÉÿL­Pž_F÷E¶k…P×µ«œ)Œ½ß–ç”æNÃã÷aÔkƃ ô&íwû¤J<ð@ñ,÷¹WZÕçÖÍšq£ D£Àâ@<[æEW%p1 Ši(16`™ÿ‹3ɸe|‚Ó8Ã,ÎÏ,Ño6ƈ•×øz–eÃ1\@ò-èž¡ç„ †eCOJ"—/–bT>µLÎ$}JÜG"‡‰léÈq>““Ã0>X¯£øJ¢…’È„£…”óœ¾.T^¨.üªúêx<^T5ÿ£iž2•¯`“%…9Ô[yDÁO “PEXL‘;¤L¡åo¤Š—FcÄDÖìRsU1P¶ðì©úÌÜg–kê ³øTøiƘôã©[ìêß©1N¹æ;›¾ô¬Ølÿ+Brš¥æ%Ê¡ ¥I^—cw"ž]ÉÌSâ²#³“™r›è e¿¬Á`€ìŽÒUúÎ<Ï݋ݢýî?_w饗®X±¢×ëU?®VïX½ñCG>Ê”âáÝ9É¿](¥Ô^5ò™J@ŠE##îà~e™5În”¦]¶lY¯×÷ÞÇ×ÄÙMYû®6÷C¦“®«×U­+[ѾHÅJܸ‡@Š6ùŸäÍë›É¾DÌýx^Èz£Pÿd½äùñ”ÙÌø/S¤âY{)ØœER¼³-.æá„—$ñ@‡™¥= 4’I%[°ÐN"Q8¾e<#‘» Vvv@~‚AW¢¬©EswÌ"á'šww ïà`/Yy싊O„ÅF¢ )g?¼®RW·ý¸/ýÓ—j[{3\¿’:,5ö‚Ts%mx’#ÈÍŠÔ[ÉzèHòlŸ9Ö˜?e‚#ûšHõÔï÷1ѯFŠ2V äö< 2ÞÔ“:ùìpݲv5‚ :¡ YLåTÐd Þ„‘'`¶áû(ZÿÄ¥€­$Ã’˜.àáç@ä>­µÑÕåÕëÝë_ÿú“O>¹ÝnŸþùu]O~grê§Sƒß$_KÀSJu¯ïÚq›Ü”8çܘ›úîÔÈ #éwR!eà*É=Â$Y~|Mˆð(/Ž §Ÿ~ú…^¸jÕªŸüä'pï†<+”RêA5ƈ®Ùl.^¼x÷îÝÕË+å”}Àƒ¢[È` slƒÊΤ‰&ã\ì* ÛŠæ ´L~‚ ¬3AKc%CVì.‡”1\nkàRƒ*d0`žó îYðp±‡ºü z)0Í Èš!lù`NÍljƒ˜Ã‹¨àv²o ‚ü“ Ö¼wŒ J¼µ†”Ã#"toÖÚî7º¾å•Rö¶ùT„Õ…”³_ù3÷9€KÞããåyn%PÂSK)%>iÀ¬±8‚u´l¢Î^ȼîÎ;¡ì…†(è(@{DŠA0”?ˆË¼^ ?GôAtº"GØ??Í ï 0ŽšQÙR3òY >Çq,A ò<€Z­BH{|° Ú«¤Ø_YÊɆ„\%™ÁH9à€µxó雯ZrÕ‰'ž(÷ëàƒ¾è¢‹FFFþsðŸFtÏAÂ7ÆìüçK?¼ÔŽ[•)¥TÐOïN³dæL“ü<‘Åd9ÌÆá‡»ÅV‡WjRíÝ»÷±Ç{öÙg‡0æQZmV°×ã¼UQôHTµ*»ÂF[¢­[·nß¾½Z^ÕËkï½Þ¨Ýî }Þ„-ÂSk¹bP§æíH¨_#)íddç\§Ó‘+<Ü) Ál(Ga1X¹eÚ“ô$\‚æÇ„rf?2»O"µ\±`) 5«ð 1 >v®S$áÕ!2ì,K­‰² }9÷X, È:¿ ýëÀ-€¿%K“â=Eÿ¢~û-mÕSJ©ìš¬`¿ýþv¹¹\H9û•M0Ó,3þΫ3xKÃìA‚º,Á'Pĉ ¡¨1ƒ¡†ñŒ8¦ÀïR$£Â46&é³V#g85Wf›§ô€ÎäÉz 3¼Ù(AžÞÅ‹—e)P;V/Yg>(î ° Ö =€K¼Íƒ[ðy®ÃÍÖ8— DöáÜ;È¿,VÚ¯u-Q[)U¼¸0[L4©\i£eiÔ \ôx”½(kÜÛ`6*#~ *ÉX)ÕúÝV÷ÇÝþkúO?ýô¶mÛ°NÛý|·uN‹o@üº®“k“þ×ú½×ôª[«x﫳+³ÖDIä¿å›ý¦èsKéˆë/âÃøÀ‚¦T{Ë( ‡1d ½dQ×F Á¥3Íøw±±¨Œ‘¥ÈhÆ›1,êÌP3úE¤ xDqìæUSù{Ld!ZˆÐÁöƒh…ÑŸ!]èÏÀC0æ¿‘6Tn´TKrPPbÄ6žU¯©LfÚç¶q1ÔpÇ»Îÿî¤ïHŸïãó|O9X#`~=¦šÌ0fÅFÌÌ­Âö2˱(…sÙ›u ŠMޢ續#¾•l'•,Ÿ.¥£%ŠGùù ŠÄ™Æï ¶ÔÚˆ_¼Áìÿ£–ŸÐh4Ž>úè%K–ËÛ€í 1²é¸ðÀŒg Òu±„IY–yžË³,“´×ëõD-¸×ëMLLlZ³ipóà†é6lØ µ·Û]½zõM·Ý´*ZU|¯ïõzûöí›8gÂÞiëÉZ)õ‚¼àÔSOÉóÜÞh‹ÿV”q‰šŽ¢˜*ñ ÓïáÕÓ&ýQ:øÛAvr6==Ýív‹•EöwYò­llE:ÿRÒÿHõ¤üé \\º¥®ýñv}X]••yjN AUö°Á‘f‚›àÏÆ”?Þ¤Û P3gújæ…žè"S'À5`‘ ½Š¢`¬r´—© ,² VД.f§QF·ä+áȇ|þ 6Æxò\cæÏzê²`2ß%XÃuÇoc’Cw²‹~ÉŇЪßéÍ:£Ï]P’þ/¬IÆr˜î²WaY¼’—|ÇZdfP}3ž‹|4" @óÞ2š–àå‘#àó~þæ?SàÀødÙ1œu|p)óÙ£LžLÌwíÚ555ŰKLÊoÁõ—¯ˆL!<ÞØµfgkV{䆒2"‘0ˆò<Ž4ºªþy}÷›î>ä‡$I²dÉ’ûï¿ÿÖ[o]¿mýÔò©%÷/©ý¬é®'œpÂé§Ÿ¾y󿉉‰4MvEQ܈e+Bžs.>äScA’u±|í“/%ÑK¢âÍÅà#¯|ü‹8¾9ÖkeæØÏ ¸ãàc·Ýé‡tye©µ®Î«ÒO¥v«5ÛMîrèpP$‹w´Ô+¬¨ÀJÐ( ¶I°+ÃFÝ ’Ôu-^ ŠÖu92Eß HŠémX9Psxq¶#XwãÙ¸d€¸OpAƒ’9˜• b`¦‹glŒÁf…ŬÏ÷ ó"`ž‚Þ: Hl‘2Ç•¥ës~‘wǸxulb³xñâC9$ÏóM›6¹Ig·Ùò¤`m¿¾¹XG F´YAVÍÕ­B,&>cÐ|ƒyù›ƒLyDéB‘<˜ q'ÎŒ/£™$nä%i1–…ítä!R€S3ð ƒåv» =cÿ`nöÿ´Çè˜ë_~3Œ¦BB&0&lŠÇQ|Á‡`}’@´‚KcÖaR$.ÐOXU…'™Æ:+qàox-àèà(þ˜ä¡*B×Å)„‡ðP¦`ùNÞžF–’ó3 $Uè–*/Êp“Á¥Oe@À²‹üXNKøk•ÖÔX)™Ê%jµZrq¸•‡=#ók˜ È‚¶,…`­Õ:~$Î.ÈkPAôÞûC¼:I%ŸIÔ_,ìåì¿úô*ª&0©•vÞüÞH´#b$A‘Ö'´€ÛÖ´·°üSs=uP*b¶ ¨ @ o8âì€"THÞ lµZbñLÍHœaŠ Ivgؗ怅½"®FÑáY¾—EjÑ:°¶O¤¹]³ÖE^œò&’·üX¬5°r6‡ožKsÄù¨²Pʾ}û gx Q©žöî ~{à•דºõ-µYéíº²s«I`,1ŸYË‹új®ÑŽ º$à‘ã%Gܵæ´*|'¾ÌXáTÄtPÂîñ†Áâe ¨¢1 ›+rVyu&¿aü#ß((„#‰tEQH;ȵb4Ìí6W3Öm ØÌå‘*D&»èó‚oŒòÒÔ™äÔ‘ TiG<ögn‚~(æüÎõÏ´y§éÝÖk¿±íûÞZÛýx·>¸nþuS=ÿ_Ï`í@}0s§¸öÅmm´Ñ¦wmOuTãC »Ãòš47FÀ˜*ŠšT|v†—Q[Û‚]ÆÅ)k`0| ‹MàÚŽŽ&IÒét:VîQ‹I€ÀƒÊ(ŽcÙ`•R. à…î‰À=ä¤äodG¢+³³®Š†øî€û€8ÕëõXÞ‘ºùsT•`„ă4 ÞøÓà>àƒƒ§dŒqºé«§Ýîà—,™©÷½^þ[yãï_–| :Q´ea°¼7!ßãCakÙH.šô£PÕ/K‹"¨…¨$ëG ½¾÷ó9WØ“Χ]¦ $!Ø û9™aÙY–úW¤ö^d¼„u`€ì¥Äw|”/Lýb§ƒ€qŽ._)Õl6ñ‰@Éqdwdb¬þúc_deTøv<2ìñ`p;ëp‰Jøó°§ÙíÓ¥­¤5ýíi×rZéæšGªTÚ,0Ööw—S¾¥ŒŽ£?”Rµ«v£¿3Zž]fïÌšÓT$É‚¬Tœ $54‡<; 76|cËØ@ý—Ù\\.á9ÁXuñâÅK—.ݱc‡<-#qcÚï[€äÊB[Øàc¦ v0%Éõû}®Ü1³uΉ&ÇÜ ˆ–gO “Ê9^à°:e{4‚³kù3V-ò.‘\R ©°J„šu0:B…Þ{{¯ñýFãŽF]×Úi]é%oX’]šõßÒO?Ác—I)ÿåâðN€G^ŒÇ?©¹Ò/ÌFÁ&?OhÖ™"™ ùP¼IÆuÆ|±HÌ~DØBìÑ@ý@âg ÜzžaþÇERÐk‚#ÂhwàaŠÔÂo@. äG¹þÀÁ2€ˆA¨A[Œó nq °èÍ8ùœÈE»Ÿ—u 7Þ’s&fQóQµÀpN¼Uä9ãL=¨Û—´g5mVZý˜<Ïk+œ[â’;6»­ëÚ­qêeª8©ˆxq!°û š]ã³&)HAŠDÂi@b ÚjTñ¼Ã}=ž[6däÅ”iŒ›„0 ¿alLÆÁ6e:ÍD[™—E ´0Å– ¬Ô"?P~2'$H6@c uäg˜Ì†Ó¬# ùøÏ|PëÑóYbf?kµ¡E“(Ô8^*â9<·wŠdÇØá›D@ÀáÅO¶ `õqXÑ€&Ä0#:~0PHj\L€E)­6‰pfØö¡—ê ˆTKØV'àÈ-¤œý×åì݈+/ã8n·ÛÖÚN§SU•Þ®u®Ý W?\Cf<Žcáç ÞÔ&€Pñþ&wÓP*D!ƒ KP¶i`$P!dš,~ï`0ؾ}{·Û-Š"Ë29¸¼ôß6´lÌÃbÌÃa,Ž7Ñ8•¯‡6'f 朢ðC‚xÁ*\,ÃbSªûÉn}P~2µ‘ÕZwØnÒO¤œe{ža€–ÍÌ@~Ï(¥AP”hÇqQ&Ú)­Ž;î¸+V¬]»vݺuv“ÕMmŽ2ÑÚˆ„Ò”Š¥GͤHÌ~!åìÿWíêXÅQuÔQöP»¶³¶ÿÁ¾;Ðùƒ|ôùHŸ¢£§"ˆÿ㈃ƒË8kîò›;_ þxëš% Fƒ_ GzeèH|—’–Í£‚Ù>OïÑLpÖD “_1ßk@¹´bÀåôñ$†b¤~•ÍIð_\ þ°xÛ½÷ßkøŸz_ymtÇ#TWTå;Êøßc~êÔÌ2 ZFî3XÔ„ù‡A“$Àˆµ¶teY–ív{Ŋ矾sîÙgŸõÞç6¯«:€×™£Œ ËY< T¼‚÷ÆÎfó'‘óýŠÐm@¼‡¯$ê¦ÀÁÄn¾ +H*RßÀ=Å(J‚/3Üä¨H¤VsmÜ‚½+T<,Å? nëaS¬š1Æ¡•n(¤‚iú3)}P:Èu–d#­$k²181mêZ(!PºöÀfƒrma§+¿QIQû#|=Q?ôÐC›6mš˜˜¨ëº>ªÖ¹V;f‡L’äfDùŒ3 ñt±rÇ‘)¹´gî‰\±f³)Ý0 dŽ¿\ñð¾W0Lâ _dz6‡n IDATÀØc¾K,R2¡A HCx@š£)3Øìá=ˆœBÆ \‘F†ˆ¼®/ÿ„5ù\ ÞqoÁ’»8¨h4yr¦HÖPüpW€ôŒ”hް7ÜûÁûgº3Ž’g×(\UNƘÞ-ÌröçËl0vÒú—{ÿŒïÖU 5úþÑ<0zu´¾½¾ùÇM€Ï¾’E·EÁ†?òlŸÃØ}ÀSâÒu9YdÍ‹FCƒ6ØâÕ0ž%â÷Çc9çù;Ôѱ ‡ 6›aºÐ–Úív«Õ’MØùW,@Ny{”g?üL–§–¦cÌz“6Ó•+WžtÒI«V­ºÿþû£_DÙ[2µBN s',±ÃB“R²¨ /÷ U¤+œ®MóKr’ww¸ÉÉÉññqõ«S*×qéºT.K|!ÿ!–±w 1Ë–ß,¸Ç^^à8¾pèèˆAe Z±ùtùvàTs\gIZLXgSvþzÆÀBä3Ã:Fj®¯9;ýð‹¿…·)Ê1¡ÃB&Ñqošýï6±Æ ˆjxóœÎ¹‹ÅÅ6d™¯™[}òÍfóŒ3ÎØ»wïSO=%Ýoeq˜# ^˜#a”:¡XÓëõ&''Ñ á`¼Ä’…¸¡Ð«†0 vV²³®Ò4=ùä“O;í´eË–I ))äÈ#\¶l†³Z2ZË¥CQ¯HµE®†´V@9F£Ñ@.i­¿>Ÿ¼~²(‹<Ï«ºšºi*?+¿ã$ ¢«Ãÿžåë¯H%O> ×L=à;Ž}L¶ xnjFφ3,² Q¾ù<¼ð$ gUÌ*`áqz«ÕˆEÈcÈ Íf“±è@½‰¡é`«Tn"ICHðq’â'‚%Dù7¢_gùÝ€{§U~‹ÌJáRÊ`#XX¬©ìTñT‰Åªñ4!UÈ R3*r† b¼:>>Þét¸¡Ç²Ïy}‡ÇB—³örìÛú`KµÕÔÚ©î±Ý-c[n¬o|Á^üƒm‡oÛµkW6•õ›•˜äÂE[3Û-‘`Î^h ®…â wÊî› a¼¤©f¶15Ayƒ‰³ØbAd!ŠAø×²µêw¶qHmþHx4Â%° Wì¦ÅGutåŽvå{Jw¸+ß^ú÷øî½áûßÿþÖ­[뺮Æ*5På¾R~”, Ê]‹íwè‹HvÁƺIùø###Aq*ß•ç¹ÝixÿÕ²jÏöÈG[ô›‹Ô”£„xÍ':p¹@ÅÆú-{-CE2“ pòæÑJp”Ü#Ãsœ+– ¬Á•—OÜfYN”Cˆ…¬4 É…Ëmþ2ëRdÖǶÜî4M…=Ïm7«BÈÿÊŒtJA¥€ž1¨ÅŽsì ˜šçjøvî)¹Óm6›"7ŽßÂÃTžfa¼ŠÄ‹¥ò’ì(\9™¢»Ã*8ì ‘3Ц(Ò” O>ù$澊ôñ`ܼWÐÿYGkm#kWÛÅo\üÊW¾rçå;;íÎO<1==çyY•ì¥ljþ²Ž"-Š`ö(CPZ„oy¢€x è`÷ÑP&´L‡Å[â%;œiC0}Õ2`#x\± ¨hZ¾LP¼O4sj®kdZ“a ì[.Ì‚/÷Åë ÕW#çdÍ·5z—ö6e›Ò›RßñƘò¢Òl6åÃå³ñ³ w@Èfzµ™C…|x&q^ÞÔZ«jÉ…KÂK5¼S£££q÷z½Àª ,æ&ܧV«¥HD•OóÔ™\¢ú'y?Rš0%M'Û`#ÖKB±á8Ê%³Îæ[°N³L ×‘Æò6ÜH`»`żötáŒUâÁQD‰r| ¥8FæI¬2Ç#úÀ]O;cnEùé„Îrïó·ú˜§ÎÜEž? ý*^îa ÒBÊÙ$é™§®ì•ñâÞk{«ïZÝëõ’$Ù´iÓäädÕ¨ÊW—Ñ·#Ls,F—€³ åàöc Êê2xÒ¸Þa`;*n¬%ìAye‡»ž!£´ ¢{€åG¦Ò1apëa¯@”ÄÚ ×Ñ,<Ê"†ÞûÁŃäö$¾;Ž’Èßìó7æfÚD›¢â¬"}<|j ÷éôƸ¤}X2YÞÌÈÈ ˜¥¢Í+Jæ`Ç›…!¤h§9^n1{°Ê`ÜÅrá ð™E-Ýx_òæ…!’oÊ8Ö0I žw™±2Éó3h3Çg'(9êáððgóp†Îx͈eÔ¥EÃÖ½ì @\7…1\± 7,‘ò=þÌB´ìÓÁêÎAŠbã(~Yöã"5W·—÷˜è² \°ÖdrX¿‘÷¨ h HÆ—sRÎ~Í=…Wǃ “7O>úØ£q÷z½ÊW*UîÅ®ñx£Œ~…- ª‰@¾B‘z Bˆ¯Ì¯p8H-ÿ ![F¤*Gõ$h‰„ x™0?—ÉÊxðxãe¸G¸3°œb ˜›÷7~3˜Óð!`‚9°Œ ðy½÷þ7¼íÚè¡hÑ¢E'tR·Û]{ÃÚ郦³Oe>öååeúÞTk·ÅÅi ^š+ÛŠÍ xL°£›t)²ƒCwôìU uò¯²ìÂ7=ˆtP"´ºq6Ð;"´aFÑ®®\¢`Ç[œjFr Y3,ƒ=Ïe>{F y@•ý^AÄâwä¡€…Åo˜ ·ñ->†Uðy5-ˆTió§âXíDÄç=Plt2¡NÎ a ÈA—?8`rGxXÈK \©`ÌÉBé¼Pk ö´²F@äc}<~±žd>‚žx!åìg`Mkmïµñ!qïÖžú”òÓ>òQöæ¬:²j¾¡YèYÔ!Œ÷T õ–¡€ù 1|ÈP*ÊwaÂÏmÈ œ$ÄÔ¯n0?õT qÂUËÜb>+@KÏù~Ƹ>#B¿"¡~¶g4&˜ÅT–¥_ì]áÜ´{Ñ+_tå•WîØ±ãºë®ËïÌ£“£üã¹ýŽ5™ lDÿÁ…¤¼ù©©)E.œ€"eÁPÆ?ǃ¹ÎwP¢è‚BŇ)¶ŠÜ óoî³ÉQ5£¡×;^É„P7&yð¸šP=HÐg‹@Î58Æàà ÃÀwAƒ€É&8ÀìÁä Í1œñ:(W~h7±]Ë-wáÔù;ö&æö ç5@`û5@¤ž÷® ØÛÂALþ.™Uaòc @cØ#Ý9'¶+ü7¬uÁ¤š ÈåÅcðjƒÉsÏ„÷fo\£g®0P,ù¨ÝXcQ ;Äqy'¨©‘wÕŒÜ/ó\ñ¿0ú”÷)dù½hé°ÙñÁÙÔ>lëj}‚Þ½a÷Ýwß-fˆJ©âôBïÑñ¦X’p0HmÎÒÁcÌ"ÄÉ)ŠJ‰¤<•‘fØR9rÊ_Ÿç¿‘G÷Gz k_ï.T_5?ÚdÎ/µˆh&šffÍ1þHرì ¹l\:€Èë#¨ÍÑ“ñÅ6&CÐÅÁ›ÍÓx!ïGªi€{¬B„©¼Ô˜·ÉPdÀdCÄ Ðn"[¸iC‘7 (%c5cÌ àí.ù³Àž\ (RÉCƒÂm7×v¼Þ€Ž÷=‘½pÍåxCS<ÐÛÆ}”â 6gÍ_¹ù°ržkŠ9¬‚’ã\ t»7åørg6Qe2’š!ù{Œ¸1™çX<\ƒßÌT€0h¹ÖÃãmmÐ…¥í%W>fY–"†.oQ°Ó»wH›ÈCÆ-C^Í ‡ $dmʨôGøzS= ä·Û¦­VTjŸªwÔ<…†¡fl¬qÀ= ü‘}A˜ÆÛQøh€¡˜ósózEÝþB[?©µÓZëêþêÿkïÛ£«ª®õ×ÞgïsNBx…7òP•‡¹¡" 8Ð+Œ¢ý)ööŠÖ1¬XGk©¼÷Òþ èe”*¶ÜA- ?‹ 4 E.„`Ã+ †@„gç¹ÏÙgïõûcÆ/3;^íLˆëûƒNNÎY{ïµÖœkÎo~3Õ+•øU"436³`¥à@ U«VT4N‡È%4n“é„äß¿\× †ƒZP“B )Ü„ 1žÙFKhãFñP0¦ß.QjÊiü8‹DNÃÈyÂWb‰¸¨üçÅd¼¹ªhX2ÉÙt{Ñ8*d¾ä%9…ˆ‚~hØÇšÏðijƚŔFMì8~”/„¹lís¶èþƒkÎ×}#ï›Ç‰- øqœ βãä=erš TîÇË•A\¦ÉDu Ìð5ë²Q]A)_¨Šôñâ¤^xtÎXCœRÅ[b#ÞÅ¥ÝéÃaEø©ˆ»yãBâ­ÂtQ’“/r0ÓÈÊòü'-Q:éƒmŒ­Ÿ³¥I(—7„‡;‰†ç~êjD^ 'f'ì§ìð„…éTÚ{Õ3 ðka)$ ly^ ßNçWZít¼¶`Ú¦¼8‰sazy*Ê›B’éžé@U@î—fÐ4BF:Ç…áÎýŽÖ]g²È6!4Oà Å{l÷ˆ‹:ŽC•>•ÆôÛ½Ôí)÷G®«õôYºvJÓÎ6 7sj¢²|SFØ“7å"åâ‹êKD¨huÀSAjáDäo¨<ˆ‡†ÐšˆÀªðuôD ¸ˆö}t!hŠˆâ˜P(æZª““‚>§‡†ö}Hnº »K§UL-Gxå,ô:ygßðeËA µfggq±Vž/鎯8ô-46 @Éz6ñ‡ï;üHë‹bñô';rÚ%Y/Zcð¬ë:%X0¶uÐù©œ~ Z6ÇÆ nù±ŒWóˆ0üAÜ#Ÿý}Ù$ÉÑLŒ³®ù'ó¶ð‚IÝ {èEü$]îµÕ´¦†¼^úå´iš9Áñ¨ð’Ù$œGé”Sߺ±‹HÿŸ´BHX\‚Í 2=òRɶñx}ž HAβ^½­S&9<Ùnr;#Ë8p`nnî¾}ûΞ=+Ns¯é|ß -!IÎO'ÄþàQÞ¡‹gM(ã%·u·è=o”—u2«Ã:!jÜšø¿ÄeÌüg&TÂÌ—xóÍ1®–©Þ‹2|ðƒµï8gŸfN3|Âð¢.Þ‰sdpîäZ«˜½Ø^}rM({¢O¦8!ñ ùá›S´} N_¢Ž?8Þå–+°'à(ìS7À½ª§Æ|!£€ØNH`BÒ}¦Yê»Xß"âõCðàt]·ÿÕöÚ{ú]×u×scoÆŒOŒÐŠ0…ñà?ó\ßÅ|]@µò<Ï“mŽ­ZµºãŽ;:vìX^^~ñâE)eZ¦¹ãÂåL|® ¢7(§wF;ö?Ùš¦¹GÝðïÃ>Uiì˜é'ÒYÿ–Õ)Õé–·†ñé§Ÿ:Sô¯Ò²¿ ^ reh®L|Þ¿€k>7‰MÔm»ÏÔ…õp€À'À¨ gnÓ°9ò31…þhqÑÙ o_áž)ï΋1}í!èÎûê‚UL,Dšº<>Á£Ä>ÛìKvò É+±@­FíßĪäÁp_ï+œb9o‚Wéâb¹ £Àƒ%ˆý‚ÄÏÏ×¾D™œ&;å J\0íqÄ.|jW¾&È— ßC:WÞ¹žw¥åÎå+ŦŒ•ýÄ*ì&à¿ÁMy™ONúD®1 xÖ|Ncf“]D1„È¿”ʉ…Îhãd>zÛÊ7\›C9ñšî9¥IMÓŒ¿ì ˆƒ"x*¨ëzÆÍhû5w¬›z e®3—b@w„78@ÑßðN°Bt]™¡˜Ëh™D"±uëÖp8\]]N§Í )t!éëCÃ-:"Z¼Ã^:œN|˜~Ìy3G ™º>Ù Î> :#çì'윂œÎ¢ó÷üÞC=¤iZ^^ÞêÕ«ãïÆ#3"æQÓ«®OŸÿ„„ ª)²jFÊK9ó@Û@Ö¬,Ú‚Ÿ$ôõÐïBB6P³% Uë0«y$¹gµ :Ê™iÁ`|/¸>8ÊЩ…«$À\áù"»C#A6‹×Íà0Á»ÑpU\j܇žJáJØ¡Pˆb_¼V *Í:\&¥y°Þ!XÅ Æk¼Äwˆ‡réî¹ò°$Eq‘Þ$Q”Éið|>Z<ñÆ(ƒÙ@šŽG۸ώT6r†XhP}“r†èˆÅ¢a3,ZÞ\Þ—(âY"ßiŒ~›H$È\ñ2 P0¹Ž½ÏÙäº ¤4oÈHÛ µä‚cÎ;(ó=°ÙtÓÈÞð(TÏ‘aÃù€_i·³ek©Ó´rÍÕ]MÓ„Ïòféöve¶ÔmG«¸¤¢íü´GÓ„Wpöp‡ƒÁ¬õYñÉñVo¶*++£û …ä-ÒãµýY[a6~ÅCÇâ7RÊäÇÉÖcZ×Ù?¡ƒc‹báÒpº,Í÷qÑQhåZ—Ü.Æ ëׯŸišÃ‡/**:yò¤l/鄿Õùï”+âZG¾0lý™û /´8dî5éaô@»±í’?JŠ'…ùnƒ)ÍÉî¼|¢œˆ†­€0C Î‚ËÏÊÊ"q[ŸáçÙ0³)[É=ÜXÚ£ù1…V%rE¢¡ × [ÈYû>UYNðƒ=Àoé³³³ÑîÈ×ó ¾&}>·dœ8NÆlª¯¢–v^´½ nhyL›WxõÚ…~­Ÿr°0p@ô€×]sÙs®2ê3º øÊ§}ÒÅØe|nëk€À+o¬Ä¿W×õœœœ®]»æääÀGæºU¼!/sáý? šëÓà`ê ¥E7ʶmJí€#@À²ÄѦ…g¿±žyI/5@¬_4”}£» [‹ïª«f¿?cž02#++ëÆo¼ñÆ©¥‚¾ZÏ Ìx½ëÛG"å€^oåM¯£¶œu+]×ÕŽjZ––˜œÐBu¦ÔyȱÇÚá-aÜažÓB£{ø õ´…{]c³ÁgN]ƒ¢ †{ŸËÅñh ŽãTUUíÙ³çðáÃ%%%Ÿ|òÉÉ“'ãñ8Ï„‘“Óy9ÁW×uïO»¤Î0ÍꈹG‚^g/Ó>ÃÅfˆ@ˆ‘ƒ¸w„¾]^x†OJÙ¡C‡Ž;B`F|!™ÌÓ¥\ôŒ2Á­Ã ö §ÂóÒDÆ8)Žx§¼²sI{o#Bèsã`r t‡?á‡rð,ðf¨–`‚ÑmñÑ™/ ˆ*ÁñÙË…sxê—G­Õ)§)KsxQbJ<ÎŽbì×È©¢BÅÇSä>…58I‡w>™ÈF¿^Ÿ"=Ï÷J)Ûµk×»wï²²2ÐRQZD^!ù¶Øš}$4¾TïBT„[D ±¹£ˆAs^îJûrõ\8 û.­Ì0¿±~x¦Š—ûñZk¾¼i$‚•ës¡Ozoík1B–2ÆâsÍMCi/­I-‘H:t( E"Ã0„)„+¤+u­¾Xäð šÖ6JJywñ…ÊgñZ•¶r9R“7£Uj¦cº†_P1|̾#,MÅ`0صk×H$rîܹ:º¹¬¯ ­Óù>ðºxé6égOÄb±t:OƵ֚;ÀÕ¶i‰K *”ùD挢Uœ±R7Œ€.´ºÙ{ýõ×_wÝuEEE/^L¥Ržô¹ÁxÍ2J}‘¬âº×ðœ’É$…’jkk±4x† ÂrnÎ%ˆãñ3/ÉB_2¤L@Ž ?Õñï…â¼yÄ0¨Ä•‰WJð(ÎD"Aß/v_?'þ «I¡K=)œúC𽼨ƒo&X¡T®î ó*“Ó4±5Ú ¨¡=oÔÇð(¸¼<“Œò¼c4•Å ÜÒ'£ ï ^'¤º(“3ÏêóÔ‘ëºÑh´¦¦›ÎàHÌ&“I乯-Ê(GE”!žH‡Vk¢.gˆ–Ðøá±òC!ß»é¢è‹ JàKÔ#‘Ƴ¦àAù$Ñ fÆÉ Ð: ¾LÏIkÿ %JÅÅÅ0ùÎc§¡Ö<áqET,rŠ¿Ù¶MQ;„¼p¬ó+HïÕM’rÃu]Sšº®ŒºžuÿÂ|àÅŰÙu»I©.nò°ŒÅb§OŸ®6Ò—6¡ØêéVñ%q/êÕ®­Õ4-m¦“Ï&Íÿ4ƒ[‚ŽæàäÊÙÌ(N©‡9ã¼áuöŒ\CëUUUµµµ‰D"d:gÄe!b‚ó-±£‚¿`J-èCOªqk^™ªØÌ8ypš ï”ê;ðr‡nÃZÀ¿átˆ†-6øªÄmîYB†c[š÷‡t¬`ââ< sB3eR¾ '4‘ÿ„˜¿®Š­LNS’¤})ÈáqN¥CIX‡ª¹Ó-JR6^!¼= ×Á%”·àÍžECAìÔ<ÙY¼`‚s‘áBò) û„2l^ôNS–̯âš `pQ[.Ô†ÉXÞˆDó\¶c?˜'ò‚ózi¯-fúîtºO:ð^À0 = ;?ud¶4 |‹ø|º$”€'BÆq´mE8ŒüXÉk>pÐäiTüpm|ºŠìyÙ‘M‘ðÊ0çëkšf¿lgÏΆçÁÓÁǃZ-þd\hBDDöøì@ 5ɳÇ>!þ¤¸«n|l$îK¤ú¤Åt:][[[þïJÚ±:ñ'.¡Dˆºc´ ó)æqý!îÔãOx¡>&?v  ’WÀ¥CE*Wh…Ú7˜„Íq¨âäc8š\M•301œ‡­‡&…4·šb@ðͧ‚(æ™ÓøÚÄ…ðV¿xWÄŠãMóÀ¼@,—_—Rhê `ºè03Hð>>¥ _"HäÎó*-p—}’õ\\™vD¸Ò”`¢O|ÞóÎHä€ÒÆÃÍ‚©¼ðàoáÃ%LðááýB°#øj# ‰è#Fsë‹3“Oôn ú}Ñ÷6îF ‚8ÂbüJC†Œ{ ·—k¿c;º£IÍø/C+ÓôOuìq¼Þ‚<Þ´KIi_w^… K4…£$f+І½ò„ÁYA{©ÜÔþ¢¹®ëôu2Ó2æ>Ó=íº@.œÓ4Í SΨÛn2"à i Zöu,F· ×uCËC©I)m¼š¢?O,Nè'õð²°ã9>–&wê¹) ƒhØO‡-®xä39x†f6‚Õ úØÀ8Í€®ÂkðÓ’á‘.´kjܸ•˜¼Á‡®ë™;2öÓvpwÐ8oH)32™ç2ú3ºpê¹yÈK!ˆç+ІiDUWáäk> Œ F +ÍAºá˪i×õœÄIDATpZ‚ÉßDdežà…ò1é˜1ÔI°!TÊî#(ÓÚöe2OçpXQX<;â£TúÚp¡ŸŠHàÜq63ò(pÞù+<«Ïe`|p¨âQt½å\dÎ_‚G,X‘)æÁøqhÆ×-_KRÊÀ¦€Ôõ‚:ï2x2躮ÐêŠ`ˆUᓟâ´²Iúˆ·!Ažµ/‚jvf;ӑަkTÀMºÄ‹…CƒÍ¥^ ._7?7å²vc­R;¬™3MíœfÚ¦Ôê§%×…ó)£ „cn›áëг#‡ºìÂ>-t6äÜèÄ bš¦I!²3Ùò\5…\±¼ø!-áåÐÎH—† Ú¸Ñw¤åÙ.{O5BDŽ^áDªi¨ˆ—¢ÀQß`0ˆþv‘ ö&ªã8ÚõZzR:ôï!qZž!¥ÔÚkÁöÁøÿ‹g?–Mß…ëâ~¯2F¶†^lÀ«èy•—@À?™xç`©FÔÍûãq-Ѩ˭a4œàÂã°ˆ‰Ñ,÷õ*¯§Ù6|+_½¤ø¢ãWÆ ä%÷Ü»DÙBa$…-ºj(vñYŽÆÛ/ÁNÊ ï!LÉÈÄ@ž€î¥‘0N~t'ù‰ 'œ„ÀÜ…×ì;Ö­ÒŒ”¤”Â2 Áqâ+Ÿ ð"ÄzÓÕ°:ª± ,¾Ðóuþ¦gÎM{ý½Äà ·›ëy^pKÐÛí…·‡aSQ‰‰r`!„B?®Ì&ÑÌ×(™˜·ÒÁΕL&yЕ C€rÉ›ÉRæ¯îë*4£ÒŽ"§¨iš'h4Б‚ÓëqW)8é£QáÀWŒËÜqv¼þ3”a¡›‡…@|ÎÊ–9þ„Øwõ´À†zTOÃçø˜™4Q²ƒh|r`2PÐë®ëº¦«iš¸ ôKºˆ ïO/­‚ÁæQMr®cœÄ„½ÑiìÀ¶ç’¸¤ÿÄczä¶o ¸æMN·nÝ~þóŸÃ©¯«ïc¥d<˜‹3ï{Á™KüHÑXÉŠ“[Яɷ…ñÞš¼?ÏúÄ0(zã£xA’¬On‹_ˆoàúÿÜp‚jÁ)Å>âOqè0ÇŹy>ò^\ÔëP4lÉ# …ùJí|Nâ—6oÜ1Þ·aq¶èàœ Ž¡ò'¡LD½ìþvâ{‰œwsÌBÓuÝä?&_99³r4¡Áâò!A§’2¯‹â­1|4wž#LÁL4”lábhÈ´ñø>?’¢Û.¯óµjö=ÁTþÀÚÝÃ×^–sG}Q;¼Î›=Ó¨p€€åd3ŸVô³ECÅ}úäææ !víÚuüøñ:Œ;VáºîªU«„Ç¿þúë…GŽ)))1Móá‡nòk9zô¨a´º…;wîûì³O?ý4ƒ^¸fÍšd2yë­·8°É/'Noß¾V·¢ªªêoû›âÁÌÊÊB|òÉ'ÕÕÕ=zô¸ë®»h3_»v­bôèÑ]ºtBìÛ·ïóÏ?oӦ͸qã¾ú»Ù¹Ý{ŽøçýÇÏÇÎUÜñƒ¯ÞUM:õã?ž8q¢â7¿ùM*•ŠF£#GŽ,))Y·nmÛUUU§OŸ4hмyójjj¢Ñè®]»úõëצM›æ³¯Íš5Ëqœh4ºiӦѣGïÚµ+??ß¶íÓ§OŸ={vÀ€sçÎD"ÑhtÇŽ ¸páŸþô§t:][[»ÿþ¡C‡6+{³bÅŠ#GŽÄãñC‡åäätìØqöìÙ™L&nÙ²eÔ¨Q………Édòĉ±X¬_¿~¯¿þz"‘ˆF£………–e…B¡&¿Š‚‚‚7ß|sΜ9S¦L¡W|ƒ,++ËËËK¥RçÏŸ/++‡{ôèÑ„—³fÍš·ß~û­·ÞúÉO~‚‹ŠŠ&Ož}úÌž=Û¶mÚ"FŒqàÀµk×Ú¶}æÌ™ÊÊÊ[o½Õ÷µqguqõ¦ ë÷Š®7Y/üWjÊê˯Ï_&¯^zé¥Å‹Oœ8‘þkYýpÏ=÷Äb±eË–Í;WJyàÀ'Ÿ|RJ9lØ0Çq¤”Ï<óÌîÝ»es¿gÏÏó-Z´`Á)åîÝ»Ÿyæþ†'Ÿ|òÀ[·n2eŠ”2‹ÝsÏ=²™)¥œ;wî²eËø éB~ûÛß®\¹RJ™ŸŸ?mÚ4~&L8}úts¸ŠŠŠŠ‚‚‚6~L4È5kÖÌœ9“Þùýß/^”R¾üòËüqiiéøCßß6¶mÛöÊ+¯Ìš5‹þ{îÜ¹ŠŠ )%I GJ9eÊ”­[·bá`ðX8 ,X´hQÓ^ÎÑ£G † Â_yá…&L˜àäÎ;úÓŸòG0iÒ¤Ï>ûlË–-/¾ø¢”²¶¶öÞ{ïmÂkñ<¯  `Ê”)K—.¥WháH)/]ºTVVÆ?qâÄãÇcáœ={vܸq|áüú׿^·n]Ó>C‡­Y³æ¾ûî£ÿb¸ òý÷ß§9‰ ¼÷Þ{kkk—/_>gÎ)ågŸ}6iÒ¤Æ_qª63eõåG»±Mç^º"`ƒÙm4=p•¬èùóçO:uûí··ŒXd*•Z´hÑСC«««[ÀåLŸ>ý—¿üåСC«ªªÕ¼æÐ«W¯Q£FQ àÎ;ï4hþÛ©S§^½zUVVNŸ>}É’%×ÜåôíÛwÔ¨Qº^Ÿ9.++ËÎÎîÖ­Û5w-š¦5ª_¿~üŪªª|ð¹çž£@ôµ…P¸Œ››;qâÄ¡C‡:ô7Þ¸27M³Û´ëv£nuÕé•••øÃ¦M›Ö®]»–±œ;wŽÎ4¯¾ú*/qºF1sæÌY³fíÞ½»{÷Rh†Ø·oßœ9s/^‡¯õkÉÏÏߺu뫯¾ÚbžÎš5kæÏŸÿãÿøµ×^»Ö¯¥¦¦fÕªU»wïÞ½{÷‹/¾xÅ?ÿªçH‹‹‹7mÚ‰D"‘HIIÉæÍ›)Ãví¢gÏž“'OV› Â7†’’’µk×¾ôÒK-ã7}úôáÇ?ÿüó;vìˆD"Ë—/¿Ö¯èÙgŸíÞ½ûÑ£GÕ\mz“s÷ÝwwìØQQ]]]^^Nì…¿G ‡ÃÄ}jX¸pa$B”——_ë¨Âÿ]o²¦nS7È9 —_Õ$UeeåóÏ?O?—––Z–eYÖöíÛ¥”™LföìÙ–eMœ81•JI)mÛ¾ãŽ;,Ëzï½÷\×mVùv"ÌX–U\\,¥tç•W^±,ë±ÇK§ÓRÊx×òè£âgß 3™Ì¼yó,Ë7næØ˜1c,Ëzûí·]×õ<ï¯ý+ýÉ¥K—šüZ6nܸpáBúù£>ºí¶Ûhl”ˆ¶mû®»î²,ëwÞ¡9–——GoˆÇãRÊt:ýØcY–õÊ+¯§Y=ÂÌ™3 ŸÇ™6mšeYO=õ þÂ… 4øuëÖÑà.\hYÖØ±ciî¥R©ûï¿ß²¬?þñ´èšµµµO?ý4ø›7o¦ñWVVÒ\úÙÏ~fYÖ /¼@s騱cô†ÂÂBZ\¯¿þºeY?ü0] §#rê9ùOÇ;ôê¯u½Ézü»…]Êß{qò• VPPPP¸‚¨ŠŠ¹;Åå3åy¿¯Ô¾!(“£     LŽ‚‚‚‚BËB=c-™sÃÞã5ƒz䨛¢    pEpðTì¢Ìý“é8샢OûäöV÷HAAAAáŠàƒ¢ÊT‡öâ‹^Ô¬.GÓY=欯øÚÈNTæÄ«[©   ð­…ìñÝËZnÚŽ}õÛ’Y=_Ø!„VT´ë™_:ö¹?âs¾úï=Ïy3îæ€ºã ßZäüí¤þµ&CM‘¸|~ã<»ì—.]:÷ï™{¦´¸M—ÞÙm;ѯ¿Ž¯=w6Þ£“ºã ßZ8N–¡¯5do.”¼µo÷.]ºh¤8ý_›ðxõ¨§_ÿÚ?v3é^EÿœKêŽ+(((|kq*ë;Ç“í3éä×¾sË¢©ƒút{õåg  I)…gΜÿèþžoÒÝTÀMª;®   ðíE¨mF3¤÷õjúëV¾Óµk—Þ½{ !þ?éIëÞîzÝIEND®B`‚saods9/ds9/doc/user/catalogs/addlabels.png000644 000765 000000 00000132604 11332127303 021025 0ustar00joyewheel000000 000000 ‰PNG  IHDR&ÜmMöóbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ!+G{†š IDATxÚìÝyœ\uèýßïìçÔ¾ïÝÕtv² [DÄqEï£3ˆÎ3úèëÅ,^œË€÷:ÊKî•AQ7ÜÐÄ„=ÝI'½/UÝÕµïuªÎú{þ8UÕÕKB"¨¿Ï+/è®:ÕÕï_U÷·«êTDéº^*•öïßÏ=÷€‹HÕtYÕY†8‡{}$Öe‹À\ÒIt]WU•a.íTŠ¢A’äEnÿä“O^{íµ6› J×õƒþÍßü͵×^›N§—n !\tÈž“Ïšþà;n—1‡Ã½NúþíÛû½ }ÙßÛË‹ÅöíÛ÷Á~PÓ´‹?Õ¯~õ+¯×»uëV]¿¨óº÷Þ{?õ©O=ùä“W_}5U,?ðìÙ³B833/¢Z­–©(/O”ß0•À1ºŽ²°Y„j­¡é:¡ÕÌ+"€¥)Š"ku `8YQeE8­¦B¹† HBàÙrµàYP—d€ÕÌ‹uIÕtcã|¹`hŠ¡©ªØ˜xVÕ4IVv‹P®Öu„H‚0›¸REp MPlÈ‹‰kHŠ¢j§Í”/Õ4Er,]©5CÌBUlhº!´›ùÂ!«©ø@(Ša.!Âj⊡†´b åÚÅ@H’0óli)ÄÄ‹¥’aè B ÕÄw@±!B’<Ç”kõK‡°²¢]Bë6DVµgÍP$ËЕyˆ.ÉÊEA®!/†P$),á«¢´BSduYHED]„¦HîR $AÔ^#CSL³²ºBfaaóZ}ÉZ]×@X†¦H¸2\ !Tï€(Òš‰ÅŒ_ÔA¼â/ójµ ¨Õj™Læ7nAI’™LFÅ lÖîë_ÿ:Çq}}}GŽ¡8pÍ5×\ä÷gl (å2ÃýGßóÆÌ3+»|¹bu&UpÙwohòìTCRÂ>»#àîãª'ä–žJÚL\_ÔŸLd3…ª×a¬ A»NÎf>;-pôŠˆ·R“¦Y‡…wöcc³•Z#à¶ú¨Àpÿ0C“Ñ K§èáñY‹Àöuû2™Ò\¶ä¶›|+BãgÆUM‹ø·cøôÏR½a$kcñ´ÝÌÙ{³Ó©BYô9Í&<Ü?D“DwÐE ÜðpÜÌ3+Ú«àî N M‹ %â³;îáþ1–¡zBn€áɤÕÄ®ê$çr™BÅã0VDFNCºNÎf>;%pôа·"¶ =Áøøl¹Ö¸,¾hp¸˜¡ÈhÐ…zxlÖ"°}]¾L¶ ñö†ÆÇUU‹øVO òHª6KÛÍœ-˜-œ”‰oB"Þ|IŒ§ò-HLlÈa¯Ýô ÷²4ÙòÈOÎ-„GOºüNÞ>©Ö¥ÉÙ¿Ëâï9$WšË”Ü6“wEhbp\Yé yUmA±t¾\ó9ÍA&<Ü?D5!ÂðpÌÄ3+#Þ|YŒ'óΛ+ämAÜ2$Z*™Oç+»É¿r",qtBèe +»|Ù\)‘)¹m‚wExbpBQÕ°Ïaó:‡Æy†ê {U¥šx:_Z ¡ÍÂðÐ2éáX­.‡½6wD9d qX†§–îxju¹ ÌLÌ•ªõÑtC–±ÌÊ.6WNdŠMÈÙ YQ#-ÇP½a¨ê£±”ÍÌÙ¢¹x:WªyæàÊyÓ)”ÅX2ï´ ®$ä±¹Ãó• †'æ¬&¶o!dìô(B(âwÛðà¤ÊÄLfÄiñÓ¡áþ¡%_6WiAB“ƒ“ÒHCÓG¦/Â1+º¼ÅŠ›kC⪪7/.þ÷¹q[ä"ówžä|§Zö|EQ¤iúÚk¯=pàõ¡}(™LÎÎÎ^¹ˆÔñƘ7ÝAg¦X‹§J»9pž©IZÄëxìNM°4Ýpª:žNÛÌ|wÀ5=—OD¿Ó ºœ×ÑãwZÍÂѳqc»ÎrMšLä]VS4èO–jrÈcï8|”¦¨.¿“$©ÓãsVï:™r"[ñ:,Ñ ëð™é†ŠzN·ÃrèôÏ0]g]ÖÆâY‡EèºFbÙ\¹tÙ¢A׾㣠#'DZ'‡gÍ<×t抵Xªä¶™£Aש‘ÙjC‹xíA¯£ ñ;u M§mf>pM'ó©B­ é׌6³éèÙX"v@&“Åšòغ®&$à$)j`lÎ*pÝAW"79:8ÝPP4àt;¬‡NOq Óp6mÔ€\cñ&¤{âàyî„ 8s%1–*ºmæî&Dxí!Ÿsÿ©q–¦»€¡É”ÍÄGƒ®éd¡2¡"Øpج¦£gc»r¶²÷Ø(MR]EQcsëºær•ÙLÅë°D®£g§ë Šúgâ:!3Ùl¹pY£A÷ïB‚ì 8ž;1»Ën~éLœ¦¨î€]ÕÁH>›wXø Ç6*eKõ°ÛêuZŽœ›Uì 9†>5š4qlÄg+T¤xºì±›·Ã|ðt¢!0[ ¸,>§åäè\CA+CNÓòëX¢P¨4!‡Úr1Äç0ûÝÖ3骤õúív‹éðÙ–¦»AÒ¥l©r[½NËÑ¡yÈÉ6¤&ÅSMÈp,[•nŸÝã0<kB™ÊÚL\ÈkKäªÉ|-à´ø\-HÐi¸cC žeºü¶JCmCÆ…|EŠxl^§¹ Ú!I L¤-<ñÙ2¥úl¦âs˜ý.ë™Étµ¡õøív«éåyŸÍ;Ì|Ðc‹¥Ë™b=ä¶ú@˜6¤X“c©’Çf x¬Ãñ\ITº}6ÃrðtŒ&©¨ß®b¸™[IÖ ˆ‰;6”à¦Ëo«5´É¹‚Ë*B^Œ‚Œí$I Œ§-<öÙ2¥Æ2›éåÁ&DÒÐØLRé„ÈXv²-H×RHMéöÙÜvËÁ31ª9׆äkÉ\-à´ø]–S£Éº¢¯ :Ì&þèP‚[™Hó)â±z–CK!^[¶Ü™Ê‡Íüòà ³òÚb™yȱ6„eNŒ$މøí !ù6ä¥31’¤¢’±.ô§ê²¾bDÒ&MÈä\1W–"«Çi948ƒ²§ I™;!vsÀmœÊTª9Ô‚È›ÉÛÍ|Èk‹g*éb=ä²ø\ÖcC‰È\"*±dÉm3ÜÖ‘x¾X“»½¶S¸øyclÙ9ÎÆòßüå™á™Â¢ß“^»ðÉwn¿fCxÙAµ§æ‘çN²4©jè†Í]©‚ø^üÍñ©«×‡îû«Í½;„PUUcw¢}ÊdAüß¿=÷¿~Úÿí_ž)´¿‰çO|õ¹ãüèØ÷·'PÇ1W¯ó_Ýg±•Ki¤$©¡âbþÝ–;¯êb¥ÌùNâ´òw]³ÂªeõšHR«ÂŽ;.­qª˜¥ÊÓrFÕtcã»®Y±Ö ©è7ëR.v²;×úÌ,©êàÂßFªØ˜JW\6Ám7M$Ë…šÒí³™îøh 䊠]ÖÀ¹xÁ,pA·%Y¨'ò¢ßi¶[„sñBMÒW„ì4MŸKÓ4Ýí³UÚø\Ùaå}Ns,]ÉV¤°×j1q§ÆÓ*‚}a‡à™éœÀ³a%[nij5Ãä´™Fg‹åºÚ° {|$EPTOÀ.*úÈlÑjæüNËl®–*6‚n‹ÍŸžÊÕUÔr@‚ìŸÈ²,Óå³jŠñ,„YaÛŸÓì°çâ…ª¤¯Ú™%»…÷9ͱL5[nC2ŠÞ‚Låø&D2 .›it¶Xª«=ÏsÇF›z$‘oBìþÌT®® •!$BRó|MéòYÍ‹ 1bM•ê³ÄÚaècijRjC2e)ì±ZÍÜ©ñ¬Ü„g¦r<Ç„½–lYŠeª»Ée3&šÁ€ !.K"_Kë…‚$û'2¤XS&S§Mð8L“Ér¾*wù¬f?>š¹"dWtp6–7 lÐmM—mÈP¼P•´A;ÃÒ'FÓMwûm•†6¶b±š¹SYY«Â§›k®"/‚Dý6çŽÌC†gŠV“ç!Ó¹º‚ú‚¤NMd–îòY‹âòciÉ•K!¹¥öøhš¢é¨ßV•æ!ñL5S–B‹ÕÌ÷Od% ô-‚TåX¦ênCÄÞÄÒ†ê—Ù€ˆmÈx†aènŸ­d@¬Ë@t°Z™)TZoÐÎ-‚$ÚZº0 !äé©Ç1¯5߆ØMcs¥b r|$Iª7`o¨MHÀe™Ë‹sÄ* ÐH²ì´ ^‡i2]ÎUåˆ×j6ñÆ,¸¤y³è^²ýgf—Î@º(þhþ÷ÿâ;Öž|ᬪ鵆òµŸzzϹ'~sæ7ǧ/ ÎL¤Ûÿ „TûÄsùÚ‹§gý™oýòôGoß´&âúÉKcOüæŒ(©€ïî9û×ׯ3ng!tD˜8¶Ëc©æçö•$8—Ì\½ãJ›ÃõÛdÈÉoì¶Ÿ)¹-¬ÏÎ#„ „³91èìLë’Xé&¶»3"˜*ÚLôe]v›@ç*ò‰‰< 47&©’³éˆ@€Èæ ¿|ñØÈl©¡ ¸·¯rö…™Rƒ"a½”–*9†œ&ò-[B=GÐɽx.'«hMØfbÉd±qt4ç03×®ófÊ †"Žå³eÉcc]Vn:#«J¯ßLÓÔ`¬¨èpc·µÚ@ÉŠ…gBnSª(¥Š S°˜ØñdµZ×V‡¬SФVÌEQejN çµññl=_‘£^3ÏÐçfÊ’6tÛë K”LÝå1gÊÊ\¾î·ó37™ª–Eµ/`!Ij`º ¹:d)×µ©TÕnbNa®ÐÈ”¤ˆÛd☑ي(éë"6U'†ãEŽ¡{|æ\U™ÍŠç²òMˆo²©ÛZé„”¤T¡t ÖN\â³ó3Ùz®"w{Í3ËÐgã%ãNWóÀ ðüw ÷ ÷߸æk?íW5½X•ÿõ™ö ®\¼¬Ç»èŒæGNÔoû«+zž?2iLoü¬?ä±¼|.Q®Iš">ñŽË['mÞ±VµÉTesØýݲ3SV~u"f±9oÝì{ùȉÑíë<èð˃WïºjmÈ4OöD+Ýt*W¾bCwljB׊$}nê7® óPñ8­~3ˆÅcÛWD¡Â$Ê ÐaüCºœö[¯¿êê:6Y-Kà-ۺʹTEL¨BèqX7¯ð8=,Jª$VgÇA®²kûfšÐRÉØM7Ô+y ²·lò¿tjääÙñ|,gqw»-–x®Q¬©½^€äè\MVÁ–nk®¦Å2uKG=|¢ gÊRÐÎYxz*]¯6´5A³¢ÁÉtAr}Ø”*«³ù†ÃÄì\¿IÄH¢¦hpkÔœ©hñ\ÝÊ3a7›—r9ìäy–šH‹¢¤¯™ë2šHW)’\0%ËÊ\¡á¶°n ;!ȱdM:$Ð ´ `1d&/å«J·[`:!’>™9šZéoB¼VÎa¦§³²x>vñ‰¼”}ˆ:Wh¸Ì¬Çº ds·µPÓ§3¢`@Šr¦t>ц؅…šO‰u]±T%4‘ª± ¬ÓÌLgeQíó™ FæZªÏÖ-<é€,5™k’¾.dn¨h"U%IrMД,5!Þ6ÄÓ‚(‹!sE9]’vÎÊÓ“™zµ®­nAô&D›Í×íp´!Q²e9ìäM5™®·!“©*A’kB›Qz<¹ÂÐ=OOeꕺ¶:`Ru8š¬êˆØ6¥*Úln¤Ëųç$Kr²(y¬¬ÓÌIJÒE@BŽEІ¤Jj¢Ðp.„Pd Òe)ˆ‹!~;g@ÆRU »š›À; \¶Ô Eõù…dII+ëê„@bt®&w@Ìq/„d굆“©*AkB¦TYMä›™\£0%¥ù˜¼Ä:O ¸íŠÞuÝ.ãœö JÄÓS™óÝʹýÊIþgu¨ík»}K_ØyÞ‘ã± sÓ:áó‡'“™ÉLûôÿt÷u×oî^ôXNUB¿;“=s6¶¨·]•(Öž?{ëfï½æ^746<âš™ÙÙ½/õÛßrM>—ýÕ¾­«ü^¦>SÍ)JôXÿ¹*âWõ„7EL K85ðüKC÷ßèsS‰T éµG€²¬ÌÎ&fæRS“é¾uþ{ßÛ;S%ï¼e'€45“N ÇsvÊ|°Âå ôß}J[7®_ë¥^KËrÏ‹_>2–§ìa Ó9¥\×zÜ„ÄdV’T°¥KHU´™¼ÄÑTŸŸÎ)¹ªâ·2VšÊÊ5I_íçë Šç%U‡WôðÓy5U’­<vÒÓ9¹(ª]N–¦ˆÉ¬ÔÑÆ°õx^¦Hr]ˆ›Ê)ÙŠâ¶0N 5•+ }¥—SuËKŠ.šf‹ê\Q6±TÔÃNç”BM ÙY%§²²(¡uA¾"¡x^Ö±±‹›Î©é²ì0Ñ>=“@”å!>+c¨éœ\mè«ý|]}CSY©.£ËZ²bfÜj:§Tꚉç%Y—wÏCz<ìtNÉ×Ôày ›º¸)"Ð~;=—KâÈæˆ©hñ¼ÄÒÔªó@*е ±¼š,ÉVŽŽ¸šH"×etYˆ/´ ëCÜtNÉ´ SmñŒ$«`[·(©‰‚,0Tï²_mA¶-‰ºYH,P‹!SÄÇI-Èö(/¨É’l1 y¹X3 äbÑ ¡ÝÚ€¬ðp:±¥/;WòU5hgL,9™•EIoC4@\Ñ‚Ø:`§§sM± „\à¦òJ®²²ÊÇI*X¡".¦ air²)Šz—-!k˜rv‹ˆ¨×õ¨“†LæI[Ãl¢¤Í•5Š$. ÒC¥(ê^3å0‘ãYE”Ñj/SWP¼¨ªÜÑÍŒfÔlU31ä 75’QË =b§YN攆6™LMK5à•]ÌÙ”Ru§@ù-äXV­Ih¥›Vu/ª² ¶GØé¼š,kE®ñQÃ¥T×VÊÌÁ‰œR—Ñ:?Sn ™¢ªépg}.­ækš##j4«VzÔID²¥! â²=”nB\ !3EMÑàUËAÂvš¥áD ’­é‰’ŠÐBˆÍ€è+A j²¬±±ÆG·!–å W÷ÐCi5_Ó¬Ùå¤F³je$ÄÎU´¹’FĦ}.­EݳBwBƲj¦¢™r…§ ¡¸&]`r"š-©ºI+…šîH¿ϪUI_á¦5bUVÁå6VÐ ÈZâ·RÖ6ÄÇ”%4[TÕó@º4IÀ„™‡„; æ&d•‡®«`¦¨ñœš©hC®ôP#Yµ\_’(©‚WF™³iµPÓ°QcÄEëÄò‹!ëôPº !Æ—B¢óî6Ä1Ùb’-QÒˆ%‰œR“Ð*-© ^T \ÙÍ.…„l¿dg$Ø‚ô.‚µdi!Ä2Yëc*óf8­æjše„„“yERš¹’ bs â6Q39Þ†h ^hB&rjº¢ Ù祆3MˆÀ4!L¾büx:øå!Û"l¼¨Í•4†"Öw@l9‘SD­õ1U Í”BØyH—ƒ¦I8Ñ‚¤*š¦/¸cíôdöÉßœ÷–5ÿÁ¿~h—Ë&,»#@û†ÍÒ}ÜZ²kÜçŸ8°èn¸½§¦WE\o½bÅ¢]¨ESÑm>rÛ&UG¿96iœòK¾~ç†Ùyß„4–ïvs[/÷ñ,%Ö¥çw°ÞP~®xú•ñ³#Cc¾5;‡d E’D4 @±¦7öNÅßýÙž½½·_ù–-梨þ|Ï!Ä»U2Æ›q+Çïu¿÷m7(:xy(ýûs¹£s|׉ ¢Hc @ÕQ²Xl+?r×M??™Þ7¿æê+n5[Rùês¿ÚY½ A°fD0€.; I0‘×e n ÀÙ’ž¬"„ˆ]ðDB¯HÀ%~ Êju®rÁ†ŠâE¤èÄU0”Õs5ÄRÄz?Hê5„¬„‰c9]Ráe>˜­¡DiˆØ'ZY6ŽèvÀ³i]T@¯ƒÐ˜.ê²/ÁÉ‚ž©!‚ ¶„੤^•€ÏL88’Õ*\ë Í”ª×tƒÓI½PGf†èsÃ3i½&ƒ.A“`<ׄ$Êz²‚tDìŒ.ésAIE±"RtxU· ü°?©×d´æ¥Ø'ç´rc10]X Ù‚'“zU^ÓòÝàLR/Ô‘‰!V-„LätIƒ›0QYá‰Àˆ•tE›‡0±Á’zÕ€°Ð€lðÁœØ„\§ ;éq€É|2µÄÕ ‘[®„&Vyà™”^“AÄF° (UA"vFqòDÀ ‡2Mˆ¬5!W†áHVÏÖC—u@,,=/YY"Ú Mȶ œ.êé*‚±- OÎ5!ngõ† ×,„ ¦ôüR&òº¤ÂÍ~˜¬ dëZ݆­ð\F«+påBȨ!ç! aåàXNo¨pƒæëh¶¼Ò〃-\ Ķ0<5§W$à1nÓ<¤&£x ©:qu´ ‹1 IDATLëy 4±ÆO/l:$dƒç2ºQt0]\¡Ib£ö/¬÷ÂB%ÊHՉ뢠N+guD$Ö‚lÓ ZCkÜçx›°ài0¾¢£ùá1WMsVo%cëNN•S± ·ê³ï¯N¼\«Ö,+¯þÕ~¥17Øk2mkÔ=ÿíþvvt¼n•ˆE7Ñh8G¨:ÜäÕæªD² uoŠªãTCvôØõS)BÖà ‡®ê`²5^T‡³d¾I^T%(I>rrèl–Pt¸Þ­êp¶5wu©GTU&¬qiÇ“”¬n¢0V€ª·ùµé"‘¡ŽàMÝêÁª¡fýt†P4¸Ú©‰ Œ• †àΰ:"K È`“O;2GI*Y™AÃ9BYénBl»®#0Y„j„€ðŠzh¶ qñ¯YëÒŽ')© É_²è§3„¼ruX=Ý‚l>$U%æªPGðÆnõPœªÇ2+‚êHŽÌ‰€ðªzh–j¨ÀgBn f EƒëÜZ±¹.¢OPâÑŽÏQ’º¬ˆ!Àhª:ÜúJUN­®Àé2ÔtxuH=nB¶øµÃs”¤‚ YZ‹ 3T]V¬pè'S„¬ÁÞ…ÑübˆWX)5àL¹™£*h°®BÎCâ%"½â\it@ΤÉbÒ !V µ!µW€€6$ ŽæÉ\B¯ ÏC<© ¹6¢ž˜£Êh°Þ£[ ñiñ2‘®µ~< "V} ½²#¤¶ [—ƒ\æÑ25"Q…:‚7t«‡g(QV¦ =v˜(BU‡ÛêXžÌÖ!„ðê°úÒÈZ·V^ ¡æ!+âH0’‡ª·,qt@úœš¤Á©R ’!‹uH“`k@;œ $ÌÈÆ¢¡ìbó“@R´eç `:UBËÝdipù,œ±tÅØ-â±>úñ›ŽÌ}ééC€|¥^®I‹ws:ét:›Í.º³OÕt–¦HrñÄûý©éþþ€'² Bº]îѬ›ùâÿüß²µ—mln„B€Bi Òu!@ȸ‘BH´>H× A‚Ö·‹t­uS€Ñ“ê´ÓY!°Î%¥%Zßèé€Ph¤À¶zÓe:·ÒmUN¦9„À*§ÜhCõþLR?8+,…¤D*µâTŽ%9„@¯]„xMª¿R’ÈÙóCº¬ G¡ÑƒÎqñZ´ qÈ’§Û,[• ŽDWš Yµ³Ú¹<Û‚©!¸>"îŸØXmS9Ú„(€qâk ˜¢D튴 ‚ê7u@dr¶BA® ‰G“|]…&Zß쑵 <…F `‹·»hÈUúé,[‘ –DWêZ§Í±€ËÜRz„Wthcõ5Ny)d»¯1Zd ‚„èúHý÷qACÀ'¨“6ek]RyYˆW:”Xñ4â:»Âi=6åDšCô9dY‡ÓåóBfÕÙɈdÒ€„Åý³MÈZ§|$É!zl /ñ jЬ dšŠLÎT)@¶x¥—aƒxx9 (ý9S¢3U¶b¢´ÍîÚÁ¤•€ (HfZ*òDkbRd2õ&dÿœ ²ÉU.ò…dIý*_e_ ââÔ3-HA¢æZ£i‹l@õé‹‚¸y%d’OeM$D+lºJÄ«,Mè[=µ Cb²Þ„\å«HÚtœ¬Òk•Ž5!’†ÀT…kBJ|E¾hHÆ"kÐʨëõ—S¢ˆY¢ 4Vâ)mpÖ¦—B8%dnA¬º693‰K!Œ>T8/ÄÁ*+¬Ò±Œ™€¨Ç"éL–9Š@›]µ‘_^ññ²»Ye¯[íÞê1B«ëœó†@£Mˆ«°ù‹„¸k§ó&Q%JÛ꩘³ÉÊhç ‚IÕ™t r0iÓB¢ µ ›\µÑ_–Éù³†ÀÇËN=Ý‚”d*QkBŽg,Ò"ˆIbÈÄ!ƪ‹!.N‰˜å“Y Q¯µ!iD¬ÊÒÚâ®æMµóCÖ8Ät r¥¯úRÒ¢!è`Õ•¶ÆÑt˜¸„“=¼r:oZb–4ÂB«œõC) QØ$³¤n@Ö;ÄxÍ7.R0;ùòÑoÜ[,ä_ñhÚÍÌÌìß¿ÿ=ïyO¥R¹ø½«ýë_ûýþU«V#ç"_ù†¦i·ÛMtÞDºÈ§­õæCúËüƒfóÚÿÛ´öVDñù´Ð?ã?AÄT¯*pºÆÑZk«öçMU•â(m½½¼?iGz8‰'Õ³EI€^K-QcR –!õÎòþ¤ME„•QºL⑌BªÆ+\H¬´Ô¦*\VbXRßâ*ísè€p°ŠkœÈYæ!UÞ€ 4!úeŽò‹-ˆ@©ƒEI€Km®Æ$ë,CêåI›‚+£tŸ2Ü‚lq–ö´ FîÏ› t›Å¼DÎt@ê:i2 ©&„„Ë@6;K{çì: ì¬âçêdzMˆ¨À©äô+@Äd6 —9ÊSDí6‹‡3VЄ ñŠ`@FJ|Q¦YRßê,íI8ô&DZ Yo¯ËZêi¢µÕÖêÁ„‚úpÉd@¦; ¿oA|6ÕEµ Yc«žÎ›**Å‘ &J,˜ˆóC¢MGce"Ðjku¤Ä–@œóz±r¼ ±5!>^¢ >Ô‚Ä*LFb˜Ea1„"Ð[õL¡ Ùè(#Ýœd¦”3s2Wg]æ(¿”¶Éˆ°2jODGMÈ*ku´Äm®ÒïNVv1Ò©H¼65R @hB3 +,µXm1ÄÆ*A¡~,k†Mõ† '›Ê`ÁT>?$jÓCi«ŒH+­ö˜k/§ç!£-ÈX ²Õ€ÂÉÊ.V:•·èZ9‘µˆ%PÚZ[õ@ Âj¯1™Ãú&gyŸa”P 25B„²²Ì£$ó+¼ê]«/ò•ÖŒ3"þ€—åiMâ ðÏÆ(²§jfŽÔzL•±ª¹¬0fJYc)Èx„¦n¦äÁ’&P˜¯ædf®Áó¤ºÒ\>UpH:e§¥.¡z4ï" ðq"h¬ja ½[¨ÆD!/³&JYc)̺ \LÝÉ4ŠvŠ@!®VU©¸hâHm…©|¶l­i´…’WšÊ‡²n¡—­3„6\±2„Þ%T’ 6-q©ö™KGr.N¦áçÄ' A Û‚”ÆL)k-ÅýËA ¢£Ñ‚¹ dµ¥ô’¡ë.¦Ñ߂Ԗƒô-„ • H5Õ9šw©ˆt0@ àDY‡“53KjÑÈšyHòB'êOª+Måþ¢½¡S6Zê*Gr. Âz·P‹|®9¸â äj5•4 ½¦òPÙZUi %÷™K/µ ,¡•­4¡wñ‹!JR;Þ‚¨‰6ÄÚ„¸™†…’Ï”l" !-H´B4z’@A®&ªDì‚n!$%ñ©®2—µ A®v<¿ÒcªLTÍÅ%+%Ÿ)Ù)…ùZ±Ya* íu²ÑrT¨6 ¬H4ZiBfD>'s&²óªÕð0S„¬²4!¶Îê¹²&ô_Í4ØTƒHµÏ\>–w*ˆtÐW;žw¸šªÃ‰yˆ©ØºjhAl’LÍ.…˜*‡s.  .¡:+òY™3‘êjKéPó‡½áaê-ˆX_©¨´…RVYJ³n¡‡­óçÏ;dDÚi)Ä׎µ š&jf–Ð{L•ɪ©¨°fJY4^óy³ì \ä¼™?•Íf;xð`­V[úÑù>˜H=õâ´ÉÝõFz«‰.®XÑØ‚Â6˜Sçj ,¡öp…!Ñð25 j É XÉç’²¥ª1€Íæ¹SÕÀBJ¦6QwBlYÒɬb¬5¥Çë.Y'i¨­²ƒ5ÀE‹©Ä6@_È+|Iå›ÌsU?P •[Ý?SA¦d3`•7lu&Ú`N Tý;Õ°Sõ©†Ã€T56ß‚ Õ<ªá C5ÀÃÔèW‚x™Úx "ëdfâ”uŠ‚új!c@œ´hz%H˜-´ ÀäBè²óB˜¼"6˜RCbÒËÎ-¬às)Ù\ÕØ‹ƒd&êI§(¨¯2gæ!r¼aD¹BAmB6š“§«¾å )[ ÈŒdµÕp´ ®X»0„®1„6Û„äÓ²©²b&%S¯»A¶¬ 2#_b&åX RTùâBO(® ©€–B6š“ýÕ€qÒõɺ)Õ4Ú€¬7¥†EІPWðùs5ïÅAd?S[YcÊL¶!¦Ì™ª©›IiYÈ™ªO_ñ1UØ‚ô ÙÙW‚ˆkAFD·‚H†ÐVð9â¦kl ÒËç3¯Q™6 Bf²átŠ„úÚÄA×- \Q囚OG'”.®4Ü‚ÍÍC¬¢Æ?PÄJ5\ËCÒ‡‡æúo·ÖÅKøežÍfÏœ9sÝu×5WܸýññãÇív{8VUõbÎ¥=ŠvìØÍfó·¾õ-EQ¥R©V«ƒAüfG8‡{•% ›Íf±Xt]ùÊW¾B1 ó®w½«\.‘Ïç‹ÅâêÕ«ñJáp8îU6<<ìõz­V«ªª=öØüórAD£Q¼F8‡{MÚ¼yóèè(BÈd2‡P‹¶PUÕ¸“ ‡Ãáp¸WÓÔÔÔáÇ·oß~Þ‘£išñ¾Ö8‡Ã½š¦§§‹Åbç!^‡ÃýiÂ#‡Ãápxäàp8‡ÃáðÈÁáp898‡{ÓG]ü¦Š¢œ;wnéáÝÝݹ\®Z­®Y³†a¼¦8‡{µ#'“ÉìÚµËf³mÚ´©óðüÇüÊW¾²oß¾þþþ®®.¼¦8‡{µ#ÇhÆ ?ùÉOŒÏ;722ÒÓÓÓ>!ôÓŸþÔøØçó]uÕUx‰q8gôªËùÁ~pÏ=÷9r¤}ÈÓO?ý±}lïÞ½ßÿþ÷?ýéOïß¿/1‡ÃáþÀ[9³³³>ú(`Û¶mKýÜç>g2™yä‘£GÞrË-O=õÔµ×^‹W‡ÃápÈÈyÅDQ|ðÁ“É$^\‡Ã½ª‘ …î¿ÿ~ãã={ö,Ý€$Éžžžžžž;vôööâ%Æáp8œÑkÿ¼–eï¾ûîk®¹fïÞ½gÏžÅKŒÃáp¸?ðVÎ…{ê©§ÞùÎw¾ýío¯T*AìÚµ /1‡Ãá.yäx<ž}ûö™Íæö!÷Ýwß;ÞñŽîîî7V«U¿ß‰D~ûÛßÇZ,–Îý§q8‡GÎÅFÓôÆ;ñûý~¿`³ÙÚ.Ú‡Ãáp8#ük8‡Ã#‡Ãápxäàp8‡G‡ÃáðÈÁáp89x p8‡G‡ÃáðÈÁáp8îÒ[üTÐt:½ì»Mãp8wI¥Óé œd2yðàAü¾8‡ûãÞÊÉd2‡Z:”p8‡{GŽ(ŠEÝvÛmxQp8÷šÄqœÉdZfäX–õz½xp8÷š$‚,˪ªŸâ=Öp8÷' ‡ÃᑃÃáp¸7V^÷ÿ%KÂ×Ãw¢i¾8ðÈÁápoä8ŽcæÏþm$ AðÅG‡{㧪*BèÏ8ožþù÷½ï}ø‚À#ç/&!MÓxp¸e“eùÇ6ö®±ú^xáEQðe„GÎ_ØÈA á¥ÀáµiÓ¦ œK®R©ô÷÷¯\¹/׎eY¼8ýôÓ€ÁÁÁ/|á €w¼ãüàßlëõÄOôôô\ýõ‹Ÿššzâ‰'þéŸþéwÖ_ûÚ×.¿üò+¯¼ÒøTQ”w¿ûÝ€uëÖýë¿þkç–?üðŒ!„?üáñ÷:ì›ßüæ/ùËÎC~ô£µ?>pàÀÃ?|×]wɲüÓŸþô³ŸýìöíÛ?ùÉOÆb±gžyï×óF9¨T*€‰‰‰}èC>ŸïŸÿùŸß„/úï|çË_þ2Ïó_ÿú×wìØÑyTµZ=yòäé|Ÿ~úéo}ë[±Xì‘GiøÎw¾Ó˜p_øÂþå_þ¥}Ôààà[ßúÖË/¿_¿q¯çFFFöîÝûoÿöoÛ·o_zl:Þ»wï¶mÛî¹çžM›6õöö><44¤ë:^½¿Ð.ᎵT*uÇwŒŽŽž8qâg?ûY(zS­Ô3Ï<333sóÍ7ß{ï½O<ñDÿ²›=÷Üs>úèW¿úUãïµ~ô£ÃÃÃÆQù|~ëÖ­[·n½ÿþûÛÛ?ôÐC[·n=xðàÝwß===½ì×¼í¶Û¾ýío_{íµž9sfË–-[¶lù«¿ú«O|â‹N²bÅŠ-­ðµ÷znÑuufffëÖ­ÿøÇ;ôî½÷Þ“'OÞ{ï½€¥w3àÞ€#Çãñ|ë[ß\{íµÿðÿðf[©r¹ °Ùlç?þã?Ö¯_¿ìf•JåË_þ²¦iìééyç;ßyÿý÷ÏÎΪªzË-·ìÙ³gÏž=7ß|ó§?ýiÀ#ùäM7Ýd|\,ñ‚à‘ƒ€gžy&›Í.:p÷îÝgΜ¹˜g4Mûë¿þë‘‘À¯ýëçž{®óØññqãvàäÉ“ù|þ‹_üâ¶mÛNœ8ñ|«ŸùÌgÞÿþ÷ßxãøRÃýåþ…799y¾cu]?sæÌ† ðBá‘ó†-çr¹x|øÛßþöÛÞö6Q÷»ßýÝßýñ–É8‡{öªËyúé§óùüÌÌÌ'>ñ‰ÉÉÉüãßûÞ÷Þõ®w]sÍ5ßøÆ7¾ô¥/MOOÿà?xðÁ‰D*•ºÿþûGFFð¢ãp89—Üu×]÷Þ÷¾×çó8q¢\.8p@Ó´Ý»w_}õÕ¥RéäÉ“Æf;wî|ßûÞNž¼Ö8‡GÎkI’¿üå/†ùÕ¯~…—‡ÃápF¯åórÌf3€eÙÙÙÙõë×ò“ŸÄë‹Ãáp¸K¾•!ŒD"~¿¿=]"‘ˆÕj¸ÝîH$Â0ÌÁƒwîܹsçNÀ-·Üòøã?ÿüó‘HÄf³\.W$aY/:‡Ã½9ƒN§3“É”ËåÙÙÙ±±±]»váEÁáp8Ük’ ²,«ªúØc=øàƒøop8÷' ‡ÃᑃÃáp8–süøq„ñ±Ýn_¹re2™œ™™éîî^ôÆ oªN:¥ëú† ,ËêÕ«ÿg:88X¯×·nÝJ—öC©Tõz½]]]KÕuýĉ<ϯ_¿ÿ`àp¸?Û­œ_|ñöÛo衇zè¡Ï~ö³ÿøÇÏž=ûƒü`÷îÝ?ÿùÏßÌË÷îw¿ûŽ;ŸD½ IDATî(—Ë=ôÐ÷¾÷½?Í™Þwß}»wï–$éRO899ùÐC½ð ËÛh4vïÞýÑ~ÿTàp¸?ç­œûî» ˆïÿû€ƒÞ~ûíßøÆ7úúúŒc:433sóÍ7;„гÏ>k®¹æš±±±“'OnÞ¼¹P(LOOßxã.— ðì³Ï7›¼^ï_Ü›ô8p`nnî-oy‹ñ© ïz×»¼ÿ?{÷Åñ> |®qÔ;ª‘Þ¥)Š]@PDÅ®$lÁnŒhŒ %šØÅˆÄލ`bGEÄF¨ÒáhG»ã¸ãúûÇürï} 1ÚóùkÙ¶Ì–ggvv¦_?„Paaazz:ž?tèPCCÃû÷ï{xxܽ{W$©©©¹¸¸<|ø!diiéèèˆJII)--ÅÿâïïO$¯]»¦¡¡1xðत$333ggg„ÐË—/‹ŠŠFÝv{***’““­¬¬H$Rvv¶»»û€B·oßæp8!UUU___==½3f˜››gggÿùçŸ... £¢¢büøñ4íúõë¸$ôøñãv×ÿIII)$$„Ïç755Õ××›˜˜´MÔØØ˜––F£ÑŠ‹‹---¥Ré°aÃ8ΣGTTTêëë#""šššœcbb¾ûî;mmí7oÞœ?ÞÜÜ<==}õêÕÕÕÕG­¯¯ÿâ‹/âââ¾ýö[mm파Œ³gÏš™™™™™uÃÜ!T*U"‘…BÙÌÇoܸ±®®®®®îñãÇR©tÞ¼y&L`0îîî»víº{÷.@¸xñbQQ‘££ãªU«óóó >¬¨¨˜“““˜˜˜`ccSTTôÃ?”••q8œýû÷“ÉäAƒ7îÙ³gT*õÖ­[wïÞµ¶¶.//ß¼ysaa!›Í~òä ‡ÃY·nì3Õ'Ož|ýõ×<ïÌ™3ùùù k×®URR*--=pà€‘‘‹ÅúòË/***BBB˜Læ¡C‡x<Þ!C.\¸ðêÕ+2™lcc3dÈù|(..nll´¶¶VVV†kÐy E,K$’ôôôÇwªbmóæÍkÖ¬)**Ú´iÓ¥K—† 6}útü‡Ã™>}º……Å6nܾ|ùòœœY]Sssó”)Slll"""˜LæÎ;)JxxøêÕ«óóó£££{P^¼x1;;{Ù²e ¥U0ÀÜÜ|Û¶mááánnnÑÑÑùùù¡Ý»woÞ¼yË–-555ñññááá³gÏ~úô郮_¿þúõë   ððpÐÐP¼L‘HÔ¯_¿ÀÀÀ/^ܹs'>>>--í«¯¾ÒÒÒúÐGB---#FŒ:thLLL^^Þ¡C‡êêê¶oß¾}ûöºººC‡µJÏápæÎkbb²gÏž¦¦¦íÛ·ã²)Ô­º²b !Âáp(ÊîÝ»MMMe·ZŸÊ’­Y³fóæÍ›6mª®®–ÿwOOÏAƒµº?nÚ´©¶¶¶çæÝ’%KöìÙÓÜÜ,›cmmíééyõêÕû÷ï§¥¥ý›…ëééÍ™3çÚµk­æÏ›7ïÈ‘#L&³í¿¸ººzxx\½zµ“«ðóó“ÕŽ@w 97nliiÙ¿ÿÚµkI$Ò¾}û?~ÜîÝjݺu—.]úå—_ ;^&‰D²··G;¿xè^¿~½yófuuõ©S§fddÀéò:U±víÚµ¸¸8„ººú¸qã:HyåÊ*•:{öl///ùùgΜyòä‰ü …2{ölww÷ëׯÿËAWùî»ïX,–üœ²²²ÔÔÔΞ=ÛÜÜüs¬tÇŽeeeíþßù"N²²²öîÝ × kBNLLŒD"ñõõõõõ 6lØš5kÚMËf³}}};¶cÇŽ‡þöÛo¡Q£Fݼy355uïÞ½†††çÏŸçóù¾¾¾_}õUUUÕĉ{V¤qss[·nÝèÑ£[½N>|øêÕ«ãââ|}}­¬¬†¾qãÆŽ |ÁÁÁcƌٺu«¯¯oyyùÅ‹ÛýÚfÑ¢EãÇß¹s§µµµ¶¶v»‹úâ‹/²³³oÞ¼¹qãFggçƒêëëϘ1cæÌ™èx¿Ïž=[TTtèÐ!???¸6ŸASS“Éd²Ùlƒ‘ŸŸÿ¡öÊyyy²OAUUUû÷ï___Ïd2uuuÕÕÕËÊʸ\®™™…BÉÍÍÅ÷/mmíòòòØØØ½{÷îÞ½{òäÉl6ÛÈÈ@ƒ“!„”••»mÅ‘H¤ÑhB¡Pþ… B¨¼¼¼¹¹ÙÔÔ´´´T*•š˜˜âa±XUUU!]]].—ÛÔÔ„ÿ·ôËÏÏWRR222b³Ù•••ÚÚÚZZZ•••l6'³°° ïß¿§R©&&&MMMššš:::UUU,kÀ€555|>ßÒÒRœnݺ5oÞ¼åË—¯Y³¦®®N__ŸF£!„ q[; …bffÖÜÜ\^^®®®N&“kkkõôôètzii)Ç377'“É"‘¨   íyüøqqqñ¤I“pwè$eee@ ‰"##·oßÞÙæVVV­æhjjjjjâiù;”üøÖÖÖºººxZ_____¿Ýd=Ž¡¡¡,B´Ú:N§Óñ´ººz«”%£Ñh8*´Íùdò=èééééé!„ÚmÈŽikkË—Z5=WQQ‘-M<ä{" “É=ú¸º¹ÏÞÇ™LVVV†Î>+‰™ èþ>ûx9AAAAAAÑŸÕøñã ä ¯—r9þS0õßkii‘u»Ù7q¹\8 r>;÷êիׯ_CV„œÏH*•677 µ !„?¨9Ÿ+äÉdÈ €óyEEÅ®Šv---prúPÈ¡R©ÿýzy<^ZZîi äô!b±˜Çãýg«‰D÷ïßoii€ÓçH$‘HôŸ­N 0 è@ÐûÀ§  ä€|„ξˑJ¥ÅÅÅxZEE¥_¿~mÓ”••‰ÅâFsée †@ @‘Éän;Êô¼“šš:iÒ¤Aƒq8]]݈ˆù¡½0???ƒQ[[Û2.//oæÌ™4H$VVV^¿~ÝÆÆÎ'ø·!'99yúôéS¦L9vìXffæ–-[nÞ¼éççWPP€8::jhhÈÒs¹Ü””}ZCCcÅŠ¶¶¶ŠŠŠ>üý÷ßétz@@ÀСCÇwùòe''§7B½ /øÈæOž<‰‹‹›6mÚñãÇ]\\öìÙSRR‚âp8?üðƒ¹¹ùñãÇ/^œpýúuüÓÔû:ˆÔÔÔôõõ-..NNN~÷îÝ»wï<<±©S§îر£WÖ#ûûûÇÆÆš™™=|øpÿþýöööööögÏž=qâ„D"‘OïììåÊ•?ýô“¡¡¡¯¯offæ³gφŠ‡Ø¹víZmmíüùó—-[g ëTÅÚ´iÓH$RpppQQQ}}½P(\³f©©illlzzú«W¯6nÜ(ûGMMí—_~ÙµkW`` ƒÁðöö8yòdoʵѣG:thñâÅAAAd29-- ï ««ëÂ… ?.Kùý÷ß—””¬Y³FEE%""bÆ ¡¡¡pÚ ätÄßß_ÖÆLKKËÆÆÆÑÑQöq¨N?qâŸÏWPP˜7oÞÀñOúúúfffK–,ñóó³µµí57lذèèh.—‹¢R©¸MOOÏÞÞ~Ú´iÓ§OÇÉÜÝÝO:ÕÜÜL \\\Œñ|ü-í¼yóFŽiee'"BÎÿG$=<<äçôïß¿ÿþòsœñ„’’R«Ä¦¦¦¦¦¦½,œZÍyüøñÏ?ÿ}š——!BNOÂ`0,Xù@»îܹÓAšX,‰D]µmeee]ð„œÑÒÒRQQ1þ|È Z9pàd€ó‰Q(‡Q£FAV £¦¦ù ä|zD"QQQñ?XÑ™3gjkk×®]K  ÛAw¦¤¤g)ø,!§²²²m…¬ŠŠŠ¦¦fgVÐÔÔÔØØ¨®®®¦¦Ö ò«¡¡AAA¡m×B¡°¡¡õùѤRéóçÏ׬Y3è 8ŽüœȦ¹\n]]F“J¥MMMÚÚÚJJJUUUB¡ÐÐЮ‘žúÿ·)6nÜ8wî\{{{WW×ÀÀÀÀÀÀßÿ½“+8þ¼½½ý¹sçzAfUWWoذáÈ‘#l6»ÕO¹¹¹‹-‚ó €ÎÛµk—½½ýäÉ“ÿ"ÿë;wìíí>|îܹÀÀÀW¯^!„¦Njoo/ ÷zm)çôéÓø‰£ÿþæææ‰‰‰x~yyyaa!žB¨   ººZWW·çæTEEÅÙ³gŸ={öîÝ;mmíiÓ¦Ñh´v …---!EEE}}ýwïÞ™™™©ªªâ’ÐóçÏBšššƒ Âéóóó+** TRRÂåráŒ}Í/¿ü2nÜ8ÙŸøî¡¡¡!›ãëë;xð`›·oßâkäÙ³gcÆŒ¬ë!§]¥¥¥»víz÷î••UZZZ``à²eË/^Ì`0jkk ÆäÉ“½¼¼Ö¬Yƒû`NII)((èÑ!'>>^"‘øûûÛÛÛWUUUWW·rîß¿÷î];;;“§OŸ}úôÕ«Wutt<==‡ † ËsçÎ6lXÎ)••õôéÓéÓ§[ZZvÝÜÜŠŠŠN:µdÉ’ßÿ½¶¶V"‘dddœ:uêÔ©ScÆŒ9vìBèêÕ«zzz§NÂ]VÃéú œþKsssHHˆ©©iPPPfff«”›6mêß¿?BèÈ‘#o}«”ƒ%''‰Ä÷ïßã?·nÝJ&“׬Y£¡¡±iÓ¦^öncĈ‰äÞ½{L&óÂ… sçÎ500h7å¸qãÆwãÆ¯¿þZ™H$Ò÷ß?eÈËËkõ/K—.½t霎 ªªª¢R©mŸðæÏŸŸ””ù!§µ3f̘1C__¿wçTjjªD"qww···¿~ýúˆ# ~ýõ×µk×v¦C‰Dò믿Òét8ç({—ÓØØÒ»ý«Á <<«³kT*õúõë²O ŒŒ6oÞŒI <˜N§GEEñù|„Pÿþý¯_¿Ž¿533Û¶m[II‰µµun±fjj:{öìÌÌLssóéÓ§ã½?~¼²²²T*UQQÁ}ÖzyyáFÒË—/Ç =÷ïß߯_?0uêT===„¦¦¦ŽŽ‡Ã177Ÿ;w.n$§#èS–.]:iÒ$ù9 ÖÖÖzzz>>>FFF‰ÄÛÛG 1cÆœ?^$ÁX½½<äH¤‘#GÊÏ144444”ŸãêêŠ'”””ä÷‚Ì266þé§Ÿ”””ä?1b„|Ù;-YÃ/¾øOP(ùlÑÕÕ=yò$N€ôA­fÊß=tttð„™™™,»»;d]ÏQÿ3òñæ_ HOO······ éþm)|t:}ëÖ­ø%²²²D"™7o‘Ï9}’X,ær¹B¡ðs3ÿꦷ|#“ÉŸo]|*uuu0€ó‰Q(EE۰°°°0È ä}Âf! „‘‘QZZ䡱±‘ÇãuÕÚ¡!ÐWÔÔÔ<~ü¸¶¶¶ ·ÆÔèýD"QQQFëÚœ!ä@Èô~ÀÚÚÚÚÚ²´íq@Èл@ÅàSPPéÙµ`pw9€Þ~[!“º|3nß¾=tèP8r½Ç‹Å]µöÇAÈÓ“‰DÙx €Vššš:øU,‹D¢®Ú¶ªª*øBNÏSWWwýúuÈZùòË/!„œOL"‘¨««;²F¡Pðh„@ÈùÄH$dpE€ÿ(ädggË*Fi4Ú€êêꪪªþÑe¥¥¥MMMÅÅÅò•¼xÿ/—Ë-**RWWWTT¬ªªÒ××ÇCAz¨ÊÊÊúúzù9x´iŒÅb•——ëèèH$’ºº:###55µ‚‚‚––[[[è̦7‡œ´´4ggg|¨©©**ê›o¾ñóóƒã@ϵwïÞßÿÝÖÖVöØzóæMÙ¯ .üî»ïtuu¯]»¶eË77·ÀÀÀœœœªª**• ØkCΗ_~I$ñÙœœìççwðàÁ5kÖÛÙÙ½zõª²²§$&Lhnn~üø1žcbb"ÿä2lØ0UUU„²²2^`RRÒäÉ“:´ÿþìììÂÂBœrĈ4M"‘ܾ}[UUc†²··Çë}ýúuEE…‡‡‡ººú½{÷BÞÞÞ,ëéÓ§8¥……ôò@7·cÇŽqãÆÉ×gŒ*,,´°°3fL}}½Í”)Sœýýýúé§ÀÀÀ 6¨©©­_¿þûï¿ÿÛí¬­­ýå—_,,,üüü444nܸѪ¦ÐÝüñÇÙÙÙx:00044ÔÉÉiÁ‚›7on•rÍš5/^lllüùçŸ!ßzsÈAmÛ¶­©©IAAaË–-m¿±úí·ßøáüR^^–••%ŸföìÙ†††²?ù|~uuõÉ“''Ož_öGGGÇÐа¼¼œÉdš››ã±Ð322$‰ƒƒB¨©©)??_[[{À€ÕÕÕ!KKËòòr‡Ã•¢¢¢‘‘Q^^ž¦¦¦’’ƒÁ044ÔÑÑ)((`³Ù¶¶¶yyyR©ÔÞÞžËåæææâUëêêÊêñ>2 ‰\.÷É“'^^^p® C£ÑˆDâ‡êÁ”••8NÇÝz–••ÕÖÖÊÏ‘Ý=ÔÔÔ´´´Š‹‹õôô$IMM™™NGýùçŸb±ß=:péÒ¥æææùóçÃÁêZÊÊÊ@$EFFnß¾½³!§–!äðÙBÎg!§{†ˆÀºõü{:t9Ÿ‰D¢Ó鸄œÏHSSsìØ±]8ž.@Èé$IÇCí>¤¶¶–ËåvÕÚá1B ¯¨¨¨HJJêÚNá,„@ï'‰*++uttttt ä9€ÏH ˜››w<è"è›à»rô.P±øÄ¨T*™Ü-î-²¡E„@ïD"‘(J—oÆõëסÓH9€>ËåváÇ1÷ïß///‡£!§'!‰ªªª´‹Ífwð«D"éÂS__/o@Èé1˜Læ¥K—ˆDhgÀÿG `\!çÓ“J¥ýúõƒñr‡ÇËáóùà‡wݬ”“šš*‘H𴦦¦••UeeeII‰©©©®®n'’››ÛÐÐààà••% eóµ´´,--;þߦ¦¦ÌÌL•âââ´Þvw„F£ÙÚÚÂ@W)..®ªª’Ÿãîî.›®««{ÿþ}ÿþý%Iee¥µµµ††Æ»wï¸\®««+Ôu÷æóèÑ£¹sçŽ=ýõRnïÞ½ÅÅÅçÎ[¸paçoý[·n½wï^jjêœ9s<==ñ‰E$÷ìÙcgg×ÁÿfeeùúúΙ3gÒ¤IgΜùú믽½½ÿéÞÊv¤©©©¾¾>""ÂÉÉ NºDDDÄï¿ÿ>dÈmmí¶!'11qáÂ…ß}÷±YÓºÓ IDAT±q||üwß}çìì¼téÒœœœªª**• ØkCNpp0‘H<þþ¼¤¤ÄËËKKKëÊ•+R©tÚ´iõõõ÷îÝÃ)mmmíííåwäÞ½{3gΕ•yÕCuª>ôûï¿_¿~}EEÅæÍ›/\¸àìì ûuΜ9»ví²´´$‰k×®år¹{÷î522Úµk×Ì™3Ÿ?ž€Š‹‹“•`ð¹µ{÷îÝ»wÇÄÄØØØøúú ÐÐÐ]»v™™™:tˆÅbíܹSUUuÕªUë ו‘H$WW×ÐÐPwww@Ð*H$úñÇcbb6oÞg]ëâÅ‹»ÿÂãñ~ýõ×þýûùå—<¯UÊ%K–ôë×!´eËÈ·Þ\ÊA}ûí·ÍÍÍ %<<ÜÄĤí7V§OŸ^»v-F³¤¤$$$$??_>Í×_mllŒ§ ‚¶¶6ƒÁ¸xñâäɓǪ««Ã5]òÿ¨¥¥5oÞ¼³gÏv¼‘šššáááyyyaaacÇŽ7nœ‹‹K«4›7o>þüž={¦OŸ‡€.G£ÑdïrdLMMýýý¯_¿ùÓCÎúõëy<ÞáÇW¯^M"‘~ýõפ¤$ù6fûöí+--3gŽ‚‚ž£ªªêâââââ2gÎYÃ0Y­š‚‚ÂâÅ‹I$Rllltt´¶¶öŽ;\]]GŒ‘””ôqçîâÅ‹««« BTTÔÓ§O‰D¢ü'5!!!gÏžŠŠòóóƒc@wàëë+{—ÓØØÒ»uªbíÆW¯^EÑétÜnMÞ¾}û>¼qãFùµ´´f̘¡§§—™™yòäÉv£ˆººú¨Q£ÊËË_¾|™“““››;dÈ3fàâ³LyyyEéU«Vá¢UuuõÌ™3£¢¢Ö­[·hÑ¢ìììÜÜ\ù”7oÞDA¼ ›{ûöíþýû?ô+ŸÏÿæ›o —zmȹxñ"~9ïååµnÝ:o¿ýVöë»wïêëëOŸ>íïïïããC§ÓOž<™íååµfÍ•áÇçååÉ^~ȬY³fΜ¹oß>//¯ÀÀ@33³¹sçž;w®¡¡aÆ m¨|ÿý÷...+W®œ0a‚’’`S¦L‰ŠŠ ¼ÿþܹsÛÖž ¯¿lß¾κ֦M›d—¤ªªêéÓ§óòò"##'MšÔ6qTT”––Ö¬Y³‚ƒƒ!ëz"‚¦¦&“Éd³Ù #??ÿC}}ÈÞߨ¨¨èëë766ÖÖÖêèèðx<‡#Kiaa! KJJðŸt:]GG§¶¶¶±±Q___EE!TTT$•JÍÌÌB<Á`Ðh´~ýúÕÕÕ544 „ú÷ï_[[ËçóÍÌÌ úõëW^^®¦¦F¥RñzétzEE—Ë566.//Ç äóù²Û²¦ÕXqq±H$’ý‰w¤£€L$r¹Ü'Ož@‡7ÈÃÞ|¨LYYYAAÃáÈ_nm1™LÜè¹íÝCYY™F£UUUihhH¥Rù»Gqq±X,þÛQ®/]ºÔÜÜ Áu9eee@ ‰"##·oßÞÙæm°ººººº:*­~¢P(òs´µµåßšššÊ¦•””d‰µ´´dAbÀ€²³°Õ^/BÈÀÀ Õ©Tj«UË3113€nBGGG¾6¾íÝC6!÷€«¸GƒN#üG 'é¿G  C'€óÙQ(---ÜI9ŸN1bDÇoA@Èù·$‰|c<@çUUUuáå‰r}Eiiirr2þæ¡«8r½œP(¬¯¯744444„ÜrŸ7䘘˜À4 -hû B9ÀG€w9È#2÷TÝGˆÅâÎŒÁ r>=@"‘úÈÎÖ××?}útäÈ‘pÜrºŒ@ h;{/Ãår¯\¹ÒjÄ€ó_“J¥²ƒz+‰D" áX>h>B9Àç 97nܸrå žf2™qqq/_¾l7åµk×þøã„P]]]\\\JJJßÉÊšššræo%$$ÄÅÅñùüN¦¿råÊ7à ô¶³~ýú•+Wâé¼¼¼%K–œ9s¦Ý”¯^½zóæ B¨°°pÉ’%'Nœè;Y™››»dÉ’³gÏ~Ü¿çä䤥¥u¾Çõ+V„„„À èA>¾ÅZjjêãǽ½½KKKsrræÏŸ¯«««¥¥E"‘êë룣£B™™™ ãÆKHHHOOÇÿ¸hÑ"MMÍžžqçÎc0Ë—/?zô¨ŠŠÊ7ß|#û)%%%11qüøñ/^,))ùæ›oh4—Ë=|øpÿþýçÍ›—™™ÓûùùÙÚÚÒétmmm"‘Èçó8€²±±ñ÷÷G=~ü855Ïüúë¯utt:³‘T*õoûo‰®@·9)))»wïNNN9rd\\Üû÷ïÃÃÃ÷îÝK¡PUTTB …J¥&$$„††ÚØØ899=z´¨¨è—_~QUUíÑwöìÙ”””ŠŠ “üQ(:::"„ÒÒÒôôôRRRž={“””4gÎÖÜܼ{÷nWWWggç­[·¶´´øùùݸq#55õÇ<}úôË—/.\øÓO?]¾|yýúõùùù±±±‰D]]=44ÔÌÌlÈ!QQQááá 9DbGÙ?ÿüSCC,øÜþmóCCÃ3fôïßÿÒ¥KMMMx¦ººúÔ©SBVVVÇùòeFFFYYÙˆ#~ýõ×Q£F‘ɽä{ [[Û… r8œØØXF£É–yâÄ ¼~ýúï¾ûÎÐа_¿~K—.ýᇂƒƒ bcc›››;¿‘ÜxóæMJJ { è¥lÈ!FFF§™6mšƒƒÃ‘#GÖ¬Y£££³gÏEEÅÞ‘}S¦LiUŒ077wpp¸víþsìØ±êêêüñÇþýû¯^½jeeåééÉd2ÏŸ?ûöííÛ·[XX,_¾\__¿íÂõôôfÏž§_¿~ýÃ? „²³³ÿéFÞ¾}»Ýùõõõÿ(t@‡œÎ°°°°°°°´´\¶lÙ;w*++¯]»¦®®ÞG²8""búôé3gÎTWW?vìBHGGÇÇÇÇÑÑ1,,ìܹsùùùGŽé` /^üñÇgÏžíííR__ßùµ_»v­¬¬ Nt@ 9ñññþþþ{÷î]¶lÙèÑ£7mÚ×™ÿ‹‹Û³gBhÛ¶mÇŸ;wîÛ·o{M¯*'N¼ÿ~ÇiL¥R_¾|©££ãàà€JNN^·nݬY³¶oß.âââÛþcZZÚÊ•+§NJ¡P*++ÍÌÌÜÝÝå«àþ‡ÃqrrÂ/™>¤§¿Tô¶cnnŽzöì™O]]½½½žž^ÇÿâèèxìØ±U«Vikk_¿~}×®]ÁÁÁŠŠŠõõõ·nÝê5Gž:uÊÃÃC__ÿÚµkYYYJöðáCùûþ!C‚‚‚BCC###›šš~ùå—‘#GÊZ¤¦¦º¹¹ÙØØww÷àà`‰Ä`0~øá‡°°°0™ÌQ£Fµ´´ÐéôŽ7O"‘ümøÏ455™L&›Íf0ùùù£Fj7@ ujI"‘Èd²X,‰Dd2™D" …B‰D¢  €‹/ è¯>"qb‘H$‹ñ¿+((ümËÝn…B¡¨¨¨ðù|ùž¤}||RRRrssq ¡‚‚‚üþâÌ¡P(øMdzµµÍÍÍÅ9ƒþ·MœL–‡AöA(^BH– E,ãfÍA¶ÀO¢¹¹9..NOOÏÇÇ® À¿§¬¬,D"QddäöíÛ;û.§í­D"ÉF‘¡P(m“‰D*•ú…)2¹×´RûPÎÈï¯|æ0™ÌÑ£G«©©}(sZå!B¨ÕO­2°ãvÏÐmÁàÉÔÔ”Ãát&ކ„„hhhÜ»w2 !|Œß~û­“)Ož< Ùz’!@okU___XXØ»÷Q À@ÈébL&óÅ‹%%%!ç3‹ÅB¡ÐÀÀÀÀÀ /쯒’t„œ®!‘H”••­­­!+à߀æ ä€|x—øÄ”””>m‡³ÅbÁá€R 7#]Þ[¼@ 8zô( (åô´˜ Ý6ðxinn‰D]µm—.]‚O›!äô¼x£¤¤ô~ ÐÑÑa³ÙBΧTWWwõêÕ^3Œ)ŸæÆA&Oœ8ò@Èùô´µµ½¼¼ ¡ÑhD"Q~œ\:^Tèf¥¡PxðàA¯¾úªóKÏÎξuëÖСC‡ y —ðæÍù9ëÖ­“MçääÄÇÇ»»»‹D¢—/_N™2ÅÜÜüôéÓµµµkÖ¬‘ ôzg)'444,,lÇŽ'NœèüÒ322ÂÂÂ’’’ £­Ü¹s',,¬´´”úù_³²²ÂÂÂ?~L"‘¨T*n;zôèѰ°°.lþ£RΙ3g:TQQqåÊ•   çÏŸÇÄÄLš4©¾¾>99yÅŠ¸×ËõëדÉäµk×îܹÓÖÖVþ­û™3gÒÒÒðô®]»ÔÔÔ ÷þþþãÆ“ýY[[jcc£¯¯çÔÔÔäææŽ5jÿþýUUU¡ 6ìß¿²®×–rV¬X!•J'Nœ˜““³ÿþüüüèèèmÛ¶UWW¿ÿ~õêÕÅÅÅk×®=s挋‹ËÒ¥K£££=z$[ÂÙ³gÃÃÃõôô|||.\(‹!÷òš››—,YòìÙ3*•zøða<óÕ«WÑÑÑeeennnªªª!ùzaÈyðà웯ºººôôt<íææ6kÖ,}}ý””‹õðáC±X`ëÖ­~ …=¢ÓéÓ§OoÛLtèС8äx{{C¾õP­Xkii>|xKK‹üLccc==½V))Ê_|ÑîBÖ¯_¿cÇŽÒÒRÈw¶hÑ"WW×V3ÕÕÕa„ª>r&Ož\[[›žžŽûéKKKûæ›ož>}ú+Û¸qã¨Q£þoÅdø$€ŒŒŒìììðtcc#dH_9555b±X__·'ÑÖÖniiiUÜÁpLªªªj[ÓJ"‘ˆD"FÓÒÒòôô,//ÿþ=D€H$âóùò·©TúðáÃU«Vµ{“!,kòäÉÏŸ?‡Üë…!GKKKWWWÖ/,…BÑÕÕÅÓ***!:®««K¡PÒÒÒ† 2uêÔ„„„¢¢¢®®®ŠŠÊÆ…B¡¬ÑýË—/!ÞÐÇ©©©éêê®^½Z6''''--ÍÛÛ;&&&22rݺu***$IWW?ò&&&Ž1ÂÛÛ»Õ= § hjj2™L6›Í`0òóóe_¡°°P(Z[[çç绸¸xyyÅÆÆöèÜ!‰\.÷É“'Ðá òp‡7ªSVVVPPàp8]Û“tssóüùóá`u-eee@ ‰"##·oßþ);¼Ù±cLj#^¼xñöí[UUUÈn2Ÿ²vëÔ©S .¿7RUUUWWGUWWs8œîÆe-üz1пÿž²µ***šššLL£ÑzÊ}¼¢¢_À=‹Åª­­ídbsss…¼¼¼¼¼<{{ûž2ð®H$*..F)++÷¸ÛB¿~ý>á•””ˆD"nF&“;óÀñ1=Iëéé}ñÅ¡ÜÜÜ‚‚ùB')) ?Eâ*Ï}òw™Löööf³ÙOŸ>ÅÇEII)77wðàÁ²båÇ[ZZ¨Tê¸qãB555/_¾Ä§¢D"Áßž;99‘H¤®Ý%%%ggg¼#FFFÊÊÊ999ƒf2™ÆÆÆZZZ=âñx ÅÖÖ6##cÈ!x:++ËÎÎÎØØ8--Édþ›j``€¿f‘ÝŽ†š‘‘áææF&“ñíHv"„¸\®üÉO |}}BÏž=û7U#\.W"‘ „ˆD¢¢¢brr²‡‡Ç§,åhkk›››'&&&&&ª©©á°æááQPP˜˜øäÉ“ &àsÑÂÂbÀ€‰‰‰JJJ¸ýÜСCKJJ½¼¼p/d2YMMÉd¾ÿ¾´´´¬¬LEEÇá±cǾ}û611ñõëמžž¸H;pà@ ÄÄDmmm|—ùLñ&55õåË—^^^²2™¶¶vbb¢†††‘‘Ž7999‰‰‰/^¼?~<.`ZYYéééáœ111Áñ&???11ñéÓ§8gº¤*`Ĉøq8„ÐàÁƒ¹\.ž9tèP|w“b333Ù!Æ;¢¦¦æåå•‘‘!‹»üN×ÐÐ]QQQ\\>>xG,,, ‹ŠŠ*++»áS§‰‰Ibb"…B±´´ÄÅ} …‚zñâEbbbjj*FÑÉÀÀ年ŽÎç;ùÿŸÄÄÄ‚‚|—¡R©¸°’——‡7vN$LJçÔÖÖ⧇ãͰaÃÞ¾}Ûåf‰DYQ˜J¥*))áÂôðáÃ+**GM&“ Ng³ÙÕÕÕùùù”H$‰‰‰666ÿÁx ºººFFF83e·#æííýúõkÙíHv“H$*•*¿ &à%”””àw÷ K&“q¼‘Õ=àƒû)K9$‰L&ãó###·SRRâóùÍÍÍAÖ»¦¦&-- ß¡ðU¤¨¨(š››ïÝ»7uêTù²*ŸÏ§P(B¡Pþ¡£¥¥¥¹¹Y"‘àÃ*//ûö­X,þ¸ï`;ÿ¼Ããñ„Bá£GðƒñæÍùõ>{öL"‘H¥R …"«¨ªªzõê•X,&ò»Ìår‰DbWUEEE|È q°WPPhnnÆ3q!@þS(ü“lGp¢®®®m«Çÿî™I( *•ÚÒÒ‚GŸ¤R©¸4óìÙ³Y³fÕÖÖ>~üX, "‘(vuD"?'fgg·ÊX.—K&“ÇwëÖ-Ùu‡wOw‡íWRRâr¹<¯ÕÓ=ŸÏ£G~þü9Ç#8%>v²çàææVZZZYYÙΫv¥§§———K¥RùÇ2|ŠD"@@¡Pø|>—Ë}þüùð@VSSSWW‡W$LLL¬¯¯'“Éø>#»QgggËo¹,6àᢢÒö×ÎßXš››åw™H$r8œ´´´‘#G~ÊŠ5ù|ïàW‰Dò¡}ñw°ÌOèúõë“'OFɪÂÚ®—H$zzzªªªYES»›çé鉺Cÿuò$Q‹Ý=ï ÎÎέzÍ ‰b±X*•â‰n[·^UUE¡P¦M›–ŸŸŸ‘‘Ñê×€€€ØØXùª]<]QQѶÿÚµkÓ¦Mc±X‰‰‰­~9rdVV~µƒz¦M›†µ‚d2ÙÑÑ‘Á`tó¯ñ‰ÔA‚wïÞ999M›6-%%…Á`|îk„@ ;99áGù””Ùåù¡K¾íUO d‡¿Åø¸"NÛ{šŽŽŽ–––P(”=ª~ÊC¥R¥R©@ ø§ÿØÍ¨¨ªªþñÇ ¾¾¾×¯_o7͘1cž?Îb±Èdò¤I“ðL …¢¨¨ØÒÒ"Ÿòþýû Ýd¯) ‰Djµ…=ÝË—/ñ '•––uuuWW×K—.iii¹¸¸¼~ýºÛn9™L®­­½téÒ Aƒ¬­­³²²äO¦¦&ùÄÅÅÅÏŸ?Ç¥ÒnG/]º¤©©9räHÙ Z<_(ÊodKKËåË—ñ.㛑›Í.++ën_Åÿè6˜™™ùúõë±cÇòx¼Î7 ø8zzzúúú—.]Bá¶sSPPhÛd@*•â%H¤Vun {Ëå¶窫«+**Z}.úñ!G(¶´´àvÌýû÷¯¯¯/++c±XªªªD"‘@ tЛÍVQQ‘J¥m‡%WRR’U !„étº’’…BÁ·ìÿÌ_|‘››K êëë?”¦±±QMM ßÁY,nn§©©iggWRR"•JñmÅb©©©‘H$0xðà‡vIɆÍfãC¦©©I&“³²²š››) žÉf³åŸƒä±D"é¶ñIQQQYYY~Gììì^¼xáíí uuueeeŽŽŽ,KYY¹íÓ@—£Óéæææ¸¶³UC5ooïäädmmm±XÜÐÐ „B!ÞMcc㊊ŠîðjÊÍÍíÍ›7ÊÊÊ,K~>Îs„¶¶6¾ˆñÆ«««+))á"ªªªì‹ˆ†††®£‰¤©©I[[[CCÃÜܼ3 4UTTôõõjjjpmüçÞN@ p¾‰Åb …Òn#4¡PÈçóµµµõôô [ÝÊêêêðTUUµ´´ÒÓÓÿé¥G"‘>TžÓ×××ÐÐàp8íFîrêëë qË™‚‚ü’––æâ⢦¦&•Jñ]U Èv²©© ‰ôôtggg33³'OžàO@„B!~(hnn0`€ŽŽNcc#¾ö’““‡ †[¬áf$---²ØÃb±>_[Ò¤¤¤#F „žŸHø3õ¦¦&ü¬†Âo}ºöŒzõê•««kMMMjj*~ü•ÝŽð‘J¥‰¤¦¦ŸZ!ƒ÷ïß[YYÙÛÛ¿}û¶UèýjkkegÂû÷ïUUUi4“ÉÄ©TZ]]-—””àFkòWñÇÇŒƒohÿ4Þà&!---´\­¯¯çp8í~aIÐÔÔd2™l6›Á`dff:::VTT@kW൲²ÂíY këh4ŽŽNNNGö¥ÊGPQQ±³³£R©UUU"‘ÈÒÒOtü_t:D"ឤ###·oßN†c½ …B100À¶Åbqccã§Z²X,®­­íL9›N§·ýBÎ'ÃápºÉz€>®©©©¨¨TWYYù ¿Q•J¥ffffff›’L&·­‡ó)CNwëªÐg±X¬·oß~òÅ’Éd‰ô·µjUUUD"±_¿~rA«Ö™†?Þï8MEE…BéTȉDFFF¸…ž‹B¡”””à}é>;" {ôŽÉä²²2@;Ò}v¤¼¼¼¥¥×#ÁŽ|Z¸óˆOÕ„½ýŠ5uuõžÒÙû‡P©T6›- {úŽ(((455ñù|Ø‘î³#ÍÍÍ<v¤ûì—ËÅZôôáñx§[í‘HÄã~~š¥A!ÀÀþQêÜÜܯ¾úªÝŸ>ëwv¯^½ n;æÌ™Ÿ©Xcc#c\.Tõ©tŸqÒŽ?~ìØ±î°%ãÇo·•çÑ£GOž< —1øh&Lè Ã”z;ú .ìÛ·rûŸ…œ¢¢"//¯Û·o/^¼¸m¿jõõõ¸²Çãɺ{Á=­ÊÒàþV¹\®¬§‰DÂårqŸ¬ú¸ÉdšššN™2¥ÕMG |õÕW>ìL%£lÕ!Ùæa²Uã.Ÿe›G§ÓãââB¸+â¶Éð‡ÖR©TÖ«’X,Æ?µ»/<O¶¿ò{!¿4„н{÷pÎðù|±XüÉ¿ùÇ;" q›Ü 3Îùƒ‚ûüîò.åù|¾¿¿ÿË—/å7knnÆ3ù|>î›;ùïØE"ÞAù66<è^ÖÝèøÌÇýÉŸ uuuø„—3øz—]ž²Û >gð´½½ý¯¿þЧñ¹\®üÏ‘]\.š³þ³Ãårýüünß¾íææ6kÖ¬°°°v“‰Åb;;»´´´ÀÀÀŠŠŠóçχ††âöo ÁÁÁ......ÙÙÙ8ñÓ§O]\\Ö¬Y±k×®V‘¦¢¢B*•êèèỿ¼åË—õÕW­ºnW}}ýüùóñª‹‹‹™LæôéÓqœàr¹'Ožd±Xk×®Åi^½z%‘HÆŽ‹zôèQPPPTTTdd$‹Å ÁÉRSSå»&ãóù—.]Â?>|¸ÕýQ$ <855ÕÅÅ%88÷ ÓÔÔŠÿåÑ£Gø2À}ÄfddL:566v÷îÝŸöŸ:ujëÖ­;wî¼yó¦|Îàœ„BáÝ»w]\\6mÚÄf³»ü7oÞ¶mÛLLLdÃ&µ+(((>>~Ú´iþùgQQ‘¬W’3gÎà”’ÍfïÛ·oÆ nnnEEEÆÆÆ¡Ã‡/Z´(33333sÊ”)"‘¨¢¢bË–-™™™3gΔ¯À)++ËÌÌ\¹råÌ™3?ôZYY©¦¦ÖÉq¼W®\¹jÕ*¼ê±cÇöë×ïàÁƒëׯÏÌÌBháÂ…™™™Û¶m[¼x1d»¼Î~ ª¨¨xêÔ©3fíÛ·oÙ²eí¦TWW?þ|ZZÚСC·nÝ*‹%[¶lÉÊÊJNNFmÆË3fLHHHqqqqq1ƒÁ¸råJnnî¡C‡>4’viiéñãÇ'Ožìîîþq»mff¶xñâáÇϛ7ïðáí~ÅÑB¾ïUooïµk×¶JvîÜ9ü˜#›S[[‹w°¼¼¼m3G ˜˜˜Îo¤‹‹K¡ýߘ?þ¬Y³ð´l ÏVƒjøùùvy'ù{öìùöÛokkkCCCCCC;xÑuäÈüEô­[·dݰŽ9ÒÚÚ”Vã‚‰ÄøøøÎ¼®½ÆôéÓÛ>gܸq£Ý!‹ÕÔÔpß”ŽŽŽ¥¥¥üñGç*žˆÇ§Ž@àcBŽX,~ûöíáÇ7lØ0vìØƒvìX--­-*::šÅbq8œøøøÆÆÆG¶Ûƒ÷‡455åææNœ8QSS3;;{àÀŸ$7 ûí7<ÝS>£¹ví~ÜÃCÓw7©©©[·nMLL<þ¼³³saa!‹ÅÊÉÉéd#‹ªªª¸¸8<Œ•üh4|ˆžžNÏÉɹpá‚••Õ°aÃB‡Z½z5ƒ ^ìÞ½{gÏž•J¥,ëC#•AÅÚßàóù«V­j53666!!¡“K8zô¨§§gtttttt«¾ÞJKK_¼xš={vtt4™L¾sçÎ… ¢££ÛíVÁÁÁA,ß¹sçÎ;,+))é½cçr¹.\`³ÙÑÑÑ&L¸zõêŸþÙê.Ü™qçnܸѪÞÏÕÕïàºuëÚ¶¬oii¹qãFw;¶lÙ‚·ÙÇÇG~~~~~wÜ,<<¿&×ÃÃÃ;ùïéééyyyxñ›9Ù(U ïÈÍÍÅC'tÀÕÕÕÌÌìâÅ‹ò3ãããwíÚuüøñåË—è>|ˆßŸ>}:::zçÎçYÊ¡P(3fÌ8þ|EEEnn.¾z‡úæÍ\15vìØŽG½ôòòÊÈÈÈËËCÍ™3çøñã³fÍ;vìáÇ[ZZª««õôôpJü^."""77·Ý“'Nœ8qâD<íéé¹mÛ6•V=qâÄ/^¼zõ !´`Á‹uêÔ)\òuwwùòå½{÷F››‹÷¥¶¶¶ÕýWføðáYYY8Y]]ݘ1cdcÍZZZâŸ8NÛG!±XüêÕ«’’>Ÿïåå…rss{ùò%þ—#Fàn_ÿK'N|þüùË—/B¸2JKKËÕÕõðáÃ<¿ïZþþþIII,+** ŸýúõsttÄ™&‰:n?bff¦¯¯kkkãáfΜyíÚ5‰ݰö5 ·nÝJJJ0`@_øÛÙÙáž’mmme•l¿ÿþ;‘H ’Oéè蘔”„O°ÆÆF+++|;räBH(:99ݽ{r^†¤¤¤òÿÚ»ó¸&®µqà3ÙHز%€ AeqC«¨ VĪx«X«Rë­mÕª­z­¾zk]°ZëµµÚ~¨u«— Öërk­â¢,j‘ D„$däýãüÞü¸€láùþÑO “džs2óÌræ<ë×kµZ…BQUUåîî.“É F“¹qÈdòˆ#RSSÅbqllì¬Y³0 0`€Z­.++#bÉ’%\.ÇqF"‘œœœ D"‘¼¼¼x<ÞàÁƒ+++««« ‚X½zunnî„ œ››+|||êêêÐl󱯤I“Èd2ú'ŽãNNNMs&…Ò¼ü…Byñâ…Ñhtss –J¥¨ìà§Ÿ~J&“Y,–yWE"‘¼½½'Mš$“É*++ ‚X±b˜Àd2‡ †ã8—Ëõ÷÷Ç0Ìßß¿¾¾¾¢¢‚ ˆ¥K—:88à8N§ÓGŒáäääááñðáC‚ "##ïÑh[Q'OlI$///tÝUp2· ‰D²··ïß¿¿P( ™6mÇóòò²ÌO­S„††J$’k×®…„„üóŸÿÄ0ŒÃáøúú¢[PcÇŽ GÈáp¨TêÈ‘#Éd²]hh¨«««““SQQAÑÑÑ4ÍÍÍíõ×_ÏÏÏohhX¹rebbb“Âí Ä`0 d½xã·¡@Pñ±Öyøð!‰DŠŽŽ.))™9s&ºœN¡P† F¥RqG¿ Ã<==³³³©T*ÚNÑî(//O«Õ®[·mDhwÄãñH$RII AóæÍCS?þöíÛƒÁÍÍ-&&¦¢¢"00ÐÓӳ͋í(NgU=‚ã8…B‘Ëå E©TF6ïòVUU‘Éä~ýú‘H$‚ ŒFcNNNjjj %ÚÄb±ƒƒªHØ„L&ËÌÌ|ã7,uÄqìØ±µk×bvüøñ’’’-[¶Xª™ètz^^ž^¯o1îg0ŒNò:„F£hµÚ   ^½_x•@Ξ=;sæÌNioÑ7ß|óî»ï:;;×ÔÔL:äu(‡ªÕêàààÞÞ#6Haa¡J¥Bµ2_&)));;{÷îÝm~`ffæõë×§OŸÞúvE =R*•Ýü½m¤¢ oÌ%Ú†Þæ´žT*588ø•J´9;;[*ß ¬àììŒðùüØØX8ë-²ìo#44tË–- 4­ÉÓ`dggÿñÇsæÌéíyÖ©'ëå°X¬9sæ SQOOO@`à M&“= ?8k0iÒ$&“©Ñh¨T*< ÚwL˜0]7kÏÛo¿mÛ»#«K9t:½õ±–Âf³cbbºâ“Ñ]ýn ¤=¦M›fØ@DEEÙÒO iO í “Íf·§äe×B£Ñ¬­GÚ,Èöª)''''//¯·§StµÑfi2’éñ@ « ĽB )Á¬‡½½}{N;Ÿr ÔÛÏ+étúÇõz}óAn½ º£¨Óél#­Vk©o{0¢¢"Fc¨ÕjóPàÞˆH$jhh°@T*•• zBÐð&“wX8åÉdKêÁ”C¡PL&So„F£Q(‚ « Ķ…B±ž@¨TªµõJ9û´6—@Ý4].—·XÂÄ‚ž>}j.s€aXCCƒD"‘H$Í¿W*•JþO“l\]]æ×yY –¥P(OÎÖ!è ´Ô2->\WW'—Ë¡}À«ü´:±Ñ¡§×;´[0Ïû×ǵ‘r?~{öìñãdž <=lüÑG±X,ƒÁ••”íææ†Êç¼"µZf±sssC—‰Åb±½½=šdèÎ;Æ £ÑhÍ[æÉ“'L&S&“UUU9²ûÒ}ºÿþŽÎ>z©›7oþòË/aaa"‘ȼÑavñâÅÛ·o3 F3iÒ¤ŒŒŒk×®íÛ·ð„„„É“'ÇÄÄüõ×_)))¨¸ðo¼ñèÑ£}ûö>}Z,Ÿ={;Ž5jîܹÎÎÎ.\HIIÁ0ÌÁÁÙ@ã·+å¼þúë999uuu§OŸn½pwAAÁž={¦OŸ¹cÇŽèè訨¨ÚÚZ—#GŽ`¶qãÆŒŒ >Ÿ¿sçÎï¾ûÎßßõêÕè½uuuiii>¼wï^XXX+soH¥Ò³gÏ–••=~üØd25/´páBtxÎd2u:¹ŠD"irÉÕh4ŠÅb´V/^|Çñû÷ïoß¾RN{SÎ{ï½wüøq½^ÿüùóï¿ÿ¾yñ‚ÆGñèºY||¼¹ŽJ ¨lQnnn“Ý\||<ºJæïï¿wïÞÜÜÜK—.]ºtéÊ•+111hÍ&´ZíÀ×®]»sçÎÛ·o7N9æRf÷îÝ‹7§œ˜˜˜²²²ÆB¥R×®]‹Öª¨¨È\eûc¶fÍšVJõ˜[¦ÅihCBBÞzë­âââÖÛß+ÎÎÎÍ+ÂYİaÚ\©;sæÌŒ3ìììh4ÚêÕ«Í-cž)566ÖRCò;áƒ>8zô¨Á`¨¨¨øþûï[™:~ÅŠho¾i‡N”QPB¡püøñæåqß¶m”hëSÆ׼ǷnÝjž>¸1tÝ]N_´hÑ™3g(ÊÖ­[[ù­šwG_ýµÉdBÓQƒÆZ>pòäÉÈÈHWW×5kÖ ÓÌÊÊÊöÏÚ"‰’““ét:No±G›œ| g èt:‰ÔòZùûû¿lª‚]»v5àÐ"½^¿gÏ´V}¹zÒ´iÓ$É£GPý]{{{N·wï^Ô2-Iì?ÿüsTT”³³óºuëPæ(++;~üx;ß^XXxþüyÔË~W46dÈ//¯+W®üõ×_^^^èþ|àêêJ&“Û3+è®]»h4NïPÝHH9ØÅ‹QO³êêêäääv~tii©T*]¹råÊ•+›&oذÁœ™V­Zuùòe@0sæÌ•+W0 £a>|¸Å×SRRÐmóÆ—’’’ÐZYpŠRäþýû§OŸnñOæx{VNNί¿þŠ÷ž={&‘HÌ2 gÏží¢–é´óçÏ7¹4úâÅ‹VŠ7Q\\\QQ‚jrkÐd2mܸv}Ê7.]ºÔú2 pssËÈÈhüâ—_~³lÙ²V޹Ð8‚ÇôÑG+W®|ë­· Í›hí`víÚµ'Ož,++[¹rå0 ãñxsæÌ‰‹‹Ã0lРAæ1- ‰DhááÇçåå ‚-[¶|óÍ7õõõ³fͺ}û6ºˆÍçó[ŸA= `âĉèÓ‚ƒƒQ‰³={öÌž={À€ ‹-2™LÎÎÎwî I¹*•ºmÛ6ô9ÞÞÞàÔ©S/ûRww÷E‹¡…Þ~ûísqqYºti\\Ç{ÙcÑ‘‘qqqh/++CŸ»ÓúõëþùçÊÊÊeË–¡"ßýû÷Ÿ6mZÏ!C†¼ùæ›­¼Õ®F ‡……eeeùûûÇÇÇïÚµK¥RMŸ>î}„O^^Þ©S§^{íµVÆ‚Nœ8ñ—_~ÁqÜ\Á+<<üþçÔjõ÷ßßxÉèèè_~ùýÀ"##ÑС„„„wß}펦OŸþÝwßuó kÖF½œ¼¼¼¸¸¸;vLŸ>]—ËåhŽ,///t?£¨¨¨_¿~ŽŽŽ999C‡5yyyèÎsUUªãçç§R©¸\®““Snn.*Ñ1nܸ֋Âfgg6Ì|QN&“¡©‡ø|>*óüðáC‡Fî¢qeæ¹€ÌõrP‰ggç{÷î 2„F£étº¬¬,”*œœœÔj5*³æîî^PPàããcooçÎ4šY¡P •ôðð@“ý=~üØÅÅÅÙÙð»w…á8®R©îß¿oþÀ&wzBBBÒÒÒ„B!“ÉD-ƒaXyy9:É@£0sssƒƒƒI$Òýû÷Ñ †êêjµZ­Ñh^±^ŽF£AÃ\]]ѵidÁ‚ü±y”°V«EÃ·š· †a< ìôsÈ®—# çÏŸ¿wï^s©Öºº:4-˜··7š‰¼°°ÐËË‹Ãádee1Â`0 }Jee¥X,FG¯r¹Üü[Õjµêåôµz9+W®”J¥þþþ¨T Úè¨TªV«-,,4ßrÞ·oŽãhà‰yw¤ÓéÐ@j´ÃD·“¥RéÓ§O1 t:>`m´gø@¯Äš‡XæÓ0 Œ˜ú0ÕIDAT{4H9 år@Ê)€”R)¤rH9lHË3I“ÉdKUžî±\J"¡ÿöö@P5èôôôHïê´/íÚ”S___QQÑÛÓiMM ‰D²@ª««m#ššÇm£G0 ³1™L¶Ñ#F£Ñ©ªª²@:–rªªª Co?^¨««3A@ ÖA¶ˆÁ`0½=ÚÚZ[ ‡@, Çq;;;ww÷.L9¾¾¾P¢ÍJ@‰6+ J´Y[ P¢­ë@‰6½¤r@Ê 倔R4H9 år@Ê)€”À–´<“4•Je0½:0TìˆB¡ØF Ð#Ð#Ð#HÀq¼ËSNii©Z­îíé´²²ÇqFXU Z­ÖÁ0Ìyñâ…ÉdÒét¶ˆ^¯‡@º•Jår¹]˜rètº]¯î9*•ªT* XøÊ…¢R©t:X<††FcUH$&“Ùµg9...ìÕG§ÓµZ­^¯ïíÐh4N§Õj!ë Ä`0¨ÕjÄz!B¥RÙ@ F£Q©TZU P¢ @¯)¤rH9¬š@û©Õj¹\Þæ2T*R€Î3%%%"‘¨Í%=<< åè<‚ @ hsIôà¤D"‘Z¼bÖX}}}ee¥›››½½=¤¤×ëu:Éd"âeË”””Ž7®yÊk,F.——––º»»·x/R€0 d2•Zh®¾¾^£Ñøøø´øWH9:† “ÉÔâ)N~~¾ƒƒƒ››[‹o|iñ‚æ×àzTVˆF£ÙF Ð#Ð#Ð#H&˜æ¯0 ½^ßäOÆh4½ì£ZH9þþþÇJ´ñù|Çm X[ †ÙF &“Éñöö¶@¼¼¼¬0KÆ¡A_Q(éééÇÑѱ)‡ÅbÑéôVF#ô¨˜+XN‡@ ¾ˆÑhlñE‹…Nķ>T*uìØ±­|ÜËÐjµÚœoÔjõÅ‹Édrë%D!åè “ÉdooO"‘0 C…À§M›Öú[ åè$¥R‰aAçγ³³ksyH9:ÉdÊd2ƒ1eÊH9ºJ¥ºr劻»{{naÄšÁ`Ðh4ÐŽ°ÿ±F&“›OëÐ| ™Ln×LÒZ­V«ÕB+hÌÑÑ‘ÃáP(MÇ„ ZLTA4™‡Ò$)µçþ€¾†L&;88`|šF£½4åP(•JUZZ ÀŒÃá´§,[›šžÉd²úúz>Ÿßæ;Ñå<Ç›ŸdèfjµºÅ©6_†D"1 ‚ Ú¼“B"‘ÐùåS†aÎÎÎþþþ­Ÿ^1 ‰D¢ÕjÉdj~@·¹sçNPPP“«Xm&‡ƒvà¨ðZ+û|&“‰Á±|Êi}Y,ÊŠÕÕÕh" ´ºÐåÐS¤Ré Aƒ:ú.‚ Ôj5…Ba04M«Õvõμ½)Çq{{{£ÑˆÎÝŒFc‹½è-Ð)Az½žF£1™Lƒ¡V«»îÂU»R›ÍÆq\©TšL¦]+`ý‰‡ F£Õj™L¦ÉdR*•]q^ÑFʱ³³£P( …’ Øvâ1™L*• Çq;;;6›aX}}½e÷ü-Lx£×ëÕj5Fãp8F.—FÈ7ÐGrR©D{~6›M&“-89@ g9ÅÅÅåååîîîööö0ú ²²2NwéÒ%??¿6«t>å‚aÆ …Âôôt@Àf³¹\.ªˆÀæÕÖÖêõú«W¯:::òùüÈÈÈ.<ËABBBBBBrrrJJJú÷ïO¥R½½½¡'À†ÕÔÔ444dgg³X¬~ýúMš4 Çq ~~ÍFŒaØ;wÐôÒt:ÇãA¯€‘Éd2™L$‘ÉdWW×#F´^RºKR2zôh£Ñ˜M"‘ ›Í†Ä¶A.——•••••Áår»è»Ú;4€D"5J£ÑÕÔÔTWWWUUyxx@o@/¥R©îÝ»W[[«V«½½½½¼¼¸\n—~cÇF£1ŒÐÐP…BñìÙ3óH6±Xüüùsè<è)*(`ÖÐÐPZZ*œûõë× ëÙBÊ¡R©,«•÷ ÛJr¹Üd2Q(.—K§Ó¡Ë §øøø8::6©‡Ö:Ç©Tê¤I“Ú¬!mÁMSÇ3™Lí™Ù ¥%µZíèèØuþ´G禾tqqiÏßR“ßPšœßtϹ€¾€L&7.‹ð_)§¤¤ääÉ“ÐF,e̘1nnn-¤1cÆ@°t Æ|]î¿RªK mÀ" †N§3§˜9 @7” ›XKa‰dý“U÷ÍòÛVÒ5]Wת·ÏÞV:¶è—Þ‘r(JëÏŸö¸ºº:•Jegg××6'ƒA£ÑzvJJJ8N_« ã¸½½}/Za¹\®T*ûà6B§Ó­ùqøêêjƒÁ`%÷é­ëŠ ‚ ¬°Ïêëë³²² ưaÃúæé°^¯ï©Ê°R©ôÚµk³fÍꛓ\´óÑì§P(²²²¨T*š~¶+!“É233=== å4¥Óé,XñÔ²{½¢¢¢ÐÐP¬¯Òjµ=ui+33³¡¡¡Ï¶¼Ñhìá?}úôÑ£GÁÁÁ}¶§t:ˆÅâ’’OOO+Y>RH9¤r,êèÑ£W¯^íл/^aÃlƆ """¤Ri“×SSS#""~üñÇÆ/¾÷Þ{ÚíU˜L¦ˆF¶oßþ²%5MDDÄ{ï½÷²Þÿýˆˆˆ¾~üX(Zç°øÞE(ÖÕÕ%&&._¾üàÁƒ;wîlq1‚ „BáãÇ_ö9Ð#]mË–-ÇŽ[½zubbâóçÏÇŒ# E"¤ë= “Ëå|ðT*?~¼J¥B‡x|>¿¦¦ÆÏÏoúôéF£ñßÿþ7ŸÏß½{÷Ž;|||._¾lÎ4†ÏçO™2ýó×_åóùß}÷l ¯Èh4VWW'$$H¥R‹…F‹–––úøø,\¸Ðüä³ÑhüôÓO}}}ÓÒÒ ý[…Báñx±±±»wïÞ·oßÞ½{Fãš5k|}}ýüü|||W‹7™L/^ôñññóóóõõ=qâ„ÉdŠ‹‹+((À0 =|&‰Ì |þùç}pN‹Û±cGBBÂþýûcbbx<^NNÎõë×Í=rùòesƒ?~Üd2ÆéÓ§ûùùùùù…††a2™®]»f^ìСC½n#êe)çÌ™3Ÿ}öNg³Ù eÞ¼y¹¹¹J¥R¡PDEE]¿~====66V¯×+Šo¿ýÖÃÃcæÌ™ ,ÈÈÈ0•J­¯¯—Ëå:N&“ †Uo/;ÅIJJb2™l6›D"ÖÖÖ:Ô××wÅŠŸ|ò ZlÛ¶m‡>pà@BBBQQ´›ÅƒÁÐëõZ­vóæÍ?ýôÓ?ü ‘H<<< d®”•––7kÖ,‰Dò÷¿ÿýã?>þ|bbâ!C0 »wï^uuõèÑ£D"Ù½{÷öìÙÍûŠ´Z­^¯g2™h‡cooÏf³ÑŸ222,X0sæL‰Dòþûï¯^½:%%%666===99ùÉ“' S§NÍÍÍ3gNTT”D"Y±bÅúõëÏœ9)§ËÕÔÔˆÅb…BÑøÅììì&‹}ôÑGK–,iò"ƒÁ¸}û¶H$Z°`ÁŸþ¹qãÆ%K–,_¾¶‹¨¨¨‹Å‹b6vìØ4Y211100Z¬Gz©¯¯‹Åµµµ/{¯F£‹Å•••ÐŒ=ÂÓÓsàÀS§N}ðàÁ•+WÌw¯ …X,®©©é•GE½h]ëêê$I¿~ýrrrrrr0 spp(,,ìèˆ*•:dÈÔm\.—ÇãÁû•——¿xñÂÏÏ/11111ÑÕÕµ¬¬ìþýûÐ2=.!!áÔ©S......M&©KKKC[#GŽtrrjþ^‰Db^Àz_ï;ÐÿE‹M™2ÅÎÎîÂ… èõ¬¬,s¿p¹\H9]%33sÏž=Ë—/7ß;wîªU«Ðÿ§¦¦úùù5Ù`JKK›—ËýñÇÃÃÃóòò.\øá‡Âû8q"%%å‡~˜7ozÅßßöìÙèÿe2™P(lò–œœœ&ç©À"òóóy<Þ€P›oß¾=:::##C©T6¹€xð`ìØ±NNN7oÞl}ÈÍÍ­©©9xðàòåËÿý÷Å‹£1Ÿ“&M:tèPqqñ“'O‚‚‚ åôŒ¤¤¤   ''§ & W “’’JJJÂÃÃ]]]/ìàà™šš ›AסR©QQQyyyIIIæ{i!!!~~~éééF£Q.—C+YŠR©LJJ*((HIIÙ¸qã¼yóp÷õõ½}û¶B¡Ø²eËÈ‘#Gvuu;v¬D"IJJJNN®ªªÚ½{w¿~ý¦L™òäÉ“”””´´´èèh‘H””””™™yëÖ­Í›7÷ïßÚùU¼óÎ;F£qÏž=&“) `ýúõæ /))IJJ*,,>|8Ç»yóæþýû×­[÷Æo\¾|yÚ´iÎÎÎãÇ—J¥III.\J¥;wîôððèE@f2™ëׯ×jµ …B&“ùúúöÌzÉT*Õ`0´2@S¯×“H¤ððpó™B¡ðññyòä‰V«ýã?Î;õÉ'Ÿž?þÝwß jhhX·n]`` \.¯¿þ:™Læp8|>?==ýwÞA·L[W[[[ZZêîîÞ»z×R™ƒL&7.%ÛœZ­vttŒˆˆ0·O]]Ýðá÷oß^QQÁår/^L¥RÇãââòìÙ³¥K—:99L™2¥õá"‘¨¡¡!88¸×yE8Ž3 “ÉÔâ˜Æ‹Éd²ÀÀÀòòr½^?wîÜùóçc6dÈggç§OŸ–——ìÞ½›Á`ÈåòÑ£GϘ1#44´¼¼¼¼¼ÜÁÁaåÊ•aaa†M˜0A«Õ–••}ûí·ååå$)...&&¦õµ­««+))éׯ_¼G¥R)Š^¯os\ßСCíííQ§ 2dÏž= …bÔ¨Q{„Ãá¬X±bôèѯ½öŽãR©´¼¼<<<|ûöíNNNÇG‹ÙÛÛ/_¾<<<¼õo|ñâEyy9Çsqq驯!Âh4æä䤦¦âl礻ÏkŸKµõ/‰æ¬ÛÍh4‹ÅR«ÕxTsĈÅÅÅ2™ ÇqôJrrò’%Kþñ|öÙg-¾¥ªªjûöíµµµ‰‰‰íùŠâââ›7o†††öÁâ,‹F£)•ÊžšIúÂ… ÕÕÕóçÏïkÅ pwpp ¢W\,))IMM îƒÅ ˜L&NW©TV8“t~~~vvöرc{ªx‹ÅJ/ªy^Ûøõú?.ž'éØŸÒ­ »|³ü>êëë7oތƉÂÉ>tmÚ“1nUØÕ9„b$ Ã0‰lçìNWj1¬´7ƳmÛ6¥Ri>ÅÁ0läÈ‘ ƒ~Ù‰^ddäܹs'Ož ¿èR ¶“8vVÖÙ½¶pq|ÆŒM^áóù|>¿•³à·ß~~ÐÍ`&irØ뺰& ­ó‘u˜[755µ¬¬¬G¾º×›ËåIIIÖ¿ž°Ü¸qãéÓ§Ö¶V=5д¤œÜÜÜììl«•B¡4™/¤0™LW®\)--í©®!‘H}¶åU*Õ™3gzË,Î}vÁ0ìêÕ«‰Ä:w_ ¥ñ語…3ØÎ«~«Á0Œ®,IºßSÏå°=,ëç|š¨{QüàôÚ p/@7”RÛò_ÃH$FƒF`M&íýÿ)‡ rž½Å/4;h&¯¨¨BU­ÇkÕÌRŽîTXo¤ˆªøŽpµ À«ÊUå)¸LNK)Ã0*îLÝðËö–:gj*訋}†K€šá¡Uµ«¾b¹†Eeü×e3üØO?÷{Τåûþß¹ŽN£×¨ÚùÕa.õ¡NõÐÐG4¸eÕ8´êö,LeØQh ÃUOoÞðé¢h¼¦¦f@ð¨~wô‹5 Ù$žöõAlèè#ÒÊhI;<ʬº$ÿì¦i%E(çøÁýëw¼56îsºÛ•×Î ôZVm00¡  Œ›&MQõT«’ß<º)ñè7™Lz½þò®Ä½·Ô;$bÔÜõíü “Ñàªqõ¥ÐÐGhÜǼ`ø7ÔUµsù»I_=ÞHúhOOøAÚ{#.‡dÉ’%K–_*PƒáX±Û2Dû@ àt:‡h m6 Ã?l–——wÿý÷:4 ®ZµªµµõÑGÍÏχ ðþÿþ‘¿ßtÝo³µ˜%K–,¿$Y~{Ó»ÿ}÷¥Çýpó®ý饗æÏŸÏ0ÌPŒ_{íµ¹sçJ’¤íÑvÞÖþ÷öö>ñÄùùù7ß|3êõzÛÚÚyä‚"‘ô-0 Ÿ¼-JÒ‰å>¬ÈÕÕ)/Ç’f…h"m1êtÞãâ8Zä±·t F—çÕµöF”zš»dY)ôØ¢ &‘bíŠÂÁ8Mân‡¹ÝlŸÙ(Éw„b +¸ì&YQ‚‘¤AGÚÌú®Þ CÅž£í½ƒíË ]Ýý!^rs,,'Dâi³‘ÖÓdÏ@Çâù3ød?`Y6nÌ¿·…‡ HQAB¡ÐØd¶E‘eY3þ{‹ÅòÌ3Ï,\¸Ðëõ"¡P衇Â0ìGS‡ èÝ/[`bÒ©_ЛN¹-d:•ìé 1U‡«m=’À”äèë[º‰øØbûáÆŽx,6²ÐÚÔî ‡#ù:ŽöõûÍŒªbGw/…\ ÙØÚLÆÇ|k?¶Ô~¤©3‰» }þÀ€?h7`²Àz}ýlz´¹Ã—N%GXj;‰ø¸{mcG,–kêòõ‚!—™`ÓI_ï…)jíê9¦Ìm¨oîJ$âcKìµGÛc±ØˆBKK‡/ŠäÙéh4ÚÛ0‘IíÞ>UâòlôÑ6o2[l¯=ÚÅÆ”Øë›»"‘hQŽ~ÀìÚô¨*r]¾~TF¼©½;•LŽ.²Ö6uÄãññ%öÃG;bÑX¹ÇèíB9f‚eRÝ=$ª˜H¨¥Ó'°érQ6N³Å* ,­]=¡P8×FÅcñž>¿$"·wõ*"[à ¶z‰ø˜[mcG<]lkhéŠD¢…N] îXiÈBgw¢Š9&¼©½;™LŒ)ÒìããJ‡¶Ç¢±RÑ×ç÷BNγioO?Èiíèa™Ôð_~~~$ÔÒ³H—UŸÉ¾?’N±bEMK `¤p‹‡ (É Ñ´à±ÒŠ ‚qNd†L4n¤qEU£)>ÅJ(¹­t8Á§yñ4>»b7’¡ljrf§EO˜iœåp‚eÅn¢µúÂN³Îã4hî3ÒøèR×—uÝ41¢p_CPÕ¥îÖÞH4É•äÚ^îìzlF³Q¤}ÀD#JröÖwëHlʨ¢Ïk»p]ž[×H±bY3’ä|xÓL’DCWÀ¢'Ëò_õé)|rEþg‡»(7<ÿ@K?/HËrzéHªÈe0Òä 9Lº<§å›æ^…)s}q¤›&°‰•_íQuD‰»½/I°Å¹vNT:ú¢n«Áf6në7ÑÄÈo…MY´»Ö‹"ÐèrOCW0™Jó±´Ðíç;Ì4MÖwÌ:bX¡s_ƒOOâSFçï:ÔIâè¸ay[8AV˜ÓeúéB—F¦îÝH¸¬û›2¼4N¬(øúh¯¬(•%®ÎX(Æ{l‚¬¶÷F\½Ój<ÔÚo¤ñQ%®½õÝ:›<²ðË#>£Ê<ÞP<-”æ;¬èˆå9Lz=Ußá7éˆáÇ„aS¿6vXÞáÖ–—Ê (ÓJæXP kômºÈc«iì1Pø„2×îZ/…£*ò÷7öJ²RQìòúÁSì±I*ÔÖαè]vÓÁ–>MØžúnšÀ&(ÜSïƒ!0²ÌÓì‹ÄR|iž=ÅI]±\»Éh ëÚý&QQìÜWïÓ“Ø™£ò?;ÜE È˜a¹µmþ4'–8Cq®7˜,ȱà8~Ô´È’<û×G5aîÏk»(?<ÿ›æ~A’‡»|Ád š.r[³>™õÉŸÇ'4É$àGŸo2|fûP{ðþW÷žÐêÞqÙÄ˧Ã}ÁÔk>[ì¸kö6#õY­ï‘7¾ºúÜʪFÓ$¦èø|>Äãñ\ýõÇí®ë}ðµ}íýñ…v³ž„a¸£?þ؆¯×ÒPâ¶¹Ìmþ¢™4XIûÏI“KôN‚…eÞbôzýÒ+ÇM(µÕµvÇy8ßi¼bjQ¹ ªÈ!ó]Vo ISä—Œèðúú¢<„*€OË_‘Ë8÷œÂúVoœGTUl ‰«§—”Ùá‘æXŠ ¦ä/‡œË¢sXôÛ‚U˜c:Ø$p¬Ømjí‹q¢Rê1‡ü@Œ-v™djïOxlz³>Ò²©‚ÓþÖ€ŽÄ‹]棾ˆªB%s” %ø2™•®@2ÏnÐQDƒ7â0ÑyNSM‹ß¤#‹rLGºÂ‚”¸MÝÁTœË<–+ö„ÒN†aM=Q—E—cÕh Xôd¡Ë|¨=H`X±ÛÔÞŸ`¹Ìc§øþ([ä2ªjë‹{¬z«‘>ÜqLØ7­šÄ‹]æ&_DVA©Ç<eƒ ®Ìcæ%µÓŸÌ³ :¢¾+â0ÑùNSM³ßH….S}WF·ÉLE¡ÌcIq’/”*pkôEs,:—Íp 5`Ö“….smGÃÐb—¹c ‘æåR9šú"l±ËAHk_ÜmÕÛLôáŽÕ@䘶(+r›š{b¢¢–z̈s¥n“(«É\»Þ¨#ëºÂv]à4íoñh¢Ðe®÷†!)q›zÃéHJ(˵¤y¹;˜ÊwèI?ÚÍ1ëÜvÃ7­³Ž,t™j;B†»Í]þDŠ“K=æXZì0E.##-½1·Ug7ëµ5a‡Ú‚$»M­½1ARK=æ`œõǸ·IT ŽD®MoÒSG:Ãv#]cü¦Å¯§‰"—ù¨7¢BP‰ÛÜfÂI¾<לdo •çÐS$q´;â4Ó‡qKÀ¤# sLG:C‚”¸Í]d‚•ÊrÍñ´Øf s ‚6÷Ʋ>™õÉŸÁ'síÆðâ3Ë´±œ}Щ­­8q¢6–³ä¥/XA:!äÔ4õÏ>§’"0‚êëëÇŒ£¥üè[ûûÃé¾p*câiáÉw¾QUÐК>:?ǪWU†áuëÖ¡™ÑžM_´Žt†žÚ|à9SIùë¦ýMÝaÀÆÝMçŽ+„ HQaš$J\Ææ¦†ÏuDRBJ!Ç /@ÄðŒDû!ûÄ2ÌG_zk«ÙU|ÇUçm‘;bœ"KrÒöðb³Ýi¦ñ¾(‹£°‰Æ¶ì+°Óg”Ù vDë¼±ùÆñ%Ö`œ7PèžÆ`Ž…WdޥŽÍÁ@ŒÓÔŽ.4-2ó¢"qi(¬7Ñã´øB 'Ê%9ºÿúÖÕ—^XiWzÓ ft[I×{cšÈ1ÓM= E…Kr Þ KIcŠÌþ˜à±ÃŽ™ö¶¶øYLv^A)%!°(ÇÐÊ+ }¡PÕ˜ò}G:Æ”44D£ ðÙî¦yÉ™SÂÞ‹ÆWz;Z•xlìä1þžäŒI%ï~ôåð|ÛYEº÷k^ÅšËrti^é‰ðNIáhëCbh¾jèeD L)5ÔúVÏ(6µø¹# wë£i¹/ÊçZ)†[瘈Æ>VVÀ¸Býáî4/*“JL ½Lš—Gæâb .ÚiYÞcÖÖÜÏÀ\îÒñ¥I\b¬ëaA[`쎑¤XêÔ1‚ê sIhëƒchªïeDIÍ›XljósqFæÖǹ7Ê{,ŠÀ­ŒžÄ]f¢±e0å;aæ†^&ÍÉ#r „ä 6ZQ¡.?cÒVÑ<À.wëë|i^T'—˜êz†—Ç{"B8)–8uœºÃ¬ÝHê ¬u€ÁP´ÐA7ôWŠLíA.ž–†¹ô Vé‰òn3…¡Hk?C˜ÛB6ö²¢ ¦”j»VT&—šŽö2)N®Ì5“Ò@LÈ·Ñ*€Ûü¬IGØ Ds?£ªðpþˆ/Í‹ÊäS}/“æåÑù†Þ¨JˆÅš—@wˆµH…µ0(Œ;éúã…/2vùXZ,wé’œÒá]f’ÀÖ†"Ð\+u´ïÛªïfXQžTbjêç’¬TáчSr”ϳR·°Fw‰¦~FQ ±}­ï¸ª•oè‹Á¸Pä ExC¬Õ@d}2ë“?OŠ2€¿mä¿—bO&"À0lÖÝxö öOl¬ùÞø4¥Âý_×L}ðÕ=™È4}tÞÂ+&™õä`ãcó©a.p_\8ÃmÕz‚I-Þä9Œÿ³ôÒ\»A2,äÓ£±¥k>Ø]sx|YjâË\Tß@˜Õñ£+aÆN v«9ÇS`5›ŠF£’(};Iì?XûU}g,þh×—ñxŠ #]èÜK~uδ3 „jT"fùü‹/["¨ªÈv=fÑã3ÏU”ç‚Ø0쬣p‹ßññ§ èê 5w‡®õswe€#´‡\{Y…GE8– ¤”#½†Â#s©¯:@còéoºNÃ\dgH§åÁJjgX´é1³mèã æ"÷w1+¤÷u0‚ *ÝTãŸàÔ"cåcÆInà))v»Y†Æê¾lKK 4"—ªía”:IBêK APk@0P¨Ç‚×öp Ê£öu¤ΧxNå9¤7"„Rr¾àeµ#$Xõ˜U‡Ö÷q8† w“5] € qôWŒ ƒ 7ÕìçcœZä œâˆN#FpãOâH‰“8ÐÍB04¡è;aGzØ´Jœd0%õÅ$G¨% èI4Ï‚îaQOïkOË*4*>ØÍ²"(Ï!}!˜’ól¸¨¨í!Á¢Ãì´®ÃQ¤ÂCÖt2*€ÆÐ5 /án²5ÀÇX¥ÐN$y¥+": ˜žBûyGJsˆ^M½§=-*`„‡ªëåR(q¡”Ô“ÜC ?¯#|~ØÇ"<¶€Þ{LuÈÇ2"(Ë!{cR )çYqYíAÁ¬ÃœF´®—ÃP¸2—üºóXÕïïd8 w‘íA!ÊÈv"-¨]aÑaÀŒz´Ÿ'0¤,‡üÆË@4¾ÞÛÎ ¨ôP }\’W‹D„‘}QÑeÆq nöó4Ú‰C>áq…º=íiI…FæRµš0'Ù“R®WÔL4ê2áYŸÌúäÏã“ u™F‚ V»#Ý‘£Þ°öWße%3)`°1‚À¥Kæ¯,×Z–k¥ ‚¡Áö™mAT? ɲ*+ê Eß=å@Tì6/ýí™O¾³ßëOÊs­÷ünªÛ¦Ï„A À& ûõ(»a’ÛL!=Þ3« E zEat¡uÏѾY“r®:×DLÍmµ­=ºB7 @QTÔàTU€P&#Pqš)_O_ š<{bE(δöF~sѹ,áTUÐÚÌóëëRœè 1Œp$ÄŽä%Uç Öb$’À{"\*(Îwɉ޾¨]H X̦ÝûëD̆ØB\rÀ'œg›¢ @¥68˜RiµØ‚ˆ*èŠÈnl #}¢†ÝFd¿O p8Ï‚Ô÷‰‚ò-po\ްj™ fEÐSr0‰ÁG$‡vѯ½‚‘€óÌÈ¡Cá| Ü‘“(·ÁqNéM(&A æ ”£‡ízô€O0“p®ù˜°| Ü9*³B¡´âO©ÅDVAgDv`Ôö‰V ö˜oº ‡óÍHÀ¨@P‘îKÈaF-µÁ¬º£r®¦q¤a@²Ó°ÛˆÖx癑Ã=ŠÂùØ‘<(·ÃI^í‰+ù&E ¦€äÔÁú&Ì„ìp ηÀm!‘•@© 3Ê@J-² *€ÚC²Ë›iäpïwÂHÎ3ÃGDY… mð@B 1j©áeàÊ#L“H}¿h×J¸[ÐiÂzE†ó-pwLŽq Ü'ÐWòL0†BÉ©ƒt·`"á<rÐ'à(œoÛCRZe68Ê(ýI¥ÐŒj É.=lÕ!‡zE kUObpžn ˆ¢ •Ú`J ¦Õ+"* +"{ °žDêú¿­úo…é!*°À=19Êrœ/¦äaƒý’CçКŒ°o«¾#"§4a¬Ò—T Í0A-A)GÛtèÁ!#,ë“YŸüWûdæ)GQÁ+;êßÝÓzBGÙüK'\W5vði2 þÉ >ù)çËúÞÇÞúzp²ûŽö>ýNÍâÙgÚͺŒ1:ø‚Æ–:ï¾ú̇þçKCïùÝÔ…öºùÇYµ¦% Oµ‰éHgoØZ4úhÇû‡ë›tîáÃ[YKë̦xÑ*õñqG<¢:TÈôòކúº¿`hm9ôúOöúÃöõvÔ¢¼¼Ç§¢þ†–Îæ®º!hƒcyÖKçµzº…n$ò‰p_˜U‰BÀ¡´¼©fÀ.D5õ» h Æ!ú¾¸wמý=)ĘËöø›úCñî˜Jäê È¡­aURá2‹âK€8t¨ ¦Õ2 àd¨'¡z ‰AMAÅDBV ´„T‚óMŠ7¦&h´SíK0†YAR€ú“j¾`ÜTld"Ac@!1ØcT;¢jZ„Æ8U_DYPiö§Ô"ÜR:HƒÆ€¢Ã¡=h«¢ —[”nM˜] °p0­–Z€ @¾¸êÖC5# Ùt %¤Î7)Ýq5ÁC£j 3ê0+H P_RÍûV˜•‚Ìh *8{ŒJWTM‰Ð§Ú“TØ@”ƒý)µÐ n©N2 ) Ðš°ˆ*ÈЇêK€°«A¦Õ3ÈUÝzˆÆ ¦ b û·Â MJwhÂÒPˆQË­€‘ Þ„šg€j * ²P )¤bœkTºbjJ8NXŒƒRj 0ÜT4d AcP¡pØ¥W;¢*'C#ª/ b,4®†X8V‹Í@V¡Î°êÒA45•LÕ+*\hVº ÁA#ªŸBiµÌX êM¨¹ˆÀ Æ b&!+šC*ŠÀyÆïª¾7" nqHªF€"pSP±ÓI†Án½ÚUY åP{¾­ú0Rj±(n «9:H‡ƒ¦A²>™õɵO2¬ÿ¶‘—$åäxx㓆ë/w|P91æ à{,!èÝ=­¢¬.œX<©Â³ò­}’¬|zÈ;ç‚Ñ‹þ{Ær2)Ž.v¬ºãB=6ÃÉÝ|²ŠÈh ©2ïRep OŠ:E2Ã¥ù¢C ¥ØÈõ3DJD ô'#ý æ¦x®¶ÅI#&ùÚ°N‡ÊÃÍìÁžD”R#ו$y*4pI ²X.ÍcèL\ÌÕ‹õZÊåfîPHG!J™‰mÓ² Š \„Ç¢<šGs‚»S¸ƒì¤Üx¼°r3×¥a –|+,_Ç *Ü—Æ]”`À•Ö“„ éqD)5rÝ)’“ B=—’Ћyhž@AG‚0ãb¾^¬$ŒD”2Û§$*ÒsQ‹ph®Žƒ!È›"ì„è ¥Æ(e@¥R8¬£y˜™;¥!Š ¬Ÿ#’’¯ãDîMã9”`•–ã… 3sµa)%F®'M°\ ç`0ÍS¨Úž ͘T`ŽDh=*3s5aF®#IŠ T¨çbæÐ<ÃÀ›$l„˜CKG£”•Ê̼VÂå&¶²öuG IDAT)FŠ \€Ã⚯ãdîIãNR°rsŒ2bR‰V¨<ÌÄÕEt(¤”¹Þ4‘–à=¯U½‡æiTmK&L*4 GÂô Uß™$*2pq ±h®ŽGaЕ$¬¸èÖ‰ Ñãª>ë“YŸü|²#“‰öÿç7ò™^xá–[n‰ÇãC‰¯¾úêœ9s´Õ?j¢è”)S`ðýNß¿­ÍXûþÈÒsŒOWþdpý“Iáˆê¦Ùö$Å+H.Í„y,ÈnŠ•U¨+EÙ Þ€É 1½“\8b ÅMsMqZ‡fX""à¹ÃÊpC:IŽ@”æ¸ÎŒ‹9(l¤QÅMqõQ= ÅúÒDRÂòh&)¢ý,™Cq0¬¶%i+.ØH±6bÐc²‹âŽDô8¢º)¶#I± ’K1 p„›deu&Õ+¬6b ÕMs-qZVá\šõ³xDÀ=Ã+°/M9IžDä¦ï„(TqQ\}Tà —b{ÒD\Äòh&)¡},™Cr¬¶&h .8HápÄ CeÅÕEô <Û•¤Í¥˜¨€ú9ÂE±*€:R´L¸XÕ0ÉEóµQ=¨šk‰Ó’ çÒL€ÃÃü1aÝiÊAð4*7Æu&\Ì¡øÃ‘cÂŽÆtyh¶!b"žK3i éeÈ’Ã`µ%¡³à¢ƒâe„Euš0oŠLKh.ÅÄÔÏnŠt$i!˜q±.ª7`RÍ×F4al[’T8—f‚â ň äMS‚×aòјބIš0UÜ×§UòÐl?KDE<—fY îaÈ’Ãaµ9ñ] Ө즸ºo«¾;M¦$4fâ":À.Š…€Úž¤­„`%Å#Ñã«>ë“YŸüY|2)aƒGOþQ#ÿ½“Ð~”ŒôG¦ßÍXâ:À¿¬?IEúY]L$J¨hH 8ª€Œ Ò•Ö;q†€åÖ”Á€ ŒkO ä’ÉV—”ð:ä© OS±”Œù‹H¡Úš2š0Þˆ ­)#+."åeôi+¦b<È:É^–Î%“€ö”ÁŠq:TlM)D²cL£T¤€Œ÷stL$J©hDÔ„%éJëÇ„õ¨¨ SÈ%=¬.!á¥t4ÈSž*¢bŒŒu3:‘F!¥-e4¡¼åÛRF VÝDÊÇèÓ2VBÅü<ÈR:“ˆ^–öIí)ƒãô¨Ø’4RˆìÄ™.FÏ«Hëçéè·Âú9:ŸLH*Ü™ÖÛq–‚¥Ö”Q‡Š6ŒíHÎ#½¬.!á%t,$hÂâš°"ÃJkÒhDÊ·¥Œ¤º‰”Õ¥$¬„Šx*$%t4.=¬ÎC¤`Hm;&LhMIDvi/£ge¬ˆŠ ðtD$´îãè<2!«pGZoÃY ‘ZSF"Ù0¶3mU8ŸLô²º¸ˆ—Ò±@ùyªŠs êeôNœÁa¥-e0 ‚ãÚS¹DêXÕSǪ¾„Š%%ÜÇêÜD ÔÖ”ÁŒñThI XÎ!Ò^FÏ|[õ(¥cQ‘ìcé<2©¨pGÚ`ÃX‘Z“FúXÕD) YŸÌúäÏä“TôGãÍ?ú]Îí¡!€ /^¬( @’$ ÃNè•ʈô†’*BþBߨJ!"+c–xQU‡eY…dF!‚TQA HÅ!™WÐãíENA€pX’UXVa’!D!;É>³AÀ’¨"Š a°¬ª¤Â¤ "((T–8ûaa¤ *(©$s' ãT=Nرª0HVT$# •Y˜Ä+ÈO†Ã’¤ÂÊ?[õa?^õYŸÌúäéñIXe%Ç¢SUõä&ýä=±XÌl6ká{íŒÇãF£1“ò÷‹¢ˆã¸ªª²,?ù䓨Óé¼õÖ[†axçÎ^xaöußY²dÉ’å´ðÑG]z饩TjÇŽ’$¡™/t:ÝW\‘- ,Y²dÉrº¸âŠ+rssû]8ö#M…ã¸leÉ’%K–ÓÂÁƒ;;;¿?䨪*B¶Œ²dÉ’%ËiÁëõì³%’%K–,Y~²!'K–,Y²dCN–,Y²dɆœ,Y²dÉ’%r²dÉ’%Ë¿/èPŒzzzÞ~ûívΙ3gýúõS¦L9묳~ZÞŸþù2ûÛßz<mûÍ7ß”eyܸq}ôÑœ9sëׯ¿ð G5””»»»7mÚtñÅ6 PSSóå—_Š‹‹/¿üòÓ^ˆ;wîÚív³ÙÜÞÞ®×ësrr~B‚'Ww¦$ÿ¥Ô××ôÑGÚö˜1c.¸à‚=dÛ¶m·ÝvÛ?“ï_|±ÿ~@EEÅÌ™3OøöÙgŸ>|xUUÕ?‚û÷ïÿâ‹/2/½ôÒ²²²=jÍš5ùùù_|ñi)ä;v477/X°àСC»víºþúë†yûí·gΜYQQ¡]8Š¢æÏŸxÿý÷[[½îþ7¿ùMiié)e÷ÜsÏ•——_tÑEC1~ýõ×ùÝï~7Ä’¼ñÆM&S¶?ítvv¾ûî»Zu···¿÷Þ{—_~yqqñ`›–––>øàÊ+¯,((8ýO9^¯·ºº:—B’¤êêêO?ýô'ŸØÇ\]]]PP %H’ß½Jgݺu/¾ø¢Ñh,//'¢¿¿¿ººúàÁƒCL¹«««ººúèÑ£ÚÇ/¿ü²ººÚjµfBÚéeÛ¶mÕÕÕ™’!âçôd2ÙÔÔ¤ªª^¯çyþÈ‘#©TJ§Ó .ÏS‚¢¨Ì¹ˆ¢8¸$ÿux½ÞÛo¿Ýçó•——£(z×]w}þùç?zÔæÍ›ÿò—¿ü3ùÖÔÔ,Z´HE£Ñx÷Ýwoß¾ýƒ+Vlٲ崜ãÞ½{«««ÍfsyyySSÓüùóÃáðURRâv»OW9oÙ²eÅŠ€¯¿þººº: iWwCC˲·ÞzëÁƒËËËŸþùÇ|Ë–-÷ÜsÕj-//ohhøãÿ‹Å†ž×Š+–/_¾dÉ’ÌÄóâ‹/®[·n(–‹¥¼¼üä·se9-´µµUWW·´´h¡¥ººº­­í›£GVWWwuuýKžr4&L˜pÉ%—hñàé§Ÿ^¿~}¦É»âŠ+$IbYö¾ûî»øâ‹3‹. …™3gÒ4­móÍ7óçÏ_¸p¡$IÚLJzèÍ7ß¼õÖ[O<ñÄ´iÓ†rc8eÊ”?ýéOwÝuפI“¼^ï³Ï>ûÔSOýío«¨¨=zô¢E‹%Iš5kÖí·ß~á…Ž?þ©§žºõÖ[½^ïöíÛŸzê©W^yeïÞ½z½~è'¢`öìÙ0 Ϙ1ãÙgŸ]»víí·ßn2™R©Ô‹/¾(ËòöíÛAøâ‹/ Ï>ûì×_]–å>øÃ°Å‹744Ȳ|Ùe—-X°Çñ¡çnµZm6›$I‚ 466æää ôôôL˜0áÈ‘#EEE'¿^édl6›v.===K—.½ýöÛ§NzÑEñ<ϲì=÷ÜsÉ%—ìØ±ãᇦi†áwß}÷oû[QQÑK/½ ¯ºêªÎÎÎC‡3æ/ù EQCÑÏ0L{{û¬Y³¦NZ\\üÜsÏùýþp8}úôén·û7ÞøðÃNçPr×ëõ‚œ|“AĬY³EyþùçM&Ógœ¢è¦M›Âáðĉ ½^ïîÝ»‡þ»½t:ýùçŸïÝ»÷“O>©««;ï¼ó¦NzÞyçÙíö 6|üñÇ:®ººz÷îÝ€³Ï>ûÁÔ|ë­·V¬XñÎ;ï”——¯_¿~åÊ•ÿûß;;;ï½÷^N'¶mÛvïÞýôÓO7n÷îÝË–-£iZUÕ-[¶ÆlÀøÑÔÔtÍ5× †D"±yóæÌþiÓ¦Mž<¹  àõ×_ߺuëÞBl¨««Û¹sçÁƒ“ɤÏç“eYÛ¯] »víºâŠ+®»îº@ pJgòé§ŸîܹsçαXìâ‹/žß®]»‰Ä 7ܰfÍš7ß|sýúõË–-{ôÑG?ùä“SÊ=‹d2©×ë1 cYVEQY–ííí-..®««K$§ÔÍ5sæÌ«¯¾ºººzéÒ¥---»víºêª«æÍ›W__Í5×\vÙe»víêëë»õÖ[‰Ä5×\óÒK/Ý{ï½=ôÐ¥—^ú?ÿó?¯¿þú‹/¾8Äì*++_}õÕÝ»wOœ8q``àý÷߿ꪫ.¿ür›Í¶k×®n¸áÉ'Ÿlooß¹sçc=¶uëÖ>øàÏþ³vì¾}û|ðÁ%K–¼ûî»ï¾ûî_ÿú×!f*IR86™LA (šŸŸ¿jÕª>ø`ëÖ­ .\ºtiæÁú¡‡úè£vîÜyë­·.Z´¨¾¾Þçó­^½z÷îÝÇ?¥šÚ³gÏÎ;ÛÚÚÆŒ“J¥N(ÉgžyfÓ¦M<òÈÓO?íóù8Žëíí ‡ÃÚ3Ç–-[/^|ß}÷ÕÔÔôôôlß¾}ĈN§sèÝÅ+W®,//ÿæ›o´²,8p`Þ¼y_|q Ð.€Ûív8óçÏ_²dÉòÈ#ìééÙ¶mÛØ±cm6Ûå—_¾gÏž–––W_}õ¹çž[½zu¦/×l6˲¼gÏžX,vàÀ£Ñ(IÒ•W^YQQñæ›oNœ8ñ™gžÑš p8ü»ßýnÔ¨Q6l¨¬¬|þùç³á4R[[»sçÎÚÚÚL?peeå®]»ŠŠŠ~ó›ß ¾oÛ±cGyy¹Çã¹ì²ËNOÇšF{{{MMMccã÷Þ¢>þøã{öìù 'öÍ7ßÔÔÔÔÔÔ¤R)mÏ7ÞX^^þO–×äÉ“3mÁ™gžyB‚kÖ¬y÷ÝwµíÇ{¬¦¦&óqß¾}ï½÷žvëtª]4555Á`P»büñ7¾õÖ[F£ññÇohhJ"/¼ðÂ;ï¼óӺעÑh:¦iE{x9räOHðé§ŸŽÇãÿõ_ÿõ³¹øù矿qãÆeË–Íž=û¶Ûn<<öÇ?þñ7Þ¨¨¨Xºté×_ýôÓOŸ|øûï¿¿jÕªŸóš;vìêÕ«ßzë­S:êðáÃ6lxóÍ7—,Yb·Ûµ·Ç<ãÿ»Ý¾dÉ’Mêì³Ï>yðéGEñжyž_¶lÙßu×]o¼ñFqqñìÙ³ï¿ÿþÁ"‡èEÛ¶mË|<÷Üs3ã:çŸþÍ7ß¼yóæ¿ýíoƒ¹è¢‹Î=÷Ü¥K—677¿òÊ+wÜqGqqñ’%K’Éä½÷Þ[VV–ñI’$—,Y ï»ï¾Ñ£Gß{ï½Ù8qiii©©©Ñº×4Z[[üñ“;ÓÎ:ë¬LÏéìX»ì²ËfÍšxæ™gNø A‘#GŽ9ò–[n1›Í§tbwß}÷©6îCaêÔ©•••wÞy'Ã0Ó§O?áVtذaS¦L¹ì²ËÆÇóüiÉñ¾ûîËlçææjÎ÷Þ{ï矾lÙ2­áG6lØÔ©S/½ôÒ &œRîùùù6›­§§çðáÃ,Ëþ“ç²mÛ¶}ûöUWWÿlþíõzï»ï¾yóæÍ›7a˜|ððáÃ'_ ,8çœs&Mštr yyy'N\¿~ý©qÿd&L˜0nܸS=ê¶ÛnÓét0 ?õÔSÚ¹Ãá9rä /¼àt:?þøãµìêêê?üáÁ`pýúõ«W¯®¬¬ÔfèœÌ{ï½÷öÛo?ûì³þóŸ!Ú¸qãÃ?<”Þæ}ûömÛ¶í¨¬¬7nœ Ë—/Eq°Í®]»îºë®›nºé„qiÀ-·Ü²gÏžåË—_tÑEÓ§OÇ0ì¾ûîÓæ‰TWWkC•Zà}÷Ý×ÞÞ>þü÷ß?N%Ng"³gÏþÿøíÛ·gnÇFãÈ‘#«««iš>¥Q½Ÿø”ó0›ÍALœ8±¡¡á‘GI§Ó§tx ðûý~¿_E«ÕÊqÜc=v³Š¢ƒ!™LþázÊO>ùd[[†awÞygf§N§#b̘1<Ï?ôÐCn·û™gžyú駯¿þúuëÖ-Z´hÑ¢ES¦L9-ÕÖØØ¨×ë'NœX\\Œ H4ýG–š°Ñ£GK’ôÐCµ··Ÿê­+Ïó’$¡(zª]‚'°ÿþùóçÏ›7ï‚ .Ъ† †ý~*•2™L(ŠšÍæt:­Í”;-³††ùòË/ü~ee%EQEY­VQý~ÿâÅ‹Ï?ÿ|­£µ¸¸x„ ‹…aí-´8Žëõú’’’aÆÝÿýÚìÄ¡——·zõêµk×~øá‡œ8qâöíÛq‰DÂ`0d¨F#†a~¿?™L †ž#O»Ý>|øðƒòùÄçó)ŠâñxÌfó]«¯¯¯³³óÌ3Ïœ9sæÌ™3‹ŠŠöíÛ7x @( ƒ•••cƌѮnm0f̘üüü}ûöåæær7}úô×^{í©§žr»Ý™ûîD"qÖYgmذáÙgŸµZ­™™uYþX­V³Ù._¾|ÇŽK–,?~ü 7Ü Šb^^ž–QIIɺuë^~ùåÇ{lèed±XÎ;ï<—Ëe0´^ˆ‚‚‚Ûn»a˜G}pÏ=÷h¡¥¢¢bÚ´i……….—kòäÉcÇŽ=¥Yg#FŒ<‰vÚ´i™¦jóæÍsçÎ]¸pám·Ý†aØë¯¿®•$Š¢UUUÚÌã³Ï>ÛårÝrË-étZ;Á%K–L›6mˆ¹‘““ãóù|>`üøñf³ÙétF†µyÒEåää ±¡ÔëõS§NÝ¿¿6upçwâ8®UñÛo¿=jԨ͛7¯\¹ráÂ…çž{îš5k6nÜXUU…ã¸Ó鬪ª²ÛíEUUU|û¨¬¬|å•W^|ñŽ{÷~øáÙ³gÏš5ë÷¿ÿ½–﫯¾šŸŸÿ /¼öÚk_~ùåÖ­[—/_®õÏœyæ™Ï?ÿüo¼±}ûöÙ³gßxãCÌT›’«ªê«¯¾ ¸îºë,X°|ùrÍ'_xá… &̘1cÔ¨QóçÏaÑ¢E€uëÖ5ªªªjĈ§tÑjŽ6Ÿ¢¤¤¤ªª*///S’•••š[²,ûÖ[o=üðÃsçÎüú׿5jÔwÞÉqÜý÷ßX»ví¤I“.¸à‚Ñ£G¦L™Â0Ì)ÜfÂpUUUEE`úôé™!÷ââbmiáÂ…………ÚTÀŒO6mÚ4ı·Û]UU•i€***´ Dû‘Ùgž)ŠâìÙ³ãñøK/½”¹ºµÉ«™¼***4‘$I¾ôÒKË—/_¶lÙgœ±nݺ-[¶TUUåää¬Y³fÅŠGŽ9ûì³Oh³ü3·DUUUZ]g®è­[·fÚù—_~¹¾¾>SÅ¿þõ¯1 ³Z­¯½öÚ&qÆ{öìaFk—“Éd¶Ä³dùßâ‹/¾Ø»wïwÜñé§ŸÎ;÷wÞùõ¯ý°^|ñÅÍ›7øá‡Y—ø7§°°pÆŒ/¿üò?2غu«,Ë—^zéŽ;î¼óN4[dY²üûàv»wìØñõ×_Çb±«¯¾z̘1ÿ aÍš5?þø›o¾™õ‡ÿÿȆœ,Yþ(++Û¼y³6¥E¯×kãäÿט3gάY³†>!;Ëÿ"û÷ï?¥aˆlÈÉ’åß‹SóùÿF£1û£Î_ §zg}­g–,Y²dù™È†œ,Y²dÉ’ 9Y²dÉ’%r²dÉ’%K–ŸÀqÓÒéôÐÈ’%K–,Y~˜t:=x!•ïBŽªªÛ¶mÈ–Q–,Y²d9]|ÈyçwR©Ô)­“%K–,Y²ü0ƒÃÊw!G„+¯¼2[:Y²dÉ’å4¢½¶õÄ“%COOöŽä,Y~qL˜0a(k¿fÉò¿B6ä|~¿_{s¶(²üâÈÆ›,ÙóËÃétšL&UU³E‘å—Â7ß|£­%K6äüòPU5r²ü‚Eñåy¾¯¯/[2?ÌjO}}}§kíàÿkØl¶^—÷CNww÷K/½tÂÎ[o½uíÚµ¿úÕ¯.¼ðÂliþ#V¯^¢èÍ7ß $I[I °`Á‡Ã±gÏm’’’n¸!sÔîÝ»?þøã»îºËï÷gVƒ¯¨¨˜3gÎßþö7m%Ä3fœ}öÙ™C^yå•x<žYó4 >ûì³3gÎlhhðz½³åË—:tèïÿ»öqÒ¤I—^zéêÕ«ûûûW\qÅøñã3Õãøƒ>ظqã‘#GZu³,»bÅ -…»îºËd2}öÙgŸ|òIF$ ?ñÄ'ˆÔ¨««{ûí·µíqãÆÍš5ëå—_æ8îöÛoÏ:Ì¿ŽT*ÕÒÒRVV–-ŠŸvÓ©õR8pàT—ãË’)á>åô÷÷¯ZµjÑ¢EçwÞwÖ(ºjÕ*A²!ç{Ù¾}ûêÕ«:TYY©…œ ÔÖÖ®\¹òÉ'Ÿ¼þúëW®\yÇw\yå•gœqÆ-·ÜAÐõ×_8tèЂ ¼^ï-·ÜâõzW­ZõàƒNž<Ùjµ®_¿~Ù²eÏ>ûlccã‚ ^yå•ñãÇ^}õÕ‡~Øf³eBÎõ×_¿wïÞÜÜÜiÓ¦iË)®]»vëÖ­=ôPCCêU«žzꩲ²2—ËõÜsÏ=ñÄëׯߺuë-·ÜòÆoÜxãEEE7ÝtÓí·ßÎ0Ì”)Sî¿ÿþGy$ .^¼xÍš5/¿ürww÷Ã?¼bÅŠ›nºéî»ï^¸páu×]WVVö§?ý Aæææ={öìß¿ßb±œrúúúnºé¦éÓ§_vÙeàÛWÏnÚ´)™LfCο»Ý¾wïÞ?ü$IUUEQ”$ AUUQ¼8´¢(0 C¤µ³ÚWZ“¡­? ð,ËA4cI’2m A0 kû3f–E HKSQmÙ\m§$IAh ²,k鈢¨‰Ôò‚ H–e£Ñ(Š¢ ²,#¢IÒ¾[¼x±Óéôù|»víºà‚ ~õ«_]tÑE™Džxâ ‚xž'I²¿¿?wvv>|ÆŒuuuš—Çb±•+Wþö·¿]¹re8¾öÚk¯½öÚ™3gQ\\\VVö›ßü† ˆþþþT*¥Õß|‹ÅFŽ™ùéîìÙ³xà™3g´u½Þ~ûí>úhË–-MMMwß}÷Ÿþô§©S§Ò4ŸŸóÍ7Ï›7AÝ»w' AŽ92mÚ´éÓ§QWW7jÔ(Žãìv»$IétšçùÇ—––NŸ>}óæÍ²,ïÝ»·»»»²²rüøñ‘H¤»»ûž{îéîîÖö>ë®»®¹¹9•JÍ;÷ª«®ºè¢‹ÊËËëëëeY^¹rå¼yóæÌ™#Šb"‘˜3gÎm·Ý–Y~£³³ó /œ;wnww÷®]»Þ{ï½;î¸àõz'Nœ¸qãÆlD ííí_ýµÖøf®ÿÌ-¼Ö.C¤ªª$I8ŽkmAZã•1Ól´Ö\’$í’×vʲ¬-ˆîñx:”i†´¶²ŠpC IDATIkôEQË]Û£ªª·Ñ’ÕäÁ0¬… ­!ÓÒÑZFEeYÖ‚‡ô{÷îÕGQTE-_Y–µ,4‘ƒÛÖÌ=4Çq™³€aXUU—Ë5zôhAÿ€1•J}ñÅÚ!?0Aãä›z­x£ÅÔ5ËDŽï 9™2Ä£55A´ –e53E5=ßrN–±œcÆ,†‰D"'Ëû‘w¬ÕÔÔlܸñ³Ï>E1•JeÎäÞ{ï »víºöÚk/^üÿå; º»»—.]:iÒ¤·ß~{ܸq[·nýôÓOóóówîܹhÑ¢+VÔ××_sÍ5\pÁ®]»òóó¯½öZ Ãôzýàú i:N/]º4oÞ¼YÛùÕW_mÚ´éÀš|þùçgžy¦¶ãø%—\²ì“O>9sæÌ={öà8®×ëׯ_ÿÌ3Ï<ûìÿcïÊãc<»ö=û’}“U2"‘=„ HÅk)RŠjKBk_ƒò•RJk©E‹PMš–"‰¶’V¥„Kl±d#û$™}ûþ8Íyïwf±D#óG~ÉÌ3Ï–gÎuŸs®s­aaa‰äÞ½{~~~¸àº|ù²§§'Ýo%‹Ïœ9èææfii9bĈ¢¢¢M›6 >üÂ… <O(ÆÇÇÿôÓO{÷îíÔ©Sddä­[·:ôùîÝ»ûùùíÞ½ûàÁƒ=zôðññuÆ¡C‡Ž=Ê`0œœœ233= GäóùB¡Ðèܹs'!dúôé;wÔœ5kV`` §§ç’%K>ýôÓóçÏ/]º4>>>??Ÿ~–Þ~ûm‘Hqá‰D˜‘‘ñÉ'Ÿ˜™™Å6“5á5M}}= jµ\6¬[Á1~Àfà²ÁEr8øà ˆ94@ €gbX§3™Looosss…B_ ð‰ðôÂg!Öa2™<ÃD.—‹‘“J¥‚³‚£,)•JÀ-bðдíÔ©‹Å ƒwá4à’q±o¸¨oÌX,ç­…–ÝG( …Â'š„¦÷¨ ŒÍfëÿ“pô­€éÆì1÷¨®®®¼¼Ü(¢Êd²åË—_¸p¡ g$Ö®]›ššºxñâÎ;O™2"’•+Wæçç7s'jµzñâÅ=JHHpvv.((€»ZTT´zõê 6TWW×ÕÕÍ›7oóæÍ„ ‹/¾ø>ëçç·}ûö>}úìß¿ÿÓO?ݼy3ÄO ]»v4hÐçŸNÉÍÍ=qâÄܹsÁ¡€ïÛ·oÆ PÅ}ÚØØ$%%uëÖ-!!!))iûöí½{÷†(øÇ,//‡ï䯿þzîܹìììâââ‘#G¾ñÆö•——óÍ7999üñ–-[Î;gt!óD6bĈ:Ì™3':::66ÖÃÃCoƒÈÈÈÞ½{'''ß{÷î?~ü¢E‹LXÒLO Î Ó €=˜Ñâñx …]'` J«ÕâŠöÏd2oß¾}çÎú³ë°X,ðìl6ŽçÑ ¼'çF§ìèLb ŽF£7)8ÜórÇÿâ‹/ ‘¢ú*L,óµÇ@Î+¯¼2nÜ8BÈöíÛ ±wذaÆ #„888´½[cee5cÆŒÿüç?“&M:qâ„Z­¶°°X»ví×_ÍãñÒÓÓ›³“Y³fݸq#))I$á‹8pàêÕ«Ïž={ÿþý>|¸¸¸ê1\.w„ o¾ù&lüõ×_¯Zµj÷îÝQQQðÊW_}uêÔ©-[¶\»vM¡PÄÆÆ*•Êßÿ]&“BvíÚ¥WJ)((˜5kÖ¬Y³ íF‰ß´iÓñãǃ‚‚à''§3fBöïßߨµ´oß~ÆŒgΜùá‡>þøãÐÐÐÐÐЇ®_¿þYîsDDDDD„••Õ¬Y³ÒÒÒ¾ûî;ooïÆ6>räHzz:&xMÖÌu¬ÁÁá‚¿Æå?-Á$dœ!À¹C„ù4€pîèôfl0t:ÝÕ«W¡X‚A]1ÂÍáLt:P(„ò àì5¸4Ñ •J%üÎf³û÷ïöìY‰D¢Óé’““!ÌÂlœ$ÜÀ!•JÅårMÓ¢ö”à \\\x<žMJJÊœ9sÄbqÛ»5EEE¡¡¡_}õÕ¶mÛ¸\®D"‘J¥jµÚÆÆÆÅÅÅÆÆæþýû555ùùùr¹œ´¼¼<øöæççß¼yS(¶k×®¤¤äÖ­[B¡ÐÁÁa×®]ÇŽKNNž0a!dýúõ………999H¹ººVWW ‚üüüüü|PûNNNNNN rvvþã?Μ9“œœ¼uëVBÈ”)S|}}‡ 2nÜ8à&¨Õê»wïææææççóù|GGÇ‚‚©TÊáp`Ÿõõõaaa³gÏÎÏÏW«Õîîî666–––wïÞ}ðà­­­¥¥¥H$’H$°±‡‡GVVVppðÞ½{oß¾mnnnoooxíGuqq9}ú´ÑÛëáá¡T*÷íÛéééÙ¹sçE‹I¥RFsùòe—o¾ùF$Éd²]»vÇïüùóS§N:uªF£yðàéÛÛÜu%›­R©°t Áb±Àƒc”ƒÑƒJ¥‚XG©TÂö’€Á²Öä•J%À8}̧A…J8*• Þ…Í09&—ËñO,à~?ðˆi€|Èk€( &|ñôéÓ2™ .ááÇÀ;@’Édr¹R‹xQ„5–>‚³‚âŠR©”ý¯ÉårMƒá‹phãp8Üÿ5ú<—Ë…l—ËÕÛ@2˜ŸnpDƒ¡l0}úÌœ9³¼¼<##C*•®ZµªcÇŽmé+ZZZjggçààrêÔ©ìì숈ˆ•+WöêÕK§ÓýòË/"‘hРA YYYYYYNNNÈ)/))ñööîÓ§üÎçóa›œœœÉ“'ûùù:uêâÅ‹#FŒ˜3gf„ëëë9Nttô«¯¾ú×_eeeuîÜùÓO?­©©áñx—/_†øøø8;;ÃGÊÊÊÜÝÝêtºÊÊÊþýû{zz„……·ÍÎÎ.$$äÏ?ÿÌÊÊzõÕW¡°daa‘Õ`aaa#FŒ8}útVV–§§gBBBPP¥¥åÉ“' §OŸ>tèÐáÇŸ?>++ËÜÜ|ÇŽÞÞÞyyyÑÑÑÈ/++‹ˆˆV®D"‘H$¯¼òŠ••UEEEDD„§§gaaahhh—.]†ž——çææöÙgŸ)Š_~ù¥¶¶vÙ²eݺuS(}ûö={vvv¶—˽~ýú¬Y³jjjª««³²²=zÔ«W/œè-’œœœèŠ‚L&«©©¹yófnn®R©d³ÙP~7Ø lll¤R©!T@¬<1ÒPGè¢3Q×D¸mø;$¯Àma®ã ä¹aM\?¼Á¶¡ËÝ!€4l ¯D¢ž­¥¥%€›Íær¹|>*êÈ,ð÷÷§ïäÍ›7›H]N×sî/êe>iÄÅÍšCl3d"5ü lð<†žôè⻆™[ÃÓˆ‹ÅPùS*•wîÜIKKc„††fffJ¥Ò£G>Üô½%„\¸p¡S§NðhšîÆ?hñññl6{æÌ™3gÎLNN6MÖhÚΞ=Û¥Kº„[YYyï޽Ç'%%¡¿ÃZº•••……EQQ8ttsB@)XR@À„9HvaÕ‡ƒ\jzN;,Ä€BqưP„Žirl¸”ƪlƒ@Â&î x²²²’H$@æóùîîî·o߆ÂÞ¢£££££é;yôèÑ   º]„<®U‰a|>_9 Vh ¢ðƒF‰a†aDsjþÿAð¿`ã0 áÈïÀ(M2ÔË…êÅU†Oãýû÷#"" Èzž8qbÞ¼y&õ“µ^ëß¿ÿ°aÃ~þùç‚‚‚„„Ó yÊì9“I'µ04W$IMM =H/†2 2›!Ÿ£Õjaíazj€À½•5Ò”Á«œàC6F$t4îs;L&S ( xyÒ¸‡_0¢˜üÏþsëÖ­[·n©T* ¼hµZ.—+—Ë á1åheeÕ¢ÿ$=Ó`Ü¢$$UÓÒœõ4ÍÆFÈi,ñØÜ4¯é Ù˜ÕÔÔ4Ÿ1i²–0ww÷ììl|â«««M÷¤ kL”…Á`Èår$@# ³ »dÐÂÆÈ6ÆJ;øwD, w O¥èéÐÂÊ<Z Àþ1œÂÏ‚a N@&“áš ipòP7êdä`ÿLJËëŰI§ÓÁMD„kÑ“¡¯GÊx‹¢ü|Ò«C,¤ù&F/Á9Ïj-ýð™ÌdÏÑ„B¡@ 0ÚÈçó0…´1\Wa!±PýäX8°ÉÖPD¾¶aBY˜l4lÀO$ ÖV‰uÕK8æß0Ãw1H‚ó„1ÔË„” ¢ M… ->F*•šž¥–3ä·K—.™››·=I“µm»xñb—.]ô²4êqã¤]ºhu:…NG Òð“Ѱäg2°ˆÕh4Œ†…íßUå†ô=“ÁÐêt º†Á`0 ˆ#L¦V£!µk8ºœ!Z/°¦Ò€<oÆ`0Ê C 7&“`†Éd5™´:‹Éü{!H•pŠë0D§ÓêtpZ­"]âÁžé⫎VËd±”îîÄXÜ–@çM¨’ÉEz ÃVsd šn-Âp Y‚†m³t¢Ïh@ƒ¥;<ÜÃcÃ5“Km4¥ãèèhº&{éÌÐݰ²²8iiÐöH°ü«Ó1˜LȆ›P«Õ ªD2=Z„l6[«Ñ0Y,)4 «ÁóBláââ"‘Hjkk1),—‹U<%LmiµZEÝ&:‹ÍPÔ¢R©Ì-,¤R)6·‚<ÄU¨jñ ƒÁ¤kp!˜QÄK£™œW^!!!Í¿ÕX<§óðx]Í©|Eš8®—“lrš® ÑÓÄù4 9´°ž^âî±Ëtä7[[[£9 “™¬Õë _gÞ¿¯ùë/.—kaa¡R© »Lø „V% XÔ ˆExBNT*‹Åa2A~†Á`8HÜA‚‹¥ÕVçæêt:­L& „ ŠÂ4‹Åáp$‰H$b³Ù÷ïßGÐh4:­:X±G•©Ñ8¶o_TT¤ÓéZ-C«åðxp\Õ¸óß0¨P"ž B Øb5ÔN0=¨c29,„)LOÏfBŽÉL‰5“™ìßkM¬`ÝZ[[‹ü. /A¥»X êN¨Jt§­2 aCø;¬± ¤Õjù|>–åaÙÒ¢\.PG¡Pðx<@Ø3–mlhf6‡Ã¨yíh\.W*•"õ r°••Umm-6‡*•J¸.¨Bм€Œ»–^heWc†ŠNF9FÖ/¾xõúŠK¹z ä$%%ŠZÿþýGŒ!—Ë—-[:7„ß~û-%%eÅŠÖÖÖM者²ríڵÆ Cá–Öo9998º†òÚk¯]¾|ùîÝ»„Ñ£GƒÆ6ØgŸ}F™?>üyÿþýøøøñãLJ„„,^¼^är¹  sàÀëׯãø“™¬¥ æÐ`ýöˆ+@?ƒ0ˆv|@n¦Å:I œ8ÊÌ<Ð"i°z`=M‚zníËPÝÙÕÕõÒ¥KŽŽŽ·oßFy˱h„?eáÛܤí!ÌæÇZÂhÝeÃD Û_Œ{ðVPoÆ"MÂnôQlâ½äää+Vôë×/888...==]©T&&&"o•4iÒ¤Æ$„i«¯¯OLLÌËË{‰¾¨‰‰‰ÁÁÁ“&Mš4iÒÉ“'aÊ@»ví¦OŸ~ýúuÄ›7þüóÏð§F£;vlbbâ­[·4Mbbbmmí¤I“Æùò娨¨•+W&%%™ü É^ä"fa@Ó V±X,X)bþ ¦Ñ ì i(c×”[ÐiBuPôžiâ@jµZ:KÊú»F£ÑHwJA“†4͇Ôg­V+•Ja©çäääææ& ö£T*% ƒÁ …C† ¡K---ÍÍÍ¡¨ƒàW !ðÓpDÂc#E“=ŸÕOcodeeÅÆÆ~üñÇ#GŽ|çwfÏž=fÌB.++›?¾··÷;w’’’¢¢¢JJJvíÚåççéïï÷î݇2$""¢k×®qqquuuï½÷!ä‹/¾¸xñâËu¼½½CBBBBBV­ZUTTÓhðéÐDÙºukrròŽ;üýý«ªªÊËËimºÌÌL6räÈÐÐÐýû÷ÇÆÆªq›Ìd/,Ê.$” ’ ;rÔj5¶­€;Æp“rH¬†2;fÛHÃ5Z‹Z"‘@O(¸x¨Á0 >ŸÏKåÕªW{©™ULF9PuÒÀíM­VÏ Æx{{wèÐ!""ŽëààPZZzæÌ,54*•JÀ†ÓFÝk=mSzŒ)†tÑ|±“ã<Ã_š£n SµÌÍÍa¾ ÿàe`g.ÂÃS?¨¼‰/òx< ¥U×@·ó~eÒ—‰{ÀëÅí±ÀÖŧÉFEEuéÒÅðõ´´´‡ÖÖÖÒ/Aãþýû/o×ñññعs'¨vnÚ´iذa¨/™™™™••µ`Á !ˆÊï½÷ÞæÍ›.\hò€&{ñƒM‘(€†Ê›8ÿéÑ€7N@(À¥+óQB ™lÈQ§n|ºž 5“Éämá©2Tº}:ÎC÷!—°þ ]p†8Ãáðù|;;»N:ùøøtïÞÝÙÙùõ×_·±±TJAAX,†ZP€ê¨dJxw4”â…ÃgMÝx-jì¦#Œ§èµ@c‘cHHÈ”)S&Ožliiùý÷ßÓ8Iã³ÞŸ­ß^}õU˜„„„ 6œ8q" ÞJJJú믿!7oÞ$„ÀÈ™£GBó'Ÿ|²k×®   mÛ¶™5“ýƒk&€zH3.ÿ !666„ºº:™L%ðàÚÂižØ{¡÷Ðoaï˹Π•y&“ j4:޳ž£ê¯l‚Ò0`ll7˜d*•Jaæ½V«õ÷÷/--½råJaa¡\.ôèªì@¤g¢R©ÌÍÍaZ\£T*Å~…Bh„ú¤¨Ëð7—Ú4/眞={îÞ½;..ŽÇãÕÔÔlß¾ý‡~ðôô$„__ß{÷îÁ[ 2›‘‘fgg8pÉ’%'Ož¼|ùò… *++ýüüLœÉþ©(P´ôQ¨p¢²²ykØb‰õ”«Áw±é2-N¤¡º‰S>P[jEOu+a«jRñwåðC(¼P2N£Ñ”””0™ÌŠŠŠ=z¬Zµ *.|>F{ÀNà@0 †äâüHõô’mM•J%àrär9ÄXÍd : Б¾Ì£ÃÍ —òÏñŸ‹ÊÓOj2™LOIÚhÔa¨DARŒ½€M³æ5¾î„z˜CÃŒ_3‡Œ™¬¥k„ñãÇ?ÿäóù7n4º¥ŸŸŸÞ[111zÛtîÜÙhwt«5 ªáŸ#GŽ9r¤Ñ-çÎKÿéîîŽwÃðŽMœ8Ñôä™ìEF9à—1Ó…J-¸êÇ>2 èޝЂ½ŠIžtâ˜òÒKʱKÙ̃L> *B²ž3}þ2™¬¢¢ÂÞÞþúõëHÀ«¯¯GTà 8C¨]A& ëÞ1D0Âý è5Ù3ʲ³³×­[g’#3™ÉZ­a¿$úYŒch6Pœ1|¡GJc¯>dÀX,—ËŶx u£ÁÅc£2Ы,P¼þº¦o_s­V'?vŒ—Ÿÿ_mZµ ÚQ‰ !¥¥¥%%%ð.€  J·¡Ô \N+À4#i IãŸ:î±-†H.@è2”÷Çì"1¦@OV¥˜;"ªQ84ä†áiÐíSH¦ÐSE#ƆÝÞ°„sÄõ6{l˜øLúrµv>‘UTT<ã0"“™ìEšL&kÌKB® p¾Ž2ÃùžX€. é±ÐØêOO@§ f« B£R©x<ž‹‹ŽÁ þþê+W8..:.W­R1  ÃœCŠù=xúŠè1ØË çÆd2y<žT*¥GéðxÝ‹/,2!œÀ‹L&³ªª R؆‰¡†DØ@sø0K§Ó©_Sçà]dêÈD¥ G€Ñ8kšæ ¡°œÿ»’°˜ IDATÉÀFxƒÚ6ºÒ¡›íA˜lB:It ´ ÆC ä R'ºlL£ÑÊ¡€Lô˜Ä*Ëô Äršà×áöF3~ML°¦ÕT@säóD0fcxþóÏ?Ÿ?\XXøÓO?•””Èd2‰D"‘H€’ðàÁ¼¼<…B’b*•J"‘À}‡Íàu“%''oܸñõ×_ŠŠZ¼xñ/¿ü2a„»wï.Z´¨²²2:::;;{éÒ¥={öœ2eÊ'Ÿ|òÅ_,Z´èèÑ£‹-²³³‹‰‰©®®6ÝF“=¡À3Èû#‡ÞÂP?BOóÄÕ=2ÐÀ;CTAG0Ya(–CO?c2™æ#Í98¬ ,ÞVãA€^À ”ÏAaid.`€U‹Åãñär9’Âq‡8¼ÙXà­kØ­.j²–zKþ>|xÏž=ÉÉÉR©4::zÚ´i¾¾¾={ö7n\xxø¦M›° (66„¥?ûì377·ÂÂÂøøøÞ½{7®{÷îùùù¦»Ÿ_XX(¼½½-,,wîœH$rvv;vlQQѶmÛnß¾ää䤧§;88xyyAêrÛ¶mÛ¶m{yç>˜¬5X@@€¥¥%!D(š™™A±C̡ۅ·0b±X"‘Ho¦" §ÁA¨Þ†õôJNNNÈxf±X™Ì -Qº¼Dwæ#˜áëHsÀFN”¬ÆX¦¢P-w¸…:z,íæÄŽ 1Çn0µF…ó¿ !Ú ' çå ÿ;óM§Óõ$„Ãb]o`6ãq1×û„½é‘¹‘Ì¡bÊÀ6tÛ 2 ±~`ÌÒÒ.K;¦gæE'Ö!vvvÝ»wÿè£"""<<<o¾ýöÛ÷ßßèeœßÖ·oß÷ßÿĉ«W¯6Ýe¥RY[[K?Ê …bÈ!cÆŒqssƒ»W[[«×ÕÅçóÇŒãçç—™™Iß[“™ì‰,55õáÇ(4@´aP±PêÕ´¦'D …¢¨¨ØØl6—ËÅÑ¢ÈøB4" ’n| ñ F$@nÍËKõÁr€\&“ ÙfÔ{6¯åéé ñtaöØÒpKKK˜…ƒÅ!.—ËçóHPfói,ËÖÖV(Ö××C¬£WÐz¬N¤nl›ÆÞ5ÌJ=GŠöSÄIÏ=§÷d‰µ)S¦„‡‡?|øðàÁƒ„[[[&“Y\\liiéààpñâE Û™LfRRÒ?þHár¹µµµÅÅÅãÆÃYmÿf;qâD=¾ûî»Ë—/»¹¹988ÌŸ?È!§N*//ïÚµk^^^¿~ý6mÚtæÌ[[[˜wêÔ©û÷ïbzÚd&{R‹Å …ÕÏ g‹ã ’À· &ÐkÙðÀø†ž‹ •ìªAÎäèE†Ò™€FÓÁA·fÄ×WÊfR©HXê§U¥oݺh‰2N8"2ÓÌÌÌP¨ ` !­á¬`èœZ­®©©V¼uÆš+éî%FÛÙÃ/r¹Ü°H£P(är90è;8ó”ÏçóxüðCÓÍÕ»“ôÍäñxz·("""""‚~eáÂ…¦ûf²g·.]ºØÚÚVUU!àRšP<%\ÿ’‰3\3™L…B (Ò@# ­3l(÷‰ø+wB5p ªÞ³‡Íb‘·ßV;Ç£֠Ü5¶¦Â>+kd }‡m̘1cûöípÚXBˆÅÎ$6Å.Ó3óAŽÉLf²—Ý®]»VSS£'hi1:±á F<ÎÎÎ …¢ººˆab±xÕ¤A:dž1a-d€Ów vÁQoÇ[FE)„BîåËî„ÜÅ#¢ F°Cì—$ ]ŠÈpÃ  ÜÜ\šºàwðàAÈé!ØÐíô€OØmаdxén͆øì)5§1w×tDe¨×‰ÈúÏJò@¯.¡Æ@˜ çùXiiiæ®è}LÖ† ÄÄè‰8zÃ4!’9N:*++CáWÀ ˜Ão°®€ü1ˆ``Hýƒ§.-e²ÙlGG§¼¼* 1ÃAaNæýÀ£)•J@@Wà» ;d±XW¯^Å0Pþ¬ªªÂ™l ®®b2 !àˆ ûóæÏ·®ÞLÁ½wéíÿÙì>!Íœd‚œf™X,nÃór|||Lÿ≧Õg½² 8xÎe2­Ìår­­­aP!  W ÂzÕ¢§¨†1 D$‹`z 6.,| ‘ð°¶D áÌ,äÐZ¨L9,k#Gý ²$€ã€E, 2Pó=©é™1%Ö^´={fß¶a;}úô ˜—séÒ¥ƒZ««k§NZç¹A`aÕqÀ$Ò  3lêëëÁ›C(Àb±¬­­ëëëIñ ³aØD q~aÈ tÀ¤Ó)Qþ»> 1&ƒ „žëLŸ6ŠBÔ‚‹2 ð'ÍÃú 2¶áÜp‡FùWxª†j›·ƒ….q{º|ÕtˆCþw>4=SÀðTi݇ÆN ×ðÄès0:ß³šÀr¶› ržÉ‚ƒƒÛö¼ ù2‡=0`@Û.É‚nµL'ƒ$´¸ƒ×€n@Ï–†iј‰2>ŸoaaQ__avû#ÐS¢‘†Ãø|>›M„B¡B¡”ý4333™LliìE‰é;ä¹! ìáDŒ®Hi ÿMpiz#Ýšn Ñ›=ªw{I#‚͆ÌÄØ¼êæ<<ÀX²2 98¦è±»5ÜÌðü ¯¨Wfk¦™F®7¡PHŒI!µ;qâÄ {* ÛðÔjµ'Ož¤U$Z›aÑ571 †s3i6AœZ­–ÉdàÐU*Õ˜1cÐÏb£%Ö`°A#ðPІâîîîàà`nnakkëêêjee]™þþþ“'O¶±±ÁèeXŽÂôZpp0Ýî Kè qÊ5@D{|>¶‡£p¹\Z«ÍäM‰5“µ.+((€Îß÷Þ{ÏÜÜÜtCZ³a'&— ÝØrZ5Ø—Cÿ$ÿ&Mt:]bb"–FW4H$***‚LŠÀqÍÍÍ|}}ÃÂÂ:wή¯¯yôȹ¸¸¸¬¬ àäÁƒ{÷î…Q¸¦†¦¤{åææB~N»Á§àp'ØxD7Kbh°ç&ôð:]ÙXFËh$ÑXþŽZû$?j”J÷DÝšFƒ-97oÞ\µjþ9tèКššK—.}ùå—„­[·^½zu×®]GŽmBÈèÑ£aáÓ¶­°°péÒ¥ï¼óÎÀ !¿ÿþ;ÜOOÏ>úˆÞr×®]§N"„ 6¸@|Åy¤/cp€ND†i7˜Ë UŸ!Æb±° ˜cÐ'. üüüBBB¼¼¼llê Q»ºŽøóÏ?Ï; l6›]QQJ‘PXšÒÌPÕX.—c!GbC!Š40#ðÒð´uàÜè‚ ¤¦‰PóÅCX{"È1dx7K 7{Æ(°QÈ©®®NIIY¿~ýðáÃay²`Á‚_ýU©TîØ±cçÎß|óR©¼|ùrffæáÇ۵kgaaÑæñfΜ9çÏŸÏÏÏŒŒ$„ܾ}{É’%S¦L>|x—.]ØlöÊ•+¡ç.--mõêÕß|óM}}ý»ï¾kmmýÃ?¨Tª-[¶ÄÅÅ 6,;;[*•Ö×׳ÙìQ£F3fîܹƒ š>}z¯^½¯^½:`À½˜6mZVVVjjêæÍ›GŽ™½aÃø <ØÕÕuÛ¶m‡:zôhJJÊÔ©Sþùçàààç{T*UYYY¿~ýžÙúöíÛS§N-**ª¨¨€WV¬X‘˜˜xáÂ…o¾ùæí·ßþå—_D"Quuµ¥¥eEEů¿þúî»ïNŸ>Á`\¼xqáÂ…÷îÝ£¿ l6ûçŸÖ»“#FŒpqq‰Ÿ6mÚ¨Q£~ýõW\^¿~ýÔ©S_|ñEçÎÁúõë·oßž••ÕrwòŸQ>Ÿë}¼K8j“`€CPç4‚µ¿J¥š3Gûæ› ¥’Acÿ~ÞW_ñ ú‚C 1ø¨¨xhg§•ÉØ C ØØØ888ôèÑ£W¯^...–––íÚµkHÜ)íìì `ccsñâE‘HT^^~îܹššB©TŠ¢p@<Óh4 CËÕêêuPBÌ€KãóùußÕ™5c2™õŸ×s—r¹µ\ø,^>&èpL>Ø/‹ô‚²†U Ñ™¡­1ænúmkkkxPàÙMHHØ¿bbbHHÈéÓ§?ûì³ØØØG=|ø°•CΩS§Nœ8qûö휜œ?þøãév²uëÖ={öàŸ^^^YYYï¾û«+!äµ×^;v,L¨spp°··‡ß÷ïßðàA¥R)‹AFúË/¿ôññyðàAee¥¹¹¹‹‹ ƒÁ¨¬¬|ë­·222ììì O@$i4š¼¼¼òòò:p¹\ø-Y²ÄÅÅåÓO?5kV^^ž½½}QQ‘‹‹KKðîììì&Nœ8wîÜóçÏ[[[?—}zyyeddÀúÌÍÍÏççåå•––Âï/^ôññ9räȘ1c¼¼¼ÂÃÃóòò¬¬¬ºvíš‘‘Ñ¿z‡‘‘‘Ó¦M3¼“ååå|>ßÅÅ…Çã•——ãë÷îÝ[¸pá¨Q£˜LæÝ»wmllÄb±R©tvv¶¶¶†ß_ÞĪîÒŠ/ØÚ`Á@  …ØIÈÄb±Ì͵«Wóúõ3ëßßlÏ& iÄ¡Ô àëKTNœ¨ÌȨ0@Çd2ÍÌÌÚµk×£G‘Häææ# 0‘UUU¥R©ºté"‰|}}­¬¬°2{†Xs€Ähã´š!E?åñü7_ ¡ Ѩ:¨õ †æïÏÒb?aô;!„à(O£&åšSÞÓ›à G 3üHóCUT?[³fÍ?ü°oß¾_ýõÍ7ß4Ü¿–2ÃÁ<ô û1}ºƒƒCógkk ’““³ÿþ 6¼òÊ+ÇŽÛ¸qãõë×Û@9kûòBz1¶¿@L p8èÑA'Ë`0t:2v¬68X®ÕjÏœáýõ<58î3ê¹\MD„",LM¹våí-õ÷W±Ùr{{Ž‹ËEW×Gvvça¤ÓéÌÍ™—™—)dåì|ƒaegU×£®²²R¥R=tzX]U 5=§Œ³J5]5ê…j†ŒAâ !„|O÷¸_1SAáíàéjôÓYxpÚN¡¦YÚFQ‡P|-ê0á×Û}%éöt•”-@©º¥K—æååMš4‰>¼F ßôàWÌ"œNÔFÔAÒ© eììì`ÅY]] '¦V«qtçSBŽ»»{çÎmmm1o¾`Á‚¤¤¤Áƒ‡……uèÐaéÒ¥°rLHHøóÏ?[-äüøã«W¯îß¿ÿÞ½{###ßzë­çµçôôô¸¸¸Ù³gÞäBvïÞ­·¥B¡ˆuppX¿~=Lù {¢¶•ï¿ÿžÇã-]ºT.—ÇÇǯ_¿žÇ㥧§?xðO`åÊ•iii j‰›)‘H.\¸pðàÁAƒÍš5ë©!§°°pñâÅð{RR’^:55µ¼¼|éÒ¥»w‹[¶l™¿¿?}À{àÀ{öìùðÃOŸ>ݽ{÷;w¦jµÚÐÐPÕ––}ðÁÝ»w¿qãFjjjAAA=ØlvJJʾ}ûŽ;Y‹ºº:•Juþüyà‰öêÕëy•[h+//¿uëVmmí³ÌŽc³ÙŽŽŽ½haa‘ššzõêÕàà` ‹œœœÁƒïܹÓÇÇçìÙ³©©©¥¥¥½{÷6úñW^yÅÏÏé”h½{÷.))IMM­¨¨èÓ§!dÓ¦MñññYYYÎÎÎ.\prrÁÁÁ‡þð÷lÙ’››Ð·ñEfÕè ;tD²Ùl,ð`±³ÿèÄ‘:Ü¥‹’ÉäK¥Uwïr««Ù›6mÂ6RB‡Ã‘JJ%[,fê ¬­-x<žL&+//W(:t¨¨¨ÈËËc2™ŽŽŽÕÕÕ|>¿}ûö<¯¨¨èÒ¥K¹¹¹ÙÙÙ 4Ù?Ä$h4Î%#›¡ÖªYL‹ó·6¦Ë´Z­d›Ä¬ŸƒÁ’²3Ù¶jÛšš¼"`Üaö Øq$ÊœQhp°õ ƒÁX¹råÊ•+q­­„O仞h{™L†TÈžI¥Ò²²2X J¥Rb¬/ÕÐX...111*•êæÍ›´îƒÁ°¶¶Ç„8“ÉôóóëÙ³'!x<žµµõ¸qãJJJjkk_ýõèèèÖü­û¿ÿû?­VqðàÁk×®™™™ùùùݸ´´ÔÎή±õ;ƒÁ°°°wvvf0–––æææeeeeeefff;vd2™!!!£FêСCaa¡V«}çwúõëÇb±<<<`Ëêêêž={2™Lww÷ÈÈÈ–———••õîÝ{þüùÿoX¬ž={âI …Âððð7ÞxC£Ñ”””8::.]ºâ6GGÇ>}ú@MˆÉdzyyUVVÂüýýÆF7oÞ zº’8ƒÁ€ÄÚ÷ß?fÌpÜÙ;w|||š™¼f0:u‚vëÖÍÆÆæîÝ»sçÎõööÆgrܸqb±¸¬¬L$}ðÁ€µôó öèÑÃßß_ïNFEEUWW—••uêÔéƒ>ãééùꫯöîÝnÚ«¯¾:mÚ´Î;;88ܽ{W(Κ5 ³yF¯ÑÏϯ*òÉd²ššš7n\¾|™ž2 V«…B!¸ZöG•e¸'ôÀƒÁd²œ5ööjWWVE£¤„ ¤}7j? …B+++›víÚÁ÷jÔ0 2 EEEõõõUUUÕÕÕ'Ož€Ð^ŠÊS+7{{û—º5ò_e´$%d«Ð} > Öu „Ž® Êé0|4Î …€µlÊ€/Ëf³år¹¹¹9¤O?D"®†˜èPGÁ“‘H$ò²°°€±Ù¤Aë®úLuHÃ<$LƒÓ„kÅ8 öÃo Act2t¾Ø+ŠZ;8×Îh0xƒl«K¸\®^ÕèqvFe=õö@ÓF3â /OF©TÂI"º` i˜~|µœ>µJDë·Ùe¢V«AD ­F9­ü ñ1F24°Ñ_ƒú 6„¢>&i¨ _¹rÅð]œ¸ƒ‚7Hrãp8 –ä|>ÿÖ­[õåñxr¹ÜÖÖV Ÿocc¹,•Jeiiéææ|6ÌïA4ƒs}d2‡°‡†&àªåàŽáŠpvð ʬá(½~{:GÔrf(»ÙÌPÕ0etBMíkÎÞ½š)AmX+ªÇb¶ rŒ˜F£‰ŒŒlÛ#ÚJJJÜÜÜžš±Ö|S©TÑÑÑÍéô|IM§Ó=zô¨]»v­Y1iºËÈ÷$ ¡É1pÊXÿÀ°bbì•Áš%•Jåry]]]eeeQQQUUUiiiUUUUU•D"ª4(I#Öò¢GAÔÒS <1”’S(:JJ¤óÃL±ËÑD_ŽÉZ<±¦ÑhÄbñ'Ÿ|2nܸÌÌÌaÆB,--ËËËÿüóÏž={:88;vÌÇÇ' @¡P?~Ü×××ßß?%%xz÷îmii9{öl(«;v ˆˆˆ‡ÂÂÂóçÏB,,,(—ËÅbñ Kd…††^»v-??ß××÷äÉ“fff"‘èù";;;))©  ÓÐo¾ù¦——×±cÇbcc'L˜pÿþýŒŒ BHrròòåËa‚Ø[o½õÖ[oÉåò?þøäÉ“vvv‰‰‰3gΜ9sæ˜1c&NœxéÒ%³{÷î­[·º»»ÿSÇó÷÷ÏÉÉyøð¡¥¥åŸþéææftÒϳØÑ£G;uê´sçÎ;w.]º´gÏžS¦L™9sæš5kBCCß{ィ¨¨ŸþùÒ¥Kõõõ›7o¾qãF×®]á³óçϯ­­ÍÊÊZ·nÝŒ3nÞ¼ ·=33sÊ”)ééé Zýb(|ÿHêÜ1ºp 3ÀŒ………££c]]X,–J¥ð:Ž Åu:öQÒÄe€ˆ6àȤÕÕÕYXXàpx·¶¶º¹\nQQ‘………L&ƒvèý¬¯¯W(‹ Û Šð Ô„0Û-¨»( Zƒê ´œa˜X3Ú5i4©EW’Û†ínN0a4tЋrhÃaFC ££Í¹ÆÆ‚f½¨«ùd«'+êÊåò;w~ÿý÷‹-***Љ‰ùñÇaEsäÈ‘¤¤¤… 8p`ñâÅ………111Çÿꫯ/^\\\œ˜˜¸xñâ’’’¸¸¸C‡Ïž=;99ù ?ýôÓ€€€yóæ­X±bݺu6løÏþó|µgÏ777|å½÷Þ»wïÞŠ+òòòÞ{ï=|ý£> =z´Þ@)väÈ‘ÁÁÁŸ}öYddäŠ+nß¾­÷Ù=z¼úê«ÿ”;³¶¶ž={öáÇóòòªªª¶oß>zôèçÎÝš2eÊÎ;|øûï¿ÿÚk¯õíÛ—Íf¿öÚk½{÷NKKÓjµ«V­:tèЙ3g,X:a„ãÇWUU‰Åâ-[¶L›6 žrBÈ‘#G¸\îìÙ³bbb,--gÍšµqãÆÙ³g×ÕÕá0àffff«W¯îСCBBB||üСC_ÀAÏž=kcc3hÐ ''§³gÏ‹Ÿ|ò‰T*]µj•áöóçÏïÑ£Ço¼:::4ÈÎÎ?ûÿ÷VVVqqqÿ¬/ëÙ³ço¼±jÕª)S¦ôêÕëõ×_o‰£¨TªI“&ÙØØ|üñÇÎÎÎëÖ­;|øððáÃKJJp›ØØØáÇ7=ÔìÀ999Ÿ}öÙ¿!•ÁãñPÐç(•J•êêêk×®ÙÛÛ———ƒß¤§À6˜¼B—‡ÂõtC%V8À‰Ëd²úúze(–\ºt©¦¦kååå=ªªªª©©AM˜¬Œã±QÇ/clíÔ“–ÁÑŸ¸ü 5ÚuB»7\B©‰±Ö²iަߞ9sæ·ß~›’’²sçN 0b9‡ÃáôèÑC*•^¹r%''' ÀÃÃcïÞ½çÎ;xð`xxø½{÷ ñ\$…‡‡óx¼«W¯6,22ò±SäZÂÔjõ±cÇ~ÿýw//¯eË–•––¾€ƒ^ºtÉÊÊ Ä¹/]º/æçç«ÕêÀÀ@£ÛÛÙÙaÒÌÎÎ.<<ÜÆÆ?›——ÇåriýïÄlmmããã¡ÑïÇlß¾}KTŒ бcÇ/¾ø¢]»v,kêÔ©gÏžýöÛoi.{||üôéÓ-Z”––ÖôïÝ»W]]ý/QÛ“ÉdzB)˜†‚žB¡X³fÍ… ]ø|>`“É2dP¨ !ÀÀ ú41IþÇã©T*¨£@& †E*•J¹\.•Jkjj5ñ©ÆžŸâ@Mc!­Cc¸óBÓ§Ø-ó±ë#ssssss£jÁaaa3fÌX¼x±R©„Y[.\ÈËË;pà€»»ûìÙ³ ç]æåå:tèÎ;K—.ÍÈÈhB µåì»ï¾ûä“O6lØpþüùÐÐЉ'þ#ÆoܸQXXH+Ô?~êdffBp.ÀÑ£Gÿúë/½;YVVöÊ+¯´’¤ ø úo®^½úÆ{÷î…çP­VÿøãwîÜ177§—5fff|>–® …âСCW¯^5Ü[qqq~~~DDFámÛh4¦b RÁê=°Í‚U«Õüñ‡P(„aw˜iA@‚Xs>À@IM€ ð§\.W(r¹jưîÄHÒk|>Òe6Á?zûöí°åypL‡>xbHþ7±à--¡Pˆ$‹Æn#ËÀà!j„K3ܵ0»¥R©är¹\.ä†mšH|ÁiÙn¯¥ ^ö^PyÀ=ð O ·§³Žô‹Ç‹Åâóù|>Ã_Ú»ÏJ’îׯ_rrryy9ü)‹ãââF- ß~ûm333xýwÞ‰‹‹[¾|ù™3gBBBú÷ï?nܸ”””’’’©S§¦¦¦¾`àY»vmHHp"–/_”ššÚØøœçe3fÌøôÓO—/_ž›› c’ÓÒÒ.\¸°gÏÜféÒ¥~~~áááÀ ›9s&¼~çÎ?üpðàÁ·nÝš5k!$999??ÿĉÿ’x\­V/_¾ƒïsçÎ}þùç½{÷®¯¯‰‰áx7n‹Åýû÷÷÷÷¯­­6mÚâÅ‹ß|óÍœœœåË—Ÿ;wîí·ß677?yòdJJJrr2>ŸmÛh1Z«G‚’†&sh¯ÁЍ¨a×0:,¤J\*00h€ß餶ò`HÉ1:h€ à13F-Ð[Î#Î …B©Tм=ÑLÁ造èˆMé¯|{¸g^^^øÊ’%K¦M›F‰ŽŽîÑ£$4ºuëæé鉾`èСíÚµS©TÆ óõõ …)))îîî®®®NNNjµzذaþþþVVVkÖ¬¹uë!$((«ß¾~^vàÀsssøÝÁÁN²%ôùçŸãBlÒ¤I Û6lذ½; ¶oß>hÛ^±bŒ ›>}: 6lX÷îÝ !“'O~õÕW[Ó\µjUË1¾æÏŸÿæ›oâŸ666|ðD0#GŽìÑ£!dÏž=quuuwwW©T)))nnníÛ·§ŸI@лwï””½Æ¡C‡lllÚê÷_àÍÁwZ`ÊÂÂB*•ba[I‡™lØÉO÷è`X™4X§Ã@àp¹\¥R‰N_.—c?&-rhDlhÊÄjph8yœˆƒÍª MÃÑãvþ›Þi ã!úÂ¥aŸ©É^4äXXXôêÕ‹~çL»ºººººB$É'Ÿ|’››»qãFÜLoŽ2î%š½½=òŽôôŒ>I×r'йsgú)×;ÞI4œíëë«—áÔû¬‡‡‡‡‡Gëy’Z4Fôòò¢W?PTл!z2¬7Ð{&mmm ÿã€[m5±ÉOðòÇ@X‰JpÇÍ`Òå2NWmffV[[‹=Ð JG8 A«Õ* D5ôì´´(ˆÙÀØ42HC‚!8P¡†øC¯¹Nû41X¤›4‰@OEÔ„“D„ké,ts2º,ÒBp†›á2¹v˜…äÙϸHEZR?^ŒØÏ3%Öîß¿_^^¾ÿþ&&Ø›Ìd&ûg \‰B¡ 'BT@¢ .ø P¯Ayš[ P†!ÔuƙУžaP‚Hª×¿( ºÀ@&Á ö/“Éh¨Ð t€A«ÆÆ¤Jƒ¯Ç<j½ %Ó†/,×ÒL{aÝŠMË€¶ Èñ÷÷ß±cG[ý¢fgg·áy9t~K›\.?wîœÉõÿSF¼¤q‚np¡{-!¼ Ò)HcìÊà°GÝ6(qÃrŠùjƒš6*ŠBáÏç߉µààX8r Ï ¡…fNã*è"ØÙÙUVVbG6¥"¹#0ȧÁL$éÖ 9mÛ^ÀðŒÊ^äT1÷"'½xkåÌ7Ô¶A i+ìÕG¡Ie0ÀÊ r± hz1æî0¸pÂ8%«c†ƒ®±DDJ/0š4ôØ#â 6„IÈÅaC¨¹sR“Ë嘩ƒ_èA¢¨€Ìb±@ѧ‰ü$J™á5Ò¢ôÍ×ÛÞèšà¿¹󰯆i1£šiz%èb’N¬aÚ·§óixDLTÒj¡Ï%3AŽqKOOoó ZkkëSEûé§ŸÚðð0ww÷V;/†Oc æcŸ¶¶¶è.Q’Ý ûƒc…QZ^yÕXÝa³ÙfffÀ%º°shÆÄá$a†ZjÈ)€FN¥R) c ù7D/¸4@”E)6Lýa^6‰)Ôü|—Q£pÒœŒ-`ƒ³À›Ø›^;ŽÞ6zÒ6ÐÉÆÆ€¤éÛb‚œgµ¨¨¨¶] *,,‰D/`^!$::º '+t:]II‰‹‹K«Ѐí)|>_.—óù|,ÔÔÔàz3WÈF£Ç3ë¥éð-LUßÇž@£io° ý"FЈ91Œ„ôÂL²á˜júÄàãBP‘ÂbŽBÀ¤ µŠ\ÐD,b2Sb­e ¾–mõêΜ9óÜ•L3`.µaÈÉÊÊjÍór07E¯—1§>ecB蜓ɴ··W©TUUU˜DÂAœàÐU*•@ ŸŽx€ëkðò4•ÿad1` 9¡8„…œñ#—Ë‘›€™@Lbˆ€3Si6º°ôtf4Ê¡)s‰ÿÓ¡ŒÞ0V:#×´;¢¹!4»]ï 1ycccƒW!":;¡æ,½"Ãy9tþÍ9&3Ù¿~]Éfët:333@PUUº/8‡Ö(à f ¸^¾¾¾ç †JÇCíNˆ`‡ÖÖÖUUU¸öác`„žËûÈ&P«ÕæFƒ*Ÿpb `M‹UÃ>i¡h8UÔÅ©¦ô¤5D¾gœ ÚLÈ1J¦K2zȵ"£Œ2Ü?è¡ôú@™¬¬¬ ç E/BˆB¡Àíñ_cxEF¥zš9n—••eooèС6ù% ÄÖÂââb{{ûç®ðXYY™——×£GÔ¨ÎÍ͉D‘‘‘^^^¿üò ÎËéÛ·¯½½ýÚµkñ³8/'44ÔÞÞþ·ß~ûã?:vìÙ¡C‡óçÏ㼜>}úØÛÛþùçÿÔ|øð¡½½=6f?~ÜÞÞ¦|˜——'‰ Ó¹í@…\.¯¨¨Éd  ‚u{H(9ÒÉÉ EqHƒX™P(„F"‘Àì!(Ý[ZZ:::BÇp`‡8F,ãŒNˆ<½†Sp–ãBŽΓvww‡^],2!&¼Ñc.Q@ Á 4ßÑ;Ã[ðó‰ì&{Ή5X¤¤¤tëÖí—_~!„ :4%%…Ò·o_’’’“'OBø|>ègddTVV†……eddDEEY[[ÃtBÈØ±c µý#6xðବ¬ÜÜÜàààãÇ»ºº>÷Úïµk×:T^^âT„©S§¼œ©S§â¼œ¯¿þzݺutÓ(ÌË‘Éd+W®}úlÞ¼yçÎï¿ÿ~TTÔìÙ³q^μyó¢¢¢NžÐ“Nxv›8qâĉïÞ½{øðá &´k×®±-}}}qDiÓ¶cÇþÿ³÷ÜqU•ï¿çž»ÙKQYNÐLqf8Ò2ÅÈ ‰ æJ“¡‚EMIËp$ñ3WjiZæÌ9r‘ 8AA6—»ï=÷÷ÇÏ÷í‚æ`e÷ùÞ{Æó®g±888˜òÁìß¿ÿU•+±¿'fþÓÕ—é_éfeXåŒ.”I÷ÓëõwïÞÍÈÈß º†T :Qà:]Ê ë¼óÀÈ70£™™™;öäÉ“÷îÝCÎAÇïbx7r,RÕNÛ`0XXX@¡L‚7c£©?a?¥Æš¹G]JÃí²c’uÏý­ê}áèìTŒ¯Îrª—¼ª±ª&øÁ¾PF:ôǃ?°"3æ&Ò•úžô¡7¬!ètº”””àààV­Z=z488¸{÷î§NÒh4kÖ¬ fY6!!áêÕ«999~~~ €B<èêêÜ¢E‹4žC(•J£¢¢^ýõ-[¶lذ¡ÖùMðÛo¿5mÚ4 ÀÍÍ ”EBÈâÅ‹¡nPõû§L™âååÿuvvhÖ¬>;kÖ,kkë 4ìd’sçÎýè£úöí;vìØºøŠF£ù補œœ–.]êèè»gÏž·ß~ûáÇ4g‚Îxÿø¶M›6%%%ÅÇÇÿLÐì=4P8³m0R,`˜@ƒ®¬^“’’ið,ð$ô ÐE9Qç€$°ã¡2/Aï]lµ%Bô;HIIÉËË›<zÚñ°>4í ÕJ¡Pà é¦;@yi× Xt@õ1Öê^jr/_¾ é?~ŒA«V­ð¿gÏž0`@III‡ϰµZí?üàéé9eÊ”{÷îÕÃG322ÌÍÍ»tébcc“‘‘³³³õz½Q1¼ßÊÊ ‹~Z[[wéÒÅÒÒŸÍÌÌõxöEgÍš5­Zµ*//?pà@]—çääxyyõìÙsãÆ¶¶¶</(((==ý÷ß§û®îرcÁ‚³fÍ:tèÐÓ_˜——'“ɼÕP½J¥Âàfp€ÈF6¨ˆƒ½ph§:ô# ýêPSrt@‚MØ@Nc—T*uww·°°VË|>_,‰·´´DŸÏ·¶¶Æ^𞤤$¹\n \ [f`1øu5ÀðG¾«Õj•J%m£K·=‰ß0Õàe–ƒÖÕŒ˜¯ jü„áÉð¸á±ìP(4«Ë*À¼¨§£ñ­€^>~õêÕƒ Z·n]}&äܸq#;;{èСxê8æÛáìÚµ«iÓ¦´-99ùÑ£GÕÍq¯$¬X±âáÇëÖ­CÍ{ÇŽ¯½öšQ­Xú°©Tª]»vÑ2„û÷ï_¿~}РAǹX§€ôˆT5_AÂ:üqÌÀo ®"Äh‚V)¨³‰nyŒaƃ±Ñ ôlÙrÆ ëׯ߹s'ª5ÈÆAÛ¶m1ÖÙÞÞ¾²²wè¨eº„ôÄX;­V‹%JÑìD,ÃX7¶5AÓ ÐçùYŽQíµê±ÂÏ®tbè9¾½A ~ïÄÈlUãÑ”-Èó¡ tDè` ¢TÖg+îƒÙ­²²>Іµ'MZ-k9R©têÔ© !!!ãÇOKKã8®cÇŽ«V­Â&Ïž IDATu ¿~ýzHHHhhh£J”ûúë¯;vì8hÐ BHXXØõë×Oœ8Q× ¿sçNHHÈ•+WÂÃà !'Ož¼zõjXXÞ³dÉ’ 6€å‡2a¸^^^’žžÏ:t(33“~öÕNRYYYð·L&ûôÓOßyçOOÏ%K–ÄÇÇ¿ûî»:u’Éd¡¡¡G8q"!$$$䨱c“'O¶°°¸qãÆ‰'&Ož }"^yKí´@G‹> Ö¨ÁÐ5iP*Çx\º‹zï‘C¬ZµêÏ?ÿDÂdDÜ“’’ÐCc0îÝ»‡â?vx£¨~á@PÍB­˜(°°þ!wÁÊ=ØK›.¥ƒuNM毺ƒ'j9;v““'O>|xãé—³bÅŠºë)9yòdü¯½½}DDÄÈ‘# !Ÿ|ò LÈÖ­[ËËË !Mš4æLgΜiÚ´iÓ¦M÷îÝ rYË–-Åbqß¾}Ïœ9Ó²eKú¿ýöØ^=€X™Ÿ®TF§§í …ÖÖÖ0“èþ¡Ý׸ŒqeØG~Âh–eårùÑ£G!4zÒö+ †Æn˜)‚Â;©r´`J  ˆaÏM¹A°¡R)!¶³‹ÐZH×{•²¿Ÿ×ÂV?c"Ë133Cö­Â&f  1ªS§NÛ·oŠŠÚ°aÃÝ»w›7oAxõo­z £ŠëIº‰ Ç3úÎduÄŒ<4Õ‘lÖ¬Y­Ç"¿ QðÚgggggg#ÉÝhBŒºñù|¼Á(ˆÜÊʪúŠ7Ú i/666-Z´ÈÊÊB/=êXtícàÁ_)•JÐh »±a)6Ìto p GGǬ¬,Ô±0Ÿyª/Øyëîæ˜Jª’HUmŒ{ ¼ÙÌÌ ,x€<€1 »ø@ 7½^¯P(Äbq”+h€ÚD«\¨ÑâÐ&öôÄIŒÃÉÄgtœT ƒ91ºßÂÂÌtಢ§õ<gmm³˜€thpæ8.''þV(胯#ÏÕd¨6«èt:ÈàY½z5t±4 LаPTTÔ¡C`9(࣫‰&6#@'<ê à¨ÇBÑH‘ sss>Ÿ_VV¦V«±—fÉèõúœœºôtðĈ5ШPù@ZŒÍuè²Ê0î T­€ìb S¨K¾TqÐKäÃ^á2WÚ°öbY¯$&&šúåÔ ¨Tª .¼ª3Ùø)ŸÏÿý÷ßQÇj7˜LC»jè0 z‹ÅBŠë —––b‰3´}Áý˜›‰²LE^‚¾LñÁ¢dôTcKSx90º 6*T½h4¡ °­Ý3Ôÿ–óÊÇq]»v}…kÊöèÑ£ÞF'ŒZA¿bðìïj3ƒæ¾} ²  ›AÅ…®Cƒ© ˜ ªG4)G¾‚Ž"x¾(‹7@5z•€‚sÈÎÎ.??ÃP•Á°0^ѽ±Á†fÔ2ûœBd2ZºÑU¤ï©>‡<¼¿O T££Úèð¶gÙÕ“IéŸàm eVß{(D¤Aóoò÷TSLÍÊÊ‚+ؼ;^WoüC› ¡4yB8ËyY8sæÌ+AkeeÕ«W¯zøÐ¡C‡^yÉÑÅÅ¥Ë=‹¢ƒÔ,ZÐŒÅÇ€ÞßnšŽÑ_È„€= ÚÁøWàNx­F£úˆV,Ôx€Ö‹D¢3fDGGc)h–eÅb10À =:úH¢ßB©Tb“7 D@`VµA ߌIKOá OÔpŸWÿãé`Ô$íI¿>å§êõ@«·Éðt¸Õöh–Sc5—d0&–ó¬0`À€¦M›¾ÂVÝììì6mÚÔO¿œÆ\Ø¿V ''ÇÅÅ¥ÑöË!T> ² ,’ú z:ñJ5c 1­ayf¬!Fûº±FÆ¡“Cómé7¨D‹/ÆÒ;€•H$‚¢5t· ðtɪ$Ze¡S|è#ð±Ã¨±»6Ý1@“a­àÕî—“””TcɃº3켪3i0._¾Œñœ“ßÐ)8Ø êHméRh"Ãf,‘‰ÁÇ´‡ï/ D‹!A‡l@PYY‰é5`pãóù …)xIyy9þŒ‡î;€vF€!c¿5|ÖÖÖV&“’À>1N~JÁ ”@‹ò<£&@5ÚÇž]ÅWÕ¥õK\)ÌLÀ²žÐ¿Žü=Õ•!L«€´¤Ôrª+Xˆm¥¤+ï½ ËA#,NDõÂs/ XÖ‚eY£ÌÞg£Dº@²¶Î+¸Uh;¤C½’¤LFè·W«ÕB¡sø¡0 =Ã3p °(© ñB÷˜¼ 17 êvÞ„r8 O0 Ó³gÏääd¬ó†ÍÁà+tÅ3d~˜pŠqF±Ôx?ÞFwwæñx•••È@w?ã8 lÓ!|Õ #í[ûÐlÓ`_˜å ã+O±šóÑaÖFÕ6CšàiÅØhÌ[ª‘å<¥_ú~èý£˜Î{ŠܬY³¾}ûúúúúúúnÙ²¥vAQQÑäÉ“ßyçooï>ú(??ÿyß Õj}«`ذaÍš5‹ŽŽnl§ã¸ÄÄÄùóç7kÖ,33“þ©¼¼<""¢_¿~C‡2dȃn߾ݵkW__ßž={®]»V.—¯]»¶gÏž¾¾¾]»v½}ûv]c{çÎ=z 8ðþýûÏrÿ¸qã<==v†ÏŸ?ïáááëëÛ±cÇÇÓÛcýúõ=zôðõõõôôÌÈÈxðàÁûï¿ÿþûï¿õÖ[³fÍ*//?|øpÇŽ}}}=<<Ο?ÿ ³`* ùžPæ+ :á@'],É.]H±ø?ÝKÔaÂÆ,˦¤¤`ÓÐ3èr; ñ U×@†ÀÊžÀ2±N„ ;A+"öÒÆÔÈAá_Ї€Ö㜘 a k³fÍòóó#„\»víÛo¿9räÏ?ÿÜ¥K—ŠŠŠ»wïBºvíúÆoüòË/=zô€÷B|||\\\îÝ»wôèQBˆ¥¥%]c877·iÓ¦ ,Ðjµo¼ñƾ}û¦L™ò\¨ ‚#GŽÀßÛ¶m{øð¡——׉'€²wéÒ¥W¯^*• ™e@@@IIIAAAQQQvv¶›››½½}rr²……¶k« –sàÀÔÔÔê?]»vmóæÍ[¶lyë­·ZµjµuëÖÛ·okµÚ#Gެ\¹rñâÅýû÷_¼xñܹsç̙Ӯ]»¥K—nß¾½NwÃW_}Õ»wo¥RùÝwß}þùç;wî477wrrJLL;v¬¥¥å•+WþüóOXb:-)))99™ÒªU«Áƒ×çž9sfçÎ÷ïßüÙgŸaѹ²²²… Ι3gîܹíÛ·_¼xñ믿ž””tûöí?ÿü3 àƒ>øì³ÏÞzë­-[¶ 6læÌ™0„W@c‰Dèw¡;Ó`O¬WFgÆÀPýuÚçAeÀBÀ™ÑÒÀB@› …ðNJyòdbbâîÝ» ÃÃÇ ¶jÕ*™L6nÜ8¨7sæÌÞ½{/X°`÷îÝsæÌAÞòÎ;ï4oÞ<<<œã¸!C†˜¤¹ÆÚÀ@uïÞ:–å€F€ÖÂ0Ž# ÃòxœÁ@ª4ÚÔD[¥(¥dax<‚žxUBM+ŸÐ0Ì_ G  ä–òxLUÐÃã髜IØ¿‡VPþ—¬¤íïýÁþzÄ``y<=Ç‘ªŸ4 ó†S­è$„ € a¬ÌqœÊɉ¹|ù2|âya×®]‹/Þ´iÓ€Ö¯_Ÿ““3dÈÜÜÜØØØ$$$´nÝzôèÑ/Á€†mrà |>8Ë0|pŸpüCï{mÐéˆ@` DRUú/jz=Çc8®E‹¥¥¥ù¨«x/†áXVÀ0%œ2 ¸…þj•­×³`‹«2¯aí†ËŽã±¬Š“6 ìÜ“Ojîiä=2º³ºÃߨxÑm´¿ºñ”rmÏh(£ 4áóŒP} 4žÿ¨÷¼H|×Ï?ÿ|îܹ«W¯Þ½{wĈÿx```XXØÆib”™™yüøñ—ÉØÐëõŸþù¥K—þïÿþϨæc#‡ãÇß¿¿Q±É[·nmذ!>>% h6Zc õž={ª_ŒŽŽ~óÍ7¿ÿþûÖ­[7ìX._¾œ˜˜øÞ{ @ïÞ½¡]ŒT…á‚+rªv']ÞÆˆ¸`.Öa£]÷x+âÐEt°Û4&WbJ&ê4i£é2úcþâ¦UÊZ1€ êèrøü(¶ÊÆQרcÉÞÞ>((ÈÈž† §ØªUF(ÅM‚z6Š-&Tl4]ÖÓˆ|Wš#OhµP;Vgi5Æ‚Wç=Oa{5ä鈽 Ëñöö>tèPdd¤«««¯¯o\\\IIIwÚÚÚN›6mïÞ½iii/^ܼy3þ$‹ÿøã„„‘HÔ«W¯>/:î»ï¾kÓ¦Í7ß|WZ¶lÙ³gÏùóç+•JooïîÝ»/X°`Á‚'NLIIið†Í»wïNHHHJJ9rd||üÞ½{_{íµáÇWTT\¾|yâĉ·nÝš>}º««ëôéÓ÷ïßûöm>Ÿ?mÚ´†Eûµ×^ƒå¦{ÊB<==‡ºfÍš­[·æç翌[î`Á‚'NLNN†%>sæÌÒ¥K½½½gΜyðàAˆs™>}ºµµõ‘#GŠ‹‹}}}_{íµ ÄÆÆNœ81==½Æ^௴k×î?ÒŒ®¶ //Ï(ÓÌ̬~Ju¼2põêUKKËê×™îÝ»Ÿ?^¡P}^íþ€õ3:è Ü¿ÿW{ØN L`b9/¬òÊ÷£}1Eçyáí·ß~…ËHèõúÆÜ¹À&hŒ,‡a˜W¸˜® L`˜ ±ƒÁpâÄ ÓŒ˜À&0 jÌÍÍ1Ïéo†µ.]º4H 9oØ0Dºgb£‚F‹˜`qÆÿìzÊÌp×8£Q =R#œºF¾¦ù„V¯CÓ°ÈXXX`Ý„¿±KKK33³ZovýtÐét¥¥¥fffæææ¤á<(PÙÐÜܼžgàé “Éôz½H$²°°¨År³µÅÅʼnD(J$’zž@µZ]YY)‹---ÕÚ”––òùü‚‚‚ .Ԙݰ`ooߥK©TjTq¹Á¡  ÀÜܼ"fr¹Š“ZZZ6†ZVV-럘Whêjff†‰´ÆáZ­¶ž¡åååׯ_ïÛ·/©/‡vpíÚ5GGG'''½^/žÒåõ€˜ƒƒƒ‹‹‹N§kTˆÁ¹sçúôéÕˆŸ±ÞkmÁ£Gòòòºuëöô>% /^ìÒ¥ !ÄÍÍ­[·nMÅ133ƒs‡m"èõú?þø å)•ÊF(I ¤¥¥‰D¢6mÚ4Ò‘””äáááààPÿļ:$''·nÝšÎ+7¥‚šÀ&0 ê L,Ç&0 LPOðây9gÏžE­­W¯^‰‰‰­Zµª±Ö}ý@iiiRRR§Nîܹ#‹»wï~íÚµ’’’ÔÇwrrêСCƒ/ê¥K—ÊÊÊš7oÞ±cÇÆ¹íd2™R©tpp@çãÇÁc:“/°Ü:ÎËË«1 “œœ¬R©úôéÓ˜gì_dýÀ½{÷233ûöí+‘Hj¼¡°°0%%¥k×®ÕûfÕ«–³ÿþI“&]©‚ÂÂB??¿Û¨Ô¤¥¥ùùù?þæÍ›™™™„Õ«WO˜0¡Þ¸råʃ|ýþûï&L¸téÒýû÷íFÏÉɹtéí.++3eS¾,\¸pöìÙ™¥K—†„„4òËÌ̼yó¦içB8àçç÷øñã§°g??¿”””†Ôr<Y\\l0Ú·oÿÓO?}øá‡øë´iÓ Ž}DD„çúë½ Ü¹s'**Š"¶mÛFY¿~}RRÒ'Ÿ|7¤§§ÛÛÛ9gÏž øðaYY™¹¹ù˜1c–.]ºhÑ¢·Þz‹eYÈ»8pà„ æÏŸ 3¹lÙ2h:mÚ´¾}ûÞºukÉ’%„©TZH"(•Ê´´4WW×&MšTTT…ÂìììÂÂÂ:¤¥¥¹¹¹Á|Ö.OŸ>þnҤɚ5k~üñǃB¼¼¼f̘A ‚Š ÑÑÑR©ôðáÃ"‘èøñã®®®ƒÞ°a!dçÎu4-+V¬¸zõ*!ÄÏÏïÃ?|üøñÌ™3á§M›6I¥Ò;v>|˜Ò§OŸO?ýܲeËñãÇ ! 0êø^‹¶ìÛoeeõÓO?íÛ·Lˆ'!ÄÉèèh…Báãョv›>}º³³sÛ¶m÷ìÙƒûÙI¸îï•UTTTÿHB®^½ºbÅŠY³fµjÕjÚ´i£F>|øäÉ“ÝÝÝÃÂÂbbb®_¿Nñ÷÷:th~~~hh(<¸uëÖºkzTYY9f̘?üÐÏϯ¼¼|Ê”)p=..ï$[´h±oß¾ï¾ûŒëIËyûí·===ÍÌ̦L™’••uôèQŒPš6mÚ©S§bcc[µj5|øpè¹R‹ ×ëlgg›‘‘1vìØmÛ¶-[¶lܸq([={öÒ¥K4’µ¾B%%%üñÇÝ»wµZmjjêÅ‹•JåÑ£GoÞ¼õý÷ßÇÆÆöèÑcܸqIIIÉÉÉJ¥“Ëåþù'ДZ‡îÝ»¿õÖ[„°°°ÜÜÜ£G<8%%åÿþïÿâââ¦N:qâÄ… þüóÏgÏž3gNll¬D"yÿý÷ccc»víššúþûï7kÖ,666%%%88¸îXέ[·ìíí¯\¹R^^^PPPQQ!“É 222lmm¯\¹RJ¬­­ccc—.]ZTTtóæÍ£GΙ3ÇÏÏ/$$dùòå[¶l LMMmÒ¤É{ï½W\\¼dɵZûý÷ß>|866öáÇ#Gެ‹9Y·n]llìÔ©SGŒ±|ùòäädBHll,˲“&M:yòäêÕ«ƒ‚‚f̘±lÙ2º!¿þúë‚ ‚ƒƒ'OžýÓO?ÕzC‡Õh4±±±b±xâĉ ááá#GŽ ÿâ‹/6nÜ·>|822Òßß‘LLLܲeË”)S®]»Va]gΜ‰?þµk×¼½½I…BñÁ ’S§N=zôhVVÖ¥K—Ξ=[#’Û·o?uê”ÝàÁƒë"L®¢¢âüùó …âèÑ£wîÜ)))9}útvvöêÕ«W¯^ýá‡.]ºôÊ•+ï½÷žF£ùüóÏ !u$C„……Á"&$$|ðÁ …"66V£ÑÐÔN:µvíÚ²²2™L6lذz5¬™™™‰Åb†aèN9hQ«Õ)))ùùù¥¥¥usYRRæE¥RY\\¬P(”Je‹-V¯^ýŒH¾<øúúúûûôÑG7oÞ\¸pá¢E‹^{í5ÜR&%%åÁƒååå<ï‡~ؾ}ûPZ9|øðîÝ»ëbëH$©TJÁFDîîî©©©—/_Þ¶m›\.OOOW(ЦL&“9::J$’’’GGG ‹òòrNWRRòøñc˜á'õ{­èÚµ+t¤7Ú'p]«ÕÖE6Ë²ŽŽŽ;wîdfß¾}*•J.—ÛÚÚÚÛÛ«T*…BQRR÷H¥R¾R©äóùŽŽŽZ­V«Õ:::òùüZ§š5kööÛoO:ÕÌÌlçÎÝ»w/..†‚;vìØ±cÇÛo¿½cÇŽãÒÒÒ”J%,% ©P(222ÒÓÓéëµ®#ŠD"GGÇ-[¶ìÙ³G­VËår˜I¸žUDF"‘„„„¤¥¥ÕØéùåÁÒÒréÒ¥iii,Ë–••¥¤¤TTT””” ’ ž"Ôˆd«V­¢££áPÔ’ýúõ›>}ú§Ÿ~ZXXW¦L™" ×®]+“É4M“&Müüü.]ºÔµk×®]»–””ÄÆÆÒ-•k6lØ`cc#—ËÕjuIIIEEEJJ öiDèÛ·ïäÉ“E"ÑËlþÚ/ë ‚¿‡‡Ç¼yóÌÌÌêhß§¦¦´hÑ¢¢¢¢Al ƒþí·ß¶lÙâéé Y4¤¦¦6oÞ|Þ¼yMš4iØf‚K–,áñxW¯^ ­Žç“ ¨¨(55uüøñF\_ ÈÈȸpáBddä êFŽ9räȘ˜ÿ¾}û®Y³Æè†´´´www-ŒàîÝ»jUlÛ IDAT-Z´˜7oÞ³¯u½³³óäÉ“ëîýžžž¨zÊd²ÔÔÔ÷Þ{ºÜþKaãÆ·nÝ õ÷÷ÿüóÏi#jÌž··w]ðÚ’677Ÿ={¶««kRRRUøèÒ¥ËìÙ³ nݺWÔjuttt7_»v­.ÌîlÞ¼ù¶mÛ:uêdä²bföìÙ:uJJJR(îîîAAAß|óͬY³F½mÛ¶™3gµ§¬k¸~ýúÕ«WŸÑ@7{öì‡fddÔV âÂ-**šú¨ÆÐ˜?þxÔ¨QIII(D×ÄÄÄ S§B›6mfÏž­ÓéÀ5ÙH¤ŠîÝ»¯X±b÷îÝÇ¥¤¤ÄÄÄÐ7\¼xqôèÑ©©©AAAÇ_»vm‡ЂZЪU«Ù³g †k×®Ñ×/]ºô믿¾äË_P˱µµmÞ¼9!ÄÂÂÂÉÉI 899YZZÆÇÇøá‡ P(QQQµ.b°,»ÿþðððÈåòãÇ‹D¢Û·o‡……EDD„††J$’¦M›‚ÛyÍš5£FÚ²e˲eËêbaöìÙ3a°´Bœœœ¬­­CCCsrr  R©¦M›Ö¼ys>Ÿß­[·'NtëÖ­¤¤D¡PôìÙ³FµVÀÚÚÚÉɉa©Têää$ !£GNOOŸ1c†»»ûªU«¾ýö[•JåììL±±±iÑ¢È NNN{öì™7oÞùóç5Ío¿ýVHB-Zܸq£cÇŽÖÖÖ‰D 0 Áš|>_"‘ÔE‘(­V[\\|ùòå‘#G6kÖlË–-³fÍš7oÇ ?~üرc½½½aƒíÝ»×ÌÌÌÉÉ Ä=Xbò÷fçµ >>>Ç÷óóÓjµ‹-êÓ§Ï‚‚‚ P^^¾ÿþ&Mš„††FDD¸¹¹­_¿~íÚµjµÚÍÍmøðá B¼¼¼ œG­ÃþýûÇŒ3`À€ŠŠŠÝ»w;99EDD,\¸eÙ±cÇ~òÉ'7nÜÐétï¿ÿ> Éãñ‚ƒƒÇwáÂ…'…áÖ 8::bï“\¾|ùÑ£G !OGQÝt›7o¾ûî»·oß‹Åà–••åëë«ÑhÆŒãîî:a„}ûö)•ÊC‡Õ2@ÀY–‹ÅNNN‰dß¾}£G†ÙÛ¹sg^^ž““4ðôô|øðá½{÷ `äÅ€éÞ½ûùóç ÅÁƒ?üðC¡PØPoÌÍͰàÍ•+W àD"iTESRRR àMcCÌNœ8ѧO –eªà……EÚ1k„3gÎtéÒE.—’ 7,x#•JU*U£*xsìØ±÷Þ{O*•ªÕê—ñäççç'''¿ñÆ …ÂÓÓ3::šŽ¬{yÀ‚7X:¨aáÂ… Pð¦v‰y»víÞxãíÛ·?×S‰‰‰­[·nÕª•L&;vìXHHˆ©E› L`‚Wd2Y||ü¾}ûlllÚ·oßHrfÿ³`b9&0 ^ehÛ¶íš5k Unܸq¶$G#‡M›6ÑÕ9M,Ç&0 j†Ö­[·nÝÚ4/µåäWWB>|XŸ#¡rrrÊš\^^îèèH‘ËåÙÙÙg¥ËËË!B¡P4*ÄŒ­Æ¥¥¥õùé²²2øC¯×7Â)BÇ 7:@#77j.4 é@nnn={Ÿ JJJ U¥R5†í‡îÌú'æOA¦f–íFêßëææFÑh42™¬¡X޽½½¥¥¥Á`P(ÊmgggeeÕ«¾ˆ|>Z†Ô3ž¹IQ«ÕpŠœE"Çãóù°µ«F£!„hµÚÊÊÊFEÙ=<<1™LÖ˜YŽ•••Á`P*•aû5oÞ\*•617GGG£äž¿E¬Ñå L`˜À&xy€PÒ"ÖŠŠŠNŸ>]wÅãjÑàéé ™@ Û¡V¯×ƒaÐÜܼñwh¯Qç•H$|þ×¥§ÕjA‚nð½Tƒ²²²j ‘Hd04 Çq _RR’žžîååÅ0Lc¶zUƒÁðÛo¿ùøø0 £P(s£ß:…ììl™Löúë¯ †× >nß¾m0ÜÝÝ9Ž{eõt#^¯ïÞ½;ä8¿2 ‘H Þ N§«£Òyu—C×0u5 L`Ô—Òfš˜À&0Acg9z½þÎ;ÅÅÅ=¢‹6ZÈÎÎÎËË3-ù« ùùùÿŠ}ø¼pïÞ½üüüzøÇqp¢ñJiié;wt:]õ›óòòsÈþËÃÇC“ß„GÕÅ¿8Ë©¨¨èÑ£G\\ܾ}û¾ùæ›Æ?ƒC‡mü-rMðÂ0wîÜwÞyçÕ×;ï¼Sëmmk„ÊÊÊ=z¬[·¯\¼xqÅŠ5ö yµ\·oß¾uëÖÿò 2dH­¿¶B;¬¬¬ìíí322¶mÛ°ÿþ-Z|üñÇ„˜˜pïµmÛ655úØÙÙ………9räܹsÓ¦M‹‹‹óññ©·ÚG;v쀮„½+W®|÷Ýw³³³‹ŠŠfÍšU×üôÓO·oßö÷÷ß¼yó˜1c:v옙™ ûÛÜÜ|îܹ§N:qâDdddnnîöíÛÉþýû/[¶ ¼ˆãÇ·¶¶þú믇 ’žž^YYY?<õË/¿„ìË€€ôôt(ö7mÚ´3gÎ888œ>}zþüùYYY;wîD$áÙE‹¥¥¥íÙ³gÒ¤I›7oîÔ©“P(LLL$„tïÞÝ×׿ò믿^¹reÒ¤Iñññ#FŒ8wîd˜Ž5ÊÓÓóÞ½{ЃR,GEEýñÇ7nÜP*•[·n ª‡IÈÍÍ…6½<oéÒ¥„_~ùåÊ•+®®®;v”J¥§OŸ677Ÿ8q",7 yìØ1BHÛ¶mƒ‚‚~üñÇû÷ï>÷ÀÀ@ww÷´´´~ø¡~Æb;wîÌÊÊš?¾T*mÒ¤ ˲pº !–––¿ÿþûíÛ·ËÊÊ~üñGÿ­[·fffBܯ_¿ââbzOöïßÿ)Ë7lØ0˜I „#FtíÚµFzäÈmÛ¶i4ŸÔÔÔû÷ïwíÚuĈ666:.99ù×_ÄzöìIwÃüå—_zõê5êôéÓ………}úô2dˆJ¥‚-A™5kVQQÑÖ­[ÇŽëââóöÛo׃lôàÁƒøøxøÛÕÕuÒ¤I{öìfÄ5"iccsúôé„„Bˆ»»;Ýåä÷ß?yò$!äµ×^ó÷÷o0-‡^¶-[¶äääÄÅÅ»¸¸,Z´hç΋-Ú±c‡OqqqPPPffæÄ‰•J¥O\\ÜÊ•+ÏŸ?çïïG·µ¨ëã´hÑ":œ9sfRRÒ„ ®^½záÂ…Å‹ïØ±£pHHHX³fÍ×_­T*'Nœ˜™™T\\ìãã³cÇŽE‹%%%ÅÅÅÉåò{÷îÅÅÅåääÈd²¸¸¸+W®DEEíÚµËÇÇçñãÇãÆËËË‹‹‹›1cÆÒ¥Kë¢-PuX¶lÙÆ}||***‚ƒƒ333ƒƒƒ+**’’’üýý9’˜˜§V«ïܹ—››tóæMŸ³gÏ~úé§qqqüñ7ß|3oÞ¼9sæ´iÓ¦}ûösçÎ¥{%œ>}zýúõcÇŽ‹‹›»ví,÷É“'aO>}¹÷ìÙ³hÑ"Ÿ»wïøøø †É“'×Õîüùóýû÷—J¥Ó§O·¶¶îرã¼yó:ôË/¿ìÞ½;-- hT»ví"""@b8yòä¸qãpO¶nÝÚÕÕuÖ¬YgΜ™6mÚùóç}||®_¿üàÁƒ¸¸¸¬¬,¥RwéÒ¥zšµµµÏo¿ý¶wïÞýû÷ÏŸ?¿S§NOBòÊ•+3gδ±±éÝ»wtt4RÂ?ÿü3$$¤iÓ¦={öŒŠŠzùçµ>Ù¿ÿ’’’ܺuK¯×ÛÙÙI$’´´4[[ÛL˜0ÁÎÎN­Vß¾}iÒ¤I^^ÞĉëçD=x𠤤¤{÷î<(++»~ýº­­íìÙ³ë³g—T*ýúë¯]]]322äryZZZ‹-¼¼¼x<t=4h­Õ2dÈ!3fÌHKKã8fõæÍ›Ü,—Ëúé§3gÎÔæ2™ÌÒÒò«¯¾š}®_¿neeåååõË/¿ìܹ³sç·~ï½÷lmmKKKÑURRòðáC ›’’’ÜÜ܆7¬Ñ  éŒH™LKñóóÓëõ_}õÕ¥K—<<<èRNßÿ}önzF,ËÖÛç†yJÊ- CùP«Õ,ËB…®òòrœU¸2sæÌz˦úâ‹/d2ÙÇÜ·oßiÓ¦¡¬ ‰ž” »sçÎo¿ýöÍ7ßÌÍÍÅb´6l°²²‚r;wî´³³óóó3ª½Èãñ¶lÙB©Ï¥yFHLLüã?BCC—-[F‹~Ð̪:FEEÐíÝlmm¡Õ4˲r¹—÷FýçeW?666‰‰‰‡Žˆˆ¨¬¬Ü¾}û³TxtuXî{÷î………ñùüF¸ O'­éS ?óçÏïß¿?Ö,ËöîÝÛÙÙùîÝ»#FŒ¨·:{™™™›7o‰D~~~~~~QQQ^^^\µjM´ !ùùù ,(**‚ŠŽF°oß¾fÍšùùùµoß¾qi9F`kkïëëkmm]\\üÝwßùúúÆÇÇ7cÇŽCÅ«@¥R+âI¶Ô¤¤¤/¾øââÅ‹|>? ~²··6lX­Ô^رcÇš5kÖ­[÷î»ïÆÅÅ•——Ãõ­[·Òi¹%%%?þø#üÓ£Gøøø¶mÛÖøNhÚ‚óË3ÚúQw N GGÇ+VÀE½^ÿí·ßÒ·={ºùfddüú믟|ò }Úi°²²¯•µµ52ïÍ›77xö_eeedd¤P(üꫯ =À›7ož:uªÆ§>œ••etñâÅ‹§OŸŽˆˆ˜?>yu!&&ÆÝÝ=>>:òeff†††vìØqæÌ™3fÌI=˜sœœœ üàùóç###§N:iÒ¤'N$%%á?þøã’%KÒÒÒöïß?eÊ”•+WVÛôéÓ¿øâ kkëçå¾õÊr–.]ªÑh¼½½ÃÂÂ\\\\\\æÏŸ¿iÓ&ooï/¾øâôéÓ{÷î­ÿÝ0vìØ^½zùûûGGGôèÑcíÚµ.\¸~ýzÝu®Q433Û´iÓüùóÛ¶m»lÙ²]»vy{{k4ðéy{{BÒÓÓ'OžœššÊ²ì Aƒ!;àííÞ²eËú¯LüÆoìܹsÒ¤I·nÝŠŽŽnÛ¶mttôöíÛù|>0Œ   nݺEFF¢[eݺu§OŸööö(,,üòË/ñmï¾û.D~ôÑG÷ïßoÙ²e oÑ¢…··w||üìÙ³Û¶mûå—_îÝ»×ÛÛ»¬¬ì‹/¾ „Ì›7ÏÌÌlÍš5õc[ëØ±cdddLLŒL&[½zõСCß}÷Ý™3göë×G}ãÆS§NAKcOOÏ &,_¾|üøñ°Ü.\À·EGG⇆†:999;;GEEmݺU$Ú°2¾““ShhèêÕ«¥R)  §{ãÆ111ݺu5jÔòåË'L˜àéé Ë}ûömì ]}¹W­Z²nÝ:ˆ;xÅ`íÚµW¯^õööîÛ·¯™™Y``à¥K—˜“““œœ\8œ;wîòåËþþþááá­[·¾sçΘ1cΞ=;bĈþýû#’QQQݺuëÖ­[PPÐ’%K¦L™²téÒ~ø¢»‰F­Vóù|ƒÁÀqŸÏ×jµÐ¾^£Ñ€î¬Ñh (hÙÇA½¡Põk_Ìt€ož«wµF£aF hµZ(<Hfddðù|77·Ñ£Gß½{‚:ž°àÍsµ@ž8qbBB½{÷`Æè™aI °Á` ¯ã¬Ò³ý\sˆo^ ÑoË*<<< U- l´%à~NG?KÑétðu–eéêX:Žã85®Ú³Ìس ÞŸ3Éãñt:P(4 5" ˆ¨ôôt¡Pèêê:lذ‹/â>ÇåæñxðrRÕÓ—fÉÈDÿo®]»fkkûìo‘H„³ F„3ã¥Zu„a–`¤à;0Úð/vZ±àH$zv•÷'=ÃF 0ÛOÚŸp½ú }Fûsm6¢6âÕ ÐFÇk@#5"cD’Ö¯_ýúõI“&=zôt‹úz6è¿ÿa£YmÀ™|òˆð?n  S5îc£‹F“ðô«¨î«> £X–EZóÈãësPÕ— ®Ñõø¤ý›••üøñã!C†­½Ü4å¥/Ö›§‘©Nš‡'-Yu„éYzÒ†¯·ÓZãþ4ڢϸ?kwEL]AÉòåËwíÚ¥P(Æþ’:ÿÚj±×¨`áÂ…`8þ/ƒ››Û—_~ Füÿ&¬\¹rÏž= …bÒ¤I ’Wd‚Æ &–C _¯>¿øöÛo¿’3 ù¿ÿqhÚ´i=o§ÆVVVÿñ0Ás°×øã†ó¨N§+))i@L0^‹Ò°˜ …6ø©7À¶@ÿ ö¼äþÐh4ÿºÕ¬ÞÚüo,G,;::6þmp–!Pº¦a¥ZBˆV«mpLžÀ˪ÓéîÞ½Û°m‡ º\.ÿ×­àS,œ2™ìUÔS Y³f„[[ÛZ µoœ µ¤¤ä_·š|>ß(®úk‡5j”Iï3 L`Ô.ã©!bã¸I”1 L`¼Â`iiÙ»wï¿Ø^åñxcÆŒùoÎÈÁƒ†+°Á`àñxÐùU ¨ÕjH)@£ªÁ`ÐëõƒÂ ¸—¬¬¬|||zõêµuëÖ¤¤$4+ƒ^ îx\aÄ7@£N§Ójµ‰„ã8x ¢æ!]@«ÕŠÅb­V«Ñh Ò# Qçóùþ«Õja8p>é°Ïq¼ž…„ @ 2®à@®³,kaa¡ÑhÊÊÊ Ï‚Çá¿S¡ýð9l„“ ³Ãõz=& ±, ÏjµZ‘HÓòx<½^ˆ±,+‹Õj5üm¨œm³†|àUJ¥üu:ŒpLp!€DšBª|‡Ãqœ@ €45H=!”^(¹ººJ¥Ò¼¼<•J%“É`’a‡°, ·áà…¸÷ø|>L®¯@ Ðëõ€0\áÀÐ`c`BþŠ‹S ) …þÀm [„`h),1 >ï„mF‹Å ²²æWvü—ÇãÁÆÆ_!¯† »v8äÿ‘ª‚oð]Lð8&€6¼þ†Ÿ`—*•J>Ÿ»†kµZ¡PÃ;q-1ÈF‡Ç¾Hª<ÍðŽÏýàoÜ`:rƒàŒÀÛ0fƒeY­V '¾Ž }pÿ`bL—D"Q©Tˆ*`•’’Ò¦M›ú!°z½óÃLkÿc!°½`9òrî/<±LÀ~‚ó´F¯×WVVþþûïׯ_øð!¦È!†­{†ÉÃÑ‚WÁ°éá\á邜,¤A€†¾ €œÁO‰„Çãi4šœÁþƒS™k42¸×á=xé]ðE8]¥¥¥ð-äxæi9ò azá´ÃŒly'¾G çàýHGhÖ…„ 1Á$e8«H‰!R©ÔÒÒ2??¿²²HÌ L)¼ &Æ‹ôΪÁ`P«ÕÈÂ1¥ÉÌ-dÐäã¸üü|@ —ËQÀ,Bà%8íL¨p˜:zÎÕj5n]¤¡0Xؤʩ ‡¼É–e‘IÃ…B!n9Ø~0c¸X€9. ò¨Õ·áÀ…B!29\”Þ­ÂÍHÓñˆÁºÐd]«Õ¢(E"ŸÏ—Ëåðx I3ðE@‡Þ £@CÀ%3:8"¸¢Õjá6Ø € b<|6® C€|Z h4@®ã–†;A˜Ã]GªWI£ D ·%žôçÊ´­M#›‰ßÀRñx¼©jõv±XYµÉb ±Áð+ËþβpÈy<Þg*UË*ê¶J(|À0oêõ~ O«!êtºÂÂÂà‡›éõçùüŸ¨ÍŠÄ žP(T*•x¢4À¦‡ B'¤¨R=M œa|9œ ðux„¦D„C«Vê®]Åû÷þD†¦(ÙÑS‡2)fÈÙA® <~EË (Ž!›¯ðx<R ^H¹ª¢‚…‡eY333‡¢¢"˜I”gQÅA*ŒÇ¨MµIUþ9ŽFŠr LêF´†â*V䑏ܸÌ]§Kd °è€2fZŸF²ŽÛµO¸E¤PÈŠPúÑétÈfŒÄ`oð6øè&êFz½J* CÂgQéRˆÛña(À] w"ƒÁ}‚û î¡)dØôºÐJ'lBd{(ù!‡ƒ†R>H“šyCÅ-„Ã0R©”Æù-èÂÐÒÍùèµFfI‹e¨ÖÀêÓm0¿Ž‰ßBúêt§åòÖ·×ÌLÍ0 Ã|¥Pü$Êtºáz}1!éb1œŠƒ,kβ„™jµ=Ç õú¡ÍF–…ß)ã…Âp…"™| Fã#¢ìf@ a»ùƒý50•éMSš.€Ô‰Š3œx w§D"Á7‚÷£è 2ʪ ÃD"åüùìµkê… H¼ð ™€OÓÖØ÷øÔ‡Ðâ61ä4@)Ð<ˆŠ!D$Á €ÀÑÇ'eY¬Í\ñD6‰2&Í{Ðóüøñ㊊ …BDdyÚv ø c†¢ ç6—`ÆÐÄ„ •pQ(‚ì è!ƒDîŽÄ`À¶‘‹3î EŽŽågh !N>phnd¤ñ’@gÕj5ì1l$Xbä ¨©à2AÁ=¸ž ˜RÆOƒE7?ЏvpÒPZE†½Do?0|!#D=°‚=F£ŠFHšÁã‡HUQàЂ ŠRàC—ö?Ð,‰ç…?šaÀ"âxѸBo Bˆ™™È”5rÔÌhó ZSh®fb9 gùü±ff{år­N§cƒÁ0S p\7‘ˆ¯Ñ ý—eÙl–åñxcµÚ?…ÂË<Ã0QææÎz½­^¯'„Çã¹’  †ƒBá#€PV)Z•A ®Çðx@9&T’èm‡ Tv‚ƒ„Ÿ :˲°)…B¡‘Ȥ:yT”Å„ Z­V¡ÓéÌNŸ‚A© IDATˆ%ÎhéPE›m!Á;iÒ5Úbƒ6Ô™U”áð¢Á´Ì !@ Ti7¨8h¥D{B¡Éd0(­C*äÄ0ù¨ç!›A6‰< ü%(á"MG¿m$„E—Éd@ E"šÝÀk¨×ëÍÍÍÕjµT*eF¡PàÜ  KKËG)•JÚÃ$‘HhŠä´_½F†P`Z(åÀ< ×îLdW´xަQÜÆè¨ƒÙ@=ŒVQôÓí ÎA½QbCO¤P(„õÅ·Á¶D!FŠŸ`ûçS©T0À½ÀÒ lØêÊÀQ_Ä!£„Û œ¬È‰A Á>DIPR©T0óh8E)©ª–†Ö0ƒÁuiánFyø  PP†‹Å&ÃZûrhlJ3ÆO§+`˜†»ÖJ¯wn:8H** ¥»Nç¥×áóA.i0H4š2ow›R±i{7ò0Ü+hL€MI»"`ÿ¡"² b¨ÖÐ’ˆ½h¬@/ü‹’¶o¯>Ülþ|ø‰÷å—êÙ³Õb±ðÈؾH‚ÑÙ€\‡V\mÚmKû™á¨€ìtÖȀ÷¡¶„TÿÀQ£A'~ú«Ñþ–qzPhÔB/:do´€*V9D¾Ó‚Eoø.P4ÑŠD>Š~&!D¥RQ£¥r77777·óçÏËårœz,h†¢}x˜¹Œè&r}ÚºˆÊ LxÔAqwÁã°ôèKGs°dôÑ’¯ P ÞuÚ¤†[Gp¤xRè€áhîÃ:•H”a¥R)ÆbМFTôAª@Í ¤N§Ú ²î+4s¡µºÈ(¨ê¡EÅSÔŠàº\.ÇâžhƒEýŒ«´j ¤5x´«7ŒÃÄo@Ó|ŽãŠYv–Dbe0¸UG YMt:µúwÊð.‘„U‘­ÔéfK¥Å|~7ÅdtÒÀ–Å€.8ü ¬ÐÇ 5bØå ¾ÁC»‘dú¿ð mGþ¤Óé4NNj__ñ®]$/”!g¶nÞÕUõÁB¡d7šLÐFBÔZð z¡p ´LM[Ÿa¶ñ6šßÓx½߀Šò`tÑÖ!ôx“ªZÎè ù1Tt𢆤5E´Œ1T#€…Ðõ†ás톔Æé5…p …´ð¡R©Nk!´`ˆ†cT 0ÞCÐÆ€¶/¼EE´<@è;‡!|4ùº@‹{èRB³Z­ÍGhãW@-r &>t¹ÑùítÈÉÎÐ/ úB¢&‰€rÁÚ‰Ý$à²B_XX˜‘‘¡P(Äb1N= (éªMí7rL”5ĸ|¤’¨Kцš[Ðaô¨jÓ>²:0]‚˜BÊgt9ŒA…§ìììºtéâàà ‡9L¸J¥R(À®@çÀéBHÇšâЕÒ<‡ƒ“l”¨€¶ ‘H$‘HÐN@GT"D ÆAmí@;‡É°ÖÀö5ŒÂÒêtÝ8NÎqZB*FÊ0M8îËêtºuju33‚y±ä¸78ŽQ©Ry<ƒÁÅ0.Z­ˆã„—#ò«l)ÕÍ_¨àã‹Åا=ó@ ÎŒ´Œƒ{[Å`– 83U*†ºâþþ+’U&ÆÅ)Ãõ„È8ŽÓ¹¹ÉçÎ5Ÿ8‘Ïçëôz /¦u ä^ˆJÓ¨‘ å5Z‚ÆS´£èHTžŒ(^;>Í„à±Æ4£:É%ž^Úç„f"\Apó 5™0É´‹‚æú(ÿw|9]%Ì(Øpê0\£ÔàW §g=4´SƒH$‚ƒ³ÿÒ©$‰D©TÒkM[ó °/¡ÉU(ä÷ô¨auà~,î‡>BÆb¾Q´$k Áhoð¾ðù|¥R š&†Ñ!sÈ#y<žB¡ðððèß¿ÿ¾}ûŠ‹‹á‰D‚ñ{eee8^#§­7Ó~M<¹‡œ†‰?!>´Xc>ÎKšÒá6¸Ð¨â£æ' é÷&–Ó`À0Ì¡PDzD¯ç8.\(ü\­²ŸeÓD¢f ó&!Ù #öW ò ÃÜæ¸½,;J£aYvºTÊqÜ—|~¸N×W«Mޱ,Så@FnP`püPzBa3tH îr æoŠœã8¥R‰æä[hªB6ìWŽã,Ö¬©œ1CÁç srTï¿o±`C9NdC´ãá=¤~ñ˜ƒû=1~ÎÎA¢†"!R¸h=ê[h¬£í- èpºtš‘QÐí§¡¥KáÄÒmâè¬[zèŽm´¯gR©Tœ£ÕÅyÔc0¡ ‚©F1„ðZg‘C`´=mëÃ,"$©´aJ­VƒwÍÈ ˆQÎhƒmN:Ç&êÑ-kÓ³CÀ Z#¤Ã@ÐÖ‡»šC½CÁaއ‚ÄÇ%æ“ ±‚„:Èt:* –‘‘‘››[ZZŠ×!3 ­¸ß0 Žæôè„ÃÍ o¦ã­át)šhpƒõEÎûö†Q  #h× íŠƒÉÄÄ/ËixØÀçóªd½^?¿Ê¦ÁRÀ0»E"Z- ×K¥¤J® …)Ãe0qTí¹/y<Â㉄BC•„d·jÖ´™Ž«P(¤»I"Aâ‹’ RúU´“–ªpß9*µZ­àë¯5“&);uÿø#[Td¨ˆhMç‘ÑŽYx 130 ‘¤å2Lº„ñmt7CZöG+› 4 ÏÆô[¤é‹BSyzrP´DÊ…Œ)&˜¼ðÑ^.x3jNKÁŒ:´¡Ä€:\e°¸…Ð’>ZÉhN)\ц8ŒûB7;n?üØ÷‘·!'À©£-rô¸0R‹aâà òõmÜøWÈV×®Ÿ~Ja§M3¨T¨éÞ|S`0lgÍ":ÊÏOÛ§1öoç;§qrÒDF ɲeö*•……ÅãÇe2H6tÜ ©JƒÅ¸PDÈ ”Z ?Å‚› f¦¢¢B&“ÑQé(âI¤sÅPQFÿ+]¤”*ZEÉ ëà2aÔŠ\د“>_ø*ºÔ½Ütš a¤ïšXNCx´¨ÂHé¸Ú3L»ÄIUË<:ó dš\â’ñR-m)†3Ðl `A†_¡ î3ˆÈ¤Íµð-b€/Ô}1 ŒÁ Ú¾XYñ õU‚'ÝGœÎQ§#ˆU©TŠ!X´ÎAG:2èŒ/DÏ*.˜ B'¸Áê@l.žQ©Tè¯Æ(/ à´Р300ă‚PÀÄ¥”H$nn-HàEé (Âc* ÆÝ! >:’®S€ÖQ:evÚ€ ê¸Ät‹wšÓƒÂ!À¾Š¢È <0§• üÇ3ø¨n2 £X¹RçåÅ¿sG¼iÇ3¸¸à`ç]»T*ÕÃuë,§Mƒ7óÛ·W!]¿^£Õ–ÆÅ™O˜ ïÙ“=vLt÷.Cˆ!7—‰*?ÿ\¼laT_}Õ÷§ŸÜÝÝ÷ïßãÆ :‹‹6aË0*ú€QvXÄ–8L:݇N‘1J_ERŽ¢pÌUBáCãèÐ5Z{†Í) Áo ÍztÚ5®&-§ÂŽE% &Ñ<ÈçóA3)‚M,§!ƒ¤i±‚&â°¢˜L€2/Š3híÜéŠè3‡} ªP^,,†3ȼýó±aÓÐÿJt-£êmøf V1r˃lˆv0>ŸoÐhtqUv BeíaÚƒâámHƒ0}y-\¡M ´Î§Î¶A/4:0t:B¡À81´«€çe[:e PXY±ƒöš¶!Z,ÃËÕj5æ'Á À´Ð†rº¤m“„ G?Š2È?0¶ŠŽ£ùºI0î‘Ö‡hüaûaÅ9 vhÈB¡ ‰&ëÃ)…á³, TXÚÁ@;Àà%fœ««bÑ"¸¢ ‰……H¯×ÙÛ›M›“&‹u:㈠«Óé*+ÿúœTª‘JE¥¥lEÇ0\Ó¦¼´4N§mÒ$55577÷ñãǰí°ªðT¬/gTßÙŠ>h=ðXÚ lU$ÑJ¤ûh$ÀLg<&è^¥!ì=,‹‡!È? »Ï£H$BÓŸQ¨|Ø'î" P¸ÿiûèñ( DÒ°-…L,‡ÐXä‘®ò„Ñ™t‰C:l)ŽQeC:ã½ÞŠd·ÆšK¸ÛPð¡}!´„ú rG:šˆÜDs9¦¢H…2#h!°§iã;tÂQ bF0tDcØúçÑ£ƒ³…yT*¤©#­G³âƒþº šÅà»t@*£h΢ó-ŒŠéѦsÔeþÒÙò¸CèÂE´‡ÖHÐ\F—öB½ =h„¤m÷„*¯‚¤“@€žZ5§CÚ®HG7ÑL‹öüÑEq0  %–&¢ej½þ"y­Z=~ï=½¹¹V*åÿðÃ_î«òrîñc¥Ã0‚³gù|¾à?´={ê;uRËå‚_奧³çΩ§NÕëtœ­mvvvNNÆ7bå4]åú ØÊ(ª#¸ÿéA‡i JJ‡þ“Æ"§UXX,z&Ñ2A»Wñsè ¤sBÁI‰A­X«—f¥hÉD†Ë £C '2?PŒÊD©$„(•»**æmÜø}EÅŸÛ·¯Ú°’ãâ2¿U+‹Ï>›­Pl8{Ö燶þò‹`Ï@ &½z1·n Ö¬1 Ä PÓã×Aš¡cý’XÅb1‹cÀ²šeš™™©ÕjàI8{´ì!´àHbǽ¡ÑhвÑÞtx¡QÍMZÀ¥9  ¨¾Ð~_:³ØÈëI½iå ýL˜ê@çÀ‚Þ`dÖÄiÈßSçÐD×ÔêÎq«E¢ IƒÁG£y_§Ë!$N 8À²=)‰7.ªðÍEþžS ò;mT!Tq-Ü©´«Ÿ.I[è2¨_£O4k<]XØŠ.LGÙ¢ëŽ:ÖÜÙI$]E‘® !Ë(ÙgÉ7ºß UíZ45§ULw§c¥è²Ö4‡  XV {e–`*ÒV Ð0 dêõzDBÌ͵B¡ÊÖˆÅ|++¾•13c$’¿>aii03#UþÚffzʈz-2l<ÿÀcPÙÂÈdZF²˜âî@,kqV´mTè“v ¿4HÌ-Ã;ÍÌÌú²ìpƒÁ…eµB¡ƒÁ ×ëo³ì×bñ:KË~:]nq±>=ÝB­¶ä8 ƒa¥@Ãã Ðjy<ÞLµú*Ë>"D¨Óù„‡ó^ýdEE¨Rù—ÿL¡îÞ-Ý»—WQÄM¬0LLõ§S»ÀGF&“áÑi Œ¢0p…P=ÑMH»éÌ£²¼¨ÄÃé€i·²²Bÿí)¤áh×]Œ“½ åB{ U´ -®´pŒÂ.ÚºaÆh œb£X>“–Ó0ÒF– šî3 £6Ü•Ê(Ž 07Oçóu:ÝTµú Bñ™§Ñ !…f*´2Kï<-iÅH J”h:Ç,ýê& |ÆÐƺ ¦+’¿WÃEMŸîö/4 PÑÎCÎmäÙЀ„NË mÊ4k§+Uýì ¨ñжA4C#±ÆX/”×èXp£ªÒè·@†Šn0°¿ÀtT ÷"‘Héá¡iß^ß§xêTp<('NTÌq7w®àƿҿÝÝ«V¢<>ßöƒ4-[VÎËÙÙñ.^”nØÀ/)aFÓ´©rÓ&á”)lÎÿ³÷Þav–U×øýÔóœ2gJ&=CBß—"D@ˆB"RDA©Q”"ð¡(E)Ò›T!€ˆ¡CèDB jH2iÓË©OýþØsVÖÜÃïßo¼®ßÌåÅ'“9O¹ï}ï½öÚk­ÕØz„¬È²7<â2F†™Á ]É-R©”Ðèâ¸É 0®S¹yY–v–×Õ_ÿúÔlöÖyó^6Œ×]7I’¢i®tǶ“JeÇÖÖÅÇÿ‘çÙŸî%Ia»íšÛÛRIõô\wÐAQîõÑG)˪‹ñ.»ìߨ8º±qÂÚµí®ÛóÍö}÷Y–e®\‰ˆ/'îk)¦q‡Ÿ™‡=¾‰&-«}uÏó*• î÷”tÞïÈÕpÐWåj^>EzZ¼‹qJaƒ# šo ýñì”»´4š~#²žÿ-GŽF†áž°Rª)I¶6Œ_xÞJÏÓÔT*•îêïãøøÚÐ ‹z¡]ÉÕ1Ÿ¬=ŽpÉRQŒ 3Ų !¿ÏE=h5xf“óbE*ñ,;†¡i„0bÆî>¬JÇLP©«¤¶ÓæœYì‹9¦Hö™¨ÊS~ø>kmqó_ðÿt‰÷TT Cl1Vصë®VM!-ÚvÛ`»írÓ§A Î;ÏYºtà —.ÍydÇþ‰'&¹œïûþ.»d.ºHµµ•ñ‹ðÀÍ9sÌÉ“£ý(7N»„ÇþTAQr1SVVŽ€HˆSŒUÃqŽÿ¢imMœ÷_‹;êÐEfhÎ÷ýO?ý´+ŽW[ÖÇž§”ªëî>äÙg_U*ŽãÆõë›gÏ~ôüó«ÕjÓ¬Y†m_³õÖ»÷öVÖ¬IÍ™S:ê(Ã0þqæ™ÙöæÛn ùËh×]xë-óÙgñ¼ÜÿX9ãŒÈ0Ò—]&°6ÊVÎ-dBS:pâ‘ÃC*lL‘@5D0 ÏJ˜á+ˆÁªµlÏ#§²”þ2àU§üðÞëYcà~Ü š|XŸ6¢oD˜9‡8>oFürþ+NÌc²Ê¤,Ž1Jí¨Ôùüÿì¹çÁ¼téÒW_}õî(êìë{´Öëãò¿¹¹YÿR©$³¾\îd³Ù¦¦&¥T±Xô}_šYX5$"æø*&”¤Hl-–äV³¶ €ð`»ŠV1`}h¿cË>€€~œ܈f\Æn. Õh®ÊG#Ô2AYÑä ãÒ `¤Ž]×ðHÁ\fX­Ví;î0¦N­žsðTgÎ :({Æ¡šò)Õ3ÏÌtP¤”5{¶iYÁöÛ›MMÖ¼y¢ì`ærögŸÙ¶­¨ç©Ñ±Ê ×bŸrdòÁˆãæ–PÁ·Ô‰ìDKx¨“³ly}rCHMŠ­Ï-ëUÓ ƒ`toïI>øz>Ÿ$ISÿôóÏ9sÊåòŠÆÆës¹ÿýâ‹Å¶ýCÓÌ|ö™óÑG¿.ÎÏ寄á^qüÙí·A`…a$-™Í›£ßþV*×x°-ŽF€Ør%[o½õÎ;ïüᇮX±I¬1pߦԗù|^ '&w z€,Üs6òÜð¤3Î?`,ëæ½Ìc³|°±þ/'зæ3F›Íéå Û©ƒ †2Mž<ùøãŸ>}úQGµÃ;¸®k(eZ–@Þ¨²Ùì„ ZZZr¹œ¤i<ÔÒØØ¸ÝvÛí¾ûî“'O®««ƒµ4¯d¥â,¸ÁƒØ„BIrj_LBA£T€¨h²˜ ã’¸Ï$\fèñïâ! ':¦Ê¼ ˆÞH”‡€¶ÓH]7Õ`qî¡x&Ãèr1™LF¬´‚&–Lo°>ñ‘éÓcÇq®¾ºðÀ|r‡aX¹â ÷²Ë°œü|ÞŸ5Ë»ë.cíÚxôhÿG?rn¼‘‰,Ìcí`rå~ƒã8¹\®±±‘•îÀ!DÇXÖ°?üÄXÀBCóä;8bùåâì‰ãØ«µÙ¡âU__?~üxÃ4íºº­·ÞzôèÑ;ºîÌžž—ÇŽ}câDÛu[ZZ~oŸçr¯¦RÑ2j}¨d2û?“Ɉ¦ºPÌÿÎd2X<è_"‡Ý§ 2#òJþ'oær"-‡üÓ4t.Žc1aâ?ï ðʘãŠ?3ù Z|,v€}'Ø/¼>å"ÔÀ.ˆ1Z_|©#ÀÚð3еcq\Ùó%¥:âØÝ¼ù‹/¾=zôÊ•+;::vÃŵ†zÊåò† ²Ù¬4*¹¿'‚4½½½Õjµ³³Sv;²KGÂ7黨šž+Eck\¡Oóc2èÎM,ÙKŒøå‘«ÁSúÌéÌNbÚI#Ý&¡tCÖ+P í]É?aåÀbr2ŠÐ,·ÌÖ5<µ3jÔ(éšÀ‡1kŒwK¥æÏÏ>ôPÇÕ–žÚ³m[ëtw<½v Î=7}晦e)Ë*Ìkÿæ7ÑÎ;ÇÍÍñž{ÚkÖ Åæz‚ ZDsO–L.˜Ñ 4œÊ˜€à…hÌ « ëAˆ`jÉõƒÂlþ Ïó½½ï;N6›õ<¯Þ¶'”ËGf³QmN§¯Ÿ:õˆbÑËfÛ CÁn†R_d³¶m3ÍÓéÐ÷§$É hg†5Øô©+˜¡—ŽÖŽRjÉ’%«W¯–³Š©Þ°?÷µ¬xÈà”0¸J¥Øhš+ü|¥RAm„Œ„ä^º»»»»»Y[‚¹¬6Ë‚ÜÄbÌäiÑÔ`å'æX#KÀ!6 Û¢3{že4ïyV r­™rã—–¼|(¼‹—Œôrþ[Hk¬°Â¢H%ÉÛ–&É×®ÓÚEÑdžq™çùƒÇ9³à,ž‚¹ñ¨Ùv!ü)šÛg2`}ÈŸ@øDŠžAã[ãùJ5DYòhØZìÀÁOE2P8·$–áb$‚~l€ïÈ aŸ…‹”oÊÈ ÏÛK(‘ÚˆÝÑÅáÄiš´ñU«Vµ¶¶Šk*ÓÙ%vËcÇD÷ rÑš5ÑÒ¥…{ïUJ9¿ÿ}’$Ái§e.ŒÿóŸàÿ×^»6Ù¸q`W©ê5ׄŢJ’Ôw:ý«Ä©ÂV[¥î¼'%[\ã¬åh"媘Çp; Ð+Š| âóØòVj@pÔ„ ˜×®”º©¾¾¡¡¡±¾>ŸÏwuu]7z´\žišÛd2þ¡‡:}}™%KÖ67ßÙÔ„ç_ž÷r]ÝØ±c¥¼¨kkëêêZD&1€ wÚi§=÷ÜsÕªUï¼óN¡P`Þ7œàHàB>·\./_¾®¯ÜBפ4ãb…ly ¿±Â&£[È@Á 0÷ÙðI›ÚÆw‰À’/95e© Õ²Äa‚7Rå óyƒ0ÊÁ'A“R—ËÊ0ÆÇ±§”RjÃè3 7IÞ¨uËy²óÀó~§&Æ,Õ(Êúf©sAºe7²2Tm0å“cÐõaˆÞ½uuu"#p‰ Ͱûåá,Š"ÑXcq­~‡ 7?±bgŽ…¡¦Á½ŒÎp IDAT°'„‡Y™‡ؽM8²+W®Á£TÜÎ^†a²lYêòËX^ýýöÝw«§Ÿ6 ÃY·ÎvÝÔ‚Õöv+IœÇ7’$¬A ù+¯4óy?’8Vííò¹¶mg~󛸣#¬E è²Ø0RÃ'ÖíuPî®R©È0[va%ËÃgrD@ô®y^gHýôÓöövgCõ~°äÊQر…¤\¼Ò8·c-¨ý#qDmÕšsr Å7ßÖ.›í(UJI&™Z/yµpEË”шCæ¡h’W˜¨|~9Ãvä ¢±,´|É~`•lQ0/™´:ÔD­DxPQÚb¡u0_y²ÁU?O{1VÃjlª6Š'ÿJRN…°mÀ€â D…*Ͱ ëÚ¢‡(RssTø\PY…E"…¼&Ðyê ¾þ#{˜sI5Ä¿’ùÓˆàòœ¥ÇÀ"’xÚàƒ0ÊÁ㮢)€I+[ŒshÇ-C‹àSq ¯ ²\°Ðñp0НEséoãj mÛÎçóMMMRe‚åD®®®n«­¶š4iR©T7n\¡PèíííøÞ÷ŒLf›'ž¨V«Ž>ºï¸ãì§Ÿ–ëñ<¯¡¡U¾ÐºÂ0\²dɲeËúúúЗâ#‡ó}4ÿ5/NßÑfZñÞ‘ia Y æd¹›%ICªy¥ÐÁÕ ›3!bº?²>òq›°i`ÿY +Ì‚CáÅžÖx³ ù|¾§§g¸ü FHÒ[v5XCù|~ܸqù|^6•¼uè,ô GNP}0ÝÉ“%L2ѡ̥‘°B*Â"¤ ‡¦6ŒS±cûXCeû§@p´@×ÕwþDM×™ÙnlaÀ4$ã8䨄†+*5X†„Éëò^9׃ã22S”¼%‹Ôn7î“ü sq ÿVå…Ø« Ú0ÐϯŒ-0 õŽÓP­-–"ƳåÈÍ3n60®ËÐ8áȳ«Šü€¬ÆT*•ËåÀ?dIVù«†††I“&577·´´È$ÀêiÓJ†1þÉ'å~þñR¹Üvì±a‹År¹,þÊ’R èêêÚ´i“Zã½}eî;ö ¤2¦° NfyrS‘h&9Û[0›»bHVä5±`³–=°³8ëí²ê•¬4ð ä'qƒ8Û€³Éïd,„=´eA644´´´äóùúÀ0Ÿ7ª8‘—E&Ú‚ì4Ž×Éq­,PÏkY§6PÂR˜ ³0÷_v‚¬­¡²¡lO€ÓÙ"ƒHÓŒMưuÚÆw¸í¯‚©Áºý,1—·¬Tß\­žXcµ~Ý0n,•ŒrùòlömÛ–f{Ç‹K¥Bmìïy3•:¯R©FÇÿL¥®7Í1J=Q*JÝäºÏg2Ñ`}h®N¯ÐF…pTÀ:…Ï!–—Ö0C8š0Ê£K,êT œ1”Gh°1š–/ûݱØëk¡Q§ ž*ÒBfX@L¨eåHÀËe•L~t~ˆ8$ä2™ ¸ÒêCÖÿƒ•+¿ÓÕe§Ó™ ¼ßÿÞPjf¥òÏCu•:ù¶ÛªaÇq:Š~÷µ¯Å/¿Ü}üñÅëùe¹Úºº:QÛ”tUš@¬BÁ€½–Å㕱M»ViÀ)3èJòL4ûs+’uGÍÇéÛt¢oÄ£šÈŠ0Ó9 A°ÑdÙ@Œ®íl ?TßD‘ÿŸ(ž6oÞÜßß_*•†k4gäÈQüî!3ŒÕ†¡œ:xýh‡@B#ϰ.JÀq©XùÜñƉƒý~‰~Ezþ°êᣈ<Ù9 §á¬½Ïú ²dº„-&q{ ÃéÕêqQ4©æŸfÆ«ÕCêëƒ XP(áyf:-¤ß0¦år]ô0Ìøþí®û°ç¿žU­”Í*¥î*——ÅñÒZSADJ§ð© XŒ‡^a÷"ú(xÝ@í1…è z!;S Ï7÷[Zâ °7o†Üp<1¶ eOI,\Ñåbætøåj¥9eXÒ±™“ˆÁÝ E¹æÒ\NÕDÀä$Ê5HÃLÈ„étšåh… ƒ–º»×_pÁèææôG™/¾h´·g»»güã¾òÊù3g®{ë­eÅâqvûG™$ɨ×_O,«R©¤Óiá°ÈK‘ëÏœ(,À öÓ‚úÖÛS‰ø<ÿ€cŠM€³äQ Ï^ u¤§Ë9(Û½³.ÃÈÌ5šÇüO.F…Ö$ˆÍ«šñ«ÆGEÒŒÜÜi9r†³‘‡N‡ªáàÎzõœP°È1%\sSTÑT0«°0jh®‰Èjž \°3”¬ù©(RZãá6Ô*ù"°F€Ý²ÜÅ£ž÷˜i¾ÜׇnÁ¯Óé]“äPß_è8‘a$Q$iõ˜rù¢j5I’G c“a(¥©VÇ$ÉFÓ|Ôu•R¿u]3I¾« £-Š’Ú9Ìq„iî|úb¢)¼\¶7sÜÁ\DQJ:¼V”ªbüøê 'JYÚUM$µ`CCƒçy]]]R™q"‰ç V˪üö·©»îJ,«rÉ%Ù .ÖzX €pΡo/Hš@Šj•–öØ5…!ù[ô½ã8. Åb‘'Ž!CÀy+ÔáQàšaÙ'—l6[*• ÏJ¥²ÙlCCÃvÛm7zÅŠæ[n o¼Ñèës®½Ö?ãŒèÔSíöö­oºéÂ+®8õ¶Û&×Õ9ÕêÆ¦¦1<¢j A.—“÷"Õ’ì>Q©àv£ÖÎÄIÀ-RMÏŸ÷ €"5wE!üî?¡†ÆÔø Xô ÜQ$GŽ ü†QOzäÈQZUÁ‚<1' ”ÈÂCÞ•§ð˜þ¿`¾Š”b $‹Ä’ÕX.C#!ŠÎM !ìA‰è/ÿý^ù>cаiš6eþHÄA.ÆÓ ˜jÊ®N’d¬m¯SªÕ¶Q*)L&IeÙ¶=Ë÷-Ë견WM3N¥v/—¯V×ÇU«¿N§{ ê,2]Mª%MAÌB´Å6¶"ŽÛl6ûÍo~3›Í.\¸ô\ø0–ÇqfܸÞk¯Í^|±ÓÝû—¿ôßz«wá…f±ˆS_8æ¢ TMôÉx±Lk”1—¡Ô;^¥ìþÀÕ¹xƒz΀’\Èi©TJ>N†å¥3füøñ ;är¹l6ÛØØ¸õÖ[oµÕV£-r¼¸÷ÞÖ /˜Ÿl¿½†Î˜1é8vúú~ÞÒòôĉ“ÿñSÖ¬Ùpä‘¢`YV¡PQÈ–´L¬Ç¹ô1ÚH<€êu$Ò )øàÈ.x¬ü*–kzK»¬a›°›*pN›˜F‚†ˆÐ…²á9>äàfÄÆ<¨¥øÕk~¾x2€ë™óí.YÕ2kÁ¶RÃiGŽœ-Éx,ò^1(ÇH‘" fd¢%«I—«Á]n”­Åìï0òC·Ÿ!Ùl’|!â0oŠÇkÒÝÌoù…HÀÍ"øjDÍHø5F/—>¬bÆýýß®«ÛBÙ¨M =S©LËå (ú£0Œ ãáš:C•J‡66A`ÿ ’Ï,„,Q@¢ WsÂȸ~ä®]»ÖuÝR©„쒥ɶDí––ž3ÏÌ\}µÑÞî¤Ó®ë–Z[nfÍJß{¯½y3ÓŸ´°®9Ó0#_‘™…Ô™L†_+’ôùÙO ‰DL™ N~'†i0Rаå8N:C~ƒHjÊßæóy‘ï”B¿®®N0±ÆÆFÇqb™,šVJon>{öì­ïºë¥«¯®Ÿ0!Š¢¾¾¾7Š©šôN+•J¥R‘Ó¢|¨$J9‹3†÷ˆÆgC"bЬ@X~•‡Ð£eŠ,Íë“ n‰/Õ¬eb†ml´ÒJ~XÄÖx˜»¿©XÜšáí|’_Åôw°~FŽœaûbx] ÙŒlhü`$§üî±Úx†ƒ|BpºÁŵf¡%4tž! ­ý+h°hGc¾ŒHµX6m-ùIƉfs€èhòM,‘`Ƴ–õëJÅ0Œ×l;L’Ý“$Eï'É¿gV¹lÆó†‘$É"¥¾†‹†R¯xži–R q’X–u·ãtÔàA`žÌj…°úâ%¡P`Ç#+—-[&66Š|ìUMî)BÐÔ¤ …¸P°kðc†V©”J•\Î[¿žù)RÖá²p.*fL5JJ>nܸqãÆ-_¾¼»»LbÛ¶¥¥E£Ãɹ‚"›çKIâk'7xž¤P‰tU“@–SÍuݦ¦¦É“'O™2e¿¶¶‰'žhÿãISS|ðÁîÛoWöÙÇ^¾<ÈåÌ >ü׿ò/¾66¾þúëŸårÕjµX, Û¶‹Åb:. 7nìéé‘Ç‹Éåæææ(ŠÚÛÛŠ`95ö¨ÅÖãTÊRò.ä¦0ÐÍÊ (ay¹ ö>+›@R©È9'ÿé‘v‘¼¹¸´VZ§°AgüO&ÍãÈ—3›=îFŽœÿ ª4V!Æ•Q[pYÍíþç~ %Ø\L²äFùQøK$•ùír¹Üß߬@¢‚;Ú6ªÆà’|VF(Q‘ODQuîâ€úÉzl ¿:`¸)Mƒ j+ìÌø;ÏÃ0ã©Ô4¥â8~ײ"Ãè2 +Ž Ó¼Íu÷¢8Žß²mÓ4?6ÍĶÇAŸi¾ç8V’\VW—öý8I,Ã(F‘ª!ÐB†NG˜ É4‰æÆ¦½n±Š hÁCβɽO?•ª\z©û‹_ôôôضmg2Å‹/NÝv[üÉ'!ÕÚ+¯¹*öCB0EÑŒá!žaî;&O‘m@æ‡] ØxLn‰ìaøL¾'Í,ñ•‘(&…x___ooï¶›7çÏ9§þœsÔ¸qÑ~d?ÿ|fÑ"sóæM‡V?fÌÞûÛÊ8^ÙÔÔÛÛÛ^.Cñj‘Z‡h©<:iG¡’`qXô¨0êeÍE—Ùr›<àEQ>Ÿ¯¯¯ß¸q#3µÒCW\ûòQ§«s ¦2²UæÝ°94ÔØÔÌ=€ð¨¢ðdd¯1›Ÿç1Ø7r„±ößBzg…’lrŒføàå—_îîîæ%¨ñÓdÛH {7!7”u©Mþ ^Ï8›| Lsá5e¶k:Oª)K~`YV­éê›æsahÔ„ÚR©8ŽÃè ÃÕ:qÙ¶ýi’|$)ÛVqlYÖÛ–U­eŽQ%$èÀEè¡x}@M¦5¨ð_Ø™0üÈ@–üA¨ ÙlÖ4ÍÊâÅ©«®*ß{o梋BÓ,Ýpƒwá…ª³“ Ž ÷¡ÀâL%˜u˜jmmÝ´iS?/„fÆ<ñÒ‘ c–¨)¤ €$ÃOLN;ð’ΘQš[¢$†Z6lØÐÕÙÙþÅÑäßz˽æU©˜¾¯”»r¥éû>à€’ë¹t)GCvBK©˜Äñžž QaÐ’I˜rrפ†„×Çòj„|ŒiPQ‡C~=Pð88{€˜^ü6!ÎÄƒØ Ù³„xÑÕgÞ¬æÚ®IX°è:kÚ"7NàPÊßÈ‘3œ_X ÜKÔ‹sÝuÕóÏ-˹ä’pófœÇã “„­Ÿ„i'>ðP‘H(Ç'æ<Àž’À‡4<YÒÕjµR©xž'zhÒ&ÁÜ"4R¥îÑ„VAÖ÷}?›Í²¤…¼¯þþþB¡°Ì²&Ýw_yî\;—3öÛ/Žãöööþþþj¥FÑ÷>þX¢fWSV,zŠlа#) ¨ É¢ Ælâ%Ä×ÉÜeáõI{_ÖOOO¿|¨¬(é‚ÈC–$΃ÛH#Ø;\Ñð?Ïím䪑¤QÏáícV ‘|æN S$°¡x@ÉrSC•æGŽœaûâ\ˆ¦êz88Ê.Õz´¦¢"hiò`& —ÞAüç?ÿÙ°aC©T’( ‘ENL›J8c9„*ÉžÒéô¸óÎ;Ï›7oÑ¢EŒç0–ˆåÎZE¾ñÌ @?\49„ÑñD ÒРã©„ êÞ‰cÔÏDîÅ^½ZÍ›”JÉš5øt‰€›…ä"Ó€_!/ÁH#úÞaŸ$„*¨láç‡* Á!AM¾ƒ_ÂÞ-(òwUJ Â’˜ÈªÊiíyÞK'.ùÆ7¦N:eÊ”¯ýë•JeÞ¼yŸþyWWWÝÝÝH°Ìš$9¨Æ–e•J%ñ£cME"Üô °±Â!“Vð·x#`Ä1´«M\)R*BæÁL9ÔU ~jÓZìiÂU2d2´f*Óh±pï#Gΰkš¢>/¼r-µ5Sëj"ceNKua™‚c?ì1§ÒoÌÀQ$©O™¡¢ò}¿µµÕ4Í®®.|¬= ‚J4M IßéP/¶oá.+w8[çˆÌÒa¨`8IW$-ÅŪ _âÉH<Ê„Ö.è­ÜûUdÜÀH=ÒCh€rð>f~ø¡†m‹VRÔ7 D1“£ ¸mšÖ5Ëæk4fL@ÖO‘DoxÝÊÅ à?pKb¥TfÊ‘p«MðTq$  Êd2¶mK3Iž˜+…BA^Šã8­­­ÝÝÝ7nÒ36º5B=Qµl6›J¥„€æÒHËȉ…j†ñ+æ³ “@«\Qæb†ªù Á‡çO(’ð ¶kâªLE.+«ˆX!ýœä®1™ÄŒA;Øa`C¾ÏȤ&×4rä ?U/›ƒ:±è£’À…3è5v5–Fùd.Ë ¸Ha'£ÈÎÀ™ j,î¾Hø›[#®1ýA†×‚ TDëʾ״@4J` yÅbQö†63/C!²úwˆ¢G …LÓ0Œ#‚@RÐ…¶Ýgš-…Â]Žó0©TáiHaIv5X›’¥®°µHôÅ0× F¨Äe nEg,†Oñº1dBKÈOv󄵈i4#0Ô$I‘î2]ÙSõõõp£n†–Xm 6€æ02 :ü_̈g;jÓ4!Ñ(ﯩ©©®®nÓ¦MB¢Å:vjJÉ,•`ûȤ­± ÓWÐC”áT‘ÇN¡7£­fôåbøBý¤/ìC¦rj­ÏóäPÁjÆ ®V«2ÙËÑ£ÿ$Ž¢(Œã7,ëÛÞ+I>¶í8Iâ8NF»m‡ƒX“QP¦t#ú° +l`VA…:LŽB¿”´QžàÃ0”PX(øüãÑNžä`Œì^YB¬hÇÒ|j°è­ð²@­äÙ28áÙXnÝã-3³Q*•J6›ÕÖâxµZíïïÏår|äÈvZGÖ\§¤YÙlÖ¶m±Õò,Ì9­aÝØðËš„ø¿<»ÆÞ"¨òyö-«¯œìFŠ€åÇQÚ‰® –3‘G”`¼Áµ|Ž“EŒÊ‚÷)Tµ´vz gf?rÞpÒÁÌK¸°wS©T*•J˜í’­ˆäV¸Ü„D#â‚Z0OQƒSáýŒv£+C#/;{j1D–c¹\ÆMA9{Šž‘ġ̀tORZdjòMIçëêêdŽrÙí‚•ÉçEíJ]ç87çrM§_°í•Šl¬ÀòY,ßË(™ÆðAÝ€‚õöÙ̆C 8ÒFùWJà[ ïE¹…ººº©S§Nš4IÙ•G>Ëzr”…SD,E,üÝt:-É\9Ï*3á®>À8{ÐbDÌå0­‘ú¤(dí5¬Æb±X*•ðúªÕjµZ…™¨â—J%©`„P.—åû’hCvH^¤ÿ½½½Åb9Š@¯ Hðõ}¿¯¯¥•ðÒË×^ öpÏ÷ÍžÝÿÄÑž{ÜŽãØoj’ï;ï<à{ö“ŸçÌ©Ü|3*ŒÊìÙ…'Ÿ ?\‘,R¶ŠG«jJHØÝRfŠ9/fÆóùŽ˜¾pÄvÀ‚a‹EöýÞÎÞKØkÀ5-•‘#g8 © :kbBªÙ´iRo®ÇuÁ)…if÷3[I‘î:Ç Q¸RdºÌ‹F¢-T˜ÐÚ况®jFè| –bæ.#Î ø2)Hî‹÷€\ uHp”Ø OI͇ UIÿ –'É–µãÔ©‡vØN;íôoǹÔó®®Té¥5²ã«Ñrø„“¢oCŽŠ ¸÷Î\ YéNDÀäQƒ¶àû~¥RY³fͦM›˜àÇ…&óCyDœ" u)FL‡ÃÆàñO0ȈX3X–è±3ì ¡<Ž€œÈËÄ%ÿ:9Ž …‚8ªÉewwwCZß4MÁèä;ó’³Sú=ÜUû†g؉¥åÏœÙóÒKþá‡ãòJ<=óÌôg?þ±jlÄ3¯Üw_ҧŸ^¹ôR#Ÿ÷§OóùÔi§y?Üt“eYå[nIŸwž{ê©ñ´iþ®»ÊQ½¼ª-xNép¶¡dÄîáˆËq¼)YPîRƒúµïûÒÁe¢ ~°~¸!¤}Ôîìv?Œ§Î°6¨¬ID°Þ3úÀ@Ï$;C é~|´Ì0fʲ33ß IDAT s£ù#@ÜBÒ*½VÛP¬ †ÙcR¯ìs°°P§kù5…€€2‹õqÑ´Wä¸ÎDR¦áI.ÌÍs²| ¥TbYõ£F}ôÑÓ¦M{ÿý÷ï¸ãŽâÚµY¢´j‡´`1ˆƒiÓ…ƒ† n,,©¬ÿ èƒk>5XÌ$£vâì‹I#íàÁ”Ÿ6ˆŠN›.Œª)R ’ó1érqyÊö_lB‚7ŽR Ŧ,Aš„%Ò%}éîî–­b€±T*­^½º··W®Z {ɯ€¨¿¿_ŽU ªKa$ÏËRM¸K<òˆûÈ#ý¯¼‚JKÕÕ©T¼×^îŸÿut`Ö^¶,úÖ·Â04×­3â8Þ´IM™b|ûÛI]¹lY’$©³ÏŽr¹pÚ´¤XtÊe»^IzÇi–fÍÇÒ -°('ÓDÁÇÏ d%$”ZoXZ­x8ZšÖ"ö 7™ø1q|„$=üŒ5´ÝøøJ¡o–—ô¯Å)E fÜÍfÍ q b`ví¥Á^C«Ò5ðÞ`0š)[¼â™IÅ`+SáQ4Òý —šN§Yà–±uÍæÎÜÕj=yqã0îíí]½zõúõ둌›¦ÙÜÜlÛöºuë°‘¯±){W³V&Ã÷H«Á<â‡|xÓÃ@&d m€Q Íã"IÞ…ã×øWétZIÜ#?žÒÒ Î*8·e@^{<ÑÌzûÜg'S–%ÖZÜ(J‚ ,(+ļ‹Åbgg§‡À÷Ä`ÕÕÕ…aØÞÞ.¤mîÙÀ—“Á(L:ãUʧsÍÇqRWW>唤XL¦NMÝxcT( ¬ŠÍ›«--†a==–aØå²oš~K‹åºÆªUiY&ï°CQ±èP“g¹@øåòhäq„hæì2€„Á„Of¸h"ÐP8䈄eÏ]^HrÀÃóp„±6üG$R´ÉMþ#@yåÄ•„6AÂy‡Œ³ÏË(2Ú’‹ÜӸ夑P…©®åµ¡ÍsšgÍ´Ñ9á8qtPdà†Í&q„…´šVñÄ+˜ß(é^¶¬‰Q4º£ãÙgŸ}çw6oÞÜÙÙyuÞîºÂŽÅœ)Â.xÔª6[.—¥3Œç‰©LÖWd‹Éç™D1‰§Ú”¦̧µ"ö¡`±yA|ÓÒESÀšÆPíáï0c!lŒQìrõ†F„o芨ÑHQÓT*•ÞÞÞ|>× ¸pÊT™TfxƒÈ²€•"¾§§§··&¨!4Ç3ªˆõà.#Ø">[­s禾ø¢8{¶Êfbq ±qøá™t§ÿ©§×M¦NU…‚wë­ñ”)ÅsÏõÜ0 §»Û¼ñÆòu×™--ÕÖV¢". vJ½ÅnrÈ$xnø¤]ñ¢ý™ç©HLŠfœÕ`{lEc§€XXššÏl¶ü9r†íKB¹mÛ^M€}mÛ]VÔ¶|–àMË&D³š{ LtÆòâî«5ËzESE O_â"y¢Y0Ž ˜ÅajƒxG8Nx;ijcIèú ÁO6?¢†,€&7âû¾2Œ6Û®šæ½•Ê©ëÖ7lðÂðÞjÕI’wL3Šã 6?a”Ÿ§ÊAEç c@Ú¸ 0"N½±ÅNç({&± â¸ÀëÚðÛîÉoXãd‹‘…!€‰†º€6 Ú#$ÌLÙ:R)…Q!”éXc–;íTÃÔìžg¿ø9ø¾¿yófß÷ëêê`±#ϧR©À%ä+©TJ€Ç1ÿžKpÙ>.ÃâÁ<œ,<üs´ˆŒjÕþì3×óʦi™¦YÚUÈÕ”ò}? “$LÓ¬<õ”5c†ª 0àNQ—ƒâ·r³žç =è·üAJ=¤t¸N©ùÔeGj!ωç%(¦¡B‹Ý¡qýñ¸$±9r†¿ÄáÆ©†§3Š¢)Þsüb¾2ÓÞ2™ s°´ÑKE“ÌŠfQ+ÀMGÕÄÖ €À/8Nœ‡:`J«†âP4°Æ–µœÇÚÃAólQ¤´Øü,¾Àš†Ž)¥¶Š¢—l{Y*õA¿ì°«²Œ¥ãd \snYW«Õ®®®B¡Ï祵#‹6—Ë¥R)PªPù¥R)þ) ===‚µBA‡ÉÜpÁAÁŠ]Àµ87Q õà¼÷žÌ1‘e%+VäÇš:µ; ÍeËì÷ß?^)e/_n†a¸fMüµ¯•:*Éf½?¶,Ëü÷¿“cŽQQd—JI{;2 Õ‚õI'‰­Í¹ ÛP­³ÈÍZ–Fe4‹ì1j¢jº8Œa`®ƒ¡Wü—ýˆÆ!Б#gЗT!Œƒk#ÙS5!?fÓââi/t¶¿²ç! šä¹˜VaÁ1f*ÃJ–ë>Û4  „l,2Ž2 š+2–Vƒ=xÄZîònÌÆY%1­äVØ„<õmYV[-°í a˜(u™ã Üf’L6Œ5©ÔGŽcÕfV˜Å 5T“  K L‰M6¡OÃê8,ß)A–]ï$V`”´å?IEfXB,XÇ19!Þ⥰¤ ÎÉc˜^%¯•ùi¬<‹¸,寢TíöÛñdrþsé'?‰âؽýö¨«Ë7N`»ÔÕWû'Ÿ¬ #sÛmf›~e³Ñž{&î]wùa˜úÂsÎQ¶íÌk­^SÄÇa #T~ȧťœ²L*aª4æ±8OÒ¹¸Fdc ·CYå$ë–BeœÇ ˜†ê³4ä%'·, },hzjíI>Õø=»®ˆ,׬û^ó È8rmÖÕ„µØ}G^†ç£vä($à*r,ˆfá÷ø¾¿~ýúl6Ë\íáý9r1ëQ¨šm;RxÄzÌ3ï];Ö‹Õ„Ç…Ì¨Š»/¬|ŽÃ Í(eXÏMÓæœ cßÀUäPáž“Ü,æIyÆi` Öÿ—ýÃ|þ€TÄ9Ÿäì2‹ÐhŽ),—«HŸ2û8çp°i8äPX@”ׄ uZME©:Ò~þš k¾ ñc³NÎ\‰ÈjÀ·MþE‹Y–U.—A•dLuäÈÎBGDàAN =Êlf VÕ‰‘kczÁ X6¦"P.°Ì À#Pd†Èu h»\] CÃ¥‚ˆ"gl `èPŽA¨â9$N€b¸ßƒ-‡Ò±O2_ç, Ýþav¦a·4Û`ò†šlh³ I³šæAwÄJviDXÑ:jŠÄ“Xi¥*Ÿ7ì‰izž9~¼¥gÃÃ0¸ðºŸýÌèꊾùM öò4*³fåO,ô¥œ•e†{H,WN8Íð‰quÖèÃ`,nóQý:š#…#Eì¡j~ŒöãØ½‰û2„…`í¿Xc£= UìÌp‹%ƒTéëä&Â>AÆ;ätàÈ"ù•œNù@}©M a¸â)q|dµEуŽãºnC’œW,~+Šþcš—d³ýÙ¬ì™ú(:·«ë•Ê*Û¾<›mK’“äúÞÞD©{ž­œ‹€%Ê[Ó´Iä—@'†õßxñÈÄ>ÏNa‘à<çÕ0M˶Aµè¿üòºþ°tÑEjãÆèÍ7}¥*—]–9î¸Ê¥—&­­æ‡&óæõ¿òŠ@–5AKKù¢‹r¿úU\.ǵ¸Æ“!æÈÍ  ©7r& á¢JI ðͰáTÄ£`ÜHǔƷĉ%3ÀM"–Æ v`ÕñTŠüB™f‹¢(ÚgŸêè^}uÒÓÃ~ê@h¥'IQ¥ÓiEÂNàòqÇ ŸÊ²hYkÏB4³å^0º Ùóâ0ÐÆ:³*°ý™a/ÌRcÐdGªœÿ×_Œ8ñø$–³J˜ÇÉI½ ‚ÁîPv”¤À•dùHMÏ•ý$í’ÿ¿Vä΂ä‘õăþ±üÕù¾ÿ½0´k´[½”NÚØxg&3«vÍI’[,~â8‡55=œNŸ]*%Ir]GÇ¡‡64êûãÃpBµú¥i~§©éŒºº¿ÖŒ7†Z:² «fa¶;á9æÐ9S°¿àß̵(€Øvš‰a€ÎP5‘G  I2`©ÂFךî€FBÉÅ}fÍÆ”Ë&¬ ¾¢BÆSª¦iY–iÞgÄ…‚œ%xȉRÞé§Ç…‚aY©tÚ2ŒôsÏå>¸þàƒUÆq\Þm·þ3ϬûùÏãrò'ZËZ;H_ì uÐðXR¸.H}¬y#1N(j,Â&OÒqœL&“ÉdxªúC¼­˜ÑŽR’‘1qÊš\€œm’“EävXê±ÇüÓO››e/Ct 2K€1 “! ŒK@×uE%åiH&ÔÜÜ\__/· ò›/hÂB¨QpñlÕróë°ÍåFv‹´FÖ3SKcŒí†Gªœac¬¡¦ÖpyÄ À8˜ìÅin$w5Mf!ûÃÔ‹¢O¶qZ;s„BB*ùKvÂÆäNùþ9¹ÜO|_…¡lûW Ã4 3 ôýg\W*ŒaU iJY–õ@.÷‡B!Qj‰m÷Úv«i.UÊ4ÍŸ”˦Óhcס\@Ô@^ÌÝTŠ,ÅÍ!›{Áå€ ²¹/÷rÔÁ'æ'Ÿ ¨ÝœrJ¼Ë.ö²eÞƒ2›68õÔxêTsÉçÁƒ Hššü‹/6M3u÷ÝÑêÕ ~TÏ9ǹùf4‡)ß »ÝvQƒÃ1º’4a4ѼÂ)\>íy±äJJ9Žã[–" GEØ©išVKKiï½'ž0M3QªZ­ú'žè>ø ìƒ-¤›»‰,b—0N‰8ÃÀ ªn¡V`34и‘6áDÇ»9˜Wü²ƒ"/}˜ïÀLÎ(Š‚ï|Gí²‹ûÇ?ÚIby^ùœsÌ?þÑ ÉTEŠÌlp²â,‘eìyžØÿh]:•JÅó<‘µÅß ± 10ㆰ4ž=ÚH\`#Ê]I¾H)•4]ó‘*gxær¶°-Ï<3Úc¼ãòu×,¨Ìš…L!•J…¿úUé…äÁá‡Û¶m¿}qÁ‚â‚ñ¶Û°3/¼°þüÒ 7ÈI&p°¤-’ðj´`Áa5À׋©lŒly÷ ¯$1k¶óþZ(ÌvÝw=$–yéôžaølw÷5ýý²ˆ÷©VŸñ¼ºî„8ÎÖbÓï …Ïr¹—³YM© ÝWÖ e€Ý@ä™_FÔþJ ­×ŠH¥Ó¥^(ÜtS´Í6ÁhƌIJ¬9sb̜߯‰ùðÊÌ™A¥bÏkº® J©àúëݧŸ¶çέ\xaäyòdünO:i(o[ß•ôY 0Ë%dHÔàh‹P.m0®Äë9r"PV*•Â0Lýö·¥ûîë}§Çüè£xâDÿw¿³mÛ›5«<{vqÁcÓ&sÉ’¤§'5ª¸`AÿüùésÏUJÅIRùÛßúž¾üâ‹ñá‡3½ .mÒ ­ V#\) IΘtŽm a¬Ip”5ŸÍfE›•XÑ`Gy¡éëh-%`ª8Y¸9ßq'ï¾{ö¡‡2¦éy^jÑ"çñÇËù‹´—á'ÃV›|`£Ž ðT*I¡€n ¨ž¶¯ N;ò`ƒÖq.u}}½ö^Ø@R<×P]õÆ'¬>MÏ‘*gÐycÛ¶1qbßÃ'&¸§žšišþUWO?»ä’êA•>Ú™3g@TãöÛS÷Þ[5ŒÊŒÊu]×í¹í¶Ìôé†açÍËvXtì±öŠîí·ûî[ýì‹/f›N Àƒ2M\t´L TÔUReChKb«fL ‰²8ŽÓ˜$U«÷æóŸ)åÔÀ.Ó4Ûlûªúz×¶wïëûvµjšæŽAð~]]E?«Tì0lH¥N-_7Œ·,KÕö¼füŽ¢y´ü˜\ÞPeýÌ— ª:cjð £RÊ,—³Gåÿò—8ùªãÇ_|atvš Úë×oáòmµ•ñÎ;ª³3þ׿œ£(Š·ßÞz÷]Ó4ƒK/U¶mFù÷¿wŸ{.üŸÿA’ËͶ€Ðˆò@¿Bò}éÍ ¥3…L>1=cFþñ²eΉ'FQ¤ÂÐ1MU.{7ßFòÉ' 'ž(£@aÄqlßq‡û÷¿J%•Jbšé_ÿÚtœïË(J¨í/·ƒˆÐ&CdÌ„3Zèà!õÆ+FÕÆlëëë;ì°ñãÇ¿ôÒKŸþ9{¥³/€&irH¶!l~ž‰Æà$>Ò™0‹ò}?jn.sLúškŒÞÞÆ¦¦$Iz{{ÝåË£'Ÿ ®¸"uÍ5¸YÃ02™Œ ärhÛhvãòg©É˜}–#ÏK°Dú*•BpR (¯=Z ;á" §&Û¡Ø’ãMòU©Tøí9ì ëÖ¥¿õ­Ê•WŠòŠÌšAàu”¹n3¾iÛ’Ûš¦©âØÚeµÓNæ­·*ÏSŽcT«ö’$±ŸzÊ4Íêᇭ/FÖi;±få(fû0 hÃ; à£g«Éš Ôql$‰œ.ÓÃpe*µ¤†qI M§ÓSâ¸딊-KÉâ®=e{ì†é0|-“q¾i–ïÀmx0g Bv’$áw¿ë,X0мmjŠ?<Šc{þ|»«k‹;}ssåC’8¶ž{Îèé‘O¬z¨û ‰B&ãw\¼ë®æªU[(rˆQ*?n}úé˜åCü\ÎèëS>jþ¹õæ›þŒ†aÄcÇÆq¬&O6Â0imEÅ~ÀìP€ @ ö$……ž‚pŒv;oþ$IÌ p\Æ£~¥JÔ0MC©¨&Ï—Ë’‰ „›$IÊ外‰Û¶íW«Ê÷M×Udñã>aÁóÁÜŒÄSH¼H0•!†‹[AÁ<,k)IíÂó•x8¬Ð/Øä ¿2­Ã$ ˜ гÄmmÞßÿvZüè£A¡ ?mZ²ï¾™«¯N¨Ü„œ¶*Œ>¥v³×âÖ=X08#åš!ÈÄ|>–ä'{{{Y ‰å0¸¡ZÈ‹ 1€ªÞìºÍï}äÈf` Ë4ãZònFpöÙΛo&[meØvüÚkÈPÂ0¬wœ3{¶µæOT®»Î0ŒdâÄ-\Þ\.r]U­"©ÑðYžúDåðP2(‹òÒ¢'ƒÚÜo`VžÇÇT*;išï8μtú—åòsÛn;¾ZÝkõêt1ŽŸ÷¼T*u.w]¹œ(õ‰eu*åûþ´ ¨+-Ó\jY÷¥R8,YKßá‹gF©eYþ‘Gûíùüór¿ÕsÏ5×­K’¤|î¹î%—ˆ~pb¥sα7lHâ8¸à‚ÜÕW—öÚ+úþ÷Ã#ŽpvÚIQñì³Í¾¾Øqª3g¦Þ~[µµ)¥ÌLÆ»ä’pß}££¶—,‘H˜¦ò¼Ô¯zh|øáÆ_¤þüçhÆŒ8ŽÓ4ÇŽ-Ÿp‚5w®³jU¥†˜³H"?sœ¦PÒDRŒG?ƒ)é 5€ÇpfxYC£AS€e>=”÷X÷OÜÄ™'¦ï#fiºMìˆÊ# Bð˜ó°y¬¤P(¼øâ‹ŽãôõõA`(wSåSƒí6ªÕª¬ssði¡I²òlƒ¹x±™J•Ï8#¹öZU*ùßû^¸í¶™ë¯×$°˜ÁÄa "ø³”"g, „ ” Ô‚¨iXž•o ƒ]vX É – ²&ÄBs¬Šd†ò/FŽœa8o¶ :äÁ¥ Ã[¸Ð½ÿþâÑG»îšzë-EFÁþûg/½Ôtœ(ŠR÷ߟì¼sÇÁ ›âÎî½wyútë©§X ´…Ñ[Éà@s3’ÙYØü²ªxþÀ¿j:¸žçý˲–ÔôÖ:lÛ¶íW<¯··w‘i¶Ö×7FQg,5MǶŸJ§—+¥”Z®Tw}`—Ö×Ë/ï«ÁJ’¢“‰drô£Ð!·?þX­_í½7œ`ÿýÓDZ³ÛnýW¦ï·_îˆ#|ß7wÜÑ4M{Õ*õØcá·¾µÅ•`útï ƒT&S¹òÊ(›Mdàô¥—âÞÞ8Ž“Zš90–8~R*!#Vå²}Ï=aÓ§GuuÁi§EF¼Ãþo›úÓŸXæK Å’‹Ä„ ° ÈIHv‰Ü#‡hè£QŒI:" )$§È¸q’ál1§[¢)’EÆÍÈž–~ñЫ«°Ø„" %I¨ïr& œ ±%Žã®®.ÔˆÑX´ìÂ{âÁ– *ÝÌØÔ¶³ ÏBu‹?ø êìì»î:û¡‡ŒwtïºË¬ÄñÛ‘¢?·R©-æÔ©!‡üM>„Ô`¡B@‚¬O(åˆöé)Å7%!CzÁ8n;1àÁW2¢$ý_DZÐH³fðG‘µlYEI-rÉ@V†Ñ6Û+Wn ;Öþàƒ$IT±Çqpúéf¹l<ú(ë ð&« gÍct¡1·Ïãc€ XRâ‰2§©j‹›MS†P¿6)µÉ¶aÖ™øþÇQdwvš¦Ù- ²R‘ë¦ù‘ç ˜!A_ü[DA!qI8(ݪU¼nÖ˜”ˆ÷(5<%ÀžèÉÉÈu]Ìv0Ø… yô…¨„Ø-·‚ó q¬bLDb%Dq°˜QÓÈp ®L}ž6…´—XÊŒÄV± FJÎn°(&iã«\É…ah._î^yepæ™é«®J¢HÕ”Èù~YšÇTT„])œ÷ ¯‰ý¨UŠšj'l6#@Þ)»^vñ p‚ 8e²V;H eŽ‹$DàÃiG„oÜjê^ì~ôQ¸Ûn•™3Í–{Ù2Çq¢éÓ¥SºãŽÔg€Büìg•™3ý“N²Þ}×0 kåÊ`ôèêí¹§»x1¦©ABÃ&wkh;"a<gÔâÜç*y%v5ˆ1ÄwÛÁßÏKñÀ%¸b-¬'þ·ñ¨Qf±X7mZxñŘ3Oâ83Fµµe:¨ò»ß1×пñÆÜAeÎ=78õÔhܸ8ŽTétpÖYæ¨QÎ=÷†{¬iš©ûîSñÙgGŽcýýï–e¥.¸À?óÌÊg¤®½Ö*•ÂJÅ/•TºÏ?oÖÐ0”¥RIb‚ ž0ÒxšÙÁ’Ò²l4Ki Ö’Ê@ÐiúÈOËå²"žàðÃåw²TXøLÁ‚«ÈTÚ`7…c& `nJ{žÇ¶œYcÞó+ àicËòÛ4-WçþñPê&ƒxLÄGIJf oIŽ 2³µÕ½ì²¸V—3ÀÀZ½x¿1§DT~áí³ù\´«å®­4¨°fÐÙ’ù0EÒ8UÆyÃkž;©È„ðvlÛ–!Vvx‚ö(FAGªœaÖ¸éÍŸ¯Ö­Pvš3ÇÿîwI“¬?4^{-1ŒÄ²dl%uóÍ*Š’Zä]}øýï'I’ºîº(Ь×_7|?ž2ÅÛ°Á|æ™(Ðêµ9pìaxª9Iƒ;Äæ(j°G2z ܺgj¦4uy8‡"äa„ë‚ñX L<\ÊMF´Áãd·›As|µt;Žc£µÕ|è¡„Txã86,ËøòK÷‰'”i*jT€dÛ¶0¬_´/Njqл÷Þërѵ×&Âa½õV)^¨>==Vê†H-?¯‹µ€)  ¶|eð·,<Šî)–â601¾A,nD'IâŸsNEÕO´~˜'g5ñ:v BÙe:‘¡³¶&çAoamM’åÛX04'¬q!^óˆ8oœia’:Š"ÁÄøgâr‡5¼…·‰³–%þÀÍc;ôØY!¤ 0¬ÉÍžZŠä ®ª;‚ 0j #E–a˜5-HU‹¶œJ¬Åy溮AÚø°àr~30ÿö=À  i9/\·ch–he#þJ‚) :2¾ÃkšD¾‰#¡ò³ŸÅë×;Ï?ÌœYùþ÷9sP\²<+Ó™4ékßXZ³JÞ |r 6Œ¾Ã‡Ô¶íL&#Ï_V”#xæT~³ gÐÒÅ:‘‚[×gN l‡¤½!w Ù.¤´òˆÝoÙ‡MÙ ’üAoŠíšä70‘û†78нÔ† § ö¸x. pþeFSØF’S™‘#g˜9VmRi;úÀLÎh(gØç" hžáײ°#ª×uëëë¿óïLŸ>}õêÕO>ùägŸ}†¬ŸßÒì~$·#€ˆìUòVÛ¶ 'œ`…¡ýØcbóS.—S·ÜâŸwž:öXã™g˜ŒÀ9µ"7Í^o“oP1šZ«%¸` Z õ6T(SœEbo ÞájÌ÷}ÑaãSžlã6¸¦0¦É°ÐjùÍ`rsTr2Æù¿PåÑy?ì`Âf ¬[#Û cÎL:WCô sú‹lFôÛ䙣^ļ‘Ì91²:rä ?¼ðšÓdÊÈs5oè%xžìÁµ-Î NŸ’ ¥Æb·`£ÊâcP^ vëá^‚teÅP¸žà’%IbV«¶Rç”Ëç55}’͆a8.I.ïìì¯É¼õf ¶žÌµCJËnTýýýlj‚ò nlÀýR©”ŒèK\ÃyÆš¬à=yd¦ì …´Žu'“$Éd2ì;1´4UÙ…ÅÜ;Aà³m{Ô¨Qûì³Ïn»íÖÔÔôþûï/]º™&s®$-`X°ª´y-³¯ æ•Rét$1>Ÿ¸Ãó.VÞÂ-qÆu%A ïB‚ëB‚ŠÂC²¼)ÀWE¤"9d˜?ñL Êœë8³!ÚÆmWÌác ’!Mnºàãx%sGŠ9oìÇí7~˜Lcã(ÖÐÓŽR–Y˜œ§¤9Œ “ŠƒS3ÙâÖZ*•’°#U5ØX1’qÔÆÚp6XÖMÞåäÉ“Óé4v¦4B£8Y‘õ›V±Ÿ×I²eãagºµ™s‰/²C ¸¬Ñê™Å/®V«³4¾¬0©ÚÚÚÚÛÛ-ËÊårr`Œñ¯}}'55}9~üÖ[o=nܸ®TêÒ††o†áDšpÜlj9þ d7AxE<…&áùùó³b¾v/#`Æž_àWÄü½-qljþò£¹Y‘  ¤ e‘$D IùÔ¹iuOOÏâÅ‹?ùä“E‹­^½Zôÿ9C—À*㙨œ ÓŒÓ]YrPC‰ãØ~ä‘P©ð„Š¥Roo¯aÁ¯~¥¾üÒyúi­ÛÄÃÌ.ÁrÕrj|.‹©«!c§ÊÊkfhÚÔšxhh'ʼnHB ¨¸X«/TVB}}½´4~A  æžP¦A¡ 830.Á´ñ.XóPÕÖ,…„Ǻ8€7p¯H‘|œ¦Fo×¾ñãe’ÞÑÉó0H${°X,bá±uÚB_Y_ŽT9ì1ů¤Q¥R‰Ýslj&Mª^y¥yýõ©e˘h„=‰þ9Ú3@‡Øˆ Ÿ"1sD:ùBT ñTÇjæ"ç\ëÀN1J¢”Ú.ŠŠ'þàØc÷Ûo¿U«VÝsÏ=7nÌÇqj0%‰‘±¡ÃFüMè£àÓå¼a (OÁ‹Eîñâh‘vì*‚†¥w¦ØÂ€Ë4ͤ¾>8ûlïŸÿìýÃì+¯tÖ¬áÊY6Ó®84³Zj)I™ñ»çÌ™óÆo”J¥Í›7#ó…×+m3Èm4]Êå2€¶˜7‡¡ûðÃåŸý¬tôÑæ3Ïø3g68O=…‘Å !#Ó½PkÏeƒ JÆœ)°”hÝëojjjhhÈçóZu£=gæ‘$ƒ'3@äq¤Òˆ¤RÆ!7í‡ýÁ€¡#+Ǽ€ô½ðˆøâU6ëŸzª³x±ùî»é /LN;-Ú}wÌ4¸G*hSËϰú/§ÿŒðÄqÜÛÛ»aÆÎÎNÔ7 ÷±ê‰¬»Ì²ÊÚDÈ€,˜ïo«¾õÖ ©É?í4£TrçÎåüÔ5¨d2hƒ$šÍ–P i@#³cyÅ£G7nœdhé¡„’4‚s/ˆîhpÛ¬¡bÖàkÑO§Óuuu’ÔfDΤ”"¥cG.ÖAŸ‘uõm¯1—SÏ,«!· [^èÓÙo”!æIÃ-©ç\_òY(ëP†`©E‘jÐÄÂÞ”“ º;ˆNÃå\0Råè£9BÔÁ@»H²Ì––Ê '¤fÏ6[[¿þµò“Ÿ(ÇqÞ}WúuÌbDæ‚-J¤B7à‡ˆþ6Ç/ÞÌÌ'ÖD£¹Í€lQ‹ã8ÿšJðå—¯½öÚúõëW­ZÕÖÖv@¥òE*µ+³Ë ã˜Hån0†NX—¸ÎUS_fuùÙå}÷5}ßzï=°-°bIn¹#æÚ¶]¹è"ë•W¬7Þ°'èíuï¿¿:c††ñ§Ÿ" –.4\M·PÅj¿Õ$ðLΠȹãðlë˜a¬Sun2)rýBÃLî4sçáGØÏ=§¨ÒÅ+Ð:O€VðXX>™c:7HÀQ>&I’Íf÷ÜsÏb±X©TÚÛÛ2‚7êZðÔ9v3hÉî;ÚeŠ#7G©ÁÓT˜Yá¼ 4w"°ãÃKÈDSþ`àü„å¥Ëžâ×Äöì$Â8“z°B˜›®g1¨Ž[¸6`XvJåf3êÚ‘#g˜Ïœ(@€Â¸ qÓéþk®I_rI¶«+ÓÜÜÖÖ–yøáêùçW»ºŒ%Kdµ§ÏC0’bðøïp6+ó<€2žGSƒ% P™i¾pÈéx·³¬þðJ>ÿdG‡zó͇—-+‹;‹êìüó¨Q…Ú|ƒÁ.Ž,&Ï‘82ÚŠ|NY;O;›Í¶´´$»ïþÉ.»D®ktu+V MÐXv´(IK%¼–þÏÿqçÏ7ß|³.Ÿß~ûí[[[Û[[­‡.]v™{á…q?Ã0æº9qüKN€Z7«•Al–Êlc政bÅ0Úåàz ©®Yóæ5¹6\< !É3ðÝÅßbÚ—ÏT¹µt:ÍG,DYäî6mÚÔÓÓ#Ç*•]#ë.ãÜObI:Íù‡iX>ë­T*qÖÅÎñÀ1U†“Ic™ƒVÀsþ,sÉʇLMdò'i8Ég ˆ¹Õ îï²Ñ5˜Ù8cÀ¾ãÂsà4Jí8lëðø-OY±(ÿÀÈ‘3ü½Œmco`< MW˲ú®½Ö½á£µ5¬ÉOÙ½½Æý÷/»,}òÉÈ#°^Ys*X‚(ÿ=ÏK¥RÅbâ‰L”"‡\-”Jˆ\¬¡‹Î–/Ôüæ øZµúÃ|þؾ¾oܨ”úÌuÏnnVJ¹jr.ò¸» Œç oŒ€Ž)Bè-‚†êGȨQ£ö?çœwØá\°bÅŠÞ›n2o¸Á]±˜!Íq4g<$Iû7¿©Üw_¶£Ãëê7n\gggÒØX9å÷aèäó…BÅ>Œ.}evÂTf4·äÓS©xeŒe±ªÙ«È[@— B5l›„Ž3ø¹u@É-<ÿÈëGÒsþyl|>_*•d‡K1TZårù³Ï>Ã, ä\Á„´®j_@¢û­™•må¾àUÃ\^fPÒcŠœf˜4VøÁ8•y2I~L~9sâÙ‘YšÛH¸ <% 4T<€äÍ áG§›Úd³¨¥PÖÌC5šÉ·¬2rä 'c Œ0­YÞ½wî¹åßÿ>®¯_} K2¥zÌ1îï~';[”¡€ò, YF$Ô<ýÇÄ_Ï’ç‡x¤}Œ ñœº ]÷Að¿Qdšæ}™Œüó£úû-Ëz½–ðr-Âî¶ØçuuucÇŽíêêêììd†7Š!8dˆHx‘C³D~m÷{<’$GÜu×û}}I’¤ùËÊå—Góç«·ßÆŒ«ÏÉ¥:Žƒ¸°%”Ïšå_xa×üù¯¾újɲÊ?ý©õæ›îâÅ&Ov]wÍš5<胡ôcåûØäl–…áyE6t`±ãmjð?R© €È+¶åL‚;.ªçŽ”Yn<îš`&—³.ÈèÉ‹@ÓQ~!ðO TìËð€¤8îLæåš$I.—®{Ksþ'Ñ5+ª¢E/ÍÔb±U”b¹&n¬Ê-3Av™¼M&Æ:vŇú˜9¨ìFÓWN8@m²[x¸‡Áj­!'ÝGˆ‰°^5.U³@a¬ ó[²è-"Î 7„§ŸEQôúëö6ÛT~ðã¬õëãÁs¬b‰¾³SÀÖú½òM´‹é`,IÌr OdM„NTèP {ÜqwArX»Eö†P*0IÎ3F`%É>oll,‹¨Z˜£9yàLB&ÈåÚ@\8ðÀ®vhºþú…01 ÷æ›ý“OVQ¤.ÔüxX’:yÚN¡`ÜsOÿ‰'z…Bå?°^xÁzãJ·µµÉæÄèxÇåsÏÍÜy§Y­Ê»+ß|³²mwölëµ×w›¦YºõÖ$IÜGµÞ|Ó0ŒðÀ«Ç¯Â0{Þy` Ûl“ì±Gê©§x‚É/M´A¦x bà Ç,QÌ=&}pŸ€•op›x)솓ŒwmfµVdEêa³K¬svaÎ\­[çÝõ¬³ÔO8o¾)ÝÝþþþîînÙÌÕj5<øàòÂ…Á¬YF ¬«Ü}·yûíî-·„Ó¦ES§"î¹'õ·¿yû[<}z²ýöÑÎ;‡’½ãï¾ûJwÜ1@xõÙ{Ó0;«*í?Ó9§Î©J*#ƒ!€$(´Ê¨À H2¼í„­‚­8144à ¨h@@QP[@! 2ˆD†’ÌSMg~žçÿaÕùå®]~í®¾®Õ/L*ç<ÃÞ{­u¯{Ý÷”æÝw燦L?í ÚóÑ5ƒÆ6$+š*kÍ \£…53ÿÚP½¾VÍx8¹XÉ–ˆ è¥šr EÙ 1 †s9sŽuZa4 WV#jïLÔibU½^7I!»YÛ)¶¼8Çqww7ºDö^oÉnœNx”^¡íû‡hžê~Q鞤­v¼Õl6›6B‡ª¡Â-8¡Ðë—&˜1E>Á2?„Ì©çÉxÈùïùY·Î=ñ„;ì°]2¾;ñDwâ‰îÎ;$ïÇ×ë¿éë»¯ÑøX†y¾[~¹ÙüíààµÚlç‚ 88ÏßjÝ·qã¿}ùË¥sÎ)Ÿ{n´i“6BùQØš: aG[jÞ>TÔØcªh† \†> ëè³ÑNô¤gmÏ6²»äŒT'À€J³`` iµ/5mC ìÈ`GéÜ;#&Ùè6B¦0«Õî+®¨æ3ýûî»sçÎ,ËÒ·¾µuöÙ®¹¦Ð™‘‚fÔON@(ÅÊÃô¡Í›‹ŸýlqáBŽlµþŒ¢(™?â 'D/¼Ì•Μ¯_ßîî.Üzk²lý€tß}£µkƒI“Jßþv¾lYZ(d…B¶paºhQº÷Þv ý÷ÜSºàã·@ž7:@‚@pÈžÓ‚*ïoñÒnÉ%MP ªk†"HªùÙÚ.†ñ)Mä)Ùí)™ „=y¥{©1‡Ý2¾ÈîQpcOg ÈÛ&4Yól+m¡‘²¿À¾ §3¸jb7W ¹+I‡C÷@iTùê⣽Öm©T²EËl c õzæã«öê @C̆ZªZ­ yP¡íkpìz½^­VU‹vXûïüY²ÄÝwŸ«VwýÉóÏ»ÇwιÓNs§Ÿî:*ëWT«Ç”JQÝ[«ý¡«ëøv{kžŸÚÓ³–ýÛÐп”Jok4Î*—Ó0¼¶Z=äsŸ{NFˆGs”µœwbƒa™‘m'Õ+S‘[=tA¼P;tOÍΕ¶%Å€®Ãœ&²ž°TÍ…¼Iä•|Å*'&Q—PI(%š î¤üÝNÌ6S—¸Î(;,KÊ(ÌUj̰ vµÎÊ€±¨á·A`ߥ¸Þj•¿ûÝ쨣‚·¾µpóÍv¢'O×áS'ƒ½œw¦TcXGA½PæXsñ+¯”.»Ìí¶[°ï¾#z°‹—.»,Ÿ93Ûchݺâ¯~÷÷‡†œsíNÈ>8¼þzs¶,ž‚Rh¼yæoúx9ÐᒨЎúèpâÐpR uäÔtAí/‰1¤/œežÛ1æÞh½Î´*›$–E w‘_³RÕ³MÓ´À“Iæqéÿz)HZÊåò„  ôØCú]\³öZl÷Z)< Œ*ÈÉ`WZ®c¢t‘ì4>Ñhl'"ŠQ^Ó,À 줣˜JaW9ÿs“8nÞ<·l™ûÂ\©Ä¹ÿÅ®®G]ì—¦aÅÎ…ív­f3ïhà÷9w}~¼Õš;GäX_0*¨|M„_ÛjµÊå2jÁ(©Ð8õ:@Þà½ÂwTîžW;ÜÆØÿd‘œn:“DÒ-§ÊÙÐoÀF8^­`Ò¦¨ •Úçxò¯`sí:ý7oN~ðƒÐ970Ð̲$Ï…ÜS± m½ª:B^^ÊωƒòÁ)ê¾ ?lã–Nh¸Î¹èÁŸà\yãFwÏ=Õ4 Î>;Ûwßæ?ÿs~æ™AOO>qbáO*<òò^ÎN$Ž*•¨“ޤYtw»$ÉÕk5+•ìVÃ8Œì[*¹$‰Ó4o4ìÔK;³ÝΤPþˆ¾V’ñÑȾZÿyò?€HXÛ¾=\¸0úÞ÷’ï|'ŽãüÿüŸìÝïz¨Õé^À×P*A6cF¸Ï>ƒ×\SyÛÛ†ãî;ß9pÑEAÄwÝUøå/ókð…ÂW^1ø¬tæ™aooãóŸovX°eKqΜä•Wò7¿¹1gN+Âûïo¿=ô*H{æ–ôxa&I³M#O²4\É Ìiz½hÅÓ ö:±mö(‘:@¦’Ì6èC#ʸjVi•æ:zá&s`x£)’kªT*U«UÄ=b”QÛ”Ƽý-5J€­®Í3U=ì°ÃJ¥Ò¼yól„À’¯]§LàG¢HÇÖˆeÑÂGÐ4ÔS¦w2=j[CÓÇñ*çöçK_rÏ<ウiúvûžrÙ98×6ý>4<‚ ÃkO/—­ ÛNÓ\hÍÞ 1ÂìÍêq”Al ãu,uSªv2ôÎ`»yŽp̺:ux|M%pÛ'Ðx¤ÃP‚ÓF Ÿ¶t0…ûò´Ü cÔ[ú(Fç_°ª¼Ù#ý5'òõ÷šV¼ÊxRTY–%¿ùMœe-çòå²Úæ;Þá6l¨œvZzÐA­‹/Ž>ó™¡ë®›xÚii³Ù¸é¦ðÀK‹Áæàf5›FÆkhé >s¯‡§ÓÁ*´¡~eÔ.”à:õ ³yØZ·“qšf)cBç™M"ESºÙõzÝifÙhQ©Ê Ê>U*Q)qÕie"¸Ùl>ñÄaÚt3@Ú0ÓnÔ8(?Y}fH²N1€¥1’ê‡ÎP­VcðcXûÿÙ±Ã}øÃÃÿ}ÛmoIÓSšÍûâØeÙ÷²,û}5Âðiç>ÚjÝ^­VÃðŽb1MÓoÄñw —¦/EÑËywW÷òÖ=ïzhÚ%¼´ÛnõþÐA÷7/¾˜¦i,ec†åÿøÁ[nÉ /v+W*å݉}†.!úÌ6hÏ(õÃu¤”K‰NŒÆ!ºwöîjµÅ_AA©8›Êv(ÓRÑ! fO?M¿Ýk›![­VÑæÁkÉ>^ΫÛ8è¹B{8ôÿø+6Bäpûöí Q轩À î,{ûÆz½®©¤¶‚”7„ëœ+—Ë¥RippÐÂ-¾1T’þÿSÈùõ¯wý÷ܹ<¡Ry9Šž.Bç~[*=Ÿçyž¯s®•ç¯:÷ƒJ¥ÜhÄåòº8ŽZ­Gò|]äYÖW(ôeYÖIî,…ñÁ¼ WIYž­‹IIBa!¹c{(®­°€n~ý·J¼QpOgܺºº¦L™²}ûv¼èÁôâú=ù)þvW‚š'ÒOháy“êjo‰ ð›"Óé?¸×Þ®ò”#@ެ.P¤7ãFªdÂýc‚Ê> õ0/çW³Ù4-o<„²éÓ[gŸÌ™ÓüÊWŠ—\ö÷Û?)Ÿzjæ\žçƒsæô|æ3íN˰ʹÊÙg—®¾:Ȳƹçf»ïž½ü2ý lÎ=÷O%qáÀDÒ H—N•ª¬Ú üµ[ÖÌZò¶Ÿö´‡kˆv»_i6o¢U6¥”¦wÖë{fÙ¯“äÖ(B·Ë¹ŸT«S³ì…ÂqÜÎóJšžÓj-*—ööÖëõöÐÐuƒƒoi·Ÿ,®,2±!ØE|ï ÙdK*"‡|œƒW¥\[ ̬m«þOè8h¸R× ÏWÔŒêwM­ ¤¢®Fe[iöF&Nœh4z¯š9ÿý?3gîúï׿^ÿf Ï·Ú> ÃdI­VEÛ£hk©”¶ZqgÐrešº04X¨Vxë³¥lûœ³T*yj›š9’a‘‰@à,¦Þ×øaÕ·Êš/à ‡#©–ê¡Ù?™8q"¤„³t2?Ðr¹¬‰ÒèQjÕ³!Ljù¯· ñƒ V«yú"0>uóHTêÑ‹v\ Ã@FÃN î1)ç‡cµZ5fNÒ Ã)SÚFÆkµŠ&-fϘÑzé¥$²$IººTª‡JÅZÐä<„V¥05V‹æÌ¤Ì4'òbúBµð²I€—¤ o,×Û,]šát Ñ‹#Ø+ߘÉz­Öl6+ÎÕÃð×Î]˜¦3òÜ\!Ò4=²Ý¾|âÄÕYvIžï‘ç ;é!`WÜn_[­þ°\^”çNö…½‹®®.ë®ë¤³×À#>Ù{jæ-CFõâ^YIþK áþò-ÈÀ«ñkLÛ¼2&ÓíCt‹y±<äŒÑO½>õùçßah²uÚlæ\3MWÅñêK’ǽöÚkòäÉ/¿üòöíÛU¿Äœæ4!}6•$óŠ6)€`[¥RihhÈÉH)L-ªÀsí°oQbdÌíÂÌÇÅN;ŽupL×ç…µ0"ÏU2¨V¹ëzµ†@0ÛH1 ‰¦"ŠRÚÓÛDÐÁ‰ì£êsëYiS7R=“è.Ôh4h°“õ8L';ôÐæ?X˜;·ñ/ÿ’ÜqGÜqµWFSʉ)Ž•¡:eåDsÓ9ç^{-ïœDI–ÅkÖØ#JÓ4ïë Ã0ã®8Î^}ÕÞŠµ²³þþpp°-çH¸jÕpV!M~uyP}q k‹Èß=å72#]ðLÖU]P$5椦ºU·\ƒ­VOÇQ´çž{.\½ºÕjÝ\«]]*½lïQf®Ã,sæ¶Þ!¿)Û^R«ý:ÏuªZôÞ=ÃcµAQA%j oÊ”)FÃ$h1ÍB$Šë{·_°BPÓ8´ˆtþTÇ$ø+k Û‡ðo½í¯€›)Â6rÆègóæ)W\q\…aø™ÁÁRž;ç~ÇkÂð YöDž;I<_€r¹’Jh3·«ÂÐç´JóŠÅ,ËÚ'ž˜}tåÒK³,Ë’¤uÞyÑ72Û¯l tñà;OéN¥µ¡BoÀž½ëx±èÁhÉQeïšoç[ìuóÊX†ö­¤^^¨Gzôlâ yó ” ƒ,GJ–Q‰ {òÖ6ß¶m›ýÛ …³Z­f»]tnYt9wZü6IîMÓ÷Õëí,+Äñªç; üsÁa~ Ëo4‚ øs?Ý™Yfi)¦­Õ¼‡¾zî·Ú£ õEH%þìóáøÐ!cX‚œÌÞb©£{½ìMkÅE/a¨Ž>º2ÇCÎØü, ÃÅaxV–]:yrÓ¹j­vl«UÉóß$Éîæ<Í V®\¹nÝ:›9Ðð`•>Y¡24 =ðzĘ}‡µX¡ªeÊA y¡gz†Ñ¤ú…x*ÅÚZWèI·¥œZãkiþn 7Î2%èôµÎL8= ÛH’Üéh·2vø4}ÂÝ•á¦tmö¶‚¥|#š„ Ã0=þøüCÊ·Þ:cÆŒ4M×ßí˜cê—_^¸òJ=žÌ8‹Þ˜úNŽÖµTE¤ÅBÛ@iÙ¤iGP[Œœò44dÜbN@>™!je¬y7¢Pƒ©Ä¥Ñ>˜=m@pâ%7âFΪ3¼š¯¨1æäûìUæ0v½£Ù³ÓSOM®½v‚sguÖ† î»ï¾Ö£æS¦4.¸ xóÍä¿´…ìŸwuuÙÓ$C=t¼ÉŽ0ƒ@y,Dà~}­Ô‹Ü8~Età1··Ìº…®Æ‰fÏăs€,`„.Õõ‚É¢<.¬}¥Ð×:ÉÐ! ¢yž?Ç®3í†áü$11 ‚Zš>](„yžeÙCÚÝužÕÒ0 ;5Áâ xÉûìZ’<òÈ#/¼ðB½^Ïßö¶öGL¸í65â ‚€c e(¿oœF%|ÛEZ,÷=Œ÷Ú+Øw_›a]‘èðÆY hÍ)[ׇ|àQ*#¤¤r‚©&ýj¦»tÆ™—«2Ï\¼½JUæ-n©õœŽEó¨á”þ]M².¥xÐØ`8_Ÿ$sT0 ôßjYÌ@¹‚Å $PaULÚu¼ ËŠ?Ib{Y‡®®®žžÞ»:¦+†¡Ôf¨Ç•¤ÿWüì¶Ûn§žzêI'dR¯¼òJZ¯»ÁAÝ:ò¢s”z Ò˜%‘k³=Ô‘uÅýÕKc¸ŸÜÑÛð€8åiù¯¥:•–ç…Le¦ aöõõµZ­eË–ÙØ3‰›}£9V+X6§ù5Vz-êO æ)3ZhÑN˜¥çdž±’w•¥ƒ®`ƒÌ!)'õï*ö+Îf_Ÿ=ô+v~ìc/~ó›I’4N<1=ôÐäÒK³Ž¤¥ÿžy ¡ÈuTy˜£²[°Ã”…DF’Z­–›<¹ùÏÿœåyòÓŸfkײl8FÕþ@¥MèÍx§’)Œ¯Jk^±H²¯aUÍÖH·xUâSñ=’À¯1Š õ_k8Ü?•²o‘O)0Ê/åIªL€•ºl1SêV ÏÊ‚q"˦ö†ºøYê¨s{ÚYá¥Ó†á‡°‡3mÚ´<°Ñh,^¼ØþÐ*N%%*»’‡i…Ž*×W9cI’†»mÛ¶ÁÁÁaÚkÖ ¶°ÙÆ)‹xrØ) Öà8c’”Ëå=öØcÒ¤I¶d‘{QÐŒÁcˆ¿š®*8C˜á_yÕ;‡ÃN‡@U?ÍŽ•Z­688¸víÚµk×2 4 .h’NßK¨h;QU©`…’àˆÕ4@ª45Ó²jÛìù–ªP›šÒ«SÑÓnðÆz†tî¿?zòÉ¡+¯¬w\{ÿý“o›cW¥õµoäUxÞiný01Ð6»³?©}å+у&øCóâ‹ÍtÃXi.Å j¤H&e¢f#˜rˆÓQÎ5ïÓ ½Ù˜=‡v†xÅÞˆ±÷(¨ùôµ¹èõÆ4”ò] ~l´i­Ö:cUY–Ýjý¬V»«Z-tâ·E ãZ­Ÿ ÝU­²‰¾Q«ý¸¿ÿ£ɲ7äù]µÚÏjµ×I§f‰´úh?{ÞQjcA×Pm¿é¶&I’$É^{íuÌ1ÇÌš5Ë$½¤A­³Hƒ°Mñ4vÇ«œ±ùy¤XÚ²åØ_]µê|ðÁ‡Ö­»upð’R©+MÛ#M6-8©º”â¿æÚ'Ðþv†S§N}÷»ßýÜsÏ=óÌ3L_ë6ÖóÔ¡Í£0HÄ©ªÈ•ý-„ »¨d:«SK.k‡"ÛŽ0‡~©Tb ZË&Žf},Ð †€Ž4RŒÂÃŽˆñžós»ž[—òñTØ p•a7u]Jbvýp†ñÔSιÆ;ß™\w]d.5®ªbýÚC˜¡¦4ÈÅúg:âG«€¹ô §§uÍ5•›oN,¸êªú­·–/º(°#’ªÂb](oøŸ7‘0¯üÊGú”jF@õ©3:N´ÒÎÏ.·=Ñv˲̜`ˆdª-Ä~%:§Ó§·>õ©Â÷¾7iÇŽ°}ûö 6´¿ô¥¡K/­üàáêÕ\†kŒX£Ê,îÄ%˜ª$‚~¨¡Š6úz •…GToɉ:#Ø-+áÞ‰¨½Peu3‚bžÿß®®·…á;šÍ}³,wî¹(z.I^Êók:DJ 8Ý/—T*3›ÍË;åæê0üJ©ô†4Ý/^íTÆívûÕ0üz”e3Òôe¾ ‚íέNÓzšƒ {- s“Ć÷¨Í0xÑô¤Å?4¼ªˆ³%Ïó×^{mÆ 겨‚­=h„*>«tÁñ¹œ±üÙ¯ÕÚ+IOœø±üàä,sÎÝǯ†áYíöß:X².^46©÷U g´]®¯­^½Z'´ñãM„ ‹Éd ç G”dZ(ök®£Ý¤c4”´ª\gæÎ˜DÃsÞ¢…ÚØq¬á¨v1‚lŠ<¨º'&ûœ¢î)·ã†–-[¶iÓ¦<ÏÛ_ûZá‡? ž>!\uMæ[ ;é‹ÓƒÒ.x#¶àÑŠîêê:âˆ#ÞøÆ7Þ}÷ݯ¾úê.Ÿ©çÔÅB&¦Ëž|*ºü©{›‚Zg³n+yþî4½ \ÞØÛ»×”)[¶lùS£ñÉbñߪU7ÒÆÍ‰Z g´W¨ÍK’yIòèàफ़‹¢hn¡p>V«ÝE÷‡a_TÒt+¾ãø¶bñ›;e¯ÌOTyÿHöéô’½¬ÞÞÞ &ØH†2'GûeØ#ííím·Û¦dJzáèY”õ,ˆÆCÎÿìOW׆Ãÿƒ¥`Aà‚ ïœŒÃUçp¡\ %HóSO+ÕQVÃiÆ4—Ñy4j[UX¯,Cvã9·c? ©W§s˜¬ä|ÔQ;õ> ‡ïD˜¹T*aîDòEæHG”óQykóÖ“>{öê¹êVÂÞàÄ BB~%@zæ›vÖ˜.d\žgP~Uô*0ƒ;@Ž:–ïé6RÃÑç Ûµ£ŸO££F8´ûªÕj:,lYX³¦ñõ¯¯¿á†ú—¿œÆqõ–[’+¯Œ7lÈ;Ù:!þ:ü¨Pµ ±ÁDœbÎ~hhHÉ/°–,Y²iӦ͛7Û{þ¹X&'Ã: Âx¼òbtXÇÕ¢RA¼<Ï ÎíçÜÀë^÷¡3Î8ôÐC}ôÑûï¿ÿùíÛm4žïDS~™È7 `v–Jžç¯Ï²O7—–JÅbÑuº°yžÏn6?^­~¹X¤R™eOÇq#fdYžeVÉþ!¢ ¸XÔÍ©Ñ@~1 ¥rPOÛXâ’$‰»ž.ªš@À³œ¯§§Ç9gŠYôJ»ººl]¾ñ*gŒ´å,°M¥ ¸Lê^¬¬MÏúà`EÓ‰׉5 IDATa.÷Tè $ü¾ëȪë1ç:PŠÿhÆMŽC·#¿Í8@MAǾˆEoÍ€f³IwÚ“/äi(›Ñ âŸ×æ¶kS$Ž6€Nó謼RºY4ܨ« w㥱¤“UàN4?Ð8¡ÌUVRÖÑ:Ó9-ûeNyÊ2¥$Øt”ÁG%j»Žüh¶eKté¥[.¸ ¨Õân_{-è¼\šT Z.’ã8ËîÑ8Wèéóâì¹­\¹rÕªUD»#“ùb’»ØcQ†´Z¯Ú<ŠM*®pœÎÄPßë~´oÜ}÷Ýßüæ7Ïž={ݺu•Je``@µ-ÔWÍ#¡&¶Ò4¢Óó¡P(tww×jµjµêÄ––¦)ÙG¶¢ìñ¹É¢Ò4­9÷ç,Ûûå—|ðÁåË—ÿõ¯ݶmÛ{êõ»“dVškcÁ§,ámYöÛNµÎ¹_”JgdY±P¸¢Tj7»µÛ[£hM¡pwŸÒn‡Yöå®® Ë~P*ýs½~p–=Ÿ$%IäÜ5…ÂGšÍ ˾Z,ªÅåŽç1ª5 •å´iÓ†††ô¡9‘åv2L[N÷¦md“3WYk Þ^9cÿC!¬Ö&^º¤„«4Mkµi»Â>NTë•é¨Âû¼xmQ¸á™f¥3dЗj¿á:þÍ4º5É2"?N£pü¦¢ç€õ€3|'”©;³¸5Ž`øŽ]ò]T(,-¨ æÚ–o6ÿ–e‹ººò<¯^uUé²Ë²,ûI©”Ξ]ûú׃0ì¾ôÒUË–ýG±8|>¼ñÕË/Ïó¼û¢‹Òõë󢊿?ígx3ÿª`af´ï:b*vúÛN°”'¢sž$—*ù[Ðí!0^ª„oz61Œ AØS«@j²• Ã¯’Àö :A¥P§ q³ HÍk:B¢êÉ­jGMsž•6ÉtéÚëÆk@Çnô×À!•áÍÐ(UÅÙT¢‚8dÊJ°Öºa­ºXÀVm+=Ýþ¡ñìQ®×ë¤&öF.(µI>Ìg©¯¬äÖ˜Qû·ªšaéÔ06ЙxËs3f´?üá¼Ùtœ\}õ.Õ½÷N?ô¡ ÝÎfÏί½6Û¼9?è lÿý]%/¿œçyrçîo ‚ =ì°èÆá!¶ùÆu¢ËS $ÙRÆjÛ¨Ÿç›®Œ—X‡œ±Öxy:0¬š†Ä$”#¥‘S[yÔCÖ.gõÎ7ÐôSÓhœ`®…Î}+ŽçGÑûÆÐsîüRi]8ç.j6nµ^ Ã9QDo_»T_K&<“ϯ»6¢ Šê@4e€T”^Áƒr#­Þ”ÑGÙªµ#w30ëb 6XöW–Ëc‘†Îùe¥gO>Z)é<ŽÕ†ñ†Xí‘ÚË5dŸ»ãެJf­êaª¬ m±œ,±°ë±WƒO¥ª};±gU<ÆTr‚©¢¨Àbê¸ãª6摾Œæ¾ktAÖPžÝ‹ZU‹EËÉl‹ÅÉ“'×jµ¾¾>6NÏnÕþÊñ˲,N70ÜsOqÅŠ¾yó,ä„a˜å¹ëïþë¿â+y¤ôÍo¶:*Z¾¼ô‡? sLûØc‹óç»Ûn³Ócðg?›0y²«×ɇL_Jç‹ÉÏ@wyA”¤äµJ¢Q•kË甼g…¯ŠqŒ‡œ1‹:da¶ßl“kr¡þ.vjØµçœ kÙÄ\ãžÅzÆ©å¢ËX¢NÂ6:Û+MR«ÍȲu6íÆoãø¥,{Ÿsiµ~^,ÚŠ|C»}}½EAôeYÔn_“eŸêéqy~ÇÀÀiåò'›Í­q|^¡pxš^R­^[*¡jYårÙâÞ0àWöÜÜHwG2~­ö“]Ç[W‡lÔ4Ú>±¿µ‚ÃFAëmÌË"´S!ÙÓ¦¼SƒTÖ[ZùÊÅ0!M'§ Ÿ¡ïWË • ÀñÜSÐÚÒÆ²£9ë'ÛÚUž±‡ ³2½ÒÇ«_uÙ«l =1ã>XžD³AÙüÖ]`Qƒ €­Xåk(¨K±‚u!ÁcU(¹Q½ŽôÊѲëêêŠã¸»»ûõ¯ýêÕ«wìØáÑ>™Õ_«õ¥juйBìÑIMÓŸNqîŸÂpA__°dIÚ‰åÃï+IÂ;ã+vÉZw*Z‡îõ½÷–Þ÷¾4MUŠgBc±ÑXÂXº\.³¢”ª¾éˆY‹E¯ŠEÖeŠñ^ÎÿŠ*‡X¯§<3 –L©/˜G Xúð:ê¨Äb=µ!Œ‚ò1¢1O‡‡Qc[Ój½£»ûêZ#æ¦B! Ã3Úí‰yþ‚ôœój ©žul=ç\ÿÂ… ëõºj™ƒÚÖî ÃïÁò8Þ?ŠÞ•ei–åY¶Ñ¹Ï‹ŸNÓ0Mƒ… Ûg•Að·¿¥iš½þõa»í6m —.mžqFš¦á3ÏA½ür¶Ï>í³ÎrÓ¦…/½”eY¸dIíÔSsç‚Õ«ÓÁÁ sæ0÷^ƒy*‹@ê²£AšÇEÂaQ_»;¼;ûeã¿U•3n^° ÷Œª<-tä㸃K]àƒi~ªÃíjkÁÒÄSþÇ¥šþ*™úÉuLuÖr¿M»[­íïUteõêÕxà›Þô¦ &À”³[³B9OÖÞ‰â!ÌøNÚrPZ¶ ª †Wú$ 0J8&3Ð$š ù­6t:D;˜‡*ë‚N¶Çë=‚H•Ì…ÁƒÐúƒLÅu Ìø}ÅÈâ«•†àD;ÜÓŒP(I­pÃ㤳X®|å¶0Y¬]ÛêZdÏÙ¾Î^‡ñÊÜȹEÌ X£ú\A±ÕjYÐÕ¶ í¥ÑµÕ* ÿ¶ï¾ì¹ç'zzfÝr˹iêò<Èóä꫃ٳóýö+]uUÇÙ„ Yw·k4ÊßúV0{v¸ÿþÅ9sÚív|ß}Á«¯¶÷Ù'غ5ùÕ¯œs¥¯=Ÿ5+Üÿâ÷¿öõ)©ÒV4ùyhÄx¯`å5—2ñ<‡«äà¯rÆl(‡½Jv¬.{¾[$­¬U×7 ®º…Òq2LJòÎALQÅ‚£ˆ¦2SAç\ þKyž«Túpµú¦fó¯?œ—$óÃ0 ÃsjµƒÒt‰#v‘‡;·2 [*ÓhœÔn?R,Úö¶-mÖ«V­j6›Ó§Oïéé¤ÞR¤KeïiÓî¢ €Ž¬ê:L ûGqEU6T¸LŸ°6àÂ1ÓÎèŒ]N'P§²ô×É4ê• F£NÝù¼›R–VQ³9=+q—ÄúØ7 {ŠÕ蜀 ç0³©ñÃc²0þ¢mjkk9,¥' ZüÔµÄ-s]GŨ@<­Ã0ÌVF IõŸöҾϤ鷻»¿ùÍ9ñÄM›6=úè£ëõ«WÃð3Íæ÷ …dËwýõÃϹP. ‚ çáÚµÅoîµX¾xß}± [»¥Z-ÜpÃpN3RÆâF~Ú›5ö„:[Cñç@°Ç¥Ãì ¨Š s ‡œ1ÖÙœ={v³Ù\³f x‘‘ £W–‘&SÍê¶©'&9;§!§’º2ÿݳÌkz+ï3IGã=Ó/ WV«ÿ/v!ýUCC?Šã—èu@|µª ¬ì ìÃCSÉg „¯½öÚ¦M›”‘EÖIÓ[‹ô1I*aR0†bg·µ¦mGûÌ$Ôjõ¨0—m9Íí®¡¡S‚èØ ¨•†‘ºÑ‰QuE³O.•Jhµq¢ü+ÏpSEø¹`딨ü(I€}©:Š«2ÕJýb~–È­j¤FWšhgµ#Ç· xùjžFIAç@¥€ìj¡BhwðCËü¹I#@̘€Ò}doÖÚÝÝ݃ƒƒ;wî„dÈ‚cU/{'I’¨ÝÞ?Ë6÷ö~ðC:þøãò<ÿÝï~Wß¹sz]çùµ³BzêQ½Õ«P›ˆZ‹X5I¨P%³ÕAuÈ#–¦‚Ñ5çS~ö¤ÇCÎXörœs3fÌøÈG>R­VþóŸ¯[·ŽéÆD@ÛÑá`K“'ª4€Q˜ è1-mdí‹ÚB¡=`›ŸÅÍ(¥ÒWÐlæÀj·Û®PÈó|i¼5MgµZSœ{Þ¹ Žk6Ã¥axTž”e½aøD–¥Q´8ŠÞÓnÇQ´ ŠÒ4]EopîŒz}Zž/6òJ õ èvPÎ3cÈ Ú_˜=Ó |b 'J&F» …iö¼‚Ñ0Ú­ÞŒ’0K?.é¼7#Ïl#I4¹¿rXybúßj¯âFúS0Á£Ø‹ÇÿÖ{Ô;UA¤ÏÔuͼMYÙ­1ßc·Ì“שRŠ-«%óðŽuRrífé+Óºê`j».hWWWWW×ÀÀ€ue”›`P#kVÒEQ444¤r@ð†+o£™´ÛÛ·oߺuk__ßÖ­[±+ÍÒÔupTfªÔ€¾”Ee†'ÍÉ›U ކÕåÍûR.‰¢ÊÌŠª±ˆRx9c¬µÛíþþþ'Ÿ|²V«mÛ¶M'ÃÉ©u4DaÀ•EòÌr ÞzZ&*‡ã:æoÌÓ©C05²ç’I*ꜛEóÑn»<¿¡Tz»8÷b1rî0Œò|V«õZßßÝwJÏd^5¼âIƒÝQÐ!ro’}³mT‡£ꚲ̌¼™S‡XAmÏPÀ‰’êñð™ Ök K¯þÁÊ0Z™¾ŽŠhA†+Ç›&¡â½ó¥ÚSP‰Žª¤ ÖçõÒ5ãV¿ÊïÛ÷ÂS<Ð&Ñ PK=¢š‰53#•Ëå7½éM‡~ø’%Küqªs V;»F]]]h=8™¶¶ÀÖh4 8¥ÈsÎÝÇÇîØñ_÷ܳlÙ²þþþçŸ~j½¾[–=ÇQ‡"jE b»²««‹å¡­5Ò…p$èÍÉüH ü*@Äs#ßtVLßõ'Á>rƸÐÉó|Û¶m?ü°-D%ä #2ZŒL“ãI§‚IÔg‰¦ºÎv”€~hCa{ƒ…ΖvÎ=Çi–QŸý<І[ç‚ ¸+ ‹…B†w‹½½½a&[¶´ÛíõApc›”–bß›çA¡P,§MžÜßß?44d„µÀÜù"]ÓöM´†dÎ…#jŽ`R?{JF]«ÞÖ±HãÙwªõ‹—òÛó´ÚEX¹«´´“¬=gŽ` Lª+´BÏÚ‚×§AéYKb°Jà•¨V«1l4‡|]Kž(-í[–éÈ0‡ ±¡+>Gc2nã(ŠjµZÄUåæŸ°ìÔ¼ÎÖ­Šn¨º/* ÔÛÛûö·¿ýä“Ož1cÆÂ… ·lÙ¢'8¤; ÞæÅPïb¤t”éß‘‘XÛõOIòfs·E‹.}í5ë\>R­>†/A©TJ²Œ7£ð¼Õ½Q•æ£ß›§aÝuŒ™ `ö˜NÝ ~^9¥mH’†1ËïǃÒá³,°„–#X$Ù΄Kæ!ÚðP|i yRZ¯þµ}b®áï$õ•JeòäÉdA"¢K„@™V J‡³V'B±XÜk¯½¦Nj9`ÜÓ“ÏžÝwÛmé~û ßËî»×î¾{Çܹ«?þñAçœs•JeÒ¤IÙî»ïüÅ/úæÍ«^x¡«TìÓJ3fì¸ë®|êÔ,ËÜÔ©;o¸¡ÿá‡wΙ“Ošɳ¶-‹·úÆ6¹r`èªJ˜V°Ê‚ÙVÔÕǃcÔ©6 È0óp¼‡6¢T\’3—Ýy½ööCÛ›,Ø®'I’)S¦üñÇ{l¥RQö¶}…!0µíoKÝe%/>#ÑäUh{I‹'µ‡°oפJ÷‚Ù¨DÕ©óÔõíˆG‚S7šZ€Ö¶Z­;w>ûì³óçÏŸ?þàà ¯„IF¼ À6ÁÕº8ž»v†Óòüâry~,Y¿~ÙÆkûû/,•î,•&:gROÞ”U»Ýã¸þ®w \rI=I w«Æ•ýš9hŸfDÇ<K:•ø§šåÊ ·%æF$éõøúc(=0^å8x^¤fPι®®.ê\U×ýÌ’åoko9 ˆ­ çÐÒ÷°5Ó¤%pÔQG½éMozê©§-ZäFZ ¸Á,¡çÒȈ*@;çÖ­[gåB³Ù öÙ§ñïÿžvXêœá,Í«®ê¹üò|ùòÖ?þczÀ¥^Øwß}[­Öó—_^ú¢õëë—^Ú8úèòÃg{ìQ=çœÖA%…B+ ‡Ž:ªrûí“–.í?ùäÁ}¨û»ßÕñúœ¡–ŠrVêð µqîxö´­M­º ÖÜR'`åòUtÒ®JÝÇUø~"iȨx™»iü³Az¥fÙÿ6mÚÁÜßßÿÌ3Ïp¬Ð)1 Ȫ«Â9â-0(½^MqÔ [I5„vΕJ%ëê£îC½È^°[°MiÜðhhóÜtìÆÛq¡Â“t2™«€ž0ÖjµçŸþ¥—^êëë3ÌÖ;OuAˆgwÛ½ØÈ°É ²xìK_NÓãÓôóívs“$w.m·?ßhaØÊó¸Ø.Õ6©s®þ®w-XÐøøÇ wÞ×j¶Î=eE–4@…‘›§±?±÷nÇŽkº–ˆè¼Î(ƒ4‘Õ?W–ÊxÈ›‡£&%­¯Î…„CƒšŠ‡OSaZ[:h“0—Îщˆ'͆1³É“'¿îu¯›:uª ¦yÀ ¶[U`MéRöEõzÝ(:ùçòå]çž[ûþ÷ ½ Hç̉{,Z° ãÍ›7âÇI˰šoxC9M‹K–Ôëõ Ë*÷Þ›çy6y²û‡èzàjîž9G¶i¨ìyÖ©ø‡ë(F“+óЉgš6äUª™M˨Îð2‰¢‚ÿúž]…Òà÷ÚZÞÜÊ1$IÒÓÓ³cÇŽ{î¹§V« áÑÉw¡‰ ÙɉÞwo'ox)5Ýií èì*Ø—Е…¯©•'™¡rÞê^Ó^Gw– ïCt¶/j4®3dJL%]=3¤^òÊ$$¨·ïÓÅâÓÒ‡#Àï—§a:û೩S‹×^EQ+ ëŸÿ|åÚki@ê Ÿ'´ 3‹r#­â\`d–“G[`t]ioÞ„²¾Êñ3–}y䃸ÀQCiWó{¯¦@Œs‰gZ nã+:ñ¸Tbå‚ ^yå•Í›7€N£‡©¶°¶_ûv£1K§ás‹‚à’Ri¸ ï õo~³rÍ5­#Ìò'žØºuk–e¥9sj×]—÷ôd{í}ñ‹é¤I­“On¹¥9gNÜh;Gɶ+®˜ðÝïÆ/¿vª@}DŒCr§vâ{†xjbÆ^üQ´¢íXÄx#v¢Ñ½÷š9˜À?a¥ëq£L<×±<à@‡A„D *J4ú!ÚÙïW*•Ù³g÷õõ­Zµ ­UåD¨wÑ'›Í¿„áó˜}]­öÆ<ŸÇ×wlííußÇ· ív{¿Fã;iꜻ`âÄ•izZ­v^ç™ßS(ü P°à½ŠÓ_™,äI$4V¤ªù‚…FmÉ`íãÙy¨ùœ†JÚ$iÃÕPep9ÝHÅŽ`U…áôWƒ¥¨WwêéGìâæuVÖÛÿð‡'N,‹C=Öß×7øõ¯þýߕ٭TSº>€V38Ai2Ú Og~Õ“6-8Áhä<äŒe¡c@9G¿E [djbÁá„¢Sî‚°$̙믑ĩÀ¡Nçolݯ_¿~Û¶mFú„§ÏÆW±?´ž3fûävûÌRiß øX»}L»íœ›†¿(6FÑ«ÕáßÑnAåÒKÃÅ‹Ý[ßÚêí-w.5\º´|Î9Yž7.º(Ïó¾»îê¹ôÒz¶K¥tæÌ襗ÒÉ“·_vÙ䫯6ovR +ÑÒæ¿õ±0h¢j¡Ì=`m ä kM £ðÓ¦ ö÷÷+^ ®*È^±û¬€Q6š¤D +m„&åV¨#€b}FcéÒ¥ÖÃãc½¢°P(ÌÈó÷õí™e+•’R©Ùl~¾ÑøE¿Eÿ”çç´Zwñ†¯k6ÿ3 _L’³ÓôõúÝ…ÂwÓô}ÝÝι›Î-÷Ìó»ÂðžR)‚v'èêì Ìf*x† Kk ÄǵœUÇL;í!›½îºÖåÌ» 45ÑôÄX`öU W=Å5{ \TP±"Dð” ·K ûCÜG”nº©'tROOÏý÷ßßÿä“Áž{¦Ÿýl|ë­Zš+›‘hdÂ*×ñð¶·`š¤êk[[‹6ÅoÕ¨¨Ã4øJ^¡?N³¨É$¹ôB ¢éÏè–I“ZÏꌅbÍôÀM²…æ6z0ÀâvVB+RU ­ÓL#Tš¦é î“çwÔë(—ß¹ûîoïí½/ŠîYÍ: IDAT¬Õv« c…’eYÐh€5qí£‚ i6#C®,úô§¾ð…tŸ}êúPžçýçœSùýï‹;wÚB7×B›ëTª®rÐU#‹¡ÚÎvûü!:¸ mÛÆn6›Õju´G¸w|ëœs‹ô†¢èaê:J3Êï`€¾½ šZ®©WžŠG°ü êÔìÅX‚öWgÙ;zzþKºƒß.ž‰¢ÓÚí)Y¶ZôI Î5ƒ EYÄ&$“çÓSëõ‹‹E»ý·æùéíöQiÚ”;U7`GxbµPá´%RSšñX|4½7e“Œ´ëx5*"@+EiÄ*iè©Û!d̰ÔlÛïx8}õØåžxqøÈ#Í~4ëéY²dÉ‚ vîÜ™Ÿy¦›1#ºå # ÷MG2QUFÄÖ°-¶b±8uêT`a¶ýšBvÈốïÆ %%õ8 ãUÎØüàÔd|J8¬*"IQ `V:©wf©Ã•F(,fýLÚ*e¨¢jy  " Ë»õ²9 ß“¦—Mœ¸zï½ß8mÚÚµkÿ¼~ýEaø>¶_–9TýúÓÆÇ>æ’$èï/¼ôR»Ph|à¥ýÈuw×¾øEÇnÇŽdÉ’Ò½÷Ú÷þò—]W_më{ð£mœp‚s®ôÐCÉcáÄ€î:šÌÖhr È®¾J<ÕÈþÂ¡Ž¡((1Z÷#ŒsW*Þ5%©ò˜xõšädµ^e£Ã@uºèjdI|"¯7‘à°C>¶·?%Â,«‰ ƒ„8Žƒv;k·›Íæ^yþá<ßEµZ_-ŸŒã,ËzÓtÏRRìt|îûûû!ê„“Îc(æÆ£vqZmú’}Ža‰3rv ´5b#ˆyíXêAF‡¿ª?¹Î¸5=þ€ÝÃa×éêw#§ŽuvOå1ì7U‡Ê9÷Ž<ÿÑ^{½ÿ½ï=ôÐC}ôÑ_ÿú×Úºõªz}0Šâ8®ÜpC¸~}ÛX¼óç§Û··“$\¿>[¿>H’èÉ'³,‹x ߸1M’èµ×‚õëƒÎÖíþÚ×â4M»ö³Öî»ÇqAòÚk¹è\¶3`Ú@ ïÕ¨¡ŽZ}`¡¦S2À‰Æÿ¡¾á¸!Ô¾7L2›"Ä‹ÁÔÂR ‚%‡¶­6r¢ºX̨êsP*³]üã4MÃ$q_Èóüö0ü§jõ<¦Ã7]–užÞŽ øE±¸¶PxhçίÁ¢$y! ƒ 8&MOi·ïïеsSEmNm „˜&(¥$7“Œ›ÐK ¼P²;ïHIwü­N©Õž•&ÙhlËó_ ®S.«K“U]cÕsÓÎ6Ä ; íQ˜i·NƒÚòæ¡!C€“‚,{Å-AdªßzŸ}zµ©úÈqˆ{Š*þÆ·("MÓð©§‚f38æ˜Òw¾Ón6Ñ ,+®T*…BaóæÍ<ñ:ä4{×:Û§Kbãë©Ð”ý-$‹1,tÆCŽs#¥º(EÕq€×É–Ó4Ç8±IoÔPTÓIi z\â ¦\U5™ÆB†SeWlëÒæ¥–·Í`u€QeþÜnw¿øâ‚ ¶oßþÔSO­Y³æÐzý©(:0Mmâ9/;iºG<EAœÜj=˜$O‡á‘YöÆ<ïÍó'œk´Z‹¢6Y–ý%в,[îÜ!iú‘V«'Ëž‹c OU€iHtBµ³¢½+@ÊG- 5ÇWij¶’*²«´òãUéê#}5{h:¥«ï›¢ãÕ+ÈÂ<Ø)+\QD%A(D1lûÜsî¹çl!)ýâ¨Q´E%ÇreL§õW5[»6s˶°ÊÀµÅ8ÓÐd`ÏŽ ÞŒ=°¦„w³eâZÁP]Vú+üi¸çBÚc§žŠOS…é€éÓí$å4mÎVRtkÙiü·]ÞOÃðŽ… ¿ýãÿqúôÕ«WÏÚ°áÚþþO ÿÑÁë5î*ÇÆL<=MÛ­áé©_£#`m*µÓ¹Z¯7æuð:´ôM€ Úª«·ÎNiId7e¼#µúV”2® ù(8£´7€r=<†’¶ßY|¬bŒöÒmŽ˜ÃÈÔ9÷û(Ú”$&£ww’œ–¦»Ásqü§(rÎuå¹sîç…™ÆÔ,ûk?ÇA|³X<£Ùl·Û×–ËAÌ ‚, ÈóÕyþ@DŸib°5O’’¥à,xoŒZ…¥eu5IáàZ¦â` |ô–ÜHÙVµ=ÄX¶JçÁ |[æ@Âí(§<å‹T’GÌ,lÀÞ<ÏM>J–”Ö¬ãJÜ8 È'Ó6ª›§JEÊ€=';¬ý¯¨r @[Bª¢oNµëÑV¶ {Ѐ%ʼnƒ2âcªŠ¡G¤Uâ4•&ÀçIé’BÃöO^‰ãO§éû-ú„sívûqç>Ç«ãØ5V °¾u¾ÏþÞ6”Ð|ËÊR± VË[‚ÔÌ”;Òý9:ä0XùCí¨h'ƒ–ìCåÑRî0m§Z×:Ô©û“¹Ëf•²Ç® ?”êÑ'Rz y;ÍíX·ó—÷«Õ ×Ñù§Â^P,â1so±È?̲ìž$±Éªß—J–+tÅqÇ[›Íï'Ij8[DQôh>ǃƒƒq£áåLz“gL ”Z*•ôÄÔg¢’z:=C#S§£hhYâ¥N¨l3] ,g¦áFúV)7-ºÃþÒ”…ÃÁz;åU`ÞüÈí´(WC…«=ºçƒ9¡¬æIÚôRµhBÞ(£üi7‹=2®$=ö?êN¯'êæë)G KÖë8Õs«·›ÚµéD›-`Pެ‡lB {ÕÉœ_­\8€u[|A¬Œ¢û††ŒA˜eï‚ãòܵZ‹GúøB‰1(ù&ûºÆÌ™¥µkíFLEØ4ÊÔåÌ®V›Ä0˜ßÖ‡–fŸ_,9Í-¢s6sŽS»€Ý«‰³Ÿdûí·ß!‡²lÙ²E‹Á 2©ï +šF ¥@Zh;ìX oàr@ðxŒjÅL{1èRêEkËÒ"¥š©–d庫««P(LŸ>ýàƒ^°`Á¦M›xÂÿ”‹aß G™QÂg “î& §dd^‹éOðöyAN<“ì´IžamT> W´Çíüªµ®›Q'„<år„IVx•O4]Pµ;É8 ±mlQŠà­Ó<:“Ç"Ô}­&rTrv›H[‘¯(ÈLDdÝÌÙ¹=o^ðè£|T­VC›NõþRRúКë1îÀ<Š$˜¤n”eµëè~R7/Û§U*•Y³fmܸQ¹³ºoÝH[OÒC²iõuèW1ÝÏÈÐÔÕt›sÍÊ9Ë*•Š×‡„¤ÎÆmVG ÉöÕÖY4ó'ž$Õ0¥žÂex–m‘"X”Q …ÌôHÖ*QK¥z>•Þ< ÜÎPb†NÝjY™ÐkžSŽ0ìÄAQÇœè>8ñ4³•i>¿œæ:¬#ž–³úD z¥V„ʶP§¶x’•DYm­ANÓÚNåþƵ1þÑDU9ì°;8½Á'èp™»és*ŽÇêÐÞùÎìàƒ ×]×<ûìV|°V«yÐ<É»Ý2鼎%)ÜÄ •BŒÔ<6j)ÁvâÑbÛ)Cðӂܶm›§žÂ p¡›@U¡Ã%”sU`¢<£RXõŒâB/Î…(;cX5±SiÏåŒýôzÒ)ŸÕüi‹ÊÅ“CédÀ=l%ÁFJ™ò…2'º¼ð°9aj5 ÷Ðìd:ÕDb”Oi§*dbå…aØ:ôÐöG”n½5êïüãög?› …O>IŸYZP˜ÔóTéI´ÙuØÅ6Þ”:. 3ÜÈB§kùoµ§š©Õj+V¬Ð¾Ý „.¥íyE'•Ø&ë„ë4zP§Ú[X²¬¦È6µãACП(Fa%‘ˆh¡B>ðHÔNûÁDPŽT€\OùÑÝ$=¶/xûÞrROUe¸À²ÑøGøÑ¨`Ø€7ü¨£Kà½*:§2B€ÀÎÜOF]¬ûb©èNgPs¨NËLýjµÝ¨)T†Ž•B ªÁ}y²†«Ì J{XQåFªKŒ‡œ1`¬©ÀóßüðH; cT*årYM>´—h…ú¸° ÀîU÷S…âi¨q:ƒ')ïÕÎ*U«¼aþ9¼¬s•ä£ßਣÚï÷e—’$éî®W«Ñµ×ÖæÌɳ,üë_‰yÌ3Zè²³À -{ꦪršI¤ójš«ƒ±Z7x¤2ÄAÌÐG}HS'æ]°ãøýуPs'TÀXÝ¡ª6”Ô=0 8Ù ½Qé~Â}rÍìŸ?80`EîŒ,›’çιía¸. ]ž7;©RQc×ñØf¨EÕSÜÈAw“ç`z¨²Oh }Mj½AüS €W¯3[œª'à. –)Îè‘jØêFˆ°;À á³Ñwd!)•ÚNYø£1:Å'W?ä"Å42‚JjÚm›Â¸&œÉW-y2óvz‹ÅB¡P©TÊåòàààx•3ÆsOSoc%›1VF˹¥Šº‘^Ës<4Ïu;œˆ{zµB¯UI8šay›JK”JD:f+^ûCÚc ¡bÇSí¤“â¹s£0,—Ë“'O6OøÂüù­w½+ûË_t~E\vƒÐ´`»)ÿ LŒ‹WÅLf¿`”!jE>9VÌñLù²ô*Èå-¦!‡œjH#¤fÿÊzËÞ"¡(„ƒ§SžY}Ç"¢óïSÆYâBDW­\Ò4 òüýåò)­Ö>Îí].7›Í iº6 ¿¨V=Qd/öX×j%Ï<3<Áúá·<2~õÕ®o›Ëv'4tÊ)i–Îu?ñDáÞ{ƒ hï¿6kVôàƒš: ]xáÔï}WLdµzÑΠ¡¡!¸Ò.rçfäùGÒôÊ=÷L9dãÆ•Õ«¯Ù±ãorúÛç aˆ¨ÚöµgƲ7³ì>5ºhô% àjªÓòFgàÈö@»€HPµÙîFª©´.mEn6 ·ÑÔÛ‰I^\sÈÆl+ÎH‹¯à˜zÂjÎqµ`ìž;;) ÷hÁ^}B¹e *+*˲ÞÞÞSN9eÖ¬Y£PÆCÎÌå(èÉRÖ±2õÔ‹±šiB e©ù/)¼eÙœø¬Z¯/âa²^_„-m;Y%ÐUñ×Î X.j›EëY¸­a«UþÏÿl|úÓýýõÇÏÞþöô-oI¾õ­t` ï}†JBocâĉ‡rȤI“ž}öÙÍ›7«o­ úéK¹)zæÄÚÄsá}áÒÍt'‡¯ÊäÐSÑr“ R°=ÀÆOäS¦¯».ýË_òúè£Ï=÷ÜÒ¥KÇJóf<ä8Må´«¯Ý`'îgdÜ‘L·¥Ñ” vÇV½Ýœ 9Â֟ͩש@³§3M'†C[µv†ZâcX0ˆ– ¨¢]òÔ…F#øæ7«W^™OšÔ<âˆÒ¿èœK¥9¬ƒô:Q¡­”0 ßð†7L›6í•W^Ù°aƒ>=“²íjè³¶µUvÚö³Îð« TõjµºvíZo“¯i&cL¤áðã-…;W,»N<±þñgD‚éÓ Íf†áË/Ç÷ߟvÞx+σ(*”JÁÀ@¥¯/êíö¯ÿÚ8î¸ú‘GvuuÅq\«Õ¶þóS^|±uÔQæò ®3ô' *Ðê0stHi‡õú¬$™yÌ1ùÈG8à€¾¾¾­[·þ¦¯oß;ªÎ•Ëe“ǧlR¯hX*L)y]¡6#¤¨Z+Ó†~èA©E&ú4tO+•ÊÁœçùÓO?­D/Â9œ-*{/$Xj§¤ì$g6¬lÛ•:ÖC£¼S{æ†SÙ'ØEJƒ»Sî5ÂEžôŽ'©âÖj=Ǩ“Ý*†ˆ¶œ!%éX‚}ûàààܹsq›9cu4–x@JcãA*•S¥mµÙ®Os"ªô/ c‰Ûr›¤€›2˜´¯­iòVLéí Ñ¢J¹ÿºÏ™ûQËd»æÒå—7ÿõ_'\qE*ü]æxT/}4!"‚jµzß}÷EQ´}ûváí WGdÄü=â,OŒžn£§@x,*aOUÝYøp‹p:dªt>AV’BaX¯%šGÝ:ðÀȹÒÄO?m÷^Z¾¼ñîw·>úѸ^wsçNX¶¬\.N˜ •J¥Z­æ{íU(•Ê›7aX.—9ˆ-{°Þž½Üf³Y©TŠÅbµZÒ¹±4M·nݺeË–™3gnÛ¶mË–-æL¡Šœ,EødÄ äªÞŒEÕ^ J^ãDÛÓÞiµZ6,S¼···««Ë< Y¨*@g)½ÕѽyzL[ÊeȘ U¨rŽviÙ¤Ô>¨Ï§YlÞpL<›’¡=®yy°*¯óÉ*ZèÑAõ 8‘ìò ‚ñ36ñFu´¬[;}úôF£±mÛ6]4¤f^ŸP³¯:QdLÇ3Y‘ºøhÃ2ZÈž ©'<;¤P(twwW«U²¤ J¥‘ƈê©¥¬nÅy»'I,ÜpCÖé{é¥êq¬[T§óšÍæÆ•!ŠÍ‰öoXQyL<8N”Št{3IéÉÀ‹V[×A·Ž®¡I’X¨FÌ4‚ú%—ôÜ|s;ŠÂ<’¤ïškò(®ZÕsóÍÙÔÏ8£û…¶œ~¾ûîaAðú;î¨ÏžÝxï{6ì±`A^©T …‰'®<AY³&.]Ú»fMÐ9ˆQ5Uy£*Y3læÌ™³gÏ~úé§·nݪؠõrîŠãƒŸ}öw½½6lX²dÉc=vòÆÿ†ïíàQÚ—¶0fç¸%+ðxÝ:~¤S±ú:àÔé¡#ˆ^Õn[«Õ^}õU;ãxêÔ©'œpÂŒ3xàåË—sDª˜î,oR’Í¨Š™0ÜTÁ9dú"Úsõ¼—ì)Á‚|¡Mµá±üÉc“zb¦ðVœhZ»ÎãÅÑW£a¬E?ú³ž¨¼þß1Œ7ã!g°Æd€½àR©´ß~ûmÛ¶mçÎJÉw¢5 ô¤F £E–œ8±386š½†b±îyïw¼S:2Ñ…ÍŒî/¨šŽ R’ƒrhª¨GÅßÐ_¡Wš]:ñдQ u²*ÇŽ{fõ!•©ƒ€ª]éŸÇñ#lz+I©k¼hª[*< êN5ÎöT÷ÛoÛ‘GÖfÎ\sÁ³o»ÍðE– D² 0Íãªèx9%õ“Qô‹µk¯ž7ïW+V¬ß°áí7~epð}åòû: $=žƒI†SqlÑSTgBØ\Jñ·º¿vêHjzV…4ux³O6@xÖ¬Y§vÚ„ Ö¬Y³fÍÔ”í»ºº¬X1Ø–ÙgJmŠoª:¸ Þž²»³VŨ8÷mAÚBRfüßÍÉhüÐ'»s"O‘¤4òW:7ÔâJõVÂ$¬6-›(:½!'¬ãmÿ»xp†††žûÿØ{Ó8¹Êj{ø9cÍ]=wÒ!„$„0‰ ˆQeTÔËE¸ˆÈ( ¢"WQ&QD!Lˆ!B™ç±;=V×\uÆÿ‡ÝµX9¹ï×7~èþà/6ÕU§Îyžgï½öÚk½÷f/ À=C9Íe´Å1!ñ€™N\³clXtãY·§IdÝ`®~é¨?xÃT«U4l0‚ "&O5Ê%‰­‹`\{a>âÁ1²åÄwV„¤Çå‘\˜|¼\OàEü‰PŽs ¶`BU—Aµ‡ªÌ>8€ñ xn.óùç³ÿ{þå—åÉAàMžœìí-Æã™¿þ5lkó'LHôõ555õ™¦J$ŒxIÐ[R %\„m@^Ø…‡Õ˜_ÎÞ4¥ YUB«ån*"Fë1L‡¥Ì³oŒÂqB*Ë]Î x³1FdøT.LJEð‘ž÷á~ŸH$$å…ÎÓmìkË:ð¼R±7ØýoK.`ÐàQ»+ÿG´§X’ ¦2ª&'íp ©^Dø¾P¥ ¬r¹Ìô?ž’cÅ-ä ,(‡z‚‰»]¿¦)¥R›7ÇL³fšõ /4R©Ê 'hÓ¦™ï½7þ‰'’ÉäÄ%K‚³Ïn‹Å¶LŸnÍš5}ddÞÆ÷Ξ=}út;“™–ÉuÔQ5]¿?;¥Tší8©z}ö‘Göôô‹EÁre™á@”®†ëºÂ/O&“ò”%9¨×ëõzýo¶ýMó§Ï4×Ðt9Óq4MûkƒH&‘È·»"$=ØL0‚ÇEš/ŸÏÃIšE£ɽDD•v¡’cV:ºúÃÃÃóçÏ—Ã#ænCá– @(Ïñà;‚í&·0&Û'B] ÈR:BËtsðw˜ó)¢Pl©QK’OáÉVt‰ØêFð¤q(Yðαˆúù\bm,äìÍ£hö›‘";Û#K IDAT$D°W3 Š&°rBÎÎ4ÓG7ñƒ»£ kò” ¨Ã²]AÜŒ´. Á‚jÐðSàsŸá;Lùðà*rÉ=gÜ€ KÀŽ[nÇŃÀa22ëyÞ`ÛöŠ+"Ôp6ªL/úŽãT«ÕD"±ß~ûe³Ù\.—ËåjµZ¡P€Øž0pCäþșȳMX òÈFg#”Ò4-½lY,дäÖ­™Gé¹ùæIO>yÑ‚ÏÌœÙÜÜ|ÀË/ï[­~nåÊëî¸ãèBá#MMØÔÔ4nܸý5-nšégž¹îüóO¥>¦ë‰… ûÅ/ú»»—sL¿išÍ7¶ÖëfÌpgppbE’Ò@±P®=Í"* ០Tcuñô1Ï»¨=D7¸‹‰Æµ°Qä÷hbs§!—Ë\Ù!Ä yx H²¯…aûâÅñlvжo^¿~¿zýÍÎÎÖÖÖ\pç§?ÝZ©´ '=ôuÛmétÚ4ÍT*Õôæ›ÙnøÞ÷¾w’a|ÔóO>™¼÷^­Ri‹Ç­tzÕܹgýïÿ&‡†,ß/¯\yÿYg• ùtT{rµ©T ЊïûÕjÕ¶íbÃVD;¹á$’Îʹ‰…„,AnŽœãˆ@X-¬Oˆ¦JvØë¡Ú€3:Ê\Ô^œŠ¡Î`›µÈÄ(¹(Wd¨Š¹`E²:ØØx)£A_'2Ä'’›ˆ,76£Ø@Gq(îåÝPΚ5köìÙO<ñD¹\æ³ •KŠ9¾#^ …Ó±³×~>œ¤Û}P‹³ožÇÆ‘]©Tã@Ñì&Âð·\ç¢c‰eâu™äeƒUA– ²dû'ûÛCØÞØáÜZú!ù@·‘oH ¯F±µZMNg9¤äÚÀý“ÿ ¾V«½ú꫱Xlddpe„i)FÁGΕëº;vìp]7•Jõöö Ý‹=•ã|AÐâá_u9¥QóÓ––!UçvìðŽ:ʋǛ”²c1ÕÔÔrøáØöŠTê­Ï~vå%—h¦Ùµm››ÉHz+—Û¾ô¥ê•Wn<ûìê%—¼ý³ŸÅS©ý}4ýÑÚ/¾8~Ù2mÖ¬fÓ\ùo¨5k{l¥¿ÍùT*…æŠ<ñ8Q˜d2 0÷X¯¸Ÿñx¼µµÕó¼ŽÇH³£˜TÅj›:v]W@]–_‚@˜rÃqR9œRë½b% Œ@¯M¶^5Mr2rÜãeXâòÉóC\沇)‹ç2´…ñ§G@ÅwÇmŒ@Xo{NžJP_¼xñÚµkûúúdËÔj5pÍñþJ)hcgÚ'?¯±³×ª´yõ F±P@]ÿ‘àˆÌ'ót7t"¤{ì"äÚˆ",,ã3LÑa¾¦"¹FÀ`1— äv堆 >ôDÇy˶ó Ôå|×Íèúß_²;Ø}^¥’2Œ…šömA°o­v‚ëºþ›F=gFkâû¯7ŠèûŠr˦±{‡mœAµZMRÅZ­¶iÓ&vÄb!j|™Æ*Ÿ[*•"þ"’ƒËq/'‘¤êétzÂotuue2Ó4»~÷» —]XÖQï¾ûÆÜ¹_zñEû¨£:wî¼xõêßÝzk"¿âÒK÷Ù±c»iš¦yB½žòý`Ÿ}”e}þÞ{çßv[‹Y|á›ov,[f®^L˜ÐÑÑwÝÉ«V¹;wN C¯µµV«ÕëõL&ƒ²±\Úò(Î˜Ž¢A€VÐu“uÒÚÚzàöôôär94K0ÏB´hÔ±î*sÓñæÅƒ™)KA†´+6´foä$˜Eܬ±r0ÝÑ¡À&ìVö”º$bV ¯7”ælN]j¬%®„8=U¤AÅS¢ÐãË"ø®D®mxx8ŸÏCF=™L²+x1 j²Ÿ-cm{¿—ƒõ„m†Àް¨<ä)& )AD' Õ+”¹CÔ-Ž+lñiý¡dÆÉ‘$ˆˆ[àúQ \ùÀã p£Á¦âVËÊéº>Ýu¯ò¼£}žeå• ‚àÒZ­jšy]ÿ”ëz‰ÄÊF1÷­Je Ëž7/ kš6¬içÔj+4ÍPêjǹ1“«º³T*êúk¦‰ "M,ð˜ñPÚÛÛ-ËÚ±cî—8¬aƒ*02WÏlÅD"áºn­V=:"C) ùŒÇãmmm“_}ußY³¤¯iÚ'–.mkkSÙ¬™NöÙO—JÉñããñø5»vu¾ûnjÊ¿½]Ž€³'sûíÊó4¥.zä‘óÞ~»ø‹_$Ÿ{NÏç½Ù³ÃtZiZ†•k®I/^¬)uô’%ú¼yº®—J%×u+•J<ïêêÊçóøv’ÈKÌN jw×,`æ}†Q©T6mÚ$êmÂh’» ˜‘åÐè²,+W*D#¹ ¬C>úÙ*"猊D€#H^Fz jcôUt4"8´õX½« ‘5ˆ1RÍq”‰Åøú\èc‚ÌÍ2%<Í~ÞèÌqà”H¿§à&$õ0«ñÔQ CU îBuã1>¶ŠüíXÈÙ ? d³jèÄ ­“Ç™N§åtYUm$ï€Ö üÉï¹× ´!ŠGaàä!F¼ðæÜFÒu=N‡aX,åC¡Þ4C <ïayÉMØ¢iwFW„A`˜¦Rêo±X¿®Çâñ«J¥®0\ÙXÊÇÔë_ÅJ¶}CµÚ›Lóc±þ0´5íÏÕjhÛ†aüo±ø´mŸÜØÕò)Õj5â©òà¿Â¦š‰\>ŠF–~è¿°» 6yœ0wH>Z„âMÓÌd2ÍÍÍ'N7n\GG‡ø1û¾?~üøÎÎÎjµZËçe’1NÇ‚`Âi§ÕæÍºä’ËÎ>ûÎÆ´ŠõúëúÀ€ýøãZ±hoß.%•wôÑÕO´Ói{Õªz½n|úÓ®[6´/ZÔÝÖV5Œ|>ŸËåâonnnkk Yx²GFF¤ÂΞÔ@l–!øÀœZ­¶mÛ6íŠ4íAêCÍâå0'ä‘OæOâ¼£„så¡C ‡YžÇpÄ–wòÅ‚‘—¡DÀ02ï·€‡³a ¼ \|€râË&ÂÌ5ÏkG¤<±ÀS¢Š¥å#Å·€·ì¯ƒÖÿ(²žb(E1©ï¡×À­¬½HZ 9»¼Gæ¹wÙ~±F"©´,ÜQ‘'4—ØxT>iZ¤ ‰°†òÂ>¼I cRr;B‘.x.hY‚ÂCÅPfÃȳ2õ XëûErÌí·mÝóÎ(¶Æ¿âq·VkW*¡ÔJ]?Ü÷=Ï›†³|¿†K”º$Nsœ§R݆q R³‚`a†/ø‘JÅ4ŒMºÞ§ë𦠂}'Tê-Ërg``ý u&Sðăã8È7åO¤“„‡(ϨT*1 ]äò˜ý– #“É´··?¾µµ5›ÍŠšC{{{,kjjJ&“š¦©zÝ4Íl6›J¥,Ç1b±-çžûk×½þÖ[¯þýï°~ý~–5ôì³ÍßúÖÀ#´~ýëñwß•çe¬Z¥ÅãÚªUuÇ ‚ óóŸ¯^u•ÜçI“&ÅgëÖ­rñ"*!1I·|‘jµÊþİbÖ¾€0ÈAIíy^"‘Èd\Xµâ†ËªˆÜIÜv^ü¼€QK ôEL³ÉQ §5µ»¸À.¹WÈ‹”°0AÀªîb²wÄ# œˆÄ¼* cäpÔ @Ìd¿ã’ ±ˆ\ ôS±Ëä—ì޹+)ÉdRDD*žÅ=]×…ßž&[4õrö>IZž½(°’9­È>‘ã[ÖÔä\‘z…KZ–ïeQ$û@ƒ1Â@e\ɹ`/ç‘|V¥RÁ0#SðqläÃìU$‰ ³ L¿êyŽ®?bZ­v‘ãáûuýÚXìz×]«äº¦euêzW,öp2ù‡0œ?<|_,vç-0͹n¨ë¾ï¡Z=B)C×óºþp<®”úrµÚJ©ñ¾ÿ´eÉè’ìU ¤¬ŒÅbµZï$¾—Ú]38Âbe¦BÈ­“;&ì˲’Édsss*•’jF6°mÛÒíÀ|"ÒO¹B¥T_>ÿ·çŸ¿ô¹ç&Ÿp•ÕêŸ{{ÓÙ¬9yòe‡ÒôÀÖÖ­Îgl3ŒWŽ;.¶`ú÷¿':ÎÑGaY–;oÞöM›†”:üàƒëÍÍOÇb¥ÖÖÂþû»,\¹Xù,÷"ÑV­Vœê%G_7T+G§€ÀWaÎÆG9ò¾ÊYÏÈä#Ûw2W8ŽYU“ù`ˆ Ü¶áZŽs;TÌL×äéipÊG}:,Kv7×|< ¹h p¬ŠÆ|°ˆÑ.“¤jwÿPfŸc­JÉ…{+ñžµÏ9öÒ”‚ ‹hÞÿ—ÊXÈùÿû¤yXQ§Ó‘Br÷/2¿4µQdè›±è 2¹ž7 #ù &ºàáS E<º§#2Ó‘è¾ÀÙó0B~èº~¹ãì ç-KRjØ4‹JiJéº~s<>1 Uµz¿¦õZÖuõú|a7)A: ;‚ †Óçh]VêG©”n·ŒŒ7M¥Ô8ß¿¶­Íçz{ÿÜÜÌõ.²QqC8|"ãÀЄIœÅø@l“j&‘H´µµ¥Óé–––t:£Jºâô#—”Êf‹W]%ïüã¶¶õ=4£³sjww`YŽRõ£~Ѳ>ë8·_~ù•/¼P¾â ï”S6Åb¯êSŸ›;×÷ýÐuÝzÝÞË/¿dãÆãl{F"‘K§ç§ÓšfÕ¶{s9)¤Ú–ùÖB‡Íd2-V*4#åû¼Bòþ9—A ¹qÀEöÐÙ×€AÕð.Фùð@ŒG¢ÍꬲŠu ËÅÂ?zfx²%¶ÐL1µ„e§Ñ:‚ÏòN–!úÇ4 žïaî2ä Ø••ý® AÃ=} ä¾:‡ßÏœUL•îÙ* 9{[S4ŒMÈýj¤0ØrüAì…kõGj)žÎÁ<¹,P”&HÇÃ*X@~"nK|4(r† ;V-#ÔÁß,›@úL"¨iY¾ïÂó®O$2²£b±¿ù¾¥i“5íÎzýÞL¦¿V[wù~àºL3ẺaÔtýåTj¹ç%”úk¡°Ð¶W$ÃA 9Î}ÿ]_¡”®Ô:¥žÛµ+Pꪎ“†@QJ2Σ0ô¨1† ÃJ–9‘;Év&Lí³,+NK %CEmmmñx\k„1|Už¾Ì%“Éà„ì0Ôu}i2yÖÇ?¾J×KÝÝ–Rº^Wê¾bñštúΦ¦êi§‰4Q½^Ÿ†Ç•JºRqÏóƒ Ão··ŸÚÜ\ÒuU,†a8.æy^=zÃpsGG.—ƒ‡i6›²u©T*K‰&…8òîˆñ¶„Lf@š“§ŒQR3sLÖXKK‹¨ „ÛËÂB{Š"ã,¨°'… õ(›xÊ~UƒÏò¶`å 3ô6ØS¥t͹>ÆtWÉ p˵!v²³ØÊ“ͶÙ=kOÁßz½‹Å"g s,YêÙ$38âñxwww¥RÙ²e ’6Vf 9{“$ÍLPΧ@J†&Ëb‚(Ù®Oʉ` ÃÆætÓ˜½ÀE ÜX'Ç"GG`Ðhù²?¸›â°Â™¼¡“6¯¢Ii¥ÔËŠ77§5mxxx…¦ý¼áæyƒR=±Ø÷*•§Móñøc##)ßÐ0®O$¦†áKµÚ㾯iÚi©TÍóò†ñÏbq^6;Ïuóš¦ëú™JuzÞ=¶í»îa¾?- çµ·›Jýe`à³ííÈ4Q©ð©ÄÔv\-Ì&`ÑR– R<t Ã0›Í U8ñx<•JɳÈf³étÔyAÞd>†›vוË?L§‡u}²ç]­úA°5 iš¾çíò¼®Æ™/—ßK¥¾ÖÖ– ‚Ëûúö+ÖØv³çµ;NNzÈÕj.™¼ ¹Y)u‘ãìÛÈ$ªÕª¦ãñx{{;\$4ær¹d2)scÂ7v%@3”‘ÁaäCx‹V`ànâr•RÅbâI£ötæÊž@4oÐttÌ|käã9`¡e”P8I1[*J`tZ %Ïã­çz¨Z¶lt/$“Þa‡†,_®òyy º®‡é´7{¶¦iÆ{ïÕª>q¢6eŠ/npP­_¯t=<öXÏqô5kÂþ~Ð_™8Îê5qeŽ(³ûìYŒù.:aBnš—[-_9“Ézè¡k׮ݶm’E®GÇBÎÞìåDR0æž1ŠÅÓ9¢p£H@N:Ü<ëÃ-Gv¶‡B-ÿ‰"“l>˜åÅ~ ‚ ·¦xœ ƒGù¾ÁcÏ\'=ÝqþP©HŠð¹}öy¤TRJ IÈd}9R[ZZ†‡‡%<‹<(ûi¢j” (“hY—ˆix ’»`†,2¸Û˜HöÍ|3pšy;(²õDÿ‰-õxKò´?'ˆÀÊ"¢æ°ÒPJ9sæ‡æ}ùË™cŽ‘é^xaØÑá*ey¤~Çø+ç⋃l6 Ãàˆ#´»ï®Ÿ|rpòÉÚÊ•¡RîâÅÆÚµµ³ÏV3f¨0 >þñøƒª\npðb}FŽ&vgP{èÞ0zz<:88øÚk¯‰%.÷Ãöb‰3r¢íœˆÉ4`ëˆy ›ÔòNÆÑ.}d­àÍy.)9zÝ@¸¿aÔþ¹®ë™LFþÍŸÅÄnØpÏ%¿ß °qÍÇG†mÛûï¿¿œbòq ¡º®ë{žÖ ¬Ô¦¹Æ¶-¥ôF#Aš3«Õ§m;´¬Àu]×½¨ZýäwØ7Ý$—´yÊ”__{í`,–¹áÕ× EoÊ”‘«® ðí–[‚-[‚ ¨ó›µÃ7׬Iÿüç?îg?«vîÔ–-ÓÅEr—‚Å}%1Dü ’H$‰Dkk+ð´X,&¿”Ô^^ ½pÙö𦽋m°¬ËÊå–•‚ª¦×õ»ÓéãŸ{î˜?üá²{ï]mY/½þú?îûþ¶Y³6NŸ¾}ÿýÿýÑ®ŠÇoÞo¿t­vi'“eÃXÞÕõ-[–75µzÞ¿²Ùí¶}ÝÔ©'f235ML¬qÐ ˜V­Vc±X2™” cEE‚`\øÂ/C‘@»•Gæ#cÎRß°Ì Xûè4È™ Ú1äX>k, €Š,×0§Å‹à6KÜBI–9¶¾Ý‡Šˆù¼ÖÓã5ö”aÕÓOOΫ”ò?>nYª¡ÿäžzj擟 ‚ ´`Aüž{TšÏúè({Í0Œ;­Ç ðúàƒ~K‹•σ–Í*‘C`ÏÞÀhrÚDÀsî£vÁë$t]W¨žÐÎÃh/V9úX¤áćÙMˆ"2,ª;b ŽoÌ0c®[‚’߈›,Ó‰ð3â@SÜŒþ1·­fÛR‚rÈ!§|îs>XkiQ öð(h†n*å$“†mîÿX,ÌfÃtzÊH¥ÜtÚK§ýL&žLu §Áƒ èééyüñÇçÏŸ/ÉœÚû¾ïéz½±«_Ç-ßqxø'¥ÒÙ¶¦iwW*†ãA0Õ󖆆¶m;ßýî/î>GF^™îû;ï¸cúO~òú•W¶]sÍÅ­­£…],–¿öÚ¦Ÿþ4ûÓŸßv›RªzöÙa¹ÜrçÚÚµåo}+ CÓ²Üc-ß~{0~<¥”#wÀãeb¢O‹B0•J%“I‰ÇÒ×]µD"‘J¥äÉd^¢²ó—)õº®ŸU©d5MÓ´e–õx,öX,vF¥~ø·o¿}n:}øüùƒK—¾¦”söÙŸû\OOÏÒzýÄ\î`×ým_ß­YóÉU«>hj:¤¯ï þgÖ¬ñø‰Ä‘Õê×ýÎÀÀŒÁAÊ’ÂQÆt0Õ+WË6êŠ “X§@(Õ¡@‰½ˆ*ñ¤’*¡*DF@•¬Õj‚6#bj ëìÉ[|ÎxJþ!L¨ÒòX™æÎd<^ÿl¹Ë’J)ýý÷µ§žÒ¢Ýžç)]÷N?½òúëîȈK0ãŽ;Н½Vþ׿’w݆¡îºµ+¯,/XP½ï>϶=ÏÓ_yE™¦ûÕ¯Z¯¼nÞ :ÜyÖ#Glk“$FÊkd½È8Õî.Y|O0«‹µÍ*rCPIÞÖÞÞÞÑÑ1&ë¹—ð<à^…г“GÒ8Å“œ‚ű1R ç8Ï‚€?(srä1Î>úyS§zãÇ×oº)9gNkkë§>õ)íŒ3žuÝj>o>ñ„þØcz#Oô¿ô¥à‚ ”Rñ'ŸÔ<ìîv.»Ì›5KïëKÞ}·Z»¶ü ÆÐ¼yúŠ+ÂmÛ"Ì÷/—Ë›7oÆe3—Æ4Í4íEMÓeð% o1Í[-K¾ã|7‘p]×TêÆDBZ1J©ô¯]ýå/{æÏ?>“Ý3mmÏzÞŸ:ȺòJ+ÌÆÞÓGFü‰}ßWýýJ)•ÍꃃúæÍvwwµ¹9 C­¥¥~Åé?ü!l@8¹¸§Å!\/ž¥ÐÁCO&“®Â0liiiii‘„Q^,{œÇ)•J=oj"ñTkë®Û†ÿ]©,´¬Õj;–,9ò¥—¾sûí›FF®½ë®É›7?z?úèYK–<|é¥÷qÄ¢ÖÖ_ô÷« Ø×u+Åâ¤B¡dY»‰ƒ«ÕyCC7ì¿ÿ£–u__Ñu›Ëåºï›¦ÙÔÔ$¬Y[Éd’Ôm‹&#p“¬væÇ³eYBÉ‹DÏ…%ø¸y‰W²û7Õ0FoÄh¤^#ú„\"';@-nø©†‘ónXÜĉjß}“sçV^}5<餕Ä~>î8]× ¯¼’üÛß’?ž|üqß÷½£Žª]}ìê«•a¸_þ²nšñÇ 4- ‰E U€1].\®™é’4H}cšfµZð¾Üécûv¨^ÐÑÞÞ~Úi§ù¾ÿÜsÏÍåìå^N¤€N¦¬oÿà5;»$ñh!ã³jƒv­Œ¶¡Ïv#£sŠw'M æÌQ¦©iZ¥Ry÷Ýwß8÷Üé]´~ýúÊùç뺮5ÎMÿŠ+Rǧ”*-XùãÝ“OW¯Ž]}uðÑ:_l]u•rÝæ3ÎUC0 E–Ž(ðñlTþ‚<' "Výb÷¶ˆhæ‡÷‡>ººÜóÎ ãñà#±~ùËÑΖï›[¶8sç*¥Œµk•Rñ>pçÌ©}÷»ÎĉA__Îç?o=óL0nœÎ0 w"U%´øH›Í¶íD"!AEމT*%Ó ‰Ds|Ò«—w+ åryhhÈ4Í“ÃðåDâÁTêŠz}vþÛ¶×YÖ]•Jâßÿ~zõêîý÷î¯M½ñÆW^|1;cF°aÃWÞxÃ9øà>ó™ÅéôÛ–57™l­Õ>ÑÓãÚöÒ––é•ÊGÊåŸ ¾›N¿kÛASÓ--û:Žjå Á·Wî|­V+‹âox CÍÅ{!nbJ•DÄTFM, ôáÄ™H+Û:ëì˜Çr5‘ eæ‘îIªÚÂ÷íÙ\ŠÛûhËÛ¶]Ùº5ö‹_HKD×uÏqFu»iæAÓ4gölÍuµ+>DäÎ;OӴ؃Ö,âaÕñ¼*JžðãÎ.KÞ1¢ÎRiP{’} úOÄàCž{½^ïïï¯V«’FŒ…œ½ÌŽD äÈ}$öCÞ4ŸßÙûYˆ‘‰Ì*/м~™ˆÂþènyí5óå—ݹsŇqÉ’%•ryCwwé‡?Œßt“Ù 0«Gk@(¡çÙ¶í[–+QÖ² >ý›ßh‹©ÝÍÐïáI@ž*Åñqo½ÞÒÐbÐCòçÿÖ´ß$‘(œk¦i*šÀÐêõØK/Y|0<~pÏ=£Å¥aÔ?ùÉÎ/~Q)Õ÷÷¿k¿þu|ÉÍuƒ 4Ó4m»vÙeFìOª^y¥Õ˜ê•R¶ºT™R€ˆ%LÖpÄ&“ÉLŸ>=“Ɉ¬Y&“‘èbÛ¶ÀVкÔBnN*~lL IDAT•’Ï]wãÜæûo™æŸ …À÷­ÿÛXµjÚäÉ_)—~ôÑï~ìcûÿéOæ=÷˜7~ñ‚ æårš¦ý4•Ú™Nïãy[ZZ®[ºÔó¼ÿ:þøóËå“ÃðÓù|­V{6‘XÕÞ>exNAMÎ>‘µgµcžùœ+åQ$¹án¢œõp˜E·CN8=å81±˜y©#À³ÚŠP«áÀik£‡MÚŽD–£åþRØGpc“7 ¥âG×*|h¸’S+ùGíCÌz=¾rå‡bG­5Œ²˜»Á°h/ 6‚fÍúÊi³ÂºÜ%Dw9g)âz†‡‡_zé%ß÷K¥Ò˜àÍ^Ö"­uà‡Âƒ¨«a€Žác¬éX,ªñžîI8p¹‹€Ý…¹ËH£›{†Øí8ÓK¥’7qbùÄ“?úQåöÛí¯|Åj0Ü×__Z°@…apÀA¸hG5 óÄé§{ºnézýûß×{{õÍ›9…’)Óù¡ÃÈøòaApa<žð¼»îáaÁæù¬e5)u¾ãü†(CÈ:Ùsˆ62b¾ÿ¾¶»`]DW)况r¥öÞ{ÚÈHýØcý3jgž©.¹$èì¬×ë± Ò¥´÷¡žÇÂÃØ´Ò$|2™L§Ó3fÌ8á„R©Ô{ï½çºnss³t$«`æO­VCŽÙÜÜ G¯“ÃPwÝe¦yP£Q'—=§VU7Íê©§ú÷ÜÓôïüWkë%¾ßшM¾/(™ Äãñß47Ìó¦Õjõz}¤T–ˆÕ"g«eYÅbq`` P( AúƒK€Ñ0‰ê ›Ò·‡Ô&`Iž%Àp.«Ë°Ÿßg€i

    RH1¹”-5±UÝó!½X‘PÇqâ×\S|õU¥Tê–[BÏsO9EK$Ì¿þ5~à å ”R­·Þê[–zê©úÕW^}U_·.qõÕ¾ï+Ç©¿ù¦H¤Ï;Omß.·4™Lbb¼î ¸KHìX ÷Sr#6÷d6FÐÖ’%º®{ÉdhYX²œý1Õ›Œ”kšæ)5Ãón ‚ÿ™1ã§&lݺu^oï_ …Ó’É0 ÷wœI¤ïCZ çi¾oÔëÏZ_³Æùä' ]7׬1 Ã7.Ô´°¯Ïذ¡|ôÑ–e™«WÛ¶]7¯ÞÕe¬_ïO˜ ¯_Ÿxì1¹ÿ…oÛÚ°Á.•TC¶¤ &ã”2¡477ë&[[Sõz*•ª×ë½ÍÍ•ööVËú„R2 %w¥¦m³í&ß?\Ð’ X˜N›¦9Ó󺕚†ŸªT.N§ß1Í©¾¯”:dùòåÇ·) 4­Ó÷뺾jüø¹Ju8Î;‰D2tMëÔ´–Db\,íèØåûû 8Ž“uݵ¦ÙŸNT*‰þþ‘‘‘D"!ˆ«®ëÅbQrXB¦Ã¥©7ûÇDzHŒPñ#Æ ÝPŒÁR)žXU T7öºýðjh²w0%6©b P^ ! 6¾D6&^…BArVç/.ù¹Ï @R-Z”>þxÜØ?ÿ 1VóøãÃ0ôT/•×_ÏÝ©ÌÉ'ã0-+hôíÅÒYš$72)ÅÕb*³Ú Z/ï,· S½x²`‚`²G’fx3¢$Šø……œ½9 ЧŠÿX]r¹ É ~H]‚4DÎE.„0vÄ4Œ×3VŽ–lÄ×€/•3ÎÕîJõª;ÝóÎÓŸxÂó¼Pþ¼Á~Vê¤z×]Í'ž8 þú¾µ;sOµ(‚Ù´Ô0Œ&¥ÖõŸpÀô3ÏüÂÌ™‹-zñŃ͛Ïr]]×/òý¥¶+5Óó>ãºJ©AMû½m+¥Îqœ{ ™Zâ'?©_t‘¦i‰oô<ÏíèPJÙ»v¥ö³Ê9çx†‘½å×uãÏ?oœvšsÌ1Ú† ©§ž 0£ðöÛA„ý±'YKv£P@Lbé§>µ`úôµåò¶nÕu½¯«kÑøñšiÚ–åèú§]W¶îrÃx1P©dYÇV«O¦Rýñ¸ïšæ×§ÉqêõzLþOsó©¥’RêÚ›o¾S©•×^;ÇóŽp綬Y3W©Kz{ïö¼²®bdä€j5 ÃÓ+•§m{8þÌüù}3g~1{¶µuY&Ó^,0<ì¥R‚ oMDEËår¡PíWqB–ÀƒÉ‚èâ8fEî¦%kÞ }®V«ìBÓ›¡0^E¨5#ÖË<ŸÈ¦ÜsÂU!‡&¯Rº’~;ëHE\yØ”õ/ØBË”`°¢§ÉCKÌ©S䬨ȿì$æ­±ƒ'³Ò¹×¥vwå`ä#¨æ9h®by@¾ xäc!go†Î5@*4 X2Èšá#I*™ÏÌ@çøC^=2X€ž-AŒt¡íá4Þ0‚äý÷—yDS*ö䓚ç9Çc$“Ö‚µ ùÝï‚ ˆÿþ÷Aد½V¿ðBç‰'Ì‘‘Ä(¥7ÝTüÔRú¢EöÀ€ÛP:ˆP‡Q¨!óŠæ¦0üX"ñ—ã?餓&L˜ÍfûúúþQ­þdãÆù†jÚï ãk®»IÓÎO§5]O»î<×ý½m§ëæý÷‡ ¨!68hÝvÛ(‰÷ßWJ¹¾ooßž¼å– ”eIÂûÇ?¼¿ýM¢é‡rÅ‹A 5„y¦0Ƀ¬LÞJ$Fo¶o¯µ¶‰\.×ÒÒ²&™ÌÖë§oÝê§Ó•qã´F•öŽ®OTêÜz½Ïu{ Ã0ŒÇ’É7ëõ ¾‹õ–˪Pø§eMlioßÙÓ“™3'62ri*eq†Ü^gîÜs–/wN?ýÁÎÎÏööÚ¥’¦iÛv§ÙuÏ,Ö¯__rÝ|w·eYç:NeÓÜ1~|¹\–dVP5×u‹Åb>Ÿ—0#ñFôZ¤ëƒ œ;R‘ çe+LE¦d8×°Âчã 1„õÓl*òÐð¨HP‡ dèÃqDÍ ÄD;º€ê©ÌÌJU$â.ݨ_C.{|ôi:kÇE@3\¤ † rð_€òˆD8>%ø‘Œp‚n+@AYÙi{,äìå–r6Í•P,¶!ætE†Ô@Y–•H$í\ÆýCŒvc‚I‰œE¶«ü×ôYgéýoýùÏÉwÞqêu¿·×w]óÝwMË2 #ýì³õýËóY'£’¬ûûƒ†Ç†Úöíšã„ÒÛ¯ÕüJŵ,Íó¼‘YÂÒ‘TÃÃF£­¢” ƒ@Û±CÓ´°!¸‹" ™pÙÁ}É“Q#MÛP­îø×¿þàûãÆ[¸páŠ+,ßn$}”JÝMMéÖÖc:*“É,\¸ð¡íÛo+•ñ}]×ë @s‚<‡Äb£ÕjU¬€ä@ˆb@ƒ§C¸‡!T ¸‡«Ýˆ¤ó;;¯_¾ÜÎf2iÒ­ƒƒ23áéúuÙìí•Ê¡®{S*uk±¨Â°X,îŠÇ{››Çb~k«ÕÛ;kýú'gÎÜ>~üàŒ¹Ï~\:­n¸áí#TJtæ™Ï™³Ï<÷¥—&qį&OþìúõãFF„ÝÑÑ1qâD±†ã…Š .I†…B¡T*åóùááaiäT*4EXZ‘iÜt^ÁgkÄK†6åX¼Ž%«#¨,SCå2FGµHü_5ÔÏ$d²%Š-LàC#n{¬Ã«vWY†jxwL³–?—’MSÎyTG£QÒ–Ç»áƒ"–´áo-!pO­xq±Ïod^8 \`E´ºáââGc!gïÿ@ÝYN’zDÈ!x¥Ð–Ðî‰í<æZ­Ó0È~£“@¢}V†£|Æ»°“… ŠA3ô™÷ÂÊ=@̰“qÚ²˜ "ÝLÙ·¬ nw†ƒšöªR?ܺõFß;‘صk×ÇÊå{êõób±ï4²Èx<~Øa‡sÎ9mmm¾ïçr9½ZU®ë5z¼‘Ž ú[À` âºn<+L6~DN÷rðùú˜”Õv][a½^¯×OܸñýLfgW—æûŽãÄb±AÛ~);Ùó† ãQ]·•²ÐÛ½½ïìÜlš¯ Œwr¹üüG>2’N?ñùÏÏ[±¢eÝ:7þõí·¿ô%MÓ?úhw©ô¹öö¡©SÛ4íK==¯Lž|äºuÓ\Wˆ étZ–Š"¡9¤Òé´{ 0årYþËår±X,•JàÈ=a{rÃ\qƒSö²\?ÌôøÄ`„ƒíScB1H¶!ƒ.<“Î7°}tÈxÂ/‘HDꡱ³ª”²Ã%†qOœµ}û>šæºî;šöÃdÒÓõÐu‚éÇÉår¾ï‡²uÛJÃ8q\ò` \†¤œ|~ñ¸"ô䯛B™Í†á3zÃÃPà)9Lm×Ï×c±Þ¶¶R©”H$véúËñøÝ¥ÒyŽó«x|kƒ’´¸·w£ivU*Ç®_?É04¥Z‚@Ÿ2¥ÜÕµþÜs»»»µ¶¶7Æ{t`àW™Ìï.¾xéðpý‡?Œ{^s¡ph¹+ž8è Yýý¶Rù|~```ܸqíííÐoÆtQKK‹œDžçÉêÐÐÐÈÈH¥R)—Ëâ*À GnžÁD;D^ iVD† Џ)Âò‘LÉݳ¯#õ(8i¬ñÅ#ø &:Y‚R¬Ê«Z£ª]‘šw"%Ø€ö±Â‚J,:C˜ËÈÖ„ Ý8ØØˆÈÝ ml,`Π^FBÇf‚ð”t 3z6 Õ³† :“ÌžDz µyœ0õ‘ýP­V¥ù]­išQ¯?U«)¥ZÃ0†J©)šVñ}SÓ뺮ÔéôÃùü•Ë–ý|xX×õõ«WŸ•ÏoÔõ冡4Mot†¹”ù°Û©iµO|BÍ™“¾ï>¿T’‹éèè¨×ëù|ÈË+—hÚw¸Û¨/ÏTµªÊeyúGmÝ:¿µõ•ƒrLsV>_©T¾ÓÒò¥N©×Wéú MM-¾ïà ã87,[vÅܹé”U©ô¤Ó<õTw,ÁKù¼Þм²-+}†q²ã<ýž×iš–eõd³÷µ¶Ž«TNð¼˪–JAtuu!”ÊÚƒ‚½4o4M+ ===ù|~dd„e–à£ê  D&ÃΣÿ,x/šƹÚ]) _äLg¶X$»ŠÀbh²!/NmÉíJê0‰ˆ -ão²¤ãñxDdšm–²ã7 ÚÚj×^›¼ê*MÓJwÞi]y¥žËa¿@§\Öö¬|¼¿$pùЙfŸ:. A[dzÃWƒJˆp’ñ5HÔáa)¬¢1`í?¢ÊA §)æÉÀZ˜ã 0%àÚ‘)ˆDá„SàdK}6\KyæY÷SÖu¯Ói5i’½zu„1'MEšÿÒÇ1Í1ÈÜLã˲æ$0ä³FnãK¥~ßÏiÚ…;v¼¹k—eYÓ]÷Äzý!Ûv©ÖÄáÑ!ö9süã7/.Ÿw^âÑGZ­¥¥åÐCݾ}»ŒR³"«[å2DpH0R!zY€q(´â'¾ývGGGµ­Í0Œ&ÓüüÒ¥óÞz«·«kᡇzžwO.·©µõ}Ó<¿ZýIµú™¦¦´ï”Ë™Bák‹Ý÷ñüÁ“+W>uãß~úéJ¥rá“OþùœsD²Õó~P¯_ÛÖ¦”ê5Í;šš¾Q­–Mó¡TjÚÈÈm϶MÓ³¬æææl6ÛÞÞŽ§Y©TK¥R©TÊår’»ÈøçÈÈH±XÎçóÒßbn!¸Rzã‡Ï\@[È“dÎC ®<·a€\A ‚+HÈ$ö£Þ’¯Ã´·ˆ±&ûІñ€ðÉá„?&Ô f$Ã[ÖÑ® SàpG !¥á‡­¬C©_rIÇå—'‰Z­¦}ó›…;ïLþö·á‰e¾—YÈŸ˜.Õ°`ÂÈ2Y›¹/ø²+™‰Î‚:<´„+Gϲx.’ci¬íåƒÀÀ= úÂÛ&·é ¯'œ¯°©u…½&Ç99ÙÚ]~`·Î;,Õˆy(ª4nZŒž)—_®4ͱ,íÝwQÍÀj¢XX÷ÒíDŠÊj&áü@J¾~à£Í-¥ÎuÝu¶} ï«\VJ hÚïlû£aØÝجl‚N¯øèÔtóÍaÖ £òo$ï¾;ŸÏ¿÷Þ{ÕjRT€ X6‚S¼Hû]èjÒõ•À#¹$»ïIzË•LÆó¼R©T(ê©Ôq†1·V MS¼IV­Z•Ëå†Z[gmÚ4«¿›® !ÔB¥â螥Óéiºþ`¹¬iÚ¼öö‹ …?'“š¦íûÄã‡ùþß÷Ý÷;Ž“u]±"IGYåryddDÄJ¥Òðð°0¡«Õj¹\ÎårÅbqddDž‘±£Î E³îÀ3t :øœ¼¥vቨ‡á¯X6ò9†‰Xô ˆ"–(øi,}-™"V2?æ’@Æ ®Ì:ÄÎQÌà°Ãœ“OŽßt“eYmmm•J¥²s§}ó͵ /ŒézbíZ©{¨=¬ ¥A` L ¦;ƒÍ!y‰V†Á ?§ÅlðÊšw"Op,äìÍ„³G„œˆ»— × ')Á@6€djR9É&d1ÃŒíbDŽ;FìY‚ …ËÆt]†’išµ[n±žÞÚ±£òµ¯Ù…‚Ö°¤EWRN˜øÂ 5"Ö)Õg©(}°y€.c‘`,7áñx|²R¾ï¿mš7€Ç0 mËzÇ0¼0Ô…`Äé«z Æþû§|P7Œ /¾8NéºëÔM7 ‚m!ßFŸL¬bw›‘ƒ‹b4FÁ …:q#–2888hYõqã …B,•òâñ¾¾¾\.×ÓÓ³£Rq§MíäçyµZ-ï8â[«ÕväóÏtt|»¯Ï4Í µµßqüxŸÏK˜)âR©T,e²Ýó¼T*Å.Ôx:Š<’‘Ö ÂfeežŸåÚ*.šÑ„Gƒ“‘½a×D&á¸ÓÆã½,ÇÉS;€ Àcd§ÁH'µ# ¡ø^àYCCZ:íÆbN±˜Ïçe󆩔–H˜##Ìàgù4l"ÃøtÁ ˜¡Žd¡EÎT'ò¾¥3ò_“Éäÿ Ð1GÓc$éÿ®ËwÊI*Šâ`L1é–ͤ#˜#€t`TÅ5 'ƒhíIBe©‡Âíl7ôµÐ«eÁ55Õ¾û]ý¹çâï¼£iZúç?/Ýu—võÕZ?ŽZªµÄJÞ-òÅå#Dd8 HÅ{Y›ü$‰Mž·Öu݆1U]×}¥tÒ»åÓDÍž­Ž;.ù«_Å]·sŸ}jµZ.—s_ÝÌfë—^j=ð²Z¹˜~FäÑ]ј ‚ ›ÍÊwt]7•JÉ¡P¯×KA$:å”y/½¯V=ÏÛR­Þºï¾Žaœ°ß~)ßÿݶmñ®®¿ì³÷öÛ‹çÍó-kõ5×´÷öÎyä‘ûÏ9§bÛº®Oöý¦¦¦r<ÞW.¿ày öÛO)uùºuln¾véÒDSSËĉ¦m×jµY==øþMãÆ]‹ ´"…K>Ÿßµk×®]»z{{‡††ªÕjµZ•ÿšz½.Eªú²Ì$*˳Å®µP$c?ëeðH#ž~D[š§p$+gIiNù#'#ô°#“×?<ܺuë]Ïÿü¡)S –õ£—^šô4íÜY¸ï¾êi§¹ï¿¿ñé§Û¾ýȉk]L›&_P š\.7<<¼k×®¡¡!aýɳ+‹Õjy £L̤ äc˜Us¹Ï˜OÄÑg::|… †Àz D&Ž''þÁ#CÈóÛ¶+• !T}e„@x1@œJåÞD¡Å$±1í0šÍ‹©¯½ö«_Õ~ó? Ýo|#yñÅ¡R.M.c¤«=N:#>Üì8€1É™À8Pä›Î‰n&8JÐ9ŒL¡±lB»ä—œVŽ…œ½ðƒi¤äg ô‡„›ä¨R¡^AbÅo…ìƒ÷Þ&Іa´µµÙ¶½cÇy+–4Ç8*ÜaðÂ3M?3GFDz ¶êíõººìÖ¦Ï+ ¦¢ùÉAsÎ,]…"ÄŒUîØ±CNpHj‚"î+fe Z: õÌŸ_Wªüoä~ñ Ã0ª§œì·_ú¶ÛÂFw9 x4ÀÐF2í‰7’&§ÓiiêÊ–®T*røš¦9~õê k×þñŠ+ìX¬Z­ær9ÏóòéôS“&M]±bI[ÛÄ… gÜt“RêÎåËõÔSaÜþîïìüËé§Ç+•SçÏÿÙ©§ÎŒÅt]ÿÁw¶¾òJiüxkíÚîU«&”JãßygÛܹ¯Ožü•oŒ¯\™Y´hÑ´i½?úÑþ·Þªÿå/…Ë.“oQ*•zzzzzz†††Êåòððp¹\–[$,viGÃ2€5ëõºg"ð»$VÉÍ©Õj£"• ‘:n  ™YìXZìsƒ|Ÿë^ÿò¹A£êjnn>äC¶mÛ¶nÝ: EøCàQ rK{“Wf‹1©ÜOÄfÔ‰[n©wžR*qË-,0Z­VŬ5ÃÝ{¦¶ÜëŠÐö0oÎ&x€M/iV çsBÈùHÑ›6fDýŸRèpïŽ;œÌ½á¼/2ÜË% Zë’š¦™Íf%¹®¬JÚbAÀúWt¡P €£ó 2Ëtv—ïûa__ìÑGýSOõ¦NuGŠwçÎ;Õ?ÿ©¿ð:@B{î/³÷XëòKô]yy ”C»Wîí¶mÛúûû%•–/‚N¸8ãXÓi`âå—Í… s×]—?î8§³3õÐC‘r“¥'åë µ÷- 0R8Êç2•(www' ÒòÑ2R.¿”ûS*•Ä÷ìÞ šW¬øg6û‰üã‘GŽsLᨣ|]¹¹ùØeËî¸ãŽUsçN[·ÎÏdÌRiÿ‡ªÕiW\‘Y¶L)UéêZwæ™M[·ÛÛÓ»ví÷úë©iÓtÏ[ýÎ;ÏNŸþñtzßÿþïøßÿ>44´eË–žžž;wnçÄÒX IDATܸqíÚµk׮ݴiSooïàà D>Ñâ“|0< 608Gf L‘0—<Ðpa¼Äm3$92€,÷•%tdãy n·` ­"ªØ²þEƒYöú¦<ˆ ƒGèÈÊÖc7s¾ñ¹(°ÁãéïØa<òˆùðÃAO7áM‡þ¥Ú݈Û´Üx’ ûK‘s |Ayj@¼™þ‘o`«Iý”=‹Ë±³w~ÓñL¦ðPåÌb764yš]¶Y2™ö‘ðÁ áÎp¶(}±:µ®ë######ò)rh=gAIÛ±˜FiW½½‰»îªÿûjŸ}´L¦zÝuæŸþ[º”ÇÜ©•J%ɼä}äx’·Åûã#ðç̪± ³Ö‘þ–¼²`ajÊœ˜ hzÉ)É3Ö¿ÿm¿ð‚àÖxù<+JɇJÙç8ŽœÂ‚A¡wXú=MMMMMM’BBÇE^Y©Täep4H$©TJ×õ˜m'‰ &Äâñ³ß{o—m/:àõ¥/ßÝ}Ý/YìîÖ}ÿE‹Vxà†3´ƒšÐßÔ‚›gÍJ‹oÏœùÞUWå¦MSJµ¬]{ôw¿Ûúþû›fÎ\öÕ¯Z…©7Þ˜îtœ)•Ê>ü£¶råë]”Ëå6lذ|ùò·Þzkùòå+V¬Ø²eËÐÐP.—«V«8}DDYQÎ2YlB…P¤ƒ0 #bet֣điÂóñ‡eÀ=$asaćeh… KDS>bdddéÒ¥Û·o‡¡¾¾ ókP¢q‡×Ë›D<âr€æ àÆý˜Ñ Š;ÕŽÜm…`D„IU“g¼þÐr+dc¹²›§|Mæ7! ÀÅH"%ï È=Hn,"êû±^ÎÊh·²căä-`P¶¤É(KYV=â8€]Ä¥+\î%Èÿ.^ÇìiÈŶ(ÛŠp»>âÿŸ1yC¹~¾릛ô~Ô|í5¿bË•ƒÃÊfŒ¿«=Ô×÷´æåW2‰—5×õr,J¤”íÍÍUuà³A›ìs&î™QBMD¶±üȵIVa^AŽyÀr” Øv†}}}µzý¡É“?7<<-Ÿªëétzn¥Rjjª%/ŸpB¥R9ñƒŒ\zkÎ¥Ô™3^³†Ô¡¡¡ZµZß´©ØÔ4óí·ßš:Õ÷}U.Ëý×j³—/—Ëeßßàybñ É8ÜY hƒÜ…›ÌÔ&0µ‚ H&“h}s’ùÐÌãŠìæ}pÆ‹‡#ž¹˜Dý:Ž‘šÓ8,u8^#)”GÆÆÇ€µ½rP7HÖ€£ <~MáUµgÁŽ,Ù~xO©Ê#4QvÓÛžçǹÃr¼˜(ÕøCØÀ€õÒKzƒìh½0!B.•8¶‡˜‹ÆÔ´´O¤¦aSÀŒØÉ{æƒøA¿ ýô]÷$›î):³ é.°c,“4¦“ð/@°ÄW–Ôjµx<~þ»ïf’IÙùÞ¦M)ß?²X<«XìhÌ$­Ÿ=»’J¸zõ—Ÿ~úžo~3Ó×7mݺÃ7lè™>ý ;¿uÛmFÖ (—Ë®ç-:è ÍMMJ©c^~ùñ3zÓéû?ò‘ ­­qÇ9dãÆ5®»¹PÈår¢jƒ6;-ÁÃ7˜dNY‘P4xÐDDÂÎS¢‘î7Úx=‚Ç-Èr —Aë9ŸÏ÷õõ‰þ:[HŠ€†9rFÞ°rx&LEEÔ9²Ç(_|Ä…ËЄ–3ìçõÝ-Òq9&akˆð9R*@ïÁsèªbÓq¤g¿4VåÎCÀ®Hü¥&æÁX/ç?‚>î–t5¸v‘¾4†l@2áI4FQÁP*ÂŒühüÍ8Sò± ‘¡°WŠˆ9Ê' =Iˆ4ª1­©vŸ×“Å-ŸëÙ'rÜdÀæ””JÊ)žªÁL+°„T$\ÎCœMºßŠÜ†TCü4•Juvv …Sœ¡Þg$DPÒ¨ ‰“‘íÂP“†‘N§S©”\ðÔááÀ÷=ÏK&“‡Ôj×oذ(™t††*•Šÿa¿ýÆMŸîN›¶lÒ¤£–-ûø+¯\|ß}SV®ì=úè]ï=ä)ÿø‡ïûO^zióÈÈe=Ô98/•–NžüÏCÑËå×®vÝá\îö)S57ÿ×”)Äbƒd†2Qš hÆ€ƒÄÔŽçE2_ùA“@‘[»¦Bé?"ˆ€¹+œ³X$ЛÐÄ/Ö«– %QÖ2 Û²a$ÁD,É0l b(DÀè‹8ºàKíi×+';¶3;Œ°›€RªR©ˆõû 3€ÉÒ¥jwP™¸‚ »"‹H¹{¶Š@® 9: ¹G°kcÀÚ‡ˆV6›­T*Åb‘ °@ãõŠržå+¸ƒ§v7É@õ€‰˜G)‘bõcä-Ò™—óZ€;Öjd:;/p‹… 5ƒ"o>nܸT*µyófÁsDà ŸüÀˆ˜çµ.U#¤Ú#úÄbŒ–L&…'†‹+wí©’"îj«ÂÔPMÙòé2‰¶†qyèoÇãq¡·Åb1Ê!!°,kv¥RÒ´ãñ³‡‡—|ô£ñ£ŽÚ·V»ö·¿=ñâÜá‡å­·Î]·îë/½tìºu'=õ”U* Ìž=0{¶†¥‰så•###…Bá+o¾™(—ßèì|ओ*•Ê„]».X³& Ãÿ™:uØ÷US“"È‘ñ1.&¸Lä4Ÿ n(âž'Î’”`ÍãÈFˆ’'îyžLÉ`¢ðLwd}J9ζfŠ ¥ÙÆ8Ö’„UPyd ôv/ 2K˜BŽ®?ۯᯀï¡õÂD2F¥x,Fz°ŠÌªY}‡´xföCê@òÙŠìAð`ñ†rsxô‚MÇBÎÞDÕ<Ï‘5Ç´w–æ=Õ/Ë I%pj¶]Bè€'ã¸ã ÜîLHÌ Ž8沎:7®„@I`ï^F½±Üåõ©TjòäÉÝÝÝÛ¶mÃŒt„P7 -ÖcæN¦Ú]›‡ì´––ÏóªÕ*"¥)2¸Ã<ŽÈ˜ˆÎ¬·ÍbºŒ¿Éo@`…A¯ÔT*…´Qb¼ÐÕ€…JeP.—³Ù¬iš3wî챬ßMzX­6Õ¶_µ¬¯®__ªT†fÎùøÇ'L˜pÎŽ/L™bŸwÞÄ¡¡x,æºîê“NR®›(d„þOÇ'»dzž·¹µõ¦ÖVyvi¥„",ßKì¥Ñ˜‘±ðY"Ís¸±q2Â'Ž@‘Š´‹äœ•¯/qA‚ýŸ#esOüÁC"Üž6Ì¢FÇý|5“mÛ¶ÐÄ¡7¥ AYÿÈ~Ÿ¡Ë1Rcn‹@XøèH»ˆåSñ!•ÄŒÿˆc74à#³«Ò½§‰?—ù¨àã¡Øåö*T¨éÇk{ór–’°c4õn9† ‡AL€FZâà†rý.ôJ&ÎG¸^B*k¤³—S’0år³=q1†y888—¬ÕjëÖ­Û¶m›yh¤£öBF1qq“w£j([³ç£¼XÎwá%777ã)`çðõóÁÊÅx,/FGAp¤Éªa*†ßð^“hQõÈ!"µB¡P)«Z­vP__¬X<¦»ÛíêÊdÊšfFWWWwww6›íÓu#•:¨­-›J‰baÕjµR©$‰L&#¤8Ã0ä>£G- •+“Á"Õ röoÌ«Hs/âlÄ„ÀÈâœ=–äªV«<±‹×9OaÌLE^ùò†Ìõ@_ukÆðJ^ €i¬Ï ¯IV€EéÜBíî]‚=ÂA;—G_cÀóïÏPöš¤20¢FS‡õ„&7ëúMEJ²þÁ•ñXÈÙk!; ß`ae£K) Œ=bi¢W!ÆÀÈ1FŠi¯È<x“8$B-Œ•`ydøHtG"NSÜaLmqpìܹ“ÝH…¢ÍƒÍ|¾ð("ކ=åè#æZHrÃ0=Êl6Ç …³xXÀô«X¬\žyÄó•X„˜Äb±b±ÈE¤¼C"‘ì^Æ„ þ#6íííB”˜aš¦¥r¹óvì¸eêÔK4mVSS6›ÝlÛÏØöÿìÚ•H§ý†¦ŽÌý é%Z5xîòàǓǔL&aw/cn¨0äëû¾PžÐØ"Iƒçy¢ÃÏ8w5ä}DÙ1ž¸Ôߊ$ÃQRG0dî«ÉdlPÞ\Ê&¹ç{røÑJ”/%ÿ@–ƒæŠ‘I.ÖQ¾£°ß„0s€0-;HXŒÚ©†Œ:ÀvÙAP Öþ# L±qßÇäÈC±ñý”ä‚‘žñFÿŸOChN£þ@&Y6¨T*H $æAº_>Š'ÄÐóƝ!à•ø[| Wlr%g£²¾‘ëA‹ßˆ9@ê0 K¥’a---’Mcx‚%ïذ##>ˆèø¿ˆß Š‚þ ÚÀrÇÒé4¶. ¸Œã3½wüfîš‚šÁ²˜Î“~€T0•JÚBðº†o±è4;Ž#s-3|ß/ a.ž<9—J¿sç?ÆOÛö÷ŠEòûéOÃ0,œ}ö¸gž‰­Y#¿ÜrÜqÅööãŸ~úµcŽéùØÇ@|àNƒÜ¢x<.ó’¸Ï þ2¯ËàŸï%b, fÞÜçãÖ#Þˆ« Ëç°â'?Y8°>b©4Ä pÒ(@RÖ¶mßaã(–q“bâLøÖèˆðìxŒÜª‰ å*/Ëök,¤ÈQrpó Kˆ…©ü".ÀŠqx#ÜbòTV2† ñ°’åh°“’¸0 9{‡> «D`+ž’aåW¦‘Þ£$Ü'—F:ž+÷Z™šÂ/`y]¤!H¸"ÒÑœ¯ñ¹ÃBL8|9áÅ•°É»¡°~W$LN’>‹m(që ƒÿ“o@Ï###mmmžG¬â9dp¿mô±[qh¡ŒËeÄãñL&#˜ià ˆ±²$—Tl–e¥R)©$¤Ï!ÕÀÛ&”3™ó KÓN/I¥ÊšÖªTö…¿ÿ½ÑÛÚvêå—Íþ~¬®ÖÓ;wJDimm•²F†íAxÅÀ «9ÀÀÔA†+ytŒ‹f^Š‘@Åø‹nàqËÙ-‚x9ˆ+8—yÌ2.ÜXBu‚c— ©®®®<°··÷ƒ>u QN¸ÏÅR$¼QN“Èalc!+bª{ÅÊ5ïȱû8åâD ä –`“_EêlÉDƒHœ–HR[©Ñ™5ÃcÝç€%.&ºÆ€µ½Œª±‰žà,$ãòb†"À1Û`i¢æåó4®‘rŽxT]8jÑèÆJ匆Að)¼4ñæ,ØÅV¡(ç—±m‰"ά™¡H® "ËB N…ÁOÔ— yúÕΩëÑàzü9Ï™æå…B†ö“OêCCXf*¹ûîä“OÆÖ­“¯³íÖÖÖD"Q­VÅÛ÷ý|>/G†Tc :Ž#|69tä¾U*ŒLB6›+˜ €ÈÁ¹Tè·BéU‘v™Ú}Î1bÄ ‚³:±GЬ“ßœë¥T¡P( Ü.ÂjÄ n!¶C^˜ðkã)@ê°$0ãjü؃KpX2‰¸-¨ êW å²"bÏö$¯ÂÉ–&èòÜËùáÅcUÎÞÿ&1÷ôŽTƒ†?æºÙU"ëëqyŽqež<ˆŒ¤aßÊ>à†2EzÝì†Ú+cNH>BvšR¨¬9µWˆUCôp£‘<²|D² ‡aðÝX'…t)ð†<ÍǧլüD*3!Rƒ$ÐШuãU³ë•JE>ZÄ€ÞH|â'fÕB†$¥éº'¸î3ÐZ*Ï'“ƒApA¹,÷3ýÊ+œÙü?öÞ4NϲÌö½Ÿwžª’@e2(ƒSJ£¶ Ð-*´ÃÑ-*ÊÆm ÂÞ*6ޏuc{œÚÙ¶¥w£í<€CƒŠ‚‚Ì C!„¤Æw~Ÿç9VÞ?«îrïO»wù;§ê¿P©¼õ ÷}_×µ®µÖ•eÙ`Ï=«…BiãF}¿V¯ONN¶Z­n·Ûjµ4l[¿EŽ aì,É…éXÔ5+² j cKÓh Æb!0/ޤÇm™È‘Ý@uQó@Qpqåê0¬6…hfAœ•>f ޏV/=T6š DôUÞ{×*"F"ÆâóÖ.d"’¼¸ŒZE;½¤z{ÚæÔàÒD{[bˆçt$ìx¶’¸xÖœŽk-ÀùÃïr'ÓJ¥":8ÈùrÈYJ]g:y®ÒF·ACuPC楜TÉ…Û} ÀÅɽ5ñ˜BlïÃÞ‡èâÒ+®V«Ífs4ÍÏÏÃUÃIÌ}9]pã„Tuª#à˜Š›CÙáKÕjµÓé’Ú±c‡¦¶Dî‡~¼2p®•KvÔkAuˉϩGàÄsEÑZª—.êÖÔ{G££',éªU«‹I ŽŽ"‡.{ffFoªÙlª¸Ñs“ÇšÐv»­øÝn·ÚT«ÕV«U Nïv?vÔQ/6‹gÏÎ …N·›t:+ÇˬþÉOæ{î9wúééB/†ÂØoBLýÒN§333£ [µj•.R‘²Õj)j@C«ÕšŸŸW€cí…B)[—ŒÁ4ÿÊ 8”©×ÑÿÒ!€Íïl4ç`CÖùCd}ÍÚða¦Zö¤n…BAo\¨&ñÆY‡Ô¢þ¿ ·YT-ºGF$ø(݈4C¾ýµ;lW,²SÂGÁ"yO„B߇WÁž€¯¡C0vRd¾E¶G;Í‘:5ÿ¼S»r–²¾ÑZ_,?Æ‚ÅýðɰèûEØ…¸aX–ì^„…öhŒú IgÊà“}è5Ÿ¨dpªu·’\I—Û#ìmív|_ï(ˆ"A› ê¨/J ð7oäºYˆ÷~ÂXýÇßò3>YQD7®ø­°Q<&F lÔgt€¤üW$9…[išêd'ÍÔ *öèô‡­V+„páw^}ÐAoݲeX*åã3½{ôÑÕ»î ÍfÿyÏ«^qEwv6œ¬Ü~{¡ÒIÕÿ¸`.¥: UwêõµÛmˆZív[\•R©´råJˆK¥’l tc8 \£'IÁ ’Lu.ê$x°,w#æü•=ß÷<,Œ}ÓQ®DBo&1‚,˜=Gdnë.sÐm`Âîsf¯1w©ÀMÃGC¹I6kwNŽuP;̵õ¯ð1ÁŸ F¦òn¹ Â+šµ¡Û§¦aRªÿ[¼ Áº}’oä!´r–æ Ñ"aÀs4½$ïC†…Fœ®‰shØ'UÓöìÆÝý\|Juâ\Wá8ݨ„´ ÿ<lS­V•òø˜wŸ¢Cœ°¤ôµÆŽŠtk\‚à:ÓÅÍ!'I» ‡Ó£A>œ€|” ïam9˜@÷UŸÃYF,Ô×h³ÙÔGA•–ï€Òm%­ô6JöMi;»sç_w:V*…BabbBqzûË_¾öŠ+J£QÞjå¥Òê}èq²^c  ½Mi UúÈ÷FÇZ‚ü•!\¬Or—Xm~Tù|eŠ ÷(ÒÓ†qÞ —äX(G¡ü‹È!×j¢ÝÁÜ xtð!~ÁQkµÄ5FN73¤iTOˆÛÉ”)¨›l¯,ýv¼ä]äb³`*QŠQUámûY¤¬Ëí®]çƒå³ô¤5?.}²HX(æ"À(Ù÷¦kˆ.®Ë-9š¯iÈû|-Ùî{ß[ÿÄ'£fY6øàócŽÙ…_xaõ–[È篹&o4*ŸúTáê«98zÿxã‚ Ò~?I’¹},;ôÐÊX¾ür6’ ŒXŽ‘ù âj*3F°8t†Eh²û2D6ï®?uÍ&O^öšÀ˜sÐ*›fÚ‚Ó~8k’$iµZ:¸•²'õ{å:#Þ3n¤t€tj·Z-1• ö¢«Œ(—Ëú-›7oöž–^ýììl©Tš˜Ë²­ÿå¿ìv×]_~y!kµþÜçÊåòÊË.›?õÔÎÙg§{í¥Á‘NÇ_P©Tšœœt‡´¹¹9´»Æ)xiGÓÃ8_8…) a¹ÜX«bª~‘J.ŸÖáGQDÔm6±Ÿ [ׯ‹ˆûŠôTm çëÌ5Ëî•sÒ7£ókÁìp  ! p k‚Ÿó6µ†wê"o-*ìÔߢ­ë”Ö ü„Ùµ/®©D0̨•µî# ”ñ¯Ô à”×9®Ä]¢‡7ÜÐxÞóº_ÿ:Ä’,Ëj¥RïÙÏN:âo~3ƒQÕ¿û»B¡>8›+oÝB½àáÑG ·ÝV,³$©|üãI’ô[­|·Ýª7ßÌfàð“q)‰ Ï…iV³Óœzëh¤[öògI)†G’K& ¥sLDpnnžçy»ÝžœœtÎ:e <@WþúùËOjžñ†#CO£Ýn“y¨›µT*m|îs7>÷¹+V¬hµZ *"X‹vX¯×óq«É«iŒ –èo±4ÕÛ™žžVý¡ì¡ÙlÊ‘šœWÇ=KDF[ïõáõz2žÈ/b(йtF/•(plï4p¤FFGœìÑ$’6²îã #ìÁÝ\›ò’Ë'ú85€Âhü6‡;Eç†R¨Ú¥æ=KÊ8újªx<¨ø´†ÿº{´HtÜÊ-reŸÞlF‰”¨ÿó_ËSAG¢½®÷b\‹žÃšñzm>‰„3—l=˜;-+8"GÞ(Â%»í–uTáG?â¤Øu"ï±Çèõ¯¯~ç;…{ïÍ×®M9¤ø‹_ú¥i:8ÿüð«_%¿øE$ôè`«“oó)ÐEêøÐü7öG"ŽJìÂ

    P~Ï{ < Ó¼(.æ'?Y¿âŠâwfã»p»{·*ñÄ ^L¥†äΫö^0šSbhQ»@Eá¶=ž”Eì g¨“Æ‚ó8æ©íÚívu‡…Ã`$•øÙ¸ìW6b»ÊèÏ:Ylt‘²Á^,ò×1¤×7Eö#´0ìÕoV –ÞE­V#ã©×ërWR-´ ÌS‹Š~·É“áó9Áá.âëUdzzZ&±™µJ?‰ð@Ý …í@Yd,¢!Ó‰‹²Î¼wN Ì7ð(°;ˆÅnOåò¬`~‰Ð¬•*Êb¢ás4x¶a‘¥ˆ¸ ®É+¿œéçL¹¨±1hÔ:ÂUË Ú#_Dg@ôz=UÃãÚ1Œåó'Qëxá’÷cÖ‚Øqd¬Œ¬d‹=‡‰õ¥ÒaAóScÜÆBœÁÁ|0r@éýÛ¿5Î8£0;«Œ%Ûk¯þ¿˜$I¶n]ÿ3Ÿ©ŸqF÷²Ëê_ýj~Ç£…PUdçC¶»Ø±ÍÝm™ÐÌ5ßóÑäì`ž=a¡9•ÛGB5üé{¹^¤^¯ 5Òte Ñh(Æ{êÇ̺ÉÉI%¡ƒÁ ßïË?çLØãÄä°Ö•ˆ×‡‘ŒÎÜB¡ s¿ÕjÈc2-þÔa²0÷Í“ÞBצO!ˆr [rÅŠ=Þ^¯§5£>–Š**p«Ü|L?©Ožššç8§×ójè+p=¬m·÷êQ»Þ[zAz2îØ¹L¹¬Ò11^Nªö±n÷Aˆn›æÓ NN¥ñp…Ve4”üþX ™|=/öjsÔ‹xOõ¦Uáîp,³sA¹£Šú|—-h[ú/‡\]©àB„`.{¸ehaq`qv+GF“Åurdd­ñ?ÏóÄ\üòzýá g†î‹ÅÝvÛ­ÓéÈÄn´&ÙpÒ‹Åf³©¡™Â7@W¨?M&šX„ 'ªi〬;²k 6VÕ§¶Ã“tW' pñÝy6˜2Ú'FF…žƒòH½sÌO­G.½Ž%¢Íâj©áÇ[9KÉ ða6X( ÝH-šì½JD‹´ß}<'¬wÈÝqíNõsŸ+u:éx–TñÃöY¼»öð'?9Úc]œŸÉöÑÒ4$Iõšk²'?9O’<„Ü¢‹²¥€óç€ã²‹ÕIÙ¸)d­ÞŸ ¸âqK…G_݇óùÚ!;vì!‰NLÈåE]n7«‡K*{¯×“Û‚J48ë÷û‹vÛm7o½ÒÊ–%Ó³,Ëä5 ²¥bE³ÝdÍ055577'BA½^G ¬F‹—:.ðƒŠ <Šk%àƒB¢ ÛŸœœÔ²ÔmêQÌÌÌ„ñ(3~ûÚ‰3 O¬€yè³Y•HÜ‘Ï}ù\_IÝL¦€ªK"I瘮2Ë5aî½äj÷ETÊÂfÔjÄé€qH8ƒ™Dš'ÎEí¯¶aÍÁ„¦*õ ºJ²(b•»Þq¼0´Âñp}Ž3ñHšqÃb{‰{2½r–,Þà¨àÐë(ƒ®5aÀ‰K|]Î aÑçT*•Ã?.ªè<Í ñÀLzN…Dû×é¼Î8 ¦þl!û“Ìнà88àF ×Ò©á-]Ù¿ƒóºÝn¯_¿~jjJoa÷Ýw§W‡h?˜¼Tѕ޶ÛíF£!s6g±•’$‘‘Þ¸H_Š%€<ê·;×@M HºêHû\;7ì" VØk4ÊýqtöæìdØVXçyKÀéÌõ³ks^5Ô,•wL|pÖCÔÞ‡§«1ØzbB•½‘ãëÄÏ}!•” ŒÝ¤W5VAYq¨ƒX <,œ–æ¬LJéq:ò%!À“-˜°w •Àÿ$‰™ ;ÉQ‚¢ò…"?ÁäPb•S Üÿw9ä,YÈq£òn°ú]Wˆ[„(Òmjy¨ÀÞÄD9Ïó8à¯xÅŽ;¶oß®s D :ƒ[±Áîe ŽÒm TBN_A\ :Œ Û}Äg4ŠÌ!G5ØÌø<lxàeÒéÕQª¦ç;€˜!«+ý“ùùy·*Á_ÌQ™C#BR¤ ÷Ýw_¯×[»víŠ+ô~¥ì‘Û Þ0ö:·_Ÿ)“AyR›ê „ ‹lµZ{î¹ç¶mÛvìØ1âÙêÕ«Á]ZÔ1šŸŸß¥µêvÝïÉ‘>\.Ÿú߉‰‰ééiÞ.ˆõÀs6 Z^ûÎEz@$bžTAM†Ì~$ k ù )x¬›G`~µÉʽ‡Ïõp|Ã&p·ú.Ê`¡A‘®vÕªUSSSr â'µø]^a„ÃJÀ PŸ,©¤·|дéiè¡I™ÐíN´æUa@‡ãÚ¨Ÿ£àö Ãú4Êwz˽œ¥ÿÒKâ`…gB®lþ.«{:å4LV8Ê•€ÌÌÌ|ë[ßj·ÛÓÓÓ<” ”EU ˆ&n‘–¸“KJ¥¬†‡K‚Èòè*ù|’&ª§`@çtg÷WwƳxF ·zŸÉ÷·F„Ê‚ÃÇAl‚hPãÚµkCÍf“|‚MèÊA?ΉT©TT‘È„ [_*­‰‰ ½£v»½eË|‹»ÝîÌÌŒ¾ lPÎkʲޚÚ3È,ß}ÈG-6 ‚ f˜¹ W DâîÝ5ŸÓêÏÇ»Í{3h.ºšKÓHA8ôÑ«1•gq‡½ÍJÀ×xÒÔÚ.•J*„vâ%S@Ø{ï½=ôÐ[n¹EÚØD«0vUœ¤+³ø°&W[<Ï ¾ ŒpÈ ƒ²Ê3o§ñ¨Ç38r.>å©*®ó™–½øf—CÎ|±¶Ø`né sn Yz«Ó§D ›F±xV·{ùØ.å‰Ãá[ƒd4zÏÖ­¿žf%éÏî÷¿V,>–eyž¿a~þ°4½µXüB£ý×£ÑíYv÷Bm%£±XÙјHïp¨q ‘ÒõÄ)ð',´r:¦SÀVþp¼íI¸‚,õT#v™·FIQ} R|¡ ŠÍªWtbÇK°$*+a—ͶÓPäa‚7‚ŠÑNGŸ 9ÓÓÓÂß°Ï ­Vkbb‚S@ 8¾aÔ=r—ÀRÌe¶bâ€/¡Ü÷GKOAWzè IY€Â.¯ÃÓPà5ìD]åÆ-Ã"‹¦ÅG ±owˆà!xÞéŠQ?s'ƒ ÒÑù€Ý%“£,’q4Œ*c©X…ÀœñAŸnÛ爖>V¸ÞñŽÞÛí“Çüúzšž?|¦Z½ªXüX¯‡ºXŸøº^ïN³P(—ËgeÙt¡ðéJ¥“¦gŒujÇn·÷̲ÔB&©Ã?ðÐÊóŒÕm3ל_n ëpö¶ÇWt:ÉÇ#‘#Ïó4ËF!ôÏ??;üð]WX(ô>ýéöÏÞ9÷ÜÌ^M¡\nÿã?Îüä'sozS"ááQGíøá·~ç;á€ò<¥éŽ .ØxõÕ›/º(OÜzwÚ™ÊÝ8™6²Þo0«ž'Ì1(ºr÷rtY ×ëµÛm!6 0d'dý>úè¶mÛºÝîüü|§ÓñAq«Óéôz=Ad4õ¬Ä}Ðg*fÀgS¤a>\•( Wæ pâŽd ,f”¡,QÝêõ:a4jú…yk®Ö"A?äÝøháoRléÚ\LæBÐCÐ&¥§¢ë æ;55u×]wÍÌÌD³Õ=5ôMM™EˆÕí0Õ‰¨J‚Þ•4 ™´­ãE Cø5N™aA²býJÜÐ!Bàï)ýÂ<ÐkÜ0v#\vø“èèÈ>˜lÎ0X™‹Ô"@œ# 0ï V;¹ÙLÆáa&MϪVo+{Åb:Þú'Fû†ðëry4 …/ÕëߨV+¥R¹P˜ëv‡ÃáþYöÚ~ÿ«Åbú¤'¥_ùJrÈ!«yÆÙ7¾ýxf ,ôî[.Ò*ÑLfο ŠìXhgK+õ+­[×ýцo~s9>þñúg>Ó:î¸ò† éÉ'´:ÿðÕ|dÍÉ'F£ìU¯*­X1÷ž÷¬}Ñ‹ö{Ù˶ŸsNžç³§œÒ¼þúC^óš‰ë®Ûþ¶·)®·Z-Å•tT]Úðª*¸Mô7yž×ëuŽ6}ˆ Çn·«ƒ Sc+ƒÁì쬈pŠ(ƒÁ`~~¾ÝnëÉëÌÚ¹sç½÷ÞûÐCmܸqvvv8ÎÎÎ>üðÃ>øàæÍ›5H€§þIoüÕét„$ªÃëZ8›§PðÔÅK-ØP y›j P´*´€yDdåT·zƒ‚Ä3ŸÑâë*Œ‡Ý©uôuñÑAÑw¾VW"’ºÏ‹ ýͤ÷r  ‚Ö0ð·:7:¸õÉDnÅ Â0 «Ó££ã‚ðOKÔNïH¿ÅcªD7Å›ò9ÑA„‘B® $ËÀÚŸDÈq2tõ¢*§ŠÖó3€¼]–µKœlÔ€Ñhôô,{ÉhôŽZ|íÕ£ÑÚ,»¹\>||v§izB§óÙn÷$yk£Q(^Òë”ç+Cøñ 'Ôßõ®Þë__úæ7O½ùæ„0w2£±~_Ô+ðž½Ç¿À›´a¡t<òfwz^µZ…Š7(?Y§Zå‡jtRç²Ë &èÉÒttÖY•õëK¿øEqܨ^ýè„fŸóœ¼Ù 7ß<Bž÷;¬ì±+ßûÞB¡°ê»ßM’dØlö;lòŽ;Ò4• &º(}Ç…´€'´ñôuXHf!®ZX¨G^£3WÃÜžè,ã·;§H=ž¹¹¹=÷Ü¡‰(zzb[1RZí ‘€úXՌóÁæ8¸9,RÞƒê õòW¡Ú‰Åþ뢜x¦cš•Ãaç^æzqîw¼íäMP)·  6wÇœ{~ѬAº|xêöœÌ‹!D3®³öçOg…ðé1Æ!2 þÈ^âb¹›v–è0N†v0siͤ—«œ @|h¶žÀˆ3æcÉå<.¯ú}h+XÛµU,^Ùë}¼×»µPØ™$¥Réä4ýd§óîNç÷…Â÷ÇÉÚh4za¿Pšž_.ßX©¼ Iþ.Mß4^uì±Ý¿üË·â+·n}î—¾ô¼¾ðMûï_³Ê |:·I‡ûY…ñhjèpQߣG,/÷°qçvÈhûè:=»õXFž$Iÿ¢‹ ½^ÿ¨£²ç<çqÇÆr9ët*ƒA¹XÌ%58øàîÉ'§³³³û· ¢½ùÍÍõë'~ö3²éhÌ%Ö^d£Ê”u2*{Õ7 QZ«Õ uèçUɉè¬ú_E J"Á_ʦÛí¶œúýþìììÎ;%Þôé *kÔþñ™r:ÓÛív»ÝÖE´¦,Ð%ÑWä!€’É+ v… C².áâ@G¿…ú’®ƒ»¬b å=?o}ût8X‘|UËäÙéÝ„7Më“A·RÓPøØǬ|Vž»Å¸­Y‚‡·˜sm·C¢Æ£ ¯£ÇrìÚp«ãU†EÎ[þ„†À-¸óéâÂh¹Êù?ÝËù «’ WRmJrv¬kø#9‹#HLPv5x9ÏŸœç¿´™»7‹÷—ËÇFïéõB¯wP–}&Ë^ÂÓóü÷ÕêOBèFOÊó? &J¥³ï¸c¯bqÍp¸Ïî»?²cGÿË_~ó%—ô/¼0™žf¯zŠ Æú2ç’”ãýÌV͉šÝsÒ`òl¡=…œ6Mðæ!Ćßå;bƒàÊW_~íkáì³G˜üû¿ïR}tãÊ+Ëë×÷ßøÆì€’ Š<ÒüÂ’­[ç~ðƒn·[oµ;ÿüúµ×¶î¸#G2§‡AWÕ[ÍÉž›*”Ê„Ý.o›N§#T:@íN‘˜EÔ†¿®|wdÍDpj²Cö¸ó ãÄ”AŽ„ØÊ9YF2Ç(shT}ê E:ðsÅ¢ÏìàòÜÈ f¼zòâDE–¬?m]” Õ“´€½ÇèÝx±;w”ÃT‚,Êk ø–"|Â7ñú5¥—>“†ê£ß«o¹ Z ݦ‹Í™þ€å’îd—ñ!"a;}ƒÕEÉHš‹s]0÷ ”Žù/‡œ%ƒÔpÈGÆ%ŒH»—=ÁßøhE.„°$•<êëõûk†YV ¡ž$O áéýþïÊåJž?’$Û …&'³,ûZ»}~£QÌóÍY¶gžßÛn¯Ìó÷7¯j6ÛŸúÔ¾ùȇn½õºC)­^=55Õ}ôÑ~èCïxßû’·¼ú¯YDÁÔþt)”};%Ɖ­ŠR,t2nÌUÓY|Žƒ°còtN|Ø»œê …|üë’ûî«V«ƒB!És1¾vmci>ò<ÊÑé$[·bû6ó7S»í¶•øCa\Ù0ÜýXé3á ¬J®ùìì,1`nnNBýF£!¹ÌÜÜœÊ\SØ:ÎæççaÓŠ&T©TÔ ÂQMëjûöíîªÌçàf³ÉÔ2ž°ê!g‘)5vcšEùµ‹Ñ Rqòº—3'uÄBÔƒ‰@œ=b!¯U?#09,š§6 ·à†N•d7)Z{Â#ŸJ÷ ʬâcy#EžÉÃÑÃ~¤*‹î_¥Ó ÙlJ\Œ!,[×ìoг>ØÔ"­½b±ØjµÜƒBëÖ ÖTiTB#ágãéÐ^[Dý'Qå¨(Vñb\ïÌñ ?Ü-Í'LSßð…bñ[ÖÚùe’o8ÜR«]S*¥£Ñµ…¿x4}©ZÕIú×izs¥òåò)Ãá!YV(.xøáoå+—¿á •k®)¯_Ÿ=ó™ƒ?ÿó·~ìc¿ÛcÄ ¢»ðêLÄÉJ-™H}F¸Z­#Ò0¸³"ã¢]~ÇûÅt:œÜ|r.r"ÌmE é¥TÕ[‰´cvãGÁ¿¢ê).ý0P\Ì2}`ék‰öqtÂÑ6ÿ[F™yÚE•)Î"[Ùm•ÊÎ…2ø[ÇÕqš¦ívÿïJå#ÕꥃÁ›Úí_–J_.’ä‘þizº03“Ÿ~ú)Ÿû\ë¼óÒ4½£XL-ûãÔ„ÁØ}Ú]‡ÿx¿zuzÄw¼£ôÖ·Ö7o‡£uëÚ—\’¯ZUùå/KW\‘oß¾k¬Ù;ß9zÖ³ò<ÏŸð„ê¹çö³Ñé§^ñŠBõýï/^ý®ÎöK_:|Ñ‹šgIŸ;b1º˜Æ/8~„WDúƒ`Óˆ•ð*GZ如4IÕ¥¿QkÁ³?¥œèØÇM LcH/¨îšL IDATWôhšÖ÷)%W¬X¡n·â…Ù¢ªñV}~/ÄuˆK7êvjؘÂûZaTš:mú_= õ³ð9¼=10CÖ6e =-ú76<Ý!ðcˆO!Âù”kl <3ƒý¡ïûŒ"w`Áu–?Þz|8*˜(Ä/Z~8 :‚` ò‘ÑŠóDP³?œåü âó©a¢³Í “`ašGEµ ¬-å;þODaòAtùèÍ2hÏy_¾@)¨µhþGµšçyaÜ?(‹ç6›Ä‰·V«ššsi«µË2„,Ëþ¯ZY8ï<-w6üu;i~úôŽ”clÂb±8Z¹rpòÉé^{•Æw×½øâÊ;ßYÚ´)œxbØ{ïlÛ6ÝlýÒKó<ì»ïèÕ¯йdÔRP%™ýÃéé®HŠ7>'NšŸwðà2¸°“ÇÜÝÝ%Ð8]eéÍ?ž<98@• ¥$‡ÃÝ>®“Td¯×ua40Û£¹ñ3¼ „“aé¥3›»SóÉÐ=¤9;ÎC£l¹vŸ¸v>â$ÂùÝ㾃WÛ‰\ÀâQîÁ<¶}÷b ûrÈYšB_µ`FñœY"¹ø†hÀâLbàš%åñ$‡´2OÓ·9<žÁébþŸzýö1‡L³³·ˆÜׄ™TÞh=ð‰O»ÂêÆÿú_Ûk×.Ð(LNv?ûÙÊ÷¿_ºöZÇiš†#ŽÈÓ4¹ûîB¡PüÚ×BýsÏ­^~ù®+<ë¬Ê»ÞÕ;çAO‘‹´N| ¨æ]ødïŠ#5õ6R„"Pçtpõø¸Þu³ÙtEºk)x;òmÓe»u&h†j,ºBQ¨9FI´{ùŒdjeçfŠÖDä:d=-yJ^ÅÒ÷!l> -2÷$êà'­µMÓNO†:Ì 2UN„㦟nkáÏ®ŽäýFÏÍ2K‚tÄjcŸú Ò®ÇÚ  •(àcƒ®quNd¸ Ò¨ˆB,‡¡îb#¬Ó½ïå>ôÐh|:3-,7å ÅÝÌ;,²{X9K@ð —3Bo]Ë‘Y”;nUë^ AŠð ÿp¬Oöæ’äs¥Òª4ýZ¯§‹ùÏ­ÖãÑëƒÕƒÁh¼«õ»„y¦é™,6ñ¤‘4ÄmÖ8ú]ÛìÃk²uûÝË/oœsNïÔS‡ÏyNñºëôσAºzõð%/©½ó¹Bo’ ßøÆòƒÖ~ðƒP«õÎ>»tÕUùÜ\‹Ó¿uŸ1¾BsssÌé”Ëi¯§sS-z"P'ÁùáKÁý î¸nëËÄLâäG";|¼ƒ¢ËSÓ…®oe‰Îq@!Øù ™ív»Z­*t©¦CZ.(33£Ï䇡òë3§Ç6DÍŒR[ï‚_KHS[tïÑ”o'è2€˜p†¦.Ômºà… G¶+RÝ‘V-:‡»#²¥ëjݻ֧Ȱ߽ÏÁx@Ÿ3¢ ¨þgÛ FíÔÁŒ¸6 ä%:=ôùOÔâ>ѕ֋˜)hY9@…²²¥f. Qº(R.‡œ¥©r€Î#Gtz dL:bàS’shrù°*\’‡ò,;j4º©\þš5Ï|æ3×­[·aÆ ~ýë×=úè1izO£‘·ÛnaBÞ _ÈýÓ\$áÞ\›sv9ƒ8vµXƺ]{l"—35eÍé©§–¿ó]éê^{õO8¡öÚ×Ö›Í$I†÷ß?zÆ3ú'žXZ³&ìµW8è ìá‡#/6§ bd=^h>íiÿ¸ué¥Ý3ÎHV­ªÞpC$äö#J#˜øÇ8äÈièlW˜k,tŽÓò”Ó§ü‚>Ñ¢CøE&«T¢ç áúµ 9p$hú4Í‹SwGãs°ÌqpÌK@sOÛƒMÅ fÈï·ãNtœqÎzb½áŽLÎÖöqc4<–ÂÂQ³´TAó|Ö'ûS\g4«Ùlô§Û\b<Šæ!‚ÚHd@¾;έ |84؉~5ìg¶'€íCpB>`\qH:e]'i‡øJ¼üqE”ñå³” tGN„r»ÓçD]¯w,¢ª«|A]qžðñÏ®H(‹IšþÅhô/k×>ãøãÏ8ãŒ}öÙ§ÿ¾÷=2;ÛŽMÓæÜÜ)£QP“9˶‡ðŽj5Ø|RH¦€8Jî ;ã–u¾xjIvOgÈ;"ÅO|bpÁ¡Ù,Ü{oùæ›ó‰‰öYg>ò‘<ϳ׽®tÜqCí„$ÉŽ<²ûùÏÊådûöòùç×n½5˲äC²‹/.ÝpCaÜùX¬OÔÓ呜–ËåÞ~ûå/{ÙÄW¾RÚ¾=\uU÷u¯ËûýÆï~G4%iU–ÇTMï P´³'…县 @ȽClìȆÛ<ûÔ/0«V«¥®œ Z­J»S—°J«µ*Z­r¦aKÊi¥3ÄLˆ\|"Ð1^tìîSép±sëiœ¸Ã?d o1ÒžA7MOÎu¸°6ø¾ n]@­VƒŽ¬…A¯6‡çyÁFP"xéLÍäý$^1q‚¢Ð©>×B$š#Ɖ0 R,FX"q‘ÐMgðanÐù´Æ\s «ÓÁ;C0ÕØrÈYb`ÍK{½`ÊgOÙœ”B©‹¥·(ÝL 8UoÝ¥ÔLÕZíCy⟸bÅŠúcÝòÊWÞwíµÇÞ{ïÓÓô°~Y(\V¯WW¯þðCÉXIW¨¾1¤R§T¹—3½q­þ}÷ÝWã[\¬î ÔúEe=V­VËårvË-½| Úje;v¤Û¶e…Bö…/$y^,›¯}-‘#Ùºµ~òÉi–ËåRž‡$QO%Ù¸±vñÅ®P!™¦»;!*˲lrrø®w­}ÿûžœlüÙŸÝqDžϾóŽw”:ú† nBŒ¢…ÄÙÛ>ð é•çËúƒ`.ú´N²€]ÊùÈ”°¸);¨¢[›šš‚ú¬—¥¹¾J¥Òìì,Â-)qA:Ã+ÓÕNMM¸f¹õ@'aZy”`F£ÉÉIÍÆÖ)¹|{r&Š¥X4¯š~8ô-ŸÝç-•ÚÍfóˆ#އ÷Þ{ïÌÌŒ®‡¹æ<&÷x•Ïl\~—W¥•£Пt£° 'l®:ÍÇé'ºS%sTœÎLqó´è”À1ˆJWχR”Þ«%—µ:²‚ÐÛ‰!¤ST™Ë!gɾä˜Ñy<“—UÜr\ÛXøÆb+—`ÓYµµJHÙ诌²lS¡Pܶí×?ûÙ!‡²nݺƒºÝßÞvÛûzh[³yû›Þô•;‹¿úÕ—7n¼ï5¯™¸òÊý÷ÛïÞ{ïÕá¼ Ý|H𔟠 $[·æi:o€ÚÖ­Ù#Œ”¦eYuçΠÄÿÁ ÒÉhTÞ´© ]( G# k‡òCcH»û„Ÿê}NAÒs_ܺêªÚÜÜÇû„'5I®ÖÏŸøÄ}öÙgýúõ›6mŸ­X,Š%A\¡)-:é*ph`XŸÁA œæÕG¤6Œ¼®#j«ÕjµZŽ \’B’0ÅùK &èâQÇîaÃ7å8'מC£Ñ8ꨣÎ:ë¬~¿å•WÞzë­Ôë€`ÊÛ|CT ÈUŠc ÕIë¸ÝUSOIüÏw©Œ-‰q*¢fkný§_oÄñyÈÓž˜‚ûQãì½PÎ+ç4±ŠæÇÜr¹ÊYúB‡Æ`4SÙ'Ä@bña—4~œý…‹-z’ïd~ÑÕåò³{½½~ÿû/|á tÐ7m:fzúÑܺçžO}êSÿó~sÕªoÜ}÷˶m+ç¹æ;÷”¼Þ3)Êyò}þ‰l%]ò&—ŽÈeŽÓÙ1Ð<Ÿ1Jþå >¿Y2,<Ê\B´º\.§ç×}÷»wÜtÓÏ~ö³V«5??Ÿydÿ/ÿrâÒK‘i—åÚ”æCF÷)Ôÿ3-n4Ì6¦Cξu— Â«ä©j-ɦó°Ã;ì°ÃvîÜyß}÷áÄ£“w5á,É âö'º˜v»­ë„Y€>¼¯™™Úã=ôЕ+WÞÿý›7ocù*P!v)Á&‡â>®5¦ŸÑá(¡—Œœ¶ƒyþ”8ø]²zi3<öØcyçKOì8d}Æ´~×  †©Œí¦ÜOZ9*AD£•BdòQ@l~…Q(¬¨âèÅ:b™[SrÁ“Ä‹Ã݃"c-FQü|Òp8l4˺œ%þbö”6’sÞ£©3Nw4ŸæÌâô}.ˆgâ…B! …•õú³ìm×__¿ùæ½§§)—o?çœÃï¹grÕª§<å)Ãáðw{í5üô§“¹9Mq×ò cO*ÏÙ©ÁÁ|³é’”éP“mptsÐè±ç’µ±U8ñir ´Íp1 Û±x Gœà<Ï !4®ºªûú×?Ôë•o¸atðÁÃão~þóÅ;† ©¥d¬^d ýÓ÷©ˆ%¼ûaáðc"Y‰sm=ãæ½kuMOO_ýõ6lظq#ºQ´Y©®ÛÃõÒ Å¬UN^¯‡ÍÝxh¨hÅ®KêÀ<óÌ3׬Yó£ýèꫯÖlžÇÅÅc?ލ„o|ùX$NR *"ùpã}š¦þÁhôz½[o½uff¦×ëmÚ´ î"BnçþId-Þð¤Ò½ó~ù4’EdFYѦvÇ:*¸Ä›—‹Èr)\AïAºÛž`;÷'âæ!g†ú¤5Cqïü~R[F¨,á×rÈ là•+WV*•mÛ¶¹8‚ï'“ñ1ö­(a@§p§ÓQêJ£ÅIbZš²Äxé`püpX aŸ4Mæç[y^¸üòÉ4Í_øB7nœžž^==öØc°wZCìµÖ¿µ”™µꪲ×ÁÚËîX£‘²ºßï__.Y­ºÆ—ggkåòmÇÿ”×½îÀÜrçßþö·úéOo››;v¬KE¬ lTä%-h!Ñè*ÂØ)ÝRíaw}‹CÞ>î½MÑI’ŒŠÅôIO*Üz« Í‚Yn oþâ¼pZøèÐúý~a~~âïÿ~öýïŸx󛑺Œt1[ÉÉ‚àññT(Rˆu¿wxÏ~:£B§gë^Ua,–T1¡OÆmˆ"CøX·ÛUÿ&MÓúØä´Óéð Õ Ô‘±.k01²Z_®$FŠfÌe«P(lÞ¼ùŠ+®¨V«ëׯ—·ïTPOžÓŠ7ëØÄ+Ørïס9xw®¬T`v3 nª(cÈx4Ûv §6Ón R:(A!xPVf ‡}›&ç.¨­Þ8aï@W°ƒ3@;…hŒ †#Nîºlû¬R¼©˜ÀË'Çöf$ÃÀ¼ºZ9Kü5ï¼óN¬«¼9é\R7¼qÐ AOä«p¤Ìzñ@‘`Ã7R’gÙ¥Åâ—þå_þ­ßßpÜq¿ýíowüò—Ýw߇‹Å§ BºÈæÈŽ îªËJåì@.Çeàn¥l46 *xažeYï oHÖ¬)6Å_ýŠÑXɇw}Hcøcön÷«g^¿à‚`b#˜¸þë܈ŽB«ÕÒoo4ÓÓÓÈ0ÃØÒ?'Œ=HP•Fê`&ÇPØÁŸfa8ß #8nG'¬ M℘‡6WJ)較³€ªW§ÜbÀd§Á,XZ­VµZššúÝï~ç\R{–¦sœP”tV(è–ypr{ªOý", •ÆÎ®isý˜¤K\[¦Ó¹^¯»X˜ Æ]n#CXÚHûZìçù͸o-ÄaÁl{PbøöT˜WžÍ<²íWB ö² Y«Os¦¨ ã–CÎÒ|i¡lÙ²¥X, 7ÇÑOIÇRèÎs²¸ÒÁ øœ‰¯SÌ 't> .H’gÿøÇϺñÆC¦¦Öw»W”Ëw–Ja<™ªßïK8¦=ì•S½^WÀƒ)«UèÍ}³^¯¯Zµ*If_R§ë:…½¸ÕGïÜsK6”¾õ­þ™g–‡Ã즛èèp³ÎÌÝ©óçøàËoáž:†Àìž6˜d Ïk¥‰­pë­ Õ+ú3Ñ»wÜQ¿ßdzŠßï`0ÐëЇ;ŸWuž è–5ìÀqÎ8ÇñG£Ñüü¼˜`›žKùÈ(&Ú©.d‚*Ý`XwQr,KÅç—ëqé9û OÎ\}Beɼj­Õ’Y¢èäb(h<’9ÌÃ3²ñD“ŠÖ}{=Ò8½HÇh&¡D•³x¨i¨¤ÉãÜNrÀ4@FYSRsãP¥ÉZXá^-‡œ%ÖåxßÛç¼*ëá¤`º›@éL±…¢ºÿþû‡Ã-[¶ ,ÇûÏó)–Ât_íõÒ$YÙëM>öØžy~@G&IBj²ÌŒI”@Ò9ûêõºN4ÜdUh azàêÕ«×­[×l6xà|p~~ñ< àãLrypöÙáž{Ê?øA:”?ñ‰îûÞWܾ½¸q#}…0žmÌÖuÅ5´Z¸‚À_dëøþÒõõðÀýztqÏo 9åÚív›ìUҼVRZ ]+{S ð üŸ¸~&6 v€þV:bï-æ$yN9Q Ä(ØLOƽF¤cïÄ==†ø NA/™3ˆœeʵ•”è:5‚` /¸`¨‘E˜. 'lêuw¡u^%Rp-ºqXêÁ`F Í[V $èB®s»'Ù§p ÐBèIº‚2ª.ŽÁ€nbí£n¼(²äÐ=kÞó`Eyé ã %š±r–€>@Ç‘ÁQK›Ý÷³‹HÀµ"‹²á­øb±7Ñl˜7Újµ*BØŸÅb±`L03F½ MF:VzÎÀPÍfó ƒ:ðÀ•qoÞ¼ÙID‘‰u^.§gœQ˜šª|ï{ÍfsP,¦Ýnñïþ®{ùå•/})üîw~ #:c2µN»½aTêÃGÍ3àQÐ Hú@Ÿæ äBºíi£à,Îw ·_Lvr‚o4»^Ÿ,kè|4!ø½Þ·çxÂ×NzFR c û΢VG'?áŽ[¼ýhH¾šÍ¦š”^‰bœÔÁ9ýN}ä ÓOÒÿî¾ûîÏ|æ3gggo¼ñFy)¿‘Á ^¨'PW¼ÿO ¯ÇÂöô΢Z\XSÃEÃðÅ£µÇu/ £ìÇëéh|0Y‘6oädl¾»£ˆ8ÓSEaF¿Î§ðÄ\ÁM ½„ÖË!ÇD©Âë¾5n@Æí¸cå`Ü.Ì®µ~ýz¨Âæº6ž»liÔJXhâ°£ž‡ÌTnrÌ>*7BxíÚµ{챇æ•AÑMö”W«£5k*wßí²Ê,Ë’ Òƒ®Üzk¤W ë5{Æ­A"£{WºÑ*pcSJ:Ÿ>éŠw?¸‘Âxà Kl7¿r-H0Ù/±ó†Ý4ÁIAîû‚Ó>4-<@}&©~©ŽKF-@…w3Ø,™>O ëÝ"šX¡=œ¼N 6AYÁ•žaUWR¯×÷Ýwß;v@‰,ÃB 2,v·€n4Ä(N"ã(}м«ê註´EBiV,g%7<×PÂ|28#"Yˆ~MÒrÇ ÇÊØ;<ü¨=$àj6§÷Gá‹“­*-ÃÌb9ä,e/‡cÂ'—°Ê}XDà~Z©ÞŠ\lïG<ã4„oxÞÁ|Ó µZMŒ#š`ÇB]8ñ#_zÚªô½u³<òˆ Ûgff´ÜµE©? ûýä3ŸþÍßdíöÜM7íµ\tQùöÛËßÿ¾ûº}‹ƒãÁ,OT_ÅÝ/’‹w“J¨z¯ì^Îw×{’×Ó]à–£èBš‰ŠH ¨ó…hùz¦ì$˜ ›KÊ÷øp?è'þ7]å;‘À ËèÈ1–tž3kvvÖ«@’nž ¥q ·.x°"ÃÂÉ!„Ç{ì»ßýn§Óqª.âGZqÜ…Ycš[t+2¯t¦¥ Áͼ˜# DœL2¨ÉT0 gN¡Œð¡GãýK.Ñ^)üúוsÏzãôZ!¶:´åþÜÔg¤‘šÇ{WaáÜ*Ú'¾¥õXT>ºåÇœ[\ƒõ-.\@êºb¹ˆ«îY*zST'öxYRº·˜1J Šòâ&º'p¢7+¡ÿáo-£¼ ‡ë(øtË–-~ #á ç’©Ì…*&N¿ ø} -²‚L}Ür°Ùò³ðrÊK §Þà„D&¡}ÊŸuG2­×ëžÞÜaoñü4~Ç{¿$È#¸ìxÿ˜S¢Z­j ³84\m½8å»Ke@°rì!ΤBzÓh\ÀÁ[§–Ç™v©ï‚±ÄE/nQº„¦ lp¢E‚ šö^l`DÓÔõó"—'&¾üò쀪÷ܓȻúÌ3×mÛ6÷ŠWlÙsÏÑ©§†þç]ãa^ûÚÒw¿› …ÙÙ01Qþþ÷ëßüæp8 O~òèœsòá°pÝuŸþ4MÓü•¯ ûí§cÑÄ"`@«NÐyŸté|eNÇV+âtQµèÈC¬.3‹”‚>s°á§îu!˜¡^Ò¢¢ßîè«¢‚ž98-tV‹/'¾íê!‘!›e©D;W!ŸuÆŽÂñŽ¡•.Ñ€~z,µôVÝæ#º0¿ oÉÐÞóip¼éÕ. gꨶ£Äñ‚Þ€Æ *“Wù0P§¶BÛcpF„ŠÂX,Á4B¾I°Ðvhîå³ÄUŽ¢›D ‹¦¨‡ °Fß™ÜѨ¾¨^‘DÃEïNX FÓ|µ}ƒkâG ^ç¾8ÞSÑþi·ÛI§Ó:í´Þ[Þ’E£Á`Çììüë^—nÚTüêW³q‚YH’,˪ï~w÷¿ÿ÷â½÷RW N;­øío'cÂ[©Tê¼ím“'œŽlÄ.‹fÈ>u³¹ã¼ð¶/ôÒr‘Õ´Çò]†­ã6’sÇ1ãñ&ìdxnÞ–p̨ÊÛæÎj£Oî×醳ڼ†ìõÄى˾tëx-îš0ºã#8£ëÙ¢1ây“¬¸ÚÑÁUwÛ$÷¹ìàƒ‚ÇSË·ß®ã£X,ÞóžÆûßï&7˜\y_„("¬IBÒvlZŽŽoòVïZûÈH78þ eÀÙºÞªu2ãŠÉŽq@ñ[ÀµÙbÜ&~Hü[×ýAg,›Át¥0,åòø·Œ´qFO†9=¬FݵçæzV da¡¸X8!KÎ[kȇyŒL>ôÆ•jë¦ÒòV Ée,B¼?yøHÖû¬d<>‹“°á3CÕFíýˆ¬áV¡´ÙœF¡ŽâÆÇ ð{½2Ö÷açâ•ãJBç =P8Úftѵ[v’^â/ !©ëÉXO ð…EŠ çÕS!%¹::AÆàn¹þÀ+GƱ/£"¦ßÍ~÷â€âÚ}wT0”Á9>³,J}fã‹_,]sÍèØc³ç>—Ø\¾ûîÒ%—T&&FÏþhß}w͸Ük¯¦Å;“qçst䑵ø‡ÄˆËžS;ÐŒÅ!” À®UtÏPnGGDgt¨”¨S)ô#÷9áKÑUÁÈ"×™‚ìF5¥“z½¬t0])§z3Áä„I’Ôëu– Ä6¯D£Ž`±X”0+7NæYŸ©è#fÍš5ý~_„N4õ?¨9@ y>‚Åk;ø].?ŠÔ—>|ŒîŸà.:½˜p™AÝã¦2L!¡(ñÁ€.ubKÄdóö*Ö ·¸’Æ]ÝXi$pº¤Ö¨8iAØñ¤W#,×±8÷‰K¢®ÕjÌ8y[Öå,};á4ðãë¿€RƳfï¯èc¹ X„Ÿòä#î5Ëê×%"y'™äŒ·å}BYÞ0vœ,ûøÞž.‚l’¤;wZÃU*•üCŠSSé–-£;Â~ûF£B³™î³OáÞ{ÉÔÒ'?¹ôÀa8„ÞÊpµpÒø¾’\ר×j5·3q:œÞ…ž€«”<£$×vîr¯×k4 —Þjâ`r&®ûù uÏoÚ;ˆŠzAx»ÝvQ<§›»u j>!•×£¿/úToÌÓt»ñùùy‘ýÃU÷ 5‚ìÌøÕ;ðÔXP“WXö‚Ìêɸ u>}Ê-0@ž=Sdª«qÛæ×Æ†læ¹£ƒ·~›‡B·àE.Ô*IµD†ŠCÕ¹ÇOûhê:qYõ¥`è>UzNcAØGê£5Ì’[9KŒ­¹Ù¾OÉ%‰fŸà#ëÜ$H)@‡Bãί¬ w'ƒìë@<4üˆçÅÆÔãÀAdëÁæÆïº†j5ƹá†áI' /º¨$¥ë®KÓtpæ™õ/~1[³¦ÿÒ—&Åbž¦•_üb8öÞ{øìg×_óšÓèÓN«}ç;I·›ŒqyJ4o`º@É]¸à`Æì°ÈÝËg^…±Ùp–Ó 9RVÄ“¤,c÷2;§ßïC$S*-(O,ÀRH¨ÙóŒü¥» `DÇ«[Ÿ9÷=ÒmwÐñJ#µ`Cç¼Pö‹$ƒv» )÷Vp;‰–„Å€s ¨¸®;>D«Àhùpþº$Åe­•ÑÙÆnåŽ Ïto¢xhd¦Îb/AÒV^JÔžñq„:¯›I±É -p+6¯RMo4všÁr•³Ä%̸ Ÿ±µ`¡`Væ«Óq\7h6øh?ÊW ú¸Ïòœ9­-W­VF·Û•Õ¦O¡æLì'>*xÝÕãäw…B¡þ½ï ççsæ7Þ˜w:é{TÛíäæ›Ó$)ÝqG–e…n¨ÌÏç»ïžlß^¾í¶Q¡Pܹ³ôÁú&©}ík¥™™B¥B:Ï,' {—؇Ò{uB â¾8úXÂÎ@嬡/(¸¯âÕ!X\Œ;­¥iÚh4ÊåòÜÜç²³¨Ývžþ;ÓD¶=®™õU!æ¤'Ý.‚’äúDB¯{æSvÀºD ¨'s” º¸®~…gè fJpgpÍzÿÃE?îâ,h1¢áã'»õóbŰjÕªf³¹sçι¹9P¸(|z•é (m6‡7¼ëîãÎHVl6;œÜ-€ÝŽW‰±nMCÈ # Î¡xr ×Ñh$W x±—–>°r§ñ°h Ï Cþ£öÏNeë`‹k0YÁpf‹|j}FºçÚb ÛÿýŸþô§ßrË-ëׯç â8Õ8ØøŸøÆÃô+¤i Ôî½73aléöÛËI’"ýÍovmË[nÙu® k·«wÞ™˜UAz×]I©” 4ZüNÝ»“híÖ¨´Äû ‡Ãûî»aŠ`ow{ êZwý×ÒàÈÒ0S/×QЩ©©ÙÙYº>}9’ÙGD»`ÖX²FM}@*íI ¿…€Áa§Ï÷ Ö@‚ˆ%!§8¦Ä°"§\{Æ|ˆšÃ¶åÔIDeZJ,á¬ç…²2EUw΂RýwÒóÖH8S~é‡ï¾ûî 6LMMáz;Ù©}nÖé´? ð°!Åt6?ïÆç]gff|º'¬>f~±‚ÇåGÞð‹¤{úL%[Ýn×gVávãúrÈYâ/oΓí:Ã’—Ì‹jƲÈéô¸I;È€[ü:õÀ‰’üWòuëÖ ‡Ã»ï¾{óæÍ’§Õbx7­–œæ2æÈêÍ›+ží ùÏ{/Ä© ®µÖ–v‹î°Ðz’Y×pÜ´Û?j8=®‡zÂybf_r¬) Ýn—ͬZGy4®2ŠK§s({CN¤^Ý>óäåIÂK!â§¡n_‡;g™+[} xÜõwÕËŽ¤Ç=}GD‰fÁèôÔò¡ì^¥Aó^£üIHé½C¿}^ ïšcïh¨„kÑ´H\ÌHŒñ÷Ŷڹs§o[¢K°é!n%Q9|Fx”»èFÍÔˆîÌ2sÚU;¡Î¯¥I&ÂBÓZš~ëéŽï,ç¹,‡œ¥äúìK'b:äŽü“ˆñé,[åeÊ—uø’4±}‰s""ƒôÑGÇE7ºf!rPFse¢¬9š'ÌïÒÕ .ðæ2B(åÃ9‹ÉÙ±åçˆd,¼ïs7—ïæ ÓÅÕl‰f2:â’—B{t-ç5mÑãT•~…ÓÜÍÈÉ9mÉÜÕ–p…/ d::îí€ão§Z­ÎÍ͹_ßb§·wóûr£°ˆ&f¹;R#óROÖL•õLÂ7P[4.c‘¿E®è$ïµpvã<æµ#oĉ3Þ+õ”‚`jXaQ|,T4»H ¨PýB\V7ŸÅ%ÃønžÆ¾&B÷AˆN䋺JKèé¹rôrÀ[èBƒ®xAÍÞv7FB{յ啣 ì~¬ ð=Ÿ¶¾ñÈ#€ÈyyáT`-Y‘[Ü=7Ä„…Æ9a¡?!Ä73± X£°ß~•‡æuk}¯K(¨“Bäh¤±^¨kcCú¯èëÖ–`Ù>|:jÒ|ó÷âØ:Š&M‹òxËaìÏæp¼ˆ~F#¥£sl›;vG¥†Ä 9y]éÉŸ{½žJ(<Œ= (T{‡†‘ N`s<Ög‘§E²DòjJOØ=õ66mmHÞ0÷l7Waó±Î8¿Ò”ŠÅnDò¦Äô©Õì5÷Cãu¸ø¥ÎâˆNâE$ æ‹ªU%zÌ Ç:â[Ò{r>õ1ظ<O–Ðíf9äç9Ér1¶ãðµN-œPLòé„ÛæGÎ#NXçÃYkË©EÄÉðµ_||†(;/!‚;zÙNéy¶» 5˲Ñ1Ç´_õªÊ7¾Q¾ñFHtsssº~ÅN77ß y'—GóQ­VOy›Ç[Ù^~9ŠMçŒ!óÞ Ç*Øý~—ðAY°ôXžxúàEÊ£ˆë]u-9òpv¬©Ý¹‹€9”V”†tÛËú„‡"Fîm´y<ýrÄ•…ªl€Q›,Î(&1ÃÁqÓ¯kyÃá/]§Zè yïN’æ¾"+6‡ðá%H°›ˆ4^9ÅÃó$öÖ‹h\ÂÂ)¨‘á÷óé):žÁSE†á³Gy>ÞOu'-râ`#!¸T^ sù¼kµr–²‹ãÎK4ú`¸#øqé¼Ò,ËDèv»>2þ¢ï„Åz. oWŒ³”@\)›eëÉõ¾šÁåýh[,Pwª L¹hÄ$rø¼çeGYùÀ†¯}¡^Ïo¼  >•ÓŸ‚ÙrG—sƒðàØðõ Þ Êø»hªJ°ÉFœw>UÁu”Žr²ޤšÑð.×l¤%(¦áÄIáý6ÜÜëq>®¥Ö‰(SFàJâýœS~ A€Œ¨wú¦°¦È: r°³6œa‹Á½Ã}‚[Eb)\ƒM"×(vÒÛçwq×<Àa§ÞE€˜WH|‡·Ãªö‚GW­Á¼¥½â'Þxl#UÂX!å¸ZÈçôD²‡È¦Ú纲þ—6Þ„eµ_ÓˆLhTRPOxeM‡Õ‘¤’…zÈ1tgûzuŸé¨‡•/eg‚áÚââmŸ²N÷%¹3å‚ÁÓT%(V¹·Çã™øÑGŽ9¦þÅ/6fg+ÿøƒcŽ™?üð©©)8ßNú`ñålgg1Ì˜Ž‚’qŸ!Íyę˦§+òΊØçÞÄv4ƒwd'dÃU |y×Á³dC£žêºñÔpæMpy•J×WcYi~ºa¢-õ‘Ø^µ0dÝgðð9âžýÑ"†ÃQqÝËhê-wµa6špZ ±Š^ú/”Ngsè@9K %î3”¨¶Óg’ é3ùEîËNðÊÀ6{ž±¸jTŽÒjµ 86ü 1ä#Äñ²Œ”"ò6…2 íP.—W¯^ÍÀ@0= 5§€ÅEs¼–«œ¥ù"òóJ¼÷Æ>Þ—öfŒçML„¦…hÜ»5à “O&‘wíúÿBê-nŸð†»š¸å@W4E-èúŒÅžZ»Ò´£îŸvÚÞ—]¶v÷݇+WnÞ¼yðñw.½´Üëî¸ÃYvðPÝ$ 9‘‹;ÂA$Ú£‚ñЗvÒ°Ô!˜Åî“ 8ó²äO †:²ó0?áÅ«©ê3,úÿ(JæÊP**Šo`ðM¹:’ó‹(•Ñê'ié’ xãÄûî)ÁýÑÂóâàñ£dü ³¡tŽ  µ÷{DØ —;C—Š_Ž× ôö¹ÿ-{®„u+èª 6ÏvúÙè™¸Ï 0ÒÖø?amè0֭â9XüyrtÔëu‘ ' ‹ì—ôá®âX®r–¬Ê! UÎâmÅ A"g-ŸÏ0ànE㣣)*•JFCMW÷«p4Ã1 {ê¤ÅK'rLá|ñíêqO‡)¡$Mǽ—¦iﯨýÛ¿íÖlqÄûí·_¹\κÝò7¿9|Õ«<Sé£/t°2ßQÔôW•qó>Qð Á‡½^O"¢-1^?¦tÞ-о©V©q]}éÓ‚Mö~5ŽdLAóQú9ÞGÈÓÉH·½€A€÷Õu*úý>u¶žh~uv:Äîv a÷ê•éW£ÝáŽÜUS^ øÔéJüõ·I¦$ÒÿªŒ¦PÐ?¬V««W¯Ö¦ãXþ,¦-° ½²×»PÉ‹ºV×µý¡EN3ú"FRŒ²±üa·B¢‰œ^yø˜sû´ž°p®÷޽=ÿ »ýá‡ÖP»ÈË€8Šë9 ${y¹ÊYzPŒ§KÇÌJäá¸t(#rarî#0¤€àôñÞpÒ0D `~8¿1JYÛÞgfDdPÏÜʾòª^ÿÀ眳uõê;ï¼S¦é‰'žò”Æ?X£ÿô¥½w ,¢`ø©¤mì¦ÈN"ò<ÚnJy•zJ“““ŠFn>T2 P¿»ë¾v<ˆôÙ¹—‰·¸]ëç~eà~üj."Iä‹q)£Ú×»âäìŠÁ€‚•̺^$ý< ˆŒ‡½‹Ãнj±ð€EÎÔWØÍ„t¡R©xàÇ{ì#<ò«_ýjff†UÌSÜfÜEiNž¤t3xw»ðžŸ¢ þ ^Ò‘š@ω¦ïø¨ro­‰“B²å0i4Ñ„|R•·'²þ¨}yÈLDËÞ]”<Ò/áü‚å³:ð~#°22=|)x#e2KÁµ{X?E‡ì/oqc¼õÝ]§’ûø¢ï c±7)¶½óÝAÒÙ@„=HDØN–ey»Ýøò—w¼þõÝmÛ’_ý*}Ö³†ögå«® NŸ&úç@OÔ…‹ØÙ:O,R’ú”IIÓ©ô”µy,ñsÔBù²Ï;Á­¥_¶¿Gºý®RŠPYäèF¢ŠÁ !“Pe‡GwrsŸ ‡«žÓƉ ãApü•$˜“9xËäää>ûì377·}ûvŠp×XHÎê™Ì£aj‰­Àq·)K‡Y°¡Š»îýÑGËÿí¿Í^zi¹ZMO<±ñž÷¤Ýn¶!l²2 –.w/ß|®(°¡Î ܾ›OÏÏÏsÎ]‚MõÆ•Y—2ã0>=ï [u &¸Ó- ÑU‘­»á›ƒN:ÂE‘ÑG|ýd«ÕZ»víƒ>ˆ§Í ž˜ÿs˜"ÜSU£þ‰ŽWð=…0%ZÖÌf–Õl­VS– ô\«ÂN1Uz&…"5Æ«ûÛ߃͛7ïܹ“ýÅn’7½DH¸‡D®T´²hüT*íV˜ëîšÃü\z*¬L¦µRÕ[ÉÁKvÀ7=Ïi°œ@‡póp¥ŸWÄòȇŽ#º˜Ü‚cìJ8»–=Ö–ò šŠoHÒæF¾ŠQ›c.Š_ 3wió‰è4\âS,8âˆSO=uÓ¦M×\sÍŽ;˜@åc¦ÈëáÔ9*¢íäã©] Œob ©ÇèÌ}çOG¾ëiš†4-¿ýí£w¿»vÁé¸HÒ1™Ôa ¢ÓÍç–zÕœAÃp4Æ4ê¼D„ Ô:5T D3÷*îGçÚ#²oì3›Õ«1õ|Ɖ“6†ÜmùÝe5ò#q"€¢‚ÎzÜØ”<úè£*bÔ !ÌÎκŠ_ê$]RæN§Ã+“,FÏJ7®Ù¦néyŒåí¥O¤ƒqÑxýQ ™Žàûï¿ÿá‡n·ÛBÐP›¥¦ñMÍÇô_ŠbÄÉå·‘·wQ0‡Ÿ´x°7,sÊe¸¯Áܧ|ð¿ÑPƒÈ5Ào0T‘»†E¶ŠªžÝÙh™$½Ä!Ö™£œ ¶a¡cùbÃ׈`æS¢ñÒÇÁž²¿ééi ò‚¬¥ÏU¹4Ï¥-ZÐôœ#PbÐ á'ò-Eïâp3˜žèÕ÷¿?,ô•rž1m*® E‚}ôÿõš/ß⾇‹GW¡ëf·Ër ./Q_]Þ§g¤ùu‹‡HpI„&?ýþà¼g¾xøç {i¥{ìv»˜æ¹ï/üæX·Ûmý“ÉÉÉãŽ;îiO{š¸Ð 99¸êciþA•ÝoÐ}'£Ñ˾ÎõÛƒA·ÛõðN©ˆ:üa8ÎÏÏÃ/§°sN—ϦsE”÷8Ý»ˆ·ãŸEÔÃ#õä^ÂØWf±“&Š=×].îµxŽ: %–“;5¸>‰ÛtrÓ¾}›‡Þ¾+7–{9Krœs̳/3»k¾ÅŽþ{@ò„ˆ>|fý²D´â7lذyófÉø=‰öt¯8þBßÇî…æ¿¢’p¢ªoNî#8º;1³ùIwDÍL—&8rÈö Ý‘•Aá8ÝhªCbO:¹ ÂÅ+îŠMˆ¥¾Ä&D °¸7uݶǻǾii„¸ß+ª,×Ü“7ɕܽÆ1ÿÛÈ=“bvvvzzZù¬J.Ÿä¿aŒ¾óãý ƒÍ—äÀ æˆì£1 ~8ÃÓý$t,|Ϲ c« }¦“q–F“^ÝM˜ôzwf"â’yˆäæÃ®.‘†qã´|ÿÔ‘Š€r¦±ZùH)ôg‰öqZ_ ÕŽÔ6ŒÆ!7åãÑ]Ôëõhðr/çO"ðªreV¤Âaʽv…2ˆÈª ~˜Xœ ½°pVÛÎ;ƒÙˆ96M  ÍùYL>ãËÉCÀ†ø«L ×zÀ}Ÿ2µ.I–;½GÙúzqÈ_¼é ”á™]0Éž·©ˆü:Ðzz×r‚ÿ0ßS¿ˆ§áY"Ëâ©¥â7® «Õj>×™sÍD×g¯G,8Zå€! ‡OègHABsss7Ýt“š:T“ v»ø¯ó1äþlè#=w·:gäGæ=>ΠH\¶«ЖòKဥiÚëõϺ Dä¢aLÑÂÚA+6½NLL”J¥-[¶8ÍV‚W*ÀYú1¥¡›ŽŸ=‚jÂ=5h}¾"ç’Ë·‘׸rà :”Þxue±ÇÒrÈYÉ»:,tªàH%­‹´œÁØXv`ÙÞÜSö¤?sBayµy†‹·´“‘èˆÒ‚¶àp%âã (Vè]E:‰Ï#ÁˆÌu£`zä†b¾‚×c£ªîX„7®’î@u¯ßE¡éÚšˆ‡=è]fº„‹ "ŒT˜-„`þuò:rò7¡öIdçÖ~§Î¯¥Qá./T¢8Xëç½ÿA¿ò…Ë]]ÇŠ  ¥³+ºàËè4Þ›¹jú@- ÄC\9»ƒšÀ}ÄA“¸ßÈ GSsZaÂ>(Œ>Ä)ë0„033;ràļ¨Déµ 'U>lÐç#T æK™ˆNƒ>“¢R­VS±zÔÁ>ma¹—óòõûó\Â߆pÛŸ™ áÓGÑýð‡Óuëv‘s^øÂîe—ußñpÛá?8øèGGÏy Œ7"cZf79T‘€ñË"3B¯@Íîçf„t»½Êâé8@¬~Qz¥ÑEjÇÒÏ$’¡”tú¸G_Ԝמ`2Hªóbù'ܬ7fý›¨"8ŽÝ՛ΰk†¢ÞÏb` üMÈ€;Bš ï;cŠÜ‹•nrw69Í*÷ýõƒÀÛû()”Þí½.ºóüø ͨ]‘êFþÜ}ŽÊ'(ûíp((óo<}qA´]wÎ´Çø`ªR÷3ô9=îþç÷%<Å£¿êv»³³³ý~ß©~ ´N¡±Qs³³Øn0ƒÌDí@7Îí Ïã¬%¾Ÿ÷½üAEÒo-W*6õÿ|‡± :Èad…°rþ·}}%„cC¸Ü¾sN§…pZÿÂcöý·†ð?\üÆ7†çWX¹2?þøôÐC“ú§Âþпøâ<Ï{ýhõG?*}ã£OL?ÜiQtA}j€ÏÄU v„¤†å\¦­è£jPTqFk©¹A/Ð|ÔãÅØ‘êÓ‡Eï´ßïCÄâ}”}4Ú³™°ÐÖ×Û¤µZ̓«7}&2b‡MTÐø<ù]¢ÔzMèc{8 9úçîØíTfp :ºÑÞvýSX8ÛѱøˆpQ,kµ,A7:ã|÷&JÔ“wÀÍkrNé¦tZ©È`ðe$ºt€Ý»O_v8`."«…笪ˆ”Ùû”®It£IüÙô``:|ÍÏøSr#WôùÂ/7.ss^­ÍèãØh™~þúú‘2š8»Ã©Á¼Y£ðã~}‹'2 ¨ðŒP-IÆ Ês±j4敞™?O%”¬ Ÿ –Túÿe`íÕ!ü§þܾswG„ð@a•}¿Be4Êææ’J%ËóÂOZþéOCš†OÌëõB¡U«Ã™™d0È …0]R¯(‰ˆà¿ˆKtšp*ùê²¼N6Ì¿– E~äÖI Tß@ç°û@*`RÂ`ó ÂXì,†×™ÐEä¨>MÀ§†s)õ!I»z‰qÈ>ÄÌp’õ(UfSøÜyÁ±\—O–J¥n·«×Š(R/H-±ˆ¤îfBÑäÀZ­–é¨D= …µˆÕ™ÄüŸÈàÜn„ùˆø´QPd2: Eï_zvµ˜ÐHªujYÞ4„€ "ORýAX"vJÎ>]9ÿûË·BÊ»!|:„;C84„sBhŒ¿ÿâ¾zðÁé[ßZúÃ’~?äy’磓N Ï~ví’K²¿3/ø|&–óÑ Þ*c=‡…Sµ¢™ßÑ ï°p*‚3Å>g4‰=øæÅôbkÝe`í?ðëÉ!|.„aÚ¾ùÉþö–[êoyËðùÏÏBzÊ)ÉSŸÚüØÇvy‚w^ý¢‹ªçœ“¯^t›LF¹jdKå†ðî ïP£Ñ@|G5Mó† A“Æ{BÑ,o{ªé?ˆ|Ò¦púGS]"ÃnŒè¹º$¿MþUd2ãæÀúîúóø`gÁÑj¦Ìq¿Ç{¬ZµÊ »èQ´eªC§Kj)F›¿އñùÙ1À›Nr ñ·£>é£V…è'&&öÛo¿f³Éüo¿6Üø_ !2n: ‡ QN` fLîÖ,ºŸ ºX©TV­ZÕl6_Ž­'ývŸ@®à–K,{J[‚d.ÉûX.(†’§Ÿ”ƒ5llÕµ$:nÊ阭ODu¿86‚dÿ®vòIµ-$³õ£ÀáGJal]F øéÎk«pÝâš’úrÈùýª‡ð¢ÿùß>nnvüñÃu늟ýlÞïÓ/Ù•Ês²­J¥²Ç{tÐA­V fFtÐæšLîó”~ÿìÁÓ‹,ËÞÓí®ISy„Àþ:c0¸®ÝþçngÃou:?™›{éüü`0Ø7Ï<;û³n÷'ss_ìõè0÷:šn«µ«¥ÉÕ’Ÿ²|a?;rÅÎ÷® g1bòÅ“zq“Œ†˜y¸ÒͲ™Ý {æ5kÖ¬X±B¸<' „¶V¯×›ŸŸ§ùD ¨V«<ãÆtN® æ%AØså`¶ó>@Ö•¤:ΪM×$˜z1b«•Mâ ð¢×Ä ý÷ßÿ¤“NÚc=tkÍfsåÊ• ™žå¸þôŒó_8 Þ~ZGr†ÖöÆK‹ËÁª|Æ3žñš×¼æÐC…Ì °ì9>OujjªÓé@\$§dô*P!T w‡¾H¼‰EEµ©ÏÙrZûóQX”FÚÁåóøup¿á÷!¬¡ÂL†p_÷‡ðòÉÉìiOK¶oÅbúô§ÞýîÙsLºß~yž'÷Ý7xÒ“F^8:å”Þ‡?\xÚÓÊår²ß~/|aöºëV~þóÏ8é¤R©TxÙËF¿þu÷¿§œBéãY¹|Jô²¿Úí~j~¾55ÕétBGF×Íξ¾ß/›»~½^?5Iö)Ojµ.jµþi8,—Ëÿ£Ó9{bâÄfó°,{^š>œ$ÙjÔl¾©^OmE:#&-ÍÊø jœ®ÿšµZìIß÷2ÅÑ>t®”¶WlÎ; ¬)Âj7sI?ÝɤHåF£Ñ¶mÛ4)N¨”²ì$IšÍ&Ó»]%£ƒ•­è{xÊeL8v‡…^ zD´—uê˜ÃULçšúØÄ RN&‰95ÐlóæÍ×^{í¶mÛô{ûýþÜÜH©÷Ò¬rø_" þ•È]T¤ÿŒøT—Q*•šÍ&W‹(Ç™by­Vsß9•D —A~y¯×øI“ Ö‰^–hë0°Qûjƒ$ˆtÖhw0Aà¾"p€Ûñ_¼É)¤p˜Õ¯ˆâ4ƒÛ#[hwâˆf¾9á[_>Г]O±XÄÂUOCÞ2‚/ˆ3KÈøÿ‹.ç%öçÏ„p~!„·…°{·†ðP„ðW!|ý€þ_öÞ,ήªÚžkíî4Ué DÚ ½"x#¢HF¥oD@zDš‹\®@QD#éû΋¢€ iƒ!@ Bé;R©:U§ÝÍúfí‘‘ßÓåòpsøUŠS§Ù{­5çsÌ1Zßû^iâÄ´\nžp‚×]ÖÚÖá‡Ûþ3¸ë®ò9ç4o¹%Ýu×®sÎñ¦N­=÷œ¿÷Þñ„“&ÙiÓfŸzêGÕª×é4/¸ {¯½Ò4­OÚõøãÕã;t«Tö5fÏüšfí•Êý­Óg±øœ1i–éº~.‰ãÌ˜ŽµË­Íœ³¾/Æüf`àм± »¿€ ¥+•‡äѽg 7x˜ýÉC¯Ý–å%¡Ýn”$OF‘¾øPçnµ<Ï{:Š–“ïð,ûfû" Ñ/ÅñVIò±µOE‘1&°öÛ==¾ïÿ͘¹9™‚ÇÝukétÏúègîííEQÂøÉºº,,Ä'@Û¡ Æêv|¹´½ åPv@ÁÁG$Ð?°Š¡‹ô¹¯¯¯V«uò²þ@@ÀÐ})4˜Ó($§5†® °!øh˜K®£Qh}ë§}íµ×fÍšU¯×•ÅÄeýúq+0¿GÜÅ[t’`¾‰äR­ péf—ÜV–Pž ÜŒŠ…òð#¨ÿÜ—e±N6¦*hæ©AaÝ88pÉ„~Œ à5Y!¥ÀUA`+âÝ×»‚~RKéçn‘›éŸŸùœˆˆ"ò‡·Þ*Ÿ{®çyɦ›úo¾L™’î³OtñÅÒl"¿üerÑEÕW_=Ïh!bñ}¿Õé$"åN'xøáÆÄ‰Y–…?\àÁ8âY¡kÍâÈŸÁÌ,Û9Ë&6Õ<cÒ86A`Iíí8ž†™ïyÅ kä(ÖvTØH 60v2_βñ‘xþ‘õ…|}…£ÙÜ7ËvKÓÇó@uA§ó‘ç¥YvV£qEµçµÂEI2/ 1çµZ‡áWœÛ-M{¬+òí8þS×l.ÉÒôØ,») —ç“79Oºî8±o<|ãydRiì—¥õh`,ÑÈu¦¥å7.õp^³lA’„‡i4pQÈ£õõ»»»A «B;gÀT•üÂSMøxhì±¾IJÀ+®U£ÑP× nΫɣBô êø¿LÚFm¡"8yg±®¾²=&ø`®HVnm¢nк™ë ñ°_4¬"/dP®pï †°…oÊL¾ÔŒ[ê×A~%&G²é.ä,%k{Z¯Ö>=z[~pxž—ì¹g¸aÈpY¼h}Gœ­Ë}ºsY~@T*•¹A0,Mÿ_³yqww›,{ç‹lßlîÔn—ó˜FÁTMÖV.`p9ìà-†TÏ×ÿê`/ú.8‰Œ1É–[¶Ž=65J[,ÖÚè¼óŒ1f›mZ‡nW®l4'Ú_ÿzúùÏ›U«ëÝáÃ;ÇŸŽçò £ýŸÿYºì2ÿƒÒ½ör[n)o¾‰ ì…Y¶Àî€ó°à4Ê‹‚+GaN‹[@wÙ Õ*¯L6ÅáA}UÀ\cõ…/´÷ßßU*kF…®¾zè¾û¦išœq†DQ—þõÿüÏî½÷6Æ´Ï:Ë‹¢Î~ûÙ¥K«{î™n»mý‚ ÂÓNkÝpCuß}M–%Gšõô°P¡{Ä@VŠâ \tøyÒ¨@bä0økO±PV= OȤN? ´*Öõ).´šÖ‡œOá‘å • ¯¯óúëÍßþÖ9üö·¾ïw=TfÎ4==Ù®»Ö8"MÓÒo~³Å[ìêû/|rcï½ÝâÅöÁE¤üÈ#µ_ýªÙß=ø ßl,,JÝZ³œëËñ4]|wT*½ÖÊëM’4Mgøþ粬aíû~`í-žwt’D¾ÿ˜µ³ÒÔo·§‰„Ô:âÓ“õª cžˆsh~8çŽït¾”$[8÷„çYkÃ4=£ÙœmŒµö¢8¾2ŠtGu;wj«õ¾µNä¢8þIÇ㜫Y»]’¸$yÚ÷/lµÞ‘³;r~jµÚÆAð’çE9AN?äbkÏ/—=ÏÛ9oi<èûxÞÎÎ1*´›åyžÍÛû`uk/—¹ÎBÚqÚ™ç#ÂY˜+,¨¶hÀ>Xæ]]]q7 PuQßcÁVlÓ1u¶/Læ²h7 ˜ Xk½3*3fÔÇ7y<Ó¯ÓÙyçtáB;gΚÆÛµ×ÚwNOŨ³>äÈF"Wõ«—{l×Ãwz{ƒÛo7[n)"öw|ß÷¦OO{z²ïÖ[Ó7Ž‚ š={ùÈ‘sï¹Ç -X K–È¢E©µÁm·u¶ÜÒOSî\G+ ÒÔȉ4Y+Eü\—:˲©žgQìåcÄ9ÏóÞpîu‘0 %Oçʧ1¬sY–}hLbŒGz±|”3ÃÅÆ­a² ëxªï¿—å3á. o5æ#k=cžÎ])1íÛK¥yƘ,{¦^7QôF½˜¦ß?(Ëvèt&{Þq|yW—µöÑ ß¨Y–}¹Óùqµê‰$ívâœñ¬5ÖÞT¯ŸQ*¹,KE<Ï; ÕrÎ=].ûIâ‰qqlDœH’¦&KD“L/£²Å”¬ ‰ëfÖ¬“ìñ_Z‰è35\i€)—ËcÇŽ]¹rå¢E‹„´d@Ðà-tqØÁ£|h¡ƒ¡W HB²Z<ù(zÝò€çßÙa‡ð꫹CíqVZJ“Ä÷<ißxc×~ìµWºçžÑßþÆÅHiûÖz¾_oµ¤|ßäÝ;k­þdIÉ\2œ› Õ9 ¢ZDêý‚õ-ÔÜ•á¦$mA,‡o%ÐHf»I.÷îyž=ºuâ‰áÍ77~ðƒÒ…zƒ•Ê&›48"¼å–ú~T=ûl·õÖR«>êÆŒ‰÷Ü3|õUiýìgÁÏ~Ö>öØ ·×¼ý6Ø…1Olp$ÐÆ¤ª^Œñ¼Ð6D 0ÐÀ g[ž½Å‚aáWÉà~!Â9Bþúói>^¹ý…lµŽ8Bî»ÏÖjæ­·òË㛥Km–9k¥··\«¥iÚvnÙ²e+W®ÔÙ uQ¯§Ó§®0ºå…îqÁÞQÏ>¬l?,š‚j¡ˆT*äÂ…A!aÇÙ #c¬/P¸ ŒY™e6Ÿ­Ë²lžçǧÅñÕ•J©T?~üÆoúè›Íf»V»¨»{v¾0*qüýVëëiÚïÜ”JsJáeyð‘”“ïû.•I’gûúö ÃU«V¥iZ¯×7îtŽétn ÕΙøv¥rPÙj]†ç‡áe†ˆŒvî›å2pŃ»»ë{Zâ,{Ϲýºº¯p–‰È¯K¥kµ«¬-}‘ýº»ÿ0ßÀÞÚèF[Ò4íëë/K[2¬È¬týåæ›o>a„•+WNŸ>}ÕªUÕH ÎYwN½ÂôÊk©Ä–0ªeÉR]L§Ìºü4ÍšÍ&@$TŠO²<èÆ_ýjôÒKè4¬Y½äã‡iC=oßÿP½PãøKY6ôðÿºjÕè?ýéîþþƒ+½2»v:e‘½ËåIrK§sDµºç}¡Óqù ÐHçöã2$I’©õú¾¥RAG0‘º«Æf³É¢|ðš½GX°`Ù:…Ñ„TC æ´c^®Ýi­•µOdåém@ÃÒ³VP•\ýfEæQM5€u ð¤6d¨ä™ ž'å±°9P'ñ<î;H 0#^_å| GE>ù‘ÈÔ (•JróÍ­£ŽO9Å»ùfd¬`VXdLÀV‡ì&p€‚kb`ô2룔Œé#½âQDxd¥r~u8)ã6;àõBNd­5ÄÔ,9wZ«õ»JEß:ŽãE‹-Y²¤ÇgÄñ}Ö¾mŒÂ;v:s²lvöY{çc>›¦bŒŸŸ†¨9”ð¦Gbƒ(°-ùHå) ÆŠÀp3¦ ˆÌBE-ШT*xà0wîÜåË—«Iæ # ,g‡{]phe!!/gÆZ‘ÞÚÈLaR–÷á!”€%êy^ãÈ#£½örš[Œ“í¹gôÀI’8£Á¾eÔ¨9cÆ|iáÂð®»:§Ö™?ßüq?M­ç¹¼òdÍä³#6M­µw„áÖ^×nkªÔãÜ?¬ým¿snR®—ÊjF°ÆÐ«„öŒ&4èÙðñ‡XÅ2<¬÷ÊÏÇ錞Ó`pÊÁ%kmtóÍ×_Ÿe™yúiÛhd»îÚ><œ2¥|÷Ýí›nJ¬•GuívöÒKÉñÇ×'M2†×]ιà¿h]½sÎ~øa6w®OmJ!wd®)›þñ΂<.WMûÀ¿`‡'ÜñR©Ä ‡X]È`Ãræ Ñ6¼Ø­Ö>ñG,¦Ñ>l(ò¢È["犔D†ñ™±cçÏŸßõ—¿48"9æwÿý:Á`òl·\­kýýh³&#¢«O²¦OÌ`É&´Ñ¡õñEœˆÍW›g­èqé\FNÏé/Z”9ç/_nkµ8×Û^3«—§ú¦(¸1Ÿðÿ3ƒÅ‚躼¡ý¡ÿÕ×Y—ˇX…UÇK±‡9lì¤&Âz’ô'òxOäC‘߈LÎcÏ="·‰ˆÈ•"{‹¼/òˆÈ"S·Úê͉1Á 7dcÆD÷ÜÓ¾õÖtìØöÛo—~ýk³dIºë®rØaQ½n¯½¶V«iB‡~Z…8  #Â4P$hèàˆÁÀ‡.¬óÛíou:«îÜÖi*"‘×=OD¶Í²ÏwuõæUÜ‚ñúÚÒ`.œ¹lå –§SK«Õò¬•‹ºç]ií£}}b̉ÝÝžµG´Z ŒyÓÚj§óh­fŒé1æ˜jõšRéªVë¢fó%k†&Mÿ«TzªÙ”NçâJ¥FÝ{"zî ÔK MDŒÍƒ¸Å†•úݱÚÃÏ,ûÆ3p›fºj’$“'Ož6mÚªU«–/_ŽáæOkç€irhÀèçWö”ÎÉ+ćd·˜V'à™ÀÙa~ƒ<š«@]u9slÎ20Æó狵zâZMj5§(Vû+Wš Ph1Ë2³xñ€H d„÷ß·Îi5‘%‰ä:F£aíÄRib©´AšÞÔnë·óÛmƒ$&ò^¦iºyÞˆBÝG˜ÒBçf©kðY8oS<$Fz«Õª&z4£Ü¤ð½÷^fL©Tʲ,cûÎ;:2“:jè2ÆÏ²äÍ71‘ïku™-]ê­X1tèÐ(ì°Îž=¸Ìòtz ,ÁÇîSBZ(8ôž*ªê3 >!ûvdÈ Ž`@Q'IWWW»ÝVª`@ÎwQñ+år}ÈùŸü]äUúçj‘GD^‘kEö9Eä÷"׈\ýòË•cÍ>¸yé¥Õ ZW\Q~™Š{( IDATøáðÅÛ‡Ö8øàhÒ¤ÖqÇõügŸ G² ½dç¥ÆƒoÀvxBÕ4ƒ*Ìú¿¢hC‘‘Îm¬ç]–-0æž÷_NaŽi>Õ××'d‚$G<zVH Û`P‰Ù˜ ¢Hò¤ûI²µª{À8÷`N+ø:é„ê9uiÞR$}I–í—G¸<³ã¡Š$I†&ÉQzTAƒæÀ_ðýwòʲf… ÓsàJ&ÄÍM5€iÁê :î°jÕª¾¾>uoC—§@c<„1f$BlSëH Z8|Q£@ƒ’•°y”Š©t|.³€ëáNYËY’æ3<Ï“üìƒVºsn“,ãÜ?òWPÎëÑ™,“æuyû-L}k6qAøøÃeQm"¢³Ûm·Ý„ æÏŸÿ·¿ý Òd¸°\9±×‘¬-~#dÌŠRµR©l´ÑF ,P)wÖÖ„#+z0g‡åv„´n tÈA,zy8W÷ Î[ä÷™ÏˆžÅy?÷ЖÀj…^À¹¤àV–Ö ˜µdW7,åDˆº©F&É¡izo©”9wC»mãXD~Q©Ì·v÷4­;÷vÆhø—ÌN?ìaÜ3dzÀ媕©Å„éÐ-c†\˘T­·Rk,@¬ŒÎ!(S*((ãë`Î-¬¡‰(Ë4®ê„wÀaΞték¿Ç¿o6‘‰a˜eÙIÍæ£ah‚`¯FãÄ$éˆLÊ5åx¤×ÚW¬½±^ϲlR¹Œ~'.;k—XÚår™jPƒ¢ÑÈÍ ]±ú‚Qmºé¦»îºkÓ¦MSa7ÖÂa{ì5Ñ‘,3pO!Ù‰­Ñn·—/_®QŸ¡oÐä >Zµ ¯åø‚î¨(øHl‹ÿ@ŒÁ²8.œ¢„¤;N­Vc}5Öt×à]«Õi_r>ÁÇË"»‰\,r’Èó_ž,ï±Ç¹;ïlšMõ™¶¨œ“0lMšTºá†ôsŸóFŒðŸx¢uóÍ¥3ÎHÚmðÄ ò"dSÁ\O–ð¢²`‘¥vuu…izíÀÀi#F”vÛíìo~³ÝnßsÏ=?ç³ݲ,‰ã$¯B†ÚðÁ -N™}€r‡sp.¬™:$“èHºyö‚-À˜ð<)ÐaÃH ^–yíö˜$98Iö:Ôú¾sî?Æ;÷|XÊTh®h‚¯v ²b!o ÑÀÈ™YÌé`E!FèÁ¨°›‚cº{£(Rð*Êav5Fj®»i±y+Û !º ÆÖ:Œ¡Z]‡z/à)¹”œ~*¤oóQ¥â“eÙâ$¹-ŠFe™ñýYij²ì¯AÐë\O’Ü^*m˜eÍ8žcŒæKÓô¼¼_Ýöý©cÇn±Ï>===Ï?ÿ|ÒÓÃÍ6Kjß8µYå|4Ð2½Îì‰7Þx£§§gÉ’%«W¯Æ7‚¾”š(Ñ@ˆÙȯøœ|ñõÚªâ8ˇ³½¬Þ ÌiõBZɾˆèiáÞiù‹/;ºâRp.²¦ ÁÑLW—Á K"Š˜$ V®¤Âûéÿ·4Övù±Èv" yäMdó^¨n·Ý L­ðb¦u≥[o-}ø¡ªÚx –®ºªuÅ¥±c1Áó1€ ­ìJ¥‚)­o4AcëI]‚¹÷Z²ñÆpÀn»í¶ûî»7..—}k«"™sj#¤Ï"/ŒyjpÖÐ]Wwp(!Š OFºÊãåH'õ°Öe­Ö^èØëæQ‹fR*—5fd–u;wzWת7Î¶ÙæãQ£NêîNœ—eBz\Œ=êù…OŽÈ¤5 ·Ê‘3¢ ™NÅ]„Ô¾Ñ béxü¾À¼À™…R©0&¥g“ÆÜfdûT¦uh°Qþ!f‡™OÁ´¡u×/Þa}:íú'-cVç¥Ïóf[;'Ùe¾Ÿù¾snY’¼kÌä1h‚`yB«è&›ØvÈ¶ÙÆø>++š„dœg'uI0ïNkÍ Xò‰D\^¸pá´iÓæÍ›§íÂ*UL—h¹\Æ&4÷<Ïó»ºÌ¶Û¢+S¨!§òá*ˆz`1è_AΕ¡ Éåò Šæ=CûÂWLÿ‰L¢  Z°VÑ9$—ºÒ4R6›MpgÖW9ŸÎ£_äqHÛªÑ 9Ñú³gÛžž4MrízÝöôÈ–[ú+WÂJ„eÌuo Õ4¤V«éJÂ)Œqîî€ø/"µZmúôé•J¥V«Í›7OÛÑLÒá‡K¼Šö÷÷ãŵBOÄ!ö-æŒ^Èæ»Ñ9·q§óMˆ ç^gÀš‚4ýÇ$`ìÝ™˜jJ³lÿ4}¾RY±á†ýû¿ï¼óÎóæÍ{â‰'nxï½çúû†YNÄÐAY‰SŸÚÆl†‰Ž :ù‘1(¦(pÆc­¶!lz³xŸMmLâb”3(ÜN@=Ä$¥øðÃ“í·† _|‘;O ª`zFÿVÑГÇ2C›º à0{öì»îº«V« àúp{F{ø*ûÆ\/îˆ@“XäýëÒppâC%¯é1íO”‘#Ýcyo¼Á&›lÒÓÓÓÛÛ‹E‹CŸC#Ÿøli„M?*{Z¬ŽÁ(sÙU}8&7ó3…cþ*0|X˜º†Á£õ!ç“} ÙOäX9_DD'²µH÷¾Ð¼å1&š8Ñ9>òHû˜cÚÇ#K—Ú?ü¡yÎ9åË/O’Äf™s®õ£ù=$ÿügœsEÓc2óÊ’àtA\Ñôº&~ëûǯ\yíSOÍœ9³Ñh,X°`§v;¶v–çYc$O±dÑ<@žÈ!D) ~‘ÂØ#@a H"2¶Óùj–ýÑ÷»²lbnMx~Ö¬=,MçX»0ÿ+H“a«ð\J JQm¹å–‡vØøñã.\¸hÑ¢K–H?*6\pÀAÿ¦0Ý݈_!äð…Ä¿aΆãšŒÜqÁ½V‘¸æØü¡q–±ærOFð™dŒ‘,tòõé—að]NȲ,{ýu»l™©TL½î-_.ÿøGó†*—^šfYýw¿ó~þs;o^JÃ_˜âD!¬«iB0‚-9ó ü[‘­½ªÝö–,ùy­æœÝhÜÜéÜîyKœc²4ElÀ©k«Ñh`­s‡ ΂N%Bvû˜9³Œùb’l“¦;—Ëú±Çs{›,й„bÐÈÊkãz½ÝlÖz{—/_>jÔ¨åË—¯\¹Ò‹ãöÚöÀµ Aí_a{ÁÉù=ÎÊÎ%ž§I·q.Œc'ÒÏÓ\5IßÚ!ž×I’¦1™ˆs.rÎ1QÔ$ûÔ@Ää~HÜ¥(hÈs)©w\!x!ÓO¸+k@Ö%¤¼ŠTAÍJžµ6,•Ú‡"Qäß}·´Ûá­·6/¸À-[æÍ 2¦*SK«C8™âØÕ8¤ ë³5l¶„þ?â–VÛBâ+ÙÚ2EàUã r…; rJaâ…!°*x1X’<‚=¯uæ™2kV÷”)iÛI“Z?û™Ùe³gÏÖm‹ n››)`  wsQ]!ÒA 4n{Ùyc-+vs»ÚÈXÌ[Ö±„!©B(¸YÈî¥À×W9ŸÈÃÙ„þYOÿÜ+``À¼ÿ~¢Ù½¦'K—¶@‹çÎ /¿¼uþùÒlVo¼1þðC—+Ìë % /bÈ‹U.ÔV ç#R3ìì¥Á|͹íE.êêš$óV­‘•ÆœEƘÃó,ŒY¼Ot'£ó 6V-mvÔ &B0O†á&Íæ€È‰QÔ6,‚z½~J’\R¯oš¦¯u:QÄ{â²àã`O8I‚-;}æÌ¹åæ›7ÙtÓ… VfÍú¯Õ«/­V3Ê q´á„…º¢¦œ€ì°Ù¸ç¬×vó,ûŒÈ•ýýû¥_ßVë´z=Ͳ‡Âðår–—}‡dÙÉýý.Ëî Ãû­Ý0ËÎn4vɲåÆ\Es}ßSŠãK:¹axg§¸\£¾&4N„%ÍyµRa.:çø¾íçJqWß•ŠÙI’4:(5ªü»ßA aØîí .¹¤sýõÍÛn+åIAPÿ©ñf3c¶HÓ,MM–yGE+ˆ$˦‡aœ‡.Ù™…EÊ5V­Ù„]0¢ÒðGJÄf¬ðÊdÌBz„|É=ÍP‹XkÛÆdßûž]º´ôÔSc6Ý4Žã¥K—ºSN¸õÖöµ×Ú÷ÞC~íp—`˜TY(€P§b+uww7®¿¿ÿÃ?„`6ÓH˜8²ÁHóy+é_?’$I¹\Öˈˆˆ ‚¶;U¯Ö>ýÆLðˆ¢H \¹ìfÎDíMrÞ·¬Å)$©TèÁ <‡²bbºž¦‡áÞI²W£áœûï{ÖfÎ}#ËŒ1/z^‹l9÷ä™m¡ÒÉÄÁ9Aš\άŒ'°7 ðß#ãø¸JÅl´Ñ{ï=tèÐY³f½ýöÛS’ä¾G£Ïç hɽÖAØÚ¹Ì¹)Ö~¹ÑØãµ×J3gŽmµ*ÍæCA ÎyâcÛctŸ“töb(àZ¸ I’ŒM’¯´ZÍùŸßßÀÈ‘ívû‘¾¾'Ëå¾ÜÚnL½þ­aÃ’$ùk­ö—!C¾Þé,ö¼+»»wLÓsêõú¾1æ´8ÞÁ¹¹¤œ/kÞf1Ú Œ°q!æ LIǤSð1ÀRV†­í¶³/¾($ô¦©}å÷å/›wßEƵE#G?Òaqü¥$ùÀó¶Ì²ƒD¤iÌ­a("Åña¸œ EôÒ 3¯n] €€êŒÚ¿Âi^`¾ §ž1ÐH;€¼1tÜét²aÃÒ‘#ÃéÓµ‡½dæL·ÓNvÎ`qÀ«Y3IHx »£Ð°ãÂ… ›Í&DNÁˇ+zQˆ1¬USèÙIæöŒnj,ƒ‚†h¥š0.W8Ö‡œOáÁû¤ !ˆ,;zûmç\BÝEn_óà1Ò Íø Ý~ÕÉaVIÒž5fj¹Ìh Cìãɰ5oHÂð@8XLBúÜå.E7ròbøðá{ï½÷V[m5cÆŒ%K–ؾ¾Â¨C1‰ïs+D⯦iÉ9kÌ·j5S«‰È³ÖÖD¶Ì²{*¬Cä* ÿ\£”Cˆ`Á¢Ùö|>ëy_ÎM]A1²Ö*>–%‰îäß—Jé„ ß±öS¦¤ž÷jÅG]ßgŸ÷æÏ¿óÒKõ+’$ß=ðÀÖ '´D¬1þsÏy÷Ýÿô§M7Õ˜S¾ì2É’8޳³Î2<’®XÁJ<8ƒa„ §žÐô8zpï•fJ×_ß9ñÄÄû ÚdJN:É9Üxcb­žûAE–ÃùǃAðå4]]._9n\½^oôôìÙl>êyã¬M³,ÍSf&v#Šð [ècys­†v 'PÃQܰg²7žØç€Çj¶(Ų,3==þí·''ŸÜétÌ™£Ÿªý£ùo½Nžœå8€&³A&h6wj™Ð¬(Voo/Ïcq’5wöžÇÞ2YxøCø^«qãÚ{îÝu×`$þÚ×âï~×dYéä“ט[ߺðÂA ãý÷£_üÂZ{žHEä`‘cDDN¡fÄïׇœOúÁ˹³ºPô¤ÖÝ««¿^¯#¡ÆPO¢i¨@Þ™ 0 Ø*é¿Æ'ÝHÌsIÿ1 y1²?öYA²†ª2š ì‚ÿÃúž$ Ÿ³F§YÄϲZoïìÙ³»ºº–-[֬ץÓik²ïû-mÿ :ŒsîCß?¬ZÕ}xl êɳ{$z¸5!,(²‘6"»fÁíXGäD_Í÷ýÕú“¿ÑF“oº)}é¥$ËÞûæ7Ó!CÊ?ýik³ÍÞ¸øâê¯ýÛzý¨(ÚíÕWå£>.•Z;ïœl·](’î¹gt ƒ!pÉ’à _h^{­Ûb‹òäÉöã™Ä5¦W¨£äz'ÀÐZÀÄæj1êû¾?0ÝzkûüóíÀ€L›Ö9üpß÷½{ïµk·÷¶ÜrKçÜ‚ p„ :«:×%²«çMú·ÛìK_Z¹hÑÌ7ÞHfÏÞ6ŽõÒ'4yƒ&"!YøŽ¯¹¬íXȳÒ,uƒVPý_ÊâÓV¹¾”ca¦M`˜ìy´ÐEÄûøãôæ››W^™^~¹ééiÿà¥Y³‚)SÒ¼‡ÄŽy:êTÀÅgr çgHŒ€£j-«=?t¯¤+¥‚³T­@‰ÖõŒ–Uû¦›Z_ü¢ÿÚkæî»³,ó>÷¹ÎùÅ/Rcš¿ÿ½ÖYƒ î¢E•«¯NÓ41¢óÿá§iûòËÏÝd“ÍEþ ò¤È‘Å"wä͈õUÎ'ÿ5ÊŽkæÏ×…J‰60ºÅ)X+.±.s‘ù9 µ1©‰…õi˜ÿÇ©ZXÈô“ñ:³/;;!ËC ä$T‡T`‚¦¶kŒ™EߊãléÒûï¿ÿ/ùKooïWV­:&M¯+•„”ÜôTìÞ e€èž‰È¼ۙª|@ "¥tYÀ;/$Îú"PÛÅh*Â^á‚ÞÆ œ/*qoò‰Ÿ4MÿÆ7Fzè¯FŽ´×ÚÝmÓÔ ¾C_ß÷¯¼2ùGnkÌ„¾¾¬¿ê!µnèÚwßÁb³ÍÄóþû^–¹éÓ»÷Ú«qÛmû ô³)!j L–aÔù>F1‰‚ t]ÝkMŸy„ÐóXìÇc/Ögv¥é£ž76ßÊÖåV%@m‡S•ƒ(³?qññ`Çx¦të‡ÄGÅi¬‰¡‰‚L’Vk­£aˆsêõ}†žcDÚ_ûZ:zôâ,{ª«ËŸ2åßœÛ$MÇ+ÏêðÃÇ|©”ýöK³Ìí¶[pË-nÕ*}?žËŒN%Y[3 ÷´`=Éâ]˜f-€3|†ç×þþ÷«7ÝdóŠVHÿxîܹl ¸¦¥Ÿe"²Í¶Ûî¼óÎ#FŒ(—Ë;í´ÓK/½T^½Zêõ µÛüAô‚Åt¡ fÆ8¡Æ*ÔèÈøƦ`¬ïd[ãqÁ8'˲r¹,¹¦£a¥Ë.ËöÙ§ôøãI^«†1ܬ™ÓÌt¸‚¢Ð¦“1bý=œHûXJ¬]Ƙí0 ³<ÉJÓÔX›}îsñw¾ã‚ÀŽ=ü°~H•š÷ßß{òÉ5:#"ψ”DF‹”DöyFDDÞ9w}ÈùD?ÙøÝwÍ#´ÎÇqÓõˆ€P‹ieyWÉó¼ÌûÑGvþ|KkLϱ4\§#y€l^}uºÙfxN¯È¹"w­g¬}¢•"¿9Qd‘¥åòÈ‘#ë}}É%—Ô/¹¤|ãfþ|´1ÕsMpäËå2àÁ¸ÀŠºÃðœÂFÂvU;cÂ[Ä|αë8³ÌÍ’É,+‹¥ŒqöTWaDM´Ñ$‘–1êŒzž7ùÆXÏsJÃ¥ƒô¹` ÅÌ7S?S|N(T"t1‚³Š×à&`êœQ=þØty̺‹|蜗Ûdš w:‹Ëå´Têq®E~»+Vï¸cm¿ý² 6°³g§išýÛ¿E3f´‚`àW¿ê¾ì²ƒ8‹Å{íeŒ1==¦^¢TRlä)‹âQ¨áP¯ ÿEB‡ùu}²Lz\˜rËÚ£¸zˆº¬µžï/1fA³¹÷_ÿú÷3d``ÇZíøfó!Ïû¼s~žO¨˜ Õ"åÇ€*'^øÉš§pbœÁ°aìµ}}}<‹Êp7ŠH$OŒ™±ré %MýÀ˜waÃYäpXQ(¤Ÿça}ÁN§S*•tùA¥‚™¶Ð+Æš¸XÀà‚BW½Bಚ¬Z•õö6¿úU±Ö¾öšs.Ùf·p¡ÇñÉ'{/¼`?øÀ‰´Ûítñâ—:y¾‹ŒñDJ"O‹ˆÈçׇœOè±JĈl ""#FŒ;vìÌ™3]³iW­’M7 –,a—Y¬0Öve´µ`9å¹ ìp&0¦OØqß &6ôTçÍÀµ „pÿyûæ›ÖÚhÊ”dÉ\ÕòÅÇ?þq–eáøK—ÆYæy^øÄéÊ•&ÿÀi˜ò Of0ÄsÔdFH~q}P"£'&.<îŽÄKÈ÷¼;YÖŽkµ®ÿ}©‹ü2ÆdÙ8}52ýÃ-`S5VÈf¶1óÝÙæ÷`Höˆ”AôôôðiÎCf¸°( 8a.ª²6ZAÜSÖÑ`ÅÕÖ†4RžHc4›ç‚¹^gû!ÙÏI'_íA¨våÊðÙgån.Œ{,9ð@+Rºä’ ŠÒm·Í>þ8Šc7cFZ¯£ÌŠ&NüçñÇ0nÜ"{ˆˆÈ…"wŠˆÈµëCÎ'ôØFä‘߈\%R«Õ.\Çqë²Ë‚ûï—éÓ³¼‹ƒT‘¸t©iy6>ìÈò Nã@¥y&&Š¢‚ßeA°‹G10%.äs޾ ²~€ç-Ÿ  IDATB’YØ?úh4B§æ˜ÖZbÃ*gQŒDä¿ Z&à1£”œ â ëð‘Äy: #ðŽø8+´ÖÑ(Sª¸_læ-k«§”ËåÊGÅ+Wvòÿ=ý´›<Ù9—‰XkËwÜáT®í±Ç$×9βÌñ¯º çÝà%úÓŸÒü”ÔwÇóY®%8ë Ìjó‰UMQñheŒ«Š_Ü&a} B³^v“Ó û¨1sÂPœ›ãûÏV*Yî •¦éOK¥ÕĆгRYûqk£’<ÃWCrÌR©¤á‚œCp÷¥§§‘’±&<™g«±_°NШg pÜÍB5 ¦%¶ŒbàLTç-V*AÛÑÊ–ðx‹VhÉø/Í:ñ 1®  ƒ$‘U«äÉ'³¼Åå¿þºyíµ(ŠRÍtÿüç4M%мiÓ$M‘žÎÏu¿ôñY‘Ÿ®Öþ}"ËD®Î#y&ò„È"+Dþ!òÃz½§Ýnýö·á 7¤[oÝúÕ¯Œ1ÑÑG‡Ë—îÕwLŽ<2úÑ‚ ÈvÙ¥ÿÚkE$ºøbï•W0í…S˜•Ì™0 †><%9ñÇ*G¨’nÓ“‚}0 ”!lr ò,žˆýÀ–ÕšòsÏ@ߥ§§§¯¯/˲®®.U;Ghá ÈÎWÀIÂÜÇÁ V<±-°]Yk£HêÙSÅîîîz½Žm‰aFÀâXXøKr|ß÷Uˆ°Ã0ôᜦ•JCººÌÇwŒIâØ9ײ¶E“ÂȯÂá#‰ U6ƒP“‹Wt`eÍ3ª@h¡x…²$Ø0 Ç ¨Py  VFäÖ{4×óæûþàL•µF‘4kb¹DHAYÚš&vNׄ¿»- DC¯EKí €©üxF:(Œ3£<]‹ˆÛ®\å­M’¤R©ðÁ$?ô#¸†F—7‚f³  Øä¸ï+Eð§ ÒgØ5 Æœ±ÀbE…K7TÿØë5Ö>ñÇõ"SE¢üŸËDnyMDD޹nÔ¨æ~PºóNÇío»k¯½|ßï¿ê*{ÑE"’~ñ‹Ë.ó–/×uÓùÎw*{ìáyÞÀ³Ï–÷ÛÏfpΚ‘…©a‡”8X»ÌD( Þœôl‰…Ô> ðôQ¸MÍGæœ&qã¼V’’º®‘ÍA=„ê>$ž¬ ô}5ëÔkÞšæ¼…ì•GÑRèAä+ôrÈÑ¿åÐËæÐú'[yÞCË–½†Öó¾yÖ5C^L«Á(%dmr€“Æ~Þ¸³X™¸ÂœW!’ñHœ®%4üYKp]‚œVùjõ¤MaŒ=±WÃqƒ"¬dqS ½÷5·/ËþQ*ý÷!_L’ûí7lذY³f½7wî¢8n9å2Ã,‰È½¸žÈÖYE‚gqp ‘Op3è&õÀ5‡Ü2nP†£Fj6›«V­Â}Q0â 0 ÓKWð Ä@±äÒÔ Úc’Ÿ Ý~^àúóÜ þ‹ê{3+nt4(c{fYÛúAOaeô ÂåeO#Þw( ÀZÆJfK$„ýAkthXeŠ;d™ .³PjpÃK»Ä9Œ.á^ðUeÓX~7 #…>Å£øÿ–+(?¦‰LùœÈDÌ»ïš_D`'LÝv+½÷^ëŠ+<ÏKŽ?^î¿ßËY:ƒgßî»»v o¸Á¬íª¤Ëg?³,k6›q+¦iíV«Ån€ìžÄúИQ/L>óè^ö*FFÏ·B¨70î¤!Zô`²á¡~Mû(ŠÔŽÍQ¸ÝŠÏÆÍ­u$œÎøüüQù{1„Â}côÒi-¢ÒÌljp蹬¹§ïûût:»}å+É¥—&—_¾äôÓûwÝõxÎÏQ5íáéY€‰ \ý²zr)÷}f&>àÞ ù•©seÇ•JeìØ±£G†F$NX(§¢(Ò¸¢BÛoh>—J¥R©¤Ÿi ÒvBëßù¦f1b£ëJ›üšÝ‡¹s( • Hã÷HËXê}eV¸m«ïŽWD#ÝZê.¥»T ¸êàrÈ]%nJbÒs™Ï/Oº1P‹0»©R©HÃÊ8¸p¼Õ1Ï2MÐû|}l°Á¶•J4oÞÖÛlcÇ×w>|øž{î¹ñªUC_xaÑ#7:tåÊ•úçê-Ÿn²Ië»ß>qbïW˜oôæÌXÏ‚ÄðdÓ£ TræªÅqZœËFvßùŽ÷Øcë[rþWG%GÕýÅ/~Aä'""2ì׿>àϾ4Ž_ ‚N­fÞ}·uñÅ">ø`ðÊ+§=÷Ü#¾o.¹DÎ==Œxûí‡~a–mzõÕ'µÛ+ŒY”óSAre‰O |x> @ã—ëJyb{I3kž8)È~ðÄøÇ<ìf­«ß.4âÎsÍfð†*ÐÀ×Ý>bĈÕátÆ£|èÊà]42áÉ8³@7Àò¸’töÁH<î˜c­$Ÿf³éµZC‡ÕÿÛjµV­Z%"íV«ž#Šƒ`̘ÆGt=öØåËÛ¿øEë¸ãÌSO™7Þàax Ïè–3Q G!·å•²ñÁ,Y² ƒÙ½(¸92s©1Y š/“²˜hÎú³Q®3r=öaĈ%¼O˜ô š,Îzì.  (ÿÑÃTà¨Ùl|ðA­VÃ*Øb­íj4¶MÓœ»´T‘À¹#Úí“:Läk—çÇG(r|³yl»Ýùnwwo I’ëûû7ʲ?{Þ¥Rfí¾Î¶ÛbÌ9•Ê;ùÉ„)­f¬ªë£¦?I–ˆÌ›?»“O^zÏ=^¥òꫯnuÛmí¥Kß*—K9ž£^›4©4q¢¿xñV¸Í6ÛLŸ>½wá®{ïíûùÏKßûžnûV«¥Ý$þ`¦ÁÕ›ì¡æ¦1~FoŒÇ{y c.žç)ˆß@퉦qqCAWÃr‚£k\ÊÓ¹‰Ï¯ß%[¡§iÚßßÏ7Ä]W¬†ÇîËLTcDˆ•gyÒYµÊóIŒe¥YÈÛ˜ˆŒÉ\ÍJÝÆ'gOøâèWÖü†‹9ìÀ¦{ à§–€¸t:yÃ)šFÀHÐêÉ|ë[žHôÔS#FŒ3fÌÀÀÀܹsÝ#$§ÖþÚ×>-`íÿ.cmÍãÀ›Z£ÂéÜhç†!x‡,l­½`À'ÍÀ¾"R.—!.Âd!4‘|68R6†N©bÀÊ aÅàC±Æ%?psfr#xÂ4$žÍ°IŠ„W ª¹ñšþS_¡Ñh¬X±é01çeÙ%i:$Gf6N’ÈÚ}‡ýÆ!÷ 6Ù©ÝÞ*M÷êê:¤Z=½ÝβìçÁתÕÌÚo¤é0‘Ó:½‡ Ùoذ£:;Ú¿UBQAÆn–e4›ïxÞõ#GnvÀ[î±ÇÑ]ôroïÝC†ìÐéH®¤×yØ~Ð<óÌúg?;uêÔ;ï¼sÅŠÙæ›÷÷»ÕË.CQ˜DÁDó†ƒ:ßJ¹2}`f6Цœ^%„”ø€ÃÚZ«1 tj^«˜d P!Na” ¡²)¾q9%¤Á¡‡5hu8y…d)„| >±bB›ëB~Ôë\GFQÄÓ»/À@N(\vs)‰«Í¯ ö?ÊD¨êÖÆÑ$’‡ótõBÕ´ u4x”ýái–ŇÒßß¿lÙ²Õ«WÛ ÈŽ:J–/÷¦LY?—óé=Ž>z›ûÓyÕóšÆl/Ò•¦÷¼²lçn0ÆÅ±sîmß?$I.i61OD‘1æŽ0üFÃZ»Ü˜¥k›½kV¥Ý ÃÜ“ £gÚ ÛðÌ ¸’È+…\U R›ƒ]Ž*zìdöBâ ¾š¢Øð£Ù1ãV÷áOÊåÓôäfSw×"kï¶ö v{‡vûŽ|"d0¯l·M’ñYvU©dE±ö¨8öÒ4qnv®,°{’ìÕn_“ ½ ?Ìîà_ ô¤éߢh‹¯Ù|h«­Â0\¶lY«^ÿ¬µ+D^Ì“ë7í¾æšÖ '¬xæ™>=Ùxãø˜c¢‡2 "€RB5 똘qJ’¤\.kS*•”@…¬‚ð‘ં¹B{d-†lía2Ô7l2‹» -pÍQï‚ ,äk¹îÐ+ryàÆmYø ¨ãyT¥ÐI<ŬKÔp°‹D•Ñlgá!$ž1bŠ J:Œ4¡‘µ¹ú.”Vˆmè!á˲.‰ CÁR¡B©S3:^lƒù7Æßû^íÈ#ÓûïOÓ´qÊ)YOOéᇳO Uû?r®»nÍÏgž¹º¿ÿÕÇŸnmÇÚÕÖ6ÂÐdÙRk'’²Ù;ž—†á¦iÚïÜ+ÎùÎ=P*í—¦âÜ,k—fY– ƒ+‚œŠ] t‘¡¢b¥gf:»(È=A>€°h@gÂ`å|¨£3fÊ“ÞNNA×€mÁXÛMcÒ.Ç+ÜKžÃl$ÉçZAð5š^‘âxç½eíOÿW­n-ò¾çÕ¬ý‚s8×ëyŸKÓ¯´Û¯„á­ÖyÕ*Óç”ÇÎÔ1ŽR©Tóý뺻5¿ÞhäÈJ¥²0Iêõº~È,ËßÇ®s.üøc¹ÿþú)§D«W·Î;¯¨ 3£@J^Ó9‹"˜[3ý”CŽæ|Òn»¨ œêÜ;ƼëÜE9æœc^ªTî©T\ŸÓn[kwrî‰RéCÏÛ±ÕÚ Žg{Þ»¾?©Z­¥é%w9 .(ô¨ ÜŽõ9½½½F5ð n¤Çq, V¯½¶ÿÚk£óÎóêõlíÎGÁ¯»Œªñ9Å:4…¶º€@‘à³OîŸ\9µZ­R©ÄU;†!iRñBJ„ SX¾²k€Î ±–9Ng‘ì×µÊe¼81s†A4%ús«\±þ×[ÖétTæGÅiTìNa@!©”õ<‚ª!ô™Xy©˜*èÀ€öÆ„œ® íý‚0dÖ äW·¶®Àz½.¹®(ÄëÀ/ÔL¨8™³Îx ‹ØZ‘ð¡‡âcŽñ—. Ÿ|2ñ¼)º>äüïv´û Ú9ñĸ»;ºóNÛÛ‹”­0€&+§±šL!“Ò´EœÔü:ðÌà ƒ·ŸØÆ€’pAÐÝÝEÑêÕ«ÁƼºfRhÚÃnŽ;ÀÙÛxê›|˜±ÊHÆs³©*»d v›üPÞ1IŽo·/¨V=×j‘3q\ϲÄóãÐxÇq¢©}–¥IÒβþüÊãÑž‡¢0ºQPF’Ë“š°£šs.®ÕJ'#¼)4Ûybƒ{q<ñò[ ÑŽyÀAù_jý tq¯‘•`¸žà°Ö5”r Ä̢ˊø I½AÑÇn¡A层]&“°¡¡Õ›#ÿ1¶¢@&|މ[Ú~ÒPç a:¦•¶Z-}ÙR©šR A((pØøN0L¦QÄ8AذN9¢º¼€(Y®or:…¦ÖŽ ÏóÒ$)Ý{¯s.!þÞzÆÚ§ùS¥yæ™ÞìÙÒ××:õToâD—·ì ©cÖ(epL°3&OÕ ÕÁ¬Vݨ˜| ë-âøVÀrEl°Á!C PˆˆØ Ì‹cù!O„%·6ÿ„žÜIæ³Ó¦<‡ÏÃCz–Á,Ÿ3˲Å"+|ÿ²fÓ‰ÜU.‹ÈA­Öß­]äy·Û×j™swˆü1ŽO= Þõý–µÿ‚ËšMÏóþ;g‹qú‰«Šæä~õ+ë0,rF‹ã‚ _@¼> $¼>C ¶nÏS ìÜÊYž»âÄšœØrŽ¢ë¤O1›NÓ b›"\!g ®#Áã‚|ºñ ZôöA1Nç 3×ù‚”ò<\"LAõƒ@uOúÖ¯¯Õ?.>“ÑÁEÿŸÇx9ïÔ±›Âà6d¢ð4Ü;¾˜lWÏãPØG@Jñ}ÈÅÖÆj×õa&­9ŸrÔi]~¹÷·¿ùÏ?/"I­ÖÕUѹ炖ŠZ BÏCÑ À 3“DÈbôÝÚ+ÖU¨J—œ0r7› ¼ÝŸXëÓÉ•"em¼EÁºâÖˆ1x|e4<¹ø+ Zœ¾qÃúGž÷»0Ô“k©1wûþÖIb¬}Þ÷]’¼“¦ýÆ´­½×÷·ÉŒyÞÚÀóž4æcçÊž·È÷?´6‚ÛEÆ7È+žìž›·’ëZâ (Þ1ce íAŠ §3D=ŽÃ0àÙÃv»­7‘9Ñógh‹p wˆÜ…# Å«àOA‚ Z˜+¬¬vÃä&¸RPp`ßX.ÍYOW¸P+s«_ ¥kÁ ù²ÅGV½øz§xt´ ¤¤Ó>Yž™ùèŒu¯Û:-”k`jK "{ì…hÁ§B#ϼ$WèÐÀ#à¤ò\$!­á[Yp¿æ)lTBjrëµOõQ­v.¼ÐM™R}ùåñ•Š1¦ÿ7’ßý.ùñÃ+®pÎI’xž×cÌ@)qŒOµ!S‰* ÂÜ“D=€mua|Ð_ªk[Ÿ!Ud éïïït:===ªú§§*Ó~´…ÃA‹}yHˆÛN… ŒÔ°§ ¿y^0Å`@qWY_³fÌ@ºœ·Âó–ù~’$¾µI’¼§4„8^^*-W0'MUÞæŸ¥ïðUƼ\© ¦Øù!¸îÔ-Ïñüv;Cý<8ô!ú†á.»ì2~üøW^yåwÞaù‹Tb‡ëD> –Nz¡ Ô¦€ç˜8޻ݮZ;ÉZkmUäìVkÿNg©µç–ËçOîûçµZû$É|‘sð7>#rïêÕÆ˜»¢èÎ, Œ9!INˆãĘïvu-ÎÍ  æ‰" ‘ ³&²¶|$ž pO€F/”/:xWW—rÆ  XÃú»V£õÂâ ’¡×|Þìz€Úˆå 9X”m8¸HBP/•J¸ã0¼ÑÓ¦ @ÛI¯g¡Æ•\¹J÷ ”¸U A½Ø›HJQðLä"ºMÀ?ä–áúó©=Òm¶I^|1œ5k“,{ä㧇a’$LŸLŸ."/xÞ*k7ëtþ7PëKSÐŒ{0Èä„#ú„˜ÑÁK±Ã›Ç yt&´j†¨†1e9ãfÀWÈ\‡ 2ÆIpJ2•©Ø±ÁØÑ'¢[ΰ@uPP˜¨ç,˜ir<{#†¨Ù@ÏX–Œ›„¢d„x%Z-«Õêˆ#¶Øb‹÷ßpLhK¯ËÓCT+x’ )K2eã?šÍñYö×0tƈÈöq<ØŸU«[gÙ•Íæiå²^Õƒãx…çí[­nÇÿ¯Ù<7îØ«»»T*ýªV{͘Hd{‘=»ºÊÖþy`àß«U Çh W`9мÂD “$Ñîb’1òq¶äÁuЂ’I4 ]8r…©{xê Ùçn Ã\ÛA0ÂÓ²e×Qägº¹Öõq`ÅwÄ'>ðj¨õíÀJ`E¦o0&Ì<]–Ðר#³XÿåÖ‡œOóáMŸ½òJ|úéñ5×¼æû•JšÍŸüð‡åÛnët:ÝYÖçyOúþ"‡0)¥ î„sqÕ‚é2 œƒì.ª H5xq†¶XôBåüÀlV3oN¬~´ Ù&„µ¶øgžøáÑ6î·;çÊår̆@ˆåóˆ{˜|îÀâG04c¶ò¼|ÿµQ£êõzooï—Z­ŒiŠü4èõ²|-Ž÷NÓ~c®Îý`.l6ËiúB¹<ÕZçÜöizd’Xk'VÏoÊJžÐKª/¢èôéÓ¯V IDATßÿý•+Wr7þNé-(ѸÑ(‡`ñhM¯j§ÓùAµzho–×I¯…¡sîäv{L?âû"R.—“$1ͦ®ÜÊ5}£,sD|ÂÕ.¼)¯ ýލØ@o$d¸Ž,ªb?i´dxƒ ï§‹ƒGÄ* B˜Bý­pÁÌ”µ­Ð öQHõ@¶ÔfèìèJòe‘:æ‰1n†íŒ\àÆUA±—ÇØÄ2}zQäìîîŽãx``Ó{œ)ò3¡ÌýirµÖÇ›A.Ы¯ú>Úùå/“$Ù¥¿ÁW<Ön?¶í¶·ŽñXñÿµ÷åqRUgÚçÞ[[Ww²« ‚`®!EÔ(ˆ5êD“IÐ$šÄ$Fã$1¢ó&Q4Œ hp4AƒJÔŒF”AT@È.›È*[³6ÐTwuWÝZî=ß/õøô)'™ùÚHÎùÃ_ÓvWßåœw}Þç)Ét9;¼#gxDÙ€£0;w8¨æ°m(\`nƒ Z” D Ðr4 |-È}YÓSµÖ(ë3-`Ñh´¦¦¦]»vød´1Œ®)y1'Ï3†rÌ…*?üp&óTSÓOû÷¿îºëúôésj±8¤Tšá8ï&£‚ÄqŸ/•¾sâñ5Žsg±‰D~åû+”zÓóÎÊå>="‘k …9ñø ¥îjhÀÉJ aØ”§ÓéM›68pOžé°¸;‚[à *V:ë,˜æü/~‘ž4ɿ㞧) Ù;ïl™2Å¿í¶Càû®]3/¿œ™%6«½Sp´8nò¦@`ƒ¸ŠKâ JÂ7QÀhß¾ý Aƒúôé“L&Yº¥FäCòù<ƒNm–ÓÆØ0 ÝU«¢·ÝöO¥ÒÈ›o^–ÉŒ8ûìš/}饗^š5kÖMŽózsó´ÏŒ­Ï!w€G¼Ã~£0@Å ð„݇ä”An÷À£Ÿå$`ÜŒ5špx€ïR­u;*spØPÀ"Ë­544€ ‹Ë 2™a„Ûn¦0 “Éd†í•ꢔcZ(8ŽóX4zf<þ³xüÔDâ ×]‰¼wкW"Ñ+íÔ©ÓŽ;"‘HRkå8;]·Öu»8N4=]©q‘H½RƒK¥aؤu§ x×uk=oduµÀ $Kƒ–fŒønÁ²È@A‰ž £ð‹Å¢n×Ο6Mwë–¸í6ÙB¹›nòV¯Žÿç,~ï{ÕÏ?ÈFÜv[lñb÷¡‡¢Ù¬¼ì–'žèzå•žÖ žy&÷ío4(Ìd’ßùNØ·on̘ê#¢Ñ¨CQ°"–9Unº”ŠEU1 É(cQPâ:-…´|GÈó!&î5ÜIA‰«¾Ø-¼`ÒBÔ1õõ rx¸½hvºÆUñ1À8 Fý؃/¾^,þ¬¦æ=ÑÜ,~ìy=Ë~ëô ˆÇåEŠíµO$qK%].&ü騣|ß?*›•“½ÁqÞ‰D"ž§Ë´òHY¹™%òäaÈm"!pÊ„Ópùr¨ÝKÿ£ªªJ)å–Í“RÊ]º4öøã¥ .Î:Ë{ë­CæóçG½Îõë·ôÊ+K/¿|ùË›ï»o’ãt5ªð‹_¼ë8á 7¼=gNdâĵžW¬ª:Fë¦0\ãLŠFë´vg“ëîwÝ@ëgc±J¥@ëÅñ¸ÛzÖXê®2ýŠ '@À#:Aüa°3ˆñå 2¦UxCÊ×àIƒˆfPódƵåˆäæ¹-„zÜ”¤ÈðCÌ\À¥*®?£¹‚cåV¿œžÇ¥CCKdŒÐáSÏ~…'‘ŠÆ£MŸíå.µ5'<¯ÉóFíÝ{s.—wÝŽ¾ÿù|­gºn×h4R1‡i ì î‹òAbD²1…ÀÈTdÍHM¤Ô†&66:*{’`‚G8µŒ9gP\;ÄìèØ…FG 4Æp‡Ü·`APÀÏ1®¢±Sh¦‰E–XXœºÌEž9ÎØ\î’ÚÚÇwù™gÖ××/[¶lUCï G©_G£­{A¯|¾S<¾Óu]×=!Ý«µhq÷)•ŽÒz—ë*¥îÍå^ÇëÃP;Žïºn<ž ‚Ïhí†áÎ22q=£ÕQcs‰bºôÐBÇðÖŒÂ;‚(åš‘õëÃ\-ëCÅN¼­[½uëöu”>á„„ã(ÇñgN°oß¡ óúëù‹/Ö½z¹[¶D^{M+¥:tp]76yré+_ zôpׯwgÌЮ[uÿý¹«®RJU=òˆö}µt©×¡ƒîÒÅs]ÕЃ"ý1—H‚_†2²uÃàhXÄ…ù¾ì‹_A¼ÏÉo6´*Å…Èš1ÇÃ×iì^ƒ­€+ÒìºÐPÄÿ‚¯eTK%|Ÿk 8³œFðø3’$.*°¶ l¬sÞÌ|Šl²²#ep^et´j@R‰ØÛõ0v°JòçŒÇG ÿR_ŸN§vqjt(•æ”Èñ!ù|^$&16vn•!Læž9N¬Ü)$‡40Þ´¦¦/š‡QEÁ{„uq™ÖÚ[¶ÌS*‘LâJyýõC9‘e{ùåCeØ©S#ÔÏWMMÑßþöPMF)wÆ؆ [ÇžDÜÍ:Ö ;–È]^öêlâq‘óœ FM?´ʨúJ‚ˆCØq’l UrÒàH…'àR^ec ØQãàˆ¡Y#´@ … ¸²‡ÿË•«0 ³Ù,¾o°t*ÔœÍsÅ›ƒdEÿ¡&êwìOœPÙl8Ë8Å:+Y—Óö Ôžçår9¦˜åiDÙFÒ;æDiub6¦GŘAúÍî…ÀßðtN«žS¹¤‹SÇ#oHŒ fxL\£ÔÎ*,PÏþ( 7€JK<¥üj8çr¶Á…%mgô9¤7£Ê-zc<‚iFñ>Ð,)¶¹îgÃ𱦦±ÕÕÅbÑ+•-_ŠF÷ OA¹.$=pÐÆ „]9Db„ùò¹[ Zðîò“҂іĆ:‹‘Y*¢BP2™lnn|‹Ã®£2¨ÞTþVw¥Ú•JJë¨ À–J¨ÿD£ÑõT]‘DD*¥—'c*¨²µÑüàbA æ/›ÍrÙ›ÇBe ’Bž6¶%2£ €{¥L¹ÊêKü0A›‹w-xEœ@å±ì&råðŒ„lxI&02Ð'‘ˆ)+G…8ün‚O‡<[q6¹8{&æ]±ó;à^¬Ëic„4s6Ëñ%(h_B4É hä#„p™§ð ô„x;צpDÁ&‹âØÁ>€¨E90Ê€ú â •bü ¢<ø ¤írï8ä¬À¥"MìBÀ 9—þåù¼/,'Ãù+ÅRé J½‰ô‚¹*¥òJ O$”ã_n&ó€abþŒ^òXÚbB“a Š»Y‡‘…ËкãT,e<—ËÁíñ=,…¸^ñåò ÐÄæžl¤d2ÉŽ‡õ¤V(ôÕz¿ãôji9+¤8<Íu•R—ø~¯šãWJõ€LÀZØ3`saŠLpD¢Þ TŠdG‘@K 0"°”úÊ9cX®2XÁÈ&i¤âÄ¢ÔÒ{Gœ{ œEo IÀFð ®Ã4A¸ÍÀVCGŠÛZ}˜TnÁè 3ù7Ô§P<@]Q^ ˜·1‘[—Ó– i¤8lõ8óeö‹JePG‹Ê“Qq‚:=GLØ ø©Ä ,cÐQ×ô˜ ¶wǵ˜Ï󪫫ѣbÊw®«€ä˜{9Ü\Å]ãöØêÓNsgÕÂ…?ܵë¥ãΣ6`Ƭ|È @”XQ8n…G\¡!„CJ&¨¸ÑÆÃtär4‘Ïçó Û‘‡‰º"Rjø6ž¼1Pò™¸eyY÷47?X[{°œ)NÉf«•z,›R~r³¯f³‘0üÏhôõhTk}i©4Ü÷ǹ0™TJý,—»¸P—1&½\ªB)Ó0¨•S¹˜{û(˜3a¨äšìŒÉT/åÀ³Ð5KyÁ:áwåÉWrœ[—óIÃP@ƒQƘ®˜'´:¸Oˆ,¢Ãe1Ž÷9öAÅ ¶UnzcZ»Pø¦`äÇq"=zäî¼31~¼Z¶ v¯þ­u±8­¥åKŸÿüW¯¹æÒK/ Ãp„ ON™òouuŸËçáÌ=e2fU–°”ý†ÁdñߌGà¶ÜpUUU¡Pê<à5ÐA1ædñ0í"çFðsxP"ˆX2°c<…i`Ž•RƒJ¥{š›O ñ55Âðﯪ*çyw { …¿–·Ð+--É‚ãŒòý¥²axQ¡ð•ššh4:³¡á‚drl,öH,–Ãk ¥¬êû>* Ÿ‘ #0Nx_ƒ u<>‰ˆÛ„ Q‘ ©„Yp-˜}–‚@˜k¡TªP[—Óª ¯ˆlÆ!ÌÇœó<<Ïø`®ÔÊl$Öà1z†¨¤Ã. ¥à*?h¸€fÔ``´ìQ9®¬)€bˆ!ňAñšçÒÅ`‚[»r§é!·4˜#Gž¹1Ðǽ_Œj…€¯x¾ÁJMD~FG»î×ý~uõe¥Ò1å@Û ðæ–8N½ŠxíhyÈ̯*Π¾¾^n\B˜Nl0üB+“‘âZk¯woÿškb?œûæ7£É¤÷׿b&à”Cµ{¥j:t8þøãÛ·oïyÞñÇ_U]-ïLÀTòp`’ø¯0|Kèvd¯â™pŒÏAU̳Øx ~@¨„œ˜[2bIñ¨‰„x>ôùóÜç…yxV Á–ã8s]wp299—+‹AzžwKUU­ÖW ¾Rû=O•­óZïWêÊb1ªÔ¬x<‹•‚ §*Õ# ŽÇªRríQ•g¨qBÂÜš²1PuD·Fâ ESÆ,†«‚P€ùàà ±;ÕšVÊÂÚ¸—cð·sCµ@d#$ô0d»``ýG&¨`T(kØðÒØh1d:t¨­­M§ÓF…>Ñ8¨˜KX£4K1¢ËÊÝ!1lU ~*ÆY¨2µ 2£ÐlsE Ç ú²7uúQ¡pJ»v5UU½{÷vgãÆ+óù˰¹Ê‡Ráç\q×ÌpŠTΆ‘ß,‰„81,ǘœ3¡ëºn¤K—Â~ûË_ܵk“=”¿îº’ãÄæÌ1|? ´Û·oŸ?¾”ÑfÍšµ{÷îbëF#\5s¢¨ìŸJmi|Р>–ä`­&U&8sÌpùg·nÝ´ÖõõõH ¥ŠËWΦåG@;.¸¡UÃãn.Áœ|^€@%b÷Ékש½XôXèR©PF:¸J]áû“c1ù9¬û€¸ 1œák¹óÊòöªõà02Q€2PÕ”ˆ“ÉÖ˜Âq\G¹Ï˜¥³.§m\êl(yŽÛˆG‹EXWN‹Ì‹p•ÕÎ%T.g6ÄŠØ8Ò‘ìX’q£Ì#Ç:uêÞ½{.—Ä3(Ñ$Гp Å+IGøN™ Tí1>& €øZEúƒFðŽú'²$6«ïðH< 'pLSˆ¤Sµæ¥gÂSù_]»v½è¢‹ªªªžzê©;vÀžªÖª—ü®aˆQÉT4»‡ T™PT½С²d2ß ™Ê%Yù§?fLõD·nõ íûz„ì7†™LbõjØÜCÇùI4ú«;îzýõµk׿óùuëÖ—NoPj}¹ÓÀm6 Á ¥HN0H˜L&•RMMM¹\͉ßÜðe£R¤H1ãq8xI¹„ü”'ð Å?¦Gæ…±3‚×—òÆk*™’yˆUöáA­ŸˆÅî-;çóëËÓ]_Sê²h´èy£s¹ÎAà;N7¥~—J¥ù…ÂÉ„R*âºgÁ/ E$`Þ À¡ÌЄD{<Ä ø@.—cVì@îN1èfƒWä:ÆkßD[6έ¿Aqá³dòÐ86 õÈ Ö‡@,X®Vù×¥V&Tçh¤#¡æS­%°vïÞ½|ùòt:-›[¢N˜¹B¡À꿨žÉ÷å6ÁôÇp$˜Á5Z&W‹‚2ˆ›¤ÜÁ|ì,¥cÌÜ—pP;•!ŸÏX^ñô²@`,×ÀÏó¼m®{|ì߿ƌ“'ON§Ó"Çu›Êa¦˜'L Ëà.†f@' ­y¿°Ôr%<À(Ãða2P‰RªüiL˜³/ i-ŒxòI÷ý÷ãñxÏž=“Éd¸¿3n\îúëKå9åª%޳ÞóŽÏçoÞ²ÅY±Â]¹ò¼ÆÆ+ê”jQª¹¹YÚòØ«²Í0x(›Î&LÞHŸ>}Î>ûìd2)—-»HðßHq¢Ñ¨€k0ßÃa*±ò¬äïŠ~¥ã8B$Ñüiá˜ÃV¤”X9žØùp;ü|„¾3a¾ï·´´¼ØØØ-‘]$í >Ú‡>™Ž:Zë>a¸©5Y†j- ÊJTÒ_dª9L醬îS‘h¡jÍ*Ë F>®j H@„i³œ6Nt¤¿"->£±aŒÝ°ÚzÎÀ bÿF5L÷{˜•‹»8<ÁÌø¹\ÜK>Ÿ—IC­5òq.¤Ìȱï¸)4P8†Z(7~x ×Ï„r(¤ ýΓ’(m1ù4'LÜ1ÂÅ#„3¨ ‘H<”Ïÿ2“ycíZ­u•Ö¿Èåêg¤M­§ÜqJ£%Í|H=â°è=þ ãÂ9+†?ÌŃb ¨©2¨D)U}ûí¹_ýJ'ÁìÙbvÃN¿ùÍĘ1n6[*×ÈÿI©?D"gåó¯ìÚ¥”Úéº÷Çã°3•7‘\À¹»K^ÐæÍ›wìØ!q7Ö˜XµS‘Ž3 9™œ/ålŠŸ*‚r4Ôó˜ F–‰ÃÆCÇžÙ}fzÞWs¹Bd=o¯ëvPêߟ¾êyß,=°‹ IDAT"Z7¹î>Ç)„á~Çùn¡†á´hTÒÓß66ž_S£ËO Ćæþ‹…w8—ÍùÉ#Ð'‚|ƒV ƒ±,ý‡rŸü-ià Œ²R¤ÜÞgšZÙ‡ÙlPiÞç\xÄ8‹4?€0äÑy’Éd2Ëg27Œì„}(9 A‚‘Ï5Ø:€jã: óïq«˜iëð5Ï%ÏÆµ2*ž‰[’Àï¡q‹2£¢>,kØ@8Éœ”0)6+HA/3b ±g¥š€˜ä5“ĸ˜¦1WÄÙ¥Hàb£ÒH@íH6%Ø>XÞ CËØµˆÖ1£DfÄÖÇÿ …l‘¬˜L~ °ƒ–ì8GÓlô¹›ÿÄ4hüÖ¸(2OÝœ ¬†(žà9 dа(ö†´ˆäJ0Ó "‡ÌÌè1¢DlCL3ÁÚœ¿b¨–yi™ ¸J\³Ü…ä–)F*²ïdÉA¸y‰Ê æ„Þ´™'T‘ŠÚÂAŠ»åú^œê .4TC;JŽS]È× Ícì2 ªHJà­QèãcÈ9Cðâ‘\ ÇAµ&ÔᢢÄXhY¡¢ÈàOtËQ±ç–MÎ*Y Z±.§-S>ŒÄ'Á¨Ê¦q!#n#‘ˆïû¨qd8Kˆ8‰‹m!Æì ­@Je6¤™@õÁG™‡ìΰãÒ‹Ÿ´ ài8©BÊÅ• U¡Ž"¯*Ò£WŒ Px#9'ÜÀeƒ¬×÷}$1pº¬W ˆ®Ó!‚ª)tÐT0^–ì%Â0¾bȾ–ñ:ùap£ô3 z=`ùŠAòÇH&$XnˆÅâñx:Fj«ÊÏÌïP¨Äeà]+Òkáz¦¢¡KôÏQÏä™'“¡BË”¨ƒÉÓÀÝq¸ v]ô®aïÄ `(ï—¡Œ<Øû=¢/Xÿ¢A6IÁÆúÆÆ­ž§µþlÖh­”ÚîºõŽS¥õRÏûת*Nn¸â-tòä7oÞüÌ3ÏÔ××777 b $Fœ*!cÁ£÷¡ æˆfȆQá`z-³¢*^Wžò±.§ –p‹X–m寡:ÎãÜ»¡í¡ZÓ?ólk²Œ BžUaP³20\nbh8;N0i¢Jò–0ž®Xœ2rÏAº)¼ÃùåÄàFÄRšp /ÈÀm]NéfÉ]òÍÏ‹g‡á¿WU5D"A|¾X|"—[+Òãà„Æñ'`Üñ4ð89ðHcΞ‹ L´ŠØ”EðÇ ½ÇM´‘à„x°Çsµ.ç“^ù|>NsŸ`-¤AœÃF]…›uŒ{áqQä+ð^Æ´>p¸(c$Âèäjl´"¾‰60¡ÏRy=nuqŠp«w‹Ë‘r¨Þ„_D‚P4‡p丒uwù-VôRÄ–Æú¬ž >’Ã:Ô7$·ƒ ²X Š}WUU%`qäÈ x ¼UAyI ŒI”={ö¼òÊ+žçíÝ»7“ɰ² C3PkâÇËÀ Ü &{{qÞõD±qØÌ˜³Ž š²á¥I öKnDÀVJ2·Š¡c«Ëû’¤Ÿ9¼v;¹[Î$c•°CÀ€Eþ†á axfÞQ[ë'“b±¦¦¦E¥Ò?WWOÌfß.ç¾Ršc¡,fjÇa1D¡b" JÈû1]$‡…‘ëü¬³ƒ°•5<ïÅpSÀ7 `³œ¶\ÅbQhÞ±8èV4TÌT(q<Îú¾üMEú»²EPç™dÙâ\ñ@ ¹ŽM±ËÁ°ÅAbÆA>S‡â )¯”›U¨þs®Zµr˜Æ°C-±U¦—˨Ä\ ùE5rDĘ gãæ3û?Öñd–h¸|^AùÅ|‘Ø*¨1•â_„ö,_´qãÆD"a€aëlôxñàm2÷j*§Ê1Ê[uEýE·O¾‰D$…¤;ÿ¢@*¡ƒÅ1{ZŸÙ´Ø$éùF†¹s@ˆ!hÌ<É–arwyVàü7š%H¸Y0®T2 íÚ}å’Kª««§Nºk×®aØ+ –‡™Xû|KÀr0$ÿ¬©©Aë´OŸ>AÔÕÕIŽ ‡Ä°{º–‡Ãá ?eÃpÀÚ5Kj! B~Œ<ÉP4°.§ zòˆûpÎa ¸HÊM{þ¤Àœãs1Ú õ…¬…œFôH¹ˆH9 ?+9eŠÃD8€£âäªH4È(ܳæ©hœˆåcØœÍ7w•¹¯Ë-k¦¤c7V eì/*þ¬X c ã³J¨u  Š™üºà}yŽU€ËÅb±¥¥=y8îÒ¡ÂlbXŒG>%øl ”°Ì³4®°I8hPÄ®„!Vc¼5@™>‰Çãàï2ÚòxA'¹ §ÈæïnÌ`ÅEø‰0ÜþDê°]YÙïiFU¸»‰Jc±Ì€þ(ÇÂÓ*oü ¨\9ß·o_ccc.—߀äG@Ÿƒ.)傉ÄÑG ´ŽN¹Œ–>þŽƒàÑQ)•‚è…˜×ü:ƺ³rò[,òd]N/DÜÃg:t„3R¦gà4NVX¬a/—ȸ¦†-&äO0+>Ó¸ '!'ÓîÿÃ]\.:WÎKsnTóp¤¬“§kcA˜~Æ%Ëa“>Y¨›%p*ðÇL;$5ÌÙñ«D3Œ«—ü yD¾Ÿ?òW®ŽòH)MâÍ:øEžg5É2°@û!Fpi jv®ØE!Ã&¦…PÏDµÛ›­^·ÊÁÄÁ•.øiÞá†Ð-³ðR‹Ü§¤P³E}»8p»dEÒ&BvÅ)ü¢€§áøµÖ{gã¤æÏŸï8NKK‹ëºÿ^,ÞžPnÉp‹±ž•æ.O@6U.—[¼x1 ø|¸x>~‹ñ–ر õäà•;x/c †%ŒZ–ÄÂÒ|’!>ŸRdõ nDƒ—ˆaèU0‚™'íåbä6ÙDr'™¡ä˜Ž” mFEB[Ѱ‚–.ûÓx›ÕÕÕÒʶXGÿÀÆžÒëŒGž'ò±ÇÛµkWEº8°°‚哇ŒR0O ¦Ã˜½AŽD„¹Ø!59ÎÇy0›ýL:]llŒ–J# …)•fà ×ú-¢xA–GB‘CèÞE"?p;  à/ÜÈàrh,ñ…qÃï GU"<äšÜi³YN›!ÖP•†-@3Õ[ø¼-ø> àí¨ á–>ÛA ‘‰CÉÍÐS³Ð3I3s#ªÖÔ,•ò£²e‰„x H[¢ÄNÈ€¸àFpU|†Ñ Â$<~+‘H>Oïƒ[ nmv agšHžƒa§ÈSa$ÄÆŒÂnŽF?RVW„ áÆ¯ëºÉd2ær9TÒä®QTÑZ×ÖÖ‚ñˆç·ØÁ`œÅI5ˆY¡n|HåÄvK¾ïcC"pæm‰*+ëL),K 0K^Ìœöš™5 Œ!Už FÐW)ºƒýÊ ¤rD‹ž…O`MØüñd"þDuuµ\°Üì‚AÄ„ø]¨Û¤4Äa#ߪÿˆšQ5¥lwÌ^° cº"V]ôŸÑ “g…b4ƒ©”HxÃú€U曡ƨõ‹¡—xBdŒ±=à€A²€Ä ¦¶¥¥¹Ó‚I“‘ô°­ð1L«ÊÉ*õ€–ÈmÂ’"FVJuèСG;wîljjN]1ÍF_ƒ«Ì¨m¸l à,d{pÀÁôÞ†¾ Ïo2y9\¦ G|fp×`\Œ²P˜€>@mÀ»ðþ4Þ 6P¤Ê<9ÇzV’e~$v|À=¢Œ À:;^ â1Êã•%8@fä².§-—=Y)“,ÅPäõ<ñ߉¼rHJ mDçPøŒÙ-ñÈ¢• ¶nÝŠ¡KE´üpN¬õ‚s.iM:æÀk†ò(…Ù T!X Jµ¦»G¤ÝkÖAa¶”Å$ |àQ…@£E'&-…h?Xéô"xäþ6C«Eñˆ1 ò!ÉdRØ(e/%OF~‘[¾<\m7¨QSƒŸñ\rQYœQ¤B¼×TK¥R:Îf³â?Xh€ýSÔðT 1z?r³¬„Æà4ƾ3]²‡óù<70” Îã@¤R¿%#Ù@¦±è_¥ö¦¬à9€’Ç•çóyÙª5u/û$Ö2„;g7ˆ<¸ã®ta9î”]Þ>×TŒãÉ•Oxqi⊠Eᙈ=J–£´.§ÍærŒø‹ûÛ"€ÔÆ”;Ï?¢$mdÍhƒ¿h°½â¼¡ýÀd̺Ϻ>L•ž1TŸx¦`í¶!ˆCX‡ ¤1pÃ3φ>G¥¤¦1G‚òûJT!8ç¹{„›7 ¡.' 0RЍXš…u©TÊd2ÆD’<øoqÃLWÊÕ-Ž©åu0›XÀvíÚuìØ±¡¡Ëh˜QÇ´?—t¸Á†À™gª¸«Á½Lé²Lð\IBáðͼùy's(ƒï )[W.Ry›¬ÜÁ–yFR \'Êp‰NdW 2àÎøÆÔ ¶fA1Ù äêx<‚ÊÃ|x8| ¬PÅb ¬Ùø˜¹lA‡¢NÎÀ"æ8`h%ëwX—ÓfØX 0Ôb†M]Æq¥•ùkÑ ‚ÙEgþ†{6‚]Aeƒ—à¨FBv$ÆÅ5Âaàx&¨†H•œ1lyñ9Á1¢„(Ì(#Èñfu>*†Éß­$#Aå‡Ýü·D‚¨¥p(‡ê@Ø‹(š ”çFà_©eKåí%æÆœ³Ý0O;l ý`ðB^«ïû555FÌLjQM ÇŒ± Õš¨iÍÕ¢Zåáw9lGûšq"ûrÀ†7°ûܧA›“UÆ önÈ1šã³J€2¦1q!v—¿pä¹£®Š-³(¢ý`p†rÖÅqd¶8ÌȳÍ\dž4\ ¼™¿Ä"åt ¬<–,,HÞ Ï&6Z[ðß,ß`@–áà…£S5ˆÙáSqJ ÊiÏòh-ß&º÷hT€þ’E]+ƒéˆY<y[ ÜÀ¦ÈÓ0ø“&3Ê‹½¸")°¬Ê§q©‡V¸ŒÊ2+ׇ©˜3‰ÐÏH; åJ Þ‘ôä"¹&,Ócx³Ð‰u ÃTk²;D07C`Œ±Ü,¦gàYìÙ°žAíuuu¯¾úêÁƒÔÃ4Y Üž96 ¬Î «’3¸lun`4¿8ërÚlxâ‰Ã‡W­e͸ at¸²Œ²o>¤8Ìynôî c­J›çðóÏ?ÿüq9úÆôõßø¯ª ûhñãþ|{aÿ—Ï?l/Lµh8uêT¥ÔùçŸß­[7¥ÔòåËׯ_ß®]»K/½ôoÿ-/Ùñ˜žç|{åæ}ÍõÛ¾ðù3>¾»ºõÖ[ßxãaÆ)¥î½÷Þ|>ŸÉdfÏž=hР+VL›6Í÷ý]»víܹó”SNyä‘G2™ÌâÅ‹ûöíÛ®]»ÃÇ®5ªX,f2™7ß|óüóÏ_¼xñôéÓ}ßß¹sçÞ½{û÷ï?vìØ¦¦¦L&³`Á‚þýûïß¿ÿ™gž) étzåÊ•<¬üÍ /¼°nݺ–––5kÖÔÔÔtîÜù¾ûî+•J™LfΜ9C† ™={öܹss¹ÜÖ­[›››ûöí;zôèl6›ÉdæÎ›J¥âñx›ßÅìÙ³ûÛߎ3føðáòã"7mÚ4iÒ¤|>¿oß¾M›6qÆãÇß½{wssó;ï¼Ó£G0 Ç'ováÂ…_üâÛðvîºë®§žz*“ÉÄvåÊ•“'OÎçó{öìÙ¶mÛi§6nܸ}ûöe2™¥K—öêÕË÷ýßÿþ÷rñ‹-:ûì³'Mš´fÍš–––µk×&‰=z´áíL™2å‰'žøýïÿãÿß\´hÑõ×_?hРcŽ9fÁ‚3gÎô}¿®®nÿþýýúõûÍo~“ÉdärÊ){÷îýãÿX(Þ}÷Ý6t¢aÞzë­O>ùdûöíÏ8ã ¥ÔܹsgÏžËå¶oßžN§?ó™Ï<øàƒÍÍÍ™LfÞ¼ygœqF]]ÝŸþô§|>àÀuëÖ 0`„ Û·oonn^¾|y·nݺtéÒ†oçÙgŸ}ê©§¦L™òï|G)ÕÜÜüÐC‰˜;wîàÁƒ§OŸ¾hÑ¢l6ûþûï‹ÅÞ½{ßwß}¾ï‹‰8çœsV¯^=uêTß÷÷ìÙSWWwê©§"ÝRœ¼t÷›3^[¾h®ê~Rêç¯æ‡On=îYý±­#F<ù䓯 “¦R)ùâ¼óÎknn~öÙgÇŽ«µ^½zõµ×^«µ>óÌ3‹Å¢Öú†nX²d‰>œ.~Ù²eaŽ?þ±ÇÓZ/Y²ä†nà¸öÚkW¯^=oÞ¼áÇk­›››Ï;ï<}˜-¹H­õرcŸ}öY¾H¹‘ûï¿âĉZëéÓ§ß~ûí|ƒ—_~ùÎ;‡»Ø¶mÛìÙ³O>ùäÊ×$9eÊ”‘#GÊO~ík_ä÷´Ö·ÝvÛo¼±aÆo}ë[Æï¶Õš?þÝwß=jÔ(ùg}}ý¶mÛ´Ö¸H98ZëáÇϛ7ƒóØc?¾mogãÆ³gÏ0`çç?ÿùå—_n\äÂ… ò“Ÿð+¸æškÞ{ï½9sæÜrË-Zët:}Á´á½„a8{öìáÇO˜0A¾#Gk}ðàÁM›6ñÅ6lóæÍ88{÷î½ôÒKùàüêW¿š6mZÛ¾5kÖL™2墋.’â"q#¸È?ÿùϲ'qƒ\pA:~î¹çÆŒ£µ~ï½÷®¹æšÊ?±#]>¹ñÊûg¶ëzœ«”ò"±X²ãz“Ý·oߎ;>÷¹ÏµÈ|>?~üøîÞ½û¸;ï¼óŽ;î8pà®]»PÕüÔ­ãŽ;nÈ!R8Ö¿øÅSN9ÿìÒ¥ËqÇWWWwçw>õÔSŸºÛéÓ§Ï!C\÷ƒÎñ¦M›’ÉäÑGý©»Çq† Ò·o_þæ®]»®¸âŠ›nºI ÑŸ®Õ¿)—ÉêØ±ã°aÃ8pàÀ|ð£yh®K¶ëpô‰ÑDõǨ««{ôÑGo¿ýö:æ ¾¾^rš{Gœ>¥käÈ‘£FZ²dÉ1Ç#=*»õ|ùò1cÆ<ù䓉DâÓ~/Ó§OŸ7oÞ=÷Üsļ)S¦Œ7îºë®{à>í÷ÒÐÐðâ‹/.Y²dÉ’%·ÜrËGþù{téÒ¥o¾ùfSSSSSÓŠ+fÍš%¶OïêÙ³çõ×_o ]ŸØZ±bÅÔ©SGŒqd¤qwÞyçYguóÍ7/X° ©©é¹çžû´ßÑ7ÞxÌ1ÇlܸÑîÕ¶w9ƒîܹ³Rj÷îÝ[¶lt]vÙõ?_7nL$‚}:Öã?ÞÔÔ¤”Ú²e˧=µë½ºŸ”ºu†¾u†óøsk“ª®®îæ›o–¯7lØJ¥R©ÔÛo¿­µ.•J÷Ýw_*•6lX>Ÿ×Zû¾ÿ…/|!•J=ÿüóAVýv̤R©¥K—j­‹ÅâÝwßJ¥®¾úêB¡ µnii‘˜4iRA<ýôÓ©TêÜsÏõ}ÿpƒäóùaÆ¥R)ªi­ß~ûm¹þ 6È Ž1"•JÝxãrƒ»ví’˜9sf†‡Ï½\yå•øÚ¸ÈR©ôÈ#¤R©K/½{lèС©Tê‰'ž‚ ÿüå/ò+ló{™9sæã?._¿þúë§Ÿ~º\›4¢}ß?÷ÜsS©ÔÓO?-{lÒ¤Iò---ZëB¡põÕW§R©»ï¾[8‡ÕÛ‘5räÈwß}WöØ]wÝ•J¥¾ûÝïÊkjj’Û™Ÿ¿øâ‹S©Ôï~÷;9tm»Òéô~ô#à#fÍš%×_WW'{é§?ýi*•úùÏ.{éý÷ß—˜;w®®Ñ£G§R©¯ýërƒÆÚÙ¤o¡¯fs§ãú9ÝOJ}çÑ%J©n[ž¿åúoYl—]vÙe×G¸veÔØ…ªqÏ–I¿¸Ì²Øe—]vÙõ -ërì²Ë.»ì².Ç.»ì²Ë®#k}€XËÕôzgsÃ)=jìC±Ë.»ì²ë#Yïîh> ;~ˆËiê|æË‹Võîx¼}FvÙe—]v}$ëåEuùNG©²5Íå8N¶ªÇ˜×¶ýÝHfëjZ6ÛGi—]vÙõ»t³Ž¿ùoÿX®ª‡Wö7J)gÑ¢Å7üzÂ…7ýŸó·? ÃAÇ/ýŒgŸ¸]vÙe×?ìš¾Ùûëv÷ïº ¥¥T¶qß̇o|öÁÛ"ݺuí׳㞠KÛu;>Ù¾‹ü￱Š~Kº~oK.ö‰Ûe—]výîb±J©øßuâoöoy÷Ô>ÇtëÖÍÆé_>0îÝÍ»‡ühôßýå TènëWsÐ>q»ì²Ë®ص£ê´Í¹£J…ÜßýÉ9ão=¥÷Ñ÷Üvcÿþý­µRjÛ¶m{öì½ìÊïýOþ’ä½ gŸ¸]vÙe×?/9þ}6ýiŸîÞ½Ûñǯ”úÿä¦kZ¿ö¾IEND®B`‚saods9/ds9/doc/user/catalogs/cscsrc.png000644 000765 000000 00000633313 11332127303 020375 0ustar00joyewheel000000 000000 ‰PNG  IHDR&_ÄŠbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ)Ýœ´ IDATxÚìw˜UºÿOåÐ9LOwON0C‚¬aÇËUWEtw®UÁQLq”•ÕE õ®¨âŠ¢(Š:Hf†É¡§{Bç\Õ•¶W—õ®¿[Ÿgžyª«ß:ç[ç¼uÞªsN×E ƒçñÇ÷ù|àéè8s¬@CCCCã—€”`8Vâ² Ò>8ŽAƒA›ÍÃð›åçç?øàƒEEE999h0\µjU[[Ûã?^PPAàýÿýc¿å†ßjµ¨¡¡¡ñ‹@”¤·7½ûß÷^žÉd~¸yWÿ¿ôÒKsçÎef0Ư½öÚìÙ³EQT÷¨;ßVÿ÷öö>õÔS·Þz+êñxÚÛÛ{ì1‚"‘ô-0 Ÿº-ˆâš~‰å>¤ØÙÝây1?×’fùh"m1êtîóGq-vÛ[»#+òëÛ|€aeî–îI’‹Ü¶h‚I¤X»Å€¢ð@0N“¸+ÇÜá oŸÝ(-p „b Ë;í&I–ƒ‘¤AGÚÌúîÞ C•%ÇÛW9{úC/æåZØ ‰§ÍFZO“¾Ž!%ùŽ–®þãí«JÝm=¢(ºlñ$O±6³ÇÐþ`Œ"±<‡µ½Ç¼ýˆŠüÆvŸ¢€’üœ@$‘f¸\›QQ@ ’ÐÓdŽEßÕ‚`hX©»±ý$a¹ÞH†Ü3Ç‹áXÊd zÒÛÁP¤¬ÀÑ|¢°ÊW‡7 ˆRËšHeâIÆfÖ8Úˆ‘Và´¶yN6¼<ïhgŸ"+%yö`4•b2«‚€?œÐÑ„Ãjìò! /Ïo8±„Ë s{6#¸r̼ †c)“ž2èžþ0ŠÂ…Φξã퇖¸º|^òÖ“‰%«IG‘x¯?Jàh¡ËÞæ9©êóš»údY)γ‡c©d:“c5 0<ŠÓî´›;ÿAÕ—8úƒ1&Ã;sL¢(‡¢I£ž²iO_Aà¡ÅΣ'Ó|RóÉŸÁ'}þ€eÙp8||cþ½-<A²,ó< …~À&»-˲$IªñØ[,–gŸ}vþüù …B<ò†a?š:Aï~٠ÓNý‚þØtÊe!Ó©¤¯w€Æ®´wùDž)ÍÕ7´v'ñÑ%öÃMñXlx‘µ¹ÃG rèH8Ú×ï7S0ª=½@âó,dS[O2õ­ýè2û‘æ®h$Zâ4ôùþ Ý€I<ëñöc@´éÑ–No:•^h©kêJ$âcJíuM±hlHž©ÛÛ†œf‚M'½½&p¨­Û'd˜r—¡¡¥;‘ˆ.µ×íˆÅbÊ,­ÞP(’o§£Ñho_ÀDB8$vxú1“o£¶{’‰øè{ÝÑÎx,6ªÔÞÐÒ‰D‹sõþ`ÿ@ЦG!ÓííG!Lj7wô¤’É‘ÅÖºæÎx<>¶Ô~øhg,«p=½@(×L°LªÇ7@¢²‰„Z»¼<›®pUacTûX¬ªÐÒÖí …Ây6*‹ûúüˆÔÑÝ+ la}´Í“HÄG•Úêš:ã±ØÈ[ckw$-rèÁpÿ@ÀJ£@â»zúEÈ5áÍ=ÉdbT±jS–søhG,+s½}~ ä0á›öøú D²ÐH[§eRCóMõÇJ,çpSg,«,0wt÷Ca·•L&âÞ>¿4*·w÷J<[ìÐ5¶zÔªW…(¶6µ÷„ÑÂ](îXh–ùNO,ó.3ÙÔîI&£JìuMñX|L¹šQ´Ôeèí÷ûý¡#&pL·o‡$´vz™tª*ß|¤ùXի†æ›:{ú‚Á°æ“šOþ<>éñö ûŸg—³,û£< ÃGŽ7n\:Vw* @€ †³ö£FbYV=VQÔï¡ì± #0¬~;a„|õz½‘H@PkoÌj V}6ûþH:Å •…65 €`€‘Â-z‚ $ËGÓ<€ÛJË Æ3¼(!0d¢q#ËŠMq)VDÈe¥Ã .Í gðÙ…Ä»‘ %2AÊî´è 3³‚NdI¶›h@mްìs;ÌZúŒ4>²Ìùe}M`g +Ú×èŠ2¬ÌÕÖ‰&3¥yv†“ºú£n›ÑlÔé0ÑİÒܽ =:›4¢øóºnAFVäÕwR¬P^èˆ$3Þ@¼Ða&I¢±;`Ñ“å9_õê)|beÁg‡»)3´à@k?Ç‹C‹s{éHªØi0Òì å˜tùË7-½ UîüâHM`ã« ¿:ê“eeX©«£/I°%yöŒ wöE]VƒÍl8ÜÞo¢‰áß ›8¼xwE ‘îÆî`2Í—äÄÒ|?^c¦i²¡+`ÖCŠû½zŸ4²`ס.GÇ É?Ø:áÅ!E¹ýQ¦?œ*rZaiî Ùt¡Óº¿9+ÌCèøÊ¯öJ²\Uê숅bL‰ÛÆKJGoÄiÑ;¬ÆCmýFQêÜÛУ#°‰Ã‹¾<âE`0¢ÜÝä ÅÓ|YAN‚<±ü“^O5túM:bè1aØäo…’¸m€åÄŠ"G Êô…’E¹Úù󸤑&™üèóM¶‘Ïnê>øêÞ“ZÝ»®åÔ!r²±7˜ºkÍg£Krî™y–ÍH}Vç}쯮=¿ê¦ê‘4‰©#:^¯q»Ý7Þxc&“Ù]ßûðkû:úãÊìf= Ãpgü‰ _¯ÿ¤±Ôe)vš!ÚüE i°’8öŸ '–ê Kœ7ÄèõúÅWWf«oë‰spÃxÕäâ T™K8­ž@’¦È»/ÖéñöE9%Ÿ‘¿b§qöyE mž8‡(0ªØ@×N--·Ãà ͱT&˜’RœJdœ]ŽE°=h1PE¹¦ƒAÇJ\¦¶¾XFËÜæP‚ˆ±%N“¤@ý ·Mo6ÐGºB6#U˜kÚßБx‰Ó|ÔQ¨Ômî2¡Wî6³‚ÜHæÛ :ŠhôDrLt¾ÃTÛê7éÈâ\Ó‘î0‚ ¥.SO0g„r·%Á ¾PºÐaÀ0¬ÙuZt¹Výö€EO9͇:‚†•¸Lý –—ÊÝæpŠë²ÅN£ ö¾¸Ûª·éÃÇ„}Ó I¼ÄinöF$”¹ÍQ6˜È”»Íœ¨tù“ùvƒAG4tGrLtÃTÛâ7ÒD‘ÓÔІ¤ÔeòSQ†/w[RÑJ: Ž5y£¹Óf8Ð0ëÉ"§¹®3„ah‰ÓÜ9HsR™ÛMñ}¶Äi„ ¤­/î²êm&úpgÈj  sMÛ»L-¾˜ +ens Æâ™2—I”Îdž]oÔ‘õÝa»‰.t˜ö·ú 4Qä47x„”ºL½át$Å—çYÒœÔLäèI?ÚÍ5ë\vÃ7m³Ž,ršê:C†”¸ÌÝþD*#•¹Í±´ÐaŠFFZ{c.«ÎnÖêªÂµI+q™Úzc¼¨”¹ÍÁ8ëeJ]&A†:y6½IOé Ûta®ñ›V¿ž&Šæ£žˆA¥.so˜ '¹Š«Üp°3Zï‰ +0Ž-µãœB÷4s-Ô˜bs,-ìm bUíÈ"óèb3'Èb& ¥ƒÕcÆ»oˆÉRi®î῾uíåWÙ•£ž´Œ]VÒ@ã ž˜&rÍt³/!+pi®Ádb)qT±Ùãý1vˆÛ˜•ž@*ß®£¬Á3ëI»‘l쉣ZäÐwúÓ FSbêpÁ8W•oJ°Ro˜)rèqmðÄrL”Å@Ô{bçÙtmý)†SF›¼a6œàGšÃ)±?”: ÀMÞ¸ÓBh¼¾;¦§§…nîMˆ <Ôeè ²Ñ”0ªÈäOþ(;ÄmäDà $óm:šÄê=1³Ž´É£= A‹ú®@:þ°LU¾)™‘}¡tQŽžÀÐzO,Ç@Y Dƒ'Fx¾]×ÑŸJsò˜sO(Nðà MÑ”ØaJsõŒí‰;-”‘&<1=…»,ºÖÞ„ ¡yOˆ&…‘E¦`Bˆ².ƒ CÝý‰<­#ñO̤#fªÉ—€ ¤8×Ð`âiqt±©?Æb™ÊYï‰eùÁŒžœ0þ}÷ü}Æ×ž7´ÙDyw½owý±ÉÏŸU’—c8>q4{À¿›të³;%I®ï -|á3YVúÂ)€ŽÄœuNö á”x¤;|îèª1Ã+¿j í8˜Pîhîìéíó¯*nÚçÏ5Óž¶V?‹IÀÎÉ(%'xàZUh¥Q¾/ªU±ïHçèÂÒÆÆh4>ÛÝ\šC^vö¤p ÷’±UžÎ69=q”ß—œ6¡ôݾZ`;§X÷~Ã)˜ÛL]2.¯­¥Iä3½tH‰ûì¡9¯mx/™b\ECÉ¡£ÑŠ+™LlÀQ’c¢°Ö~á²\ºÞËð¢2±ÌXïe^Sdô„¸hJ(ÏÕ¥9Ùá&’ÂѶ†ÄÐÕØË"˜Tf¨ó2,/UbjõgŒ8Ô¥¦¥¾(—g¥n` 4žk"šúXIcŠô‡{Òœ O(55ö2iNžoˆ 8_d§%xBŒYOXtXK?Cp…SwÄ›æEeb©±ÞÇ0¼4ºÐØá#I¡Ì¡cxÅÎä˜Hš@ÛC íTC/#ˆJVØøS»?gÄ!.}Œ‘z£œÛB¡Ü6ÀèIÜi&šúXA“¾fnìeÒiXž!ý1¾ÐFË ÔígLzª#Z À.}½7Í ÊÄRS}/ÃpÒ¨B£/‡“B©C—@O˜µI=µ 0ŠåоJx\±©#˜‰§Å!N}‚•}QÎe¦0iëghsYȦ^VÀ¤2C]à òÄ2ÓÑ^&•‘ªò Á¤8ã l´àv?kÒ6ÑÒÏ( <Ô­?âMs‚<±ÔÔÐˤ9id¡7ʇBI͉ 'ÄÚ ¤ÂÚFJtÃ‰ÂÆ»‚\,-T8uÉŒì‹pN3I`HÛChž•:Ú÷mÕ÷0¬ M(55÷g’¬XéÖ‡SR”Ë·R· °FÏ1ÍýŒ,C£Ýú:ï U?¢ÀЂq¾8‡$à ±V¡ù¤æ“?O €¿mä¿—“bO6"À0lÖOÜ|îIöOm¬ýÞø4©Òõ_×M~øÕ=ÙÈ4udþü«&˜õäñÆÇæSÃ0\è0¾8šËªø‚I5Þäçÿgñåyvƒ:d XȧGc‹×|°»öðØ|²ÌÄ•;©¾pFPÆŽ¬‚8ÉÛ­æ\w¡Õl"P(Š‚øí$q°ÿ`ÝW ]±Hø£]_Æã +Îw¢³/ûÕySÎ2ŠQŽ˜iäó/¾l Š,Ùõ˜EO?gDq¾bÃl°S°ŽÂ-z|ÇÇŸ6 »7ÔÒº~ÆÌþÝÕ y #<ïú+*ݺ@(’a™@J>Ò›ÁPxxõU'£hTýM7“Á'ÙâÃi©ÐF°¢Òlz̬Cû2† q’û»‚ÆÑû:^U.ªi€Kd”â"ÆJ=Q!׌“8Ü<ÀQ8R’Cìa[¤û²=-Êа<ªÎÇ2<(sþ„ØÝ‚ ¶o P·¯óe0‘OíëLËY@ð0Tä’žJI6‚“”ÎoÕcVÚЗÁ1d¨‹¬íf)¤¿êdx Tº¨?Ë(Å9D"#{"‚ÈÑÜ4À‘8Rê ô° +þNØ›æA©ƒ ¦Ä¾˜è¶àµx=‰æ[ðÃ>Eà‘ô¾Ž´¤@#òéƒ=,+€Š\Òáƒ))߆ ²Òâ-:Ìn@ëû28ŠTºÉÚ.FÐèBº¶‹áD0ÔE¶¸+Ù‰$'wG‡ÓSHS?GâHY.qÀ£ £÷t¤ sSõ½™JD(%öÆD—ǨÕÏé¤À†ö².¤÷Fò²ŒÊsÉÞ˜HJùV\R@G7ë0‡­ïÍ`(\•G~Ýu¬ê÷w1 u’A>ÊH…v"Í+Ýa!Ç€)ôh?G`Hy.ù‡ hl½·ƒáePå¦û2IN)É!"Œä N3Žcp‹Ÿ£ ¤ÈNò² )ÒíéH‹ 4<ªS…9Èþ˜8󬸠ö o¢Q§ ×|RóÉŸÇ'Çé²<A,/5õDšz"G=aõ¯¡;$HrvRÀñÆ—¹-Ù¿òõ)çˆÞ'Þúúød÷í}æÚ…3϶›uYcôøc ]æ¸÷Ú³ùŸ/I ½ïw“‡ÙOêæ“g•ÚÖ€>Õ.¤#]½akñÈ£ïnhÖ¹†mcý­m0›â«ØÇÅýýñˆ’£@¦—w46Ô·úyÃ@[È¥×z´×Þ°¯·³öåáÜ8õ7¶vµtÐAË·¦X:¿Í3ÐÃ÷8!K„û¬BÉ¥¥Mµv>’¨mØA±L1¢ï‹{víÙïK!Æ<ÖçoîÅ{b QP¤' h +¢—[doÄ3Ðð%À@Á´Rn ò%·"1¨9(›HÈJÖCpIöÄ”$t(})fÀ+HòPR)0 ›ƒ²‚L$h È$»JgTI Ð(‡âM‚( ªì ’ý)¥Ø·†‡Òã ) ëp(W:Š À¹GfW,L+eÀË7®¸ô…AMÙHB6h )‚ LrO\IpЈ¥? …eˆ¤x¨/©ä+ÌJAf 4eƒÝF¹;ª¤h”Cñ%A„•6ÍÀþ”Rd ·„ HÐiUXDá%hXŽâM€XfW‚,L+¥f È7ª¸ôAÍAÙ@@öo…™äž8P… ¤¡£TX#B½ %ß(Ô”-d¡@sHÁ8Ï(wÇ”‚°XH)…&€ÀpKPÉ¡! š‚2…ÃN½ÒU24©ùä¿Ú'ÖÛÈ‹¢|j¼¼ñIã—Œ91¨œsŽ à{,!èÝ=m‚$._2¡Ò½ü­}¢$zÈ3뢑9ý÷ŒådSY’³ê®‹vÛ §vóI "‰ 5¤HœS‘l ghRÐÉ¢.+àpúHX‘ôgÁÕÇ:x‡"š¡˜ÄiFÆkûxÙ1¥5EÉö)0B×'%Åi>ܯˆös`…ꋉŠl„2TXZ˜—û«’Q?üòO IÒ¨Gv(’ ×I à‰Ê]œU–ô‚! á2_ (‰Cý°”)ÀŒÀÉ$µGAc\S„Ȉ`˜÷&°…´õ¥;%’ˆÒE DvëÅæ.Ê`œƒk œFÙ¹Î(‘ rã4â¤E1D‡I9´ÜÅDŒ°sõ!‚—ÀX×! µ4dà|ƒ Ê/‰˜ÉŒËíQ ‚@©‰kŒ‚t‚0_‹fà"£ÀP_ ±‘"*Q‡•|½ØÁ…ã„´sÝq"ÁCe&>Î!ýiÄI‹(:cÉZl⢠ÆÙ¹†ÁK`Œƒk‰Œ†X„ƒ8Ï È ä"F\2“r{”™¹£ác'¢ «²ò}),ÂÂ…F!#B½)ÄJJ4*wD1 V bSøa#ì|wKðp©‰OpHÉ¥E V:£(‰ÈNZlQ…år!‚“À˜®5J¤PaÂ,âOÃn½ÐE ¸d%å¶(¦(`¸kÅÃýi$‡ño«Þ¥[N¬úÑ9\{”H  Ü,DXÄŸ†]zÐEô¸d'åÖ(&Ë`„kŸPõ•ÞŸÆB \` ò&3!q¹#ŠÁ(6òGO¦ù¤æ“ÿ"ŸÃv¤Í øßOþëÆÚ“Bβ?üúøF>;×àîgÝöÌŽc;Pg\7m”‘&N:÷ÿnò­+>[áœ?c‚YOšôÄÃë>Ÿ}ñ¨Š|Û DguÖîÝ»S©Ô`¦l_õ_›@îÈŸáeéŽ/ùX/J[¨ü±¨!çŸLBä Û§2¡ ãÑ|]F°7…ç¼”šc”ËŒÜá°ŽF¤!æLCD‡@r‰1ÓÏ))Ôg2ÒÏ`.ŠÓáJ{œ4bb‰‘« ët¨4ÔÌ éID.3fº“$'AE†LR@ƒ,–Gsº’„òôBC„Ö£R…9s(¤£¹ÜĶÅiIņL„âšOg÷¤ð’·“RÓ‰Â*Ì™Æ( ¥ô[aº ¯À}iÜIñ\n;EØ¡Gä2c¦'EfD¨HŸI‰h€ÅÜ4G  3A˜q¡@/Ô'ŒDärÛ§D*Ög¢<É yº Aža'„ZlŠRT,3q‡Ã: ‘†˜3G£4@‰õgˆ$è2‚÷¦ñ\Š7árë‰Â†˜3uaɥƌ/M°"\¨Ï0:À`nš£P¥#Aš1±ÐÀ‰ÐzTbÎT…3IR¡"}&Æcá š¯ã`x’VU‚R IDAT„riñh”2 b¹™SK¸ÂÄ6Çh@‰!È`q-Ðe$ö¥qÉ[H©%F1±T-aTbÊÔGt($—3½i"-Â…zN­z7ÍѨҞ M˜Xdä„铪¾+IòTlÈÄ,Ä¢y:…Aw’°â‚K'4FO¨zÍ'5Ÿü|²3“‰Žþç7òÙ^xá¶Ûn‹Çド¯¾úê¬Y³ÔÕ?j¢è¤I“`ðýNß¿­ÎXûþȲóŒãOWýdpþ“Iáˆâ¢ÙŽ$ÅÉHÍ„9,È.Š•¨;E٠΀I1½w8b ÙEgšã´ 7ͰD„Çó(†•`C:È È-qr)îPØH£²‹Ê4Dõ( ÜëMI˧™¤€ö³d.•a¥=I[qÞF uƒ“œTæHD#Š‹b;“+#yá°@†p‘¬ ®cÂĆo…ÕE $¢¸èLkœ–8fý,áq7Åp2ìMS’#©ù;a •T¦!ª‡aG±¾4°|šIŠhKæ’VÚ´çsHþpÄ C%'•©è1¸)¶;I12šG1Qõg'Å*êLÑ6‚7áBCToÀD'ÍÕEõ¢¸éLkœ8f<ÌÖ“¦rŽF¥¦¸Î„ ¹w8rLØÑ˜‚ 7Íö1DLÀóh&-"½ ™Kf0XiMè,¸Cq‡²Â¢:U˜'E¦E4bâ<êÏ.Št&iÁ›q¡>ª7`b.ÍÕETal{’æ8f‚,ÄnŠdÈ“¦rN‡IGcz&ªÂHTvQ™æ8­@›fûY"*ày4ËŠ°!sÉ +-‰ïJ˜F%•©ÿ¶ê{ÒdJDói&. ,á¤X(IÚJðVR8=±ê5ŸÔ|ògñɤˆ?zòùï„ö£œdü£?2ýnÆÚ §ÐÈþeý‰ ÒÏêbQJEC<9¡ É8/#Ýi½gXjK (oÁ2)<2écuI/¥£AŽ rd KI˜—Ñ9‰ )m)£ ãŒ(ß–2â°ì$RFŸ–°*6ÀÑaž,¥£Qìeé<2 èH¬XF‡ mI#…ˆvŒéfô¼‚’ñþ ˆ2*Ta ^AºÓúœcÂŒzTP…)ä‘ «Kˆx rT€£Š©#a=ŒÎI¤QHnOM(gD¹ö”ƒ‘ò2ú´„•R1?G‡y²ŒŽÆD¢—¥ÝD‚@GÊ`Á2zThM)DràL7£ç¤˜Šõstô[aýº€Lˆ Ü•ÖÛq–‚Ŷ”Q‡ 6ŒíLdÎ'½¬.!â¥t,Ä«Â⪰\"Ãr[ÒhDyʵ§Œ¤¸ˆ”—Õ¥D¬”Š8*Ä“¥t4.>Vç&R0¤´Æ·¥Œ$"9ˆ´‡Ñ³VLÅ8:"j ÷eè|2!)pgZoÃY ÛRF"Ú0¶+m¸€Lô²º¸€—ѱOù9ªˆŠgdÔÃè8ƒÃr{Ê`@y3–éH`ä©cUO«úR*–q/«s)RÚR3ÆP¾5e$`)—H{=ómÕGx¢ŒŽE²¥óɤ¬Àiƒ ciDlKécUo¤Lh>©ùäÏä“TôGãÍ?ú]Î í¡A€ .\(Ë2@E ÃNê•ÊŠô†’ BþBߨJ!+a9Q‡%I$F!‚AF HÁ!‰“Ñí…ŒŒá°()°¤À($A C vŠ}vƒ€EAAdÂ`IQ QHF ™—Q(,fd쇅!Œ@ /#¤”9E'£Ê ÂŽÈ`…A’€¨ Ya(ä)ÂXäD9ùD#ìä>]a0$£Ç„ ¾„^F  ð©ÂDNF~‚0E–ÿÙªÏ ûñª×|RóÉ3ã“° Hr®E§(Ê©Mú©{b±˜ÙlV#Â÷Úÿ1ÆlÊßk,ŽãŠ¢H’ôôÓO£‡ãöÛog†á;w^|ñÅÚë¾54444Î}ôÑå—_žJ¥vìØ!Š"šýB§Ó]uÕUZihhhhœ)®ºêªÆÆÆ¼¼¼~—ŽýHSÎd2Zihhhhœ<ØÕÕõý!GQžçµ2ÒÐÐÐÐ8#x<žã{`­D44444~´£¡¡¡¡¡… -ähhhhhhh!GCCCCãßt0F>Ÿïí·ß>iç¬Y³Ö¯_?iÒ¤sÎ9ç§åýùçŸ8p ûñ·¿ý­ÛíV·ß|óMI’ÆŒóÑGÍš5 °~ýú‹/¾xĈƒI¹§§gÓ¦M—^zé!Cµµµ_~ù% ¤¤äÊ+¯<ã…¸sçÎ#GŽd?Ξ=;''çg«Âd2é÷û³ív»ÙlîèèÐëõ¹¹¹?!ÁS«;[’ÿR>úè#u{Ô¨Q]tѲmÛ¶®®®;î¸ãŸÉ÷‹/¾Ø¿? ²²rúôé'}»råÊ¡C‡VWWÿó'¸ÿþ/¾ø"ûñòË////ÿÑ£Ö¬YSPPp饗ž‘BÞ±cGKK˼yó:´k×®o¼‘a˜·ß~{úôé•••ê… (jîܹ€÷ß¿­íØëîó›ß”••VvÏ=÷\EEÅ%—\2ã×_Aßýîwƒ,É›o¾Ùd2iø§««ëÝwßU«»££ã½÷Þ»òÊ+KJJŽ·immýàƒ®¾úêÂÂÂ3ÿ”ãñxjjjÂápÅqˆ¢XSSóé§Ÿþäûøãkjj ÕIò»Wé¬[·îÅ_4Aô÷÷×ÔÔÿüó=jóæÍùË_þ™|kkk,X ‚Ñh¼÷Þ{·oß~’Á²e˶lÙrFÎqïÞ½555f³¹¢¢¢¹¹yîܹápøG*--u¹\gªœ·lÙ²lÙ2À×_]SS …Ô«»±±‘eÙÛo¿ýàÁƒÏ?ÿü“O>¹eË–ûî»ÏjµVTT466þñŒÅbƒÏkÙ²eK—.]´hQöNâ‡yñÅ×­[7K‹ÅRQQqêÛ¹4Îííí555­­­jh©©©ioo?ÉæèÑ£555ÝÝÝÿ’§•qãÆ]vÙej߸qãŽ9R\\\XXxêë•NÅf³©çâóù/^|çwNž<ù’K.á8ŽeÙûî»ï²Ë.Û±cÇ£>JÓ4 Ãï¾ûîßþö·âââ—^z) ^sÍ5]]]‡5jÔ_þòŠ¢£Ÿa˜ŽŽŽ3fLž<¹¤¤ä¹çžóûýápxÚ´ijé­Y³fôèÑëÖ­{íµ×‚ÈÏÏ_»v­z¬ /¼ð›o¾‰aXiiéªU«²õÃôööþþ÷¿¿þúëï¾ûnAª««1 ›={¶Ïçã8î†n˜3gŽj™N§çÌ™8Ž»å–[fÏž­^’$íØ±ãСCƒ¯© /¼°¨¨¨­­mãÆ Ã|õÕWÇ—$Š¢óçÏD"×]wÝ’%KÖ®]ûØcMš4©²²òü£Çãáy~öìÙøÃ¦N:uêT—ËõÆo|øá‡‡c0¹ëõzAN½É bÆŒ²,?ÿüó&“鬳ÎBQtÓ¦MápxüøñEEEg÷î݃ÿÝ^:þüóÏ÷îÝûÉ'ŸÔ××_pÁ“'O¾à‚ ìvû† >þøcNWSS³{÷nÀ¹çžûðë¾õÖ[Ë–-{çw***Ö¯_¿|ùò¿ÿýï]]]÷ß¿N§ãy~Û¶m»wï~æ™gÆŒ³{÷î%K–Ð4­(Ê–-[ŒF£0þE477_wÝuƒ!‘HlÞ¼9»Ê”)'N,,,|ýõ×·nÝú£·G§êëëwîÜyðàÁd2éõz%IR÷«W®]»®ºêªn¸!œÖ™|úé§;wîܹsg,»ôÒK'NœÈq\WW •Jy½^AÔÆåž{îL¼a2™Âá°(Š™L&Ûíö@  W­ZµaÆ 6<ôÐC555Ÿþy~~þÑ£G»ºº‚Á`¿ßﯫ«ËÉÉ9­À©v¯íܹ³··×ï÷ôÑGj‡ÌŠ+þó?ÿs×®]ãÇ¿ôÒK9Ž{úé§ÇŒ³eË–-[¶x½Þ]»v%‰›nºiÍš5o¾ùæúõë—,YòøãòÉ'§•{, ÉdR¯×cƲ¬ ‚ °,ÛÛÛ[RRR__ŸH$N«›kúôé×^{mMMÍâÅ‹[[[wíÚuÍ5×Ì™3§¡¡áºë®»âŠ+víÚÕ××wûí·'‰ë®»î¥—^ºÿþûyä‘Ë/¿üþç^ýõ_|qÙUUU½úê«»wï?~üÀÀÀûï¿Í5×\yå•6›m×®]7ÝtÓÓO?ÝÑѱsçÎ'žxbëÖ­|ðÁŸÿügõØ}ûö=üðË-z÷Ýwß}÷Ý¿þõ¯ƒÌTÅp8l2™‚@Q´  `ÕªU|ðÁÖ­[çÏŸ¿xñâìƒõ#<òÑGíܹóöÛo_°`ACCƒ×ë]½zõîÝ»‡zZ5µgÏž;w¶··5*•JT’Ï>ûì¦M›{ì±gžyÆëõf2™ÞÞÞp8¬>slÙ²eáÂ…<ð@mm­ÏçÛ¾}û°aÃÇ໋—/_^QQñÍ7ߨ%I:pàÀœ9s.½ôÒ@  ^8—Ë•““3wîÜE‹=ôÐCW^yeeeåÞ½{ØþóŸkkkóóó­Vëc=vðàAŸÏ·mÛ¶Ñ£GÛl¶+¯¼rÏž=­­­¯¾úêsÏ=·zõêl_®Ùl–$iÏž=±XìÀF£QÅ«¯¾º²²òÍ7ß?~ü³Ï>«6Aápøw¿û݈#6lØPUUõüóÏká RWW·sçκººl?pUUÕ®]»Š‹‹ó›ßß¶cÇŽŠŠ ·Û}ÅWœ™Ž5•ŽŽŽÚÚÚ¦¦¦ï½E}òÉ'÷ìÙóNì›o¾©­­­­­M¥Rêž›o¾¹¢¢âŸ,¯‰'fÛ‚³Ï>û¤׬Yóî»ïªÛO<ñDmmmöã¾}ûÞ{ï=õÖét»hjkkƒÁ zÅ>ùä“7n|ë­·ŒFã“O>ÙØØ8˜D^xá…wÞyç§u¯E£Ñt:MÓ4Šžðð:|øðŸà3Ï<Çÿë¿þëgsñ /¼pãÆK–,™9sæwÜqüðØÿøÇ7Þx£²²rñâÅ_ýõ3Ï{ÒW‚ >|øðá·Ýv›Ùl>­»÷Þ{O·q “'O®ªªºû™:uêI·¢C† ™4iÒW\1fÌŽãÎHŽ<ð@v;//Op¾ÿþû?ÿüó%K–¨?Ê!C&Ož|ùå—7î´r/((°Ùl>ŸïðáÃ,Ëþ“ç²mÛ¶}ûöÕÔÔülþíñxxà9sæÌ™3‡a˜‡~øðáç^óæÍ;ï¼ó&L˜pj ùùùãÇ_¿~ýéqÿdÆ7f̘Ó=êŽ;îÐét0 ¯X±B½1ÏÉÉ>|ø /¼àp8>þøãµìššš?üáÁ`pýúõ«W¯®ªªRgèœÊ{ï½÷öÛo¯\¹òÏþ3A7n|ôÑGÓÛ¼oß¾mÛ¶=ôÐCUUUcÆŒáy~éÒ¥‚ o³k×®{î¹ç–[n9i\pÛm·íÙ³géÒ¥—\rÉÔ©S1 {àÔy"555êP¥ÚøÀtttÌ;÷ý÷ßO§Óƒ‰ÓƒdæÌ™ÿñÿ±}ûöìí¸Ñh>|xMM MÓ§5ª÷Ÿrþf³™ ˆñãÇ766>öØcétú´~¿ßï÷ ‚`µZ3™ÌOtèЃrg6›Ýn÷øñãÿò—¿¼û477Ÿô|©×ëqƒñx\ÝþɹŸsÎ9Ñh”a˜éÓ§×ÕÕY­Öªª*ÀÆZjjjü~ÿ´iÓî½÷ÞO>ùÄëõʲìv»Ífó ]«¯¯¯««ëì³Ïž>}úôéÓ‹‹‹÷íÛwü,€P( «ªªF¥^Ýê.`Ô¨Qûöí+..ÎËËËd2S§N}íµ×V¬Xár¹²÷݉DâœsÎÙ°aÃÊ•+­VkvfÆ¿«Õj6›Ç¿aÆ^xáø¯>ýôÓuëÖñà¹çž³Ùlƒ<uîéâÅ‹ÕK—.ݱcÇ¢E‹ÆŽ{ÓM7 ‚ŸŸ¯fTZZºnݺ—_~ù‰'ž|Y,– .¸Àét µ¢°°ðŽ;î`æñÇÜwß}jh©¬¬œ2eJQQ‘Óéœ8qâèÑ£OkÖÙ°aÃŽŸD;eÊ”lSµyóæÙ³gÏŸ?ÿŽ;îÀ0ìõ×_WKEÑêêjuæñ¹çžët:o»í¶t:­žà¢E‹¦L™2ÈÜ ‚ÈÍÍõz½^¯0vìX³Ùìp8ŒF# ÃêþüóÏ?Íš57n¬®®ÆqÜápTWWÛívŠ¢ª««O½ýGTUU½òÊ+/¾øâÞ½{>úèÌ™3g̘ñûßÿ^Í÷ÕW_-((xá…^{íµ/¿ürëÖ­K—.UûgÎ>ûìçŸþ7ÞØ¾}ûÌ™3o¾ùæAfªNÉUåÕW_Üpà óæÍ[ºt©ê“/¼ð¸qã¦M›6bĈ¹sçò<¿`ÁÀºuëFŒQ]]=lذӺhÕ GOQZZZ]]ŸŸŸ-ɪª*Õ-Y–}ë­·}ôÑÙ³g~ýë_1âî»ïÎd2>ø `íÚµ&L¸è¢‹FŽ ˜4iÃ0§q› ÃÕÕÕ•••€©S§f‡ÜKJJÔa¤ùóç©S³> Ø´iÓ Çr\.Wuuu¶ª¬¬T/õGgŸ}¶ 3gÎŒÇã/½ôRöêV'¯f󪬬TE’$ùÒK/-]ºtÉ’%guÖºuë¶lÙR]]››»fÍšeË–9räÜsÏ=©Ôøgn‰ª««ÕºÎ^Ñ[·nͶó/¿ürCCC¶Šýë_cfµZ_{íµM:묳öìÙÃ0ŒÚ.'“I­Ä54þ·øâ‹/öîÝ{×]w}úé§³gÏ~çw~ýë_ÿ,‡_|qóæÍ~ø¡æÿæM›6íå—_þG[·n•$éòË/ß±cÇÝwßjE¦¡ñïƒËåÚ±cÇ×_‹Å®½öÚQ£Fý,„5kÖ<ùä“o¾ù¦æÿÿ¡… #ÊËË7oÞ¬NiÑëõê8ùÿ5fÍš5cÆŒÁOÈÖø_dÿþý§5 ¡… /NwÎçÿFíG¿N÷Î@{­§††††ÆÏ„r44444´£¡¡¡¡¡… ŸÀ ÓÒéôàÐÐÐÐÐÐøaÒéôñ ©|rEÙ¶mÛÀÀ€VFgŠï9ï¼óN*•:­b444444~˜ãÃÊw!‡çù«¯¾Z+ 3ˆúÚÖ“CŽFŸÏ§¾#YCãǸqã³ö«†Æÿ ZÈùü~¿ú2f­(4~qhñFC 9¿<‡ÉdRE+ _ ß|óº:€††r~y(Š¢…_‚ œä±Çõõõi%óÓÈ®öÔ××w¦Öþ¿†Íf;éuyÿ0äôôô¼ôÒK'í¼ýöÛ×®]û«_ýêâ‹/ÖJó±zõjEo½õV€(ŠêJb€yóæåääìÙ³G]¤´´ô¦›nʵ{÷î?þøž{îñûýÙÕà+++gÍšõ·¿ýM] qÚ´içž{nöW^y%g×< ƒ+W®œ>}zcc£ÇãÉš-]ºôСCÿûßÕ&L¸üòËW¯^Ýß߸ꪫƎ›­nÇ~øaÀÆ9P«›eÙeË–©)ÜsÏ=&“é³Ï>ûä“O²"ñxü©§ž:I¤J}}ýÛo¿­n3fÆŒ/¿ür&“¹óÎ;5‡ùבJ¥Z[[ËË˵¢øi7j/åNw9>lö)§¿¿ÕªU ,¸à‚ ¾³FÑU«V!¢…œïeûöí«W¯>tèPUU•ræÍ›WWW·|ùò§Ÿ~úÆo\¾|ù]wÝuõÕWŸuÖY·ÝvA7Þx#àСCóæÍóx<·Ýv›ÇãYµjÕÃ?j³Ù²!çÆoÜ»wo^^Þ”)SÔå×®]»uëÖGy¤±±qÕªU+V¬(//w:Ï=÷ÜSO=µ~ýú­[·ÞvÛmo¼ñÆÍ7ß\\\|Ë-·Üyç ÃLš4éÁ|ì±Ç‚ÁàÂ… ׬YóòË/÷ôô<úè£Ë–-»å–[î½÷Þùóçßpà åååúÓŸiiiÙ³gÏþýû-ËI!§¯¯ï–[n™:uêW\¾}õì¦M›’ɤrþÕØíö½{÷~øá‡$I*Š"‚(Š‚(Š‚¢èñ‹C˲ Ã0Aj;«~¥6êúÓ0 K’@D5E1Û¦@ðº?{`v`I–e‚Ô4eYV—ÍUwŠ¢H„Ú© I’šŽ ªH5/‚$I2‚ ðP÷ \qÅEE£Ñyóæ]ýõÿäjðÿžÝÿýßÿ½víZ³Ù,Šâ¦M›`¾þúëY–M¥R×^{í]wÝõÙgŸ-\¸Ðápx½Þ]»v]tÑE¿úÕ¯.¹ä’l"O=õAÇ‘$ÙßßÇ»ºº†:mÚ´úúzÕËc±ØòåËûÛß._¾<_ýõ×_ýôéÓ ‚()))//ÿÍo~CD*•Rëïƒ>ˆÅbÇÏþtwæÌ™=ôÐôéÓêº^o¿ýöG}´eË–æææ{ï½÷OúÓäÉ“iš.((¸õÖ[çÌ™ƒ ÈîÝ»‰ÏóGŽ™2eÊÔ©S ‚¨¯¯1bD&“±Ûí¢(¦ÓiŽã>\VV6uêÔÍ›7K’´wïÞžžžªªª±cÇF"‘žžžû§§G]Øû$n¸á†–––T*5{öìk®¹æ’K.©¨¨hhh$iùòåsæÌ™5k– ‰DbÖ¬YwÜqGvù®®®‹/¾xöìÙ===»vízï½÷îºë.€Çã?~üƵˆ2:::¾þúkµ-È^ÿÙ[xµ]† HQQqWÛJ‚ ÔÖ*k¦Ú¨­¹(Šê%¯î”$I]Ýív:tHméÔ†>Ûè#"Q= IDAT‚š»ºGQ5n!¢&«ÊSÛ8EÕvMMGmaQ•$I j SwîÝ»WMEQAÔ|ÕFP£jôRÏ%Û¼¢(šÉd²gð¢(N§säÈ‘<ÏÿÆd2¹{÷nõ”E95œÚ~¯Ù©~¶¥FäBŽZM'…œSXžçO:ðøôƒZÎÇg¤VŠ*/[•ÙÏöëaÃ0‘HäÔdDAmmíÆ?ûì3AR©T¶ î¿ÿþ@ °k׮믿~áÂ…ÿ_¾³ §§gñâÅ&Lxûí·ÇŒ³uëÖO?ý´  `çÎ ,X¶lYCCÃu×]wÑEíÚµ«  àúë¯Ç0L¯×_¯4M§ÓéÅ‹‡ÃáÍ›7«;¿úê«M›68p@ 9ŸþùÙgŸ­nã8~Ùe—±,ûôÓOOŸ>}Ïž=8Žëõúõë×?ûì³+W®üì]i|Ìg×¾g_²oI$#"²/D ¥´T‰%¨§­„¶ˆ( Ú¼Õ–Z*TQKìZ­"¡Š©]HlBö}ÏìÛûá4ç¹;3™†¢‘gοÉÌ7s®ûœs넇‡‹ÅâGùøøàîÆt¿U}}ýùóçýýý]]]---_{íµ¢¢¢U«V >üêÕ«<O(¦¤¤üðÃÛ¶móòòŠŠŠÊÍÍ=pàÐç{öìéãã³eË–ýû÷‡……uëÖ Ö8|ø0ƒÁprròóóËÌÌ<|ø0œ‘Ïç …BƒOrãÆ„÷Þ{/((PsÆŒþþþóæÍûâ‹/._¾<þü”””»wïÒߥ7ß|S$EFF^½zU,ûûûŸ>}zùòåfff±ÍdF’jµº©©‰•J.œ“Éär¹€°xC;8¼@€Á0bµZ-à;±.L&³k×®ææær¹~€dðí…}!Öa2™<½"—ËÅÈI©TÂUÁÙ– à1xjÀ///‹ŸÂeÀ-cР­4•ž<Ó ¿Ù3ýßdzsZ6ÀiÓF3ƒèˆ€dàzŒ_ncccee%DÁ:&•J“““¯^½ÚŽ3Ÿ~úiFFÆÜ¹sƒ‚‚&Ož ÉÇ|÷îÝÖçÎ[^^¾nݺŽ;æååÁS-**Z²dÉŠ+jkkgÍšµzõjBˆ……Å7ß|ûúøø¬_¿¾oß¾;vìøâ‹/V¯^ ñÓºuëºwï>xð௿þš’}üøñÄÄDp(`ÅÅÅÛ·o_±b”@ñ˜666{öìéѣǺuëöìÙ³~ýú>}ú@ýéàÁƒ•••ð›[³fÍ¥K— .dË^{íµÎ;Ïœ9sôèÑñññîîî:DEEõéÓ'-- þܶmÛøñã?øà–´ÒÀ“‚sÿepÇtF‹ÇãÉår\·Ò‘& ¢4 `FL&óþýû< ÷…X‡Åbgg³Ùp.¸ÀpOð&\ \²£3iˆ€:jµÜ¤àp{ÌË >ü›o¾‘Ëå4FªÕj6›÷…©EÓwæB ñ8nÜ8BÈúõëu>âp8Æ 6l!ÄÁÁ¡ý=++«iÓ¦½úê«“&M:~ü¸J¥²°°øôÓOwïÞÍãñN:ÕšƒÌ˜1ã?þسgH$Â7 4hР%K–\¸p!??¿  àÇ,..†z —Ë0aÂo¼ïÞ½{ñâÅ[¶l‰ŽŽ†wvîÜyæÌ™5kÖܾ}[.—ÇÇÇ+Š_ýU*•B6mÚ¤SJÉËË›1cÆŒ3 íFIIIYµjÕÑ£Gà''§iÓ¦BvìØÑÒ½têÔiÚ´içÏŸÿþûï?ûì³ÐÐÐÐÐв²²eË–ý“çiee5cÆŒcÇŽ}ûí·]»vmiãC‡:u ¼&kåºV²àpÁ_ãò6›¥HUÉd2@pîa> œ;:}€ ­V{ëÖ-(–`AWŒp3B¸­V+ !<€ƒc ·!b¡B¡€×l6{À€.\‹ÅZ­6-- Â,8Äc€CJ¥’Ëåš ç™Ú/pvvæñx666ééé3gά¯¯o¦¨¨(44tçÎ_}õ—ˋʼnD¥RÙØØ8;;ÛØØäçç»»»×ÕÕݽ{W&“Ñ ‚–““¿Þ»wïÞ»wO(vèС¤¤$77W(:88lÚ´éÈ‘#iii&L „,[¶¬°°0++ )—ÂÂÂÚÚZ@p÷îÝ»wï‚ÚwZZZZZZ@@@ÇŽûí·óçϧ¥¥­]»–2yòdooï¡C‡Ž7¸ *•êáÇÙÙÙwïÞåóùŽŽŽyyy‰„ÃáÀ1›ššÂÃÃîÞ½«R©ÜÜÜlll,-->|XPP`kkkii)‰Äb1lìîî~ñâÅÀÀÀmÛ¶Ý¿ßÜÜÜÞÞ^ÿÞ>ììì|îÜ9ƒ×ÝÝ]¡Plß¾=**ÊÃÃ#((èƒ>H$jµúÆÎÎÎ{÷î‰DR©tÓ¦MÀñ»|ùò”)S¦L™¢V« L¿ÞÖ§V0Oà<8F9=(•Jˆu l!,{`M^¡Pü€ÓÇ|Th „£T*áSØ “c2™ ÿÄ´ ð Ïȇemˆ¢ `Â7Ï;'•JáÊÊÊ€w€$•Je2¤ñ¦03)r¹\LCµ2Ÿ©ù«Ñ9(àA@ÅàN#ÿ›\. QýWTÃ7ñ¤¸# ºÎŽÆ‹:p©Õ„çcÙlˆÐ‡¾°ÇŽrìíícccÑvëÖ-66ÖÆÆ&666((häÈ‘L&3%%…²yóævÙ¨ïêêºaÆmÛ¶mذáí·ßþøãáéýõ×½{÷þì³Ï~ùå—ƒ.[¶,%%%88xÆ °ãË/¿Œ©È!C†”””ÀƒâñxkÖ¬Y¿~}ZZÚíÛ·“’’¦OŸŽ§ ŠõððØ·oßúõëSRRFŒ±lٲÇÇÆÆîܹ6KHH@¾æÀàO‡ØØX???&“ùÚk¯õìÙ~^^^[¶lÙ½{wJJJbbâ¼yóvïÞ­P(àª! ,سgÏÊ•+SRR"##׬Y‰SÈe­\¹2::ºW¯^|ðAJJŠ““Ó§Ÿ~jkk ×vùòå>ú²ŽB¡066/ÏÅÅeĈ±±±P3fLpp0Dc L&óôéÓ_|ñ„Ñß|ó··w~~þˆ#ÜÝÝ·oß>}út++«!C†¤¥¥ÙÚÚÆÄÄäåå­]»¶k×®³gÏ6ÁIkLÞ|«¬9'† x=…FÃf±4s0™J­–Iˆ–É䘛755!H°˜LÒ\·W6ûw¥FÃ`2U„¨š p²,–F«•¨Õl6[¥T* p² BÔ*i.±¨Ì ‹¥Òj•*•–Ãã`t"ÑhXl¶–ÁP5'ÖÀÁa”Æd2áBIs΢a04’ºùÆY,––ÁPR…¥?CÀîÝÛxšôUûžÏe0BCC333%ÉáLJnú}B®^½êååeiiijýw-%%…ÍfOŸ>}úôéiii¦ÉÆíÂ… ÁÁÁ4ϪººúÑ£GiµµÛ¯\ÁdƒVËÂ’Ió ô# B´Z-³9‹…ÅØW­Ñ0¡Ê‘‹õ§soöòl ¶a4çÇ0F †`0 “ÁÐhµ~JüÒ„À^\G«Õþ­®AÓœ¸ûó"›oS£Ñ0 &‹E´Z“©T(´„pØlV ÷¢…#3 &S£Vk´Z&“©Q«Ù޽]iY¦™LæÿX;;úI>|ØßßàÀ€LصÆ)ë3Ä[Œ…w$GÐ;¤,c0¡““¤wÄÅ.Vv±Ççóa ªR©tÊûP¶æŽÜ\!ýÑÏŸ?ŸŸŸ)—ËAÖóøñã³fÍ2©˜¬íÚ€† öÓO?ååå­[·Îô@žÌ8gÏ vï†d 8/2 †i7,×ÓD2HŽ)•J!H÷B6À ‡Ã>¬a^…Á`°›“lø&K£AŠî‘׉ŽÉÖLµh,K.—× ëR°=\L&ƒCÁ°ÙìW_}577777W¥R±›ùÓ.W©TJs• xnlƒÍfÛýç?dРþر1ˆvÙ45C'\À”Ãô±JgƒÈ„†Éúz©¡%9b-A@æ¦yM?È–¬®®î‰“&{*ææævåÊüAÖÖÖšž‰kI”…Á`Èd2$@# ³ »d°{6F¶1VÚ!WG@TB3Ô~ ÎÏãñÔj5–^hÏK÷v zÁñ¡çðàO˜i.ræ&JF#•JÑñ!! .ê¦@½Cª®V«=zô(ÜÜ/viµZxh¨ð)"Ï"a… ÷eС°–°Ê á¡h'f$mÓšD rOœ2AN‹–——÷¿|&3Ù³6¡P( öIðù|@L”a¾‹öeP?GŸH/Ì¥€dk‡°d6 ,©*t¯ð/’Pk E€:ˆj¸®àUÑ,j ’à:ac¤ÏêÀmB0‡(HS!Hs‹Z­–H$¦ïÒ³3ä¶ëׯ›››·?I“µo»víZpp°ÎŠPöìöööµµµàˆá€0Àœöib÷(®Ê±ý…4'ñáSx³yp¨Ä@ z|,òÃuÒXçEÂÌ›ÎZetpÂ5š@…dk&ÀžM€¨ÖÄúEzÕO§õk9tÌ¡#… V«!ä2¨”ƒ…%š`¦s|ƒ¢ú‡¢‹éQK›áýb§”ñ¸ÊxÌdr©-¦tMÏÁd/œµTy†‚4Ë [Z¡PüÉ:S*ÁãkšË-t÷(íãàPÈLƒ£™‡y6ggg‰DÒÐÐ@$ñ0´ÂNLp÷ëÃ3Ò½Ÿ¤¹aff†žT­Vƒ<lŒÕ.— jH‹ÀÛÁ åàþäÎ5ƒ–Aœ@ G0èvé71 3èîü7áñõOµ }·´¼>Àèã]kéRñÆCN+»hMcØlmm æ(Lf²6k/^ 2è år9(')•J™Lå,äÐ~ˆL&„cÐI¡wh·ÎáphÔáp8UUUÀƒ …L hZ·8ŽX,‰Dl6;??Ÿ^òõ.ÂYØl¶ ´vÒñ lgž: a0Ð9„obˆPX>SbÍd&3Y{0ãÅaƒÑÐЀ¢j„J 6!f ÝÔ‰Ù,Ò€›ÆÜRݰ ¤Ñhø|>–å‘áø "—Ëy<^QQÖr0q‡(‚œ:‡#Pó3¹\®D"Aêä`++«††lU(p_P…"y.®fé<@Zs1óQˆUø©Áãè‡P­œËEÙ±Ìf<û§÷üÂ?”~aÏxªð)@Ξ={@EmÀ€¯½öšL&û裢££Aç†òË/¿¤§§/\¸ÐÚÚÚø¡ª««?ýôÓaÆ¡pKÛ·¬¬,]Cyýõ×oܸñðáCBȨQ£@cìË/¿$„¼ÿþûðg~~~JJÊøñãCBBæÎ or¹\Іٵk×;wpüŒÉLö¬ =æ °ßqb¨»ÐH-Ö‰A]ƒ¡)ט‡ãÓ h9HÌté§whug—ëׯ;::Þ¿åm ,„ŒmD#üP~}HæäCÚ ’â ûJª:‚Ä"T=ÇƒÚ '­•%D%`°ždd¦€Áo…‘r5¦ÝPëÁ ä´¦¡ç/'5òYZZÚÂ… û÷”têÔ)…B‘ššŠ¼UBH@@À¤I“Z’¦­©©)555''çú¡æå奦¦Nš4iÒ¤I'Ož„):txï½÷îܹƒx³råÊŸ~ú ÿÇŽ›ššš››«V«SSS&Mš4~üø7nDGGüñÇ{öì1ùA“=·èÒY;w¶²²"Í‚U, VŠÐ` ,DÓ-/(>Î3Z ÉŒ°Ë|ÄÒL}–Ì0þ¬¯¨ÕjÉF '™FÒàt‰–zNNN®®®b …B,3 ¡P8tèPZ±ÔÒÒÒÜÜRmNp×6àˆ„¿MötV?FòÂñññŸ}öÙˆ#Þzë­„„Ð!„TTT¼ÿþû]»v}ðàÁž={¢££KJJ6mÚäããåëëûðáò²²¡C‡FFFvïÞ=))©±±ñÝwß%„|óÍ7×®]{±žQ×®]CBBBBB/^\TTÓhðÛ¹k×.kkk///Ü~РA¨‚íïï?cÆ ƒÑ­[·   S§N½@qžÉÚÁâT,?xð ²²R£ÑTTTÀûuuu¸Æ´4fff8’ S^ÐÁ‘ €Ho±X,‰DšlpR(áÈårØ "'­VË\Él\ÝÈâ²!ò9oyØ:ª\.T÷!ªpppðóó{ýõ×íìì\]]]]]9Ž››[ïÞ½ !r¹üرc€|pÍb±X¡PÀî “ÉdPÔÁÕ:-† ¯a‚äFVžÎ’ŸaÈŒ|JwAéŒZhéPŒVMˆøÛu":~Òý mÙôf}Z«Õ&''§¦¦^¸páàÁƒ;vìP©T%%%04eêÔ©ÝÛ¶„‘¾eddlß¾ýìÙ³ðçÚµkÓÒÒ6lØàëë[SSSYY êa`™™™0lĈ¡¡¡;vìˆ×Wã6™Éž[”\H(!ŒNÈÐõÒÜ=ƒ94È,Ñev̶‘æ)j´µX,†žPpñPƒa0|>Ÿ—ÁkܤòT1k˜ŒJ j²Ñª*• xÃB¡P(víÚµsçΑ‘‘p^‡ÒÒÒóçÏc©  Q¡PÐòqH®Ã[¦4uÎn' a’Ñ×÷ÔHƒÇÇŽ¡$˜¢Ù0p¤ý¾¾áL#4ƒ#pxÍfdG‹¥sý@ó£ÿ/ðË iÙðÔôX#ÙÂ'¡DGGƒ2£Ž;v¬¬¬¬¡¡~3 êùùù/nù)))»víÚ¸qcß¾} !«V­6l¬³o.^¼8{öl !ˆÊï¾ûîêÕ«çÌ™cò€&{þƒM‘¨LƒrÂØ^ƒ"Í€7àD€P€+Y(æÓ­6øûx€½†R›:*ÔL&“·†§<­Ôn×rÊ8Ü2.aýºà ‘KÆápø|¾——W·nÝzöìÙ±cÇ1cÆØØØ@*%//¯¾¾j98@ª;4rÐ :ˆOˆ4xã°¯©ï™ÛxdCs0h†Á¸)$$dòäÉo¿ý¶¥¥åwß}‡ëPÝ0ßÛ¦½üòË0ëÖ­[±bÅñãÇýüüà£={öüþûï„{÷îB`äÌáÇ¡yùòå›6m øê«¯L_5“ý‹k&€zH3.ÿ !666„ÆÆF©TŠâö0”¦ìм&:¡„…wüձɟž² j4Z­–³Œ£ ¬òxŠÏç×ÕÕA»C… n ¤”q~ðåz1S¤T*ÜŽL&#Í ×ßWäï¸Â(3¸™V«‹Å:;òù|¤W<áX{ƒ¦o_OÌ›Ðg¬ÇlcQΨQ£äryff&!dÅŠQQQ2™,...**ª¦¦fäÈ‘K–,ñÉÖÖÖ;wîܺuë¾}ûÆ¿páBxôŒ %„lÛ¶m×®]|ðÁ‹‚7qqq;v„?ÃÃÕJå÷ßΜ9oäõ×_§wìСC\\\×®]ÇŽ;þü}ûö¹»»c-'**ÊÉÉÉä MöÜ¢Zž)g¨f†™% †ð…>%%Ô°3F&“á`i,íªo†uÚýÉT®R .P&Á. •:1 ©ªª²µµ­¯¯ÏÊʪ¯¯úYYY ’ÒÝ*¾ÐÍ1Hž†ç¡æÐ0ãÕ#Óæ_K¬BÆ?~üxW®\ipKââât¶ 2ØÝf ˆjøçˆ#FŒapËÄÄDúO777|úOlâĉ¦ožÉžg”~3]¨È‚«~BIœá|I,ðà˜œ; ÃhúsÆZs€B £ÁšZ')Ç.e3÷3!ø€¨Érú‹n­V+•J«ªªìííïܹƒ<íÁl¡j6P»B5,tÃ!‰€PzP7‘¤ÿeÈ1nW®\IMMýüóÏMrd&3Y›5ì—D?‹q Í&Š3†/ôHiìÕ‡ ‹Åâr¹Ø¡n4ŠÙ@Ü€ 4ÀªÙ³åcƨûõ3×h4II²#GxwïþW›±e@‰ c¥¥¥yyy%%%ð)€  ÜŽ'€7! A¶4Îb@¡´GµZmK-†ðôP[q_àì8š¨F—¸5¯AçȰ#<1ÒÂ8#rmtF Õôõ=éïÃc¥Âè͌Ȟ¶2G÷ '44ôÅjí|,«ªª2¢a2“µ5m1?òfETrDèæ°aÜ7xp¡Pˆñ$£ T¢§  ÓÇ ³UP¡Q*•<ÏÙYË`__ÕÍ›gg-—«R*aÐáüôèü| }EôìåDÁl'‘HèQ:<¹Mw4|$•J[úÕë°à zä–^´&x¢§Õéc@k Ç x|çÉÇH·âøÆï×DlÑJKKM‰]“½@fcc# ú&Z®F¡Pðx®$ŸÉ^D£'§ODZ4Èò0L&ÓÉÉ©¸¸X*•òù|‰D˜uLþÐÍê´Xlƒ=.HP éÙSûí·×/]á¾ùe“‚ @ZŸP}¡%U@¥ tàÈxF¼Az®(ü‰¨‰\;zþÍ‘ÑkƒãÑ0ÂÃÄ—>ä …K24âE´VæßôÖœc‚ÃfiiÙ¾é+ãÇoll4ý_·{ƒ4ä¸är9¸u.—‹>T^P¬Ð¥¼¼œÅb ‚·ß~{Ó¦M8W†F/ŒP`ÛqhQŒnÞ¼yõªŒÍæ^©| ÙLÈw<¸~PçDÕD>ðh@&“¡@@ì  ZØ Ç„¸ U >D¨Æ“™k&3™ÉžÄ°-<,=%Ik¸ Ž‹____¿iÓ&œ/@šù]`Ðjnn.‘H M“làÙq Œl®sç8¥¥D§¾IÈBŠU*&“…%"ä`ˆ|>¿¾¾ž43¿€ƒàOƒÜ90 hPÆÂ)ì×AjYk"xu Œ{Œ  ³U¸=ýˆt?OjÑê0¸#^ã¹~:í/P-V~3²ýã®ËÙ-}G§OŸ=nÜ8BȽ{÷V­Zß³gOÜF,Ïž={èС:]&3hÛ¶m»xñ"!dРA£G^°`¨ùBÌÌÌV¯^‘‘ñã?Büýý!sçÎ…_WBB‚¿¿¿éšìŸäÖKÐOaM è÷é^œ úM&“YSS)lÃÄÐC"l ùñG–V«U½®ÊÚÅ»ÆÔ’‰ A–£+H—aJÛƒ€å ü78H 6ÂÔ~°Ñ•ÝthߘQĬ †Dk¸ºx«°¨£4„Ä,2ÑÂÒúȧ_Y¡Ÿ- xðV¤…ñ?FÆÞðù|8,ÆÖ?»ÁÔâ?‚µZýÓO?YXXÄÄİÙìÂÂÂÉäém IDAT~øá•W^ÁÉ ‰´ÿ~WWסC‡ªÕj¡PÃ6€3ê@²4ýàÓÒÒV®\¹víÚêêê¹sçZZZÆÅÅ*mrrò½{÷®\¹2þüÄÄD??¿˜˜wïÞ½£GþôÓO›6mŠ=s挭­­éIšì žÁS@ÑʰºÇ´¶ ŽŽÆ”æÄs\t› ú\ #0íÆd2ÍG˜k¢4j¦šý c ô’p(ØÕá¹€.ó¡aDe°X®á„.ê€n)H±a!Êô…y¶ßÆ–’¿?þøãÖ­[ÓÒÒ$ÉèÑ£§NêííÝ«W¯qãÆEDD¬Zµ @…ÂÒ_~ù¥««kaaaJJJŸ>}Æ׳gÏ»wïšžrLLÌíÛ·mmmkkk…B!ŸÏ‰D]»v=qâį¿þšžžzãÆÉ“'766r¹\333¥UQQ!‘H¬¬¬LÄM“=±aØacccmm š³0Y[m =…Nü/H™ÁGl6Æ`Z`ÔØÿF(2~iaKˆ$ %H“§Qª”DK˜L|@(E¶P® tp ¤AÓ3§Šà’ðÆoP¤c/@ShÄèŠÎ:ŒÕzF?d$)è¼ ?jË_ä\™—ó¬ ǠݸqcìØ±GŽyë­·–-[V^^np³šššO>ùdâĉGŽQ*•Ÿ~ú©é7vîܹK—.‰D"m+**úý÷߇ bii dddÌœ9sñâÅ'N„©BÇŽ»ÿ~=èy·&3Ùc™ŸŸ|Ç„B¡™™Û1ôÁ 7èvá#˜u&‰tfšÑ}ò˜šÃ$˜Î/'''d<³X¬ &3 YK”./aăÔ Ò>u-Ø¡C‡âããufçüÛÌ™3ãââ233³³³ !yyy?ÿüó¸qã@:þèÑ£|ðÁüùó'MšDIÕŸ|òITTÔ®]»@×d&{óõõÈ)***//ÇšêÐ È „#´pÄ%» œ@œA¯èiÅp¯È& ù¦Õj{Ñ|vd¦Ñ¡ iîqT uÛ°à¡LÖÑ=|nl%Í P:€H¶´´´Äµ|ë&{Êcgg׳gÏO>ù$22ÒÝÝ=00099yß¾}~ø¡Á9Ê8¿¬_¿~~øáñãÇ—,YbzÊ …¢¡¡A§À(‹¹\.,".\¸0sæÌ÷ß„ ¦Çe²§keee(4@šµaP±Ü4ЈiMOpÊr¹¼¨¨ØÀY£ÇR ¢i–tÃà‰g0"0ÌÓS¹`L —ÉdB¶õžõÇkyxx@¼õ'ÌþA% Naii ³pØ`(5ŸÏdBŒÁ|‹Å²µµ …MMM€jXÐj)±¦“ƒz\:õ?ILµ›† c‰µÉ“'GDD”••íß¿ŸbkkËd2‹‹‹---®]»†a;“ÉܳgÏÁƒ !\.×Ïϯ¡¡¡¸¸xܸq8«íÙŽ?öí·ßÞ¸qÃÕÕÕÁÁ¡±±q„ ï½÷Þ«¯¾J‘H$555ÕÕÕ¿ÿþû™3g=zSàΜ9“ŸŸïïïéi“™ìq­¾¾^.—£ú!¦Dc‘û]hQgðïXÆ çcé^©TbW rÞ G‡Jg LíÒ¥boo(›I$¢Æ3mhµÚÜÜ\@ H”Ñôd¦™™™¡PÀB, ZÃUÁÐ9•JUWW àM¨ëŒr¿÷"l6:o†ƒœq´Ná®E}tæIkµZ¹\.—Ë!8ƒ Cl“Ë岿Ý¸Š =D;êç÷t:m±’†˜ŠVp`*ô oœV85’Bü›ÜâàÁƒ;uê¯çÌ™ÃápN:Õ·oߥK—Þ¾};11±OŸ>„ékÖ¬9}út§N`pΩS§¦N:{ölÓo~øðáJ¥òi+W®ìׯŸ\.OLL„a£„ww÷ÄÄD©TzêÔ)BHÿþý“““ù|þ©S§œœœæÌ™l“™ìÉ ófôÈNÓDÿBç—0·†àaoo_WW‡nnÚ@ñœ€2nI3W›«hvOL”bCâ5 ]C‰ˆ¦wC°…:ÅÅÅôà$ÍŠ‘L+à§ÈUÃ|é óììo gÔ¨QôŸ3gÎ4¸âJÿþý !ݺu[´h‘éáêŸÇã¹¹¹988˜›[ØÚÚº¸¸XYYAW¦¯¯ïÛo¿mccƒÑ &ʰ…1A`` ½À‡e –¥è Ý©uíñù|”$€ë§µÚÚ‹©©Éõön¤´••,ÖY+«è­\Dzç’LQŽÉžÄòòò ó÷Ýwß5777=¶l؉ Äe\ÌâÒ[î!,ÀñÈ2ÀÄTó0i¢ÕjSSS±4‚¸¢V«E"QQQÊTCyÎknnîàààíít¥©©®¼¼cqqqEEÀIAAÁ¶mÛ`TBàŸ®ŠÍ†¦ìÊÎΆüvƒ½àt'Øx„tp:´8²q=!F?=ÐJÉN: 'jå¼gƒá¢¯~ð¡V«¹ÙÜ-‘–Kþ(ëy›dzzÂrÁA* ²¹·ùemé>µ¦^cüøúkLáIƒŽàik!çÞ½{‹/Æ?_y啺ººëׯoÞ¼™²víÚ[·nmÚ´éСC M@5j,|Ú·Ο?ÿ­·Þ4h!ä×_…gâááñÉ'ŸÐ[nÚ´éÌ™3„!C†€rÚ;w–.]:cƌ޽{Ó[æää,[¶ ^'%%­^½úêÕ«„Ñ£G9’ÞøwÞAɵ͛7߸q㫯¾‚?#""ÌÍÍ;†/^¼ØÓÓóé>†††70`ÕªUüñÜþS±mÛ¶Ür¿~ýô·_¿~=|'9²oß>ȈΛ7ÞŸ$!$))©S§NØ^¶iÓ&/ÏŸ?OÒÅÅå‹/¾Øµk׳~’Ï3Е>6¸@|Åy¤/cp@;šN ¾f D€ $ÐX,–L&£™cÐ'. ýüü|||BBB<==mlšQ¹¸¼vöìÙK—.›ÍfWUUq8ÌDaï'àŽöðÉdXÈÁ‘ØPˆ"Í̼5¼l@¸6ºÌ)Gƒ¹5:ýerèöû–6£ BF ‡´NÞ†nc "Z­æ]çÕŒ­ù¹¯çˆÓ•½nÞ<â訖H^¹ukíû$7W ¨P—éÔŸ‡w„©BÒ 'œÚÚÚôôôeË– >–'³gÏ>qâ„B¡Ø°aÃÆ÷îÝ«P(nܸ‘™™ùã?vèÐÁ¢ÝãÍÌ™3/_¾|÷îݨ¨(BÈýû÷çÍ›7yòäádzÙì?þzîŽ;¶dÉ’½{÷655½óÎ;ÖÖÖiii·nݺÿ>ö„J$’¦¦&›ÜÜÜß~ûmÕªU‘‘‘<oÆ +V¬ÈÈȸuëVbb¢:ܺºº“'O8ðã?†É;wΜ9óÍ7ß &“9pà@•JµwïÞ¯¿þf‡<]S*•ýû÷Zdëû÷ïO™2¥¨¨¨ªª ÞY¸pajjêÕ«W÷îÝûæ›oþüóÏ"‘¨¶¶ÖÒÒ’Ïç+•Ê]»v­ZµJ­V_¸paúôé‹- ŠŠâóù‰‰‰UUU õ‘™™Y\\ 1™­­íÀSRRæÎÿí·ßÂéòóó'NœÿÖ[o…‡‡3™Ì?üðY?ÉçcàFá¡Ñ‰#µŽI0À!¨óÁÚ_©TΜ©yã ¹BÁ „±coçNT_p4:£ªª2;;TÊ–ËÀÆÆÆÁÁ!,,¬wïÞÎÎΖ––:thNÜ)ììì^zé%›k×®‰D¢ÊÊÊK—.ÕÕÕJ$…â™Z­fð®FÛ¤‹˜·Æçó¿m4kÆd2›¾nâÎçr¸°/Þ>&èpL~±_éh`Âæ›ÆÆFH]êlÖay‡Ì•ço¿,|ÿ3ëžÅ÷CÄ…SÒ¥âBþñ-ü7Á µµµ³³3|Qà>×­[·cÇŽÔÔÔsçÎ}ùå—ñññåååeeemrΜ9süøñû÷ïgeeýöÛoOvµk×nݺÿôôô¼xñâ;ï¼SPP \\\!¯¿þúرcÅb±D"qpp°··‡×Û·o_³f }´Í›7wëÖíÖ­[qqqƒ¶¶¶þã?ìììe2™“““­­mcc#­—Çb±F•““Ãçó æÌ™3räH&“ùðáC+++gg禦¦åË—/\¸ðYpÒììì&Nœ˜˜˜xùòekkë§rLOOÏÓ§OÃúÌÕÕ•Ïççää”––Âëk×®uëÖíСC„K—.åååÂ,¨¦ÚØØ899ÉårÐ/ŠŠš:uêúõëO:5kÖ¬œœ©TÊçó+++ù|¾³³óîÝ»o!<¯S§Neee999\.·S§NÏáI>·ÄªîÒŠ/ØÚ`Á@  …ØIÈÄb±ÌÍ5K–ðú÷70ÀlëV¦J¥‚ÞIÈ¢€(€·74H1q¢âô鯗^Ò2™L33³:„………„„ˆD"WWWa€‰¬šš¥Réçç,‰¼½½­¬¬°2G†Xç¿K{¢IÒ¨‡ªåýå° FÆóŸ|B†:D­ì¬d41ê?÷¥Å~tÆ»áªÜøˆº„ÎÔ3:k‡a"¾À™ª(M†Ê@´,îkdP žîÓO?=xð`jjê‰'&NœÔsÓVkC—…ºîï’ôá©Ãƒ÷•3z¹¤ºhš4¨˜§S¾Ò¿#‘?&"åïÏsýõùŸŸ••UXXèîîÎçó]\\æÍ›çïï¯T*Ï;½wï^Bˆ»»û€:týúuÜý½÷Þspppvvž7oÞ£G~ùå—ŠŠŠ/¿ü’ÆË—/‡˜©ð<O$geeq8wwwxÿ™>Éç‰:XÛ‡”Ò‹±ý2`€Ãá@úPƒ¡Õ’±c52Fsþ<ï÷ß9à©Á¹L›ÖÄåª##åáá*BÈíÛ¬®]%¾¾J6[foÏqv¾æâRngwž¶V«57gÞ`^? —V²ï2 +;«Æ°Æêêj¥RYæTV[S 5š¦ØÉd2ÕÝÕª9*†”AR!„|GùÜŒ¿/Ÿ.'„ð6ð´uZZã‡Pœ¶€S¨i–¶Á2ÍPh©–ƒa?AÖ‘Á`466êGT:ó¤é´Md§_À–ÉÉÉW®\ùÏþ¤õ`!¤  €]Âîr®Ë~™Lµ\ULŠ‘B( ºÚ„O#WZI§²…‡‚ˆSç 9nnnAAA8Y(Ξ={Ïž=C† ïܹóüùó !•••ëÖ­;{öl›…œƒ.Y²dÀ€Û¶m‹ŠŠ‚ÿ¤§b§NJJJJHH¼È!„lÙ²åo÷ ð†ÇHÙ³gÏBCC[ÚeܸqðB&“¥¤¤,[¶ ÷]·nÝ‘#Gr¶oßóŒ¥X,¾zõêþýûúÈ××nvÞ¼y111aaa9«W¯þã?è©BÓ¦Mƒ š‘‘1a„¼¼trrê ê[Ÿ[]]}ëØ-õyµV¬eÈ, ×à&ól¤;Q?P }„J¹’SÃQ©T,. 5ß †ÖYK„„µ»šsƒÃ", N€zʃî¢ÞižêöL!‡>8¦ÎžìPuuukÖ¬Q*•àóÏ?o‰Þ¡~CÏãΖ6¸±~ïŽñc>6IšËåΚ5‹ÉdŽ7nîܹVVVçÏŸ¯®®vppèÚµk[þáýþûïQQQZ­¶¨¨¨¾¾<ÿó"^CCCAA`@§NüýýGÅãñ’’’\]]Ï;'‘HD"”ytlëÖ­‹-:w›Û72224Mhh¨§§g‡N:•——×µkW‡ÒÒÒ€€€ xzz^¸p!###///,,ÌÌ̬cÇŽW¯^urr„‰'º»»?Óà•••¹¹¹ té±×;l¶££cKŸúûû[XX‡"00ÐÂÂ"++kÈ!7n<|ø0lâĉwß}wäÈ‘/¿ü²¿¿¿½½=hù 8ÐÇÇ'66V«ÕþòË/ø$ûôéSRR’‘‘QUUЪU«RRR.^¼|çÎŒŒŒçù$Ÿ[VvIÐÉf³±Àƒ<ä}¡Çô}p°‚ÉäK$5rkkÙ«V­Â6RÈ«H$ …‚]_Ï~å@`mmÁãñ¤Riee¥\.ïܹsUUUNN“Éttt¬­­åóù:uâñxEEEׯ_ÏÎξrå MAöñ jµšsøÂPiT,&‹ÅaaN “câ¯ÄfýÍ †ä€„ɶUÙÖÕÕáã½-°ã I”¹g×—CËnb ™ûúÉ'Ÿ,]º‘ÃÌ̌拣ékàl$U÷Xׯ¯†£¼0Uh¼·‰åìì§T*ïÝ»Gën1 kk눈¼IŸ^½zA‚ÇãY[[7®¤¤¤¡¡a̘1£GnË¿ºÿû¿ÿÓh4‘‘‘û÷ï¿}û¶™™™ÁKKKíììZZ¿3 ‹ˆˆˆŽ;2 KKKssóŠŠŠŠŠ 33³.]º0™Ì‘#Gvîܹ°°P£Ñ¼õÖ[P:b0666}ûö…§Êd2ÝÜÜ¢¢¢ TYYYQQѧOŸ÷ßßÇÇÇÕÕ5??ŸÍfO:µgÏžÕŒˆˆˆU«Õ%%%ŽŽŽóçÏïܹs¯^½àì/¿üòÔ©Sá°AAA!!!FȽ{÷ZSp2ø ±öÝwßÅÄÄàÔƒöàÁƒnݺµrj:ƒÁðòò‚öèÑÃÆÆæálj‰‰]»vmé;9|øðÀÀÀÒÒÒººº˜˜˜±cÇÂGaaa111:O2::º¶¶¶¢¢ÂËËkÁ‚àb<<<^~ùå>}ú<Á“„{ôññiƒŠ|R©´®®î?þ¸qã=e@¥R …Bpµ(ì*ËðLè7 ƒÉdu쨶·W¹¸°ªª%%·¦}7j? …B+++›:Àïê0 2 EEEMMM555µµµ'Ož<~üø½{÷*++hÉÔ§Ñç!ª½W›ÂÐ0Ø9l6›­Qi·J‰#$L©‘¿Ê·ÀeÃõy{{;99!ìÞ½{:tHMMÕ/iè/öin±þzψº½FGðÆàޏ»™™™™™™@ àóù¥S¦Æ‡:âõ¿´ú†µƒw¤_v‚ç3eÊ”úúzwwwÀr…BñàÁƒcÇŽ1BCC333%ÉáÇi¾Pû³³gÏš››‡„„\¿~½¡¡Á`ŸØÕ«W½¼¼,--ÛqV÷È‘#ãÇÇbæãZUUUVV!¤_¿~ÆskÇíµ×þI0ÔöÓVÇ9räc-ŸUWW?zôèСC©©©è@!˜L&ôР'…æîÄíqB(ºx€àR# ŽÉb±\\\…B¡³³³J¥233srr ´¶¶ÎÊÊ’H$ÖÖÖ@ˆohh(***))©­­Õh4 ê­£jµÃ,pÇ8À¸ô¬kXkàf®èá…L&CÈP(ãÇ=ztpp0*J>|ØÏϯ_¿~­¡à£3ؾƒÿ úQ=¬HŸî¬ß¾ƒÝKÀOÓ‰¢Œ4hã…ÑQú:ý ƒ 1¤Íc$ʹtéR~~~dd¤\.·°°hllšÕÿú@dd$¼x!*OmÜìíí¡ÖdmßP=S­VC¶ ½êÓ`]JèèY œÓhÀGã|0¡Pn‹M—Ë…8F IDATÖ2™ÌÜÜÒ§€"‘WCLY__Tø.F,ƒKµ°°€±Ù¤YëîúLuHó<$Lƒ†{ (…ý°ÀÇG„´æÖDäôpßMÏè¸?Åy©:´49 ¦£1 ÑÁ*z‰Œmdx"}1žÐ£±G¬D>|†:×ótj9ÿ;VXXØÊtЋhO–R{2S©T "Ð^£œ6~…ø5F24°Ñ_ƒú 6„¢>&iÖ-¾yó¦þ§8qoäÆáp8P>ŸŸ››Ëd2===y<žL&³µµååå%%%555%%%uuuàmQa'н ¤y²´Á·5{€ûBÑ„*˜CôJèåq†)ŸÏ²ZŽñÒ:nÓÊoK+ÕEl¯ŸÜ£3Šøâo+ôAZz2ô Œ¿½5äsÊíx^N@@ÀótÊí8±F®AÇE„ðé€:P½,O .ü/æy¤R©P(„^Œ zhhh`±XÐèûbsF£qà ÁZÛÌÌ ˆ£¥¥¥–––°4ijjB¦ÆR´ÒNÂÆ)8„b=`ò i4ÈÓ[b'#ò÷ZêË1ÙÓ2ä°®]» ‚6;þäi6‹=SëÑ£ƒÁðõõm÷ ”6ž[ÃQ›@X¢U™i-KpШíÍ’ä¯#a¥±à¤)H(±X¬¦¦&©TZ__Ïd2££cqq1ˆˆD"¡Phgg'•J=<ƒ¸^c3 ä‚0n£ï$ PŠ !ÅÜH3µï =©¡ñ:aƒÁÀÖc}`ƒT$\¿~b^þêôoOdÑÀŒµ(#×Oꦵ‘ZÚg^ žÈ9­µ¼¼¼‚‚#sÎÛ‡ÙØØôéÓçYŸ%;;» ÖÕŸº‰D"??¿6‹7ྡŒˆÂår¡Ý*4‘«ô4s‰ž±†2-Ø ^öåñxpd…BÑÔÔ„}0ÖÖÖ …¢¨¨ˆÏçÛØØ@.K©TZZZºººŸ ó{Íà\©T  4è @KƒÔÜÎÎ>‚\.G™5å€Ux¡¯eÙú‡Üš4š¯BWJô!!‡V7ÐyÇx~ ‹@-!žZ:ŽÆÞ&>:¤š §µ¦V«£¢¢Ú÷ˆ¶’’WW×'f¬µÞ”JåèÑ£[)íþ"šV«-//ïСC›EVLšî2òÁÀ•…B¨Á@r œ2Ö?0¬˜{e°& ìÒÐЊ“cõõõ%%%\.×ÊÊJ °X,¹\ngg‡a‡•••V«upp@ €õÐ —‡<œl[B\\\ iqk\ŒÓ#PsÇÊ!Üš| )±öïäÚ1IúìÙ³ãÇ>çÒh4í8ÐÑjµ™™™:&Ú”_ÆÊ ›ÍÆ’ F'èß¡Sqœ;9œè `ǃ™žTUUAå¶)..V©Tvvv¶¶¶r¹¼©©©¶¶‚-ÔÀ””X°ïƒ*…Bצƒv˜ßÃÑŸ˜E¤¥ÕnéQo8Õ°¯‘̤~Ì¡åÐQVéõ¥Òè_|Ša%=ÿF?ñEÏ Å³_tTæè ý¸ŠfÜáöúQbê_Ø“k¬™Ìd&{Ñ Ý%Çà L_ƺ3ÌV¡×Cœ{ xz 4ÓL­V ±±çO«TªÆÆÆ††sss;;»ºº:ߺl a‡NÝ‚N÷a &,@(ü¸  G‚߇\œ\.·²²’J¥ŠH’FÈA±5¸‹–š´‹7R;ÑwÐôéûbšëÜRŽŽäf¼EÏÃÖg á¥~1IÞú7Kc>1lè1&¶ˆW®\‰D={öŒŠŠêÝ»wRRÒäÉ“—æTQQ…·ŒØâÅ‹E"Ñs«ÁöêÕ+>>SL"‘hýúõO÷ ï¾ûnDDDŸ>}æÌ™ÓÔÔ”››ëííåçç—™™)•J?ûì³°°°þýû=º¦¦÷­­­0aB¿~ýzõêµhÑ"‰Drùòe__ߨ¨(Ÿ[·n‰Åâùóç÷îÝ;""bòäÉõõõÿ–;+//‰Dk×®…??.‰t4Íþ¹UVVFGGGEEõèÑcÓ¦M¸°ª¨¨èÛ·ï„ êêêÞ|óÍÈÈÈðððäädz¶Myyy¯^½¢¢¢‚ƒƒ÷íÛ'—ËwîÜÕ·oßŠŠŠššš‘#Göïß?,,lùòåЂОŒ&àJîÐm1´«׌³sàwŠŽ†ÎV544ÔÖÖÖ××K¥R‰D"—Ëa/‰D"“É«««‹ŠŠjjjJKKkjjjjjÄb1P¥AI ´/¦¥\€ jiÈ)^JÉÉår­V %% Ap˜)vùÀ)Zß—c²§ŸXS«ÕõõõË—/7n\ff&¨êZZZVVVž={¶W¯^GŽéÖ­›ŸŸŸ\.?zô¨···¯¯ozz:ühûôécii™eÕ#GŽÀ"22ÒÁÁ¡°°ðòåË„ ‹AƒÉd²úúúç–È ½}ûöÝ»w½½½Ož½W¯^»v튉‰™8qâ¢E‹`$«‹‹Khhh=¦OŸþ¯|x<ž¯¯oVVVYY™¥¥åÙ³g]]]íììžîY>ìååµqãÆ7Ο??**ÊËË+77wçÎööö;vìøé§Ÿ®_¿þàÁƒ˜˜˜Þ½{Ã7–òþûï744\¼xñóÏ?Ÿ6mšObbâ‚ fÏžíáá1oÞÝSDGGoݺÕÑÑqóæÍ½{÷~÷Ýw=z´p᜜œwß}×ÇÇgëÖ­¡¡¡7nôôô|饗^Dwfmmðã?æääÔÔÔ¬_¿~Ô¨QO»5yò䯾újáÂ…ééé111 ±öóÏ?5m€7Pºº,ç9Ž­­í¤I“† Žû"ÁWb‰žP…zpRXkàGˆªTªêêjȪ) ©T Ü6è¼ihhèÖ­[aaá£GîÝ»————ŸŸ_TTTQQ!•Jºté4<>J 3J£Ñ ¼ª½Á§ôüixgá á }%BîøtŸ<‹Åâ7»öÄ\YøÿÒ±V²!Øcð_‰-M:FþJé~<ÈY½zõðáÃ?üðÃ×_$†^ýõ>}ú;vL£Ñ,^¼øÀçÏŸŸ={vhhè„ Ž=ZSSS__¿fÍš©S§¢d¡C‡¸\nBBºuëâââ,--g̘±råÊ„„„ÆÆÆ'N<矟™™Ù’%K:wî¼nݺ”””W^yå(11ñöíÛ_}õU·nÝ.\¸`cc3xð`''§ .ÀË—/OMMMMMíÝ»÷ êËzõê»xñâÉ“'÷îÝ{̘1Ï(;4xð`oo±X|óæÍêêj#By&£#QtÁ90˜’Á`ÔÖÖÞ¾}ÛÞÞ¾²²²môtØ“W8tz_0kÞ‡4÷ˆ€—J¥MMM88Êú¿~ýz]]$Ö*++ËËËkjjêêêP¡¡¡:žx »Ð³5á~o ÀÂÕ7H¨ÑHíÞpGôLÓwæ¦y<}úô}ûö¥§§oܸ(ŒXÎáp8aaa‰äæÍ›YYY~~~îîîÛ¶m»téÒþýû#""=z¤¬‰D¢ˆˆwëÖ­aÆEEEý+©s•JuäÈ‘_ýÕÓÓó£>*--}ꧨ¯¯Ÿ2eÊ•+WNž<éááA¹~ýº••!_¿~]"‘|òÉ'»wïNOO÷÷÷q¿C¶¶¶)))ÐèwðàÁN:=#ȉˆˆððð¸wï^UUURRRLL ÈsI¥ÒêêjÓ¹%“J¥:u]LCÁb_.—/]ºôêÕ«ˆ.|>°Éd:(Ô„@`à}š˜¤ÿÎãñ”J%ÔQ “¦R©d2™B¡Éd‰¤®®®  @,×ÖÖ–——ÿ%%%Öƒ“Â(r—I3ãnÚ´iôÌi”ÆðÞH0Úh˜ø JY|šñ¤þXèV~¤³Î´S#PךÃÌ¡éœÂà;-…J´Ô)":=ZûŸ‚ì¿]Q$ Ÿ6mÚܹs`ÖÖÕ«WkkkwíÚ5mÚ´„„„Ó§Oëì’““s÷îÝ€€€ùóçÃFƒƒdžµ}ûí·Ë—/‡±Íï½÷Þĉׯ_ßÒ,ƒ'³|ÿý÷™™™Øo¬_ìY½zujjª§§'¾yôèQ++«1i>ÅwŸ®]¾|¹°°pÔ¨Q¸>íÔ©SJJ !¸¶ú ¹\þÓO?µ{ÕƒÖ2i¿Nê(PéAŠMR©T¿ýö›P(433+//Ç„ ‚ ø&´ ‚Í(©Ù<ÞM¢5˜Â‚xH«ÕB¯P«ÕF …BœUŠÕÖ¯_ÊÐ:<¡±}%¤Ú°‡n¾û…§7Âçóh`¤š‚Ä3D5U¬>$àä7¤$èof¤C“Ö÷4ÂXÃOéwôõ hFœ‘’b¼L&Ó¹ÚV†€õL[ 9kýû÷OKK«¬¬Ä¥}RRÒ¨Q£„Bá›o¾iffï¿õÖ[IIIÉÉÉçÏŸ 0`À¸qãÒÓÓKJJ¦L™’‘‘ñŒ\UKöé§Ÿ†„„@…9999 ##ãéBØÚµk¡–>f̘iÓ¦}ñÅÉÉÉÙÙÙ8&ùÛo¿Å€ 4þ|Ÿ¹sçþøãË–-«¬¬|饗¼¼¼¦M›¶k×®äääÜÜÜ3fôë×oëÖ­æææí¬Ü­o ,¸zõjvvö˜1c\]]¿ùæø(44ÔÅÅeÑ¢E3gÎ\¹re}}ý€|}}¦N:wîÜ7Þx#+++99ùÒ¥Ko¾ù¦‹‹Ëĉþùçêêj>ŸkiiyäÈ‘O>ù$??èС;wngOÖ£°8ý´× ð€O5쑚N }@``Я餶ò`H«iôhÀo¨ µÔè±:âP(”H$3:ši˜‚ÓY§CHÛ›kÏöÛØÒÀ=£àóæÍƒ¹U£G ƒæü=zxxx$''Ã6¯¼òJ‡”Jå°aü½½…Bazzº›››‹‹‹“““J¥6l˜¯¯¯••ÕÒ¥Ksss !/¿ü2®SžÏmïÚµ £7¸È§{ŠaÆÑUt—ÀÀ@Ðm6lXHHˆ\.OOO§7 „lß¾](úøølÛ¶ ÆùuêÔÉÕÕõ½÷ÞƒáxÆ ëÙ³'›Í^»vmII !ÄÞÞ¾-Ìc]¼xñ³m‹ŽŽÞ»w¯D"6l˜§§§ ~´yóf`Ímݺ²1...nnnJ¥2==ÝÕÕµS§NôwÒÆÆfÉ’%üñ!$&&¦{÷î„;wÑÜÝÝÝÙÙ¹ýýΑñÞ|7 & ,,,$ F$¨NFš9ÄÈdÃÐnì Í%hȤAu€;Àår :}™L†ý˜´È  ]°¡)g°B‡SÃÅãDlVAhBœŽ·£³¨§Ñn ûLMö¼!ÇÂÂB§ ~ÍÅÅü£X,^¾|yvvöÊ•+q³ÐÐPz/<Œ¶D³·····×Ùæ¹}‘<ïY\€“““¾d}">Ÿ¯^œííí­“áÔÙØÝÝÝÝݽí|“žEŒH[PPÁ÷qd§Ž +‡ÃÁ'¦ó´µµÕy˜í;ÿ†94ðòÇ@XB2àŽ!š,ÒÕ0Œ@^µ™™YCCvö@+(yà(F#—ËÕгÓÒ¢ fcÓ0{@0×*ÔÐliÔ´Æ¢+:9+d"ÐÓE5á"á V8pò¦AÓï!…j<¤-èÁ`FïXO{a‡¦~ÆÏ =®êŠþH7…Bœ‘§œXËÏϯ¬¬Ü±c‡‰¨j2“µY`Ëå˜E· î .¸ P¯Ayš[Ìáp8(Cƒê:ãLhpÍ€g”`ñIÕXæuV³¡`%ôУ Èo4Tè:Àƒ ‡Uc‹+R¥t1φ‚=HÉôás˵´332~û©Aޝ¯ï† Úë¼råJ;ž—C÷ç?k“Éd—.]2ý&ÿ-£G^Ò8A7¸Ð½–^f=P¤± û‰BÝ6˜Ž2tö@ª Hn¨( ^ ªª@X€Zpp.¹†W…ÐB3§qÙ6XqÛÙÙUWWcG6¥"¹#0d(´¾‘ÅdO9±f2??¿'žÑöíyNãñxÏs"Üó7Ì~´MCmô°¶Â^}¤œA(ƒ¡Vnp´ M/ÆÜ7Ng d5ÆpÐ5  –ˆHséæO“f!/„Cä¼!LB.ƒB̓”šL&ÃLJgÒ! ž"Ý8r—ðô¸ýmô›ð êiâŽøôô9Ç´‚Ýä‰8¤#”`¾LO¼Ö™2 ³Y+—/:×OgüP—þ_LóvêÔ©6îGþ¹Y[[?Ÿ*Ú?üÐŽ‡€¹¹¹µÙy90|3`0þ´µµ­ªªB7‡’è(‘[ ®ZDiyMðh(Ï ™™pI ®Áª8ƒ$ŒÃhebð¡ÐèƒÀ©P(„B!0ã!ÿ†è·Hƒ2£(ņ©?ìà!•m¦G D:)g0”¤F<3Žôñì/Cž~vËàÑZ™ûj ðÐóuŒ|j‚œÖZtttû.PŠD¢ç0/‡2zôèvœ¬Ðjµ%%%ÎÎÎmv@¶§ðù|™LÆçó±4RWW‡ë}Ì\!Ϭã[ñ#LUßÇž@£io(ÐS5§T*ù|>–ñ—äàåi 21 Y ˜CENH%aágüÈd2ä&`&“pX¸<8b*-ƒÀF–ZZÚ·©–ý"ƒƒyôW{tâîoƒª'0ã) ä˜Ìdí}]ÉfkµZ333@PSSº/8‡Ö(à f ¸^¾©© ç æRÇCíNˆà€ÖÖÖ0•6ƒÜ²“uú~à_d¨T*HsFèÀ¾pa `M‹UÃ1i¡h¸TÔÅ©¦XzAMRÜÑ ÿÅQ›8j#c¤.`ðúŸâòÚødÕÜÅ‹ííí8Ð.„þþþo¼ñ¼...¶··ÿòË/Ÿî)ª««ßxã>}úôêÕëwÞ©««ËÎΉDQQQžžž?ÿüsSSSrrr÷îÝûõë7tèÐòòrÜ·¢¢âµ×^‹ŒŒ MJJjllüí·ßºtéÕ¹sçË—/×××'$$„……õíÛwܸqŽÿW¬¬¬ÌÞÞ³Ž=joo¯/tô­¨¨fÞ®^½c¦ÂÂÂàààQ£FUVVŽ=:""¢gÏž³fÍjhhÀ}óóóýýýaLÑ–-[¤Ré×_ ï„„„”•• <¸ÿþÝ»w_°`Áóäò=¨ÉdUUUR©æ~bÝJ#FŒprrBùNÒ܉" !‚‹Å  ¥{KKKGGGèøî§ÑÔ××ãŒNˆ<½†SPí†Îq!GçI»¹¹A 0™ Þ0`ÂÃ"ÝÁ 4ß1*‚àß6'ÿ£‰5X¤§§÷èÑãçŸ&„¼òÊ+Ð0߯_?ww÷’’’“'OBø|>èŸ>}ººº:<<üôéÓÑÑÑÖÖÖ0Ý€2vìX`þ¯Û!C.^¼˜xôèQ—§^û½}û¶­­íŠ+ † ½zõj˜—3eÊ”'N466nݺU$yxx|óÍ78/gûöígÏžÅy9ƒž>}zŸ>}`^Δ)S-Z´{÷nœ—óÝwßý[órA¿~ý²²²Š‹‹­­­OŸ>رcǧ{–ß~û­oß¾«W¯Þ¸qã‡~8lØ0//¯Û·o8p ¶¶V­VïÝ»÷äÉ“8/祗^Ây9~ø¡Z­>}úô矞””šœœŒór>þøcww÷Ë—/㼜!C†´3!쪟*ípQŠ&##Ñ—½È‡îïïçÎðÚàÊ}||Μ9µz­F+`äÿ³÷ÜqU•ï¿÷ž»Ùà@qãÊGþpÛC3J%1ÔÔL“!ŠEÉÙÀ‘DV̙8rä"QCd¸@QP6Ü}Ï9¿?yz» ©1®~ïóŸË¹çžó¼ëÙëîàóéì,è‰ :Qÿ{×;wP~GéÚÊAúõí`èË>z°=äsh¤ã­§T/Ugdž2òÒ×!f”!TËcN÷5jtý„ö1Zª±ØZ-}QéÀ¹ZÔ£ÿ>°lÙ²¡C‡¶mÛvûöígΜéÛ·ïñãÇýõ×µk׆‡‡³,ûæ›o.^¼¸´´ÔÕÕ5<<Üßßÿ§Ÿ~:vìØÎ;’’’‚‚‚¾þúëììì¥K—šÈ!\ºté¢E‹‚ƒƒÝÝݾüòË¡C‡Öí+ 0`ÀƒÁ>pàÀ^½z…„„,Y²$444%%%$$¤cÇŽÐLsÑ¢Ennnõ×@¡^ÁÆÆæƒ>ðóó „@‘‘‘F¥þ;Œ?Þ××7444==ÝÏϯY³f ßtëÖ z瘡v–„3ÿéêËô·t³2¬r†eÐ0Au‘7ndff‚ï„]C²Œ(p.e†uÞ€y`ä˜Ñ,,,Æüøñ[·n!ç Ã0¼9©j§Í󼕕JÀ4 x2ÖÙDa×Rcî´†€”—&²F}ÌjÌöÇ·ÐAÕ´îõ8"NëaX:¯–z£5²dÆÕyÓÔû¡ «CíOøwÒ`0¤¤¤µmÛ6!!!((¨W¯^'NœÐétsçÎ]»vmPPÃ0G½|ùrnn®¯¯ïàÁƒá·û÷ïwuu rrrÚ·oŸéB…BùÒK/mÞ¼yãÆuÎo¦L™’““³aÆvíÚýöÛoÍ›7÷÷÷oݺ5VW[²dI||üŽ;°ÔÍsžžžóæÍ{ï½÷ 0~üøúx Ã0þþþ½zõ:{ölyyyjjjaaaý-Ü‹Ðì=4P8³m0R,`˜@ƒ®¬^“’’ið[àIHã袜¨s@–Še‚ÞºØ(jK„èw’’rïÞ=°éÁÏÁ@‡v<°"3* ª•J¥ÂÒMw\.§½è`ÑÕÇlX«WøO“{éÒ%èHÿàÁ¼(‹¡= ÀéÓ§‡ R\\lRe¬ôzý÷ßôèQhÖyëÖ­:Eaaá¸qã®_¿½™ !™™™–––=zô°³³ËÌ̬¬¬ŒˆˆØ³gÏüA—O}µk×¶mÛ¶¬¬lß¾}õ\.zôèáì윓“S\\ÿüóÔÔTRåÈ¡;[ó<Ÿ””„ÑÒ<Ï£½­^˜Î‰dùzJHUý캆JrM,Mû«oÁ À{ÌÍ êËrºuëvêÔ)wwwXÎE‹…„„Büüü† ÒºuëyóæÁéС믾ڴiÓ±cÇj4šœœœo¿ý–2qâD(©2qâD“*²{÷nlÖÙ¼yóS§NUo4ðÁÇǧOŸ>ø¯‹‹‹‡‡øÕ'Nœèææ¦×ëO:…7€K|çÎ2™¬M›6Û·o½°yóæÍ›77šI†aÖ¯_ñlmmë¼Ùϳ1×úë)Þ¯_¿_~ùžïââB7NýþûïÁ–»eËèyÓ¬Y3hÎtêÔ)˜½Ý»wƒØÕ¦M++«E‹åääB¦M›+_YYIiѢŋ °2?]©ŒfÀ`$‰­­-Ì$ºÐøF.c\qÌçÇh†a”JeBB„`/NZÃÀ › F©·ÐøƒYŒ®w@=„Ì ‚Ü X·aG¬‘C×V öÌÐÐ,Ǥ~´ó ]kÚ´)K‰D‚šA÷îÝ·oß¹qãÆ7n´lÙÒÚÚZ,7dùÈ'º¹K=!éààý@i _$•J«¿3* PÉ-ZÔy,òún¦iÔÁÍÍ >u‰D8cF½|lllŒ&“ö>¾x`ggçäätóæMôÒ“ªXX,ºŒö1pà·À‡Ôj5¤Ò49Ø K±a¦ xS€[8::Þ¼ymG˜Oƒ¼ ¸p/ø9ÖÝÌ13”T%ïNÿ‚=žlaa<ì[ƒß0[â) ÕT¥RÉd²Ç•)ÃÛ„jóLÇ.ý=R„ꇚ;Ž?„-%‚Ô’u#f²,dG휡PÑ“ÑAœ¸ §Xß ÕjéPÎÚÈnÄm`4ÃÕg©lHƒ‡›e2Ù +W^¸ ß¹ ‰p‡ˆ%a•žñ(b­ªè©Š¢VˆD@VÄUá¼Xu†çyqUÀ4£Cö¶„a8Ž“T9´Z-œt@ЧOŸ‹/>ªÕV¨-‹…U­ä®"îM€= à6tö`Ô¡’~DU¬®k…B^/‹ÑÛÄUT&Óëõ"Ðð´Z2fLuÂJ“lºÈ¦ËÁ‹HÄéjÕ­vF ÿºšµÛýªW³¦©Ð“âjg9µàO[üjy¬°)¸E‹ ðñññññÙ¼ys݃©S§¾úê«^^^ï½÷^~~þÓ>A¯×ûTÁ¨Q£Z´her&Ç%&&.X° E‹ÙÙÙôWeeesçÎ8pàÈ‘#‡~çά¬,È!]·nR©\·n]Ÿ>}|||<<<²²²êÛëׯ÷îÝûµ×^ƒLÉ… &¸»»7î Ÿ={¶S§N>>>ݺu;xð ½=6lØÐ»woww÷ÌÌÌ;wîŒ1bĈƒ š={vYYÙÁƒ»uëæããÓ©S§ZJ=ïðˆÓˆD ùž‰œ.@At óB€ˆc%Š‘¬Ðu¦‘úÓ]A±D ;lÀ0LJJ 6ÝŸ ]nüϘ ‚U×@†ÀÊž‰[€†ŽrÆÒ ØKcyø ® ¦8'fhÃÚìÙ³}}} !©©©_}õÕèÑ£þùç=z”——߸qƒâááñÊ+¯üòË/½{÷†÷B¼½½[µjuëÖ­„„Bˆµµ5]c8//¯yóæ .Ôëõ¯¼òÊž={¦M›öT¨‹ÅâC‡Áçm۶ݽ{×ÓÓóرc@Ù{ôèÑ·o_FƒÌÒßß¿¸¸¸   °°ðöíÛ­[·nÒ¤ÉÅ‹­¬¬°][}°œ}ûö¥¥¥Uÿ*55uÓ¦M›7o4h$ÏgeeéõúC‡­^½zÉ’%ƒ^²dɼyóæÌ™Ó±cÇèèèíÛ·×ënøì³Ïúõë§V«¿ùæ›O>ù$>>ÞÒÒÒÙÙ911qüøñÖÖÖÉÉÉþù',1„–””tñâEBHÛ¶m‡ Ö;xÖ¬Y/¿üòÞ½{ƒ‚‚>þøcl“SZZºhÑ¢9sæÌ›7¯sçÎK–,y饗’’’²²²þüóOÿ·Þzëã?4hÐæÍ›G5kÖ,‹ eK¥RlÏLw¦Á>žX¯ŒÎŒ;¡ú'–Ô¤}þ¨g g>FK mR"‘Às (ñeºr>,†e0ÍU4a3¨[Šhe€¬nÞƒÒ=ò6T˜pŒµ[´žÜ⊆2ºrè3Ë ÕµDµzF*­Ñ{kL}ÂUOü¤•9ŒT¬m Oø²3gÎÌŸ?ÿ£>š?~HHÈìÙ³yž/(( IIIY±bE\\œƒƒÃO?ý4þ|‡³gÏΘ1#''gæÌ™.\pppXºtéÆñ/¿üòòåËwïÞ½xñâW^yåÕW_}æÅØ´iSttô—_~)‹ÃÂÂX–}øðaHHÈ¥K—"##wìØáàà°k×®9sædffߺu‹a˜Ù³g?~ÜÁÁá“O>‰‹‹«/–.-_¾é )ÃñãÇCBB>øàƒcÇŽ%%%}þùç³gÏ>tèÐ/¿üžžžœ››»páÂùóç;v ygppðýû÷AXXÊf0ÀŽ8´Ý ­±††#:"MRÈôC`1V¾Á8hàÂæoH|é jFœÙM"éºj … eD] cÞè^8Èä虤*q˜ÖÄbktk «q™*xÂ6Œ²Ã‘>®Ï“S €ëÐφm0'ÿ OÎrŒ ú£jŸŸ™»+V 2$88þMIIùóÏ?·nÝúý÷ßûùùõéÓçÚµkyyyZ­öúõëcÇŽmÙ²å™3gÆŽÛµk×Ó§O—””œ={ÖÍÍÍÛÛ[¯×Ÿ?Þèù¾¾¾AAA×®]«^ ø áÇ\²dÉW_}5dȬ¬¬ÜÜÜáÇ<8##ãÎ;Gutt;v¬““Èôôô6mÚ¼õÖ[÷îÝcÇŽå8î6ª<9deeåää¨ÕjF“™™™››Kquu2eŠ‹‹ËÑ£Góóóÿúë¯~ýúM™2…þá½{÷ÒÓÓ{÷îýꫯæåå]»vÍ<™&~²/±Ö/f±@6tŒcvúDUB}ˆ.èI÷“¦¯`·Pdu€ŒN§ƒŒä…t+RÍ5yE„°ª …B¹\/¥‹@‹Åbq•φ§Ü90p`±F èÐÉgî—Ó˜†µyóæamÆ „„„„víÚååå………mzB®pæÌ™.]º`9,ggg•JU^^^ZZú Ø———§¤¤8::V²žv&oݺձcÇ BÚ´i“™™©V«åry“&MŒn®1:kåÊ•vvvýúõƒæ@f0 …–––mEwù¤Ka"•ö< 40ÍÁ=Ðó2{°M>„…œ¡¡VÞÄ‚Íð@T¹°l0ºÉ4¨ NNN%%%àÂÁØ-i `œ¨2€ò``ôÃLR/ä ¡ÿ8–C§¸¢“©Få9½‘!ëÙÄ£ÇÒo¯n«n¬±Ñ5}ÑèÊ“˜ÚèGÑŒ†ž…åÔ?ÿüó™3g°Ïü¿Þúí·ßÒÄ(;;ûÈ‘#ÿ%cƒeÙO>ùäÂ… _ýµ‹‹ËsDŽ9’““cRlòÚµk7nŒ‹‹C cáÂ…„©wíÚUýbTTÔÿýßÿmݺµ]»v;–K—.%&&>§½ëúõëý èêd¨:KÀŠœ„ªÝI—·12Ó£Q™íºÇ+X‡.¢ƒ±gt[x0$#ÊES[ôÇ ¹‰Îj42”!‹ªN%ñ¥Ø*G]c¥¦M›N:µºï„æ4Õ㻪ßV÷ÔßE3`2Ý6ü3Ö¹?Jõþ+_©å+~@^ޝ«3–ãååuàÀˆˆWWWŸØØØâââï´··Ÿ>}úîÝ»ÓÓÓÏŸ?¿iÓ&üJ&“ýñÇG•J¥}ûö}íµ×ž ƒÁðÍ7ß´oßþË/¿„+mÚ´éÓ§Ï‚ Ôjµ——W¯^½.\¸páÂÉ“'§¤¤ 5عsçÑ£G“’’F·{÷î®]»¾óÎ;ååå—.]š>>&X} ¸¸877·wïÞºšÒÍP XYY%!„$$$Œ=ºaJu¼Hît:••UEEÅáǃƒƒ«åÈd2ÚBbkkkkk‹ÿBç+øL7NFrcooooo4èq––;Ê<9‚ŸŒˆrGß#‰ð_ü`Ô™¦>ÀÆÆ†î*†Í*©Öô¥–Ù«[ø×å&„¤¤¤Lœ8qܸq;w¶··wuu­¾Ü B¡ÐhŠììì`OÒË `ÔaH,7º°^Ö[M›áÉù Øu*++Ísø´PcQsl†žzôè±víZ¥RyñâÅ¥K—úùù™çÄ f0ÃS¹ÆÚcáÌ™3OR üâž8pàÀ§ý•Z­þã?Ì;Ê f0ƒ™åÔÚÑ¿ÿ»?`ÃŒº<øÅÞ0æSc3˜YÎ3«¼ðýhŸMÑyZ:tè \F€eY“í\`3˜(Ë/p1]3˜Á f0ƒ ±žç±j–Ì`3˜Á u–––˜çôÃZ=%‹œ7n"–c2µ3YÄŒ+BþÏn¡ZfKȘ@{$œ:_SS>¡ORѹ!‘±²²ú»Iýµµµ……Å)wú `0JJJ,,,,--IãyPÊËˡڒ¥¥eÏ@íPQQ%­¬¬°¦¡ BQQ‘\.—H$r¹¼'P«ÕVVVÊd2kkk“Z;€’’‘HTPPpîܹó±š4iÒ£G…BA—Å4(((°´´4AÄŒ@©Têt:©Tjmmm '´´´ªÕ5<1¯eeeÀÂÂiÃôz};BËÊÊ®\¹2`ÀÒPí!55ÕÑÑÑÙÙ™eY¥Ri::55µiÓ¦­Zµ2 &…˜œ9s¦ÿþP!ñ ë½ÖÜ¿ÿÞ½{={öäyÞ§èüùó=zô „´nݺgÏž¦¦âXXXÀ¹S©Tµôn``Yö?þ€ByjµÚ% „ôôt©TÚ¾}{!III:ujÚ´iÃóêpñâÅvíÚÑyåæTP3˜Á f0C™å˜Á f0ƒž=/çôéÓ¨µõíÛ711±mÛ¶5Öºo())IJJêÞ½ûõë×e2Y¯^½RSS‹‹‹‡ Ò09rÄÙÙ¹K—.¾¨.\(--mÙ²e·nÝLsÛUTT¨Õê¦M›¢‡óÁƒàŒ1ŸÉgXnƒÁàééi È\¼xQ£Ñôïßß”gì¹@²aàÖ­[ÙÙÙ Ëå5ÞððáÔ”ê}³TËÙ»wï”)S’«àáǾ¾¾5¶Qi0HOO÷õõ={öìÕ«W³³³ !kÖ¬™4iRƒ!œœ|çÎFßC¿ÿþû¤I“.\¸““c²=77÷Â… ´O¸´´ÔœMùl°hÑ¢ððpA&::››,dgg_½zÕ¼s!ûöíóõõ}ðàA-ìÙ××7%%¥1µœýû÷GDDñ<ß¹sçŸ~úéí·ßÆo§OŸuìçÎkÔs¢Nàúõë‘‘‘„±X¼mÛ6BȆ ’’’>øà¸!##£I“&û÷ïOLL¬¬¬\±bżyóê‡S§NÅÅÅEGG·oßþĉ7n\¶løù !@î§M›æéé0|øð€€€Ù³g[[[/Z´hýúõ—/_þî»ïê|rNŸ>v÷îÝÒÒRKKËqãÆEGG/^¼xРA Ã@ÞÕk¯½6iÒ¤ ÁL.[¶ šNŸ>}À€×®][ºt)!D¡PÔ’jµ:==ÝÕÕµY³fååå‰äöíÛ>ìÒ¥KzzzëÖ­a>늊Šf̘Ÿ›5k¶víÚ~øaÿþý„OOÏ™3gB¡bBTT”B¡8xð T*=r䈫«ë°aÃ6nÜH‰¯§iYµjÕåË— !¾¾¾o¿ýöƒfÍš_}÷Ýw …bÇŽ$„ôïßÿ£>ÂnÞ¼ùÈ‘#„!C†5 ¯C[ömŠ‹‹³±±ùé§Ÿöì٦ēb„dTT”J¥òööƃS·ˆÍ˜1ÃÅÅ¥C‡»víÂýl„$\÷óó»yófaaaÃ#I¹|ùòªU«fϞݶmÛéÓ§3æwÞ™:uª››[hhèŠ+®\¹Bñóó9rd~~~HHüpË–-õ×ô¨²²rܸqo¿ý¶¯¯oYYÙ´iÓàzll,ÞH:99íÙ³ç›o¾ãÒr†êîînaa1mÚ´›7o&$$`„ÒôéÓOœ8Ó¶mÛwÞyz®Ô!°,;lØ0‡˜˜˜ÌÌÌñãÇoÛ¶mÙ²e&L@ÙêôéÓ.\ ‘¬ó*..þã?nܸ¡×ëÓÒÒΟ?¯V«®^½¹uëÖ˜˜˜Þ½{O˜0!333))éâÅ‹jµS*•þù'Д:‡^½z 4ˆš———0lذ”””¯¿þ:66öÃ?œ¶Ž\.W(„lDäææ–––véÒ¥mÛ¶)•ÊŒŒ •JmÊ***åryqq±£££••UYY™Á`(..~ðàÌðãú½Ö xxx@Gz£}×úÚÖ0 ãèè/öìÙ£Ñh”J¥½½}“&M4J¥*..†{  _­V‹D"GGG½^¯×ëE"Q‹S-Z´:tè‡~haaß«W¯¢¢"h!¸cÇŽ;v :tÇŽÇ¥§§«ÕjXJ@R¥RefffddÐ×ë\G”J¥ŽŽŽ›7oÞµk—V«U*•vvvM›6…™„ÛèYEdärypppzzzžÿ;X[[GGG§§§3 SZZš’’R^^^\\ŒH‚zŠP#’mÛ¶ŠŠ‚CQH8pÆŒ}ôÑÇáÊ´iÓ$ɺuë***t:]³fÍ|}}/\¸àáááááQ\\@·T®sظq£R©ÔjµÅÅÅååå)))اaÀ€S§N•J¥ÿeó×}YOü;uê4þ|Ød€ IDAT ‹zÚ÷iiiþþþNNNåååb6lØo¿ý¶yófwwwȺ !--­eË–óçÏoÖ¬Yã6\ºt©P(¼|ùrHHHu<………iii'N4jäúb@ffæ¹sç"""žÙ8P0zôèÑ£G¯X±ÂÏÏoÀ€k×®5º!===88ØÍÍ d #¸q㆓“ÓüùóŸ|­ \\\¦NZÏwwwGÕ³¢¢"--íÍ7ß„.·Ï)|ûí·×®] ñóóûä“Oh#j½Ìž——W}𺒶´´ wuuMJJª§ =zô/((¸ví\ÑjµQQQ5ÞœššZf÷×^{­eË–Û¶mëÞ½»‘ËJ „‡‡wïÞ=))I¥R¹¹¹~ùå—³gÏ;vì¶mÛfÍšeÔž²¾áÊ•+—/_xB]xxøÝ»w333ë«FqáN:µM›6õ$kÿGعsçØ±c'Nœ8{öìÓ§OcmfÍšuíÚµ¤¤¤÷Þ{¯ÆÐ˜÷ß̘1III(D׬X±:&íÛ·7 àˆˆˆ0©¢W¯^«V­Ú¹s'Çq)))+V¬ o8þüرcÓÒÒ9²nݺ.]º µ mÛ¶ááá<ϧ¦¦Ò×/\¸ð믿þLJ?£–cooß²eKBˆ•••³³³X,vvv¶¶¶Ž‹‹{ûí·‡ ¢R©"##ë\Ä`fïÞ½aaaC† Q*•GŽ‘J¥YYY¡¡¡sçÎ ‘ËåÍ›7·óÚµkÇŒ³yóæeË–ÕÇÂìÚµkÒ¤I`i%„8;;ÛÚÚ†„„äææ2D£ÑLŸ>½eË–"‘¨gϞǎëÙ³gqq±J¥êÓ§O"j€­­­³³³@ P(ÎÎΉ„2vìØŒŒŒ™3gº¹¹}þùç_}õ•F£qqq!„ØÙÙ999¬àììleeµk×®ùóçŸ={V§ÓýöÛoõ$4Ñqrrú믿ºuëfkk+—ËÅb±@ €`M‘H$—Ëë£H”^¯/**ºtéÒèÑ£[´h±yóæÙ³gÏŸ?_(Lœ8qüøñ^^^°ÁvïÞmaaáìì â,1ùg³óºooï#GŽøúúêõúÅ‹÷ïßß¾}C† )++Û»wo³fÍBBBæÎÛºuë 6¬[·N«Õ¶nÝúwÞ‰˜âéé å<êöîÝ;nܸ!C†”——ïܹÓÙÙyîܹ‹-bfüøñ|ðÁ_ýe0FŒH …    &œ;wîqa¸uŽŽŽÅû8$—/_ž@iÚ´iíHÂ!ª?‚Þ©S§«W¯¾þúëYYY2™ ÜCCCoÞ¼éãã£ÓéÆçææ2iÒ¤={ö¨ÕêÔ2@À†‘ÉdÎÎÎr¹|Ïž=cÇŽ…Ù‹¿wïž³³34pww¿{÷î­[· `äÙ@ЫW¯³gϪTªýû÷¿ýöÛ‰¤± ÞXZZ6bÁ›ääd(x#—ËMªhJJJ ¼15ÄŒàØ±cýû÷·²²b¦± ÞXYY5®³F8uêT=”J% iR¸aÁ…B¡ÑhLªàÍáÇß|óM…B¡Õjÿ‹'???ÿâÅ‹¯¼òŠJ¥rwwŠŠ¢#ëþ;`Á,Ô¸pîÜ9(xS·Ä¼cÇŽ¯¼òÊöíÛŸêW‰‰‰íÚµkÛ¶mEEÅáǃƒƒÍ-ÚÌ`3¼ÈPQQ·gÏ;;»Î;›HÎìÿ,˜YŽÌ`†:tè°víZH•›0a‚É–ä0qøî»ïèêœf–c3˜Á 5C»víÚµkgž‡ÿuåUWBïÞ½Û#¡rssËš\VVæèèHQ*•·oß6•.++ƒh•JeRˆZKJJ òÕ¥¥¥ðeYœ"ôÀ …B±XlR¸ÑyyyPsÁ€¦yyy ì|*(..†TFc ÛÝ™ OÌkA¦f–íFÞÛºukBˆN§«¨¨h,–Ó¤IkkkžçU*•I¹ lllL±ê‹(‰ eHã ™›„­Vk‚Säââ"•J…B¡H$2ÁÖ®:Ž¢×ë+++MвwêÔ «¨¨0e–cccãààÀó¼Z­6…íײeK…BÑXÄÜ’{þ±F—70ƒÌ`3˜á¿„’Ö±VXXxòäÉú+W‡ÖwwwÈjܵ,Ë‚aÐÒÒÒô;´×¨óÊår‘è×¥§×ëA‚nô½Tƒ²±±1¸çz…ÊÊJžçÓÒÒ²³³_°ý, ÿïÿþ¯I“&–––ÏÝÕh4FŒ kÎÎÎ}ûö5ñaH¥Ržçu:Çq_\\œ‘‘áéé)LÙêUxžÿí·ß¼½½J¥2åF¿õ ·oß®¨¨x饗xž¾V°ÈÊÊâyÞÍÍã¸fPµiX–íÕ«ä8¿0 —ˡޠÁ`¨§Òyõ—C×0w5ƒÌ`34”Òfž3˜Á f0ƒ©³–e¯_¿^TTtÿþ}ºø ÉÂíÛ·ïÝ»g^òòóóŸ‹}ø´pëÖ­üüüxÇqp¢ñJIIÉõë× Cõ›ïÝ»gÊ!ûÿîÞ½k M~îß¿_Küì,§¼¼¼wïÞ±±±{öìùòË/MGŽiú-rÍðÌ0oÞ¼W_}õÅ׫¯¾Zçmmk„ÊÊÊÞ½{¯_¿¯œ?~ÕªU5ö ~±\·oß¾eË–ÿå6|øð:l„vØØØ4iÒ$33sÛ¶mþþþ{÷îurrzÿý÷ !+V¬÷~```‡ÒÒÒ €ƒƒChhè¡C‡Îœ93}úôØØXooï«}´cÇèzðÚk¯AÞÕ«W¿þúë·oß.,,œ={v}#ðÓO?eeeùùùmÚ´iܸqݺuËÎΆýmii9oÞ¼'N;v,"""//oûöíŽŽŽ€äàÁƒ—-[^ĉ'ÚÚÚ~ñÅÇÏÈȨ¬¬lžúé§ŸBö¥¿¿§N222 ØßôéÓO:Õ´iÓ“'O.X°àæÍ›ñññˆ$üvñâÅééé»víš2eʦM›ºwï.‘H !½zõòññÁ·üúë¯ÉÉÉS¦L‰‹‹{÷ÝwÏœ9¦cÆŒqww¿uëô ”Éd‘‘‘üñÇ_ý¥V«·lÙØ“——mz…Batt4!ä—_~INNvuuíÖ­›B¡8yò¤¥¥åäÉ“a¹ÉÇB:tèøÃ?äää¼óÎ;xp€¸¸¹¹¥§§ÿý÷ 3#ˆ¿yóæ‚  E³f͆ÓM±¶¶ž;wîï¿ÿž••UZZúÃ?øùùmÙ²%;;›2lذÑ{rðàÁµ,wllì¨Q£`&BÞ}÷]é¡C‡:uê´mÛ6Nçíí–––““ãááñî»ïÚÙÙ †‹/þú므XŸ>}èn˜¿üòKß¾}á1cÆœ|¸F£-A™={vaaá–-[ÆߪU«+V :´d£;wîÄÅÅÁgWW×)S¦ìÚµ š׈¤ÝÉ“'=Jqss£»œüþûïÇ'„tíÚÕÏϯѴzÙ6oÞœ››ÔªU«Å‹ÇÇÇ/^¼xÇŽÞÞÞEEEÙÙÙ“'OV«ÕÞÞÞ±±±«W¯>{ölll¬ŸŸ_ll,ÝÖ¢¾ÓâÅ‹!èpÖ¬YIII“&Mº|ùò¹sç–,Y²cÇŽÀáèÑ£k×®ýâ‹/ÔjõäÉ“³³³‹ŠŠ¼½½wìØ±xñ⤤¤ØØX¥RyëÖ­ØØØÜÜÜŠŠŠØØØäääÈÈÈüÑÛÛûÁƒ&L¸wï^llìÌ™3£££ë£-PuX¶lÙ·ß~ëíí]^^”T^^ž””äççwèСÄÄÄØØX­V{ýúõØØØ¼¼¼ÀÀÀ«W¯z{{Ÿ>}ú£>ÊÌÌŒ}ÿý÷¿üòËùóçÏ™3§}ûö;wž7oÝ+áäÉ“6l?~|llìÔ©S¿øâ oooƒÁ0eÊ”ìì쀀€û÷ï{{{ÿüóÏóçÏo×®]‹-ÄbqŸ>}f#ùùùݾ}ÛÛÛûСC¡¡¡˜?~ÇŽ?ùä“3fdffÆÇÇC÷£G~ûí·©©©ü±ÍÀ—,Y²uëÖC‡ÅÄÄÁÁÙ²e‹··wII Ìêĉ•J%4‹lH~óóÏ?«Tªü122299966öîÝ»AAA%%%ÞÞÞ[¶lYºtiÇŽ›5k&—Ë{öì¹uëÖ%K– 8ÐÆÆæã?NMM…å>~ü8ìÉÚ—{×®]‹/ööö¾qㆿ¿¿··7ÏóS§Nm«ÝÙ³g¬P(f̘akkÛ­[·ùóç8pà—_~Ù¹sgzz:ШŽ;Î;$€ãÇO˜0÷d»ví\]]gÏž}êÔ©éÓ§Ÿ={ÖÛÛûÊ•+AAAwî܉½yó¦Z­Ž½páB ÍÖÖÖÛÛÛÛÛû·ß~Û½{÷Þ½{,Xн{÷Ç!™œœKKËŒŒ —ýû÷?ÎU¶cÇŽèèh‘H„²EyyùÍ›7çÍ›—ŸŸocccccSPPP½RN»ví æ¿F£ñôôlÓ¦Mvv¶R©„¾«žžžb±øêÕ«NNNMš4‰D]ºti˜Ôjµ©©©‰‰‰›6mZ±bE~~þƒz÷î½}ûö]J/½ôÒÁƒGŒaoo_ZZš››Ká8®wïÞ÷îÝkÕª•Á`pppP(×®]S*•™™™­Zµúì³Ï¸¯å¨Q£†IOO‡+ÇqwâĉÌÌÌŸþyîܹ...¶¶¶R©ÔÍÍ-77·´´´OŸ>;vÌÉÉ^$Mš4™7ovgÇå¾|ùò¡C‡úöíK/÷7<==›7o~åÊOO϶mÛ^¿~½Á¢ÓÒÒz÷îݾ}û[·n¹ºº¾üòË<0rž­Zµêå—_®¾?ÓÒÒpOº¹¹uíÚõÞ½{………_~ùåºuë¤Ré•+W ´zõêàà`€€€°£B¬¬¬<==wíÚ%•J÷îÝ«Ñhìíí-Z4`À€ß~û­ÿþW®\±±±ñôôüå—_âãã_~ù僾ùæ›ööö%%%èÇ*..¾{÷®•••]qqq^^^ãÖhH$tFdEEELL !Ä××—eÙÏ>ûìÂ… :u¢K9mݺµ^{7=!ˆÅb†aìu –”[@†.ò¡Õj† ]eee8«peÖ¬Y –MµråÊŠŠŠ÷ßÀ€Ó§OGYA*•>.6>>þ«¯¾ú¿ÿû¿¼¼<,F»qãFè ïàààëëkT{Q(nÞ¼™ÒK󄘘øÇ„„„,[¶Œý ™UuxøðadddAAÝÞÍÞÞZM3 £T*qYqo4|^võƒ`gg—˜˜xðàÁ¹sçVVVnß¾ýI*<ŠÅbºº,÷­[·BCCE"‘ .h-ð¸5­Åð³`Á‚Áƒƒ`Í0L¿~ý\\\nܸñî»ï6X½ìììÌÌÌM›6I¥R_____ßÈÈHOOÏ×^{íóÏ?§‰6!$??áÂ…………PÑÑöìÙÓ¢E __ßÎ;›––cöööqqq>>>¶¶¶EEEß|óO\\œ)ð#8|ø0*^ \°¥&%%­\¹òüùó"‘Èßß¾jÒ¤I\\ܨQ£ê¤–øÓÂŽ;Ö®]»~ýú×_=66¶¬¬ ®oÙ²…NË-..þá‡àóŠ+z÷îסC‡Ÿ MApþïÇŒ¶~ÔDDD€ÓÂÑÑqÕªUp‘eÙ¯¾úоíôéÓÐÍ733ó×_ýàƒèÓNƒ x­lmm‘yoÚ´©Ñ³ÿ*++#""$ÉgŸ}Æó<=À«W¯ž8q¢Æ_ýôÓÝ»w{yy•––®\¹’2þ| ‹µk×6Œm­[·n+V¬¨¨¨X³fÍÈ‘#_ýõY³f 8Gý×_8qZ»»»Oš4iùòå'N„å>wî>-** =$$ÄÙÙÙÅÅ%22rË–-R©„ÐÆ•ñCBBÖ¬Y£P(U8Ýß~ûíŠ+zöì9f̘åË—Oš4ÉÝÝ–;++ ;CW_îÏ?ÿ<88xýúõwð‚Áºuë._¾ìåå5`À ‹€€€ . 6, 77÷âÅ‹ €CAAÁ™3g.]ºäççÖ®]»ëׯ7îôéÓï¾ûîàÁƒÉÈÈÈž={öìÙ300péÒ¥Ó¦M‹ŽŽþþûï!Ê£oß¾ãÇŒŒ|çwÒÒÒÜÜÜþ«‡.ëÙ·oß7n<¹‰F«ÕŠD"žç9މDz½Ú×ët:Ðu:-›ã8¨·#‘H ~í³™°àÍSõ®Öét@,ëõz(<HfffŠD¢Ö­[;öÆÔñ„€ožªòäÉ“=zëÖ-˜1zf’ažçéë8«ôl?ÕbÁ›ghô[㲊ÅâN:A«Z@ØhKÀýƒþ-!Ä`0ÀÛ†¡«c ŽãpÔ¸jO2cO>,xó´M¬aÒÂ)))À}}}ÁJ°,k0ÌLuäkœUƒÁU¨Ÿ7,x󴃄E"̤P(4 ‰„çùÄŒTFF†D"quu5jÔÇÏŸ?û—[(ÂÃIUO\n˜%#ý¿¼IMMµ··ò‚7€ŒT*ÅÙÆ#€ñÒ­:Â0K0Rðmøg;­XðF*•>¹Ê‹û“ža£ƒ†˜íÇíO¸^ý„>¡ý¹.Qq‹êh#M(6¢‘‘1"I6l¸råÊ”)Sîß¿ºEÃ=ôçEØhVq&‡<"ü¯[èTûØè¢Ñ$Ô>c Õ½qÕGatÃ0Hkþy`Cªú2Â5º·?cbbnÞ¼ôàÁƒáÇ­½Ü4å¥/6˜§‘©Nš‡Ç-Yu„éYz܆o°ÓZãþ4Ú¢O¸?ëvEÌ]AÉòåËüñG•J5qâDô—Ô+øùùÕU‹=“‚E‹áøZ·nýé§Ÿ‚ÿV¯^½k×.•J5eÊ”FÉ+2ƒ)ƒ™åÈ×kÈ7:ô…œIÈÿý‡æÍ›7ðv25°±±ùŸ3<Ë …¦¿(Àð-î7Ø9B¡Pè"äšq"‘ˆ/âÉ-O@œá±š5Ò<©x¯˜a;;;½^_ZZj0\8n•V[É0S¥RƒÁ ‰Ü‚µJå÷É E¹NgøØ +–Ù¶›0a‚¯¯¯……EJJJtttnnnéw¥L#Ì{´ùa¼0‡ƒF{Öv –ŒçùYC„Vk™œLÜÝ !$#ƒôéCæÌ! š2¡fYóÞûˆ5š^`^*œˆ‹‡,-¤;pŒ‘ÀÖjµ®À pÄb±H$ÒjµðL< B¡Pœ(æðìy¶¸¸¸¢¢âQN¥€û ™?ÿ&"p3¼1dð zÛà Ô——gee•——?ºNx!ó(=f2F!;.Âø Î!¤˜uˆ¬i˲À±±@†€ôfžL ‚$ É|S ¸±U@“9X&äa˜  /‚…¦9í(†Ü7¸‚Ì’ã8XJüì@ñA¿…ÉìþâÀa«Áx‘ßàudT¸Rƒ–©3ð0Àf y$ ¦¶7lc V˜Ü܉ŒZ"‘TVV¢8S B¬>L 3šÛ&(ŠÁÂca)°1œ ”ðPòÀõ‚í³Š<ÀÇ";Á¤&x£^¯—ÉdÈÒª/n`Ø3(¸ ¡Ðàk8 M Z¢”˜\FtHdÈ{Ä€ôz½8F¬:¡²>`­Õj—Hà±m9ÎG¯·´,‰D„p'8ý½ò„2%%¥²²R*•Þ¿_­VóÃyÁŸ®‹UMÅý§ÅZ/”ã8ÝLמã8NºW*˜;—\½JΟ'GæÍ#Ï[<úsÏrhLLX*¶#b°ûi±H&“a©f$@x*à M”Lv¶uü%¨ 6Ä[Ä,Ë‚±K&“ñ-yn(§X©QÍ ôXhb´‰8JÜ€¸PاíH*• ¨Ètp‘&F<Ïk4 $4(ŸzÕ…P¬’‚â9 ÈȃÁÂO …¸ '?£Ö‚aàÈoÐ0ˆœ÷­EÒæ IDAT‰Åb­V«V«Ñv‡J0Öü@UQ *g ³ ‹ª‚1hN¡oÆñŠÃêÃÞF%^¯×ËårFC눴Ù•]”{€s0 âr”¢"…e‚€/‚5&æ”Ï`ê[±X\YY Zr,P¹Ð:ìÞ‹sB›q6цJÚ!ö7zBınN%‰E2 ™Z­ænrÂBÍ! µBPÎp[2îÇz²Ç+!‚\â …á†á@…áØYÍgB¡ˆH­v¡LVÄ0 0¼4!ÂsÖœºX}ýúu—Z«ÖtÒt"ÒŠDâGNœaÀV­VÓ¥tÙ!¯¤Ö/ҋ׉E§D„'ì6¨[PÊ+)Ò¢JÂq¤¦ªÏf–Sï€äþiÀ#›O(@(£U\{\uÀQ»Ó ÂGbµŠ—+|'¨ÜPÉu䈀H?“Z®¶äyž<ò" j" 5 °ôñzx®à?ÒôD”#ÒôÕ°ÝYæ #!ƒÁ k£ãÛðL)#|(Dq!< ­…`e¢o4CÞ€t!€²=…B¢|@¹‰ rt Œ@s-,,°4œ1àøv4 ©Õj0dÁK±@ Ï¡V«…Ò^"äÄðv è€*ª€ÀN¤R)®#J!P\ ù:´h¡µ$F´ù·L&ƒßÒ…ì¿P\ U^T’P€v¨ã¤MgȘA€I£U4šj©q = (G¬8½Õa&á]h€Ei ·+<°E}6$ÐMµZ¼ð„ ‰Ì¹;ŠÈÝa' Ë $'Ä °(À~åƒ5‚ëªÝ*Ù;2¹\ÞµkWww÷Ë—/§¦¦j4Ë‘–Ê“J‹Á0‡ð|ÀV™ª”gÈÉ&‚ž7ðzƒþ7…b”N7eûjµ“¬¬´JåbYV$Ñý Ó©uüw” 5³œ†,ƇÑS¸YaÇãΦÍâ°;$Á1JWÆóƒ‡I Šêà:Âñ‡thÒV¤FޤG(/žpØÑÖCŒì˜ŒËò2^À DDÒB©P"¤£tÐZˆÞÚ[€ ¡è+‚Nµ+?Ú!ld_‚#€ôÎ<<–‡ƒNt›£:Ese¤;èyÆ™DG+ ŒXÒ˜ö«ÓNfø-l‡‘ýÐ: ºh¢à‚HpÑÂiÛ†Ÿá¥·FK¸@1aŠP<¢Ë/ÒnH:NeY `3t°:/1¬^‡<Fa´g8޳±±±´´¼ÿ>î`t„ª÷aÄ{Po£702<œ˜Ud!´²‚«‡ x<+Zì —¹ñèPIÚ¤‰†\‚F£9wîÜÝ»woܸ¡R©ÐÏ„;÷?„¶‚ƒ2hîûeð<Ì-îÆG&ÜÛ"A¸H“H,¢eœO[tRêÞ×9x9ÈšÊzöìéîî~áÂ…S§N1 @>'Ÿ›YNãh9´çE:ÌÉ%½–tà!ó c¢Ððw”šX §‘~2îP¦Æ]ˆ²§‘» ( Ó§Cc†MÏü€]§Ó %BôÁg…ŽœøFôR Âà1<ü4 0 ¨CüQ eD/`Ô´q ¤ª,¼=FHàØúIºap¤èTC* ñ©J¥N8ZW íF?"­Ãg`ƒ)pw¶´Š †5:æÂH­D^¼í½´¼"—Ë!Ð]ô€*hW°o‘‰ÂüTTTÀl‹•ÉdJ¥E"Úª†ÚÎ<½½QÍš çd#‘T*ÅEOäc!Ÿ@#ÞCwuÂÝÖ?TåA:¤…¹GFŽÛBÞÀëz꘻Œá¾A,³v,׎#ÂÜ`8á?Ìztð: ”ðF:”ûB!“¶ ‘è TýPÐ; €89ØÅGx]¨sÕ ï“““ËËË;wî “™E²Ú‘vf–Ó8,vzQD!§àÅÅà1z7ÃaƒoiSn}¸6¦æ`2;a;&Ú:„Ö :çÝxÅvŒ²\‘£ÐF? XÂ+Ìf¥™ rS£\E”ß‘C <‹×F¶):éNŠ:HRÐB›§Ðò#|EçHñ?: q ‚6šæHUö°^ä´vˆônFÝH*•ÒQÀ0hû*ÓèzÁˆš4£‰Ì( Ž¶Ú¡ß]´<îÌ‚† :Ë LÖÁ(Ú„KïFTÑ0úƒÎÒ1d| +檪¹ mÀÏ‘Èbø OZ®5²U@†ƒËJG^`²ž\Z¿Çõ¥e†a,",ÔsÕÜCNP"0 Äšš$+%"½H/УA^‹BG]¢¾‚[š¶Ã.3/>Ð7àŒ Óa&é”gÙ ™v¡V ÏÅsK¨&Ç½Š¤ ¥~òÏüsZÊ&UóðÕ4_Aÿ$¯ŒŸ1š“6& E›N9Dê&—ËiÝy ¿H^øœÊÊJ:õ ^¤‰ètAómèCB"¡D"A*€„©*üjÒ,Œ˜ Ý˜Se”øI£Ò¨ž´bG—E¡PZ§µd«‘V¥Çi0ø- /jEÈj¥r–\®­’ÊÑ«‹Vq0˜ã8k`ŬX&æyžp„ðÿP²qGÑüÕÈÁNûíÐg4X°ô¢ZS=‘é8]InûMÇDÐA€ðRˆG¥]tå$ÐÂÂ"ð! fѱ$FyÙ¨ò¢lAÇ‘ca —G;ó#’—*’ü%Ý…²¸™éÁÂ!牎[¡Ma¨TÑAL¨ñ£"HûAiÛ5m©CsàxtêËYñ&1ïÄ«g«Ù¬P ï¿?~TÓQf–Óh†5L§@CˆHÝ@¸Û ¶t :[Iªjˆ¡eXê¿hõFá 6<ȱf ½5ñ#• È%ˆŸhâCù£i4š,  ÿúÔ¬ù;‹؈Œ •zÚü…úD"·6­9¡P‰î_¬±†Œ |ŸmÍE×4CƤ„¶zÁoqÔ´²…‰8èá@%â„ɨ˜‘¯½} ´a+x:¬ùäfÒŒ &¹£@¡V*-P«×‰Å„BXMAèÔKÚ`(  œ+ÇÎf+ùJ(bä6á¯ñô¼Â¬‚1DZ­Gû–Ãp\&£² 4áI£Ñ`J5íf£S—h‹mÚÂmO a´%=¬h'c& (ðY*•ÊåržçU*îa#Wæöb8 QIW0Âú{´ÔHšj4‘H˜ K7š=€Á€ yÜt>,îÌSbmÒ¤áäŸÅPh}îQ¦p¹€”ùrxÛ‘mD`f9©èÐ&,\~š„aI8$tú=Zoèâ``®Áœ8´GíÅX‡ 6­Ê`¦>¹Uh"ò:Ñ’v-ÒÆ¤Y Ê`„.¡ª[‚VGç™ÒÌ ‡(‰t}FÚž€.kŒz • °åputÊ-®5ͱhLgÏ oŒPep2Ò:-íAj$ÊøFZi†W @† C¨I׊¦³Upéñ,m~ºFhH¬e2²^ÔíP—B †P9Î5– B-™¶îÂÁ¡ã0ÃVasbP®;IIJ§ôÀQ"U•¶ŸwŠ-|ÞU:÷ ™dPã=hÓ m¾r$Ål寕ºÖ_a‹áÆ­ e81Q©á˜²„ŠE'SÚ7Ò|@ç …¬Vö¬ª÷%ÉùQô”ï¿ÎóÞ™çß‚” &™©£ƒ§:>>ÎÓBzÙØ™A¬Zµ*Žãááa¦N±`6rI«;%$`ŒlW< =Úô×”øÄ¤ƒ"‡å¶5-Ï\[!™öÝQV(Sµ…Èçëõ3“įªO…áX«–å²Nçì,ûŠï¸ß¿4жܘX mê2Ún!E:šêÛŸ?¾º`T•qŒ4„Ñ3Ö Ÿipe>ª²¡V'$äà ò¢õ ç (×ÁO$Cx•ZÕd†4NRí—`–VU֣Ĭn‡FßàXÁüFè;(ÈŒQæ7B‚EgàÏÜB™åÒ$$]¡‘†‹EÞ­,C®[C¤†õRõï5•Ägõ£ÝUÎάrØ™;w®¦Wz(  Óç_÷¤ã8Å ç^lj–»ÏóܹÕ)ž_xõ¹ [°†ùw6Å€íj%¤ìîúº-‰0ýaZŽö¨.ß$I@CJÈÁÝ£%EqjYþ8жã8?1f\ä탎´>gþ&ÏžNÙÔqœáááßþö·ëׯgêwhô®Y‚¡Lefò¯Y½ŒÑቱND†ív[鈵q#‘d2:c³\è`ñ ncÖŠüÆu·‹ô|?ŽãÕqüº~ÿÜ ÷ý~Y.¥ž‡>E¤¬JãL21€ À“1Xà·z1ÚZ`. ƒ•q 2<æ„ Y¹vÈu0>ÅRëZsXÔa¡‰cX©â#¦hâ#ÅÓ@KÝ2ÍÆ¯!ÿ` _Á °–çy¯×SOìFÐBÐÕ4 -M×uÆa‡vÒI'í³Ï>TCMWßü³u'õs@wf1‹ú¥;I«#€MX=AHúBhÄ #SŠ™5 Ë:TÌFÅ’e¯ÇqJǹ%ŽÊóÚ å“çyX–¯M’†¡slƒÆ¤jAà„ðŽB.ŒYÉLU}Àßù™c<^®—à°êqÃûw9ökPTGmÂY4¡ ÏÊ¢‡á©c–,Y²÷Þ{·Z-°í9¸Ó÷/ Ãsûý+‚`Èq.OÓ/úþ½Ú¥ˆò²YÍ¢tlô&ØTýª\Qšöª(ŠªYÉ?‰ô$}"eGÐö4>ÁDG—kTód’jØ X2ÃJÁF«Èð&\'¸àñUÎ8Oâ¼­~\YBC°ÑÝÄ<®È±Dµ)VÌ€9V€Y†LQUàÁΞ¸ÂFæl†™¨fÔ% 0Mw(~_oŠÇHuå(*ÈR ¬ñÎŽ¾nÀæ¬ø¾»—³ÓBssq,v’C†rðOqƒÈ2)½RõeŸ|òÉ7ú¾Ÿ,Oä ÉãÜ©ÐÏØ`”ÛÐtBÁCÔh`"—çcÇ:™ÍfSÅtW°0;Ÿ<®%œ#¬ml!ÎUUŽŽZžÊ"r½çyþö~ÿ»AÐwœ"ïM’ójµƒX¥Úeè6i7ËyºnÔ$I4¼iThµZ###½^IhнÇz@ [ZƒôöíÛ5Îñð<“Ñ­4`©^öÈÈH§Óév»ÐÌ€ÙÌŽó¹ 8#MkUu~m6¦Ü«,ŸYægæ2_Ĉsc4έŽv†¦'¿ZO>ž$oJœoL]pïÝ=ï>¯þëâNË@ yçá\Fá¸ôW¶ÂÆw@úbkv)Ððsx 1[×bó£•b¡šÚZãY1äyèyð€šª â2´åV·=ÔU¬mÊ€n1 ëWËfN(€ôÐ×WŒBm,<¶šLXÉØÈ¸ 7ýpZU•S?£îô˜¼1ºh‰»pú…¦=äb¹§¢&Ðd¦¬îO˜±,f<3M«¯€áhX60¼Ì‚x5L9A‘ÒÌ… Q`îåä­ $nù°LÏ-¡l‚?ž1F§ªN×ß©Õj\v0I•çØd¦O+·‘˜ˆ/ä$䫸mÉIì9;§Ê᮲÷Ë@8Ï&¬(ŠÚ—kñ§cs¯ñ.öªªòöôzõÜ]÷!WÈy@*<ÊôœB*Ä—dÍ$¢€rÅ8ödžç*cƒbh¶µ—j"LïÏÏûïîûñ½MžˆÄÇÆÅ»ŠÖÙ-7VUÀfÖ>3o9Ë|póÏ|ÿiúþ$ùŽïß73^‚‡ lúLàÀÈn(¼4ïÓ>B‹Ì’EN€\ûß³cÇŽ,Ë&&&ð›,˜­?šÝ³s^"*N©èÒ1އ™†«ð^’t¦ué½üoc¼²ÌVeU«Š>URI eY?d¾t¾Ñiÿ¢ ã/q²¬}¢6=gã:œÖÉ´F^‡Ô…ªûpá!¸gXøLäLàL²t:_$ã(X™GŽÙ)Ë„g(ší,ýdŒµÃÁ Ã\*à&Ìô ¬ÎNòX¨ÉН–)´K˜Š¾L0ð „°Ô0†Áö >ðz½ÎãY2Ó$9¦ëxÆ|W§ <}B§fœ}(“éí(fYd×÷}ù³„O†ù¡yüÇXŒdÃYtNä{ÕŽª› M¬QÐrâ‚BEÇÄf€‚/Dz0ÙÐï÷5NpÎhå^erjÒøLÃÝæJ_Ò4ÍoÈýùþä7'ç¾m®vª0 Ô &ïp‘œßèy¸îS3ågPé3Cc­HÃq„a ;_Ͻ+Æ€ÄÒmÐÆã-Š¢ÓéLNN²’²Q¤„xø˜¢àv:ôz¹:Ñ_ÓÊ ;èé<2¬bþ 4AyAË <Ï•€«Ã+½^¯ Ëøqí=5?ð}ßo·Û£££Y–•#¥w¥×w?øjSs$ PFç#9BÜ”†D&{ä°î-7 žë«Ç “ñ¬‰1èÍʺ…P¤%)óhx0Ÿ©¯@Èí5Š%'È س0 …L´ _}3· Ù koCp·¦Cly”é®E¬Âp+Î €2p”PÀŸChwY£W Ó#EÐGÇêî³sz9\g@RZÐ~Эµ`Á‚v»ýä“ONNùcä¯ IDATNÊ@l\6‰ó¤]éÙR…Õ{ªí8ËyÚ§Bª_«äf K…² G#ˆs ¡ÍZźš§Žãçî㮳Á3…›Ž1]“åù¾yuo…)} C€Ÿ L —Q¸©ÚŘ­ŽSÑ̦Æ dÀ]˜!M†+™ÌÃz,ìÍónØí–,·>pµFmü%öѱx€¨e–å4YqТ`ámž?Ä—™ö<0[¬‡¹}pÓó4*Ërrr9>OÎëZÑxƒ®8„îÙ¾·,Ë3’$, ×u×Öjl:€6 zà A‡y 3‰-¹{Œ€€›$$•VEÿ?úí#Ûâ "œ~uý«õÎ{;í³Û |#‡E¤á…‹á–9HXý|_옂hyð0æn5i¸sk5Ø,ím=•0X‡™vmàŒz׬G!{Ìp Ï'5› à^¸1¥ÎV)Öüèœë¹UY)bhhhýúõšèø¾/žUãKú¡¥“ 24m0QŒp!/ mEàôDäf‰0ÏðüñÍG0 ¡-Ñh!ù]ÀMcÞšF»Q‹ –¤S/WhÃÔɇ¬&`M¤Î›7¯ÕjmÞ¼Œˆ™Îeô’‘|2Êq€ÉØ™¬äÄœu7ð7–ûv<“Ä#¨»CÎNûaçDÌ¢c»²z’JÒv:T묌`A÷­j°czNÓ᪪>Öï¯ñ¼uaxFžÿÈq#|Y dpzäX¥$QýXýv­Æàlˆ&!:F<äÈH‘id¿V«aáfE&3ueæD×mø›Àü3ò5”bìyƒäç@& ¸ßê´ Íê2x%3=ð¸À±("Qñ1 D#º³Ýw06~9^º–2¸3öÁñß0$Ô^XûÄ÷}'s‚k‚üäÜù3<<<22¢ý²Qæ¯Ìkß®!¾â]@1š³K½{¶2,7KøÝ¡)ˆy5v¹fàT?9…Û¬åÝ®Zù# maÙpÙgÅõÙB«l‚Ε((-ºã”]ÂwŠDÇú] QÕëõ lݺudd˜*G;`!ˆhw)(Í$[êñH²ƒ"ÿ½eµ…ÿ[«ÕôpÐ^ŽÕEc/®)‘Ѳsñ.?Iù4èGñ’å=W"¼š,€9q(ý±-çé5c>”$k<ïQ´Éu¿äyœ˜hÄ1$Ì“V ‹Ì2XCƒQ0!¡¡ˆ?øaÙ(™”¢>Ð%I‚3´l”JsÊÇU‹ÕÙâiAP1QË$Nþ·`R€0ÛՙÉ>Ì4·F¡ ½ ù[¦×B>›x¤LF²|õ…âøF‚¬Ç ¢³b,œÇ(øÆ÷ÂZm<žiqƦŽÝB¼¼êÙ•³ÄqƒŒÅ'›Ÿeó³êþJ;n[X+”¸‡Ô÷-¯Ù]h< %¤`RdöÀ D0q¿5Å’æç¯a ËEô€‚rfÃ%¯ ž†Ñˆ®‚oZÄãŽPX`:MÿÒ´z Ë–-;á„öÚk/ÐÒ²–±±±§žzJÁá¢(Â<ÿJ§³d¦Ý-?(–(df§ƒ¡©R~/¼öxfp èì\*B‹4 ðî*ç‚A€„ZÏ_ í`¡Óˆý`)3«‡Ý—õý$ysšÞWU·ø~•ç"Ò ÃÓç²8þj>D‡kª£^æl KúÊ(z@ëÄ|3mÂ0Ô)‡àýÁÄ—&æýÛ<- >Ùû½öQmq(;s€ÊS 3ÚE: stqÑF;ƒઢ'Äf$ÀÄàÞÈà'°Ç‹¢'‚™©ð ÊVn °Þ0T¨Ùð”Ë_+öó¨•îvEo@å`߫寂ÿ ï¹·¹fÓ½´ë߯F+cLÿ•ýjqåŸìn9î„ñð<¸fÛh¦š È÷B²p÷ÑŦ¶c’ öjRØÊŠO¼˜Yþœ €ˆQ8ŠÔL…¹3UUéãÅäSÈŸWß2°Ôš,›­kï±ÇûÁ~022Âj4¸N¨mú¾¿(ÏÏL’¯…áÆñeaxÿâãa,Ðôu·BÀ9Í ‡BÖÿ«f–@h™ßÈÌ Ñ·†²^/Æ]»CÎÎ9ìŸ ÐHàTEñ(ÔÎzºAS'rö1­<ßJÒ#z¦<æ8{Ń®« ZhJÎ.³`üŒ©u0J…Ù€eF §]t×u˱Ò[çußßõì;O:eY¦G¤ÙÁYí§µÙôq±Ä›¡»¼cÇkr4h´¾, j¤fì댽ÍcnzwŠb+‘Wß ü’[C.Œ}EaX¦[ ã ¹ ¹«Y£².ôð¼P&Ö"ÃÑÒ F,SÂËÕþ:t~á$ïN̳M%UôÈYëh¼aÓ3Œ…bNˆu¯Y9E °•¯Å =‹YÄeÊ•ü iHa€u ·BðPOØ ï:Ùó²îÙ]Y*"âß㻹Á A)%¦Ä-|œ4õSà…‡=yMë_A €‰fñ¬}Ñly|…ÑŠ =},µZ-MÓ~¿áˆ{êgb+–u¡E–c-@Š¥¨¶›¶â”,díg ‘Žp®ÀªØ,Ð2›”‡ÑHåyž—€ÈÄNÌ-/m6»DtÄqÆ¥n4r[¶³(›ô+Sõ®î™GŒ{‡ë9^µ¨ê¿_»¼æÿÙ·$ÒQbíé ™ˆº Ašù¾ï|ðÁ|ð7ÞxÏ=÷0 gñõ!òfÁwLµGÁ a!ugHÁ²^*‹Æ¢Àb2‘~þÇ{½«ÂðNcLU WÕ•žwfÁÃ3Us°_A ]X} ðОEØa%!\ö&à5L°ñØh¥8(v Þüô£ˆþÄnÇX ìÅæÈ©úÊõM[M<¼{Ïó¶:Ηªê‹ýþÇ‚ ï‹ãÿ ‚[}ßÄ6 Ãó¨¿%ë ø…'æ„t×q#z²à¼†SÎÔ¨ÊSâ?å‡w„UPåEîNºnÏE§ Â<ðtBí÷û<*OÇc–q!Ú!L®ã^>ü€AÕSkÙ’ŸaR˜iSù8á < 0'ÿqƒ+¯ ´Z°ža±úÙΰŒÑ)‘£2ÓÑ’ùV!‚Ì”¥š­ÞïìÏÔËãÐ`ÉÝc¦BòE{0\µ‚Zjâ4¤+ùpnŒ ÿ[¿NßÙâ„Cô#¹¹¢»IAPÙ#iÃ<™5’Y–å¶mÛ|ðÁ±±1K‚³{Ä3Ü[|òdJ nÖ2úÔÕ« ³29{ãËÐ7òÿºÝoUÕ}ƒòÚqœ-EñmÏ» ßg½ÞÀÅ!ç<¦’w¢(Ò‚L1€\Ž@ªŠî0ŸÄ¾ò8%ô(Àvà˜´[ðæb.GÈî“ÅÀv·øìŠ’[T+! wpÕ¼cº¾v½þåÉɇªêÏûƒç a5\" °Í{Fõ“$IE˜-ÇIÊà ¼¼ðEzhVUånw¥§pĈ¸¢ó}”1¤ÉÝ”=ÚÛY,UU¿ ʦÅrØçXfŽÙ31mmZä^.JCaV#äl„ù>Kt¶ÑÓ4Ëa‚^1£j /@ã§Ý3!á}6#‡w¦è]×í¿«_ûFM÷Èœ9s<ÏÛ¾}{žçÑ%ÑøÍãÞO=LÞ@]Ovž$Ã…WÂ`¬R³Pí¡úÇbž {Kªä­IîæÆ˜à¢€y.@¡yIÀ]i [±i4›T±Äh¨I’œçûgÅqàû·{Þ¼¢x[–]ëy¸®;HŒ¸ÿÄFJú¨µ¾ÄºÕ—‹^£ ¬ÐYH檳kkc¨ûÑ]á6Án’ô?DSE+r穞ÛE÷]Y"Î=Žù«)/{?ìUó¦í°x P)”<,ŠHY–›³ì¿íbî¾2ÉG^…\-À÷o޼Y.ÈP=y[nðA 7€¨ÑÀä™>p—-T\ p„1V‹y~YQUg¥é|êà…´‡Û8òøó>pޥǤÝtƒ"xö_Í™wKñ–¢weOh“BÎ@lô€–8 ˜õAU w³q„±ê<=æPk$Æá‹êå°{„4TzÁ-Ä#²jt˪Ž%0´`Ò¥ÂÔg|o½^?üðÃßò–·¬X±VuúoÁÅDz×e£4nÈ;±.Ül–6×%€¿Ð(Ò2ÔqœøSqü‰Ø½Ï­îªän¿j¼j?ÏóN§¬ïh3JRô˜žÃ›—†,r'|ÿ;AðŠ,;´VûÏ~ÿ:ß¿+°‰¸Ã.®œég*€©®6X±ÜfÆ^¶Tk™d9¨¥?‚Èý7g’vW9;¡Ð±¿<žYÁT6ÓÜg“4ˆcàèÇÅXÚòÜÝQì‚A$ÔÀ»þZ§ šü@tSu»]!¿^Kó˜I™`H³c w}9Ñf]=¸ŸÑížRUç×j1_ìv?E;È¡Ìžç ªTfzý )%ë1WT–G•µ÷×öÜ.jä·yÞ›ï®~5¯5þ½nã­ =˜Ð†ÕWÐÜb¢¿¢D[¶Q‰‡¾öÛ€drQË…,ÈŠˆF8þð½hïCàÕòãB¶†aÇÌ“™r‚L³:êàΠ³è8Ž7e»tÅ-ŠbÛ¶mêç¹ÌgÌÑè¨KQïþͬ\ǃ;иÔèÈæ1ìQåSî¼ïÜì¸÷¸îŽ©n¥s—“½6K^Ÿx?öžZ*KŠü_òìm™ˆx{ŧŠj´’Lx¢üÒx¦Ø²†^ýJÐl ªª…"]ÇrœKÃð³;v|¦Ù|²ªò³d?&1ê'[VÐ÷C„™Ñ~eHóÅL!±eYsœ3ÅðNe97Ý-xóÁX³" ¿ç%޹ßT›+·æÎ™7'MÓN§“oÉÍ£&?87·Ï8j‘¶`MXµKA‡)²ZÓ=ŸµÜ1y ]Ë.—½mXõ ½V ¿L.ÐÓMq-hèà›ˆh[X¿îËï}½<êEoùûrTc$ý¢ø×¢ø@­æ»îdQ|´Ýþh·{¹ïo |œýR™ .#~h`L½Ç”•ÎÃÎ›Š·ÿsÿíô«ª|ÿ«×ÞgU)Ïí´‚LJxÚ”{WBžoìq äæÂeKý33c(*Àª¨Š[œL0…Wÿ^»_8ÁÙ~‰E€Ð/áÐ 8ä˳«`¡,XPUUí¼Úä-“Þ‘^ÇwÞyç]wÝ¥¸Ùäç&£s"Œà_ˆ¬@žŽw1z½f°Ä°³§ÜS4Î=‹ÊTîF×Ýáªþižç½­=wƒ›í›¹m×ïøzÈfGdÙ»2ï:¯ud«,K÷¹n碎û{7º**z'‚˜å’:e®? c½¤}Ëòy~­173ì8ÿ†B–hÀ–…d˜J§oAh™õM„´áÁn>‡ˆÁY–…UuJž/¹Üq¶$´†@Øe7°¶ó£ õ€#¡"I?–Ö?_o4«W¯~ãßøò—¿|áÂ…Æÿs~üÁ:¸d‹/^°`A½^g$ï8Š¢¹sç.Z´¨ÙlB%„Æé-E«LaË^v Á4ëlL)’Àq¿oqk—ESÈ4q¨áî¸3i‰0bG±I0µçy‡—å1yþÉ(‚`Á˜ç]†'&ÉÞ$†6È6|¬š w§¥FžçIžôOîöM÷Uy~þ~aë”Vë”Öåÿ[o'å[ÖäýíÿÁ§EÑï÷qRc‹ÂUÁ¢ÕZ [¬4“0îÊ¢à e1)ô A• ç¯F)+´c0[‡@–EÁRçYB̲€Ôî_é'KŠW´÷—•ñ¹±¬w‡Ë²’­Vkþüù .œ?þ‚ -Z´hÑ¢yóæÁh\IhC³ú›Žãäçäñ¹q÷œn±|ÚÙz #=<•Mâ>êc–.]úâ¿xùòå"ܸÏv½}<¼£øü¸ñæ†wåT»Hî—Æ›Å!E¾xF;' ùsçꆹÚîb˜t߆Iÿ–!®cgEè<±¬».øs³ì~Ï»^É¢Að™8~ß .D2 w «—¼«×O‡&º² ó˰$í¤ÓéìØ±cll¬ÓéLé‡/žšôœJ’dûöíív¢°à\éYÓï÷7nÜÇñÐÐ~8N\fѤ3û´##ænŠ%íŒÑ0Ž0ä‹k åæ*,6;Bî ¸g1n‚¸LUb*ÂÒðc®{¾ï¹ßÿH£±5I\×= ª^Ÿeç×j]o€"Cà ±\3JpÑ»H%"í%Yq^öóÊmµZš%,ÎÓCJß{±).ð¼_{˜0×ÀƒÔ^>8t0Z­ål€â-àær1…fâªá‚JRBLSÏ# izyxeàC¼™ët ôDÏ¢ ƒç†)cܦ1¦,Êè–(ÿSîþÈ-òB2 {a†y0 ›Í&>mΜ9sçÎÕÁÊQµˆ æÎ;66666¦«š§ Ê²,_] ‹úYu³Ý8…S–¥ÿßYíŒ}f¬õ‘ÖÔÖˆÝbn‘»¹Wx<òˆî#cLQ+Ê~éåS@qº_ꎰ^¯ï»ï¾išÞ{ï½eYº÷¹ÅÓ&ܺIÙc-¨(qʸHä³iúÁF£ëy¾1qY^g'ÉÑ"·ø~F¦ÚÙÆ{AF¢SÌ àÃ1V‹?E,÷n·Ûh4ôß&IR3æ]eù€ïÿ6\Ç1ÆüÕ˜n]ÔïªVë ^"«»ê[`ËÔÝ!gçÿ°ör‰ÎŒzWôFOýùÏ~×]wmß¾ý‰'žÈó¼ÿÕ~tx”IfÕªCCCNr ʧiúÔSO ãAÔ` èI¡È  ^¸%£3PCwùÏxCË A@¾Ðqa5¼àp=Š0uH™Tš^œ@»¾ÿaßÿP·ûuÏ›[o(Š…¡Ç³Ð¤¤e¦¿Î(’SÒxo­]õ¯ùûR÷M^µq¿ýžñŒg ]wÝ1Ãc§Ìñ¯ô°B?Fƒ"繺˜²¡62z~§ˆÇˆ¸\¤¢ªF5©_ ¹3 œ±þ8W ) ÿE$Ó‚'¦^0IÕ}A˜äB`8 ì±õÀT;ΰã9žïûííV«Å¦všƒ«y¥> `GQ´råÊíÛ·ÇqÌÆU½*VÎ:G†ÄõÜ(ŒÒ4MÇRÙ$e·Œ÷ŠÝÇ] ö>ß+,ånét:ÝnwŠÌöÆÔÀ÷ö*wàp*Ót¼/}þajôEÉÅtk>CW§õû? ‚IÇqD¢(êv»ý²¼ÖóÎLÓ? ”x¤p7°FÖ€ 2ñùƒ`ÌA¼ÐÕUÕ(Š¿†a)R C%5lHÓõÆU–¿ o}5Hz²Wf^乎kîÚ½wÏ=÷<ýôÓ³,{ä‘G<ðÀ]ëê7mÚtõÕWËLY_YeYJ%Õ²*{yÖYß}xtÛ¶mýõÓ·¥æ/Æ¿ÓçbU³¦0 7aaCÀ쎖ÇË¡lQf:A­áýrÑC›ÝØIŸ‡HØ{Ë]Èx˜g X6‘é Ö`Ÿeø4|©ë>fÌë³ly–}©ÕÊgö]’QÙX}x”S³U‹¦°…=ÊôÔôö½Í ךCº’NN~xݺ÷¿#]ãTõÊé9r¿°v;+Þã¬ç{Ôj@k}Gál•ÄG6""Ïè0)œÙ+àtqÓCZŒòü³Îd–´¡# Y9W<r¹-‡°e¹9sæÌ™3gÞ¼yyžOLL]\¸pásŸûÜZ­¶nÝ:EuÇÙú–­cÿ<6vÈX¹©l%-ÕåS]8€ùÒ<=%>9޳råÊ#Ž8¢ÕjŽŽÆC±Ybòýs÷öH^eGdž…w÷To/=/•† œ¡H‡¸ù¹ÿg¿(Š‘‘Øä¯Ë-NíîóéٞDzài¶5AðÊ<_^–kG‘´çÅk²ì2ßÀ˜Âa H”¢kȽÖ£ÒØÌ›gÖÌHä"'–å]"É %öÞ,Ûäy¿ò}vŸ:&OÞœx‹=Y$ÕÂ*~~¼±½ñ…òÂ]‹Wœ¦é£>zýõ×ïòŒ5XÔð¹ŒsßMÜà[Aù¼29-IV%eYºw¸Îç÷ó>Rº½6 SuˆÓ‘ü!q+IL—;è4LpÙI·’Ùð5EÕ[(Äx®çy­V æŒ/ƒqÄ¥&(”ÔëõrðƒóŽ'Š0NoÍ$‚—¥åÑ#"? ÃAÐø(#ÜêãÕ,¶%€¼Šbº½ ¨„»JeYÊCâÜî”AyÙ…Ù)O­=÷÷—Æ|`MñÎ,(O*ý_ø…™atB•{€øƒlQ ¬ˆºê;ÅcÔª+ èÂú¨yì_ÈLÏšß ºYæú½ˆ:láºz¼›=gÒÉž‘õ~Þ›Â!/Ü-®ó Ù¹ÞéŸÓ/>_pßÞ“¿&¯ýßš¾„´îP§òNA¢ã8Î×=ï­izœÈ/E–;ΩEqI>Y–1ÔY &—’è rÇH ¬c¤w»ªª5ž×-ŠOÇñ<¯(ŠsûýÿuÝ›=ÏÌÄ'¦tÙ/œCgÓXÓÈâ¬(ŠƒŽ:hþ²ùÉE”îÖvNÔÁ{ÂH0^¿1&y*‰F#ù³­ ,ʲ[VÝŠ­)€}qÞÒù‡³:»ÁóJB$×]@xrËZ—£’Ó0Ï–)÷×J„ñ€F2 is’e Cá„åëÁÊkýe䉀þx7âyx¦&Š'„0z MnB×?õOÆÅ½Óu[®üPÆu~ÒÎÃS IDATéÈg<¯µÕ|ý€äœžŸl›²¢A±Š0“ˆ8QËhŠŒ;xÝ쉔uÛPÛ)ëmyR„%A‘,c^2úH™'¢2þZ@ð¢Òwªý6¬Ë‚H£5K2ã^0ÿ¤)N³Ù\ºti­V‹ãX_z«ÕR6fʲk6› ,Ø~ÀölßìÀϘåRJš¦áa²(YÿÉõû~jß(Š–.]ºyóf}•©Ê^Y4‹¬Ÿ=þøãwÜqÇ}÷Ý7<<\8Efrƃ§/·‹÷Û©|+ß–»¡ëùÓ´Çqæ¾iîØïÆœëœðû¡çyÅ~Ew‘ç<î𪒆ñ/¸–€GŽp;‘eß0æ½y~LYž”eçù”NYúÍú`ù?¡ÆÕÙÒ³Ñó¡^¯ëëÖ84Ûo·ªª{çËAð…NçIǹÍqnö¼r0R†© ²,Å—re)ÛĻɋ%ÖÛ9´5·V«ÍŸ?_ÝNÍNxs˜–¹_qï»ï¾G}tll¬×ë•«Jy‰ÔßUϪlFf ¦©*·ªŠ ÝPv•­Òzy+EÞ¿ /"Þ#^óåÍ<Ïp†­$PQÈ"·@þ:Œ†ó¯úþG’ä¬(ê‰È (‡…¿ ¶.ÅÒÂ’f¦ ËßY$OýLTÉПÝàºWºîJ‘›}ŸIL@¹‹¢È÷ÊÓ—¦ÑÛ£¢*F«Õêt:®ëî+û¾P^x•\u–œµ;äì†4wÑqpÔëõv»=>>g=FÒÙ­ôäyM£*·šºì cMÆ€ÇÂöÉš¨êÅp_‡>–7·ÈþúLóÇâÆ¤!·1°O )f! XfƬN†‡ ‘ä郞¸tC±Ï!Îúq‘,UÂÃüØÜ—Òÿzâ%ÕÞNôÉ”žWaàžï>¹Ã¹1*ßÇ—Á¶„®ʇé._3P r¥oV“SÆú ËEˆLH#@Oà¢å#ú0Ak•:,ÖÇã´è2äËâF¬| Æy£Ñ˜3gŽ:EMY* œß¢(RùµåË—/}øawÑ¢¥«–n:xÓ‘Ÿ;rS¾‰å Òmië¶ÖèËGý¯û:ŽEÑøø¸ëºÎƒNö¬¬^ôó£###eY¦§¦åò2¸&Ðü d nŒq1ÁèñTŠsƒ[¿®>„Œ ñBdb* šOº°¡$¶$Þìêõ<Ï ywÂKž·V¡Ë2?ÖÌœþ=XÖÑàùÄ}ax¹ c"˜ùŽ™êÎ;wåÊ•›6mÚ-ë¹ó«fÐsCóÆœùZª—lÜËy¥e‚%Èœ%`&ˆULzf§Bh^Y2\Xà‡å¼0…ƒØ´ÆË‘Œ ¬ÐIFxN%®Û˜³À>Ä{ð¸vƒTŒ ”1oh,GYÃE7!„D ßɬqëG|ÿ•q\ûJM3ýÉÉɲ*—•åpUõf†Lõ²Ô"ø˜›=ó¤½7LN°)î‘Mnø´ä¢Šý/ÐEc§j¤á(—ñ*!Á èpBö²¬}ÉG¶^3{4èoÖj5¼5¸é›r]wñâÅÿôOÿt@Q¬yøS{Þ^ÿåÙîÐò¡þã†8Ž÷½`ßyÙ¼iÞ¼TÆ1( Z­VÇI’a¦{¦ßžPD¤þËzq}áÝéN‚íüÐòr¢c!Kˆ#X“ XlúoÁ¯cAn®°:"–„wq` €ÙÏt{`³žÅ®á>"óèp1¼8µJÖÏ,L!Ú±±±Ç|rrr·_ÎN&B ÙΊOЇªè epF`b‹‡E°¦ÙÖ ŽIúᨠX3 ò8pY{Êy˜Wç¢ajyQn9<â7±Ï1_ÆmÌáìÆŠ·& ‘#ÚqŽ©íÐ0 ëõºBÒjêÌ:+À zì(7Y"…{­ð´Œ†#KB |ßGç?ëõ¯w»m4F»]©ª£ãx…1ÿ†…ëÖÃUÀe¦Õ4V¬4Æ‹‹rEÙÿ\_DÄHû}ídcâxÐAÐçV«ÕÀiûO !|¯RÞ•»ÁÝ#$Ñz›X–P4«PªšD€d5€̓´:ÒëõôªTÝ@'(õc›Í¦ÎTÂîOçœ\×Ýc=–²ì·«¾ú/¾à™¼æ“/þÉŸ®øåxl®9àºó®+ž,–|qIX…íyíxnìOúº5”Œ ‚eYúùÑc‘¹Ó8®ãº®LŠÉL)Ó´c`P–#84¿ažÄÚEêóÄDGn âÁbñèâä–o1‚Þ•JòCž½±;t-éëc\-=|”LÁöó¬¾È˜§…L“'3ÎNrFâ]îeY6<<¬÷ø û¬ ¿û­oP¾àß]ú—û…^x̵Ÿyã[ÿíÕ{¿è‚=ðŒFNYð•cõ±á#†W¼gEN±ÝšÍf³ÙžNóÇÄñœ¢,˜Æ¢')Ãbo2ªÌ oÐÞ`ÛöÙä¡.Á'„Ûcn<‰5›éÉÅÃäÌÿ•møÖ¬Cƒ‘OÖñ/TUU••yÌ”/+³2ÿ×¾bŒ¹ÅܲX,‡î9;“´Æº„PÏêR‚ ÑhŒó¸;ð7¾¬}‹RÆb+à×0ÓŽ–²öÉqæ²Ñ€ÔËŒãì`¤ˆ3 Ä!Kx”Á@`ÍØÒÌêÆÁÄ©š¡#Hp@½ í@Ðñ‚gš<*„VSEðµd‚8¿V–é}XäÇ99Ž'ŒùlxïÍñ˲¬ÕjÍfsllLiÙPX@ñ7-zbÜx·x¥3µÏïiôŽëeÇfòðô ÆE1‹®G D¬ xF€9Éq.÷ÌIaªtõõ¿öz= ,d­–T>›Ë-•BÙl6áÆ­?µZ­Ýn?ó™Ï<¸ÓyÓ£/Žæ•ëöèNœôš£“g›Vkõ{¾qÙ÷ßû•ç=´`¿OlŸxÌlÛ·eI6çš9š14 }2­VKgòuÂÊoP×'ÛðÐnÄÂZ­N›)×÷(e,7#HñgjÔQ?i”–¨Œ…ðζøãù'èØž/ŽÝ1ÓÍrŒØO}õ_ÜÜËÍ Lú‰TŒTRm}ÆÖ½d¯3åÌÝÀÚÎ9èXð¸"泬ßaIî»äEl`b;cÉêzš¼h2_™§& ¿ÿÌv4áâ¢)hZ²Ž$²~ðy4* Ãî…z B¬Åœ™Tðâpô #mÑŸØuK–᪠tÉù8šLÂÃ#>€õЄÐ' ¼,ä­÷z^îy]×PÒqvDQtðÁ/]ºôÖ[oFâÉʪzmýCúAÔÖÖ ·Póà©sð÷^úîTž+å}3•f+oâAÁ‹oÙ²­Dã ÍmˆJXFyP ã@®ÉÐå2 ´u9*x£‡¾¢—:ï5þüeË–a™Õëõf³9oÞ¼+V¬Zµêÿš—ýê%‡â±ãš‰¹åYÕ³’41[¶¼ ;ä£×wÞ~Ƶ£¤³°s轇.[¿Ì›ðâƒã(ŠT€@±Á~¿¯P,Ú,Ü´L}Ú<„„'ß hŠ£¥O€Ê¢ElÀãB¨Ðf*FÐÞ‡¢.&=¡V a•a10z8¨X…èH2Ó ¤V´²¦zÙJ"âßæ»w¸éai)¥ˆ¼ùÈ7¶Ça»{9;“±c.=ÙV]Û9x‹qc–B^ì‰ú©5ŒðÊÀ`ÆÒ'ö}¿ ªÎ›:ùÛòæ¿7 NY”ñûâÉL6NoÈ“S46nÞ°‹Ö"þ$‰³ÊqC×qg‹#"¤þ?ìv0'ÄSë SÌn¨²œólLÉ©U~¡í´ncÅÜÁå¶Žâ‚çìõz úagfY8žZúìN=ž„?'''•–ʪ‹hD#ÚÛëòJF§>¼Ñh$I’$‰¿Ã/j…¿ÈW,ÖƒÞ ,Ï„ar-[…6íQu)ÄÏlinh©D›zÐ…Ôkˆã˜…¢ÁGI­À]­VÓ.”J,+zþüùsæÌi4µZmΜ9Z¦,]ºtîܹÛþ§ßã½ãgæ£å""µuëüË//÷Ùçs¯Yû¥e¿wD——-›»lÿû—¯,'''·lÙ²cÇŽmÛ¶©,›Î)Ù¡Ûíê+ÀjÇs•Fccã(LqLÃNMw.ć@<ӗ¢Úl .aÖ’ò|bRÏÌrOQc Üá|@yª‹™QqXYëï°F;çpÀ¾cAEïÖ©ìÙL|ÿºû׸vÛŸ·=üÈÃI’t:N§£ªÞZB ŽŽêãÕºJD4 ±| RèH!ûá],äïx ¯k†]«ùÉp¥³õáhƒÃ‰ˆªÀi¿ßç#;HMG¢¹̘2˜*+f+hXÚð»úÏÌ*ç®»¤Ó‘×½n×b`ÚËØ@"cŒyŽÈ’8¾i ¯e±ÑäZô–Bᾑ1&ymâÿÂטÑn·Ó4ív»Né7åkK÷7®®*H."¡l¥4§âYEv\æu½èÜÈtM–eÅk‹jUÿkìÏ×Ôž-óí«NЧ®cÈ [½"@¨ú¹c©³ §c¾86’5ÄÊXpKP3ôɳˑ> m‡hvÉu8èÙê”)IÆ®F!‹>feå>eùp911¡¯Ã“íŸUãU¹n†Ý/#ÈY ýe‚¢^mE .ܶmÓ¢`Ƀ\úè ZãÉ8Ô¸7®9“Þ,uz%Ào'''ÑbÔjC¿Z™Ò4˜˜˜˜˜xAõ‚o-üÖqãV}ék¿ÿï™sSÕÞìXqÍëšó§9›ïݼvÎÚ±‰±ywÌЇ”R¡+o:5¢å-‚¨…F \øãq"bi•ê£Ã-3­¶ £££Ø³ûÿ\(sÏŸg0{Ģ»2l‡Ãu «à0éVÛëÃÿ²¿ b¨[äì]—â’AÎ:K}T®»n×*t€Õ2 ÊêaXHEsF¯÷ü$yá@7 2k?s†ÂòMànª÷É×襙û;×ó¼½÷ÞûïxÇQGÕjµª¼òÖxùKrîŽ@I=Oûg˲¢*ܯ¸ÒPН 꿪ç¯ÊY ‰Ù3Z’#CõÃF¥A‚±Ô¦v°=ݬ'–±A[Ë>°Ô<@@6ªÿÜSÀ&p¦@ŠŠg…œ] tÚq‚¸×¨£¥C¸1_Ê%–Ä”ÔЪÜôŒÙlpbêôŸ~&cú|Ü ¿E±yhhèî»ïâSF‹æÙskÓ¦Z8B ±™Y-Ü…†ÏoÁþ•¨ç4rlÞ¼yíÚµÇßsüGÌG>¼ê’ƒO½d¿­í·õ£ÞpÉúMëçß?ÿG'þèñç=þŒ[ž¿g¦` Ÿód[Y–£££###H„bC!µG•5¸±ç*ÉÀú°íœ9sÀýa. ± P”ëí°†!-800“ô ~—)ËNžï›¾S¼VÝbÀ±R`:g†Iî¬Ô]¿Êiµäßÿ]Î?_|_Ž>zW™ËAž‹uù}! Dx–UÕÎ;£¨¹0IrcîìvxÒšàôGÙ2ZhëdTŠÁ–~¿¯àÉÔA/–ò KÁ,1åeí-5ÏóÚíöÂ… ·oß>>>n6›ðçaï¬^ø•Œ ѼaòDxRÝ¢zcDDRð‹€ÅqE±|ÎˬdM3-'Sî£êë@äÖ4¤"0TËÕ.¡SÅczxBBàlG4þRú_è›wšè£Q^åeU&'ÁAã3Ò)a®…9>´¸-„‡f¬¶¶žkº }ãÐ×cNëE¹/¥ß…žG¿ßÃC] AÜÒ’E`± `À`1!)#œqÀy˜¥2;kä†ð™»¥_411.Üöp<á8Žªë3Ë2Õ¤Áípa¡_4>>¾~ýú8Ž/^\źuëüq $LkÖÀœ€{€0}‚àÇœOËÀrâÓÙéeΉ ö‹>Võ.’Ìè›2Íh6ç V΄Ë6rGå, K@å\éâšÑUå7Žáî;²æ¡µ#`§òô¢èÏg?+«WË 'ìBíVsamGèIë»ßîûŽÈ^"z$"âÅò²ü-tÙl­¢ÁCìs¤]Y–yë½l}Ö»±W{W­|´,Š";'Ë_žï ¸Á œ—>€GɤD×FñÉqyU© ðN§( Y"É˒袧ÛsXå<‘z]÷*¢#/Q­X±bllìŒ-[îñ¼[}ÿ´~ÿeŽsó`wáÀé€p‚1rÌüÂÌ6ÉÈß‘òtÿ™Õ0e¦LKp'‰Ë&v1°ä`cq,gqÀl7‰[ã^1Óüx ±x+…Bdè`ãôM£Ä8嵃ÂS;Ìkg6ˆ¢ÞE– ã8I’(|EfÐ9޳qãÆ<Ï·lÙ¢8'ä™Q``EÓat‹kÀ© .8ê6žñ²¤»ypsi ¨¡LDþ÷7«I”³¨°ñ±L“c_nAA›@—«¾ Øï2:Í$l,E¼  ¬úÁ¤Ö‡ Á†A]àçÜÈ|zõrz=ùÆ7dõj9þø]k”1þî‹®³Žã\X–ŸŽã¤(ÖTU†{¤éiúÎz=ŸY'Y¬J\à¸gG,Žõ}¿;Ö5ÿk~ü͸zf%"‹ò5É;¹q zËLËÆ@$ËúYõpU¾´,Vý }UñsŸéÊÞRõ*g³Sz¥ ¤i #8œ¹(wÐÅam¶%æBÞ•å™Î½Žs½ë–UuqügšvËò à Lá óól^–}>«æT•TÁ%s·S=Z±w€õZ»³Õ‰f[Pá„_W‡3íà¤XUCÉÅßÂÝ`fåËÃÈó‘ƒPPU•cÌq"Ïë÷¿ÚhL Fy ±Ï#Sõ©*´ÅŽÕ-¡ÄÅÌgaê ÷µZM?&UµÃ–ɸ0]`’$é÷ûNG¡0HáiØÃêÒÛœ;w®ïûãããªka$4ô«£(ª×ëØ,‚"qHÅX£Hß&»o`‘ƒ%Ä8Ú$,º_D_k›`ÔŒŒ4Ìcô /ÔBnñX tÇbêàøèÓPw"XhãFØ÷ ׌ìJ•ñžv$é²”o~S,Ø…ê,K–UñeàÅ:­Ön·GFF’$9'.HÓºçM–åªêýµZ<àk2®Â==œ×–†´%ÚTc<+ë§×ÙlÚ0.D5 ­O¦›?wŽ›œ”w”UR‰H±QIåŸãn1`Pzðd¦˜ CÆ*$¬[ì>”)Už¿lݺuEqmBuñü(úx¿ßÊóÿ¡,^KI§ÕiU±¼h¾½Yí¨òëºï.ŠZY^†Ô&ØË,8¤ç–>û ðÜ(ó¦Ðaæ„É*[Ó5û¯MíÚZ~JnšÆó<çëNõxU™)ŽHL3CDÄWècW*8©±Èuüeöq¬o«l%9ˆÍ¬Z«Ç½š/ á:&føùð„)ÒS–8“Y&jålCŸp¨Vå"Êj’ KFìG=©ý@Þ—]|øJ4`[sOGÆÚ®óÃÒœŒøs*d;(Å«†¢0‚2Z èßp*4¾c.ëPFCXw”.Mà<3ш¼a_A— G‘pˆ Õ¡DXlžˆ¤¤+êmö=ïÒfóCU’Ü–çïH’Û\÷ ,ý›–iµ¸ržrZs[ÇwÜ 'œpï½÷^~ùåO<ñD9RÊ~K0Ù@æO3ºÄ|º †K´"YŠ2ú4ºÝ.þ“U!ñ«·ö3JI][·nEgB ‡pž]ÇÛ;Ž_”e…aì8ÁßûkYÞbÌ»z½ÿ C½ZEáÙ¥ }8 E¬ýÅ&FhºÀGY?3ËHV´àÐÂ1)œà+ã¹^¯««)3Ô1„´aýlÍÇõ×rôÓ è;vè@ °šd0­©/H³"ý-CÁFѶB;‹Ûª rAüYÿ“Þ2G)èY0Ó €$Ü7˜0b õ¢ZBüã^£¾Œë¢Qqq†ï@¨ãV°J„='ìôÈ׃‚ž© »CÎ?ÀmD ϨsÉëðå ägоb¥vÜ+.ˆˆånc‡r•iÑC,(‚Ù2˜cÕÛW´Ý!gg¢j(Qy“[oѲõäõDƒGX¸Äæ…‚a,q¶CGlÀ_ê^BÑÃ2ŽzIàÚr `óZ0d¶‚E@[ã"r|’ÜéºOЄ,inl"SûB“eÿ=À%,ûÔ)°¹ë¸rÓW¤£7Œ^wÝu<ðÀ¶mÛ¶lÙâ,t’ç%ѯ¢V«¥cxø³ÑvAD:N»ÝFo ŠmÚÎuž'R1ü¯«hrrrÇŽPâ`¤Ìå°ª›0ñý!·jV4D±z6h^‚öP8±Ù5!–#ûäv Ö ¶6 úf, Ô°g({XàšÁé°*½ ÛOAsÿ'ŒE$¸'®¬°;äü½~"?ù‚|ADºe<¬]ØóñÁ¦ÑÎç÷§û–•uá*¿ Û•a"™eÀîUð`#Óxsjœþ€Ó-/€ì akiÊ©Ûé˜$ÙSäUýþéõºÐœ ³°à²£ðˆëº™Èµ¾ïd’žnEQ˜Ø88Ùó3ùoyòÉ'·mÛ6U¬4¤\UÊ]2ÜV<v–Æ"w­0êïan›Y5ôÐP aL„§ðp pS Ãçø!':–TA~ rÐÌô:¡?«çMxÞ׺Ýßúþ|c®Š"wpñ\—ˆ )ÑiÌ€Õ7ž6c/Çë`¥ZF’5>©ÅîNÏJd z Û¶mËó¼ÙlÿAo¦Óéèr]?ADdûöícccã·~Y}žûA–ƒÙ´(ØIy„æð!fŠo™ ªóŽÀêBPç‘ ž@©‡Á)}lÞÇ«H/B£.V`­wÈá$‹zX±7¨»Üí^Ýuí†ß }ßOH&ož ߆kCÎ`v‡œ¿ÓÏòÀ©rêIrÒmr›ˆÜzà­/ýóKåj1?2’ˆÕÈaÙAkXË”¥P,§š€rše 9°Ì]뙨ù#vp˜Æ#Ô^šˆÊ|ßòlçšé˜4=0M/Œ¢ ÝþÖØØyÍæ&²“ÒËÓ¢ÑB!2|ž¤â¨Ò0éíßä›å&¾5.>ZdÝLDòwæÅü"x}P:¥zÀsÌ -¸Ö±æNðFØ•„©hQ¹è„¢B>ÓdáD©\,Ögc0MO(øî_-Šâ®4ýZ“çÿU«còAÏÆ2¨Æy¡¶7ÚßFïZÏ,¨ €Ïh* =àRñ„uèé†, ­;Ô¾zGqOLL¨ƒzHFCÉÍp%‡Üªþ}§ÓQ£# ý€S€li;8]Ⱥ0ãÉD ÀÏô!ë•LLL°›™–š4 |ažFtQ¾(÷A9F©ôµ¼æY+‹B‰?°#ŸU‰b¿À¥<„šx#ó”÷†õ½÷¯î7jVUå{¾ˆø·ùÞ7½Þozþý¢³Xû»ÿœ*§Þ.·O ÷¹µcjé·ÒìO™»nZ4Â"œ`M`;abÚª0,é{¶âPŒX›"@ü¡ùˆ3Ž•]t'ð©:›.ÌL$tÔÁãÂ/0—‰µÙ-êØ$Ù¿(¾4gN(RŹQtf’üÈ÷"Ú(ƒ‡úX ‹x(Ô1[·à}Û««ž\¤sRÇu¢K"g­SùÓ`™˜ý…oˆ·ëÃA2Æ0ˆÑúÖ3xøÊÄÄ«~…ö-Ð…ª<85âŠ$€ë0Ô©6f%€„aø`U=èyf0e;Q~×h#Þ‘ÁL;—­Hð| Ú­M~y ä"EÐrŸ«=oðƒ¶ÊUm6›ÍfS6xà:®)å|ŽëâçAz½$ÎTXìü^ÿ\t¢`Å@‚.PhîŒrC7‚ŠYŸ’^0ò?ä¯Â€Óztgù¬˜=¼Œ-ZÇ‚»Y –»k(7Ñ*f©@ójãÝä•E mû<Ï=×óoðÓcÓèÑÓÀ¼`W 9WÉUo‘·XYU•ù¶INNç7ØÉŠ[sì^.4|‡·Žß·kx$0´D‘p‡†…–Yz‹åXt—Z:VòŽÎÔ,@=8¹ôëô=>M÷(Ë‹ DЭ¾ÿÇ9©ßÿ^£±™ÄÐE]ÏüV«íÉ,*ó‰éGÄ⸬ƒÎ'ˆl&†sÁÒ …¤#2+u²47½ MÏZ #s'×¥,nò±7Þ2§É|” [o6›Žã¨lJ%Õ­à©XÜ_¡ÅufçcÖféb&°G )÷6 ίGg–e£££–‚ hµZ WêXžçý~rrR)¿ì®‚9§ÙWÈÁ›gP>¢ñÃÚwJG´\Õù@Ÿ="ŠÒkŒ{BüÒ™»ˆg“ÈPEd¡iE†^¥¬{‡[÷ˆ³×™¾+­ŸQ7Ž©Õj‡vØÂ… oºé¦ÑÑQÿb¿÷‡^xMø4 Ø•BÎägÉYwÀó<ó'Óÿl• Ïè2ž‰@{Y …« Kβš9R®¯ƒ Ò ?ÕSÛ¢f1ȃ‚¹’¬‘¼™ŽµñàZˆ³¾œwøþ':ïTU8ê8ÏJÓ1ߟŒ"‡,5ñgú˳ÉK%ê~Ó3šUëQ²(Š0‹eÄfØ(:-Nª¥QÍzï\+ —C£ˆ ¢ñÐn–KšÛ Äqï]f / ™ £“ÄCB`ô¢Ç ]–c•XÜ/ãÀ\1ÖÇȤekMMb¨%¨ˆèì§^!²Ÿ0 u xxx£Ti@’æoAaŒYaúõ8æBeØðì$­R@È ÐŒáÀ†ßš5GÜ’1 e–ZŽœµ` ë¶Ò~à¬/Ň#öàÌæà †k;Ðæé °JPç yÏK%OŸ]›±Æ0hûÐÄØ¶ž àXŒ~dm–N Ðjذ3ùp¹.H²o pv!9BCÑ+ä™2–„‡šÀ\gÈÀ»ñ›‹âŒfóŠññ϶ÛŒ)ŠâÕiúl‘/7›å€€ 'oxÜ”^.@ÿrgèuꣃW>gàh·èÕ3åÚR=±Ðs˜*b{s‡¦( •â×bo„sLrÀÓÌ2)稖$‰"`§ ™iÀÅ`=¿½ruhÖ.‚žÅÆS‹ÅŒ`U Ød)`ââù@Ô÷ÎÊÓ¬«¤/Z§‚fäÁ/°ü5‚6‡…ZÐè¿ÅÃd‘'¦Yâ 0/O ºSØt@>QG2•FÈ-Ô2—c«M05ýbgè@Õ‹ƒ5Ø,H5X<Íp#¨œÔìäoKå«9Žò˜§‘XŸ€(]×õõÜg»Åï‹n·»fÍ×uUÂ?ÀwqØ'twÈù{ü¼L^ö;ùÝAr1"R¾¼ôÿàcÓêX€.,NŽ—‹\:g…80Án9…øÖ'Y\ü™!ÝêÌ¥¨X«Õ4„Ü«ÕqÿCï]#6!;¨rŽý^Ub’µIf’–÷‡ÕAœ}pL,9ób–udžzH¼)ð Z€bi{ ç¬ëºÅÒ¢ûÝ|¼~D]ŸóÄÕùÖ<¼0ô·ù8C-/"HÏóêõ:ÊŽcŒÔ"ßOgõ"~{Ü;¶W;­<”e™|4)ÞSxï÷œ‡þã¸g N®fX:lùÁÅ«ã8 .,Šbdd2T €ó’`x²ª4EV”ç2†Ôt¡‚e“÷r÷~·~ÝùœÃ¸š'ož˜Ø`Ì}ÏzÖ‹êuy÷»å¢‹äÇ?–7¼Av©îÎ.iÀp¢œ¸FÖ¬‘5—›Ë€+ ´%µÉŠñ ̓5€ªå³ ”60FŽïÂÇ&Ǿ¦tfý eÊæ.ø:®½tG¡£¹6R*äŒùàE«ª [ËÎÁ85ņ2ã0(#€ö° ƒˆËŠä­Iüº¸~j½ùŠfûض‰Lþ¯yyl‰m waÖöæ–B&[ˆêÁ¡¨ƒ?UU-)Ë—ÌDP˜‚¦h;~·:R !­6X ŸÑ|~ÕÖ½g6`½^ë/ÔBŸ@±^„^—®aˆ²à`šmT̨ŠKÖlE‰~ *ØúY–EpìÆ'ÄoŒÍ¦öú«ÿ½/ ³³ª²ÞçuTB €LeRA[fPÐVThÁEPQA¡‘©Q&drlEidT@% 0$$© U÷Þw~Ï÷cß»jÕ©þþ5ð„'õƒ'$U·Þáœ}ö^{íµf:3º9*-ÁHÆ£f”‰Um°õPc±¯zolY­Ï9Ý<-×)Gö‘§ðTë›­ö!íâÛ…~¯1!ÕtL1Ý‚zBä¦i–eœOð瀯`ÞŒz%ø3Ì2X:ÝP@DzºL†¯¼1æ°²LÃð†Ng2<áyî9¹îº5UÎËÊXCÔàñfG6›Sg•ÙY­?ô]‘ù‚1 8 £ÎØü˜ dì=À#,²ÉYÄwÀ&ÓG½0>ɪ\X˜äÆÀÅ,z­À7rCîeª.Cà «ª*^[X±Ñ ‘ LcÏó’$ùºy~fÞº¹…“%¸SŠÍ&»01Á4ò¼Oåù2Ï«¬½?Ž‘¨r³]HÞQc+òD~¤ÜíC/ }>'GÁ"q´2u1pÑF=ÏísÅ":ÜVawNÔ(¬. ú5;W‚™ÂA”üáX$‡y]¡çÄä”Á¼óEåWáƒ!ŸY–Ù¬ÝÆV¯¯üÇ|PêqÐ:NÏ<ÛÄ>{¨\UQ0 ž[`ëêèúH‰yúÛ«ª*VáMa½íýb’|ȲåÎ0œÃqHÓTÏ~ò8çôںݮ §hyÆs¤¦‘bªb‚rÌ?€¶2­ÁPÀ6Ä4:Û½àÂÚdFú}i·×ôr^¾/Œ’€Òªï•í#µ>àí¤ ;Xd,vÉ|$](Œì³ü"«¾Ã™8žÓªÅµa[b9jí¢>ó ^“5ªpôÄ@ÜäÊvOPä}!ìF™"#—=‹æ˜æà¦óƒÛ*‹ˆYl‚›‚òð’³ËÐZ2‡ÿƒK9‡ ÐIº¦¹(MÏ÷ýˢ耲|í»gÒó¿àži#_1&“&@àFщ‚óF¬ ÌÓ…¬qÇ“ù ï¡ns¼e•‘ì¸È`ržŽ¦BÈTîðór£‹‡á Í@^äÞ†žõ­ÿœßjµvÝu×(Ý®œ¾l¹¥¼ï}²ºé¼J€5¦ur5ÊD~6æ&36íô!a@Ò@عaÃ0Žcð…¼Ï'È}r Ä¢ ·¸ï;ZÀEQ´îºë†a¸téRH!0€.4$Ë,, ­]QäR€Ÿ[¶à²{I%ææ"VÕ·âø¦™]U·úƒ^‡~™êÛˆËØÐ÷Íó‡ácd¬?Õj}±(n´öŽ¡¶¦3PÅRÙ<ÛgúŽdðÊ€t ÃJSÉm&à„`$8ñüÖ8ñRdå7­Š0lÈ95˜`<Ê÷ë€T¼°Y¤Ë ŠÑ¼‘døÏùU]5›6ÙÂìæ›oN’dÅŠÆs¿njïýŒéOàò ¬ÔáG~JN¡à\‹¹Ó”;•É=Éøøø¤ßLbêíêàp³ 8#ÁR0‡ ¸ B6¼…µuŒøÃ…Ôµ™ ¡®©<ÎÕ6'¦àé(`+É´)é¢(. ‚÷ýá;ŽË†Êþû‹ˆ\{­|ðƒkªœ—é‹§4nr³j1 qEÌ…H÷XFˆ†š^±¬hKÎ8ºÓs„ÒÆ E°ÂgêÄ Î9\ƒnW–RM@÷OnÐô!æsG Ûý$¬xžq1ÆÈ¸·Õ{“išŠˆ?×/ßVÆ¿=Ï[ÏóŽ(Kßó"c.h·ßÐ4{ )×Ìüa)ÞÿxŒý²lDÂaA3(2|¿mmJ„ZnpÁ [¬VÞdûj~e¼¨°$Àfb â,Æh˜\çœ1úÒ³,sÜ @Œt$ݘ½‚ÑVg{­ €lš‹ ž2;€½YuÆÃÅžçE "ɥت(ŠbéÒ¥O?ýôøøxUUÍë[[ï±I>!6v8SpâÌB¢A4¨ékBÀ¡<¨=²¦2pKV­ç‘ÖEôA È'KŒƒ.…ª‚•~øLB ¿ZûIø~†ž¢DÕžUï½*®šVSEÕÄ'Ê}Êä²wÁY9¢6>Ç3—éX¥º­€‚„984’2ñû‰zËÚ¶­mÛì´lüGãã:üëXÕ›­íœ´ ¬B0!‘ua2Ï™eŒß ŽL`…€ ý$÷ñÁ™—º Õ€…±£À+"²ß~RUrÆò–·ÈG?*e)×\#«‰•Îjï ʬy¬'V‚üBóÌ{†•ˆa ͱÎPKñ|([þ±Ëìô©–èàCŒr^Ïs<œÉ¢®ÇÌ<£aÌûu:F/Ñäp<ªqãZ±=÷“Ñn ¯ýÎ6ë6Ýë»É¹‰×ójSÙÌläßG6‘æs½ÞEƼàyµµÇt:gÙ·“äê(ú|–=EéTÌÓ±je•_}›+=ïä ¸ (.ªª›æDk¿†O×µ/¢…,Ïýð'èŧiªI ·ÙU«qrêhóÔ_Ûoê¦zª ÐRD£… ÷™Ò4å).gÄX“Š• È#[5vŽ-ý²yºñŸõ¥‚ºj¸éð‘c‚®•œªÏ I$I¢×É= p½@¹ö‹¯²,͘‰?×3ëþûÖZ12r؈,›R+èÃiµZpÙ™®-„Ù8VÖAçZAoMcè|á IDATw½¢N.J¼ï{Ý »ÍF1¦ý­¶ÿŸe¨x ª€LãÄŽ¿aÞQ<†‚‰…š]a‡¢øÐíÀê‹ì^Ác¶Žg#r\~³z1܃„º–ë 2ôzrÉ%²õÖòž÷ˆˆ|üãröÙrÝuò¡­9r^úãZV,±-áü¥.¸­Ð¿âé–uaN«P#÷äC‚½a€íèna; ²'.÷5¦è$àÀÄsèƒôV1_=ÏЫÐì‰)ÿ2”³UÔNÏÊà˜|Ì0‚¹Æ„W‡ùI¹a=Ï‹/Œ½Ç¼M›ú ¢87IÞŸ¦³Ëò¦ ð<ï‹­ÖG{=kÌ7£¨;ìðCÇŒ·âôT N'´Û'õz™ç]ßj½ ’à··ó  ÎxVUÀÙ9ÅXoK“ïÛ9¶i5"Ò¬hê~^J)`µaìÉa<;£ì<¹É9xæKþžÜÌ1MÒTRÉ„”ãerebºSœRqGZ¦#gño}A8->Î4$P 1I˜–wtü´òkš&ŸÈ[ïm¡z6¾MÖ>°ÌÁ/r,øp/ŒÖjA 5ÀMØ5£;“|¶Â¦fàšIbzŠ@ƒŽË/<.Tù"éUpjr„C²g(Ô(Àr‘ý m¢,!gÐ M>0#x m°Ì.ºH6Ø@þõ_'·Êg>#çœ#?ú‘rÈš#ç¥%IƒÃä+V¯r @3¶gupÕ!˜ÝVÐå†hƒ;±† ˰㨃…"‹ç ³÷‡1„ùph?#â8ßÏÈD>ÝèEc‘[ÙB +2Õh¬½ÖY­ÁÎ1¶1M¿iÄZ¿®Ï¢ÿ°ÖÅÍQä‰$"WEÑ‚áÜ wìQ•Åcç¯~QœEó|ÿ¯¾ïMÅ€eX ä4f´óˆ®µÖ¬kÒÃRïA/üqØZÕjš&}n·´Ù³Öi-í$k”Ãxކ0 šŽ2BÛ È&¶8®ˆˆåW" EDª-«ê Uþ…<ùBÂÏ–Y \[êäËÊuB¦ `?22¬ým,`Dìȧ4_ ú¬Rît¸Må°;&Ttœž1RGJ´LýN8z°«)ËðDT¸Šâ.=Û¾ÁN/†ÎÀšcZ؉Ž®_ 5–6àitŒ p6ÉjFÚõDêÝOöôâbAí‹õè訬ZåFÃeËdë­×ôr^ò*‡MÀ¸‰ P) « ³±L•GćëÈG+Ž&š§£9¯@0Ÿ¬b¢ë‚êøB\Ð(žþ>sPS÷ª:ïì°|w9vÓØÒß,]~ñò¦ÓT^Å#AÓ±6ßuœ›ñÛaŠÃYrOŲ؅;ð9‘ïEÑ1y>Ò4—xÞ››f§²<£×» I#eUÀÜ(û8@ê-CèL_ÍŠ ¸¯i´Ó—ÈG2œÑ VKϮתem‰tG6Ùd“õ×_?ù{â]çÙ·[iIQЉ¡æ1×ÖHÀ±*XábðÒGm³Iÿ46Ï¥Ú¿h—Û–6± Ú É¹â²Ñc``Íiq¾ =V2+ËZ«Lø˜ÌÓ©|àq[-MÐÚÁØ£3Æ  o“û.¼ÑdªP)€x×±ÅFÖ›Ušv=wÅÐÈá ?«ϳwØ>ØÑB.Y˜%×O`€é…x5@8õÓ”AÀ D¨&ÐcMX^Ïòoÿ&¾/W^)Š–¥|õ«²Ë.òÎw®9r^ò#Çyålþ‘r$¿˜mıD#¾M`¬)¼Ön·UóÊÁ›F8f+h˜`éO¤¥Ì–ÁÖ> ÓÏ¢(5k˜Q<«\½±Zuɪj«ê5ï{Í:û­3óÔ™Ë/_ž~<­:Ì@hÖ8®Òàb¡ÙâúÚPX$(̬Àái À8¤rMÄññ##_)Š ëúº0ü`QéyKIX™Q˜ÞÀ2AŠ'X!oê0ýÔs {oYþ¬?} é¥í£ÛNgçw>ᄎ8âˆ7¼á q·?ÕîŸÓ×õ \?JE3ñú´¨¢H'y™ ¢—ÈØ»¦—”("¯W«7˜šôØgˆk RlLˆà¢¦,ÀýÅ0¦?TeùÆ<Ǩ™â®(XyCûJÓTÁ+T¥hœ8KpÕ0Š„]É6Ûz¢¨3 ­½X¥†ÙøY`;аì"̬JGC1te.± ºšŽŽˆóÛqŒñd5 Œ…"¥å a\› zfÍš5sæL=@ŽÐõ×ýJwÖÇgž7ª¿:Y’¬}ÐÚæ5ÆßÖy ± R«7×(˲ßï£4lµZÚæardT`*Œ8A6æ#}±Õ: ª.Šo…aªÇ¨ænPmaìK²`è‚艎÷ÂãDøA^ÁiÄØŽLs%ð}_Œø¾¿öÚkï¶Ûn;î¸ã.»ì²Å[h5ã&½)twY÷Ê0d /dîú­VK§5yEqGÝi–‰tzÜ ^ªÙ:²’õ§>T–﫪=‡mB[Æ©ƒ%Á~9p8Ô¨ Ã$sì]è§ñùÁOŒý§¹&à"•­Ø0í´Rø cdŒB  ì;Àø$švŽâχ10ÀZp¼/dªý§e,6Ȫ6úš:N§Ó7¹CBÉÁ|‘ã—•+åüóeãW# ‚Õ»—ƒ\ƒ…ñâ£(Zgu–-[¦ZÑÖÚâ EöÉÌã­òF>;Âh§{Ž*ډ܅L £ö”5¡æ€ÈÒ~hÀ8«5p›ªªÆÆÆôUóCK«¢(²²ä¦Dú22sdtt4Ïóñññº®Û?n÷é·iWiÅÃ%çqÉ<êJU?dRð„®Ü÷/ošVÓ<åyùÔiç€Å±ÍVrƒÐüN))m`Íã&>}ŠX'^‡#mp_ÿvsì&‰$·×ë=ùä“O<ñÄ¢E‹žþyeœ;“›UC©7v¢ڣqÇín’áÈË Ã3“‚ç…™ÞÆòÎD-JX]Æÿ^–ÈyQtxQApi a*›b7Á»Òé\ž˜eç*®É4;ƒn„Àmæ,èì¬: ‚%†µú¡ÌåÍÈ |ì¡iê˜b0‹9ßl«ãèç¢|g}ký&¯ÀFE½^/MSPXÁïàns _Ÿø„Ür‹ì½÷j´_ Œ5äJúñ†¢(ʲ̶mï=o‘7rúHÝÔv–]õ»UÁ‚䉔Âtx@iÔC,pòÝÌÒA,ãáaNÀQ3,Ë(‚øoéÑÑú`0‚³uÕùSgVgÖž{î¹óÎ;/^¼øºë®{þùç£G£U[¯j¤aK>$pm k(ÊMÅ üÚknð Âx'£R|¨¨¬ÄH÷O~rVRŽå‰I@ãæYd¬,®Œáͺ®ý9~ïg½ðÖp䌑º®óMóî­Ýè;Qp[`ÅÚÌšÔ8‰¿Ã–ž>8 4©®ëø³q÷]9Y~ýë_?üðÃý~Á‚EQd_Ï:Çv¬?IKL‡F#õ¨ØtöL0öí·óKòöÇÛ i ¶ßirl—è«KÑÈè°r.Ï­#¬CÍîcßß¿ªü0üi«Õ-ŠK“䤢˜(ˇ‡ÇrmTiN\cÛ:^Æ€j­æ"ŒêºBÅ.Ô…‹Âº®=ã‰H´ST}©*v+ü›}ÅRtÒBÓ+gþéÛt¼¾/`ßÂߌý ÃY-ŸXPc·+Mõûu2ËÑó=íÍlµÕV¯ýëgÏžÝétdªü³vYxƒáú1,0Çéß궇¬:ºVž &ÆSxå>e~T^¶vm5»6õnõø3ãáÃúÂÚ·>këò6æö€ÃšøÙDg÷Î ÍlL°40_1ù§óüØÜK=ï>ϻ݋î‹Lf´ë¦ý!‡ ÈaÆFêºözžïU»W‹X<ñèD]×é†i½aí?çËå6s¯¡Â‰rÖáMM÷¹ñ<Ï{Γ\Š]‹ð¡,±›Ø7NÔÇ"çÇöo‘Çã±(:14¦w„åÇ“h­CÍ×÷/Š™UuI§3gt´%²téÒ“Ãðœ<¿Ú÷ï¥ËŒ^½e-,”$âžê¹ˆÐ9]¸šG£´[®pœ.ÅT!°Ë·®©®pßy°Z‘a€äðàWÀãzmL.gö)â>(<ÎØ¸L5J‡ïŽCTa» Ž0ÒÖ_­—Š}„G§U²v¶T± ÒDÒ™üúÇ?dýõettÍ‘óró¤!&ÈÎÈñëºnvlÌ£&è<•bŒ îÌŽÆÜaÌ€d’$A-ÈÙ U¶7æƒëzÒ;F,ùì„TG¨MÈÍZ0tQø@÷ÿè÷·ë/{`ÙwÜ111±páÂgŸ}ÖSîZ¶în™Æ0ÑÄkmØ8ˆNš`‚ÁßHkòë®/Y¯9;)KvNdW©>[y³<[Ûø;qùñÒŠõþkp 3jäÀGŠ)M2‹ö•ø÷1â•TöÛtšàÁÀŽÙöíjǪػ¨¶«âócü8 û𼋈 ›–øöR›} “7KmjkmÕ^âÅ'Æ0E„Å[Ð'¦g¹…ù˜w`±AªÑõ’s’â#E¾Cn kŒy[Pïûùʲä£U5’çw/¹vLÄQ‡;e >žœ9ªišÍÒôOž×jµ¶Ýv[yà–-[öP¼1ÏïK´ÖP€ÌÆ”9î–±ÁDø<Œ¡-à{ØŒ¸/4ÿ® ›KÉPŽ™ ›ó¢µ†óP0~/¿2]ü a£1ˤ>Tb{ü°Ì$äC—õO1E‡°€Þ£Aî8%òhê ð=ü°üä'EròÉâykŽœ—¯—ÃÎÁ| Ièy^¾S=…½°ökW_±bE†ö6Û?¶Ÿt›"Ö3†™9w8uírk 5Ã/B’ºœqg¬Ö)ÕÙà™›ªªü›ýþ±ýô²ôÁ|â‰'z½ž–AýwôgÜ4ÃÔ†{Lyâ‰<Žk€õÙ߸¥~¢{Të-ä'äñ·âú­uôŽhÃåÎþéìg&MÓà– ½"µb£ #çÅ¡ ATÒx­P¼§h_ÞO’$Ùd“M–÷—/Ø{ÁŒ}g4MÓ½µÛœ×˜?™ðaúÇ4ÓYì7—zÞayÞ·öaž ¾˜¾Âoašd=hYÜE“•óãøð¢˜iíŠ,ëõzEQ|¬(úÆ\Ûj5Cä‹P#8Ïœ²< Oqi FÏoA*Ðó¼~¿Ï`.›Uýõíàî9Ĩ)5Kx°ŽŽÀ¡¼Þ¸×‚ŒD‹cÇ—{'eY–Љ-,ÍÅ88ø¨#ŽÚ|óÍÃ0lÝÛ²¡­ÞX™¶ù:o ]2~58–l£fÆ›o¾ùÄ¥#‡à:“a’>ã¨ý‹ûØ®œ™:Õ0£öèféïmß߆¿ ½'&mÄ€%²ç dÍXgZißCý‘Lp_°é/ü£¯«.zª½ØóDdy_Òé^×[ySŒ1”Ê\ŽJNîpà‰é{_iÌ%QôÖ+â¿üå©Ç;`|¼oÌÏÛmœ…h¡cœÈQ É«š±>à†Õd—]'Në?ˆ·Æ®<ê«âx8AëÇL»0qÀaÇpkw¤M{}¿ìž…zQÑi6¾â)i¾GœÂ§/Ì31à€ŽçYˆõ쑘U«äÄåÄ嵯•=öýö“SN‘,[Så¼|U‹.ó:Fo3XëMÔ4YÃl™f³Æ{Ö ›°j*ÆÜ@tfF— D…d`^‰ ŒO‚Œ]ÍŽ`¾1Œ†7ÆÎ9µdZgõb5²ßˆì.cß+þ þÚû®­úTl]ì¸|² h»Ýž={vš¦ccc<ÿ¬©º¢íŽf¢âþ`ï@Ùëõüe~3wRò•×mÖ*b„y¤Õ<‚Žþ¶ úØÃ‚Íq–¨.Ö¨ŒtQç—EÑJ ¾MøþQt\–02‚vFNó èÈœ@æS\¿'­ëÓÂðÌ¥K_†~Qü0‚!eŽC¶þ"}2 ÞéÍ2ùX±uÊ•@¡j=sœ<™­€Wg›úý>ØÌn`tšÿë˜?¡Àbwlaîí³F*ì-@ Rë€qxã@kõ·#,pYÆÉ%+&è¼²°¡Ø4 :üÍM3zÚirûí×ÁÝw—,“óΓ£Ž’™3×9/G¡ƒJ†cãü$ȯÌëjÿy_ÛºVÒÓàÆ@VŠJ4+ü2Õ­H=ä4tõƒÙ‰ Œ­2xZe6ÐÕøËô$ðåCjAý9j}x0©ÚHƒSžu¬Bc,Ïó(Š’$Ùpà —,Y¢k€ P@ž%¸ƒÇ<@”û—"²jÕª[o½U‡{D¤8°rµƒ–á>F±MÚ £þí}ï^¿ß÷<¯±ƒc¯{Lwî…s/^<‰Zш‰qTžža‚ãz˜.(äUêÈ2kÒCÈ1mDi2@‹Bû‚l*¬ßR:ËFDn:ÖìX–»TÕ)Ãïçt+“:ÿL'^$ }àŸNŒãÊâ’86ä¬ÃKî±¶,>–G,5”«2*®Ôñ9I†Æ.jME 4Ï`år&ß³v-ÏéKaoïŽ7¤ˆìl÷®ÏGKUžÀ$΂UìnàD!†7­2ìÆe–¢³­üv¦ãêΫë™ÛnëÚ²­·žÜ}·LL¬GΫXcé0V$D[–eøí°øJQœX €g”½«zuQûù¼¸7Èp*süÙ¶™ Ò.ždÃ`‡h„Z!±‹ówèñAäÚ9}‘±!€,Øîêe§iúøã¿øâ‹ø€×ñYœFËç‰ ½×†å‡pj SZ„W†ì¼€GÇ 9Ä ‘çyñ©ñÄ奈ø§øý«úÙÕ™ÿ°ßýGwÉ’%ú貓²èŒH¦ú—€§ëttسõusÑ í ¼&–áwQHë öÜaGt;2c.I’ªjGß÷·­ëóüÒ(ꑈ™sÁì*$K¬A Óïle ï¥A…jÌåQÄùŒ†¡áñøœâüƨŸøÀFÁn¤€ó<ïv»üHuMò8m»Ý1GHŽéþ:‚ < G¼VB¡àÄ}¶ý…¢þ‹[Cƒ­~±Ð*^5o@OŽ™ñPxˆÊ>:Ó¸BGÖÚ[ÂðÙÍ6“Ï~2.X W_-‡&l°X{ùHkͳa9KFÕÀyÓö‰bGÓ-S±„ !pÀ¯Á%Cƒ œ^§º rûMŸ’2/Pa@ƒÊ™¬Ò÷‚á)cF¹õŽƒèÏ©j ͸‘A^V\Åì*S%õ™sô@šóœ%A¨~’æpè2I³ÃišÆî²‹4œ|²|éK’eròÉrá…²ÖZkz9/ßy¦66Ö²æ¢(¢¢pQ8ó×3y]òçŽJ´vþ!¸‰“+BBа`u2Çî –ì ;a? ¸ò oЙ´äRõ_ð©xóƒ3ÍÒŸŽFº¢º™1ð¡'’Ñ™Ý0)ãÿ×:´•}/K¿œ†·…þí~k×–}›­ÞZ™ù¦ZQ1~Åš£·8 *ŠgŸ±ÁeAòä®ëz‹:ýZêßæ{{U]5Û7õu먖 M€@ѼRo\ïÀä4NÒu ß ©·xKóˆ"€l–6Ъ©.ÓŸ8‰vÊ£a†4Û©±H¥C½e€…i¸Z*ÉT-w&à : Ã©’é,ùœd™:öÌT ñèè*Î]&þd\ÿsí_b©¾PYc›±¦}NÛ <‹˜™Ç‡è‰ÎêAº«¡åe­5ÿ0­[õûêæm/~xoØùn§®kñ&³ud¯LືPY®çûç$‰ˆ|¸,ÿ£i¾O¡VI´(R™*†N/7áX~Xä°,›+Òò¼Ûià‘/FDNÔc|볎úí,GÆj=Ž}µ3^;ƒ30¶ÑS1×Ì*ë LyC’„§ËÃ8,lU^öŖdáQLa¤”ím˜ëÅY&ÿƒ•Ãìdš±±bðÄ ¥kb‰½þ ~Ëe+1¿T@±L6Bóÿ3ÜšBùÛk/És9äÕë¼yõk¨ÔèbÅì´³…ÌE0ÔÜ‡Ý X§`+—º]Y?F†^;”û:Ø ¼÷¸UÃ.["222¢ oÖ£ RvBäEŒ¸ƒ,ÌŠ"OädÂ_Ê©EÅø‚g5‚Ûƒða½wmëy^ðç \TšÈ´Z-­ 0É)'³ ð*5Ê€é4€û~š†Eƒ?a˜<¢ïíMYB/ò¦ID¾7Ò¾ªiÞ›¦ÇYûÝá}!½ÅJàœ ÈÑÿ`¿¯cò|‰çý*IŽ(Š¢ªîô}‡"Áz9ºJÁn@ÆÝA€WгaûTþbC .°x0 "lËI¶}â,CÀZÙâ¬( …‰0ø‚}> *{¦ÂŠÂ^V‡5Wš4•y±±…—Ø& ð=Ôz`² ƒÜÚÄ-ÄqW'(^¹{§WµOž·¹6Ž-n?óýêê½Öþ†ø‡ÊË€Y;@@´`´OPa Ââ ÑÉSxMëùÛóúøÚŠõ^ð:'uü•~ØqýúKñ˜ÉG{žç:Mì¸o8ˆÑl]L÷gLê(ÞÌœ tGXÄAÝYadRð‰:µÄQ²>ƒ´8>5L©äæ@9‡X¾|¹îàFت|Í‘óJ:ßu6…ùÄ“¿›•ùGóºSì1¢+#=?•ž$—%á“!AžÅ œ=*ö#dÅ¡ñ‚Ù·Ó¹8Q0Nt Ô5q„V'§vèwèNžˆ³ -Vêääyrìg¼2ÐѶ՘ˆtÞÁ¯‚ ò¼"Ïý©Rx| hb©èâ-ÀQˆµïy_ŽãodÙŒé‡á/”œBVzmšXè±ÍGÇÂŽgàÑ〃è–$Y/Ëþ5MX×Þªp@ž§"7ø¾™*uêhb”R—{܇ÃsŽã¸×ëaý„d»P×uóö&û÷,| lïÙnšÆn`óoçöÏ6¼< V@õé\‚J¢ññqFÖÝ+Ÿéø'ÈÐaßÁþ‡[zìg¡Q¬U|ƒ®"8Ü`V}N³°ëeªu,_$ïeNXYª±Ûí‚nÃËþUPå¬öÀ³`—²™nÓ4Ù»3óÓ:¦…“›·åûKÌsq4—¡ÄºXgpää¨ÑCDXçð`G$ûGÁ.œ£¬Tþ[éÿÄ‹[nyžû—øÕGª&˜âu†w„š{ Þ™ŒÆcÔkSMà {`c¢ƒ%¤ K„|ˆ ˆï˜FÀ&Bu l“}ÕGÏØ[’áh*.”E¸buñ„8«k€µW¸—#"²qP–¥¿Ì‹A=h¨Ìõj©Ã%¡ñͺë®;{öìgŸ}våÊ•þr¿öjY[x™% P% Õv†W+kµZÝn±2¬†ÀI¢šgZ{r¿ÿ#ߘ ¨÷AUJdÙÿ«+Œµ¶Ú êïÔ¯Ž®D$x!ýê¨]eƒtÒô…“eýd6ètH5,±ÌS¸xJpFøˆ‘$I€i°é=ž*wªÂôè\¾ƒP€A0¨¤ÿªŸÉ>fUUEGé'Òö´ýžoJÓ4§ßÄM~]ÞyoZ ƒy\ƒ‹6!X£Á9ÑhA¨ËNŸy2léà ˆLµ]áPÈò} NAßš»h?µvÿ¢ðD~†fª€μé20¬¿ÉÉB:,¯ Bžçe›eɯñ‚8˜7o^»Ý~ä‘Gò<÷óš×5V¬ØIŠ<#Ã@±`7Ç»'ÿ.ðÔYmfbþLu˜° "³gÏ.˲Ûí¢e8©T;d<3TÀ.˜¬à\ Î@L&Y•-sà Ã|³é2¯(˜ô:™Ü(vÀKìõzÊÚÀÂhš¦)ù;[Å0 ”k/ôá°P¹”Ç05STpUB:1l˜äÈ%¨˜:&{ໃ‹%õØrÕ¨ÛÐ:ÂÜô ' µó·>bïØÉš{÷¢Çþ^ºz½G}Æ:`.¬îØÚj~äll›5AŒž>¬ z½^ñ®¢Øªð?â'W%ƒ“c¾­ßRW[Vf¾yæ™g–,Y¢åˆÝÊÖU,HtÏÚfy(€*J‡e3AÇ霗„¦»ñ#øÁ°®HÓ?Åñ"÷„áqyž„ámÄ:Ÿ áØ§W5þùñÎA/õŒo‚ 0‹Mô±hüŒñjÓ*\‚M ÀÖÑ ª`£e ÜíÄ7s±i!f79SìoÍ ¾6£R$BFˆqH ,ÀÌ£9H!‹Ï­]ZÆ3žç)»oñâÅeYÆÄé©irWÂýh;:Ê(\€hì!’#X§Ds=ЦøŸR‹ž%Ètýè™Í±bÔ:xP‘a–}3Á%AIçÄG¦æ³¥¾h>z¡†9pÀû}\ìVw¶°‹-e¿Ø§ÿ'ô­ï“®¬ýFH X„ æ°×çtÕ(|?÷&AO`ž›2ËÇÇÇ­‚b(|à@Z¥3Ó»y›‘H@E¤Ü¹¬ö¬Ž~¶h=æóä÷Û4’Jëœ2ˆp¬rXpœJÖôr^¡#g[Z–»”ãßïÖk·ÛñÍqëòVq@1éü´‘BÊÍJkm¿ß_¾|ù€¹i-µÔó½k;<ì­ï½™*~ÌØ ‘v»}—1%M²¾Ñïÿ*~om–eݺ¾4ŠÞZ×; § õÓÎÎs.ÃŒ‚L5¯­ª*ýHÚúq+¨ÏóFFFfÍš¥pöœ«ç¬üðJñ%Žã¹sçb* £HpUÐá89ú¸Ü_uËÍá—Þ T[°aX>aÎñ»cª( â¡@Ädª¨ß}²+ƒVD»ÝÞwß}wÛm·N§Ã9($<ƒ¥ LEf<ŠG¸0o8ꜜÃ`4ŸµP0±N &Ô²Ïŵã¢Äó^h¶!:#[g¡R(50)€Å³1êȃ;ÎŒˆ¾Ù¦i‚;‚z‡Ú$“˜Ø€ˆµGíÿÑ·Õ¤‹³H°$œÑzœ—ŒRE„f F ø cQW¼œUúô½+ÆÅsǨ˜Q›ò`5®£ßx€zfhŸ XUUå›Êz×ú”ßÖOÿ°}Å¢ö®ß þùçžü]Ò“SÖ1‡ ™4ªL×,^sä¼_OÊ“ûåûu~ÖÙþÌíOùë)§l{н×V®š^__(ÐØO.Lê®»ÿÝm6mêyu³iÓýy7ß5¾3(Z1w‚ Ú8< ‡q-t9#F,з×msjYþ&IcE«‚ Xéû?Œ¢Åœªò} 8'Ë® óûýÑ!© 'P †×6·Íãͬ³Ö[o½·½ím{íµ×†~Ü+æ˜4Ôs  Œ±1)ƪÖ@œm·áW{¤œõ¬aÒÐZ;Gäâ<ߊD0–È–¬ú$u?£·Ï®(Ë2´1 d)d@Étdó¢iæÞΣ>úÄO¨2|³vŒM¦–ú6•þ§/Q[å 2€¥OIytBÒ>ˆbx°ƒÜÀn4â{›{2"ì2‰[Ã;Ź‹'ŒH„’ZknvÍ€â'6ì Šù$”¤š`ÖÃiÁbê쑪û[Q^ïŒCg¤×¥ùYy¹qYlT”o/Ç?.ïÞÉäLa–ªsÌx@R4`-+–óà­Ê…5§‰H¡tƒè,$O€Cjâ|¬‚_Àк®ReNO§D$LÂx^sÜ’â‘?ÆÿÓDãaøýÙ³?üyób7µÍhƒ6›Cìô§JÁ"[]ÝOÕX{¿¼?8ßúò­ßó÷|hßµZ­MîØäÔºôÁ¥U]eí ¹‰Ôâ}Á3³Lï;=]Ó#ÿ>R-­Œ1&0L=d’1ïa¢†Ì8$×d¨þÕXl ë¨NtEžÞjÖëå"æ§s­ýHQ\EË=oCÏ;,ÏÇù~mÌÇ‹âRß#óc¤ÿ“LªÆzÆ›˜˜hšfáÂ…‹-RRÓ4V¬ç{žxý~_q€ò\ª+˜ÀˆóY‘Ü¡· Em!yPqØïK?jƒº>ÂÚsZ­£Òôš ¸Ÿè^,ÜÀp<ûÞLgcæµsi‚™JíO·{çõ¢DÝn÷þûï‡djzV:º×¨5=$6a•<„EPr¡À­Ó!Ôôk^×äÛå{oßßçbïû_lþö@hŸ±ñ1ÓöXAƒYˆÜ4â~2{L°Ú×m“têM*ûkÄ”+Jï÷·0Ù/ƒû¨é‘ÅOWKã÷ä3‚º[·÷m7ooò/çV¬¿ØÙ}¤,ËÆkX¨¬½}gôýyÎ縓Áƒ5Žî»£=”‚¹¸w¹`—9ädIÌ‚’€êdß÷MU½½ªþèûA´fúœ×_úíø¦8XkÖ¬Í7ßÜZûõÇ?qÑ¢ÎurûáÝä?.=Y—&L_Ó «ë‘s½\ôuûukíèèh§ÓQÜ,üq˜ïŸÛ;¬ïùÌ ‚ È‚òßÊw½±C9ŒâÅ#`é„—–Ì###ý~Ÿ» œ‘1Ù”gÄAÿpZº®[ÖÞäy-k*ËÛâø~‘v]že¿‹¢¿ùkFMó±¢8ÇóºÃÔÓ“¶W7úõÞuÿ®~=^gY¦ lÇý}úÉo[Y/ò´g«ñ1‚~¿/4uèøˆ09‡Ý?™ß ½8®á »ÀV³ëúˆªº1Žó¼¯GÑGó¼÷ ·7„#ÄPÒB‡¯m7piÉÅ7bŒiV5þ}~uF^VW"R¾£¬w«“«g*´lfU c,Sm&P k«lð9óšâÀâ •ÕF_.è†þ·òï•¿nÝëÁÀ˜¸M«[­bº\út9mxšqƒÓðñSÆMf¼¾'"²±ØÝlð³ øK€‹¥2RdŒyþ 8/AAô·þl½»†d}ScÎ׌¶ Úø8`êÖ Ž… Ó5¬¡í6)hŽ(ŽãÞËæ& x°sƒ–˜-åúoð˜, ¬ísKJÕÌ\"ÏÁܹswß}w•nó¼¹fÒÛ› ÷ŒNVêSêÖ9/÷×rã§åÓ³·œý|ÇZ;66v×]wÝpà Ëï[Þÿ]ß[×k}§…6 LµOgøe»Ó€qÔøu;­µÖZï|ç;Ÿxâ‰{ ˆî¡ó# 7 Æ vK\lÌ‘EÑõýƒ‹âûqüßoÊòÌ,»0懡øwû~7ŽÏÊóc†&Îeû¾ÝM|ab$iÒ¦ßïë.˲÷öÞÈ/Fª²22¨Hx š…mö­ãGÂæ 5 éj2ºøqkíé½Þw“ä1ß÷Yaí‚à¸,[)òשpŠ£c† ø”Å¡ ³^”¡ðUy¥-ëúù¢xôÑG_|ñÅã^|ñf‘ß~>k|r%Êâkz9¯ì¥{ÛEÛ57‹f,ºý®Û/½ôÒ;ï¼sUk•lcšê±Šmàà˜ãcÑp—›¦éõzì„m\–åªU«î¾ûî  sÈ“’hóâóñ¯ÐFä1ˆ"çÅñ¾Uu¦µ¾ÇÔõÊUg7ÍQy~f«åd:l'#"3žÑýI7ýFj¶4fKSíZ­¼eeô`>‚<£I+ï@ÄSu±£³Å :êLå‚T‹ñ@ø·ûý‹ãøÃÆoÇcaxIŸ¦! ŸâÂ0Åò3œß¡˜‘õÖ[ïMozÓèè¨>pVÝvhKÑxÞ¶¾ÐJ>˜´>ÔjŸßŽîˆl1éßųºèîè‹Ccé_Ö>Ðæ kʉHÐñßup¾ÕWãK‚@Úíyóæë­wÚÈÈ™/–ó¾”'•,é¦Í?t‰µQ„%ÄqòÌ,y‰®!¸¶2Wê×Ôáa´ ¬Ì®çÿÁ—Lêyµ£&©&y¹ ¦•ôªÑê€'O(ëà‹z©a%0¯á¾Þ£Nÿzc^çÐNçN°<ÿýx¶K¦¯çŸj)qaç¨oÈT©ß÷[­–2bx¤“•èðA©ÓaZHWÒ æ©*$ˆRŒSÏ™Ap|Ó<‘$7Ó‹¢sãxŸ<ßi•—]Ú>ó»ošÎ}úé?ßzë÷Ü󻢸Ý^ñÁ"þn̸²·É(7]Ô“²Ökªœ—ûkGÙñn¹{›¿l³ôÚ¥ß:ø[óž™7ö–±î–Ýê¨Jî“àÈÀ¶¥5Ô¢ï.¼d Ø;Á¬˜4MçÏŸÏ-v°v¯pG‡?”SiU}1ŽË² ‡‰óâ0¼8>š¦WDÑ¢Ø@äð²¼8ŽŸ'¸\†&%LÄôºÞȾ#ÕŽUÿľˆø/øsß=·ª*ÅÐuCB³#ú™yæ½ »-˜Pø£MŠª™>÷‡Á·þTŸ™e~Þ7 ÚÔ˜CÒôkA X•-´hŽÏÀ*çÔ§1kÖ,çül!VϹ51´²“ˆ#ƒ ºJ ¦a’—ð4ÀŒŒ¤iÚívõ×%ÙçZïÇ6öâp­µÖzË[Þ2þüGÆÆ~áùNg‡a`ƒ$I¨Q˜— Q˜â"ÙØFH›­Mö³ÏgÁ×Eá¬Y³:ÎòåË›¦INKú·÷“[yÃibÆÓQé‚WÆFŸX0àãìdL®xžW~µœ±ç øÃVWUk:½Û{Þž“Š|Üw2 B7ßÃK—ŠBÎÓ€øcÃB¿YHwŽ4‡×Îÿòlí‡ó|, åûž1N'Ïó/ó•~ß<.¿“ýÜ¡á7Ö[¼ª˜/róî^=Ïz÷xurN E±«vîš#çø:JŽú'ù§óåüðw¡‹¿è#‹ìlëÍôLÛD_‹¼`ÒåÄ™êQ?]@Z×´uÂ4àbˆ ¸ R݇HEyƒSB=Æ@isæ0À/úkÓ$ApdY~ϘUÕo|ÿaß÷H®˜k2LT F7îâ{ãAØš¢$-¤ Ç#5Ð×ÒX¬²ÐŽ}ŽÓE`îœ3¥Á³åÈú¿‘$ͲȘ;|­ª:´inH’ÇªÊ §ýUO—a±éNúycí3ÝîO<±hÑ¢Ó´mí9qlíä‚䎳QPù9“ˆ†èð³*Ì )ñÎiqo»í¶Ûo¿ý/ù˧Ÿ~\3z&>àØ\ŠEqØå/ Q’§#™wé Äëì?²è¢HD:ÎìÙ³W®\©µ‘¾Ÿ•‡ÿKäq%óôc*ØÞ¼/ø—jòÇRœásËA›ÙCË1"A;à\Ôõ cž«ë,ËFFFæÌ™³téÒ¢(V³ö#ÆoKµSõåSå6ýu™åM³¤I.HÄcÌŒ3¬µÝn—Ç9å’¡–è«€'½kçËùGo}tzdZ×upUàÝæ•û•á•aøb¨æ1(eØÍ“•žYHJq G§D†j,¶Ïô*p|‘ç¦EOi€K šµ#‡|§µ? ‚Ó‹âcîª*93q<-ˆÄ31ñ÷è|²¡^6ƒÜàrJæ¿çyî*ó 9âŽ~Û*c.óý=Šbë¢8#ϯÃG†y€"BÎ!Íà J"ç·þ­Ì²,ƒKcPzå,ÈÓ» :½z=2ÕjLž…â^R~¿ÏW"™Œ]ÛºüXshžÏIÓ'Ÿ|r¯%K’ªºl¶_î_†?ZØ«ð€Q6VGÙá¸àà’ÊÍ`Úllllþüùƒ—%“DDýpj€†|:Š5Ðô{¦ƒÉüN¹U&"ÕUôÓhÖ¬Y{íµ×'>ñ‰}öÙgΜ9Aø×ûù9·ë¸Å5%NbXuè-«ëOïOÇÆÒw &4{tP ç OO$‹È&‰×"³uÓ¼C$˲ŋ÷ûý/äù߃à7­Vð@ž–¿ oº¥åßà{{­+[ hŒŽŽê„2kÅêm PÈ—kM•óÊ|í ;œýØÙûu÷Ëþ˜e’ùøí´›~#"y“ ibpûJÈ,>.ËR{rNñªâ ˆõˆª0ÑЦº¾/—X8G}Œ|>Mšnx&Š¢6Úh¯½öÚn»í¢(z衇úý¾iL)%SQ€K£«¯q™¥˜Ð¹¡/ Îù˜~r¼.G)æÕ@TA#Æ3£(Ê9·®¿œçyÓ<Ô4ÇWÕ_“äcTƒ±,ËìÎlR6;˜lL.[¶Œ‹0}§ŠãÕ³ÊÆš#çûj5­èš(¼:„ºŸ'žç{ÈCeª» ô9çƒGÈÝiT²Þ3–²~m*ò`bN2 ”ë}†À˜ ,Ìl¢«YôÕ»ÖÎ-ø]Cs'à MÄCûèµâlfF5ÃÍ KÕuÝÙ¾ªþ@ý0•ÊVBvÖ4ŸH#RO5(WmjæÝò+`O–ÅDñ§ Dp>˜¡¦õŸ«7¢ (XÜ]ÇB⤛ë`Ž}IƒY{?êŸy‡9®›~'Iê7VURÅÇÄf8ª+á•m•™ºÍïBïèHnD¤.jÿV¿9¤i4ÍýMY–ÞºžÝÇšUF–ˆƒG!”ë„,\*&‹\ʱ½ÀÌLµÑw§Å¢áz/XuÞÍ^o—ÞÂ{ÞqÇãããwÝu×’%Kš¦±ï²Þo')[z:Þ€(wôÏzþ͘1£×ëÑ ÝGÀð‚âZ› WvÊ‘©^,ʉÎnEsçÎí÷ûccc؃UÓ|)о’çÛó¼ïß¶®ƒaiÂîÈ䔆 CÇÈ™<íPÖ9¯ðmn:aX4€/Pâ8¼&ð,á]áLÞq~Ä €XRXÄŽœ0¤¥p:ýjGÕ B#Øÿ(•xž½\$š7h@ç–îÌs0×y°ðåE8ÆBaÇŠ}®,³¦ ÃðCÓI=Œù ±ŒSÉÌ àG„ïañG§ÛÁÜY`)[ÎØÓšâF4+LƒQÂt8¸z–©Â¦Á-ÿ[¿:´>{}뉯ˆ£ù‘zk„ðúˆ¼<0'öñ4D¹,"ò5‘OJóÚ&;0So±\DK"I&S1îŽÀ’Y³ø-¶ØbùòåO=õ·<™Í'3—Ê“Cül­µæ«&»+Çø-·Ür×]w­X±B@ûŸë·wk«𫪪ü¶Ÿ~%¬ð3ƒfYãØ'öz=5ÐÔ/Pg·u-¦‘„ ¢†vÜ™›`ŒIÓTÿŒíøýëaø^Ï»!Šª¡?ÏÁ1«ÕjeY†B9JžGž.¿æÈy¾81a^—±QµWð—³ °ƒ˜ùƒa¹*ØñŠˆ&§Šo°"‚Èt5>ŸÇ qLêN™ `X² ¹p0<ÖCcJ’F.°~1h‰³–ŸS*°ÐE×Qòˆ§Åž÷ÄÈÈ1EÑ«ªû‡“ €Y¸tÀX øoà ±Ä2šal7Âú¾H½acwTöÆ 35Gs%Çþž8KÐσ / &ˆ#èó!äû¾\5„yàCfƒ%SœÍxxDfŠpµÙ ³©ÚÑ…Q3·)6*‚0ÓPþ*MÓxád$Y 4x@4M³|ùr%àM™«%w%ˆD°Až!Óñ±ÆôŸ’s’‰'ÊóÊ¿^Q–¥}¯ÍË;çwÄš Z¤ŸM›]›‘³FtÊ*;/óŸõ['·˜çÐÉ„Ì/0áâ‰&N‡é0¬)€í¬ -0jXÍ;wÅŠxƒçéûÿm­ £ ºÅÐ%Ò_Ôëõ°¯Á^¶¬˜Å dõÿ V÷Ç1Lü_y„ø2¬Æ¦(%8àÐ 4úó¶ÂóGÁ¤Éë íŸeXZè éªxî¹ç¸Í†>«~Ô˜ãŽq]­·x(‡íB˜µÄ%ÎYÏi_g%I"E!ïz×ˬMÏ(™ºÊ>Ðà`NnB¶ÇÈôysâwõFJÂŒúÉpmÁ‡ë•(´Â\^¨æ`”¹¶nÇQåÀ–FI§±0—Д Ûð×L,ï™™Al²Ö«ë‚«þ73&&ÁD¦Y³í<3Üpl8m*aq?ß9ÚyQO#6®F$Õ”–c1®JQu¶æeÆô\èl:¤y´”xºSƒ,œýâLrÂóüÌŽã^®À(ÁÀÊŒ¢ß +å?qøcãÖ’a CGÀ[H‰CW ðàŸ…zLê3‰ã¸¿iß®mãû⪮â8ž={vžçÝnןïWýªÞ¾ž PèC·MCÀeÀV’‰ó†íÝÛÐò‘#\Ì7‘+VpC‹G‘xš˜™É$ fåèJyBìâ¸æÈ‘O”}÷•7¿YÎ9GfΔvzN0‘taiâ†èIDRt0¾§â ¡³¸ê„„`þ(•ÐÁtRFºÑKG‡ƒãWcB3­Ð¼¸Á´4 vè¦èõÃÈð"#Â(÷À¹lâ:ü ïû}c. ã‹b<ŠîƬ3úýŸ†á"fHÁbâ5¶±&§Æ˜v»­¡™/f0HBõàÔ‹«˜ÛoDÄŽXY³ÜÌ]wî±ÇkŒ¹æškž|òÉjUå5^=kRë"Tº¤8@žˆ« N)ùÇ@&F¼@_(0åAƽ‰ÔëÕý3ûƒQÇÓ£f~=i¤Ã4$j@3å‚e8J J‘¡O­†6è™M’¡@™nýWÕ_À·ÉTs6„E=90ïu2´:ÁFp„›'H.gA"'€ò”c›øþv»Í–-ôqÊ}&h?8L?ýY}­:, €°‹þ¶c™*"ÍFMvzfÆÍŒ½gˆˆ‰ÍÄmæVŸ›•“,E$! ¿ŽËS<m8Maçr ¼’¦)æ”цáI>PCåyÎî, É`ˆ…|ЧÄÂÓ@Œad¸í …‘ˆäëäv¦  ck¯´/¼û=³‡i¶hÌߦ¬7 èbNŸI›'šÎž+ÖZë{~S6~89S æ›6o„ Ó ÜY×µÔb¬qTz‰¨ÛA ‘QV™*?È’9 ›âàgò'¶¤£á„ó†qñ<58úUàÒöÊX3FÎ>[¾øE¹ë.yë[_êó†I eYþío«ªjùòåì(Ì ,ö9ÃèÜ´°){f`¤`úÏâ&©ÃÆØ×Ûò ÒÌ2É.‰žýÏ÷eWi~Ù4÷5L¥cu=‹AñL8R$ð›q€†s¨:ËR¡Bg:µLf×­€Ž2 '˼m4åäÜâ#NGT'Hýôá#ÚbØ…"™áêü¥žß\9ÌIuÒOô„˜8 )6ö¬Ä fŸË‚3‚à‘ L¢(ênÝÞ­][Ùý¬w­ÇŸŒ£K‘/CH2Ù¡6±LSg-H.ÅHS¦ë'¨Á%ýdÖšÉÄà;0yDÎxh1O°É÷“$H6Ûl³m·ÝöùÿÇÞwÇÛU–Y¿»ŸzûMR„&”"M„„¡)|€Š Ê 8(Š€(‚ƒ3Žˆ…ÆbBq@¥„6!‚”@Bbé7 7·œ¾Ï®ßϹë®û^¾ïO3#¹þ~übrî9ûìý¾ïó<ëYÏZ›6-\¸0÷'nã…Fî÷9ŽÁ¾ï—J%©x°[wÀ0Á´”P‡‚öíhC}8nþãÿØßß_­V_yå•J¥ÒœÜL‚ÄÛê)Ciô6T–2<‡=Ž5ÏjCZkJã°z:†¢À¸/”G£°öXØ[[Çq£ÑHÓ4Þ=Vye-²R#e†KÑðÜ(cî,Zƒ=ÄŸÏ2¦¢‚Å4ª´xtj¿k{÷zÙšîÎü FŸŒì×lEúÚœ#ÞI>ìvU(Ç·Rº/±lÛîîî®×ë"X"œrÆÄbŒN˜crÔ‚Ë‹£mÙp[†ôŒQÈù24ãT <7.MF¥•Õ»ÊÙêØN«–9sëy+<#ô¦xIßíTÒ(Ò]ÕÄ¡‰‰ñ –ä ®‡|)øw¡bc$¤A|)©°™À‚ÑW?¸ tb71y[ܘh‘„Ë‚|>ÿÑ~ôÔSO]½zõòåË·lÙÂÏüŽÁ83˜Œ Mw©êÂ0TK”q¢ï¯|rå–-[’$‘ÅŸš¡™]“M¼ŽŒÖÖX‹±RʼÞ4V³»Œ³Ž© ôãòäm…_‡oÇÃé5Õ\BÔX!A–ôfÛ…!gìO.÷·‰7J)ó=Ó¨j•¼™ µÊ‚4I&'‰“˜kM?ô¡€‚%z5VŽP7㉠ØOñófì“êµ{3Ù%Éܘœ%€ž·Ä  ’ãµ@iY*ÎG *²„ rÇq¦N*É ÄW¶ ÆpeYÕjUäiÁYkàq¿l6ë8N½^—ÏÅ…1¢¸ŽB„{Z¬˜Œ›Om”SÈépjàb¼‹çæÆ ²ÿ31LÊx:Ûk(¨êhØB"^8ÄÑÌ~;›i…Á·k£•»<'‡&ajü+­ÏNrÄs΋V?Úœ!ék‰if“ÄM‚ÍAh„ûí·ß>ûì³dÉ’¥K—Æå؈Œ´#µL :ŒŒž¡ÉÕ/ô®Û¶nݪ”j4pð KA±åõ»ï¾»mÛK–,âÙĉ»»»ß}÷]y½ìy[´—°€D ¾'¯¾ŒÌß]œ¡È|¡¤‚qÜI´Ó :ÈIä8N£Ñ€b)“Ë»I› ÷8’Ðÿ@Ï<°%B›©e‚äˆ,uâ8Nâ$Žã)S¦œp QmÚ´©\.+¥,ÓjúM+± ®&#–‚Vñ| TT@#™ù†g¹™¨êÄ_@Î/ß꫉Âpá¹Ùlʯ@°"À{ßbÇ¡êÒ2},E@a˜°¶¿aûOùæ©æ+¯¼²xñâáááZ­æº®“Ÿùz†K+|"‚"7–d„‹—ƒAX›¬Üʤ;©?[—·*žQ´JV†±ŠYZÍuÝæ§š–c¹Gº8rçåÒ}ÒúOëî…. ãϠꌗ mœ–k”E®!¥ÈpOàHßJ©$¯Äçî9Ûí§µ{ÿÝñ®÷ê×ÖUª,ËÊ}9gÚa‚Æ —± ‡ñê‘£Õh𰮸"í/¤ÌHZÉ]Úü˜6mÚìÙ³…lFj¦9J‘ù#[ ðÅ}ö}_®ÕEµf#$Ÿå ‡††XÜØ`’$CCCAÔj5á NãäïÑ HgG9‹²p¢ªÀ¤‘΋Ü#Uã|ìñ¹<«È C¨½À‡æéQæ °¹8£y¬ýaEŠG|D©$ËZn%‡&î·R©<òÈ#aÚ¶ìX›-³Ü*ÚøMÿØôädùòåÒQHÓ4<"´—ÛV¿&!hoÈåñP¢¡ü’RFºnÈ @âb6”™E—g!¤ Vtf‡o´=P©+À†ø©,iTWr?¡ÊÁGÌ«fê ^ö9^æÍó̳ÍðÀ0<3L’DÕ”µÄ²ï³íM¶2ßG)ªÔG"(IÞh˜jÐÔ=´Î+ã±H2‚® Ý'µn°â4Îçó™LÆ÷ýz½oˆÕJ:KnË]}‰åò#³DhGip®&Ãʽ=F\8´ƒÇÏ3 lª²#älÏŸQ³÷­@ÙNØœŒcͱÃkh¾)ï;M¦Ž¦4ŒQÐxKl ñÌX½¢6nÜ800Ðl6•­’ɉò”±Æˆ’¿‹ËN·ˆ0hìlÔæ×ÜG]ï^†áþaøßaö›Y÷u “gØÚ8!r1ð³Áz`^2ÆYØX…G µÉGЫpv`òÐ< ”A¿G)ÕÓÓÓh4J¥’FBCˆÒ¤ó$„¶M+繇ã­ç Ñ‘³rÖ5Ñ-Êã›P¸¡°â†ÉÜĺÐJÔȵGkös¶5 f‚>ÚÝòæ,A&˜À¶øuÁyŒæ"’9„üð¯ìÜÁ4 ¡âwemCü“¿‚tq+^뺫±60I’x÷zV›MŽ’$‰*‘³ÎAYL'µ¡ÿ¯HUcsj¬o:º@ñ@Œ“4x¢ùØÇ>6yòä§Ÿ~ºR©p-Å>îÜzádˆ]1¥jÎeÑmQÛPÓžÓp+@Qd¿#äl§/0Ò£CY†teœjÐû Cè…½«YûY+üYt 8¨·bÒ†¹>ÚWÚUU5M3¸406¹Ës±Šµ7”SL\E¢Îò‚æüföȬçyòAÁ;5ߪ>RuÎůɽhl6¤¢|(°^^Æ J'PßJ’¤^¯súŒÍ  °R5‡wÐÑ}t IDATˆ2¥$d‡ÿQ‹ mæ/çüúøÖÓ^Ìz‹wQEÉ÷âIÌd]baŻǕÇ*iš¡‘?:Ÿ$I‡–eår9€‡ü†Ü槃j¯ñ<ÕÕ´¨É+“6gܪ䪚G¡E(Œ%3@äc] ŽldÀu9Š'p:Pp·Ø 2·™¶i[±¥÷q“ƒx¥™ÝByî¨ÕØñX¥” ÄÌlnõC+ ’I‰7à‰Zèðð°iš*§Â\hn1aÂ+Á3K)ò°”l(Û¶3™Ì„ úúú$U•”Wzf84™{ “få/¥…Ét;BÎvûÁ º$ìÜ{1ÅÜx`üGõTç‰-ƒˆ¬Ñ{êõº"Yú¹rÉÍIýßërFx_õìQ66ĤaóŽ[.#Ç5­Ç,˲&L˜ÐÛÛÛßß¿iÓ¦$I¬?Xþ?sš•  $­š ¦Ö±ð†|tþÑ7æ©~&XΈLsâ<ì^QÐâ: €‰æEÏÐ(¾ÞGúÀU4|’c-ÎA¶ìS¤• å(š°tKCVªÒ¥FÛœ¶Ö1팢örN7e`Ø81.„ ‘sý7·Ô&:9s‚\T]p¸``™e,ä¡3 ¤jìl/j2ü —ïÜc“ó—I’œþ£k˜3`XøÒâá²;²0ÑWÛl6Óµ©ù’Ù<­©æ©•+WB%(™šÄûÇöOm˱¸k‹k“%„Ù nË‚ Z­B«F$Dá7ˆ‚üà1r‚¹dâÎC< -î9Û“>€–§m°¬ÍÉ pM!‘õüµÞ©l<°«¹‘æ±FlõNÃÄ»Üu tF·ãLñÒp¿$IÂóÃüWò“&Mš;wîÁ¼hÑ¢‡zh`` s{¦ö\-÷`ߎ'K˜û ùšhíz€{‡ØšÇ`5û†Ë%XS‘‚ŽŽ66 ÀÑÜ œÖÁƃ„®£ €OÕ…Ç=Äš¼ óð˜½EÃváÀ¸^Öd N²P gÇZëò¬¬ßŒ›ÌÝ>7!‹_sob4”*® °=7F¹†éTYc¨ØwŠYÔÌgߥt@ƒ3¶?˜ÍÊ5j•çÔX7q$U¸<Ôdîn´OäÿÌ·/k%‚þ¥~:9ÍÜ“IÕhš‚¼3LŠtWÙ#² ÃÃüZc—qœ-²¿7ó“E³@rÜ1—³Øæˆ~VÙR4?¬?´ŒŒMj¬· Ò0sFȯrŒ2•Eså¾=çÔ,sÂnNÿÐ¥( ìqÀ)§œ²Ûn»í´ÓNË—/íµ×Â0¬u>=±ôÁ†Š—¦¬Ìò‚²c`…Ýx5N†g-9'…†›;×ÉÍOHæô\£ªc¿¥Fj¸FóÒfóM¥”ó°ãýÌ3Ý\€çNXd)ϲpëìppgÅ® 1üc€ÖÊëÙêD8TBœìÔ  Ã±8&JL`w°7•ó VêŒAb9zÄ{²yž¿%ßê5íhÆ -ÀD˜åZÑÏVÊ\×jÕ!sPÞ±%šÞ@=RÀâ¸ÎÓâXœ)9xA+ùX£ÌŸšV¯Uþ¯rê¥*UÖ¬ÜséŠÔpÇÔá.aÛv©TÂ4(—ŒçàhÕ*6L/ð–Ç\3ÞJË¥°ƒvT9Û™±6:—7²ø!b¾Zž±W@E¦:n°Û9ãÎü¡Øo<ó(î&ÐÄ•Ý"ë'ö1s—¢ òBúNZÞ¹¼aÆ•+W:޳xñâ¾¾¾(Š3é’´V«A Cìǽt™÷dâ ^€\Öj¬hQ8mqб¬ËÈY/NÌGJ(pQ¾RišZ¶ÕüT³þ…zöÆlîßrJ©ðSaõájþ¶¼ýDK1Ê»,F€(Žž<óôðEZ}²fÈ §üš™ +”`T87{ž'Šƒ›¹Ý¸3­ú5 û`‚R(1†l0ðÁPÈá²e¢d„بÈú™à‹À2 ˜@BÒ†. SoÀ­RdÏÌKxC ixò†X Š´þiSñ¾}K“^²JeP -}nʲõxëAôé{iana€MÇ8|KÀ–Ž”çyÅbQ4¶yP¼yœ'È[ÓB–Åß/5¤l@vš9¢ÔŽ*gûÏå`†_Ò4ˆ» … ¯D äÜ+FÂÈæTØ–ÌÛáw–ÊF3>á]- œ´°W¹Zb7E¦,q{W{õêïžøî=÷Ü3qâÄuëÖmܸ1Š"ÿ:ßûŒg˜c¬Õx7âcG#DÈNF&Ë3 ½²ð¨«;ñ‰Zži€¨ šùèvCÐJTRÿb={L5Yæ÷ã£öR-}$e5ZÊÊl½b.'­±Ïcÿ8õrS¸h´pÈáûÃNqÚl2—ÝȰ<°Â™tŽ'ñ€¹øâÌâ¤8‚á ÊuƒTì*Äâ¨ÛpaRæòÅóÜ6bÅf0øÄ _Æ;,OçõƒÀɾLkdÇz< mÊ[nòúJ¥":, Áuz3ŒŽrA šM¦Öð^-`ÿ}¬ý=kŒa\N›»Ö0Yî%0=‰+ ̓[‹eÌ—ØE#]Ö°~èÁIÇ£a¬sÌ#¨ØÞϼÁ›?¾xͳkÊår4; .œ'+°”9ªi̓"oy¹ç±jÌʰ¸:CŠÄ:5Š øo肾oÈm 6¢g HÇl^f~˜à€Ã:sC&¸<ð®÷´sP•˜Ô¬¾ß×Hu¸!ÇLb®_ÁŒ“‘H„ï˜P€8„³XkJAÖLHCª±~ƒ8±1uÈè¢ÑkA$Ÿ’ÉdX,™ÙçìÝŽZI˜"k¤_ø²¼ºxÁð.ž5R16<8Ìä¾i ø³*;÷àâ%ÅÁ±z…ê™OqƒÍ3 &yEBœÒa+¦wjòEºÃZsã…ÙÈ`GÈÙnñ†Ýs19!‡˨h½¡špfI¦-aiœ&È9æ!'b/g4Z±!ûϬ9> ÙéÙ0 óÓxÃhœÞ¨\R‰ãØ]äæoÉ'kG9Í´‰ão Õί4c§n¤c:nââ_áP‰ãž§ÒXHGŒ4‰«Lr¢'­Ž‰'üñ .|÷Ýw[Cy©Ò´™qÄ0âÊ}2ôó¹ŸÅR. ˜ž„iÎ*P†âŒƒ=e¡PXÂ…—–&#™@€ö°¬$LµZ 7ÖsX¨ã¶å£EÈ©èÁÈí•o&÷«¹7t]Wd–˜v 1^»´OXôE¦d˜r¯ ”øœ?¡0E³Dchœ ñâOì-›Éd ßǯ\1§C+—£–}-K ,m®ƒøi¨)ftà’ÇRªè½i®Õ£ôCbe©ÔHUÛ`m»F­ƒÂh~~ãqð§‘3óÏèîjŠŠlÄX“öÐA(b‹,PhÆ Êá, ‡)w>Ù`FôV4’ÝB9ÎŒÓSë5«pb!Ic£vaÍ8Ø0k6š‘Œ\<|Tñ)’£±ù›볉Éx[ɭØZ_Ï(åPÃt­u9øÜ‡ÜæiMs¾¹lÙ²z½>00 —×<½iÿ— Àß]ÕËB<“›,Ç„6Ý©H{9&kÉ 4ÑÜ3å$•+—o-Ô/È"à,†¹$C¯\ìò©Çl´R©´dÉÖ¢–”\ø„ Ã!;†eSfà£Æ:#º@#•~2)Q†2 ãÞÎ{W¨ÿ¨þqGÈÙ>?P0Ô¤V4 2ãàp‰Êm@æ³±²º¦8Éc§˜ÁNÀg4Ì‚l¨–XL '/ä­´üZ÷L&ƒ%+ï§žc8†aô~¤·1¹ñsõó Õ…;BÎv¨r@OÏèàÚY ˆHbÂMÖ°Òl»XVOòY,8Fø\Ànœø°š¬šAýûò¦pm<ª‰Ñ &)´Þü[Aáæ‚m؉X'°uþùêÍU÷l—é:rî²n±ã8FÆþÆp°_Ðvy›Ü“¡ŸYk¬ü¿ä`Œ¥7´X;U‘”¡";/f"0 {ØHŒÜõ¹ú uïfÏxÆHUšœœø_ô3WgÔ8C©šéƒöþÌ9FbÁ¸<¢.E &m[Ð4ä‡I+B…¦‡mXFZLƒÏþÙ¾RÊZhå~˜KkiñK†¥ óëX–¹ð —OÇúaMnɰȩvöiÛ XcU1Wb|'üOÍò¥ª¶‚drâ‚ SÒD>mxÂZ‘…K§GIì8Çùãºn6›m6›Ç©ãŠªxƒºá ê ®rw„œ¿õh@‰èS¡°-eõã‘c¢BöÜÚÙcµÍ†˜! 7|dgép•{›HÓ¸cÄlQ Ïh<â\ß-Î8¿“0ÖŠL óOfÅ®ë …žžžááak›•N£¸,6$HÑù†aè_è{‹¼ü5ydßÝgw7m6.md•,,;–‡Ñj/ ~Lbª‡Ue-‹ñSqî±\pIÞ¦iêüÞÉwG9 X™‘¹XFâ,cáP3AÕœíå>ßl`¿‡À¥ -¢QÄ 9æäÚ [Á-qðeMÓŒ>_2÷fÚOjÃÐ?ȯÞ]µî³Œ» 36YvLèÄ„“"}n52ÜM04Û%¥À v~³Ùx”U³‡Ìš¬ @Ó£nlüއ²‘¨1"÷bÒH´¤„«gˆª¥ÑhÈw‘I¶^åêJ2l1N&ÔÈbè›Ïà€²„!-¹?¬Û$9\.—k6›õzS¸œK­Óf¦R'*çŸ'ãì¹çž3gÎ\±b…ã8³Ô¬©Ý®nÿ²úòŽó7ýÁd™æ¡ÄnÄ£6#kEÄ¡ZâŒ`æ(jä€XCHØå€Ã†ç±F'˜ÄZѲpkΘÜÃGêš1_þ]žŠãX%-fZ¹\½¯(ŠÒ$•ÑWù^’±‡Qó¥SÓØ‰Ã%¡c8â¸U¯×-Ër7ºÍý›ñŒØ_çóh¶+àuîðãðB`À …mÛù|~„ råÎŽ3¯¥(œX£l7spjaG2Æ…¸Fä‰z&yã–g¢¨Ùlær9d Â+×B·WÂÇÈ F7 ³o•RÍï4‹/‹ÅÝ÷ؽ\.o|c£}ª]~ œùC&îÑ|æF'±¬UÛ mñA/j˜Øš4 )‰h•#‡ã68X I’D‡EÉA‰RÊ\aZ[lºŒÇ¤Ñy'jdTiø!p– !c,Oð ñ5Žãl6ËŠ‡Õ"®ðD4«âäir _ ) èPüäÞ0xÎÀÒ$M’¤P(œtÒI³gÏ^°`üvkÛ!äpÇËZ3¿z_1Œ†øBEÂ3\hu¢°\ưyÉ)ò<¢é<¼3˜-²dQ‡±t.ØŸðßãC5ÃYÜÞ=žÿ~b\Ý’·úBàüÊ-†ÆÎõŠã8žy#³"“/æ÷ÜsÏžžž¥K—ö÷÷«UÊHŒx8³1ƒ ŽOv6Æfõ_<;ž[DmÇÝTr|o™¿Àí 𾉌¡ÝÅe 8­®EG¡|#Ö©““WÎkHüâ28o–Š]åŽx^~Zèíí=øàƒ?þøJ¥òÐC-_¾<{c¶yyÓ¹ÒáÓSb(Õ¦ôyí±—2¬[E‚¶ )°Ó«"[6vjGÇ"“ɆQ/Ô?lXË,û];Ui´[þ:Ìü0“¼“p'º>jœn,«ä1¨ ØðÐ%¾²”­R4€›ŽÒ–‡s™‚Ì-}èÂ1bÖ%q6EK,–I2<}Ð:U–O¿”Oy´¨#h4Ë–-^¾|9!;BÎöáFsË2î  BGÓÕSÅ„I)›™Åðq®qšÉbÜãU$ˈEÃ0ì(œ¹˜ “J_Î> BÓB&ŽˆÂYªü¤¯ÖœùÛ†?Ów'¸q5«¡mÛ͸™¶¥Éþ‰ó G“×D¤DÂ4Í0 “´ÕÊš={öŒ3†††úûû“$IÒÄ6mÝ  ç2[7²w–œã¸r½F‡À²¬F£±nÝ:)逡qƒçïÀsc†4n¬àl¨Q¸ Ÿ ßE.[°ùW‰"ÙlV¸àRíÊ(-@®Œqj+¥ä ú#_jøˆá®í:ðÀÏ>ûìÙ³gû¾_©T*•JÿÛý›ÿ}³wH@¸gx ôtf¦`½àcŠ 2ðMÁÄ™ ú;uB²3—Ëí¹çžŽã¼øÍ³ßÈšƒf<›†™x‰ó¨ãßÏŸ3|ƒâä×™’€Ãß…AgÄZé,òˆîØ;˜³Æ_Tž–%M I â ˆK<ƒÌ<=5VƒŽgtð­9±ÛX«¬ç¬àœ zWuÁ‚‚¦4›ÍjÅ«êÕ¨ì9Û¡ÊÑÒ .TñPå°€n<¿+UNI¨çjv)lÉ«¼[ø–Kxе¢Î+r*a A.’5ÖÐÇ–CJÎ…ñZÌ}`ÅÆ4M3'g†²–ZöÓvj§éÄ´qfÃçšï˜ÊP1ÆÍ8C𦯡B÷Ä¡JQßßßïû~Ò•¦á•=8„ÂOŒ7?,ö'F›A“DºÎÈ:%£yÃfB™LF|e8–HÛœI«L~…¿/+e18é8NÁÇr¹î­VcÒ誶.ãPÒR–G)¦“r `L²u,o"¯ ‚@‰¼•1[‹ßaÒY/Kn5×ÖÒyuÑ™Äl4²!J‹Ô 4€…!ªÉZ­–~8U}*Y‘$*ÉçóÙl¶T*Åkbs­~8tÿìb¤Èè~quÅ‘`¼ö®„C ØšÎó!µy^~Ò_ÁªïF‘€/kÜ lÈ\G>yX‡žÅUA7ÀjÚtŠ^™U„P7Ê •±ÆHNÕ'Tõ¹ªªª$I^‰_éQ=3ÔŒvÕ¾#äü­ Å®ã8I’ˆÅ$*¿bFÛcZ@â¶¼³ˆ%­ Fš·X‘ÜêúÇçl'Çqòù|³Ù”¬ “ê’à Q¾jŽ<ÔÈE²ÍrŸÊ¥¥ÁÉA”FöV»xZóä {ÂɈAKuø#8*ˆ‹¢'£¾¾>ÔsÍý›–kyox‘iL!Ö»Õ¬ áRªHáŠ7-@YQ› $iÛà/ÁíÎf³üM!µ‚fþ•ÇnPk:Ž“Íf3™L>Ÿ—§ZÀ:Œî3% Jh‡Hç|òäÉ3fÌX¾|ùæÍ›™™$I晣–Þ¿ôÑG-•J6lxüñÇ·nÝZ;©f=hwÌ”Ì#Dü‰³k@³ÿÁ²áj Å0OíÀ•lIþµÑh¬^½ºòÊs®cYV±X<äCvÝu×^xaåÊ•ÆUFí¹š{Œ;Þ;c¼BƒxpXà˜²\3$xah~tlä#ûÙ+î IõFŒ©iNZ¨fÐóÇÅãæh6IØZ«ç4gÛ¶­—,#oDGEÆ­âµ^;@ð õÀÚvÃÖ$–Cp]w=ö¨ÕjK—.ÅÚåÞú¾Z,ãEõeQòØ$´+Ak6” L³˜dµ~/Kï(Dz µ(‘Ùçó]+¸Ö· ‚×L÷/­^e¤"nx°V±F•ÏÊ?¯ŸS8~ íkmò†¥ëJivÜ×!G9øÄØNŒ"¢a‹³QSB´ªˆ5E¤Œª)¾¥šœÄð¡Ç¾"b6N"#žç ·Ìçó’ÁÜ û“J¥DZ´Ç€Õ 9ÅK)•Ëå¤Ëæ~²aÞ|opÁ ýSûÅ_\»ví{ï½·iÓ&ß÷›g7í´ÑX‚¾hoò7ÀÓÀ·DÁ ÌE¡”ÄÌ¿QÜÑZßHÈØ†‡›.išªTIõ3cÆŒSO=u—]v©V«7n¬T*ÊPXðB?ãнœy, %/rE®3¸*–NÀ¤œ*`r¢šáÁ>¶ÄbÖÔíÐ`’ÞÁ^`›O™ÑIQlÄfj~ÉÿÒ¡êнœír8ïœwÅŠ@i˜è‰ŒØZèÆË–íÇ7ÿ…)pŠ"Á×ñJ¬ F9 ,Á4m6›µZM‰à>Oí†!ÌfÉ£9‘”¿aD¾ÅÙ3l Šl—%/á¾nš¦±ÂÈÞ”Mz“ÁƒJ)e¨¶+ÚìͶ5dÅÖ¨ë|©NÆoP§x‚D*<9¬ÙÌŠçEX€ÏÆÄ<”èoÉßCÉJµ#Bî,õ£ ™ä/»ººòù¼”8¨uŠÅ¢ÜÛr¹Çñàà DR­Tµ«Iœ†‘-g1®ŸÏçF½^—•ÇñÚµkæ7™•»87üÔ°ÿ€_}¢êû~å˜JðÍÀû‰çú.øñ²DYY™a%îCðéû> 4bHH.LÑ´|ÛòTÀè8K95;̸oÛ¶íõ×__»víâÅ‹}ßó±*š0)U¾<ÙL&ÃÄ3&b¨‘IþuMÞ#Pjœï‡4¼: Ã$`ô¢Ñh`î‚é(7É«k±[;ŽEœ¤×ógŠ+ƒ€;:‹3ÎlƒƒÌ Xï0œÎOÁŽå¦´†FQ4eÊ”B¡°|ùòž´@ú¦IΘ¦™ÏçåÀÍd2;ï¼s{{ûðððÐÐÐPUÀtÔxÕ2—lšï*np;WB”C=Ï“:¦­­­­­-ŸÏOš4©½½Ýó¼vÚiÊ”)Â@ÉårB}6 £X,&Iò¤ýd5_ºmêœgçlÛ¶mÓÖMúÄŸâ½ã®·º:ú:1(’( •™¦)‰,ËüC.}‰ IDATyó¿Zp™i›ìøÂôb^·¼øµ}Á (h;A°¬EÔš³ Qr¡fJ’ÄþƒÝ¼¼™y9¾Aï‡'†ÖK–à5 !Š"‰í4Iˆà#ð& —ñ ú‘¼fX¤‡y@ QG•#rÀ¬ßÌÕ#ÒƒŸ+X¡­­­X,nÙ²¥\.kæ—Á\¦ Ó³CIz;£jÚ覦 \2‹ù¾ëºâÝ c‰#àÔan¥®Îx—dÃeF?–/\jp8A €Û[áj± ÁÐåÙoæûó—ãSHºE@¨éŠv¥Raóv %ƒB‰eY;ï¼óÌ™3·lÙ²mÛ6ÁÁŸ€ÄL‘p½išÅbqúôérnÛ¶íµ×^äP‘ÔÄT¤Ka„›†1I^p¤f³Y ’&\²L&ÓÝÝ-œ &Lœ81“ÉLž<¹­­ Š&È2™ŒRê…â Ÿ¯}~¦=sÓž›úúú\×µŸ¶ß<òÍÌ¡™ /N¨ÕjX8pÃ0Ìår’Ǩ} Û¶E4Æ368:¹t–Ež¡"é~¦’#Á’Ç$d8"'ãyREÖÜQGÿOªXI†Pp»?uãccÿã¾ÿU?Žbs½i½d™/›Qc´ ¤ @ ÎÚ‹YÅ,V­èjD@“›=h¥à"ùtõoJF`Ýø²€é´ùn“~$ü d‰ò ð¡}hÿý÷_°`AµZe²53§‘ÿÉÈ*ׂ<1ý¿—ú{ I3“‹FKdÈ‚›bÓbCª±~_šCÏÙ –h[BÒ4XÒ"¢Àš‰«djLè_9/äeêbß-|(h—¬‘ÛG],Ú¡Æj ã$ŽâkBuT^€ çþ믿¾jÕªþþ~ž¥à£ ³±%°Iu544A{{{¥RQ#½ÅÐ&e¤Él3i•¡- *àÈŠ`6›ÍårÅbQŠ›l6ë8Îĉ{zz:::¤¬‘ÿ¢º•/ò`æÁ}£}÷J÷²söÔ©S%“íè蘴yÒÃG<œkË'„7 3Á”W=Œ¼hZÌ1C³ µ­­M€²ñ“Œ,,ÆRc  h 5¸l: H÷“Pâ£òˆ+qú»T=­œ.ÇŒMUWj@)S¥FÊç>úXÏh« å.Ÿ9;yRÈ– 8Ë‚4À-x’šûðØæìÓÃÓu(_XJ† ¬èÁÊoŠFmmm“&M’â MS‰4rýRîäóy‰1}Ý}ó»ç[–Õ“ôœœ§¹Wpã„Ãáï&ün}Ûúf³Ù×ÙwÊΧ„Ca­V“f•€uÕjupp°\.Ë"”QòƒB¡ @?V7Þ¸K‡éݾ¾¾jµŠæŠä+2Ÿ!3Ô èd³YA,å·Øg 8»iÔAT¢©Ì<@^3ÜÒÀ×i6›ÇT$û¯ÆšBaã ªC"ÂΊ<îÆˆÇÜ1mš r \ W™šm¹ä ìÎ$ µ# )Ù R Xæé7¼ ºÈßá˜Ê)ÚŽ*gûW9šÙ i¤ÊAkN¿èú ?J¦»yÈŽ¡d0A4œ­WE¾L¥¸+-ùEiÏð3Ûgqó3›Íš¦))¼liÉøŒŠÍØ Þ T½ñ(9Ž~5N÷×÷}ÞQÜãoÈßȵ)òPê%ÐÔ‹%!Ðtä6jõ ûïqXbb8¬ð÷A —ËÉ‘'åËÎ;ïq\'޽Z F@0Àï"µäÊF* !j€²@:ŒZ0æ944O nBpZ%,UÄ{I ÀŽÃc’Ñ%®Ï¸AYàŒ›ŽŽŽ)S¦ôöövuuÉ{öööÊéßÖÖ†;ÜÞÞ^(¾Ôû¥ï”¾Ó¥º:U§R*N⣂£nËÝÖõìì«È­|BsBìÆk“µ+Í•ÏÏ|oà{“­ÉÃöðúdý å>’~äs¿ñµ¾E5Ñ—Š6û ¥é6J@æ‘CV€M‰äÅ@“$”âäB£NJj¤í†=§™€ŽgÇG6ra‰J bB.—Ó²7Àhj¬º¨¸(ßPùn`ét4!¤„†ûÏ}Y)ÙaÈÍØÌd9LtŽŽH(­±é¾F«ãàgšæ§Ã°ËqnrS)Ã0þ-“¹0 ÃøË8­!g{2žóàS~ºÈÎäø“@Å´Wæóh2,©Nxé`asÀdÀȘ,Ë . ¢C"CƆs¯PXê0ÁI„ÒÃ(°{¦zKʯMíÅqÎ ³Gf•¡b[–•¼™x‹¼úóu 9`”Ý6­1œ[,’Tj„Tæ51–ÍI1:m|á« B‚C„­"€ìkŒ))k¤­-®½ÝÝݽ½½Ùl¶X,²œf`å:E4›Í.t>‘}â ÁöJ÷J’d·àÆü¿)ÿÆQ-òÅ9íç¨D}¾öùÃˇËÑcÛ¶aÉ^ìyTvh‹DÛ”)SªÕj¥R‘;ì8N±XLÓ´^¯Ë% MNƃ$7ÇÌ;\È5KžW)Pb&b!wæiGyRÂ-Ä<FppgÀŽ„¯&¨,fkP31«»›˜_–k–÷g9áFr`Àª@@Õ¨Ò#„„üˆx†Op~ÃäUvïÖ\zù ^«Õ4p“OФ ó±[1" Ê—útd•úU&ã9Nwwwš¦›6mú¥iþs’Ô’dÕ…Ô“$j`@õönßxƒ §æ4á¿‚1I†jŽ<$ÍAÁbÏ16>- ·œ›hÕ 95!­*ÒUlÕdŽÝ8ºÑøvÃþ‰íýÆ3M3>=öÿäÛ_µ£Eê-€$ò»( °S€292ùÐúƒõü™ù8¥ã8N©TRJåÎÈ5jx§yØ/ËAÃÓþò¥@$cDP,ù áš@ªdÌÈÐè:œ•#ƒ$ÏÞã #4À*¥:;;hZ.—ÉÑ9–ƒf™L¦­­MP¬ ΆùùùŸ >µ{´ûÇ›7”qHpH]ÕOo;ýôÊéóºæùÊ¿­ï¶œ—»3wç§üðçÞ›ôZ–ef>Ì÷Õû&§“…$ÒR: šÛÒmív»ã8&L‚`ýúõQ G@†uºººØ¢8ŸÏ‹š¸x!çÑGÕO¨/YÍšµ}{9üghhbº ‘† <è–óúШ,À(X€#î˜Ü„ç9T¤ø’0 Áb”–e©6}-ê8®£5`o(çgŽýS»ö|-{d–e䙱ʄ"ù\¹u—#)éH¬’e¹Vww÷ìÙ³ëõú«¯¾Z¯×Õ J;GÉ~,Œ²ÏÀr yœ"e9TŠ ¡—¦ÆZA³N À.œ8,¤Îc¥/¨À­Zøu‚)'QÇœÔ1ò %ô:Ž#ò¯Û¯ÏŠfýsãŸOí8õpÿð¢Y,$…|š÷Rï•ì+GÖ<½qzOÐãÞ×ý¯9øò©SNÿî|Ó4ȸȿèÆî¯Ú|•ïûh3 ø·ïqûü­ó#Éiǀט!!¹§§gxxX(ÚÈ‘!;SE*!mØVÑòøñ2ù›Z­&ß]̨âѳÞ({ Û&¤VÝrïÅ‚¶$ëÄhm{fôo<Ìy=d„<9ÇŒGVžÆfS€¹9ˆàº\ëŠñÆÑ¦P*iÃ¼ÌÆÆgÉ¯× ã’lö'õúÛ¶½ôÒKA|2 'ìlÜðÏi²W˜;9§šÊ0Œ[ÜòûC~ÿõ•Ùjö)äÜwŸÚ´I]v™ºë.uÆÛ1êpvÌt6³â]ŒUÎ/>±:5VÆÅщ#Uþ ‰œ«c¬<É¢(Š>Y¿±$·Êçó8ƒÜùnøéйÏ»¢üeYcM>BµÃ5ÊP©RJµµµrÈ!ýýýK—.m6›Q)c´õÊUÂGŸÕ(ãà!¦)³j$*ÑÖ…ïÂOùiŽË(YW¿ aEËl¯\Ò¿‘_—x#37xœ¶ècÿ,÷³§†Ÿ2MósþçnÎÞ¼¿ÚÿÄÆ‰†aL§¾æ¾vbpâ‹ÅŸÎ–?KñU=Ö¤ «gÍPºìÂv2`ˆAå- ÿw¼¬‹§¡ íw†…yÝÅÙ+[N¸Òd>Ôˆâ›Wmû.×=ß÷ׯ;ÉÁIæ?2¦ÝEµoºš¾¯Ú÷ê'«“ÿÞCN’¨ÇSkÖ¨¯}MÉÒÙuWuíµê ÕÍ7« ¶Ë((* ¢kóá¼¹èa8›Ž ,I M‘Å+³6³@=Ü0€Oïèè8ᄎ>úè lÞ¼¹^¯³P#ûàj¡dŽ7:µöÊQÚñ«freÒœÜL+éÒ¥Kã8Nò‰9ÁT»+ï O$°`•ˆ“f_ØÃ|îpÇѦ¥jœ\†38{eA0ÈGâÛ¡ŸÌ>’mãií˜Klã0 7ÖXkî=¸;é6Móg•ŸíîvZý´T¥³{gÕ<êoüKñ_Êny‹¹¥fÔ~\úñçwúü'ýOöôôÇl§x§Ãʇu­ìJÍôé]Ÿ>¦zÌ?Tÿ¡;í.…l6{àЯدÌëšwÆÖ3DMšç(³dj•íäZŸñ®0¨3Žñ¨¿ñ”b©=°.Y£…4ç㊆ÿepv5œñ 3è ñ1VŒ„§AÇCœ% ró|1š¯š`’³Ë€q„8&I>(›Í‚Œ'ú ¸‡ F éà eypïƒõ÷ú’ä'ŽFÚ–ÆÝ±Îhko›3gN.—{â‰'LÓ,¨B—êZ¯ÖªßW?®¾ô%5’ªd£ÎiØlø¦HÖ?I=ôçÁBæ6!DÞxÿ gp`ÁÀÌH埰!€Zí}ÛŠ°xgÈN»]²‰„Ɖ!Ÿ"¦Gˆ£h·«âý«Yq#ÉC‘¿¯)¥À8¹B)L?`Œµ\N]q…úõ¯•Rjß}[y÷ÝjÛ¶¿}¼áÒ•É0è—0ȆÜ ¦@ePç€<á²2ÜÌêA€üÅ€¢‚{[ým5=%}å•WÞzë­F£ÑÒc¿"ÎO¬e—ö Dhg:ãà̳m;\æÎÍÅÇÅÉ~I¤"çm'{K6MÓT¥,ÇqtZ}8R†²^¶œ§ù¾!Æ¢¹çrÓµ‹¨2ËN’>pÖy+ø–ºJŒrá1#܇ß-Pn[ß–id2¹ÌŒ3:;;…ëupùàå–Y:²Ýiòô-Å[jFͶís£sgD3–šK¯ì¹²«Ôµ·¿wg®óÇ]?þ\ãs?¯ý|¾;ÿŠâûûEF¤”êIzNNµRëâúÅzîïïÿýì÷Ÿ÷ž¿²ýÊ}Â}®(]!œÍfÛK^i·U»5 joõ—½¿4MÓíóûÎïÈv¬è^qDx¤º¤«$‡£(Ùl ™5ê3ûuJ*-S¥fÍ=…&!«¨±“üØ 0÷c3CF¡™ö"ŸÂÂ3XBlª­6ù{ä²£…hÇâR<õÅï Ò¦\ƒ„%°Ò™þÇ3ÝÌ€ȦQüÁ‘AùÎwªÑ:AÈe#s•oŠê?Š¢ô½Ô^iLJÅà ‡üq¥Ôððp’$[ÕÖ5jÍ)ê”F/gÚ4uî¹êúëÕUW©I“Ô½÷ªrY}éKÛ‘;À"ùF¡ÓŽlQt1l@€Y<œ€hMËBg)@Lxñ`ðe)ƒ˜ †MÈcnª¦ÜÝú#õðºÐzÉr]7<# >Øß·Gm¯F|5Ö—A6Àü_žZÞm=k©gG8{¶b;MÓh¨þïukUüK1‚èÃQí¢Zö¢¬Ú ¸á ‚(©í2ÊÇÐ"…ˆœQÏiÂqRpH±î[f!7¬\ry6]å^Â?TúÅÛõÝööövÚiâĉžçutt”J%¡J;ŽóbáÅ­Ù­¿(ÿ¢f×^·_¿-sÛjsu1-ö™}>>-švxzøñåãoÊÝtTxÔÁêà(Œ¾—ýÞ~ÍýLe*¥®._}GæŽç¼çº’®K›—[=öeëe¥Ô}í÷V=m­¹¶ä”ºínÇq:Ì×pç2ïK>q®'ìÒ±‹iš•f¥cMÇ/º~Q­Vººº`$w¬Ñh¤iZ.—¥ÞÕú+<¢„xÏ´¡Ë IDATj†:ÕˆÒ"ud¿\7}î 8vg¼eMö| 1:ƒ¾ˆFCta‡idà‰ÈÜn¥RÖG.Šdr0µ£Fœ€â²úËK3¦'_D‚["‰è5k„â(ʼhj²ˆ3†Ø¢`c3ÉBølU‹V˜ÄŽ.ŽšjzxI’$QòO™š¥fýZýú6—“Ï«ÛoW·Ü²]ð4 Xƒ®IóC•=P.—¡ÂÂÓ-0%”Zî¬"ƒX-ÓW˜á£ébÓÀ4MÝÄ5ûÒó”7ÊV‰2ÆøáÜ Ñ(Ôâ6ƒü‘O.$ªµ#jîî$oÒÜ9s8à€×_ýÙgŸíëë‹ÞŠÒ£Rw¡›¦i4'ŠgÆÑ!‘ai#µØÑ’È^nK¦‰³ŠråÂ]f¨ &è4XÄü% $|Þߌ‡ë­õÊSËi>}ï½÷/^ÜÞÞEQ[[Û¦öM;;¥iº>³þCá‡V8+îÎÞ½O¼Ï¼ê¼ òœœþ½Ü÷nËßöVæ­OW>½›±Û¬hÖzgýµ#âfl»¶ïû©J•RNèÜæß6§kÎ3ågÒ4}ÆxæÜös•R £ñ‚÷Â[/¸±óÆ«6_¥”šÙœ¹s×ÎV>¶ïØj¶Zµ«ÙlÖPÆ@ïÀ’ Kz«½A âuBÝ–xS*•¶mÛÖh4$‘ .¡¤—Ïç+•ÊxN9²MK J,þz½.KëDÏûò>4GA–,Ã. ª4.{0çž)ËXÛгàrA‘ ÄÊ0ó€À@î ¦†…› ÆJº¡Ú“ïˆÆ$#¶1("fÿxî{JÀíO0âŽ2âPt$ͦiªHeoÉ&7%Ÿ77PJݾË퇩Ã>0½þ)¶o¼a\ç/ðb®ôÁüa» .„‘$‚OÂ^U@ÀÇ#f|"H|â¶¡v©h™M’ët]7ŸÏK¾£Q®Áü‰G¤ýà³ÂÔ~Ù*<} öqhœ0©©uZ}'ÚùS;äèœzê©3gΜ2eÊàà`½^7n2†îrNu³ÂtJj¬1òçå-Ë ì øb~(MN¿ŽJ=¢•­H>DTÅDåA.O‚²l°þÔX¯0Hcd¡äã‚Ë{ž7å/SÞüÄ›Õ5ÕJ¥Òß߆aGGGÇÏt>sÀеfíå]^þmé·gwœýþt׿¯]j/=18ñŒæxLH&\Û~íùÑùּλî„Ú Kã¥nÕµ6XÇÕŽ{tÖ£Oæž<¥qŠRê ûGœGî÷îWJ”éOz2ך›kæ$1‚ÀÏù¹(÷ÌîÏäòwís—뺪¨’fòÍ5ß¼òýû¯Ù¿=nB£d²õz½R©T«UpÇ…%-eT“lèˆ ÝœŒèos¤çˆ;`òŒ$[Är]àº,ºŠÄŸ?Ì1ÁÉ„ {V¦”¤ž€¸³gqòÇÐ÷ø„OÞV˜¸èÂ\Ÿ‹ oüÌ~ä”Ýâl›"K±9,¬À3 ˆÙ`þoç?°ÉO|ò#±꼬jƒ±Jd7HÉq2Bae<Û„›²+dù2‚Œ&c{ä›Sv# *è¸ ÂáG‹aò#JSÌ=ås =*æËr.&¤5ieKC¥%¤¨Ò8Žƒ¹AþùÌ2­!ʦåÞì¦qOeÐAöŠAymDGŒ …rªÚÆÔ½çyÒ‘†õ=é_-Ë*D…Ë_¼ÜS^ÎËÅÙØkz¯¥¯ÅÑÛöÛ5£vkæÖùÞüµæÚ š¼f½vƒsôxÚjgõ+Î+ŸÝå³{oÜ{΢9•JeŠ?å¼gÏ{ê°§–¹Ë~<üãÇóïïqGîŽÝÃÝÿOýÿô4zö~o墳SØxÄcÍ>é>m™¶.³ë¾ýî»íÝÛfy³ÚÒ6Ã0²IöÄáïl¿siqé‰á‰‰1ªhW©T*•J©T”Æ,@2è,½"&†Êò6H=ò *ÇK.°˜Y‡ƒ†5ì=dÙ²ùšœ;Ùó²¥ß—Ì“ÍgžyfáÂ…}}}2äÜüE³pt!¸$0cÓµÝY³fþù“'Ož?þÃ?\­V›^3ŽcCçÀû ·œhr+`&¼±JåxåL}òùƒ8¤¼ÐëøkÇŃ‹[E±FÐöÝôe»]6wpîýùû¯Ì_yUýª——¯ª_unñÜ­ñÖõöú[ßzÍ.×<ÓóÌþÛöŸ·v^}°Þ—ô Ó4O*tþ›çß½ûÝ_ëùš´v¾YùæJweWÒ5MMûï ÿ½¾mýÛ]oGf´ïð¾û©ý Ü5Úu§®&ÆíÔ6”‘¤I.Ê)O¶õ°‰îDø/$I"zÍf³Z­V«ÕZ­†Ù[ 3Làîçá(çé(q—û̦MÈ»Ù,€I4LêÕD‰Ð±`©'TA%À4;äë©‚I(ð©ä°RÒMšrÐÐAwgï~>órPßA/ä^ÈmËÝ¿{Wo× ¢ ’$IÜ乘usÙ„eªWy5O®Ê÷ýááaqÓ‘ŽŽ(P^Ä•Ž6ñœ:p¨@ù þ’e´P£c©sR¬—ÃB«LBC=|˜l²”€fm <Ü«GÇ6ìˆÚ ßK(Þ3O ͪYøf!­¥J©àä Ü-Œ?{ó=`¼À!àÜ3^{W<*‹ï‹K¥›pŒhÂÛš9ä´Ñ †\Lw„œíOЦAÁóˆ±5$#¼¼$©„î$àŒm –š[%NL€#̓S r«L¡e©Ì™aó4šh)F£±‚‘o¢eš$I½^¬”ŠƒØ¹Ý‰÷ëgÔ+ûTÒ$5ÿlºO¸Î›NlÆîƒnóëMë-kùòåwÞy§çyo¾ùf­VóÏòí¶9h*£5Åͼ)^µïÕÂýBÓ4s¿ÎÙµXÅbQ)U«Õ°÷P®ÉîvVðY ‚þô›MÓô}¬×kµZWÒué_/½vßkFC)u—w×eËr*÷­Ü·^ï|}³µù®îê]Õûá5^ Ö¥ëDúLÈÁINÓw¬þ±ÔL/©_ò¦õæsùçvIwy5ûjœÆ³†g5ÌÆAéAͺh‹µEEê”þS¼.ï”öSTª2*sáà…¹ÜJ{¥ˆb”Ëe¹°¾¾¾áááR©­P-˜æP—ÕŽ§¡vd2.hÐÌѹK³µEB€,«¶eOt­Q¨9¾Ö6ÇÈz–€„´”‰\"mÂ]‚K´ài*QÞmžã8¡†‘{<çOöƒïÆý›CsßÉ“&g!—å12weÏ-) 9"¯BRˆ3è½*Ò´f¹¶½œÿGŽ<¬](O09 õ>Òt°¹‡/ŠapC@ëã8Ó—Nóìmµœ?Ö+ÕT0of²Ò–ƒk¡R½†9Á¬ÿ°žv¤*Uî­®õ¦e¾k‹C/—UÜåz`œƒ¢ "¤ò2ÍÙLü¹ŠaÿÙNßHc#NÓ4 S+±LÛ4³¹¡©eìilY¶eËoñVAý4ÊéÚÙ ?Æ3âÜçsfÉŒã8üj¸ó]ë% “n,µ ßKô%Áªd×wœÐ×ÒÓÖ54R•*Ó0±yä{yßò†®JH7ŒÀ;‰ˆ3gÜ…n”ŽªHÉO«{49ŽæDÅ[(Y¬¼[¼Üm¹Á'3'g–,Y"­rÜM¶Œ‰‘̹’?À‚S Q¹ž/ç…Ý088844äºn½^/•J¹0÷‰Â'Š…â¯»™Ñ5í×¼”yi¥³ò‹õ/.Ê.:,<,ïçïÌß91™xfóÌ{3÷ªDåÃü«Ñ«Å÷Š7N»1è>´òCÛ¶mmyâ•J¥\.‹*Zâúƒ[‚(ƒì©œq¸'’‘àÅŽ`î2zèŸ#„€Ñ ò˜à [ÏÒh;Ö6þ¼¨ÿw|ñäHüÑœ©hävvA~Ö¦î y)dÄÊ ‡Ï[ÄÇÁ¶ ÷o90èâõÅÖ­î‰ÝüÍyR!Z/š:M.»þ$ù«¤ô…»n’#»5 ~tÞÚ ®™$§iŒÂÖö­#…u©Ê–î=Ð?óÊFÿžñ _/L#ŸmèâLê8¼:껨/Èù|~hh¨ÛíV«Õ(Šrwäšç4ÓMÏ`£Ï& 5GƒiÿØÁ¤úvtö÷÷Û'5TÍT¢;ޱ­j1ŽÜóÖ=?:t~k¢uÒøIOô?ñšè5£#£_9à+üæ€B\h-kÕësÆçØd’ÙíMqÇŽ­VkÏæž'Žœxcï ¿ñÒ-/}}ïë …B!(´Óö~ýæ¹yØçg4Ïxuòê99¿iüæÒ¹—ÞPºa 8ð’Û^Òù]§óLgÇÄŽV«522b—לú²"U=ý ,òyI›&›ЛÊfTRLrtBEgztÜ’–†&Á^ÉØRàÕD„°—ê×-½½äOø±‹»Ýn0ä¿–o¾íïí·×´!}¹)- ²P‡YN5ðHÀfœœÎÙ἟xÝ·uý«|ëNâ{yé+Ò¿¨UŸ†~¾ªžgr â´›å¤éK,ÇÄ]CˆYÁ ô¢0&,=²2‡Ó9»CÎ.îâp<Ùã7@ŸÑ0­Íõ/&› ¹ÛR5žiò‘¡¨M–D‡tãƒãò¹åÈEô Ûívá¡‚÷B/zsäßàg šÔ³}Raº'ßœ×ô7ø~è  ›¥OÚI8¶µht±Ê=ãlh—g¸³ršœêFÒi;k–Ь:à€öÞ{ï+V ÿWtA^ÙŽ6•6¢gœÉä@¤X…¢Š¢°á¥æ'm^ŸÐLÃÍÃøø8u€ N§§§Ç®á“}òc/üØa»kÇ]¹ñÜê¡Õ×/¼>J£þþ#pd§¯S*•Úív»Ýîíí]¼xñ¢E‹Ì÷ÚŠÓ@‹ãøÌϼùÀ›?¹ã“ƒƒƒË{–7›Í;vø%ÿˆÎÿ¸ Ü!ÝCfí˜õLôŒ¿Õ_òØ’í¶¯[·nÛ¶mQU«U»Q f,^ô“QÄ`¼MCdô–O¦Œ0M '‚è(%ƒ¥tü“.ó´jžß,\\ðÆ½ lpʨùóóµ×»ÃrPÖ Óñ5F235­ [”øê`WžOòÑÓQüqxH¬ &[/‹üdïÄ5]´.JüiÏFúžuqnX0 A±Í¦ÍÐFË(»S)‡È*¬WÝÛŒ[ó¹°cv“¤w}/‡V„v5UȈ˜¤lúngÙ{¢¶Œt?C’Vf¶í7Û¨Iœ¤^wbÏ󆆆J¥ÒæÍ›Ó4m5Zi”&iâ:“}~eždFµã$&´Z-¢VóSesr1`ôö[™9!…’UóQÀeÞV¯^=<<¬TQtÜ ¸i ÿ¹\.wO®û]÷KçyÞèè¨Ý«0 kGÕÂ_O‰êV×^`Ù%ÚÕö_xl˜×zTvÖj5EMîÁœž—ç–ï5Ü××÷ÖÑ·~Ö÷oZxÓaë›(O¼ë®wÍÛ1/šýó›ÿyí>kþr¡û¾¾¾¡¡!S™L’¤R©DQdÕÏó7>ÿɾ'ýºÿ½â÷^[}mÚLó¹üzP,i·ã†kxžW¯ÔkíÚ¼ óvlܱiÓ¦áááF£aü4;îíD¶´À‰Î,.¥™°hb* Ï$+’Œ:¡óê ¨ h,TQP+3´lÎqf,*¨X”ýÅ. ´‹iÑó¼r¹¼dÉ’‘‘‘5kÖDQäº. Ò0ÆÝ0Põu€¶ÔŽZ¹pJ|€±I8DW—=’»;ç zÍ÷7K–’vâœë<·ãbWº ”¸Ä"e0Z *Zï°õ½Ð×P‚œóV² ƪp [äaÔ¬ÊnUíZŸý`{ý)0Ö°FB9ï2„ßÕÓ6©å¼UáÛÀ# åéF]'VÁ´Ç“$‰Ü´÷†êXp=DÁ¸‡÷„ñëâà–U˜4M£Þ(><.ý´D`°ùZ9Å1÷ˆ½Oý¬Tçyžycà ¢ SàËŽ¥\Ož)ß̵þ©UþϲÅNûß\.×~g{àÕ™DR€e¬(,®å¦\ò ú˜Þ0ýªþþ~;òjµÄ'D½ÚívÒ›ÜòÊ[âGxäõ£¯ÇâpÐ9wöSg¯X´bÅÁ+jw׆V é¹vŸµ•JeÁ‚:_b×c\2»¼7=þ¦¾ê£ï»ÿ}Oîõä—¾œ„ÉS¥§¶v¶>Þÿø¬ú§Çž¶‘ Ç+¯X»×ý{=¹þÉ­[·ŽµZ­ññqû ßp*Ñ»²dǜݷg‹Ñ©af82ò,{X' #óé öáe…“ÍÐêPÌ-$@¡ôRÏü,0f‡çyav›]¨žœª•uBE÷…öœôþðÖx÷éÜwþæ|pSÐyG'-§žç…—„ù-ù8)ÔìÐב&L YŠ“)†`—GÃ.Ö¥z¥3Ò”iÕ(Å\á5†xT„M‡„v‡œÿ½jPir%xÀ$æÊ{QU_¹\ž3gÎÈÈHµZEUI•Ö8Ý’$‰VFîI¿!Îß’†ÝžÄ{ÅùòÎsJ\V^Ü´0I+I—§Ñ £à–€) ß÷½/>0?¦Þ4ÄÑjµø8J´—†ÈJ-¯}=æ2ó€a)Ü”³ƒFHém£O춸Âê?¯—?Z Ó4­¿»Þ=©Ûÿ±~¥Ò?°š,Žãr¹ ×ÀDëÍØÉˆx=S« z{{'uH§4­ ‚¿÷“×ÿä/ù‹%•%Ûl{ÅšW4'škž¿fõÀê/,ûBè…[ [½!/ßÌï?¾ÿ'nýÄOþé«xU.ÊU«U¾ŒðfՃݢv»}ÂʾqÄ7Þôä›mX4ÚØâñ÷Ç—/_n:Í—sYc¢±ÿö_¾|ùöíÛëõúÄÄ„**YDdÐ]5Íìš)Ãî- Lb4ùÕ>y€VÕ3í™9÷ÍcB§#  S?*'Vfðk8j ß.´/hçîÍ?ðÀè¡uÏê†ß ;õNšL¢p‚!SE¯­S…>Õ“[0µÃ™¤?|'?=+SðíˆbÀîÓy#­ufòË!¦Û¾0„“1)*TKÒο’lPÓ4`:¶²^»CήüJ’sÛíÿ‚»ŠÅŒT³qKÈ›43ÒÂYµ+s¢(2-œ-[¶Øš€ßi)52ÓÈ…¨ÐÙÜIöI¢çDáŠIãêdqâè§ÛÓdÛ´–†7Ú ²%;¹ìnõÓ½Ó‰;&òËû¾ïûí÷¶Ó9iù”2§)°Ú/ê+žÅX’í¦¢WŸ Ev¬ØC›ÆÎg ú> u¶ƒð²°ÿßû럫7¾ØpΕ¾]ê?¾¿ÛìæÂh5œ7ë•J…‰•IE Õ.²···ÙlŽŒŒXÅ@êÝl6“$™3gN†;úv¸‚;¬qØí‡ß~zçô¹Áܸ'^T\t—»kMÏš…í…ƒñà†¡ ¿QZSjlol;b[£ÕèŽuMÒxddÄ®Ê÷ýz½N¼_òø’¥«–þô°Ÿ>tÀCI’,]±ô]?x—Ë»½íCv?¹ô˜ê#ÕgFž™˜˜€yo†”ÃU³ IDATG-I:%FçC‘“ 2g¢r[Ô…“W³:F{@Ê8Àyä ŠG¹\Ú±cG½^gZe²D^—¦­48,ˆ6GOOxž—Òø€8—w¹ çç&Ñ9ÕpR©Y*'{â@‹Þ)â4¶’•¯­_×¹=UT53z@-²ÌR©d'€Š5Xìò «ˆð ï™hm[Ue& aÒˆq:¸—¨rì9»ìk4=­Ý¾>—{e»í¢è¶|^KÄ6§¢G=SÝ]³'0Vó´WIfeES»)ysw£ëþu·uF+¸oJ‘ú°ÄÛä•/.'~ÅEI ¶i;ç’8Éÿ[>¼,l~ºé zιÜWsáŠI Þe:¡Ü+tÉɺ^y¦±„PPBQÆXšÄ<“™BŽÊçò¾ó‹*N£—ó=ñš úe(õS>Ÿ·F4’ùØ“øàñìüÇkÿã”»N‰ã¸u¶lÚ2¿>þüù=•ž£»G¯K×ýhí+Ûí¶Õd¼Ž6ÛÔÔMß‘éòyÕ# ÉD–´v»CήøŠ"ï‹_¼; ïóýß gu»¥n÷FÃÎàÅ`kºñH*UØ\9äœÅÔ:´dÙ’$)~¯^vOŸ=òŸÍû£¾u,3#Èï§iÚh4Ü”P.%|á¼Â´{£ŸjÐìRkv¶+² $Pð^Ü”M€Â2ŒÚ±è5wSc HÒÈ·Ó`¬œ¤ì%®9£ËK貞¿Õ&Ïcß´?Õ£6õì"i¨×ëCCC¹\®R®TÂJ˜ ói¾··÷ÉÒ“w•ïš—Ìsέª¬º¯ï>ç»·þê­¿êýÕŠ£W¼è×/š(O<þ‚Ç~æh 1MÅÀ\mÆÇÇ-øU«ÕF£a™©±ZS_&ÓiþL Œ«Åµ U3hY ÿ,$†´œX?¨+3«Â^™î£ŠEBXP#£b”¶›l„¨Ùlêœ#Âι‡ äè$ñ»Ÿ?3OC"£òG]¥a†Õ8I?›š-SÓM•2·‘Jv|n–¥ý õ¥ŠÖ ³íœ32!&P«óµëÔ  ½Q4«¸6 î1Ò8·»—³K¿Þýî­oxÃ}·ßž&IìyW•Jïj4^•$wLµÊÕÚùšŽVÑ~d¹«Œ¹s5/ÑO\êrßÎÙ’Àh=‡‘ sƒÒFâ¦Ü€2ˆ³ú²$bj:—±hÌHe+—a¦”Õ…v£,‰Cm…tÆDš¦år¹¯¯Ï XÙêt›T>@q õ<%´8QqWš¯©ŸG‡Eì²­w=éwâ{©K£(:~Ëñ×|íÝ#žöŸ>¤qÈòüòNØÙ\Þ|mϵïßôþ¾}¿>ê×£C£µ|픟òÀË( —ì80x§ÑhØÔh4ì}m>”OjgºIAë¡ti_™TǪy:"ÙÄN%Ztje ISMBÉl…èpO†Ú Óωקr#­Eˆ…ZS—\ÇÁï‚üºü¤ýLÙ;B@ÐùVÕ̶X[—LÖI¦žÓ†(™½ÝMy‘dr5"¢gZ߀[ªB¼Nt*åÕØŒ¬[ðj4IŒ,ÒkH×–d‘'íÃý_W»ù¿rþéŸÜ›ßìæÌ Ãp`` Ó錌Œ\DÑÚbq½³šJkB­5o˜9ÇÃ*±^‚Ѝ+µQ+_¸§èލê({Ï”ƒÕ~TG5uN³`J ¾i'E±X(—ËÃÃÖb—J%3µk  eÏv¸]å@c:`[=@‹Å"¿Ë€1tÈʲÒùlÈÔ䪈ú©Ú2TÍ^Ön#Ö«V±Ñäà.•Jƒƒƒ†ÅÙëßýâï>õúO]ðã æFs{Òž5å5›Š› Û Á`Pè/|¯ï{/‹^vÁ¾„óÃ=GöìÖ»§?xúÇݸ£´ã¶çÜöòG_Î}¶ 3Ÿ!ÓåD/@¡5«t¿.?NOaRÑNL±X$Õͼš…g]<4гáéØJÈð$»Ý®­UüäY‡aØÛÛk ]Ø3úPr¢X)‹ö²ÚCâÌe‘« 3šßö(Ùz*VMB‰O°!Ór"ÜN;“ ›¡N øfIžÂé`¿ªû©5ÊÌ|Û7%5Fý‰söÊð5-âc*ªeÓnúÀ.úúÄ'ܧ>åZ-ƒ×£(šçÜiIrM±¸~gþ•¤ÀeQ•Ëe¨AÔ¹Ýn×8ª‡¦Äy Z²µmZ;ßAö4Ù$2©[»Å{ec[jêŠ4uËŽ¢DþÞÞÞ%K–,Z´èÆo„HÆ_àÅYÈ!ÅVól^ý¦qÎ…Ù³gó¹,Odp›>:´ìøtÈ>Z^oƒcsF%À»³ƒ/#Vd\/Ã:ranÉú%·î{ëQ¹£Îyúœ¯.üê¹'‚V°-·í­7þ¨ô£íþö£FÚcã‡>xèw_öݹ{Ìýç_ÿómón›'òù¼5ìv»ÝF£aìm»ù¶ZìÞÚM«T*´-DqÏa Rf!ö19Ä3ÂzÜgbfˆãNÜeâ86æO“îŽyú¾s*hM«ów¦ ¨v&â´¹)À(°Î¼–,lhl¶Tôvé(\˜Œ 0ëSµg2ü1Åú˜hVPZ¥zx_©¸®Mê qžt†ænI—.ø?y!¦>*2½;ä슯óÏ_xÞyÕnßÇA}0MR,>´³7ŒRUZÍ?‚zLÌ`ƒa§<Ý]öNMj‹Isq‚YDdÒ X3”ßø¸êþB×Q«ûÌ_():κuëªÕêÄĈ¹1Èì@œheª¼fåtz … XærŒ@<88h}r¥)ÃÂ@ …;4¬*˜ (¢EbÛ„hL©ÇÁ°{í£™8M†hpìcÇÞ½ßÝw ÜõË=úᢱEk*k\àxqÜíç^9úÊW®yeôLtû‚ÛW/\ýƒ±ôïÑ¿¾´¾íµ7 núðÚ׫õr¹l*œ6jÇq¦§bÕž5‘F¤~eáex’`Œ™Êð“"#ãp¡‡,`‘Ý.£·ñjö¤ÈÐ-§V’Hfø‘4KÓseöÛ©j¹<ŸTµGµªÓUa±Ö––)|ƒT뤳ί¨(uŒF8pfnaÔ «ºuC0ZÍlº\hÀdÀ n‘­ tK¶þ$ê'*_NUÝÈüPbÁhszwÈÙ5#9ÛN#vÇä¼ÛÙ€“WõÙ´˜°ŽÍ³Âh3‘#bMÂ1á‘eä¢í¡àȨ2kØÞÅ Ví’rIöÄIŒ4Øâ´ \ÔrUÑY9h ©ôq75lK´V|äÉuÊBÙ*1¥q‚€ýº‰ºf² ]¸Ÿª?½;äìš/{Æ•Jq‡Bñ„1 *ŠâlÆäØæ3råzLÛï*Å… i}…LWY§*ï¦ý¶+Ôt°EYj¬T·³ZF¦M­­ÅÌ5/•$%§›é}`;§g2н„uPýýýl$%ð,2u¡‚oڻ漦-dMo;7m8ÆÈc÷"õñâ²éI[}Û}o»·yï†9VÏZ=/žw䨑kúÖü üƒëò×}¨þ¡ÇNüØàÇ‚þàŠ¾+"/rÎ]=ÿj»’?ý⃶tøý‡[Í‘yÊzÊ‹ÅF£ë̲{ë#ZϰªBÂZ»ð'è´ Xf¼°Úô·Xj‚§@ŸÎx)é¹ méÙm?€ò­>˺°WñC}Ö¶°êÉØÒÐëRÙ=ÕøÉîüÝrA»]Èè'uSZvh8là—“ä±+5lèXAH©˜À_öó°ðh CcBfÝ@öQ·r3T v‡œ]ó…fx†ò¡¤I:lQ[‚†>!a >c™©‚Å$>jÁ¤ø,© ò‚L(v§õ €²BÆTô-µÂ@û>$[šÚEg›9ëUà]íÖÙQ*j¢ TC9zT|:úêccc³gÏž4Ën·2za@uè~YÙ§}f¼×øt…BÁ@-«¥ì˜5±ga†J‰#Y©T²–Ñ|swpÇ·þÖ¿åÿííWl ·ø©\ë¸ኳgßÜsó½å{ïu÷žÓ8ç®à®|š¿§xsî¹cÏ­õ×Zqëg/üÙ«ï{µ!lv„ÙͬÕj¼»Jœáêˆ}´o…éu8‘Ÿb%3Å©3aÊ/WÇ?xqöøxwú”еêœP˜.ÍëYÏÊu´?/^\­VW¬XaE;ˆå1Ó/À‰´+ƒ>H)«>¡Ž¹°Øej^®¥¹"~Zó1…¦¹¬r.O¹øó¸Ã: ¦û”ÚV§é«*KB¹æ@ŽÄN÷߯ì9¤/e8q¬R2ª$‘ Ùß­%À¢aå)þ ¦„+]ô:ü¯% (?ç3Û–n»©iSËøìäR¦N®‘xÎ0WAš©í–Ìê$ã³°ª¸nE²3f;täBÍ9ìþ4‘‘j&†43cªF¢E¯Pï¡^˜y ¢(*‹Æ3$ü·ÛmkéXaƒhº@(·æ ó.†ê\yä•ï}ô½ö»κpÿöþ¯«½®V¨×:ïMoÚl;«uÖ¹;_ÕzÕÆÂÆbR|sýÍù4sts.ͽdô%ÿ²ð_Þðèsƒ===6j7ÄzV¢AüƒbõçF6µ:nÔ‡‰D*Ã­à¹ØÀl¦j´ó×z“ÔôN¬e2²˜º¨×©2«!{}†·¬$ ÃpáÂ…Ç{ìŠ+Ö¬YC“ƒ„ŠÌpð”F ô"cã–! Ìô[ÓÞ¤êÄk¤W¡²7‰µêy¨9„ÛYLK•ôÈ})ýQÞckïŠõ°;äìúó_‰{Û~S‘súL„©Ë¤²Â26œœÊdS~4qmÝšcf…æ?ëröLáÅúžÕ”AÑ'çVA‘ —TÑ ~€(’Ù¥:/ t“I{í×ÇÆÆ”m¡HˆŠˆXrGe”Y£är9û‡i¶™ÅŒ‰‰‰8Ž›Í¦6±ëõºM¨KE===ιf³i92 *óî^°eïû{¶÷|ßÈû^¿øì9go 7^[¼ö©à©ÁdðºüuƒÉàGú?rCõ†‹ î¦áçç|þ´m§}íà¯ÿäù×½úº÷<ø#V«U[oè4ÓÏ3$°V«Y›‡uÕjµÌ\ ,c„Sñåt2H±kKµ$;š­›h”0dñ´…Fé©k€ÒjH£) ù–½>3#±~ÌÊ•+/¿üòññqÃé*ÑÿYµ[€võ`Æ+!Û~žù¼á2x©!nʆл‡Õ›ÅH[<÷–ZØDÔî”Û&œ¸${Ä ðü‰½é´;¢¸ìžËÙõ!G !Šé¶W•ò!Š`s@^éd”/#£æ€™ P^Ùú=ö G†ÃMÌ ]̧ã‚A3TT‡€ƒÀ‰æy^¥Réíí­V«Ífº6ñ l&ïH9€Šˆ}LéUW¾ƒfm@Z¸Ø”(§ -qÈ–MÛ£´=Ì›Ú=± _*•¬„-—Ëö}ÛÉ…Bahh¨X,Zàét:o~Ë™‹Ï<¶zìÛn¼pàÂc“cOî=ùèÎуéàñíã/è¹à¶Âm Ò§GqôÁú»¥nýýý¹0×ßßo”î,ö`Ø:11a$:D‘ÍÁ®Ç:L&@Ó£ÚËÐì1Á¡@¤ÏÏ£äùjá«}°» zƒÛ…"o¼>pZ¿jȬV«Õj5ó¦6q#ÑŽ~{(ª‚­‹hjk˜ëÔL9 "+¹âZjÀ£Z5H~èÇÑ ¡3™¡&êÈÕäI+*6Žéõ©š#rS úuKÚrvY‰£\fÅн0J˨,+@ONL5»·cŽö µK†U©´N:ð¶ó-U×ÁiU¿Ö:ƒ.Ⲫg —%›ˆ=ÛǤÀ× $0 ;ÈŠÅ¢qÁ3cžèté蜒‚xY• Íx`;q”Ð~Lª ¤nGòø“jöb€¹È< `@ Џ‹Meöõõ™j ì±«Ž½vþµï^óî NÝvê§æ|êÐΡo˜xÃû~Üñ:÷çî/¤…:'lò7=Ê@lM…ô9Fa1)zÌÝ#ôÒxSc'CÊv©Ú\¡¨ëA dÙD¶×€¨Él%ÛÒ‚?M`#!S¼Wc+9…œ¾©h/’hvôƒ ÓD´¥B`³ž²u´¢²Ï¥r½TiÄ&i(¶2à¼Ý@î§Ý%mâ’YR¨)b©Ø£àèø¹gÓßrþx_ÆÍ ²Øã·äQyeJíe—* :"N\f5 S2‚JV“2´¯Ä$ß÷PÉL‰3i-5•×X;ÚþNjo‡Œ,»ìÞÞ^¼&혆%ew§Ó1Ù1;2¸oÜc‚) ¢Ç‰¬Ï¢~õÔR 9DJ¥r&Ö¹a Ç>2Cv4ÓðHc=°z½ÞÓÓc7Êf_ÝÔnœÅãññq+ëõúi?>í‚7\°lÛ²—Æ/­D•vÜ.vŠ×Œ]s@í€ë ×ýnèw¿.þºšT‡½á{ƒ{[֊£ƒ}ç»áYnÖÞþÞÍ\“Xk^2v …Z­f×fˆ£Ñ˜˜˜°³~ppж0 mh”óÔ>&‹Ê.•g‘i4*OÚBU)“§–PÇ[©AÞ‘LUÖ/gœe<º¼íᲪµž &PãvJg-Ž-M±5©Õ­~Km³AÚ4K³Åkü–5¬ ­Ê+hÍÄP¿G5aÓ_Ķ Šêˆ êŠCyµ‹ä™’Ô³iä€+’¸ì9»ò‹ÃWu3)¡Æ7%a E  ŽTæxØÌꮡT`e %Ω#ø/LÙÃd4™¾•ݨ“dÙ™b`7'c_ÆiEØ£6ÊèÍd¨z6!X@⬠»vÒqŽPúd0 €Gm¿ag‡^{R(¬˜k]û¼v@3Öjé¤a~lÚväkùso:wùþËošSàü•Õ_©T* ¯qPá «óW¯Ì¯<'Žsî¶üm®r…¼¸ýâáŠ/U¿Ô ;[Ði ³¶ÖŽ? 9vÊ(o‚ŠÜ^Á’YÕfÖÇíÍxg —L¹Å‹gÇà “Å Í ”Þ¦4Eº*3¨iÊ%Ñü .%|Kõâ4~”ÈP¶XngYk*'ë éV•hµñ¶EHiîDnN­@Œ¡!¨ÁŸ=À …%Âé°Ç…d`–{a«=9¶¤Îí9»x4'CY!ÆôÑÇ66*Qljf «*Ž[Õ£Ý&ëÉQÜΆ1zÈÚ‚Ó¡™rg:t©, Ee*YŽv1Žд”$Jñ¡#°×t(0Âa§mXœFé„«z˜’ í¥ì Và‘çØÛÛkÓû¤É´ël²Ò º ÙµÛmà +•ŠñƒArŒF ÖÚÓÓc˜Û–-[Ò4]úÔÒ#6Q.—óùüŽhGµZ Ãp^}ÞY[ÏÚгá‹Ïù¢‚žµý¬Ñ‚0 Ÿ×~Þât±ŸóÒ¶Î ‰¹!¨v¾Ûý©×ëLؽµv‹Aš—0õ¥ ujDž&KZ´¶iPš¨ãƒ®%ð(7CMMt˜TÓÒNê&¨êÚ6J“˨­3F­‡iFVC­•à¾ë>Uf#ñê?5Uê„–ïêV@óÒV áÓÞÚ“RüMAg¸¨yO­{!ì¨'·‰wÍÒv‡œ]öÅPˆõx´ذL5ƒS¨ššWc4GâUùƒ1²T6uà «eç zûÔé*ȦÎíŠ-dd¸7Qª’9zòM²4lìÅí¤YÑêP{}qˆRhÒðñI¨É é`Y7Ûn£5ÌŸ7ž¬ŒC4…f€Å íIpyö§È¤½µZÍ2GÃîM¡ÀîCOOQ ¬o)ˆÁ;HU«Õ±±±=ƒ=— .9¸qp¹§ÁÞݽ+~erX8èb~l´·(Š˜ñ²' Îi”îJ¥BX­×ëår™G ­¦ùªAÀÝVR¢’qñ-µ:'Nk4Ë~gR¥0ÇfîZØbÎŒRiû!ãæIZÆŒ‹æûà·„«Ì¼AÆ-Py(jãK Ö&ÎÁ É«u ÅLö¶‚¼©}Xl•ꉲ‰Z'ºDjñ Š‚ÚU¢6Õx:´ßv‡œ]F@ÂK§5i‰++TÕ” è±,•• g†¬ÊÍklÔëu>ÈÁÚ©š5˜yž­Ý*1Ò^CÔË–ÿRkraý]õÁ3M± ?;ñ-=gÖ>#XŠªæ doªH7QÍnµZÆÕjµ¾¾>zÑá¼I‰F•æD¯Å^¤V«•Ëe“À©Õj•JņO¡ÒÚOšPg&ìvÓ¬rÚ·±o1)FQTê®â&&&ìqOp2Hhç—QÔŒÎ`˜B=Õjg9ÓS°©Ò{eSIðä‹LèÅÓ–ºŠ~Ú³3#m7åZDÔ±âÆV)á”×*d'«é6å;ë“&çyæ¦C %›å¥¦ ÷iôÊ(Üè˜=«*f:p«)'³ÌFW³„Ò‚(+ ¼Dƒ:ŽsÈ>J{# Ó£m¶°©.¨¬ålÙ!uűjЩpÜî³+«œŒ ¹òG©Z|숱Òªñqê\%•ZJ ’£®M*©Ñ³›"ƒ  2p[%Ðá×ÊjƒëT2¬uÖ¢åK”ÊHÐCþQþ®ý°4dÁt˜ì&[Œ‡ØF·©ÓéXWß>µ½š•#Öû±7µIL›þÑn3cðv¤Ú)Öú2™QˆFŒ¡Úb¤mB……ÓÚbÖ˜©aÜL‹vZš¾ —i—W*•fÏž½eËb-¿¨Í!"E0~æÂÖF·²¹xjX‰£EäDbCH0z IDATYsìßb±h'ïLs¦LäÈzP³v;›ô(Ñ@ A `«Œœvkˆj,ZUyàç!¨ã0x)N¬‚øÃ[«€JÔg²ÏÝ!gW~©S¬J^*…LŸöf˜i`k!ËÁ … -îÆ¹h¿È¥Î¿ÒwwO£d¼ahÿ¸½ã”é ItI­<¬y Á‰â™nBNXÁ3ír7.O=Nœèn9ñ_ÑA%6‡§€îº/ê´H\áªèçƒc°!MwY}‰ XæÀQëDãÉaS%¬ZjI—Ân–“®ZuÏá÷A0»3ûäO6Vz¥Rñã\†Õ‘Ý„Üe'¾‰ñ˜ ŽçyõzÝê°f³i‡£G“|¾µ˜£1ƪÆQr—‚¥õz}óæÍyáf•ÛyªŸ~$$l•\RÊ .|¬%mŽRøò}xT†ýl ¡eÄ©3¡JÅ0LFõŒTnFBµ±U7Ö(ÚÚ´d’OY"¬ûCy\äÔ3‡]H54 ²ÇÊk¼¡Ab™¸ý sQj| ¾¢N§ù/'Vc8 ª³'T`’Ñ×a…ðëJÊH+©? ½O¡ÃàíÔËJ'iT‘V£…Rx”‚¨2q)¡&iÅCášnÌ ùTÍdwÈÙÅô( W”ù:œ—¡öhœ§vT™;éüN½ÏIãׯ}G÷MîÉ$î¹°ÇÿŒ?vÛØÀ«ìPv³ÜG%lQ@aÀ2‹¨7×kKÈn]£Ñ8lÝa?\ü÷m}›KÑ ”™f¾8ØÏXüSpøEŠ÷Z­V©T츱³Ï̼Õ^“¼Ä>»Êö@lƒ1Ú£¦–TÒКùE5{6DB—ŽS•ÌÌÊ)XöhtDZê•iFƒ“‡õövۋ㯋§u:ÝNçWS£Kª÷׎_g¼F§ÖàL«QâÕötÔ-—×Qš<Èù«2ÇìæX¥«ãk0)”§“™rg³¨{†^ëDûQ!ÁÝ!g—…ôÇåP™#í”àüa™Ç“‰¶›ò°¡N¹t2«š5kÖÉ'ŸÜét®¾úêuëÖÅ.¦³MæETqh{G[öƒ+P‡Égµ3©T"bŽnèx©¶|ÉÁ)zÈË:wâ1ŒbíÍmaÁê»cì- Øa:11aó+8@]7ãÔ³ò1ŽãuëÖíØ±cÖ¬YsæÌQq-è×€ŸÖ<3hÂ} ‡xÒËÙþéû~§Ý1€¥X,Λ7olllûöívµq7Í´•šÔ›%-L©Úäò(§´Ær¤ ÀIÚš[Æ‚³_¡t ·£wÏn²}´ ª u-ùµm í»ØÂ°»¡„xeÀ@ѵd‡á°LdV^¥JêˆLš¦ù 8±Ó Óôêb±åÜ×}ÿÜn·•Ï?*3­Ìb …ÞÞ^!Ió‘L…}QGTŸ4·³?¡-3»*ž”’¤Ñ‡WF6 ¶ªöøx0 ©‡HP‚ œ:4ª4"r|nJJ˜ih·[cíCÔцgÆEœ*Ýž*„­ƒ@¯£òJ¾ïû+ýöþíüê|EwÞyg»ÝuÎ%&¹59XdvŠÙk’Ý l¸„jΓ’2_éĤÇzé$ª”;,SóÝÉX0@ØË y„à Ø(Y¸oj8D¤ç|É0#Àg¨í´Ñ¥ÌWôê1ˆãù ôõõõööúoµ'»ÛÙ5K†l£š¡ÀÐÐ¥QÕj5š@C£C;úvì›îtƒ‘‘«JsÏŸê¶»i7µzËM‰6V*ÃîLÊÚ¢L3‹+‘‡±i§Ó3zW4“m½1šCiâÄ 4RA6ê¶Œí˜ÛÙ‰C}*©˜úÔ]£Ó`ÊÐD‡„/ÃrÔ҇͘Ë厫×ç8÷µb±T*•’¤Ñlþ£ï¹ÓI¢è©1˜½öÚkÙ²e>úèÓO?yæš¹¨R ;£Ð¡Ì4UÇP?ÊV{;*V¦’w4óãTUAµw#KPTM'ÄiîfxC»CÎ.ûRæçŠó:ÞΚ©"z†ó¦Óøj—†añ+ÅÖ9-÷>722r÷Ýw`:gvúŽéKÜ´6”Ð@5è¢G+þœ+j|X¤œ/^XôjúkŸ"ݺ=HÌ¡¥¥¬ƒ>ÜI ´;¯Ò¼¯róT GÌÕ¬º2˜AO ö›§>žpä³Yޱ5Émò΂¤¼l½^{Å;®Ø÷þ}{âžjµjV:QݱäŽÃ:|{m{¹\®T*œ,X¸RBÑO²HL{9û¾Ý:ý „hŽ —|Âx„m%4Bo±WS§d  ²Wæ1㮊©*ææ¦¬Þ2b9NŒAu¨K$ÎM5åÅÙ+,uîþ)mŽûGo‘Æ^Ê ©™.†W0îžQ 0d샞™ñµŒ lÑ(Š¢çßôü›½yþ†ùGÞ{d.—-ÞðÒöÞ{Öð¬­ã[ëÜh4 Æîh$›JÓÔ&xì.)Ž62g“…v öÑÀRÔ@î¾Ò@xŽŠs*iXu´sc¡Ë„÷yè. VÑ–ÓJ‘wä$U!¾L£”ýµR[ßêti©tj«Õ©×ïœBêNïv»Î]^*ùSd‘‘‘jµÊÌ´Ç´´¥ˆÑcÞ~¬pá”MD aâÐôW즣̃á$V¹)ñ!´ …Âì³—íX¶yñæËÞ{™çy~qBo·×oûµnmdd$‚9sæáÂÄ¼Íø²Ýn›`ÝIPa=¥ºÙ±kÙŽMpÊyjp¨à(ãjç©}ä|>O9•9•¶@I#Ú8qf‚Ž¡¯ u^ó˜gÍÿÀŽ2-z}döPFÒôÛ¹Ü9ív3Ž[,þU·ÛMÓïJñ¡Ì Ö§NX+ÙRé‚5qP)Š3î‰òд4‡e ³}:FJY;ÇJïÌ|~XY©*Þs]³·?xó'rTµLÅWTôÉ’YhÍ*iâaDÆ69G¤›’ŸaÆÛÕœ_óK§—×öƒNN“xý¥$:?êyE$ÿµ|ÆòËËF#æµ Sz·2­UšÓ2(³Z 8Ñ&0*a^Á0)Wö'Âö¦ˆ¯-2Ä5Ñퟜª:2ÂgdÂ^bbÂŽ “öEÔÌ8`òyõƒØe›º³Qzx´IcÚoõŒôxÿK\šËå‚þ`xÉð°ç…{<¶G£ÖX¿~ýÈÈÈ{ì1{öl»’;v0ßƒŽœaw¸™™´‚7v߬YE†¤B¦ube¦ ‡é ÁÓÉM™=J‰ÈÖýbl…® Ç7¶uü¢è¬]šžS“®ñà2ZM< {ÖÝn·Q(|¦Rù|£±¸ÝîI’¯ü+´1ÐÓ†“f9DV`I%jfX- ]ª¬¡âñÊ´V´M4íÊX ¿ÝŒIj»oP‡ˆ(Ј¬œRPànuUØrve°ࣺ÷èÆhãþOîoV:Ê¿`]jËaù>F>¦Ä£ø$s6Gp Šê ÏQWJöSI f3$(¨HY«ºïÓ*ñ‚4§ÚºÃ¹ÊœÈngyM*ËI磿µ³¶˜-By^_k>„Á*X¥h¹ÒÜÒ£&¤›jß Suµ·L…@®šjÞᦴ¨µ“Šo/à62¸¤ä^8w‡œ]\åX5ŠÀ8Ç"šÑØyÄÏëÌe»›šÌ'¤Qš0kÉdÐ¥rqšO®øx›5kÖž{î¹zõêI:M ¢!¢6<ºÉM¹«ÙlR×ë`ž2ÊºÖøšÑŸæà@õR±;XŠeã) ú ðX4‚.L“©P(ØwÈUwRš/M²{“ðé`0šÝ´F£a} žžË9êõºEwƒL¹Z⥅±(Œ6 nZøÈÂÒ¥í…íår¹X,îóÐ>eæ>ÍÒæR§ÓÙ¶m›aeœ\LcWMgúìÅMM«[HÕÈ’T4+RíðC6S¥“’©}^'Ö‚öO¤'Q‡ CF¥Rªì}9UT)£ÚÉé¬:ÿýªdaoÍà 7“@¥©ca,Bê`ÜT3fƒ†"jnûÑ:Æ3Ô¼ v€N@q2ÿoÑ(”úA!`­Š41¥Á©ÔfËtP/C’Ê4v‡œ]ÀX›®!dÐÍ0Ù„€«0·¦r*®lù ÕiÔR‹CN´+lw™?J¦keÇÁAë°Vþáüøø¸ÙºLî¨çÇÞovjóªä¾M¥¡~¡ºÈª.…N",¬ÕÐS¦.p± yÏóªÕ*i£žþê; þÖHD«¦=L…Îí ³zb¦E<YšøÞDþ¸¼ Ãs¼6Ïo^Rèú]ÆttΉ†ãdg:̬BôÏÊ™aÇÚñª>Ù3•t-ü˜ÆåØØ˜ÑÌìðRP^IÒÔR y‹k«@©ØÞð}_ÈÜí]ŒŽŒè!2 X* ¤ôhÕ\tm¯Õj;M¶NM}öõõYlãç :Ý…W¦MÛŒƒéÙíµêÇ(Ôvëõz½^7éû_‚‡õù3Ëܺ™)%%˜1ˆ£úIåof ¡E s¦"™ö!4×f×(iÌî Ú4r3ô.íóR*ûN×6aÆM‰9éþR¨–ê\Å–Ôÿ"Š¢jµ »Õ‰T=/e¥[…¤ƒeC¨°xC¨Pú+øÒÔ%K=J,åBõ\¥Á!S0Ù³;äìâ/ƒJ2Ú6PVÔvÐV€Ú3$ϲ݈>¼Ò½@ÃðgT̆­ËËÞÔE®ôƒRýšzá+…ü}ù Z¯oµßÚ.}¥äÓ*™J3å}9ˆY‚$Ë8tûÑ^Rka"JÆŠC¤ ­8°-§2Š„‡­ŒàÙKYÉ*ïhûžÛz6ýí¦íl\5hЙçy}}}kŽXS\_,¯*ODXX®cÇÅ„–g¼¦Ý)c1(Â.ÆQÚ{§àS “œÃÞ×^V=9»H+ í'5ûQA Ú-AµtP…ãŸõ£e=Eí~gÜÐ3Ò ìu Êø*tÁØï«Jq™äO‹?`Xš¦óOƒŠ`€ubv}L5mÕ™ªaæF'=µ; ‘›Ôê¦& »CÎÿ¿¯'žp_ì.¼ÐýÓ?¹|À-Zôk¨tû¨‰ X€Q2•˼‹ŽÑᢆ:йºXn­æIf]×Ë·ó¥ JÊêQo$¤8ß3Ô8'FÅÔäF·»—ÈÁ˜'º;Êp£Õ,Pû l$ *X¤i8&YCå«ÑFTe_tt WÑ~zZ;Òï±QeFû8FI¥¸ìX0(3zž$Aù™òؾci1xxÀnÂÚ¥kÛ=í¡-CI+IÜN½ivåXøX+„R©d9FÃò,ôékËG=7I‡X­¨ÇºÐâÜêÄõY¹dKÚª„O¡ó§Dú àÃH!´ŠMåyXr¶Â-Œi5£þ#úaíèWKÓLÿÆjJã;èÖ½l G¦òFÇôaÉÆì2R :T€ “V]zìd¦z57Õ×Ïh?rZ±a™£r$»k¿Ï×òåîúëݹ纅 Ýé§»«®r§æöÛï,t˜1WÑ€djŒê3È()0Œ"üÖ•Fˆâ¼`tÎë$iâR|+Èä£6" ÒÈDG]Ùn,2u'ÔúIé­ZlÁxardïâ`³¥Ux^ÝSEM± i D蹯`—v’2·=›à¡8€¯"Áˆ›Á8 ÐC¢AéŒóã9[_·uýÂõ[—l,|ý ïw}³›Õò¦aFndÄ´ÃÎJ :vÙ@q >èVîµ5À©Hh稼žæIJ5V@U“•7<ÓƒípÕ/ЃUÑÞEG2Ö/ÔJq¤Ýb‡¸cÊ)%Ú9Ñã€~’12çncu*€µ©.iíÓØKÙ'SýF ÄW5j !¼1ó 4¢­Nk(CG6¥¸w‡œÿîkëV÷Íoº³Ïv :çÜsŸë‚À}ö³îË_vÅâÿ¸ÊÑ©4:ÈLeX:üôpxtX^RÝc´uF+wk®ôÒRš¦ñ’¸þ¹zþÞ¼÷mÏëxêAöÅô‰ïgÚ0ʂͩµ>ÓÊ”Ÿ¡ðý5lƒáX7›QFÔ>NÇô4ÿM’d||Ü÷ýÚ µÊ;*þ˜Ÿ¦iè‡ñp<ôÚ¡‰ONäŽÈåWÍ+UiS’’âT˜!ò¡Í ჲV«áK¶©ŽÈ™ È ÉH@ùöAítaºí5Û\àÂ0ÜóÁ=Ë›Êýõ—ËekÏà VC–  $m1¹9ãךl¶zŠ Î,åI¤TÑΉ擶Ùl&Is‹”ƪÈL°³ƒ”¯ôz`àÏ"0×µßÔ.~¯X|e±Ó鸗ºÖZ¹;rÅïsiNC²©)YËÍP$Sx\—à¤LŒ-ÐÕNŠ8¨ ÁýôPí½(­ò™WA*rãX*¬¢l=l² Õ" „j«%§Œ<ÄŸ«¬ç¯~å~ñ wÛmîcû=~kÏ=Ýg¸«¯v§žê-r=æ~øCwÞyÿcTv‡£òq²¥cŒ|Ú)f+É’ÐÌùËH¶%”;O!Ý/uºÁ+>üàÓO?}ñâÅ6l¸æškî¸ãŽúæúøgÇ»Ïíæ>+^]Œ¼(MSÿ ¿xJ±{e·´oÉ[3ÝQäd0Q½5Áe>FA6-P˜mT~†Ü\H 蜬ñšˆ!* IÉlÓ@Ð+¢üoò®9­û0évõó°õ’VáÁ‚×õ4X͹¶a™Õw;ûki?I‡´SEW‰'Èo)«›þPf²¶müeã ýì¡Q+* ëY_Ý¿Ú.¶çÝ7ϸé ï¶œÒ45ùj;©,ü‰Û¡c½»0ˆÂSp¨\”t­·ü’Ÿº4UÞÆ×Ÿ°Ååcjv¥¡%3¢nVÙ»)Õ%­®4c ­Ÿ]/¼¤àù^Êårt_”[¾ö“ZîÚ\ÚN©Ø,à±z‰4P¹QÚõ¤F§ù¤yµ»®R•QWCnmÚ4…›nIªŽý[!HÝžÔYJuqô­3dÝ}*ŠªÙ§~@Lf‘æú¿r~–÷#¸[ougœá?Üþï÷»K—ºSNq]äžzÊ]~¹{ç;ݾûþÜ÷W®sc§qC£}aÛö=@xMªñÇJ²D8ãu¨àÚ–ÇíC¹ v@çóùþþþC=tÙ²e .<äC^ô’U¯­6ßÕ¬]ŸséœÀµëjåcËsæÌ±1û¿ÚjëÀ9{à”Ü6;|îܹ½½½j[¢©ù|ÉgÎqôO3 ^ôZLĉ=¢BcJÅ=¦ /‹sæÂnX,,X°dÉ»àܹ֑­4—ª3÷ÌÞ¬ŽÑÑѱ´=£ §ŽÇm€S DZìeµdTG{#»ýnÔõ^ÜÛ®·­"ºihÖ=³6±ÙlršÍfcêË ]ÆÇÇ'&&ÆÇÇùKµZ1OûIÖÂzllŒiSúÌæ»\.— r´öXüθ~}=|" ïÃ{ÃÖ‡[­/·J¥ROOliÜÔäIÙ ö'³´ˆüÏ”!`_Ø”ê©ÜèÆùâ§‹vå .\´hQ¹\N’Ä;×k|²Aîo]+”î "ä@%Ï´ZÑ¡ Áˆ¬‚A.­hîjƉ” 4²¢Ë)‘‘¿£•…± Ñš«¬BeU@°§oG U#"­–‹Øehõ6Ó(èÏ Êyê)wÉ%îâ‹]¥âöÜÓ9ç>÷9÷ÁþÛA¹/|Áy¦ûÆ7\oïréëܺwòîôà´òÞŠçyÉÁIõ¶jâMŨi_ë6U ±a5ÆPx—Ù:•‡aQò´‘vkÝmÍm<ðÀŠ+/^¼qãÆKO¸tîÉs;ÝÙ¾pûÒ‘¥›~±©MÿÖs¶¾åè·ÜzÉ­k×®õëGÏ™6ÊÌCáäÈkVQðP§,U³–ÉVËsU8]'!4]Õn­ ò8ªòn|-õ­õ|/‹Ë–-[ºté•W^i­¯zP7M¹éŒÁ9r[PUØJ•7 «:uO·ƒñO»V‹8ÑáÓΠp 9çZû´jËjó>3Ïó½Ù³gïµ×^›6mÚ¼ys¸2,ü¶ðôËŸÞëç{)" ?êSHFG±—¶™'šRöÙi omeŸå(ÛŽÚæöp=gö$Û“À ºÝná¾BxpØúbkÏOí911a/HÀ‰‰(ª~:….aÊé qf•qjëT™b“çyÝú…K …raéÒ¥§žzj©Tºì²Ë~øa¹_{AUÊjÔÑ'²Ð¶l‰ê¨Ó.1f›ÞUïÁF£aüÅ µúÉÀãÔHã±=Ü8ŽMÙˆTF9šÍddUDwÕœæ1±q2úp8ÿ44=ÏsÿýîÊ+§[/žç^ûZW¯»o}˽ç=¿GÔéïw×\ó‡_úIž¸ê¸¯gyA~$ß{to훵øáØ=5=„¥êÎ335;†Ô!”öo†ƒ _0kÕaúp:qÜÄß{âÒK/]²dÉê¾ÕÛG·ïsÈ>óß0¿5Ü:锓MõÛ=÷ܳbÅŠjµZ*•rGäò«óQ;rÉäg7ý+J bj¡PÀ‡‘é}B†«™Ã¤èèh7hLÆ~D½”:Nê¥i˜&õ¤R©qÄGyä­·ÞºqãÆöx;nÇ‘?Y'ÁC³‚’¨ Q…ƒ.¯™¿Ó ,ôêÍÕò[ñ‚8|2 FƒE‹ nÚ´iëÖ­Þ6¯[ëÖæÖâ±X*tLÆgŸÍ0!zMtTÂ7ßÑ¡z£N©SŸs.N&gxñ®FŠ=.xD †VȱP‡lkeò:B߯3_¬32¾ ¢…I0ˆu - UQ—âo‹c;#Yùõ•ããã«Ï]ÝivzNé9uàT/ïÝ;xïñÇ?øàƒKî]òÙ7~vÖ¦YišvNì”o,kYM0ÈL®(n†‰A ¨ XÐRc>²› ãŠøSìS4°îir¨È®žÚš›´¼ü¡×¾¶íßäG#‘6¶³-ÿÃ|ÒH3iÒèp ð[‘¸™G D…>`Ž01J°aeÚpoê(™¹Mchf<òHµZ}òÉ'‘UMÝä• -ÁýÉH5 Œˆ:öˆ€`צ¤~רխVËÍsÉQIùŒò^ó÷zÛÛÞ¶ß~ûýêW¿úá8þÌx÷7Ý‘ô¬èé"îêä¬7j)͹¬x2ÎLU®8mcñ\÷í]ÿ+þòå˯¼òÊ8ŽW­ZEQ÷´n᪂]ØNT£ØqN$;qVe⛈vÅ€ á§)5Ya ˜#sòFéyö…æ¼ÖRdçØ–6Ö"ñFÚívùûåÊu•‘ÓFb/޼hð’Á`kº”H½®pK-·fðš•2jÄ¢Ñ@âÿÖo-i¥Oà èyž×}w7š•n,1å®ãúÖÚl6›¢_çóI½¿ÕúL©Dã=#Ù’¦ió=ÍÒE%oµ—¤IÇi5-¾³Øùp'><öžñ¨,Ñ8Wõ³éçwýµ;‚P  5PÇ×€}äÄu—¢P!A#2óË Çñ[l `µÂ㈧Œ`Éa!¯hv;l0=àG~…e•¥WQdI-€ÌÂMVTóÏU}à‘GÜQG¹ãŽ›üçßü»â wÅî´Óþh—~±»øýKßß=£›ûf.ŽãôдqQ£xK1Ý©W6-(U3|\º‘˜‹ ½>wî\çÜÖ­[3[:#Ы²²Åï;;ëZ¿éÜMF#y&É]“Ë=•‹¶F0´FÉ õ¢˜} Ĉ%MÓø¤¸òŽÊœÒœEû/êíí]¿~}zYºý‚íñÜ8÷LNË5ûøí/µ W Ï"¨ä>œk^ÔÌ$¯Öœ@öðªuÓ*ªÀÆV®}:Š3pN¬93™)£Ôëׯ§µƒ^9£Ü1¦s°h´“¾:ø;ÚÏè ÐßæÜç@¬|£2YSú© ¾|´ÜT;¦ìgµ#²Š“£^´™%å׆«ÃàûA²wRÿN=-¤Î¹ðÚ°ø³¢wŸ—z©Ö00=ÏûR»}m©ôÛb±ÛíNÁ¿´ZžR?S®p¡Ph¼¡áßçû›ý8‰uˆ'ü~Ø=§[¼·Œ0`gél<£Ž¸Ì)ˆ]C­©~u•V¹3œèÔèšÌ Þ¦IS½Ts]‰ÀqçH¡(©Á¤ÐµÙiýeóÓ’ÑadMRUÙ“˜ªúyV3@ì æ½ºïü9…œ«®rsçº×¼fú;ù¼{ë[ÝÅ»»îr/{ÙçÒ_ì^|Ѫ‹Ž­;ñ‹ Ïyþoýâ)E¿í{‘—¸d¦2¼_¥)›£¶9Zªn ”0e ¨¦8‹Ÿ¦Ž “Ù-ÒXNß… õä¶ïB8¹U§jY'"#´‘È0trÃ:mvქ¢f!çÔSÝÅ»ë®soûäwZ-wÅî9Ïù£ÅûªÄ•üÕùð;a=ÓÑkL?•‘‰w ”|fèÔk¶Ýn?õÔSsà F¬šÄÔ"­V+nÆvÃ9ç§‚Ç™£\¹žFJÁí‘l,ÆpÇi>MšI!_˜?þ‚ Úíö¦M›<Ï £Ð\.Ú©ÎÓë×9ê8޽ÀsÞNúZpmùS)›pµù&<+HkÜäÌý·I=¸UXPsÏõ‚U K)ã ñù_ŠE:v è UlUÐWG>ƒ•Ü”y+B`†ÆÕ­T¡0¬‚›i|©Rc„pç\PŸ® ½0 FÔ£ç{^- ŸÉå˜iAðtš6’ä°4ýE#ÓiŸ:Ißù¾ï÷ôô<ïyÏk·Û«W¯¶}y‘²T¬:íçǬBõ<ÏäHøt´EA*Fg <t“j;G@ÕDÊ kÊÐ 8L2¤ƒ®Ô¶é˜£‹Cùb!Ö~ÝÂ'CtdÕ OçuZ“qê¦Ùb*CDÄ>ÑLâûŸ4IZ¿>øA×h¸o~sòŸÿïÿ¹}÷u'ôG¾zUŠe¯*©Q“;t ;MjO1JµúqâHhê& ‡éÖbå¹:‘°49gÕ‰Ç6-LªÌø‹má@#›È¤Z&ΛL'GFF¶lÙR­VGGGa›p²d¾ï¿^lþmÓîÏøø83óÑ{£Â· :v£­u D³5Š;ÑûR_)bÀ3#yB‡C¥nì'˜P-E'*úÜm{:ÌjéΓYB¼ @Ÿî€c(uBöµóZȇÖLVg3{—f³É‰¦P…”¬c§S5ãããpê´ÿLoƒ»D}O¡ðç½J04Žcß¹´Ûår÷LY°«msîžœ;Ø¥³Ójµú³Ÿýì–[ni4¾ï§G§ÞÞ?¾“ßL[Lõ™F/ŽSo·Ì$£rØ80Í” •FQ)«u…g-Û§ÊQ†˜úÿ±÷¥q–UÕõûœs‡7Tuu624c£"HJ‚# AAFã< â€§‰Š à5¨$# 6SËÔ4t7ôô\Ã{ïŽçü?ìW«VÝâÃ?jdH×~m[ýÞÎ9{ïµ×^kf‘xÓ¦Á懸-S³ÔÜiQò¢Âfë<®kõÃ1ÄÕâËa|âÿØ\Nãçõ¯çäâ‹åƒ’OüÓ_=‹Ú‚~£›ƒq✴a¥{^—“—ÐÕ€&‚‡F/nlBŽ)Œç`ÃA™çÀÕy œãŒt£Ä¦N—Äå+Êñz|éÒ¥·ÞzëÒ¥K7mÚT×uö†¬}YÛy×ívuÅ{rEâ_éñiø¢úeuò½¤!b†€î4_*FäPþë>kë"Åc­dj<¦À°!L!Ð7‹Ñ6܉ùQB&@ƒÃšmçÓ‘(O‘›ã+¤ —)¸x`e,Šæ«›7¨´LÁ@Rö<‚ÑÛc< kŒù®µŸíõôiÿÃÔÔ¿ÅñO§ÛZF mÞ–úE^æË`0X¹råºuë†TŽg†øž8Œ”€váX¨{!,} ìæécݬݢòhXoØkº£Ù®­éqý!³Õ˜ 3‹aÖÕjéÔ±eö¹À~8Ì©°S–9g)O¦ƒ‹9[ï°Ð»VũÐ7¾ÌW‚\ÐÃÒØþoÐD$Žåu¯“‹/–׿þëGäꑇ*åŸYÔ RÈäœYu]«G zźš¡Ú„¾˜6º rî22\t¹S­˜¹òÀ& É´´3ÄÁ«q;ºßcO¬ß²>»'kµZ™Ï²'eåÎet]TÕn»í¶ÓN;­\¹ríÚµ¸ö9íñÿO.Kâ_ÇFLõìjË+¶¤g¤ÚKg2ÈJ2Æ© ÈùÆ ¨0%ŽŽR6ý}ÁÙW Pú¥ˆÙ8VX7Z?—§='vEœÐ‰ÔUȃs ·Ì ܗfE>öïÑ¿DÓ À0[Áše³Ù¿UW çPIƒ"_Æš‰k‰s—ˆ|8ˬÈWZ­Û¬õEÁê,ܯNNOz_ï™ “~&;ÏN}f*þ׸{M×'ž1L a ù¡ Ó¥‚QH* 6:¬8|y€L¦ý§ñôXT©ÁæÂœ.‰U@VÐ sņZŒÀâØ 8$ð.>÷ÙEÏç f–9,i‘Éâ ¡ãÂ#Ã¥áññ/䈈srÆì ²o·ÛH¡×„dY¦ªƒ Bn40ÏàyÖÐ%ušFi{ ax…©ò¹Cï¬J‚òœؾ“GÐú¥2„Ð~s;ÿÇ<ϷܹEDB'Ï,âïÄöV[Úr||\»J,8è–¸yÇÌëŸÜï¿­oÄÄÿ3*"¹Éqžr¥ÈYXƒŽÑàŽ7\å™SÀ£µ(4aJÄ9nÉ0)ä=ݓ裨E…H7çጠ&lú GAÖ…QЈ!€nòhžCDŽ‹:ß°ƒä*$Pß°fç4ÀáeÉ'>1þ!×ur«só¼¯En®kC^A ÕA1…I_ž†'‡ò¥±=;rôHA;FlFHùSÃã£áNËÉJæH¦%Úk°af ¾KƒYC/y 6ùQu±×"OÉ=IzFÚØbh!0} 3‰`¦LK[rwÅÇ0¯b3 TŒyòz€êb<®Ü™Ç\C¾¹l®­¿Ðÿzß-qu0µÃ2ò@Tði8‘Ûí6"c½«Ž‹4cñ´Z-dëø·<«ÄqG0ÌÐt=,X° „011àú\TÆl凨~Xݨø!³÷Ë=Áy€‘EhæÊì7&¬¹½ÑÐÑÕ¨+ÛÆ¤ Ï6äè«”'Zªˆ£K ¯YaUg—¥—¤­Û[!„섬øhÑùëËi³º6JLzÇã, ð/Ø­È_qJ`Ö[7…nX$ºs·…œGò‡gàÑ¢ÇÞ(ŠB'ï¸FFM-¤!j!û/¼@žöO;ƒ³Àb¬¸®§U=VçÛç¾ö¾òÑš&ll8éߣ+vtPÎó9 [ø°•Ÿƒœƒ£“¬ÿ…;/ªLdÖ€2´…3—(Œ#³ßàP¨Rï[PÁÒÿöÏé»]ë¼–ä$´Z­Ö©­ìجV?ù\‚Ëž{~é’ÐzK •*ÀÏrÌ}¹KõÖ ›ÆzKºŠXO ê èhx`˜N)²åP_ðŒãÀ%ˆãBçzËbDÈQM¶¹n웉{g‚Ã\@¯…aü…ĨdÚ0—©Æ(yQç!ÁÂL>DK"¤uô‰iä¶ þÜæÇç#/1…‘ $º.J’¤ÿ³þèóFAKa\<[©(b°¤Yêp®”; 8ü¨@‰>=ðïÿ¯ Þ<ʰ5}s˜ †Ü,"‚zÐVaY!“ú qÏC°"ÆÁÍíD™©§ìnÖïåCùx^.)ÓëSs¿ë‘>>¼¨4ºàÕÈlë-ÄNî ùϜֶ‚盨´P˳±n#~k` ¥ÁÜÓ£|!Œªð9ޝÀ,+ÁÀ)U™ë Óq§zÈE|b%±D«#çIŒr&! +‚ÙÛD»Eõêš1@œÂ€hpn¢¢b™öY@²ÌÉ ° Zœ1†ƒŽ³„q2"‡©´åð6QR`å0ȃTFïNq!ð¶O±ã8Óùx´ç€,²ÉÆ—¸)ôŠ8:"ôb@ †¥qxýà(çDüûFÁÊà±bS½E¤>¼¶¿µ¡Œ5bDD|îMeÜWT¸ÅO©cb³0¯¯FØ4I•iUY½Y69d)Æ'„ëðÚcûê9Aã H”6ÀQÅë¢Éx=ÝaSêïa·þ!„#‘Éæ›».þMœž‘¶Ïl^4:ºËhxC;0ÓxÇ=·7bàÂ@XÀºÄ?ä¹}´[øÓÐ9‚gÐXU_„á5¥óáÏaB¤çòbޝëA%—»÷@ظ[Îé|¯×E˜JF¼ûtkœ‰ïˆu1Ì›7o˜ÉÞb%•|Ÿu£7<°É¾yó¬[ÁýM¥¹Îfp©a5Æ#|Ûá¿Å÷ò²o´Ç‰™ ϼ,H#HèÈ?: TLÄx…y^Ql.…·†‚ž¥+¸UÆ« ‹Ä9722òÄ'>|6™ö"B8äöjÀ ö ÃÂ(»Y! ñipò úZÄÍžáYq¹-O)97åç£i@ÿð0'CLÞCaÛ$,!ðqìüßžËytk<)Æí=Îx"yÒØÉœàè;\«ã¬¦Ë”½¿¸Á–›r^˜·/n‡_ Ž;…Ž»ç¸'<ó õh•Ç—ìÆÈøW!è@‚ñ‰[À0#+`j,”ÙîÂ8¿4ÉE/áÕê î0 Ê¯œþAÉÒÐðÒjµ0S¹*ÄcdOÏDÆñ´#¢SGlê#¤~­Ÿ£*œ"2::ºï¾û.X°€¡=&²,ƒÎ¸ˆ bž(ÎÆõ;Nê}a2ŸIöPÖá¹?=Vð]Â@áËʰ{Àˆ*๡ISX¬š Ñ3dÐØS*¡¤Ã+ˆp€¬Á E…ÍnfúZTADƒQYà{èÒñÅGQ´×^{}ôÑ###ðÀƒ,lêÌ-^N¼ }‡‚‰õÐ)¦’2ƒ\m·Ýv ,`£ÌiÛ÷ŽgÎG65Èèš:è.` .Lb9Õ6ˆÐÈx¬·s¢ÇAØD§Éc,˜ˆmÆ™øÓ •â£Pa(€)<,n Žð8&yž »0}Û¨.&Ý<ƘM›6ŧÆÙ׳ÑcGYëŠìÂÉÛÌÞ2¾ÅaÄ@FL`9Å`”~ð0E¡é$b!‹) ò`µ7Œìáw46@þüúäU§kÑ¢EƵÚÔ¯€¿5¼Å@oƒÂ#Ã2*ÑÁ`hj¡ÛQE½¥>ÔÝÚNÙÉÉÉeË–i· oåâÅögFßÑHàÛèä!óàñr}¼ê”ƒJš]™VÎ ®!øß¢Ñȉ`Rä4üÊ ÙƒodšÞ ¢&.-ÎTÔ4n˜a™UXô+tއ¨t1ë© f¿žÝ<#ähÎ#kÖÚÕ«WoذaãÆ€%feÞ†$‡[–Ðe]Ôdú±ú™ÃëYcÍn&YŸE199‰×ävw~çélÆZTEMhîI‡döÂá9S½’,Ët°Œ)0úí˜ü㜘6ȹçÊK_*dz-äü>¤5dÓìµÌZ­L1b>ð±€ÖÃ@u¬§+Ÿ£1Î|¶ÄÙ‰xQ>Ø^{íEÑÒ¥K×­[—e™73ì&æ5¾”NY©ÁÞá/m 3˜%b:rCZ‘ê1P&˜&¿ 5!;‹ 5#hÈaáܬëú€$<|&ì ’$Á ·*x¢ºR|¯Ýn+Ë€Ûª3¸Í ¦:²*ÿ¢Œ~¡sDZyޱ¹~ ŠA§ÓÑOF±… çÆ ÿ’é!yPŒx¶Á€EB™m(¤éЀg¹-ÏNNˆ ¿/ÃúT°UfK·ácðÞûN§ƒ¸ÂØ&O§q« B8ŽÁî{&bÂW!VP¼„”lx­â®7mÚÄt V=¬ð€pcœ–· Cpx†ØYéÇÒü}yüÖ!æ†ÉââEç¨NUW¬ÝÉÜHFá‘ $j|ÍPjàÿBêŸ(÷á‰ð‡ž˜>(_,¯yüèGRrÜqÛBÎÿŒ;€´ˆk—¹’! gr&ï³>kC¶TBâ.°DÄÉËõ>2¦á0 ±Á†ÂÔÔð¦qMņº(.µR1âÑh„p“¢\Á’Îô! ‘!b(I¡1ÐÀÇj&Pà˜-]ÅæÍ›Ù„I¥,j‰§¼K2'\ÎÔgÿnŠ—ÅAE÷c]-S¦>0e‚±ßÉ‘5Þp³Í-ž¹Á}5ºMÈ£Ñ5Á?Gy„SIMzx\' c2¼by6Vh,”“h=°ò¡äÄ1 º™ ‚ñÈh ¶wõ1É„RsƒA ¡)@ð€=îNó·Èº°Ë@ˆ‡æÐ¡Ž¦ð„„Vj4x‰È¢ØíÍ4º¥q$±O-û€/Às38ò€M#ÍdñV~Õ±aìØº®»t{êµ_ÛV9µò÷çí·Qn£Þ‡ô™ÂË88WfÜW‘ Ç_£h«ªª>¾î¿µoŒ±wÚöYmœ2¸ü>+ú4<c Kʱ_hÌ›£ Ž0>1‚Ž æLXN˜õØZl%½}pÇ“ß%6·å.åÄÏ'ôâÓ§²Z¢û"È: È ®…C‹˜ydí¬†ñ YÆ1ž³ PxꆾDm›3 †±J¦Hà°Ë(q_3èÆ7Äèô(ךk Ä9PuY†`Æpvš÷ÜдդM[ ÚåÆ;ÒhÉ´äÕ™Ø0,ot(qÍÜán(OæÎ (cd³Ä—Ʋ§dÍŠÝ ‰®ŒìeÖÞhëP³ gÐ㤒l,äœ3Û›©+¦ÜÏœû†‹¢¨zr•ýW–¾'­oªãåN¬†x˜ï÷ÿ9í4yï{åÉOI9ã ¹ðB•ç2oÞªé(Èms6öFãC…èT1Z€U$F›ù¦µE«ÕB[Ÿ†Õ†PidȨq‚ëÒ±Á÷a y'2¦á@Nw+„Ú«1feŒ‰'âpK°§ a âkïÅÛ‘ÉúÈ&y0¨ÑoN’dòÊÉÎ1àƒ‰â(¾5N¿ö¾ÕógùðP`zë'A”'(~ŸŸ~P^ùÊa¼ÑŸyóäÔSåC’?û3Ùe—m!çÿ—$ šòùð‡Å{yá ‡³n\|±œ~úŸ,Þ<HÒ- 3¶ß@„Ù“Ò Fܘõ˜Fð‚sçœÓŸa££6s:ñ¿Åb$˜`î5ÉY‰»Éá<ÕËÀÙĦ–z=ÊRÅl9TàÀT„‚u¯¬0œÅÃïËŠè_†´uÂߊ7½h¤_÷1XêQãá³x»fÁ q€Ê’\8æ 3„ÙU”ið 6Õü7‡L‚‹V*<– öׯÆ#÷'õ h!ÄàAP¼à8ÀÒÔúûzê5&{xf146]ÕO/Šç†pQ·{¿1ßH’ò|iR¾~)Š›F#Cˆ$¸Tö¨E&Ô fáÓðºh‡ÄëíBö¹¬zn%Qå«êà*û|–ï–ãIâðVÂ>e^µ¯xeØ#X“¥ù¸‹-Ùh­!Ð=¢¾«–#q ^û©só¿”4þq·|cé¾ì´nSEZï}ú¥4?=o´c™2Î$r.IŸŸ÷½Oî¾[®¼RDd0Ï~Vþú¯åàƒ·õrþg…†Î0Ã̢ȊqÍåÉàäB‹[KW]@!ø„ìkƒ;;SO8ëkïÃ̼ýºÓÙ¥ÓªÀa&.b2†á;ôá6 „ÿt€Ô€¤¾!£«DU,ÓúYuû›íº®»Ýî¼yóœs=ôPUUöz»õ£[Ó2âöÜ$kÄ (P8å$}=>TE˜zËCm¥APVª®ž/b‹IÆÄôíÀ䜬Œj†E¸œjŒj6:XÀëÑCâF`L4~xHh’í¸`ªÐÛQ}-(°v7æµ!œßno"[Uw×õ×’ä£Yvz«åã˜k”¹œZ#CûPkGˆ 0þ ö——( õQ(• ¾ “çO&ŸKš`×Û–mU£•ì.Ù{³î[»2%‘33<7h¥s”…á·ú9½â¾Øtª1p£y’&=\Z…Ó颯*é\”s&ÁóÚªÔÎÎRˆÖhIÎl1Î9ãŒÚÛONN2• @ÝT8š½ÉyLâ÷ëCÈé§Ë¿(?ý©\v™|èC²ï¾Ûkÿ³>XØúªDÉ8úœ0jÄëd܃u£ÛôŽŽŽ"Ï÷Êí6;' !oâ·ÅÉÖÄ®±ìæÄCmL}™ FkJê$³VX‹e41ˆÊÉ) 0Íý;¶ã"·páƒ>¸×ëMLLŒ³æ‡@=jA¶/ĉ£’38#‘!H+¾ WA!ðôÁË+Š"¨á)§‹Žytƒ(}M,+[bˆÍÈôØ¿57´ÁYÏcù\IóéÀ¹Ž"Ÿ¨ó€î¢ÐAgH«UÌéÆ0’íjý½'[ÅßëqåZ¨ÁøÒ{ÿáÁà#íöFkãi@lU‹ã/æùéÓG– x}ÜÚÑ{év»¹Åô.K(é5kH…w+Žãz¯:”Á/öišvæuò<¯·Öf“1&ß+ï.í¢µ:SТÐȧ{ÁL¯D'Û41g3y‹FÔçs€i8²[33ˆk`Ff‹ÀÆØœÆo]Ø "R¸7„=C´.ªëzÍš5È5Ë=J»b|F×S¦Gw°7änÏŸÑQy×»äýï—O~Ržô¤ms9¿°Æsj\Ÿ²Tø£¬‹ÃLýjhç5¬M  5#Ns„Èó¤Z_uŽê„Œ3ýO÷ýߺ²–††¬,°dµØÆên—¦·X÷ܰå‘Îôhjا¿M‹ÃŠô¦t||üž{î ^^¸ÿv˜/a/wŒ ‚Í 7i™ÆÔ)¦árËÒa7„̾æÍ›§Ú 8pq²hv¬ÛÞÌLÀåéÚ¹Žà 7-à±X 0Ї:±œÐ›AR‚H ³9z N¹1&´BqJ!;Š_èED&ÄÞoíX³Ö(—¦–Úc{W§óæ<ÿn’Ü>û)Šã½K§Hk AÏÅ^àQ¬( i5îšc'S¼ðÀîÝò[Ú¯oÛÄî¼óÎ|ðøøøM7Ý411a϶ƒÿG8‘îS]ÌøÄë„<ÊxÍ£;ÈÌ1ý³bV¿xeÑþb›ûɈèý"< ×kˆóóqÌ3wºë|`µvdî`bŸN§£õ\´ßÕÐ!F«€•Çp4ð”óÓ T[F™6‘dpò$Ê!Ń}Í¢¶f˜EfmñCž|פ½ÏÚ·É­‰ˆø'ùúè:{cÖútËf.µds]nÌ+²¬çÜýizh‡VÕgã8›žÒ•iM@Í8FCW˜zæÔ‹Ì!Æ}a;ÂÒØ/2Té~ÚÓžöÒ—¾ô¡‡ºï¾ûƒAE™dHQj ð0Ô$ª nÕèÝáˆ×˜ xw"¥ ©GøšÜ5’¤dw œz`%éC@xCr‡Z„e‘°³Õ&¨z‡¸fÓ±HeÃÆ…,|¹ÖAq†çŒìž½…ðŽãœür”Òþàû$Iƒ+t±¥1gN<ÌC¯\è3@ÊÿSHj@&‰9—¤€1.Êçœ\ ÕñUõªzS%"²^ܽ.úB$Ŭi”°s½|°°AêÓèËuø¨p@ð±77TÕÃprséŸê«ý+w‡ãJ7 öžGsi KÖAÕO€¨ ð—9²¿ª…40¸>+À‰Ê/Ç}m 9¢ZÜ\†;P,sœÀÒd1G–h›k î)=“¯å.Ì ~¡ßrç–M›6 §ô»q¹wéWûzÓŒI-sl–µM¬Ô*  82†VíÄÌiôœ³3®Í¸ ›Ò7l†ÁDh覰òÓÇAÖbá¤ßsë“€Hðq ڦʱ!T 2·>íI)–k5„Ç‚…³˜ÉÈE3ÚQš¢¢eÍ•"‚´ÞÓ꪿:îõz7ß|³R¢E$» k½½Å!´„Y%&x ý±"Æ`ROÜèæ'‰¬¹çÌöD¥^ô‹py;†xçXDd«Èj1ÆDñåS0¢…\¾3Y ¨8¬•0ê?cx³sí­w÷;›n·ÛjµxàcŒYc‚„°K0wýÒá<â÷Ÿ IDATR¾!`Ö5›˜4Tع‹É<ŽcøŽãñ²Š¢V»Bè÷û³†…M‰ž«~5ëçê>B"Å:☽…f6SŠ‚šóécD +6SÀ¤[IåJuQu:V~cù Ö”ãâm!çžËæÀäT€ ‹eö"䦱LOøIã2èp ×äabxv\ïRÞ<°ÖúÊwþªc­z§O9䛚¼ózB§”oJƒ ièÿ¥´cPéx®¥¡+Ó¨?&³q ΆMÀY`Qg²‡¢ú[ wƬXtØ$Û3?f<쪨 !¸-ÎM¹ÑKGYíè2 -¶xÊ„á5ö7â›F†ˆ\#ºúkgd/ 6eÁ»@ÿ ׉Zvøk;Õù rq•‹¾:#*ƒÒ-}[Z|¨¨·Ôv«‘Ð ~¡¿Ëñγv*ß;·ô1쉱ñ"P7Š3ôDõ+´…ÆËÄéÄ´ ±ãX°µ²F@ƒRŒÉ3®¤™ªçì`0ÐFº†Ÿ§Œ5¶.ëzÚ®´°VªªÊîmM0nµ{Ø>"”…”¤iØAF+&˰£c¹ì!qÂsiØ5Zà2Ï…µ—ØYª=z9€q4e]^%èâ ‘ù¡ød¡Ú3í¿oûžçö,@XÒÀ³’ÍÇgYV–e´:j½«5\sVx6“Õ´#³¤?ð ÆñY6ƒÇ¶ž1û€%àxÚ”U5yÜL«uöñE…[cB¹. ¶(O!`a§¡±]Yždí%iÊcL¹c9ø›ArO2òƒ‘ú¡Ú9W?£.•ãoo}²…žf×9r³66wª£¾xk–€óð"'ÝÌ;çvtùô(Q ò(ЦÞ?åSïnqƘÚÔƒD?‹Ü•î=Yö‰Vkx0 \÷½Ýl߬zJ•ĉ¹Ë¸_:cŒ‰gøxü¥ÌŽCù…†Dƒ¯È@™ÖþÒšQªøpQìR„Ú—¶Íõ†1OînB m®³AîÒ8ÀCÆ繟ÆúA kmçÀp• PÓáC¸ÇUyUPÛ•–iëùÞ¹ Fîv K·Æ’h¤°¨`{ñ²Æ®ÇÈ _60mVkämÅäX‡ˆXÌhmÀ3ÛBÎ#r@1Ä1‡dgVYbç “CûÝm©Êjðí»ÍuÎíH9 ÂRb+äm½‡8Žƒn?t†p¸£†;ÿšEj²çMžA`@ž«ê2œB¢›Âc­B>Çí¤4…tX¾yP2Ç´›ù©ÍpR@#‹mfx¤IDÒ>•e×8÷ ï¯ìtêét8„àwðf;3öñBª8Žã%qtS4õý©îç»!ªŒèó9BCÛá°*žp ž å9>>U¡–Ä>ÖP`ÃNå>6·«ªšxïD|mÝÙUVDŒ˜Ö’VuLöáÃû‹Ó½`0xw»][;œÛ¸+vwhMåj©yù]è*AÀ†ƒ˪²é5Z‰úÏuˆ•ÁKå™eú¡4ÚYkóSóâE÷¥Ý¨ŠÐTPY#4íôÕS’†ÌRA-«'&D¸‹V$ÆÒŠÑ´P" O×5v²Ln†¯…ìýYqZ1òª "^ߘ5¦û±.NyVÜÁèö]Ãu¤¼yGƒJÇ3œ4Jjp²yŽ/%ðOs4>g[/çÖ¸NgÜy.¹`¸…Þ™»k}‡5‘ñÞo:/ìä/È‹sŠøÓ1¦[Ô!Šé^à„`†o”°ÏKHt®†j»T/cĨ_0S6yKs>Îù aMsÎ…¿ßˆÇ G®ù´-Äù>v òY™vyÁŸõg‘È;úý³Úí,ŠÎ¨ª“òü»í6”£Æ?5¾ýqÛ‡4¨2’ÜíÎÝn⼉ùïž” xËl=é~¨‘2‘Jz ýi÷âZÐ2©§…™Ù¯q©Ÿ  9…ò!~í…v0÷³ÊˆcŒõvÁ]æõ7…köO®k›}üÎ<¿(I¶L“Ú™ ÖÞ2t ÁœDÕ‹ŒK½ª*uâwª¯²~f #G á,ñî×]Ð\1=q6SÓÇÕjµæÍ›×ï÷ûý>úˆ˜C)£„G¸¬×…ó§™´Éc:Jˆo|&Ò2Ù(éÙ©ÝÞN]15Dwÿ&j÷ÛßÁ@J„†£<ËKÐfa#»b Ö$sD2ATH> ¤í *«B3BôÕ“x^G_4«š>FÛæ2“»5è=²sh¹kYûÚ®´À‘‡eì WÛÚ?ià’Ù³è<Ù®'h±h'–…ñ¹bÁk?1—GHô‰ó­Š4ÍäÞ‰jа,ºQ“ýÐý ÛAÝxÊ‚N*<ŽŽ8qfˆãÎYk÷öþeýþùÎM‰ˆÈW[­Q‘“z=d—0D !l¿ýö ,ÐÇ^”…5–³ø²,{½F+ |©ž?šü°WiˆàøWžÙw€Î¹ÖvÇ> ¸xkm»ÝÆù5<£_ê“%‰_é5”î¸ãŽ;ŒŽ¾v0¸Ý¹k>XÛ]ìÍÎ]çÜiUÕ¦Ž1huð:CÙ§)1ƒ$ æ§qݰWŸØòÐ2¾n(f:66Öétâ8¶¥µ7Úò°Rc°»¨³Ñ†„õ-:ÿ =2âiÜ04¶[E°×ŠJHë]ý5Pzê²aÖ8dDD¶ÈÈ FÆ^<6úÂÑx"f]5Ð;‘¥¡C‰È‡–$ç|äõ‹´ãÒPLGñ‡¢’<:bÌP-â.èùxÁ&Åbc¹Cr[Èy$ tz±î‡ïiD²¯fƒ¯ z_êå#yø³àwK]E ,Øm·ÝFGG½÷~‰¯]]ï]C£‚ÇËYR×·Ú]ˆˆ¦X7ºg0IÇb(Y@Ödî zÔ´¸Í‹þ?H;¸Mpùqî ­cfO¹òèÄ9¸GÊf\ȾyÚ‰eÊPã!l_ׯ+Š«ÚíûâxþüùcccÞû/E‘¯ª× €Œ8(BL^‚;C}Ö±•F½AiV•3»]H›ä:DYøËa9!æzORç0Ø[X‡»N±ì¼óÎGuÔ¹!ÜhÌÏÓÔ3:o4MÓÿNÓß8÷Þ<‡±PÏD¯Žõ&ðöÙŽÇõ0Õ”YOI>:‡Œ åq¥ùñÞï¹çž'žxâþûïŸ$‰dbÿÓæÇæXQ {½²,·nݪâ09eC3°PŽ0 )ãPë4–*v'ÜföCßAo?B~EÐAÀ¾P¶³C„@€äÉ-è¢â¸€µ>j=¸ý†OÃÕP?]!‹¼mÀÚ#6§s:À)!„ÚÕŹ…?м}$H‘Þ¥=¿È»ï8%}vØa;î¸ãO~ò“^¯g­ÍL†± îû¡CËUÂÖ­[Í`Ÿy­Xf˜™BL—íÀùÂjŒ%cƒýìPÀtä¡z`’À«†›ç ØÎµ.”Ì¡¥A+`g3¤l c`ì‡É(º½,É󻦋‰Ëò¹Þ0I4ûžþüÉ÷NŽ|lÄ{ÿÐCé#MÓtÓ;7m÷÷Ûé6ƒÐ®Yië܃e%`dÓ„IgöŸ• 8âvПG Щ‹F`€>ÛP-X'¥ÊÚ;oœñ¥_ºtéê(zy]/ŽC¯’bPxïS‘–åw’8Þ.>øàÃäŒSRœ%¤J¬($­E‰Ï˜'¨wιàfjÓvØaŸ}öyðÁ‡íg½ñð†ú§æ:¬¡§Ð1Ò¼ÕNÆü“¶÷8¢Xkuƒ°DÕЬª þ°ˆyœI°4uÃ\¿+¥ Œ6 ccq<þ@xz2›T:d¶~5@úFc‰Üì'Æ?Bz"ÛBÎ#Yâ0CIÿR+ŒòoKw£‹ßWf(ןš˜ü„¼ú˪Ȋn¸add¤ß]hm°²e¦ÜøpÏWqInÃðÆfD®‘c:N–eLÁ‡°Ùðeîã83Š»8Ð3U ˜ÍÄð_rD{œ °$Јfá²ûœ¥$Z$§SUõí8~]Q¼*„oMLD­ÖžÞ¿-ËÎìtÊiÈ.½7 Ïå_”Õ-U’%­V«XT ¢"·Ñ)¡`ëÖ­ØÀ,‘ÂCZ 0"¯¸ðÑaµVšJ`Ó´g®ÌֿѬ ÍÓq8ÉÜIyqß›»Ì¦M›¶lÙ’çy/MÏ>vâ+—¶7ßÍ«ë7UÕžæ~»{Èß2n¬1Ƹ/¸tmê–:ölX‡Ôî) NòzÃZR*WÃ#Õ‹Yiüž>,·ÜrËÊ•+'''ó<.T;WfåŒ~;:U,) œ³sÝCPZÉìR¶„Ш€õ†É3V(`56½!—)ÎéÕj³„ý¨`Ä£šXT2[…¨Qšp•©"¬­§—´@á5¸‘è° ¨Ò™MF–å¿-ä<? 1ó8Š¢z—ÚtŒ»×Yguðª®ëüµ¹Th_³Îžž>Kä32ôŸ´Ûmôçqâ4hÁ|Aötæ¼øy<ø«A´d¾gœs¦en8£è,NNûe}Y½ºªnýÏÔEÎüR%(ÄÞoÅÊo£è~ï—<0-c¯±ÖYtѧ¦¦Ü÷œ{•+/õC6#`Yì ÿ Ž–ß¾*£ µÖÖëô«©›ïúŸîû¼ˆ¤_Nãóbw¿Ó)f´C uÃ2wZ¾èÍ¢Èf…Ùã˜×]_ƒ{BùúgôÏõ“ûý¾Ô <À3=Lca]xXÕ<ìÌtMÞË<%ÚÖ,Ü=x¤hÌLQh¦¢@LíÃq©\´mÖ-t5°Sf$è×W¦6ngm‰²,Ûúæ­ñ÷bY/ÉNɂ̻ރw=88bàœëýkoþä|Ée«Ýªg%§ÀàŠ à €Ó=Ý¢8|áqŽ™®°^¯§à€ÖÝhé‰À¹ÌúGþ…<Ž•IYx‘i9C!µ?ÏýG¼üLFŽñÞ˾2~ÉxrMâ¾êü„g…A°ææŠjŽŽfY655ÅŠA˜Ìh£"]8õ0ÝRó€÷aúä‚¡FíðôÀ|eëL®ÿW©©T*.|Ë×¾vw8³aøáCûvµ)«‰ ²"g{>,pÎÂnÓ”£ 46Ì:çÚ¦-kfælôîîÁÍsIœÇ6¶Î9í±OMM›‹²*ãv¬eÎe´ÙY2’ƒHÀh·dé9¾6™x<ŽO‰YëÓ8Z3/òƉŒÕˆ$¸8÷ÑE¡Ãó4ÊÅ@M¦Øzþš,òø-ÌåBÀ‘á<ŒwˆÔ(øå€(j/ æ`„S{6¬Û º±¢Ûg@Ø{ŸúN7  ð½†äÁã ¶ž¸xbéÒ¥ Ýè&Ÿœ˜Ü°ak"¡=ËÀŽ®iÃdLÌ|hkÝAœb£E‘CLÃ@^šý„FS!XeY¿ß‡>13zyhÙ{_½¶Š¾‰—V«¥ãýú-É%Iöº â@ ¼˜OF傘§d0î¯"ýlX°à!@”½P  !…h)ô­¹yßîáГCùüR–KüqëÜVëÜVúßi4åïÈqRÀV‘Ÿ=öØcáÂ…PäÃãëXçFÇn˜Ì–z¨5ùŸ€šÌþsë­µñ±-lq`¡Ý2hyùƒ|¨‚¹Õ0#b— „)‡Àx švš•óñ‡ÎA£áÁ¤2ö­Áwiê ï‹A-]„ 5 ീI<ìÌ,G<^f±³æPC` ûŽin¬b’w®º ÈGú?•C¨ YÎÜÙO!Õp<[ .XrÜÁÂ.ã¾#{—ð$/z< =תq[•ó'ú¹Uný©üôSò©]d—›7Ýü©~J~#åXY|½hŸÚži¤ßëâ/ÇõNõÔ/¦ÂX–¤oIë5õíënW€KDʳÊä;‰ßàýúü–;Ìì  ë†5ÍXc+»5-æø°Ã\¬Ï¤ ìŵîLåÄÑ9sIOóÉw’4N÷Øc]vÙåöÛoß´iSQþ·¾üL™†û Y$ð(pðôàMÒhÃÎDC¨¡bÀÐRZ6Ód ýn·«Å º¸<+:„A¬©w­M0ɉ“¸( ·ØÙ{lùÅÒ:™œù:ȯY³h$3ÄH¶ª„š÷¥ðkl{ʉ)LPoH„cÌ#SRïV‡•Áoœ¶RÝÁ•{–Òûe›mð}°ÅŒ+Br·¯ç@2d:%ƒ„,´£/Ef;›éª3¥Iá™..A†äíÀV1lsט´k„jíq"6ð”b-Ÿãt“9f<, ¯E¤9ñf!ˆÜÛŸmaîÉ#_ŒøiªÄ€ùÜ=‚HÙPTc^ ‹ô<îBŽ÷rãòÌg>Ú.7HX"Kö–½É¢¶ÒFk¶;°~/wOÃô»ûâÍEØqèˆ>øûÁàÛƒòβ:µ’{ER©þ¢ óB|Sl¼TÅjnô1g®ø¿Z£#»dfŽ®æ†Ì(šÛºúÙWMf‹É³´‰2÷õ\ÆBD%s½È*S©¶vbò<×›$Ia ÿd¯œ­:Ä®I.@’†Í(Ž*ø‘ðŒ*0Ž  YcvAYš2kôR*LÒqç\:’Ÿ“¾hÔ¿ýöÛrÈ!“““wÜqÇ–M[Ú—¶{çô’'qÔÄ9×ï÷1<¡á_£‚¾ÚÐÇØëõ”NÍo´ 'lò ÿf}#I’¨ Y«ÕBc øþЙøó¶|w9xÙ õµVÁ?xÝÀÝéZoùàDåŠ1^–*àÒ„G‰5 ml¦›"÷”SNY³fÍ%—\rë­·–¾T,€'ë‹?ì0Ï'‚ ÐÑ`eLƒ7èé b¬’Læ¶Ö¶>Ýrc®vhôwfÛLÍò̈g­év»7nDÇ‘í0e…ܼa’Ú”Q;}‰@ÛØÿGª÷^EÓ!… 'ãŒÇrEXUUïð^öŒL:"F¼x9XÂÚ\žð ‹N_]$*a0lÇÆñp¿Ï€é@HA¿š©˜lTCHûŽyÏ,27èr¹ Bù ÌgaVРÁ*D/ ׯ\;v±zœª\x¡ŒŽÊÙgË—¿,I"Gõ¨½ún·»Ûn»­\¹ÒZ[HadÚ\à@'#â~ëÄWÅ”è³Qk÷Vÿãý0/¸ë]rM‚ƒ4ŒÙdhžùz7|>²qßïØÌ»Ç•è¢ÔÄ’´2[¾^÷!ÿ+68àoŒ¯Žo˜ÏšºªõdQ5R¼O¾’0ΨžA@8­CãWÑn~ð”s½†$õÙð4+ð¸kp”ApG™gË¥#Cš–nΩ©©Á` ".rµÔlSÖ°Oæ–5K˜p*ÀÀŒÞèï+G|næÁà÷¹í1< ï}Ø’'°H©dˆ½hÅ/—[ ª±†y8Y°§³“Y)²Þ·Î>1’Kúú÷È^ ˆŽS•h$zs‘"}wyžç‡åÕÓ«ôž4úqd‚±Öž9¨ö¨Ê7”ÉW––àÊÔdÈ@ rkz‡¦Qc0ˆ-ŸA½CRÈó•,‹§õ®2îØ$Ë3Œlsfƒ9q>(@ÐPNæŒæÐtˆâ¶Yc¹ò,÷™_s9e)—_.££ròÉÇrÖYrî¹2:*ôhaE‹•ÑI™•QÅ76oÞ\×u`FŒ Ûþ~{oR?{ãw=h×ÑÑÑ{î¹gbåD½®6w™øö8º&â. ¨ý( ¸Øg¯CF'¸…8Ë cÌ—”å'K1"…´_ٖȤ@yEÿåDýƒþèÇàà ؇yýø·¬ƒl®®ëS?›Š®’‹’ªªŠýŠÁ'ÉW’øžXì,½jì%48ûôÌ…¢%ÐjÞüúˆ¸ÛÌ*—\wÝu«W¯Þ°aÃÊ•+ËnYœRŒœ3RúÙ1øm£†1½6E1t ©V4ÐÞ€1öHQ|.ÏÏ6fj¶< òVˆ€!”2Êi„Ðp;÷ÄJñ IDAT6ôÛAðÞONN6XÂ7I»ð¤AÕ®²‹2W¸îûºÞ{Ÿøþ/ûéÓöEmß÷ìÍ wåsf*X6æQ†:͉­Õacß ! Iš„’ß$~ƒ¯ßTûÔ›lfgÁåÏ\] š[‡ªÛí¢æÂot¨:¡öY¤]ÃúN•¶ž*¿2Œ%ñ‚aJ‘,,+ðòÒR_.µÐf»RFéõóõ7G½œäß<—3ÏþÍè¨\pœu–”¥zè£ár¸óä¼÷È{.” 5älذÁ9gGlï­½î ºQYkKW¾È÷Ïýîþö×ÜnŒ1b¢oFÕÊÊZ[ÕUbÔLøa°x®©3²$¸û1Uføç?—ò­¥ÝbGŽqΕRö¿Ýw·»öÅíh}¾“s®ÓéLLL°;!„œ4üFèl¬Âp~‹¢Èmv Ž[08r0øâ@ŒØå¶sd§¡Ã\ˆŽ`ëçàá@¾l8+~Du£Ò”îVmŽÞ-ÜzŇ`ü‚#7g‘ìÅq¦a}+6]›ù1ùº_¯Ût˦^¯×߯Ÿì›˜»MØ:뢂Ér ê—êJà‰ !—†^õSDÎòþ­Ö»Ëò¢(Z;Í åà «ž4ä«a«Ì‡ Ü\þ2»ÑQc5# ½C‘ìJcLõ™*úX”.K]äê¢öµoÑ.ÿ¶ÌŽËì¿ÎxO`Šk¢ã¸GIF=n°ª*³©ÿ²ž÷–y¦evÛm·C9dýúõ‹/.ï*Íã_íÓKS0ÙF%,Å"fÅáEç!„y÷ÎÛ½½ûªU«²,c¡O|«ºÍ}zÈŠˆZ­â…Ÿh˜‘ÝŒ˜’§k >ª {Œ~#ohp@ m§Ñqûí·Ÿœœ|k!È}÷ɳžÕü•;îx”„ÙEvÙAvø¨|ô 9Cÿ&^îðî›nFB…—gHñüÂä¦û²®.‚ì-™ÙßøÚÇËc$ÑI‘]b¶™q-P`µ‹«N윶ƒe;8süS2¶rlÁ® ªªÚ´i“‰/Î,Ê#Êø{1ç_ -^„.œ8lŒì²Q–=,É•ä‡ý§kÜÈŽ c[2㌓…YÂ< ÝiI’ø¿ôõ_Ö.u6¶eYæOÍã~ýÓŒÎ#nüò¡ŒLŸ{ ÐÄò²Ô'1”B|w'qñÜ¢xZÑ«{U]ÙØYÑýX×Fts ^‚0l‹ C‹+Ë2”\D‚EÑþyþâÎëtÖ‰üÀ˜×Å×[­‡¦,eëçCçRiŒû4†BRx|P¢uÏìvÌ3!ÑÆ:ÖO¯ä~q›œˆt:4M•æn þh/Œëõ5gZ Ýi·ÛÌFù‹Â”ì(ŠjS‹* ,Z´èØc]¶lÙÒ¥K'''u@ƒK=´ú…¼¯d¶óx8Ì÷î×vxS‡M­¶««ó+\êp IÔA‘S(ˆ#ð4ÀU™í«Äòk˜:oØ_aú•=ã™ÈŠÇÄ»¸(Š-[¶46fNÕ¬ëzbb‚½û!ÇZ9çùÒ—$Žå9Ïþåg?+ Ê)§ñ/³•ÌyÙj<4ü´x¶FÛ0` òl86&‹ÌVuCÆÀ°&mêbp•TQ¨–³{9 È[ß*ùˆŒŒÈÊ×¾& ÊË_þh»èE²h‘,:L»aå ¯xÛ+âÉØæ¶2ÕLóí°:Ìáð0xã`ôM£ÞûàCÿ¾YeÌ:S?§v×:†Jq”ã0¬Ñívy¢ßï³f"σl§,é%OHžp 'sÌ1!„U«V-_¾<_›W;V¾ãuÜû[š3Jìgn>§?øµÆ‰ºDƒ¿€Š ‡)"GP¨ùŽ»e/¾Ü£ SÁ\eFç.X°`bb¢¾©–ÕR|´0#ÆLÎ\'7–ze8 t?çyÞjµô(épðéÇ\Mô_Ç©*àÌŽé€á h—ažâ†v*pŠ}hjê}­Ö}!$Ó½®ßóÅ$ùâ`pV·«gS·ÛÕnÚÅ q ÁX¿JÜ×Q]Uù»ópPâ‰ë«ãMq¨fÐåWC8¹!ˆ*DkŽ ÁZ»Ç{yä‘·Þz«€a.†vÐ[˜AӨȵJÓÝÁ¼påëºNV%åueõÚ*|-¬ZµjÆ Y–EáŸìÃÓCü¡¸ª+¦ÆÁÚÃo|½]]ž]VQù}ò/‰¹ÑH6m3‹ «Bv|fçÙz¼fô¢é\»s íb®5êE`bÌÀmj6£ O5K#-`xÃILAjÅÖ|š·ý¸£ˆH·+çŸ/gŸ-·Ý&Æ<ªê›ÆÏBYø„â ÑC‘j#2ÍLºâcßzoKFeòK“º’ºgvýC>WDšRÉ´æ#ö*3>R!´CÑÚeMIýŸyž—eª0 î½÷Þ=÷Ü3˲5kÖäy®£ì±Ä\ãiŠB³˜v»B˜ššDé_VMfEèOÉgÔ 5 ó¦ã†)dôë¨ÞRCÉ)›H–aˆ Ûó%õöuqr1úŠÑÎHçðÃ?üðÃ×®]ûóŸÿ|ÅŠþ¾ÿÆ~ô©€€¾•›ƒ%6pø¨â^ØÉÛ^Ÿ‰Æ'°€p `ΩÁfFŽÉ¨}CC#P¥qB½'ŠNÏó‹ÓtÍôß<͘3òüÍŽ›¶Ç´)ê*™6#‹’“ªÆ˜:®‹×åÑeûÓí葵¶xy‘}>«¿Z§ÿ‘¢uÇ©)œ~ævyÄÜoÌŸ7ß­X±âòË/ïõz›7o6Æø=¼YoLßèÚÓ÷%"ý~Ÿ¹‘`ÌéårÌiÐÎ9SY.þ0_[ùùa9Ü›}Œ,•z¢æá'æ¯ã@™òä²<®lÿS;=?í£ÝåæÉ·“Ý~»[¯×Ûºu«ÙdâoÆÙßfÉy h“¬ýÌ€3CyúÕ˜¼á*+PÊàùðÀ[·nݲeËædsiJ ì(œy·<£Ï–‡g‘F0ôÇ ÐÏx1pš¬™!€G0ÉÄÜ R4ô¬Bkâø»ÖžR–—x¿!Žòþ¯Êò#i Jël6ÔÜ´šÔŒgè¨Ñt¬®Ž©FOU)ô‚û–ë|³3õ‹©äšdæ×¦Ûuh!€¬ÏxxöÃL(„4MãŸÅƒaÇ`–›ßýîwPv¨_TÛÅÖ¯ñ>öºÝ®Fô†&ï;ÖUãàÍL˺®ã_ÅeZºÃ\ù´Òo­ >Ø 6þçØEŽa»XñÁãºnòe“#/?â˜øªØýÀå¿Êwý»]zè!•—k,£Ó\aÒ“'4ÙÁ“Ëñ†–ˆ— ýP\6è VF°ÙsK£‘Ráy¤ƒ<3¤ŸÓn·¡“ýx 9Qôè7\“²…”ˆ˜%F‘úYut}qþ¢(êko¼»Áñq€µŽ<—»)ÀaŸfP¬›myZYn_®¿}ýøøxA•uü!Þ®´v³UònC*TiK€ì8“Eæ5FÈ™—bqƒkÀ3ÏÕ1•;À%Kó“iNÑQFö–ê •N¿#7‡ÐS#g “K\!EQJ£ÐÆûÐÑ 7-ô"çÀ‰0ÏgƒTœtš¿ƒzÔPiã¹9¤ØèóJä°ÌààÞø\‡Ø+`0þŽ(ª«êÜ,ûl¿8Ï¿Új=4-ć … L3_@ˆh£BEŒ´Ö–ï.»t{ÑÞú|+[Þþ|[—dzÊrAW·Z@}‘Gs»KïWAK¤öUU¹tÅÙ…ßä“÷'!Ó2ƒo ìm6º"òâñl§¦¦Ƭá„|‹‰PøÇ›Å»N‘º_:¤w±ùµÄSqefd Põ2jR#û`–~(Õ™¸$ÈЈÏ}Ä-9i‰;w(íDZ·Š 8õÓ”>®†ªØD ô2ÐOˆ5ã™+/Óê‚ìæŽá->x¶l#°ô[xºO¦…ìph<¾HÒͼuî¬Ø ë·úlç,}BªÔd©Öõîµ™2õºÚD™WÑ‹™tÛ`7ñŠRS> ¥#é`ÏA½º6?2­vKÓ«p}È'óâU…‰Œôf|.bç7Ä 1aCH¿•N¾irõWVó›ß¼å–[V¯^}óÍ7OMe/ÌÚç´qúã”׃OgG†eÖ´¼40wœ•ÜzAJÈÖœhDñ±‚¥Óé(þÆš‰Íp¸ ßËŽAHxq:4:ºEQÜáÜÚíO÷ûoÁ±k ¹ ‹— AˆbH+½€êé•y»Á8­¾Ak­_ì뇂­‹¼ ª6“ů“$L ±Y\ýÄÚ%.˜P¯«~†ð“»’øqµÕ»¶'"’ËÈëFÂT¨·Ö°àÞ!S³Pó\ ×UHÃQýcd8„_ ¹6`a úL{sÕ!UúŽÔïœÛ!ÙaìʱuïX}227˜ÍoÚÜžjcªUõò*}Sª5 k“삾Ò2 üëKo·Ûûì³OQË–-Ã]£Ë{P•“ô–a ÎSz¼Âõ65ËáºMzmÜ{Ó¦,$|X1k[È™óóàƒ2>.ûí÷¿}õpdá’exc_‰üÙ>ÿd®.îê„Ê.³é§ÓÒ–¬3Ï0ÝÜ n&@×Å +`AQÉ@ìëlµW•ýCf­•BÚG¶‡We…O@œ>ìoóT;IX²˜ÓDÂ…ÀrpùÕÔõÓëö[Ûy#Ž8blllÅŠ÷Þ{ïä“ùм<¡L¾•p×Tfkò ÉT’ªà—{¿¯Ÿ8zâú_^×]w ƒ©§L…=ƒ»ÃÙ¾ fVr§7 ý|íë‘Ä’ØLZåáPÔ8ž²,ctQµ¹ä"¶1Ç™»†g ± Z0ÚB˜ä¾ÑÖ$9µÝvTBaœ oغ`ø b\¸rD‹(ŠzÒCëžM‰œsµÔ!„CŠâoDÞÛí†Þ7˜^ïIÂ%Q}@m÷²Õ)•}íëò{e{mÛýʱýOA6Iõóªó_CïQëfñò…¬çð(´8`× Ð·˜ßÏÚ,™Ê¤ú–˜¿F/E}§Û-Øn°yðà“4'˜pÓôÈö3|´Wäo÷¦gÄÊÜÁN_X‘h,’|0Ë2$(‡ÄyúdÌpa±TÀ$`µ`‰ê!¯,Ý úijσµŠZêq*xóþLNÊE‰1ròɲï¾ÿÛ½Î%¹%`Œi_Ø®“º>§öÁ{ïÛooû­>˜ ÇŸú+&¡+ˆù04´àØBþ+$8\wKë- ŸBÌy ŒœºÑŸÀl9® : ;FóÔžL+AáªêºVy˜±±±ç=ïyûí·ß’%K.½ôÒ~¿oŒQ×gM¢!Q ß*D;ô?†wq« íàð“OŸDñ¹·6º ’H¸d ^H›€z 1Pl8ÿUF;¬« – h$@¦ÿ±°J"l~f%4 `´LD‹‹lðž±ø“,Y&²H«žÒ¿I®HÂÉÁ\a@¯ÎÞ¾¤pWº£òüYÆœÛnë'8Žß^–ºþf„’úyu]×;½e§í·Û¾ßï¯=nmvhæºÎ\ePÀñKS÷¬r¢ 7ÀôÂæ*Ã÷V¦ /–Yc5qfos^¯p“u…—eé.uù«òÖ7[u]ßwß}rŸDEÕQUýÌÚïéË–¦2õd26Ö4ø 8rØòŒ§ä-[¶ ËaxóÂ<-Ä[õ1ë¶ yžê‚PëO<"< ˜dcQ5Œí·…œÙ?ïx‡œq†ŒŽÊg>#Ÿø„ÌŸÿ¿Šª lc¢j†WÓóÑ'#t¿{uoQ³l®l„‚I‚<KQfÎdÕQ†%‡£àA΋OÕÆ¸~ÃØC7(qÀú°Æ”Lá6´WÚÂ`0X·nÝ¢E‹(ƒc)ø] –bVG.à‘Å“óî×.¹!ÉÏ¥%ÚÇJ'ÒÒ—å@èÀÃÄmi @°8)ܦñ¢“$Q™/@ hÈs m(ʰ[Œ¢+L€Æ‰ƒ‡Y–¥<‚†^–>@è!á7Qìâ¤`P'æj9â¶ØžøÔDôˆ½­µÙñÙsŽLžá«¯´ÛïwÚi'kícÝp¯žEnXê‘0ÆJ¨”®X¼Ñud;5œ>ìFÅsBÌéÄßèwa’C¦… ‡Ùzb®ÁÏó~ÄGýs»ÙÖ ërŸ²º±Z³fÍâÅ‹õ«_­]»6; «Ž¨¢ #œž¤PAÖ3ZeH²s»kÆöã>ãVºtuj3ËœQž[j4óÙ•§aû FŒe±jµ,êW ³KDA>ÔŒ6â :HkXk™•Í3@úô4& _YmâuñÔ¥Sa*ȸÔ#uýêzðéAûŒvzSÝIo8nµóÎ;k«qKÈ߬áù&ÓþlyŽûå"Œ]Y—¥Ñ­ÑPÊ9±º²\PÃX à±ÚÁû’2rνúÕ¯Þu×]ÿ˜'é† ræ™rüñrÅrðÁBÚÛÄÚ (ŠåË—_}õÕ¼*çÁåK_’SO•}öþÍØ˜\x¡œwžœyæ·¯³\–/‘%?–¯Ü}eöñÌÝàì [ÿ¤æ¨Àh ,àZBšö<#|†Í`àh€T𠘯œ7i.¬:XÀë°Ê. y‘±Ø0rg.}s±¬ˆ1¦þ‹ºÚ£*ÿª|ò½ÄÞoÝ-Î#µ¸Nž.ŋеÿ¾vÍš5!„âˆÂ/òÑÒÈä&¸YÊí¬+Œ-„ìÍ>Î!%ËL¥E# iš²¹¯Ð¨öÿkï»ã¬¬®µ÷[O™¤ƒˆˆbEìc¯` QoÔD1I¼_®ob¼1š\‰ã{ôšÄ‚%ÖD – *¢¢"‚Š €Ò{›rÊÛ÷÷Ç:óÌ3ïx“ûý.f€¼û8 ç¼eïUžõ¬g1Ù‰ kis$ËSõ»qp :¶²C¢Ã½V)¾,+1³RV:H,¾gÀ iÏ– ÃÐP†;ÙUÏ©êåÕøŒØ²­üÓùº‘uQùJÝY,^^.'IòÖ¢E†aáy#}ÿuu†aXJ®a孞އrȨQ£úöíëûþqÇ7}út¯èU㪓sØþ")}N\8Z¦¤!L£¤DÌä¦+nÜEÀjr˜‹¯HB*[ઠ· Ùdí÷_³ê§Öÿ7†aä&åòÃóZkÓ©…zÕj5—Ë ¡àPs¼!UªdéhìRðSäEvîÁ;$X˜Rêºðßò¨å¦$íãQU|4».+ºÄ8ãßjkáBu×]êŽ;T¿~ªTRãÆ©óÏWÅâö¬•ËJ)U_Ÿ&[wë¦6mÚŠW¼B­xX=œWùÔ Ÿ.ütÔ˜QÉi‰q€ô rçÐá…â§jÓ­ár}JYy«Œhq>Î)7~s/•//WÊ,ëòä%ùW}˜BoÙ¬sÛ|82 ­VþÜ|­ýó’ Ú'R¶R3•mÛù7óûÕÆj­Í·Œå†ógG›ÃÊPëÆõÈÑÅøH>lm™eÀá?*0"˜“j2àé’ 9þÀó<¼ d±(!°´0g*©h“Kp†Å·á˜ (máL[`¶$ÆÁ¡ÈÄX¼<áðÀr|~mÜòom<¥X·w›_ï8—„a÷ÖÖ&­Žã_µÉ™¦©C$IssóÊ•+W­ZU,›šš,X°iÓ¦j¥DZ Û‡4ËÓàW†hI¼‹ôçr©¢qà)ZGJü.&2-]úÜ—ƒ›Ep7E‘û×þ]M"6NÚ[ddV*•eË–É+à i7|ª° 4×”,ÚŠm,›Ë`2h|R@ËFúˆZ–€â r¬nÀŠãHz@jMOý_ÇW^¨úõSJ©³ÎRO?­î¸C]qÅçr¶^1jÈ5v¬ºóÎæ²ËÔYg©cŽÙŠW¼Z­Þ¤6]¡®è£úÔ¸FÏ)÷n7<'æƒñõ¨ñÈÂRh r°kR,y[@„˜Ö·è<®œµÎPŸ`U.A´ap€pJ\ ±Xx|èLw¬,\ƒ{‡k®4ãƒc¸gŠãÞꪩÊ|ÝÌOÏçïÍÛÛª­­ªþІ¤!Úb”€9 Iÿ£ùÒ‡(ÿe­ÖuÇcï  5ǥ΄žpCD¹O ƒf(f¤ö€$»©záç s„³T‚…pl=0Ó>ìn{@ðPýç8=ÂpXÞcÛ¥ U‹8Ž£EQô~Ô|Róüùó~øá'žxâüã„ Vׯ®ì\Q“ÍFÓ€ñbzf k‚e‡5ÏårˆäØg°hF§§šš1€€)…¬ñ D—qTù¨Œ‚@H_¸50#X;Gðg–ºa¯ÓVãš+_?;TûÜá‚‘ AX!µ÷ðr¹'§HÆÉb"2ªj«¹œrYÝpƒ3Fí»oû¿þuuè¡êª«¶úÀ{¨›nR矯~û[•Ë©ŸýL]u•L«™íz0Îk@!Ãi.ú‰«Y)Å*®²8˜ý¬æ€Ë–QÓÌ d³Ë£®€¼aR$Â&¡ª£¿G~’Ëår¹ô.aY¤@,‚ Xv–`_ÈÅp®…Hâ -yÂõõõ¦iJ0ùàÀRÕ2ì@ð€°Uðé‹s—Œ4N pf‚ÙÁ yÜŸË4"Q”' Å!®µÈ-#ƒÀÀ–=ÀI9gjŸÇÔ ­õI¾H™$wärŠfg˜¦¹yóæM›6ñˆ±·@ƒ®Lè„‚éÇI*Ëpð)FÅç‘[¶Ñ‡Á/ȼ¡˜‡'È܈ÿ£H4$EäÄs ÿ2,,5Ê=EsÝúêgœ¡&NT·Ý¦¾ñ õÄꢋTïÞ_¨Ñþb‹öÜsëÖoÚS{eý@ýàNugY^¹re’$:§ƒoÖ8 e÷ÕNdñ\Õg&.÷èñ˜q«%;ilÓä@;9fH¤ uų;SçA%LAj\=>Ž&>­µõº÷ˆý}üæææ?üpÕªUâuª'TÕre,è`ya0+ °H\6pjW\6nŸËW89àŽüdùX¸>–\Ë(œ‰ÿÁçÞ&¡Ý«W/¹}ÆŽx?@gþž±M”—! `ŠRˆv¡6E‘ÞW—&–’“Ük¹Ük95TUž­»È›A+¬gg™óÍèÈÈûwÏxɰ_µ~Ö-ŽŠéÀ "ÇSüÑÅRèy»ÿ¯|þ¿òj­âi:ðâaÛÂü=`§œkªŽÚågÚXXqÇI2βæÅñåÕªlÍ<Ïæ ÌË€må^¸ FÅYÁ6•ñhAlfA5±“åLat ÷6 «€CÊ8,r#èÄJ ùf ¿œ\l•Ô 9)L€­*E))B3cÞô i=ã uÌ1êæ›ÕØ±_tó¾Úî4Ö e¨|H=´H-ÚMíV;{ý•ÕÏ2r†»Üµl‹ Ð$G†ÁSå¯hc«‰e, О 7‡f^Ž(Š7ø"æ½(RÉÌÍåG&8p WMp`êËõ^Õ ‡ºIëUZz¢Á‘¹—i¬3ÌR{'i>ÚDRŠ>ÈîáíÄΊà’$ðÚ[s CÐÎ’›4ƒ¿ P ·‹vns ý Š:ÜÃ[£ôTfosÍ k6ÜÜÒÚâÜéèéÚ\Ú.¹'&ïT ?€òñÊÄåËÇÊùgö*wBÈpŒÒM¥º1uFÕP¡2 #|+ÌÝk~ª¹Û¿tKÑÞdsúÇú‰›$g&ùòæ Ó\Ó4µ¡­iVé‚’¢o¿j3ë{×_(@)”ÍÉÑ€¼&Çq„ã—RI@Û&Ü´X^9à:Ë_ù¾¸R§zÞÕ¹\dYS'§õƒà~Çñ|Ÿ‘(¦•³Áe@õ†ò®Äqf€‹YŽâD厄q‡2*>Á Àn@àÐcÄŒè¡!:‘ó Œ´³t“ì¹,׿E*ÏÔAù·(XÂÉ}Q²ž#F¨£Žú‚(·o—£”:Hôõ•_ª_WÃ×õZž&%~/?ÿoya”ò›fšP*½HY.Üñ¾TÏh>(8Àh7CG$h;áÑîQcÖoM‘2ŸºÚ¸Å. ‚‘AüFlFb%þ(ß~Ûvþìˆ >ÄMÆBô-(92< cíóÐH2Dv¿ïûP*Dԉ딇ƒ‰ô @ãL‚ËDZ-ô%YpØ&šÛåó‡Á«ðÜ0wHnì+crÔĉß:ò­ÍÃ7[[êÍö¡2œ*‰Ñä²ý=‚Pñ¸ÈŽíé¶U²„Çq%f`Z3¬ð„Мjrù½fõ Nuߪ±ÔÐëµ¹}úô‘™åÚ×ÊPñ‰qafÁ‰dHXˆkËpÀ(Vc $P FAQíOÊ‘ ÄØ±²'‹ãS¢èÊB Ð$Ãøzý«Ö÷FH=@ØÃ,ÎÏ,Ño6MSF9p<ßçþblcîfô ]nÈž¡ç„†eCOŠ#KPb™­ʃØ}8r&!`£HGŽý™ì†ñ1Þmï4¤PrƒL8ÚÚ±¼ññ7j;U’¥FR£Rmp6D}£Âãó3Ò5á ‘Ó@q•s‹š*%©gÂp‹°˜¢éà’J7œYtáNRœf.ô¥&òrí©úÌÜg–÷c#³Nñ©ði¦iænÌ%Ý“ø;±iš‰J ß/èP³b#°ü¯è‘Èn–p˜›(AéfNsŠDâ8©yнc)œF¦‡œÆCt„ò¼¬jµ ïŽÐÕqœ3J¥ÞÕj¯“ úýËøùêW¿ºûî»—ËåèÅhîš¹K~¹¤áͼšvÍ’a:øV ”R›UýÕ³€\,ÙÔ`cؼ/ïJ/|>4Ɔ†Þ½{—Ëå 6h­ïi¯îµ:ÎÿjL'#Žþ%*Ž-ÚM¶r”Lã®)†éÿØ/ªY©AQdX–ê(¼$ŽBé)éEiµð!…v°ë˜{ͯŒk$ò6!ÀÊ“àŸ0 Š#QÖT„¢9€;f‘ð‰æÞ(bvpª%€Yy<wÄ2 o§k;¾ïªïî½zïûn¿/¶bmÖÚ¯$NKgAÂV"TDð‹#ÈÍŠÔ[cçAñ—k?\‚†o+±6Ï5‘è©R© ¢ ^e¬ÈéyÊ(HyÓØb¸wÖÚ-ã$†ÑaA'@)…GE#&rªNÑd Ü#'`ºáûpû'ÆJ2,‰ê?pN+—»)õÈ€ŽF£31!Bk=ѲNŽãŸûþMõõòkÇEÑAZß—ÏÇ–e¶¹ˆárZƒ)5ˆBªÕ*êùØŸàž¥ÏP—Ÿ §AãJqÈÎåù ‚¢ Ƨ¢SÄnD·“çÖÀ È_ jÍ}Lj Ä¯Æöf$ž¼l¹ÒŸKº¨•RÖeVá“«™ËéÊ…÷ À¡÷ñqs€œ[1”˜©¥”’9iÀ¬Ñ8‚v¤2?6m×ÖOêB¥ úܬ¹bô¥äÌSs`AÓJE©éAŒ!Sè%‹º6bˆ8޵R¯8NC}7úk}U.§;~v•Q,²͸3†E÷N’1Að©eý©-?€íCšçßp³0N(*²-„éàñƒH…‘ŸÁ]èÏÀCª<Ì?‘4T^´DKòP¢Ä6®E_ŠLϬ;±½¸’ÿa>Ù'i½ª5w~n{Ÿ jnï.mÀ/‚Ã’ävåê+·° “"¡$–3â™»Öè× Øä.zŽËØâKPÉcâ$’ãSÌ¥dTB£—Z~A>AÑH¦‡ñµá`K¬ ûÅ ©þ„Ãò ù|~=öèÑ£Gªyð#få2 Õd¶Ô\ÝIÉ Åz „fß÷忞ç‰Û+—ËN¥Ò¤u¹\Þ¸qãÒK«ÏVkylƒïG›7Ëå¹sç>ýòÓïØïƒ 6”Ë妦¦'l´¦Zñ–X)µë®»rÈ!õõõ¾ï[OYÁ—ƒÐ `¢(ªJ\ECõ»öô 37)Wý¿Uï@¯¥¥¥T*GÞo<÷IllE:ÿRrçŒ-FõÒjØ=Lz%u7ÖÅâ(ŒÌO:$ ¬îÌ5–ÂDbÊ@â¦üq1Øn€šÙÓCT 91ÐE¦N(¥ž±í•–uS]® E¯ ëÃä†ÜÚŒÇÇñnI2: uœHëÿS©n…p8H¤<q£[ò›ËáMÞ¹e<9רùãw.wÁ˜tž‡’jà åU ¼¿ëöw“û [>„VõZm.2lu×k£É¶øiµ:Këws¹ó}¿Eo¹.Ð'40²x%O^bðm=™AôÍx.‹kq"Â4÷-#9` ^.9¢€þ1×á;wþ3ŒOÍÅ^ÇK˜Ï3Êäd‚`§¸nݺææf†5PTP‹#¿#%˜B8ÞèµæÉÖ©™,¯À¸|Û„úúÓššÎmn~8ITIÅoÆæQúø½ãÊW_Ý}ãÆ3f¼ôÒK‹W-nÜÜcFXÇ7Àp:tèa‡¶|ùò7ær¹ªUµmÛÉ;ÒÁòV¨EƒpÏ5-Ã0t¬Ýû\û;T¯«j¥wçYǘm(³Ãø÷š|ÑIV'ÆûF864 #ånËY+-sµé'>^OP$‹+aZâKÁJÐ(Ju“ W†uƒHÇqYt{©]îp‚e¹$É H*¥ÌÏc¿Y¿Ãa:ZÿÂón¬«[bKâø›IrAÞŸÏ«¶ùÖè¤Æ–N+_„’l9y†l1PÓE3:Æ0 »!}äPRPPÎÝ¡³Ç†)s\Yº>IÝM'Cg®c:f÷îÝû÷ïïûþÒ¥K“-‰µÊ ‡eÀZ—.X®$I,ë<ߟmY“´¶•º³XüeµšDÑ4*AóOèV¦€’.cÐü‚¹ùƒLyDèB‘T†8gÆ—‘LŽ’ 'òâ´ËBw:ü)À©øÐÂr]]ôŒqœ*•J©TB9;‡xö3P 0âx¾§ŒÜËÉÓBM€bU:Ó4ƒ8~¶¡áìjutkë3ùüÈgË …ê·nymì¼Á{6íùÊÌWf6«µOkÏ1=ÝŽæY›¬¤{’˜Iï¼óÎüùóW­ZeFÜ;66q›±Éš= @âõ1Ÿ•‡Ò­†5ÝÊÍÌ9†£µ¶•­B•$‰i™\'C3ܪùžéÎv­g,¥”N´˜¨fC×úrq›®j~ð=L*Aø6®üÁ}¢< IY Ÿ áB‰¡ËHƒéÀÝZÐÃV¤êÄ´E=¿<ó­ÿÆóþ-—‹´6 CYÖS¶=:ŽÇÁ®kv¢œÈ±åJ$Àª(Ÿ@fðÓË möÀú‡ˆ½@£g} –+AœŸÌƒ×”k®uË©v;P©Tš››Á-’yä™Ëéb`­ƒhýÝ0\gÛ/Z–-?¥®Êå~Y­:Žóz[peó9Ú’þ¡GC<_$XdBÍ‹•ˆ :`Lcã&8œ ®Ð`¿²0 ØúØú3à BΊ$¨áqkrÍhýcê*GʃÞ>Àh s°˜,ýÂ2ø¨ð 5Q-ÖÆPÚ€1r ‰&ˆ¹ ! î8Î_êë¿[©|³\®7Í»' Øõºç®~Î)8›ŽÝT¼¯Øo^??ðqÙ†aÔý±nË£[œ×½QoܸqíÚµò]­ç·æÊ[ }]<Å‹óËÏ­¨µ+HFZ&ŠZ–êP2jLL!˜Z\rsm7ªÔhQÒ¡¿½ó|î÷„™†YÇÈ;àTb×°yp%x’Õj¯ÉQ ùÜš ”ìSEM–(宥§‹äs¦iŽŠã×,+4MÛ²„ŸâûþL¥ÆÄqC­o;kõ Ø>y½-òƒL™çyâœRý=ð1ðoœTˆyZ¼"©F18§ÔpR¸F´Z× Áªe¯´Ã½Cc¾áyžîÃ0ôó~Ò?±çÚY-§ëk9J©Kã8§uHú¾‚DW”*¶…-0…Lá—Ÿƒ‡&è3ªÇ©iÊò·¬÷ÎD,nV´EH‹šGçb‰³SàOj였œÞ!.ƒê~ŠÎ÷ñžu†bt;‚ _ ² ÐmþL âp– —jfÐÏ„‡+šÇÊ4X=àEü±¾ïAðhCÃÛþC}½üd×;vÝïÆý\1ÀšÓ®#€–—(ŠÜ]ï?

      ïÆñ•ax}>¿Ü4ݶV–᛹<2/CZ¼‘ç¥ HÜ1ÊM?P;d’‹"‘i9õ¾ïW«Uà®< eæ&¤‚N ™e»aY–ñ†a~ß,¿\®ûZ®h˲J7–â~qáê‚Úþ×öírê”úÑNá»W/j®•?}A|ŽÒác-³7:?úñ¶e½îº ×àe`ª(ÊBp 6Îdæ_¤b\`bÜÚ"Ÿ‰#0šÀµ%Djhhp]·µµµµµ-÷ˆÅÄ@à`ƒÓå8Žt°J)Oƒó†ò;œ¬l“´àˆÕ@ÆÆŽYêÌ<½‘‰g©xÜØ©r¹ÌòŽ<¨[Ñ|b¶ªbŒàxà†ÁûÜÜ8xJ¦i&}’–+Z’>I¿ƒû‰g*O,ûßðó¿Éåɔˆ†ó”äš„²=jãòÚº&á,ËÚK©4ÍA. ¥udØÈ‚yBÓ~ Nq®Ð7&ÔJì^dóR7c'ìç”Ì ËβԿ"5hŒÏÁ,2nB;0`7ž¥Äª¸„/†a$†ñL.wvŒ­TNŒã‹B¥¬ŽŒsq*r…BwJÈLm‡w‡'–( U4žw¹ìyÀÚ˜o3…?6÷ñd–†C¤ ü¹–Ь׹ësE·Øò—–¤˜Ê(\VÈW¡2ÌŒ±Ö…+Žû?÷ÜòoD/P(^i¿gªî‘>Pës¾á9Ð\|X<õ#W)¥ÉX YAjp6%©É 9à2n<ð-5%Õ™ÍÅáΠʪݻwïիך5kä´ ŒÄ/Œ‰¥ðLÊBnÄ´Zv$ès§R©päæw’$¢ÉÁ67DËÙÀiaRYJŽ˜@šàq€=±KªOjz ó ŤÊÓÛ*ºú¹\MGÀ"ôòyåüóùü«ù8ŽÄ0"£Ç=¼¯z•s*¹;r §¢&-y8Ü“X•ãñW) æhß?-¦¸îËm0ìž™XÏ’€PÎçóÜIÆqFg±HÔ~DØBÆ£úÇÏŒ. ³…²“¦U¬ÌµÞïB¡P©T Ã0ç˜ÆÞ†±Ï‹Ùã:Aª®h“iš‚mJuš‰¶BO:>µ¾%Ÿ?7ŠòJ½ÐÖ•Â[&°R‹| |2;$H6@c qT™ŒÚ;´‰¤ô÷˜ëȲ`¬1)&Åìg­6¤h²…ÇME\‡çôN‘ì˜eY¾•!ÞÛ $0#Î[2Q¸Î YLãfÌ ¥ÈÁX”’jC‘{†Ç"0Ð2u rP-á±:)Ž\Fè¢uÊ)zö_“ú$œj­ëêêºuëv‚RS ãÅ 9Ã7’ÝP)Ñc’&ŠÃ|´@EK…œ©ª;ÈoHä±Õ0ûR0%–5ã~IöaÂZ½zõòåË[ZZ<ÏÝ‹Ï$BBæ(ÙUûÛÙvà(BÔs¯1OžInðGÀï3êÂõaP*Rf^P ªÊmïÏzÔÊ=‘+|È!q[K-£`˜»™Œ¼£ 9cl‚ÌÂ*A°}3Žã¬õHÃxÈu7[ÖCùü¾Ir|ðÀS¦¢M²=Ô¥â?g•w ‚+•ÒwH¥‰øF@‚bãÀ`D?©««Œ‹DgqŠUŒg(׆ؿªÞ+`ldÒ&®Æ4¤eȳшÿå Œi/ù|*V@#XƉl P®‘g#ÏÃYf%u³xÔøRäëÌ•g(ƒà8oFI2%𑤻nrÈAÝ}ý™'Þ¡϶‡4¶Ð:qЦ®‰“>¡î«í»lã ÃþÄfÖ÷"På!f©t;5”‚ð‚ÿ¦fëb4KŠÍ6]úùåT##ð]BZ•ªísõ>e›x©ðsTG ¾q Æ.£[€7â¡A):Sê¿x|³¸ìò5åüļ~]ëH¦á8Ný)õј(Y³fMÇÑAQҚ؋lÄ¿,è€NC.M¡Ã‚F\0“W|k¡°Rg¶Iž$I2<‰ãÛëêqRm‚ ØøFÁQÛ¤4&ðú¤è< 6å\å>EBPLèç³€ü>^4£ l1S?á¹æBœc{ çÍ¢ï¼Y™²¬*‚(¸­6C–Ä ™' gÀªKÜQÀß三?P4D o“!¿b¹Ç\.wøá‡ï½÷Þ…B«z¬e®Ÿ7Z û ÛÿžÏ.G‘˜+âAEØî í ´ÅæÝ#¢i´E n˜Y @œ…¹{1&ŽŠœp–x»ÄwPS•càS ]>,Ð Åšr¹¼eËdB¸)#ñ8“W -MC˜Û.ÙG¹\îÀ<ôÐC{÷î-!¤T\ Ô»wo²v-ÃG/¨HµEž†¤V@9Înm •º~óæB>ŸÏçL’¤îÑ:ÿtË#[‚0ð}?Š£æ§›ýã|çOv,5²:ü/àY~þŠTòä^ÚéãøAÇ¢õˆ0L’äà0<* tœ–¶^®I`æ·@X öl˜ Ê×¹ƒ‡þáD1YeBŒð@9½X,¢ßE +l½˜H„q)õ&¶ûÌ3 ¥HÒÒ¼ä¯øDÀ…¤¾ù:ËïÖ!InsÙIj¥˜RÊ`#Xh¬‘=U\+e±jœ¦TKµ©lÈ*BÁ† Z[[9¡ç’×´KòöÈ€µ.X"œUüiqM]1ú¸¹´WiÅN+žŠŸÚUïúÂ~/¬ÚeÕºuë¼f¯²w»Ä$KwzâÑL©î–Ô À&ì½ÀNA{³Øhî”Þ7AøI]¨€š £¿ˆ>±³È$`ÙGÈQ#ˆ<€Gû¿Â&¶,K µÎ%àÑ<à+ê[ÈøxD{DÉIxq˜ì’„ç…úbýØÛ=ÿüó+W®Œã8Ú)RU6…òQÒ$ˆTLµMÊš!xŽ4—0ù»TÆñÃpâø±nݦtëö×®½©[·5¦)T7k­Õó'=£ÞѦI›äÖº}½›jVhx/ YjÈ x\ b£ý–g-‹Ij ÃÛóù_x^!NÖúgݺEQµI ‰qß#”*ì+)– ¬Á“—»N½lfiN”Mˆ†´4 ½ö ±ŽÜ;k$ x•¼î\.'ìy&p^(ÿ+5Ð)•zÆ Oœã¹€©¹®†β„|% •ÈÛ¶}¤ï; ¯/ÖSJĸ%¤êä꾊ôñ¬Ì7/› ºMxÃ0,Û²æZÝ¿Öýè£^û͵­u­}ôQKK‹ïûaò, ÷:7ë(RNÕÞ. J ó-' @Œz/` ¥BËtX\7ÙaO3~Ú˜Ía¥T˘l#·†N@E-ÐòÁeþ8Õ# ™–ÔˆUHᢓ#´ê#tð/ª¨úáõÞ¯½üËùòWËK½¥¹§sºU›¦~%4—›áìp™³Œ{  B ÔNõÿC!3“ΪVëmûþúzCëÍJÝß½û·[[Çwë¶’¨\j­ê1ª\x¨joª¡¡Áqœr¹œÕ…ÖEØÊ”*êÆ¾ï‹E¦{ÉuþºP¸¤R¹4Ÿ·ÛÜ“ËÓ"’ëbÃŽ_þÁ†­O5 Eè1¶†]ФóÖi ä:âÃX!s# <=¥²p¦Ãà€`«£>äø””F’$_Š¢#âx\±ø½0|̲–µ}>Oç‘£§ òng¬ Í7|ºQ²b¼±sW“H¹œëOú'/°\jŠVš¹œ®Y8ua9t&9åSËs_›[.—]×]ºté–-[¢|žÚ±QiDí„m1²TGR.¯UPV—ÁIãx‡Ψ¸A€ !<ƃrËg'\CFh™²J<Ët8(?2•í–¸£”6ð XI´ÝpÍ£,b¨µ®žRu_qiŽíÚúYíÍ7[L{©äæåª·U&#÷T¸¤}X2Y.¦¾¾˜%¢Ç|F¹ëóøðÇvÊår¤#•SÉ~I~^>´?g, ¢‰”|B>„_éáò¬F€Ôò·²e4ùMAKÄL`– ó³±q™¬ŒƒÇbÏÃÅ8BÚ’Kß)™ÀÜ\$Oñ›ÁœÆb&èF”²îWk­OÖVɲ߷»uë6lذR©ôñc·ômñnó´£Ão†¹KrÆ#Y‘89Ò>p<| 2™ì aýñD»$I^±¬««ÕG'Aº¦õ°ju¾a´úö*:1ñÒŸÁ/=eé DÒêÆÞ@îÓ&ŸÉ59­$i¨Ã± bzº˜'óyfœÆÀð¼W±R5söC)G,#&ÜbD$\BW$ ¦hö9,ܑØsJS#¬¸í|Ë$9V©ƒ¢èNÇ©(•Sj®em0ÍßV*ßohHÚ¤EùŽÀ“7ÂÅBnåHeNJç† <[ž¡•3"ëãñb= È|¤râÌåt1°f†õ¶åôwÊ/•ÕmJ·h[ÛÞh/Î(F;j Æ}*Ë~ j>lÌ~áM†PÑms#(Å`áèL˜‘„1Q#E"bØ!¥qÂQ0®3Ň­ó<㔸î¦_‘P?g4&þ0á' CÝ]'A’´$û½ïرc׬YóðÃûS}û@Û¿Ñ·ž±Ì÷ÍT؈üƒI¹øææfES„ÙË÷.·¬ÿìÙóŽ-[níÑcãľÿµr9Œ¢Çòy—æÌC1tÁ¡âÃ[ææ¥†sž’Umz˜zÇ-™˜¿‡JWÀXãF`nsaׂ½Ê3)0o ¨”ü+¹_'KCàPžë¡Ú4™ÀvÊ„*¦"ÄõRSA»D?Mþ!˜àsBW¬9„kåÊ…–’’HW¤/°»Ößô¼›êë«Z[m0ìÚbñøªR¹&Ÿï¬ò€POį ®ÚTT§äPEð?`I*ŽPyw ª†C*±¯[ ½ü‹Ìåt¥¿á¾ûIÛý‹\„½Ã8Žíûl÷W«Z!„)ü ƒÊ«T7%þÊ ö|9úFÛ : jCPÚÆ¹‹éGÕ©„fëŠNJG™ÉÐ\SáLœ}!ë–¦$pxL!7ý±JnªDޏ“C‚ –·ò÷ϯX±âÙgŸ-•J2üÃuÝÀ,³}z|‘h©–ÀRRf·!îêÖm¬çMÈåö}'Ž,-óÊÃY$Û²¬Ê·+±'Vb?g«Õš6ðÌåx²æDá~¼)fÛ£xÀA47g Wº<>•Ôb7 ‰ø£ÆMoû"”ðOx–ÏÙ”›EC  ®œE:¹ÜÝ“r4ã '  у}l‰Îr®©m¬”j±íÿRê[åòŸr¹%maÖÈ 84ŽÅß0Ù˜çdyCé“ñRtPŽün¢»–-gá²g``<•~a¿¹®‹Ì¶‘Úî§‚¢o Ñýۮ¤#Æ@Yý… D¡P`î?ËÌ`¨-‹ˆpXÊÚPb’`ƒÉs΄k3Š;®‘ƒ3W(–|šûXcQ ;Øq¨€`,:ü‘ZqµYþƒ>å:…l#ß‹”ÒRl;`\àM­ÙV<46†ë?[?mÚ4†¨”  ŒM†³Ô1L!aµZ•Øœ¥!SǘEˆSCNT~bš,kô¦M ã‰nÝÌ6„ð%rQÐ0 ÿtß?Ù·gØFÕˆuü PUøu9Š„D4I3³æÿLIØ!ñe`ÔóTÅ‘2yȈ͑“ñÃÔ *CÐÅA›‡§¥º=äz$š¸‡j B’ñ %®S2¨H´‚ “íc¼)‰n‰Áà>(š ˆ)‚%“/ýĶ'YÖAps.×l§Áà8¾-Ÿçvi´` ‘Œgó(Ù¦g9¶K €Žû=á½ðÌe{KpÀcCñTU›nºäºûÆñÝŽSm+[âTr;z’à?Àñ“z!z?ÿ»6L–lלψ|#”m3g‚ó8L0ËŽÉ{™Ëé²%m’`ô2qY6“ôy€0Ãg†…4Ð]!©TÅZ 9rg5£ÛFÀâ~ ˜0&¤±´»|8¼gELìÆg9‡b† wåky\*I’éƒm ÓÏliÊåðŠF[2xßãû~þº|冊÷=/G^)øAr]bO³ó7åµÒh°åº¾]òW9írƒ< [ÑÀ=nN’®d¢Íõr)XŠZ"§ƒ]kµ¥çjÇuìœúLÙ¡~94j­B•Õ&@ór¢xs\4 Ci¨äøç·*¥’Cÿ?þn¬”JšózÓXië:›™T–2`OÀÊ"媭û•œD*(MNDýFÚƒÂh"ÀªHMôàòOò–_Àø>¹ EDsŒˆb0êXKL}}¦‡Åq¼T©+êë/*•~Ẏ㨶⨛𻒭bk!áÎYÌWå&6fßð±å4¤Öb±(ÄE`­\/éŽÏù¹6\@&ëÙÅ)ÛNiS(—˜ìÈ´Kñ^rÆY+š:¥¨OfôGÎÊù åoAë‚q”Ï<>¬»ÅHËð·r. HŽab̺æOæ±ðФn0½ i>SÆAÒ娭Fк<—ôJ‚ŸŽãÔ»õê•TñIÈGkbÏÝØO_”RJ+ëþv >CÚô$J߯xˆ|OP¤X£º¦ÞÖ'ªUí~Aw»`ï¿ÿþ={öœ={öºuëÔRå¼ï„_ swçP$çìDØŒêð„.®š(ã–ÛÚ#úJ’œ”–z}£—Rjs¼¹ü³²Þ¬£Ç¢Üš²Tá-µÇX- R<‹2|F8±f± ìX˜"›á ÃM]<‰92È;Yk»æ•yz€ÔÍ{Ÿ“o¦h§ œŽãlTêšBAµ¹mŽP™Z†’lRᔺžU;5¦MFØ2$0!å9Ë.MÝlê± Ã$¼áw µ> zD2H¢0å©ÑŠ©œ†ÃÜrÁ'ýœu V Ûá'¶‚ô”@CÛŠÆ£!V…® &B!UÒ ‡¢QQ ϲcª ¯1î 2@á3Êð7µ§S[Lóg¦ã8…BÁ‹¼XÇHjøÚ"8Ó4½ÿô’‰ùžišfœÄ¥ß—ì×íÜ9Fäá<øÏ\ a+Åæ|×ð.]4PWWwÄGôîÝ{É’%›6mÒZ:àÀ…åLR¡ Š h§‡‡Þ7=Ã0âEqþ·yø!.P†|'(\Qèã÷Ùwè¾¶mðÁáåapU ÷Óî&—•¡Y™B¬âq‰ÐYóÑbWþ³RCo.¬ÁzH ð p*èÀGÎ rŒ#çÄýÉá’Ü ïTãÞ)ÏçfLt ÔÃáŒHž*"²uŸ`”8å›SÅNÞ܉%›§¥±ø&N%ƒá©ÙWÈb™7Á]º¸Yv!,ö "?)Öra)s9]“å K\‘ö8° ¤ùl¾ñRQ/A½G :+ï‚\ÏSi9¸C²ÿ¹ ¡0Ê8ù°Rê—„®®Á"sý×$T8`’ÔžÆÎ¿(ç „"4œ8HàŒv.æËc‘KÊårìYÛó<þŒþ•2©ã8埔­÷-5O¹+]Ó4£82æñÈØ?Åw^pR­<¯š éM~¬Ó4sN®””"#ªT*o¾ùf>Ÿ_³fMŽë(SéPãÊy21K‰'FÙ)È•ç+îënýïëµÒþ`¿eJ‹{ƒk½h¹¶‹Q:azßñê§Ö÷U}¿zÆWÏ<óLÃ0Æ?a„ò£å–kZœEN²&aÝX©ðP•j f&IõÎOüð®ÐÚÉ*\_\y½b>oænË)­UžŸ”R G†¦(‘1«è(3Ó\×•Ø ¡RÉZX%î ïÕ¹T³¸oÉê@ OÉéï˜ ï8ý•dN°/îUâi[ Ð†’5j†Ð6æä@u¦‚ Ç›•áS…"®¥²1ùÛJ¥"îŠÛ,@ÁdûT°Éº ”2ds#ƒ´˜óežÐŸ-Mü ·@¡{N.•Ä•^wO7hãSÃXbÄfl†ÒÊúÄÒûèx·Xµé™ŒV±¤ÐvÎöd{€ð Ξ°»Ì-L*”/(×ý¾nñâÅò|r¹œÞW'#’~¸“r:¿â¥GÔèà ¶ÕWª #jþOî<×}Þ-+åæƒÅÛqÕ[KŒ~=ûyä‘{íµ—ã8GuÔŒ3–/_®{èJP1’Zü.µ"Ö:JÁ°í9÷­Iîþœó¾#/Ë2­î#»W¿[Uç)çÑ[šÉî<1G¾èÅ£€°C Î‚Û/ "n›rü\3[ª•‘àÁŠN"„ú'Wmqý1Å2k?¥*Ë?øü­|`±XÄȵÔÌ'Äšòùìɘ8.ÎO|jª£V, 7íAo‚-cÚ ®puû]æöžåà` zÀ}רÂÁàðƒ>Ûy8—…™®ÊmØ=,¥“Úµ\Z”€¥¾¾¾ÿþõõõ,–„Z¼˜—<ÿ¢¹)M0YAÛ…t)¨–žçIiˆá[€Þ0r;T¿qž¹¥€[ €õ«Ž²oò´ákñ]µnö/GÎRÇ^l …!C† 2¤P($IbN0£ý£d·=(9 ƒû-p¼åçè-gieÇÆ"Ã(• *F®æJÃ3Co¤—-'Ì5- ºgÝþmáäØ~ÕæSPô’ŠYO®! ÃÕ«W¿÷Þ{ ,˜3gÎ믿¾|ùòr¹œšƒÉ F¦ó2Á×4ÍdßÄØbX,l³1÷c7é›D="›!®ÄE„#ò¥˜òÂ>­u¯^½z÷î M Õ&™ÌåRÍ•ãg˜>ö Sá¹uÈ“â„wÊ=Ø“(ÚCxa*ŒƒËÒþ 'åàYà—¡Z‚ &ÎDgÕqž,Ú  ÄÀ ÏCbÍÐLIz›hÍá¦*`JŒ³£Yö5Ut¨¤xŠC ¬Á$$ï¼™$Ž–äøƒ"AF»wï¾Ûn»-^¼´T´IT(±-LsŠ„ÆGxPö@ aÜÑDМÛ]1£…+%ø ê%@繓¿Ã<¹Ï]0+,xj˜µbRÏž=GŒÑ£G§žzêÓO?µ,KЧ£òüžUÊ46êP²æ’l;Î3ÏÊY¹h¯hÓo6Ž¡µvg»öBÛ™ìÄFŒÝ]x›ÆA;öÏö;ž]Ã~2Wz­ÔpO}Î$'l˜¶áÅ_\²dI†óæÍkmmÎŒÌ)¦Uê00 ¥oÆmp1òÞÁž¹Á´VZ¦SES.—=Ïs¦;ñ7ã°oXl*r܃¢WÂ3Û…G"ÁÍðœ\$¯(¡ãÉ+Ò c_"~ã‚À©°v5ž^Á•!SyP/Óù‡,kÄ´T°p¿@™…ŸT¡ &àõ â “c–{àZRÿ”ÜsR2—Ó• }b7j°íÏ c€ø¨%Ibk;HC•Jå£>Êår---¶m+G©XéX›Fû °$ `-g-¥q ËÜä%Àñ8Çâ–,ù^aH#dÄ!•w‡HH&¸ŠyóÀ0¤Å•/‰;%åÇY©Tä»e`OÍsâÑYM SêqH¬È?”ÝËÍlLpB¥]=óf.§k°5±2ÐBÞ7úc——+É Ï£¥-í–)MDgˆ:!Õ%• äX\ÕçÒQÇ­­­›7o†‘BŽÂlµZE]‘5nѾ 5*¡ q!Z ,Ö$S΀–Èõ#bå¤m·Ü”|T R…zÒ¸j TJ jfL^€Ö™û'7¸%03*s*³f͂˿ÚïØÆ#Q +¢â þæyž v€¼pÖy Ê{µM²ÄŽãØÑŽiš–]›Yù/ìn.†Ï®Y“…¦ÚWéºT*­Zµªlª¬…K›È¬;¿®ü@9iMšžk2 #p‚êEUç1Ç}Í ™+³™ÑœR ’9{ƒôMìž¶Y6W¯^ÝÔÔT©T,ËŠúFªY©’b¾%,Ø(Èø)µ`Œ¼©Î£e¸3T7°™‘y0Í1Aг.®à6¼â¦û£@u±Á§O|<ÚYB†×¶4.Á.gº¸xÄšØiÐârŠäAñ*åðâp/Ø™Ëéb’tªÄ9<æ„H9T„ªæ [u”¤ì|Bx= ëàJÊãòÀ™aëÃRs±1,²¸a‚¹È!yËÂ?¡-Ÿ›Þ1ÂdÍ2‰ î ¦‡ æ‰1<­HºüF¡,IDATža´?˜›¹á¼]Úë5'8!ö¬?Y¶m›–þ ÔEmOµñuHñùò4D(oDœ1pŒm„FN+¹ç‰&W¤ÑñMe€KÅ;‹-SZòO景o†÷S¯xC‘—7ܱ®±ŸQ>¯¬ ¥ZTñ´¢eYÚÐ\=N áð›âPÝ~Å®Œªø{øÖ,+‚¦¦¦üuZb-´ŒOkâO,¡„‰ÈŒ©r}¿–‚¿ø…‚Á…«h¦B{ÙÜ9€©H(A÷HÍÑ„Ss$UL>F ÉjªÌÀÄv Ï †VÚyÓQï)€o)Å ØâN¦ñÙÄð¨_ü+ âÄñÐ<0/€åò}eê]}¤‹7ƒ‚Ï™H)m¤z,€ I8Ï]Zà.§$ëY\Y¬ OzgqL†þj÷ JÃÍŠT^¼â>,a‚‡4Ï EHõF@t=EŒf)%ú‰0ó¾ä{;O#A°ßiîùœ}²н‡¼Ð mصņù Çý1ðÐbu¥yLª KuE  ;qEÕqVžRʽÞõôÜ)®ñ#ŽãpÏ0º2rf;ñªØ6m¹Çq–9úšš¹‰TÄ„4\ -§&cÚEǹÇsþ¹¾qš‘»&'ÿ¼rÅ\næɇI˜birPÏ ¤p ªãP¼q$[¬x”r9x†f6ÀjÐ Sl`d3 «poÞ£"-Fº0®©óà"tbò€Ó4£#"ï|ÏéÚl­utz]™š*lçæ¡./Õ  ׈®Váä3‹˜ÎW +ÍAºácµpv—ƒ¸IÈÊ\à…ò1’tì™ ‡¤h@ˆ´²†±O’|Û÷ËÅmCS• àé܇…óÀÕ‘¥2•hàÂ<+4‘ ¸c63ê(Þù'\ÕçÑs) 8ô1ê‚©·ÌEfþ"bEM¦,Ì`â8 ãsËgIkmM±L×4§Ö¢Kw¹DZ2jM0ªHÉO1­„l‘>â1$¨a ²N! !±sº;¡ Ó°|+®ÆÂ‹E@ãÒ.7Ùt>qô)ºéå&­´±Àp®uŒõ†ã9Úhß–¬ —jRFC ;cö͈uä݉‚C­º0ÛÈ­Ë…CÂÒÔ’aZikŒUŒŠz}Í›B.AX^œÄcä ¢±Œrkè€ÃÁh<‘–«;,{H5B'?aÀHµ\*ðR4¸àuõu]óvI ö6j†Æ`#87Èý:§V);±µÖFÃíá–ÿX.Ž)Êwá¾8à.cTkØÁp³w;È r•[ @ àOÞ9˜AÙ êmbAìq-ÕiÊ€œa œ`áqø`ba6šæÿ ‚gr¹Kâø>ÇÙÔ–$É xÄV©~IÕ6ñŒÕ£q¹åž£K´ 1(˜H誡Ù%å9:›n%eÇ“ú‡dTb O gCÊH¸N¾Gy’œQà„LÌ]DÍ©|´vJ#e-±´Ö*QÚÒà8ñÉgnBlw]»£:‡ÀªMC,5ù[RÐ3HöK*gUâã$IÜ×Üdf’;ŸŠNL´+¥”Væg¦u·åÜí0Fg9k!'æQ:°\Õj•AW†å’‡ÉJå¯öuË {…íwQS4 #Ñ4$¥`z=žª€“) E,sÇì2D9üg(ÃB7AøÌÊ–9þ‰°ïÚiõ¨ ž†ÏI13e£eh|uÿªµÌ2?3ã8ŽØ0 µQ™[LÕª’}sa;Ÿ'=y¨¹vƘÄÛt‰Øö,‰+úOŒéA’Ú¾;€ôÀvïrvÞyçýèGêký}ÔJÆ`.r ž{ÁÌ%N)þ5Š·¬ƒMsD 0Ím¼I™:ÅQ6`žÀÕ”† 7)ŠÔ!ùcSr[|#)Áúÿ,ݪSŠSÄ3žHq$™cqnnÂGÝ‹EMpUÇ‘<ª£PXªÕ.$~îPðÎãS‹Ù  ƒ3—ÊoB™@½¼ý¼ÊW+õÖ;Óœ8Ž«_©†W…õ××Ê€ÇåK‚N%2÷EñhŒÍk„ŠÌTGÉCC¥ñ}NIÑŠ³ËÝc‚xÿs`²Xû {¤ÆË2w4…Úáç<ìY® <(“ÍRZ!ÐÏVóØ…p,Å7…Ÿ³œÖÚ;ßËËëK5F÷Ö[7Åñݱ3ÁÁÇ2þ ¬/5€Juœ4ˆ§¨Å[Q»+÷9pf„Fu”+äÖ¨d.§ËÖ Aƒ®¹æš/èÃÞö‡cT¶þY×¹ÿÍžÈÖ°®þïÿêìé|a¥ìd+[ÙÊV¶þÑYŽÖú¥—^ÊžH¶²•­lek+®#F|ŽË‰ãøË_þ2ÿ^JVòòW[÷×¶‘Ëø¿ö|ÛÂel•·³c¼‘¿} ÛÂeüÃ^ǽa2«Ò%Çy+~þðáÃ?Çå|îG0ïëoÿWuRxݺÿð‹þüìÂþ7Ÿ¿Í^ÿÕ6{aÙÎ.lǾ0î(Êj9ÙÊV¶²•­ÐÊ\N¶²•­le+s9ÙÊV¶²•­Ìåd+[ÙÊV¶²•¹œle+[ÙÊVær²•­le+[™ËÉA¶²•­le+s9ÙÊV¶²•­Ìåd+[ÙÊV¶²•¹œle+[ÙÊVær²•­le+[™ËÉV¶²•­le+s9ÙÊV¶²•­Ìåd+[ÙÊV¶²õÿ½>x†ŠcB;þ,ëŸj²…êºá%*›þòÙ êŸx–ÉñF¾Ð)>Ùé’7ò¿±Ì×^{íç¸˲&OžÜ%~oÊ”)­­­gžyæŽáÆ/¾øâ;ï¼sǸ—9sæ¼÷Þ{ßûÞ÷v˜ kGz;ÙÁٖדO>¹óÎ;üñÙÛadóOGÕ%7S©TšššºêÛ·úÚwß}w˜{©¯¯×Zï0·³ƒ½ìàlËkÉ’%»îºköv”Rq·;𯯯·Þz«R©<ÿüóçž{®ÊV¶²•­lekë­8Ž[[['Ožüÿñ} [ÙÊV¶²õZ™ËÉV¶²•­le.'[ÙÊV¶²µc-ûöMåryΜ9Ç{¬Rªµµõ…^PJ1¢oß¾J©÷ßáÂ…;í´Ó)§œ"¿ÿÄOh­÷ÜsÏmê‘577Oš4I)5räÈ^½z)¥fÍšµxñâž={JyMkýÄO(¥Ž<òÈÝwß])µpáÂ÷ßß¶í³Ï>{Ü“&MjnnÞ{ï½=ôP¥Ôúõë_}õU¥Ôi§ÖÐР”zë­·V¬XÑ¿ÿ“N:I)åyÞ„ ”RÇü.»ì²íÜÈK/½„ gç‹üðÃ?úè£b±xúé§Ëï<ýôÓAtÐAûí·ŸRjÙ²eÓ§OWJ}öÙ¶mwí½¬\¹²¥¥eèСò¿sçÎ]°`ACCÃi§&?ùË_þEÑ¡‡º÷Þ{+¥–,Y2cÆ ¥Ô7¾ñ !½ôÒK›7oÞsÏ=·µ·#kÖ¬Y{ì±GÏž=•Rï¾ûîgŸ}Ö«W¯‘#G*¥â8~ê©§”RGuÔàÁƒ•Rüñœ9sÇ9묳ºü^-ZdÛ¶œn¥Ô;ï¼³téÒ¾}ûŽ1B)†áøñã•RÇ{쮻š?þ|ÏçA/œ8qbµZ=à€ößÿ.¿ Þ~ûm9ÝJ©Õ«W¿ñÆJ©3Î8£P((¥^ýõ5kÖ 8ð¸ãŽcþÜsÏ)¥†Þ¯_?¥ÔìÙ³?ùä“nݺzê©û»¬bÏ»ûí¹Ÿm(­_vÄaqwuùå—¿òÊ+£GVJýæ7¿ñ}¿µµuêÔ©Çüœ9s^xáÏóV¯^½jÕªaÆÝyç›7onmm}÷Ýw÷Úk¯nݺm;víúë¯ðµµuÊ”)Ç÷Ýw'OžìyÞªU«Ö­[7tèÐÛo¿½¥¥¥µµuúôéC‡ݸqãÃ?ASSÓܹs?üðmÊß<ñÄüq¹\þè£êëë{÷î}à 7DQÔÚÚúÚk¯tÒIS§N6mZµZ]ºti©TÚk¯½n¾ùæJ¥ÒÚÚ:mÚ´ÆÆÆ\.×åw1uêÔßÿþ÷·ÜrË%—\"?I]äâÅ‹Çïûþ† /^|ðÁ7nÍš5¥Réý÷ß8p`’$wÝu—¼ÙwÞyç˜cŽéÂÛ¹æškxàÖÖV¡ØÎ;w„ ¾ï¯]»vÙ²exà]wݵaÆÖÖÖY³fí¾ûîžçÝ{ï½rñ3fÌ8úè£ÇÿÑG•Ëå äóùváíLœ8ñ¾ûî»÷Þ{¿ÿýïã‡3fÌ¸à‚ Ž?þøLŸ>ýå—_öôÐC|ðÁåË——J¥Ù³g÷ëׯOŸ>]øvyä‘x`âĉcÇŽUJ•J¥Ûn»M,À´iÓN8á„É“'Ϙ1£R©|úé§aî±Ç7Üpƒçyb"Ž=öØ?üð¹çžóùä.¼—$I¦NzÉ%—<øàƒò98Zë-[¶,^¼˜/~ôèÑŸ}öκuëN=õT>8¿üå/_xá…®};}ôÑĉG%ÿ‹‹Äà"Ÿ~úiÙ“¸Á“O>¹©©éñÇ¿å–[´ÖóçÏ?÷Üs;ÅÊ¦è’ ÍçÜør·¾ƒL¥”e»n±›aZ_ݰaÃÊ•+9ä‹ô}ܸq‡~øš5kv€Û¹úê«þóŸ~øá«W¯ª¹Ý­AƒtÒIìë˜cŽ6lþ·OŸ>ƒ Z±bÅÕW_ýÀlw·³çž{žtÒI¦Ù^9^¼xq±XÜyç·»{1 㤓NÚk¯½ø‡«W¯>ãŒ3.¾øb¢·¯5tèPËdõìÙsôèч~øá‡~ë­·n‡fZn±[÷‡8ùº/œ>°bÅŠßýîwW^ye÷îÝw s°~ýzÉi®»î:nqÚN×µ×^{ýõ×Ïœ9sÀ€R£ÊÖ6¸fÏž}Ë-·Üÿýù|~{¿—É“'¿ùæ›×]wÝóv&Nœx×]wýÛ¿ýÛM7Ý´½ßËæÍ›Ÿzê©™3gΜ9ó'?ùÉVÿü/¼F:kÖ¬)S¦´´´´´´Ì™3çÕW_• Ûö»vÝu× .¸ 3‚Ùú‡­9sæ<÷Üs—]vÙŽ‘Æ]}õÕGuÔüãéÓ§·´´<þøãÛû]tÑE X´hQ¶W»Þåœp ½{÷VJ­Y³fÉ’%®ÉV¶²õ?_‹-ÊçóÂ}ÚÖ=÷ÜÓÒÒ¢”Z²dÉö€fëÿ{õß»ñò—ôå/é[îyü -R­X±âÇ?þ±üyáÂ…o¿ý¶Ö:Š¢n¸¡±±qôèѾïk­=Ï;âˆ#ÿô§?Åq¼MÕÛ…0ÓØØ8kÖ,­u†¿úկnjֺ\.Ë/Œ?>Žã8Žzè¡ÆÆÆãŽ;Îó¼m>àûþèÑ£…¨¦µ~ûí·åú.\(7xÙe—566^tÑErƒ«W¯–_xùå—“$ÙvîåœsÎÁŸSEÑwÞÙØØxê©§b1¢±±ñ¾ûî‹ã8I’gŸ}VþÉ–-[ºü^^~ùå{î¹Gþüâ‹/tÐArmRˆö<ï¸ãŽkll|衇d?^~¡\.k­ƒ 3fLccã¯~õ+aâlSoGÖµ×^;oÞ<Ùc×\sMccãw¾óÙc---r;&LH’$Žã|°±±ñÄOÜÑã?þÌ3ÏÈŸÃ0¼òÊ+¿÷½ïÉÅoܸQ.þ…^‹¿çž{GŽ){Ï÷ý/ùËøÃäÐuíjjj:ÿüóÁxõÕWåúW¬X!{é‡?üacc㥗^*{éÓO?•_˜6mš®›o¾¹±±ñ¬³Î’L­U-úò—ôÖkÐ~Fÿ½Çþn¦Rªß’?ýä‚oe>8[ÙÊV¶²µ×êVuû;ªyí’ñW–©d+[ÙÊV¶þA+s9ÙÊV¶²•­Ìåd+[ÙÊV¶v¬ÕÎX«Öïþþg›‡ ¬ÏJ¶²•­lek«¬y+K›tÏÏq9-½|fÆ{ôÜ-{FÙÊV¶²•­­²ž™±ÂïÕCµÍ¢¦¾èÞ2iÙßýˆbeE}ù³ìQf+[ÙÊÖ?íÒn6z^éoÿZµ0Ðjó7J)cÆŒw/üõƒ#/þ>çoÿû$IŽß%ò×c…^¹iýºòÀ>ÙÏV¶²•­Ú†¥r×eˆ¿Ù¸dÞ{èׯŸ!ŠÓ¿¸é®yŸ­9éü›ÿî?Ž£``²l¿ú-ÙÏV¶²•­Úµ²pàgÕQPý»¿ùڸˇí±óu?½hèС†ÖZ)µlÙ²µk×vÎwÿ'ßdƾW³'ž­le+[ÿ¼+·SdØ:ùûjú/<ùPÿþývÛm7¥ÔÿK‰Ç}sŽ•LIEND®B`‚saods9/ds9/doc/user/catalogs/editjmag14.png000644 000765 000000 00000117335 11332127303 021047 0ustar00joyewheel000000 000000 ‰PNG  IHDR&ÜmMöóbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ 7Jaë” IDATxÚìÝy˜\uèÿï÷ìçÔ¾ï½%$Â’‚Jäâ2A×—¹?AÔßüÆŸç2>s¯ÎÎ8ЍpGTdDGL$„ìéN:é}©ê®®}?§ê¬ßß§ªºzI‚:À÷ýäѦúTW¿¾U]Ÿ>uª« BÈ0Œr¹üâ‹/ÞqÇàÒtCÑ –¡‡Ãáþ{$Õ›À¼ª³†¡iüºs©ªJI’—¸ýÃ?¼k×.‡ÃAeÆ¡C‡>úÑîÚµ+“É,ßB¸ä”}'§?<ó§ï}¾Žq8î¿Iÿï?|ïÀýwd¬x¿½â‰ñxüÀú§ªëú¥ŸëW¿ú•ßïß¶m›a\ÒeÝyçŸÿüç~øá;vP¥Récûؾ}û „³³³ðE1[U_ž¬¼i®*c 5à° 5±¡¡ÝÊ—ª€¥)Š"ź ° œ¢jŠªÜvK±""(’x¶R«x–Ôe`·òR]ÖtÃܸP M14U“ Ïjº.+Ài*µºIV W®JŽ¡ J `³p YU5àvX e@S$ÇÒU±±bjRC7 ¡ÓÊ/ qÙ-¥ßBQ s1Av Wúí 5äe›P¬ˆ—!IÂʳåå /5–CH†¡/ v ß!¤†|AIòSë¯Â*ª~Q ¬7ÚEÓ]4C‘,CW †¬¨—¸†²B‘¤°2„¯IòrM‘µ!U !ôª 4Er¯B„ø:AšbÚžU´e‚° ›·êW 놱Â24EæáR ¡zDÕ‘ÐlgØþ®@6ׄøû"Cš¦Ç.»¯‰ødMgœVÎÑš‹/ƒ„Ü”…oBbþBYJ¤ -H\j(Q¿Óö Œ±4Ùñ)ŽLÍ/ƒDÇÎŒº‚nÞ¹©Õ婹E Çì½$_žÏ–½‹UdrhB] éøTMkA’ñL¡"ÜÖ0¦šad$ná™Õ1¡"%R÷"ˆÃñ· ^-H0*d UŸÓ\½V‚¸:!ô Õ]\¾œÌ–½Á¿*:94©jZ4àrøÝ#ƒ±®´ ¡ÙÉùr­Þ!ºÃ^È2#c³6YÝÌå+Él© 97©¨Z¬áª/ê“4c,žvX9GOh>‘É—E¿Ë^½a: ÅŠOÜvÁÓ‚D|ot¢ÄÈä¼ÝÂö/†ŒŸCÅ‚.Áåš2!RCœÍ.‚¸mA:220¼ Èå«-HdjhJ^ièÆèÌ%@8fU—¿T•âómHBÓTs÷âÒïÏÍ}‘K¼çï<˅εâåJ’DÓô®]»çÁÓ“,Mw…ÜšFf2+ßòÌÌÒE)è¶÷„=OM€è ºíVáØ¹„À±Ý!wE”§’ÝÒö M¤Ê¢ñ9»CîçOŒÑÕt“$ufbÞ.ðÝaw2[Iæª~—­'ì9rv¦¡¡ÞÛë²>3Í3LWÈ]WôñDÎeºÃžÑx._i„=Žž°çÀ‰1H±›ãØS#sVžë »ó%1ž.{Öž°çôè\­¡ÇüΰßÕ„݆†g2+ßò̤ 風„ Lö„\«åعx"u@¦R%Q‰øÝ!Or“58>o¸î°'™_€ši¨¨'äöºì‡ÏLs Ór7T}Ì„„<ã‰&¤{ââyî¤ ¹óe)ž.yÖî&D‹ù‘€ûÅÓ,Mw…\ÃSi‡…ï {fRÅȤ†`oÈå°[Ž‹ ìRȹÈþãc4Iu…\E ŽÏÛ®;ì™ÏWç²U¿ËÖò;7SWQOÐís·!.¹2›ËUê!½'ì}þÄ$È®K๓#³Vží¹ó•z=–²pl,à(VåD¦âsZB¯ËzèL¢#0_ yl·íÔØ|CE«#nËÊûx²X¬6!‡Ûr)$ಽö³“™š¬÷N›åȹY–¦»—@2å\¹ñÚýnÛ±áÈ©6D”é&d$ž+KjwÀésY‰7!ŽNç.âw$óµTA ¹mO v[îøp’g™® £ÚÐÚ‰d±P•c>‡ßmmBÂNHRƒ“ÏÅŽl¹>—­\Ö Ç~v*Skè½A§Ónyy‚&æ .+ö9â™J¶TxíE¦ )‰J<]ö9,!Ÿ}$‘/KjwÀásÙ‰Ó$Õt€iAæARubáŽ'y†é :Ć>5_ôØ…ðbÈKC @=a'IRƒÏFŽl¹±Äayy¨ ‘u4>Û†T;!ŠÖDÝl Òµ"ªÝ‡×i;t6Nµ çÛ‚˜Ê‹!·-è±KÕUcuØeµðdž“Ü2Èd²T¨Ê1ŸÝï¶^ñ;r•ÈtÖ„¸Ö—‡f™ÅˆßÏ.@Ž·!,sr4%pL,è\ )´!/“$Õ2!Yû2ÈÀDº®«–@d}*Ù„LÍ—ò9æ³ûܶÃC³ˆ {›´µâ´†¼¶¡élµ¡™Ã-ˆ¢£ñÙ‚ÓÊGüŽD¶š)Õ#[Àc?>œì€Ì7!’O•½KÈkMJ¢Òíwœ&À¥ÏsËÎp.^xðé³#³Å%÷“~§ð¹Û¶_·)ºâ Ú70{ß§XšÔtô¶­]é¢ôÏýúÄôŽ‘Oý­}!'„PÓ4óéDûœ©¢ôŸ;ÿoÿ5ð½_™-¶¿‰§ŽL~ã‰÷ýôø¾8Òžp@ÇìØÜÑÕ^[i¤e¹¡âRþ…½¶½×t±röBgqÛù÷]·Ê®çuQ$©5Q×»¯Œ¬sk>˜£*3JVÓ sã÷]·j½r)h5ä|<êfw®XYR3ÀÅ¿t©1©z‚×i™LUŠ¢ÚpXîÄX䪰SÑÁùDÑ*pa¯-U¬' RÐmuÚ„ó‰¢(«"Nš¦OŽghšî8ª }b¾â²ó·5ž©æªrÔo·Y¸Ó Áþ¨ËðìL^à٨ϖ«49Ñ粸–±¹R¥®õ†ÇžMÕrJª1:W²[¹ Û6—Ó¥FØksØø3Óùº†ú#.H“9–eºö¢¨šßbÈñÑ%¶ ¸­.›p>Q¬Éƪ°“YqÚø€ÛÏÖr•6$«-ÈtžoBdâqXÆæJåºÖrðº™-Ù-&DZ€Ìäë*꺒:=™eXº+`/I+CNŽg$W/‡ä—CØcЦ{‚Žš¼IdkÙŠñÙìV~`2'ë  ¤¦Ä³5o"-‚ôµ ¶6¤Xy¬&DjC&² Cweb_b€EÈÈl±ÚÐûÂNn $Ù†ˆ™dЄD\g¦óÇÄüöBⴌϗK-ȉÑ4$©¾³¡5!!m¾ Í›»0dB"Ë ©ŠÛ.ø]–©L%_Sb~»Õ›³àUÍ›%’½xvnù¼dJÒOîÿ—>°öð³ç4Ýê7qúÑ}çúõÙ_Ÿ˜¼4478™iþA¨ö™ç â gæ“Ùï>}æÓ·nYóüü¥ñ‡~}V’5À÷ûÀ Ìý,€ ÇvùlµÂü¡ñ² çSÙ×^ípyžLEÜüænç¹Ù²×Æœ®9-lÈ-ÌÙ²óZ,3:W•dcCÌ¡ÄH¢Ä1toÀš¯©s9Éçà/©:ÜܳpD/)Q$Õ¿’¯ç+J·Ïʳmˆ£¡‚1â·æ*j҄ظéŒXµÕhâè€D½+ÇŒ&«’l¬6!l¢ÍæD¯ó.$JŠ6÷8ÄšHUm<kBêa·àX™*Q$Õ¶–D-žÝV6àZ Ï2ó•†rIŠ¢ÎΔ–B<&¤õ´ 6¤ÈÒTßRH½XS{—@d41_µòLÌkÉ”åT±r  ;™ªUëúš°BòÌt‘ Éþ°­$éñLm Dè€ÈªšÌK'ï^B¬Úªu}*]sXذGHÂ3cɪØ0ÖGFì€8V‚t;DeĵBäàt‘ Èþ°­,é3™šk"wu@6v9d Œ%KbO¤zc¡Õ^:¯\µ©;>=ièE’¯‹õ·¯òPõ¹íA+ˆ'âÛWõ@•IV@`Âü‡ô¸7ßpÍŽ:>U«Èà®èªäÓU)I ^¡Ïeߺ*pò̈$k²T››ùêîí[iBO§âïØ¼©^-ȽiKð¥Ó£§ÎMây›·Ûk³%ò’¨õù’có¢¢Ë»íyQgë–îññÉ¢’­Èa'gãééL½ÖÐ×…­ª§25ÉQKº¢Í. rr‰‚\¬©Ý^¦Èñ´ÔPÐæ˜­Z7¦2GS«Â|YI—ä€sZé™l½R×ûƒ£IQÕá¶k¶ª'òu;ÏD=Ü\AÎW•¨›çYj2#I²±1b­+h2S£HrmÈ’ª¨óņׯzmì„ ÇS¢|H¨jAÀRÈlA.ÔÔn¯ÀtBdc*-q4µ:Ø„øíœËJÏäéB:êá“9÷ m¾ØðXYŸ}ÈÖn{Q4f²’`BJJ¶|!ц8…ÅšœHKu]³Õd4™ÙEÖmefrФõ,£ó-HMOäê6žŽu@–šÊH¢llˆXšL×H’\¶¤ÊMˆ¿ ñµ êRÈ|Iɔ哳óôT¶^«ëk[£ Ñç u§À„\mÏÐÔ%BV/@À¶[ÂÑ1Ÿ,ʹŠuóŽšÊÔÛ©t Éu‘ˆÃ„¨½>\aèÞˆƒ§§³õj]_²hKÕ DlŽZÒU}.¿ÒåáÙ @Re%U’}vÖmeâ¹Fù ×hCÒe-Yl¸C(²é²¥¥ “s‹ ã階ˆÍ]MˆC`® ‰ÚDBQýA!UVS¥†ÏÎz:!›•ˆ•£cÞÅl]l˜8•®¹.bIW´d¡ ™Í7Š IV›Ç4૬ó,‚[®êÛÐí1ä´Qº(™Î^h/çÖ«WQ$ùOïPÛ×…þüÖËû£î ŽŸCøè;6Ÿ:2 œÊNeÛçÿ»Û¯¿ak÷’c95ýælîì¹|Ô¦ÝrÃ5’$>u:þέþ«ú¬}>nx|d6‘Äu³ssû_pþÑu…|îW·­ ú™úl-¯ª=ÇÎ׿¦7º%faXêäéÁ§^¾ëöP¿—J¦ÓÈШ=rTun.9;ŸžžÊôoØrñ?úÑþÙ¹÷¦Òµl&=’È;)ë¡I/Ôrýð‰_žž.oÛ¼q½Ÿzy<£(½/zùèxrFFÌäÕJ]ïõrS9YÖÀå]BºªÏdަúƒìL^Í×Ô ± ÔtNecm¯«(Q5^ÕËÏ´tY±ótÔMÏä•’¤u¹Yš"¦rrCA›£BA2…"É n:¯æªª×ƸmÔLN©6ŒÕ~N3@¼ «:¸²Ç2WÒæKŠ…¥z|ìL^-ŠZÄÉ ,9S$móU% ŠˆÍ]ÜL^ËT—…8虼²¢® ؇@Íä•ZÃXäëÚ+@Š˜ÎÉu]Ö‚+ãµQ3yµZ×MH¢ +:¸²{ÒëcgòjAÔ€léâ¦Mˆ@ôLA)K‹ [cB¶ª' 2KSk.ih(Þ‚Ä Zª¬Ø9:æiBbMˆRWÐe¾Ø‚lŒp3y5Û‚L·!$²²¢+º…dYK¡úV„„øZ rÅJ/ ‰ej)dÚ„8¹ÙÞÃ'ŠZª¬ØLHA)‰&„\ !:!´×F›U>Î@ ¾âgg j¡¦…Œ…%§rŠ$mˆˆ«Z§@‡œôL¾ !V€kCÜtAÍWAÖ8YË TÌô!,MNµ %ÉHhB j¶¢z¬´ï‚=Y”—@¬iþx®oBdÁ«ºø6$܆xX‚ ¦²rĈF"/3¿q.†$ ²ª/‚ty˜xA)ŠZÔµÙáK #‘W AnŠrÓó~f d¾¬Ïež¡Vµ !Ç"ˆ¨ x^Ö¼ª§ùãÙ éö°d‚¶Ä„Ñó—ôô³%{Í·ôyoÜÖ½d³ÑÙÂÙéìŠç27»q[÷’‘ÓtvΛF„Ðçnß³!ðË£“gþ?wÞpý–®ÎóšÇrܺ'`•D˜*"9$ÍŸ9XóõÛEYÿÉÐ$iñ4W+HÅ:ÒS*•K 4$ ¨6D’$C¡`Á°² (—-<ë´rݽ}v‡k~&+Ur@:€€†<›­L— Ué”E7Çžèj‚$͑Р¤èˆ¦)«Ã,^d½KÏêÇó•J¥QÍêº1Ÿ+#{”rwKˆ¨×7 !˜Ê«²¶EÙdYŸ¯èI\¦‡³jI2üVÊe!'rª¤ µ~¦®¢DIÓtxm73–Õr5Ý«¼ÔhV«4Œ˜“fi8•W*Øf²¢ž,éÀ«»˜siµ(n ÚÈñœ&Êhµ—Ö (iŠ¶ÇØ™‚–ªèE® P#Yµ\7BvÊÊÁɼZWІ Si Ù’¦pg/}>£DÝÁ‘15–Ój £ÇMDry BÄez8Ó„xCfKºªÃkV‚D4KÃÉ$'ɲ†ÐbˆÃ„«–@ŠZª¢³±.@·!¶• ;zéáŒVu;Gv¹©±œV]‰°óU}¾¬“±%BŸÏ¨%Éð-‚Ðñœ–­ê†\åkC(® A—…˜¼„æÊšaB2jQ4Üt9­&«¼´Ž@¼¨)¸2ÆÆ‹º YlB‚vÊÞ†˜ŠŒæJšvH·›& Ø‚0 hÄÚ„¬ñÑu Ì–42‘ײU]`ÈÕ>j4§Uê+@’eMGðêæ\F+ŠºK CjÜ„xh€xa)dCˆδ!ÄÄrHϤ» q-@¶F˜TUO–ubd2¯Š2Zã£e $Jšªƒ«»Ù刃âW‚ì쀄[¾%’ž*/†Ø ëLuÂŒd´¼¨Û–@H8UPeµ ™/ë ¶¶ ^ å³’mˆÅ&d2¯eªºÀý~j$Û„L²)Ä: æ§‹_rEŒM”ôù²ÎPÄÆˆC '󪤠õ¦&£Ùòb»érÑ4 '[tU×E¬™Ê=üë³@óѲæÿ@ð÷ßíq+> ½c³ü9‹v†–=5îË\ò0ÜþÓ3kbžw^µjÉS¨%SÑë>yËÍ@¿>>ežó«Ÿ¸aç¦ÙùØ„4Ëw{¹mWx–’êòS¿9To¨ÏŸ/½mÃêĹÑÁáñÀºæ!HÑ€$ÍHA¬ë ÷ôôM'’?üžU}}·Þpåå—[K’öä¾Ãˆ÷š«dŽ7s/'è÷~è]oS ðòpæùóù“cóúþw'«ˆ"ÍU€Í@©R]p¬þäûÞñä©ÌÁÄu;®ºÙjKjOüjlí6€ÁZÁ ºœ€&ÁdÁPtxyΕT !Dìì‚'“FUÚàpN¯«p64”(!Õ ®‰áœ‘Kƒp0eˆ ˆØ Æó†¬ÁË0'¢déˆØÝN%õŠ Ñí‚ç2†¤‚>a 0S2^SE#+"‚ .ÀÓ)£&ƒ€•p p4g44¸Þ«2š-#Í ®ëgRF±Ž¬ Ñï…g3†¨€.A“`"ß„$+FªŠ DììYÒﲆâ%¤ðšiA6á@ʶÖåƒØÝNÍë•ÆR`¦¸rEžJ5ø-+Cvvƒ³)£XG†X³2™7dn Ádu„'B‹ ^6T}ÂPĦ L5ÂB²)óRr}8mBØH¯‹Lšé• žNˆÒ‚tµ 4±ÆϦ Q1Á.‚ téˆØÙLˆ›'Bv8œmB½ ¹: GsFND E\Ö±±pì‚dg‰žNlB®Ù’‘©!HWDá©ù&Ä+À‘œÑÐàºÅ¡´QX¡ÀdÁ5¸5SU”jݪ۰žÏêu®^ 3!ä$d#ìÏ nòÃBÍU–Bz]p¨Ë!¸" OÏUø,„ײ”(#Í vt¡ŒáÃÕ— IDATQ@ë|ðÌ2È– @"x>k˜Õ3¥Eš$6áÀ2ÈF?,ÖQ²‚4ƒ¸¾ ÌëeânBz\щ· Û£ðÔ"ˆÞPá:ï þ&$ê xL,†haxŒÌ¿öã#颴ü˜Ìg¾ñÌÃÿß»Ž^áéθòsÞÀ…'Ð_=xàäxfù3¾ù³ Mí¹¢·=o–î嘹lÜçö^©júþÓñÿsç ;7ÅhŠ\ráækIÿÏÉÿôI9?¥Ê²XÛš·å%-U¨=uNF¬Hûþcÿxuòå†îò|qä%ƒ÷~é‡CÉÃϰÁŸø§§sçŸ\!©”Ö„`Áé8ý£c¹ÁF­$“VÇš ñÀÁ™Óç­›z @Ô5ðëÁÔ¯÷í¯MŸÈªÝkR¥ËõÌùZj„³û«™8Úpjº’žŒg¹5_úþ‹µÉ—Åšh[½ãW/ªù¡†$*´£Q÷ýÏ}nnlÒºaˆˆÍ°Ðh$OhÜâ×çkDª ßÑ£JP 8YÐë4N§ E‡«\†f€©2Ô xuXÉ‘…:$ xUX;œ¤d ,ÈÍ¡s9B5àF¯^¬Ã¹*ÔÜÝ¥KR5Xh°Î£ŸHQŠºˆ"Àxj¼"¨Ï”ˆ¬ ßÑ­š¥ðð d5Îd U‡kݺ¤ÂxêîŒjƒi²Ü€ ¶ô£ó”¬ˆ Y4’'Ô%î&ÄÑ qS%¨u@¯Šh‡çšÿ õýDŠ’ÛÂÅ ›q&K(‹!;¢Ú™dë é1_ƒ‚oïÖ'¨º q­¹*¬æÉ¼ ¯‰h‡ç¨†äÐPŽPu¸Á«—ZëcÚ‰$U5!>ýÄ<%ë ËŽŒ fÀm¯YãÖë*œ©@Ý€;"Ú™LryP?2OÉ[‘­Ù¼2KÕU`gÁ*—q*M(:ì[ +,…ø…ErÎVZyª*:!ä$Q&2‹!îÅFäl†,5 ½bgÐp"¾´!!m¬@æëBxMtâë„ÈMÈ®˜vržªÈ@ ÁFŸ~|9$ '*DFlýxšÄìÆ`f)äÚˆ6Ô‚l[ r™OÏŠD² ßÖ­™¥$Ø™6ô:@`²5niã2W‡ÂQí¥eõ^½²B-@bvÄ‘`´5^¾ÄÕéwë²§Ë-H–,Õ!M‚m!ýH’’5²"‹†sK!,LYÕWœ7€™t­´ËÒ$àù,žñLÕ|6ZÌg¿ÿ37ÿ꣇…j½"ÊKŸçv»3™L.—[ò`Ÿ¦,M‘äÒ‰÷ü陯<6è‹­€a„@B»ÿck‡Ægÿ÷¿þ_ÅÞÇG677B!@!t€ d2­ÿÈÐ!A‚Ö·‹ ½µ+H@‚h^:„B„ H„t€$ˆæ›_–È@È€lý¹@lôÊÅ™¬Q‚]éHŠohÐÊ›½òËóQ,ä!„€ƒ³_ýáËKŸvÀ#ûÞžÖ_hÎÎλ|¼ ‘u¦«\Ræ«Ê%C²6E‡vFÛિœ¶Ŭ2M ñ2Oh“[œYáÔˆµ±7êúäLÞ"-‡0Æpñ‚«®²ËdzV¢^›l0Uá(mõˆ£e¾²ào ²ÆY/µ Ûýµã&„Ö6¸ Æš)^e —ñŠg I#JßæÎÛ B‚lgôóEÁ„¤ëL¦9”rè‹!=6µ [<âX™¯(äÂECà§iAÊ •›Y›¼b‘²qIñÚRˆ‡ScVåTÎBBÔgoÈ:¯±4.÷Ö† ñÂu.)Ó‚\¨½”²éºXmµ£q,Ó„&/ᯞ)XV‚Xe°ÑÚ&wýpÚF@µ(,i˜.)!²…Æ%CŠ–ó§^>öí;KÅÂ+¾M»ÙÙÙ_|ñƒü`µZ½ôgW?óÌ3Á`pÍš5æÈ¹ÄW¾¡iÚëõ»H—øg«@£yH…Ðêsïú,ëoF‰úü!ˆYê5ΈM õŽÚ@ÁRÓ(ŽÒ7:+/¦œB'ó¤v®d! Ðg“"“n° ilvW^L94DصË"ÍÚ!„a¡¡`¢ÊSZc¯ —ù’J³¤±Õ]ÞŸt!HxXÅÉ(ƒ+A€«TÉ9‰£I´ÉY=–µ5 ÒJkýöÚK€0ÈË0FÊI€Õ6qºÊåd†%Ë=åýó..V p“yۤƛÁ&ĸÌUy¡(m¨d! ÐkçE&UgÒØìªL9TDصû‘ärwy_ âb”‚• @·U*Èäl¤n’nBH¸d«»¼ÞiÂɪA®~"ׄH*œnAμDJÕir™«r(mB´n«t$kMš¨ &d´Ì—š%mîò¾¤ËhBäåÎêñœ­®“Z_k¯jA(hŒ”-&d¦ò| ⛨¥.iMÈ:GíLÁRÕ(Ž\±PÚPÑB\ÒÓÑ 4^(­µ×FË|qĽ©—: 'ÚGàe Ã-H¼Êde†Y–B(­sÔΛͮÊy'‚ÐËÉVJ=[´¶!óu–!Ñe®ÊK‡‚;£õv@ Ô„¬±×ÆÊœ ¹ÂSþMÒe@ÂÍ*F>ÝIˆ I'j„&t²Ê&ÆÅ¥«†…úñœ BµÔœjBªCEKå›”é€ÎØDÚi­×*¾œY€Œµ ã-È67«xXùtÁF k1ädÎ&é”@é뵃-ChmHBd² †!-îʨ‘$bi,†u…£$—r—^óS«/ñ•ÖÌ "~‹—åiMâMðÏÁ¨Š§E+Gê½–êxÍZQ+¥®³•f}BS·RÊPÙA(Ê×ò 3ßàyR[m­œ.ºdƒrÒr—P;Vð8 4^³±„Ñ-Ôâ’PPX ¥®³•弦îfƒ%'E 'Ö4*!Y8R_e©œ«ØE¶QÊjKåpÎ !ô³u†ÐGªv†0º„jªÁfdN µ~kùhÞ£!ÂÍ4‚œt²è&!s’ a[²ÊX)u½­ôâJb'¤äj´ G/ Yk+¿dB躇i ´ âJþÅአ©¥; Ç  ‘.¦jABœ¤pJ´²¤ÞÓY·iØAèd]àImµ¥2Pr6 ÊAËÝBõhÞC@lAÂèj ‰Ï· ‡A\œ(j¤ é³T†+öšFÛ(¥ßZ~©a m¸b§ £‹_ Q›ñD ¢u@&Û{âe6J9[vPŠ-† ¶ = ±K€ s¢¤ñ‹B¸Å´Ì ¤¶ÆZ9Þ‚„9ñDa)¤×R¬YKË vJ9[vRŠòb©Ye)–œurÐJP=bBX‰h¬Ú„ÌJ|^á,dçM«ác§/ YckB|l#´óM1¾–m°é/Z¿µr¼àVé¢NoV|Á‚Kœ7 çr8‡Eqù¢ }<8™~ä…‹·ëÍôV]\©ª³E•l²¦Ï‹>,¡õrÅaÉð3"õ¤l¬æó)ÅVÓÀVëüéZ`#e#NÖÝ€[‘ 2§Zë-™‰ºG1Hêk„ÜxhI ÕDÃèå‹•/k`‹u~°D ¤aËc’dªÀ´b¬r‰†£nÐ@›¬éÁZà¤Nª>Ýp™šÎZaѧ™¾8,ú>F¤_ âgĉD1ÈìÄ­µBÖ„¸iÉòJ([mA€©ÅÐe„0Ul²¤‡¥&¤/ž_YÅçÓŠµ¦³—ÉNÖ]²AQÐX'dÏ.@”Dà èáŠE­ ÙlM©V‚€”b3!³²CÒATÃՂĸ’xq-2„>ׄ2Š¥ºb%åS›¨{a¶¢"2«\ b%•x RÒøÒbO¨1® ©€–C6[Sµ qÓõ©º )‹:mB6ZÒ#’OCCh«øÂyÑi%ÈTÇ—AÖY²Smˆ%{¶fBêVR^r¶0CL ¶ ýBnî• ’Nç[QÉ«"’!ôU|Þ„xi‘mAúøBö• "3&DÈN5\²A‘ÐXß‚¸èºm„+i|" yBíâÊ#-ÐüÄ.éŒùeBìTó2$sdxþÞÿys]zwæ¹\îìÙ³×_}£ÑxÅÛŸ8qÂétF£QMÓ.åRÚ£èÚk¯…V«õ»ßý®ªª€r¹,Šb8Æov„Ãáp¸×X2™t86›Í0ŒÑÑѯýëÃ0ïÿû+• A…B¡T*­]»¯‡Ãá^c###~¿ßn·kšöÀ,ü]€ ˆžž¼F8‡{]ÚºuëØØBÈb±˜§PK¶Ð4Í| ‡Ãáp¸×Òôôô‘#G¶oß~Á‘£ëºù¾Ö8‡Ã½–fffJ¥Rç)^‡Ãý~Â#‡Ãápxäàp8‡ÃáðÈÁáp898‡{ËG]ú¦ªªž?~ùéÝÝÝù|¾V«­[·Ža¼¦8‡{­#'›ÍîÞ½ÛáplÙ²¥óô¿ú«¿úú׿~àÀ®®.¼¦8‡{­#ÇlÓ¦M?ÿùÏÍÏŸ??::ÚÛÛÛþ,Bè¿þë¿ÌÀ5×\ƒ—‡Ãápf¯éXÎO~ò“;î¸ãèÑ£íS}ôÑ?ÿó?ß¿ÿc=ö…/|áÅ_ÄKŒÃáp¸ßr/gnnîþûï\qÅË?û7ó7‹å¾ûî;vìØM7ÝôÈ#ìÚµ ¯2‡Ãá~›‘óŠI’tÏ=÷¤R)¼¸8‡{M#'‰Üu×]æÇûöí[¾I’½½½½½½×^{m__^b‡Ã™½þ—òìí·ß~Ýu×íß¿ÿܹsx‰q8÷[îå\¼Gyä¶Ûn{Ï{ÞS­V ‚ؽ{7^b‡Ã½ê‘ãóù8`µZÛ§|êSŸzï{ßÛÝݽyóæZ­ c±ØsÏ=g~Öf³u>‡Ãápxä\j4MoÞ¼¹ó”`0 ‡£}â’mp8‡3ﱆÃáp8û¬ªªø:Â#çT&“ùÛ¿ýÛ+®¸/·¤ƒ~èC"I/œ×-—ËõÑ~tõêÕx)p¸v,˾óïÄë€Ã#çõÏf³mÞ¼ù¿ów˜Ëåc±X?¾¾p¿‡ìv;Eá{Ü«ÿ]Λ¡J¥ò /œ>}/‡{ÜO|âí'~ íÝ»wïÞ½ÿñÿñ\¯‡zèùçŸ_~úôôôÿú_ÿëwzÑßüæ79²äÄD"ñå/Ðh4jµ¾AãÞ@=øàƒ{×ùÙƒîÝ»÷ÑG}øá‡÷îÝ{ìØ1Àç>÷¹½{÷âç¼q»¤]ãƒV«UÀäääÇ?þñ@ ð•¯|å-ø ?øÁ¾öµ¯ñ<ÿ­o}ëÚk¯íüT­V;uêÔïèr}ôÑï~÷»ñxü¾ûîë<=ŸÏÿÉŸü‰Óéü³?û3|SƽáÝ¿ÿ?üÃ?lß¾}ùg3™Ìþýû¯¸âŠ;î¸cË–-}}}€#GŽ †Wïͼ—c–N§ßýîwÓù£wçwž:uêÎ;œÜpà xÝÞü#Ççó}÷»ßìÚµë‹_üâ[m¥*• Àápø|¾ù—Ù¸q㊛U«Õ¯}íkº®:t¨··÷¶Ûn»ë®»æææ4M»é¦›öíÛ·oß¾o¼ñ _øà¾ûî³Ûíûöíûö·¿ýË_þ²óႳgÏööö~ö³Ÿ8ÎÞÞ^«ÕÚyA¡d2Fñ÷¦©\.ïܹÓf³Ýzë­ù—Ùþ]mjjJ’¤ûï¿¿§§ð³Ÿý ¯Õ›äa³Ù4M¿_Fⓟü¤Åbùþ÷¿ÿ…/|á7¿ùÍE¶üô§?}÷Ýwëº~ÿý÷ßtÓM’$†AQ”ù`4@UUQõz §Óùƒü`ëÖ­æ\"‘èííýÒ—¾455õoÿöoúɼúê«ÏŸ?oÁ¸7zwÜqGo+Ã0*• I’ï|ç;¿ño,ÙÒjµaþ†×í ~šã«ØËùØÇ>–J¥6oÞüÃþ0\}õÕñx<‹]Ê+"„̃.’$]è‘?þã?Veß¾},Ë^ä«íرãñÇŸšššm4ét_A¸7h?üð;ÞñóãR©„üøÇ?ÎårKNܳgÏÙ³giš~ųëºþ|`ttðÌ3Ï<ñÄŸ˜˜0÷{öíÛ'Šâ»Þõ®h4z÷Ýw›©-ÿj›6m2ìn4‰Dâ_ÿõ_»ººðu„{3ý†755u¡Ï†qöìÙM›6á…Â#çM[4Íçó‰D‚¦ép8ìp8;wîø ^½7çȹå–[êõ:ÀápìÝ»wÛ¶moÁ•zç;ß©iÚþç¦R©üÇ\·nàûßÿþ§>õ)]×c±ØßýÝßzzzÌ]—_~y8¼ãï$Éÿ÷¿ûî»›7o~×»Þuüøñ}èC>úè#<ò¹Ï}îÌ™3×××g>ç­Ý¶mÛÌ/Ø™Íf»þúëñí÷FlëÖ­{÷î2OyÛÛÞöðÃéK_ÊçóÿüÏÿüÀlذAQ”½{÷š7þûî»$É'Ÿ|Ï›7hÐívg³ÙJ¥2777>>¾{÷n¼(í&&&n»í¶¯ýë{öì1OùùωD®¼òÊ×åëŸñ‰O´ŸÜŒÃá‘ó:ÄóüÎ;ñ:àp¿E‡J¥R¨K—$ _xäàp¸·DÏ=÷Üè訮ëÀïpÂ#‡Ã½ù“$iÛ¶mæ+Õâpxäàp¸ßmAà#=¸nx p8‡G‡ÃáðÈÁáp8‡ÃᑃÃáp¸·z¯üŒµ|pù»ašÝpà ×^{-^D‡Ã½>#Ç|E}EQ¾üå/‡B!óMÆŽ=úøãs‡G‡Ãá^·‘ó¾÷½ IÒ—¿üe·ÛýÉO~ÀqÜã?xä‘G^xá…»ï¾{ýúõ€»îºË|ÿо¾¾¿þë¿>räÈ÷¾÷½w½ë]’$ýæ7¿ù‹¿ø‹Ë.» /:‡Ã½5{MÇr}ôÑB¡0;;ûÙÏ~vjjê3ŸùÌ~ô£÷¿ÿý×]wÝ·¿ýí¯~õ«333?ùÉOî¹çžd2™N§ïºë®ÑÑQ¼è8‡GΫîúë¯ÿЇ>Nž_ç)º®oß¾]UÕÎÃáp ÀkÃápx伞‘$ùôÓO›3 ó«_ý /1‡ÃáÌ^Ͽ˱Z­–eçææ6nÜø¹Ï}¯/‡Ãá^õ^„0‹ƒÁöt‰Åbv»àõzc±Ã0‡Ú¹s§ùžf7ÝtÓ÷¿ÿý§žz*‹9€Çã‰Åb,ËâEÇáp¸·fÐívg³ÙJ¥2777>>¾{÷n¼(8‡{]AQMÓxà{î¹¿à ‡Ãá~OᑃÃáp8¹k×.¼8œ×?MÓÌ7ž~úéB¡€×‡Ãá‘ó»ú½^×u¼fÙl–$I¼8î·?}‡Ãápxäàp8‡Ãá~‹.õXΉ'BæÇN§sõêÕ©Tjvv¶»»{Ƀ¾é›ššÊçóëÖ­3ßè5Ç3™L¿ùizz:—Ë­]»Öf³½öËM$étzõêÕN§sùg‹ÅâÄÄD0ŒF£ø‡‡Ãý^÷r^xá…[o½õÞ{ï½÷Þ{¿ô¥/}æ3Ÿ9wîÜO~ò“={ö<ùä“oµ%»÷Þ{÷ìÙ344ôº|µçž{îÞ{|Å-ÿéŸþiÏž=ƒƒƒ¯ËåîÛ·ö}Œâ IDATïÞ{ï_ñ³‡Ú³gσ>ˆBp8Üï{/çSŸúA=ö˜ygtë­·~ûÛßîïï7?{øðáÙÙÙo¼Ñår!„üqóôP(tÝuן:ujëÖ­Åbqffæío»Çã<þøãæn“ßIÏ3Ïkž¾víÚÍ›7Ÿ8qbrrr÷îÝ~¿ÿ©§žª×ëï{ßûªÕjû͹ûûû·þÿìÝw\Gÿ8ð¹~pp]éMADTÄŠb¯$&¶HbBŒ± LP£hÐGc7ŠkLTTPT@lH)Òvp½þþ˜ïs¿{@‘8?ï?|»ÃÞÍÌî~vgggú÷÷ððÐÕÕ533KHH¨¯¯Ÿ8qâ•+W´µµ½½½oݺ…S:99õë×Oý«¯^½Šûm3™ÌO?ýT}Õ“'O GŒ‘‘‘ÑÐÐD¥Ry<žj‚p[[Ûôïß_[[ÛÜÜüÎ;µµµ&L¸víF äp8<@åæææää899Áqè$--­°°0±XÜÜÜ\__ß§OŸÖ‰ÓÒÒ˜Lfqq±½½½R©:t(Ç»sçƒÁ¨¯¯mnnöôôräÈŸþ9..ŽÁ`¬Y³æÎ;`ÿþý #!!!))ÉÙÙùÉ“'/^¼˜3gNZZÚÊ•+™Lfaaá¾}û¬¬¬Õo†"""D"QEEÅöíÛ)Ї‡ÇîÝ»wîÜÉd2ïÝ»wãÆ GGÇóçÏoܸqذaÑÑÑû÷ï×ÒÒÊÊÊÚ¹s§¥¥¥ÁÙ³g_½z¥££ãééimm­^&D"±oß¾pðÞ‰B¡Èår…B‘žž~÷îÝv5¬­_¿~åÊ•EEEëÖ­;wîÜСC§M›†Wñx¼iÓ¦ÙÙÙíÞ½»¡¡¡¡¡aíÚµQQQß|óMNNÎï¿ÿŽ“ñùüI“&999ÅÆÆr8œ-[¶P(”¨¨¨+Vœ8q¢Ç•#—Ë]µj•®®nxxxcccLLŒ­­mTTÔ´iÓîÞ½{çÎO?ýÔÑÑñÌ™3QQQMMMË—/çñx;vì°²²ŠŠŠÚ²eËСC[³yóæ5kÖLŸ>ý—_~±··ŠŠŠˆˆðòòR5::šËånݺuýúõÕÕÕû÷ïãÏ a³Ùááá **ÊÒÒ2**jΜ9>üûï¿[¤¯¯¯çr¹»ví²±±ùüóÏB#GŽüä“Oà˜|І5„PXXÇ£P(Û¶m³¶¶V(x¹¿¿¿³³³*ÙÊ•+ׯ_¿nݺêêjõ?;vl‹ëb‘H´nݺÚÚÚZpŸ}ön!|›€€‰´nݺS§N………­Y³¦±±Qµ¶oß¾¸@®\¹Ò"ºûí·¥¥¥qqqx‰‡‡‡‡‡B¨E`Þ´i“X,~Û·Ïš5ËÌ̬ýÙY¾|9¼à è!gíÚµ"‘(&&fÕªU$i×®]wïÞU=ËQ·zõêsçÎmß¾ýÏÃI$’››BhôèÑ–––Y¸%%%<!”““ÓÎñ ¾øâ О”}ûö¥R©ÞÞÞ[A@ÏÕ®†µ‹/ÆÇÇ#„X,Ö˜1cÚHyáÂ6kÖ,___õåÇŽ»wïžú …2kÖ¬!C†\ºt)--­ÇܦM›ÊËËÛHpðàÁèèèE‹>}úÁƒ_|ñ…úÚ{÷îÍž=ûüùóïü¢[·nÍž=»uÏÀéÓ§úé§—.]ºÿ~ë¿Ú¶m[{zÁ½Óï¿ÿžÇ àÃ…œS§N)Š€€€€€€°°°¡C‡®\¹ò)Ïž=ÛÔÔpàÀˆˆˆÛ·oã' #G޼zõjjjjtt´……ÅéÓ§Åbq@@ÀçŸ^UU5~üøWp3fÌX»vmCCC||¼±±qllìóçÏvïÞ=}úô3fdffVUUyyyùûûkii%$$°X¬dgg¬ZµŠN§<ø755ݳgÏÓ§OqëééyzzªÖîß¿ßÐÐ0((hÚ´iÙÙÙÓ§Oo½…É“'ÿøã•••ñññººº‡ÎËË øé§Ÿ&L˜€Õ´Wñ¹sçÊÊÊZt–€÷F000àp8MMMåååo믜——§zTGG§W¯^õõõÇÄÄ„Åb½~ýZ ØØØP(”ÜÜ\„N744,++;{ölttô¶mÛ‚‚‚šššz÷îg ÁÉBÚÚÚݶaH$2™L©TÊçóU +++qFªªª$‰ƒƒ@‹ÅÅÅÅ8‘‘QUU—˵´´ÔÖÖ.,,”ÉdŽŽŽ‰¤¨¨'Ó××766Æ}ù,,,jkkE"‘~¦"‰JJJÚÞ BˆJ¥¶èQ¶fÍšC‡?ÞÖÖVµAõïe±X&&&555 ¸…B¡­­-‘HÌÏϧÑh¸×"—Ë­ªª244lñÈêäÉ“$iÖ¬YpðÞI[[["‘Èd²¸¸¸ðððövppph±ÄÀÀÀÀÀVêvMLLðg333õÚêÉzUFÔÏõ4­EŽLMMMMMñg[[[üJ¥¶Hfbb‚‹ˆÁ`¨/§ÓéíÙ`¬¬¬TŸ[¯±±±±±1¾€xc¥èéé½s@øg×ñýd2Y[[&:û`¨Tª¶¶6t?|Œ!gþüùååå ,€²þ0"##ËËË{è€9„=LDýn"‘¨´´ÊSu\9L(>yòäéÓ§Pÿ§!Ãn€Ó Wô|>_"‘¸ººBi¨@ÿC„œN 9d2ÙËË Š ät.@§Ó?ÀI$’vŽû r46äÐh´Îþ–çÏŸ3™L}}}(p„œ\.WŸ!­cåää<}úÔÛÛBB@ …¡ÙêêêÔÇ  ¯‚€BðÚû,G©Tª¦ c0xª•^¿~-—Ëñ_š­ººZ üÿB$“ß9Ë.@ …baa»BN[RSS'L˜Ð·o_gbbÛ»wïiËËËkkk5¾ÔV®\ù×_9;;Óét…BQYYyéÒ%''§6þD.—0ÀÁÁ!%%v;„œ·JNNž6mÚ¤I“8™™¹aÆ«W¯âýû÷Wïã+T'V {{ûüüü²²277·ââ⦦&*•ÚÓËîÈ‘#|>ßÂÂbÑ¢E÷îÝãp8/_¾ÄkÍÍÍBiii<ÏÛÛö6„œw[°`‘HvìƒÁ˜4iRNNξ}ûFŒqèСqãÆ=z4==}ÇŽ¥¥¥QQQ/^¼€½ !çÙrtôY³fiR­èèèØØX777„‰D¢Ñh0åü㻜üQ¡Plذ!”ŸŸ¿lÙ²S§NAÙa‹-jnnþý÷ßñ]\\–.]jii™››ÛÜܬJe€»œw›:u*‰D )**ª¯¯—J¥+W®´¶¶>{ölzzú“'OÖ®]«zGWWwûöí‘‘‘ÁÁÁååå~~~S¦Lùí·ß4¾(]\\V¬XñÇçääŒ5ÊÄÄäûï¿/))Y¹råœ9s>†B€rB'NTõ1c³ÙNNNýû÷W½êêꪧ§wøða±XL¥RçÎëììŒW™™™ÙØØ,^¼800ÐÅÅE3JmãÆøV!D§Ó¯^½Ê`0Ølö²eË|}}q;;;33³#GŽðùüÁƒ›ššjF¿ èÜC$}||Ô—ôêÕ«W¯^êK<==ñ--­‰­­­­­­5¦ÔT!D"‘T™e³Ù-2Žêß¿?þÐz|T`Œ5r@È äè¾`"êw“H$555´qõIBÎGM,gddöC¡P† Eÿtw9€ž‰J¥’H¤îðK„B!T„€FŸVÈäî0Ó|BB‚j.! É„B¡B¡èªo¿ÿ~^^„9= ‘HÔÖÖ†ràx<^kår¹L&ëªßöúõë. xBÎ{jll¼ví”-Ìœ9 @Èé`2™ŒN§9Š]]]&‰ („œF$ét:”*ZZZÊt|È©¬¬lÝ Ë`0 ÚóÍÍÍ,KWWŠ ÒÐÐÐâižiuuuL&S©T677jiiUUUI¥R xrÖ®][\\¬P(^¾|I§ÓBãÇ kÏœ>}ú»ï¾Û¶mÛ’%K ¸*‘‘‘ÿùϬ­­U×£‰‰‰ªµýõׂ Ö¬YÃb±Îž=éãã3yò䜜œªª*¨™!çèÑ£øŠ£W¯^¶¶¶ª}¢¬¬ìÕ«Wøs¿~ýôõõSSSÅbñðáÃ…BaZZš±±qAAB¨°°°ººÚÄÄJ nûöícÆŒQýŸ=ôõõUKúõëçääôüùs<òúƒ>ùä(:Í 9oTZZùâÅ ‡´´´àà௿þzÑ¢EåååµµµåååAAA¾¾¾+W®Äc0§¤¤BÈ´A*•ž8q"22rúôédòÿ>{òäÉgÏž544 „Nœ8!§‡zÏ1ÖÏœ93}úô#GŽ 4(**ª¸¸xêÔ©d2ùèÑ£üñ‡‘‘ÑØ±c‡Œš3gÎСC¡¸-ܺuëèñùü°°0kkëùóçgff¶H¹nݺ^½z!„öíÛåöqÝå`ÉÉÉD"1??ÿwãÆd2yåÊ•úúúëÖ­[¸p!”/ mo|0ãää4oÞ¼¤¤$(9-MŸ>}úôéfffPš€*88Xõ,§±± D³ý«É |||V¬X¡§§WTT$‘H"""~ùå—˜˜˜¨¨¨¨'>qâDVV”8àrrrpÇ¥7’H$áááPJQÈ9räÌ™3ããã¿øâ‹íÛ·›˜˜èêêž?^&“Í›7oòäÉçÖ­[¡±cÇNž<ùÔ©Sl6J nçÎ_ü—¶¶vTTTQQÑáÇ]]]['ŽŒŒd±XË–-ƒgÃ=T{Öh4Ú¥K—Tó%÷îÝ{ýúõ¸“ôüùóûõë§§§wðàA±XŒêÕ«×¥K—ð»¢666›6m*))qtt„k•¯¾új„ êK¨Tjpp°£££¾¾¾©©©¿¿ïÞ½ …ŸŸŽ@Ÿ|òÉéÓ§e2ÌÕ«á!‡D"1B}‰………………ú’AƒáZZZꉭ¬¬¬¬¬ ¬êììììììZ,T?{á666ªC† ¢ë¹`"jrhIú]1™Hd0, Š ät.CCC˜^ ät.…BÑÔÔåÀ{hll …]xðB@È|jjjîÞ½[[[Û…¿æÔÐ|2™¬¨¨ˆÉd2™L9B I$GGGGGG( Ðt’!€f†5@£R©ª9=»ž¸@Èhîi…L¦R©]þ3®_¿îíí Õ! ù„B¡\.ïªo¿{÷nQQ„9= íÊ€7jnnnc­\.—Éd]õÛªªªàmP9=O]]Ý¥K— há³Ï>ƒBr:˜B¡`±X£G†¢@…ÉdR(‘HE ät<‰…à…œììlUÃ(“É´´´¬«««ªª277×××oçFJKK›››íì슋‹ÕyñÛþ[@PTTÄb±ètzUU•™™žèÐCUVVÖ×׫/Á³Mc\.·¬¬ÌÈÈH¡PÔÕÕõîÝ[WW·°°P$¹¸¸À`6šrÒÒÒ&Nœèéé‰÷]]Ý_~ùåÅ‹‡þæ›oÚùe¡¡¡7nÜHMM0aB}}=žP–ËåêééíÞ½ÛÖÖ¶¿ÍÈÈð÷÷Ÿ={ö§Ÿ~zðàÁ%K–BýÐsEGGÿç?ÿqqqQ]¶^½zUµ6!!aÁ‚kÖ¬111¹xñ↠œ““SUUE£Ñ 56ä|öÙgD"ï ÉÉÉ¿üòËÊ•+CBB\]]Ÿ>>,ëÆ!???.—{ÿþ}œÒÎÎFy ›‹ˆˆ3fŒz{Æ;w ÕOfff}úôyøð!ÇCݸqc„ Ptr¦NúÛo¿8qB__ßÁÁ!88xÈ!×®]Û¸qctt´R©|úô)BèâÅ‹B¡°¼¼<..nÿþýþþþEEEd29""ÂÍÍíÁƒåååÑÑÑfffoü–ÌÌÌððpgggwóæÍ/¿üréÒ¥/^ Æ !ô×_­[·.***55õܹs·nÝòôô ‘Ëå/_¾Œ=qâĘ1còòòôõõ7mÚäìì Õ @ ‘H8°wïÞY³fñù|¼ðÔ©S±±±'OžÌËËÃ!'!!BŽ&‡œü‘J¥¦§§_¿~}éÒ¥ãÆÛ³g^;þ|„Й3g®]»6wî\·eË//¯={öœ={ö«¯¾úóÏ?ÝÜÜŽ;–™™©¾oíÝ»!ôêÕ+;;»O>ù¤¾¾ÞÉÉiÒ¤Ižžž'Nüé§Ÿ‚ƒƒ¿ûî;]]ÝÐÐÐï¿ÿþ¿³¶¶vûöívvvúúúW®\iÑR èn._¾œ?oÞ¼ÙÃÃã‹/¾X¿~}‹”+W®}úرc!ƒqãÆµ¾¿‰ŽŽþæ›oÔŸøÏŸ?ßÅÅ%99¹´´ôôéÓ>l½e6›P\\œœœüâÅ‹ŒŒ Ÿùóç·xÞSQQ±mÛ¶·ý¼ï¿ÿÇ9‡³`Á‚3g΄……}öÙgÏŸ?ÏÈÈ€: ÇÉÌÌŒ‹‹{ÛZ‰D²fÍ(% 9‡R(S¦L™2e îªøõ×_«Ö¦¦¦ÖÔÔ\¿~=88xúôéL&sÏž=¹¹¹S¦LY½zµH$rss{ñâEiiiÛß2yòäI“&í߿ʔ)Ó§OïÓ§ÏâÅ‹ãââ7nÜèçç×"ýªU«<<<Ö®];hÐ |W¤££3dÈØØØåË—§¦¦N:·×º­-[¶Lù/ƒ±o߾ƒ6¬uâÝ»wëëëÏŸ?Ê”)Pt=ÁÀÀ€Ãá455•——¼­êÙ³gJ¥f±XÖÖÖ555ååå–––ÍÍÍê·Ãb±XõÇÈÈÈ¢¬¬ŒÃáØÚÚâ¹Ð322 …»»;B¨¹¹¹  ÀÐÐÐÒÒ²¢¢¢ºº!doo_VV& q¸¢Óé½{÷ÎËË300ÐÒÒ*//·°°022*,,ljjrqqÉËËS*•nnn 77µ‰‰‰ªï=2‘(îÝ»çëë û *L&“H$¾­L[[›J¥òx¼¶‡õ|ýúumm­úÕÙCWW—Íf›šš*Ššš===„ÐË—/år9>{´áܹs|>Þ¼yPY]K[[["‘Èd²¸¸¸ðððö†œôBr:„œîr`"j ëùnt9ŽD"éééáFdr:‘ÁèÑ£»p>]€óQP(mOµ x›ÚÚZ@ÐUß—‰r‹ŠŠŠ¤¤¤®äÁBÈh>™LVYYiddddd!@Èt"‰DbkkÛö¤‹àãïå€@³@àƒÑh42¹[œ[TS‹9ÍD"‘(J—ÿŒK—.Á ‘r@Ð…/Çܼy³¬¬ jBNOB$utt x£¦¦¦6Ö*Š. 9õõõªùV„œƒÃáœ;wŽH„~üær:žR©466†ùrP‡çË‹ÅPà‹wÝì.'55U¡PàÏ•••%%%ÖÖÖ&&&íÜHnnnCCƒ»»{VV–T*U-g³Ùööömÿmsssff¦‘‘ƒÁ(..þGßûÆŒ0™LØè*ÅÅÅUUUêK† ¢ú\WW—ŸŸß«W/…BQYYéè訯¯ÿâÅ @0hÐ hëÖäsçÎ9sæŒ5 ý÷¡\tttqqñÉ“',XÐþSÿÆoܸ‘šš:{ö솆†±cÇâ‹H$îܹÓÕÕµ¿ÍÊÊ ˜={ö„ Ž;öå—_úùùýÓܪ2ÒÜÜ\__ëáá;]"66ö?ÿùÏÀ [‡œÄÄÄ ¬Y³ÆÊÊêÚµkkÖ¬ñôôüꫯrrrªªªh4 Æ†œ"‘xúôi„Prrr``à¾þúë   >}ú$''¿~ý§$3gÎlnn¾ví^booïéé©Ú”¯¯/“ÉDiiiá &%%44´¢¢býúõ¿ÿþ»§§ç”)STkgÏžiooO$W­Z%¢££{÷î9cÆŒ‡&$$ „âããUw0xßÚ¶mÛ¶mÛN:åää ‘H|||6oÞicc³gÏ.—»eËåË—·g®'ÜVF"‘ ´yóæ!C†H$’id2Ù?þxêÔ©õë×Ã@×:sæÌ¶ÿ …;vìèÕ«×gŸ}& [¤\¼x±±±1BhÆ Pnš|—ƒúöÛoù|>…B‰ŠŠêÓ§Oëw¬Ž=²jÕ*½sçÎiÓ°Çë½ IDAT¦AõÐå˜L¦êYŽŠµµõĉ/]ºåó1†œÐÐP¡P¸wïÞ+VH¤;v$%%©÷1ÛµkWiiéìÙ³©T*^¢££ãååååå5{ölUÇ0U«•J]´hQcc#‰D:{öì‰' #"" 4|øð¤¤¤÷Ûw-ZT]]M  ›Íž>}º©©i|||ffæo¿ýöÆ(Âb±FŽYVVöøñ㜜œÜÜÜNŸ>ß>«”••µq+½|ùr|kU]]=cÆŒƒ®^½záÂ…ÙÙÙ¹¹¹ê)¯^½Š‚x@7÷üù󘘘·­‹ÅK–,RÒØsæÌüpÞ××wõêÕ>>>ß~û­jí‹/êëë=:qâD==½ß~û-;;Û××wåÊ• cذayyyª‡o3sæÌ3fìÚµË××788ØÆÆfΜ9'Ožlhhøî»ïZwPùþûï½¼¼–-[6nÜ8---À&MštðàÁààà›7oΙ3§uë™D"ñý¯ððpØèZëÖ­S’:::GÍËË‹‹‹›0aBëÄd³Ù3gÎ ¢ë‰§©©©¼¼¼  àmc}ªžß0 33³ÆÆÆÚÚZ###¡PÈãñT)íìì¤RiII þ¯žžž‘‘Qmmmcc£™™ƒÁ@)•J„P(,//g2™ÆÆÆuuu ¡^½zÕÖÖŠÅb›W¯^Q©Tccã²²2]]]†¿WOO¯¢¢B XYY•••á ŠÅbUm}}}U×j¬¸¸X&“©þ‹3ÒV@&Á½{÷`ÀÔáoÞÖ¦­­M¥Ry<žúáÖ‡ÃÁž[Ÿ=´µµ™LfUU•¾¾¾R©T?{ËåòwÎr}îÜ9>ŸÁu9mmm‰D"“ÉâââÂÃÃÛÛ} u³X,‹…ƒJ‹U ÅÎÎN}‰¡¡¡úBkkkÕg---Ub6›­ –––ª½°Åü½!ssó¤Ñh-¾Z]Ÿ>}` ›022Roo}öP}P?{ÀQÜ£Á >IúÝ èr:…Ba³Ùxr:‘žžÞðáÃÛ~ Bο¥P(Ô;ãÚ¯ªªª ¸L„øX”––&''ãwº @€Š€ÐpR©´¾¾ÞÂÂÂÂÂJ@ÈtnÈéÓ§¼@Zƒ¾¿ 䀼x–ÓŽ2"“ñHÕ ¹\Þž9XBNÇ#$é#Él}}ýýû÷GŒõ€Óe$IëÉØ5Œ@ ¸páB‹B·¦T*U3i*…B!•J¡®º€BÐY!çÊ•+.\ÀŸ9N||üãÇߘòâÅ‹—/_FÕÕÕÅÇǧ¤¤|vìØS>yòäÙ³g¡W¯^-^¼øðáÃOQæææ.^¼øøñãï÷ç999iiiíq}éÒ¥aaa°z÷ï±–ššz÷î]??¿ÒÒÒœœœyóæ™˜˜°Ùl‰T__âÄ „PfffBB˜1cÒÓÓñ.\¸ÐÀÀ §ÜÉ“'ËËË¿ùæ›_ý•Á`,Y²Dµ*%%%11ñÓO?uww?sæLIIÉ’%K˜L¦@ Ø»wo¯^½æÎ›™™yíÚ5œ>00ÐÅÅEOOÏÐÐH$ŠÅâÝ»wãUNNN'NDݽ{755/üòË/ŒŒÚó#i4Ú;Ço—H$ …Ž@·9)))Û¶mKNN1bD|||~~~TTTtt4…B f0! …B£Ñ6oÞìäääááñ믿mß¾]GG§GÜñãÇSRR***úôéóã?J¥Òþýû#„ÒÒÒLMMSRRýá‡BÙÙÙÿôG^¿~ýËëëëÿQè€.9íaggggggooÿõ×_ÿõ×_•••/^d±XIÇÆÆN›6mÆŒ,ëÀ!###ÿþýûoݺõäÉ“ûöíkc gΜùñÇgÍšåççV__ßþo¿xñâëׯaGô˜síÚ5Ÿ‰'FGGýõ×£FZ·n]|||{þ6>>~çΡM›6:thΜ9ÏŸ?טQUÆóæÍ¶Óôë×F£=~üØÈÈÈÝÝ!”œœ¼zõê™3g†‡‡K$’øøøÆÆÆÖ˜––¶lٲɓ'S(”ÊÊJ›!C†¨7Á½ÇóððÀ™Þ¦§?ThZȱµµE=xðÀßß¿®®ÎÍÍÍÔÔ´í?éß¿ÿ–/_nhhxéÒ¥ÈÈÈ:^__ÿçŸjÌÀ‘GŽñññ133»xñbVVÖےݾ}[ý¼?pàÀùóçoÞ¼9..®¹¹yûöí#FŒPõHMM?>>ÞÔÔÔßߎ À¿§­­-‘Hd2Y\\\xxx{Ÿå´>µ‘H$Õ,2 ¥u2"‘H£ÑþïfŠLÖ˜^jo+õüª‡Ã5j”®®îÛ §E"„Z¬jQ€m÷{€n &/xOÖÖÖ<¯=q4,,L__ÿÆPh9à}ìß¿¿)ûí7(.@0’494 4¬µW}}ý«W¯4;‰*!§‹q8œG•””@Q„œN$—Ë¥R©¹¹¹¹¹ùÇ_---¨t„œ®¡P(´µµ¡(à߀î 䀼x–è`ZZZ;àì{ãr¹Pp—Ðd¡ËG‹—H$¿þú+ÔÜåô´˜ Ã6ðx·áóù2™¬«~Û¹sçàÕf9=/Þhiiý£‰ŸøH555A99©®®î?þИiL蘙<~üx(!§ãúúúB9 Âd2‰D¢ú<¹´<¨ÐÍîr¤Ré/¿übddôù矷ëÙÙÙþù§··÷СC¡¬êž={¦¾dõêÕªÏ999×®]2dˆL&{üøñ¤I“lmm=Z[[»råJÕDï@3ïr6oÞ¼uëÖˆˆˆÃ‡·ë[·nMJJ‚‚´ð×_mݺµ´´”ö_êk³²²¶nÝz÷î]‰D£ÑpßÑ_ýuëÖ­]Ø| »œcÇŽíÙ³§¢¢âÂ… óçÏøðá©S§&L˜P__Ÿœœ¼téR<êehh(™L^µjÕ–-[\\\ÔŸº;v,-- ŽŒŒÔÕÕ…ÒLœ8q̘1ªÿÖÖÖnÞ¼ÙÉÉÉÌÌ /©©©ÉÍÍ9rdLLLUUBè»ï¾‹‰‰¢ÓØ»œ¥K—*•ÊàààñãÇçääÄÄÄœ8qbÓ¦MÕÕÕùùù+V¬(..^µjÕ±cǼ¼¼¾úê«'NܹsGµ…ãÇGEE™ššúûû'$$,X°@.—CéÔñùüÅ‹?xð€F£íÝ»/|òäɉ'^¿~=xð`„zˆrnݺ¥zç«®®.==B@“=}úôéÓ§  ƒêmB! ±Äb1‹Åêò‰!ä@Èh>¹\®¯¯¯¯¯EZ B€BðÏýϳ@$BÐ1ZtâøŸ#—Ë¡3;€Ž"‹ñ|io9UUUýõ”€ˆDâ{ÌsF"‘<<<ØlöB›Íîß¿?”,€h4‘H¬««kÿŸà>ñ|9o9˜@ àóùP¾Bd2¿eUQQ‘››khhØ"Aaa¡­­mëû}útìØ±ø–ÖÙÙY__?11ÑÐПe:)Þ¤¦¦>~üØ××WuOfhh˜˜˜¨¯¯ß»woorrr=zôé§ŸâLSSS\2}úôÁñ¦   11ñþýû¸dº¤)`øðá¸Êx<ž»»;B¨_¿~/ôööÆg7U󯯬ªgDWW×××7##C.—wù™®¡¡!;;»¢¢¢¸¸¸oß¾"‘ÿÚ!C†Ðéô””œ;;»ÄÄÄW¯^UVVvëÎ>}ú$&&R({{{|»O¡PB=JLLLMMe2™82™››ãluÞÎÿøûû'&&â³ FÃ7+yyyø§â×ΉDâ˜1cð’ÚÚZ|5# q¼:tèóçÏ»üÅ "‘¨º¦ÑhZZZøfzذa‰‰‰£F"“ÉAOO¯©©)##£ººº  ÀÙÙY¡P$&&:99}€ùLLLz÷î Su:b2™~~~OŸ>UŽTG1‰Drww§Ñhê7nÞBII ~Æñ~²d2ÇUÛ®Ü޼Ë!‘Hd2︜–––X,æóùAÕ»¦¦&-- Ÿ¡ðQD§Ó% ŸÏ¿qãÆäÉ“ÕïUÅb1…B‘J¥ê"‘ˆÏç+ \ý¡²²²çÏŸËåò÷{¶ý×;B¡P*•Þ¹s/)//öì™ú÷>xð@¡P(•J …¢j¨ªªzòä‰\.'êYD"±«šNÇUöêÕ+ì©T*ŸÏÇ ñM€zS(¼J•|QWW׺×㇇Gf’J¥‰„F£‰D"<û$FÃw3<˜9sfmmíÝ»wår¹D"!‰ê{W7A$ñubvvv‹‚d2y̘1þù§ê¸ÃÙÄŸ»Ãï×ÒÒB¡°ÅÕ½X,–H$£Fzøð¡P($8%®;Õõ @_=ËD"‘Ç㥥¥1¢#ÖÔ˽µ …âm Þûàoc›èÒ¥KAAA!USXëï%‰cÇŽÕÑÑ!ª†¦7þ¼±cÇâ î0~ú%É{´bwÏó‚§§g‹Q3ˆD¢\.W*•øC·m[¯ªª¢P(S§N-((ÈÈÈh±vÊ”)gÏžUoÚ577ÇŸ+**ºÃï¿xñâÔ©S¹\nbbb‹U#FŒÈÊÊÂvðEÏÔ©Sñ*Ü*H&“û÷ï_^^ÞÍßÄ;R ^¼xááá1uêÔ”””òòòÎ>F‚•••‡‡¾”OIIQžo;ä[õAUø)ÆûÝâ´>§±Ùl©TªºTíÈC£Ñ”J¥D"ù§ØÍ;¨èèè\¾|™J¥\ºtéi>ù䓇r¹\2™}Úm9™L®­­=wî\ß¾}³²²ÔwÂææfõÄÅÅÅ>Äw¥Ý$ŽÒéôsçÎŒ1Bõ€/—J¥ê?R$?gŸŒ\]]›šš^¿~ÝÝ*Åÿè4˜™™ùôéÓÑ£G …Âöw x?¦¦¦fffçÎCá¾sm£R©­» (•J¼‰Ô¢Í­a@ ‚7ƹêêꊊН‹¾È‘J¥"‘÷cîÕ«W}}ýëׯ¹\®ŽŽ‘H$mŒÀÓÔÔÄ`0”J¥»»{ëiɵ´´T h¡ÆÆF===--- …‚OÙÌ€rss B}}ýÛÒ466êêêâ38—ËÅÝí \]]KJJ”J%>­s¹\]]]‰D úõëwûöí.¹³ijjÂUf``@&“³²²ø|>…BÁ ›ššÔ¯ƒÔ«X¡PtÛøD§ÓµµµÕ3âêêúèÑ#???|sPWW÷úõëþýûs¹\mmíÖW]NOOÏÖÖ·v¶è¨æçç—œœlhh(—Ë$‰T*ÅÙ´²²ª¨¨è¦üìÙ3mmm.—«¾—9BÈÐÐDøÇ³X,---|K§£££z#¢¡¡¡kã¨B¡hnn644Ô××·µµmO :Î`0ÌĮ̀TjMM nïìß)‘H$ .7¹\N¡PÞØ M*•ŠÅbCCCSSS ‹§²ºº:¼6›žžþO=‰ô¶û9333}}}÷ÆÈýCN}}ý«W¯pÏ™ÂÂB|‘’––æå奫««T*ñYU"‘¨2ÙÜÜŒk"==ÝÓÓÓÆÆæÞ½{ø©TŠ/ ø|¾¥¥¥‘‘Qcc#>ö’““‡Š{¬án$"‘H{¸\nçõ%MJJ>|8BèÞ½{¸ALý{qhJJÊàÁƒ †L&{ðàA¿~ý^¿~]]]]YYéææÖºd E—Ä\È= «««333B999ÎÎθSRRðãøûU\[[Û­ž……B2™ljjÚ:#êçb¼ÏSSS6›]^^Þ­BN]]‰Drss+..Æ]êëëqcEuuµ««+BˆÇ㥦¦ÖÔÔà”¡ÜÜÜnÒâîÝ»#FŒhnnNKKÃG1¾vill477711Á²X,¾wïÞ°aÃðŽ„_SonnîÓ§¾VCá§>]»G=yòdРA555©©©øòWu:Â5¢T* EMM ÞµBæææùùùnnnÏŸ?oz;Cmm­jOÈÏÏ×ÑÑa2™ßp(•Êêêjõ£¸¤¤wZS?Šoß¾ýÉ'ŸàÚ?7¸KˆH$j£çj}}=Ç{ã–‡ÓÔÔT^^ž™™Ù¿ÿŠŠ cíýnxpVèÚ6&“‰££‡‡ÇS½©ò †««+F«ªª’ÉdöööøCÛenn®§§G"‘ðHÒqqqááád¨Ð0 ÅÜÜwÚ–Ëåµe¹\^[[Ûžûl==½Ö¯`CÈé0<¯›¼ øÈ577á—ê*++;ðU¥RicccccóΔd2¹uk<„œŽ 9Ým¨ÀG‹Ëå>þ¼Ã7K&“I$Ò;[ÕªªªˆD¢±±ñ»CŽD"iÑ;ÀðËûm§©¨¨ P(í 92™¬wïÞx…ž‹B¡”””à¼@FºOF¤R©••UΙL~ýúµD"ŒtŸŒ”••‰D"ÜŽéXxðˆŽêÂþæ†5‹ÕS{ÖÔÔ$•J{zF¨Tjss³X,†ŒtŸŒðù|¡Pé>øE‹žž¡PÈãñºUFˆD"ž÷³c¶7‰>PûÈóþüù¨¨¨w&»zõê–-[:êKïÞ½ûÝwß½mmš' €žnܸqm ˜ò6Ož< iúßÿ}×®]PÚè#ì±& ñhx0† &à6J‰D‚»aP("‘Ø"™P(Tu©À¯5!„èt:‘ø?1[.—ãa¤¥R)•JU òŠ·†›DB>>>ƒ BI¥R P(d2ÞšP(Ä#g¨ýó/áq¬©TªT*¥ÑhªÑ9 ™L‰DøqÕ@תAn( K,ãþŽxTïÖƒÐýÉd2…BÑâ𬫫SlÐÍ!:IDAT(@uxâ£"ƒO x.|ãÃÄÍÍmÇŽx³R©w¦ÑhªYð%ªˆ@ €î¬ã]Nuuµ——×´iÓð@;ñññ‘‘‘¡ï¿ÿþÈ‘#‹-ÊÎή®®5j”——×ĉ[ôgçr¹aaa^^^^^^©©©-†h½víÚ7ß|³wï^//¯#GŽà¡28Îøñã½¼¼|}}ñËÀ·oßþöÛoB;vìØµkך5k¼¼¼îܹ#“É|}}›šš&MšÔQY®¬¬ôòòš0aÂÍ›7ç΋:räÈÆ·lÙrõêÕúúúyóæáìàœ¤Réßÿ—DFFâãdÉ’%—.]š5k–———jê9z–?þøãÛo¿ŽŽöòò:uê”jÀ½ªª*ooïñãÇãƒýÚµkaaaxUhhèµk×ðQÇŽøx¹zõ*㸪ªjРA^^^³gÏ~[(9šã“O>yðàAffæ/¿ü²iÓ¦kcbb–-[æêêêïïãÆÌÌÌC‡ýðÃêi~þùç!C†dfffff®X±¢õ¨± t:=33óåË—xnÊ©S§=z433ó?þP9­røðáÀÀÀÌÌÌŸ~ú©¸¸øþýûzzzªyýþ=ŸÌÌÌß~ûmݺuª…çÏŸwuu4iÒÒ¥KW­Z…³ƒ§ ÍËËÛ·o^¢¯¯ðàAü'QQQ™™™~~~pØ€êúõ놆†™™™.iii¾¾¾m'knnNNNö÷÷W_øÕW_Íš5 _µ9OŸ>ÅsöuÍÍͪN[ذaÃ!CBñññx‰³³ó‰'BYYYÝvz`ÞCnnî‹/ðÈÿo3hРììì3gΨ/¼víZdd$•JíÛ·/¾â|ãŨ›››¡¡aHHH~~>‘H|öìYDDûÇr¾üò˃â©£Û˜£ó³Ï>;vì@PŸ§6lXVVÖÞ½{Buuu­o¸\îßÿœœllllkk‹š5kÖ… H$’B¡ÀðÛ&‹;öùçŸwH–.\¸wï^¹\þÆ7¹ÆÿðáÃÇ#„ðœ@l6{РA8ƒ|>ϲ€fhhhøóÏ?“’’,--ÛxÃßÕÕ”ìââ‚—ÿç?ÿ!‰óçÏWOÙ¿ÿ¤¤$|¼466âÆç… îÛ·!$•J=<<:ðѬø¸º„††* ±X¬¯¯›tÝÝÝñmr@@€j÷úöÛo‰D¢X,ÖÕÕýꫯB}ûöÅ÷:ãÆëÛ·¯X,‹ÅË–-ÓÑÑiñžžžcÆŒ‹ÅxŠ­¯¿þZ[[[,S(”åË—#„ìí탂‚B#GŽT==úòË/Ùl6BhÍš5ï1·÷Û¬[·gdÉ’%xÉÀqO„ÐܹsÍÌÌpvpÿSSÓ/¾ø/ñöö1bBhêÔ©ÖÖÖøOV¯^ ‡ 衆 2räH±Xð÷¾ã¾ä¿Þ¨¦h0`À;‡õÌÌ̤P(ýúõƒ)Ú>.ƒÆ÷s,kÕªUP ´íñãÇÿý÷Ô©S{úµQ÷!§#y{{w·žÄ¸Ý@WWWÕJÀGhĈîîîïLfee5kÖ,Üì>PÈ¡Ñhm<]ïð ,8#ºººí™,ïgdâĉm@F #ê‡gWÅÿ(#T*µ»ÕÈ;'dû·!'===##£§‡SÜÚ¨1yùò%d¤[e$332Ò­2’••¥ÉÎÎîV¿JGG§=7ˆïrœ{ú}%FËÊÊ’J¥NNN=:#ø‰¢D"ÑŒŒˆÅbggçžž‘ÜÜ\‘H¤ …ª¾š=7#yyy@32Âçó»Uï-Ü}.×Y!‡D"õô÷êi4™LV*•==#xÈ[¹\éVÑ€cg„L&CtŸŒP(”îV#8ätØÖða9 är@È!€B!„r€® 9xÚÐàºÐ€ј j²ÞÛ›G’&‰ ¥GgL¡PH¥R‰¤‘H$P#P#P#o£T*5£FpFºa…ÂÎ 9ÏŸ?ÏÉÉéé—ŸïææÖÓ3’““ÃãñºUFð|9%%%³5|˜EB9„r@È ä€@È!„B ò摤I$™LîÙ±”HÄÿöôŒH$ͨœ¨¨¨‘žU#ø\Ú¹!§©©©²²²§‡Óºº:"‘¨©­­ÕŒŒÔÕÕͨ„fÔˆR©ÔŒQ(‡£ùg!‡ÃáÈd²ž~½ÐØØ¨P(är9d¤ûdD.—kFFd2™B¡èéihhФŒ(•JÈH‡# ÃÔÔ´CNŸ>}`жn¦hë†)Úº[F`жÎS´è‘ ä€B!„r @È!€B9„šäÍ#IS(:Þ£3†';"“Éš‘¨¨¨ÈH— rJJJ„BaO§ÕÕÕA$AFºUFÄb±d!¤©©©Q*•‰D32"•J!#B¡vbÈ¡Ñh £G×…Báñx2™ 2éà–2™ÏçK$Èd¤Ã3"D"Q·Ê‘HÔÒÒêÜ»6›mgg×£+F£‰Åb©TÚÓ3B¥R%‰X,†ŒtŸŒÈd2¡Pé>‘Ëå|>_2¢P(x<^·ÊLÑ G‚B9„ÝŠ@û …B.—ûÎ4 B€÷§P(Š‹‹óòòÞ™ÒÌÌ B€÷'—Ëß™¿ø!À{"‰ol1S×ÔÔT]]mll¬££!À{’J¥‰D©TÊåò·¥)..ÎÎÎ6lXë=Öt.—[RRbjjúÆg9rü2™ŒD"á©Zkjj‰DVVVo\ûÿÚ»û &Î?à»yÝ$$ò" D+Á‚â[¥B5-õm®Õ³*¶Tí µ­öjéØjÇŽéMÅÞàKǶ?Óž×üN¬Õz¥ž¢Ä/ÖˆC‰„ Á „MHBØÝûcor4"‚ äûùK—ÝÍîód÷›çÙgŸ/„£CEQC6qêë냃ƒ§L™2ä†L^pÜÄB§âp8“ãD F F FàDÆ1ÀÜ¿Ã0·Ûíõ'§ÓI’dRRÒƒv5DÈ™1c†H$š)Úd2Š¢“àD¤R)œˆ¿‚ “ãD(Šš'39NdêÔ©~x"C¦Œ£ ^‚ãxee¥H$‹Å£9|>ŸËå3a¢ “¹Â‰À‰ø—Ë… œ!IrÈ…|>ŸnÖxš>l6;55u˜]Á³ÂápxâÃá8wî“É>…(„‚¢¨   ƒ <;;{øM äxD6› A‚ NŸ>-º>„ŽÇãY, Ã222 äCv»½¬¬,22r$+1bm``ÀétB9@þ:bÉdÞ?­g||üýÕ˜Læˆf’v¹\.— JÀ`b±X$±XÞcÉ’%C*‚ ¼æÅay¥‘<ÿh˜Lfpp02Ê— 9ÎC‹Å²Ûí---P¸œ`ˆVNss³ÉdJHHˆŒŒ ‚1ЀÚÚÚúûûþùg¹\þЬr Åܹs5Mee¥B¡ …‰„Έ`Òëîîv»Ý.\‹Å2™léÒ¥cØÊ¡Íž={öìÙµµµƒaÚ´il6;&&j&1³ÙÜ××WSSÃçó#""ÒÓÓQõáþÒi6þ|A®_¿NO/Íår¥R)Ô L2‹Åb±hµZ&“>þüáSJIÈ¡¥¤¤$YSSÃ`0p …x`r°Z­mmmmmmAH$’øøx±XaX¿'äÀÌiž9žILÀ`0ü²êÀL¿í'U3v™qýúúœh©Càz™!‡Åb ÿþé¸ëéé±Ûí Ð.' Ã8ÎøƒÁ`‰D–AEÑ    tÀV«Õf³à5Âårýùuø®®®?yNï_¿¡‚ Â묷··ººð¹sçfsØívWfX£ÑxñâÅÕ«Wæ$#|5{Üá8^]]Íf³ééçáñ‹¥ªª*:::>>BŽ·þþ~f<õí]¯±±199 T.—k¼º¶ªªªúúú¶äI’œ§ßÚÚúÇÌš5+`kª¿¿ßèt:ƒÁí'ÇÃ@È!€BŽO?~\©T^¸paT[åææ*•Jÿž0i|üñÇJ¥Òh4z-///W*•G¼póæÍJ¥ÒétB¹=Š¢”ƒùäĉ&++Ëb± þ“ÕjÕh4íííƒÞ¹sG£Ñøç°ø‰E£Ñôôô¨Tª¼¼¼#GŽ8p`ÈÕ‚Ðh4wîÜyÐ~ FÆÚÞ½{¿þúë;v¨Tª{÷î-Z´H£ÑhµZ9þûƒÎjµ¾ñÆF£qñâÅv»þ‰'“ÉÌf³\._¾|9I’?ýô“L&+,,Ü¿llìùóç=‘ÆétÊd²ŒŒ ú¿?üðƒL&ûòË/ábxL$Ivuu•””F>ŸOmii‰Ý¸q£çÍg’$?ú裸¸¸ŠŠ ÿ>Äb±¤Réš5k ¿øâ‹Ï?ÿœ$É>ø ..N.—ÇÆÆÎOQÔ¹sçbccåry\\܉'(ŠÊÉɹ}û6‚ ôËgZ­Ö³ÂgŸ}€s øÜþýûKJJŠ‹‹W­Z%•Jkkk/]ºä©‘óçÏ{ üÛo¿¥(Š$ÉåË—Ëår¹\žœœLEQ/^ô¬vìØ± wM°sòäÉÝ»ws¹\¡PÈb±Ö­[WWWg³ÙpÏÌ̼téReeåš5kÜn7ŽãŒŠŠZ¹rå† ®]»æÙ ›ÍîííµZ­ýýý‹e```TÙ[Áƒš8jµšÇã …Bƒ‘ÐÝÝ=gΜ¸¸¸mÛ¶mß¾^mß¾}_}õÕ¡C‡JJJ¡Ü|x0 s»Ý.—kÏž=ß|óÍáÇõz}TTÔÌ™3=™²***rrrV¯^­×ë_ýõ÷ßÿÌ™3*•*11A7ntuu¥¤¤( ½^_XXxèС¢¢"(ÞÇär¹Ün7Ç£o8AAAB¡þÓµk×6lذråJ½^¿uëÖ;v”––®Y³¦²²òÔ©SMMM}}}Ë–-«««{ùå—333õzý¶mÛòóóOž< !gÌ™ÍfN‡ãøà…555^«½óÎ;[¶lñZˆaØÕ«WµZí† ~ýõ×]»vmÙ²%//®Ÿhoo×étƒ“"’ššzèÐ!¯5U*UBB”ظÔ­··W§Óuww?h[§Ó©ÓéþüóO(ÆqýÔSO-[¶ìæÍ›eeež§×8Žët:³Ù>>??_©Tzj$--Í`0¨Õꆆ†yóæI¥Ò+W®ïܹóÅ_<þ|vvvhhèâÅ‹F£Z­>{ö¬Ñhßáp<«šóçÏonn¶X,(ŠÒKN:µeË–?üp÷îÝCnÒÙÙYPPÐÝÝ­R©FòÍÍÍW®\INNÀä|>ŸÃáØl¶ñšIúìÙ³]]]ëׯ´ä(Š1!z Cyyù¬Y³0yÇãr¹v»Ýg’®¯¯¯©©IMM¯ä|>¿²Ñ|¯»Oõoù¿œ;Ãp“ȯzÆoí‚z /@¾½½½{öì¡Ç‰BcÆ6ìY°ßÚ=ÁɃÅB„Á` B#¹6‚´LÄóÙ·oŸÍfó4qY°`AIIÉÓO?ý †ÞÒ¥K×®]ûüóÏ÷Æ& ô#O¥®®þûç“¡s|ÅŠ^Kd2™L&¦üÊ+¯À÷ž0˜I„“‹u¬i4ÿ|eæÖ-//okk—ð|V«U­VûÿqÂ5rùòåÖÖV;ªñh:BN]]]MMßNŒÊb±¼æ E•••µ´´ŒWÕ0Œ€-y»Ý~òäɉ2‹sÀ^#‚\¸pA¯×ûçí‹Åb ]5¾PLúÞ™áÚZ0~¯÷rL>|>ÿoõ­éh¾ùÿ²žåxB ä€`rùËðƒÁáp Pø„פ½ÿr¶¨•ŒÑu8Q(&©±ÝÞåF»¼!BÎ7¤¡—di;ebèm𸪴·p O4TÈA„ Ú}ÿy}¤©ÎyÎv®ò¢@À‹w`Q.ûˆò+šœ|6ö—n3ôëoþöåµéy_ü_[§ßévÚGøÑÏ„õ&‡ôB@€¸Ý7¥Ú<àrŒde6&`q0AðÎÖË_}üÑ«Y¨Ùlž>káßèFûÁNÜ’.u½0Su¢¢ó?ÆQ2ë2Ôÿý“lCãM–H$úöHqþþNÍùŒ+†KG¸ Âíêw9xP rtÓ¤á­.»õÊñOTÇ‹D"”¢(·Û}þ¿Ër6¿3[¹pmþwD‘á­ÄÝu¹¨›Ñ×Ó9Âõÿ¡þ×»šËªãG²³2Ùl6JÏC700€ãxégò¶½?òÏF)¥¨ 6…2F>iÉ¿ÿÓêUB¡Åb!ò¿ôÁ¡"õN`IEND®B`‚saods9/ds9/doc/user/catalogs/editjmag14ds9.png000644 000765 000000 00000531147 11332127303 021470 0ustar00joyewheel000000 000000 ‰PNG  IHDR&_ÄŠbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ ɲnS IDATxÚìw˜UºÿOåÐ9LOwON0C†‘¤¬a ãå*«"º»Š×Àªàª(¦‹:ÊÊêQLõ®˜@\QPEQ@ ÃÌ09ôtOèœ+‡ß…-ÁÕÁe½ëïÖç™gžêê·ÎùÖ9o·êœÓu UUÃá°Ïç{ðÁøAºbî<;ÐÑÑÑÑù% 5M”yl#´…B.—k„ÆápØápÀ0üÃf………wÝuWIII^^‡W®\ÙÙÙùàƒAøGÿÿÀ߯¾ü·z-êèèèü"dù­uïü÷ms8Žûáæ]ûÿ /,\¸a˜‘¿òÊ+óçÏ—$IÛ£í$‰Ü{fýhê½óe CL6ó úc³ÌfÒaS ¸ÚÕ¦<ߨÜÑ—J%'–9÷µö$‰±%ö¶n4+Ê£cÑøàPÐJÁ¨*öôY(°‘­ýétr·ö+œûÛzã±x™Û4 ÃN& ¬Ï?„ÉaDÛ{üÙLzl±­±µ7•JN*w6¶ö$â‰Q–>ÿP(q[ 6›ö S˜b¡ξ€È1•Ss{_*•œXîl<ÐH$Æ”Ø:zü‘H¬ÐIÇãñÁ…„pHêö ªWè tùÒ©äÄ2gãžd"1¡ÜÙÜÞ‹ÅKóÃÁðÐpØaDU‘ë󡪘gÆÛºû3éôøR{c[O2™œ\îÜw 'OTy;áP(’o%X&Ó&QÅBB½~ÍVyÍš°Iš}"QSlëì D"Ñ•L$ƒAHDîîPD¶8>ÐéK¥’Ê­=ÉDb|™£¥£/‹—¸ ¡pth8d§Q ½ýƒˆ*æ[ð¶îþt:5¡T³ONªÈÛw ;OTxÍþÁ`0qYpžÍúC"Ûh¤³'À2™Ñ…–¦ƒ%–·¯µ'OTY»û‘¨×N¦SIÿ`ЈUºúd-uZ:|ZÕkÂÆ•Ú[»ú£ÑXqž!‰‡l4+BoV•líò¥Ó© eÎÆÖîd"9©RË(^î1 ƒÁHžy¦/0ŒC²ƒF:züL6SShÝßv°ê5a£ -=ýƒápT÷IÝ'Ÿôù‡DžýÏ•,Ëþh#Ãðþýû§L™’Ífµ*‚C †áœ}KKË„ X–ÕŽUUí{(w,à kßN:õ®»îBý~QQQ,Ô1°›H·Ý˜Ë~(–Ͱbu±CK `¦p›‡ (Í ñ¬àµÓŠ ÂINd†,4n¦qEUã>ÃJ(yìt4Ågyñ8>»â4“‘ljrn§ÍHXiœåhŠeÅi¡uú£.«Áë²în4Óøø ÷—Mý40¦dgK¨ê˜ Oç@,žæÊ œ /÷޳ÕlÜß=l¡‰1åù;šû $6}\éç}8‚Œ¯*hê eX±²ØKsþP²Øe%I¢¥/d3’•Ey_ð)|ZuÑgûú(4ºhwÇ/H£Kó¢™áX¦Ôm0ÒæäY ….Û7í& ŸPéþb?M`µ5Å_(Š:¦ÜÓ=˜ˆ¥Ø²''*=ƒqÝä°šöu Yhbì·Â¦-ÝÖèCh|•·¥/œÎ Ey‰¬ÐLåYišlî Y Ĩ×ο‘ħ/Úº·—ÄÑI£ ÷t s‚4ª$(Î E3%n;Œ mý§™.vÛwµå„ùh­­.þúÀ€¬(5åîÞáD$Á”y‚¬vÄÜ6£ËnÞÛ9d¦ñqåîÍý›6¶äËý~ã*½­¾H2+Tå¥XÑ7œ(̳TsOÐb F†ÍüVØÄQ…û:‡Y^ª*q…âÌ`$]’oC1¬Õv˜èR¯£¡5`¢ð)•îm> G§Tíjd¥ºÌí ¦Â ¦ÌëT¨+Í·ÝNËžŽAMØöæ~šÀ¦Ž)ÙÞì‡!0¶ÒÛî%2|E¡3ÃI}ɧÅl¢›ºƒQ]æÚÙì7’ØŒqEŸíë#Pd¨‚Æ®`–«Š]‘$7NçÛp?à ÛMdy¡óëš0Ïç}ŽN]ôMû É£ËÜþp:Ï–zìºOê>ù󸤙&™üèóM®‘ÏmïíßõòŽ#ZÝÏ«=Ö( 9ÒØÎܸ곉ey·Î;Áa¦>kô?ðÚWŸZseÝxšÄ´¿ßx½Þ+®¸‚ã¸mM÷¼²³{(9¦Äi5’0 ÷ %zóë5Ÿ´”{l¥n+Aë¿h'MvÇþsjñ´r£‹`a™÷G£Ñ¸ôÂIS*MýI.r™/˜YZ倪óÉ"·ÝJÓyÓ¹cz|þÁ8¡„ àãòWê6Ï?¥¤¹Ó—äFU›hââYå•Nxl±5‘áÂ9ÃË‘ç¶òlÆ=]a›‰*É·ìé8Væ±t&8Q©ðZ#)~8Á–¹-² u¥¼£ÕDïï8ÌTq¾eWgÈ@âenëLU¡r¯u(ÎDR|¥×ÊŠJ_(]è4(¢Å˳Ѕ.KCGÐb Kó-ûû¢‚”{,ýáL’+½¶+"Ùb— ð¶@Üm3äÛ»»B6#Yâ¶îíVæ±t¥XA®ôZ£~(ΖºÍ*€º“^»Ñn¦÷õöMgˆ&ñ2·µÍ“UPáµÇÙpŠ«ôZyIí ¦ &“hî‹åYè"—¥¡=h¦‰·¥¹/ #H¹ÇâgâŒPéµe8ÉÉ»L޵úãù6ƒÛaÚݲɷµ±'‚ah™ÛÚ3œÊòr…×σ1¶Ìm† ¤s0é±z_OÄn¢Šó-{ºB•z,턨¨^k(Á†’\…Ç"ÊjÏpºÀi4Ȧ¾¨ÓB»,»:‚&š(q[›}QBÊ=–h6–* lY^îgŠòŒ$èç[ §é›ÎÕ@–¸-= CÊ<Ö¾`*ÃÉ^k"+ĘR·‚‘Ž„ÇnpZ {»Ãš°½]a’ÀÊ<–΄ ©^k8É\¹Ç"*PÏpªÀa´©ý½Q§™.Î7Ó4ÒD©ÛzÀS!¨Ücˆ2Ñ4_U`Í ²/”)Ì3R$q ?æ²ÒÞ<ó®ŽÅ@–ä[ö÷F)÷XûBé+UX“Yq Ê”ä›mHè>©ûäÏà“Nóp0|ÎŒJm,çGtkkkµ±œ%/|Á Ò!§¡mhÞ)5AÔÜÜ?‹ ðÄbzÇAaÔ^?ˈ 2ŸHH¡´\hÇet‡«s™Ñ¦CášòëÞƒU¿«—á$0ÚMv‡…8#;‰¬ öEÅ<f¦ÐC‚ É%ôŽnFP@—jäÒ¼Z–GÄÙÝVÇàö OH‰“ØëgžTbØÞ•ThlÕ¨ s‘C i8%Øq@]aÁB£n ®û¤î“?ON)1äy‚XAníµöÇø¢Ú_s_D”•ܤ€C®ðÚr•öÊ;M` jŸÛDåЇ!YVeE=b è»§‚Ê<Ö¥¿ñèÛ»|Á ªÀ~ûïfzÆ\’l¡°_sš¦z¬Òð[!XU(5Ò¸( ãKìÛ ΚÑ©Êdiïêiì J<@*EQQ“KUBY`Œ@Äe¥üÁP<}rmu$ÉtÄ~sö©,áRUÐúíÍMNôGF8€‡SbÏpúܺS{Ià—‰‡ÊŠÜrj`0îRÃ6«eÛ®&s`¶Q À‚ìö Úàö((P…g”PV-³!¢ úb²Ç›(dÿ è aÙå(.´!̓"€ "<”c¬Zé€Yô'”3Lbða)Ï»Íè×>ÁLÀ…Vdo@ÀP¸È÷Åä´ªp’SRJ±F¨=,åa§Ýí¬$\`=(¬Èw„DN*íP$«3j™ ‘UГ=&ØB#ƒ¢‚½ä›~Âá"+Ò2,*TjƒSr”Q+0+þ¸\`†ii–œ4ì1£ >ÁDÀ…Vd_@@Q¸ÈûbrŠUN8Í«¤RdQj I.œgB¿Ñ„Y=Çà"ÜY T8à(£ gÔR¢¨;"»M°•Fö |'ŒÄáB+|`X”U¨Ä§”£VØ^¾¸ì5Ã4‰4‰N­„ûƒ&l@D`¸È÷'䪜pZ¤Rh1j I.ì2¡»ú Z=~Gá"Ü‘²"¨tÀqFJ+%V@PgDva»Ù; Ú(X«zƒ mp[HU¨Â3J8«–ÛQ}1Ùk‚$Ò4ômÕ+lÿ ÁP± $ä8ªpVþ„Rh† n Jy8ß„6ä„}[õ=19£ c•Á´Rb…!êKùFØa@÷„œ0Ý'uŸüWûdî)GQÁK››ßÙÞyDGÙÂ9S.¯›xèir þÑ >ú)çËæ‡ÞøúÐdwxüí†[æÍpZ 9côÐc šXáºíâ÷þÏ—$†Þþ»™cJœGtó)N²jCGȘé³±Þ¨½tüž÷ö5·<£Gw²ÁŽÎa˜Íð¢]ä“Áž¡dLÍS!Ë‹›[š›:‚‚i¸³äÓk>=0Œ¾¹s §a/åã½&8¶tô¶÷ Ó-aœ(´gXº°Ó7Ü/ô»!‘OE£¬J”(Ždåu ÃN!–jhÞ Aà ®1&}[·ï ds¶ E’ý •(*1PžtFUI…+mŠ?’46O 1P8«VÚ'C”ê5A$µ… Ù)ÐQa.²(¾„š ñ.u0¢ eiJ«Ef€!p[XqP…­!…Ä`¯Y퉫YšàRýigAÄ88˜QK-@pGDu #ZCЇò ;ªŠ*\eSú5aN5ÄÂá¬Za‚ù“ªÇQÔRÌ$ä0€Žˆ ¸È¢ô'ÕËS‡²P”QGÙAF€Ójá·Âìd¥@kXÁ1ØkVúâjF„&¸Ô@ÄXPíqfÔ €`¸=¢ºhÈD‚¶BkÂbª CcòT $8hŒS ³p8«–[¨@þ¸ê1B4µ…9¿VbQú“@6œ…"ŒZeŒ ¤ÔBD P[X±QmCà³Ò—P3ÂaÂ<œQ‹-áö°šGC&´† ‡ÝFµ'®r246Oõ§A‚…Æ8Õ ‡²j™È*ÔU݈ơְ’«zE…K¬J ¤8hlžd HV­´V‚Rj "0¨5¬XIÈNöˆŠ"p¡ù»ªÈ€F;@R€‡Ój± ÜVœ4dÑ„a°Ç¨öÄUV‚Æå©o«>ÊÁ¡ŒZf €;£j¾2à íaºOê>ù¯öIF‚ß6ò’¤o¯}ÒrÅÙ“*GÆœCøKzg{§(+€³j˦V{W¼±S’•O÷ú.9c|žÍø=c9¹Ç—å­¼ñ,½ÓÑÝ|²ŠÈ舨2ïVeÈ Šd…+ŠxœÞUeã 0Fõ%±nÁ¥JV(&qšQð†AAqØ‘¡ç‰0B7¥eÕmÝ7¤JΓ`•LHªb†8*./.ÈÿUY‘$I~ù/”&iÔ§¸TÙL‚d*ðÅ•^Þ®ÈFÁŽGpE(€ÍÄÞ!XæÊ03p2-@]1UTÀdß#8 Œqþ–àáR³˜¡Á â¤$Q{â((^£ÔÃ%Lqñ-Q‚—Á'ß'Ò"Ti<2œEÜ´C '09V:㘤€qN¾)B2˜ìâÛb#Ñ61”E \h% ¤ ![q¥+ŽA(·ð-1B”Hcq.1‹Œ f)ѨÚGpX-4Jm1\-a°ÚGIDqÓR»&,Ÿo‰¼ &åñq"+‚*«e‘`öE ‚Þ8bÂe;©tÆ1Uc|Ë!ÂX ÔØ…¡ eáb³(ÈP ØHÙˆ+=q Ô’o…åNd¬CèOaI.3 Ê"y”„[õ£Ô~xÕOÌã»âDF•V1Æ"Á,ì1J€ž8bÄe'©tÄ1Eã|sô°ª¯¶ Á,aà"“(Ê?X ÙŒ+Ýq †@©Y8p¸0Ý'uŸüùäÄ<¶;{pîIÀwþ~æ_×6r–ÿáׇ6ò¹¹7Í=áÚÇ7Ü€6›àÒ3'˜iâè¨sÇïf^󨇓«Ü‹çNµI‹‘¸gõçóÏšPUè8ì‘è„Nضm[&“É”í þkÈÿ3¼, Ûý¥@iU85åý“©QˆReaÛ“´ª‚Rá°„€8Àþ žG RnKP&Lª0óû¢‘GY¹æ˜”237Ä)6rœŒ 1˜‡â ¸Ú•$͘Tfæ£*¶²{"FQ*Ì\_šäe¨ÄÄ¥E4Ìb4! 7MØp±À(6Çh#*WY¹½…(•¶3IË*(5q1‹óh!ÍîÏày¤à$åÖÃ…UY¹–8 µü[aENPáÁ,t%loĈ#J…™ëÏœ•¹Œ„†XÌKó zR„‹ŒbÓ!ÂHD©´°ÝIJR¡R#°‡8‚|ÂIˆy´Ô§L¨Taá÷E "²râ4@™‰ rDZ@Š œ¨ÂY<Ÿ,¸Òq¸°QV®1jÀ ¥Ü̲+ÁÅFŽ‘ÑaóÒ<…ªÝ)ÒŠIÅ&aŒ6¢ò(+·GfæzÒ¤¨@%F.!`Q-4ð0 |iÂAˆù´t N™P©ÒÊk%\eaÛ?šÞu IDAT4 ÌÄ…8,) ENVá@w‘‚”Û”“ʵFåQ®)f@!¥ÜÌ d‰¬y­ê½4O£jWŠ´`R‰YØ¥¨úÞ4)ÈP©‰KŠX„E < ƒ¾4aÇEAl‰VõºOê>ù3ødO 'SÝÏßòŸ?ÜÈç6ž{î¹k¯½6™LŽ$"¼üòË—\r‰6£úGíQ>}: ¾ÿÑéû·µk?ÃYqйö÷tÍ@&÷?™ލšíNS¼‚ÐL”ÇÂ<á¡XY…ú2”“àM˜Ü’0š1ÉMñûb&Q<4×–¤yiv˜%b^@1¬ ÒEr¢´' V\̧ø½Q3*ŠkŽQx)ÖŸ%ÒVH3ibÉ|Šƒaµ+MÛqÁAŠ1““Ý·?fÄÕC±=iŠUЉñXˆ#<$+¨÷ 0©ù[a1‰¨šëHÒ² ÐlÅcî¥^ýYÊEò$"·}'ÌD¡Š›âšãFÈI+¤™´„²d>É!°Ú™¢m¸G ûb&*»)®)fÄ`à¥Ø¾4Å(hÅÄ4ÈnŠUÔ“¡„`ÁÅæ¸Ñ„InšoŒ DõÒ\G’–T¸€fBå ëÏRyO£rkÒ`ÁÅ|Šß;(ì@ÂA—f"!â4“•†Ì'9 V;R.æQüÞœ°¸AæËY - ˜¤€9ÂC±€ž4í +.6Å&LʧùƘ&ŒíJÓ‚ ÐL˜Ã"<á¥Q|Y*à ˜| a´`’&ŒDŵ%i‚¼4;Äq/ YV‚ ™Or8¬¶§¾+a•=×ômÕ÷gÉŒ„ÒLRD‡YÂM±P»Ó´줸?~xÕë>©ûäÏâ“i ;tôä5òß; íG9ÂøGdúÝŒµN¡PüËú“Tdˆ5$D¢œŠGr˜£ŠÉ¤  }Y£ gXî̘L¨`Ã¸îŒ ‚@™°†´„—Óñ0O…y²ŒJddÌÏÜD…ÔΌقñfTè̘qXqcÌÊX•æé¨@–Óñ¸H°t™tgLvŒ3 bgÚL!’cú£ "Ådrˆ£"QAÅc¢&,%¨H_Ö˜wP˜ÙˆŠš0€2` ) ¯ ãaž ñT)•`d¬Ÿ1¸‰, )]³åÍ(ß•1c°ê!2~Ƙ•±r*äé¨@VÐñ„D °´—HCèΘlgDÅŽ´™BdÎô1F^EJ©ÄOÇ¿6ÄÑEdJRáެщ³,ufÌTt`lOÖ¤¨p!™` ) /§A–Ô„åYV:Óf3*XP¾+cF ÕCdü¬!#aåT<ÄS,§ãI‰°/‘!µë 0¡3c&ÙEd}Œ‘•±R*1ÌÓ1‘ÐJx£ É”¬Â=Y£g)Dê̘ ˆäÀØÞ¬IVá"25À’"^A'"ä©*É)¨1ºp‡•®ŒÉ„ VŒëΘ`™ƒUO¬úr*‘–p?kðR;3&+Æ›P¡#c&`9ŸÈú#ómÕÇ¢‚NÄEr¥ É´¢Â=Y“ciDêL›éƒUoU¤˜Lé>©ûäÏä“TüGãÍ?ú]Îí¡€Š‹‹o¹åEQ’$avD¯TN` ’VòúFU Y°Ä«ˆªB8,Ë*$«0 )¤Š A*ɼ‚n/r „Ã’¬Â² £  ª ©ØQö¹ –DQTƒeU…$F AA! °Ä)Ø C TAA H% ™;J¯ êažÈH…A² €¤"9a¨äQÂXTD=òDF"ìÈ>Va0¤ …¼„UAA  ðÑÂ$^A~‚0–$VþÙªÏ ûñª×}R÷Éãã“°(ÊJ¾Í ªêÑMúÑ{‰„ÕjÕ"Â÷Úú1™LšÍæ\Êßk,Š"ŽãªªÊ²ü裢.—ëºë®c†á-[¶œuÖYúë¾uttttŽ }ôÑœ9s2™ÌæÍ›%IBs_ † .¸@/ ãÅ\ÐÒÒRPPpØïrÀÁi*Çée¤££££s\سgOooï÷‡UUAÐËHGGGGç¸àóùìõÑÑÑÑÑùyÐCŽŽŽŽŽŽrtttttô£££££££‡_Б·Þz눗\rÉš5k¦OŸ~ÒI'ý´¼?ÿüóÝ»wç>þö·¿õz½Úö믿.Ëò¤I“>úè£K.¹°fÍš³Î:kܸq#I¹¿¿ݺuçœsΨQ£ _~ù% ¬¬ìüóÏ?î…¸eË–ýû÷ç>Ο??//ïg«Ât: sN§Õjíîî6ùùù?!Á£«;W’ÿRš››?úè#m{„ gœqƲiÓ¦ÞÞÞ믿þŸÉ÷‹/¾Øµk ººzöìÙG|ûä“OŽ=º®®îŸ?Á]»v}ñŹsæÌ©¬¬üÑ£V­ZUTTtÎ9ç—BÞ¼ys{{û¢E‹öîÝ»uëÖ+®¸‚a˜·ÞzköìÙÕÕÕÚ… (jáÂ…€÷Þ{¯³óàëîó›ßTTTSvO=õTUUÕÙgŸ=ãW_}Aßýîw#,É«®ºÊb±èøq§··÷wÞѪ»»»ûÝwß=ÿüóËÊʵéèèxÿý÷/¼ðÂâââãÿ”ãóùêëë£ÑhÕ!H’T__ÿé§Ÿþäûøãëëë‹‹‹µIò»Wé¬^½úùçŸ7›ÍUUUA Õ××ïÙ³g„)÷õõÕ××8p@ûøå—_Ö××Ûíö\H;¾lÚ´©¾¾>W2Aüœþ‘N§ÛÚÚTU5<Ïïß¿?“É †CËó˜ (*w.¢(Z’ÿ:|>ß 7Üà÷û«ªªP½õÖ[?ÿüó=jýúõùË_þ™|n¾ùfQÍfóm·ÝöÁa°|ùò 6—sܱcG}}½Õj­ªªjkk[¸pa4ýÑ£ÊËË=Ïñ*ç 6,_¾ðõ×_×××G"íêniiaYöºë®Û³gOUUÕÓO?ýðÃoذáöÛo·ÛíUUU---üã‰ÄÈóZ¾|ù}÷Ý·dÉ’ÜÄóüóϯ^½z$–6›­ªªêè·s麺ºêëë;::´ÐR__ßÕÕu„Íêëëûúúþ%O9S¦L9÷Üsµxðøã¯Y³&×ä]pÁ’$±,{çwžsÎ9¹EFÂìÙ³išÖ¶¿ùæ›… .^¼X’$íã½÷Þûúë¯_wÝu€GyäÄOÉáôéÓÿô§?Ýzë­S§Nõù|O>ùäc=ö·¿ý­ººzüøñ7ß|skk«$Isçνá†Î:ë¬É“'?öØc×]wÏçûàƒ{ì±—^ziÇŽF£qä'¢`Þ¼y0 Ÿyæ™O>ùä³Ï>{à 7X,–L&óüóÏ˲üÁ‚ðÅ_”””œ|òɯ¾úª,Ëï¿ÿ>†a·ÜrKKK‹,ËçwÞ¢E‹pyîv»ÝápH’ÔÛÛ+Bkkk~~þððp ˜2eÊþýûKKK‹‹‹~½ÒÑ8í\ÀÒ¥Ko¸á†™3gž}öÙ<ϳ,{ûí·Ÿ{î¹›7o¾ÿþûiš†aøwÞùÛßþVZZú /„Ãá‹.º¨··wïÞ½&LøË_þBQÔHô3 ÓÝÝ=wîÜ™3g–••=õÔSÁ`0žyæ™Zé­Zµjâĉ«W¯~å•W‚(,,|öÙgµcEQ|î¹ç^ýu ÃÊËËW®\™ó¨f``à÷¿ÿýe—]vÓM7!RWW‡aØüùóÏó—_~ù‚ 4Ël6»`Á‚P(ÄóüÕW_=þ|íreyóæÍ{÷îyM~úé%%%k×®e櫯¾:´$Q]¼xq,»ôÒK—-[öì³Ï>ðÀÓ§O¯®®þãÿèóùA˜?þþð‡Y³fÍš5Ëãñ¼öÚk~ø¡ËåIîF£A£o2‚˜;w®¢(O?ý´Åb9á„P]·n]4­­­-))ñù|Û¶mùïö²Ùì矾cÇŽO>ù¤©©é´ÓN›9sæi§æt:ß|óÍ?þØ`0Ô××oÛ¶ pòÉ'ßsÏ=Úo¼ñÆòåËß~ûíªªª5kÖ¬X±âïÿ{ooïwÜa0AØ´iÓ¶mÛüñI“&mÛ¶mÙ²e4M«ªºaó٬Œmmm—^z©ÉdJ¥RëׯÏí?ñħM›V\\üꫯnܸñGoŽ!6455mÙ²eÏž=étÚï÷˲¬í×®„­[·^pÁ—_~y(:¦3ùôÓO·lÙ²eË–D"qÎ9çL›6çùÞÞ^@&“ñûý¢(jË­·Þ:’x Âb±D£QI’8ŽK&“N§3 …Ãá•+W¾ùæ›o¾ùæÝwß]__ÿùçŸ8p ··7 ƒÁÆÆÆ¼¼¼c œZ÷Ú–-[‚ÁàG}¤uÈ<öØcÿùŸÿ¹uëÖÚÚÚsÎ9‡çùG}tÒ¤I6lذaƒßïߺuk*•ºòÊ+W­Zõú믯Y³fÙ²e>øà'Ÿ|rL¹'‰P(”N§F#†a,ËŠ¢(Š"˲eeeMMM©T꘺¹fÏž}ñÅ×××/]º´££cëÖ­]tÑ‚ š››/½ôÒóÎ;oëÖ­ƒƒƒ×]w]*•ºôÒK_xá…;î¸ãÞ{ï3gÎÿüÏÿ¼úê«Ï?ÿü³«©©yùå—·mÛV[[;<<üÞ{ï]tÑE矾ÃáØºuë•W^ùè£vwwoٲ塇Ú¸qãûï¿ÿç?ÿY;vçÎ÷ÜsÏ’%KÞyçwÞyç¯ýë3•$)Z,‚ P-**Z¹råûï¿¿qãÆÅ‹/]º4÷`}ï½÷~ôÑG[¶l¹îºën¾ùæææf¿ßÿÌ3ÏlÛ¶môèÑÇTSÛ·oß²eKWWׄ 2™Ì%ùÄO¬[·îxüñÇý~?ÇqÑhT{æØ°aÃ-·Ürçw644>ø`̘1.—käÝÅ+V¬¨ªªúæ›o´²,ïÞ½{Á‚çœsN(Ò.€ÇãÉËË[¸pá’%Kî¾ûîóÏ?¿ººzÇŽ# l€?ÿùÏ ………v»ýسgO Ø´iÓĉÇù矿}ûöŽŽŽ—_~ù©§žzæ™gr}¹V«U–åíÛ·'‰Ý»w›ÍfI’.¼ðÂêêê×_½¶¶ö‰'žÐš h4ú»ßýnܸqo¾ùfMMÍÓO?­†ãHccã–-[sýÀ555[·n---ýÍo~sè}ÛæÍ›«ªª¼^ïyçw|:Ö4º»»Z[[¿÷õá‡Þ¾}ûO8±o¾ù¦¡¡¡¡¡!“Éh{®ºêªªªª²¼¦M›–k f̘qD‚«V­zçw´í‡z¨¡¡!÷qçÎï¾û®vët¬]4 ápX»b~øáµk×¾ñÆf³ùá‡niiI"Ï=÷ÜÛo¿ýÓº×âñx6›¥iE{x;vìOHðñÇO&“ÿõ_ÿõ³¹øé§Ÿ¾víÚeË–Í›7ïúë¯?txìüãk¯½V]]½téÒ¯¿þúñÇ?úð÷Þ{oåÊ•?ç59qâÄgžyæ7Þ8¦£öíÛ÷æ›o¾þúëK–,q:Z‡ÛÃ?œó€Óé\²dÉ&uòÉ'=øô£ˆ¢x÷ÝwkÛ<Ï/[¶ìŒo½õÖ×^{­¬¬lÞ¼ywÝuס"GèE›6mÊ}<õÔSsã:§Ÿ~ú5×\³~ýú¿ýío‡röÙgŸzê©K—.moo饗n¼ñƲ²²%K–¤Óé;²²2ç“$I.Y²$ßyçãÇ¿ãŽ;ô8qéèèhhhк×4:;;~øá£;ÓN:é¤\ÏñìX;ï¼óæÎ xâ‰'Žø A±cÇŽ;öÚk¯µZ­Çtb·ÝvÛ±6î#aæÌ™5557ÝtÃ0³fÍ:âVtÔ¨QÓ§O?ï¼ó&MšÄóüqÉñÎ;ïÌmhÎwÜqÇ矾lÙ2­áG5jÔÌ™3çÌ™3eÊ”cʽ¨¨Èáp}ûö±,ûOžË¦M›vîÜY__ÿ³ù·Ïç»óÎ;,X°`Á†aî¹çž}ûö} ,Z´è”SN™:uêÑ)ÖÖÖ®Y³æX‡¸2S¦L™4iÒ±uýõ× †{ì1íÆåü#¬V+Aµµµ---<ð@6›=¦ÃC¡P0 ƒ¢(ÚívŽãzè¡#ž¥P5™LétúøÃÈS~ôÑG»ºº0 »é¦›r; A&LàyþÞ{ïíééñx žyæ™·ÝvÛððð'Ÿ|â÷ûEñz½V«u„®588ØÛÛ;cƌٳgÏž=»´´tç·.ÁˆD"áp¸¦¦f„ ÚÕ­à&L˜PTT´sçÎÒÒÒ‚‚ŽãfÍšõÊ+¯<öØc'wßJ¥N:é¤7ß|óÉ'Ÿ´Ûí¹™u:ÿ ìv»Õj­­­}óÍ7Ÿ{î¹C¿úôÓOW¯^-‚Ýn?>O9v»½®®.7.TVVVWWg6›ëêꪪªî¹çžë¯¿~ñâÅ€§žzÊápŒð´¹§K—.Õ>Þwß}›7o^²dÉäÉ“¯¼òJQ µŒÊËËW¯^ýâ‹/>ôÐC#/#›ÍvÚi§¹Ýn“ɤõB_ýõ Ã<øàƒ€Ûo¿] -ÕÕÕ'žxbII‰Ûíž6mÚĉiÖÙ˜1cD{â‰'暪õë×ÏŸ?ñâÅ×_=†a¯¾úªV’(ŠÖÕÕi3O>ùd·Û}íµ×f³Yí—,Yrâ‰'Ž0w‚ òóóý~¿ßïLž<Ùjµº\.³Ù ð6Oš¢¨üüü6”F£qæÌ™»víÒ¦nºé&ǵ*~ë­·Æ·~ýú+V,^¼øÔSO]µjÕÚµkëêêpw¹\uuuN§“¢¨ººº£o`ÿ555/½ôÒóÏ?¿cÇÀý÷ß?oÞ¼¹sçþþ÷¿×ò}ùå—‹ŠŠž{î¹W^yåË/¿Ü¸qã}÷ݧõÏ̘1ãé§Ÿ~íµ×>øàƒyóæ]uÕU#ÌT›’«ªêË/¿ ¸üòË-Ztß}÷i>ùÜsÏM™2åÌ3Ï7nÜÂ… A¸ù曫W¯7n\]]ݘ1cŽé¢Õ.m>Eyyy]]]aaa®$kjj4·dYö7Þ¸ÿþûçÏŸøõ¯=nܸ›nº‰ã¸»îº ðì³ÏN:õŒ3Î?~<`úôé ÃÃm& ×ÕÕUWWfÍš•r/++Ó†‘/^\RR¢MÌù$`ݺu#ËñxùˆvP矹%ª««Óê:wEoܸ1×οøâ‹ÍÍ͹*þõ¯a˜Ýnå•W~4qè„Nؾ};Ã0Z»œN§õ×Ñùßâ‹/¾Ø±cÇ7Þøé§ŸÎŸ?ÿí·ßþõ¯ý°žþùõë×øá‡ºKü›SRRræ™g¾øâ‹ÿÈ`ãÆ²,Ï™3góæÍ7Ýtª™ŽÎ¿góæÍ_ýu"‘¸øâ‹'L˜ð°V­Zõðÿþúëº?üÿ‡rttþ¨¬¬\¿~½6¥Åh4jãäÿ׸ä’KæÎ;ò Ù:ÿ‹ìڵ똆!ô££óïűÎùüÿ³Ù¬ÿ¨ó—±Þè¯õÔÑÑÑÑù™ÐCŽŽŽŽŽŽrtttttô££££££ó8lú@6›ù::::::?L6›=t!•ïBŽªª›6mÖËHGGGGçxñý!çí·ßÎd2Ç´BŒŽŽŽŽŽÎshXù.ä‚pá…ꥣ££££sÑ^ÛzdÈÑÉ´w$ëèüâ˜2eÊHÖ~ÕÑù_A9ßC0Ô^Ƭ…Î/=Þèè!ç—‡Ëå²X,ªªêE¡óKá›o¾ÑVÐÑÑCÎ/UUõ£ó BÅ#<–çùÁÁA½d~¹Õž×ÚÁÿ×p8G¼.þþþ^xáˆ×]wݳÏ>û«_ýꬳÎÒKóñÌ3Ï (zÍ5×$IÒV,Z´(//oûöíÚ* åååW^yeî¨mÛ¶}üñÇ·Þzk0Ì­_]]}É%—üíoÓVB<óÌ3O>ùäÜ!/½ôR2™Ì­y‡Ÿ|òÉÙ³g·´´ø|¾œÙ}÷Ý·wïÞ¿ÿýïÚÇ©S§Î™3ç™gž\pÁ“'OÎU7Žã÷Üs`íÚµû÷ïhÕͲìòå˵n½õV‹ÅòÙgŸ}òÉ'9‘€d2ùÈ#!R£©©é­·ÞÒ¶'Mš4wîÜ_|‘ã¸n¸Aw˜™L¦£££²²R/ŠŸvÓ©õRîÞ½ûX—ãÓÉ•áHŸr†††V®\yóÍ7ŸvÚißY£èÊ•+ÑCÎ÷òÁ<óÌ3{÷î­©©ÑB΢E‹W¬Xñè£^qÅ+V¬¸ñÆ/¼ðÂN8áÚk¯… èŠ+®ìÝ»wÑ¢E>ŸïÚk¯õù|+W®¼çž{¦M›f·Û׬Y³lÙ²'Ÿ|²µµuÑ¢E/½ôÒäÉ“/¿üòý÷ßïp8r!çŠ+®Ø±cGAAÁ‰'ž¨-§øì³ÏnܸñÞ{ïmiiY¹råc=VYYév»Ÿzê©GydÍš57n¼öÚk_{íµ«®ºª´´ôꫯ¾á††™>}ú]wÝõÀ„Ãá[n¹eÕªU/¾øbÿý÷ß¿|ùò«¯¾ú¶Ûn[¼xñå—_^YYù§?ý AöööíÛ·ïÚµËf³r¯¾úêY³fwÞyàÛWÏ®[·.Në!ç_ÓéܱcLJ~H’¤ªª¢(J’„ ˆªª(Šº8´¢(0 C¤µ³ÚWZ“¡­? ð,ËA4cI’rm A0 kûsæ–E HKSQmÙ\m§$IAh ²,k鈢¨‰Ôò‚ H–e³Ù,Š¢ ²,#¢IÒ¾6mÚž={$I’$ †aíÔ4µ†i;5KQ ‚ÐÒÏÅ‚´µ½Y–=õÔSO9å”ÊÊÊCGÅjkku_:&†‡‡€Ëå:âñG:ÖF5kÖ,ÀóÏ?___ÿþûïç’;ï¼ó(ŠŠÇã‹-ºì²ËþÉÕàÿ=»)þû¿ÿûÙgŸµZ­’$­[·†áË.»ŒeÙL&sñÅßxãŸ}öÙ-·Üâr¹ü~ÿÖ­[Ï8ãŒ_ýêWgŸ}v.‘Gy‚ žçI’J&“½½½£G>óÌ3›šš4/O$+V¬øío»bÅŠh4zÙe—]vÙe³gÏ&¢¬¬¬²²ò7¿ù ACCC™LF«¿÷ß?‘HŒ;6÷ÓÝyóæÝ}÷ݳgÏhëz½õÖ[}ôц ÚÚÚn»í¶?ýéO3gΤiº¨¨èšk®Y°`‚ Û¶mK¥R‚ ìß¿ÿÄOœ5kAMMMãÆã8ÎétJ’”Ífyžß·o_EEŬY³Ö¯_/ËòŽ;úûûkjj&Ož‹Åúûûo¿ýöþþ~maï#¸üòËÛÛÛ3™Ìüùó/ºè¢³Ï>»ªªª¹¹Y–å+V,X°à’K.E1•J]rÉ%×_}nùÞÞÞ³Î:kþüùýýý[·n}÷Ýwo¼ñF€Ïç«­­]»v­~a„îîþZk|s×î^k—!RUU’$ÇEQ… EQ5Ól´Ö\’$í’×vʲ¬-ˆîõz÷îÝ«…­¡Ï5ú‚ˆ¢¨å®íQUU‹[‚hÉjò`Ö†$IZW Â@„¢¨,ËZðÐb˜¶sÇŽZâ(ŠŠ¢¨å+˲–…&RKáÐÔ!Ñp IDAT@ˆ¢(Çq¹³€aXUU·Û=~üxAý£Î±Âq\,;zÿ¼c­¡¡aíÚµŸ}ö™(Š™L&wGsÇw„B¡­[·^vÙe·ÜrËÿ—ï,èïï_ºtéÔ©Sßzë­I“&mܸñÓO?-**Ú²eËÍ7ß¼|ùòæææK/½ôŒ3ÎØºukQQÑe—]†a˜ÑhÔÜ]ƒ¦él6»téÒh4º~ýzmçW_}µnݺݻwk!çóÏ?Ÿ1c†¶ãø¹çžË²ì£>:{öìíÛ·ã8n4׬YóÄO<ùä“3fÌÈf³}}}555Úm ±±±¼¼üÐß[%“É;wŽ7®°°Ðl6Ï™3'üõ¯=÷ÜswïÞMMÓO<ñÄÿcï»ã¢:—÷ßíXº"u%4A±Š‰ÆäZ%6ÔX°w ÖÄD£Iì"ÑØQù¢¹+Ø7‰¢"*VP”ÞaY¶×ß“{~hÊM”{æ>»§Ÿ—³ïsfæ™g~úé§ýû÷ûøøDFFæåå;v èó]»víСÃÞ½{=æëë ïÇŽ;uêƒÁprr HKK;u꜑Ïç …Â—ŽäÎ; !3fÌèÔ© æìÙ³;vìèéé¹dÉ’õë×gdd,]º4..îÑ£GÔgéã?‹Å·oßV(;v”H$ëÖ­³°°x)¶ÑöÁ ƒÁ —Ë©à¡×ëaÊf±X0Ës¹\ÀØ ¦lp;8|@€A7|ƒÁ à_&“éíímii©Ñhà§HO/ì ¾“Éäñxè¾ rp¹\ôœt:\œ`I«Õnƒ§,€ññña±X€a°.n\7ôÃhk:ûפ¡¡¡ªª ¼àF¦R©V¬XqûöíV‘X»vmjjêâÅ‹;uê4iÒ$ðH>ÿüóGýŃèõúÅ‹WTTÄÇÇ·k×.??Fµ¸¸xõêÕ6l¨««khh˜?þæÍ› !VVV»wï†};tè°}ûö^½z>¾sçÎ رc!$;;ûܹsóæÍƒ ¬¤¤äÀ6l€(ÓÖÖ6))©K—.ñññIIIÛ·oïÙ³'!dÇŽ?þøcUUü&/\¸póæÍ[·n•”” :tÔ¨QàöUUU>|833󫯾ںuëÍ›7_ú"ó_Ù!CÚ·o?wîܨ¨¨˜˜FDFFöìÙ399¾îß¿ôèÑŸ|ò ýëý‹3)Lî!ð_†é˜Ñâñx#TÏPQF£°½ &“ùäÉ“§OŸR÷_‡ÅbÁÌÎf³á\p=€1àÀB¸¸6jÈŽICÌÔ1 0MA·Ç¸ÜàÁƒwïÞ­Ñh¨i0Øl6Þ†ég¦Å çí·ß9r$!dûöíVq8œAƒ 4ˆâèèØú†ÆÚÚzæÌ™ÿú׿ÆwîÜ9½^oeeµvíÚÿû¿ÿãñx—/_þ+™={öãÇ“’’Äb1.ìß¿ÿþýW¯^}ãÆ‚‚‚ÂÂÂãÇ—””@>†ËåŽ3fìØ±°ñÿýßÿ­ZµjïÞ½ýúõƒ%‡úõ×_·nÝúàÁF£Õjþùg•JEÙµkW£TJ~~þìÙ³gÏž a7BH\\ܦM›Îœ9KœœœfΜI9xðàïÝ‹››ÛÌ™3¯_¿þÃ?|õÕW¡¡¡¡¡¡åååß|óÍ?爈ˆˆˆkkëÙ³gŸ={öûï¿÷ööþ½Oœ8qùòe ðÒöß{8›Í† æk|ý‚ÍfcªBUjµ&wpƒ0ž“;Nú36&“éþýû,A'ƒš1ÂÍáJL&“P(„ô à5¸5pÑ µZ-|f³Ù}ûö½qã†B¡0™LÉÉÉàfÁØl6\$ŒàN§ãr¹4ä4©ýÍæÎÎÎ<ÏÖÖ6%%eîܹõõõ­ohŠ‹‹CCC:ôí·ßr¹\…B¡T*õz½­­­³³³­­mAA‡‡‡T*}ôè‘Z­¦‚ ZNNüz=z”››+ Û´iSZZš——' wíÚuúôéäää1cÆB¾ù曢¢¢ÌÌLp¤\\\ŠŠŠêêêÁ£G=zjßÉÉÉÉÉÉíÚµûå—_®_¿žœœ¼mÛ6BȤI“üüüÞ{q#G7A¯×?{ö,;;ûÑ£G|>¿mÛ¶ùùùJ¥’ÃáÀ1åry÷îÝçÌ™óèÑ#½^ïîînkk+‰ž={VXXhgg'‰Äb±B¡€=<<ÒÓÓƒ‚‚öïßÿäÉKKK‡ïýÔ©SÎÎÎW¯^}éðzxxhµÚDFFzzzvêÔé“O>Q*•ƒáîÝ»Îη‹Å*•j×®]ÀñËÈȘ2eÊ”)S Caa!ýëý«ï•l¶N§ÃÔ=€‹Å‚½ôt:ø:Z­¶‡ ¦=0'¯Õj~`ÒÇxdh …£Óé`-l†Á1µZ_áj©ÇüHÀ3¤ò!¯¼(p˜páÕ«WU*ÜByy9ðT*•Z­†Ð"Þ:aô3ÓtÆrvvž>>=====ÝÉÉ 9奥¥ÞÞÞ½zõ‚Ï|>¶ÉÌÌœ8qb‡~ýõ×;wî 2dîܹ,‹Ãáp8¹\Îáp¢¢¢Þ}÷Ýk×®¥§§wêÔiýúõR©”Çãݽ{âëëÛ®];Ø¥²²ÒÝݽÿþðÕd2ÕÔÔôíÛ×ÓÓ3??¿{÷îÀm³·· ¹råJzzú»ï¾ ‰%++«t³uïÞ}È!W¯^MOO÷ôôŒ ‰D—.]***š1cÆûï¿?xðàŒŒŒôôtKKËï¾ûÎÛÛÛÃÃC"‘äääDEE!#¼²²2""X¹ …B¡P¼ýöÛÖÖÖÕÕÕžžžEEE¡¡¡ÁÁÁƒÎÉÉquuݲe‹F£9þ¼L&[¾|y—.]4MuuuïÞ½çÌ™sëÖ-___.—ûðáÃÙ³gK¥ÒºººôôôŠŠŠ=zÐ?àF/INNNT"J¥’J¥¹¹¹ÙÙÙZ­–ÍfCúÂe€ ÀÖÖV©T¾à+OŒ˜³ñ]ÔHĵQˆ™Û†Ÿ!xˆ…±>ô3ç†9˜úa!8pØ2Œ¡Áe ^¢g€D¼Z‘HàÄf³¹\.ŸÏ×jµÄÌ)`0þþþÔ‘ÌÍÍíÔ©ý€ýW&•Jkjj<<< ó§ÕjŸ>}zöìYFhhhZZšR©PãQHÃ÷*L„ 6sÒ…P'àÖ Ù’ˆÀ7Ã2LHË“ ðI¨5€Y"@D5À‡ƒñ7tÂp-:Ip°1z`€:p›D¤R!ˆ¹ÄÇ`0(•JúY¢!§¹-++ËÒÒ²õI*ÐÖºíÎ;ÁÁÁh¾ú‘#•ÁÁF“Ic2ƒ˜ÿ2̯üLêk Ütù­BÅLef2F“‰A•»e0˜ ø &Óh0ˆÚ™Ï®&„AˆÜ Ì©˜‘ç·Í †™*Í`0ôpc2 &`˜L–9Éd4™XLæo/‚”Aqƒ˜LF“ îÑh4‚e2#™šàA|5b2™,–ÖÝФ5rš?¤Ó¶m[zh{ãìŲVz:çìY({$X c21˜Lˆ†AœJ¯×3(Ix$’5¢€‹Àf³“Å—Â`0° pÀ·pvvV(2™ CpÂâq¹˜ÅÁKÂЖÑhP¨ÛÄdb±ÙŠ&Bt:¥••R©ÄâVç¿ UmÀ_a0€‚TÆÜFñÖ¨LÎÛo“úA¢!§YÍÎÎî¥1 Úh{m ˆõ/.g®]ãr¹VVV:êQ°.‡o&°Ì”0`Qƒ0 &á 5q¢Ó1X,“ ò3 CÀá@à\,£±.;Ûd2U*¡P 4+Í:i‹Ãá( ±XÌf³  ƒÉh„ V¬Qe mÝÜŠ‹‹M&ÃhdÎË¢îüÇ 2ê@Ä“A8[,³Ü†ML&‡Å‚ð ÓÓ“†rh£¶?±?xC‚×|™L†ü.¨ML V±@Ö¶Ç$ —‘ß n:Cø™Ž nÉçó1-ùår¹€:†ÇãŠÀ‘1m`Cefs8@€š7PŽÆår•J%R ÛX[[Ëd2,Õjµp_…"ò2îèÍ–„œ¤¤$PQëÛ·ï!CÔjõòåËûõë:7„‹/¦¤¤¬\¹ÒÆÆæUSS³víÚAƒ¡pËëo™™™Øº†òÁܽ{÷Ù³g„aÆÆ6Ø–-[! ,€¯qqq£G Y¼x1,är¹  “˜˜øðáCl?CmMmXƒ‰14xÁÇz{Ä ŸDE2 7SÅ:‰™À“8ÊÌ}úÅÆÆ^¾|Y«Õ&$$ o•8nܸߓ¦š\.OHHÈÉÉyƒF'???!!!((hܸqãÆ»téthӦ͌3>|ˆx³qãÆ“'OÂWƒÁ0bĈ„„„¼¼<ƒÁ “ÉÆ7zôè»wïöë×ïóÏ?OJJ¢>ÚšÍû1™LÐ ŠN@°ŠÅbÁ›"Ư  ÊÞ€»C•*€t ¶¢Æ3 è=SYpˆCèéõzål%#ð·ƒÁ Ü©Mb&›!5©ÏF£Q©T«ž“““«««@ €ÜV«U( C(¾÷Þ{TÅR‘Hdii I'¸kp‰€Ÿ†-þÔS¤­i!'===&&櫯¾:tè„ æÌ™3|øpB®¬¬\°`··÷Ó§O“’’úõëWZZºk×®:DFFúûû?{ö¬¼¼ü½÷Þ‹ˆˆèܹslllCCÃôéÓ !»wï¾sçΛ5FÞÞÞ!!!!!!«V­*..†n4øt&&&ÚØØøøøàöýû÷GÔ~ýúuìØqöìÙ Ã××·S§N—/_~ƒü<ÚZA®^¡P<}ú´ªªÊh4VVVÂr©TJÌJ6V‡ÆÂÂ\ ¦ax6Z­2%J¥4Ùà¤ÂÑh4°xN&“‰¹‘Ù°¹ÅeB4qÞ.ò°±(;)€BÔÊ8::|ðÁööö®®®®®®ÇÝÝt4ÍÙ³gùàš hü ¿@­VW‚Aa:`Ô>Cú™i/§ÑS‹ŸïÝ»÷ñÇ[XX`ÈH*•.]ºtüøñ‰Äd2­X±"!!áÆ?þøãÁƒõz}ii)4M™:ujçÎ߬1JMM=pàÀ•+Wàë¶mÛ’““¿ûî;ÿÚÚÚªª*ª6]ZZ´:thhhèÁƒcbb^T㦶fór€ %ð$¨9z½ËV`:FwƒrH,sš£mÄÜEªE­P( &¦xÈÁ0 >ŸÏKåÉÈõ^zf-“QÅT@4ßíM¯×ÏM( …BooïöíÛGDDÀyËÊÊ®_¿Ž©&€F­V‹ØpÙ¨{ÝHÛ”ÚÆ]:Œ(ÒÖöwèýúõ ~qùÙ³gËËËe2ua`` ä9 ÞTXf2±‹F\\\bbâÎ;AµsÓ¦Mƒ B}É´´´ôôô… ‚;HATž>}úæÍ›-ZD?s´5?ä`Q$  ¡ò&ö¿Az4à € 07É|”PC&r”Á&ÌéT¨™L&o+O'Ñ™˜8ån9—°þ]p…ØÃáðù|{{{__ß®]»¶k×î£>²µµ…PJ~~~}}=är°dw¨ÈJ¦ÄÌ»£B)Þ8ìKWãµäP ¦¨ïÿ©ûÿ-$$dÒ¤I'N‰Dÿþ÷¿qcê¾øŠñÑ»ï¾ ¿aÆsçÎÀª¤¤¤k×®Brss !ÐræÔ©SPÀ¼nݺ]»v~ûí·ô£F[ ¾3$P›4ãë?!ÄÖÖ–ÒÐРR© %38„¶°›'êo6ò{¨«°öå?\gsfžÉd‚Édâ|ÃÑõÕ 6 Ai0 ¶¶t2U*•ÐóÞh4úûû—••Ý»w¯¨¨H­VWTT ÊxZp%:ÎÒÒºÀ=*•Jè…£ÑhPŸu~ãRÓýrZrºuë¶wïÞØØX'•J·oßþÃ?xzzBŽ=*‹ ¶Òb³Ù^^^±;vlTT”———µµuvvö½{÷öìÙsàÀOOÏ’’’™3gnÚ´ÉÂÂâ¬ÒÒR…BÑÐÐ,>??¿çϟêÈÈHBˆD"¯·nÝêß¿ÿ’%K.]ºt÷îÝÛ·o×ÔÔtèÐ~àhk)/Pú P àDMM òÖ°Äó(Wƒk±è¢aNÄœÝÄ.Ÿ¨- ¹¢ßºº•²õ=©þ-sxƒ.8^(g0JKK™LfuuuXXتU« ãÂçó¡µNÃ`0 I.öï¾@/\ÌWnG­VƒE3ZÌË6l˜F£IKK#„lذ!22R­VOž<922²¶¶öÃ?\½z5´O¶±±9tèо}ûŽ92zôè•+WÂ755‚Q¡¡¡„ýû÷'&&~òÉ'o ÞxzzNž<¹]»vðµ{÷î:î‡~€¯sçÎÅùàƒ¨;¶iÓfòäÉÞÞÞ#FŒXºté‘#G<<<0—éääD?|´5›—ƒP2“7ØÎœ!üð"%%Ô°2F­VcciLíJOh(h÷S¹Ú ¸!ÀzLª84Jètºêêj;;»úúúÌÌÌúúz Ÿ•——£ )ú^ÀÀ¦²æ¥}5Œ¸zCÈdè¦Å ‡2zôèÑ£GãW>Ÿ¿qãÆ—nÙ¡C‡F«&OžÜh›N:½YŽ€¨†_‡:tèЗn9oÞ<êWwwwG,::š~òhkN/æeŒt¡Š¾õã >2 ¨ l_  G#f®b :(8‰cÈ«QPŽ]Æfe‚ó^’åðš©×¯R©ª««>|ˆ<¹\ލ†@p…»‚HÜ@v„#æúj³º´9^€þÉηnÝJHHøúë¯i92Úh{m |ôT0À…"Í0çÅ<p_¨ áPH‰ð{|Peª©þ|Àž¡ ¨¯\‘1™&£ÑøÉ'*oof}På ¼%85vî!„”••åçç—––VUUÕÕÕ©Õj$ ´nÁ.àñÀuâ½#Su ¨E¯¥Ä¶&ôrþØBCC߬ÒÎÿʪ««é.è´½A¦R©^þ#7+ âö7ÃVfØß0€B¡ÚKý©Ýз@’7­„Óét<ÏÙÙÄ`ý½{gg—«×éàaPÝìCŠñ=X uEÔ6XË ×Æd2y<žR©¤¶ÒáñxèBQ›Â³â¥J¥¢õ¯/ä´n+++£»´½Afkk+ _ÔkÁêN˜£µZ-ÇÃ, ª^b  X,–P(åf ‹a ¸È¢N X¡¿‚N!dî\~|¼&r6ÇèÿŸ3b“i€ €ÆårQSa ©Û„ÒD!Å@¡ ‰Zާ€å˜ÚÁk†Q¢Ÿ%ršÛnݺõ&rêþ+³²²z³Rk´ýƒij˜’Á ¸)H£º Ô†ÐèÍUü켉$[Ssþ„Òæ½ƒÁ@Ãd2<ȱE®ëª7™8 ñ caá8x0 …‚Z­9%#æ"V, ‚kkôú€[Ý2ú¢!§ÌÇǧu“ÊàùâôD[ë3Ìÿ#*@(ÌDÑð‡ùåa˜L¦““SII‰J¥âóùJ¥0 ÍĬŸZ™`T±Øk\ Òµ«éûï³nÞâ~¼EΤÀ†@ ­O “™(*5™  GÆ3â RûŠbODPj[üŒ9½ÆÌm4ä4«‰D¢ÖM_IMM=ztCCý¿nõa4ˆqi4˜Ö¹\.¦7@åÅ:]***€&0qâÄ]»v…ºz¡—€3XŽC5@èÞ½{·o«Ùlî µÞŸ=„ü›Çƒ©Ô9Q5‘E  Y€Ãá¤ÁŽp!Zа¡[þ © Ñ A¯Q)|´5…Ñ^$m´µrò|˜aY,TnÂ| Ÿ±º£[€õõõ»víBêú.0GCæÃÒÒk01È3;Rà0öuõ*§¬ŒF½° 6¦JLA5 ¾ñù|t³¡Õj:Áãñ˜L&4ÈAZ6ËÁ. (cŠ QvqZrôzý´iÓP´&77wÚ´iÔm Å´iÓŽ?Nâ_7I•J5ÍlÕÕÕàvÀ×øøxØX*•N›6íôéÓô¸ÑöÏck:ifÄ\•‚E ˜`§6Å¡òÐWÀ(j ÔÖÖb–΂®Æ ¾|ü8«°¡ÿ@Ÿ™È[’Ä}­%)k—.Rq”:ÿ‡ÉÀ¦ziÇCìăS£ˆÚÁpf¡è\NË@ŽÁ`8yòdFFücŠŠŠ~úé§ÒÒR•J¥P( tª8zôhNNŽF£I1N§P(à ›ÁrÚÀêêꢣ£=ZXXSVVöÉ'ŸÔÔÔDEEݸqcΜ9]ºt™4iÒºuëvïÞ½bÅŠAƒ=zôÁƒôÐÑö~äfgœ©1’n z'T¥Kj7ObÖù§VÌù ¾‚Ó‹ÝϘL¦åPKÎmë6‹·‡Íx°þTA3P>…¥‘¹€n˜õa±X<O­V£„Äæ=@ÈÆh]á¨ê¢´5+äðx¼ãÇïÛ·/99Y©TFEEM:ÕÏϯ[·n#GŽ ß´iHBbbb@XzË–-®®®EEEqqq={ö9rd×®]=zD2ذaönÝ Ÿ“’’Nž<)4R©¬©©qvvöôôT(ÐA•uh£íŸV;ÚÚÚÚØØÀ‹ tÀRtƒ¨@Ê V±Ùlh@Ì"ž0•ƒòß…Œ€[BrJ‚ŒùF^GL„YÈÄÆ„¢^â 2èàHƒ¦öœ(‚KÂèÂÍn€ä(ÄA0M[óAÎKíîÝ»#FŒ8}úô„ ¾ùæ›ŠŠŠ—nV[[ûå—_FGGŸ>}Z§Ó­]»–eBÈ… ú÷ïO]R\\¼hÑ"KKË}ûöÑãC[ÓY@@€H$"„…B H¶£ëƒnpÚ…Uè ±X,±Xܨ§"„¼°‘ª·Qce`NNNÈxf±X˜Ì@³–(Nô(?ƒLä# Ó“1Äœ¦ÂÒQìç†I)H\Qå®Ñ·P¼ K›¶æ†//¯Q£FÁgŸ#FŒ1B¥RÅÄÄü•·ï'NÄÄÄ4êó?k/^|ôèÑœ9sp‰J¥š9s&“ÉܰaHÇÓF[™¿¿?@NqqqEEv‹Á¼=jt‚;B.¿¤¡¡}„ð30Z…“5ÀÔ„"›€üÿ=ßL&S7BÂÍgGfÕ5ψ TÝ6j¦ÊQ_l=|n,%æŠQ¬'[ŠD"@#ô~èg¦ ÇÞÞ¾k×®_~ùeDD„‡‡GPPЊ+Ž9²lÙ²—öQÆþ}`½{÷^¶lÙ¹sçV¯‰Aóã IDAT^Mraaá¡C‡† 2þ|BÈš5k"""Ôjõ·ß~ëêêJmMj©©©åååTÍ1 ¦Ax¦i¤–ax &eFS\\ l0Yãüó>"ºM¨Ï~LúÐ"0ÌËK÷Ùgj€\&“) !j‡}!¾¾¾_|ñ=¸/šX,†‘ l´*"""""‚ºÄÊÊŠFÚþ¹ÛÙÙÕÖÖ" §BÌÄÌ ÀTŽ™ìªÑh0EÌb.åA`C¹OÄì_@ÌÙBÈûïë÷íc³Xäãu7o²°Á(º5(w xXçâñxÀ¢FÀC&70P2Çh4Μ9sûöípÙpD/¬9G ; 2)mÍX£6ÚZ=xð@*•6ò`0,†Ùx>Ÿá Ô~n×®½½=úÐŽ³s dÖ°W U¥ [$@Èt$ee±>9âE(Jk0XÂÉf³9fV7Vü oÄ`0q/8¬=zô(•"A­æ';/€ÿ„Þm-ãåü/[YYY+~øP°¶Vo &FíˆÓ¨™&Lô ÇIõ„*++Qøâ]à^€'xèÄ`0 æqlbŽU#§¬ŒÉf³Û¶uÊÉ©3œú`Ü¥ ¸2ðÛ„²X¬û÷ï#VA²¾ÖÖÖ‚‹—ÝÐÐ> ¶H@·X£!§Å¬¾¾¾÷Ëñõõ¥ÿÅÿ#35¸#Ò6-ðœ«T*t}€âecc ®t:pÕ ÆE}kAE5L„@8<ôE0¼*<Ì-aØ›^cÓOÔ@­hdÊQ ÖÔî x%¨ŠI,LÛ Ð'b-ýÌÐÓÜvãÆ hµÛŠíêÕ«ÍÐ/'++«®®®Õ?0...>>>¯çµcn&ÕqÀ$bÖ‡†6r¹£[€:666r¹œ˜‰g Ã"Jðp„ÔýD‡ÉdÒbK7,ÍA,DŸ œ„7l¼† Üu°YTä Œ)µ’”˜ÓT¨‘£×ëáÚð€tWPrZÀ‚‚‚Zw¿h Ù ‘ÃŠŠŠwÞy§u§daŽ~m™N(A6h¾ H(Ü€Ú[6¦Š@‡4”ñù|+++¹\ŽnVû#P»D#+ ›ðù|6›…BF(úi*• ØÒ(ÄIÌ ¤¾Cž1WŒ"ì¡Ô4zWÄLZÃÜZ£–nBôìפFÓ^nB¡Pä[Ÿ;w®ÙÚž …ÂV<’F£ñÒ¥K|>ÿµ}˜!S‚Վ؈ ¨7loƒJ˜“×ëõ*• &tN7|øpòÿw@ ê „ zƒáóù<ÏÝÝÝÑÑÑÒÒÊÎÎÎÅÅÅÚÚª2ýýý'Nœhkk‹Þ Ê0…áµ   jy¼Ö`b ± »\Ô·ÇçóQ’®ŸJ1 '@ÚË¡íõ²üü|¨ü>}º¥¥%= ¯õ{¥¹ˆË°°Qgôf0«S0þ%ÿi&ML&SBB¦FW ƒX,...†HŠÀy---ýüüºwïÞ©Ó-¹\ZQÑ®¤¤¤²²र°pÿþýZ­ËQ‘W Ml‘KÍd2³³³!¾G »Á^p:€,¬ÕjïÞ½›––vüøñ6mÚXYYµúñš;wnFFÆ£G"## !Ož,—˧M›fcc“œœ|ÿþý'Ož`­R©”ËågÚ´iŒ‰‰0`ÀŒ36nܘ––VRRž„^ÀÔ©SÓÓÓSSSwïÞ=uêÔ={öDGGÇÄÄL˜0¡{÷îL&sÙ²eo¿ý¶^¯?|øðŽ; Å+NWYYÙ§OŸîÝ»¿*²õ“'O¦L™R\\ ë!+W®LHH¸}ûöáÇ?þøãóçÏ‹Å⺺:‘HÄçóu:]bbâ¦M› Ã7fÍšõÅ_tïÞ=22’ÏçÏ›7¯ººJ:d^^Þ¥K—-ZMmŽR\\¼`Á‚Q£F1FÒÆÆfûöíééé)))S¦L9yòdPPЛøÐÂ4 ƒF a«u ‚AžÐÞýu:ÝܹƱc5Z-ƒÆÁƒ¼C‡x}Á&Ðè|TW—ÛÛU*¶Fö¶¶ŽŽŽaaa=zôpvv‰DmÚ´1î´öööï¼óŽ­­í;wÄbqUUÕÍ›7¥R)¡R©DQ8 ž aäMr¤…3àÖø|~Ã÷ #,˜L¦|‡œ»”Ë•qa_¼} Ða›|°i¼irŸûWÛØØ8;;ÃÏn||üÁƒBBB®^½ºeË–˜˜˜ŠŠŠòòò×r~ýõ×sçÎ=yò$33ó—_~ù{Ù¶mµ×€——Wzzú´iÓ ‹‹ !äƒ>1bt¨stttpp€ÏÀ~9`{öìñõõ•Éd×®][¹reee¥Édòððؾ}ûåË—çÏŸŸ““£R©¨y‚ššƒáììüÅ_¤¥¥ÙÙÙ¹¹¹•——çääp¹\777kkkggg¹\¾nݺ•+W6'ÍÞÞ>::zÞ¼y666¯ä˜^^^‰ÞoÀ\]]ù|~NNNYY|¾s环¯ï‰'!7oÞÌÏÏ…Y­V+“Élmmœœ4 è—GFFN:õÅ‘>|x§N‚‚‚rrr¨XîêêzãÆùóç—””ÀHÖ××kµÚvíÚÙØØÀç77°†ª»TÅ,m°ç@ …B¬¤db±X––ÆÕ«y}úXôík±oš4Bè œ ççGú÷×FGk%’†wÞ11™L ‹6mÚ„………„„ˆÅbWWWha€¬ÚÚZN,‹ýüü¬­­13D­ÓÄ é@Œ±FÃ{M åñü_ ˆa1èÚërÃðÛ¾T±pŒÐ{ƒƒBx< -æå€9sæùóçnnn ú¥T*׬Y3oÞ¼îÝ»BÚ·oAŒ´´´”””­[·†‡‡¿ž÷ùÓO?-_¾<""¢}ûö999AAA ÍóJìܹsóçÏ_µjÕ„ !'N„ªº?ݱ[·nK–,±¶¶†¨ÎüùóÇŒ³téÒ´´´%K–<þüâÅ‹•••[¶lyë­·p¯úúúuëÖBF%‰ÄbqIIIff&‡ÃA=ÐC‡vîܹ)S©TÞ¹sÇËËëÓO?ŠŠjÈzUæîîÎçó333‹ŠŠ<<<ø|¾‹‹Ë’%K:vì¨Óé®^½Ú¯_¿Ã‡B<<<úöí{âĉ¬¬,Ü}ÆŒŽŽŽÎÎÎFröìÙJ¥233óèÑ£ãÇmo´Ë—//X°`áÂ…3gμxñâéÓ§7nÜøðáÃVÎÁÜ>„¼^Œå/jt0óÁ`0L&2b„1(Hm4¯_ç]»Æ™&î™3å\®!"BÓ½»žòàËÛ[éï¯c³Õgç;..ööPx`2™,-™w™YÇ4ª*ö#ƒamoÝÖPSS£ÓéÊÊëjë C¥iJ¯RCgƒ~‘ž¡b8B!ÿ&‚nÆ_É×ÌÒBxßñLRUã‡P8Øm¼½F,mÚZrÜÝÝ;uê„/ƒB¡páÂ…IIIìÞ½{ûöí—.]J©ªªŠ¿råÊk 9?þøãêÕ«ûöí»ÿþÈÈÈñãÇ¿ª#_¾|966vΜ9€79„½{÷þé¾Ý»wðÎÎΞ7oÞàÁƒ-ZDéÕ«W¯^½!©©©cÆŒÉÏϧB—ËíÔ©Ó‘#G¦L™²yóæ“'O®Y³fÖ¬Yñññ§OŸ4h!äÀÇo"ÈQ(·oß>zôè€fÏžý·!§¨¨hñâÅð9))©‘h|jjjUUÕÒ¥K÷îÝ»|ùrxÞ–,Y2|øð°°0„œÍ›7?~üR\`3g΄F9 Bεk×-Z4a„iÓ¦BÞyç½{÷ÖÕÕQû&ö¤!æZ %Al ‚NàUTWWC‡iH{ cÄd2óóM99œ  ÀwÞ ¾sç'¹\ßÚÚÚÊê-ÀŸÇsf³m &!¦ªªêªª*ËãÞ’Ö;iµµµ¾"ßRY©ßïîã»Ü{\‹ •REt„˜16“ý[n†Éà1x:½ŽáÎ „!wƒÁà(9Ä\©ÓéX–ÉÁĬeÑo„ïF¶¢ŠßÀíc°‘¶–œÀÀÀþgk6{Μ9,kâĉGŽQ(“'Oާ&·_[ëÑ£‡££#ƒÁpuu}UôÇ'Nœ¸páÂ)S¦àBÌFü©Éåò††.— ±¸Å‹Ã…íØ±cÛ¶m@=3 •••º¼qãÆÉ“'_ªPSSÃf³_UÈë¬sçÎÿd$Ûµk‡‘ƿҤD«ÕÖÔÔØØØ“É9räâÅ‹­­­¯_¿^SSãèèèííý:ßêµk×"##M&Sqqq}}ý“'Oºtéò©×ëe2YaaáÅ‹ !nnn;v6lÇ‹uuu½zõªR©‹Åæidûöíûâ‹/$I]]]yy9ô2ptttrr2™L/^ÌÏÏ÷öövtt,++ üì³ÏºvíúøñãÔÔÔüüü°°0‘HüðáÃÔÔT@ùíèèh&m^UU•——'“ɨ}ùþë‡ÍnÛ¶íï­íر£••Ujjêýû÷ƒ‚‚¬¬¬233¸sçÎS§NÁ6111.\˜>}ú‡~øî»ïvìØÑÁÁ´|Þ~ûí:Œ5ªÑHz{{ÃVWWƒ´iÓ¦¸¸8‰DR___\\|éÒ%Bˆ³³óÝ»w¿øâ‹­[·fgg4„7iTJ€ŠH6› ä ï 'q¤k™L¾RYûì·®Ž½iÓ&,#%„p8¥’¡Õ²ëëÙï¿ï(ll¬x<žJ¥ªªªÒh4íÛ·¯®®ÎÉÉa2™mÛ¶­««ãóùnnn<¯¸¸8+++;;ûÖ­[ 4Ñ?Ä$ N‡q‹¡7êYL‹ó›6†ËŒF£â[…E ƒ¡<¦d§±íôvR©ïw…v 2GÖšÔXÎÎΓ'OÖét¹¹¹TÝ-ƒaccîèèˆn‡ }K·nÝx<žÍÈ‘#KKKe2ÙG}õ:ÿê>ýôS£ÑqôèÑXXXtèÐᥗ••ÙÛÛÿÞû;ƒÁ°²² o×®ƒÁ‰D–––••••••o½õ“É ùðÃÛ·o_TTd4'L˜©#ƒakkÛ«W/U&“éîîÞ«W/kkë6mÚÀA˜LæðáÃ]]] ØlöÔ©S»ví QÍðððQ£F †ÒÒÒ¶mÛ.]º´}ûöݺuƒß}÷Ý©S§Âa;uêò’››ø÷Râ kÿþ÷¿‡÷ïÙÓ§O}}}ÿ¢ˆƒÁðññvéÒÅÖÖöÙ³gVVVóæÍóööþ½grðàÁAAAeeeR©tøðá#FŒ€Uaaa/Žd¿~ýêêê*++}||>ûì3˜b<==á¿`ccƒÉãñ>úè#GGÇgÏž …ÂÙ³güÁ=vèÐá5TäS©TR©ôñãÇwïÞ¥vÐëõB¡¦ZöÇ~(ùL­ea2YíÚô..¬êjFiéoý¡©s7„°€mmmmkkÛ¦Mø£Z¢A¤¡¸¸X.—×ÖÖÖÕÕ]ºtéܹs¹¹¹UUU€ TÉÔ§i$† .ª½W›Â02Ø9l6›mÔ÷:¥=$ ©³”>HàöÁoÇÏÏÏÉÉ %3rss›Aª•™T*­©©ñðð,×jµOŸ>={ö,#444--M©Tž:uŠÊj}våÊKKˬ¬,™LöÒ:°Û·oûøøˆD¢VìbŸ>}zôèÑ o÷êêêÌÌLBHïÞ½ÿ8¶vîܹ!C†ügèõ[;wîÃ?¤†õ^«©©yþüù‰'pE„`2™PCƒs x…;q{lX€S<Àp©‘Çd±X...mÛ¶ …ÎÎÎz½ÞÂÂÂÉÉ)((ÈÆÆ&33S©TÚØØ!^&“—––ÖÕÕFPuƒÒQƒÁ€nàœØÛØÃÚë<¸ÔLƒ²Pˆ­BÔj5ê ó÷Õ¦£GŽŠŠ F¦è©S§ ®Ž¶¿nÏŸ?ÏÍ͈ˆÐh4VVV @³úRÀhoDæé57‡7º4òÊP=ÚÛÀTN}ÓÇÆšØw½RH§fggÃýÀ„B!`-›b\.Z«ÕjKKKŸ~ˆÅbl\ %Ð!‚£P( äeeem³‰YëîêLuˆ¹¦ÁéÄŽ8àÛ¡Âøyè˜"ê HmMd´àÍïZQQQ+~øš³ÊD¯×ƒˆ@kõr^ó+ÄÇÉÐÀ6ÆùÔ_° õ1a_“ÉtïÞ½×bǼA’‡ÃHPçÏçóóòò˜L¦——ÇS«Õvvv ¢¢¢´´´¶¶¶´´T*•644@” ¦±ãüŰ Õiƒ§5{€ûBÑ„Òs¼P" fÅRìaÊçóé\ 9-6)·â~9/vÂnÒI¹Ö!¯¿*¾Â£"vퟻŸÁ ó/6{V©TB¡jeÐ7ïA&“±X,(ô}±¸Çh4B…8ð„ dgaaÄѲ²2‘HTXX¯&r¹™èKQ•Ö°6vÁ!Ößð±™›Ñh„0uKpwq©­zèÙ†œf5ooo@ðÚ¶?yU¦T*›á,]ºta0þþþ­þå5­a«M“Éx€ªÌT-K˜ QÛ‹%‰Y{˜Õ3QyØšÅbÉår•JU__Ïd2AÛ¶mKJJ@ì@, …B{{{•Jåéé‰Mq¤R)¦pàt:õ7á.À?¿>c1 È ßF½G0@)6„Ls#fj=ÒÓÜ–ŸŸ_XXHàj•fkkÛ³gϦ>Kvvök˜Wå&‹ÿ€ÒÖâxÓ7¤1Q¸\.$á¡Z…J¤Æ,=•6Fí±†â1X ó>ìËãñàÈZ­V.—cŒV«-..æóù¶¶¶ËÒét"‘ÈÕÕølßoûú¨T*Ha •€t ¥Aè î{çA£Ñ Ì¶r@alø@ئ†œf2ƒÁÙº[´•––ºººþmÆÚ_7NõW*=ßP3™LmÚ´ym‘ƒf »Œ|0x¯ …ƒàLʘÿ@·|b¬•ÁœzÔ²*lq†½sàwŠìdj´J&“ÕÕÕÕ×׫T*¥R©Ñh`/¥R©V«jjjŠ‹‹kkkËÊÊjkkkkk P¥AI ¨sƒA0¸0 ÈZr €A€†RrÆd2AJ‰˜9ߨÌ«|àt]NKz9ƒDòGŽ™––úÄ"‘¨ªªêÊ•+ݺustt<}ú´¯¯o@@€F£9s挟ŸŸ¿¿JJŠZ­&„ôìÙS$Í™3Òª§OŸ†"""ÂÑѱ¨¨(##ƒbeeÕ¿µZ]__ßlï¡¡¡}:&&f̘1‰‰‰6lHHHèÓ§§§çöíÛ?ûì3ØküøñãÇW«Õ_}õÕ¥K—ìíífÍš5kÖ¬áÇGGGgeeõíÛ—²wïÞmÛ¶¹»»·ÔÄãñüýý333ËËËE"Ñ•+W\]]ííí_íYN:åãã³sçÎ;w.]º422ÒÇÇ'//ïСC………ׯ_g³Ù?ýôSvvöðáÃ{ôèO,!dÁ‚2™,==ý믿ž9sfnn®D"!„¤¥¥Mš4©cÇŽ—/_Õêæ¡ðµHè¦c taf€++«¶mÛ644Ô××+•JXŽmC‰™Í…u@È; IDAT”Tâ2Àx°"i VVV³ÁZ™L¦Õj¡gqq±•••J¥âr¹•Q(r¹\£Ñ€/‚de8)J À@&È !ÇJPÑwÑh4<3È@al,-' kèóÑÖ¬^ÎKM­Vïܹóßÿþ÷'Ÿ|R\\ `þüù+W®üúë¯7lØð¯ý«)Nôõ×_/[¶ >OŸ>ýùóç+W®ÌÉÉ™>}úŸî+•JããㇴeË–ÈÈÈ•+W>yò„ºï—_~öî»ï¶Ôdcc3gΜãÇçääÔÖÖnß¾}ذa¯œ»5iÒ¤o¿ývåÊ•)))ǵóçÏCeû{ï½·oß> ‹C‡õîÝû÷Ôó¨¶yóf@0cÆŒ¨¨¨}ûöA+—Vl€7ºº¼Îs8;;»qãÆ 8&b¬‹„L¦è %Q³6æZÀùÀ¢z½¾¦¦¢jZ­V¥R· *od2™¯¯oQQh¢äççWVVªT*€„·Þz hx|”6@R™Ñhäóù¨²ƒý³©q3øŠ‰"*á IrpGZ r6oÞ>~òäÉ"‘höìÙ7nœ3gNCCÃ… šù¶-,,V¯^ݾ}ûøøø¸¸¸÷ß¿)ÎGmÇrãÆ [[Û899ݸq#((h„ ëÖ­ƒöw/Ú‚ ÂÂÂF_Û¶m;`À{{û7nÀ’O?ýÔÚÚ:66¶eŸ¡nݺ5jÕªU“&MêÑ£ÇG}ÔDÑ¡øùùåää(Š{÷îÕÔÔ4Ê›1cFaaá¶mÛ¨í…^j‰‰‰™™™[¶lù_ø‘óx<tÁ>Z­@¥®®îÁƒUUUm£v7€m0xK€Ž ¡*jA%DG°^G¥RÉårleH–deeI¥R¬UUUUTTÔÖÖJ¥RÔDÉdÔöب㉷€¾ –v¢„x’Ð@B ‡n¢sÈž êmÓÖ3kÖ¬#Gޤ¤¤ìܹ(Œ˜Îáp8aaaJ¥òÞ½{™™™û÷ï¿yóæÑ£GÃÃß?þ"÷C,‡‡‡óx¼û÷ï4(22¢pÍlz½þôéÓ?ÿü³——×òåËËÊÊ^ù)<¨ÓéüüüŠ‹‹!£póæMkkkBÎÊʲ±±Y·nÝ… ~/“••eooA3{{ûððp[[[ì} ͧ©úß-bvvvqqqPè÷ã?º¹¹5䄇‡{zzæææVWWÇÆÆ>"–*•êÉ“'cÇŽ}þüù™3g°5êØóçÏëêêþGÔöT*©` †¡àe_£Ñ¬Y³æöíÛˆ.|>°Éd¾÷Þ{@¡&„'¨ÓÄ Ìï<O§ÓA"iz½^­VkµZµZ­T*¥Riaa¡B¡¨«««¨¨€¿¥¥¥Öƒ“ÖÔÔsV#{ƒaæÌ™ÔžÓ(;î 2¼a3b–€ ‚À0¡(ëÀœ†d<ÚZrx<ž¥¥¥¥¥åKÕ‚»wï>sæÌÅ‹kµZèµuûö휜œÄÄDww÷9sæÔÕÕ5Ú%''çØ±cOŸ>]ºtiLLŒD"A¹Öæ´ï¿ÿ~ݺu6lÈÈÈ ŽŽ~å͆ÝÝÝsss7mÚì ðÿ¨TVVž8qB*•ZXXàÂ3gÎ\½z2 ÄÜÑ’rêÔ©k×®5ÉÊÊÊ·ß~û5 ÚÀÔDÿÍŒŒ áâû©››[\\Üúõëëêê &MštæÌ™ƒb|L£Ñ;vìþýû/­¤¤äÑ£Gè…·n£ !½ó5D؈™†2ÔrH½^ÿË/¿…Bh Œ\2$ðE ðPR…`ü«V«5Z­†œ1¼w¢§á5>Ÿá2p›àýuûöí°åyð%˜êúà…!Yøß˜Ä‚UZB¡I4*4©ýÓDYŸ>}’““«ªªàk}}}llì°aÄBáÇŒ“é„ bccW¬Xqýúõ¾}ûŽ92%%¥´´tÊ”)©©©Í ýâ‹/˜——7{ölBHrrò£GÎ;÷¿ð˜644|öÙg·oßÎÎÎþè£\]]wïÞ «BCC]\\úõë—““³qãF‘HD‰ŽŽvttœ:uêâŋǎ›™™¹bÅŠ›7o~üñÇ–––—.]JIIINN¦‚}kþ‘StƨZýØ”˜¥?¡¼3: ¢†UÈXH•2`0Ði€ÏÔ –ò KÁ1 j¿Àª¥Fm[@Ì´teàF„B¡R©D^@#Í4 Á5reA‰i`hÈî™——.Y²d t‹ŠŠ ƒâü.]ºxzz®X±¶yÿý÷Û´i£Óé äçç' SRRÜÝÝ]\\œœœôzý Aƒüýý­­­×¬Y“——G Äì7xÄÍ`‰‰‰–––ðÙÑÑ.²‰Î…#iooºmƒ áóù›6mAÃÉ“'ƒ Ù l{åÊ•r¹2cÆ hŽ7hÐ èØ6qâÄwß}÷õ™4W­ZÕtŒ¯~ýú>|X©T4ÈËËËÖÖWíÙ³‡ÇãY[[‡……áB'''++«””WWW777ê3)zöì™’’Òè ãØ±cÔö2CÆÌæ0wZ`ÊÊÊJ©TbbÕɈ™CŒL6¬ä§Öè [‘4p8 ¡p¸\®V«ÅI_­Vc=&UäЈš°¡RÎÀWƒSÃÅcG,VAhBœŽÚn‡§%”žØbëLiknȱ²²êÑ£u ö™vqq¶Ê …bݺuÙÙÙ7nÄÍBCC©{áA`¢Dsppppph´M³õ"y<^“^u$G {cûùù5Šp6Ú×ÃÃã¯$-šÍ^­ø¢ý^[Fl~úb«o±FϤ݋ÿq*bµ¾À?a–?ܘÃt Þ PÚ®†nòª-,,d2Vö@)(ÕóÀVF£Q£Ñ ªáÌN•1h›N1§aÀ‚kjð?¨liÔ´FíNtV©ÔÀD vEÔ„‹D„£á5 ¬TUU à:%¨:ƒ¤j˜úáƒF£a™  kh0ã¢R©¨PÑÈѵY5–¸"U@ãl(؃”< 6[¬…†œ¿2úî»ïZëÐܺu«÷Ë¡Öç7µ©Õê›7oÒ?¶–2jËK*NP \¨µ–à^³(ÒØ€‡‰BÝ6HÎG’ùjÊ*ŠBâ¯û߉µàà\Ør ¯ ¡…ÊœF•k @ÉÞÞ¾¦¦+а(ÉuèA< ND“¤__ÈiÝЊ›g4gW1לášß^sæjÛà a+¬ÕǶÍàÊ +€™l-H@¥cì'ô3P²8fØèPSDÄœzþÓ€”˜ÏLj:(ØPBé;!5µZ‘:ø@m$Šê>À, }èÙ†œæ¶Ë—/·z­MódÑ~úé§VÏ=uwwmûå@óiŒ€ALøjggW]]ó;J³( ûÃÔ%¢TyMäUcv‡Íf[XX—ò:à|ÀÁ¡›# “„~j©!§ }8µZ­P(Ž5Äß½àÖiPf¥Ø0ô‡<„ÂÌ&fn]—CCN X¿~ýZw‚ª¨¨H,7C¿BHTTT+V˜L¦ÒÒRggç×¶A–§ðù|µZÍçó15"•Jñ}#WÈF£¶gn¦ÃUª‚yzBJ{ƒ 9¨ Ñ1‚Bˆ‰¡'ÔÈÝÁ ¶©¦^ì )L&a+ ú¡P¡ àôHCN ü,[ëÝ]¿~½‰”L_4`.µbÈIOOûå`lŠÊŘ̹(ƒBY1™LNW[[‹´1lÄ ºN§0§# á fy*Žƒ˜„,Œ€¡"'$‡0ñƒ=~Ôj5r0ˆÁ@8,\ 1•*ƒÀFM,ÑÖtF—ÚÒF[k¯d³M&“P(´´´4™L û‚IuHÀP{²!™j\`är¹R©„fppG Xu0ØíUÑlll¨Ù~ˆÝDQ_*"Â6”Jlƒõ¡ £¯©=¤K¨¨a7læ†,5Zðxè® -9éééÇŽk•·Ý±cDZcÇÂç’’‡&Rx4™LGŽ‘ÌÎ΋ő‘‘^^^çÏŸ—Ëå+V¬èܹsïÞ½ß{ï½ŠŠ Ü û儆†:88\¼xñ—_~yë­·"##Û·oŸ‘‘ýrzõêåàà°cÇŽ–Éòòr,Ì:s挃ƒtx…V\\ =o‚‚‚6oÞŒ>SQQQppð°aꪪ¢¢¢ÂÃûví:þ|™L†ûtìØÚíÝ»·´´ûå899Mž<¹¼¼<''G,C¥së3ð-ÔjuuuµJ¥ÝÌÛÀ :ÔÉÉ EqˆY¬L(‚£P( ÷ Lܺ‰DmÛ¶…Š8 v£©¯¯Çày { »$`/jŒ 9rØOÚÝÝju1É„lèð†2F ã Ò¢TßÁYÝ40´Œ—aÍ”””ŠŠŠÄÄÄÄÄÄššøPPP@)--…¯ˆL‰ä‡~(..NLL,))Q(‰f{­B+,((ÈÎΆYÒÅÅ¥‰r¿'OžÒ½X,èu¼µ–ƒ!55µ¦¦–Ã*Ø ˜Ð@nüo†Á`´mÛ¶k×®àm 5Ò­Aíja)1SÐéBN,'æÎl6»¨¨¨ººš -„h+å;p@ˆªq8Ðý Pè@Š‘7Ä9dCйœ–¬­]»öÛo¿Õëõ Ë—/×ëõçÏŸ_°`AQQÑÂ… Ož<©×ë?ÿüó={öœ?~þüùÏŸ?_°`Áܹs}ºpáÂÌÌÌ üé¾õõõ{öìyÿý÷ýýý×®]¶páÂÇS÷ݸqc—.]@Ì­EÌÚÚzÊ”))))<¨««Û·oèʼڳDGG¯_¿~áÂ…Ç3fL›6màý¦cÇŽÐ;çwÞÙ¶m›@ ؽ{÷;ï¼óW8Ùß}÷ŸÏŸ8qâ!C`ßÖú#ÇþžH†¹çn\‹ê™Ø¢ ‰dÔäU?}úôøñãÐ{ ‹.Q_€˜%pÐ/Ï(C: Õ !|/‘H4aÂooojà ¯§F²Hg°²²Â– ÀÀF‡ªÏF(Œ Zc­å!G¯×gffNœ8ÑÓÓóìÙ³'N •H$Z­vÉ’%qqq'Nd±X.\ÈÊÊ*,,9r$4¬$„œ:uÊÃÃcâĉ...'Ož|}n[(~öÙg »wïîׯ_SœeýúõK–,Á¯)))mÛ¶7nœX,NII ™:uêêÕ«‡úÒݧOŸÞ³gÏñãÇÃW77·qãÆµk×.%%–|òÉ'666Ÿ~úiË&\ä²eËFÝga±XãÆ MKK“ÉdwïÞ­®®nô›8qbMMM\\ÜŸJíÛ·/##cçÎÿ ?rhv‰¥3 €“;2ÀƒÁ”8CõšÌÌLÌÖ`fkõ©Î Ò ˆâxÄœ³ƒt¡ò&rˆ™Úý233KKK!¦»ƒƒ‚q<ԇƛ%f™N¥R‰¤6Ýa0â0¢?:°ÖÂóvûömèH_YY‰ 9ާ§'~½råJdddmm-ÈV¾&¦Óé’’’.\¸<}úôgÏž½òSìÝ»×h4:99ziaaáÝ»w---CBBlmm?~leeµnݺ۷o?~ü¥Gxüø±µµ5ȧBlllBBBD"ÑãÇaI^^‡Ãi6âÙ8:qqqžžžõõõ'Ožl"r9ƒÁ quu-((¨­­7oÞСC 4\.ÏÊÊúðÃëëë/\¸àììü§G+--mhhhñVCÍfjµãW §³ ˆƒ½p°Ñ§Éd‚~Ô¼:ø.P£ƒA38LñàUèõz¡PèëëkeePÄe6›ÍçóaЉD˜@b³Ù666T‡L¯×gdd( ä6JaË ¤'ÀZäÚÁÂõ#îêt:•JLJSS¥Ûh¼y}!§¡¡!666::Z"‘@ L©T^ºt ¿FDDH$’eË– 6ìõ¹íìܹsëÖ­‰dÀ€&L€¼Î+4??¿ŠŠŠƒ¦¦¦ôÖ××S7(++;pà@AA•!sìØ±‹/B` ±Î÷ßß('ëÖ­²²2è¿ÐêíêÕ«‰‰‰ø•Íf‡„„Ÿ>µ%(1KÏaAµfˆ¶¦°¿_—# g̘qáÂ…šššI“&íÛ·¯sçÎ;vÜ´iÈïB-Z´cÇŽùóç_¸paéÒ¥¯ÏmoÞ¼9$$ò7 . ¼xñâ«Õ€ '„¤§§§¤¤DGG;våÊ•óÿ{ß_óýýÿº+wdJŒ„›ªÖVŸ¥ÕЦ­¦E**fQåcï””Ž •æÛ¢ÕÒ*EÍ5+ˆ!b† $7óîõûã4ÏßñŽöC›U½ç¸÷}ßï×û5Î|žsÆŒ9qâÄøñã…¿üòËÆƒ‚‚7nLÂcîܹ=öX×®]¿øâ !ÄàÁƒényyy±±±]ºt9þ<Íä–-[ÒÒÒÆ÷oئ2™lÑ¢EÇOIIyã7jÖ¬ „áþýû©_αcÇæÎK õ Aƒ‚‚‚ÆŽ;iÒ¤!C†¼ýöÛcÆŒ9yòä°aü½½ûí·Ý»wÿý÷ب6¡§` ÿ¨ /frvÏƈ»À6B2¦"33óƒ>8uê”(’ñÎÖ.—+11Ýk\.ü ðz!N3}¬oœ{‹ 7…EylØ@<‰.ðððp7/(7‘Ó´iÓ}ûöÕ¬Y³yóæ´œ³fÍ¢ÀuTTT—.]j×®=uêTÚ" 4xöÙg«T©Ò»wo³Ù|íÚµÏ?ÿœN>•T4hP…*²aÄ‹«U«¶oß>ø¯Jœ0“¾¾¾W4hP£FÔjõ|@=°½½½ëÔ©#„X·n¥8,X°€g³ŸÉaƽúê«§_ÎÂ… K¯§xûöí¿ÿþ{º?Í$¾úꫯT*•··7ÇP„„„xzzîÛ·¯ZµjÕªUÛ°a9|êÔ©£Ñh:vì¸oß>špÐO?ýDâêÑ#j€Êü¼R™$=…Úøùù‘EŽðœo¸ŒB8ÄÄ‘ÏOx02h ÃöíÛ WF‰>Ü04º«¡§ðñ“-Âë®  „á§©ü~N—¡#’uxm¤…º©Dާ§'iýè[…&fUªT!˜‡‡,ƒ'Ÿ|rõêÕ3gÎüôÓO/]ºT½zu•JU–å#œ8ª¸´‰™ÅŠib&‹L¡)>È   Ç"ÿ’pð'ênWœ‘Ì$Ÿm ˆÜ××·øŠWØ iŸ*UªT£FË—/Ã%%Šêl¢è22c(‚oI™L&*9Èy4÷¶Qœ¥Ø€.£h I‹ÀÀÀË—/£?)òi «D$§Qw‡FN& ª ‡$\v*•ŠîìééI<<dÐG5܇ÑhÔh4n©SAkÅ©_¿~¡B,^¼˜ºXºÉMn*_ÊÊÊjÒ¤ ‰(øp7Á«†fÂÃn @= E‹¢p ]L|ßËËK©TæææZ,ô2 x E}ÒÓÓñtº­Õjb,*ˆâ ¹œo°Nð"¢¨|'EŒDQqh’R¼óLÔ¶¡×ä0·ÈùLj!ÄÀ™©9r䈻_N‰Ùl>tèУ:“ŸC)•ÊŸþ6 \†«J°ø9ظ\.F’=u¦Ÿçää Ä|_t=I?¨=Cb†ÐÌ\–ÇS|x؆-Méæ$lxl¼oËÆ¡:  ­OîqÓ?Cä<2ät:[¶lùç!·iÓ¦ÌÞN¥RIZA?bTÁ+ÞüŒÜS$9ˆÉ’e1Åס¡Ÿ“« •è2ÎÊañÐS(¢ßÒ5 É‚P#ª„Šj.—+ àöíÛÀÈÁ”áˆH)zò¡IZæ Ï)¡Ñ hq%U#é•7±v“[ä”)íÛ·ï‘GÐúúú¶k×® ´eË–G^s¬U«V9–zCÙ'äÑBQBPß6¸ËP “$ ‡½‰"äœ`ÒP-NŠ¯Ð•t[«ÕJ^/x±`ñ¯W«Õ£FЉ‰AAªÐC‚3ðÞÞÞ”úCƒDhÇd2¡É½ ! èໃwŽƒÙ´äf€n‘SÖÔ¥K—jÕª=Â^Ý«W¯Ö¯_¿lúåTäÂþ%BéééµjÕª°ýr„¼Ê o…)X·ibô<ñS­VCŒ›„ _º& EÕÐr y£p¯qO…‘È$š3g9ßãQ«Õùùùyê(AEØð/ÇÄBž Š°Ñ„PZ(½5ºk“1ç¶rÜ"§|èÑî—“˜˜X¿~ý²tì<ª3ér¹Ž?=((ˆŠ­òòò&OžÜ©S§—^z©{÷îׯ_¿páBË–-#""Ú¶m»téRƒÁ°téÒ¶mÛFDD´lÙòÂ… ¥=Ú‹/¶iÓ¦k×®ÔàRÿþý›7o^¾3|ðàÁÆGDD4mÚtëÖ­|{,[¶¬M›6Í›7OMM½~ýú‹/¾øâ‹/>ýôÓ&LÈËËÛºukÓ¦M#""7n|ðàÁGXäP¡\HÊ÷ôðð kf õ ß'¡‚R4¢T€‰.rI¡ï ŠælÄÇi$'’’’Ðt‡ì ›Á`‚N°BפC ²'‰L²·È ã(gxÑK›7SàíDÉ"ãsâ¦òq¬M˜0!22RqêÔ©O>ù¤gÏžß}÷]‹-òóó/]º$„hÙ²åSO=õý÷ß·iÓ†<]#„¯U«Ö•+W¶oß.„ðññá5†322ªU«6cÆ ›ÍöÔSOmܸqøðá5t•JEåË„«V­ºqãFhhèîÝ»‰³·hÑ¢]»vf³²_¿~z½>333++ëêÕ«µk×®\¹ò±cǼ½½Ñ®­4DÎ?þ˜œœ\ü«S§N-_¾|ÅŠO?ýtݺuW®\yá›ͶmÛ¶E‹Í™3§sçÎsæÌ™:uê¤I“6l8oÞ<^g¬4èý÷ßoß¾½Édúì³ÏÞyç.£5_ IDATµk×zyy9r¤oß¾>>>'Nœøí·ßh‰9-11ñرcBˆºuëvëÖ­,wðèÑ£›5k¶iÓ¦þ÷¿ÿEѹÜÜÜY³fMš4iêÔ©=öØœ9sžxâ‰ÄÄÄ .üöÛoýúõ{ùå—ÿûßÿ>ýôÓ+V¬èÑ£ÇèÑ£é="‹A­V#î^ À4™Ü0®¤êŸ° xÌ 2!ÌZšDY“t»ÝNF<¡ ÈÖä“„j`܈"4Êêp“‹ê–ònÀLÓ¨DQ±Q”ˆ ÙF?äeCÝ‚¡ÜDèÀ3fÌØ³gÏ®]»7nl0†~çαcÇ.[¶,66öùçŸoÞ¼y||ü‰'ž{î¹üqÛ¶m}ôѨQ£ªT©Ò½{÷™3g 4^lÖ¬Y³fÍ>øàƒcÇŽ=õÔS¨_ùhùòå±±±Ÿ~ú©Ýn?~ü›o¾©×ëÇŽûñÇóÍ7‡=ztBB™3g"""bbbúöí«T*'L˜]§NY³f>¬À{ÐùU*,XPñ•è_~ùåÈ‘#ëÖ­»{÷îøñã{ôèñÁôïßÿ—_~9yòäèѣnjÓ¾}û3f¬[·nÒ¤IcÆŒyöÙg«W¯>~üx§ÓÙ½{w÷Ѫ8d‹Ž¶´ooW(œ›$«E&s9B&SÈåN—KY0<C†­ÈP lL™2¹\ ²B÷)ú‰Ãá°©T$'¬2Ùï\.\.+å–Êå²"КL.w“È!†üÔ>ø=#„BÆRs<ät¹r¹ÃéèÛ&“ý>B—KÆÞ…/"\.ŒÉD‘}æt:ÍÁÁ¢ ³ÖÜ"çŠMHHhÖ¬Yƒ „III¿ýöyükÖ¬yèС%K–dddX,–‹/.X°`ãÆøì³Ï.]º´hÑ¢œœœƒNž<9<<|Ê”)‡–ôúŒŒ|â‰'Þ|óÍãÇÓ#–¾ùæ›9sæ|ñÅ]ºtY¶lYzzz÷îÝ322âââ®_¿¾k×®zõêõîÝ{óæÍ»wˆHII©S§N‹-&Ož,“Éz÷î=cÆŒƒ–’ÈùÑ… ®]»f2™Ìfsjjjzzº"$$dèСiii»v튌Œ¿B!ƒ¥ˆšL&8Ä~gá¬b›ÃéT«Õv›í÷ªhN§³ç&d2•ò¢ÌStfS«Õ.!HnYm6ºÀîpÈe2»ÃAò q‡Ã¡P*eBÒL¡P(U*«Å"„ÀM„L¦öð 窃ڡ2©Cb’F”„\.÷xþyѾ½{۔ș:u*9Ö–-[&„ؾ}{½zõ222ÆO¼é¥Âš4iR¼=Ipp°ÑhÌÏÏÏÍÍý £ÏÏÏOJJ ü÷4>)%ÊÏÏ¿råJÆ §OŸ.„¨S§NjjªÉdÒjµTOžÓ}ÑYï¾ûn¥J•Ú·oìžÏ EŠ»w}22 uþwZQÈúç ìp:eBx¨Õäž²Ùí …B¡TRâ%9ÐÐ&‡î T*I‚)d2%…OœN%Ň„€#Ëáp¸ìv¡R¹„ÐU€þÝærýîds8är¹Ìé¬Q£FNNN~~þïŠd• /™Ì©P¨d²ßNe2 ý^LÚáP/®È½†Ú92!ä …p:å …ÃI»\.Ey‡'ÝŽ5)}÷Ýw8yòä¥K—^{íµÿy}ttô¸qã>ÿüsÎŒÒÒÒvîÜùw26Ç;ï¼sôèÑÿû¿ÿ«Y³æ?hÒwîÜyíÚµ %&Ï;÷é§Ÿ&$$@àf£÷R¯_¿¾ø‡111ÿùϾüòËzõê•ï»?~üÈ‘#/¼ð‚ûxµoßžúðêd¢¨'…IP‘S°Ú¼¼ ì˜A¢¨jo`à T㉒":è›ÀÛ"HlÁ|hºxÌïÒ´ÈØ‚W6ÞûG°šÙ\Â¡È ÁÕèófÍšŸCy»÷Rùˆœ°°°-[¶L™2%$$$""">>^¯×ß÷Jÿ#Flذ!%%åðáÃË—/ÇWæ×_ݵk—Z­n×®]×®]vv»ý³Ï>«_¿þÇLŸÔ©S§mÛ¶Ó§O7™Laaa­[·ž1cÆŒ3† ’””Tî ›AëÖ­ÛµkWbbbÏž=6lØðøã¿úê«ùùùÇ2dȹsçFŽ2räÈM›6]¸pA©TŽ1¢|‡ýøãÓr¿ôÒKüóæÍ›¿ôÒKK–,Y¹råíÛ·ÿNXî/ÐŒ3&OžGEE¹çÄMnrÓC‘»ÆÚÒî+¥=%îÁ©S§N:uzØ_™L¦_ýÕ½£Üä&7¹EÎ}ˆP::tx´û–ÍÛQWàÎ;?ÚÆ}jÜä&·Èù‹D`•G¾í_3t–žyæ™G¸Œ4‘Ãá¨È Ü䦊(rd2Ù#\L×Mnr“›ÜTDŽËåÚ½{·{FÜä&7¹ÉM%H^^^ÈsºÇ±Ö¢E‹r¢ÈyùÂyÏÄ Ev`BqÆíú“™q:Bí‘*àÔUð5­È'TR*¢Üãíí÷ˆOOÏ2nRd·Ûsrr<==½¼¼DùEPòó󩲡——W…jÓTPPàp8Ôjµ··7e‰VLÊÎÎÖjµZ­¶Œ'Ðb±j4Ÿ Øb+''G©Tfff:tè¾ùØåK•+WnÑ¢…N§“T\.wÊÌÌôòòª€“Á` â¤>>>á„æææRËDzgæÅ‰šºzzz"‘V °ÙleÍËË;}útÇŽEY´ïK§N v8†ŠTºüÔ©SUªT©U«–Ýn7TàšêèСU#~Àz¯%E·nݺyóf«V­\.Wœ¢Ã‡·hÑBQ»víV­ZU4ÇÓÓ“ÎÑh¬8­bǯ¿þJ…òL&SEnÖ™’’¢V«ëׯ_AXGbbbãÆ«T©Rö̼8;v¬^½z<¯Ü ê&7¹ÉMn*#r‹7¹ÉMnrSÑ_ÏËÙ¿?¬¶víÚ9r¤nݺ÷­u_6”“““˜˜øä“O^¼xQ£Ñ´nÝúÔ©Sz½¾K—.e3€;w7iÒ¤ÜõèÑ£¹¹¹Õ«WoÚ´iÅÜv&“©J•*ˆpÞ¹s‡‚1î3ù–Ûn·‡††V„Á;vÌl6wèС"ÏØ?beCW®\IKKëØ±£V«½ïwïÞMJJjÙ²eñ¾YejålÚ´ièС'ŠèîÝ»‘‘‘÷m£Rf”’’yðàÁ³gϦ¥¥ !/^räHaaallìÔ©SKv ûöíKHH˜7o^ýúõ÷ìÙó駟Ο?ŸâüBˆ)S¦»>|xhhhttt÷îÝ£££'L˜àãã3kÖ¬>úèäÉ“_|ñE‰OÎþýûÇãÆÜÜ\//¯>}úÌ›7oöìÙO?ý´B¡ ¼«®]»51bDÇŽÏ;7wî\!„N§+A‚L&SJJJHHHÕªUóóó=<<®^½z÷îÝ&Mš¤¤¤Ô®]›æ³d);;{äÈ‘ôwÕªU—,Yòõ×_oÞ¼Y:jÔ(!Ä€¨bBLLŒN§Ûºu«Z­Þ¹sgHHH·nÝ>ýôS!ÄÚµkKiZ.\xòäI!Dddä+¯¼rçÎÑ£GÓW_|ñ…N§[³fÍÖ­[…:txûí·ñÃ+VìܹSÑ¥KIÇ÷ô% oSBB‚¯¯ï·ß~»qãFru`œBÉ cbbŒFcxx8NÉläÈ‘5kÖlРÁúõ뱟%ƒ¤Ï£¢¢._¾œ••UöƒBœqâD^^^fff~~~AAAfffjjª¿¿ÿ‰'J£C‰ŸŸ_\\ܼy󲲲Ξ=»}ûöI“&EFFŽ3fÁ‚+V¬ˆŽŽNNNŽ‹‹«Zµê /¼=wî\‹Å÷å—_nݺ5..îÆ={ö,9ùè£âââÞzë­×^{mÁ‚ÇŽ BÄÅÅ)Š¡C‡þòË/‹/0`À¨Q£æÏŸOZ—â‡~˜1cÆÀ‡ óí·ß–Æð^zé%«Õ§Ñh† ²k×®ñãÇ÷ìÙsüøñï¾ûîçŸN—mݺuÊ”)QQQä‘#GV¬X1|øðS§N•¬kß¾}qqqÓ§O?uêTXX Òh4¾üòËä[o½µ}ûöË—/=ztÿþý÷äêÕ«÷ìÙЭ[·Ò€Éåçç>>óæÍKIIQ(¹¹¹IIIùùùz½ƒ$ótßAÖ­[7&&†Ei ²S§N#GŽ|ûí·ïÞ½KŸ >ÜÃÃcéÒ¥V«µjÕª‘‘‘GmÙ²eË–-õz}\\\tt4o©\âôé§ŸVªTÉ`0X,½^ŸŸŸŸ””„> Ž;6L­VÿÍ_òe=Iñoܸñ´iÓ<==Kiß'''÷ëׯFùùùåâíÖ­ÛO?ý´bÅŠæÍ›SÖ§äääêÕ«O›6­jÕªåÛLpîܹr¹üäÉ“cÇŽ->Î?¢¬¬¬äääAƒI¹>”ššzèС)S¦üeç@éQÏž={öìÕ±cÇ%K–H.HII3fL£FH·Ð¥K—jÔ¨1mÚ´_ë2£š5k6¬ôîß¼ys˜žÉÉÉ/¼ðu¹ý‡ÒçŸ~îܹ±cÇFEE½óÎ;܉ZªD³V ¼äAÒ^^^'N ILL,¥ -Z´˜8qbffæ¹sçè‹Åsß‹O:Un÷®]»V¯^}ÕªUO>ù¤$d%“É&Nœøä“O&&&ÆF 0àã?ž0aBïÞ½W­Z5zôhI{ÊÒ¦Ó§OŸ|¸wïÞÉÉÉ عsçÒ¥K›4ijPݺu'Nœèr¹N:Å??zôè?üð7oþ­ÿêÕ« !¼½½ƒƒƒU*Upp°OBBÂ+¯¼Ò¥K£Ñ8sæÌW1 ŦM›ÆߥKƒÁ°sçNµZ}áÂ…qãÆMžøàƒO>ùÄl6׬YSQ©R¥5j®ìíí½~ýúiÓ¦~üxÏž=ƒ‚‚V¬X1a„iÓ¦ÉåòèèèAƒõíÛ7,,Œ6؆ <==ƒƒƒIÝ£%÷6;/Y ß¹sgdd¤Íf›={v‡~üñÇtéÒ%//oÓ¦MU«V;vìäÉ“k×®½lÙ²¥K—Z,–Úµk¿úꫤ !BCC©œG‰Ó¦M›úôéÓ¥K—üüüuëÖOžûè½×³Ï>[âmmïK………mÚ´ùè£ðÉáÇ.\xßþ cÆŒy´®«W¯^¹rå¿ù@?¾{÷î%~Û€vøúúV®\955uÕªUýúõÛ´iS5Þxã !Dll,…÷ РAƒäädê#0nܸmÛ¶8p`ĈñññáááeVûhÍš5Ôõ k×®T wÑ¢EÏ=÷ÜÕ«W³²²&L˜PÚøöÛo/\¸µ|ùò>}ú4mÚ4--ö·——×Ô©S÷ìÙ³{÷î)S¦ddd¬^½::::00Ù¹sçùóçSqРA~~~~øa÷îÝÏŸ?_XXX62õ½÷Þ£ìË~ýú5nÜøüùóTìoĈûöí«R¥ÊÞ½{§OŸ~ùòåµk×bôÛÙ³g§¤¤¬_¿~èС˗/òÉ'=<<Ž9"„hݺuDDžòÃ?œ8qbèС ¯½öÚ(ôW¯^Í›7¿rå õ Ôh43gÎüõ×_Ïœ9c2™V®\9`À€2˜„ŒŒ jÓ+—ËçÍ›'„øþûïOœ8Ò´iSN·wï^//¯!C†ÐrÓ wìØ!„hРÁ€¾þúëk×®½úê«88ÄÜ£££5j”’’òÕW_•Í»HhíÚµ—/_ž>}ºN§«ZµªB¡ Ó-„ðññ™>þòåË&“)>>þèÑ£eðj~~~áááááá?ýôÓ† 6mÚ4}úô'Ÿ|òyâĉѣGWªT©}ûö111à„¿ýöÛ˜1cªU«Ö¶mÛ™3gþýç% ˜2eJçÎõzýõë×Ï;çp8´ZmJJŠ¿¿ÿ?þ8xðà€€‹ÅráÂúIÕªUoÞ¼9dȲ9Qׯ_×ëõ­[·nܸñõë×sssOŸ>íïï?qâIJìÙ¥Óé>üðÃÔÔTƒÁ’’R£FÐÐP¹\N]OžþynÕvïÞ½{÷î£FJIIq:4«gÏž%p³Á`øöÛo÷íÛW#/((ðññyÿý÷‡ öã?zyy?¾fÍš›7oþ£PÙš5kæÍ› T*¡[äçç_¾|yêÔ©·oßöõõõõõÍÌÌ,^)§^½zTóßl6‡††Ö©S'--Í`0PßÕÐÐP•JuöìÙ5jT®\Y©T6iÒ¤lVÐb±œ:uêÈ‘#Ë—/½}ûö;wÚ´i³zõêû†”žx≭[·¾øâ‹þþþ¹¹¹éééB§ÓÙ¦M››7oÖªUËn·ètºsçÎ †ÔÔÔZµj½ÿþûeÜײG P()))ô‰Óét:{öìIMMýî»ï&Ož\³fM???µZݨQ£ôôôÜÜܶmÛ6lØðÚµkÔ‹¤råÊS§NEwv,÷É“'·mÛÖ®];¾Ü—.] ­V­ÚéÓ§CCCëÖ­{ñâÅ2C'''·iÓ¦~ýúW®\ iÖ¬Ù;w$Á³… 6kÖ¬øþLNNÆžlÔ¨Ñã?~óæÍ¬¬¬?þxéÒ¥jµúôéÓO?ýô¢E‹ÆŒÓ²eËèèè2ð£!¼½½CCCׯ_¯V«7mÚd6›ýýýgÍšÕ±cÇŸ~ú©C‡§OŸöõõ ýþûï×®]Û¬Y³­[·¾ð þþþ999ˆcéõú7nx{{WªTI¯×gdd”¿c“‡‡ψ,((ˆ‹‹BDFF:Ž÷ßÿèÑ£7楜¾üòËRíÝô€¤R© E™=N&“ýIÊ- †ù°X, …‚*tåååaVé“Ñ£G—Y6Õ»ï¾[PPðÆotìØqĈÐÔjõ%î]»ö“O>ùÏþ“‘‘b´Ÿ~ú©¯¯/u[»vm@@@dd¤¤ö¢\._±b…¢,—æéÈ‘#¿þúëØ±cçÏŸÏU?jfUœîÞ½;sæÌÌÌLÞÞÍßߟZM+ ƒÁ€eÅÞ(û¼ìâ¡R¥JGŽÙºuëäÉ“ W¯^ý U*¯îCË}åÊ•qãÆ)•Ê ¸ B´¦âø™>}zçÎI±V(íÛ·¯Y³æ¥K—^{íµ2«³—–––ššº|ùrµZ9sæÌÐÐЮ]»~ðÁœi !nß¾=cÆŒ¬¬,ªè(¡7EFF>öØcËÊ‘¿¿BBBDD„ŸŸ_vvögŸ}‘PdŒ„vìØë Èl6S(âˆ|©‰‰‰ï¾ûîáÇ•Je¿~ýè«Ê•+'$$ôèÑ£Dj‰?,­Y³fÉ’%}ôÑsÏ=Ÿ——GŸ¯\¹’§åêõú¯¿þšþŽmÓ¦MBBBƒ î{OjÚHŠóß?fÜûQz4eÊ Z.\¸>t8Ÿ|ò ¿lÿþýÔÍ755õ‡~xóÍ7ùiçäëëKQ+???ïåË——{ö_aaá”)S<<<Þÿ}—ËÅ_ðìÙ³{öì¹ï¯¶nÝzùòeɇ‡Þ»wïäÉ“§OŸ.]ŠmÔ¨QBBuäKKK;vlÓ¦MG=jÔ(Š—”;gܸqÁÁÁT~ðàÁƒS¦Lyë­·†º{÷îÄÄD\ùõ×_Ï;7%%eÓ¦MÇ_´hQñ»9òÝwßõóó{Xé[¦"gÞ¼yV«5,,lܸqµjÕªU«ÖôéÓ¿øâ‹°°°wß}wïÞ½6l(ûÝзoßvíÚEEEÅÄÄôëׯM›6K—.=tèÐéÓ§K¯»ð}u@OOÏ/¾øbúôé 4˜?þ7ß|fµZ)¦&„8þü°aÃ’““ ÅóÏ?/„ ì@XXØøñãëÔ©Sö•‰Ÿzꩵk×:ôܹs111 4ˆ‰‰Y½zµR©$1`À€V­ZM™2a•>úhïÞ½aaaýúõ»{÷î{g»=÷Üs„$|ýõׯ]»V§Nû>tüøñ5jÔ KHH˜8qbƒ Þ{ï½ 6„……åææ¾ûî»BˆiÓ¦yzz.Y²¤l|kM›62eJlllAAÁâÅ‹_zé¥çž{nôèÑ:uÂ[Ÿ9sfÏž=ÔÒ¸yóæƒ^°`Á Aƒh¹:„»ÅÄÄТ;688¸fÍš3gÎ\¹r¥Z­&%´|uüààà±cÇ.^¼X§ÓÑPétþùç±±±­Zµêիׂ ܼysZî . 3tñåþàƒÆŒóÑGîࣥK—ž}úìß¿ÿµ×^ëܹ39sæÌV­ZµjÕjÀ€sçÎ>|ø¼yó¾úê+By´k×®oß¾3gÎ|õÕW“““5jôw<¼¬g»ví.]ºôà.‹Å¢T*].—ÓéT*•6›Ú×[­V²­V+"+ÛétR½ª_û×\(xóP½«­V«L&S©T6› OÑ SSS•JeíÚµ{÷î}éÒ%u< ¡àÍCµ@2dÈ®]»®\¹B3ÆgF&“Åð»\.þ9f•ÏöCÍ! Þü…F¿÷]V•JÕ¸qcjUK–l ºÞn·óß !ìv;=]¡PðêXv»Ýétâ­±j2cþ.(xó°M¬iòЀ“’’H4FFF’;TA/âp8ìv»L&£™)>øûΪÝn§*Ô>6¼yØ—¢+•JšI¹\n·Û=<<\.×}L“¨óçÏ{xx„„„ôèÑãîÝ»‡Æ>ÇrËårº¹(êé€å¦Y’¸èÿ'QÁ›S§Nùûû?xÁŒZ­Ælã@Ñaè}ùA+>`š%zSŠH6ü_;­(x£V«ÜäÅþä3,9hpÐlÿÑþ¤Ï‹ŸÐô?—d#j‰´((hr¹¼ÔŒ„%-[¶ìôéÓC‡½uëÙeC|6øßÿsÀ’Y-Ç™ü£ÁcÀÿsKŸºï>–|(™„?Ÿ±2 âѸâo!¹@¡P€×üÏÁãËò¥Š/ ø¾¡Ç?ÚŸqqq—/_8pà;wºwï.Y)¾ÜœóòË,ÒƒÁgMÃ-YñóYú£ _f§õ¾ûS²Ep–슸»‚Š |óÍ7F£qРAˆ—”*EEE•T‹½ E³fÍ"Çñ¿™j×®ýÞ{ï‘ÿßI‹-Z¿~½Ñh:th¹ä¹©"“[äÊ×+Ë'>óÌ3äLRþᅵªU«VÆÛ©¢‘¯¯ï¿|Üô"G.—W|ü¢L&#÷¨Ýn×ëõå8ൄå;’‡%Þx#//nß!èp8þY+ø'd4 Zî¤ÌmþìaÙýaµZÿq«Y¼µù="G£ÑVümt–„ùùùTº¦|µZ!„Íf+÷‘<,Q”Õn·_ºt©|Û•/QtƒÁð[Á?!òp¡QºöN'Ý„~K 4$ʸ¢?hØô¹B¡ðöö¶Z­¹¹¹”g€¯èçô_Ê)!h?=Ði2iöhÀô_‡Ã$!…BA¿µÙljµš¦…~(—Ë L¡Ph4‹ÅB»Š³Mz–L&£ñЭL& ’Æo·Ûé-hl4,‚FEHSJ• 'âuœN§J¥¢45J=,Æ@·¢!…„„ètº›7ošÍæ‚‚šdÚ! …‚.Ã+Ð ±÷”J%MÖW¥R90}B¯C¯F ø‹NSJ)F£‘þÀ¶¤­N?$04½)-1½&=ˆîIÛL¡ÑhT*Uaa!Í9VœvýW.—ÓÆÆ·”×B¯L»‘v8åÿ‰¢‚oô\$Ñp6ÝŸþ¦¯h—šL&¥RI»ˆ^~n³Ù<<<èuèJ¬ Œ²‘°ñp艢(ÒL_ápvÈéGcƒÙívÊ ¢3BwC.͆B¡°ÙltRèé8PHôÁþAbM—V«5›Í**))©~ýúeÃ`òÃ܈µÿ/Bh{Ñrçu:þ‰•í':ÿÄkGaaáÏ?ÿ|úôé7n E\˜¶íb€ÉÓÑ¢[Ñ•´éé\átQNx ÃQDÄÎè+­V+—Ë­V+gg´ÿèÔQæ ö:݇wè¢'ÒéÊÉÉ¡gABàÌs=†ò izé´Ã†˜ìÄmñ¦TqŽî>ÂEF‚$e:«àDBNçããsûöíÂÂBb 434¥t+š|z_ð_:«.—Ëb±@„#¥ì‰f+œý9ÎÛ·o«T*ƒÁmY„$K0í”,܃¦ŽÏ¹ÅbÁÖ¥—¥í!Š‚ê´p%`[8 …Bšþëáá-GÛf ‹E#ÇÒ@P­6º /îáá!‡Õö±Jƒ§ãˆÑºp¶n³Ù ŠÑ‡jµZ©T ºý ¬™ä¢J¥¢CAw¦·€ WÀ’IÞˆ>±Ùltí j<=‘6ÖÊ ‰­R©¬V+ ›>Ç–¦+I™Ã®E‰«$¤¡ÈöÄI¨LÛ’t²¹å -sl2¨ZP$é2J̆ˆ¥%6q÷îÝ»wïrm…îæEÏÃÃÃd2áD5Ц§ ÛÒq/Àðˆ‘¥ÆGg7§3@œ‚žN?ᜈËÚ—°i8€fǧ:)2äéÌ@*“Œ¡o1HYºêÄ =E.—Ó‹`„ļÀ¹ÀUa`á0Ó C¤¡ƒ§P(<==«T©’••E3 }&¸0Ž7q+εEQþ9Þ…Þz Ml#nᑺ Æ ‰åÆM»ÎKdÒ´è4fnOcM± $›*8D´»Ý1#Q_H¼ÑÝèoâ›8‡ƒJ*@ á·0:é¤`[b<2FØÕt% ö ö]à )l¾.Üè¤M±Í2ž´:ü°8ë 5"Š-J&“ét:>BÈ9rZð‡Ò«Ar…ƒK>¾Ö–\-ƒYC«ÏZnq·¼¡e#å–2Œ_Îå9Cá®΃èŒÑ>¦™D¬¶ ±?ÚTC°LoÎe8_ ­†3úv§V«ÅˆÑý¡z“] 2ß¾jp;¤ä‚û÷=ùÄ iˆSÀ=ÃB¡V«é¥ˆÁñc T(¨ÍCRㄘ„ŽÉe4ÏwîÜÉÏÏ7XÒå¹ï”ÆÁL/=”Î36œK4cp1AÃQIzxxîIÀ„t³€ŒÄ6× Hh‘µJ7S…{ó0™4Ûpàpi$9 4Hⳋ…ö½m$ZbHPX*X&*¸Gð© )…2Nrš< Øü8_X;º<”›È´—øö#Ç!ìHí1>T8!¹€ÇƒDQQ(pp„`A¡UÐxxiúnIœ (\`Ð"â}á\áCáééI:å}%,3îž7…ó4·È)OÂI†’HÿÕh4Å7¨\.×h4äF£­LÇBv€dCpSŒ•B PÇp<¨Œ$¾í °Pe':H¨øDF˜B¡ Méáá!Qy("Þqh³ÙÈ·C\‰¨ÆMuº GÛ%ÜÓþæød0W4Th‹ôŠ¢Ñ'ðÌ€€±Òƒh¨<ÌF&¼”ðׯ‚‚šhëT„ ’˜&vÄ Ä$dÅK á‚§#®À„´èÄ Õj5Ün5t8^^^‹E§ÓÉd2£Ñˆ¹U©TÞÞÞ>>>·nÝ2™L<¤Õj¹ *9‹ !q„ÒîŦy@Ô;§ƒ«çpb#P‡¶ŒE¨>äzâ’Üé ‘HZ_ܶ%” zS<_Ñö#Ég6›iHz‘§—ĉ+ØÊ$a/â•aa;Q’˜z#Ú‡ÐThHf³™fŽS8HEQµ4xÃ\.ÕEäÊ] }Žä èpÆíX+g+:2¬Wâãàþص.—ËËËËÓÓóúõë”΂ ¼(j7B|Ÿ;ĸ{;7°WàL MÉC´ÿ`ÈC·‚"³†kF¤öÂYD7äf ¯&‰Ïiû‚#ةà 6Ûò83Í!énÄg%¼Ý Ö¸ þÀ[áIàw@¼þòŒó—‚†(:Ä7`¢¡Ê!ä"M (Toz.qÒ4¹ë~QÄ!ðšB³ÙLL+=µk×®]»öÁƒ f†¿ ÜPÄ5yÁ ¡EÑuîRƒÃêÞ'…ïÀ%àîCJ0eZAN,÷(`aè“VË Òn·ï&]û n.øQ‹ûÉ!HG©ê)¬"úÜ`0 ¸'|°°ÏœE¯‰@®ïî9åjîÅ–q¼Á­°9Hyq8ùùùf³ÞQhcÑæFp›z/p¼ÓÂáX°ˆénÐkà8‚Å€_á´ÃçK¬úäwÝ=ÇØ7üèbãqX—` \–ƒ•CžvCÈm ~1^#ç‘3xöøÛqQ Äb×äýg§Çá”"bç 9#Àö*aŽ4ÛPÕæÁ>ÅÃãFaHdÛ+2ÅétšÍæëׯ ªyÁ‹¸cB8V @GT„€ÛŠièE°Ùè'û–vé °i`Òë@ñ¢+=Ã$cö0óô¾@Óá[P¹Ì&vŒÿrÀ!ºeÀ÷0Ù7ä` C‡‡gp1] eåÊ•u:ݵk× ]!d‚ãÉ=ê°Þ°(<ôHÊy\IÓ…¡aRã°#îå&˜0;\ºENy¡X6Ú©œEBºÂþ€ªÎ1T$*T*•Ùl†=N[ –>‚0èôòØ8[˜_„w”Ëåd‰Ó®2™LtnþÇÉÃàÄÈ™N×hµZ0°oÚÐ`šøŠRr¹%±Ï¸¿ g7ð}qƒC¢*‚-â)€ðI"¤áX"$À3Y«Õò+d|t¤=Ö q[ôlÅ€}“+õ#Ó¬rÜm3²x_¦!‘#"™À)¤"€/#x`7B/ÐrûÄ#Oˆ±qÞ¶…(ù`0ÐKè·˜jbvÏ4Œ²Ãj¹…MñmÇ{èJ PP@ÀÀn_¡` ,zð :Bšœ¼8Q«ÕîL¬ž:„R¶å€Q«ÕŠ,í0òç’5æááAŸÓÐÚá0 ‹7$6 õkôÜÐf uÅQ8àù%à¡¼Õ W´9)Îqˆ(F%9º“j4ðçè#˜#ZÆI<æÄW™¾µZ­ƒV„«ÀäÒÀì•î/ñ‚¹sôdàÑ nd6›±ßÀ19æ‚«í’Ð1ÍqdÉÌC†:ß)g÷ôjò»µ†$Jqü:­b'Xb’‚ØÄÜ)Äȵ~Ž–„˜™#Œ#54 ‡ãpÑÔ2‡µ0ÁÁÁ]»v €ùîééIl]¡PäææfffÒOHFr_+t v˜ÖLóL3‰ô þÊ‹Å`0àPs•—~EKFû+û' ãÝVNY# ûp_ǹR k &4IV\± þA{‹ráX‡Ûþ(‰KÚ4¼FÜè!)…©‚êG:,ÛHzÅ1@à”ƒ8l»–Ž=¹àIÈ!ÚDÖ ]/z‚Iñì0èÎ`t1y‹…UÄkä"ˆºœwK@G÷ì€Â3Ü¥`6›ÉKIvî¯ãyò$HÞàh´›Ór{{{ûúúG&/ øXü“tÎaì"‡"¼˜/Wà…!á×<-œÁ†Ðâ<—Ä'lââ&ª @߆Ã8ðFŒL à:­)ìNÒÏĽ,` KyæááѱcÇÈÈÈZµjÑÛ÷ÁâE8Xö4ü“€J’•L»”c±Ï%^œGë‚ý… 2ì0ì1ø38ôŸnHG[“ «ËèOP¼h®`Ðsdñ Áļч¤š¸áåÂZÁµZ?$@ç…: =Pj¼âÚt$È@ Ö=âöÄ.i— ²`H`‘´ÅQGKR½ wF,&òð ¼Ë­p1TfCôR"A¡ÎÓù´X,py!}²b›ÛðLòl$üC„Ûív£ÑH2~'—ËEhQè¶hßÜ2£?hÂiT¼`i† – Ï1i“ÐSÀ˜ º V– iUÐß¹P‡1 {¢Ýe4aÂò$°Hº’;` ¢’KX,òsBÙ"•œœ€Ï]œœœ‘‘qçÎÚöpü"ØN2`I}?‰†Œ.«ÞFly]Ž IDATã±Z­[Å&„‹Nd:ã˜Ã!|õ°Õð¦t1ewâ<ªÕj¸þ¸×ÀK„‘ù€´º9ü¤WAC:Sù¶r‹ÁÑ(òÈ«<UÌK6ÍUlt!ÄGf³–VK9,e›ÍápV«×¨Õ­ îíE˜G°BL¼f3x.ÏòãÁm ¬LÇjµ"á~xóx^*Ïdä*âÃ`7< bê!Ï›á¥!%jÁË$ÉGp„U¡ÂAÄCÓ‚Õà¾>^ 0_IÉ/Ž™æ. ¨HÞÄe Ìã„ûàž.n~Áôá(X î$ä0 XKðbq¯/¬dømx}3j°*ûá9@X>!³aÚaÐÀ…(ñù¨Õꀀ…BA¨-ÁJ^ÒR¢^ŽDÞð¼4L/™8ô.&“‰Ö…RxyÔ¾ä(8dΰÂE¦§§§Åb!™„Ùãº? ›‡Ù‘8ÁgªtP Ÿdî£ã&oqIæ ûrÔ«$ê‰ÓwÖƒ‹(Ü1`ž‡ä9å ¬:mÁÖNç›:N._h4>f³¹„X¦Pü¤R ît®eI!ÈÀ€ p I‚$RxéL®] •‡cNx‚Üzœ ÁYÓ…X÷_qÜćt#. Våsˆ¦ (ÜÀ¯Ä¬B·ÅàáØ¤›±ÊN¼‚¯ÆÊG Á-Ä`õB(^æ&X$]Cõ}i´4-Èãá!ì%.8†O•ã°mh)dEœ—'óõâ‡ÃÎÁÌð„A^`_½ƒÿ ˜F lcOOÏçŸ>((èÛo¿½qã/äJò†leŠ€¢‚2ÊKcÿ+Šˆc½x}RbîT[º UÎF¸KR,Ên·SØ_%Þ,@"„ô3îBŒHKIf ·1Ϥä‘v¨R©¼¼¼òòòฦˆ)ogÀW׾†¤»Ñ€V2®x^RKaI_Q61âs’(—Ëç9僖x*$i"—«‘É4Óéìçåu^©´ÛíoY,›Æ—==V+)’P*ŒYnÉBµä†-E³yZ;4kI¾$…ò­IZïð‚NˆmJ°Cüx cƒ*úPJ2À%=ièæÔ€á B-ä¢ú'X$W±¨_ 3‘Þ'dðð2/!ƒ¸°Xƒ‘ÿXÒQIД’Æ0¡r…Æ@lšîO ¹Å«’ðý.6ÍËÞPÌœWƒ¡IÏÓ÷ΠȆÉd÷æKJžÈ±¼’}쌤´3q´3gΤ§§ëõzÌàÂ5Ü“LRÌÑP€÷z× ÅÓxï.àiE8pN‚<À‡ %’‚дë.Õh4”óÎI~Þ¡\b¨¯Ê­yzŠF£ÁŒñþRèS‡ƒ¡Qó»þxwq5šk3’ä6·È)ç¤~¨xLXáïrÕ–ÉFh45šªþþF£ñÓ‚»ÓÙ«(é„` )së˜KˆâÙ,÷ sGO˜ ]¼7êá‰÷æl’$àÞÜ–—‡Bí ÎìP¸*’¤; ¿“𣤏·Ûþ°œ x|Îkmñàh|ÀäºÄºÀ ÁõeÔÖƒ·Già©0ÜÂãu8ÖƒƒVù±:„ã@| Ö¬ Ž”¥’ |Š{àUƒ8Ç¿¼HªI:Mp§ €Y²Z­gΜã`~X“‘ŠâdœoB”Rw8$iâ'80[¹n!—˵Z-ÙÔ#‡ÃÉxc: Ä‹p·'\ˆ‰ðü^µ–·ç!©L&/É!Á*ûÁÂ÷6’@«!^i›×ÂAe„Ã×á†xFÜuøÌ9‹ãòÆÝ/§BH  y•IÚU…h,D‚Oë–-Ÿ}öÙóçÏïÙ³ç3‡#;?ÿë¢XVr¹¼råʤøFªÁÍOOO!%±£\w!æ 7B \‹¦j@k’†žü„?P*q\©V1Üú¨ýŽ#øÇs(3að‚Á’Æe¼› xH®Ò£ÁjÁb$™ƒ8±4Z`x=l^“˜×ÃZé>`.’âÊH-äè‚Â$`y°'ó)cáþˆµàí ¤¿"Ž·ú¼%âðÐN$JOêäZ6-ªÜzÏ'òˆ!Ýýüüt:]~~>üÕN§3''V 1\LDQÏ1ƒÁ@–«¤-D#|D4’Úµk?þøã'NœHKKƒRÅSÖ8îSþšd_úøøxƒ;`=Ѐ9Ê`QnSÆ=…'ÜðLgÈ?ªÏ›¸ÃS†ùYæi³\°ñú¿\Éà%sÀ$%!Ü"§Ü¤Ž(ÊÒâQh¨Š!!!½zõ mذaFFFnn®L¹BA p"OOÏêÕ«Ëåò›7o’ƒ…ëÂ>>>ÁÁÁ5kÖÌÍͽ~ý:¥7C¯!œãÚó6ºtCTŒçz(çó#'ÉñDqY Ÿ±Î”TNC˜D’‡N3âÞ~IH™ƒÑy$“›H.áÇå÷y:I¦·¤%TW^^ŸS§,!u€æCò?J‰pœ1XýAŽ5̯‹[›eâÞú§ôjKÆÓÚ!}%¥Zá´!óH­V«Tª¼¼<øš ð¬C2=Žý$]ìȯþÎݼ¼@ (ôBw#öªÓé¨ãª¿¿íÚµ³²²2339ªÍËËËh4æççÓyáøI^Ò´xÀp‰_ž«V«u:6/8Æ·%Á=ù-X=ÌI´d¨H<ÒP¼8‚™×°0äüZReü>C^d^SÞ®Zül(CÀs3¸j‚œ'Æ êqo¼[ä”3‚€çrØ¥Ýn7 ‘åtzdfž;w®J•*/^ÌÊÊjf·'å@pWÉdºy󦧧'*yÛ*H“•••——g±X²³³ …²ŒƒÍ10¤a™ÍfÞš^Ü›ÅÉ“B¸¼ä¡HxÛy;8týáÿâ8rqo–>GˆÁ5Á;‰q¿¢MéæeÇàôã,U»¢ŸðÊ+p‹Ñ¨q ÂQôʼu ÏÚ  ¨ Z8sl.jŒ’‘ÄÑ}ôúúðÖ,(äÊÍ)äù“îÌ àCÅæöoÐB¯´P–#zF§2Ž7ã…¼¯9™2(8„ 7ÈX‚š ¯Z3AF£Ñht:Z­öôô„þáëë«P(NŸ>]XXHa'*¹æãããëë›———““ƒš˜|~Íá <2ÊC;Bˆäää+W®¬âPo”%Ôh4>>>O<ñ„^¯ONN–ô¯#öºpˆ&bz%= 9& ¶#·Y¡Bê„—$àÖ†Z­6›Í¼ê¼R©¤§cέl6[aa¡§§'š9q'9÷ãñ¼ ŽAE÷/IxÕ-rÊAÀ;@ól’ërù1™lÆíÛïnÜxìØ±»wï6¾qãÃüü~:]³™—¢¢µÌÊÊ*,,„æ+1ÏïܹËòî΀3AB4ÞÞ¹HàMa$!þ 5>Dty‹IFî:àw†qÃëb©qO:RdpðPbQ„÷¡þãü êÝÊ>Gmf Ô˜Û|ÂÛ°aÀ€€ììl”æä^>èÄ6TcÄRB%çõc$a î{Ï{K󰽯ߌ*8¢X‡r’ßø–ƒ¸è·€Õ¡ëëÙŒ-$©†ý@Uލ@äÊ£U ôFº˜ûàÎZ­¶fÍšžžž™™™&“IbÚbÆÔjµF£1Ä»y¾·›ÍfsqÛˆÏ0½KNNNNNO¢`./Õ N­¸·¼Ϻóðð0žÆ{Öq!s„·EçèyÞ\Ò{žW D¸ e¹ñEä8Ph˜7¥vÇr* h÷ÈA'árR(ì.×ééUoÜp8§d²™õÞô@®Yp-žwæGIÛ.°?Áòö9 ¶sñÒè¤ó4þj<¿R«ÖŒòh¼¾äJIù&ˆ ð2 í=Àш³óv2p(äÀ燃| <ß}VP,’ÇK$Š!‡!HJÛ¿téÒ7¨k* #z/L;´‚µN€æ+XB+ªÞ‘¢"M ]Æ‹;4xþ9I_8Óë}Ûãz ¬X¾µ¸ñ$)Ñϳô±]!þQZø þ7î´¤÷õõõõõõõññÑëõdÑxȽF®6èC4ÛTHT«ÕjµÚêÕ«ß¹sG¯×Kâj$š4iÒ²eËK—.>|¸°°ã¾Ä½õ!)9º oAm›/\¸ 鉭‹»×8#æ˜ø·a…S´Œ‹yž—Æ#1Pé šð²­<åŽC98– ׈A ""© wŸ`­Û0<Ú´TRA”_¨[äü¦ 6Ê™;$¿kL&!“9!„Me²|™ÌÃåúµ(ZÎ3+‘?LØJ°à1dI1f²6xŠ"íoÔ„§›N#/„ 0>²Üig#ÞN<ås |¡w¯··7µßàYÀh÷Ëd°3‡Ã¡Óéxsb°f°?Tà°h¬ÈC…ÁÄ5Gr…Á¦AÖ ózÌP*q2!ZÌfóÅ‹ylŸç¸@LJzˆ†nN"ŠzñTð}±hZ¨ÔRèy cÚlhÑÄ%$Úè ½Õ”ãÞ<¤nð’hF@g B¶¤”'48N“È-…BáçççïïÏ•¨|™`=“È›JSA»—æ\¯×k4//¯ªU«Z,–ÂÂBxüÐëý™gžyúé§=š––& •A“@á^‡7k§·ƒàç Âé'Võ’wc*îOæ ;Þ‹{H">]\ñJÒüsBôqq³OÒ#ä n˜ò:X¸›(J¹uçåTˆXŽ:Õñ„'A©T6Õéìv;BÖs'ƒ‚9áà2d«ÐÖçAèbÜž –DŽrî%@Â|,eƒCÁ) `Ô‹{‹Fà\y‹k”<釃D¹m$O ‘V “HR‡ŠÃÉrâÕˆ³ ›Ç ‘S…sR y¢ PÜÓˆRfÀãÀcÜõÿ$ïLKÀKúÓñ"Ä¡X‚m@a€h‘ ãùøáRƒ @õ¸Dî‘(V§ °C¾€‡Ç-iÔ€ø÷õõ­R¥ŠR©.ŽÔgÚñóó«R¥Š§§§Óé¤FgÈT¥4 &00ðÖ­[ÔÜBÂb±?~¼°°ðÌ™3wïÞ…qV¼Þv†ï@A*ßi\·ãµPíŠ#l Áúû!ÓN\…â7hya$ü D”’¬&^òÝÂ-Z8!h ‚4¥¿ ‰*º¸ENùˆp4p+dGÓy@`“QŸå1yn§óbï’DEI¡-^hÈWžÙƒGp«Ÿg{q_ ¯Æ&ŠòO% ç¤òpUˆçœÓ<ÆD…{¨$¨hî–1Á«°À)éæ4T9ø—ÈTa!NAËÄ åâØ—ðÿöÃCؤò¤*p|0o .Ï*üT Ç)úÁ­pÞ œ·©…ÿ ~xí°PiÀTדƒT| 7§ø6F VH²2I‹¢i§iñöö®U«Vpp°Ñh ,,,$L¤DÙ=Ööóóã èÎÉÉÉ©©©ùùùˆKq‘Ãõ}ÿ±‘84ƒç¸HJ1ÁGÍ3 µ O–G³è+”4¨šï4:¸uÂmЄ8ÜÚùxM´i@±jîYáè¼v”E¬¬ŸŸŸOnnnyõ/p‹œ{Òpb ïãããííM¡fŽwä 1âµA+çI$¼²‹¸·ß(?EÜ<‡{Š«ZÔ»W’ÔÉKì€áÃ'Ò*96Š-òÖUÜ{ÃÓøy]g.ny†,‚8Ü!³J7ǧÇÁ<Š.íá rÁÌÜwét:¸³áìywN ¼‚[¨\6@]@ÿ((\!Ò>RžÛ„Ro¼Ä–¤Öí+ ø¾Ë&§(­>ÏÃçý(9Þ7‘Tn÷V¼Öét^^^T„9 L­V“qL©i!!!ééé999¼B!9‰! ÂjµÚœœÞLb</@ÊúÑqÓy oj^Ì!é‚‘‚ŠÆ;l¢2…`¿yI'<58 l ÍVc‰Ã̸%Š‹)]rN° ¿|W“¼—ÔKåÝ+¥‡úùùÕ¨Qƒ§œ»ENùÈâ}\‘§­ƒÞåP°ÂYܰàå ¡ï Ö€×ð‡Ç–—Âänx{€ö!¯zñ²¡¼=ö"g='¤™„[qì?ïKzËK‚‰{ëöcÇKL"°'.t‘»ÎK4":…¯HÞKà×’öÒ<‹m¸-…º,VA8ñòÒŸ!M>OsáÈ ÎMˆ¨PWEâ±kÁõyÒ/ö»Ž~‰;;Œ .&زd¸`q¹ àS‡Ò/("Žô :Ø ’jÐú{^¼ø¼^¯Ôju;vhfÏ– Ñ×l¶Ùív›Íîpä«TN§SëpL«SçlQ|Ê„··7UÛC:"o!R‚¸î…M‚•’Äÿ±o%ŽSn#*És¢¡br‘Àm>®ªò6ÿ½7±<½ÎûÞÚï­êêî©îž™žE$%ö0\DP¢¸˜”µÄ¢&V(‰¡ÓØB$N(°d 1ìØFK°X°hJ˜( µ@á"8I‘Á™!9"gaÏÖÓdïk-÷ÞºµçÃÃúͯÎ䣊n}ôÔrïÿþÿïûžsžóœç¡oäQM,†"ˆšé§f1~M– bäyˆ€ž~+!„ýî,*ÿ¸zõêÚÚÚ`08¬ÑœqÈi~öÈ ³š···uxü´CП(äÛèzTÇÈ£°òÝñæ\ö`Á¯èoÒóGÁÓ¡ˆ3ÚçZ>NÀ6žñ+>E1Y`WƒÑ4*l"΂€ûaR Â›gg'k”¹½ÅÓþ˜%€å#62ƒb:CQÛÄî%£nvv6'cèà~12`ž¦ÌNæ÷ó•„Ý gþ‘€Ë±cÇNž<‰£¶³´Ëàhй)'NÙùÔ‹f‹xÃ4N§cÊÐÑÛîV^\s¯×»yó¦o¬ ]·k1ËCÌWÞ"%ÎÂÂZ;yŽ Çõ«_}êÔ©“¿þëÛ¿ök;ï}ï̇>´õS?µñË¿¼õ«¿úÊn÷è¥KÿÈÜ<}úû×ÖºN*¼Ñ‘#Gò©–ò£t顃gUÓß2§£h/õÙÊæ²“›KjOÆdOA[@ºÂ…”í…ÚAµ'«z2¢tLK¸}¸ö÷žJé“grË,ªƒ 'ã*ç Ot’^›åDãIGyWOá™þ”„ð×  >&ÞÐÏ(,—QãHDÑÝT ±%n.ùX¹ù¾1èüUrù’6Ž2Øÿ˜Ð€ÿ0ÕÄ¥²Á`…jÀÞ8ÇJªÜ÷]Ö7] ‡c+ˆ@ÕË€9\:éêÂÂÂ;ÞñŽ………Ï~ö³ÐsiAKÌŒ=†b³Î\ç# G—ðbK€ÉÍ)Ô;¯R»?¸:·1ÔsJ¹nä´” Dô<ô;ï¼óôéÓÜGŽYXX¸ãŽ;^ùÊW~Çw|ǩǛù½ßë¿ímSög“O=µuæÌæööÌwvwwgVWÿöûÞ7ÙÚ½O>ùÖ·½íλîŠjÀÔÔT¯×‹—yØ`_±wéÓm$¨#i”¦àƒ_ÀâßIW½¥ €5¶‰ÝTÁ96™FBC$´ÆPöž3Q ÃPv‰‘ÞSSL¤qg€ëÑû!&aÈ® /~ˆs ãóÒVó9»óÈQ²1+ 32iEéòÒåv‘‘­ev•F~tû qd³…ÞʉSõd¯Éß³ú9m‰H$ðaíW*1{¦µih®É'Ûá³Ô)iUàèsæƒxj²ÉE1 ŒEA|¶rNœ&®& ø¡`°m¢Ý7¾ñÙÙÙÁ`ÀXšÌ­ã<‹Üü w»0#|¬g3ò›Ì,RÈ2Ã_h¾ôù‰:vÔΉŠW€¸¼&Ã4Ô[333Ýn F^a~~¾Óéä§Gžž>vìX§ÓYXXX\\ &vÇwÌÌÌ4žo¦€[kwßu×äÝw·Öxàî=÷ìì쬮®^¾|SµN§sÇw ‡Ãáp˜h‡(_Û7}g=t»]šsöƒ€zç6†r?!¡Y~ÐÊCf…‘ ÀŸ4­À,j·ÄÀK]E%2…À†K~9€‡ÜýňG¾J|ÊK™þëgríËðz9²ÝC6#™ª‰C:ËT°ƒŽå.S)vžf€îhŽ€òW$ƒ°hÈ£™owƒ‘T‹ƒØm­¼K’q#Ñ6w ´oiù\ø'Úª¹ôÐ5_#±—‚¿DÞEŒñh,¬@?T¾,…BásoooŸ={6ê5M>öÅI,”iW× €¢)kháº,F¹•Š™©Æ¤äwß}÷ÝwßýÌ3Ï„mLM“:JK¡Ã%®Pd{¾¤I¿D,7x8žR(G"½í+Å%ªÍÎÎ.--½â¯xÍk^óÎk×îý™Ÿ™þÝßÝ[ZÚý[kö/ÿrøö·O?óÌÖ‘#“÷Üóå?ýÓ£ŸøÄöw|æ3ŸyòÈ‘~¿ßëõ¦§§ûý~·Ûíõz—/_^^^æöæs4üOàh·‡¡}Zw|rŸ*Í*¤ÑMmá²Úퟀ?4ŸæÃæ2É’ÚÍ+Øç$͈ÃúúúÚÚXÃÛv&g'©Œ¬rŽé4$Ú¾X@VéAý´ÞI%|9tÀøPEƒ µ;3ýÓÛÜó³Åb33DÇÂC$¼¯+Bv`¾nxJ¼<·X#$-x´áŒd›yyyõå俥…æ9V¯\•ý8L)š1Ý"¦ú2ðv÷Ý;ï{ßôÇ?>ÿØc“W¯^yðÁcwÞù¶ßøçvwŸ[ZZYY¹¾¾Ž* ñêH­#Zš[×ï÷]IXÖÆUH =ìeöD>¦œwvv"q}ùòe Z»tnû6n®}êèãï> \˼šwCF…™¯óQOÑ‘œQEqg²×Ši…3f ©1cíÛ…>z’³B×9£çí5™¸iŠÛ .xý¾loHÏÈ·ÌÎξño|Ï{Þóè£~ò“ŸŒ·Up ª¤Ýšhd%PR6×Úeò?x½q¶¼ ¦¹x  ,b»F³ìLŸe‚¸hÁ|"bñ £aBšËDÏÇ•2޽md#¨ÉJƒŠÿæ­ s +ÿˆ¤ØÂÂB‚“åŠÍ¦å)çM‹~ IDATp4ÜGåL™fóC.\¸råÊÚÚšG³1O: ²;LPr ’ŒŸX¢¼dŽ33ª©¹ÛþÄt"Ç¥K—nݼyýé§w~çwŽ~þó³ÿâ_´áprs³µv×sÏMnnþ«øÁììýë> í„KT,çøòò2¤€p@̪ Œvr—6†u‰x4!'ìåÎdÀÈa‰‡R²X6< ¼ZÖ*càv‡do xn5o¶¸¶ʾ;@×­iKn8z”ò79‡ùÅRp/±=Sf5èƒÏEÛ¦XÇ3X““ˆ4ÙR¸¹¤µµµ³gÏ^¼x¬ *— ê¢iOBˆXæÔ©S7’àù>øo¦ßPçyHÖƒ®Ö_¿2~H3Œ_ Ù “¹ €›ŠŽ€­Û`rçé¤F+w\áÓypŠÜ1=RÅ&ij¤hÿp`᪗'óSf˜rô”~׊$9P á³Él-¿ƒ4ß´L/ ‡ÃPÂð.bnÔÔ=Eh²þæææÂ‚-ò¼ÖÖÖz½ÞÙ©©û~û·×ÿð§™xç;www¯_¿¾¶¶¶1nïìüí¿ú«œš·––X±ô­‚a?†¥¸'0\ŠƒM^B¾Ns—óÈÒÞÏú_^^^[[Ë›fEÁ¨ÌÝ££ãÚˆL¥˜V´ý‘ðvPôP ’4õO$¹H>»cŠÊ\¤å¦F•æÇ!çоœ €x0UÇÑãÃ1»´ ô”¦b“?4!!3I\zomm½ð —.] 9°#D;ÜÌr&æv§üƒ?øƒ¯ýë?úÑ>öØcÆsŒ%²ÜÝ¡mò7/€~x@Õ=Eë!›—ppæ‚GÙª®d | S‹-:u@¨­Èäªa¯á 9Õ²C(7ç¯Bƒ. dóÓÈK`âÒ÷¶” ç…‘F3°mæá|8Á’rºá½FZÃîÚZ ÂI,²ª‰ÖNçá{ï}âÍo~ík_ûš×¼æ{¾ç{†ÃáG?úѧžzêÖ­[[[[1ÀM‚5¹/Ižg‘· q@°&^Û·"8Y¨„"zuV „È-u«¯IÓˆƒ›MZá§<q†vËĆ  iˆ_iöÀý±§‰«dd2J3Õ4Z6Ÿ}r X+Šú^"<ò’ZBÍ,]M2Vsºµ %á=Wì=sªBxkç%©WÚÁ)3*ªÍÍÍ .LNNÞºu‹7jµGA®(Ñàd³F?騋í[Üeu×ÁÙºOdK‡QÁ8I'g/tTîý4Mª‚2ÑÚ…ÞêÞo“qƒ‘zÒC4@}x™ˆ‘{Òív©_)‹¤c3}šÀm+Z×–Í/43&pðlÒk@ðÆë6ÓëõÀŠ›S`b^?U‘Ñ"¹ººúì³Ï‡Ã{î¹gmmí…^¸xñ¢õ;€ªèº£É2ÆÆ´˜ØtÎ9„Q\ïDïÓ/Ë07Ù/h£Xº³Ö³@jÓ³¥®æYiˆ\“Š‘h~-Ç¢VÜa 8~Šá ?)'„¬h÷¹qÈ9ävŽå8-ÅŸŸF²z%Ž^¾ÄKÕâóÆ~HbÈ/4¹}äÈÃùœ€D‡#* ¤4, “-F_üâyäºY£14tî_v‹{tÑSÊÌÍÍe,‰ÞFvÂâââý÷ßãÆååe«kçCaY-{nròT»·LNîîímomMloÏÌÎÞœ˜Øu±œë¡H²ª <Ë£y‹R`9Òp ]oÛ›šð•oF¸¥ØŒNZ¸»cÑLP,8“Å}v"«Ëý• 3ôTÌÖKYfXOØäaR”3Ëj1$ÜUQ¢ì9==fRîXŠ•^¯—‡233sáÂ…Û·o_¾|9¤g6ÝšP"ª¶°°077Ì1Ò¤e±¨fŒ_™ÏB&HP*×vp¦BZb& ï„œ?Q$YK”EngBÓAÉe³ŠŠ9E¶ýœò©™L2£!h‰ù¾‘É"×49‡O•æaû0¢K%H‚ 3è »š¥Æ(_æò\^à"ÅNöä¼'QØ“– €Sn|Û<0ä\3ý!ÃkÑ/SopVõ°wŽ[Ö¾ý~?{íÎð,¸fˆvvþ¯^ïñÉɉ‰‰ÿxk+)èg§§W''ïïõþÝÌ̇$!cÀ4ƒ~.õ ÿãÃØˆyðN'íO“O—TÃÌIÚAÓk£"PK(YpÍá»ðÓKÆÀùèSÒ£N¤üù˜QÃLÙáv‡ w¯L–¸¶ð€Šp’-ehÆ#¥ÎZr%AÌN°LM~ígïäLöLLLôz½£ YŽæN›5Ð ÔÚàƒ¹fÊМËnå·–áS7, q–Ș'»=a‡BC(Q“¤&Ý2Ý쩘“¼R7E8¸¦Û7=ü/3âmG=99‰DcžßÒÒÒâââ•+WB¢e'(AuíI5­ñŽ ß8{²‚§M ¬ÈdûX×îHø2Vé‹}h*giít:V3+xcc#“}(<¹Iÿ)ÿÞÙÙÙÞÝý‹©©ÿwzú­{{5=½»··»»Û˜¸>=½}pÐSÀ:˜FAMéæôáhƒ eêšUPÁ ¨Ãþ BÈ_&mÌÝc~{{;Ga¯×süóh§'9Œ‘ÂîͲ¢¥ùšDwà)°T(ÍËl¿ô–ÙX·îyÊfÖrªÒéø0ÊÚàߨØX[[;räˆCN¶Cj¬Ÿ\gÒ¬………éééØê€<òÀÌé‚u³ ðkMBþ׳kL€ºÊ÷ì -«—ì&E`ùwŒ2&åme"!*F"v>çd‘QYxOðHÂ)"lžv‡œo—¨SúÿÔ¡ä;»»»ƒÁ€SÉG@ÖYÑ·¤ ™¾yŠN±¡G !Cà æ )8$ #^lV@:Îîó×5LŠ@Ç4ƒâ4??ßëõ¬3 ÷l­mlüÈÎÎó““¿9333;»µµõ}ÛÛÿópø¿Ïκ[îLÍ©"ç,*ξ-ƒÜOç–^Î&˜TE¨M7Y,gçç>/..ž9sfuuõ…^hR‰%ϰ6¹‘ ‘D‹Ò€¡}Ÿ vãºÈ ì·}£:ÔRfîqæH2)¨íû†¹.¤¿Ššçöö6ž’–µ&ºÏÌÌìíîþôÖÖ3{{¿95õ¼öµ>øàë^÷º/ÍÌü“NçŸ ‡Mz©$ÖA(Â<bTx)Jx" 96¸÷n.¶•¼EDÀr«¡-lnn‡ÃóçÏ_¹rÅ?š0æGyDäõ/ëRœÚ1ç,¸ ¬'fÎ!nø}ï9G'<Ê5µË_åæaå¿¡Dcµ±³³Óëõƒ£Ç·oßFZ?Z¥”†Œy?H¿ÇñögÅ̇ô¼T"™o]™»óÚ ÒçÚ@°Ã‡&B°—ý:£e"±ÓœÝáÈå8Ï%% ‘Òv!§%вsát˜™]Bå’%Ûí¾4&ÇUÎ!|2µb z–ìŒ:é~¾Crg†±)+æF)\f‘EŠð-'g1>íE·<‹/J® ¬ÄÃ+ñA`h€-Ä\Ž‹<_39uÖô`0(Fp²¾å¶µ5×ÚÞÔÔ±'~ò'ò‡ø‡yä‘ßüÍßìã ¢´µ#m,†8X™.,8 >Õ8Õ[3Å]ƒ:oȨ]œ}™4*‡¼¸ ¢Òi³°•ëèÐOJ–›“hDyÚd‹GèPÊ á‰CÛc´)KHS@l“šôåöíÛбŸéÞÞ^ÆÁ`pîܹ•••\¡Zнò²ˆÖÖÖVé4@UO8É}``9ã½E±&R©Œ=[|f¡JSyÄW‹¼‚çO™ïæô°ô´‹rš& *ÄÞ¯(h¸7œV«5¦Pè³ÝPl2ñ3q|L’>|ÆšaÂj…h€¼4Ð9§šÌÜͶæËÁuò©”,,Øk´š‘®A¡Ù`´)[ÅVÀp×ie*¢HÓH?û!—Úív-pkl½Ø¼gW'íµ¿ ¯¬¬œ;wîâÅ‹FÀNž<9==ýÍo~“}H¾VTsFuH |OZ ó¸Hïp"»…fÆ­‘Có¼ I:}uÂ!×üU·ÛMoŒÏHðóüPIƒœU´ƒjuV0»t5 ÞÂÎr÷Ž‘æË¥(ÙÚÚºï¾û²ðÀlÓÀë÷û7oÞL8L€6[šm‹‹‹ÛÛÛׯ_iÛ=|9éÖ$ùQæÝ!Ëx„ÖÆKæ 3þâþœ•åXQ‰pm_,*oˆ®G#[$„”sH7ÐÞcÄEô4•Ý7EáÐ'ËÞ]/¤øœW¥Õ49‡rH”Ê䦿`‘W'T¥=ã¼#ãß4ŠüA“ÑV.¹‚惹35âZ¾ …;Ïš•Ñ9Z8&yHŠ>=x™Í Užx¥EI÷É©©{wvNݸñ‘|ä _øÂÕ«WoÞ¼ù϶·ÿíìlر̙rìèàV·ý©Øõõõ êÜO¦2­ßd‹éx–S,çi*ÊÁŽÖM ö¡°XC‚o%iš.>£"(%„ø;fL±1æTuõÛ*Ç7º¢5E”šf8®¬¬=z× \8ÓÔIeÆ´—OJöÌü¯¬¬Ðƒ1@МgT9ëá.{¤ 𠃓¡¶¯ñ€ìüŒ|‚P”f~¡¨Äbgê-»É‘I¸Ÿ þ´«}’`ßyð“Äñ§¦çvлiìˆÅÒÔŽÙ¶ü‡œCûÊQ>==E&ŽûânË…ŒHíϱ‹<)m~y´—`¢3ËËÝ «5g½¦Ï°†õ!±ŠË+_S“³p-àáC ÞáÄÛ©¨q$ÁL Á/û–S£@ËÙÜÜlצ§7&'ÿýpø³ßüfÿÒ¥Îöö¿ßؘÙÛûÂääÎîî¥K—ÀOŒò{ªÜ&rvÖ¢KQ”äAá8ª öbÊc%)vS$¯x½ ßñ¼°,Â89c1YL êmšÑ#$f¦3¨#ÓÆ‡¢by±<Xw%ªq39sé®û>lnn^½zusssqq‹ÜŸáp-N¾PH®á8óï]‚gû \Æâa. ?·|´xR‚fÿ“¸“*?êrHÞ¸•Ìv:Ðó@¿ó”z¤t\gj>ƒºv¤6A>ç%Өв; ןەÄbr¿Äqã´àéFQŠâ½Ï/ó•yÉÉÉùùys9°ÊèeÓ$sÓì!µn:m_l _<^pNœÉpB1s^øšÞ„,ëÄãrsh>Ã%¥eó[|Áš†ÇZkß±³óðôôÙ¹¹G×Ö²Ãþi§snbâ67¿<;›Ù@â¢Õ¸I™íg½gZ¸…šFùü|íà[p¶QooÊ5Ó",ë ”g/HOÎñÄ]æ- ¯{êâ{)h &%o@Ûo¤6¹ç¬7gv¬ ôÉ2Næd ®¹[Ö·nÝêõzGMk'‹öÈ‘#sssý~ŸÔ;o£ÏÍÍÍ^¯·¼¼¬“¹ §`e¸÷BLU—"ìöíÛ¶@t–™ÿÍv`«ä•1#O2ᜀêÐ:Š4E`Hi´EöŒšPºÃ`®ÃÐ+ÿ5÷ÕÐè!ŽCίT!ÆÁËH62bm_ÈІc«Pxél¿lÏ# Zò\迳ãrV9[ãû|·DsgÞšý²ÜzxÄ:Ÿy7Ï«r†šN;ÝbüôÚÎÎCÓÓ÷loïµö?ÌÌ|ëcîí½bbâüÜÜã33Sû„T³RÓ¤š4P@—LÉ&›X­Žcùβv½ËY À˜´”òÂw²ÉÌ‚%dæºc‰v¦B…Éb„§4ùJÐ%m©C¦i>cJ7Kó| Ãú‚]”XèzJbMóó1É]XXˆˆ€“§”\IÃC<éõz«««9ñM¯Êc5?ÍʳœË)w¼ŠX`ÓŽÙHÍoMè$4Y 9ÍE8ÑÞHx.ðÍ)¥¸L”5©Ä ÐÌc9O*ƒ\®mÌr;Ê4Î$ˆ [fÌX;ü/È-žÆÙí`o·Á, Þm«ÓSGc©ä£3ß/%Q“¿u‰^tàPýx#¿†DJþ¡ s˜´pn….zlr6<*ý_2†RPÇ©©©[­ýF·‹¾êííí•_ÎH9åR1ÌF¢¬“>Á©LÃà¡b8ŽEް¦1ONo 'Eª«œ$¢˜2P¤²sR¬®®²`‚2 ‡CÈT0§¹«MZ>6k!@’[¬C Ù`lhÇ“ãœðà¹Ü¾}7ñãÇ÷ûý~¿xAd5"LàF7–Ø¥ðòœÓj“‘õ©üy4x`*ZAƒÚø6«|Õvìkz“ly›Ž{”‡‹!æÙO—˦©–[ÄÔ¶¡Ì•êÜcUD¯ÅÅÅw½ë] ûØÇnܸñ²2’ãsÓIvu^ ša”¹Œ—»'7íxæÙÏ2À¼¾¾nAO[4 TDÇa¨YØØ†‰,õQ¾Ÿ6/=’îÑæ`4¼® jyPÎ{•vN÷rIi’ÑIFú—†Å¥³rö§ÓÒÑä=©Ì%xÔð!Ø#XÍg gQ“)c Vp0kk6Ùs†Ú¨‰I0P \˜§ýÛAC0³ìòI£(\ä‚ÔY-ì/÷]¿¦ñ™çÇ’s|gg'ñæÆÜmÜ1È ü˜ÂG°n)*ã@0êÁYZ½äò‘³èc¡éYÚ“Žj~Ž`×àŠÜð\s;è{íA"È8¹6¤u‹°–Ýw<kËÖ÷0à*9¢Y¼ÎæææÅ‹ÌÕ>ܯqÈ9À¬§>hû¶í¤ðœõˆ»*§kg½Ø"<2P•»/V>'ø™ÐL)c=·¢Íþ±o²¿÷œòa™'õŒ i°†õÿ³ÌwððR=9#Ÿ;C³MqL±\n“>12ûÄ9[Á!Ga€xRT3qlRðq'ƒ§5 ”Ïäô'o%½°Pب E“E,§ŒtySÓ–rž¡« #¶P(Í_¢ëföGg4õAQ‘!U'ðý/‚FÖ| ñ±YÏQ1|cá€bcÁvãdGçŒ*_Š!Ò>ÿ»Òmûj¹àoЦmFnœSÊ”@…pŠ‚»›µFJÉ·rñL~|n8°p¡Åæíc¸’ÈaàÛ–ÀÿØcMMM­¯¯C•4¦:9‡Yè”Arôl”Ùl ¶í“—1½BpËf*¢IGÇC9˜0 €GÐd†èºÚ®«+:Δ¦ñP^°%|&‚×Ù~Š ËÙŠ§[ŽÒÄZ/è²Ø”:=a:~ÙÎ4v‹ Ù†É›•NJ³Í¨‹®Ý‹ÇxÝ?+åx´Tu¼±'&ôBòéöÛééOž;ãën •vk÷a¿M8Ž­y+M–†À>ö³€%qßZ™46(øRMº !ѱÓ3èk ¤JP,{Ôš`KCð{¬› KŸƒëÁ3rë]oÄÕÅ7áÙNóFÅ©é=G1:‘c=¯7 ¬¼/¶ëÑ œNh|Y‡âqÈ9„c¼%¹m*s–â=ÅÅÝíví¸^ô‰IN >ø˜æ½¼ž8yaˆ"Øe}-**¿)»ÂRž®cLÈÉ¿“3"ÜË&ÏG¦¡ »º8°™§ç"# Œ¬Z¼ ¥a6!Ìüü|FmèèÝbs–’P[ÈÉŸ€v…± Víô¨‡«IŠ`ÊÓ€|vê…¢ÁÊîôxdŠ™®Ù†{Ë ažVu¸€¾QLZíni¦_êQ«¤Ø ÝϦt^s[YÂa§«Ùós ðLn8¤—2^Ìî•Ò-tr3’B!1›ÏBªÄt'|B–º³½ƒ_&½¬×P¾on©$7î~5À„ÛêÞ.ßmM49‡ ¬Ùh/Ujf.3_ä;œãî*³þ€‰Ø'd Ü‘ÓÁ‘5²ŸÞ¬E>¨o²­ÃÁõ7g ’ pʯN§SDkì2qeÆØ ^ǶV£˜€¼‹i¡ßŸ)s¶J¯×£PpŸ™ÛìseŠÑÜŸt¨“lĻӯ·€ ZØZÑ&É‹ ãÚ‹'ûžb‘lÂyÅÊŒÅQÊÜú(6N…XeËp. ÏdHÀœ|Ø0М?Dyš8¥Œùf¬CœŠ< æF:S>…oÉüiâpCĉîq7XužJÉ &fsvÛUȭǤ Kéhv»Ý&a'¸|>ÄÉ0LÉ¢%7B¤Ü'E¢{> £ ÞæÅ1Ð–Ò *tSXˆÔd¹`K52ÆPdÇ!ç¯ûË逕+YFààÀ;%©ÿUq41t›¥€®8kÂ_ø‚Ïf}X¬Þ­`{ˆ¹ Õ€²®;={/¶ýqBo{ÚKîíÓ±äé‘py¦Àråtni!äcz´ƒ3Õl餽Ö6µ&®çX]:3Ç!O$Fs¦ÆæS;TÀJ°5o,êå¯Ò­ájÁ[n³$8ÑJàÎ*ËÕ‡¯ ë`S›››©¼ÝìqË:ùŒ²âcûjgKî?Áyq¿'i ÜBŠBi†Ê®_‹õôn† mIU§…@9Å7Î532Üä/…IhÑšréT´ÙkEáûäÉ“›››·nÝ–‚Æ›ÇàÜ¡1(giQ{.XGÑ¡%%¾}äLý7!åãX;|Æ5uÁåˆh0ÙË“£鮆©ýdL½4ÍxÚÆÍL9çƒî<ÓF¶d'66;ÛAÍ(Ò@º—`z^»D#Ò%=‡:šÆì"ŽNFòbwk¸Kqû°v°Ç[Á °!\ÍÚ«ÑS,–%vÀ†úa_׋îu£û`5Ž›,̓*Âh9ô LF²š Ä4Èì—¿MñòY¼°L%Õµ“EöÜÍ.Ìr"UŽ[AÔ 6CêÖ#¢ó {U¸P³ƒ+G?839¦-ƒÆóBõÎCÙŽÍ® ó";àÑ Çp8ìt:‘µå§É-ìn@tÒ„qc¬Â³ó†#ê®$‡‰/29AÑ5‡œÃ™Ë±¤‡™Þi¤‡= “@nö/sÚÂ’ÄÕÍt,¤qŠêx“À>‹ÏÐ4VÊy;jò›s ² ]6®È"†D?šP‹Qªq‘”§÷ÓjæÓFæ¤%È©Mlâ+½VÍ}‚AäKÊâÑ™ÉÆÓÍÜ…ÛZ2k$®9³r¨¹@aƒðca•¼K†%í%fËšTM0ðÌ YŸ…Y 6l9Z`FÍ¢4ÏóÅ&[›"ŠÔèedQõû}ó‰-‹ID÷¬-4••2hÚ^§ü)M•ˆE7Éžn|Yf¬„¼`­ ïÓhgo#.ÎL´ËDíÚÚÐvм½œÈO+$‰´ŒKÝòç®´Æ!ç0ã ‡‘5ƒ™°«R6RT•°šwâlh({̲€g ‰ S2ë´³òHÞ‘â(Æ>wÌÔ¤gP4»ÝnÒ7â]„„4Zô>I‹BG Y'Q¤Tv(ìçÑ^:-SW$Å‚Ú46ƒ3M*vä­f¾y¬¯¨æ¯ wx”•(뵄~%=ù|?iÊ(ØŒ§åÀå¥pu™DƒÎÐAÚÒöÏÇárƒð)l ×_…Z’wäSÛ•1ÛcÇŽ=øàƒ§OŸ~øá‡Ÿzê){¥Û :MŽdiC:°z3û´E9‚ôkiiioooee%¡Îâùùyürì}WìÆóïÔdfßÁrô¼„%jÚË©2îGƦ‚eå—")wÉàôK&|oÊ×p8ôÓ‡œCÖ€ àA‚T,Ð0¤í„ÅÇ\é÷:#3¿ˆk+G™ícÒ6hžáøôl‹¬Yñ)À2‹r>gh·ÛÍõÊvã´@^|+–ïà6¦]cLsk$§€þ|X}œ†ÁY@Å€6µé=Xç±'mÒå¨Ô9Ê„][>{ÚØ añ  ã@Äíê1´è{Ò4åžxÓ*[›§Y4CéÛ}?»Çæóæ<…‰Ã”75–ˆY Å%S«`M‹<_ÉͱB‡kµÀS »ø•¡ªmŠ,e4l²<ŒÄrš#çÃVÍ¡ÎF?pë ÏÈîŸÜOvŸQŒ<¬„ä:ÕE$µÈ‹%Û@ÕÛ®Û~îãsÈ °–#§ G˜3;£ä©²íb‹ÒWÛ[#‰6>[Ô]]›ä ,西»»¼ŽÃÔý³ò˜Ëc²dvvöôéÓ{{{×®]KÝF$³¹/~N6 -6Á%qñn!‰ØFD|ýYèoñ·¡•‡3¢$¯ÊIá¦òqÑ»}1 IDATÔp–é,÷œhŠ’&I±Ç0Ñ@ ð  ÏðR¬˜]`=ŸA«Üº(?HéûœYE·É°­¾âÁÌÌ&+ʲ$a½^ïŸøÄÌÌÌêê*œ:°,wSŠé€“ž piG‹"ÉjЕÊ`uuÕ6kE€ÅLâý›¸Å)>“¿ÍSet·Â©i\Œúƒ³0ì²c=§¿æ˜O£k~Íè–‡œÃ‰7Þ]œï%ÁlZlqFÒð,»äƒÆÓXg–Å÷“3k³N/¡Ip“Èd ,–Y©¥8RbGÿœ!s^0‰UXÑ&ƒ¦~§i"²­Ã’Q,óqŒµ#¢î€Gžþôt2PS¹ÌðÍ´À3Ñaø<²K˜Èã(Ø”I"Å7'W¥yŽã@­ùH3!VÐ#%IçdqµÍ»0fàÞ2_åÀ-:ÜdÜFöJúå¡×Ì6Yl¢ÉB) u𮹹9~`^óÖ­[VϤÂ+Šúôý"üI*°â/UœÝ³à#øº'£Ë< Wc­µÁ`@KÕxFq8ô7„ÚA¡B`ë¦)ïî./öê°üàŠŠ’_ÉXIúÛˆ´f:)6 Ì|(ÆP&8ÓÓ¼qãU“YÍÙ¥¤ 5Á9…ý­—¯G#slE<1PuÛDÁÝÇïÈYlóºÇ¼0Kâ ÚøL¥ä-r[ P‘¤ÝŒ5ôçÉYð‹ð3ššðféË0Ó+¶›*)çæææ`0p^‰È œ…ÌpXê†RŠ×¼&‹dVKþÚשh>‹%Îr Ø“ŽQîhvvê‡Á.áBúr;0\ )yL$g%¢8,fy†K¸Úñ`ªð}A~@ù iØí™XP“’Û –4‰CGh±~ g.Y µýË\“"-RºVôA騥R,ªl›wf×gp‚´˜,ÓZyv eÎE' ø8äæôVóÁ¨ÐižÛ>”ŸN]\Òpë.[6´H³qh‰¢PÂÖ5;ª±¡Vp™¥°f33¡Ö4ƒ¦éÞ;ä1v©%v¼Ù„Þ$¥IN»Åsí R=­Qcw–•t²VÔDF¡!kœØ=”¢í"ð­SBói0¤ãEr]<‚¯†ï@‰YÎe+ñ@#«š˜]dö›œ&Ö××¹fŠ'ëôðÅ­3wÑP’ &^é÷ Ñbe[“ú˜ìášÑ˜@É‚UŠx‡Ã ìpx"¯ƒwQŸòZµµà(IÝ©5©Ú@%ûÅ4wËʦ¦»æ†¨E,Ž#·Š ý<.aól;(Éȶå]žl`Œ2Á:9‡¬|Ÿ•j)£^¬Å¢¼dÚ ÅŠ{Ú 'ŽÎr¬vìB˜•Òå„ÒIàÖ½5§D=œ¯\Õp]Øf L.r“úψ6Î"/(ZRü‚EeŒ=aðofÏ$OO®à«²ß‰7<Ç©>PŠývp>ׂfó‰ð•iš·-dnòtZÊ#÷qiƒK¯1OÚº€vªdV±]‚h8{lÓt«Êz‹3˜"I@ya Cs¡&gVÚ#nd?δØ)ÑÅ(SCC.w¬áà öh‰?¸y¶ Çnnt~-¨€ «é˜Ðˆð`;8QÃÂHOì–aU0L#„¥ÖçMíU3i°ƒu¶¸‡œÃ$IN$EOÅRd:MŽ£}<û›J±ô]¡»·a¨Ý&¤žR¶ Œ1"/M«ÓãúH#>í)}ú7£ð4°B$¹hÀX“ÛžZMò…öαqÎÎaö ü“)šü­„ÌÌ̤9TÊYüfL›&‡ qŻ۰ A³ÿŸÞ’…8J¢ j†Ÿ³€µ¢Ï7íÓå)×âŽåYMg*Ò×>¾-âàfUž KQîáÁ1úŽéôôôüü<͹d$æÓûã=£¥Ç:IÁMéÙJ±Ù];í à@ð\H1кßÚÇÀf6H’?äpxR¶kÊ+˜Hídƒ9Cm06&Q°Ü.Ïæ›ÐýqDujèYiK7É®CΡ5r"ÅáIúÀLÀhîsX_ÏÐ*yDTU||ƒ áX“ß±”U89ÔX|%éc3àµNõT•¶<ýmáÿ—[·Þ¼½=œ˜8¹·wÏÎNk­?1ñüôôÞÞÞ½»»o¼óΦipož&­ÜÒjÊDH$}›o¬ÇÇÓ¢9[3‰’X.ØÒÎä¶9¯y‚M ”SF’Mw»]JÆ9Ë­'øÔÜœ¬‡¥¥¥3gÎ,//Ÿ?¾ßïçRƒ¾ ·ÚKÛ-_ŽþÍ9åÞµ§C8ñQšiÒçäÍoš÷4ôgÐ&w»8ëÐãä›jø&¥§çü¡/ÕâY‡ã¥Õd±Ê3MÑ“Ñe»¡Uì‚hËAÒ‰Ð*ÀÙƒØ;Ù¿ ƒ è¼Ð 4í acùàp¾‹ÐƒÁövP)Êp8––€€ aÉÄ”MÈîa;9/…è+̱cÇ ü[ot¢µÿúرïÙÚº{bâ¾Övww{­=75õéÉÉ·¶ÆdŒÅF-“$íÌ|QÿqüÁÓãìXâ‡+Û8¦¹Ö,ù© U±1„m³Ùç™N§7â9|ÏŠZš3GÀ±cÇ~ôGôÝï~÷¹sç~ÿ÷ÿÉ'Ÿ$ë÷³ƒ!mô5Êk`†þc~”ÎJÌýÚAYh#N ¸9{Ìoúu¬áÏúGS\ ”e§qu ÊÂþ+†ÍÏÏ{g™c–HFœ kª'+b\ÔßéMšµÌ´ ëüUž‚Ì[¤Ì-µØl+ÆœM:o#z$ÁNI@a3¦ßÆéD½È¼Q朌¬ŽCÎáÃk€×N̦ÜðæN„vÐ!õ­›íÅJÙ¢^^LMJ0(ߺõLW6΀ázÂ%ÛÛÛ›ÜØ˜níëëÿÝÒÒW¶··ïÞÛûå›7×fgѱõP Ç.)­Ý¨ÖÖÖljBù…¸ßÜÜJBhôòûeo§7@±ˆ›Gy,èmz~~Þ¾#ˆAÐÒàTµ!ŠûLEÑÅ£'N¼ýíoã߸´´ôÈ#|ýë_·ÉµWÒÃzÀªi?4y-ÛWÆ"FÝn’˜c©nþ XÇ oá¥, L´µµ•g騔‡d½)ð¤ˆl’CÆüÉ31”ÄõBJ4ÕÛÚN0 iºéÂÛy%»#eÎ[áR§àQ!D«Ý˜RB©e “{JÚÇTgQÞrkmnn.ÇNªjØŠw8ê8äf°aY—ê>ÊÝwß}ùòåõõuš9/ºÝ®{wLwŽÖ$«C&bö”‹LÐ0hÝY±x> ÞË}Ú0©®]»–ÌLº ¿ººúŸ.-­>ýÊ¥¥^¯wëÖ­rüøÏ¯®Þ»vsšdšLžh#¬BóŒzé帱T°ùB„j:md‚–´âßd—Ùi”É'4ß8Œœƒóò¸_Vt{{{yyù+_ùÊÉ“'_xá…sçέ¯¯Ñ<ì°趺DàIŽæ ¤±Ožžî÷ûE`Æä(”i|„¹´uyAŽÅ`ci?o1÷)‹µÇÔþê5FhÒ5 ÿ>~H.’ð´ ’GL’ Ë`>§?Kþp2[¹„ä7ß1ï”qé&6b)”¬ ³¨Óæø <)Ps)ôý²:deinn.tj®uu•f›¼Í¡8D¶qÈ9¬™ho’8ëÙ=—–»'EœÔ°¤B6ÿ 7g|MbæäDlç,îd¸HgàܵNÞ4ÿc#'é«wvú÷ÞûÓï}ï;ßùÎçŸþƒüàåË—îîΤ$6ò7ÑGáÝáì¡’ó"\¿ßw—s3í®P˜ *BCB,À §^«¹$ú?Ë1˜vå½mÐZ*Ë€gwûöí?øƒ?ø‹¿ø‹Á`põêU2Œœ­tŒÜÁ¶P…Ë…ÓÁSN=ÖÏ(å2‹“ÉJpÿ¶¯dLÅ–JËFŸž½'[‚ÎNDI‰ì¬À9(b¹Àˆå9µG]–y5€´£ˆÙ¬ê¢ÖCVÁ0 `iÎè¸ù‘/zªÚØu ¸Ü3\ØwæA”È™«"bÁ˜CÈŠV|9dbºPöAOg(ÿ5Ÿ):gfWŽCÎa’¤9©I…,evýúuÖºÙŠªÀp¡BE‘4#¹Þ~¦YÓÃ4 ‹Ž·IP^ß¶¦çô ãÙ:7¨ºåÚ̈å [ZZ:~üøÑ£GG- –±€ì´p’†3×M#$ד=@‹« ŠÚ†5ß„ÃmUiç€f}49±‚é™HÊ-››K^ìª(éÛ±øÿÊÊJ¶=ˆ™á¾ÒÞ+>’¾íÀq5;Öë 0Ìa³ 47í']fz<ñjo4>{JS§Nmoo_»v-kÌL-ÆŠÝ8 ¿ h1†!›ôìÑè‡è‘l)ŧ`+Å3â‰&J:™ˆ÷8¤å‹q™+6}¼ÔÌØÚzÕÆÆß9zô½««_º|¹µöäììsòdkmV\€"ˆD&÷-žê¥ol¹„Tˆg‹BH£z „œ8qâ}ï{ßÒÒÒoýÖo=ûì³ác+ÇœGQ òÙÁY–-×étî¾ûî›7oò óóó333½^â¦TB/›˜ÊLs+ï>77Ç&óÿ¸B” VÎzº\4ðm›DÇË ~·î›\˜2)„ò&YØ|:~Ÿ-pôèÑÁ`¸É¥•Öúúú“O>É, r®0¡¬+qJYfZ³•m‘ÆAt•tÊË Ç÷Bkrš±Š ¨5[•¨ìɤüVñÆÉ¢ÌÒ,l£pA=%͘4TnÍZ<;Fá‹O›¢fõ`²—ëÞÞÞ‘#G•°·´ó¿œæÔdÖÜ£{Dßhvv¶ßïÓ÷² ”åš,ÇAÎü4 r“€ÐµNÒ®<êc¼Þ-P\Ìß&µ!UWºz@Î)3—†˜ˆõª¹Ôb8f¬ò—Ç-yTäVî÷šÜB»Å†“# ^úf§0µ@bkŠs;䆬‘•Ä”ƒ<±ˆ‚c´ƒ*a¿73ó{33X¸cisk%mž–›}~Çwôû}ª–bªf'wòÁ3m?š_[]]ýÜç>×ét014®Rüx,qèPפY—“‹«‡×®]Ëædt ¾ŒAŒ ;–ö²Çb ;¯fÃãÜCMÊ ‰)^Al¬plÅR7ö šãÉÊ7|LŠÝÈdÜ1ÚlžYR=6»4ùÅÁ›r¼ÚŽ£zƒüŒ4Kæ=‘&™DÙæp—yj㩜Šm³ÝF<‡ä¨àKå&Ó l’¾µ»Zù°5FÁj±Ä2ŠÀÜ+7P׊Q¯G¤G%SÇ!ç¯;ä4Ùý&‰#ð$–±(J!I³|銊š³-ÚS²ÐxÈP<”—Œ¾í»*àJé Æê-ówôx#rež (DÒ7hoEF³¸×ë}ýë_‡ä§$ר°©En¹Ûíf¤€óˆ´ÝuZpxç8+C²n- üMÃ[ç:¹‡ì~¿o™¬LÝû”‰—»ýXÁPdÉ_˜ Dk¢˜6’†ó$EpÓ¶+þeíhøck§B1n Õý NU\‡MÉ3µ:=9,–]ÍäÖås¥ã«˜ áÐA` @¦¼ƒ€ÀM¶‚T ;°25æt@òt'%Ê'M.h4([Ä3KB¬'ö‡îO42´˜·f/P0å²MŒ´èY6c‘ `;Ða%*ó:ÉÛÊŒ³ËA£#y.ƒÁ ýà&Á_¸N¹à4æ»D‡œÃlç`ŠøãÜg æìŠÏÍ(GÙåü(Á?«ÍzeV‘âtCк ŠŠ-²¥$ñƒÇiªä´=Ù±°HËxšE Üžõ(¨çàz^È ÌIäÒÍúT£làŽòj£˜' 7ªLY'‚ÀéJsƨ3¸ *^ö¯$ÃuªÁpŒïUÓÀ9“&ÓgUÐÚá8¶Æ mè¼BŹÔÊ< KùùÖ•î·Ê<·Á Y9{´Ëmå'd Ê~)v¥†¬¹i~âô´(Ê›¦³ÝÎäI¥pç NBfõ3 mxΦÀ•,!A7™—Y=nµùèÆ¢ù5—òMþܰҙ=ÊCN-ôÂðˆ¦pêÆ!ç0«´gŠG2¼Oú(&ò{ðÍ4JÓuмä!öxÿ[2 Ä*³ï½ñø¢?Ok¡è]HÌAá=“ìñ:‹“æõ£xí@‹¼ŠYvžŠ`¸ykR £ éyx6"wžOÄdŸ³u2_3ÔÍGô¿I™ /T;Òg:½PàŠœ“Q¦íÒ¼a/"uÉßéø„õ,•±!Súp«©¥l}m] ã„{C[öJoÿ9ÓƒP`¾CÑÝñiË6!»Úé\ͦà._6x»eâT†Ú+á'§íææfV²éï…ëåÎ’½ïËÚ˼ªï¹%-2ÖÆëä QÊÓWæ‚6éWü(šKÉœÖp½]|<Ž7,bzq°ŸA«‘åÙ KïÓÖùE¬ nÐn5}egg'«?oDÓÞr„í »‰rêEø€ÈŠgôa{{;f”FØ)±lF­ÑA1ù3ö?ðœ×èÈñ¡,2fsâ¥ó8º5óóó`–·)­Wº÷Œw3é¢6Ì3v\~Ù–6!¾†æÇä(s@<ªIÎnü2÷~YK%­ñq“L"=$S×òž,e|¿ÑhÝo?´"l\”O=OH0Cºí+§Qä§Â`‰æ²!þ¡h@ºPLo#å;”5¹·kkk9£Y·¶¶Öï÷wêzÂýec$UѪ séI5sXfffîºë®Ó§O#ÿÊ­`@›uk¹ÏäO4o\ BBo÷ÁåœØÓÇE1YW9‡oHL˜#c,`t1@Á¨O(ò$®µIèŠB"GmséÙEi®šÉÊqëž.¼{l\k£9–,lŠg‘Ÿ)ê# £kÛŸ4´ iWö97³hØä}sRŒŠ“ú(ĨÔúZîåÚÜšD•ÐXNUŸ×¹<Š*<Ú0{F.šÄ£îúÀܼyóÒ¥KøP ®FîIYÆqIé€=0KÙPûì¹ë[0"à8l¡¬øƒóÖÉú‹5g*Z%fîšF /ÜãidcäïÜÜT@ÉÛH/ ãüoêM®yˆ¹Wüƒ?O×étƒb‰…˜eÇ6ÓØ׃ஒi/—ù°SSSß÷}ß×ét~øáŒÐ'³µ§È¨¼#Njl¯iFµ(Ó7M¢É;ºÆ!ç0j=ñ#i5;Y°‹u£=X‰!†%M+Çý+óÖÉìo,»À™‡êN†? hXq„cÖ=g g:#ŸÝ¤üÖ-R¡e>1ûǃ)|®¢å^²Z‹†™Ñç§Cg¾H ; ›HFÎkî5\!_‘³óa‘òHD©xF Ø/¾ø"“FYž×uiL€q‰\lu`1*hY~3à ûÈ@ü¼Wñ[B¦4´<èã/Ж™fÍÙ¯ŒÚ…:ÞSŸ´Ü±ÖmÇví§YFÄ’Û1žiYX抆Ã!’ÒýEh‹TG)²?{r™}gÀ0IÒç?ÿùÉÉÉpô-’ ¼énjxŒœ£ü„¬8UŽ )4#á‚Ë…tÇʇœC®rÀ¯S4™ÐpžâŠˆyF¹–ócfÍ]w3šØ$Æ…¡¹í–¸{K”ÒÁ%Ì…#³6ÜŸ’)^wï; ÓØ º5ÅÁ9á"ƒhÕj°91SQåÞBTuWÃ’?€P’Šê”ï‰!2síBÚZæ…Ðl{7·åÀB_Ú-òô¤M•g½¼¼ì£Ê€>hî 4ÞY'Î(”-¶Ä²¡S•ƒÛŽË––¡*ƒ2¼Zé]ÓÒcÀÈÔ^ÐÓ-W-¹3ð@Hù\šfövb@Ùr,÷6x ´ˆJ g58ó`000þ?tÑÀAÏææ¸È<ì2Ú··nÝò¤…Þ›‘Fî,û¼#H¸64BÌà[kA¡{½^Â- ßXIúðçr¬*”räææf§Ó±DMÛ™ ¹K SÁJ…kRƒ2EßÂî)î Z{ ˆÃ4¨“l?ÿ­‰7÷<ãÖívOœ8qëÖ-¼èÁ|HqýE~ŠïÐ*qö’[šøq™7ÈÑo:@lBˆÌÓtÎËn12g7Ó”§Y ÛA•L¸x cd0³™³xLdm„òød“òE“Ä}VšIÀ–Ö/ •ƒÚÈÎJš¼8x Iƒ‘.“,+€¶b»egÖE7:¯€Ú?²(û–q™vÐ.¯TÀÌKu:ÅÅÅápS ’§r¯œPò(‹ˆòq®DM¹ÎfÖǶõ}‡+»f_Ñ´{ÉT iXÛ°t¦§§;–>_©æÇ!çð«%8ÎZL7"å-s'‚ÀßYCÞcü¹Ý õh#V.±Ùi°³8‹©÷?ry–œ™™Iƒ$KŸOGªe=´üɱcdžÃaŽ0fÐ<Àlæüü¼¥ÑQjëÙ&]þû#Çã¬ÅAqQntÔ½y$挕hÇÅP›ÆÄ»‡Ð=¨ðÜÂÉn içà$Í»ãħ@´ ãëæG™“Rð@(OjIšp Ð`¢aÿâ1jÙ) Bk)L‡çvÐ*"l-”˜¹çBMꥌ ÀÉ}@ÇÛYÓýÑ¡!<Û!Æþc6ZÍ’v(rÑl~h6Ö £Ž|óÈ´Á+\;³1d;d6ÖÉŸíÞ 3\Œ‡­Pª¢d&Iæw2²ƒ¶!b¯có‚ïrØÞd¡¡í±Á,‘¤3îãY¶È’»kæÄ,òGÎÛ6‘Æ”¤vÐbÝ£ìž*'2Ô^z†ÃáóÏ?Ÿýì&]b…Ð^æS»æ¯óß IDAT( ØÒªiNDìßC¸Qà<ý¸™/+ìa % ]ð‘s¸ëƪÀ&½ûÿÖ1¢+“OÄiËœ¿p#]uÃÌ“$¯R´ß¿x$«X™™uiŒêÁaî°ÕzJrfQ¤ÄKkÌÀEpR¨ÍÍMø/.bÕ…Ò X2w;F…F`‚.¿iníL³rÓ²èÓ˜³cz‹õ ò L+*dª—€¤–,¯m·÷œxAa/ª,×~¿/c®vt,irAàY" G¼kmgÜDÎ>7ÏCŸ¥lGúÞ8ž3.Ãâ+–å(¶ƒt²—pfsÖã$ÑSΤrdÐEpOÞe;ƒŠprRÃ1Œmʉ‹öáFëïÎÜÀLá‘hs~ù|ôiëhm­RO±´ƒz9§Ìí¡P\ÃÍ€w–šûÌëç…Sß(ÙRF…Áåï›èy”â|½ß1#ÎFg¦SbØÿ0þa…@És áQ_þœÊ 'i¾.\êH=šâÅQ ªIÝ“!|šDȸI‘½H™¹¹â{ëÎsFE=JÇÇ̰È4¡‚AƒçÖB5óÈ鎟] f,Hˆ0¬7”3¤¼PÇs9‡üEc Å} ¯Å”´Q^×d@¬ÉǺÉ3£xñD0h?.³ì©©_6OI -21»=ï5*׿† ­Tψ˜ËaGäN¾ÝyU¹O·‡àäÖœ:æü±ÕÂ\™€JÛ}„@N‡!s7ll%É€HÞ_çl 2†Ìòð‘[|«‰Éë†Mfôå>M“×CÉ ¬„oêv†‰C ?¬:«+!㮃©V–Þ°÷ÁÏ,Ê8VØ9ÛŽ4ëÊ󧩪9U­ÿÆ& ƒ?k;+Á®Qð_Pñhå šÆ¥ ÅS‰ü´Ûíš*©3“yõž¥Ç“<Œ”÷,Ð1Ç•S®Áz LÏð.”wt½êà5xb,¨]ö‹ åÞ쇈­«œÖ†Ã“?þÃA“ÓiOJÕÚæÎιééóû,ɬ©©©ûï¿iiéÙgŸ½uëV¦fwÅÊÌx3ŠœÐétbGæÎD ñ‘d¨ ÏèÈ28’mBN„If-êÎ-íG5N“AsF¤r÷7 BMjÌêg”‰ä›Þħ4QH“ êp¾­Ïí†J¦í ì?}b|ôF}ÁžR ?ÐÈaa3s Ð”j2ÅIªî)«&—kn~' ‘8‰ºAœò@=>UÍS°ËƒõÅ)¬ qVºbðCñ¼WQÄð̼ \LRs†žê–kКsü˜˜˜xâ‰'ø©YNÔrLC‡Ãí‚$ ê?- F9 «Í9MŠEíòW'NœØØØèõzÙz&"‚Ê–rxs9êiûgÆ?¸nŽ‹\?*sL³ÚGªx¿’cCÎ!}]»vâW~姦&''ÿA¯×ÙÛk­ýþôô7&'_³»ûù½½_k Áüüü©S§¾ùÍo:—wyÌjЦ‘7Àw5<&ÂÈ›ÖXvÖM»%=Æœ€]M"€\CÖ«Ù\AŠJàd¬„„.—Ä}0¯×;>`%.Aç?—ç08¡|('ÃÍ}3¡™>ÓD-EIÛ7€ xØœ±in×ÂÐçœZŒÀÓ-Æý9³Šc;(Ýæ‹,JwÔ Ü7”X™L$£¤°÷¡[“oïλäqóÈ ,S‚»Ï-¤ÇbGáÈ#0Áƒ,G&Ëð¤xÊ7nܰC®QÖð¼§E4a’ág°´Œi1‹Ñ‡bé?îÃÚÚ"uŒ%þP&e³~µŒz(¶Š`9±7 367!Ñ«0 íèã•99‡óõôää“““ïÙÝýÇKK›­ Ö×ÿæÖÖÂÞÞÎÌܽ°ÑØœ˜˜xá….\¸™‡‡Œ’Òó`{G¼ËàuÁ r¬Ð&¥Ê)Ó$/Tñ.ù ¾’QZ6nløÂ]6ü¾–óñÐ8Ë\°[úÚ3Îba’„à ÉG»ÍرLwØÑÝ 7Ÿ>¹²ª®ca%+½òÖ÷ÝwßÎÎÎ¥K—Feêsœ!Na_û ó#ró,»ÌYOÅŠœ’0ø .˜8å­rf8ç,Á8@“Mq«¥ÑY¤¯ðÀSÕôÃ8ñ’±‰’¡IùæÕ«Wy¦NØñJÈ»¸Xôó"B€øw%êlo«Ñ[jº6¬Ñܽd6Ñ5À“4rD»¿{FŠKOÈOÐAËó¡|(˜Ó„±€xäF¬aR¨CäŒCη¾f÷ö^»·÷ðñã_yõ«; gÏž}tm탽ÞÓ­íœ@Ì¢‡0Lh.{öÍs÷QF‰>,2½á–¦ÿ¼¬]¯œà£ƒÍü&²I”—hJËäŽ;›»}û6fb1n8~üøÍ›7ƒÁîîn¿ß·˜WfˆÚŒµòA 5¸±\¢ -ÜmhèÄËß»éRÛA(&x‡ÝëgÄý_\\|Ï{Þsùòå}ìc@(ÑÜ1_I·ÛÍ+c¤Vœ#&å Êm±Q#ýfùO<úШ àM3JŽvTŸá\„ `ÞáúÆýv뎯 ›ñA‚9ˆZÍ¡X2[ˆžP¹W´imCWˆ (2‘Êæ‚@ájÌ‘ Â^jwcÛ ›VH†µaýP—ƒâÕq # GegHŒZ·}%7:©¬IKCÎá|ýG;;_[\|þ-où/Þ÷¾£G~ä#yøá‡ÿÛíí/÷z¿ÔéÐRæLLùbš¼S þ;*¬|ÐÞ¬O·‘ræ`źªp]šäÔY£öF+°°hèçÔ8yòd§ÓyÓ›Þ4??ÿÐCAdÈ«­¯¯CF°Û07Š–/‘´@Þ+ȧåÙlgÖ6Ä$m‡ãnz«{0€™–ß±¤ãå±-¨hëëëŸúÔ§666O„`¦§í›æe3]äê‡8š@n×5¢ ™²ÈÙÙu©Ô2%šÄñÃ-Eü;ŸÛ`ög_¢yP„‹Šy%=0SÀ©hó‰Š×Fq¨²ÂlÀXïJIOÀéu‰P¦% EÿÛ›½¶¼édŒýû©q1<b3^ã¬CÒ‘¶¿Ñ8äò×]wÝõc?öcïz×»"%ðÜsÏí ‡­×Ãò„“³ŒçjšEmŠU,ùå‘uãþöÒ Ÿì.q“ႹÈÖÌU:)^ÈTfe›­¬¬lmm={6cÏVz{•ß³xÆLHHÍwó¹(3&n¹–ô¼˜„:õIäZÍ“€æüå¦qŸÌçEÒÏbG½··×ï÷¿öµ¯1žYì)ŨhE8 àVä0eä÷]§rOJã„eƒ*>ÌFKq3Bòaº¹‹'s K±H<ö\ÕŒs2³­|ëÊÈs©f°Ôc¾Ò0‡2 ·üyÚ{¦ÀpOˆ –¢vñ>BÒßc’ØÂzÀ,˜&Y6d¹Q”±ry!‚znÏ:mÞÑzíÓÓÓ§Nzík_»±±ñä“O曉j@šàÜ‹‰…øqÈ94’4&ê7oÞìõzS!¶Ë$ ˜{mm­P³ìò2SøHÁBú<~üøÚÚZŽïâsìža5à)w³Yë\°¶ó\´sUz­V»š›› „>ch¹CUH³š*žø¨!m(ÂJò™hÇìX,¨ ªÃÕÒø1‹¯ŒSÐ*0kˆ,Ø%Ö0t}ÇÊÈFA¼cìéáGg·Ím5F.Œêצ Õz˜^Z\¹æççMh;u3ÏùM™–…ÁÁxÛ î®»A‚_'÷!œÉ FÖb`ƶiĘ ÏÅ(y­ù`è8 ;”&c³“)‹ÆcÙw6Äb6—è^€\àD„6Xئ–E%b¶ýR ]P±ÑE½ÿþû¿ÿû¿ÿüùóÏ=÷œ¹E°ZÌrß6º0V’>ä¯OÍÍõ¯_ÿ›W®¼xîÜŸ>ôÐC=Ô¿páßöz¿Ðétwv¶þöŸ·ßqÀp3–æÉ“'ßýîwå+_yôÑGmŽkúØ „–FgWäß&ìzÔ.?E‚09ŽÏˆ&O—\i‡"Ûή[Ùqã&ë´¶´ÉHîíç0!Øù [÷—c4½ó.ðÔ›½±]0Ao³Ã]ÙdˆÀ”sh×[›À#pUõƒöØGÕcU9…mCÇ™®¥kˆŒ $W€+ ¥î¤ U†ÿy"¨lÌ¡|£³Á’gð”iájãËèv»ÇóI'¬Ú¬Œv ¤¯ÝÝÝ?í÷çvwÛÄı½½Ù½½‰‰‰~kƒápbo™ŸÛbG:ÓìyÈ]…2Ì@pkÊìvª .ÏÒ™e"¿ÙívyÒàíÈWÛn€»wýúõ?ÿó?¿zõêòòržNöc!°]xÖ€FöÆ!ç¾Ö[{nròÍ¿ök½K—n~úÓ÷_½úŸ­¯¿ØÚµû&&¦d KR:d Žh ©`ône^¿~ýOþäOÖÖÖf*R›fÎãðžq¢Ê5 ‡ÃðJ_‡=ŸCc“L f.¬GèA‡fÍ—ù“jÀ Q…²14ouÙcÎËxSúáíàø-ÒU®ðúelˆx0;;{ï½÷ž>}ú‰'ž°Y¤™f”i¥ØöŠxã2ˆ1¿™^TQ€h`Ÿb!:ç;vß}÷ݺuëòåËY ôÕ-!ÁøHšLPfù>e%Ù=âo 6×Xmô*áŸÁë-%œØÁÎ~†Ëèó—Ow"'&&æööþ“n÷oLNþðææ«vw÷ZûÊÔÔWffžÚÛû—ûDJ¸ÑÞ/&ŹàÈNó›2õqË{“OðhŠ+<.MÖôdf™?ÌÄscœ-{{{/^¼|ù2rY£~Hù}\Ëxò!òÖÆ!§µÖ¾kkëþ™™'û{üàƒ»»­µÿszúÅÉÉ÷loIé¨vÒ,î™È ¼nãµóçÏ{ÀŸ2‚,f†è^@”´á é@`_ p†kp.~ ž;cká9ŸhaûƒÇ/ë– A6ðå¢nWÄ„`Ÿ³CìžÂ-åT‡Þi£+#¶¿£»î}h`Çʘ¦'&5_i2ÙŒÈZÑœ¼ù:zôèÚÚšliu,--9sæ©§žº|ù²mô:Ža¥´+h}ÓxàÜtBP4¬ÀçÍcºóÎ;®^½ ÂmÑ–¤å9Üì’` Oá0ebý@¤‰Ö¾gw÷ç66~®Û}ann{{ûíÃá¿éõþ«ÅEoOnºù¦r±~˜'+·™î€]~;z“T·L­ÚúŒa”Í´Üââb¿ßOåjng—ÙØLböpâHÒ3V8Ô¯S§Vñ¿ü¯ÿu»}û³GŽìŠoúµéé§÷{9dî.,E0å³È:ô|÷!¡H’·T1_%"(ÄS’P‚¡‰ Ü̦*ò”ÄKò5Ä•­— M?Ö"7¥²À%Õé®-+L‘ñ7Ôj>jÈí§™•ãÏp Xg G`(˜qíÚµ«W¯Z@$|’q³àüYÒ•AÍ“§CÎaâ,ÑÚŽ¡æ±rìþwûöí³gÏ^½zÕÑÚ@Š]“y—€l7÷ƒvÐÆ­I-ÿ4w^Í\'8†£¸QL†lU^ÄýO/åa?~üèÑ£É ãbŒ„ç–?~%SÒ‹2¢—([,ˆÆ!ç¯÷«Û½ü–·|$)ØÄD›˜ØÛ?¿…Pí.” ´‘ZñieeN3îà\ÆóhÔYUá¡B&»Áù†t*¶…)Aì^P{´}¡¹&aæN§ƒ¹“C]ç‰æ­æ¬'ß{ö[Ýn%ì NüQÊo;¨eh;€·‹â(ÖGO®3ßgpÈÑcù…qN GŸƒl7G?¯æ®»ïÕúúº‡…Û¾ÕÍæææúúzìG‘ €jEˆel:M{ÈZAl ¤˜Ëï÷û}û91¾óôÓO_½zõÚµkyŽÀ_8wëS1çïYÆãÍ‹ñ°NÕ¢*:³­}Wkk÷Þû3?ño~ó›?ýéOüãüÖ­7ol<¾Mùe"Ÿ½_ÛÁ!ÐèQAÈä R©˜DG0³ÜÙ¡5RQQò8­©ƒÔÓG’N¥Ø-º¨6€—œoqq±µÅ,z¥Ýn7èNøÆUÎ!¹å,ȦrÃÅ$“‹ÌÚ,tøvÐS‹qÙd—xv&„¦_~ÝÇ\Û×€2þ㌛‡n‡' 4s‡<âÖ=K3 rU¼»}6¹&p3 @ü+MQ`n‹µ¥GíÌwò¬¼RºY4ÚÔÕ ¹Ì%;Ñü@ã„2fb í lL~™Sž²ÌÞ6ò¡öm¢vÛwoÚÙÙéõz%®NP+‘\$H/pV>cn8WXt‹yp¹o/¼ð¹sçˆ"ùD‘ù2e+Ë,·ÅWX¬W»Ýn€&“< ÇÁ–nû>¶n¡Cƹûî»ßô¦79sæÂ… kkkÖ¶°=®ÍÙ¿h²aaG€Ì˜ñ§mÒqwñJ{ÌÅ=†”YnæµÖæççÉ{rߘ[¦XŒoo=Ž©y"×®]+ MîörªãsÈ!‡´Ú°’[ 0>ö€®“2ÓL¥/Ç+ƒÑÑìŸD}¬Àÿ)Jk¥#j›Ðy€—œ×VåâwËÚpí¢‰ÇeF‡[.{Ã=çtnwQý°ù91©r²ñšcA±L´5JμÓ‘¼Ç‘†×áfBLÃÇÕ›[Æ9-ùê5e79 ì/®WÂJkÊ V~“IèjM:iXi °gv Ùdîl¹²·­FnE~Ù9²¾¾> šl ­MçHÉ>ÊŠÊí%r“Eíì쬷öÙÝÝW<ûìC=ôÌ3Ï<òÈ#7oÞ|ïpøá™™WïKA#t‹¡Yé&¶ý¹é™™™ÅÅÅpÀè~Ùl›v¦}QIhlRÕ4Z'4눔ɻ„+- ¤ò³†’JsäAo…G%äf\ (—nQ5ç,¶ñmºdÁáí”)è\¤%|- HhÎÅ[‡”V9¡éuŸãÀ–W0½-ñ;ç¾¹M®µÑµÉ]6ÂÊ]ÍqFÚáRÌí(×pFØ‹é™%phé¨Ê°žO«#›[e8gÔ†¦÷ÙÀ¹½ypþ¼TŸn9õx<Å’w¤VØ:ä¶sÓrÇŠ›ú4ÀqNçu¯{ÝwÞiÿÊ>³Ã ÙÔm «³ËÖ'&›žþ•+WzögúЇ¾ô¥/ýx¯÷Ï××ÿ¸Óiò@§Ù"ë»ó¸———c ™ÇÁt”gtÜ É)_ˆp&1–‚ÞøGMªø„^K ŠTó܆»3ópÍàu0ªä^Àf½Ž«œCø2=  ³ ÌŠ¢)eÉïÖä ¢¬v¶•nAn6§Ïh®|É ‰m¥ f'$éC8 }#Ò1®,bì¹QÈ3aSR3{ogß2?Ä  ¨ +!(§þÀåo„ÂF{Îå.¾Ëk2Kè)Ô—å1ÛAÁ<ÍβÃ&¨N™µƒu.,Ä6jSß Ä•‹mA©¹IhÈŽù€ô½9à¬ÿo—¦ \jÄ„¥ÍÍÍçŸ>ý!ƒÏ$.¸¿Ðc§Ž¡lr•ÿ’¨ekç§§vròç¯]{ÛînkíÃSS?Õét÷C;4k@Âùùyt˜ˆëÈü´ƒ¶XŒ²ùèg®+ŸÑUˆ]Ôlzm¾eìtI³NÖ××Ož<¹²²â™Ó¼£ q™²­’¢Ù]—Pä hëˆtwrXsWÙÔ^WV1JŠWBfˆycs(¸OæÆ4ƒÙœì@ÎÏ…}%ñ B’ñ:;'ý±|,'KT8í›â– ÇyeÞ=ók“““Q(ˆí1ʵþ²F'ç¸Ëw‰ 9pèäÁ‡ÿmë6tÐgƒÆfÔžsß 0YýymŠbòô¼ fñ§ÉëóX-Àå&óèôF°/£öÔOü¾å隦P­º”U훣ǜ~ŠvÐnƒ3ׯƃ&yb¬í«!àgÊŠE›ßåa{{• 2 xq'j s ÈþÊzûòÔÔ? ²#¾89ÙZ{ÅÄÄ¿µÕ¶¶Ý)kjS‹]¦LÑeÁP%] yb*€)(r&cËfc[©Éž* ÞZæ¦å+i²ré ç–™fÍh“&Ð8ä~­ݶH»©Ž‰±2Ÿ¶ÖÔ‚îéî4g–þf(Ð2±¡µî¬z’öU¹±x¸Ñ’±„%ýŒ2óou€„™QßuªõœþÙ Àef“[€Ë3Ô… C4rAÛ-GMúI­cbA‚2lWœd– ÃoIàü‚'¨‘ÏàÈ¥¾3Gôìr^äq#äê±ÿÝ“ Ê Ùöž±ê(ġ̥š`íºÇ0W],àTÛ¦§çóG {8’šä‰üÜÜœ!k ôoñÙê+›Üa½]‚(âR„½¤Sä.eN–Á Jïä«óŽÈM´ts=W®\)JTV ,"­¶â…–br¬³(0%±‡œÃÖ¬ƒëêÇÃæAjÊršg:Y´v9û<%@+ü×xš§îÉ.íTHCØ•¸U­, ÕdŽy`qLOà #k¶"¡aº”E9ªPK¯# Zl´T»jûFU€…ÑäÕZ½™ÑGÙêÚ‘O3ßDƒÄ~äi\åzräef…Á[JæÿGmèÆ1ío¥¢âÉm݇<ÜH§ðéøD¸JÉò·fm˜ªÄrJb‘ëÉ£Á§ÒjßMö¬”Î9s“Xr‚9jOÎÁ]H:fR±>ÝL Íý¥Ñ­1 ¼|[UÍÍÍ%'Ëš››[ZZZ___YYaÓ¡]cû+"¤pRRÕàilòä™57óÊ›››øNåóF_ÊóÅäg »< JRòZ·I#P 4y/õ–Å8Æ!çÐ¢Ž§ˆáG9¹°¿ Ä¡­ý¯ÖZ†À›|h,­_\¶l­Èlªx±õ=Ö^N4wnlúYȬÈB—*mO@7ERou»ÝùùùļaÀ¯rßÚAwÏF€#…_k^YÛ÷ÖõM£‹ðI~JFÉ‘¡ ¯³¢Ë`K7M#²±CWå}ó‡ŒSÐÏðóud™pœâž‚Ö¯Vl.#n”µ(jžqA†Y™¥ô)õ«—½esÇÂÏÚ Ù`6¿OXƒr®´˜Ø§Ö4¨Ku!Á!Ó*MZmôì<==}äÈ‘ïüÎï<þüíÛ· íúÏOomýâ`Ðkmvbâô~âx~r²ííhíït»ÏÌκM›ç@jº d<–Vn»¹r,6KKÏÏϳ¢Ü=²o:bsss¥ŠEÖeŠq/çÛ¢ÊaÅÖû”‡Í…w ÑLƒ£¢›¢GM,ö©í5Š1iÇh)S¬cV„u™@$CÌë$_èߤ…SÆ*ÉÄ­¸³³sçw=zôüùóƒÁ%®Ò»r¼!e¶Å$-¢lÄE. @ý¶&N[ˆø%%m!î3)-e(ǽ)ePÆ$„A]+ô• [ ”@XZÄdÇâÌþ(}p]b!g=·4ñ¸µ6 XÛ¦KAìávXm'„šè‡î„ 7;\<7©8-µ‰þ¬Ë f7G +¡3Ø"&eÙEfuuõ«_ýêp8äùRsç#lmmu''cbâ™é馦~twwgwwow÷ÃSSç&'ÿËIßa5j@•Ïnr9±¶sßè5xK&±óàÒÜ.ŽD}wwxvùåÍÍM’ãqÈ9´/w;Ür, H3ªÛÁ±Mc\ðôu~êáv+zQÁ¿/{XÞª­¢@ÉýMï7‹²ÂŠ’ q¼&é'¶Š-¶vwwÏŸ?ÿÊW¾2¦çÎ[[[sç!!sÕ8AÀ,»âùk s^0ÅÉ£IP!5ÉwkH7Q憢mL¿ØQsyMÚÆÈ% ­Ÿíi),,ý‰e$U²»wyÜVŒ¥÷&½õÜ =’%á9ܼ t[õ¸ @Ôg±YÍì^<ÇŒ-{/X•À+ £n()¼nš<_m”IøqÃ0ù)19m_’„cˆ&е`ÃRãpa°  ï.Jð÷ýéb86”ù¾œwÄæÁ`pîܹo~ó›­µÅÅÅb‰^äc±Üí|„íõõu“½ÇŠ?\>p9†‡²Q=÷CŒ‡ ‡ ˆ›íù¤ìg†Q˜ˆ´êï‰s;ú*\,P «.ú.™°Dl° ;4_õb 6ó IDAT%ñY˜…d…Y“Ä]×âNPÌ›°¼Py4ØY¼<Ál8†É/²»_6ƒ&>3 GÆ–C/)jt2Ø ²Y*îó@ýƒÿãÈ‘/½éMïÿûüÇü¾ûîûŸ^œœ|×>²J§Äþùåˆw±^¦’ ‰»2&×™™™ …ǟΈ¥að4{#Yù‚†ë˜>pÈÀ"›gΜÙÜÜüÆ7¾^”ƒ‰n‡ý íý×dFëñC«<™ñLx !2†Î&'£éí"Œb+ïÄU|¥HW­ã›S2¯)'Š*'}HœYò9 ãÅ‹¯^½jFVŽ6î'Õ R¶ !ò%ƒÀš¶|Ž zøžGa¦¯¸Q>º…–; ÝÞt – vdù,HÝäÂ@±ìê–d7°¢[Q\!|U°QPòGñÁkƒ§FÈ7×ܪKP¿¨-˜ µ)“ƒåja¾PN‘Çø %~¤“GŽâ™6Îw/'®*„» ú4±:ûðxeReBÊû(O6íÆ#GŽôz½ååeH†,ø8YóÙ;ßš—ÚÞ~`w÷Úñã÷g~æ‡~è‡RÁÿñÿñpyùôpèy~wV Mª·½ ÝD¤} sÁb‘ÅLÔÉ*0psÚ‡°ÑÅü—¼ãs˜½œÖÚ}÷Ý÷þ÷¿0üîïþî… ˜`L„L¶t“¹ºÑ¶ eóÛ˜–6²û¢Àq¾²OØÞA¡¯ ÙŒÕ¨_o±….d'-bðeÝ{Bac€£€÷3×`¶šë!|‚§Á‰òÀÄè±kçþèÇX>’_@&Ùô‡äþ&¦Û L¬ÌHÁSžÒ– dtqÉó¿m¯ÒúSR™•TøßþŒþ¤Vd@úÌ®k˜YKPòaê s×d?‹Õûò±Ž»Y~dn¡[Óí"¸ Ýn·ÛíÆW×4#kœššê÷û–ûs %ó-¢ih&ÛÛ·nݺqãÆÊÊÊ7†Ãá·¨ù;;mG…2``“¾T¢2 £Hsòd‰µt¶€¦­=ÃT¸$6…‚¡jcSx‡œÃÖ¶··WWWÿò/ÿ2^Ôž '§öhˆ¥¢ìÙeÒšÍr Þšuã4oÒGµ7³käâ’i¢³%囬äÌ:³2)¹9ÍÌbi%Aoiº&îÓ˜ÐåÉ¡L¦ˆ±Ú?ù&Ù7Û† o5uÍ,s>c™‰áÖY­Äâ& çb(Ðä„ÄôŸ_“Á:n8ºôö6kïmÓ– i¦l4䪅çn—eà+¼™èh%M ¬ÒKwÆm¿å÷ó¾pçŠq*±§í¯ÙÁ¥Q­DbgfD¸ùùù7¼á oyË[ž~úéÏ}îs8±Û›ÕÕÕ‰‰‰n·‹ÖCÓ´uÛÆÆFZ§y­µNOÿÍÛ·ÿŸ?ú£³gÏ®®®>þøã'‡Ã»vw¿<==5==)¯3JìÊn·Ëò°9éBé/ròÐ#Ju$Íu3ý$ÏŠùÙYâÚ¯39‡\èìííݼyó“Ÿüd¢ 9èˆ@š2/ í»‘tû¢5‚N3´4všus”€~8‹¡ŒÀ’V3ÙhÛ׊·`“ÊHæ ¦¦¦Ž?žåN‰–j,»(GdlÁVWWûý~ˆPÝ 7óF^Ó¹¼;Á*ðåÜùÄbccƒîÔa¶¦XúRN$òç~"ÝF(u‹.­, ›zîùÆ ­@cz×Z¢PŒJiB ¶N¨Dëëëôê(=9¼èz-QZ„ú³,yd˜CØÀЯcĘŒÄxjjj}}=Å9¸aCjDî›U… 8˜@á´†‹)ÇÇ;ÞñàƒÞwß}_ýêW¯_¿îÒ]‚w¼†û€Iezà;2’´¯>33ó¾ÍÍ»žxâ_¼SöO _žœüÚÄD§Ó™ÙoÇúùoõ2êoUPøGñË< É_Ûaƒ]Âì30Ý ~¥œrؤarù‹X²¶¶††<%KÆŠ‚K 7ýÜð0¾– ãô®²éñäh0%bÒôôôÂÂÂÜÜ\¯×ã¸7PK5 zA,•’ôý÷ß¿±±Ñëõ2˲µµ…(ºõCoÞ¼™–ÌÂÂÂÄÄDX¶%‘?vìØÌÌÌòòr&=3‚G>5??o zˆgh¯!¦Ù4š †Ä‡uq“üINjn}N¾ã|â2ÌpÜáÿ´×ƒG"Ê„£ÙJÜÚAŸÛFÌÌÌÜqÇo{ÛÛƒÁç?ÿùµµ5hKE–±ø¦PÔB½-,g<\žWï(’› ƒß¨²GŒ©Ìät?Ò¾†ˆÁŽ¸ÃŽ=(ÎIùÈËËË_þò—gffüñ¸9´ƒ’žß$èîI<¨B(7™xjoïçççÏìî>}éR~ôîùùÉÉ_ƒÁî>“žR#2ȇé¶ µ©<ieh‰–ÒÜÜÂ6\ö 1Œ~!›Å[GUçÛîœor³Ä1°ÜÄéÓívmèÁúné§´'´mÛÎÉQÂikuÄ4i ¼ýíoÃÞð…/|á‰'žh-n˜g—FF@ ËîÂ… )ŠûØûRÓÓÓ¯zÕ«¶¶¶Îž=k6Nrä'N;v,ƒ÷DPB‹Ç;ès¤¢"¥[S,~ ó¤óEb W·Ø'ÌÃvÐ/™ ìlš‚W9 -|¿‘4 ×;s·O¿8¸­È²:u껿û»WWW}ôQNp:%‚r%FBŸM¤G+ÏÕƒ´œòä+9ÓÕ‡¥F½È^ÈGp6“oÂ# =â¾yì¦ì8„PÑ%¢£ïY˜¾¼©%3,'Q¾é½6ª ƒÈB“Ö*ᄸž’4%`.Œ˜Jº`c7Ñ3´™“5ãó¿87÷Eõáð/ŠX‚– ‚(¬È¢™–Uêê„IµXÌÌV¢ÐÙåTh Œ®›öV&”ý(Ç!ç09~x䃨ÀÂa#½$¢¾.PJç¹F8±§lÂ&Éjïdw€Ønoo?öØcÏ=÷ܵk× SÇø0uÛÉ€u~í×76^}Иdoo/û‰_ètÊÁši|Æ#nܸásŠÏ»»»Ûï÷WWWƒËYìÒÕ€ÿ„2Y ñ p±W=¶ Z Ñ ;Ö0<‘œhtï‹B3Í^Xé>nÌÄkû–è0ˆСSE‰Æ]õPá™3gVVVÎ;GwÍœ’¡·LÆ…äbÉzŽìàH.­P˜sãh#7§Î6†}Û÷ë´ùBB£[2(*;+ÏyNȤM’6\ -ƒ[\xôÁV…áô·A€)öÊã“ý¢;ñûرcsssý~¿ßy.‚Ê›W£ëø‘ú›Á ƒüŠϢöäõtj2Zp‚Qär³ÐÉÜ%G¢þilG zqÂ’¤j)ÜD’8 ¬ê<“uéÒ¥›7o†ô OŸ®’o¦çÌ…eŸ¼q{û';WMLü½ííïßÞn­ýùääÿ=;{ejêw²*$AmœÖ€9š ÉAçÈ‹=/B iÃJN:þ]E™D¡<¢—€úŽÉiM} …?uª×ë­®®k’áQëÕ€þ€N˜z™M[X­m_„—ÓF˜a2·ÂŽÆú666¾þõ¯‡4ÁË–¢­kŽH˜„6>o˜ /.·ˆA×D û¹Á „û€wŽÙ’M&˜¥Rða—³vÌÌ9˜›Ll.Ýu×åÌ» ßLŸ)zb,°i“¡ÂaÉ­Q@MR;äfk»h3~k£  Ž¤ð•J¡?9‡öEÓÒö×ä&¥ñÓ?*l–™m·:!Ër«b Á)‚ÿVêtƒi£&=ß:&&^¹·÷Û¿pôè/ÏχÿÑïÿoëë?»?ÛÌ®öP/î‘L0q.‰ûà„˾©©©Á``GHoB 9'¼—0>VF¯Éør'×ÖÖ2ÖjàÎOäÿcï]c¤OÏòΧ«Ouìã{š³ÇøÄ °‚0X!/JX–8Q2”݉²ÑFQ¾ä´Z’•Xb­–X« EÚ$@vN€`"vÁpÂÁ0¶1c=§÷}§ßcª»«ºº««{?\Ó?ÿú)³·ý¡ûƒÕ~§ºê_ÿÿó<÷}_÷u_—ËM6p9³9I–À)ìjÆp–Ç,âà¨ér­r¦û²‘+·Ý”³£)>üĉ ¦ÀÚ{&“’¼xaa!ZÅ•úQ5ñ^Ù¸U€$;¢ê8³A€¬˜ø 9¥ð”>É8½Øf”¸ê‚ûîò¨’ûCl”5€MN93ê ]­ÂYWÉáhXŽ›óâ‹/6Ç'úaL:3ùäa>èB$¬­VëÊ•+P¨ñÍÚw!Î\ M³\´ÍÍÍ%;¼À“ö2ä¼ùà Ÿ2’E$é1šeØtÒê̪i·tú™œ¶–2´„¨-Ì]ºÁ¯Ð΃yÿÿz2ù»Ë˯?õÔ{®^½uëÖonlüíFãÏŸY#{pÒ“9àC­¦”!ù²7b^‰;z9Ó|d¶ÆÇ(ÛÆ¾&žºD0™êôôtoo/ü:¡”˜Ö}àÃþ’WL=ÊÑÏ<|5ïU«·ÔF–`Aäõ¡žC¶+Í ](ïy²Žš®GT*Âí»ƒ{Üݲ™=PR‹:KpëÅq‹•ÆiKãÓP•„§ÍªS´HÍX´-²,QÃ-JA™rÄÍNÒ £££W^y%¾^´Æa©p‹ºa̳>88ØÝÝ%9ó„“ç1Œ¹q«ËÙ8­›¾Þ­—!ç‚l•fn ›0óîXú “E¿’GË9EÍǰ›1vW9?uìÙ=÷êÑÑ¢x*¥¼ïôô'žxâƒß÷}ßð ßðñüç~îçþãÇ?2íŸi7Áø,çMÒØBErså¼Gé›_ìœ6mgÀ´‹êÑX‘ÌVX¨yJ8æ´õ¦<Ñí¾]‘Þ¢ÉÖ­V /†ªT²„Á’CÛÖO€!¦V“§û>@žÆ É•6E¦¼`]A6£5huî¤\¤+*Å ®Í…„]W{Ü LB⢾̾°êDÀSmâ‡"2¯è‘ÉYî3Ø£&{ÌÃÞd2ÉS\1«6M¯qZíb+WUum]RÒynÚÆëñÇ»»»´¢?„6®“ ôG*J-¼5þ«ÏºËsaôr^aHöRD´Œ6øâµ6«¹Â¸<<ï ˆ¢‡£Ñ£ä¨J{èÇJ0ö[¤NŠàG¢Ýâââ7~ã7¾ÿýïüñÇÆ /¼0göö\iUn+¶“Iè­Ng÷uÂ…ã`JKÖ¹ÿ42CÊi¡îàªã£°²ƒ³Ž“å"Ÿ±iìÈ•(ÜVòßébÂcUd!ÜÍÍÍ Ñ#[=Ï×é|xPÓPmft¨K(¼`ÕS‡™óæüN54Ù<Ár~<ž2‘ОªË"ßÔCîlCÜÈi˜[Ón#xYÞÜ4dp`Ê!Ȳ7ÆPiÓ9k±²”]>ó™ˆJï£Ïª6uß‘C¼R|°øŸb´J@ti%2ÍÎÎv:………û÷ïc`ñ:¬ñ_Ùä4,EP>Æ-€…-4•ÿJ*yÙËùŠ˜ËqØ ù"ЏX¥9Õ\dæ¹PC±¦“i >.ñ3WÕ&Óã“cZvÎ,c¸©ÒŽúÍããîþá'?ùÉ­­­O|â7oÞü†Ñè³³ï:£ çÅ̧œÑSO‚O´peãÿš÷äNRçÁý£¿=Ý-Èl 'Å´? Y6'ˆkweHȦIŠingå’°v[ŽÖ7(}iòÙ" "!5·©ÁjAÈ¡IŸ¯rŸ´§*…)©«¿øÕôIj1'žZ€iHtB-g-ZÀ/Y¨(tŽø†Ž”7×y?ÞJ®³¹Ã¨Ú%ø®b1¸äboæû¢‚Á08å¬I†(à Â27ýâh¨h“Wæ7ÄZL”øV³ÍµÅ-;aßÈÄ8Ó4ù¨Ã.o.X3á=– !óðÀÊÙXJlZ—ôWx ixåBÚ“SÏâÓöP©FÁ³Xi~æw YÍœÞiüžËû?ùÙÏþï?ù“ÿϵk¯¿þúÓwî|hw÷¿[Xø'SŠìFfRêUÃ_áYýÚèÌj®¶êUd ’¾±í @´µ«·g§\åK…wd«o£q=NopÆ´7àŸGCÉ­~€]O,ª Χ3Á†CÞ[å Á¡9äùÏÈ’<°{OOO™`1­ÙãJ|q@O¦m¬›g¥"3 ¦çd/µ¯ˆ*tÒR?9k×£l¶ {Ѐ%ex™Dƒ?‘¸q‰·SþÛ@“ig÷ çO¾87÷×&“¾ðÂ_-åøøø·Jù¡¹¹×çæÊáa Ö·çû^C&ëÅÎݳ@€-o-éÌ”oäý9r¬áÜ¡vt#ºXÁ-åÓvÖºöP§÷§=â M9Ë› `©éjP‘q“ë9y¾Ž@PÔÊÙP-v%T$Bá$Y³x0£ÅÀ:´Í]•3AŒ¬&Ï`m¡”Úl6}búžXRÏÓ342=EC+}P$ž(°l³¹LeZaŒ³¸œ÷ÿ&¬Rn&ºCtÊâª1O´ÀÐ^DN_Ìœ.þܵ­Fž½W3,õ$ÁoqÖÈJö»Yì‘K%é‹ÿ± Nìæ[ ©åÅ©jI VbsÎVmZž`ð0f‘C¶ÝLfó¼'{Æ,;0gff^™ý¥Á ”Ò(evf¦qrò¾™™o;=-ãñ÷ñ…(r*d­\OˆiKXd r·$À$ƒNWZZÞ?âW—á%ã§v»·‰³Ÿdo{ÛÛž}öÙÏþó/¼ð¼"“}_`XÑ4²P÷›:öªÜN#;6á \¾*;04¢òȇ. hˆAÝgÁ[Ž[­Öµkמyæ™O~ò“÷îÝã;þ™‹‘ÏŽQ˜ á3†Iw“S22¯ÀÅô'xú< "Ϥ|Ç6É3’ñÐö@å“pE{<ç/PmºlFOUÊåtbHVx”§@©„rgÈ8äAÓfÛÀ^ˆuÂL‹Ðûšuni¾&ÒVä+™‰ˆv*!û1ïü2ä\|¡C A-¸œiég1ùÅ–D4&ËV±|E4£>ðDE–i”#¢}s¦§° £§HîIFœUû×—–üVƒÁ nƒoNžé³1SM9Ï šÙP”ðQF›Îˆ‡½¿Lj°Og§I0ɦ}`Ѭ¶>¿Çp¡n _λu:§Ÿ~úîÝ»æÎzßÂt~m@©« Šä…Ê™dw¯J·íë}žQ§Ó©ú€ÔÙ)P¨¶ínI«)Ř?q'©†)õ —à,g‘"Ø‚fTB!+ç=:]¢åáÎ>•Ö¯3wŽ˜á©[— «æ9åsÁEŠc(Ò}0-3+36ó¶Ru,qÐ2¡Ô>¨^ÙŠÐl 8ÝvâNV%.yM]smg¹¿K`킜¨šÃ»ƒó¨â8¹€ªü‰n,¯ëž°©A–uáŒC„-wð}È-t;Ùöyö†ƒ„[÷v7pWÖýOgEãFãàà ‚æIÞó•IçÍm3ÜÄ •z“¡•µ”g°‹³ZP˜«LO¢Íîa—l ¼)=. 3ÜÈÂÓµün;pª™ƒƒƒ—_~Ù})º;„.Óöª¢“Jl“uÂu†žÔi{‹$Ë6EÎÔN A*²A2ôfâ>"À p%÷ÐF2ÀúÁDPG ÷)?-ÑMÒ“}a'/'{ªšáËÆñÏ#Dܽ`Õð£G—À{+Ñ9B`°3_Š;c+c_,ït–5‡uzXfö«u»Ñ)TplS¨A5ø^VE‚g™AžEUѨïeȹÆšžÚv3idŒJ¥ÝnÃÕ©¾(Øö¦{Ù…Åå3‰9 §S1T’òUíl©Zó†ùsx ˆ<šäãÆ/°{NÆÑhäÖ1yÆ„®œ³gs¦!ìÙMÕršI¤ó6Íõ`¬ë†ŠTV‘8ˆ¾Їœ:™wÁŽãõÓƒPs¹30ö ;TC;ÑaCIÝŠ“=è¥û KôÉ+äÏeo/Eîã''ë§§¥”­Fãv£QNOJùÎN‡ØÏ8(®ÉÓfÃâyʪB•<*¡4ü˜¬\Nü3À£÷Ì–Ó)p%BŠ =Ò¦Då¼»œ>}G’9¨ÔvfáOctÆ'ŒÛ%ƒ\äs!#øP²iw6E¸‘ >ÑOU-U2ó9=:N»ÝÞßß¿¬r.¸‘s||œªCª"­VH>Œ•Ñ2EnÀTÑrÞkÙ£vFóÊ™cG‘¸gU{ñ/6O«®­’²wBêÜܳ“É$+Þý!÷h¨8o]XXh·Ûkkkñ„·Bó+•›YvƒÐ´`»™ÿ&fñ1k¸™–„2DBmä“c¥ÓéТm1Ú”®‡¥P˜×áIo¹Z$…pð<ÕQ™ÕÏžýÐù¯ È)ã’¸Ñ=Ë€Ëd2™9=ý`»ýñø-¥<ÕnÝ™Ln5¿83ó3Ãa%Š\…gK²BÉá5—$gYv ¤¬,iÒÓËÙ@1ý4üÍê¬Äôøš¬g*lB!ŸÀÀbè*e  ®Å™üøXuùO™±ƒŠºˆŸr †ÅÌ"•%s²yRñû` ÐS†Ã!!‡Ìv”^æ7}Ó7=õÔSŸýìgM¼ 9rX ØÁZ$ßš¾îÕSí–3ÍöÊ—Â$¥Jß·È'£âX愪œ¹‡Áeê‘í[¦=uО¶6± Œy´Ž=9ïŽŽŽ¶··žHæææ–ÂûÝózÄž£££f³Ê ÎÖù¬ð”¬™Æ£±Í¢¯ßè?̓ ôWççç———yä‘W_}5ÃæÎUͤiórv8Z8„›õÎe#¢%Â3ыǔºŠGLdM½˜û< þá·¿ýmï{ß>ð|ä#ÿÃýÑÿ´¹Y¤Ë@†Nfí&yÕÒ7-|¹òœ6°Y'³k(þLGF7¡Óé”Râ³NçÆ/sx6¯ Z`~VsÊ4¥¬² „[ä{xxØjµhÓS_RzªŒ Æ„§db‡h¼ŽÐâü••““ÁÎFœQD²°ü« FµMªºüãŸþô§?÷¹Ï]”æÍeÈ)NåÜÕw7¸ÈýŒ£¡"’y[†¦Ø ,{» 9ÂvÏæôuh®t¦éÄ0c˜3œ6 IDATU›34‰O°`- XH1W•ãÌã!ääë ¬Ë%QñHvéVJ£ÑxÇ;ÞqõêÕ/~ñ‹wîÜñÝó˜*,èDÙîŒ „ˆY¹ôxrˆ ‡Ã[·nU˜Äx§™Œ1‘†ÃO w.¿Tx‘Vó$)MéV«•\;Ñ¥ÙlæfFL> Ô»ÎП€ª@«#æèHi7F£§ççŸü–oyî¹çÞùÎwöûý‡þ|¿ÿÖíía)ív;u*e“½¢a©0!dòº¡¶R¬ÖÁ2ÈÐ=H€ [Q OC÷´Óé<óÌ3§§§Ï?ÿ¼‰^„r¸,ª<,Û)Ù‚ä,ãÀf‹d{¬‡:ƼÓÜó¬ö¼C–(R|;s¯.ª¤w*É8ÐH‹[ÛzŽQ'ÝšN CÄ-gHIKȧïïïìcÃmò2ä\pÔq,©:”Æ9)Lå´´sV[vxZ‘l¨é+UÆÏr›dÀÍŒæ³óÝš&oÅ”>×ÄE•¹ÿÞçÌýØ2ÙÒô ÙY¬þË"fff†Ãá/ýÒ/ÍÎÎnmm·rÐÛ1ÿŠ8Ë£'Á€Ûô·Å¹«Ü|÷üáxðàÉ'ŸÜÜÜ|ðàÁÞÞÞÉÉÉ©èg6Ê„ßAFl ×z3‰(žu/¥ŒªñNwÓ.ѹÛÀ;ãñ8ÃR0ÅWVVZ­V< Y¨ K Eouº÷ã˜çc:‘>Ș…*¬\àÑ.—M¦öA}vœf±Uà 0ñXl&CW\Uy°•×yg‹VtPß"É® *¸ 9o¬£HäÚµk‡‡‡›››^4¤fUŸÐÙJUóx&+Ò‹6¬­™Õœ•Ûž²°°Ðív‡Ã!YRÎ>"M1¾BÅê6Îkìž$Ñœi_ju³E=wttt÷î]3D±9qÿ–cÎ.Ξ”²+¸QÓüCêœüÚÖ…r-)[ŸåLO¨FÌÔÍOÂW\¸ümj·Û]XXèõzM¹}ÓN~'E¾Âˆª”fØ“O>ùö·¿ýùçŸøð¡±Áôrþ¯¹¹g>õ©®¬Ü¹sçÅ_üOÿé?}×Ý»ÿºÑø¾3<Ê}鄱œãIVà;ð¸=~ä©X?8užàqÇ ¢AUµç¿¼öÚk;››»råÊw|Çw<þøã¿üË¿üÒK/qDZÌÆ;«š”d3Z1†›`C /âžkå½”»Kò…›(¶áIþT±I+1Sx+E€i×U¼8új6ô#ÍB¶•÷ÿ½ÀxsrÎkLä7›Í·½ím›››;;;¦äiM=ÙdZd©È‰Ýƈ{ Åbïùê5Õ)™èÂfF÷TÍ#¨”ä N]ñT„QüíÎe!\9»,g"ŒJØy(‡rŽ{fõ!•ÙAÀjWâ«8~„ RoÓ™L]ãASÝRá9¨i Dè%/8<­íííÁ`p||Üï÷ïÝ»·±±±··,7ËŒ1]ñx~y»ÝÎSNrXõ‹ iffrttonî_žiºü…££™™™žÉ @ÆÜîªHzØLAJà,¥ôû}œ¤]ÞɽT¢J€]Trf¥ÓÕßÚÚúØÇ>–ÃšŽ‘¹[p(*î,€¡žãá;ÂvËíÆ´}"êj ¤t¡5ÝþŽ9Ÿ…²¥V¥–”Oñd+]"[ݰ 99%¬¥"U7‡ÏMO#œ—!çBNÑì·‘""ìU`F¡h‚•9»i0Ó Ó ~¸; YÓS2pò]!nV­ 4,PƒÆOÁç¾á;¦|<¸J.9=ã.Ì@ ïÀp;›„0YÍÀõWõ /¼ðàÁƒŠn£`úHèå¸ê©§–——······G£Ñîî.bk<)0¸!¹?9=ÛÄbÈ#³^P XUÍRÓlyä‘¥¥¥4`®]» æüäëõz¹{{{ׯ__^^¾ÿþÜÜ\¿ß×àèèèáÇ4Š‹$¥A±(×þåe¢r„NNNÊÙêòô±ç]ʔ膻˜4®`£äßib»ÏièrÙ•MÁó¨Cm‡ÆÂ…KɹÏÅ[Èœ`ƒ:OÍÆ3Fž V/…,ã ¬HÀÅzez2¶2£³„k‘š·ÚM^°¾¾Þëõ^ýõ½½=3˜ªîZ9/sÎàTÑôñeȹà^Ž•‹Ø nóЦ#o=` $)î,œVè¡Y<ˆ6ÁÉ$ÔV«eu¦Ê#¹h6Í UN ”<æ¢;¢\9ýOiT’•FƒÁåŠ\ë-þ¸¸˜ãuoo/ÔRZ& Ð$V=òÈ#ëëë/½ôRnf¾‚gèÒ§Ra2?ß«Ýn?úè£W¯^]\\¼}ûöïþîïVÔÁr¦-æ1X|ù|«Í§š'Þ'Ùo4ùŽéÙ ÐÐív¯_¿~íÚµv»}íÚµ`k9ðNåÁ-..æ½^o~~~cc#¡ëÞ½{)kÒLNŒÉÕv: •ô„öÎlÅ!Úå†WH’gånF²ÈrsrŽX-Ö'¤iDÉŽ½ÕÎ蔹Ô^NŨ3l³VMŒâ袼ÈP•¹à"Y¶†£‚—* }jÉ'ÉM%ËÍæ2zÁå(îón”†ïyÏ{žy晟ù™Ÿ >»¨´,]=r¾#¯Dáô2ä\ØÏ—&éÎj9ûö<6Göp8$ÇAÑvS 0þÖu.K–5Å»u™˜ô8«œÃÂÁ û'Ûœö Û#lov¸[‹ ÉÝFß.H •W£Cìh4ÊéœC*×Ñ+ÿ ~4ýú¯ÿúâââÎÎpeÅ´®ŠQøHá\ÇãÛ·oÇãN§sçÎzþ¤™`åœ/-ÿÔsþ¦Q‘£-Þ)kòÑ€iKKKÝn÷ÚµkyÙõë×WWW———smL†ú.±*Z­Ö“O>™×_»vmgg'LhšóN‡æJžK<P7€ì~€ÅÑ™þá~6›Íµµµããã8“fSLUYmž÷x<¨kù%Ô`" ËÝ+[qÜ=†ÌJ Œ WD“ÃÖ«!¦›§ÇËXqùt e~Èe®=L-žkh‹\ùÓPùîÜÆ B`½MOž&¨?ÿüóŸÿüçïÝ»—-3àšóþ¥´ ÁØMûôóº 9VåTž¾#§]ï…ußIpÀªùdOw£ƒT‘îÙEäÚD KsX3:cŠŽùšErÀ°ƒÌ%£1n'lä^<ªâQgN·=ªq"²*Ë*3Bу¾o”£,›f÷ ‡mΠÑh”kF¯¼òб,D Á×4Ö|îþþ~å/’<Ç}N¢¤êÝn·Õju:^¯—ÿš¦N·Û]ZZZ__o·ÛÝnwvv¶×ë¥ÜÉú8‡bq¥¼—NIâY»ÝÞÞÞ~øðáñññh4:<<ìõz”•Äò´å)ÎLÇ hHh…®[ÖÉÚÚÚ»ßýîíímš% À[ˆ–FuWÍMw¯ Áo˜”¿È@»²¡µ½ äÌ*7kVÓ]•E[Ø%VöL]R™Á"ñzc•Úœ]jÖ’+!§§ETžE–9’l†+ɵmmmõû}dÔÛí¶5XáÅ@Ô´—Ï–K‹¶‹ïå°žØfì;ÂRyä)¶Z­” щ¢zEIÐS¶WlñTµþ(™9y+I‚JÜ‚ë§8 \ã\ðøƒôl*·‚,+Äl:]"=¸‘ÄUBô®L#þÁcæ¡\¹re~~þöíÛÜ—8Ö°¡ ¬æê}e+¶Z­ñxIl#¥Ö©k·Ûòl6›ÁÓŸ|òÉ4ðgffVWW×××ó'­V+O"GâM"¬6Óçªd3™ˆµººº¶¶–´¿¿?‡Ãa*§~¿Ï·K"Ÿ:ØN å¼ë ؼÙÙÙápøÊ+¯D½-Œ¦ÜU`FËÐ芆Âp8$å2X‡>úݫ䜩H!yYõ< j3ú §B[Ïê…¬."Ÿ5DƒŒT;ŽšXÌ×w¡Ï„Ìm™ÏGÛϛΜg"ý´à&’zñ«ˆ£A@Ý‘´ úÚ>ªúÛËs?²­CSÎtbHëò8»ÝnNgÈBTµUÞÖ‹þòï¶W'‘*ƒ˜ÅZwÊwŒhQt»ÝÓÓÓ½½½|(ê DÏ»T,/¶k5”ŽpŽiĹì@y®âäÏÝÿÌŸT^åLžþ+6 h&º|ŒF–Kɯ+lyÎÌÊGG(~nn.$´'žxâÆW¯^ `2™<òÈ#×®]£8 ¶†¤MžÓ*ž®0kÖ¢ô‡2íxxØï÷··· ñ¯¬¬¬¯¯yËûdîìì¤Â g/5Í2¨J9§nÞ¼éÑ®ªi©2Úâå˜zäÓüIÎk%ÌÍCG LJ¬ç±Žly0zš“—Q"0ŒÌàq <܆y\|@ˆœøÙDÌ\{^»’òd!ÁSHQeiùªøxkZ;þ)²ž2LDa»åÝ`»•ój§—!ç"ã §- yM¶#Ö¤!I¥³p+>b‘'šK6ͧ¦UMÅ2äÅ>?o2a,%ØEzð\è,ÁðPJ°a6FîÌÊ  À;gË!¡ðT>ˉmŽ*F:ý瞇æxè!ó£££П(Ð4HeÈ›|3’N1_¿o]ryf¿“aôz½+W®<òÈ#kkkËËË!\¹reqqqii©ÝnƒÑ-//§éâþ–M ÆQä…i ± Nç­o}k»Ý~ýõ×ó_#*RÇÓÌÙmb¬†ÌÚ «›’úøø¸Õj²ƒŒ‹)7<«¢º“Üv/~/`0ê0k /2Í–£§µr^ܰ+k‰¼ª„Å90+ÝySTÒG•¢Aâ„%æðª@ÆÆ¤p’-3¸!ÌíÙÉ4–¿eòv gîŠ#¥ÝnçATRñF¼Çã1~KÍr0¹ã ™Õ£¯P¿¼;Ž+æÅÅÅÕÕÕΗ_~9÷*8ŸpFõÁÁAÀIP¯=6¾7ªÍѰ|s6å6*ô¾eBÖ³š|´}§‹]U%›»d>÷Äm×:D8çvȚkzzNy÷wìÒLAÆâÍû“P.CÎÿß?€ƒ¬¨æétRHwÿªù¦óæåüH0ÍXzƒ&×{óåƒ|^ xø¤È ÓŽÈ¦;s2_pvs¾PšÀ«¡!Iz蓽È“ É“c›}¾‹4rv½šAÌËFå†8|Œ9°š˜Ôáãø ¶¥šiµZëëëÝn7SœU)Dâô“Kêt: Õxù´„}ÿ°¤L‚OK)ÿéÞ½{{{{8¾ä'ß:tØ^¯ n8Rfåû^‘|Ð?wäÂˤ[Xgt¶àä)gÞEUš„1žDÛêVYu/Ðä{„%?z3[̱´Ô=Ù¤wV³Ù|ôÑG‡Ãák¯½f5&Ëà^†œ #I› ê| R2 ˜–Å„˜lw"åD˜0¤cn¿Ûã (,ရE‰nÖåXttƒ¦åk5~*’8¬8“ÂÛ|Ú¼E“ÒùÐn·[JÙÚÚÊ‘„S=  ¶J$°lÏ<… Á¤ñ~s?•ŠO%SÛ¹ZÌ&0ª4†CÊJw!Ÿètzzº¼¼*zN'Ïbyy¹ÛíBò–ù7í¬E„€7§t/2ÚEWf8æà¦ l4yýÜÜÜ7OÍ¿4›Í+W®0à’и½½Ýn·37¾IØ•€f”ÂÕà0ù/³h7¸‰ç–RöööOJþNseÊ×§éB 6ßš|™ -SBq’2[ˆ’|ˆ •E•5æ­W5äá.²}ÈÌx ô᜙1ÈÉ­«D’¬^È«9¢&ãì‹ïÒ ¹‰5Ÿ[¯Üëõ¾îë¾îóŸÿüÍ›7!tTÈ—!çÂz9U fî™Qlv”§sÒú.ÒÈIÇÁíY·ílB­ÿ¤È$Û‡‚Y^ö ¨( ·¦<ÎÆà"à{vôØc½÷½ï½wïÞoþæoæÔ«¶“‘ejšJ"¡"¦èU†˜ˆnXVZpÈÕvYÑ…ë9Ê Æ G¥|ÉGö°œaX´Z­ÒòIo6Ù¨ûÀ —óñcšm÷“Édgggoo/ÉD€ ^¯—7l·Ûׯ_/¥lnn&dZ!GêêêêÖÖá0á9ò _ÀÖÝ5ÇKë™ÉSHî Y5¸†mL•}›oæÒ™íPdëIÿɮޒžöw‚VV‰šc¥á¯æ>"Hue8´òã6·@‰Ué¬A;ÃΕ$Ýtñaw†2¥Ê5Ìééy:õáÇ¿ñ¿K\÷Ã.°Ä¹ 9u;§2™¶®ÌKlRël€¾œ/7¿Å@‹ÀjWd[îoW#lìÀôÏF¯×Ëïþ,»±qÏœ’?Ç76×|>2¾ê«¾*§X>*= ¶nÎb{¿W„]ÚàŽ74;ÎÝÔ8ûz$Þji>ʙַ×m£ Ä•LØd–3èââbþ1©}^‰^x¶½y‰,ƒÙÙÙ¹Ï}®óc?ævq¾òÚÑÑl£±ñýßôÌ3y“Á`ðàÁƒ|‘|bÚr¹· ?‰7ÖP ˜vpp°¸¸˜© «o7öÑœfï E' $ìÕ˜sêËÌÀÚçËæ›B;6YÜã±DåÊr9-/ZÀmKÜ¢$ëEÎöáÛYÑü²·¼IÚ!–¨pƒÓÔ ÒDóK¡e[Å :¦{W$Àh9m*ðÜbj^p<‡ê‰v £Ë*çâ9nîUS‘®*RjÊ/øk¡­d6—ÕkH4~pªÒ{àD¨˜lZ&›…3=??ÿž÷¼çÝï~÷g>ó™/|á ÞÃvF©dˆ žoÍ„->=m0™L666~ú§zoo/É.M@ÿÌr¦ Ôä·`qpin§°Ï´ûØDÄùùùÑh‹pV’;O9P¦á8P‹0ÇÚívâqú:q%ÈOŸ˜KÚ2‹†¹%&“Iss³Ñjÿú_Ÿìîv¿ç{rÿ·~ò'WV–ÿÍ¿™½woæÙgóQ#MC"ÄÀbp “Î5À_ZYYA`)WkõèêS‰bAÍán¢Ÿµr‘”$´.Î_Òö`zNÚªÚÝH©›yÔ©ð˜Ù X.e¡ús-¯ ÍõWs3$I@y‚ “ÍÌÌ`cHID¡Ï›[Î\M*s=KÌn?zJ¢ÊW‚̃8Vu… âM”\-}ÊíííËs‘?<Ü« gÓ#iNñ’S8<Ô3R"À³Á @t2 Ì!”âæ-'B~Y[[{ÿûßÿMßôM§§§¯¿þzf뽸T.Ì[Â2õ¤ZR6 ^}õU.Û\ fÓ›Å1gJ¢KåRÃíe6Ð9‡± Åp @…J R¬‹'÷´< ŸëôÌé“  ÷duuuuu5 c^ÌÇå=ŽŽö÷÷sd¬¬¬€Î}iêâw~gþ×ýä‰'ø:½xåµ×N{½µoÿö~§¤Y$8ƒùðð0ó7sssKKKé™QlµÛm»”m«“Ü”Õn~¼ÝhÑ‹l æ¹X‚Ïɾ›Þ¬:æ½`ôVFzÓ,ä0¥&®òô IPÌðM ·A¬…tc;ŸimûÇSRu˜(¨dQ¨"ícº<<×lúF’†dussslà}œgy:¶o‡ÿ ¡ãÊ•+ßû½ß;™Lþý¿ÿ÷—s9ÜË©t2³¾-þá–šÝ.I-t]‚PÚ4Z¶Ñç‡ÝhtŽ$Ëô•ápøû¿ÿû<øìg?ë™(U´ œæóÅí+Êä¶­qü/lTAÁ+³êWeÒ\Ýsƒlœ<=ì’<—–y%ÞtðP9 H¡äA‹¯Úl Ñ„ŒÇZ¯×kµZÌñ¥WŸwÛÝÝ ›››á­%ÄæoßL`ÉO4vvÆúO}Ë·¼ »7‹ýþä±Ç" šG™Xböç8'WFks+¬÷ËÑø›¯1Ô\)Þ„Ü&„‘Èý¬Lerh²0è‡Ã•7G¦jExF"{%Ûá2·HÖÌ!³"U‚¶Aq£Ñ·Ôí}âMV¯˪™‡CoíTŸ†Uùý˜uâyU†Þ<áçή%[*Í…ir ”ž•ÁGžûáááýû÷’F\†œ fHWÈh›õ‘ìÆáHšoãw{?g* ŒL2;T^м~ü@اÐ%‡¿÷{¿÷™Ï|9 ò,Ovº#ÔV—ªö’À'=UÊññÏWÏ´fΆþòç¿33óÏ[­jŠs Ÿ¶3±Üòt‹À=<îc\(‰jê*¨€©2S@ÄJ-b Çðz½Þ;ÞñŽ^¯Y³^¯—è¯Ïôrò¼òrN‡VácÍÿÎï”RNÿÚ_ü¥¿”›ÜùÅ_œûð‡ç^~yï¦ËÂÂB§Ó‰šgÈ ut8ÒEÃÃéää$l´„œÈÚ[íØ3hï§<ª’wsKq˜¥ÛþÉé™_81=2ÌR'À: µ©½ª­MƒMm'‹Ür´îϹbÁ¶Ï›H°T<÷eE‹ÙÇ)Ä+¥ó/«um´ÜfÕÐ^<‡ÍÚ™Ù—•Óöçæ.ÝsÎ)r=[[[¿ú«¿:™Lö÷÷/o.X«ZëðeqáûF]:f¹iDتñ´{®)Èì®r6wY5ºÝ34ý4gúþþ~9ÓJÉiKkÝ4Ãô6Á­`cn¦ó£Ãh^ßןœüÕf³u|üÆãÿâôôäää§ææ~a~~©”8:úç¢ ‘uâ9oM*Ç*KTJÏäò-+ IDAT€†sIAç"BƒÀLå)Â(Lê†ÌÖ¤÷ÞívßùÎw~Çw|G§Óùô§?=WVV¢NDô- ‘!Ï( •´LœoJ—Rú?ò#Gü „”ƒ?ûg'þðÒßú[ã³6~£ÑÈ0ir…Ä98¡1Žs›››£Ñ(!Õ’;0??¿··÷àÁƒÝÝ]t o\Fc(’êÍ4ÆÚ–ô,ùnÙOÏ÷0Í•p+<¯¢™QÑœ¯ )“Km©ÉV=:ŸQ[³ÇVO 1b š ct”·Í-MÉKMÃ"ôD§;Kop?“ÙÜÓ:lF2ªQ¼²}&“Éææ&¼öËsñŒ5È$Ä­–Eúôoa(¥4vì!tÿÀA…™a&~¨âÝðˆ5^×t ÝÚ-á&We"ˆA §±å¼h ª|ÓToôQfffŽKyçññœœüï|ç‡{ìõ×_ÿÀ;ÿnw÷{ÛíÓÓÓ¯::zËYÒ÷%ZàññÌd2{xøkgŠñôÒ€JP6L<Í „L[ò idžÑz! œæ/1"“x³¸¸¸²² çRJ§Ó‰nqü­Ó˱1Ù1+¦®¢Â7œêÞ½†xŒ§Çdz¥”ÉÙ)O F£Ñh2™<þøã”£Ñ(Ž­V+ ¨Ñhìíí%‡%DÅ¥†ubÿ˜ªçAbäˆHkþ!ü®,ZÔi½lòYxݺQ‡F”e› öo®ÀU•öR^¯‡ÝÝ]ƒäVç#ë"ã„ý‘÷!Y´C†«ìÖȽBÊvh†±²’¥%¹É¤”«bªYm áygVTE"ÍßfdÊÓHx3RU~á—!çÂ~*û‹1#?LtÙÞÞ¶ ñ#u ié¶Ó†T’õDÉÑX9UHåkàKu¦“CŸd­Ú¡ášbE¹9+¾Š7•1ùaÏD¥Ržm4þ·¯þêwü…¿ð_½ë]ŸøÄ'~åW~åäÕWÿâxÜh4þ›Éäj)·Jy×ññ9—RÎÌüÄÂB)å¹££g––ÈÔ|€AòÕÜÑÍõ{’ÑšóÞºž'7;»1Q"@2‰ÓÓÓ?ú£?мMHÒ¦Â[²—·É$Íárxxx¼¿_Jé~øÃ³ssÿ÷÷òEš?þãòOrÅw™ƒ54ôcîÝ»[:c§¹-á­µÛíÔsƒÁ 5<ÆÌd$ìk>??ÏqlE wŽûiÍÒç¨'˜M`1½jQkVÖËžO´©‡{N\•É&DwÛ6Òo·ŽTåÊcSvê9/R´PÒShÂñ#ƒ!]ã_PY4ÌÎùàÑ("„Yéîu•ó®F>*Fµ‰—®b= `Råeȹàã\R™Gù¼“P¸™aÙÎJ+VÞ_İŠœÁz¶‚Œt¹¾á;NZ; uzvœ:[‚=P$ô ©Ì½k0Pc/}–øÒéé7·Zÿî}ïû®ïú®Ç{lyyùÞ½{ÿ÷ÁÁÿüòË›=™ù‰ÙÙÿv<~efæºÝ™F£;`<þ‰……o~¢Ñwƒ3 ç‚á¦Ð!8Q)fq˜7…):XYÞ*àUΑ777ÇãñêêjpÔ\R»Ý&YNÕU4m†HráØÂaÛÜÜlmlôþÌŸYÜÙ™[_ïýàæšÞûÞÉ×~íäé§gçæ†Ãa¢NJÒñx¼··—zºßïçxYÎx<¾ÿþ`0H2T-¯ï÷û 3‰7aý¦ëƒAçN*¤­0‹LÉ8×XáÔ Nb|xçÎápXNOsV­ÏÏ_?=ý{KK£v{vvö`w·YÊÛK™?Û$àT2ÛYäø©&AÀú‰©Ì£äÙU„ŸÔyëKB È@LÄfòÜðÒ´ 'pécA#KÐommíììܽ{÷úƒêÿøtqqî§~jîsŸ{³>þâË`0wïÞìûߟÀÀ™˜‡¾¶¶6??ãÆ ŠfôÜl«œ4(xܤ,‰-MƒÌ"AœØ™yqHÜê’–ßËï9YQn-؇ÉÑ&ˆ©eˆÖðšÇç9$‹f87÷-V@9Q4<âe ¼ÁD—ìÆÁ`°···´´ø¶zHb™™ði˜‹·&c’yFý~?·îá;ß¹ý=ßs£Û½ò7ÿf.ið7þÆÑòrç£'Ng†¢võêÕ'žx"Öp^¨„d¸$§§§»»»ûûûý~kk+œ»9ý.2 ÂM‡ ö4.‚?Ia3×`ñ:kU¨¬©¡¹Œ¬"‹ÿ—3õ3œ‡Èê(¶‡ùÐÊmÏ:¼å¼Ê2°'È­iÖùó”4M!{ª“À1•¶¼àòÊMï5ûOshƒÇÚç·š—ðÔ9¾…&þx‹]†œ‹ÿAÝ9§Ç_RŠÂ+C%¢Ý‰žöy4aƈ ]‰ÕŸ +Ó·ÈG0ÞÅN”A3zŒæ½X¹ÄÌ$‚ì|«éffßš¤@÷åôôôáÌ̯—ò÷_ýO&¿Ûjݽ{÷›ƒþ•ÅÅ¿u–E6›Í¯ÿú¯î¹çÖ××'“Éöövãà ŒÇÇgíªãB •ñxÜl6c…iãw r8îXà€¬ß¶Zè 烢+“²2RU •ÏF£Ñ­[·RFdHb2™´Z­£GÝòÉÕ—^šëtçïLŽgffæoÞœ+åø©§&O?p/Mñx"C·ÛÍR)JÉ!ãÑ8㜜 ƒáp8,è™°g{rž;ß×Z8®/=†â™ÿ×r¦Á­ '·RT•â =aiýdi('Uzö—Um(Èý­Æ†v_„•@µó¬«mJ|OO{‡R¹Á‰¬F´Ø( 3MIdûT`L&‚³ ºx&Ý7HlØ~­V«ª‡.CÎT9|øðáÇáÂmoo'wÉøg\¶¶¶úý~ú[æ•‚ï3h‹<)y=C WÞm+›‘0‘ãz ^;Pje¬Ic¿h0™Ä¿$‡ Ôê„Éx‹ HAp…LÁáN ‘Ò«Í6‰Elô ŠF5Ìwp™Eþd:xö`Âd™Ö& ÷…O‘]i&ºuÌ­¯Þ¸cH¦jDrð2ä\XÈ!0¸‡‘¡?“‰nÓ¡¯ç+6•QWì5çrZ–†ÉŒ"µ+rzà ¢2»iAKÒJ5ƒÕ ¢X¬ûdô¤¨.8¨™ÂùAJ„Æ€¯¼âÍæV)ß?¿´°ðîÉä¿ J)ffþåÂÂ7žž>z¶Y•ۀƾú~¿ÿéOúàà›÷:Å«Úï¡«¥ë›÷O.i÷0‘ðsËÃÚÝÝ¥÷øðáÿñooogT¥Óéôûý˜Á`0×××£{–YŸjð"§äÊÊJô¡›Íæòòr¬H#é˜å1 vvv".°¿¿¿µµ&ôÁÁÁ`0ØÞÞÞÛÛÛÙÙÉ<)‘•<$žž Òšâ >§×ajOœ Æ_Y6ˆ4Â0•3"K~𵓓)²rŠüýHž¶XµƒP Fv¶‚žŸŸ___‡ÃáÐúÓ©=Ê”UA‘ÆžÿJ_0yIƒÁ0 ò;³Á«´wª'xr.ò§š¬2 r"w/ ×ГL0ÈH¦–Ê)›$È1ƒac»4 *Ó3`\2—5Æ^“E%v£¡‹‹¡'`ˆ·(b©®œ¥Rú°y@ÁXðh˜ýéfó­¥L&“ß›û©3àñôôta~þ“³³Ç§§³B°rú xbBSý>„m‹ z²æP¸ÛLÅhÆ`†¡NÙ8x2™dþ?têN§3ïÝ»·½½½±±±½½½²²B>©´½½½íííd≙B'0G+¯âüNÁµ±±qïÞ½­­­ÝÝÝ~¿ßï÷f¢V°¿¿¿··—áÓTiv¡æéy$“ÖPaÃÇ¥ô`&‹ÍN¼ƒ‘aî|Î;²·ŠãÇ$œ;mŒ÷ZŽÓS;Àðí4X5ð<©])„zº€1‰Üÿ£££ä¤5Ö¨ähØTÃ|zp3ÔÙª„üa¡ž»l¥”!ŸÈšèÌ‘aºà’$ýÁU³|gNÒˆ'˜2éÖ\&`DH N×(NiM“P)2P¶Î)œо½ÊüNžNoä:—¡ ¨5+½[òÅó‰i!öžÙ\¥”V«õÊññçÇãñ™1‰j£Ñ˜”ÒÞ­O“Œ¡DÑùÚµk£Ñh{{ÛD¦"I«”,ùóHÉ£]ˆ‹4fONN–——óÇãq§ÓÉ熗뇽^ïøøxggçää¤Ûíu»ÝLh†½½³³³¿¿ÏýSyyyyiiiiiinnnss3êŸpÖï >“ÒàZ°¶R¸ôûý»wïÞ½{÷Î;›››ù¸¤¡«¦HMŽ%L:`¿ž(Â`‚gm)[ÐWç=VH2ÎL­¬Ü’ÒNù«“=ìjòÚS¹°àÛA;ÝÚL¤±8¬òlÿ «-b9&ØZ– ‘5šuA½`)æR+{>iºâqJ—…¦*Ù:r¶g6W~¦·€·iô@Eãö]Ú.CN1ñKpy+U-h?ÕØ˜>ƒoEþ¡©Æï`íÊÜÚ“maâž''èR€¤(-//7­­-*-‹ŸÛÕŠ‰eãuÙ–¶y÷~«Â0üà,ëÏ>ûl¯× î4 iºIËÆKBé9×dKÙHØS$òéšØ'›æMÜÏÒ·OÚfAfnŽŽŽrµØ$üçfæ¶´Z­Á`ðÚk¯¥/=33óÈ#ÌÏÏ§Ž‰Þóx<^[[{üñÇŸ|òÉxÔgu¥ñAœè@ç°ˆ|@|´ŒÊ¦ ÙÞÞÞÚÚº{÷îææfXyv{{{y«Ü£LfÒCÇ"fcVírߘOåhÀ™îBÉW5ë!H&ÎGçÉ?<2;:Çh8bt–,ªrƒ5Bö>ˆ¡4ïLx‹BÅ’ØL;Í0íAô›-♯ìjÏIgåÃmÇFÄ’3Á8(òMw¢ÀͤòFç°šB³l¡=Wî´ò2ä\À=Òªä·zÅ!q“œÚˆ”Šz…ÄÊoes'öô ôìììúúúÂÂÂíÛ·óV–4gÕw ^€ç–RrR[á ¬‰V¼çìò …Éã~Ub‹± §þWùÇÞ¾};'8’šP$è¾2+Ã4+dŠ^ÛÛÛ¨IZÄÞœ…"¡F;ô8™@»!ñ&ir·ÛMS77g8æðe¢¢Ùl†T¶½½½´´”Wf~“>p\°vwwó{hz½^§ÓÉ…eø&B¢¤.D5ðσƒÂðþþþƒ666666677ƒÁÖÖÖ`0È- ‹=ï‰e€5sœ% Uø]‰U¹9©·hkYß‚¾/ˆXZö¹!KpãõŸÏ MÕµ²²òµ_ûµ7oÞ|饗@ŠøCk>UX“Iq>^ÍskP=÷“Øl¡[;±é’[°/¨oþ¤ÔÖ½®Š¶GÏÕÃ^a `“á%mzïDáú÷ÿ#³©26ÈØ9Z¾]z¶VÙ›ÚVÇ×ÀqŸ›ÿ‹{ö93O–åæô¤€3·ØC! ÄÇ{ãœ>!ä̓ž•ó§™ÄŒ+#Yé²À”m4=öØÓO?}ûöíÁ`ešPË~ööö®\¹²²²¬fwwwww7¢m K ÌG4›ÍŒ˜g›½ÿ>¶r9&îܹóꫯ¾ñÆÛÛÛ¡ Ð8á ã‹ÓÏ£âŒ)ƒ}’ˆ¤…ÎÅTÊèžñcµîg9ïæ—oÅÑú£îÒ™W:•n>wggçSŸú”§…¦‰Èð- ±d\àì`ÊùÁL;¢ gMwo™üߤEsÜtM*z…ñ:Ž+h™ó½àÄÂP·Ùó pù³þ˜`OšŒÔ+~ææ/æßsÞùÔ†Àj©4†9¼¦M•¡ý@’H¹Ô*y šÕœrxSÎT¶°@ ¬ï Ì`ßV=€­çò Æw„ Kn”‰À€è åÞOˆìäÔÜD僺Ýî`0¯ãŽ%' &–{Õëõ®]»–wëv»=öX¢æh4j·Û_ó5_óñüîÝ»aÁE‘:$ºdÁNSïæ³¢Mptt4 2L3( ÒÂyã7úýþ`0ZÉäSº‰aô!¤æ)Ë, À+„$È©M‡aR ”’÷!£¢ã™ârÞŠÅ€­_ÞmiiiyyùÁƒƒÁº—ý¥æó*[[³ÉŠfñÀÊisÄx^œIÌ›±ñ68Æ"L2Çà31#0ÚLpMV® µœ×˱† Í,p9þÐ%ÌC¢Mµ"õtZeÓ]´Ës1!-æË,«^9°‹\qທPθLc£{T¥B>¯]¤»]_ù¿á3–7tæb:ý(1V63|W¦Ô×ͼ¬J("“Ïß[›g'Rf{»¹êPŸ Ah69ìs“G§3JÔD²ó47ͼbªÜ<àåD¬ÓÓÓ{÷îõûý¹¹¹+W®¬­­¥é’Z6¿„ë1ÍôrÚív˜ÖåLÚ`gg'=¶˜&@§>88ÈäGþoàµÐ¥ŒãžØ–Âwn²©M0µNNN\ô¸ éF y\ÕN)ç2ý^å¼÷9ž¹L¢ÀtÆÔ^»àï%uOŒ×2O3·¶¶R åÙæÿbºƒÀ *pZeø¦Z±Ð^¼Ìš…"qT d5’¬ÀK&ß2\cãÒ8÷6úý~ˆÝY{ º«üƒ†ÙDÆÄ,i€"˜¥Ã ²çàÐ ¶CL‘Œºræ 0e¬I¢¡à¨š“  ‘Nà”ܨv» b'ÊÓ×333½^¯×ëõû},’͹:±œå&÷ÍÊxŒ.ñVš Uãc(_?37yÆ*ív;²ža—­®®"Mßh4®_¿žˆ277·´´Ôn·#m’?'µ*A —„ŸücnK”:iŠp´Á ã˜J ´Å c‘l’ÅÂÑÉv¨ü@‘ë6›&—Aûͽñ꬯X‘fl2#ËîÝ弦ìÕ6Éz°sA^†m;ׂ ¼§íP+ouÛØ‚š†.¬Ûó´²GRà¦Ð´Œ ¥!÷Çš7ù<,˜Ÿ%bÙ÷„tÁ&ÕùÀ²A±—þåeȹxúÀòòr2P;°*~A‘Z†¡dkQ8Ca7f³!ÓÉŠ¯ŒÿX¬~FÞœAK pgŽœ'ðí¼à‹Õ-Ù¢ÁˆnܸÑét^}õÕœV™œgçIœD ŒÙó8=jÊ»JŸ8Æh‘&bƒÒ­âªÒJ»4e’PòÓ´©óé9úi{0´Èåq8†¢‚rÊ”8wïÞ=<<|ê©§šÍf|£[­V¯×k6›×®]3æ“îq9ööö<¡B/½È=ÓYy%^é'ë¶ E.aÝÌÊšwË.Vº™’aR™ƒP™Ãà°­Y‘ašmÆ‘XKÔš´Ó)‹+žu3Ò|ަ$”‘áúÛ~¿"£¢õb"™Q)Å$pö4BH˜ôÍ¡ô4cqÊ€$ßVÜnØiñ{N/$·%ĶdÙæqTcк¬·m1]}$P)a1èM@ít:£ã3(ð IDAT'û?EÉòòòÜÜÜÎÎÎÖÖÖÉÉI¢K–Çp8Ì@Õc=Êuþ=‡~˜rÓŒ7æ@§ËÉÅÒ¸JS+Cv «šç¸±¹Y$(Ž1¥S"´‹ U'ËF|APP›{ò ÁƒRÞÇtEø4.GÇžìÞGXЦ,@o‚ŽÒ„D”ßÄ9Ò³‡ÊyIú¯|ô´›Ž'£ó‘J©vAWŸ²Û³«éÞÁiòçšßQžq{•Ci—Œµ‹üAÎ2¹'ð·õnÐëÃa Ъ%¼nÊoè•ÀÓ\/”É]Ô›5@®%‰)?FãÜå‚&ŒyV›&—F/½ôÒÍ›7säÑH§ö"#®LÐ^ón,gÊÖö|Ì‹s¾‡—¼²²ÂS¨À¢iV’‹30ܼo®8I“&—3P†„¦§-* \‘„ÝÝÝåååÜáñx|÷îÝõõõ+W®¤2›½~ýú£>ááô*Aûýþììl)†BŠ›Í}¦G HåjĬªNÈ9ìßì¹ Ò”ÊÙÈ„Àjq+ÁÙ³$W Raês"smÕyJsÑLE¯ü¼¡¹åL}¼jAUDyw+ @»V‚¯hÜ®è{Q:€[”óÞ%f]WD ³ càùÍûê`¯%•Áˆ°Ýzt7stX‚ZÓŸéÅÀ/®Œ/CÎ……œò&ï»;mWE²!O¦W±»»Kæ¢MÅ€ó ´aGE¡c%,OG%ûCt$ðQÈ»•ÓT^ \PiÊB^899yã7Ü"EÛƒÍ>_׉Ϻé–(Ë-çk\aŸÈLqE ¦«æ ,—åì-Ë»z(•¼*›•,î0©$E¸"ÏñÛ9—!§¸R9ºÃE—àŸÁræƒEÈžÓ+ò<³¥Õ¨Wè|T|7?‹4ßhØ2À8­_ëÁÆ ¼v8¬ÄÙª~c‘ê {j[‘Ÿr‡¯"_T#Üäáp¸ººHŠÁuýÇ7½‚;Ãl¬»¦P3¸íLDâ– &OG!–š*$Äå̵$fL&“hÕ,--ÁVÊ/LƒßøÐ‡NOOwÿò_¾ñó?¿ø¹Ïå_ûöoß»rå}?û³¿ñ­ßºñÍß ñÁ†Ü¢f³™yIîs.ÞöN.Á\+P\"GŠƒ™wÅÙ¥rµÐ‘]m(%+ÅO?YdW,•FÌÈ7²æ7’² áøYâÅ2nÈv°I]X[YЦˆQYî›otjOÿÀ7qç•÷ ATsÆfõOÃÂ.z?½Ç ·Lžf%3Íòb,sK¶½gIÐ<»Ö.˜>UØŠ'ïਖÖ/g"²î“#bfŽ‹Þ½zkÞ@^$ !᪤£¯ùÜ!F"o ¿…Ñlòf7ê98Çf^ ‰3CP¤Ê­C”Ï‚Ê ô¼³³³¾¾Îð<±ªHYŽ ®òÛ¦ml!³Ñ^Ìe4›Í^¯6*Êre’ ÆJÞHÖétRI¤Ï‘j Óé´Z­À>Ö[þå_nýÄOÌÞ¹sº°Ðùµ_›»ŸÕµöòËÝ7ÞHDY[[KY“a{殸±šP WZÒE³—b¨ŒYtƒÇ³;#ïÀÐlõ"ÿ@¹@!£pqc‰ê„c×…Ôõë×ßýîwß¹sçÿ𙢓û(V‘ó:Pa ”DV¢‚ûaä"mžô´Úæt g÷9år"åÁµj—U“=Lê \;N'Jj›ݬu3„„%î—•¤º 9€ªÙDúAE2f^ >Òþþ>ð´):¶Æ²Ì¥±‰.,2òÐ$/ i´jÊy¡NXJùùù yîð¡`?G@vl4ihyœÈ]kÔ 5tàÏâÝØ™– %dª|~~>’šæXöp‹œüc³øˆC±¥±ÿé3s0ÑF!FÇãˆÎ¡´–‡vê›è0LËñÂ7ƒ‡3o¼1~î¹¹»w¯¾ºð…/œ\¹2~â‰ûÿøoÏÌ<ú¡]ù­ß 8sõêÕ¨Ý ¸’Ž ºSR „À–Þ;ýöê¸áp¯„LaBŸ×”³ñجí¸<äÅO+vMÊyŽxª.ŽZÝö˱"ˆåËyçS˵Y°ËV¡”óÀe¶-)ÒápfmZDÑP!¢UôƒS¡@} ¿ˆ{‚Ì}¸ìç” ÁdRˆä,Ž;ÎÞÞ^* Ñœ°KKK|Í@+™ý„H–ODŒfgg[­³{!›q‘³³³§ §33¥”ƒçžÛÿ‡ÿpöààÚü@ë=ïYh·s·;ÎÊÊÊþþ>gº³Á¾(2‚û¬ç‘+å ¨Ï> =}BµAœÈLÆcLž¦¥ö¦Ï\fSàú{ï°˜K¥šä‹$VýÁüÁ­[·˜^°£¥áÜiZš]bmbu8÷H˜+ D«fe*¢šç¸‹Ô7ŒÑÏ48áXJOÒò-Ú·|"—E5C¯¹‡Î·è#’lܹ)ur.¬Ê,rüðl  ‹4rªI`Âyõ…•<‚ç•äàçAò) Ý/k´nwwþÝ®"«ÞøÞ-³ l[m§Ëû÷ï§)ÍL€­ÛH¦H«Î™Éß…ùqßÕ«;[Pþ,^œu6ÒiM V]‰(ý~_ËdÓÐbô››œÃ´Ýn¯¯¯C'±Ê8ƒãñ¸yzºð‘467Yf¥ÛÝù±kä#‹/½”¯¶¸°°¶¶‰¶`O&“~¿Ÿ##ÕX€Á£££ðÙrèä¾ ‡CF&srÑ誂 @äp.U¢•~+CïEÚeåüœceÄ AˬNöͪ˜~s×%¥”ˆp»]Äjä„…[XΫ\çTeÂÖã) uì«xŽ®Uõöq0]Å?nKµ‘@P¿‚–Û°£jÿ0²†øÊUƒ€öÄr?#^|Yå\üÒ/îéŽAª¡áÏ\·]5É­¯çòœqeOT#iì[|AXôÙ'éuÛÚ«ÙlÒNÈGd§å¢²vjßl6¡!б·)Üh’GæÎ*tÛ3:ÂðÝÖ°¸:$Ÿr~šÏ–ÓêÊC!øI*³©á#·&TifׇÃ!¢pü!md¿˜U‡$e4ܲ“s3íÚÒýÿÁ™ÍÉÉÉÑ‹ÆÜk¯åß›­ÖÒÒR·ÛD[̶ó)Qd(gÊ’\XŽÅ\s"k ¶r&iê9A·+*'w¬_GîÌØ T—4§+Wð¨Â X€ ¥‡LîÏê­Dþ$&Ì$ä»÷ŽÖ.ÝzT¸ë"‡Z.ÐiÆw‡yÉôö²Í©?À¥‰ö·ÄÚt$ßv+Ùö ÁTvÌ5§3ꦩ)ùš±5Éþ½¤\ü\g:ynÒFl}­¼PCæ…ŒÃ4D¯Ñ´‚MËɰ½ÍÞ+OzÅ‹‹‹N'¾^pÕP³ä”nLHM§ºŽ©¸9”}4_Z\\‡¤677c[ wÖ¢NpºVÙI¯…©[Ë€š…Ïq’b¦j*ã"ü¯˜ÑÉluu5°XÔQIäÈe÷ûý<©¨vÆ„¦ÑhÄh'htÕ ÚD+sŠÔ¹3ÃáÊÙ2ký³vzãÆÞ_ù+“óZ 3½‰0ò¡Ãá°ßïçÂVWWs‘‰”Ýn7!0 Ýnw?a޵ BmS•ŒE3ÿÉ 8”©×™ÿ¥C›ßl4ç"¹L‹,Xúšµa3Ó,{R·øÔe{šÁh`ÖZÕÿ÷à6 ²ÈÐ/lÆx+ª<çDGÍ`{b!]ªÞÊJ v"§Ð'*R*‚¯‘C06 ©ß"Û£f¤.Í?wj/CÎEÖ7YëÓãÇH°XŸ ‹¾_eÀ|ÀnQžȆ7Ìê² œ—GÃêƒh”9S6ïlÓk ¾P ÈàRë`·’\)—m_wPDë¾ÞIe@„ÙLÛ•&[¹‡Ýel¡¢Pó ö*ž±2V:åL1aá^DŒبÏèeò?PôånSXL&“œì¤™ù‚‰=9}2š® egúÁ7~ãâ‹/–NçðÛ¾mñÇü`ww²´´ð ¥”ÃïüÎÅ_ýÕÆì¬Ñ$J¥<¾Á`1Ë`0„«277·²²qø ¦t#8 \“;IÁ ’V4u.jœe¶îÎ Îññq§ÓÉ[A•Žî@Òí$­ôò‰I]“}SÚÆ† !¶×ë%N?ø¾ï»þã?>w||ÚížÎÍ­ÿè~ „lµÊ™Pžff SúDõFc­A~dŒNÏ'Y¥V›*LÞH­LûæqÓ†1ï†K2ÊQ˜[ÿ¢RȵPMµ;ð­€GWdÊ÷ êó! Zs1TWEn0qŠ÷׉˔æiç$Ó$sÓÔ¡<ä´X0•¨Mq*ª*¼mŸEɺ`ë†Ò6íXzr.†´æã’ºdz˜‹“dßMÖ]\[r4^Ó··[¥OãmOÞdrlxÄžˆ^ثư€'œYú WS™á…cè ‰Ðdë2°îaãpC<³É¼&ðâ´ÊÀ¦s7\øð™™év»9¸“²'ó¹Q ï5R:@9µc­°8eDBó)·oßvO+~wwwnn®·»»wrrïüƒµ_|Û?ý§¥”“n÷ñ/æççW>ô¡ý?÷ç†?ôC“G‰‹AÌÙx@±?°BÚÞÞ³A¡  ¥]¹‡Ù®Õäõr~Ü8kbj>ˆî”Õ`ÝÖNákñJ°}§˜÷¬ˆû‰ôTÖ3÷Ö™g–­•sÒ›Ñü‚G‘ Ab!D&èš ÅgÞ¦Qkx§Ö©xkUa—þm]S~XóL;¤å"ÍÓ1rÀÅ[¡Ã@¨Õê.CÎÅÇ›$; Á½B&aMƒÞz@ŒŒÃâH90··sMJ3¾rXD_2K9+s—ü LX ýðÌ ÌT0+79Ë—ǃ‹U@‘¨aOºB"û3ƒ¨"A%¨#Awžˆ&X°&&7Ó• ]¸”—ê…”„| {‹¾ …y|öƒ`ÌÎÎò_GGG½^ÙþÄ›¼2lެ–¼¸œ™<(åÿößÎÎÏ7ff†o{þÓúÿpžÎÁ³ÏÎ=þx£Ñ˜2½1ãJLít:韧~"Tç†çÌ0”gÉÍHSÛa—U\öT (b øç&Yj¯ˆö$=·Ö‘ oBò®’0Ó§í™y1‚†ï0õ1Vææ<š Ç 2³æùD«?çoÙ}F#Àʦ]pøAYû 0`D L«´YI%aÂE"ÿóRm—wr.’>ü„Ù³/.;.je­Û’€ØMÞ›pjsd@¬b¾F aø3$‰T<Ó†]|P¾¸¼g†Ð“ñ(‰ çÂ4«Ùi¦Þ´d/¿cÌ N’Ë7‚Òƒ8&Cp– 7?== KKKæ¬S¦Àôä¯Ï_^'žÜâ GFîÆ`0 óÈÓ‡:77÷Ú·~ëkßú­ËËËÝn7A%ëÐ[­ÖéY«ÉUBfŒ –0dêg·³³“ú#ÙC¼G÷÷÷Éyñ+# Ù_ÇB[ïóæ­V 2^È/a(й4£—J¸ŒœÉŽÔJ舓½²A"i³É:ÈSh¬öäRÛêA@¦ÆØ6›«²ßæpç` ”3¿;)ä|f©¹gÉö¤¯–ŠÇAÅn9X«V^ñbgaS÷T˜$ør&íxr.²Ê}[¹¾Ó7Ô"Ñ ‡Ï™ å±H,UEÞ3@JÕè«N|÷r«“Âc¦X'ʼgg|žÈ&G˜L?¼H'¸È(É)Y-) •SeÉã¤;±ÐD^k¾eÒÓ6šQvKZY …)+ƒ•3×/ó¼!Xx +D‹‰dNÕZÏ-rœà6ašñA”©¡9S¢ÎÉïþTÉ J OÒ\OR Ž º2*hµ›RdĈ±btKmR„~W¯× èGÝ™ƒÒ=pû0U^m•›µÏ,ÙÎûóè±Rõ‚Dã¹âÚÁ6~[Î[ëZ—¯È¥”ˆ0YŽæÂ™nùWl*û2¥sê¥kKº*6!@Á¸}‘®‘Ø ßy€¦‰_küuÝ2‘ìÜdËÙd8ø†“qóJ³½“/"ÝÎþ§„Ϧò4x‘‰=}IåÜ´¬a)ˆ -w7á+©'Vð‚hæ§ÔÈ©g^µ{Ql6Sbl­ ¼Vn‡lÀ=SEÍ2C4œÇ˜gÎúƒƒƒ”óæFH~‘T¢gã±ßÈˆå” M g=t² ì¹ÈÈ`Où'ÒäÍó!ûA=ÂìÕ_6 VžE³ÙLT‚u¥ÐAÛÀ<³¨èWñ5¹3>™öσ@ת:¹×ÎÎN Íl¯U2fÎXŸß•G†kežŸk–?zE¯rµ dìb±å©<žU¤—Í:sÁ ²ˆhØGƒ{[¦$Eæ=“7wöc¦Ÿ™rUc¿bФu„ª–Ú+]D3 F£QâÀxÅŸ6†qr¾"jg)°s4ÀŽ‘e°2TI6‘Ø3LœŸ4þ$ܬ¡Pu­€R-šJ‹Þ„ov©3)ÿBó¶Rl³º-͸¨yÏWÎÙEš=UVeùáj' ú^Îa[­VP£|‘€NŒa&Æ;õ£ŒXZZJÅptttxxý4îa“Ã:W^B29sFÎýLääD@d:ü7¨Ãd!`2ÖÍ˼E®-ïPJ åšG¹¼¼L`ÈíFY3écíííÅÓÜKNØ<š¼2ï¼½½rÁ8Óëy4ô¸Ö¶¥Çí¡^µëÝêÈʱb[¥2å±JcbŽ^&UÛ¶Àr/„hÙ4»;œL¥q¸‚B«²2¥†?VΙ)†¼ž§µÚŒzïégUXÎÀ2;”»2TÌû{äèÒ¢íâ ¹zRÁ1ÀjYXXœÝÉ‘™ÉbšYIk@üœõ0f*D5£Ûvöätã4'wƒ`c*Ër€Â%¥¢ïš;9P¼žØ'4`¦ù ë];ºáŒéÎìììÚÚÚp8Œˆ Üè8ÙpÒE¹9¦™iÃ?IýáÔaaa!Õ@)%ñ)#¢1"$˜¤‹`k¾{¢“ð9ÁÑj„0°‘Š0·bee%eM¹u¼[³ÙLý~ k &MA˜9¯ƒéFõ`ww7̈< èòE:ùV€ÎÅ3éLÈÊ©ÚãEs—¤  ¡YR/Z’ijŒ Éâ1bb2¹€c7‰ŽcVFõi2ÑÄ"T˜¨–uŽvcÝ•\[‘­ª]ÛáIZÕ)(À©•g‹&£íZ :å–ºsÌ+!ÎU*½4d6‹«¥†£iwr.˜A`3,& -¤Vù»WÉùNûÝöœ°n½Xq™Ù-¨GìC ª#ìw3àk2’·­MØðˆq«’ÅŠ$Ú QðWÖ¸¥Â£¯nÓbÞ?;dss„¤:0˜È¸eºÜ <«‡Kûh4ŠÚBJ´Xœ/Z[[së•^Z°¬ˆžœœDk <þSŠ•x»Eša{{{oo/„‚V«Å€pëò™ÆBÝL–€šK"Içx§ÌòL˜µ—<­b]Dz¥Åˆ0:Íü€ l TÓ0f`æ¾¹Ú†5šªÔ ù ”&dQÄ*«Þq¼`Za<<ïc&I3jXlO q'Ó—!çÂâ €ô0«¶a…_±Ü«ÄàÄ#¾ç6ïu©………÷¼ç=“ÉäsŸû\&áyÏ\RŽc^«áÁ¼IXF•¨Œ5Ò«¯À§À…­*z“Ç*¿fÒs*¤ªûJo¡Rº;€-d‰¯æ5ppÀ®•SÃŽ–žlOLÛ)-÷—^zi{{;OáêÕ«ôêÚ// {0t礷ƒÁ Þħœ¹àå‰çq$–òÄŽÛ˜/è‘kF[ê„¿¸bâ\rÝ‚ ýé<·òé–1†çRéã™W 5+厹0_j9ïï—t1ì ÊnäxøÜ·… TRXPÁÈ×tc”…:hPÀËy·4³`Œ'.’ù@’Î6PŠä€Ý5Lvÿ“f&¾FYŠÉcŠl?s(±Êtëÿ^†œ 9z!ïÛ1Ðï¹BØÉyаZá’2ÅbùXÓQNOOßò–·|ðƒÜÜÜ|ðàAÎ)-è –bƒÝ‹¡NÒíD&BŽ-;®† ]ÎÛmñYYq€ƒräÐÊA€ÌŒýá—I§7G¨ZîpìbF¤®ò'ûûû–*A?ÌшC3„”HttôòË/F£ëׯ///çùf²'L6x˙ֺýyψܤèÌ´iJعÈn·{ãÆû÷ïonn"Lx¶¾¾îšÐ’ŽÑþþ~.2¨A”‘£¼yT>ó{½ÞÎÎNoHÂzà>YAÁ+gºsÕ< #bNª &C˜d¿ÀÄ¡® )x¬Å#¿¨ˆÚdåîás=ß° ¬¶Ì 3(™«]]]ÝÞÞŽb¯Ì>â³ ^Ac% …@¨FO–TÒ-fÚr7rȘ#‘/’5Ÿ €)®ú ËC€ çÝ(ßé\ör.þ'‰ƒž ¹6\aèöd¬Öt*²2M‘Žò$ ý~ÿ£ýè`0ØÙÙät2C9ì(ªòÊ€ rÜ"-p'—̰N "Ë‘³¿I“çU‹ŒDÙä_vHÈ8Œ³x¬È[ÝgòÞà«á€2€à̇¶©]Þíúõ륔N§C>Á&4ÜÇ–H ©H"†¬/•V¯×Ë3 Rúý~n~l˜œOmš§–ö cÔ¯6ã¨E¦!Pa ž yóBFÜÝ]³O«ï»Í†=‰4-€æÑ4R}æÕpå™Nø Óì¡<ðŒ'À¬í¹¹¹ A;Ñ’€)_}ôÑw½ë]ŸùÌgr«m`S5®Ê™ªà$]™éÚ\mÚÏ ¾ ŒpÈ óÛˆ™ÛiÜêéxGΨw5q?Ä-{úË^†œ øam±Á,i ŸH–nuZ„Æ›ªÈô3ÕéÆýû÷3ån޲׷iZ`ÐéyV=!J¬±L"°M¤ûjCd£t} qü)çe£LÇ40lå›ã¶'á ²\ÕS­Øen’¢Ú…Qü  ‰Í©Wr"ÇK°$*'a̲ÓPä±0A›.A%èáp˜wˆÀÎÎNð7äsŽŽŽºÝn¯×ãHŽnuOÜБó˜-€X¸àKLn‚û3KO!WXzÌ’²…9kÁ¹ÜÂ3@¾­Sµ†¦«ðulë^õÏéGòþn ñb.#¯·[nþäÞ½{333[[[‰Ð.-[dÅD—Çá4x 9Q{7ð•a‘Unñhì b…n‚óNOŒúÌñTéh—Ø`÷2ä\0=Ú”G;P¼ IDAT‹÷‘db¨c>2ì¨!ö>ØèÉžZðh3jGÌt´9`”Ìžô.šÄ$ë÷4YÕã­Ú3•WÄX,ž@3L›!êT~Vê,²…Ø1ÑȾRLÿXáÃÍ$ø÷´Lå¼Kœ°p2wƒ»mMUиÂér"cú5ç~·ÛÍ!ë›v|||÷îÝ¥¥¥^¯— bû¢áp8âÁ“ † ÞczÑpáò懇‡ø³ÁU©ÒðÜí|;ÊÞŸ i¸*û]ÊRÉMN1Áè:FF玬©c->ØeÓS Öþ+£õ ­€6d|QY·XdZv2™looLj¨½=]ü¿ì½kíguæ÷îÞ}Û»ûÜ$!$$GBbelʘÛx\À»‚Á ®'Ç.k\cO¦*©© S‰?85ãT“IÅI˜r&)€ø[e Iq®Ìœòpòdr1Ád.*ãAZÂm¼|NÞKÆ,ÂUkG§Ä¯ÉwÅÌÑ“\ßnNQz<›››÷Ýwƒ&¡äé% b©@÷”ÙΈò(ß4yU ýjqÓÇÉE,‹éöªéDö²5m‹ª›g›òÏI+AÕ#›¼Q`]Êk2ÜóàªEN‹œÊ Iú˜{90_aU²X3ªÍñÁŽõ g1„…ƒ²©MÊTìpsb- Ä ãý‹âÅÅÅ»ï¾;#þ^7™v&š<¬hkг³TØœL³;'mš-ÍÑþ•iÓÔOMB´ÊLj`Ô¢kŸlw¤ø…Á`!ü@‘Óà«ÚQEc€ƒšl4eÊeøhÛìììlooçQàQ–“ã2$æµá¯[£6'‚©ÉœG B‰¬á4##)µ2²r&+ÃH¦I†MªÏ\apHŸ;L,ZŸÂqÂ9Vc¯ }ÖŒqZ¥Bõd0–=1 ,7Ä[Ƨ%>éXx€‹O'¬T·LSº¤°' ՃѰÂ(¥ (9Å®‡Íq õ´q'»Œ pmú«‹’‘Œ åº&õ &7à)œ„œã„ÔPÈgŒ+Qv)*À>1ïBG«¨Â’L† tÑ…4曼IZÊDÏ|{LºòÉwß}÷¹sçîܹÃäD>“š:Ù+½GÓÒ¥€cJŒ‰­´… ‹Ún†MЍ©LŽH“©N|°‰¯ðks>²uóðUÐH¦šŒLY”ÊR^d÷bn=Ö6ñ £ v.°äÆÆ1`ss3ƒúý~?ã2›››ÌÛÂ@P+‚›¼Üô~æçç———áƒE¼`8ÞºuË ¡©Éò4–––p-ã GÌÆ,²Ô4æ†õ‰OvÏ IB3dœ¼L™$dÌB̃êõz©­óÌó¼Öü/«¸ÆeÚ—[° …©’®D)dIó=nÌFƒfñvT—ñXÆ3y8¹`š4T?Ýn×úU9 –––2\Œ ,;×ì7ÅYßäZ”µ×ívÓ/¤È†ÐÁº5ÁšB ˆŒŒ =K¤Ã1¼vbDý=QåP[@öŽñ VK³Ã4õ ¿`ÍZú„Æ‹“çÀuEïä+¹[p¶ÕÕÕííí”8,>ã\Lnæ°]œ™àßZÚ¹I¢ èò±Û¹ž~_^^Žq“«‚»17·­ûë„'ÆÎs¾Óÿ÷Ðaž ße³#úó”rˆ¬¯¯3yîfÊ4¨žÌÎÎæåTqÁÈš´"2ù-fNVö3·ÓM+›q¿ W•¼ïˆº*"D,+C8»?šã©×až[“¹Ä*/£ÑhmmÍÕ3Hx>y›\” Nô²ª!¡ ƒ‰´¬àA" žú›ò—\¡ø „œã¤«e“›ýÂùâ”ÿG@&fØù5DtÚQ9ÎÒ#5jÇ.uÇ9}+¥çs‚ªµã̲FÈ‹FºeÐEO ²à`5´ `BöqÇ·oߎ¨eÁÜà 4‰A®A28$‚L.ÂÆizãô'"A”Ï!ŽÂ? ª¦Q>"An °ûɦzÕg¥E‘§·»»›é˘_ZZ²}8`=mb²b7ì#P{¬²777Ã;È’`µ€ª‘_·£Ö|EH&O/‘ƒ!0ô#l_m¡Ç¬ä¤Î5Оä‹hA9—7Ý!™ÂìBN D—5hù±¿#ÔÙ­Ãpb“C#x²MÌóÅdÈÜT·K ð†µÙ>Ð%ò›ô,ÿCjk¸rz"l©>a3ÑËÅŜЎŸ±Æ ±a£FÛü_±2sÚU&à<Ó`YYô4 ²˜H~ ŒðœïôQ¬(Ã7"”€Ù“Á Â'÷Õëõ1§ŒpÂÈW@ŽpwÛJ¦M3ª\ Œ[O¶Ò_ {Yf§#4Y*žA«,jH“T=w—Ö‚³?sÞ8“¤´E9^nˆd±šÎßSJž9s&Ý ·âóH™ªq«€>¿ ñ,‰ÌZN©ÆV`âáÚ‡lhz iÆøsx/yb`†¬mÊ zZôo6œî ø5ŠFŒ™k¶Ë5kÉ “ fØPî˜N:ûŽÄm=ûêâ_į,?”M£ „|d­B+P³Ÿ ÊrÅfÔb¯ äl.°nÖ$ ã'£ ÇüÃN€ÿS(L6º ËG™‚Ñšó…œÆÿ¥ 6?‡N’sÍ(6 Á¹Ó4ª™S#ó3GÚQiclBHJ,k«k#âcÁ£b-„ܦ´yP&ðPøóX€°Ó¤a[Z€Ë¢î&ï¦80÷=¿†Óvš‰vĈÈv<&Lé†2éÕŽê›ñ||;îÎÚ·éjÄEˆ-x'ÐÝ .êκÚËY¿3oàÖï1ÒÕNBN…¼™÷FF ìˆé- n=ßž­åÄÐÃŒ¶éõÔg·Û]98øG{{ ­½ñµ¯=sæÌêêê?¿víðððÿévg»Ýœ9Ïö›J@7p Iˆì.øÍÐuåC"Œ³¬šÛDÙÌV+žO$sef7¢#½¸´¢ùI@% XéxT}b/¥B“9ZΞZàð²á^;:ÿh ùİÜlž[2e>-”ÈCðÌó¯0) ;’?d¾/Í0󿉑v¥m½ñx¼¾¾Ž6(=0jÙ¼|*óŸÒ³ô8sÍ€‡ð¸ÒŒk ª”Ó´ÍÝNÈe1Áæ .DŽÈCÓh“[‘¯M´,Y6iÑî.dKÏÕZ»Ö.2ìw÷9°´ÏH*T NøŸ¹0ôú>‘/›–™É™@^’Ó#ŸOñD-nGWZ/(û¹….’éØÁ]Ì'Ǥ€®DÊ“szñâÅþÅ_üüõëo;8x¶ßoo[„¼¾õÓ<$AÆ5ήhœ¿€ì>¡Xèd¬æF{ÏG¼+VâŸÉ¾®~Øœ>ÂÈ"4Âi ÏQ–'ï.“Fû!û6t‰á4aÌ39Çé 9å´Ë¯Y|LðÀ› ÓŸ››K’[ƒp K0БZD>-~qéîÄ>ç`òcp¬•/fƒNù‰O<@nÇJtœqf=±Þ0ŠhS’”<RrS:yS´TAóìõiy½R©4©–qœ¶Œ¿Ðƒ¤ J!ȇ$×1ÔF@"“ (ì8KØìÑôBC }h‘0<œb–Áu’v„ߘÄË«PÆOBÎq2@Òœåv§Ïiéè£*5µŒ¡zÛ?{"¡Ûív~t4úÃW¾òMïz×/üÂ/<ðÀ{¿þë×66–G£w,mn¾4ji2Þjí.,4)4'àb”Ü ;vË9_œZ’Ý{äˆiG©¹æO©Mah’óῺó1=Ÿ˜=–O#9M`[Ë™k)»n'ËÃUÓ]Ò&yXX¤Ãe Ê k‡`lldvœC*¹ÿòòrxnaaa!³;ÝI ›´:«"ØaÓ!„,)§UÎ3’«øÐ/sìÖ©4\ln}±Ø(ó[n1Òžanšžœçpamð÷)¸sQqf̅ŃMgø×¥35“ûI¼bâE¡©EÐÏ Y9ÊAá€Ù›¤ÓMÊ/¼¤âcbwÏ5CçËóÌ5¬NOvF`€ã“> 9ͽÊâ‚Cùì”ͤJ |tÜ¢´˜pjÞºG¨™{ì±×½îugΜéݾýµŸù™ç?ýéw|ó›?xpðxk_˜™ù/{½…»ïþË—#¬T¼:Ø Pª¬åLo<«ÿÁ¼yó&.Š¥'˜ŸŒsRSì 7/t{èÒvzYÑâînBeâÒÒÒùóçûýþÓO?XÉr;|x›x]C=r_AF¯œ/ç¹èÓšd»”ó‘jIXÔ” ªäÖVWW¡>çemooCÏ#iØØØ BP@3Šß&Ì~e¹ÚÕÕUâ×µè$¸•—k4>}:ÞØù_J./`'×Ì$RÅRŠ¿júáзìÝçNJ‡¬¨¥¥¥'žxb8~ó›ßŒœ ¤¼â<™ˆîP “L@™ÕÉè[;"f › ›vÔa³ipÕ4ÓOp@HàÌ™)…\ãSÅ *Ý<J=PzWKk5²Â ·‰!n¸Zò$äÃOÎ5ˆÎŒÇ'mD`Nf“`{ði)—&OO@í¬R6ú+£ÃÃK33Ý›7ÿⳟ}ì±Ç}ôчƒ'Ÿzê×/_¾¹´ô_þåß]YéþùŸô[ßzþgöÔ‡?üЫ_ýÍo~3ào‰…ßäœ2£“Q¤ ‚ÑÓ°ñ중ÆR*±Ðs§DG:óîU°a€ã±3??ÿÄO¼æ5¯¹téRC.žËæ°ó *þ%Öƒƒîz5_HÕ€KOdÁ -Nî{¤— fnnîu¯{Ý<ðÜsÏ]ºt íê°$ˆ+4¥C‡#] é38”³<ê¼ƃ҆ ÓS¨ËËËËËËÆ‹I!I²E¡ýsݶ:¶† ʍþðúýþ›ßüæ_ú¥_ÚÛÛûð‡?üõ¯Z™2:y›eJ)]ÔÌ“YM™7#˜NåLÏS ?ÅàyhxNbL%@hÚm¬Òúý¾ñyÈÓNL=*Þä ûï(Ö˜G8r=Æ„ù5kBžT9Ç_èÐ,žÊvˆÄ¤Nýkr*q jõôüfá8ýÁÜÜ_ßݽÿ«_ýÈG>òðÃÿÝK—Þ¶¶výüù÷Ý÷Æ7¾ñoŸ?ÿÇçÎýþ3ÏüôÍ›sãqüŒÍ=%¯w&E9O¾Ï?‰¬¤GÞ¢ÒQTæ8ÉË ú°q|³dX v¦!ÀE£››› J¶±±ñÙÏ~vyyykkk~~~qq1³)Fí°=”42º]¨ÿ¿fñP£ÁÛ˜9ûÖ*#6PáUòTq1XZZzüñÇüñ•••çŸ%žœD¨«at„²$'ˆåOr1ñëPEå“Y÷áp¸¾¾N[Â1þ oxÃÙ³g_xá…+W®´Éø*P!r)Ü”ÕdzÆò;9C#tÉÈiëÌó§ÄAï’ÕK›áöíÛ[[[é¦À±tbÇ!k4Ÿ<ƒÂ4 nÖ“&©J4‚JP`´RˆL¶bƒðAD¡°2G/ÖˆY·¦ä‚'‰5†ÕƒŠ°V<ù"f=íÔï÷OærŽùï©l$sÞ­aC>Ân±l9)g„]ž¼X »lfff<ÎÌÌ|¸×{ÝááôùÏ÷¾üåW­­=67÷¿÷÷¾ïÙgOŸ;÷ýßÿýÃáð+÷ß?üíßîlnÆÅ=Ë‹’Â9;588€7¶Ö0¸š•³˜ƒ&…<—¬­Â‰O“ƒAkÐ ZŽÅ8$œp‚éÁîïï_»v-÷›>9ç û(m"ÑM aô/O@,áÕetÃà€8PÆJ̵uÆmožèq}þóŸ¿xñâ·¾õ-¦”˜Í‚ÐHuŰ=\¯œP *yvww‘Y£;)Ú°«Ã’:þü/þâ/ÞsÏ=Ÿüä'ÿàþ`gg'åMyD”t¥ñIäc‘Lû—› lá}Úþþ>Ò:»»»_ÿú××××wwwSׂ\1ýV\Õµ¸áH•{çýòi$‹Œd•MmÅ:*xÄ›—Ë5äR¸‚îAZmÏØæþnãÌPŸl7eÐØãº©çŽ÷°= 9 |öìÙùùù›7oZ?œ÷“Éø°ý`V”0Sxgg'©+“IJ4#‰ñýýw ‡ÝÖ88èlm-ÇÝÑ赿ù›§Æï}o€‚o}ë[kkkwF·o߆½ã„ÑSÜtàéâp9Öí¹€.GO›È±Ãþoð,z+£I€6MÞ£l3‡dq„ìà"s „:윷(ÞãéKp¯]c&E,’fi;â\åÌ"±MÇ›rxxxñâÅ+W®ät3aÁ,ŠfHyÔ€ûæÖ'ËæèÁ˜dO3Þ¾Nb5¦É„¢ŒykΩ= OË„I `H®®u_ʨG63aí~öÙgÑã] =cãv×ÿ?”Û'’ô˜Ó¤Ò.ô˜x0û= À¢¸A×Õþ:í¨³NÑãÀ›Ã”îb‚ #€´#‰…åq)†çÈâ4Iý$äçÏÂÂÂÿðïïïolld­›¿TZÊxmº¦ì5ø@{™;Öh™¬ÞÛÛûüÜÜ-,X 㣋ssO½ë]ßÿó?þüù«.üéŸþéåÏ|æ©ÍÍwLæRVH6òz—9†ÒÉo¥t'¤ø‘ƒÅ1Þ>îÞ&hkqzЬIrp€ùà/Î Ó Ò%‚æ;57ÏLq×:f+™õ„„¢„Xë½Ã{öéÌ:=[kUµÉ°dЉ|2jCÁǃAú7Q®Ë£ÞÙÙá @« ˜#â\0C¬MÃÈi}yBšu“ÊÖÌÌÌ•+W>ô¡-,,<÷ÜsÑvã‚ æÉsZñf=¶^ÂäÓx¿†æàÝy²:" fÖjªLÆñĉ•v §6n7Ð)’ \y6#ðȶ¯„ì² ¹Mt@Œþ•{rŽç' åêÕ«Ýn7¸9zˆ>%¥Ð>ædñ<¥ƒøLDÎ)f Ïëûûìtþú¿þ×oýâ[]}n0øÐÜÜ…ÙÙ6q¦ q©vWNL½^/¦lV¡›1ùË^¯wîܹZõ‹ë öb©ìþi®„™9 [6£/Ú!4“Ìüi¶wyÄù…µ¥80ÈœõntYA.OL‡#×´ÒÉéïîw´··Ç\s*¾ßýýý¼Ž|¸ù,è\Õ9È-ÇìÀ¸?gœqüÑh´µµ¦Ø¦s)[Fáh—ºUºÀ°VQò,KÅþåy\yÎö€qræé*Küª³Vg%9ÈD'CAãHf˜†g‘q¢IEkÝ^GÓ‹0PŒÆ ¥dTfñPÓPIcÉcn'9 ` VÖ”ÔÜ8Ti²V¸Ë£“sÌs9î{Ûç5Y'kÔRlmh¤ãb Eõ¡‡‡W¯^eªí?çS,…µÖþåîîA§svw÷ôíÛ÷ǯmí‡:qkû@̘D $³¯×ëåDCM6…vPÜï¾ûîG}òãqO IDATtiiéÅ_üö·¿½µµÅð  ™MöìE©ŠÛãðª=ý@çlÝ_º¾ܯ£‹5¿mÀ:···É^óŽp•æµ’Ò¹äÂh\aìM5À+ð?ñü Mlì€ü×ÌÛÞ;ÌI$òL9IĨÉÓɸkD:ö&>$¨äéaFàœ‚]23ˆ.s#ÀÃuÆ‚` -¸& Ô"–KB ›zÝ*´æUÒ(×¢‡¤ fF¡yË „]Èu–08É>…SÀ,V®½†Ã!UGG`@‹XÛêÆE ”%C÷¬yçÁŠré ã ¥øGœ„œc ÁqdpÔÚš¬Éy×#ìjŽÎ’ÝoE‹½Ñd“co˜_žµ Ñ(ô 挘`f,½ TgÊ+=g`¨¥¥¥‡~øüùóɸ¯\¹bQ±&Õþ&´«$kåfè g6j6Ñ/@¨ÔÃVó¼c ‚”´›/ é¶ÓÆÀYœï9)0·Ÿ&;™à[¼ëóɑƱ{`é ñ´Sšäw2ÏÈ€óL\,êttŠý„·,à=íoŸ7U*Q‚+Üã¤æô›úȦŸ”ÿûŠW¼â-oyËÆÆÆ¿øÅh%¿‰ÀO ^¨“¨+îÿ“Âç±°=}ƒÀYCÓ…55\1 `€—(^Ö&ë. KöãzºØ“eó%›&w£ˆ(ÓS•0“¯³‹OÌ<@ÐÔÐÇ(=prô &Ò“¶s[Ûˆ¿q!cå`ÜÌ ®õÜsÏA%(›3ôl<«lÅj¥• ±véyDLÅp“17ú¨Ü}àW¾ò•÷Þ{oüÊèØƒ&{#¹ )ƒ;FÕ }Ñ€u Áž±4Hº÷¤ ž…M)éì>é‰w܌¸ádIìRÏyTÞÆB[á|'÷¤ò+,p·ÖÝSiy¢ü #N& Â›Ç 6K¦Ï(`½%¢©Ñ‰Uíáä5®ÉA¹M\Ã4Q¸×ë=øàƒwîÜ0R$ÛÑdXì–€î÷ûÄLœá¨|EJ[”fuÁrNrÃó÷»†æ=ˆ°S!Y„~Rœ´¬Xa¬Œ½ÃÃ/í O³±8Ý…/N¶ŠˆÔ °vü½Ž‰Ò¢pŸ€LŸY0ö­gz=¯Sœ8°Ó¾á¼£Àü¥2i2qV[PNü¢KO[µHm^»v-‚íëëëYîÙ¢ÔŽÙ0±¹Ìß,Lwæ/X¾Åàx“äIêK¢¸õ"¹x‹TBÕãxe÷r¾{Þ“¼žîBQ%ºf2EPÔ|!Z¾Î”HšDØøÊW¾òÙgŸ½yó&˜5ѱ5‡:SWfD(š.\a D©9Xsú€ÎÛéÒ|eNcž9. ²s²»Õσmµ §‹ª%GÃêÙ8³H)è3´n|±u)ÂtŒOæšiÂô5Q!Ï͆FÖÿ.Ë)‡¯¡Ý< 2ÆfY*e§ *d¯Û6Ñ€0fÄ;B/ *Ñ€~y,µôV-óQ.Ì—á– í=»9ÀMpÓ«Ô ÇuÔÖv”8.è-lƒ¨L^e3PS[¡íaÜ@Ç”P13–À¿$ØhÚE‡û$äs•“hÁ&É¢)jópòkôa‘à.V}¥^Ɉ†‡ÞMX 7_@m¯`Pà¬Bô(Á묋ãžJöÏööv’&P…ápxçÎLH0M9³ø 8Lâ"xj‚Cñ'|Ú÷ÚU |éÔ% BMÄ*ðSƒòuÑEÅÄŠ&ñù —nÈ©iÇrÜŠH‹ ²I«-wǧі0fTå¶¹YmôÉ}Î0Ìjs ØëÄÙÄe/]ºw®Å=fÓ[p–kC¶R#ž7ÉŠ§ ®Zm“ðàšÌ Àг\&³ñâ.ÞkMVžŽ:M( h;*ïd“Ñë„;¹”{ägÉ?Üñ ÕÖ0©A…“^Î1ÇÔ·œ¤»ÚÀu+ÒÒ€³´RÚ­o–‘KVžOíÒ ˆHˆâŽÜ…›Ðf|dxZ  X¡Á]ÆVWW×××Ë06é6'¦{éÞtÝ mÕ ç¨¹94п1-–΀£ ð€GÐ<:f¥56`¾§k¹x¿ú“sl?„¤®'_`=a:` ZRT8¯N…’äfFd î–ç\©G¾Œ L¿±x¿»8 ¸¶îNÎ/L|Ûš VؽöÀ&6Ín·A96’õ%M\vN]š=Øåf³€=«hÍPn''DgŽx¦”¨S)ò‹ú\ð¥rU0²HÆsF0v“MnR¯ËJƒé‰LéÍ|²×ë±T8¬]‰–Ž`·ÛpB‹ÉcÔa® ùÌ 0bî¹çž½½½F8ÑÒÿ æ ´å]؂ŵI˜ÇÊô¥ÍÇxàþ?ºr>º˜proÞræˆÊàBBQbc@šØR˜ln¯b°½Å“4Vuc¥xæµfŠ“„Oqòj‚勳>H1–djxqq‘¨òv2—süíÊà5ìë̓_Ðäã ²Â^ë÷û€$`>å¡ñXk–ÕOê—õäN2´h0nËÛ!Šm ;&˺ƒj: ´iË:qaî“{¼Ù]wè­\WK‰Àß'çõŒúââ¢åLŒïå]ä xJ‰ƒù’Â]ÞÝÝí÷û —I*‰ÈS6YÏ?‘ÕšnÚ»^dz”ð¸ÌŠòlíâSʲ¼_;D0¥ÁµÁhGï‹D›Ô?MWmmm2õ‡‡‚Ϭ1xd§&á×R`•œ=q…eŸz¢Iêɸ uvŸ²ȳ3EŒP=kn›¯- Ù̹£Á[ßfáPä¨Ëq3{IuΆB!‰f’ãÓ>‡¹Nê/-C×az¦±0Øg°åtÒË9~lÍbûvÉ%©`Ÿ #kn¤ jãàPh¬üÊš±±:d_ñÐð ÎÅaCÊ‘\½=`¸EFÑ„fdļX/wc2`”¾q’M€ˆø`´`“CR…–Éß8ñJ b.Ë,_äv&CüG…Lâ7µÁ¸rhô&#¸®µÎKÞ¬¹µ i/}à$ä|—ÆczÓR8æ–*‹çÿ‰Iùåð÷ÑêÈŸ³R³¬9¼Ì”ƒjÓ†­Ûí>ôÐCïyÏ{^óš×p¸çìpÁ =ŒÔøÀÊÆÈ{•©4¯¬õ½½=ê³Ò§e¼ÚX›ÈåŠ žç%) -éÑ&Ή\0¼¯âÜ“ƒõìÙ³½^/Ï“MŽn©ÛÝùê\øF·Û]XXX^^f«LÞ%«Å„´µvúôéGyäÔ©Sœ5ÀP™|¤õmço÷xyâƒ3b¼ËPÝ'@‚÷Ò„·ÄKþÆÖ´ #¹1/§X®^KLãµGª¥"ò퀮n´ôûýÅÅEDn åÍòy’äïùƼ\†=,Ì[3VL©:;;ûØc½õ­oÍ%`È3!öãÂ.óǶ£~tT™ÅÐC¾¦ët:÷ÜsϹsçÌn`yàPÅæuµÍß;%¥ØµÎ4ùE°Õ¯Ù°vñ8ÖŽ?êÔ˜ÑÈ2uØ>CÖ =·lW]𴿨˜@\Z >‰Ò©¦^äa‚Wø?4÷˜QUëÏ“w§rzà†ÃáóÏ?Ï`J`·»ÍUó¬{þ× iн̛€ö–k[]]ÝØØ KaU³ç  8c{HÌg€³z ¾%áߤ´²ƒ5¡‚aIÈ)Æ”0+2åÚ òlC­´¥†2"ÑR€Yv ee†ªnÎBXù'VÒsk¤ÎÔsùågžyæâÅ‹«««¨ÀNvåa±NÓj| aܵÙü¾K·Ëõõu;¬;au ?=Áãñ#7üÊè^>3ìƒÁ``llÃúIÈ9æ7ç)z<8ÉKm’À‚f¥,:Ô¿ÅÍÌG ½Mª«¦Bþ7ÜèG}t8>óÌ3W®\Éxˆ^&îFXjɬ01©77W )¶8v´£Ò2¦*xÖ:[ÚÝí¨ô$^×Fi¦;ºäûùÀÑhtùòe'éùŠCýD±fff&ÅD›¨îSß Fjb«ke7ä’}çöñ“:$rø4Ìí—ZO¶z 8îú¹¶(óíî®[óÑÕg“h˜Á–œžYB6ewaZ\ÀAê2‡?ÍBæ—w^ÂÞÅT³hY$f$Æø}±­VVV¼m‰.Mî!…¸o*‡aÁ£¬¢[š©&¿F6íÔ‹PW†ÚQå7ƒÃnÅL‹þB“9VÑ¢¶èçIÈ9fî)¡½/]çše`ÅFþIa|še›¼,ùr_’&¢—8'Ù(cðׯ_4÷ìŽa4"eñ•)Ysñ“Ÿ†˜8C§a¢tÑ©ÆÈC9=¡“’!ºémêZ—ïæ ‘e µ ´É“ÑÓ‹<PÞ´z±u´Ìk”cžSP”èeUKÛq0÷<á lHÝÚþ —øí,,,lnnZ¯oZ)ÀC]¾/ …X˜åV¤¶W¥^P2ðdgÞ8Xë»tŽEþ+㊆•<3ÏÙò˜kGÞˆ‰3'uJÇÂîî®›mŽ(ႊf°‹´€ µ4çHÙF¶¡V–A§8¾$6ŸÀ¾hB·¢‰|Bòñur޹—ÞÅtÅ5{ÛjŒ„öªgË!+— l½VøžÝ–À7®]»"çòÂTà,Ù[¬ž;Íq°pN;ªFñföT  &ZZßu %uAˆ4Ö…±ÖÒPi+|½ìcä^]À7¿âœ'韵‰ o¹MôÙ0ãbÙ ‘RÑRÎYêXlÓ¸¼Q‹vƒ „œåäÏ †Ì]Â@B5×Cq"oY6÷«AƒIƒŒ²fyPS:awêm lÚÝ‚º˜c0–©OÓL kx&ŒëÏâÉô4j,6Jgƒpõ|¸õÐx¾aRg:¢“x‰=µf"¸[/gÎÓ‹pÒAÿØ’D>‡±b——‰œcT»9 9Í­B“,§±Ãk†Ð-57’[°¦"ÆàˆY¼}½èUÔ­ùæ5‰ê`“y. ±“Þ>ßÅ]óü‡=ìU1WHü o‡Uí‚EW¿Ö&miWüf¦ Iª„°BÊñ´}zœáØ2öueýo¼9 9­àKÆI}6yÜÝôV'ó(\Žx02&£CÔõs¥ìà‹>(¾jÞc€{)nÌa¥2`*›zŽX(ù2 yJ‘µ«Ê0dvvvÊà¤E=]Ø Î|É œó||NqègÆ“I“]þú˜tJÌ>Ÿ®D­×”¹í ›$Ñx³ÔÄ>d9)lçå@UÈøMãa8±DÉQ|qÍ6ÎI ËëË#òIDÍZÊ/þo‚J-iPƒ°„ˆ"ö2ÙWÒÁ$ó!x6©Q7Ø&€Š #Ÿ  l4¨óD>`p; [è̇i5®^^^^ n*N¬®mH“Ó`“A maaáÌ™3»»»›››þ#í æXº < 9Çùãýf9,—PË&äŽgÃuæÓ€\Á% “O¶ÿ¦i¥F1¤Fᇭ5¸¥E€†&ËÛiM­|fŒÜï¾ûî{ï½w8^¹r%§ƒÛTì´aB—STÜAŸ "¡b‰0;ˆG”¸N@Îa ë”H–b´q󲘖À y#“vÔ†áúÌŠŠÓ(Y™Ìó¡8pƒ¿$:úüJµ‘dßã2.£s0eé"YëÆ‰ûÖ/pYx.¾{”hªwšÈõRÃe¾G¦dòagäRÑËqÝ@oŸ‹ñïdÙÐØCÓÌ g<ÅŠ‰,ìm眓XfküOXy#ø=z´™ƒÅÏ“££×ë…aœ°MÉ/åÃ=ÅáYÀ“sây™ë~â‰'nß¾}ãÆ¬û¢UòwhlÞÐL­1 –3ÃL¶79‡,!©œÍ³¹A2VÎnÄf8J _Àa ÃYˆ[qƹIýwº¤+°îdÔCÄd!ùÞ$ûÁÉfHJrƒ`¶ $‰¶¤™ f!SL4ihÌÓÍZŠE4½ù̈0RÃ’¶Öj®Š·“këõzËËË;;;ˆ ä/Mœñ¨œHÛDÆü<ùyd45WeŽ òŹ)«Bðœ-*ã ]±„´Bm„î»ûg@ ë8Ϋ̾ôÒK¶i0¼4Ú&SºéïbþtRå?ƒÀj(¤KÍc&Çd›q\‚‡˜+é\Ïóðn"ÃiEØQˆ"P“^'ê)X)gÛÛ3£AóÚ”¸=MéBît:«««.\À ;ñçP÷Nဠq4“ ƒ-4bè¿pK ̫̞>}:Ú¬ˆXm¢ýnë£bºSt¯_v>çwaK!'Î&ȱØ¥9ð4ó«)\ÊRûº+NŽ’a—À­ø?10ëy÷·=°ªK…ÝŽŠìáQXäÌüÛ°šI›ÞÌÏÏŸ?þïxǵk×þüÏÿ|}}Uݤ)î†Y¡ƒOkêÀÝoGeª­zçl*své%f@Ï™†ã¸}·ÖÂI!Ù2gµ8º‚‰‘•&LäŠÀ¶—Gì²ì¡†’ — ì$ägÈiÒnb9BåŒ2‡åxݰÍvb)8@£°¿Üâæ.=dË¡çT²Ž/ó=m2ìmÙ—ŸÁã(ô‹É¦M/,,¬¯¯ooo{õ{T"ÿ¼´ä`J2ªÖއðHñ2šn÷— þÀqf²5ÉÁÜ5DŽ„ A.Ûï‘n¿§”J™Â8:‡Qšj„gÂdšÉßÝÉ£í GeiÚXãCŸ…ãç„Éã)VE#èRý`‰í¥Â¸"RFpÌD·Æ’M%LÍ·= ûÛùIV”§Ñï÷ßüæ7¿ï}ï{öÙgÿê¯þjgg{=kv€÷Ú—í鄯¼A@-WcY¨´»ò7síbÙõ’¯´‰>“±âDSŠŒ°Ø‹;Õsa÷xy”;ZÀtǽÐtóúØNªœcÖ¼‘lÕ—·˜ãÃýàfòÆ×6få¹ú¶+I“’9ÔéÓ§xàÍÍÍ[·nQÜ0¯à‹Œ³‚˜™‡Å€k‰mÀqˇ„”•CÁgæ2$w><<Œ? r¬•(_¤ä‚i¶{oPX0èj_à&Sgº#ܾŧ·¶¶8g‰.M®Þ ¹ P{§Øw«×ëåßú‘e38’«"[‚ÇW›lЈîdô´l˜¶¼¼üÊW¾òÛßþvÞmdbF¡˜Ãl¤ÈE‚ªÚ”>^MøGÂÞÌ»»»é®%KÅŠ^upÊâ„¢4Æè©<ùä“ûûûW®\YYYa±›"ãM/„!$ÔCŠ*­,?óóóÙ­0×­šœHO…• …ªŽIÕè/ÝUX쌅’Ó 9Á^“ÝC¾@áµ›Uo¹úGt1¹cìI8»Nz9Çù| ÃM2Dr+ösiÓ!ÌEñ tf•6;¢ÓqõˆO·Û}â‰'~ê§~êÒ¥KôGtçΨl3E^±Û¨m'Ÿh¬~UYhäæ¾ùÓEwÝòhà9IW)‘æªrºÕQš¨68!ƒ†#`4ÆÀì8^"ƒ Ô95R Ï=‚Šõè<{D–àÆ~*#ì0Gìqb3éò¸š¤6 rþ·–¨³5¶¤ׯ_O3;;Ûï÷[kâKMÒ%eÏëür’‰°$hKP†lX½N¨=ã¡1ðú£*²Á/¼ðÂK/½´½½m"[†¨i Ú›ˆZăHɹ÷ŽrR“X™u3lPnì4mì Ér9oŠØf ›ýâäø®³V)-œd6}°¬"â÷V!:žüþ$Þ‚0ç’¿a}°¸L±˜`Æ‘adÌ¥®UÐ v'û[[[‹‘d­ì|”íVBŸ? : ‰HGVþ¡-ÈŠn)ó.†›Áô €ÞŽêJ™:ìFh®Š‰Û>úÿùzÛ·X÷pÚºŠf/»=’SHõÓÅáípz–™_K<”;xG>жl„4‡ž°K«Üã`0@4Ï>•î¨ç‹o¦>~ç;ßù?ðóóó3‚ædpÕ¶4„?@Pe7ö§)ÂMjǬó|ûþþ~HÃf”ЛîXð‡áp¸µµÅ° …]qm 6x"Ê=Nkñv\L€[”©'÷Ò&º2ÓJšLìyîrº×â>u*J,'+5x>‰Û4¹.É%3RN@Áâ ¤‚3¡Ø“*çxBšf¦Z•„½U €¤dôßÉ } 8Íxý²D²â/^¼xåÊ•Œñ;‰vº×ü0ßg¾Ð QI˜¨êÍɽ#gJ[—ÍOÚ¸£43Ù–öº6ŸÇn+&+jÇ ûŠš\ aåc«bbm““¯Î,e{ ã¨tª@˜vb¨ ”Ÿ7å@×af啱ž¢žI±±±±¶¶†™­o r›‰Nßüx_a“¿$V“"2©½Cëÿ»uÄoB§F¦› IDAT÷ÌÈU›HõP¸ä3MÆa°´8½Z-˜ôz+3qÉ<æææ ,ÄT³õ`ܘ6‚î_:R@ çççÃXÉÑA±hûì#ât~0Õ¶^'?€žMzèà&µ‡l°´ÕI/ç{"ðª2+±LáàrŸ]‘ ¢HuÁ/Óðˆ>°› wàWVVšdÄŒM·)§€vTœŸÅ”9#9¹/$ÑØ0“©AÑÜ·Ë@i]’,'vºGUd}]œ ƒñ—iêOÕŠp¦²á݇·ë ½G‰…à?ø{æ‹xȇAÒÐ?Í@%7ž [\\´¯3çšDÏg¯­rÀC„'°¥Á[zssó/ÿò/ÓÔ¡š<²Û%௳ ¹Ÿ­>Òs«Õ™‘_Ä{@›‰Ueš˜Ë&/ÁÏÆSpÀbwxÖ2EE·`¸‡à?Û‚ K-›~êÔ©ÙÙÙ«W¯‡@æ +Á• pV~-i(¡—çÆd$³iG…Ò %±ØH+©YBeq/¦à"‚µ³³3­±trއA@2Å®nG•*8RIëÊ,g“Ë,ÛͽdOù³ç¨¹ C·Îp=‹‰Ž(ý'h î„ÛJÄv+ô® †NEb?„È<7 ¦Gnæ+x=2* êÆ"ܸ6%Ý`ê>ßE¡ Ôr/0-L’wAšÉÙQ† Mf4˜-aaÇçô¼Mæˆ-¹JïÈŽÎP!(‚ieS‰¢`ßwÿƒ~5ä »zŽÕS;žê0Ÿ˜ A}‡¤V|`–þu\¹%h°ƒ5ߥëT»LЦVÍÅçÃ"’Ö„gœ 6ýĦ´y ëëëÅîÈ .ÀļiÏ: ;ÙÓº@&v‡By“gž§J™Èœ}¦D;2¤ÅÅÅëУ¶ÛÂI•sü iØ&&Ú“›'1aðf­u3­Í…°4›DÈÎ3¤ÀÙ-?®§3g«;á‚PÒÏ……´.”ó“€AŽé12Ó¤@ãaìBðwÂÀ¦¶›4@dî¬ÿ % ç,Å _ça“Ë­/iF}FŽx±ž¬*ý|'òM oÌOXv“qÔ—µµçšË+£–%N-ä¡ylÞ]4_¸Ù6ý ~t¥ÁãÌÝš¡ RîN›6Miž8ç]F½oÐLzÊ ‰W¾ÑE)—J ×ù‹0¤ÈK¼,¸CµQÁiÕ×vt”¸Éɬ"c†0z¬Hd—H.& øÐhRÕ2œËî ´pH•òxç­}wr޹—ƒä‡£Þºí™ `=-Ž'8±©PôCvwwõwðufp’ésÊÙ7|aããcÖ¶ ¦½Oå#Erf … ëyI·Iƒ»O;…”¡Wƒrœe°Ï]G2—SÌì«"K«ÇúÖ öìˆ÷¶µòyV©“ò¦çû<ÖÃ/È r¤´á;b…¥ÇÝTäT >¬³vÔÃÝ5Oþ¶‰“›¨e=ÄÊ‚Ì#ZXX@¾Þ¯ŒPêÕ½*Ç}:eÊ’Ö—Å<ãH_RuçÍ«‰GË,Aýe¥¤ìÊÀP;:£]@Ë2*ë,ÄöÞå<=–5 †FVQ¼ã\á±­,Ï ’@{ä¹ëèIÈiÓ€U™³«/•æ9”€þ—á’,:„´mãƒ8?57QN¨Ÿ–NÍ úf·H{Ã;ä=¶íè,†Ö:(ìØB]+ ƒtªÍ+Ä k[Ž3ctШ˜°¡Õ‹+•àf½^/l@ÎkJ ‚èºOðvÔj!—dqhšó~Aæ[zÕoÊ#S ²€Û¸é ˜‰Š%éK“Sã 9ªôêéKQEá&M+åÑâââÙ³gggg···ÍU3·­MFªÝ›$ëOþ„¼½ë˜Ùåy¾¨èP¸ž6&Ì7º²ËHkJļW^%™™û=¬@Bñü.Þí¨+g‰+|Îh4 {ðÍÚ€ÓÒº's9ÇÙÎ1+—• Šm5L†(³ú‹¼¦{ÅþçÉ’ê÷û ßÑØ„€K`¸Ä=!¯BËÓê¿eþƒÈ—Ù#õ6J0Ín,Ý—\’o“e”ŸÃ”™ö 春ÃÔŽºX2Á`Lƾpgffî½÷ÞsçΙ°Ë–u‡ù($JËìà °vüUNº?0Ò"ÐÿÅÅÅ·½ímKKKögû9ª$nÚÑò·nÝ*#2áÄ Ì!zp·(L¼¶¼ ½‡0©²4ƒD[®ß9,ÚDoÍÙÉšMˆÝÞ,S/fx-B¨Y(¢N¿ ï|"wrµ°®G£ÑÍ›7ó”øÊ»H}æžI>ÔOŒ/u™îmäQJ§ïÎÔ8X‹YtÝÛÑ9Y©<^ë\¹ressóöíÛm"Å)—g=.þ|Ï:.\|'ºSdmâÚçi0nÁ¡7G[à2ëÎå!¤+F0àô'ÇÊót.‚ŠkÚ“á[)* ½^“×5®×ëõ@ó- í ';‘Ì@çPkÒ¸ë iÉV§]¨¾MÐJÊã!yN:ÎëÈ•Áx½Z­e9Ø©Ø,­m6mñ0˜¯Àædfffkk+eŠyƒÌܱµ¤X hvvvmm¢ÄøÉ´®„©€8mGÌêv~\ ê(‡šEÁaŠè_²o€D(ÙØØHo#4 ÞÝo M7xªð-Á“ZA»(–-ø2´H§ºÕ’FO>ùä… ¶··ÃÌtã3·?ð÷àØöfu'Ï­M“èØ;ˆÜäcÍ áá AÃÆ}2ÓE±"ÏOc˜~2× Ëæ‹B±n.Y AœrÐaSl,gÒ¢ ÕN\A¿GHÒt¿=Ò&Í.ðqvÔÚÚÊ4íåFôÛQeLo‚§p÷pV]>‹H4j A©nr”µÄñÁÁê'ù¼ =´`Z;ª¨ßäën1»‰ üìö²ÿM3ÛÄo®Ó‰‚I´D4ÜuwàäCuê ²–äÈ`ª!¿xªÉþÙÌYëžþ¼Ií<«¸f¸9WÓÎßzE}ƒÿ û&"lOï,ëªq ràm2W½¾Iì*ë9u°ñØ/Ù¤ä…åÊ»+†°åNÍÄñ£v©”Û!¿)3ðWÙ\>Ê ‡3È“QÐï ÆZázܬÓéÜu×]³³³·nÝ*S#¥yK€`}W;4M›2 G‘ÄÔ‹ó/@Æ@Wpq#„Øã‰ûü–=.Hàô¿wòQÎ/ ¢Ž¥+æÛx¦(ñàáãª`Ö\Ó„#5œMòÒ)c@ÑAà]s…Ð[_›„Fxe9‚­œèÉSç±0üÄœÂs Zö¸ü>ç-" =´£Ö³³³=ôP¯×{î¹çÞ9%CT1’¨Ì“aú¦:''‰!6”É*Üf‘R6¹Ñä«•—Eh2Žg†¼„²ùiƒRXd/íõzKKKñ¶°’"MZˆ084ðÙäb™«4/Q'U¼zϘ·‰4»Ï–…jëðfmºB8:¼ùžøòG²ÍÍÍìöÁ`d?)9ykŒr -U³¦kŽ'»g‚¼Qu•µ‚*bПYXÈašÖ¥Í›ÍÀ!‚ÃÉ·‡1£ÌÄÀÛ¶(I…K‰»¹æøSÓp!üE³¤4–Mu ©†Nr’ºÅ‚¼7$ûž¥ðÔd(O&} JF+›’Ît瘩ȦùÉOšoÖ&VŒÅÁ‰e›Þ6´MºÔ¬ FXHçÑØp"ìÁ©CšžJ0)ŠŠ˜,P£óóªÈt:íímÃP6F´€ÓRÊ>Ùˆ"%I7˜Æ $ :OœïxoÊCF½ç4B(€mÍÞtÉëƒÞ}J—§ž"°6šU”ìÿ”ǵ¿¿{&UÁ¢ÐÙ­À,{ÒÖdYE?—}îêæaÛi¹kBþIÈ9þ:(EgÐéLjðXÿÞºu Ç=¶\½MZœE|¬œh¢°n|‚—¢„S²ßï»ÃÙŽêôŲ™g2œÎ¿lèåßrÌ…|üú׿þþûïÿÒ—¾´²²Ây @þ΄|鬇:(Mæ7ÓòÃÓvs&º]œ”'©&Üém“Šv*`QÎý~¿¿»»‹†<é°ÿ0 ž~úi:À¼J÷¨ÌL³B—Ä$h¿qîia˜~êv˺öu¤ÐfK´ö“)"í±¸Ë4ib"RÉ\‹ø©žéë¢Â¦‹Èf¸,€½½½°È|¼ÂXa°—­‘÷ˆ:'­#ƒ]Žˆ¬œ<“tm‰î…Yæ‘Yê¥Dp¨kiLÁ¡öÀ5ü™×”‚ÛºÝú¡‘R5‰¿‘o‚§¹|F~Ê\7ošl]²¸Ñ¯5xe±zÚþ ‹{{{wîÜ988Àù˜Ù‚iñ`5Ì.ÐÄ*1öcµV‡Ûž´pü¦¼¤¤c´åàà`}}¶sZ2VHähãÀz衇ÞúÖ·ÞºuëË_þò;w<6H3a!†'ҳ͓§çÄ,d´,-ÕU0NKä®óäƒ •¢ýf( Ù·Fa‡«ŠçZšfZÍö¦ÿüó7n܈IóeÄrv¼ëâÐj!ÓŽµòxKÙ“FÀrqèÒ­Å`’½ËG¢òéÓ§¢|አÒ].,·é¡JvyaÑXÛ/¢=ƒèƒåÃKÝàÙ~ë½ú÷9ÊzˆŠ‚ Yâ%|°ìtÁý$ [n#o¤n ƒ;ÉsïÍîéIûˆŽœàc bCtg0À°Î\ùœkß?çÎ{ðÁ¿õ­o1_ª1 §RÚ4­ÉH±ú$F³¦äçcͽ±OÁwj‹Ng¶µqk3“ÕÖ™i9PÆãC9={‚Úž=îm8…,éëÛæléZxŽ5àak-ê&©Ìš5c;ù é Ýn7œ1ûAð<‡ˆvKü. ¹…îôÖåédàuŸfXÍÌÌlll¬®®¾ôÒKîñ×§ ƒ®5$©‡Õ1ÖL;yGSä-äEñÔ¦¬á€(Æòú0›ŸŸ¸q0ë¸x¼ŒŽ£Cù ]+Î>‡òk3?_ON£ÕÞ#wdÍ͜ȃÁÀn¶Y'd–G›æÓc—à‚ Ä•åáè[ªaZedB®Â™×aJ4í/¿B‰´ :ÃaNjó9Ó\>b«®¸®8 )Ü< ‰ž¤ùg}}ýÚµk晀‡°cÏŸ?ßëõžyæ™ ”Ðè"B:"¦’ Ñ àˆÁ} ëìíýôþþj§sn<~ìà µ¶ßÚWºÝÖÚpyymREáÌç'Q…YëM•JˆcÔ\Òœ×i8žqš9ÉÙ Lo11‹’---y Îlל;Ô‚y¤hŠ˜‰—ÞÛžZ‡ßÉŽM„ãÏ…"lÈD¦«ŽF£O|â_úÒ—îܹsãÆ  E£é®¡“ëÏ¡–9y¦‚àXn8ž\••CÇì.|YË5æ[¬NÆYO/ú8ßHr0#–z† w‚ÜÜÜÜüüüÎÎŽËÐ!FœÐߣ‡A÷‘³¥>¾·X3˜øn‚rZ¤y KKK¹’Í‘¢GÂ4%4¨êY[)j ™aq”€€¢'ÉòòòÞÞ^¨À€Îw)C¹< 9Çù³···¹¹iÝSöÉK/½”S›4U+;›se™&ᨦ ªÌú×îiíãñý9ï/u:_ìvmnnn~Ž%ŸZ__o²N! bËqÐ[! 4 ÛÀ:Ê–Jôrh¡AM¤`qô¡S›Y7ÎŒFÿ^zæh°O§ƒƒƒÿ{vöi €rÎàÚDÜ®ù¾›+IP,R™·ßívïܹ³¾¾÷6ú"žf€Çõ[eÎŒDJd“ÄXžÐò4%±„—Efà!'Sé|.Ó¥·zQg |Ã,s©ö$„°`ÁS»mú`¥(±W©M\š<^K00\VDµ)ÒLêv»?þø[ßúÖoûÛŸûÜç&³u¬ƒÍ+îVöDÏ~é÷û÷ÝwߥK—RÊ»»ƒt“…õÌÙ±ÜN“øt¡«ÐË´hVÑ°à ø}Õ›Òé+dˆÂš¿ùµLï‘kž:u*¥üIÈ9Nîe©™ÇTè›››ÎFÓ…ãÅÃ<6 u¶4'`¥È R@¤nèN æ¿¿¿ÿï½÷O^õªÝÝÝ­7þÑúúRònM±€´L3h‹1-_ôO[‚˜XRpg—ne¥V0ñ¼˜¤»('r fS½b4úw~wqñp<þÐÞÞÌpØZû~ÿÛ33ýà`{<þÆdî1ß‘; 8ýØÃnÆ ½8­ÌÅw¹0,p-3©:¯25«Ñ9‚"˜‡Ž‡Fól©ü@Nèe‹µ°khû¬ä«ÍÙ³t)õ¥6“ð@=¬ 3åòi§NF±oiQÍqï§µÖëõlTC J£ÑÍ F»¢òêW¿úÍo~óÜÜÜ—¾ô¥»YH†ÎÑïiV¦É÷l½½½7n$êú†&W|.Rµ€m"]tÿ@ž¹$K³ó"P^€°c¾ Qê&©Ãýýý ¤<rÐ #í'!çØ¢ŽŠÖ[%ÌÀ¢¨1{‡ì¶)!‚Œžc!Î"K]^^ž?8øg[[÷®»ßþö¿ÿþ÷ïíí}ô£ý§O?ýîì¼ýðp4Ž&UÈÎÎÎÎÎç>h;R€že³¼ Ð98>Ä-›¬p “t{ö‚ܼI<±ÛíFsžt„Þø‹{{¯~j4úÑ3gffgÇãñ?ÜÚzýxü™IlðÄF4W’àG¢`¬ŒXHã- B f˜ÓaY&Fˆb@U¨M¤†P¶/®Æ¤öt­ì¦åÜ6hDra.Y î7ë0ïÈ6QËU‘"8¨¿'ˆrB%©Jl¿Tw­^ûÚ×þÄOüÄÊÊÊ'>ñ‰••7ÛܺçÔ¶Ê-Ñ A­éÅüs³'¾öµ¯­¬¬\½zuuu•;b°,¦H®™ YJO PúGqÜòánSå1§êEZi_DzZ¼»”¿´xíèÊ£p.„Ð&BGMŽ¥Y¹Ô — ù°Úx’9Â;¡ÿO9š§)m¥!ÙëõÜ v÷2÷fvv¶ßïãÙžú¦ ],Á­­­ýýýÇãÑý÷¿÷½ï}ûÛß>¿ð…/¼ð ³»»K­ ºAØ"/Ä›"éZ§õziGUos9¤Š(5yé¤#\./‚.„pöL«Ñh4sxøŠÃÃÛÎ///¯ÞÿÝwß}çÎ_ìtþùúú#‡‡/Nª"K3º8ûˆL¸žYgÔ#“ŒLt·‰x(ÜÜB›¦LqÝF¦0/ˆL–‹.ƒ Ø™X “SÞ€{Ó”n¯×Ëï/MóNpÓ€z8Ðq"^º¼5SH଻/kð€‘Xb â§žjbj {Sfõ¬ok“‹‚òÅÛM)Xû¼ 0]OBÎqÆV!vï Ô,, DC²Iî—– 4k"Ú©Š€H…Ø ÿ[k_þò—ûýþÆÆÆ‹/¾˜v´ã\“?.ñÝÜÜäÃSHÑ“„8dßbgôM6îîÜ¿¿ÿ~ôo&^O`MÿÇÜÜ%Mÿ™œ ËžD¸ððððàððÇ>Óïß¼çž÷ýÄO¼éMozñÅ?þñèÙq²õ‘ IDATgÿ¯ÍÍÿx~þpBÄȇPVrjsµé¡yc<Ç:r&&§¶@ƒA`Câ2EÁ{4ŒÃ6h¨‡LR‚vo(ɲ˜š4ósªÂÓ£LçC ?óÌ3¿ó;¿³±±`œ€õŸ?²oæz¹#‚ÿº,rTåâáòÑm*4œl¢ÜZJO‚¨‘d³'|ðÁ•••µµ5ØPÊšU.¿ø{|F´Ïë¤hø1öüµeæ³DÛÑihgE•‘€ tÛd´sRåsÈñ²¦íFæ›S›üˇ²az¨™W™´)q=£|fÖÄ7;ûs·ný³õ¯žzê©K—.½qoo83s¡Ûétšœ ³:i$[ôlšIS¾#ƒ`eìP©µöðþþß8<üßgg—ÿ›ÉDú?˜Ÿß˜™ùÀÁÁÅ™™Ë“…4[Å:@4ä\\XX8þü>ð׿þõ—/_¾råÊÍ«WÛæf›Œøqü¹àÀ¡S¦Û`Á:]€LÀeâ¬UŒí°i=ûbcàÌ•°‚½{ãð XîR°¶£– Æô!¢’v7ßôƘa»‹fÊc'|os¨ó`tIÏ766.\¸`L‰R;ÿdii)å&ÝA¿©Bd‡5çÛ·Æ]FU’ûû(/B5èÚwyáÑSk·°°pîܹ½½½­­-ãŸÅÆ€ ¥‚Ñl§€~ƒT~¢èšâáVêæM i$ yÑ”°>À“¡tBÚî÷û,ƒ“s̽ÛçY.Â}ï¹¹¹$Ôfj9Äg×þKm"j;-äìøïŠc¶öoff~}o¯{õê?ÝØǯÜÙùíýýÿ¹Û½:·Nçp"ji^SÖÖÎÎkÝ&:œE§Ò37MC‹ÓSÙ­µ ÎFíààM½^.û7‡ÃçÇãoL„œÉʉ=äbíè÷ìììÜÌÌp{{o0ØX[»qãÆ½÷Þ{ãÆ[·nu‡Ã½£Ã¶à]%ˆÒþåİ—L6¡3p'*<ì$h\9‡h’˜+P8ý_MR§.%ñw)¦Ÿˆá3 0ºcJÓ¾©ù äá?íL6qÚWæIæ+r Á•¢@?&—dip̬ûI„àŽ677ý‹L¼jnÐUo¶h‡XÂ"³läEpgÌŽ™ííígžy&Û– ¯ÌæfI=s©Ÿ` šK977w)vÞs¬õ‘Û¥€±ä@ónSÖ‚’ê à¶î¥Â'UÎ1ÿ Ô_T–F-·œ$.s ^dÈË£à™væ|$5c?Øû=‡Ä÷µöÁåå·ŽF/Þ¹ÓZ»ÕéüüÂB§Óù[“,̃ï P€p2Oz-1Õ4 ¨w9ïr›óóó[­ýÂÂÂÞÙ³sssÛÛÛg4ú϶·_}pðäþþþQ7°pñøNOx4úý¹¹óûûóâÅÿñ·ûÁW¿úòåËý ~muõW—–•r´q¢®˜”ÈŽÍæž3Ï6Z/¾ý6™™uÙ2ÔRò-3 ä•(Åt”ç<Êé@XJΛe.sîÑ~W¢Vy ŒAÉÊǦÊâ<òñí£?ñæ5Îk:‡‡s“vABëèððËóóÃÉtÉnrûíÐá9¡Ò舺Iã ˆ¤YÍÏJçÓéù ŸƒÁÀâ°Ì÷¤ 5¯]»FŽØ¤ôŒ_;Jê†IÓª¤¢Ne+:uê‘GÙÜÜ|á…Ðk€0MÂätŠeCÃÆB®ÞJùWðGF£Qœºòù‰ˆ<HIvª>Ö¾WâM1!æµÁ&t&Vü´A@“¤RéÁPž[`1¡ÖÚ—ççß=½kgg<ÿæìlwfæp<þ·;οévw%„åÜÓ3Û¡Êdb O®qïQ¶•›eúï‡ÿA¿ß¹ï¾÷¾ûÝgΜ¹páÂ7¾ñOFÿrkë,­ï´=>933s8ŽÇŸž™yÇÎÎ>ùäâSO=¼»Û >67ׯã®@|¶=£ûNÒ ZÊ Kơ♀Q VFKk/€Kszâ„\Õxo‡^ Vž l.éi3žÙäOJ/ ޲B´õ*å@´4‘­Žiää¿~`8|ÛhôÍn÷üááû¶¶ZkƒNç_ÌÏ·ÖÞ7þäüü A‹ c&ƒyÅ[gX›£ã®í‚¬I³IÀ=-xÆ.ËÛy3tœ³žš®— ÀâÀ«­™dz…mŒò¡ÇxùòåÁ`¯^>B®ô¢ˆ1EôÚ=d·gÉÍ2(B0 “—+'ÀIÈ96ºšõ¸ €ëöÝE·¯§€‰‘n‚GЉqNK1¶Ö>Õé|¶×s#tÈ“w†­½=„ñ@8¬ª&ý wAÝ¥pnõÝ3©!Î;÷îw¿ûu¯{ÝW¿úÕ«W¯Î¬¯;É¥•eñ]0·‰ÿÆÁÁâx<ÓéüôÆFgc£µö©™™ÖÎ~´ß÷`QÐUÿ÷»ZAÑD&ž¡ýol)ªœ.|èØãpÕR’ù5\!àÐsÔÒ‚r%ä«u¼·ÔžÑ0צ¾6^ð "㫜ò©bK‡²µö¿Íͽãà`µ×û'<²½½½³²òÎÁà»ÝGffäGé{Á¯Öã9ËÛµí'¨á7ö, {óľžÕlmt ™åàààÒ¥KnêðkT´Æ‰4F³Ý©õbе¶¶æy,'I6“õh±„$ÆkˆD)¢…Ó¦p,û"þÆßœ„œãoäv‡üš…’“:»7«?†1 o¶£®ãœAäÈTÀ€²U(éâ³m2ñŒÃœ„'Eœý•!ðR%DF3¡ˆ,‰ÀfÄÉ^¨V„Ükmöðpcmí™gžY^^¾~ýú`{»íïïe*mv¶hi#üCu‚Ìx<~avöKKÙÿX›D+“ìžDWÃaQ<¤‚nW\³pU°[OÐ'QQÖñ ];ª/‹Á°·á¼‡ÃX,£Óck n7­&#˜Ç†›²– 3XCzÁ5pÙÌB#:þüx<¾té’ÝÌfgg»ãñrkoîvë-oyÍÛÞvëÊ•§¾öµÑ3ϼa8Ì£iò†&"ƒ¾ó3oG =+m©Z}s G9Á]µ c1Ó–?f€=O Ã×ÞKø„Z„ׂxE6‚‡_È&Ú¡SÇ@ Ó3t‡W‚é cP5çˆÀÛa‰þ¡egÍ—q¶zÒË9æ”9lŠQ [–H±..1Í\4?ÇP›IME¨‘ àS›Z¸ÉôÓxí2=¦`zr"„‚#1pcŠ0Ôê™™™ÖéüÖÂÂO‡‡×®ýÞïýÞŸüÉŸ¬­­ýÈ;ÿþÁÁ»¸Ø¤ä–s0Ø^Qùl­Z»<évD>`aá;HãââááaG‹lÑõYk µ]FS {å“!†Àã uv,sý©2GUøƒkS—~A ”eà¿ÉuÔ™5ÿ joIÿ\’í–ÉKl¹”Åà)˜~´‹¢0—––"§–Ÿ~¿ßÝÞþ66~åÇüßþ•_ù¡ú¡µµµ}ìc¿¿¹ùw®^ýñííN§33AG‰µh»å€v¥`Î@¦rÁÃ6Cš¯Èà-ê¦ ]èšÕ¯)½ Oj7©£RÚâbž¨¿´´ôÀ¬­­­¬¬¸%{séIŒˆeÁ7‹¬¤­í¨”ޝ-›4š%{¹ßï·‰·¡)é,’PÑŒî¢-dí˽Ÿ„œãÄÖØð¶Ê€Œ_(mžc¶ÃÇ Ýfó#Ù6µåÀÉu¦æé}û©¦òQeõ[¡„|ß„Q›HB«-2Ó‹ž“ýÓ¹¹7‡¿ôR~sùàà»Ý‡'»1l]Ï X•€ÚŽSÕAÔìO3ÑáÚñ´MéÎE–AK>Ä.&…oJõi­k.»ŒËqN•ya5â§ù‡¼/‘*±íB;ª™Æ?,ˆÅ»Ò±ðxf‘TɇŸ…=.›Ÿþy[~÷D>@Éýßy¯ÿì&·+nÄi;d[ÒaTlÍùN§ó¾áðáNg~<~ï`¿ÿ?»ÝGßpxøå^ JZêý`\P Ÿæætb¥åÍcçM&Ò‰£F±©B†ÃaȬÞ40 ˜âE_×Ê"æÂ:a‡ìd>g»n`äŸäzx)9NÅtÙ“=\[&T€Ú€e@¨Ü[ò+6ß’œ×s¬¹_|1^ñ¬»~ýú`0È[‹J¹¥cK¯ŽQy°h£@%oK,L6zþôóuuãŠ4Âȳ£/z baPô(ƒ\ºt ÙfpNv–ÉÊ> „Är‹|©tm'Ϧ°þ êP, ¾Ô"U<@€A>Áɱ;I6ä= 9Çrð’9 õH:,L~¹P6-ÊÄ>ï÷ûëëëfs±€HÒm©[À\{opJÊø.L†½\y¸Tf®Ó ìÌÎÎ~~4ú™¥¥üÂ5“Í¿2?ß™`Í>}Š \“­z/Ô—tªšÌ]|_N$ ‚¹H|š©Þk„L Pkqv»ÝÙn÷'÷÷/ÌÌ<²»ûß?÷\km»µÿjnîU‡‡äÓdúÇ+p¸u6ÛØ|wÛÜñ®‹ Ù)çææVVV|š{È̵i#æ¢J"È‹óF+âžMº5ifÔ †´eæ½H &FÚ$pg1@†ý¼I:ý´=lk#+žpPø~ÖÜ:.Tí$ä|çgccãòåËPcÝ¿!U´W–ZÊ j[ìdyÅiœÙ31Q\nò»,‚]Å`JÜ•5}²~À&ɬ&aãÙÙÙB褙‘)6V¹EY‰(ò_EË3¥ r&ÄëøHržNaïÈÇYi­7‰ ³õ¯±ˆânÈÓëõúýþÎÎN–bqoÿSxÕ¼8ó‘ÜiÀ,€È-ÂrvÔ†2›æ“UM©xRóTøå5å¸ÁúBsž€Ýätÿ¸Ó¹8?ßÆã‹³³Ÿê÷¿ìþ‹ÅÅÕN§3y_9+ÃÚ#ÏBfˆºÒDnÜ­²1ØÊÊ ‘ÒX“|“ô@7c î¹Äa9™Mîâ-ìHŠdÂ[¬•ÐvRg` ÏïX´"%ãËšur…Œ+Da\¶UÂǯ$µF\ r{rŽág{{›Ê<xŠ1A µç<X$5P6M…¡ÏPžV9¡¢Uæ`-Z×®ñ›<+-žÈ~°e5$7´WVVÖ××———Çã±]°í|N‚;²V˜$7óÑì´×l@{1äX¤–I½ž2=%Hhíh4ê÷ûÞ Lò{l‹š’.ïÜÜÜ`0€›œ÷^¬áOé3vÁØR ° B@QqéFõÏF8 9Çÿ.Ñätd•Žró‹ÜXf¹³ÿsÜÄ0Ê!„‡µ[ŒIŒz;é+¶ÄMj¾@ÅmjÌ9&9‚9¯CRŠûçw%G' JްbÔÁhŽ“¬œ˜àT ByVðÖ’ó–ìÕ#‡´Ášzˆ|¥—K §ëÐksèü“×u»»~ý¯æçgºÝw<õTwýãÑ]ïyÏÙ³g/\¸ðìóÏ_wÇã… º(4Cýây’­[EÂÍ[ž¡+f«ÝpprrwÈ-ó‚æççï½÷ÞÁ`pçÎÞKÀÄò—˜»JŠÛDšª=“üfF”n¿W \Ï͸ëàðOçßTÃig^Ö°gæ`ff“†ÑC&Äãµ§‘÷e¬eV²-‘-ùƒÉ Mjëèòaoh™ —Y”nX²tÙ}ç]â]ø©Ú4ÖÃO6­* j< 9ÇùcC¨#I¾²‚Ñye¿¹Sgt Áñƒ­{†®9. È–……^Ü iT´´ ‡š¼ÍW¶o#áÇÖ¢¦»XR à›ha;Ï'ëçƒ8P }Ö›‡ˆ<Ú}Æöˆ #Öœ˜ì.«ra÷é—ˆ²äpccvvöoîïßþèèWut÷ÝW?ûÙÍ}ìç>ýéÑïw&½¤…Á=,›æ¦± •i웞ž¥b‘ž|ÅÙ³gï»ï¾µµµ7nMÍb`$)¿¹!´ßr›‹‹‹¥ƒUÒ`OÖ¼Ç ^;ª¿gĦ(bØÈµP¬>`X©p|ý]ìDTpµ)N¸¹Í݉““—V¢)õ.+ `“k¯cÊ2B–ÐEË\ÄŠy¦ ´£ÃÔ\­IÒ…/Sl´X$ðd,áÁûÍßN›Äü¨ã}Îs3lBvo…gÕŽ*¨ºgÃÑ“3œ<"Ú¿ó°a"¼¬–þtðkR‹ÉãŠó»oÜxúg~fñƒ|Í£ÎÍͽç=ïùÌììÿº½ýŸþóÿõ™3Y@”M¼ý䶃Á€ä$jx #SKhì:uêG~äG~ìÇ~쓟üä§>õ© Z4¢h\#HLWivvvyyù¾ûî»~ý:ÙÉææ&­~bm^+=Ï–)–¬‘8ô Ö ï9ý€M"1–¾Îkå5{°œ¿tÔ)Âèk†sl5w C)ÈÞÀ ¦PÉ©óà‚²<èìîîîz8dÔÕR’ Ö-ø¼Ý­B ÿ#~ .€t9q0©—úÿ¶÷æQrW÷™÷­¥»º«É-@ Ä"›À6†’…Í&dƒÇ'cËy=&~ýâ…$nÜÎ;ퟛå奌ŒŒ(ìX%vì^ìw™3â>QR¬Z¥RÙ¸qãã?¾nÝ:^ÊPÃAagOµZ}ã70=ÞP”Òª~/™bâ!ÕBÖ/ñº÷œ”b±(‹"¤ËäåVЀ$. uÑ&ˆd¶+úuÊñ¡aE'Û%1\¬ûN)¯’¬­ÒJÕâÔÒþF¯œ)+û'tS´{§Y£Góà )žÉ.4=;Óéb—B¡ÐÑÑ¡þÆ ;ƒµ—ÓšF#ZJp¢}WÕ'f'éE'Úžž‡Êîb@ç£h~ØLåÉ 6gÉ¢T8ñh?ÔáG5w!˜bë~ÞɈ»Î‹E0T Uh“L&ûúúòù¼ñpÓûÕQ>êH¦QýP¬pþ¡Žûx„›vUŒÄ3p§kù‹ÅD©4nÜ8ûÛR©´{÷nç\¹Ti 2´ˆg)¦y s*:—C)O_^¥Xµ7^,ׯ_¿uëV6†¢{)js0›b©]c²˜¯‚²h®ü³:bi_ ^†?°Áô¤(¨AÕèy€A09NžU8 ¶R³U¢ ¦¦È®Ì +w‘B¶t(’‡æé¯+Z] Êç¦~×l=!”‡+ÃÍâD…B"¤½ “ñføtšØÒPú‘ìØ]Á:*qƒy5Jš é$u(¬µØå( –WýfÚucµ¼Z“âðI0»8v¢AT‰3©Œ|^‰,µ[C ‚Xà¬ÖîØ¯žÎ뚸°Ý¡FWñvL†NA+± «yä‘7n, Úç 2N¦½¯¥¬¸çfnM;p jq”T_ww÷îÝ»û«Õûúvþú×G~zjÖ¬(І‡‡—/_>ñž{þ×øñCCC{|ÕTùÛÚÚŽ;î¸I“&=ýôÓ»wïnn°[9‹6Œ¢ÌÏ­¬¬¶»r¹œ7º X^W}¹ŒˆñˆlÃà„\Å™Zy¬þžWlFdÝüÀÌ‘ç)bŠÅhW¸6ŠKbX•cùõ×i9W3 u3°àè÷èt‹: (ϽDꔨÕ0´M¢v©_í÷* öo´Š®¥æÐÓÊTÝ<©c/‘jM¥R1 j',Ô¡—ÓúÅ>Bª¼ñ@M"t… >¦QM•ñ8¦À¦´Z Â~ÙѲݬ™2-¦O\CÛ”hšψ%¼/ z&KtÌàôŸ>¹ŽŠÅ¢fTÕjuýúõÃÃÃüC+¶˜ö îVk ñx<ŸÏë8*Ž |¬šjj5¡$Ô£n6Ôx}¬:Ÿ«V·:·qÓ¦i_¼íž{éôÒ¥K§ÞygyÛ¶5zÏÍÆJ¦NzüñǯZµ*›Ív6ˆMÍõ–J¥T*…&ÿPqLL¿FäÁÚ4ÖΓU ãÀs±Æ6Èì”ÖBuW;ÞJ¢cwªRžØSë2jƒÄ®ßî—©½´Z­–ËåôEàál_)žª/+PM+BÊ<ëdÒÙ~Î^Õù$­eÒTžA¤Ý ý È ó ^‚/$õÔdN ;8Ô ×(~Z È£3—ïdìÔ\8e PvDŠ@Ô,åêëë›4iR>Ÿã7€K„ÂZ‹kìÎfzMå2¡kB€f¬F™-3ó­ô3„3€—(­¨Ú˜ú, G‹ˆIm¸+eñR_ºÇTÆ ÁÞh®Æ?TÞRíÜ*IarÖ5íêêÑj{­V+ Æ2GŽÂßZ&þ — é¡òhé̩Ɔj ‰^™H@x˜—øqB±øH:Ýÿ¡]yþùíõúçnž8ñ•ÞÞÓFFÖ‹ÕÀC”Ëå§Ÿ~zéÒ.5Ož IDAT¥t¡ÊÃTÁl.€A‡võ½ÀЪ3öÄÑJþ­È%>Œ-ã®ífí íE˜u£³¥Qæ±{œO^ëQ[/ê´œˆ€pÁ £è,"ôx³:½¨¢jHáñêÉü”­@;O:]@é <àfØgW¹éðÜªŠ¦)»7«Ä¶ç1ê®Á’EQZ;Jšhe7^1t¼ø-¹\nûöíÊ;FA÷‰¡Þ.Es[Òs ZÐ2”EU»²&–‰÷ÔÊ’“éQvÅf…ØFË”¤8ÀNTUÔ;a›ö¸Íé0,¢á˜jqz)Êq_4Eóù<§ˆb´•ìTÀTͶ¾¨XpÇy¦N–f(v­0xã>:²§êNC|$‰ÁZíשԑù|¢X¼oêÔöööíÛ·—FFމÇœ{®­yr º÷ìÙ£“}% vðš7W/íR«Õjgg§ƒ#’ PÒ€pŠšrÝÞÊÅ ¸>EôªÈ,o.‹´Äv¢kÙ<ôJ,Æ×ã–E¿vKþ¡Žªx$¶‡ùtÂUˆu¦²G³]‰œð$i³]!6¤tŒ4iXqên½ÔJ«Ó^l§¼$Úç÷$ÕU¡$uÆ-«› x›Õ T€37¸œ»OP@unt\ŽÞlÓ”Ý` · u*M›l“Ñí×y ’ m{tOÐèesgâ¨ð0‰±?Õ<Ê„{ZáqÂk ²`Êí†À¢}@ÅÕ‘{ÏÜISöOuZhRÿ¤túâ€o¨<Œ§ÃÉ´1ŽŽŽŽádòöôXeãàL§ÓýÕêÈÈŒœmÉ$C¸°O”9Æ<ŠcW¼ÒAªìöÎLï¢ÐS*CÁÌZ)TÝû_ìnìPºú!Õ“õ0TyMtA`sá“4o{Âk²íA²enF©ÐHi($ÁzšÄhGÊËìálÖ¦âTÕ^ëí;‘í¶bÐʧìI½%]ųB¦ ÏX 6X¹§ž¯šBœ”NP Á’(% i¥oø‚Ëiqa Æ{ÆÂ­çF†®A+l†÷רdßpü ï[ËúžéD.ŒÏ“¶ãÒˆ%í: 'fñp «ù¨s‚Æd°õ~ìðÇb±®®.íÃuB–c´WZ@#0ÈÇo4p6¸5µVÚ5å(¹ŽW”Pù/ jðY˜›ƒð„™½LÔcè1BÔŽí3Ùl¶P(ÃQ©£Šè´.8N|*O¯AgÕèëºbĵíD7‚¹`|}\– jÒ~K©T2mPÝÀ$[ NX¼‰˜0EòUUŒšS¹Ì±Î:†â\± ¡ÖMÎt ÆïyÒÔV`²Ä”>ŒæÇÈiŒìΘ§PEÖ TÑšUæ!¢c4°ëi|ãµ÷=*»uþL\±Ëå²áìáýÏ•kAÆ©˜u­—(‰­ÎÀ)#Qp9-Æ`­@ÈæMp¨#k ¨Š~šiÀRë÷褺֋5]P\²Æ;ôx¬@ÔÓÓ“J¥öìÙCÍ‚ ‹¤hÚ#7gW¥4q Ô”C¦ âK•:•aŒ& ='5pô6Ìáą́ÁzàåCÙ©›[‘„[Ã^Ó”Ö"íY0Þè†Ç.L«“èä9E!Þa¸=Oší:±¡0HeF`{À·S0$(Ì*ê£fÈTúâ*˦L-8NÍ3ìíWÀĬ¤ËVñsBõFƒÓ£ÏЖO3Á¾*ƒP6„Ó {ª“ÈšìÏQŒ5Ç }S¥þÄþbví;5#Š¢ŽŽ`>†÷£{äaTøÎö"Ó$1&ˆëaÊuº™¿ÒÁ2r,-oj8¥i=w§Cè^QN«‘Áå´`©þ‡O£I*9ؤ2˜ UÆÔ©Zî”Rš,OjÃVù1ßpص¥R© &ôööÂÒèyDƒââèZyøWÜ’â¡ùÕèۃ硤£raÊ?¨)"»ˆ…è»öot‰©%År˜«ˆ Ê#ó·’j+t¿vË6 K̨dqêB¸lFXôòýڷǘzö+)s?Úó` Dk¿d( ©Ð™ÎQ©äf?£Ø>ñÊS ”°°ÀrP¥½á™8QÖpcIòµá§Rž-AþÔ©+Îlù²HH%…xDLkT%PZúº-ûçáãe•ÍÖ5x˜tŒWãNà0:´¨A…—œèñhaÉȬjí°=xìÜæHÿl‹ÀWGëZ… ˆ£^ǃðC¡¡6תÏ:e©hE#›ÑF‚R-)¼Ø£˜ôh? Ñø@;†„þAöºÚÊ}êBìN­M­_EÛÆ››ñàÑ!sfá>ñˆCTFLE‰Ú˜µÄÊÛ—ð4¥i“¹ CmXcI{ ÚWÂ*PŒ@¤¦â•<®ÐÒJÆøéy¨ú\3ú\¹SÕˆtvv*`Ǭô3Ôc¹~M(lÀ\Úc¡ÎÃæ„èšâ§& Ôñ#êáI)¸ÎkøQ¤Eû ¤$ÆQy9!‰Qº&Õ1"=E!¢YzGÛ6ZëÖתgª‚aç‹{çäbý‘>ÒY:E[P,ñÔ°`Ä€¾Äcƒ¶w§ópl|»±úî*ôl’× k­oç”J¥®ööc;;c±X.Ÿ¯[}ÌlDµšH$c±|*eÀyƹ™Â#޳)*Âz uâ„C¤o*ŠöCS Ñ GBEo¬,—ËŽŽV«Õb±•–ÎÖa¢:¬:ƒš¢}tÆ‚‘ÕtaðÛc£ß@;Já¤zþ©.*!rÆ6!ݱ3½kŒ‚jUúe4!Ƨ¡ªóO$¸ •Z 4‡%y§žzêqÇ·dÉ’—_~Yé´XÉ•§â儱wˆEcH…>–U·4çÃI؇!D×RÁ g KÙOØ•  §åÆÒGòIâ ÛVž"}á;íŸwww[9Ô£``{¶RU«i½(¹@2‚ ê“Ìq«ê"}Àw*€Xe84I¢¦g|©J‰mTèè®*pn'{ž^ŽëÌUöfaÐVm{¢%Î&åò]>I¨dÇDÀ<(p9­Iq,¥84ŠæîÚµª½½Z­ž?:jYôo‰Ýñøá££´µýHZl}æ<´î¡E*'ê9è2ìÉW©Â›ŠÇx‰< 3F§Sˆ ÂÕñO-ø:×qcµ, `±’Š@U(6F˜*ºcÑðFJ?¬ó4 @kZ}¬¥À*OB¨PS ×Z–ã*JÊ…:Z3Ö]]]}}}GyäÚµk)éŒÈoÃé©F½j’:™&ÖœLE¬2è“ÑŠ%y§}B/¡;ÝC9zÕ‡((Å#w®i]Õ]ÖñR@/Á¾ßΤ6ArœèŸÝˆõZ´|¤‡“ÝO ZeB”kKÿ¬?*y©ýö(ЬF”Ïç ‹U{¤=Lµ;H¼`‚¹<¬[gggooïÈÈH6›E|W»ñ ‹À—ÓØÐ4±­1sƒi&­ÔÙ{¤ö%f@W­ZµvíÚ;wj7ÞnMó"@¢yÑÊÜ «<Ý>x?ͺy Õ€°Ò(]h•Ð.”™sž¶÷KuoØ=’±)A‘Ê…õÓØS£Ïæ¤ ¬íLxrOÅÕ²U(üRå#ÿ¦Lç|ÞPi·Ž²êñИÖDƒ0­rF(#5œÙÚºS§KãÊcìÕ±1‚¦Ï£ÒeÙ^êéé©T*ù|ž ¶FŠúIûÂVÕ‚Ëó>jµZT«U«ÕSs¹=ÿ6eJ"•êïïŸ:<|k©tkƒ^IùtUÚ’â‰F1êZ”êJ¯œOOpÌã•‚4Ó#+T)Yð=í/•ñÐÃOþNä«,aNT|0J’f(êîîîT*522Ò¬5çÆÊ\*̘zGEæè(~OOϧ?ýéOUÜ-Œ}(dT‹±”´N«E!ECà ì'Fž_,aù³Ë€àÎ JZõå‚áäVÒBjL}Qœà 븢$¼ù97V ÄÃìéÏ=¿b[ÈÆ€´”§Cl`íGƒoÍ‹2qáWã •| ˜>6«(¶µµ …5kÖ”J% …yV(ý „äéš—Ó²,ÇÞ_{µ‹éô©3fLŸ>=‹M›6í…^¨×jù|\J èi† =aµVN½9bg· ÇÄŒ/ÀTì¼1õMŠ.±Ž¿Ù…q~¬f+²0ÙÀ Þ'2uR7vp]A5бAÅÃ^kõ@¹ñ•¾žÉ8-ÜÅãñ/ŒŒ|©V{3›P¯Ï43ç*•ÜxL­¶­»»Þ°5¥RÉ0:u¤bqúúPà½W‹E›%ŒÀìšÏVœ…JËðêqÀcr豄ßÄä ôáiqĨËh¿Ý>cõ@cvQMÓ׋â¨;·K€e£Í¼&ÈTt*Åzävö¿€Êè„QPÑwofÞ>œJ¥HCÙ 6+£U/œ“ýfšf6åèÔQêr6»fæ[)à<„¡R;“—#±ªå,ƒM—5ƒæÖ½Ý¦¥ÚJO¥€«:(ÄßžC±Xìïï'¨Õ“E¡‚ýC!A§¶ƒËiÍz{$3sÎ …_|qåÊ•Q­Y³&—ËõØ–Ö·† JÓIì£ÎL è´"èjEž%m¹+ÑŽmYURÑn¡12Ž_/UkPÄÑĚ͌k/AEZæ9t,Úö¹Å7 h€a×ð° hÊ…B‡—m(—jWkçWÿSr&/ÊÑBKˆ(órÊ<^AĶàõD]ƒeðˆj4³™s¨Ñ^ËwÚ@òøæ98ªß ¨Ñ„‰²DkÙn‚ËSXsΕkµE‰D{©­ZuÛ®]ñx|ëÖ­ÃÃÃ7‹7¦RüAlåA†ðF^EUË‘ ±Ú1g¶w1F^UÁ ;¬køƒ8КÙƒvP•¯Ó#ó +84%®¶V¶76¡¢ŸÞ¸«:]ïªô@ŠÅ¨¿{øÃç+•oww¿bš›££ßŒÇÏkæ™Pé‚á›Ò>ÙÛÛ«šžöÀÉoÌ *Ö=W @UȰqùh±05U«Õ:;;U¯ 8u?¸ ñ°äÙZøÌîUwîéûy ЕÌ9¡5Ç&±ŸƒC㮉ªªêÊÕð4ìqA/¤]w-v±ááICD€™jž:PÛ.Rݼ6f†¨¡ç¦,EÆ)s–ª´þÌ@¹©bå½V¿–v=쌎ñîµD¦=õêWtT4š¾ÐËÙWjk±Zm0‘N$®Û±ãÒb±÷•Jÿ£\EÇãµµ%%©g³ÂQh{p³j€T ,7–MË£ß'5±Ró˜lt*{–‡5N-oΊk¢`í©êt›VÏ 1ÆjßBQÀ5àçQë£Cs:6A™Eµ~m1 D‡ô<¨N¹±ê žDB¥=¬“‰ø!ÚÍb\t˜`ÅV3j¡(0?»eªCꉕ´K·~ýú¹sç e³Ù(Š’ªKBXPõ¿:ãÍ]ì•ÖÈœOÞZ¾Ê Êë€Æ_g¡ø‡`ü”r‚æœÞ£.¶aìNí‘h”ø@9è<õn ãèw¡íi{óø- )ß -@åûÂM"HÁCÆeêf£Ui.ÄPàÞ^§·{=¶­H«ë¢¡È_ém³¢Ú75gV&IÒ¢‚jÛ`SðTæS²É掔Çñz^iñ<á {_íííFÞ.§•þÆU¾½ýÇcÀÇÉ$\±X,Ñp0´"5ÝJ* ©ÌÓ `=­uJ^È(‘?éØñ&ÅL3ÉàÜ’w%Þ Žj2Ò¯b Òþ¬,‹L­þ€-Fû¼,•"Z5T»i»c‡U²_wS*uÙèè_ d³Yƒ]|¸V_­>Ý çKÊår[[JÏpejÍJ;Ú3çÄÚ"9LРxÓîîn^´-REá=j'ŸÂŽ1YÓ€}>o—jóÃC¯xƒVÚGQk…[än¯Œ=FÍ<.™1uBVüˆ Põµ‘C×'N²¡ J-Bz©ªËéݦ6fpH`G½ƒ£²F´@<…Ð@ZÙãoµrU¯× …‚â8Jã©Pk6¯ïNƒ²"ÿ¨ÉCýÎþä„Úfã,sŠh¿š‘ñU‚Ëi傚"‘H‹EE 1€Äz'6è`VM-L'GE%/™ç"ð¿ïTÚB÷:ìªC"žQä徘¸& VÔ3?Šá¨´ÌSÚǨQ8·¤ý}k<¸†²ƒ7¡±?OàÍ’ÑÑMñøñõú‡‡oîêªT*‰jõÖJåÁ¶¶]ÆS ªÕfÄéÇ0Ùç ‘xa> fZ{GŠÔ»Û'­Å©Åž:‹—Y:¡°BP:ÎçóÀ·4|ñkœÊ(aÏÁÎõV«.ŠÚÚÛãñ¸k òìM½.ÕKD¬Rj@p{2¡rsÕWežIT\ ªfþ …‚–mqØ* n«³³“Ñoø—¤DI(h@C Feú’>LãF#“³6ܯÊ4¨m6ª—AvbÉ#€&4>𦿽‹‹7¡§Ãž­9\\=“ò.Bl¡üÜKp9-FHÛ»TcJPŒ%3=çQ4ê"ÜPbWrŠÂˆJ†hèD•–âl€×uR”ƒQ†Qs-ˆC*¥ø¢<üi»Ý;‡\é\:Ñä0ŸݯæXZú·çãñ¾èhºLì·TªÕ;÷H2yT­¶hÏç\Ù¹9.;¢ÑLÖ Ãý£—='”ÉÊ…Ãàôª£ —iÇHç0Òé´Í?âöthKa®×|¹½šØÚÀ³”N§Õñ¨žô·GG‰¢]±Ø”‘‘Ój5+ÏÇsŸ-•¦tw{½YªGç@c*›‹Rd D J7*E€€±Ô«ëø‘½Dr&Ũ(\s°ÂÈ“4VqRQjë½ÓAsÂYzx¼) ’ÀFxˆë@$aTæŸ49v2㌛$ åöA+è 2Û-x½a•]G}ŠâuEꮚI‡^NëAÒ¤8jõ4óÅÖ»&e¥Ž6•'¯â„:½FLì ü4c (Ëxtg^”§5=åVÁvpwZQ®®®.zT\nŽ&äDñ—Ú\å®9Ú=²[fÞÓÓwšLõ¯V«-I&“õzO½>¯£#•J¥R© ÅbµZ}°½}(•*‹ö…ö@Î*•þSµêTÔ‚»(ªÕë×vt„Ï sö@ þ¤øƒR8CÑYðSGíéé™1cFggç’%KÔ?iä¡ñ,ߣh.EHƒÀÆã?âñx¬R¹±½ýÂJeg:ýtOOEÅlöÑÑ“Éi• àoÆ'õåYÔnEÊ€ÄSf&e¢dÊ’oO =„‚Â)â©ú ×@£BgÄRÀ¦›å®UeŽ“kÎÀ$ òpcÉÍ<°²RzXs qTƒiªî§H¤Ç‘£dÏÔ6”~OLišÇ¢ÍzÄ4m¦×Ó.ôrZ¹¨¨PWLm©T2B-ðRU+Þ²ŠÃ+PÄœ¦ä‚ÛK§Ó•J…ꇥ¨Òq9¯Ü¬rHÖ"b7 YÞ°¡U”á Ì›“ùMeÅ ë´6ÖÍD‚É*ø| „³ë|-MÈÉD¢#™,µµU­¥ß˜Q0@E'W«ÛãñÅÉäÇ«Õk çÜîXì¿tuÅâñk …t,VÈ !GïÕ4t …'¦âF@®{zzN9å”d2¹fÍv”Ö‘¼˜±Yb^—Ôé\UÎrÍTΫ×/=ôЮ|$‹­Yºôâ­[OrÎ0î:j3fóC†6€*±ÂÉôÃ.ü5 2fj­v;ª±‹Â¬ ò&ÛCë Ôpv¨g*›îXM>ëð‘)*½RCQÖãN›]އo¦‰Yç•4Q|áTB Âv´u†» ziog¬B× ²ç‚ù·öä›9΃Ëy¿áÐ0ÊŒéšy¢Õ¡}B"\0Ê“¨e1÷5ö¡â„-¦³ªMo¦%Ø…Æ7…Q°ólY6'Ç 1/eMï¨DyÊ.f=?vÝÝÝ–Ï¡Ô œOÕ ½~€=g'\aNTª¸0(¹YdO-KÍ;}Àÿ«Qtk>ÿD"q@oo"W©o–.¸œÖ¸êj(5–aéh±¥Û¶ÿl^D ¬Ê/b¡Šq9«!vÂ& ‘ŽeÇTWÜXÖ?6è„ >øàb±È„3”hÔ¯U-ÊÒ½S%uB{Ì7`’”˜Ž‚JzhðN}L‡U[©øu$ž¨ œR¶tº±¼ôJxjuÐAwÞywÝu×–-[°§n¬ê¥¾k 1•L'³{Ê.£l@YØGtºp–̨“Ý"™ª%Yâ\Ka-,ÈK¡•Z<û˶¶¿Û²åª_ýêÕW_-—˯½öÚÙÙìZç^—éW…5£½¦J‘š"0H˜N§sÃÃÃÅb‘æŠÅïž>“]6•"'Šéãà-å2òSÀ÷ÿ” Ì‹bg ¯oåÆkš™’a¢ ªäª¤JáAë^‘àÓìxjCŽ5«ªée.@öZuˆ•—[,•Õ†¨Ý)Ý`4x%×i–ÑÚ«Xmp9ï÷RÈ?ašÆzn,³µcõFö‚-GÖ©FB°ß6÷ËTѶ”›yéØ'‰mÛ¶YÛÀÃJ*'®í]TR0aös%©T ƒÎ”h¥Ñn“Év|Pegð²7åÿY«º“ÌZRëSzûíÚ†ž]ç`‰Ä¦xüˆZmõ®]=öXEÙlvB2«Õ†í…6À{JÇX«§”E€JŒÔÖ`× €±Gк<Æ¿­SÒ<ûBŸL¥R‡rÈ®]»€\{œ7±XÌÅb¯'_-—/ݸñ—{öÄGGÏ.•.½1™q.ŸÏÛV( Z^îÁÆ2L:õÀ\´hQ.—+—˶ÿi˜1ÝÇ¥coÀÈ5 ¿|>o”CCCü:,‡ÑU e—*}n[¹G‰äŠÅ¢Õ mÛÓ íìì$ïq"Gä•7x5«]C7Z—ÇxUµZ- ÆâŠ#÷dp JT£Ži_SÏô- Pð§ Ëf8Öö‰DÇú+¶Q¼Æ†7v£jKôœÁ bÈà¿Ñ" ‘‘ö{ô jG'0<™BûWÅbˆ ÷bÖÁ¾|\ )àƒY`’›¢Á@á=Dmüè@†2†yìmèéÒ)õÈÿ•|Z&íqñÄ€ø<Êðo::~X.ÿm.÷Ä«¯FQÔES,ÄbK̤ŽrÇ£› ±fþÛS¨ 5 ˆp,å1.š³2ü0—¥:@öTXÑ(Õ¢ï\.‡.Õy¢8Š¢?rî%“§•ËlÝêœ{+ÿ~*5¾^?@Ê›¤€&ÉÛ]ö‚6lذeË‹»µ°æõB@‹Ž+ ‘œÌΗsÎØWµÚ ´£AP¯c.àcãiÇ^]‹Á)LFë«OÁ žü‘¢§yÁÁ€èײ¹>y8ˆWØ$*¢s„pCpa¬qc¿1¸œd9: àl€›´ž° Œ—J%â/ùjÆK’hîOÑŸP"×Qgmi¸&…4å¥6ûB Ôãïrc%ÝX.8-d[üHW_C*si^/Ú“iáðp HfÓA¬Âè¾ÇO­bM2?íšzhŽX,öÃTê„Jå?•J±X¬‹½šL>¼q2U‡Ñ‰”™år‚@nÏÓj˜"qÍI+¦¶y²kBýOÏ›‚³Ëk±÷¸Óyíí'ÔjÉZí¹Têy¨øëõD<þNL˜¶jôU*ÕŠÊÆ¸Kkh:‹Æ¢.-¬Ìžn:Ï*+¾Í6¼Eè®IM/0˜m0B+õLªÄ¡~TGì(Zšëá‡u4æê(+^Pçj@¯5g}ªrbÙ ¡í-!*€ˆ·O[”¢«~‡ý`…Zëu‚Ëy'wÖà(-b¨Lr3o„'÷©#Ð:˜éÑÒàE”qDa'Š=CQûÏ@9!í÷Äç5Åñä°˜ÁVýÉ xí«€¼¶yT‘A97–ËØG(L+U½;*VÑò€F(WÒ×üïêbq(뉢£Í]9÷R"ñçŽnx&TD“é{t2Á9±’z¹±ü˜šÒ3s"¨eìvªÞ {&ß»¨êÌÚ7[!Ôl:=$»ëåmm+S)XØ-o?ðFŸƒHW­-zŠ«¸=ÔÆ<ý |kÙÙ•ã#ö¢áÇØ¬ê­YQb-Ûóô’B‚}L°†öè={-Oj¶`)êö _Õl”é‡J2›ÄþÖ‚'ÊY ¡9J¥D›IÐ&y›@]æ~ ýÈñÔ©X­¢ #¢G׫ó=Áå´xx‚àç„odA#fÔa@_@yÙ¿EVVó_Ã×Ó)[©r‡°:êh´jÕà™Ì”àoº1gV|ijÔn¿†G¯iIy¥ˆòö*ŸN±™µP8*c^Aƒx¯5:´ß+J‡J·=ÆÛÛohvñœ@³t§ì›•4Z›LJ¼Fu¥³û„jY_Iòiê n=?È *e‘Õ÷è·ÙÍÒMTj%[=’fhÄìÆ(Œ[(˜Øð”í)K3jüœb€RŸá_Áª1«Ò”ûìwÑb¤K¯Ð¦Ööa¡P*­û\ Œ³X øŸŽ.Ø“L§Ó©TʾS¹alÏöQr AÁ¨ç¶PmZGÑ^)vÆ£­ãÏZ<·<›k2jž‰(“R›ùoHC4Q.§Åˆ56'Y“m3²Y©~謈5bÏf53=ä5 fP<,µîN†u˜°Þƒ×Â…íØÃ€éÐ2»–hhR`Ê<¨ªö·f¡ÈöˆdÍ|0ùAa‡–v\£i5úÚMÁ?éüо5-JPÆÑ©{sAµÂˆâu^³@¥x0ºLåcoX‹È®„™,ˆE2+£«ª½iV¤¸“V¹eå¥U6<Å"®ÙîÂCrÛ”‰"Õwªä nÞ¢ry…Л@[³'*jJh‹ƒT==Jgvk¨ó¸£££ž×äv´£ºT„:::”V@ .ù½Uð‚¬ìôzDm^ØË“?~ü¬Y³¦L™²|ùògŸ}vxxXÈa(_)#F[Q'‚¤ÖÛPÅ3-+™k÷fÔ½A}ý‡ö´Uì66íTi·Ïn¶PC¯Ë J ’@OKM^tŒ0ÄöÜÛ”ð!(=A6YÁ™ ãõ¡¡7‰(ŠŽ¯×»£È9·9ˆÅ:£he"ñ_;;5¹ÑŠ·Ñ=ؓ߰aÃÏþó|>o8HŒ4U"SÁ¯·W…9Ò†Ù0ÅÔA̪pO/.¸œÖ,ã6±,Ûª ^Ou\ǹ5v£íáÆÒ?ël—jªŒ !ž¶vȇ”‚ž¢™Z_ÛÜ»× .Ô½™~OáÔ›öW‰تHFìÏD¤vŽƯN\“Ra†K¶Dˆ‘Bü Öar•‡`~¸§T L2*¿§Ê’ ¬£Wúä5™P³Ýãĉ?ýéOuÔQmmmo¼ñ.Ùž­‘©p›žßRq35µÚ®¨fÉŠô(›ÒÑêÓ¦÷ÃD³õ5­ß¦£©l-¢zÍ{;*©‰œÇÓA’¬‘r‚Ùïe@{l˜]Ò\¯šÊ¼³=jŽ«úI¼²þDâ/ººÎ(•Žt.휋ÅvÄb{œ{¦V»¤ lMÇKÍBECCC###ÚƒÔüLûO<6’Åd:Û bÛ*¬`ŽÄ"$†‹Ù~Þ|•ê‰PÌ÷$‹‚ËiÍ2NÜB¡@Äm‚ŽûjƒÈìGBLT«ÕL†€h åtRsѸI ¬_ÀÌCP1c#긣¹%$C÷EÛê–ìHŽÂ‹X‰ÜÈQJ¥§Bm¥çPÒ&3Çx˜+ë@-ÛŠ ÚÞ×3L”ç…Zîg¨ ::Á,¡£•³ó · ‹Ù•T*•ÁÁÁ5kÖìÞ½{Íš5…B¡Y¶‹b”í:ˤñs´å¯ª0Ô¬;(Ð`1ŽXX˜¨YË„—EOGÝ6¿kp2zç¿×,!áVIÀ”séz}´·÷ÿùìg»ºº~øá­[·®«×§ÔëKÃLªýßøO †ì»»»iN:µV«õ÷÷[Ž«|zÚV‰wp¦¶IÃÏrP¾„ÚµJj‘‘“'yŠÁå´`Ñ“'îãœ+‰§<󀆤2Þ˜‚£=Z_ˆ³ì4Ò#Õ<%H9Scm…â(Ð o´Â|˜µ@ˆy…{Õ<5¸¿¬ª£8f­`¤´/UJ:pSµPÅþ*}ªj)œÖjtV‰Z]h*föÏ¡¿Ô”®\.W*•‘‘zò8íÒQÑÉv3 *ÆcßÉW>›•y¶Æ›Dƒ'ìJ ±zã5Ômú$•JÁ߃òÚöxAg¹š §‚NTsÉûu¢:ÓÌí Qõ øuˆÔ±]UÙ“wGÁ¨Šv7©4Ú6ö8­ LßÏÞøÛ€ Få|çÎCCCÅb‘_äF Ïá‡Æ%(Å¢]pGGÇ!‡ZÇ §Ú¦¥Ï¯ã8J)|¸æY•×~oH‹î¬ÝÄäA¢m_YDÚÃW:tˆ‡µOÐL ¤b„½Z"Óš> [&ìW(+¾Ó´ g!'&ɉîµvqµèÜ Pr¦#-¨§  ¨H›ïñ˜O±Â†¶nûÓ{›]]]ÖÊ[ ÖàÜhÚáÐ)}äM)I1fH$=ôЃ:ȉ.Ö°|ö)µá€5x‚˜Ž1{œDD¹Ô! Çb[b±› …ã²ÙÊÐP[µzÙèè_T« ðÆõS¿% Á ª<E£{7Å>¸@†Ýˆfö€\ŽXƒ^˜6üx_U‹ðÈ5µÓ²œ–!Ö¨Jc hÆP½Åð¶ð+zàíh Ñ–¾ÚA ÉÄQróD;P£Rz%iVnD7–š¥Y~Ô¶lGG8”Ú4éÑ»ðœ4½ íucužÕÑÑadø:½·n€¶Š: …°+M¤+p¢€.íº3'Ï l‹Å XÜœFŽ>RUWÄ…hã7§Óé¶¶¶b±H%ÍJE===0éü–:ÆY<™T˜}tïKš'–Ø-µZ­T*±! œu[ReUi/…U‰…‡ABÊk%+U1ÙÑÑQ“"Ól‰î5 I˜ÌRÃØ¦äÿHšÐÁcže¼ãžvnG[Û%ñø­Åâ‰õºsîÖ¶¶ÿ7•:at46V©ÚâE{æÊý{: ®¦54ù-Hµ 3†=âZ’N¯Ð¢¢«$Ä4o˜ÀeBVÙÁ]Â[èBa­õ‰Î˜ì¯A%©_ÚžR¥h]êûªâDÒC'Nì{ìHpÈ™&QT+;ÉjØPo;jK@UŸ ÁœÈ 2úJÚŽEV",ât\]t½0Mµ—®?ÍÚ…°f霹=úÏJ#/ú4à°õ‰iV§ŽÌÙØQ·ÂŽFj£XÛgèOÄEjÓ†°?pÀV‚WÞF…¨µb;ÁX…„Î$yRZ<$뀫 °öCrGµÈJY­¤®uÑwhW~q%@Óé(r22]JyPÌ™w$n Ô Œ¢™S@ºÃp«ê’¦+hS¡zä‚@æM&ÿht4rî×Éä¯ÅŸÿì\EO‹V%Sí~QÁ£¢:F›©ÚáÓ:0`%6<ÔJ¼}r¦=K6³½Gµ?t j8kqó"8×ÀU8wý$ݬ³:"@Àˆ{ÐB*ö·R©Xì¿ë`‡¶¶¶iÓ¦e³ÙM›6AQŒ àŒabà °mÊp §ÅN):Ú%Òã÷Jgj¤µ{á³(èœVÅÚkp “€®¡Æ•Ø ý‘¦Ò^)A¯òS¥—ד³‡ UGíœs###…BÁa<®Nê(üL¹d¨i¾¢Ð&ƳtúRmkkk7nœeZx mIòäùug¥+F [¢9åuce`T^ÍýfÈyÐCmÑ2Q¶1-=iÄc‡%8#ð DtÜ8Š¢«;;50òRIoöFv†µ èÆkò8û¤Èš…sý JR„´j‘hPH[ ìM5¨X Sœàrœ—Ùh½Û¦|µ|ŸJ¥,/VN{MDf­(oˆÇ5&¨ úšEwدª@jçÁ´èUøk¢æO'ù]]]vÁv;؈‰øÝ¨Û¬4¤a£ÞÕ¢fªÆ¦ÔÀvgöBM˜ÂаêÒ¦fÏŠb´‚©J$A¼±>°ª`¾jL­!äd2Y,=MXU¢„Ô’L"Š¢‘‘r)¥ƒIS‘ôØV|ŒÒªj2A¥h‰Ý&–”Ù97~üøÉ“'¿õÖ[ÃÃÃàôè"˜iöú: ®*£¶çNØà,l{hÀ¡ôÞž¾‹Îo*y9 ®Ò„Ÿyܵ˜…ËÃ(…¹ˆÐ#jï¢ûÓsl¼A6žPAÒƒT€²NÎ)€^•d•ß„ÄNïÜ#eLëv^– òíñÚ2 2r—ÓÊ¥eCO6Ë$[1”¼^ ~›È«v€¬¤ ÐF:‡Æg¬nIG.ˆVjµÚ›o¾ÉÐ¥Z~œ“j½pÎ-­Éf³¸iÍÐ~£¥˜ ¢ ¡JPn,Ý=‘º×ªƒ¢l%”Å$ ¾KaÐT!hStRÒRDƒôÁZ§—àQûÛ ­6Å#Å,Ø—¤Óic£P”^ÊžŒýCmùêpÚn¨œPSÃÆ¯øF-9š‡h.Î8Q!¯¡5ÕjµšÍf …‚ùP 5:Õ!¦÷c7«Jh NSì»ÒUha{¸\.kpƒ¡„:O‘fýJJF¶ @¦©è_³öSVxPò\y¹\¶màÆR÷ªORÝ)O¸8»Gä¡/¸jèÂjÜi»šÞ¾ÖT¼ã©•O¼¸5qMH‡¢x&¦FO@©r”Áå´l.Ç‹¿´¿í1!êˆGÝáM¹ëü#%i/k¦ îýCí•óFûAÉ”u_u}”* ž1ªO:Ó@…¬“Ñ6‚8Â:*ÞÀÎ<{úÍ’šÞ å/õͨB8çµ{ÄÍš°PWPŒ”ª•fÑG]­Vs¹œ7QD’‡ÿ67¬t¥ZÝÒ˜Ú^‡Ò¸™ìíííëëÔ23êLûkIGlÎ:S¥] í=0¥ëÉF(Ás3 †Và›uóëNÖP†ŸPŠ´­kC£ÔÞ¦*w(Ä_ežIjÁõhqB¡ ÷°èÄvé”wæÏŒ©! [3@P&[AîQÇÓTæãáè-¨B•Š)¨fâJ05vÙ†¥N®À"å8Ph¥êw—Ó2ìV†Zf˜iê*H+­Ê_K+³Kg£=îPÙPÀ%Õ(lG2.ֈà#x ª!V%WŒƒZ^¾Ç#øñF”ˆÂ¼2‚?cVף♠û·Íd$T~Ô à¿-¤–¢¡Õ?€¨q2hÏFð¯NÔ²­rB{Iù€™R¶å‰P‡ÍЃöZK¥Rww·sðÕ9æe¸±DmJkf¨7–(«a;íkʼnöÕÜ»`Ã{Ø}íÓÐæT•q½Y Å@k|Ö Ð Ã#û'Rü‹Æ"ÔŸuâûµ¦ª\dϱþŠDUר¤vŠ\°KíêêJ§Ó###Àm¼CÍ«Ôò—‚õUÀ^Ï‘J b‘P?Ò†.mEýþ2{—ó΃`ëò^…`:®ŠPòyû*ÀN¼x­D©¾! öº25iL6à5Øúö;'¾V15  ¥ó20ðÒ#*Ì4 a—Þ>ÝQí~3¯jþ@¼™­^Ù—V&=‚=ÿ`ج£Y Â®˜=ÔŒDcv žÂ< =”ﵿ¢¾ÇþÊn›È(PŽR©´yófP‹ÊÐj‰-/¦ö<®¹ ­R‰R N„ËÞÆðdÊå2‘–B`ê¦àcŒ¥FJ,„n9øIDATéÏ9gcXÚ¢¶Ã>Ñáh,ÆvóH=@ Ñ¡µ$½ììÇ<“5½ìh“•ÓJ°…úžÅˆ£¸Hó% P>úè£Ï<óÌ lܸ‘Ë6!\Gå4âÁì —ÀžÔ¶êJæl™%?³ÁÅkq"¸œƒÖ´\£$ùͯÇSKÓ ¾¦)q!;LË_9"wêÚTl•E‘öƒÇªY—ÆAÈjq”Qg›µ ¨Rå<÷znìðšfåÚ’i8à l£Xm5£ÚõÕfl3lLù¬ÔÎw+‰ªÎ¨î²§ÔéIè¹åY©^²‡OõÈ­½úžŽ‘뛢s N="`'…¥*¯¶žjå&jV¼J'бÐPµM~¢õL¼’%Ãr¤z”ŠPW¯¯â4ÖJ%%ó¶ºFž +¥‹UÖ%MØü+e¿…€N§¬´‡Š£õ¦˜›ž7“«='êVJÒñd¦÷«DJÚ‘õF’)îéh‹>+'¢º^V× ÍDê#îÕ3= ÄX,6~üøàrZ¶N8á„«®º*<‡°Â +¬÷t޵°Â +¬°Þ÷,'Š¢Ç{,<‘°Â +¬°ÞÅ5kÖ¬½¸œZ­ö™Ï|F?ç‰ÁüGþêÝýØ>r¿ãcïç£Ø.ã]y;ûÇùÝ×°/\Æûö:Þë ¬JKŽó»øýçœsÎ^\Î^¿Â›¾þÿuM£aïî?|¯¿?\ØÿÍ÷ï³æÆ4ì›öp¸°ýûÂÆÐ…¤/¬°Â +¬÷g—VXa…Vp9a…VXa—VXa…VXÁå„VXa…\NXa…VXÁå„GVXa…Vp9a…VXa—VXa…VXÁå„VXa…\NXa…VXÁå„VXa…Vp9a…VXa—VXa…VXÿÇkïâÈ#Ö­éîLÙµN¼Äõ—÷e'¸?`-“÷â¼§*>á´äüßX櫯¾z/.'‘H,X° %~ïÉ'ŸÌårüǼ¸ño}ë[·ÜrËþq/«W¯^µjÕÅ_¼ßYûÓÛ g_^÷ßÿ!‡ræ™g†·£(©?=ï¼óZr3…B!›Í¶ê·¿ëëøãßo»;Š¢ýævö³·ξ¼6nÜxØa‡…·ãœ«Õjï8šL&³xñâB¡ðÈ#\tÑE.¬°Â +¬°Þ½U«Õr¹Ü‚ ¾ýíoø@Xa…VXïÓ .'¬°Â +¬àr +¬°ÂÚ¿Vò}ûM###«W¯>ýôÓs¹\nþüùιY³ftÐAιçž{níÚµãÆûìg?kŸ¿ï¾û¢(Êd2S§NݧÙÐÐУ>êœ;÷Üs'L˜àœ[¹råúõëûúú¬½EÑ}÷Ý眛1cÆ”)Sœsk×®}î¹ç’Éä¾ð…}p<úè£CCCÇ{ì)§œâœxê©§œs\pAOOsnñâÅýýý|ðÌ™3s¥R顇rÎy晇zè¾s#=öÎæ‹|ñÅ_~ùåt:}á…Úg~ñ‹_ŒŽŽ~ô£=ᄜs›6mZ²d‰sî _øB2™lí½lÙ²exxxÚ´iö¿/¼ð«¯¾ÚÓÓsÁØO|ðÁjµzÊ)§{ì±Î¹7.[¶Ì9÷§ú§zì±Ç§NšÉdöµ·ckåÊ•GuT__Ÿsnùòå6l˜0a¹çžëœ«Õj<ð€sî´ÓN;òÈ#s¯½öÚêÕ«ÛÚÚ>ÿùÏ·ü^Ö­[—L&ít;ç–.]úæ›otÐA³fÍrÎU*•¹sç:çN?ýôÃ;Ì9÷Ê+¯¬Y³¦££xá¼yóŠÅâ‡?üáO<±å·3::úì³ÏÚévÎmݺõ7¿ùsîsŸû\gg§sî׿þõ¶mÛ&Ož|Æg˜1øá‡sçœsÎĉsÏ?ÿü믿ÞÛÛ{þùçÿîß•H÷M:ìôÿò†ùM?õä÷î®.¿üò'žxböìÙιø‡(—˹\náÂ…gžyæêÕ«çÏŸ_*•¶nÝúÖ[otÒI·ÜrËàà`.—[¾|ù1ÇÓÛÛ»ïØµë®»®R©är¹'Ÿ|òœsÎY¾|ù‚ J¥Ò[o½µcÇŽiÓ¦Ý|óÍÃÃù\nÉ’%Ó¦MÛµk×ÏþóÑÑÑl6û /LŸ>}Ÿò7÷Ýwßk¯½622òòË/wwwpÀ×_}µZÍårO?ýôÌ™3.\¸hÑ¢b±øæ›oæóùcŽ9æ†n( ¹\nÑ¢E™L&•Jµü..\øOÿôO7Þxãœ9sì'ÞE®_¿~îܹåryçÎëׯ?ùä“ï¸ãŽmÛ¶åóùçž{nòäÉõzý¶Ûn³7»téÒO~ò“-¼«®ºê®»îÊår±}á…zè¡r¹¼}ûöM›6}ä#¹í¶ÛvîÜ™ËåV®\9eÊ”R©ô“ŸüÄ.~Ù²eŸøÄ'æÎûòË/ŒŒ¼úê«“'OnáíÌ›7ï§?ýéO~ò“o~ó›üpÙ²e_ÿú×Ï<óÌI“&-Y²äñÇ/•Jýýý»ví:á„þñÿ1—ËÙ!:餓vìØñÏÿüÏ£££ƒƒƒ/½ôR h½^¿üòËï¼óÎqãÆ|òÉιE‹-\¸°X,nÞ¼9›ÍwÜq7ÝtS>ŸÏårÏ<óÌÉ'ŸÜßßÿ¯ÿú¯åry÷îݯ½öÚ)§œr÷ÝwoÞ¼9ŸÏ?ÿüó'N<ðÀ[øvî¹çž»îºkÞ¼yögæœËçó?üáÍ,Z´è¬³ÎZ°`Á²eË …Âo¼Q©TŽ:ê¨ë¯¿¾T*™‰8ýôÓ_|ñŇ~¸T*mß¾½¿¿ÿÃþ°÷+²#•‡Vn{ò±GŸ_¶È|læ;ÿ^žóÐÐ ·Ý½gë²Ë.»óÎ;gÏžmÿ›ÉdìgŸ}v>Ÿ¿çž{n¾ùæ(Š^|ñů~õ«Q͘1£R©DQôo|cÅŠѾ´¸øU«VÕëõ;î¸ãÇ?þqE+V¬øÆ7¾¡øêW¿úâ‹/>óÌ3sæÌ‰¢(ŸÏŸ}öÙÑ>¶ì"£(ºùæ›ï¹ç½H»‘ïÿû÷ßE ,¸âŠ+ô/¼ð·Þzk_¸‹M›6-\¸ðÄOl~Mv‘óæÍ»úê«í“ò'bÈïÝ»wGQô½ï}ï‰'žX»ví—¾ô%ïß¶j-^¼øšk®¹îºëì6mÚEi'Š¢9sæ<óÌ3.žƒóãÿøŽ;îhíí¬[·náÂ…§œrŠþä;ßùÎ…^è]äÒ¥Kÿò/ÿR_ÁE]ôÊ+¯<ýôÓßýîw£(Êf³ŸúÔ§Zx/õz}áÂ…sæÌ¹ûî»í'vp¢(Ú³gÏúõëõâgÏž½aÃÎŽ;Î?ÿ|=8÷w7þüÖ¾—_~yÞ¼yçwžý/Ép‘¿øÅ/lOrƒŸúÔ§²Ùì½÷Þ{ã7FQôÊ+¯\tÑEÍ¿bK¶:ç¡¡/~ÿñÞƒ;çÉööto,žx¼èÎ;·lÙò±}lÿ¨E–Ëå;î¸cúôéÛ¶mÛnçÊ+¯üë¿þëéÓ§oݺ•ªæn~øá3gδ"À~°>ùÉOžtÒIüïxøá‡÷÷÷_yå•wÝu×îv¦N:sæÌxüÎñúõëÓéô!‡ò»—X,6sæÌcŽ9F¸uëÖÏ}îsßúÖ·¬ýÁZÓ¦M³r™­¾¾¾Ù³gOŸ>}úôé7ÝtÓ»óÐâ‰ötïøCŽnëèzÏáýýý·ÞzëW\1~üøýà XNsíµ×êˆÓt]}õÕ×]wÝŠ+&Mšd=ª°öÁõüóÏßxãwÞygGGÇý^,XðÌ3Ï\{íµûÍÛ™7oÞm·Ýöçþç?øÁ>è÷288øÀ¬X±bÅŠßýîwßõïÏ{¤+W®|òÉ'‡‡‡‡‡‡W¯^ýÔSOY‡íƒ»;ì°¯ýëÁ†õ¾­Õ«W?üð×]vÙþ‘Æ]yå•§vÚ¥—^ºdÉ’ááá{ï½÷ƒ~G—\rɤI“Ö­[öjë]ÎYguÀ8ç¶mÛ¶qãFCׄVXÿñµnÝºŽŽÃ>íëöÛovÎmܸñƒ€†õ¼>6sùcÑåE7Þ~ï{Ú¤êïï¿ôÒKíÏk×®Íd2™LæÙgŸ¢¨Z­^ýõ™LföìÙår9Š¢R©ôñ<“ÉüË¿üK­VÛ§úí˜Éd2+W®Œ¢¨R©\sÍ5™LæË_þòèèhE###ö¹sçÖjµZ­ö³Ÿý,“ÉœqÆ¥Ri_ƒ”ËåÙ³gg2ªEQôì³ÏÚõ¯]»Önð²Ë.Ëd2—\r‰ÝàÖ­[í?þx½^ßwîå‹_ü"ö.²Z­ÞrË-™LæüóÏgÍš5+“Éüô§?­ÕjõzýßþíßìŸìÙ³§å÷òøãß~ûíöç_ýêWýèGíÚ¬]*•Î8ãŒL&ó³ŸýÌöØÜ¹sí###QŽŽ~ùË_Îd2×\s!qö©·cëꫯ~饗l]uÕU™Læ+_ùŠí±ááa»‡z¨^¯×jµ»ï¾;“Éœ}öÙûÂ!º÷Þ{ùË_ÚŸ+•ÊW\‘Éd.¾øb»ø]»vÙÅÏŸ?ß.þöÛoÏd2çž{®í½r¹ü™Ï|&“ÉüèG?²C×Ú•Íf¿öµ¯xê©§ìúûûûm/ýÕ_ýU&“ùÎw¾c{é7Þ°,Z´È× 7ÜÉd>ÿùÏÛ zë­áèòÇ¢¯ÿ|ÄÃOˆ|læÏn]᜛¸ñ_¾ûõ/VXa…Ö»¸¶æÜÍKÝÐösÿæ‚À>VXa…Öû´‚Ë +¬°Â +¸œ°Â +¬°ö¯õb­Ø=å¹ ƒ'Mî%¬°Â +¬we½´%¿;êÛ‹Ë>`Æ/—­9ªïˆðŒÂ +¬°ÂzWÖ/—õ—'|È5´¨e.'+tN¾ñÑM¿÷+Ò…þî‘ áQ†VXaýÁ®hò'†b}£¥üïþX±sr¢áoœs±eË–ãïï>÷[?â{~÷¿¯×ëgZ9ÿ¸Dxâa…VX°kÁ†Äo6ǯËp.æœ+ í|ü^rÏMßKNœxÐ ‡õm_»²wâéqÚ_ÿŽU)dvŒL>0<ñ°Â +¬?ØU©t:—ú½.ÃüÍ®/}x꤉'ÆŒqúopÛK¶ÍüÚ ¿÷ת£“ë›NèÞžxXa…ÖìÚÒù‘ ÅUG‹¿÷“OßqùIGrí÷.™6mZ,Š"çܦM›¶oßqÁÿ¿ÿÈoŠ×ʉZ1<ñ°Â +¬?Ü•W%£úïgÓŸÿÏ>xâGáœûßùíÞõ·IEND®B`‚saods9/ds9/doc/user/catalogs/editjmagrange.png000644 000765 000000 00000544641 11332127304 021724 0ustar00joyewheel000000 000000 ‰PNG  IHDR&_ÄŠbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ ,À"x IDATxÚìw˜UºÿOåÐ9LOwON0C†‘¤¬a ãå*«"º»Š×Àªàª(¦‹:ÊÊêQLõ®˜@\QPEQ@ ÃÌ09ôtOèœ+‡ß…-ÁÕÁe½ëïÖç™gžêê·ÎùÖ9o·êœÓu UUÃá°Ïç{ðÁøAºbî<;ÐÑÑÑÑù% 5M”yl#´…B.—k„ÆápØápÀ0üÃf………wÝuWIII^^‡W®\ÙÙÙùàƒAøGÿÿÀ߯¾ü·z-êèèèü"dù­uïü÷ms8Žûáæ]ûÿ /,\¸a˜‘¿òÊ+óçÏ—$IÛ£í$‰Ü{fýhê½óe CL6ó úc³ÌfÒaS ¸ÚÕ¦<ߨÜÑ—J%'–9÷µö$‰±%ö¶n4+Ê£cÑøàPÐJÁ¨*öôY(°‘­ýétr·ö+œûÛzã±x™Û4 ÃN& ¬Ï?„ÉaDÛ{üÙLzl±­±µ7•JN*w6¶ö$â‰Q–>ÿP(q[ 6›ö S˜b¡ξ€È1•Ss{_*•œXîl<ÐH$Æ”Ø:zü‘H¬ÐIÇãñÁ…„pHêö ªWè tùÒ©äÄ2gãžd"1¡ÜÙÜÞ‹ÅKóÃÁðÐpØaDU‘ë󡪘gÆÛºû3éôøR{c[O2™œ\îÜw 'OTy;áP(’o%X&Ó&QÅBB½~ÍVyÍš°Iš}"QSlëì D"Ñ•L$ƒAHDîîPD¶8>ÐéK¥’Ê­=ÉDb|™£¥£/‹—¸ ¡pth8d§Q ½ýƒˆ*æ[ð¶îþt:5¡T³ONªÈÛw ;OTxÍþÁ`0qYpžÍúC"Ûh¤³'À2™Ñ…–¦ƒ%–·¯µ'OTY»û‘¨×N¦SIÿ`ЈUºúd-uZ:|ZÕkÂÆ•Ú[»ú£ÑXqž!‰‡l4+BoV•líò¥Ó© eÎÆÖîd"9©RË(^î1 ƒÁHžy¦/0ŒC²ƒF:züL6SShÝßv°ê5a£ -=ýƒápT÷IÝ'Ÿôù‡DžýÏ•,Ëþh#Ãðþýû§L™’Ífµ*‚C †áœ}KKË„ X–ÕŽUUí{(w,à kßN:õ®»îBý~QQQ,Ô1°›H·Ý˜Ë~(–Ͱbu±CK `¦p›‡ (Í ñ¬àµÓŠ ÂINd†,4n¦qEUã>ÃJ(yìt4Ågyñ8>»â4“‘ljrn§ÍHXiœåhŠeÅi¡uú£.«Áë²în4Óøø ÷—Mý40¦dgK¨ê˜ Oç@,žæÊ œ /÷޳ÕlÜß=l¡‰1åù;šû $6}\éç}8‚Œ¯*hê eX±²ØKsþP²Øe%I¢¥/d3’•Ey_ð)|ZuÑgûú(4ºhwÇ/H£Kó¢™áX¦Ôm0ÒæäY ….Û7í& ŸPéþb?M`µ5Å_(Š:¦ÜÓ=˜ˆ¥Ø²''*=ƒqÝä°šöu Yhbì·Â¦-ÝÖèCh|•·¥/œÎ Ey‰¬ÐLåYišlî Y Ĩ×ο‘ħ/Úº·—ÄÑI£ ÷t s‚4ª$(Î E3%n;Œ mý§™.vÛwµå„ùh­­.þúÀ€¬(5åîÞáD$Á”y‚¬vÄÜ6£ËnÞÛ9d¦ñqåîÍý›6¶äËý~ã*½­¾H2+Tå¥XÑ7œ(̳TsOÐb F†ÍüVØÄQ…û:‡Y^ª*q…âÌ`$]’oC1¬Õv˜èR¯£¡5`¢ð)•îm> G§Tíjd¥ºÌí ¦Â ¦ÌëT¨+Í·ÝNËžŽAMØöæ~šÀ¦Ž)ÙÞì‡!0¶ÒÛî%2|E¡3ÃI}ɧÅl¢›ºƒQ]æÚÙì7’ØŒqEŸíë#Pd¨‚Æ®`–«Š]‘$7NçÛp?à ÛMdy¡óëš0Ïç}ŽN]ôMû É£ËÜþp:Ï–zìºOê>ù󸤙&™üèóM®‘ÏmïíßõòŽ#ZÝÏ«=Ö( 9ÒØÎܸ곉ey·Î;Áa¦>kô?ðÚWŸZseÝxšÄ´¿ßx½Þ+®¸‚ã¸mM÷¼²³{(9¦Äi5’0 ÷ %zóë5Ÿ´”{l¥n+Aë¿h'MvÇþsjñ´r£‹`a™÷G£Ñ¸ôÂIS*MýI.r™/˜YZ倪óÉ"·ÝJÓyÓ¹cz|þÁ8¡„ àãòWê6Ï?¥¤¹Ó—äFU›hââYå•Nxl±5‘áÂ9ÃË‘ç¶òlÆ=]a›‰*É·ìé8Væ±t&8Q©ðZ#)~8Á–¹-² u¥¼£ÕDïï8ÌTq¾eWgÈ@âenëLU¡r¯u(ÎDR|¥×ÊŠJ_(]è4(¢Å˳Ѕ.KCGÐb Kó-ûû¢‚”{,ýáL’+½¶+"Ùb— ð¶@Üm3äÛ»»B6#Yâ¶îíVæ±t¥XA®ôZ£~(ΖºÍ*€º“^»Ñn¦÷õöMgˆ&ñ2·µÍ“UPáµÇÙpŠ«ôZyIí ¦ &“hî‹åYè"—¥¡=h¦‰·¥¹/ #H¹ÇâgâŒPéµe8ÉÉ»L޵úãù6ƒÛaÚݲɷµ±'‚ah™ÛÚ3œÊòr…×σ1¶Ìm† ¤s0é±z_OÄn¢Šó-{ºB•z,턨¨^k(Á†’\…Ç"ÊjÏpºÀi4Ȧ¾¨ÓB»,»:‚&š(q[›}QBÊ=–h6–* lY^îgŠòŒ$èç[ §é›ÎÕ@–¸-= CÊ<Ö¾`*ÃÉ^k"+ĘR·‚‘Ž„ÇnpZ {»Ãš°½]a’ÀÊ<–΄ ©^k8É\¹Ç"*PÏpªÀa´©ý½Q§™.Î7Ó4ÒD©ÛzÀS!¨Ücˆ2Ñ4_U`Í ²/”)Ì3R$q ?æ²ÒÞ<ó®ŽÅ@–ä[ö÷F)÷XûBé+UX“Yq Ê”ä›mHè>©ûäÏà“Nóp0|ÎŒJm,çGtkkkµ±œ%/|Á Ò!§¡mhÞ)5AÔÜÜ?‹ ðÄbzÇAaÔ^?ˈ 2ŸHH¡´\hÇet‡«s™Ñ¦CášòëÞƒU¿«—á$0ÚMv‡…8#;‰¬ öEÅ<f¦ÐC‚ É%ôŽnFP@—jäÒ¼Z–GÄÙÝVÇàö OH‰“ØëgžTbØÞ•ThlÕ¨ s‘C i8%Øq@]aÁB£n ®û¤î“?ON)1äy‚XAníµöÇø¢Ú_s_D”•ܤ€C®ðÚr•öÊ;M` jŸÛDåЇ!YVeE=b è»§‚Ê<Ö¥¿ñèÛ»|Á ªÀ~ûïfzÆ\’l¡°_sš¦z¬Òð[!XU(5Ò¸( ãKìÛ ΚÑ©Êdiïêiì J<@*EQQ“KUBY`Œ@Äe¥üÁP<}rmu$ÉtÄ~sö©,áRUÐúíÍMNôGF8€‡SbÏpúܺS{Ià—‰‡ÊŠÜrj`0îRÃ6«eÛ®&s`¶Q À‚ìö Úàö((P…g”PV-³!¢ úb²Ç›(dÿ è aÙå(.´!̓"€ "<”c¬Zé€Yô'”3Lbða)Ï»Íè×>ÁLÀ…Vdo@ÀP¸È÷Åä´ªp’SRJ±F¨=,åa§Ýí¬$\`=(¬Èw„DN*íP$«3j™ ‘UГ=&ØB#ƒ¢‚½ä›~Âá"+Ò2,*TjƒSr”Q+0+þ¸\`†ii–œ4ì1£ >ÁDÀ…Vd_@@Q¸ÈûbrŠUN8Í«¤RdQj I.œgB¿Ñ„Y=Çà"ÜY T8à(£ gÔR¢¨;"»M°•Fö |'ŒÄáB+|`X”U¨Ä§”£VØ^¾¸ì5Ã4‰4‰N­„ûƒ&l@D`¸È÷'䪜pZ¤Rh1j I.ì2¡»ú Z=~Gá"Ü‘²"¨tÀqFJ+%V@PgDva»Ù; Ú(X«zƒ mp[HU¨Â3J8«–ÛQ}1Ùk‚$Ò4ômÕ+lÿ ÁP± $ä8ªpVþ„Rh† n Jy8ß„6ä„}[õ=19£ c•Á´Rb…!êKùFØa@÷„œ0Ý'uŸüWûdî)GQÁK››ßÙÞyDGÙÂ9S.¯›xèir þÑ >ú)çËæ‡ÞøúÐdwxüí†[æÍpZ 9côÐc šXáºíâ÷þÏ—$†Þþ»™cJœGtó)N²jCGȘé³±Þ¨½tüž÷ö5·<£Gw²ÁŽÎa˜Íð¢]ä“Áž¡dLÍS!Ë‹›[š›:‚‚i¸³äÓk>=0Œ¾¹s §a/åã½&8¶tô¶÷ Ó-aœ(´gXº°Ó7Ü/ô»!‘OE£¬J”(Ždåu ÃN!–jhÞ Aà ®1&}[·ï ds¶ E’ý •(*1PžtFUI…+mŠ?’46O 1P8«VÚ'C”ê5A$µ… Ù)ÐQa.²(¾„š ñ.u0¢ eiJ«Ef€!p[XqP…­!…Ä`¯Y퉫YšàRýigAÄ88˜QK-@pGDu #ZCЇò ;ªŠ*\eSú5aN5ÄÂá¬Za‚ù“ªÇQÔRÌ$ä0€Žˆ ¸È¢ô'ÕËS‡²P”QGÙAF€Ójá·Âìd¥@kXÁ1ØkVúâjF„&¸Ô@ÄXPíqfÔ €`¸=¢ºhÈD‚¶BkÂbª CcòT $8hŒS ³p8«–[¨@þ¸ê1B4µ…9¿VbQú“@6œ…"ŒZeŒ ¤ÔBD P[X±QmCà³Ò—P3ÂaÂ<œQ‹-áö°šGC&´† ‡ÝFµ'®r246Oõ§A‚…Æ8Õ ‡²j™È*ÔU݈ơְ’«zE…K¬J ¤8hlžd HV­´V‚Rj "0¨5¬XIÈNöˆŠ"p¡ù»ªÈ€F;@R€‡Ój± ÜVœ4dÑ„a°Ç¨öÄUV‚Æå©o«>ÊÁ¡ŒZf €;£j¾2à íaºOê>ù¯öIF‚ß6ò’¤o¯}ÒrÅÙ“*GÆœCøKzg{§(+€³j˦V{W¼±S’•O÷ú.9c|žÍø=c9¹Ç—å­¼ñ,½ÓÑÝ|²ŠÈ舨2ïVeÈ Šd…+ŠxœÞUeã 0Fõ%±nÁ¥JV(&qšQð†AAqØ‘¡ç‰0B7¥eÕmÝ7¤JΓ`•LHªb†8*./.ÈÿUY‘$I~ù/”&iÔ§¸TÙL‚d*ðÅ•^Þ®ÈFÁŽGpE(€ÍÄÞ!XæÊ03p2-@]1UTÀdß#8 Œqþ–àáR³˜¡Á â¤$Q{â((^£ÔÃ%Lqñ-Q‚—Á'ß'Ò"Ti<2œEÜ´C '09V:㘤€qN¾)B2˜ìâÛb#Ñ61”E \h% ¤ ![q¥+ŽA(·ð-1B”Hcq.1‹Œ f)ѨÚGpX-4Jm1\-a°ÚGIDqÓR»&,Ÿo‰¼ &åñq"+‚*«e‘`öE ‚Þ8bÂe;©tÆ1Uc|Ë!ÂX ÔØ…¡ eáb³(ÈP ØHÙˆ+=q Ô’o…åNd¬CèOaI.3 Ê"y”„[õ£Ô~xÕOÌã»âDF•V1Æ"Á,ì1J€ž8bÄe'©tÄ1Eã|sô°ª¯¶ Á,aà"“(Ê?X ÙŒ+Ýq †@©Y8p¸0Ý'uŸüùäÄ<¶;{pîIÀwþ~æ_×6r–ÿáׇ6ò¹¹7Í=áÚÇ7Ü€6›àÒ3'˜iâè¨sÇïf^󨇓«Ü‹çNµI‹‘¸gõçóÏšPUè8ì‘è„Nضm[&“É”í þkÈÿ3¼, Ûý¥@iU85åý“©QˆReaÛ“´ª‚Rá°„€8Àþ žG RnKP&Lª0óû¢‘GY¹æ˜”237Ä)6rœŒ 1˜‡â ¸Ú•$͘Tfæ£*¶²{"FQ*Ì\_šäe¨ÄÄ¥E4Ìb4! 7MØp±À(6Çh#*WY¹½…(•¶3IË*(5q1‹óh!ÍîÏày¤à$åÖÃ…UY¹–8 µü[aENPáÁ,t%loĈ#J…™ëÏœ•¹Œ„†XÌKó zR„‹ŒbÓ!ÂHD©´°ÝIJR¡R#°‡8‚|ÂIˆy´Ô§L¨Taá÷E "²râ4@™‰ rDZ@Š œ¨ÂY<Ÿ,¸Òq¸°QV®1jÀ ¥Ü̲+ÁÅFŽ‘ÑaóÒ<…ªÝ)ÒŠIÅ&aŒ6¢ò(+·GfæzÒ¤¨@%F.!`Q-4ð0 |iÂAˆù´t N™P©ÒÊk%\eaÛ?šÞu IDAT4 ÌÄ…8,) ENVá@w‘‚”Û”“ʵFåQ®)f@!¥ÜÌ d‰¬y­ê½4O£jWŠ´`R‰YØ¥¨úÞ4)ÈP©‰KŠX„E < ƒ¾4aÇEAl‰VõºOê>ù3ødO 'SÝÏßòŸ?ÜÈç6ž{î¹k¯½6™LŽ$"¼üòË—\r‰6£úGíQ>}: ¾ÿÑéû·µk?ÃYqйö÷tÍ@&÷?™ލšíNS¼‚ÐL”ÇÂ<á¡XY…ú2”“àM˜Ü’0š1ÉMñûb&Q<4×–¤yiv˜%b^@1¬ ÒEr¢´' V\̧ø½Q3*ŠkŽQx)ÖŸ%ÒVH3ibÉ|Šƒaµ+MÛqÁAŠ1““Ý·?fÄÕC±=iŠUЉñXˆ#<$+¨÷ 0©ù[a1‰¨šëHÒ² ÐlÅcî¥^ýYÊEò$"·}'ÌD¡Š›âšãFÈI+¤™´„²d>É!°Ú™¢m¸G ûb&*»)®)fÄ`à¥Ø¾4Å(hÅÄ4ÈnŠUÔ“¡„`ÁÅæ¸Ñ„InšoŒ DõÒ\G’–T¸€fBå ëÏRyO£rkÒ`ÁÅ|Šß;(ì@ÂA—f"!â4“•†Ì'9 V;R.æQüÞœ°¸AæËY - ˜¤€9ÂC±€ž4í +.6Å&LʧùƘ&ŒíJÓ‚ ÐL˜Ã"<á¥Q|Y*à ˜| a´`’&ŒDŵ%i‚¼4;Äq/ YV‚ ™Or8¬¶§¾+a•=×ômÕ÷gÉŒ„ÒLRD‡YÂM±P»Ó´줸?~xÕë>©ûäÏâ“i ;tôä5òß; íG9ÂøGdúÝŒµN¡PüËú“Tdˆ5$D¢œŠGr˜£ŠÉ¤  }Y£ gXî̘L¨`Ã¸îŒ ‚@™°†´„—Óñ0O…y²ŒJddÌÏÜD…ÔΌقñfTè̘qXqcÌÊX•æé¨@–Óñ¸H°t™tgLvŒ3 bgÚL!’cú£ "Ådrˆ£"QAÅc¢&,%¨H_Ö˜wP˜ÙˆŠš0€2` ) ¯ ãaž ñT)•`d¬Ÿ1¸‰, )]³åÍ(ß•1c°ê!2~Ƙ•±r*äé¨@VÐñ„D °´—HCèΘlgDÅŽ´™BdÎô1F^EJ©ÄOÇ¿6ÄÑEdJRáެщ³,ufÌTt`lOÖ¤¨p!™` ) /§A–Ô„åYV:Óf3*XP¾+cF ÕCdü¬!#aåT<ÄS,§ãI‰°/‘!µë 0¡3c&ÙEd}Œ‘•±R*1ÌÓ1‘ÐJx£ É”¬Â=Y£g)Dê̘ ˆäÀØÞ¬IVá"25À’"^A'"ä©*É)¨1ºp‡•®ŒÉ„ VŒëΘ`™ƒUO¬úr*‘–p?kðR;3&+Æ›P¡#c&`9ŸÈú#ómÕÇ¢‚NÄEr¥ É´¢Â=Y“ciDêL›éƒUoU¤˜Lé>©ûäÏä“TüGãÍ?ú]Îí¡€Š‹‹o¹åEQ’$avD¯TN` ’VòúFU Y°Ä«ˆªB8,Ë*$«0 )¤Š A*ɼ‚n/r „Ã’¬Â² £  ª ©ØQö¹ –DQTƒeU…$F AA! °Ä)Ø C TAA H% ™;J¯ êažÈH…A² €¤"9a¨äQÂXTD=òDF"ìÈ>Va0¤ …¼„UAA  ðÑÂ$^A~‚0–$VþÙªÏ ûñª×}R÷Éãã“°(ÊJ¾Í ªêÑMúÑ{‰„ÕjÕ"Â÷Úú1™LšÍæ\Êßk,Š"ŽãªªÊ²ü裢.—ëºë®c†á-[¶œuÖYúë¾uttttŽ }ôÑœ9s2™ÌæÍ›%IBs_ † .¸@/ ãÅ\ÐÒÒRPPpØïrÀÁi*Çée¤££££s\سgOooï÷‡UUAÐËHGGGGç¸àóùìõÑÑÑÑÑùyÐCŽŽŽŽŽŽrtttttô£££££££‡_Б·Þz눗\rÉš5k¦OŸ~ÒI'ý´¼?ÿüóÝ»wç>þö·¿õz½Úö믿.Ëò¤I“>úè£K.¹°fÍš³Î:kܸq#I¹¿¿ݺuçœsΨQ£ _~ù% ¬¬ìüóÏ?î…¸eË–ýû÷ç>Ο??//ïg«Ât: sN§Õjíîî6ùùù?!Á£«;W’ÿRš››?úè#m{„ gœqƲiÓ¦ÞÞÞ믿þŸÉ÷‹/¾Øµk ººzöìÙG|ûä“OŽ=º®®îŸ?Á]»v}ñŹsæÌ©¬¬üÑ£V­ZUTTtÎ9ç—BÞ¼ys{{û¢E‹öîÝ»uëÖ+®¸‚a˜·ÞzköìÙÕÕÕÚ… (jáÂ…€÷Þ{¯³óàëîó›ßTTTSvO=õTUUÕÙgŸ=ãW_}Aßýîw#,É«®ºÊb±èøq§··÷wÞѪ»»»ûÝwß=ÿüóËÊʵéèèxÿý÷/¼ðÂâââãÿ”ãóùêëë£ÑhÕ!H’T__ÿé§Ÿþäûøãëëë‹‹‹µIò»Wé¬^½úùçŸ7›ÍUUUA Õ××ïÙ³g„)÷õõÕ××8p@ûøå—_Ö××Ûíö\H;¾lÚ´©¾¾>W2Aüœþ‘N§ÛÚÚTU5<Ïïß¿?“É †CËó˜ (*w.¢(Z’ÿ:|>ß 7Üà÷û«ªªP½õÖ[?ÿüó=jýúõùË_þ™|n¾ùfQÍfóm·ÝöÁa°|ùò 6—sܱcG}}½Õj­ªªjkk[¸pa4ýÑ£ÊËË=Ïñ*ç 6,_¾ðõ×_×××G"íêniiaYöºë®Û³gOUUÕÓO?ýðÃoذáöÛo·ÛíUUU---üã‰ÄÈóZ¾|ù}÷Ý·dÉ’ÜÄóüóϯ^½z$–6›­ªªêè·s麺ºêëë;::´ÐR__ßÕÕu„Íêëëûúúþ%O9S¦L9÷Üsµxðøã¯Y³&×ä]pÁ’$±,{çwžsÎ9¹EFÂìÙ³išÖ¶¿ùæ›… .^¼X’$íã½÷Þûúë¯_wÝu€GyäÄOÉáôéÓÿô§?Ýzë­S§Nõù|O>ùäc=ö·¿ý­ººzüøñ7ß|skk«$Isçνá†Î:ë¬É“'?öØc×]wÏçûàƒ{ì±—^ziÇŽF£qä'¢`Þ¼y0 Ÿyæ™O>ùä³Ï>{à 7X,–L&óüóÏ˲üÁ‚ðÅ_”””œ|òɯ¾úª,Ëï¿ÿ>†a·ÜrKKK‹,ËçwÞ¢E‹pyîv»ÝápH’ÔÛÛ+Bkkk~~þððp ˜2eÊþýûKKK‹‹‹~½ÒÑ8í\ÀÒ¥Ko¸á†™3gž}öÙ<ϳ,{ûí·Ÿ{î¹›7o¾ÿþûiš†aøwÞùÛßþVZZú /„Ãá‹.º¨··wïÞ½&LøË_þBQÔHô3 ÓÝÝ=wîÜ™3g–••=õÔSÁ`0žyæ™Zé­Zµjâĉ«W¯~å•W‚(,,|öÙgµcEQ|î¹ç^ýu ÃÊËËW®\™ó¨f``à÷¿ÿýe—]vÓM7!RWW‡aØüùóÏó—_~ù‚ 4Ël6»`Á‚P(ÄóüÕW_=þ|íreyóæÍ{÷îyM~úé%%%k×®e櫯¾:´$Q]¼xq,»ôÒK—-[öì³Ï>ðÀÓ§O¯®®þãÿèóùA˜?þþð‡Y³fÍš5Ëãñ¼öÚk~ø¡ËåIîF£A£o2‚˜;w®¢(O?ý´Åb9á„P]·n]4­­­-))ñù|Û¶mùïö²Ùì矾cÇŽO>ù¤©©é´ÓN›9sæi§æt:ß|óÍ?þØ`0Ô××oÛ¶ pòÉ'ßsÏ=Úo¼ñÆòåËß~ûíªªª5kÖ¬X±âïÿ{ooïwÜa0AØ´iÓ¶mÛüñI“&mÛ¶mÙ²e4M«ªºaó٬Œmmm—^z©ÉdJ¥RëׯÏí?ñħM›V\\üꫯnܸñGoŽ!6455mÙ²eÏž=étÚï÷˲¬í×®„­[·^pÁ—_~y(:¦3ùôÓO·lÙ²eË–D"qÎ9çL›6çùÞÞ^@&“ñûý¢(jË­·Þ:’x Âb±D£QI’8ŽK&“N§3 …Ãá•+W¾ùæ›o¾ùæÝwß]__ÿùçŸ8p ··7 ƒÁÆÆÆ¼¼¼c œZ÷Ú–-[‚ÁàG}¤uÈ<öØcÿùŸÿ¹uëÖÚÚÚsÎ9‡çùG}tÒ¤I6lذaƒßïߺuk*•ºòÊ+W­Zõú믯Y³fÙ²e>øà'Ÿ|rL¹'‰P(”N§F#†a,ËŠ¢(Š"˲eeeMMM©T꘺¹fÏž}ñÅ×××/]º´££cëÖ­]tÑ‚ š››/½ôÒóÎ;oëÖ­ƒƒƒ×]w]*•ºôÒK_xá…;î¸ãÞ{ï3gÎÿüÏÿ¼úê«Ï?ÿü³«©©yùå—·mÛV[[;<<üÞ{ï]tÑE矾ÃáØºuë•W^ùè£vwwoٲ塇Ú¸qãûï¿ÿç?ÿY;vçÎ÷ÜsÏ’%KÞyçwÞyç¯ýë3•$)Z,‚ P-**Z¹råûï¿¿qãÆÅ‹/]º4÷`}ï½÷~ôÑG[¶l¹îºën¾ùæææf¿ßÿÌ3ÏlÛ¶môèÑÇTSÛ·oß²eKWWׄ 2™Ì%ùÄO¬[·îxüñÇý~?ÇqÑhT{æØ°aÃ-·Ürçw644>ø`̘1.—käÝÅ+V¬¨ªªúæ›o´²,ïÞ½{Á‚çœsN(Ò.€ÇãÉËË[¸pá’%Kî¾ûîóÏ?¿ººzÇŽ# l€?ÿùÏ ………v»ýسgO Ø´iÓĉÇù矿}ûöŽŽŽ—_~ù©§žzæ™gr}¹V«U–åíÛ·'‰Ý»w›ÍfI’.¼ðÂêêê×_½¶¶ö‰'žÐš h4ú»ßýnܸqo¾ùfMMÍÓO?­†ãHccã–-[sýÀ555[·n---ýÍo~sè}ÛæÍ›«ªª¼^ïyçw|:Ö4º»»Z[[¿÷õá‡Þ¾}ûO8±o¾ù¦¡¡¡¡¡!“Éh{®ºêªªªª²¼¦M›–k f̘qD‚«V­zçw´í‡z¨¡¡!÷qçÎï¾û®vët¬]4 ápX»b~øáµk×¾ñÆf³ùá‡niiI"Ï=÷ÜÛo¿ýÓº×âñx6›¥iE{x;vìOHðñÇO&“ÿõ_ÿõ³¹øé§Ÿ¾víÚeË–Í›7ïúë¯?txìüãk¯½V]]½téÒ¯¿þúñÇ?úð÷Þ{oåÊ•?ç59qâÄgžyæ7Þ8¦£öíÛ÷æ›o¾þúëK–,q:Z‡ÛÃ?œó€Óé\²dÉ&uòÉ'=øô£ˆ¢x÷ÝwkÛ<Ï/[¶ìŒo½õÖ×^{­¬¬lÞ¼ywÝuס"GèE›6mÊ}<õÔSsã:§Ÿ~ú5×\³~ýú¿ýío‡röÙgŸzê©K—.moo饗n¼ñƲ²²%K–¤Óé;²²2ç“$I.Y²$ßyçãÇ¿ãŽ;ô8qéèèhhhк×4:;;~øá£;ÓN:é¤\ÏñìX;ï¼óæÎ xâ‰'Žø A±cÇŽ;öÚk¯µZ­Çtb·ÝvÛ±6î#aæÌ™5557ÝtÃ0³fÍ:âVtÔ¨QÓ§O?ï¼ó&MšÄóüqÉñÎ;ïÌmhÎwÜqÇ矾lÙ2­áG5jÔÌ™3çÌ™3eÊ”cʽ¨¨Èáp}ûö±,ûOžË¦M›vîÜY__ÿ³ù·Ïç»óÎ;,X°`Á†aî¹çž}ûö} ,Z´è”SN™:uêÑ)ÖÖÖ®Y³æX‡¸2S¦L™4iÒ±uýõ× †{ì1íÆåü#¬V+Aµµµ---<ð@6›=¦ÃC¡P0 ƒ¢(ÚívŽãzè¡#ž¥P5™LétúøÃÈS~ôÑG»ºº0 »é¦›r; A&LàyþÞ{ïíééñx žyæ™·ÝvÛððð'Ÿ|â÷ûEñz½V«u„®588ØÛÛ;cƌٳgÏž=»´´tç·.ÁˆD"áp¸¦¦f„ ÚÕ­à&L˜PTT´sçÎÒÒÒ‚‚ŽãfÍšõÊ+¯<öØc'wßJ¥N:é¤7ß|óÉ'Ÿ´Ûí¹™u:ÿ ìv»Õj­­­}óÍ7Ÿ{î¹C¿úôÓOW¯^-‚Ýn?>O9v»½®®.7.TVVVWWg6›ëêꪪªî¹çžë¯¿~ñâÅ€§žzÊápŒð´¹§K—.Õ>Þwß}›7o^²dÉäÉ“¯¼òJQ µŒÊËËW¯^ýâ‹/>ôÐC#/#›ÍvÚi§¹Ýn“ɤõB_ýõ Ã<øàƒ€Ûo¿] -ÕÕÕ'žxbII‰Ûíž6mÚĉiÖÙ˜1cD{â‰'暪õë×ÏŸ?ñâÅ×_=†a¯¾úªV’(ŠÖÕÕi3O>ùd·Û}íµ×f³Yí—,Yrâ‰'Ž0w‚ òóóý~¿ßïLž<Ùjµº\.³Ù ð6Oš¢¨üüü6”F£qæÌ™»víÒ¦nºé&ǵ*~ë­·Æ·~ýú+V,^¼øÔSO]µjÕÚµkëêêpw¹\uuuN§“¢¨ººº£o`ÿ555/½ôÒóÏ?¿cÇÀý÷ß?oÞ¼¹sçþþ÷¿×ò}ùå—‹ŠŠž{î¹W^yåË/¿Ü¸qã}÷ݧõÏ̘1ãé§Ÿ~íµ×>øàƒyóæ]uÕU#ÌT›’«ªêË/¿ ¸üòË-Ztß}÷i>ùÜsÏM™2åÌ3Ï7nÜÂ… A¸ù曫W¯7n\]]ݘ1cŽé¢Õ.m>Eyyy]]]aaa®$kjj4·dYö7Þ¸ÿþûçÏŸøõ¯=nܸ›nº‰ã¸»îº ðì³ÏN:õŒ3Î?~<`úôé ÃÃm& ×ÕÕUWWfÍš•r/++Ó†‘/^\RR¢MÌù$`ݺu#ËñxùˆvP矹%ª««Óê:wEoܸ1×οøâ‹ÍÍ͹*þõ¯a˜Ýnå•W~4qè„Nؾ};Ã0Z»œN§õ×Ñùßâ‹/¾Ø±cÇ7Þøé§ŸÎŸ?ÿí·ßþõ¯ý°žþùõë×øá‡ºKü›SRRræ™g¾øâ‹ÿÈ`ãÆ²,Ï™3góæÍ7Ýtª™ŽÎ¿góæÍ_ýu"‘¸øâ‹'L˜ð°V­Zõðÿþúëº?üÿ‡rttþ¨¬¬\¿~½6¥Åh4jãäÿ׸ä’KæÎ;ò Ù:ÿ‹ìڵ똆!ô££óïűÎùüÿ³Ù¬ÿ¨ó—±Þè¯õÔÑÑÑÑù™ÐCŽŽŽŽŽŽrtttttô££££££ó8lú@6›ù::::::?L6›=t!•ïBŽªª›6mÖËHGGGGçxñý!çí·ßÎd2Ç´BŒŽŽŽŽŽÎshXù.ä‚pá…ꥣ££££sÑ^ÛzdÈÑÉ´w$ëèüâ˜2eÊHÖ~ÕÑù_A9ßC0Ô^Ƭ…Î/=Þèè!ç—‡Ëå²X,ªªêE¡óKá›o¾ÑVÐÑÑCÎ/UUõ£ó BÅ#<–çùÁÁA½d~¹Õž×ÚÁÿ×p8G¼.þþþ^xáˆ×]wݳÏ>û«_ýꬳÎÒKóñÌ3Ï (zÍ5×$IÒV,Z´(//oûöíÚ* åååW^yeî¨mÛ¶}üñÇ·Þzk0Ì­_]]}É%—üíoÓVB<óÌ3O>ùäÜ!/½ôR2™Ì­y‡Ÿ|òÉÙ³g·´´ø|¾œÙ}÷Ý·wïÞ¿ÿýïÚÇ©S§Î™3ç™gž\pÁ“'OÎU7Žã÷Üs`íÚµû÷ïhÕͲìòå˵n½õV‹ÅòÙgŸ}òÉ'9‘€d2ùÈ#!R£©©é­·ÞÒ¶'Mš4wîÜ_|‘ã¸n¸Aw˜™L¦£££²²R/ŠŸvÓ©õRîÞ½ûX—ãÓÉ•áHŸr†††V®\yóÍ7ŸvÚißY£èÊ•+ÑCÎ÷òÁ<óÌ3{÷î­©©ÑB΢E‹W¬Xñè£^qÅ+V¬¸ñÆ/¼ðÂN8áÚk¯… èŠ+®ìÝ»wÑ¢E>ŸïÚk¯õù|+W®¼çž{¦M›f·Û׬Y³lÙ²'Ÿ|²µµuÑ¢E/½ôÒäÉ“/¿üòý÷ßïp8r!çŠ+®Ø±cGAAÁ‰'ž¨-§øì³ÏnܸñÞ{ïmiiY¹råc=VYYév»Ÿzê©GydÍš57n¼öÚk_{íµ«®ºª´´ôꫯ¾á††™>}ú]wÝõÀ„Ãá[n¹eÕªU/¾øbÿý÷ß¿|ùò«¯¾ú¶Ûn[¼xñå—_^YYù§?ý AöööíÛ·ïÚµËf³r¯¾úêY³fwÞyàÛWÏ®[·.Në!ç_ÓéܱcLJ~H’¤ªª¢(J’„ ˆªª(Šº8´¢(0 C¤µ³ÚWZ“¡­? ð,ËA4cI’rm A0 kûsæ–E HKSQmÙ\m§$IAh ²,k鈢¨‰Ôò‚ H–e³Ù,Š¢ ²,#¢IÒ¾6mÚž={$I’$ †aíÔ4µ†i;5KQ ‚ÐÒÏÅ‚´µ½Y–=õÔSO9å”ÊÊÊCGÅjkku_:&†‡‡€Ëå:âñG:ÖF5kÖ,ÀóÏ?___ÿþûïç’;ï¼ó(ŠŠÇã‹-ºì²ËþÉÕàÿ=»)þû¿ÿûÙgŸµZ­’$­[·†áË.»ŒeÙL&sñÅßxãŸ}öÙ-·Üâr¹ü~ÿÖ­[Ï8ãŒ_ýêWgŸ}v.‘Gy‚ žçI’J&“½½½£G>óÌ3›šš4/O$+V¬øío»bÅŠh4zÙe—]vÙe³gÏ&¢¬¬¬²²ò7¿ù ACCC™LF«¿÷ß?‘HŒ;6÷ÓÝyóæÝ}÷ݳgÏhëz½õÖ[}ôц ÚÚÚn»í¶?ýéO3gΤiº¨¨èšk®Y°`‚ Û¶mK¥R‚ ìß¿ÿÄOœ5kAMMMãÆã8ÎétJ’”Ífyžß·o_EEŬY³Ö¯_/ËòŽ;úûûkjj&Ož‹Åúûûo¿ýöþþ~maï#¸üòËÛÛÛ3™Ìüùó/ºè¢³Ï>»ªªª¹¹Y–å+V,X°à’K.E1•J]rÉ%×_}nùÞÞÞ³Î:kþüùýýý[·n}÷Ýwo¼ñF€Ïç«­­]»v­~a„îîþZk|s×î^k—!RUU’$ÇEQ… EQ5Ól´Ö\’$í’×vʲ¬-ˆîõz÷îÝ«…­¡Ï5ú‚ˆ¢¨å®íQUU‹[‚hÉjò`Ö†$IZW Â@„¢¨,ËZðÐb˜¶sÇŽZâ(ŠŠ¢¨å+˲–…&RKáÐÔ!Ñp IDAT@ˆ¢(Çq¹³€aXUU·Û=~üxAý£Î±Âq\,;zÿ¼c­¡¡aíÚµŸ}ö™(Š™L&wGsÇw„B¡­[·^vÙe·ÜrËÿ—ï,èïï_ºtéÔ©Sßzë­I“&mܸñÓO?-**Ú²eËÍ7ß¼|ùòæææK/½ôŒ3ÎØºukQQÑe—]†a˜ÑhÔÜ]ƒ¦él6»téÒh4º~ýzmçW_}µnݺݻwk!çóÏ?Ÿ1c†¶ãø¹çžË²ì£>:{öìíÛ·ã8n4׬YóÄO<ùä“3fÌÈf³}}}555Úm ±±±¼¼üÐß[%“É;wŽ7®°°Ðl6Ï™3'üõ¯=÷ÜswïÞMMÓO<ñÄÿcïËãª*·÷ß3Ì“" TF%qK³Ò4Å9KE-gÅœKÓ2sžKs@3²«—2ÐT(‡'QQdRæéÌÓï'Öwÿк÷vŒ»×~ÎÙçÝÓëæ}öZëYÏúñÇwìØÑ¢E‹¨¨¨;wîìÛ·ôùvíÚlÛ¶mïÞ½íÛ·oÙ²%Þ3öíÛwðàA@àîîtæÌ™ƒâŒr¹\©T>u&7oÞÌ?~|ëÖ­š“&M öõõ={öòåË/\¸0gΜuëÖݺu‹û,½÷Þ{*•*22òÒ¥Kjµ:888%%eÙ²e666OÅ6Þþ$¸a6›«««¹àa2™°d‹D"¬òR©øaX²ávH$| €!7>‡ÙlV(xàëÀq …þþþ¶¶¶z½@2<½Ø¾ŽP(”Édä¾rH¥RòœŒF#® g, àœ:5°Ó¢E ‘H ï¸ Ü2\7òÃx{~ö/\“ªªª¢¢"xÁµL«ÕΟ?ÿÒ¥K 8"±dÉ’¤¤¤Y³fµnÝzôèÑðH.\xëÖ­ó &“iÖ¬Y?Þ°aC“&M²²²0«¹¹¹‹/^±bEYYYUUÕ´iÓV¯^ͳ³³ûú믱o@@À¦M›ºté²k×®åË—¯^½þÓ† ^z饞={~ùå—Œ±ôôô£GN: ,//oçÎ+V¬@ ”Žéääß¶mÛ 6ÄÇÇoÚ´©sçÎŒ±/¿üò‡~(**Âßä±cÇΟ?ñâż¼¼¾}û2n_QQÑwß}—––öù矯]»öüùóO}‘ùì­·ÞjÖ¬Ù”)S¢££ÇŒãããSk@TTTçÎðuÇŽC‡ýðÃù¿ÞÓ°’bq„àË17¢%“Éôz=E,¸ž Q‹Ø@Þ†P(¼{÷î½{÷¸ûÂ׉DXÙÅb1Î…ëÆÀ;`#.ׯ Ùq#i„@³ÙŒe !8Oq¹>}ú|ýõ×z½ž‹‘f³Y,Ó}Qh‘fê r^yå•Áƒ3Æ6mÚTë'‰DÒ»wïÞ½{3ÆÜÜÜÞÔ888L˜0áÍ7ß1bÄÑ£GM&“Ý’%K¾ýö[™L–œœüïdÒ¤I·oߎW©T´±G=zôX¼xñ¹sç²³³>|¸ÿþ¼¼<äc¤Ré°aÃÞyç þöÛo-Z´mÛ¶îÝ»cË7ß|sòäɵk×Þ¸qC¯×3Æ`0üòË/Z­–1¶eË–Z©”¬¬¬I“&Mš4 a7ÆØºuëV­ZuøðálqwwŸ0acl×®]t/M›60aÂÙ³gÿùÏ~þùçáááááá=úâ‹/þ›yŽŒŒŒŒŒtpp˜4iÒ‘#G¾ÿþ{ÿ?üÓO?%''S€—·ó½G"‘ˆÅb,¸X¯éõ„X,¦T BU:ÅnÅÓ9XÜiÑÌØ0¬Vëõëב,!'ƒ›1¢a„¸«ÕªT*‘žààä¨áÖࢠ|‹Åݺu;wîœZ­¶Z­ p³p±XŒ‹Ä ‡ŒF£T*å!ç¹Ú_l^àáá!“Éœœœ§L™RQQÑð¦&777<<ü›o¾Ù¸q£T*U«ÕÆd2999yxx899eggûøø”——ߺuK§ÓqA…,##½·nÝÊÌÌT*•5ÊÏÏ¿sçŽR©tssÛ²eË¡C‡† Æûâ‹/rrrÒÒÒàHyzzæä䔕•)Š[·nݺu jß !!!Mš4ùõ×_Ïž=›°~ýzÆØèÑ£[µjõúë¯<Ü“Étÿþýôôô[·nÉåòÆgeei4‰D‚cVWWwìØqòäÉ·nÝ2™LÞÞÞNNNööö÷ïßøð¡³³³½½½J¥R«Õìã㓚šºcÇŽ»wïÚÚÚººº>yïôðð8}úôS§×ÇÇÇ`0ìܹ3**Ê××·uëÖ~ø¡F£1›ÍW¯^õððøî»ïT*•V«Ý²e 8~.\;vìØ±cÍfóÇù¿Þ÷½R,6”ºHˆD"¬àäå÷`4áë ŒGH CiÊÉ À}Ч!CƒŽÑhįFÁ1NG_qµÜã? tF@x ð¢à0ÑÆÓ§OkµZÜ£GÀ; iµZN‡Ð"Ý9aü3óüLäáác4333²‡éõúÊÊÊnݺyyy1Æ*++E"Q=ÊËË»té2qâÄ¢¢¢””F³hÑ¢æÍ›7¤I)((pqqqss ;yòäÅ‹###.\Ø©S'«ÕúóÏ?«Tªž={¦¤¤lذ!55555ÕÝÝ8åùùùþþþ]ºtÁg¹\Ž1iii£F 8yòäåË—ßzë­)S¦ˆD"‰D"‘Hª««%Ittôk¯½öÛo¿¥¦¦¶nÝzùòåååå2™ìêÕ«8HË–-›4i‚] ½½½{ôè¯V«µ¤¤¤[·n¾¾¾YYY;v·ÍÅÅ%,,ìÔ©S©©©¯½öKvvv©5Ö±cÇ·ÞzëôéÓ©©©¾¾¾6l ±··?qâDNNÎøñãßxã>}ú\¸p!55ÕÖÖö«¯¾ò÷÷÷ññIIIÉÈÈˆŽŽ&Fxaaadd$X¹jµZ­V¿òÊ+ÅÅÅ‘‘‘¾¾¾999ááámÚ´éÓ§OFF†——ך5kôzýÏ?ÿ\YY9oÞ¼¶mÛêõúâââ®]»Nž<ùâÅ‹-[¶”J¥7oÞœ4iRyyyYYYjjêãÇ;uêÄÿ×zIrwwçy´ZmyyyfffzzºÁ`‹ÅH¿#\lP(NNNæI¨€¯ž«ÉÆtq#QˆkQX ·>#xÄ¢XùÄs£œ –~l„ó³` 2Š¡á2/É3ÃÑ€®ÖÞÞà$‹¥R©\.7 ¬†S ‚‚‚¹3™™™Ùºukþû¬¼¼¼¤¤ÄÇÇ™?ƒÁpïÞ½#GŽÂÃÃÏœ9£Ñh<اO~¦c—.]jÑ¢M~6êÑÖ­['‹'Nœ8qâÄ„„¾³ÆŸÛ¹sçÚ´iÃåY•””L ÔP¥ 7¡QF(Õ$™,V«H(üýE“Âa$®#0«Õbµâ- |(k âáÈÜá«•1«Å"‰ ÞÞŒ'­ñS÷!ÆóóÀÛßΞ,+¥¦JŽAÙ#£R«U "†8•Édp’ðD$«E+€‹ ‹-f³P$‚Ka6›EÜøjµº²²’BpaɤRÊâÐ%QhËb±(8ÔmfµŠÄb€¢•1£Ñhkg§Ñh¨¸ò<ð«HÕþŠ@ rk¸Š(Ò­q™’W^aaaüƒÄCNš³³óSc¼ñöˆõOnfg›ûM*•ÚÙÙFÔ£P]޼†P ª¡„E a@JÂ3nâÄhˆD¡ò3@!‘ p‡—Èb)KO·Z­­V©T”5ŠÊ4‰H$‘HÔjµJ¥‹ÅÙÙÙf³Ùj± ‚•jT…fsã¦Msss­V«ÀbX,™ çq wþÏ ª!ÔAÄSÀœ-QÜ…­B¡D$BxPèëËC9¼ñÆÛ¿°?yCÂk~ee%ñ»P›‚L U± ëŽñ”¤!â2ñ›áF3DŸcp\h¤\.§´<ò+•J¥@½^/“É€"82¥m6\f¶D"Q(¤yƒr4©TªÑhˆz@9Œqpp¨¬¬¤âPƒÁ€ûBŠqÈ Ä¸ã_4ërâãã¡¢Ö­[··ÞzK§ÓÍ›7¯{÷îйaŒ?~<11qÁ‚ŽŽŽ~¨’’’%K–ôîÝ›„[^|KKK£Ö5Œ±~ýú]½zõþýûŒ±þýûCc¶fÍÆØôéÓñ5;;{ݺuC‡ ›5k6J¥RhÃìÞ½ûæÍ›Ô~†7Þž·Q &ÅÐð‚Oõö„+ ŸÁ â"ÈÍ\±NVC`Ã"N23€®HŽÏmXÀí&'†Û7 ¢¤îìééyåÊ•Æß½{—ämà–c›ÐˆþÊâ¯Ü¢íÌ)Ž`žã£ø'¿%$$,X°àå—_ 9sfrr²Á`ˆ‹‹#Þ*c,$$dĈ$!̵êê길¸ŒŒŒ¿ÑìdeeÅÅÅ…††Ž1bĈ'Nœ@—F?þæÍ›„7+W®øàÆØ×_}ùòå¿×ùûû‡……………-Z´(77Ýhèéܽ{·££c‹-h|=Hµ{÷îÁÁÁ“&M-[¶lݺurròßÈÏã­rõjµúÞ½{EEE‹¥°°ÛËËËY’ …•àÐØØØÀõ¡`UðÀ³ dJ4 4ÙpR¤pôz=†Ás²Z­Â•ªÕU"©ˆ1¦_§—m‘›Šr¨“zP+ãææÔ¯_?//////‰Dâíí Ý#½^äÈ ®Y­VCã‡ø:\ ‡é@QG|Fþ™©/§ÖSKŸ¯]»öÞ{ïÙØØPȨ¼¼|Μ9ï¾ûnJJŠÕj?~\\ܹsç~øá‡]»v™L¦üü|4M7nÜK/½ô÷𣤤¤;wž:u _ׯ_ŸðÕW_–––qµéΜ9ƒv°¾}û†‡‡ïÚµk̘1OªqóÆ[y9à  O‚[‘c2™¨lË1¹;” ‰jÒìmc5]Ô¸ZÔjµ5¡X⑃r¹\–$«îYmò3 K…‚"PtÒ¾íÍd2ç¦T*•J¥¿¿³fÍ"##q^77·‚‚‚³gÏRª Ðh0H—Mº×µ´M¹mLÉ¥£ˆ"oÏÃþ } {÷îmÚ´yrû‘#G=zTYYÉÝ‚X½zõŒ3øgŽ·º‡*Š$4RÞ¤þ7DÞœ@( Ü ’ù$¡FL6â(Ó kz-j¡P([+3¦­;­’Gé#)ýtá ©‚D"‘Ëå...-Z´hÙ²e»víš4i2pà@'''„R²²²***Ë¡ Èîp‘ƒ”LY ïŽ ¥tãØ—¯Æ«7ÈáLqßþ¯ìÿ·°°°Ñ£G5ÊÞÞþÿø æîK¯£9zíµ×06lX±bÅÑ£Gƒ‚‚ðS||üo¿ýÆËÌÌdŒ¡åÌÁƒQÀ¼lÙ²-[¶„„„lܸ‘Ôx«Çw&@·I3½þ3ÆœœœcUUUZ­)¬àmQ7OÒ߬å÷p¢Ú—ÿã:×dæ…B!Ôh¬V«ä ‰±›Q±R „Ò00 cÀvC'SFƒž÷‹%00°  àÚµk999:îñãǤ²O Wb4mmmÑ­÷¨ÑhÐ G¯×HŸ”t~çRóýrêr:tè°mÛ¶™3gÊd²òòòM›6ýóŸÿôõõeŒíÝ»W¥R™Ífj¥%‹ýüü±}çw¢££ýüüÒÓÓ¯]»¶uëÖ;wzzzúúúæååM˜0aÕªU666»ÉÊÏÏW«ÕUUU`ñµjÕêÁƒø)**Š1–’’‚¯/^ìÑ£ÇìÙ³Oœ8qõêÕK—.•””ðoõååEÐG€„j€%%%Ä[£KÊ\ ýJE—ˆ†œXMv“º|H[¹¢ß»ºå‹M +þ=s¼! ŽIÆ™Íæüü|¡PX\\ܾ}ûE‹!ã"—ËÑÚÁ‰0Mr©ør€^\Ö+…BÛÑétð±xA½y9ýû÷×ëõgΜaŒ­X±"**J§ÓÅÄÄDEE•––¾ýöÛ‹/FûdGGÇo¾ùfûöí{öì:tè‚ ð¿›””„`Txx8clÇŽ»wïþðÃÿ.xãëëÓ¤I|íØ±£Ñhüç?ÿ‰¯S¦L¡éׯwÇFÅÄÄøûû4hΜ9{öìñññ¡\NTT”»»;ÿðñVg^ ‡ d%o¨œ!úð$%š$Ô¨2F§ÓQciJí0NO4ÚýÎT.6+Î)¨“À€+M’F£±¸¸ØÙÙ¹¢¢"--­¢¢ô³G‘ )ù^``sYsŒÓ¾óWbhñCöˆ`ê rcC‡:t(}•Ëå+W®|êÈ€€€Z?ÅÄÄÔÓºuë¿W§#Õèkß¾}ûöíûÔ‘S§Nå~õöö¦ÙxrƆÎ?y¼Õ¥—ƒu™"]¤¢Foýô‚OÌn‚‡ÚW´p4VÃõ"Œ!…q yÕ Ê‰ ĽB8ðŠˆ,G×̽~­V[\\ìêêzóæM"àUWWªQ®¹+DÒp;€:êÇjêo¸Í~ø:кxúov¾xñb\\ÜÒ¥Ky92Þx{a >y*à"‘f¬¹ 8ÃûÂíC%Z¡Pà+õøàÊTsý!| ž¡Ó§ëNª ­‹åõþþFÊúʼ%œš:÷0Æ ²²²òóó‹ŠŠÊÊÊt: Z€[Ø®“SÀ-zýwJ y{Ž^Ο[xxøß«´ó?²ââb¾ :o#ÓjµOÿ#¯Q ÅêoF­Ì¨¿'%`€J¥’ÛšJý¹ÝÈ· ÉŠVáŒF£L&óð° ,0ÐtíšÄÃÃ*•šŒF< ®»C}H)¾‡_QWÄmC@µœ¸6¡P(“É4 ·•ŽL&#ŠÛŽÕ1^jµZþ¯þÅ…œ†m|`—·¿‘999)•Ê'õZ¨ºk´Á`Éd”e!ÕK 4‘â€H$R*•Pn¦°Õ¸`à" EE°"…œ$ÆØ”)ò ôQ“$–Àÿ;#5™Ì€JL*•’¦ÁQ·§‰A,‰¢ ‰[ŽƒS`;¥vèš1Kü³ÄCN]ÛÅ‹ÿŽœºÿÈìììþ^©5ÞþòÎ5JÉPn ‘ĸî·!4y3 JÃ_¡Î›”¡!²57çÏ8mÈ 1›ÍŒ ¬Vë®]ÂAkªíLV«ŸL…T Gâlð`Ôj5·Zƒr(JÆjŠX©0×Vëõ€„‘à[Æ?B<äÔƒµhÑ¢a“ÊðùäòÄ[Ã3Êÿ* fåhøc½&y¡Pèîîž——§Õjår¹F£&ÐÌjôÓ • ãŠå` Õ¸A9,,¬];ë÷ß_9QúÞšj!6 ´>A'³r *5€L(èàÈtFºAn_Qê©CÊm«CŸ‰#ÑkÊlñÆCNš½½}æ¯$%% :´ªªŠÿ¿nð†0b\z½˺T*¥ôT^H¬èòøñcÐFµeËP¨k¡y $0Cå8\Qò®]»vé’N,–žÓ™ÛÊØ?d2,ýPç$ÕB> ŠB¡ ²€D"¤aG\  …†-Ôò‡H @&B/8‚¯q)|¼=ã½HÞxkàFeùXaE"*7±^ã3U·Pt øQQQ±eË¢®‘ï‚5™[[[ªÁ¤ Vv¢ÀQìëôiIA32_cl-cy&°…Á\‰)Tóà›\.'7‹8ƒÔ ™L& Ñ ‡hÔ,‡º0Œ)m$6ÞÅ©/Çd2Mœ8±{÷îƒfŒeff®Zµj̘1íÚµ£1jµ:66öõ×_¯UÉÛSmÇŽ©©©Œ±=zDGGkµÚiÓ¦á§%K–¸ºº&%%íß¿Ÿ1`E8[„7Ä Ã)ˆÍí9 (Â%ѺhÑ ÈB!¼+BSþ™©kÈyª]½zuРA‡9rä_|ñøñã§+--ýôÓO‡~èÐ!£Ñ¸dÉ~–a§OŸ>þ¼J¥jҤɠAƒrss7nÜx÷îÝ?®SwïÞmÛ¶­L&ã'·¿fAAAöööŒ1¥Riccƒd;¹>Ôᆖ]üDÎH$R©TµzšB 9 52 õ6Ê—Pãwwwb<‹D¢ÖBaH–(-ô$?CLâ#Ó’1¬&ME¥£ÔÏ’RH\qå®É€[$^P‹¥Í[]CŽŸŸß!Cð¹E‹ƒ 4hV«3f éZþ‰ýôÓOcÆŒ©Õ;çܦL™sæÌ™ôôôéÓ§Ï›7¯I“&r¹üÆÛÙÙ}úé§QQQ»wï†,.o¼ý ääææ>~ü˜r”·'N¸#\á2ø%UUU仜ÀÏ h-Ö€%Ô„›€sÁ1 IDATýÿ=߬VkÆ"jÎNÌ4®k‚Ï„ \Ý6J8ÁµBgZ­çÀç¦ÒQVS1ŠÀµ2õïƒuíÚuîܹG]¼x1?˃¡²²’û(ëõú×_}À€^^^OÝE£Ñð0ÃÛ3±¤¤¤Gq5Ç(˜†ð8–i¢–Qx ‹²^¯ÏÍÍ…kZß±îÛDúlð°è£E0ÌÏÏøñÇ:…‚)R¡Pˆh3é=?Ù^Ë××þ*Š(úöNaoo^8”’J¥r¹ÈDCñ4‘Häìì¬T*«««jµZ¼Õu`môèÑ=Ú»w/cÌÙÙY(æååÙÛÛ»¹¹]¾|™Üv¡PÿÃ?0ƤRiPPPeee^^ÞàÁƒ©WÛÿ²=z´}ûößÿýÕ«W½¼¼ÜÜܦOŸþú믟ûìÆS§Níܹó+¯¼‚îk×®MIIiÚ´)ç$''7.66–Ÿå>}úÆôôtÆØÊ•+»víÚ¡C‡¥K—&''‡‡‡O:ÕÉÉiýúõ'Nœ¸|ùòâÅ‹‡ Æ“ËåÉÉÉîîî3fÌpppà§‘·¿l7ã¶ì$1M*ÄáÆ—(¶FàáêêZ^^NË:ůÈËAå?¥aè8¬&c‡16dÈï²"‘¤ØˆxM {"âÒ»ál‘GÅE¼¼÷. 4 °Á•Áß&(‰®_¿NX…d¾–––ÂÅÁeWUUÁ'ÒP‹rûx5rêÍ***p¿œ–-[òÿÅÿ#†•îH­´  ϹV«%×/GGG4*\FpÕãâ¾µ¢%BŽƒGB¾…×08'ç¡Z-£ÜµáÁ`jzMM?Ik€´¢‰)Ç%Xs»'Еr(%±(mCš7„µü3ÃCN]Û¹sçÐj·ÛéÓ§ë _Ε+WÊÊÊüãééÙ¢E‹óÚàXàFPR“X>4zØTWWSt ¨ãèèî>ˆg £"Jø ´ Á é~’Ãdµ¨¥•æ’O§„௑®¡5‹CEɘr+IYMšŠ4rL&®Èwå!§,44´a÷ËAkÈ:ˆ>~üøÕW_mØ)Y¬Ñ/,Ó‰Ä`dCóM P4€Û[ƒ¹¢è†@™\.·³³«®®&·‰ªý ¸]¢‰FÍär¹XÌ”J¥^¯JA?ÍÆÆF«Õ‚-Mí|X4…ïˆçÆj*F öHjš¼+VCZ£ÿ&ÜZ­–n!~õ{®ÆÓžnJ¥’qäž=z´ÎÚž*•Ê<“‹åĉ¢"Qï†L U;R#2Ràܨ½ )PNÞd2iµZ,èF£qÀ€ìÿï€ÀÕ5 ò<ƒ‘Ëå2™ÌÛÛÛÍÍÍÖÖÎÙÙÙÓÓÓÁÁU™£Frrr"ï„e”Ž¢ðZhh(·<¯5”X"¬¢.×€:x{r¹œ$ pý\Š¿ò^o/–eee¡ò÷ƒ>°µµå'ä…~¯¬©Äq¹y*¹‡[@íˆe@©šfÒÌjµÆÅÅQj„pÅl6«TªÜÜ\DºH,çµµµusskÕªUÇŽ[·¾X]]þøq“¼¼¼ÂÂBÀÉÇwìØV¿/Ub1HeT”žžŽø7솽p:À œ­Gæõ 9™™™‹-¢¯o¼ñFyyù•+W¶nÝÊ[¿~ýõë×·lÙòÓO?A›€1Ö¿¼ø4lËÉÉ™3gÎÈ‘#{ôèÁûå—_0'¾¾¾Ÿ~ú)wä–-[Nž<Éëի׈#c7oÞüì³Ï&MšÔ©S'îÈŒŒŒ/¾ø‚1æààðå—_2ÆV¯^}éÒ%ÆXttôÛo¿Íüþûï“ÎÖ­[¯^½ºqãFƘ§§çòåËc‹/¾}û6cŒ.òÙZeeåæÍ›»uë¶jÕªÛ·oãöŸ‰íرãĉñññø:oÞ¼ììlÜr×®]i˜^¯=z4¹P[·n=tèО={={6÷˜µf²¤¤„Ê˶lÙÂÅ˳gÏÖñLÖ¥£ƒ7}*pƒä}úàõ$66öرcƒá«¯¾Ú¼yówß}g0®^½zæÌ™ýû÷7jÔÈÎήÁÏ×”)S.\¸pëÖ­¨¨(ÆØÝ»wgÏž=zôè>}ú´iÓF,/\¸5wGŽY¼xñwß}W]]ýþûï;::&$$\¿~ýîÝ»T !5‰Dòþûï÷êÕk̘1={ö?~|hhèŠ+’’’®_¿>uêTZpËËËOœ8ñÊ+¯,\¸1VRR2}úô!C† 4¨cÇŽB¡ÐËËkß¾}LLL;vìBCCŸí$ÆÂ—_~¹cÇŽÏŠl}÷îݱcÇæææcË‚ âââ.]ºôÝwß½÷Þ{?ÿü³J¥*++³··/..>vìØûï¿?~üx@pîܹ‰'~òÉ';vŒŠŠ’ËåS§N-..‹Å{öì©5“sçÎõððX·nݬY³ÆŒóý÷ßãtÙÙÙÇ3fÌÈ‘#1“ŽŽŽ›6mJMM}~3Y7†eT.—ã}ŸÞâ©Õ:Á€CÈóðîo4§L±¼óŽÞ`0&صKöÍ72d_¨ 49ÅÅ\\,Z­X¯( '''77·öíÛwêÔÉÃÃÃÞÞ¾Q£F5;ƒ‹‹Ë«¯¾êäätùòe•JUTTtþüùòòr¡F£!Q8ÏÌf³@&°H-Öj+ÒB„¸5¹\^õ}•Í ¡PXýeµtŽTZ)žtû £69ô`óxSÏ5GGGî³»aÆøøø¸¸¸°°°äää5kÖ̘1ò´Ü‘/ ™æòåË~~~}ôQttt­@Ö³2ooo¹\ž–––““ããã#—Ë===gÏž+A²³³ó[o½•œœ\]]Ýðêd©;\Ôè¦'õu‹Å …B"‘ F‡2ÀjeƒYBCu‹åìYÙo¿IÆc&TK¥æÈH}ÇŽ&ÆØ"M` Q,Ö¹ºJ<<.{z>vq¹€Ù¶Z­¶¶Â«Â+ûôÚ"ñ-@ààâPÕ¾ª¤¤Äh4>rTVZ† —¦Á8½JÍ/™M3L­€­cŒ1ö¦ÈVÐ0ù¹~¢ž1&ûJf-·r5~‡ã@ݨ 5—¥Í[ý@Ž··wëÖ­)nß«W¯Ž;6kÖlΜ9Œ±¢¢¢ 6œ:uê……œ~øañâÅݺuÛ±cGTTÔ»ï¾û¬Žœœœ} «Ö¥K—-[¶" ÁµÁƒãƒN§[·nÝ_|qéÒ¥3fŒ9òý÷ßÇO .xð૯¾ÂF''§/¾øâêÕ«Œ#Ö0ŒzÒ°šZ %!6… ¼Šââbt˜FÚƒÕHa …¬,kF†$44äÕWÛ\¾ü#°°›7¥B¡¹uk!cUŒ±ÊJÑ;ör¹ÜÁÁÁή¹B(“yˆÅŽf³1kQQqQQ‘mÀˆæåîuiiiKû–ù•ù­ä­®Þ¾*½&µ©²Ñj´ÌȘ•1+ Å¿çf„™@f4ÞÆ33v™ ‰FÂjJ8F£H"²ºZ…¥Bfÿ;á»Ö(µâŠßàö)ØÈ[ý@NHHH¯^½þo´Xøàƒ‰'"ãúùçŸõÕWW¯^mÒ¤ÉóžÒ—^zé¿™É&Mš¬]»–^ÃÿåxƒÁPRRâèèíìì¼{÷î?\XXøGÅ@7îÕ«×Ö­[Ïž=Ë«ªªª®®vuueŒEFFÚØØNeÃ0Š8‘,4âTÔ€9\ýM(câ§š²Óõëò#GD))Y EÉdB´¢¢Âb±9"°ZgÎÈíìÞÞlãÆ277éÏ?»xzzšLþ&“N×¢eË–ÕÕÕéééjµ£³³oóæ{èËîçÜwwwodjt§âNIIÉõ#×ÍgÍVµU ˆL"b.H„г±—˜ùžY 4ê’R‰ÉdIEGøííaeJÆ2³YrU"b"P' ž@ò À]Ò;`5]ÝxÈ©OÈyÒ¤Ré´iÓ„BáàÁƒgÍšåààpöìÙ’’77·çÃy†öÛo¿EEEY­ÖÜÜÜŠŠ 4xþ/i2™*++>| hÚ´ipppÿþýe2ÙÌ™3½¼¼NŸ>­ÑhT*Ò<µlûöíŸ|òIJJJYYÙ£G’““cnnn>œ;wîÂ… ³²²üýýÝÜÜ BBB>þøc??¿sçÎ%%%eeeµoßb‹¹¹¹'Nœ`ŒyxxTUUÆ . :ß©S'GGÇg>™EEEwîÜ©¬¬äæ™þã‡O,nܸñýlgg‡Ìhh¨]ZZr9-[¶Ä$tîÜÙÅÅ¥eË–iiiF£ÑÕÕZ>¯¼òJ@@À!C5j”œœL3Ù¹sçüüü¤¤¤ââbääV­ZµnݺÔÔÔ÷ß?((èÍ7ßT(¡¡¡¶¶¶NNNGMOO zÓX—Q5.q‘ÈÙ0a‹/UÀ`'êp›6¡P®Ñ”Þ¿/-+¯ZµŠÊHc‰D£ ⊠ño¸) GG;™L¦Õj‹ŠŠôz}³fÍŠ‹‹322„BaãÆËÊÊäryÓ¦Me2Ynnî•+WÒÓÓ/^¼¡)Dÿˆ `6›%W$‚‹“Å$ŠD’ßµ (\f±XÔÕ6/ÛÍ>øŒØÙä\^^NwÆEáÀŽC”9>°ö\Mäáác4333¹º[ÀÑÑ1""ÂÍÍÜ€€€: !“ÉœŸŸ_YY9pàÀèèèù¯î£>²X,‘‘‘{÷î½qã†M@@ÀS¸¸¸üÑû»@ °³³‹ˆˆhÒ¤‰@ °···µµ-,,,,,´±±iÞ¼¹P( {ûí·›5k–““c±XFŽ‰Ô‘@ prrêÒ¥ fU(z{{wéÒÅÁÁ¡Q£F8ˆP(D·Ðììl±XtèÐСC«ªªþÚîÅÅÅiiiŒ±®]»þylíèÑ£o½õÖã ½øa«£G¾ýöÛZ­öE»¶’’’üôÓOqqq´€B…BÔÐPã¯p'§†´ÄÀ¥&yMS$yzz6nÜX©Tzxx˜L&ww÷ÐÐPGGÇ´´4FãèèB|eeennn~~~YY™ÅbªJGÍf3¹YÀ œìmêáÆíu 7Bšip÷[cŒét:Ò) ç÷ˆjÓ¡C‡FGG·iÓ†%<ˆº:Þþ}{ðàAfffdd¤^¯·³³«ªªÍêH}€ ý-2O/¸¹ººþ­K#ÿ§ŒÔ3‰ÖL(Ħ¼Rèä•"’žžŽ5šú À”J%°VÌ1©TІÖ:ÎÖÖáSà‡J¥¢ÆÕð)A@G….F­V#äegg‡¶Ù¬Fë÷‚:SBVÓ€$¢átRGøv¤ð?SBéáí9/xó‡–““Ó€¾º¬21™Lh¨^Î ~…ôlcZ¯¡þB¡¤‰}­Vëµkמü•:îà ‘Ü$ A¡P Î_.—ß¹sG(úùù¡üÅÙÙY¡P<~ü8??¿´´4??¿¼¼™HrY, uÀ¿òq6<Õ¤Ùî„¢§ç4¼(°ÅRêa*—Ëù\9õ¶(7à~9ω?ýG‹r¬1Æ^|Uz…'E2n}(°+5–`¬¿ÔìY«Õ*•JÔÊo²R$¡ÐûRqÅbyôè‘ø!„ìlll@-((°··øð!^Mª««‰)@¾Wi:aSÆa=Pð¹Y,D€¹#áîq¹­zøÕ‡œ:5…Bñ¶?yV¦Ñhêà,mÛ¶ þå­Q«M«Õ < Uf®–%hÒö§bIV£½ÆjÔ3©…3ñlll¨?´H$ª®®ÖjµB¡P¡P4nÜ8//}EU*•R©tqqÑjµ¾¾¾Ô§¼¼œR88Ĩ-ùgð{ð™Ši hM~÷¡%ARl™$æÆj¨}üÈCN][VVÖÇXqÆ“æääÔ¹sçç}–ôôô0¯þÌM¥Rý ¥­ÞñË7Ò@©TŠ$<ªUjiápÛç`õçöXÃ8HŸ`ÝǾ2™ G6 ÕÕÕTãèèh0rssår¹““bYF£ÑÞÞÞËË |6ŠïÁ›¡¾>Z­É!ª¡áð@g- ¡3ÜõÎA¯×“̵r al|à lóÆCN™ÙlŽŠŠjØ-Úòóó½¼¼þ2cíß7£ÑÝÀêùkŬ?~ܨQ£Y)hÝeâƒá½^©T"ƒàeÊ[Ÿ˜je('O P( v©¬¬„–`¬¢¢"??_*•:88( ‘H¤×ë]\\Èíppp°Z­nnn„ðQ¨e±"qyă ÎÖ4’1æé陓“÷f5Ün Ò\ ¶r·üÈCNýÄðûΩS§†Z7ç²X, ØÑ±Z­gΜ©Õ`â…2¬Ë”¹‹Å”’!ï„ÖwTJ®`q§$À‰aÈd2(ÚÙÙÁ;)..FæcòòòL&“‹‹‹³³³^¯¯®®.++ƒ³EZò"©M€9Uƒ×V í(¾G­?)ŠÈ•VÜr[½QObTc_~õã!‡7Þxûë5*£¡º/ƒ±F%;­¢ºKZâiÇ^¼(—if6›A¨ªª¢þÓ&“ "î¶¶¶...ååå2™L©T‚n€Áp;¸´:)×AÄL&“Á•?—z$"lˆÅéõz­V P$’4A‰­á.øÀÚó}ú£.^¼¨R©ÚµkÕ©S§™3gŽ=ú?¥9FEEQÇ­?±E‹©Tª:ËÁvèÐa̘1bR©T›6mzN¯ÀP©T?þø#”oZ·nÕ»wïË—/GEEEEE½üòË*•jÅŠ´×7ß|ƒŸ:tè R©RRR.\¸AþëׯÿòË/¡R©ža“´ÿÔ?~¬R©Ö¯_¯GU©ThL÷ ­¨¨¨{÷îQQQm۶ݲe‹^¯ÿñÇ1“mÚ´Þöĉ}}}1-§Nâ^a‡0rÏž=Q5æëë;qâÄÒÒÒ¬¬¬   jÝÖÐþÈ9ÄzÓG­>yܲ*jqF½s ø;%v27ZUYYYVVVQQ¡Õj5^¯Ç^F§ÓUUU•””äææ–––”–––––ªÕjP¥¡$MÒ¹¡ . 9¨¥§ º0’’ÓëõV«)%VÃù¦f¦TåCøºœzórÌfsEEŲeËL]^ìí틊ŠN:Õ¡C77·C‡µlÙ2((H¯×>|¸U«V‰‰‰è9ѹsg{{ûÉ“'#­zèÐ!<‘‘‘nnn999.\`ŒÙÙÙõèÑC§ÓUTTÔÙûExxø7nݺժU«'NØØØ¨Tªçq¢cÇŽíØ±ÅnÉÉɉdþüùPdaŒ¥¤¤0ÆæÏŸß¼ysÚëÝwß}÷Ýwu:ÝçŸ~âÄ —¸¸¸‰'Nœ8qÀ€Ç¿rå ÕlÛ¶mýúõÞÞÞõõÉd²ÀÀÀ´´´GÙÛÛŸ:uÊËËËÅÅåÙžåàÁƒ-Z´Ø¼yóæÍ›ç̙ӹsçC‡a&ÃÃÃ?øàƒ+VdffvïÞýIïéÓ§WVV¦¦¦.]ºt„ ™™™˜ö3gÎŒ=:88899A˜€þ IDATªÕuC᫗Жcº¨ 3`ÆÎήqãÆUUUÛ©m(«asQ%—¸ ø·-ˆ¤UUUÙÙÙ™k ¿VVV ôâÌÍ͵³³ÓjµR©YµZ]]]­×ë¹­zXÖ5I ` 9!â8 •|½^àÌ_€„±©´NÖþH –·çëå<Õt:ÝæÍ›ÿñ|øá‡¹¹¹111?üðc¬²²2&&æ§Ÿ~ŠŸ1cF^^ÞîÝ»gÍš•““søðáo¾ùfÖ¬Yyyyqqq³fÍÊÏÏŸ9sæ¾}ûòòò&OžœPÇ·½|ùò   iÓ¦-X°`éÒ¥+V¬xóÍ7ŸÇ‰–.]:wî\|þôÓOe2Ùµk×,XPRRBc>ýôÓ   jJV^^¾aƾ}û†††®Y³&**jÁ‚wïÞýàƒ¸û¶oßþµ×^«¯ÈÑÑqòäÉû÷ïÏÈÈ(--Ý´iSÿþýŸ9wkôèÑ7n\°`Abb"dÓ¶oßîéé¹`Á‚êêêQ£F%%%]¼xÑÆÆfÁ‚$³ýç¶zõj…B1~üøèèèíÛ·?^v/”oº] ¯ó‰ÄÙÙyĈ½zõÂBLu‘ÈôPŠžqõXµ)×çƒZˆšL¦’’DÕ ƒV«· •7•••-[¶ÌÉÉ&JVVVvvvnnnaa¡V«$4oÞ4:>I©Ìb±ÈårRÙ¡þÙܸ¾R¢ˆKx#AR‚Ú‘†zƒœÕ«W÷éÓgîܹýúõëÚµ«X,îׯ_çÎ9b±X-Z´oß¾³gÏÆÆÆ†‡‡6ìðáÃ¥¥¥k×®7nžrÆØO?ý$•J'Ož¼aƘ˜{{ûI“&­\¹ròäÉUUUÇŽ«ãÛ¶±±Y¼xq³fÍ6lذnݺ7ÞxãyœeݺuÓ¦M£¯_~ùåæÍ›{öìyõêÕÑ£Gcã²eË4Í¢E‹žÜ}úôéíÛ·2d¾6nܸgÏž...hÊûè£fΜY¿ÏP‡† ²hѢѣGwêÔiàÀÏ):Ô³gÏV­Zedd¨ÕjƘJ¥êÙ³§T*½xñâ€<8pà@WWרØXt%øÛ½{wZZÚš5kþþÈe2 ºPŸƒÁP)++»qㆫ«kQQ¢mÜîCÁ+l¡*nA%¢#T¯£Õj«««©8ÊH–\¹r¥¼¼µ¢¢¢Ç—–––——“&Bee%·=6éxÒ-ïB¥äÞÀÁ"$ÔhZp›ˆÎ{‚«·Í[=@Îĉ÷ìÙ“˜˜¸yófP)#‘HÚ·o¯Ñh®]»–––äãã³cÇŽóçÏïÝ»7""âÁƒOr?T*UDD„L&»~ýzïÞ½£¢¢ê¥ó«Éd:tèÐ/¿üâçç7oÞ¼'›oþ÷¶k×.£ÑتU«ÜÜ\dš5kqî+W®`Ø­[·L&Sppð“G¸r劋‹ Í\\\"""œœœhߌŒ ©TÊÕÿ®svv^·n ý~øá‡¦M›>'ȉˆˆðõõÍÌÌDÌÓÓ3""B*•fdd@8²C‡ÁÁÁ999\'ò©öàÁƒ²²²ÿµ=­VKA*l¡0^öõzýgŸ}véÒ%B¹\l …¯¿þ:(ÔŒ1…B°8¡N“‚TXße2™ÑhD‘4“ɤÓé ƒN§Óh4ååå>T«Õeee?Æ¿ùùùëá¤ø$î2«aÜM˜0§£ÜAÉ€áa¬FnA?À0ã(ë`M#2oõ92™ÌÖÖÖÖÖö©jÁ;vœ0a¬Y³ zm]ºt)##c÷îÝÞÞÞ“'O.++«µKFFƾ}ûîÝ»7gΜ1cƤ¤¤\k]Ú÷ß¿lÙ²+V\¸p!<<|øðá7oÞ|¶§ðööÎÌÌ\µj؇~å•W¨q'ìöíÛ999ܦ–‡>}ú42 Œ1ê pðàÁß~û­ÖL¾òÊ+/HÐkÐsúß¼páB¸ôưoß>tð„}óÍ7íÚµËÏϧ-z½~ß¾}ׯ_òhyyy·nÝŠŒŒ$/¼a—ôÖkDØX Œ$d¸å&“é×_U*•h L\2$ø"À³Ù ¾Ij’pп:N¯×ët:äŒñÞIž Âkr¹á2¸MxÝ´i“D"6<½s]º0" €ÿMI,üÐR*•D²àQá¹Ú›({ùå—ŠŠŠðµ¢¢bæÌ™ýû÷W*•ï½÷ž ¶9ræÌ™óçÏ?{ölXXX·nÝœ˜˜˜ŸŸ?vìØ¤¤¤:ž%K–„……1þü¤¤¤?jŸó× œ(ÆXjjjJJÊèÑ£u:ÝòåËçÏŸŸžžŽ6ÉG޹téÒöíÛi¯9sæDDD€A7qâDl¿wïÞ'Ÿ|Ò«W¯;wîLš4‰1–pëÖ­£Gþ/<¦UUUüñ¥K—ÒÓÓèæævþüù/¿ü²sçÎÕÕÕ111hŽ·råÊŠŠŠnݺVVVŽ7nÖ¬Yï¼óNZZÚüùóÏŸ?ÿÞ{ïÙÚÚž8q"111!!žÏþGÎÑãjõSKPV#ý‰òÊè0 ¢FUÄXD•Ø9 øÌ ÊQ)¹£ øÍ?®–·m«¡E+ƒQ*•†xµ4Ó(WË•‚óÀPŸm™={ö¸qãcÑÑÑíÛ·Gq~Û¶m}}}çÏŸ1o¼ñF£FŒFcïÞ½[µj¥T*½½½===ÝÝÝM&SïÞ½>ûì³;wî0ÆBBB(û ¸l÷îݶ¶¶øìææ†‹|N碙tqqn[ïÞ½ÃÂÂjÍ$lçÎ(ÛFbœ¶?Íñz÷îŽm£Fzíµ×^œEsÑ¢EÏñÕ½{÷ï¾ûN£ÑôîÝÛÏÏÏÍÍíã?†Ó·oßöíÛ3ƶoߎhŒ§§§···ÑhLLLôòòjÚ´)÷™T(;wNLL¬õ†±oß>''§†úwNŒ/¬æX»€²³³Óh4”Ø u2VÃ!&&UòsktÈ­A$ ê€; •J -ú:Žê1¹"7@#n†K9ƒ¯†Sãâ©#«Bš1†ÓqÛíp㴌ӳ€ZìP)ou 9vvv:uân¡>Óžžžh«¬V«—-[–žž¾råJÎÝ‹‚…’ÌÕÕÝæ¹cê̸)“Éžëpg²Ö‰h&ɨ7v«V­jE8kíëãããããóâE®ˆÆmÏ\+LG?Q¨ ë>5ôDK{à w#9F(ÄALŒ<¡ZîÙ¨M5÷°;@)J&Q+ ú‘Pã p ~ä!§ – õîΞ=ûœ”LŸ40—0䤦¦¾Èýr(6ÅåbQL k.ÉÆ„pcVB¡ÐÕÕÕh4–––mŒqbA7 …k:áÞ°Ês)È8a±(FŠœHQâ‡züèt:â&P$‚8,.‡"Lå ä°qK¼=?ãKmyã­¡¿WŠÅV«U©TÚÚÚZ­Vè¾PR nO6"£ÆS]]­Ñh°"c‡;‚`ê`¨Û ©¢9::r³ýˆÝ¢¸Ž/1†‚r $` Õ‡BG¯¹=¤ K¸¸a7jæF,5Zx<|WÐzƒœÔÔTWW×}ûö5ÈÛ~çwð9//ÏÕÕõ9)}ú”)Snܸ±`Á‚­[·šL¦M›6qßâëÝ/^Ü¡C‡iÓ¦ÅÆÆ®]»vÍš5={ö|'Z»v-õ/X¹r¥@ 8yòdll,©Òa{«V­ øÆµŠŠŠ­[·¾ñÆK–,iß¾}llìíÛ·§OŸÎÝ·mÛ¶s«spp;vlbbâ7ÊÊʶoß]™g{–áÇ/_¾<66vÿþýÆ óòòZ¿~½££clllUUÕøñã?ž––¦×ëcccñVô/í«¯¾’Ëå£Fzë­·Ö¯_߀ûåPO¢È- _I=“Z´‘Œ[ C¼ê{÷îíß¿½×¨è’ôXù%øL2¢P ²á{ÙÛÛ9Òßߟø¢k&ç©–¬Ñììì¨eØäñpõÙ‡1Ák¬Õ?ä˜L¦´´´Q£Fùúú9rdÔ¨Qááá)))ƒaöìÙëÖ­5j”H$:vìØ•+W>|8xð`¼€3Æ<èãã3jÔ(OOϼ8·­T*?þøã¸¸¸¯¿þº{÷îÏã,Ë—/Ÿ={6}ݹsçwß}7bĈìììáÇcã¢E‹ ôäî|ðAçÎß}÷]|mÚ´éˆ#š4iBKê‡~èèèøÑGÕïdâ"çÎ;dÈÈÈHºµgk"‘hĈááágΜ©¬¬dŒŽ1B.—?~|È!ÉÉÉãLjåÖžjÛ·o¿páÂæÍ›ÿþÈÑì’Jg @‹;1£’8#õš´´4ÊÖPf…jõ¹¢œäs ˆqøà$ž­mÛ¶Íb±¸»»C½ôáÇz½ÞÎÎ.,,ÌÉÉéöíÛöàÁ³ÙÌ•O%»}û¶ƒƒ‰~:::†……ÙÛÛÓ¾wîÜ‘H$uF<ûGgݺu¾¾¾xNär@æåå• ­ûF………I$’;wî` jÞ¼ùãÇ+**þühùùùUUUõÞj¨ÎL§Ó¹ 8 dƒ"õ¡ –ÕjE?n^¾ jtà+`AG6¼§"Ø¥T*[¶ligg(qY,Ëår,ñööö”@‹ÅŽŽŽ\‡Ìd2]¸pA­VØ”¢–DOÀ¯ÄµÃâú wF£V«Åñqj®t7/.äTUUÍœ9søðá)))5¢í XdddJJÊܹsŸl´\¶sçÎÍ›7¯]»6%%¥gÏž#GŽLOO¶§hÕªÕãÇwíÚ•””èíׯ·I(c,##ãÁƒ}úô¡-ûöíCeÌ!µÃùþûïkåä/^¼XPPðd8®AÚéÓ§wïÞÍõ¼wîÜyáÂÚ²gÏž¨¨(n«=N·sçδ´´'–žžÞ³gÏ'¹ø\Vd,©ÄÀFª·G$éªa¥¦bOò]Ð[#…iŠ˜ÕâF7kÖlÛ¶m½{÷¦óápp‰Dâïï½N\$¤~¹Yî]?D¹*ÖašväòÂår9| nKPV“ãQA·fˆ·ça½.G©TŽ?þرc%%%£GÞ¾}ûK/½¼jÕ*Èï3Æf̘ñå—_N›6íØ±csæÌyqn{õêÕaaaÈßÄÆÆ†„„?~üÙjÀDDDDDD0ÆRSS‡þÎ;ï,X°`Ú´i—/_ž1cc,99ùÊ•+;w/^üÿØ»Îð¨Ê¦ýlßͦ‘PBïJG^Š‚¢£bˆ U@é½¢XB‘˜Ï( ª  €T JHHB ée{û~Œ¹ßñ}AIw~p…ݳç<ç)Sï™iÚ´i=¨‰Î°aÃèóüüü¨¨¨îÝ»_¸pfrûöí©©©'Nü7lS™L¶dÉ’“'O&&&¾úê«ÕªU»|ùò'Ÿ|Ò¾}ûÂÂÂ7Þx£F›7o^°`AaaáÓO?ýè£N˜0aêԩÇã7Æúôé‘#Gzyyýúë¯{÷îýöÛo±QnB NÁþQ/^&Þ{ùe¿'úqØFHÆBddd¼ÿþûÔLçñ€¹ÇÅÅ¡{Ëå‚¿^/¤sÂiơςõM€sèòþ•€Äœ bé&¸SsJ÷,“sÜh4nÛ¶«ÛƒáÒ¥KµjÕºsçŽR©¬_¿~ZZZaaaóæÍ333oݺդI‹ÅB[¤aÆ©©©UªT1™Lf³ùÚµkááá7nìÖ­ºm6oÞ¼â¬eRR’N§#—”ÍfKJJ €­vòäÉFy{{?}3éãã“@6nÜX£Ñ`&Q\'))I«ÕÖ­[÷êÕ«&“ P4$ŸÉ[·neffþåYݾ}{ÿþý`õ+W®˜Íæ’Ø¹üñ…^øû© )))äO«U«V¥J•hV‰QÚðÚµkäO«Zµ*5gJLL¬V­ZµjÕ’’’ÈáS·n]//¯üüük×®Ñ߸ÿùóç½¼¼þBÛ$—Ëõã?†††VÀêÙÙÙW¯^ݺuë_|Køc൸ðP«Õz½žf’§³À !¿üiÄè)û’¾¢¿É Ñëõ  ë)$#?0Œ¨N(}Kå¥16²EH–K6qÈÎ,$КÙlFiŒ¥zx ]—ËÕ§OŸ>}ú´jÕ }#·mÛ6pà@·´¸/ºzõjJJJ×®]) PXXøã?Ž?þ­½^OZ?úVá4V©R¥J•*BµZ ËàÑG]·nÝœ9s>þøãK—.Õ¨QÃÛÛ[¥R•eùÈ{'ÎK{˜IQ¢˜&f²äÀ$š’ƒ¬^½úÇ"ÿª[·n©Þ_Ò‡Ï*‘¤{R©ÄAèããSrÅ+l…´¿O•*UªY³æåË—á’Åu6Qt™1Á·$*L&iEpF Ö·ÝØPŠ è2Цõpùòeô'E> jÏÓ'ë„~Žº;4r2YP5²‡@ pÙ©T*º³^¯' ’¬ÀãQ 7‡Ãa4µZ­Û±VAk%iàÀ¡B,]º”ºXºÉMn*_ÊÊÊjÖ¬‰¸¤àn‚‚fÂÃn @= E‹âp ]L|ßÓÓS©TæååY,ô2@–ŒÃáHKKÃÓé¶V«ˆ5 í R¢8h®ç° xQ\¾“"F¢¸84I)Þùaêx%Cp‹œŒÈB 2ä¡™šcÇŽ¹ûå<2›ÍGŽyXg²âs(¥RùÓO?Á&@KâѨ–&Xüœl\.—V«„ 5c€u¦Ÿçææ¢Äòÿézäf¢‚˜A¢(d \v<҇mˆÐÒ”nN†—ÁÆÛñÔT^Ì´uàÉ=núgˆœ‡†œNg›6mâ<äöíÛ—ÙÛ©T*I+臌*xÅ{‚Ÿ‘{Š$1Y² f`¸ð:4ôsrµ¡<]ÆY9,z ²5é·ôD­VK² Ôô Q [ lÿÛ·o#S†# ¥èȇ&i™ƒ>§„Fƒ Å•T¤WÞÄÚMn‘S¦tàÀ‡AëããÓ±cÇ2xÐöíÛzͱvíÚåXvè^ dŸG EP|LA}Ûà.CNÔ¡ìM#ÇàC†jqR|…®¤ÛZ­VòzÁ‹‹‡x½F£;vldd$JA+ ­VK‚3ð^^^”úCƒDhÇd2¡É½ %ÀÒ+Àwï³!iÉÍÝ"§¬©{÷îÕªU{ˆ½ºW¯^mРAÙô˩ȅý¥¥¥Õ®]»ÂöËBð*/¼¦`ݦ‰ÑóÄOF 1nB‚~EòxQ\Ɔ„–kÈ…{{º(ŒD&ÑüùóÉù†F£)((ÀÈSGà7º B2ôtàHb!ÏhB(-”Þ€:2æÜVŽ[ä”=ÜýrâââîZò ô;ëLº\®“'OþtuYÊžn‚h°3Àmy©¸È€`F‰L)à\CQB‹¡S••JUTT„r¸)•J£ÑCŠn’ŸŸ¿!x$„€ÅÆ«Æñ~kø­ŸŸ_aa!¯´œì.xSn"NXæ¼Õù!”µP(¨Ôt_D‰¥:Èu橽‡Ä¿„Ëåt2‘¸@ÊVÔ½2*)÷Ø„›ÈåîÄ6ÌpÉÙ£ÚŽØ*¤,ÓÅHÂxøˆBëä2BÜÞb±¨ÕjäBRa=#ND^ƒ9:ø-9¬`F ™/Y,TÿìСÉ'PçrzD1›W<ƒðCã8à$Xj\˰hTEEE2@2ÑËRmásSiíÆ?Ñ‚«W¯Þµk×ÐÐÐÐÐÐÕ«W?Øgee9ò©§ž ~å•Wnß¾}¿w°Ùl¡ÅÔ»wïêÕ«GFFV´ùu:ÇŽ›5kVõêÕ©Ø(??Ú´i?þøóÏ?ß«W¯ëׯ§¤¤´iÓ&44´C‡Ë—/7 Ë—/ïСChhh›6mRRRJ{´/^lß¾}=®]»v/×4¨U«Vå;ÇnÒ¤Ihhh‹-vìØÁ·ÇÊ•+Û·oÚªU«äääëׯ?÷ÜsÏ=÷ÜO<1yòäüüü;v´hÑ"44´I“&‡~ˆE ªåìr¹ÔjµZ­&kf u<ß'¡‚RQ *ÀŒD¹¤P‡wEs6âãh P(âããÑt‡ì ›Á`‚N°BפC ²'‰L²·È ã(gxÑK-¨!Aé_²‡È¸Áœ¸©|k“'O Bœ9sæ£>êÓ§Ï7ß|Óºuë‚‚ÊýnÓ¦Íc=öí·ß¶oßž<]#„ ©]»ö•+WvíÚ%„ðööæ5†ÓÓÓ«U«6{öl›ÍöØcmÞ¼yÔ¨Q÷A*˜ IDAT5t•JEåË„k×®½qãF§NöîÝKœ½uëÖ;v4›Í–ÌÉÉÉÈÈÈÊʺzõj:u*W®|âÄ ///´k+ ‘³uëVàtæÌ™U«V­^½ú‰'ž¨W¯Þš5kRRRl6ÛÎ;—,Y2þünݺ͟?ÆŒS§NmÔ¨ÑÂ… y±Ò ÷Þ{¯sçÎ&“é“O>yë­·6lØàééxìØ±x{{Ÿ:uê×_¥%æ ´¸¸¸'N!êի׳gϲÜÁãÆkÙ²å–-[† òæ›o¢è\^^Þܹs§N:cÆŒ¦M›ÎŸ?ÿ‘G‰‹‹KIIùõ×_øÂ /¼ùæ›O<ñÄêÕ«{÷î=nÜ8z…‡Èb <|°c ˆé“!Á ãJªþ ›€Çü*#BÁ| ¥I„5IåÈþ #žPdë@òIB50nD1Heu¸ÉEuKy7`¦iT¢¸@œ(ND…l£ò²¡nÁPn"tèСٳgïÛ·oÏž=Mš41 £Fºsç΄ V®\õÌ3Ï´jÕ*&&æÔ©SO?ýôÖ­[wîܹbÅŠ±cÇV©R¥W¯^sæÌ1 h¼Ø²eË–-[¾ÿþû'Nœxì±ÇP¿ò/ЪU«¢¢¢>þøc»Ý>iÒ¤×^{-''g„ ~øáW_}uäÈ‘qãÆÅÆÆž;w.44422rÀ€J¥ròäÉuëÖ;wnQQÑý ¼{_¥rñâű±±_‰þùçŸ;¶qãÆÌÌÌI“&õîÝûý÷ß/,,4hÕ‚7nÜøñã;wî<{öì7N:²süøñO=õT5&Mšät:{õêå>Z‡l–Îí …“b“dµÈd.§SÈd ¹Üér‰b †cȰ ”)B&— DVè>Å?q86•Šä„U&ûÍ’Ë…Ëe¥ÜR¹\V Z“ÉåŽâ`9ăڿc„BÈXj’‡œ.—B.w8¢ø+«LöÛ].{"¼ˆp¹h0B&Åö™Óé4Š2ÌZs‹œßQTTTlllË–-6l(„ˆÿõ×_Éã_«V­#GŽ,[¶,==Ýb±\¼xqñâÅ›7o>tèÐ'Ÿ|réÒ¥%K–äææ>|xÚ´i!!!Ó§O?zô¨¤×oXXØ#<òÚk¯ëÞ½ûÊ•+ÓÒÒzõꕞž}ýúõ={öÔ¯_¿_¿~Û¶mÛ»wohhhbbbݺu[·n=mÚ4™LÖ¯_¿Ù³g>|¸”DÎ?ˆRRR®]»FUò’““ÓÒÒ„AAA#FŒHMMݳgOXXعsç¦NZ½zõ7â‡7oÞLLLœ>}z“&Mf̘‘””ä9ëÿø£lÓ&…R)/fç E~*„oé[»Ý.W(dB¨YЍÉd‚Cì7^, d2™ÃéÔh4v›Ê̺ù·§Èd*!äÅ™§è̦Ñh\BܲÚltÝáËdv‡CVÜ™4 ¥R&!Í …R¥²Z,BÜDÈdµšœ«ê3ͤ‰IPBr¹\ýÌ3¢sg÷¶)‘3cÆ r¬­\¹R±k×®úõë§§§Oš4‰xÓ=J…C‡5kÖ¬d{’ÀÀ@£ÑXPP——÷F_PPðïi|RJTPPpåÊ•FÍš5KQ·nÝääd“ɤÓ騞<§»¢³Þ~ûíJ•*uîÜ900Ð=ŸŠ™™ÞééH„:ÿ›­8äNýsPv82!Ô ¹§lv»B¡P(•”xI4´É¡;(•J’` ™LIá§SIñ¡ß÷½vÙíB¥r ¡+. ú›ÍåúÍÉæpÈår™ÓY³fÍÜÜÜ‚‚‚ßË+^2™S¡PÉd¿%œÊdú­˜´Ã¡ _\±{ µsdBÈ átÊ 5ÃI»\.Ey‡'ÝŽ5)}óÍ7‡:}úô¥K—^~ùåÿy}DDÄĉ?ýôSÎŒRSSwïÞýw26Ç[o½uüøñÿû¿ÿ«U«Ö?hÒwïÞ}íÚµ %&“’’>þøãØØXhÔlô®@êM›6•ü022ò?ÿùÏçŸ^¿~ýò}—“'O;vìÙgŸuo¢Î;Sÿ^L—ã¤0 *r V»“—·3HW-ã lpb<À"N†¾ ¼-‚Äæ̇ơۈÇü&M‹-x`ã½kZÊ%ŠÜ\>oÙ²eÉ9$·{/•È Þ¾}ûôéÓƒ‚‚BCCcbbrrrîz¥ŸŸßèÑ£¿ûî»ÄÄÄ£G®Zµ _iµÚ_~ùeÏž=¦cÇŽ=zô¸ßaØíöO>ù¤Aƒ~ø!}R·nÝ:Ìš5Ëd2·k×nöìÙ³gÏ>|x|||¹7lmܸqÏž=qqq}úô‰ýî»ïš7oþÒK/œpàÀÂ… ƒƒƒÇ·mÛ6¹Œ3Æ××wçÎ'NÌÎÎ mÞ¼ùìÙ³£££‡~áÂ…»ö8¨Q£Fÿ’ftŠnÞ¼)bæçç8pÀ=3÷N6›ÍÛÛ»äçØ/Çl6§§§W­Z•zŠäååegg×®]›„EEEZ­–䇇GõêÕoß¾m±X‚‚‚rrrrssëÔ©c6› ­R©$™ììlò§yyyñ¾¢÷H.—ëòåËü___»Ý^TTDûûû;Ž«W¯Ò·AAAV«õÖ­[æÚµk~~~•*UºzõªV«E¿gñ ûåÐ~ÍÊʪU«å»dddƺuëÒ¬bö„×®]#tM@@€^¯7 4{J¥RRœÿo’¤_Î]—[¡ÓéjÔ¨‘‘‘a2™oÞ¼i2™¼½½›5k6uêÔ!C†ðåBèõz>“âÁõËù#r:èëEû3777''ËÍgïÖ­[F£‘”¡J•*Ùl6 Y‘¾ò×r+r¿œœœœ´´´öíÛ»5ôû%///â$Bˆ]»võéÓ§lJu2™ì®wÆÀÈîæ×P¯9úH:Ó”ùøøøøø”¡dVE‰¦/2{–þçr !âãã‡Ú¿ÿ¦M›úùù•\î²'¹\.™¢J•*ÑžäËM$é0¤R©ÊÝ XªDëB 7¼/‚¼!¿NQQ‘{ÿ‚¡s—ëž7Ý#µnÝzÙ²eƒáĉ ,wω›Üä¦û"wµ?¤C‡ÝUJ?|JܽÓã?þøãßï¯L&Ó/¿üâÞQnr“›Ü"ç.D(.]º<ÜýËæí¨+p·nÝî ã>5nr“[äüE"°ÊCßö¯:÷KO>ùäC\FšÈápTäÎnrSE92™ì!.¦ë&7¹ÉMnª@"ÇåríÝ»×=#nr“›Üä¦HžžžÈsúc­uëÖåD‘óò…!òž‰Š*ìÀ$„âŒÿÚ-ô'3ãt:+&…Ú#UÀ©«àkZ‘O¨¤TD¹ÆËË %$~'r¼½½õz}7)²Ûí¹¹¹z½ÞÓÓS”_¥  €*zzzV¨6M………‡C£ÑxyyQ–hŤììlN§V«u:]O Åb)**ÒjµÞÞÞ°ÅVnn®R©ÌÈÈ8räÈ]ó±Ë—*W®ÜºukIÅår§ŒŒ OOÏ 80  *Nêíí]Nh^^µ|,{f^’¨©«^¯G"­>`³ÙÊ8šŸŸöìÙ®]»Š² hߕΜ9èp8 ©tù™3gªT©R»vm»Ýn¨À5Õ:Ô¥KªF|õ^ݺuëæÍ›mÛ¶u¹\pŠŽ=Úºuk!D:uÚ¶m[ÑL½^OçÎh4VœV1‡ã—_~¡By&“©"7ëLLLÔh4 4¨ ¬#..®I“&UªT){f^’Nœ8Q¿~}žWîNu“›Üä&7•¹EŽ›Üä&7¹©Œè¯çå>¾M›6%ûf•©•³eË–#Fœ*¦ÌḬ̀°°»¶Q)3JLL ;|øðùóçSSS…K—.6lX™ àÔ©Sׯ_/÷=ôÓO? 6ìøñã×®]«°=--íøñã<&œ——çΦük4wîÜ)S¦TÁ,\¸püøñ|ÆRSSÏŸ?ïÞ9Bˆ­[·†……ݹsçOÄsXXX|||yZ9Û¶m›>}zvv¶ËåjÚ´é×_ýâ‹/âÛÑ£GSûiÓ¦µ*…þz/^œ3gŽB¥R­]»V±råʸ¸¸×^{.¸páBåÊ•·mÛvìØ±¢¢¢¨¨¨3f<Ø18p 66váÂ… 4Ø·oßǼhÑ"Šó !¦OŸNì~Ô¨Q:uŠˆˆèÕ«WDDÄäÉ“½½½çλbÅŠÓ§OöÙg|r<8iÒ¤7näååyzzöïßáÂ…óæÍ{â‰' å]õèÑcذa³fÍ2dÍä¢E‹¨èèÑ£»víš””´`Á!„‡‡Gi d2™ƒ‚‚ªV­ZPP V«¯^½š™™Ù¬Y³ÄÄÄ:uêÐ|>XÊÎÎ3f ý]µjÕeË–}ùå—Û¶mBtêÔiìØ±BˆÁƒSÅ„ÈÈH;vh4šÝ»wõìÙóã?Blذ¡”¦åwÞ9}ú´",,ìÅ_¼sçθqãè«Ï>ûÌÃÃcýúõ;vìBtéÒå7ÞÀW¯^½{÷n!D÷îÝ%ß /}›bcc}||¾þúëÍ›7“«ãBHi4CBBppìÀÆŒS«V­† nÚ´ ûY2Hú<<<üòåËYYYe?H!ÄéÓ§ßyçÉ“'׫WoôèÑ}ûö}饗FŽÙ¸qã‰'FEE={VþüóÏß¾}{„ ôÃ5kÖ”^Ó£¢¢¢þýû¿øâ‹aaaùùù£F¢Ïcbbp ²fÍš›7oþä“O`\FVΓO>ÙªU+½^?jԨ˗/ïÚµ ¥Ñ£GïÛ·/::º^½z/½ôõ\y€äp8zöìéï<`À€µk×.Z´hРAЭȾB999¿üòË¥K—l6[BBÂÑ£GM&Ó®]»ÎŸ??gΜÏ?ÿ<::º}ûöƒ JNNŽ‹‹;qâ„Éd¢ †_ý•xʧvíÚ=ñÄBˆ‰'¦§§ïÚµ«gÏžñññÿ÷ÿóúë¯>|îܹß|óÍÁƒ§N­Óéž{î¹èèè6mÚ 80!!á¹çž«^½zttt||ü!CJOä$%%U®\ùÔ©Sùùù………ÉÉÉ~~~§N*%¾¾¾ÑÑÑ .ÌÊÊ:þü®]»¦N6~üøÅ‹¯^½:"""!!!::ºjÕªÏ>ûlvvö‚ ,Kttô矾cÇŽèèè7nôéÓ§4ædÅŠÑÑѯ¿þúË/¿¼xñâ'N„„„!¢££ ň#~þùç¥K—œœœl4wíÚuñâÅœœœýû÷_½zuéÒ¥K—.ŒŒ|ñÅ.\xêÔ©gŸ}Öjµ¾õÖ[BˆRÒ!ˆ&NœH‹¸gÏž^xÁh4FGG[­VÞAmß¾}Ë—/ÏËË+,,ìÝ»w™:Öôz½V«•Éd¼SÜ#‹%>>þöíÛ¹¹¹¥¹ÌÉÉ!÷¢ÉdÊÎÎ6&“©fÍšK—.½ÇAþ} å•WΟ??wîÜyóæ5oÞ[ÊjµÆÇÇ_¿~=??_.—ñÅëÖ­Ûºu+´•;vlܸ±4¶ŽN§óððB QãÆNž<¹víZƒÁpá£ÑHmÊ t:]NNN@@€——W~~¾ÝnÏÉɹsçÍðõ{} Ô¦MêH/Ù'ô¹Íf+l …B°aÙL¶yóf³Ùl0üüü*W®l6›FcNN]ãááA¯o2™”Je@@€Íf³ÙlJ¥ò«SDÕ«WòÉ'_ýu½^¿aÆvíÚeggS Áõëׯ_¿þÉ'Ÿ\¿~½ÓéLLL4™L´”4H£Ñ˜œœ|áÂþù·5M@@ÀêÕ«7mÚd±X C¥J•ªT©B3I—ñYÅ`t:ÝøñãïÚéùï“··÷Â…  E^^^|||AAANNIæ)讃¬W¯^dd$ŠÒäã?>f̘7Þx#33“>5j”Z­^¾|yaa¡Õj­ZµjXXØñãÇÛ´iÓ¦M›œœœèè興ÞRùÓÇ\©R%ƒÁ`±Xrrr âããѧÔµkב#Gj4š¿³ù|YORü›4i2sæL½^_Jû>!!aàÀ5kÖ,(((hÏž=øá‡Õ«W·jÕŠ².8%$$Ô¨QcæÌ™U«V-ßf‚ ,Ëå§OŸž0aBÉqþeee%$$ :TÒÈõá äää#GŽLŸ>ý/;JúôéÓ§OŸ¨¨¨ððð®]».[¶LrAbbâøñã7nLº…„.]ºT³fÍ™3gÞûZ—ÕªUkäÈ‘¥wÿV­ZÁô,,,LHHxöÙg©Ëí?”>ýôÓ¤¤¤ &„‡‡¿õÖ[܉ZªD³\ üÁƒ¤===§L™WJ>Z·n=eÊ”ŒŒŒ¤¤$úÄb±DFFÞõâ3gΔ†Û½G5jÔX»ví£>* YÉd²)S¦<úè£qqqF£±qãÆƒþðÃ'OžÜ¯_¿µk׎7NÒž²´éìÙ³§OŸŽˆˆˆˆˆ¸GÝ”)Snܸ‘œœ\z£*—nVVÖÈ‘#ëÖ­[Jºöߤ7öë×oèС“'O>xð zl“ö0nܸ¤¤¤¸¸¸W^yå®Ð˜W_}µoß¾qqqP¢K‰¢¢¢Ô©€Ô Aƒ)S¦Øív MŸ>½‚híÚµ{çw6nÜèt:ãã㣢¢øGíׯ_BBÂàÁƒwïÞ½|ùòfÍšÁƒZT¯^½)S¦¸\®3gÎðÏ?þý÷ßÿÍ›ÿE+ÇÏϯFB//¯ÀÀ@•Jèííûâ‹/vïÞÝh4Ι3ç« …bË–-“&MêÞ½»Á`ؽ{·F£III™8qâ´iÓ&L˜ ÓéªU«FaçeË–õíÛwõêÕ‹-*…Ù´iÓ°aÃÈÓ*„ ôõõ0aBZZZ÷îÝÍfóèÑ£kÔ¨¡T*Û¶m»wïÞ¶mÛæääÆ:ÜUE} äëë(“É<<<Õjµ¢_¿~.\;vlãÆßÿý>úÈl6תUKQ©R¥š5k’®èååµiÓ¦™3g>|ØjµþðÃ¥1Hj¢S³fÍsçεhÑÂ××W§Ó©T*™LF`M¥R©ÓéJ£H”ÍfËÎÎ>yòdŸ>}ªW¯¾zõêÉ“'Ïœ9S.—GDD :tÀ€ÁÁÁ´Á¾ûî;½^Hê-±ø}³óK!!!»wï ³ÙlóæÍëÒ¥ËÖ­[ܽ{÷üüü-[¶T­Zu„ Ó¦M«S§ÎÊ•+—/_n±XêÔ©óÒK/‘F,„èÔ©•óxà´eË–þýûwïÞ½  `ãÆÓ¦M›;w®B¡0`Àk¯½vîÜ9»ÝþÜsÏÑ årù!C täÈ‘?‚á> Š÷¹xñâ]»v !ªT©ò烤CTz ½I“&çÏŸúé§SRR´Z-Ü'NœxùòåÐÐP«ÕÚ¿ÿÆO˜0aذa›7o6™LÛ·o/ÁW(Z­600P§ÓmÞ¼¹_¿~4{6l¸yóf`` 5hÕªÕ7®\¹B€‘¿F²víÚ>|Øh4nÛ¶íÅ_T«ÕåUðÆÓÓ³ Þœ:uŠ Þètº U4%>>ž ÞT´IhïÞ½]ºtñòòR(åUðÆËË«|ݘw¥´nÝÚ`0Ð +ÔØPðÆÃÃÃl6W¨‚7?þøã³Ï>ëááa±XþN$ÿöíÛ'Nœxì±ÇŒFc«V­"##9²îï Þ tPùÒ‘#G¨à̓eæ5zì±ÇÖ­[w_¿:vìXýúõëÕ«WXXøã?Ž?ÞÝ¢ÍMnrÓÃL………±±±›7o®T©RÓ¦M+HÎì¿–Ü"ÇMnrÓÃL 6\¶l¥Ê 4¨Â–ä¨àôÙgŸñêœn‘ã&7¹ÉMw§úõëׯ_ß=‡TtPYÒ½qãFY¾ O HKK+/or~~~@@€Â`0\½zµâ¬t~~>¡!ŒFc…˜„à5ÎÍÍÍÈÈ(ËGçååч£N"pr¹\¥RU¨±q€Fzz:Õ\¨Äù@zzzGï‹rrr€j6›+ÂöC8³ì™ùŸ æî"‡Ú”}¶N:B«ÕZXXX^"§råÊÞÞÞ.—Ëh4V¨´¿¿¿OXÉET*•Ô2¤ŒÇI™›B‹ÅR§¨V­ZF.—+•Ê ØÚÕjµ !l6[QQQ…âìMš4¡Vd‘ããããïïïr¹L&SEØ~5jÔððð(/f.¡€€IrÏïk¼¼›Üä&7¹ÉMŸJzÄZVVÖþýûK¯xÜô´jÕŠ2Ê·C­Ãá Ç §§gÅïÐ~W›W§Ó)•ÿÞžÍf# ºÜ÷Ri¼”OÅÁ=—*¹\®„„„ÔÔÔ‡l?Ëåòÿüç?•+WöôôüÇmQ³Ù,) u¬vìØ±‚¿†F£q¹\V«Õét–/>''çÂ… :u’ÉdÙëU’\.×?ü"“ÉŒFcEnô[ªtõêÕÂÂÂGyÄårý³VðO(%%Åår5nÜØét>4/õçDN‡ÃÑ®];Êq~hH§ÓQ½A»Ý^J¥óJ(/‡×pwu“›Üä&7••Ñæž7¹ÉMnrSE9‡ãâÅ‹ÙÙÙ·nÝâÅ+,]½zõæÍ›î%XéöíÛÿˆ}x¿tåʕ۷o—ÁƒœN'h|’››{ñâE»Ý^òâ›7oVdÈþß§7nT„&¿åH·nÝ*%þë"§   }ûö111›7oþðÃ+þ >ÿüó¿E®›þ2͘1ã©§žzøÞë©§žzàmmïJEEEíÛ·_±b>9zôè;ï¼s×þ ãǸ®ëÖ­[³fÍ¿ù@Mš4©W¯^ü¶ÚáããS¹råäääµk×8pË–-5kÖ|õÕW…QQQÞø W¯^.\(***™úî»ïRöåÀ›4iráÂ*ö7zôèT©Reÿþý³fͺ|ùò† 0Húí¼yó7mÚ4bĈU«V=úè£jµúرcBˆvíÚ…††â)ßÿý©S§FŒûòË/:tˆ2LûöíÛªU«+W®PJ­V;gΜ_~ùåܹs&“iÍš5ƒ.ƒIHOO§6½r¹|áÂ…Bˆo¿ýöÔ©SAAA-Z´ðððØ¿¿§§çðáÃi¹i?þø£¢aƃþòË/¯]»öÒK/áàsˆˆhܸqbbâ_|Q6ï"¡ 6\¾|yÖ¬YU«VU(tº…ÞÞÞÓ¦Mûé§ŸRRRòòò¾üòËððð5kÖ¤¦¦ !zöìùøãgggó=Ù­[·?Y˜Þ½{ÓL+B¼üòËmÚ´)ƒ7ݹsg“&MÖ®]kµZCBB®]»Ö¦M›—_~¹R¥Jv»ýĉßÿ= ¬C‡¼æ·ß~Û±cGpß¾}÷ïߟ™™Ù¥K—^½z™ÍfÚBˆÉ“'gee­Y³fÀ€µk×ŽŠŠzòÉ'Ë@7º~ýzll,ý4bĈM›6Q3⻲R¥Jû÷ïß³g¢qãÆ¼ËÉO?ýôóÏ? !š7o^nV_¶Õ«W§¥¥ÅÄÄ 2¤víÚóæÍÛ°aÃÂ~åC IDAT¼yóÖ¯_’=xðàÔÔÔáÇ›L¦˜˜˜%K–>|8&&&<<<&&†·µ(íã4oÞ<Ž7...nذa§OŸ>räÈüùóׯ__cسgϲeË>øà“É4|øðÔÔÔÁƒggg‡„„¬_¿~Þ¼yqqq111ƒáÊ•+111iii………111§Nš3gÎW_}rçÎAƒݼy3&&fìØ± .,¶@%iÑ¢EŸ~úiHHHAAÁ!CRSS‡ RPP¾sçÎcÇŽÅÄÄX,–‹/ÆÄĤ§§<øüùó!!!|ã7’““cbb^}õÕ?üpæÌ™S§NmРAÓ¦Mg̘Á{%ìß¿åÊ• ˆ‰‰9rä|b·ÛGŒ‘ššqëÖ­o¾ùfæÌ™õëׯ^½ºJ¥êСCÙl¤ððð«W¯†„„ìܹsâĉ۷oŸ9sf£FÞzë­1cÆ$''oذj¼ïÙ³çÓO?=sæÌ›o¾éããóøãÏŸ?ÿóÏ?ß¹sgttô!Cèà¬Y³&$$$77—fuèСƒšE–¥¼ùæ›oŒFãW_}5gΜS§NÅÄÄܸqcÈ!¹¹¹!!!kÖ¬Y°`A£FªV­ªÓéÚ¶mûùçŸÏŸ?ÿñÇ÷ññyóÍ7Ïœ9CËýóÏ?ÓžüóåÞ´iÓ¼yóBBB.]º4pàÀ—Ë5räȲñÚ>|8""¢[·ncÆŒñõõmÑ¢ÅÌ™3·oßþí·ßnܸ111‘xT£F¦M›FÑÏ?ÿ|øpHHÈÙ³g‡ rýúõ˜˜˜Ë—/›L¦˜˜˜ãÇ—Á«ùúú†„„„„„üðÃß}÷Ý–-[fÍšõè£þÑ O:5nܸJ•*uîÜ922œð×_?~|µjÕ:tè0gΜ¿ßàüæOŸÞ­[·œœœëׯ'%%9N—˜˜èçç·uëÖaÆùûû[,–””úIÕªUoÞ¼9|øð²9Qׯ_ÏÉÉi×®]“&M®_¿ž——wöìY??¿)S¦”eÏ.>ø (((99Ù`0$&&Ö¬Y³S§Nr¹œºž<óÌ3ܪíÕ«W¯^½ÆŽ›˜˜èt:iVÏŸ?OàfƒÁðõ×_8p  F^XXèííýÞ{ï9rëÖ­žžž.\¨U«Ö¶mÛþ(T¶~ýú… úûû+•Jè—/_ž1cÆíÛ·}|||||222JVÊ©_¿>Õü7›Í:uª[·njjªÁ` ¾«:uR©TçÏŸ¯Y³fåÊ••Je³fÍÊf-Ë™3gŽ;¶jÕª¨¨¨Û·oß¹s§}ûöëÖ­»kHé‘GÙ±cÇsÏ=ççç————––&„p:íÛ·¿yófíÚµív»¿¿¿‡‡GRR’Á`HNN®]»ö{ï½WÆ}-{÷î=xð`…B‘˜˜HŸ8N§Ó¹oß¾äääo¾ùfÚ´iµjÕòõõÕh47NKKËËËëСC£F®]»F½H*W®}zçÎ;väË}éÒ¥N:U«VíìÙ³:uªW¯ÞÅ‹Ë œÐ¾}û \¹r%((¨eË–wîÜ‘ÏÞyç–-[–ÜŸ Ø“7nÞ¼ùÍ›7³²²>üðÃåË—ûûûk4š³gÏ>ñÄK–,?~|›6m"""ÊÀ"„ðòòêÔ©Ó¦M›4Í–-[Ìf³ŸŸßܹs»víúÃ?téÒåìÙ³>>>:uúöÛo7lØÐ²eË;v<ûì³~~~¹¹¹ˆcåääܸqÃËË«R¥J999éééåïXã¤V«yFdaaatt´",,Ìáp¼÷Þ{ÇoÒ¤ /åôù矗jï¦{$•J¥P(Êìq2™ìORni0¼È‡ÅbQ(T¡+??³JŸŒ7®Ì²©Þ~ûíÂÂÂW_}µk×®£G†® Ñhþ(vÆ }ôÑþóŸôôt£ýøã}||¨ƒÜ† üýýÃÂÂ$µårùêÕ«…e¹4÷HÇŽûå—_&L˜°hÑ"®úQ3«’”™™9gΜŒŒ ÞÞÍÏÏZM+ ƒÁ€eÅÞ(û¼ì’¡R¥JÇŽÛ±cÇ´iÓŠŠŠÖ­[w/U*¯îCË}åÊ•‰'*•Ê ¸ B´¦âø™5kV·nÝH±V(;w®U«Ö¥K—^~ùå2«³—šššœœ¼jÕ*F6gΜN:õèÑãý÷ßçL[qûöíÙ³ggeeQEG mÞ¼¹zõêaaaM›6­XVŽ„üüübccCCC}}}³³³?ùä“ÐÐÐØØØŠ c$ôã?Âð*2›ÍŠø#"_j\\ÜÛo¿}ôèQ¥R9pà@úªråʱ±±½{÷~ µÄï—Ö¯_¿lÙ²+V<ýôÓ111ùùùôùš5kxZnNNΗ_~IGEEµoß>66¶aÆw½'5m$Åùï3îý(=š>}:-ÞyçúÐáp|ôÑGü²ƒR7ßäääï¿ÿþµ×^ã§“E­|}}!¼W­ZUîÙEEEÓ§OW«Õï½÷žËåâ/xþüù}ûöÝõW;vì¸|ù²äãGî߿ڴi³fÍ/EEE5nÜ866–:ò¥¦¦N˜0¡E‹ãÆ;v,ÅKÊÀ3qâÄÀÀ@*?xøðáéÓ§¿þúë#FŒØ»wo\\®üòË/,X˜˜¸eË–Q£F-Y²¤äÝÆŒóöÛoûúúÞ¯ô-S‘³páB«Õwîܾ}û¨¥q«V­† ¶xñâ¡C‡Òr9rw‹ŒŒ¤EŸ0aB```­ZµæÌ™³fÍFCJhùêø&LXºt©‡‡ •N÷§Ÿ~Õ¶mÛ¾}û.^¼xذa­Zµ¢åNIIAgè’Ëýþûï?~ÅŠ„;xÈhùòå§OŸîÚµ«^¯ˆˆ8~üxÏž=#""ÒÒÒNœ8QcÈÈÈ8tèÐÉ“'ÃÃÃ'MšT¿~ý‹/öïßÿàÁƒ/¿ür·nÝ0È9sæ´mÛ¶mÛ¶ƒ^°`Á¨Q£.\øÅ_Ê£cÇŽ ˜3gÎK/½”иqã¿ëàáe=;vìxéÒ¥{wÑX,¥Rér¹œN§R©´ÙlÔ¾Þjµ’ílµZ©(YÙN§“êí¨Õjª_û×\(xs_½«­V«L&S©T6› OÑ “““•Je:uúõëwéÒ%uÜ#¡àÍ}µ@>|øž={®\¹B3ÆgF&“Åð»\.þ9f•Ïö}Í! Þü…F¿w]V•JÕ¤IjUK–l ºÞn·óß !ìv;=]¡PðêXv»Ýétâ­±j÷2c÷þ.(xs¿M¬iòЀãããI4†……‘;TA/âp8ìv»L&£™)9ø»ÎªÝn§*Ô÷>6¼¹ß—¢+•JšI¹\n·ÛÕjµËåºë€i`’uáµZÔ»wïÌÌÌ£GbŸc¹år9Ý\÷tÀrÓ,I\ôÿ“¨àÍ™3güüüî½à F£Ñ`¶q è0ô¾ü •0ͽ)Å$þ¯V¼Ñh4÷nòbò–48h¶ÿhÒç%Oè=úŸd#j‰´(逖(hr¹¼ÔŒ„%­\¹òìÙ³#FŒ¸uëÙeC|6øßÿsÀ’Y-Ç™ü£ÁcÀÿsKŸºë>–|(™„?Ÿ±2 ’Ѹ’o!¹@¡P€×üÏÁãËò¥J. ø®¡Ç?ÚŸÑÑÑ—/_2dÈ;wzõê%Y)¾ÜœóòË,ÒƒÁ”dMÃ-YÉóYú£ _f§õ®ûS²Eïq>Øqw‹/þꫯŒFãСC/)U P-ö*Í;—ÇÿfªS§Î»ï¾KNü'-Y²dÓ¦MF£qĈå’W䦊Ln‘#(_¯,Ÿøä“O>”3Iù¿ÿrªV­Zo§ŠF>>>ÿòpÓ}ˆ¹\^ññ‹2™ŒÜ£v»=''§G¼–¢|Gr¿ÄoäççÃíûo#ÄÇ?kÿ„ŒF#BËý€”¡-Ð?‚ƒÝ/»£?¬Vë?n5K¶6ÿÈÑjµ¿E%!DAA•®)_­Va³ÙÊ}$÷KeµÛí—.]*ß¶CåKÔÝ`0üãVðOˆ<œ………ÓKý U¯^]áçç÷@ öS æääüãVS©TJpÕÿE¬mß¾½oß¾n»ÏMnr“›Üô`Ï]kN§³\eÜä&7¹ÉM1y{{wîÜù7ñƒOåryÿþýÿ3²mÛ¶Êd2ò»\.¹\N_U*•Åb¡”8U].—Ãáp¹\t¹\^òññ 騱ãš5kâââàV&»˜Â't+úD&“ÑqB1Úív›Í¦ÓéœN'ýŠPó”.`³Ù´Z­Íf³Z­”@é”(@?W*•*•Šþk³Ùèuèz¥ `ßétÒMè·”AC¢Œ+úƒ†MŸ+ ///«Õš——GyøŠ~Nÿ¥œ‚öÓãÐ&“fLÿu8HR(ô[›Í¦ÑhhZè‡r¹ÜápÐÀ …V«µX,ô·«˜0Û¤gÉd2ÝÊd2Ñ iüv»Þ‚ÆF#Á !hT„4¥T z"^ÇétªT*JS£ÔÁb t+RPP‡‡ÇÍ›7Ífsaa!M2í…BA—áè†Ø{J¥’¦ë«R© ˜>¡×¡W£„ |‹E§)¥” £ÑH`[ÒV§šÞ”–˜^“D÷¤m&„Ðjµ*•ª¨¨ˆæ+N;þ+—Ëicã[Êk¡W¦ÝH;œòÿDqÁ7z.’h¸€Ž ›îOÓW´KM&“R©¤]D¯@?·Ùljµš^‡®ÄZÐÀ( Çž(Š#ÍôÞg‡œ~ô76˜Ýn§Ü :#t7äâÐl( ›ÍF'…žŽ…Dì$ÆÑtét:³ÙŒ¡Ò¨âãã4hP6 Öáp ?ÌXû¯¡íEËIœ×étRø 'VVL´Ÿèü¯q8EEE?ýôÓÙ³goܸ9paÚ ´WˆA&OG‹nEWÒ¦§s…ÓE9YàA4 G1;£¯t:\.·Z­œÑþ£SG™k|0ØëtBÞ¡‹žH§+77—ž 3ÏõÊ+¤é¥ÓB<b²·Å›RÅ9º?ø]`d ’”鬂 !<<<¼½½oß¾]TTD¬f†¦”nE“Oï þKgÕårY,ˆp¤4‚=Ñìq%ƒ³?§Óyûöm•Je0  ‹d ¦ƒ{ÐÔñ9·X,غà¡ô²´=DqP²l G@¡P@HÓÕj5¶m?š1,Ky@µÚè2¼¸Z­†Ãê@{ƒX¥‹ÁÓqÄh]8[·ÙlPÅèCF£T* ݇~ÖLrQ¥RÑ¡ ;Ó[@Ð+`É$‡oDŸØl6ºŒvе‰žžH› keˆ†DV©TV«•†MŸcKÓ•¤Ìa׉âÄUÒPd‰‰a[â¤ßW¦íƒt²¹å -sl2¨ZP$é2J̆ˆ¥%6‘™™™™™Éµº?˜<µZm2™p¢ÀhÓÓ†Àmé8`xÄÈÒã£3Œ›Ó NAO§ŸpN$„pÕ«giÓF»e íKØ4œ @³ãSòtf •IÆÐ·¤,]u b†ž"—ËéEÀeˆys«ÂÀÂa¦$†H/BO¡Pèõú*UªdeeÑLBŸ…‰.ŒãMÜŠsmQœŽw¡7…^B“Ûˆ[x¤®‚±BFb¹qä®ó™t-:‚™ÛÓ`ëØ’M ¢ÚÝn‡˜‘¨/$Þènô7ñM ‡ÃA% ð[tR°-1#ìjºûû®á†6_ntÒ&„؃æO Z~X’uБ@Å‚F%“É<<<ø!çÈiÁJ¯YÈ.ùøZCXrµ f ­>h¹ÅuÜò†–”GXÊ0~9—ç …»n8¢3Fû˜v d±BÚ.ÄþhP Á2½9—á|´NÎtBèWØ:w D÷‡êM:tU™LæÒhL³f)Μ±ôè¡Þ³‡ ]¸HRrAˆ}ûÀ‚ǃ|b4Ä)à„a!„Ðh4ôRÄàø±Ç* Ôæ!©ƒqBLBÇ䲎šç;wîF¬éòÜwJã`¦„JçÎ%š1¸˜À á¨¤Õj5éž4<HHw0 8ÁHlCŠ0 éK…DGùî!ÄäÃÃ¥‘ä,Ð ‰ÏZ,Úcô^´‘h‰!Aa©`™¨à]À§‚¦Ê8Éiò(`óã|aíèðPn"Ó^âÛ_„°#iT´ÇøPá„äÅEq ÀÁ‚…VAãá¥}è¸%q. üqA‹ˆ÷…s…o !„^¯'ò®’–wÏÀ›Âyš[ä”'á$CI¤ÿjµÚ’T.—kµZr£ÑV¦c!;@²!¸)ÆJ¡¨c8TŽ FßvPX¨²$T|"#L¡PЦT«Õ•‡""àöÚµ sæx f³ÙLÓ¦ÙívýþýÄQâŒk¯4Tø”¸‡Wòø÷ØÀ'ƒ¹¢¡B[¤ŸP>gŒŒ•DCåa62qॄ¿Îh4Ò @[§"TÄ4ù°ó f &!“(^ <qî$¤E/,,$n¨Ñhàv£¨¡Ãáðôô´X,2™Ìh4bnU*•———··÷­[·L&0ét:îCƒJÎã"ˆFH¡´{±i5ÀÎÄéàê9\£ØÆÔÁa€ícª¹žx€„$wzCcC$R­VÓúân´-¡dЛâAøŠ¶I>³ÙL3@Ò‹<½$6H\ÁV&{¯ 3Û‰‚¬Ä¤ÐÐÑ>„¦BC2›Í4ópœÂA*Š«¥Áær¹¨."Wþèbès$oÀ(  @‡ÓjµåeèÈÝòÆ>@­£ÿR¦$v­§§g5t:¹à¡íBŽ)ø¸¿›{ðx(•¤?pPyd +b0kï!VyCî#bˆ !M›š ÐÏšEìIÿî»®V­,ÁÁ0àŽGaGH×傜<Î$V¹¯±î‡Aw {b0t —Ä< Íy ¾¿Û‚‹ e%)*9âó$Ñqú9ð‹0eˆ]ÒôÒSˆAo÷'&‹iäf-¥Ùl.**"©yY§N6mÚøúúÛBPL¦žF£AäŒÆjµRxÑ5xãÞE‹ÅBÜœW,åKC» ê?6d¦‘t2pOL2À s"nÁ½jô.\ô6\M V5­j’J˜;WiVŠçgЦF£ÑétxSSù‘ä‡# h( E{žv žf€nk0rrrÀa¸«7—à•Hâ>›û*ãë9¥cî+ª`ð–bíÉ€p8ÙÙÙ'´]$Ê `C`1ÄpiûBhëÁ®ŒÎο$ŒA ÿ—~Ƚóv»Ýh Õ~õ•¸y“ø…\.ׯXá 2¿ð‚Z­¦ÃÉÙwÂjÁ'ˆBáE¸NͽÏ$œóÐ1ç;¸'îC2ǘ{‡ ÕDq-g„HðH*¼0Â` ÀR{•ýž`F€%AEö8;WÆùš"Ac³Ù|ýúõóçÏSÍ Ti,)D¹iŽ˜ÅÌigâõÁ¸¹îEÛ†‡hÿkµZ„ë`ñ ÜEûŸû0q„Ç1±ðUb{ӨǢ hoœT’è#Ç!D’›1Ⱦ¡kèž¡¹¢×Á¶„øw¹\•+W®S§ å’’ø†J¥¢gÀ6F,–ë‹Ø]’mOÖø p¤x')éPu;ÖÊšÀ»±l´SÁ"i]éHAÍ„íµ{:™*•Êl6Ã'VKÁ`:a 6Nb8ëï(—Ëɧ]e2™ _Ãü#æˆa˜´}Õ¹¹¶¼<[£FêK—t: T§NgkÙÒã»ï‡«ç™r•p/"‡ŠÁÉŸ;ªñƒYÃ÷±ÄÃ<ˆÏsæŽG%ÿpL*BJ\œ“mJþ(b…쎴’CDÏVì|¡ri f•ã¾h›‘Öø2 ‰dØ:SÈå ­Ás»¹N«@Æ „di‡‘Ç482Y)ˆŽ£°PãlÖÌÖ«—Á`°X,ÖÚµóßßsäHuVzäÄß6=Ì|:ºôDü„c»pC¬›Û œ¿”ä8Dd–IŽ.¤Z­–ü9ú*?‚¤ÀB5æZØk«Õj0hExÀŸ"F8€½B¿æÎn‹Àzƒ ãN$<ÄÌf3ö8&Ç\pµ]:¦¹"Ž,™yô¢Ÿ ›_âw>%¨5$QJâ×iu;Á“Ä– æN7ö%hIˆôÚ›#5´Z-‡ãpÑÔ2‡µ0=zôð÷÷‡©­×ëá2ÍËËËÈÈàîen_Bwáqba•Àšiži&‘žÁ_Âb± j®òrÿ÷ÒÓ>ÁÊþIÃx·•SÖè>°9ˆ‰@½¤ž}(˜PÐ$YiHFAQYÚ[”È€$1°oÄð¦Ð³Èè{aì~D°¡±z-[V4v¬Q©T§¥™Ÿ{Îköl œrð‡íb×Ò±'4 9D›Èš¡ë%@O0)žÝl‚.&—4p±°Š¸¿…œ!ñB—ón èÆ ¬(D\¡~ò6q<ë–ÏïØÆcݘI“ÉDs¯)ÔyHGxð à Ž!¤Û’¤„„@ €ËodÁìàŽ)ŠÙ (Ü€ˆ®Á'FÛŒ´žc ë¼8WPè]è²à8 ¯»šƧ ÃŽæ8Ü8ÆÃú§ O™‹R§Ó™œœœžžž››‹Ï)3 'û &8GW‡ÍLwæxk:ÜÈæ±IZ_@ïh?ÐãPXîQÀãÀpHûıRÆ-r*ЉÃ#Ÿp©A‰¶X,¤\#H ‹•ï9Út¨¸Â·ÂòÜMDÇU­Vón’à `¾N€ãð[ññð·âN*ÀÁm6›êƒ¬#F˜}Tûå—Š¬,Ó÷y¢8ÆÀŸC·ÒjµÄ)xj:Ï“À Á†à¡ÉÁ¹%“ÒŽWF „”J•JE ³a6§‹ á\žO à\<à˜¤qs{~3h”° §‘ajC G(V™¶‡`5±'‘üO¦F7ï€û"iÁ·žEd$¦fؘ1P“ƒÚ4üÕõCÈq™Í W’ŸŸŸ——×;w I³á¸Qœ §öT4:ŒX/ºŒ< â¹Íf3)È茂ÁpA‚Op£Õ!l.ž!g:]i6›|#ÓD"ª9¾îX¢P0±”:Žà探^hÇ($žÇH3BL‹çBò:Äy¹®³sH ÇG ¡Å;—ôdpPL‘§‚òDN8B%Ù'Ü ,X^0ñanòÍÌ5tFCÔã¦È¸zGR«Õ]»vmܸñ–-[Î;ÇÃ{ÜÁ+)–!)úD5Š8c¯ÉÓ}$Þcž¾ V±Š &”`ð¸™[ÏôÊjµÚh4bWÀ•TrÂjr=À<’CtºyéŠq!g¯[ä”[¶"h IDATjgâ´¢H&€Î u@{´sç/Ц}L¦Űî ²X,d¿#ó”6 ÿY«ÀgKª·áΈåÂD@>eü×z°Zí·n9‹ý‚eí¡N ß Q<Ý <铵kÁÕÀmœvžmƒ„ÀÕìv»ÑhN ~jÝ–§¬ÂÅo(P$a¬ÜYG J4…hiŸD3@ÓÂA‰¼¤÷IÒ„Ó¨xÁÈÃ9ŒË'„I€{äö?m?Tœƒàz1‡ªfSJ¯¯P(ˆ!’ Ë“HçÅË¢n•\Âb‘Ÿ,˜D;9ÀÁiÕGBBBzzú;whÛ#÷Áv’©ãHêûA @õ÷ ¨HZî …&±J±UlBð}8 éŒch ?†ðÕÃVÛÒŔ݉ó¨ÑhàúáC`˜$7÷ƒÂþçþ²ã¡ ‘FR¾-…Ü"GÀ³U‹'lõ¥ F=`Óà8’ʆ0kp aãC­æ™Ì¼ævÃ𘠔 Ø+ŽºÊ›‚ÕYx½8Ì{š;ߥzÝV£ÑPü“޳ˆè`¶¤"8lˆgî OW`¡éÓq¢ç‚kЩ†È'w–>ÀA´\1‡-Kü—gËc‡ðÂE<ŠÃ-žÀ„Ò^°«ù€’[‚•Wëä¹bPøœpÓ›‡ÃÒ ãy.´xäÅAœŒ¥‰¸N Ü‚$oPïžj\€X:|M’ÀªÍf»zõjZZ’oùƒëó”6„ŒQ˜#ØÿüDp˜LRý'!ç&,-ŸIx&xxC,ç„R‰¥¨ÕËE)<™`XVz;Hz?((’2Ü[î9åï^ãUùx"ç ³YG«%„e\m6‡ÃqT£Y¯ÑH´ND€¸·aÁ 1ñšÍà¹ZpG…I˜¥øqè-2®QX(ª\ƒw 솗sæþ Ö“fˆ:žs÷ /cLü‘$ÁiV…6 §<M V_€C y)À|%%¿8f¬«ô!w4q(0wŽîƒ{u¸ùÓ™C‚ÕPdžçŸrÏÏßäRäÛóÅqÐ{°^и¹ˆå•ý»˜—nCÒ/nDìØßß_¡PjK°’—´”¨—#‘7(Èë陉ÓAïb2™h](U€—‡k‘£àJ ÀD™z½Þb±LâyÖÐý‘SÌG^ˆ{ÃjµÂ³Mž[>É<¾ËMÞ’’ (Ì÷å¨WIÔ“;½¹ñ„8“(®+Ïãmd »­œŠ¬:mÁvNçkrù;FcS›Í%ÄJ…╪º!Nç–‚ ¸àâz1"Æ<‚*)OI\€TŽ9á `pëq6„Ò¿8]³rÿÇAüp6âÒȰáaU>‡hš€ä5~%fº-Ç&݈Uîtâtx­00V>ÂÿVX`ʼ#ë…P¼8&ÌM°Hº†*êûÒhiZàÙ©ØK\p"8 Ÿ*Ç;aÛÐ:Rb q^¬¯`÷¸ŽÏ¡Œ¤5ÓÎÁÌð„A1’@ïà¦ÛX¯×?óÌ3Õ«Wÿúë¯oܸÁ ¹’¼![™r<ÁZ/xÃU(0S^¦BÐ)U¡uI±(»ÝNaÁïix$BH?ãþ(”ÃÒR’ÃmDÌ3)y¤ªT*OOÏüü|8®)bÊÛðU൯°!én4` „+ž—”Æ’AXÒWT) •yðŒç6¸ENy"¤%ž IšˆÅåjl2Íq:zz^P*ívûëË6£ñ½Þiµò‚ÜÏc–[²P-¹aKÙ9Ð(Á‹±çJº€$P`¸ó„tB…|ñûj¸¼ìÏ¡Œ jPM)uw nƒ‹Q„+Pµ¤J’{ˆêŸ`‘\AÆr 03Q×ø0y„™äâÀb! Fþw”ŸB[ä¨ó”½‚b+ŠËÄ!=–”ÇùqÎù~›æeo(lΫÁФgir®MÌ]£ÑØçKJžÈ±¼’}EK #˜ÏªÅb9wî\ZZZNNfpa „€TˆîI&)æh(À{½Àë…âi¼wð_ð?W%‘ÕDxIAhÚuˆ«kµZÊy gŠ$ ?ïP.1 ÔWåÖ<=E«ÕbÆ$uCpÀ¡ ²&ÜõÇs§$¼Kü¾ø¹ËzV ¤~¨xLXáçrÕ‘ÉFkµµÚª~~F£ñãÂB»ÓÙ·8éDRï Æ2aBB”Ìþƒ{_É{|a/‚ïÐ.D 7êቿÏÙD©„Ïã¤ðB¸ÇŒw÷áJG‚Rn ÒZ¹ ŽßåSXZ¨Ê[Âàs šÀXa[`žyÆ»º.±.ðBp}™6+ðdCîE‘,¯#À±´ÊGˆÕ!â[°Þ`mp¤,ÝœHàSÜk¯Ä9þåE h3VšãµxD¿&fÉjµž;wŒÉöðÛÀšDЈ|P'ã|¢”ºÃ!I?Á¡€ÙÊu ¹\®ÓéÈæ 9’Ä(¤ù‡>¼Gƒ¯¯¯¿¿¿‡‡GAAüÕN§377V 1\LDqÏ1ƒÁ@–«¤-D#|D4’:uê4oÞüÔ©S©©©PªxÊÇÁ}Ê_“ìKoooïqp¬Ô`å¹Â7ðO¸á™Î”<À›¸ÃS†ùYæi³\°}I” ^2L@’›á9å&uÁ£ÐPƒ‚‚úöíÛ©S§F¥§§çååÉ„+äÁ'Òëõ5jÔËå7oÞ$ ×…½½½kÕª•——wýúuJo†^Cþ8Çy4eº!Šs=”Çóù‘ãnúnô3ö1Й’Êi“H2àÐiFü>‡_Ræ`tI5OÎLyáE¨¥qâDfff“7>((èá1Èl楨h-³²²ŠŠŠxEznžß¹s‡äµîg‚E\’{ÒYøY,”»³àЀÖÌ}2ˆèò†ž’:ŒÜuÀï ã†×ÅSãžt¤ÈààÑèxÓ@xê?΢Ðm¡ðh¡ÆÜæãÞFùûûggg£4'÷ò¡@'¶¤#–*9¯# Ãq‡j¼·4KЋðúͨ‚#Jt(‡‘!éðo9ˆ‹~ XÚˆað¸^°žÍ¼À>¯†ý@U޼¼¼|||ÈÈ W­¥7ÒÅØwÖétµjÕÒëõ&“IbÚbÆ4V«5Ä»y¾·›ÍfsIÛˆÏ0½Knnnnn.O¢`./ÕÌ ^ð ÷9ÔCœp0,psQTﲄ·N§£™Ç±§R H¡ç5Œi³¡E—’h? ƒôvf³™d[¤nðž4F@g B¶¤”'48N“È-…BáëëëççÇ•¨(­`=“È›JSa¶Ùòzö´)š;rrr´Z­§§gÕªU-KQQ<~èõþä“O>ñÄÇOMM•„Ê I pޤÛ,?M ÖQEâ ¬ê%ïÆTÒŸÌAwPzøÞ’ˆOB¼’4ÿœ}\ÂìãЮŸq7Ly,ÜM§Üºór*D,GºžÀ“ T*[xxØív:?„¬çNs:Ã9À!dÈVáõ:¹jÆ¡hhäGŽrî%@Â|,eƒCÁ) `Ô‹ß/0À¹ò8×(yÒ‰rÛH6žA"¬&‘¤‡;“åÄ;ªgA7Ž"§ ç&¤òD  ¸§¥Ì€Ç€ƸëþI^’–€—ô§ÿâEˆC!°-Ú€ÂÀ+ord<?\j°ƒH3›ÍäŽãi@Õ K‰«•ý+ rj<ýÈÇǧJ•*TJ•T4RŸyhÇ××·J•*z½Þétfeeeuëf«ZU˜ÍY={Vþá§Ói0´Zm@@À­[·¨¹„„Åb9yòdQQѹsç233aœ•¬÷ƒ@#‡aÇ;PÊÅw×íx-Tû‡âÛB°þ~ÈôD†W¡xà Z^ ÿ…B ¥d òí^òÝÂ-Z8!h ‚4¥¿ ‰*º¸ENùˆp4^šˆÎ›üˆrø,És;{—$*J mñBë@¾òÌ<‚[ý<Û‹ûjx56Qœ*I8'•‡«B<çœ.à6¼ "(ÜC%AEs· ¯k‹\‘’nðGC•ƒ‰LIâ´L¨-XOØ—ðÿöÃC%˜¤ò¤*p|0o .Ï*üÔ Ç)úÁ­p¸æ!n¹kx*ßÂr@A¦S];LRñ%ÜœâÛ-X!AüüüÈÊ$-Ц¦ÅËË«víÚF£1  ¨¨(???«W/™‡G½M›,ËÍÞ½ ^~Y¹y3G«Õúúúò tç„„„äää‚‚Ä¥¸Èáú>‚ÿØHšÁs\$¥˜à£æHÐZ'Ë£YôJTÍwÜ:áÀ6hBî퇋|¼&Ú4ÐAà©r¼€…¤v”E¬¬¯¯¯··w^^^yõ/pwýï©æÂ{ÈÛÛ; ÀÛÛ›­:è¼Ð'J}êƒìNžYÂA&’@(W¨Q÷E’†Š%Uî§â;8V¹H°Ìv˜SÿÏÞ»ÇI~–eÞOUWWWuOÏL&“0!ƒJ‚¨/A@P‘]+âŠ,"¬DÅed1о GQ\Ž" È"Èk|QAvW‘3rV YÃ)‡!sžLÏôtwuuWWÕûÇ•þæÛOåï·ý£û|&}¨úÕï÷<Ï}ß×}Ý×e“M|EQó´‘}Ú+%4î*ádœ gWTæÂº",›cí¯Îõrþr ¹tð>LY}L>ܧü‚€]äo+QÞ|‡ú’ˆè„€PêNŸ©78N“Z[–"æÞúÝ‹Œ» g¹°°|!ù~‘Õ˜5üAl-…i˜´¶OÖÖ¤l¨í ˆ.d‹‘*¦™MÆØº†¶ùŽÛþ•!XÙªÛû *‰ ]I0»n‰FºSü(”§Š~]ÙK{Š"{Þy.¡‚!DÇ!ËKW˜!Ž&æ#ð¦ü!_ r*JȽë¢A}ýX쇌ÕÐ_Áq¬NO &jÙ„®U2}ë~AD €|„ÙÙY¸iõ‘õ?åÖ[·°Ðêvg?ò‘ÎË^Ö(ågúýÿýØÇ¶KyÆ[Þ²¶±1ºÃዾýÛGŸøÄÙŸú©•Ç?~Ï'>‘«ŸŸÚ& r …Œµf‘ð¤ªþ?ë¶NfèJz&ù‡×|NwlÓIßÈ£šdE E]Èi0a£eÙ Fž‡Hàñô›UKŠü/ |R<ô3?sÇç?ÓÊʺóÎÖh´þã?>/üô§ÇSSý~¿Ûí†Ã’‡’ëÏT2Å̰?L 6ôÇÎ Çö4'¾çÛ(6gåV°ðàÙÇP'=]/TÛ½Û×0²¹æ yæºÍ®õC@bJ´l¿V|T’fr $$ÜiÞ 9ÛÙÈq¯Ø§vÙªFð n½z'9vQâzÜMQ“h­ÂbÔÞ§¹‡L+Ï솒+?•"¥5Ød°r¨ôr°#@‡…‡ ¢H*çék$~]Zø‡®µÑ¡â‰Ódîœ#¦¹û™("…Oðf{›ãs)ˆbJ:+¥ê]·â’KÖžö´F)Sï~÷øÌ7ð"vå.<€)S0¯«´õà50X$;–ªÓé˜oBù¸XOv:ÐÁ+üÇݦCàžØê˜¢qÕ £$æewìÙ³çâ‹/Þwô襗]vñ‹_\øÀÁ/üBëƒ?ô¡Í›oþÑo}ëƒßó=—¯¯?ì}ï[m6O=á §úý Þõ®•™™¨D§?4??úôé*[ò|þ=Î Y‰ÀÌA¦Á·Tá6ë¬DZ}—ÌŽÁBÂS/e«"jå SÈ„˜”rdÖµ¯¿ms¹LeÏ:G¬ØÛe«-ÐNÈÙ6`¬$yËÁm9|;ÎÜÜÜÂÂBefem1ÆGŒÛ&ɪ$„=Ðc”ƒÊÚ¬•T` :þU°žAyP)§Ãfa’ýYŸ”uìj2 O`;UÐãî,5ÃÇ´{]¶²U Ñîp)›lyPD ™íeÓhŽZpïÞ½Ngaa!•™³$ž[4X§¦úÿ÷ÿ=óö·§¦ú/~ñܯÿ:XõX @Ä9úöArh­*­ê¶[9›(Kß{4-//¯¬¬xâç V¨ãVpÍXö¥ã277×ëõÐçŽèÀÞ½{ï{ßû^tË-ûßüæ?üÃÆùóÓ¯yÍú³ž5|æ3[§OßçMoºúå/æ[ÞrùüüôÚÚñ}û.þË¿,› Á®]»ò\R-e÷E¥Â¥mÕÎ$¸E:Ò—ýGL`)Rs/r ñý$Já8e‚rBÖú›î¨œ€ZªÃ+œ-àŠöЂ<¸S$GÇ$yÖvBΖBÇ+€…n– *²ðÈ»z Ïçl¶+à¯&|LÉ’­X.“Æ‘ˆ¢»©bJNÿü ýÞ|ßtþ*¹|•6N2râ‹y:©&.•igX¡†°7À•ƒ7†Ã}WõMWÃáØ "0;2 ÅiË%± ·sssxÄ#æææ>ûÙÏBÏ¥e,q4Í8°øš×ÌýöoOŸ=; ÚoxÃÒŸüIçê«›++DýÜpæ¢8 9ʦèɼXÓ3æ2I½ó*µûƒ«óxC=7 ”kàFAN›™™ÉÛe1ýâ‹/¾ä’K ;ìÚµknnî‚ .¸Ï}îómßöm]wÝô_ÿõÊÃ6õÑ6o¼qpÅëÓ_ܦϟÿ¯þ¯K/½ü=ïù…ÇýøG5`jjjyy9^æ`“–ÅzÜ¥?Ä´‘<@õ@Iz‘‚Gö¬«¼‚å•ÞRÎn€5¶‰ÝTÁ96™FBC$´ÆPöžsÃ0”G"…íº§¦˜HãÎ×›ó‚vWVuf-xñmœÝ 9ÅÉ<–[9§@N W;a4îaÂO^ð[ßúV»Ýîõz\€¥Éî>µ<÷+¿2ûªW5NŸžîvÛívïÈ‘é׿~ð›¿Ùý³?koûÇ_õª=÷¾÷p8<þüñãÇ1Uët:\pA¿ßï÷û‰vˆòQ²RÎc¼G*> MDž,?hå!ÊnS„²*¯O#n‰—ÚU=‘),Þ¨*­òË[ó0ƒ»¿øÂÁ1ÜRŧ¼”éï°~vBζ}^¯Žl#?˜äÔÏÞbÃV3žF„¨Žàj*ÅÎÓÌÐÍPýÉ ,òhæÛÝ`$Õâ v[+ï’dÜH´Í+ì[Z}.ümÕ\¶z蚯¶IΞoÒ‡·A˜§Y­+ЈJ¢P°ãQ.ছnŠzM‘}Ù”û%EìÛW–—GËË­Møqcccª×ôzý]»:GšŸ’²TÄe1p.3SIÉ8pàÀ›o¾ùìÙ³ÝV«•:JKE‡K\¡Èö|I‘$~±ÜàáxJ¡‰ô²©—¨Ön·÷íÛwùå—ßï~÷{ä©S—>ýé­÷¼g¼oßèßÿûö?ýSÿáoÝ|ó`×®æ½ïý¯þðî}lã‚ >ýéOß°k×ÚÚÚÊÊÊòòr«ÕZYYév»ËËËÇ?wîNnù\û÷OŸ6a95{I°õœê¡,•g½KÂR͈ÌòûÜ:rAöïËJs(• ÒïI+ÓtïŽ T uX ÌèCÓY„ÿiÒ·80üéŸn}ðƒ³×]׬ä¬ùAç!YºZüÊø!Í0V|eÈVñ8™;Áp¸©2€±uLî<Ô(`åŽ+|:N‘2¦Gªh¢ ¶´î:°Ž}ík×^ð‚ÑÔÔô‹_¼qò$ñ1.f˜rôTý$"®Ir  Âg‘ÙZ~!i¾i™^ê÷ûN'zhi“0·ˆFjêžJh²þúúúÜÜœ%-ò¼––––——oššºìï\}ÿû[»v5ùÈÑhtúô饥¥µ~c8üÑ/9§æÂ¾}¬XzŠ< Œ-Dë<†KegÇ`“—¯ÓÜåðúÒÞÏú?wîÜÒÒRÞ4+*]Üd,biø{/SD:ï± ¼ý–ˆ”+©çxú ÉeBòÙS$ØPà"-75©4¿r¶í˹ˆSu=>³K«žª©XäMHcÈÃL—ÞƒÁàöÛo?vìX¯×Ë)€!ÚÉàf–3á¨JöÔívõ¨G}Ï÷|Ï>ðë®»ÎxޱD–»;´E¾ñæÐ&GMˆ'‚J£A穎PuOÑ‹`ÈÆæ%œ¹àQ¶ª«2> ©Å: ÔæðF&Ψ)÷$Ÿ¥uèPùÀ½ÞøðaÞ=gð#NÕUÙü4òFé{3>bŸ$#ŸG…!b8ÔÜ'Ã{´†#ܵ”„ ’XdU­;ÎÇ/½ôkW]uÿûßÿ~÷»ßƒô ~¿ÿ|àÆo\XX 1ÀM‚ÕÜ”$‡j<55Õëõâ€`M¼²i#DpâÜäþŠèÕ™ [êV_‘7=6+š´ÂOy"0â íVWEJEdfÊQWü¬¦µìiâ*™Œª™j-Ͼr¶ X«õ½DxäUj 5³êj’±šÓe©.–)œýØ31§ªoe뼤§U¼7¨¨Ö××9Òl6x£²U{䊭’"‰ó'ôb±}‹»¬î:8[÷‰lé0*'éEÒR.>¨6Üû)šTe¢µ ½Õ½ß"ã#õ¤‡h€úðkþë¿6ƒF«­0RêQÌôi·­Òº¶l~E0cY¿"½o¼ns1ËËËà?h][)Õ3"y"9î±ÚäNV™Áùóço¹å–~¿ï{ß{iiéöÛo?zô¨õ;€ªèº£É2f~¨2°éœs£¸Þ‰Þ)¦_VÃ@ÜdW¼ béÎZÏ©MÏ–ºšg¥!rALªŒDókù8µâÁñS høyHÙ8!dE»Ï턜mnç°­¢ÈJÊ` ôJ½8|‰%–ªÅçý€('pn9òp>' Ñሠi M# KÃd‹Qã¾ð…k¯½6ªÀ°¹bhèÜ¿Ú-î ÐEO)333“±$zÙ óóó¼óÎ;Ï;guí|(,Ë eÏ4›å° ׫ÙǃAcccºÝ>Óh¬É:ŒXÎõP$YÕåѼE)°i8Ю·mMMøÊ7»Ý®™ UÁ4© G—˜èeÀ§O‘ÀS„`ôôW‚ÌÐS1[/eAšaYŒèÄÒG ’à úŠ]ÍRc”/sy./p‘b'Sd€38s¡Ær÷% Lð›[s®™þáµÁ`T¤êÊßWZ %X#w`ee%{£š™ÏPGVÿ•Ãáÿ»¼ü¥f³ÑhüØ`ô³­ÖùfóàòòÛ§§¯‘Jw#'ˆ%ÙËVmJ™²µr|1Þé¤ýiòé’jX¬× IÙjzmTj % ®9¼#`~zÉ8}JzÔÉ"ÓYIM\|C JRïYÔ²U4¥"•ñå¸çÙ¥!D›5ì¹ÎÁ`p‚ejòk?»x'g²§Ñh,//§ø›LÈr4GþÀ¬²U ÖÌ5Ã͹\Á­œãvÀ2|Êã†åO!Î’ód·'¬#>TÑ*ŽÀ¤IR‘î™nöTÌ¿I^)À-€Íï¤Û·3 ºý_fÄÛŽºÙl"јç·oß¾ùùù'N„DË:NP‚ê6Ù' “*[³é+ô8eœ*zì½™j5ÓÎÅø¢~é‹}h*gÕÚét: *¬fVðÚÚZ&û Pxr“þSþ=7F£ÏLMý]«õÐñøË­Öh<FÝFãt«µ±uÐSÀ:˜FAMéæô± ÈØ*¨`PÔa ÿ!ä/“6æî1¿±±‘£pyyÙñÏ£žä0F »7KÈŠv–æ+[Ew´âaA­ôl™N<ëÖ=OÙÌZNU:=úýþÜÜ\µ68Ç×ÖÖ–––víÚå“íZ'ë'×™4knn®ÕjÅVä9æ`NWX7[ ~­IÈÿzvÍÞ"Tùž}¡eu“ݤ,? DU½,7‘ üÊçœ,2* ï )ªZU;dž^;!çßDÔ©úÿÔ¡ä;£Ñ¨×ëq*ùÈ:«´Ç9Ñ<ÞA¦ožb§Ø‹Ð# ÐŒ!psÐT8$ #^l¨á@:Îîó×5LŠ@Ç4ƒâ4;;»¼¼li¸§`kemí1ÃámÍæÛ¦§§ÛíÁ`ð×öûÿϦãHE¯àô¶Ê€³o»÷Ó¹å†WgL ª"Ô¦‹,–³ósŸçç篸âŠóçÏß~ûíE*±äÖ&7²á#’hQµ0à¾Ï»q]=zFåÝt¡ÝÅã3¤Æ¢JQhµ=cAÛìv»áAÐnìv»i@6›Í^¯— &Œ4Ê’h㛋Ï{-..®¬¬ cz×òØlAåÖåí*1@³ÑÆT ·¹!FA=ád#«"ujîÿÅ‘š[”Æ# ¿a®J{\*™™}­Üö·.Mû"ÇuIMÃëõz•P.¤¬»|ÙRÆSS{.¼ð'~â'ýèG_{íµo{ÛÛV¾õ­9QÚ€Ú‘6C¬š.¬p*|ª pë}˜)^¶ŠyóFµ‹³/“FUà!/®Qé´¥£cT bR>,ý¤d ¹9‰F”§E¶x„^¥¬ž8´=F ™²„4ÄéI_Ξ=›Nê¼xÆ^¯wèСÅÅÅ\¡Zнò²ˆ–––Vé4@UO8É}``9㽕b ÂÏ®Œ= gŒÏ/TcŸà©IïœfUúè–€¶`QNÓDáãQ…@V"¡¬zÃiµrsª4…BŸ=è†b‘‰Ÿ‰ã;$éíg¬6! ܣзå¥þ«sªHÁÌÝlkN°Ü‘  ŸJÉÂÒ½F«éš F›²åo&ïe4‰wo·±\j·ÛµÀ­±õÊægîµµ5P;ð ‚ñâââ¡C‡Ž=jlÿþý­VëŽ;î`’¯Uª9“:¤|OZ ó¸’ÞáDv (¬²Ð™14Ï ’¤ÓW'"qÍ_u»ÝôÆøŒ?ÏUi³Š²U­Îê¬=O4[oßíq;™Z–¸jqS” ƒË.», Ì6 ¼•••3gÎ$&À›­šmóóó§OŸiÛ=|9éÖ$ùQæÝ!Ëx„ÖÆKæ 3þâþœ•åXQ‰peS,*oˆ®G#[$„Tæv !à0q$00^‰@£pè‰eï®R|ΫªÕ´r¶'ä(U“›þ‚P‰¼:q ’¨Ú3Î;2þmŸËmåb¨Ð|0w¦F\ËWC!•ç´gͪÑ9Z8&yHŠ>=x™Í Užx¥EI÷‰©©K‡Ã‹î¼óïÿþïÿùŸÿùäÉ“gΜyÕÆÆ[Ûí°c™3åØ5ÐÁ­.›S±«««AÕ¹ŸLeZ7¾ÈÓñ,§XÎÓjªRv´.R°…Åò€|«Ò‘¢)àÊGcR¥ !þŽBlŒ9U]½Á¶Êñ®(@M¥@JMÓï÷wïÞk.œiê¤2ã ’e€MîܹÅÅEz0¨šóŒ*g=Üe4`p2T65>Ÿ‘OŠÒ̯(*q€Ø™zËnrdî§‚ íʃæô7ϳHLñ§¢ç²Õ»hìˆÅÒÔŽÙ¶üØ 9Ûö•£¼ÕjE‘‰ã¾r·å‰BF¤öçØÅž”6¿<ÙK0Ñ™ååî…Õš³^ÓçXÃÛXÅåU_S“1‹cjÁ‡¼#‰·S¥6Æ‘3-¿ì[N²U-d}}½4§Z­µfóÏúýgÞqÇʱc?[[›ÿ¹ÙŽFÇŽ?1Êï©r¾ ‡ÑPË€9õfÇN†8jÏ$ êpŽ^¯†ïl»—W,Â89c1YL*ÔÚ4£9FHÌL#fPG¦EÅòby(°ÆÍäÌ¥»îû°¾¾~òäÉõõõùùy,vrúý>Öp4–ÈWfff²"gþ½Kðl„ËX<ÌÃeáñç–ƒOjâBÐì—ʤÊÁº’7nå³N'ô<Ðïü#¥)×™šÏ ®© BÏE€Çy Å4*´ìŽŠëÏíJb±r¶¿Äqã´ÂÓ¢TŠ÷>¿ÌWæušÍæìì,йXÕèeÑ$sÑì!µn:eSl _<^pNœ'0Óª±S;Ó›ex\ݚϰEIiÙü_°¦aÀ±RÊ· ‡oµnš™ùâÒRvØ+;CƯ¯ÿk»Ù@â¢Õ¸I™íg½gZ¸…ŠFùü|íà[ál“ÞÞ”k¦EX (ÁŠ)9Çw™·€¼î©[ˆïUA1)yš°Ø~#µÉ=g½9ðc¥O–qê0'[pÍݲ^[[[XXX^^Þ½{wZ;Y´»víš™™YYY!õÎ[ÌÌÌDøgyyùܹsÁZQÐ1™±p VvkqO T€©êR„={ÖˆÎ2ó¿ÙìAx•6xÍð\’ çT‡ÖQ´Ø )BkDJÓ -²gÔ„ÒÍs†^ù¯¹¯†F·qt'älùJb¼ÉFF¬l ùÚplU^:Û÷ØóH‚–<ú¯Ç ?±ÂÈéŒØßç;¸%š;ëôÖì/å²ÕƒÀ#ÖùìÈ»yÞˆX•3ÔÔpÚéÖã§§†Ã´Z÷ÞØ—ò’éé»>æx|y£qxfæKÓÓS›„T³RÓ¤š4P@—LÉ&›X­Žcùβv½ËY À˜´”òÂw²ÈÌ‚%dæºc‰¤·<Kªᩚ|UÐ%m¿»C¦i>cJ7Kó| Ãú‚]”XèzJbEóó1É››‹ˆ€“§”\IÃCþ|N|Ó«òXÍO³ò,çrʯ"Ç´c6R³•·&tš¬„ŠæJ8»ôD¼­Ì)¥¸L”5©Ä ÐÌc9Oª¹\#Ú˜äv’5hœ H*<¶Ìcmû¿ ·Pxg§.áä*2tÁ° Â»-`uzêh,•|tæûUITäo]E/ºð ¨~<‡‘_C"%ÈІ¹LZ¸·B½69~Òž1” uœššZ(å»]ôðPollL«üòpFÊ)÷*Ãl$ÚÈ:iàœªi @¹0Oû—­†`f%Øå“FQ¸ÈRgdµb¹×èú5Ï‚uKQ÷Ø‚iTÎÒ"è%—œ…D MϪ=鍿çv ®È Ï5—­¾×$‚Œ“kCZ·Ö²ûŽçamùÁZâ\%ÇB4‹×Y__?zôèÜÜœ¹ÚÛûµr¶0ë©ʦm;)3·Ø'æÊ£¹?é.P'Ùˆw§o=´°µJ›$/‚NŒk /žLì{vŠE° ç+3F'e(sè£Ø8b•-ù0<“!sòaÃ@sþåiâ”2æ›±q*ò(˜éLùT|KæO€›"NtLj»ÁªóTJ^01{8þðµ§>µýªWÏóÍáÖ¥a–¤d EÂNpù|ˆ“a˜$’EKn„H¹O ŠD÷|F¼Í‹c -¥T&覰©ÉrÁ–jdŒ¡’yÜ 9ÿ9°r%Ëx§JêãU9šºÍR@Wœ5áÆ/|Ág³>,VïV°=Ä\…Mj@Y׌½Ëæ8¡·=í%÷öéXò‚ôH¸¥yd*»~­¬7 w3mKªŠqZÑ(§î²=ü‘üÈtÿê¯Ö~ù—§ÿüϧϜad¸È_ “ÐJkÊu|¤PÑf¯U ßû÷ï____XXÀ–‚Æ›ÇàÜ¡1(giQ{.XGÑ¡%%¾}äLý7!åã°¶ýŒ5jê — ¢UÀd/OŽn¤»¦ö“ý1õR4ãi73场óLÙ’ØØ@î,[5£Hé^‚éyíH—@öêh³‹8V8ɋݭáz,ÅíÃÚÁo4À†pq4fh¯FO±X–Øê‡}\/º×îƒ]Ôp8.²t4ªFË¡Odz4’ÕôH ¸ Af¿úÛ Ÿ•×–©¤ºvc²Èž»Ù³œH@•ãVµ‚ÍЀz€õˆè<ÈÁ^.Ôì`ÆŠÅÑÇÎLÎáp8xÜãÊ÷~oû÷¿5Ou:«Ï}nó÷¿!ɪ¢"3Ö uaAd§<¤¢àè÷ûN'²¶ü4¹…Ý ˆ.@š0nì€UñìÁǼ€áˆº+Éaâ‹LNPéšï„œí™Ë±¤‡™Þi¤‡= “@nö/sÚÂ’ÄÕÍt,¤q*Õñ"}Ÿ¡i¬”óvÔžä7ç@¤?Äè²qE1t úùЄrXLR+Iyz?e«f>mdN P‚œÚÄf ¾ª×j⯹O0ˆ¼QcIYytf²„ƃñt3wá¶V™5לY©`\ 0áAø±°JÞ%Ã’öFгåGMª&xf,Ϭ†ÇŒ¶­`FÍ¢4ÏóÅ&[›"ŠÔèedQ­¬¬˜OlYL"ºg•h¡¨¬”AÓ®òç½ë¦=êQ£ïû¾]þç%¸ëu×mœ9³ú†7Ì=÷¹$I+….޲N¢HÙªìP±Ÿ'{é´L]‘TÔ¦±qˆœ)R±#o5óÍc}•úgþ r‡GY‰²^KèWÒ“Ï÷“¦LRÍhpªQ¸¼®N “hÐ2H[µýóq¸„œð | ȵÁWE-É;òˆ©íª1Û={ö<þñ¿ä’K>þñßxãöJ·/@tšÉ6Ò†t$`õgöitz¸ÿêOþd÷Õ¯n,.^°oßx<^\\lß|óð}ï¼üå3¯~µ›ö³³³øåØû®²Ï¿S“™}ËÑó–¨)÷¤Rȸ› V+¿*’r— îA¿d—ñ¦|õû}?ým€”vâç],iã‡#†®Íɪ§âD\XÙ:mçùpÏo]<ØÁŠdÚ r«LMÀG`‰ã@Gö>ä–ø<šÍ um’FU¶¾Ðj³þŠ'ÛÝ`7¹¹Õju»]*³o¹árbWçò rR|xÿcçAt.Àã¥Ü@N;§È³h^jphÍ üÚDœ‡Xuõh2ç\3]AâMÅ‹³‹sZß•f(užW…Ÿ&s3±ø$º YëVi*E–7=‹0`‘ç+­Lc4ÏßL¼¡Ä ß/Ï7[/_E•ÚæxŽÎ2Õ='ú¢¤IRì1L4ÀÄ(pœSžá¥X17ºR€õ|­rëþE  ‚øAêLßG©Òm2lk€®ò`ff“å³’$lyyùcûØôôôùóçáÔe¹›R™p^[[—&ZX̺×ÝÏúúë›33«ÏzÖø5¯)½ÞúþèÆw~çìë^WI°˜«¢Ó6zè3YðÛa˜Õ»»Ë‹½:l#?¸JEÉ:î¾’%éC¤5ÓI1ø³i`æCGLp¦§yãÆ/ª6&³š³KIAj8‚s û[/_FæØŠxbx¥eSw¿#g±Íè”Ë&¿‹lº©ÏTJÞ"·R Aº*=dúiŽB‹ðƒL&¼YzÇ2ÌÐCí¦Jʹ¾¾ÞëõœW"rg!3–º¡Ô@D„â5¯Éß"™Õ’?¤öu*šÏb‰3d„Üö¤c”»Aj·ÛP?ÌdB¾"}¹“Û˜«Þ|BÂ*]ýœ•ˆâ°˜Yä.áj!ÝÁ÷ù_‘†Ýž‰5)¹Ý`)i³±qHãEÍ›on¿âƒ_ù•î+_9˦¹?¯Õ©„³©Ù2ÜU@EòËI9àJµ“€m3òÎìúìâ œ -&Ë´Vž¤B™s‘ÄIÂÐÒNÈÙÎ/è­æƒQ¡Ó<·}:s!tzèâ’†[wÙ²¡•4K% "Q)”°uÍŽƒjl¨‡\ÍRX³™™PkšAÓtïòœiKìºHKsþV•¾­†B<÷W¶*ÕÓ5vgYI'k•šÈ$4d»'R”MCž uJà ôz½n·kC¼Ê)øjº/”˜Õ¹ìq%hdU³+™ý"§‰ÕÕU®yjjjí?ü‡æ‡?l¾¸uæ.zÜÝ-1÷{ÂŽ)[ 1+e[“ú˜ìášÑ˜ ‘É*E¼Ãav¸¼*"¯ƒw¥>åµj=kÁm9Ò~ÉKF›‚ Šü×@%ûÅ4wËʦ¦»æ†%P‹X?"F&nU*ˆztÉ›Ç`ËVIFî°-ïòdcT¬;!g€µ ßg¥Úcʨk±R^2m†b%‡l‘S¨K5V6-}ÖT‹Øô\7ƒ,æÓÍ‹à4ä7ôŠ*:$Ûó.¶O{´-MA÷M+—K|òP•D Nh‡¶V3ï˂Е¢àù‡‡vA³m‘ŽÚz.ÉsÌòR¶ƒÌ\__ÇKÂ6’E¢;UÎ67r"ÅáIúÀ)Àh> ¬¯gh•<"ª*ÆÇ@p¬ÉïXÊ*œ äøUÒG³¯uª ª´åéo#ÿº……«66úÆþñøÞÃa)e¥Ñ¸­ÕÇ—ŽF¸øâ¢ipW6EZ¹U«)§ñ$°lªçæ›ëññ´hcÎÖŒp¢$– ¶´3¹mNž`‘@唤œìÝnûÆ9«ZOñ©(¸9Yûöí»âŠ+Î;wøðá•••\j¯×÷‚áV{iWaÏ$7Ÿ»TffVöggÎ̼ÿýãñ¸ýŽw¬?ïyå§~jýoÿvzs8 „¹RdVÆsÂ[Ñ¢r·+gzœæ‹#Ugk›r<÷®Ï:ì/­"‹U˜iŠÿÕ.vC«² ¢-I'B«LÏcdbïdÿ:0 6 ¹Z•ž¯Û|pžI­wÄ*»#*æDtKK@@'€Y21é#2†Û{Øî„œ»CŽgž%•©‡˜D³Y:ûœ­â¢>û•à‡µ™á˜Óq6ãp(rpÂ/™}W˜={ö40Ó¬7Ú(åW÷ìyÐ`p Ñ¸¬”Ñh´\Ê­SSŸj6ß¾´DÖl±QËdI{3_(êvwüÁÓãìXâó³dÒ7Núœ¤ÏŠAF)áVc¡-,›ÂYôÆ@<‡ïYQKsæسgÏã÷¸'>ñ‰‡zßûÞwà 7äz*7ÒF_óq Ì±öf¹Œå§=mjc£õW•ÎÊêêê̛߼þßþ[yò“÷w®NŠ ™ŠÜ*{Ì ÞôëXßõ¦rA6P–Ä•EËZ­à⯯¯ÏÎÎzgYs:‘Œ68 c¦z²(=)RQ§7iÖ2Ð&¬ó_Ty*dÞ‚ îéšõW W1ælÒy™Ðƒ vúK ›1ý6N§ÄKZA™IªÕ³ýðàµÓ³iÁ‘|„yD ÿ õ:™$VÍöÊJÙ¢^^L€ÑJ0(_¶ºõ¸—®lœÃõ„K6›kk­Rž»ºúßöíûÊÜÜÆÆÆñø¥gÎ,µÛˆèØŒ€z‹ž§6™` ---ÙÔ„ò 7¶|„kQB£—߯öv ?ŠEtØ<ÊcAhÓ³³³öA ä„SÕ†(î3UŠ>(]xá…øÃð€ìÛ·ïÚk¯ýÆ7¾a“j¯¤VCu 0Räµl_†ÛK)Ýn’˜ã©nþ ŽÁ„µj™È²)÷0 ò,"”€²«7`°Ed‘2æOž‰1ÆšdR¢*k;Á\0Á oç•쎔9o—²r žB´Úé!U(µ¸…É-ùãc„NjÕNÚÞm˱“ªÚ¶Ê»Q°^Îvw £çY^~ùå™Ç¦¿×l6‡£<æ"ë3›VYþÖuÄ-ÈÇäÝ üÙ!)ªÞ)ù’b°¡Ò•­^ kkk§N:}úôÔÔÔ®]»c|ãùó?·oß7/¹ä>÷¹Ïff~gïÞGll\º‰òÓ~œq —) †¨éHåxå<¥Ï‘ŸVtß+3÷ؽGÈKYQ-ïž`lþÞÝñééáÞÐØ¿Ÿê„ɧ—¿8)’6:êÀ&­>wîÜõ×_ÿ•¯|åºë®;tèPôÿ¡ç`Íx&•F±Dß|($hhF£Ö_þåF)O{ÚJ¯·¸¸Øh4¿ökå›ßœþ_ÿË 4;ÚùÒ3óâ·ïŽpFP+ Ø(«×6fh̪nÃÀ¿¯|N˜éFTÏ"gåÌÌÌž={B#ý¢«ÁBÅÜ“9| …àÌ`\Á´yžê'BCa%0îFŸŽVÅßÉ-ÊÛY‹¶…« BP;1^àpǧ¦¦VVVXx¶N ‹võåN•³=Àšùˆö&‰³žÝs§§§‡—]¶öŠW4_÷º™›n2ш=I[‚ö è2nÎøŠÄÌ9éò…€J™ðTg5»Hgàܵ}×€QV%¹ïp¸ré¥Oyò“ùÈGÞvÛmïxÇ;Ž?¾{4šÙJI2269läoæã`I@Ži•(9OàVVVª¦1Qjuu5&ƒŠÐ °¢­}WNºgÏà9Ïéüïÿ½ø{¿×zÅ+¦våj*ö=:õô£–JÊ̳;{öìßþíß~æ3Ÿéõz'Ož$óÍÙJLjOW U¸\ˆ1]%xÚh4ÊÆFûškVÿËéýÄO4ÿîïÖægÇŽMÿÏÿÉÉâd²Ü¿l*S±%¿±Ñ§gï) ¡³#-À"¦px°bë⑬ʽ0çµMóÈÜy5€¬l±ŽeUƒÚX]ZÏÇÌÌ̬®®&½èv»!|sh‘’$½ó„ƒs¯Š¦QäE”«¢ùÄ‚©4r˜(2M¾ 21](û §3”ÿšO‹ƒ3³+wªœí$IÓ|†d¶ëéÓ§WVVî6½ï}×~îçf^úÒõŸþéå«®‚¬B®T­›Ê®˜ígšµqìs”rrÉo¦J~!º„ɘÀIHS¢ùt Ö¿oß¾½{÷îÞ½{Ò2µ%H ¬)2`Y?ªHM 8e¹9d*ûƒ¡“•[D€T΃,쨻Îñ¹¹õg>súúë›ÿò/Ý«¯ÿâ/¿ïû˜î¸È-EI -5WoNS|…9æ;væÌêÃ}V=)’7}Ëq†Ï“õç5766¦ÿäOûö­ÿâ/6z½öûßïü³8· ÚDÛ2œj€¤Fº³ã<â‹.ºèÀÖÌ6à É›èNÙf­rÇð0«ÛíÎÏÏ'©f´O ÇIéP0²Ìû1Ä0î ÄÔJõŽIˆ× UùÙòžHcÚÆX·QA 0W„°×*Ž>Û*C ™ Èu†PC‹½™ÈÄ ƒî§Óv9ìT9õhNˆ: dØ%Éj<ØÚÓfþæošGŽ4ÞøÆþÏÿ|™žžþ—XUÍ…±{݃±H³gƒ¿Ó‘fƒq~y3Mž; 'Þù”$ ¾qfæißüæ§>õ©£GÞvÛm§Núá~ÿë33ÿ—Øeæ5¨Åô†…ô rv‡÷ ~”MõeO·åw²=VàšëëS_øl Vž¡sË3·Õjõã7¦þñ§>ó™Öôô`q±ý®w­ýçÿ<µ±1úêWI#rÁéB#{z7UlóÅ©&M™#3à +rÇñl„uÌkwªî&}óòIgÿôO7~ìÇZÿðE•. ê<Ù$‰»Hn’-@ç†Ü žsss~ðƒWVVúýþéÓ§ ™NÍq6==͈IÑdnU[L^p5càÉ'«K˜fþ½Ý¯Hc¾ÇC 4ÑÔ¿î;œ‡n]6«ÄãJeÍ ÅçÏÊ„pµ‰p0 ÀEØž+˜D°áUï0Ö¶?ÞQ8€€Â\…´»Ý¥W¿ºûâÏ-,ÌîßêÔ©Ùk®Y{Á Ö_ûZVê¿ÄÔ3=þæn³²H±Ï,WÃü¦¬˜kÙMuØPÀ’ ÿ¸{÷ûî¼³|îs×ÜtÓÊÊÊ÷¬¬üÁ™3ÿý —7cø†Á.Ÿ“÷ ÎI ŽL»Ê©w—Û³sssß÷}å{¿wØn7·Ü2™ y¼ZTÒÒ¯½ßýÝö‡>ÔüÜçæwï¾âŠ+Ž9rúÈ‘©k®é½ä%í«¯--î@7orsþ“PËZÖfg³Í)¿²b Œö\®•êÚÔ>ÐØ”kã→gð‚îòS¦}SóÑ¢°`àËFœ'Nœ8wî\Â* [ß•qw?É’t•ó!r8–HÖ•›Üëõœuy¸<é "SÅ2‡Và9Ë\ZùÐÔIJUooˆTk¾£OÃÄèf61ö߈ûà4…t‚ ¹ŽÇoëܘ¬~a'äl/‡‘Iö³è4]§¦¦Î¿æ5í׿¾qäÈÆ¦üTkq±ñ®w­¼ä%Ýg<ƒ<‚õj9æTX‚”ÿNgfffeeñD%í× ïÉPËWÆe®Ø<öq7 o0øöµµ§îÞýäóçÿÏñ㥔Úíçìß_Ji ¬$‘Èä¾%0žCߘ½ßï#œ- !êrá…þàsŸû±+¯¼ê×ý–[nY|Ó›š¯}û–[À !¼š“ã³ã®^ÈoýVÿóÎÎÂÂΜ93¾à‚þ/üBûü¹éÝ»———)n'0._E8S™inåÝgffà•Ë‚±ZÙ« ¶ŸÍÒX¯Þ­¦Ö}‘K˜)&”ÉÂæÓñûlÝ»w÷z½Œã¸£ÒZ]]½á†˜eAÎ&ô–uµùeì Z³•m‘ÆÜ&ò2Ãñ½"Œ9͘4a¿êÎkÏ~†ÌY zrç1Þ…jh¶Q¸ LI¹äACåæ’š ñ­«€Íj²Â,êÊ•yhA›|k5³Œ5Œ˜ÖœgßyþóW_ö²Ñž=£Oú®,õ~÷[ûÉŸl¿èE8]:Ù·™5Æ#0°îÔŒ¼Ì2£BšÌ-î €f˜-ÈJüƒnÁgÛí«ƒï›Íæ;ggóçÿqiijjêÓ› ¯k»Û²Ïçççïu¯{-,,œ9sÆ o«þ@jBiÍ3ü9g­vöüËñøÇÞþökÏŸÇÝç=¯ÿÒ—?ô¡òOÿÄŒžÝr©1¥m»ë(ÿÍß\¿úê…}蓟üdojjõ—~iêsŸk_ý½/¿¼Ýn>|ØJ'@†JèÇâëJmE8ή ;O³‚×|KS€È Û:“pÇ«=ßpRf„P­jÌL•É,o¯ƒàâíŸBÅÚ&¢ÊŠ*ç>`²—ëx<ÞµkW¸ö–vþ—ÓœšÌúnŸ‰m·Û+++¨ÂXPÊrM•ƒ«TÞó4M‚FÙJUB£ ).ÍÆ´âbþ6¨ ©ºª«Dá|‘r0ÝÇÜ V<½L2ªKwBζ}yÜ’GEnU)¬L¿þõ¿üËÃápøéO·¾ã;úOyJãÝïž:zt´u€,•§[±SàFWýÞ|“v1'akd%1å O¬Ä@Á1ÊV•°¿žžþëéi,ܱ´¹5‚’Àܰ’²Ï/¸à‚••ªSb*'b™ Ëµ»Î…G=jáÊ+÷½îuŸÅÄp0hÿÑ­?ãe8,ŸýlåÇc‰C‡ºÜíéååÆ;Þ±ôô§w–—ûOyÊÔG?:õ™ÏôG£S§Nes2:_AL ;Vd6ÅÀàþx‚äG“jÐį 6–l±b©{&}¸OÀaP‘ÅÒƟ©Låšc™»+ÈͶ¶Éf Š6óÕJ€ksþÎ?²;ð=‚yO¤‰^µ/Ìá®æ©¤rªl›í6â9$G_*7™^`‘ô­YÔÕ‡­ðX#`¬K4@ZâMöfÉ8€8¿ûvutvkw?~§BäݱÌÇåܹéw¾sô˜ÇŒøÀÞ+_Ùzë[›·ÜR‘¤ËVq” ¾ã(t¯Åø•=E&}—=ô€O" :nÇs~ff&‘Ì«Ü"1¦ ew!åɤgv8 =Wµ¼¼üo|ãÎ;ïä›_Ü[BÙ¶­´#ç]ú—¿<¼à‚åÝ»{½Þòòò]Çô·}Û¨Û-7ÞÈÝó #G›¹OÌ™—;îè¼ë]kÏ~vyï{§?÷¹tw—––Ξ=›ÍŒù[ELpGÇòšy 0Ù0Bç-CB ìnBPdŽÝ… Q NCãÕ \ãš™7L ÷cuÆÃÉÅ}H"‚ãµýŠŠÊ 1 †s_]Žu­° ÖÖÖ¢±fSËêLô4 ±ªßïGR(Ý#ÔùZ­Ö®]»Ð%Ê V½¥|p:a6c´*k6ÁÒ¨¼ ö­K=xªk¨ü•~eS¦„x !·\š`Æ ù„C+ü2§Ï“*gÛèæ±€0Ø7P¥Ó錖—[¯|åÊÞ0ûK¿4ÞØmîCж®Æ2¨s!RWœRTïÕè5lfž©´Ì8¨ÌlXý`ë\'÷°Óëͼìe+ôG£·½­ùÕ¯–R†~ðàgv÷ _8Ö7ç@ÃCÝ€ðfóà»íNšùÕ_ÇEt¦Ü.4QLIÉù àD²uo[k‰‘¼ ï1F9l¿f<–°õì4ê~Fˆad!ˆÎq<â}Ñ¡wå¢'ãbt\ `U&C8t”M3*ûNÜd+H1ªIÈ´n!=B%mhù0`4([ÀÝ–"„žN~º?œ¡Å¼5{‚)—ípbÑ3TM‹dØtX¡ð:±Ê¦éÂ+SÉséõzéÎQÂ&;I¸búuLjúßD;‡äðÇtU¸öÌÙµŸ÷¼ñVÈŠ£ìr¾È#«?«Íze)àtCÒ¸"  Æ6óxеG-sB\1´‚ÖdÈQ†>È—­¢ovðˆGA=ÇÐ+ðBn`N"—nÖ§º«úµ_ë¿ìeS{ö ›ÍÑ£5{õÕ²µØâdçÌ7 Lߟ«š’±¶²±å&8UM,rFË0;_^ ä”­çyq“é³*híp[ã„6t^¡ÊÂÙ¼ä¢AEKùùÖUÝ;n#”.Y¢nƒUdå<îÉ.·•Ÿ0­öKeWjÈš›æ'NÁ‘Hc¡?$ ÊVIÐ|p'!³ú™…6¬N]Á•,!A™“®YjkÅæp_¤wUäÏ +=x£¡<*ãÐ S1[ya»€µS ïPÅ»Ÿ ï¬ÌD~+šFiºšWÍò"Þÿ– ¨b•Ù÷Þx|ÑŸZ©ôF‰.$æ ð®»-6lqÒ¼~¯ I3gj–§"ØnÞšTÃhBÐ$ÏF ƒÙ?ù“ÕŸû¹ÆÆFûMoÊýI6m;’xSfgWóX+Óæïì"ô£¢ÀU^pNV D™¶ ° Â^‰Ô%·Å?²’•1qÎÖ“n¿ùVSKÙúÚº,!‹Q‚øñ_èyä>T ©ƒ¹ÕÄ9³i ØÙÖUBØkÎÕl îrðƒ·[&Ne¨½~rÚ®¯¯g%Õ¬¸^îlñ(ÙûÞ¹¬½“ûž[Ò"€¬<'‰Rž¾2´ÈdàGÑ\5œ¨qókp}p™ë¸r¶3êI¾[è‹C³ qœtƒzY]ß|M ¯ ³³³(©Ð8­:@Õà=×:d³z¹¼ŒЉñWä÷ Á“ˆìÉ ß`‚™P0¹)j¡R†La²Àîºÿ§NM¿ãÍRÊÒÒúh4===;;»¶¶FîéÞƒ[¯V'CÈ«Jù9qPB¦…LJŸJÕÏp`FsssAqpLóÙ‘‡¨rvš@Ud ESú•Í«,žxîªõµÌñcõMÖý¬ÛJþ‡Ü‹»JùXyÊyVßö-H|â\ÀfÉ8­¾ {p œÜ &®˜³°´´”G077ƒçjñ¸èÉê IDAT¡Â¨lð:+¢Ò,¬vŸá;Ëá„ý±ÿþ©©©cÇŽ1ă¡x‘wœGŒóR‘ä±ózEeò9“u³@|Á•ÊNÈÙžxÃZ bË2æ¼ëLú„"DèZ›„®:ïØ¢ì+K¦aòëŒò ðtM°q­æX²x°](ž\¡ÕPXâsss“kÙœ4ä³A»Ý<âÁ=I¾™×O𯀫¨Æ¹sf³µiTj}-÷rmnM¢ŠËduª:=Ìåq–Qáцá eä¢ÈA|8v»Ý+¯¼òÌ™3ÇŽÇu5rOʲŠJP6h€Ah4j_Ñ[+Œ8[h&„ªÎ['믬9SÑöû}[ ¥»`òsšU/Úxµ/‘Õ€›› (yé…aœÿM½Ó²Èu"1÷Šðç TN§×ë!–Xó Œ&ºWðÌëä—+£Øê&.[ô!yH§ÓùøÇ?žúdö±6Ӈ܂(Òjµ¢Šb„€Á;:ÀMfy8}Ü©r¶óËüÈ,&:F«*í CÑ š{Œ `“kpÜÀ"H!Exc¹ØΨqXi ü”ú üÙ„¹N‰‘T?àr««« ~ìж¿Ê¿NPdBc\ˆáóüoþ î:¦ò®7£‰Mb\º‘ÛÑn‰»·Dã1ÏJÀœlˆF7NÃ4Héôº{ßétì~ èÌËÁJ±±æ²UµšlNÌTT¹·Œq¸«aÉæO¡$UªS¾'ž6°1—KL ‚¹ÿá)Y”·Èf‚‹!ÀX?”ä}0œ;wÎG•}Ð Ð$ï¬çÊ[bÙЩÊÁHLѼz‘åZ5(ëU½kZz ™úÁ zºÇ!O/È¢˜à-\Pz@Ùr,÷6x ´ˆªÎj4,0äq{½Ú<3(¤Ê¦µï§» ð0¹9n2Ï»Œöí‚A`" ½7 ºpgÙçûý¾SI·‚Ì›·‘ùììl§ÓY^^N¸¥s¹JÒ;!g FaUଞ”QÃõœM c’»¤0Õ XUáš”UÙºÍБ„ºƒjí© ×6,àÍï¿5ñÆàžgܺÝî…^¸°°PÅŒ8R\%?Åw`7Uqö’[šÈ›7èÞ’‰lBˆÌÓtΫ9\·Xïî)Gv† Y Á”­*™pÿÜMÁºÑB«œ_YHEJɹ«m˜®p+¢Hù¢Hâž‘ º–Ö¯*1µ‘•4yqð@’#]&;XVmþÄvËά­€À @m{§ÉFHiÅ3NkŽb^ªÓéÌÏÏg‚ÇÞwÕ½rBÉ£¬Däs%jÊu0°>¶­ç(àñ;\Ù5£ò Ùáî©5AðΕ³ÒòDöìÙ}UÍí¯r<–à8k1Ýì=N2‹‡±÷n·F=Ê„†•KlvôÎbê}Ç\žeã x§#Õ²ZþdÏž=™ËcÂ.@¹S¶”)³³³N”&G©­gC˜tùï ñƒ`uuµÒqGÝÌlŽƒìŽv\ µiL¬°£BoÁD·p²Û{½^Ú98Is'Áî8ñ)-ÈÆøºùQ$Ŧ–Øi†VSò 6(4ù\L’Zª‡J%¿ÉXh…ÐZ ÓáÙ-h˜È`Óh¡ÄÌ=w*R/eT¦oÙœ<%3ÃJ§H$:4„g;ÄØÌF«YÒE.šÍïÍÎz0nì¡]£ÁyšÆTyâfc:ÿÈvoÂÉŸíÞ §'OåJ =ÓÖ5I2¿> 3¤ˆ½î0Ö¶¿Êa{{…†¶Ç³D’θg=ÚJ–Üå0X3'f%äü7r^V†¯äËÊV‹u–¬›±@Ôn©•RJ¿ß¿í¶Û²ŸÝd¢Kì¡ÚË|j×U¶jÕ”My4¶bÔ9Éï *VÌÖ®6èÇͼGaö˜òç‚Ït#ºn¬ ¼”`Ò»ÿo#º2øc:ûf"صâž&@ÛßÌ#Š•ë ©@Úo_<’UY™áS©øP=08̶ZO•œA÷°”xÕÚ3pœj}}þ‹‹Du¡´0E†`ƒ·àœÍKKKt‰øM°5èÎÉXcÙ ôiÌÙ1½…°šÌ.06K¾EÍT6} áõ­Ú{Î ¼Œ+ûj/ª,ט„Vö£“ à³= ÏâQ8â]k;ã&BXgÅk@9PiD'ï1ã2¬ˆ ¦o¸|?©™èm+ÂÈt‘3›?#ž‹ËC;³­i ÑÙ”ÿ*.ѰiÙáˆ3†EJ¢Íùåóѧ­£µµJ=ÅR¶êuæœ2·‡ù§OlELM“² ½g¿N¸ªíä®ÇŠ«j¾o~ çQ*çèmüŽqü¹¥íl8Ë´ª¹¶Pò\CxÔ—?§2À=¬lÊÛ¤ŽôØ£)^µ šÔ=·ÒÑ*ø‘`y:¸š˜v­ÙD\—Ëv‹ããfXdšPa{lKa™ˆäÞ~•]y’`Æ‚„ÚðàqC91CÊ uÛNÚ`COÌÚ¥ëÕê2ív»ÛíRû{GU>ÖEž•/@#öã"¸÷syJ²ø`hl‰‰Ùíy¯jÝÿ`hƒ<:×cj,‡­ íënŠ—ã¢ÙP´¬Ù<.’µ1ç­æÊTÚæè#‚èt: ™»aƒÜ!°Œ L$°È°€4˃3bãÁîÿÖo57ŶaŸ»¢R£ŽáÁMëË}š"¯‡*'°¾©ÛB$ü°ê¬®„@Ž»¦ZYzÃÞ_?³(ãXQy°BÃñæ1*T<çÏÊ¿ÃàÇ7–èhZp†R=%]4.]QÌ1•ÈO»Ý®©Ò˜:#3háQïYz<ÉÃhAyÏsŒP9å¬ÊÔïByG÷7 ŠUþh+ÎÌÌd¿T¶­,§mÄÖvªœRúýý_úÒ£ƒ&§Óž”ª”õáðP«ux“%ÉÀãÁƒ÷íÛwË-·,,,T#ÐÔì®xXñQ~Œ*TF1‚³:ÎÊÊJÑH)Ç´wG’u¢lBŒŒy.,>.ñËAàÁ1ÏÁp^¤ýÈ¡Æ)c2hΈTîþf…P“‡Û¢~¶Y&’oz?ŸPWDþ’Æ›iTŽël¹4´*£eθˆkkk4ØÉú ‡áæAl\uÕúÓžÖþèGמõ¬éw¾³µéšGFSªÈ'©º§¬Š47y¸ù´1gËá•DÝ Ny Ÿªæ)ØåÁúâÖ‹8+]1ø¡xÞ«RÄð̼$]LRs†žê–kКsüÊ+¯l4_ûÚ×ø©YNÔrLC‡Ã ƒ$ ê?- FrT¬6ç4y(µË_]xá…kkk‘ Å4‘híç<ˆ¹õ4¼¾";sÞŽ¥1œáo«íoÀ­È¯a»°µSÊ©S¾ìeššj6›ÿuy¹3—RÞ×j}«Ù¼ßhôùñøÍb ä ˜½è¢‹î¸ãçò.ÏY­QQ4ò˜à®†ÇDyóÀšE| 'i·¤Ç˜S°«HkÈz5›‹{NÆJHèrIÜózݰãV"àtþpyƒʇr2ÜÜ7šéóMÔR””M‚‡Í‹ævm! }ιaî$ü«Ñh´ñ˜ÇŒùȹ¾0BCƒg?{êo´$l‹²UºÍY)ÝYÚÙ z¹côeÓ‹Å %GUž5ïλäqóÈ ,S‚»Ï­H•M…#À|²X%üÖ¹ókkkwÞy§r²†¿üÉu(¢ “ Ø8ƒ¥eLÛ²7úZ¹ßºGµ´´DHc‰?”IYÀÄl„_¡t&I¢j¬z½ìÍŠ››èU1 íè㕹r¶çëëÍæ Íæ“F£îÛ·^Jouõ‡ƒ¹ñøýÓÓ66›FãöÛo?räHf2BHVHσíñ.ƒ×•c…6)UN5ÝIòBï’ßà{åA2IËF‡ _q— ‡¯å|â%c%C“&òÍ“'OòL°ç1±›\,úy!¬_ew%êlo«É[jº6¬Ñܽd6Ñ5À“4rD»¿{FŠKOÈOÐAËó¡|(˜Ó„±€xVr¢SÉ&íôr¶ç«=ß<þøÞ½×_yåmzЧ.¼ð ssß;Ï—2LÄ×ï÷———Ý ˆ º E`¦`k•½qEð7;N¤e*Û.*b`“=LWÉô-oTv;ÅQo§Šiœ\xá…_|ñô¦{[^¼Ûí^rÉ%ÈX­¬¬¤j‰«ŠGðh*~*5ÒIs*öFr4€u«IâDÂÁ^Á÷UÓËæ+ •C*!&é*ÉF£Q®¼rø„'L½ûÝ»‡Ã'=éIxÄ#ºÝnëSŸj}õ«kÏ>ÅóL›ˆe™¿ëö/ýD—Ó&qj>UHå^LƒªHîx‡ƒo´!66¿8Ê!dÛ¤a=*3ÒoÄ’.:4°û ¡Xh5y}5(# •‡{N<å{EXÓmEèmt_À<ˆæ—éã¼ µ»¥©·l\¸¸AlF‚òès‰÷¾R–à®Õ¨‘,G›÷J(2d'älÛ×ËììmßÿýÏzö³Ÿóœç<ö±ííÞý¼Nç7»¶r±ºÅ8‡T ÞJô0ø² ºX”ö‹ƒAÜœ&éÔA{©a0k%¯ ÜOÊ_5]ÀÐrÐÃÙ³gÏE]ô‡<äa{ýy²­ÕÕÕ‘ XdWøwH„‰«ØF/ǵ¬bj§Éî*góû—ióBËa–3Gy¢¬û·D¯ÕÕU؉Läð”ÝñÞØØ˜ºí¶©}lãgvuzú“Ÿüä—¿üå~¿?þØxèCw¿ím6âl4½^¢|¦‹ –så4¦ËE¦÷P{<Øøöo÷ÁǺò ³çms ôùb]q¶$ÆXFÈ}~Üe°Ì¡vTkÀ3Î<Ü<_Ð0‹ØT¼›(¾°n=Í­†0rštOÙ¹ù_BµiÙ |´Š hõ‚.D 8D $ÐaÈóÓ„2À7^${Y‡n·;??Ïs·cº1ŒI™.tµwHÒÛüu¯{Ýë OxÂcûØH Üzë­Ã~¿,/{xäÅs”>iÌŠ Ùp¢<²nÜß^NñªNI³€Å'•N*/delÒl6ƒÁM7Ý”±g·¼cÀœ`)žÅ3fñÆìp7Ÿ+eÆ„wÂM€T"Ä&ï’çZÁŒÍçÇ(ßä0ûdîÙ¦ðàÎÔÇ>VÚísÏxÆW_ÿúéééµÇ•Š„ÌÝ÷IM' ]"°0½KÑc¶Õ–[·uäÙÇ"´.Ÿò†(@a¸åÏù\ÈrO}-`‰ ’3Ê)_¤˜ ÏfÁɲa¾NÐ"}¡‹éÉ9g'\06 ïÈ8DnÎE]tÿûßmmí†nÈ73B¤i'bgœ”bÀ°r¶‡$‰ú™3g–——§Bl—IYXѽ.íòD9Rñ‘¢ÒçÞ½{—––r|CÁ´š]j ?¹›ÍZ÷à‚µmýó‚v‘D¯ÕjW333Iσ„XÙ2w¨ )ÿ¡ÑŸ4¤¡ð·pCXI>í¸ƒ‹•k¸Z?fñU㴠̢Ácxk º¾cm­~p¸´´òò—w>÷¹+¯l¿ùÍS›Ç®!{:dö?fÔms[å협ôuƒßùö_üÅÔÚÚúÕWÏüöo—ÍÅó7I Æãq1<ÆK½X%Âúq†ÁÁxÛ î®»A‚_'÷!œÉ$ûÖb`ƶhÄØxm ò[óš¿àPjChœlŠä &;+6ÌŠ²H«1[óúX¢LÒ ´ÁÂ6µ¤RT"fÛ/•Ð]ÔƒþàþàáÇo½õVs‹(ÑÌrDÂÇM»%émþúäÌÌÊéÓ?tâÄ7úðG>ò‘|dåÈ‘·./ÿF§Ó7¶šl"Dϵ 7ýùÏ{èÝSŠˆw…¨™n{ÅX«|"ˆý&:/¾xð+¿ÒþÓ?½àìÙ˾뻎?¾ñ¢­¼ð…sïxGóða.#ç‰4Š Ìòý"—<`F¨’ú¡~„*Úä=¬@ª„G¬·”pbg„|dî‹ìD)ƒüܔ̌Ç?Ùíþ@³ùèõõoÆ¥\?5uýôôãñl)áF{¿˜ç‚g \§14[PûÂø°¼7ù•+<.MÖô¤Åfâ¹1Ζñx|ôèÑãÇÛeÑ[8Õxò6òÖvBN)¥|ç`ppzú†={žñŽw<~4*¥üe«õÍfóIÿGé¨vBŒqJX¶ ä@)1/&ôáÇÍ%sã§šA³‚†è^@”d Ù û5£p†kp&Å®†ðø¡Ã¼¾¾žhaûƒÇ÷è–M»Øô3fQ­nW‰ Á>7‹¸Å-åTê÷ûÞi£«FlGwÝûÐÀŽ•1 '–pâlÜÒG‰É w;mo&àТ¦¦¦vïÞ½´´äÛáž=™µµ}ûö]qÅ7ÞxãñãÇËêjY\ÜØ¿êСN§cX)íŠ\@ªqÖïâ”ôÁ„vŸ7éâ‹/ž››;yò$lW´=&[’¦Þ¸Ù%Á>žÂaÊÄú1€HR4=míùÝîí33ï÷ÿhyùÙóóÞ8žÜªtwεü9ë‡y²êà6Ó°ËoGo’ê–©U[1L²™–›ŸŸ_YYIåjI=Î.³±™Ä0ìáÄ‘¤gÕvk¥\tÑù½è_G£Ož=ûË»výÌüüÓfgÿ¾Ýþj«õ7Î6(RN‘8Î|Bt:ÙÙYul¦‚**°ÃÒyÆÞÑ~n¨¿°b@Qx)cÔæã V Í´Ž(Ô*ëå" ¿~ÙÔ>(2Û¶ @Åa5ƒ<¨Äª‘°ø'¸K°Ò aÛjª;1O/ÿf<»”rêÔ©/}éK°°8 ÜàåT"-õŒ=Ž!žN‘ ]¨óPJCÃ8:/Òh4¦o¾¹¼÷½+ÏyÎÙµµ›nºéäÉ“ãñx㕯løÃ/|Á,j;òyH…”…Çjm‹J`Xé”<߇>ô¡O}êS8¡ÎGmY(®•Qg±ö3'Ê;˜„EãÀLJ¢ Í'Ÿ8>vöći·˜ Pn&AHȯe«~”¡ínÜ.N ‚E_ W0ÈHWjÙ=£Îr ”MÝâªëî{µººêaá\dû[ßZûÝß=ö†7ô_üâa«Õ{Ë[¦_þòÖñãã̓˜rþ:q²VÙ«meeÅ~NÌ*}ýë_?yòä©S§ò¿pîÖ§bxÀv׌ǛÃúŸÕ¢ªtÛ¥|g)K—^úôÿø¯ºêªO}êSüà¿´°pÕÚÚ—6£)¿Œ­¢½_ËÖ!ÐèQAÈä R©˜DGc¹²Ck¤¢¢äqZS©§I\"¾—b·ÒEµù¼äóóó¥”(fÑ+ív»™ârÚ·£±¶Í_®C9 ²©Üð@1Éä"³6+:|Ùê©E?1{Ø.ñ.G@Høý²)«îcŽ2Åøúù¶ý ÛA•m×öUhiy#}š‘«âÝí³ÉÝp1Äèñ¯jŠRü!àXY[&}¦kMç&ЛÜV%Ü4]cô;™Vƒå4?Ð8¡A31вU6&¿Ì)Oõfoi5ç‘0&–ƒÁèô驾ðôóŸßX]m½á Í£G›500.%Э1œ•ϘîúÒºÅ<¸Ü·Ûo¿ýСCD‘|¢È|™²•e–Ûb†te½Úív4™äi8Î31Vzå"óŽxàxÅW9rdnnniiÉڶǵ٠ûM6,ìù†&à´E:î²( Øû\†¹vnæ•RfggÉ{rß²z£a9> ¬mÍöÔ©S§ª …&w¹'Õ³Í!‡´Ú@[  Fá[@×I™i¦Ìò‘›o¾ùÚk¯=sæÌ“ûý÷NOßwS ¡[ªnb®<#Õóóóá€Ñý²Ù¶gN=2lâ™÷W‘›Ž«"î$•åE]´²²â›V$Ë]4Ì…yof#p&Xš1XÍ·V¢;!g{¾(„mmR¥K&\ ‡ÃÕÕUÏ…ø©Œ ä0Xê· mŠ÷6m0CÍqiû²éß ¦ï$+óCÌ|pÀÙâ—ÿpÆ0t®?óì>š'‡ÊVé3Š>)ý~-¬¸ó øÜ”M%ãT$ãÖs£æ¨¼{Ùóî(Rs¾ó©)àîѳ¤’ª¤µæŠÅ^¡ä¥Fôã¶Ÿ·».vï>5¾ñf³9ÞÌÐÍûÊí kÑÄqÈýŽ•ÿ;ÿé(›zq>õ( (¬Fê–§°k×®ïþîï¾ãŽ;n»í¶Ê¼yÒÓ9õAÑo‘Òj£q]«õÆ'~ó£½fnniiéÇ——ouõéóóW÷z”Œžmj¦ÿÇ»‡ÃsçÎ¥&@ÀBÐT{›sµacEVöòƒ¬Ï;ÂÓ±†MÖX˜sÍ5é·q·sÿ!ò@£uè¢Õ·r¶íËô0Öz50Ï!›µËè%)ƒÉïÖä䥬v¶•nAhÇ -, èL¾ð%ïR2Ûª‚š¤ÏÍmôö¸fV09cŠ3KªÐrW“í—ÃŽù! iDeÿ‡ œs—l¼“Š2çðSÝ%Ÿ)Ìz õyÌvoµZQiÌ­6ù :H E£…4ºÝà^9ÄÂ!k¶Ã&¨N57jë\XˆmÔ¦¾ˆ+W¶UÍMœ ;æ2½DRbý ÌLàR#†9¹¾¾~Ûm·¥?dð"üêÊ&Wùw‹Z–r¸Õzf³yõ©SJ)ïšúONw“tÍš¼dvvëjqd~ÊVE(FÙh&%±2˜!e’6/6ÀæÛº „ü#Ÿ1ÏŨ=ç¾5`²úóÚ*]δ+òF$˜•? Xy¬(ƒ‹L<=½‘‚Õ¨=õ¿Ïƒ0gŸ’о9zÌé§ø([í68sýj\0%'ÆÊ¦és¦¬X´ùýv»3• 2 xq'j 3ÐÄþÊzûש©WözÙ_h6K)—7¿5”Áà‹›/ÅaM‚0ZÙÔÃÑeÁÀ@3tAº@òD1Á9“±e#V`*[•=‰‘-Æ]Ò Êí¦7œ[ gLÅ4Ô"M ³ýµÓ¹ìÊ@x׃ÕkM-¦ÉÜæÌrÃß Z&6´öÀÛ/…9}Oû{|ÄB2?÷3ª™«$ÌLú®Ã ÍéŸÇH‘˜G%Ée%ÿ-Ђã¥D›UÄ0‚\.»èª äì {°~Kç<ïD¾JnÕ5ç:Ü+d^ºyÜx xìÆ¿iD5Cc6„½gLÖG¢‚8” eÎJÐ\ÎDW],`óž ñE *¢Ýn÷ûý {þ̌ۙèwñÙzD׆U¢ˆKö’N‘»Ts²†«V+˃°—ÜôG«î`®çĉ••G /™ûC±n-¾Ê7ÝL•XíÖxx¶¦!1Ƀr&à4§ôñÌ£5Z»œ}Ô¼¯›~ÆÓ•Vû.²g¥t¦éè@î9iOn¡ñI' E7GsCs¿{tAk (/ŸÅVU333ÉɲƒffföíÛ·ººº¸¸È¦Ëð °ý‘Þ!))Œjð4"GÖ‚}Rä•×××ñÊç¾”ç‹ÉÏ@wy@”¤äµ&ÑXå:ùœÉ{©·,Ʊr¶-êxŠ~”“ [ÉæÔ(›f'YwÃyÒá£"†ùŒó`‘e,ÑΓð“FgîÜØôÓvÂ^‘]ªj{¸)’z«ÛíÎÎΖMƒ¤ÛêrßÜèâà á׺Ÿ\6½u=dSY°JÊOÉ(™"òƒ#´S!åns|¯Xlió)ÌÅHÞêt’q ú~¾.ƒ,€d—Ì­-7–‹ŒæÒOÎÚ5ϸB†Y™UéSÕ¯^ö– Ì ÷!kƒfƒÙü>a ʹÒbbŸZÓ .eD š¼;2ÛfU˜Üh¡L_9ZvÝn·ÕjíÚµë;¾ã;>|öìÙŠöÉõSƒõzË¥´K6ÇÃÍf/,å©ÝîÍí¶Û´y^¤´3MdiåÖ¹›ë Çb£±„±ôìì,+ÊÝ#û¦#f133SU±Œú¢L±ÓËù7Qå°âë}Ê3Ódʾ `mÝ´=êhb±Om¯QÔˆIs8F«2Å:f•°.ˆdˆyäËý‹´pª±J2qo†ÃáÅ_¼{÷îÇ÷z=”¸ªÞ•ã )³-&ie .‚€ô¤Iȉakâ´…Xlx•üÀnC<²Ì$’Âô³Ì¨eüø@BÔµB©Œ••@«± âÌþ¨ú4àºÄBÎzniâq)¥×ë±¶+˜.1Ô;ìV€Ï´µÒ'‚Üîpå¹IÅiaôg].5»9jX©:ƒ-Ÿ°¶smçÏŸÿÊW¾Òï÷y¾ÔÜùƒÁ Ûlþq£qs«uåÔÔãF£áh4Þ;5u¨Ùü/Ãas³Ö‡†Pjpƨ“H¶ˆLPWÀ0Ò’ÌÃE€ ›ÑÊeÇAšÛE‘¨ïîÏ–ÉñNÈÙ¶/w;Ür,[eZ8å'Ç6­ê0°ù©‡Û-bD%µSxÀâØoØ* ”Üßô~³Sge­$h¯Hú‰­Â=It9|øð}îsŸ˜v:thiiÉyœ‡„ÌUã°ìŠçW¬1ÌyÁ'&A…8T$ßépU¶ÚŸ ÌФÂô+;j.¯HÛf-ÄñlïDÊê(‡ËŽs×Q‰ à·åò}ô­õ[UŒÅ·×ÝGSy¦^–¼^ñ9SëT’-ަä#Xi9++É2ϬàEwI˜t×!Y »ÇŠQ]VR@ŽA$1YünÊÀpØl6_1¼·ÛýÍK. ÷{çÏÿ»©©²µSY1Ë59È&·ÑO*ReSxü`R7ÈÙŒ'ºHÊVZ·Ó¶ae'عæDÈA†tŠJ ¯›"@ägÊæ„vе³g¬9Á ÈᢉbÙ4”¬¨Ì, Xõ–Éß+Ñ·!;6Tó}9ïˆÍ½^ïСCwÜqG)e~~¾²D/ò±XÝmËI9é[Ú$@ï±J„.¸>ÖÙ¨Óöà¡âf{>)ûwN&"I8œ”@øf´‚¯Š‹eßLW«®oÜc> Awh<¾êKâ³0 ‰ì ãX »t¶•8¼ Ë UÆ£¾æápØï÷ÊäUCWÿ{o'ëYVýÞ5Ï]=íy'a“C¨D^&Ã(zWQ1 ð ‚PÏ^õQ&5‚r|øÚRéX2ùì²J§Ä‡…ýæGG¼ëÑT²Câ^“ëd2QxüÛ9bé0 xš{#¹ò ×]úÀkz Ùlö’K. Ç/ÒÁD·Ãý ÝûEãºÎ~bFŒgƒ»2GBmη¦éíEÅ–>Qˆªø(J‘®ºŽ¯NI½›¤œ(ª<éCâÌ%Ÿ•0ž:uêìÙ³ÎÈÒÑÆýd TÊ-Cˆ|JÇ °ª-¯#ƒ¾Ï£ Ÿ¹Q>z Mwº{ÓX‚Ú‘ àl܈Otº«›’qä>#݊ȯ 6 Jþ(>øÚà©òkîªKP¿¨-Ð%¢µuÞë·‡ÑõDÚ-~†?Î……å^TˆP ÉUHTï.PèÓÄ’?7À#! !(ßGz²j7–ËåV«µ¹¹ ÉGk^{çü¼Ôhô¨ÉäÜüüO½ä%W^y¥*øú§êmnèõ|žß;+Ð&#ª·{z‘ö-̈‹|ÌÖƒ:Ynžö!ìDtq~—¼»!g'{9!„Ç_sÍ5NçoþæoNž<Éôc"d‚èp°¥IØ]@&È0nLKÙû¢ÀqBêµù½ ÆšúЏ¤ú="òël¡#²“-bðåº÷„:ÃŽn¸Ÿºfb@N @óY®u¦•ã ˆ¼KìÌ Þ ŠC4Œv+z9ýQp'Ym7yŒf¤€à)OiKP2zqÉó»½JØêOH嬤ˆÿíßÑ¿© " }æ®k˜ZKPôe#Qp{„åG!Ø—ëˆy7Ë™·Ð]ÓÛEpA …B¡P¯®Ð|Œ¬IT0•JµÛm—ûó0@Kæ<ÑT4“Ñhcccmm­^¯¯­­õz½óÔüñ8ÌpT(lÒ—RTfaDÒœ>N‹ÆO0i§®9ËœïÍÄDñÔ.ëà|*ß‚9!E® ‘o77ßL÷vÖ ÞÛN[rHSeÀ ÃA^õ¡ðÜÝe¸ÆÞœèèJš@XQ/Ý3ngð#SÍÞ;çx ¾) Dk7#pÕ×°Õ ‰ã:¹úÐb±øøÇ?þÉO~òÝwßýå/'ÖÈö¦ßï7D"Q(Ðz6m­ÀÖï÷Õ:¥È !ük:ýŒZío?ñ‰{î¹§ÑhÜqÇ˽޾Éä¶t:•N'MÔŠD»²P(¸Íp:éBÔ_ää¡F ”êD4¯›é'ù¬˜?;—¸ö÷Ù 9;\èL§ÓõõõÏ}îsZˆNÈAGd»þ™&Ç“7ÛIÜg‰æºÎ:J@?<‹¡ŒÀ$ƒV3Ùh˜iÅ»`0•ÍÈ]CËMÕ@ÊúF»ÝÖ!ªäf>È×´n ÄNð ørÞùÄ¢ßï3­:Ì­é…F})O$=å×ýTíât>oÑ©•å#èN=÷ùÆZ0Æô®k‰B1ŠJ÷=BGT¢n·K¯ŽÒ“Ë~¡¯¥H”6òpä#ÂĆ®xGŒÉ¸AŒS©T·ÛU1Aî°!5"÷ÍU… 88ÂÓ.&r˜ŸŸêSŸúÜç>÷ðáÃwÞyçêꪟàî¼åÅЛb$a”é‚ïÈHÔ¾ú÷Læ'ƒ}wÝõž:%SöÏw:·%“ßH$òù|fÖŽõçy«G£þ.Íÿ"~4OCòfƃ°K˜}¦s·@‚_TNyؤa7äìð±¤Ùl"HÉ¢q„HÁEп7ý¼ááøZ&ŒÓ{•MGGƒSò!&¥ÓéR©”ËåZ­ǽµTÓªGhƒË8Š$}ÁôûýV«¥Y–ápˆ(:½ÂúúºZ2¥R)‘Hˆe%òÕj5“ÉlnnjÒS#xäSÅbÑ-è!ž¡½†‡X°ÑT0 >$,ƒÉŸè¤æ¦Ñ×ápÓ-òAˆÈ0Ã}ðÈø§{=øHD4áèl%ÜÂVŸ·Èd2 ßÿýßßétn¼ñÆf³ m‰þSÔÆ'7‡*éŽD^7{ˤŽÕ»ÉÍ„Á免S!9“Óû‘î»á1ØwØc„"ç$}åÍÍÍÛn»-“ÉÜqÇ­VËAGèF–ÌÚò ÂÓÏóÎd2¹g:ýÕbñ’Éäî•ý§.ÇÉä¯õzNg2cÒSjŒF£d:Ý{Îsúß÷}¹w¿;e3U<7•g"-Z¢¥”Ëå¶áúµ_ˆaô Ùì,Ý:ª:¿ížó톜,qØnâô) Ô¹®"îû9ئþ“¸öŒÅ8§E^G §­«³ ¦IKà)OyÊãÿø›o¾ù®»î [-n8]—9ˆXv'OžT¹¹ï€Ýy_*N9rd8ÞsÏ=ÎÆQ޼´´T­V5xO%´øx}UT¤¢tk"‹_·øD82˜Ä€®n±#œ0ÃVC<f6°g£Ð¼ÒQèÂwð IsázÏÜÝ@ˆ'‹_ÜVdÙöìÙsÙe—5¯}íkœàtJéRŒ„>«HVžW? Òº#-_œƒ)ŸÏ««Kz‘½ ¯àÙŒ~ €ôˆûæc7ÑŽCÍÓ`“¹èEc·Û½ãŽ;¾õ­oÕëua¶N­Œ63¼Î¢VéB¡ŽÅ£ýÎx|åxüúÑ(‘H\ŸÉLCF¯ï÷Éäp:­ÍR¬Qµ~zÏyNâ²ËR·ÞÚÅ+²ø@ºÛÕ:”YÒ>3§yýFÏ]ÇŽk¾–0Hä¡pF BðDÖï,•ݳ3%Žk˜»¤w®ãäxˆ^þn.L«¥C¦Ã\:G'4èH"š #³ÅÅÅC‡-//ûQ z»ÕÖœ.¥-`,nwœN§ç΃ÝJ¦óhuuUà›Ïù«9¿]ÙÞ9Óüü?Ù>üäâ»i;Í!˜gš7ä]ª9*€ˆy:ÓùŽ.‡åoÙU8þ¨­å3@|*æJ¥R«Õ>ñ‰Ot»Ýv» %šÏB²S0½;¾¼AHª8¡FƒS‘*ʧDtô=#¦/ê’.'ýÒ÷ÚvmD‚i­Nˆë*IUꈩ¤ nZèÍEô ÝÌÉ5ãõoÉån±>þáQñm– “Ÿú©ÉòrîíoO¥RÃd²÷ú×—ÞþvjY·©¥/Ñ/[ÜT`ªxÂL>Ç {"Ú£ëN{‹&”ýQläøÃ#D6ˆêøL»›ßè¹Jç’È´8‚ób ìʼn•·Þzë}÷ÝwîÜ9èÔ1~˜zÛÉk½ìÝýþQsd8ÿW‰D"„»‰_Ë磃UÓøŒG¬­­ù9Å÷L&ív»Ñh—s±K¯üOðGˆ¦##C<¸Ø«>¶ Z Ñ@;–;éÓ‘:ÑèÞG ÍL4{a¥ûqãL¼0³<à@‡AÄ€*J4J¥K.¹¤^¯?øàƒtלáÞE·œŒ ÉÅ%ë9²…#yi…Â,˜G¹9u¶Ó1`؇™_§›/(4zKE¥ÈÎÕÈç|NÈI›$m¸º n4à£çvUN7pŠ{åñM#ýˆ‡¹y?ú£“ùùôûß_­Vs¹\û‹_lÔë­ßû½ìßèÌ~h¥ž‚ÐõüPýÍà„ƒü‘ž‹¸'¯O§*£'ØŽü,t4wÉѯh¡Eæ&Ž@(>êÅ!K’ª%â&’ĹÀ¡Îço´îWVVÖ××Eú„§ÏÆWÑ/ÕsæÂ´O.^˜ÏI$^>=}4 !ÜL~4›=“J}°Ó!«BÔsÄpŽ&h²Ð9òbŸ!…tÃJN:þ Š2‰ByD/õ'_¨5u…ß³§Õj5 ÇÁ‚Ið(#ëUþ€NŠ‚0ʶ³€Ü‚—§0ÃäÜ wp¬¯ßïûÛßi‚·ŠB´®9"aºñxÄLxqºE º*Z@߇zG&³™ ž€áÂÒÞ‰ða/gÝ1Sç n2±9ê®{]μ úÍô™¤'ÆÓt%\÷÷ìpEPAÅŠ<ÁSïÙ$ž_«—_®¸"ÿÇœK$žýìgW*•O}êS›nJ<8~ÝëÒï}¯—æÎf$éV€( €Ž&©;äjk{Ñæø­Uu(¥€¯ú;@Þ 65™$—^T4âÙÞr irëÙHe$ábË: 3 @ÿІñ=à9‹„\$Ñ}gÏn"ñˆéô/z½)pÿþ§ÎÏ2•ú@·»ßd4½!D–Ê ì '¬ŒÌÕ£ih¡ËµPsÞ|vºkd1[Z_Ÿ_¢ƒëж6ö`0h6›Ng»Gxt|ûœ„}¡(~˜ê  ¾q2w˜‰A slž× hÇ£(DX~‚:½†{A´ù§D“êî¬ì”} NúcÚÈчm¾#"±ZÈ,PÚ2³Òáp(%gyÑhŒž”&i×ñhˆXT]XÆE2 dñ\ž¨çŒô*ZcG«=®×D8}÷xØ‹ý›ßL~þóƒ—½lR©Ü}÷Ý·Þzëæææô…/ ‡§þìÏ\pd0¨o1QÝf^kX)—Ë-//»$‰‹¶^ærøa«Ä»¤¤¤ÈïV9;öƒS“ø”‘\D’£3£v:i´“ÝáÊ#S?“6€Ÿ.!ê–Î]ºÁ¯Ðõþÿ}<~SµúÐE=nÏž'N|ieå Éä϶ŸNú䇎øÐaæÈॠɗG½'vô0Ó|d¶Æ“k@v÷}pâ©—N¦šN§ÍfSü:CqPb»îGç#®T*O‡ (w|Ú,ºá0Eƒ  9íY‘¸þ¯B”ÊovN§Ópýõ‰¯}íï|g¿ßï¾øÅ¡ZÍýÑMg‚~ކA:‡¯àAųîv»FRŸ§ >ᘷ:ÌÆi½éë»u7äìð[¥yÅ&Á<„w,ý #‰C?’GÓ9EÍ?`7ÇpØu¾úÃÖ©cŸÝó^=:Zàu!„«¦Ó¿¼à‚ÿØ}ï÷~ï¾ð…ø‡ø÷µµk{½ÖL»‰AаÕ$s?˜Ü\ØêÀàº;¾¸sÚv;¦ ü°ˆ+’¹Õj>%œsÚõ¦|¢ÛûvÁôl](ðbðV¾’ïÓPÁ•„Lœ‘CÀ§V3£ê÷ò4NH.ÑPé¦ÈZŸyA6£5èêÜI?p‘®ˆ+¸6.ÓÇ£œäa’qz ”îÍ3rÒ+ÈÑÑq«=•&Üg°GšÜcö&“I>Å%³j‡£©Ò¶«Rl¥¿øÅq§Së[7Þ*•܇>”0)O0óhnÚ/Œ'‹¯àp8l4>hE‚6®'èD”ZxküW?ëvCÎŽÑÂV…] ÚKÑrìÂÿAœ€‡ÃjŽŒ¨}xÞ/@ŠRŽT÷,q†á]O,ºô:I‚@4O~ò“Ÿõ¬g>|8™LÞu×]N'Ñlz¥¹­¸ŒBot:{_G“Z²žûûÌŠ—‘á·zQþtˆU‘"‰6OÊ“å`>c^zFw’a÷"Ú^LøXYwÂC"zh«ëùz:‚ç°­ÞÉ}UOæœ7ÏßéTs0A“Õ [Çã) íªº¯£òÎ6Ä †º2íöiP-on280édÙ;ÆiÓyÖâÊRîò©ïÈD”zŸ}Fµ©÷9Ä#ÅãSœ1“7ßœ Ozþ=ï è–‚—J¥l6{îÜ9ì\¼ÎGÖø¯lr–"-XÆ-hιДþ+©ä:»!g Âàº.ïꮣÂVQ`"’ÒU 332#§úq‰'˜sUÝda|rL—]AƆ3ËabÕ¢Ê|i4*ã·ÞzëÆÆÆÍ7ß|üøñïíõnN¥3£ çÅÌ·L<£§ž`ë‹ÐøaÜ$˜5§’Yv‚óë #DöhDqÍ@xŠçìO²ì-í+8¡+CŠ@6MRLs8K—„…°·åh}s€Ò—&Ÿ æLHÍÛÔ`5ˆ èЄJ¹Oº§*…)©«#ð«í'©‹9¹á© ð ‰N¨wV¼wø°€…žã¾¡#倛×y?Þ•>¼Îæ£è.™Àw‹ÁK.ö¦¾/* ƒSÎ: Â!Šó¦±·ßn¿] Éé×GE ð”›PÜka0Q⻚­®MnÙ «øFÒ½sŠ6˜Ûå솜-˜;„wY‚ŠÌà ³0•ØÌmÐ_á5¤á‘ =hN=Ÿv•hœn')§¤ÜÇ[÷\ÂMœþ!„$“qçïþàÿß½{zè¡£§O¿½ÑxU6û¶mŠìFúØ*õ¢N€Ã_â¹úµ£7ž`FsµQo,ê( [ ômïD[wõöÙ)/‰ô¥Ä;r«oG9 ãú8½ƒ3N{`ôó(b(yûà®'.ª- ÎOg‚ £3ôÞ"ožÍ!Ÿÿ÷™Çí“ÁD9µbå¥YÞ&t‘õhŒÚ…¥e &7ÉHŠhê¹8˜»(yL‹˜¢ ¾¦`·ˆF7ø¶Ì„ë(§<åƒ\’Ç»b,lÀÞétÊ@ˆÓš}\‰/òÉ´ëæ¹R‘3 ¶ÏÉîkßUh¥!¤*þä\»ý`g˰' XRîï/“èâàG$nÁÄÛ)ÿÝ@SM¯ÀðunÒ}éôkÆãßu×+CF_áçÒé‡ÒéÐï«@a}û|ÂkȤsý:ë••3¤¢ vË[‚ôÌ”oäûs{Èa°†s‡ÚÑÑÑÀ &(ðh)w˜¶s­kêôýéq†îª 7AÀ¥¦£AEhr:Öuþò|=¡:fCµTØ‘8P0 O5“3Z ¬C·¹‹r&„£É3&PJÍçó~bú=qI=Ÿž¡‘éÓQ4´Ô…xé.ÛLW†Ë9¢i„­þß„UÊMEwØ_ž²xÕ¨§FZ`è^Dž¾›Ù^üy×6yvì=š`©+~ OKH5º(ÞÍbì*IïüÛºÀ‰»ùFBjz±ªZC„•XÁœ³ÑD›-Ÿ`pŽl0‡lwp2›Ï{²gœe‡f"‘x •úd»-j|*‘HN&W%?0†áð›[}|¡Ä `G׿ðÂü‰ú"Rî÷û.²¹[`”A«+-Mï/ñ+—á%ã§v»wf?É$.¾øâË/¿üž{î¹ë®»à™Ü÷†M#ê>¯co€·ÓÈŽð.•Qyè‹C—BñhˆA]gÂ[F£Q¡PÈf³{÷î½ì²Ën½õÖ³gÏr‡=þ9CŸ G™Q á3†Iw“S22¯ÀÅô'xú< `žIúŽ"m’g(ã¡íÊ'áŠö¸Î_ Zu5ØŒ>!)—3 L²Â£<ÒË娄tgÈ8èAÓfÛÀ^ˆuÂL‹Ð÷5ëÜy¤úšH[‘¯8%¢È¼ IDATÈLDt§²ŠªÝó]QèHP †ƒ¯Åä/vIDÇdÙ*®Eͨ@iH©H£<"º¯³ÎtdôTÊ=Ɉµj_;7çoÕn·å6x~ºp6Ž£kc:•/u¾ºúêñsŸ;úìg_øoÕívѦsÄý¿œÔà>=>;M‚I6íÍj×ç÷±Gí+²Ø K¥RéèÑ£gΜqî¬ï[øž_;‰ ‹ÔÕ ‚É …™dw/J·ÝÖ[ôzF¥R)êCBRg«@¡ÚvwKZMê,Êü‰;I5L©çp^À²¦)‚]PÀ•PÈÂVN¯ûý>ZžÃ¹Oe4O73”˜áS·^@&Œšç”#ÌsPô1†`ºNËÔʔͼ[©z,ñ å„R÷‰@õÊ­máNo;q'#ƒ/yºæµËýík;ü㉪sØawpEœO. "b Ÿ§óž°Sƒ\Ö…3´ÜÁ÷!·ÐídÛëØ¼ƒ—…­îÞ•õþ'ÅÙàprÙeÙw¼cðÒ—S©ì§?Ýív#hžä]_™tÞ¹m7q‚@e†^…‘Z¤ÃF-å3ØÁºÞ‰Îº3€ùRÜw±rì‹¥â;e@Íá:=,3÷«õv£§ PQ:v 5¨ß+’Õî2ƒ.í¡¢*lU—Ø 9;ÀXsçÿTð#"퀌Q©‹E¸:ÁWÛ>l†q€È&ÁÜyQ$cuz½÷7ª]ªÖyÃü9¼DäãßÄSž2zñ‹ËozS6“ɔ˽N'õö·wßò–éd’üêW‰yÌ3*té,HÍæLEØs7UïÓL"wÓ\Œõº!"•E$b†ß èCž:3ï‚Çë·BQÌ)N¸€±ºC5t':l(©{`@q² ½qé~Â}rÏôçŸn6UäžL–¦ÓÂF2y2™ Óé „g—JÄ~Ɖ@q<ílx@<Ÿ²ŠPe‘Ðþ˜\¹œøçÞg¶Ü1×±DHq¢Gº)QØj Âî'„ÏFß‘…äTj;gáoÇèŸplÜýP4ÈEŠ)2‚JnÚ­M!n…$ƒ'öUK‘̼N\.—ÍfK¥R±XlµZ»UÎ7rF£‘ªN ©‚iµBòa¬Œ–)rN [½–}ÔÎѼ0sì&îÕ^üÆÍÓ¢k‹¤ì=!õÜÜg!Çã±V¼÷‡¼Ç@CEÇS÷ÙÏN_}*™,‹‹‹‹ò„ÏÞpÃð9Ï™|å+>¿¹™iG1ØM ¶›óßÀĸxWÌŒiz(C$ÔŽ|r¬”J%šC´Í &P›’BÂõp)æu8AÔ[Ž E!<ŸêˆÌêS³:ÿ‘9eœ"ºOã2à2Óé‹‹Åç‡á¢bq0œO$“ÿœH|´Ó‰D‘£ðì’¬F@r8@K¢³ I7]•–4ã™Nÿ ³bú+hø;«Ókâh~V·˜šPDÈ'0ðŸºRY¨ëâLþøXuúOš±ƒŠ7t?ås ¨,™“›'¡!Õ°–=5›Ív»])×Ñ„ö²/*Õ˼âŠ+.ºè¢;ï¼Ó »!gBK;XÉwQHïÕS톙f{äKá$¥Hß7˜OFÄ)à#\e+l¹‡ÁåÔ#·oÙÞðvk·q-±'óŽwt_õª~¡»á†Z­Öï÷ÏyÎðèÑâ;Þ‘N§%8Nñ~÷y=bÏ`0Èçó¢Üàl­ÏOÉ5Óx4ýNIðgçÍ ôW3™LµZ=pàÀƒ>¨açÎEͤíæ+äìnàÑÂC¸³Þ¹lD´¤¤ÂFôâ1©®âYU/ê j·Û, p!§]LC8<^3ÿÎÁƒ™Ë/?sæL顇þ Vûºþ:ã"! ¾…«ÝxÑ{f,{™`÷éÑÅ£/a@†f$ó%‘oºƒw‘  z³=lU-ri]ÚŠ|qØ€ÑFso'&yqÍ!Ó:wœ_5À1¢HT£óA\-{äÎNÊÂwT°G@+ØDª³5™LæççŸÿüç=zt»ÊnÈÙ¹=YÊ>Væú"Ûs1V3M´,=ÿ%…W–ÍñĪú"&õEØÒø1û 3 %.$œ9G`³x}À! ·59?üáþk^Ól4z_þòä©O?éI™?ù“q³95ᅦNBo£Z­^~ùå ·ÝvÛ¹sçÜ7ŒÖ…ýô¥ÀÜ= fm¹‰ð¼F£Q·Û fµÂáë29ôT¼Ü¤‚ôŒ‹3D¸uJSݦÊ{Ò0“Ó°Ü PâÝxét:ŸÏ{ÛÁ@6çŸio~ç’K.¾êªç?ÿù+++ûØÇ~ñ›ßüíõõ`º dèdÖÞ$ZúNK#_Ž<§ØŒŒ“Ù5NGF7¡T*…ä³NçÆ_æáÙyeÐ#ð3šS¦)EåÏÿƒA¿ß/ ´i©/) }ªŒ Æ„OÉÈÑñ:B‹ç¯¬„ÀQÏãŒ"’‰åU®QM¢IU·¹¹ù…/|áöÛoÿö·¿½Sš7»!'x*ç]}ïs?ãhˆˆd¾-ES쎖{»r„=ì>›Ó¯ÓæHgšN 3†Zµ:C•ø ÑraRÔUé8óql¿Ÿx×»:¿ó;Ó……ÁWäßüæÂؚÑË:ÞJI&“~ô£÷ìÙsß}÷>}ÚïžI¡Â‚N”Û„0qV.="NçĉÑ&1ÞÓLƘHÃáÇ+…;§Dx’VóIRšÒ…BA¹¶¢K>Ÿ»)N‹_NwI¤HÎ ª­™£ ¥!œìõŽf2>ýé×\sÍ¥—^Z¯××ÖÖ>^¯©Õ:!‹EÉãS6¹W4,&„œ¼îP›)®ÖÁÊÔÐ=H€ ·ÈDŸ†îi©Tºì²Ë¦Óé-·ÜâD/Â9œ•ž –Û)¹;É™Æ-¢]éc=Ô1Î;Õ=N¥wÐEJƒoçÜk„‹"éH24ÒÅ­ÝzŽQ'7ºu:% o9CJò±}z«Õºþúëq›Ü 9;u<–D@JcNåtig­6í:ð´`²¡N_‰²0–¸– Ü$ÜœÑÀü£v¾·¦É[1¥×5ñ¢Ê¹ÿ¾Ï™ûqËd]sþþÏÁ¯üÊÜoÿöØø»Ìñ¸^úvBD"‘èt:Ÿüä'S©ÔÆÆ‚ð:èÝ1ÿˆ8Ë£'Á€Ûö)n‹ @论; o®çC¦Ngà¼ë5(r_æßªQTLˆ”\,umÙl¶Óél‚Ííâ­^¿×à ¥R)—Ëu:ð(ŸÇkkk«««^xáúúúêêj³ÙœL&S£Ÿ¹Q&ü2br]oFŧD½ˆRFÔx§»é.ѺÛÀ;ÃáPÃR0Åççç …‚< Y¨.@§ŠÞêöÞÇ qáô· ¨år9›ÍV*•¼¹}ÓV~­'E¾ÂÓŠª¤fØ…^xÉ%—ÜrË-kkkŽ ª—óWéôe·ÝöOóó§OŸ¾ûøÅ/>÷Ì™'“?6ã¼/­0¦s\É |·ùT¬?8u>Áã/ˆQÕ®ÿÚív;¦±Ót:½¼¼|õÕW>|øßþíßî½÷^ŽH³ñMJ²]1†›+8À ‡,@_Ä{®‘÷’î,!ÈÞDqåO›43…·LPíºˆG_†±ýèÏF¢òþw0Þ솜-À“zÀù|þâ‹/^__ßÜÜtJ~0­I '7Ù.²̉Á±íì5‹}ÏG¯‰NèÈD63º¿ j>‚JIÊá©¢W<a{O牲®<» æ¡©Q wÒ¡¬ãžY}Heî àjW>Äqü¤ÞNgrêšê– σz0M ½èý~_\,o[©TDk. ¹\n~~^…”š^¯×l6eÆÕív)IõG–"餹"®Š—SRß”J}ôĉßÿìgÿþþûWNŸ~ê™3¿Ùjýx±øã3 ’÷AG’p*Ž-zŠîL›Ë)þªðk§Ž¤&ð©gWHs‡·0ÓÃÎf³G}Á ^077wüøñãÇ£¦¬/(”’éfŸ)µ)¾©êà&D{Ê­†\ŒŠs_ ’'îEÛs2?ôÉÀÄG ©'uUÄltª·&aµyÙDÑ Ó`ݵhûîâÀh·Û·ß~;³hxÏP§¹ö -Ç„Žg:yÍÎØ°ÚÈ®ÛÁi­æ ñK§þð ÓíviØ0‚ øãSº$Ùº£ðÚ‹øÈƒ'2²õÄÍw«?"éyy¤ Óáp=Á‹üQ޹„-˜¨ê `ÑÕUÌ?8À<Ÿ›sˆßµ«…ž¹˜ÄÍr¹Üââb±X,•Jår9ŸÏ …¹¹¹J¥¢»ÝjµƒÁÆÆF¯×ët:õz½ßï³TÓ$ Õ¬­VK+m8;vLEÌ¥‡“’áð¥•ÊëÏœyçñã!„Of³×”Jy›(‚‰yD·1b©ÑÓ¦Æq~ ÐÎLãñ¸Óé ïG)vêd oË9½óøÇüÇl6û•¯|¥Ýn»ºWK†ç‚Ê®iæU;ÿ‹~«³4ÝŒÜûíþAŽty2äÔªFyfú•"„œÈǪŸ$ô–ÂL‰€«BØòÂv›/ª]¿œ4‘R…V•hµÞM%1ZÏ0KÙgß…ó„TË]çžðnŒ ŸêÂT €zÞGý¾P((õ…îÓmîkë:ð¾RÙîþ›`ÉFOتüiO¹$¦UÓIçF;žB†™ßUJY`µÛm§ÿù”œ+n‘7¸ õ„+üú©x˜I„×ív …B±X¬T*óóó•J¥X,V«Õ¥¥¥¥¥¥|>¿°°P.—3™Œ8ZµZ­ÝnF£z½~öìÙ•••f³),WËŒQ]áp(~y±XÔSVr XõÏÙìK‰ñ`p6þ‹™¦ËO ‰DâŸfD2E1owE$=l&ARà !Ôëuœ¤½¼ &÷‰*vQÉ9+®þÆÆÆõ×_¯ÃšŽ‘s·àPD"ÜZB}އïÛM·ÓíQWù ¥sQZ§›ÃßqΧD¡ÜR+RKÒ§ød+]"·ºà6ää”°–‚©ºyøñ¹éíçnÈÙlöÛ‘""ìU`F¡h‚•9»Ó`8¦§Aüðî(dMŸ’:¬í q3j] aÁ€4~ ~î;|Ç”®’KnŸqf „w`¸‹‡ÀÍ B˜Œf`G£Ñ£õ¨l6{×]w­®®FÔp7ª¦—„þ`0ÐqÑEU«ÕZ­V«Õz½^£Ñ@l'7D÷Gg¢Ï6±ôÈ\ O(¬*fªi6˜››SfïÞ½Ò`ÖŽ°J¥¢ûÐl6÷íÛW­VÏ;—N§ëõº¸ƒÁ`mmFq0IiP,ʵ÷U«De2ÿL&“0[]>}ìó.a›è†w1i\+0ÀFÑïib{ŸÓÐËe¯lD†˜Gí(j;4v(\JÎ}.Þ…Ì 6H¡óÔÜxÆ‘g€«—22åX0i/Ö#Ók•餰‘K¸SÓáV;E“,--U*•‡z¨Ùl:ƒ)ê®…­2ç N›>Þ 9;ÜËqå"6ƒ·yhÓ‘70P¢$wN+ôÐ\<ˆVÁÉI¨…BÁÕ™"ä`³iÞPå¤@áÊGü…èQ®œ~OiD’‘FƒÂ傹ֻ {.—ÓñÚl6E-¥eÂÑÉbÕ–––î½÷^ÝL}Ÿu K¯J…É|}¯b±xðàÁ={öär¹“'O~õ«_¨ƒa¦-æc°øòù­v>Ð<ñ^É~2™ÔwTÏFQgqq±\.çr¹}ûöíÝ»·X,îÝ»WØš¼Syp¹\N/¨T*™LfeeE¡ëìÙ³*kÔLVŒÑÕ–J% õ„²Ùlsf+ÑN7<â@’4xVîÍHY‚nŽÎq"«Åõ iQ²c¯Gµ3:e.µ—§bÔn³MŒâèEy0CU悃Éê°5<*¸ñRÄ£¡¯M#yÆIrÉr³¹½` €Žr÷z7JÃÇ=îq—]vÙG?úÑv»íg•–KJœïÈ+Q8Ý 9;öóð$ÝÖA-Ͼ}›#»Óéã è»IPëu.K–5Å»ë21'èã¬r Ú?Ú~à$°_Øb{³Ã½µú‘|ÐmôÛ©!òjôÛëõt:ëÒµAôÒÿˆïõz7ÜpC.—ÛÜÜ®Œ˜ÖQ1 Iœ«ápxòäÉápX*•NŸ>MÏŸ4¬œó… åÿu¿jTèh“7„Ê}4`ÚÜÜ\¹\Þ»w¯^¶oß¾………jµªkc2Ôï«¢P(\xá…zýÞ½{777Å„¦9_*•h®è¹ÈãuxÀÞpqt¦¸Ÿù|~qqq4­®®z<&Í:¦˜ªrµMxÞÃáP ®Ë/¡Î]è^úÛˆãîz¯¬ÊzE49ÜzUÄtçéñ2Öƒ\>=Ð2?äe®{˜ºx®C[läÈŸž€Êwç6Fëmûä©‚ú-·ÜrÏ=÷œ={V[¦×ëÁ5çýCh‚±;íÓŸ×nÈÙ±*'òôõ1rÚõ¾P ®ñoð‡h>Ù§»ÑAŠH÷ì"rm¢ˆ KsX3:ãçk“kŽ€ä\2ãî„Ü‹ªø¨3§Œ·=¢q"²*—Uf"„¢}_)G¹lš»yØæ êõzº†^¯÷À¸#– QCðu«>·ÕjEþ"ÊÁuÜë$Rª^.— …B©TªT*ú¯jê”Ëå¹¹¹¥¥¥b±X.—S©T¥RQ¹£õqÅâHyOųb±X«ÕÖÖÖF£Q¯×ë÷û•J…²’X®¶<Å™Ó1(ÔZ¡ë¦u²¸¸øØÇ>vee¥V«Ñ,aÞ…hiÔ¹îªsÓ½×…à7L Ê_d ]¹¡µ{8x kP0‹Ü¬Y9LwE: lb—¸²§ê’Ȭ‰¯7V©›Ó KÍZòJÈÓÓ`T>%Š,sþDÙ W¢k󯯬×ëȨ‹E×`…QÓ½¸ülÙµhÛù^ë‰mÆNpGX*=ÅB¡ D:QT¯( z‡Æ)[WÜâ)jýQ2sòF’‘¸×Oq@¹Æ¹àã Ò³©¼ä²r@ÌNg K çn$q‘½+§ÀÿƒpàÀÞ½{)΄­!i²Ù7,/ÿq³ Âî–¦^g#:@HÓþý~¿^¯×j5‡øççç—––„¼é}´777Uታ§ÈÍ2¨J9§Ž?î£]QÓRe´‹—cNè#ŸÎŸä¼†Q₹zèäø!ëóXGny0 zš£—Q"0ŒÌàq <Ü õ2¸ø€:ñµ‰˜¹öyíHÊ“…OAE•KËGÅ·À[÷סµã?Á¬§ &¢°Ýôn°ÝÂVµÓݳ“ñ†Ó–„‚¼FÛkÒ¥ÒZ¸1˜'šKn<ªO!M‹ šˆ5äûþ ¼I…1•\`GéÂs9 µÅCe(Á ³1rgVÞY[ m„§ôYžØê¨b¤Ùî¹h~€‡>d> VWWéOÐtÊ!oòMý‰:Ið:¾U4”J¥#GދŇzHÿU¢ u¶¢}¢#U ‹kê1©ƒ+ªW¼pù^gEÙ ƈê"¸:¾©!8»5ôÃ0£Sø8o'8{•$2±K]¹©¶¨E0Á:všäÅ\aÚõ™Añ±êNM’À .PY™Ëåz½žßI¾Wتq‡ÜGÙ©ºuºcbd2™b±8??_*•TÍ5Õí`>øTWBXÍå>–Ïÿt·{t4zC·û±BáÇz½#6%νRRð.•J^1çr¹……Îûï¿_÷JXŸp/Fu·Û8 ꥣÇ/Ájut l_ÅœÍr7*ô}Ê„¬g4ùèö^첨8Ž}äÖù`ÜoÛx­C„óÜŽŠÙéš>= §ü¼OG&£Ýí5ŸÏÃ" çªh΋Œ6¸H&IÃVÿPgŸ³V•…poï]ûÜc¦ 2'hÞ%€²rþÿþäŠj>N éÝ¿h~ÅGÓyó°u$˜f,½A'×ûæ2Òùy ,àç E>ºÝÙéÎ$zÀœÝœ/”&ðjhH’úÉÌ“ É“Ç6÷ù¦€³×[ ÄÏMæT•ù‚ .FµZ Ójµ*ÙºR©¤&€ =5‡pù¾zdÎ8 ßæSÆ”ÔÎÓ[XX • n¯ mEæ›*l§ð² ©GÝÄSûªƒÏz[X§¥·ážrÜ|tͽ>fºÀs)ܺ6b§ûW9[Á­<ÝlÛݳ¶ þöû}a~¶8ÇÒ¥îÉ&}gåóùƒv:cÇŽ¹“Ëà#I;Ôó)HÉ(piÇ IDAT`º,&|De»cSN„ C:æíw÷ø SøàfQâ€u:=:‚AÓòu5~*9¬x&…·#:ù´yƒMJëCËåraccCGNõ0d€Ú"u5À²}æI &ˆ¯ð›ø©TüTrj;W‹Ù&@‘ưHYê.è¦ÓiµZ ½€R©¤gQ­VËå2Ôy!ošñ¦Ý+z½¿Êç/?Ëýt·›þŸùùßZ_ïê^h´‹®L§ÓÑÁMA™L&»Ý®"z:Þ¿?ò©ú}·ÛÍçóËËË ¸(4Öjµb±¨¹1ñMÄ®4£Ž‡É‡x™‹V0pƒ›¸n`¡Ùl"ž¤üæÊv H_Ÿ¦ бó­ÉÇ‘9p¡eJ(NRfKQ’´´¨´Æ|ëE y¸‹l23jwúpž™1ÈÉ­‹D’\½†Wçˆ:‡`ï¹ù.0‘›XóºÕúÊ•Jå‰O|â=÷ÜsüøqÑònÈÙ±^N”‚9÷ÌQlv”Oç¨õL@'·ÏúxËÑíQ¨õ? f’퇂³¼Ü/ ¢0l¼5åãl !ò¾ácÏ^':tè™Ï|æÙ³g¿ô¥/éÔ‹¶“#ËÔ4‘DBDLЋ 1ݱŒ´à«ìrD‡,¼ž£ b¬r”Ê p(aˆE¡Pq@-õf•zøs¹Ü×Óé7´Z_*õ‰ Ïk·?^­¾´ÛÝ7™ gˆ¢BiÖÕææf³ÙT2! ¨R©è™‹Å}ûö…Ö××2]AGêÂÂÂÆÆáPáYò _ÀÖ»kÎÜ!lÓåÒ3==ŸN][[ûüç?/K\ï‡í`‰³râvNd2 l™—¸I­ïdèÃÖñrç·8Å"pµ+²-ïoG#lì@õÏ“Éd¥RÑ¿ý³œØˆ÷Ì)ùu|C`óšÏŒl6ûÈG>R§˜>*= ¶®Îb÷~»´Á#:oèì8ï¦ÊÙ×Gâ]-͆0ÓáözÀÑ⇂Š&l4Ë©4—Ëé—JíõJôµí‰Ä ¹Ü}™ÌëÚíj"ñãƒÁ³ÙÉäûNzíïÿþcf:{0ãƒT2¹òÒ—.»LoÒn·WWWõEô‰jËéÞ*ü(Þ¸†ŠÀ´n·›Ëå4äê[ŽûѬæÞäÔQ¢@Â9«¾q™XûtôM¡;YÜÇc©º"Ë5æ´|Ñn»Ä-J²¾ÈÙ>|;WDtE²7½‰Ú!.Qá N§N&:¿Z¶«D‡ÀöÞ 0šN›<÷1µ ¯H8EõD;†Ñn•³óoîES’® ¦Ô¤௅¶’³¹\½†€DãW7 *½N„ˆÉæAËÉfâLg2™Ç=îq}ìcï¸ãŽï|ç;¾‡Ý%’E ‚ú|«&ìÜâÓ§ ÆãñÊÊÊ_ÿõ_7›M 'ziúç,gš@@ü&,. Ãíî3í}l"b&“éõz°xAð'a%yçIÊv8ÔḆb±¨x¬¾Ž\ ô#ÀGæ’n™uG_L&©Ó©&!„Gôû¯í÷cná oxÔp8n4Ê/|¡îÿÆ?ØŸŸ¯þíߦΞM\~¹>Bj¤jHˆ8 X ®xÒºøKóóó,éjÝF]G'ºúT¢ØCPsx7ÑŸµr0)Ih]œ¿¤íÂôø —í\̦7‹+¢ÎE—È¥†ÛËl çt>ŒíP  T(µÐ!Åzñä=-†×õ@zæôчŠ {²°°°°° „Q/æãôžƒÁ Õj]0-þvqñåÃaq:M&“{ÇãŸétn¾ë®w¼êU¡×›\p_§rÝuóÇŽM+•Å+¯¬—J@šÁ䢇`0÷û}ÍߤÓé¹¹9õÌ(¶ŠÅ¢»” m‹“ܤÕîüxw£QDfKHØpž‹Kðy²ïÍ߬:æ½`ôFFzÕ,ä0¥&Žrõ IPœ;à7Þ±ÒÛùlØvÿxJj¢‘l# U¤}L—kƒë𾡤AY]:îv»là}œgy:nßÿBÇòòò‹^ô¢ñxü/ÿò/»s9;Üˉt2µ¾]üà XjvwIòÑB¯KjC;€F«£môùa7::G’åô•N§óõ¯}uuõÎ;ïô™(U´ <Íç‹»¯(“Ûnã¿a£úô!8ae®ú™4G÷ÜÁlÜxúžò\Z>ä•xÓÁCå€ U„’->j³e³YiBƒ Êc­R© æøÔ«×»5v»½¾¾žN§Ÿ7~¶Px©ô‹ý~*•ú·löÎdò·;ñ$77‡O}êàéO?»'“¹z}|è„Aõ(KÜ ‰sœ“KÈ £µº®÷,ËQù›¯1Ô)Þ„¼M#‘û™ÊèÐdaЇ+á3ÂÙ#Ù/sƒÉšyÈŒH• mF¼Ñè·ÔÛûÄ­^,‹f<úÖVõéBsü›ý¨uâóª ½ù„Ÿwv]òÎu—JóÂT9JÏÈàCϽßïŸ;w®Ûí*Ø 9;ÌŽ"£m®äþ`ޤùnüîÞχ„Ê#“Ì•—`^¿Žü@اÐ%ït:_ûÚ×î¸ãä4ȳH<Ù!èŽPC¸ºT´—< ø$ O•r|üi¿¿0ÓbH̆þôç7%^(D#Pœk ø´‰å.O¹ÜÃÇ}R¢ªº * ªL±„ϸ†£x•JåÑ~t¥R‘¬Y¥RQt‘×§z9z^z ºŒR©¤Ï¿0ü~>ÿ¤ñø¡túç[­Éxœ¹é¦Âô5¯i¿ä%ºÉ¥þçôuץ￿ùò—ÓtÉf³¥RIjž"(ÔÑáP §Éd"6šBŽdí]íØg>ÐÞWy%7ÞMÔ-Åa–nø'§§þÁ‰é#Ã,u¼Cg¢V#µµµéa°é íh‘»­÷ç¼bÁ¶×›Hp©xîÊŠ.fãÀÀp8T!)ÿ§Z׎–»Y5´ŸÃƒfí™Ù*§íŸ«»Dt×9L±ëÙØØøÌg>3[­Ö®àÍkQk¾,0.|_©«1@Ç,7  {@5ÞîžÄëdvW˜Í]Fnï:ýTgz«Õ 3­¶´Ö¦â0=„›àF0‚cnNçG‡Ñy}OšL^™ÏF£ß¿g:L&J§ÿ1“™ ágƒ?7ÊY'žó®Iå±Ê%"¥gr@‡uIBç$BƒÀLä)Â(ŒêÍÖ¨÷^.—/½ôÒ«¯¾ºT*Ý~ûíÃáp~~^,jED¿¥"2è©¡¢–Éó¦ÓäpxG:ýó­VfFŠ­_{íàÅ/†Òý‘_wÝÜ/ýÒpÖÆO&“&U®°ºº*ç`…F9έ¯¯÷z=…@V‹î@&“i6›«««Fè[.£1IõÆÀ¦cHmKú,ùÞ"r?=¿Ï€i>P W0Éó"šÍù¨rr©[j²U[ó!ªs×ìq «O 1b ª ct”·Õ--‹¬@^ƒ;wÉ;ja›ì´r#7÷t6G4ª¼²}Æãñúú:¼öݳóŒ5È$ˆ»ZšéÕ¿…¡¤ÒØc™ ÷<¨03ÌÄU<Ú´>b×5Hoíá&WeBˆ OcÃV'Ð(Dù¦S½ý8 ’H$F!\:];™üÖ¥—¾ýС‡zèù§O¢ÑxQ±8N9LéÐëõähP(‚’Éd³ÙTK t—Ö‰ûÇD=#耴Î?„ߥE‹:­/}^·Þ¨C#Êe› îß«0"í%½@^FÃArWç#ë"ã„=¯÷!Yt- º[#÷ )Ø¡ãñX–6diJn4)åÕ1ÕYm ázgHž‰T«‘)ŸF›‘’(ò ß 9;öÙ·¸3òÃD—Z­æB2ÄÕ%¤!¤Ûž†0¤¢¬GJŽŽ•S…D¾~©žéèÐ'Y‹„v¨ÃÀC¸f†XQnÖŠâMdŒF~GØs¢Î\—'“ø¨G=ú'~âGó˜›o¾ùÓŸþôäÁr8L&“ÿc<Þ‰3ýÐpBXK$þ2› !\3\67G¦à ¢¯æ]]¿O2ºæ¼o]Ÿ'w¶v£¢DeÓéteeå›ßü¦ämD’v*¼KöÒòarIu¸ôûýQ«B(_w]*î¼ùÍú"ù?û³ÒÛÞ¦óH¾Ë¬¢ ¨söìYØÒ;Õmo­X,ªžk·Ûªà1j&ƒ á¾æ™L†ãØY(Ü9î·kÞ>K=ÁÙ.¦­"jÍÈzÙçÝÔÃ{N\•“MˆînÿAØP¿Ýu¤"W7e§žó¥BŠ&Jº M8~d0¤kü•E‡Ù9|4Šá¬tïu…­®Ž|DŒj'^zë“ú.ðÈwCÎN†Ï5 • Ë@M&kÆG$J*ï̇ŒAÌY=, gë@#]^ßðË\.W*•ÔÚa¨ÓgWÁ©µ%ØÁ„>!•yï ÔØ—>K|n:}J¡ð‰«®zîsŸ{èСjµzöìÙOu»¿wÿý×§RÓDâ/S©ŸH$~¦\N$“åáðùÃá_f³W ?±Ñwg×à T¡Cp¢Rt˜ÅüS˜ô …•é­^éÜy}}}8.,,GÕ%‹E’eU]Á¦ÍÅQ.,[«ÕFëëë…••ÊÓž–ÛÜL/-U^þr]óà™Ï?á ã£Gß¿wï3ûýl«¥‹ßl6UO×ëu¯2ˇçÎk·ÛJf…ªéõõz]aFñF¬_u}0ÈàÜQEB€t+Ì`¦dœk¬pjPOb|Ä„åÇqý4€Í`š.Öç±àäÝG i^*ý"í€hç’  .o•ÙY©ÁDÜÕAý¹ öøù§9¸v\šqyH°°É]ð_@yDÎO A€ 't[Q„²ºÓönÈÙáCWƒÜÇMsU¢2‘ãbHè{ˆ†Ô DLâüB „%NýÎ…II΢íêš@LÚäªmQ4ñu». rÁ4²`(éÛù` ÙëùLj:ŒÇB„ºÝîÚÚÚéÓ§;N˜NuV-e2û¦Ó7ÏÍõŠÅT*Õm4ò!\Bf¶IÀ©|4ÊÞÌj(ÇW5 zÖOLeEÏ."ü¨ÎX§X"j€b$6£ç®€§¦9—>.häô›››gΜٷºúýßúÖ4—KèCéoû|}|ß}ƒNçÿ~ìc~Ï÷¼cyùuÿñ墫‡¾¸¸˜ÉdöïßOÑŒž›Û*+ ž7IKBdK§Aj‘ Nì™óâ¸Ô%-¾§C朚¤‚º3ÅâÑ&ˆSË­á—šÇ7‚…(FÊ$Ìt¡P_ô˜áï‘q‡äb£ÎÕ}“ŽB”>â= ÊxƒŠ.Úív»ÙlÎÍÍ >‚­.’˜f&ü4ÔÇÉ[“1I=£z½®[·v饵¾p¹¼üú×ë’joxÃû¯¾úðïþî3?ó™G|ß÷½çÈ‘þÎwöonŠ¢¶gÏž .¸@Öp¾P ÉpI¦Ói£ÑhµZõz}ccC»:Žf„›ìÓ¸tþ+…M]ƒ‹×¹FQ„Ê:5T—¡Uäâÿa¦~†óYÅà0¹í¹oت² ì rë4ký¹J š¦Î}ª“À1¥¶¼Àé•2(Ú¾×Üï|;‡Vx¬ûüFó>uŽo¡|=Ú 9;ÿƒº³NŽ?¥9„WŠJD»=ís¯×Ã4Œ0:WrX™¾…>‚ñ.v²˜  šÑctÞ‹+÷€˜9‰@;ßŃéfjß:IîËt:]K$ná×zèÿ¿Z(œ9sæ)íöuýþËr¹_še‘ù|þIOzÒ5×\³´´4kµZ²Û ÃáhÖ‰:.ô·À0P‡ù|^V˜nüD§Ãû.p@Öï¶Zè 냤+£²RRU •Ïz½Þ‰'TFhHb< …ÁÁƒ­ /\¸÷Þt©ÔþÕ_F‰DâõÚB«õ¿-/¯=º”HüøÊÊ玹âÞ{/Ed(—ËZ*Á„RtHÉxTÎx“ɤÝnw:^¯§`)@Ï {nOÎsçûºŽ×—>†â3%þ_ÃL ‚[A N>îJQQŠƒö„Kë+KC9)jÔ³¿\Õ†â€ÜßÕØÐà‹°¨6pžõj›xùå‰é4uçzmä Nd50¢ÅFiJ"·OÆd"XÛÐAŸI÷› $¶ì~…B!ª‡vCÎT9¨ËPÊéç—+º²µó§i »Ù0>1„g¥™ºµ‘¤ñ£B÷›²u8®¯¯¯¬¬¨¾Q…$Éçl6ÛÙ¿ÿ;/}éÁƒ5DùžJåÒDâý~ÿ×=?Í7Ol·sÆGÿøÇ;— ¡^¯¯®®îß¿yy:ÓE úÐÑh¤)ÔõõõÍÍÍN§Ón·¥P `Ð#·Ï`rñýÈ«\Tƒ"oЏ|¤Sr·÷uTÂIs/!ð!Êh0 qR^ Øë”6OÞéQy'RÁÆ-n‡J,!'Lgó˜îýXH&FxàR"—¹‚ ÿ!/µ#†ºk8àFàé„ÂV§WG5Ø>„:ÐÁý톜ù¡í= ä¿X…˜|8—Ñ­ !ÝÓÚñùJ¨´ÒÂ[s Ìêe:7ÄP霴ˆÍâCõ®aCgÒÙ“¤·È@qR`ê£ý ©âñynw¿ÿ·½^aq:ÍM§!„‹‰ÎxœN$nI&“!¼¼\þP½þ†;îøãd2ù»ïþÉzýþdò?R©H$ga/eîv&½§>5<íiå÷¾wÜjéböìÙÓï÷ëõ:țˠ†éÍ,JÝc›ú’x&{MlÂF\&Ù©zƒÁ P(ôûýZ­ÖétVVVŠÅâââ"ù„Xm/ïõÞ<7÷äv{o:ÉdVªÕ÷..îït®2™n«µºº:™LöíÛG(ÕÚCÁ^Í›D"Ñh4VVVêõúææ¦Ë,¡8fêP¢É0ÒyúÏzà½^hFŒó°U)Ð/:Ó-eW,FƒÐ y9µ•Û©|b  Ú:þ¦%Ïç#‘i·YrÈÎßp²´Ôûß(þʯ$‰Ö;ß™yÃ’µû€î eŸLJàù ¹O—† â<;¾*Má”ù5(êø°«hXû®¨r(qšrž ÖÂWÀ”Àµ£)¦L8±3p œ6°ÒgÎ#®ÈR Q²B­-ê¯8 –ËáÈÞ}wĘpSþVÝxŽi?ˆ!s3˜æ?™Læi…|k?kt·Õ:7׉Wž<ùå3g2™Ì£‡Ãg÷ûÈf‡Vkr¸ r~ˆýiO_uUú–[Ú/{Yá#Iõz O|âOœ8¡Qj÷O䱊Øf^pºŸ¸MÃ,`ŠVüh4*•J2Ÿ››FN§ÛíÊË`;íGÐÖh4*‹’‚®Õjû÷›SEÄP2™ÌR"ñûµÚÛªÕWw»ítú¥Ò%››ëÙìc66²éô(“™ŸŸ¯V«ËËË<ÍN§³¶¶¶¶¶&.\­VSî¢ñO¹lllÔëuõ·œ[W Z¼Ÿ¹@[äIš³a4âÊ{äÊÍ€˜Èñz ^;Pjd¬Ic?Ø`2ˆß(‡Ô)ê„3’ñA‚à ™‚ÃB¥áí¬'<¡ÿÚ×îù…_( ½^/ñš×4ÞùÎâÿú_Óo|$Öù^f‘?9\H»0a²L×& ÷…O¡]éLtÔqn}¤ðÆC@RU#’ƒ»!gÇBÁ{úc1™èm:ôõ à|ŦrÔ{Ms:]–†ÉŒ`j7®Èé•Ù›çÏ”_ø…H 2™Ä׿N5ƒÕ ¢X¬{eô¤¨^pP3‰óƒ”¿~ðŠóÍ­^:Þ›Í>v<þßÛíÂj"ñÙì“§Óƒ³Íê îG0üáN>þñso}ët:í¥RW¿ºøGT¯×o¿ýön·‹ ›÷zеßEWS×WG¹¤»ïˆ‰„Ÿ›V£Ñ ­÷_[[ûÖ·¾U«Õ4ªR*•êõºL»Ý‡KKKÒ=Ó¬îvy<þÆ?‹‰Dâðdr8ŸÒxü¯^øKƒAu8”©$µ<Úíöææ¦ÄZ­ÖÆÆ†˜ÐÝn·Ýn×jµf³¹¹¹©y R"wTò!yððL.øÐgð9}ªvñ‰ÔÃø+— ¤"Ÿs˜ˆJÈ3"K~šk'+Sdåó÷#ybüÙŪ=i‘`d—L&§OzÒàyÏË¿å-™Lfii©ÓétNʾõ­½W¾2—Lî¹GU#°GØfULトϥ/¨¼DÁÁ0ä÷´Ø ^ýA»âNôwCÎNþD³“QDNäÝK‡kèI*h(SSå¤M"dƒ˜Á0c»4 "Ó3`\2/kH&“xMö®½6óÉOfNžìüìÏfÄÌ’–..†ž€!¾EëTuåY*¥›tŒ†T*õ×ùü‘ÆãñWÓéÍ€ÇétšÍdnM¥FÓirVFN_Ý«¯N=ò‘¥÷¿?™JM&“§?= Z¿ù›á-oY[[ƒm‹ z²Î¡ðn39¸£I…Š:ånÄ ÀãñXóÿ¢S—J¥ápxöìÙZ­¶²²R«ÕæççÉg%•Öl6kµš2qÅ M¡O§Ós…Â8Ÿ¯¥ÓÏž;†*éô[æçßÞlRgp`­¬¬œ={vcc£ÑhÔëõz½®0#µ‚V«Õl65|ª*Í]¨y:Á<’Ik¨°áã‚Rú`&‹ÍxG†¹ó:ïÈÞ"Ž“pÞisÀñ^—ãô©`xŒî45ð|R;Rõéí‘Ìúz¢\ærƒfS9Äd2™–J‰B!½¹é ~— a ?ðé œ¡N2GhÁê¹—­”2ä’ÛØÐ9G†é‚]’ôwWÍå;u’J<Æ”“nÝL:ÂÒA‚ÓkOim'¡Rd l-[ }-z•çYpss½_þåä¿üKþÖ[‰Dùÿ¸õ®w%ÞøÆÄ¹sµª€Z±Òw‹¾¸>1""# €q2{ÏÙ\!„B¡ðÀhtÏp8œs‘¨&“ÉqIÓ»õÓ$\vY¸òÊâ{Þ“÷>ÜëõjµÚð‹_LW«ýŸÿùÌûÞLÒJ%‹þ\FòhEâ"ÙÉdR­Võ‡Ãa©TÒ¡ Fœ®§ÓéT*•Ñh´¹¹9™LÊåò`0(—ËšÐ{{ss³Õj´Š©\­VçæææææÒéôúúºÔ?S©T=•úÀââNŸÞW©ìÉå9ÝéN©€èjý~_Eª},a4öëELð¬]ÊôÕóWHrœ™ZAY¹KJ{ÊŒèaG“×>E  ¾-´Ó[›Š4.Ë¥º ²¼H,GAÝ-Hœ¦B˜<ôPæmoë]w]ýo®¯§R©Ä¡CÃ7½©ôk¿–ètƳàG1§ZÙç“¶W<žÒig¡©Êã@¶Žœƒí©Í¥Ó[ÀÛ &ÔF ¢q»ƒ.m»!'8ñáN¸y+E-h?ÑØ˜>ƒoÁüC#R¿ƒkP¾àÖ®l ïÙøä]Šór,Õêð•¯L}õ«™[n©..&“ÉÜ+^1øÓ?Í¿ï[‡ð IDAT}Ó;îpÆ0t&–¯Ó¶t›wz<4 ¼ #~°–µŽ¿Ë/¿¼R©wÚiz×—§„n:&¾ñä¾}­¿xúW%äD"1ø=úÑ•·½mb8Œ L‘È«kâ>Ù4oä~¦á\¥½bhæf0èj±!Qø¯V«¤í…B¡Ýn;vL}éD"qàÀL&£:FzÏÃápqqñðáÃ^x¡<굺Ôxèv»WµÛ9räg{½¥Tj8Öëõ¯¦RŸ›Ÿ¿vcclÃ*hjµÚÆÆÆ™3gÖ××ÅúÓ³k6›2×òp”É™ôб cVíå¾c>‘£gº:H¾"¨!X‘@2qž8:OþÃ#sGg¹u:ŒÎ$´¹Á:B ^ ˆ¡TïLx“BÅ’ØL;œÏfšÍÒ«^Õ{Ï{zþçãétøêWîç¦! mr™‘>¯ö<éŒ|¸Ýq€1åL0‚ù¦{¢ÀͤòFç0šBsÙB»òKO+wCÎüÐ#J~—@8$Þ$§6"¥¢^!±ò·rs'öÃvèT*µ´´”ÍfOž<©·rIsÆQ}àŽÁ‹Q:=ÎåÒ››’Þ§OöíËΰ&˜>¯à.ŸP˜|Ü/Jl1VáÔÀÿJ¸¶¶vòäIàHjB‘ ûʬ Ӭ硞ë¯ï‡Ð~õ«kò'©Tªû‚L.º¨ü0uל³L¨Ñz<™@»AñFir¹\VSW[ºÓéèðe¢"ŸÏ …n·[«ÕæææôÊ^¯÷¯\ðôo|Æòòr·Ûm4ú·h*•J©TÒ…ÉwU­ãÉdòÈZ­ŸJ}àÈ‘W­¯WBø÷túÎbñ×Ö×ù|·Û% ·Z­ÕÕÕ••••••õõõv»½±±Ñn·u‹Äb×{bàŽý~_Ç™RÔá€ß¥X¥›#ÍÚZ®o Aß/ˆXZîsC¾ïuŒ¯}® hª®ùùù'<á Ç¿÷Þ{AŠøC×|а&'Åùñêl1炪ë~›©3 ×^Û{ÙËB…k¯uQåì ê›ÿ*µõ^WDÛcÞ܇½ÄÀ&×´+ÐûNÄó9ýÜ´]#êï–BLJ゙z‘‰8EÙC’W÷¢a8.yåѦñ1õÈ¡U%3%ÚãÁ,èAŠ|Äsazölî#¼æ5‰z=ÜwŸb÷moK~ìcɯ=9/ÐWÖà´þ¯ (.%¢ÿëyk4kº6¦{{üøqæŠ|Ú”+×/%ŠågÜd†Â%?ûÙq¯WûÍßÌÜ|sØ»·òŒlƒ£Ž´n2óäèüCÓ`n¿\.ë:óùüüü¼ˆÑ8›)®èñT Ùüü|¯×;wîÜßìÝ»˜L~üÏø¥cÇ:Îý÷ß¿¶¶V(.¾øâõõõ½{÷‚‹ ? ‚¿\‘ï’3gJ!\{ñÅW;vÛž=?qüø(Ÿ?]«Õëu]Ãæææý÷ßüøñ'Nˆ; œ6²7öàƒQ! ¥ÑA˜Ë¡Ï´t&b'Ì@ÓQIø"ºÏˆàEãnîŸæó@dëÁ´œw ™VÇ‚` ûß´}ê‰{'º$¨«ŠˆÍÈý<¿ÅNžL}øÃ‰ét²²’šáä*ïP˜åz1˜îŸ|4%šëz¸Øn0ÑnF¶H¹C±C|þÏçUwð¤Ý 9[F#}š×ËO¦„&û¸–ËŒ£&â“:÷]ZZb‚N" ÆïÁææ&h†Wû˼%‹£v¯×Kž>]x×»ZïxGú-oIÔëÝ_þåôßý]æ¶Û[k,6RT7­Ò· +CÏ#ÂÖ"{S·Õq|€ã^!Vÿ!wísfž\–ûü©qÓM‰Dbôßþ[þÝïÍÆQÉ  :‘'öÆ:}D Л = [Ne6#W4F²Äб(œóСCG=¶²ò©½{÷¥ÓW¯®ž,þîòË_tÏ=…B¡Ùlf³Ùåååùùya5F£ÑhH´Mt „úˆ|>? ö:u寯'/¹äÅ7ß¼:Öf¶r:&NŸ>ýàƒž:uªV«‰&@㄃Œ/N?ŠS¦ î³ ‚F-t.&RF÷y¬®û¶ºùéAqôýQ·¬u^µèTºúÜÍÍÍÛn»Í§…¶‘á[2Áæ’q‚°ð fºó!ºp®éž:uÊáAÒˆ`sÜtM"z…ãu 0VÐ2ç{Á‰…¡îfðA„.IÁBÁŒñym:Ö‘ënÈÙÉÑ–©óǼ [í“}^[*­?&Ø•&#õŠŸ¹óõ{w~jC`u©4Ty|M;Uf4¥›ÍìÏþlëºë’ÇŽ¥¿ô¥ô׿>1YH¨äM,hV³Ê5âM˜ ¨2lá $°~gèdŠë媰õ|†<‚qàF£ÜW¾’¿åÝ„) €ÑÒ½ž ÙÉ©y•*—Ëív›é Òjå¤ÂÄt¯*•ÊÞ½{ÓéôGîÉå^1¤«Õ#ýþ¸ÓùÔEýP:½ö¹Ï9sF,8)R‹D§ìAØ©ê]}–´ ƒAæÜ¹çÝ{ïú`Ðëõ( ÔÂ9uêT½^o·Û@+šbJ212—©ù”¥Î2À«±Eî± &åJÉûQÑ¿ñ™â°ÕŠÅ€­ŸÞmnn®Z­®®®¶Ûmè^î/¥0¯GÙÚR¸8YÑY<°tšÃœ1Îgófl¼c*™cB–™*³È(બ]%jت—ãvNhf1€Ëñ{@1‰v4Õ‚©§Ó*ÛÞEÛ 9;rÐba¾ÌeÕ#Çv‘—G¸ÞK3.§±Ñ=ŠR!?¯½H÷v}äÿ†Ï˜ÞÐ3/]Cæ-oI>ùÉéÏ~<ƒDàï"îâÙœ_U¤¾îÌË`ÚkÞ£ö³Æï­›g+Rj{{sÕC|6¡Ùä°Ï<º=£DMDÛX?º6Õ+ó 9çë('bM§Ó³gÏ~ti©4¾d0X½wïd}Ð&“É+/ª×[_üàòòñbñµÚ|¿/â’õª{d¼¦yšáp¸±±¡bHÏ®ßïëÿbºƒÀ *pZeø&Z±Ð^üüuÖ,yŒø h@«‘d^2ù–Ã5n}H$*•J¥R©×ëX(›óêÄåì(7¹o®ŒÇèáJ´jüÒ××Ì^€±J±X|B¯—©ÕÞµ¼üºZíÐÜÜ8“ùX¹|Q‡oý¾ï{Á?üC«ÝþìOýÔ‹n¼±˜NKÚDNj/UA. ?ú¥n‹”:iŠp´Á ã8•h ¶`²I.ŽN¶‰È¹ngÓè2h¿yo<:ëS[Y‘ÎØd F¹ Wâ F°Z|›h=¸s^†m;×xO·C¼ÕÝþÃ-¨ièÂp{x––öˆ \š.cCiÈýqÍýF!*˜ú Ë}OHÜ„":X6(öÒ¿Ü 9;O¨V«Ê@ݹ€Õñ ‚©e8”ìZž¡°µÙédÅGƬNV?#ožAKpç9ŸÀwço±¸º%[T|‡ýû÷—J¥|P§•&çYÁú%‰3‚„1÷¡B/=˜{¦gå‘x¥?Yo« Pä%¬÷#u€²æ½e KÝMɰ©‡œƒ™Ãàp[³`†j¶9ŽÄZ¢Ö¤NYñt¨›‘æóhJB ®¿Û¯ñWdT´^œH樔Å(p öt„0é7‡ÒÓ³ç‘ð…|·âæ¡Ãtwæíýö,p7äì0ª¦‘r­9§½û°´ïyV¿–I%8µÛ.‘(1üå(w\acãÎ乿ë÷9pá:êZ²ìý!”¯åõf¹ëõ¥RéÈ‘#<~ü83Ò¡7 ‚–ë1{'3lÕæñã†&¿çn·K¤±MY¶ó8¢1 h]®·íbºîH RÂbЫ€Z*• G)ÆkÞS%Žö¿Š’jµšN§sêÔJ&óG>©×;šÍÞɼâ;ßiu:¨:tðà5'OþÛÅgOž¼`}]‡¾˜rú¦4«9èќױ%а¾—|zhÌ(\†EÍsÜØ¼LPcJO‰Ð.‚T­,ñA@u@iÜÜ“<(åý˜ŽŸŽËѱ'»÷ÈGXŠª,@o‚ŽÒ„D”߉s¤/Î [%yè¿òÑQ»ÈåSù‚H%T{AWŸ²ÛgWÕ½ƒÓäŸëüŽðtqo¯Ò b(m—±¶“?ÈY*÷þv½[ÏGèõá0ÈhÔ^wʯè•ÀÛ¹^(“{Qï¬r%(ILù1ê(ç./ØaÂ8/€ƒÃsÉ^¯wï½÷?~\Gtj/2âÈÄí5ßa¦lížz±Îwñ’çççy X´•äňܼo.9I“&‡™ (CBÓÕ‚%PN‡ˆÂF£Ñ¨V«ºÃ?{6×l>ãàÁá¾}ë•J;‘H¥Rûöí;xð`µZ=›L¦J¥Ç/-UK%MÒ¤R) …B¥R).•Jé>Ó£Ö¨ruÄ,ªNÈ9Ü¿Ùç6HS"g#'F‹X ΞKrÉ ¦>'2×§4©è+_oè\0SZP.Ûá*8ކíº|Dãöú€¾¥¸EØê]â¬ëˆ(áì‡1ðüæýê`¯)•Áˆ°ÝõénêèpUjMÿ H_ üÃ+ãݳc!G…¼“÷½;í®0Šh-BžU¯¢Ñh9‚hÓ_q@yÚ°Œ£¢P‹±–'Œ£’ý!:"øH#/‘Ó”^ \iÊB^˜L&§Nò±(Ú>Øìç‹]s4l—£ÌµHr§Ó©šÕj5ŸÏ7 þÜgkP:Qþèî#4¥`D¢ÔŠ%º8 ¹\NX÷SïP(”ÝkR Tøl–——ÕÒ¸4•J$¥Zíe'O^{ôèk‰ÇÍÍU«Õ³Ùg³¿uæL¡\Ï4ud‚@ßHZ5t,§ç¢²Îsõ^«SSü.¯KBÂIG{¾æç1éx§ð»0𛼹 õœcg^ ‰3CP¤Ê­C”Ï‚Ê ô¼¹¹¹´´Äð<±*˜²\ä·MÛ±Í:H{Q—‘Ïç+•ŠØ¨(Ë –Q€+yƒ"BZ©TR%¡>‡ª¯:Ô®T^Öhdþ?öÞ=Èö³¬ó}W¯î^½.»÷5Ù$ä .Ž@ Ãu`¦jDÆ£¥…fL/eÊ:ƒ£Xè–t¨Åò äà(x;SŠ# GQkÔŠb ÃÜö&’½“½³wß×Zݽºûüñe}òéweæO›ª³º,k³Ó{­ßå}ßçy¾Ï÷û}ïX]ý­nw£Ñ8VÊá?ýÓöG>Ò£%Õ4äªæ!zЇ€*’1z±@FFc}}xÚƲÍ¥±‰.,2òÐ$/ i´jÊ~£NXJ¹¹¹ˆ< wøPð½{âÄöÕWŸÿÙŸ]j4žý¾÷¸ë®€3—]vYFGc¸’Ž ¾SR „À–Þ;ýöêÜp¸WÆ ¦0á‡Ïï”±<6k;Sò˼kž¹ÍÙÌ­²5Tz?¼#÷¯n#ѰL”šŸŸ¿öÚk¿ù›¿ùî»ï~àØLefسýfÊ~t3h\ }ƒK›)G6æ-O$«°ÁŠÕâÞ¿C£\g˜ß€ÉN Ò›`ØÒ†®^¥=rgÞ<>‡Ð|¦!瀫þPž[°â?ŸHâIí=šи–­£©y}žVìš”ó ñT]µ4ºY©Îh<„oñÒäÃmØåQ¡”óÀe[RäÃáÌÚ´ˆ"Q!¢]ôƒSá@} ¿ˆg‚Í}¸ìç” ÁdxRˆä,ÎtœµµµT6@£9a¹Í@+Ñ~B$K'/"ƒffgºöÚvéÒl))§æææf÷ö¾u8üƒn÷§šÍ½ùù½F£”2¸õÖõóošƒÁå·ÝÖ~á ç;<ín·{äÈ‘õõuÎtOÎû¢Èˆbì7`­G®œ/ >û4´ú„jƒ8‘7˜Œ‡öž 7mµ7yæ¢Mëï½ÃF@—J5É$VÝ{ï½=öêO´4œ;IKó”X ±;œ{$è (Ñ*­LET³Ž»È}ÃñLƒÖÀRzb#M¾Eû–oä2â¨fè5ÏÐùÞ¸$[wnJMCÎU9€EŽÖš°H#§RÈ#¨l¬d žW’ƒŸ…äS@ºÏ8hÝïîü»]DV},ð½;[fxlA¶e&]ž?>Mi4ÝF2EÚXuÎLþÆ(ÌÈû®>XÝÙ‚òg ð²à¬[ØH§=4ŒêJDYYYa®e²éhô›‡œÃ´Óé?~yÕU³ÛÛ/s=þóÂÂÒì쬮îííÍÿîïÎ\¼È2+½Þò/ýRçw·uêTn­5?ìØ± ãÉì•••©Æ nmm…Ï–C'Ï­ßï#™ÌÉE£ ¨ .‘ùTŠVþ­ˆÞ‹¼ËÊ~c5ˆ‚–YìšU0ýá®KJ)1áv»ˆÕÈ ·°ìw¹Î©ŠÂÖò:ö†UÀ®Uõö™`,ºŠ<– j# ~-ÿÚÀŽýfÏ{É«8y`iBÿË{'–ûñËÓ*çà°~qOp R tÝžªI†h=—çÈ•­<¨$iì[æ‚°è³OÒëöl4j¯……tBùŠì´RTÖNí !ÐñlS¸Ñ$èÎ*tÛ‹0ü4À5l®ɧìWóùÀrZ]ÍP~’Ê,DjøH†˜[ª4Úõ~¿)ÿ62ˆ_†U‡%åìööÿ¶½ý7Þxl}ý¦ÝÝ?îtžÚݽ}c#ϳ÷áÌfwwwëŠ+Z33³<’¿_h·{½Þ`0èõz¶o‰#C;Kra9s͉¬ÚÊØÒÔ:A·+*'wì_GîŒìªKš‰‚“•«aX\a0,À†Òb “û³z+“ÿ‰ 3 ùî½ãµÃK·ƒÓu±C­ø43w½dz{ÙæÔàÒD‹½À-™m:’»‰<ö Ã\vÌ5§3ꦩ)¹ÍŒ5ÉþÒ^—ÙNž›´‘±¾v^¨!óÂF 1 Ñ+E4­`ÓÀrD"¶÷°÷j¦½âV«ÕívG£Ñúú:\5œÄl9eÁ ©éTWÀ17‡²†àK­V«ßï’ºxñbÆVÂ5dž¨“œ®•%;éµ ºµ ¨IPÌ9NRŒª¦\Äü+4:yÂÑ™=z4°Xê¸Î$rä²WVVò¦ºÝnŠ›<· Úɺ±±‘ø½±±Ð&^ѳ[[ß;üâË_þm£Ñ£Íæ[WW›33ýÁ Ñï/³öø{W\±ö½ß»³ß‹afì7¦C¾´ßﯬ¬äÂŽ=š‹L¤ìõz ÐÐëõÖ××àX»°`B¨ÀT%c‘æ?9‡2õ:ú_:°ùÍFp.²Ë´É‚­¯YfšeOê–9uÙžf0˜5¤Võÿ-ÜfA ô Å„*ëœè¨lO,²KÂGÙ Ô“È)ôI§ŠœŠàk$äŒÍBªÌ·Èöh§©KóÏÚiÈ9Èú&k}R~Œ‹ýðɰèûU؃xZ”Ùð†Y]”ýöhŒú EgÊà“=ôˆ/T2¸Ô:Œ[‡@I®”ËNj_d—’ÝŽïKàQ"h3=®4ÁØÎ=ì.c …š?0^Åê@fŠeÛ &l`Ü‹‰Qõ (ÿSÅ_.á6…ÅÎÎNNvÒÌÜ`bONŸL-¥üÄý÷ôúëäìÙíÙÙ½ñ™>¸ùæÖ”nwó5¯i}àƒÕÕÅÅù/~±”²ù†7´þüÏgšM£IÍf3ug^߯ÆFÄ,ƒpUfgg9qÆó˜Òá4pMž$+HZ‘ê\Ô$x°,€& •’c&íp– ¦SÌVâ4“²¶™,U9\ n3J YÙgøoÀËV›ºÕïÒ™ÍRY/à uðà`Ì™ÂI™b&I ý¤6*v+šµ‘Û§¦ÁùÛÿoC°nÞ/6 9üƒh‘0à ËtÏÀ°§5q††Yµ@Û$›D”j¼›;{ $€ð³Â€JH‹<<Øpb«ÕJÊã)¿ž’Cœ°”ôµ[43ÔŒ5gæàVÍ!“¤mÂaºs5ȇ²ðÖ–Áº¯ùÎ2îŽg4u»Ý|Téø$ÝNÒJÿ ߘÔ5Ù7¥íê¥Kÿ¬ßb~~ffæÐ¡C‰Ó¾ã;N~à³£Ñ^¯·7;{ü~ái²Ý.c  ¼Íh SúÄ÷Fc­A~eÈ'õIv©Õ棊!o¤Và´~‘Io IDATf:ц1ï†K2ÊQ˜Gÿ¢rȵQMµ;˜[®h(÷Ô1ÇlhÍÅP]MÓ€‰ƒU¼oJ$S¦l0O;§H’L“ÌMS By,ÈI³`*QÅ©¨ªð¶}%ë‚mh¬JÛäÄÒiÈ9ÒšKê’I1&ɾ› ¬!º¸–[r4^Ó÷l·ÊŸÆÛž¼Éä".Øðˆg>bzáY5†¬pfé#®¦2cŽ¡3,@“íËÀº‡Ã±f“'{Mà Ì9h•Mçi¸8ðáÛh4z½^î¤ìÉ|o\gÂ{Æ”PNíŒVX‡Fœ2"Bó-gΜqO+¯~uuuvvöÐêêÚîî“?õSÇxà¹ï)e·×{ü×~mnnîÈûÞ·þ¦7õßúÖg=+S 2œ4;;»¸¸h‡´µµ5´A¡ à¥]Mó¸n@T“×Ë~¹qÖÄÔ|QJ.2›Šé”(ê6‡ì¹Sè=+â~"=•õÌs€ufͲ½ò`Nz3š_Cð(²Ã$H,„h€Â® ^|æmµ†wj‘Š·VvéoÑÖ5å‡5Ú!…,ižŽ‘.ÞBíV7 9o’ì ‚!{…Lš½µ@ŒŒÃæH9R6*7”f|å°ˆ¿d–rVÃ]òOèdÂJàè·tÀš˜©`Vnr–g’ãA¯  XÔ°']!‘ý™AT‘ Tˆ‘HÐ'â ¬ åfº2¡ —RàòB½£’Û²·é V˜£ñ†1ËËËØmmm:tmâM~3lެ–ür#¸PÊ7|ô£Í¹¹™F£à ùOÇægòv/yÉìUWÍÌÌ4†Ã¨7¶··3-”˜ÚívÓ?OSŠPžk0_ÀPœ%7#Mm‡]VqÙS1àˆãŸ›d©½r z® é¹½Ž<ð&$ï* 3­qr<3¿Œ¡ƒá;†ú+ssÏŽc„̬y¾Ñn§ÆÏù·ì>£`e“SpøÁYÏ@`D L«¼YI%aÂE"ÿ³© „—7 9I~‰lí‹ËÃEF­¬u$ 6@“·`3çx¢ˆ]¢Ñ÷Ñè£! †$‘Šgr`_”û—·fïa0KHô`(8¦YÍN3õÖh¤-{ù3ƒ™ÄIr¹Sà (=˜c"‚³]¸ùÞÞÞÆÆÆââ¢9ë”)ð­üõùËofOžñ†##OcccƒÌ#oêììì#¯~õ#¯~õáÇ{½^‚JÖ¡¶Ûí½q«ÉUB4FPKò_±4ÍÛY^^Ný‘ì!³G×××Éy™WF@ò|mA¾Ï‡·ÛmÈx!¿„¡@çÒŒ^*Qà2r&w8R+£#Nöj I›‡¬ƒ\¡B3`·'—Úvº05Æóa³¹ªñÛî\ ”2žw!…œÏ,5÷,ÙžôÕRñ8¨xZDÎÖ*‡U Wf±³°©{*L|[;NCÎAV9°o«©ïôÁµH4èásæBy,r'KU‘Ï R5úªß½Üꤰ ÂûD™÷ìŒÏŠhr„ÉôË|‚‹&%9%«%Å!¡rªFòø@'éN,4‘מoÙô´M§FÊnK+´ ò±3XOý2ϧEƒi1‘Ìf£ƒÁ ]zwDÂs‹'¸M˜f|¥FjhΔ¸sògªäƒR‚4¶SZ!-ŒÐ© ÝnrH‘cÆÊ [j#"ü»:к3¥{àžÃTÍj«¦YÛñÌ–í|>¯žQª^x?;äâÅ‹ $Õ)À€‰¸¼¤ËÀc³z¸¤a±‡Ã¸-¤Dˈ³ÍÍÍàEÇŽsë•^Z°¬˜žíîîÆk <þSŠ•Ìv‹5ÃÒÒÒÚÚZívpf’Â9„Õ–v4%8Šg%Ð$QÈí/..fYæ6ó(VVVÊx”Y^–Ëé3vâLCúâ‰ô<›X‰$ÀŽ|öå3…º™ ,5—D’Î/0 %<Ÿ™KÊqlÂk%̇„eT™ÊØ#½º¾.lUÑ›äÂ|©eÿ|¿¤ ˜aUv#ÇëÄç¾GÈ@%5ŒÜ¦« ¬8ÔA£€^öOK3 Æøpâ"¡‘,é<† @‘°»†ÉNàáÂÌdî†Q‚bò˜„"Ÿ`r(±ÊtûÿNCÎ…½wƒíè·®vrÞ"¬V¸¤¨Xlk:ÊÞÞÞµ×^ûßù/^¼páBÎ)-è ¶bƒÝË@¤Û‰L„ìD\ ºŒ Û=â³ÅfÈ‘C(63ž§€ ¼L:½9ª@Õò|€#`3bu•²¾¾n«lðÃ94"¤Dú­­­‡~x8žâ» ^Ac%`…@¨ÆO–TÒ-4my9dÌ „‘ÈdͧÂ@¥ÀµQ?1FÁö Ãù4ÊwzÓ^ÎÁÿä%q°Â3!׆+ ÝžŒÕžNEc£LSÁd…£< ÈÊÊÊ'>ñ‰ååeˆ@N'#ÊaGQ•Wª‰[¤¥îä’ë¤áaIYˆœçë4Y¯Z4H”MþŒ"!ã0Îâ%@Þê>“÷·F„Ê‚3ÚCíòi'Ož,¥t»]ò 6¡yä>Ή4??ŸŠ$&lØúRi:t(ïhccãìÙ³RƒÁÊÊJ~ lPΧ6Í[K{™õ«‡ŒqÔbÓ¨0a†™ ùðB$îî®yN«Ÿ»Í†=‰4m€fi)‡>z5¦òL&|ÐŽiöP‚XãI#0k{vv6…BÐN¼$` äÏ~ö³_ð‚|þóŸÏ£ö›ªqUÆ® €“te&krµÉynðMX`„CN˜ßFÌÜNãQOÆ38rF5xª‰ëüC¦eOÞì4äÀk‹ f;Hƒl̹déV§Mh¼©Š†~¦Ú Ý8þ|Tîæ({}›¦žgÕâ d4–Ié>‡ÇÙ(]HœÊ~Û(Ó1 L[ùá¸íI¸‚,WõT+v™[£¤¨‚‚?hCbsꕜ†Øñ,‰ÊIØcs€í4yF˜àM— ’Ft¿ßÏ'dŽÀòòrð7ìs¶¶¶z½Þ¡C‡8’€ãFÝ“ièXŠYf îøÊMp´Dðr…Õ©‡®”(ÌY “Ëm<ä‹Ñª1UÏCb`é*܎ǺWýsú‘|¾ÛBü2—‘ß·[^nþÉ“O>Ùh4.]º”íòÑv±E£˜èãò:œ†¯a'êÙ Ü2,²jZ|{ƒØ!‚‡à¼ÓŠQŸ9V!HÇ»Äv§!ç€éѦ<Ú¼¼ «:ÀC†À8j Bˆ=€ôä™Zðh#µ£@FmØÎøZé]¤Ä$ë·š¬êñVí™jVÄXFÒpUö!]ÊRÉCN1t #£sGöÔ±ì²I•‚½?ÀÊh}C+  ™¹¨¬[FdÚvgggii)ƒˆ*ÐØÛÓEeåÇÜQè£'Ͳ[v> Ǥ5LPš‡æ-ÏK´žYN•ÕH2ã6*ÉA‘SÃ4ä|G§Óé ­³ !X*‹ØSÈL7`­8¦žÊ:6÷Ìêkä¼üNÜ·øåç?ç§~jîŽ;Ê—¾d€k’¦L n‰L¥ìq H¸GjÌêˆAg¾h&r¬Ýý²<‡‚_§…Fê#ÎÏ?L…‘³›(›*0:ÊÙÙÙhPò?0ðÕ”ÒĤ{{{Йc«×ëa;†]±̼ ܦy†y8©–rB]ºtiooïĉ¡)·Ûí›WWWC½Ë{Ϥ²ÄRî‹3¡ÞáuœÍ)T,…H™óôXÛ36»Óé0EÆì[ð=“Pø–¼KÄl+itຌgÞTévuü(«ªàD¯‚¢ #¾NìpŸó¾”<*oœ°¹0|Õœêñÿ¡˜V~¯•c¹N¶ÛÐ[xrrv‘c¤DO £v–Ó*çë%ä˜ ]A½¨ÊÁ©œkpbb[ioÚÔ¶Ôé¬~ëÚL2ÉÖXÇŽ—Ãwnnnûæ›wÞøÆöOÿôðöÛg?þñÆç?OÚ•6†Ç ø¾È|)_Üã_à&mÙ/¯¼ÙMÏ˹FÑãêæŒíLÌ®|ñ·Ë@‘ã\¥9åáäÉäbb‚‰.*c!-á6^>'ï%2‹pÕÊ~•8òš|W†¹!=É%ñíæ¥Ç³¶¶vÅW 4 Å O/•‘ tï@ѾpÖ@”Çù¦hVÞ¯6ÇãôAJbá=ØiÎq·Bæ6±Ø_lÐÄ3–qû«XœH\‹[Ðf÷&²rÛÉMB¬-h‹æîT¥¿ñÕgDº<¼Çƒº \ ±O­³öó§Ü$|VFP¼k þÊ^â¤Ü-;+å”ÉÐ3ÖLzrö5ò3„²ƒI$É@iPƒ>{’X5P€8”í ÝX?ç ˜9úm#˜¼~øâ^óšöwÎ_¼ØüOÿiðÝßÝØØ˜ûò—Ù-ff{, òKÃ8’+ÑI™å„®èÝÿÏͲ¼‹xÔ@ðè’㛘k“ºÜQ'0:I %õ%ý7믲øgJh—‰<\j0IºGügö[öb’pÈ_9y ñɰ.!’8™ó.p‹ÑkÛшRÃìm2}>^O5Ôʾ|¦“‹ØÓíU#Ò‰ìe{ÚV®nÖ6埓V‚ª9FÍFum(¯hàž…«69­ìT¦$éîåÀ|…UÉbT›ãƒk %g1„ÅeS Šœ©Ø?àæÄZ˜ÎÌÌtnºiõŸÿóÖ{ÞÓî÷_~ùòùóåÃ^{÷»çüÇËòr‘CAÑô¢)ÁÃŽ¶¦8;K…͉šÝ9i‘¶4GøW¦MS?yÑ*3©=P‹f¬çd»#Å/ ƒˆðE`Lƒ®JhÇ 5Ùh4ŠÊgøxÛôûý< f”%ää¸ ‰9DmøëÁÖpGÎLS“9„YÃiÆ GRjelåLV†‘L“Œ94©>s…Á!}î X´?…ã„!2r¬<Æ<^ú¬ã´¥BõDK‹ž˜–›â-ãŠÓŸt, <ÀŧVU·¨)]Rx& ՃѰŠP•& dä»›3ýÔÓƒ;Ùe|H€kÓ7X]”ŒdT8×¹¡Ü€§0 9 ©áŒ+Qv).À>Þ…VåBK2.Ð9DÒL˜clò"k)=óíkkkÿò_¶ÿý¿Ÿ[Y9~ÅG½xñâÞÙ³ ¿ôKïyOûmoƒþ›C@‘Ú?ל3Ô^;ø7!𫿴޳È5µ‚Ééa¢*àÄG€M|…_›ó‘­›‡¨‚G2ÕdlÊâT–ò"»—Aàöc-ã¹at¡ÓÎ…k¾ººJ X[[‹P¿ÓéD.³¶¶†ÞކZ1Üäå¦÷3??ßëõàƒÅ¼`{{ûÂ… vMM–§±³³Óív™ZÆŽ™Yd©ilÌ ëŸì¡IB2N^T& ™D#³ó Úívà¦<ó| ¯5¿Ã˪¦ÆEíË-ØÂTIW¢²¤ù–³ÑàƒÙG¼ì÷eG‹<“‡“ ¦ICõÓl6í_•Ó ÛíF\Œ!,;×ì7ÅY_4µ(k¯Ùl¦_H‘ ¡ƒuk‚5…~6¶H‡ bxm:ˆúë¢Ê¡(¶ ìã>ì–æ ÓÔ7ü‚=ké/Nœ×½“¯RJçïìÿЕO~r顇666ƒÁΫ^µùú×wÞþö¹kø†‰À Òögü[[;YT=C>v;×ê÷^¯7⢩ ~ìÆÜÜv¶ï¯;>žç|§ÿoÑaž ßeÚýyJ9DVVVPž»Ù€3 ®'³³³9Ð6­¯¯/..æQ¤}þ3Ò|+š‡Äx’‰ÂpÌLÚDÊJNY?¯#º¡ÜÏ |Òs9«ÿ„…±b£|©Y Né„Å=^x/G<½=d›~#¨ú`@Ъq“Éra´ @:õS¥ ÊW5‰++¹iÈ9€Ã:6ÔðÒ;SÑÄ˪B…nÂ¥“MSa%ðçœwépIÓœ)Û.´~ã7¶n¿}}8œ;uj÷¯Øú‡ÿpîW~¥1nÒ0ʳìwá…œ|6=ƒJ}fغâ•ýSºÆñù¹!IE˜ã5ÍyVv­'³v¥eûwÎÍÇœSp,ÉsH;o]°;¬É@`o=Vp?—”kŽCh>9rœ4„Ž9B뎷`»Õ¼â\dp$Z†« ÿ‡P0??3·@¾È×q+‡ÆRöû6ñ|0眪¦`d M ­ˆLþì_«aNvö3·ÓM;›q¿ˆ«ª¼ïˆº*&D,;Ct»?šã©×až[Ê\b„—Ñh´¼¼ìê$<‚½‚‡\TAèeWCB Š´¬àAÊ@=õ7å/¸B5Ohr’®–Mnö ç‹SZæ?ª ˜a?ä×0Ñ)ûí8«©Q;v©;ö€ÈésÌ=ÛüÕ_Ýø™ŸièCÃïøŽÖÏÿüÜêêîXÕÏ4¬uY"Z(ƒ/z «ù£•zè䇽½½§žz*¦–æ¡È ªâ$ƒÃ"Èä"ÆØ0@šÞ8ý‰XåÆsˆãðOƒªHÊG$ÈMAv?ÙTo¢Z଴(òô†ÃaÔ—c¾Ûíz|8`=#*ÊxÈBŠÝ°@핽¶¶ÞA–«TüºìÍWÉäé%r Ã?Âã«môà¸bÁJNê\íI¾ˆ”syÓ1’©˜]؉b貯# ãïužÖa8±hB#x²‡ ˜'拉ÈÜT·K ð†µÙ>Ð%ò›ôlÿCjk¸rR ¶ª>a3ÑËÅÅLéÏXCHlØÇè„Ñ6ÿWF™9íªpÖ4ØV?M'ƒ,&’ßDã{{{ ºo{Ûà—¹÷ö·ïììlíÈÈ©ƒ°}ÚÍгx›ûj·Û˜SF8aä+ G¸; Šm'Ó"*Wã‘ _pü ¯¨ôEÓˆ“ðæ¹­²©A MRõÜ]Z ÎþÌyãtF&Ii‹s½ÜÉ2j:O)yøðátƒÜŠÏ#EUãV}~âYÑÚN U ²G ˜xLíÃ64½„4cü9¼—<10CÖ6e =-ú7NwˆüEctÍžrÍZ2èd‚ã (wL§Æƒ}Gâ‚·žçê2¾ˆ_µüp4‚`ò‘ÇhU´± jö“ÁY®3j³Wr6X7k’„‹ñ©ô€Ø ð* “]Ðå£LaОó9ÿIAm~$ç8šq,Áå[ºo»G-pjD?1³ÿ§ì·–1æÀ&„¤Ä²¶»†1"><Ê!ÖFÈe˜e…?;M¶¥ ¸lênònŠsßókLÚN`R3ÑŽÙÏ0ʃXÈL”­ˆF)aóQÌ%#«€*ÉìNOg¸Ì¨Ž/œ4Ÿwðà2Ø?Øä1¢œCã´ÃŠ›ã=g$*P'üÏ\~}ŸØ—MÚÌäL /Éé‘ϧx¢÷DWZ/8û¹…/–éØÁ]Ì'gH9])§!ç`ª óÊ^SŽ8Á¬šœAvB…KÒaaow÷å£Ñ=ss9qâ¯xÅ 7ÜpúôéwüÝßÝöÄ·ìì<ÔéìmlØÂ„¼¾ýÓ,’ ã*ήhœ¿€ì>¡Xèd¬æF{ÏǼ+VâŸÉ¾®~Øœ>ÂÈzºÐüÆoÜ~ã{wÜ1xË[G¶þæo*u·_©ˆPÙì‡ìÛÐ%§9øcÖXä§3ä”ÓS~ÍâCÁo‚Lnn.5Jž3„cX‚æˆôÐ"òi™—îNÆçìŒ Ž•ýÖàÕ°A§üÄ' ·c':Î8³žXo XE” KJž)¹)¼)Zª yžõi{½ªR)r-ã8m‘¿Ðƒ¤ J!ȇ¤&6ÔF@"“ ¨Øq¶*ðph°LÓ+€íC›Ü€10Ã)Ã2¸NÒŽð“xùqU”ñiÈ9HHº‘“ Àîô9í3C¥¦–!ª÷øg+šÍfcgç›G£ß?yò›^÷º·¼å-W^yåæÏýܹÕÕÞhôªîÚÚ·ŽF%MæÝÝ ¥üx«UäМ`À£äNØ·œóÅ©%Ù½%G¨}¤æ‚Z@-e'T½1®«­mŸY\ÉéÜÜÜðê«÷¾ýÛýöoÏ^¸Pî¼spÛm{››Ï}ŽhJÒš,©šî Ù“ÀÂ"®TP¦Ù;„ÁÆF6`7È9¤’û÷z½<ðä­V+Úæ¸„MZUì°é0–”Ó*g ˆI€]|*Ð/:vûT.6·¾±Qé·Üb¤=ƒnšžœu¸°6øûܹ€¸8#sAP¡±šŽÁ¦3üëÒ™šÉý$^1q‚¢ÐÔƒÊÐÏ Yu”ƒÂ³Y§›”_ñ’ª9&žÎ`]3t¾¬1k®auZ\±3¬™ô4ä÷*«)8”ÏNÙLJ¡Ô`ŽŽ[”6NÍ[·ô𩵰pã7>ïyÏ;|øpû©§>ÿ]ßõð_üÅ«¾ô¥°³sS);3ó¾v»uüø¿}ì±+U³:Ø PªìåLo<«ÿª«®:þ†“šbWqóBgð ]ÚNÏè1ZMw7!jwwwwqqû§úä{ÞóÜÅÅÎK_zß}÷Í|øÃýÿñÙ~¿}ú´MˆQ´8»]áoH¯œ/ç¹èÓšd»”ó‘j%,nÊUrkKKKPŸó²666 ç‘4¬®®!( ‘â—±³_Y®vii‰xÀ5Ç­: ÓÊ«k4-..f6vþ?%—°“k4‰T±”bÕ¼júáз<»Ï-œ”YQÝn÷E/zÑööö—¾ô¥•••\sÍy21ÝAuD2eg ¤oyì<ŠüA7 ›²Âf‘pÕ4ÓO˜€À™3S*rO ƒ¨tó|(õ@é]-YÖjd¡·‰!n¸Úrrà'ŽI‘Ç'mÄ`Nf‘a{ðI+—¢™ž€ÚY%¤lôWF»»ÎÌ4ÏŸÿ»¿üËo¼ñ†n¸~0øì¾ðs=v¾ÛýâýÐo_ºÔüô§ë‘G¾õÖCüà5W_ý¥/})ào m¾ $È/8eÆ'£²*FOÃÆÚI#U©ÄBÏéÌ»WÁ†FÀŒ§Ùl®ýäOöî¼samíE¯zÕsžóœG}tweeác[úá^xûÛ¹l;¿ j~‰ÅzpÐ]áæ ©p‰ã‰,Ñâ¤tß’^2˜¹¹¹ç=ïyW^yå©S§}ôQ¼«Ã’ ®Ð”Žt8(40¬Ïà PÎò¨ój¥ 3 &U¨½^¯×ë/"X’B’ä…žŸë&èä¨c{Øð—qœ‹ëÏ¡Óé¼üå/ÿÁüÁÍÍÍ~ðƒ÷Þ{/µ2etò6Û U¥@|Q£'³›27#é0AùÉS ?ÅàyhxNbL%ÀhÚmF¥u:ãó§˜Z*^4)ö³£Xc–päzŒ ókö„œV9_èЬf*{B $ uê_“S‰[P«Â{'óE›ûGÃá³þûÿÈG>rýõ×ÿ>zËòò×]÷äW¼ä%/ù×]÷ñ£GïÁ¿ýüù¹½½Ì36÷”¼Þ™å<ù>ÿ$¶’–¼Å¥£r™ãt6&SlРÇ7K†jg\d0º¹¹¹ýÑÁ»Þuñž{þò/ÿ²×ë­¯¯ï½ìe›ÿøºãD$dšðe¹¶¤ùÑ=…ú¦ÅÃ†ÙÆtÈÙ·vñ^%O•)Ýn÷¦›nºé¦›.]ºôðÃãÄ““w5á,É bû“\Læõ¨âò‰Ö}{{{ee…¶„cü ^ð‚#GŽ|ùË_>sæLËW ±Ká¦ì>ž5–ßÉá¡KFN[Ç`ž?%~—¬^Ú O=õÔúúzº)p,ØqÈzƲ­AA Ã4 ûI“T%A%¨`´RˆLÄá+‚ˆBaEG/ÖˆYenMÉO/j »UÆZiðä‹Ð[íÔét¦ºœþaöT6’9ïö°!a·Ø6ƒœ”3ÂSž¼X+vÙÌÌÌÞööÌÌÌÛíçíîþŸwÝÕþoÿíÙËË7ÎÍ}ñmo{áC-=úâ¿x{{ûsÏzÖö‡>ÔX[Ë÷,/J çìÔààÞlŒµ†ÁЬ:‹9hòXÈsÉÚØ*œø49ZƒfX h;àp ÞÛÛ›)¥sçƒÛol8œû›¿=÷¹Û¯{]÷Ãn^¼¸½ŸZJÆê"é_þž €X«©&(ㆀâ@%+1×Ö·góÄë®»î:}úô#<‚J m„Fª+Äöp½rB%¨ä‡Ø¬Ñ‡†Š6ìê°¤®»îºïû¾ï;qâħ>õ©~ô£ý~?å‡òˆ(éªÆ'‘E29¿ÜT`ïóж¶¶˜!M¡3ï½÷Þ•••ápøè£Â]äCÈíìŸDÖâ†? Uî÷˧‘,"3Ȫ6µ@ê,T°Ä›—‹Èr)\A÷ í¶gls*nrf¨O7eÐØrÝÔs{ØNCNa9rd~~þüùóöGpã~2c?Њr ÷ûý¤®4ZLËÒŒ%Æÿ¾µõºííf)Wîì4Ö×{{{ÍÑèÚ÷¿qggïŸþÓ<òÈòòòñÑè©§ž‚½ã„Ñ*n:ðtq¸€ëž¹€.GOÛ±T øŸIÀ³è¬Œ&ÚÍe›9$[FP™»| ´yòÉÖü›ïxÇÎÆÆÖ[ßÚûÉŸÜ[YiÌÏ3ÈÒ²8À(fú’¤3¯_c&•Y$ÍÒvâ\åÌ"±MÇ›²»»{úôé3gÎät3aÁ,ŠfHyÔ€ûæÖ'Ëæèa 1É3ÍxGÌ­ˆ8‰Õ˜&Ž2æ­9§¶ž– JÀ\c\ë¾”Q;Žl4a1í~衇ðã] =ãÁí®þ”O$é1§H§]è?0ñ`ö[ À¢¸Á×ÕóuÊþÉ:•³9Lé®FÀ Â íHba{\Š!ì9²8MRŸ†œƒüiµZ7ß|óÖÖÖêêjÖºùKUK™Y[ ®){ >Ð^FpÇ­”Õ›››wÍͽ¬Õ²Æo­®.ÌÍ}áu¯{ñm·]wÝugï¿ÿþèû¯ÿõ kk¯ëR+$ y ¿ËCéä—±SºR摃Å!ïwo“Ft£Ñ5›;Ïþ̽÷ZhVd¹8€¾ø‹ó´‚t‰ 9lnnά¯úÙŸ]}Ï{ýð#3´Œt’­dr` xÜŠbí÷ïÙ§3*tz¶öª*c±dЉ|2nCÁǃAú7q®Ë£î÷û<husdàCœ FÄZ$FNëË AbdhÖE.[333gΜùÀ>ÐjµN:o7Þ)¨`ž<§oÖ²­ðÊ0&‡œÆû54ïÎÊÊf3˜I pSECÆ“I¬´[8µ™v-Ò! ÁÃCÿ<ì£hšœ]PZÝ8aï@W°ƒÇ B4Fѧw]<;*‡_ïÇ i <öÊâÊÕ{ræg{{ûþûïǺÊÍIsImxcÐ AOå«p”Ìzr HÑðMSJövwïh6ó÷ÿ77O¿öµŸýìg/þíß¾óá‡ÿm³ù’™™ ]dsdÇ„@»ê²R=cØ.ôDãMÊFcª‚ óÝÝÝá÷ãĉf§Óüô§aEW$>ÜúÆòLö¶ûÍ3o¿ãEb#˜¸þ:1ÐQèõzùöN§³¼¼Œ ³Œý(ý9eìA‚ª´RãxMaš…a¾FpÜNNؚĉ0‹F#ó“`À€püµ \§â1²‡ÜÏR†ÅµZ­¥¥¥Ï}îsæÚ³ü0ㄲI+ŸOÑlßJù¢ÑæäÙ9þ•͇.cçkÚLK“´ôÇÚ²œÎívÛba2»ÜV†°´‘ûšôó­üf,‘vÐBVdÛƒÃÛ3a>\y6#ðȶ¯„ì² ¹Œ}@Œþ†œûÉB9{öl³Ù nŽ¢OIc)tç€9Y¬G£t°Ÿ‰È9ÅL8¡óùÄÖÖ;ôçþÊ»ï¾qiéÔ`ð¹¹ûggËx2UˆËXµ»râ`j·Û x0e³ ÝŒÉ_¶Ûí£Gfð¨]¿¸Î`/¶ú¾ýí³§OÏ~â›ß÷}sÛÛ»÷Üã?ôɬÁfÅÃ⣯¼Ch&™ùS$¶wyÄùÅhKËBÁ| SpÖ»Ñe¹<=v2¹¦%îHNw︣ÍÍM<{Щø~·¶¶ò:òáæ³@¢sUçl ·œaÆý9ãŒãF£õõõ0À6KydíR2A•n0¬]”,ƒe©x~yWž³gÀ89³ú„Ê’yÕY«³²DÑÉÅPÐ8’f„áYÙŽ8Ѥ¢µo¯#éE 8F3 ¥Ê¨Ì⡦¡’f$¹ä4€i€Œ²¦¤æÆ¡J“µ°Â]MCÎërÜ÷öœ×d=œ¬Q[±´¡‘Î[(ª×\sÍöööÙ³g–ãýç|Š¥°\Êï ‡;Æ‘ápñ©§®ØÛ»¶”—5{¥ìHö™1‰H:g_»ÝΉ†›l í "L<~üø 7ÜÐív¿ò•¯|õ«_]__G|Cø4S`nnë­o-=4÷§º³µ5÷+¿2ø¹Ÿk^¸Ð|ä‘"—¶‡¥ðª­~ Îs¶Žï/]_‡î×ÑÅžßÀº½½½±±AöšwÄTi^+)-K.ŒÆƒ½©xþ'ÖÒÄ&€ÁÈŽØã½ÃœÄ"Ï”“IŒŠ&`:wHÇÞć•<=†ø§ Ç—ÌŒâgYrí$%¹Î † XBÇÀ ®Èµ²Ë%á„M½nZó*i”‚kÑÃR3RhÞr!Arí N²Oá …`T‡k¯íímª.ŽŽÀ€6±ö¨%P– ݳæ[åÒÆ@K5?br€>@Ç‘ÁQëÑdE“w-‰`WstVÙMðV|±ØEcr<æ‡ÆGm«ÕŠG¡5˜3b‚YÌXõ6p©t¬ôœ¡ºÝîõ×_Ýu×%ã>sæŒID•‰õÞÜÜÎ[Þ2³´4ÿ'Òív·šÍÁ ù¯þÕàýïŸÿÍß,ŸûœOaDgLf£Ö)cÿŒJ0ðÉ“'/¿üòÌ+ƒ¢šì´×jNœ˜ðAË*www§Oï<÷¹ó÷Þ[éhÀº†`ÏØ¤2º·ÒVM)é<}ÒŠwÜHaÜp²%vUÏY*ïÁB–­p¾“{RõV,p·ÖݿƢüAœŒZ€ o3Ø,™>O ëmMN¬ªÐN^SàŠ&('¸Ò“ ¬æJÚíöUW]uñâE#•rÙ¯A†Ån 8ÀáN§CAŒâ¤2ŽÊ§1 È]U££vi«„Ò¬.XÎInxþ~×P¼1vªH¡ŸT“´ìXa¬Œ½ÃïÚ3@V³±8Ý…/N¶š´ 3‹iÈ9È^Ç„'—°Ê=¬" p?­T·"'­ã}Ä3N#ø†óŽ Öà/-hHXXXã(‡&ØqPNüÊ—ž¶jeµyîܹ¶¯¬¬d¹g‹R@8nnn6~õW·àv76Öî¹çk¢–w¾sî‹_œûä'â/ؾÅàx‘åIêK¢¸ý"¹x›TBÕãxe÷r¾[ïI^Ow¡r%ºf¢" (j¾-_gÊ$E&l–”#îñp?è'þ›®ò7•À ËèÊ1–tž3kuuÕU I7Ï„Ò8Э ^¬È²²F)å©§žúã?þã~¿oª.âGZq܅Ǭ1MŠ­ºU™Wšii4¸™‹9Â@ÅÉ$ƒšLzf2e„‡ñH Ød„“zO[HPqÎã…àçÑ ©Ì,`Œžù~eÿ„P'¦•aÒ4䨍]Od±z‘#ÏlC4…ðÓ»à™õiÿ"„™lhâ r¦‡LâF ¢€½¼Í²Œ¿C`»xñâ}÷Ý·´´Ôét.]ºD#½Ùl>|¸Ñhlllà‡Öh4ZËËówÞÙ×»vWVgÎlþàv|pæSŸÚÙ?Ä•œ+Sy x±ìíÿÉ'Ø÷~RÍãÞUÙ?·Šö‰·tKÊG[NqÌÙâ¬o²h°€Ôºb¹ˆU÷,•¼)ª‡=^V”.Ä-fŒ¨¢\ÜT·Sd«šê¤ZQpó¸ú~kå‚®càÓ³gÏúFÂYöÏ%K™ U,œ~ ø=ÙŒßE S[.šM? —S.)L½Á ‰L"û”?çŽb ÓtÒ#›ö&ç§ñuŽ÷¾$È#¸ì¸Ì)Ñjµ²†ÙV[W/.ùîALCN]Ä™T(oͼujyœ‰a—z·œˆ%=Ù¢´„¦ l‹8Ñ*AM{[ Õ4õü~Äé6áÌÑh4®ºêª“'O>ôÐCçÏŸ³ÞÝÝ-«« ÿú_ñwzhþüù¹O~rsk œÚ s"oÄ:@˜Rs°æô÷¤Kó•9Œyæ¸4ÈÎÉîV?"Õª8]T-9ò«dãÌ"¥ Ï\4üÔ¾ñÕX—ʘùd®™&|…¾&*ä¹y ‘ý¿«å”Ã×Ðn²Y–JµSpò¬Û2ö€0fÄ;B/*1\¢ýòX8jé­Ú棺0_†[2´÷<Ín‚›^UM`5Ø8SG=ڎǽ€ c•É«< ÔÔVh{ nÀ¨‚P13K0¿$ØhÚŇ{r¸ÊI´`“daÑõðpòkôa‘à®FõUõJ$½›°@¬¦ùj{ƒgâG ^g_÷T²666’4*loo_¼x1ŠBâ æh4j½ë]£òOfÿà¶5 &qexj‚C5Cžðé¹×î¬åÓH§.*2 VŸ˜”¯‹÷(&(&V™Ï½tC®²šv,ÿšaë¸dî8f3H Œ˜'Nlnn†0‰–þ5¥-ïÂ#X\Û‘„Y~T©/=|ŒîOð£«ÎGNnàÍÛÎS¦P”x0 E &¶TL6·W°½ÅJ»º±ÒØ3Û°ò4`nzQÙ?Õ…OÉ.ì•ù“ÿ@r‰[AѼš†ˆ‰m•fÖÄ¢P¤Lƒ `ª4N@Û7y…%oM;  ‚ÈQ涬¡ÂÄ9>rDb¦’ï‚V›Øn·;pÁªxP%•(=á0ÿªÈÓÐÓ>MÝ©Æ9´xš€}Væçça%Qu!¼à™ qJiðe(r¾É^‡¤ºæ¤zª¦‹N0±8Íàæ‚P”Ê•ûʃÊG-,,>|8L!ûVÍ…ä@9ÆyŠàÉû?ËÏ4§Xçñ±æ†˜Òí3Ú¡—bÔ,h/Y'k¾² r€MIZ&ãÄ+йZfù"kQð7– ™Äojƒ!q#äÐèMFp]kŸ– ¼Yski,}`rž¦ñ˜Þã´Ž€¹%•ÅúbR~9ü}¼:òç¬Ô,k/3å ZÁ´áDk6›×\sÍÞð†ç<ç9î9;Üc°C’XÙùa¯¢JƒðÊZßÜܤ>«ú´Èë •±PŽ¡ Á³^’¢Ð–e<9‘ †÷UMîÉÁzäÈ‘v»çÉ&Ç·Ôíî|u®|£Ùl¶Z­^¯‡«RÞ%«MTË Z\\|îsŸ{èÐ!Î`¨(i}{ò·{¼<„ñƒÁÀ1³ËpÝ'@‚÷Ò„·ÅKþÆ£im@Grc^N%èQ¶ IDAT°\¼¶˜4Æë©¶ŠÈ·ººÑÒét0¹1L”7Ë?äI’¿çórÿZ,Ì[3VL©:;;{ã7¾ò•¯Ì%`È3!ö3„]æ-ûçÑQeV3-ò­`ºF£qâĉ£GšÝÀò`B›×Õ6ï””b×>ÓägÁv¿fÃzŠÇX;ø¨PcF#kÈÔaÏ) ²çy‘":Çtæõ’-‚0@pÁa±íǤT‹‹‹búôéóçσs=.#'ªì=|Z·ì©º4iͱ1¸jø$J§šz‘‡ ^áÿdÐÜ2£$ªöŸ'ïNåtå•Wnoo?üðÃS;¸Ým®šµîùÿvHƒîeÞ´·\ÛÒÒÒêê*] ¨*™=P!œ€3ö±‡4>ƒ¼V¤Ã·$ò›”Vž`M¨@, 9ŘÊL¹vÆ<†±¡vÚŽSC%i) À¬ O ee†ªnÎBXù'vÒsk¤œ©çòË>øàéÓ§—––p=€ìÊÃf¦Õø4ÀõÙü¾K·Ë••OXwÂê~RÁcù‘~•t/ŸöÁ`006¶a}røÇÍyŠ 'y©EX0Ðì”E‚ú×&톰,*’òÿþᆶ··|ðÁ3gÎDžbÀ,w#lµdV˜e̕՛›+)¶šØQö[˘ª`­u¶´-ºË~ëIf]¥™ìè’ïçG£Ñc=æ$=_±«Ÿ8ÖÌÌ̤˜(c×}ª±à{ÁHMluÍÁ¡ì†\²ïÜ>óäã‰]Æ> sû9Ü9ˬlõpÜõ;rmQéÛÝ]·ç£«Ï"Ó0ƒ-9=³„<”Ý…)´1÷ãOúŒ,d^q…âò®ñ ÀØ»*a-Z‰ÅŒÄ¿/¶Õ¥K—¼m‰.EÓC*⾩^„eݪ™jò›adÓŽ@½u•x ìw~38ìVœÁ´ø/ Ǫ¼¨mú9 9Ì %ôìK×¹fر‘R1>ͲM^–|9‡/I ÑKœlüO<hníŽa4"e5W¦Êš«yò“gè$L”.:Õy(§'tR2D7½M]«ÌåÀ»yÂ@dÙBAíÂ-šÉhõ"ÏÁ„œ7í^l-óåÃsªŠ½ìJbk;.æž¾À†tÑíí¸Äo§Õj­­­Ù¯oÒ)À¢.ß—Â*X˜åv¤fЇK½ dàÉÎ$¼q­[KçXä¿"W4¬d;¦!ç€{9à-PŒ@W\P³·íÆHÈa¯Z[Y¹ÚÀö `e€ïyÚøÆ¹sç@ä\^˜ œ%r‹Ýs'96Î)ûýÁ!ÞÌV~íN¯¾zþñÇ9@m­ïº„:‰ DŽFëBXkŽ é?¨´¾Ÿ¶Õ#÷ê¾ù½ç¬¤VÆ(¼å2ögcËÈ”2˜–rÎbƒÍb›ÄåÒp[6Hr–“?G ™»  Õ\!ĉ¼mÙܯ & 2ÊšåAMé„Ý©´i<°iwC"èba,ªOÓL kXÆõgñD= …šAGUçàêùpû¡ñ:,¾A©3ÑI¼ˆÄV­™îÖKäÌyz1ÎÀ:â[’Èç0VË‹"çÝn¦!§¸Uh’å$¶cxÍÂcG j‹$Ÿ. *F“;œGœ°x5:³Î–K‹ˆ“à jøø–гépÚÁÐe;¥OåÙnêîîîè–[6Þüæùßû½¹»ïnµZNg0¬­­åú;mn¾AòN.æ£Õjžr›Çe.¿ŒbÓ9£¹jNVÁöû1.á!YpôXN<=x‘ò¨âÅ:¢§®å![Öî⦲õ­HíV¨æPZQÒQ0¶0–õ -0 Lè´yœ~qe¡&`Ô&‹³ÊÄ«ḬèQù—)õ’ÒÁãðHï\!ïÝüs Í11Ì` ™ý Üý2xe®¹ó$öÖ‹h\Êþ)¨•áÕEôgðTmQ4ÜÓ1ªqvΉ‹FBp©¦ ¡àž/øºèâØy‰F¬`—(öóçƒG&Ãˬ¸••ž ÈÛŠq60ƒˆ+•½ù¸û@¬fpym“uSe ªU#& Û¯yÍîË^6ÿÞ÷nß~ûL»½w÷Ýfß™æç’…°Q•˜àZ!bŒ-¯Q¯À³~0ÕT•¢ÉFœwžª`¥ñC. v•T³ÞeÍ&A:‚bNœî·áäÏ]°çc}(µNE1pLe•:9Ä9ú9§| á[jn4$·`M•u³6xûL ôz WAP·ç›×$®ƒE“Ès‰ôöù.îšç8l±Wˆ¹Bâox;¬j8ºúµyK»â73ÍXHR%Œ*QŽÕBžÓãä˜Ç–ñ\WÖÿÁÆ›)IºTø˜FeB“’‚z•A56GRJê!cèœé^C *蟰CÑøHónsùŸÓ5nËèx]ç‚ÁÓR%$VÙÛãéLüæ›G·ÜÒþß謮Îÿú¯oÝrËú _¸´´„Iu¦,ÞQf+˜Å0c: IÆ=CÚÊ ;«&Z¤¼£3n`ð—¤.asøæü²\ÆetúIYºdnœ¸oaOñ ‹ƒ§©z'‰ q/5\æ{D%Ø—;#—Š_Žëzû\Œ'ˆÆîœN5ŒõU£˜ø‡dÞ&p.À9y€•¶Æÿ„µ‘7¼G+|A›9Xü<9:ÚívHÆ Ë„ýR>Ü*k§UÎÁT9$¡˜ÚzJXò}Ûk²L¡ ɦn+Ž6R4;;ÛétÒtµ_…Ñ c&@öÔI“K§rLá|ñ‚¶I¶ÓaJ¨hôPر÷vvv†ßù ø‡ÇºÝ½èEW_}õÜÜÜî`0÷ño¿ùÍŽÁÔFÈi«…n'i¿ »Tɸ‹¼O:xwíÉÖ)£)ò[­Öñãdz)ÊxÀ–?“´¶¡+û¼‹”¼xÙåš«¶?Ô¡Êi&ßb$Ũ±±›‚_Êš»X ³€4XáöÎ(ò¯Ë·ä®É´X“£ÑèñÇÏP;+œ<ï©/ d¥xV9É ° éÄ_ó˜Y©€<—†2*&s!€Ñ | œº„ΰ7/§î)ŒRζ÷ÌŒŠ ê̽L˜Û;Âqø¶ßûÞ­·½íÉãÇï¿ÿþ¯ÍÑyýë·^üâÎÏÿ|sŒþÓ—vïXEÁð©”mlSd“ˆªy£Ü’ó*ó” YÁ>(cïw>ª†îT¾×ϨÏ0dÇ]x¤gäŒûñÕ\D;„Òvrÿ¦šVîÚ7ß› ØX Á¬õ"èç$ 2v‡Å´ˆJxÀ"Góï=ÐLHæç篻îºW½êUçÎûô§?½²²Âª.òw좃OzêÀÝ/ûmªízçÒ*sŽøJÒKj=§š¾ãQån­…“B²e˜´šè  >™ÊÛ‰¬µ—GÆ1dÙC ­"ýŽ0˜†œ}ÐûÀÊÈôðI¤à­”É,k÷0ä¨ Ø_nqã—\õm‡žSÉ>¾è{ÊXìmÛç韂ÇQh‹É0Íö66:¿õ[o¿}pþ|ãÓŸÞyå+·_úÒ¹;ï,ý~Ÿ&ùç•AK& $£je¿8”€Ìiº§¿µ9–ø\µH¾ì!Ü@ µôeû=Òí·J©Be‘£s…*3„0L”Žîäæž ‡í£icFbËØ• ŽŸ&ËSìŠFÐMƒMUÒ!WÄÊÈŽ™èöXòP Só=Ðýíü$+ÊÓèt:/ùËßøÆ7>ôÐC<ð@¿ßg¼ž=;À{=—í鄯zƒ€Z½¾¾Î9Kt)šê!U.dÆOOñÜ­v» êX$¸c\žµSdë1A°|µh ¢(2úŠïßìõz'OžüêW¿ÚÊbFE1‡ÙH‘Â=Uµ=(}¼‚ï%üƒ)Ѳf6óp8Lw-YBÒóü×v‰©Ñ3%¥1XýÙÏ~vkkëÌ™3—.]b±›bãM/î!•+­,?óóóÙ­0×íšÃü\z*¬L¦µRÕ[Å¡ò]…ÅŽ,Ô¼ œå¬ïv¸Êï'b9ràa“ãˆ.&·`Œ=©g×Ôcí  ©˜xC’0—6¦]ßM¿á°0§eOecÒêN ½èEozÓ›}ôÑ}ìc/^d•ÇL‘×é3*’íäñÀÔ.„Æ7±…Òc4sßüéÊw}gg§ììÌýØÞõ®…w¼cg\$å­Lê0PÉéV¹ŽÒDõ€2h8Fc Œ Qç%"¡þË©‘R š¹GP±µGd nì¡2Ùæˆgœx˜t‘¥£mù-«ì•ÿŸ[KTÈY[Ò‚'žx"ELú‚¥”ÕÕUK øR“tI™ûý>¯,²˜<«Üøp84ñ z¤}¦]úT:‹ÆÀè¨HÈrùË_~üñÇ766 BÐP›¥¦ñ&¢±ð+9÷ÞqN*2+³ï`FÕ1*r¸ñ| ÉÁÞ°Ì)—á¾¹Oyð?«¡•k€o0T‘»– [EÌïíB4¥dÈuVÍèåÍyðŸÅ">\*Ö1}7H+tƒÝÉþ–——3È ²Vv>Weiž¥-YÐôœ+PbÐ á§ò-Eïb¸LÏzë=ï)û}¥Ì3¦MÅU¡HðØGÿÏʾÞbûNŽ®B×Ínå\^¢~º8¼NÏJók‹‡JpI„&5ƒ€±l&e@þ&üó„]Z僦yžS ¿#²½½½±±‘²¸¸øÚ×¾ö¿ñÕ€þÍÉàªÇÒüA•í7hßIOÈ%¬fçÛ·¶¶ƒÃ?túàœ÷¸¾¾¿œÂ®šÚ@l°"Ê=N{ñv\L€[T=Òs»Õ™‘_™÷€6«8ñ Ò•Yól,€–qGgmQ¹èVØÓC˜?Û‚ [‰^:4;;{öìYãØd%¸RÎʯ% }Ú„püÜØ€ìTôÒ %±Ø*ù6ò+7\•ý 1Áê÷û“KÓs0 ’)vuÙïTÁ‘JZWi9‹ØXv`Ùnî%{ÊŸ=Ø‘Ë0të oi“‘èˆÒ‚¶àN¸G‰xœÅ ½« C§"ñ<ŒÈ¬Ó#7 ó¼Pucn\›’î? ºÏwQhZ[SñP+£‡¼ ÒL›AXlhŠ0jÐ`V´ŠüëÇçô¼ŒuÄM®³u…ïÔüZ餕M%Šƒu~ßýúÕ/,wµŽ  Jg+ºàËä2Þ;©˜%xˆ+gwPØG4‰û­¼p25 •!@&ì@ˆ`ò!~¤¬[@ÂRÊÊÊJ5îÈ .Àļəu6vòLë 2ñt(œ7yæyª”‰è4è3%Ú‘!-,,¤X¯=ê`O[˜V9φmRöKÌ8ß-¼€YkÃ{sa,Íæ²³&ƒ8»…àÇõTÆÌÙêN¸`Tég«ÕJqfNv~0È1-Ó©D0tnA«¬³²:†»kVþ–ñ$7O6¢–µˆ•™GÔjµ°¯…÷Å+#”z5B¯ÊqŸG¥²¤õeskbé«TÝ€Íyój2£e– þŒVRžŠ`¨ì×hW e%•uâñÞå¬ËšáC#«¨fǹÂc[ÙŸ$¶ä¹¨trÊ$`U©Ã×hË¿‚à@ÎHM§f]‚‹: ç“©ã™Âgçc¹³³³ƒÁ ¯Q$Ç+ Q“Ј7ÕäÀ……°ÜJÏõ+ÔZ8.Ц˜¡çC§’Üó!ð;iÝP)ÉÆç}ÙÀ×4ŸŠÐÎQujYÞ]"tåIš?KÄNÉ)È4ä0°fþ+«ÜÂvïÇ»Âe \¦2Ö63!ÊÙßä^ó&åìL ͯµvízÅÎôõ»ÊaWˆ¶½R wLÛσóË»zÒ²ÒIXÞQ Ž6aRƒ.‰¸îÐxºsþ²ÛíâTï©áhî(w*xÁ±ÓD/sIðßÄ3¦Œ‡ €qbÂG÷ ^öZÈ%¡ieà#&¡~AæÛzÕoʳ½²€Û¸é ˜‰ M)º<ù¬=«j*ü¶È*‚*ŠirдR-,,9rdvvvccÃ\5sÛÊXRíÞ$Yò§ô“<+ݾfvYOÃU>®§ ó€®ì2ÒšªNBï•WIfæ~+ПPÍü®fx—ýSyœ%®ð9£Ñ(ì!À7{NZëNu9ÙÎ1+—•j×}v"ʬ~R>Á†ðv†÷ÔétßÑØ„€K@\âžP5ËÀÍaßQ¥ÿ òE›b¤ÞSD³«îK.É·É¿ªL³“Ѭ°gŽYu˜Êþ)–(Œix /\ç™™™Ë/¿üèÑ£&ì¢GÉnŒhœ.©¥,0±hþBÙ?Æó³)bàPÑæ2H–‹œ‡ÊØLaaaÁ£V…ä:tõÕWw»]æûÚ 8¹:z†›=XŠŒÉmÍBwÊÒðÑ£G»Ý®ùåØzÒo÷,r[.±ì)m rP¹$ÃYCÉËoÆÁ6vêZ§•"¸w 5>ÇãýZ³°ò`=©ÖÑ"ÝÖ}à`«h)lL7;Ík«°Àn²¦¤> 9r?Å"HEbBÚB¶5??ùå—_ýõ½^fFtTØ=ŸŒWàââ"¦Üñ)ûµ“E3r¢¥ñcÐ{{rºmÖn–&WK~Êò…ýläŠï® g1bòÉI½¸IVCÌ®r³lf;baÏ|âĉǧMÊI(‘­5×××i>Z­VÏØ˜Îä:w} {öW.²7zn%iŽ3†jã\¤^¬XÅ›››9³Èf¨“!²&¯¹æš7¼á —_~yn­Ûí9r$!ÓYŽõ§ gœïø2`áAãæjã Œ-§¶ÿä¿é›¾éÖ[o}Á ^™`Ù9>Ouii©ßïCº!§dô*P!ý!»ŒC_$ÞTžª¼µ\Oö`ð ™wSËÎv_Í t.uaaÁ&å@ŽåÉÌ<^ºŒÅ§ö»ÂæÎÕžž¢’ÚÔs¶ÜDzï0…Ei¥œk_åd¡ûø“!-ý_XX¸å–[ºÝîŸüÉŸÀ~Ž+‰›„žŠÈ‘º³³sáÂ…J"ƒN†a€™àOîᅉ׶W¡÷&U–fhøc8 S£Ðù¯:=î{©ó‘Áí›ed&Ô,Q'ß…w>H‘» ¹ZX×£ÑèüùóyJ|å]¤>sÏ$˜@W늰êmäQW”$N Þ©q°³ 躗ý:Y©<^ûîììœ9sfmmí©§žÊ÷¦z)E¾êôF–)-FGá;Ñ"“H£ÐÌÕ$™ ‰Zz3 öcðSY· ±¹ë úuA’¦ûmIWÑ,µd=žIÜh4–——q¦)Ï$Ñ/û1½ +<=€»Åi·XhR$H4j A©nr”½âøà`õ‡|^Ú0­ìwÔ/šën3OÁøÙílÿ‹4Ûû]öKØ|‚sv@šªºîœ|ˆEWžoÉdjÏË ˜--Lš\9¿¹â¼¶leIbK e0=yt>ÿСC(ÈZ’#ƒ©†übU—GcÏþrE’X“ÚyVý~?S3Üœƒ«I!H4­$œ†.=ŽŽTL"ØžÞYöUã,ràm¢+‚^_dv•õœ:ØŒÈxì—lRòBƒrÕ»«ÂVwj&޵K¥ÜùM¥€¿Êæšœ^4YªìŸi= 9ÌX«x‡–›5cÇŽÍÎÎ^¸p¡RTÍ[Š £è»zÒA‘Ú5Eªç_€$&Œ®0AÄb$îóÛö¸B'ÿ-¸“îþVÓ IDATr~õ¬o*/Ï%Þ<|¦*˜5W¤p¤†#—O ¤’ÅwÍBou|-2á•å¶s¢•1–Sç±0üÄœÂs Úö¸ú}Î5ZD6z(ûGÿÍÎÎ^sÍ5ívûÔ©S!ª˜ITæÉ°} S““Ä*eUžOV „È&¿Ø­¼Z„&ãX3ä%”ÈÈO”Â&{|i»Ýîv»™ma'Lмap` h$à³É5 Ä02Wi^¢NªxõÖ˜—±4»Ï#-*ª­Ã›½é*ÂÑÔðæëâÈG|¦ì­­­e·gò+AòÖv»íe…ªÙÓÈ5Ç“§g‚¼QuUkWÄ 0>³°l4Ã4­Kð.s·Šl¡Áp²ÃíAfM ¼m›b‘ôQ¸Tq7×Üét<ÖšÃã/š%UcÙ„Q÷°Záà@t’“Ô-ì…¼!ñØ·–ªÉPžLúÀ”ŒV6%éÎ1 R‘+LxèÂùFä5^G ß¹LÅsçÎe%£ìIY–>Aµ–âl…ªFá›o_XXˆ¾Ý¢`‚e`:Fó¹=Éóa™Á°ßÙÙIK&[ »}É(ˆ ½îÆñÿÉÒð¬r³Ê«£Ñhee…@Èp¿ !®pkæ¹*öŽ¡o—°$[e¯³¢ÜoBµ­ÿ`è„ c™3_àçùŠdºæ.NN}†œƒ©r0at€’oÅÙÙÙ£GÞtÓMý~ÿ‹_ü"|GŽÙÙÙ¹té’û+N HígSiõÉ íŸˆx{s2ôv»îz®n J=â™jcƒù:4f*gɦoD×”£Ù|Yô‰e¬Ó®f¦‡¿¾¾Þï÷±R'~d÷bÃìŽs‹J«aÄ$Jh” Æ»óºÛí¶Ç¾QOi <ÌÜbãõ,Df‘™¼Çøf‹åjÎSvÐö€öÆáH/¦VVNØ~¿Ï©íQÍ~ËÖüû¦xPÄx³l‰—à<6œ†CXMå¨tZ”m5›ÇޱœIxÐ{ždvŸËܲߑ/ÚvŸÝQËØ²Ú’L€nób°æ«Pk€P7m_dnft“³€]=ƒ±»£“‚ÉBä¸ECê(ÇI+«fjÕjš†œƒéå0¼’Œ€á`821‹úÚk¯ýÖoýÖóçÏŸ>}:,ûÊÆ/›ESQL’1A„Šxñõ–§›xæ‚OOûUW2OâEº=xH±9áF›À&· ‚kð±’Ï_]]5±‘ÍqÁ <>>B•¾QÀåw,8¯&I§3ï#5Î["\åÚ’ƒƒ}^A¯×ÛÞÞî÷û&§1”·VÍYÈÓÈ*ò8ðJ™kÓnø„ÎÖí/àÖz8ÍVMNá²Z‘9ípåÍ:)šfæyçž­î©t„®µÖ63ÜǺ…ÊÅ‘j¥ÌÌŒå¸æT=I¾ NB½JèWË.ûg~—±ë¸.[)hÙ?M˜W±<²#Ìø°£¶Mª½æ)\VÌ 0#ã£Î4ä”RÊæ«_=¼õÖÞïýÞÖ˜2d¥NÖ}ô±·yòÉ'?õ©O™oVÆ£« N, ØôC[äKÍš@ÂB:džaŸNýiZ•`R9*2dŸ˜W•ÝH£ÑØØØ0 åÁˆöpZJ™Â§¡¨¬$éÓ8dAç‰óÙÛ€òPÀãQoý5%Æî,¤(ûG‰ä7s©0ׯ¿þú .œ9sÆG¿C¯Ûlú*ç›WÂP`ª VZD⓯Í";<:~;·%;A$ Þë8DA@YŸ¼Ê*ŽTóˆÁvIÝR"dá{Ù¥ËS«ìf%ÏÊãÚÚÚÊx”ª`Ñ@èìVà–=ik²‡,ŒÊ?—}îêæaÛI»kBþ4ääÏ_”ò®¿þë™Vkø]ßU~çwf&lˆHgRƒgôï… ˜¸Ç– £·È‹³2«ÎÁ«¢„S²Óé¸ÃYöûôÅTd3k2œÎOœ€nH„|üüç?ÿYÏzÖg>ó™K—.qž¿£¯:«Õ„:(EÃo&í‡'ÇÍ™<êvq"Pž@TML§÷˜T¼S‹rîw:ápˆ‡<é°ÿ0 î»ï>:À¼J÷¨ÌL³C—Ä$h¿qîka˜~6êv˺ìWû:Ò@h³%ZûÉT"í±L—)òÄĤ]‹ø©žéë¢Â¦‹Éf¸,€ÍÍͰÈ|¼ÂXAØËÖÈ{ē֑Á.GDVNžIº¶D÷ŠYé‘YêU‰àPWÆÖ2 ‡Ú Ôü=ðg^S nûvó`9ñøÁ'É?®ŸÑÏ ’H•¾ü}þüÿÝ}àÿ-å®R~¡”ù_ÿõÝnwôæ7Û‚Âó6Ê~cÝápˆ®ÎÛ ÈuòP0é~r¸l\“ªÙEÿs¶ÒNÍCaC>YŽÅmá½é•üMxI3Ñl_¼xñÌ™3L>æt3m„…ôD> ¥$Øjü %¸ G “,HòÀf¸' ív;\5V{¥‰ÚJóÉUf‘‰ÕO`Þ/®€@Žöþõ² ô_‹=l†å€D•é!U0_ª‰ (C­ú4nly¯—¶¡1áuáèyK¹ËÄ6ð.‘ƒ°N(‚Pi* ÓZdÕ]Õ°qI7!±9: 9?/åT)?QJæ ÎèC¥ÑØþ¨D6œÔ§fÐ#_àl‚cq8ûŸ€} B•zÃVoÆÐm 38Ô,ëQh§›ÍRöÛ[Á‡\kOÌlï3gÎÜÿýƒÁÀK†žÙIÉß+n±+‰Ê~Øå8¹(¤¸/(¤˜¡´0Ýl,NÚÛÛët:ßò-ßrÛm·}Û·}ÛUW]…n‰–€P”•ýúX 7\y5†Çà çWnœIç D5O<3mhWѹqIl–.»ì2—˜äìp° §¯`U‡½®!¶À6àFº½e0¬®®âçof\csã–™ úîz¶:ÍÜ–Bä1AíÈÏðv²«›‡oº dYº•bò…—¨g™[ákJQE˜ ¤”’QfÑâXHŒ¯ö»Ÿ¸U4œerþ¾þº”ÿQÊ÷—²PÊÑ£GsÐô>ñ‰Æîîè{¾§²WÊ©ÔívßÝêÅК2gŠ8¹Ùâl½”2Ûh´Ji•2··—ÿ[h4ZÆ|)ó{{MÁ,V>‡SŒß”ÿ*ýš _6R'ÓÛâׂ³ŽGbóÜUºÓ›Íf»ÝöXU‹lé–ÿŒÎŽ!wû³÷[LVö4-PJžÏÌÌÌêêêÒÒÒã?¾ººZÆŒhP -°jp#É%‹Ä¡.[s@ç`KÁ§;»ïpbÚ;Õ†o¤Þ&eÂ\€-YÆ6t Š]‹ÄÿæCºÄqœã¹@©T§\¶ëÏÙYZ¥P ©_I> ö¸Ø‚k "D"t _^‡+ºKʆÅ•"•¢™ ¹p%’¬d}: "H#æ…À]‘×ð"x ãÉ]pƒ®ê\u‘ ÃQ²ä|J’>˜Ÿo.åT)ÿ¹”ï-eeeåܹs£Ñhë5¯Ù}ö³Ûï}ïîØŠEsõK_ºÐë=|×]«««8¡ÑE¨!ì(Ó@ G¸ÇNw‘®ànn~ûÖÖR£qtoïÆRÊV)Ÿk6K)/ØÝý½Þò¨aZ0ŸŸ ³Ö›*Ǩ¹¤Y¸iX Ë©MØ€/Ú`31›’%B“ü’Šf»ž¢'œG hàí”ÞrÚ¿üN0¢$æü¹:=#2ÌtÕÑhôgögŸùÌg.^¼øä“OÒU2:ÓähÀäúsD'*ˆÊÕv«ÀñðžY9t\0> _Övù»“ëÑK¨Jᜰ¹ž˜e§cÈÓ0ø^¿ß÷`JNd¤5hGs:ûÄÏô6G^5 ——ñÝå´H íV«ÛíæJDÛDŠ j** h8PÕ³xŠÜ¸>[XÏ@‚M€ŸÂ¤Ÿ{]f~2h'¹ÔgàPcÈ (g«‰Z(¸sa½^oss3T dLFkÀýB¹œ†œøùRþïR~£”“››kkk»ozÓî7|Ãüwìs–§ç³?~굯mÎÏÏž:5³¾í=[Ñ“Œ ¼Ú¦ÉD8Ô 6ð¨0ëw·Z'J¹loïY9ïvwm4în6ß½µ5777?Fù“L­¬¬NÁ…-ÇAo‡4 H h©C -°c˜u6GÁ:µ™u£Ñèðhôæäõx°‘Šÿ½7·ô¬Ê¼Ÿ=½Ï>çTU*$$!!I%’A›«‘´€jdhEü”¦5LJ°AhQ»™DD?$‘A¼hˆ4ä£ C4 B”0ÅRÈTIŠT…Jª*uêŒ{8{x¿?Vö/¿óìèÕßÕ˜ÃE¿ï¹*Ugx÷û>ϳֺ׽î{4}¥^ÿ¶N´M=…&â†p¥  ªÐOЧªÛW1îpäÈ‘åååpo£Çkpƒeaj`^ &+<@éŠã–·½l¼ æ´@½H+í‹é€wåo”ei³£+¹Bš%9–Ò®s'¾¶O2„¬VÒ¶æj¤têW¾2óŽwT;$•‹J¥’Ž;®ÿº×µ>ðÖwÞ_ìßßzË[zo~sk×®Ì*4mv÷2‹¿R©´Ûm¦¢¾‰ÍÖ“±×ÖÖ666N.Šá‰'>ó™Ï|žðÄ'>ñŒ3ÎÌÎÖ«Õ¹”ÆE­T÷Š¡ÂmóÈjp7W¦EpãËbû‹IW=^N:‡u<¥°öŠ#Œ„7hå1ÌT®j¥rÜx¼P/›Ÿ?râ‰ã³Ï¾ïøã_´°0,Š3Æã4ù\_æ`B|AÔ(n•“3Òbj*°D¢‹Y´‚<ýÃßsdæAÂÌ@0RâöÀŒ¶O5­#‚M–˜¶µ…ý“Ô£‡‘&ƒúƒù‘ø‚˜­É,a<¤lö6p“õx QÀת×ë'tÒ£õ¨]»v}ˆ¬C’ZsD8 ’Æ?Û0z30DHq‰ø·ÿþk¯½vïÞ½Vò* Ktvv–!͸¯œsŽ¥f]#BëBÈ  e¢,ø~öÒM‘&B™¢9ìyrÞ‹ŸXü¯ù“d`NⳄ›Ù±+‹¢èv»ÓDÁ²Êy¨/S¿à}¥”ŠSN©öûÕÅEÔ,Æãq±¾^]\L§Ÿ^?|+˘SÐT B³&æã¿¨`ÆÊÊÊîÝ»ÛíöÊÊÊÞ½{£m"P’?.ñ1(ºººÊBŠž¤G 8LÑg³2T'nlüú7“Ѱ¦+}šþóŒ»%#::£ñøi£ÑÛíC{سžþôÇ<æ1{÷îýÌg>óÞ[oýÂêê«ffÆ"FüÊJNmî6úFhÞÏqÇÅ„"ŸõÐ`ؘ´ÀBAnó],'»/µ!jâi$@Z¬ÕhåCÈÎíê! ˆ ~ù—‡?üÃÍíÛg®¾Ú'ƒ*ñhæµZ­8—3J:mêLÁá–[nù¯ÿõ¿®¬¬@#hÅÉ~ȾÑвl3 (­Mëæy¤”zAºM Çì|F²é+•Jÿ‚ ÒqÇ—_^»þúF£qòÉ'/...--±h9ô}âgBøŒ hŸÖI¦ákÄØó×–™%š6OC“#N«2RÛ]ä&í”ÀÚ‡/kÚnÅu×U†Ãî+^1ûÆ7{½û¹­¿ÿûõË.K×]7˜pE,ÞîÁ1ṼÎj¡6íÚˆHðçõú¯>|ñç>wã7v:}ûö=ºßT«7ÕjÕJ%ÉÙ0V'ÍòD‡@ˆRKŒ¤>6< 0RJi×ÆÆ“Æãÿ^¯ÏÇï˜L¤ÿÇ™™•jõ9£Ñžjuÿä»&3ã6ã\F£JÍfóôÓOÎsžsÖYgíß¿ÿî»ï>tà@Z]¥bãøsÁ€Cÿ&óÖEwÀédB®l´HÐØ›¨ÄóLxϸˆ´‚½{ãð Xî"a6[X0Ó‡øs£ÑîÞ4œqÁ©Õš}÷»7.¸ j_ù öK”DÖ¤`tÆ=€ø½˜ƒÙ FË•••›nºÉõ4¥v|ËÜÜ\ Qtý¦l‰d£w|kÜ…šu0Ë}”gB5 Ç€wyáEÑ}Õ«ª·ÝÖ¼òÊÞ ^:ùŽ9æ˜~¿¿¶¶fü3³1$ B© t è7í Ê<œ).^Q7OÍv i ˜ea*ðd(ˆµÛm–Ar¶ò2÷f“-Ç 7Ôí¾÷½s¯xÅh8ì½ë]µ·¾µºwïhrdÓÜ£Gsgö_JQÛi!g–àCÉWW«oé÷k¼ue¥(Їw:ïߨ¸¤V;P©ROD-ÍkеÕétXëî0ÑáÌt* 9úÓæÙFVçM•Ê¿Ï3;·ýÎÁàŽ¢øÖDÈ™¬ÜÓy"GVÞ¨VëëýnweiéàÁƒÇüÁƒ>\ ú›}¬Áµ² Jû—# 6½d@ùK„ô©ð°“ qå"Ib.ƒÂéߤÍó§üKIü]2ÓOÄðQ—`L8 ørdü‰I2fZ­þ³ŸšÍú‡?œúý™| û;¿SÜ{oíŽ; ³ÙÂ.˜ZQâdʱq(nÉÒà˜#X÷“Á'Z]]õÌdŠàUó]Eñf3Âí['Xd6yÃá°¨Õz/yºé¦…«® Õ÷¼§÷'RÃn¹å–ضžg2s„Â"êé™™&{¨®ˆ4F#hÜöÚyϱ֊Ýn—Ʊò¡Å¼Ó”µ £~uPp[q÷R0À²ÊÙâ a’Ley4 î¸cæoì¾éM©Û{ßûwÞYLæc.Á‹èAy*3,Ü9IÍØö~Cî‡Sú½ùùÇ ‡{I)®T~­Ù¬T*¿<ÉÂì0hñ¾ÐN¦ó ›€UëîÐ “ó.>æÌÌÌÉÝîZJ4›ý;ÆúúúK†Ã×®¯Ÿ2}}ccc³›ˆGX8ƒ˜š®V«£áðcÆé?³gÏyÿûO>å”ýû÷·oºéŽ}ÝÜÜX¹!G',::‘rÙ±ÙÜsæÙFŸÃ?mVa€)]hN[ÎJYû9mV*4jÊ!q“ÇsÌùçŸæ™g~ó›ßU«íšìÆ`ëzŪÔvœª¢fòð¹ìoJwÜ$·ÊiÅn44á¶Õ'QÐy+ø›ƒ–—qH»ÑÄ7Ú÷SØP rë¶ùÇ:WH›¥c!!ipƧáÌ«_ÝéKçþò/«“Š–:¬(Š;î¸Ã–€´ôÇã”ÒÙçœó˜Çð^'þÙ´7ÜøqÚÙ†;·Q±=L+•ʳƒ]•ÊLQ<³Û¿ÿl­vÆx|Îx¼{v– JZêý`\P ŸæætZ™ß`:ÊcÄQ£ØT!á¨fã ´„ü{n ’0Ö ;ÌZb9ð=²þø–¸^ AÎn+6]öd÷*@mÀ2 Tñ½íK.©ŠOeü`9g#À½½{÷~ç;ß©×ë‡Þ½{÷½÷ÞÛívã­…J¹¥c³^¾“`ÑF²¼,1c²Ñ󧟇¨«W¤Fž}ÑгU¥R)ò×=žÀ¢‡2Ⱦ}ûm¶}œ§ÊÓ8 „ZÈ-ðY¥k;y6…õoP‡² !ÜÁƒ²Øc²•ô´[RrŠ«“ÒkRzyJwÅ»n¼q梋Vßþöö«^UY[£óÇV ±’P =ždg™4™ìt8w–——§ÅEbŸ[ÜÓVÆùáìTqmPÎÇ¥;ئ§ f®Ó ìÔëõ¿Ÿ;7_ð{‚‰Í¿83S™`Í>}2gÜ$ÝIs[cè=à ¾¤S•dîâÏåD2ãAÄÀßÓrˆ7Ûjµ"8Å Ä[¶Ô&ŒsN¨ áeM;þNÏŽðB!v§Í>èάãï3¥5?[‰P:G¸OrZ¦9=¯Ýþå/}éC³³'uÖ¾}û®ÿæ7wèаßÿbµ:’Àk °üxqÊ;½þJReÆB”‰£BÚìn\ˆÜ/7ÉÁby öA’‘5Bˆ^˜þ¡a#Ò€Ç26Ÿ”“Wßè¼ÊbÛ†ø2'¹D÷Œì3É ŒÑ:ª¬ Î1Ÿ%}` ®Ã)ýEJ¤ô#)Ý3;{ÜqÇ­//_ûÚõ×¾vö}ï«ÜumŒûÕÕ&”$8òÑ挈õM;ÁбÃ×ÖÖøšl#±]ƒA–B5J~Ëݳ¶b×9³c Z2Ù²²¦ £ôÇ/Š‘”H´i¤”z•Ê1£>É›ê•JµV+‚†«Cúl¦)ç2rö iµZÜ' •„.#œ•(^ÃMHS®¬qüÑÜŽ}K&È逶MüüÙÙÙf³*Aߌ·`M¹ø‚ Øå…ê$Ž×èó>aIY¢†£^!ÿ…aþXŸ–‰ó€Q’Â&ëíQžÑ‚CªV¯¨Töu»çÿÍßüÃ7¿™ÖÖþÕÊʯv»—Õjÿº(ê“|"c-ØTKÊÏ€ª/FÄ?­yÉœù/FcÇŽÕjuyyÙ³¨†»)"IžŒTec°(iÆ 3ïÏÁ.· óš8J|2îa€ø­V+–*f: lO Æ ’l‡*XitMÓ ª6œà^©±öP_GRª¤tlJ)¥;wîÚµëÆo,ºÝê‘#é”SPœZÉÊù¬ÑvkÁ:õ\;<£áš¢J~DäH›M°{!a„óC³„Š›EâxrvŸhÇŽ?ôC?ôÝï~÷Þ{ïµ¥<÷ig«P&®ØÀÍdßLÞõMF­¶Á|?×1䉖PƒzËÐ"ò‘œÌÄ= KI%&˜î°ŠC»Ùk.}¨'Ü«ðÏ´¿€%¼ˆÙ”q0ë É¶ðyyÚñ:Â{ juðZ­V¯Õ~vcã¦jõŒ^ïÝ·Ý–RZOé¢Fã¤ñøŒøi2ýã8Ü:H›ml¾»mîx×€E쉔Fcqqѧ¹‡ÌÜQ›6’a.*KyqÞh™¸gšÒ`åiÇmÀ)uËÄhvÒ\°ëuÛ—„¤µI¥Îóû¼µ=q|c 2ðý¬¹µU¨ÚÿÑ!ç씞›Ò;SzKJ+++û÷ï ½7¼¡ñѦݻǓ.©¢¸b©EyAmë‚,ÏD‡ÌL³Ùlf~—™`—G1˜weMß…¬p#I2‹ýW§ÓÉ43bŠUnQF"2ù¯LË3¥ r&ÄëøHržNaïÈÇYÖZO²‘7@‡h†Edî&€<³³³ív»ÓéÀâä#iþ”‡u;ã#¹Ó€¦/‘Z„å H`M™æ“UM©x¢2æ©2ðËkŠã&~TØ»ª¶›\ÝOU*{ffRQì©×?ßnßìÇãÑhôÇ­ÖÑJ¥2y_qVk?áI&ß‹ñÓ ø õ Xün¥±À‰”Æšà“¤ÏºcpoÌ%ËÉhro™À€¤H&¼Å2 ÚNÔQÂ:…²hE”ŒjÖÉ2® ä²i³vpü²¤ÖˆK†Ü–!ç¡»ÎIé)½,¥Ÿ[__ì÷{þç3ï~wuÏx2ð1b‚ I‰®•ÌM…¡§¤V¹}ìé ÇIaÌŒ2Ä&‘·x"ûÁ–ÕX¦ã·,...//ÇãùùùP;Ïzæ OJÆ~ÀÙ+L€›ùhvÚk6 Í1ãX\XXX__g[2Ì,Àbá/`‡¸ø²€P¸íz¥²³("58¡ÕÚ6?_¹ï¾Je8EÑ«V{š6û9â7>’ `7›A€éâ•NVÖ®˜©Ñ:£xEY6ä ©Þò P+¹ãÝQ«ÝU¯ß?SU­VI«V‹ÀrEH¡,³9~¾ ɇԲ1Q¯G™%HxؘÁÀ3"ë g¦<5ëš§k©Üvu•Z;Ûí¶7“üÛ¢¦¤ËÛh4ºÝ.$@Øä¼÷ÌJþt&}Æ®1›(lX¬PT\ºQý³ʳe×q)ýyJÏ:þøî+_ÙúЇê{÷¦‰RxˆcŒÓ7^îìÿ8nÂ0Ê!„‡µk&B†z;éËl‰“Ô>2ø}·©}0çL˜äæ¼’R¸> 9:Uâ36ˆê7ÉÇ‚¾odX°$ ifÙ«Giƒ%)ôù²^.œþ­C¯Í¡ã[άÕ.»÷Þ›gfªµÚßxc­(RJßh6—*•†ÃKÛíÍͱ{É "?ç`B‡¹[Ñz‰E>‰µ(ÌWR`žg,›,-5¯{nnŽÊ†ÎÃNb¡û€3¾ä®€Uâ!û3'DI‘4—:-‡3ÍmŒˆ°ÐKgYÉÂÃô¨ y¥[ПH!AüÜ#Å1(6j”žÔg7a妽÷^ßxü?[­OlÛöo†ÃO}êŽ;nºé¦[ï¸ãîÁ WÍ Ú’ˆÖèåy’­[EÂÍ[ž¡+f«ÝpprâÓ!·Ì š™™9þøã»Ýî‘#Gx/æ ¾€QX<ºÌƒ’â4‘¦†jÏ$¿™Y·ß+®¿çfÜupø§óoªá&gÞÍ#ýž™³a­V F™מFÞw”°–YɶD"´ÄLIR[G—/bL&“á2‹Rà K–.»â£K¼ ?U›Æzø n #ˆB[xÞ–!'¥”*7ß\¹úêb_І‰3.¼¼c ™HÓ8~·Û¥uÏÐ5Ç¥Ù¬Ea¡7H’A68ym'EZ©ÄÕb铯™îbI1€o¢…!ìx>ñCºÃù €Œ>ëÍCÄ <Ú}&ŒíF¬91Ù]VåŠÍF"ϘwÀ⃕•z½þ3?üä'_÷ºá±ÇøÒ—V/»ìW¯ºêíveÒ;AZÜòinÛP™Æ¾éé±T,Ò¿bÇŽ'œpÂÒÒÒÁƒ‰¦f10 )¿¹!´ßâc¶Z­¬ƒ•¥ Àž¬yA¼´YψM¦ˆ°æC?óabT6Ó¥ö?>³Ô1Œúý*§€˜$Ù °É½×1Å=˜×ŽšoÆÿÝn·Öëmß¾=þµ×ë9r$¥ÔïõÖ'ŒŒûÀI'užûÜùË/ßvð`ÿOÿ´÷‚T>÷¹Êõ×{.(ϯ&I—Á«ñÆ»Ýîí·ß~àÀ†Ù½nN@f3—:M&‹¡ùš”e¢¹õg=b?¾ `y§˜Ô`E5òz8ív{4Åð¬é0œ•* Û`jŠŽNœÂÖ.2eËC‘<´ÌÝluA­çæ¸g=)TÆ+#Ì£¢E…ÂÑ^Ód²>OS†fš„¨»Âu´pCD5ê쿸èv—^šRÚxéKןûÜúG>böD ¬mMÈámÑb5 ªœHN 63U¼±8[k“¢ZwnåCœf3Øæ¿9BLz˜x"6”¥ ãæHrPŽs|Z Ø lVkffÍT=Nƒò­Vë´ÓN›››CtÄ%`lQ'Âñs²4ß'¦™xÆIüIãÔ‡±{9š{“kii)Zîû÷ï¿qçοüå•k®éõzƒÁ`yyùÚk¯=ö#ùÐŽËËËGít:+++Ng8}Ík殼ò_ Ox¶­¬T>ô¡Îsž38é$€²ø¥Î3Ì2hÅ ^GbëëëvrôD…=ÄÜiw …ªÄj4Š•4_ìœ=pÇËûìÝ»w/íß?é¥Ëo}kë…/Œmßëõ¢»Câ3 sLª ›ìQ»iÌŸéy¼×IŒ¹ÔjµùÔnHD˜ÆuÇÛ":DcMi"cìs“ûOMAi"Éh4Z]]õ‹€‚ëÊjxv_6Q͈•g“&ãïY«žO2–K3ËÛLDf2"ƒçìï‰/N|äÈo\ÌY°ƒM { ð3J@]LÞ8E‹ˆŒA B'Ãð±–RósŸÛ¹sçI'´¶¶vÇwŸüäð7³ÿ“?Yk[y9O™–×´– ]´P•pgYß–Ÿ!¼´b·1ÇN¶d$ÛWVñ²ˆox™˜ÉM÷Æú¡|£uKÓd"5“61M.òô¹¹¹õõu£í£Ñ¨Óé„Ê( ÿ8J<ü!ÑCëhyæÔ „h†9H®ãiÇ—EƒŠüñØn÷Šv{ÿ1ÇüÁ3Ÿ93ŸžÒ;þð›¶m{üúúí:5Š¢ØñÊW½è¢Ú‡>ô¥/}ék_ûÚ¡C‡Æ§žºúë¿>÷†7˜Êôa67ÀH–‡vý^È^=c•Ãâßf.ñÅœe|êø°q‡ñ"ât£³e‹M”yì™æSÖztëÅA+ÉÄlÂ’Gýy³ž^d/°ÔA åç4³ŽŸéÍÏÁB-ë¯ÐD±…³©vEsÉžÍ*±ìyŒþDL7!›A‚; ¨%,¯J:^•|xá…ųŸ½úéOß{cÁ ÚhŒŸ÷¼tð`íª«J’ôkìac>ÓmÉ,$0 YUpT¢I`˜sO#KFÏ2Ú‹aÏÜ0¯ÊNrUñYœ¤6i››cÆn'³'»Ÿ‹¦èÚÚ»0ÈŽÄÖÇ[_`‘ܱŸÂ©Ò‚³DWÜÑÆ*ýa»°9ñ¨Õj‹£Ñ—›ÍÓÖÖjÝîegž933sï½÷öÖרZ=”Ò7 æÉã·/¼ím½_ûµC÷wi÷îá‰'~åWš—]VÙ¿ßñÌ—ÏÕ@š21sY9gggãpiµZA "G¶·„« G¹—·µÌë3£×&³¼M´p"0¶ÉNòµœz%—7δeñ/’å=ª’u’Xf]òöq°†E‚Ê4Û-ü“¤“ä#Sl(éi¢I›¹n³Ò ,‘eχµ.I’ Cf©n¨Ð"uA²õb»¿"ßû/|áÊ¿ûw£~t4u^ò’ñâbëc—k[r2CûÜx\~al0;h—‘ÅÀ3ÆšI–‚`SÙ´ÍŸ›Ã™Üò¾mr.QlS(³¦rgÒ;ãädº¶³¶[<„ÀÜI6Y÷VŒ÷Íg#iVÿt0Ðäød¹¿8èFá3·vfŒq´Z­•zý] lœpÜqív{ÿp¸¾¾Ž"g£^g·(Š™ûîKýèúK^ÒûÙa­ö â¡eÈy¨¹÷ç>Û·o\pÁ`a¡ù¡U—–HÙ² 68²ÓX4@múG'µŽ'Õ»\0¥Íù=žˆšÍæÑ£GÁÜ؈LЦ=vsf쀳Û8æÓ…°d§N+ŒÑD¡çäŽÞFdD¸8Ô ,eõ ;¸y€$|4ÎkšÒÙhÏ¡ÈF72ua’\OBDBàÉó¢(++­½¨ÑhBáMÑl÷ĆéøVF`yÀ#Ú™Œ æc~Ô ùCèÂ_ܶlVj!һΈÈÌ#DN·@ü’¤ÞhpfònùL ìÛØM3ÎS+P¸Ø%Ÿ3q+TIê^±Ó¹7ª14 Í'(…t2.€ïbåc2M“q‚ذ§œhÇJ¢´:\o:rYϧƒx2[—^ZÅPü½’±¶•L•îË_^»å–´¼Üûߨ½ã…úÿNýŒYSÊpLØÓS5´:Ìj¥è¦J0ù˜†­õ9¾°An6›Ç{ì¶mÛÈ""›Á¼8ºVæ¶"ȉÏç#| Û…YÐ%&»˜…pŸÄŒÌv3~Ж­|;b!båo‹j›´ŠÜo|ä†%g´XœC·Í‹ ?ß}{ÓìüªkîÇ=¦@Œýš ë¹+ß’5#œØ:G‰u’ÁS&JDZ5¨eox&IÎi³H¾~¶È,hIÐn§ÂùræôÈWdB¶â1!­ÑN ´ô½£úçᛌ;4Mt˜<Æë¼:Œ‡– 5Øx)ÉÇÀF’ɬ½vXÇ‘ÿ‹Ä×£u%cmë£Nïo¬}ùËõ/~1¥4\YY}Ë[š¿ýÛÐR©…ixd=C†¢¡Àš²âq$‹&ib?D¯8Va(]:at7•Myñ%CvfeÂi2ïó”CqkbLæÏG¦áéâ/C´œ¾Q¥qF›Ž‘¹¢ù@´Ëd¶¯È \É uSÃë“® AHGƒ$äI@{Hâtæ@Œãxfffmmͳ‡ý~?^¢9éùÚrNæqGäÎŽ0Š×$Á¡i»{>V`æ¿°8#ÁÏ„VQp°o¬Ksëiò„³ZÙ­~>¥¡õ<%íVˆt¼)s;3!%Dð²]à¶ Û“0Ý:ÍÊ5¤ÑR2±…R†háS‚PdäÙ+!M:âðÜ€ ž Ii_eæ~í)ì$ÕÄi§ó2älÅ57·ñš×W]5wÍ5gµÛ•Jeõúë‡ñÃ׿~æÍo.Š" ‡µZm±RYk6ƒ8ÏFmäq1e"잤'NÀXÈôca>Ä_†kˆ­ÏH­±‘RZ]]ÝØØX\\‡ˆM™ö--û zHÈm§lÆ‚‘{º0øíy`4Å0 ÜU¶,¦épŒ˜™,ºBIeu IDAT{Œ-Êá «Õò ÓS·ž%òü»À0îÇ4îø˜333}ìcÏ:묯~õ«ßþö·-ÿc°($v\7ù@, NñyjC?Ÿ1×|œ_ñÅ¢ kéSâ,Ì âoHØ)â Z™Ë |”ñÆcDô¢|ágÆ·ÏÏÏšI0°†3ú€]«i½X\"½FðI<¼íz`¦¼"‡ElÃá"‰ z©–ÄŽßUÐvŠç™Õ¸i¢\oe·jŒçÀÞ$)!¢ð•ä"±MlF˰ 9[vÎ>{xõÕ37ÝtòxüÉûîÛ=33Ÿ¹{wc÷î”ÒWjµ#Õê#76>Þh¼W­?–>sÆ= 2€œ8rÐ'dØ“e‡7›Çd…<‰8Œ5ˆ#²¬3n¾Iæ:i³—%8 §¤¨¦b0²ÁìèΉF4²ü°çi2BA6Qï,Ø49ÏÞsĘŠÈ&½±,w6 ¥dD¼Ò6ë¹¹¹;wžvÚi·ÝvpgDþ)žž=êíIš4MlʆM¬“Ô²¹z.æUãÐ'eÉ`d¸ðÑ3–c†æe-„“$iw™dL>nKžC”ÿÐ'mÖjóÔ=,«YÛÁ®9| ‚¡ÐñÓÙÛðhÁr~~þéOúK^ò’3Ï<“\²^¯oß¾Ḥ!_Ô‘™µ´´IÈû³3a©B „ñQ¾´´tûí·9r„'o9,wGøh¼ wSø¯éQyøaü"žO@v ¶æWÄ µfST\0ˆ+™°5«5@‰܉]™Mç´úCDîø.Šx¡ôl¬*Má bBÌ0±%ùÖjòLwFh4׎ÜîA‰—A¶4ßÕ¤V»½eSöFbó*Câ&%ñ—Û·oÒ“žtæ™g¶Ûm8Ùj$~H¿ß7é´¬r¶˜;0«7ÜÐø½ß{Öpø‡¯~õîÕÕ×<á óOyÊ'>ñ‰/|á ¯¨T>·¶öZgÙÒ·G'8ùŽ9;¶à(³jY²µZq3ëâ°yàw¥Í¾ÊZF5ËÂ_­BnµZ'Ÿ|òÑ£Gï¾ûîØ¢ñƒ©aÕmÊÍ¸Õ CG•Fæd‡¸ÅÉ=™|$-4žŒYøž~çÍ2ïɰ ¨ŽÙõ ž¹í6LB£5  dœÖ  )„ðø›Ïïv»¨üÅm p€’Q_nà ‹‚=2õ…û OØã>–¬ÍæçÒf7Œ³ç¿ÏXű„b ÈPž‡ØàÚa†Þš?œ~˜G,¾MŸN[ ŠF£ÓéÜpà ½^ÏÖ<«ÈH˜ÖðŒpr¶¸Ê‰÷× )ûßþÛ^ô¢sÞy•JåÜsÏýÇüÇñh4»¶V4á’3.ô$§Óʲ¶4jdZc`sÅ~cêŠ.±ÇßâÆØ?¦úà¯ä…l‰[º8`‡´ypÿå³gæ(÷Úèõ‰-_Ïdœ»jµúKëëÿ~4úN¥rìxüSQ]¥ô©^/½ýí?4Ý3??žœ5½^/8ž:ŠŒxЇƒ³€=Á"…ìv»1KÁ±1Û< [Ëðê ÀI’©ntñ0æ ñFøz§¸Ë¸ßn)îPvñMÓ˜Ðbš@,ìD>F›ÍÌÌĤQl£¶‹ÿe’‘N•„Mß³™ùøâf³I Çb›Q/‚Süeši6kt—‹Ùµ8¾-gÔ7«eáb`±j8+…¨ÃàyO·îãcù¼D¢ê5Å?žC·ÛÝ¿?I­w-:ÖódžÚ.Cεs¶ªTRJNçÆo¼îºëŠ¢¸á†VWWb«õí4Á2†_œÁqЊ ghD%·Ü-´K6#àÚˆ—„4s܉"ev;Šc^š˜hA<¥ŠÈ‡å=÷C<æ4'ws|Ê(¤¤êX™‘P_Òh[ÇT«WÅ$]µú°áðÔð&py·Û½ûî»ÝùÀ›5"}”pšsÂ"3h=cª7»xíØ±£R©¬¯¯Û$‚œ×)Ž´bHøÜà_G=á™Àï[5Ž<šœÃý’q÷„èÿ1Ïá±èXç‘ßÀ (æ\#v¢&à’+Vg¨=ÓÜï4ó›»%Tÿ,Δe9N)Ø&Ì#G¨v§Ð?ÈÁ¦´™7.hp„7–Ã^Ó¥<¿7k·Xo× ¤LožcŸøiB &`‰yeÈÙ`-¥Ô®®Õfz½b÷î÷Ýw_µZ=pàÀÊÊÊEÝîÅÍ&[e”!ÊÓíñHCð·¶gô`84³¶ª5hiu0péMõàªõ:3Á±ì`…‡fáêhe{3Äæ1â^´ƒnvWÞŒ³0êobø¿ƒWÍÏßž›/«VB÷Ì3éBá›2¾rÛ¶m -¨oâ‚Ul*w‹DU İ ùQJ‚݈7;;kV}æˆCøqˆ±!s"}fõ:œgþ~Gƒ~=ÅÀ]cú•Ò ÒÜb²òš"ÙìáÍîË ‘qçžVñ‚Œ?£“†‰3`žVL€¨7é0ï¶ $ô|¨(‘‰CV.0Teü™æ µ©¹òY«ßÐnÆñïƒBdfèx×;®xV4™¾²—óý‚­UF£ÅZm¥Vûãƒ_Ýíö«Õ½ÞŸôû;ŠâïªÕãúÔ°kÂ}Qo$3’³)3S©š)Mj£‰ÍBÙ‹Ê:lhjesÎH\“ÓàMR2Í:RÈÝ·°! Ò#ĹÌ\€±S<ÓâD¦¼à6…]µRyg·ûŒ……#|äÏ?îq‡Ú½{÷ûWVþÃpø²n÷-Æh’ƒw+~‘ÅQ2g0> *;P ¶yø”I‹xÅÑ“ð;Å&Ú$ßÚL0ÞÌ÷p3|eæÔ‡o6?4ãqs8z„ˆåL‚5uß,ìL9ú= !d`õnï…Œoj5†¥0[ʨž×q? •X÷1‚£¤ð0œŠtÎàõ@Äàø¦"‘r£†·Õ܉.oùü8˜‘²‚€C¬Ýíl¡&¯ôêàé0•eÈFSY¢&”!g‹ãMüéäñøŠZíÝÆKK³E‘Rz[£ñùZíñ£Ñž”ÆÒ†JÅujÛ Ä¡ÉûæP³§VæqÂfcNÂG¬Š.Md A*¦‰aäwö±ð»Å XÇñ‰2d,iŠÓ˜a†Râ7eËNö…‚{ÝÓ®B÷›h¥ÔL©—Òé§Ÿþä'?ù®»îºõÖ[×××ǃA]p“½`sd»±R©¬­­ASvkÂk¼Ä¤‹’M3£ói5ðÀKþù•Ë|ŠÌø'“u#+vÁ¯ì•—6Ë6›-ù ØšípÜZ÷0#Ãdnk% ±Ä|n¬ÆLv/M¦›!°ÒG£F4]›•3íKýŒ¬Äal6î!Vü(ûøuÈåã»" ãíh‘%Ræøa]ÈgÞŽ¦‹iœð'žy_€÷B®™ž™›FÛÞpd`Y¥àÍ_±ÚŽV*Ÿ¨×VÕjõÛmVÃÊâöZíê 8à‘Lësba¹åhŸf°¸lÑ{¬Ç4GΑ€õɢ?@,Ç\{#õàWFl©vS¥³ìÉDâíi3.:L¨bûTš_|dÐ!Gb‹ösÒÝ~ûíŸüä'————––Š¢¨OP—šTPý_Ïxó)²aC°MÄ@Õ¢wm*-a¼%IÜtÉ$'hÎù3"´—y–“y°B,KÀ&+·ËgôK⸤Î~MeôéÆà‘Ø&.Öû"Lb˜ùU»òb£U!$Fв9ßg¶z3µ#Ò]4ù'OÑN;Ú%ɾñ¨Ù³N\<þL‘dPÁÞ6ØìsãO+ŸRMNw¤2Ç(gMIŸ6žˆ÷533Cb”m2äle¼‰Mµ63ó—­Ö&òq½Ž–p¥R©M ­H—;çøÈˆàDNÕ:,X¯uÚ‰‘ AH3†ã5çQŽfŠÈ-„¥ìN¸7óÊ@Þ£_Å@eüÙ¬ÈLà,Æû¾,H­D*ÉÝÜ®ç°ãTŠ_÷gÍæk66^~èÐÒÒRÐ.þÕh´c8üÒd€œÒï÷2whe³r'À=svl|R,‡IÌ7ŸŸçE{h…÷èN>D<œ0ƒˆ¦9ú|Ù*uó#c¯xP1ë£ØÇÚ´ãÈÜ㕱ÆÀÙ"âR{N…©aóG,« ê"›‚¨Ož äJƒ™Fª}9³éÆ  îh¶qâ [#Ïlez€nˆ²Ôw<ÕN§c‡©4™ µ«y¿;'+TEÎÿÀä‘~g}²Cc±±—ÙÅIÞ¯qÈdŽ*eÈÙÊ iŠZ­ÖívÍò4b,£èÄ CœÌfrt²U²4ØÏ4cÜ !Þx:gSÏié²ë<òFa”)Ã3qMBmÜ3C?Šá¤´"RÆ—Q°Ïco£…mgúÑxHg‡l<¹?OàÏ’»ªÕ³Çã¿\YyçÜÜ`0¨ ‡ï >ÑhÜ:r­ŽCœ~ ®ÆÙI–æ£`Ʀwd¦Ñ=¾2ZP iF>‘¹³d•e’ DAív{mm ú–Ó—l°&ITÆ‚='¤´m8LEшØ +/ÞÔ­BW¢ ¤4ˆàñd2AåiÔ×6Ï” ö#7 Ç_§Ó1lKÀöXh\³³³Œžd~»%A pBC¢²¾ä‡‰l.ï:øIš´m;ÄDUŽg$bÁG1ÁȤ çä”Ó£BNáMxwij`“‰‹;2Ywa ë;ðYʳŠik6Çö'(¼/™žË$½…H7¨<\›è¯Üµ‹‰¨É> ˆú€ÎcY£(ƒô¡qD¥ÌŸ!Ë#NP¶Çgg“Û Âe’'"»¸Qcúç“龨NÆ€Iü–Ápøc)]Q¯ï®>z4¥ÔOé·[­T©œºyðžÂì/½â±PÚ2¡iH’c·}m\掑ç0b¼ÛíödŽõ†-þûà¸"¸«+é²—³õ$iJŸz®|­~‘ù([::\ž2Ä wzgL¬ ~¦9À2™ÜY–åÓ³gŸÎ؈5¸æææèQYòݸ "Çî帹ʧf?¸{™yÏÌßj2èßh4új½^ÆãCÕêïµZÍf³ÙlÛí‡ÃOÌÌ,7›ýn×BDOîõþíp˜ìžÉ]QŒÆã?jµ:RÀ Ê\<¤?p '`˜…ž18êÂÂÂã÷¸ÙÙÙ¯~õ«‡r|ræá|Öô¼ 3¤a`‰Õjµ2\<3óóƒÁávûK EQt—–NÜØøD½~î`ù›ñI¿\(‹îÐxñ˜)ÏšÜV¢dÊ’ŸŸy“ÂñìþÂ=PÇØèŒ\ Úô´Ýµ]æØ¹ B@!´YÜ,#+[B0ãšC ¶‡ˆËA£²°’ìÛ°ü6‘hšÇâ‰fo1× ÓòzNéÊ^ÎV^ * àæÔöz½P@!U1hÀKµW ½e›Ã›(’N¹öÚíö`0ýHÒ à¿ ÙLƒû¬HÎ89!"wÈʆ A¢0O1yû‚ðÖº›™ö‰  âyŸgZÙr·T«·¨\¯ÕZõz¯ÑFK2£€¢(þõpxoµzM½þcÃá›;”Ò‘JåWææ*Õêu:íJ¥#ʇ„°£Ï0 ¡ åÚ‡§”ë………ýÑ­×ë7Üp+Ê8R–³36KÎæ’žnñàª5Ë]©Ñ!6H&RÜ´ñ tDM[Š|¿ß‡Õ\Ȥ>b›'o2–GüL>2/ ñ=Ï9ð, ·Óø„7»Ibô -Âö€[¹àb÷ö̳>mcÏ0ð)@/ãŒmtm’=7Ì÷Æ“ŸÖ8/CÎCM@ãPfL7Ž'Zî’á²à°‰Ža1çûÎ}@œ8‹é¬ºéÍ´«0ô¦8b?G•ÍΉƒ€œ×¢¢”w Q™³ ›Ùû'îs~~C3A²Éjo'¤k йG…$—™Eñ$ñ²tÝê±ùo.Š÷¬­}¾V{ضmµjuû`ðÙNçc³³Ë“¯7–Í'u!Ï™‘`"¯Æç…æ°±±±´´ôñ¼Z­ÞsÏ=qðù É¨kf|¡êˆ;_¥R©Ÿ|r÷þ õ_þKÚ½›s‡W¿¬õ`ð™õõ§<ö±¿ð‚<ó™ÏÇõWõÁÿñ?~ÿþÇôû3ª‡  bN ËXo &CáËØÌ,[¹Îƒ¯A%›“å 0íÈãÚˆ8ǃ [6 ÓáÿÔëõO±¬Çqªq ²6G¦|a3–k8ýðBÝã±{a˜É‚p ?S("Ün› 2H¡|Rò¶HL2$Íî'š|xbaÄ\3‚R[èB]†œM(|’Øš Æ1æ³æ¼‡çÍ6R•9Ër ‹ž!H:ç%…Q~hÜÆ`0`E £cÆvµ§`HfÅȼö\zœ @¸µŸ4=tKÃ9ñ̳>÷~Ñx†EBM‘ïÉ)]^¯¿¡Ñ¨W*Eµzoµú¹¹ŸO𤷙€·[hœ˜½J>A;:²õU#:t(>x¤,°ìxÅ+3³½©íÚÕ{Á fÞõ®îóž×h·k_ù 3ùSîÇîSšß±ãÔSOݾ}{­V;õÔSgçæâ™*G’‹éË\!·k•gâ"˜Ÿªƒò, /¾Æ¬HNv·dâ$åQ·Z­ˆ|ôÃÝù 6e¿X÷Á³b$[¾apl“Ò$©2à1OèìÙì5m=CÍ4…ÄÚš±0@éÖ Á§ÍP8UH¬/@ ËÌîÒfY©’>°Å½œL¿Ý=Œ´Ùч Ç>pïˆö€UèÉñ®2¯YS®M<õzµ‚Sd;vìXXXXZZZ^^Î^bžÙ8 æ‘qèC€¶#]Vw_ØBi"IÉ©šéS™g»×Y4gÆF´ØNÜüá/ŠâСCœõâúÎÝh±,?8D;n´jX?NPÈ„ˆRö!а&ƒaÇ"Slû>ðÉá²XëΫííÓæÁa*QHÜ@dœ[#1ÍŒãŒÀ÷e³teÈÙšàƒÒ¹ ËÈ£ÅQnÇú‹y¬Ö‰T%´œ}'© 8Ó‰ê8Šñ öÈñ±Ç{ 't»]&œ‘D¿¶[T”#þ¤M’=æ'p$Y˜Ž€,yóp¢-±-Åï‘x  8K¶Pt¦Íºô<:þøãŸö´§ÍÎÎ^rÉ%wß}7çiÚìzéwÍA ’™4»guw°!eq>âÓE°dFêËTC²ñ¿½‹/ž{ÛÛßùN­Õ*z½â¯þªsá…ãÕÕÖ7ræÞÏ©T~«ÑxãÝw¿ésŸ»ùæ›ûýþ-·Üò“KK·¥t«¦_MkÆ{ÍN‘.$l·Û)¥•••n·Ks%òw’ß6HQ’cºóq|”\!~ê üÌñÏòhp^Ì ¾~ÀŒ×L+%£ eËN”–ð uof#ü´ØžnÈ¡±¨šà€¹ MD¶ç!VèÝnת6¬@w§LºáXpòJ­“½&ô&JúÀ_¦ü“¦9×K›•-ÀŽâGì©FR°jî—©²·”§uéØ×jµ{î¹'ÚWÒš¸±vqIa*(þÞ"•&2x¦ÄHc|L&Û‰Up@­ÎUoÖÿ‡YkßIf-Áú,O¿ÝmäÙ=S«ÕîªVO®¿ï¾¿ýÛ¿-ŠbiiéØz½2­Ä •{µc­fm™Ç’ƒ"u4Ø]0ö[—çÀøwtJ¦g_èóm\tQ냬ÞqG³Ý>ñÄï»ï¾î}÷UÞ÷¾îÿqýw7­­mš©Tn­Õ.è÷_½wïÿ{ôhucã'{½ßÝØ¸¸^_Oimm-€Œ:¦‰™­Œ6‘áÌ3Ï<î¸ã®¾úêÕÕÕ~¿럆Ó-hügFñ¨iø­­­…äÄòò2¿ŽËf¼¿¡%RV©å£ÛÖ%“ëv»Ʋ§:;;KÝ“dG”Á¼Àê4ñö•)^ãD5;N¨¸È3›ƒ…jø2÷5Ýx¦ï É;v8ŒS(n¦ÔXû¾(t¢¿ %kldc7v[¢ç ‘ƒ ý›$i2#÷{¼QÝÅñ†˜ùÝnŠ Ÿ%N‡øÔãRà›Y’Eƒà·P7~=íÁÌL–†(bÅÓNÌ=ÃÑýg¨œˆöÛdÓdâ4e¾Ë ¶5<ü7ðyÜ+»óðfæÆÈ \Ú,ê#Ó–* ÷[%­Œh„s%]qרí.W* EqF„«”¾U«ýZJgL".¢ÐÉü“&ø'¶¨Wڬ銞Y’¡V¨ÛÙ½õL~ê¢EQŒWVÚ—^Úÿ­ßu:ë/}izÝëÆ{÷¦™ާkëšMTX-÷?ðIŸƒLŸPí=à*a·±Ìÿ„oÃÎi³¹ ?Æfí· Â†ŽãyfE!É>G°S{üž³–'˜-\JS½ñžáGMVúIf‘Ä¿FòœeªÍQ7“M‚¿€ºæ~‚ýÈöôT¬‘@`QDÌäz=ßS†œ-¾H83^&ƒ±b;™‚r<¥PÉcF¿ °ôñ®ƒ±¶þî‹ßE‹‘.½©7™Lm¬ÃN§UÚëÜÀ#ã,Ñ@‚aèÑ…x’ív»ÙlÆÏ´6L¬Ò>  ŒÞרuÀj3Žâ^)çL&[ÇŸ žGͽAÈD– ÔñÑ@š2äl=cÄNvQâ6#‹¾¿gÍ`¬‘{N» ÄÑCm‘I3A"`…ô'ãR{u2¬Ãô@ô².jÇÌCˬZ²u¨XYyЮñ¯qBQí‘ÉÆñÁäÀ-%ÎqgÓ>ôÝM!>YÍoÍ 0ާî3Í{…‘Å{ÞU %B.Ó¦|¬hÅ0Óà €Sf+º6_óš¡Ô†,3aïNׯ ÕZ—Öj(D8À"î9>EÆäŽ)3;m9H˜¬=Â…fÜÖëõ^¯gæ˜Å*ØKdfâ²,âðEÄç©©Ì™5“¥ÆŒY›Éo4Ñ‹BO F‘ÆE%—‘4å<–9á†_(I.Ìà¡‹kº¸^ñ»Á>kÒfï»Ìà‹40NÒîêQ:xðàÝwßÍ=»”4©!i*J1,²bôt€™™f³¹´´Di›&ÏÖwÔ€”x,Þu’_‹ñ̤¡Kúçà™žyršŒ ­%'ÀÁâiðéœ.ĹL×Þ5çE €a¼_S=ØûÀy$Œ/ô\²@ñð[ˆ]L¥KSêöÂz•JuR.•J½VK•Jlò¡&ÉÜgEâŒ~úé§ÿüÏÿü׿þõ#GŽÄæuaO¹1%Ž ya¶à-îO&¦ð­ËÉÁ¹â7 ZŽ‚n=°fÜÐ]ŠÐ(Ìœ] ;YaÚ3Àý$Ñ€…P¼W¡‰aÄ3ÎwOó¹™MP­sÞÑN€lÖl6——— ¸‘4eü1Ú?qÊi4ív;pj$Uâìã{=¯±o#ˆP«Õ²¬€.ù½<ÕH3#¾""—™z÷grhLeº–…TA-ýbåS“°ŠÝ› µei/O~ÇŽçŸþé§Ÿ~íµ×þÃ?üÃÊÊŠØaX¯’€Ñc+AH2$Þ†Ï +EhÏfÔ³A}c7÷½Þi)µSJ•ÊÁJåhJ?]8E¶¦ãåc¡(Šåååõõu÷ ]Ÿ¹ÿÄs`!ENæÙ›mÛX!IdH ³ü²ù*û‰æg–EeÈÙš+4q;w$÷uƒÌîM&BN4†€l k:ù¸aKCÜ$öÀt ˆ f,D›à„Ì-Õ$º/nc8,Å–€E ˆ<ÄQz½»Âg¥‰s¸¹ÉÌö†–6Û:€e˜àö¾÷0Y^–6î€ghOE0Khb´5 8¾‘â¶±XÜÉ`0X\\¼á†Ž9rà 7t:iÛ.À¨XuQIçhË™oW0«ŒÓa¸ÉÔpN”43S¥xËæ_$ÍØg—KF÷ÌyÑMñ ‡òëÂr#¹”ScP¼ Œ·uY\Ò™f鉮øËÇ Oÿóììb½>;| Ûýj³™äÇa` £q~‡;Oƒ¿!ÈE=»#@küÃ,{j Ô‘_jÛÌÙ äÁ>6Î?¥„R†œ‡èê÷ûKKKîógš°-› »¥é'¼‹R¯½²i~88!*‰È:ù™ÄEÖÿàþ9ú½:½-ÝUv]χ‡‰ HXuÞ!'à,¤ÞBù-’PšCl9#9¸»§‰F uO’Zšýíž1ÒiøFÔv¸ Ç)I±Ùw³³³A‰@NMà $t«F“+a&Qî½÷Þ+®¸¢V«ncšs û›¢f5"9f€{@ŽÌ´ÛÍ—0`•hB>„×øíñTÑ‹d©€YJ„ü—ÔÞöE{öìiµZùØ {Nç¬ÇKÆÃÛäŒcqâ’™ø1ê% ®èžJœ¿tûâïëõz”°Át÷ð/i¤b&‹3{Ö[ÎGGNX˜@‡¢eÂË"…§£‹?M4=Aó?k–PpÛ°™R{<ÞØ¶íçžñŒ¹¹¹Ë/¿üÀ{ÆãÓÇã¯M†™ìýÞüO'Cñ¿óóó´NÏ<óÌÑh´ÿþ¨q­§ç°-Þ=à ¶IÃ/jP~ص-µ(ƒ¨©“2Gƒ2älÁEOž¼}nÏŒx– )e²1ƒÑ™¬/¶±é‘‚'£„)—é`:×6ÇB8Pƒ²ÑŠˆaÑM2 Ê€{{ž†ÇIœ¼qX›ûøvWÙ}]·¬-Ig7»…šûkùT{YÎXg•À:èBƒ˜Å·#é’®ßïƒõõuzòwé@<ÙGƒÍxâgò£‚ŸÍ@‰mž£qÅ"qÒ¤®Äk6^Ó'Ífý ¬Ý× º¨Õlœ ;ÑÇ%ï7ÉufZÛ ¢ý øu˜Ô±\íìÉ»£Œ`TÅÝMÆXÆ™¦5)BøûÅ¿Ÿ4AÎ>¼¼¼ÜívùXþ8À}Ž>4!Á‹qíVëÄO„­À©{À´ôùul‡à£ƒ”¢‡‘ÕºæèëdCZtgãSÄwÙä© 9[|‘¸‡o9tÒ„‡Ý'˜P²Yi¯!2cú4l™ ˆ_aU|ƒiô"åäHJò½v× óô¼´Óð ÍcKì‹§Á½Ùƒ£ß¼äø/¶èT´Q››%â±e‡óaÎί’f˜ÑK¿…Ìž€Ì7Óó§~5:ê‘RMLñÂ³Ž¸è‰q»éD•IZ`ƒ>Ç!3 ÍÑ vpe…Œ1L¦…À3A;YÞ>•x}n•£Äa¤‹8ížÝ˜Ãñ6ì>£ìÀÍ|Ï]Èn!VmâÕ•K(âb§ üEQÜ[©|»R9oqñšk®©T*ëëëÕjõ?ÿw£qÚ¤%ã*–±ÏJ{ƒÇˆEÕív¯½öZ(øÞ\™Ü;9A¶Ìˆ6€°kQæA— BQÁ›ƒ`²åC=‘R†™ìàÎiˆm쵇|€KæìÓߣDö¡½db"‘éBÄÍmsí3  k)ÛÚ»¥De°¼Š„{³ô(òøD^µ›!>űÕëõ¸1 ˜F„ˆùSü¸Àîœú¹ÃÄñí!J D¹¿ENÍhKúÇw1˜aY‘ Gó)†l¼?¤uœ‘>Ð%21Œ^…Ìž´GŽ>Nd—†|©äLGFROÀ¬È˜ïÉ”O9…ƒ%+<Ögö6çææ¢•·®#Ä?´ÑÜáð”~œþT<ñ~Q„7îü–,„(h{$@Ž{ǾrF|WöM.ǬÁ7æ†ï‹­µ¦;me•³eŒ5PiΚ1 ·ÄÞqÅ;ÝŽé¡·ô}F2H%Ž“[fÚ•Uè-ÒlmÄ´YšeÚ~4–l«Õ¨ÍE?E¤éU¸×Í™èIx¾«Õj…¾§÷Ñ# ÐVq0…Ý2‘i³Á‰ ]îº3'Ï„lV©T‚XÝœFŽ©Ý !nüV«Õv»Ýh4ºÝ.HZ|j@•¢(P<òü– ã,™Mj&ÌŠ?zöC¦'–X-£Ñ¨×ë± Iœ½,AYí3•°¶0=,R“€­âµR•ÚLvccã¾ûîëv»¤b®–èÞE’‚)NjÛ,þŸ‘¤I2åYÆK9ÜÛ)l4.¬VßÓíþðxœRzO£ñ¼fóœÊf§êÈã™[ûõt \—54ù#I …=òZŠÎ h±é*1Í&p™µ:xšbxÛ€®Ö¶¾ÐÙTýM¤$­ñåö ”*³uÁ÷í’déቓø9±%ØäL“˜ÕÊJ L€34[Žn Øõ™,É^ÑWÊvNd a‘§êè¢ûÆ\º—iïBT³£!XÇ×П¨Êj3†ˆ??ìa Þº¦ø´b9¡X„„g’2«@ƒ‡T]p­Iíèq <>BŒ“dó­/n4OGQ“Qéå!1Ñqqq‘¼¨=³™Í) Üa¸Õ>”é&mšªG-eî³õú³66Š”¾\¯yþübJEQ|I^M@¦î~à¨ÃŽq3Õ>ãÀ•XðH+ñö3Ê™{–,æx>èþ’Ô2p¶ÅÍ‹2ؤÉ&40¤Šà¹û+é¾p:;qðˆ #áÁ@*çï`0ˆ,8~÷`€C£Ñ8÷Üs—––îºë.$Š9Øc1hÄ2e8†Ý»”w‰Ü‚b\pϬP:+H`}èîE6ÎbÒ9­2KÆ5wràIÀ4qHã/-œ$?E¦iÙ+ ô&‰ŸZ^Þ;Ÿ`@ªGíRJëëëN'a"®'uL?³– èëS›Ïòô%¢Úk4Û·oJ‹ä–$Ož_—iV¦Íf^Ó%oÚlc{Xp4ÿý“M˨ÿÁÚ¢ebµ1COÎxb¡¢„fñ†ˆÇ‹¢øÃÙY'FY)Iâ’; ÈÎ𯻀i³°&½O‰ì*œû7)É i{‘8)¤­E<Φì¶…%NrRVÙïŽ)_Ã÷Íf3êbkÚgl"*kPÙOšLP“ôM›î°^í@û!¼èm|ÂiâãÏ“‰üй¹¹¸áø8œ ™ù{H·4ä´Ñ ôŸ¬Ô8œXîÌ^ø3 =IU—þ3°xV€Ñ&SA” J‚¼9}PUáø6Õ¬#äz½Þív3OX;Q"jI%QÅúú:µ”eÁPÒ4“ž³•cYU õPKâcr’’#§”vìØqòÉ'÷»ß]YY§G!Žæ¬¯Ãવ³p€gËà ‡å½3ÏoZ¼œ×2áäg™vmFfáö8”CÂ<#Dx ÀÚ ºx}f7ÈÂ3&=<@”=9g½d­oBaçÏïÂ:›—eÃ@c<Þ¸‚hE®2älåeX Ø“Ó6ɆR×{âŸ2yu( S醞±Ã’G.ÈVF£Ñw¾ó†.“dù NözaŸGY³´´äÄ͘aüF¥˜ …°TÚ,wO¦†ïµ}P¬V,n’(ü.Ó A!h:Y´Ó ?Øèô’<º¿mju8™³?¤Ýn‡…YFD©x2ñnùz¸ o7TIÒÔ¨ñ›ßhÈ1"Ä48“äB_Øêp8\ZZêt:?l4àx`‰OupÓû‰k'4“ÓÌ}·\…ˆXÃý~ßÉ %ÒyND¦ý+ŒbÀL³éß´÷SVDXòÜy¿ße6K÷:&Ùw*3î„Ξ y¸ã…V ]X籪éíSɶ§‘O¢x4qÃÈCQ<“p£'¡´er¶l.'Ë¿ÜßΔ=’IwdSîž’ΪfÚàÙ7fj¯ì7Ú °ê¾}},•†Îè“g@xàÚ%¶‘Ä‘Ö@f7žyÎü9¦-5³9à/ÇiV!šóîña# Dªë”C*IjÁÖ,~ÔÃápuu5›(¢È#~G¶\©Ñ-çÔñ:,ã'à¶mÛvîܹ¸¸hu¦ý é¸ÁFâì™*w5Ü{`J7³°Àó´S+øÍ^ü^ÉNeø ÈXºq34JãmÚ¹ÃÛ(ÀMrËä„ö’õ€™²Úu"°úað"^k¯×›ŸŸÏr#£š0Dz±Œ´Y¨Í²fÁjI›…òø^§í´¯ÍìëÚOÁ‚ϸûîÓÐæ´Ëx¦Þ-9ÐÎϦ TxTÿ$Ræ¿8öú$öSµà9§¿™¨µ3s!nunn®Ýn¯¯¯C·É65¯Òð—Éú6°÷>²*'îGnèÒVôÏßBeÏ2ä<0Äàl¿¡ìõÓq5wÀâóñ£ ;ñâDÙß@ƒµn¥&gÁTYc€¥_cçä×6ój*]V1ÀéD—Sa¦aH»üñ鎺ûͼjÄ?=ø6q|½ ±/#“™À÷?¶èÁ¸ 4íŠÙCW$ÎÙ¡dó(ôß»¿âØÿ–3‘Q*¨½^oß¾}°­Ð…-–,§Î"n’]ñC(Ÿàd¸¬m O¦ßï“i™cª›É¡ F ô—RŠ1,7‡ÀvX'Žöd1g74#¤FK2«¨~"2EÓ+Þˆ›¬ìV’-ܧè¬ð4Žâ&#–˜ |Æg<éIOºòÊ+÷îÝËmîQ9g<;Ø%°&ÝöÃ])‚ &³Ôg±#¸yƒeÈÙbÒšá‹äO¿žÌ-;Ó,\È 3üÅ–#s×±µŠ"í‡L3ÔU—ó dŸ8Ö@ôl³a@ë¤q3 x[¿‡’Y‘º\C5ÀS´|8ayß-ÎP¼¶ˆß¶oÈ(ËøÐèdª†œ˜Ê.Í$¢=ëÑZLº÷4*¿´©ët=ƒ8¡GR7ø”aà†3%žF¦ŸDšl–—£x’•*«ñÓ õ˜aÅý0*kU®Ý2˜¡™ä û™²j¨‘@ÞQôâ& ÇôoŸx¤kLsH›ÅîÈ`2mS`²±>,Ó3E›=gëMjß¿ÿßüÍß=zԤ˲d¼ž9‹„S‚=hWrK€ÇR·qƒÙL~qeÈÙ²ëŒ3Îøíßþí´ÙÖÌMˆ¬£`dXËÇšçYÏ#m^sUî–Ì´Á?Ðdsµ}Œºëëfì4mÌzV>gÉ»-@b×û.gN™%÷-ÏÊ~É?5·Îð=‘ûMÑ9ð£sD„ìdZªuµ½«­MÖl¼­èX8Àm“¿1žI€·X2*Gö£4CÝQßæ4×I‹’eËÀ¡‘gÉÊr±V]r‰ÀÚ໬~‹§¬ÜC%ÐfSÌÓ[/›Éu'ɽ" $'g„4^ )¹#›$îy´ÅÏ*ÉT7«ê¦ç(Ø,þ³ &™}­'ù fL ÛG<Ã33 ÄJ¥²cÇŽ2älÙuÎ9ç¼éMo*ŸCy•Wy•׿èUj¬•Wy•Wy•×C^åEñ·û·å)¯ò*¯ò*¯ïáuþùç?HÈFOúÓýu™ÌÿÊ?}o¿ìûä6þ™/{(Å÷Ãm|OÞÎÆùçïáûá6²×ñ/½`ÊSeK¶ó÷ðçÿôOÿôƒ„œýÙôõ?óß45ö½ýÆéŸ_ÞØÿÎÏÿ¾½±´y áûóÆÊ5\ÞØöm’)*‹¾ò*¯ò*¯òzh®2ä”Wy•Wy•WrÊ«¼Ê«¼Ê« 9åU^åU^åU^eÈ)¯ò*¯ò*¯2ä”Wy•Wy•WrÊGP^åU^åU^eÈ)¯ò*¯ò*¯2ä”Wy•Wy•Wy•!§¼Ê«¼Ê«¼ÊS^åU^åU^eÈ)¯ò*¯ò*¯ò*CNy•Wy•Wy•!§¼Ê«¼Ê«¼Êëÿ÷õàæØcÖmôô˜³EÚ:ó’Tº¿<$+!ýìeò/ñFþE]|Ê7²%oäçdþÃ?üà 9µZíÊ+¯Ü’¸wÕUW­®®þÂ/üÂFÅ+^ñîw¿ûã³\ýõ»wï~ñ‹_ü“dý ½rã|?_ûØÇN<ñÄ'=éIåÛqªûoŸö´§mɇét:KKK[õÛ¿ç×ÙgŸýóYæçç‹¢øù8?`o§Ü8ßÏ×Þ½{O9å”òí¤”F£Ñæ¼óλæšk:ÎW\ñ‚¼ •Wy•Wy•Wy}ï®Ñh´ººzå•W¾êU¯*éåU^åU^åõ]eÈ)¯ò*¯ò*¯2ä”Wy•Wy•×ÖUÈ~Óúúúõ×_ÿÄ'>1¥´ººú™Ï|&¥tþùçüñ)¥o|ã·ÝvÛöíÛŸñŒgÄ×_vÙeEQœwÞygžyæ÷Õ#[^^þìg?›RzêSŸzì±Ç¦”®»îºÛo¿ýÿkïlƒšºÒ8þ X‘U´‚°²€CD¥ì‰¯ Q‡vfp:;®Úu¦Ë´£‚èn\¦(ØÒÑŠˆÀ(¬Ú()ÃZ@5„¤ò"c ¼Š!7›×³Î4eìŽvg´ x~Ÿî=œ{ïó?ç<çIÎyrqss#Ûkã«W¯Àºuë–/_÷îÝsrrÚ¹s§‚[·n†††ÀððpUUDGGÏŸ?îÞ½«T*½¼¼ø|>°,[\\ áááK—.µ!åååÖÎßÙÒÒÒÖÖæââCêܸqÃ`0¬Y³&(( E]]ìܹÓÉÉɶZúúú4 —Ë%§ÍÍÍ<˜?~tt4)ùþûïM&Shhh`` ôööJ¥Rxÿý÷I‚PyyùØØ˜¿¿?BÈÞz‡ —ËýüüÜÜÜ ¡¡¡§§gÑ¢E‘‘‘`6›¯_¿ëׯë­· £££©©iöìÙ;vì°¹–®®.'''âÝP__ÿèѣŋoݺŒF£P(€M›6ùøø@{{ûýû÷­é…"‘hrrrÕªU+W®´¹ƒÁP[[K¼T*Õ;w`ûöísç΀Ÿ~úi``€Ãá„……‘ɼ¤¤¶lÙâéé ¿üò‹««kTTÔóŸåèâæí³éïÍ=#ÚaÅÚ¿…¼:U‰‰‰·oßðÅ_èõz†aÄbqxxxSSSii)˲*•ª¿¿?88øÌ™3ccc Ã444¸ººÚϼ–––f4†©¬¬Ü²eKCCCYY˲ýýýCCC\.7++K£Ñ0 SWWÇårGGG/_¾l0Ôjuss3dz«xsõêÕŽŽN×ÖÖ6oÞ>ž”|h4ýüüÒÓÓY–%SĦM›ZZZJJJX–T*•«V­zæj±X>PY~«Q*¯@tä?úøâñŒìBüÊHHHÈËËä!D"""´ZmaaaVVƸ¥¥eÿþýãuëÖFŒñÁƒe2¶'¬ÆÿüóÏ‹%77÷üùóc™LvðàÁ©öïßßÒÒRSS1ÖjµØÎ FbŒ³²² §I„œÿüóÒÒRÛöN[[›H$zçwÈ©ÕH««‘7nÜ cÒ*pÛ¶mjµº¨¨(33cÜÞÞ¾wïÞß?¢OmŠ/ßu²Âu±ï,ptzã W‡Yޝ(ŠŽŒŒôõõ½ýöÛ3c-R¯×çææòx¼ '99ù³Ï>ãñx*•ʺª9íðõõåóùd`°qãÆàà`멇‡‡¯¯¯R©LNNÎÏÏŸvrüýýù|þ¬Y¿íwww»¸¸,Y²dÚiqppàóùS U*ÕöíÛ:D¢§\.—,—ÜÜÜÇãñx§OŸ~96Ëñ ×…Kþ:Ûù/¯<}@©Tž={6))iáÂ…3c:&ßiNœ81õ'NÓ””””´´4™LæííMö¨(vHcccfff^^ž³³ót×RVVVSSsâĉÓ;"‘(;;û£>:uêÔt×266výúu™L&“ÉŽ=úÒïÿÊ÷Håryee¥F£Ñh4MMMUUUd‡múâããK'AÊŸFSSSIIIBBÂÌø—œœ¼~ýúÇ×ÕÕi4𢢢é®(..ÎÛÛ»««‹ŽUÛ‡œÍ›7»»»ÀÀÀ@oo/É®¡P(œ®®.ggg’û4ÈÉÉÑh4ÐÛÛ;Ý?€Rþo¼Qb9N,Ç™9E¯t“J©T>|˜wvv"„Bµµµc“É”žžŽz½c̲ìÚµkBW®\1›ÍvµßNfBr¹cl4SSSB{öì1 cNG*…B³Ùl6›/]º„ cYÖÞÒôz½@ @‘D5Œqmm-±¿³³“LHH@ÅÅÅ*•ŠT¨¨¨°X,ö£e×®]ÖãgŒ4™LgΜAEEEYÇØÖ­[B/^4›Í‹å‡~ —<}úÔæZ***rrrÈñ?þ¸fÍbÙˆfY6,, !téÒ%2Æ„B!© Óé0ƃaÏž=¡ÔÔT’‰cW½CHIIimm%cìøñã¡>ø€Œ1FCä[,³Ù\PP€Šˆˆ°'***ºyó&96III¡?ü?::JŒ/--%Æçää „"##ÉØÓëõï¾û.BèܹsÄél‹Z­>pà€5?¢ªªŠØ¯T*ÉXúôÓOBGŽ!céáǤ‚D"!Ε‘‘Ú±cø ýœXŽc/÷,ò rð DûÎÊÀ³÷ÊÑØÝ4S( å%¢b «Æ{…ÿŒ¦o P(ÊŸ 9 …B¡!‡B¡P(3‹ß2Ö&ç-¿×3Ì™G…B¡P(/…Ö>íìö?BŽÆ}ÝMé}?·e´( …òR¸)Uê½ ¿þ/ê)¿Ëqp˜˜Ëɼ¥xá-\&”ót=´)) åµs6Œ;¸Xíó«MÎå8þoÀA*m8øï‚ÈCç¬÷yþõ‹%|©1j…#mq …Bym)ëq¼óxÖ C€LŒT|Wxú˜“§çâ ·ÁN¹«ç2—äÏÏÁÈêÔÃC:Žmq …Bym1çÌyaÈ ñf´·u•¿·§§§yãô¿Ne·ö ðd¼ðb³ÉÀ±(‚æ=¥-N¡P(¯-}sW÷L¾i2L¾°funb°ß’Çâ¸\®Æ ÅààPô®ü‘'Í2ëÍ“´Å) åõeΓƒ¶¼ømú¥×.yyy.[¶ þ šib š©ÉIEND®B`‚saods9/ds9/doc/user/catalogs/index.html000644 000765 000000 00000035602 11555611700 020407 0ustar00joyewheel000000 000000 Catalogs - DS9 saods9/ds9/doc/user/catalogs/jmag14.png000644 000765 000000 00000537254 11332127304 020210 0ustar00joyewheel000000 000000 ‰PNG  IHDR&_ÄŠbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ! ”´iP IDATxÚìw˜UºÿOåÐ9LOwON0C¢¬aÇËUWEtw®UÁQLq”•Õ5"`¸¨WQÄDQt0Ì “CO÷„ιª+ÿþ(l0 .ë]·>Ï<óTW¿uηÎyë¼U眮)Š =Ï#<âóùÀÒÑqæX††††Æ¯(Áp¬Äe¢} p8C4ƒ6› †á7ËÏÏ¿ï¾ûŠŠŠrrrÐ`0¸råʶ¶¶Gy¤  ‚ ÀýÿãÃÿ¸ñÚßkµ¨¡¡¡ñ«@”¤·7¾ûßw]’Éd~¼yWÿ¿øâ‹óæÍcf(Ư¾úêœ9sDQT÷¨;o«ÿ{{{üñ‚‚‚›nº õx<ííí?ü0A‘Hú†OÜDñ‹ýM¿ÆrVììî ñ¼˜ŸkI³|4‘¶u: ÷ù£8Ž»í­Ý€Ñùõm>Àˆ2wK÷€$ÉEn[4Á$R¬Ýb@Qx §IÜ•cîðÛg7J ¡ÃòN»I’å`$iБ6³¾»7ÃPe‰ûHGï`ûŠ"gOˆãż\ ›á#ñ´ÙHëiÒ7Á1¤$ßÑÒÕ?ؾªÔÝÖ3 Šr¡ËO2ñk3ëq íÆ(ËsXÛ{üƒíGUä7¶û”äç"‰4ÃåÚŒŠ‘„ž&s,ú®ÞC#JÝíÇ ËõD2œàv˜9^ ÇR&mÔ“Þþ†"eŽæc…U–¸:¼A” \ÖD*O26³žÀѾ@Œ$°§µÍsŒ°‘åyG:ûY)ɳ£©“qXüᄎ&Vc—/A`dy~ñ%\^˜Ûˆ°Á•cæ1K™ô”É@÷ô‡Q®(t6uö ¶^âêòxAÊwZSL&–`¬&Eâ½þ(£….{›ç¸ªÏkîê“e¥8ÏŽ¥’éLŽÕ€Àð@(NS¸Ónîüª/+pôcL†wæ˜DQE“F=e1Òž¾0‚ÀËG:ަù¤æ“¿€Oúü˲ápxpcþ½-<A²,ó< …~Ä&»-˲$IªñØ[,–§Ÿ~zÁ‚ …B>ø †a?™:Aï~٠ÓNýŠþØtÊe!Ó©¤¯w€Æ®´wùDž)ÍÕ7´v'ñ±%öCMñXld‘µ¹ÃG rèH8Ú×ï7S0ª=½@âó,dS[O2ó­ýØ2ûáæ®h$Zâ4ôùþ Ý€I<ëñöc@´éÑ–No:•Yh©kêJ$âãJíuM±hlXž©ÛÛ†œf‚M'½½&p¨­Û'd˜r—¡¡¥;‘ˆ-µ×éˆÅb#Š,­ÞP(’o§£Ñho_ÀDB8$vxú1“o£´{’‰øØ{Ý‘Îx,6¦ÔÞÐÒ‰D‹sõþ`ÿ@ЦG!ÓííG!Lj7wô¤’ÉÑÅÖºæÎx<>¾Ô~èHg,«p=½@(×L°LªÇ7@¢²‰„Z»¼<›®pUaãTûX¬ªÐÒÖí …Ây6*‹ûúüˆÔÑÝ+ la}¤Í“HÄÇ”Úêš:ã±Øè[ckw$-rèÁpÿ@ÀJ£@â»zúEÈ5áÍ=ÉdbL±jW–sèHG,+s½}~ ä0á›öøú D²ÐH[§eRÃóMõGK,çPSg,«,0wt÷Ca·•L&âÞ>¿4*·w÷J<[ìÐ5¶zÔªW…*¶6µ÷„ÑÂ](îXh–ùNO,ó.3ÙÔîI&cJìuMñX|\¹šQ´Ôeèí÷ûý¡#&pL·o‡$´vz™tª*ß|¸ùhի†ç›:{ú‚Á°æ“šOþ2>éñö ûŸ§—³,û“< Çž0aB:Vw* @€ †³öcÆŒaYV=VQÔï¡ì± #0¬~;iÒ¤ûî»õz½‘H@PkoÌj V}6ûþH:Å •…65 €`€‘Â-z‚ $ËGÓ<€ÛJË Æ3¼(!0d¢q#ËŠMq)VDÈe¥Ã .Í §ðÙ…Ä»‘ %2AÊî´è 3³‚NdI¶›h@mްìs;Ìû[úŒ4>ºÌùe}M`§(ÚÛèŠ2¢ÌÕÖ‰&3¥yv†“ºú£n›ÑlÔî0ÑĈÒÜ= =:›2ªøóºnAFWäÕwR¬P^èˆ$3Þ@¼Ða&I¢±;`Ñ“å9_ñê)|reÁg‡º)7¼`k?NjËs{éHªØi0Òì å˜tùË7-½ SîüâpM`« ¿:â“eeD©«£/I°%yöŒ wöE]VƒÍl8ÔÞo¢‰‘ß ›<²xWE ÑîÆî`2Í—äÄÒ|?^c¦i²¡+`ÖÊ{½zŸ2º`çÁ.GÇ Ë?Ð:áÅaE¹ýQ¦?œ*rZaiî Ùt¡Óº¯9+ÌCèÄʯôJ²\Uê숅bL‰ÛÆKJGoÄiÑ;¬ÆƒmýFUêÜÓУ#°É#‹¾<ìE`0ªÜÝä ÅÓ|YAN‚<±ü“^O5túM:bøQaØÔo…–¨m€åÄŠ"G Êô…’E¹ÚùËø¤‘&™üäóM¶‘ÏnìÞ÷ÊžãZÝÛ/xÙ´ar¼±7˜º}õgcKrîœušÍH}Vç}ø¯®:§êúêÑ4‰©#:^¯q»Ý×]w]&“ÙUßûÀ«{;úã#Šìf= ÃpgüÑõ_¯û¤±Ôe)vš!ÚôE i°’8öŸ“ '—ê Kœ7Äèõú%WŒ›Pf«oë‰spÃxùÔâ T™K8­ž@’¦È;.ÑéñöE9%Ÿ’¿b§qÎÙE mž8‡(0ªØ@WM+-·Ã# ͱT&˜’RœJdœ]ŽE =h1PE¹¦AÇJ\¦¶¾XFËÜæP‚ˆ±%N“¤@ý ·Mo6Ї»B6#U˜kÚ×Бx‰Ó|ÄQ¨Ômî2¡Wî6³‚ÜHæÛ :ŠhôDrLt¾ÃTÛê7éÈâ\Óáî0‚ ¥.SO0g„r·%Á ¾PºÐaÀ0¬ÙuZt¹Výþö€EO9Í;‚†•¸Lý –—ÊÝæpŠë²ÅN£ ö¾¸Ûª·éCG…}Ó I¼ÄinöF$”¹ÍQ6˜È”»Íœ¨tù“ùvƒAG4tGrLtÃTÛâ7ÒD‘ÓÔІ¤ÔeòSQ†/w[RÑJ: Ž5y£¹ÓfØß0ëÉ"§¹®3„ah‰ÓÜ9HsR™ÛMñ}¶Äi„ ¤­/î²êm&úPgÈj  sMÚ»L-¾˜ +ens Æâ™2—I”Îdž]oÔ‘õÝa»‰.t˜öµú 4Qä47x„”ºL½át$Å—çYÒœÔLäèI?ÒÍ5ë\vÃ7m³Ž,ršê:C†”¸ÌÝþD*#•¹Í±´ÐaŠFFZ{c.«ÎnÖìªÂ¶I+q™Úzc¼¨”¹ÍÁ8ëeJ]&A†:y6½IOî Ûta®ñ›V¿ž&Šæ#žˆA¥.so˜ '¹ŠYï‰eù¡Œž3þ}÷ü}ÆW=¼ÙDyW½oWýÑÉÏœV’—cœ8š=àÞ?L¹éé’$×w…=ÿ™,+}á@Gb÷Í>3{€pJ<Ü>klÕ¸‘•_µ…¶ L*w4wöôöù'V7íõçšiO[«ŸÅ$`çd”’<‹p ­*´Ò(ß U©Ø{¸slaicc4šŸíj.Í!/>}J8Ð{áø*Og›<ÆïKNŸTúîG_/°Y¬{¿ŽáÌm¦.œ×ÖÒ$òÈ^:¬Ä}úðœW׿—L1®¢aŠäÐQ„ÎhÅ•L&6à(É1QXk?ƒÀpY.]ïexQ™\f¬÷2 /+2zB\4%”çêÒœì‹pIáhÛCbhjìeL)3Ôy–—N+1µú3 FîÒGÓR_”˳R · 0Ï5M}¬$ƒqEúC=iN'•š{™4'Ì7 Ä…@œ/²Ó’ ÆH½QÎm¡Pn`ô$î4M}¬ )ß 37ö2éŒ4"ÏHˆþ_h£eêö3&=aÕ- Pà —¾Þ›æer©©¾—a8iL¡ÑáÃI¡Ô¡Ë 'ÌÚ¤žÀÚ E‹rèFß1%<¡ØÔÌÄÓâ0§>Áʾ(ç2SŠ´õ34¹,dS/+H`J™¡®‡ayr™éH/“ÊHUy†`Rˆñ6Zp»Ÿ5é›hégîÖö¦9Až\jjèeÒœ4ºÀÐåC ¡$‡æDÐbmÒ@am #%ºáXaã‹]A.–*œºdFöE8§™$0¤m€¡4ÏJéû¶ê{V&•ššû3IV¬tëÃ)©?Êå[)‚ÛX#ç‰æ~F–¡±n}÷˜ªU`è Á8_œC ð„X«Ð|RóÉ_Æ' Àß6òßËq±'`6ëˆGo8ë8ûÇ7Ô~o|šRéú¯«§>ðÊîldš6:Áå“Ìzr°ñÑùÔ0 :Œ/,˜î²ê¾`R7ù9ÆÿYrIžÝ H–ò鑨’Õìª=4>Ÿ,3qåNªo œ”ñ£«`ÆNòv«9×]h5›ŠF£¢ ~;Iì;P÷UCW,þhç—ñxŠó#蜋sö§Å(GÌ4òù_¶FPE–ìzÌ¢Çgœ9ª8ß ±a6Ø)XGá=¾ýãOÐÝjé ]3ó?æüáŠ@†Üߞͥ•n] ɰL %îÍ`(<2úª“Q4¦€þ¦›Éˆ`˜“ì ñá´Th#XQé 6=fÖ¡}C†9É}Ý AãŠè½ /*Õ4À%2Jqc¥ž¨kÆInà()É!ô° /Ò}ÙžehDUçc”9HBì‹n AP[€7P¨Û‚×ù2 ʧöv¦e. ÷{˜Œ*rIO„¥¤ÁIJgˆ·ê1«mèËà2ÜEÖv3‚ÆÒ_u2¼*]T‹Ÿ‹e”â"‘‘=ÁaÄhnàH)uû{X†&'ì°Mó ÔASb_Lt[pZ¼žDó-ø!‹"ðèzoGZR Qùô–@E.éðÁ””oÃYéñf7 õ}E*Ýdm£hl!]ÛÅp"î"Û\Œ•‹ìD’“»#‚Àé)¤©Ÿ#q¤,—ØïQ…Ñ»;Ò‚ F¸©úÞLŠ¥"”{c¢Ë‚cÔêçtR`ÃyYÇÒ{Ž £zYFå¹doL $¥|+.) #È›u˜ÃˆÖ÷f0®Ê#¿î:Zõûº˜Œ†;ÉŽ e¤B;‘æ•î°cÀŒz¤Ÿ#0¤<—üÆÃ@4¾ˆÞÓÁð2¨rS}™$§”äFòF§Ç1¸ÅÏÑRd'zY†Çévw¤E™GÕ©ÂdLHˆyV\P{7Ѩӄk>©ùä/㓊tÙF‚ –—šz"M=‘#ž°ú×Ð$9;)`°1‚ÀenKö¯<ÏZžg¥ ‚¡ÁöÙm^? I’"ÉÊqEß=å@Tâ2/ùýéO¼³ÏãO*ò¬wÿaªË¦Ï†A À& ûí(»a’ËL!]>O¡‚™"P= ?ºÈºûHßÌI¹Wžc¢ ¦–öκ6Ÿ®È¤e58 ” ÆAfÊëë D“gM¬ Å™¶ÞÈï.<‡%ŠÚ|Á|o°©¡>•¼!†à„Ð9¼¸úlÄZ€H¸/’IE%N)ÑÛµó‰‹Ù´k_½€Ù0[(gBö{yƒó-pK@àe¨ÌSr ­”XAÝÉe€ r¸O°Ñ°Ëˆìóòç[†>@PîKV)·Á¬zbrž&1øÈ€˜£ƒFôko$à|3rÐÇc(\`»#R’68ž‘{r¡ F¨%(æêa»ÝïåÍ$œg>*¬À·„Œ •[¡PZö§” ") +"¹ °‰Fêú+»MÈ7=<…Ãf¤q@!¨Ø÷%¤0£”Ù`V=Q)ÏÓ8Ò8 ÚiØeDk=¼€óÍÈ!¢pöD¤*ìp’S|q¹À£Ô:8Ç€~£ 3!|<ŽÁ¸=$°"(³ÁaFH)ÅDPGHr`3êýN‰ÃùføÈ€ )P‘ HÈ!F)³"œ©ùä¿Ú'³O9²^ÞÞðîî¶ã:Êæ]2áÚ걃L“mðOAð‰O9_6ô>úÖ׃“Ý{¤÷©wjÍ:ÝnÖeÑÁÇ@4¶Ìq×U§?ø?_’z÷¦Ž(²×Í'8Î*µ­}ª]HGºzÃÖâÑG:ß?ÔЬs ÞÆú[Û`6Å V±‹û;ûã%GL/mol¨oõó†¶K¯ûôH¯?¼~oogíAÊù p*êolíjé ƒ68–oM±t~›g ‡ïqB—÷…Y…(’JKkì|$QÛ°‚b™bDß÷ìܽϗBŒy¬ÏßÜŠ÷Ä¢ HO@9:ÐVD.·ÈÞˆg ‘9J€‚i¥Ü2äK(nDbPsP6‘•­!†à“ì‰)IíPúR Ì€aVä¡þ¤R`7e™HÐI v•Ψ’ 1Å›QTÙA$ûSJ± n )¤ÇAS@ÖáP®t„A+,r*Ì®X8˜VÊ,€—!o\qé! ƒš²‘„l:ÐR˜äž¸’à Q9J 3Ê0+HñP_RÉÿV˜•‚Ìh Ê8»rwTI ЇâK‚ *m šý)¥È n )2 9 Óª°ˆÂKЈÅ›± 4®Y8˜VJÍ@!oTqé!ƒšƒ²€ìß +2É=q  HC!F©°F„zJ¾"P¨9([(ÈBæ‚!pžQîŽ))þa± ©ùä¿Ú'ÖÛÈ‹¢|b¼¼ñIãuŽ;6¨sð=–ôîî6A’L,™Té^ñÖ^Q’?=è™}þè‹þ{Ær²)Ž.ÉYyû»m†»ù$‘DÐR$ΩH63<)èdÑ —p8}8¬HúÓ`ŒêŽc¼CÍPLâ4#ãµ}¼ì8£5EÉö3`„®OJŠÓ|¨_íg ÕÙe¨°´0/÷7%¢(~øå7ž@’¤QìP$ 0@®“(À•»8«,éC&8Âe¾P6ûa)S(€)€“Ij(‚ Æ;¸¦‘ÁïM`1.6 iêK!vJ$¥3ŠˆìÖ‹Í\”Á×&8 Œ±sQ")@å&>Æ!iÄI‹0:cˆ“rh¹-Љ2eçêC/ñ®9B0"ni$ÈÀùA”!_1’—Û£R×!éa¾$ÍÀEF ¾b#EU:¢+ùz±9‚ ƒ„¶sÝq"ÁCe&>Î!ýiÄI‹(:cÉZl⢠&ع†ÁK`œƒk‰Œ†Y„ƒ8Ï È ä"F\2“r{”™¹#á£'¢ «²ò}),ÂÂ…F!#B½)ÄJJ4*wD1 V bSøa£ì|wKðp©‰OpHÉ¥E V:£(‰ÈNZlQ…år!‚“À¸®5J¤PaÂ,âOÃn½ÐE ¸d%å¶(¦(`¤k$ŒA••ïOaa.4 ¼ù’ˆ…”ô¸ÜÅH)úVXöDFÚøžçà#Ÿâáþ4’C‰ø·UïÒ‹-ÇVýØ®=J¤Pn",âOÃ.½èŒ"z\²“rk“e0ÊÆ5„©úJ ïOc!.0‚y“ˆ™Œ¸ÜÅ`ù#Ç Ó|RóÉ‘OŽÍa;ÒGç|ï§þ}Cíq!gùŸ~;¸‘ÏÎ5¸cæi7?µýèÔÙWOc¤‰£Î=˜zÓ“ޝp.˜9ɬ'MzⵟϹ`LE¾í˜G¢ÓN;m×®]©Tj(S¶/ÿ¯ wô/ð²€tÇ—|¬¥-TþxÔóO¦F!r…‰m‰ÓŠŠ ™P‹ñh¾.£Ø›ÂsHÞFJÍ1Ê€‰eFîPXG#Ò0s¦!¢C ¹Ä˜égˆ”€ê3 ég0Åép¥=N1±ÄÈÕ…u:Tnf„ô$"—3ÝI’“ "C&) AË£9 ]I‚ yz¡!BëQ©Âœ9ÒQˆ\nbÛâ´¤€bC&ÂaQͧ3‚{RxÉÛI©éXaæLc”†Rú­°]†Wà¾4î¤x.· ì`H#r™1Ó“"3"T¤Ï¤D4Àbnš#PЙ ̸P ê #¹ÜÄvÄ)QŠõ™(E2hž.C'EØ !‡›¢”ËLÜ¡°ŽB¤aæÌ‘( Pb`ý"É#ºŒ À½i<—âM¸Üz¬°aæL]X‡Ar©1ãK¬ê3Œ„0˜›æ(TéHfL,4ð‡#´•†™3TaÆLg’d¨HŸ‰ñX8ƒæë8ž$a#„²MôÚ IDAT\Z<¥ ¨XnæÔ®0±Í1PbÈ2XœG tI}iÜAòRj‰QFL,UK•†™2õ É¥ÆLošH‹p¡žS«ÞMs4ª´'H&ùÃaú¸ªïJ’¼2q ±hžŽCaÐ$¬¸àÒ Ñcª^óIÍ'ŸìLàd¢ã…Eÿùã|vãù矿ùæ›ãñøP"Â+¯¼2{öluFõOÚ£(:eÊ|ÿ£Ó÷o«3Ö~?²ìlãÄ?ÒUÿœÿdR8¢¸h¶#Iq2’G3a r„‹b%êNQv‚3`RcLoÄD'ÅŠHDvÑ™æ8-ÈM³,áñ<Ša%ØÇ2C rK\gÆ…\Š;6Ò¨ì¢2 Q= 7ÅzÓDRÄòi&) ý,™Ke`XiOÒVœ·‘B]Ä Ç$'•9Ñãˆâ¢ØÎ$ÅÊHÅD8,!\$+¨ë¨0±á[au‰(.:Ó§%ΣY?‹GxÜM1œ {Ó”ƒäHDjþN˜Be'•iˆêaäQ¬/MÄ,Ÿf’"ÚÇ’¹d•¶mÁù’?1èPÉIeê#z nŠíNRŒŒæQL”GýÂI± €:S´àM¸ÐÕ0ÑIsuQ=(n:Ó§EΣ™@sG…õ¤©‚£Q©)®3áB.ÅŠv$¦ƒ ÈM³} ð<šI‹H/Cæ’ VZ: .äPÜÁ¬°¨NæI‘iÍ£˜8ú3„‹bIÚFðf\¨ê ˜˜KsuUÛž¤yΣ™` q„›bò¤©‚ÓaÒ‘˜Þ„‰ª0•]T¦9N+ä¦Ù~–ˆ xͲ"ìcÈ\2ƒÃJK⻦QÉEeê¿­úž4™Ñ|š‰ èK8)JG’¶¼•G­zÍ'5ŸüE|2)bƒGO~¨‘ÿÞIh?ÉqÆ?ù#Óïf¬ q €€ à_ן¨ ý¬.&¥T4Ä“ªŒó2ÒÖ;p†€¥¶”Á€ò,Ó‘2@È#“>V—ñR:ä¨ G–P±”„y“H¡Ò–2š0Έòm)#ËN"åaôi +¡bæÉR:È^–Î#“€Ž”ÁŠet¨Ð–4RˆhǘnFÏ+H!ïÏÐ1(£¢A–à¤;­Ï9*̨GU˜@™ð±º„ˆ—ÑÑ G8ª˜Š1ÖÃèœD…äö”Ñ„rF”kO1Xq)/£OKX)óst˜'ËèhL$zYÚM$!t¤ ,£G…Ö¤‘B$Ît3zNAŠ©X?GG¿ÖŸ¡ È„¨À]i½g)XlKu¨`ÃØÎ´AVà|2ÑËê"^JÇB¼*,® Ë%Ò8,·%F”7¡\{ʈ@Š‹HyY]JÄJ©h€£BZõAA Ʉ據OþB>IE2ÞüÐïr†h TXX¸hÑ"Y–¢(bv\¯TV 7”TòWúFU X °È)ˆ¢@8,I $)0 ɤ2A IœŒk/dd‡EI%F! @PR°ì³, "+KЉ Œ@2ɼŒB@!`1#c?. dRx …€¤Ì Â8UŽvôD†* ’DÉ @!OFÀ"¯ Êñ'2aÇ—ðÉ ƒ!=*lè%¬ð2…€O&r2ò3„á°(*°üÏV}VØOW½æ“šOžŸ„A’s-:EQNlÒOÜ‹ÅÌf³¾×~ðÇxßÛo¿}ÜÎÙ³g¯[·nÊ”)gžyæÏËûóÏ?ß¿öãïÿ{·Û­n¿ùæ›’$7î£>š={6`ݺu\pÁ¨Q£†’rOOÏÆ/ºè¢aÆjkk¿üòK@IIÉe—]vÊ qÇŽ‡Î~œ3gNNNÎ/V…ÉdÒï÷g?Úív³ÙÜÑÑ¡×ësssF‚'Vw¶$ÿ¥444|ôÑGêö˜1cÎ?ÿüŸ@eeåŒ3Žûö™gž>|xuuõ?‚ûöíûâ‹/²/¹ä’òòòŸÀ0lÑ¢E’$]zé¥óçÏÇq|è¹[­V›Í&ŠbWWÏóMMM¹¹¹>Ÿo„ ‡....,,<ñõJ'b³ÙÔsñù|K–,¹í¶Û¦Nzá…rDzìÝwß}ñÅoß¾ý¡‡¢i†áwß}÷µ×^+..~ñŃÁà•W^ÙÕÕuðàÁ1cÆüío£(j(ú†éèè˜9sæÔ©SKJJž}öY¿ß‡§OŸ®–ÞêÕ«ÇŽ»víÚW_}• ˆüüü5kÖ¨Ç ‚ðüóÏ¿ù曆•––®\¹2ëQ?NooïÿøÇk®¹æŽ;î@¤ººð9sæø|>Žã®½öÚ¹s窖étzîܹ@€ã¸o¼qΜ9êå IÒöíÛ<8ôš:ï¼óŠŠŠÚÚÚ6lØÀ0ÌW_}5¸$Q]°`A$¹úê«—.]ºfÍš‡~xÊ”)•••þóŸ=ÏósæÌùÓŸþ4mÚ´iÓ¦¹\®7ÞxãÃ?t8CÉ]¯×#râMA3gΔeù¹çž3™L§vŠ¢7n ‡Ã'N,**òx<»víúïöÒéô矾gÏžO>ù¤¾¾þÜsÏ:uê¹çžk·Ûׯ_ÿñÇëtºššš]»vÎ:ë¬x@=ð­·ÞZ¾|ù;ï¼SQQ±nݺ+Vüãÿèêêºçž{t:Ïó[·nݵk×SO=5nܸ]»v-]º”¦iEQ6oÞl4µ€ñ/¢¹¹ùꫯ6 ‰DbÓ¦MÙýgœqÆäÉ“ _ýõ-[¶üäíÑIĆúúú;v8p ™Lz½^I’Ôýê•°sçÎË/¿üÚk¯ 'u&Ÿ~úéŽ;vìØ‹Å.ºè¢É“'s×ÕÕH¥R^¯Wµq¹óÎ;‡oA˜L¦p8,Šb&“‰Çãv»=ƒÁ•+W®_¿~ýúõ÷ßMMÍ矞ŸŸäÈ‘®®®`0Øßßï÷ûëêêrrrN*pªÝk;vìèííõûý}ô‘Ú!óä“OþçþçÎ;'NœxÑEq÷ÄOŒ7nóæÍ›7oöz½;wîL$×_ýêÕ«ß|óÍuëÖ-]ºô‘Gùä“ON*÷X,’ɤ^¯Ç0ŒeYAA`Y¶···¤¤¤¾¾>‘HœT7׌3®ºêªššš%K–´¶¶îܹóÊ+¯œ;wnCCÃÕW_}饗îܹ³¯¯ï–[nI$W_}õ‹/¾xÏ=÷<øàƒ—\rÉÿüÏÿ¼þúë/¼ð³«ªªzå•WvíÚ5qâÄ÷ßÿÊ+¯¼ì²Ël6ÛÎ;¯¿þú'žx¢££cÇŽ>úè–-[>øàƒ¿þõ¯ê±{÷î}à/^üî»ï¾ûî»ÿû߇˜©(ŠápØd2¢hAAÁÊ•+?øàƒ-[¶,X°`É’%Ùë|ð£>Ú±cÇ-·Ü²pᆆ¯×»jÕª]»v >ü¤jj÷îÝ;vìhoo3fL*•:®$Ÿ~úé7>üðÃO=õ”×ëÍd2½½½ápX}æØ¼yó¢E‹î½÷ÞÚÚZŸÏ·mÛ¶#F8Ž¡w¯X±¢¢¢â›o¾Q?J’´ÿþ¹sç^tÑE@@½p.—+''gÞ¼y‹/¾ÿþû/»ì²ÊÊÊ={ö 1°þú׿ÖÖÖæçç[­Ö‡~øÀ>ŸoëÖ­cÇŽµÙl—]vÙîÝ»[[[_yå•gŸ}vÕªUÙ¾\³Ù,IÒîÝ»c±ØþýûF£(ŠW\qEeeå›o¾9qâħŸ~Zm‚Âáðþð‡Q£F­_¿¾ªªê¹çžÓÃ)¤®®nÇŽuuuÙ~પª;wÿîw¿|ß¶}ûöŠŠ ·Û}饗žšŽ5•ŽŽŽÚÚÚ¦¦¦ï½E}ì±ÇvïÞý3Nì›o¾©­­­­­M¥Rêžn¸¡¢¢âŸ,¯É“'gÛ‚ÓO?ý¸W¯^ýî»ïªÛ>úhmmmöãÞ½{ß{ï=õÖéd»hjkkƒÁ zÅ>öØc6lxë­·ŒFãc=ÖØØ8”DžþùwÞyççu¯E£Ñt:MÓ4Šóð:räÈŸ‘àSO=Çÿë¿þësñóÎ;oÆ K—.5kÖ­·Þ:xxìÏþóo¼QYY¹dÉ’¯¿þú©§ž:ñð÷ßåÊ•¿ä59vìØU«V½õÖ['uÔ¡C‡Ö¯_ÿæ›o.^¼Øn·«n=öXÖÿv»}ñâÅ?™ÔYguâàÓO"Âý÷߯ns·téÒ1¾óÎ;ßxã’’’Y³fÝwß}ƒEÑ‹¶nÝšýxÎ9çdÇuÎ;ï¼›nºiÓ¦M¯½öÚàC.¼ðÂsÎ9gÉ’%---/¿üòí·ß^RR²xñâd2yÏ=÷”——g}’$ÉÅ‹ƒÁ{ï½wôèÑ÷Üs'N!­­­µµµj÷šJ[[Ûc=vbgÚ™gž™íã9•k—^zéÌ™3O?ýôq_!2räÈ‘#GÞ|óÍf³ù¤Nì®»î:ÙÆ}(L:µªªêŽ;î`fÚ´iÇÝŠ6lÊ”)—^zé¸qã8Ž;%9Þ{ï½Ùí¼¼©Ã€ßï÷ûý‚ X­ÖL&óè£÷,…¢¨Á`H&“úÓŸ†žòO<ÑÞÞŽaØwܑݩÓé‚3f Çq>ø`gg§Ëåzúé§Ÿzê©ë®»níÚµ .\¸pá”)SNIµ555éõú‰'–”” FÈR6zôhQ|ðÁŽŽŽ“½uå8NEEO¶Kð8öíÛ7oÞ¼¹sçžþùjÕðßïO¥R&“ EQ³ÙœN§Õ™r§dÖÃ0_~ùecc£ßﯪª¢(Š¢(«Õ*‚ßï_´hÑyç§v´–””L˜0Áb±0 £¾…Çq½^_ZZ:lذûî»O8òóóW­ZµfÍš?üðÀ'NܶmŽã@ ‘H †ìµÑhÄ0Ìï÷'“IƒÁpÜsäÉb·Û‡~àÀŽãÌf³Ûíž8qâßþö·wß}Wuƒæææãž/õz=ŽãÁ`0«Û?;÷3Ï<32 3cÆŒºº:«ÕZUUذaCKKKMMßïŸ>}ú]wÝ500ðÉ'Ÿx½^Y–Ýn·Ùl¢kõõõuuu~úé3f̘1cFqqñÞ½{/Á…BÁ`°ªªj̘1êÕ­ŽàÆŒSPP°wïÞâââ¼¼¼L&3mÚ´W_}õÉ'Ÿt¹\ÙûîD"qæ™g®_¿þ™gž±Z­Ù™uÿ ¬V«Ùlž8qâúõëŸþùÁ_}úé§k×®åyÞjµžš§«ÕZ]]*))©®®6ÕÕÕ<ðÀ­·Þº`ÁÀ³Ï>k³Ù†xêÜÓ%K–¨—-[¶}ûöÅ‹?þúë¯!??_ͨ´´tíÚµ/½ôÒ£>:ô2²X,çž{®Óé4 j/Daaá­·ÞÊ0Ì#<¸ûî»ÕÐRYYyÆg9ÎÉ“';ö¤f1bð$Ú3Î8#ÛTmÚ´iΜ9 ,¸õÖ[1 {ýõ×Õ’DQ´ººZy|ÖYg9Λo¾9N«'¸xñâ3Î8cˆ¹‘››ëõz½^/`üøñf³ÙápF†ÕyÒEåææ±¡ÔëõS§NÝ·oŸ:upÇwà8®VñÛo¿=jÔ¨M›6­X±bÁ‚çœsÎêÕ«7lØP]]ã¸Ãᨮ®¶ÛíEUWWŸxûCTUU½üòË/¼ðž={=ôЬY³fΜùÇ?þQÍ÷•W^)((xþùç_}õÕ/¿ürË–-Ë–-SûgN?ýôçž{î7ÞØ¶mÛ¬Y³n¸á†!fªNÉUå•W^\{íµóçÏ_¶l™ê“Ï?ÿü„ ¦OŸ>jÔ¨yóæñ<¿páBÀÚµkGU]]=bĈ“ºhÕ GOQZZZ]]ŸŸŸ-ɪª*Õ-Y–}ë­·zè¡9sæ~ûÛߎ5êŽ;îÈd2÷Ýw`Íš5“&M:ÿüóG ˜2e Ã0'q› ÃÕÕÕ•••€iÓ¦e‡ÜKJJÔa¤ ©S³> ظqãÇr\.Wuuu¶ª¬¬T/õG§Ÿ~º ³fÍŠÇã/¾øböêV'¯f󪬬TE’$ùâ‹/.[¶léÒ¥§vÚÚµk7oÞ\]]››»zõêåË—>|ø¬³Î:®Ôøgn‰ª««ÕºÎ^Ñ[¶lɶó/½ôRCCC¶ŠûÛßbfµZ_}õÕŸL:í´ÓvïÞÍ0ŒÚ.'“I­Ä54þ·øâ‹/öìÙsûí·úé§sæÌyçw~ûÛßþ,‡^xaÓ¦M~ø¡æÿæMŸ>ý¥—^ú!ƒ-[¶H’tÉ%—lß¾ýŽ;î@µ"ÓÐø÷Áårmß¾ý믿ŽÅbW]uÕ˜1cþÂêÕ«{ì±7ß|Só‡ÿÿÐBŽ†Æ¿ååå›6mR§´èõzuœüÿ³gÏž9sæÐ'dkü/²oß¾“†ÐBŽ†Æ¿';çóÿ?ŒF£ö£Î_ '{g ½ÖSCCCCãB 9ZÈÑÐÐÐÐÐBކ††††ÆÏà˜éétzè hhhhhhü8étzðB*ß…EQ¶nÝ:00 •‘††††Æ©âûCÎ;3J¥Nj… gpXù.äð<ÅWh¥£¡¡¡¡q Q_Ûz|ÈÑÈâóùÔw$khüê˜0aÂPÖ~ÕÐø_A 9߃ßïW_Ƭ…Ư-Þhh!çׇÃá0™LŠ¢hE¡ñká›o¾QWÐÐÐBίEQ´£ñ+B„ã<–㸾¾>­d~ÙÕžúúúNÕÚÁÿ×°Ùlǽ.ïCNOOÏ‹/¾xÜÎ[n¹eÍš5¿ùÍo.¸à­4ˆU«V¡(zÓM7DQTWÌŸ??''g÷îÝê* ¥¥¥×_}ö¨]»v}üñÇwÞy§ßïÏ®_YY9{öì×^{M] qúôéguVö—_~9g×< ƒÏ<óÌŒ3=OÖlÙ²eüÇ?þ¡~œ4iÒ%—\²jÕªþþ~Àå—_>~üøluã8þÀ6lØpøða€ZÝ,Ë._¾\MáÎ;ï4™LŸ}öÙ'Ÿ|’ ˆÇã?þøq"Uêëëß~ûmu{ܸq3gÎ|饗2™Ìm·Ý¦9Ì¿ŽT*ÕÚÚZ^^®ÅÏ»éT{)÷ïß²ËñidËp¨O9ýýý+W®\¸pá¹çžû5Š®\¹A-ä|/Û¶m[µjÕÁƒ«ªªÔ3þüººº+V<ñÄ×]wÝŠ+n¿ýö+®¸â´ÓN»ùæ›!ºîºëœ?¾Çã¹ùæ›=ÏÊ•+xàÉ“'[­ÖuëÖ-]ºô™gžijjš?þË/¿<~üxÀ+¯¼òÐCÙl¶lȹîºëöìÙ“——wÆg¨Ë)®Y³fË–->ø`ccãÊ•+Ÿ|òÉòòr§Óùì³Ï>þøãëÖ­Û²eËÍ7ßüÆoÜpà ÅÅÅ7Þxãm·ÝÆ0Ì”)Sî»ï¾‡~8 .Z´hõêÕ/½ôROOÏC=´|ùòo¼ñ®»îZ°`Áµ×^[^^þ—¿üA–––Ý»wïÛ·Ïb±rúúún¼ñÆiÓ¦]zé¥àÛWÏnܸ1™Lj!ç_Ýnß³gχ~H’¤¢(‚ ˆ¢ˆ ˆ¢((Š^Z–e†!RÛYõ+µÉPן†aX’$‚ ª±(ŠÙ6‚ †ÕýÙ³K²,C¤¦)˲ºl®ºSE‚ ÔNI’ÔtAPEªyA$I’ÑhçyI’Q%©ßNž<ùÀ¢(Š¢ðzjªZ ÃÔª¥ A¨égã AêÚÞ,ËžsÎ9gŸ}vyyùàQ1£Ñ8x=ûj^ÕÕ¦òø¦EÕQUO?Û¢(Šº¤: ›B–l æ¸U½Õ»[u'Žãê©É²|¢Ù‰|¯Í‰+Žg5H’”­Ü…eýáÅ_ôûý‡ã¸ÄŸèX6lØ´iÓ/¼ðBMMÍ| î¸ôÒK)ŠŠF£óçÏ¿æškþÉÕàÿ=»)þû¿ÿ{Íš5f³YÅ7Â0|Í5×°,›J¥®ºêªÛo¿ý³Ï>[´h‘Ãáðz½;wî<ÿüóó›ß\xá…ÙDüq‚8Ž#I²¿¿?wuu >|úôéõõõª—Çb±+Vüþ÷¿_±bE8¾æšk®¹æš3fQRRR^^þ»ßýŽ ˆþþþT*¥Öß|‹ÅFŽ™ýéî¬Y³î¿ÿþ3fÔu½Þ~ûí>úhóæÍÍÍÍwÝu×_þò—©S§Ò4]PPpÓM7Í;A]»v% žç>|ÆgL›6 ˆúúúQ£Fe2»Ý.Šb:æ8îСCeeeÓ¦MÛ´i“$I{öìéé驪ª?~|$ééé¹ûî»{zzÔ…½ãÚk¯miiI¥RsæÌ¹òÊ+/¼ðÂŠŠŠ††I’V¬X1wîÜÙ³g ‚H$fÏž}ë­·f—ßèêêºà‚ æÌ™ÓÓÓ³sçÎ÷Þ{ïöÛox<ž‰'nذA‹(C¡££ã믿VßìõŸ½…WÛ8‚EEÇqµ©"B–åÁfªÚš‹¢¨^òêNI’ÔÑÝn÷ÁƒÕ†ÿ7+ IDATLmè³>‚ ‚ ¨¹«{EQã‚ j²ª<†Õ°!Š¢Ú˜Â0Œ A(ŠJ’¤5†©;÷ìÙ£&Ž¢¨ j¾jã¨ÆQ5z©ç’m(QUÛzÕ†aEQœNçèÑ£yžüÆT*õÅ_üP « ª]Ý£^ÚÇ…œlidCN6®³,›?r²ÙÃó¼ÚÜc¦VÍ÷†œï^Ç=‹¨Qÿ¸€”Ý38äüPQ†‰D"ßÌ~ÜYkkk7lØðÙgŸ ‚J¥²Êî¹çž@ °sçÎk®¹fÑ¢Eÿ_¾³ §§gÉ’%“&Mzûí·Ç·eË–O?ý´  `ÇŽ .\¾|yCCÃÕW_}þùçïܹ³  àšk®Á0L¯×¾A i:N/Y²$oÚ´IÝùÕW_mܸqÿþýª_~þùç§Ÿ~ººãøÅ_̲ìO<1cƌݻwãÿ½+‹²ìÚ÷ì ;Š€0"¸°) &˜¦¥eJáš»åšZ¨å›¦©•¹¤hi™Y¥© –P.)n¸¢’Ⱦ0ûúýqât¿3Ȇ¦¼sþà7Ì<ól3s®ûœsëp¹¶¶¶)))7nÜ´iSDD„L&»wï^÷îÝa-CÉÉÉñññ¡û­êëëÏž=èééigg÷òË/¯[·nذa—.]âñxB¡pãÆ?ýôÓŽ;ºté{ûöíýû÷}>,,¬{÷îÛ·oß·o_xxx×®]a±ÿþC‡1 77·€€€3gÎ:tŽÈçó…B¡Ù;¹uëVBÈŒ3zôè¨9{öìÀÀ@ŸE‹­Y³æÂ… ‹/Þ¸qãÍ›7éïÒ„ ÄbqLLÌ¥K—d2Y```ffæ§Ÿ~jcccÛ¬f!¹¡Óé¤R) °.f0, ¼<—ËÅ¥ºN§çˆÃáÀt—sèt:@߈u`Ïd2ýüülmmU*ü4ÀÇÁ·Þ ±“Éäñx¾ rp¹\Œœ4 œ`I­VnAƒ‡¦Ýt—.]X,8txN.B7ŒÃ÷ZVþ߆xcÖt:F£Ñh4"b™BÜ%¸Q¦›qÆ¿ ¾ „¦Óé,œa‹¢œÆÆÆªª*³ïW(K–,¹téRÎH¬Zµ*==}áÂ…=zô˜æÓ B%F¯Âf˜S*•ø/æ‘p?€ xD€4@>ä5@>yúôi…B—P^^¼$…B¡T*!µˆ…A˜ÙÛwŒÃáp¹\ÌõÁ-U«Õ°sn“±š â9¼(Ú cdø*Ç÷%8s3®œÉÄÍàˆxΖÍt{øDà+!h2¼4¼^XFÐF'åšû6²ÜÝݧL™¢Ñhòóó!e¦R©ú÷ïïééIihh`±X”H$}ûö5kVUUUff¦\._¾|yçÎÛÒO´¬¬ÌÙÙÙÕÕ5$$ääÉ“/^Œ‰‰Y¶lYdd¤Á`8~ü¸X,4hPfffRRRVVVVV–››rÊKKKýüüúöí ù|>l“=iÒ¤îÝ»Ÿ}:++ËÇÇ')))((ÈÎÎîĉEEE3fÌxñŇ váÂ…¬¬,[[Û/¿üÒÏÏÏÛÛ;333///>>á•••111ÀÊ•Éd2™lÀ€öööÕÕÕ111>>>EEE¡¡¡={ö6lX^^ž§§ç† T*ÕñãÇÞÿýÞ½{«Tªêêê~ýúÍ™3çâÅ‹]»vår¹7nܘ={¶D"©««ËÊʪ¨¨ˆŒŒ´Â‰Ñ"ÉÍÍ&ò( ‰D’ŸŸŸ››«V«!×åÀ@àèè(—ËM¡bà‰‘¦º1B‰‚¼ iâ¶ácH^ba®ã ä¹aM\?< Á¶Á:<ìNñ#3tšFy3;;;'6›Íårù|¾Z­&MuoƒàïïOßÉüüüöíÛCÀl|†x‰åUÓò;ž6dM ÷€j €Þ-ò M‰g¸ºVdº½…–DÜ¿)c >kx`µ§×ú÷ï?tèПþ¹   ))ÉzC1{ÎdÒI- Mà™L&‘H0èAz1”IÙ %½^^ ÂôÔ3€ ôrÁ",àAà‚l4ŒHð´áˆÓƒ ‰Éd •JO"Oi˜‚ÝL¾ôÒK·oß¾}û¶F£‹^¯çr¹J¥²¨¨®SŽööön&<4Ç kîF÷§9CÒsË+vF'f–ÆÝÂÓ°ü½2…4St4NóZÍ™D"yŒI«Y0//¯‹/â꯮®ÎzO,Xs¢, C©T"™]Ø%ƒ9ØÙÆXiÿŽˆ…áä© ¿==ZX™7õSQáþ1œÂ÷‚a N@¡P` „48y¨›õ2r°ÿ#GŽÀåÀõbØd0à¦"ÂY¸É¦ôëÒ L´,# ~-$Ñ™žXs›µÖ÷Ír+¨rÚ ˆØV³ÚÓcB¡P ˜þæu:ŸÏTÀ|ÒÆp]……ÄÒTt!TáÂ$[Cøf؆ ¹`²Ñ°‘€ZX%ÔAT,áp8˜à _Å Î6Æ P.R‚ˆ‚4‚4µøèt:¹\ný.=>³BŽy»r劭­mÛ“T°ZÛ¶Ë—/÷ìÙÓhí©MH÷ì©7Ta0HÓ_FÓ’ŸÉ`À’U§Ó1š–í-®›*ØLCo00èÕ:ƒÁd0 Ž`0™zŽ@Ö®éèJB„è!¼ÀšJòüµƒÁhªH3 -$ܘL‚&“ÕTdÒ ,&ó¯… UÂ!Ø Ï`ƒAo0À5êõzˆ¡PXöLx_ „ôz&‹¥öò"æet1 2HtÝ‹üw „®|¡8µ˜®0ñ…»B !Ó“1JsÑmLôùÀBÁ(ñEw\áÉX¨NÑE|#ÍkoašÎêR›Mé´oßÞz¬öÌ™©3beeqŽ…¶G‚Œ#ƒÁdB6 ü‘V«ePEx$’Ñ D`³ÙzŽI‘€YM~b www™LÖÐЀ)8Hañ¸\¬âà)ajK¯× (ê61Xl6€¢Fc+ÉårlnÎ.ÄU¨jñ ƒÁ¤kp!˜QÄK£™œHHÈóW4`ÕÝ´RBËÃÛÌæ Ìj¬™ ÒXøÜiH ðŒ@ÎlbÐrP} OŒæìaê¯%T7+äX2'''³9 «Yí©5 Ö›>Ï,,Ôýñ—ˉDúQ°'ƒßD(`5Q€E €X„'táD£a°X&*ç CÀá@â\,½¾.7×`0è ¡P lR6é¤qX,‡#“ÉÄb1›Í.,,DÐét½:X±G•©Óµïر¸¸Ø`00ôz†^Ïáñà¸,ªqçï0¨‰P"ž B Øb5Éí`zÐÀdrX,X¶3}|,@ŽÕ¬‰5«YÍjX`ÂÊ´¡¡ù]°$‡J v±@Õ3*t§vc`‘ƒ!| ka,éõz>ŸeyX(—ËÔQ©T<PöŒeš™ÍápjÞ@;—Ë•ËåH=@‚lcooßÐЀ-µZ ×U(B‘q׺ MZ=Ó\F-£üØÃVË7öûÇûlöÛ‚•<ÓT¡ÙTñŸ&ÖRRR@E­ÿþ/¿ü²R©|ÿý÷ãââ@ç†ò믿¦¥¥-]ºÔÁÁÁò®jjjV­Z5tèPnyú-;;G×B†ž““óçŸBFŒÛ`6l „ÌŸ?þ-,,ܸqãèÑ£CBB.\Or¹\ІINN¾q㎟±šÕ·¡£Á,ð±ßqègѾÈÍ´X'º-pâ(3ð@‹¤Áþéô49bè¹ 4ˆ¢º³‡‡Ç•+WÚ·oçΔ·° ÛˆFøP~}ÀÍCäCÚ ’âZñΣ‚—äA³MëǦJÏ–îË1müÄýãG`zÛ‘3b6ÑG©0Æ%¢òÅ- Þ¤¦¦.]ºô¹çž NLLÌÈÈP«Õ;wîDÞ*!$((hüøñÍIÓ&•JwîÜ™——÷ ýP vîÜ<~üøñãÇŸ8q¦ ´k×nÆŒ7nÜ@¼Y»víÏ?ÿŒ7ýõ×_ß¹sçíÛ·u:ÝÎ;Æ?zô蜜œ¸¸¸eË–¥¤¤Xý ÕžXôc0`4€`‹Å‚•"æ¯` ÊÞ¦Ê3ví€;Ã\?0ž@†fÁ!a¤Õjå³åŒ ¿ht:|«4iHÙ ©qH}Öëõr¹–znnnžžžj?jµZ&“1 ¡P8dÈZ±ÔÎÎÎÖÖŠ:NpÕ? G$<0R´Zë¬~,ä…§NºzõêW^yeâĉsæÌ9r$!WVVΟ?ßÏÏïîÝ»)))qqq¥¥¥Û¶mëÞ½{ll¬¿¿ÿŸþY^^>dȘ˜˜^½z%&&666¾õÖ[„¯¾úêòåËÏÖ=òóó Y¾|yqq1L£Áogrr²ƒƒC—.]pû¢ j\\\``àìÙ³ F×®]{ôè‘‘‘ñ ÅyVky™Lv÷îݪª*½^_YY ÏK$ÒTâÆ´4666XÇ”tð@d` V«¡R"—ËA“  %•J›Aäd0˜k™ëY\!DµQÅÛÆÃ556åà$PèE´««k@@ÀðáÃ======9Ž——è©Tª£GòÁ9Ëd2ÐøA~R©®ƒb:à2EÏšk0Š(^‚™'ÿf@4A>ö½2LŒPª¦f”‹k.H2}‰Þ‰¾ÉLwk6½fö4š»'fíQ¢œæò‰W¯^0a‚ ¦Œ$ÉâÅ‹ßxãÌÌLƒÁ°dÉ’;wž;wîÇܽ{·V«---…¡)Ó§Oïի׳õ‹MOOßµkhÚ´iSjjê—_~éïï_[[[UUEkÓ9sÆ€½òÊ+¡¡¡»wïž:uª©·Õ¬öÄ¢à@B " :M¯Õj±mÜ1†;˜”@b5•Ù1ÛFš¦¨ÑZÔ2™ zBÁÅC †Á`ðù|^:O:HªõÕ2k™Œ* ê¤AúhoZ­xnB¡P(úùùuêÔ)&&ŽëêêZVVvöìY,54Bß>=Su¯´Mé1¦Ò™&£0Dó›Q·Çò}EpP81Çãñ8ÓÄôÍUø¤ééÑ/!ÏUÕj5ÎæÁÍðÐf¿0¦§aö†àÓY;Ífá׳gOÓç=Z^^ÞÐÐ@?uŽÂÂÂg7Ž_µ7&''oݺT;×­[7tèPÔ—Jr!“ 9ÊàvÉ>ÝH…šÉdò>çi25†]N9‡[Î%¬¿¡ Î' p8>ŸïììÜ¥K—®]»†……uèÐáµ×^stt„TJAAA}}=Ôrp€Twhä@%SÒÄ»£¡/ÞkíÆ{¬Æ¶Ù``H¯š‹³BBB&Ož!FÎ:t˜?ýôÓmÛ¶mÞ¼ÙúU³Ú¿¸fH ‡4ãòŸâèèHillT(P’©-œæ‰mFqýö¾üÍunªÌ3™LP£1 œO8šþÁZ!( &Á6ÀvƒI¦r¹fÞëõzÿ²²²«W¯)•ÊŠŠ TÙH ÎD£ÑØÚÚ‚`%\£\.‡J¾J¥4B}RÔeø‹KýçåX'î< äôéÓgûö퉉‰<O"‘lÙ²å‡~ðññ!„ìÛ·O,ët:¥Åf³}}}!c;nܸøøx___{{ûÜÜÜ«W¯~ýõ×»víòðððññ)))™9sæºuëlllž¹›UZZ*“ÉÅ×­[·{÷îÁK 2›™™ ÿ^¼xqàÀ‹-:qâDNNÎ¥K—jjjºwïnýÂYíߊrE`Ž Õ€¬©©AÞ¶Xbý¹°ø*6]BÊÀ‰4U7qÊ'jKC­è¯©n¥l­@KªÿªÜÞ`JÆétºÒÒR&“Y]]¾|ùr¨¸ðù|í;!†äâüHõ dV˜\ˆ:ãm1½‡ Pm4yÞb*Ï,àÃHfvM€SäaŒÞ#|ʦ¹,Ì›ét:œu WAšŠm„…BaT¾¢W n ¡„D-LjQ”3bÄ•JuæÌBÈgŸ}«T*§L™[[[ûꫯ®X±Æ';88ìÙ³ç›o¾Ù»wïèÑ£—.] ·8==’Q¡¡¡„;v$''¿ûî»Ï ÞøøøL™2¥C‡ðoDD„F£ùá‡àß¹sçâ… >œ~c»ví¦L™âçç÷úë¯/^¼xïÞ½ÞÞÞXˉuss³ºB«=±(  ÐsÃ0ïù1ìÞÇÙ34%%Ô°t¡T*q°4–v5S ÚýÅT®Ö Î è&|8"-’¦ººÚÉÉ©¾¾>;;»¾¾ègååå(HJ·’@øB÷¦ yî„z˜CÃŒŸÙ1V{r‰5BÈèÑ£Gÿòùüµkךݲ{÷îF/M™2Åh›=z˜íŽ~j ˆjøï+¯¼òÊ+¯˜Ýòí·ß¦ÿõòò»azÇÆŽkýæYíIF9à—1Ó…*jFBa¨8_  …ºaÈMO :qLy%åØelæ>&°RF²ž3}þ …¢ººÚÅÅåÆHÀ“J¥ˆjØgµ+Ȥab f“ÆCXroõ>P«=4äX¶‹/îܹóã?¶Ê‘YÍjO­a¿$úYŒch6Pœ1|¡GJc¯>dÀX,—ËŶx u£ÁÅc£2Ы,P½öš®_?[½^Ÿ˜¨<|˜wóæßÚˆ…rrèt:ÈS•••”––«*3(Ý„R7pi8­ÓŒ¤‰$ÿ †æZ qÌ©F1×̓ù+Z4ÓT* óW+¼q8°[¬BÑâi˜¿2Æ ˆ4:gÜNNÃt%Íè3"éѧŠù:\ Ð\G¤nã |¼órBCCŸ­Ö·²êêê–L^²šÕžÃ|½©3‚\*à|3e†ó=±\(Òc¡±ÕŸž&€N @2ÌVA…F£Ñðx==ýÀ„ÀÀÀ9sæB.\¿®9sæZï¡ÕþIn °=d"ôût/< °È„Þ žd2™µµµÀ6L 0$šXƒA;\›Ì»Ì4±jA¶£+pŽô¨c•€å ü7ØH 6ÂÔ~°Ñ•ÝŒhߘQĬ`s2—´™ÊÀ±L‘ àµXÐc¦µAÑ 77φ43ÉÍèI,2©Ïß(‡ ˆhJŸ§º9ˆú§£Óé~þùg‘H4räH6›]TTôÓO?½øâ‹8Ù4‘öíÛçéé9dÈN' A²83 $Kë>55uíÚµ›6mª©©Y¸p¡]=RSS'Nœøæ›o2™ÌsçÎÍ™3gáÂ…={ö?~¼­­í;wNœ8ñÝwßmÛ¶mÔ¨Q'Ožtrr²ÞI«=‚¡À3Tq he XÝãŒZÛbtÙ°%FBðs\t› :A #hcÛWlõ±zSÇþ•± º9Øl€êpÈ\ÀÀ ð­2™Œ4IÝ`L†pBu@·¤Ø°eýÂ<ÞocsÉß|óÍ7©©©r¹<>>~úôéݺuëÓ§OBBBttôºuëT!S§Naé 6xzzmܸ1***!!!,,ìæÍ›Ö»ŸÿÒK/¾úê«•••r¹¼¦¦ÆÝÝ=<<üÖ­[“&MZµjÕ¥K—œår¹½½½•¸iµG6\D;:::88€æ,LÀVHO¡Óÿ Rfð›Í†ñ¸à56俊Œ@s®`lét:}^£ÕaÞgâàB)ÀŠåÚA‡@4=s N /ñE 0ö4…Fˆ®è¬£ÙÛhvQo:*†ŠCO¬in"Ž…—¶Èôso9íeð~¶dþMë@ŽYËÉÉyýõ×>ù¤¢¢Âìfµµµ}ôÑØ±c>¬ÑhV­Zeý̓>}úüùób±¸C‡ãÆ‹‰‰9zôè¼yó’’’`ƒ´´´Í›7>|S—K—.…ɤœóm5«5gvvv„¡PhccƒóZp$úMp»ðÌ:‹ÅF3Í!€Á…ƒ Ðma½}–››2žY,V&3¨IK”./aăÔ Ò4zª®°uç¹! âZîúï ›€È×\õåÌæ¸ŒFÅÐóc ïÔÛ4Íý’–2xæ‘Éol6[ ×’íµZ­B¡P(¦åóoZ'±Fñõõ5j<îÒ¥Ë믿¼dÉ’©S§Þºuëû=xð`~~¾Ñìœÿq›;wî™3g†š››‹…œâââ/¿ürûöí°µµµMLLÔét¯¼òÊÂ… ¯_¿þÅ_Ð#G­fµ‡5;;»ºººââbd‘a ‚“ÍpÐ'¨ŸÖØØˆ± ݬƒý(ðf·`‡„> ÿ=óÍ`0ô!„ÃbÝhb6ãqá¸OØ›™ÉlZ!f ülC·Ý ƒ”¥ mggˆ¥ëwæI'Ö!ÎÎÎaaa}ôQLLŒ··7àÍÞ½{ß{ï=³s”q~X¿~ýÞ{ï½cÇŽ­X±Âz—ÕjuCCýU~õÕWg̘a´YddäK/½T^^~ýúõ dddìÝ»×:òÀjÿÐÒÓÓËËËQh€4ÕÀQ±PhÄ´¦'D*•ª¸¸ØØl6—ËÅÑ¢XªA4"M’n| ñ F$@nÍ×WóÁJ€\&“ ÙfÔ{6¯åããñÔŸ0û•$8„ÌÂÁt—Ëåóù$mCm…BÁb±œœœ„B¡T*…X‘ÉÂÍ|j'Z’ûjáÉ[ÞÕ?¼–nîäÉ“£££ËËË÷íÛGqrrb2™%%%vvv®®®—/_ưÉd¦¤¤üøã„.—ÐÐÐPRR’€³Úþ—íØ±cáááß}÷]NNާ§§«««‹‹Ëõë×Ožê1bÞÌ4öØçå´m+++kÃÜkqèÇ@LŒžˆc4L" ã¤#¡ÊÊJt4€80 †ß@!÷‰ŠÔ0€° tç@òª¬ŒÉf³Û·wËË«3æ`Þœ¦Z­†(`ƒ²:°C‹uíÚ5 SáßÚÚZlà%†€#0ì{`ÞtƒÖMÄ=r }»ÓÙnf/ÊH€§5Õ¬F©¯¯oÃórºvíjýˆÿG <5¨>•mHS3?!D¡P`è/TˆhÀUƒð…^µ)ªaŒ Æ"˜^ƒ‹ŠîËd<¬-ÑBg8³ 9Ø‹ƒD8š)‡7È‘C‰, à8`‹–Z$³0²ÌjÖÄÚãµsçÎÁìÛ6l§OŸ~ór®\¹RWW׿¿0OmûF`Q7L"MúÐ0ÃF*•‚7‡P€Åb988H¥RÒD<Ãl6QBÜ€oA˜ò0 j”›Ä®OÄBŒÉ (AxÃÁk¨«†¨ƒÙìÈAúÍÃú 2¶áÜp‡Íit"]¯‚V,%ÍH“YŽ<Ìë4ýø0e*ô‰gÛ’ô“–u L_¢âáÒÄtQþÀlžrÌ[pppÛž—£!Ÿ@æ°¢¢âùçŸoÛ%YðÑOsdž2*• †o‚k€n@Ï–†iј‰2>Ÿ/‰¤R)†MÈëE< §D#+ ‡ðù|6›…B•J(¥R© †B¡¶4v€ÂѱæË€ÅlÖ¡£+ÒDZà .Íh¤›/Œ/a“cú®–|Ì&¦Ì"j=˜Šl>ìOØt”õÃ6ëТ«fÒò~¬Ê]æ ÔH m׎;öÄÆž …Â6|'õzý‰'`däÓiX´‡nGD†S×è„¶ßCê 6Apèfäȑ耰Ñk0(!ƒ‘Ô`ø|>Çóòòruuµµ999yxxØÛÛCW¦¿¿ÿ¤I“1:ÁD–£ÐõÓ+nXÖ`a )N¹¨ƒhÏçÃöp.—KkµY 5±fµ§Ë  ó÷­·Þ²µµµÞ§Ù°ˆË¸:Æ%*¶Ü£V öåÐÉßä‰Á`عs'–FWt:X,...F™jÈ Áqmmm]]]»uëÑ£ÇE©TRQÑ¡¤¤¤²²àäþýû;vì€Q¹*6šr0Á•›› ù=:íïBÊÎS ÕÞè Ð `Ï-d<ù ƒ¹‡Š¤é衲Íän­ŒH³“ŸŸ¿|ùrü÷Å_”H$W®\ùúë¯ !›6mºvíÚ¶mÛ<Ú„#FÀ§m[QQÑâÅ‹'Nœ8pà@BÈo¿ý÷ÄÇÇç£>¢·Ü¶mÛÉ“' !ƒ?~ùä“aÆÁòdÁ‚¿üò‹Z­þòË/·nÝúí·ßªÕꜜœ3gÎ8p ]»v"‘¨ÍãÍܹs/\¸póæÍØØXBÈ;w-Z4yòäaÆõìÙ“Íf/[¶ zîŽ=ºbÅŠo¿ýV*•¾ù曩©©×®]»sçö„Êår©TÊápÞ|óÍÁƒO:uРA3fÌX³fMŸ>}ôzýÏ?ÿ¼zõêéÓ§ã H$’'N 0`Ù²e„ÊÊʱcÇN:uâĉL&ÓÓÓsÿþý‡JKK›6mÚÏ?ÿܺ7A£ÑTVV>÷Üs­E¶¾sçδiÓŠ‹‹«««á™¥K—îܹóÒ¥Kß~ûí„ Ž?.‹ëêêìì쪫«ùå—7ß|sÆŒ ãòåËï¼óν{÷èõiuu5HUž9s¦¤¤b2''§„„WW×+VLŸ>ýÕW_ýå—_`ûâââùóç5êõ×_‡;ùÞ{ï 0@«Õ~ûí·_|ñLay œŸÏ‡õ>Þ%µŽI0À!¨óÁÚ_£ÑÌ«7N¥V3aìÞÍÛ³‡ÕÁGuu¹³³^¡`«T @àèèèêêéîîngg×®]»¦ÄÚÙÙùùçŸwtt¼|ù²X,®ªª:þ¼D" ”Ëå( Ä3NÇà1ô\½AjOŠ˜—Æçó¿k´y݆ÉdJ¿rs¹ \x/^>&èpL~±Ÿé`BÊVT‡{6kîîîôw7)))%%eçÎ!!!6lxçw***ôz=½åSh'OžT(;wnlllhh¡„‡µM›6]¿~½o߾𯯯/Ìú†›‡‡!døðá</!!A.—»ººòù|™L&—ËwíÚJÒ¸·¯¿þúÃ?¼råÊüQPP——g0¼½½E"‘H$*//_²dÉ{ï½GŸê”)SX,Öˆ#òòò˜LfÇŽËËËóòò¸\nÇŽgÍš5{öl©TZ\\ìîîþ8xwÎÎÎcÇŽ}ûí·_{íµþýû·Ê>}}}333,X°sçNxÆÓÓ“Ïççåå•••ÁãË—/ŸðàÁŠŠŠ+W®466Ò’©žžžçλuëÞI{{{{{ûëׯúé§Ÿ}öÙ`÷=¾e2ʰlC<`’ ¬‚5 (•A%£õz½­­vÅ ^z:§éy- 8@þÇëÔIåí­vsÓ/\¨øÏÒÓ™ ]»vaaa!!!b±¸]»vP%U*•ŽžÉdVW×2Œ€€½^_]]íìì|ëÖ-¹\ŽZ^ôTпÒ;D?BOÎZÇÉä 2ôß|"†.D§kÐ1¤ †Ž=žt ñIk ñx<f6h Í̇65m:XÚ2YÀ«YFÁÍÊ•+ÃÂÂjkk===7oÞ¼gÏ£Yæ¤Y÷Ia 9åFWm=0-ùÈ9räȽ{÷:vì8fÌX•¯\¹òí·ßŽˆˆ „têÔiÑ¢E„3gΤ¥¥}þùçÑÑÑOç¯î§Ÿ~zÿý÷cbb:uê”——ühcÖŽ;6oÞ¼åË—Oœ8‘2iÒ$èª{àûôé³hÑ"{{{BHEEEvv¶^¯ïܹ3¼º{÷n___„7°×_=,,,;;û·ß~óññYºt©X,.))ÉÎÎæp8ÞÞÞøuüã?6oÞìçç×ê7S.—_¾|Ù××÷?ÿùO||<|Zݼ¼¼ø|~vvvQQ‘··7ŸÏ÷ððX´hQ``àÔ©Skjj²³³þùççŸÞ¬ZùŒ3\]]ÝÝÝ-ZtïÞ½_ýµ²²rÆ ;w®¯¯ÏÎÎnllìÖ­›Ñ»Lïäž={‚‚‚zõêõ¬—sÐçBÊ éÅØþ0@Àáp G+ Ã` ¯¿®Vêõú³gyüÁA#„Ìœ)åru11ªˆ-!äúu–ŸŸÜß_Ãf+]\8îî—=<*œ/ÀÈ`0ØÚ2s˜Wö«Uì› ÃÞÙ¾1¼±¦¦F£Ñ”»•×ÕÖA ÆhL`'“ÉÔõÒißÑ2 ²‘BÈ÷DP(ÀÍøKùªY*BïKžAb 5~ÅqÀ<N¡¦YÚÍ%©01ÒsFÛ Š(މÃÈÉtTšN§C%lL|™æ¯pž´iªíÃ?ýçŸ^¹rå¬Y³’’’>W¯^ýå—_æäätèÐáqßÒ^½zý“;Ù¡C‡Ï?ÿ¼…‹#BˆZ­®©©qppˆwrrJNN¶°qee%›Íþî»ï6mÚ$°ŠŠ .—‹7–ÒØØ(•JáS°³³£¹ã555l6ûYÉŠ'”…†<`†ŽZ”1ᥦ¶íµkü£GY™™A™V«…,h}}½^¯?z”a00Μá‹D//²ys«+÷øqg­ÖO«õV*»tíÚU*•æææÊdNN>;G TÕýYô§››[;m»Ûõ·kjj®½¦;«3È ƒ¥e!sÃä`žô"º»:aw¡F¥áÔr´Z-‹ËBÍ7ƒap7!!÷‰Î[ÇÉá° ¨Pÿ@yPÀ]Ô;€/! 9}„;L(†…åÍÌ ôvÒÜ>%Éš5kT*•P(üøãéΡvYØÿöï˜nÿˆcj\.wÞ¼yL&3!!aáÂ…ööögÏž­©©quu}9œV´?þø#66Ö`0×××ß¹s§wïÞÿpŸZ­¶¡¡áþýû€;v 1bÇKLLôôô<}ú´\.‹ÅPæ1²o¾ùæÃ?<}úôüùóÝÝÝôz}hh(!dÖ¬Y„-[¶À–eeeAAA|ð¯¯ï¹sçÒÓÓ ÂÃÃíììzöìyãÆôôt@\TT¤Ñh.\¸¡zddäãð˜UUU·oßnhh çò=ôz‡Ínß¾}s¯ŠD¢ôôôk×®‹D¢ììl¨åtíÚnBYYYTT”Ù·0 {÷î£F2 ¿þúkAAŸŸŸ««ë¢E‹JKKçÏŸ_]] кuë6nܘ••õæ›o¼ôÒKp' !cÇŽõöö~Ö‡©Ó%üüÀLJ„ip¾ØN©Ã={ª™L¾\^ûçŸÜº:öºuë°”Âápär†ZÍ®¯g¿ø¢«@ ppñx<…BQUU¥R©:uêT]]——Çd2Û·o_WWÇçó;vìÈãñŠ‹‹¯\¹’››{ñâEš‚ìât:ç ‡q‘¡ÕkYL‹ó—6¦Ëôz½l³Ìæ9ƒ!ß/gŸa;i$ ^0îÐ/;’„@™{X’4æ¯èü˜Y_aê¦a{#FÙ½6´L-[¶ 8Dô§LšôŠxÚãB£]C~éYá…C»i™¬'ËÝÝ}Ê”)&??ŸÖÝb0ÑÑÑ®®®xÝ»wïÓ§!x<žƒƒCBBBiiiCCÃk¯½ÿ4ÿêþóŸÿèõú˜˜˜}ûö]¿~ÝÆÆ¦¹›eeeÎÎÎÍ­ß †H$ŠŽŽîСƒÁ°³³³µµ­¬¬¬¬¬´±±éܹ3“É yõÕW;uêTTT¤×ë'Nœ¥#ƒáèèØ·o_¸«L&ÓËË+66vàÀUUU•••QQQóçχ—ÂÂÂð¸B¡0::zÔ¨Q:®´´´}ûö‹/îÔ©SŸ>}àè/¼ðÂôéÓ™L¦¯¯oMM <éïïo–I˜ŸŸÔ’‚“Ù;‰µï¿ÿ~äÈ‘F©?#»{÷n×®][BÍ„=wéÒvØ»woGGÇ?ÿüS$½ýöÛ~~~øLHH¨¯¯¯¬¬‹Å|ðTèï'ü>räHOOÏÂÂB6›=}úô°°°¸¸¸ºººÊÊÊ.]º|ðÁàb|||^xá…¨¨(úNÂNzôèbù´ïÞ½Û½{÷§P‘O¡PH$’[·nåääÐS´Z­P(W‹Âþ¨² ÷„xÃ`0˜LV‡:­‡«ºšQZʆ7Ò¾µŸ…B¡½½½££c»víàw剙†ââb©TZ[[[WWwâĉcÇŽåççWUU*Ðýí¨Oc4Ω à±&ÁÐ3Øyl6›­×ê×¹†f"ÐÑ]‡°>ñnݺ¹¹¹aõ"??¿]»vHlÁ·Uéin1îÙ›™VP¥?šþRØÿm ¦­Eôþi‚Cs"t ÇÂùÓ56¼W¸«iÓ¦Õ××{{{–«Õê»wï=z”zæÌ¹\~èÐ!àC·U;uê”­­mHHÈ•+Wè>#»téR—.]ìììÚpV÷ðáãGnll|´·WWWgggBúõëg9·vìØ±—_~ùŸCOÚêØ±c¯¾úªB¡xÚέ¦¦æÞ½{ܹs§‘S€ôÐààh^AáNÜ'„¢‹.5ÊkÂ>Y,–‡‡Gûöí…B¡»»»V«µ±±qss vppÈÎΖËå@ˆohh(...--­««Óëõ ê­£:Ã,ðn8À<)=ëÖìp!¨™äÖ!J¥u 0øƒk„nÓÑ£GÇÇÇ÷ìÙ%:`ä1€PÞ\”ƒ.éf³jxçñð‰<ð“5Eä˜ÒÌöåÀÝêQîÿüùó………111*•J$566ÍêH} =•§§Ü\\\G“©Õ‡¡z&Òši?y3¬ë@ æe ˜F>ç € …BÀZzÅ S–Ùl¶R©´µµ…ô)¸6±XŒƒ«!¦¬¯¯ªü…“‘Édòx¡ð IDAT‰D06›4i}µ@Ÿ)¢išG€Ñ.ÀµJa?¬P(ÄQ‡všf¼u4ßkA~† ÓcáÊ!Ä4j¡‹Ffå$ðd0èi:ð€Am9fS‹¦9C!w %`i¼iÖŠŠŠZ˜zíÑRjfZ­DÚj”ó”Ÿ!~‘ lcô× þ‚ ¡¨‰¥…«W¯š¾ŠwPðIn A ÀJ™Ïçß¾}²¾Ðþâää$***JKKkkkKKK%Icc#xIìÂÁ‰ð“9€|tÐßjÔìîEªu%(`8‚3Lù|~ k9–?÷~+èV\#H° oC¿d™ÐÂóiÉ%›mßy„qVȱä”Ûð¼œÇÄŸnîëÞ†k„V×wxÂøtº?°<5¸`ð¿8ìY¡P…Bè•ÁØ¢‡††‹>ð^lîÑëõååå"‘øB²³±±âhYY™Ýýû÷ai"•J‘)€±ÝW“°q ¡X˜|ÃkÄ•¸^¯‡ 0½%„;€¸ô¨«÷{|f…3æçç'žÚñ'­er¹ü ¥wïÞ Ãßß¿Í/PžòÜŽÚ„™Ó´*3ºÚþØ,Iþ»\ (…Œ5' à#H¥R…BQ__Ïd2AûöíKJJ`®¨X, …ÎÎÎ …ÂÇÇsV‰K8p8GÀ±lŸÁcñ01n£¯äÚPŠ !åËEú2‹Ù("gô’é¼?=c ž`Ê'à÷á½<ö¬V«¥R)öÁ888¨Õêââb>Ÿïèè¹,Fcggçéé |6ÌïA4ƒs} ‡°‡†&àJ#:ƒ+ÂÙ9ÀGP©T(³†£P˜Cƒ1½hÏÞŠâf¦¬ ³çCx¦D5Ó3Ñö„ç5X!ÇŒétºØØØ¶=¢­´´ÔÓÓó‘k-7FÿL>rΪ¢¢¢]»vO-²bÒ t—‘H(B ’cà”±þa ÄÄØ+ƒ5yÄ@­ƒ¡¡¡´ÔÆêëëKKK¹\®½½½@ `±X*•ÊÙÙÃ{{{ƒÁàêêŠ1 ŽÌAV$œò p²5nIñðð(**¢Å­Iw€Á€š 8VáÖê­óïäÚ0IúÔ©S£G~2ÇÒëõm8Ð1 gΜyõÕWŸÚ3¿Œ•6›%ŒNпC§$â 8w,r8Ñ6ÀJ "‘¢“êêj¨ÜÀ6%%%Z­ÖÙÙÙÉÉI¥RI¥Òºº:¶P S^(µ `€A•Z­†s3B;ÌïáèOÌ"ÒÒj·ô¨7œ‰€Œjx¯ÙH‰FQ…ÙQp‹žaª­I· áK¦{3í³1JS ,ôÙXP礅 ,7è´œie…«Y­rx<fØ`ú20Ö0ãÙ*$#¡‹GŽÎ - a‰0†ll 466âüi­V "î¶¶¶ÎÎΉ„Çã …B ÀÆvÐ…<(Ç@Æ h¾N€^ÀR+,,„ äâT*•½½½B¡PD’4BŠ­ÁU4·Ð4"IÓ~¹…ƒ8mt“Í&¾,iˆ9(rš;ybn^Ž…†!r,¬¿iÈy`>£Ù—/^¼(‹ÃÂÂbcc###'Ožü°4§ÊÊÊØØXœ¸eÁ–/_.‹ŸX ¶OŸ>S§NÅ“X,Fi™Ö²†††·Þz+:::**êwÞ‘J¥·oßîÖ­[lll@@À™3g ÅêÕ«ÃÃß{î¹øøøÚÚZ|ïž={bcccccûôé#‹333/\¸àïï‚ü×®]ûí·ß`ƒèèh±XÜŠCÒÖ***Äbñ¦M›àßcÇŽ‰ÅbZÓ¬U¬ªª*...66¶wïÞÛ¶mkhhˆm2??¿1cÆH$’ &ÄÄÄDDD,Y²„žmSQQѧOŸØØØž={îÝ»·¬¬ ßëãã3kÖ¬ÚÚÚ‚‚‚€€ÝÖÆŒ&àJÑIÑm1ôR\3ÎÎH€ß)²“élUCCC]]]}}½B¡Ëå*• Þ%—Ë•JecccMMMqqqmmmYYYmmmmm­L&ª4(I#Wë˜Cï }?·žJÉ©T*ƒÁ%%ÒÄùÆa¦Øåƒ“jÁnµÖL¬étºúúúO?ý4!!§¼ØÙÙUUU:uªOŸ>®®®‡îÚµk@@€J¥:räH·nÝüýýÓÒÒ`æDTT”Ýœ9s ¬zøðaøBÄÄĸºº]¸p"‰¨T*ëëëŸX"+44ôúõë7oÞìÖ­Û‰'lllÄbqëââÅ‹æûï¿/..ÐBÕúSFb=Ý•Î@>ŽïU Ó‰˜XS*•[·n½zõêþýûW­Z5eÊ” 444L™2eáÂ…ÙÙÙ+W®œ9sfFFÆ–,Y2eÊ”>ø ++ë“O>™1cÆñãÇ:´jÕªÄÄDƒµeË–'/›¸fÍšE‹Í›7/<<ü‡~X»ví‹/¾Øº‡üÍ›7_¹r%22ò$$IRRÒ{ï½¼aÆëׯ/]ºôÎ;3fÌÀm>ú裾ð ÿ–;spp˜3gΘ1cƌӽ{wÎVçnMž}:Î):xð —Ë3gNRRÒ”)SìììfÏž½víÚ9sæ466â0à'f666+V¬èÔ©SRRÒÆ[oТ¢¢ÂÃà KKK7lØpõêÕaƵ0ï4þüðððQ£FÁ¿íÛ·4h³³ó¹sçà™ÿüç?ööö‰‰‰ÿ®/ëӧϨQ£–/_>yòäÈÈHöÓê¦ÑhÆïèè¸zõj=pàÀ“'O®_¿·™1cÆýû÷7mÚ„cîš³äääììì 6ü/¤2x< ºàœµZ ¡C]]Ýõë×]\\ªªª ÛFO7€m0yÏ€¯?H7T’&Ý-p¯ …B*•â8à( ]¹rE"‘@b­ªªª¢¢¢¶¶V"‘ &BCC=u<ñ0vÁÖNôªˆ7`a$Ôh €vo¸"„R+cíñ¦y-¿>Ójµ‡þí·ß|}}ßÿý²²²Çt ^½zõèÑ£´´´²²222òêÕ«{÷îma7Ì•+Wœ1iæììíèèxåÊxF&ÓúßÿŠ999mܸý~üñÇŽ;¶ú!***žþùÎ;õÕWíÚµƒ'KJJªªª |¬««7nܽ{÷Ž9Ò’xåÞ½{uuuÿ#j{ …ÂH˜ÓPeR©T+W®¼té¢ ŸÏl`2™C† …"lœ O“Tàßy<žF£: dÒ´Z­R©T«ÕJ¥R.—K$’û÷ïËd²ºººŠŠ ø[ZZ i=8hMM Vepñ®ÓéfΜ ‡ÃÚBÊÃ'c¢ 3U*À0¡”uÀ§Y6ÃhÞǧf™óÖÂL—ÑKFSV6öOι¥ÃãñlmmmmmͪGDDÌœ9sáÂ…jµfm]ºt)///99ÙËËkΜ90gŒ¶¼¼¼ýû÷ß½{wñâÅS§NÍÌÌD¹Ö'iß}÷ ´¿páBhhèØ±coܸѺ‡¸sçÎþýûëëëñ™ãÇ_¼xÑÖÖÖB~äȑӧOC¥4M´„bÆüat'+++ ð”$mÀ=¦OsÅŠ·nÝÚ±c~«ªªrrrúôé£öìÙsäȑݻwà p+û÷ï¿víšéÞJJJnÞ¼ƒQxÛ6š éð×@€&M0”¡Û!µZíï¿ÿ. a4°Qo<æ¦t:ðPR…`ü«T*U*•R©„š1¬;1RQ(4ƒ”„M°~ݲe ‡Ãl0jˇd †>xbHþ7±à%-¡Pˆ™Ãæœ)ç¿ 5LY-3³\dx ˆÚF†¯šÝn†OBW¯©,4iâÍ®nnÿP袿0–O¬%5­J’~î¹çRSS«ªªàßúúúÄÄÄ#F… &à€Å‰'&&&.Y²äìÙ³!!!ýû÷OHHHKK+--6mZzzúžU«V…„„@…yÉ’%AAAééé-)´Ü îuâÄ µZröìÙ5kÖ ><77wæÌ™0£å»ï¾;uꔟŸß Aƒ!‹/îÞ½{tt40è`P!äîÝ»~øáàÁƒoß¾={ölBHjjêÍ›7;ö?kµÚ%K–Àãyóæåççïß¿ûöíôBÖ®]kggG;v¬««ëôéÓ.\8nܸììì%K–œ?~„ ¶¶¶'NœHKKKMM¥€¶a£uÆh­~ Jš¸³Ð^ƒ% PQîat@Èô2`ÔQ0h€ÇtR[y0¤ÀäM;i}ps˜£ÇÐ+w¸4¸¡P(—Ë‘`¤™†)8£5;¸`t¬Öô×cü66÷pÏ|}}ñ™E‹ÁܪøøøððphÎïÝ»·ú‚_|±]»vfèСݺu …iii^^^nnnZ­vèСþþþööö+W®¼}û6!$((«ßfêµ®%''ÛÚÚÂcWWW8ÉÖ=D``à¶mÛŒ;tè ‹}}}A·mèС!!!|>ݺu h8eÊP!ÛµkTS—.]*•Jé* :t(Ìm›4iÒ /¼ðô8ÍåË—?>Æ×üùóLJÿÚÚÚ¥¥¥á ZøNânnn"‘(--ÍÓÓ³cÇŽôwR DEE¥¥¥­0öïßOO§nc†Œ/ðæà»-0%‰är96PŒ4qˆ‘Ɇüt†5Iƒ€ê€.—ËU«Õèô•J%öcÒ"7€FtÁ†¦œA¬‡†“lj8ج ‚Є8=nçïôNÑ. ûL­ö¤!G$EFFÒÏàÏÛÃÃÆ*Ëd²O?ý477wíÚµ¸ÌQFÃÐ. !......FÛ<1£O’Çã=¦ðõõ¥1›Édï$ÎÆîÖ­›Q†Óè½ÞÞÞOɪucDËwŠ ô 1½“ô÷Êè;éäädú‰ÓˆÕökü/q „¨w Ñ &yP.àyÕ666 ØÙ­ tä£ôz½J¥BTCÏNK‹‚˜ ŒMƒ ƒ4•a ‚sjœ„†‰)Ô´¦§à~çMšÚaot ' &œ$"\Kî*HÉ‘feÿ$G0ßÜ™À=‡ÇzÍfºL·7%é™g{ìÓ+,,¬ªªÚ½{·… öV³šÕþ]`P©T˜E· n .PË@½åý1åÁ‡Ãeh2@]gäCŒx†A º0¤##÷Ôè‚išP3Ø¿B¡ ¡Â(Ð=¬[\‘* Þól(€”Ÿ¥‰D‚Ë[Ì\!Ïl”¦Ã—0U~zB¦½Á€ô“A#äÄ02 w0Ɇcªéƒ·AE ‹I(lƒI?j#¹àßš•iM¬YÀϲ­^ÝÙ³g[]É´9æR†œ¬¬¬§y^æ¦hæ”p M÷`Ãd2]\\4Mmm-ÒÆp'8tF#À§#à ¼ú¨¢¢.ÅŠŽŽŽqqq999îîîüôÓOwïÞMku¿÷Þ{:.33sܸq‰‰‰Þ»dɇèèèóçÏýõ×r¹¼­&ñ‘îÅb±@¯ü>öZêtºôôôššxÕº äæž={~@Á†Á`´oß>,, š"i….ZéµèÆRÒD=€íáUš1…¢d˜I+**ª®®¦¡…cå }vY5‡º€@uÁR̼!Î!ⵌŒÔzh¢vsÁ-kMšÑ ¥ƒS³œ>Å€÷µ°[<7Ëá…³¥dzćN¬­Zµ*..ÎÇÇ'99ùôéÓ?ýôÓÆu:Ý‹/¾¸lÙ2‰Dâí혘8~üøï¿ÿþ×_Ý·oßÑ£G/\¸0iÒ¤m۶ݾ}{ÅŠOÉpÅŠK—.7o^Ïž==ºùÿÙ»î¸*ËöŸÅ9l*Š[++œùjÎ,12ÃR“@MÍìu+•áHâ5WjYZæÈ˜#g¢â@q¢¨ Î^¿?®øþ®ÐÔXÙ¹þðƒÏyÆ=®ûÚã‹/ºtéR²Ÿhß¾}ûöí?ýôÓ3gÎtèÐA’ÿ0››ûÕW_Mœ8ñé§Ÿž3gιsçF””Ä»|öÙg/¿ürçÎËk%===ß{ï½ÐÐÐððð§žzjÅŠS§N•”NøûЯ_¿~ýú]»vmóæÍ¡¡¡¨«öõ×_çççSѹ®]»êtºeË–uíÚõab²¿üòKF!„xýõ×·lÙò¤Ê•èïÉÛÞ zÿÊ›•¡Ê/”É[[­Ö+W®$%%ç¡kpÉ­‡…®óRf¨óFÌ‘odFsuuíׯßÞ½{¯]»†(Ä@y‡™MlÉÝÝ % ˆÞLæ8ÁÂÏÀ•ÿ²Æ'Í’–hi“l̓YÈ#é²(;„Õ.ô\4ˆù!ùå"¼›ïeþøZ†Q¯^½;wFDD´lÙrß¾}&“i„ ‹-ŠˆˆP(±±±§OŸNII ¡†•BˆmÛ¶ùûûGDDÔ¬Ysë֭纸¸L:õÙgŸ]µjÕ²eËJœßzôèÑ­[· .\½z5&&æÌ™3]ºtÙ»wïÃ<;tèжmÛ†……ÑkÕªÕ¿ÿêÕ«ÿòË/teìØ±^^^S¦L)ߍANœ8ñí·ßnß¾}¿~ýJã+&“éí·ßöóó›={¶———bãÆ{÷îåÉÈ™™™‹-úËR@+V¬ˆ‹‹‹‰‰ù7˜2¨Ù%<4T8Ù6ˆ  4pí zM||<é7ô,ñ$äêsåá”ÄCv»gÏž¯³~ýú}ûö™ÍæŽ;¶jÕêĉ'N ’ô¢  …V«Ý¹s'…PïQn¿B04º©¡¯ðñ“.Âë \@03ŠŸ¦ò‚Õ£ØndÁZmx”Ëquu%©}«p¼«T©B¢¥““4ƒçž{níÚµS§N]¶lÙ•+WjÔ¨ááá¡R©Ê²|äÃ*.½AÖªU«V­Z\‘—|+Yt`MÑAV¯^½Äc‘ÿH(x©®$Iî|AŠ®¤`¥K%AäžžžEw¼ÂVHûûP©R¥š5k^½z&)QXgE—‘C.üJ|H¯×SÉAN£¹µü4(ņLò¦·ðõõ½zõ*¢¼O^% £§ÐyuwhäÈ …ÉF¢°‹6´"êÑ@ovuu%  ¤Ð ‹Õp³Z­:N£ÑËu¸Ö½ ŠcÑTPXÛ(ÈB°ˆ5Þ§ØüPXØ }õ0AƒµP­VKŒö(4‡Í’ÉdR‘PÔhÆsNq?ÆPÔ$ÈïÿËÖ%Y} ÿþ‹e÷îÝBˆ… RK8Àå O?ý4±ø07„¡œðÐÈQBÑ¢ÐÝêi·ÛÝÜÜ”JeNNŽÑhD/òÇ×'%%…— žˆX# ʼ8h®ã´LD–ï$ÿ‡(,Mw~ƒŠƒÚ64M†àPtÊGËy< ,‡'Ž;æè—S"`0Ž9ò¤®dŧPJ¥ò×_…N€j7H¦A /Ã…wFƒ2${"Ö™ÏÎÎF‰3ؾè~â:<7l"6x Bàâ#qÛ@Ö¦èz91^›§ -ÿ‚ÃñŒQcøÇ°œ'l6[óæÍŸàš²­Zµ*³Ù©TªÇÈ„ýÁ*ÞWd&Í1`DdI3›âÂëÐÐãdjC¥º“rh<ô8ŠèYú¢F£!Þ@!Ôð*/$çÏÝ»waƒ‚*Ã#À¥h dC“´ÌAŸSŠF£Å<¨šx$¿çQ—†,C°V4ԸشӢ ¯hA„b“‡Š•%o£\%|ý~3R(¥×ºÅÁrЇ<ñ´žžžmÚ´)ƒýüóÏO¼äX»vír,;ô0вOÈ¢E¼ :ÄPø’n&šŽäö& Ý0‚ÁI£T*U*ùWèNz­Éd"«¬XÐxˆÖ«Õê?üpÆŒ(HCzˆæ"䌼»»;¥þÐ áÚÑëõ#¦¹PM¶;Xçx0’–UÍ-Ú«MRÕæ~ÚpыŞ”‡hòUÃPK5ÖÁrЇÎ;W«Ví ¶ê^¿~½AƒeÓ/§"ö/HII©]»v…í—# K5ó gÒoë6M„ž'~R©f´ãä Ê3£MîAQ5´\CÞ(ÌkÜÒEn$R‰fΜ‰Ò;4*µZMEkx·JPE6üËãˆc!ÏEØhA(-”fîÚ(ºã €ÃZ9À“Ý/'..®AƒeiØyRWÒn·Ÿ¤%—ÈånHV¸èêQŸ  Ët3¥C=‘@®u2Áoo4œœ I…aPô fè@ñ¨Œ‰gÉ`5‚.’:‚ΛT‡ô ™LÖºuë'N Î¥ôƒóŠg`~h‡¸I,5îÇm@UAAÀ™h²T`›‡ð¥ò0'rÎ}?–Ã9Óý^Å‹jóÀ‡Çc9¢H®•„Ï=†=×å£-ÚHû°ñRpõêÕÛ·o¼jÕª’=C† y饗ß~ûí»wï>êÌfsp!ôìÙ³zõê3f̨h§Ýf³;vlòäÉÕ«WONNæ?åææN˜0¡C‡=zôèÞ½ûÍ›7/]ºÔ¼yóàààÖ­[/^¼X«Õ.^¼¸uëÖÁÁÁÍ›7¿téRiöòåË­ZµêÚµ+5§øKx÷ÝwÊw…>ܤI“ààà¦M›nß¾£ÇÒ¥K[µj””tóæÍ×^{íµ×^ëØ±ãØ±csss·oßÞ´iÓààà&Mš>|ø f9ÄT(’ò=œœHÛ€šB=@÷‰©  dv^g…pxWPúÝHiÄ'âããÑt‡ô Š7ƒÂ+œ( ?#O."boÄ2Iß"…ŒG9ʈ^Ú¼™o'JúQ[¬‰Êǰ6vìØ!Ä™3g¾üòË·Þzë‡~hÖ¬Y^^Þ•+W„Í›7á…~üñÇV­Zѧ{„AAAµk×¾víÚÎ;…¼ÆpjjjµjÕ¦L™b6›_xá…Í›7:ô‘†®R©vìØA¯Y³æÖ­[m۶ݳgQöfÍšµiÓÆ`0€Yöïß?+++---##ãúõëuêÔ©\¹ò‰'ÜÝÝÑ®­4XÎÖ­[ŠþtæÌ™•+W®ZµªcÇŽõêÕ[½zõ¥K—ÌfóŽ;>ùä“™3gvêÔiæÌ™'N?~|£FfÏž½víÚRņÏ>û¬]»vz½þ«¯¾úè£Ö¯_ïæææççwìØ±~ýúyxxœ:uê÷ß§-æAhqqq'NœBÔ«W¯[·ne‰Á#FŒxþùç·lÙñßÿþEçrrr¦M›6~üø‰'>õÔS3gÎ|öÙgãââ.]ºôûï¿÷ïßÿõ×_ÿïÿÛ±cÇU«VõìÙsĈ4…'HcP«Õð»€#`šÔIÜ0î¤êŸÐ ¸ÏAeÄBÈ™hib!¤M:99Ñ{, )ñe@º8ŸÄUå‚6Êêp•‹ê–"¢ Àêèfâ=¢0¼äeCiy¹ÙêñäÊDQ5«h×®q‹ï+!þÜåó…à`âºÆó¨SûËŠsk†:tèД)SöíÛÛ¤I­V;tèÐôôôQ£F-]ºtÞ¼y¯¼òJ@@@ttô©S§^~ùå­[·îرcÉ’%~øa•*Uºwï>uêT­V‹Æ‹Ï?ÿüóÏ?¿`Á‚'N¼ð ¨_ù°råÊyóæ-[¶Ìb±Œ3æ½÷ÞËÊÊ5jÔ_|ñÝwß9rdĈ111çÎ ž1cF¿~ý”J娱cÃÂÂêÖ­;mÚ´‚‚‚GexËҕʹsçÆÄÄT|!zï޽ǎÛ°aý{÷ƌӳgÏ äçç¿ûî»{÷î=}úôˆ#FŽÙ®]»)S¦lذaüøñà#GŽ|饗jÔ¨1fÌ›ÍÖ½{w‡4WqÀfl×΢PØÈBZ‹Lf·Ù„L¦Ëmv»(Ô`¸3†È¹PQ {ŠL™\.àY¡÷>bµZÍ*ñ “Lö‡$— »ÝD¹¥r¹¬0hM&—[ IèßÔÿOÖ!šøgóÎØí ¹Üj³ ôm“Éþ¡Ý.csán*b¼4!“ ÖoÍàç'%kí1zWK YœÄ“íQrgQº_”å ,~`9îM’`eÀ´x5‡tlÿ]–3oÞ¼˜˜˜çŸ¾aÆBˆøøøßÿ,þµjÕ:räÈ¢E‹RSSFãåË—çλyóæC‡}õÕWW®\ùä“O²³³>¿B!‰¥ˆêõzÄ ƒ?Ym6µZm1›ÿ¨Šf³Ù ãÜ„L¦B^˜yJê…ÉdR«Õv!ˆo™ÌfºÁbµÊe2‹ÕJü ~«ÕªP*eBP¤™B¡PªT&£Q—™LíäDÆU+µCe\‡Ø¤­°QYÕÀ„är¹Ó+¯ˆvíhS>†µ‰'’améÒ¥Bˆ;wÖ¯_?55u̘1D›’+:tèé§Ÿ.ÚžÄÏÏO§Óååååää<Æèóòòâãã}}}ÿ=OJ òòò®]»Ö¨Q£É“' !êÖ­›””¤×멞<‡b£³>þøãJ•*µk×ÎÏÏϱž ÷îy¤¦"’wù´ÙlòB—;õÏùÿ®6›L'µšäV³Å¢P(J%%^’ mrè J¥’8˜B&S’ûÄfS’H²¬V«Ýb*•]ç ÐÐ åk…Õ*—Ëe6[Íš5³³³óòòþÙ y‰/™Ì¦P¨d²?Ne2r ýQLÚjU-®Ð¼†Ú92!ä …°Ùä …‹“¶ÛíŠâÜ“ˆà¿ò Ö¢÷}›$¡ç~Ê$™”ßÏþEà ð1@ìÀø0‘b_ÂóJưÆá‡~8tèÐéÓ§¯\¹òæ›oþåýaaa£G^¾|9'FÉÉÉ»wïþ;V«õ£>:~üøÿþ÷?IÍÇ »wï¾qãF…b“.\X¶lYLL $ j6Zl õÆ‹^œ1cÆþ󟯿þº~ýúå;—“'O;vìÕW_u0‚víÚQÿ^L–ã$£ *r V»“—·9ã´Îy4°áT_”ÑAßÞA¢sprÆC·áÅ úØxïQ$=E«lÌúùçŸ/º†UªTA' ðO<ÀóQ46šó’Ø£øB q~@èbQób¬–Æ }X|^…’ð¡b#Ëï·ÃrþùçÈÈHÿàààèè謬¬bïôöö6lئM›=ºråJü¤Ñh~ûí·ØØXµZݦM›®]»>ê0,ËW_}Õ Aƒ/¾ø‚®Ô­[·uëÖ“'OÖëõ-[¶œ2eÊ”)S _î ›6lˆ‹‹{ë­·bbb6mÚôÌ3ÏôêÕ+//ïäÉ“ƒ ºpáÂðáÃýýý‡¾eË–K—.)•ÊaƕﰟyæÚî=zðë=zôX´hÑêÕ«ïÞ½ûwÜrS¦L™0a AƒNœ8A[|àÀÙ³gŽ1bÛ¶mç2|øp//¯;vŒ=:33388ø™gž™2eJTTÔ Aƒ.^¼8þü'•å4jÔè_ÒŒ®¤àöíÛ’PL77·öíÛ;VæááôéÓÔ>Qª´µlÙòðáÃ:nÛ¶mœ” †ÔÔÔªU«R‘œœœÌÌÌÚµk“7)--­  ÀÅÅE£Ñ¿qqq©^½úÝ»wF£¿¿VVVvvv:u @«T*‰A&33“ìiîîèC‚Ýn¿zõ*¿âååe±X èo«ÕzýúuúÕßßßd2ݹsÇ××W­V߸qÃÛÛ»R¥Jׯ_×h4¼_ÎÉ“'5jäááQR© ¹¹¹µjÕ¢|—´´4NW·n]ZU¬žâÆ$ÈøúúºººjµZZ=¥Réïï_‚ñóÏ?÷íÛÕŠÝn!„³³s5ÒÒÒôz½ŸŸßíÛ·õz½‡‡ÇÓO?=~üøˆˆ¾ÝBWWWIç¡]»v½þú륗 j³ÙÐ׋ð3;;;++ ÛÍWïÎ;TcжÞl6“ËŠä•Ç+òa·ÛwíÚ\«dee¥¤¤´jÕJÒÓ îîîDI„;wî|뭷ʦTÇ“TàÎd2¹»»çççïÚµkäÈ‘÷Õr4 ·xyyyyyá¿ÔùŠþFC"”Ðo¨G½««ëý,->>>>>>=™LVì›10Rîø=J¥ÿÅ’Î4¥žžžžžžEG(YUâ‹ü¿X½’…¿Ün!D||ü€úöíûÔSOy{{ûûûÝî²¹\.Y¢J•*Nòí&tR©Tån,U }!džƒ>€ß]§  À±† ņÉÉë „fÍš-Z´H«Õž8qbÖ¬Y¡¡¡Ž5q€ðH਱v_8tèЂٟ$!îá¡C‡:txÔ§ôzýo¿ýæÀ(8À–S P”΋/¾ød÷,›ÙQWàN:=Ùã85p€ƒå<&P°ÊßöñG….]º<Áe¤ ¬VkEî\àTD–#“Éžàbºp€à€ Ärìvûž={+â8À(ApssCžÓŸ kÍš5+—@@9/ß0DÞ3±BA…˜Pœñ_‹BX›ÍV1£Q¨=R\º ¾§ù„JJE”û`ÜÝÝQþàO,ÇÃÃÃÕÕõ/K–,X,–ììlWWW777Q~”¼¼<ªlèææVÆ+ð`ÈÏÏ·Z­jµÚÝÝýýÊ233œœœËxFcAAF£ñðð¨P{G­T*ÓÒÒŽ9Rl>vùBåÊ•›5kæââ"©¸\î––æææV&­VKÅI=<<* ÍÉÉ¡–eOÌ‹5uuuuE"­4|Àl6—±#477÷ìÙ³TL¢lÚÅ™3g|}}ýüü¬V«öQJ——ÁÀªT©R»vm‹ÅR¡&C‡½øâ‹Tø!ë½–ܹsçöíÛ-Z´°Ûíp‰Ž=Ú¬Y3!D:uZ´hQÑTWWW:w:îQ[Å”X­Öß~û åéõú (IÕjuƒ *鈋‹kÒ¤I•*UÊž˜…'NÔ¯_Ÿç•;RAà8Àe–ã8À(#xü¼œƒBkkӦͱcÇêÕ«Wl­û²ìì츸¸çž{îòå˦eË–gΜÉÊÊêܹsÙ `÷îÝ~~~O?ýt¹oêñãÇsrrjԨѴiÓŠ‰vùùùz½¾J•*ðp¦§§“3Æq&c»-KÛ¶m+Â`Nœ8a0^|ñÅŠ¼bÿˆA– \»v-99¹}ûöÎÎÎÅÞpïÞ½øøøæÍ›í›U¦ZΖ-[|ªîÝ»Rl•2ƒÄÄÄÇŸ?>99Y±páÂûµ¸( 8uêÔÍ›7ˇ~ýõ×?~üÆÑSRRŽ?Î}Â999ŽlÊǃiÓ¦7®‚ föìÙ#Gެà+–œœ|þüyæ!¶nÝ’žžþö_žZζmÛ"##333ívûSO=õý÷ß¿ñÆøuذaTÇ~„ Åõ×û›pùòå©S§ !T*Õš5k„K—.‹‹{ï½÷膋/V®\yÛ¶mÇŽ+((˜7oÞĉKv ˆ‰‰™={vƒ öíÛ·lÙ²9sæŸ_Iä~èСmÛ¶ ëÞ½{XXØØ±c=<<¦M›¶dÉ’Ó§O¯X±¢ÄçàÁƒcÆŒ¹uëVNNŽ››[ß¾}gÏž=}úôŽ;* Ê»êÚµëÀ'OžA+9gÎj:lذöíÛ_¸paÖ¬YB—Ò$@¯×'&&úûûW­Z5//ÏÉÉéúõë÷îÝ{úé§ëÔ©CëY²™™9|øpú»jÕª‹-úöÛo·mÛ&„hÛ¶í‡~(„§Š 3fÌpqqÙ¾}»Z­Þ½{·¿¿·nÝ–-[&„X¿~})-ËüùóOŸ>-„ yã7ÒÓÓGŒA?­X±ÂÅÅeݺuÛ·oB¼øâ‹|ð\µjÕîÝ»…;w–t|/A[ú6ÅÄÄxzz~ÿý÷›7o&SÆ)„ rÆŒ:.((§d6|øðZµj5lØpãÆÀgÉ ézhhèÕ«W322Ê~BˆÓ§OÏŸ?ìØ±õêÕ6lXïÞ½{õê5dÈÆ=zÞ¼ygÏžB„††öèÑãîÝ»£F¢W¯^]zM úöíûÆo„„„äææ:”®GGGãdÍš57oÞüÕW_Q€qi9]ºt puu:tèÕ«Wwî܉¥aÆíÛ·/**ª^½z½zõ¢ž+%V«µ[·n>>>QQQIIIýúõ[³fÍœ9sÞ}÷]ÈV<~ü8d‰ïPVVÖo¿ývåʳٜpôèQ½^¿sçÎóçÏO:õë¯¿ŽŠŠjժջロ””wâÄ ½^OÓjµ¿ÿþ;Ñ”‡–-[vìØQ1zôèÔÔÔ;wvëÖ->>þÿû_ttôûï¿?hРiÓ¦ýðÃ?~|TT”³³ók¯½Õ¼yóþýû'$$¼öÚkÕ«WŠŠŠˆˆ(=–sáÂ…Ê•+Ÿ:u*777---///???---))ÉÛÛûÔ©S¥Ñ¡ÄËË+**jöìÙçÏŸß¹sçøñãCBBFŽ9wîÜU«V………%$$DEEU­ZõÕW_ÍÌÌœ5k–ÑhŒŠŠúú믷oßuëÖ­·Þz«4ÖdÉ’%QQQï¿ÿþ›o¾9wîÜ'N !¢¢¢ ÅàÁƒ÷îÝ»páÂððð?üpΜ9$u !~úé§)S¦DDD 2dÆŒßÿ}i ¯G&“)**J£Ñ 4(66v̘1o½õÖ˜1c>þøãåË—ÓmÛ·oŒŒ Å ;¶jÕª¡C‡ž9s¦4º85yòä3gÎÒ u:Ý믿ŽA¾ÿþû;wî¼zõêñãÇŸnݺ•F˜\^^ÞáÇ“’’t:ÝÎ;/_¾œ••µÿþëׯ/\¸páÂ…3fÌxã7fÏž}êÔ©W_}Õd2}ôÑGBˆR’!FM›ûúë¯ëtº¨¨(“ÉÄ;¨íÛ·oñâÅ999ùùù={ö,SÚ«««F£‘Éd¼SÌ#F£1>>þîÝ»ÙÙÙ¥s™••EæE½^Ÿ™™©Óéôz}Íš5.\øƒüûúöÛoŸ?~Ú´iÓ§Oæ™g€R&“)>>þæÍ›¹¹¹r¹ü›o¾Y»víÖ­[!­lß¾}Æ ¥:ÎÎÎ...B4"jܸqBBÂÉ“'׬Y£Õj/^¼¨Óé¨MY~~¾¯¯¯³³sVV–¯¯¯»»{nn®ÅbÉÊÊJOO§¾_¿×æÍ›SGz žÐu³Ù\Ù …Â××wýúõ2™lóæÍƒA«Õz{{W®\Ù`0ètº¬¬,ºÇÅÅ…¦¯×ë•J¥¯¯¯Ùl6›Í¾¾¾J¥²ÄÅ)‚êÕ«wéÒåý÷ßwuu]¿~}Ë–-333©…àºuëÖ­[×¥K—uëÖÙl¶ÄÄD½^O[IƒÔétIII/^ä×K\GT«Õ¾¾¾«V­Ú¸q£ÑhÔjµ•*UªR¥ ­$ÝÆWƒqvv9rdbbb±žÿ>xxxÌž=;11Q¡PäääÄÇÇçååeeea¤žŠd½zõf̘A‡¢4Ù¡C‡áÇðÁ÷îÝ£+C‡urrZ¼xq~~¾ÉdªZµjHHÈñãÇ›7oÞ¼y󬬬¨¨¨°°0ÞR¹ÄaÙ²e•*UÒjµF£1+++///>>}íÛ·2dˆZ­þ;È_òe=IðoҤɤI“\]]K ïœ ôö IDATú÷ï_³fͼ¼¼r±vëÖí—_~YµjU@@e]pHHH¨Q£Æ¤I“ªV­Z¾ÍgÍš%—ËOŸ>=jÔ¨¢ã¼ddd$$$ 0@ÒÈõÉ€¤¤¤#GŽDFF>¶q ôà­·Þzë­·æÍ›Ú¾}ûE‹InHLL9rdãÆI¶À•+WjÖ¬9iÒ¤‡ßë2ƒZµj 2¤ôÞÕ3???!!áÕW_¥.·ÿPX¾|ù… FúÑGq#j©­^```ið’’vss7nœ¿¿\\\)UøhÖ¬Ù¸qãÒÒÒ.\¸@WŒFãŒ3нùÌ™3¥avïÚµk5Ö¬YóÜsÏI\V2™lܸqÏ=÷\\\œN§kܸqxxø_|1vìØ>}ú¬Y³fĈ’ö”¥ gÏž=}útXXXXXØCèÆwëÖ­¤¤¤ÒU¹¸p322† R·nÝR’µÿ&lذ¡OŸ> ;vìÁƒÑc›¤‡#F\¸p!..îí·ß.64æwÞéÝ»w\\„èR‚yóæÁ©S¡AƒãƳX,ä!ˆŒŒ¬ REË–-çÏŸ¿aÛÍ?oÞ<~ÃÑ£Gûô链{÷îÅ‹?ýôÓ° –Ô«Woܸqv»ýÌ™3üúñãÇúé§¿ùòÇÔr¼½½kÔ¨!„pww÷óóS©T~~~111o¼ñFçÎu:ÝÔ©SK\ÄP([¶l3fLçεZíîÝ»Õjõ¥K—F=a„Q£F9;;W«VÜ΋-êÝ»÷ªU«æÌ™S³qãÆ’¥Uáçççåå5jÔ¨”””Î; †aÆըQC©T¶hÑbÏž=-Z´ÈÊÊÒét­[·.VD-ðòòòóó“Éd...~~~NNNBˆ>}ú\¼xñÃ?lܸñ‚ ¾üòKƒÁP«V-!D¥J•jÖ¬I²‚ŸŸŸ»»ûÆ'Mštøða“ÉôË/¿”Æ ©‰NÍš5Ï;×´iS///ggg•J%“É(XS©T:;;—F‘(³Ùœ™™yòäÉ·Þz«zõê«V­;vì¤I“äryXXØ€úõëH¶iÓ&WWW???÷h‹ÅŸ›—,íÞ½;$$Äl6OŸ>ýÅ_ܺukxxxçÎsss·lÙRµjÕQ£FM˜0¡N:K—.]¼x±Ñh¬S§N¯^½H"B´mÛ–Êy”8lÙ²¥oß¾;wÎËËÛ°aƒŸŸß„ ¦M›¦P(úõë÷Þ{ï;wÎb±¼öÚk4H¹\ñî»ï9rä~a¸%¾¾¾ˆâ½ß çλsçN!D•*U>>v»]¯×Wô«Q£†‹‹Kys øúúJ’{þ±ÆË8Àp€ð÷BI‹‰XËÈÈØ¿é+Ak@@@e•o‡Z«ÕJ†A77·Šß¡½X×ÙÙY©ü÷ºôÌf3IÐåŽK¥1)OOÏŠ÷\ªPPP`·Û’““Ÿ0|–ËåÿùÏ*W®ìææöCQƒÁ ) 5¬ùùùµiÓ¦‚OC­VÛív“Éd³ÙÊ7>++ëâÅ‹mÛ¶•ÉdÙêUìvû/¿ü$“Ét:]Enô[ªpýúõüüügŸ}Ön·ÿ³vðpéÒ%»ÝÞ¸qc›ÍöÄLêÁ@F«ÕÚ²eKÊq~bÀÙÙ™ê Z,–R*Wz@y9¼&€£+¨à8 ¬”6Ç8Àp€*:˱Z­—/_ÎÌ̼sç/>Xaáúõë·oßvlù“ wïÞýGàá£Âµk×îÞ½[²Ùlt¢q%;;ûòåË‹¥èÍ·oß®È!ûnݺUšü–#ܹs§4¶øñYN^^^«V­¢££7oÞüÅ_TüìÑ£GÅo‘ë€Ç†‰'¾ôÒKOÞ¼^zé¥ok[,´jÕjÉ’%¸rôèÑùóçÛdäÈ‘Ov€ëÚµkW¯^ýo>PcÆŒéÞ½{‰¿¶B;<==+W®œ””´fÍšþýûoÙ²¥fÍšï¼óŽbÞ¼yäÞoذaBBõðññ=zôŽ;:4lذèèè   2«}´nÝ:êzеkW*ÐûÉ'Ÿ¼üòËׯ_ÏÈÈ;vliàûï¿¿téRhhèÊ•+ûöíÛ´iÓäädÂo77·‰'îÛ·oÏž=‘‘‘©©©k×® óõõ¥AvêÔiΜ9äE0`€——×çŸÞ½{÷‹/” OýôÓO)û²ÿþMš4¹xñ"û6lتT©²ÿþÉ“'_½zuýúõ$=;}úôÄÄÄ7}ݺuAAA™™™áááÉÉɃ ÒëõAAAÑÑÑŸ|òÉáÇ£££CCC£££y[‹Ò>NÓ§O§ Ã#FÄÅÅ 8ðôéÓGŽ™9sæºuëÊ` ±±±‹-úüóÏõzý Aƒ’““ÃÃÃ333ƒ‚‚Ö­[7}úô¸¸¸èèh­V{íÚµèèè”””üüüèèèS§NM:õ»ï¾ JOO÷Ýwoß¾ýá‡Ξ=»4Ú…9sæ,_¾<(((///"""999"""///...44tÇŽÇŽ‹ŽŽ6—/_ŽŽŽNMM ?þ|PPÐÁƒ?øàƒ¤¤¤èèèwÞyç‹/¾˜4iÒøñã4hðÔSOMœ8‘÷JØ¿ÿÒ¥Kûõë=dÈÏ?ÿ<((Èb± <8999,,ìÎ;AAA?üðäI“êׯ_½zu•JÕºuë²A¤ÐÐÐëׯíØ±côèÑ?ÿüó¤I“5jôÑG ><))iýúõTã=66vùòågΜùïÿëééÙ¡C‡™3g~ýõ×;vìˆŠŠŠˆˆ ƒ³zõê   ììlZÕhµZjY–üæ‡~Ðétß}÷ÝÔ©SO:}ëÖ­ˆˆˆììì   Õ«WÏš5«Q£FU«VuvvnÑ¢Å×_=sæÌ:xzzþ÷¿ÿ=sæ m÷Þ½{ '¼Ý7nœ>}zPPЕ+Wú÷ïd·Û‡ R6V»Ã‡‡……uêÔÉÅÅeøðá^^^M›64iÒÏ?ÿüã?nذ!11‘hT£F&L˜@ÁÞ½{ß}÷]àdýúõýýýÇŽ{àÀaÆ>|8((èìÙ³7oÞŒŽŽ¾zõª^¯ŽŽ>~üxLÍËË+(((((è—_~Ù´iÓ–-[&OžüÜsÏÝo§N1bD¥J•Úµk7cÆ PÂßÿ}äȑժUkݺõÔ©Sÿ~ƒóˆŒŒìÔ©SVVÖÍ›7/\¸`µZ}||œ½½½·nÝ:pà@£ÑxéÒ%z¤jÕª·oß4hPÙœ¨›7ofeeµlÙ²I“&7oÞÌÉÉ9{ö¬··÷¸qãʲg—‹‹ËçŸîï”¤ÕjkÖ¬Ù¶m[¹\N]O^yå®ÕvïÞ½{÷î~øabb¢Íf£U=þ<7kµÚï¿ÿþÀe0òüü|Ï>ûlÈ![·nuss»xñb­Zµ¶mÛv?WÙºuëfÏžíãã£T*![äåå]½zuâĉwïÞõôôôôôLKK+Z)§~ýúTóß`0´mÛ¶nݺÉÉÉZ­–ú®¶mÛV¥R?¾fÍš•+WV*•O?ýtÙì Ñh+ã¾–={ö W(‰‰‰tÅf³Ùl¶}ûö%%%ýðÃ&L¨U«–———Z­nܸqJJJNNNëÖ­5jtãÆ êER¹rå‰'¢;;¶ûôéÓ;vìhÓ¦ ßî+W®´mÛ¶ZµjgÏžmÛ¶m½zõ._¾\fÑÀ ­ZµjРÁµk×üýýŸþùôôt‰ólþüùÏ?ÿ|QüLHHN6nÜø™gž¹}ûvFFÆ_|±xñbµZ}öìÙŽ;~òÉ'#GŽlÞ¼yXXXØQ„îîîm۶ݸq£Z­Þ²e‹Á`ðööž6mZûöíùå—_|ñìÙ³žžžmÛ¶ýñÇׯ_ÿüóÏoß¾ýÕW_õööÎÎΆ+++ëÖ­[îîî•*UÊÊÊJMM-Ã'''ž™ŸŸ%„ ±Z­Ÿ}öÙñãÇ›4iÂK9}ýõ×¥Ú»é!A¥R)Š2ûœL&{@Ê- †ù0 …‚*tåææbUéʈ#Ê,›êã?ÎÏÏçwÚ·o?lØ0È jµú~ɰëׯÿòË/ÿóŸÿ¤¦¦¢í²eË<==©ƒÜúõë}||BBB$µårùªU«„e¹5 ÇŽûí·ßF5gÎ.úQ3«¢pïÞ½©S§¦¥¥ñönÞÞÞÔjZ¡PhµZl+p£ì󲋄J•*;vlûöí&L(((X»víÃTxT©T¼ºm÷µk×F­T*+à†>î·§0üLž<¹S§N$X+ŠvíÚÕªUëÊ•+o¾ùf™ÕÙKNNNJJZ¹r¥Z­ ™:ujÛ¶m»víº`ÁN´…wïÞ2eJFFUt”ÀæÍ›«W¯òÔSOU,-GÞÞÞ111ÁÁÁ^^^™™™_}õUpppLLLEà1صk¯2ƒÁ@®ˆûÙRãââ>þøã£G*•ÊþýûÓO•+Wމ‰éÙ³g‰ÔTX·nÝ¢E‹–,YòòË/GGGçææÒõÕ«Wó´Ü¬¬¬o¿ý–þž7o^«V­bbb6lXì;©i# Îÿ˜qëGéAdd$9-|}}çÏŸO­Vë—_~Éo;xð uóMJJúé§ŸÞ{ï=~Ú9xzz’×ÊËË Ì{åÊ•åžýWPPéääôÙgŸÙív>ÁóçÏïÛ·¯Ø§¶oß~õêUÉÅ£Gîß¿„ “'OO.Ì›7¯qãÆ111Ô‘/99yÔ¨QM›61bć~Hþ’20çŒ=ÚÏÏÊ>|822òý÷ß)ú¶áÇüñÇ^^^Ê}Ë”åÌž=Ûd2Ž=ºvíÚµkמjÔ(??¿ZµjM:uõêÕjµš„Ðò•ñýüüFµpáB*îåË—Ï›7¯E‹½{÷ž;wîÀh»/]º„ÎÐE·{Á‚#GŽ\²d Å`»ÝίcUùj?Ò¢àÍc4ú-v[U*U“&M¨U- X‚t¿ÅbáÏ !, }]¡PðêX‹Åf³aÖØµ‡Y±‡Ÿ Þp||<±Æ2‡ !h"V«Õb±Èd2Z™¢ƒ/vU- U¡~ø±¡àÍ£NЬT*i%år¹Åbqrr²ÛíŘ&9P/^trrò÷÷ïÙ³ç½{÷Ž= <ÇvËårz¹(ìé€í¦U’˜èÿ¨àÍ™3g¼½½¾à F­Vcµq hFXš/?hEL«D3%ßáï´¢àZ­~x•øÉWXrÐàà Õ¾~Òõ¢'ô!íÏ%ÙˆZÂ-Š %š\./G#5#!IK—.={öìàÁƒïܹCºEÙ_ þ÷_X²ªå¸’÷<ü—(AtªX<–\”,ƒW¬  ¨7®è,$7( К¿<&X–“*ºM4àb]÷ÃϨ¨¨«W¯FDD¤§§wïÞ]²S|»9ååËÌÓƒÁ%MÃý¶¬è€ù*ÝáËì´‹Ÿ}Hü,ÙqtsçÎýî»ït:Ý€à/)U -©{ ¦M›F†ã3Ô©SçÓO?%#þ¿>ùä“7êtºÁƒ—K^‘*28XŽ |½²üb—.]žÈ•¤üß9T«V­ŒÑ©¢§§ç¿|ð,G.—WüøE™LFæQ‹Å’••UŽ#A¼–¢|Gò¨ÀoäææÂìûoø­Vë?k:Ž‚BËý€” -Ð?‚‚=*¹£?L&Ó?n7‹¶6ÿËÑh4¾¾¾¿E%!D^^•®)_©Va6›Ë}$ äeµX,W®\)ß¶Cå Ô]«Õþãvð@Îüüü'iR€êÕ« !¼½½K$Ô¾b2Ô¬¬¬Ün*•JI\õÿG¬ýüóϽ{÷vè}p€à€’e<ÅD¬Ùl¶rI”q€à<ÁàááÑ®]»?Ø®Êåò¾}ûþ;WdÛ¶mýû÷—Édd¶Ûír¹œ:¿ªT*£ÑH)0ªÚív«Õj·Û)|Ðn·“{ÉÓÓ3((¨M›6«W¯Ž‹‹ƒY™ôbrŸÐ«èŠL&£ñŠb´X,f³ÙÙÙÙf³ÑS5Oéf³Y£Ñ˜Íf“ÉDI”A‰ô¸R©T©Tô_³ÙLÓ¡+ô!J €}›ÍF/¡g)!ƒ†DWô ›®+ www“É”““Cyø‰§ÿRN …öÓçГVLÿµZ­HR(ô¬ÙlV«Õ´,ô \.·Z­40…B¡ÑhŒF#ým/¬6ÉY2™ŒÆC¯Òëõ4H¿Åb¡YÐØh$Ø !Š"M)U‚¾ˆéØl6•JEij”z"˜^ECò÷÷wqq¹}û¶Á`ÈÏϧE& Q(t¦@/î)•JZ"ì¯J¥²Z­4`ºBÓ¡©b !¿bÓiI)åB§ÓÑ@KBuz‚¡i¦´Å4Mú½“ÐL¡ÑhT*UAA­9vœ0þ+—Ë ±ñ+åµÐ”  Ã)ÿO|£ï"ˆ€è˜Ð°éýô7ýDXª×ë•J%aM7›ÍNNN4º{A£l$ Ž}Qzšé'Ìg‡Œ~ô7Ìb±Pnzrqh5 …Ùl¦“B_ÇB¢ð‰q´\ÎÎ΃C¥QÅÇÇ7hРl¬ÕjE~˜#bíÿY¡m'Q^›ÍFî/œXY!>Ñù'ZcµZ ~ýõ׳gÏÞºu )r Â„ „+D &OG‹^EwÒÓ¹Â颜,Ð †µˆœÑOÎÎÎr¹Üd2qrFøG§Ž2×ø`€ëôBÞ¡‹¾H§+;;›¾3ÏåÊ+¤å¥ÓB4l¼¯ÅL©â½t„³.2ŒIÊtVA‰„...wïÞ-(( Ò@+CKJ¯¢Å§ù‚þÒYµÛíF£,) O´z\ÈàäÏf³Ý½{W¥RiµZHÈ"$^‚e§D`ÁÂ=héøšF .h(M–ÐC:ÕiãÀK@¶p ˜4ý×ÉÉ (GèG+†Í¢‘ckÀ¨V݆‰;99Éaw ½­ÒÍ é8b´/œ¬›ÍfˆbtQ­V+•J­VKï¡§@š‰/ªT*:ôfšM[&9˜]1›Ítaб‰ž¾HH…=‚0DC¢O«T*“ÉDæë@iº“„9`(L\%& A–ˆÐ'ý‘2mKÒÈæà7´UÌdµ HÒm”˜ [KdâÞ½{÷îÝãÒ ½Ä‹ž“““^¯Ç‰i ¤'„Àké8`xDHÓá£3Œ—Ó JA_§G8%⼄ð: §ìøÒA&E†<peâ1ô+Æ.K7@›¡¯ÈåršFHÄ ” T 3M"M„žB¡puu­R¥JFF­$äY¨8 Â8ÞD­8Õ…ùç˜ Ír -t#®á‘¸  ‰íÆK»ÎKdÒ ´é40f®OcO$‡ˆ VéÇb±€ÍHÄboô6ú›è&ކÕj¥’ `HxJ' %Æ#c¬¦;Á`€'À7º‡+R`Ø|_¸ÒIH¶É<ž¤:¾×`–\,ƒZC»Ï?Zn~¿¡m#áš2”_Nå9Aá¦NƒèŒÆ€')$t!òGøA50ËôæT†Ó’:¡8Ó ¡§€ÎÎÎx z?Do’¡ «B@æè ®³qJÎ÷xô!X<È&NC”æA(BµZM“"Ç=P¡P 6qŒl2&ç=0DÐ:§§§çååét:ìÉòÜvJãc¦ B¥ó † ã­LL Ð0TÒE'''’=ix`àî 0‚Ûæ’1-ÒVé%0ªpk“VÎ$gItÖh4ŽÑ¼‘h‹ÁA¡©`›¨àÝÀ—‚–Â8ñi²(ùq¾°wth(W‘ —8ú‘á Œz$ŠpŒFHÎàñ!QX !ØPH4^Ú‡þ€YçÂg´‰˜/Œ+1„®®®$SË9 ™qó ¬)œ¦9XNyN2„Dú¯F£)Š r¹\£ÑP™Ž=˜ô BpU„•\ Çp<¨”$ŽvX¨²$T|"%L¡P)í IDATR:99IDòˆ€v€šÍf²íU"Gª‡qUnÃQçz ·GAu ¿¹Å6¬ Ò"=B^4ºË +}ˆ†ÊÝl¤âÀJ {N§ËÏϧ€´NE¨À‰iñ¡çÍ€M‚'‘¿.h:ü ÜHH›žŸŸOÔP­VÃìF^C«Õêææf4]\\d2™N§ÃÚªT*www;wîèõzîarvvæ64ˆäÜ/o„ÄJØ ¦u€× ˜‰ÓÁÅs˜FÆpÔÁ`ôƒ²чLOÜABœƒ½!±ÁéääDû‹·ZBÈ ™âCø‰Ð8ŸÁ`  îE–^bÄ® + „¾ˆ)C :‘“œ˜šá!$’Á` •‡áRQX- Ö0»ÝNu¹ðG7Cž#~B2œF£qÖÊYËŒ í•è8¨?°Ön·»¹¹¹ººÞ¼y“ÒYà„…íFˆîsƒ7/pãpÆBJîŠ üƒ"Ù ‚Ô.‘Ø ch½«5¼š$®ú‚ÃÙ®Ã6wÛr?3­!ÉnDg%L‡Þm T`Ö0h`øெý,ã|R0àE!{ãJT4T9_¤e…èMß%ê@’&7]Â. ?¦)„0 DÔ¸ÐS§N:uê>|X«Õbeø\`†â¾ ÜF*¸„n‚ësë"”Z"ñÐA]ô8m=,0—K†ˆKòB€BEÞunRƒÁâfŠ“Â1á0÷¡N%ˆ2í ‹‹ b1¸EËEŸ¤ hN`‹…h7É À+˜¹`G-j' ªD@ˆ§ÐŠèºV«EqOØ`¡ŸÙ V b\†]ÝÁrÊUÝ+ô-ãxƒZ9Hx±Z­yyyƒÖ8Q±¹á\²Bî€á†WÄ´ðp,hÄô6È50AcÀS8í°ù©…|þÄM7¤Ïqåú ?º@b| ü”órrð3„]àrˆßŒ‰`äÜsËŸg¥ˆ˜€ïš¬ ìô9œRxì`œA!g8ØA^%Ä‘V¢:Ü<Àh<Üoç†Dº‘BD¦Øl6ƒÁpóæM­VK5/xw,•B # *qBÀlÅ44 =¢Ñh€·„9$7@§"HÓàEw"ö ‹ŒÕÃÊÓ|M‡_á@å<›È1þ˹ÓQ‡I¿!):Ü=ƒóˆå’RV®\ÙÅÅ寮à2ÁñäuhoØîz$áƒ,®$é‚…Ð0È)qÈñ°#nå*ˆbv8 t°œò8B±m„©œD‚»@ÿ€¨Îc¨ˆU¨T*ƒÁ}œP š>œPèôrß8[¨_ï(—ËI'¬Òëõô®þ#Ž“G ƒ"u c:Ýãìì òM ¢‰Ÿøá!!—ËPýŒ+@°ÛprÛW8$¢"È"¾‚>‰ÇŽ4K¸8c¦1;;;s+xlt$=ÔŒ@ ¢¶èÙ €y“ õp#Óªò¸/B3Òx¾LC"C"X2§ˆº ç9»áz”C±OÜó§M [ðq—¹„žÅR±{¦árÇ$^¨T*I£Â\ˆÂrÆ)‘$8¾Áxŵ ¨ …‚Tj BXƒ¾ SžU«Õnnn¾¾¾7nÜÈÈÈÀ¯ÐÈi÷‰]ñ€‹ 1à\–âÞŒS“°agâ‘â>$If€ŸCx*vªè0Ê.VËÁlŠ¢ï¡+ …‚êrÿ 9K Ñƒ^ð DH“‘—'jµš‡;é„¥®T¸myÀ¨Éd‚K–0Œì¹¤999ÑuúR<Z­Öh4â…D¦!r‰ž+:¬!Cc#?*"x~ h(oµÂmN_ŠRòQIŽ.ܤ†;üyôÔ8-(Æ+IÜçÄw™~5™LZ­–v„‹ÀdÒA€È+½_bÿqçÑGàa<èŸF€üFƒøŠÉc.¸Ø.qÓZE–¬<Äaˆ#°rrOSC /¬[kˆ£_§Ýï[L\(AÄ\Œ\êçÑ’`3PS „ñH FÃÂq¸hé2‡½Ðét~~~]»võññúîêêJd]¡Pää䤥¥Ñ#Ä#¹­²‹$z˜$¬™Ö™Vé|ÊàF£Q«ÕâPs‘— ƒ-#<ÁÎ> a¼CË)ëÈ>ÜÖÁãÜR m&4IVL±pÀÿA¸E9Œ0¬Ãl {‰IÒ4¬F\é!.…‹ðTAô#ÛHzÅ1€ã”/ð°]`-{2Á“ƒ·‰´º_è "ųsÀÀ ;ƒLÐÍd!D\,´"nX#‹…x B—ÓnIÐ÷ÓãNt„·‰ãY·|xÇ6îëÆJêõzZsXM!ÎsC(7Íc³ŠÆÒk‰S‚C ÚžóodqsÔD£ÑHÞ5Üm)‚¤nCƒ†}G¼8P`ø¢5!³àa ˆ Vó€1äiB±#‡9WޱÅÐþiAè Ñ¿’tTXRRRjjjvv6®SfN:ðMb™D(?pìfR`/·»r îdù Çx(,·(às 8ÜU¬ì[ ;XÎ}U` UÞˆÉh4’pXh¬ç-èPq…£²ä¸™ˆŽ«““ï& â‹€"Pþ*>>p±Kâ¨$.È“í‹*9vÀý”üO”‚§¦ó< d&Zœ[RéÀíx…`xÅH¨T©TT <jh:¢`± œÊóÅAø(wHHô ØÍ Qr·þ%Y› tÔ††Pì2¡–$ „'l"ÒO°\H,)”®Þ!î nv ¾E œKµä D(ÐÖ$.MóPRbrœg9aJòöövwwOOOÏÏÏ'ɆÇ݈Â4Xå€?Ñ1©…|¢8V<‹ÈF+“———ŸŸÏuH„8‰.`U±dàgNNNíÛ· ©]»6Í®¨ áÁúЧaŸD¨$iÉ„¥<¦x.1ðâPÐtA¬]$ÑÄ>Pþ.ˆ\j ýC2d^ˆ3´G”¯x‡6 Rà(†v¿=‘KÂT@H$¡8êhIª·áÍðåBE@>ïríT •ÙཔpPˆót>F#L^HŸ¯›ÄÁæ:,“<Û ÿ`á‹E§Ó„ÝÉn·S´(d[ž² w¼q–À}ÜXGT B4¹hkŸD+@Ë ¤o®™Ñ´à4*^°‘ip† – ÏcÒà&¡¯€0At¬,Òª ¿s¦;*|òDØ¥Óé Âò$Hº“`@E%—°Ydç„°E"?(;>‡èê„„„ÔÔÔôôtB{~ál'žŠ`I}?‰„‡ (%œ V½Æc2™È· $„‰Fd:㘠4†CØê¡«a¦t3ewâ<ªÕj˜þ¸Õ—p "ói7ôrØ?H®B ÉLåÛRÈÁr†D‘G^å QżÄ!¦¹ˆ'©lÈEEx5DaiHÝbk.ñXd^à@°â0ÎPJpG^©¥¨è ±—[½ X‘4J8Íï¥Cô2z­Z­&ÿ'B]é°Á£ƒÕF$…óÑÁ{ævˆcÜ+‹ƒJ?‘Rš ?ÌY’ðI85s6‰þòly`/\Ľ8<"æ2^Ú‹p1Šà»Pwx¤rå›ÎŸøš€‹ðr–Ï+ p¦Å=¼(ü” ”(MÄË©!îNâ7¨÷ K5n€/¶&‰cÕl6_¿~=%%.ùƒéR¢‹@ì£jR4NÂLóåjT ^VŠ˜4&">ŠÍâ+ ½„»Wñ9øyN(9)ÃZ½œ•Â’ †mEô)Ì×\êâ =’lP«¡Â„UY;Yó÷æÛ\l¼–*<¢¹$Vo’ß¹QE°âZÀTîêç¥3¹…—ùƒ~ o?iÖ8](lÅ‹Ãk •‹”q"ôE¸xÀ7Ävœ[ص!œrçVäîwÁ*ã®ũ9W}îÎc¥xYkÎ!¸ÁÙ¯pá¸ò"›È”¢ÙÑÜɆp,„K‘iž CE°8w×!’WˆàÜ…×C"Ï?ñ([ˆÓâ>!X\ÉVFs””Tàj´¤Ð'w ‘Ë4H® Ð®®®¯¼òÊ;ï¼ãçç‡`9DpÑGOh Cý 6ɵ^Š[Ã`b¥i"ÕŸ§vÑûé[ùùù8$‘Q”–‚®VÐ!<£–·ð”åål’ƦR©<==áäeÙx ÏžæÅXijµšÂÇ1|š¦·?,®\8†° [7­·&KbùZNùDHK,’4}m½õU«s{ç?da‹M—)f)´ûµÊÎJIO~æâ9yˆrq[Ñ )$kI¾$…ˆlk’Ö;¼ |›,4}ÞíTчÎ2À%=ièåÔ€î B-jƒ’ä¢ú'*îpÛú•Piîs^m Š&} ÔMü¹p…lèõzñç|IÉ9;”àbg$¥Éûrîܹ”””¬¬,¬Â…É" Ëj ‚ÞI´›()„ÞëV/Oã½sx 휓D"À‡BK$¡ ë\ªÑh(ç |gŠ:?ïÕ0 ÔWåÚ<}E£Ñ`Åx)Î` "5߸éçNIh—DŒæ?GYÏ ””Ã÷ !d¯Ê”»ÿh3ãííMu!F£b¯ÂÒÙ"Ûó§¢^\Rã>Lpˆ¢Ù’X&næ†,ž0AXˆx-®ÔÃ-þœ³ÉåbÁªÄó²cHš!G·˜ñî><ŒG‚’^…´Vn‚ãžxŒ)„}¨ÊËxà:¯µÅ0 ñßÏt‰}áa¼¶ÄX‰§§Âðx3^G€Çzð U>BìÅqÀ¿…ª P¹x¤,½ŒH SÜj«Ø9þåE x š¤Ó7ÚH°J&“éܹs |؃ÝÚœFdƒ")›ÓM°Rê‡$M<‚Cµ•Ër¹ÜÙÙ™ŒrÔ#‡‡“ñÆt(ˆ‰p³'Lˆáù¼j-oÏC\™TâC‚Uöƒ†'þÜHÖ^i›×ÂAd¤¹ÀÉüDú*®¨É$ŠtºâüÆÑ/§BpDò*“CúXÝ:»iÜ5Í›7饗.^¼¸oß¾ôôtÛ6Óû&ç½Îõ¿råÊ$øët:ªÁÕWWWooo!%±£\( ¯ {7\ \Š•bLO’†žü„=*q\©V1Ìú¨ýŽ#‡ðÿÍC™¹ƒ –4.ãÝ\PÀC⨀s•> R #Éäö  â9¡ÜæÃ‘y´Ò}@\$Å•‘ZÈ;ÑÁÚ†EÀ&rg!N>ÖSŽ…÷ÃׂÙIÈ8îÜ¢ÐGÄ[ÂÔ éD"4ð¤N.eÓö¡Ê-Bïà5D1¸»———‹‹K^^Â(l6[vv6´"¸0eU«Õ’æ*iG Ö#6¤N:Ï<óÌ©S§’““!Tñ”5sŸ&é—dzâÁÐhÀ<ÊÁ¢\¦Œ+ú O¸á™ÎàT žÛÒ¹ÃS†ùYæi³œ±ñú¿\Èà%s@$%!,§Ü¸Ž(ÌÒâ^hLó÷÷ïÝ»wÛ¶m5j”ššš““cUZ…\”ÈÕÕµFr¹üöíÛd`á²°‡‡‡ŸŸ_­ZµrrrnÞ¼IéÍkÈž§œö¼.½ã¹ÊýùüÈIrÁ´PÆ+¡ŠÀòˆ^Ä@£Sà…¼¯9©2(8„ 7ÈX‚˜ ¯Z5NF£Ñh\\\Ôjµ««+äOOO…BqöìÙ‚‚r;QÉ5OOÏÜÜÜììlÔÄä8†`\”„ùr׎"!!áÚµkÄ«x¨7Êj4gŸ}6+++!!AÒ¿<¼-hš ¤'!IƒîÈuVˆPÑÀKpmC­V ^u^©TÒŽÓ1ç¡ f³¹  ÀÕÕÍœ$Á#\}牃<–ºIÜ«–Sμ4Ï&qZàdgÌ–³eË–'NÜ»wïîÝ»V«Õ0ÜàÜÞÙ*þ¿íeFFFAA$_‰zžžžÎ‹òîÎDˆ‰@dƒçœ›§øYåq\Üœƒ¤fn“G—·¨‘Ôaä¦þf(7¼.ˆ·¤#E%và…{â?μm!à:j3KB¹ÎÇCx5jäãã“™™‰ÒœÜʇ@I5Fl%Dr^?Fâ†A(rïyoiî– ‰ðúͨ‚#Št(‡’!éð_yì2=‹òØh#†Áã~Áz6…$Ò€Tåˆ 4’A¦<ÚJo¤›É±êììì\«V-WW×´´4½^/Qm±bÁ¥Óé&éJ@÷ †¢º_ašKvvvvv6¦è>(4Jýì½måçYæ÷œ~=§{ºçUÒHÙ‹$,ƒã2`Œ Ø&k\!66؉‹5!ÉÆP$EÕ²•%»µ©Ýª$Ke¡v+ä…Ä’à-’[€m@`a¯_ð"‹2`[öHš‘GšÑhf4=ÓÝçœ~=Ýùp©úõ}TùHûÃé.¹§»Ïÿåyžû¾¯ûº¯ &};,/ä©»¹¹¹ðÝ#rw¦BÐÄìy;‚ïy«Ò®£‚É”›_¢8¶)õ¤—óBZ³GÎK”ÖçÚÔ—¦Öu}ë¿Ùºý•Û[ÜÚ{ÇÞì?™-í2 gñvvã±Øvqü5Í훌Dí<.ž|Ü3h¾5ÏW¶1µfäѬ_~²È768˸ì=8Ñr²ÛN@™’‚ïF£` ž·‡^ŒX¤û%%14 ¡HÛå¿páÂåË—ãšj:{ÎîÎy U¬—–‹§"Ñï–+áiµœS¹6ð7ƒ–¹ßãÇ?~|yyyee%ÕX®'ðZ 6ò¡<í‰öz½^¯wÏ=÷\¿~}ee¥ôÕzè¡7¼á .\øüç?ßï÷Íûj‡õ‰”f—q±m~â‰'Š'Y—á5Äæ¤€oS…§[æ0ï¹4wbHéHM,Ûê‘;S9Ì€H]"Ò |%j÷5Y·qyÄ1Á›T9Go8F}¸ f3S¿>Õ>Ö6þáÆÖ[{û{s™›ùÇ3íbu^Ô±ðd%óÃáDÌ=ä"ÆœjÃ#ŠYßèN‚tg7ZU¦Ü³²é·ç E>‡ä ïÞ¥¥¥Øo.™ÐŒÝ¯d޳Ñh´°°`sbŽfŽ?TL[ ce‘”‚É™c 0j†=¶³‡ØÌíÀàä©§žroŸ¶¹Û9¤‡ìp,Nó„¨xÙ2‚ÿøbå±Djzkgý0RãHPºýPswÑ”3š—J×¢>yø ç¤wíy:ÏtP$sÜšžž>qâÄ©S§ÂKPŒ|™G‚¦æQdõ景¬¬t»ÝcÇŽÝyç[[[ý~į÷ïÿþïë[ßúè£>ùä“¥UF&pŽ%|lÖž»#ðÛ <¿Bƒ¤IõÒnLãx²IwöâcmÃ$òãr²’´¿ÏÜL‘Õ·Áå Mraj,þZ;¹Ìå|CôrØê™\Ixñ›+»óƒùù¿;fý‹[zêÐ|Œ¶¦1­’¥ï&¹˜ë‰IÊ0Ô ÆB+› P õí°xÁp8„çê>–3Jý˜$êÚ&›Ç#8j)‰Š•éΩœì¨–“7ó…ªø4IJèAXF‘2ƒÀ„1Cÿà“v Î+°¤þ/7’ŠÆY<Ù@¡0Z 3ÞפF !-—̵1.h‡^ 0Â)ã\I3üHø?~üøwÜ133/.é³[;'Nœ¸ãŽ;÷ööbt†WEnp0t»Ý³gÏ^½z5扭­­¿ø‹¿è÷û_úÒ—nܸAq6®÷ÃJÈ•SØÙ")—Wšs;k1 öOâHmÑäï—êqN§Pn¼y|»\¶‚JS ÂÕ4ñÒ«Å­‡šÃG'óhšä µP]&!çhB'§ÕôÁWöƒUØ¢¦Ïº'ï:ÝbïeP±mYhæ«'{øWýžö2Vc5¶v0Ê‚C Úã)Ôã¤xnxo:(F¨ +Ú° Å„UX€"‹›x4©øRJ¢Â’“"¯ÉB¹ü õ%ø´·ÆXQ~#z¥Ç`IžvÊYoŒ¦ŠyJP?\…Û Ü6µàoà6 v¼ä\ptíx8Œâ—Ó<ým®–£0€S§N¥ÊL•ǞDz´´ôÊW¾òܹsÃáðìÙ³ý~?œº"„d@·Û=qâU~ˆ[»»»_þò—ÏŸ?¿¶¶F_Ê!Çù>Í’©žq)RLžá‡ùIÖœ¬»Yù'$ !U{¥Aèpubb™éþd?ùÜ&6 ˆUYñ:…— o¼Ù'N,//ß¾}û¨ü &!çCƒVüòòòÒÒRZÍæ;z †&GY¹‡H( œ€›fº<žrªïÞ2Ô‰ˆg8`øxs2Vin‰ž[‹¶®2zã1~ë:;ÜÚÆƒ¦À€8eI·û±`z&w¸‹^h{lTf¸!w-,,ѳ±ƒ½Ý9 ½Âªcéþ=$(N`ºƒ‘z¶ ©7Kl­­¬+^WÙEóö=‡o?JóMø#E¹µV¼^XX8vìØüü<ÖD\Øüü|Š›sçÎe4íU¯zÕ3ÏÈ€˜¨eS¸ðrüè~AD €ÜÂÂÂÜŠD5²þùùù{ï½÷îo½ûÒw^zß+ß·ÚY]ÿàúîÎngØÙî¿æç^³ÔYÚ½¶[ÖÖDQÛ„‚Ñ„Ž‚2äÜ‹E›*ýÖmN]Ó•ôL4)¦C‚k>§ª¶é¤oäQM,†"ˆšé§f1~M– bäy‰–Ô3Ça|ÒÓ2O×®][__‡G5š3 9Íï™aVóîîn¢¯Ÿvú…wîÜü÷Ì?òöG¾oæû>ÒùÈ/µ_zfî™ÑôhùkËg~ûÌïÿƒßßrÿÌGÎôú½^¯Gê³¹¹ÙëõÂaÉKÉõ'Í'¢X€™2Ô´`C¬áø‹oüÅî|ôÔÞ©4ÿÞ¿ùþïÝÿÞ­­­Ÿ}ÍÏî}ËÞwý·ßõø�?õSkkk©Ð¥?´´´tãÆ’-y>ÿe焬D`f‰ Ó`„[ªp~‹¤Ío§dv žzi‡Q‹ƒN!> ‹z͘uíë/¢m.— ¢ìY爅½ÝÛýÍMÌ ^zg#ñ)@™ŒFa·Û=}ú´Õ—©L‰)¯q¾lŒv0o(W¤tç. 㺓\ælìS@ŸÉ4'ë“úŽÚaebËJZ5 V»œ .³ó3èç+1ÑÓVŒF½¹}’ÇàEÌÓ”ÙÉü<†AilUÿHHÀÇåøñãgΜÁQÛYÚep4èÜ”§ì|êE³E<‡ašF·Û¥Ú3éhü±»Õ±4×Üï÷oÞ¼ékB—Ç­Àš@Ìòó•H‰³¸¸ˆÖNÞãâââ‰'¾ù›¿ùñïxüÇüÄì‰ÏÏ|þøÞñoÙû–8|¨ó¡çþös÷=pß7}ý›:÷v¦¾åE|бcÇò©–ðטŸŸ‡žUMËœŽ¢M`¼Ôg+›ËNn.©=“=mé R¶j‡Õž<¬êÉ@ˆÒ1-ájüåÚ Ü{*¥OÞÈ-³¨64œLLªœ#.tl›h¿ :ùnGyWOá™þ„߉£—ÿ²=Ùèg–˸q$¢èn*€„؃2[«ŽÁÊÍ÷AcÓ2ž6Ž3Øÿø¨‚ÿ0ÕÄ¥²Á`…jÀÞ8ÇJªÜ÷SÖ7] ‡c+ˆ@ÕË€9\:éêâââ›ßüæÅÅÅÏ|æ3Ðsi?KÌŒ=†b³Î\ç# G—ðbK€ÉÃ)Ô;¯R»?¸:·1ÔsJ¹ä´” Dô¼ô;ï¼óî»ïæà>vìØâââÉ“'ï»ï¾W¾ò•{ì-í-Qçrçroªwzÿt3¯Ÿ~ýú½ëï{ÿûžøÒ¿þ-¿þàß~ð®o¾+ªÓÓÓý~?þ.`ƒ}ÅzÜ¥?L´‘<@H Ž¤Qš‚~/‹~']Uô–$ÖØ&vSçØd ‘ÐCÙgxÎD5ÜŒlÌC-åW_ü|y2Àõèý“0ä WжRGxÒNBN#Ç’÷Ê œK& 32iEéòÒåv‘‘­ev•F~tû qd³…ÞʉSõd¯Éß³ú9m‰H$p³¾…Hc¶X“bÏ%£¡B—ó^ëV£Ï™ñÔd“‹b@‹‚ ùl!äœ9M,\MðKÁ`ÛD»gžyfnnn8r–&së8ï"7¿ÂÓ.Ìëřƌü&3‹²Ìðš/}~û‰Hrb†â .“ajŽ­ÙÙÙ^¯#aaa¡Ûíæ_———gffŽ?Þív—––‚‰ø·^ÿ·>}ß§ßÔÞôÚý×>Ùž|vúÙWî½rzzú‘ÙG|öÁÏ|ò3Ÿ_ÿü37žÙxæù™­­­Á`Ðï÷gffƒA¯×ë÷ûW¯^½}û67÷uæÌ™ÑhtãÆ C–S³—[Ï©ÊRyØëÑ…xbV1MAO.ÛRÏe¥¹ ”Jé÷¤€Å4Ý;…ãyP(g°h¢ †ÿ8ÚíahŸÖŸ„œ£§J³ itS[¸¬vû'àÍg§ù°¹L²ä€vóÆ ö9I3â°±±±¾¾VÀð6‡ÉÙI*#«œc: ‰v –U:@P?­·AR _0nªhp¡¶bgÆ¢ÿoz›{`Ö Xlf€èXxˆ„ÏuEÈÌWÀ O‰—ák„d 7œ‘Œc3ß¾}õå俥…æ9V¯\•ý8L)š1Ý"¦ú2„ i.=WÊ8ö¶P &+ *þ7m˜«YùHŠ-..&8Y®ØlZÞrGÃ}XΔ)q`Ö1?tùòåçŸ~}}Ý‹‡£Ù˜'/Ù&(¹IÆO,Ñ^2Ç™ÕÔÜí`b:‘ã¹çžû«¿ú«ŸYú™÷¼õ=oš}ÓOv~òï/üýu>ÔZûÞ¯}ïÂ3 ¿ñ¿qú+§_ý‘Woïm—Á~•ålkíöíÛÂ1«‚2ÚÉA^\ÚÖ%âÕ„|œ°—'“#‡%^JÉ`Ùð‚òײV·û8${KHàÀËp«y³Åµ½Pö-غnM[rÓÀÑ㔿IÈ9Ê/–‚{‰…°è™2«A$x.Ú6Å:žÁšœD¤É–ÂÍ%­¯¯Ÿ?þÊ•+`MP¹\PM{êD”À2wÜqG†À$x¾þ›é7Ôy’õ «õWÀ¯ŒÒ cÅC¶ÂãdîÃঢ#`ë6˜Üy;©QÀÊW¸;N‘2¦GªØ$M”í,\õòljÇü+3L9zJ?‰ˆë€GE’(†ðÙd¶–ÈÁGšïFZ¦—677C ûˆ¹E4RS÷¡UÈúÛÛÛ‹‹‹¶`ÈûZ__D6??ÿ s¿pík?wöçfvfî¹qÏúúú¿Ýú·ŸûîÏ}ÛOÛ\gns{=:¿‚0´­ó .ÅÎŽÁ&/!_§¹Ëyeiïgýß¾}{}}=š£2OŽŽk#2•bZÑFÂÛaÑk@-HÒÔs¼}ä6&ùìNŒ)l(Hp‘–›WšŸ„œ#ûr.âÁTGÇìÒ2ÐSšŠMþЄ4†<Ì$qé½³³sñâÅçž{n8æÀŽídp3Ë™˜Ûnð[ßúÖ×¾öµûØÇ{ì1ã9ÆYîîÐ6ùÆ›@?<ža4!ž*É٠Ꞣu‰ÀÍK88sÁ£lUW2îÈÔb‹Nj+29„jØkD¸BNµìÊÍù­Ð KÙü4ò˜¸ô½-åÂya¤Ñ l…y8N0†¤œnx¯‘Öpă»¶Ö‚°A‹¬j¢u·Û][[{æ™gÜxðÃSÞÜÜüØÇ>öøã¯¬¬ìììÜÚ¸µÛ5ê ÎÇ ‡Ã8 X¯Øœ, TB½:«B䑺ÕפiÄAÍ ‡&­ð¯¼q†vËĆ  iˆ_iöÀý±§‰«dd2J3Õ4Z6÷> 9G¬E}/^yI-¡f–®&«9]ÈZ’ð=Wì=sªBxk‡ç%©WÚá)3*ªíííË—/OMM­¬¬ðAí°ö(È%œlvÂøŽ{±Ø¾Å]Vwœ­ûD¶tŒ“tröâAGµáÞOÓ¤*(­]è­îý67©'=DÔ‡—‰y&½^ú•b±H:F1Ó§ ܶ¢umÙüB0cÏ&½o¼ns1ý~ü§è°9&öçï§*2zCÄâ"×ÖÖž|òÉÍÍÍ{î¹g}}ýâÅ‹W®\±~P]Cw4YÆØ˜Ó›Î9‡0Šëèbúeâ&»âÚ(–î¬õ,Úôl©«yV"Ĥb$šËíXÔŠ' Ç¿b¸@ÃÏCÊÆ !+Ú}nrޏc9NKñç_#Ù½G/_b‰¥jñyc?$1äšÜ>räá|N@¢ÃÒ@šF…„É£Æ?ÿó?ôÑGé:dÆÐйÙ-î ÐEO)3??Ÿ±$zÙ KKK÷Þ{ï /¼pûöm«k禰,ƒ–íлs×ÎÔÌÔþÞþè¹ÑÞÖ^¨>¶#–s=IVµG`y4oQ ,GŽ´ëm[`S¾òÍ·;ƒñI ww,š Šg²¸¯ÂNdu¹¿d†žŠÙz) Ò Ëâ ›ûR•PžFNK²·ÃÚ”2ekåø06b¼ÓIûÓäî’jXƒÙ I;lzmTj % ®9|"`~zÉ8}JzÔ‰”?·™¡Ë”n×qòôÊd‰k ˆ 8G ÙR†f4•³´vºÝn‚ «™¼µµ•É>žÜ¤ÿ”ÿÎUí|ÛN{WÛßÞ?öŸÛÛÝÛÝÝÝù±ýïÞß_ÞŸýƒY›¶YÓÚÐb!=[pž£ *”©kVAƒ¢Kø'!™´1OøÝÝÝ…ý~ßñÏ£žä0F »7KÈÁØÒ|M¢;ðX*”æe¶ŒHzËl¬[÷¼e3k9Uéô@|ØÜÜ\\\,kƒs|kkk}}ýرc9Ù©u²~rI³gffb«òÈs0§ ÖÍ(À¯5 ù¿ž]cÔU¾g_hY½ìd7)˯¸c”1)o+QÁ0ʱó9'‹ŒÊÂ{‚GLaó´Ã$ä|£DÒÿ§%ßÙÛÛ‡œJ>²ÎŠö¸%•ÈôÍS,pн=² Á1MÁÙè$ah©àðbðÒqvŸï$¸¨aR: ì §………~¿oi¸§d;¯ÛéÜìÌýos£ö¢ahç_uvÿÝýíwþðßÏáŠçÆ9‹Ê€³oË ÷ӹ嗳 &UjÓMËÙùyÎKKK÷ßÿÚÚÚÅ‹›TbÉ3¬MndÃG$Ñ¢´`(@ßç‚ݸ.¯žQy7]hwñú ©±¨RòœËPaÆ6{½^x´{½^SSSÃá0L‰Í¹¼¥ç³VWWƒ2¦^iAåÑåã,¦iTœ„ÉBË·y FA=ád—©&ujžÿ‹#5(1ŒW@(Ã\•öžEM®3}ßù¬Ñ`˜üM£"/âcž6;0il8¡òî :1‰jžþyRo×ãF]pdšÇì~³•¼²ÉÔ¾%$øÜá°È^B…‰Ö®2ûíÀ¨ƒÎµ”™»Fœ9’L j¾a® ©À¯¢æ¹»»‹§¤e­‰î³³³»÷ïî½ioê×§F£Ñk^óšw¾ó=ôÐÌÌÌÜWçÚ—ÛÖ°Uh.œ„ZŽKÕ%¼†› Ü{7ÛJ>""`yÔж··777/]ºôüóÏ›àçBÆü8ˆ¼þe]ŠS;æœWõÄÌ9Ä .ð=gâø„Byã¦vù­< ¬üoèÑXcmŒF£~¿?=¾uëÒúÑ*¥4dÌ+øAú=ްo<+f>¤ç¥ÉüèÊÜȘב>ׂ>4‚½ì¿3^&Û8ÍÙ}Ž\Žó^R²)m‡rZ-;N‡™Ù¥!T>(Y²ÝîKcrRåÁ(Ss(FÑ gÉΨ£‘îç;$wf›²bnt‘Âe&Y¤ßrâpãÓ^t˳ø¢DàšÀJ<ü2>è °…˜Ëq‘çk&§Îš‡ÅRÖ‹'ÈÞÎþÌþôÎô‰Ó'Þóž÷¼ýíoôÑGåW~åÊ•+Q§³Ð¡«Á i¦g€Qž.,8 njœêέ™â®A7dÔ.ξL•ÀC^\Qé´Y ØÊuôè'%KHÙšhDyÚd‹GèPÊ áCÛc´)KHS@l“šôåÖ­[бŸéþþ~ÆápøôÓO¯®®æ ÝЂî•?€h}}=a•NTõ„“<–3Þ[kR!™ÂƒŸË`F@•¦óˆ%®ù ž?e¾›ÓÃÒÐ,Êiš(|<ª{¿¢ áÞpZ­ÖwšB¡ÏtC±ÉÄÏÄñ Iúèk†M¨q¢òÒ@ÿåœjR0s7Ûš,w×ɧR²°t`¯ÑjFº…fƒÑ¦l[Ã\§•©ˆ"M#ýì‡\j¯×³À­±õbóž]´ÔîEøâ¥ÙÎêêêÓO?}åÊ•“ñN›šš:sæÌÌÌ̳Ï>Ë>$_+ª9ã:¤¾'­†y\¤w8‘ÝB 3ãÖÈŒ¡yþ I:}uÂ!×üV¯×KoŒ{$øy~¨¤AÎ*Úaµ:«?˜À]º…aOag¹{ÇHóåR”ìììœ;w. Ì6 ¼Á`póæÍ„Ãø`³¥Ù¶´´´»»{ãÆ¶Ý³Á—“n I’_e>²ŒGhm¼d®0ã/îÏYYŽ•×Ä¢ò!€øåz4¹EBH0‡tí0F\tAOSÙ}S}"±ìÝõñBJ€ÏyUZM“s4!‡D©Lnú F@yuâ@%QÚ3Î;2þM³¡È4måb(h>˜;S#®åËPH±óñ¬Y£…c"‡©èÓã—ÉÑ Zå‰WÚQ/ö«ž™î|©³õέ•?\ùèG?úùÏþÚµk7oÞœ~Íôö}Ûsÿë\·ÛeΔc×@ºLÅnllUçy2•iÝø&[Ldzœb9OËTQv´nR°…Åò‚|+éHÓpñÑA)!Äß1c‚@ˆ1§ª«7ØV9¾Ñ¨) ¤Ô4›››«««ËË˸fà™¦N*3Þ ½|R²gæuu•Œj„æ<£ÊYwÙ#M€œ µdçgä„¢4ó E%.;SoÙMŽLÂýTð¤]í“û΃Ÿ$Fˆ?5Í8·ÃöØMc§@,–¦v̶åÇ$äÙWŽò™™™(2qÜw[Þ(dDjŽ]|àIióÃã½Y^î^X­9ë5}~€5¬‰U\^iüššœ…kjðŽ'ÞNEmŒ# fZ~Ù·œí°Znd{{»³Ýé<ÛÙ»ooç•;‘ÛÝÝÝ?·¿÷ª½¶ÑöžÝ{nñ9ð£üž*·‰œµèR%yP8Ž*¨½(íóZIŠÝÉß ¼^†ïx_Øaœœ±˜,Œ&u6ÍhŽ3ÓˆÔ‘iãCQ±¼X^ ¬»Õx˜œ¹t×ý¶··¯]»¶½½½´´„ÅNžÏææf´8ùB ¹v@„ãÌ¿w žíƒp‹‡y¸,<~ÝòqÐâIM\šýOâRLªü¨Ë!yãV0ÛívCÏýΤÔ#¥ã:SóÔµ#µAò¹ð8/¡˜F…–ÝQ¸þ<®$“sô%ާO7ŠRï}~™¯Ìß™ššZXX@1—«Œ^6M27ÍR+à¦ÓÄÖP@ðÅãçÄÙ˜ '3ç…¯éMȲN<.‡æ3lQRZ6¿Å¬ip¬ÓéÌl~çÇv¶ÿéöÞïïMw¦[k{oÛÛ»¹7û_ÏîOíg6¸h5nRfûãYï™®A¡¦Q>¿_;øœmÜÛ›rÍ´ËzåÙ ’Å“sßÁ-ÑÜY§·f,·Ã±Î½#ïæy#bUÎPSÃi§[C̃~ûûûÓÿ×t÷ÿìnÿôöhz4==ÝýgÝÎõN›;$ßbCjšT“ èƒ)Ùd«Õq,ß™CÖ®w9+“–R^øI6™Y°„Ì\wc,®ÀT¨0YŒð”&_ º¤í¤ÆžVáSº¡Xš÷kÖì¢ÄB׃hšŸIîââbDœ<¥äJâI¿ß_[[ˉozU^«ùiVžå\FÔ]F*QZtÄl¤f‹·&tš¬„Šæ"œho$<xƒæ”R\&ÊšTbh汜'•A.׈6æ¹g ç’ Ä-3a¬ýä Oãìv°·Û`†ï¶@€Õé©£±Tòљ¨ÉߺD/ºð ¨~<‡‘C"%¿ÈІ¹LZ¸·B½69•~Œ/C)¨£IPÓÓÓSÿó¡„šQD:6‘ÀV»Ø¥H´‘uÒÀ'8•i6k!@’[¬C Ù`lhÇ“ãœðà½Üºu 7ñ'N ƒÁ`€xAd5"LàF7–Ø¥ðòœÓj“‘õ©üz4x`*ZAƒÚø6«|Õvìkz“ly›Ž{”‡‹!æÙ»ËeÓTË#bjÛ‚PæJuî±*¢×ÒÒÒ;ÞñŽÅÅÅüã/¼ðÂËÊHNBÎQL'IØÕy%h†Qæ2Z\ìžÜ´ã™g?Ë󯯆=mAXЀvX‡A¢fac&²ÔGù~Ú¼ôxHºÇ˜l€Ñðº6¨åA9ïU:Ø9ÜË%¤IF'é_—ÎÊÙŸNKÇ“÷¤2—àQ_À‡``q4Ÿ-œE}L¦ŒXÁÁ¬­Ùdà IDAT?Ìj£R$&Á|@ražöo‡ ÁÌJ°Ë'¢p‘ Rgdµ°¿ÜktýšÆgÞ#KÎñÑh”xó /ð´qÇ 3ðk Áº¥¨Œ{lÁ4ªgiô’Ë-g!ÑÇBÓ³´'ÕüÁ®Áyà¹ævØ÷ÚƒDqrmHëa-»ïxÖ–¬%žaÀUr,D³ø;ÛÛÛW®\Y\\4Wûh¿&!糞ú ض“ÂsÖ#N쪜®õb‹ðxÈ<@Uî¾XùœàgB3¥ŒõÜŠ6CøÆ¾ÉþTÜsÊÍ2OêÒ(` ëÿgÿ˜ïàá¤zrF$>%v† fšâ˜b¹Ü&}bdö‰s¶‚CŽÃ2ñ¤¨fâؤàãIOk(:3žÉéOÞJzaüp\¢É"–SÆ º|¨iKyÏÐU†[(”æ/Ñu3û#¯‰3šú ¨Èª“FøùA#k¾…øÇج稾±p@±±`»q²£sHF•‹/ÅiŸ‡ÿ]é¶µ\ð7hÓ6#H7ΩeJ B¸ EÁÝÍZ#¥ä[¹x¦‹ÆoŸ,\h±ù¸Ä®$rø¶%ð?öØcÓÓÓP%©NBÎQ:eÁƒœ=g6¨mƒÄdÄeL¯œÀ²™ŠhÒÑñÀP& à4™!º.¶ëê €Ž†3¥†i<”l Ÿ‰àu¶Ÿ"èr¶â)ÂAÆ–£4±Ö º,6¥NO¤Ž¶3Ý"h¶aòf¥“Òl3êâ—ëA÷¢ä1^÷ÏJ9E/Uoì‰ ½…|ºývºCú“÷ÎøºH¥]çšÆýE؆ÄoŽ#AkÞJ“¥!°ý,`I@Ü·V& ¾T“.hHtìô W>‹R%(–=jͰ¥¡ø=Ö͆¥ÏÁu‚à¹õ®7âêâ›ðl§y£âÔôž£ŸÈ±ž‚×/… V>ÛõhN'4¾¬Cñ$äAÈ1Þ’Ü6€9KñžâÎâîõzv\/úÄ$§|LóY^Oœ¼0Dì²¾•?”]a)O×1&ää¿“3"ÜË&Ï-ÓІ]]ØÌÓs‘FV-^Ò„0›faa!£6tt‹n±9KI¨-d‰äOÀ»Â؇«GvzÔÃÕ$E0åiÀ î†z¡hÇG'D°2€;=™âD¦«D¶áÞ2h˜§UÆ. o“V»[šé—zÔ*)¶B÷{§)¿€¹€­¬á¿°SÈÕìyƒ¹x&RŒK/f÷Jé–:¹I¡˜Í½*1Ý Ÿ¥î,dÿð—ÉG/+EÁ5”ï›ÛF*ÉÇ»_D 0ᶺ„÷£Ëw[MBÎk6ÚK•Z†™ËÌù縻ʬ?`"ö wätpdì§7k‘ê›lEëpp=ÆÍ™‚dœò«ÛíÑ» d\Ù„1v‚×±­Õ(& ï¢Ã_šCèw1.@Êœ­Òï÷)Ügæ±ûÄ\™b4Ï'Ýê$›ñé´ñ- Â«‡¶V´IòGЉqmáÅ“‰}ÏN±H6á¼beƈ⸠ež}§B¬²e8‚g2$`Nn6 4çO Qž&N)c¾ë§"‚¹‘ΔOá[2šxÜÄq¢;†@< V§Rò³9»í*äÖcÒˆ„¥t4{½^“°\>âd&‰dÑ’!R"Ñ=÷ÂèB‚·yq ´¥tƒÊÝ"5Y.ØRŒ1™ÇIÈù›þr:`åJ–88ðNIêãUM Ýf) +Κpã¾à³Y«w+Øb®‡€ÂÆ5 ¬ëNÆÞ‹í`œÐÛžö’{ût,ùƒôH¸±e1‰èžU¢…F ²RM»âÏë”?¥ ¢±è&ùãÕÓ/ëÁŒ•À¬Uá}팢óm„ÀÅ™‰v™¨]__§Ú›7¢—ù r…$‘–Q`©[þÜ•Ö$äe¼á0²f0óvUÊFŠªVóNœ eYvÂð¬4qaJ&bvVÉ;RŘÀ玙šô Šb¯×KúFÜ¢‹F‹Þ'iQèâˆ!ë$Š´ÃÊ…ý<ÞK§eꊤXP›ÆÆ!bp¦IÅŽ¼ÕÌ7õõÏüä²e½–Я¤'Ÿï'M§›ÑàT£¸ü)\@&Ñ 34d¶´ýs;<@BNx>… äÚà«PKò‰¼bj»2f{üøñw¾ówß}÷'>ñ‰ÇÜ^éöňN“#ÙFÚŽ¬^ãÌ>mQŽ ý:uêÔþþþêêj6,B5œÅ øåØû®Øç¿S“™}ËÑó–¨i/§Rȸ› –•_Ф<%ƒ{Ð/™ðe¼)_›››~û“sdÀpXfQÎç íõzÙ¢^ÙnœÈ˃oÅòÜÆ´+bŒicnäpß›eÐÇi8@œ…œ†9ñ›†ØýüsË0=ÚÉ­õ@Ž2a×–Ïžö6$HX|ÃÃ81Æ»z -ú™4M¹'Þ´ÃÊÖæCçmÍPúvEßÏ2¹ßœ§0r˜ò¡Æ1k¡¸dj¬)`‘ç+y8Vèp­x t¿²"ô@µ A‘e` Œ†M–G¿h²ïtÃ2‡>>~8yüHÀ­{X0¼#»ò<Ù5~G1ò°’ëT‘hÔ"/Bb”lUo»nû½OBÎ3À:XŽœ2aÎ쌒§Ê¶‹-J_í@l$ÚølQtuEl’3°h —þÞÞ^ð:S÷ÌÊc.É’¹¹¹»ï¾{ÿúõë©Ûˆd6÷ÅÏÃÉ&¡Å&¸!.Þ­ $Û˜ˆ¯ï…þ¿*Q)q8#Jaðªœ>à`:!G g™Îò̉¦(i’{ M—,‚À(p0 <ÃK±bntQ€õ|­rëþE  @ü u¦ïsfÝ&ö>øŠ33›¬(OÈ’„õûý?ù“?™][[ƒS–ånJ1pÒ³µµ.íhQ$Y ºR¬­­Ùf­H°˜ÉB¼·8åsûÎ-‹Ø6B,6j£¾q†]v¬Çãô×\ó‰`ôq³æ×Œo™IÈ9šxãÝÅùÎQÌÁ¦Åg$ ϲK>hޱvDÔðÈÓÃÿžNj*—¹~˜x&º3,Ÿ'ãA¶c)y›2IÄ¢Xàæäª4ÏqÈ+°5i&Ä `¤$éœ,®¶ùf Ü[櫸E‡›ŒÛÈ^I¿<ôšÙ&‹M4Y(%¡Þ5??ÏOBÌß\YY±z&^QÔ§×è?¯¤+þRÅÙ= >‚ÿ¨¡{2ºÌ@q5ÖZ‡´Tg´1‡CÓA¨*6°>aÊ‘òéîòb¯ÛÈ/®¨(ðð•L”¤¿Hk¦“bðgÓÀ̇b e‚#0=Í7~Qµ1™Õœ]J RãÀœSØßzùz42ÇVÄU·AÜ}ü‰œÅ6_ {ÌG³$® ÏTJ>"R AÚÍXCžœϱ?£© o–Þ± 3½b»©’rnoo‡C畈ÜÀYÈ ‡¥n(5¡xÍßäw‚ÌjÉ/Rû:ͽXâ !·@€=éåiæææ ~ì.¤/·scá°Á°’ÇDrV"ŠÃbf‘g¸„«Í¦ ß䔯†Ýž‰5)¹Ý`)A“Ø8¤q„ëÇpæ’ZÛ¿ É5)Ò’!¥kE˜ŽýX*Å¢ÚIÀ¶ygv}vq'H‹É2­•g©Pæ\$q’€OBÎQ~Ao5Œ æ¹íÓAùéôÐÅ% ·î²eC‹4K‡‘( %l]³ã êa—Y ¶z;”F‚ÌÝoÆñ̆"w¢lc6¡7Ii’ÓnñÜ_;¬TOkÔØe%¬5‘qhÈ'vO ¥h†¼Aë”Ð|‡éx‘\¤à«á;Pb–sÙãJ¼ÐȪ&f™ý&§‰ ®™âÉ:=|ñèÌ]4”䈉Wú=hF´Ã†˜EÙÖ¤>&{¸f4&P²`•"Þá0;Ü^…Èëà]Ô§¼V­Çc-8JRwjMª6PÉ~1Íݲr†©é®¹á_j‹ãŸˆ‘‰[Eƒ~žG—Œ°y ¶–dä Ûò.o60F™`„œ#Ö ¾ÏJµÇ”Q/ÖbQ^2m†bÅ=m†ÇçÀ 9V;v!ÌÊéòBé$pëÞšÓ ¢ÎÇ×®j¸.l3P&—@¹IýgDg‹-)~À¢2Æ0ø'³g’§'WðUÙïÄžãÆT(ÅþN;<ŸkA³‰¹#|ešæm ™›<–²ÅÈ}\ÄÃàÒkÌ“¶. *™Ul— ÎÛt#ݪ²…Þâ ¦HP^ØÆÂÐ\¨É™•öˆÙ3-vJt1JÇÔÐËkx'xƒ=Zânžíè±› *àÈj:&4"<ØO”ð0Ò»eX Ó¡C©õyS{ÄÌAìÄ`-n'!ç(IÒSIÑS±T™ŽÃC“€ãxÏþf R,}Wèîmj· ©§”-cL ÈKÓêô¸>RçˆO{JŸþÍ8< l…I.0Öä¶§V“|¡½³@lœ³sF˜=?ÇdŠ&k#!³³³i•r¿Ó¦É!h\ñé6ìBÐìÿ§·d!N ’(脚áwçl`­hàóMûô@yÊõ£¸cyVÓ™Šôµo‹8¸Y•÷BãÇR”{xqŒ¾ãC:33³°°@s.‰ùô¾ý g´ôX')¸)=Ûa)6»k§½Áž )¦Úa÷[›âØÌIò‡oÊvMù &R{ÙÀ AÎPŒI,Ësù&tQzVÚÒãM²ë“sdœHqx’€>00šûÖ×3´JUß H8Öäg¬eN5_IúØ x­S=U¥-OAøÝÝÝÑþhê;¦6¿osãÝûûûÓ§ýʱхÑô괹ݥ²iÒÊ-­¦ì@„„AÙ·ùfÀz|<-Ú˜³5#œ(‰å‚-íLn›óš7Ø$Ð@9e)Ùt¯×ã dœ³ŒÐzˆ» àád=œ:uêþûï¿}ûö¥K—ƒA.u8â[Áp«½´Ýòåˆá¿9§Ü»öt'>J3M:✼ ùMóž†þ Úäigzœ|B ߤôôœ?ôe¸R¼ë°c¼´š,VY`¦)z2ºìb7´Š]m9H:ZeÀ#{{'û×a°Z¦6l,7ç»=lo‡•¢Œ‡Cai è–LLÙ„ŒáѶ“óRÈ1€Î»¤2@šƒ¤z‰GÒ²R3±_?¬Í ÇŒ$³Éø§€C‘ƒ~Éìó¸Â?~Ê¿õFG£ÑÎïì½}¯÷g½“ï9¹³³³sßNÿ§úíb›ÿõùΠZB¦o™, iÏ`æ‹2Èøû¨àžgÇ?\ÙØÆ1Íí°fÉOMèð¨Š!l›Í>Ït:½1Ïá{VÔÒœ9Ž?þ?ðïz×»ž~úéßþíßþÊW¾BÖïwCÚèknÊk`†þcþ)•˜ûµÃ²ÐFœ@ qs(ö ¾ÍoúïXßõ¦¸ (ËN âê”…3ü+V [XXðÎ2Ç,‘Œ68A×TOVÄ<¸þ¨¿Ó›4k™ hÖù_Ty 2oA2·ÔÆüaÒs6é¼éA;ý%…͘~§õ"óF™s2²: 9G¯^;0›pÃG˜G8Úa‡ ×¶n¶+e‹zy14Y(Á |;ìÖc0]Ù8†ë —,·0üéáÿÞ³³³™ÎÔÔT÷ÙîÌÏÍÜúŸn;bvæéPoƒHØzškGJk7ªõõu›šP~áÆî7??’½ü|ÙÛé P,¢ÃæQ :@›^XX°ïb´48Umˆâ>SQôAñèôéÓozÓ›^÷º×:uêÑGýÚ×¾f“j¯¤†õ€UÓ~hòZ¶¯ŒEŒz½$1Ç RÝü7`¼…?e™H`¢¼ ¤HÇ% <$ëM€¯ Ed“2æOž‰¡, ®R¢©ÞÖv‚¹`HÓM>Î+Ù)sÞ —²8 !ZíÆôJ ,[˜ÜSÒ>Fè¤8‹ò–[kóóó9vRU›ÀV¼ûÀQ'!ç(ƒ ˺T÷)PΞ={õêÕ š9/z½ž{wLwŽÖ$«C&bö”‹LÐ0hÝY±x> >Ë}Ú0©®_¿žÌÌt†ÿÕðØ??ÖétN:uêÔ©~¿¿²²2–~aiý¯ŸùÏÏ8..È4™<ÑFX…çõÒËq-b©`ó…ÕtÚÈ-iÅ“]º³Èf§Q&ŸÐ|ã0rNÌËë~YUÐÝÝÝÛ·oñ‹_e±ö˜>øB½Æ¨ Bº†áßÇÉE€–AòˆI²tÌçô½ä?Nfë!—ü&ã;æ2.ݤâÑÆ,…’u`uÚü7›0×™Bßß!û¡CV&æççC§æú×ÖÖh¶YÀÛŠ#ôg›„œCÀšùˆö&‰³žÝs©<)⤆%…²ùoȸ9ãk3''b{8gq'@ÀE:ç®uò¡ùß86¾˜ÜÝ»7÷ÇsgÏžý‘ù‘·¼å-.\øÕ_ýÕ«W¯¶ËmtïÈ”$#cãÃFþ&ú(|z"œ=Tr^¤€‚ îñrn¦Ý “AEhHˆXáÔk5—DßâG`9Ó®¼· úQKeðînݺõ;¿ó;Ÿþô§‡Ãáµk×È0r¶Ò1rÛB.bLWO9õX?ã”Ë,N&+ÁýÛ’1[*-}zöžl :;%%²³rgä ˆåxt#–çÔwYæ¯< EÌfUµ² †iKsFÇÍ|ÑSÕÆ®Áå9˜á¾3¢Ü g®Š|ˆc!ÿT´šà˱ óÓ…²z:Cù_óiq¢sfvå$ä%Iš“šTÈRf7nÜ`­›­¨ *T”I3’ëígš5=L³°èx›åõmkzNÏ0ž­sƒª[®ÍŒX†N:uâĉååå—Z—m¿ð­­Rô#T³nrš€xp’®H€ã,$jv¬Ö`˜ÃfhnÚOºÌôxâÕÞhÜ{J;î¸cww÷úõëYcfj1VìÆIø@‹1 ‘ؤgþxD?DdKù-î‚­TÏðHÅE²x~1üj wþ —±À^RR!`ˆC [Pí°Ë3æî9ùs ¡楠æ`ã#„[[[qÔ…Ë}œClr¾!FsBÔa ËÀ.+ÕS 7¶h,sa®»ÁL,Òì™AªuH)øàP¶«`añ1Aß›œˆDþ%ëÌ­¿ýÆãSŸúÔ•+W.\¸pýúõN§3ü±áòo.Ã.CÀUÛpvXHV±Ý!áã?Úú²§Ûò3¨ðÇç=Cgtl‡‚¡oE†ærÁéBûŸLËK1}ÁDBKt¸›Üq<a3ÆÚª»ÉDߥö²,õ¥gMì±Ô$È{'Åö/²èÜ€S>îïï/..¾á o ›››7nÜðÈWT™(H°ñÙí.šm>Ê3ÅÉÍM¦÷ûuH³ûµ‰˜ïñR€:M4õÏ ¹î'œ—n]6Yª£Å¦Úø9+ÄÜô2žePÔø¤‰þ¦!Jm§T7›Çÿ&!çhâ …(Ì™¹v¯×[XX¸~ý:ÖôôWÈþ<“ßõø›w¸ÍÊ"Æ>'ñæwúl lÉé¼Û¹âÁôg¦·ÿéö`{ðÅ¿þâùóçƒÁÎîN›i[ßµuò8 —¿ÐÊIa1yŸàœÔVzvQdáÝž]\\¼÷Þ{»ÝîSO={¢Èx®`]†äž‰.žXZZºÿþû/_¾|ãÆ Ã˜†;(¡Æ7'á?9âÖ-3@B³Í)§Bµb Œö\®EuÍŽÔ\<ÐPò ÞBV)ÿJÚ[‹Â‚/q>ÿüó·oßNX¥çaë[¢2.ãV°$]q>ô0 ek²®<äápè¬ËOàTD¦Â2‡Và9Ë\ZùÐÔD³ÈŸ¶··SyD¬ø.À¦÷ “=0³‰1°ïüA<§) ¤lÈu<~ë)«ÒvµÉÅ$äq/‡.%{ƒ¶$¯†¥Fй)MWæTX‚Èv»ÝùùùÁ`€x¢‰’Nfâ=icùb\æŠÍcf×÷ñ›¿søè°÷p¯3ÕÙ}Õnÿ?îŸü';Ouöö_F`&“ádyôöÇûÆ–KH‰xp¶(„4ªBÈéÓ§?ðœ:uêÃþð“O>N0¶rÌyÅ ŸœeÙrÝn÷ìÙ³7oÞäfggûý>ÅM©„^6;1•™æV>}~~ž!Mæÿq…(¬œõt¹hàÛ6‰Ž—ünÝ7¹„1eRåM²°¹;~ž-°¼¼<7¹£ÒÚØØøÊW¾Â, r®0¡½®Ì(e™iÍV¶EÑUÒ)/3ß a¬ÉiÆ*‚ ÖlU¢²'“òcXÅ$‹2K³°Âõ”4cjÐPy84kñì‡[,>mŠšÕó u+ëû]êMkߌ5P]F Lkvë%ºXö¾%Ùd‹#Fÿln\îÔŒ¼Ì2£‚täw±]w„dÿ [0==½»µ»üÎåö¶6xï µ6óõ™3ï>3???êŒV+ÃEqdiié®»îZYYÉÃÛª?ô¥ ‘)ƒÎ[¬ßï?öØc½^/šóü+3 Ó|ÓŠUæÅ­®®~ò“ŸÌ,K‚Ü=÷Ü377wéÒ%ä}*1jŸÊƒ ÚŠpœ\,vÞf×üHS€È7 Û5~¢Cõ~à¤ÌÐ[¬jÌL•É,o¯ó¨i}å’fP±¶ ¨²"ʹ˜ì庿¿ìرp%ì-íü/§95™5÷èÑ7š›› ô½,(e¹&Ë1@3? ¨Ü$ tE­´+ú¯w@ ó»‰p@mHÕ•®…óEÊÁÌ¥!&b½j.µX NkGüåqK^¹•û½&·Ðn1‚á䈂—¾…Ù)L-Øšâœä¹akd%1å O,b àí°Jѹ?Ÿ›ÿüA3¿³„0Ê" ¸€Cæ!dŸŸ¾lv“5ù,Z²Ä?ŸUü–¤) -úøhËL³æìWFíBï©OZîXë6c»ÎöÛ,#bÉíÏ´,,sE›››HJ[ôo¡-R¥È6þìÉeöÃ$IŸûÜ禦¦ÂÑ·H6ð¦»}¨á1rŽò²âT96$¤ÐLŒ„C.Ò+rޏÊ¿NÐdBÃyŠ+"æåZΙ5wÝÍhb“†näv´[âî-QJ—0ŽÌÚp|J¤tzݽïv»(Lc/èÖGä„‹ ¢U«iÀæÄLE•g QÕ] Kþ>@I*ªS~&†ÈlÌU´ ik™ B³íÝÜ– }i·ÈÓ“6UÞõíÛ·}TÐÍÀ=Æ;ëÄù…²Å–X6tªrpÛqÙÒ2ReP†¿Vz×´ô02õƒ?èé‹«–Üx ¤|. M3{;1 ‰l9–{¼ZD¥†³ œy8š@˜a_‹ºhà ç ópÜdžvíÛ••OJQè½itáβÏ'‚„ûHaaC#Ä ¾µºßï'ÜúM”¤~.Ǫ‚@I!Gnoow»]KÔ´‘ ’»¤0e¬T¸&e1(Sô-ìžâªµ§€8LS:ÉöóïšxcpÏ3n½^ïôéÓ+++xу3øâú‹üß¡-T8âì%·4ñã2o£ßt€2Ø„™§ÿ蜗9ÜbdÎn¦)o(² ¶Ã*™pÿðÆÈ`f3g!ñšÈÚ0åñÉ&å‹&‰û¬4“€-­_*1µ‘•4ùãà$ FºLv°¬Ú üŠí–YÝèüÍÔîü‘EÙo´ŒË´Ãvyí°fþT·Û]ZZÚÜÜŒ)ÉSyVN(y•EDù8W¢¦\ç@3ëcÛzŽ‚¾‹Ã•]3НhÚ½d*†4¬ÆmØ?:333ÇOŸ¯Tó“sôUŽÇ’g-¦‘ò–¹Aàï¬!ï1~ÝnŒz´1 +—Øì4ØYœÅÔû޹<ËÎÎΦA’¥ÏÝ‘jY-¿rüøñÍÍÍaÌ y2€ÙÌ……'Jã£ÔÖ³!Lºü÷-Çã¬ÅAqQntÔ½y$挕hÇÅP›ÆÄ»‡Ð=¨ðÜÂÉn‡içà$Í“»ãħ@´ ãëæG™“Rð@^(ojIšp Ð`¢aÿâ1jÙ) Bk)L‡çvØ*"7ˆ 6J̈ydZˆà®Ù˜Î?²2ëäÏvïN….ÆCˆV(UQ2“$ó3ÙA۱׉yÁÑW9lo²ÐÐöØ`–HÒ÷ñ¬G[dÉ]ƒ5sbù#翌m›HcJR;l±îQvO•“j/ =›››.\È~v“‰.±‡Bh/s×®9J¶´jšD€{'Á÷®C8A?æË {˜h H|ä*òáü ­¦jŠW¶wîˆÓ–rþnÀtÕ 3KL¼NHÒ~ ü⑬befÖ¥q0ª‡yÂVë)É™E/­0ÁI¡¶··á¿¸ˆATJ S€`ÉÜIì5 ºDü¤¹a´3ÍnÈCË^ OcÎŽé-փȋ0­¨©^N’Zf°¼¶ÝÞsfàe\…½¨²\ƒA¼Œ¹Úñ±¤IÈ92gqˆ(ñ®µq!8ûÜ<}–²é{ãxF̸ ‹¯X–£ØÒ]È^™ÍY“D{L9“Ê‘AÁ=y—í *ÂÉI Ç0¶)ÿ%.Ú‡­_¼;ó3…G¢Íùåóѧ­£µµJ=ÅÒëuæœ2·‡@q 7ÞYjž3®ßN}ã["dbv{>k\®Í Z©ž15–ÃŽ2È|»ó:«rŸ nÁÉ­8uÌùc«…¹2•¶9ú ºÝ.CænØØJ’‘|¾Î Ø@d !™åá3"ù V“× ›ÌêË}š&¯‡’X ßÔí !‡@~XuVWB Ç]S­,½aï/‚ŸY”q¬°s iÖ•çOSUsªZÿMÖvV‚]£à¿ âÑË4KŠ9¦ù×^¯gª4¦ÎLæYxÔ{–Oò0ZPÞ³@Ç#TN¹ë2=çPÞÑýõªƒ×à‰± vÙ/&”{³!¶6©rš©P£ïMÍMíìîÌüÕÌÌÚŒGžžž¾÷Þ{O:õä“O®¬¬”hjvW<¬øÈŒg`0£ÁYÝn7vdîLIÖ‰ úŒŽ,ƒ#éÐ&äDèdÖ"¡îÜÒ~äPã”14gD*w³ Ôä¡Á¬~F™H¾éý@|J…4™ çÛúÜn¨„`ÚËþÓG!ÆGoÔì)¥ð63 M©&Sœ¤êž²jr¹æåægÊI“è Ä)ÔãSÕ<»çÜÐbžn1îÏ™UtÛaé6_dQº£V๡ÄÊä`"%…½Øš|Ûøt>%¯›Wf`™Ü­x^h!=›8 G^ùd82Y†7Å[ÞÚÚzá…ìk”5üï©@M˜dxÀÆ,-cÚEÌbü¥Xúç°¾¾NHc‰?”IYÀÄl„_-£Ê€­"XNìÍÂŒÍCHô* C;úxeNBÎÑ|í}ç^û¾6wanñ‘ÅÎNg0l¿i{ôM£ö_´¹ÿeiÀô‹/^¾|93!$+¤çÁöŽx—Áë‚AåX¡MJ•S¦;I^¨â]ò|/$ã´lÜ8Øð…»lø;|-çã¡q–¹`·ôµg&œÅÂ$ ÁA’;v›±c™ž°£»n>},reU]ÇÃJVzå£Ï;7ž{î¹q™úgˆSØÀ~Ãü¹y]欧âFENI˜܈ &Ny«œ™Î9K0ÎÐ$GSÜjité«þƒag¦ÓÙ=äzÁ|&4—=ûæÎ¹û(ãD™ÞpKÓ¿^Ö®WNðñÁf~’ Ù$ÊK4¥eròäÉùùù[·na&ã†'Nܼys8îíí ƒp‹9ùË Q›±VnÄPƒË%ºÐÉÓ††N¼,ð½›.e€±vÐÉb‚Çqؽ~G<ÿ¥¥¥÷¾÷½W¯^ýøÇ?„BÍó•ôz½<±2FjÅ9bRް@ <1Òï2½xâÑç€FÝo˜iTr´£òú ç"Yó×7î·[w¼xmØ4ˆ :ä j5‡bÉl!zBåYѦµ ]!2 ÈD*› …«1G&{©Ý=Žm3lZqh Ö†õC]ˆWÄ%Œ$•!1jÝ”Ü褲&-q4 9Gðu¹]þ‰?ù‰3¿væÛ^ÿmøÀ–——?úÑ~âŸX½¸:÷§s£ŸÍýs¦í敃ƒÃÎäâ¿ÙW…•Ú›uàé6RάXW®K“ aƒœ:kÔÞh% }àœgΜév»¯ýë~øaˆ ùkìöŒÀƒ¢åK$€íCB7Å 2ÀéEy6Û™µ 1IÛḛÞê `¦å·A,éxyl *ÚÆÆÆ'?ùÉ­­-Â!˜éi&¤ù³™.rõCM ·ëÑ‹„ÆLYäììºÔë ™M âøa–"þƒÏm0û³/Ñ<(ÂEż’˜)àT´¹£âµQª¬00Ö;…RÒ0Fz]âT„iICÑÃÿö&@o†-o:cÿ~k\ /‚ØŒ×8ët$/ÔR›öñ´R ²)e2vCôõ€‘Ÿ©ío4 9Gù533sîܹüÁ|Ç;Þ)§žzêÉ'ŸÌ FÓ£b³ÁYÆ{5ÍÆ¢¶E€*–üòȺq{iÐOv—¸ÉpÁ\dkfŒ+/d*³²ÍVWWwvvΟ?Ÿ±g+=‡½Ê‰ïYch¹CUH³š*žø¸!m(ÂJò™hÇìX,¨ ªÃÕÒø1‹¯ŒSÐ*0kˆ,Ø%Ö0týÄÊÈFA|bìéáGg·Ím5F.Œêצ Õz˜^Z\¹Lh;u3ÏùM™–…ÁÁxÛ î®»A‚_'Ï!œÉ FÖb`ƶiĘ ÏÅ(y­ù`è8 ;”&c³“)‹ÆcÙw6Äb6/—è^€\àD„6Xئ–E%b¶ýR ]P±ÑE½÷Þ{¿ç{¾çÒ¥KO=õ”¹E°ZÌrß6º0Q’>ʯW´WüòÛù—~â—æææ¾þõ¯ÿÑýÑÃ?|åÊ•½Wîí¼mgá.¸S’¼žWh+0¾ã€áf -Í3gμë]ïúâ¿ø…/|Áæ¸öà¡@˜aI`tvEþÛ„]Úå_‘ LŽã3¢ÉÓÅ%Wڡȶ‡³ëVvܸÉ:­-m2’{ûð)Lv>èÖ½ÇåMo‡Å<€ <õfolLÐÛì°GW6"0%ÇÚõÖ&ðH \Ucý =öQõXUNaÛÐñ¿L×Ò5DÆ’+À‹•„RwÒ…*Ãÿ¼ˆ T6æP>‚ÑÙŒÀÀ`É3xË´ˆpµñeôz=ÈcÈù$„VmVF»Ò׋´—éQçdgëg·ö¾k¯uÚÜï̵ßjk½ÑX.Ò™fÏCî*”`€[SNR©~0¸v×c—¾ô¯ÿß}ùòå­×oÍ<8³ÿµý•f5Ü2†NG4T0zòΑ7nüáþáúú:ÒLEjÓÁÌyÞ3NT¹†ÍÍÍðJ_‡=ŸCc“L f.¬GèA‡fÍ—ù“jÀ Q…²14ouÙcÎËøPúáíðø-ÒU®ð÷ËØñ`nnî¯xÅÝwßýå/Ùf‘fšQ d1ØöŠxã2ˆ1?™^TQ€h`Ÿb!:ç?~îܹ•••«W¯f%ÐW·„ã#i2A™åû”•d÷ˆ¿1Ø\cU´ñgX@ª„G¬·”pbg;û.£Ï_f<݉ìt:[{[;ÿÑÎþ¿¿?÷‹s³??Ûét¶ß·=øåÁÔ‡§ºÜeò†µÚ4\Ü]AÈŠèô8¿±)CQ·¼7ù¯¦¸ÂãÒdMOf–ùÅL¼17ÆÙ²¿¿åÊ•«W¯"—5Ÿ7ÁµŒ'!omrZkmæÑ™¿{ã×Þükw½ëÖßÚÜÜœšÚ¾¾=ýKÓÓsÓŽÌ—µe*“y,…xÝÆk—.]ò€?e"YÌ ѽ€(iÃAÓÀ¾@á ×à4\ü@=wÆÖÂs>ÑÂö9Ž_Ö-‚làËEÝ®ˆ Á>g‡Ø=…GÊ©´¹¹éf1º2â`û;ºëÞ‡v¬ŒizBaâQó•&“MÀˆ¬ÍÉ›¯åååõõuØÒê8uêÔý÷ßÿøã_½zÕ6zÝn×°RÚ´¾iuo’ê–©U[1Œ²™–[ZZ ©\ÍÍ{)c›I ÃNIz&êßQçßÌÌü›™Õw®¶™6;šùÂÌÞõ½6ûR‹…ÌÝ…¡¦|Y·Û…žï>$IòÖ€*æ«D…`JJ04Q›ÙTEž’xI¾†¸²õ’A¢éÇZä¦C¸¤ú!ýϵ¥qE€)2þFÀàƒZ ÁG­¹ý4ó rüî£ë Ôâ å3®_¿~íÚ5 葤ƒO2îcœï%]Ô}úÆ7oÞÜßߟùg3›ÿåæÜ?I¡I-ÿ4w^Í\'8†£¸QL†lU^ÄýO/åe8qbyy9#D\Œ‘ð<Ò'N dJzQFôe‹Ñ$ä}àEÿ®‡g¦ÚTgÿ%½)2P— ´‘ZñieeN3îà\ÆóhÔYUá¡B&»Áù†t*¶…)Aì^P{´¡¹&aæn·‹¹“C]ç‰æ­æ¬'?yö[Ýn%ì NüqÊo;¬eh;€‹â(ÖGO®3ßgpÈÑcù…qÎr¢ÏA¶›£Ÿ¿æ®»ŸÕÆÆ†‡…ÛÕÍöööÆÆFìG‘ €jEˆel:˲V)æòóƒÁÀ~NŒï|õ«_½víÚõë×ó¿pîÖ§bÎß³ ŒÇ›ãa2ªE1Tt÷Þ¸7÷ósgÏžý¡ú¡oÿöoÿÔ§>õð+++û±¿óŸì̵9¿ "Ÿ½_Ûá!ÐèQAÈä R©˜DG0³ÜÙ¡5RAæ=Nkê õ4䑤S)v‹.ªÍG à%ç[ZZj­E1‹^i¯×˺¾I•sÄ_®C9 ²©Üð@1Éä"³6 ¾öÔ"ä¸l²K<;“@BÓ/ÿÝÇ\;Ѐ2þ㌛‡n‡' 4s‡<âÖ=K3 rU|º}6y&p3 @ü+MQ`n‹µ¥GíÌwò¬¼RºY4ÚÔÕ ¹Ì%;Ñü@ã„2fb í°lL~˜Sž²ÌÞ6ò¡öm¢v;poFý~Ÿ¢ÄÕ j`e"’‹éÎÊ=æs…E·˜—çvñâŧŸ~š(’;ŠÌ—)[Yfy,¾Âb½Úëõ4™äi8¶t;ð±u DëìÙ³¯ýëï¿ÿþË—//..®¯¯ïÏìïv^’¥±ó¡Ã¼m¨Ž…Í»cÆ œ¶IÇÝÅ+í1÷:Pf¹™×Z[XX ïÉscVl™b1¾½aô4éêæ\¿~½l(4¹ÛË9¨NB·ÒjÃJn-Àø ?غNÊL3E”¾s¬ FG³cCõ±ÿ§(­•ލm~@ç^r^[•‹CÜ-kÃ5¶‹&—:Ll¹ì WTô{¢p¤ IDATlœÓ¹ÝEõÃæçĤÊÉ>ÄkŽ=F8Å:0ÑÖ(9ó:LGòG8ˆ4ü&¤Á4<8q\½¹…`œÓ’¯^c`Pv“ã¥ÀþâÚø @XiMÔÊO2É]­I' + öÌŽ![B‚Ì-Wö¶ÕÈ£Á"û±cÇ666†Ãa“-¡µé)ÙGYQy¼Dn²¨Ñh4õ¯¦ú?Ü¿øðŇ~ø‰'žxôÑGoÞ¼¹···ûîNÿßÓÀÚXð±ðÜMlsÓ³³³KKKá€Ñý²Ù6íLû¢’ÐØ¤ªi>´xŒº¦¡²¼ãŽ;ƒZ“,wÓt0æ½™ v‚¥ƒ¶*ÄîIÈ9²/ú-,VT`3R#ÅÒHƒ¥nq»Ð¦XqoÓ3dЗ¶ßhþÍ4ºde~ˆ™8[ü²ÃëgøSœP™·`'pkžj‡¥Ï(>¸S8€­¡!õásÓ”Œ‘fð˜d©V‹w¯aýÜ;ŠÔœïÜuQÓ)ž%EªÒp¿©"Ä3(y©ýºíçmg»>5¸MhüµÝÝݰM‡ÜïØYüoÜÒðHG;PLð©GY@éàÖ©[Þ±cÇzè¡gŸ}öÂ… żyÜÓ9õAÓo³ÒGöw>²³þÛëŸüä'?÷¹ÏeÐmoooû‡·ß¶85=層ð²gS]QJæ5ݾ};7 ASím>ÌÕ†IŒ…¬ìåYŸO„§cCŬ±0çš9jbUÀÓ¦±Ê ¥jš7ëurŽàËô0Öz˜çEЦ”A&¿[C“—²ÚÙVº¡ƒ´°€ 3ùJÀ—¼KÉhLl+5;!IÂ鑎Áp%¹æˆäA!oÌ„MIÍì½ÃŽù!MhDeÿ‡ œs—l¼ ï9—§ä3…YBO¡¾,Ùâ‘áQ›ü–‰PëÇÎ:¶Ïò³rˆM¶nv–6AuÊܨ¬sa!¶Q›úi ®\l JÍMœ ;æé{“”Xÿß .M¸ÔˆaNnoo_¸p!ý!ƒÏ áþB"BCÙä*Ÿ2zn0×~¥­>²ºù/7§¿0½»¼»ÿŸíï¼gé§–Fû#œG˜³ìÐa¢Gæ§¶Åb”fR‚+óF(ÓË&ÆHÊE(nëgΜY]]õÌi>Ñ…¸‡LÙV™Ø³».å¯' ­#^ÐÝIÈ9`͵ˆ©½®¬b”þ^!™!æÍ¡à> ˜Ó fs²9_<ö|,¹sÆëìXœšÆò±œ,))ì›â– Çí¥|zæ×¦¦¦¢PÛc”kýeNÎqî—™ø~vhóblþ·­ÛÐA@Ÿ ›Q{Î}k(ÀdõýÚ* Ä´+òA$˜ÅŸ&Ÿ×j.7™Ç§7R°µ§~âç-O×4…jÕ¥¬:hß=æôS|´Ãvœ¹þk\0%'ÆÚés¦¬X´ùùPvwwQÙ ³Áà€?îDÍcašØ_Yosss£?MÿñôÖÏlm¿»µÖý½nïû{”ìTêî/Zì2`ˆ. š¡ Ò’'Š ¦ È™Œ-±°S“=U¼µÌM/ÊWÒ då ÒÎ#…3 ¦b……&M IÈ9úZºm‘:vS€ÂX™O[kjA÷twš3Ë 3h™ØÐÚwV=Iû=cñà’±„%ýŒ2óou€„™qßu¸¡9ý³²ñió(’\VòOÐí!0^jÂw“‰‰a9ÊÀž®9;È,@‡ß’ÀùOPê,*8–á0‚ŸÈga äRÌ…3Gôìr^äu#äê±›ÂÌ´­ÄM{³!ì=cÕQ$*ˆC™K5ÁÚu Ža®ºXÀ©¶MOÏ/†göææfÅxóÿrþ%2áþ‹äÀ¢¯lr‡õv ¢ˆKö’N‘»”9YC‹¥ÕÊò ìe 7ýÑÒÌõ<ÿüóE‰ÊÀciµ/@œÉ±Î¢ À”ÄzrŽX³®«k ›5®)Ëi^œ\èdYÐÚåìó”Mš~ÆÓÊV׎ÜÌ@~ û‘§q•ëÉ‘†n½ðœŒnðŽ+EU³†›µaÊki^n}îŽ;ÂUH–ß5kÃ-"–S‹\O^ >•Vûn²g¥t¦éè@î9nOÎÁ]H:fR±>Mú Íá¯1 ¼Ü‹­ªæçç““eÍÏÏŸ:ujcccuu•M‡btví¯x‰ôIIaTƒ§y°ÉCknæ/oooã;•û¾”ç‹ÉÏ@wyA”¤äµ&ÑF hò^ê-‹qLBΑEOÃrraˆC;_­µ »áliýâ²ekEŽ`SÀ‹­¨ï±ör¢¹scÓOÛ {EºTi{¸)’z«×ë-,,$à ~•çÖ»ãx6)üZ÷“Û·®‡ll]„Oò¯d”LùÅÚ©ðz0+º¬¶´ùæb$ou:É8ý ¿_—A– À)î)hm¹±Üd4—~rÖ ¨yÆfe–Ò§Ô¯^ö– Ì ÷!kƒfƒÙü>a ʹ҂ßL­iP—2ë&BBaU˜Üh¡L_9Zv½^offæØ±c¯~õ«/]ºtëÖ­BûdVÿÅåžÎôk§×þÉZ§uZk½ïí¯í·›„Òö¬¬|.£+W˜®îæ:ȱØh,a,½°°Àå¹{dßtÄ,æççK‹¬Ê“^Î7D•ʬ÷)ÏLÞ-D0 Ž6ŠnZˆu4±Ø§¶×(jĤ9£¥L±ŽYÖe‘ 1'ùr@ÿ&-œ2VI&nâÍh4ºóÎ;———/]º4Qâ*½+ÇRf[LÒ"zq÷@\é¢ÄÑ_`kâ´…X€_R¢Ñâ9“ÒR†rÜ›âQeüú@BÔµBOQ©°•@ „¥ELvl ÎìÒ§×%rÖóH[kÃáµ]`ºÄn‡¹WpB¨‰~éNòxÂÅs“ŠÓR›èϺ\jvsÔ°R:ƒ-bÏ:»È¬­­ýõ_ÿõææ&ï—š;·ð¢”êCÛ»ÚÙ˜9þïÏK\ýµÕÙK³óÿÇüÞ…—Œï°ƒ7 Ê½›\NìdH‹‚‰¹oô¼%X„06›ìí’—¨ïîï–Éñ$äÙ—»n9¶ÃR€œòãc›Æ¹àéëüÔÃíVô2¢‚_ö*°8ö¶Š%÷7½ß8,Ê +J‚Æñš¤ŸØ*¶ØÚÛÛ»téÒ}÷ÝÓŽ§Ÿ~z}}Ýyœ‡„ÌUã°ìŠçW¬1ÌyÁ'¯&A…8Ô$ßY¬!Ý@F™;IÁô‹5—פm ³âx¶76¦¥°°ô'–‘TÉîÞåu[1–ÞCæK¬çVè‘, Ïáš](ȼS/Kþ¿^øœ©uÈ!¡Ký9‚•†Qž%Ë<³‚ca>%aÒ]‡di$ì?hRDuYI8fe&šê‡(woö#³K/¾ëtP¸¹¿3×~ªí|ßÎô…—ú¬ÅŠÉX®ÉA†4­xÞË3÷ ¢HeFÛž¤ö†w6ã‰.’ƒvX£Öí´#G™›&Iàœ9ÈNñqCIáuÓäùj£L†ÉOq¿pÈa´…cˆ&е`ÃRãpA?£ ï.ò‰®¦Ýf„XìØPæûrÞ›‡ÃáÓO?ýì³Ï¶Ö–––Š%x‘Åò´s .Û&z~¸|àr©¢ú!¨˜¶7Ûs§ìç<í| â’&Í{¶Ã£|.(UË܆{`Ì'!HãÇW}IÜ ³ÈÞ0Þ˜¸ëZÜ Šy–*¯»#Ï´%˜mnn†É *CWãÀ/›…$ŸŒ†£aCË¡—×5:ìGPÙ,÷ùScm½m«=Óº_ï>ôÐCüàßýîwŸ;wn~~~öáÙÑ£ýWï3Εçl9Z~9â]¬—©dC⮌ÉufggCáñݱ4 žfo$+_ÐpÐŽXCdóþûïßÞÞ~æ™gÀ‹r0Ñí°_¡½ÿšÌhùŽOÌÂx&<C÷”\iz»£ØÊ'1@E)ÒUëøæ”Ì_‹”E•“>$Î,ùœ„ñÊ•+×®]3#+GÏ“jP)[†ù’ŽA`M[>G=|Ï£ þX\‚(ÝBË“†no:KP;²Ü R7ž-®nIÆq+ºÅÂW%¼6xk„|sÍ­ºõ‹Ú]"«‘†:ïúÆö0¹ž¢Ýâ3”øÁp.,,Wx¥¡Š«P¨î.PèÓÄêv»Ä†&&„ ¼òfÓn9uòGôGßö¶·¥‚ÿ½ßû½í•íÝ“»åŽ¥E½Œ­˜Dl¯B7ißÂ\pD„Xä1[u² Üœö!ìDt1¿À%ï$äe/§µvîܹ~ðƒÃáð7ó7/_¾Ìôc"d‚èp°¥›ÌÕ¶eø+›ßÆ´´‘ÝŽCð•}Âö‚ }Íft¨Æýz‹-t!;yhƒ/ëÞBè xž¹{̰µ˜ÐôXá< N”&Æ]Ò;÷G^Áò‘ü2ɦ?$÷71Ýh`beF žò”¶%£‹Kž˜ÿÛö*í°? •YI…ÿí{ôZé3»®`f-A ÈÍ&Ôæ®É~«5öåc w³üÊÜB·¦ÛE´î{½^¯×‹Ü€ h >FÖ"*8=== ,÷ç0@KæEŒ«½E¬¬¬¼ð «««/¼ðBt1F£QÛkÓmÚ°¡)yîK%*³0Š4'oÖ†õòæ}™KbS(ª61…ØIÈ9z`mwwwmmíÏþìÏâEíÉprj†X*Êž]&­Ù,êmÑ2)x´¬íÍ칸dšèlIù&+9³Î¬LJnN3³XZEIÐ[š®‰û4&tyr(“€(èXÌÇã´hü4éL›ºf–9÷XfbxtL5q“…s1hrB²±û&=S¦z‹°Y€xxo›¶dH3eÀ á W½@(¼w»,×XáÍDG+ia•^º3n3ø-¿ŸÏ…;WŒS‰=íÀxͶ.õˆj%;3#Â-,,|ë·~ëw~çw~õ«_ýìg?‹k±½ÙÚÚZ[[ët:½^­‡¦ië¶­­­´N)ò:ÑÙyÏÎêñÕßýÝß=þüÚÚÚ_þå_nmmm¿a»=Ûfo̦au5h®½^åas&Ò…Ò_ää¡F ”ê"HšëfúIžó»³ÄµÿÎ$äq¡³¿¿óæÍGy$ Ñ„tDÆõÇÈ49žÜl'@°Ï;ͺÎ9J@?œÅPF`I«™l´hÅÛF°Ie$óÓÓÓ'NœÈr§DK5–]”#2¶`kkkƒÁ D¨n›ù ¯é<@>ˆà ørî|â±µµÅwê0[Ó ,})'’Nùó<“¢šÎç]ZYA7õÜó+ŒZ0Æô®µD¡•Ò„l œP‰666èÕQzrxÑ/ôZ*¢´EÈ+ÀÑÿÇÞ›Ùš^Õ™_ž“Ãs¸y§RUݲd I%ävd 4в,»  &ÆѦ1F¸=A[ÑØÑn0 ¡ÀÆMG;ÂØDXm0HÙ–ÔÈjIFR•D¡RªéÖ­¬;åœgÈ3döuó©'ß#úg§~dþP\e<ç;ß÷¾ïÞ{íµ×òÈ0‡ ±¡+ÞLj17ˆq½^ )&ÈÁ R#r߬*ÁÁ §5\Lá °ººú–·¼åÝï~÷<ð¥/}éÎ;>Á!Ý%xÇ‹!ßݼ ÊôÀwd$£Ñ¨z¬ªþRutõèÉÏ?yãÆ˜²×jµ£7Íßžoí·Æ cžˆÉG•¼Õ‹QKóÁ?‚ˆ_ÌÓüU'ƃ°K˜}¦³[ Á¯(§Ü0&i89güC,ÙßßGCž’%ã…‚K 7ýÜð0¾– ãô®²éñäh0%bÒüü|»Ý^ZZ:88à¸7PK5 z6XÆ1$é|ððððàà ³,ãñQtzUUmnn¦%Ón·çææÂ²-ù•••………Lzf|ªÕjÙ‚âÚk9‘9ÔLB%šÉÊ=@pÜ4ú:œüÆù Ä?d˜á>¸Ã2þi¯DŽf+p«Nû,Ø6baaammí[¾å[úý~D*¡-Ñ*ÚøäæP%íHäºÙ-:Vï,’› ƒß¨²GŒ©Ìät?Ò¾†ˆÁŽ¸ÃŽ=(œ“ò•wvv¾ð…/,,,<úè£qs¨NKrx~“ [pOâAB¹AÈ{ZVÿóÂàçÃŽ?pO›|ò/' ÿa¡þë½QÏ °øhdšþ`«P›Ê3‘V -ÑRZZZB؆ëÏ~!†Ñ/d³³rë¨ê|Û󇜳,q ì7qú4›M[:G°~†[ú)íÉmg[çä(á´µ: bš´Þüæ7¿þõ¯ÿô§?ýØcU§-n˜g—FF@ –Ý7R.î;`wîKÍÏÏ¿üå/ÇO<ñ„Ù8É‘×××WVV2xO%´x¼ƒ>G**RQº5…Å/ažt¾È•Ã-6 ó°:mˆ—ÀÌv6 ÍÁ«…¾ƒ_€Hš…ë¹Û@ˆ'‹_ÜVdÙ.]ºôðÃïííýÎïü'8’A9€#¡Ï&Ò£•çê‡AZNyŠò•‚éêÃR£^d/ä+8›É/áqßúå/yww7˜­©•Å&b†×,ê”UU…PÇây©a9­·~°5}`zø÷«ãj2t¿½Ë€0xrvwÖ#nT*Yç…²"K Â3s™§ÉoòÜsìXóZ ‘‡Â•ëq"ëß›¥rrΦı†¹%­¸#;€„Cƒ:¿ô»Y˜6K‡L‡¹tŽNhÐ…D4& f.\¸ÿþû/^¼è¢t»Õk¦KåƒB`µçJ5£`'ÁãããÛ·oÃn •Ëytç΀ožóOs~VÙÞœi~~hCåbøÉâ»i›æPÉ3Í yK51/g:ßÑrX~îÂtø‹¶–g€ø:TÌÝnw{{ûßý»7 z½”h> MLÈN•ôîøv¤Û2RqB;,§ T”O‰èè{L_>Ô’–“(~é½6« ƒÈB%­U‰ÍySæÂˆ©¤ 6-ts=C›9Y3Þ5GGGõõÎtà§µiáSnKÐbˆ +²ÐLË*uu¤Z,æFf+Qè‡ìÀr*h Œ®›öVL(ûQž‡œ³läøá‘¢ Ć:ži·ùMžkˆq.)L‹‹!8[¬W+?÷¹Ï}õ«_½}ûvtê¦n;°¦Ï|ƒô×Çï>¨ªjþ×ç—þé’Qx¬™Æg<âîÝ»>§ø¾GGG½^ooo/¸œÅ.] øOðG(¦# C<\ìUmƒVC4ÈŽåNz:2'ÝûB¡™ƒ‰f/¬tʘ‰WXp Ã b@‡N%wÕªŽívûU¯zÕîîî3Ïo˜ /.·ˆA×D èûPïÈ„`6SÁ0,,Mæ8vÄ“µcfÎÁÜdbsÑ]w]μ úÍô™¢'ÆË´®=Å=®*¨X‘G"xêž @b¥¡Ý lßñßÑív?ò‘Їã"m2TpXr+@P@G“Ô¹ÙÚ.ÚŒßÚ¨¨#)|¥¢Ð?9göCÓÒö\ÉMŠÆOuzøyVa³˜Ùv«â° !¹*Öœ"øoEn0mÖ¤‡ký½Qëm­f³¹¸¸X;ªÕ?T¯ÿj}ÿãû ïXð®öPoî‘L0q.‰ûà„˾z½æûÜ›ÐBÎ oÆ%Œ£×d|¹“ûûûk5pç'âr“ \Øœ$Kàv5c8ËãGqpÔt¹V8S€}ÙÈÕ./„Š£)>üĉ ¦ÀÚ{&“’¼xqq1ZÅ…úQ1ñ^ظ€$;¢è8³A€¬˜ø 9¥ð”>É8½Øf”¸ê‚ûîò¨ûCl”5€MN%¢éȺJGkÄBpܜǼV«íìì8>ÑcÒ™É'óA"am6›/^ÜØØ€B ŒoÖ¾ qæmšå¢m~~>Ùáž´ç!çÞK0|JÈH‘¤Çhf”Q`ÓI‹3«X¤uÞÒégrÚZÊТ¶<0wè¿B;VU5ü† \XZZzà.]ºôüóÏollÍÿüüð†KÿlɃ“žüÈÑÚh5¥ É—½óJœØЫÍGfk|Œ²mìû`â©K“©Ž÷÷÷ïóŠA‰YÝŽ0ì/quP1ÁÔÓ©ýÌÃó^ÅQ°Úh qKmd D^ê9T` ©±ÒÌÐ…òž'ë¨ézÔA¥ ¼Ñžá4dýSLX¼• Ï%Ÿ¨³·^·Xiœ¶4> PIxÚ¬¸á0E+  ‹¶EVažÿ›‚2创¤A£Ñèé§ŸŽïƒ­1dX*Ü¢€„nó¬ƒÁÞÞÉ™'œÅ<h)”€èÒKdª×ëív{qqñöíÛØX¼Î#küW¶9 K”q `a Må¿’Jž÷r¾.ær6H¾ˆ"niN1™y.ÔP¬éd¨K(ÿæªÚda|rLË® cÙe 7uÀh4šûðÜÖ[¶¾ò•¯|îsŸÛÚÚúô§?}ýúõÉdÒ{{oî?Ü›xG΋™O8£§ž0o`ÆM*Ys&™e'˜_G¥°G#ŠgÂ)žÙŸdÙœ ® Ü•!E ›&)¦¹ œ•KÂBØm9Zß ô¥Ég+ùURs›¬„šôù ÷I{ªR˜’ºú_Íž¤s²á©x†D'ÔòqÖ¢ †’[ý,»žXT;@œOg‚ ‡T«Â‚'BsÈóÿžyœ•˜¬$ÊÉŒ=·¨H³Ü&´Èz1FmaiFY+ÉM2’bÍ< ‹ƒÙEÉ1 d¬p`*f€øšÝ¼D‰š s á9Ê)Où Kò¸+ÆÂì=>>f‚ Ä´f+ñÅA>™¶±nž•ŠÌí»š3 IDAT€˜“=Ö¾.ªÐICHUüä¬]~°Ù2ìI@–”ý]àe] þpDâÆQI¼òßšL;»odhøžõËÏ.Þù÷wt>ÖÙÙÙ9ú®£Ñ_5º‰Ð!ëÛó}¯!“ÎõƒbçîY À–·‚tfÊ7òþœ 9 ÖpîP;º] ¬`‚–r‡i;k]{¨ÓûÓq†¦œ!”Be`Ÿ¢!ŸÓ<ÇzÎ_ž¯#µêd¨– »ª$Bá$Y³x0£ÅÀ:´Í]‘3AŒ,&Ï`m¡”Úh4|búžXRÏÓ342=EC+}P$ž(°l³¹LeZaŒ³¸:íÿMX¥ÜLt‡.è”ÅU#ž¡˜9ÔS§/fHÎîÚ#ÏÆÞ‹™–zˆà·8kd ¥FûÎÝ,öȹ’ôÙÿØFÐ'vó-„ÔîqÀ†Cœê9‹é£8á*&Ú´<ÁàaÌJÙv0™Íóžì³ìpÀ¼·þ¯Zë7Z‡?zxð7ަG7VÿÌêx0´¬S¬ÄÂLŽ›\OˆiKXd p·$À$ƒNWZZÞ?âW—á%ã§v»·‰³Ÿd¯xÅ+Þð†7<ñÄ=ö¼"“}_`XÑ4²Pw\Wn§‘›ð._”Qyä‹C—‚…4Ä n гà-“É$løË—/?üðßûÜçnݺÅvü3#Ÿ‹{£0Âg “î& §dd^‹éOðôy@•<“òCÚ$ÏHÆCÛ•OÂíñœ¿@µéj°=!T(—Ó‰!YáQžiXZZ¢Ê!ã 4’M› l{!Ö 3y,BïkÖ¹•ãó5‘¶"_1ÈLD´S Ùyçç!çì  jÁÕ‰–~“_lIDc²lëÀQ„A3êOTd©‘F9"Ú×9gz 2z*€äždĸ±ÍÍÍMŽ?ÕhÿL»×ë5š£ê¨:®rþ2üHÐe;Øl(Jø( £MgÄÃÞ_&5اdzÓ$˜dÓ>°hV[Ÿßc ¸P7/çÝÚíö+_ùÊ›7oš;ë} ?ÐùµI\Y¤®6 ¨$/THq÷ŠtÛ>°nÑçq·Ûí¢I…jÛî–´šÒYŒùw’j˜RÏp>Àr¦s’ÚP£0‹‚BVöètxxxˆ–‡s8ûTZ;¼ÎÜ9b†§n]@&,šç”#ÌWrPôC%ÝÓ2³2c3o+UÇ’jV8Gà P½éHaEh¶… œn;q' ƒ—¼¦®¹¶³Üß9°vÆ?NTÍa‡ÝÁyTp œ\@þÄ@7–×uOØÔ ˺pÆ!–;ø>äºlû¼{ÃA­{»¸+ëþ§‹³JãµZm0Ð<É{¾2é¼¹m†›8A 2C¯b2´Ða£–ò v%–lKÆ Á¢¹¹¹‰P±n DàB7ªÂÃm! çVwíRlÔž´”G‰wœ xÕɰªa7rdN_<Ë{gg'Ö–6ÂIÎni;?zÜŽQrQ×-¶µŠžÖwuÚ£ÓÀ²i“vI@¡À*gœéyen¢/<ÆH‘~ =ㆊû—¼¦`Íp ¬æIäð ƒ å\؆CTÁ`4…Õg½Ðfóô~P©´ÎçrÎþ'½O:ðY=Ì[¶°ÈhŒ“6‚ù¤z€­d½t¤”)_8à•"s©¤Ë ›3˜¨½/€æJÓ©Q@1Ÿ2§*dbs„òAQk¹ÛAÄÊíN Jº‡]²1ð¦ô¸(ÌTp O×òoÛSÍ ƒ§žzÊ})º;„.ÓöŠ¢“Jl“uÂu†žÔi{‹$Ë6EÎÔN AªdƒdèÌÄ}D€àJî¡d€õ9‚‰ Ž,@îS~V¢›¤'ûÂN ^NöT5ÖãŸGˆ¸{ÁŠáG.÷¢s„.À `g¾wÆ.VƾX*Þé,jëô°ÌìWëv£S¨(àØ¦Pƒj𽬊/Î2ƒ<#ŠªJ£¾ç!çlkxvjcØÍ¤1*•V«W§ ø `Û›îe—Ï$æ4lœNÅPHʵ³¥jÍæÏá5 òh’¿Àî9‡Ã¡[GÄ<æºrÚ‚°g7Uwȱt$·i®c]7¤²‚ÄAÌð­€>äÔ¡’yì8^?;E1—;ccºC5´6”Ô=0 8ÙƒÞXºŸ°DŸÜ¹Bþ|4Õ:µé«¦“?;¾ux||<ÿ©ùƇÕãÕñÁ)=lƉ@qMž6ÏSVªìàQ  AàÇdYâŸ1½g¶ì˜Nk,R\è‘6%ªNˆ°;À á³Ñwd!™ƒJmgþ,Fg|ÂØ¸ýP2ÈE>2‚%›vgS„[Éà#ýÕR!3ŸÓciiiqq±Ýn·Z­ƒƒƒó*çŒ9“É$U'†T•´Z!ù0VF˹SE«Ó^˵3šW8vT÷,j/~có´âÚ ){'¤ÎÍ= 9N³âÝr†ŠóÖÅÅÅV«uáÂ…xÂ[!ù•ÂÍ,;ŠÁFhZ°Ý̳ø˜5ÜLHË B"¡6òɱÒn·iÑ6ƒ˜@mJ ×ÃR(Ìëp‚¤·\,ŠB8xžê(Ìêë'?tþ rʸ$.DtOã2à’Û8ú ££×5>ÔXûéµáp8xÓ`øýÃ걪þóu7<œ¯ø­LÌQKQXIÚÊ@v ¤¬,iÒÓ«“bú+hø›ÕYˆéñ5YÏTØ„"B>ÿÄÐUÊ@]‹3ùñ±êòŸ2c#7 7t?å ‹™E*Kædó$04¤âöÁ §...ƒ~¿OÈ!s‡¥—ùÍßüÍ=ôЗ¾ô%ÏC΄–v°É·¦¯{õT»Õ‰f{áKa’R¡ï[É'£àX愪:=rƒËÔ#Û·Ìzê 7·}4µÛí¥¥¥~¿å¹±étz÷îÝ;wî\»vmssóÎ;ûûûÃÃáÑñ‘9YŠð;Ȉ äZo&ÅS¢î¢”Q4ÞénÚ%:wxg<gX ¦øêêj³ÙŒ'! ÕtI¡è­Îö~ó|L'Ò³P…• <Úå²ÉÔ>¨ÏŽÓ,¶b8&‹Ídè‚kࡱ"¶ò:ïlÑ‚ê;PI²«€ ÎCÎÙÄëh¹|ùòáááææ¦ ©YÑ't¶RT'FÆ<žÉŠô⣠kk&G5gåö„g‡,..v:~¿O–”³HdŒ¯P°ºó»'I4gÚ—ZÇlQOçF£›7oš!ŠÍ‰û·svqö¤”ý[Áˆšæ¢Pçä×¶.”kéHÙú,gzB5b¦nÆx¾àÂåoP;Îââb·ÛM Qxz‘ÔL*ª©åaBUJ3ìÚµk¯zÕ«>ûÙÏÞ½{רàÑÑQçç:7ÿÒ͹_œûµ_ûµ_|ññÇÿíßþíÍÍ̓¿q°ðS –2!LRá>V¦Å&<~ä©X?8užàqÇ ¢AQµç¿ƒgŸ}6c§óóó/^|ç;ßùÀüæoþæ“O>Éi1ï¬bR’ÍhÅLnVp€AY€¾ˆ{®…÷Rî,!Èn¢Ø†'ùSÁ&-ÄLá­TÒL»®àÅÑW³¡iú³…¨¼ÿïÆ›ós Xc2 ¸Ñh¼â¯ØÜÜÜÙÙ1%¿’Ö$Г@fE–*9±Û±`¯¡Xì=_¼¦8 #]ØÌèþ‚ªy•’”é¢+ž‚0Š¿½Óy¢,„+g—Õ‰ˆ£vÊ¡œãžY}Hev°Ú•‡ø ŽaƒÔÛt&S×xÐT·Txê•4"ô’&ç#åm»ÝnhÍÍfsiiiuu5…Tšáp¸¿¿3®Á`@IšY ˆ” ˆæJ¸*/¿GöûÍ…½ÿqoóoþ—ÿç¿<ýôÓw·îNŽ&ãÿv¼ø¿,ηæ9méc®‚SqlÑS´3!l.SüS7à×NIMà©g+¤Ùá­:ÑÃ^\\|å+_ùÞ÷¾wyyùúõëׯ_GM9O$(%Ó'Ì>SjS|SÕÁM(ö”­†ŠygZ¤àufÆÍœŒÆ}2°»J"ñE‚BêI]U0Mõ6aV›Ë&ŠÎb¤’ë¹EÛ×î@¯×{ä‘G˜½@#À=ÜæÙc€¶9>ÌtrÍÎØpÚÈÖíà4)Ö s…ø¥»ì`W 6Œ þxª1—[—`®½˜/88F[[[Ãá°ßïïîî²RÓÌÍÍ¥f=88ÈJÇÏ>ûlŠ$˜KdBììüûþ¯õ÷Û6†ƒïLÞ7iý@k¡¹`½×àuv,X*dô´©q€t†3Ót:í÷ûèûQ €š¬á¶œéO?ýô¯þê¯...~æ3ŸéõzV—àjÉð,¨lM3Wíü/ú­fi2et±ø #]N†L]¡jôÈ3ÓVB*r"S¨>Iè-U'J\Â6fQh8l^Tç~9gi ¥Š¬ªÐjÝM%1ZÏ0KÙ³oFáœf¹ç¼³Þ-Z C&¥@¥ø¢'á~8ê÷Íf3 ¬º§ÛìkkšW*{Ãî/¼ –\`hðT§•ÿ í)Kr!`šQµœt6Úq Yxñ}Q¥ŒV¯×3ýÏSrVÜ"o° õ„‰¾~*faÄ ƒf³ÙjµºÝîêêj·ÛmµZ+++ëëëëëëFcmm­Óé,,,„£µ½½Ýëõ&“Éîîî­[·666ö÷÷ƒåf™q ¦«1Ã/oµZyÊI«ÆãqçÅÎÂ{ßw¸÷§÷¦Óéܧæ:ßÑ©ÕjGÇ/ñ³mìævWAÒÃfÂRgUU»»»8I»¼«$÷Rˆ*vQÉ™•NWkkë£ýhk:FænÁ¡(D¸³„zއïÛ-·Óö‰¨«|ÒY„Ötsø;æ|FÊ–Z…ZR>Å“­t‰lu<À6ää”°–*©º9üxnzá<9gr*Í~)"!Â^fŠ&X9‘³›Ã1ÍÐ8Ý⇻£5=%7,ÛâfѺ@Â5hü|î¾cÊǃ«ä’³3nà ”ð ·sñ¸9A“Å ìd2ùÃø/..>öØcwîÜ)¨á6ª¦„þh4ÊqÿÐC­¬¬looooo‡Ã½½=ÄÖxR` pCrr&z¶‰ÅGf5¼ @°ªš¥¦!ØÜwß}ËËËiÀ\¾|9ÌùÉÖívsö÷÷¯\¹²²²rûöíùùùÝÝÝp F£ÑÝ»wiW’”Å*„ëõzóךõߨß;›ækÖݱ` S_–Ú+p'º˜4®`£ä÷4±ÝÆç4t¹ìÊ&„`ˆyÔŽ¡¶Cca‡Â¥äÜçâ-dN°A §fã#Ï«—B–qVIÀÅzaz2¶0£³„k%5nµ)š¼`}}½Ûí>÷Üsûûûf0ݵê´Ì9ƒS•¦ÏCÎ÷r¬\Äfp›‡6yè%ÙHqgá´BÍâÁ@´ N&¡6›M«3É•fÓÜPå¤@)À£an!º#Ê•Óïñ”F!éQhd10\®’k½eØ—––r¼îïï‡ZJË„£“šÄªûî»o}}ýÉ'ŸÌÍÌWð¬]úT*Læç{µZ­—½ìe—.]ZZZºqãÆý¯ÿµ V'ÚbƒÅ—Ï·Ú|  yâ}’ýZ­–  NgiiéÊ•+—/_nµZ—/_¶–ƒïTÜÒÒR^Ðív666ºnݺ•²&ÍäĘ\m»ÝZIOhqq1‡âl $Iƒ³r7#YHd ¹99lj@¬ë"ŽNÉŽ½ÕF–hljú%€g«YØÖœÆ<ƽq;¹QŒJw¶¡sd–GC_§˜FrÆIrSÈr³¹Œ^°@G¹Šû¼¥áë^÷º‡~øßü›Óëõ|vQiYº0zä|G^‰ÂéyÈ9³ÀbPËÙ·ç±9²ûý>9Šî°›…ñ·®séX²¬)Þ­ËÄœ Ç)XåÙ?Ù~à$°_Øa{³ÃÝZý(H>è6úvAj(¼b‡ÃaNçR¹6ˆ^ù¿ñÃáðcûØÒÒÒÎÎpeÁ´.ŠQøHá\Çã7nŒÇãv»ýâ‹/Òó'Í+ç|!hyø— žó7Šmñ†HY“L[^^ît:—/_ÎË®\¹²¶¶¶²²’kc2Ôw‰UÑl6¯]»–×_¾|ygg'Lhšóív›æJžK<P7€ì~€ÅÑ™þá~6 .L&“;wî8“fSLUYmž÷x<¨kù%Ô`" ËÝ+[pÜ=†ÌJ Œ WD“ÃÖ«!¦›§ÇËXqùt e~Èe®=L-žkh‹\øÓPùîÜÆB`½ÍNž&¨ö³Ÿ}â‰'nݺ•-3ášóþUU¡mÆnÚ§Ÿ×yÈ9³*§ðôõ9íz/¨kü›ü¡˜Oöt7:Héž]D®M±°4‡5£3¦è˜¯YI®8v¹d4Æí„Ü‹GU<êÌ)ã¶G1NDVex‡‰Šô}£eÙ4»9ls ‡Ã\Ãp8|úé§íˆe!j¾¦±æs ‘äà9îs%Uït:Íf³Ýnw»Ýü×4u:Îòòòúúz«Õêt:õz½Ûí¦ÜÉú8‡bq¡¼—NIâY«ÕÚÞÞ¾{÷îd2‡‡‡‡Ýn—²’Xž¶<Å™é i­ÐuË:¹páÂk_ûÚíímš% À[ˆ–FuWÍMw¯ Áo˜”¿È@»²¡µ½ äÌ 7kVÓ]…E[Ø%VöL]R˜Á"ñzc•Úœ]jÖ’+!§§•4¨<%Š,sþ$Ù W’kÛÚÚÚÝÝEF½ÕjYƒ^ DM{qùl9·h;û^ë‰mÆN°#,•Gžb³ÙL (ªW”Ý¡1eËqÅOEë’™“·$(Ä-¸þ—l@OÊ5Î/0HϦr+Ȳr@̦3Ð%Ðó€I\a DïÊ8âßh4‚ÇÌC¹xñâÂÂÂ7¸.q¬aCXÌÕûÊVl6›ãñ8’ØFJ­S×jµ2äØh4‚§_»v- ü¹¹¹µµµõõõüI³ÙLœȑx“ˆ«Íô¹"ÙÌE&b­­­]¸p!èàà`<÷ûýTN»»»|»$ò©ƒí¤Pva›÷Q¯×ûýþÓO?õ¶0šrW-@£+ ý~Ÿh”Ë`úèw¬s¦" p„äeÑó€¨Íèkt4 œ m=«²ºˆ|Ö 2Rí8jb1_ß…>{2·eJ<m?o:sœ‰ô³‚›HêYį Ž!uGÒ‚èkû¨âoÏCÎüȶMu¢CZ—ÇÙétr:C¢ª-ò´^,ð—ß»× Ú^œD¨ bbî”/îÑ¢èt:ÇÇÇûûûùPÔ;@ˆ žw)X^l×b(áÓˆsÙò\Å3*ÈŸ»ÿ™? …du"Oÿ›4]>F#˃¥ä×… ¶<çæå£#???Úƒ>xõêÕK—.… 0Nï»ï¾Ë—/Sœ[CÒ&OŠiOW˜5kÑúC™ö?<<ÜÝÝÝÞÞ6Ä¿ººº¾¾ä-ï“u¸³³“ /œ½Ô@6Ë *场~ýºG»Š¦=¤>Êh‹—cNè‘Oó'9¯a”X07²žÇ8²åÀ@êiL^F‰À02ƒwÄ-ðpæepñ!râg1síyíBÊ“…O!E•¥å‹â;à­ýuhíø§’õ”¡`" Û-ïÛ­:­vzrÎ2ÞpÚ’P×dû1bM’T: ·à#V’ãDsÉÆ£ùÒ´¢ )XC†¼Ø'ðgàM&Œ¥ä;¢HžË%*C 6ÌÆÈYxçl9$´žÊg9±ÍQÅH²ÿÜóÐü=d>îܹC¢’€¦A*CÞä›ù“t’xˆy烃Àè Ë3û £Ûí^¼xñ¾ûî»páÂÊÊJˆ/^\ZZZ^^nµZ`t+++iº¸¿eÓ¨qy¡DZC,EC»Ý~ùË_Þjµž{î¹ü׈J€Ôñ4svÛŸ«!³öBÂꦤžL&Íf3d\Lù¸áYÅä¶{ñ{ƒQ‡Y}‘i¶µ8­U§Å»²¶‘È+JXL˜³Ò7E!}T($NXb¯ dlL 'Ù1ƒÂÜž,@#`ù[V ¿´S8sW)­V+¢Š7â=ñ[âiڢ鼗sö$é<û(XÉÜc+Ù'9R“°XSI\E½â:Àò½fÙ Æ‚jÜßÔœÝúa˜ÑT>Îí³WI![êʦÙZ •ëØi‘³Â´õ™AñØ ug¦ I`¤¬\ZZ‡¾“|¯ê´fpÁ²²©¹u¹ca,,,´Z­ÕÕÕv»j†¨™nó‰À§¹B&w¼!³zôêW‚w»Ývż´´´¶¶–ÀùÔSOå^%ç³îè 'A½rôØøÜ¨6GgÀFðUÌÙ|”Û¨Ðû” YÏbòÑö.vYT…Dlî’ù`Ü·m\ëáœÛQ1›®ééé,¹|.ÆÒèqk€¹YVE3¬0Úà"™$­Nû‡š}ÎZM½M¼·ö¹cf 2'hÞ$€rrþÿþdE5O§“BºûW̯x47¯NÓŒ¥7hr½7Q>Èç5°€‡OAŠ<:ëˆlº3'#ðg7ç ¥ ¼’¤‡>Ù+Ùb²!crl³Ïw%„œ]ofó²Q¹!Ÿc,€&&uø8>ˆm©fšÍæúúz§ÓÉ'GU ‘8ýä’ÚívF1^>+$aß?‚,)“àÓRʺuëÖþþ>Ž/ùÉ·¶Ûíˆë÷û”Yù¾€W$ôÏ]¹ð2éÖ-¸yªï¢"ÍGƒO¢mõ«¬ºhò½‹Â’½ž¶ÄÎmŠÔËN»m A€cÁ¦JvÙ)rÝúߨ IDATÄÜv—’iURñþ"£UYøä¾AaóÛò|á¬2U:Û*>9gŒ­Uš fº_M ÃÞÈñ‡Ø…ˆµú‹ZÊÓ9Ì“gRšŽãÁƒ ÈOá¶ä£¡’Ó02ì¬Zêð7+`KŸU3¶¡!@ÊƯ›“ç²AŸóqD‚‚QÃ|¸½GšA ÓPǰ1¬´ÌIî¤íLLí‹ gJ¨4T.]ºá€N§“°!›D$³G­V ¿»J#¥zÎ$ DZà¹Éœª¡2?øàƒ“Éd{{Ó•••€„ÈÖµÛí4å©Âåûæ‘™q@¿ÍSÆ”ÔfŽe­­­…@…J·×ÂB³¢È|S@…Y / ’zÔw/ûªƒÏy[XÓÒÛ°§7]s×ÇL8—‚Àk#vÚ¿Êl[yÚlÛîY³‚¿‡‡‡Á|¶˜ci©{²Iï¬F£ñ²—½¬ßï?ûì³Vc² îyÈ93’´™ Î§ %£€iYLøˆÉvY$éÎXÝ~·ÇPXÂ7‹Ü¬Ë±èèMË×jüT$qXq&…·#:ù´y+MJçC;NUU[[[9’pª‡!ÔV¨ƒ¤‘–í™§4˜4"¾ÂoNà§Rñ©dj;W‹Ù&@…ÆpHYé.äŽWVVBBE/ ÝnçY¬¬¬t:¨óAÞ2㦵ˆð†à”îEF»èÊôûýÜ”µZm0äõóóóW¯^E>5¿ FãâÅ‹ ¸$4noo·Z­Ì…ov% ¥p18L>ÄË,ZÁÀ nâ¹UUíïï#ž”üæÊ,”¯OÓ…l¾5ù82Z¦„â$e¶4%ùA+‹*kÌ[¯hÈÃ]dû™ñ@éÃ93c“[Wˆ$Y½†WsDMÆ!Ø;!ߥrk>·:_¹Ûí¾ño|â‰'®_¿¡£@>9gÖË)R0sÏŒb³£<“Öw%]€œtÜžõqËÑÎö(ÔúO*™dûP0ËË~…`ãÖ”ÇÙ2¿á¾!§X>*= ¶nÎb{¿„]ÚàŽ74;ÎÝÔ8ûz$Þji>ª­n¯ÛFˆ *™°É,gÐ¥¥¥ü2©}^‰^x¶½y‰,¾{­Vë×ú?|á‡s‘?që'ækó£Ñ(y“^¯wçÎ|‘|bÚr¹· ?‰7ÖP ˜6 –––2dõ-ãÆ>šÒì=á èD„½sN}c™Xûtòp¡›,îñX¢ra¹Æœ–-à¶%nQ’õ"gûðí¬ˆh~Ù[Þ$íKT¸Áiêi¢ù¥Ð²­bP³½+`´œ6xî1µ ¯H8CõD;†Ñy•sö7÷Š)ÈHWURjÊ?ð×B[Él.«×hüàT¥÷À‰P0Ù´L6 gzaaáu¯{Ýk_ûÚG}ô÷ÿ÷½‡íŒRÈ"A=ßš ;[|zÚ`:nllüò/ÿòþþ~†]š€þ™åL¨ÉoÁâàÒ0ÜN`Ÿi÷±‰ˆ Ãá/>à$¬$wžr ÌÂq a޵Z­ÄãôuâJŸ>1—´e sK6Üë®Õ'h}à‹õ/~ààÇÕñh4úÑû~ô¡‹ýíÍ¿=Ø$ÀÔëõ¨‘¦!â@`1¸áIçà/­®®"°”«µzŽNtõ©D±‡ æp7ÑOZ¹’”$´.Î_Òö`zNÚŠÚÝH©›yÔ©ð˜Ù X.e¡ús-¯ Íõs3$I@y‚ “ÍÍÍacHID¡Ï›[Î\M*s=KÌn?zJ¢ÂW‚̃8Vu… âM”\-}Êíííós–?<Ü« gÓ#iNñ’S8<Ô3R"À³Á @t2 Ì!”âæ-'BþqáÂ…w½ë]ßüÍß|||üÜsÏe¶ÎÑ‹Kå¼%,SOªU u@a½^ï™gžá²Í¥±`6½Y\s¦$º.5Ü^fÓyÛP  T¨´Ð!źxrOËÃð¹HÏœ>ùÐÐrOÖÖÖÖÖÖ’0æÅ|\Þs4äÈX]]ã©ýüüÏ·Ž[?tøC?ÙùÉüæ/ôþ“µ'ÿÅ¥ñÃõ¦MB}{›8ƒùðð0ó7óóóËËËé™QlµZ-»”m+“Ü”Õn~¼ÝhÑ+Ù6Ìs±Ÿ“}7?¼#XuÌ{Áè-Œ õ¦YÈaJM\ äé’ ˜;à›@oƒX éÆv>³Ûö§¤&ê0QPÈ6¢PEÚÇty6x®Ùô$ ÉêæççƒxçYžŽíÛáBè¸xñâûÞ÷¾étúë¿þëçs9gÜË)t2³¾-þá–šÝ.I-t]‚PÚ4Z¶Ñç‡ÝhtŽ$Ëô•~¿ÿùÏþÎ;_úÒ—<¥ŠVÓ|¾¸}E™Ü¶5ŽÃFõô\°2«~&ÍÅ=78àÁÆYÀÓÃ.ÉsiùWâM•‚TJ´ø¢Í¶¸¸Mh°Áx¬u»Ýf³É_zõy·½½½^¯·¹¹ÞZBlþ6»}caãÓO/-Î׿ÿíî¿Í#ø`ëƒO,>±y¼y£yãZíZeb‰Ùœãœ\AN­Í­°Þs,Gão¼ÆPs¡xOr›F"÷³0•ɡɠWÞ™¢áaˆì…l‡ËÜJ²f™©´ ˆ¾¥nïo²z=XVÌ 8zk§ú4¬Ê¿ÙY'žWeèÍ~îìZòΈº¥Ò\˜&JéY|ä¹Þ¾}{0$89gÌ."Ñ6ë#ٌÑ4߯ïö~Î8$T™dv¨¼Tòú5òaŸB”¼ßïÿÎïüΣ>Šœy‰';Ýj«K{ÉaÀ“€ž*5_ [eü?GoUU5ÿ+ó‹Y$J#Pœk ø´‰å–§ƒ\îáqãBITSWAL•™‚"Vjk8†Ðív_ýêWw»ÝÈšu»ÝD—x}¦—“ç•§Ëh·Û´‚ÜØ8::zjî©-~ìŸïýó÷MÞ7=¾¾ÿõÿþÑéGÿÜÊŸûÊÜW<~°±ÝnGÍ3ä‚„::é¢ááttt6ZBNdí­vì™´÷SÉ»‰¹¥8ÌÒíÿäôÌ?81=2ÌR'À: µ©½¢­MƒMm'‹Ür´îϹbÁ¶Ï›H°T<÷eE‹ÙÇ)Ä ¥ó¯©um´ÜfÕÐ^<‡ÍÚ™Ù×”Óöçæ.ÝsÎTR,äz¶¶¶þãüÓéôààà\ðæŒµ¢µ_¾oÔÕ c–›†A„= Ϻ'qàš‚ÌîªNæ.‹F·{†¦Ÿ&$T'Z)9mi­›¦b˜žÂ&¸Œ`ÌÍt~tÍë«jÕè=£áû‡‹?µ¸úVƒÁá÷üØAëϵª§(CdxÎ[“Êhž% ¥gr@ÃŒ¹¤ s¡A`¦ða&uCfkÒ{ït:¯yÍkÞùÎw¶ÛíGyd<¯®®†Eˆè["CžQ*i™8奄Ö&¾÷翽ÿíÓúKšå“Éä-£·üÕþ_ŒïµñkµZ†I“+ܹs'ÎÁ qœÛÜ܇ ¬–Ü………ýýý;wîìíí¡#}Ëà0C‘To l¦1†Ô&°¤g Îu‹È~z¾Ï€i¨„+X€äyÍŒˆæ|QH™\jKM¶*QЊPQˆ)|䜃æm±Í…1:ÊÛæ–¦ä¥¦az¢Ó‰¥7¸ŸÉlîi6£Õ( ^Ù>Óétss^ûyÈ9{ÆdâVK‹"}ú·0”R;ö ºà ÂÌ0?TñŒnxįk:níVá&We"ˆA §±Õi'Ð"ù¦©Þ>è£ÌÍÍMî›~ïáúŸX¿ÿþû/_¾üÜösw~æÎÂ?Zè}¢×xkã%BàýsãoÏÍÍUûUõÙ{ºA¶6 »à™VtvÓœ@ˆÁ´%ÏFæ­ÒÀYþ#2‰7KKK«««‘p®ªªÝnG·8þÖéåØ˜ì˜SWQá›Ö§·§··'Û+ó+î“õªÞÝêîd:£‘<‡ÃáÁÁÁt:}à(†Ãa šÍf!@P­VÛßßOK 4ˆŠK ëÄþ1EσÄÈÖüCø]Y´¨ÓzÙä³ðºu£(Ë6íß\€«0 í¥¼ ^{{{É­ÎGÖEÆ û#ïC²h-† WÙ­‘{…”ìÐ ce!%KKr“I)W?ÄT³Ú@Âóά¨‚Dš¿M/ÐÓHx3R~áç!çÌ~ û‹1#?LtÙÞÞ¶ ñ#u ié¶Ó†T’õDÉÑX9UHákàKu¦“CŸd­Ú¡ášbE¹9+¾ˆ7…1ùaÏDþ×o~¤yíÚµ÷½ï}ßøßøéOú·~ë·666Æÿ™ãúGêUU~x4מ««Ú\m:™Nß:ûèÜñM:ðÉWsG7×ïIFkÎ{ëzžÜ ììÆDˆÉ$Ž766~ï÷~/ò6!I› oÉ^:C&G4‡ËáááÁäà·®þÖŸþ野²þ£K~¨õ¡·Þzk|—9XCH?æÖ­[°¥3všÛÞZ«ÕJ=×ëõRÁcÌLA¾æ ÇVd¡p縟ռ!}Žz‚ÙÓ+Vµfa½ìùD›z¸çÄU™lBt·ýa#ývëH®<6e§žóR!E %=…&?2Ò5~ƒÊ¢avÎF!ÌJw¯«:íÊaä£`T›xé*Ö“&Už‡œ39Î5 •y”ÏK0 …›–ý笴háýE +HÀ, gk ÈH—ë~¹´´Ôn·ÓÚa¨Ó³«àÔÙìJBŸÊÜ»C5öÒi‰ïñÕï¹ú­ïýÖw¿ûÝ÷ßÿÊÊÊ­[·ƒÁñoï½oþ7æG?>ª?V¯=[[øÒB½^?\:œ~Ûtú]ÓãþññW=únp†¡ñ\0œÀ:'*EÃ,ó¦0åA+Ë[¼Ê¹"òæææx<^[[ ŽšKjµZ$Ë©º*M›‡!’\8¶pØ677kÃÚŸûã¿xÿ/þöñoÿ“Þ?É5ÿØÊ=^ü;Çßù¦êMý~?Q'%éx<ÞßßO=½»»›ã5f9ãñøöíÛ½^/ÉlPµ¼~ww7a&ñ&¬ßt}0ÈàÜIEB€´f%S2Î5V85¨“˜°üØ ÖOجä¡i±>Ç6‚“»)F i^&ý"í€hçIÐË[@e6+µ’ˆ{º#¨_#ÄÏëó‹4;ŠpyH°°É]ð_@y$Χ„_P` ÝV@” ¬vÚ>9grèjûØ47%*9Û@Bßa R€Šc1ç!,qêw(LJr–lWkh1ec«B´EÑÄ)ê¬. r•4²`(åÛy°†ìõÞž¯ŽÓô‡ƒÁàîÝ»/¾øb¿ß¶‡ÇGÇÓÖtüðxíƒkU¿jvšõzýhï¨úõjüߌ§÷OëO¿4pSÄ™áͬFrüT“ `ýÄTæQòì ÂOê¼€u‰%¡d &b3yî xiZ¸ô± ‘%è·¶¶vvvnÞ¼9N¯]ºv­uíÍKo~çÊ;窹ãêøïìÿ××_¿Wí]9º²UÛÊ.íâùùù .,,,\½z•¢=7Û*' ž7)K"dKÓ ³H'vfc^·€º¤eÁ÷òoÈœ¬(·ìÃäèÄÔ2Dkøeæ1Ï‹H`aŠH¸â5´Æ4Tžcž”-ÕIóz+§åˆ×±/‚j²Á÷®ò¹,Ì@1R&Õ‰.ꋎ~炌ãÈ•AN§9?9g@’Æ$ÜÝHS“­WÁ¬N|ѳ2E~ f­Y(„Î‹Ö µµsø6vã ¦ÍcŽúóÖvüš”ð+ö’C&.;Ü·HžÜm©m½|듟üät:½zõê§>õ©Ç{¬×ëMÞ1©ÿn}ôwFK?·4Ú]¹rå[¾å[ºÝî§>õ©çŸ¾ñFÿcýÆŸlL'6R´„Z.€€”áÜÜ·XÑrYYx·PùÅ„XM¯×Ûßß_^^|[=$±ÌLø4ÌÇÅ[“1É<£ÝÝÝܺ÷>óÞ_þø/táÇö,1õ_5þÕ7Œ¾áGvd0$Ng†¢véÒ¥|0Öp^¨„d¸$ÇÇÇ{{{»»»[[[i䤨Íùîu%Ó Üt¸`OãÒ!øƒ6s ¯³FQÊššËÈ*²øu¢~†óYÅà0Z¸íY‡·:­² ì rkšuþ<%MSHç^E€ê$pŒF¥-︼2E³{Í~ç³Úà±öù-æ%®ß;"ý^rˆ N'K¥’PJ©Æïèè¨×ëõûýáp˜`@Ï„=Û“óÜù¾ÖÂq}é1Ï”ø¿V'JÜ Jpòq+E)Ú–ÖO–†rRѨgYÕ†â€ÜßjlhðEX T8ϺڦÄ÷ô´w(µ‘œÈj`D‹:Ó”D¶OÆd"8ÛР‹gÒ}3ÀöA€=á×l6‹zè<äœA•ÃcöØ „NNØJ“p1íÉaerU™³'sóéúX¡DõErCæ.IèâÊWÄ ÷„ ã5sÁù lIí‰.u«^‚b6çç?9¿óîÿïÇ - ‡ÃÃï=œü™Ió6§ÓéñÑK=êÑh´³³³½½}XWsU%×ă™NíñèhRNŸ_W´²µùÓ4m6ŒO á9if®!m¤hü$„Ðý¦lÇ›››©oR!Eòµ‚ÅÅÅÖ\ëýûïÏ Ûl6«…—HG¡8‡ P¯×wwwïܹsõêÕ‹/B‡cºhmm-:™L2…º¹¹¹³³Óï÷{½^  :r{“‹‡ìG^eQ ŠÜ±|¤)¹³}Ô£pÒ¬ñåQƒYˆ“òJÀ^SÚœ¼Ó£r'2ÁÆ·¦ÀA[§3dÂtøxŽ=I¹‚ ÿ!—ÚCÝZ'Ü|A¨:íôjTƒíCÈ¡#Üè<äœÍmâI ÿÅ*ÄäÃ\F[Bº·x°Çqò)ÑÂ[3ƒæ õ2 ÍñLº'­`³x¨ÞÜ\:“fO’Þ"ÅI©OöC¦^ˆÇ÷€ÇƒÉüÿ1?ÿkóï`òð¤:®æy¾ý£íúíút~:÷¿Í q¸òC+_üâög¶V«=þøãý~ð÷ؘ›ÎÍÕæ¨)eÜíô(u.æÒ¥K‡‡‡»»» o–9@ ÓÍ,Jí±M}I<‹½&¶`#–I6•#c45›ÍÃÃÃííí~¿¿±±Ñjµ.\¸PIIšêp)™Dš|åL¼‰¸çÑÑÑ•+W¥Y{(اy377····±±±»»»³³c™%çªu(Ådé<ýç<ð^šã¼:­”èWœéf‹ÙU‹Ñ ´!/§vr»”AŒ$ A[ãoYÒF£™¶Í’!»â qs€´Æ~ †{BÙç‚) ˆš}ê\‚Šóìøj¨4A„KnäkHÔñ°«èXûº¨r(qš2OkaÇ0%píbŠ…)N@ì LËNúÌyÀUXÊ#!JV˜µå¡nð ëÝÎŽÚØ€¿M7žcÚ1dnÓüs¯??ªÕn×j­¶x|ïŽUõªªWµZmº;­}¹6yçäÖWnÝþüí¥¥¥Ã¥Ãá;‡sõ¹¹ë/‹9\ñƒ`š!þ`o|ãŸþùŒRÛ?‘Çbkuâ—û‰Û4ÌÆ¡hÅO&“v»!óåååÉdFY¼ fi?¶&“I«ÕJ´ØÞÞ¾zõêòòrú(™ †ò@qÌ2Häã _XXX]]]YY¹xñ"O³ßïß½{÷îÝ»áÂmoo'wÉøg\¶¶¶vwwÓß2·®´xŸ¹@[äIÉë-¸ònÀ\Ù܈ü€‰×[ðÚR cMû•“y@ü&9\ ÎP'ÌHÆ[A ‚+d wjˆ”†\m¶I,b£QiT3ÑÈ|—YäO¦ƒi&L–imr_øÙ•f¢[PÇÜúBá;†€dªF$ÏCΙ…ƒ{úc1™è6úzp¾bSuÅ^Óq.‡ ei˜Ì¨¤vcENTf7-H`IZ©f°ZA‹uŸŒžÕ5S8?H‰ÐðõƒW0;ø÷÷Þ¿wüÐññŸ8ÕGGÓ£ê¨ZúðRýéúôxjß¾‚ÁkZ§-ÿÈ# dlÞTè¯h¿éJ×7ïŸ\Òî;a"áç–‡µ··G/:ï÷îÝ/ùËÛÛÛUi·Û»»» 0½^o<¯¯¯G÷,³>ÅàENÉÕÕÕèC7•••X‘FÒ1Ë£×ëíììD\ààà`kk+LèÁ`Ðëõ¶··÷÷÷wvv2DJdG%Ƀç€g‚tÁ‡¦8ƒÏéu˜ÚÅ'¨‡ñW– ¤"0LD%dÄŒHÆ…ŸfíädЬœJþ~$OŒ?[¬ÚA(‹#;[A/,,¬¯¯÷ûý~¿oýéTÀÕŒUA% <ÿ•¾`ò’+‚aäw6fƒW?h+îOð<äœåO1;Yd@äDî^®¡'™` L-•Ó½ûâbÖ“ÅÏÐ=ÇCÂ8ëYB†â²Æø@­VÃk²’C‰Ýhèâbè â-ŠXgª+g©”>lÐE0<^š9ý™ÚñËŽ¿éøè訶W›û/s …éñ½ô³èBån<1¡€©þ»wï¶ÀE=Ys(Üm&b4 c0ÃP§ìFœM2†EçË—/‡Ãíím™*IZ¥dÉŸ‡€@ÂHèB\¤1{tt´²²’ï8Ûív>7Œ¸\O¿ßïv»“Édggçèè¨ÓéŒF£N§“ Ͱ·wvv¸ÿa*¯¬¬,/////ÏÏÏonnFýÎzøµÁg2C\ ÖV —ÝÝÝ›7oÞ¼yóÅ_ÜÜÜ ù¸¤¡«¦HMŽ%L:`¿ž(Â`‚gm)[ÐWç=VH2ÎL­¬Ü’ÒNù‹“=ìbòÚS¹°àÛA;ÝÚL¤±8¬òlÿ «-b9&ØZ– ‘5šuA½`)æR+{>i¶âqJ—…¦*Ù:r¶g6WþLnoÓèŠÆíº´‡œÊLD„½•Š´ŸbìLŸÁ·Jþ¡©Æï`íÊÜÚ“maâž''èRp|(­¬¬Ôjµ­­-*-‹ŸÛÕŠ‰eãuÙ–¶y÷~+Â0üà,ëoxúÝnp§YHÓMZ6^:HϹ¶h$[ ÈF˜"‘O×Ä>Ù4oâ~–¾}ÒÞ0 2s3rµØ$üçfæ¶4›Í^¯÷ì³Ï¦/=77wß}÷-,,¤Ž‰Þóx<¾pሡ4ïLx‹BÅ’ØL;Í0íAô›-♯ìjÏIgáÃmÇFÄ’3Á8¨ä›îD›IåÎa1…fÙB{®ÜiåyÈ9ƒz¤EÉo ô‚CÂntmDJE½Bbå·²¹ûaÖº^¯¯¯¯/..Þ¸q#oeIsÆQ=pÇàxnUU9©­pÖD+Þó vù„Âäq¿"±ÅX…S#ƒüáÝ»woܸ‘IM(t_™•aš2E¯íímÔ$-bOàt$(ÏfòPo’&w:4ussúý~_&*FHeÛÛÛËËËyeæ7éÇk0ìííåß év»ív;–á›ü ‰jºÕÀ?ƒaøàààÎ;›››½^okk«×ëå…Åž÷Ä2Àއ‡‡9Ίü®ÄªÜœÔ[´µ¬o AßÎÖf-D =qé:Æë?Ÿšªkuuõ›¾é›®_¿þä“O‚ñ‡Ö|*°&“â|¼š-æÖ& zî'±ÙB·vbÓ%·`_PßüA©­{]mBßÃ^a `“á%mzïDgæÉ²Üœžpæ{(„¡“øxboœÓ'¤€¼yгê´Ãi&1ãŠÆHVº,0ekµÚý÷ßÿÊW¾òƽ^/Ê4¡–%üìïï/..^¼xquu5XÍÞÞÞÞÞ^DÛ"@—@˜h41 ÎV¯×oß¾­\މ_|ñ™gžyá…¶··C qÂAƧŸGÅSû,$I ‹)”Ñ=/âÇjÝÏê´›_¾Gw8èºKg^uèTºùÜ/|á žš%"÷d€Æ’q°p€©NfÚù]8kº{Ëäÿ&¨4ÇMפ W¯ãX€±‚–9ß N, u›Ásº" 0ÆóÚt¬ =Öós–£9,SóǼ­NÛ'{^.ÖìI“‘zÅÏÜüÅü>çOm¬–Jc˜ÃkÚTÚ$‰”ÛA!¡’7± YÍ)׈7ÕÉ€*Ãh õ¡“ìÛª°õñ‰›7o†Eêè’=;M½›ÏŠ6Áh4êõz¦‡”iá¼ð »»»½^h%“CLéB&†Ñ‡š§,³$¯’ §6†I5PJÞ‡ŒŠþgŠ«ÓV„,lýònËËË+++wîÜéõzнì/•0ŸGPØÚ²˜MV4‹6PNs˜“ Æ4Bô¨ZZ*ùº&™cpŠ™‹m&¸&«@W‰…ZÖ˱† Í,p9~èæ!ÑŽ¦Z%õtZe³]´ós6!95æË,«^8°‹\qທPp™ÆF÷¨H…|^»Hw»¾ðÃg,oèÌ ÄtúPb¬lfø®šQ_7ó²(¡ˆL>k|omžH™ííæªCZAB³ÉaŸ›<:›Q¢&’mœ ¹YæSåæç('bߺukwww~~þâÅ‹.\HÓ%µlþ®cÄ4ÓËiµZaZW'Ò;;;é±Å4:õ`0ÈäGþoàµÐ¥ŒãžØ–Âwn²©M0µŽŽŽ\ô¸ éF y\ÅN©Neú—^Õiïs ù5÷ca9ãªÔ•ràrO ·ì\•w/‰^Ö|MÜ31lTÃØí\Ë«Ì:GÍ*ŽÀÎ@¦-)+?ÒiCÕ ·%͘¨dæ¾Y^¡:‘Ñ£ÉD°LA™+‡ëëëN‡ÐÕn·“&ÚPZu:„“Üœ¬OÝãµÌÓŒÇã­­­Cyv‡‡‡ù¿˜î p‚JE„V¾)V,´/³f¡ÈcÀY$+ð’É· רx†4νÝÝÝ»³ö@t V;øy²„sé#Îtó€`ß%fT'bÕ®¨ŒDY¸ Ò å;¼öä`{Ò Ã,Îñ†©êÂõ.k)ËÉ"uÅô…yh–ëõ¤ šRعTá¿urÎ’>À¿Í”gMäs»_Í*O¼ñDôK7úfc³L¤Šl`–ƒÊžƒC3Ø1•ücœÐU'ÎÁSfÁš$jÑ Ž¢9 ªPàáNÉjµZ æp¢<}=77×ív»Ýîîî.Éæ\XÎŽr“ûfeËѱ'»wä–€¢) Л ‡£4!$å7qŽôÅì¡ê´$ýW>zÖMÇ“Ñù‚H%T; «OÙíÙÕtïà4ùsÍï(O‹ƒ¸½JƒŠ¡´sÆÚYþ g™ÜøÛz·ÎGèõá0ÈhÑ^7å7ôJ`ŠY®Êä.êÍ W‚’Ä”£ŽqîrÁƼ«M“K‡Ã'Ÿ|òúõë9òh¤S{‘&h¯y7V'ÊÖö|Ì‹s¾‡—¼ººÊS(À¢YV’‹30ܼo®˜Ö&W'6  LOZT@¹" {{{+++¹ÃãñøæÍ›ëëë/^LeV¯×¯\¹ò²—½,ÂÃéU$‚îîîÖëõR …W¯×sŸéQçR¹1+ªrû7{nƒ4¥p62!°XœÀJpö,ɃT˜úœÈ\[qžÒ\4SÑ+?oh®GþÓl ª Ê»[IÀÚµ|Aãv}@ß‹ÒÜ¢:í]bÖuA”0ûÀ0žß¼¿¡öZRŒ¨Û­÷Hw3G‡U!¨5ý)@‘^ üÕñyÈ9³“BÞä}w§í ƒ HÖ"äiàÑô*öööÈA´é¯Ðc^6,ã¨(Ôb¬„å ã¨dˆŽ> y·pšÊ‹ MYÈ GGG/¼ð‚[Ä¡h{°Ù狇®9fåè s-’Üããã43VVVÆÞÞîÙ”N’?Ú}„¦l‚B”:±$dii)X÷3ï9ç›sŽ'lÿ‰MÀÅ‹ÓÒ­ ÒÎÓéô¾ûî»téÒÊÊJ¢ ŒçÄ1A o­ž{\p¼<¦°R¯$àÑ6/F¦8Iã ÇCAŹ:±à›L&Íf“É-súD†ÉmŽVî|1DY4–Š Ú†…SrÞˆ„†ÿ–¯re“«œ}>F³¾Éõ°9àÛ˜Rg°mm-Ù4Ö¼#°±‹":ÿ—ø U4‡QHSî¢ÎÉÖe4/à8q7A"Wø+J)S2‘ƒ·c(UU-//jîS/\z¡©¿»»ûò/¿8¹˜U1â<[šÎÞ )s%F#£ è±K‰¬œSH“鯹 e s?a{U˜í"j!µÙÔ”‹0à¤l!mÚÈ™N’å˜'ó1MºÀ”%ˆwÂ}û\'>ë¦KX¢,·:íXãûDfŠ j0]1W`¹,goYÞÅC)„äPÙŒ¨dq‡I%)’ÀyŽgØÎ99•Û!…£;Pt)^ñ¬NücТHCÙszEžg¶´õ ‚àæg%Í7¶ 0Îê×z°±¯ q¶¢ßXIõ„= µ‰­È‰O¹CŠW/Š‘nr¿ß_[[ $Åງ~Œã›^Áa6Ö]S¨Üv&"ñFK“NŒ§£KMâræZ2Ž:N£U³¼¼ [)ÿð4ø3õgþeû_þçæ~ûÝ·7š<ðÈç_õùk[×Þñ¿£Ýn[MنܢF£‘yIîs.ÞöN.Á\+P\"GŠƒ™wÁÙ¥rµÐ‘]m(% ÅO?YdW,•FÌÈ7²æ7’²‹‹‹áøYâÅ2nÈv°I]X[YЦˆQYî›otjOÿÀ7qç•÷ ATsÆfõOÃÂ.z?½Ç ·Lžf%3Íòb,sK¶½gIÐ<;ÖΘ>UØŠß“wpÔÎJëW'"²î“#bfŽ‹Þ½zkÞ@^$ !á*¤£¯ùÜ!F"o ¿…Ñlòf7ê98Çf^ ‰3CP¤Ê­C”Ï‚Ê ô¼³³³¾¾Îð<±ª’²\á·MÛØBf¢½˜Ëh4Ýn7lT”åË$@Œ•¼!‘ !­Ýn§’HŸ#Õ@»Ýn6›}¬ÿÖh4Ž{Uï/üàã WUõ{ßûà¾íöÛž­žý©7þTÿ¨ÿ§>ù§‚ÂeÐsW ÜXÍ ¨ƒ†+­ é¢ÙK±TÆÇ,ºÁãÎÙÇ‘÷ `h¶z%ÿ@¹@!£pqc‰ê„c×…Ô•+W^ûÚ×¾øâ‹¿û»¿Ëœ Üç@±*9¯¦@Id%*¸F.BÑæIO«mÎrvŸS.'R\+vY1ÙÃÔ9¡ÎÀµãtr ¤¶©ÑÍšñX7CHXâ~MIªós¨šMô $cæÅà#O›¢ck,ËlP›èÂ"#Mò’F«¦:-´Ã K)°°°!Ã>ìçÈŽ& -¹k#c¡†üY¼;Ó²¡äL•/,,DRӼ˾n‘ólq(¶4öß#}f&ºÃá0ÄèñxÑ9”ÖòÃÃN}@Æ€i9þBøfð°V«Ý]¼ûÝï|¡öÂßÚû[ß¿÷ýµƒ¿øÆ¿øæÛoþÎg¾óÁñƒÏ^}vº6½ÔºµWÒDWrJªØÒ{§ßB7î…°‚)Lèáóšêd<6k;.y1Ïš{nq6s«, •ÞψÃ=·Îm$–‰R‹‹‹èý¡·½ímŸýìgüqö®Ì˜=[o¦:-àÏÜ 3.†¾Á¥Í”#ó–'’Ø`Ájqï‡×GÐ(׿7`²“B†tàf0,iCW¯˜=r‡ÐÎ!4ŸósÆUÿ(Ï=°â?ŸŒÄ“ÚÛšи–¥£©y}žìš”ó ñT]µ4ºí—cEË#V§O-×fÁ.[…RΗٶ¤’‡3kÓ"* r ZE?8JÔ—ð‹¸'ÈЇË~N L&ñ …HÎâ¸ãìïï§²Í »¼¼Ì× ´’ÙOˆdéñäAÄø ^¯7›Mf÷B6³´þ7ü÷ë¿ÿ¶ñÛ~tô£Ó…é…Ú…n}ôg—öéoxúgžÿ™w¼îŸyÓg¾ç±ï988àL·s6ØEFXp`¿q€õ#“9¹htUÁ r8—*@ÑB¿•¡÷JÚeÕé9Lj‚–YìšU0ýæ®KªªŠ·ÛE¬FNX¸…Õi•뜪LøÂ`<¤Ž½€`ϱÀµŠÞ>ŽÆ¢‹øÇm) 6êWÐrvíFÖ_@¹ `ОXîgċϫœ³ÿAúÅ==À1H54ü™ë¶«&¢õõ\ž3®ìɃb$}‹/‹>û$½n{£Q{5 Ú ùˆì´RTÖNíÓo€@œ—ÙÛn4É#sgºíaøn€kX\’OuzšÏ–ÓêÂC!øI*³©á#·&Tif×ûý>¢pü!md¿˜U‡$e4ܲ“s3a¡úƒ“WŽW9¹«þ¹Öϛ㪪šæòòr§Ó‰D[̶ó)Qd¨N”%¹°‹¹æDÖ@mÕ‰¤©çÝ®(œÜQ°~¹3c7P]Òpös9œéä¹I±õµò@ ™2b Ó½RDÓ 6 ,G$Ãö6{/uÙžf0˜5¤Vôÿ=¸Í‚¬dè6c ¼Užs¢£f°=±È.Uoe%P;‘Sè“NUR*‚¯‘C06 ©ß"Û£f¤.Í?wjÏCÎYÖ7Yë³ãÇH°XŸ ‹¾_aÀ|ÀnQžȆ7Ìê² :-†ÕÑ(s¦lÞÙ¦×@|¡Á¥ÖÁn%¹R.۾Ö} ¼“ Ê€³™¶+M0¶r»ËØBA¡æ̵x:ÄÈXéT'2ˆ ÷"b”ÀF}F(“ÿ)€¢/—p›Âb:æd'ÍÌLìÉé“Ъªâ¬“²#gú+†¯x¶ñìàpð­ÃoýRýK¿¼ðËoÛy[}P߸¸q£vc®š{ûèíÍ…f5©¨(•òøz½^Ä,ƒ^¯®ÊüüüêêjÄá/˜Òà4pMî$+HZ¥©{pQ“àÁ²š<¨”Ëø0i‡ó°\0È`–§™”µ³T¡pÁp›QbÈÊžq†ÿ¼ìiS·ú]:³Y éeÒ@Á 6FüNÊë3Ñð³·z1[M³h[¾>5 Êßþ[úˆ`Ý<_.ì<äœñC‹„çhH¦ÛÃBœž‰34̪Ú&Ù$¢önîìnx€ŸTBZdó`ÃdˆKKKIyìòkâ„¥¤‡¬ÝJž¡f¬1qfnÑ2IÚ"¦;F>œ€¼•ïamL ûš÷á,³uwq&“I»ÝÎ[A•Žî@Òí$­ôò‰I]“}SÚÆ† !¶ÛíÖëõo¯¾ýýõ÷¿}ðöŸ|ñ'?¾òñ_èüÂZÿOÍqó‰Î¯½îûûßÿ½ƒï/Œ­y‘§™Ô>QC½ÑX+@ã³óIV©Õæ£ “7R+Ó¾yÜ´a̻ᒌ…ræÁ¿(r-TSì|+àÑU2å{uŒù­¹ª«Jn0qŠ÷׉˔æiçTI¦IæÖBy,ÈY±`*Q›âTUxÛ>‹’uÁ64Ö ¥mÖ±ô<äœ iÍÇ%uÉì0&ɾ› ¬!º¸·äh¼¦!oo·BŸÆÛž¼Éä".Øðˆ=½°WaO8³ô®¦2à ÇÐ  ÉÖe`ÝÃÆá†xf“;yMà Ä9h•Mçn¸ÕìÃwnn®ÓéäàNÈžÌçFu&¼gÔHéåÔŽµÀ:4â”qܸͧqÃ=­<ú½½½ùùùv»ý]w¾ë'þÉkÇ×~âöOü±½?ö\ý¹¿òà_ùîƒïþ›[óbíbm¡ÆàHÌÙx@±?°BÚþþ>³A¡  ¥]¸‡Ù®Õäõêô¸qÖÄÔ|Ý)«Áº­Â×â•,`ûN1ïY÷é ¨¬gî¬3Ï,[+æ¤7£ù5Jr8€‰… ˜p k‚Ÿy›F­áZC¤à­…]ú[´uMùaÍ3íB–‹4OÇÈo…¡V«;9go’ì0Cö ™„5 zë12‹#å\ÀÜÞÎ49(ÍøÊa}É,å¬<Ì]ò't2a%pô{tÀ3+0SÁ¬Ü䬾Ö8\¬¢ŠD {ÒÙŸD *A…ɺóD4Á‚51¹™®LèÂUUÁå…zG!%!_ÈÞ¢/HaNN~ŒÙÙÙAþk4u»]fûoòʰ9²ZòâêÄŒ`gggyaùǧ?þÔÚSßõêï:>>îL;~ùÑ¥ù¥ZU›,¾Tbfzc<Ç-”˜Ún·Ó?OýD¨Î Ï5˜/`( Î’›‘¦¶Ã.+¸ì©PÄ@ñÏM²Ô^9í+Hzn­#Þ„ä]$a¦5ÎÚ3ób ßaêc¬ÌÍy48ŽdfÍó‰V;5~Îß²ûŒF€•ͺàðƒ>2²ö`Àˆ@ ˜Vh³’JÂ0„‹Dþç9¤"Ú.ï<äœ%} ø '²g_\v00\I¨•µnKb4yl©͑±Šù>}4„áÏ$RñÌvñAù^àòžB{LÆ£$z0œ Ó¬f§™zk4Ò’½ücfq’\¾)p”Ä1‚³\¸ùññq¯×[^^6g2 '}þòÊ8ñä>o82r7z½™GžOä@“#L¦^I'¸’3P’S²ZR<*§Â’Ç:Iwb¡‰¼Ö|ˤ§m:5£ì–´²@ S>V«N\¿Ìó†D`á)¬h-&’Yl4v8Ek=<·Èq‚Û„iÆQj¤†æL‰:'ÿ&ð§JÎ`PJx’æz²RpdЕQA«Ýä"#FŒ£[j#"ô»ºÝn@?êΔîÛ‡©ðj+ܬ­xfÉvÞŸG•ª$Ï×°ñÛê´µ®uù*¹”R&‹ÂÑ\8Óm ßãŠMe_ÍèœzéÚ’®ˆ FG0n_IׇHl„ï¼@ÓÄϵ3þºn™Hvn²ÕÉd8ø†“qóJ³½“/"ÝÎþ§„Ϧò4x%={ú’ʹ1hY'ÂR ZînÂR%N¬àÑÌO©‘Sϼj÷¢Øl¦ÄØZx¬ÜÙ€{¦Ššd†:i,81ÏœõƒÁ •DuÚÜÉ/’Jôl<ö1¤Ò2(ƒlZB/Ied°g‡üiòæùeÈ~P0{õ— ¨•gÑh4‚àE])tÐ60Ï,*úU|MîŒÏD¦ýó ÐõªNîµ³³H3Ák•Œ™3Ö'Åwá‘áZ™'ÂçšåÏ^Ы\-(»ƒXly*gUÒK„f¹`PYD4ì£Á½­f$Eæ=“7òc¦Ÿ™rEc¿`Фu„ª–Ú ]D3 †ÃaâÀxÁŸ6†qr¾.jg)°s4ÀŽ‘e°2TI6‘Ø3LœŸ4þ ܬ¡Pu­€R,šB‹Þ„ov©3)ÿƒæm¡Øfu[šqQóž/œ³+iöY•凋Aœ4üé{9‡m6›AòE:1†™ïÔ2byy9Ãh4:<<Œ~wŒ°Ç‰Éa+ ¯!™ÿ—½w±ü>ïû~3çÌåÌÌîìrÉ]™W-%R&EØfE‰¶‘¤¶Y©l¹p…ݺ²kÇ@‹A›pÑ´/âi㤲£ /QÛiåKäJ*Šˆ‚d™¤%R–H-ïär¹÷ٹϙ™sf¦/¾œ?ó¶oG/μVËÙsþ—ßï÷<Ï÷ù>ßoÎÜÉÉÉœû™Èɉ€ÈtøoP‡ÉBÀd¬›—y‹\[>¡µÊ5¯rqq‘ÀÇ»½½5“>Öúúzœ1ͽä„Í«Éoæ“———S.¸gz=¯†¾×ÃÚ¶ô¸=ÔK»Þ­Ž¼ <+¶•)Usô2©Ú¶–{)¢eÓìîLp2•Æá  ­ÊbJ þ ¬2S y=jµõ"ÞÓΪ°:œev.(w1TÌç{ählÑvü?†\=©à`ŒµŒ,,,ÎîäÈÌd±@MŽ,Òÿg=L€™ QÍè¶=9Ý8ÍÉÝ ØØŸÊ² pI©è»æ d¯'ö ˜Qþ‚Áz׎n8cºÓétn»í¶­­­ˆ¸ÀŽ“ ']”›cš™6¬ñ“ÔN¦§§S ´ÖŸ2"ó!B‚Iº¶æÞE˜„Ï ŽV#„é„T„y§NJY“†DŸ6;;›ú üÖ,@Mš‚0!s^ÓÛÙÙ‰êÁÚÚZ˜yAÐå›tò­‹gÒ™*•SÚãMs—¤  ¡YR/Z’ijŒ Éâ1bb2¹€c7‰ŽcVFõi2ÑÄ"T˜¨–uŽvµ"×Öd«j×vx’VuJ pjåÙ¦Éh;¡Bç ÓX¨›ÉÀPsI$éü^à)³<fí%O«X‘^)@1¢ŒN3?`CeÆ Ì<7WÛ°æ`BS•Ú$·@iBE¬²êÇ‹•,Ê…Xœ à›¬­Øž@âN¦Ç!çØâ €ô0KÛ°àWl'÷*18ñˆ¯Ç¹Í;@]jzzúƒüàÞÞÞ… 2 Ïgæ’r›ðju,²8YÙ"Þ·ð®"ß¶Tô&¿fÒs*¤Ò}¥Š·P)ÝÀ²¿ÄWó88àF×Ê©aGKO¶' ¦í”–û‹/¾¸¼¼œ·pÇwЫch¿i¼4ìÁГÞnnnÆ›€ø”³ !¢¼ñ¼ŽÄ@žØÁñs#€¹f´ NøîÀç’û£èìæìdè'Hç¹%o·Œ1<—¢g^5Ô¬”w8>äÂ|©í¨¿_Ò݃*»‘ãuâsß2PIM`A#·éÆ*(+ uÐ( €·£nifÁN\$#4ò$m 4É»k˜ìþ'.ÌL|7Œ²“Ç$Ù~çPb•9èÖÿ‡œc 9z!ïÛ1Ðï¹BØÉy‹°Zá’2ÅbùXÓQÞûÞ÷þôOÿôÒÒÒ7rNhAg°ì^ u’n'2rlÙÉp5dèv(Øn‹ÏbÅfÈ‘C(23öS@†^&ÞU jy>À°ˆ‘ºÊ?ÙØØ°T 2øaŽFš!¤DúÝÝÝW^ye{{ûܹs‹‹‹y¿™ì “Þv¨u„n>3"7):3mšƒv@.raaá=ïyÏõë×—––&H<;sæ ¸kBK:F¹È vQFŽòáQùÌÿ=qâÄÊÊJoHÂzà97YAÁk‡ºse1'UP“!L²_à âÐW… <Öâˆ_¢6Y¹{ø\Ç7l«Å€-3È JæjOŸ>½¼¼Å ~3ûˆï2x Œ•€¡=YRI·|˜iËÓÈ!cN ŒDn$k>6S \õ6 –‡ΧQ¾Ó ÷rŽÿ'/‰ƒž ¹6\aèöd¬Ötj²2M‘Žò$ «««ôG´¹¹¹²²Èéd†rØQTåÅ€ 8n‘–¸“KfX' ‘åÈÙ_‡¤ÉóªMF¢lòw2ã,+òV÷™¼7¸5"PœùÐ6µË§;w®µ6??O>Á&4ÜÇ–HÓÓÓ©H"†¬/•Ö‰'òŽ677/_¾ !µßﯮ®æáGÀ†ÉùÔ¦ykiÏ0fAýj“1ŽZd&Ìà¹O dÄÝÝ5û´úù¸ÛlØ“˜AsÑhM#áÐg^ WžÑ„Ú1ÍJÀÏxÒÌÚîv»)‚v¢%S ¸óÎ;zè¡gŸ}6Ú6¥qÕU'éÊŒÖäj£~nðMX`„CN˜ßFÌÜNãQÆ38rF5xª‰ëüCܲGovrŽá‡µÅ³¤A6|n YºÕioª&ÓÏT¤ׯ_Ï”»9Ê^ߦiA§çYzB”Xc™D`›H÷ 8Ô8†ÈFéú@â øÓŽÊF™Ži` ØÊÇmOÂd¹ÒS-ì2·FIQm‚Â(~Ð†ÄæÔ+9 ‘ã%X•“°GæÙi(òX˜ M— ’FôÖÖV>!>+++ÁßÏÙÝÝ]XX8qâ§@ptè{↎¤˜ÇlÄÂ_brÜŸY"x ¹Ârê1WHÊæ¬çr Ïù"´jLÕ~H˜®ÂíØÖ½ôÏéGòùn ñË\F~ßRly¹ù'×®]›˜˜¸uëV"´ËGËÅ6Y1ÑÇåu8 ^CNÔÞ Ü2,²â_@co+DðœwzbÔgާ‚HG»Ä»ãsÌôhS-ÞG^Uˆ¡Ž ø`Ȱ£F „Øø`£'{jÁ£Í¨2ÓÑæ€Q2{Ò»i“¬ßÓd¥Ç[Ú3Å« â ,O ¦ÍuŠŸ•‡:›l¡vL4²¯Ó?Vøp3 þ>-“ÀG9ï',œÌÓài[Sô®pºÜÄ„Ș~͹¿°°CÖm8^½zõäÉ“'NœHP±}ÑÖÖÖööv|gg6¸*% ÏÓÎÝQÖðù Ť5LPš‡æ-ÏK´žYNEj$»2rФÔ09ÇßÑ™››c¶ÎSÁRYÄv!3Ý€µpLíÊ:6÷ÌÓ×4Éyù¨oùÄÌ`]–o¡)Sƒ{D¦Lö¸Ð4¸GjÌêˆAg¾Éˆq¤Ýýòx®œ_§#ŒÔg8?ÿ0FÎn¢lªÀÌQv»ÝÌ äÿ&`à‹KibRŽ€ƒƒƒtæØZXX@v ¹b˜yA¨Mó ópR-儺uëÖÁÁÁí·ßšr¯× ¹ymm-Ô»¼÷8•%Þ:p_xÌ„z‡Öup6§P‘"eÎÓcmŒmöÜÜ.2f߂·äExD̲’FG®Û¡çMI·Ëñ D¬*Á‰^=EF|#œþ6ìpŸó¾”<*o”°¹0tÕœêñ¿PL‹ÞkQ !×Év`z :g7)&ŒŽè¡©aÔÎÁr\å|·„“¡ ÔËT98•s NLd+­M›Ú–:Õï¹6“L²uÖ‘ãåðePÃà2iWÚ¶ð}‘ùR¾¸Ç¿ÀMÚvtt¼h³›ž—s¢ÇÕ ÌË™˜] øâo•&Ź2sÊÃÉ“ÉÅD“¹¨üi o´ñò9y/³W­g¼&ß37FOrI|»9Eéñ¬¯¯¿ç=ïaÐ$ƒ<½T,èÞ2ûÂYQå›&¯ ´_-ŽÇéÃ(‰ïÁNsŽ»=2·‰Åþº`ƒ&ž±ŒÛ¡ ±ŠÅÉkq´Y½ÉFVn;¹ÉAˆµm“ïN)ý¯¾+Òeóu;¸bŸzÎÚÏŸr“ðY„ x×@ýE^âè¸[vVÊ)“¡ f¯˜ô8äiåÇ„²'’d 4¨AŸí$V ˆCÙ®Ð]€õsZ‰™£ß2‚Éë9Dr¢áÃn13Û¶€Œ¿x4ŒOT,C$e'tEïþn–ýà]Ä£‚€G—ßÄ\‹Ô厂8ÑH"(i¬/é¿YEâp—xBZÍ0)ªž<´@m9g§¦¦fffhíØOÆQ0­µÅÅżÄÁ`°µµe ºpíÚQ „Ý"à–§ÿ…¼æ–ò±@»t8HäáRƒIÒ=Bà§ÉžÙoÙ:ˆüIÂ! 䨤Ä'ú„Hâd®äR.wXÛŽF”fo“éóðzŠ©•uùL'±,¦Û«F¤ ØËÖ´-ªnžmÊ?'­UsŒlòFum(¯Épσ«9-r*c’ô1÷r`¾Âªd±fT›ãƒëþ2Îb eS 𔩨?àæÄZˆÆû+ų³³gΜÉH£¿×G¦‰¦+Úšâì,6'ÓìÎI›fKsô‡eÚ4õS“†­2“ØcµhÆÚ'Û)~¡ßïg?P$Æô0誄vTÑà &‡™2A>Ú6[[[›››yx”%ää¸ ‰9DmøëÁÖ¨Mã‰`j2çQ‚P"k8ÍÈäHJ­Œ¬œÉÊ0’i’áC“ê3WÒç‹Ö§pœ0DFŽ•Ç˜ÇëBŸ5cœÖC©P=Œ¥EOLËÍñ–qÅi‰O:àâÓ +Õ-Ó”.)ìICõ`4¬°JiJFÎA±ëasÜH=mÜÉ.ãC\›¾Áê¢d$£B¹®I=ˆÉ x ãsœ ùŒq#Ê.E¥Ø'æ]èhBX’ÉpÎ!ºfÂc“7IK™è™oIW>ùÌ™3§OŸ^ZZbr"ŸIMì•Þ£iéRÀ1%ÆÄVÚB…Em7Ã&EÔÔ &G¤‡ÉT'>ØÄWøµ9Ùºyø€*h$SMF¦,Je)/²{1·k;ô £ v.°äÚÚ1`}}=ƒússs—Y__gÞŽ‚ZÜäå¦÷3==½°°,âƒÁàÆVMM–§±··7??kO8b6f‘¥¦±00¬O|²{Mº˜!ãäeÊ$!“hdbT¯×Kmgž䵿wxYÅ5.Ӿ܂)L•t%J!Kšïqc6|0눷£ºìŒÇ2žÉÃÉÓ¤¡úét:Ö¯Êi0??Ÿába عf¿)Îú&×¢¬½N§“~!E6„Ö­ Öj@ddlèÙX"&ˆáµ±õwE•CQlAØ;Æ+|X-ÍÓÔ7ü‚5ké/Nœ×½“¯änÁÙ–——777Sâ°øŒp0¸AšÃvqfB‚kiç&‰* gÈÇnçzú}aa!jÄM® ~ìÆÜÜv¶î¯;>ž;ÏùNÿßC„=z*|—ilÌŽèÏSÊ!²ººÊä¹› (Ó z3P.~0lllœ'¨:P;ÞÉ,k„¼h¤{P]ô VóGË&ôÐQ‡ƒƒƒ›7oFÔ²`npšÄ  × A&acƒ4½qú‘ ÊçGáŸUÓ(‘ 7 ØýdS½‰j³Ò¢ÈÓÛÞÞÎôeaÌÏÏÏÛ>°‹Švh²b7ì#P{¬²×××Ã;È’`µ€ª‘_·£Ö|EH&O/‘ƒ!0ô#l_m¡Ç¬ä¤Î5Оä‹hA9—7Ý!™ÂìBN D—5hù±¿#ÔÙ­Ãpb“C#x²MÌóÅdÈÜT·K ð†µÙ>Ð%ò›ô,ÿCjk¸rt"l©>a3ÑËÅÅŒéÇÏXcØ°Ñ £mþ¯X™9í*pži°¬,zšNYL$¿‰Æø@Îwú(V”áJ@‡ìÉàá“ûêõz˜SF8aä+ G¸; Šm%Ó¦U®Æ­'[鯀†½+³Óš,O U5¤Iªž»KkÁÙŸ9oœÎŒIRÚ¢œF/7D²ƒƒ¾šRrqq1Ý ·âóH™ªq«€>¿ ñ,‰ÌZN©ÆV`âáÚ‡lhz iÆøsx/yb`†¬mÊ zZôo6œî ø5ŠFŒ™k¶Ë5kÉ “ fØPî˜N:ûŽÄm=ûêâ_į,?”M£ „|d­B+P³Ÿ ÊrÅfÔb¯ äl.°nÖ$ ããQÐcþa'Àÿ)&]Ðå£LÁhÍùBNãÿRP›ŸC'É9Žf”›†à܃iÕÌ©‘ù‰É£?í¨´Œ16!$%–µÕ5Œñ±àQ±Bn#ÚÀ<(x(üy,@ØiÒ°--ÀeQw“wS˜ûž_Ãi; HÍD;b Dd;ž!”±O&[¥„ÍGáKFVUïNOg¸xTGNšÏ;xp¬lò˜щ N„¡qZaÅÍ?ž¼IÀ$pTîˆèó”.Ùó éG “ƨ<Úèd>°§…GAJñ߃Àfuj>Z CšÙqE0Y¸v_u[œœßwtv]m$zXÛk€lÎ:s{.ÝÆ!ç8 tÕš„â9³B.¢º§é¶™ÄÀ5¥ÿ¼1^ÔGR¶…½ÿñmfÁô6=µ1U®È!1›½ @äée<©Üh=°ÒF¡óƒìYsÅ\U6<áÓüÎ&­FŠŠtN|¿¦;y¶@.W‹jˆ¹Ðœ#©Nëscƒp;ççç‡?öSáDœèoéLÐŒÔ.9Yr…¡PÛ^/ŸŒBš=’©•CœÃÌ”Y“ëBcƒ¨â§ä*–¸MØì„VàP¢zÒYÛਨï›z<° -ÇR1n¥H`ô™3ŽÃ’੆œíºm§sê¼S££µÃ6 ¶Ž ƒD‰¾½5º@þae^ê6B:Ý}/ëÐCs ñifZ;j7e†3h½öжÈ8ä'}À.gDÞz–#^”;f0[k¤‚WøÃs°B>i­MÌLôÿÛþðƒÃÅ_YìÍöúýþêo¯î|ggöïÏN &ø„|WÐ!gšÎdqØÌ‚‹T%×Ã,Žwþ¨y-S mm@»˜Û#xù¿÷æ,ùI^i”0¾Zka„ÓNg>¿“šÏH=i].„,%UHŽÎ e}qÌ´ý ˆ“0ƃ m»ƒ’ËKÓ…®oÉ’œã€B°ó27773d$ÖTÒùð¼#xÒ†h l@ÀB…>gÿu#”<4‰…–.¦˜³svÐí/:7æ’äöNr°µïÅ*™Dëh³RÌå«)×FéÂôá1aJ7”I¯vTߌçãÛqw¶Ð¾MW#.Bl!À;!€.èNpQßpÖÕÞÍúy·~‘®69òtfÞ%°#¦·0¸õ|{¶–C3Ú¦×SŸSSSý¿ÓïüYgæWfNÞvrqqqyyyÿoîï||gøŸgÿÑ,ô0L´ÜöôIçÙ³_ Hr@dwÁo†®Ã(aœe…ÐÜ•ÍlµâùD2GPfv#:"Ü‹K+šŸTr‘`€•ŽGuÐ'öRz!4™£åì©/îµ£óÖO ËÍæ¹%SæÓBˆ<Ï<ÿ “º#ùCæûÒ 3ÿ›ÈiWÚ6ÑÙ;88X]]E”µlÞ >•ùOéÆYzœ¹fÀCx\ iƵUJŽiÚæn'ä2€˜`sP"Gä¡i´É­È×µ,Y6iÑî.dKÏÕZ»Ö.2ìw÷9°´ÏH*T NøŸ¹0ôú>‘/•™É™@^’Ó#ŸOñD-nGWZ/(û¹….’éØÁ]Ì'Ǥ€®DÊqÈ9ž*è¼(¢ÓK cÊ'˜ƒ•C“3Èf'T¸$†vïÜ´Á쫳‹‹‹ùÈGxà—^zéÉ'Ÿ¼ñʉMô>ØÛ}f×&äÝð…¬Ÿæ! Š0®¡pvÍ@ãüd÷ ÅB'c57Ú{>â])°ÿLöuõÃæô¡F  N}޲-¯W*•&Õ2.€Ó–ñz4A)ùä:†ÚHd …g©›Cƒ š^h´-rÆ€‡SÌ2¸NÒŽð“xùqÊø8ä'ƒ$ÝÈIP`wúœÖ™Ž>Š¡RS˪·ý³':ÎÞƒ{ݹîíWoÿ+?òW>õ©OÝu×]o¾ùfkí«_ýêjguùŸ,ßî}c¯÷é^±N€)—\ÆzJL0°[ÎùâÔ’ìÞ#GL;úHÍ-0J-h C“œÿÕÑùÄì±|ÉiØZÎ\K!Øu;Y®šî 6É“ÀÂ".SP¦Y;cc#°›äRÉýòÀs 333™ÝÉcÏëŒvØt!KÊi•3ÄŒ$À*>4ÆË»u* ›[_,6Êü–[Œ´g˜›¦'ç9\Xü} î\@Tœsa BcqÇ`ÓþuéLÍä~¯˜8AQhêAôsBVŽrP8`ö&ét“ò /©ø˜ØÁsÍÐù²Æþ¯_ú?–.ß}yóK›wüã;N<}âÆõI–íÕÁN€Re-gzãYýwß}÷õë×qQ,=y€Äìüd|˜“šbW¸y¡3ØC—¶Ó»jŒww¢(çççÏŸ??77÷ÜsÏV²ÜÞ½®¡¹¯Æ £WΗó‡À\ôiM²€]ÊùHµÇ$,jÊUrkËËËPŸó²677¡ç‘4¬­­!( Åo‡Ì~e¹Úååeâ×µè$¸•—k8žy…iÜ(¬'MR•h• Àh¥™lÄá+‚ˆBae*Ž^¬³"nMÉO-j «a­4xòEÌ{Úinnn<—sÌ?xOe#™ón òv‹e3ÈI9#ìòäÅZØeùйÏÏmÿGÛKcéÕ_}ussóùŸ}~w°ûÁ³ü¥S¿tïô½wÜqÇ`0øÆ7¾ÑùRçüä?8wíÊ€”ÎÙ©ÁÁ¼Ù°µ†ÁЬœÅ4y,ä¹dmlN|š ZƒfxÐr,À!á„Lvww÷Ê•+¹ßôÉ9ÝGi‡ÝFÿò÷TÄ^MqPF7Œˆe¬Ä\[gÜöæ‰×W¾ò•—^zéõ×_gJ‰Ù,TW ÛÃõÊ • bg{{™5º#ðИ¢ »:,©óçÏÿÂ/üÂí·ßþÅ/~ñþà¶¶¶RÞÙ$GDIWŸD>ɨ¹©ÀÞç¡íîîâ!M¡³½½ýÍo~suuu{{;u-ÈÓoÅUÝY‹þ€T¹wÞ/ŸF²È˜@VÙÔVL©ó ‚G¼y¹ YC.…+è¤Õö,€mîOáæ1Î õÉvS=®›zîxÛqÈilàS§NMOO_¿~Ýúá ܸŸLƇí³¢„œÂ[[[I]i´˜$–¥èiòÅÉé<=y×ä«¿ÿê7vïÝýÑø£Ÿúè§î?sÿÁÔA€‚×_ý™gžÙüë›7oÞ„½ã„ÑSÜtàéâp9Öí¹€.GO;”c)†üß$àYôVF“mš¼GÙfÉ#(â.ÙÁEæuØ9oQ¼ÇÓ—à„_ºÆLŠX$ÍÒv&$ Ĺ6Ê™Eb›Ž7dÿ¥—^ºtéRN7Ì2 h¦”G ¸on}²lŽ ‰Iö4ãá[‘á$VcšL(ʘ·æœÚÃð´L˜À†äáZ÷¥ŒÚqd3Ñî^x=ÐÚ36nw}ðÿC ±}"I9ý@(íBÿ‰³ß“ü'Št]í¯ÓŽ:ë=¼9Lé.p ¨0H;’XX—byŽ,N“ÔÇ!ç8fff>üáïîî®­­e­›¿TZÊxmº¦ì5ø@{™;Öh™¬"?111qcbÿúþÉžœœœ\ÿ{ë/Þzñ«ŸýêÝ;ÏŸ?ùòå?ù“?yâ‰'.ßy¹ýEĉ+ÙhÈKè]æJ'¿*¥;!ň,Žñðq÷6iD[‹ÓƒfM’€Ì7q^˜V.4‡Ü©¹yfŠ»Ö1[ÉäÀ@ð¨'$%ÄZïÞ³Og¦ÐéÙZ«ªK¦˜È'£6D‘|¬ßï§åº<ê­­-ž´º€92Ð!Î3ÄÚ4ŒœÖ—'‰‘¡Y7©lMNN^ºtéÓŸþôÌÌÌ‹/¾m7Þ)¨`ž<§oÖc[á•!L9÷khÞ'+¡#Â`f-¡¦Êd OœXi·pjãv-Ò! Áæ6ûhr“³ *@«'ìè*vã±³S QÁp¤À©C]ÍŽ¢ðëý$ TƒÇ^´q‘!.ªÞãs77·²²Âf;Ô£ôç´C ¦JËt0Q–Âþ4 Ã|3„ผ°)4‰a6Y#ó“`€A8úZP®SñÙcÜÏRÌâfff–——¿ño˜k@jÏòCtŽÊ"­|>E³u(囬ÍÉ ² rü%*›Ý•#<ÓfZ ˜¤G<[–Ó¹×ëyX˜ Æ*·E–6ƒÆÆ¾Fõ|‹ÞŒG¤´k’íaÃÛ3a>\y6#ðȶ¯„ì² ¹ê€ý+;wrŽç' åòåËN'¸9zˆ>%¥Ð>ædñ<¥ƒøLDÎ)f Ïî?ê¾ü?¼<üóá?½ñ—ù—7Þw£ÿ«ý©ÏOí¯î·½·ÉCë“;â`êõz x0e³ ÝŒÉ_öz½Ó§OÇxÔª_\g°K}˜€d÷Os%ÌÌݲÑ}Ñ¡™dæOÓ°½Ë#Î/¬- Äù@¦à¬w£Ë ryzìd:¹¦%îHNw︣折SñýîîîæuäÃÍgDçªÎÙ@n9fÆý9ãŒã‡Ã0À6KÙ2 G»Ô…8¨Ò-†µŠ’Ç`Y*ö/ÏãÊs¶Œ“3OŸPYâWµjÉA&:¹ G2ÃŒ0<‹ìˆM*Zëö:Ò˜^”€b4N(%£2‹‡š†JKs;ÉiÓ!°²¦¤æÆ¡J“µ°Â]CÎ1Ïå¸ïmŸ×d=œ¬QK±´¡‘Ž‹-Õûî»o0\¾|™©F´ÿœO™YÐù|gøÌðâ¿ñõ_}}wwwò©Ééÿrºs«3ì¿ÃºF̘D $³¯×ëåDCM6…vPÜÏœ9óÀÌÏÏ¿öÚko¼ñÆÆÆÃ7$€f 4Ù³¥N(:lJÀ«öôuž³utéú:¸…qÃÉ’Ø¥žó¨¼…<¶ÂùNîIåWXàn­»§ÒòD!øFœL A…7l–LŸ'PÀzKDS£« ÚÃÉk \“ƒr;td ÓDá^¯w÷Ýw/--A)Èíè 2,vKÀÏÍÍQ3qR„£òi¹«jtÔ*mePšÕË9É ÏßïJ˜÷ ÂN…dúIqÒ²b…±2ö¿´g€<ÍÆât¾8Ù*"Rc`íø{9¥Eá>™>³`ì[Ïôz^§88q`§|ÃyG5øK4$d(Òd⬶ .œøE—ž¶j‘Ú¼råJÛWWW³Ü³E©? ³abs™¿‰< {ÌñàM’'©/‰âÖ‹äâ-R Uã•ÝËùîyOòzº E]”èBšÉQ@Qó…hù:Sv iaóH9Ã=6÷ƒ~⿱è*S¼<à€.б¤óœYkkk®Iºy&”Ä!€n]ð `ERµ3|óæÍÏ}îs[[[¦êBq¤Ç]Øf 7)¶èV¯4ÓÒhp3s„ÂÉ$ƒšLzf2e„Mx¤l2ÂÑy»-$¨¸ çñBð³5C*$3 °Ñ3߯uubZ“Æ!çØ~@Eè"Ø‘ÅÓ‹yf³¢ÉP°™&Ø߈קõÿ‰f²1•3=d7 äå-–Uhf9¸—––ž{î¹ååå¹¹¹[·nÑHït:‹‹‹›››è¡¹È`sB¶5ˆ+9'V¦ ó@Ðb98ú“O°îýè4{Wí¨oíoé<–”–œâ˜³Ä5XßhÑàRÏÍÈE óvº4_™ÓÁ˜gŽKƒìœìnõ3Ä`[­Âé¢jɑǰz@6Î,R úÌF ­_l]Š0㓹fšð}MTÈs³¡‘õ¿ËrÊákh7ˆŒ±Y–JÙ)¨ Ùë¶j@3„?⎡—•h@¿<ŽZz«–ù(æËpK†öžÝà&¸éUjPƒã:jk;Jô6ŒAT&¯²¨©­Ðö0n cJ¨H‡ûsÿ%Á@ÛÐ.:ÜãsÌUN¢›$ ‹¦¨ÍÃ!ȬÑ7†Ef€»Xõ•z%#z7aXÜ|µ½‚A³ Ñ£¯³.Ž{*Ù?›››Iš@ƒÁÒÒR& ‰$˜¦œY| &q<5Á¡xÈ>í{íÎ*P>tê¡&bø‰©Aùº@@Ê0±¢I|>è¥rEjÚ±·…"Áb‡lÒjËÝñi´%Œ™U¹mnV}r_§3 ³Ú\Cö:q6qÙK—îkqÏ„ÙtÇœ%ÄÚ­Ôˆ…çM²âiGƒ«VÛ$<¸&ó‚0ô,—Él<†¸‹÷Z“•§£ND (ê8ø{fP܀ܙ ïhÂùYòw|Cµ5LjPaÜË9æxƒú–“tW¸nEZšp–vBjX³õÍ2riÂÊó©]: QÁ‘»pcÚŒ O«q+ô!¸ ÂØòòòêêjÆ&ÝæÄt/Ý›§Lç¸#ņ´î¡›¥)tÜÕoš÷täó#b$;q·xËs„™õ˱e<Š P²uØk¯Y«”@ÈyJçƒ5œr  áš Ç!ugÑMyW*p94,ÑEk#†iÆ÷'øÑ•óÑÅ„“xó–3GTŠzÔÄ–Âds{ƒ5è-ž¤±ª+ À3·À¨5Sœ´ˆ ìxŠ“W,×XœõAб$Só³³D·ñ\Îñ·s(k€×°¯7 ~A“[Œ'È {mnn,§<4kͲúIý²žÜI†ö Æmy;D‘#£cÇdYwPM§6mY'.Ì}r7»ë½• àj)øû伞QŸµœ‰ñ½¼‹<O)qð1_R¸ËÛÛÛsss —I*‰ÈS6YÏ?‘ÕšnÚ»^dz”ð¸ÌŠòlíâSʲ¼_;D0¥ÁµÁhGï‹D›Ô?MWmll2õ‡‡‚Ϭ1xd§&á×R`•œ=q…eŸz¢Iêɸ uvŸ²ȳ3EŒP=kn›¯- Ù̹£Á[ßfáPä¨Ëq3{IuΆB!‰f’ãÓ>‡¹Nê/-C×az¦±ä²gff 6°œÆ½œãÇÖ,¶o—\ ö :²æ&AJ¡ 6…ÆÊ¯¬ «“Aö5 ¿á\Ü6¤É%QÑÛ†k QdÔMhFFÌ‹õr7&†ÀAé'ÙˆÈ3¤j¤ð*ÒyøpÍ­îeÏ«v(öƒ¼·iЩ¦ñ$)ËØ½xçììì@$K‡UZPN,€II¨ÙópÿüÒ= ½8Ç«¥ÏÌðFmtÛ :®T›Lç\(û"É -·C!em#rž Oo(hB+>Ã*0Z>œ¿IñXk¡2šml)wð[0@*›ò!ÀžÙ†EKЀ¹éEí¨5ª ž’UØ‹ø“ÿ@r‰ZA“_MCÄĶ23kbÑ1L¤Œƒ `Siœ€–oò KÞšv4@AÈ™ 6Ìí±†‚‰s|äˆDL%ß­6ÿ°×ëÝvÛmü§Âƒâ()Cé ‡ùWMš†vpø4u§Ø9´ØMÀ:+ñpe†<0Aiv›ÒiÐehR¾É^Š]›m¨< Ií&¥Ô\¥rå¾ò òQ³³³‹‹‹a Y·ªÉ’æç)OÞÿY~¦9E:57Ä”nŸÑ½£6° ½ä9Yó•-c3…¢ÜÓ¤^AùH–mo4²¥2Ÿ[Ö¬Oà&¯F°)r|‡[b Ïœ.HÞÚéÓ§ï¾ûîhÀ&‡¤ -“¿q â•@Å\–Y¾ÈíL†(ø ™Äojƒ!q#äÐèMFp]k– ¼YskÒ:^úÀ8ä¼Cã1½Çi)sK •ÅóÿĤürøûhuäÏY©YÖ^fÊAµ‚iÉÖétî»ï¾}ìc÷Þ{/‡{Î÷¬ÐÃH¬lŒü°W™JƒðÊZßÙÙ¡>+}ZÆë µC¡C1Áó¼$E¡%=Ú¡s" ï«8÷ä`=uêT¯×Ëód“£[êvw¾:×¾Ñétfff˜Á*“wÉj1!m­CÖƒ¼˜Õéð- ‡ü&¥•¬  KBN1¦„Y‘)×nØÇ`j¥í(5”ш–Â̪°[(+óm¯BqÂÈ?±’ž[#p¦žË/_¸pᥗ^Z^^Fõv²+‹ušVãÓ æ¬Íæà÷]º%X®®®ÚaÝ «KX@øÑ ¹áWF÷ò™aôû}c3`†ÐÇ!ç˜Üœ§èñà$/µI š•²è@Pÿ73%ô6©®šFùßp£xàÁ`páÂ…K—.e< Ä/w#,µdV˜Ç˜‹Ô››+…[;ÚQiS›Dà ¶äô̲)» ÓâR—9üQ2¯¸ ¸¼kôö.¦žEË"ñ0#1Æï‹muëÖ-o[¢K“{H!î›ÊáEXð(«è–fªÉo†‘M;õ"Ô•ávTùÍà°[qÓ¢¿ÐdŽU´¨-ú99ÇÌ %´÷¥ë\³ ¬ØÈ?)ŒO³l“—%_ÎáKÒÄBôçD e þêÕ«€æžÝ1ŒÆBä ,¾2%k.~ò£gè(L”.:Õy(§'tR2D7½M]+âràݾÆ!ç˜{9à-PŒ@W\P³·­ÆHÈa¯z¶²rÙÀÖ `e€ïÙm |ãÊ•+ r./LÎ’ ¹Åê¹£ ç´£ú`„ofOÒ±`¢¥õ]—P"P'„ÈÑHc]¨kͱ!ý•¶Â7ÑË>FîÕ|ó{!ÎyrþY;T@á-·C}6̸X6F¤”A´”s…:Û(.o”Æ¢Ý`ƒ!g9ùsFƒ!s—0PÍõBœÈ[–ÍýjÐ`Ò £¬YÔ”NØú@›F›v7$‚ .æŒeêÓ4Èž ãú³x2= …‹RÀÙà\=n=4^‡‡o˜Ôè$^DbO­™îÖKÆ™óô"œtÄ?¶$‘Ïa¬Øåe"çÕnÆ!§¹Uh’å(¶cx̓ǎ&Ô6|º€(Œ&w>88aÑjtf-—'#ÀÔþðñ=BÏV´Þ³Õv)Û)}Šf»§P-’Ÿ³fnn®ßﯯ¯çú;-n¾AòN.ÏÌÇÌÌLà)·y,PæòË(63š«æÔ!l½ãN’gˉ§) ·¡v" IDAT/Ö=u-Ùcí.nЬo!µ{B0‡ÒŠÒŽ‚±Í€±¬OhaB7 Íãôˈ+ 5ÙV›,Î’‰'fØ ô¨üË”zIéàqØÒ;WÈ{7ÿÅÜBsL 3˜Bfýw¿ ^™kî<‰½ƒô"3.í¨ jòt=EãX+À>.™ØÏŸCè÷û¶L†—Y¸•ež ÈÛãl`Œˆ+EÞƒ|¼˜ÙLMMËûhP7U¢Z±˜$@2Í@6ûÎ4?—,„Rb‚k…ˆAx0¶¼F½gÌrjèÁW•&g#Î;»*xŽÒø!9á2ªYÌ»<³IÎ@1 'N ÷ÛPòç.X‡Øùx>”Z§P S1#ð¤NqŽ~Î)Cè–š É-XS‘cpĬ Þ>„^ô*êÖ|óšDu°É‰<ØIoŸïâ®yþ€Ãö*€˜+$þ†·ÃªvÁ¢«_k“¶´+~3ÓŒ…$UBX¡ åxZÈ>=Nމplûº²þ7ÞŒCN+ø’qRŸMw·½ÕÉ< —#Œ…ŒÉèu=Ç\);ø"†Нš÷à^ŠsX© ˜Ê¦ž#Êc¾ÌCžRd­ÄǪ2 ™­­­28i‘GÏE¶‚3ßp"ç<ŸSú™ñ¤AÒäA—ÿ„>&³ÏG+Që5$%„An;È&I4Þ,5±YN Ûy9P•2~Äx˜äF,Qrd\³sÃòúòˆ|Q³–ò‹ÿ› R@KÔà,!¢ˆ=‡L6A•t0É|žÍ@jÔ ¶  bÃÈ'(( ê<‘Üè:sÁaZ«F†—úý¾„… d£«k›Òä4ØdPÄ@›™™Y\\ÜÞÞ^__÷ði1ÄÒUà8äç÷›å°\F@.›#8žm ×™Or—(,L>Ùþ›¦ ”Å:…J´vÔà–q:<š,oG5µò™1r?sæÌÙ³gƒÁ¥K—r:¸MÅ>A &t 9EÅôÉ *–³ƒxä@‰ë¤á¦°N‰d !Fç1/‹i ¼P‘W02iGmީϬ¨8Š’•ÉÁ<Š70øK¢£Ï¯TIö=.ã2:S–.’µnœ¸oaMñ÷—…çâà£DS½£D†¨—.ó=2%Ø—;#—Š^Žëzû\Œ'ˆÆêœf9ã)VLüC`ao8àœ<À2[ãÂÚÈÁïѾ Í,~ž½^/$ã„mD~)î)ÏŽCÎñT9ÎßMWeª./Œæ6`Æ2µŽ=W8 ÜäSŒ~ ™¦Ö‹ôð9„«Ñ¥c‡‹s|‹ûb±NƒÁ®'œøˆsäid®û‘G¹yóæµkײî‹þUÉß¡±yB2µÆ(\XÎ 3ÙÜ䲄¤r6ÏæÉX9»›á(|‡- g!nÅYlä&õßÑ’®À¸“Qq“…ä{“ìC'›!)É ‚Ù2t’$Úrf‚˜…L1Ѥ¡I0O7k)Ñôfä3#ÂH KÚZ«¹*ÞN®­×ë-,,lmm!‚¿4qÆ£rV m‡6 äçÉÇÈ#£©¹*sd·(ÎMY‚çlQ7`€¼èŠÍ ¤j#tßÝ?£bXÇ©p^e®ð­·Þ²Mƒá  Ñv8¥›þ.æOã*çøVC!]‚øk39&ÛŒã<Ä\Içzž‡wƒiN+úÀŽ @|šô:QOÁJ9ÛÞž… ê˜×FÄíiJÒðÄÄÄòòòóÏ?vâÎ1 îÂ+ âh&[hÄÐ;:à–˜W™+Ü…-…œ8› Çb#”æ `ÀÐ̯¦p)Kíë®89J†]·âÿÄÀ¬çEÜßvöÀª.v;*²‡[D<`‘3óoÃh&íPðfzzúüùó?üÃ?|åÊ•¯}ík«««¬ê&Mq7Ì |TSî~;*SmÕ;gP™°ËH/1zÎ(Çí»µN É–9«ÅÑLŒ¬4a’ W¶½$¤¬ ¶83—!¹óþþ~üi3à`¨Dù %L³Ý{ƒÂ‚AWûï4™:Óáö->½±±Á9KtirõyÈe€ÚsG%ÀØ=ž[½^/ÿÖ/ˆ,›Á‘\ÙzD<¾ÚdƒFt'£§`ô………sçνñÆy#´‘‰…b³‘"# ªjkPúxE4á s8x3ooo§»–,+z ÔÁ)‹ŠÒ£§òôÓOïîî^ºtéÖ­[ì/vSd¼é…0„„zHQ¥¢•Eãgzz:»æºUs€é©°2a£PÕ1©ý…¢» ‹±Pr$'˜Ãk²Û`Ȩ3¼v³ê-WŸãˆ.&·`Œ=©g׸—sœ?À÷ú8Ü$C$·b?—6Â\¿@gVi³#:Wøt:Gyä'ò'/^¼øÙÏ~vii *ÛL‘×Cì6*BÛÉ'«ßEU`¹…¹oþtÑ]·<xNÒUcJ$€¹ªœnEu”&ª NÈ á10;Ž—È õ_N”Ås b=:Ï‘%¸±„Ê;Ì{œØLº<®&©Mƒœ…Á­%*ä¬G-iÁÕ«WSÄt»Ý¹¹¹ÖÚÚÚšG øR“tI™Ã3DÁ:¿œd", Ú”¡V¯jÏÁxh <€þ(Š„,G𫯾úÖ[omnn„È–!jˆö&¢ñàRrî½£œÔ$VfÝÀ Û…û{C2¤\Λ"¶èf¿8ù0®ëì‡UJ '¤M,«ˆø½UˆŽ'¿ÇCæ\ò7¬—)Ì82ŒŒ¹Ôµ ºÁîd+++1ò‚¬•o‚²ÝJèógA$ñéÈÊ?´YÑ-eÞÅp3˜^ÐÛQ])S‡ÝÍU1‘`ÛGÿß"_oûëŽZWÑìe·Gr ©`¢~º8¼NÏ2ók‰‡2pïÒGñ À–ÂæðÏvi•{ì÷ûˆæÙ§Òõ|QàÍÔÇ?ò#?òýßÿýÓÓÓ3‚ædpÕ¶4„?@Pe7öG)ÂMjǬó|ûîînHÃf”ÐíXð‡Á`°±±Á° …]qm 6x"Ê=Nkñv\L€[”©'÷ÒueF•4™ØóÜåh¯Å}8êT$”XNVjð|·ir]’Kf¤œ€‚ÅAIg.B±ã*çxBšf¦Z•„½U €¤dôßÉ } 8Íxý²D²â_zé¥K—.eŒßI´Ó½Îáó}æà{Í •„‰ªÞœÜ;Bp¦„±uÙü¤;J3“mi¯kóyì¶b²r¡öq¬À °¯¨ÉµV>¶*6!Ö69ùê(ÀânêZ¶§0ŽJ§ ‰i'†º IùyStfV^ë)ê™$kkk+++˜9Ñú¶ ·™è4ðÍ÷6ùKr`5)"“*Ñ;´þ¿[Gü&tjtÏŒ\µC© —|¦É8 –§W«±s¢€^oe&".™ÇÔÔ²…˜j¶ŒÓFÐýKG (báôôt+9:(-`Ÿ}DœÎ¦ÚÖëäáгIܤVƒÁ ƒ –¶÷r¾+O *³Ë.÷ÙÉ ŠTü0 軹°pþÖ­[M2bƦۈS@;*ÎÏbÊœŠ‘œÜ’hl˜€¿ÉÔ hîÛe ´.I–;Ý£*²¾.Î ÐÁøË(õ€§jE8S ÙðîÃÛõ€Þ#ŠÄBðü=óE< d ƒ ièŸf ’Ï…ÍÎÎÚ×™sÍ¢ç3€× ŽV9`È!ÂØÒà-½¾¾þñiêPMÙíð×Ù†ÜÏÖ@é¹ÕêÌÈ/â= ÍĪ2MÌe“—àgã)8`±; §çípŽØ"ë äñŽìè ‚"˜V6•( Öù}÷?èWC¾ð¸«çX=µã©ó‰ äÑÑwHjÅfIà_Ç•[²›1XóýXºNõ°Ë¤(ajÕ\|>("iMxƹ`ÓOlJ›²ººZìŽÌ àLÌõ¬³°“=­ dbw(”7yæyª”‰ÌiÐgJ´#CšM±^=ê`»-Œ«œãgHÃ61ÑžÜ<‰ ƒ0k­›im.„¥Ù< B@vžÉ În!øq=E˜9[Ý Œ€’~ÎÌÌ u œŸ rLé”!˜&c‚¿ûŽ0°Ý¤"sgýO(Y8g)nø:‹˜\n}I3‚xìè3rôÀ‹õdUéç;‘oRxc~²›Œ£¾«­=×\^µ,qÂh!Ícóî¢yüÂͶÑ_ð£+ gîÖ •rwÚ´iJóÄ9ï2êxƒfÒSH¼ò.zH¹TZ@¸Î·Xüý~?E^âeĪ Žª¾¶££ÄM®Hf3„ÑcE"»$@r1Á‡F“ª–á\vG¿ß§…Cª”Ç 8oí»qÈ9æ^’ŽFxë¶g.€õ¨8œàĤB _ÐÙÞÞÔ ÜÁ×™ÁI¦Ï)odßð…[ŒYÛ €˜ö>5–gŒ<Éi˜-.¬ç%Ý& Rì>íR†^ Êq–Á>ŸuÉ\Na0³¯Š,¬ë[[$س#ÞÛÖbÈWäY¥NÊïóX¿L 'ȑ҆ïPˆ–wP‘S54ú°ÎÚQw w×<ùÛÜìlD-ë!VdÑÌÌ òµð¾xe„R¯FèU9îÓá(S–´¾,îà™Gú’ª0°8o^M<úXf êï*%e‡P†ÚÑíZ–QYg!¶÷†,ç鱬I04²Šâç me |nÚ#ÏíXç@Ç!§Ve:Ì®b¼TšçPz"ø_†K² èÒ¶Ž: àüÔÜD9¡~Z: 4ƒê›ÝN Lì ì{ôض£#°Zgè °c u­( Ò©6C¬L3¬ l9ÎŒÑA `†V,®T‚›õz½°9¯))f ó¤¥E³9ã5H$˜‡´V¨htÁŸæÙ’»È &Ƀ™>×hË¿‚à@Ž¥¦S ³.ÁE†óÉÔñÈYyÁXn‘~é÷ûy­ Er¼Ò5 xSœgggÁrË<Ô¯Phá¸@g0Å„xÈ9•äFð`ß Hë† HI6>ï‹gBÝ(¡œ£tjYÞ]"´«1>$Xbö‹› ÇxØŽCΑ:Ýé!Y¤çÃIÕƒY»¬ËÔg›qˆrö7jÁKàqÞÄ¡œ‰"¡ùµž]ev½°3}ý®rXÁѶV ä.€iëyp~yW*B–9 wã8`œŠŒ.LeK•oæ/çççQª·n3w”;^pì4ÑË\ô7ÑŒi‡ÂÌ Eœ˜ðÑ}‚·£V ¹$‹C£Ðœ¯ð 2?ØÒ«~S™bÜÆMoÀLtP, H_šœO0ÈQ¥WO_Š* 79hZ)fggO:Õív777ÍU3·­ŽT»7IÖŸü y7z3Ö50³Ëó4|QÑ¡p=mL˜ote—‘Ö”:‰y¯¼J23÷{Xþ„âù]<¼ÛQWÎWøœápöà›µG¥uÇs9ÇÙÎ1+—• Šm5L†(³ú‹¼¦{ÅþçÉ’š››cøŽÆ&\‚Ã%î yÒXUÿ-óD¾Ì¦©·Q‚‘hvcé¾ä’|›ü+£ü¦Ì¬°g0Ç,¦vÔÅ’ c6ô…ë<99yöìÙÓ§O›°Ë}z~~Þüò4 )HÆÝ®÷<¿s#J[‚d.Ép–Š¡äå7£` ?›°˜åiÀ•°^n%cÿn†Ù©ÖÑ"ÝÖ}à «è1Rؘnvš× VQ¼9jqHR‡œc9ØO±’FÙxüïôôôÙ³gï¿ÿþ……üQ²¶òcìžOF+ðäÉ“ˆ^ppG#¤lò ȉ–ÆI\@ìíQwÛ¬Ý,M®–ü”å ûÙÈ;ß]Îb†ÉGzQ“,&fW¹Y;º7–Ã÷öÛo_\\L›”“P"[k{{{ccƒæ1`fffzz±5 Gg&7,„<{ËaíIÒg˜jç§L/VñÎÎNÎ,k{3ȉÑÀ}÷Ý÷±}ììÙ³¹µùùùS§N¡rM–ãùSÐ3Îwt€°Ñ¸¹Ú¹Á@XÑ ð©m³¸|à£>ú³?û³=ôdn€eçø<Õååå­­-H7¤óÔ‚X¯Ò¢b3}‘xS4Uyk¹žìÁà¶™wSËÎv_Í t.uvv6†é¼ö‘qæDeNIã¹sõƒf]T0@bµ¸eÝa> ‰Ò2;8ÖŽ¿ÊÉB÷ñ&CZú?;;ûƒ?øƒóóóú§ û9ª$nÚÑò7nÜ(#2áÄ Ì!zp·(L¼¶¼ ½‡0©²4ƒD[®ß9,Ú¡Þš³'’5›»½Y¦^Ìð.Z„P³PD}Þù Eî.äja]‡Ãëׯç)!ð•w‘ú Ì=“|¨Ÿ_0ê2ÚÛÈ£.”$N Þ©q°³ 躷£s²Ry¼ÖÝÛÛ»téÒúúúÍ›7Û¡?¤\žõ¸øð=ë¸pUðèN‘I´C×>Oƒq ½9Ú—Yw.!]1‚§?9Vž§sT\Óž ß2HQPèõzœÔ¸®qå9ëëí,’ÄBM4*ôqLC%¶„j¤BŒ ™é¢X‘g‹‰§1L?™kP€eóE¡X7—,… N9èÆ°)6޳iQjcWÐï’4Ýot‰E³ |œµ²²‚2M{·ývTÓ›°àéÜ=œU—ÏbÚBPª›emGq|p°ú‰C>/H-˜ÖŽ*ê7ùú…[ŒÇn"?»ýƒìÓÌ6ñ›ët¢`-Q wÝ8ù]Ù7Þ#“©ˆsyøAr|R[Ï‘íò«…ËŒ\q^[ ¶H’˜Ã’@BL_\ŠOœ8‚¬%92˜jÈ/žj²6sEÖº§?oR;Ïjkk+®nÎÁÕ´ó7€^Qßà¿Â>€‰ƒHÛÓ;˺jÜ‚‡x›ÌA¯o»ÊzNlFd<öK6)y¡A¹òîŠ!l¹S3qü¨]*åvÈoÊ üU6—„2Èá r< ú]ÁX+¼C›MLLÜvÛmÝn÷Æej¤4o)Œ¢ïj§ƒ¦iS¦á(’˜zqþHbÂè "n„{Ü qŸß²Ç ý·àN>ÊùDÔq¢teÀ|»Ï%Þ<|\Ìškšp¤†³iBBZ e (:¼k®z«ãk“Я,G°•=ã`ê<†Ÿ˜SxDË—ßç\£Ed¡‡vÔú¯ÛíÞwß}½^ïÅ_$xç” QÅH¢2O†uèS˜êœ|œ$†ØP&«p›EJÙäF“_¬V^¡É8žòÊdä§ Ja‘=¾´×ëÍÏÏÇÛÂJ"ˆ 4i!Âà@ÐHÀg“k@ˆad6®Ò¼DTñê=cÞ¥ Ù}¶´(T[‡7kÓÂÑXðæ»âÈG|ÉÖ×׳Ûûý~’ý¤ää­1Ê%´TÍš@®9žìž òFÕUÖ ªˆA`|faYh ‡iZ—6o6‡T ';ÜÆŒ2oÛ¢X$}.%îæšã[LMÃa„ðÍ’ÒX6aÔ=$¤V88:ÉIê òBÞhì{–ÂS“¡<™ô(­lJ:Ó œc¤"W ðÐ…óŒ×ؼŽ:¾/ã2A¯\¹’•ÌdOʲô ÊZˆ³ ¨…o¾}vv6óí &X¦ÃšÏíIžË †}¦“à3ÖäUH´µ ÷êÔ¥À6,ýNÜ£WWW „Ü÷‹Qq…[0ÇêÛæu£%, m«<çë¬(÷›Pmé?:!ÈxÌ™¯Nð³¿"™®¹‹£®¯ãsýðÃomm}ûÛßFƒïÔ©S{{{·nÝrÅ i£õlʬ>Y¡õžGÞœ ½×륻žë‡äñ̵±Á| 3•³dÓ7¢kÊÑl¾,ó‰ípN»x¦‡¿±±±µµ…”:ñ#»Æî87‘¨¡´ÊFL¢ÄH¹`¼;¯»×ëÙözÂHcà)øcæ¯gÙÀ 2‹Ìä=ìðËÕ:§ì ííÑ^L­¬œ ±[[[œÚ¶jö[öÌ¿oŠEŒ7Ë–x ÎcÁi8„Å•£Ìi(ÛÓl¶c#8“°Ñ{ždvŸËÜvT‘/³ì>«£¶CÉjdt›ƒ4_A­BÝ´|‘'p£õvõ ÆîŽN &k‘ã6™ÔQŽ“V–fji5CÎñôr0¯$#À E&¼¨ßûÞ÷~ò“Ÿ¼~ýúK/½–}Q…ñËfÑ"ŠI2&€PoØ!–Þ²»‰=|zZ¯ºŒyç(Ò­ÁCŠÍ™7Ú,6¹Ç ¸+ùüµµ5sð6²8.¸íCà#”ô.¿ãóâ$μÔ|x8o‰pEµ% û¼‚………Á`°µµer¦|¼µâ³§‘Ud;ð2™kÑnø„ÎÖ­/àÖz8Ížš2œÂ;e):µ"+rÚáÊ›uÒäff¿s{«Û•ŽÐ•£–ÃÚÂb†ûX·P¹8R=i33– \7‚ï@1H´“,|”„l½JèWËnG=¿Û¡ê¸.[†QÐvÔM˜WXÙf|XQÛ¢Ge¯Ù… ÒŠfdcÔ‡œwr® ÂFYŽQ” i­Óé\»ví‹_ü¢ùfíЊ±88±,`ÓÛ†¶I—š5Á é<N„}"8õcHÓSi&EQ“Jxtþa^¹‘‰‰‰ÍÍMÃP6F´€ÓRÊ>Ùˆ"%I7˜Æ $ :OœïxoÊCF½ç4B(€mÍÞtÉëƒÞ}J—§ž"°6šU”ìÿ”ǵ»»{&UÁ¢ÐÙ­À,{ÒÖdYE?—}îêæaÛQ¹kBþ8äÿ”¢3èt&5x¬oܸã[.ŒÞ&-Î">VÎ4QX7>ÁKQÂ)977çg;ªÓSÈfžÉp:ÿ®¡—Ë1òñ>ðïùžïyê©§nݺÅy @þ΄|鬇:(Mæ7£òãvs&º]œ”'©&Üém“Šv*`QÎý¹¹¹íím4äI‡ý‡~¿ÿÜsÏÑæUºGefšº &q@ûs§H Ãô³P·[Öíè´¯#¹½ IDAT „F0[¢µŸL)iÅ]¦I‘JæZ¬ÀOõL_‡6]D6Ãýcììì„EæãÆ ƒ½l¼GÔ9iìrDdå䙤kKt/È2ÌR/%‚C];”–Áj,Pó÷ÀŸyM)¸­Û̓äDã$ÿ¸"|W='H"%}‡œã)tx7æ’¬UC–åx`5ÊdHR÷Ñ…Œ”ªIü|<Íå3òS溸yÓdë’Å~­Á+‹ÕÓö]ÜÙÙYZZÚÛÛÃù˜Ù‚Qñ`5Ì.ÐÄ*1öcµV‡Ûž´pü¦¼¤¤c´eooouu•¶sZ2VHähãÀºï¾ûüñ7n|ýë__ZZòØ Í„…žHÏ6Ožž³Ñ²´TWÁd8e,y»Î“ï÷û€HTŠö›¡p,\dß…®*žkiši5Û›ò”¹œäYi4$À¼Î9‹á×#?BC ÔƒfÒ4{Oþg‹½HÕäaaÙ¸+»ƒ¬¨ 3xAšÊÁ—Â_nF½ÂÓö¨CÜæñ·£võ|5‡I±¬¶,!Æ·täy&¿÷ü fÄã*ç8â3ˆW ¡p+˜µ·=µ£áÉéàq J´Ìúg‡Ó·š½ºh30^m¢Ž“2·Ù×KN¡Ö=pßÁ`péҥ˗/gw±ÛÞšMËÔ´Y=dÖ™ÉwùyÎ\˜!O±äÈ ãfLQD¶U f'9vçææ~üÇüŸøÄ+¯¼ríÚµ˜t1ÿXF@,gÇ».­b1íØX+·´‘=i”,÷á‡.ÝX &Ù»|$*ŸX>¼Ô ží·Þ«ŸÓÙ¨¬‡¨(È!^ÂË.@ÜOÒ°°å6òF éÆ0¸“<÷Þìžž´èèÁ Þ8¶ 6Dw ëÌ ‘ÏñÀXû®ø9}úôÝwßýúë¯3_ª1 §RÚ4­ÉH±ú$F³¦äçcͽ±Oy­µƒ‰ƒƒîa«0á:Ì®Àħ«ô6œB–ô‡õms¶t­€G<Çð°µu“TfÍš±ˆŒ|Ðô„N§Θý xžCD»%~—†‰ÜBwzëòŽt2ðºÏ3¬&''×ÖÖ–——ßzë­µµ5÷x€kˆÓ…‹A×ÈÔÃêk¦ˆ¼£)òò¢xj#Öp@”Ncy}˜ÎMOOG\‡¸‚ ˜u\<^FÇÑ!„|…®gŸCùµ™ŸïŠ'§Qêï‘;²æfNä~¿o7Û¬2 Ë£òé±KpAâÊòpô-Õ0­22!WáÌë0%švŽ—_¡DZá0'µùœQ.±ŠUW\Wœ…nž…DÇ$écþY]]½råŠy&à!ìØóçÏ÷z½ .¬­­¡„F¡BÐ1 ”NG î‚þÀpçûvö~nobb¢-·é_›žxsbòò$iíG“¨Â¬õ¦J%Ä1j.iÎë´ Ï8MŒœä즷˜˜EÉæçç=ˆg¶kÎjÁX)JìUj—&× —QmŠƒ4“:ÎÃ?üøã¿ñÆO<ñÒd¶Ž5cТyÅÝÊžèÙ/sssïyÏ{.^¼˜RÞݤ›,¬gÎŽåvšÄ§ ]…^¦E³Š†OÀï‹,Ó”N_!CÖüͯez\óĉ)åÇ!ç8¹”¥fS¡ïíí­¯¯;MŽóØ4\ÔØÒœ€I”"ƒH‘º!gÍæ§6gÿîìéþé;î¿c{{ûÚµkÿÅÁγ³÷þ½‰«ÅcØÔ2G/Óò@ÿ´%ø‡‰%wvIáVVjOÁ‹Iº‹r"b6ÕÛ³5?³·û£»3_é»»»»[okjujê¿›"oõïÈœ~ìaƒ7c†…^œ‹VfŠâ»\¸–™TW™ ˆÕèAL‰CÇC£y¶T~ 'tȈ²ÅZØ5´}VòÕæìYº”zˆR›Ix V…™rù´'N ‡ÃˆÇØ·´¨æ¸÷ÓZëõz6ª¡¥Ñèæ£]ѹçž{{챩©©§žz*Ân’a…sô{ÚŸ•iò=[cggçÚµk‰ú†¾¡ÉŸ‹T-`›EÝ?g.ÉÒì¼” ì˜/ÃãB”ºIêpwwwmmÍé#‡tmmÍHû8ä[Ô1CÑz«„X45fïýÑ– %DÑS`,ÄÀYd© k?»Öùlgvmö±z쓟üäÎÎÎïüÎï<ÿüóÏt¶ÿûíÁ7·yÆ[[[[[[œû íHz–Íò6@Cäàø´l²ÂNÒíÙ ró&ñÄN§ÍyÒUäy†?1œ8;qâÓ'Úómjjª»×íüYgï{÷vewþ׿‹¡ F4W’àG¢`¬ŒXHã- B f˜ÓaY&Fˆb@U¨J ¡l_\IíéZÙMË'¸mЈ.äÂ\0²@ÜoÖaÞ‘íP ,WEŠà Bþž Ê •¤*E°ýRݵzï{ßûñüÖ­[_øÂnݺåf›[÷œÚV¹%zA"H 5½˜nöijÏ>{ëÖ­Ë—////sG –ÅÔÉ5“!Kéà Jÿ(Ž[>Ümª¼ æ´@½H+í‹HO‹w—ò—¯]yÎE€Ú¡ÐQ“ci–A.5è%H>¬6žd†ðÆôãÿ)Gó(¥­4${½ž¤£î^æÞt»Ý¹¹9<ÛSߤ‹%¸±±±srgæ™;ÏÞù‰O|â‡~臃ÁŸýÙŸ½úê«»+»Ûg¶÷'ö‡;C4N˜1 ÓFä#]ë´£^/í¨êmî1‡Te¢& ï#t„ËÖŠ  !œ=äj8î÷ö÷ïÝo¯µƒçÎ;wæÌ™¥¥¥oÝØînüÕƒƒsír#º\Ù —ñŒzd’‘‰îv( 7·Ð¦)S\·Ñ€)Ì "“å¢Ë v&–Âä”7àÞ4¥Ûëõò;ÄKÓð¬Ü4 4O›¨‰,“ñ"¢¬E9­XcM6”Þyç>øàõë×sÎHùläY´‚.ÌÌÌ$Hx²„†¯#ñïÍ7ß¼zõ*]%³W<“G—§,§¶Ÿv;*Ô4 ÍšOœˆ—.oÍ8ëîË<`$–X‚ø©§š˜ZÃÞ”Y=ëÛÚ䢠|ñ¶@S Ö~oûý>L×qÈ9ÎxÃ*„Àî]š…”hH6ÉýRÃ’fMD› U0©;âÿþ`uuõë_ÿúÜÜÜÚÚÚk¯½¶³³C1aYbPÄÅ Š®¯¯óá)¤èIB²o±3ú&›wwÞÑyëìþâÛ^OS¿9µ¿öŽš'Ó&ç¿fO"\¸¿¿¿wÏÞÞ#{'ÿùÉÅÛ?þñ?ú裯½öÚç>÷¹—_~ùàÕƒítþEÇ98e%§6W›¾š7ÆsÜq1¡#gbpj;46$.S¼GÃ8p1lÃã$ /ËÃ(\[Öj´ ò1ƒâƒ†zÈ$%h÷†’,‹É¡I3ovv6§*<=Êt>ÄÐñ… ~ë·~kmm-À9ë?'~dßÌõrGÿu7*Xä¨ÊÅÃå£ÛTh8ÙD¹µ”žQ#ÉfOÜ}÷Ý·nÝZYYñ`€ ¥¬Yåò‹¿Çgy@û,°NІ¯cÏ_[f>K´†vXT Ø@¹MF;ã*ç˜CŽ—5m72ßœÚä_>” Ó³@ͼBȤˆë à3&þpbøsÕ'W>ÿùÏë[ßÚÚÚºxñâp8þÍa÷‹ÝÉþä~ÛwaÄÔ}ŽŒª¸)ˆR¾#ƒ`eìPéQ˜¿=><œþòôÁÁÁÞp¯ÿû ™6ãÙI¤ÉØ*ÖB ¡M´É‰ÉÙÙÙóçÏÿÔOýÔ>ð7ß|óÒ¥Kׯ__î.ïïî3ÌoŸ¨> Q¶º1%„üt2!—‰³Vý1¶Ã¦õì‹C@0W öîÃ` ¸#HÁÚŽZX0Ó‡ü9ˆJÚÝ|cÐc†9ìr,š)[lŒdð½ ̡΃Ñ%=_[[{þùç)QjçŸÌÏϧܤ;è7Uˆì°æ|ûָ˨JråE¨];ð./½³³³±±aü³ØP¡T0šíÐoÊÏAý@S<ÜjBݼI!ͤ1/šÒx2”NHÛsss,ƒqÈ9æ^Žíó,á¾÷ÔÔTj3µœNâ³kÿ¥v(j;*äìøwFŸ›¼g0\.]YZ¿°~pp°Õßj mÿ‘ýΗ;»Ž ‘Y[[[[¬uw˜èpJÏÜ4 -ŽNe·Ö¿0˜ÞœîþZ÷àåƒÉ‰É¶×fžÙ{|oð·³ÿë,ÍXó/ÈÅÚÑ)în·;Ù™ìï÷û{ý•••k×®={öÚµk7nÜìÚdk»ïT]à]%ˆòa€ö’É&ôqîD…‡+çMs §cà«IêÔ¥$þ.Åô1|æ1F@WbLiÚ75”<ü§É¦1NûÊ<É|EŽ!¸R”èÇä’, Ž9‚u?‰ÜÑúúº`‘)‚WÍ ºŠâÍÂí CXd¶€¼ŽàŒÙ13°¹¹yáÂ…l[$¼2››%õ̤~‚1h.åÔÔThÜ!¤ØyϱÖSDn—Æ’YÌ»X bH¨ƒ‚ÛB¸—«œcþA¨¿¨,ïííŒZn9I\æ,¼È—GÁ3íÌùHjÆ~°÷{®göS³Ûÿr{bib÷_íNNLNžšÜþåí©ßžšúòÔþľeW`³ œLç“^‹ÅcÌ@5ê]λÜf»­ o¿2œ|erqqqjjjsssï½á™áà¯Ú\›Xž°›ˆGX8ƒ‚x¼ Jÿüóßþö·'ž™è¼¿ÿ‘ý©ÿ{ʵ5Ú‹Ÿ|;ÛýÖÁþÇö×yý›ÿì›/¿üòöööú¿·ÞîiÝÓ-^/1¤ê£üls(ƒ,g„ŠgFX-¬½:,Íé‰rUã¼z-Xy‚°¹¤§Íxf“?)½(–²¼J9-Md«c9–ÈÛû…½vGë¼§3 ;ƒá‡‡Ý§ºí«ÍŒ/„5Mó<Š·ΰ6GÇ]ÛY“f“€{ZðŒ \–· òfè8g=5\/;€ÅW[3Éô Û"åCñÍ7ßì÷ûðZáå#äJ/ŠSD¯Ý³Iv{‘Ü,ƒ¢!Ã0€q¹rŒCαÑÕ¬ÇU\·7è.º}=ê,LŒt#<‚NŒsZбYlí;³öí(ÒyG±Êâ(ÙÞHÂx VU“~†» >Jœ[qdìí¿ý§OŸþèG?úþ÷¿ÿ™gž¹|ùr¿ßoÍ'KŽ!‹ïÒ*/ܹÎ3vÐöß·¿úéÕõîzkmò‰Éî³ÝöÅ61}d°Ž(è*Šÿ „h"OÛþ7¶”FU N—>tìq¸j)Éü®pè9jiA¹òÕ:Þ[jÏh˜kS_/ø P‘ñUNùT±¥CÙétvÿ“ÝÉõÉÛ_¸ýÎ}çêêêõµëÿÎÆÎ_Û™XŸ˜øÖ„;Û¾üjý7î³¼]«Ñnqp‚Nqcϲ7Ï ;àYÍÖF·Yööö.^¼è¦¿FEk¡ˆŠ²ŽgèÚQ%à|Y †½ çu0Äb“8Xcp»i5qÁ<6Ü”µi˜ÁÒ ®ËfÒÑùóç.^¼h7³n·;Ù›Üû·öÎüOg>¸øÁÿ؇/]ºôì³Ï¾ü‡/oÿí‰óß:0ç…&"ƒ¾ó3oG =+m©Z}s G9Á]µ c1Ó–?f€=O Ã×ÞKø„Z„ׂxE6‚‡_È&Ú¡SÇ@ Ó3t‡W‚é cP5çˆÀÛa‰þ¡egÍ—±Nĸ—sÌ?(sØ £@·,‘b]\b”¹h~Ž¡6“šŠP#À§6µp“é§ñ:ÛezLÁ*ôäD GbàÆa¨Õ“““/wÚ‡ÚöǶoü_7~÷w÷ÿøWVVVVVìïîwÿŸîÄô«?Ç)aÚòVù,µóZgrrr¦;³·¿ªE™Þ [t}ÖZCm—ÑTÂ^yàdˆ!ð¸BÍm2±˜: sTE ?¸6uÙáTº#êPu¯ˆñ—†Ü !6YcØÒ”@`úÑ.ŠjÀÁÁÁüü|äÔò377·ùŸnžúÒ©8ý¿ø‹¿ø¡}heeå÷~ï÷~ÿ÷õ3«+¿½Òžn“WÞ!I ÓÓÊíþJÁœ L傇m†4_‘Á[ÔL@ºÐ5«_SzžÔnRG¥´ÅÅ„ýTÓFù¨²ú­PB¾o¨M$¡Õ™vñ;2 _ŸÞýÈîÎÝ;KÿÛÒÍ›7÷÷÷w~qçàÔA÷©·k¬°u=ƒbUj;NUQ³?ÍD‡kÇÓ6¥;Y-ù»˜¾)Õ§µ®¹ì2.Ç9Uæ…yÔˆŸæò¾Þ™*;¬Ñ9 „Är‹|©tm'Ϧ°þ êP, ¾Ô"U<@€A>Áɱ;I6䇜c 9xIœ„ú¤ &¿\(›ebŸÏÍÍ­®®šÍÅ"I·¥nsí½Á)i(ÃL°r\ºƒm`z”`æ:ÝÀÉ{÷éîÁŸìíP+å͉Áö M6{>úô).pMº“æ¶fè½ pP_Ò©j2wñ}9‘,<æ"ñi¦òˆmW‚S. oÙR›X& :‘äÂBYW£Ž¿£³#¼P»òï—žž9-Jk~¶¡tN¸Í] œV5§ÿygó×6Ÿùg~ã7~ãÁ¼xñâ3Ï<³¼¼¼ùovÿÏîÁÕƒƒ‰·¬ °üx9å^5©2'IãÙ:²D!¿Cn€›ä¶7Ä$ e¥W EþŒDê‰Ç ›Ž;ådàÕ£JE^e±mC~ÍãÀ¼ôåÙÊZŸÖQeUpŽù4ÓŽù§×ëÝqÇñWæô§‘AÚG>Ía΄¿Ì@%ÓÙÝÝÝØØàwÊFb»†A`gL¼U ±9.²ëœÙ±-™lYYÓ…Qúã‹2’’D›&A“ÖÁÞAçb§µ6Ñ`°Ñ†ô¹CyÂÀ|³à?| •„.#œ•(^ÃM`êÎhŽ?»‘Æ~›âƒzf»»»½^/£Œt EcC{ƃB%°Ë ÕI–SúÆü‚OXR–àQÔpÔ+ä ðµaÄ„2ÑFM ›¬C´GyzD ©ÉÍɽWön¾ÿæ7žxî³Ï­­­­m¯m=¾5œÎþÅÿÛÞ›GÙ]ÖyþÏÝêÞºU•„ ÙÃÂ@‘¾•- ËO<öhì_à8?[lNËI«à9ƒ3Íâ0Ò-sPø66b0“AdBBX’TÖJR¹U·î¾|çOê•w=7jÏà†ø}þà„äÖ­ïò<Ÿõýy¿SñÈþIÏT*¥„”j ùPÕÀ‹1ŠŸÊyŠ+å„D"1jÔ¨h4Úß߯³¨Zî&‰$xÒÊ1VMaÒ´ fÞEg=’=ÆŠU?Tëá: `_X©TLÏÒŸžD¥ô‰A¬)q0˜DU`@`§yª€lZUaWqc­•«»»{Ê”)«W¯&ô ãÑm E£ *Îì`Cu®‚îÁp¢J|„çpÃE{!`óC³„Œ@ '„yÒèÌîhÔ¨QÇwÜÖ­[wìØjHƒwUFP¶`-(ãWTÀMÁ¾9¼æ7´Z~ÀûiCœ¨j@ou꞊SîH)÷-ò0F;•3ñªª†¢®]Ñkšú¨¦½Eñª/ ^ÊÚ©ÐdŒÁ/χ™ž¼i¯á2)*ç¾ÊÌ‘ò5åì´l¡Q¨V« ‚dø}"¾<®œ:n¥îV´¢ï®2w¼kŠE€ìñ”‰D¢¯¯O­¹™iG­YH†¹(/äÅéAóÈ=ðÖ(I3£N ¤•f^7‰W# uBp§d€l Õó&èÔ§­Ã¶*dŶª x?åÜjUU-t9ûÖÀÀ@OOÐXíß**—m5K/Èm5a'Êó”Æ u&Æ—è]z„]:ŠÁ”¸fÖô]ˆú)n8¡ÌrBlÇ …‚褙aSlìr%ea$£ÿò¸LÀ1“Ê@g‚_Q¾5I§“y̡ޞ'àABTúWkžº Ežöööt:](¬ÀâIÜ«þ)¸j^œâ‘´Ó€XžX„Ò¨¢6Yk>)«)eÆ<¥ÖšÔÁ;¡>£Ð̓öÆ4Åa;)šØEŒÕ(ILèó •Àv,Ï@žÏ(i…¥Œëä W0†bY7œ Û0~^P«¯rºœ¬|>O ¥8pŠ1 UÍy$°j€l*`„>Cyø³Ëqn80†ÕãºÖ߉f¥’'rT²‹6´F___£Ñèìì ‚@U°Ô)ªòuÔ‘Ua…Iêfjš5ìU4 j1˜YìêêÊçóK†MkÕ IDATÉM)°(ñe+pñ1+¡pÙÃØ†ŽHuŽìÜÙÝ­kÍ ¸pt$q”Ýì½XWÀ ˜š¼Òi@ÊZ3f²@¸Î”kˆù³_Ê á-EBre<71Ó>«º³›‹EbµZ-p’žñ¦â™ÐáçNtH•6ÆòuKÓ-1Óð¶œp)¹»N/°yTT”©R®[Û®šåS­­ÕjétZ“ü:¶ENI—7‘H‹E@€ Éyïž”"øiúŒS£ÅX/Aá…¢¢©Ù?!t9­_Ô%œ()K ¦\ñEÚXf»sþÍܘ`”ºRö®'L¢Uo úl~_‹:íY[³˜×‹^uä6˜†<Ÿ×ËőӿU׫âÐê*S*£Ùk²ÕQÕbo±ñ‹Fý­z|q\'?42°øÔžƒ:»e­Û$Xm¤EA¾ó7õ»fë ¡<\n% *!íU˜Œ7çÓÄ–†ÒdŸÀî ÖQ‰Ì«QÐLH'©[UX‹†þF+­D‘4KÕņ&j‰f­Å©´>Édä5¶R#N3ƒlÅ¿©‡0Ó©óªˆèDh(¥&´‹·ô߉‚²Ùñf2`e`S~bfÖª‡uТ|*•:úè£;::(×h hGTaû/ÌW‹©H<³ÚeŠõµZÍN/¦¹4´²Ù¬µÜw¾ºsÏS{~–ÿ™)ÅU«ÕþþþeË–ýzÕ¯×DÖTž¨ìÝ»·P(   ë 'œðÉO~²££Ã`i:‚j¿Tã E™[?O¼ŽF£‘ËåŒ C“]Õ§©vu´Ø­7C´½ ì=põ=Zòå!“\êx©¢:öÆG0ú͈a•æÕ擼‡üLaÀGµ ×<Ý¢´~V'$…jŽ+1¥ö_}°:ZäD1‹|ËêZÍnV»·w•»zê>W¾m• aÂözqÉ¡¥£a/§Å‹¤©òÆ5!ˆÐy6%øH˜FI49T³Òã˜R›Òfhˆ3cÍJyš)ÓaúÄ i›âG9ŠŒXÂû¢ g`²ØzNôŸ>¹ŽŠÅ¢fTµZmýúõü [L{«¤µ…h4:88¨ã¨”Á§Áª©b-ž¡§BÂ÷XÄj¼>æ`"ƒ‘Êë•%#–¤×¤¿ûR{ª}áÂ… V.Øä6•+åÄÆD#&‡ec%S§N=ñÄ_~ùål6ÛÞÞNŽkHŠd2‰lù‡Šc’m¨Èy°6µóÁd•ÈøÆ\¬ñ@âhE`­…ê4®v¼•D¢µ&7Dc¬v“ë·»&¡Ô^Z½^Ïårú"€`ؾR6¯Õöz½^(ŒeŽ* ÿju˜xø'\2¤‡Ê£¥3§Z”PÍ0Á5ÂÃV‘P!äÄo½#{úÜ18¢cÄÒüÒuŸYWÍUG\?¢ážîªÕâžþù%K–ôööÒ…R*S³¹F²thWß Ñ«ÎØ)VòoE.ñalwm7kWh/¬-ۨˆ2Ýã|òZÚzQ§åD„ fEg ¡Ç›ÕéEUC WO MÙ ´ó¤Ó”žÀãnÖ‰}æp•›Ï­ªhš²{³Jl{£Þà\ `3† ÀŽRT·–W $/~K.—Û±c‡òÎ…£ ÅPo—€¢¹-é¹­ hÊ¢*ƒ]Ù$°–‰÷ÔÊ’VÏ<Ø›b¹¦Âv¢ª¢¶Ø Û´ÇmNM€a ÇTˆÓk&[…MiŠrŠ(FS²#°U3¤­/jÜqž)…ã$ ÅNW\½ˆUúêÀá´ŠyCú±ô˜ßŒyé[/%:;R;’ßOvîì,ežŒN·wï^ì#(Q°ƒ‡xÔ´¸¹zi—Z«ÕÚÛÛ͸‘ÞR ا¨)×í­\ ŠëSD¯ŠÌò6á±h@k›@/›˜‹F@…‡I´fMæÎ¤·‡Éñx TL¹ÝX´è ¸:rï™{#iÊþ©NB M꟔n@_ð ­Â{j1œLã0³nP.—Ç?0>N×zjù|¾R«(U>¿×lvb`…1â˜Ç¯t*»€½3$Ó»(tѺc(˜Y+…ª{ÿKƒÝ JW?¤z²&‚*¯É ‘–ÂæÂ'i/i¿×dÛƒdËÜŒR¡;‘ÒPH‚õ5‰QòP/³‡³Y›1ˆSP!T{­·ïD¶ØˆA+Ÿ²'õz”tÏJUŸ °@þl°rO= ^5…8) 2@Ò:RJ@Ò Jßð)„.§Å…5ï 7ÙW2t Zaã0¼¿Fm$û€{:Â.åÄô€.šè¶ãÒˆ%í: 'fñp «ù¨s‚Æd°õ~ìðG"‘ŽŽ:ö#V{-z#¤€F`ßhàlpkj­0yZ&2r¯(¡ò_@Ôà³207†0Ñfö2Q¡ÇiP;¶Ïd³ÙB¡@G¥Né/;!(£óáé5謱}BWŒ¸¶èF0L€¯ËDíAÚo)•J¦ ª˜d‹ Á ‹!¦H¾ªj€Qs*—9ÖYÇPÜW¬B¨u“óÝc‚÷ã¦4m2·a¨ †9t¾–¸ÞPi„b"5¯äp…–V2ÆOÏCÕçšÑçʪF¤½½]ë8f¥Ÿ¡ËõkúèDaèæÒ u6'D×:¾C²@?¢žÄ‘‚뼆ŸŽ éQ²Ç– —éI{àŒÍ*·ºÒD1~ËAð¤w´m£µn}­Jq¦*v¾¸wN.Öé#ÜR´ÅO F èK<6h{w:oĶQÀ·®ï®BïÀ&y­aa­õí¤8ì°Ã"‘Èž={*+ÑxÔ5\d{¤QÚY$“IÎ3@‡PqœM™PÖ©'ì"}PQ|°¿4Õ•>#TTŽ ç\.—«T*}}}µZ­X,B¥¥³u˜¨«Î ÇŸ¦h±`¤F5]üöXãè7ÐŽR8©žª‹JA‚åHwìŒAoã†8µ@µ*}CóÔ­Îéü .C»…qÛm¶µµýÕ_ýÕ 'œ°xñâ5kÖ(ý‹ ¹òT¼œ0Và±h ©ÐÇ²ê–æ|8 û0„(ðZ*à,b)ûv%(Ãi¹áô‘|’xÂ6€•§H_øNûñÎÎN+‡z ìaÏVªj5­%×HF0A} oU=P¤¸òN« ‡&IÔôŒ/U)± ÝUÀídÏÓËqÝs•½Y˜´UcÛžh‰³I9|—O*Ù1Q0ʺœÖ¤8dÊcÆŒ©œXÙÓ¶§vqÍÅ]‘E‘ĦDlaL Ge0ç¡u-2P9QÏAŸaO¾JÞT<ÆKäéL˜1‚ÔÀL ®ŽjÁ׉¸Ž®eI‹•TªB±)0rÀTÑ‹†7Rúa§ñÞD½õn…Ééì=&F¨PS ×Z–ã*JÊhi“çhÍXwtttww}ôÑk×®¥¤3" §§õªIêdšXs2±vÂæàÍÕ³È;Íè²x =ØðèÊÑ«æy-¸IÒîR1éˆJòð ³ëáÕñ¸á\m:uŠGÙ¬UAUs4À9Û>O1"›æ7\†æ‹Š3¦g¦úoÊ¿îšyù¢MGi¾¥§ŒP Vq.¶-á×a¸JÑFÊÿ¦ô ¡Ëi1HÚö}©TZ›Z[;µVé¯tÍêŠV£år¹ü˵Ô#‰Ù E²j[O!¼Ø5­«z¢Ë:^êè%Ø÷Û™Ô èO޽S£ó3j½-éád÷Ó‚V™åÚÒ?ëÄJ^j¿=« *«öH{˜jwxÁsyX·ööö#Fäóùl6‹ø®vãA/§±¡i¢U3˜Õ rT”6Dö%f@_~ùåµk×îÚµK»ñv›h:˜Í‹Væf8ZèöÁûiÖÍk¨„•FéB+-v¡œÈœó´½_ª{ÃM…œP(¬ŸÆž}6'amg“«x*®–­Bá—*ù7e:7Äá Õ‘vë(¡‰` A4ÃÑ*g„2RHÁ™­­;uº4®<Æ^KP#húì1’QKìêêªV«ƒƒƒT°5RÔOÚ¶°ªºœaïÜDáˆBl06âž“&MJ&“===î W?¾^¹¶ÒöDù¸N‰SЙL*{W9ÇðÊùôÇ^ìDxØ#+T)Yð=í/•ñÐÃOþN䋼ŽYhÉ‹f•ƒ èììL&“ù|¾YkÎ —¹T˜)00õŽŠÌÑQü®®® .¸àä“O~ê©§–/_nÐÞÞn6žñå(Rœ\­ ­“x yåÀ7 “´á3:¡©bY ‡ÃN)ÊnŨný%9.ìÔ„Þ&Êlâ¾”Ám Þøµâ,ðèŠôõøÈ-ܯ˜=eÀÓüC]‹Öjì†æ9Søx%OŸ¢¤ïª¥¤ûÙªsL «ÂºÞ‘F`ÊÐÌÉRž%RS*•…Å’ÐUâOO;¾pKÛÿvwwŸyæ™›7o^»v­•Í5˜c33,è)o….§e…µ}›ãÈÀ}Îu}³ë#§}äÊ+¯ìììüå/ùÜsÏ•Þ)5þÐ(~¹Øñp‡îBà7L_³ó˜·ÂxCûVÓh…ƒ…« €Ò¼âè©PÐ |¶“À¸™ò⢥Ÿï† µ k–ó0•Ò××A–›ÌP¡Ïf¦F£‘N§9r‘H¤ÑÖ¨L¨D"×pmŶ‰'vØaöˆì.R©ÔäÉ“÷îÝ»eËÚ¼šÍ î¥I6ÎÀЖ¥1àbͳ Ùã²>’š"D0@:ÍÛeÞ“aª:ì"í“kzªr:E«Ow …c B#Õb,%­ÓjQHÑxû#Ï/‹°üÙe@pg%­úrÁpr+i!µG¦¾ì7’Ê(.ÀS÷æçÜp5³§ïùÛB6¤¥<bk‡<|k^”‰ G¸©ä[Àôé´YE1‘H …U«V•J% …yV(ý „ä隇.§eYξÚZ*(µ•:ÿøÇ§OŸ‰D¦M›öÚk¯íÙ³ÇE\%UQ¬—‚ÐÌO BOXÝÌ,«ñ»V4[q*-ëÇk­.&Ãø!ÞŸ×Puí·+·1»¨¦iŒk áEñNÔ‰EìFì:¦¨dÒ0¶‘ÛÙÿ*£F=@Eß½™yû°Au”!á­záœì0Ó43°)G§ŽòP—³Ù53ßJç! •Ú™¼‰U-glÒ¸$¨4·îí6-ÕVz*,XÕA!þöŠÅbOOA­ž, ì :µºœÖ¬}/;1êøÕ«W¯X±"‚U«V™«Öª šËNf›ëhJ®^¶¬ ,j¡FõÏu‹F\R†yz”;™S­Š;Z™Ñ gÆ]džø€Y.ôµh‡RÇPºCûÁ+ˆ–([Ë€êØÕ‘2£Sû|­>¹ÙéøjG±T,÷_r[ŽÞÒÖÛæ6ìo'‹Å-[¶hçalJ‘Ê©¦k®Õ*2TeØÓä–q9£F2Ñ6Eî€ó:ÅVS­2°Úä#ãøõRµEMÌ¡Ù<Á¸öÔ Q¤ežCÇ¢mŸ[|‚€v ß ›€¦\¶»°¡ª™¦ýNüäjqø?%gò¢ )´„ˆ2/§ÌãÔA` ^OÔ ±ìaKP”nNåù½^»EËwÚ@òøæ98ªß ¨Ñ„‰²DkÙnB—3¬°æœ 6‰ƒÿaðÕù¯îÞ½;nÛ¶m`` >¹^ÿX=ñƒ„E[y!¼‘WQÕpÆ¢EtÞ¬v Åb9:  _¢´f"Ah͇ìA;¨Ê×éŽy†šW[+Û›PÑOoÜU®wUz ÅbÔ_=ö`Ëç•ÛÜ+o‹W«ÕJ¾ÒþãöÚ¬Zmj­íµ6â;mqÁðMi¿nĈªéiœüÆÌ¨b­Ñsµ0 T%!€ —o©$Àk+âµ··+ªÞSÄÁýàþ)ÄÃ’gwjá3»Wݹ§ïça4@W2ç„Ö›Äþ wÍHTÕPUï8ªÒf z!íºk±‹ O"Ì PóÔ1 €Úv‘êæµ10D =7e)2~H™ ´T¥õgzÈM+ïµúµ´ëagtŒ÷€%2Eèè©W¿¢“È ¢yÐô…½œƒ¥¶Ö(7b›båiå½ãö–6”b.V*•ªªc‘r$¹;YWU΢S€›uP $h…Ÿ*2•¬™ÔÄJmÌc²Ñ©ìYfÖ8µ¼9g(®‰‚µ§ªÓmZ=ƒÆw¨} D×€ŸóĬ͈( ¤ØqC£‘ØÕ¿RO,MÄÞŽMš4éŒ3Îèíí}ùå—w' ?,DVD¢öµŽ »e¿HÉQcû¥Šé°_M´«„¡ q¢Ø­:Œ*\¦#ÃH§Ó6ÿˆÛÓ¡},…¹^óåö hbkÏ6R:VÇ£zÒûjžS Ž Ü4çœ«í­¹å.º4Z{·ÖìÑ›¥zt4¦²¹(E&‘@Ô t£R8K½ °ŽÙK$gRŒ€ŠÂ5+ŒL1Ic'¥¶Þ;8÷ œ¥‡Ç›¢ l„W€¸DÖIeþI“c'3θIÂPn´‚úè ³Ý‚×VÙuÔ§(PW¤îª™tØËi=HšG­žf¾Øzפ£¬ÔѦòäUœP§×ˆ‰¡€ŸfLeîÌ‹ò´¦§Ü*ØîNk#ÊÁÕÑÑAŠëÁ®ÁÑ„œ(þR›«Ü5çA»GvËÌ{zú.@“©þQ OÞœlŒkÔ>WK&“]Ñ®Ú55žj¡P°/RµÏyOsÅÿ¯èœ‹D£ÿ3ê£íÆ 2gêOŠ?(…ã0Ÿ1uÔ®®®3Î8£½½}ñ⎽½êŸ4òÐx–ïQ4—"¤A`ãñû*N_¯EÑô›éîí‚ 7è-}®Ô¸¼Q{°–êM»èÄ A·œò?ËóS ñ”™I™(™²äÀC¡ pŠxªþÂ5Çh5›X Øt³ÜµªÌqr͘Dn8¹™VV Ak4Žj0ÍBÕ}à‰ô8r”ì™Ú†Òoã‰)MóXt¢Y˜æ ÍôzÒ…½œV.**TÀS[*•Œ…PE‹¼TÕ Ä¨8¼E<ÁiJ.¸½t:]­V©~8á PŠ*—óÊÍÚ!×d!"v£å ZI®À¼9™ßTÖQ¬°NkcÝL$¯ÀàkP œN×F"‘è®hôÞh,‹§â5WÓV0B¸Þü#y·×µ=ÜF«éjîw¹ä#Éä£I-‹«, ³Þ fNcU˜OÕÖÖÖÕÕuúé§ÇãñU«V±£´ŽäÅìŒÍ󚸤N·èàªr–c«—U»>×5nô¸S>vJ$Y²dÉî{v—ÿWÙu©a£60c6?dh#€¨+œl@?ì2Ì[cÑ c¦Öj·£»(ÌÚÑ"o²=´¾ P@ g‡z¦¸éŽÅaÐä³™¢ÒÛ(5e=î´Ùåxøfz˜u^HÅGNkjÎÒ_=2:yCõÒÞÎX…®d¯è7DKí!t9­„P@Ã(3¦kæ‰V‡ö ‰p9À p(O¢–Å4Þר‡Š¶˜Îª6½™–`ZÉ£`çÙ²lNŽi,kzG%ÊSvá0ëù±ëììì´|¥^à|ªfèõì9;á s¢RÅ…AÉ¥È"{’hYjÞiìæ6r÷çR×§êïÖ£.‹Å‚Z|1Yùv¥4£”x6¡ÆŠ/ÒDÖž3##”‰t|Õî˜C¥RÉf³?þx4ݾ}»>54tM_–5Úcg4Xë“Ø^½åüÍùÃn?ìè#¾ü?]~É%—4|pîܹ¹›r»çîŽ]\a Âfw@Û¦ýv | ¢óå&+W©TŒ:¼oN–'À´?EÍðs<¨¶¶6{ ï†AØOQẔçªQ RnùBÅ8Ø®¦ôà Õªš˜,èglÃŒïKM’ÈP(wJÜf‰NI½ëæÕBˆ™k†Pª…*Ô¡ËV…wB¶¦ãözØ£<çÚ!l´P(³W|€,K}˜õ ©¤cT~W¶18ûʨ¡ÀhÛ£v\US€bˆJ1*xâµÎ¥›-`B[»v§é¡¶4”#g_|ø@Ÿö~í÷ÒðŒ§o¥J±ž˜ëw‘z$b¨F¢+£õiõà… RÖÂÕ™å8Qô*ñíh{ÈʯjΠ··×nÜBL'Ì3¯fï@U°ÌRk‰™|À)A¸˜ ªÁ¨‘£Ž:ꨑ#GÆb±£Ž:ª££c`` ˆ¦²‡ƒIÒߢðe–ÑíØ^å™hÌ÷PÕyVÅLÁ::otÃé5Í’ò¨S©”y>úáÚù 7å¼(ýªXAŠ„ôH4ï$i#¨Òz€Žyg÷f”ÓVg¨9ƒ !QnMÛTéÖÀÁ§Š¡`U”_æ‰Ý¹á´R!| Å½-1{Ú0n¸¢Aû@½ÃÚì*Åö¨»â¿Š U’`# íÀF›!5jTWWW6›íïï÷*¼øn0™LN˜0a÷îÝ@®=ΛH$Ýu%W:±Ô“í\3X©TŠ‘bpZÐÓˆ=´ ªŽÐÀ ·£å͉ÄÔ©SÇŒ³hÑ¢\.W.—mÿ[à v+¨WS²Ò>{Ô4ür¢¿¿Ÿ_ǃå0Z¡ ¤ìR¥Âm+÷(‘\±X´:¡m{Z¡íííä=N䈼ò¯†bµÒÖå1^£DU«Õ …‚±¸âÈ=™ƒÕ¨càcÚ×ÔÆ3}G ¼Ãi²ÙÅ„kE¢cýÛ(^cûQµ%zÎ`1dðßh‘„ÈHû=zPµ‹ãM`hßÈ~ªX,qá^Ì:Ø’k!|°" ì@rS4(£‡¨ÈPÆ0½ =]:¥ù¿’Ok¤#.žŸ§ám?k+ÿÿåÈ"Å­Å7ß|“«ªü—JÛœ¶`OD—l0bÍ|»HðráX(Êÿb\4geø`.Ju€ì©2°¢QªEß¹\]ªóÍÅ鯧ó·å˹rÿŽ~¸r¼\;±ÖöX[l]¬iASKTÓ†Iòv—½  6lÙ²Åân-¬y½Ð"¤ã h$'³óåœ3öUå|j ÚÑ ¨×1pbÞ €Êıñ´c¯®E‰à&£õU'Œ`†Oþ‰HÑÓ¼à¿`@t‡kÙ\Ÿ<œÄ+l• Ñ9B¸!¸0Ö¸±?FŠºœd9: àl€›´ž° Œ—J%â/ùjÆK’hîOÑŸP"×Qgmi¸&…4å¥6ûB ÔãïrÃ%Ýp.8-d[üHW_C*si^/Ú“iáðp HfÓA¬Âè¾ÇO­bM2?íšzhŽÔC©Ò5%·ÖÅï‰' 7Ò•o(GvDâoÅ#ñý(#à‚ 9ZnÁ!'8äfð<­†)ל´bj›'û°&Ôßñô¼)8»¼æ{O+±A´ýc[ô¤håœJ$‰n‹¦~”ŠÅbAd?ºÌkÕè«Tª•1p—ÖÐt-D]ZX™=Ýtž!UV|›mx‹Ð]“š^`0Û`„Vê™T‰Cý¨Ž.Ø+P´4×Ã_R@ÖÔQV¼ ÎÕ*€^kÎúTåIJBÚ3ZBToŸ¶(EWü"#úÁ µÖë„.gî¬5ÀQZÄP™äfÞOîSG u0Ó£¥Á‹(ãˆÂN{†£öŸrBÚï‰ÏkŠãÉa1ƒ­ú’ð<Ú+Vymó¨#ƒrn8–±P˜VªzvT¬¢åP®¤+®ù_ba"¾+^ýHµðB¡)Gú#©Rn›s»\4UQàdúLðAN¬¤^n8?¦f„ôÌœj»ªwÞɷÁ.ª:³öÍV5›N É><ÅæDãá¡ú‰«é{±ë"á¡•”Ø·‡Ú˜§¡€o-;»ár|Ä^4ü›U½5+*@ ¡¥c{ž^RH° Öнg¯åIÍ,¥B½Ñžá«šƒ2ýPIf“Ø¿ZðD9K¡"4G©”h3 Ú$#ûÔeîÇÐOŠÕJ °0"zt½:ߺœ/OPü=á›YЈuÐP^ö³ÈÊjþkøz:%`+UîVGV­<“™ü A7æÌŠï MmƒÚíà·àÃðè5í )¯QÞåÓ©16³jGeÌ+h°F‡ö;bEéPéÖòèêh|U|俎¤AÂШ£Ú5Ø7+i´6™”xê"J?f÷! Õ²¾’äÓÔAÜz~-â<”²Èê{ôÛìfé&*µ„­I34bvã@ ÆŽ5‡2(ÛS2–<¦¹ ®âêÊÕÁæ³ ÕfÖñ4U¤'Ê&²Ú ]òqмnhž^1 x#;'Úà²!ë-•J$1JWåDÅË, 0®‡éF…‰@¦‚÷²<`–ˆa |¥'þlãu tiÝAÖbfz=°|¤bHþxÉ0hŠm`z“dëØ;Ú €Í’Éd¿Üš<üí³2ZI$étÚêÔPª˜íãg­znŸQÝF*B©TJi”à’ßËSµ0Óü+$rž¨å~ÎŽ)׿¨Y¾ÓëŽØo1J1<‚ôªðÆqþùçsÌ1Ë–-{饗†ò52R`Ô±%Ap"Hj½ U<Ó²’¹voFÝÔ×´§­b—°±i§J»}v ´…€z]nPjzZj ô¢c„!¶çàÞ> „7Aé Ò°É ÎšaDÆDêG×s_ÍÕŽ¬¹ˆK=™Š/Ž×ש=è¸o£{°'¿aƇ~¸··wppÐ:piªD(¦‚7^-î€ s¤ 3²a*Š©ƒ˜U!àž^\èrZ³ŒØÄ²¯=HÍÏ´ÿÄs`#YL¦³ *¶­ s$!1\Ìöóæ«TO„b¾'YºœÖ,ãÄ- DÜ 踯ö0ˆìÀÞxÄ!ÄDõzÝdˆÖ™PQN'57i€›Â:ðÈ<36¢Ž›QÀ1š[²@2t_´¡nÉŽà(¼ˆ•È¥T*‘p*ÔV*põ m2s¼‡¹á²Ô²­˜ í}=ÃDy^بåp†Ê £SÌ*0Z9 0ßPq«°˜]IµZíëë[µjÕž={V­ZU(še»(FÙ®³L?G[Nññª CÍÊÃth¹IZÕq¤é‰*Ù[Vü…“{oiʨ=s‚uSt‡ùÕÄp#±”†&Zƒây¸m¯Ë¢)Â,u¢Ë9™©[M]•ŠF£±x¬^¯GmŸÝžÿ}¾íWmŒ1ha ¡q~ƧÁßàä,Ÿ³ÓaEåøÁ‡)í©*©:òKUÄÖSvÀ é`ç1¡„.çZår9›ÍjŸßã„m¬ówbh]E›uŠ{ÑqQò¼—7íÁ—SÇEy#^'ߣ¸ðú\?¦_w§Kí*k^ÏÍR‡1§ˆ[Õ¸Û\Ž•³ z3æ7 Biqä´’ƒº»âh!ïq¬úªž`>RÃ:ê–Û¡‚lVÀ‚bEßµ··Ä99N Á[UZ3‰²cÇŽßüæ7±Xlçι\N•]šA­I¯+¸&{Ƚ4ïÑZ¢Ù86³R(yƒ8nh<Ö¾a¸)uÚí@$ΰYÒk¦ÛOPï «Ûû²¤MŸ9^‡Ý®EEí–+ÉX3¬Æ“ð`•8µôßKéÿšŽ·ÅÛÛÛÛÚÚì™$¿—¬ü×JÛ÷ÚìIªSÑkÐÃâ‰8¡2‘†Òy?ÓEvX¹®ÏJ1;„­ ¨Ñy/…›ßð,@˜å´rU«U£yghÐíd¨X©(i<®}_ýK'ú»Ì™{ÛÈ^í:(/'¹ŽM³Ë„`lq%çÀ"Ø×2uhžÀZ&4«œÐ */ˆ:W ÓVà©ec[…4½]F3æ 4ò-*ŠêåˆÄ˜VÜ£äÈL»ªùâ”%—àÕ~;s”J=BŽ/$XÖ —µÅøëÖ­K¥RøXöXg¯ÇKÄÃÛÄÆ±9QÉôFü˜NÕ-J]Q{*féöÙßÇãqKa é®Ã¿H-S°8³÷Ôúì @ƒ}Ä8baa`¢:d-^!<uÛünˆóÑ8ÿ½f ·J–'•ƒÍAWw×g>󙎎Ž'Ÿ|rÛ¶mµZ-è Ü6¿Ìn‡3WÃSÞ]­Vëìì¤u:uêÔz½ÞÓÓc9®òéiX%ÞuÀ™Ú& ?ËAùj×*©ED~Lžä)„.§‹ž Pr¦#-¨§  ¨H›ïñ˜O±Â†¶nûÓ{›ÖÊ[ ÖàÜhÚáÐ)}äM)I1f‹Å&Mš4vìX'º8XXÃòÙC¦Ô†Öà b:Æì="päR‡)Þ8£áÚ].Ÿ³FN‚T|,ˆ-ÛŽWÚuBð‚*D‘ÃèÞMñÏ.P‡a7¢™=àF—#Ö ¦ ?ÞGÕ"RUWÄ…hã7¦ÓéD"Q,©¤Ù]ST ‚ «« Æ#ßRÃ8‹'“ê³¢î}IóÄ»¥^¯—J%6$³nKª¬ª3í¥°*1 ð0HHy­d¥*&[©TL ˆPL³%ºwÖ€$a2K c›’ÿ{ iBy–ñÒýjžoísÚ s ±ûc‘Íç\ý’zããö‹ÛëºGõ‹(œrÀžN‚«i M~ RíÂŒa¸–¤Ó+´¨è* 1Í&p™Uvp×D§­taa­õ‰Î°ìoˆJR9¾´=¤JѺÔ÷U)ĉ¤‡NœØ÷Ø‘à3M¢¨Vv’Õ°¡ÞvÔ–€ª>‚9‘dô•´‹¬DXÄé¸:ºèzašj/]'~šµ aÍÒ9s{ôŸ•&F^ôiÀaëÓ¬N9™³±£n…ÔF°¶ÏПÀĨ~!?üp+Á+o£B ÔZ±`¬€BBg’<©@-’uÀUXûKrGµÈJY­¤®´£UTP}™œ ét9™.¥<(æÌ;öõõ7Pê„FÑÌŠ) Ýa¸UuIÓ´©P=rA sñx<þ\¼ë™®ÒWKõÓëιøœxÛmžò%Sí~QÁ£¢:F›©ÚáÓ:0`%6<ÔJ¼}r¦=K6³½Gµ?t j8kqó"t6nhTEàÜõ“t_°Î8èˆ#îA ©ØßjµjQ°Gü®ƒu‰Ä´iÓ²Ùì¦M› (ÆpÆ01pØ6e8†Ób§”íi Šq Š{Š ¥³5Ò‡Ú½ðÆYtN«ŒÇâaÍ58ÐI@7¤Æ_*°ú)"M¥½R‚^'ä§J/¯'gAªŽÚ9çòù|¡P°@«“: ?S.ªCš¯(´‰ñ,¾„T[ÇʼnÄÈ‘#-ÓÂiK’'ϯó8+Ýp1ÝÍ)¯.£ò  àhþë7+@΃þj‹–‰²iéI#;D°(Áÿ!¢ãÆ*“º/µßWEöï èÔ&ÀÈÎð¯vÝpbMgŸY³p®_AIŠV- ikὩÕkaŠºçe6Zï¶)_-ß'“IË‹•ÓÞC‘YkÊâqCÔ}Í¢;ìWU µó`Zô*|‚5Q󧓉üŠŽŽ»`»ì‚GÄDünÔmVÒ°QoŠê?Q3UcSj`»3{¡&LaèNXué?Ó ³gE1ZÁT¥ ’ ÞXXU0ß 5¦Ör</‹ž&¬*QBjI&A>Ÿ'—RZ0˜4ImÅÇ(­ª&Tê–ØmbI‰‘s£Fšó¸k=0 —‡Q6 s¡GÔÞE÷§çØxƒl< ‚¤¨eœS½*É*¿ ‰Þ#¸GʘÖ9ì¼, ä1Úãµe8@eä ]N+—– =Ù,“lÅPòz€øc"¯Ú²’‚B韱º%¹ Z©×ëï¾û.C—NhùqNªõÂ9·´&›Íjà¦5Cû ”b6ˆ*„*A¹át÷Djè^«в•PW(ø.…AS… QLÑIIK Òk^‚Gío+´Ú³`_’N§BQFx){2öƒÚòÕá*´ÝP9¡¦†_ñZr4Ñ\œq¢B^CkªµZ-›Í ó*4 þ@)jtªCLïÇnV•М¦Øw¥«ÐÂöp¹\ÖàC už"Íú•”Œl€LSÑ¿fí;¦¬ð ä¹òr¹lÛÀ §îUŸ¤ºSžp'pvÈC;^pÕÐ…Õ¸Óv5½}­©xÇS+Ÿxqkâš E©¡–jUŽ2t9-›Ëñâ/ío{Lˆ:âQwxSî:ÿHIÚËšiƒ{?è±½rÞh?(Y€²î«®R¥Á3FõIg¨ð€µs2ÚFGXGҸљgOŸ£YRÓ›#¡ü¥þ£Uç¼v¸YsêjŠ‘rBµ Ò,ú¨kµZ.—ó&ŠHòðßæ†•®T«[SÛëÐ2ŽYÀ#Ftww÷õõiu¦ýµ¤£ 6g©Ò®†ö˜Òõd#”๙„FC+ðͺùu'k(ÃßPŠ´­kC£ÔÞ¦*w(Ä_ežIjÁõhqB¡ ÷°èÄvé”wæÏŒ©! [3@P&[AîQÇÓTæãáè-¨B•Š)¨fâJ05vÙ†¥N®À"å8Ph¥êw„.§eج µÌ0ÓÔU,VZ•¿–Vf—Î þF{6†]¡²¡€K8ª)PØŽd\¬‡AG8ð&TC¬J®µ¼|Gðã(…ye;~Ƭ®GÅ3ö³Íd$T~Ô à¿-¤–¢¡Õ?€¨q2hÏFð¯NÔ²­rB{Iù€™R¶å‰P‡ÍЃöZK¥Rgg§sðÕ9æe¸áDmJkf¨7œ(ŸÕ°öµâDûjîÎ]°á=ì¾öihsªÊ¸ÇÞ,b 5>khá‘ýH)þEcêϺ?ñýZSU.2ŠçXE¢ªkTR;E.Ø¥vtt¤Óé|>ÜÆ;Ô¼J-)X_ìõ©* õ#mèÒVÔïo!³gèrö1è¶¾!ïõP¦ãªØ%Ÿ·¯ìÄ‹×J”êRÐ`¯+S“FÁd^c€­o°±sâkSªP:/cÓ /=¢ÂLÃvéíÓÕî7óªæÿôÀÛ˜ùÐꥑ}ieÒ#8Ðó†Íz0š*ìŠÙCÍH4fJà)ÌÃÐCù^û+ê{ìŸìf±‰ŒRå(•J›7oµ¨ ­–èÐbñbjÏã:‘ Òú!•(µàD¸ìmÜ O¦\.i)F¡n .0ÆXj¤”þœs6†¥Í!j;ìŽÖÉbl7Ô¤ZKÒËÈ~Ì3YÓËÞˆ6Y9­[¨OÑYáiPl€8Š‹4_¢åc=öì³Ïž7oÞÆ¹lƒòÀuTN#Ìr ìImû¡®dΑYò3;\¼'B—ÓbК–k”$¿ùõxjiZÁWÂ4%.d‡iù‹#GäN]›Š­²(Ò~ð8C5ëÒ8ˆY-Žr êl³–•'‹aÀ[ù{x ž©¦k°èT-,,$oè³™ Ek ÿ­ò doLÕ³ãS9¥e€µgu´Vo“î= è/UÔµ9°ž™Eà‘ä je¸Á¦ØÓðø““å¥^܉”,«ömZêQ„×謲rðÈXÅ Î$=  ŸI;€†j%wd}#»H­ Ûôox¨kæà†“ÝÁxÜ ñÆz¸Y¦gpŠ*öì ¬WP{OOÏoûÛ½{÷*¨GiY<ÜÏœM‚•à ª*¹R€ÛVWáE3é‹ ]NËÖ±Ç;kÖ,7\ÖL›^GA+Ë”5tó‘â(ç¹×ópÇ×4+×–L³À_¨`Åj«Õ®¯6c›acÊg¥v–¸[ HTuFu—=¥NO’@Ï-ÏJõ’½QGÜÚ«ïé¹¾):úèÔ#vRXªòjë©VÞh¢fEÀ«t PÛäo´ž‰ƒW²dXŽTRêêõUœÆÃ@I ¤dÞ6P×È3d¥t±Êº¤){ƒŸRö[ètÊJ{¨8Zoйùèy3¹Úãq¢^a¥$Oöiz¿J¤¤Yo$™âžŽ¶è³r"ªëeuÍsý³L<ùZäšÑL4¬:â^=Ó£@ŒD"£F ]NËÖI'tã7†Ï!\á W¸Þ×r¬…+\á W¸>ð,'‚ùóç‡O$\á W¸Âõ®óÏ?ÿ.§^¯_|ñÅú9O æßóOïíÇ’Ëøû ÅÁpïÉÛ94ÞÈŸ¾†ƒá2>°×ñ~o˜Ðª´ä8¿‡ßÞyçÀåð+¼éë?ñ_×4öÞþàûýýá…ýß|ÿA{anø@ÃÁyaá/ìо°a4EaÒ®p…+\áú`Vèr®p…+\¡Ë W¸Â®p….'\á W¸Â®Ðå„+\á W¸B—®p…+\á ]NøÂ®p…+\¡Ë W¸Â®p….'\á W¸Â®Ðå„+\á W¸B—®p…+\á ]N¸Â®p…+\¡Ë W¸Â®p….'\á W¸Â®ÿãu`ñäÇëVt÷¦láZ'^âBõ—d'¸¿`-“÷㼯*>áiÉù¿±Ì7ÝtÓ\N,›7o^KüÞ³Ï>›Ëå>÷¹Ïnüšk®¹ë®»{Y¹råË/¿ü•¯|å ²¥·œƒyý⿘0aÂÙgŸ¾õ@qýÛ‹.º¨%7S(²Ùl«~û{¾N<ñÄCæ^:;;ƒ 8dnç{;áÁ9˜×Æ8âˆðí8çêõú~G“Éd^|ñÅB¡ð›ßüæŠ+®pá W¸Â®p½w«^¯çr¹yóæýã?þcW¸Â®p}@+t9á W¸Â®Ðå„+\á W¸­ÿÀ~S>Ÿ_¹rå™gžéœËårO=õ”sîüóÏ;v¬sî•W^Y»víÈ‘#?ó™ÏØç{ì± 2™ÌÔ©SªGÖßßÿôÓO;ç.¼ðÂÑ£G;çV¬X±~ýúîînk¯AðØc9çÎ8ãŒcŽ9Æ9·víÚW^y%á _87ÁÓO?ÝßßüñÇŸ~úéιÞÞÞçž{Î9÷ÙÏ~¶««Ë9÷â‹/öôôŒ?~ÆŒιR©4gÎçÜÙgŸ=iÒ¤ƒçFæÏŸO‡³ù"W¯^½fÍšt:}饗Úgžxâ‰J¥òÑ~ô¤“NrÎmÚ´iñâÅι/|á ñx¼µ÷²eË–iÓ¦Ùÿ¾öÚko¾ùfWW×g?ûYû›_þò—µZíôÓO?þøãs7n\ºt©sîoþæo 4þü¾¾¾©S§f2™ƒííØZ±bÅ”)Sº»»sË–-Û°aÃèÑ£/¼ðBç\½^üñÇsŸøÄ'Ž>úhçÜ[o½µråÊD"ñùϾå÷²nݺx묳̘?ùä“ιóÎ;oܸqιW_}õí·ß1bÄ%—\ò§W,Ý=ñˆ3ÿÓkv önúø_öþÝÕu×]÷Ì3ÏÌœ9Ó9÷½ï}¯\.çr¹… ž}öÙ+W®|ê©§J¥Ò¶mÛ¶nÝzÊ)§Üu×]}}}¹\nÙ²eÇw܈#»vË-·T«Õ\.÷ì³ÏžwÞyË–-›7o^©TÚºuëÎ;§M›vçw är¹Å‹O›6m÷îÝ?üp¥RÉf³¯½öÚôéÓ*óØc½õÖ[ù|~Íš5‡~ø­·ÞZ«Õr¹ÜóÏ??cÆŒ… .Z´¨X,¾ûƒƒÇwÜm·ÝV(r¹Ü¢E‹2™L2™lù],\¸ðG?úÑí·ß>kÖ,ûï"ׯ_?{öìr¹¼k×®õëןvÚi÷ÝwßöíÛ_yå•É“'7»ï¾ÛÞì’%K>õ©Oµðvn¼ñÆx —ËÄöµ×^›3gN¹\Þ±cǦM›>ò‘Ü}÷Ý»víÊår+V¬8æ˜cJ¥ÒO~ò»ø¥K—~ò“Ÿœ={öš5kòùü›o¾™J¥&OžÜÂÛ™;wîOúÓŸüä'ÿ÷Ï_.]ºôª«®:ûì³'Nœ¸xñâ ”J¥žžžÝ»wŸtÒI?øÁr¹œ¢SN9eçÎ?ûÙÏ*•J__ß믿ÞB'Úh4®»îºûï¿äÈ‘§všsnÑ¢E .,‹›7oÎf³'œpÂwÜ188˜Ëå^xá…ÓN;­§§çßþíßÊåòž={Þzë­ÓO?ýÁܼyóàà૯¾:nܸ1cÆ´ðí<òÈ#<ðÀܹs¯¼òJçÜààà¿üË¿˜X´hÑ9çœ3oÞ¼¥K— …wÞy§Z­N™2åÖ[o-•Jf"Î<óÌÕ«W?ùä“¥RiÇŽ===§žzª÷+²ùêœÛŸÿô«K¹ñÇg¾ùÛò¬9ý·ÝýHð¾­k¯½öþûïŸ9s¦ýo&“±?œ{ƒƒ<òÈwÞÁêÕ«¿üå/ApÆgT«Õ ¾öµ¯-_¾<8˜ÿòË/7ûî»ïž{î ‚`ùòå_ûÚ×ô_þò—W¯^ý /Ìš5+‚ÁÁÁsÏ=78È–]dwÞyç#<¢i7òÏÿüÏ¿øÅ/‚ ˜7oÞõ×_¯7x饗nݺõ`¸‹M›6-\¸ðä“On~Mv‘sçν馛ì“ý×mÈï={öAðíoû™gžY»víßþíßz?Ûªõâ‹/Þ|óÍ·Ür‹ýoooï¦M›‚ à"íàA0kÖ¬^xƒÃÅspî¹çžûµ·³nݺ… ž~úéú7ßüæ7/½ôRï"—,Yòÿðú ®¸âŠ7ÞxãùçŸÿÖ·¾A6›ýô§?ÝÂ{i4 .œ5kÖƒ>hc'‚½{÷®_¿^/~æÌ™6lààìܹó’K.уóOÿôOO=õTkßΚ5kæÎ{ÑEÙÿr‘ÜùÄOØžä?ýéOg³ÙG}ôöÛo‚à7Þ¸âŠ+šÅ–lmÖœþ/þó‚cŒ:çbñ¶¶ôˆH4ö>yÑ]»vmÙ²åcûØ¡Q‹,—Ë÷ÝwßôéÓ·oß~ÜÎ 7Üðï|gúôéÛ¶m£ªù¡[GyäŒ3¬p¬O}êS§œr ÿ;f̘#<²§§ç†nxà>t·3uêÔ3fD£û;ÇëׯO§Ó&LøÐÝK$™1cÆqǧ¹mÛ¶Ë.»ìšk®±Bô‡kM›6ÍÊe¶º»»gΜ9}úôéÓ§ßqÇïÍC‹ÆÚÒ#FM86‘êxßá===?ü᯿þúQ£Fæ ··×ršï~÷»:âô!]7ÝtÓ-·Ü²|ùò‰'Z*\ázõÕWo¿ýöûï¿?•J}ØïeÞ¼y/¼ðÂw¿ûÝCæíÌ;÷î»ïþ»¿û»ïÿûö{éëë{üñÇ—/_¾|ùòo}ë[ïù÷¿ï=Ò+V<ûì³+W®|î¹ç¬Ãöá]GqÄUW]Áp}`kåÊ•O>ùäµ×^{h¤q7ÜpÃ'>ñ‰o|ã‹/xôÑG?ìwtõÕWOœ8qݺuá^m½Ë9çœs?üpçÜöíÛ7nÜhèšp…+\ÿþµnݺT*eاC`Ý{ï½ι7~ØÐpý¯ñÇg®›\7?¸ýÞGß×&UOOÏ7¾ñ ûóÚµk3™L&“y饗‚ ¨Õj·Þzk&“™9sf¹\‚ T*}üãÏd2?ÿùÏëõúAÕo7ÀL&“Y±bEÕjõæ›oÎd2—_~y¥R ‚ ŸÏÛfÏž]¯×ëõúC=”ÉdÎ:ë¬R©t°ÁÊåòÌ™33™ŒÕ‚ x饗ìú×®]k7xíµ×f2™«¯¾ÚnpÛ¶mö 4ƒç^¾øÅ/ògï"kµÚ]wÝ•Éd.¹äöØù矟Éd~úÓŸÖëõF£ñë_ÿÚ~dïÞ½-¿— Ü{ï½öçßýîwýèGíÚ¬]*•Î:ë¬L&óÐCÙ›={¶} ŸÏAP©T.¿üòL&sóÍ7ç z;¶nºé¦×_ÝöØ7Þ˜Éd¾ô¥/Ù°Û™3gN£Ñ¨×ë>ø`&“9÷Üs†Côè£þêW¿²?W«Õ믿>“É|å+_±‹ß½{·]üSO=eï½÷f2™ /¼Ðö^¹\¾øâ‹3™Ìüc;t­]Ùlö«_ý*øˆçž{ή¿§§ÇöÒ׿þõL&óÍo~ÓöÒ;ï¼cX´h‘®Ûn»-“É|þóŸ·ôÖÖàºùÁUo}äI‘ñÇg®üárçܸ?ÿÖUúàp…+\á ×{¸¶åÜK\ÿ޳ÿÛgCöp…+\á ×´B—®p…+\á ]N¸Â®p…ëÐZûkÅÎc^ÙÐwÊäÎð¡„+\á W¸Þ“õú–Á=A÷\ÎÀágüjéª)ÝG…Ï(\á W¸Âõž¬_-í)>Ì iQË\N$RhŸ|ûÓ›þìW¤ =ù ᣠW¸Â®¿ØLþd¤»RüÓ+¶OŽ ùç\déÒe_û^xÍùž?ýóFãìIÕKNˆ…O<\á W¸þb×¼ ±?lŽþY—á\Ä9Wèßµà]ýÈߎ7ö¤#ºw¬]1bÜQé‘cìŸÿĪ–òÙÞùÉcÂ'®p…+\±«Zmw.ùg]†ù›Ý_?uêÄqãÆEŒqú¿ÿî×7lŸñÕÛþì×k•ÉM'uî Ÿx¸Â®pýÅ®-íÙP<¬V)þÙO>ßu§L™ðÝo_=mÚ´HιM›6íØ±ó³_üÏÿžß­—cõbøÄîp…ë/w%GÖ"ñ ñçÙôŸúÅCãÇ;ꨣœsÿãHÈ9r(IEND®B`‚saods9/ds9/doc/user/catalogs/jmagrange.png000644 000765 000000 00000553726 11332127304 021062 0ustar00joyewheel000000 000000 ‰PNG  IHDR&_ÄŠbKGDÿÿÿ ½§“ pHYs  šœtIMEÚ! tÁ IDATxÚìw˜UºÿOåÐ9LOwON0C¢¬aÇËUWEtw®EÁQLq”•Õ5"`¸¨wEEWEQÐAÂ09OO÷„ιrøýQØ\\Ö»þnžyæ©®~ëœoóÖy«Î9]RU5 z<žG}Ôçó¤³/â̱‚,Y²dÉòK@j0+qY†hǃÁ Ífƒaø‡Íòóóï¿ÿþ¢¢¢œœ4 ®Zµª½½ýÑG-((€ ðþÿþ‘¿ß|ýo³µ˜%K–,¿$Y~{Ó»ÿ}÷eÇýpó®ý饗æÍ›Ç0ÌPŒ_{íµ9sæH’¤íÑv»­ýïëë{â‰' n¹åÔãñttt<òÈ#E"è[`>y[”¤/4ÿË}X±³§?$R~®%Í ÑDÚbÔé(Üçâ8Zì¶·õ FWä×·û#ÊÜ­=ƒ²¬¹mÑ“H±v‹EáÁ`œ&qW޹Ó8Ö>³QZà ÅVpÚM²¢#IƒŽ´™õ=}!†*KÜM}ÇÚW9{B¼ ååZXNˆÄÓf#­§Iß`Ç’|Gk÷À±öU¥îöÞAIR ]¶x’‰§X›Ycè@0F‘XžÃÚÑë?Ö~TE~c‡OUAI~N ’H3|®Í¨ª Ièi2Ç¢ïî A04¢ÔÝØq‚°\ï`„ãE·ÃÌ R8–2h£žôD0)+p´/¬²ÄÕé ˆ’\à²&R\<ÉØÌzGû1’À œÖvÏqÂF–ç5uõ«ŠZ’gFS)†sXüᄎ&Vc·/A`dy~Ãñ%\^˜Ûˆ°œèÊ1 ¢Ž¥LzÊd {Â( W:›»úµ^âêöQÎwZS K0V“Ž"ñ>”ÀÑB—½ÝsBÕçµt÷+ŠZœgÇRÉ4—c5 0<ŠÓî´›»þAÕ—8‚1†œ9&IRBѤQOYŒ´§?Œ ððbgSçq²>™õÉŸÁ'}þ€eÙp8|lcþ½-<AŠ¢‚ …~À&³­(Š,ËšñØ[,–gžyfáÂ… …B=ô†a?š:Aï~ÙÓNý‚þØtÊe!Ó©¤¯oÆT®vtû$)ÍÕ7´õ$ñ±%öÃÍ]ñXld‘µ¥ÓG rèH8Ú?à7S0ªŠ]½}@ò,ds{o2ó­ýØ2û‘–îh$Zâ4ôûƒþ Ý€Éëñ`@²éÑÖ.o:•Yh©kîN$âãJíuÍ]±hlXž©Ç;†œf‚M'½}ƒ¦p¨½Ç'rL¹ËÐÐÚ“HÄÇ–Úëš:c±Øˆ"K[—7ŠäÛéh4Ú×0‘Iž~UâòmtS‡'™ˆ-±×5uÅc±1¥ö†ÖžH$Zœ«ôƒ6=ªŠ\wUÅ#ÞÒÙ›J&G[ëZºâñøøRû᦮X4Vá6zúP®™`™T¯oD µu{6]á6jÂÆiö±XU¡¥½Ç …ólT<÷õû  ¹³§OÙº©Ý“HÄÇ”Úêš»â±Øè[c[O$-rèÁðÀ`ÀJ£@º{ûUÌ5á-½ÉdbL±fW–s¸©3•¹Þ~¿?r˜pžM{|"[h¤½ËÇ2©áù¦ú£%–s¸¹+U˜;{ú‚¡°ÛJ&qo¿_U:zúd-vèÛ®\Ë(Zê2ô øýþPŽy¦Ç7ˆC²FÚº¼L:U•o>Òr´ê5aÃóM]½ýÁ`8ë“YŸüy|Òãyö?Ï,gYöGy†92a„t:­íT € A0 gìÇŒò¬v¬ªjßC™c!F`XûvÒ¤I÷ß?êõz "‘€ ¶¾˜Õ@:­úLö‘tŠ+ mZÀ#…[ô8AIVˆ¦·•VTŒs‚$#0d¢q#+ªMñ)VBÈe¥Ã >Í‹§ñÙ…Ä»‘ %8N”3;-zÂLã¬(‡œ(+v­¨Ýv˜un‡ù@k¿‘ÆG—9¿¬ï¥ ìŒEû}@UG”¹Úû"Ñ$Wšggx¹{ ê¶ÍFý‘ÎAMŒ(ÍÝÛЫ#±)£Š?¯ëÁdtE^}W ÅŠå…ŽH’óâ…3I=‹ž,/ÈùªÉ«§ðÉ•Ÿî¡ptÜð‚m¼ /Îí §#©b§ÀH‹7”cÒå;,ß´ö(|L¹ó‹#½4M¬*üªÉ§(êˆRWg,’`Kò율tõG]VƒÍl8Ü1`¢‰‘ß ›<²xwE ÑîÆž`2-”äÄÒB¯?^c¦i²¡;`ÖÊû½zŸ2º`סnGÇ Ë?Ø6È Ò°¢Ü(3N9­0‚´ô†ìFºÐiÝß’æ¡ tbeá×M}²¢T•:»c¡Sâ¶ ²ÚÙqZô«ñPû€‘ÆG•:÷6ôêlòÈ¢/xŒ*w7{Bñ´PV“`EÏ`,?Ǥ×S ]~“Ž~T6õ[ac‡åndy©¢Èˆ2ý¡dQ®ŰfOÐf ‹Ý¶ÚfŸÂ'”;w×y(PY°¿¹O’•ʧǟƘ·MR¡_8×¢wÚMÛú5a{zi›4¢hOƒ†ÀÈrw«7Kñeùö'õ Æòì&£®ïô›tDe‰c_ƒWObgŽ*øìp"c†åÕuøÓœXQèʾ`²0ׂãx“'h5¥ùö¯›4a®Ïëz(?¼à›ÖA’‡—8½Ád š.vY³>™õÉŸÇ'4É$àGŸo2|fûPgðþW÷žÐêÞqùÄ+¦ ýÁÔk>[’s׬3lFê³:ï#o|uÍyU7V¦ILÑñz½ˆÛí¾á†8ŽÛ]ß÷àkû:â#Šìf= Ãp×@ü± _¯ÿ¤±Ôe)vš!ÚüE+i°’8öŸ“ '—ê ˼7Äèõú¥W›Pf«oïópÃxåÔâ T™K8­ž@’¦È;/ÑåñöGy%TŸ–¿b§qιE íž8¨0ªØ@×L+-·Ã# ͱLÉ)^%8§E—cÑìZ TQ®é`gÀ±—©½?ƉJ™ÛJðƒ1¶Äi’U¨s á¶éÍúHwÈf¤ sMûÛ:/qš›¼U…JÝæ(Jðån3+*=d¾Ý £ˆFO$ÇDç;Lµm~“Ž,Î5é #Rê2õSqF,w[¬è ¥  ÃZ|Q§E—kÕèXôd‘Ó|¨3H`X‰ËÔ9`¹Üm§ø([ì4ªêè»­z«‘>ÜuTØ7íšÄKœæoDVA™Û<eƒ ®Ümæ%µÛŸÌ· :¢¡'’c¢ ¦ÚV¿‘&Šœ¦†ž0Œ ¥.“7˜Š2B¹Û’â$o(Uè08ÖìæZtN›á@{À¬'‹œæº®†¡%Ns×`"ÍËens4%ôGا‚öþ¸Ëª·™èÃ]!«*Ì5ìPVì2µúb¢¢–¹Íˆse.“(«]ƒÉ<»Þ¨#ë{Âv]è0íoóh¢Èinð„!)u™úÂéHJ(ϳ¤y¹7˜*ÈÑ“ÞÔÍ5ë\vÃ7í³Ž,ršêºB†”¸Ì=þDŠ“ËÜæXZì‹0ÅN##m}1—Ug7ëu5a‡:‚$•¸Lí}1ARËÜæ`œõǸR—IT ®ÁDžMoÒSGºÃv#]˜kü¦Í¯§‰b§¹ÉQ!¨Ôeî 3á$_‘gN ²'ÊÏÑS$ÑÔq˜iwŽq[À¤#‹rMGºC‚”ºÌ=d‚•ÊóÌñ´ØfŠr ‚¶öŲ>™õÉŸÁ'óìÆAð’3˵±œ}Щ««›8q¢6–³ä¥/XA:!äÔ¶ Ì:·Š"0‚ÆŒ£¥üè[ûÂéþp*câiáÉw¾QUÐØš6º תWU†áuëÖ¡™ÑžM_´Žt‡žÚ|àÙSIùë¦ý-½aÀÆÝ-ç+‚ HQaš$JÆÖ–ÆÏuERBJ!Ç /DÄðŒD ûÄò˜¾ôÖV³³äŽ«Ïmj“»bœ"KrÒÎð³Ýa¦ñþ(‹£°‰Æ¶ì/´Óg”Û vEë=±Æñ¥Ö`œ7Pèžæ`®…WlޥŽ­Á@ŒÓÔŽ.2-6ó¢"qi(¬7Ñí°xC 'Ê¥¹ºÿúÖ5—]TeW›ã*óŒi^õ†Ò…9:Çù3ød½'–iä‡2zrÜø?ôýÝKð÷_sîðoD””Ýõ¾ÝõG'?_tFI^ŽáØÄÑÌ÷ýnÊ-Ïì”e¥¾;´ø…ÏEí§:»öÙ™d€„SÒ‘žð9c«Æ¬üª=´ãp`R¹£¥«·¯ß?±ª¸yŸ?×L{ÚÛü,&;¯ ”’X€chU¡•F…þP¨zLž#]c K£ÑølwKiyé™S¾‹ÇWyºÚ•xlìä1~_rú¤Òw?úrxíìbÝûu ¯bn3uñ„¼öÖfIà {é°÷™Ãs^Ûð^2ŏІ©²CG:£W9.6è(É1QXÛƒÀpY.]ïeI\f¬÷2Œ +2zB|4%–çêÒ¼â‹ðIáhû CbhjìcD L)3ÔyVÏ(1µù¹# wé£i¹?ÊçY)†Û皈æ~VVÀ¸"ýáÞ4/*“JM}Lš—Gæãb .ÙiYžcÖÖ:ÀÀ\áÔñ¦I\j¬÷1Œ -4öF„HR,sèAõ†¹Ihû ƒch¡jècDIÍ›XbêðsqFæÒǹ/Ê»-ŠÀ탌žÄf¢¹Ÿe0å;aæÆ>&ÍÉ#ò „ä …6ZQ¡?cÒVÑ:È®péë½i^T'—šêû†—Ç}!œK:N½aÖn$õÖ>È`(Z”C7úŽ+á ŦΠOKÜú«ø¢¼ËLa(Ò>ÀÐæ²Í}¬(ƒ)e†º^†•Ée¦¦>&ÅÉUy†`RŒ 6Zp‡Ÿ5é›h`TîÖñ¦yQ™\jjècÒ¼<ºÀÐB ±$‡æ%ÐbmÒ@aíƒ #%ºáxaã‹ÝA>–+œº$§ø"¼ÓLÒ>ÈPšg¥šú¿­ú^†åI¥¦–.ÉJ•n}8%Dù|+Apû k¤ñ#Ñ2À( 4Ö­¯óWõ£ q1ŠshQžk5YŸÌúäÏã“¢ àoùï儨“‰0 ›uÄc7s‚ýk¿7>M©tý×µS|uO&2M¿ðÊIf=y¬ñÑùÔ0 :Œ/.œî²ê¾`R‹7ù9ÆÿYzYžÝ  È–òiSléšvןO–™ør'Õ?æDuüè*˜ñ‡“‚ÝjÎuZÍ&…¢Ñ¨$JßNûÖ}ÕЋ„?Úõe<ž°âÂH':çÒ_{ÖB5*3|þÅ—mTUd»³èñg*ÎwBl˜ vÉÖQ¸EïøøÓÆôô…Z{C×Íü9¿»*À‘:à ®»¼Ò­ „"ËRÊ‘>Cá‘yÔW]Œ  1ô7= 'aN²;$„Ór¡`%µ;,Úô˜Y‡6ös† s’û{‚ÆÑûºAU.ªyOpjqcåÞ¨˜kÆInä))É!ö² /Ò}Ù‘–hDUçc”9HBˆKn AP{@0P¨Û‚×ù8 …GåSûºÒ €FÐ< 'Š\ÒB)¹ÀFð²Ú¬z̪Cú9C†»ÈÚ@иBú«.FA¥‹jõó1N-Î!œâ‰ˆ#Fpó OâH©ƒ8ÐËB04¡ø;aG|lZ¥2˜’úc’Û‚#Ôô$šoÁûXGÐû:Ó² ʧö²¬*rIoD¦ä|.*jgH°è0»­ïçp©t“µÝŒ  ±…tm7ÃK`¸‹lð1V)²I^鉈¦§æžÄ‘²\â€GFïéL‹ á¦êû¸”JD(%õÅ$—ǨÍÏë¤À†ö²-¤÷Fò²ŒÊsɾ˜HÊùV\VAgP0ë0‡­ïã0®Ê#¿î>Zõû»NÃdgPˆ2r¡H jOXÌ1`F mà )Ï%¿ñ0/¢÷v2‚ªÜTc?—äÕ’"ÂÈÞ¨è4ã8·úyš@ŠìÄ!/‹Àð¸"ݞδ¤B#ó¨:M˜ƒˆIƒ )ÏŠ«ê &ušð¬Of}òçñÉ EºL#A+Èͽ‘æÞH“'¬ý5ô„DYÉL 8ÖAà2·%óWžg-ϳÒÁбö™mATŽ}’eUVÔо{Ê ¨Äe^úÛ3Ÿ|g¿ÇŸTäYïùÝT—MŸ ƒ@2€MöëQvÃ$—™Bº}žB3« E zEat‘uOSÿÌI¹WŸg¢ ¦ÖŽ®ºvŸ®È¤P58T ” ÆAfÊëëD“çL¬ Å™ö¾Èo.>%ª Ú}Á|o°¹¡>ʼnÞÃHð`BìL^Z}.b-@" ÜáRÑ@ISNôõGíBbÐb6íÞ_/b6 À ä™^Àà| Ü*³ÁÁ”H«%DTAODv`…ém4ì2"û½…Ãù¤¡_T`ûâr„UËm0+‚Þ˜’g„I n”rt°Óˆ~팜oFù … ,pODN  ÂÇ9¥/¡š`ZƒR®¶ëÑ^ÁLÂyæ£Â ,p[@ä¨Ü …ÒŠ?¥–XYÝÙe€M4R×/Z)ØmB¾é(.0#ƒ¢AŸ?!‡µÌ³èÊyF˜Æ‘ÆAÉNÃ.#Zë œoFû… ,°'"'xPa‡“¼ê‹+&E –€äÐÁ9ôM˜ 9èp .°À!‘•@™ 3Ê`J-¶ *€:C²Ó›iäpßwÂHÎ7ÃMƒ¢¬BE6x0¡„µÌŠð2ðDe·¦I¤a@´k%Ü+è4a}"ø7&Ç8Pa‡“ðÅ•|Œ¡Ps@rè`‡Ýß+˜H8ß„ô 8 XàΔA¹ Ž2Ê@R)2#‚ÚC²S[uÈ¡>ÑBÁZÕ“œo[¢¨Be6ØŸR‚iµÔŠˆ è‰Èn¬'‘úo«þ[aGúE† -°/&G9PaƒÓ"ðÆ”|#L`p³_ÊÑÁ¹´6#ìÛªïŠÈ)M«ô'•"3 AP[PÊÕÃ6zÐ'd„e}2ë“ÿjŸÌ<å(*xeGû{ÚOè(›wÙ„ë«ÇûcšLƒ2‚O~Êù²¡ï±·¾>6Ù}M}O¿S»xÖ™v³.cŒ{ AcËw_sæCÿó%‰¡÷ünêˆ"û Ý| €ã¬ZÛЧ:Ät¤»/l-ÝÔõþá†køðvÖßÖ>³)^´Jý|Üß5¨9*dzyGcC}›_0 ¶w‚\zý§M}þð†}}]µ‡(ï6À©¨¿±­»µgn ÚàX¾5ÅÒùížÁ^¡× ‰|"ÜfU¢Hp(-oª´ ‘DmÃ.Œqň¾?îÙµg¿/…óXŸ¿e ï©DA‘ž€rt =¬J*\nQ¼ ç ‘9j€‚iµÜ8ò%T·"1¨%¨˜HÈJ¶ CpIñÄÔ¤v¨ý)fÀ0+H Ð@R-0 [‚Š‚L$h($»jWTM‹Ð‡êM‚( ªì ÂÁþ”Zl‚ÛBªCéqÐPt8”«aUTá ‹Ò« ³«¦Õ2 ÈW]zˆÂ æ€b$!›´…TÁ&¥7®&xhTŽ:†ÂŒ:Ì RÔŸTó¿f¥ 3šƒ ŽÁn£ÒUS"4Æ¡ú’ ‚Jˆr°?¥™í!ÕAC´ZQ‘£z ÆA#ìj…ƒiµÔ DòFU—¢1¨%¨Èþ­°"“Òš°Á4bÔ +`$¨/¡æ …Z‚Š…‚,h ©ç•ž˜šŽãàÁ”Zh ·Õ2 9¨P8ìÔ«]Q•“¡‘9ª7 b,4®†X8VKÌ@V¡î°êÔA45•LÕ+*\dVz ÁA#sT?…Òj¹°Ô—Pó AÍAÅLBV ´†TóßU}_ D0Üâ<˜T Eà– b§!“& ƒ]zµ+ª²4*Gõ}[õa¤Ô3PÜVsu-ÇËúdÖ'ÿÕ>ÉH°þÛF^’”“ã àOo¸xÜñAåĘsL ßc AïîiepÑÄ’I•î•oí“dåÓCžÙŽÎ±è¿g,'“âè’œUw\„ °Ûf8¹›OVYm!Uæªl9Ó¢N‘ÌpYÓGª¬?ƨž8Ö)8TÉ åÀ$N3 ^Û/(޳ÚR”b? Fèú¤¬:͇TÉ~6¬Rý1IUŒ‡@…¥…y¹¿*)$éÃ/¿ñ’$z‡*[€Bp¬"@ž¨ÒÍ[Y 2ÁÑ®¥€°‘84Ë\  f¤N&¨#¢Š ïà›#'6Á›Àb<\lÓ"ÔŸBì”D"jW%Å­—Z"¸¤€ ¾1Lð2c绢DR„ÊMBŒGÓˆ“–`tÅ&çÐJ{“0ÊÎׇAã|K„`$0Ü"ÒHó ¢¤@¾$b"d3®tD1¥&¾1BˆòqÂ|I,ÊÁEF‘¡þb#%U;£«ùz©%‚‹Çmç{âDB€ÊLBœGÒˆ“–PtÅS´ÔÅ%L°ó !BÁ8ß! ³ˆ! 0pžATTÈEŒ¸l&•Ž(3óMá£'¢ «² ý),ÂÂ…F‘“ ¾b%eU:£«…F©9|œ°Qv¡'Ž%¸Ô$$xd äÒ«]Q”D'-µjÂrùÆÁË`\ß%Ò"¨0‹añ§a·^*èŽ"\¶’J{SU0ÒÆ7#Œ•@•UHaa.4Š‚ ù’ˆ…”õ¸ÒÅH-úVXæDFÚ„Þçá£à4’CIø·UïÒK­ÇWýؾ#J¤DPn#,âOÃ.½èŠ"z\¶“J[S0ÊÆ7„«úJ‹àOc!.0ˆ¢ y“ˆ™¸ÒÅ`…¦ã…e}2ë“ÿ"Ÿ›Ãv¦Î ø¾ßOýëÆÚBΊ?üúØF>3×àΙgÜúôŽ£;Ðf\;}Œ‘&NŽ:÷þnê-O}8¾Â¹pæ$³ž4é‰×}>ç¢1ù¶ã‰Î8ãŒÝ»w§R©¡LÙ¾ò¿6ÜÑ?ÃËÒ_ ±>”¶PùãQCÎ?™…(&¶5N«*(6p!‹ h¾ŽSìMá9¤`#å–eÀ¤2#8¬£y˜™kˆèH)1r ‘‘B=ÇÉȃ¹(^‡«qÒˆI%F¾.¬Ó¡òp3{0¤'¥ÌÈõ$I^†Š \RDƒ,–G󺓄óôbC„Ö£r…™;ÒQˆRnbÛã´¬‚bá±(æÓ€àÞžC vRn>^X…™kŒÒ0PK¿V ãîOãNJ0àJûIÂ…ô8¢”¹ÞÉIP‘žKIh€ÅÜ4O  +A˜q±@/Ö#ŒD”rÛ§$*ÖsQ‹phžŽƒ!È“"섘CKÍQÊ€Je&þpXG!ò03×¥!J ¬Ÿ#’R ãDîKã¹”`•¶ã… 3sua)¥FΗ&X .ÔsŒŒ2˜›æ)TíLfL*4G"´•‡™¹ƒš0#ו$E*Òs1 sh¾Ž‡aàI6BÌ¥¥¦(e@¥r3¯•p…‰m¬‰P IDAT‰Ñ€à°¸€è8Y…}iÜA RnQFL*ÕJ•‡™¸úˆ…”R#×—&Ò\¨çµªwÓ<ª Ò„IEFáH˜>¡ê»“¤ CÅ..b!ÍÓñ( z’„]:±1z\Õg}2ë“?ƒOv%p2ÑùââÿüáF>³ñ /Üzë­ñx|(áÕW_={¶6£úGíQ2e ¾ÿÑéû·µk?ÃYv®qâïéªÿ€ Î2)Q]4Û™¤xÉ£™0yÂE±² õ¤(;Á0¹1¦7b’“âG $¢¸h®%N+rÓì KD†Ì%9 VÛ: .æPü¡Œ°¨NæI‘i Í£˜¸€ú9ÂE±€®$m#3.ÖGõLÊ¥ùºˆ&ŒíHÒ‚ çÑLÃB<á¦Q†Ì%9V[ß•0Ê.Š«ÿ¶ê{ÓdJBói&.¢ƒ,á¤X¨IÚJVR<=¾ê³>™õÉŸÅ'“vìèÉ?jä¿wÚr‚ñþÈô»kCœB  ø—õ'©È«‹‰D) ä G’qAAzÒzΰܞ2PÁ‚q)<2écuI /¥£Až òd Kɘ—Ñ9‰ ©í)£ ã¨Ðž2â°â$RFŸ–±*6ÈÓa,¥£Q‘ìcé<2 èL¬§CÅö¤‘B$;Æô0zAE ÉøGÇD¢ŒŠFDMXBP‘ž´>ç¨0£5a*ydÂÇê^FGƒ<à©b*ÆÈX/£siR:RFÊQ¾#eÄ`ÕE¤¼Œ>-c¥TÌÏÓa,££1‰èci7‘„ Й2X0NŠmI#…Èœéaô¼ŠS±žŽ~+l€£ È„¤ÂÝi½g)XjOu¨hÃØ®´AQá|2ÑÇê^JÇB‚&,® Ë%Ò8¬´'FT0¡|Gʈ@ª‹HyY]JÂJ©h€§BYJGãácun"CjÇQaB{ÊH"²ƒH{=+cÅTl§#"¡•p?Gç“ Y…»ÒzÎRˆÔž2êɆ±Ýiƒ¬Âd¢ÕÅE¼ŒŽ…ÊÏSETœSP£wà +)ƒÌ×™2ÀÈ#RG«ž:Zõ¥T,)á^Vç"R¤¶§ fŒ7 B[ÊHÀr.‘ö0zæÛªD‹Šd?Kç“IE…»ÒÆÒˆÔž4ÒG«Þ ªH!™ÈúdÖ'&Ÿ¤¢?oþÑïr†h TXX¸xñbEQ’$avB¯TF /”TòúFU Y°Ä«ˆªB8,Ë*$«0 )¤Š A*ɼ‚o/r „Ã’¬Â² £  ª ©ØIö™ –DQTƒeU…$F AA! °Ä)Ø C TAA H% ™;I¯ êqÂŽžÈP…A² €¤"a¨äIÂXTD=ñD†"ìÄ>Ua0¤ G… ½„UAA  ðÉÂ$^A~‚0–$VþÙªÏûñªÏúdÖ'OO¢(+¹ªª'7é'ï‰Åbf³Y‹ßkìÇx‰:ŽÛn»a†wîÜyÑEe_÷%K–,YN }ôÑe—]–J¥vìØ!IšùB§Ó]yå•ÙÊ’%K–,§‹+¯¼²±±1//ï¸ß倣?ÒT8ŽË–Q–,Y²d9-úHÛ3fÌ…^ø£‡lÛ¶­»»{þüùÿL¾_|ñÅþýû•••3fÌ8áÛgŸ}vøðáÕÕÕÿü îß¿ÿ‹/¾È|¼ì²ËÊËËô¨5kÖ\rÉ%§¥wìØÑÚÚº`Á‚C‡íÚµë†n`æí·ßž1cFee¥vá(Šš7oàý÷ßoo?úºûßüæ7eee§”ÝsÏ=WQQqñÅÅøõ×_Gäw¿ûÝKò¦›n2™LÙFü´ÓÝÝýî»ïjÕÝÙÙùÞ{ï]qÅ%%%ÇÚ´µµ}ðÁW]uUaaáéÊñx<555áp¸â$Iª©©ùôÓOò‰}üñÇ555………Z‚$ùÝ«tÖ­[÷â‹/ÆŠŠ ‚ jjj<8Ä”{zzjjjššš´_~ùeMMÕjÍ„´Ó˶mÛjjj2%CÄÏéÉd²¥¥EUU½^Ïóü‘#GR©”N§;¶ûìÚµko¿ýv“É”J¥^|ñEY–·oß.Â_|QTTtÎ9ç¼þúë²,ðÁ†-^¼¸±±Q–åË/¿|Á‚8Ž=w«Õj³Ù$Iêî¹977wppÐçóM˜0áÈ‘#ÅÅÅ………'¿^édl6›v.>ŸoéÒ¥·ß~ûÔ©S/¾øbžçY–½çž{.½ôÒ;v<üðÃ4MÃ0üî»ïþío+..~饗‚ÁàÕW_ÝÝÝ}èС1cÆüå/¡(j(ú†éììœ9sæÔ©SKJJž{î9¿ß‡§OŸ®•Þš5kÆŽ»nݺ×^{ ˆüüüµk×jÇŠ¢øÂ /¼ù曆•––®Zµ*ãQ?L__ßïÿûë®»îÎ;ïD¤ººð9sæø|>žç¯¿þú¹sçj–étzîܹ@€çù›o¾yΜ9Úå ËòŽ;:4ôšºà‚ ŠŠŠÚÛÛ7nÜÈ0ÌW_}ulI¢(ºpáÂH$ríµ×.[¶líÚµ<òÈ”)S*++ÿøÇ?z<AæÌ™ó‡?üaÚ´iÓ¦Ms¹\o¼ñƇ~èp8†’»^¯Gää› ‚ fΜ©(ÊóÏ?o2™Î8ã E7mÚ‡'NœXTTäñxvïÞ=ôßí¥ÓéÏ?ÿ|ïÞ½Ÿ|òI}}ýùçŸ?uêÔóÏ?ßn·oذáã?Öét555»wïœsÎ9>ø và[o½µbÅŠwÞy§¢¢býúõ+W®üûßÿÞÝÝ}ï½÷êt:A¶mÛ¶{÷î§Ÿ~zܸq»wï^¶lMÓªªnÙ²Åh4fÆ¿ˆ–––k¯½Ö`0$‰Í›7göŸuÖY“'O.,,|ýõ×·nÝú£·G§êëëwîÜyðàÁd2éõzeYÖökW®]»®¼òÊ믿>œÒ™|úé§;wîܹsg,»ä’K&OžÌó|ww7 •Jy½^QµÆå®»îJ¼a2™Âá°$IÇÅãq»Ý‚ÁàªU«6lذaÆx ¦¦æóÏ?ÏÏÏojjêîîƒ~¿¿®®.''ç”§Ö½¶sçξ¾>¿ßÿÑGi2O=õÔþçîÚµkâĉ—\r ÏóO>ùä¸qã¶lÙ²e˯׻k×®D"qã7®Y³æÍ7ß\¿~ý²eË}ôÑO>ùä”rÅb@ ™Lêõz ÃX–EQE–eûúúJJJêëë‰Ä)us͘1ãšk®©©©Yºti[[Û®]»®¾úê¹sç644\{íµ—_~ù®]»úûûo»í¶D"qíµ×¾ôÒK÷Þ{ïC=tÙe—ýÏÿüÏ믿þâ‹/1»ªªªW_}u÷îÝ'N|ÿý÷¯¾úê+®¸Âf³íÚµëÆo|òÉ';;;wîÜùØcmݺõƒ>øóŸÿ¬»oß¾|pÉ’%ï¾ûî»ï¾û׿þuˆ™J’‡M&A(ЬZµêƒ>غuëÂ… —.]šy°~衇>úè£;wÞvÛm‹-jhhðz½«W¯Þ½{÷ðáÃO©¦öìÙ³sçÎŽŽŽ1cƤR©Jò™gžÙ´iÓ#<òôÓO{½^ŽãúúúÂá°ö̱eË–Å‹ßwß}µµµ>Ÿoûöí#FŒp8Cï.^¹reEEÅ7ß|£}”eùÀsçνä’K€vá\.WNNμyó–,YòÀ\qÅ•••{÷îb`üùÏ®­­ÍÏÏ·Z­<òÈÁƒ}>ß¶mÛÆŽk³Ù®¸âŠ={ö´µµ½úê«Ï=÷ÜêÕ«3}¹f³Y–å={öÄb±FI’®ºêªÊÊÊ7ß|sâĉÏ<óŒÖ…Ãáßýîw£FÚ°aCUUÕóÏ?Ÿ §‘ººº;wÖÕÕeú«ªªvíÚU\\ü›ßüæØû¶;vTTT¸ÝîË/¿üôt¬itvvÖÖÖ677ï-êã?¾gÏžŸpbß|óMmmmmmm*•ÒöÜtÓMÿdyMž<9Óœyæ™'$¸fÍšwß}WÛ~ì±Çjkk3÷íÛ÷Þ{ïi·N§ÚES[[ µ+öñÇ߸qã[o½e4üñÆÆÆ¡$ò /¼óÎ;?­{-¦Óiš¦Qô¸‡×‘#Gþ„Ÿ~úéx<þ_ÿõ_?›‹_pÁ7n\¶lÙ¬Y³æÏŸìðØÿøÇ7Þx£²²réÒ¥_ýõÓO?}òáï¿ÿþªU«~ÎkrìØ±«W¯~ë­·Né¨Ã‡oذáÍ7ß\²d‰Ýn×:ÜüñŒÿìvû’%K~4©sÎ9çäÁ§EÅx@Ûæy~Ù²e?`|×]w½ñÆ%%%³fͺÿþû9D/Ú¶m[æãyç—×¹à‚ n¹å–Í›7ÿío;ö‹/¾ø¼óÎ[ºtikkë+¯¼rÇw”””,Y²$™LÞ{ï½åååŸ$IrÉ’%Á`ð¾ûî=zô½÷Þ›§‘¶¶¶ÚÚZ­{M£½½ýñÇ?¹3íì³ÏÎôñœÎ޵Ë/¿|æÌ™€gžy愯9räÈ‘#o½õV³Ù|J'v÷ÝwŸjã>¦NZUUuçw2 3mÚ´nE‡ 6eÊ”Ë/¿|ܸq<ÏŸ–ï»ï¾Ìv^^ž6à|ï½÷~þùçË–-Ó:~”aÆM:õ²Ë.›0aÂ)å^PP`³Ù|>ßáÇY–ý'ÏeÛ¶mûöí«©©ùÙüÛãñÜwß}sçÎ;w.Ã0>øàáÇO¾,Xpî¹çNš4éäòóó'Nœ¸~ýúSâþÉL˜0aܸq§zÔüùóu: ÃO=õ”vcž““3räÈ^xÁáp|üñÇÿjÙ555øÃ‚ÁàúõëW¯^]UU¥ÍÐ9™÷Þ{ïí·ß~öÙgÿüç?C´qãÆ‡~x(½ÍûöíÛ¶mÛ{Æ Ï>û¬ÕjÍ̬Ëò¯ÀjµšÍæ‰'nذá…^8ö«O?ýtݺu‚ X­ÖÓó”cµZ«««3ãB%%%ÕÕÕF£±ººº¢¢âÁœ?þÂ… Ï=÷œÍfâ9hsO—.]ª}\¾|ùŽ;–,Y2~üøo¼QÅüü|-£ÒÒÒuëÖ½üòË=öØÐËÈb±œþùN§Ó`0h½………óçÏgæÑGÜsÏ=Zh©¬¬<ë¬³ŠŠŠœNçäɓǎ{J³ÎFŒqì$Ú³Î:+ÓTmÞ¼yΜ9 .œ?>†a¯¿þºV’(ŠVWWk3Ï9ç§Óyë­·¦Óií—,YrÖYg 1w‚ rss½^¯×ëŒ?Þl6;£Ñð6Oš¢¨ÜÜÜ!6”z½~êÔ©û÷ïצî¼óNǵ*~ûí·Gµyóæ•+W.\¸ð¼óÎ[³fÍÆ«««qw8ÕÕÕv»¢¨êêê“o`ÿUUU¯¼òÊ‹/¾¸wï^ÀÃ?kÖ¬›nºiˆ™jSrUU}õÕW×_ý‚ –/_®ùä /¼0a„éÓ§5jÞ¼y‚ ,Z´°nݺQ£FUWW1â”.ZíÂÑæS”––VWWçççgJ²ªªJsK–eßzë­‡~xΜ9€_ÿú×£FºóÎ;9Ž»ÿþûk×®4iÒ…^8zôhÀ”)S†9…ÛL®®®®¬¬L›6-3ä^RR¢ #-\¸°¨¨H› ˜ñIÀ¦M›†8–ãr¹ª««3 Pee¥vh?r8óÌ3EQœ5kV<饗2W·6y5“Wee¥&’$É—^ziùòåË–-;ãŒ3Ö­[·eË–êêêÜÜÜ5kÖ¬X±âÈ‘#çœsÎ í`–æ–¨ººZ«ë̽uëÖL;ÿòË/744dªø×¿þ5†aV«õµ×^ûÑÄ¡3Î8cÏž= Ãhír2™Ì–x–,ÿ[|ñÅ{÷î½ãŽ;>ýôÓ9sæ¼óÎ;¿þõ¯ÿ–Ë/¾¸yóæ?ü0ëÿæMŸ>ýå—_þG[·n•eù²Ë.Û±cÇwÞ‰f‹,K–\.׎;¾þúëX,vÍ5׌3æÿ`!¬Y³æñÇóÍ7³þðÿÙ“%Ë¿ååå›7oÖ¦´èõzmœüÿ³gÏž9sæÐ'dgù_dÿþý§4 ‘ 9Y²ü{qªs>ÿÿÃh4fÔùKáTï ²¯õÌ’%K–,?Ù“%K–,Y²!'K–,Y²dCN–,Y²dÉò8nú@:úY²dÉ’%Ë“N§]H廣ªê¶mÛ³e”%K–,YNßrÞyçT*uJ+ÄdÉ’%K–,?̱aå»#ÂUW]•-,Y²dÉrÑ^ÛzbÈÉ’ÁçóiïHÎ’åÇ„ †²ök–,ÿ+dCÎ÷à÷ûµ—1g‹"Ë/Žl¼É’ 9¿<‡ÉdRU5[Y~)|óÍ7ÚêY²dCÎ/UU³!'Ë/QOðXžçûûû³%óÓȬöÔßߺÖþ¿†Íf;áuyÿ0äôöö¾ôÒK'ì¼í¶ÛÖ®]û«_ýꢋ.Ê–æ?bõêÕ(ŠÞrË-I’´•Ä ,ÈÉÉÙ³g¶ Hiié7Þ˜9j÷îÝüñ]wÝå÷û3«ÁWVVΞ=ûoû›¶âôéÓÏ9çœÌ!¯¼òJ<Ϭy Ÿ}öÙ3f466z<žŒÙòåË:ô÷¿ÿ]û8iÒ¤Ë.»lõêÕ€+¯¼rüøñ™êÆqüÁlܸñÈ‘#­ºY–]±b…–Â]wÝe2™>ûì³O>ù$#ÇŸxâ‰DjÔ×׿ýöÛÚö¸qãfΜùòË/swûí·gæ_G*•jkk+//ÏÅO»éÔz)8pªËñeÉ”áPŸrV­ZµhÑ¢óÏ?ÿ;k]µj‚ Ùó½lß¾}õêÕ‡ªªªÒB΂ êêêV®\ùä“OÞpà +W®¼ãŽ;®ºêª3Î8ãÖ[o… è†n:thÁ‚çÖ[oõx<«V­zðÁ'OžlµZׯ_¿lÙ²gŸ}¶¹¹yÁ‚¯¼òÊøñ㯾úêÃ?l³Ù2!ç†nØ»wo^^ÞYg¥-§¸víÚ­[·>ôÐC«V­zê©§ÊËËNçsÏ=÷ÄO¬_¿~ëÖ­·Þzëo¼qÓM7ß|óÍ·ß~;Ã0S¦L¹ÿþûyä‘`0¸xñâ5kÖ¼üò˽½½?üðŠ+n¾ùæ»ï¾{áÂ…×_}yyùŸþô'AZ[[÷ìÙ³ÿ~‹ÅrBÈéïï¿ùæ›§M›vùå—ƒo_=»iÓ¦d2™ 9ÿjìvûÞ½{?üðC’$UUEQ’$ATUEQôØÅ¡Ea‚ ­Õ¾Òš mýi†eY ¢K’”iS ‚aXÛŸ903°¤( AZšŠ¢hËæj;%I"BëTeYKGEM¤–A²,FQAeAM’öíäÉ“<(I’$I0 k§¦©Å0LÛ©YŠ¢H„–~&®@¤­íͲìyçwî¹ç–——;*f0æÏŸ¯µ'Œ–Á0œ)-ÍLéðÄ©­´1ƒ (cljÚ†,ËZ±»EQÍ AÖ WU5³È÷90ãÚMó †Ø´víZ¿ßïp8Nx@ü‘޵aÆM›6 ðâ‹/ÖÔÔ|ðÁÚþÁÁÁË/¿œ¢¨h4º`Á‚ë®»îŸ\ þß³›â¿ÿû¿×®]k6›%IÚ´i Ã×]w˲©Têšk®¹ãŽ;>ûì³Å‹;¯×»k×® /¼ðW¿úÕÅ_œIä‰'ž€ ˆçy’$âñxww÷ðáçOŸ^__¯yy,[¹råoûÛ•+W†Ãáë®»îºë®›1cA%%%ååå¿ùÍo‚H¥RZý}ðÁ±XläÈ‘™ŸîΚ5ë˜1c@[×ëí·ßþ裶lÙÒÒÒr÷ÝwÿéOš:u*MÓ·ÜrËܹsÙ½{w"‘áÈ‘#guÖ´iÓ‚¨¯¯5jÇqv»]’¤t:ÍóüáÇËÊʦM›¶yófY–÷îÝÛÛÛ[UU5~üøH$ÒÛÛ{Ï=÷ôööj {ŸÀõ×_ßÚÚšJ¥æÌ™sõÕW_|ñÅ ²,¯\¹rîܹ³gÏE1‘HÌž={þüù™å7º»»/ºè¢9sæôööîÚµë½÷Þ»ãŽ;gâĉ7nÌF”¡ÐÙÙùõ×_koæúÏÜÂkí2AZÄ㸢(Š¢¡µb3ÍFkÍ%IÒ.ym§,ËÚ‚èn·ûСCZ ¨5ô™Fb¤§ IDATAQµÜµ=ªªjq A-YMžÖˆ£(ªµwZ:‚@„¢¨,ËZðÐb˜¶sïÞ½Zâ(ŠŠ¢¨å«µÚZÕ¢—v.™öEQŽã2gðªªN§sôèÑ‚ ûÆT*õÅ_ü£“‰™fðäÃq\&ädBÔÉÍf¦e—$)¡3ñ;“õÉm}Æ EÑ“CN¦äOž]’I AL,ÌÜ7d<9:früÞÔ†‰D"'{ã¼c­¶¶vãÆŸ}ö™(Š©T*“ܽ÷ÞvíÚuÝu×-^¼øÿËwôöö.]ºtÒ¤Io¿ýö¸qã¶nÝúé§ŸìܹsÑ¢E+V¬hhh¸öÚk/¼ðÂ]»v\wÝu†éõúc뛦ét:½téÒp8¼yófmçW_}µiÓ¦h!çóÏ??óÌ3µmÇ/½ôR–eŸ|òÉ3fìÙ³Çq½^¿~ýúÿÇÞ•ÇEYví{ö…}aD@A1TT0À×¥r)%·²RÔ7w³PÓ7K³ÅÜB³´ET>´,ÊÔ*%\E6Ù‡aöõûã4§»™qÁ”æüÁfžy6ž9×}ιÎu’’’6mÚ)“ÉnݺգG|.\¸àççG÷[555:uªgÏžÞÞÞööö£G.//_¿~ý¨Q£Î;Çãñ„BaRRÒO?ý´}ûöÀÀÀØØØk×®}ÿý÷@ŸïÛ·o=¾þúë½{÷öëׯ{÷î°Îøþûï<È`0<<¼ §— .ã0sc0n‚¹çÕh4~iŒf¾øÒ …BˆðZYé¶dr8œYßsÌÌ<|y'Mk´–¶¹Ë©777×ÖÖZ¼G …bùòåçÎëÀ‰>ø ##cñâŽzõš6mD$ï¾ûnQQQw¢Õj/^\]]½yóæÎ;—””À]-//_µjÕÚµk›››.\¸aÈ߿üòKøl=¶lÙ2hР;w~òÉ'6l€øióæÍ}úô6lØçŸN)((8zôè‚ À¡€UTTìØ±cíÚµPÅ}:99¥¦¦>õÔS›7oNMMݲeËÀ¡þôã?ÖÖÖ³òóÏ?çææž={¶¢¢b̘1'N„/CmmíîÝ»óòò>üðÃO?ý477×âBæžlôèÑ]»v?~||üôéÓ}}}M6ˆ8p`ZZü¹}ûöI“&½õÖ[V,i£'çÿepÇtF‹Çã©T*ôhtd€ (€(½^+bØ?“ɼ~ýú7èÏB¬Ãb±À³³Ùl8œ` 8hxNÎNÙÑ™4Ä @Nn Rp¸=æåFõå—_ªT*#u:D-ôUXYæíjwœ!C†L˜0²eËs´9räÈ‘# !nnnïÖ888Ìž=û¹çž›2eÊÑ£GµZ­Ý|ðÿ÷</33³-;™;wîÕ«WSSSE"¾8tèСC‡®ZµêôéÓ¥¥¥·oßÞ·o_EEÔc¸\îäÉ“_~ùeØøÿþïÿV®\ùõ×_ÇÅÅÁ+»víúý÷ß?ýôÓË—/«TªéÓ§«Õê_ýU¡PB¶mÛfRJ)))™;wîܹs!íFIJJZ¿~ýáÇCCCáÙ³gBvîÜÙÒµtéÒeöìÙ§Núá‡>üðȈˆˆˆˆ;wî|üñÇrŸ££££££æÎ{äÈ‘o¿ý6  ¥÷ïߟ™™‰ ^«µqÝKcp¸à¯qù‹\ÈÆ`’ 2N€àÜ! Â|@8wtú36XЏtéK0È +F¸!œ‰Á` …°d<€c —!b¡Z­†ßÙlvLLÌéÓ§e2™Á`HKKƒ0 ³Op’p‡4 —˵BN»Ú}†Tžžž<ÏÉÉ)==}þüùMMMïÖ”——GDDìÚµë³Ï>ãr¹2™L.—kµZ'''OOO''§ÒÒR___±X\TT¤T*iPA+,,„ooQQQqq±P(tww¯¬¬¼víšP(tssÛ¶mÛ¡C‡ÒÒÒ&OžLùøãËÊÊòòò òòò*++kllEEEEEE ö–––––Ú¹sçß~ûíÔ©Siii›6m"„L›6-((è™gž™0ap´ZíÍ›7 ŠŠŠø|~§NJJJär9‡Ã}J¥ÒÈÈÈyóæiµZ'''{{û›7oÞ¾}ÛÙÙÙÞÞ^$Éd2ØØ××7''',,lûöíׯ_·µµuuu5¿öƒzzzž&s Ø ¯‰Ñ+ õßM§Óáþq{4á|ð-Lâ9›Í<#‡éÇV’‡,OOÏ„„FS\\ ){0•J%‘Hbbb¼½½ !‰„Åb :T,4hΜ9µµµYYYr¹|åʕݺuëH_Ѫª*77·ðððßÿýìÙ³ÑÑÑï¾ûî€ ñcÇD"Ѱaò²²6oÞœ“““““ãááœòÊÊÊ€€€AƒÁï|>¶ÉËË›:uj=~ÿý÷óçÏ=zþüù, þCR©”ÃáÄÇÇ>ü?þÈÉÉéÕ«×'Ÿ|"‹y<Þ… `'Ý»wïܹ3|¤¦¦ÆÇÇgèСð§Á`¨¯¯‰‰ñóó+))‰ŒŒn›‹‹Kxxø‰'rrr†…%;;»£EFFŽ=úäÉ“999~~~›7o µ··?~üxYYÙ¬Y³ž}öÙQ£F9s&''ÇÖÖö‹/¾ðõõÍÊÊ*,,ŒGFxMMMtt4°re2™L&2dˆƒƒC]]]tt´ŸŸ_YYYDDDïÞ½GUXXèíí½qãF•JuìØ1‰D²lÙ²§žzJ¥RÕÕÕ Ý»wošgU__ëÖ­}ûö¥¦¦bI kévvvåååàÐÑûp8M¥ÀBÀ„9XncÕ‡ƒ\j:bÀ ¿ Pœ1,¡‡EšMÛÅ òÍ ·†¾ Bpi,ËÁÁA&“)•JƒÁÀçó}||®_¿„½ÅÇÇÇÇÇÓwòàÁƒ={ö4ï6CoŽe-\Ýã…c.ÞXÜ/þ œ¡k<9å­”åÍM‚ìÁíÍËWOÌÜpUaÑΜ9SZZ­R©@ÖóèÑ£ .´ªXíñµ˜˜˜‘#G8p ¤¤dóæÍÖrŸÙs&“Njah¯Èd2±XŒAÒ‹¡L‚ÌfH¤èõzXûCž`°ÁdÝ4epO˜‚ .ù~L¢ð³àÝà@=.x9p-ðAø#*€Éçž{îÚµk×®]Óh4@xÑëõ\.W©T–••Á5bÊÑÁÁ¡¯M·"=,3 Pˆ¥÷O#2,°ÜÕÒÝ„ÈÑz0„çG¼×²V[NÌ 9-šX,nË¿Çjíg>>>gÏžÅEwcc£õž´b-‰²0 ¥R‰hdva— d¨!°1²±Òþ ÃÈSAézz´°2OûA- P`ÿNágÁÐà ( \ª#! Nê¦@½ƒŒìÿðáÃp9p½6 ¸iˆp-ÝÆvúÇÑ·ˆö9&]8÷*Á…øm1uÖúùàî_ïz +ä´h%%%miÙµšÕ …ÀÜGèt:>Ÿ¨€ù(¤¡ÃBb½nÅ „5H¶†""ðͰ ’BÀd£a~")µ°J¨ƒ¨XÂáp0ÿ†A¾‹Aœ'lŒ®Ö¡{†n-¢©ÄØâ£Óéär¹õYj?³BŽeËÏÏ·µµíx’ VëØvþüùÞ½{›¬4µ&È{÷Ö *ƒ0Äø“a\ò3 X ët:†q¡úgŠßHef2zƒA/ &ƒqƒÉÔët²vÆ£+ a¢‡ðk*Fäùs3ƒa,•3 -$ܘL‚&“e,2é “ùçB*á,–0Ä`Ð pz½b(ƒñ`ÏtñÕ@ˆA¯g²Xjb©Da¢\ÐJL`ÒíOƒ%¼‹„ øh ü ÉI Ò “4šIVE!x>æá‹y œ&“¨‹NxÒe9»kfÈêR[LétêÔÉz¬öÄ™¹Odåäp޶G‚T(ƒÁdB6 ÜœV«ePEx$’™Ð D`³ÙzŽIsmb OOO™L&‘H0),—‹U<%LméõzEÝ&‹ÍP4¢Ñhlíìär96·‚<ÄU¨jñ ƒÁ¤kp!˜QÄK£™œ!CHxø½fÆL 篽 ÐS£<íÙÍ!ÇÒh 7‹e“=¾rW5 ÏÌßËHôÉZ¼±Bν™³³³Å…Õ¬öØëÍ_g––êþøƒËåÚÙÙi4èGÁ¾¾‘PÀ2R€E €X„'táD£a°X&äg †€ÃÄ$¸Xz}cAÁ`Ð+B¡ Ah\† :i‹ÃáÈd2‘HÄf³KKKt:A¯‡VìQeêtºt)//7 ½ž¡×sx<8.‹jÜù+ 2ê@Ä“A[,£Ü¦ L&‡Å×Ìôó»Wȱš5±f5«ý묕,x% ò»` •ìbª;1rœèN\Òb‘ƒ!ü nÉçó±,õår¹€:*•ŠÇãŠÀž±l`C3³9Ž@ @ÍhGãr¹r¹©Hƒm$ 6‡ªÕj¸.¨Bм€Œ»–n£‰È¦¹Hhë†qM¦ I}-…/÷=¸‹n¢j%ße1UˆÛ߫ۃ&ÖRSSAE-&&fôèÑJ¥rÙ²eqqq sCùå—_ÒÓÓW¬XáèèØú®êëë?øàƒ‘#G¢pËãoyyy8º†òüóÏ_¸páæÍ›„±cÇ‚Æ6ØÆ !o¼ñüYZZš””4iÒ¤ðððÅ‹Ë\.´aRRR®\¹‚ãg¬fµö6t˜Cƒ>öÛ#®ý  É€ÜL‹u# œ8ÊÌ<Ð"i°z`ÝDA =7ö}¨îìå啟Ÿß©S§ëׯ£¼ „eÈØF4Ÿ€²ðín"ÒöfgÑ}£¬5ݲjâ [1à&˜ì_Á£yý¸û·èýMÄ„ZB&såi󾜶p©Ú¢ÝЂ¥¥¥­X±âé§Ÿ KLLÌÌÌT«ÕÉÉÉÈ[%„„††N™2¥% aÚ¤RirrraaáôE-))INN ›2eÊ”)SŽ?SÜÝÝgÍšuåÊÄ›uëÖ8pW1ãÇONN¾víšN§KNN–H$S¦L™4iÒ… âââÞ}÷ÝÔÔT«´Ú#‹~ Ì€¦¬b±X°RÄü¨³ ì 1öŸc×”[p 0ž@ï™fÁ!a¤ÕjåsåŒÐ?ht:|«4iˆ‘l†Ô8¤>ëõz¹\K=ooo@µµZ-“É †P(|æ™ghÅR{{{[[[(ê 8ÁUCH€#î)Zíá¬~ZÉ OŸ>ýÃ?3fÌk¯½6oÞ¼qãÆrMMÍo¼pãÆÔÔÔ¸¸¸ÊÊÊmÛ¶õèÑ#66688øæÍ›wîÜyæ™g¢££ûô铘˜ØÜÜüúë¯B¾üòËóçÏ?Y÷( <<<<<|åÊ•ååå0ŸÎ””GGÇÀÀ@Ü~èС¨‚׳gϹsç2ŒîÝ»÷êÕ+33ó Šó¬Ö ê½2™ìƵµµz½¾¦¦^‹ÅĨdƒi%hlll°^)/èàÅ/€(ö³X,¹\šlpP(á¨T*Ø "'ƒÁÀ\ÇlÞÐÌâ²!ª$o‰[Ø”ƒ“@¡zeÜÜÜBBBžþyoooooo‡ãããºG*•êÈ‘#€|pÎ2™ 4~_ T*+Á ˜˜u„ßAX¬•ä¤9–Ó(…¯`œGgÆ7‹»27úƒô™ÐBàwM¾áöØíÄhÙèóÑÍâµt†÷å´”ï»xñ⫯¾jccƒ)#±X¼téÒW^y%++Ë`0,_¾<99ùôéÓ?þøãÎ;µZmee% M™9sfŸ>}ž¬olFFÆŽ;`@!dÓ¦Miii_|ñEpppCCCmm-­M— ãÀÆŒ±sçÎéÓ§›«q[Íj,Ê.$” ’ ;r´Z-¶­€;Æp³.H,c™³mÄ8EÖ¢–ÉdÐ .j0 ƒÏçó2xÒaR­¿–ÙÀdÔ2ЯAúhoZ­xn0i&  k×®ÑÑÑp\77·ªªªS§Na©  Q­V£»„ÓFÝkmSzŒ)†tUÅðΠ'„VS Pàm„Wè>VúÒ˜ffòA‹†U+úÄP=7k½’‡ÛóŒ†C’Ì eët:ÊhxþˆCp?ÿäÙÿýŠZ±û¡ÄÅÅõîÝÛüõ#GŽÜ¹sG"‘Ð/†††B£´´ôÉ̓㣖”””’’²uëVPí\¿~ýÈ‘#Q_2;;;''gÑ¢EB•_ýõ 6¼ùæ›VhµG9؉h¨¼‰óo xà„\ÃB1%ÔɆeðnàˆÁ§›¨P3™LÞ§mÚ´©S§ÚÛÛ÷Ýw¸1ýY\b³>jVû×L ôf\þBœœœ!ÍÍÍ …J2àÁ!µ…Ó<‘ e÷ÐoaïË_\gc±Éd‚Á`à|ÌÑÄhë„ 4 ˜ÛÛ &™Êår˜y¯×냃ƒ«ªª.^¼XVV¦T*«««Qeb ì}±µµÝ~¸F¹\£T* ê“¢.ß\j뼜rú÷ïÿõ×_'&&òx<±X¼eË–~øÁÏϲwï^‘H¤Óép”›Íö÷÷‡ŒíË/¿ïïïïààPPPpñâů¾újÇŽ^^^~~~³gÏ^¿~½Íw³*++e2Yss3°ø‚‚‚nݺoÅÆÆB²²²àϳgÏ:tÉ’%Ç¿pá¹sçêëë{ôèa}à¬öOE9€"0G…j'êëë‘·†-–Xÿ@¹|›.!¯àDŒÕMÔ @mi¨ý9Õ­’­hIÝŸ•À ¡ ðBÉ8NWYYÉd2ëêêúõë·råJ¨¸ðù|í;!Õ †äâüåÄÑpà¯\ŽR©„«õ¢n@ÏP0_Cƒ¾@ë†zntÇe[0O¯×Ó#€Ñ ·Ô Jê‡bjx†ÀÝ #JzÄ8øçþ£œ±cǪTªììlBÈÚµkccc•JeBBBlllCCà /¼°jÕ*Ÿìèè¸k×®o¾ùfÏž=“&MZ±büw322 AÙ¾}{JJÊ[o½õ¤àŸŸ_BBBçÎáÏÈÈHFóÃ?ÀŸóçÏÇ yþùç麻»'$$Œ?~éÒ¥{öìñõõÅZNll¬‡‡‡ÕZí‘E998h%è=æÇ°{gÏДh”Pà R©ÄÁÒXÚ!ÔL(>ñO¦rNpZ€ý˜´84Jh4šºº:gg禦¦¼¼¼¦¦& ŸÝ¹sIÑï›fÍj|5Üõ0‡†?(ÃX˜,±F™4iÒ¤I“ðO>Ÿ¿nÝ:‹[öèÑÃä­„„“mzõêe±;ú±5 ªáŸcÆŒ3fŒÅ-,X@ÿéããƒwÃü޽ôÒKÖ'Ïj2Ê¿Œ™.”`ÁU?®ß‘Y@xp|5€ö¦à:<5(èÄ1åe’”cW±™{™|ÀòÉrxÎôù+Šºº:WW×+W® O*•"ªaœ!Ô® “†UnˆP‹ ã!öÓJ¨Õä´ngÏžMNNþ裬rdV³ÚckØ/‰~ãšMg _è‘ÒØ«0]Œm1ðêFƒ‹ÇFd V-Z¤zñEÝàÁ¶z½>1Qy诨è/mÄB¹9t:@ „TUU•””TVV»*3(Ý„R7pi8­ÓŒÄH’Æ? C+-†˜‘£ó‡4ŽÒ2ø®y¾Ëâžñ¸æÂeû@Í_4?ŠE5zî.LöfQH·¡§†›Hõ¥ ö@ñdµvÞ“ÕÕÕÝët«Yí4LÓ›~ÉŠ¨8€óÍp”Î÷Ä xp¡PH…ÆVzš:} €É0[FÃãñ<=  Ö^¼Èñô4p¹Z†îàRÌïÁ»ÐWD!À^N87&“Éãñär9=J‡ÇãaE…#F5̰)Š6~ëi¿ŒÓ}¶ÁjÐ}ýž¶7i·VD¦[ºº¶s.¬tÀ­ªªÊšØµÚdNNNB¡Ð|ý‹Ýà£Õj5ÇÃ* ª^¢ßDÅ‹% A¹=#ö¸À` €S«Ñý©Êb¡‡‚"óüùüÍ›U±s9ú࿎ˆC¦f€JQDTÄX§XBê6¡†è Ä¢(4$Ñí8pxK;xÎp—¬ÏÒcšXëÀvöìÙ'‘SwOfgg÷d•Ö¬Ö3çJaIk0¦ IŒèÐÍU✼‰$[Ó5B9À(D§ÓÂ0 ;w2Ço”júj $Ç`c °ÅÙ ‚‘Édt· ä š'16±bcœ›Éò ¶†e-E È.kKÔÂçó[I‹áfô솖—ÖE9éôi+‘ÝÁjÁXÌÑ™k¾ÑÿV¸潟ô…[!çÞ,00°c“Êà Ù*§ÕžtÃú?¢¤Â ”†?øk”‡a2™ …‚ÏçËårÀ$¨‹£~he‚Ñb9° V  Þ·¯áÛoósÏr_Ý(eR°! …ª/´Ž ¨Ô€§Ø3/ž+Š3uAé±:ø;rä@ôº%ÿ~¯Úšè©[Ñ ‹@­+I·åˆ-¶ „àf˜µxbæ=XxXû±X=ºk#­r,›½½}Ǧ¯dddLš4©¹¹Ùú¿îði4Èq©T*pë\.Ý(¨¼ X' Kuu5‹ÅS§NݶmTìMÐ £Z õ»ó†êâÅ‹çÎ)Ùlîi¥6˜¯ùŽÇ×ꜨšƒÈˆ"”J% ¤ÁáBÀ¿ÃÀ„ùƒ$o@&D/ð¿^£)|V³&Ö¬f5«Ý³a[>xXì³A ]¢H€mÀ×755mÛ¶ ç #¿ úþlmmår9tnb’ åÅèiÊ,ëäINUÑ%è.ò)!Z-“ÉÂòp ;D‰>ŸßÔÔ„éàààøä w ”15™ Є鶿ñè;JÌ™Ç(mäÐ3Ld1äÂŒœ9Õ µJIÛÊûxçÛÒ™på1 zÏ£ÕjçÌ™7aÂBHqqñúõë§OŸÞ·o_ÜF&“-Z´è™gž1é‚´šEÛ¾}{NN!dèСñññï¼ó¨ùBlll6lØ‘‘±oß>xå¹çž=S¡P‘ IDATz´X,^²dɨQ£p:‘Õ¬vß¹5À,–ÐC¦!‚A¿O÷âÀ‹K€L'ð"“Élhh€”¶aÒÝéX0‡¾oË`0hŸ×æ¥ðÎ3 ä%µ O€Ñdfè2„JÀrþì $P›Ö—ijE€!F šöEÌ ¶Q˜‘€Fnb&"p×ÔœÅcÑc§q²œyÍü@æ <À¶?$´px[ ‡&"‹„Çãµr–OH§Ó8pÀÎÎnܸql6»¬¬ì§Ÿ~zöÙgq²h"íÝ»×ÛÛû™gžÑétB¡†mgÔ#h¾ù¿ÙÒÒÒÖ­[·iÓ¦úúúÅ‹ÛÛÛ'$$€þëòåË‹‹‹u:Ý… öïߟ––æîîîìì¼|ùòß~ûíÒ¥Kݺu³BŽÕÄPàª8P´€2¬îqF­m1ºlØ#!øs\t› ®š1ŒÀ´“É´c«Õë˜:ö/lŒ-`è‘”(%€êpÈ\ÀÀ Ý44 Éd2b”ºÁ˜ŒF,ä€n)H±a!ÊúÀ´ïÓØRòwß¾}ß|óMZZš\.Ÿ9sfPPPÿþý'L˜µ~ýzBÈôéÓAXzãÆÞÞÞeeeIIIœ0aBß¾}‹ŠŠ¬wyܸq—/_vvvnll …|>_$üüóÏ¿þúkzzúo¿ý¶fÍЙÖh4...|ð*ëXÍjbv8999::‚æ,LÀVX¡£Óÿ Rfð›Í†ñ„jŠ„šŽ Cºò [B$-Aú½F«!¼ÍD©B5¸@°…rmÈ ƒC šž9 P§„Žxƒ"{šB#DWtÖññ1T'B»¿!¡xOî:hÇâ<“`5&°— ~áíÞ Ç¢]¸paüøñ‡zíµ×>þøãêêj‹›544¼ÿþû/½ôÒ¡C‡4Í|`ý΃Œm4¸QÈ›7œÐƒóxð].—+—Ë…ÍØl6üÂårŒÖâ ´ô†¿¿ÿĉá÷ÀÀÀñãLJ……-_¾|úôéW¯^½ë…íß¿¿¸¸ØdvÎ¿ÜæÏŸŸ=räÈ‚‚‚€€€’’’cÇŽ%''Ãèý÷ß'„ÔÖÖffföïßßzǬöP,88ØÞÞ¾±±±¼¼Ydˆàd3ô‰A ¢477cìB7ë`³ ¼…Ù-Ø!¡„Èßg¾ †þ„pX¬+Ff3û„½™¹‘Ì¡bÊÀ6tÛ 2°ÂQ!ÄÞÞ.K;ÖgæQ'Ö!...}ûö}ÿý÷£££}}}oöìÙóöÛo[œ£ŒóûÀüöÛo=ztÕªUÖ»¬V«% ý( ™LËBÈéÓ§#""pöÕ¬ö-##ãÎ;(4@ŒÚ0¨Ø(4bZÓ¢ •JU^^ ll6ZL¤ G¨ >x# ·æï¯yç¥@@.“É„l3ê=›×òóóƒx êO˜ýCÍ|@˜…ƒé .—ËçóH Õƒ*Ú …‚Åb9;; …B©T ±"“Å|Ô]ïs+ý7­¼íq•šѕÝu*vk‰µiÓ¦EEEݹsgïÞ½„ggg&“YQQaooïæævþüy Û™Lfjjê?þaWHHˆD"©¨¨˜0aÎjû7ÛÑ£Gûõë÷í·ß^¸pÁÛÛÛÍÍ­¹¹yòäɳfÍzî¹ç!0ó#77÷Ô©SÎÎξ¾¾Ö›fµ‡eMMM*• ÕÏ!0%‹ØïhD‹:ƒðÀø†ž: •ìªAÎäèE†Ò™€FÓÍͰzµ,(H Êfr¹ò<Àx¦ùʃáÚµk€(£é ÈL³±±A¡6€1„X´†³‚¡sZ­V,ÃÀxê:£Ì5Ñ^ÕĽ‚av‘Çãñù|>Ÿi(4˜§R©èŽlLRáhb;Íãñ„Fã d~θœÌMOŒFÐÂÚ |¤¥;€{Ðh4°[¸u´©Õêz£Ýsb lذa]ºtßß|óM‡“™™9hРիW_¾|yÁ‚2dLüôÓO³²²ºtéƒs233gΜ¹hÑ"ëw~Ô¨Q¦  €²nݺÁƒ«Tª À°QBHxxø¦M›Ž?~þüùU«VMž<™bcc³`Ák†Íjnà1MFv¢˜&„˜IÃlàáêê*‹Ñ­#A£èüÇ2 î‡+F¨•2qâŸN–Åb¢¯QèJDtê ‚-Œ¨hÔ©¨¨ ç i–ü}˜úY|¹jH·>0ígwœ±cÇÒΟ?ßâfˆ+O?ý4!¤{÷îï½÷žõæšÜIúfòx<“[M¿bggg½V{pëÝ»·³³sCCƒ‰ ÝV‚ä.¬£ "'C*• PÄH#Ff3Ê}"~àLBµ˜<û¬ö›oØ,yõUMn.Ë„‚oðqT»cñx<˜h€€‡Ln(Œ£dŽ^¯Ÿ={ö–-[à´±,„‹I lŠ]>Ög惫YÍjOº]¾|Y,Ó zlš¡§¥aÄÓ¹sg•JÕØØݦ¦&àU£t4È›”mˆ±™ÖãúÅËÑÑ¢½!|¡W-&Šj£@D‚±¦×`ã²²Û2kK´ÐÎìÁBöâ ŽfÊ¡‹DŽúMdIÇ‹X´Ô YKáˆÕ¬‰µv·Ó§OÃìÛl'Ož|óròóó;üãååøxžF˜ JH1èCà ©T ÞB‹åèè(•J‰‘x†Ù0l¢„¸?‚0ä:`2Ô¨u]Ÿˆ…“AP‚ð†ƒ×PW Qe¾°#és4ÿ ë7ÈØ†sö´N‡ A 1ŒZ™²ÓzL€iÀ–¶§9äï3{è&á-Îf²‡–¼ç¨þ`žvÃx×|{ú4îz+¬cÙÂÂÂ:ö¼ ù2‡ÕÕÕÿùÏ:vI|ôcËtB1H²ÁðMp €Â èÙÒ°1-:Ò QÆçóíìì¤R)†MØíx@O‰FV;àóùl6 …*• PJ¥R1 …Bliì…£cÍA.o°Y‡Ž®ˆ‘´†ÿ&¸4“‘n­7”àÍÁÙVòimLÇYfò; 9tœ×Rr~Û±žÌÝÒ1„¥·¿ÁÛÖ‘«– ÔH ׎=úÈÆž …Â|'õzýñãÇï: ñ4,ÚC·#"ékt Ûï!u›ƒÓjµ …ºF£7nâ6Zb %d0ò€ ŸÏçñx>>>nnn¶¶vÎÎÎ^^^Е‡8ÁÆ#Zª€@+€=·…A@§[I´«"5=‡þ/›œ¹ÅQÜtpp ‡×A´G+Ž[Ì+ÒïZ¼üû§¯\¹ÿ|öÙgÅbq~~þW_}EÙ´iÓ¥K—¶mÛ¶ÿ~Ð& „Œ;>ÛÊÊÊ–.]úÚk¯ :”ò믿Â=ñóó4´mÛ¶ýþûï„#FL™2…råʕիWÏ;wÀ€ô–………ü1<Ÿþ9!dÆ çÎ#„ÄÇÇ¿ð ôÆÿýï!Ÿ¾lÙ²|=!!!""ÂÖÖöÈ‘#øâÊ•+ýýýîH$[·n‰‰Y¿~ýÕ«WáòŠmß¾ýøñã©©©ðç²eËJKKá’l¾ý–-[à™lذY³f………­]»6##ãúõë~ø¡§§'jÌœ93'''##cÆ cÆŒÉÏÏ·µµ•J¥K–,Ù·o‡ÃY³fÍ!C´ZíîÝ»?ÿüs˜òpM£ÑÔÔÔ<ýôÓ‘‘‘‹l}ýúõ3f”——#¯ÅŠÉÉÉçÎÛ½{÷«¯¾zìØ1‘HÔØØhooÏçó5MJJÊúõëu:ÝéÓ§çÌ™óÞ{ïEFFÆÆÆòùü ÔÕÕvHvvvEEÄdÎÎÎC† ñôôLJJš9sæ /¼ðóÏ?ÃáJKK_zé¥éÓ§¿öÚk£GþðÙLæ–-[rrr233—/_îííÝ£G'ñ¡7 7Ná¨uL‚AÐÖþfþ|ýË/«Ôj!Œ;y»vñ ú‚C 1ø¨«»ãâ¢W(Ø*C 899¹¹¹õë×oÀ€žžžöööîîîÆÄÚÅÅå?ÿù““ÓùóçE"Qmmmnn®X, ”Ëå( Ä3NÇà1ô\½Aj€²b\ŸÏoþ¶Ùf¼ “É”~.å.år%\ø,^>&èpL>ØOŠô°qYSSÓ½d{LkŽŽŽžžžô³»yóæÔÔÔäääðððÌÌÌ7¾ùæ›ÕÕÕz½žÞò1´ßÿ]¡PtëÖ­¹¹Y"‘€P½ڦM›._¾ŒB5þþþ0hn^^^„矞ÇãM˜0A.—»¹¹ñù|™L&—ËwìØJÒ¸·¯¾úê½÷ÞËÏÏÿã?!ùùùƒÁ××·¹¹Y©TzxxôîÝ;>>ž>úúzƒáééikk[__ß–?þxòäÉ0TÔÁÁÁÁÁáòåËkÖ¬Y»vm{pÒ\\\^zé¥ ¼øâ‹111eŸþþþYYY‹-JNN†W¼½½ù|~aaaUUü~þüù#Flݺu„ ¹¹¹%%%qqq° ’H$NNN*• ôËccc{ôè‘™™ùÅ_úûûóùünݺUWW677Ó¢Õj<==Ïž=Kyûí·ÕjuçΧM›6mÚ´':±¤2,ÛИdkXFJePÉGÅh½^ok«]µŠ—‘Á1¾®…Èãñx]»ª|}ÕúÅ‹ÿûŸcFS ¸»»÷íÛ7<<\$¹»»ƒ—T*•ŽžÉdÖÕ50Œ½^_WWçâârõêU¹\1†/jû3™Bôcõä4Ñ©uœ,ºÚ¿øe ]¸N'Ñ1¤ †Ž=žt ñIk ñx¼Væ´Î.3É>µÒ Cw>Ñï¶”£BO¼^½zuß¾}½½½7oÞüí·ßšôÙ^Y·n›Í:th;ÝÌG†:ès!å…ôbl ˜@ àp8Уƒ•ƒa0ñãõaaJ½^êï?8c„Ù³¥\®.:Z©%„\¾Ì kØl¥«+ÇÓó¼—Wµ‹Ëh<0 ¶¶Ì ÌüïUŠZvƒÁppqhî×\__¯ÑhîxÜilh„Œ‰t&`'“ÉÔõÑißÔ2 ’D!ä;"(àfü|Õ!„÷Ï 6Ð?„â8à´œBM³´ÍóiðÆüí‘‹l®>@#^-dR;áñx&û§©bÇ@sÅŠ§Nzå•W`¹@“5°Vd~h>4-¯G(öv[2Šì»~í{õêåìì  …ÂE‹¥¦¦Ž1"22²k×®K—.%„ÔÖÖnÞ¼ùĉ-äüøã«V­Š‰‰Ù¾}{ll,ü“Šeff&&&Λ7ð ‡òõ×_ßõ³‘‘‘Þ ,5j  .))Y¸pá—_~nqwîÜIII™9s¦ýúŽ;Æ×N^R&“;wnï޽Æ ›;wî}CNYYÙâÅ‹á÷ÔÔT“ïIFFFmmíÒ¥K¿þúëÄÄÄeË–Ãó¶dÉ’qãÆõë×!gÆ W¯^…ØìÙ³á쌌ŒÉ“'—””ìܹ³ÿþK—.=sæÌŽ;.\HÔÓÓ³W¯^sçÎÅI½zõÊÎΞ7oÞÎ;zUìÑÄ%ôØMtà%!éQE]]“É„ñÌøðª%%†ÂBNXXèþÓûüùŸ¤R)ð˜Ùlö•+\&S׫“fBˆDºvÍžÏç;88ØÙu‚yr';wîüé§Ÿšd$Z1Fwtt¼|ùrnn.`d2Ù¼yó–-[£P(pãšš6›ýí·ßnÚ´ H-Yss3VB‚‚‚FŒ¡P( a²áСC.!‹ŸÐ/9fœPòT8€:rhýMPÆ„·Œm7ÚK—øGް²²J‚*­V YЦ¦&½^äÃ``dgóíì>>ä³ÏÝܸǎ¹xyyiµZ­¯Rؽ{w©TZPP “9:;ûuë9TÕx³ì¦‡‡‡»ÖýZÓµúúúKG.éNé 2CÅ`iYÈ\à09˜g#}ˆî†NØC¨Qi8 ­VËâ²PóÁ`< DHÈm¢óÕq.pX„Ô ¨ <(ÖØ±u¬Ö!Ç\0ÆbTd¾“A2‹r8b±xíÚµF |ôÑG»dZÉa\‚,ƒÖÏмa¨] Çܸ\îÂ… ™Læ„ /^ìààpêÔ©úúz77·€€€Çù‹÷ÇÄÆÆ †òòò¦¦¦ëׯ?õÔS¸O­V+‘Hnß¾ýË/¿BºtéÒ³gϱcÇòx¼ÄÄDooï“'OÊår‘Heûæ›oÞ{ャ¬¬ÆÆÆ;wîdffBÜÜÜüýýÝÝÝ333KJJÜÜܪªªBCCßyç¾}û^½z5##£¤¤¤_¿~ݺuÃÁE^^^C‡7n܈#|}}Ûuxmmíµk×$ =—ïž>6»S§N-½Û³gO;;»ŒŒŒK—.………ÙÙÙåååA-çàÁƒ°ÍôéÓþùç×_ý…^>|xÏž=]]]AËgÈ!=zô˜8q¢Á`øå—_ðN8°²²2##£®® õë×'%%åääôîÝûÊ•+ ,,ÌÖÖÖÉÉéèÑ£!!!ÂÛ5«FgK #j6&©ä}¡GêpïÞj&“/—7ܼÉmld¯_¿ÛH!ã$—3ÔjvSûÙgÝ££ÇS(µµµ*•ªk×®uuu………L&³S§N|>¿K—.<¯¼¼‡q–¡ÕkYL‹ó§6¦Ëôz½ì3™ÍÓ6 Cþ½œÍvÖ:‹Åb¼"`Ü¡_v$ 2׺?EO T‹–*æ´šûvÓÐ{KŒª ÄH’^µjÕªU«è¶DT0Oô!Ÿ¨¼¼ãBz6RK§»¢‡…ß޲<==4Mqq1­»Å`0£¢¢ÜÜÜð’zôèÔ©þýûóx|àÀð/>|øÌ™3{õêåæævóæM¡P8wî\šn~=zôx ù …X,¾zõê… è)Z­V(‚«EaTY†{B¼a0L&«sg««ÖË‹UWǨ¬dÃißÚÏB¡ÐÁÁÁÉÉÉÝݾGPÀ€‘hi(//—J¥ Ç?zôhqqqmm- -€ú4&ã|Úþk =ƒ]Èf³Ùz­žq‰¡‘kh& `l § çß«W¯   ,œ»»»#±?b"æF·Ë˜?ð4ű 7£‰ÚæµÂ:¤Cy<{C—+ž˜Å’ ‘Ö­Á¶’lÀKÃí-â îaÆŒMMM¾¾¾€åjµúÆGŽaDDDdggËåòƒº£Ú‰'lmmÃÃÃóóó%‰Å>°sçÎÚÛÛwà¬î¡C‡&MšÔÜÜ|¯««ËËË#„ <¸õÜÚÑ£GGý ÁÐ㟶:zôè /¼@§õ«¯¯¿uëÖþýû“““Ñ"B0™Lè¡AGÍ+(܉Ûã*]<Àp©Q^öÉb±¼¼¼:uê$ ===µZ­‡‡GXX˜££c^^ž\.wttB¼D")//¯¬¬lllÔëõ ê­£:Ã,œh‰BŸ8Þu kv¸ÔLƒå9äÖ ÿŒ±pÐm:iÒ¤øøøÞ½{£¢ÄÁƒCBBLÆY™G94}À|1‡ÞŸÁ‰Ú<¸^a¦&¼‹Ü<‹‚&úÄ,BnØv¯Q>£ÜCnnniiitt´J¥²³³knnšÕ¿H}Ÿ˜'¢òô˜›««ëÝù¯2d:!­P7ŒuÈÞàZÊé0|4Î …€µlÊ`è2›ÍV*•¶¶¶>×&‰pp5Ä”MMM@U€Ÿp22™ R^vvv06›µ>áZ ÏQ‡Æ\z IDATç D4¸i¸ðƒ€RØ+ ÑÑ#ê´$µ‰^žFbLdÑ’-UnéÍpÞí©éÄf,‘ Ž-®æH€R@µ. wP ::ÃóÁ !ýH˜ŒBÀÓëõ­°Ìï³–óï±²²²6¦ƒžD»¿”Ú}W¼@D £F9ùâcŒdh`£¿õlE}Lb¤ö^¼xÑü]œ¸ƒ‚7Hrãp8 úüù|þµkטL¦¿¿?´¿8;; ‚êêêÊÊʆ††ÊÊJ±XÜÜÜ >,N€Ÿèæùè  žjÔìîEŠŽ Ñ( ¯Ç¦|>ßbÑ…n¦iå?~ß”†4“Y5ûxZ™gCï¡õ³miŽÅË1Ï×Ñçp×;`…œÖœrž—ú(rN¬BÂÂÂ\DxŸN÷‡–€§ þ‡=+ HøàØP”Ÿ‘H$, }à³ØÜ£×ëïܹcgg|!HËØØØq´ªªÊÞÞþöíÛ°4‘J¥˜¤ÂXŠVZÃȧàŠõ€É7¼Fæ¦×ë!Lo á .=ªÇêýÚϬcÁÁc;þäaޤmW{ê©§ Fppp‡_ <æ¹5µ ó’iUfºµý±Y’ü}À% 2Öœlll$ * •J h±‚N:UTT@Ç¢H$ …... …ÂÏχâˆÅb,áÀá@Dza|Kxø›i@³ã6úA® ¥Ø2éœ*2Ü“µ^u7Ìž Ó/ÚÙÙÁ–J¥GH´åé¢ÛK1±f~9æ¢80ÛS£ä9ÐwݱBŽ+))¹}ûv{ óýãæää4pàÀö>JAAÁcXWè&‰Z¡´ýãxîÊàŸ\.á¡[ÅD ‡ŸÞŸž±¯@0åðžðY{V«ÕR©û`Õjuyy9ŸÏwrr‚\–F£±··÷öö>æ÷ šÁ¹> …J4C—®7`/'¤ÎàŠpvðT*ʬá(íäû#þÞ7ä˜ËØØØàm$h£Œ!æ»0PkQFç]Û>`­-++äܳétºØØØŽ=¢­²²ÒÛÛû¾km7Fÿ€òcž³ª®®vwwl‘“f »Œ|0p1B¡j0§Œõ k &Æ^¬É#@‘H$ ¥©©²²’Ëå:88‹¥R©\\\0ìppp0 nnnˆ£àÈdEÂé!‚¦fa°åååUVVF‹[#w€Á€š 8VáÖê­‰µ&ïÔIÒ'Nœ˜4iÒ£9–^¯ïÀŽÁ`ÈÎÎ60ñXŽEÁ¾,É`t‚þú<WÀ¹c‘À‰Î°ðxkñ¿LëUßu¡ Ýfk¾î³Ü¶¶¶ð.rÈn…Ðúž&¿Ð}3m¯`.•F_#ÍíÆ_à4,Îã±F9V³Ú¿Ý°Ããñ0ÃÓ—±†ùwÌV!Ù ]pà€H$úé§Ÿ®]»’­P(>üðÃ~ýú=ýôÓñññ ø©]»vÅÆÆÆÆÆöïß_$eee9s&88ù/]ºô믿ÂQQQ"‘è!I»W«®®‰D›6m‚?=*‰Z×4»«­­‹‹‹}ê©§¶mÛ†KÈšššAƒMžZ»vísÏ=×úè£Þ~ûmøýõ×_¿uëÖŠ+ _ýuÜÆÆÆæ›o¾A¼A‹Å›7o3fLXXØÆcccW¬Xqýúuú³ï¿ÿ~¿~ý†þO¹3GGÇyóæíÛ·¯°°°¡¡aË–-cÇŽ}èÜ­iÓ¦}öÙg+V¬HOO7nh¬;v¬wïÞ­ƒ¶n6l³fÍŠÿæ›o`”K6À(]] –óÇÙÙyÊ”)#FŒGŒ}‘PéÁ=¡ õà±ÖÁŽÕjµõõõUS«Õ …¸mÐy#‘Hºwï^VVvëÖ­âââ’’’ÒÒÒòòòšš…BЭ[7 9àþQÚ3Hz½žÏç£ÊÎϦófð'ŠhÂbB~°=î?m3lø.ö ‘¿+;´ôÁy0ø|>ŸÏ§%‘àÐtŦþ”J%r¸2älذaÔ¨Qo¿ýöóÏ??xð`6›ýüóÏ8ðÈ‘#z½~åÊ•ßÿý©S§-Z1yòäÇ744455}úé§3g΄§œ²ÿ~.—;o޼͛7'$$ØÛÛÏ;wݺuóæÍknnÆaÀÌlllV­ZÕµk×Í›7'%%=ûì³íq”¤¤$zËéÓ§œœ† æááqúôixqÍš5£Fz÷ÝwÍ?þÆoôë×oâĉðg§N† æâ₟ýßÿþçàà˜˜øÏú²þýûOœ8qåʕӦM0`À‹/¾ØNÙ¡aÆÊd²‹/Ö××·"”׺¥¤¤äååmܸñßÊ€©_àyqNZ­Pill¼|ù²««kmm-dÛèé° &¯à #£ðíapâ …B*•â8à(C±$??_,Cb­¶¶¶ººº¡¡A,£&‚D"¡Çc£Ž'^Æ.ØÚ‰Ëpİpj4@»7\B©•±Ö¾iÞÖßž3gΞ={ÒÓÓ·nÝ F,çp8œ~ýúÉåò‹/æåå…„„øúúnß¾=77wïÞ½QQQ·nÝ2E"QTTÇ»téÒÈ‘#cccïªÉÓ¦Õj:ô믿úûû/[¶¬ªªê¡bçÎ&((¨¼¼* ¹¹¹ „Œó+,XðÅ_lÙ²&Ò–ŸŸïââ‚I3—¨¨('''ülaa!—Ë¥õ¿ÿsvvNJJ‚F¿üÑd>éC„œ¨¨(??¿ââ⺺ºÄÄÄqãÆAÆR¡PÔ××ßÓÞnÝºÕØØø/QÛS(&Š)˜†‚žJ¥Z½zõ¹sç]ø|>`“É|æ™g€BM6NЧ‰I*ðï<O£Ñ@2iZ­V©TªÕj¥R)—ËÅbñíÛ·e2Ycccuu5ü¬¬¬„´þ¡È]&FÆÝìÙ³ápX[B¨0ÑÖĪ8æ‹ú¥R©pøæ_ó­ ¡‡´%]‰h‡†¯˜äÓL`ŒVî1¯h`6 ‹°{EG†™Ñ9ºVNÛ`ÉL®Âü­û©åàúÈÖÖ¶¥w###gÏž½xñb777˜µuîÜ¹ÆÆÆ”””Ù³gÏ›7’æ´…††.]ºtõêÕsæÌ±8H¦½íÛo¿]³fÍÚµkGŽ9kÖ¬—^ziË–--Í2¸?óññÉÎÎ^¿~=LlƒøÏübù|¾N§I˜Ã‡,eggãDK(f¸¸¸Ð›………555C† yL’6àƒ°‰úáÚ™3gÊÊÊ0÷Èb±ºté’””D®­ùÂE¥R8pÀ¢êAEEEQQQtt4FáÛyLûp²PGJR è½V«ýí·ß„B¡Muu5M¬o^ ɵ ØŒé ãx7ŠÖ` «Á`€".ž¡Á`Œ …8«'ªmÙ²•¡M&xBc)ÆsjÃvºù®î\ŸÏ¢AK_¤à€¦äïÌEá+æ•!z$š¹5„wà@lllˆQhÎ?Ì•¤ñÄhpºfrb( m^’¡Y$­4¢âLU$¶>Š»MsW{úé§ÓÒÒjkkáϦ¦¦ÄÄıcÇ …ÂW_}n!äµ×^KLL\¾|ù©S§ÂÃÃcbb&L˜žž^YY9cÆŒŒŒŒvrU-Ù|æåË—‡††fdd<\ÈN!$'''++kÚ´iJ¥ò“O>Y¾|yAAÁìÙ³aFË·ß~{âĉ€€€aÆB–.]Ú£G¨¨(`ÐÍ™3övãÆ÷Þ{oĈ×®]›;w.!$--­¨¨èèÑ£ÿ§ÙÜÜüÎ;ïœ;w®  àÅ_ôööþòË/á­ˆˆ//¯÷Þ{oþüùëÖ­kjjЉ‰ –H$3gÎ\¼xñË/¿œ——·|ùòÜÜÜW_}ÕÖÖöøñãéééiiiø|vl£uÆh­~ JŒìXh¯AàŸ*jØ5 –¦Sœ200h€ß餶ò`HÁ""ð›*h-5zlI¬€^O(Êår„Í4LÁ™¬Ç!¤ƒí­Œµö}[z¸gô°÷%K–Ìœ9“߯_?hÎê©§üüü–/_Û<ûì³îîîfäÈ‘AAAB¡0==ÝÇÇÇËËËÃÃC«ÕŽ9288ØÁÁaõêÕ×®]#„„††bõû®ù°,%%£77778Év:ÞIÐm9rdxx8ŸÏ_¿~=&$$Àz|ÇŽж½bÅ ©TŠ;™5k Ç9r$Ll›:uêðáç¹råÊöc|ÅÅÅíÞ½[.—9ÒßßFDƒ}õÕWÀšûæ›o ãåååãã£ÑhÒÓÓ½½½»téB?“`àÀééé&+Œï¿ÿžÞm3d|7ß h (;;;¹\Ž ª“#‡™l:Ð=:ÄXå†L,a p¸\.Ìt§¯T*±“¹4¢ 64å Òwph8yœˆƒÍª MŒ#dèq;ôBžP3 pÄö™ZíQCŽÝ€èWpδ——$ˆd2Ùš5k Ö­[‡›EDDП€£Dsuuuuu5Ùæ‘}’<¯]O€¾“&Â;‰†³±ƒ‚‚L2œ&Ÿõõõõõõ}|ž¤‡#š[¯^½,¾ŽÃOMdX9Þ1“gÒÙÙÙü?Þ¯_¿œXƒxyˆc ,!pÇÍ¥ éjF ¯ÚÆÆF"‘`g´‚Ò‘ŽBÐëõ*• Q =;-- b606 ³g°Cp Bm2-Ûk0Ãâi&ÃÊ03{ÃSEÔ„“D„³X 4,N6{pÍi¹†E“È£CR{+ ‹æ#×ܰtG›L&3 i^`<ü×Ú1±VZZZ[[»sçÎû&ªZÍjVko× R©0‹nÜ :\(ç€z ÊûÓÜbx ÊÐ d€ºÎ8bÀ3 J°³IÕXæu–Ѱ/(ÅÀ(ò &ð èaÕØâŠTi]ÉKœMG˺X̵´4QÆj-ÊicÊè‹/¾è¨·æìÙ³x^ŽIA²]M©TæææZ¿lÿ”Ñ#/iœ \è^Kœ I6¤± v# …ºm 0eèìTÜPQ 'x&8ÿHt¨Ç‘kxV-4skàÀaƒ’‹‹K}}=vaS*’ë0C†ä¬ö8BNǶ‡Øâû¸Ù£œ*ÆãñåD¸Go9ó µmÐÃB{õ‘r¡ †X¹ÁÑ2€4½swÜ8aœD/ Œá k@A,céæORb=3r à@9 b5wRjJ¥3uð =HyY4« y\æÉIHÑS;± dÎsÃP ™Ù§vÒÓé× ! P6ùû j,8ápÿ à è i7ZÑ€ÖÅšœ¿^¯‡CCÈ /bö5ÖðT‘z‡’rîÙ233;<ƒÖÑÑñÑTÑ~úé§<¼ÌÇÇç±—ç1ó1áOggg ñƒCIôDÈ--¢´¼&äÍPž"ðYP×÷;'ˆÃ0HÂ8 }"r  ÑS­V …B`ÆCþ Ñ . eFQŠ SHM&ŸÖL²ˆ:Sjûcè¾¥yÏÕ©ñ|èXÓ|W­ä÷`$è͵,4}Ý–¶ë êû´¸¸¸Ž] *++‰D`^!$>>¾'+ Cee¥§§çc; ÛSø|¾R©äóùX‹Åè¤ÐÇ!Ïl’¦Ã·0UzB¦½a» -]Œ¬9FÃçó¡°„ä1Œ0ÜÁ$Ž©¦O > ),&á(Lú¡P¡Èô¼2«YkÔàkÙQ¯îÔ©Sí¤djqy®rrrrçy9˜›¢×˘SŸ‹ýç!tΊÉdºººj4š††Zß÷ щ@ ŸŽx€Kcðò4öƒ˜„,Ì€¡"'‡°ðƒ3~”J%rhaJ¬'#;v…˜J ä °Ñ…¥7‹3ZÚŒN”a†M*•Âïû»ƒ»…:V[B“š<3mÌâZ!ÇjVûw¯+ÙlƒÁ`cc# º€#ph2,±@aŠ+àå¥R)ÎA0@—ÊãñP»b Ø¡££#Lå€Í w‡ìd“¾ø‰l­V i.Ð]ø,œ(XÓbÕ°OZ(NõFqª)=¶‘ï!N¥!§¥üp3˜¦P(°)•Þí=íŠþà=Å|ô[²3ì999®®®ßÿ}‡üöìÙóå—_†ß+**\]]ÛIáÑ`0ìÙ³îdAAH$Šõ÷÷?vì˜T*]¾|yŸ>}üÌ3ÏTWWã§p^NDD„««ë/¿üòÛo¿uëÖ-66¶k×®gΜÁy9ƒ ruuýüóÏÿ©;yçÎWWWlÌ:|ø°«««¹ÐÑZyy9̼ Û°a®ûÊÊÊz÷î=vìØÚÚÚøøø¨¨¨¾}û.\¸P"‘àgKKK{öì cоþúëÊÊJœ—ãáá‘pçÎÂÂB‘HÎÏ*”Je]]B¡€¹ŸX·‡„Ò˜1c<<hÑZ_ÝÒãZÊ¡1ÍÌâAÛòA4BiƒÞ=æ¾ë|ðA\\œŸŸ_JJÊÉ“'###333ú駤¤¤ÄÄDN÷ì³Ï¾ûî»b±øÿٻëÿÿ¾ Ǩ(n¬¬pæµÔ´02£!‰A¢¦æWSpœ)ejI|Ë­eiÑÛRs&*D' в»ãöïW<¯45Vv¯?xwŸñ¯÷k??¿qãÆ…‡‡÷Ýw»wï^·nÝöíÛ###ÿ÷¿ÿ¥¥¥Íš5«šÂY³fM›6môèÑÛ·oÿüóÏ»wï^/Z°`Á‡~¸}ûv!DTTÔÌ™3£££“’’¢¢¢p‹‹ ºjr(((øê«¯&MšôøãÏ™3çÌ™3ÑÑÑ©©©¼[Á'Ÿ|Ò³gO*æV%àááñî»ï†…… 0à±Ç[ºtiLLŒ]é„¿ýû÷ ŽŽNII «]»6É7­Zµ¢Þ9_|ñ…““Sdd¤â•W^Ù¸qã£*W¢¿'2ÿyõeþ+oV†*g dHÐu¾téRjj*Qpº— Ñz8Qè{^Ê uÞˆy òÌh...ýû÷ÿõ×_¯\¹‚({(Oxȱ%777*”€4 z2÷mðˆ ¨}w³OŠ’jl‚•6(ÝT²ˆI‹»ÄÙUYå7R ÝT¸’w7›Xé2£(ë`Ç]ì.ãÞ&;öÉí/uÄ¿V!ÍfsRRRddd“&M¶oßÙ®]»={öÆ &,\¸022R&“íÚµëäÉ“ééé¡¡¡Ô°R±yóf??¿ÈÈÈúõëoÚ´©úBµZóä“O._¾üË/¿¬ ~3oÞ¼ &àß­[·Ö©S'<<¼Q£F[·nóëÞ½ûøñãKß>lذÀÀÀˆˆú·AƒáááuëÖŽcÇŽõôôœ:ujÕ.& rÒ¤Io½õV—.]ú÷ï_o‘ÉdáááíÚµ;xð`aaá©S§²³³zã–.]š˜˜˜ðo0eP³Kxh¨p²m)@Ä 4pí zMRRé7t/ñ$žÂkÞ  ½DE‰3Ÿï/6J‘Ít1õ;HJJÊÌÌ$›ÝN ìxd'%%:KŒA§Óá¼éŽD"qvv¶su ðVe†µ¿„ãÇSGúÛ·oãK…BѤIü»ÿþnÝºåææ–YF¾ªÀd2}ýõ×»ví 6lØ•+WÊýK–,±Z­>>>T½4==ýÔ©S®®®­[·®Q£Fjj*]6mÚ´ï¿ÿþ«¯¾úàƒìžššêááAåS…žžž­[·vwwǽiii …¢ÒÏî¡è,\¸°I“&›6mª àr‰DÒºuk__ßk׮忿Ž5ªOŸ>×®]3 EEEÚñ(33S£ÑTy«¡JƒââbدÈAB"?¼T½p¸SÝ`0€C@Î¥j4°•A§&l$§’±K­Vûûû»¹¹+¢Àe*ÉE$ÞÝÝ$¹\îééIL…t³Ùœ˜˜HÕ½x,q)´Ì@1úºÆ¾k2™ôz=ŠíCã¹G\Y™¦°{w¬á¿Þn“Üîaøzˆð»¡r¸‡ñ°²YŽF£7n\ÿþý÷ìÙC†N÷Ë/¿àß.]ºìÙ³gÒ¤I¥-W!¬X±"!!aÁ‚{öìyá… @~r„–-[fee­\¹rÛ¶mÄz î¶ß¢$|eýúõ»wïBТηß~kç“?vìØÍ›W¾›m IDAT7©ÿÂ#X½z57´nÝzåÊ•+W®,,,¼yóæñãÇKÙ+V$%%•~¹ñ^xádV?ÚÀ;åðØ4Œá Ê`Ý"J +´":To ¦‰åÀ’Ô¸qã%K–¼üòËx/q8z¸B¡hÞ¼9vhTêÃã©ìܸ‡È4$ëPÀ4näqáh±lWW"]ƺ{¹"ärÅŸ¡Ì-ü ÇØ}z M%@+V&”6Ž !T*•Z­V«Õçñ·P’“¬À»ò<ØëþŽmê½÷ÞÛµkWNNÎÀ—.]Ú¦M›V­ZÍŸ?ŸÊï !ÆŒ?zôè]»vMœ8±úÂO?ý´uëÖÔ¢&::úÉ'ŸÜ½{wùÖ€éܹsçÎ…¿ÿþûÖ­[û÷ïÿöÛo“éĉcÆŒiÞ¼yïÞ½W¬X±cÇŽ–-[ó˜5kÖc=Ö£G¥K— ! DO+((ˆíÖ­Ûùóçi%þùç´´´èèèÑ”H$óæÍ;~üxJJÊÛo¿Ý ADîß¿¿~ýúsæÌ9rä¬Y³4MÏž=Ÿzê)F5~üøÁƒÿ÷¿ÿ=zôÉ“'‡êææöûï¿ïÞ½û‡~¢>Ú€œ‚%üÃk R6ÃkþsrÏ#ŒIóàu ‘Œ)„ÈÊÊš?þ©S§àcà­m6[bb"¢¥m6ì °z!F3ú‰Y‹LJø(ÊcsX,]@!ÔŽæ we9­ZµÚ·o_ƒ h;§M›FNï°°°nݺ5jÔhÒ¤I„"Í›7þùçkÕªÕ·oßâââk×®-Y²D1pà@*©2pàÀjUäÇtvv¦ÏuêÔÙ·oìWåXIò«8Ðßß_¥RÍŸ?Ÿ,Bnnn7B¬[·ŽÊ€Ï;—g³—^É¡C‡¾öÚkÕ§_ÎG}Tq=Å;uêôÃ?Ðói%ñÓ×_M¶Ü+VY»vmjδoß¾:uêÔ©SçÇ$ƒOãÆœœºté²oß>ZpÀÖ­[Éþóè5@e~^©Œ3b0J¥ÒÓÓ“Vîßxà2 áG>?¢ d2™V«Ý¾};… 'ìW†F·"5ô>~ÒEx½„kÃfFñÓTþ·Óe舃9¼¶Biÿƒj“Žòð,ÇÅÅ…¤~ô­B³ZµjQ˜R©„fðÔSO­^½:&&æË/¿¼téR½zõÜÝÝ Ee–¼àQÅ=H¬¤(UL+Yz`všÒƒ¬[·n¹Ç"ÿ°£àåvípðÇØu’ËåX1» rÒ;^m+¤ý}¨Q£Fýúõ/_¾ “”(©³‰¢ËÈŒ!~%>¤×ë©ä §ÑÜÚF~”bC¦ ySˆ[øøø\¾|ÁTȧ¯%!ÑÄÝ Ï?2CEI²‘(i'­ˆz4Г]\\È‚GƒG€)4ˆ¦n‹E§Ó999Ý»Æï÷\šÙðjÜ¥íW÷˜Àë–$ã©Kô%JA–Ù¨F{üZÚ(‡2v!ìôÖÈÒásWh¿<«„‡‡›Íæ;w !,X@],àT-dgg?þøãÄr àÃܺƒfpÂCo G= E‹w ]LÊÕÕU.—ççç ô2  y}ÒÓÓyéêà‰ˆ5Ò¨ |€œ¡¹/Z »ú/@µ"’¦äk·€ŠƒÚ64M†àPVªFËy8 ,‡GŽ9âè—S.P\\|èСGu%«?…’Ëå¿üò dT»A2 29x©Åäää„2${"Ö™nÏËËC‰3ؾèzâ:<7li.à%CŠÛ"6EÐÉÙð2جƒåTìÛ·ï‘ õððèØ±c%¼èçŸ~ä%dž VaÙ¡ûQt}B-â HÐ!ƀ—t1Ñt$¯ð°7Q9#œ4tKþ´~Q*•F£‘(¬XÐxˆÖ«Tª‘#GΘ1i¨B1„œƒwss£Ô$\;z½Ë4Š€ )ÀvëfCÒRåhÃÕDLáÃÀÎ:´œÊ†nݺթSç¶ê^½zµY³f•Ó/§:ö/HOOoذaµí—#JJ5ó gÒoë6M„ž'~R©f´ãä Ê3£M®AQ5´\CÞ(ÌkÜÒEn$R‰fΜ‰Ò;4*•JEEkx·JPE6üåqıgƒ"l´ ”J³FwmÝq@Ë©x´ûå$&&6kÖ¬2 ;êJÚl¶ãÇ#ž³zòžn‚h`Ð3xãK”*€‰ Ì(‘‰àcî¡Á5(¯)JâÊPe@¡P!E† nr¹\§ÓñîÎ6›­  ŸÁxxßhlèŒ@SF¿5Üëåå¥ÑhhHbåœéá Þ”®Ø_fr>ï{Ú¥Ÿÿ1ϗ¬qKé{ïV‹“u?=Žyλ=êÞÓ¼ŸÕ“߃Lðd]B”ò= XzªSûO°K©ˆA–×™7™L*•ÊQ°R©”p‚jI‰’j€ØÞ„¼B„ÇûlÂMä*·@ ìV¸ôêQŸ  Ët1¥C=’@®u2Áoo0”J%r!©0 Šž¡Á (^ƒ•1q/¬ FЗ¤Ž ó&•Ã!}B"‘tèÐáØ±c¨óF)ú¢$›W<óCã8ÄØÅRãz\d Q!œ‰&K¶yß±œÒt¶ôsÀ9ýS¦D r_f7{0€Ò‹ºOCŸHéç—Ù¯ºÌ‡ü6ÞC ®[·n—.]BBBBBB–/_^¾Ç ;;{èСÏ?ÿ|PPÐ[o½uëÖ­}‚Éd )>}úÔ­[wÆŒÕí´[­Ö#GŽL™2¥nݺTl PPP0a„gŸ}¶wïÞ½zõº~ýú… Ú´iÒ¡C‡E‹iµÚE‹uèÐ!$$¤M›6.\¨èÑ^¼x±}ûö=zô î ï¼óN@@@Õ®ðÁƒ[¶lÒªU«-[¶pôX¼xqûöíCBBRSS¯_¿þòË/¿üòËÏ=÷ÜØ±c ¶lÙÒªU«–-[}úŒ5Цðèi *• ~ÐbL“a7Œ+©ú'tîóGP±ræ#ZšXi“J¥’žc6›I‰§(Té§‹í\5Pn V£¬W¹¨n)"Ð(ʬŽ.&Þ#JQÁÛèF^6ôA-«÷£[‹ÏÓ}ZðxO„ûW&H"9Ô΂‡Þw»±üYàÀS§NݳgÏ®]»Z¶l©Õj‡ vûöí¨¨¨Å‹ÇÆÆ¾ð ñññ'NœèÙ³ç¦M›¶mÛöÙgŸ9²V­Z½zõЉ‰Ñjµh¼øôÓO?ýôÓóçÏ?vìØ3Ï<ƒú•Ë–-‹ýòË/Ífó˜1cÞ}÷ÝÜÜܨ¨¨Ï?ÿüÛo¿=tèШQ£Μ92cÆŒþýûËåò±cÇFDD4nÜxÚ´iEEEÊðîw}åò¹sç&$$T!ú×_=räȺuëîܹ3f̘>}úÌŸ?_£Ñ¼óÎ;¿þúëÉ“'G5zôèN:M:uݺuh¸pêÔ©Ñ£G?ÿüóõêÕ3fŒÕjíÕ«—Cš«>`Šˆ0têd–ɬDòHk‘HlV«HdR©Õf% wÆõ1•( d¹—!‘J<+ôœ’[,‹I¡ >a”HþP€¤Ra³)·T*•”X™$R©¥Ä™„þ=\Aùÿd¢³Ì˜ƒä!«Í&“J-V«@¼DòÇm6 › wSã¥Á‰D°þfž¾âA²ÖÊd ÷°˜åÜ'Û(ÍÒî§ßó±¤÷–vJÝ›å<çû –›ðôÓO7oÞ\‘””ôûï¿“Å¿Aƒ‡Z¸paFF†Á`¸xñâܹs7lØpàÀ¯¾úêÒ¥KóæÍËËË;xðà„ ‚ƒƒ'Nœxøða»^¿¡¡¡O>ùä»ï¾{üøqzŃ·ß~;sæÌ¥K—vëÖmñâÅééé½zõÊÈȈ‹‹»~ýú®]»š6mÚ·oßÍ›7ïÞ½;$$$%%¥qãÆ­[·ž0a‚D"éÛ·ïÔ©S¼lÙ2üäääôÛo¿íÚµK¥RuìØ±G: ³ÙüÕW_5kÖìóÏ?§o7nÜ¡C‡)S¦èõú   víÚM:uêÔ©ƒNJJªò†Í€uëÖíÚµ+11ñ7ÞHHHøñÇŸxâ‰×^{­°°ðøñãƒ>wî܈#üüüFŒ±qãÆ .ÈåòáÇWí°Ÿxâ ÚîÞ½{óïz÷î½páÂ+Vܺuëï¸å¦N:a„Áƒ;vŒ¶xß¾}³gÏ 5jÔæÍ›)ÎeĈžžžÛ¶m‹ŽŽÎÉÉ yâ‰'¦N7xðàóçÏôÑG*ËiѢſ¤]yAff¦](¦««k'‡µíAàäÉ“îîîe¨AÔL^§ÓmÞ¼™“’ââ⌌ŒÚµkS‘üüüœœœ† ·ÌÊÊ***R«ÕNNNÄoÔjuݺuoݺe0üüürssóòò5jT\\LÐ …ÂÎ “““Cö4777ÞWôþuÆË—/óo<==ÍfsQQ}ööö¶X,W¯^¥_ýüüŒFãÍ›7}||T*Õµk×¼¼¼jÔ¨qõêU'''Þ/çøñã-Z´pww/¯TЂ‚‚ììì P¾KVV–N§kܸ1­*VOqíÚ5’&|||\\\´Z-­ž\.·+Îÿ7áçŸîׯª”¹ÝBggçzõêeeeéõz__ßÌÌL½^ïîîþøã?>22’o·ÂÅÅÅ®óÐŽ;^y啊KµZ­èëEø™———››‹íæ«wóæMNGÂP5L&¹¬H^y¸›Í¶cÇŽjX} 777==½}ûöv 1ð—àææF”D±}ûö7Þx£rJuûì³Ï>û wéõúß~ûÍQp€,§  (Î;?Úý+gvÔ¸k×®6Â8Nà`9 ¬òÈ÷£}8EçA¡{÷îpi‹ÅR;8ÀÕ‘åH$’G¸˜®à8 ±›Í¶{÷nÇŠ8Àp€Ê\]]‘çô'ÃZëÖ­«$EΫ6 ‘÷L¬VPmf(Îø¯E¡{¬ŒÕj­žÑ(Ô©.]5ßÓê|BíJETù`ÜÜÜP×àO,ÇÝÝÝÅÅå!šý0›Íyyy...®®®¢ê<(………TÙÐÕÕµ’WàÞ Ñh,‹J¥rss»GU×*‡œœggg¥Réìì\É h0ŠŠŠœœœÜÝÝ«ÕÞäååÉåò¬¬¬C‡•™]µP³fÍÖ­[«Õj»ŠËUYYY®®®Õp`v Õj©8©»»{u8¡ùùùÔò±ò‰yi ¦®...H¤µ0™L•ì-((8}út—.]De9´Ë„S§NùøøøúúZ,탔.¯„ÕªU«aÆf³¹Z Ì8йsgªF|Ÿõ^Ë nÞ¼™™™Ù¶m[›ÍV —èðáí[·B4jÔ¨mÛ¶ÕMÅqqq¡s§Óé´ULÅÅbùí·ß¨Pž^¯¯†’ %%E¥R5kÖ¬šŽÄÄÄ–-[ÖªU«ò‰yi8vìXÓ¦My^¹#Ôp€PIà`9p€à€J‚‡ÏËÙ¿?´¶Ž;9r¤I“&eÖº¯ÈËËKLL|ê©§.^¼èääÔ®]»S§NåæævëÖ­r°sçN__ßǼÊ7õèÑ£ùùùõêÕkÕªUõD;F£×ëkÕªçíÛ·Éã8“±Ýf³900°: æØ±cÅÅÅ;w®Î+ödåÀ•+WÒÒÒºtéâìì\æwîÜIJJjÓ¦Mé¾Y•ªålܸqÈ!'JàÎ;¡¡¡e¶Q©4HII =xðàÙ³gÓÒÒ„ ,4hP¥ àĉׯ_¯rúå—_ tôèÑk×®U[DOOO?zô(÷ ççç;²)¦M›6nܸj2˜Ù³g=ºš¯XZZÚÙ³g˜#„Ø´iShhèíÛ·ïÁžCCC“’’ªRËÙ¼yóĉsrrl6Ûc=öÝwß½úê«øuøðáTÇ~„ wé¯÷wàâÅ‹111B…B±jÕ*!ÄâÅ‹ß}÷]ºàüùó5kÖܼyó‘#GŠŠŠbcc'MšT¾cØ·o_BBÂìÙ³›5k¶gÏž/¿ürΜ9äçBLœ8‘Èý°aÃ#""zõê1vìXww÷iÓ¦}öÙg'Ož\ºti¹/ÎþýûÇŒsãÆüü|WW×~ýúÍž={úôéÏ=÷œL&£¼«=z 4hÊ”)‘‘‘´’sæÌ¡f Ã‡ïҥ˹sçfÍš%„P«Õ1H€^¯OIIñóó«]»vaa¡R©¼zõê;wüñ”””FÑz–/äääŒ1‚>×®]{áÂ…ß|óÍæÍ›…#GŽB 0€*&̘1C­VoÙ²E¥RíܹÓÏÏïÅ_üòË/…k×®­ eùè£Nž<)„ }õÕWoß¾=jÔ(úiéÒ¥jµzÍš5[¶lBtîÜù¿ÿý/n\¾|ùÎ;…ݺu³ëø^޶ômJHHðððøî»ï6lØ@¦ŒSa7È3fètºàà`œò؈#4hмyóõëןíI߇……]¾|9;;»ò)„8yòäG}4vìØ&Mš >üÍ7ß|íµ×†êïï{úôi!DXXXïÞ½oݺE7®X±¢âšõë×ïÕW_ -((6l}khõë×ß°aÃW_}EÆ•¤åtïÞ= ÀÅÅeذa—/_Þ¾};"”†¾gÏž¸¸¸&Mš¼öÚkÔs¥Áb±¼øâ‹ÞÞÞqqq©©©ýû÷_µjÕœ9sÞyçÈVû÷ï?zô(d¹ïPnnîo¿ývéÒ%“É”œœ|øða½^¿}ûö³gÏÆÄĬ\¹2..®}ûöï¼óNjjjbbâ±cÇôz= L«ÕþþûïDSÊÚµk÷ÜsÏ !¢££322¶oßþâ‹/&%%ýïÿ‹ï½÷û쳸¸¸÷Þ{ïõ×_Ÿ;wî±cÇ‚ƒƒ…qqq2™lÈ!¿þúë‚  0räÈ9sæÔ%„øé§Ÿ¦N9tèÐ3f|÷Ýw1¼Þ½{Ƹ¸8''§ÁƒïÚµk̘1o¼ñƘ1c>üðÃ%K–Ðe[¶l™8qbXXyäÈ‘åË—6ìÔ©SÖµoß¾¸¸¸)S¦œ:u*((ˆ©Óé^yå ò½÷ÞÛ¾}ûåË—=ºÿþ2¹zõê={öx{{¿øâ‹&WXXxðàÁÔÔTN·}ûö‹/æææîÝ»÷êÕ« ,X°`ÁŒ3^}õÕÙ³gŸ8q⥗^2|ð¢‚d‚èèhÚÄ]»v½òÊ+:...Îh4òj{öìY´hQ~~¾F£éÓ§O¥Ö\\\œœœ$ ï”óˆÁ`HJJºuëV^^^EÄ\æææ’yQ¯×çääèt:½^_¿~ý Üç ÿ>„„„„……½õÖ[gÏž6mÚôéÓŸxâ  ”ÑhLJJº~ýzAAT*ýúë¯W¯^½iÓ&H+[¶lY·n]E Ž³³³Z­B ‘¿¿rròñãÇW­Z¥ÕjÏŸ?¯Óé¨M™F£ñññqvvÎÍÍõññqss+((0›Í¹¹¹·oߦ¾[¿×r6mÚPGz;<¡ïM&SEdcÈd2Ÿµk×J$’ 6kµZ//¯š5këtºÜÜ\ºF­VÓôõz½\.÷ññ1™L&“ÉÇÇG.——»8EP·nÝîÝ»¿÷Þ{...k×®m×®]NNµ\³fÍš5kºwï¾fͫ՚’’¢×ëi+i:.55õüùóüûr×U*•ÏòåËׯ_o0´Zm5jÕªE+I—ñUÅ`œG’’Rf§ç¿îîî³gÏNII‘ÉdùùùIII………¹¹¹$©§€2Ù¤I“3fС¨ˆA>ûì³#FŒøïÿ{çÎúfذaJ¥rÑ¢EÆh4Ö®];44ôèÑ£mÚ´iÓ¦Mnnn\\\DDo©\îðå—_Ö¨QC«Õ †Ü@x… IDATÜܤ¤$ôitéÒeèС*•êï ù—õ$Á¿eË–“'Ovqq© ¼ONN¯_¿~aaa•Ø@_|ñÅ­[·._¾< €².8$''׫Woòäɵk×®Úf‚³fÍ’J¥'OžŒŠŠ*=λAvvvrròÀí¹>ššzèС‰'>´q âà7Þxã7bccúté²páB» RRRFíïïO²…\ºt©~ýú“'O¾ÿ½®4hРÁСC+îùP=5MrròK/½D]nÿ¡°dÉ’sçÎEEE………}ðÁ܈Z¡@«T¼üƒ¤]]]Çççç—˜˜XA>Z·n=nܸ¬¬¬sçÎÑ7ƒaÆŒe^|êÔ©Š0»÷èÑ£^½z«V­zê©§ì\V‰dܸqO=õTbb¢N§ó÷÷0`ÀçŸ>vìØ¾}û®ZµjÔ¨Qví)+NŸ>}òäɈˆˆˆˆˆû4Ð7îÆ©©©7ª*qáfgg:´qãÆ$kÿMX·n]ß¾}8vìØýû÷£Ç6I£F:wî\bbâ[o½UfhÌÛo¿ýæ›o&&&Bˆ® ˆ…S§B³fÍÆg6›É5B0qâÄj"U´k×î£>Z·nÕjMJJŠå>|¸oß¾ÉÉÉ عsç¢E‹üqXP+š4i2nÜ8›ÍvêÔ)þýÑ£Gúé§¿ùð‡Ôr¼¼¼êÕ«'„pssóõõU(¾¾¾îîî ¯¾új·nÝt:]LLL¹‹2™lãÆcÆŒéÖ­›V«Ý¹s§J¥ºpáBttô„ ¢¢¢œëÔ©Cnç… ¾ùæ›Ë—/Ÿ3gNElÌúõë D–V!„¯¯¯§§gTTTzzz·nÝŠ‹‹‡^¯^=¹\Þ¶mÛÝ»w·mÛ677W§ÓuèСLµ\ÀÓÓÓ××W"‘¨Õj___¥R)„èÛ·ïùóçGŽéïï?þü/¾ø¢¸¸¸AƒBˆ5jÔ¯_Ÿd___77·õë×Ož<ùàÁƒF£qëÖ­1Hj¢S¿~ý3gδjÕÊÓÓÓÙÙY¡PH$ Ö”ËåÎÎÎQ$Êd2åää?~ü7Þ¨[·îòåËÇŽ;yòd©T1pàÀþýû‚ýøã...¾¾¾$îÑ‹?7;/_Þ¹sghh¨Édš>}zçÎ7mÚ4`À€nݺlܸ±víÚQQQ&LhÔ¨ÑâÅ‹-Zd05jôÚk¯‘D,„ ¤rå7nìׯ_·nÝ ×­[çëë;a„iÓ¦Éd²þýû¿ûî»gΜ1›Í/¿ü2 R*•FFF¾óÎ;‡º[n¹€¢xï6ȹsçnß¾]Q«V­{’QÅô–-[ž={¶gÏž.\prr¢÷èèèË—/‡„„Æ~ýúùûûGEE 4hÆ z½þ矮ˆÁ—ÉdNNN¾¾¾ÎÎÎ6lèÛ·/­ÞÚµk333}}}©É@@@À7®\¹B#’víÚ77÷üùó‰¤:[½JƒÍfÛºukpp°D"ÑétÕ¹Ño…ÂÕ«W5Í“O>i³ÙþY;x¸pá‚Ífó÷÷·Z­Ì¤î d¤±X,íÚµ£çGœ©Þ Ùl® Òy”—Ãk8º‚:Àp€*Kis,à8 º³‹ÅrñâÅœœœ›7oòâƒÕ®^½š™™éØòGnݺõÀÃ…+W®Üºu«^dµZéD㛼¼¼‹/šÍæÒgffVçý¿7nܨM~«nÞ¼Y[üð,§°°°}ûöñññ6løüóÏ«ÿ öîÝ»ú·ÈuÀCäI“žþùGo^Ï?ÿ|¹·µ-ŠŠŠÚ·oÿÙgŸá›Ã‡ôÑGeö=zô£àºzõê+Vü›Ô˜1czõêUî-‡Ðš5k¦¦¦®Zµ*<<|ãÆõë×ûí·…±±±äÞ0`@óæÍ“““©€··wttô¶mÛ80|øðøøøàààJ«}´fÍêzУG*Ð;oÞ¼ž={^½z5;;{ìØ±=€ï¾ûîÂ… aaaË–-ëׯ_«V­ÒÒÒ¿]]]'Mš´gϞݻwOœ81##cõêÕ>>>4È®]»Î™3‡¼ˆôôôüôÓO{õêuþüù¢¢¢Êá©ü1e_†‡‡·lÙòüùóTìoøðáûöí«U«ÖÞ½{§L™rùòåµk×btïôéÓSRRÖ¯_?dÈeË–=õÔSJ¥òÈ‘#BˆvíÚ…„„à-?ýôÓ‰'† ’ðúë¯8p€2Lß|óÍ€€€+W®PJ''§˜˜˜ß~ûíÌ™3z½~ÅŠ ¨„EÈÈÈ 6½R©töìÙBˆ~øáĉ~~~­ZµR«Õ{÷îuuua„_~ùåÂ… ùùùß|óMXXØŠ+ÒÒÒ„/¾øâ³Ï>›““Ãq²k×®÷Øîøøø>}úÐJ)B¼þúëmÚ´©„™nÛ¶­eË–«V­2ÁÁÁÉÉÉ×®]kÓ¦Í믿^£F ³Ù|ìØ±Ÿ~ú‰Ö¡CÞ ó‡~èØ±# øÍ7ßÜ»wï;w:wîÜ«W¯ââbB !ÄØ±c³³³W¬XÑ¿ÿ† ÆÆÆvïÞ½d£ëׯ'$$Ðg??¿!C†¬_¿žš—9È5jìÝ»w×®]BÞåä—_~ùõ×_…O<ñDXXX•i9|Û–/_žžžÙ°aÃéÓ§¯]»vúôékÖ¬ ÎÉÉ0`@ZZÚàÁƒõz}ppp||ü¼yó<ÏÛZTôqš>}:Ž5*11qРA'Ož>þĉ111ß~ûmppðíÛ·ßyçÌÌÌøøø‘#GΞ=»"Ú•†9sæ,Y²$88¸°°0222---22²°°0111,,lÛ¶mGމ7 /^ŒÏÈÈ0`ÀÙ³gƒƒƒ÷ïßÿßÿþ7555>>þí·ßþüóÏ'Ož<~üøfÍš=öØc“&Mâ½öîÝ»xñâþýûÇÇÇ:ôÓO? 6›ÍC† IKK‹ˆˆ¸yófppð÷ß?yòä¦M›Ö­[W¡PtèСr),,ìêÕ«ÁÁÁÛ¶m‹ŽŽþùçŸ'OžÜ¢E‹>ø`Ĉ©©©k×®¥ï»víZ²dÉ©S§Þÿ}gŸ}væÌ™+W®Ü¶m[\\\dd$œ+VçååѪ8P«ÕR³ÈÊä7ßÿ½N§ûöÛocbbNœ8ãÆÈÈȼ¼¼ààà+VÌš5«E‹µk×vvvnÛ¶íÊ•+gΜùì³Ïzxx¼ÿþû§N¢íþõ×_ 'ï½ÝëׯŸ>}zppð¥K—ÂÃÃm6ÛСC+ÇjwðàÁˆˆˆ®]»ªÕê#Fxzz¶jÕjòäÉ?ÿüó?ü°nݺ””¢Q-Z´˜0aI ¿þúë;<lÚ´©ŸŸßرc÷íÛ7|øðƒŸ>}:22òúõëñññ—/_ÖëõñññG­„©yzzoݺõÇܸqã”)Sžzê©» òĉ£FªQ£F§Nf̘Jøûï¿=ºN::tˆ‰‰ùû ÎË9|`âĉ]»vÍÍͽ~ýú¹sç,‹···³³sJJŠ——צM› äíím0.\¸@·Ô®];33sðàÁ•s¢®_¿ž››Û®]»–-[^¿~=??ÿôéÓ^^^ãÆ«Ìž]jµúÓO?õóóKMMÕjµ)))õë× ”J¥Ôõä…^àZm¯^½zõê5räÈ””«ÕJ«zöìY nÖjµß}÷ݾ}û*aäÆÝÝý“O>:tè¦M›\]]ÏŸ?ß AƒÍ›7ßÍU¶fÍšÙ³g{{{ËårÈ………—/_ž4iÒ­[·<<<<<<²²²JWÊiÚ´)Õü/.. lܸqZZšV«¥¾« …âìÙ³õëׯY³¦\.üñÇ+g éS§Ž9²lÙ²ØØØ[·nݾ}»}ûö«W¯.Ó¥ôä“OnÙ²åå—_öòòÊÏÏOOOBX­ÖöíÛgff6lØÐl6{{{«ÕêsçÎiµÚÔÔÔ† ~òÉ'•ÜײOŸ> Éd)))ôÕjµZ­{öìIMMýþûï'L˜Ð AOOO•JåïžžŸŸß¡C‡-Z\»vz‘Ô¬YsÒ¤IèÎŽí>yòä¶mÛ:vìÈ·ûÒ¥KuêÔ9}út```“&M.^¼XiÑÀÉÉÉíÛ·oÖ¬Ù•+Wüüüž~úéÛ·oÛ9Ï>ú裧Ÿ~º4~&'''ýýýŸxâ‰ÌÌÌìììÏ?ÿ|Ñ¢EÞÞÞ*•êôéÓÏ=÷ܼyóFݦM›ˆˆˆJ°£!ÜÜÜׯ_¯R©6nÜX\\ìåå5mÚ´.]ºlݺµsçΧOŸöðð üá‡Ö®]ûôÓOoٲ套^òòòÊË˃+77÷Ænnn5jÔÈÍÍÍÈȨzÃ¥RÉ3"5M\\œ"44Ôb±|òÉ'GmÙ²%/å´råÊ íÝtŸ P(d2Y¥½N"‘Ü#å–Ë| ™LFº °ªôͨQ£*-›êÃ?Ôh4o¿ýv—.]†YA¥RÝ-víÚµ_|ñÅþ󟌌 £ýòË/=<<¨ƒÜÚµk½½½CCCíj/J¥ÒåË— !*skîŽ9òÛo¿EEEÍ™3‡‹~Ô̪4ܹs'&&&++‹·wóòò¢VÓ2™L«Õb[•Ÿ—]ú Ô¨QãÈ‘#[¶l™0aBQQÑêÕ«ï§Â£B¡àÕ}h»¯\¹-—Ë«á†Þî¶§÷0üL™2¥k×®$XËd²N:5hÐàÒ¥K¯¿þz¥ÕÙKKKKMM]¶l™J¥ ‰‰ ìÑ£Çüùó9ÑBܺukêÔ©ÙÙÙTÑÑ6lØP·nÝÐÐÐÇ{¬zi9vàåå•âé陓“óÕW_…„„$$$Tc;vì€âU P\\L®ˆ»ÙR?üðÃÇËåòððpú©fÍš }úô)—Zâ kÖ¬Y¸págŸ}Ö³gÏøøø‚‚ú~ÅŠ<-777÷›o¾¡Ï±±±íÛ·OHHhÞ¼y™Ï¤¦$8ÿýcÆ­'N$§…ÏG}D_Z,–/¾ø‚_¶ÿ~êæ›ššúÓO?½ûî»ü´sðð𠯕§§'˜÷²e˪<û¯¨¨hâĉJ¥ò“O>±Ùl|‚gϞݳgO™wmÙ²åòåËv_>|xïÞ½&L˜2eŠxt!66Ößß?!!:ò¥¥¥EEEµjÕjÔ¨Q#GŽ$I%˜s¢££}}}©üàÁƒ'NœøÞ{ï 2d÷î݉‰‰¸ò›o¾™5kVJJÊÆ‡ 6oÞ¼ÒO1bć~èééù Ü·RYÎìÙ³FcPPPtttÆ 6l8eÊ”¥K—}øá‡{÷îýñÇ+ú÷ïß±cǰ°°3f„‡‡·oß~Ñ¢E‡:}útÅu.StqqYºté”)Sš7o>gΜo¿ý6((Èh4’O/((Hqþüù¡C‡&''Ëd²^xAA±AAAcÆŒiܸqåW&~æ™gÖ®];dÈsçÎ͘1£yóæ3fÌX½zµ\.'†1`À€¶mÛNœ8n•Ï>ûlïÞ½AAAáááwîÜùøãñ´ž={R$á[o½uíڵƗùÒ1cÆÔ¯_?(((!!aܸqÍ›7ÿøãüñÇ   üüü?üP1yòd—… VŽm­U«V'NŒÕh4 ,èÝ»wÏž=Gõì³ÏbÖgΜٳgµ44hÐܹsHÛ}èÐ! <ÇvK¥Rz¸(éé€í¦U²3Ñÿ%PÁ›S§NyyyÝÁŒJ¥Âjã@ÑŒ°4_~ÐJ˜V‰fJ¾;„¸ÓŠ‚7*•êþU^à'_a»ƒ­öÝð“¾/}BïÓþ\ž¨í¸Ei´€&•J«ÐHÁØ‘¤Å‹Ÿ>}zÈ!7oÞ$Ý¢r€¯ÿü—¶[Õ*\É» þK” :U&Û}i·÷^±J€ÒÞ¸Ò³°»@&“Öüåà1ÁÊœTém¢—éz¼~ÆÅÅ]¾|922òöíÛ½zõ²Û)¾Ýœòò/+ÍÓƒÁ”&MÃݶ¬ô€ù*Ý á+í´–‰Ÿv(zŸøY¾;âè *æÎûí·ßêtºÂ_R¡V^-öªL›6 ÇÿfhÔ¨ÑÇLFü'Ì›7oýúõ:nÈ!U’Wä€ê –#(_¯2ߨ½{÷Gr%)ÿ÷_uêÔ©dtªnàááñ/_<Ë‘J¥Õ?~Q"‘yÔl6çææVáH¯%„¨Ú‘<(ðÆ0ûþÛ¾@‹ÅòÏÚÁ{€N§£ Ð*? •h ô `JîèƒÑhüÇíféÖæb9NNN>>>Õ¿E%!Daa!•®©Z©Va2™ª|$ äe5›Í—.]ªÚ¶CU Ô]«Õþãvð@NFó(MêP·n]!„——W¹„ÚWO†š››ûÛM¹\nWýÿk?ÿüó›o¾éÐûà8ÀåËxʈX³Z­U’(ã8Àx„ÁÝݽS§N°|+•Jûõë÷ï\‘Í›7‡‡‡K$²Ûl6©TJ_ …Á` ”Um6›Åb±Ùl>h³ÙȽäááܱcÇ+V$&&¬Lz1¹OèQôD"¡ñŠb4›Í&“ÉÙÙÙjµÒ]5Oé&“ÉÉÉÉd2FJ ôJ Ûår¹B¡ M&M‡¾¡Qºì[­VzÝK 4$ʸ¢4lú^&“¹¹¹Æüü|Ê3ÀOt;ýK9%ÚO¯C#tZLZ=0ýk±X$$“Éè^“ɤR©hYèF©Tj±Xh`2™ÌÉÉÉ`0Ðg[ `µIÎ’H$4z”^¯§AÒøÍf3Í‚ÆF#Á !hTiJ©ôFLÇjµ* JS£ÔÁ| ô(’ŸŸŸZ­ÎÌÌ,..Öh4´È„!2™Œ.ÃèÀ=¹\NK„ýU(‹…LßÐthj„HÈÀ¯ØtZRJ¹ÐétôhI¨N7R04Í”¶˜¦I/¢gš !œœœ EQQ­9vœ0þ•J¥„Øø•òZhÊ„„á”ÿ'J ¾Ñ{‘ DÀtLhØô|úL?–êõz¹\NXDS ÛM&“R©¤éÐ•Ø e#ñpè¢ÄÓL?aF8;dô£Ï@0³ÙL¹AtFèiÈÅ¡ÕÉd&“‰N ½ ‰>À$ÆÑr9;;c¨4ª¤¤¤fÍšUµX,ÈsD¬ý? !ô¢í$ÊkµZÉý…+)Â':ÿDk,KQQÑ/¿ürúôé7n ET˜Pp…ÂäéhÑ£èJBz:W8]”“Dð”‘3úÉÙÙY*•FNÎÿèÔQæ pžƒCÈ;tÑétåååÑ»À!pæ¹Cy…´¼tZˆÆáƒÍ€wⱘ)Uœ£çƒŽpÖB†‘ I™Î*(‘B­V»»»ßºu«¨¨ˆH­ -)=ŠŸæ úKgÕf³ °p¤4‚<Ñêq!ƒ“?«ÕzëÖ-…B¡Õj! ‹x – ÷ ¥ãkn0€º ¡4YBQâT§/ÙÂÉd`Òô¯R©ÊúÑŠa³häØðªÕF—aâJ¥L»é l•.MÇ£}ádÝd2A£/U*•\.×jµôº ¤™ø¢B¡ CAO¦Y€Ð°ev‡3¢oL&]F˜@£¢ÁCl⃧7Ra ÑèÕ …Âh4Ò°é{ 4]I°N”$®“† KD h‰“þ@™¶åidsðÚ*æ@2ˆZ$é2J̆ˆ­%2qçÎ;wîpi…žâEO©Têõzœ(BzB<–Žh†Gôˆ4->:Ãx8¢ôvº…S"íX­ÅÇ"‘HÔkÕ²c2Lœ ×\¥àK™òtfÀ•‰ÇЯ¸,]q l†Þ"•Ji" 2D¼@¹@U¡`á0Ó‰ ÒDèàÉd2—ZµjeggÓJBž…Š*ŒãMÔŠSmQ’޹ÐL!—Ð"@7≫ ¬à‘Øn<¹ë¼D&]@›Nãcæú4È:ÐÀÉ!"€BAú1›Í`3vâ ±7z}&º‰£a±X¨¤î…ÒI'h‰ñH«éJ0à ð®áŠ6ß®t‚íAò§ƒ©7–&´GÄPB¨$‰Z­æ#Ÿ#£)M ¼ œóñ½³äbÔÚ}þÒ*óë8ø m Д¡ür*Ï 7ÝpDgŒð˜0<‰H!¡ ‘?ª!X¦7§2œ.Ô Å™NÝìtvvƈÑó!z“ %“ÉlÂfìc4¼oP¢VlWH$}˜Þ<ÝìùЧL*5§‰SrF¼§DAp` r1(̃P,„*•Š&EŽ{, L&Cmâ:à¾`“19ï!‚ÖùöíÛ………:»C²<·ÒxÀ˜i‚Cé<Ãp ã­LL Ð0TÒ—J¥’dO$¸;ˆŒ`ĶÁEˆ÷¥—‚££ü ·bñaÀáÜÈî,Ð ‰Î Â1š!m18(4lÜ£ øRÐ’B'>M ?ÎöŽ. å*2áG?2|B¤QŽñ¡ÂÉ<^$JŠâ@€ƒ! ©‚ÆÃKûИ%q. üq†A›ˆù¸ÂCáââB2e™œš7ÏÀšÂišƒåT%àò J‡ IDAT$CH¤œœJ#¨T*urr"3¡2{0 èvÁUVr-@Ãñ rLP’8ÚA`¡ÊNtPñ‰”0™LFH©T*íDòˆÈårK{‹9ÐìÙÓ@rDâìá\°¡ÀóUOrT zWÕÉ„£Îõn‚ê@Ÿ¹Å6¬ Ò"ÝB^4ú–Vz •»ÙHÅ•ö:N§ÑhˆzBZ§"T°ÑâCÏ››O" $\Ðtø¸‘6]£Ñ5T©T0»‘×Ðb±¸ºº µZ-‘Ht:ÖV¡P¸¹¹¹»»ß¼yS¯×s“³³3·¡A$ç~x#ì ¡„½@`ZxMÀ€™8\<‡ih G @?(‹p…’é‰;Hˆsp£7$6x"•J%í/žFh !ƒfŠá'B?â|ÅÅÅ´ĽÈÒKlƒØtebÐ1e¨A@'r²‚“@C3"<„¤BC*..¦•‡áRQR- Ö0›ÍFu¹ðGCž#~B2œ“““ðVÅZddh¯DÇAýµ6›ÍÕÕÕÅÅåúõë”Î'¼(i7BtŸĸy7€+0&RrWáyÈVÄ ÖpɈÄ^+@ƒè©ÄÒÑ"?,ÇÀþÎlBž$7µ7IJè 7píÂé‰À8üÜÏLkH²ÑY;¦COƒ¶*ƒ˜5 Xþø«a Ë8=‡ûo ÄÀ°ÃÙW ¢¡Ê!ø"- (Doz/Q’4aÅ""K/…ÓBQãBO£F5jtðàA­V‹•ásŠû*p©àvt\Ÿ[¡ÜÐ"‰‡ ì¢Ûiëa!€¹ŒX2üC\ò–´Â(ò®s“ ¶G0SœŽ —€¹u*A”iÕj5b1¸EËEŸ¤ hN`f³™h7É À+˜¹`G-m' ª,"O¡Ñ÷Z­Å=aƒ…~f-X5ˆr vuË©Ru¯Ä·Œã jä áÅb±Ã' !!7œ+@VÈ0¼ÀðŠ˜Ž˜ž¹†#h ¸ §6_"µïÀŸ,6‹ñ£Û nB&HŸûƒYeb§(~©Ø-Ñ tœöw¹“ü”órre»À!ä:¿ÁÈ¹ç –=>;Ð1ß5Y?@Ùéu8¥ðØÁ8ƒBÎp°ƒ¼ÚGZmˆêpóO ñp¿œCévD ™bµZ‹‹‹¯_¿®Õj©æ/âŽá±Rt¤±‘Èe¢ž0[q' MÈF·899o‰¿’ÜŠ M‚]‰Ø3,2V+OóE4~…•ól"Çø—r§ ¢ 8“~CRt¸{çËeHY³fMµZ}íÚ5HWp™àxr‹:´7l w=’ðAW’tÁBhd‡´sÈñ°#nå*ˆbv8 t°œª8B±m„©œD‚»Aÿ€¨Îc¨ˆU(Šââbèã„RÐôá €r@§—ûÆéÜBý¢xG©TJš8a•^¯§çpõqœqÏ|lœ6lÁKÄ]> ÄyºKMÄ왆 È“x \.' s! ˧$Áñ Æ+®U@-Éd¤RS Äôe°3uà^•JåêêêããsíÚµììlü œvŸØßX±¸>Áe)î}ÁH05;6ŒãL<’BüÁ‡ì’`À랊*=ŒÊ‹Õr0›ÒhÇ{èÚ…BAu¹…œ%ÐèA/xÐ"¤ÉÈKŽ•JÅÉtÂRW*ܶ<`Ôh4Â%KFö\ÒÆ”J%}OþPÒ¥†z"îZ­Ö`0˜Íf!ÖúVy†œŽ M„Kô\Ñd qùQqÀóK@Cy«.hsúRšâÊîèÂMêääÄþ<úêœãÀ•$îsâ»L¿F­VK;ÂE`2é À䕞ogÿqçÑGàa<è¯F€üFÅÅÅÀ7PLsÁÅv;×1­Qd»•‡8 q¶SNîijä…u b q”Òñë´;ð`‹‰ %ˆ¸›L&üKKå°f Ö#JÔprrâaÁ8\´t™Ã^èt:__ß=zx{{C}wqq!².“Éòóó³²²èâ‘ÜÖ Ù…û‰y«]X3­3­$Ò3ø”Á! ƒV«Å¡æ"/ÝA[Fx‚½GÃx‡–SÙ}¸­ƒÇ¹#¤Ú4LhvYi0ÅÂÿáå0°³5ìQ<$&]HÓ°q¥‡¸¾„§ ¢ŸÅbQÊ”²/dú÷ôž1žHzµÙl6'›!ÂàÞÛ]"•p ˆ%â)r8öd‚'&oi3t½] 'ˆÏ΃ì 2A“…q±ÐЏa,Bâ]N»í‚ޏŸ8€w¢#¼MϺåëÀ;¶q_7\Ðz½ž0¬¦ç¹!”›æ±YŽñPXnQÀë@p¸+ªXå·v°œ»ª8Àª¼“Á` á±ÐX9ÎZСâ GdÉq3W¥RÉ»I‚‚€ø" ‡?Š\ì–K®JÌ·Í ”³”Š,…Åb)Ž(6µ1¹~æj§X`ä<Ø£ä¢<5çI` C0‰ÐâàÜ’JnÇ+Ã+FB¥B¡  àÙP›@Ó‹áTž/‡@¹Àx¸CÂNŸ€Ý %wËá/ÉÚd £6”0„b— µìÂ@xÂ&"ýË…Ä’Biàêâ¾àfúá]¤ð·`é v€œ¨ršĥiãJJLŽól 'LI^^^nnn·oßÖh4$Ùð¸Q’ £ð""& µOÇŠg±Ùhe 5 ×Q â$ò\18™è{ ª?‰Y8éœPÛ„¨?ˆ\è×ÉÏ×±Ë|»yšO@ô¶ƒåTð ‚<Ô‚—1&úHœÂiàV…4 £¸U‡«_P}hy™îÊ"[lxrŒ]´´d¸”y}3(jÐ*àûá9@ؾ fòC¡%)Ÿ¼¸‘cooo™LFQ[‚•¼¤­D½;~ÃóÒ°¼ˆÌÄé ¹èõzÚJàåa`ZäQpÈœEÀXg™...ƒxVËþ4lîfGâ?DtœaÙ&Ë-_dîßå*oiNê ÷ûò¨W;¯'7zså ~&QRWžûÛHA¯22ëà4œ|Ó®s%ý¢”›^6iöhägåªOTŠ–®ͯ«ÚÊkiq¡Â#šËÎêMò;7ªV\ ˜Ês’yéLnaàeþ _çBš5N [ñbÀðšBå"eœ½‘dH^E‘W ¤[`Èâóåg äîwÁ*ã®ũ9W}îÎc¥xYkÎ!¸ÁU‹ÐƒÇ•Ù„‰fGs'G±.6½‹/!ÝaTœ»ðzHäù'e ‘#`ZBìÅqÀ¿…zP¹x¤,=ŒH SÜj«Ø9þò"¼TZéx-nOæÓÄ*Æ3g΀ð!ÙvhWp‘ ФlN7ÁJ©;’4q ÔV.[H¥Rggg2ÊQž¤ÂÓ¡H &ÂÍž0!"H„ç?𪵼=qeRý‰ VÙžøs# Xx¥m^[K‘‘æ'ðé«p¸¢&“(ÕéŠóG¿œjÁuÉ«Lþa ékqíæêäæÔ¦M›çŸþüùó{öì¹}û¶õ{«ñ=£ó¯ÎvêÍš5Ið×ét*ÊÕ///!%±£\( ¯ {7ñ¬0 LI .$yCO~ÂK•8®T«f}Ô~Ç‘Cøná\Àkä@ö¬qïæ‚vŽ 8WéÕ µ<@Y°ÌAnß@Ñ žÊm>}º¨¨ˆÜNTrÍÝÝÝÃã   //519Ž!çÿØ{×8ÉÎê¼÷­{UWwÏh.ÒiØH2™‹AÈ6æÄÆ_rœÄרàÄŽ“8'&¶“ø›_.NlŽã8ö!Æ—8àØ‰q Ä9 Fè6ÒˆfFÓ=Ý]U]·½÷ù°ºÿóï·ô;Ó|èþ ß¨/U»ö~ßw­õ¬g=ßÌh¾ní¤”î½÷ÞG}4b•©ÞÈv»ÝÕÕÕ¼àkkk÷Þ{oæ_‘ÇB´q@ÇÌ< ÍI£vtÍJ ŒK¸ÚˆQY«Î7›Íxâ±ÍMm˜ÍfƒÁ ßïc攑G\¾{pÐ<ØpÿÊÚ«!gŸv€ö4Iû­íÉ›'—üò»ßýî»ï¾ûâÅ‹O>ùdQãŸ÷^Ù+Ò)ªx–O=õÔ`0 óÍÊó .XÐîÎqÇ@ÊFçÜð”÷ªy\†³4ÈšÉÐѵEM¦ÃhèÀ¯Lqc],5#éŒÈ°ñâ’b{£©N5f=fôiœÛ’ð}´™3ª±k>Sxoºé¦£G^ºt iN£|t² 25F%)¹õc²6 T.Ôì-í¶D|ë7£‚“Ê)22‡o~jîrü-Cþ؈qñü~’g3K(SHc=„ÊÑÊÊÊ¡C‡¢È(/žBŒ7Æ/GcŸÓ¹×ëî44ÏW¦µfäѬŸýf&ßDØà,ãb°÷àD‹“Ýv2Ê”|¿(ŠÀ@EØ6?øàƒ™'Y—á5Äæ¤€oS…G·ÌaÞsiîÄÒ‘šX¶Õ#w¦r˜"Ut‰Hƒâ+¢&p_’u—A¼ƒ*gŸã Ǩw"Asجÿn=½7mÿ£íÉM“²*Ûïl7®™N¥¢¶£cáÉJ懃;ÐívMX2y1íÚ0΀NX¦6ÄÁm ðÄʦßg(ò9$_x÷®¬¬„Œà’ Í™4} ìCcÍâ"YýŽ €i d¬Ì!r€R09s (Œš†aO„‡­Çì¡6sÚ58yøá‡ÝÛ§mîvé!;œ‹ÓrÓºéêtõd2  ~x½Ã7|í·Þz×]w=ôÐCY«ŒLáKøØ¬=>ßáñ'4H’T/íÆ´ˆ'›tg/>Ö6L"ß.!+IûûÌÍd²:‹6¸\¡I@.L­ƒÅ«¥Ý‘Ûƒ¹œ¯ˆ^[=&×@v¾¹6ï ;î³~gK×÷ÌǸak Ó*Öëtjf*Z¬È8Vðadé°æŒ~ qjo õi¯xÁh4‚çê>–3Jý˜$êÚ&›Ç#"$pÔRe:T¦;GådGµ8Yp0_(@Ÿ&‘zЖ‘F¤ÌàãA0aÌÐ?ø¤!ãXÒ?þ—'%²x²ŒÂ`åM3ã}ý@jÔÁÒÂã’Ù£´ ÓíÐ+F8eœ+i† ÿ‡:~üxH©FŠé³[;‡>~üx¿ßÿüßøü5ᆭÿ?û‘ L§Ó¯úk_5ø«ƒÇ¾á±þô†'Nœ;w.Ì“ÉäÏþìσÁ¾ð…‹/Rœ-êý°âÊ)ìì@)—Wšs;k1 öOâHm‘äïÔãœN¡ÜxóøvvÙN²P"\M/½Z\Ñz¨9øèdI“¼ÁDͨ.!gB'še¡ã+öƒUØ¢¦Ïº'ï:ÝbïÙ b&´e¡u˜¯žìá-\õ{ÚËXÕØÒîü) Ã1§P“â¹á‘y{ÐA1B•±¢ ËX×–PdææM*¾¥@¦Â'E<&4°“&6 ±<*gÃ8ÔšffWUuøðáÕÕÕË—/ï—ÁAÈÙÃÄ ¿ººº²²­fó=cæxöž×³¾‹•½‹\žO9ÕB™ÜCH€x††7'c•ææ‘è¹µhë*£7ã·®³Ã­m|øºë®óÈùAÈÙŸxgŸùX: Øå0ÉAË……å É÷“¬Æ¬áŸ$k–½?El*vB ê‹²¡¶'`-úè!œdL³ì´2÷ßíýÌ[>3K{uû-1ç’ˆãÉA—ÙuK4ÒâGï3úuf/í)Š€Gœç‚#1„hj™å¥3ÌGóxSŸ&ñBANEé¹w4¨ï¡‹ýX_‹F]Ú+xê d@LÔ²Q¸ðp­’é[‡ô "âHÄGXZZ‚[Q¬¿Ó霧ª¶é¤oäQM,†"ˆšÑOÅñkbÙ FÑ’zæ8,NzZf‚âéüùó[[[£Ñh¿FsBNò³Gf˜Õ<ŸÏ#êðøi‡ ?‘‘gl£ëQ w ÂÊwÇ›sÙƒý~…D’ž?V=EVð´sÏøŸ"3Y`WƒÑ4ÊØDœî“¡ÆÈñ‹¢4J¸½™9¦ý1³´‘Ó|ÊpjE£òªæ«ÞY{ç[Ó[o?^ÅꃫÇÞuìO~êOª‡ªcï<Öôz½ÞöÑíÖ¸ÕÚnÇã^¯–x(qý‘æQ,ÀLjZ°¡?ÖpÜplOãÄwÙJØF± 8+n Š' u¢§ë…j»w{àF6×hÄüO£±k`ý˜M»Æ¯•¤™ÜÌÀ想Ÿ÷Š}j§½j`ŸàÖ«wBa‘c%žksSÔ$Z«°µ÷iî!ÓÌsÁ³¢†’3?•$¥5Ød0s¨ÌŠz®Ê‚o6>`@TÎÓ×q‰â¾üUVÏ€Gœ&sç1ÍÝÈD)|o¶·9î0—B%:J:+¥jUU³œ•×”E³hÔe½,_RŸ)šŸ¸Â°XZZBɘ¶±UXÌÍßa1Iv,N¨n·k¾ X%òqa=ÙívƒÎS64êÇdŽ):Wa”ˆy±;:tõÕWß|óÍ¿|Ë/¿göž#å‘ÜùÇß=þîWV¯œL&o~î›Ë¯)¿îŸ}Ýý·Ü?¸mPG}sssóÕ›íSíæ£ÍíÙvô‡VVV.^¼˜eKžÏÚ9!+˜ÙA"È4á–*Üf™H«ï’Ù1XHxê%íUDÍt2♸¨Ë ³®}ý™h›Ëe‚({Ö9bÆÞN{mBξkd%‘ؤéCßn·Ûï÷×ÖÖ23+÷`üÈ;ÊáÁýF#˦Zz­DÆÐ¨ã_ëÙêTÊé°Y˜dÖ'ÍðhOY;^O`;eÐãî,5ÃÇkú#°¥½Jˆv‡‹²‰l`ÜÉthO»FsÔ‚‡îv»kkkQ™9 ‰Ä ÖÉ'i£ù™fúDªÕjVcö—gó—Ìg³YãS ê!°€ˆsôíÉd hVie·ÝÊÙDYúÞeYƒápè‰cdœ7X¡Ž[Á5cÙ—~¿?ÐçÑÇ?ç9ϹÿkïÿþN‡ï¬ßy¨<ô5å×Ôêµ~¿ÿÆÙßòMoyìºÇžýGÏ~ð¬MýÜ›ÎuÏv{Ø œx.Q-Åî • —¶°<|’Bú·œZ&XàÎ#´'Ým5 c;*‰l¢.®Ó`[Õ < pj©¯p¶€G|(V`ØC òàN’ Ú`û¨'}rRVUXðÑsq¢A…,<ò®žÂó9‹ß ˜o’¢gAd‘,ÙŒå²h‰(º› !ö äô?•ß7MËbÚ¸Èü‰‡\ÌÓ L5q©P`…jÀÞ8®8hpc8ÜwXßt5Ž­ U/¤8m¹$¶"á¶ßï¿üå/ï÷ûŸüä'¡çÒ~0–XtŠÚ_¨u~§S»¿Öè5f³Y=Õ›ïmοžž“šw7‹iÁyÁ\G!G¬’x±¦5ƘË"õΫÔî®ÎÃÛê¹¥¸nä´àD Câïꫯ¾öÚk!§-//÷ûý«®ºêYÏzÖ 7Üp÷õw¿"½¢VÔÎÔÎôê½£ÕÑh̼¨ñ¢­“[o.ßü–_|Ëúòúö7oÿèïÿèìÒlþÕóF£1 Âß%ØHËÂzÜ¥?L´‘<@õ@Izü‚XWñR–gzKqv¬±Mì¦ Î °É4"Ak Ê>Ãsr¸Ù˜‡ZÊ>óóåÎ×£÷Cý‡!oÌZØVjOÚƒs%ÇÏ•A9#EIfdҊȤ˳.·G ck™@ñŽ‘Ý~C±Ù"ùâÄÉõd:éÄêç´%B ‘À‡åð͈4f‹%)&ð\2ºôq9ïµn8úœñA<5™ä¢,)‹‚ ùl!ä8â4±pµFãˆx’.<þøãív{4q–&ãSL¿wÚø|£þÅzY•1Ò{goô¶Qýžzíþš“_ë™3ùIfQs0ßÑ|éóÛOŒ@'fP¼ˆ‹×d˜†‘RŽ­V«Õëõ `Ä+,--u»Ýøéêêj³Ùró—oþäÇ>yçÖ_|¼º½j>ÙœL&Ãáp04›ÍápØëõƒÁ¹sç._¾Œ“[|®cÇŽEqñâEC–S³—[Ï©ÊRñ,°×cIXªÙ¬b`(O.ÛR÷e¥¹ • Òï‘f¦éÞ) ¨@ë°@˜Ñ‡¦³ÿ“ ·‡¡}Zwü äì?UšUH£›ÚÂeµÛ?þ¸â„Íe’%´ñe+ØÇI#ÛÛÛ[[[`q p¸Ó¶I»cá‘φG *Ðü=ƒx0å|LÖÛ ©†FŒ•ip¡¶bgÆLÿßô6OáÀ Åb33—a‡šC¨>1šÏçnxJ<{n±† ´àņóΉШ×R-ÀåË—Q_žÏç©Jób^Ÿ_i$xŽÕ+$®Ê~H¦͘nS}ž<%Û@æÇ.PÙà®-XsrÊÇɾÍLøÊÄ)…øæææÆÆÆË›/Çuïø{Í¿÷¼âyïl¼ót:ý¬ú³jµÚÒ®þüÕ§<õÐsš?9Ÿ<2Y­£ h¼:¤Ö-[í(* ‹ÃÚØ¢ I¡‡½Ìžˆéç¢(Bâúܹs´véœvmÜ\û:Ô¥½ÆêNªhO&xØõw1aQEqgb¯e¦Θ)¤k_)ô '9+ŒdÓg´ñœ@{M&Nšâ¶0¨ ^¿/ÛÒ3ò-ívû…/|áÞð†Ï}îsùÈGÂÛ*p ªÄTDD#+’²¹ÖÎ&ÿ¯7Îï‚i.^(‹Ø®Ñ­xÓg™‡ .Z0Ÿˆ˜ù†Ñ‡0!Íe¢çã²2޽md#¨É²ÿ·6Ì•Yñ *ôûýö··þï­âsEõ…Ê;yöƒ³Æ§õGvÎ8 ÷Q`9S¦ÄYÇüЙ3gž|òÉ­­-/Žfcž@D;xÉgfTSs§Ý‰éˆO<ñÄç?ÿùŸ\ùÉ×ßúú—¶^ú£µýûKÿµ7¦”^ù¥W.=¾ôŽ7½ãè}G¿ê_5-§Ù`?7„ʃr6¥tùòe†¨‚´mÉÊh'ñà¢a]"b@#ìʼn#‡%Š¥QmdΊW‹µÊ¸ÝÇ!Ù[B^ºúæÍf®í‘Ä‚ ëÖ´%7 8z‘òwröó‹¥à^bFXôL™¹+<m›Ì:žÁš8‰¨y-…—´µµõÀœ={¬ ³ êLÓž„:"JÀ2ÇüñÇ×××$x¾+9k~PçyHÖƒ®Ö_¿2~H3ŒŸ²eóé—}ú?ñ‚v­=žŽÑ£#ðÛ(ãA Ñ:Ï€á’ÙÙ1Øä%äë4w9x}ÑÞõùòå­­­xÓXQщ›ŒE, ïeŠHç=–·ß‘2àJê9ž>HrZ|v'Æ 6”$¸HËM-*Í„œ}ûr.âÁTGÇØ¥Ù@OÖTLò‡&¤1äa&‰KïÙlvêÔ©'žxb4Å)€!ÚÉàf–3±ªGtƒo½õÖç?ÿùï}ï{ï¾ûnã9ÆYîîÐ&ùÆ›@?<wrö¹c9NKñÇOc0z%Ž^¾ÄKÕâóÆ~ˆÄ_Hrûˆ#çsŽP! ¤idQH˜laÔøÙÏ~ö®»î U`Ø\ahèÜ?Û-î ÐER¦ÓéÄX½Ø +++'Ož|ê©§._¾luíøPX–AËvè]3«7ëUYOå¤ ª­Ãˆå\E’UmàXÍ[”Ë‘†#ízÛØÔ„¯øf¯×›ÏçÕ¥ªq{£VÖjµZÑ*'-L,´h&(œÉÌ}v"«Ëý•@f詘­eA4Ãbñ›<˜Ù™eµ’î*!2hii©ÙlF3)îX+ƒÁ J«Õ:sæÌúúú¹sç‚ôÌ¡[ÔƒUë÷ûN'x0ÇH –‰ˆE5cüÊ|29 0@‚¬r¥ÌeH#íú Aß'9¢H²–(‹Ü΄¦ƒ’ËÆ*ÊüË)²í矚É$3í ±c`#¾od2“k:9ûO•æaû0¢K%fÐgìj–£|1—çò)v2E8ƒ3j,w_¢ þ`skÎ5Óbxm6›*’ue€ï3-Œ’¬w`8ÆÞÈfæc(„ƒÃ":ÓçNç'çÅ_/R-•UÙú`«vªV~ªLòð݈Ä’ìi¯6¥‡LÙZq|1Þé¤ýiâÓEªa fƒ$i¯éµQ¨%”,¸æðŽ€]øéEÆÀùèSÒ£N¤üñ1cè2Ê·ë8¹{Ùd‰k ˆÄW÷<»hÑfg {#Ä\çl6‹p‚ejä×~vá“=µZm0Dñ·˜ÅÑòf ¤½µ6ø`®FhœËÜÊ9n›mçïyÏk6›í/¶Ó½iòW&­Ãå‚“ÐŒ–ãR5ŠžCŽIî½›‹£•îB,n5´…ét:OŸ>ýä“OšàçBÆü"ˆ¼þi]Š£vŒs\Ö3ç7ü¾À÷œ‰‹å-šÚÅ_ÅÍŠÿENRøÁ`0=^__GZ¿^¯FßaÌ+ðƒè÷8~À¾ñ¬˜ùž—ŠHæ[—Í]ŒyméãÚ@°ƒM„`/ûuËDb§9»‘ËqžK”,DJ‚%ê×hÙ¹p:ÌÌÎBÙE–l·û¬1yPåìÃ(SZpÈŒ¢AÏ";£ŽFºŸïÜ™alÊŠ¹Ñ~ ˆ[PQ£×JåŸöL·<_(¸&°¯@Æ€¡ëãÒ´Or\7‘Ô4¼Ñh” åBÊÚ9AÊYÕ¬³Æá£‡_ÿú×ßvÛmwÝu×ÛÞö¶³gÏÖŠZm©FWƒ1@Ò:LÏ£<]˜á04TøT àÖÿú0S<íóæbÔ.œ}™4Êyq6ˆJ§-::FÕ &Ň¥ŸYB”­(O“lñ½J±BxâÐö-dÊÒK¤Gú²¾¾:ö3­ª*ÆÑhôè£nllĺ¡Ý+^6¢­­­«t ªG8‰ûÀÀrŒ÷fŠ5?»2ö#ÁÏóCYä¬"íU«³úkÏÍÖÛw{ÜN¦–%ÎZÜ%³Ùìú믅f ¼ápxéÒ¥‡à›Íšm+++óùüâÅ‹AÚvÏ_Nº5$I~”ñîe^Hàã¼ÊZM!gB‰R6¹é/™È«*‰¬=ã¼#Æ¿íóaùƒ$£­¸ä24Ì©×òÙPHæ9íY³ltŽމ@¤¢¼LŽfÐ*O¼ÒŽÚéW=Þ¨}¡6yídíýkïyÏ{î¼óÎóçÏ_ºt©ñÜÆôYÓö¿kw»]æL9v tp«ÓîTìööv êÜO¬<­Ÿd‹éx§Xœ§ÙT¦ìh¤ ` ‹5ÄBð-KG’¦€3E”,„ø;fL±1æTuõÛ*ŽotEj2Rjšñx¼±±±ººŠk.œÑԉʌ'H–lñ—/_ÞØØ c€¡9ϨrÖÃ]öHàA N†Ò®Æ²ó3ò BQ4ó3ŠJ¸@ìŒzËnrdî§‚ íʃæô7Ï3ILñ§¤ç´×;iìˆÅÒÔŽÙ¶ü89ûöGy³Ù E&ŽûÌÝ–' ‘ÚŸcxRÚøåÅ^‚‰Î,/w/¬Öë5úükx»«¸¼¬ñkj2fqL-øPƒwD8ñvÊÔÆ8’`¦Á/ö-§FÚ+€d:Ö¦µÚ—kå³ÊÙ ³›ÏçÕõUùÌ2m§òËåý'ÀOŒò{ªÜ†o…Ãhð’<(GÔ^”öy¬$ÅnŠÄk¼ž ßÙv/^ °ã䋉…€I†º@›f4lj™iÄ êÈhãCQ±¼X<XwYTãfræÒ]÷}˜N§çÏŸŸN§+++XìÄýÇXÃÑX"_ét:±B8Îü{—à±}.cñ0 ?·|´xR‚fÿ“¸d&U~Ôå¼q+˜ív»AÏýŽD©GJÇuFÍgP׎Ô!ÈçB€Çy Å4*´ìŽŒëÏíŠÄâ äì‰ãÆi†§EÉï}~™¯ÌëÔëõ¥¥%s9°²ÑˤIæ¤ÙCjÜtÒ®Ø ¾x¼àœ8/:`F«ÆNqìLoB–uÄãìæÐ|†-JJËæ·ø‚5 «Õj÷vfß7›þ´ü“²Qk¤”ÊW—奲õµªz³ÄE«q“2ÛÏzÏ´p %òùùÚÁ7ÃÙ½½)×L‹°¬'P'‚Sâ¸Ë¼äuOÝB|Ï ˆI‘7  ‹í7R›ÜsÖ›3 ;VPúÄ2Ž:ÌÉ\s·¬'“ÉÚÚÚ`0X]]ÖN,ÚåååN§3I½ã-:Nÿ ƒË—/ÖŠ‚ŽÉ܈…S°² \‹{!Œª.аõõu[ :ËŒÿíÀ„WÉ+cFÉ„sªCë(ZlÐ!€5"¥iÐÙ3jBéf ƒ¹C¯ü×ÜWC£û8zrö|Eb<ÉFF,í ùÚple^:ÛOÛóˆ-ò\迃þÄ #§3bk|Ÿïà–hî¬Ó[³¿@–Ó^XÇgGÞÍóFĪ8CM §n 1úUUÕøîïu§?1-E£Ñèþ‹níB-µ÷È·˜Å5MT“ èƒ)Ùd«Õq,߇¬]ïâ¬`Œ´”òÂw2ÉÌ‚%dæºc!Hoy(–T1“5ù² KÚNjìi>c”n(–Æó5Ø IDAT ë vQb¡k‹A$ÍχIn¿ß'OQrEÄ“Á`°¹¹'¾éUñXÍO³ò,ç2’ î2R‰Ú?Ê~F"{ „&+!‡¢9NÄ.=o+sJ).#ÊšTbh汜'eƒ\®mÌr»È4Ž ˆT LðØ2Œµýÿ‚ÜBáiœº„“+ÉРï¶@€Õé©£±TòÑßÏJ¢$ë,zÑu€_@õã9Œø5$RâÚ0w€I àVè¢7À&gÃ/Ú³3†’¡Ž&A5úoìI¨Eô»c le°‹]ŠDY' |‚S6 ƒ‡ŠUà89Â’ÆöGóÙÂYÔÇdʈe8˜µ5“ì‡9CmTŠÄ$˜(P\˜§ýÓ^C0³ìòI£(¸ÈRgd5c¹×èú5ŸñáXrŽEñæ©§žânãŽAfàÇ|ë–¢2î±Ó¨œ¥… —\|äXHô±ÐôÌÚ“Žj~Ž`×àŠÜð¸æ´×÷ÚƒDqâÚÖÍ„µì¾ãyX[~°–¸‡®’c!šÅëL§Ó³gÏöû}sµ÷÷ë äìaÖS¤]ÛvRxÎzĉ]•Óµ³^l&<d *w_¬|Nð3¡™RÆzn™6CøÆ¾Éþ"¨¸ç–yRϸFkXÿ?öùþ@ª'ΈˆO;ƒ fšÌ1År¹IúÄÈìçl¹ËÄ“¢š‰À&w2ð´$2 3㙜þä­¤Æ)’,b9eÌ ‹75m)îÂ3t•aÄfJó—躙ý‰3šú S‘!U'ðýϬùÄ?Æf=GÅð…2 ¶';:‡dTqñY1DÚçáWºiW-ü Ú´Í¢çÔ‡2% B¸ ™‚»›µFJÉ·ââ™.ZüøÜp`áŒo1†+ 9 |Û"ðß}÷ÝFc{{ª¤1Õƒ³Ÿ…N6ˆàAÎ =[d6¨M»ƒÄdÄÙ˜^FpËf*"IGÇCq0a@ É Ñu ´]WWt4œ)5L㡼`KøL¯³ýA—³O2¶¥‰µ^Ðe±)uô„Aêøe®ÇìJ0OtbrHêºøázÐ=Sò¯ûgY9E^,Uoì‰ ½…|ºývºCú“çÎøºHY»Î5û‹° ‰ß&‡­y+I–†À>ö³€%qßZ™46(ø¢štAC¢c§g¸ò±H U‚bÙ£Ö,[z€ßcÝlXú\'ž‘[ïz#®.¾ Ïvš7*NMï9ŠÅ‰ë)x½ñP˜`å}±]Í¡€Ó OëP|rö!äo‰Ü6*s–â=Å‹»×ëÙq=Ó'&95øàcš÷òzâä…!Š`—õµ¨¨ü¦ì KyºŽ1!'þ9#½lòøÈ4´aWglæé¹ÈFV-^¥alB˜¥¥¥µ¡£›é›³ µ…,‘ü ðÁ®0ö¡ÁêÑ£õp5ILyàŸ†zFÑîõzüâY ï¸!¢¬¹9¢@RϦU. od&­v·4Ó/êQ«¤Ø ÝϦt¼æ¶²<„ÿÂN!W³ç æà™ÜpH1.e¼˜Ý+¥[èäf$…BÄl> ©Óð YêÎBª½_&=­×}ßÜ6RIn>ÜýLÔn«Kx?º|·5ÑAÈÙg`ÍF{Q¥fÃÌÙÌù縻ʬ?`"ö wätpdìGoÖ"Ô7±­ÃÁõ7g ’ pʯn·›‰ÖØe Æ•Mc'xÛZbò.:üYsý.ÆH™c«  ÷™¹-À>a®L1÷'º ÔI6âÝiã[@…G-l-Ó&‰A'Ƶ…OLì{vŠE° ç+3Fe(ãÐG±q*Ä*[†sa x&CæÄ‡ šó'(OG)c¾ë§"‚¹‘ΔOÆ·dþ4âpCÄÝ1ân°ê<•/Øn·gWÍjýÚèWFi9UUÕýÕnº'µo¹õiD„¥èhöz½$a'¸|>ÄÉ0L‰EKn„H¹O ŠˆîñY]ˆàm^mQºAe‚n ‘š,.ØRŒ1d2!çõ—Ó+W²ŒÀÁw²¤>ü¯2GC·±ÐgM¸ñ‹_à³±>,VïV°=Ä\…-j@Y׌½Óî8¡·=í%÷öéXò‚ôH¸µC¬;YóÆ¢^þʺ5\-xK„ÛXœÎh%ðgeËÕ‡¯ ë`SÓé4*o7{ܲŽ|FYæcûjgKî?Áyq¿'Ò¸…„Òxd*»~ͬ7 w3mKªŒqšÑ(§&×L&ß7™^7í~w·5mUU5þÉqu[Uþ~Ù¸³¾-•.d„$­)×ñ!€Š6{-Sø>vìØt:][[Ö‚Æ›ÇàÜ¡1(giQ{.XGÑ¡%J|ûÈ™úo&B”ÀÚþ3Ö¨©3\€ˆV“½<9º‘îj˜ÚOöÇÔKÒŒ§mÜÌ”s>èÎ3mdKvbc¹3íÕŒ" ¤{ ¦çµK4"]Ùs¨£iÌ.âXád$/v·†ë±·k{¼<ÐÂÅИ¡½=ÅbYbl¨öp½è^7ºvQÃá8ÉÒÑ<¨L-}B Ó£!YM†dö³¿âä3ózÀ2•T×nLÙs7;c– ¨rÜ ¢V°P°G9ث…šÌX±8úøÁ™É9}Á´Ü.—|y>Ÿ×ÚµV«UûÕÚüÙóñÏŽ;Ÿë zç¡lÇf×…ñBv:€GƒTãñ¸Û톬-?ÜÂîD M7vÀÊxöàc^ÀpDÝ•ä0ñEFNéš„œý™Ë±¤‡™Þi¤‡z@&Üì_æ´…%‰«›éXHãdªãIû,>BÓX)çí¨½ÈoŽ‘þ£ËÆYÄÐèçCŠÃb‘jœIÊÓûI{5ói#sR€Ä©MlâËz­&þšûƒÈ5,)3Θ,¡ñ`<ÝÌ]¸­YfÄ5gVT0.P˜ð üXX%Þ%†%íJÌ–5©š`à™A²> ³3"lØr4ƒYQ4‹Ò|<Ï›tnl:ˆ(R£—‹j8šOlYL"ºg•h¡¨¬”AÓ.óç-˲:^Í¿qÞýån”&ˆJÌ7?Ó,þJQ{WÍžn|¶ÌX òx€µ*¼OC;#Óù6BàâÌD»˜¨ÝÚÚ¢šöš7¢—òä ‘DZF¥nùsWZ!g?ã ‡‘5ƒ™°«Rl¤PUÂjÞ‰³¡¡Øc–ð<+M\@˜,±N;+ä)ŽÌ˜À玙šô 2 Ä^¯éq‹.B„4Zô>I3….޲N¢Hګ챟{é´L]‘dÔ¦±QAœIR±#o5óÍc}™úgüä²e½–Я¤'ß4e‘ lFƒSìÀå¥pu™DƒÎÐAÚ¬í‡HÈ 7Ð)ŸÉ#¦!øSÛec¶‡zík_{íµ×~øÃ¾ÿþûí•n_€èhrD¶mHGV¯qfŸ¶Ní¢8R¤3)uÒ‘#GªªÚØØh4íy»Ü*«k+#ÛKKKøåØû.³GMfö,GÏKX¢&=J!ã>pdl*˜­ü¬HŠ»dpú%¾Œ7Å×x<öÓ?9û¬Àƒ©X aH/Ú ‹¹¬ßëŒÌü"F¬­e¶IÛ y†w àÓ³ÍdÍ2Ÿ,³(çã íõz±E½²Ý8Í /¾e–ïà6¦]cLsk$¶þ|X}œ†ÁYˆÓ0Nü¤!vßÿøÈ0=ÚÉGêe®-Ÿ=ílH°ø † †q b,võZô=Išrx“ö*[›O3Ó ¥o—éûY">oœ§0â0åM%bÖBqÉÔ*XS€Ež¯äæX¡ÃµZÀS »ø•eBTÛYW€²FŒ0–Çξ+ ŸæÈù°UãÐÇÇg# ¸u †gd÷Oî'»ÆÏ(Œ<¬„ä:ÕE$µÈ‹E¶ª·]·ýÜBÎ>3À:8b8e8œÙ%*Û.¶(}¥]±5’hã³™z «+¢`’œE½ô˲ ¼ŽÃÔý³ò˜Ëc²¤Ýn_{íµUU]¸p!ê6"™Í}ñóp²Ih± .Aˆ‹w+IÄ´ âëÏB‹¿ *QVâpFd „Á«ì¤ðÓ ù8j8Ëtf÷œhŠ’&I±Ç0Ѹb´ þ@ƒá^Šs£3XÏgÐ*·î_d?HéûœY™n“a[|™33›¬(OÈ’„ ƒ}èC­VkssNX–»)™é€“žÉd.íh‘I²^a`^®Õ>W›¾zÚ½£»¹¹y¥?zM½x^ÑyOÇ÷ÁžuîÃaÚÆ)ßY åb;ÀFˆÅFMãbÔœ…a—ëñ8ý5×À|"}à7æ×,n™ƒ³?ñÆ»‹ó£$0›[œ‘4<–]äƒÆÓXg–Å÷“3k³Ž^B’à&‘ÉX„1,³¢–â ˆ;ôÏ2ç#± V´É Q¿Ó´"²­Ã"4¢˜ÍÇ1ÖŽˆºyzð §“w›Êeî€o¦ž‰î ‹Àç‰ñ Û±dñ82lÊ$‹b›“«Ò<Çq ­ùH3!VÐ#%IçdqµÍ»0fàÞ2_™[¦ÃMÆmd/K¿<ô³M›H²PŠ„:ð®N§ÃoBŒ×\[[³z&^¦¨O¯Ñ/ŸD–ùKeÎî±àg³YwÜ­=V›¾pš>˜öLFNÅ3‹ÆŸ7æåœ§9ïÛh4¢¥j<#-8ú›Bi¯P!°õ £ÉÞÝ]^ìÕaùÁe*J<|%JÒ_A¤5ÓI1ø³i`̇b e‚#0=Í7~Qµ1™Õœ]J Rã€#8§°¿õòõhd[!ž¼Ò´+ˆ‚»ß‘³Øæ ty `–ˆ+hã3•o·R AÚÍXCžœϱ?£©Þ,½cfè¡vS%åœN§£ÑÈy%"7pb†ÃR7”ˆˆP¼Ækò·AÆj‰?¤öu*ŸÅgȹìIÇ(î¨ÝnCý0Ø2œ‘¾ÜÎŒ…ÃÀBJ‰³Q3‹<†K¸ÚŠ`ªð}A~@ù2Ò°Û3aAMJn7XJ@Ð$6iÜNÑó¾Öô‡¦ÃÛÿ°†©¨Ó¿3­úUÿ‡ú™®Õ©©ÞPa CŠ®}P“ìǬRÌT; Ø6# ïŒ]»8'H‹É2­•g© Ì¹Hâ$?9ûù½Õ|0*tšç¶Oå§ÓC—4ܺ˖ ͤY2qh‰L¡„­kvTcC=¬àl–‚­žv%¥‘ s÷›q<³¡ÈÄÝ„pø$-ó7«ôm5žÎ¥½Jõ´FÝYVÒÉZ¦&² YãÄî ¤i×'hšO£Ñ(:^$×™Rà«Áw ÄÌÎe+ñ@CV5bv&³Ÿä4±½½Í5Ï_;¯®©æõyúLj|©‘qëÌ]ô¸» &^é÷ ‘öbfʶ&õ1ÙÃ5£1’«ñ‡Øáðʈ¼Þ™ú”תõxv´>ßÞéývoøÏ‡ÕRU«Õ–þõRúbšsÚÙ„bMs·¬œajºknøgµˆÅñ#bdÄ­Lƒ~žG—Œ°y 6í•däÛò.žlÀÙëAÈÙ`-Ã÷9Mì1eÔ‹µ˜)/™6C±âž6É‹sà„«»fåty!ë$àÖ½5§#ˆz8_¸ªÁua›2y¸ÊMÔF´q±xA¦%Å/XTÆØ£ÿfì™ÈÓ#WðUÙïÄ>î-v㙤¿“öÎçZÐ,€ÄøDøÊ$ÍÛfdnòtZÊ#÷qiƒK¯±ªªÊ—”ã¿6n>Þ¬U™Êò»ÊéÑiÿgúi¾Gä‰Ö gmz¤Éª²½ÅL&I@ya CsAMŽYi¸‘ý8Ób§„.FÖ154ärÇÞ¼Á-ñ·ô³Kt³jf±ÝL£!~-P@VÓ1¡áÁ´w¢†… žØ…V`NšÇ±­¶•éóFí•!fÒ`'ëlq{rö“$p )z*Èæ{`Åá!IÀq±g3P)h©®ÐÝÛ0ÔnRO)[Ƙ@&/M«ÓãúH#>í)}ú7‹ð4°B$¹hÀX“ÛžZIò…öα1 FŽiö ü“)’ü­„´Z­heå,~3¦M“CиâÝmØ… ÙÿOoÉBœ@%¡ Ô ?;gk™>߬×ëåuåüûç˰\ÜW¤­”Rš?c^;VÛþõíÞßìA肘9¢fª<3[‘šåa5UKQîáÁ1úŽi³Ù\ZZ¢9‰ùôþøžÑÒcDÁMé™öJ±Ù];Ú Àà¹b* íu¿µ)ŽÍØ ‘ü!‡Ã“²]S¼‚‰Ô@60H3ÔFcc³Ûå¹Àø&tQzVÚÒãI²ë!gß9!ÅáIúÀLÀhîsX_ÏÐ*yD¨ªøøA±&~'Î&Á[ªË7YÒÇfÀkê¨*Úòô·„ŸÏçEUÔ¿¶>~ÕxûÛ¶«ªjœj,¿m¹x¤hl4ÌíÎ*›$­Ü¬Õ;!a@öm|3Àz|<-Úg}Œp¢$ligrÛ8¯y‚I ”SF"›îõz”Œsf#´žâSPpsb=9räÆo¼|ùòéÓ§‡Ãa\êh4·‚áV{i»åËÿ9§šÍfqSQ»\küF5¯ªZUUUç|§z²tåɲ}®m↹RdVÆs›ѢângÎ:ô8ù&„¾Ié‰ ¦ÄáJñ¬ƒ㥕d±Ê3MÑ“ÑÙ.vC+³ ¢-I'„V0ƈ=ˆ½“ýëÀ0؀Π­@“ö6fÎw&ô`°=íUŠ2 KK@@°db”MÈîïa{r®„è²~?;ÒF_ãã@™cíÌâ2?7X¾myžvüËÃÜ/¥Ôúg­ñÏŒ[·E²ìœ:ÉÍ!³WðÇÌàM¿Ž5üY?ðh2de±SqeѲV3xÇÕØt:]ZZòβætD2Úà”Y¦z² æÁõGýÞ¤YËL@›°ÎQåÉy ‚dsKiÁ6BcÎ&§=’`§¿$ °£ßÆéD½È¼QÌ9Y=9û¯^;0›¼ÛG˜Gâ´^“ĬٞY)[ÔË‹  ÉB åÓ^·€Ñ• gÀàzÂ%‹0ú‰Ññ¿|¼ÕjÕšµz½Þýr·ùÓÍõ__o]×j>Ú¤Cn [OsíHiíFµµµeSÊ/ÜØÀý:JBhôòûÙÞŽÞÅ":lå± ´é¥¥%ûŽ AKƒSÕ†(î3eŠ>(=zô¥/}é _øÂ#GŽÜu×]_úÒ—l²@íia=`Õh?$y-ÛWf6›UiçŒîõzÄêõzª%°J:ü˜wYy ¼…µj™H`¢ÙlÏ)ÒE (ÉzSà+H™$‡Œù“gb( ˆë)ÑTok;Á\0¤é¦ oç•쎔9o—2s ^B´Úé!Y(5°larOIû¡“JàÌ”·ÜZët:qìDUm[æÝŽzrö3ذ¬³ê> ”'Nœ;wn{{»V«•U9ŸÏçÿç|ò“”Rëý­ÞÿÓ«ŠÊP´Ü]Ó°.ÉDÌžrQB€ 4 ZwV,žOƒ÷rŸ6˜T.\ˆÌÌè.Œþáhù—–kµÚ‘#GŽ92 ÖÖÖŠ¢XùÅ•­ŸÛ:öcÇœg.È4™<ÑFX…çõ¬—ãZÄRÁæ ªé´‘ ZÒŠ“]º³RTEõ7«é÷OçõyóSÍöϵkUÉ'4ß8Œœƒóz½žB/•ù|~ùòå{î¹çرc§NzôÑG···3Ñ<ì°趺D<À“8š'“ ReYVe5›Ïšæp8´ÀL£Ñ˜Wss+<}lÔ×,Arj³'uɯ3o1÷)3kÆîê5FhÒ5 þ}ø!¹HÂÐ2H1‰ì]ó9ýYâ'³õKˆüf6›Å¦ ¸2.¤â‘,…"ëÀÌÔiwwv?€¨€¹ÎúþÙ²l©ÓéšëßÜܤÙfo²Ò§­/BÎþkæ#Ú›$œõØÀã׌ç?=oýj«ûên­V+¾µØ¸}£÷k½Æmܧ-A{t7g|IbæäDlç,îd¸HgàܵN¼iü7w’»“eûƒí'N|çw~ç+^ñŠGyä·~ë·Î;—ΤâdaJ’‘±Åa#}Þ="œ=T⼈n8ºÇ˹í® 0Td±+œz˲,_YŽ~aÔý½îê7®E1yÙdøáaë7[íwµÓx\ù ÆB~”i5Á—cAÆCŒ.”}У3ÿ5Ÿ):gfW„œý$IsR“ YÊìâÅ‹¬õÙÏÌ–o[.Ë2ÕRY–Å-zïîmr{é— B…2 #iFr½ýL³¦‡io“ ¼¾mMŒgëÜ ê×fF,CGŽ9|øðêêê•Öeª2¾µUj˜v„*cÖMœ& OXïÄ Å• Šî¼E½6ý‘Ù·ÖµÒFJ}0ÐáF¼pNÃÁ[ýW÷›ÍfQ)¥Ö§[­[[ãw;ê46Ù-ít:‘»„Ê”ôŒíXücc#¶=ˆ™á¾¬½—ùHº"޳h­V«oÔk§k“ž´ßßNO¤”Rñ²¢x^Ñü“f6Ìa³ 47í'm~`6ñjo4>{”ÇŸÏç.\ˆ5f¦cÅnœ¿ Ð̆HlÒ³G<¢DÈ–â¯øl¥Lñ T\d ‹Ç?‚ÚÂÿŒËÀØ`/©G©0Ä!Ð-¨´×ås÷œü¾Ž…Ðã¡ æ`ã#„“É$uáò@§ayr¾"Fs‚¨Ã@–ÝX©ãŸ÷~µçžjœ³ý·ö§?3m½µe#™ ;ÌÄ"Íž¤Z‡”âe» f#,>&è{“‘È_Q°~g{ë»·.þ«‹ÿøÇÏž=ûÈ#\¸p¡V«¾o´ú«°Ë0FUÁ6œÒ‡UlwHøx :iW}ÙÓmEQ”ß_–¯(ÛÖžÏæ©žfÿdV]¨º¿ÒÍÎJÏÐÛ™ÿؼ÷[=åÄ_u£»ýcÛKÿ|ÉbÑ…ÆÕª/N5iÊõkð­­`±»8Œ²~rÔ‚™¨‰{øŽ£åù²óŽNñÊbòw&åJYKµÆãú“õö¯¶-%™užl’DŠäyÌ sCNùXUU¿ßñ‹_<ÇãñÅ‹=ò7*›(ˆ`ã³Û]4Û|d¼È'77™Þ0‡4»_›Ø‰ù¨ÓDSÿšë–‰‡n]6Yª£™MµñsVˆ¹éÙx–AQã“&ú›F„(µRÝl^tü;9ûoÈ}8€€Âœ‰¹XþÎå²^öz½¥¥¥ .ìP*ßS›ÿƒyùKeðsȰÌVÄIzq‡Û¬,¤ÀØç$ž‹ÃüNŸMÍr:ïv®‡xÐødcú ÓátxÏŸßóÀ ‡ÃÙ|–šiòu“«þÍUpù3ºQvRXLÞ'8'µ•ž]@d²ðW$ß0ïŸè?û£Ï^>µüðÇÃòƲx^±ýw¶;¿ÚY̬˹gD—”ÒìÖYç§:U½ZYY¹ñÆÏœ9sñâÅ”Rù‘rüOÆå?- wPB-nNÂä8ˆ[6›"šmlN9ªS`´Çàz°Ós~¬Ö|¼Y¿¡^õ«F½Qbë% IDAT;Wk¬7fÅ,Õ¯ˆ³‘Öðb•òSÒvÇÔøh¡°`àËFœO>ùäåË—#¬Òó°õ-Q—q«?X’.s>ô0 ekd]q“G£‘³.;<Ra™r–ù.­Àsþ–¹´ò¡©‰f?M§Ó¨Ÿw»ÝN§3O4QÒ~ñ‡´±|f\æŠÍcf×ú¶C—þäÒè®Qïö^­^›?s>øÁÁU¿rUíáZY=ÀLL†“åÑÛ_ì[.!*Hăc‹BH£z¨ªªêWÕÉêøàø÷¾à{ÜzäíoûC=T=V ÃòÅeíx­y¾ÉœG¦ä³Ã f£Ñèv»'Nœ¸té’auuu0PÜd•ÐÓf'¦2ÓÜŠwït:èÒ3ÿ+D6ÁÊYO—‹¾m“èxíq)~¬Q–e½QO)¥z2¤f]>»\¼ŸÍüûlÕÕÕÑhp“K1*­íííûî»Yä\aB{]™ µýLk¶²-Ò8ˆ®’Ny™áøžÆ’œf¬"jÍV%*{2)~ «xc€dQfifl£à‚zJš15h¨Üšµxv,Â-Ÿ6EÍêy2u+ëûYê0Ö¾"k ºŒ˜Ö¼#ìøîæôÛ§­ÿÜŠÓ“mö³ök»È4Žý³¹p¹S3ò2ËŒzlÒ‘[Ü™í ¼#´ 3ñºFc>™¯¾v5½: ß0L)5kû¶cN§¨H«eÙâÈÊÊÊ5×\³¶¶: o«þЗ‚D¦ :¿ƒ’ß\Õo®Oß2½ûew÷z½ÐœŸÍfí/µ§ON·_½Þ±ƒÛØM .5LéAÛæóyëC­É7M–þãÒÆÆÆÇ>ö±˜e)˲þ†úÑO½îºëNŸ>í| C%Fí£ò ƒ¶"gW‹§™Ák¾¥Q€È' Û:“°JCõ¾á¤Ì¡ZÕ˜™*’±¼q¼ŽAÓ1^4 „е ¼ƒ*+¨œû€É^®UU-//WÂÞÒÎÿâ4§&³æÝ#úFív{8¢ cA)Ë5YŽ‚œùi±Ìk§”7Å€ª"9&PDq‰‚‰Ý艾á€ÚªËºz@Î)c. 1ëUs©™âcmŸ¿l†Ç£`µXb6ŠÀÜ+7P×2£^H/J¦þ¯ƒ”â Ÿ©ì”°Ì©ªªõó­Ñ'FÓïž–írVŸ_7Þ¾c»÷¯zžüJ{ÅQ2øŽrÁ½ãWöYô]öP^´ôƒô‰ ‹4©e°‹eÒ¿y2xÜ¢×Ĥgìpz\Õ`0øÒ—¾ôÔSOñM€/î- ¡Ø½^/ɵ×¼Qo”E9-¦ƒÁ`4 ƒcºV•©¬WŒÍãh³.QÜÎOu6?²Y¼©([å$Mf·Í¶ïØn¿³½ufk}}=63æo1ÁËkÆÅö3!¸‚1L¹Àî&E†{\¸¥0Úbh<;Ck\X3óïÆ€ ô~¬Îx8¹¸ÑRBÑËšr¨®Å 1 †s3N^ÏTh…e0™LÆã1ÖÙòf‰fÕ|ðÍBR(>,ºGÑŠï,//£K/˜õ–âƒÓƳ£UYcã,JÁ›`ß±%Kä£EªÖP˜œúÕy퀲Ù­,î3Öàæz°€=c”!7UÎ~ÒÌca°o. JÿÓýòËñ'ï›Ôjµæû›K·.¥”ÊZ™é÷™&à± ê\OšÓBŠºè*MF%9™K”€3®Ê퉂¿€QÄÈIÄ¢ªÀm>Z `@°šù°1óL¥eÆAffÃê[ç:wÀë?¯·¿Ô®~°*¯‡W_W4ŸÓì¼½3mLA'ÂËÝ~¬à?(²tÿg·ûMÝí¿¾=zϨªªÖo-ß¶¿<-¦ÖD1m$NÌO'f‚›¤Ãl6àÆÄ;GŒQÛ¯¥lý;ºŸÄ0²&+ ç8ñ¾ˆèлrÑãbt\ `e&C8t¤]õU*ûœ¸ÉVŠøV¡†È!­ ð0‚9m4([ ùZŠb=ùeÐý)à -Æ[³(˜â²N,z›1“ `;Ða…JÀëŒÇcª(›(R‰ç2¢œ$ø‹¢v\p„«ó]"„œýlç¼þ˜®Š³EÐíÛ®ÿësªHEZÐàs_çi þ±Ú¬Wf)N7­3BA¦b‹Fz¦fg §¨F£íÉŽ…Eš§YÔÀíY‚zŽ¡Wà…¸q¹tÛ£Oõù²xUQý­ªó›;I_ñW‹òeãŽnr[\ìœùF퀄ÿ¡ÕýýîÎç* ·g]éÒØGû9â1ö2°%•¥S †c|¯’Ι´0™>V­ŽckœÐ€Îë ”Y8›—œ4¨h)?ߺ¬{Çm„ò€À%KÔm°Œ¬{±Ëmå'd ²ý’Ù•²æ¦ù‰SpD¤±ÐÒ2i¯$h ‡qGBfõ3 mxÎ&ƒ+YB‚N2Îfõ¸Õ棋æ×’„’ü¹a¥3{DñJeô¨˜‰¦pêBÎ~V9hÏdÉð>ÁÊLä÷à›i”¦ë yeÐ,^Äûß’Y¬2ûÞ/úó@+™Þ(Ñ…ÄÞu·Çë,N¯Š×†¤‘W1ËÎSl7oMªa4!Ф­~g=•©|N9zÛ¨JUªRý3õꞪù‰f£Õp¶NæÛž'E6‡ >è’2^¨v¤ô#£Àe^pNV D™¶ ° ž‰ÔEþNÀ'¬•ܨŒ‰s¶ž´u‚o5µ”­¯­‹Á²¥§Í앞ö þs "¦¡À|‡Lwǧ-Û„ì>ØkÎÕl îrðiƒ·[&Ne¨½"üÄi;Nc%Õ̸^îlñ(ÙûÞ¹¬½˜Wõ=·¤En°òœD”JR‰54I¿ŠàGÑœ5œ¨qã×à:úಬÔAÈÙϨ“$ùn¡_,Í2Æq Ÿd}Á¨ ùš„_;›Í–––:PR¡qšu€2k/®tÈfôãòb,€NŒÏ¸´ëëÅùHòîèâHýLd¢`rSÔB¥ 9 ™Âd#€µînÕþ¬VÞSV©ª×ëõÇêÓ­i½S#rO÷ÜzE¿$N™lœ>óÄCy™_ žCbÿ³Õ˲ì÷û.ÄÁ1ÍgÇI(ËÙiNU‘1päEu‰àËÓé$7vãλò6}ãi‘}[ÿeò?vŠ»JYœyÊ6訛s 0úÛ¬Š2—!“ûOv÷‡Z*~´µµ ßï‡Ás¶xÜPaT6àuVD¥Y˜í>Ãw–à öDZcÇÆO<Á†â”/fó]B’Ç¢‚F\`¦Aˆå}0@|Á™ÊAÈÙŸxÃZ 0„Þ>ppÚ+¨@Á¢O(ò$®µIè²óŽ-ʾ"êÄïL&_gÜg€§³ˆh‚kíÈFQ@Û…â™ÉÏdê#ý~1cM»“†¶¡#í mJn¦Û‘o¢º(NšRª?xŧjUt•’Tª((™@$QÅe2;UÆåq–Qáцá eä"ÉA¼(Š^¯wÓM7]ºté‰'žÀ‡u5rOʲŒJvh€AhL{}öLoÍ0"à8l¡™Ê>8oYfÍmئ‘'EwÁäæ4³^´ñ4j_"«77Pò6Ò Ã8þ7ꘖI®ñã^ñþ<U·ÛFˆ%fÄ<(£8¶™ƼÎNÿo¯Qlu—ù°Fãk¿ök»Ýî‡?üá! Ofk3}È-ˆ"!Nj’ÓÐL™>izMÞŽpröƒ·'~d,&:F«2í kyAÉw‘lr ŽûWÆ[G!Exc¹ØΤ¸þL~ŠïÀnÊ8âì%·4ñã2oн%7<Ø„™§ÿèœgs¸™‘ ]:3My @‘ÙLÚ«’ ÷Ïݬ-´Êù ‰ÇDö  ÓnE$)_$IÜ3DÁÒú™B%Æ 6²³’&/HÒ`¤ËdË  ­ÀŸØnÙ™u¦¯5Aˆ(óuëÅ[fq¸’•ÙívWVVb‚ÇÞwÙ½rBÉ£ÌDäs%jÊu``}l[›õÁãw¸²kFæ+d2CVã6ì:ÍfóСCA£Ïªùƒ³ÿUŽÇ’8޵݈(oéÄrÇòãÏíVÀ¨GZаr‰ÍNƒ>ÀYL½ïø—gÁV« ’Xú|:R-ë¡ÅŸ:t(æò˜°  Ü)[”)KKKN”G©­gC˜tùï ñƒ ¨ ¸¹£nf6LJAvG;.†Ú4L¬±{)ž[8±ÛG£Q´sp’æN‚ÝqâS Zñuó£HŠM-±Ó ­¦È3lcAŽšÛÀV\'•Jü&c¡Bk)L‡ç´×*"> 2Ø4Z(1ãž;%©—2*Ó7íNž’™a¥“¤:4„g;ÄØÌF«±¤Š\4›ßš5â#Ä<2-Dð2®Ù˜Î?b;oÂÉŸíÞ ãþ€‡­Pª¢È 3¤ˆ½0Öö¿Êa{{…†6“¬›HgÜdzm&Kîr¬™3“?rþr^V†ÏäËÒ^‹u–¬›±@Ôn©•”Òx<~ä‘Gb?»ÉD—ØC!´—ùÔ®9²lÖªI»òhlÅPç$¿3¨˜i0[»Ú 7ói…=8¦3ÊŸ >Ó躱*âa.!­¦j"PlïøDœ¶üÈù»7ÒU7ÌLK# y Dû-àdeVf˜cf*>T s‡­Ö“%gÐ=,%žµvÀ \G 5NῸˆATJ S€`F0x ÎIÑ<ŸÏ·¶¶èñ›`kМ“±Æb/Ч1gÇC„ÕøÈìc³ä[ÔLi×·^AѬ½çÌÀË8³¯ö¢Šå:ÃËØ¼ÖÅðAÈÙgqˆ(ñ®µq!¬³âŒ5@9PiD'Ÿ1ã2¬ˆ ¦o¸|ßÎlÎzœ$ÚcÊ™TtÜ“wÙΠ"œœï†]¢³)ÿY\´7dk¼;ã‹”D›óËç£O[Gkk•zŠ%íÕëŒsÊÜ™k8øÝjšÙ[fÅ3‹”RëwZõ×ý:qÀem'w8V\Uó}ó=’9ß@oãẅ³Ñ™é”™qdNÐë͵…’磾ü9•Aœ¤ñàÂEé±GS¼8jA5©{bßJ?tF³à—dX¾(eææŠï­W8kÌõ(YX0Ã"Ó„ D ž[ ÕÌ#§;~vY0cAB„aÍx𸡜˜!å…ºo'íA°¡' fíÒõju™v»Ýëõ¨ý½£2ë$ό̋ ‚‘@ûqÜûyÚ<%²øÀÐØA&f·Ç{e#èþCäÑq=¦ÆrØQ¹“ïqgUî“Áí!8¹µ§Ž9lµ0W& Ò6G! ˆn·Ë¹6¶’Œ;#_ðØ@d1»Ç!^UUj¤ù_™>1jÞÑ\ú§K_è̾a6úبZ®`Ÿ»¢R£ŽáÁµôå>M’×C–X ßÔíB$ü°ê¬®„@Ž»¦ZYzÃÞ_?³(ñÂÎÜv¤XWž?ªšS•· 6Ä.‹…>ÑÑ<´À!Jõ”tÒ¸tF1ÇT"~ÚëõL•ÆÔ™A zÏÒã‰<Œ”÷,Ð1Ç•S\ƒõ@™úâ](ïèþÆc‚bc•?ÚŠN'ö‹ åÞìûˆ­T9ÉT¨â•E½]ŸÍgÍÏ7››M+Ž0çØh4NžŒRÆÝÛ$ &É>ZŸÛ • ˜¦½ê™ôQˆñ“É„;Y?áp>Ÿ·þ·ÖüUóÐg«Õj©L½Ÿï•õrü¡qÿ›ú(4¥’Lq"U÷”U’æ&7~­FÌÙâðŠDÝ Ny Ÿªæ)ØåÁúâÖ‹8+]1ø¡xÞ+SÄð̼$]L¤æ =ª[®!€Ö8Çoºé¦Z­vï½÷òS³6œ¨Å1 / ’0¨ÿ´4È‘±ÚœÓÄC±¨]üÕÑ£G'“IHÐb„H´ösÄ\ŽzÚþÙã\7Ž DiùÛlûpKòkØ/lí äìò»^1O/Ki5Õõ¢(ª[ªùSóÖï´ÜÕXZZ:~üø—¿üeçò.ÏY­Q‘4ò˜à®†ÇDyóÀšE| 'Ñn‰cœ€]I"€\C¬W³¹˜±wàd¬„„..‰û`^¯;v|ÀJ\‚Î\žÃà„ò¡nÜ7šéó'MÔR”¤]‚‡Í“ævm! }ιaÜɸáãÛÆµÔàì<‚To|¼Q|cÑøH#ÓaL{¥Û|‘™Ò¥ÝP¡7wŒƒ>íz±øà´ä¨ŠgÍ»ó.ñ¸yd–)ÁÝŠçf¤GW´Ô”dfWÔJ’€2YÆqç'“ÉSO=e‡\£¬Á_ˆüÉu(¢ “ Ø8ƒ¥eLÛ²7úš¹ßºGµµµEHc‰?”IYÀÄl„_¡tF’DÕ˜õzÙ›36nBD¯ŒahG¯Ìƒ³?_å_*Ó«Rû‘vÿ#ýÚ¬6§/Ï.Ò§öÿÛÆ0ýÔ©SgΜ‰™‡‡!$+¤çÁöñ.ƒ×Ç mRªœlº“ä…*Þ%¿Á÷̃d‘–">ã.þ¾–óñ q–¹`·ôµg&œ™…Il$Iî<ÚmƯæ;ìèn†›O‹\YUױǰ0ý¼÷Ê^X>_ýõEQ<ñij٬}{{üÝãÎ;>g§°X‘ý†í)±!]æh˜–M*S€₉SÞ*gfsÎŒãh’£)nµ4:‹ôÕ!xªš~ç#^206Q24i"¾yþüyž©öxLì&‹Væ%BX¿ÊîJÔÙÞV‹·ÔtmX£q÷"³ ]Ð1I#G´û»g¤¸±ô„ü´<ʇ²Ê- (x8‹™D'“M:9ûoR¹yt³9núС“'O.--=ðÀƒ»Å…bôS£Z³V›ïq½ Á|&4—=ûæÎ¹û(‹D1½á–¦ÿ<[»>^9Á›ùM6d’(/Ñ”–ÉUW]ÕétÖ××1«ÕjÝn÷ðá×.]FeY‡ÃàsòÊ Q›±–}C i¯—£ -¸ÛÐЉ—|ïÕl€Ñe%>˜(&x‡Ý›%ñ¦+++oxÃÎ;÷¾÷½o6›¥Ú•J™_I¯×‹;–‘ZŽž˜GBm°æŒÜã(1†>4*èxÀL£’£Ïp.B‚Ðe]/˜,æqa `ô•BßuR C¢VsÈ,™-Ä@O(»W´imC—Ag"•ÍÂÕ˜#„½¨Ý=ŽmqEZqh Ö†õC]ð€çŸ0’pTv†Ä¨uÚÁ£“Êš´ÄÑAÈÙ‡¯3éÌ›>ô¦c¿}ì/zÁ÷|Ï÷¬®®¾ç=ïùð‡?¼qj£ýÑvñ£Eûß¶MÛG;“Cг¯2V>ho¬O·‘rÆÁ›Ä£…®\àc»Kè"Eµ˜£Þ‘>pœÇŽëv»/zÑ‹–––n¿ývˆ ñjÛÛÛõIðäFÑò%@ƒö¡¡È›bàèEy6Û™µ 1IÛḛÞjG^ÀLËoƒXÒñòØVã‹â¹EýþúöööÇ>ö±°«ÕkóçÌ;§:’mŸ/ÓE®~ˆ£ÈyˆÆi-âøëǵf­*«ÚçjÕæ×¥´WOÈ”hRÇ{´dâßqð¹ .dyš™pQf^WËÀœfê­Ìk#s¨¢zޏåuëRÒ0Fz.T âwØÃÿö&@o†-o:cÿ~j\ ‚،׸Uw#‰3ÄѼ¦¹Hh6›1vCôõ€‘Ÿ©íotröó«Ùl^ýõßò-ßòš×¼&¤~øá‡zhØ"³Ùà,㹚fC\aèŒðCµKàñȺq{iÐO^t¨$»ô*gå-*d^ÈTfÙ6ÛØØ˜Íf<ð@Œ=“¸Å;˜À³xÆLHHÍwó9SfŒ¸åNX¤çW­½"Ä&ïr6YÁŒÍçÇ(ßâ0ûd>/"ýäVwßÖÝþÛÛío‡Ã/|á ;]ÜFšýðlõµ«Eµ“É‹Q7ЊpÀ­ˆÃ”e€¤Ëù«æ£—ÊvY¥*¥T½¸*/•Ýß%fó4­)àb°VOË& ;™»ïF'ÌE‰ (ÁÃl+Ï÷¹“Éä¾ûî‹oFTÒ´1bwiWLÄÊu!gŸ°µ²D_`{{ûÒ¥KƒÁ`2™ÌgsËds‡"º×¥]ž@f2>RàNAú<|øðÖÖVßP0 DØ¥xÊÝlÖº¬mã<—í\•^«Õ®:N@@ѽ´²5dî *D³š*žø¢! -V 7+Ég¢w°c± 2¨WKãÇ,¾lœ‚VYCdÁ†(±–€¡ë;V¯×ËGËúCõéNÛÿ¤]®f³ÙäG&Å«‹Þ/ô¬Eh$öãŒÉ¨Ûæ¶#Fu¢ÑhÌo™Ïo™×þ¼ÖýH7ÍRJiþ²yõìjò·&­ßhùˆ‰· W®pÄ0šéfžó›lZã5n3¸»î ~܇àLjd-fl“FŒ©ð\Œ’÷Øš†Žù ¥6„ÆÉ&Cž³ÎŠÍcEY¤•‡KtÏ€\àD„6Xئ–dŠJÄlû¥º b£‹zòäɯÿú¯?}úôÃ?ln¬³Á·.(Iïç×uéº_»í×Þú¦·¶ÛíÇ{ìøÀí·ß~öìÙò†röêÙÒ?Zr§$òz¡­ÀøŽ†›´4;öº×½îž{îùÜç>gs\q€Š@Ã’ÀèìŠø7»Ýèû ÂÈq|FP$éœÇ¢q—˜ ή[ÙÝn—}岉žªo G!ç çƒnÝ{\ŽÑô´W̸ÀSoöÆvÁ½Í{te#C¦ YÂ1·£]¹ÖøÍFó]ÍÙ?›M¾z’ªÔ|{³û3Ýæ¹fQÐð UY Ú±}UŒÀ=âG« ÑhL‹éìúY}³Þù@§Ñh4Ú¢(ªÿ^Íž˜o.ÚKíùpn%¡¨;éBeÃÿ<ˆ T6æP>‚ÑÙŒÀÀ`–gð”iaÜâË'ê§H­DÆa’§²ÉŸ¾vh/¢vUmòæIùueª¥ö·Ó¥ÚùZY”`¹Hgš=¹+£Ì3Üšr’Jõã€ÁåY:3‡ˆß C êÎxÖà( I– IDATí fØn€»wñâÅ~ô£çÏŸ¿|ùr<Øæ×9ºð¬ Œì„œÿÕ_Ô8¶yl¼4¾ûš»Oß~ú¿üçÿræÌ™É‹&Í››Õ—ªÙÚŒY w§A‡Œ¡Ó H*0zòΑ‹/¾ÿýïßÚÚBš)“Út0s‡÷ŒU®a<ï ëë°ç#äÐØd“‚™ ëzС3Ígó&Õ€;¢ 2dchÞ,êl9/ãM釧½ã·HWa¸ÂëgcCăv»}Ýu×]{íµ÷Þ{¯Í"Í4£èÌ:ÅEëGZf´g³$ œSÑ‹Ê Ø'‚Ø¥°~vcúºi÷ot˪g‡Ø=…[Ê©4½Ó,F—8ØþŽîº÷¡+cšž1ñ¨ù²&“MÀˆ¬ÍÉ_«««[[[ ؆BHÜÞ#GŽÜxã÷ßÿ¹s窪*Ê"©^ֻݮa¥hWÐú¦ñÀ¹é„ Ó²vŸ7ÓÕW_Ýï÷ÏŸ?ÂmÅ–¤å9Üì’` Oá0ebý@¤Új­|}¹ü]ËUU5[Íù|žþ uÿSwtǨþá+žCžÜÊèj çšÊÅúaž,;¸ÍtìbŸº7IuËÔª­À ÙLË­¬¬ ‡Ã¨\ÍÍ»’1‹Í$†a'Ž$=ê_QçÍæ'š¯ÝHÍÔ*ZÍÏ5Ë ej]i±¹»° Á”EÖív¡ç» E’º!@óUB…`JJ04Q›ÙT™<%ñ’| qeë%ƒDÓµÈMV Yà’ê'jA®-W˜LÆß|P«!8™u ·Ÿfܨ8þ ÷Ñ€ujq†òˆ.\8þ¼ôHÒÁ'÷1 Ο%º2¨yòtÈ92Wr¨‰ÖEžÍfñ‰®¬œ´s•e¹¾¾þÀœ?~爩7R•H€@)íu ÈÆCwcÒÃI–ކ"…Vt¯×»å–[žÿüçÿÑýÑc=fŸê9»˜Ç Ú\*“O¥ °ËŸÝÛ ¸ÎfÝŽvÜùçZ­¶ººzôèÑ‹/^ºt©ªªæ¿hŽÿÁ¸ýKWÔ’ÔñOsçÕÌu‚`8Š™ÉÿÎÚ–ÙØ (.ËÆ¼ÿ-–.åa>|xuu5F28ˆ¸#áqK>Œ’)éE6¢Q6³ :9û@ØñﺽYOõZuEoŠ Ôå-A¤V|ZYGÙ†ÓŒ;8—ñ<5G¬*¬×–!»ÉœÛa*CTõt vÎG£ ö>H»BsIÂÌÝns''†ºÎÍ[˘?°ž|çÙ?lu»•°78ñAH(¿i¯~”¡íܸ]`÷@@h}ôÄuÆ÷ÜrôX~Æ8g9Ñç Û£ŸWs×Ý÷j{{ÛÃÂõ3õ·:å•ßlloo‡ýhQåW•óWÌ»?Ó5TŠšÉü7ÈZØ H1¿?íçÄøÎ¿øÅóçÏ_¸p!ž#ðÎÀzàTÌù{„ñxób<¬“jQ e:å-eûgÛ'Nœøöoÿö—¼ä%ÿøÇÿôOÿtmm­ú³jöC³vjûùìýšö†„Lž •ŠIt3Ë=Z#dÞã´¦ROC‰t*ŠÝLÕæ#ð"ç[YYI)…b½Ò^¯èNøªœ}þrÊY›Ê “L.2k3£Ã§½žZ䀼ˆË&»Ä³3 $4ýâ§²û˜K»PÆœq“ãÐíð„ƒfì« ¥Å±è£rU¼»}6¹&p3 @üËš¢ÀÜ8fÖ–µ3ßɳrðJéfÑ KRWƒ<æ>0—îDóÊ\˜ˆ¦½²1ñËœò”eö& °y”µoµÓ$5kL^>Iÿ{ÚúàV½¨×jµù-óâYEãF5¨¬–MDr‘ ½ÀYñã†s…™n1.îÛ©S§}ôQ¢H|¢ù2e+–YÜ3¤3ëÕ^¯@“Iž†ã`K§][·ÐA´Nœ8ñ¢½èÆo‡ÒjÃJn-Àø ~°t”™fŠ(}v̱2$Q¶œù?™ÒZÖµÍè<°Rœ×VåâwËÚÍÛE³:Ll¹Ø®¨èÙ8§s»‹ê‡ÍωI•û¯9öáèÀD[£äÌë0É‹pixn&¤Áhxpâ¸zs Á8§%_½ÆÀ ì&ÇC)Š¢qg£ÑjÌo™—/Ü¥D–µt>5íŠiÔÄ™©“ÐÕ’tÒ°Ò@aÏì²%$ÈÜÙreo[¸AðƒÈ¾¼¼¼½½=’l aif‘’}+*n/‘›,ª(Šúï×ß18uû©Ûo¿ýÁ¼ë®».]ºT–åüÿ˜7þ°¬ ÏÝÄ´;7ÝúÿØ{Ó0ËϲÜ÷]ÿ5O5tUwºéN‡L À(MHB69½¢rdr8l pÔ½åRÜg« ȵ/6E¶¨ˆ„ $bČĉt:=¤z¨aÕZµæñ|¸«~}×[øuª>p5êµþÃû¾ÏóÜÏýÜw6[­VÅ£ûåfÛ´3Ý•„ÆMª‚͇F£^ÓPYîÞ½»ÕjùC &Ël:˜ ó½©, v‚¥3Ýv("vmûñA_¢…KE*°)÷¹?G"#HGr,õ·Ú+ÞÛtƒ2hŽK·ßþÍ4º=ÉÒü3pnñˬœá£8¡4oÁNàÖ|r(l–>£øàNආ†Ô‡ÏMØP2FšÁ`¢j5òîuX_÷Ž"õ™ó}ã®#5ȳ$’ªt¸ß©"Ä3(yªýu»Ÿ·{<{±›¹-“¹-3~ùx’™$©$}Wz¼4Îä2ÎûÒãkщãû=vFþ7ÞÒ𑎰¡˜à§e¥ƒ·.HÝô*•ÊE]tìØ±C‡EæÍ[ 1=‡£>6ÀÜé3“Ágk»vë­·ÞqÇtÇýúå«ÊI:ñ±í& fUW”’zM«««úÜ(jïæCÁ¼ÚpcDVöåYŸo„§ã†Š"XcaÎ5sÔȪ€§Mc•J=l~ÜY¯;!g~œÆZæ9d‘¢‰Ê '¿»† '/eµg[êˆv Ò‚ÎäW¾ä»”ŒÆ‰mQAÍNPÒ‡p€úF¤c0\éCpDò 7fÂ&JÍÜ{[‡óCÈÓшÒþAYç.Øx#¶µç=%?S˜%ô)ÔÊcvqI‰ð¨ü¦‰PëÇuÜ>ËŸ•‡XeëÎÎr‡MPhnt|Ë8R!Æ©õ×!bµ©? Ä•#Û‚¨æ&Nsƒô½IJ\ÿß\‚MàR#Š9Ùï÷:¤þƒÏ áþB"BCÙäU>et®• õoÖ»î¦ïJ§†“7O?5¨þRu4á<¢š@˾T*¡ÃD-ŽÌOØl‹Å(Í$! V†gQ L60†R.(Br[ŸŸŸ¯×ë>sªoôB܇LÙVšØsw]0@Ÿ€vñÝÝ 9Û¬y-âÔ^¯\ÅHý½ˆ ä 1ߨ Þ§scšÁÙœì@*-Ÿ û>¦ÜYãuîX¬šÆåc9YTR¸oŠ·d8žh/éÛ5¿–$‰ d{Œr­ÿ¸F'ç8÷ËÌ|?H;´y±vþ·[·¡ƒ€>46Gí9÷]C&«ß¯[…¢¨v…¾ˆ3ò§ÑçóZ]€Ë›Ì[§7T°:jOýÄï»<Q?%¡}sô8§Ÿâ#l¶ÛàÌõOã‚)é|b,lØ[>kÊŠE«ßÏår:£QÙ ³Áà€÷DÍÇÂhbi½år¹Ñ·Fé[Ò½›zýŸê‡ 7Š/+R²S©{ÑÅ.Fè²`` 9tAº@òD1Á9“cËŽX¸S0{*-x×2wz‘~”!+iÞ°)œi0WX¦ ´r¶¿ÖnI{S€Â±2?m]S º§w§9³¼áï Z&nhíwl?æ4ö}ÚßÇG\HÆ%,égD3ÿ® 0³Õwn¨NímˆÎ±åZúâù\عçÂ9GÃiÙÑy¡×«ÝDÌL’_?Œ¼iïl÷žqÕQ$*ˆCšPv‚µ×%8†yÕÅVµíôtýCñìQÂîv»,ÆCÈ8†L8Y'FúÊNîp½]‚(âR„=¥Sä.Ñœ¬C‹Q«•åAØÓ@®ú£QwP×sòäÉH‰ÊÇH¤Õ­xâœëY”0Qb½r¶Xs\¯~\cØyP[5e9Í#g/tÖ…³6Z»œ}>%@“†¦Ÿãi>uOvéN…4„½wU+† f޹iqd2°ÂÈš]‘Ðaú‘rTD-e¼Ž(èb£a³ÚUØ0ªˆMþ Âf«7gôQ¶zíÈ]À ä7Ñ q?r5®t=:òÀÐ]/\'£7x·*E Us 7׆‰†XõHõr…ìswÜ®Ò@²ü[gmx‹ˆå¤ÄB×£WƒO¥«}³g¥t¦éèÜcäV{rãL*Ö§“¾DsgxÅ×PžîÅ­ªòù¼r2í |>¿k×®N§S¯×Ùt(Fk׸ý/‘Þ!))Œjð4lòÆ¡knê“ûý>¾Sº_éKù|1ùè./ˆ’”¼ÖI4¤¨:yOõ–‹q서m‹:>E ?Ê“ ÷wÑ©¡ªŸ‚†À½áìÒú‘Ë–[+r;U¼Øõ}¬=:Ѽs㦟n'ì+2¢KEmO@oЍÞ*‹¥RIñoð+=·°ÙÇg#À‘įõ~rØðÖõ!7Ž„Oô_É(™"òGh§BÂëÁYÑÑ`K;ŸÂ¹Ê[=dœ‚~†¿_/ƒ\&'rOAkËËÁŒæÔOÖÚužq„ ³2£Ò'ª_}Ù»l ž˜¸Z4œÍï'¬ƒr^iÁo¦ÖtP—2ë&BBĪpr£ eú•£eW,3™L¥R9ï¼óŽ9R«Õ"Ú'³úë5ÊÓRé‹Óßn¤B*„Püùâ¤1 Ë„ÒíY)Xù^F¯\aºz7׃‹ÆÆÒ¥R‰Ëóî‘û¦#f‘Ïç£*Y”)vz9?U+°ÞOyfðn!º€ip´QtÓBôQG'û©ík5bҎѨLq³HX— D2D}ŽòeþÁ´p¢±J2q'ÞŒF£={öLMM9r¤Ýn£Äõ®<Þ2»Å$-¢õ9Ü q¤# Žþ¶&N» ð‹J4ÚBÜîŠ^ލàß§½ ,Žý†[E’û_ú~ã°ˆVX¤$è8^0é'¶Š[lÇã#GŽ<ýéO—iÇáÇ×ÖÖ<ó!!çªq‚€¸ìŠÏ¯¸Æ0çSœ¼âP0ùÎÈÒÈ(s«"‰0ýÈŽšË ¦m ³⸶76¦QaáÒŸXFR%{÷N¯Ûcé=h¾ÄõÜ"z$KÂçpQy§¾,]®ÔÙ\hÏ1Ç–}/¸*¯4Œò\²ÌgVp,Ô·(Lz×AY »SDõ²’pÌ•™hªo¢ ¼iœýL¶úPuî¬9¡p¹7äÂ/…ÁKéCgú¬‘“c¹NrHÓÀ{yæþ‚(R™ÑvOR÷†÷lÆ'ºHÂfZo§mÃ8ÊN°!£älÕA†tŠ7”¾n‚y¾ºQ&ádžÊOq¿ðÃh ÇMׂKÃýŒy÷â@ßèÕ´·!{lˆæûtÞ›ÛíöáÇ;B¨V«‘%x‘‹ÑÓÖ-xA@Øît:Nô=‰ðÃå—SÅÐAÅi{páPñf»î”ý¬§­oA\ÒIó>Ûá£üD\,P W]Œæ6¼Æ|‚4Þ¡ññU¿$î…YHdooTÜõZÜçM¸¼Pôj°;ò™6³n·+V$/(ºÚ ü²‰PHò“QÃp4lè`yèå5IM€NûTVKÅûüª±zWõÂÑPx²pÑEÝxã¯zÕ«8Ïç³_ÏŽž1šœ7aœKÏÙåhyøÑïÅz4•ì¸WÆä:ÙlV¿;G,†Oso$W¾ áºCØf` ‘Í /¼°ßï=z¼HÝ÷+tï¿`f´üŸ˜ã™ð@BäºOÉEMo/Â(¶ôB PÅGQŠtÕu|uJêÓ$åDQåIg.ù¬„ñ©§ž:uê”3²t´ñ<¨•rË"ŸÒ1¬jËëÈ ‡Ï.uñÇÈ%ˆòÑ[hz2ÐÐÝ›ÄÔŽl@÷‚ÔOŒF®nJÆq‹t+"W¿*Ø((ù£øàkƒ·FÈw®¹«.Aý¢¶@—ÈÕHE÷úÆíat=‘v‹Ÿ¡Ä†saay…"Cr» ú4± …±!˜ BP¾ôfÕn¬T*Ífsuu’! >ŽÖ¼öÎ:m}ÿ0ÝKÏ&³¯ý믺ê*Uð7ß|s¥?œ¦¦R.-êËØó€ˆÝ«Ð›ˆ´oa.xD„Xäc¶ÔÉ*0pó´a'¢‹ó ¼äÝ 9ÛÙË !8pàÆol·ÛŸýìg?Îôc"d‚èp°¥ƒ™«;Ú¦á/m~7¦¥ì}Qà8_Ù'lo!ÈÐWÐlF‡j«_od ‘|hƒ/×½'„Ðv p+ ÀóÔ50ršïr­3¥¨‘¸@¤€à]bg^ðiPì¢a´Û5¼%a|~ÞV“ÇhF žò”¶%£—<1ÿ³Û«„Íþ€TÎJŠøß~~§.ˆ€ô™»®`j-A ÐÍ*ÔEÌ]'û¹X­c_~¬#äÝ,eÞBwLoѺ/‹ÅbQr^@Sð1²&QÁt:Ýjµ\îÏÃ-™uŒ+¬C+++KKKõz}iiIº£Ñ(ŒC:¤6tJž÷¥•Y‘4'oÖ,8"|Ö—7ï˹$n CÕEœÂƒìNÈÙ~`m86þç–µO†“SûhˆKEѵvY¤È,êm¤eáÑ®`íÞÌ^#G.™NtvIù`VrÎ:seRrs𙑥•”}KÓ5ñ>º|rH“€(è¸(˜Ó¢ñLgÚ©kÎ2磙S‡˜ãÞat"%¿æz<ŽÝÓ3eª7òvÖ ÞÛN[rHSeÀ ÃA^õ¡ðÞÝe¸ÆÞœèèJš@XQ/Ý3ngð»ü¾¾îœãºS.ˆÖØ"x©GT‹"±gfD¸R©ôœç<çŠ+®xøá‡¿óïàÄÙÞôz½F£‘J¥ŠÅ"ZÁ¦­Øz½žZ§y©{RƒWêÓõ/~ñ‹>úh£Ñ¸ÿþû{½^ÿyýp,d³jG¸º4×b±Èòps&Ò…¨¿ÈÉCŒ(Õ;ˆ i^7ÓOòY1w.qퟳr¶¹Ð™L&ËËËßüæ7µƒŽÈVý12MŽ'o¶“  ¸Ï;Íuu”€~xC¡½ÁBgKs1Ôg‘¢¥R{]ÒÌÌŒ–;%šª1í"‘²k4­VK„¨n›ù"_Óz€|;Á'TàËyç?ˆ^¯Ç·ê0·¦õ¥<‘ô”_ÏS)ªÓù¼E§V– ;õÜçWthÂÓ»®% Å(*MˆÁ.#*Q§Ó¡WGéÉáE¿Ð×R$J y 8ò‘aAbCW|Ž#ÆdÜ ÆétºÓ騘 wØ‘çæªBœ@ái 9ÌÌ̼èE/ºîºë8ðÀ,..ú éNÁ[^ ºwçMP¦ ¾##é÷ûáÁÞÆ{ÇÝóØñãÇeÊž$ÉøÒqæt¦´Vd¼‘3Œ‰Ü¸û…n/Û›L&ù·äÃSÁGý]šþDühž†ä/lÂ.aö˜ÎÝ ~Q9å c’†³Í?Ä’µµ54ä)Y4Ž)¸ú÷¦Ÿ7<ß@Ë„qz¯²éñèhpJ>ĤL&S.—óù|³Ùä¸w –jAõmpG‘¤Ï>ûì^¯×l65Ë2 E§·BX^^VK¦\.§R)±l£D~zz:›Í®®®jÒS#xäS¥RÉ-è!ž¡½¦™CÍ©S¨$P3¹r¾Gãù Ä?d˜á>x‡d üÓ½|$"špt¶’na³Ï‚ÛFd³ÙÙÙÙ+¯¼²ÝnK¤Úý§¨OnUÒ‰¼nö– H«w+’‡ ƒßQe1¦Br&§÷#ÝwÃ!b°#ž°Ç DÎIºåÕÕÕ{ï½7›ÍÞÿýÍfÓAGèF–ÌÚò ¡ÜAÈu-«ÿší|¤ÓýÏÝÁû׵ɇŸfÿ!›þ`ºÕo¹†B’$“™Ió½Íñóƹré$¤“ΟvÂjȼ/“©ex#n*ÏDZ4´DK)ŸÏ#lÃõk¿Ãè²ÙY ztTuþØ=çÛ 9ÛYâ8°ÜÄéS,Ý Ðs×Ïð–¾J{r@·³ Â9:J8m]1MZ/xÁ žóœçÜyç>ø`Øl,pÃépîÒÈHIJ;~ü¸Ê…È}ìÎûR™LæÜsÏ >ú¨³q”#ÏÍÍMOOkðžJhññúª¨HEéÖD¿„yÒùHb@W·ØN˜‡a³!ž3سQh^é(tá;øˆ¤¹p½gîn Ä›Å/n+²l»wï¾ä’KÆ]wÝÅ N§D@ ÅH賊ôhåyõà -§ »”LçÑââ¢À7ŸóWs~«²½s¦ù{ðC7TކŸ\üb7 a§9óLó†¼K5G1Og:÷èrXþ‘]…ÓàÚZ>ÄíP1W«ÕZ­ö…/|¡Óé´Z-(Ñ|š˜‚éÝqwð!e¨â„v NE¨(ŸÑÑ÷Œ˜¾|©Kf¸œDô—¾×¶jà ²Lk•pâæ¼½^O% .Œ˜Jºà¦…Þ\DÏÐÍœ\3Þ-jÆãqúxºò¶Šü(E>åëDóýýÑô(ûY/d‡Ãar(I®LÂea|ÿØmjéKAAôËÖð'˜*ž°!Ÿã†=mÑu§½EÊþ*wBÎv6rüå‘¢ Ä u|¦ÝÍoô^¥@ŒsIdZ Áy±öâÄÊ»ï¾ûñÇ?}ú´tê?L½íä€5}æuÒMƒæuÍBæK™üÇòŽÂûÁªi|Æ#–––üœâ~Çãq«Õj4Âå\ìÒ«ÿ'ø#DÓ‘‘!ž\ìUÛ­†h Ë“ôéHhtï#…f&š½°Ò}PÆ™xaÃò€:tª(Ñxª®êX.—/¼ðÂz½~øðaºkΉpï"[NÆ…äâ’õÙ‘¼´Bạܜ:Ûé0ìÆ_§›/(4zKE¥ÈÎÕÈç|NÈI›$m¸º n4à«çvUN7pŠ{åq§‘~ÄzØÓOͤR¤&a2==Ïç[­V«Õ?9·Æ“ó&™ïe˜‹ òæÓ`å~h“28á ä†ç¢îÉëÓ©ÊhÁ ¶"ÿ;!g; Í]rô+Zh‘¹‰‡#ŠzqÂ’¤j‰¸‰$q.°F¨óù­û………ååe‘>áé³1ÀUô—ê9sagF¯­ßj>Z¨þLµ×ë ^9hÞÖ,¾¿˜¿=ÏÒGÔsÄpŽ&h²Ð9òbŸ!…tÃJŸt7 IDATN:þ Š2‰ByD/õ'_¨5¥7²{÷îf³Ùh4 &=«Œ¬Wú:) Â(ÛÊr "\^œ6 “s+ÜÀ±¾^¯÷È#ˆ4ÁÇFE!Zב0 Ýø@¼aB&¼8="]- ïC½#‚ÙLOÀpai0DZ§A¼YwÌÔ9¨‡LlŽºë^—3ï‚~3}&鉱Àô] ×=Å={ \TP±"Dð” çºJ“°>/|Í5×T«Õ¯~õ«*Â’$™„‰çÎf¤àÓ£Q@MRwÈÕÖö¢Íñ[7ªêPJ_)*ôwBζýдt{H®ä&Qã'l~Þª°Íl{«â° !¹*Öœ"øoQî`ÚV“®¡ÿ›ýÒKJÅb1—Ë%ã$ýùtú‹éµ[ײ/Ëú®ö¡6>ÜG2ÁĹ$žƒ'\NáK§Óbþ°Ï}º³Â=v·”öo„ÒX[[ÓX«wþF¼Üd‡ ›e œÂ^Í8œåãG.âàQÓ˵șìË\Ýå…P¡cTŇ¿q¢‚S`Ý{F“’ür.—“Vq¤~M¼G6n ÉŽˆz'žÙ ÀVLü†œ ø”>É8½ØÎ(ñª î»—G‘Üb£¬lrô*M0@Ö•r8Z#g„à–“ac8:g4Y˜<üðÃI’¬®®&I2>k<ÊŒ2Ç2ôØtfòɇù  ‘°‹Åùùù……(ÔÀøÎÚ÷Bœ¹@7Íò¢-“É(;ÜÆ“v'ä¬ÿ°ŧ„Œä"’ôå(°ÓI£3+Z¤u¾¥ÕÏä´u)C—uËç®ÝàWè΃!„îÿÝÍ~4›Ïç8°{÷îcÇŽ-,,ŒÇãÌÿÈtßÖÍÿiÞ'}òCG|è°áÈॠɗ{#ê7qb@šÌÖø1ʶqߊž°Y6ÔÉT“ÉdmmMü:CqPb«îGö—Œ¸zPq‚©O§rô3Í{EDÄj£Ä#u#K° òzQÏ¡»+Í͸ ¼ëÍzÔôzÔƒJDx£=ÃiÈú§˜pñV*<(‰ÆE=KðÖ‹Ç-V§-O‡ (w|Ú,zà0Eƒ  9íY‘¸þ¯ J•#Þìœ<: ‹axå°ÿ×ý'žxB¾“ÉdôŒÑ¤ðÚ×¾öÇ~ìÇn»í¶ÏþóKKKÅ/[ß*² z@¾±ºÙ<΋õÎd¹ÈÜ~ÀVïðœ¨ÕÏ«qE2·úÀBͧd€aN»Þ”Ot{ß.˜Þ¢“­‹Å"^ Q©äKl[U<†8µš<ÝŸäiœ\¢ ÒM‘)/XWÍh º‡:OÒ\¤+"Å ®Í 5»^íArƒ0ɸ õ¥ö…«Nüqj¢›ø¡ˆÌï@ôÐä,ÏìÑ&÷˜‡½Éd’OqɬÚáhz[Õµ¤ _*ô½ß~C;¹a}G´>ÙJúIñ÷ŠãÔ™ym_çn³Q{ð FíàX£ëIú#¥ÞÿÕϺ³mô°Yaˆö’D´mð?'@XÍÆåÃó~R”âpt´ÁQrT¥}èÇ•`Üo‘:I‚ŠvSSSW\qÅË_þò$Iòàƒ¶ÛíazØ -ç5ø8…ÛÉ(ôF§³÷uÄ…ã`RKÖsÿ­È )§ u LjPÏÑ8 #;87Âñd9˜ÏØVìÈ+Q=÷"ÚZLøXYw™LFØ ˆÚêz¿žÎ‹è¼ªÕŒu …¬zê0ç¼yþN§šƒ š¬Þ`Ø<O™HhWÕå"ßÔCÞÙ†¸¡ÓPB¦ÝŽàiyóÐ!ÀI‡ ËÞ1†H›Î³W–r—OÝ#Qê}bôÕ¦Þwä\üo9ÞgÞ“ÉV²o5Â$„roÌNÆÝq:{¦=&\+N—Ëå\.wúôiì\¼ÎGÖø¯lr–"(ãÀÂ.4¥ÿJ*¹ÓËù‘˜Ëñ°AòEaxrTØ, LDRºjaÃL…ÌÈi ~\Bùw®ª›L#ŒOŽé²+ÈØpf9†«: ßï§¾’ZyÑÊ#í*Ñ(¸+ÍOýÃDV³Nßiüy<þ{¡ýíö¡ÿt賟ýìÌÌÌ‘#GNŸ>=»ïê_\ ɦÞ»‘•zQ'Àá/q‡\ýÚÑO0£¹Ú¨7u-Púƶwˆ¢­»zûì”—Dº)ñŽÜêÛQȸ>NïàŒÓÞý<ŠJÞêg¸ë‰‹j ˆóÓ™`Ãè T«È‚7BsÈçÿ}æq«Äd0QNfìyDQšåmBYƨ]XšQÖ`r“Œ¤¸¦^‹ƒ¹‹’Ç$±È)šâ6»ù%j2  Ì„ë(§<å‹\’Ç»b,lÀÞÉdÂ@ˆÓš}\‰ùdÚÆuó\©È[çdw€µ‰*´Òs®]~°³eØ“€,)÷w—Itqð‡#7Ž`âí”ÿn ©&‡W`øz²Ÿûpnñï;íT¾UY]]¿fÜ{¿ø‡E„Yß>߇ð2é\¿Îzeå ©è‚ÝòÖ… =3åŽ|n 9 ÖpîP;z#:XÁ-åÓv®uíC¾?Ý#ÀÐ)g¥P¸ÀOÔ×i®c]ç/ï×#µ°1TK…‰¡ð$Y3y0£ÅÀ:t›»(g‚MžÁÚB)µP(ø‰éÏÄ%õ|z†F¦OGÑÐRãKŸ(pÙfçv"Þê cœÅa³ÿ7a•rSѺ §,^5âêóò#‡zêé‹3$·ÞµFž{fXêJ „ß⬡%¤]ì;ïf±Gv”¤·ÿÇm]àÄÝ|#!µuX·‹S=g1}O¸¢‰6Z>ÁàØÁ²ÝMÀÉl>ïÉžq–˜ë›áï’Ò—K½wöš¿ÞÆ…¯f^=3è ]ÖI–â͙ijGƒê ›Íæj¹ðTŠp¯×s‘@€ÈÝ’£ Z]qhiú|‰_ù¸ €(ç8µ ؽ›0ûI&qþùç_zé¥>úèƒ>/€Èä¾/0¬h¹P·\¯¼Fvì„7p9 ø¨ìÀЈÊC7] >Ѓº*(΄· ‡C±á÷ìÙsÉ%—Ü}÷ݧNâ {üs.†¾÷6Fa4„Ï&ÝMÆL÷Ái™Z™²™w+U%a«pŽ 3@õ¦#…¡³-œÀém'žddPâ%¯S×¼¶s¹¿`m›äºl{}{ƒOàÖ"b·Ëý‚±úÓSéî/vÃáûd.õd*•Jõ/í‡+ÂÊÛVŠÿ­èÐ<É»n™tÞ¹m7q‚@e†^Ådh¤ÃF-å3ØÁ«‡y ÒqÒF0U°•\/)eÊ8D¥È\‚éòÂÃæL¦j@ï  9ØtªPœO©S2±s„R¹TÿÙýâûŠéL:•NM&“ÒC¥É÷'o62‰d`$ŽÛ›ZuJº»hcàMéã¢0SÁý,|º–?»8ÕL§Ó9tè÷¥èîxh$t9m/*:©äÀ6Y'\§èy@no¡dÙM‘5µACº0 ,'‡þÁL¼ð\É3t#`}Ž`"¨G.@î§üV‰n’í wRðå䞪ÎpeãñÏGˆxz¢áG]ïDç]€ÀÎÜOÆ]¬ûb©øNgPs¸NËÌýj½Ýè)T†ŽB ªÁ}¹*¼8—äQTõÝ 9ÛÃXsgOmvsÒÈ•J©T‚«|P°íîå.,^>“˜Ópãt*†HR>ª]ªÖyÃüsx ˆ<:ÉÇ¿í¿kÏ\;3ÉMt2v»]ÝKé ¥Õ?_­þlÕõ"é(è,´aÏÝT½CŽ¥#é¼›æú`¬× ©,"q3üQ@òÔ!˜yì8~ë Ŝ℠û ;TCw¢Ã†’º'»Ð—î',Ñ'÷\Aÿ¼ßï'•dtáhø3Ãî‹»“É$sG¦ðùBx8Lš›ô°'Åuò´³áñ|Ê*B•=xDBhøkrYâŸc¼zŸÙrÇt \Ç!ʼné¦Da³»œ>}G’sP©íœ…¿£s|±q÷CÑ )¦È~(¹i·6…¸’ ÛOT-E2ó:=òù|.—+—Ë¥R©ÙlîT9ÛÜȇª:1¤ ¦Õ ɇ±2Z¦È 8U4löZöQ;Gó†cG0qϨöâoÜ<-º¶HÊÞRÏÍ}r4iÅ{È{ 4TÖ§T†¹\®T*íÚµKžðI’$©$¤Îœ,N"GáÊi²°Ýœÿ&æâc®áæ„4ý‚(C$ÔŽ|r¬”ËešC´Í &P›’BÂõp)æu8AÔ[Ž u8x>Õ™Õ§7~èüGä”qJ\ˆè>Ë€‹cÿýñEãÂç ³8Ûív;WtºÿW7<Òÿ#í ÏWü]™˜£–¢0˜´+”íHYZÒŒg:ý7l Ó_AÃßY‘˜·Éz¦&ò ü'†®TÖêº8“¿>Vþ“fì`„âä ]ÄO¹‡ÅœE*KæäæI`hHÅìÃY‡žšËå:N»Ý&äƒyž©—ùüç?ÿœsÎyàœ¸r¶!ä°°ƒu‘|×ôõ^=ÕnØÐl|)œ¤éûóɈ8.s B6ÜÃàrê‘Û·lõÔAox«µ‰ÛÀ8–؃ªJ¿ß¯Õj Ïý~?Œƒ£@x¿û¼±§ßï Qnp¶Öw‰§äši¼Ž~§$ø»óæú«Ùlvzzzß¾}‡Ö0„sç¢fÒVórv7ðhá!ÜYï\6"ZRRa#zñšTWñЉ¬ªuµZ-¸Ó.Bƒ× ¦®žš½øÒ‹Ož¶ƒltGÝwgß1»wÿÞ—¾ô¥×_ýÂÂÂ_ÿõ_?ôÐCã·ÛÚν-çõç¾·úœî{„ßqò^+Á§r•qv ÅŸÓ‘ÑM(—Ë!ù¬Ó¹ñ_óðì¼2høÍ)Ó”r•e Ü`n°½^¯X,Ò¦¦¾¤4ô©0.>%#;DÇë-ž¿²rt2¸³g‘L,Ó¨‚„Qí‰&UÝêêêm·Ývß}÷=òÈ#Û¥y³r‚§rÞÕ÷np0÷3ކˆHæÛR4eÁîX`¹·[°!GØÃ^à³9ý:hŽt¦éÄ0c¨U«3T‰°`-&p!E]•Ž3ŽãÔ£©ÔTjøÜax<äZ¹~¿?Þ7NíK¥&©ô‘t:“>coˆ‡²Ko¥$IòÌg>s÷îÝ?þø‰'üéù˜*,èD¹ÝA#gåÒãÑ!Òn·; `ã=ÍdŒ‰4~¼2P¸súÃV<ý½¯(Ý]±XT®­èR(Än’˜¼@¨î:CÂi£ ¥!Ü}Vw÷Êî½èE7Þx㳞õ¬z½.ôô‰Óíg¶K¥’êTÊ&÷І¥Â„“×j!ÅÕ:X™ú¡ äVèÓÐ=-—Ë—\rÉd2ùîw¿ëD/Â9œ•Þ –Û)¹;É™Æ-¢]éc=Ô1Î;Õ3N¥OÐEJƒ»sî5ÂE‘ôN$éâÖn=Ǩ“Ý:†ˆ·œ!%ùX‚¾½ÙlÞrË-¸MmŽ:K¢N ¥±N §rº´³V›vxZ0ÙP§¯DYK\Ën’nÎh`þQ;ß[Óä­˜ÒëƒxQåÜßçÌýœ‘Ž^å?œï½µ—:š·Ç!„ÑÜh8?Ì¿#OQåbõ?”‘J¥ÚíöW¾ò•t:½²²‚ ¼zwDFÌ?"ÎòÄèI0à¶u „Çâzª<|ïù+Âù©Óøï:@ ŠÜ—ù³j"%—J%]›¡g+QuâȘg²"}ñцuk&jž•»'<;$—ËU*•v»M–¤³H#dŒ[ˆXÝŽó:v?ùþ¤øÎâृÑÙ£$IÒ_MgîˤR©$€{øqÌõé¼~¿òäIgˆbsâý[Ž9wqöI)÷ow"j:ÿ…:O~ÝÖ%lŒ ËìÄ­Ït¦+T#fêÍŸ„¸pú· ¨•J%—ËU«Uõ±…§'IM¥Ò¨šº<Œ¨Jj†ù¤ÆN3™ÌüüüÕW_}àÀ¯}ík=öG¤‹ÙøÎŠ&%ÙŒ®˜ ÃÍ`C /â=×È{IO –ä o¢¸ ò§ˆM‰™Â[ ¦¨v]Ä‹£¯æ†~¤YèÏF¢òþ·1Þ서MÀ“zÁ…BáüóÏ_^^^]]uJ~0­I '7Ù*²̉Ý#öŠÅ¾ç£ß‰NèÈD63º¿ j>‚JIÊá©¢W<a4ùV’„õ;OÆÑ4„+Ï.ƈ£î<¤CYÇ=³úÊÜAÀÕ®|ˆ/âø6H½ÎäÔ5^4Õ-žõ`šzÑ/ôz=r}"°|lµZ­¹X,æóù™™RJhºÝîÚښ̸:%©~Á‘%Hºi®ˆ«âãåëd¿¯e¿ÚXþàòwþù;O<ñÄÂÂÂÒÊÒp<\;ÈýN.SÊpÚÒÇ&\ §âØ¢§è΄°¹œâ¯º¿vêHjŸzv…4wx zع\î‚ .xå+_955uôèÑ£G¢¦¬7"”’éfŸ)µŒ¨êà&D{Ê­†\ŒŠs_ ’7îE[s2?ôÉÀÄG ©'uUÄltª·&aµyÙDÑ Ó`ݱhûÑâÀhµZ÷Ýw³hxÏP§¹ö -Ç„Žg:yÍÎØ°ÚÈ®ÛÁi­æ ñKÎò ÓéthØ0‚ øãSº$Ùº£ðÚ‹øÈƒÇc[ØâRÌ.bõG$=zÝœkº~®'x‘#Ê10—°U],¡Ú£*‚¹à˜ássñ»vµÐ3÷“¸Y>ŸßµkW©T*—Ë•J¥P(‹Å©©©jµª§Ýl6ûýþÊÊJ·Ûm·Ûõz½×ë±TÓ¤R)Õ¬ÍfS+m0<ùä“*’`.‘ U~©²ú÷«í›ÛÝB·óÚÎð†aém¥l1ëz¯ÂëÜ90b©ÑÓ¦Æq~ ÐÎL£Ñ¨Ýn£ïG)vêd oË9½ó‰'žøâ¿˜Ëåþå_þ¥Õj¹ºWK†ç‚Ê®iæU;ÿ‹~«³4™‹rt1ú"Gº<rê U£<3}áJHBNäc ÕOzKaC‰€«BØòÂV›/ª¿œí4‘R…V•hµÞM%1ZÏ0KÙgß…ó„TË]ç…˜õÞb¡1dT €zÞGý¾X,*õ…îÓmîkë:ð¾RÙîþ‡`ÉFOجüiO¹$¦UÓIçF;žB† /"îUJY`µZ-§ÿù”œ+n‘7¸ õ„+üú©x˜I„×étŠÅb©TªV«333ÕjµT*MOOÏÍÍÍÍÍ …ÙÙÙJ¥’ÍfÅѪÕj­Vk8ÖëõS§N-,,¬­­ ËÕ2ã@TWc0ˆ_^*•ô–•(V ƒÊ‰Jöúlï†^ãUÑh”º#U¹¦’$Éxr†ŸíÆnÞîŠHzØL8‚¤ÀB¨×ë8I{yLî%U좒sV:]ý•••[n¹E‡5#çnÁ¡ˆD¸µ„ú÷ÛMÓíQWù ¥sQZ§›ÃßqÎg§ÓqÞ©3V€+}ªÖácb- øä”°–‚©ºyøñ¹é­çNÈÙ†löÛ‘""ìU`F¡h‚•9»Ó`8¦§Aüðî(dMŸ’:¬í q3j] aÁ€4~ ~î;|Ç”®’Knqf „O`¸‹‡ÀÍ B˜Œf`‡Ãá3žñŒ\.÷àƒ...FÔp7ª¦—„~¿ß×qÎ9çLOO×jµZ­Öívbk¼)0¸!z>:}¶‰Å WæjxB`U 4SMC°Ù·oßÔÔ”0{ö쑳~t„U«U=‡µµµ³Î:kzzúôéÓ™L¦^¯‹kÐï÷—––h“”ÅŠ„ÓétñæbúËéõ³)“¸îŽ 2õåR{îD“Ƶlý=Mloãsz¹ì•Áó¨Em‡ÆÂ…KɹÏÅ»9Á)tÞšÏ8òLpõRF¦< & àÅzdz­262£s ×`j:üøñýרƒaC[ÌÇ`ñåóGí|  yâ½’ý$ItêÙ ÐP©TòùüYgµgÏžR©´gÏak:ðNåÅåóyýBµZÍf³ ]§NRY£f²bŒ®¶\.­¨'”Ëåt!ÎÁ!â@’4xVîÍHY‚ŽÎq"«Åõ G§dÇ^jCKTŽn²Œ¤– IDATêôK*Ÿ­fa»æ4æ1Þw'7ŠÑHéÎmè¼ ²•GC_'šFòŒ“ä&’åfs9zÁå(îõi”†_|ñ%—\òWõW­VËÏ.*-—.”9÷Èo2ܽr¶í‡0ÔòìÛç±9²Ûí69Šî°›…ño½Î¥cɲ¦xw]&æ}œ‚UÎaáÁ@ûGÛœö ÛClov¸·A?"’ºþ¸ 5D^b»Ý®NgRº6ˆ^ú¿ñÝn÷[ßúV>Ÿ_]]®Œ˜ÖQ1 Iœ«Á`püøñÁ`P.—Oœ8AÏŸ4¬œó… åÿu¿jTèh“7„Ê}5`ÚÔÔT¥RÙ³g~í¬³ÎšžžÖµ1êO‰UQ,<¨ßß³gÏêꪘÐ4çËå2ͽy nØû.ŽÎôϳP(ìÚµk8...z<&Í:¦˜ªrµMxÞƒÁ@ ®Ë/¡Î]è^ú·ÇÝõ^Y ”ôŠhr¸õªˆéÎÓã×Xrùô@Ëü—¹îaêâ¹m±‘#z*÷ÎcŒ ÖÛÖÉSõï~÷»>úè©S§´eºÝ.\s>?„€¶!»Ó>ý}턜m«r"O_#§]ï ê&Áˆæ“}º¤ˆtÏ."×&Џ°4‡5£3NÑq¾f0¹FàØAÎ%£1îNØÈ½ø¨Š:sÊxÛ#'"«rx‡‰Šô}¥å²iîäa›3¨ÛíêºÝîO<áŽX.D Á×i¬úÞf³ù‹(×q¯“H©z¥R)‹år¹Z­ê¿ª©S©T¦¦¦æææJ¥R¥RI§ÓÕjUåŽÖÄ9‹#å=uJÏJ¥R­V[ZZ‡Ýn·×ëU«UÊJb¹ÚògNÇ hPh…®›ÖÉ®]».ºè¢………Z­F³„x¢¥Q纫ÎM÷^‚ß05(‘!€vå†ÖîMàà®AÁ,r³få0ÝéP(°‰]âÊžªK"³"X$¾ÞX¥nNƒ.5kÉ+!OOƒiPù”(z<°Ìù'Êf¸]ÛÊÊJ½^GF½T*¹+¼ˆšîÅågËŽEÛö÷rXOl3v‚;ÂRyè-‹E• Ò‰¢zEIÐ;4NÙò¸âOQë’™“7’$ˆÄ-¸þ36 åç‚/0HϦòVËÊ1;.€ž¸‘ÄEBô®œGüë÷ûð˜y)óóóÙlöøñã</q\Æ*0š«÷H[±X,Ib;Rê:u¥RICþ`€…BAxúÁƒÕÀO¥R³³³sssú'ÅbQ"Ç={îùÚ®¯¥“ô3†Ï¸©{S$†ÏwEmEE¬ÙÙÙ]»vé5›ÍÁ`Ðn·U9ÕëuîN‰¼ê`wR›]gXÀÎûH§Óívû‰'žz›MzªÀŒ.@£K ív›h¤Ë`úÑï °HΙŠDÀ’—QÏ¢6£¯Òшp*´õ\½ÕEäs` Ñ Gª=Ž:±˜Û÷BŸ=™ÛeJ|>Úý¼éÌyàT¤ß*¸‰¤ž‹øEÄQ! îHZ}Ý>*ú·;!g~Èvš°¡CZ§×Y©Tt:C¢ªò´^\àOï½VÐöè$òJ!f"&á@ùâ#Z•Je2™¬­­éKQï *ø¼KÄòb»FCéç8X—-(Ï«xFùçÞÿÔ?ït:‘dØ'€ÿŠMš‰^>J#ËKɯ#l?ò{ïÞ½»wï`4íÛ·oÏž=gÂÖ:…ΟöÆ—u_ö«Í_M¥ROŸ¸nîºw6ÞyíðÚt’vZW0­68Âå4íßëõêõz­VsˆfffnnNÈ›>GëpuuUž8{ªÜ,ƒª”sêèÑ£>Ú5í!õQF»x9æ„>òéüIÎk%.˜«—Ž@޲>pä–wª§Y0ú5J†‘¼#n‡»a ~ .> „N|m"f®}^;’òd!ÁSPQåÒòQñ-ðÖýuhíøO0ë)‡‚‰(l7}l·°Yít'älg¼á´%¡ ¯ÑöcÄš4D©´nÄG &ljæ’ê[HÓ¢‚&b 9äÅ>?oRaL%ØEºð\h-AñPJpÃlŒÜ™•AA€OÖ–CBá)}—'¶:ªé@öŸg.šà¡™÷ûýÅÅEúÁ4¤rÈ›|SÿD$^¢>¹Ùl:Œ®¹<³ßÊ0ªÕêüüü¾}ûvíÚ5==-"Àüü|>ŸŸšš*•J`tÓÓÓårùõg½þ맿ε]Ü»øU½W½uú­Ö/<Ø?ˆÁ+e xß*Êåò¹çž[*•Ž9¢ÿ*Q :Þ¦În÷'ÆjÈYû!auSR‡Ãb±(È2.V­¶¢}¢#U ‹kê1©ƒ+ªW¼pù^gEÙ ƈê"¸:¾©!8»5ôÃ0£Sø:o'8{•$2±K]¹©¶¨E0Á:všäÅ\aÚõ™Añ±êNM’À .PY™Ïç»Ý®?Iî+lÖ Ž¸Cî£ìT=:=1±²Ùl©Tš™™)—˪fˆšêv0Ÿ|šËånÍßú²ÞËÜnG—tMÿš[K·þBó|ôê—‚w¹\öŠ9ŸÏÏÎÎ*p:tHÏJXßp/Fu§Ó8 ꥣÇ/Ájut l_ÅœÍr7*ô}Ê„¬g4ùèö^첨8Ž}äÖù`<oÛx­C„óÜŽŠÙéš>=­%§ïÅX=b­#`Þƒ ›UÑœmp‘L’†Íþ¡Î>g­* áÙ*Þ»ö¹Ç Md,NмOe'äüïþäŠj>N éÝ¿h~ÅGÓùð°y$˜f,½A'×ûæ2Òùy ,àç E>ºÕÙéΜŒÀœÝœ/”&ðjhH’úÉÌ“ É“Ç6÷ù¦€³×[ Äƃ,ŸÈmɆ`NÃȰ³jݘP‡¿Y›¸ôYØÐÁô ºÇLáWÈÃÑŸuÙ Ïú:"AĨa>œ` “£0@9þ †•.s¢'év&Ní“ §J(5TvïÞ-á€J¥¢°!›DD³G¥R)K®ð¹ÛŠ·}¼õñ§ž>?Yüä2ø«Æ_Æ]5IÃqìðûìápX«Õð0žžHˆl]¹\VH@ÞšC¸Ü¯^™3è·ù”1%µ3Ç´ÆfggE B%ˆÇëÂB[E‘¹S@…­^$õ¨›xj¿@aðY‹«ã´ô6ÜSއ®¹×ÇLx.[×Fìtÿ*g+¸•§›m»{ÖVÁß^¯'lÀÏçXºÔ=Ù¤ï¬B¡ð´§=­Ýn?ùä“®Æä2¸;!gÛHÒÎõ| R2 ˜.‹ QÙ.ë$Ý3Vo¿»ÇP˜Â7‹Ü¬Ó±èÑ 𖝫ñS‘ÈaÅ3)¼ÑɧÍlRZ_Z©TB+++:’pª‡!Ô©ƒ¨‘–í3O"h0iD|…߬ÀO¥â§’SÛ¹ZÌ&0Š4†EÊRwAßè4™L¦§§EBE/ \.ë]LOOW*¨óBÞ4“ËåîÊÝõýì÷¹ýËíIûÜÁ¹!„¬} ¯«¾î/NüÅò?¸ {A§ÓQ÷B£]teÚí¶n Ê$I:Ž"z&“Ù»w/ò©úûN§S(æççpQh¬Õj¥RIsc⛈] hF) “ñk.ZÁÀ nâz€!„µµ5Ä“”¿Ó\Ù éöiº;ßš|™Z¦„â$e¶T%ùAK‹JkÌ·^Ô‡»Èö!3£v§ç™ƒœ<ºH$ÉÕkquލ“qöž‹ïÒ ¹‰5¯G­[®V«—_~ù£>zôèQÑòNÈÙ¶^N”‚9÷ÌQlv”Oç¨õL@'·ÏúxËÑíQ¨õÌ$Ûgy¹_@Da ØxkÊÇÙoð¼»KwzêÓ¿Ñø E…Ò­«ÕÕÕµµ5%‚ªÕªÞi©T:묳BËËË ™® #uvvvee…p¨ð,yP‡1©•a€b9óÐu‰œÉ[Pî Y4¸†mL”};ßÌKg¶C0[OúOn©ç[Ò§ý=A+‹DͱÒð[ó>"ÿêʉ ‘°¹ ”¸*ƒ5hg¸³C$I·µøpw†°E”kPŒáIêÏKKK·Þz«,q½¶%ÎNȉÛ9‘É4°ud^â&µ¾“ ›ÇËßâ@‹Àծȶ¼¿°±Õ?O’¤Z­êÏþ]NìÆÄ{æ”ü:¾!°yÍçGF.—;ï¼ótŠéë ¡Ò“`ëê,vï÷ˆ°K<¢ÃñÎŽónªœ}}$ÞÕÒühZ#<^o8Ú@üPPÑ„f9u€æóyý¥R{ý&zá™Lf0ücþoZ½)I’w·ßý¶©·]7¼îµí×–’ÒK‡/}ßüû~¾÷ó3¹™_›ú5]ä9õ_2I¦ßïk¢BÒjµu#úFµåôl~o\CE`šê'M¹ú–ãÆ~4+¤¹÷9u”(°GcΪo\fÖ>½\hÇ€±0EY€Á,טÓòE ¸í·(Éú"gûpw®ˆèü²7}ˆÚ!.Qá N§N&:¿Z¶«D‡ÀÖÞ 0šN›<÷1µ ¿/p0ˆê‰v £*gû9ÞÜ‹¦ %]L©IÀ_ m%gs¹z ‰Æ¯n@Uzœ“̓–“ÍÄ™Îf³_|ñE]tÿý÷ÿà?ð=ìÎ(‘,Ôç[5açŸ>m0þò/ÿrmmMÉ^š€þ9Ë™&P'¿ ‹ƒKÃp;E€ûL{›ˆ˜Íf»Ý.,^|ÀIXIÞyÒ²Žµs¬T*)«¯#Wýð‘¹äˬ$EevíðÚgŽŸùõìׯÛu]H…fªù†ÿáPúÐ[ªoyóý“0é÷ûïÜ÷ÎsæÏyßòû:+˜t:-5R5$D,×@îŠpÎÕ¤âA0×g‰€ÁEâG^ˆ’(ò¤ óAWõ Ä›H¹šú”µZm'älçï÷*‚èYDÄô‘4OñtÜxx ©g¤@E€ÏƒÑÉ€2‡PŠ7o9ô‡]»v½üå/þóŸ?™LŽ9¢Ù:^\*æ[ÂeêIµ"¤(¬Õj>|˜Ëv. fÓ›ÅQgŠ¢KäRÃãe6Ðs:Æv(†*”Zèb½xòž–Ãëz =súèKK¥’¤À&“Éììììì¬Fý2_§Ïì÷ûkkk{“½÷wî¿lrY¡P8w|î/vñ-­· ÃðoJóÑÒG_ÓÍ+z¯øÝÊïê^ÞØzãcÉcŸÜýÉ_Kÿmê=[Å!̽^Oó7™LfjjJ=3Š­R©ä.¥BÛ"Âd7iµ;?ÞÝhуÙ6œçâ|žì{óÃw«Žy/½‘Ѥ^5 9L©‰#„\ýBçøC ·A¬…tãv>[¶Ý?ž’š¨ÃDA$ÛˆBiÓåÚàºf§o(iPV—Éd:xçYÞŽÛ·Ãÿ„Ð1??à 7ŒF£/}éK;s9ÛÜˉt2µ¾]üà XjvwIòÑB¯KjC;€F«£môùa7::G’åô•v»}Ï=÷,..>ðÀ>¥ŠV§ùܸûŠ2¹íÖ8þ7lT¿A‚Væª_‘IsôÌðÁÆ­€§Oá)Ï¥åC^‰7Zú裹G—'ËÇ‹Ç&õ*KÜ ‰sœ“KÈ £µz®÷,ËQù›¯1Ô)Þ„¼M#‘ç™ÊèÐdaЇ+á3ÂÙ#Ù/sƒÉšyÈŒH• mF¼ÑèÔÛûÄ­^,‹f<úÖVõéBsü™ý¨uâóª ½ù„Ÿwv]òÎu—JóÂT9JÏÈàCï½×ë>}ºÓé(Ø 9ÛÌŽ"£m®äþ`ޤùnüîÞχ„Ê#“Ì•—`^¿Žü@اÐ%o·ÛwÝu×ý÷ßœy‰';ÝjW—Šö’‡Ÿô©Rç h« Þ3è_Ú!dþ:“ûjŽ(@q®àÓv&–»<ä"p÷q\H‰ªê*¨€ª2U@Ä>ãŽâT«Õg>ó™ÕjU²fÕjUÑE^Ÿêåè}é-è2Êåò¥¹KO=þ+»åwš¿óôðôñxü‰Ò'îJîú©îOýaùÿgãÞ0¼a4YßoêÝtËè–7L¿á‘Ô#gOÎl,—ËRó¹@¡Ž‡ºhx8Çc±Ñr$kïjÇ>óö¾Ê£(¹ñn¢)³tûÀ?9=õNLf©à:µ©½¨­MƒMmG‹Üåh½?ç…û¶½>D@‚KÅóPVt1ƒ ñHéü‡j];ZîfÕÐ^|šµgf?TNÛ¿WO‰è®s&˜b!׳²²òo|c45›ÍÁ›mÖ¢Ö:|Y`\ø¾RWc€ŽYnö€j¼Õ=‰×)Èì®°1w5º½gèôS…„f³6´RtÚÒZwšŠÃôn‚Á޹9Fçõ…$ô¯ïwßÕÍýAnæf:Nï§{Íw7Ko(…ã›(Cdxλ&•£y.)=“:̨K:'’4Ò\x˜M+ ²:ðÒ~Ö³žuõÕW—Ëåûî»o0ÌÌ̈E­ˆèTD½£™™™©ñÔ›»ond¿9ó›'Ò'Â$¼µýÖ÷¶ß{8søçÂÏ]Õ¾j”>£Y>_ÔÑ/¶q8Xoã'I¢aRå ‹‹‹rVh”ãÜòòr·ÛUdµè d³ÙµµµÅÅÅF£Žô-—€ÑФzc`S1¤6%}–€á\o¹Ÿž?gÀ4¨„+€äyÍŒˆæ|TH9¹Ô-5ÙªDAW„’BLä#ç9¨>–KPP]££|¬i©Tbò;¸3𔼣¶ÈN+7rsO×asA£‘Á+Ûg4-//Ãkß 9ÛÏXƒL‸«¥I‘^ý[%DX3yì!ôþf†™ø¡ŠG›ÖG¬ñº¦é­Ý`#Üäª @1PäilØìE‚(ßtª·ôQR©Ôpß°÷ºÞÜ+æöïß¿gÏž#µ#‹ZÌþ÷lë¶VáÅ…3„Àý©Á³©T*¬…ðÝuÝ ·6 »à3­èìª9ƒÓ–|†T2Ïh½nå/1"£x“Ïçgff$áB(—ËÒ-–¿µz9î@LvÌÀJ))ÍŒf>ÓüŒ2 ŤÇÃã§G§kÃÚtfÚûd­ÐZ KÃÑކbp·Ûív»Ífs48p€Ò¡ÛíÊÑ X,*%I²¶¶¦–@è *.5¬÷‰z$FÑi¿K‹uZ_6ú.¼n½Q‡F”Ë6Ý¿9WaDÚKúy=4 É]¬‹Œö¼>‡dѵ$$èn<+¤`‡ŽF#YÚ¥)¹Ñ¤”W?ÄTgµ„ë“!yF$Rý[õ} oFJ¢È/|'älÛOdßâbÌÈ]jµš É?T—†n{в)9:VNùø¥z¦£CŸd-Ú¡ášbE¹Y+>Š7‘1ùaω:íŸl¿ZJà•Α———ƒÁìì¬pT]R©T"YVÕlÚ\ åÂý~¿Ùl6›Íáp¸¼¼œt“Oýø'öâÛ“oÿIëOtÍïž~÷Ãé‡CŸÜóÉoU¾õŽï¿C#~mmMõt½^×ñ*³œÁ`púôéV«¥dV¨š~¿^¯+Ì(Þˆõ«®œ;ªHn…Ì”ŒsN êIŒ˜°üØ ®Ÿ°ÌCÓÅú<¶œ¼›âh!ÍK¥_¤í|@tÁå- 2;+5˜ˆ»º#¨_#Ä×ïë\¤Ù£—‡ô ›Üÿ”Gáü”ð_ˆ0á„n+ ŠPVwÚÞ 9Ûrèjû¸i®JT&r\l }Ñ”‹9¿a‰S¿³@aR’³h»º†&“6¹*D[M.z´r¶ÿug>J="r¿)*í>Hô´xÍÝnÓ0FdÀèH\ýÉaeúú Æ»ØÉb‚2hFÑy/®Übæ$í| ¦›©}ë$º/“É$÷¹ÖÿÛ:õ¦S·ß~{>Ÿ?yò亣×;†å«ÊÝtuãÏ}îso¼ñƹ¹¹ÑhT«ÕZ¾Ÿmæ IDAT­V*¤FÃWåØý-0 TƒA¡P¦¿‘Ãéðþ õ»­ºÂú"éʨ¬”…@Heijn·{ìØ1•’FjÃT*•·,½e*=õ©=Ÿº3sçÞáÞ®}°<,OÒë'B¡Pxný¹÷LÝó¼µç•R¥|>_©T´T‚ ¥èªT* ö 0­V«Ýnw»]KzNØs{rÞ;÷ëZ8^_úŠÏ”ø J< JpòqWŠŠR´'\Z_YÊIQ£žýåª6äþ®Æ†v7ÂJ ÚÀyÖ«íÁµƒáeÃQj”J¥R!.““ì§³.ù£â Nd50¢ÅFiJ"·OÆd"XÛÐAŸI÷‡ $¶ì~Åb1ª‡vBÎ6T9¼f[ÐÉ lò.¦{r¸29ˆ*‹Ì³'çæÓôc…VÕ·FÉ ™»$¡“_(_3¼'¯9œ»P`SjOtA¨ƒXuŠYÎdnϬþùêä&Ù³Ýn·÷ºÞðÕÃâïG£Ñd|¦GÝï÷WWWkµÚ:30LB*s A<˜étÐîáç—+º²µó§i »Ù0>1„g¥™ºµ‘¤ñ£B÷›²u0,///,,¨¾Q…$ÉgÔ r¹\)Uz×Ú»>\úðùýógR3!{†t”Íf_¸öÂ/œÿ…b¯˜çêõúâââÞ½{ççç¡Ã1]4;;«/‡­VkyyyyyyuuµÝn·Z-)ôÈí3˜\_ •VZX`kÎ`9C½LBçf‚ø*]‚“±Y|¨Þ¹¹t&=Iz‹ '¦>Úšz!¯ÍaæÿËdnÎ4³9¼d&!ó—™ò;ËéÓéQf”úýT÷Ýéÿ<ý½ï}ïÃþp’$?üp»Ýîüf§ð{…Ô(•JRÔˆ”2ëgÇôd<3®ª®L³ôîRöX6×ÈíÞ½»×ëÕëu7—9@ Ó›X”ºÇ6õ%ñLö𨄏L²S9ô:úý~±XìõzµZ­Ýn/,,”J¥]»v‘OèY¯žÇ“$ »Ãî¤ÛÌ7ÿhöîž»{4]súšqvœËçz«½ÅÅÅñx|ÖYgJµöP°Wó&•J5………z½¾ººê2K(Î… u(Ñd43úÏzà½^hFŒó°Y)Ð/:Ó-eW,FƒÐ y9µ•Û©|b  Ú:þ¦%]("‘i·YrÈ.•JM2“ñyãp"d¾šÉäÖaêÌw3Fgtã(”¤9ßf-±gÑÎáy¢º õ1ò©óÒTœwÇ­¡ÒN¹‘_ƒ¢ŽK±Šv€µ‰*‡§)çÉèH 6!LéCpþ*ë”úì œ§ ¬ô–-Wd)„(Y¡Ö–uƒWèö®é%é$“É„o‡Ð8ØpSþ­ºñÓ~Cæf0ÍÖûóý$9$oOr“õ'Ò!¤C’$£ú(y(^=<õÈ©Ó÷œÎçó½|¯{u7•N¥Žž!s¸ 29gÒ[?œ*WU´Óš¿ßd»þn×åS—;vL£ÔîŸÈk±5lxÁéyâ6 ³€q(ZñÃá°\.kÈ|jjj8¶ÛíN§#/ƒ­´A[Ãá°T*I ºV«íÝ»wjjJ}MCy¸0uá©Ì©ÕÎêË_¼5믷ý½ÔjµÏ~¸—íý[ñß^ØzáÌÌÌôôôüüýDz4¹ïÙ[{×ôræÊ¿[žä×áˆê{ªýörñ¾Ü×ét!pó BOñ¢ö».u}x”KºûŽ˜Hø¹ée5 zÑúü¥¥¥‡z¨V«iT¥\.×ëu˜V«5 æææ¤{¦YŸëû׿uî­—%—}#ÿO/}:„Î¥gffJ¥ÒM›>röG^“}¬H%é¨åÑjµVWW%.Ðl6WVVÄ„ît:­V«V«­­­­®®jˆ”È•|H<<¤ >4Å|N_‡ª]|âõ0þ•ËR‘Ï9LD%䈑Œ% ?͵“•)²r‚ùû‘<1þìbÕ„´H0²ó9l6;77×n·Ûíöºþt’•Ð*ŽÙrkÁ4>(€ðüWú‚ÊK\! ÃA~O‹ÝàÕ_´+îDop'älçO4;e@äDÞ½t¸†ž¤‚6€25UNë ö\NëÉÅÏÐ}އ„q«g Š—5Ž$IÒn·ÃËCê9©ì½ÙÌ72™tf8Ž^0 †þ[û¹Oäèâbè â[±NUWž¥Rú°y@ÁXðh83sú¡dò´Éä²Éxÿ¦þ›þxφ#¡”µTííóoîà¹W¦¯|GûÛõ±›Z7a—©SiaaáÔ©S+++F£^¯×ëu…©4›Íµµ5 ŸªJsjÞN0dÒ*lø¸ ”>˜¹uØÖ+{G†yòzídoÇI8ï´9àx¯ËqúÔ°©)„útA’$Ýa7I%t•CÖ$éÄü.@Ã&~àÛ…8CdŽÐ‚?,Ôs/[)eÈ'$·± sŽ Ó;$é ®šËwê$•x"Œ)'ݺ™t„ 8" ¤ƒ§×(ž ÒÚJB¥È@ÙZ¶(úZô*Çãqº_0NJ%_K²ùìzWº¿Ö¼q.¤“Q"á ˆ­D‹h·èÆõiŒ“Ù{Îæ !‹E`¥ä©${jÃn s†¶Ç=úi’šM%SIîT._ÌïÙ³§ÛíÖjµÁ`V¤3ž5Ì…3–š*YôÏE@ a$Vt!.Ò˜ÇÓÓÓºÇÁ`P.—u(ˆ§ëi·ÛÕju8®®®ŽÇãJ¥Òï÷+•Š&4ÅÞ^]]m6›­b*OOOOMMMMMe2™ååår¹œÏç÷7öÙsäÍÇÞü“gÿd6›KÍ}¬ý±L'“éež‘yÆßîþ[W.õzýäÉ“'Ož“H³No¤ÿœ~ê©üï䉋sª•}>ikÅã)všª¼dëÈ9ØžÚ\ú0¸¼Í`Bm*·ÛèÒ¶r‚3Yî­ Bû‰Æ>(Ã| æ‘jü\û€ò·vtºØ«7>9A—b=ñ¹h<¸bPü•b*“šžžN’deee8¦þ-•},Û{M/ÿù­®VL,;^§mé6ïôxhxFü`-k—^ziµZî´Òô®/O º>ÚNÒH>óè&a«o88e¥Ž3ç_é\û™†s•öŠY ™›~¿¯«Å†Dá_Seyjù®þ]ý~fmæ²ÕËR©Ô¾}û²Ù¬êé=ƒ]»v8pààÁƒò¨×êZŸÙŽÎ{è¼þàÁƒwíÚ•N§WVWF¦?žlRÜRAS«ÕVVVNž<¹¼¼,ÖŸÞÝÚÚšLÁµ<er&=t,ÈǘU{¹ï˜OähÀ™î…’¯jÖC$Lœ7îÊâüðÊÜÑYîDív£3 mDn°ŽˆâD(Õ'Þ¤P@ñ‡$6ÓaRO¦Æ—Ãÿ²ÿ]g0^5§J ֣䌈§nÙ«=O:#nw`DL9Œƒ`¾éž(ð0©¼Ñ9Œ¦Ð\6‚ЮüÒÓʳ ?ôH£’ß%Ð# »Ñk#R*ê+ÿ(7wb?l5N§Ósss¹\îøñãú(—4gÕîÎX ŒÆd”:©Q¸ކÎ6è.ŸP˜|Ü/Jl1VáÔÀÈ@ÿpiiéøñã:Á‘Ô„"A÷•Y¦Y³Ùlz!,'½‹{ÉÃI­VCM²ÿ´þ¤:IÝšòÀé‘ü!rEX““âüxu¶˜sÁÕõ<ÏèjÿSz .L~lýÞSýTòT’ý_Ùq‡”[°/¨oþ½ÔÖ{]mB߇½ÄÀ&×´+ÐûNÄó9ý<´#ê•BLJ゙z‘‰8EÙC’W÷¢a8.yåѦñ1õÈ¡U%3%ÚãÁ,èAŠ|Äsa4ù9OtÝ:EZ”Áiý_P\JDÿ×óÖhÖum.LÏöèÑ£Ìù´)W®¿”(–Ÿqãñ8YH2«™Éå“Ô#) ƒ\.7>{<.³eSé3G!i=dæÉÑù‡¦ÁÜ~¥RÑu …™™£q6SÒ .â©@³Ï½øsW/_]\,Î,Ì‹ÅÌ|æÈ¾#ß~î·_TW‹Åâù矿¼¼¼gÏpQá'ý~_ð—öÿ ¼ðO®ø“Ÿ8üÍf³ÑhèINOOµôÕO?ôéCõCº†ÕÕÕC‡=zôرcâg£ì=ø`THBit#s9Ôã™–ÎDìƒhº"*Í0J+=gDð¢q7÷Oóy ²õ`Ú Î;ÐL«cA°„}€»-dŸzFâÞ‰. êª"ë ç7sé[Ò뇢á¤ÿ%íf‡ã!ÝGfY‡ÞA 柆û'_M‰æº.¶L´›ÑŸ­RîPìÄŸÿóyÕm®å2㨉ø¤ŽÆ}çææ¤ ÓヨñûA°ºº šáÆÕþkÞ’=ã¨ýØxü/ãÞ½ôŸoÒ˜ —‡Ô%©ÜÍMRg: 26Dަ» +CÏ#ÂÖ"{S·Õq|€ã^!Vÿ!wísfž\–;ÿ™|çÝÆ×•·VB* &ƒú«‡•PzO‰ÔU±¡ùxbo¬ÓG¤}¸Ð³°ÙáTf3rEc$K‹Â9Ë˽‹n¿¨Õjå«ùb±8W™»`pÁ½³÷Ögë…“…\.7???33#¬¦Ñh4 ‰¶I€Np2™¤‡ékpí{¯~ïk{ÍÙ§Îîv»wŸ÷]O¿ë—¿òËßk|rí‰'>üÔSOÕj5Ñhœpqãôó¨8eÊà> JDÔBçb"etŸñ×꺟a³›ŸGïpÐuËZçU‹ŽA¥«ï]]]½÷Þ{}Zh+¾%l.'xû0Ñ`¦;¢ ùæ™FQÈ­Ç9¥Áæ¸éšDô Çë8`¬ eÎ}Á‰…¡îfðA„.IÁBÁŒñym:Ö‘ëNÈÙÎÑ–©óǼ ›í“}^[*­?&Ø•&#õŠŸ¹óõ÷:ïüÔ†ÀêRi¨òøš>C•†ðx]9þÃôÍét’N’d|ÕxxÎ0y0¶†:ÓÆÚÿÐ]ÆÉñ&l ¨2lá $°þdèdŠ;રõ|†<‚qÒéô¤3) „Ô|ÊRgàBäÔN‡aR ”’Ï!£¢ã3Åa³!‹[?}ÚÔÔÔôôôââb«Õ‚îåþR óz‘­-…‹“ÅH§9ÌIc!zT-î2G•F2Ç„,31Tf‘QÁµP(0åD›°Y/Çí0œÐL.ÇߺˆyH´£©L=VÙÖ.ÚNÈÙžƒœóe.«9°‹¼<âÀõ^BØàrÝ£(òóÚ‹to×GþoøŒéɼ’JB>Œ/÷»Ÿ¤’T*5nŽ“…$û¿þöÞ=Èòó¬ï|OŸÓ}®Ý=­™ÑhuµdK^YrÙ.|!ÄÈÈ›ë¸À”o›wI¶6@ذY Y ¡Öã@ʆ@²„ÄÖ•pó…õâ²M ¶e"ËÒè®ÑHž[ßOŸîÓÝgÿøNôé÷(ùsÛtÿázÎù]Þ÷}žçû|Ÿïw¶4 ê¹0;zM¶úº™—EÚkîQû¬ñ³5 ‘2ÛÛÍU‡:´‚® Boï.|ß$¥™Ö %—»\Î(QÉ6ÎÐÜ4ó 9ó€s”±&“ÉÞþÞsÏ?·°·pêÔ©k®¹&DµÔ²e¶üñëþx¼2Þên•FyàÕÜöìm¯>ÿê^¯¦u96XYYI-¦ ßðÿ~ëv_î à yË£Ñ(LèÐ¥Œã™Ø–Âw²©M0µö÷÷]ô¸ i>´y\ÕN)‡2ý—^å°÷9ž¹L¢ÀtÆÔ^»àï%æ—s¾‡—|âÄ ÞBM³’\œàæ—ñæŠi ir9°eH(`z:@ТÊåI­°¶¶¶¸¸øÎ'ÞùØè±‡ËÃãñøî›ï>uý©TfÍfóÌ™3×_}„‡G£Q»Ý¾þúë—Ö–VWW›ÍæÖÖÖp8ìv»óóó!Å5›Í'2×V§4ÍTôÊÏšë‘ÿ4Ý‚²l‡UpŒ†íZ ¾¢q»> ïEénQ{—˜u]%Ì>0Œç7Ÿo¨ƒ½–T#jÀvë=ÒÝÌÑaUjM P¤pe|rŽ,ä¤7yßÝi»Â (’µyx4½Šµµ52Gmú+ô˜W  Ë8* µ+ayÂ8*Ù¢#BÞ5G–¼¸ Ò”…¼°¿¿ÿì³ÏºEж›}¾x蚣aZ޾2×"ÉL&if,..v:µµ5þ¹gkP:Iþh÷šR° *QêÄ’\v»,‹ç™Oèv»Éî3)ü'6§NÚßÞÉø%ƒÁàå×¾üîswÿÔu?ÕZlÝÔ½éšk®9Ý?}bæÄÖÖÖ¯t~å[÷¿õ•½WîÏ]­b£`}}÷ž/¯)¬‡Ô+ x´Í«‘)NÒ8ÈñR,Šœ¤aww·ÛíÍ3UÄjcÉÀÜ¡Lý]4DY5–ª Ú†•Sr>Ž‹Œ‘µqÀp8$JÌc¾,_…"á@ MšÃ äƒHhøßr W6¹ÊÙçc4ë›\›îÄz2™d°ii)Ù4Ö¼#°±«":ÿ—ø U4‡QHSî¢ÎÉÖe4/à¯8q7A"WøëòåËWN^yºóôï¾úw—ö–þê𯾦¼æúýëÇÍñfcó•ÃW6ÍF³±°°p_ã¾gO?;<=\]]½õÜ­§vOeUìììôz=ØJN'È[Ù”ƒ¹’N§“QPôXƒ€¥ˆDVÎŽ)¤Étã\†²†yž°Š½*ÌvµÚôaJÊEðR¶6mäL'Éò iÎS²—ÃVfLY‚x'lзÏuâ³nº„%JÁrËaÇ@Ø'2S\Q€é® *) IDATª¹Ëe9{Ëò®^J%$ï€ÊfD%‹'L*I‘®È{<ÂvÎqÈ)n‡TŽîp@Ñ¥xÅg°øÇ E‘†Ö ôŠ<Ïli5ê:ÁÍÏ"Í7¶ 0Në×z°±¯p@ ªåkÕ“‘¬͉O¹CŠW‘/ª‘òp8\ZZ $Åງ~Œã›^Á“a6Ö]S¨Ýýô½—îíÎv¿xãÿâö¿¸ùÊÍoþÜ›ûý¾Õ”ÝiÈ#êt:™—ä9çâmïÄá̵Å%’q¤8˜yWœ]*W ÙÕ†R²Rüô›ÀAvÅRiČܑ5¿‘”›› ÇÏ/–qC¶ƒMêÂÚÊR4EŒÊòÜü S{ú¾‰;¯|~ ¢š366uÅuÑøé=N¸eò4+™!h^–c™[²í=K‚æÙ1°vÄô¬’ÀVü=yGm%­Ëô\TÖy¯îµššâ_°¼.i W%í|Íç1éxSø-Œf“7»¡PÏÁ96ó’€Mœ ‚"}T ¤ì|þTf ç•••“'O2lT”åË$@Œ•¼!‘ !­ßï§’HŸcnnîJûÊÎ`ç=Ͼ§Ýn¯ì¯<¾øø·í}Û¸9þùþÏ¿©¼iÒžl–Íï¿æûš}¨”òààÁ_8÷ ÷\¸çÉòäû_ýþáþðmÿáméñdÐsW ÜXÍ ¨ƒ†+­ é¢ÙK± TÆÇ,ºÁëÎÙבÏI Êlõ"ÿ@¹¼àîzP¸¸±Du±ëBêÌ™3¯xÅ+ž{üË¿dNˆNîs XEÎë@…)PY‰ ‹P´yÒÓj›ÓœÝç”ˉ”ת]VMö0uN¨3pí8(©mjt³f<ÖÍ–¸/*IurŽU³‰ô! ‚Šd̼–MÀÓ¦èØË2”Æ&º°ÈÈC“¼$¤Ñª)‡…v8a)fgg3äa¸Ã‡‚ýٱѤ¡åq"w­Qcd,Ôп‹OcgZ6”ü‘©òÙÙÙHjš`Ù7Â-ny€*$­ùüØçØô™9˜èŒF££ÇãqDçPZËK ;õMt˜ö{}íGñ±_Œ÷ÏÉÙ“7•›zÞdÒÜlþìÂÏþ­ÑßúöùovæÙ¿¿ö÷ß½öî™÷¼ú=ßxá¿ý‰o¿i|Ó“×=¹·´wºw:ÖÑ®¤#ˆ®ä”T!°¥÷N¿=„:n8Ü+aS˜ÐÃçwÊÁxlÖv\ò˼kž¹ÅÙÌ­²4Tz?¼#÷¯n#ѰL”š››{ÉK^rÏ=÷Üÿý=ôûWfÌž­7S ø37ÃŒ‹¡opi3åÈÆ¼å‰d6X±ZÜûá÷#€–ë ó0ÙI¡C:pÓ–´¡«W͹ã7Î!4ŸãsÄU¨Ï=°â?ŸŒÄ“ÚÛšи–¥£©y}žVìš”ó ñT]µ4ºY©Îhì·xiòáì²U(åõÁ…>~Ûãxæo¾ëÍúº?}ç|çÆÆgº³Á¾(22±ö;i™˜oùK¸–„[HµAœÈLÆC{Ï‚›–Ú›>s™Mëï½ÃF`.•j’I¬zàžyæ¦ìhi8wš–f—XÛ…XÎ=æ (ѪY™Š¨æ9î"õ ctÆ3 Nx–Òiò-Ú·|#—E5C¯y†Î·ÐÆ%Ù¸sSê8äY•XäøáÙ@iäT“À„òê +yÏ+ÉÁσäS@º/j´nwwþÝ®"«>øÞ-³ l[m§Ë .¤)ÍL€­ÛH¦H«Î™Éß…ùqßÕ«;[Pþ,^œu6ÒiM V]‰(«««øZ&›€£ß<䦽^ïäÉ“ív{¼?ÞŸRg0p¼;¾¯ßÛ¶ßvrö¤Y¹¥”7ï½ùc‹{ùîËK)sí¹k®¹&f<1ÀÞÛÛ[]]Í‘‘j,ÀàÎÎNøl9tò܆Ã!#“9¹htUÁ r8—ª@ÑJ¿•¡÷"í²rxα2â„ eV'{„fUL¸ë’RJD¸Ý.b5rÂÂ-,‡U®sª2á k€ñ:ö‚U¼Ç תzû8‹®â¥‚ÚH ¨_A˳*±g‡½äUœ<°4¡ÿÁI1 ŽÞ'ÝÊ£éšÇ³9m"é„…Z›Á~«!iÞ$N÷T³’p†‡îIyd:¨t)΋ä×Ð HdþPEáÁdY>„1iÜt ! ÇÂØy‘é“­N9åévÅ&µ¬ÜJl+B•Æ`&ÆTTz-A$®V$"{IãiÀGŠ÷ C< -p“rpçö777#Õœ*hss3í¬Ç·Ço}è­¹ö#aäiŒÇãͽÍt>òš­×Ü´{Óâd±–Tyåè•Í>6îŽK)ÝNwaaáôéÓ§OŸ>sæÌ™3gºÝîâââüü|®°(KF¾:¡ܬÛí†Í1gÎ}ž ñÆZJ…šä—Ec0ŒgÓº¨\!S)Ó|¢"IééåNâ¨Ç9AÌ":—[X+Y¨¨öÐ óÐkÆœi€nT츚F¤”æ#8 ôÞ„”L6`0›•c>a• ãI‘'O~Ìz v!“äÌù($ØdQÇUÎÏå=‘çfbëkå%€2/dĦaÕ¦ˆfõ›ˆ™a{›½Wž"ôŠÛív8NpÕP³ä”nLHÍÑYÇTܘ‰yo_j·ÛÃá0ëûòå˱­„;kŽ Q'ç5]+ì¤×ÂÔ­e@M‚"P%)fª¦2.ÂÿŠ<áÌ™.--ˉ†êL"G.{uu5oªß笠És‹ÑNŽøèª–ò:®ë\w߉û¾8þâ+G¯L=q©sér¹¼7Þ;¹yrÒ›||åãw¼ë§»?ý¶þÅܾãôw|óð›påÇ3ã¤êy ©]VWWsaKKK¹È+ƒÁ M¯4 ƒÄc8Ö.,p=ds¸d,šùGYO½Îü/Øüf£8ÉeZdÁÒ׬ ›™fÙ“+d{šÁh`ÖZÕÿ÷à6 ²ÈÐ/lÆø(ª<çDGÍ`{Ò& »T!|”•@íDN¡Oýç _#Á²Óé±Ì¡ Ï3ÄM;ÍH]šîÔ‡œ£¬o²Ö§Ç‘`±>ЉFeÀž<ËnQžȆ7ÌÊm>%Õ=!òø[2$·@rÄ*RIìÖ!P‰Èe'Ñ+’KÉnG÷%ðN‚("ÌfÚ®4ÁØÊ=ì.c …š?`¯âé[ ãbYd6îEÄ(úŒP&ÿÓо\Âm ‹½½½œìèÂå{rúÌ?1ÿòÆËãå¿ñXyl±µ8מ{´õèJcågÎÿÌgÛŸ}²óäÖöÖGoüróË¿>ûë÷¬ÜÓÜjž?uþÜ̹FiÜ»sow¶[v •b³Ùìt:ô{777s flnn†«ÒjµNœ8‘²¬ÕjEÖJ7©:pMž$+HZÑÔ=¸¨Ið`YÔC®¼“c&íp– ¦SÌ¥3ͤ¬mœ¥*… †ÛŒCVöŒ3ü7àeO›ºÕÃi‘a%½ C(˜æ¨ƒÿcHÌ€>“¿§á‡é'=Ý"³XѬÜ>þž(ûßRb‚uó~¹°ãsÄ? -œ£!™n qz&ÎÐ0«h›d“ˆRÙ»¹³GI±Øü¬0„{I‹l µÔÀt»ÝNÊc—_{„ä',%=díy†š±ÆÄ™9¸UsÈ$i‹p˜î\ùpòQ¼‡µeæÝW‡Ê¯!?*5ý~?U:xiÒí$­ôòI]“}ïîî¾üÜË_uéUöÒ?{ªÿT«Ùú¦µoº{öîíæö·”où‘æÜ»uïûž{ßg?ó‹ƒ_üƒ“Ðw<|×Î]ï¾û»·¾{<;¶æEÞff SúDõÆ\¨0¯ŒñÀéù$«ÔÀjóQ…É©zNf:ц1ï†KâsÜ 4®ë¼¾J¼ì4CÌÈÅÀ£+2å¾"HÑétx ž1"pZÌÈRñ¾(‘ùØ€–Øa;¸²ôí¸ä® rZ,˜JÔ¦8UÞ¶Ï¢d]° uCi›v,=9GCZóqI]2=ÌE€I²ïÑ3Ö]\·…8š¡;Ó··[¥Oãm_õfÜprŽCZÇÿÚ×Ä^ô¦îTâ7 WS™á…cè t˜9ë2°îaãð@<³É“¼&ðâÀ¦ó4ÜjöáÛh4ƒAî¤ìÉ|oTgÒìA”PNíÁ`¦2Á>4â”qÍ·œ;w.áõ½¾ßïçjŸy¶Õjõûýw\|Çû^ù¾›'7ÿÄ…Ÿø+k婿Sï½é½ß¹ñ?zåGOÍœš™apd8úµZ­……+¤­¯¯3{AS$‹ -íÊ=ŒóÅ2&¯—ÃãÆ9XSóE)¹Èl*¦S¢HZl°}§˜÷¬ˆû‰ôTÖ3ÏÖ™g–­•sқѷé0$B4`Âo´øÌÛ4j ïÔ"o­*ìÂSÈ»«Ä>XóL;¤å"ÍÓ1rÀÅ[¡Ã@¨ÕêŽCÎÑÇ›$; Áä]",æ<ôÖbdGʹú€°Q©éä 4ã+‡EzéYÊYy˜»äŸ0 —ꪔw=³B«ÌŠpH¥ǃ‹U@‘¨aOºB"û3ƒ¨"A%¨#Awžˆ&X°&&7Ó• ]¸”——>9…H9P¼ÎíÙ[ô)Lú®Ƭ¬¬ ÿµ³³3??Oƒ:ñ&¿催–ür90#XYYY˜]øñ½lé±w¼ü“Éd°7øÒW¾ÔnµgÊÌîÜ %f¦7ÆãqÜB‰©ý~?ƒ8iJªóÀs VÍ2”gÉÍHSÛa—U\öT (b øç&Yj/hEöÏd¨lx’w•„™Ö8mÏÌ/çÛ+øScepyàX‚aÉѦÂËÃT…ŸóoÙ}F#Àʦ]pøAYû 0`D L«´YI%a2ê@þç9¤*Ú.ï8ä%} ø '²g_\v00\$ÔÊZ·%±~‹6áÔæÈ€XÅ|>¨P“$RñLvñE¹/pyÏ ¡= &ãQ= Î…iV³ÓL½5iÉ^þŒ13€8I.w „qHÒC"ðˆqí<ÍÍÍ……sÖ)S’Å[Ñ‹íÊÓËoƉ'ÏxÑ‘§±¹¹Iæ‘·•rvo´w÷úÝÿòËÿòªd@og§ì„vH«ÉUBfŒ –ä¿"iš·³²²’ú#ÙC¿ß"59/~e$ûëXh ò=|Hü¡C~ CÎ¥½T¢ÀeäLî4p¤VBGœì• I›MÖA®˜B3`µ'—ÚVº05Æþ°Ù\•ý6‡;¥øÝAH!çËÛ·Íù“î«¥âqP±[ÄÕ‰cq_ó¥^ñbgaS÷T˜$ør íxr޲ÊAѤr}w KâàqKÓf0a,R'KU‘ÏŒdÕè«N|÷r«“Âc¦X'Šl3#cCb¦6÷ÒÏõ'9%«%Å!¡rª,y| “t'ù[ó rjþ¯çe·¤•Z˜ò±2X9pý¢‘K#Í…&‘>¿ÀÌ_Zl4v8Uk=<·Èq‚Û„iÆQj¤†æL‰:'&ð§JÎ`PJF£™†”VŒfЕQA«Ýä"#FŒ£[j#"ô»æççúQw2Qð¢>L•W[åfmÅ3K¶óù¼ú\$Õ ñµ¶@Ì󜛛‹ ´ñÛrØZ׺|E.¥Ô@„ɪp4Ît›|B²GÏåMÝzéÚ’®Š FG0n_¤ëC$6ÂOÞ`‹2%£prŽb@逡o™Hvn²å`2|Ãɸy¥ÙÞÉ—ƒ ‘ngÿSÂgSy¼HÄž¾¤rn V£9Ð4I´É%aõͦÉ×ÓAf-šÏ©g^µ{Ql6Sbl­ ¼VÎŽ²0š©¢f™¡N ÎcÌ3gýÖÖV*‰rØÜÉ/’Jôl<ö±œ2¡ 䬇N„=ìé!ÿDš|xþ2d?¨G˜½úfjå]t:D… xQWJ´ Ì3‹Š~·éŸøˆòå0²·“½jVVVif#x­’1 ÜÅú¤ø®<2\+óFø^³ü9Ð+z•«%%cw‹-Oåñ,Ï„A³Îð¨,#/öÑàÙ–)I‘„y:µ~Ìô3S®jìW š´ŽPÕ²@{¥‹hDü™Ìñ©øÓÆ0ŽCÎ×E­ã Â#Öc΂Ø1² V†*0É&{†‰ó“ÀJ7k(T]+ T‹¦Ò¢7á›]êLÊ y[)¶Y݇f\Ô¼ç+çì"Íž*«²üp5ˆ“†?}/ç°Ýn7¨Qn$ Sâh¯×KŒwêG±°°Š!“žÑOã‰ö<£Š¯kÒEB29sgffrîyD¦Ãƒ:L&cݼÌ[äÚò ¥”Á`à„wqq‘ÀÀ(_ÖLúXëëëqÆ4÷’6¯&¿™O^^^N¹àœéõ¼ú \kÛÒãöP¯ÚõnuäåÉX±­R™²‡ž11G/“ªm[`¹— B´lšÝ N¦Ò8\Á@©fc=µfx9·ÉìQ%®S9ä’–qñÄ{úÁYV‡3°ÌÎå® óù9:¶h;úC®žTp 0F„ZFgwrdf²X &GVÒÿg=L€™ QÍè¶=9Ý8ÍÉÝ ØØŸÊ² pI©è»æ d¯'ö ˜iþ‚Áz׎n8cºÓl6¯¹æšáp-¸Ñq²á¤k6›ý~?¦™(¸%ÀøD‰T¥”ħŒˆÆ|ˆ`’.‚­¹÷D‘Ü``ÒÆH9’°‘Š0âĉ)kÒÈ£ãÓ:Nê'ð[X³5`†”.C¬½^¯Ùl®­­…‘]¾H'ß Ð¹x&©Y9U{¼hî’t!€!4KêEKR MQ!YM&šX„ Õ²ÎQ1 £VɵÙªÚµž¤UR€œZy¶h2ÚN •P¡sP©;Çü&ĹJ¥×ƒ†ÌfqµÔp4íŽCÎ3lfÃÅD¡…Ô*?`÷*­òâö€Õ—­$V+.3»ceœªìC ª#ìO3àk2’·exØðˆq«’ÅŠ$Ú Qð¯¬qK…G_ݦÅ|~vÈåË—AHªSƒ T^rÄ[<‘/a;5YÔR¢Åâl{{;xÑ5×\ãÖ+½´`Y=ÛßßÖ@xü§+ñv‹4ÃòòòúúzÝn—áx’Â9„Õ–vww7‘ÀQ<+¦ ‰Bnaa©¤Ðä¶··WWWË•Y^–Ëé3v&Nd-‘[n5Ç™½Y•H¬Èg]>ÓX¨›ÉÀPsI$éü^à)³<†n˜“E’£²ÙŒè±PQò7½ÍÀ÷¸¥ÒHõ"ŸAµ k&4U©@r ”&dQÄ*«Þq¼ØQÉž^ˆÅÙ¾ÈÚŠí $îdú8äY¼AfÕ6¬ð+¶“{•œxÄ×ãÜæàk077w×]wííí}õ«_Í$<Ÿ™KÊql«Õ5²Èâde‹xß‹Bˆ| \ت¢7y¬ò q`&=§Bªº¯Tñ*¥»ØBö—øj^ÜèàZ95ìhéÉödÁ´Òrä‘G–——óNŸ>M¯Ž¡ý¢ñÒ°CwNz»¹¹Ùëõ:ñ)gA.8BDyãy‰%€<±ƒã1æF=rÍh+@ðÝ+&Î%÷GÑÙÍ!ØÉÐOmåMÙI.ü@}öqmæUCÍJy‡ãC.Ì—Zûû%]@ ;¨²9^'>÷m!•ÔT0r›n¬‚²&`3â羬F<¾F>BX±c’T6PŠä€Ý5Lvÿ“f&¾FYŠÉc…Ä~ÂbwðQyqÖÿ=9Gr,ôBÞ ¶c ßs…°“óaµÂ%eŠÅò±¦£L&“—¼ä%ï|ç;/_¾|ñâÅœS ZÐ,Å»C¤Û‰L„[v2\ º¶Ûâ³²â3äÈ¡”ƒ™û) Ã/“NoŽ*Pµ<àØÄŒH]åŸlllXªü0G#ÍR"ýÎÎÎc=6Μ9³¸¸˜÷›Éž0Ùà-ZGèöç3#r“¢3Ó¦9(aä"ƒÁu×]wáÂ…Ë—/£¹—xvòäIpׄ–tŒ666r‘Aí¢ŒåÃ777ù¿óóó+++ȰÒEG±Ñi> Ô%(¥·#bNª &C˜d¿ÀÄ¡® )x¬Å#¿¨ˆÚdåîás=ß° ¬¶Ì 3(™«]ZZZ^^Žb¿™}Äw¼‚ÆJ@ Pô+ïÑ<:Ÿ9dÌ „‘ÈdͧÂ`Jk£~ÂFÁò Ãù4Êwzǽœ£ÿÉKâ`…gB® Wº=«5Šl£LSAd…£< ÈêêêïüÎïlnn®¬¬@r:™¡vUye@P9n‘–¸“KfXá^hlEK:šxšß·ÇF¢lò2ã,+òV÷™¼7¸5"PœùÐ6µË§9s¦”Xï•Á°µyM¡¢¥"‰[’ÐD”<íùùù¼£ÍÍÍóçÏCHÝÚÚZ]]ÍÀ “ó©MóÖÒžaÌ‚úÕ&cµÈ4*L˜Ás!ž@Ȉ»»köiõóq·Ù°'1ƒæ¢Ð<šF ¡ϼ®<Ó ´cš=” €žñ¤˜µÝjµR(íDK¦@þpýõ×ßyç_úÒ—ò¨-ì]5®Êªà$]™éÚ\mÚÏ ¾ ŒpÈ óÛˆ™Ûi<êéxGΨO5qˆ[öô͇œ#øam±Á,i ŸH–nuV®.ØÍx Œ“¿¹páB¦ÜÍQöú6M :=Ϫ'ÄA‰5–I¶‰tŸ€Ccˆl”®$΀?å°l”阦€­üpÜö$\A–«zª»Ì­QRT› 0Š´!±9õJNCäx –Då$ì‘9@vŠ<&hÓ%¨¤=ó ­Vkkkkee%øò9;;;ƒÁ`~~žS 8ºaÔ=qCGRÌc¶bá€/1¹ îÏ,<…\auê1WHÊæ¬çr Ïù"´jLÕ~H˜»˜®ÂíØÖ½êŸÓäóÝâ—¹Œü¾¥ØòróO¾öµ¯5+W®$B»|´\l‘}\^‡ÓPà5äDm¡Ë-Ã"«Üâ+ÐØÄ <çžõ™ã© ÒÑ.±ÁîqÈ9bz´)ï#/È*LýQd½WdùNÀŽbàƒžì©6£vÈLGÏÌÌì—ýÒ(£Ÿ_=n”Fû—Ú3¿9Ó*-š“žìcÿ€ÅW=Þª=SyµA Åá4ô¢Någå¡Î"[h€ì+Åô>ÜLB@¿OË$ðQÎ»Ä 'ó4xÚÖT½+œ.7ñ!2¦_s~h»»»Ï?ÿüÂÂB,pRÜP­‡ÃÑh´½½s3½ý|;¼Çô¢áÂå÷··ñgƒ«R¥áyÚ¹;Ê>Ÿ i¸*û]ÊRÉCN1Áè:FF玬©c->ØeÓS Öþ+£õ ­€6d|QY·XdZvoooyyyyyÙ%B•ï»$‚Û]4›l›; }æÄI³¬–B±0i ”†æ¡yËó­†g–S%µ’ŒÝF5rP¤Ôpr޾£Óëõ˜­óB°T±]ÈL7`­8¦ö e›{æékä¼üNÔ·&s“Ñ3Úûo÷:¯ÓþŸÛÍfsë½[ÛŸÚîþ/Ýæ®&æM™Ü#2ÕdEƒ{¤Æ¬þ€tæ‹<AŠÑÝ/ÏçðbàÃ×éÁ#õÎÏ?L…‘³›(›*0s”­V+3(ù¿ øÊ¥41)GÀd2‰AgŽ­Á`€ìrÅ0ó‚P›ææá¤ZÊ uåÊ•ÉdrêԩД»ÝnÈÍkkk¡Þå½ooogÚ4dç/|9(y8TÞ(asaèª9Õ㡘:rx´šÒ‹èªU°ÓÎÙEŠ Ó#zhjµs°<®r¾^BŽÉÐÔËT98•s NLd+­M›Ú–:Õï¹6“L²uíÔI Ùh4Æ×Ë›Ëà-ƒf³YZeîçZjmýáVïM=ŒJm+àû"ó¥|q~›´åðèx¥Ínz^Î5ŠW'0g,gbv5àˆ¿UŠ窙SNŽ€\LD0™‹Êßx–ðF/Ÿ“÷’1‹pÕÊá)qÆkò]1scô$—Ä·›S”Ïúúúu×]Ç I(yz ¨X*Ьï IDAT½eö…³¢<Ê7E^h¿ZÓ‡QÞƒâÍjñÊ(ÊXÒÂmBÛŽX9d-F¨!p-î6«7ÙÈÊm'79±– -òÝ©Jã«/ŠtÙ¼ÇFÝ.†Ø§ž³öó§Ü$|VBP¼k þJ^âô¸[vVÊ)“¡ f­˜ôqÈ9Ô4ÊeN$É@iPƒ>ÛI¬2 e»BwÖÇ=Ú-JܨРœ››»øß_ìþ_]`büFÛ¿Ö¿gÜþWíÊh˶€Œ¿x4Œ# P±z )ó8¡+z÷ÿs³ìï"5<ºäø&æZ¤.wÄ Œ@AIc}IÿÍú«$~Çq‰'¤EÐ “¨êÉC+¨-çìììl»Ý¦µc?=GiÀ”RÓãÇÃáÐtáÚ•Ã2»EÀ-O/þ yÌ-åcvépÈÃ¥“¤{„À`Tõ–} ƒ˜ÁŸ$ò—@ŽEH|2¬Kˆ$Næ¼ ÜbôÚv4¢Ô0{›LŸ„×S™ZY—ÏôqrËbº½jD:‘€½lMÛJÕͳMù礕 jŽ‘EÞ(°® åîypÕ"§•œÊ1Iúˆ{90_aU²X3ªÍñÁŽõ 5Îb eS Š”©Ø?àæÄZˆÎÌÌì}óÞì?šÝ+{NçäÉ“i,¥ÌþÉìðïË¿*n<2íL4%xXÑÖgg©°9™fwNZ4[š£?ü+Ó¦©ŸŠ4„h•™ÔÀ ¨E3Ö>ÙîHñ [[[ÂI€1= º*¡U48¨Évww3e‚2|´m†Ãáææfe 99.CbQþz°5Ô‘ã‰`j2çQ‚P"k8ÍÈäHJ­Œ¬œÉÊ0’i’áC“ê3WÒç‹Ö§pœ0DFŽ•Ç˜ÇëBŸ5cœÖC©P=Œ¥EOLËÍñ–qÅi‰O:àâÓ «ª[¦)]RØ“†êÁhXŨJP2rŠ]›ãþ@êiãNvàÚô V%#ÊuEêALnÀS89G ©¡ÏW0¢ìRT:€}bÞ…ŽV¥BK2.Ð9DÒL˜clò"i)=óíëëë´…Nž<¹´´tùòeƒcÜEY†Š¦ýsÍ9C­µƒ~3¢¹jNëÈ1‹QS+˜‘&Sœø `_á׿|dëæáª ‘L5™²(•¥¼ÈîÅÜz¬åÀ7Œ.tÚ¹pÍ×ÖÖˆëëëÔïõz—Y__gÞŽ‚ZÜäå¦÷3777 àƒE¼`<_¼xÑ ¡©Éò4öööúý>®e<áˆÙ˜E–šÆÂ<À°>ñÉî4Ièb†Œ“—)“„L¢‘YˆyPÝn7µužy>ךßáeU®q™öå,Haª¤+Q YÒ|³ÑàƒYG¼Öeg<–ñLN.˜& ÕO³Ù´~UNƒ~¿Ÿába عf¿)Îú"×¢¬½f³™~!E6„Ö­ Öj@ddlèÙX"&ˆáµc#ꯋ*‡¢Ø‚°wŒWø °Zš¦©oøkÖÒ'4^œ,8®+z'_¥”Ù?˜~˰û™îòòòææfJœÉd2~ó¸ü?Å8—¤9lg&$ø·–v.’¨z†|ìv®§ßƒAÔˆ‹\üع¹ílÝ_w |<1vžóþ¿‡{ôTø.ÓØ˜1П§”Cduu•És7P¦Aõ$f \üx<ÞØØXXXÈ£Hy”$wee%'ÊoØ d9…9²¡c-3ÿí´ýŒ²…êL÷œ»ÜX$4~È?ødæó_”æ[1Ðlc#%…ᘙ´É@(+9eü´Žè†r#<+ðIûrVÿ ;cÅFùR³œÒ ‹z½ð^Žxz{Œmú0Õ‚V›LvÈ…Ñ$éÔO•6*(_Õ$®¤äŽC΄ֱù£†M°2M¼¬*¦ÐM¸t²ij#¬þœó.ý.‰cš3eößÌnýíò™²µµ•s!ûç¿Þi¿±=žcåY«ðBN>›žA5}fغâ•Ã.Ý c ñù¹!IE˜ã5ÍyVV­'³v¥eùwÎÍÇœSp<&’çvÚº`wH“a@`m=Vp?—”kŽBh>9ã8i8q‚ÖoÁr«yŹÈàH´ VaþBÁÜÜ\ÄÜù2¾ŽZ94–rX·‰çƒ>åTå‚‘%4=hEdò/ ÿZ™9YÙÏÜN7!¬lÆý2\Uuà}GÔUA bY ÛýÑ÷ ^‡yny8Læ« ¼ìî¬¸z ¿ÚX=W°ÉEÔ‰^V5$tr0‘–<òQ ¨§þ¦ü¥W¨ü„ŽCÎQÒÕ²ÉÍ~á|qJ‹ÿ#  3ì‡ü":å°gÕ#5jÇ.uÇykkkæÜLçÓµO¯uÿ×îÜœk4Ûs{û;¶g0i]Lx'³¬ò¢‘îAtÑH€,8XÍ­0¡‡Nû8L&“K—.EÔ²ÂÜà ‰AU\ƒdpH™\„ ÒôÆéOD‚(7žC…TE£|D‚Ü$`÷“Mõ&ªÎJ‹"Oo4eú²bÌ÷û}Û‡ÖcQQLRì†}jUöúúzxY¬P5òërØš¯’ÉÓKä` ýÛW[èÁqÅ+9©s ´'ù"ZPÎåMwDH¦bv!'Š¢Ë´ŽüØßêìÖa8±È¡<Ù&æ‰ùb2 dnªÛ¥xÃÚlèùÍz–ÿ!µ5\9= ¶ª>a3ÑËÅÅÓŽž±Æ ±a£FÛü_±2sÚUMÀy¦Á²²èi:d1‘ü&´ö[_oÌþúìæû6G?>*¥ÌþòlÿMý™æÌ~cߊ2|#B è°‘=Ü |r_Ýn7sÊ'Œ|äwGA±­dZ4£Ê•À¸eHÆ/8~…WTóEnÄIxóÜ‚VYÔ &©zî.­gæ¼q:3&Ii‹r½ÜÉ&“ _M)¹¸¸˜n[ñy¤LÕ¸U@Ÿß…x–DæF-§ÆT c@+0ñpíC64½„4cü9¼—<10CÖ6e =-ú7NwˆüE#ÆXsÚåšµdÐÉ3ì (wL§Fƒ}Gâ‚¶ž}uñG‡/âW-?”M£ „|d­Š6VAÍ~2(ËU6£{!gsu³&I?=âvüŸŠÂd£ º|”) 9_‘Óø¿ÔæçÐIrŽc åÁ¢!¸V«Õû½6Rëî\ºàNÞîHs`BRbY[]à åk!ä2¥ ̃2‡ÂŸÇ„& ÛÒ\u7y7Źïù5œ¶Ø€ÔL´#Æ@D¶ãBy ñt`²•¡QJØ|¾ddP%ñþáôt†‹Gutq€àà¤ù¼ƒG—ÁúÁ&Y¨àD§VÜüãÉ›L@G…ààŽˆ>Oé’=0Ÿà‘~¤0i`LË£MOæ{Zx¤ÿ=lV§æ“¡:¤™çP“…k`÷Q·ÅI…ó[ãŽÎ®«m€Dk{ ÀYG.Á¥ÛqÈ9ÊB]µ"¡xά‹¨îéFºm`&1pMÕÿGÞ/êC)Û`oûç®2 æ~hnvc¶R¸"„Älö6‘§—ñ¤r£ôÀJdÏš+æª²á Ÿæwi0ÊP©xq@çÄ÷+`º“wa äêjQ q 7šs$Õ c}nlnwwwûýþøàÇ~*œWÎÐßÒ™ ©]r²ä C¡¶½^>…4{$S+‡8‡™)³&!×…ÆQÅOÉU, p›°Ù ­‚C‰:èIgmƒ£¢¾SÙ´Ðãmh9–ŠãVJ L?sh™, nj?*»nÛéœzïTÄèhí°M‚m†c Q¢¯EoaâQÇ'¢Ëa¨{Øét÷½¬CÍÆ§™iå°Ý”"ÌH õNØ«´EŽCÎQÒ\árFä­g9âEA¹c³µ0Aªð xVÈ'¥”F»±õ“[»wí.þØb·ÓÝÚÚZýµÕ퇶;?ÞiŒ|B¾+è3Mg²8lfÁEª’ëaÇ;Ú¼–ƒ)†¶6 ]LŠí¼ü_€{s–|ˆ$¯´NJ_¥”õõõÙÎl£ßþÀptï¨LJçî¿èî®ívÛ]"P'ÁùáKI’〳†hY_3mâä#Œñ HÛî äòÒt¡«Äd²$ç8 ìü„ÌÍÍÍ ™I£5†t><ïž´!G°P¡ÏÙÇeMb¡¥‹)æì\`£tû+sÉ€ rû' 9ØZ÷b•L¢u´Y)æòÕ”kÓtaúð˜0¥ʤW9¬oÆóñí¸;[ѾMW#.Bl!À;!€.èNp¥¾á¬«¼˜õ;óž°Iä;ƒ>±—Ò ¡É-gO-pxÙp¯ž´†|bXn6Ï-™2ŸÊ@dßxæùW˜ÐÉ2ß—f˜ùßDŽH»Ò¶‰ÎÞd2Y]]E”µlÞ >•ùOéÆYzœ¹fÀCx\ iƵUJŽiÚæn'ä2€˜`sP"Gä¡i´É­ÈW´,Y6iÑî®È–ž«µv­]dØïîs`hŸ‘T¨@ð?saèõ9|"_6-3“3¼$§G>Ÿâ‰ZÜŽ®´^Pös; ]"$?Ò±ƒ»˜OŽI9])CÎÑT9@ç•":½2¦1p‚9X949ƒlvB…KÒaaçúqwï,..¾þõ¯¿ýöÛÏž={ÿý÷_|ìbãÝ»º;_ܱ„ y7|!ë§yH‚"Œk¨8»f qþ²û„b¡“±ší=ñ®X‰&ûºúasúP#«ÑhìÏìo}ïÖü[çK)3³3{{{s¿;·ô±¥Ë¿ùÌ'Ï8ÊòäÝEcÒÈb?dߦÞb8ÍÁGóŒEÎq:CN9íòk<ð&ÈôgggS£ä9C8†%hŽH-"Ÿ¿¸twbŸ³wðcp¬–¯ÌòŸx€ÜŽ•è8ãÌzb½%` Q¦$)y>¤ä¦tò¦h©‚æÙëÓòzU¥R¤ZÆpÚ2þB’Î+… ’šØP‰L$ bÇYªÀæÐ`'ˆ¦W4 Ú‡¹cÀÃ)f\'iGøI¼ü¸*ÊøqÈ9JHº‘“ Àîô9­3}C¥æ’2ToûgO$4›Í½;öZ½Ö©çO½ñ[Þøîw¿û†nxæ™gJ)÷ÝwßjsuùË»Ïìî}a¯û¡neS.¹Œõ”˜ !``·œóÅ©%Ù½GŽ˜vô‘š[`þ”Z°HmºH·ÿêÎÇô|böX>ätû'¶;?Ý=Ï™;333ÿsóëw}ð]·“åáªé®i‘< ,,Òáj Ê k‡`lldvœC*¹ÿ`0ÈÏ-´ÛíÌîä±çõFF;l:%å´Ê™bF`Ÿ 4ÆË»u* ›[_YlTó[n1Òžanšžœçpamð÷)¸sQqfÌ…•;›Îð¯Kgj&÷“xÅÄ ŠBS*A?'dÕQ Ì^$nR~ÅKª|LìÎà¹fè|Ycž¹†Õé‰àŠàhŤCNq¯²rÁ¡|vÊfR ¥>:nQZL 85oÝ£Wyús3ý~ÿŽ;îxÙË^¶¸¸Øn·ïü¶;ûûíÝkwßð±7\þw—Ïßx~ó³›§ÿÉéùÏÏ_¼p1ɲ½:Ø Pª¬åLo<«ÿÆo¼pá.ŠUO 1;?椦ØUܼÐì¡KÛéE5F+ww¢ö÷÷Ço~zÐôo½õÖ^¯÷àƒVšý³›ß¿9øÀª-$ÎnWØðÑ+çËùC`.ú´&YÀ.å|¤Úc5eƒ*¹µååe¨ÏyY›››ÐóHÖÖֈЌ◠f¿²\íòò2ñ€kŽZtÜÊ«kwwwaa!ÞØù_J./`'×Ì$RÅRŠU~ÕôáoÙ»Ï-œ”YQý~ÿî»ïÇ>úèêêj®_sžLDw˜:"™€²²£oyì<Šü™n&lÊa‡Í¢ÁUt›~‚Bg~ÌL©È5>%P ¢ÒÍó¡Ô¥wµä±V#+ z›↫õ!CÎüD1 ¢3ãñIX£“Y$Ø|cZÊ¥ÈÓP;«„”í Š “Íó»ç?ûÙÏÞqÇ·ß~ûc=öÏîùg7ÏÍl¼õ¿xëSgžúÂý_8óä™?ðà{þä=¿ùáß|ôÑGs@þV±Ðâ›@‚ü‚Sft2*©‚`ô4l<;i¤±*•Xè¹ÓÈR:ÐLâ‚᧺Ïy’n\ý…»ï¾ûæ›o~úé§6Ë&”‡iü‚*ÿëÁAw=„š/¤jÀ%Ž'²`†§G÷=ÒK3;;û²—½ì†nxä‘Gž~úi´«Ã’ ®Ð”Žt8(40¤Ïà PÎò¨ójJfkkkz u0 ãE¤$¹Î¶®› ÓVÇÖ°á/£8ÕžC¯×{ík_ûÞ÷¾w{{ûÃþð<@­L¼Í2HU)]ÔÌ“YM™7#é0AùÉSÊL‚ÁóÐðœÄ˜J€4дÛþX¥õz=ãó§˜zT¼È)öÞQ¬1päzŒ ókÖ„<®rŽ¾Ð¡1Xy*Û! :õ¯É©Ä-¨ÕNὓ¯þ×/6÷ß´¿õ [}æ¡_ýÕ_½í¶Ûü/ì|¼³ð×^óÆ×|Ïè{žÏóKKKÍfóŽ;žxýóÿfÞÔ¨¢)SΓïóO"+é‘·¨tT*sœÎÆd*Ë Âlß,¨ip‘ÁèfgggcvøÃÖï´>ûÙσ¹¹¹N§³ü¶å¹7gÔÛ@Ió!£Û…ú?5‹‡ ÞÆtÈÙ·V± k†§Š‹A¿ßÅ+^ñŠW¼âÊ•+=öJ<9‰PWÃèeINËŸäbâ× ŠÊ'³îãñxuu•¶„cüwÞyâĉÇüܹså`|¨¹nÊêãYcùŽ¡_»dä´u æùSâ wÉê¥ÍpéÒ¥tSàX:±ãµÇÙžAa7 ëI“T%A%¨`´RˆL¶bƒðAD¡°2G/ÖˆY%nMÉO-j «UÂZið䋘5ö´S¯×;žË9â¼§²‘Ìy·† ù»Å²䤜vyòb­ØeùŠÞï÷Fstù¯_~ü}onn~å]_ÙïÜuí]ï=ñÞ›çn>}úôx<þ¾Ðüló§ÞþSg¾ve@J çìÔààÞlØZÃà hVÅ4y,ä¹dmlN|š ZƒfxÐr,À!á„<™Lfyvø©áÎGwž{î¹Üoúä«ßµºôÖ¥FóP¥HtHýËßSKx5•ƒ2ºa p@¨ÆJ̵uÆmožèqýÑýÑÙ³gŸ|òI¦”˜Í‚ÐHuŰ=\¯œP *yF£2ktGà¡1EvuXR·Þzë÷}ß÷:uêSŸúÔG?úÑáp˜òÎ&<"JºªñIäc‘Lû—› lá}ÚÎÎÒ:£ÑèX]]F©kA®˜~«\Õµ¸áH•{çýòi$‹ŒdU›ÚŠ uTðˆ7/—!kÈ¥p݃´Úž°Íý©¸yŒ3C}²Ý”Ac릞;ÚÃö8ä6ð‰'æææ.\¸`ýpnÜO&ãÃöƒYQÂ@Nááp˜Ô•F‹IbYšžf™™û's37Ì<þ?þTó©›wîýÙ{ßýæwßvò¶Éì$@Á“O>ùÅ/~qó¯m^ºt öŽFOq_Õ= ¥zö3Ǻ=wÐåè)r,•aÿ7 øÎÎÎd~ÒškM&“ñÆxfoÆCמà1*Â]³*Å:ÕûûûIcöŸ]ýôjÿÃý™OÏ”RFc4z÷hé.adé±8À(<}IÒñ+BÀ˜I%I³‡´ q®rf‘ئãÍÙßß?{öì¹sçrº™°`–E3 ¤÷¹Ï¿þ|ùóˆW²Ñ—лÌ1”N~9PJwBŠÿ 9Xãàãîmîïïo ¶f¾afûÛ¶woÞ-¥Ì~~¶ñgæ6gvgL 38À|ðç…ié]5òš›|vÒÿkýíØýòhR&íO´—ÞºÔh4Ɠ쮧ÙJ&‚G=!¡(!Özïðž}:3…NÏÖZUå`X2ÅD>µ!ŠŒàc[[[éßD¹.z8ò Õ Ì‘q.˜!Ö¢aä´¾$¨äéaFàœ‚]23ˆœeɵ“”ä:c A°„Ž\‘j%–KB ›zÝ*´æUÚ…=‡5Ý8$õ`03 Í[N $èB®³Ü€ÁIö)œf!°êpí5©º8:ZÄÚV7.J ,ºgÍ;öP”KO-•ÄqÈ9úGG­­ÉŠœw=Á®æè¬²›à­èb±7Šlrì ³»»»¿³ßx¦ÑþùvçŸw"$ì1.˜`f¬z¨ÎTs¬ôœ¡úýþm·Ývë­·&ã>wîœIDµˆõéÒZ¾ p÷û}hWËÉ©‰Uým†3µN9Ð/@¨ÔÃVó¼c ‚”´›/ é¶ÓÆÀYœï9)0·Ÿ&;™à[y×ç“#c÷ øBUgˆ§Ò$¿“yF¤˜gâò`Q§£SÙOXqËÞÓþöySàÆäפVve®Ø½æô›úÈsýÆ IDAT¦Ÿ”ÿ{úôé׿þõkkk÷ß´‹’ßDà'P/ÔIÔ÷ÿIáóXØž¾Aà,Š¡éš®2 `€—(^­=LÖ]VÙëéÊ>˜¬(›·R²)òw7Šˆ2=Yfòuv1à‰y‚šú¥ŽCŽÄô¤­ÀÜÖ6âo\ÈX9·3ƒk=òÈ#P *„Íz6žU¶bµRË„ØÛ׆±á&cnôQ¹úÀgΜ¹öÚkãWE4ÙiR&öîõàN£¼OCú¢ë‚=ciJèÞ“n´ ,lJIg÷IO¼ûàf†féý^×s•·±ÇV8ßÉ=©ü*¸[ëÀî©´ª óe¸%C{ÏnpÜôªjPƒã:jk;Jô6ŒAT&¯²¨©­Ðö0n cJ¨H‡ûsÿ%Á@ÛÐ.:ÜÇ!爫œD 6IMQ›‡CX£o ‹ÌweÕWÕ+Ñðл „ÀÊÍPÛ+8«=Jð:ë⸧’ý³¹¹™¤ Ta<_¾|9…ăf³Ùz 5øžÁðíý»÷ÆìçfÛÿ¸]JÙŸÙ7‚“¸<5Á¡ò'|Ú÷ÚU |éÔ% BEÄ*ðSƒòu€€”abE‘ø|ÐK7ä*©iÇrÜ*‘ †"­¶ÜŸF[˜ P•ÛæfµÑ'÷u:Ã0«Í5`¯g—½tÖq-î™0›îØ‚³ ±6d«jÄŠçM²âiGƒ«VÛ$<¸&ó‚0ô,—Él<†¸+ïµ"+OGˆ&T ¨ààï™@qrkd‚¾£çgÉ?Üñ ÕÖ0©A…ã^ÎÇÔ·œ¤»ÚÀu+ÒÒ€³´RÚ­o–‘KVe mÕ­Bƹ 76¡ÍøÈð´TH‚» Œ-//¯®®VÃØY¸sÿ~î-úò‚˜‡7O5ãŽÒº‡n–¦ÐqW¿hÞhÅãPÜ2äÀÊ[ž#̬_Ž-ãQL€’­Ã^CxÍZ¥BÎS:¬á”M׬H8©;+Ý”¥W‡¦‘%ºheÊ0džV‘×Í®†üMû½*ßÇ4WÂÊX¥ÝàmzvÄójÍY“,: ’ÿyx¨ÃÆ´bšB‚–]÷Š¶ê„Æó@ÔÜèߘKç HÀQxÀ#h³Ò 0ßÓµ\¼_ýqÈ9²Ÿ BRד/°ž0°-)*œW§BIr3£2wËó®TŒŒ£·Ï¦ßXy¿»8 ¸¶îNÎ/L|Ûš V±{íMl®l4›ÍfåØHÖ—4qÙ9uÕìÁ.7›ìYEk†r;y8!:sÄ3¥DJqX©Ï_ª® FÉxθìÙä&õº¬4˜žÈ”ÞLÑ8a£Ñèv»,kW¢UG°ÙlF8¡Åä1ê0W|f@1§NÚÞÞa„-ýjJ[Þ…-X\Û‘„yü¨š¾´ùÜŸàGW.&œÜÀ›·œ9¢2¸P”ØÐC &¶TL6·W1XƒÞâI«º±Ò·"X³>›¼Á¦Èñn‰%óÌ3NÒóûú‰bÍÌÌLЉr ºO5|/©‰­®98”ÝKöÛÇO>êÈU LàÓ0·ŸÃ³Ì“­^Ž»~G®-ªùvw×­ùèê³H4Ì`KNÏ,!›²»0…6æ^côI_”…Ì+®P\Þ5z{W¦žEË"ñ0#1Æï‹muåÊo[¢K‘{HEÜ7•˰£¬¢[5SM~3ŒlÚ¨¡®(‡•ß »g0-ú EæX•µE?CÎsH í}é:×,+6òO*ƧY¶ÉË’/çð%ib!z‰s"2ÿüóÏš{vÇ0 ‘ƒ²ò•©²æÊO~bâ †‰ÒE§#åô„NJ†è¦·©k•¸x7Oˆ,[(¨]ø EžŒž^ä9˜°€ò¦Õ‹­£e^ Ã𜪀¢D/«’XÚŽË€¹ç _`CºèÖög¸Äo§Ýn¯¯¯[¯oZ)ÀC]¾/ …U°0Ë­H‹‡K½ dàÉÎ$¼q°Ö­ìÒ9ù¯Œ+VòÌ}Q4„n#Dù<„äãë8äq/¼ŠèŠ jö¶Õ 9ìUÏ–CV®6°õXà{v[ßxî¹ç@ä\^˜ œ%r‹Õs§9Î)‡õÁ!ÞÌWcU³Œ¯ï~ûîöÛ·ÆÌg:?ßi]jÍŒf,­ïº„:‰ DŽFëBXkŽ é?¨´¾‰^ö1r¯.à›ß qΓƒôÏÊ o¹è³aÆÅ²A0"¥ ¢¥œ³È`³Ø¦qy£4í$9ËÉŸ3 ™»  Õ\!ĉ¼eÙܯ & 2ÊšåAMé„Ý©´i4°iwC"èbŽÁX¦>M3¬á™0®?‹'ÓÓP¨1:ª 8€«çí‡Æëðð “:ÓÄ‹Hì©5ÁÝzÉ8sž^„3‚øGúHäs«ìò2‘s„j7Ç!§¸Uh’å4¶cx̓ǎ&Ô|º€¨Mî|pq¢ÕèÌ:[.-"NF€/¨ýáã{„ž­H‡Ó †.Û)}*ÍöìÃñ·Çß1nýv«{O·Ùlî½zoë'·ºÑ=ý[§G+£õõõ\b§ÅÍÀ7HÞÉå™ùh·Û§Üæ±@™Ë/£ØtÎh®šS‡T°õ~ŒK8EHœy,'ž6^¤<ªx±Žè©kyÈkwqSÉúV¤vO¨æPZQÒQ0¶0–õ -0 Lè´yœ~qe¡&Àj“ÅYeâ•3ìzTþeJ½¤tð8lé+ä½›ÿbn¡9&†L!³~»_¯Ì5wžÄÞAz‘—rصòt=Eã¹cê°#ºmolâ~õŠÃƒ±à5ê8c–SC¦rU)r6â¼³«‚ç(r‘®F5+ó.Ïl¤3PLÉ“Âý6”ü¹ Ö!v>ž¥Ö©(Ž©˜xR'‡8G?ç”!tK͆䬩’cpĬ Þ>„^ô*êÖ|óšDu°È‰<ØIoŸïâ®yþ€Ãöª1WHü o‡Uí‚EW¿Ö"miWüf¦ Iª„°B5”ãi!ûô89&±eìëÊú?ÚxsL’.¾¦Q‰Ð¤¤ žpeP¹ÃæHJÉB=d 3Ýk¢AýÓÀv(²4ïÖ9—ÿ9]è¶XÇ[è: ž–*!±ÊÚ¥”ÑæÞwõîfggi·ÿQûâ]D¤Îs¦,ÞQf+˜…™1…$ãööä„•U-RÞÑž–P3¿ j×ñŽ€ì‚lØgwœ Èä½På8f¸¸ñô%~\ÞÜܪ¯cYi>ÝÀ0™-µ%¶«LÖíÁÃç„{ö¢E ‡#ôbÊh+æUVRVx#ô&Ä&zå¡tšÍ‘Wå ,–¸=’¤¶ËgÒrËgòEžW# ¸2°a³óŒéª19Ê`0€à@Øðæÿ’³R ±ÀÜbû;l %~Ÿn`ð—¤.asøæüò¸ŒËèô“²tÉÜ8qßšâÜ_-</%šê&2D½Ôp™ï‘)À†¼DعTôr\7ÐÛçbü;Y64öPçtªa¬¯²bâ’x›À¹çäV³5þ'¬¼ü=á ÚÌÁâçÉÑÑívC‚0NX¦ä—òážâð,àqÈ9š*‡Ñ3»„%ß·­:˜l‚Æ2{®p:Tp“O1úfšZ/ÒÃ箦—Ž9`.t5½ß’feÓ`°ë '>âû{ûÒ˜iÎ,--Ý}÷Ý—.]úÚ×¾–u?)ÇàŠ Í;:©5FáÂrf˜Éà&ç%DÓæÙܠ˸\b3%ˆpØBÁpâVœÅ†qAvÆ=]ÒU°îdÎŽÑûA´‘Î¥Ù I µý—k–ƒ´À³YÈLEš„ót³–bˆÅ–¡÷>:#5,ik­æªŒìííu»ÝÁ`0)èó—&ÎxTÎ ¤å@Æü<ùyd45WeŽ òTWÛ–R…à9»hvÈ‹ ©²í€Öˆî»ûg@v ë8ΫÌ>ûì³¶i°zÐh9˜ÒMó§ã*çèVC!]‚øk39&ÛŒãÒPF¥Âdî#0¤€œVô`CB*ÒëD=+ål{{fTdPǼ2%nOSšìüfgë»¶ºÿgwyyù+_ù NØ[ïÚjÿë6è?}i÷Ná€U âh&[hÄÐ9<à–˜W™§´°°íHVD¬r ýnë£Êt§Ò½~Ñù Ÿ>Ü…=+8› gܯæò ’X!”¶“û7•[¹kß|o†]+10ëy‘ ôsBV »‹ÃŠÂ-¢<`‘3óoÃh&å@ðfnnîÖ[oý¦oú¦çž{îOþäOVWWYÕEšân˜UtðiM¸ûå°LµUïœ @eNÀ®Fz‰Ðs*÷[•»µN É–aÒÊÑ„“¬4a’ W l{yÄŽ!Ëj(©pU‡œ£ 9EÚM,G¨œQæ°¯¶ÙN,çrT‡—nq£—\õ-‡žSÉ:¾Ì÷”ƒaoË®¸tpø¬<ŽBO±˜q<ùäÌÆnÌp~uuussó‹—¿±;øÁ§—Hù鏿`J2ªV‡ðHñ2šn÷—´ŽãÜê(’ÿ‚¹kn \rÙ~tû=¥T•)Œ£s…*3„0™fòwGwòh;ÈQYš6f$¶¨rÁñsÂäñ«¢t©~°ÄöRa\)#8f¢[cɦ¦æÛÐýíü$+ÊÓèõz¯}íkßö¶·=üðÃ=ôÐp8Ä^Ïšà½öåc{:á«Þ  –«±,TÚ]yˆ›¹v±ìz•¯”}&cÅ4ÛòêÃb¯Ü¹¨ž+v—G5`çA z~¸š€n^ŸÛq•sÄÀš7’­úòs|¸ÜL>BÓacVž«o»’)™ƒA-,,Üpà ëëë/^¤¸a^Á3g80-2Ϥ®9$¶Ç-RV[œgffzßÓ»øÉ‹sŸküûF³ÙÜÕþèïŒÚ?Ùž\˜”V±ú!ÊW)¹`Ä4½7(, Ø×x§ÈÔ™î·oñé ÎY¢K‘«7ÈC.ÔÞ»§Øw«Ûíæßú‘e38’«"[‚ÇW‹lЊ"£¯øùÍÁ`pæÌ™§žz*´ &{ˆÅf#EF÷TÕÖ ôñŠhÂ?æ´¬ñfFé®%KÅ _ÕÀ EiŒÑSùüç?¿³³sîܹ+W®°¿ØM‘ñ¦Âê!•*­,?sssÙ­0×­šœHO…•‰[+U“ªÑ_¨tWa±3j^ PÊržïv¸Êï'b9r a“ãˆ.&·`Œ=©g×q/ç(€ïM¼!IÏ”;ý «¾›~ÃaaN'“=•Œ ÚãàNwß}÷Ûßþö§Ÿ~ú·~ë·._¾Œ•m¦ÈëáÔ¡íäÕï¢ ö½(3÷ÍŸ>ô=7ÓSü_wþÞN£Ñh~¹9¸w€ ¶1%À\UN·Ju”&ª NÈ á10ÂŒ:/‘A꿜)*Ï=‚Šõè¬ÕO–àÆ~*#ì0Gìqb3é"IGËòZVÙ+ÿ›[KTÈY[Ò‚çŸ>EL«Õêõz¥”µµ5@ñ¥&é’2‡C^YÆbò¬rã£ÑÈÄ3šˆÖ™véSÍÁxh <€þ(Š„,Gðã?þì³Ïnnn„È–!jˆö&¢ñàRrî½£œT$VfÝÀ ÛT 7öš6ög¦\†ûZ¤>åÀÿ­L *ÕV)-œd6}°¬"â÷V!:9GrŠ´°¬Ucm(‹pDVÖÎåðTÍBª) ƆiÄÈ‹``‡f²-ûšd¦9ÁduÊÚ.¸ ÈÀŽe¤jiV@ëc­æï5™0(R”b®vÚlʶlÎzIŸ• 3¦H8¼9GT1 f‘æZ©åÀÆOŒâ ‹S½óiÎÇ9/LoõØf50o‹¼»LwÁ ­fuIh`ÏÌÌ,,,¼ño\^^¾ÿþû訙”ûßÃL„—• R˼–¦Î¯Uò6‰ÊBð‹›–öa›$¦Úy‹M6qN»H}à ®Ô0 Œ3ÿ´ˆ(YÂsn„A¼Ç‚b9,”åã…H@^Ų©hb0u'Ç…·žÍ–~ZaÝtb &Ä×ã^·4ÍLµªörX5’’w£’"ú@pšñúE¹+‰öÙ³gÏ;·µµµ¾¾î$Úé^óà‡ù>Î;©iPˆJÂDUhrïÁ™ÆÖ%!å°ÜQ53=š`äF…ÝVLV®¨}x¢À °¯¨Éµ^±*6žmròÕ7wSײ=/z`Q¶‚ å/™z![“7U+Y½Æ€˜ÿk¥žI±¶¶¶²²‚™­o r›‰Nßüx_a‘¿$á¤H™–'½Cëÿ»uÄoB§F÷ÌÈU9êá,&¢WM>c¡&Á+‰à-+/]xáÖ´Îg"XSÍÖƒqcÚºéHE@,œ››KR˜£ƒbÑöÙG”éùÁT»š¶Éà  g“Ò»„®ñxÜív+/àã*çë"ðª2+±šÂÁå>»"éO%Õ¿L,ÎŒfyšÕvåÊ•"±¿K’ IDATªrªœÊaq~SæTŒää¾°!`ÃüM«ж“,«JW]ôÜEb§{T•¬¯KÆ è`üŵP|hb)…lx÷áíz@OïÚE*øþžù"ž†²RA¢™¥âÏ…u:û:s®ù@ô|ðzÅ‚£UN" rˆð¶4xK¯¯¯ÿùŸÿyš:®>=:ƒp€¿Î6ä~¶ú˜ðµZ]UnVðu•… H\6y ~6ž"€»£$ì–¨TtËa jü‡`[°a«¡×ùùùV«uþüy“J9ÈJð@7pV~-i(¡—çÆd$³)‡…Ò %±تñmÆkh…Vƒnå°!!"XÃápZcé8ä ƒ€dŠ]]+Up¤’ÖU³œE l,;°l7÷’=åÏ6vä2 Ý:Ãõ,d$:¢ôŸ -¸n+ÛP¬Ð»ª0t*û‘ Dæ¹ÑŸl´æ+x=2*Ævܸ6%Ý`ê>ßE¡ Ôr/†ª Yä]fZ ÂÆF˜››s ÁcXØñ9=/sÄM®³t…ïÔüZÛtÒʦEÁ:¿ïþýjÈwõ«§v<Õa>1A‚<:öÞI­øÀ, üë¸rv‡Q k=˜ïÇÒuª‡]&E ð‘¹ø|8PDÒšðŒ‘1ÇÌx)euuµ²;2ƒ€ 01oÚ³ÎÂNö´® »C¡¼É3ÏS¥LdNƒ>S¢R§ÓI±^zÔÁv[8®rŽž! ÛÄD{ró$& ^À¬µà‡µ¹–fó€Ùy&ƒ8»…àÇõTÂÌÙêN¸`Tég»ÝNqfNv~0È1ݰ©†`hE€VÙN'‰ª!>ðCÈ+í°kd‰BÉÂ9KqÃ×yXÄärëKšÄcGŸ‘£^¬'«ª~¾ù"…7æ',»É8ê‹ÚÚsÍÕ+£–uÍÜ C‘ †õNÜ®óÚ«~ÁŽUá þ!oTÊÝiÓ¦)Íç¼Ë¨Wà šIOD ñÊ7ºè!åªÒÂu¾ÅâßÚÚB'QÖÕ’CµQÁiÕ×rx”Ø`³ŠŒÂè±´š] ¹˜€àCƒÌ¸‚sÙ[[[ЩI•òxç­}wrޏ—ƒä‡£Þº%˜*ÀÚGCÖ%œàĤB _ÐFz;ø:38Éô9åì¾°q‹ñ1kN\Ö­‡í#Erf … ëyIm©ì>íR ½VJt´Êò(:ŽëHær*s¥kGÃVõ­-ìÙïmk1ä+ò¬R'å LÏ÷y¬ÇbzEÒ–„ ,¶*b…Éî@*rª¦“ÖY9ìŽáîš'Ë“›¨e=ÄÊ‚Ì#j·ÛÈ×ÂûªØ4¶l`é& zéYæªÉoqÏÄ8ÒW©º‹óæÕÄ£e– þ¢RRve`¨žÑ®@ËjTÖYˆí½!Ëyz,k„ ¬¢òŽs…Ƕ²>7Hí‘çr¤s Ç!§LVÕt˜]Åx©4Ï™çˆà.É‚ CHÛ8>è0 @E'#±Ê§»WÒI TßìvI`bo`‡Ü£Ç¶ÅÐ:C…ëlÚì ˆFö1$í;d›˜y.!<Ù%6´:°`q¥ܬÛí† ÈyMIA0'-­4›CC"+·´V¨htÁŸæÙ’»È &Ƀ™>×hË¿‚à@Ž¥¦S sáÀE†óÉÔñÈYyÁXn%ý²µµ•×ÊP$Ç+ QÞ‚ãMåØétÀr«yü­C= …ãÁâ! äT’Á_€!~' ­* %Ùø¼/ øšæÃí›TYM¶t‰Ð•&iþ,1ûÅMÐ#aH3?Æîùd´½ààŽFì/§·H•„0 "a¦C¶7¾×•»mÖn–&WK~Êò…ýläŠï® g1ÃäÓN½¨IV&fW¹Y6³'ã’/·Z­S§N-..¦MÊI(‘­5666h>ÚívŒg,Lgr»¾ÖTvBvÞè9å0¦Úùqu2Í*ÞÞÞΙemoü1¸å–[Þò–·\{íµ¹µ~¿âÄ T®Érì»zÆùŽ.67W;7+>µmü“|Ík^ó®w½ëÎ;ï„Ì °ìŸ§º¼¼<!ÝÎS zÕ³GˆÐ¸™çs¡² Eg…›à¶™wSËÎv_Í t.µÓé¤Â0ƒÁ>2Μ¨ŒÂ)i2w®~Ð,°‹JjSûl¹eÝa> ‰ÒjvðX;ú*‡Qj /BÆuï.ã/߸ߨï÷?ñ‰OÀ~Ž*‰›„vE´€üÅ‹«„pb†f‚=¸‡[&^[^…ÞC˜TYšA¢-×oŽ#Öå@oÍÙÉšMˆÝÞ¬¦^Ìð®´¡f¡ˆ:ý.¼óAŠÜ]ÈÕºÞÝݽpáBž_y©ÂÜ3ɇú‰ñ…Ê ­êmäQW”$N Þ©q°³ 躗Ãs²Ry¼ÖÝÛÛ;wîÜúúú¥K—Ê?¤\žõ¸øð=ë¸pUðèNYAÃó‰®&ÉTHÔÒ›ét:ÖËCHWŒ`ÀéOŽ•çé\×´'÷ RDÁš‹év»œÔørå9ëëí,’ÄBEéÀɃ8¦‡¡[…j¤BŒ }ßô/Išî·GºÀĪªŠ¬ÇžÄEQ,//£L“žjD?íTÆô&ÌðôÜ=œU—ÏbÚBPª›emGq|p°ú‰C>/HI3w+ê'ùú…[ŒÇn"?»ýƒìÒ̶m¿ÓÎ6Ÿàœ¦²®»'oâ¡+ûÆ{d2jâ\Üü@r|R[Ï‘íäWNF_ .NqYƒ¿„2˜ÞªeeY8pYKäÈ`ªA~ñT—GcÏ:lI#±&µs¯úý~¸f¸9WÓò}z™úÿj;v:R!ÁöôÎbÖ‡^T6äÀÓd®z}’ØU¬ç¨ƒÍ€ŒÇ~‰MJ^hP.{v™‚\öMÍÄñ­v©_‡ü&›€¿ÊæÚížä,•vzZ=f¬e¼C›EqäÈ‘ªªÎœ9“MdÍ[Š£è»Zù1iÚ”i8Š$¦^œ’˜0º‚ƒˆ!Ä7HÜç·ìq†îþ]p'åü"ê8Qº2`¾Ý‰g%ÞÜ|\ÌšKšp¤†³¾dÜ„hdc@¡ƒÀ³æ ¡·:¾& ðÈâ¶t·'c<LÇÂðs ÏhÙãìç9×hYè!í´þ«ªêòË/ïv»_ýêW ÞqJQÅH¢2w†uèS˜êœ|œ$†ØMV!9Š”²É&¿X­<[„&ãxfÈK(@@F¾Û ÙãC»ÝîÂÂBx[XI„$-DH ð9ÓH¥ÈðhpÚ©Fã%ꤊGïó´%Íî³¥EFµux³6]F8Ú¼ù ñò.{kkk±ÛƒA$û‘’“·†Q.¡%CÕ¬iäÇ“Ý3AÞ¨º²µ‚*b 0>caYh Óh]Ú¼Ù R!h0œìp{3Š™xÛÅ"é£pÉân\søSÓp!üE³$k,›0êR+ ÄIê òBÞhì{–ÂS“Ay2éQ2ZÙ”t¦8Ç4HE®°;ÀCŽOd¼ÆæuÔ‘ð}— Dñ‰'žˆ•ÌdO”eÑ'ÈÖ@œ¥P@Õ(|ãÓ;NÌ·{(˜`0Ö|nOrXf0ìÃa:ò|Æ’¼ i‚¦–á^½€º¸À†Y¿÷è••!_„ï‹Qq…¯`ŽÕ·Íëv—°$¶­òœ¯³¢ø¾ª-ýC'2sæ£#øÙ_‘L×ÜÅÝ®¯û!goªD$ ä[c±ªªóÎ;ïÚk¯í÷û_ùÊWÐà;|øðl6;{ö¬û+N H­g“Íê“Z?‘áy4äÉлÝ.Væ-¹f„ÚØ`|œ 3•cÉF߈®)G³ù²Ì'¦­9íÌÓ0zøëëëý~?b¶5Kb÷"ÃÃØç&5”Vq„“(q R.ïŽÇÝívmûF=a¤1à)øc毷§«,'ìð‹«u:OÙAÛÚ‡#½˜Z±r‰í÷ûœÚ¶jöSöÌ¿¿7Šo–-ñœÇ‚Óp­†é^×SBÙžf³íÁ™„ÞãNÆîs™›v*òÅì»Ïê¨iK²Ú#™ÝæÅ Í—¡Ö¡™§Š'p# F·Û ØÕ3»;:Q0YCˆ7ɤŽrœ´2k¦f­¦ýó~ýãôï}þ½ëÿe½ùßšÕƒæ`(2áE}ÅW¼êU¯:}úôC=,ûLÆ›E“QL’1A„ÊÎ(™Œ4$Z³’„7 ø¸ÈPc ‰fò̤؜‰p£Í`“{ ‚kð±ºjÃF™µЛ“Úé\üŒÎ3'éèÌûH7Î[D¸Lµ%öy‹‹‹“ɤß†)O-óYˆ»«ÈvàÙd®E»á:[·¾€[ëÁiöÔ”áž)KÑ©Y‘ÓWÞ¬“$73ûÛ[Ý®t„®8j9¬-,f¸u •‹#Õ“F03Ô ã‹à;$ÚI¾ JB¶^% ô£áA§žßiKõ\—-Ã(hÚé&L„ËX±#Ìø°¢¶E²½f7^H+f˜‘±‡QçÝS§úMéMoMoýOé?]ñèŸÿÍÏ~f4:æ'BÞæÔ©S7ß|³ùfiˊѽØô¶¡MÒ¥fM0ÂB:ƆaŸNýÒôT€I¦¨ˆÉ%<:ÿ0¯2¹‘¢(666 CÙÑZNK)Sx7f#2)IºÁ4N YÐyâ|Ç{P xhÔ{þÀ3%Æîèݧtyê)k£YEÉþOq»ÆãqØ+0©  „Înµñ tù¸æÈbadú¹ì#p×´Ó%Øv·Ü5!?äìÁëCéCgÒ™ÛÓí)¥å•åæ}ÍÖO¶F—ŒÆowÿn&%ÿ5xXÿž9s&rdo¹`ô&iqfâcÙY€& ëÆ'xV”pJöz=w8ÓN> ˜Œlæ™ §ó»áN@7$‚||Í5×<ýéO¿í¶ÛΞ=Ëy @þ΄|ÖYÍ"è $™ßì–Þm7gò¨ÛÅâÄTîô„+dâ Źßëõ†Ã!ò¤ÃþÃ`0¸÷Þ{éó(Ý£23Í ]H“8 ýÄù¦H Ãô³P·[Öiç´¯# „F0[¢µïLV Ò w™$MLD*™k±?Õ3}BT°éBd3¸,€Ñh,2¯0VìekÄsD“Ö‘Á.GDVNÜ“èÚÝ3d6ÌRÏJ‡º´%-ƒ)8ÔX æï?ó˜¢à¶n77t’ürEø”zND²ôe?äüÿþÚH÷§û¿-}›O±”RZM¯5fiVÜYdJø@Õe9^XM 2Ù’†Ô}ôC!#¥J#ßOsùŒü”¹.nÞ$ÙºÄâF¿Öà•Åêiûƒ.ŽF£¥¥¥Ùl¶±±aófWZ`0j˜] ‰• ÄØÕZn{ÒÂ1% ÉKJ:F[f³ÙÊÊ mçhÉX!‘£ëòË/¿îºëΜ9sÇw,--ylfÂB ODÏ6î<='f!CËÒR]&Ã)cɃøÖqçƒ •¢ýf(3.²¿…®*žkIši5Û›ò”¹œÈ!b¥Ñð:ç,†_CŒŒø4J=h&I³÷T†°ìßÌt0MDƒÌÆ]ÙdEÙ0ƒ¤©|(ü…ÀͨW¸{ Ó`ˆÛ<~*Nï|#•ž© ¢uÀ0­†:ÉóL~îñ7˜ïW9ßÐ×JZùBúÂϧŸC?ÇâlQÝ]¿kܺs[þ‹ƒ&í²!qÛ“Q;žœ× t@Aˬvˆ1}«ÙÛ¡‹6ãu¡íOÔqRæ6;ðz–A¨uœÃw2™?~üĉ±»ØíNoͦejÚ¬2똉Ïò'rŸ)¸0C"žb‰#/7c2Ed[Å`vÇn¯×ûžïùžW¾ò•?üð©S§Â¤‹ùÇlÄrv<ëÌ¡ÕB,¦kåöfmdOÅ–ûðˆCgÝX &Ù»|$*ÀxíD,žÕ ží·Þ«žÓÙ¨¬‡¨(È!^‹]€.¸ï¤aaËmÄÉH7†Áä¹÷f÷ôHûˆŽœà‰c bCtg0À°Î\yìk!^çwÞ¥—^úµ¯}­ªªa©°RY<°^¯m šÀÖd$ŠX}£YSòãmͽ±Oy)¥º¨ëj«Õ?Ù®‘=9dÉw§«ô6œBféëÛælѵñk€‡)¥P7‰êÁ¬Y3¶"#4=¡ÑhgÌ~ÜÏ!¢Ý~—†‰ÜBwzëòŽt2àuŸfX•e¹ººzîܹ¯ýë«««îñ×§3.]kH S«c¬í@äM‘·ÅSÚe Dé4–LJé\«Õ qâ &`ÖqñxG‡òºVœ}9ä×f~>%ž TxŽ|#knƉ< ìfë„ Ãòh»ùôØ%¸ qey8úfÕ0­22!WáÌë0%í/¿ŒiAt†ÃœÔÆûìæò«Xu™ëгŒ›g!Ñ}’ô7úÕJ­ Ó…ÇÒ±ËÒe)¥•••'žxb:Öí:ŸªSUÕ®¬ÛZwë‹_uq»Ó~øèÃÃO QB£‹BÐ1 ”NG î‚~ëtôüÑìõ³¢(Ò¹ÔúõVq¬(O”¤9 <¶Df­7UTB£æ’ÆymÇ3N#'qvÓ[LÌ¢d D‚3¶kœ;Ô‚qKÑ1/zKl{j~&vlD8þœQ„í‘éªÓéô¦›nºí¶Û–––N:´hô/:†khÀÄõÇ¡sòLÁ;pO®ÊÊ¡ãv|YË5ƧXŒ³ž^õq|"ÉA]×!–z† w¹f³Ùjµúý¾ËÐ!FœÐߣ‡A÷‘³¥>>7³f0ñÝåh‘RäµÛí………¸’8š-"E„i*J"h8PÕcñ$©q:t(daíD:ˆžÂn > f~b´¨Ôg+%B!3 #Ì%` (ÁI²¸¸8‚j è|—0(—û!çúzZzÚ«Ò«Þ–ÞöÏÓ?”gmm­,ËtIýÕÑÂ/TÍí%>~Õx~ùüþgÜ_EñÜ"]›Ò©ýÙ6ªVv26çÊ2Mž¦š6¨’¡%õ÷Ôó—Ϋ‡ª…W,¤”& “Ñ/ŠsEç÷;­'Z¤r‘O­¬¬$Y§±å8è­ÛÀ:Ê–ŠèåÐBƒš HÁâ(èB§6³he“Àö㣪YÍ‹yõžªy®éȹÌäY[Ú7„+E¾ïæJ¤Æ@(©Œ§ßh4–––VVV½¾ˆ§ ÆqýV™3#1¦qÁßhSù²¹r°b ‹ÌÀCN¦Òù\¦Ko)ôLði 3›Kµ'!„ žÚmÓ+E‰½Jmâ’äñšÃe™¨6ÅA4“Ƶ×^{Ýu×=öØcŸþô§‘&³u¬ƒÍËÜ­ì‰û¥×ë]|ñÅ?þx”òîî Ýda=sv,·“$>ÑUèeZ4+Ó°àøy‘ešÒé+dˆÂš¿ñc1½G®yàÀ(å÷äõ¿®yÁ Ó çiþúôúÕ´oøÓÃÁ?4ßܤ ;NÇ{<»xV-z¿Økÿ\»óób©¨_XþêÀ|Ð$õx¸­ [¤Ìœ³N§×ëe²ä‘|…Ìþø‡Æíßh?í}O»êª«.¹ä’ΰÓúÙÖ¼šÏ®žY¶¤%Ãå ?6 ð¤':]¦0™¤Bub­ûØÿ|L-»†@ËöG W½m(ùý³á›‡íQ»=h§åÔÿ§ýþÏõÝb%‰¶ÙÃ|ÓO<¯€H„[ôq{©o a¥ôwúN63mo“ªÄoaÛ3[îJŇN¦)‡“£‰ü/·Ú¢ý™…h’Xx’ gAèJÚÃÔ³;ž:Ê Ú8pèСˆÇvU7€OÊÝÝn×ß—Œ¬èñÏË.»ìÅ/~ñÕW_ÝívíµÁQžÙ®ƒbe*´ï9¾G£Ñ©S§"ꛋŒç…ákà_÷21¼ÉøÔÄ|Qw²2)Y yþ‰UÄ›âॲºº üYÎQÄeuuÕHû~•ó z]š.ýÉô“gҙצ×>þ÷?ÓïþF·ñÑFýÐvn[—õü[çÍ4«[+òÖÖ¶fÿûlüìqýÙºHE&œŽM…¹ž2z Œ=à,²ÔÅÅÅÕ×­6Þ×è¬v^ü/~Õ«^5ÞùÎwÞwß}·4†ÿn8ù³Ic}“gÜï÷ûý>ç>h;R€že³¼ ;‡ b`78Ö$Ýž½ 7OOl4¡9Oº €<ÏôoN‹ ‹o<îKÍf³šU/4fÏq¼ðë ™¡ F4W"Á‰b€A°2°>ò€€hJ0 Àœ‡ó$F—b@U(mI ¡lŸ¹;ôR4¸!Ì“² jFäÂ\0²@|ßX‡ñ,6="ÛuݪÇãq1)Ú6µuO°7¯ Ò¤ >‘>ñÁÏ|ðu¯{Ý&§Õàk'åé²ù¥f³ÕtC2½+¥ÿ˜êo«‹?-<9oª«¹7UUõz=<Û뺎f¸‘.–àúúúèà¨ýXû’ /yå+_ùßñ“Éä _øÂ#<2^Ï΋ùt4%Íg"Ä€LÚ%iè/íôzI;Uoã;ÆÑ™‰2§0jç[+]€øØ3‘ÅO§Óyw>æ<=šê{ë‹.ºèüóÏ_ZZ:óõ3ÃjX¿´®/ªÓ‰D8tI/2A.â1꓌d”iK<nnF›Ž¨FKÖ´G¶à¬ IDAT¥ÝÌ "“墳AìL,…É)oÀ=iJ7RxH÷ùMbæw):ÎôiÓÉ•“éMëKê”RóÃÍéÓÖm­ŒË@”µ(§k¬Éæq"rüK.¹ä9ÏyÎéÓ§ã;:#‰Ègë Ï¢¹K†$°y|—Û“ÕFö‹²¨9‹YÂhÿ™¬ÚQÓÊ&"ø?ŸÌWVVî¸ãŽ^¯·ººú裎F#Š —Û :QlÅ èÚÚo…=IÐû;£O²9pwg[ç­[ß°éõÔüæ|u[Í“é?“€ã_cO"\8ŸÏg—ÍfÏ›ü9tã7¾à/xôÑG?ò‘=z´~¤½|Ôx[Ã98ãGœÚ\môм!êÐ]3œ˜¶¬ÄƒÄlýG@y6$Φ(xŽ<~‹åd÷e""¢&VFÞÁZ6!ˆ“…ì|ÐPÕu==2¼~2?<ïþr·q¢Q–åø{ÇãWëgÔí÷µ-‹É¡I3¯ÓéÄ© FJ™[Ï <ðÀÛßþöÕÕÕPe&'`ýlj²oæz¹#‚ÿº,ò ŽCF%‹Ü4œØDñÕÀ¯6¿ìsŠÉßž”‡ÊÞßë•ã²®ëñë﫟½X}¼Z^^ö`€ ¥¬Yåò‹¿VEÐ> ¬“LÃá%W<hdB2#6|¦ÍSמÛ9{r¼¬i»M&“b^ô“ñPëqM¸r*jæ xÚ%®g4€ƒ¾®ëâýÅôõÓå/-ìc»çž{úýþã?>N§kZÝ\•ƒržæ.Œ˜ºãƒ¾_ ¢¹|æ ’= AÚ…ùééôÚië3­º®gÓÙà×í7·³ÆÏi—à ©HeQv:+¯¼òµ¯}í5×\sìØ±ãÇŸ>}ú\un>žïn#phêfÓm°`.@&à2qÖª?ÆvØ´ž}±1pÌ•°‚½{ãð XnS°¦– Æô!þˆJ´»7£ÎÓëú™õâ?ZÜfT¿§ì¼¯³~Ózó½MÎqnš=Áœd𹘃:"Ì«««÷ÝwŸ1%Jíø•………(7™Jñ“Êˆì°æüõ­q£*‘ûû(Ï„jеïbáMþÒ¤”í_k§”Uc6›5ßÒ,¿¹œþ‹é¡/Z__7þ™ÙP¡T0šíÐOÊÏAý@S<®‘‘XœÐz¶— a'ÚxqåàÉP:!m÷z½ˆŽûê{ü2÷f»íyS5þÙñì…³êΊ%8g¯žõ—wX‡1çæ³·"ξrö üöÈá½åäâÉôÐt鉥µÖêºîúi1ÍŸ7o|¦QŒ ÇŽÈX[ý~Ÿµî|ÍL§Ò37ZÜ=•RšüȤµÑª~½ªÖeQ¦YjßÕž]7›üø¤óÛˆI|À7 è›UU•r0 fƒåååS§N]xá…§N:sæÌd>IeJãä¶6‚Ù>ÐùDŽ0@ {ÉÄ&ôq†>v4®œC$IÌeP8ý_IR§.%ñwÉL?Ãg`t%Œ)Mû¦æƒ’W–åèŸ"Þ¿õGÝÿÔÿ¸ü÷¥y’ñq Á•‚T‚~L\’¥Á1G°î'‚o´¶¶æ˜ÉÁ«æ ºŠâÉÚ¶Êo†°Èl6ò &MmPýb5 ØÔV8Ú~|xüeÇÓ; ™ÍÍ"õŒ ˆú Æ ¹”Íf3hÜAH±óžc­§ˆÜ.Œ%²˜wÚe-E"  n à^ ¼_åìñ ¢Î•åA9=6\5h×íæ›ä¨é_™Î/7kLצe«ä©Ã÷§t0q(ÈTR¼ìý×Óù¡Îð]Ãb©¿g\ey¸þýaóÍægšÑm²Ã ÅûbÌád:ŸôZ,c*Ç“¥⼋ñ‹t$MŸ6~nZ>\IicccöØlzþtrÃ$õRq®°›ˆGX8ƒñØ%î­«[«ïßxì½å-o¹ì²ËŽ;öàƒž;˜|Ó¤ó:³ù¶¨—Ù ˆÈÙ±ÙÜsæÞ†Ö‹¿>¬B—}Bµ”|Ë yE”b:ÊsÙé@XŠœ7~Ë\:ç|_Dû]‰Zå0ad:Î/˜×OÔ aQa4«æô‰iº>™\kG/¤Ò¸c³C³ô‚4MÓÙ`V}©Š)"“}]²›…ƒývèðœPÖèˆ:Iã I³šŸ•Îw§G äGø ‡¤A½X7VU»ºä’K&“ÉO<1ŸÏ§ýéôì´>R·S;. ¿v”Ô “F«’ˆ:•­tàÀg=ëYkkk<òz ¦I˜œN±lhؘè­¿d:†SW¼DDn¤$;UïkQâMfB¼Ù«ø­fzCš¾j:É–>ÿuuWÕühsZííÜm$©DFlû&¸FhÏçóÎt¦Ï™NpZ6ÊúlÝýž.ä‹¡9û#¨¸Ï(,<¹Æw§ááÑ6Û¨0ššº©úbõ´ Ÿvýõ×:tè¾ûîûÊW¾RÜY nÌÿò¼yKÓµ5Ú‹ŸÜÌvï©ç/Ÿ¯ýýµ/¿ùËG‡k¯YK—¥ê“UæõBÃÜI’0°ì ²dœ*î be´°öè°4§'NÈUWðtèµ`å ÂæBã™Iþ¤ô¢X p@ÊjµZuÚ!ˆÀX–å,ÍÒ\?KäÍ~d–.H‹ÓÉt2šL¿mZÝV¥Ï'‹ ¬i2˜çQ¼5 ÛwmdI:˜IBîi1Xêš´äÍÐñxô;6 9en !WzQĘLôÚ=d·gÉeiÁ0Œ À¸\v쇜½éådz\ÞÝßéN{ÓôŠ­Ñ™7V³ñl^ÌݾÞí,IJPq`ãµåöU’H„7Çîî/:ÿ¬³EÛŠUGÙœnÑö@Æá°ª’ô3ÜõQâÜŠ#c6ßüˆóÎ;ïú믿úê«ï¼óÎ'N ƒT$Ÿ,q Y|—VyÆkÜÙHuš?k¾òÆ•µj-¥T~º¬îªÒÍ©hí¬# ºŠâÁa€MdânÛÿÆÓ¨*`ÁéRÀ‡Ž=èÏYJ2~ W8ôµ´ \ ùjï-µg4̵©¯­(ŠÎÛ;³Uo¯þÚÓlòý“ÖÛ[qî3‚J–ãÞÒøŒËµòi>í’_²²²rzõôú__}ç¨X+Š{ w¶ý]ð«õ߸CÎòv­F»%›NÃ6rÿJöæya¼Ýs`›¹Â™T|©˜ÿÍùìc³Ç|ûö^ZÌ¿eÞ~G›m›q;‰4F³Ý©õbkyy™ÑKÇr;ß@¦0}d2 xü"¥ˆî6…cÙgâoüÍ~ÈÙûFŽawȯ±P&“I½\—ï.ƒ¢Öh46æœJµxÎ òæKF-=? ºÃ+Áô„†±±Ý½‹õì)]&øEËΚ/cˆý^Î^¾†ixÏ…÷Ô××Ó4m|®QÕà~ŒtËɬ‹—ØÍ\4?ÇP›IM™P#¥‰Omjá$ÓOãu¶Ëô˜‚Uè!ÈÅ&w ŽÄÀ)ÂP«Ë²l|¦‘^”†/žùã3¿÷{¿÷Á~pyyyyyyòòÉ|<¯>Q­‚ÕÇ)a´å­ò™mÔÆ£²,ÛU{6ŸÕ"›Þ [t}–RBm—ÑÔlôÝU]|Í ð¸Be’?®?ꀘ£âÐ÷ôLV›ºìðʺ#êPu¯ˆñ—†Ü !&YcØÒ´®ëÙ]³ÖÇZ뿳¾øžÅòD™R½|4û¦ÙâkSc{e8p ®ë………S‹W¯×ÛøÉß:ü­ç}ëÞð†½èEËËËï~÷»ÿàþ`å-+ËïXN·§ò‰m’$±0zZq@»¿’aÎ0!M傇m†4ƒ·¨˜&€t¡kV?¦èmxR»ùÑæìfƒwªß¨Ò(5Á÷ ʲ<ðÔ­M_œ………g<ãËËËgÏžu1JöæÒ“6ªq|#±ˆ5EgÚ)¥ãE›4n,4Kör¯×K[Þ†¦¤³H‚Šft1kçXî}?ä|£_ïIïy(=tçÓl:ŸÏç/œÏœU©Ü]·ª±A‹ª1¹Í±B·ÙüH‹ Xk’na6}iŽ?IMlEJu÷éüSòÓlÈ£6‘ŒÿîÖ½¦]¼-£pGkü—Ç£KGKo]zòÉ'çóùè £úp]ݶYc[×3(V% ¶ãTu5û“›ÏËŽñ¦tÇEfƒ–¼‰]L2¾)Õ§µ®¹ìl\ŽäÀM ~Ë®$ñ‹õêùâââµ×^û‚¼àÈ‘#Ýn÷ùÏþç>÷¹”ÒzµÞl6ËV™Ò.¯i†Ç7ŠŠÏÓK³h¬Õ ¼¬÷ìO´ÿ:("}>Ÿw»Ý´¥©³ 8¿½YýN5ü…aÙ+ë¢îü‡NùXY4 ¸jP#s"}ÉôÙ¬FÃ;`#åÄ íËZŒ†ì˜ãˆ@k;¥ >ØS!5k@x¿ÊÙ›×»Ó»O§ÓÏOÏÞýÏ»ùŸß\Eñšbxù°ø›Eó£Mº‘ì%@y86& x¼ ó£7‹‰·MÚ­ß䕱é0ù%÷'n>×-ÿì$·+¾ˆÓvÈ6¶¤Ã¨ØšóUU5?×,FÅ䙓·mlÎ-ÞԪﮫ۪¢¹]’–z?ØÔ§¹9XiyóØy“‰ôíÞ¸PlªĬ¼!i`@€9ÆÍ¸ç”„ ë„=ñi§ Ÿ³]70âWâzx(9N™é²'{¸¶˜Pj–¡j4ßÚöb™ÖSË£!tuŒ"Í_^^>zæhxy„gÝÉ“'———§“i9)«Y…& ^ £EJ1À „ Ik Nd±8¼!oÞ›v ±ƒ£2ÈeÕW+XÚ¿Ú&¥«‹m=”Ab ŽÜÈí©²­“ú@°û@nÌ*]Ûɳ)¬ƒ: ƒµH7&ïàäØ$òoÐkœÆ÷¥û^š^zCºáƒõ7uò?ÒªþF5Î<Ý’ZVP_€tc%a’h9Œ²iQ&öy¯×[YY1›‹D’nKÝ Ìµ÷§¤¡ 3Á²ãÒlÓ» f®Ó ì¼W·Wõ­õü‹[Z)ÇŠÉp’ÊdÏGŸ>™ \’°¹­1ôž pP_Ò©J2wñ÷r"™ñ âàïi9`ÛÁ). ž²¥69°Lt"É…„nÓw9þîžáÚ•'ónqéé™ÓLiÍ÷Öc"”Înã[ œ–kNÿÆÆ¯oÜù¦;ßô¦7=ç9ÏyüñÇï¼óÎsçÎmüèFõGU}²æ€–Ï"Ny§À_IªÌ‘¿ƒ¤qo Y¢Ÿ!·À ÀMrÛb’²Ò+‚"Æ"ê‰0">Žel:«£ÆÉÀ£G•мÊbÛV¡jÌÀ—°ƒg‚ƆáVøÏv+\wwhP퇜oèëcécÔ¸!ÝRêv»\pÁ¦¿òÒì_ÍÆß>^¸uŽ/;ÉoUUÑæŒ@øË T2ñx¼¾¾ÎÏd‰í ;câ­Íù/»Î™K$ÚÚ\™ÆJ|PŒ¤D¢M“ É«žÕÇ)¥¢*lt€!}ÎŒ¡0h¡g6»ÝnxŒ2Ò í *]^¨Nâx¾1?à–”%ð(j8êòPøµ‰SÛ:o0JRØd¢=ÊÝ#ZpH•åìáÙ“W?ùé3Ÿ¾÷}÷®®®®Wû×õ§½içO;U±=éÙét,ØTKÊÏ€ª/FÄ?­yŠ+pB³Ù<|øpY–+++žE5ÜMIòdä Ɍե3JšèmÇ®´ál&²ÇX±ýC‡{ Þp<‡Ÿ!Пw"„RúÄ0ÖX,`;T¡€ÀJË\Y´va·¹Æ¾ÆÚ^¾Ž9rÕUWÝsÏ=›§[¹‰ ËbK§Jï ά`硞«`‡g4\STɈGmTo‰ÚPŽŠ›EâxÚ­]øðág?ûÙ_ÿú×Ož< kÈÉ»¬l@™¸b7“}í‹ ‚ç€j-¶4|?×1䉖PƒzËÐb€à6‹dþ#®YªH*CÑÎv&:a7‡v³×\úØÓÞCQ¼'l·LÂ˪¦&s‘ür(‘éɇ÷!ÔZœ›ÈÌ,F?=Z¾v¹?ïO&“:Õu»n~ºYÝ^YSÃãV·Òf›ïn›;ž5`${"e³Ù<{ö¬Os™¹£¶ÛH†¹¨,äÁy£eâžIº5iF؆4H©[&F³“æ‚]¯ã¦ã5ÆãÆ:±óó¼eq‡•ïgÍ­½BÕöCÎækuuõرc¦Æ¦:Y§Ö8>…N”Ô¶.ØÉò2§q{]p¬„âr’ße&ØåQ ¦Ä]YÓw!ëÜH’ÌJ6®ªªßïg„Nš1ÅÆ*·( #™üW¦e™R9âŠõ|$9O§0Ê”C³)¼Ì:²ŒSUc<дS=¥Ûíöz½~¿KfqoÿSxÕ<8ó‘ÜiÀ,€È-ÂrvÔ†2Í'«šRñDeÌ]eà—ÇÇ ÖךãØMü§,Ëöo´ë êô’Ô˜7êaݺ©5Nƒ8@Ége°öƒŽiÊ‹0Š¿PŠÅïV Ù ììÙ³DJcMðIÒgÝŒ1¸7æ‡åd4¹‹·L`@R$ÞbP m'ê ,áù‹VDÉø”f\!ã ¡°@.›¤óë'Jù,ôz*`Ÿ>°¯—§—ß‘îødúäËÒË666È¡¦7NÓr*¾PÌæÛrò³"MR¢kÇ„Š‘ BÌÐÇQ͉?«œP‘$Ýf;zk]s^gÒú™”$ûÁ–ÕX¦ãSΞ=»²²2ŸÏëº YÏœ€áIÉØ¸#Ûa…Ip3ÍN{Í´C‹ØØØ`[2Ì,Àbá/`‡¸ø±€P¸ìjC—u->Y’ `7;Ú€éâ•NVÖ®˜©Ñ:£x¥yr†THoyH¨•‰ÜäL›§ê©IãFјN§uª-zÆ“Šû`r:üü@’©ec¢^2=Jð°1ƒ¯$"[;y?ÚT4óp£rÛÕU>hít: E6“üÎM©)éò6›ÍÁ` 69ÏÝ›—У9þ8vÁج@a Àb…¢âÒ꟰röàÕMÝg§g?pó£þëuñ¬¢z´jL©‘v{A:}3páåÎþã& £B(qX»™1‰Qo'}™-q’ÚG_Ø1I²wÛ€`kΙ0ÉÌy= â¬tìT‰#,3êˆâ"ùá8PÐ÷¬3î¼µÈy³ìÕ#‡´Á’zˆ|Y/—@NÿÖ¡×V› ã«Æó+æË?½<9<œÌÿ`>{`V}±òä‡3ƒÈOã>˜ÐaîV´^b‘pjǵ‘‚¸oÇýŒe“¥¥¦±Âãq/,,PÙpÀYc˜› Ö¢sRJò4y±v5-=8¾¡©ãé(S³ÀØÑŠ•šJË'ËÊä;¯"’y$.Ö k î&ÈE•ÃXqÓ`ìÉ^mqµ<[<ÐFâá"¯¤>÷Ý£Ýê'¾·^äž%OgséÏ?ERâ‹÷­Ø9߸פxWz×§Ò§~öÃãŸE1oÌËûËæû›³rÇaOŽ ÎJȲ9÷ó cªI–דå>Nb¡û€3¾ä®€Uâ!û3'DI‘4—º[g7·0 ÂB/¶„b‹²Õ=ªBžEéô'RH?÷Hƒ×K Ò“úŒã†",²Ü”¢÷îÇ7~öxþ½ó#O;òƒŸøÁg=óYïÿûo}Þ­K/_šž¤?NöuØC¨‘cŪÌn_Ãi&6gÆ@9˜<êÁ=Gn™Ôjµ.¼ðÂÁ`°´´Äs 0ñüâÖe” §-ij¨öLò›‘uû½áú{nÆ]‡:ÿ¦n;ó (‹5ì™9˜™±IƒÑC&Äíµ§‘÷e¬eV²-‘-ñ“A’ÔÖÑåÃÞÐ2™;;°•p]à’sN¨™,5⎑}è4ljT@Õ¸rö,ê Òà_¯üëôåÔ¨í·§ýi*7ÃCœqáååÃPÈS¤o‚ã‡!9L²—d³……^Ü ITÙàäµiu¦OT‹¥o߃™ì€o¢…!ì¸?ñ&aÝá| @FŸõæ!bm€>Æöˆ #Öœ˜ì.«ra÷釈²äp8œ];» }ÁkîzÍëÆ#GŽôûýéG§·nÿúßûzó›ÖØÞĵn¬û?Ò¯ëºq´Ñü•¦•l)MHÎTŽb©X¤'>âðáÃ_|q:MÍb`$R~sCh¿Å×ìt:Y+K€=i=úg â¥2EFl2E ¹f«VÊ8¾þ,v"*8ŒÚdN¸ñ5C'[ZM©wYQ›\x#P\I€yíè¡ùb<ðÏ-¥þæjM’Îø2™‹ž§-²ò—ZR S;0‰2p~?ä|£¶ëN^W|¨H4M›sAÍŒ×!b :´xvÚb±P€†ÈbŒkeu´Õþ£;V@BÄzm4ὸ¾¾7,ªxO±ÞoþtúÛ$näïDïs BÃ&d÷†P¸Wi§‚ª{6=q¦ ·ˆö/ƽjº|Ëò·¨ÞW ׆œ° 'qÛ¡†ddj ½¼ä%/¹á†n¾ùæüãhш¢q 1]¥ªª/¾øâ“'O’¬­­Ñê'ÖÆc¥àÙ#ÃlŠ%Ö8ô Ö Ï9ý“Db,}•cÔìÁìü¥£NF_38ÇÌi" Ĉ›Õ6Á3LF%§Îƒ ÊòÀ—d8z8dÔÕR$¬[ðy»[€üø¸Òy€±€I•¸Ô¬¸42ßjµ5ÆÏÿå0¥”Fiñ‡gk³éú¾õ^¿"À`Øž4LÊË.ŽBæ!y}iL´úý~ÚÒÏp“íB…ÍÚ¤€«“¯“þÐ ¦9Ì Ž¿ “CáÙtUÙzg2q:Uqº…»öõToLð†xd7Ü™5¾]`qµx“´Z-#˜ÝÔëõ2ÒpF'ßg—2Î…C]|Y§ñÔÎ?ÿüÞ·ô6ž³ñš#¯yÖ³žŸ~Þyç}×w}WY–ÿ³ý?<þà¡g:sæLüú±?:vñ+.æ¡l|~£sCgý7Ö÷4Ú÷µm±ß%>+N±îóˆ’¹j“ÉäÑG½å–[zè!^àG¤á0@³g:>üðÃ=ÙP”åíŸÄCg¦˜|(SŒæM²î=;e0@Ê¢e˜vê0n… Hábª‹LÉ,Wüë¬ña@Øìä¸$†‹½¶v"ÉnPVÚ‹ÓÐñÆWΔUü Ýwï\5f2?̹ã+Ç[™¦d/ Â^4¢:NúÖ´ñÅ©bñe‹)¥YsÖg¿qo£|s¹röòEbd&sð´?1+ÉSx€N´3?Ûîr€šçcš¿Ü-åÉ 6{)²TOœd²>€ˆ£®]H¦XÄ2ðÏ'¸{Î`0À¡b¨ÂELUUGŽY__ߨØõvR†È‡9™øaÎ,èü¢Ç}2Á͸*Fâ¸3Çz4 ‡Ã¥¥¥g<㇊‡§NZ>¸< «MFÆð†aó¦&×Üét6sÿ¶úßÝïÜÝ¡ñ”çG“¤Ë`‰ÕxâƒÁàèÑ£'Nœ`a˜Ý Tèæd6s©ÓÖd14_“²L4·þ¬G,ãmáËð˜wŠI VT£ç!ì8cxÖtÎJW«dJì IDATLMQ]Å)lí"S¶<ÉMËü×ÍV7ÔznŽ»qÖ“Be¼2Â<*JPTí5M&›áó4q”¡ô#Y'¨»Âu´pCDµ¸Ã¶þK«¼¯œ§yJ©—Ý¿ÛÿÔxþ’=Í)÷ã‘V²Hš¥ŽF­GhI’²ˆ±8[k“ÂFÞ¹•qšÌ`›ÿæG§çU1;ðDl(KÆÅGùŸä çøn1`+°Y­™™5Sõ8 Êw:+®¸baa¸Æ%`lQ'Âñ>YšïÓL<³ÏeÀúét»—£y¸õZ^^Ž–û©;O-}dé]ï §¸Éd²²²rÛm·}ðîÞ[Ü;þ£ñ¹sçúýþêê깿r®yÓæ®¾æšk¾ã;¾caaa45>Ü¿b õ(>Ôy†YæÑÏsƒÇ1ŸÏ×ÖÖB ÃÅ®gõÁ!Ýiw …ªÄjõÊæ‹½€³îØcÈ—›LqéñR³:ÎÆG8ôw3†mÍ« Î'uõ™iÐG èížn±¬_à„”P»‰ã¦‹R#þëëÑ¢$Ç,ê­À?Œf{'²£Fßïº!G¨æªÐ¸b"ÖÒüóêjþè¼½õÚ Æ,ç/ž×O߯röôEQ …ÔºñPMH"<¢„Is–D“Þ•™Æ” l–Í0@Äž‰- Úœ×›sþE¹-KzõÕW?÷¹Ï½ãŽ;–——»Ýn¿ìGÖLŠv»mõ‡Í1©6l²G즱;LV9A&ö0æ Ç…z×o‹èQŒ5¥-cŸ›\|k J÷Òf³ÙÚÚšä«XWVóû²‰j;L{¥<›4éÏZõ|’±,XšYÞf"2“¹<Ÿ`O|qâ+G~ãb΂ljØk€ŸQrë¢ëæ-" 0) í¦£Ê©±Ü¨ÆÕ‘ \rÉ%ëëë?üðt:mkN.œÔ½ý³w/ç)»å5­eBׄ-T%œFÅYÇ·ågHg /­ØmÌñ†“…­ÉÄ6•U¼,âK÷˜|–4îõCùEë–ºsk2’ir‘§/,,lllmŸÍfý~?Tæ@iø×ÀPâáŸɈZGË3§%|@3ÌArñp 6Bn~´yúÐé·ÿ·¯Ÿ\?¸pðK_zèMÖ&éà<)ÄÞל>oÚü³æh4úÔ§>uë­·ž>}:¥4¼vظ»a*7Ó†Ù\#YÚõs!{õŒ=”b‹›¹Äs–ñ­ãËÆƃˆÓΖ9,6Qæ¶gšOYëÑ­­$.˜aϘ¡Ç“õô"{¥ (Ç8§™u¼§#4ZÖ_¡‰b g¾r ¦9ÈTw-&›d¥A?˜5@t7_\#öJ:^“é¤Y7ëº^[[;yòd¦;·O’Þc`=lÌgw[2 F CEV´«˜6LŒ¹§‘%£gíŠÅаgn ©°“\U|'©MgÚæ` ‹8³'»7Žl›Ò]__gFÙ‘Øúrë ¬ ’;ö3P8A"XìtÅ`¬Ò¶;›3ê†Þ»{|ø‚/ü“/4š';'Ûÿ¾½xjqT¸3)¥…w,,}l©ó»”Ò¹sç )nüÈFï7{æˆg¾|®Ò.3—•Óé´ÛíÆátD tK°CNñQîåm-óúÌèµÉ,O-œÈŒmr‡“|-w½’˃gÚ²øÉò‹UÉ:I,ƒŒó™¤UÈéeAópŸ-²çÜ(+µãþPÒ1ÒD!’¶Ä“vCßYi–ȲçËZ—$É…!³T7Th‘ºÐ–õbk6›í;Û£—Чƒ¥’ “ɤxIQÀ—MÎE#Š @æÅ©„pè„&½3NN¦k`[0k»ÅMÌd“á+Æûⳑ4«:Hhr|²Ü€ô £ð™[ ;3Æ8âX F¿õâ^¯7=6ÝØØOÇ–ÊíþBwå÷Wš·4{¿ÝK)Íž=ëÿ›~õɪþZ ÿ‚MŸ,>L‰ô»M-ƒÉô.]´î fÖÊTõìi°§CéŽCö“Í8ª<¦´%ZŠš ?I{Éý6S,Š­3–BO²Ò0%!z.b,šUöh6»ƒ9¡Ïký$Ûh 0»Ý.µš¹<öΰV4mTßhü9hå™{ºj¦8YNÐ ´Ž¶çIÿ¬œýð,]˜ê'k ï²,ëo¯4Šsû!gOµÙl–.L“K&¿±Q¤¢Nõp \*ç§çaÅÄ|gmû‘€WxÞ†õ³£»0~ž²F.!$xb‘¯A þ•ƒ2Ž0ƒ£÷›¿(Š……:ñ+‘Vg-ú@#1„ÈÇ'9ÞšO+Ž<ÃD!®“¶ÿ‚¢†žU¹ùa3cæ¬ÍzB·ãø™ååå~¿O RŠXÝV-üÄÂä†ÉÙ›ÎÖ©®ŽV‹ÿ`1­¥zPOÊÉSú50JE %’Ù÷ޏÛNt#˜ &Á÷íŠÑ=Èø”ápØét²L±EÒ¤âEJÄ„)–¯v iNk™s:{ %miÅšBíEÎL[Š AÞˬ©ˆáÿxdãñ8d~Bœ&ÄîBy:I*ÂØð'##¤5kå!²ŸP4ˆè9¿ÉÚû™” ÏŸ¹Àe{4mll¤-]QÄëà‚g5§9ëÆKÀ*{¿Ð¾q˜F©÷ozeYbýëÍ5Ûn§_ÚÖö”;¾9~xTTÅÂ_[ˆ%2xó IÍßn6jdl$pd§±h€Úô3ŽNj¿'Õ»\0¥Íù=žˆ8Ðn·Ï;æŽÀFdR4í±›3cœØÆ1‡˜.„%;uZaŒ& ='pô6â #ÂÅ¡a)«‡ÙÁÍ$á«q^Ó”6ÈF{E6º‘© “äz"‚íÉóÕFë½­Öï· AS>›¢Ùî‰ Óñ­ŒÀò€-F´3f}«ò‡Ð…¿¸mÙ¬ÔB¤w•b|JÌ]Ä/Iêg&Ÿá–Ïn};ƒ¢iÆyêId»äs&nEƒ*ICÝ+a:÷ÆB5£®ëN§Í'(…t2.€ïbåc2M“q‚ذ§ÜÓÍü“˨± o:rYÏ·›Ïç~ãà_5Þø•T¤b´9 c4r?äìÁ«®ëÉ÷MÚ7·Ë—àÎ ?±0ú[£ñãÎÃ,õ3fM)Ã1agLOÕÐê0«•¢›*Áäc¶Ö[äøFË ®­ÝnŸþùD¥1‹ˆlóâèZ™ÛŠ@: '>#èæˆs ¸Iëá¡8Ë0 ñ»û7žFŸ͢XIйfLdÊßÕ6i¹ßøÊ1 KÎh±8‡.›ß@Þß}{ÓìüB‰5ëy0bì×YÏ]ù’¬]æ’×9J¬“ ž2›.Ò‚¨A-{Ã=IrÖH;EòÝð³•@fAKÒÀ„?8Î3w|E&dK!nBÐíJKß+0ªn¾Éè°CÓ–“ÇxwB‡ñФ/%ùñØH2™µ×˃۞¹6ÅÆ/¿Zv°»¹ý¥I"ûs9{óš}û¬ÔÕ—«ŒÂ_ÿI]©Ç׌}æúì)K³ClÆK-™^œILf²ˆ‚8ÐÅŠ¡ Fµîs¸Ï!$¾i´©ýV´m²¹™Ì>¾2*2äã´Fã΄Cl#fSE²6Ó8åãMø™Œ4å²)ÂF°6æð|-q Þ€4"1‚šÍ+¹!\a”•”8ô<ì>·›}níT"Ýnׄu³ågÀc¹~—I›P'8.ã¶€ó°8ºöøÌ~L=2‹#“벆ŸG…¼•âÁ±$èefÖãÖV·Lã·l„ÌzÇmcÝ~¬–8³ Fì/¾;;—Óë# k©¹)›¹a¡ˆ|I¦ÏÎóF,¾ÓNw½C›ä±î3Öö´Ê¹ žO棣v»}ÞyçE±´´4¾d\Ve}a]Ÿ·Ýƒm·ÛAœg€£6ò¸˜2ö†ôÄ +†L?T€ñ—ábë3REkl¤”ÖÖÖÆãñÙ³g§Óé`0@Jˉst˜@‡í3˜é§™íã FjìéÂàw¦G¿v”é¤Þÿ ‹– „AŽó¢;±Ç·I[šZ°Z-ß°{êÖ³Dž0Œë1;¾f«ÕzÑ‹^tÍ5×|ñ‹_¼÷Þ{-ÿc°($v\7€ãX9ÑR¡è–k>‚Dü0‚(èZš qfñ7$ì(#h¥ò‘ü$ùD,€€§(_xÏøõÅÅÅ€C3 ÖpvVÚµšÖ‹Å5 ’‘L€Oâám×3}àPwZ”Á6.’ÀôB/Õ’Ø!…Žïª‰h;ÅýÌjÜ´¥\Oe·jbÙ“-±7¨wùIR¥Ø&$[n=fÄþ¿à‚ ÆÏ/µ–¦7NS•æÏ›Ç‹ÆB£ñɆ#gÌy÷0ÈrâÈAŸaOÞÊo6É y:q!jG ®Ç? ø&™ë¤^–$°œ’f šŠ Àȳ£;'ÑÈòÞ§ÉÙD}’{·irž½çˆ1ÉazcYNÆmJÉeShã°^XX8räÈW\ñÕ¯~8È3"OÏõö$Mš&vMfë$5‡l®žugú¤,^––Û€ž±34/›h!ü˜$I»Ë{ŠrÄ–<܇˜¨Íø‡ÜÃô¹ƒÅ G0—ÇéÖív<¸±±±¼¼Œù®»ñ0‹à—ÓØp™h³dŽfi#ÔoèwÜñÕ¯~õÌ™3îÆÇ×ÄÓ!¢”h´•›Ñh¡Û‡îgœnYƒÄÒ…¶,»PI6çÜíìC½6â;R±Ùˆ!I2À´~{>ôYœÂng¢“k£ ®–¥ð ÊGý L—¶ô ²¡:Ên²‘êqÓ˜v â$Œ@kÍ+R“H¡™íÖƒ.«L±×c 61‚Ÿ·‘’,ñÀ“Éd}}Û™¢2ÞpQµý^ÎÖú~¤Ñè4æ—Ïçóyÿ²þl}vðM/½àÒ‹_vq9(;ÿo§úp5½qJ“9«Ù“„ñ->æ‰hÓQ€é©÷m‚OzÈ&$AK[’<4 Ù$@ätA HA:@.ÐÙ4üZÄ}íé™vz¢ú̦…æÐl6Ê———=º´´Ä·–•çùj< ·úø¯éQyøaü"îO@v ¶æ#b ¬aSTŒ^ˆ+™°5«5@‰\‰]™Mç´úCDîø-Šx–ô<¬*Má bBÌ0±%ùÖjòLwFh4׎Üî)‰—A¶4ß•¯@ŠãK²” ž¹«ˆUX¡»šçˆò—‡zéK_zõÕW÷z=[·Ùï'Þd4™tºrö˜±Öüµfýšzø¥aýººý‰ö¥/»´ÿÇýg¾æ™¯~üÕÝn·z¸ª>S ~h•XLÞÿDp"¿ö°BüMô!hÆ›D¦F ‘ÕÏïö HÒ0Å‘=ñþžf·VƧä,`tßÍóÑhtöìÙÓ§OãÑ: |„ùÅ!ò·ˆŒ»(Šyk>¸t0zæh|Ù¸Õj]rÉ%çw^üSœ¿NçòË/?ÿüó=šàjeemÐ1-ÈEâuÖétºÝn”8¦¥Æ@ODȦ]ÀD wMVn9d0÷¸ŒvIšÞ5õ /çamìV¯ˆï2Þ.N%çi ËKÍ„'B<‚~¿÷ÝwŸ~hn8°Q=`eF56ýÛÓÙ¥³âñbáÇêºntk?¼vüŠã­Ó­ôÈv;a0?~ÜŒ±iðX#ÒG §9' ,2ƒÖ3¦b³‹×áÇ‹¢ØØØ0sRÙ1Äð¹q…äÁ‘Ì:Ö—j"•%9‡û7$ãî%8ÑÿÃ(“&ñ» 5l:‹y?eÌÛ9{¬m>¤Çëæç›ë¯Z¿óæ;Ÿ|òɲ,Oœ8±ºº:»t6{Á¬ùŸ›‘ý!l•Q† (ïnGÙ">o8 qFÆÓ~kÐÒê@€–S›êÁTëuf‚cÙÁ ÍÂÕÑÊÎÆ&lú™»:èfWåm€(£þ&öĽlÔ}c·z ªZÕd2oŒ»oìNf:½zÚúr‹ü.É …oRÈø¸ƒ"€H´ ¾‰cV±®ˆªˆaò£”»ªÛíšUŸ9â~Ü Ñ0Tòâ›FúÌêu8Ïüý2Žý >¼æX$ñ÷ðP฻"±«¡]q7âv!/ä®»Á.<:i˜03€4ŽÇ€ jÇE:Ì»-DÉ=_*Jdâ• ’Æ6?Ó\¡65W>kõÇ~Éèy†2=þ¶ª`ÏÚŸÐ;x9Þ™¾=ìå쇜 ˜ùhÞx¬1ºvtî¢sÃG†Ô‡“§OæW΋QÑ~²=©&¶óc‡x Á}Qo$3’³)3S©š)Mj£‰ÍBÙ‹Ê:lhjesÎtnÈ‚ið&)™Ú©7mé]þ@…ðNðIÍ/¢>`rD€x¦Å‰LyÁ9l4 »ÙΚ_j6l<ãϸîºëNŸ>}Çw¬®®6³ÙÿoýâO‹ò‘;Kp·âƒ,Ž’9ƒñQÙJ±Í–zLZÄ#??S ißÏøÖf‚Áðf¾‡‹á'3§N:…žšÏçq‹8‹9=BÄ—r&Áš:ƒ_v¦ŒÌ6‡Ü–lV7@db=ÃR˜-eÔ Ïëð *ÜXÞµ´Œ†CïªÅ¼ˆßÔC$Rü—&«„I’?où¦€™‘²‚€C¬Ýíl¡¶ ^™£€§ÃT–x Me‰š<²rö8ÞlÞ‘W³³ñÏ‹ÏÍÔ,êbú-Ó4H­ÿ»5.Æ™]Ó'q…„{š¥šÜÝ‘Ê4£œ5%}·ñdN£ÝL¼ý³gñtx{¼ñ-¢(ªº*Ër<gÒ°´"]î åJ†c`×Zå“Úº‘ AH3†ã5çQŽfŠÈ-„¥ìJ¸6óÊ@Þ£_Å@eüÙ¬ÈLà,Æû„É "Z5ˆT’»¹]ÏaÇ©4›ÍªU£ŸµŸÕ>}üôòòrÐ.꺾fظµQ¬R¹ gF£f³‰Ó3Z™Æ¬Ü pÏœßËa’«ƒ/..ò =´ŠÂst'ŸÚzÔdÌ ÓÞØ=¯çæGÆ^ñ bÖG±µ§"sGÆg‹ˆKeì9¦†Í±¬2¨oˆl ¢>yR, “* Bf©öå̾¦3$¸£ÙƉƒ¾Ýn£†gX8cÙã_\aÚ<Si2jWó~vNV¨ŠœÿÉ#ýÎúd‡Æbc/³‹“¼_ãÉUöCÎ^¾¦h4ƒÁÀL!O#Æ2ŠÞIˆ_Å©Ál&G'[%›AƒýL3ƽ×x,ÜýBvåñ2äå{1qMBmÜ3C?Šá¤´"RÆQ°Ïco£…mgúÑxH[ÎÎ…³ÜŸ;Àm,Ÿ,'ƒÉüÙóIš¤ãi6›Mf“ò›ËÙ¥³ò¾r²:á⧃«1·:íTîaœ%~…MÏÈL-¢{üd´ ÒŒ|"sgÉ*Ë$ˆ‚z½Þúú:ô-§/Ù`M’¨Œ{¶¥/hÏ(¦iZêùC›§*0&\Á@Jƒw&TÞúÚæ™rÁCcTãøë÷û†m Ø W·ÛeÚ&óÛ¥(±`€5½mg#ÝÌÐF£’‹6#ÀVt›M„‡ý2¨N¢˜`dÒ„ókòf" NáMxwĽ`“‰‹;2Ywa ë;ð]öCÎ3¤ãY:À„R¸˜&eÞB¤vÍ$§Flâ40É•ð5@Ô+’³NŽGˆÈݲ²aÃ@l²ç-i~Óª£œÂžÖæt “`¢?€^ƒ‰pž®-Š¢SõþmÏÀ¯ÇÉk&¾÷ÀEç_ô¼<¯(Š[o½õÉ7=9ú¯£taê¬îµAÚg÷MF6 €X&âé#Zs¢!Æ Ö_‡ü†€ª4ù°í¡õ… 5ìðLýlÅ0hòE‡JÑò6â-¸Æ'¼ÙM£i6â´áb÷ö̳>\”¿Þ2ž¼½Œ'B0¶ÑµIöfߤ-¡X°‡ý³—ô4eÆtãx¢Õá>!.˜›ès¾ïÜĉ³˜Îª›ÞLK° ²çPˆýU6;'­ñEy•9»°™½â:£žÃ©:ŸÝ ³~@ÜgknrÖ£ $Á?î$^–®;C} ÂÆÚo¯u~©3ûÚ¬Le£Ñ¨§uûóíñχß5l~¢icó‹\Ènú[##ÀD_ï Ía<///ÿáþaY–O<ñD|>h2êš_¨:Æ"¾x8úw£Þ;z×vêºü•ÁÊ'VZÿµÕ|³ÙØ|ôq(oüÊÆy¿~ÞϼâußÿºW¾ò•óùümo{Û>ðµ¹öäžl¼º¹ÁŒ3âÜCšqúCá3‰.c–‡­\¨Ò‘rAÇÚ='Ë`ÚǵqŽÕjµ¢Užén…ñË pg=Z\‚¬Í‘)_ØŒƒåN?<±0b®A©=t¡Þ9;Pø$ENŒÇã1±Ç:çîŽ6Fª•9Ër ‹ž!H:ç‚íG u(иÁ Ù·¢†‰Ñ±Fc»ÚS0ÄVŒ&/^{.=Î ÜÚoêØÀÁáñº¾F-²> Ð% ÈxNxëº^3lk¤•TÌŠ¢ÚR˜å]åìÚYý¹º˜™€·[hœ˜½J>A;:n2Ögä§OŸŽ/©G' ,;^Q5S|ôk£ƒ×,ËrVÏRJÍO4«WëX¯>^–GSêºNTOêÇ_~ùå‡j4—_~ùÂÂÂêêj]ÖA¦Š›Ã‘dqÓ—y…ÜN¬U`ÞTÅq›™ÂuLotÏ<Ø› 6u%"ýpw>¨MÙ/Ö}ȼ_Í$¤G⺓¢¤Êx€Ç<¡³g³™0kÚš¡fšBžFÔ‘n ÚŒpÚ …S…TÀúİÌì.픕ڧìq/'Óow#í4@ô!è±Ü;¢=`z[Û²þø¯Y¡ö°ñegtd‡>pàÀòòòÊÊJ†ðóÌÆ1‡Îf¶çHÝ}a ¥-IJNÕLŸÊ< ؽ>È2 Ù÷Ê©´ëB.ž#€êÛ8ºqÔù³N¹Rö{W]uUQ=ôÐh4j|¨1üÃaó÷›³33 Â?/¸ò­-EC)I°1óÛ–HlxòPrX瘮™@b§?>mývËS_›2—ojO~bRýêve'þx2~üñÇ?ÿùχbÍŸüÉŸ<ñÄÃáp^Ï]Äóém ÜŸõ“U6îX¤3ª8χ$I[q›®ÿ{ÑEÕu}úôiÎz$“=äî—›—Œ'ÍÆ’¥²˜NPÈ„ˆRö!а&ƒaÇ"Sl+Có†äpY¬uç5s÷à•(¤ . 2N‹­‘˜fÆqFàû²Yºý³7!À¥s–‘G‹£ÜŽõó"X­/©Jh9û NRp¦Õqãì‘ãóÏ?ÿâ‹/ L8#‰~m·¨(GüM-š${Ì;p$Y˜Ž€,yóp¢-±íYà‘xn  8K¶PtÜ 6Ý<ëâ /üîïþîn·ûÖ·¾õøñãF£H¹©I¥PŒÒ–‘ ÏP”5à6¤,ÎG|º–̨SÝb™jH¶Ñh o¶¢iA|Ùæ7×~½ó:ÆúÛÿ½=üÃS?qêcûØý÷ß?xà~¿?þ¿ÆÍÿØtÛ†pŽ÷š"]"0HØëõRJ«««ƒÁ€æJäï$7žP)JrLw>N€’+ÄO=Ÿ9þY ΋¹3Á×x€ñšÝJÉ(HÙr††e%<è#šÙ?-¶§rh¬ªæ8`.HÌÿ¹õYÝ`0°ª +ÐÝ)“n8œ¼Rëd ½‰}úÀ¿Lù'Ms®—v*[€;ÅŽÙS¤`ÞÜ/Sd7n)ïÖ=¤cßh4žxâ‰hd\IkâÆÚ¦ 'ü½E*MdðL‰‘ÆøšL¶«à€Z!«Þ¬ÿ³Ö¾“ÌZ‚õYž$>ÝmäÙ=Ó\jŽÇeU>ùä“7ß|s]×ËËËUUÕ×Å“E=©Ë¢ôÔ!tpÓš;ã‡ArP¤Ž»+ÆaërÿŽNÉîÙú|©Hͪ×ÓŸþô'Ÿ|ÊuªwäIEQ”ÇË4LÃç-[¿w}<ŠAý­õü‚yãCõõõuD&V,Þ3¦Ad¸úê«/¸à‚Ï~ö³kkk£Ñ(Ö4ÌP— @ºšÅ~(ûâVÓð[__ɉ••>ŽËfŒÂ¤¬RËG¶­=J&7 '´ÑN³Ùìv»Ô=”Ú»á  `uÚòö+S¼ŽßoÔï÷CÅ•@žÙ,TãÀÀ¹¯éÆ3}ÇHLÞ±ÃaœBq1ûk! è¯ÄBÉÙØ &”ƒÈA†þA2#÷{¼QÝÅÉ&0Ü7Šß P\ø.q:ÄRHlfAlH¾ €c<£Üøñ@†Ã2õ6üté”fâÿŸvÁäŽOHÌó@xë]­Ñσ¯î¿ÿ~®jüÃãÖû[õR]—uÆKŽ?D‰f>V<›Þó¿.®Yþ€˜Ë²nª&•Dçfzôú½jmm _œ²,篘7oišXŸØû©ÞÆØ­VN®¤:ªÑô¹ÓÖ»[‡óbN –è£#)[]ñ€yä‘ãÇGÞm`-ë…À¡7¡‘š,öWJ)ÔW­ù´›([ƒ¤Þc.ðIJƒÙùîØ;´XÎ4ã«Î'B`†Oþ‰L1ó¼à¿Ì¨y…6÷'ÑA|…Eb»Ï¢ Á…A°&Œýy¢ˆû!gª(dð&£'loàápHþ•1_ãðr@òk@~ˆÜ£Îni¤]iÖ¥Žó…h¦ßåÒa·œìÈéê;¥Š–õ¢3›6_Ë,r:„UÝÏôáÁjÖ¤òs×4cstÞÞþô0}5UoªšÍf:”F¿<*NÕUQm³Œ  2äµ›œä’[Ð󌆙‰AÚœÚÝ“}vŶ‘Oª÷[½å[–»ïèfÌ×ÑOz?سtÏ®õZå7•ãïEQž(;ÿ½Óh4êb›]–µjü(-µbÛ˜ wCó,K\YT™-¬ÂP'€‡ócÁG†žvù¡ùò ƒÅ#µrd²GfIâÀli®‡¿´Ã7¿èQV¢ çjM 7æìû`—“¨NHhÏB4ˆ§O[`Ùƒ_äad?œB{uöCÎvíl r”A ¸È>²nØîÓ#ÐÌÌdiˆ"V1íÄÜ3Ü݆ʉh¿M6M&ö±‘"_*#4[2>{Å`wÞÌÜ”K;%°B}`ÚRôb«¢•p®¤+îú¯ùÉfu¦š<Òÿ\TŒŠ•¢óËt"¥3©l”v…N–¹sø"NlQ¯´SÓ!=³$C­P·c°‰·5íuѺ®[ÿO«ÿ™~ç·;í?hÇãÑKGÓ5mÿf{¾:¯I:¥XJ©ùxsþŽ-ü$Mý\âz Hdl% {öpËü/Lø6ìœvÚñ‘{ÑðclÖ~k* aè8îgV’ìs;µ• ÏØB5(j“É¥¢ÚÔ»¥í2¥dIü+ÛhM¡9 Râf²Ièm ¨kî'ØlOOÅ ÄEÄL®×ó=û!g_$ž°ø{Ò·H² é0¨/°¼âw±•uýüz:%p+mwˆª£G£íUCdŠ£„xCÒÍqà;LÓX ñuˆ[èadò𱑬+E–·Ûë±ðÌSp c A ü”]@tJ,¨ãþ“gÈË{ÊêîêÐïBä‘¡ÑGkˆw¶h´›L^]Äé'Î}DB ë[$Ÿ¦vàÑóCl‘àa½ñ™F÷¥Ýùÿ9?{ÓÙ”Rã“ÎK;ñ)àlœk¶f"ÍȈÅgÆËd0Vl(8<¥‚rÜ¥PÉcF¿ °ôñ®ƒ±¶þî‹Ï¢ÅH—ÞÔ›L¦6Öa¿ß‡*íuîö!ã,Ñ@‚aèÑ…¸“½^¯ÝnÇ{Z&" i FïkÔ:`µGq¯”s&“­ãÏÏ£ÎæÚ ŒFd"Ëj‹øh Í~ÈÙ{Æ ˆì¢ÄmF+|ÏšÁXCj·›@=Ô™4$fPH2.µW'Ã:LDï!ká¢vœqÀ<´Ìª%[‡€˜•íÿ'Õ™lL~ìÐRâw6íCßÝâ“eÐüÔ Jãxê>Ó\°WY¼à]Zâ!ä2mÊÇÚˆQ\ 3=œ ‘8eÞîû­Vól~Ù²*]™·b3iÛ-[—Öj(D8À"®9¾EÆäŽ)3;m9:¢¨•WH½I´]=$¹¨YЖi?= ³øjA¨Ë´ð‹ÞÊ*ܽÌGÞ~Õ𢕩’IFVÊ`Ô‘±ÉÂKiÖ~6zÌ´ J<ÎŒºÒ¥¤ˆí3³¨É×1<QŠÃÝzfi\9rä9ÏyΩS§Ž?Î5»”4©!i*<í”44BÀûÇㆠkÒ¹YÖi\’´A\p¤€{xöCÎvNDö„„L’ð9, íÔïžã£±xÌn@ÜæêÖê`ñŽ™=žfGz²l’ ÀiàSò¦­AzzÅL€bŸ¸Àe#Ö;)b,W•äâ' 0®‡éF…‰À¦Bö°2b'Ã@ùÊ”'þãu0tiÝ!ÖÇ4òzpù(ŰüÉŠ hЀ<­V«Ýn///SÚ¦-gë»@j@J<Ï:ɯÅxfÒÐ%ýsðLÏ<9MÆ…Ö’à`q7øvNâ\¦ë@ïšóŽ"À0ž¯©ŒìÝ>„ñ¢âáe€ÞK(~ ±‹©tiªCÝö4åf¹P•E]4ªF1/Êb»épM²…Ä;ýÊ+¯|õ«_}ûí·/--ÅæuaO¹1%Ž ya¶à-îw&¦ð­ËÉÁ¹â7 º? º÷ÀšqpCgt)B£0svìd…iÏô“DBñ^…&†Ï8ß=Íçf6I@µÎyG;²Y»Ý^YY1àFÒ”ñÇhÿÄ)c4¦Ùlöz½À©‘T‰³ß ô<~ƾ BNDz¸äs¹«‘fF|ED.3õîÏä ИÊt-‰‹®*ˆYw$>%$Å2òQ0CáC!âú믿òÊ+o»í¶/|á «««f@`‡a½JFF­X!É4zv<3¬¡=›QÏõý‹q·mv‰›;UîöÅW -Õ0ërÃRC$0óR3Ñ‹ŽqÜ÷ñ¼ÁÊ;ÈiSή0Š ŠÙ³µ[›>sšŠÔùP§úb5ûâ ìÁãJ Þ!÷wþ‘GyÇ;Þqúôéõõõ`¬!bäR‰T̆7÷”Ç‘fTà æÔ!Ìj xæ·röæÀa–•q[ÝàÍ\Ç=ÎíܶGÚ)ÿìÙ.{ÚÆ†Ï­ê!KК%ÉúfÚæÙwI[Â…nÑÇÑŸ9œfÓþ¶mG2r&"ÝÏ¿ž¸$'aƒ†KµD’È!…ùªÃÔ¶‡`~º»ÔÀ“ŒÖ÷´-)ÚÀ½òw1‘1˜Ë²¼è¢‹n¸á†«®ºªÙl>üðÄ丷!¦Â×Ìâ–ÍÍ|Ôº]A?Š!›ôXÆÍr´¾Ûô~˜h޾fôÛ8Ô’ä* ¢f͘x:¶ÔÄ.Óé ÈÆÖÈš`ñ¹ ¸ÇƱK™›¡©Ì;ÇØ£k\û'mÏ6®'?8™\0iÿJ»óµNQ“×Núÿ[¿ñôFãýŒlMÇËÇB]×+++îAº>sÿ‰ûÀBŠœÌ³ 6Û6)&IdH ³ü²ù*û‰æg–Eû!go^¡‰Ûï÷ɸ#Að¸¯{dvpo2ár¢Ùl6dëL¨XÓÉÇ [â&‰°¾ E„1c!zÜ 'dn© ÉÐ}qÃa)¶ä(¢H@ä!Ž2©Ø>+MœÃ=ÈMf¶7ô°´ÓÖ,;À·÷½‡Éò²´Ñp½Ñz_‹1SóîÜ þ† õ\ìŽ9¬ñC ³ì©JPG>Ô&¶™³Aȃ}lœ?O e?ä|ƒ^£ÑhyyÙ}þL¶±çïœbWq³Î¼‹R¯½²iÞœ•DdüLâ"ëpýý^Þ–î*»®çË‚ÃDP$¬:ïŽpRo¡üI(Í!¶œ‘ÜÝÓ–F uO’°ýíž1ÒiøFÔv¸ Ç)I±ÙwÝn7È È© <„nÕlë‰0“('Ožüð‡?Üh4N:µ¶¶fgS3Àš|{M¬à»0ÙCíåºÇXbœq,fK(eƒ8ik<6n~p¸:ãë $Ïp·¥!×L·Ÿ¤>3VçE›ï9Q‡ÕnPÑÝr‹Œí¦ÕdÖÙ,õÓ|>þ³aï{U«êv»­Vkuu5îIûWÛã_·~µwÒAÅ×àÍ’™8¡2‘†Óu?ÓE±YÌ\÷½2g‡´Õ„Ï{™n }#;ö«œ½|M&“yg8éN*¶”ЙóqŸÈøûú/“üwc‰€{&9–¸ j84ã\&c‰[œƒ!Þ–©ÃˆÑ2¡Y•$ƒh]W§i¦dnÙœæVaM—±›s û›¢f5"9f€{@ŽÌ´ÛÍ—0`•hB>„×øtæ(-=BŽ7$Yv’K:rü‡z¨Óédäc3ì9³/O“3ŽÅ‰Kf6âÇtª—(¸¢{*qþÒí‹¿¯ª*JØ`º{ø€4R1“Å™½ëûÿÚ»Öà*«s½B !\.á°@ÀA‘óETˆd„9ØŽÆŽG´ÎX¡Lˤrñ=§ÜSh9ƒ1ƒt°`£I)Òp 5Ür‚\¤!†„ììì½³/ßùñž¬ÍÁv ìÖóà Û}ùÖ÷­µÞw½ïó>¯,t ÁþˆÍ;,˜’” \xdÔeò«ëš‡(=æ¿–,Á›[úúúìsv§ÄNÏ=÷\ÇŽ·nÝZ]]l‡­þ½Eý2f;4sÙ=ų  H¦¤¤ƒA‡Ã!g\ÖÓã0·xçgÄ6‘ð“3(¾±kn©…cÎÇ8'i ŒÉ‰“‡ß‡uÎ"žñL#â(£•)p0Z“õE[ YÈ‘r%˜rš&ûÚLÅa!Pƒ´Ò ±a’UÔ4H ÜsÏSéqí/‰ê0™#$ؤ8/ Ê’tÜÀ»…2÷—åS¹wKÀq¬†k•ë@3ù8ä/ùHçóùü~¿ÛíFNÆ€³t€pe»l ÜŒG¾_%ül”p›gI\a’°Ó H] E¬Zy b€R}Ò¾}{è÷`ÒÒr{™A'g5nœ v"o—x¾ŠºÎ„k;…Èý ðshRwC:{âÙáRÎn"Ò(ÓXÓ´†‹ ýýä‰ÃÇ’ÖÖÖÖ××{<žÿK³«(´üaìsèCÃ$°Ä¢\p\\\ïÞ½ÁÖ‘À)瀑ÒGZËAøèˆ”BW,+ëšC_G+ÒBvVFarÓ¢­µ^çðYî „‡9O. ÄÍ*àörˆŒcúHØ¢2@~‚Uñ9˜Æ=q9±%)ê{ÍY\:‡×K³®Eó°¤Á¬“»kã†Øú™—,ÿ‡Mò@TäFmœ,Q=fÙ!‰ù ÎŽ%’a½ä§ µ'€ç«éùãüÊÑQ.)E¡ S¼Ð³v‘+ƹ›Žœ2ápƒ>¶CÌàÐÔl\1‹„B†2LT !ž‰h'¦7ïJx|œ*‡Gº`§y†kna˜¥ã­´û”cºÙ"¾ÇY 8]±"I“ÀátÅG(ØE!OÃðÛ¶»>Öóš'¸>¸ÿþ¨¨(·Û-àû‰/îã8> "ի牸ܙT§¸¸|^\šÜ;|mšÁÄrîZ¤õ Ó ¡p‚g“-ïvEŠ13ÚÆ­Ò ¶ä-÷—àsö‘ßC_ˆ"X‡ÜKFV $2ù ÂÉmæÚk2´–â¶öœRÂ)ŠƒÝˆ"Á¹YäpÈÈxÖ²Ø ì“l[^¯Æ¦b!¤þý¸»c×3Lؾ¹ˆ@ˆâü|j”¶hAù*µX–øÂ’|’"^ŸDêX#}@—ˆ‰aÈU0ƒ™+í!G/;2 ñ¦’£:Rœz¤˜)õ=šò)vaa Ë —ù©=ÍŽ;J* ÜbpAüƒ6g8¸J_vœxä~â&÷íÛ·gÏžŠúâ`‡.ŸÜd„Ú`€Ùy‚0Êì5!pD¸‹ R̘Шê \n—$rìXÛŽ³íÇìèâäx–]g/VÛ#!È!rïÒñï¹€ † „Oö 72¹ÍøÂ8á‡ç…¥*Κœi3§œˆ1Ö•Æ^€d ¢·°xZ°+¼ Û^Â)}ÞÅÄIÜ´¦èFÅ*ô,ÒÌÚˆª¥4KxûQ™²qqqhƒPzxš‘F®‚sÝØ¹ŸŠ‹‹1|®Þ‡¶ÌÒ*l$˜ÂÎ2‘ªeƒ&tqÖuòX ›EEE ±ts$rø–rwE˜Nü¶k×.>>>66Öãñ ’&£FPŶíN:Añˆë·ØÀ œEk“ª ³¢?ºö%áK˜-Á`ÐëõbBÂqæi‰(+÷™ÖްÜb€éaâšHØJ+N¥ÜL¶¹¹YZÁãÓ²w’€ÄIvj(¶±ø¿F’†ë )Ï¢¼ôF7ÏSv‡ÜM¹MÑk££ÎE)¥‚“‚¡ÇC&v†‚šÔ/šÂ±öÔÓqÀåc ’üâ¤Ê…‰ÂüZ:µ@ 7]ÅÉTà¢B–ÕÁU˜œ67 3µÈtZœþ®KI²Æ§g@©b¶.âûÜ)DQK®8‘ï‘%EŽjfµb&IL{¨69%À]Ÿá‚)j/ˆÒWÛ±#³üt˜:dÑùÂøȹt®ø ï]Õ,®3—;€ü3Ë„@‘ýiÀÃæ;Ƨ:ÖpD,u ì°À{4Öòä'°ÅpÿBvïÞ]Bð¬ÛÈÞ­0 X ®IÒZrð§.pYV^ÄÙ‘wdˆS ‚‡!hÆX‘l>닳WGáL†“.By˜ëXWW¿¡NèÁ0›™98î ¸•ûâ˜Î¤M¦êá,Ê\LLLÌž˜N»:yßôG•R1¹1,x@ëü„)g¿ÁCDìN¦r†ãÀ +aÂCZ O_£œqΓYž#ï?Èþ©EÁY„“ÆØ¨ë˜ Aªäì…VΤs¤Êp[4®9;\ ¨®wHË,¬H~ ž&Ë^±@¯"ñS–—ç•cT.µSJYe [IDAT¹Ý&q„aq¹R‡ég¬%ƒèŸW˜Ú„ò,®¾„¨6—‹ÅÆÆvéÒENZ°@œ’ÄÇÏiš•ªe3žáG^Õ² ;¬yä?3ä4ê¿°¶2aµ1=±Ç#‹*JÐŒ€ýC„˹5N\vÜ [ucn@n€÷(²£ø—³€ª¥°&nÖ>ŽÈ| Çõ3)‰ÒÜ‹„B¤µ`µªîÁ#Ž19J;Ùp¼[ª|9|ß¾}{9³¦½Æ&ÂÉšPZº^A §/¼éæ+w •õ ½è¹ñ vÞþ¸2?ѱcG¹`öMˆ þ»H·IhˆÝF¢ÿðš5–N ˜î¨½à-ŒièŠTu‘F&Lî‚ÑL¦QJ( \àݪ*ؾ™jŒX?!ÇÄÄx<­',w¢„¨%N¶m»Ýnœ¥X JšÌ¤ÇÞ òª|˜@¤Ô&vRøÈJ©®]»&''_¸p¡¡¡<=ddkÖò:(\eEmÍœ`b€g!Óƒ–÷Öú»pý&‹—ã€Ë2áðÏ4íZÌ‚Ëæ,æ!‚—X°.(¬V‚°8“DÁïb4¢H#èÄ¢¥hÄ7V2½p9¿ÍÔjéxÄœù’øøxQ£`–¬”Üù §|¹¸ ½Ý@ R$M 5~æ7rÈQ,DxpFQ"ð58¦œNgSS“Øn4Àö€%j¸ª1r?2Xî„Æä4æ¾³\;2‡}>;7Ø(!ÇŽHxÿJ„Œd€™ÆMÿÂ{ß¡Ê –,y\¹Ïç“i ZJ÷²Mâ¾SZãNÐÙ5!ÎxA«YXö;eV#·Ï1myräV\’¸Òˆ‹¢¸!‡j¹¥19«ËÑü/ÎokJˆ\¢IwhUî\ÿˆ´vjF\û ¦öŠõ†ô‹°ê>÷õa©4èŒ!úÄ5 ˆð€k§¨´ NÜ:D µ‚®yÖús„·ÔÔêHþbûÎ*„æ»c˜ðwŸó4Hsr—qM½m˜ÍþY8A'<œþáH1ÿ…}ÄŸy~ÂösL•µÈ<ÇîÏLT6,jÇ̹Ԏ;ÆÇÇ»ÝnÐm´EGÉá/&ës{^GÜ;ºqBiEþþ*{“s£ˆ °ù i`d\™;ÀâóòU ;áÁs$Šû" ¹ÎJMìã4 %0õå RvÿšˆñÊT:íÄN'téÑTÕ0p»xøÈŽröõªbÿàèo#ÛG/Eì‹#“šÀ¯pØ$ç@¦]¡öO$쳃J u˜‡BÂ÷œ_aÛ#ÿK‹=¥T rx½ÞsçÎµÈ ­rÐAŠEó©5‹«¨]ljâ.æ6Ì îŒÏ烧Ŧº1¹@c#EèO)%eXœBló„‹£¹²{7n©FHw()Iíô€ÓX&IzÉá$+V+œ-tŸBfwÁGá"Å–0AyРAéééùùù•••¸l¡â†s©{<ØvÐ.s’Ó~è®$ÆMfq>“‹çà„19&­q¸†EòÃÖ-#ø,˜ÆÂ…˜aþÂ’ƒçޏ6"¶¬¢ˆôƒ¦ʧ.öƒà óŽÃˆ\ÛÌa@ÖIÃÅ À›õ{pC´V¤|\ƒjWE åƒ"oèÏ&{(zmÁ~sû² /¨ªÏ›ŠUªIHz–Kky˜ÈÞ#QùKnêîHÎ@¶EÐ#qnà]7ØSänhúIp“™åÅV\Q+¨¬Ê·q¨‡V¸”ʲ*×M—ŒDÌ ™Ä ìg;@ åH ž‘ää"9&,Õcx²èé¦9¨–bwð`4m¦Àhe=,ªg`¹Ù³Vb=“ÚÇ_|qíÚ5&õ° \w€{ŽI‚]k»’³¸LunÜÀl&~pÆäD ƒ ÊÊÊR-ÛšqBË(pda ž|8â°æ¹–óP-‹×øTÎ)™ðøB&Û0W›·QÎúr26œ6ÆzV¼ÏÂïfî:Ã}—µNZK^·¸WÜ/Y+uÔÄ­µø—‘ó“Bæ€o[D˜–ʺڼªY7^33à¹u2ì  Û&^áx& <‹%CåˆûQ2C­>7§Ñ¸$`Q2m°iÄ=ÉŠåbYu‰˜ø«ßB€Ž«¬8‡ C«U1‡/=­&—s<ŠºWH(‰Ë“5B—…”8#«•$#¸Ç¥-|¯5ÕÕNuáuX,ü7L´öµ\ÉjF¸Ð0÷×♚bTTT×®]ɉ†º`Ás î(ŒÆšÁ]?娶½cÇsG n#Æ“ 'NœÈïÓšÁü#ÿëö¾­•\Æ-Þv7oEk¸ŒÛòtÚÆ¹õ5´†Ë¸kãNO³«Dd9߯ï7nÜMLÎM¿B«¾¾ÅUXiØíýàþ~saÿÊ÷·Ú S- Zç…™9l.¬m_X ™"sè30000¸;0&ÇÀÀÀÀÀ˜cr ŒÉ100000&ÇÀÀÀÀÀ˜s ŒÉ100000&ÇÀÀÀÀÀÀ˜cr ŒÉ1000000&ÇÀÀÀÀÀ˜ƒ7o^€öãhÖÍ=ÒÕ}ÖÙBE®y‰2Ý_îÊLP÷q/“;ñDîhóD"òDþ•yáÂ…719ÑÑÑùùù±{»wïv¹\?üáÛ†Ÿ9sæªU«ÚÆXÊÊʾúê«7Þx£Í8Ymé阅Ӛ±eË–Þ½{§§§›§Ã(†_}öÙg#2˜¦¦&§Ó©_¿íøÁ~ÐfÆ’`Ûv›N{:fá´fTVVöë×Ï<¥T0¼ah,ËÚ¿SSÓ_þò—©S§*ƒÛ‡`0èr¹òóóùË_ú€Á]‚19Æä´-Äܵ_r»Ýeee£GVJ¹\®mÛ¶)¥Æß³gO¥ÔáÇËËË»téòÜsÏÉû7oÞlÛ¶eY)))­ê–Õ××oß¾])5a„nݺ)¥JKK+**%½fÛöæÍ›•R£F0`€Rª¼¼üðáÃ111/¾øb+œÛ·o¯¯¯2dÈÈ‘#•R—/_Þ³gRjòäÉ:uRJíß¿ßápôêÕ+##C)åõzsss•Rééé}ûöm=Ù±c2œáyìØ±'NÄÇÇO™2EÞóÙgŸ577?úè£C‡UJUUU|øÃ?ñá4778p@V·RªººúË/¿TJ=ÿüó:tPJýío«©©INN3fŒlæ[·nUJ7.))I)uäÈ‘¿ÿýï;wž4iÒ­+:>±O¿ÑÿqôLmãåªÇÿmÄÕܹswíÚ•™™©”úÍo~ãóù\.WAAAzzzYYÙ¶mÛ¼^ouuõ… † ¶jÕªºº:—ËU\\þøãææf§ÓyôèÑ´´´Veo6oÞ|êÔ)·Û}âĉ„„„îÝ»/]º4¸\®½{÷fddz<ž³gÏ666ŸïâÅ‹UUU<òÈêÕ«kkk].Wii逼^ï‡~(_TTôä“Oæääœ8qÂívóÍ7qqqÉÉÉN^^ÞG}ôá‡þìg?ËEEEÓ¦MKOOïÓ§ÏÁƒwîÜéõzÇ•+W†ú»ßýÎårÉ"6lØ¥K—þð‡?477×ÕÕ?~<‚F4 Í;wíÚµ]ºt1b„Rª°°°  Àãñœ;wÎét>ôÐC+V¬hllt¹\ûöí1b„Ãáøãÿèóù®^½zêÔ©‘#G®_¿þܹsGŽIJJêÑ£GŸÎÆ×­[———÷ꫯ*¥ûÛßÊPXXøôÓOççç555}ûí·~¿àÀK—.õz½²EŒ=úرc[·nõz½/^t8Ç×~Âéöç–ÖìÞ±ýHQ¡ê5Äšõ…/+·~ÙêöÜ9sÖ®]›™™)ÿ´,Kþ;vlccãÆW®\iÛö±cÇ^ýuÛ¶Gå÷ûmÛž>}zII‰Ýš€‹ÿꫯB¡Pvvö|`ÛvIIÉôéÓù ¯¿þú±cÇöíÛ—••eÛvccãØ±cíV¹HÛ¶W®\¹qãF¾HÈ;ï¼³eËÛ¶óóóç͛ǜ2eÊ… ZÃ(ªªª ~øáðÇ$™——·páByç~ô#a~_½zÕ¶í·ß~{×®]ååå/¿ü²öÙHaÿþý‹-Z²d‰üóòåËUUU¶mã"eáØ¶••µoß>,\<Î|Ùáœ>}º  `äÈ‘üʬY³¦L™¢]ä¡C‡~þóŸó#˜:uêÉ“'÷îÝ;{ölÛ¶Nç3Ï<Á±„B¡‚‚‚¬¬¬õë×Ë+²plÛ¾víZEE_|ffæ™3g°p.]º4iÒ$^8¿þõ¯·mÛÙ§sâĉ¼¼¼gŸ}Vþ‰‹Ä@p‘Ÿ}ö™ÌI ð™gžq:›6mZ¾|¹mÛ'Ožœ:ujøOœw²rë_zggçžýÛ)¥¢cx ¾sT»è;dEkkkÏŸ?ÿØcµX¤ÏçËÎÎNKK«©©iÙ?þ¯~õ«´´´êêjD5ï9ôïß?##C‚mO=õÔ°aÃðÏ=zôïßßápÌŸ?ݺu÷ÜpRRR222Úµ»‘9®¨¨ˆïÝ»÷=7–¨¨¨ŒŒŒÁƒó‹ÕÕÕÏ?ÿüÌ™3%}o!55UÂe‚ÄÄÄÌÌÌ´´´´´´+VÜž›Ö.úøÎ]{ŠëxÇé‡ã½÷Þ›7o^×®]ÛÆvpùòe9Ó,^¼˜KœîQ,\¸pÉ’%%%%}úô‘•A+Ä‘#G–/_¾víÚ¸¸¸{},ùùùûöí[¼xq›y:yyy«W¯þéOúî»ïÞëc©««ûôÓOKJJJJJfÏž}Û¿ÿŽçHKKKwïÞÝÐÐÐÐÐPVV¶gÏɰݻèׯߴiÓÌ&hp×PVV¶uëÖ9sæ´cÜüùóŸx≷ÞzëàÁƒ ›6mº×G4cÆŒ>}úœ>}ÚÌÕÈ›œ§Ÿ~º{÷îJ©šššÊÊJa×üã8}út\\œpŸÚÖ¬YÓÐР”ª¬¬¼×Pƒ½†XswØswØË×lº£I*‡ÃñÖ[oÉßååå–eY–uàÀÛ¶ÀÒ¥K-ËÊÌÌôù|¶m{½ÞÇܲ¬O>ù$ ¶ª|»f,Ë*--µmÛï÷/Z´È²¬W^y¥¹¹Ù¶m·Û-oÈÉÉ ƒÁ`pÆ –e3Æëõ¶6ú€ÏçËÌÌ´,Kˆj¶m8p@®¿¼¼\8gÎ˲f̘!¬®®–7ìܹ3 µž±¼ôÒKø[»È@ °jÕ*˲&Mš„96~üx˲>úè£`0 …þüç?ËG®]»ñ±ìܹsÍš5ò÷_ÿú×G}T®MÑ^¯w̘1–emذAæXNN޼ÁívÛ¶ÝÜÜüÊ+¯X–µhÑ"aâ´ª§#X¸páñãÇeŽ-X°À²¬×^{MæXCCƒ '777 ƒÁõë×[–5vìØÖ°ˆ6mÚôùçŸËß~¿Þ¼y–e½ñÆrñW®\‘‹ß¶m›\üš5k,Ëš0a‚Ì=ŸÏ7qâD˲Þÿ}Yt‘…Óé|óÍ7Áسg\¿Ãá¹ô‹_ü²¬Y³fÉ\úöÛoå ………²¸–-[fYÖ /¼ Ôp¡Áž»Ãžöñ™ný‡Fõb½ú^‰R*©ò“ÙÓ^66ØÀÀÀÀà6¢Ú¥VRõ+sþs²Q00000¸K0&ÇÀÀÀÀÀ˜ƒ¶…Œ5O€Ãgê†%'˜›b````p[pü|ãU;ñ&&§¡û¨Ï‹¾˜ø ¹G·Ÿ9|ݾ§®÷¢¦ºœ¨¨¦ÉË·W}çWÄ79ÜgÌ­4000¸oa'?Y•Øìm¼õÛ<’£¯Û¥TTQQñôÿ^?aæûøž[> ¥÷õOz(ÚÜqƒûùg¢¿<×î;M†RQJ©¦úÚÿ3c㊷c’’zí—x±¼´sÒƒñ]zÈÿ¾ü^·óò%wrsÇ î[øý”jÿ&CìÍ•ÊãÃSú$%%E‰âô½»úø™šŒ7—}燃æäPÕЄkæŽÜ·8ßá‘3žïš=ßùνÙs‡ ì½øí©©©Q¶m+¥ªªª.^¼4ù¥Ÿü#¿Ô.è‹zÌ7000¸ѾK *Æ}·šþ¶-zõJzðÁ•Rÿ ÄÅ3x:ƒIEND®B`‚saods9/ds9/doc/user/binning/binmenu.png000644 000765 000000 00000013420 11332353404 020373 0ustar00joyewheel000000 000000 ‰PNG  IHDR²5ýÂ7vbKGDÿÿÿ ½§“ pHYs  šœtIMEÚi ,ŽIDATxÚímŒWyÇÏ\ßØÎÆöÞkˆ AlZȦ€‘Ý´‰&Z5ΤªT˜ %(i$!ø€x‰Ó¤ j%´BBPP𮑌xRZ%^­¢¶dI¬UkBã @îbÇÆkïîí‡IÆ'çœ9sæÌÛ™;¿¿¬dîÜ9sîÞó›ç'ÇBˆ½×¿K $ÄÒƒ‡…ý˜‰ß} ïŠaXzðp´çmyã»oùå³'yG⩟ÿ¿£÷ã«gË;‚E%:õ›_¯žÎ€·\²cûôÎfÛ°8·z–±,K«gϬž>9{ÕUîMŽ;&„زuª©¶ÊþÞóÿ"þ•õoõÌ©ÙÙÙ\MfggWÏœj°í…r´ˆ^xŒŠ+Š"÷3’T[ó$E½úß¾CwÞÔëEøÇ¯üúäéÉ¢ç5<½þ5Ð6 ‹ª¢Å§?ôÃSBˆñXüvõÜãOþêð·–~ñÌŠâø‰gÖÏŸ}êgm\¾©ßŸ$.„Çe_µ/n{ÏmûÒÿÈgîsiû¢ÃŒ;MÑ¢úÜB!Ä‘cÇøÁO=wúõ¯~Åûn¸fmmUDÑ]÷>pûÝŸ;½º>ãIÊ-¼¥·µPôøòº´½ç¶}Éž2½mZna ûÐý™ˆï?pÈåJøÖ¿.ýÛ#?¾îMOpnߥã§Ÿºô•W.~b¯Ýö_þÍ©³‹w¼§×‹?ø£kÿà÷vnŸzä'OþÓ7Z[ß`yçû?¢üõÏß#ÇxcÛ~ö_þîÖ?BüýßÜl''TÚæ›DÞsç—,ÉΕG£Á³þ\!„xû[öîyÃÕ»_;#„x௯ŸolÄO={âxúòxûº=W>ôècrÍÕ×̾jéÈÑ¥ãÏŠæÂQyäjÒÕ«¶}Íß”F’½íÇ>wÿÝ·ü™BaB>¡OʹsåÑLƇ£†{ì‡í¾êÊxcmm}åä©©íÓò³kkkñÆüÂ7þ¯Ç£ñøÆk¯¹âeÃï?ò?Û‡»Z.z¢y´Š¢ž¹mÚÙ’ýém?öùî~ÿŸ¾ˆ‰=o6ôkÄÂxQÎÝuXìÜ›ùçŒ޹ç³_þÞ¿?úº×üΧ>zë­uÃòOufc“~Ø'žž~ÉË66mBlî÷Ï­žÙoôz›:òU¤¤ig“&‚Ô¶wÝüyêùø¾iìלr^˜›Êþ÷ü,"ÄôK_>ZŸÚØGQ4½Yl¬ÓÿÎõõõþE[z›ž‡u<‹ñ¸º×VÕ¿(òl¦µÕR‡´ýæ~&’å®›ßaî÷ÂxÕxßâíoÙ»ç g~wæŠ^/:~í§Oþ"šÚ™K#95iäžJ‰)çý¶´#ï¸÷Û.÷¢…¡mÒoÌÄ÷~;Þó·ï»^ï·îûrnqîüÚO~vâà×¾9:ùܮ闻‡äÞ·pzÍGøýÙ?|«vï!Ò?t¤vdm›0÷rÇ¿sç{¯3÷[ó]ÎæþŸ[ÚØXO^Cÿ¢-Ã]Wlê_tó'¿þÄч…_zÉe7òkO]Š·ÿù¡c_üêýÏž¹xû ©;°…£Å…×|àà÷þû?¾k9XŸ)Êm{õ]«ïTÚæH9ËÒô®WlÞz±Ô÷8ŠzmŠz½Áe—oÚ¿y{Ûp×Ö©ýÍ[ܯ¼SÎßÿãë¼SÎÒÛ*;)g“Èp×å©w>.{¥q{jÛ´Ø6Ýæ›ß‘Mµ­yé ¦¶ŽûñììkÝ›=úØÔöAõšjÛLÊÙ)m¹ø’øworñ¶é¸USmÈ-ºHÆÔ¶-SÛÚÕ65Zœ99bD»;÷íjÑBˆ3'G._™¢IÕþ‡2È4‘BÌÏÏ›r I+++¼MÒ‚²‡h  ¨\,ôu‹G2†Ãáp8äÍd,2ÉH€€ŒöªïÈÄÜÜ\òpaa!~˜¦Ñh¤óïTÊèÈ{F£‘²!c<Ìx6T~´P˜7Òb†!ì#Q}Pu¤äcŒÄXΆJÃBg‘ {ðP"‡½U"û™QM“È`0¸ýöÛEÊϹ¹¹Á`oÈu¥–Ç»øÙP9X¬¬¬Ä? ôOcBñG’øŠO>ž(—¸ýŠOKˆÍL"É'Ø™((¿Ï´iMø„\aÊ©“Q„‰ø:–¯æ$Xù˜d[Ùp?*çª<›è¸dðÌù"ïždÛª6Z!ákwæˆæ±QÄŠÁ|Ñð$T`¾+Z °@,X °@`À…‚_°00¡lX4|±x‹'‹\_Ù9‡ynb±H ˜Y\žY\vÆ¢l'ÿ•÷cBÇBfBÙH#Cÿ+Ó|%ÇbLèXèL¸“¡ÀZ§ ‹ï}»oÒŸY\Þwä`¼m±ä$óßvNH´H;~Y&ä 8‰¤‘‘'2sOÞôv§œ:.s‡òBvö2¡´;·ÉˆÍ½r̰lj´×ݹFï.³O î[ˆ -¾¨y,Dx_Ôð$B Z ,X °@`À ¸ w91þwD–š»,b_ê‚Ò¾Ó`õ!DnÀ ,X °@`ÀMœúåžNÿ‰©²^aÞS¹¯M„BI"ZŠ(ʺ¦ÊN÷¨`\µ&·°¯kj 0î#-¯WÅÐ-Ь^¬Ÿëê'H[ @…-°x~ÖP €Œ ÁB/’¤±±„RZ&íN93+$ ç%L]ÖÜά·„&3·@`À ,X °@,X Üj·ÅWï4óx\}E‹:m8và "Zä(-¾ÊþØâ;:å§°`¤Ðr‹J-¾.aÌq®!ZÔòŽ©¹âjþà[]Ç"—ÅWyÊ8ã¤!jucQ§Å7­mÚÊ«¬ÈÚ@ÊY³Å×±S÷S¡vä,X °@`À  ¨ ±jwÅ:¨È,ÖAEä,X °@`À ,PgÔ­uPÓ~wšù"Óþ.°È!¹ÆM€¿öô~=Ýù•b‹‹$é<Ê­x×OÒW^Õ{—Ë5)Ç8þá]É-J,’¤ÿ8]¨­æW?I¯¡ ×VwæúÃ'-Z^$I¿d‹4œÈ™…Ü¢PCy÷µ`–~àØÊ5C~z½ÇVg²²j¹\#—¯þ‡OµI2¦rÞéH‘úIrïî1£øknÇ$R‘¤\Ù_)½¸ìq6ÌÉ‘›ß,X °@`À ,X °@]E’º+Š$!³(’„È-X °@`À ,P·±XXXà»°P™P6Ò4Ô$ïÏõÊ›õÓÍa¡ à3F/HTù3_€h ‹‚™Åå™Åew2#Š}§€„,Zañ%TT¤[|a¢îhÑ ‹¯–È=ë˜D·øŽ$)Q U˜rêd¸[|©â;¹…LF°_÷gQÉ÷-_°È$&˜DA‚hX °@`À Ô,°øvJTñE^Ñ‚*¾`‘ÊD°_T7[|3]¨|,·ø2‰Ôr¶¥Š/ª5Z´Åâ‹êžD¨â ®deñ%å¬;·ÉÙâ ÍÜ·X|Á"“ ˜` ¢B`À ,P°ÀâÛ)µÛâk< ßoÑ"d‹¯~r,[u`²ÅW±÷¥ÑÉ—ŒU|Á"› w2j«âëòPi)gÛ-¾²q‹0SZ´Àâ "X|»žr¶±Š/¾ß s ™ŒÀ«øf6Dåß·X|Á"“ ˜` ¢B`À ,P°ÀâÛ)M`_,¾uD‹vUñÅâ[G´P¬{ñÃ̘á2œ¹.qËwôÆà„*Œ­°ø¦Y+ð[T‚E[,¾F˜`¢’I¤Õ_˜¨*Z´×â ÕN"á[|ù%H3ŸDd#g »Å7í£Áh4’‡3±øê;­OhZ+n]TûµuU| ò¨Fpï…ŠL0‰‚Ñ!°@`À ¨ X`ñí”&Ðâ›ë È3Z´Ëâk•†EÈU|uåã UaA_°ÈfÂŒ:-¾ÆÀC•¤œ-²ø*{a¢ÂhÑê*¾Jü ÷,siiß‘¤´®¨PÊx_ öÖ[Èd´Ëâëþ,ò¿o!°ø‚E&0Á$"D „À ,X 6`Å·Sj·Å×x¥}ëˆ![|µ¥}«Æ"d‹¯bï³ìDebÑj‹o.?rÅ¢-_—„ƒI¤œ”“*¾D ƒ¨â "[|Qå÷-¯âëþ2Ïr`!‚·øz† Ý·X|Á"“ ˜` ¢B`À ,P°ÀâÛ)M`ßÌ/`ù~¤„hÑÒ*¾úkÀUZ´P¬{ñÃ̘á2œ–Kܱz·ñ¢ÏŒ1„Š¢Ñ¢-_ãOEXj»,ZTÅW>@)ÀhüÍ£î9‰´Å⛋<¥Þ/cŸ;Z´Ââkd‚xPí$‚Å—I$•Œð-¾.n^,¾%@ Ùâ›ËÍ ¥}@5B€{,T`‚ID$ˆ ,X °@`À…/Ã]NŒÿ‘ÅkÀ"öe¡.(í;¾û¡ˆÜB`À*I†O"Æß† ¢êæçç¢E,î^tAiw´‰¨IêzÊi 5.OªX˜”ÅNƒ‹îE’ªX˜”ÅNCÄ"×:¨&• «¦°ØiXX”[$©Š…IYì´n,ŠIÊLŒ?︲Øi)g‘"I™ cšâB~I(ª/·(^$)׸ɹL„ˆEýE’˜Úqß»H’% ˆò&e±Óf°ù‹$‰ “Z )±ØiX¹… HXd’L"‚ A´@È!Zð5:ÑB•ÑÈ…:-VVVЬ"ƒZ'}f ·@¤œ,PåX`ñåjjJ’kÔ²&e±Ó£E.‹¯({aR; ‹â_—…I»žÈ²øºŸ•…·Å·Š…IYì4,¼-¾Þ “Z,¾,vDÊé½jÁ…I_; %Zø­ƒZ|aRÝâËb§aM"X|™DRÉð°øV±0)‹†u;+—Å·à¤F‹/‹z; ‹/XdL"‚ A´@,X °@`ÀjX|;¥ -¾ÂTÏx¤»Å·¬s¢¢ÑÂÝâ+‰Ñ¡©Œ_®ïЫ8'òÄ"—Å×h™q/Ãk´ø<'* ?‹o.7¥{ÎÒω|°ð°øZœ·.ãg´ø<'*3åô¶øº+mv(2®0Qm´ð¶øŒóF‹/sG@“_&‘T2rY| wÓ>—–~NT ‘¿Š¯£#7Ó k©è›ëœ¨’û‹/Xd’L"‚ A´@,X °@`ÀjX|;¥’-¾ÂÙykÿNËå[òÚ:"Zؘ0>TÞbGç­ý;t V=E3‹Ë3‹Ëv2ÜM¶–#•‰î¥}óZ|©Ð艅̄²QVžQE g^¨ ‰ÒÉ0&F…±´o&>)gbñ½o÷Mú³3‹ËûŽŒ·K´ø¦ •»ï&ªÉ`'Ã/« &äìA1úê¾ßâs‡±#”=‰¤‘Qœ {*gŽrœ(Ñ÷kì\SN &ìuÿK/诜3oj‚œng%_9fØ™°—çu¼:×±ÝÓ›«Þ¯û+!ZdÄŒŠæÔJ,_&ǘˆ, ,X °@Á`Å·Sª°Š¯‡ÉÖ¯´o¥-2˜0>4¾ï~&[÷ïÐkë,2˜p©â[…ÉÖÝâ[°#䊅__ák²õðFÔÖX¤2áH†·¡ÒÛí.ž;BÙ)§wß*L¶F‹/nÞ°Ð+r*ÐaBÏ]LyŒ+êeO"•Vñu7Ù ø¸yË¿o‘·Š¯ñæ{Þ‚{«ë,ldèĘá»ïןµ›3¯ø"¡|·³°ø‚E0Á$"D „À ,X 6`Å·S*¿Šo¬L?­‡G·ÙŽˆf&Œ-C¥ [¦×ã;ôÚ: 3.ßdxŠ_ò˜¥-¬]nGÈ o‹/šX,ü,¾ŽW° ä3èÝâ[zG(;åô³øæ5îêù2ñ¶nñ­¨#”…ŸÅWTã§Õ-¾ãnS“ˆ‡Å7—q×q Ó~SÔÓ·³òY|3zÚûî¸3×yŠt„òÝÎÂâ dÀ“ˆ H- ,X °@`Ú€ßN©Ž*¾"edýÈ‚U|«èˆh‘Á„ñ¡>TºŸÖ茜·µuL¸[|¹{hGZ,¾åv„\±Èkñ-ËÇÙ¼¶ŽÀ"›‰L2܃³Ýy+´êiúâØ¥w„²SNï*¾¹&=û3•±Šo¡Œh‘fäTv–ûm{ÚPɹE¥¡ìI¤Ò*¾-¾Ut„\ï[ä­â[J]—; µuÙdèÄ2‘gîwÙ#Ò¼¥w„òÝÎÂâ dÀ“ˆ H- ,X °@`À _†»œÿ;"‹‰ß€EìËB]PÚw}÷C¹ „À ,X °@`Ú¡~¹§Óð©”È{ª"¿K{15«¿„îWqR¹v@¼’”Ç›RÖû¨¿‚A3XX®}Ãølf“´Vy£ˆ½/åy¿²m?³Zóë½¹…ñ=2îL{ÖøæÔøìÇÈ‘OÙé˪ ðè½õÑ"v…¢ìE м˜Æ“cððž|Û”[4þ^ÛSQýHïk4ïÒðzï!¬°×“ž¾øS$Þ8#‡ î[”u6òªÒjûٱĉ´¥U‚êU÷¦Tå¼Ï¯¡%Ãu9Æ~f㤠g‘–7g'‘ÌÚEÆBGöyë$¹¿ïcŠ”nª­^T'Jè‘[äˆØ¨ëŸD@hÀjGnÁO“‘-æççySÐ…h1µc¸ÿÀ!!vò¦tSS;†æID~-Ä3'þ—÷%ŠÆãñÞëßÅ-=xøÿž$2ê®Ì„IEND®B`‚saods9/ds9/doc/user/binning/binpar.png000644 000765 000000 00000020246 11332353404 020215 0ustar00joyewheel000000 000000 ‰PNG  IHDRƒ^è¦ä´bKGDÿÿÿ ½§“ pHYs  šœtIMEÚ"þ1ûg IDATxÚí{t\Õ}ï÷9óÔHÍÈzú!Ûƒì~”@M ÆIs^÷f%×ÉÂWIš.ÒܦvšÕ®$m€¤ +í*ѽ]½Ü4áF¸ ´iÃM1!¤@(`°‚ÁÄŒ%?dù%ÙšÑkôžécÆãóš3ÏóÐç³ôÇ蜽÷Ùç·÷ùîßþÍ™½¥T*%„ظåã ât?󘛖¡­÷Ü‹E òlÜòñîg“6ܹmë=÷ž¿8‚E òœ>ÙÓwp¯7ýÏÔä«@‰ÜÀèðÐÔx3›@u¸¶®ÞÚ¼J4=5™}ôì¡——ÔIuuu³³³ÇGüõm×jšˆ =›YzÃïÓ¬bj215>Ò~Ýuæ³=ÏTàŸvïýà-íB¤vvþxÇÇn×L¹ëþíBˆ®§^ýð­kƒ~ßO_|ëø™‹Ÿ¾ëæuÕ¯<ñ½Ÿ¾’L¦„MÑÚm[6\»¬Ùçõ=5øƒ§÷öÄ¿õ?·¶6„…ßø³O !~ô«}O½t@3¥ºJ_ø_OlÛ¼á–ßY^ NLÍœŒÿý^›äéev¦7ÃúÈ}IøßþñÁìÉ“fÞ¯<üä7>ûá´e>g TäU”/«ãO BáúêeS©ÔøälJÈ!yzÄ×in“Ì‘Ž,}à¶_øôG¶o}¿b÷ {çæfRÉdúÔÅþ!RéÏ›7\ýò¾Ã‰É©›Ú—­[•.ÉgŽSÆ%„‚þÛn_ØXw¸·o|$ö¾õ+…ãÃâÎhVUQYpÃõkÓŸ‰ÉɉDC´æÅî·ºþÿ³‡Žo¿ªõO>²ivz*“å£wÜxäDÿþÃ='4DtR !„ØúÞ5'Ï TWù·Ý¹þó½íôù¡d2¹éúk‡%!ª¾/rËúÕK~sàèSÏíY½´éÏïyÐ+^ÚßB¼²ïàÏüGww÷ìD\3¥ºJKj“¼åºøÈX×ùÔs¯¤æ¦Ç‡Î¦æf%prþyÓuõºMŠ?µi^÷/ÿïÏÓ)2´zÝ&­¼—]ª>Qšdb(™S)ÿU5~¿ß7'IyNJo¼îêô‡ÙÙ¹øÈh¨öНÛfggÓ:»žØûÛ£R*µõŽ›–´DŸýÚhSÎSÆ%¼gíÆšªÀ…ØðŸ}ãa¯?XS]½®}…"•L&“IG]úÒg·e>ê9y䨩úÖe|溺©©}®ûíG¿¹baS½˜¼(‹ÒÉþáŸ~²û…½¾ªj¯¿ê¾ïò#UMÛ¢Öõí+Ö¶Õ=ùëý7®l‰„«þüko9%{}wè¤ìî‰)ª´i]»btlüôÀÐùxâ±§÷LM$¢MA¿×/ñî…{œ"YÈR¹$IÖΫWZæ¸~Þ¿üÇÝýGp… m¸Uãºyʼn„#g{f‡ŽÍT5…ý‰ééé©©)1}aôÂ¢ÚÆ%æoùÁ‡ÿ÷WöýÎê«úÊg?û‰»öH$5‚/'úÏÕ-hIzüB¿×;=•H¦’9O—® !úÏ ÉSߺôüpÖÛä’Æ÷œ95}¨çäSϽêóCÕ5ºiýêÿV]È$ó{¤©éKE½y¨·vAkUmÄë‘>y×-®ýïz){ûÎÔ5´NΦ„GOôWÕFfeŸÂçóNOMDÃUBˆe‹›ŸxøLö–†Èèë=/ýoUmÄ_UÓÒ¸@/¥¢JïœýÐñu×.[³j™b`hä[î>›Zsu NdðÖ•3,ݼ_ÿ̳çtõݧ5¯«'Ò‘ÀÉÑØh韛9ïUë7OŒ\úí³²˜B;2:½Tr]Ckl.”L¦dYªó‹±±iuÒ¹¹9o ¿ë§¤R)‘JåüØxbâï¾|¯,Ë’$%ß OÏÌøCŸÏwû†kn[·Ò eºz鯛›ó‚ò»QÿT*94šBô9ÿ÷»~’©ÓP|tnv&%IBY’„¾@p81­—RQ%ÇûÐ???=|~aCÝGÿà¶ß[ßþ»×´>¹ç˜ì‘y€Ý¥Dr!¹.M•duI/´dœ÷k¸%ã ¥CK_ÿÌ¿ú½gÔ×Í#bœ?¶GHÒÂîôB¾ÆÐܪ['޽ø}>ßX﫵›MÞÿnÛ¸á†ÄªåKdYš™™=vꌪ×÷%•Žå:¥_Â[½§GÇ'ëëþîÏ?51+®]Þœeí¯®«T‡EJHÙëñû|þ´ˆø}þ÷mÞ(Ë™,©ì’=^Y’s¦’|9"%®ö½Ý?4<Ö¶°ùC·ß|úâX4\}ýª¶ïþøù±ç‡Ç&„Ÿ¸ûý½g†^:ÐÿæÑ3z)Uj¿já¹åÚÃÇú'&§·6 !†GÆFbç´,“d|"wF¬øôz)ï{ä—9#Öæ|"¼™ë¦'e÷=òËô‘¯ýáõuõ”HãÂýo6ÔúÂ7†ZÓGê—¬L µÕÎø|¾T*uêäþºåëÌlj¦gfïÿþ¿>kªk5iä‚NeÝÅÔlçãÿÞñ¡+ÚZsàè³/¿¹eÓsÉdF5sùƒ¡LiÏ“W·†7¶_õ§[þû'§f‚Ÿf#™L)tätjzö]Ïü×M×lX»ò½Á`ltüp艹žÉÞ½çí–hèš«–¬^Ñöú£§Çz)UŸ”%±ù=í¡ 41ùô‹¿ùÉ/_ò×D“ÉY¯ÇÏ3ì)29×>øÚóíïùýlWJ7íËè^È0oF†ÒW¹ïÿ=ûÀ§6k_WQpz}¢ãýЉó=KƒÃûûF®¹-ûb©dr¶ïúÕmsssÃ##G†««›–ßüÉCÝÉä\¦^_ &Ú¬® TÕœ8¸WˆTã’UÕáȉƒÝ™Ï΋ VÕFê[–úUǼfæ”^ áššþ¾Þ‰‘¡ÙÙ™‡¾òÇׯ^þðŸÜýòoë[Ú|Wþ„%]ÕHãÂÚ­^ïe™LŒ^<{bz2!ËžP8:¿˜J%¯¨/8yèòE%I6L¹W‘NÙÿÎþÙ™©HÓâð‚–‹§ …Âõõ-m^Ÿ?>Ð?1>:3™HÔ½`]êêÚá¡s£Cççff…H5,\^]·`øÂÍ”'¿ž]¥‰±ø…³'æf¦Sɤ,{¡špÃB ÊëC‰\Âð…sííWüLýÀž_é%^só—TéàẆ–räÍ$Ó<˜Î›9迼>‘BئG/. ¿Ó7Ô|Ýû„|…%y<ÉÆ5‰éøê«—ŽŽ¦Ž÷ÔD ÌT״جÊòÇR’$û‚!I–#Í‹‚¡pºÙŸk¢MÁPØë¤E×ä)½dŸøÀz‘ºñÄ©sW/m¹~õ²±ÄÄs¯ìóúBŠÉÑU½R샡ÚHÃ"!‰t*XöúüéìÙ’d”²iq°úRʺ¦E^Oòx„µõ-Uá¨×B’dO]ã"ÕpJ²ä‘$)%ROòxj£Í^oÀãó¥-™’„^JE•üU5ÑÆE²ì•]êG´2œÁÕõš©uÓtTÛSÏæåðÄÁäòuúX,¦îF%,\³ØL,S×Ô¼5Í‹*ž"ÍŒÆ÷Rîj7S%Ÿp…ÿÔ³Üv»ûD•œÃëÛå~€ãsY'°%¹—büÐ|ãb¨’ àÈ8Q©dÂ’®–- j™°çPìè8QaÝ "N4/+ƒ/ ÝÝ-Òâk9Ctæræ2y9‹-òºŠ˜…É[+좖;Yê{)GŒ¯$†"6„å÷ g:M‘£Y4‹ìÂõŠÍ™ ·f¾VÙK[Uµ•L^]¯™Š#u• ¸åÒv'°'—ö;;50œYÇš5 ¬¤×lܯ…£ƒý½}÷òkpéì %”%”%”%”  4~‹Ÿ~À2Ÿ¨³³£€•J„ €-fgÊM$Ù~ÿ.Ýـų3”P"”P"”P"”P"KñœS½5hö–¡ymÔ™]”^F§ïÿYrs9z+TÍ[Èd¯Wcû Ddì’Þ,8‹åk)ÅÓeÚEÚ&¨ÍÅ`h`%À'*œ›â4w—7ö’Ê•¹DæBÙÕLiòBÖúM&kèèq2[‹³o3¯.änÏHÓ>š½Bó¹pÐÍʳ¦zz’SËòʘí‘)>ëU¦° •Û!7_Ãyò|Ð…æÉÜÍMfñ–Ä(>…­ž=¿¬€Ie™Ìe¾òî!…3ËdÍŒ}ô´ô”ß¡F“‹¶«ÍÙ5¯Låm®² Ćò²Oô]4Ó;ј|‹/ô¦âލ¶ ä EÎ×>ŠÙ™:¥M*ÛêqÊË7)ÞÜ™Ë9b Ñý$§o‡¨xû8=x$—äñ(æyVÌÔ3&E±Ù1éRé`ÅôÈÀ\š•ÉYC&zóVž²_qA6ܹmë=÷žNŒÄÖE†XÇ*@zëP8:ØßÛwp/q"pþì %”%”%”%÷`vUH$2omÇé(øDVÒÙÙ‰ìâÍOï ««‹.`;%wÌXõF”7½_ƒc%3VB‰˜»å`ÇŽŸW̰RÉçI(‘]ÆûøqD軺ºrj V2c%ó±ëA‰Àzl4;˹„«Íלvî/–[LnÌiœÆ­FP÷ö6æt ‰•¬?ewÄ(¯ÇxonSÓš‹R¤t‡ ½¶j ùÏÞÿCÝ–Û驼ìVÌ/’ŸÓ8²¡l“Þ¦¹-º¦ÐØÜ¬8D%·gÅöÅ´PtŠ” ã쎰¡l«&©|"Cv~J]¿e®ùMÊ 6+6xdC¯Íɸ§"C0ßfmŠGÃ5sX¯ýížSªì ÈPùüLQ°‰ˆ•ÌÒsG¾÷.ôZ³H³8ц+‘æÖÒz1 îC]¾¾Âƒ”oÓçÜhÛÅΑù{4HiÐñdC¯MCa¦œ¯E˜Il«¹$˜4šÝZÖªž£'ÍùæuŠ ùµ D(Ø~wV,îÛk€5 ±Jä0\¹v b%”ÈI¸oÕ¾ŽŽ–"ÄJP"̬þ³¹œÏü}`°ØB‰Š÷±3b”]ˆúˆy-3™±HõT\ÂüÁLU5ϺI¡°TB‰ôº…ú+y3j’׃ f™ÞF1¸b¾Í›ÅÑþV‚à×€ D`XŸH ëÎ`%À'²VáÃJ€Od1¬IŒ•ŸP"”P"”P"”P"«áÍF ºººŒØd/æ2íø–sU œ×­ÌVt€¹Ÿåî×;u÷ßwñ{ƈ D.yŒ³ ã=×4×½¬ØŽozé…Îb¯ÂúâD¥÷&L™¾b;¾i¦×\uS‘^]²q!À'ª4ù®¢[XšräU•×òÒ8A€9C†ŒgyÅg,«˜©*~ DóB¹¬r@4ãV¤ Nd 4w7¿%¼zÇ·ò=óy•ŒôJd#“Qœî‰fú¼ ÉÞQ¾$W7y-ÍBÔAkuÅðŒ€Ù™5³ªÕÛñÍü®dŠSzÍ÷3J”ƒ»ßø>F@‰¬¤££ƒÕš* q"@‰P"@‰P"@‰P"@‰P"°Êw¬#‘F‹•¨³³£@E¨×U"›ìŸî&‰l¿Wæ_âD`=( D( DBÌÃ5ya  ¹Ìé|\=–w¦JËŽ;ð‰ צl5Ï NÖƒ€õ2;Sïá©Þÿ³€B2E©wRg»>”HèIFFS²÷.¬@‰JCÆQÈ+»ÚoÒÜR]á4á=8—2Ɖ4å£0I!:êb ¾8Û'R»'̼2…ïËà ÌG%Rlj*#šî20O•È*÷á˜÷‰®PÚ£ýæ»O”3NT*({ö—-@8GóZ‰ô$@ñU—ÉÄÆÙs–†0;@‰%( ót}"VnÀ'²˜â×—|¢¢(rµ]À'”%”%÷¢üîŒmÀz%bT¨õºJÄæ¨P"‘Èöûweþ%NÖƒJ€J€J€J€€}(dõXõ6Й Z…é­óÚBÖ¸d3EåU·Ê£0iaõ̾G›ßo^÷¢>èô»+·}æ—O{—lä%CŠìE6IñEYŽ;†‚yíå…œc—f72Ÿ]oÈ|0ð’4‡h4š¹\ö¥5S–{ØI_%]%Í{ѬL&Y&£ ÆÉì{ɶC]Å­ž‘¦}Œ»={…\3éðéçMa‘ì'J! eõ’ÒµÍdÑÌžóŽÊç„笌ZŽ-©°µ$¾¤s' r1w«)%æƒz–RøÞöQn[!f*ã!Ý7ŒŸ%FÆOÂ3²§ÿXÊ8‘ûžvûô¶ù9ÚÛs@r„}²uÓKs:«ÃÍÛaÌÛG3€(ôƒ‰Îö‰*6ȤTkKR¬M&ùÆF3¨¿›Ý´pˆŠ·ÍƒGeŒå4Ÿ™0SNñVe\¸Éb­h…­y/ê/Œì|kPyyÒûÖžHîܶõž{O 'Fbë"C¬cío¹G“^Ç:Žö÷öÜ˯=Àɳ3€RÁwgNà D€ D€ Dà>Ì~‹‰Dæ­âñ8ŸÈJ:;;1€]|¢ùétuuÑEl§DÎÒê 9óy’Ž•Jk%”ˆÉ]vìØÁt+UÀJ(QEqÖB+fÆs–ŽÁJ%Ÿ±ëA‰Àz˜U—-íªØŸ°Jä˜îèJUeñl¬Äḭ̀•;J(J(J¶‡oñ¡@2Ûa Þ”ÁJ(‘ãú%·C£³3@‰P"°'ĉʎûVðcMB¬„Oä0̯YÇa%|"( îÛ€€ —°’-”ˆ½.ÀâÙ‹„€Å>Q<g…p°Þ'@‰%@‰%(#ÊïÎxE¬W"^€JQ¯«D¼4 ‰l¿Wæ_âD`=( D(ØJ¬Oä¸7œ²¾ ¯\8±Õ×p•1,>‘Þc Õ ò†­ÜšŽ²œ¸+:t?û7\% ‹OÖƒJ€J „=÷;‹F£BˆX,V±Œó„´}ÒÄb±’›+»ül×¢™ìÖp(‘‘Ñ£Ñ(µLúFõT£xh5‡6J¤Ý•³%É`\Õ„PXX=êê46»/U=Ò.gÃé´² í®ù¯fÇÕ<w÷lcj4ž…åå1)D§´W¡áÌ·&>Q |~=iO§ib\-Ç$Ëàl¦—osZ­‘Êè³³ÒxF`•Ù "Ð¥•Í !CE7 ¦Æ(QÞ1…‚m—q‹èÓ…9 ꨜUþÜÿÅ•ßüØÙÎŽyŸHóaÀ{ÊwœÌ)ñ•üvF¤A n8µõtÇžv–Ô$jû‡iM:íš§²–Ö3Ê”–@Å{-GÃdvfÖEW<9å=ÊËÂy™ÎŒõZ0ßKÓd%l8§XÕÍ¿öÀÕp ®U"¼}á€÷‰ s5Ñ |"”P"€¼¨\œÈ¡0Ø KÃá™…í¨0,ÐpûDñx¼££[cX á,ö‰P"@‰P"°9ʈu$Á(`™…ÂÑ}q±ýþ]*@(ZçOÅ'IDATÕö‰²OTÚ'ìïÅ`R*•Ú¸å㬢û™Çþ¦;½…9IEND®B`‚saods9/ds9/doc/user/binning/binpar2.png000644 000765 000000 00000020550 11332353404 020275 0ustar00joyewheel000000 000000 ‰PNG  IHDRƒ^è¦ä´bKGDÿÿÿ ½§“ pHYs  šœtIMEÚ/€€‡Ú IDATxÚíy”\Õ}çï{µvuwuU«W-- !!h)€–`ˆ0&FÈŽcЙñ±GöA#ÛqŽg<ÂñÉÛö8''¸gr2Œc“4Š ‰3Ø`aŒ2j##¬¡n-­ÖÖ-uUoÕ{ÕüQ¢(½­^­o©ÏçôÕïÝ{ß}¿{ß÷þî¯^Ý+¥R)!ÄÆ-Ÿ§ç¹Ç…Þ´ m½ç^,•gã–Oö<÷¸´áÎm[ï¹÷Â¥Q,•çÌ©ÞþCû¼é¦§&±XJàÆF†§'ò˜ÙjÃõ ÖæÕP¢™é©ì£ç¿²¤Ajhh˜››;1êoì¸V³ÐDì|hôØ©ØìÒ~Ÿ®`ÓS‰é‰ÑÎë®3ŸåÐáÃBˆ@0dU^m%’”}´y審sûwl½ÛãñüôéŸõ …"-Šœ³Ó“KCgb¢uÕFEv¨¨%Æ:;;óÊÒÙÙyèðá@M­Uyµ•HºRJ|`"²òÿÓïÝ|Óµ«Wx~Ï|mƒ×ÌN#_z{¾Î7êh¬k +Xˆ$IRþÞ€”Eåóê)‘¬8Qm={òâ¾}=ÍÍM+—-ÚÿÎk­knârþ‘þ·®k ¿Þ;¼øºë 6ß®?-ËÒÿꟇG'¬*ÀJ$¤ò»ä5å]ž£-_sì­=££}²,7x¦‡úÞl¹zbl¨ÿª¨ØûÛ¾ŽõÊYÿýåODÃ!!D*%&§gŽ|üç=g‡âBˆÞ¡ùÙ©3'Ž"‹<^o P| šUBLÍÌöžz⹞þóÃvèj߸÷®å <üÃ_þæèiôÆÑÓß}òå¹ù¤¢ûë÷ŸÊYÂÊŽ–Ï~ôææhÝ[½gGÇ'oß°ê—ûŽîÚýºfUÿe÷¯~Õs¨µyÁcß¾/\jÍŸŸvn»ãê%-õ¡ÀÌÜ|ßÀÐ~Þsf0ž©À?îÞ÷á[:…HÝ×õ㟸]3å®¶ !ºŸyí£·® ú}?yé­g/}ö®›4Ô¾~èä÷òj2™B´Dë·mÙpí²VŸ×sìôОÝ70ÿöÙÚÞB|ëO?#„øÑ/÷?óòAÍ”ê*}é=¹mó†[~gy}(89={f(þ7?Ú32>ÅÓËìLo†õ±?þŠ:ñ¿þÝCÙ“'ͼ_{äéo}þ£iÊ|Ψȫ(_VÇŸ„µË6¦R©‰©¹”Cǫ̀¯-ÒÚ!™#YúÐm¿ôÙmßúA!Äî=ûæçgSÉdúÔ¥^!RéÏ›7\ýÊþ#‰©é›:—­[•.ËgŽSÆ%„‚þû¶Ý¾°¹áH_ÿÄhìëW !&F.Æ/žÕ¬ª¢.²à†ëצ?'SS“‰¦hÝK=ouÿ¿ç;ÑyUûýئ¹™éL–ßqãÑ“Žôž:ÚÑI)„bëûל:;X[ãßvçú/~ü¶3†“Éä¦ëW¬Y–„¨ ø¾úé-ëW/ùõÁcϼ°wõÒ–?»çƒA¯xù@_|tBñêþCO>÷ï===s“qÍ”ê*-©O~ø–ëâ£ãÝ?þÅ3/¼ššŸ™>—šŸ“ÀmÈùÿiäMwÔÕë6)þÔ¤yÝ?ÿ¿?K§TÈÐêu›´ò¾çRåð‰Ò$ÃÉ”˜Nù¯j®óûý¾yIÊsRzãuW§?ÌÍÍÇGÇBõW|Ý677—þÐÕýä¾ß“R©­wÜ´¤-úâïÔG[rž2.á}k7ÖÕ.ÆFþô[xýÁºÚÚu+„©d2™Lz<ÊèÒW>¿-óùpï©£ÇO7¶/{ðû??süP]]ý =o?ö+¶4Š©K"°(ìoÿñ©Ý{öùjj½þšû¿ûô¹þwôR>üè¿î}óíøö—·5=»çõïýóî/î[n]·¤%üÚÁ“·lÚиÐõèü5u‹Ú×w®XÛÑðô¯ܸ²-®ýÙ‹¯¿yô´ìõÝ¡“²§7¦¨Ò¦uBˆ±ñ‰3ƒÃâ‰ÇŸÝ;=™ˆ¶ý^¿Ä»îqŠd!Kä’$Y;¯^i™ãúyÿüïvÿÏ?þƒ+dhí×Í+N$„=×;7||¶¦%ìOÌÌÌLOO‹™‹cÕ7/1Ë=òÄ¿½ºÿwV_õð×>ÿùOÝuàø`"©|99p¾aA[ÒãBø½Þ™éD2•Ìyʸ„p]P1pnHHžÆö¥F²Þ&—4n¼÷ÔÙ‹Ãñ©é™Ã½§žyá5Ÿ?ª­Ûñ‘›Ö¯þµ5L2¿Gšž¹\Ô›‡ûê´×ÔG¼éÓwݲáÚÿ¤—²¯ÿlCSûÔ\Jqìä@M}dNö !|>ïÌôd4\#„X¶¸õÉGÌdokŠŒ½ÑëñøÒÿÖÔGü5umÍ ôR*ªôÎ…‰7ŸXwí²5«– !‡G¿ýØîó±I¡5WâD_a]9ÃÒÍûÍÏ}8{N÷?¾÷¬æuuâD:85ë{-1ï½jýæÉÑKÿ}^óBˆøÑ—õwBfB§—Knhj͇’É”,K ~1>>£N:??ï äwý”T*%R©œ§ŒKˆ&„‹ÚšýÁ ä޶&ÅLYQÕtœHöú$Iö×/ÕGo½qåûo\qvpø¡GŸHLþõWï•eY’¤ä»Áà™ÙY(âóùnßpÍmëV¤LW/Ýxsóó¾@P~7êŸJ%‡ÇBˆþ³þf×S™: ÇÇæçfS’$„%Iá G3z)Uòx¼ÿÓ‹3#65|ünû½õ¿{MûÓ{Ë™Ø]J$’ëòTIV‡ôBKÆy¿ñG[2ÞP:´ôÍÏ}øëßN}Ý<"Öɹىã{…$-¼áN_ äkͯºuòø+€ßçó÷½X»Ùäýè¶nH¬Z¾D–¥ÙÙ¹ã§ÏJ¡F}QRéX®Sú%¼Õwflbª¹±á¯ÿì3“sâÚå­YѾñÚ†Æ@mX¤„䑽¿ÏçO‹ˆßçÿÀ沜ɒÊn!Ùã•%9gJ!ÉïE¤ÄƒÃþ·†GÆ;¶~äö›Ï\†k¯_Õñ½¿8~òÂÈø¤âSw°ïìðËÞ80916;•HÔ½`CÓšÚú‘áócÃægç„H5-\^Û°`äâYÍ”§Ž¼‘]¥ÉñøÅs'çggRɤ,{¡ºpÓB ÆëC‰\ÂÈÅóWüLýàÞ_ê%^só—UéБ†¦¶räÍ$Ó<˜Î›9xo}"…°ÍŒ]Zšx§¸õºù ?Jòx’Ík3ñÕW/Kè?>1¨‹˜©¡e±?X“å¥$IöC’,GZCát²?×E[‚¡°×H‹®ÉSzÉ>õ¡õ"uãÉÓç¯^Úvýêeã‰É^Ýïõ…“£+ªz¥ØCõ‘¦EBéT°6ìõùÓÙ³/*$É(eËâ`íå” -‹¼Ÿäñ!êÛjÂQ¯/ „$Éž†æEþš‘”$dÉ#IRJ¤<ŸäñÔG[½Þ€ÇçK[2% ½”Š*ùkê¢Í‹dÙ+yä´æñú¼~¿I§œ±^{Ëæ‚#Ö%Ï«8hüfã'Æ/öMÄ‚¼¾€ºÜ`møà¥ÄÀŃSSS³³3c³‰`ýzƒJG[éjlíÐüªkY?¬5yJ/Ù™¡‘ÛoXvÓuK'§gzö~÷‡?‰M4-n—då Y·ª’TmÊy 9R¶½—²aÁ{c‚Â7ñx}ud¿Ç· UqP3¥¢J^Ÿ¿¾±•Ǖٙ¦€Y–Wsvvêܰ»[j°ÿèÄh<9?'˲7Pnlñj‚u™o²ÁùÌL%&ÇG¥£CGjêüÁUy3G.;ùÞìÌõ/¹…´kd¯7=µ‘=Þ`M,óM6¸ôr?‡1Ÿ¥¦®!˪¼Ú³3׿äVS©©ÐeÁµbª „꜕WC‰Ò>Qb4F‹@e…£*ŸHˆÄh,ý{q€ °ý]1"PÐÕÕ¥1;Ë&c&(ÝÝÝŠ#øD`=( D( D( D(Ø…¼wpŽF£šÇc±XúT,V²¯©¯¥(—u[’{)ÆÍ7.V*Ù0PŽŒ•J&,éjÙÒ – {ÅŽŽÖ!âDU1X|Qèîn‘_›È¢S Èx˜ËäAä,¶Èë*b&o­°‹Zîd©ï¥1¾’ŠØJ”ß3œé4EŽfÑ,² ×+6g‚rÜšùZeg,mUÕV2yu½f*^ŒÔU*à–KÛÀž\ÞïìôàHfkÖl€²’^³q¼1Ž ôõÚǯ=À¥³3”P"”P"”P"”P"€‚Ðø-~úElË|¢®®.ŒV*2¶˜íر£@¹‰D"ÛØ¥;;°xv€J€J€J€J`)Þ‚sª·ÍÞ24¯:³‹ÒËèôý?Kn.Go…ªy ™ƒìõjl”HƒŒ]Ò›Çb±|-¥ØcºL»HÛµ¹ ¬øD%s3CœæîòÆ^’B¹2—È\(û¢š)M^ÈZ¿Éd =NfkqömæÕ…ÜíiÚG³Wh>ºY¹bÖTOOrjY^³=2Åg½Êv¡r;äækX%Ïg]¨Jænn2‹·$F1ð)lõœèùeL*Ëd.ó•w‡ )œY&kfì£÷ ¥§ü5š\ü³í\mήye*ïhs•u` 6”—}¢ï¢™Þ‰Æä[|¡7wDµ] g(r¾öQÌÎÔ)hRÙVS^¾IñæÎ\ÎcˆÞèè'9} 8DÅÛÇéÁ#¹$G1ϳb~¤ž1)ŠÍŽI—J+¦GæÒ¬LÎ2Ñ«ZyÊ~Ä@Úpç¶­÷Ü{zp$1[fk¨éu¬CáèÐ@_ÿ¡}ĉÀù³3”P"”P"”P"”܃ÙUA"‘HÕÚ(ÓQð‰¬¤«« #ØÅ'ªNï »»›.`;%wÌXõF”7½_ƒc%3VB‰˜»å`çΟ­* fX©äó$”È.c‚}ü8"ôÝÝÝ9µ+™±’yˆX€õ D`=ÌÎJ Ûºæk®Ìgƒ9Ó¸Õêõ‚ ؘÓA6D‰JߟÀ¼ÅÌìBîbq×4‚f_2HézÒH6·&+Û—µTæûRNã8ȆøDà gÓ•’Tª[Ç6ôº¾‘ÀÑ®AæYre .¯é•Þn€2ä ÊŽè‹È@öVæî›ÃÚZ‰½».ßú´{1“2gÙP¶¿• #@ïF펳!k°l®a¬†@¡ù{4HiðJ‘ƒlh눵ž}Qg(Ì\Nl÷rôMi. ¯Slȯ=%@‰À±.÷í5Àš„X %r®\» ±Jä$Ü·jߎ;XŠ+9@‰ðH ä±fç/°Ø'ŠÇãÎZ:Üé D€” ³q"÷½¿g¾²À'²¾1°‘OTÞïOØQ‰À3V½åÍFﵬdÆJ(s·ÿ`ŠŸS™™`¥’Ï“P"»Œ öñãˆÐwwwçÔ¬dÆJæ!b Öƒ€õ0;+%®Ü§´¬æÊ|Ö´›b«WÚVÏê½Ì4SºÆ†(Qéû˜·˜É˜«Ê9·œV¤t‡ ½Žh$aû]wٲܠz0ß—rÇA6Ä'g8›U¾ób1ŠãÊvn¤Œ«vx¬fbY¸Õß4¿åzö̼ 9ȆøDNšµ)Å5ƒ´lÓãUí¼Œ¸[1“2gÙ÷‰r›YœhC»ÏÎô¾ÔÌ5Œƒµ¥Šæ:ÚfR¼Rä zÒ`ÔÓ•Ï¡ñÁj°§ù7€Ìq® í>;Ã!¨l­DĪª[ÏÎÐ ”Lá¾½X“+¡DÕk÷± !VB‰œ„ûVíÛ±cKb%()”ƒ<¾;cç/°Ø'ŠÇãÎZ:Üé D€ D€”åwgîûí8O‰xi*E£®ñÒT€H$²ý]™‰€õ D€ D€ÁJiÙð.U6z‹a%3V”¨(x*ñÒ¨XÉŒ•%* Þ¨2ãõ`%|ÃÒBœP"€Âfgê¢Ó[$°ekvQùî³X™b£Ñ¨âšG4oARÓ€.Ø`Rq§šQ4¶ƒû¬%V"uJwÄb¤$SˆÝ0c V<„™Ïš)Ýú\©­¤iõÁœv@}P¢Â{d,SÈéÑhŽ“ WK¡\¿AÆ|Çy½bÍ™”îð†òòmÑP#—»æõ@f$CQQšBÂŒ3ÚóNãz‘Rßµy;Tƒ• XŸ(ç0XÚ¡¯˜Ò È[Ö©¢"zâ\Á òñµÌc;¸ÆJP^%RljÊw(2£ÝdÈÅ.ñ)L eQ¢òQp—-“–\˜\£tzÓg“wgœ’ñ%ªÜd;SjwÆ|˜Yó®RÍæx°ØZ‰ŠyH!FÙ…¨˜×2“Ë!©f®›±¤ª–øJ·¬y°z¬Å*‘^·Ð|I$ßFŒ5˘ȷ†ÇÍ›ÅÑþ‘IkÐÜàbøµ D(ØÖ'Rº3X ð‰,†Uø°àY kc%À'”%”%”%”Àjx³Qƒœ?e°ÉÛ}eÚñ-çª@9¯[™­è%r?ZÓÝÝíâ]á@‰\òg;Æ{®i®{Y±ß ¶rÓ\ ¶àBŠ_Þ\q¢Ò{&÷\ÓL_±ß4Ólͪ5ó…T Ÿ¨Ò¿ír…w|3(*¯å¥q‚%r† ÏòŠÏXV-0SUü @‰ªB¹¬r@4ãV¤ Nd 4w7¿%¼æfó:AxC€YìÈdT §{¢™>¯B²÷\-ÉÕM^K³uÐZ]1<#`vfͬª€@uÅv|3yuõ)½‹æû%ÊAww7F@‰¬$»ø-jBœP"”P"”P"”P"”ìƒò뜋É”]‰ººº0 T„F]%â÷VP"‘Èöveþ%NÖƒJ€J D®ÙÈ Så £DùÁ;S¥eçÎøD…ÀkS¶šg'ëA‰Àz ™©÷ðTïÿY@!™¢Ô;©³]J$ô$#£)ÙûV D¥!㿨?ä•]í7in©®pšðžœKãDšòQ˜Ç¤u±_œí©Ý“f^™BŠ÷eð†ªQ‰Ôq¢Êȇ¦ûƒ T©Y¢à>ó>‘ÂJ;b´@µûD9ãD¥ò€²gÙ„sPÕJ¤'НºL&6Ξ³4ô€ÙJ(@I¨Òõ‰X¹ŸÈbŠ__ð‰Š¢ÈÕvŸP"”P"”Ü‹ò»3^´땈ýQ R4ê*›£@ˆD"ÛØ•ù—8XJ(J(J(J(Jö¡ÕcÕÛ@g6h¦·BÌk Yã’Í•WÝ*¤…Õ3ûm~¿yÝ‹ú Óï®Üö©.Ÿ(ö.Ù&ÈK†Ù‹l’⋲wÜE% Uíå…œc—f72Ÿ]oÈ|0ð’4‡h4š¹\ö¥5S–{ØI_%]%Í{ѬL&Y&£ ÆÉì{ɶC]Å­ž‘¦}Œ»={…\3éðéçMa‘ì'J! eõ’ÒµÍdÑÌžóŽÊç„笌ZŽ-©°µ$¾¤s' r1w«)%æƒz–RøÞöQn[!f*ã!Ý7ŒŸ%FÆOÂ3²§ÿXÊ8‘ûžvûô¶êíí9 9Â>ÙŽ‚: é¥9ÕáªvØóöÑ ý`¢³}¢Š ò)ÕÁÚ’k“I¾±Ñ êï¦G7m¢âícóàQãD9Íg&Ì”S¼ÕEn²XkZáEkÞ‹ú #;ßT^žô¾µ'Ò†;·m½çÞÓƒ#‰ÑغÈ0ëX;ÅGnÀѤױ…£C}ý‡öñkpòì  TðÝ™S£øD( D( D(¸³ßâG"‘ªµQ<§£àYIWWF°‹OTÞAww7]ÀvJyáÜÕ9ô^ã®æIºù+ྠDåå;ßùŽãê|ß}÷1]ÍÉÎ;±R‘VB‰*гZ‰D"ÆJä¸;*“•\ÖîVY)kÑÕÕÅX Õ Jd/öìÙƒ  ±~væ¦=”ÍÜ©ÐÙ!Rqÿý÷;ñvônJs»rÌœ²I/²§• LW½J¤ÙN®”¡ì^¨¹ß‹ã¦fƽˆrej>üXɼéªW‰Ûž˜ßZn9툇 0NÎ”ŠžSåærPôZnSƒMu4·(Ph–"³œ#{úÉÅÌ7‹™›ç•Rspr«•Lö¥âÌì¬ZPt…$9+N¤¨|fã-µ?¢ç¤¨ç æSæœw¸ÃJþyrÄöS^§?ØÎ•!×Ï4§Ï9çÔϾeÞ¬¤ØwÓäÍ:Å&^wtz‡Ê£µÉ†•/ìYuœ•\9¤ÉöìFùfdët;7be¶eaóQʼ•ª§c[ï¥gÂù~å‘Éå çHír+®Îú_3flíÁ*±’™¾ä8ÓymÒZzL~vîDÒÑn¶q Ç’ƒ6´jÉo3¯¾”¯é˜@õ‚JYìܹ󩧞ÂP…ðfcÙqß ~¬Iˆ•ð‰Æ}÷Ý'9œŽÍjƽÅøDvÁ}¯Ÿ±áV²…±×X<;caS°Ø'ŠÇã¬ÖûD( D( DeDùݯ¨€õJÄKCP)u•ˆ—† D"‘íìÊüKœ¬%”%;P‰õ‰÷f€SÖ—á• '¶šã®2†Å'RÂ{ ´TÞ°•[³ÑC–—‚c…@‡.àgÿ†«¤añ‰ÀzP"@‰P"@‰„°ç~gÑhT´YXÁ«„´}ÒÄb±’›+»ül×¢™ìÖp(‘‘Ñ£Ñ(µLúFõT£xh5‡6J¤Ý•³%É`\Õ„PXX=êê46»/U=Ò.gÃé´² í®ù¯fÇÕ<w÷lcj4ž…åå1)D§´W¡áÌ·&>Q |~=iO§ib\-Ç$Ëàl¦—osZ­‘Êè³³ÒxF`•Ù "Ð¥•Í !CE7 ¦Æ(QÞ1…‚m—q‹èÓ…9 ꨜUþÜÿÅ•ßüØÙÎŽyŸHóaÀ{ÊwœÌ)ñ•üvF¤A·x¹éIDAT n8µõtÇžv–Ô$jû‡iM:íš§²–Ö3Ê”–@Å{-GÃdvfÖEW<9å=ÊËÂy™ÎŒõZ0ßKÓd%l8§XÕÍ¿öÀÕp ®U"¼}á€÷‰ s5Ñ |"”P"€¼¨\œÈ¡0Ø KÃá™…í¨0,ÐpûDñx|ÇŽØÃ g±O€J€€ÍQF¬#‘FË”(Žî‹íìÂ(PBᨶO”} Ò>ÑÐ@¶«R©ÔÆ-ŸÄ`=Ï=þÿ¼U]¾ˆéIEND®B`‚saods9/ds9/doc/user/binning/block4.png000644 000765 000000 00000526125 11332353404 020127 0ustar00joyewheel000000 000000 ‰PNG  IHDR;ðþ›#{bKGDÿÿÿ ½§“ pHYs  šœtIMEÚgØ IDATxÚì½{t×y/ú>DI)Q-+°[ŽqlËŒaFqÔ6N¡Ú'®ÚsCWµ+¶0N®½zÛª‘r«ªlʨj-­(:§ËN‹ GŒZÅlW£º±#äÑS%Ñ…áÐŽó‘Ä‘•ȰlÓzQYïîfcÏì™!Hâ1¿ßòò¢óØûÛ3û·¿Çþ>O.—p×Ç~ ƒÁ`¸/~ãË|DW>üI–ƒÁ`0܉»>ö;/~ãËž÷=ôàß|û„Æa0 †;ñÆk¯f3#>úÇÅ çY" ƒÁp3˜± c¦àÌé“ÏN¢Ö<Û?wÞüê^kÁX—.^¾õ“仿yæÍ›wåÊ•_jMóïµ¼é¹ñ±Víàkã—oøÀ¯ð«À`0nÆÅ ç.žÕ‚ï{_ñ—d~òÍ-­ÕºÖš±àñÈG.¿ëÂ[/¯{ðã _}ök‡Nkm[dºòòÅó7´ž}c‹o¹Ët9ƒÁ`0\ÇXç΃ÁI] 3?ùIó¬ÙÕºÖš±?®ÓŸ‹òß;Úæøôßýû›ÇN‰ ï¸5ð½]ëæ7x½c'´oÿ•o}ï§¹ü¯O}¢Ýßú÷_ùnòG‡\ô6ÀàœvR;16¯ã:ËsnèœÿЯ÷,×Âk¹Üè«oîÞ÷‚ƒÁ`”›² p@‘ÊŽéÚ¿yüãv§ÿÙ“ÿQ̵†Ó,:èXvލëº>ôúÈW[pÀµk§Ç[ý­í‹ç]<ò“ì±%Ý÷y¼ öôSß·°}ÎØ±ñ#cÇÚç͹mùÒÜùSW¯y¼ç†ÅDWn»a^ö­·}-î»û½‡?àPö­ó.¾ïæÀëï^²`Îо…ž7~ôógOÏšÓæÊ"䀜Õ"`NkóŸõ‡gÏjúúï{ûØÊ‹ÚZÿü¾ 4ð§Ä`0ÊOXS´Îa2–½ƒ?zá–„&¼öoÿø¦§¾Jo}ì¿Ù]k§cYoƒ¯yq÷¯ûÁs ðz='}ß»pÑå«ç[o¸«iÖœ ›¾`Þì…ís.^ºü{ŸúÛœÇëklöÏn>{ölëüë}¾f½·Ý àÕÃoܼìú_½çöýÖ÷æ.X2gVó'~íN»÷~óK{¿ékj ÝþÞÏüáÚ_ý`×¾o¿xì|¡©¹k×þé¯Özî…Vv·45þÇwüË7OüÁ -˜7û{™ÃñÿxþÚµ€?úÄGn~×¢¹­Í—®\=täØ?ýÅ7Žž°<°è-lŸóãWßÔÞ9¿jÅ-ÿ9òÊî}ß°¨}îC[ñÞe‹} _?öω‘#GO™:øžýþ¡Ž¶üå²>û;»ëž÷ß8·µåüÅËo;õwÿúí[‹gÏjzý­cÛÿáéYsæÝ\X²ð¦Ž–C'®xÀ¡+ £ÜŒUJËÞoGÿL=ùßbi½nyíŸáÙ¿þ¿ ¢‹š®µc,Ûn´úçÏ^v×Åìȹ‹Ws -­ÞKǼKŠéê;ç.^¸t¹¥©qËŸþþÁ·NÌ}åðXkK{CCàiô5ܼÀ¾üì_ýñï-îh¿ùúoŸÏÝzCgS£/—ËýÛ׿;§}᜶…?;ÿÖ±S×-lë¾iIâÅCêôþà‡»~ñÆÑ;Þ{ãC÷Ýùι‹?m¬}î¬ÝvÓ ßMgOÃãéhŸóÝ|ìä©ÜzãÁåøÛúÔίøýsÿä¡Usf5ÿø•_žÕÎ|ä®ngO?uüÍ뮿aSÿÇæû[¿ûRæÄÉñÿÚ=þÕÿó+¯ž=«¹ñûVÍžÕ<úóÃξó‘; Á0Ý7/ ßó¾×Þ<ö•Äwg·6à}7Ÿ=ùÖÅÅm´Í]ºdqÇ’çÍ àæw-=ü“ÙsÛ™³ Fùu,ï”®òX^{ë²#9çk7ÿý×¶|ò7˜èJ¾áä"/d\;wòZsMï^8§©©©ñj±Ý¾|5÷÷ÿvàwÃwÞõþ÷Üõ~xûÄéÃßyë¸çïY:»¥é”öÎ~zè埾öá;oý•»oúÚ‹s[[\¸xé칋‹.óz} §Î^¸n!æùg_8wF}ÐŽü·Ô¶ë‰O-íìH|û{_ü—}Ÿzô[yÇ»ù_=pËÒùþÖÃGÞÞùÿÚ4kNàúëî ÞÔ˜÷â«ã^_#=ô¶åKgÏj>qJû“-O546ÿͧúoï»é§æÆFgÞ9ûÆÑ“oŸ:÷åDêâùs—¼¯ÌŽ-t~iÛä“›ÕÒ|ùâ9ÌmŸÂ›Ä`0“!/¼ž)\åñx­¯µ»›8níæØ¾-ÑÕºZ±Òâ¹–Œå°¡J{ëÕ+'qyÖ"Ó¹K—.]¼x—ŽŸ9~ýÜ…ï*¦³?|õ­ýÿpݼæàòÀoýú‡—,^¾ëÆØ³#¾¦Y÷tß õòO<Þ†ïÿüßyë½=·}ñ+ûÏœ¿ ¥¹iöìYž¯·¡OûÜÙNŸ9{íêUäÌO9”}s^Çu®ä<|dÖܶ+ÞF¾KÏ7ø<¿÷=w¼gÍìYÍâ’¦Ïì€#oƒ§aþu7¼}º`Ö›?¯À²¥‹÷~á¯ÄÁÎŽ¶3ßÕßÑIF¼ys[¼þæQx½ –,{ëä¹Ûõ3|èÈ÷òË;Þ»¬ë–eŽžÔžøÒ¾±ñó=ô÷u¶.YÔþÖÑ÷Üì½³ë”v&wíÚ5äxOƒÁ(»ŽUJ?–ÝÝ$ËžíµŸ}4,Ûÿâ‹ ËçÚèX6TyáÌø™C/œ»ê{÷=¯8™þ–Wœzå»Ís?ÞÜ:×¹«¾†®w_÷2®ŽŸ}ç@æÍ ö;«{çÌn?úÆ Ëß{Ûòë„?ÒþH?»µåö[®ÿÙ/ß¼tùJS£oÍG{¿õƒ×½ÍÞ÷ß¼¤sÁ\/ýø•†‹8…«W¯úš›I(W®^mlnñêQ!¹ÜµÞ÷߸ò7½yôäß|áËgÏÿܦOz½^Çsòô;®ï\ØÔÒ7ÐÙ!n8®}óí¿ÛýŒ8xòÔ™«W.çr×¼ >ÚÙ Îoó56{à]¼ °/íò•k;†÷_:ýö’Žyÿ×ê{{ï ö¼çºgS¿hhh~éàÛW2¯ÍimzìἜyÕÓÐí0 F•­‚^k« ÝÝ VA«k#Ú¹¾>ûhx þ õ¹“° ^»rùì/Rðx–|à¾ÆæÖÆ…­WoYyþÉææ¦ÆÆÆw½ÐÜýQçþ75úþŸÿ¾òì…9z*—Ãò¥~ôÓC¹kWïzÏ»| Þsç/üà'ùõe×/¾¾³ã×zïØ±ç?ÿõ?¿ÿ»á®ûí­üàÛWá½yi€ox駇² –Ühíòñx¥ø9S#¯^½ÚÔØô‘ÞåõæÛüÃW²gÎ^X8Þç6þþù+xï‹Å%/¿òúÉÓï–,þU¡7N¼ÓîŸ}Û-/~eÿ;‡ßF.ÃÑ_Ž=ñúÎŽ?\û—<Í·ß²T\ÞuÓ’¯|ÿOqäü…KK¯[ à´öŽ6þöÖõëN9wöüÅï ÌžÕ|àÅôÏe,¹Ñ;¥7‰Á`0&Ã=†ˆ¿úƒûìÎüËü¦ñ*ë=UEèX׊ç’1ð/ÿñ›td0ò1õ¹vŒeñàóG~Ø1·é¨ÿv¿¾»hþ»n9vîd`î寯Æ\.÷úk?šwãºtùÚמÏÜ|?pÝâæ¦Æ§´ÿzþÃÏîoñ/¸çý7xö¿^øâ¿$(yT÷-7üí§ÖõÜv«ïŸ¾öŸ/½úúëGøÈ7ß°¤¡Á›}óè¾ooï×Ìš3¯±yì¢<–âùýâ=KÛï ¾ûÖ=øµ?ºpñrKs#€ó/}þËÿ§ÿþ»n \÷ÒèÁo%ø±Ý~õÚ5.]ùë¡o¬ùÐ{Vt/ÿpKËø™³?=ôú«¯¾êiô7øI\ç/^ùüÓÿç÷ÂwÝ÷¡;3‡^Oþð••wÜJO~ñ¬vùâÅr>_Ó,ûlÿü_SSsËk?yñÚµ«m —Ì]pÝë?û>€…ïºe¶¿íÈÏtåòŶEKý :O¼ñ‹³ÚÉVÿüù«W.Ÿxëð¥ ç¼Þ†VûÙS'r¹kKoZ°`Ñ›G~y^;yåÊåþØm·Þø…=ÏîK¦çw|M§Ž9öÌå ç®]»ÖÐàó5·ÌëX2kö\² ’ÉñÄ[¯?3~åÊåæ–VÇsáÜ;ôÄ+—.ëðÕË—r×®y½ Í­süKššg{ãÐÅóïä®^kð5´Ìn›Û¾°¡±©©yM £¬8}|,4¤5Mý§ÝÉ]¡_˳Wæ§ó::Ëq­8Íò ]+~?z¤PËD€—Μ¸¡õìϳ'¿ï#ðô2OCõ…]ç.ºõæÏœ9“ûeögO7Ûoãõz}m‹–^»vÅÇÓ@º¯±Ù×Ôâï¸Îëmð6ø|ÍÍ-šš[½Þ†¦–V ×Òêoð5^lõ{<^oƒ—´¦¦¦–†¦fó-mj™åñxáñ´-ZÚ2ÛO½˜·èz_C£§¡ÀÜù³üí¾ÆfÀÓÒ:·­ãzx@dÓ2Ûïkl<¿^áÁ‡_»ù†ÎÛn]öιóÿõü˾ÆVÀãñ6Ì[x}Ó¬Ó9¼žÇ“C®n^ÐyÚ^ßÔ:Ç×Ðèñzs¹ÜÜ«W|šfÍi_x½×ëóèoð5úššæ-¸îÚµ« >ºIcS“¯‰éŠÁ`T@Å2k-Ý÷|´˜«,£'J~­é óbÃïϾrn¼%°Âר¬Þ·e¶ôĹ#ÇG/\¸pùò¥3—ϵ̽ӾÉhkÍgþù‹MG›[Ú.ÿljimR²ÍÚ]/þžßYØ6oA“}Mò%sÚ;Ôû¼y\[õe|ß ç/^zqôÕØó§ÎœíXzÇëõx< ¾Æ9mÎCÒØÜ2¯¹Åò§¹J̶*úÂ`0î± ªDWµkMÇÈ*øÚ['gì ;rV;uíê¯×ëkžåŸ¿¨±yVËœ6/;– FáÒ…sçß9m2Ð9#“ùé¬9óšZZ«u­8râ­Ã«àLvûû\×2{ž×磸oƒ¯eÖ¯—#÷ F]ÊMe2?-þ’YsæÑUÕºÖ„‰w×=fÍm›5·ßfƒQÿ¤Õ:§¹uNm]kÁX¤cÓÆyD ƒá´úÛ 8§ïþÌ#,ƒÁ`¸|f· -öÖ0 åعs§üOŸzÆ©S§XL ƒÁ¨.†††LGXÇb0 Fm€‹Á`0ÌX ƒÁ`0c1 ƒ‹Á`0 f,ƒÁ`0˜± ƒÁŒÅ`0 Fõá›ìííí–ÇÇÇÇé§ññ’%'TŸeº¹x¢üèé4C½VnC »6ý¾WvÍ+í;`ù²U]¦VM¶=%ÿLŠQËôè¾´ån¡éó†¥<§9ô¥êìÔ.,‡l-…VÖ×Ï7µË*9kó¬r·§Z³¤«XÊ¡yííííííããã¥m°åÅ t¥vÜ=­ªz“¦#—¼ð–ò,íЋ—¹bƒåòɤ¼Œ5!s–U5±Ó„Ä[5å÷€î ®uÐáì‹Ri{½V;+?Q>nú»’Cc)ºÒ.'ìW1Ò(·–ã,í’Œ…IÂS~tɇ¬HáØ½-ná„ò,…ÈS–eïÆÑAÅ)fš*k‹iöÆÑ[Ö!W¥Sò9ÑnQî·¹]›ìÒ̲%²®cú»òí7qi-9ÅôËYÓ™e,Ÿ8)iWæ3™ì£ËñJ8 Çò‰Î-œŽÄfçIÃnè§9›;÷nj/I_¼â1µqôMSâÐ4í¸Úî]¯ŠD5”dh)g÷h÷®ÔJÒÔ ø6¦IZ^6¹Ü|4Ùõûd?äR½Tvîêé }É…?!‰Ú-MK4; ”ð ­ÌkVF?V©è¤ÂŸ½¥µ­L]›Bß§ð™U`h\âΩÊ{âÜñ Eí’UW ?7»…³ÛzZî¡/Õg8¹93kÉy×.2¥#îsó«ïíÁ]³³J×ÙиMÁ’Û3¡rPÌÕ+Í«†WiÉ–îêý¤^iASx…D_,™ÉYKÅ»žg¼øÂË´¶*ßêµÈoLîšÉSâ¶y¶ÂCS¯tU>ÁNg,T×›‡Umž;µÌZ‘§³íLD•ü²ì85©úÊ4äêl^f|` s^ܹ¶k¥j‰©UÕšÊè»–]¨Ø¸¨¢vh€ó•°Í–·r¸y…_cgáX~ÈÕýЊyÇ*Óªb>sU€ÎÒ«€l‹yÄÔVöž÷=ôàß|ýèésÚøîÏ<®AÌ`0X™®5Ö¥©Ÿj¿|j~«¿ýØ‘CÙÌgib0Õ™¶ê&à 0CÀŒÅ`0ª€ DгzZðñ3Œ*’c¦Ép:mf‹Á`0µf,ƒÁ`0c1 ƒÁŒÅ`0 f,ƒÁ`0˜± ƒÁ`Æb0 F}Ãb?%Æ`0 ÃÕ:ÖÎ;Y( ƒÁp;c1]1 õ0[×­[ÇBa0 †ÐÖÖöÈgv[ëX ƒÁ`ÔŒŽÅ(!8†…Áp3ؤČÅ0àÿøY †;ÁÕk™±üU0nÇÐЯ&kìÇb0 ëX ƒQkº Á%°ô2NÌXT•YÅøø8—».9Š©1âŸê9´|¢iÄEusõnòOÓiCi…VÌSŠé㤄ïðQˆ#–ç;ÈÖáÓsî•Ó[ ]KJ±:•Á„rV©BüÝÞÞnš1‹98©–Ð…í™lÊJùvO™þJK¾v²÷q QÓO–ë;’¦Ë'VF1ðx<,„*Î^Fß4'ËE+Ó›ó¢ÞApÖ]Ä‘ÉN÷–'[.Õ˧7OêžÎ’±TDÄ”]äM<ªÊvj¯4ÝÊtþ"Œ’ 4‘â³´œ–òqšå¯bâ›Ú H3i‘šœ8YŽK¨Mÿu²“‰ÝSìÎ7¯ü+=)ÙÊJ¤ÜN£¾á›Ô,ëÅ2©Ζ¢Rɼ‹œÉôTrÛÝ”uYw)žó¦ßÚ å?YU¬TÖ•´øCc0cMñSdLS8®¦£fMª/•yÊôåo©Æ9Ð’ó­¦ðž•I‹ÁŒUJMb†ÓÕìK•ŸÊG“½³8ß§´íŸŽü˺€“»ÉÑŒ™o9¾%þ~¦/´ÒjW¥”J.M&Õr‡3'{ŸiÊÊG^ö1e×±äÅ/uÎò1ùcì„VŒH-Ï)þ`I†r²+Æ‹ãp9ýd'+Y%š¨a~ÅÈ¡*~,“ˆø£c0c9g,§–f‘btX€O(Òbœ"Åœ° Å<·ÈÇM?¿˜ÇÓM‡ÆOê•v>¡x L8¦“P£ŽÁy ƒQ/:ƒQ>Xú–ܯ=¸60]È f,£\¨9Ó–Ë̦B3cZàlÐ ƒÁŒUàTÐ ƒÁŒUعs' Áp',+0Õ24!¤SèeÆb°‚Å`Ô,+0Õ8ü@Rg/?3ƒ¿ £æáP©†Ô)Àh!¤¤ÐM?¤ÐB2U§¤Åû± £VXŠˆ ƒØFGȨӕŸNþYo`Æb0 ÷"d´ò b3  `#ý3…î’9ù=¬®0éúXp,æ©&Ï®û?v%t-%Œ©–xv.a<©ƒPêüÖV㌺PªÄpJןBHW…Lé„$ÅYh"ŽÃO<—š™:ÖdkÂòÄQ ñÛIXr‘òŸð’)”B®›Æ35ÁOôGIâ§ÒqDE ýC$ŒDiÀB:„$rd'ôˆ£/‚X*'L…3LÇR뵫¥iÕÕñ¤VÊâÈ̬J§ª,v²ÅDÕŠ‹,0_<&¼ÄÍg0j‡«üƒØÖ‰H;JwPuéJU7©PQì öÒ©nx´œ?äI¦à´x. Æ~,8L7ê ·øEñ”‹ ÕÜP|ÏTùɮخÚN6žÁ¨uë„ìÄØ.ôǰžŽ§Ð h)ô’=PSÕOèN¡7…^ùɧå7êmÌXÓ^ü²ýÐnFžlÆIé¦å3¬U¾ñj!+£¶´«ºCH§ÐE<…î(vèëšû—7Òù"æBDFñÄC ÝÈM,dƚʢ˜QŒ¦2/Ÿ)Õ®n½«/ûÏŒZƒß¨lùIa¢`ŠbBH‘¡?" –t• Ž($_ý­3_ý ì;ˆy*©ŒfæðOn<ƒánÒJb['Æ‚ˆEÑBšâ3’OKXQ ù«@¿ê^.„<ÉT®—óñè"`8ƒ ¥cO™Ã+4A]t<„táA@ì)Ž£ï‹ˆF‹£OªŽ¨AîÀÊ«$øCÙV•Ï:A6=GgXZÜ!Ž>½V:ލü“ú·ÇSˆ‰÷&wD ¬Q0c1 †YãéÇ®’ ² "C¥@ä@)•Œ&Á^9Ý_ñƒ)t‹]YtmÃRÚ@-„d1Ò«¨m…6uqU¾Nq]¸OÀXj¦Q‡Ü£œ–Ôµ˜Zå*cÆ"Ф3‘EZÎ^<¢óJ¯)ÛlÃ"馾J‹`Xß’E cqô‰ÛRÂ@⿺ãˆR¬`A…"»£GC.¯~QˆÑëÆ:ÃÝt…Õld0fü¤T‰]P4ãodž"Æ´I~@Ä6EÄ–©ÞAl–ø,VäƒãˆKÑm)%nÉ8¢¤„‘%ø,‚Xþþ‰< fKa=T™ ò‚ò²‹„ܦ¯òi–Sdñ—0 †{@1 ƒ$ò5cqtýÀ)œ€@§ýˆF^.` íÖÝ]Å<”’B$ b8‹µ‡î&h5®SWAÆ’º¾%bååÄN5OZSÔ±¦°lç•~µÀ%9ŒÉ"žOj …ê > ÓtEJ“ÂBc+r/•pÔã5’€?Œ±ÇňuŸVššJÎ*zJN×¥ðzú¿?‚áZ7 N‘±8` × Æ$¡…$ÅE„í ¥Gäý "£gHÊ[eë_1â˜â}Z”Ÿ‰¬‘BH&&&#£`w:M¾Ä”<—È,„´”ܽ _çŒeWëhjž|vþ3 ÷Cd?’ÂÜ5¶GZ ©DbU}”‡By¬*³ IDAT¨>¯¡„i8À/+s)t‹À ù¹zóüú¯”f0Ãúçs½‚ÉdmŒ´«8új=cS±:–‰iLËöÉ*g¬¢1 ×BÔWÜ‹GhÞ׃ôHÅé• UB±M¯bÒ{LÕ¬^¹ªˆÎ1Â#%Œ„:eú‰½(¾ùœþ 2"LƒZ^õˆ‹ÊyAñ˜¼ Ä!ìPa0®DÁAlK ¼»%"!à ±ySfúñ!„SèIüôÝ»âÌ"4Ú.Ú“Òõ39…Dc鸒Ò"Ž( VÄt Ýa$ú±kW!:£NËŽÃñ˜409ÂP7ÆtU1°äŒITä 6½ÖÓ6à¤c‘Ñ™)"˜Ò#Ρo™’H(¤Ç®4=˜B·FÊ9œ RÜŠlIg@ÀCxú æžÆ¼=XÛ]µ[‚¤X« jÇ“{ª­Ïô“éž4+OZ,y£HPz¤0Ùh”ðBœ“B7™æPÈF‘Ž b9Š*üQpŒ‰“WcPˆ`?²R¢*JÎôEO„Ø+޾lìÄØøôãxò –gCgqu&k™± c†`ÛRèÀ–0Ä V ÃØf,4¬QHºš·©xsŸïç_ƒÝýØ%ñ“_cÔ"ˆQüE±{<ù Ä(vxˆÍ]]ƒ"Î ¸þýJû(º>‡?ý|‚®=Žrbé|Ù'vŒÑñ.ŒR„á@½êX‰é,?ÎbW¼!ËNžvƒå ÅÄä¡™Ú³¦v«rUež8µ!›¦Ä ýy•óA†ˆ¬è#vàÒÞ^¢+QÚCè^”rBT·ÊåËáù\o.GA&@ÙŒtàx'Æ:p<‹@ñíØ°Äí´­jÖGG'ÆŽbÑ:鉿<d?‡?ý4ž â Û…Ñå8˜Að1<µÏè~¯i«Y9›¿«¥cMj±Y¯Ë7SúRõqRZ©ós'¤»…ÅT–©Ýª*ªO™t¸"çý© _ý¦L5Š|´Êâ–v*€L~#°9$}C뻲¢(DÀC®6""/„6C™j‹t `ãAÜ~sî!lø-|¥»Ž£ãi<”E€¼V8¾ ‡`éJ üšgø~Üt‹öcUQ öi<±«„‘8yT0…l›q*òÔ Up D¶0Í;U4=•–z'5^v°ÉÞªL²\"þ®°†7aßíN˜Â@s혊ñÖ 6ÀOÅDÈ ¥›õ’ÈN¦t·“´KÓKøM— ¶A§0÷\®@l÷x’1슢{/9ŽŽ_—cY7ÒOã¡QtíÃê/ú¢hî€Y8ý:¾¾ÛcˆŒ!{sGГA0ˆÌ¬¥ód´mGÒ™¨Ë£s[EÎWÚ/Ä4yU~î(ëÊš&¦jÑÕÔž+—z±š çzSc¦s«º1ÚÉGî{1sh;1:˹øƒŒ‰¬‚±<'uÓö¬ ‚¤Ee ¬Ö­¤½€ñ±mŸdc`¯ÇcáÊÊYÖžÏõxuèvüÀ_œj¹ä®g€Þ5u zÉ.B4¬D‚ŒbMGÒrŽe÷ÙÔ-¹P«ãƸ¤ûeRh&Œ”™Â™®J-PÂ@-ƒ´^“€ŸB$âЄR%â,H‘€Ï¢`$:´°Èy<Ôõ¨'FY£ˆïǽ{°¶#ËqpN?…ÇÈ¡5Š®•8p+âé'ðé² „ÃHp][…ýitß0Hž-Û±ÁVÛ+FÇBEu¬éF·›Ìú¼!Ƶ 1µ¡± 6›9£\’b˜Îñ^(_Å?ÎtÕÔn5³á7ý_¸ð§Ð­WN†Œ#@VÇÓ"–Š:Ò‘˜éžÊá-Éãǃ{ˆÛŸÆCÏáþ,dÇÐF"5ZYžÉ«eÕµ 2 F‚æq,~”® ¥h5ì„‘ÚédCH‡–¶÷Š-É1¬iŸ&Ôóhßá%¬x =Ž'©âpFÛ1NåHcÙýxnÖ>‡û`å¿_yÀýxn=‡±¬ £g07î,]íÁÈ6:E·×¨ŽÅ`03œ·hû¥;Jåc¼›*B3‰ìz(|w Ý1ŒE’ñ|ÉGMÏ3ØWDý±l$ÓßzVc_Yèã裬£èE×ZìÙ„­ýØ ‹Àãx²»öauFFÑ•@ø+ø­8"Y"^}ËpùhÆëX ƒáy·¯Èi+¢SèÄfQK§§[¤EééšÈ¦Iùp‹ª?BêÑUA UÏ"°Û3îÇcè\‰º0ºkÉ„ #–ã €_‰a$žÃý+q€B9FÑu¾[štM¬cÕ¸Ð-£–A›«D T.´ò:ý!Õ"ÑR:Õ…ò›·îÑÏQ«>Nò~‘vµ{ÆÑ~d÷a5€MغÛ`eF)tp 1ð[øÊl߃µdÛ1¾ ß akbÐ0ز££èª•Ê#ÌXeW¹åbÔ2ü:oõJ"'BHf ªX>CWË’t²G¶A)¡»VLaâŒD±ÀZì!¢ @–ª/Ãáe8<gîÆ /àî}XB÷ ¸»»FÑ ‹À&lº4]B¹BHÛ;1†é_0cÕ vîÜÉBpÀºuëx€x€Ü¯fézU:ˆLÑT¡2–_¤»¥"ýØD,Žn‘±)ˆŒÎXþbqôŠÃ ÓfÞ Yó~t¢3‹ÀA, OÑÑÃXö8žü ~ëÜ}7^ (öô<†§ÈHVDÊŽH*€—°bÏá~:‡(­VÀŒÅë÷j¢êëy€\>@.Q³BH†‘H LÜ3ˆmØhzV\DË ™H’˜ÌŸÑ©K7öIõ±’z°û ²Ù€í£èš‹3OàÓqôíÇOâqRªÖà™½Ø¾«ãè#*úÍ9Ïì{gõ“xü4î=ˆ±8"°}ƲpwޝÁîýx`žĶ¢Cí™±ø›Ÿ‘r [ð¹|€ªŽ’Ad“¹/„ä@¾¤HÞeä“ÔšàŠ C@.ƒ ¾ ™~¥ýÅI‘iס AdÃS/a€ýXõ9üiÙX¹ȧA¬{z0²û(iÓ߉d|  `ãËøðKX± ý:ƒ]QBòäº+È`0NœLZ ÝäÐ’ ûúõ„Li(ýÑM$‡Bc?mÌ¢ƒ"×»sâˆÙX—þ'þ¨ £TÄd=´­jÖÒÉÛ‡ÕËq°»(Oî:cXËhËpÃd !M7I ¼ÛÝ?ÌX ƒ‰£/…ÞAl“^ ü¤g» ~Òèoâ'Ò`∠fÒcß5##:!ŠDo‡±ŒŽìÅ#›°u-ödìÁ,>ŽŽUØàVÒ”&ƒÌ€ÄgqôeŒ`x+6Ñ^æº'HŒëLlTÓn–¤ع³ÖmÅÚ6aÑgËbS ¡s(¸#†õƒØ@6ƒàìÀƧðÙŠM „Ý¿Ø;ýoÕ®8–ú“ÝÉê¯v]µ*XÖ³¦„ñ%¤üú«ÙXá*~,Ît(0Ëjº‡´(ë’à£Ù0*êcQB1DL™ÑÉ(™ýzìÆÄ¤Bºc{ñ €†ÃHˆÊ&8žE ŒD ½dúFâMÜ"ô° ‚äñÀÆ 2¤iQvA«ðáN«mÆߘ3©8¯ûjt©(—-wùlRdS]»>¨!MK–pÉß êZIgB¯LWBÊ H¥¾ !Eœ¼_ÆÐ ƒ¥Qðœô;«w=DH«±/‹@'ÆFÐ3€-£èŠ#:€¤Æ¥ÐMd6€ÁAlÛ…þbOâñ²qô‘RG”8,†õÿ/þ6‚˜m¡,7ÁWü×"Ï€–¡©JÛý„KÑÚ*YRÞÔ,ç&Ù­ ĬçPßÄò„U³*\GÊ$á Å^üøÖåÕÈÿ$ö-黀5ÂN°BH“ÇH''m~`#$'ViÝEöº(ŒÙ í@Ñ}Q#ˆ  /„p?Ö¡“RÜ™e$#Šün0ÐN2` í0‹#º IRÅŠÙVŒ5/dj‹M÷¯%e£SYgIÝßÒ?3QÉ%EÅÆ—Q-è‰n{¥äÐéÊÚTHi2ôlLy=)dÍH‹üE¢»(Æ]ÜHþ~Dv¡?Œ¥u§L¸Ô$"B‘\#„dÃ$³ÈlÀö}ˆH E<‚˜ËIË[ò96f÷Iͤ&« kéªbvKÕ Xs£Š¯“Ãøò¹~á7"šÑ z…#tšžÍ=¹nܬIYF‚…þ+‚½ücèìÇ®0a$âèÖ<¢¨.ŒfÀ– ‚qDE5dÊ^HÿQÖ(ºü8:âˆä 5ÒØfc9OˆÒO­|™¦î”›´Æ%8«¼“ σ.¡|»ñårmIÄÑG‰aUGi@Ž%ŠübÿÖ 6ë»wóîEÆé `c;°1pÃk±'޾AlŽ£/Œ„vA­Òý -…n"*½/þ(vˆsˆ€]®c•>K“0Å˜ŽØy,•ZúfÂw&lÊ·yUåCu,örÜŸ¨¬ªdõ‰|€#ˆQ’&‘cP×–ò©r3’Ùè$„t¢`!ÔH{Ó½_Æ ú÷âÁQteˆ#‡Fi–±­ £ôwé]è'¢ªÇzËý“f>·aZ¨ï/2—¼{Ëò¥7…YOx•å,9ÍGTw†*FJxt‘-)É Öâ$X­qq~z‘A3a€jÄâðgò‰-üŸÆlÈû·4ÛD ­$ò™s?+kQzFþª]E‹è) @a)t£ -‚ÔaT›X¥FÌ ØõQì©è¡×P¦~°y~LÒµVÛ:+C £~¡Åè.¢’äÉc£1ï­&åð§à³TmD×f Azþ\è?E'RõòylÈ`c‰l åKvå‹›P"‹ë¡Œ@¿\þX»OnŦ=€AlîÄ.׿q/1cñVGƒQ×n'ˆ\·Òß½úv`QO„8)™Ëõ§œÎ÷Èÿ”þpBÒø¬|“¸t“Táø£Ò³ò?IWa¾­»n1¡zZˆå=RÔ$‹¨‰è mtScÖb€•8° [ÃHô`„¶peÄ@=AkK;2c•\ˆQš–p>E‹ç7wÓn'½€Vº~#¶ñR…­ÖG7é@F××ĬIâ†dÃ@  KÁ‡Ad(¯àZìÙ„­!`“ži0ŠxýÛ€íqDH»ŠbGé½xp žaÆšqعs' ÁëÖ­ãâª-è{› ¬|(dÄè–\YD-´Ã©O*4¬E±#„þü@Lט‚Nã×9!¤É¦GGOxeC'€(v bÛCxúìCç6îÇÁ=ÈìBÿl§*$Dra$¶c°Û…š3¯ß«‰ªW¬çrù¹rÒ ÚêɧìóëDÒÆzWTwX“L¤N‘ pJ›ŸüÄØFûˆãˆÆ¡´Y‚È<‡“›j÷â]³hÏÖ&lá‚BíÛö`-Õxd‹¿yFCCC.a  —ût,±*-xKRª4)zPlÀÒD ÝRµ!“§Ïî­ØÀæxn qôK­Äq2%—Šaý>¬ÞŽ ”Ùâ)D~]tÏ~¬?€•’ç:xùýc0ŒIéX0n¢¢íÀôwÃBÙÒç}Q©Ä_Ú6ÀÊ,/a…®oõ]…g;16€-Y¯Áîô "# @ÙNŒÑîã 2QìÈ"Ѓ× Ÿ‹Á`0& MD¥G£ì·!$²Ó ¢ª@S:1¶{È$H飓•ŠÓi¢$1eËíÀqäå !@¸#d!Œb‡â.LläMÁÅȤÂRR37:7ÌtšÝ­,óë;ä*~€¦&Õº ÚG^‹¢¬}º§*xEZF¢c7qËãèÛ6a+Uk’{q|‰ºƒÈ©˜lgÔóntG0¬WªÔôd‰}(®^ëXŒI@Nøm™,xÂ’(Å€vUh÷ФÊärÞŠ£¯´æ¾â1€-cèL¡{;6Œ '„ô¬ #`›ÃHw*†õT1‹L‚cè|÷ËQd#ˆÅ !Gt›%3¦æ6‰O‚±Ä‡!&GµŒw»ÓAÓ¬jyf ÍD0Vt¬üú]M‰k™wf®µ]8@”ÆͪY¨nx…¤Óß)ôƾ+:Hdˆ£/pÙ•8 '!¤r_þl‰#º ýDc”qƒ,œ¡|úyÁ7ÙOQ­î\&\®bùI×hðª—u˜Ô£Ù´[yð1*Šªc3åmêÀ¾"QôÑ^f9}{ Õ傞ÿp@>“FÙ¤ÂØ,ò3étå®”¸¥´ :/ëïkœ°¾b¹mMEÚfælh2–V²û<@ŒŠéy/ãÃ1DHÊ ¸»)iE ½dE‘Æ’ƒØBR/JH5”CHGK¡[/Y©‘ß+…^·©YeÉÝ^Ž“Ý¼ˆv³Ž8“gC“ÞÏĨ?Üï~`ô¤ºƒØLÄ“@˜t©‚AdÄ?%ý, ôEòµHDiã³Ø­EI=Rn꯷ß^‘ŸŸZ,¼æèª*Žîâ<VëÝàbT +‘Bï ¶šîÄ"=)_q˜rs„ÔÝWZÃd!Ì 8˜7*æ÷‘++…î0µQŸŒ55ªƒ/LMÍEgÕhÀ sƒ¡À/(Š\PDNô‡¡¨Š 2!$³„^‹=Y±-…^ÝÀÃú" SÂÂ!7•$.± JP†éõL^cNGÎÅHÏ!,ÓòVÅd?@äbLvA~)aúJ Å°>‚XFÈAÕ]±<€la*žGqU0¡„‡`w W%ôùù™¾IýmùñÔôeG^ÝX/æ´âG§‡¬Zm.R€<@Œéƒi󯮥d ½°ý8"»¦M»ÐÝH}ûð“xüq$ƒ¦¬:´,†õTô[ÜÓÙ²gÂåƒÁ`”Ÿ·DQãÞ"8¾Ú½6J?"DWAd¨ em_‹=ãÉ0jA©òV@Qå%+вû±ØXÁ`0å„?‚a µ Ò'c褄 ‡‘´]èßGèl p§Ÿ¨àHa‘«·Z)<Ü¢c1K1 Fù¬`FâyNÚAlÛgÜ™—ãS-æ‰ÓQ½E^T’“,GkRWUÅ|7.¡æF°¬m® #ªi^PGÖîת åô›Q¦¾sÛÉ>·L2ŸÔŒá¼ðªúd;ýføÊýiÕâÍ븩–úV ßÍ+ž)Ï\Å0ë„cTƒXV¨ï÷yRoK Mw¾ýø]2³éÀùpç$hg¯õi½î×@ÂZåà”-fp9”`&ˆ¢˜·¥¶„é­ÀDP¾¹@½¹k—–rSMè+ÓÈVe€jÅèÜÎ)ŒH…?ÏÚzŸÝÓøâg Ñ‹ÊkWÅ ýôEê-«|Ë!2Ë›Ë#:á—£³–·­–b>Y1¯iU GU¤ðv¾fUiañMrÜ*~ž–O¬¢T§0™¸ð£vÉ»Z̧ÿuû¦Ó8Óß–+¦xªÍ°ü0*ОbäPY9?ej¿V µ•»œß(烕ÔÔÚéÜæj5²*-,òA¥úXªò-Wqb)¦aÓlgib0Œ‰-Z 7€‹Á`0ÌJ€;ù ‹€Á`0TÒb¸P¤¬c1 £6ÀŒÅ`0ŒÚ€µUphh¨ŠmªîÓÝÙ’ZlžŠ¶¶6–7’eèþ6»VŒž÷=ôàß|ýèésÚøm'×­[Ç4Î`0 —,sùÌîVû±#‡²™¶ 2 £6à³ä´’ÜúÔ©S(ƒ!¨L·­ã†Õ}ËkÑDÆ ~[¸;Ü »3cYž7Y ãôïVîÛÖqÃfHËkËšÝÖÖ&DÍo w‡»3awØ*È`0ŒÚ3ƒÁ`0˜± ƒÁ`Æb0 ÆLCÝæœBKSÂf¹°PI’bYÞjÊíœð’m¹ZÉ©†d^Bɳ̧üž×nw,[^gÝ™ægÂ:–Y|5Ý—-— j§’½Ãº‡e^á÷¼¦»£¶¼Îº3ýϤ>u,!‡¬ç Y«÷)«þ7…–sQ׊i®¥my%uîRµ\}j«åµ(ó ßóÒö´*/­–—Lç3q…ŽUrÀT¸vÂuÊ„e‹KKW‹ŽI­°*?U¬å¥íËÜ¡åe*U»2¯nwì‚G§žu,7cÊC[Ö7ØU-/y×*ÓòÒ*âk¹üM—%éEußs1«–jD*Ö˨Ñ/Âr ¦ù‚ù¦ö ¤.}÷¬¤nP¸kñ5(]1¦9#—€ù‹(É@L8¼“}|iä[Õz¼Cµ^…zj¹Ë?Ng™·ëPWcü¶ÌÀ–—¤;5ýE”ã3©ÿXÁR½ëU¿êí«ðÇÌ-wh¹º˜+¹‚e^‹ÓHñÝ©dˆoµFgúŸ‰+«Ú•£ì0œÂ‚E¾O©æø$ÿ:aË+ù1W¬åíXæåny™"/ª%óÚíŽÃUµøE”i ê9òB–Ñ„òr8¹äÎ[»gÞZdóÊá§-wË˹P™—°•lyiÅ^õ÷¼v»Sg_D9>ÞAÌ`0ŒÚ3ƒÁ`0˜± ƒÁ`Æb0 3ƒÁ`0n„u¬àÐÐP ŸQÚ»•û¶uܰ:ny[[Ëœ[ÎÝ©×îxVÜ÷Ѓòõ£§Ïiãw´\·nÓ8ƒÁ`0\²}ä3»[ýíÇŽÊfF|u³Ve0 F}ÃÌX;wîd¡0 Ã5˜_øsÅ}mù§ïüÏ}õá¿üÒç?ÿù™' Mù§ „¤zf1é|-„¤~>ý ùýWèÇų´’úý5㯚tgD£›è·Õ¤k5«Æ‹›äÏwP.Ñè¶ânâ¹aòMBHb³ô«& DˆB’ÄOR/ ½·ÒCé#L7‘ŸBÄfù¹Bž¢ãÒXÈ’×ô n¥IÃakHcJ €ü ù¹âˆ±ïš,Y2BÊëW 1 ¦&GP3ý'¿HR›M²5>ƒQ}är¹‡ÿòKÿãs_]ó'Ÿ_qßCÌX’™íÌ¥L4Pæ‹;(Ó¢yÒ”g‰« w4ójÊã4«ÇÉL&S¬ÅGÿß‹cˆÐD9ˆÍ–“¯Df0ñ®©U2ûšèY]FPS÷âAßH|i¸3ÍÅ2?‰Û9;y er‡º’É@p¤´¤€é¶â?Ñfc¯5ËÊËS×èqâx Óê$„$”† êÊCé i€ò4fG¦.3– ÉüqÊÓqíiÐÔiÚ4/hVšªCXN+š2õkVd`âHÍ´ú6Î_š4uÚ¬/ºÍÊM»ÔMšËsÍ8Ë3¸A”Õ)Y’/7±‘‰¶Šš¦(OåF–Lÿ¦AQ—r{ŒR2葊¨ÉÞð¶²Q´duLÍÊœInVïŒx-7¦—Mê£åk©)¯4ƒáÆšÉû±üÆÄ/fÀºõÜoÅmù °%…^érºCZœBÚêZ Ý)tKSÒ°~‚_¿¹Ðèò†SèüÄÄñzÅÜB¯ñ¹âVП’z ñ8jó ¶QGt•"߀ ‚!¤ãè‹£~AOIú›ºF £3CH‡Œ#JBo ½ô¬º© qôeŒ#D†GŸCjõ…B’Ρ_ãˆÒãè†)ôêt§Ð øG“Å«w™X!ÁpY@ü‚Jû±‹n’AP’§6ˆmqô‰öè·õ‡N¡;‚aéÍ¡Vùérj­4¦Z;èYÔT’˜ü‚‰1C)øƒ$ ÄK#%] „ b›.ð<Û‰1-žtÉW¥©GF¹ùõ–0o1\¶ Ú†¥¨¥šeÔH ÿªøf4EÁ‚½*fðÖÈVÕ3!,N– aÙ¸dT5 ]³s‰©>dNH#„d ½#èÑOöG0L2Ï"@·B~/‘ˆS­ŸBHHPƒØ, „Ÿb(äd[RèN ¬‹šöºA—¤§Ó_†ÂhBqa$BH`#nHQ*yŽÑ·‘åÃpÄ–8)Ž£7Џ¾ƒÍ/o࣠i"C¡ËqȤÅÑG­’v\ù•èüü+M§‡„@I›^QãÂ`T¬c©Ê–jw²T’䕬j­R6ñX§¼Ó]Y†È˰r±WWñ6®r ]Çdž>0ùZ›,ˆfŒj;2é¦&¿-Ôl<”GËýRfu¢ í¼ÖµJvH5¸Fuù˜=IŠ0¡¦Y²:ÍlȵÛö${Ýdó ÉÖ·š"M¬È2i¤¥ƒ²yÖrËëX ¶ º«,¬‚VûUeS›ÅFT% ¬b½òO1mF6í4²Ÿe4ÅÐWàBcXÙVfbV)%`µ5X0eMµÙˆ eÂlœmV¡qP2HYdT‚í.ZØ%ÕU‚24›ì‹ ­¬aŠ 5eà5QÌUBtÂ(ÿ¡nG3%¨µJ²láË4ýgÄ¡:¨dg›Õ@0îµ ÎÀÔ¯ôÚ¯›†ü£çï¡dEâ¸0j²iEL"qDuSômOyƒÞ6ê§å2‰;dÒÑ·A7‘ÅŒ¹sÄv"-޾8¢¢ØAÆ4}ú¦»Qj"Úº$vE±CoÞXg2Ó™¶ãÕK7ZöÒN Ò”"È4¥R#ÊÌDs®xn‹Qâ(j*Ýœ,~ú>0Ϥ-’!‰JÂ&Q”Ÿ,œúœ70Rº£l !=ˆmº¸DfÛh,(©Ré0d#ˆE0¼°QÏ›…0"¥“lÖW*ÃÔ£Ö‡îÁí¸J¡;Š8]¾ ýò Ò­â詼ôÔM0>%oš–ö{„/'ʯ–¼#á‹×€®¿o"¼Â¯›^!ï>döb°UÐ] –Éa®nB2Æ›ir¤œ8"‡ ¨å-äL¡ò"W L˜AuÑ­&‹2:ö¡ÜÍZFÉÚůr0½q‘Sd„z ™ò8Xi›½,‹žØ„ãk–6OY…•5*ÙæiJ"4T5ņɂg œ“sÀÛh6æd]dÜ“mËâ 1f”·´Q›í–ªMÏ.-“)’B<]Þ`—cŒcÜltuY¥e2φ¦jU6üa›gYB°—Í–a¨Éðc†=š¥7,’ YÙ©†2M[ÌãJ¶¤!éÆ4Ø8 IÅV'‡j ²™Î¦ý0¹jLÞÕjÊ€nS2Ê@ZVý5£™TsH™/ÓÉ^Ñf·/,£æF² 0Ñ$Û)L©¶”¸ƒxå8»ZV‡5×Z½“f“ `V!@‘@Ù®¦‰ÔÃ(õŒ5ca±8µL{jŠÒÄæ½xÐÊîo½Þ—µc*t5= Ù{/ê$m 6ÙÓÍ^Õ=#¯²M d­ÒB®"'ã Æ˜¸Ä4ñY%\·fnØV+6'TrÒC …·|SÃ.¾ƒ# AñåÄüR¾Ë¥‰f™9E­`âËĪÀªj%d‡œƒÈDÅpcyÍb3~ÉHâ#A~Ú‹ª§¡Ëú%_”?ðì»Gåt‚ºÓ+­—ˆÌgÀÓëj”æŽêb[ÃØ(å¦J¡;†õqDãèÀJ…'*%-fi1}KyGTŸãÒä è¹õD¥G9¡é KpFÐC'Ó¶hr·ÄÑG³¡”ûrQã„(rÙù#ÖíQÃô };í0•ޤíÉT QßzÕdä²ò[¨ðŠ,ˆú£{õ)>-äCÿ—öåA.± 2²H°úm5rÂQßéæQìÐéAdG„ž—ÒOm ¹ée'»u·¥Fïž8"Z(nŽB>C b +¼eä[ FÎ9zÉ0!¥$Ï™m,"ƒQI8D^ÌpWV>‘«”ã5)¨-Ô!­X!Ž@š4=\"ŸöTÙ5,˰…Žæh 'D0,%Šiº%2È'Πƒ1¬§JôKdw•ó"Ï•¯¥ ½Ë~Sßõvn7¤;ˆH„†)/‰BLyrAaùVz ‡FI((: 0µgãèÓ3hD)WQÍõrα€Ðê–í]”4D$É#$#ê6’P Ý1tê'kz&Ž|$­3ä7‡(„–,r" qšFáz…~Ðpè)9Ä¢'/@}å$*)bmô„Åríìü`Q‚`c3òO—"Œ@«4½¼²Ÿ®•ÞO¿U‚£R°‰nŸÉoäÆ4µL”²µÖ: ŒåEL‘&s¢U1,sÈ®ý¸W˜û·adå-½–ÑêN,eó¬Zj«`ãR ¤¦s F°ý¸×X¨×bãªã^h‰)ןhžRDÝ1¦©¡ü–q ²èìêX½Hšìþ´,ï¢^e³ ¦j¢’CV&PM6N* ‚ÍÆIñh2]ʆVucÕ² Zú±˜® F¬©%çM¥fÅî]µô­:w½¹ÊTºÉ°—È&glâÓ`™ Þ´EÔ2#”I JtXÖ>6mD3ιB¤š•·Ì,:Ùs¦&z—‰_ ƒ”'eSp‡šÂncÈ¥püHt~Ú{åÑ1Úi¦Í¹ª]T #4F=˜÷«Ù$Þ…}ÊvˆøCyÉ"Î$n³¡7u1Á`0c¹KÍRË·¦?%Ý5LS›)Ž]º9™ç,Ù¥¬K†µL3V„gXž«Äc—̪ð‡¦ÄîêÇÃ"œ!¿º7éyjèŠZ»Ò*C‡¦NÐVìn®/lÉUB;QªeBSÚxuY UÚIÒf·¸f©d[Öžñ,êÎe+­Ôœ”Ý.¿)HÕDx¦D_ªöÆ`¸±˜´ÌËpËœ ŠB Ùhi°:G“§T5Û‚ª ¨!é––šHɤ(õÔÝZV‰õ¬³Š4Î"²«e)C›,PÉ+¡’ê ZE›­J‹i–æM9±©~±q¤,^Ël¦ã6ÚZçÌ\mY¨nJ5ǧXYdàU"þ5u} m›3)” †[‹U~Ín»•º Vö˜&bÓöL›`e(*`“ÆÉ´ýVVÔÂꦒ}¦|KF³¬,–&~‚Z3^–Ò^<(ϧÆT÷Pó« œöBYÔQ4ÎìšUN&ót¯*Ħ!VóîÃ".,_qyc²U~¯¼nªìíƒqcµi­c¶'+¾1‹Äö¢”¥]2FS¦](•*m:Ë`¸†±fö Íá¸ì‰1éX¦ýIJŽ>s’YUIRê"¶™hC-¶k™eÜh0,ð™pfØÔÔÐT ˜eŠw+µ rþxu#‘|Ž© ¢jú“ÿ³3±Êº£©N£©mÆ]nÖ`Óqyˆe Ë;…•”š¤Ò™aJá³ûÊÃÐ*¤s­EÍ9å Í®8µÐ°…”—³ ×ZPÓX·ZÂh‰²(=.{ÔåyÊ.D¾>=L?©oŠcÉúhÊ/%þ)B•\A–i`J«‡¨lYrš0虂 ã›Eœ¡e|Õ¾Ws59¯Z*Ì®¸—€´O%ei;-@I¥¯)c9tSÍök ŒT×— ¥Á´JP•`3™/­È °)bÂ`T±¬¾=L+}µ¶•ëÅàP‘K)Æ@ÃD¦¬ë5(ÁŠJ@˜æ2“ÑÌ*+¹EI™–d•1L.5Þ1ÐC3yìÔ¹U™  ÇbÈFQ•]L6@5+ š»D-H¯8Þ`é„“‡Ì*y”ˆp¹È§A·S:n08‹”–¹ -´ÃÖfÖ;Å*DüS=Ù”ÒÑ4Ê`TÏ*ÈkGS¡Á|gôÓ@Ý®d¾¡Y•¢Ðìô⑟I-C¥š”`3M-Ë«z¿LY M]@þ*%Æ]31UÊ4µL l"×a{¶-Vú D;…¯Î.›°¥Q>M>ÓdxTLpšcmhÍ”é8÷ÿ³÷ö±‘eç™ßO­?¦Z vY– mË´¹–f¹„(†wœ5T h·`ˆ f¹âš*/ºƒj…=6Ý&ºÍÝ!1H7º°e1K CíÁŠKÊÉ:Ì —CƒhäË€LÙi”ÇBEân£¯dGþP&<¼o{ιœ•ÔšÐ÷`0`«nÝ{îåyÏó¾Ïû‚œ»<ù>ÞjnðÂ˳Ù~Ö¡p‘™»8Œö$«úJÈðÖ)OÝ+A¹‹]³'¹›v£Á#æ‚§ œÄ(Ä2ŠI(è“øõ¯RèRÉÝ4©»S È2xÉÀX33™_¢üÊ<_¢ì¹næwU'yì˜Sâ½-ÔgÑoÃ=Y(rŸóÅŠQŒ×9b#®”#„K­9W®6vŽUnrŠ&wSˆu­cºc8«aïôÆ`šWvõĪ"ÆDƒXì!ÛÆ‹!QŸy­ÙÞµxkº]š·L{œŽ0?öjf1I^ºÏ{[0iIÔ:‹ƒÉ1éårs¢H¦!»ÛHò9XŽÝÚ) £"\ãõ‹XäfÛ‚:Q öl¡Â/Λº­¼nWMX…òÒ±ZH|áN<[¢Hò¸Ë^ÁI‹£+êã.…A9'¾÷å £Þ’±maKS(3±Ù†/=í¥P²$ÜĬ¶â¤†(&óÎ0Ë@ñ©^ãš·iÈRu˜‘€Næ'ó5D’ìf+¾ÿ(Ö‡bë»3bE:–bÜß$p}Lò=qõ„Âå8ŒdaÅËÓ"Šƒ îÇ­°t‘Ç«öf#•»=QRðŒ—ò2Ka5È{1¤D=‰øüúYÇhÓq4]æU†m¢nÈ.ÁÁõE$h¬S 1ÅŠ$T)Œ¶R…ŒžÐU+|,ÝnwÎ]¦pVÉŠðÆd/ЏUŒ×?b yÕ/¨ä•¬¢K§*ãE².aüÈ9šÇšƒ_/˜#‘§ ¢D|#I»Á)›¤òàKDGé)bâ’ç‰'ûäA¯0¶%¹HQqŠ€ÇQbÍJw÷æ!Z_9]ñ6ܤ‡~`1եĕ; èãD)Þy Õ˜IÕiêy9UL_¶Ñír‹ÖÜD}´K»ð[§sľCŽCXxsµ*¼¡×¯…ï:>¡[£¼½ÙŽQa‹QŒ×4b½Ñûµc¯®µµeNð|nõöö„R›ªãUßÒÏúm•v›j•¶~¥9\àš¼É¹nfí5¶«´gY¡•®¥öôâEž3_syœÛiUißáÂ*WIíÒe_ç¦Xº$µRou²OdëÞ`²J[Žéé…hµÚ¨ÒÖ÷\à†®È½ÞôÄN,á÷œeYÚò€wmÝõó7fÙhSÝgTŽì©ýÉéù§uÍÕ,©»<æao«Þ³Èr•v•¶ ïÓ·•²p­•DŸÚHïã¨{ &÷\于ߦ:B ’®¹‡Ò4ê´©¦'Y7K{;'”€:ôÆ%ö̲¡3Og¾4B«KÙªôidŸA=!mª‹\׽˞UI÷}„–ŽÜ`Òn® ¦Lêt.“ZºMél«¯ÓÈ©cQ¨‡y»]"®»qŸ¡°rî¹ÅZš2uo‹ØÅB¶¡8äžâ#Pþ|±Ý°ZððPè¶%ÍŸB÷š¢ÜöꜬn¢2V7ò\²’°—˯@‰B=¢êûÞ$8äº$PEò¹1¤è={I˜eöTåd/‰æf]qçP:+ÆÑ?}q(¢W1^ó¬`ñäEƒV–§p’£349)ù¸‘¸•&â–!Q¦MJz¿J8ªŠ¥|Ö söHè€ÛÔ¬d¢ëaOŧ0vÏjl«n4ËFZÂI¬Æã’îT‰QÝ˽#zÝ…)i=,±J›[7ÚgJY›e#­î$éõ¢²b•ö>ƒéfbÃ}æU»Ò1¸áy–U§|˜¨ ¤Ï6¨Û+i½³åNZƒÉ}FÓŠà ÕJõE &U‹JÏŠôG÷­ÐI^Oç¶e'l%ºt~Ji¡®•Îáà65¤¾ÔŠ¬Ù‚_bGK_,Ù#íü³Åø¼~¬Â%+Š–ÜnÜUf_âÝ&Äî%r4} ä’¬³{b¦ˆ®¶…«‰nœóŒ C»°éÕÛ¤GýÝC†´K¥ó+ð9÷qi½ª\H6‰šxÊî^æ3š^‹Öi¢Žša;³a»ÐåÒí ˆæŠ êXž—´Ç& õ£ÒõäŠà¼àÉÌó4¼f>WN>œ ïy.ÚŠ‹ñze!Çu´ˆ[ÞJçšz,ß4Äͨ„BéÙp{Fÿ¢®¡„A°ú默E=¡â‘Wñtí¼S4pz•’œ¦ÏkÏ7eÆ]dÝ,«;QzѫƄBÃÊýü[¨ôݬÄÔâ#myÙ÷àõ„ÍËy†“AP$¯m\ÿ½òf´ëŠž›+’cºú£¯SÄ*Æ)Ã+¡»âžpZRžÉá{Òè󽾇¯§@è|x=@§4$¹‘2&·JLr—üögWÚƒÀ•#¬~Ð o!Ñ¥¥xB19ÚSÄãýçÞ¦€hØ…˜|”OþJ±N°ê½’M‡îE {špÆw-êNâÝâ;\H$¢xÎ+­…$ ¥ÁbãuXÅî)ögŒK ©zîBìV¶½VÓ¨M_L5<ʰ÷{HÝI X3•H²VÑ<˜},Q™d¾<÷Û$Ê7Ái¹Åw©ï’€Né N^JÓW;ô¸MÃŽï¨0„GĈ™){`4Éú"šÖ¸v ø ìÞ.ÊÍf(§H7Йu0‘KpQÅ(Æk±"ÝÅðVûÙöòž€“—?ô‚Š—­ Ó}¶††Ç÷ÖVÞ‘U@ÈÆÈPh# k$AÈIòÈÓa§T…~"¡íˆg‘K&§°ðÝP=¬#VK¬w*\sÃ&3_8ÌÑ…ÅE¥%qCNfh1ìEÜZ‚¡¹šŸ‚öBx(oöÖ1Í‘„€ßóî"'$£¯IÄŠŠáU)bevrÄâˆIõà& ¢¬Öí&j¼EܳˊŠ?¹çi :¯˜ŸÇ\jŸÝÍ~õ%Öë§lª-#%‹jQ¡w¢ªµ !Öq£ ‡A¨äw|»'w+@ L¸D]H¢0%¦¿•û]+N/!œE·x—!`õ²Ön?\V`0‰*oVð”§ðÑ|.ýídÐPœx%d:x®¸Y—¿èšÛëdI‰ éú‘ÖNOûÎu<Š^iŒqGX1 %ï¼E?Lzgèzd„+rPü'´œ÷Bi˜}ùFFjr1Ÿhß?Ì­yA+¼wn|õÒhy~›A£n†ØâñO!…†R.ÀŠš¹¸ÜCØA6;“ñnP1Šñzds0þ£» [Jƒ-g’_Þ¨æÄ–€ÜfÌÂ7aç¯'÷0>’ =–ãS8{™E6K6ëMW ,Ê×ͦf•Ú“À˜1ši$t[;íŸî¹…Ð$lëv¿1°å…\Ç)¼°"³p'q*ë/qlºˆ+rÇ¢ ¿ä¸Aæé]Å.¹´ÅxM1V¨âA+VEÈ/OW;ïoþTim¼Ò”—ç ãežD¨ jJuDËZ±0 EUœž°¶”T!L1õ$êFåâÙ9Â‹Š²H¼|4bT?0&‹Oc³#‡+Ÿ¸4 ŠyX- Ä ½"cF—IèŒn€òó{I^á*ª R4nãu‹XÅvéÔÜ`ÔÁ6â6íf « y𮑠‡*R¥ÈÚ”S¥Œ’Ðb1ÐÁ#/yDÓ 9^g²ÃÛex˜E6¸ñÉ㪸•¥ÅG HNÚÓ¿º0³zŠ3™—û C¸„¼:b¤Ü}FèãÍCX{7»Fhn¨‹–îbd ?¦cÉçÐc³È ãuÆX¯ºL?²‰AB™,…ýÑæÙ½Yõ¸[¹ ÜFWO#$ŠÄfº²À OÃËåøç“C í¾âÊ^ÖÑ]IÃPÊdQÅÓºµpèF¯i†ÁÄ‹µdê|é­ìny2l?º¼óde¢N‰½ÃãýfÌäýb6•äëðêrd#uEq1^·ˆ•#0Z ª)QúƒËMw]'\¬3Óëå¾¼Õ6–—‹pÞBÝ[â.x™Ìš²ïBÈ7D“ÄRÊI@L?}ŽÛW†Œí¨ŒS¬u:Éxõ¾( Ãjëα•‰Ì€G’ óº1ËæÌD9]\q÷ ë©J‚‡!ÒÃm¯ö˜AÞc“cABNq±Åx­1á6íQ~(³üþüx¦½9€ G äm»IÅP)–ˆ‹4{FË6yÊÑÚLHöËZ]0ª“˜G柰 ÷=†/3ÂçYŒˆYìW¾V…Ú‚d#§¶úÆcsH‡ñ¤m\\ÍFÿ³@ ’ _ê ü'XIüo6ŠþĤ'f@Þ¤@WÅøî‰XIl»]Œ0éR“C[‡hÅ;ÊtȨۅÏož@ÜÈ­`y%}wuöVº`ןl:rLèýd]ŽxOr*1¢Ô‰€zN˜Õt+žŠcLL( fæ’¨-ùÞ•!SÜCW§oÂT[ˆ£b(Q Êæ†-t±-ÎÉû­#Û{ÂÝ”lQ¥Åx #V¬ï§HrJ ·ÕßZ€cª?DsSÞê¬ã^Tˆ¬ÂäD¸»È¹bðÑØÒ¹ty*Åd|!v›–—x·×¢Â5wB‚ ñ†0¢½º1x”ä]…g…’Ôí{̳áJWÓ+ð¬ÂÛ©D©wn<ö¶DQ厨ŒH´³*e”‹³}Çž/±¦·bãµË FVŸâAôò?yõ|¥’Ç|ë3u”;\0ÃÆ ÙrØ`CŽ¢Z¼,\äæ0âŠÿºxÑ«Òå(Wù­caO•R‘y¤óD›œÒB³K¼*c˜<|Õ6ä˜1拦ê(i"*Ó´ô*¯÷9ÚQ­ z5Q/‹›¯RŒb¼N+öVŒÈŽ>ÔYð"D°ÍdîuT¸œ}w|ÝÉcô) Q“ Dä-¦‰Iä…¹Ù‡$ ›ŽcY£ 0¬¢å$ÓzÓ¥÷Üá‚› Œ‘3«ªKê³oqäõð¹—_õ°lxÕ¤#¥¹+~@5<™—IÀÎîBZ¯yH4 ”“â}c°ééM¬Õ5]'î"%SŒ×:+øÍ/Ü`¸J‚.ÔÈ̸¾N¥=‰Šô¼šãQ¯×*Hå™ÁGÃ2«ÿ‚ºKa„ú™§8tø;‰èIž*,SGX Êa®Gá]`bÓSÌD\,•½G‰çãÕGΧ/F1¾ó+K^¢Ì»ðS*QóhJæ ÓEôj½»Mã¸|OŒÃó%q¿.ªÉäºyM9árfPc0=šž óT¡-yé8 E¯¼‹Wž"H£årܽTmè=‚G]Év,xdKB‰ú¼Ü»ÓÞ—¸©æ g9£TË"†JÁ½™6t‡ÜÎX¶9 å‹QŒ×!+Hð_5z¹¶ yqž€zÌÙ6×PÊ[ ÃÀ¶ËxnIQí¸ he(*­{¡ÅýÁ Qo_¯™:f‘œ™/“+“D¶¼£Ã™ì}DYP|Û—¨_%§ a³ÑŠ¿÷d¿O+ îäà;OT"q]ó0ß){ ÏîÄÓž|FØ)‘ó £¯aV0¿¸x"£"Ox4‰ñ¸NqÂÍp"<5¹ŽéIfM =Ž ´*<©xò«¥õ˜ân¨Ëó ©ó¯f"•Dóxž¼§óäE»™vbÀ1¢öÃh‰²# †ùUrZ¿ó„tɺ`“·IzÕm„wü<ƒ•°p›£–YŒb¼&YÁ¼¢E1‰9œu²ù«èšH°vG°Á7ßÃKÑFJ‹Em¾!¦PçØÂ Gtq†È´Ÿ“åÂ%aŽ‘Œ×QѦ¼óŒ*ÊG/ÍU öÖt¯ åy=»UÁèÖÕ¼XcÙ%¡ÍXN<Ji„zÃODUþ²ÉÏÄqÇö7a9Ï1è™äÝ£SK Å(ÆCŽX§1¯ ³Çœ?à8†TºýÌ¡§?ËêDœ ݆›h%ŸÐïËÏYEº‘¢ÂH!;.ð@I¼~£mÄÒÑÄô>’œMÿ ¦É§œÜUÛ•f÷xöÚ¤äBEÄPËØ=U¯Š&÷Ü¿8÷¾‹ÝSFÛÑr„ 8%Yš·ËñtólÏŠÕ¡¯YV0”s%VÝ-²Õ¥¥˜Ck$Åäe<6¶kÜÊÁÙ­Ùá‰PM'GD.Aí°a@©0~„*aèÊi,MBQ%›½fZÃDÌ|Éq)Ì3â"LZv*¸N†ÑDeØÚ†XQáù@)£uìp55²ÉIâ÷rž±@°Óz¬ØN"ƒž ºÏ±¿…bã;…±È÷Hò¥bÙô`žÊ*9Õ¨\z’åÄA@èD4%S<¶HÙúÙ|äÈÏg,€Ãª›‡«¢®Œ^í'ÌaW0JVN‡¬?«Y¹,¢@-€/INkTÍ’Õv t("N7z¡ÔÀì²úè¡VÎ$¦gƒ=VD‰ÊÛ}ÆÌ3G°³iaÀiÒ9Å(ÆCÆXYøSòÚňêñDÿz ØwùmÏ÷/TRÖ†Ÿ<¹ÛxîÃQcŽXR.ÉÙ•ãúwxËV–öí3³qÞÌ" ;yºÖèãníc‹o’ŸÚJ²(!Ó~¤Ã†Þó±Ä`4ÉÄzG [@…ǃ°n”ÊÆ¡$æbC¾ A26šèŽ´vEgÕÛ;xƒG1Šñ1V¬Æ€»1/bUö/?J Lc<á†ÐåÏÖ,*í¼ïž|ï.„€8æ©‘ä?B:ƒ›üñ4ÜþÙÈFô¶ÛUÓÂ÷ê”Ѷ-²b»/ìP88ªÊH¬sËÝÖxO©g2๦æ^Iޣ߹¬ 9¦«ÔÁØRëSŸíoس³Ê·ÊôÉè±6d‚ý~o5ô˜1ÙÀÌ¢5Ì =‘Ž˜þzž`R ¢Äú0„',øJ"ž¨áƒC¨qìD8bŒ˜ˆK´±Ú lQ­,“gÌá¼pÄ;ƒ–'¤MÚûE²@j$£èêíZ1Õ­ä¹rYö³à²A+s&³‹%¢1b½1xCInƒÉ}F‡»¤Ÿ÷ußæüðˆÆ*ÍFƒú­Y6Y¸¶Ïà- Áäï™eÃU u³CšÒn4¨ï3ª×ÛT³³Zò Hzwô: \Fh-r}ŸA`ŸA-:û jeÑ1¸6Ëj•vPçHölPw@áò>£UÚ5¶—˜¯Ò¶c³l4˜\dJvé%HFhéLÒÐÒ,í3ªSJ¿B?'mªšœ6U›‹” &Gh¥(dCß2B+½p[sK)(\Îáå£sp×}]ZƒI}µû~; ½a„Vm-ýú”ÞÖ¦Zc[sâF){ƒÎÖ~hSÕC²Ïà,ú•¾˜fM_½MM'œ~ÖÎ0G™¾´Ï¨=-é_«~HÒ›[ÒlÛqöMXKçÖ¡B¶6Bk›Z‡Šf@Ó¾Èr›jÇUÚÃÌÐìR®Ó˜e£ÎÍšîãTŒb<„‘Ãn´S䵸?Ê#OêÍ^ôÊ3^}Þ-ŸXÎ-”褀Ü3‰ÇÌ%Qy$KÝx*v.?[_q‡ Nñ ¯Ã7ªOáɹ} IDAT×&+³»¤öÒ7 ¦¬ruŸA-‚unZL½¼S•¶Öè40œ|‹hZ‰ÒEaÏnG›éÒÖòn\•v…N¢U]'åk¤a…ŸY6fYU¼ñâ\zò{é·”,ˆ‚adŶYVu¶ãly¹8[”«´ÕŒMÀ eRá6 %ƒ6UM‹NÆ¢”¶©Í²¡óÑñƒ+t€u]Wº¬ÛóÜ£$¤L‡=MÔ*Wm‡‘~ääv[@ÕÙ…+~è‡4FºÑãÅèÿÆìHÃvžuêÉ™Âeý(,é&êd Чt’d†f•¶ÞÜ¡R¥½Àµ>ޏ6ÇJ™n›jƒúyž?d`œ­ ÛÛÔî0­ iS}š§D²èRÞ¦¦€·Ä<0ÎÖW¥"hã;±J9‹r,Чdƹa;z-(]ÊF[eÖ8x gI_{)'°4ˆ-4Zš…EM„Q:T,_$x”.¦%·D”®ž'˜Ø¢Ñ>£ \SKßsrÓ¨èçõõ”<Ö‹U"५íhJ/œ´Ö§ádTó ƒÌ²ºÅ¸…j‹ë‚& 9ÂR ¿.±e] Ð á!ôÑ7jJ5!*û v¨£818Ùg4%:öÒkŠpš((0¬WtzîMWí†gí' õZ¨°ÐB†õWJ¯"CB±€”¢R¢iR!K“êº ˆëÜ´cÐ6¨Ó ­Ð©ÐÑÚb|„Ö s]Ês¬Øfë"Ïé|jl¯0·Ä¼ ä0ãlÕ¹©½ŽÞ.cÛÔ.²¦¦'°J»Ád“ƒ}ÑûUŒb|ûËý¹”ÍVí儨Ò#œ LB¸¹À5Ûkk¥pW­tZ µ´©Vè’°)U=@‹QšÕIè¶¡/JƒÜž“˜róx“¿ËìYZÉ…iÏEx'4ún(™>nfx0åÜ{™«’¥(Óh'6üI€×„¥Ò¯=áªb˜B©~›b;· W²óqÈô-¥àt™)]~Ђ¨¾¢L7äà•¦O‹ß ÜX媛u¢Èɹé*tÓôfDó’›NtB¦þ’;‡úHš6Öû¨ûZv#Òdæuåõ<¨•b‘eDÐÓþx·©-p£Æ¶‚Ó-®X¤YåêÃêP¼fhγ´Äü­&3À¦wxR9CÅi}¶ã6UÝî E–«´u¨ôQ/F1rÄ”tXʦÚóBÔ£ ³J^P·í¿t ~Y J«’w H F,pÍ@Uºú—²iØA;ŽÞРîD¸RZIj¥‹éI*Ie‰üˆí¸Ý•W Ê–ž4gX²¬—$,r8À®ä=Jôe)%‘œpÒ4× {-²ûŒÖi4˜´Pš}[ïiLWó½4tD‚nxMNöO›Ì: ]ˆ[O²¼V6’†­³ØúϬ ¨7ëfÙÉkrœDh)»¹nÞpNf4 ié•ÒÝÀ Ý#m;¬@¥˜4ÇŠ¢E›ê*WËtÕx(;(HërT|ÚdBqè†Ó¢5ÛÔ*t¶©Õ¹Y¥½Ë˜žœCXgJ]Y*—xvŸÑ&3+Ì)Â-²¼À5á°6ÕÀ¤­Åx˜YÁEÕIšûñ©_‰­ÄY˜ӺŨpŒÅ÷Si<(9±ºšeUä+¢¤ë£AŸäÓéÞŽ»” mw)ÏÐTýIp¶CEµ«mjḴ;Àa…ÎOް7Åzí1vghŒcWQªLwœ- íý|NwäWæX9`x€C`‘e=NƼpFÅ(ÆCË :ÿ™Ú~§JEb0{í%—RKNî„i–föl®/'{…aRná¨áƒtïaŽ‹©>‚>«]¶ÈZæÄÁ«ÓøÈÿ¼ú[_›µ•Ñ)™œ”ÐL¦ÅxáÆƒ”ôØ[ÄÝj™! …•p:Tµ…Rدæ"«rÙnñCyB}\¤ Õó5“îÒïͽì¿•í&n¹¨Ô1}ÊŽé&èôƒÊ3n@²¸¨ï5|즋c£ö2»[nR8`X¥,d—òEÖV™eCì¾-Æ;TfÙB5§†•¾SôR•®Æö.cGô2СrDÿ+ú–ó|Zð«BgŒÝó|z‚Meÿô-.6­±}…[[ŒWèÓgiÒõmj‰±T,»Åx¸ËÒD¸I¸ƒæGC~‡Z ÜÈæyJÎÛ2H'e-7ì°Wç¦÷ç=ÇÊ"Ë34ÝO21PåæÄ´¾hÍrP‡°žh)tÀYÉ"+”¸¶Êl¶bT ®«$à•’ï'³´6 ·¹;$gJö(ÚÆ<”R œ“tËcƒV81Äé2M,"¢²ùO‰‹£ÎÉÐ/bKÉÀ=ÝUf ÿ¾œþ-›º’[$44.hí*ímjJ ZÍi›ZíE–ÅèÓo+t8Ôц9¨Ð)Óª^an˜ƒ®5™ÑÀ%žíPQê˜b½ÉÌãgxP¦«™¬±½Àó|z‘åœéRVlëPKPÌÊꇆ5ÃÙÒbã¡×±H«ýÖºßrw‚ÝkÔ+Š<ªQÊÍù¸jr¶Ø%Ù€ÔòºDž¬bäRôÏ}F/òœVGyïdëjÚ34õâÇÛqŒ4h ±bªV‘Ê”ÆI›“JF¶(Ò¥œVt6²ä‹ÄIåYNÌ -÷Éq+|º´BS²:J:‰Óh—@²ÂœÍ¡‘õC¡ Î:¹GÕZîäXÌÐi§4™^Öªe)^ts}&XÕÊÑ‚I²Åª^B6yò`¿ZÕJç&Þc›)¯ ]·¸2Áf“™®2°Ãi€§ãžèP™¡ÙÏÑ,i!““;œOw6­®Ý笷¹ÜdFYp;TÎói}vœ-7#ªä-®ˆt:ź(¯ Wi»»b[Œog¼aèg/]ø'ÿüÏ¿ü௒û¿õ?¶?ú}iq"ªrëî©“Øû‘FWÚ“¦‘f4­ô :Ó•8…–’Rm"RÛæíCY fš`¶e~DtaÄ"×M®´CE w›ê Í: ã¬Ärzãl]dM$xuÕ(šf¯{ƒƒ·z‰Aï)rÎ-C@uÈ-KKÁ]å£ jS¶õŽìe>+tÒ©&mp>¹pë(HÙFnÅ¥äîK²¿-¹x:{nIJ³²Ÿ¼_%¤éU²Îf5½wuÍ|ícw©6Õ5¦Ÿæ©EÌv¨ sPç¦(JåGô×iñΧyJ¡n€Ã³ÜŸgiŽ•‹¬Ýaú˜>Ãß"\èWôØ7{34õž6UË2P¦k_ªw¨Œ³uLŸ2–º:N:7 mÜb|ã•W^™þøÚ÷–Î~åå?í´"Ë–'záa”Š‚ŒG=tÁéa墄 Í&3±âsÉ–T±«Ó@R÷‚–ËÞvBãÉj6bE¸\Z®)¬¯8ÿT½‘]‘{çl “B Sç™IÜKV´³e7Àš½Ÿ˜¡p»¬Ö1;¦Å6Û°³349yËP¥ñ¯nï±g;ýÆ^rçÁAcvuƒAý)óÌ[èÒÞÂX3!«ÛNÉÍ…º|]£ÐÏwosY¡h‡'è×+S¬Ñ2Ý>ŽW˜óB`“™ÛŠ"ƒ´v8À°u ÌY´ó±NlŽ•cúú8V…L´ ©`˜žý×vxr—±2]ÿ€a½Ó¢Z‘,ÆCŽXýè/nÿãž‹!ŠÙ<5IØã»HËÙŒ³Èu-Ÿœ®´Èu—׷Ϩ`“³ºöšŒÂœWûRX,eƒÖ !Õ‰Ðù‡ÒºŒ èr\ðí<PºYG[å is’x×à\i"ƒ}.ÎsÏÜÍÙ8ä?ö) ó ™Xå¡®;\Xa.Žw˜ÞbÜâ½ym(+°¢È¤×û8ÖÇÇÙ:Ëý#úL~B£K¹CE1LÁ£ÉŒ é ·`ZanŽñ&}ж_F‘¯sS7QKÝîU®Š(¯©3ÔöKHm>Ògf²HÉã[ŽXqv»¸ËN[~¯¸bRu|튠\áz‰‘ò¼'9éOjYH—Ë=ËÚ©z”…eú;ÏäýEnÆ!HM#Ë+óºz[jätI)›q/+äºÅ—¬Ó+uíj‰ Æ`ú½«ö-!í>åhŒ¦Â^­Þ#Z£Â†¸…Ùp5iŽM¦ÉäÆª”ß{8]/㎛#—(…nùÐM¢f'pÏiåöâ™÷6Ã"'%Þ‹¬¥¼žœ•ŒÓŒAªì7ÇJ“uMGzHÊé5˜œg©K¹ã&3YSi…¹u¦$T1Á¦"J—r?GMf¶©M±>Àa“™ †×˜¡5Ζ™.sÛþr«´·¯±}È€§ÛÔú8n09ÇÊ*³¦tU§¡M i«õó³l¨éXõ˜>¼*g Ü0F~®Šñí(»½ätøã¶1Êh€ ó‘[=‘¤ì2§WêZôÉȤ–LÅ@,m‡‡]J½¯º½,¤ÂmªFãtÕWõâ"×êZiŸÁlŠlÕÕ/6\’ma6O÷e‡k3ª¹â¨…ð>£ &ÄœžŒ‰`¸KY'eÿŽéân—òÃgø ±lú9*ӭЋý,÷gh*v*r¨Uiϳԡ²Âœ²©zÞ„¶w;`øí¼¬sVÍìwøªYVqÜb|ž%ÓÌÔÛjlë=»ŒIÒÉ5¤.âV1Ær {²µÞZ°xÉò}é‘•¶rùf¥ €Ÿ˜‘„! ›v·×Çè×Z•º«Þ %ÉŽï¶!›Šyêø¾w‡ ¢/ÊQ>Jžè©xÒ`*åвV!ýÿ"ÏžsDðN¬Oœ¦¥’%ô,+ÄJäÐä-Ì:Ä &b”UL¨´çø@&ÙLu’fäZ’‹2Î]S‚ÄQÖ(¹ªBFswCò, ÜXdÙЃ£\µ±ÊU݈6U[¬¨ÓPcWèY½joæ`•«mª[Œ+wgyާxúÏ6˜æÀô–êÜ´˜t›Ë–oæ`„ÖyžW<ú9:¢¿Ky„V™î M½ÓäíLÖØVŸŸåŸ—˜Yc‡óŠŽú”š—uÕêÊ2ª}•¶p›@¤"t™®…áÔg°PÅ-ÆÃŠX!Ø*3¥¬ä]‘˜Î ÇÜgåÝ A•ƒNF I8ÌéÛ]jL 53]7Ó,}Víl¦‘}FW˜S«Ö¦­^µÈu™k¸ºˆŽœÒžãz…(!Öþl-Jii­åÀn˜^J)Îa@¯±ÌzrµÇ·†$§ØÈ~¥:7Ó&¶=gª{Š©D“O r¾.qÒ§£ìSšéM4¨Û½S O,u8™ÔV›j›â#Ti¯3%%‘mj³¬v)p¸Ë˜HtZÓ·©³uÀp†õ;w¸ Ý—yûWyLAdz í¸ÒDªK²ªšcåÄÚÐ9|˜ß.Óý” Ö×–˜ßá …–E–'Ø6šcEiäu¦*t¶·-Q‡Š¾q€C“Íœb]Ÿg«ÁäYî+a( q·Bg•«Îž¸` ãáeÓ*½ÈÚªºÕ$æ_ŒÌŽÞ6ÅNÑhÔÊûNk¬Þrµ…<o7né«T¹t GR/QQ*Í_íYÓŠ£•7ÕÍÐ% r)KfR{Žb/5¶M‰* *'¾ˆ.›€´Úõ§ŸeÕ‘å=áû™)!)—H/õjÜtWCç`Õ#G—6 ×¥ 15"è¥ÇUŸsu›³%Á§E_R5$«)VèL±¾Èr“™*í)Ö¸vL_‡Ê -1#TÐÚb|˜ƒ;\0:x—òYîï2vLß.cBQºq:²AØY6$š^ç¦æó÷Ô uD¿ÊTOð<°É„Ž¿Èò}Îî2–æ]¯m2Q¡Ó ~‘5ƒPÂpKÌ[k×¦ÆæXÙ¦fÏö㇠ŒÐ:¢_g(;.}©¨í¦KR¨ ãab,çïÜ}%ü{N<Œå‰8<’*Œè%kCzPII 1sÖpDÇmLCš‹Øz\"˜´yÉåè>šÆD*Ûj·R²ªnÊkÔÍ’9b}=8hJðv²®°½³¾TlæÔ®)£÷o”?½ž’ÝKÆ÷Ùg´Æv`ºhäˆ$E<.ÃEÈ£À§ø ëPœ}\KŽW“«&^2¿MûÙv³lÈÜ9RÆÑO”첄^ƒº~ѱKY*Ò“jÑd¸Å¸‚A†´TøîìP9Ãn qwŒ]å»”E2–˜WòP£Æö*WÅïØdB€©Ky©ghŠpxŽ{âYœãž¾Åˆ<ÀO¨êVcûWô†y–&Ø\gjŠõ-ÆEåXaNzírqÔµWiÛös4ÎV‡Ê¯½ùF“¯ÎWd‹ñp"–+CVkÙIøôb•'wímN±É,yýn¦Ë|iÅñ¹N;eûx–IUr…ïLoÉHvSŒYn¯8Ðêd.;G©1™J¯›òÊ*µ’éÏm95§.>=MñA·íÁâ™ÞìÖ±Œtjφ}¶œJiEí„gá¦(é1J®…·ñ'dš3TærbE/7*7™1§1 K¾9”„e‡$š'¸sÀp“(Ôf;ËÆ×V¹zÈ€X Oñ´D㣃·©Ñ¿Mí%Þmõ0Qù6™Xeö6—èïã¸cÅ'É ®3µÂœ"Ó0lªR¥6,‹|:="Þe¨CE:¶zÛ Í6ÕnŒ±;ÏÒ8[ª’^áV›:ÈÎ4¨ “éb—˜Ÿeui‘Qïp¡MÕ ×+÷9«^ã7ü]"?6UkŸ(¼²Šñp"VÖv=“}ÊZ'xN†!Qð‘Ö¿Òô¥”]Wë¨ìÛ•õJ÷=§Râª<$®°'Zá4!¹ @=Éó$VN²M¾¤Ûö @4>BjË;¨œ[‡Š%]7¥r­}µH9¥¸“ƒ¯2»Æ´Ø ):±3êJõ㓦·Irœ“,Þ%Rr¥Éô“)»0éêEÍÐTV(JÑbkZ©ä%?CU}´GéçsBZ/óvM©‰m2±ÊÕ ½Ò¥,ÈÕ¡¢ðÖÇñYî¯0§^«q¶¤o²Ï ’~ýÝã\™®«hÞÓ#´>Äï(¢ôsü¿ié“.eåŠïsV‰÷_ævmm°DVÔ}ÉâWÎóé“Ó¬éùQ U…L¡QYÇô­rU.ŠšŽÙt1Šñ0²‚¦†àÆ0cd9}*&À >ÊIꈋŠ.Ö ¤¸e¾!âÎ¥ÌÀÁ”7‘8n¿= W7ظt8‡Ø™ÑqßÁPŽE ÜsÜK®u½Ò‰:¥´Õ7s½Y‰Ý°* ¢ÅT\D:7§YK5nØ÷Úl›< ´¥pÛô4mUíw]BÔaæjÞ+VÙÓ>ËÆ¦S&¤±OÓ•Ý PmêÜ0š`Ó÷”f´bÏK¼_òGô ¥ ÁÌÐ<|iS]àZí aúùÜ0ÇôÑ/za•¶Ú¤Ô™{žO±{Ÿ³+ÌÕ¹©sâ­²_¢<ÇÊÇxF)»y–*tþ€Ÿyœ4KJ9ÖØ¾Èš¼®pëçtæS¬ÓwŸ³Š7b^áÖK¼‘åÏðU®p¨ÎeM è‚]Ê"èÛëŠÜ5¶ÓžôB·!b%ÁÊ访™>Ê@(Ì=‚íä'Ž}â¼Ò“r0bžËÉ–°«9k«³“9ìY,¦jë'\pSF7Åñ4 «¢d.ÃFúH ã{q×)e¹¶#˜†…m–omXÊ"Z õ–§_Û½ñ%~" ™×\Å#—çî–ÈšZE½ËF¡uÀ°]BÚ¬}­B'Ugo¹Zïjxšbý"kvKÌ»"ƪXbþ"kf*¿È²Ü{7™¶r„|%AÚƒÕÇñen«£Nå¥M&¶©)¨£~ˆß‘¢D?G‚kÛÔ.s[,>cy¬3uLŸtÖ+t6™H®ÂÏx)£¯LWéÍ-ÆuäE–%NX¦;ËF“™kl‹òì2Ö¥,‡š…;Tjl?Î eºà3uàPS³â«NukOñtm¡FåÀ•ò :gŠQŒo1bešT¬ ÆVI×âÏÉøG‹ É#´\ÌjëÇ*~ÄIjÞ8èXèº%µÀ˜´*NÚÙê• JÂLv_t´•´Šd ®NÆ3:aQ6DÛ»Íe… 1 €q¶¤æ7ÌÁ‡F5Vú s»ŒM±®&_eÇÙwQȯceüDeÜel…¹>Ž'ØcWœFe>¥ß¡ ­,®æ„”m¯¹šcåÓÓ¬Ùù˜Ê³õ•ŒÁb<„¬ ÇéJDÄ¡J² ªäå bÇò(9‚x‰ÑÍ]zKÊLk™]“M¸õ´ê/<­èôD4lÙMëX' ·[вÑ îȺŸ|µ>­5Îi»åÌÄñ]4ÛLòSg’í MGù–íoÄGxðõkÔú´²šx]hYcL·_ÍH†ƒ¢rHtJÕþ´sBîŸeCì8k塵Ãâ(„2°Å¸¢»ø~ÇôUi2 µ=Å£³§‡^vK …WÝ܉ˆ£i\9‘0ðôÚà=·´&Êb¶Îçõ]û Ñß`R̽.eùZwÒÕI0IRiIÅàE®Ó×dæ)ž^`ñ"kòfœ`Sq‚Íq¶×Õ@ÖDZ"ð_]b¾ÎÍsÜ[dy—1Ew…Û!îJQPôW cegi˜‡ŽS(…¬Ÿ@1Šñíd“} IÙ_£AÓe’Ýü£g NÆyvÐÑS8i…’þ’§Ä]ÍEÓÐß¶6þ)Òê5º:8Æ€TâÚˆ¤µIó,ny¼D¯B©¨%¸—,H耆¨ê4ì=n`6„gIE—¶“Õú*9ô·4ÕëhVä0®ÅNãЋ—j–\‚_™®ùÛÔV™cŰéÃëLY|’ŠyÇ q·ÉÌhÂËt‡¸;ÂÞãº_¢ˆ#7À¡ •PŽTeËt¢'uM©œ£T¤èéÞá‚\]ÈD®SØPÄm2#Sž<ϧåSsŽ{}רn23C©³KbŸÁ2Ý[\Qt–˜ŸfM XBWñÕ» Ñ¿Àâ1}² 1;G\±»Ãù]ÆV¹z…[–·bŠõ» I¨Pô×&3[Œo1Þ¡ò‡¼WÔÑ@ÜnBÉ‚+F1¾}ŒU:¥MØöGî’”%»ƒbdºÙÌŸÞÝ ˜bz¶Åµ•Ö~HCÚ^Ú™Û£·­2k¡1%e$ÖÉ” ~ƒ^O‚ 4V‘&RÁ§UÏOÒOf&’Ò=ZªÌ.=³½Ü£—÷+ewN½Ð¥@5BKZ|"R &¦¥µI…ž¼¯®¥ÎMsiéçHÒ ¢HX¶ÉŒ ‚J5wšcåg”þ:`XÅ'}D á)žîRâîEžkPWAH ³z›uøŠØ`r€C5»Å¶CùˆàTÇÒP&[dYrMŠvªúGmK IDAT±½ÉÄ sJ$JTb‹qéÛêmunÞãÜEžëPéRÞeL·@:€ÜÅŒÐTÈ-å˜>¥þDÙâî‡CÜÕŠ‘¨ÝÀO¿ùù.å“ê8r5:»ªw˜.Ó]aNRiåµT§Ó)F1¾¹:–«Tʶ³ô–'ÛCl]*¸@.f5?=×NÞ)ü”LjH<`½Gu ծˤbUóY8‹\O]K^Ñ=%S4¢GZ$?I?¦‚O'”IB¤ðqÐц@-¨.÷AÚ»©j­»:ÉIºÛ#GÌ»G #ÃTt¨\ßBsú¡%¤¢|—^¥F±Ä¼5*)„Ø’-ìu‡iY=‰õP¦+3ªy–Ì\qˆ»úH‡ÊÓ*OóT™î=ÎͲz‡ ŠˆªŸ ÖÈŠ^Ò|W¸¥ˆ²Ë˜lÕ%¹#)ÏJýÈâ„øâYÜçl“™aÔÆ«ËQÖ}Îj·1ÌŠ^Êa*Ôi2ͧq‘å[\ͤÎ͆…~ÔM5Æî*WW™µºæ‡£ì]á–Ò[ŒÏмÌíM&:Tú8þ½¿»0Æî"Ë÷8W¡£~jÑO$–Ø`ò"Ï‘öŸ5¨‹®™í«+F1¾õ¬`)èÐ ë4-'…£'Tl—r1–kl0v(¡§v[Í=>‚Cä«»Áæ,±ÓòR²²–Œ©Ü*‚k ©r”Ãz/e´ZMf\Öƒ™~9ÑtÐþéˆØf6.)§ž•¦Äašœ s^2O÷Y6ê4ÄÊæ@-·šIõb+Ñ*À·À Ö*_¥}žOK(V–¤¤¾-Æ¥B$5<±à q*×'†…Ü­v8¯~)¤q¶ZL©ÏduÓ-^Štnμfh¾—…·d"[aÓ§8ǽ9Vú8cWÔùY¢ð‰à°Àµ~Ž®pËÚœMüB§­²–Ä,ÀÔ¶<Æ®R|Oñ´\"%ÛqŸ³BœJ'óB…N—²D‡9¸Èšd·©Ó·MM¡zž%QB€ž\eV~(ãléæj‡J–£ß\ÄrjƒA~Æ€Wâ ­ÞÆ¿0ÊŠÕöpø~ƒ&(žuU7ÿßÄŒÇäÍáÐÊOÊWV|reÒðlS3|fZÆÖûåKiŠrÃtÙU޲Zšö¬ØàÚYµ$ë8U2’·¥gç¬ mÉ)bíYd5^YŠünH`¢Bg•YaPåúK¬Q̘ZT;Ô‰¥B‹VRkq­Ð‘”2Z ü&t¤4 ªDÃ4d`?Àá s—xv˜ƒu½ó€aUz óUikž¸q‡iå!®s³Å Jb*ž-1/Æ‡Ž¹ÉÄãg¹D¿B²ÈR¾àp„Ö.c34›Ì(T±ÛÏÑ siëŠÓJQnSSÀÛe¬L·L÷Y.©¤wŽ{Ò—à°L÷ï½ò?ýß=¯Çl€ÃK<Û¦z‰gÖôÔœ\dí2·ghZrRý^Âd[ŒéQBY)²b㛌XYO&< Qg=è]² a¨{”5]Ó&Ç·äêTk1ÌjTc뻲ìœj׎‹`IR{éBV·_RæÁèHü º ^²Ý»8ê‚Mf ¨eA•é&§ääÏR?Gš Ic¨ó÷ ¥vgw[gªJ[R5¶Môv“ ]‘.ÜÍ—0ü€3Šâ‡ L° -~ó_‹‘qLß˼xš§€;\P®²Æ¶ÚŸgÙ¸Â-Æëêk0i V!všØÂy¤ß&Æjy”-·ÃƼqüÔöá<Á·G:UmBæŽ=n’uß8™ÉÛ&“¡UÆD%Œ¨i¥£ E -…R½³†Y×§ú–5»HÆã²ôc–ëèùÇ»ÿ•â¹j`‘:­_)kÿÄÈÃ:^EN™cÅ’i‹,ϱ¢ -†ö¬9WP@(J+û,ýÉÑC°é6—=ú92Øgpˆ»#´†¸{D¿ B"û)[¨È'ÚúçY>Ïó³lÓ§ûHýï%æ•Í›cå÷¥ôE+̉î!w«aÆÙ’ðù}Î>ÅÓ"_ôs¤š¢Q—ò%žUø™b½Æöýê6“Q½*Fºje,-r+A'¤(ˆz½ÎÍ 6ÛT‡¸k‘²Ÿ#Q0¤#u‹+—xVô ø×Ðì}C7e˜ƒAZ*ȉd(P¨0Ä{îsö"k+ÌÐgK~•’„¤L7ÕY-ª Åø–ëXÞ u²#vvÍ'*ðÎâ3O2ƒGc‘­ÒãשÕwc•«ûŒ*×§Ÿ­¶¡™¬Ò^à†:´\1rãÒk™¿¡“€J™è{®K¡e#µŽ›÷U6ûçÝÁRŠ“¬‰T†‰nÏ"×í<¯ÕÓz­Œô¡*šÄ‡Dó[aN…rÎ=¦¯Á¤„'„~¦XWTÛb¼KY"~:ìenßçì4kòïèçHËý8[nI©Ky–{œ«±}—!¹XmS{/¨÷L±Þ¥¬ƒˆk>Áæ,«ãl zŠ}°Ãù>Ž/ñìyž—|ß!›LÉnQ',Ù\+E6ÇÊYî?Ë%•âÖ™ÚdbŒ]Ëy¶RÙxà×~àÆG>Ú¸Ãô8[Gô+’Ùÿ–¢<ä1}"Œèa aÙ» Uißæ²Ø0Rm×u)?àÌ¿ùOã«È{yì*}ÿBê‚R“Ò=êãxš5Õ®ú8ÑÇô p¨É_åê>ƒŠýCÜÕÕ 'YEõo q1¾­¬ cX~²nºh)í&ÉTMõnó¾ó´vÑ‚VÔ„%Uþ/©sÓ˜–)éÕ¥,=ø&3J-êb[Ì”BTü½¿»ð,—V˜ûõ¯]ߨS\b^Z·¸r–û ÿŠè"ú¯2«è%‘&3êGnS½Ç9ë s´’‹"V1¾‰ñ†¡Ÿ½táŸüó?ÿòƒ¿Jî?þÖÿøÑþ‚ 2]VÙÉn«Mùm0–|DcU³Õøé56™– føDy/sz²…3­6ÔvU]¨Ùö©^­ÑõÚÐ;é±fB´Ä)?‘Ýw™‹M¥NOüJ´|Ë?¾ÎÍU®ŠI¡ ÙáIã‘k¨È!Ǧ*m±ò„´¾Ë~~‹q-ñçÙÙá¼$€_æ_þ6¶/ÒÒ¬~XÅ¥ÈtØašÌÜâÊ]†D¿^äºØ‰* ÉžÊìçXmÝŽF*K¨j$ØklO°)Àcút²àPV¿èSs•ðÍÓÓ¬™T¼Ø}ΊqL_?GŠ‚šM¬ÅÍ•&¡Ÿ£#úÕv=BëS|ð ¼ë ã«OóÔen_á–NòçD”h0) ±Òï0­ ­¼Ÿæð)žžfM_¤Îe]ï§øà‹º§Jêê5ÕVÕS´{ì‰h𣯼òÊôÇ×¾·tö+/ÿi§}g·›n A´›Ø©Ð”²=Èò(yNN‹\ÎpçÇ‘Ô;a7ˆãî6Q¹îS*b»o0¦œÛ\¥˜õ;ò†æP<™ãª—ÄØ¡½°gš³R<ÒÿÓ®©ëVˆrEäD*‘C‡ôÂER×}‡iiß]æ¶ ‘¸y*\ÉÏ×vå* ¤´À~ŽZ jU]àÆ‡ÿ’_–êk“¥ÈêÜ´£ÅW$ õ ÕØ¾Íe­¼ê¬Òêl«­p˜–%!ÌaáJ?A Ñî;Tç¡(JpªCE½MeºªE©%KÚQ/óv‘ Õ³µÂÜý[ŒO°©¹ÎÔ»V¸Zdù)žV6U9·.eEî]ÆêÜ\KÍSXÜeì ·úùp—¡%æ8|œ”Ÿ/㘾 6Å«¼ÈÚã¼ ¶½ŽY¡3ÍšnV“™OñA!Èš ,6¨ë”fhJÏIX}Zβ¡n9Õ&Ývõbi.Æ·VÇJÌñ(Íf~wÍõtƒŠRj6t1BkÞêŸÍŠôzî0íå-CkDUÚ‹,+yhê¦VžÀ&½Ó Ãótû¾3oK£`É%w82ƒ".ÎÐTpÒ3°MMµ.A.©zÛöYë¯ë_¬KËîÛ\ÚÐ÷2`…ƒa$†$éqI•éÑ–ûʃ­2+µ!-âkL¯3%Û‘愮γ3Ζ2“BiBT©MÔseºǪÐ9ÏóCÜ•ÎÐ"ËŠgÂ1ý©à4Åúy>}‡iu Uèìð¤D˜T»Rü»Ìí!î®rU–ó ~©ðµy–¤Â.íÁ5¦»”/s[XM1õˆþy–ÄÎèPéçs ðb*³ª³ÊÕƒ 꺡:±êû8V,43e‹C fmWd‰MaG=x+Ì]áÖ+ ,JGJŒA‰`)…{›Ë ܘbJbÏkªå@Ö >À¡N,m3/VŒb|‹YÁž¹ƒ÷¹âª^6)ËRM‚ºý£¹Ü|½>’÷[›Éôm½dìëä]žËž“ßsÛé"̈Ÿ8Áç'nÊQ œ%æÕ+jž[ú­¥ìL GŽV€i‰y¦)Ö×™RÆI á2·••RÓ®Á%Ö>´Ü[FNl‚{œúÑ—s ×µ¸ K)o¦ÌÛ+yn•Y•jæX±DŸÚ˜”ದzŒÔtÚʃ)*(Ûi¹2]»R”Šf®¡ûõ7˜ìçH@s†¦¨í:²rkW¸%…R~`“™#Þs‘ç,\)|^dí6—¯pKqBzµÊp¨› %½˜ª_§ºÈ²îÂÓý©±¬Ÿ£®ípÞ²Ó›L(|ÊàXdÅsܓץfRpM!–Ïšð£ßÆú¨³Ìr(Àˆ”. JÛf'­deS$cKÙ»à, oÓš±Í€-U/²Õo·ðv‚xŒ£a¾úRU³ôµ1Y•Hûz:"&ˆ"ñ,—ôNA%‘¶„²Êw!­1v×™Y@!JØKÑTzB<.ÚÓîÞŽ# ¥k.„&d ¿ÂœüGìSB‡–Ÿìçè nsù)žÖbmì Ci’ÝS<3@Sç¦pª%6IÙ—x¶Åà9?ý~F¶ övÎFîP$¾Ès"òhÒ¶©‰¶Â²–Û¤¥ÆÞTŸpÒVñ5LÚyJ&Nzr>”x ª'‰t ž¤&3Ïr‰Ô“°Ád†rPŠ(ŠUZš›ÌŒ³%I¡]Æ®Ì+„ÚEI­Zú¬ŒtÍÕ‰TŒU?“P Â6]ÊëL­0'‚úœôÙšëLͱò‘ØøÈ5€#úEp—ôƒNø ¤Å§8ý8/,pM¯¶÷îð¤ÎÊL¤4!Rµî2ôüŒ‚bm5äªAx˜UËt@]ò*³æp?Áæ>ƒj)“ö¼ÐŒR|äS Ws¬(öTiO°)Å^qýÔ¦Y·e‚Í)Öåt¨¹JD1õu½uª]iTè4˜<ǽY6$( Üá‚85ÊH´7å]sÄMŠQŒWo<¥îât'ÎŽþD8Çi&í‘ ÝíR¶ÓâÑå»»>–’J‡(€%Ø„æ6]3Ÿredƒv¯GÊÕ.ÙKÓ'QI<Ó И‡SklK}ÇÜLJfI†Oj?šeC!AºAg¹ßDZòl’ê‘<Ä)¤*«ÐxÈ€¶ç2”àºmê»”ÕÇs›Ë*b©×xŸÁ-Æ_âÝRj0`6†ãl‰ja[û®)fÓw™ÛcìJåO4 ËÅéãæ·-¥¶Â_€ûÈ>øCüÎ8[ëLIûü>fÒæ:ZÙW¹ªooS½ÏÙ†ÏóiÙKÛP÷B˜L§Ôdæ˜>‘¥‡4ÇÊ.ckLqW0HרŽ4»åGôßãœu݉‚Aʳx/è’YÄU‘ˆ.MéÜE®/²ÜÏ‘:®ÆÙºÍå]ÆV˜3J¤ÔFžæ)q#ÕÑ5žn“æv›Ú*W7™¶{^ßþ)>¨ÆùnÔ¹iŸtËUøã[ŠXò½µb‰¥,ae–tn„ó€TVtüÑ…üN7nÉmÔUbP2íŠu ]Žs•kR ÚJNþЄq3nœ.=]pÊb’Ö5ùNí3ª,@•̱´¶`gµÊU­òÃHÄA–HÚ°×i¨kJ{kRÑ^|n•gÊtUzœYV7±ºS…ódU¡#ô[·ù´:_dí÷TýjS=Ëý}F•¢”´î—ø ‹^W¸¥&âž_C¸ç6—…›[r²Æöç¾öîßûé :áð…"É}€ÏXûm‡Ê8["VÌÐTêRRœoáÉsXSš‚Pí¼­¡À Ã_ÀÓ<õ€3çy^¹¸1vW˜S Oåº>ŽÏr_œx©¿/², |w)Îͱ"´×ÏQ—²DÿÄÂïPc·Lw—±ÇyÉüºÆØ•]¤iª·ZarŸQkö"í»°<ÄÝ·Ñ-ÓÕ=š`³ÁìS<=Ä]«ª‚ϪÁ£ßLÄJuSlùK²¤A×(«§ÖÓ¦­RvÉ.ŠX˜{¯3ÛƒñAÜŠ€ÿ’›Ð$ºzFòí°¥t®ØðÒ¡ ­â–|öRñ¤’8ëS¬ËùPÀÈrqs¬(Õ£µr– 寤fT¡3Ëê:SR€}œÏ“Ú…è‡;LO±¾ÂœT‹,S×Ï‘âÓ0S¬Ï³dÁFÔUDÔê¤eî2·Œ”E¡µÉ„ä Í#ú5]ªµ,²,±ó}»”eŸ1ÌÁ»ø‚8‡*5=ÃÇ”InS5«L÷6—ÏrßDÇUëRž¡¹Ä|?Gý)öH\J‰¸*mñ5ä=V§aª†¢­kõïP9Ë}M‘Nìˆ~q)…cŽè_eVí\gx0CóWLu^U+“óÝâ&¢Q¬3¥tŸtßL®3U¦;Ï’ËÔ·ËØyv.ñìÇx¦CÅLCT'Ó)FWz‡ Žï3‹,+Zë=W¸µÃŠÄ+Ì=Îç;TžåÒ]†”F¾—̘z³r*âÅ(ÆBVЩ‰¶´¶ÍSéÅ\I7eK_IÑiáÑO\÷^ýìÐ]úe¶¿­h&¹²O‰iº…«Ûn;—IiŒÐRY^÷Nö»i×NbŠ´‚€‚w˜Vêì"kâ§™]ï!"|‹1Ζùz¨gK ½–9)ï3(_%•LvÛeLéG#jk±›bÝD€ÆØÕû…ö6™¨ÐQ~¬L×Ê`/ñþ&3Rj2£Ö¨ 68«^磅ø/ù¾sÜSIi•«ã©N°©/ è÷9+µ$̓*=:ùu¦ÄâNÕûÕ6û;|ˆ´¿M<À>Žw{–Krß(Ó½Ìí#úÇÙúõ/]?Ã6Õ†PAnˆ»º •Ä6™h2#Jäór=Ö·Ïð± c–ï2&_1`)m †9Q õ*m}öY.}•ÇC•ïÕcpLŸÌ—ïq®LWýjÂÁЏ«ÌÊ@Ò€´w³8šöfœØp¸ÊU}…p¼#èUP0ŠñMD¬$ÛÓz¢êù[›~eºõNÌÇÝ-Þtîpuf5'.ßϯƒéo[N9Ê…¶%×kÑŒEèùjž”©$5ä”!{¸jŸQ‰þ¥À뙩‰Jñ`ž%mµjŸã^™®oÅeWùJ'1Æ®É7h– “"Úo…çÌÑJY/™2kÅÔÑÖ™‘.‘¢—¸pGôW訂Òdf›Ú»g¹/š†‘nsYŠ‚ ZÊÞæò!–%5tßá¼i#Êtï24ËÆ»’u¸ÌíCä£!·‘ •‚H»¦D™Ó"nÁ½vxRñc…9]©äÛœ!ã¸Ë©ý „©ÃI‰Ó#ú•y3PÕÏ‘œÅQüŸÑ÷ªJ_u)Ýšê–ˆDªêÜT+ôc|õ·þËzíËÜž¥!0W禬X$]({FÁ³ÜoP— ä0wR¸A]‡À±61#ì-pC¼9^ê¾[}±X(Šñ-D¬’'4NϯhÏ‹j¯º¤Ž"G_u4ë¨ô({<–²€•`BBÅÏ$ÏlÌfUí½æ˜%È+økDî÷ÝTÕ_âýªµ¨Ò£M·, Õ´dj—SùÄèøZ:8ÜeLÖMZ(e*hRè ]eºº–>ŽÝ´p+Á5À¡*1ÊŒ‰Ð±Âœ5u –é®3Uc»J{i©?Hë¡Bç ·DR—ߣ‰ê¬tÕºÔÏ$ü´À¢~¾ÈšÖS¹‡<ÅÓ»Œ-°¸Åø=Îý¿)Ð)ƒ]3oÔÄ 6™áb›šØã²<^gJrì²9ª|¼ÏÙ>ŽuzBxý¡QxNÓkŒÄ6Õ 6è—ä xÒ Ô +Äêz·^a®Nc‹ñ†çX¹ÏYá9‰'Éßëoÿ7«¦(åÜ+ÜÚáIRyx57™ÐÔÝçì*³ÛÔV˜S–RQ|–Õ§xÚNFUÌ*í;\Ð?åx)ø»ÊUsÓ4áŠQŒÌxÓÛÞ9øŸÿÔPò—ý·ýõþûÿïïÿþïëÑy™þöÞÁ/¼Ì¿Ò+ïàË/Ó¯çé|ùe>ñ2?ä¬ÂÿHßl¯$ð+ð/ôÛôçG478„ÍÏ,?úoø›¥&^æúç"oÚá…,£ýWàWFh½Ì¿Zäú×)½ƒ_x™OH†àë”^拼éEÞ÷oø™:Ÿ|‘÷}€÷¾Äú×)}€Ç9| ¿üv„]ÞÁ—ÿ.>Îáu–•ßP)èM|ãë”>Ì'ÿŒûc~òqðÖ?æ'ßÄ7ÆØ½Ë?úß¼…¿â³/ò¾Ÿã¹Çøë¿àGpæ,÷—ŸŸ¡ùÇTŸá;üxíœù(ŸxÀ[¿HÿGhü;þ«ÿŸýïmS}‘Ñ*í¿àG&ø·?L÷Oø‰yß‹Œ>à­ êóä—úùâÎ ñÙßåç?Ï{þ–ÿlˆÏöóÅ?æ'‡9ø]~þ£|â³üCiÅ>Åÿø'üD‡ÊÇù~•ßø ?øv>Ì'?É?ýaº%¾*ŽøŸñc8ó^¹Ê'fùÑ7ñ~¾øFþ¿7ñŸã¹3$ïäÏŠ?úA¾üe~èÏø±-þëyß3ü÷?ÅÿõE~¼É?»Îò’·ð7Ïqáëüý«,.ò&àûùÚ{øÜyåEFéFyñßó_œáÁ¼‹/lpiˆÏþÏõst‹+?ÈW¦X¯ÐyßPDùÇüïßÇ_¾‘W>É?ýg4q~÷-¼2Á¿}/ÿ5où9ž»Ë?úA¾ü×¼åEÞ·Ïà7øžá/nq¥Ÿ/~ï‘÷)7»Cí1®þ"¿õNþ›gøÅá+£ìÝeè ¾H·}Œgþ'þÛwñ'ßË_!Ñó¶wñ'ÿ˜w‡‹¿ËÏ×ùäñÿ´øC|öÐú ~uŒÿ>ÿÃtËt¿Æ÷/ðë_æ‡V˜Ó­ù"ýæ“/2úa>9ÌÁ÷ðõÿ•²'‰ý 6ðÖQöTN+ñU½>Äg;T~Š?zŒ«/1àîðŠQ üã¿÷þÑß{Ë÷üUrÿÁWþâ§Â‚AÇŠ¢äõá›`¹%«oè–ýw¸§T].÷žó=‡÷ý¾ïó¼ÏÓϘìüQäFêÜ(UÄ«–^Ëz3KLIvðÐ̾“kÁ¹!†+Ù±þ«fs…†%š;˜`tš®]*9ÕÃä1¶:¸Ä}Ol€Ñè¸ö0YÇš7EÚEžld9ÏI‰~DÓ29›Yz…ÇjYïåò•Bƒ:W\•Oh-kmÙTÉŽ•ŸZ«Ô[ØÉ|:˜òMÂ(ÙyZåö½ Ótà¦,AŸkÁhn—ŽÒñ#ŽÃš럸ÿ fÝþ½zY#Á,ôSþX¦´;þ#÷òÓWµƒ @?7NÅ2†ª¡Ù]«{Q‰x¥×0Dˆ+*"W"´cH¬Lt.’ @•5ì‚zýÚ‰çæ¥Ù¡]§vŒ~}[eAüC/#>Ú=[Ód;sòz†—ã¡Êqñ[TÍÑž¡ØÂ5Õ.<≘w¨]ûôOÄ)¥Õ¢KGéàÇj^ÜeBQöSYºhy\_ŸúþÉP!:È28jO¤ãÀ½©ä´ŸöIa„aêxˆax{¬*ÇùûKV·ßs‚¬š„µ¬kü¡s`ó³tËê–ÿ&OZΛ_ˆ6‰±W°+Î!¥Ðx“St‹]Y Bæ¬Û²L($…ÝL ù¡ݼ( ùZÖ,5€Ê‹ °"‡´ü¸juŸe‚ G~œ¾ç7¨ñý­¨ªÙÜ£|Šn‹0«½Mª[¸ÏäÍ“ô4°2OÛ?ùË ž¤N‰žL“ÂQíÌ™„z¹\Án¤«Mª‹d¬xªØž¢ÛWú]L¯Q'ûQ€­‘åYº­B*ص±Õµ2Çù*¶Û™[ µñZÕzoa±‹é v7¨ifIpË’Ëaêþ—²Ds†¢Ù·•3·¥•Sk dH¬gUqŠvæ,­ôT DÓ¯EZ¢ÎÛ¤z–Ó÷óæ2Ót9®§ôÉ"§féöñP2CKg Ï¥9Ú œÍq~ÖRº*?úxÛ[4ß+ÇÜÆHF;w™íÞ‰È%Wìƒ Xvˆìž+¾#Œëßsp["¶F‡Ðx¡ï”„uù2ÍLfœSÎu‡JñsV‡FÃmK5Xu+Ô‹³ÕÌR–+j%Œ0hßFUžFƒÑÂbkÍ,92e_q™Æ®jÇîGÛAJ£E0Ï‘¸¿g¹²Iµ§ÝƼ™OvÆ“ acv:ur½@#]“PžK*Ûv1m»²…E_¦Õå®mÜ;Y‚à u2#]*¦ž#ÛTíRF*Ö»s´0ÚÏØ0CN,-Ò2M×4];T1¬¾”¥[ãºpÕ³UZô÷´'vņ6‹”³gCïiž^çA¥@úk`eï²ZJ‹<¹Cå£|Ó­€wª9©¤Ïñ´KÓy.iž>dOlÕܚ܆!Ò}é(—ŒÅAûíâ)ùo•;B !â°3FÒÜS¿ËA«â#~ìjF»o˜¡)ºulòea`èëyÒÜ&|rƒzû<=LÊ=“>gÙ!!-Ò¤d§zgé–{¦×”U )¹‹éMªå+›Õ†¶˜3(s Eá3/þå'Ó¾‚wÑêïeHÈ‚¥m&§»›ŠGT7å^=Ø}éŠÖi䌆¨º"ú¬Q'ÔƒúYºzž379¡þ^^ѬhŽéÊÆ¢ÜvŸÂ/cŒþ9ÚýD£'Ép«…—©.¬yÒ“bØñá´Kˆ])?N‡„‚˜ "lDÂpDǦð³ˆÓƒÇàMȉOŒ37’ÊÄkfi—Š*µ(tA|+y%‹œ2mµ}gy"côç+y.Ȍȓ»É‰ \s!<'= ãåMŒRIqôGi;’¹àNfîçÍmª¬`¤6ÌrÚœö’2b d½–à¹øqVá^Å£ª4U²#eC¡©ðlô$½Em!ÃâR’Žã_¾^«—#óíìÅòÊŠ 'Ow´³œöæúÎÒ‚¤æÛ &Qé(?†yq—I.÷4ÈH¡/é‘á“•„öï%Þztk¬„BY–ZêU}ÿ"¯'òW¬S;Ëé(ž FN°!Xe#·ÿ¶Y"]Ù‘3aˆYgHk6Vú_ÓÂ5ux @z ú~PŽ‹š†E2ýÔ‹ª%š[¸V$c¦‘©á²„¸|½Hú :»Ó¬êˆ÷0YàìýJfÄÞ\¹tÁÿ:Ö³PýÁfšP½µçåÜÛ+“zçôn—A~ó êY­aCétÕ˜|Ííúzج»É ëHyÛ®O#ËÌÈd±-)"åPÁ #›T;•¬ø¬” oÍ2 ´ÎÓ&±Þ‚©›©9ÚÕÂSÉìYž‰íË,ݦ«Ô?Ë3‚CAq¼žUÙŠÍW°{œ—\I%¦ìF8ÛÌ’é€QÁËIzÔÃuß ÈE4fÅœµªdGO”ËiºBBEíÝ ²cÅ…›c­¢u(ÑÜKÇß½+¸0ñ’×ܶS:H,$yWïJQû%ŽÜ‘n»Íýs M!7¨?äzg‚±g5F¿'J3K9. ù7ßËeÛDáµ@ë­½\>Æ– r"¢]SÅö-žlÖĪ"²éò\haÑ©£yÚîQçT>¡üÃy1y2Ì4³t7±*Y\ìʦ“Í.Óô*¶M™ú`mS•çÒ8}ÎjλDs–‚Ž&Ë*aÒnc— Ù&!YjÓt9ä5Ê—óÂ'éQ'IÅ©:ÖÂq xçhfH¾‰2z3K”kY—ŽAb´¸Iuããó¢bRس|Y¥>°%§åW ‹¢tŒV³9Fÿ:µÊïªÝ¾K…dñyÚf9mÞzŠ|Û4ý]ED¥Ö-+ÝšlS•áeo}5›PV$Säñ*mÍÅ<_‘ǧé§táü–š{ mªÜ¬˜½"©;¡å~%^é:„x®sfRf¬ø}Âuöò5!úõQ¥t”Ž·T½“«RƒVi¦,mp÷ž(Q_M[”Êü 8à7–ŒX­ŠA츷5¸ ü·HöMi³â^¹Xß*ËNƒ¥m{P-¾9Ú#öèü8‘­:‡¾ÁÉ6æ•Ú¡R¬(CQ-"á‡a†ÜPoS%yA`?H¹mJ{õ8/å?ÌŸNÒãæ½–õ6>uú¢j„Y®äÈÛV*íg¬“ßD~;ý¦æi{”oŽ0(«Þ¢Pþ½ (k)C§µ¬½M§µ‚â/¶äÒ9ëjZ•'åšXT–‚á«6æWh¸ÅñNf¢Ô°Íq^¥¥®ª-;Á¹p˜|§4rìc|”f–‚w®]}«^ì"§dTZY¼z¿L½7¨ËŒ†gTE’-Xq<Ï…mªº™Z¦q…†6æUM4¡J )·P2ãÝ… ­›kwmP¬-žìÎÑ>Ȉ XñtmRí™"2/Ô€‡¿D,ÇŒuÇËxÆk©n€¨¤—x@ÌÙ %¾gb;’Ië4¨ÇGTŠË)µÐȲµË2s´÷3&wÎN”-¦ÈŒúÔëlD¢^a˜P¶@¥;Ť®™¥¤të¯!üc!5F–‰Ð2°1UËú4]f>CðÃcÓ=K·ò ~Ói¤ ²šÏV³ù Ïú>j ü•ìhBÑǸRnçG4#6²ÜÌ’C?²ŸâóúƒØ#uŸã¼´oSÈ-žÐE5^k¬f–êXSpv…†Mªs\3ËqÞa&•;€,à ÏÇ(ÕçjØhgnˆán¦úogn‡ÊAF܈$azŠnAÁ0¾Åq[gÞË&ÇãÆèï¥kîGw2Sàì27nJTÿû?gÝÜÉŒlß-dÍ…mÌKšp®Îôo5ÙÌR4“sœW Ñ|Lâ`âq2d²-f«‹d<1{ª1±°Iõ"-Z-Óè¸g̳·pMÝHŸí<ܲèMù씎Òqç8̼xýž)[¬²»ð§{*bÀ½’tuOY‡£Yo`ùë4ŸåŠ4 nkÅ’VX<\|Þ¼Bb/ÛÅô.vw+JÑǸ‘E|ûOX^ˆ|ÑDÈ,&¦érŠ«—Â"Oúæž­'p½°yTuR Œnbìþ²<‚aÖ\¡!Cq—Š4û c·9¡ø(ID%äضòb®oc¾ƒ©<—‚Å`1È ±bÁ› aL¸q¶ì>Æ+ïåëI¸R-,®R/í¥H&Ä&l’¨E8b:rTK*’iaÑ.¢Ú[ ‰#ý~»— ü«?8í7åªÄ‚+Áî¥Yî(aw.|î£kBr\„ ±8»È©cl­RßÁTú©ˆ7´?|7Ëè`XÈh•ì3AVÍ7O{_‚Öáóà½Žï› U?1i•¢séà.æÅáŒõ‰O|"^Ķ”/Æ~Â<”ÆÊ¥+¿¶ßõÖ¹#™½ö£éE§D¯¨*"Kç3¿ËïÈS¡Ç¸cÈ6™ù,,ü"ò–á#Ú‰‘¤&Ñçd– »jXQ(!ž7¸DôŒt’Η¡$$’4Äð0CC aÓc­$¾´BAÇyÉÊLú™)Mê„1ÎtÄ$]]ôÌ#˜ÚŒÏªcÍ©&VME€´À v ÜÌÌÐi”—Pý=@6¹á{ÚyrŽvß3Š˜8Ÿpz”¨SBÝ<ë9˜¼j5¥´³RÃɘ>Íâæ$¹”}ŒïQn å¥å¹¤…¾ÏÁW &¤ï™–}räNáÿgyæž=¤¼eºŠ÷‘çiúwàã7IÏ0Cî!:˜Zä”û˜*¶{)ÌrÚ-K<±z›¸žVº ]+Ÿö”1ÛÉ#JÇÊXo»W<=`{°¡\ÕÁçiÿ®ÆY®Dºº«øV¬÷ÿðÓ•š ¦ ‘mû$7¨7úy èÛTý.¿Cb¤ëŸ´Ûä¨ÒB¾@o–Â-žçfÜ ¥¶ .#k”íÎW\+¤VLn´[Y‹^¡¨h…l…NfÖ¨Û¦ª•5êz¹¬·ïç¬Ø„…–hîà*ЋօZdU°;Ê€T #NMà y_†z’+Øõy–á"â%¢sƒz©}E2Âx¦ Ei%n 2â £½™%E4´Õ€Tø ‰;ÜÚϘ0‡‘­] sY®(Ÿc}¶K…ÐE–+Æb}Í[¸Vͦï¼IulÛ ñ‹´Ô²^ŸìNªÙ4­:Õk>:µa½†e'ÈzÕZÜŽÓgÌ2!Øæò£L9­Üä&„ ÛT­RŸã|ŽóΓå¹Tͦ”Š1ú] ÓÉ"Ov0¥ £µÔ6U.¯ê‹}Œçɵ1ßËe¥†6©ÎR(gÏþÞ£Vœ ¬H7ئj‘Yº§é²Ç«ž½užäF„A嬪Ø^¢Ùq´ç7©Vä^X.–h‡ÊñysÃ1¶rœ£ÿ[üœ ^7áÐûwqº˜V;QQ2…)Gþ§ï,W"¤)Ň.Lõ©s{¡]Ö£s´+]á"Óe# æ8ßÁ”JN9ÎKl饡Xà¬\ÐP*QWPK3)BΊ%ê‚¥£tü2Öa&ú]LÓ;î©zë¶ nÊ™­,äšî²%,yŽÜfµ˜T`Ò 0OŽÄÖµ§ÏΉälÿæÝóZ¯˜Š µŽ¹ÈçÎsI9ƒ˜ptIÙ½dÛ{›dØÇ¸6çFö*Mcf-eUí‹t›¦†[mèVÜÍ”Í&ÕvÆŽÛÛv5 ë+4xJóe(Îrº‘å j„¦z¹ÜËeµ<Ö¨ó2õ3$11ñÍ-§ÌúнZ˜ª«r’‘4Ï¥mª&8—ã¼ÈV–hvËUÅvìÓz±’r^uÍÕŸ]¡á Ï—³·@ëc¼âüÀ6UΛËA÷^´ð¢:X;Tš™9¹á^¦±ƒ);ö½ð öÁ˜§M¦_àmëÔf™hc~‚sY®Ø¸ž¥[5ÂYN§+òa†npÒ=“ï ‹Ù×Ñ‹”¤NIÚ­tüøŒu§YwP?p55ªuÈ 7mÇŠÁõP·,©4Åòè %Ð^TÔÕyU¡#1›fn· á(¡èŸá»‡IÙb½\ž¢Ûš&ÇE»…ó´I³‚ í%+$E÷(W®»—‚»içI“İLhuö–iÜ¥¢“™®ºg·˜heA^ß,ÝBPá p‰äR†bHÇšc†vpÕ—­Q×Äj‘ÇI&œ|Ã%š dcôG{_ûo‘ÀÔxícÜÊLbžý4?Ë´½È)W{ƒËÍMªsäëX“µè"ïP©9ý󜙦K)¬WxÌ „h“5JS÷ó¦ßÉPÌsIDªñ®I¢³èÉGŽ4%¿—¯w1=F¿ÒøƒŒ¬Q7K·£l½\•¿qúÆè/_W×vŸhñÔ仯röZX4IK§´ÔÍYyõÀSÀs¸¸ÀYUÕmï'C]˜bpPÎHÜe”½´Q4ñI+’ñ”¬Ñu4Îð²gn;zZEjË[:JÇíãnâ%?úô¿—ågo1 Ÿ~Š·øåÄ•øas³\¹ÅµÄ?÷Ó@|eâu:çþ1†Onñðg¹r‹_NÕ^GÓ’x>ù>^£ÿ·x6ËÏV³ù6þö |ô=l¿Ááêc|}›ª‡xíðGOq¢‘å¿â§‰¯~t1ýÞ%«ê_úù¿oqü |ôstä¹?ñeNö0¹Ãÿô¶ÿ1ÿQ»?Å_—ûªØþ}ºOñ¥6ùT ×?˯·óE›WŸáãïa»…'êXäSgæ8·þˆÿæ^}˜Ý ÅxªŠí?áWøórö^ã¡þÝÈœÏîPùoü[>ä÷ã•À?¯íñî·óE µÊýÍðïPÖÎ߯UÈm狽\~”­fþì ø &ÿ 9 jâÛßçcôß ~‘“òï_å‘/ó˾ÑÅôüöo|¯–³ÿ5>PÎÞ<°ÉûŸå·~‘ÕGxõŸòßk.ü'üÊI¾|’/oòŸÜÇ÷VùùóÙ"™fþìW™˜×~Š¿äŸíSö¯þþçÿ‡²y~µ‡ÉWyäƒ|õ7'èýOù?†oW°û6~˜áßá'3|ÃÏ}ŒWÞÅwNñ¥Gxõû¼ø+~úÞÈPÜæ=ÆÞÂõZuRncáû¼s“÷[oMÒÓÎÿŒæÓÌoòþÃÑÎßàø ËПä»Ô<Èw¯rú¿æ ³œ©fsŸ²¦ÿšŸz?,g¿ŠíÇùÊÃìîñîsäOñ¥òÕ=Þý<<ϯ¶3÷üv3æ¬cí»Ü·Iõïþ,¿þß¾À¥ïr_†oœäú ŸúÇüÁƒ|÷8kÇY»ÅôÿÀ?=KáY>ù<ü½Á÷ñ½F–wxï—9ùßÖɺ“™ ~Ö{ñ,¿åŸüåêw¼´3÷ÞõoùPãóüêçè˜àÜ×øÀ·yè÷ùoåÞÇ÷þ˜4qýùÈÑv-/ðc=ˆS<‹}(‹· TJŠi?‘ýÞ¿ ñ*K^_–r×½ýßA¨£Û´º:ÎK’7©î¥ fT°k5Ê€†¹¡zWà¬HûýÎ=Ê7ɶZ£Î;ªEîvÝÕ6°2Á9™]$¾Ã‚ª$4³ÔÎÜ(* X¨I¡ý®ûh ” BHsˆ6£»i9ßZßJhfÉ™e2ímªT4Á9«.iŸf–]ªdÇ"2À?A”„R°­GâSìØ¬NNö´=™‚:–¢Ù3lñ-ÓØÍ”[þF…w¨t®yrûŠv5ƒIßÌR9{V‡«ÔoS•¡8IO/Z+oñ*õ"‘B\µ¬—³'iùÄ<[yRÿýó•1Ö-ÍÝ»ãomRm!¥B‡'i±(•¦™¥ ÁËŒZÜ6ižKÊìÆ°Á P¶AMZC+Cq˜¡a†dˆT±½J} ‹úžh+ÜǸê>ÆÕSqœ>G÷l<Þ ~‚¬=€pzKà†ÒQ:Þ¢+xHç?8~iPÊ'é'í¤XÁθíX˜~ÚÒ:„)!Œ#}V’'ä/h6¨ñ•#¥Ò¤üÙèÏqÞ±Ð:ÖžâIÜ,‘mQÅì˜ÍÑ.gOiíF–{)T³ïÓti<¿HK#Ë9.¸+ØfÈFŸžÅ²ŸÒ¼ØBÁSÉÂQ_­@„úgé®cmŽöpùòC•ýndy— ¡ujõ¤ßÛ E“í/Ñ— Å, ¬Ô°é­‘å!†w¨¼Ÿ79UŶÿ‰ñÆ8ÛÛÁTŽ|  ïv2£&‰øÐ(ÓtÙ½4ô{/ôIY¤E±DƼ®† 1¼&ó\ðBè )á6d[¨È^ ÷A^—¸O¢˜îÄw#ËêIŠcÍÑnêu?!èèÝÑLdÚ<9Ñ>­T&þMª—h–(á›·3çx >EÍ,É\Mt2AV_J¼væÊÙóù,’‘.TÃÆƒæ3½:Õ¾š§í8/9$4°"ÅìUŶíÙÔkÆmã~I±©tü+I9wj¦&®¥"íà~ˆøž.ª²\9¨¥»ŸÎ…GÞÿ¦ìõ®Ê¶z%/•Lh·´kÔ…µ«¬ ‹*M¡ü]!.ùr$de#¼±“:Ö ¯Ë46q½ŠíYºÃ@DÒÄ2“ô,ò¤ˆ×1¶,¹ZYbx‘6æ%.Æ%yñM: œ•ìþ‘ú«!ü\5%6ªÙ´m¨4â2·x„!J' U$## –uu›ôT\§v…›NkÔ©˜×Ê‚NN1\¥†L5›‰¸b°BCW§éZ¥~‡Ê vìR$¬H¦y™icb¿&ݺmPcù¥:â(ŠÚ )зKEÓ–×¾í6Uy.lqLÖ¸užBJ2Ô9e Â}ÔÍ^©à“ —=Ê5)’Y¡Áç$d]ðZ¡l–îsô9”F¯˜¡ô>Æ×¨óÑòŽø¹\ígl…ª—‚þ±–IõT3îþåj})ÞþÞ÷@9.Y ÒÒñwűÞ÷¥3ÌGšhŠÅ[LÛÜâá&Ú·xʲÊò³̇›XÝ"ŸÌóöïðišô ?½Å¿hâú™&Ú·ø€ÿyKÀ/s‹é#¿Ow–Ÿ}–ßêaú*§…d„1 ¾Ì/ÿ“oã‡cô„«oãoßàrö¾Ì/ƒLŽA E.~‘Õ_â«÷ñ½þ|ò‡ø¶lq£Šd®rú=l?ËÀSœø~E¢¹gùïâÛÇYkc¾‹?Z£þ,W>ÄÜ 'øs ÇÅÿ‘¿zFŠñ! IDAT‡çiÛãÝUl?ÎË¿Æ ÿÿû¯ð¯z˜~ˆ×ŠdÞÎ6©~ßy˜Ý"™“\ÿ¿^û{åì?Æ+?Å_ŸäËNËfø†À•ØÕFwø™òÕÿ‡w7²ü>þýϲñ‹¼¸È©¯Qû¬ÐðA¾úùÜ-~±/nòþ7x Ã7¾ÀGÿ”ŽŽïPö¶ßÉ÷>˯ßÇ÷„—¾ÀG¿Âãí|qŒþóÙŸâ¯Whx;?8G~‚oÿ ¿"Ú÷]îkdù[¼÷kÔ®Ðð*É4ðç_çççå~ék|àçøú»øÎûØ*gÿ>¾w’ëE2¿Æ¿>Ëc³œùûü¯g)tòü¯ñ¯ÿKÛùâ4]]Lÿ<7fwÚþü1^ù_ûvV8)þWÉÎk<$ž´ÉûƒÉwò½ß柟wš–žå·eëk|àUY§ö=lç8ÿÊ>ÂÕGxµŒ×Whð?ÈW‹dVùùã¬ý<«_£ö¿w‹égùä>e5ld(þ6ÐÁçzùì"sòÝröšYºBg+ Ÿ£ãøÇß SÅ_ü€wíQþÛüóYÎä8ßÃô ŸzïîQ^$ó*ü6Ÿw~¯>««üüqN½Ê#,ÿ¿í£û8/û¶çÈ÷òYã“|yw_åô6Uïckww1ý>¶¾Ë}ÞÍ/ðчøö-ê®ñQØOc䥣„cí}ûÕwúq‚W•‘ÔOŠ\4¾Ò$Wßáëd'ÍÜ&V¹­”¯\MÞpÿGj;­#]eªpcGÅ ¬Ò$267Ì£–u·ØÒâmÍÅ€pÐÜm¼ä¸¨y•q³HFOÂJvÆò\€ÍPoÒ»ÄžÞ n¾ÉýË4öRÐ@K1žYÖBIÈ6 3¡Z«~$è5ÌÐ1¶Ô¿°'tBöÜBh—Š®©××Ê‚¡ü7÷xDQ’‰TwñÂ0!"%GQâ¾ ¥ÜT+ŠJHI©ænãN ÏÁXWÞ.œïìè볌GDZ£5ÚÆ¼Ÿ¢fÒ•Þ©]*9åkÔe(nPSÁ®5‰‡H¨‘hñ…ÎÅç,z”ÌØ¡2ËËqÏ'$”òäbÝÞË×'8—ç\ ój6GP[$äÁBAc–p…íH/Ò¢çõ(‰mÑÑmdÙõ ½.!eV¼ï ´*bÒKa‚mŸp]»HÜ×”‘µXÍæ×o$!åF)b”ŽÑ䎓Ó/’Ñ`§†ï¤.å ¾üŽ“º_l:ï§ûŠi¬+~zð‹£vìC™%3Ó8}ŽUMÒ£BhÌ?E;ËG{†—EžTÐÁ™Yƒ¬ï)Äù*¿³õ:ÚY ±¢gyư¾G¹|q¿oBR­\‹)+Gþ9žîbZqç¦{¹,$b~ªbÛд3×Ǹ,òº¦ˆòÎ}\+ØUN"ÆýcôK­Þ¦ªƒ©½¶þ>ÏÇnñij‡\l+6êPH™!Q½Z¦qœ¾0œ’ìa²ƒ©Jv4g æˆØXÓ…dû½|ÝGKX‘dÒÜ çÌ€®Š¥©*âÙ:¡]Y%;ÞâFóä²\‰‰r #6ou9Q´¥¹ð{Ó‹ÙÁ,§{)ÌÑ^Íæ£}ŒßखÇÁ¸ÑéMŽO¼I`–ŽÒqŒej©e=èQ{‰Í&™lÕ'ÌÇëýÍ„í"4)-Œ²pˆOͯ¦p/ެ*®ë¨ ]2¬Œ×²>IO†¢c˜$¦ºaÊ>E·L9I&E1 ô:ì@®Q#O®¹~Æf9m5ÖÏXŽó*åè£áDT«šNI‹ø0š†¬übˆaÏÐO u ·ÛbKž¿ÔgxÖïcKÔ*l×;˜š¢;ÇùAFâr!Vÿ–òLI‹.TveÕg±]¬ŸË nö1®„J/—CYÏ‘ þ8/)f’·³­,¤æjÊ6©¾‹äU:Žîñ#´Ûïá-¢AÆÁons¥d/Þ ¸:@8<Êê<ÒgeÂø˜b?ºT„RN5› x2²Å±´‘‡XEZ[½•*Ù±'ct³R = ©P@W‰< £´!Hˆµ‡’·Dð^Ì2ÑǸ<4ñª v±¥Ñ†-Í^ ñ‰"Oá!ÒÄêݪª×³ªÿ!)/ýGâÄdsÄÀà R‚‹ÜÆ·±B4=Tä·©’ì÷4ϽÉýor¿^‘$)$ ½ðòèbZqz›®Ô¸ìÞ¦@øBèˆÄ…Ä{¾-ëÔŽÑ¿G¹.-5lç¥èî÷X‰÷¯™%š#ç‘¢KogÎ7Ì““78IÏýò9%GÑËI›7ª²_Ïê"-b­,t2ó:ö3n¶ýW@´,,¥:¸ ûBqžƒ­N‘9VžçŒ6›ñšÄoï oé8jÇÑnOQÛË’nUYXGR ½À¥ö³L¤Ú}w^2z•–+,+=‚|¥º´²0AÖ Ž»˜!}¤Õž\öôÆçOpSyÌW²£®°<—Xב¾¿H‹gÒ͉T Õ‰m4•dµ6*2k}à’¤[©ëÔvpuò*¶÷(7÷¨"/!¢ŽµÏ󱛜xƒuT9mQ¯N 2»ÌÍÑþ(ßœ§Í¢a‡JO²–õ EßÇŒ2I©Èy5a­Vú3uíP鬮‘®©ã·GùGþ«ÛõPó¶phÝ FÖ¾-¸Z®ëgl—Šj6MWË4ŽÑ¿AM5›M¬¶pÍ”c[RÐÔêYͪ:'éñ­Ú™aÐA½eŪÕÛ}–g,éÆé ïÍ Î2`ãQè.,ÄlBÞâ‰gÍ‘·›NÐM\¯e])wG‰³L”ÔÝJo1A|§0 9Ÿ¡$'Ýñ I¼‰m$Ö' `¢û¸é|V¢Ý©\á®´F˜*a“H…ÎÒÝΜ÷E{{2€¢±ÆJUqõÚðw§~blÒרËrE=ˆ6æ<Æ–p…¸”6¦‡%šm9ЏÌÓÖÂ5Õ+rœ7×FÏǽ¶ÕIÛAv¤ÐÉL8-/ð”å‚WD;ó´Y¸”³Wàl;svᬱbRU?Q¥*¶Y Õv¢5Ç­Ã å¹pœ[Í5êz)ëçiÓˆDj† ™x9.Jnô »Ê[Ýšçl~f¹"+!´ê­¢È#q}ìcÜ lg.äÕ]ºYNÅ\¾Dóþ/Ù*¶Û™s0NBJL1lJÈrE#1Õl§érË‘sѲ&VµŸ^¦qƒß¡† ½f¢Œ›¥[­KÏ­yS‰œã-Ž;¯-åX˜¿+³–õyÚ¶©òÉtá\—ú¿±ù°µàc“ày±9N4tJG)cÝ£³w»q×”â©Û‰º‹ ¸ŸÏ%¯Œæò¯bsm»¦…Esž ÛMFÏgw¨´K9 ,äe Uv Û™kgn‰fE’Œ5y.YZ5±ª F»Í,I+µ*»TT°+V·Å1–Üì“GÍmÊ•&Šž§ÅG–+79¡ÆU3ñMÂà-Ï…,‘ïÒQÊX÷JZ©¬}¹ o¢þ`Ö¹Ý0LåªCØþ½$Û÷ï²59šÇÌ]˺É&:øó´Õ³ZÅv%;* I7ˆ_®eÝI®3…øž«šYh&²Å1Gh-p6ðJ/—ýþ:µ{”¯S´=£ÞíýŒ…‹£Ð‹ýŒÕ±¦öÒ*õzþf¹bdËγúS>,__PкJ.¨/0%ô1aÚAMu¨Iz:™‘ ÞÉÌ åìõry—ŠqúBšÝ÷WÁ½‹igãÒÍÒÀ¢Ÿ»TèKéÑÀŠ‚U _Åß:µŠ*ÛÒ´Å5VWýsÐJÿ¥”ŽRÆ:@Sí¤Y "µŸLkí'0Ì…ñS C˜ô.Ð+Ý3¤ÄJ×£®†T®Ûucô+9¶åK40*¶¤ê«Þ1’¥Ç¹©¥H&ÿP”®›”'ÇÅ%ší:ÏæÅ2¾DÔô±Œ³‡¦^Ü£*8zY¶:ëarš®,WQlJ@ðâ½ ­¡úkaÑúF9»›œhfɈ©€º8ÐÍr¬Wh°¶³Ÿ6Ew?c-\“³—#¿G¹1z:çŽE§]¡a— ͯîar‰f%ï욆“¤Šø†þF{˜”°p†çXicÞp%õÊÙËPT?‚ÄJqÈ9Ú‡õú^\äT'3ó´Å S€^¡Î·È)‹0QF`ƒšAFšYš£]è[vØ€ Îà¦;{’mÌ{Cc²øOlq,ÇÅp¯¶›çûç%5…¥ÉØídFªK˜z»½¡£ ä¹$ÑTþªa*FºÑ—Kž…ªŒVcòn’v÷¾z›:F¦ÌÍKG)cÝ Ç:T4q=F¬’i­Û®9ÎÇD‘Õ˜-ă;£ýCoîðV©ØU5&8+J´@ëíîå=tëˆRf‡Ê¦ò\ŠøåWÀ'æ_,~ ½ZÖ{)( n²ìå²)dJI‰ô";é•5¢-éè’·Þžð1>¯Ö­Ýž›‘º™¥VÂW¥ƒ)³ˆC`«Ô‘E°Ö¨sSz©’D°ìty&¦:‚Ã0C‹œ Ξ=+Yˆ¡€5A¶ƒ©væÔ€ˆ¼îOkYcSd“j•—h¶+vµMUWoP?Gû½®áíÑ+?xšçžãéç,ö¦LÓ5Ȉ׾L£Ãé9íEŲ“Pl<ôú(ô½®Ð½õ ô®ÅãÏä”,(ÿá?f‚ØzWËî9B®šX×AA÷ïI\²N¦²QÚõñžÕÕWËb1 œuP¦@¯¡Gö`%;ÊÐ À£›©QÜÛJ“[ìOÓú½ÊÔpèÇÁ,nJÉÎmfI¦œ8G3KŠàùzJdgƒ„ Dé±%• šÍ:­ü¢ËX¨ÞÛȲØÏ4]¶Èä¹ ë²ä'8·K…—’»,KÐË,ÙÌ&’ÌiçœD³$ì)f8AV¥ÿ$P\) þ„^溚O>ÞkÔyÜmaáâ4°â€]†¢o¢VÓ(RTÔ–-’ñœçi[£NJ…Ö—ì ªiÈ»Níƒö~í­ôù E“„…©UQý(ùh‘$ÁRðÌo8p–ójŽ‹M¬J>ô¦(¦›eã¶-ßõ’V/q‘èËѯb{Šn$eHV±}ƒzKÒ¥`d¹"…G†ªr…¡Ø;¶<—Âò´"”ŽwÜÕ¤: z“ )T*‰ÞnF©•Vž 9ö1úÑ­°{훎\•† ä¸ç©Úd½’,WXÑýÏ­txÞë±KÅÙfÜ »?ut‰fuÙåKÖ²@ }[¸V ·‰á"‰| í?f9½Ææ­78ÙHÖ. Içîǃ«-_±Ž5 ޽0ápè6Uö¬¬#MÆæ`£pãòå4R iZƒ& U/´Ž”•r¯"T5›Ò»=Ÿ%šŒ5“™éµd´Î3ò¦­)kYoášg¸AQ3±· Üa¬{Ô€¶,¡˜¥[uÁ(ø¤8ʈ1[X£È_7(‡ŽŸ7+Xûfj6ÅùœHOD¹zÞ5ûV«y.Õ±¦º0K÷qn‰êàfð_²\‰uèg,Ï%‹ògyæž]¢¹ù=ÊsœÏRÝÇøåù„H"¬¥L³*ˆyö>žXÌKæ¬eݢͩ…Ý NÞ`_3”Džôº(+°Ÿ…B©Ò*áXw5©®' çþAVzd”;¸T¢Ô^–”Y«w‘¹Ë£„T™U2¹Ãõ¿ÁI£¹ak:…hàÕøÕøâw†v?Â`<–&ViÇy©Ž57õÜ%šÇè—‘e,Þ¥ÂpéËÌ"Bb¶+eÍy.¸ž¦+r °KÅ:µ-\§/¬FjØháÚ$=M\/pVmx³ENÙóÑ×£Ž5CmÛAŒV X²‰Ð]ÛŽ[ä-rªŽµ ²rUôëc¼Žµ j@V…A­ »š£ tpU¦¸²åæ0ão¸6«¼n3­ysªVÂN)ýá;z»˜¶M'ƒÜ¾V#Ë5lÔ³Jâ+o>ËqÞi0ñ?y}kÔɸ³Aê\mð,Ì^±ÿØ F4.„ÓYV0,қ˨]ò£¢ O 7½‡I•YÒ m¯hVµê»˜ž¡SÁ”PåÈsa‘Sâdà MMƹn“¼ÒÈ¥£„cí÷_½þ‰¿tÇçáTeª$ÚO÷Ä«>…Wqh¸øn ÜdÓtèWý:ŠG˜¼Ø VÞ•JWôrYeØ /'ŽïØbr0Ó½¼»ÝÈ=NDey¡ ¿Nó‘P_ /Mª-}¬íܶ‡Š®ªƒ¾Øš@ÙxŸCÈ)H€U‚a¨h^´ÌJËþÆ Y䔘–àÊ¡ÏÊqq‚lÔ|¡îj™xH8  ¨W\ÿõs7š§-O®@6KAêDhõ†â°w¤’66¨ CK³`ŽJË §÷(q½Q¯Ü6õ1nŠúá;Ê~ùo® bEW-ÔlmÙYÀ‘ ±‰0)×ëÊ+Åkµ7«¹y·ƒ«ÖµÆ…>¯9ÌÇÕ[ãÉ 2€ë¡@ýå<\ ϪžÕ×yPRŒ7:+(©»•p¬;‡ŠAz­Š œ 6`hÝ6%ŽÃQE^uP÷ö@DNdœêC>ãP'ð(»àŽ•ç’ܰe;¸ZÉŽzq³t3´J}–+6…bck¤ÈPT±mŒþcl 1¬nžM¤OýôEyhÆD½¯ì}ꋎMpNF»9EäHÚ£¼‚ÝENIíãŽE$jX 2¢'Ü„!†­ŸTÈ©cM_`k÷øŒ6³`rÒ€1úÕ\°u¦Ê‘[u.$z¨èÑÌR'3½Ymg.Ë„Í7G˜uúO_ΞÍR ºŒæ"|-Ziø¯€à“ Ý›Üoõæj¬Q7C§(‘zŒaÜÓ¿Þc¢G~ŠéÐ%;Œ¢³’½Ž‡Ëª·'©¤ˆ¾ÒyrýŒÍÒ=Á¹ô7b¥ –Îø0„N’wDÖ~äãujGÞ#á W²S «xãcÑÞÔ,{›*=̺jcÞ9qi2Í,‰Î†¤Ö·¨RWÓQè5êäè·3g· Ï¥ÔÖ¶„c•º‚÷‚‘Z$Ù+­pq{N«pôº~î*K¿[j‹T–²'¦¤ÊìŸbXÝç8ïV– Möì ɼr$È@iÖQ³®…ká•7 2_‘Ì¿ýË'gèìbZíœ(G€òÆGm¼#u¬)Dë©áÕFÜ4]=Lª¯ã`ŸØÃäë<8Àè-žp¬H¼Å@¢ƒ´AÍž7¿NÒ£ìo ׆²™©Þ|ÓÔ8Î,d"ûCo;oÆPO¦Hf†N÷Uà ©ßê 9µAr–n…Û]Ë8·ÿþ·Å1sƒËÕǸSJRÿsœß¦j†N)æ:q˜üüc±Ð¼Å/x_m‡Ú°mfIº¦âë$.'áé §­—Ëî²L8ÞÌÒ nZóÍÓ6M—,3<¯gXTca#â[ä«ÞZOpÓ*Óp}›ª0o\¦Ñg ]ó9fËÑf¦¥¼–@'3®­óéÞwSà #Ë4š’—höQ_¡a‘Mªorb‚s…+4Øuë3Äp×C#ªt”Ž{NßÙȤ¨¼¯…JRÑ~ÒÜÏrå®â€*Øâ B.G¾Ì/KX¼ûQqF¹SŶJçÆw%-ìölR-€±È©^ nlÅùÝï;µÚÂ5wñêœb^> IDATV±­}­Å¢y›ªENY'9z¾'ëÔ VMÒcG·‹éà¼õryŽvE+ì}i‰ÒÃd“½\ö=[¸¦¡»òNf”¼;ÆVŽóy.ÉL•Ðxƒz™÷³tG6 ™Ÿ$×™ Q>*ÚM"FÊ1(Ãáðløð1ÜÎÜÝrßíLmËÙab¸’=ÊÇé³î©fóOX!ù“ZYܱD³R¿ÆÜQÆèw6.„géVXÄ5+KL3æ“6îòälÿ.Ñ|†ç­ùÌN_Õ²Ói&ª^.tä´œU¯b"@޼/™ó<›YZ䔲,çÉÙÛ\¦ÑÑ1ŸŠ:Ö¤«xJîœ$ëfÊz±•…ñþ:ÞÅôå}Œkmú_¥¾qkYYšŽ¹3#¡>¶²ç‚qãnD¼tñŒ•ÖLû¼[o)áh¬&“Xw Ý–ÙŒN~7ˆ×K£Ä‘¨ÌèUlg™ÈqÑàmªœUpÝðª{H#˯ðX/—‹dÔ„Õü E†o»@«Šb9 J#d¤ŠmÇxå*Uè?[ÃF“Stç¹d q|* Ÿô ’êíw$…7±*ý̱ÓIzh­`w„AA¸•œX¦±—ËÍ,©Hd 4xµ1¯°½‚‡2°oP¯sØ"-LŒw7¨—¸¡£¼ùU9ÄÌjY_¡!ÃËÆkO^1'ŸçŒ?RFDvÛÇùŠ$l›lmÌ[º5²܇væ¬`Ô°°ˆÜ°F]†bžKþÈ¥ScЈ/sCp“¡"oÝ£r|8{‘˜Î´1ï7…9ݨK«””Î,Ê*”Xq(m†Î[Yp«d¶HfŽvæ}s‰$Š2+Îëå(ë.³¿—Ëî$|’KÖz¥Œu8]Ýàd2`qHÖ–¨«HÍT¥ÔÜï¶-.K÷ýRZw µÔ¯åJëÎjÜ ^àd"AõíÀôrYºèB^}£Íâ®\lã×uÎŽÑ_˺5ÓÓ<7M—M$ã{“£ Œ0hA¦¹‰±¯ƒ©1ú9%t3%§@ôF•ÌhdÙ}ú #²øÆ–›n oÛTå¹äµ;Ê£€¬ (c¢|¿xk5Ãw-ëE2µ¬g)h;YÉ”ã.à„|æh£_SN ‹¾rŠî¨ æi3oSõ^¾ÞÉÌ.a –åJŽóëÔv2cÏÐÙ[U*¼‘› ESà(ZIɨ›¥odHHX+×°¶ ò&¤ ;éc"§ÏœZ$ã@˜79áfÈz«ƒ)åíúsFõ›&‹T—+¦{˜ÍÊqÞRjd‚s.Â8}“ôØSÕÒÏ}“û5ž6C›™‚%oÁ­u\ÐhöÖ¶”±Sê¹£âµz—3Í~ª<ºƒKÙ Lø‡‡‚Ó‚L ¬“w=GYMö·Y-–#½ CC k¯ç–˜ ;Á¹p‰S±‘h×ܨ‰Õ4騦ê›NDB¦Ý?o®¦V›Tk·h¿(&ˆ1’ÚÁkáÚ•öv4Æ59I-³Ó¡ªq«"?tš®púÈR§Ok®iº†–â¼N­¾nÏ‹dnñ Î6²ÃIϺ=—A¤üIzޱeKM(K^›T®†°;9îºW¨rîJVK}ŒgxYb‚ëö³ŸçÂÃöÍü\*ndºU’C\j†Î /»2’³5ÖR > Ñ£AF2¥fX·5°"ûÎbÂÕ¶zPKI´O²_5›“ôü¿ÛÂâ&ÕºIÙd³2®acºç_à©Jvy×Ux:έ`Xø×gá%ºYÃÆ6UÏsƱß-ŽIì¥.”Û5±ºÈ)ÿ®…£Ú˜w'áƒä$ƒu¼’Zö™cœègl‘–.¦…»Ü[¸V>QÊ7{³Šd¤³»’Nˆ›®œéÞ FPÖ?^.OpÎÌg;'jJÇÑ:î­„KR%‰ª,-†û#g„ÓÉ/=b\–â¾—¥^PB;â÷#ËDŒWGÆE=$iÐM«öŠÉº³–h¸‘US±$*«ŠÕ&"O·çg+Ø-gO:€Ê Öˆ¾Ä6Ù×ˈŠÈÓ3ÊhEèÉÇü/ Uf„²¼žX»Óty-!ÒJ2¤,êãK4g)Øßó{)yt•ú¾ö£Ò£ƒ)ûK1ôš>gRS–\ÉèôÕYN;#lÅcq ^­Û…Жmaq†N×PèÎ×HI˜¦+Oî&'\ö*¶XÙ æ7婇їÑÜŠ3Æ¢ãB¤:½«~GŒ ïPiÍwHºÉâÏ6o¼¹ÉÀïçV9¯†³WêÀ² L ©ð7ñ$c[–ò¾2Ka›ª=Êcúã|æ:'}J­ðV©wÄ®ÒOÉD„nZÇÙè@})\…ãÇL§E(¢J™cŸbÿ ší=œ®$»G-•ö)¾g…‘8Féö Ñ\DЩXUVÕf=4jT·Ôå5™édÉb•cŽ qXißC ‹¢;R3M—aÎÑÀJÛ™qÔÔØ¡]LûM  5ê´ÆÈr¥ƒ©(wÄüýߨ™tâˆF»rö"YÚ²Ú[¢Yˆn—Š:ÖÎðü¢† Ï„0} Wt3¥†zlüãbí’µp-–Q .[p ׺8Ñ:ó›¡ßèÚ†øžåã6UíÌiÄìw¼±ò¶I-”Çèß ¦†~Æl÷E7rž¶>Æ‹¥6‘Ä ždlMì@ZF“x-ŠyªvYZYD¶ð¢T©ZÇè.ŸËtpÕÞ¾´ˆ´.etkpÉq^{ú ÌP<Æ–mFXtS½L…MZñ øH„'JÇQé ¾%Ž•çB¸âþt·ÓcJc° ˜ ÛKáP~ÒÒׇÆî]¥Œ…£‰ë­,¸òFŠt¸Ñv$PCÒ0CÎi6±:F?cý-ËŒÝ ž G‚ Þ1'ßM±WƒÚhØÀJDO¡‹'û]}Œ÷3fIA")kCÌØJÂÇ‹Tâ³^‘G|’è §Q\#¾c§¡ KâµçßÃdš¹gè¼ÅÇùÊÙÀÕôÆLg>sgž °Ùý“/pZø Z±‰!I¢‹ù ¹ jü1!±ÅŽuMÌðÍEž •^AGÅ…IQÉÅ-¶Ô®íg,4pE’rä=CBm²ˆTÁ/Ý‘Ž;,ž]*:¸šçB$Úí„꿱£šà\ØEúÜ ¶‰­Š‡¥QC/<6 ¾8m Àaº÷S‚²J8Öíº»‰ë9.Þ«–:ôoYâëxû; Z^–êõíÛã²\[§6ÄV]¥ã6ލç“s©B>¶¼Vh°õը䍖Ú9ÇyÉn¡ƒV“ôlPãnÚÈn cÜ.¦'8'ºÓÅô ꦣ£_Ru³2âœ^£.Ë„V„2¡qúœý”Þf:™£]Ý(ì:Üêc`Ñ ¥ä4]Ò€—ie`ž¶[ ŸÜâak¦[Ô%ß>ÝDûØ_ä$|>ÙDûûøÍ-öÙz¿YËú}ü0yÈ>ù>^{¿¹Å索«O'ÿñcÿ>~h<ºÊéïóÎóÙYμ<Àó•6¾ÌÉFâµ=ÞÝÎ?À×~‹g;yþavßÎÞÆß>«ðê9þÙk<ü6þö§ù«¿â§ßÎ6y¿ÖJoã‡5lü ;•üå-Ž¿¿ý ÿG=_ÿï}œ—[¸ö9²ÿ†¿Ÿá_à£ïãµj6ßÎ^ã¡væþŒæj6Orý1^yßi`å/øÿØ{ÿ°:ïô>óždE•€!f4Hf0f”8;CY)ËDÉÄP¼#KÙJ”,5Ýcš m/7šb9¬Ìf±V±D­{U¤Eç*)EÚV²&&0™FA6aÐRi LWÆT˜Á2£Ae8Hñ‘™ýãÖùú 9ÛÿË—/ ïyß—ïó}žçóÜŸ/.’cß?§ñßò÷·pe7/³õÒQIßm8Ì?YÃgÿ0JÑÓœÛÂÛÅßÚÀÍßäb4|Ï“ù}Ž¿†Ï|ÄÚµ|\Âð(Eù¼ó¾láÊ4œ`ÿY?$g„âïðõ?aç!Ž}–Ÿà_ü%e?fã³»ˆñ]ôþc~q„â¯òý-¼}‘í[¸ò9þú'|þ5êò™L'þïøŸ6òã‡xoެQŠšùL£¥|÷E;9áí‡xï=z”©g‰}‘ë7I½ÀŠùüøÊÿÁ7«9s‘íÕt‡ßø_YLJüÃEÒ×ñáwøúmxˆ÷þõ>ÿ~ðE~4Iþwøú¯óç'Ø_Ì÷ÒXÚÉùNþA/·’ÞX›ÅÜgùY„±·ùrù¯ù_¾Á·¾À7r} W~@Á®à_˜ó}ÄÚÍ\¥èaf>fí7øÖ»ä¾Â?ýSþîŸókƒü~~ã'd|‡¯ÿ!µçø{·Øp'~›ù~ö«\(çñ¿¤¬„áÿÂ/ÍSC÷Z^(廟姛˜‹0þueüå¿åïäE³ðu|ø ¾5JÑNÎÿï´TÐ÷]~%øZ>~ˆ÷Šù ŸO'þY~úK\}€'É/ep/¯÷RyŽ]9Ì %VÒûY~ú ¾'í=Ú•¯òýFþÙZ>®¡ë7ù£r·p%“ù*þôòÓ‰—ñ—HíZ~ö$Ûÿ!±RÝüÜ>~ï÷~ïõ ß_³vÝ_ÅüÞgÿ¦>J¢FœÜ¾Js +Á°HKH*ÚïÑíÜñ' ÑhˆH໫­¸g|ø“Ù¯û ˆQ_°slî.M›ŠQ¦rÌf@ QNÉt(d¼žãr»gÉÖ,C€:®À¸¡xŒÈ"éQbõwžTJì5¾\äÃÖ^ñžýÉM)fDc]!B~棋šnªÓY´!äU÷9PÕΊ{©Ôê"‹¹ ´&Ä]1ųb´&Ú¡Ix„¢0àÆ¿•ƺÔJø†ò ¤"…ïUN¿$Ã&Žd°pš½½TŠ·Pd1MîöxÚKn Í4±6G²˜›%;hñe×úW+ÎPœšE5ZÝÈu÷ódªAˆ06K¶fž5tå1eõU=H1#:Nùüir«èÑq„bMªjè¥Èdt”ÇϳSõf?åE\å±ài¢_L;Ñ#4™õQ±DªÇ˜ìª ±¶Dª_AÞ¿çd?'z©TªÌ²†®q s™¶5LI?O™4‡€ªEA'ÒëÏR(½]Ôˆá(f¤…c–C5ûþcµ=>E+F‚ÑëTÐï%,H’~IòBM sljáb’k€+ÍJÒô}e¨»_!¼sІ)Yi*v'Ìè2åè’pXÿIÝó<™öºH¸XÕÑa‘J”ŽË¢I¯Ùæu§TÀ„-…s2 '(¦d;cQN©>·ý`e‘t G€|ÕwjæÉUGnuë {"Œ…˜ÑAýFZÕ”§´`eU𥛇lhG¹…+Ú€mgl’üíŒ5ÒšèÂ6K ¶cäð¬Ç¶Hº«ášJ®¥3EûaÒÕßžû¨ˆ0#êiOô·ŽÏc=-“ùrúuÛj m˜’QÕZŽáI>“•ôªÝw{aì4{G(Vâùo7Õ–­—¾Ês­4.QÂðzn-’^Âp>—|~+Óä–0ü&;$b˜gðûÔŽP¥‹†Z’Pó§Ðû³—ÊŠ¥=‘PlN“ÛG…÷Fp’[i~ÿ±ú"–ðõ¾=ñ$øã“PLqˆ't;$¦¯âÉË®q( uWfcñ¤d‹»0«û‘–|EŒ€^*EB¨}ןâ G%œf2¯Ç ŽNu®€$Y.¾>_q„*¯Às²"ÅU4†ÍCWàËÙŽŠ±/O(é¶]á¡çêVZ#Ä|.ù4ÛnÆ3X¨¦{œÂí ,h«£CX‘¤]õý% §³#*†.`>æÉìgG#­1¢flåô÷P•Ë´âEFÙ&ŽÔs¼€‰6’¡é…Œç2-H·ŽŽnª«é¤ÚÑvTÒ+­#2Mn}m4þ"…‘íEÒçÉÌfvžL!IN×…ißLæÍá Ø¾­=?õ)b2ò™Œ l˜ktsdéÝôPÕBó"é…Œ»A4±ž'3ŸK&šŽ x`ÝTK¡ì§<èeösb€2ÿj i¤5“ùfZ^á›3ä˜Êh¡8Æ>½Ä‚±–»—R=NßßÑÀ¯8¾†.7C&ñɨC©ùÞóªi! »¼ÍNFçܬƈš™ô­ô1À§àxb|JE<É}8- ‘wÇFëo6ÁНüèxÐh¬æpåÎ1ì ê"Žâ…;g²6G_ké,`¢“Z-‹‘QÂpbUC– fïMôi’[E˨{y·Øf-€<Ó0ûå,s`~ ÔSª–Î „ZUóN(axš\Ñ|ùLngL¶E3Ï;!”Îb9oŒQHMB,P̈•¥::º¨Ñöpެªšy>¨±7.ˆN\ |#2CŽ9s%EBü4$ ß KÉBÜs¼jÒÙO9PÆ€,%³)G»9gEKUç‘zŽ—0|ž>?˜úõÜ ( ódîåt Oo8×FCs&B{e$[ oáŠWPë)ô¬ Š‘À«A—2ñ\¦Å^èé冣žXÉy™Ìç2]Èx>“!ÃoÊ>OfŒ}SäY¨ô=‡)©'&²$—éJzËé—¾¯½€:õY²…¸›]¹…¦Ä­ƒ&[Aè½]GÇ²Šž^*3Xˆ0ö ßôë$ÿýÇ*||ªºý^8IºöOæ±x)ÉOëΫ*ö@¦ä®¬=Þ;•Oúù*ÜCÅ“/A²´ ½˜%W['Fý«6W:'±œ•q;ïF;yFÊ_aØ,ÙA­ºOµ´²u+á³|•ß*³}CÇhÂy/yº+W8Œ&jè*çͳìRä­À=yTÈ¯ì— 3IɃ´.…É:i%ÑlY<ÜÙ3ì™#KÉv†\(I92åG7ÐÖFƒ_§ŒlfÁ{zõ" ”©cK¤Š\š#+©oòÊÉ õ'oFðIÔ“ºÿ6jè*bôI¾íÌV&ó&ÇùL:  hž‚<—éànA‘(*—Ä8{¬&´·//ŸÛÃ’g‰$|pК[ÃôŽòJ ˜CÉóa1ö¥v7a+Ü-ž÷=^,¿µŃOxpw’Pá—~MûþãçíñßP·‡Ò_Rª¿«ÄZP‰t5î!»ÓýN†9ùò¤üì®òW|eÜZQ6¼ç%«"Í2ÒDi7Ì[q63`aŠIÄ- \˜„#”̓f‡NCøý׉¸•F÷ ý”‹ëvSÿtʹ úÊy3ƾ"ÞÒsÖ6»rFZMŒ%””‡*z*è3Kk ­•Æx97Di ÃúGÓ‚R KvJ¨-9vP§M¢6öá $£öê9®.ÃÆØYj}ÿ=œ"r‹õû9‘ɼdŠV»¨‰±ÏÞžYšš9œÊ’ŸRIopv¯¦û‰ oÊ ÂÃU5Ý3älãb?å/²mšÜ'ùöÉÍõüÀÉ õ…Œ?rn#×…3-’>AA5§ÙëצdŸM‰oúyª†.ÃáJÏû2"Œíç„r‰ýÈŠcD-÷RiÉq‚ër‚ü‡)1BWÑÓGE=Ç…`okáýÞ6–ôœ4üX´Ìgr7çÜC¨Ð‘·äÝ(Ê$œ·3&{^§1ƒj§ÓìÑ*·\å9ªxê9î[câ!" ¾’ú÷«´*Iò¾ÃLP—â!%hL§’Z¡$ü ’B]²&ðŽ+|’¹Æ½0æ´d9âêÛCÅ!-PÆ£œš!g7é, ½Î`¡ñšÕ–ó†ì5f$åû¨€x!ãŽR)«sŸ«¥ ¢®0ÀÊú¨x}yW!ã-já˜-.!ñý<åbäž½•FÅoCDŠoˆ±Ï2WÚ&9WTÈx9ýºr´p¨˜‡Ælûg1·@†ý³&ôKìç©jºëè(â­&Ž(Œ4—&{Tî…Qå€ý®£c;ccD*èÛM§‹à›ì(aØv ¿ÊIòûÙÑMu&óKó™ôغ©~çf^1#š˜tQ£×W=òΛiïTNÿ<™Û¸x†='¯E/¼´£œþK7[YævOÚÏþ©]Ôh¬UN¿Ä¿†/²íÒòcé,zz»¨Q&cGGUÅ<™K¤š_N“kÑë¨e}õÄŒÜ~/î8Ká¢oE1•¥ úFy\;Ó¬>*¼Ù,#‡:KÞaŒkdY% |Å8ÖícñVm·M†Ç©p7Ͷ'瀗WÇWS˜Íl=±(§¦Éµ‘© çØ IDAT(yoØ^߬ʈµ2fÜÙ¹$JyiÉ Òî¡W¤…¾¨:øärVÒ¿*ï‰'åõwIqëSO«ë1AA3‡'(ˆQŸÃL Ç"V læíy2#Œµpìû Q$Ê ˜ÐÅÕ†„T‚€E·Iîà§ÉJŒ}}T¸[±'¡²ÃA];–Î ˜(ç ßg?'D”vPÌœ:¨S‹¡ `7z Ÿ”*„0ã\€ôfÔ„â(ë9î½ÔÄÓDß¿‰#6Ø€jºwÓiÇ+0¥0˜†J>tŠö5ž™#K_f¿£&¼ÙÌšeº]°ûåAŽé¡*ÂX£9:@Y%½F^ᛂr4ŸK{9}‹õWØÒAݛߜ%{š\®Àì,Ùm4´ÐÜFC>“³d+Žw#²Hz ÎTÒûmžŒµ×CU}öðrÔ*™Þ›ÕtëÑlÁÍ1dOlríÔ Á;Lª`,BZZ,`BŒu¼>*”Þ4qÄÜ:ƒ/÷E¶ÕÑá¾Áñ^qÉe >=Û^èIò¦J}Œr*F}mQNe—ájœÂrú½±-Î3F¤¨jø3ìñø³˜ `îûîËÜWyÄJ Âô¤tûN"•p¾«‚ww$³æf°BJÔKCK<ÿ“±­ÐÅI¾ÇW«WVià «´Îd¾žãódZè3,õSÞG…šõ€ûè°[ÖST-”ÝÕAA.Óò ‡)qû\ÍDÚ9‹rª•ÆEÒƒ2ô£´>Í{C¶Ñ šQ¤—ÊrÞôϦ¼^J3Úäá¿쯤÷(ó¹TÈxG9ÆÔl9 æ%háXŒ}Vz½ó½-’0ÍÄH:Y¯ÑýÅb•F¬DQøEÂë!ž$¼+µJ”΃®/-™‘‘@6ÄG'H9’¯;À§@Ú½ ¿:/Ï‘>*,¯¹úql›[ÊbÎÀfª¤ÃºkŠÍŒõÁâ( Q¹mŸ&×$fˆÒ(±Nju|÷‰õµut˜0‘—WÒÛă–«sÓäz0ư¼y†=&(9̘í•0ì¾¾ŠURQ=T9}e1pR+xúF(ž&×nÓ0%9oäë Î€\¦Uvˆ¨§p”ÇÝÚg°à·kæy{'á+ø•UµÙ€)§?—é úÊé?Áþ§<7GV6³yLõPõ¯ë¹UÈxZÊÒY†“§7œ+b´Œœ_ÇyL¹ ÷P•Ê’/yôÁ)qö+•¥m\¬¢§Œ…‹ÿÎ’=LÉ~NØÍ ý¹ŠÍ9LIEõPÕMµÂa%¡fAO„·Óe9º@†ckzæ7ÚxZ¹06AqÈn í,»Üß4ó¼9´i«Ã¾Ï 9Tß±^*=’>*œŸ!G){²Ê•s˜L£/ýY²˜Ksv q¯cKìÓdÆ÷?Ÿ»ç±–~ç†÷M¨'§ÒIXûÊ!bî‰++~ØÂ¡$3›œ>ŸäÞ×®úG‚ˆßL"Ï8䜖ožËtS§Ùë75q4MÔðÐàW{G®ò‰ÓJ°ïò<‡IµpA}+ïÏêYþâòØÅz`::¦5Z0@ n)z—XvpM×®p …)@_no‰0>ØAuoo’ìÜ’]»¼»‚Ë·‡¾<É ËýUãçìñߘÇR î€í j¾’*­C’w4IˆŠfÄþ¼™Ã+¥íÉ–Z$y—|‚ÏXÙ![ÕEÂäìÖýµè ¬Ð~ˆ«'¦oH«"&+§ŒÕ5µ^…Œk"¦>KVF<@™ò° †ˆÌÓB³Å:cÁ&t°È(ç Y±ÝTûYÏ’˜t6,uP×EM;ÔSL’ôÙ&¡¦NÄÿ/’n¨¢g˜’°úþ¾Ü"H ”ÙÞθäUÒ;Kö…Œ«ÏgÒ¯?Na{9­~RÃÅ/ðòůÿ›]/Ý“G9h•¸‘Ö|.m4L’ï¥i瀞«m\¬'æ5ÍgržÌ!"'7×_a‹C ˆ·:©-â-9‡gس±fj誢§•ÆrÞô™!´ÈVé×ÏSÓäÃ- Ÿ§"v˜Oå§è¬*z ÷V1_´§LÔ͘D ‡÷K‚«7b¹gY Ygå˜ð1¬d§G°Ìб*R´¤ÌlÅ»%M_¥Ýó‡ûB¼÷4QâåÃY«NjI0ÎÐ4D©²+qÕtïáŒÎRçRåZÐMµÀf·uÕÚ òŠVí–c\ ]†WÛÀ#Z;ð}Ì“ÙK¥˜ƒrÔ"ŸŒŽ¦ŒÖÖbDcÔÛ뢦†@ir»}–ÚÊ–Hõû*ãkbÐFJ³µ£´lœÂ(§œKí¥r”"y˜¸j£aŒ*zúyªŒ#4ýlCÚ0%gÙeaM¤S}ŽñÎ’]Äèy dlãâÖ-—ŸþÕs¹¾iÃpûJÊ;Wó˜€<6r}'篳1—éóì|ŽWkè’1‘ÊÒí¿Hyô‘©­.S8@ÙY¹LO“›Íì$ù×Ù(9~†œÓìõr,’>FDÔa ž¥ªÊy3‡ù“:8ûœaJš9v$;9oNv‹õíD•}¢úyê䵨ٌ÷,µG9h§S¥h0n£¡“Ú³ìÊaÆN؇ʽ!˰ët,ɇ弩ÖÔÝ•©X=Ç…ie°àÁÛª´ëê@†Ã!J‡)‰Q¿rîóþc•E¬Pë Ö!|Šeprös—½È'Zöäa¥—q¤ºÝ§5±â|"ñ¸«¯³Ú ƒƒLX é¥Òí­€¢fž?ÊÁ3ì …£í àMèpŒ˜!Ç–0\OL©åÁr¶3XEUD«^š€ª¬Š»õ¨‚Ó±<òvlã¢Ñn‚rU´‹R 2G– Ѻ&aÔ™"Øõt©URèrlÏ,ÇfÏõ¢´‹šLæC¯Þƒ<Ãa¸»9—ËtŒ}AHb*¶@Fo2%æú.GJ`®1éõ›»r˜Q¾1I¾|E+uÅŒláÊ«<—ÅÜNÎoúÕ92à*i›—ø>fÍo,?ºaе°QŠÖñÁü;BñÓœ»ÎÆt·peŒ\ø!ïÜÌÛúàå(±2ÌGgÉV7Kv”X%½ùL–0,#X+d#„H°q·8ªZ¼$ó–0ýà¹cŽ9O‘—Î{#‹#ÏÅŒ<»Ü>LI¨ žf¯0ªY²ÏRÛB³mŸÛ¸ØA]mz•T,ú•0ìÞ Ð<™m4H^ž @8“UVOæÅR"ûyʆJ]+Rµl8ÕÐužî´jé,aX»5t«²þÕr«ªBëè1,9&œÏ¤òaU‘£ÑGÅYjœì~‚µ#V"µú„WëÏ-@QZÀDiÁdeGê.±éÝ£÷˜ói±-¹sª‹«ö޼s†íQ…“ïö_æi3F” Wò.ªG•—mªàŽq–Zqà™ÌÕ$…n™cX™Ì/QI¯Ô8!ÝT[8:Á~£‹¨;^®€ ´2žÎ¢³¨­4*[•«Ž¹/`"›ÙV ¡÷îKô6¬¡+ŸKCDÈ0Ä.’nŸÏw W4^2fË“ lªirý²¡ÝRÂðÙÌžŒÔSùSžd„â“)õÆvrÞÜ,ÙŠÅ5Ù×Ù¿šÊ—¾÷˜U0–áßÃ+užL…]Ô†–qe;cZ_:$g5˜„X1#r­”áâþü¦ÎTœ`¿ÑHžzué,Šl÷|Zì"¢Ô’u5>¿…cC”†I²(§‚½™·« 3øƒU£ÒÍFZËyÜÌÿwPçæÆ{;¼íýnÖªíc%ËÊã+ÛQqëT e`<‘”†„ìÓ²¨äfX|%8#ùãÒ’èÁ•­²O&“Vm޵1‹{²à žÏ¤ÔÝÖ•Q3’¬ôs•¯¤WlÒ 9Í<_ÆÀ<™Z[)¨Së¬ØA,¯ÒMÑùYRï44ÞŒP\Îþ«Šd:þÓn:ƒßü öïçD Çœ$u€Ôˆk¯hžÌffÉ>BS˜uår¨ÖsáúÕÂ1ÊűŸ§®ñe"z5Èð%W’‰š82I¾Á{/§ëèxôÁ)~ƒøgÒù6Ô]Z~ HÛ¼TÌÈNÎ1êË>û`¬›ê´È¹lÝ|™4øE˜‚"(ƒ«¼tãP.Ó[¸ÒBs)ƒêõÍDõÒœ$_¡‰W1#{9Áš ËïÜÌ{˜w×sË–’bEK‘™ÌLjN“ÛLK;l7¶·“˜îwï¢Æë+nÃÓ+©Ý •ÅÜÅ d6lñ–ÀæÜsd¹Ÿ!™P­¦³ÃêÝ(;K­ž²H¸B«è« ï,µ¦×PúyÊÆg5¢ªÊè¦Ú «R?œ´ ï÷H¤KZH–@âÆïgZ«-b¥qÎ"©TøIJ”´Š‡$ äæIqeEdJ4ºÒ’çˆ? ˜–ÜBKŽR÷t¶VE¸ WDð¶©p”S’ÔÇ)tŒÉõwšÜfžoç@=±y2[i4„„"¡/4C²ôg0\¥û¬éi"Èê£B¬x »é lŒaJœ®¦Ûí¿kJ1#õ?K­sNÔµÑp„&C5³[r“ “¹7^ C0Õâ÷+cà,µÕt›JØôÁê¡ÊЍӕn7ÖgÈÉd~?'fÉŽ0f×J¯´ K™Ìß¾‘Ÿ1EÞ…›;êèØúàåGS¦Þ¹–WÈø:>¸Åú<¦Iz˹<¦øˆ9Ì‚ù €üg(‡ø>|Ÿ7Þ»¼é™¹M)sk¶,?Ì»×Ù¨«oð ¥H¡Ëñy¥ ò¦LS˜öàÁ‚9'6—édýd:‹ÊgÄC(žTÓA¿Š+d\WEó*ñ†))çºäî›Ç‡±Q!“ùIò Zá ÛRùâ®% 0¬+æ3)zÃ'¨nw4®¤ß½œ7ò¹$6Ìé®rÊéo Í­ºöf±ÞJ£Ø_SÃŽÙh¿ßÊZmK@{ä®b]²êïyÅAü=M¬øJ÷0ËõIÙ0É×8ˆï*®Î(u÷ÃdQNmgP›æÂž·®ªºm´Õã;ø›/ŸB·C£‘KOAm­4ÖÐå.;‹9í?iµ=v£íPýáºVGG7Õj7œÆ-âr; ý9f,0Ô•¥ P¦fïÙ›íWIó–(Mˆ¨…Õ.Ž. ö± ÞöÉ:¨6¿@ÆÉŸ >ý;ç, >7~O“{éæcódöPur,ÚFðì†Ø¥½³œ÷hd ¤ôëo±¾”A>fðn_Má)xú[äÿ³TÞãÒ?ìÂ_ìxçjÞûËY<y_…™'s#×Ý»!6Mî»<œÎ¢rPã^|ðð£û¦°%á7VÂp@øŒ§òô|&ÍŠD3=-f$t˜,#‡¡½P•=ÈQÛlÆøbFÌðäqX– ›¾ÕQÆØçÔ™œ·œäÓßYÑ„‘Å\G¶3ÖB³‰—ø ½cÔ÷{{œfï˼PȸK„NÜq8º¿»]}¬´•å¸OµÂJ»÷ù+͈IRO„ì­ý%Å ¤§FrL²s³24®RFÍö÷Ö4ÈúË_AŸbq FT,“áA–8Ts¦#4Y·QS£ë  D æ76 ú)Oeé_V1!B¡¹çrü,cÞ ö‡ ”a1ÃT+ã!&(h£Á;6}Aò'GnšÜtO°ÿM®ŒG9˜Ët3-Îý2-6j•ÃL9ý~¢ èAŽ–1ðìKí³d+ Q/À©qí¬ªè©¤w#×O.G7m™{ÿfká?ÃZâ7S_Üp8¹½½œÒO9ø|a/|Ä¥åÇøˆ‡y·šîc¬ƒ_ƒtÖlY~9‹ q§SέٰœÊÒ8…ïÜÌËbî G½ši)Kü€Ÿ¿‘z‹õžÀFZoßL§p–ìEÒ«èQ÷8N!ÿ7TÜI‘±3­4VÑ3ÊãÉÓÜšaªÙ“$)¼XsFZ뉅:°Qƨ.‘ nÓÿædmÅ]ù´Õ™`%|Ün„…A7¿æO"T™‡YAá dcCi]ÔtRëzàÜ€‰Q7Õ1¢LØi÷­ú¨há˜u7ã ©uÇ襲˜{$gØ3CNŒhP@$×m$¢êŠÙÌÛöχ(õÈõÍÒÊeTc w]Ô(ð[ˆâ5ø©ù.dÜy \w#?@ÙÉåh&óýìè¤V^â0%“ä Y8Ïνœ¾}%eÓ†¹÷odů¤’JZÕ…PÄ^NSø ¯19ÿî‡Ó\¸¶#•¥øÍÔwy¸ŸòõÜâ?Ã7à·`™Ìóëp÷—³.Üܱ‘ëÏñª2‡~ÊÏRûôæsü¯_ÝÅUø.çÙ¹éÁ]|·è IDAT¹ ×vÈ©§ðŔÓä1*“×%ûõ»^ú‡Œ ÊçÔ|ELUÞú@:»­$O}¹W°‹·,gÙeúå-äì¹A¥Š{`Öñ|yà`=É·½²Ž÷Γ©n>˜‹2™!GwÊÀþŸ!G²¾Åg­–Îýœè¤ÖäÏ=™)s)í»ò™ÜËéû‚^¿€‰»FHï?~þw³Û'~g}R‰ï.Èzüž(Å=òô{iîwXNÄO>õöºëÍãŸ–É­ÆæªçÐÆ¸×(Ê)9Ŷ¾Å¥Ï‘%—Ý_ì`”u£®’F A;é,.’.7½šîZ:µœo¤U&·°s×#×>Ù¦bεD@Wð]”îÂTEÏ~Nœ`oò¸Âåp`’dUN“+SÜNfÆ Y·ÒÕÏS¾Ä ž*zä…K‘7Ïð»ûä@g/§_*Õ]-Z×¶ÐF®§m^bmâ¾[„/Á#p>âkyF¦¸ iܾ–²æ÷—y‘—–½¸áð³7ÛhÛúÈåׯîÚÉù´¯-1 ùheõÎrÞüÛCU„±‡y÷5žIö¸ÚºùòûײttL‹.Ñ ÂUâ7S_å¹(±‹lsª,ÔîÆ)¬¦ÛË]E¾’“LIÀò='æ£þÕ{F¯5ï™î iç€g¦œ~oOl¥’;Mînε­¢'FÔj5ÝcDÔ †Bqð‚<¯²TÙj¸9+éu7æE÷»lኄªðEÜv˜ z[g€•«÷õ?7ÿ»=¡½ P›¼nŽÝ3|w°¹+7Kíʼ!’„lO»WÚ¾±„™äßT„\…™CDŒ¦Y¡›UÂp?åVêZ8v„¦Ýœs9°EÔMµâfWBÆËy£ˆËå¼iá(UЮœ0-§¿†®FZ‡ˆzAJ®žfW-ÚΘsŽU¹UÓÝFC#­Žé èb:GV>“*ZiÜÏ KR»é4\í¦³—Ê!"…ŒPÖ@›_Ü—X†›TE1X'§::vsNúª»›jEùÂÚÍ)Ý­¯çÖÖ”Ëóî(E·¯¥Ü¾šÂ"¬…Ëð_þ€«/];´‘ëdÀ¯qûZÊšG–y×—wUÑóþÍ;祫e°0EÞÉïEÉäý‹YüñåÔõÜzg"Œù€u{9=Mî"éþ÷ε¼‹l›"/-e‰‡àY¸Éí›)žaͽÊe hãk¯ÈŽP*Ô*”W š½.—Ú\}LŠšl…Ê©­6Ð6KvÆ63†)Y$}ެoòнúBÆËé—ɡɩ¯ >`]3ë¹õ0ïò%6m˜ãA("íÁ%–áéÿÀC_¿ÅúÛË)–w|Àº,æÞÿ^VZÊÒ˼pš½§Ù›Î¢”y2ϰ'´…n/§<½ákyzùc›6ÏÝ^Nqª©ˆ·Æ)#RÄh£\…’¶y‰T¸ =ð¹ÎÆwy8F´“ZûIb;†)™'s’­A‰çI6~Œò¸*•Y²•}ªPÏa&ƒ…€ùðŠ×‹Qo-nœÂu| ÉÂKlhY £‰#6u ÛPñ’-jáX>—i5ˆz´ÞQÚ ‹ó·¢€‰zb+?tõ-çNBSÁŸ´pÌ_]d•Wd1WGÇ~Nèôèr¯Ba;cþ9ƒß'€í „d¥žãÙ,+0Ô(ú&ŠÈO^‹ž¼=K­¡H&¡û íÛ5å•ôùß+›6Q• É× žAK\…’ë9²örÚïbHÝšø"ëZ9*ݺ“½·ÝtöS.fI¾†JÂ2®³±šn{HĉßLxŸÛ7RÈà—Ù´anÍ–å'|sм9²Ösëõå]öz;9o0¸Â–º2™§˜y2)$~#•}dŠXóµå5)˙̷s@úiö^gãK7ñ ›a6Ab/¢Ä>éE·dçT“¾õ9Ì¡ÉVÜeÚ"WѓɼéQb>|¹¥…C-22þ.{nËPd!œÞ$^MãevÑÂAQF”S~yZ„n”10AÁ~N¸Oê£âûÛh˜$ožÌBÆKì§<‡S𺺩 ™ÁB3-ÔµÒè/¾¬¯4˯’‰lMX èýªàêŠXÉÊÀ9’:[ñd`È¥¶3ØNtˆÒÄKÒ&(cUA»QÏq˃C”6s8уIv."2A;&>™)ü„«êq'®Û!wO*UݼAºpëaJŠñ:T«ñë<™ôuPWÂpG;™Á˜-ÕÑá¦XÂz}²3 aÒ çÊÜ«˜;k¥ÒþÜXÒK¥£¯»é´*¨±¤IO€0¡© ²ªõCk•îÄG)j¤5“ùirh+fdˆH1#¢æÈ:ÊAÑAô·2™?Km°VQúáðÐn:gÉî§ü:×<¸üþ¬´ Kñ±T®°&²Ì5X‹PË…+;X‹“^çÙa,E}5³˜¥(›ÙbFÒYÌf6ÂØí‹)™Ì³À:>ˆÿEêûW³Þ¹‘wá{;âË©,¥¥b2â7SÉ…q¨†9y1JB»o—(Ê)rî€cúÒE å¾~Êýs/•Ê1z¨*a¸“Zá~z†MPÃL5Ý!ÿî¥ÒF¦ï³›ÎÚò™TkÞK¥Zù>*"Œiu¦„¯‡ªQí4Õ ËXñàe;ÕÐÕηAŽ(a§ÐíÁš8¢ƒå 928œš÷³Üm(êѼÍS䘗Ü2CÚ}ûÏñ#åSÛû®1€}Û"m;ƒkæùd5ÎP"x :8ûdm¥…C3Ÿ¨ÚÚ'(ZlúÛÎ %r¸Ú‡(ºs$ñD\L8# ÝÑq¬æ=T¼‚c6f²˜³q€Si‡TRå0#ÿ{;ƒu ?bº¬>*lJµ˜Å4«C’à]\´Î*fs{8#AqZ=ÇÝsØ{Ó¸Ö½y>“m4TÒ+#Î}ñƒœž~¹L‹ wœ9ƾQWX$pvžl€™"¸…ï¥Ò¤j;cÁFÄcEÂy2]‚çÉTAWC—ÛyY-+ePk÷odmÚ2wáÊŽ'¶½ ðünÂW¡lfo_KÙôÈÜûW³z©ÜÆE[t ´]d[.ÓK¤šó=›{g9oÍæåøµÔž+;U[d°ÎâçÙ)•q'ç·qqS|®:­{‰Ô)ò¶^ºÌ{Üþ‹”y2Ÿ}0vûFÊÖ”ËÀð²Z¸}‰ÑþA yû)·ó§Â³‹Ç„Mƒ,—ÉèYíÌu€Ô ©µùL}Ì/*iñ¤)›Œåq/_Œ¨~i^—EÒ»©6vùYÊá¦å#RÕëçÜý ÕZ#˜~Ê휹©JV¥ cVô\–DìŒWU>ßî#}ut$Ê6Ç:¨‹R2‘Ô€¿ÿø¹¯ ÆW¶.Ó »ÒD¸"ÑLêi¥Ý‘‰—–Ä% CÜu- Ó:Àcp„Ü5tœÔß"Éj½XwòÚ`&+S51ði'jBÅ ý¡p]vrþûh›'sˆÒûd¾UÑs£î»Ý­»‘÷…"ÛÛhØÃ—!é‚ZL9ÂlüÛÃ)é ´e2¯ˆyœÂýœPìWȸÕ«éî¡J§%W+ îôÉw¡8—éLæë9žÉüNΛK©/d¨‚À¶QÖ¤¡Œ£¦£ÄV55¼wÉÎ`¡˜‘jº×<¸œÅÜÖÍ—7¥Ì±Ä®\ºø˜5B6Ã׈ŸKå¿ø€u®îXÏ­ƒõmIzÃ9%[¼œÉü;Ëy³ds)òŒdã1jn÷tʹ­.ç2öàÒ¦¦9RO?ºaŠ„Iüfê¬Û”2÷ÒC/óÂÉåèKˇ¤(%¤¡‡*è%Êc/óÂ…Œç2-–Â!t7ž+’ÁZBãšFyü¥åCƒN/!Ï©ŠjºÍ¤Õ²VÒûmž4¦:WMwmÂM‚*Ä›J"¥,fÇÛ-'jïYI¯¥7RvÎr˜Iàâî?V‡òÂßíw x‚ÈþI‹«æ=Û ¶îwU‡ˆDi¬ÙÌó1ö…£¡®Š„ê}ðo*=ßüH.]®ÂÂ`ï:_ÛÕMõ-ÖPvš½ý”G‰ÉE ì¥›‡º¨Éföõ»vÓ9Fd WN.G 7 ®¢çUž3{àKð$Óä¾#‹nØ¾×ØS.úši Qjì p£bpÕ\‘ÐìÙØpŸWEõ·Jzõ5·ÆwZh 0HËfÖAf÷Å“ä»Ä¸®…\ÊVŠãDât•{x‡¨mk M-™ Œ¥%àC y{rTÍ!¬q©s3–[)õ™ÆQ¸©,mÚ00“p®°&eYc{ó€õÜRË åGU.ô}T”0|”ƒ;9¯hÐQ³×xæë'‹ËdþÅ-‡/]}Œs8°|áêŽ wPÄ3¼–ÊÒ ög3kS-ŸIýŽý‚Úþêí“c:Œ¸{0 Ñ?L/ôEÒs™>ÃÏíebºÎ°g€²Iò <Ù¶™·3Xp&wŒrúUªHÌd~ŒˆwÚæÐV€U¥T¤îš¹U2® uÕtLjÚCmâˆÄËVµÚJÀ—ñÆ+dÜ-‹‘عc“Þ0áÉÍö7â®ÑÏûŸóª ±'¡½[ÑžPÞ)ñ)C}&ï•„æbÐxc¸R–Í=¨mRŽSCÇ Ìë]´ÃU[$1'ÜE$JûeíD­Æt÷ :ÏTÈx-¹Lkëg5)“yâ‰Wø&PCW=±0ð+äÍ9Vý/ÜÚËprK¾Á°e>Á~åR]VZ8aLó$KUâ ó™t>4~s˜Ö®†^B®³_FÙzŽ·Ñ0ªèo¥q„bs)qìãf°É¼=6»1"”¥³¨,å9^5´cî½€GxÿF©\ºùØ;Ëyi¯.=úÈÔn˜ZÇ#ûÎæO®–ÂrÔ2 ƒYOlx˜%»=T]aK=¯_ÙeÈ\óøòÖ?¾üÄ#of3ËXóµ;¡±–ÎaJfÉÎfv’üÀÍ2¨¨áLgQV–é—¡WPS'µ 5Á’§^žË´ú:g´cD=™†Ø\¦µ.S1Názn™»±èöHb²™zŽëçb·,—i§•Ô{تE>õQQKgsÛ¸XÈx#­/ó‚ ‹ ‚A¥„ ¯™çûyÊÚ£•â_G‡WÙzƒÀŽ…JøýÇÏßãs›ó"¿üÕâø­nôá¦_øàÏþ¬h;c³|q”_ cÂ_âz=›ûy+JûÙ8ËÀï÷Ó¿ ¿ï_áw¿Äõ!Já÷-÷Í’¬å…?aç—¸þÇìž%ÿI¶ý ;áw]|gùHë§x’þQ ·3¶‘RØÂ±?æ~7Ê©µ¼à&>n•Ê.§·´…Ï­åcÏm1ßû‡t¬ãÃð•ïðõ?¤¶™£Ÿã¯gÈy…ßý6±6ÅÏòÓ_çÏ?ÃϾÄl?úüí‡xïO¤³øÇì.b| WÎókkùx‘ÏÈïÿ˜›˜{…ô$ýßáëçÙùëüù‡¬›åKÀžø.¿âsJùîë<]A_:‹¥ þ%'—i?ô .ÄI+fäUžûdÝÿÈŸ|†Ÿåòî˜ï¡j”¢Yûïeñ£õßú¯7~1õ¯n¦þô& ¬ÿé­9²6ýùÜ…ÿºã,{Ò>ŽÿÏü›M̳öO|Ž¿®æŒÚtâÆ?fíÖ-—óoL^å—þßù)ÞøgüÓïðõïR:GÖùÂC¼·@Æçú“Ô÷nò-.ý×Çþ€ßùÒ®ÿð‹,lg¨ŽŽ¼ßºúîzøcøøþ”¿»–kèÊaæsüõ ?ÀÇéÄß!?‡™¿Ç¿Kci WfùÒ&æZyþ~;•¾Ë¯-eië†Ëódòé¡J^»í;ˆæÊÁœÈf¶—Ê"FËéׄÌÒˆæ2fÞ’Pi-c ‡™QwÖmšÜ½œ615Ù²‘9L‰©X=ÇëèØMçyvʲ’o»ŸA¡ª™¤5Ië®þ¡™çý« Ñ6¬E«?ì£b;c5tY• ŽùkÑfi3äXeшÒa€³ìrê<ä‘ÎN¬\£¸ßÊúù¯ &xícwù`¢õ ×ûC¢—/©ó÷î ïcŸÃf‡rsB"xg!«'h6ºbÔ¯D4}ªéÉjI³œÇ*`¯o•U.@möHZi¤Tß"Þr]púØÖK+¯òÜÅõ¯¢Ç…‹ˆ… Ý`ÃYÆ€À:iÜ9ÌÆR!ã'ب AsQÏq1¦®’*.ú6OºP†ÚŽ1Ò1)u 3ä8sv…-Í< Mµ;¯j©MH¼A×ydË}]Ô86dÄbe{% æf<øumáŠð$}r—Hµ¢¸H:¿zG|¸ÁBÆ_á›o²C˜PŒ(ÐOy:‹sdg§äøNjké\$½†<ÜC•*Í.jœÝd”ä2íÁ_XÞqûfJUï_ɲ?¤²ÑI¸,æÊpœÎ{&ó–aϳSàHàøe3«QH“äûΕûÝÕh|“WÜ(yp ;àþZ8–É|”S6ŸÜ ”Ó„&=¦6mbåsI.e Ç4'k¡Ùá3UÆ® dÈ—24jÍå}¨ÄÃu]³½((k¥Q ¢7žU߆Nฟf­†>I9MüÞ¿&É–Ácþ"á*‚@Bgñ‰H}ˆÒ%ÊÍÉ Ü1E†!Rй ôi·àjÜFéA¬Œ¥‘V›XÊЛi1µ ,aF|`˜’ צä {<ùZýºÎ3I¾XB2™ÏgRçr—­&Žœ¥Öö˜M”lf“Åc dÀLæC¨Ó{"ÂØ3¼& ¥È—΢ÖY€Àº&Ž4󼆴§.jÎR;M®Mµ@eUÒmŒTŽá¦»€‰bF2XÈaFm}肘<›ëç©wy8ƒ…½œ¾Âé ¹Loã¢á*F4›Ù×—w)>ì¤VP…i«Ð&© ÜçÉ|vs,›ÙG7OÕÑ!ØðÂm3™·¾gáKù~NL“+ÇV‘HŒh3ÎeK²8ÊAgÈüšŽÓ¶Òx‚ý1öe°Ð±ºä%æ0ÓMunüˆV•z¥z©<Áþºœ [$ýM*k|ƒ–à% ‹ÓÝMçQšÍ;:m#P‚­·¥—RPaWØb"•Å\'µ:|ªÚØÍ9³gHÓ;ÍýJ ÃÝT;#!K,‡h¤5‹¹°˜„Ë›  ÅÿýkU(/Ú.À UÅ`¢`˜–À$ë¤6Ê©!JWÞ+ ƒàä?´'º¾L$Pÿ{ïõ}çû>“ØDeeqüEHpž ÓDJ8–˜Y·]á1îÝ®r胆Óé4ö\oô" kçnˆK‚¬žzN¡ÛéÜÐÃb¶«qã,˜žuGC‰J0½nu´!Í”LB4M”ÄûÇ‹ïǯ¦çì¿7â<òÈa˜ùÎ÷ûåóþ¼ß¯_W­­µuÖÕÉ*rnÛ@Òn5ç¶QFWCGˆMëéÔÎÔ@КÎI7“͘þ/þ‹öÑK8­µOø¶ŠœØ ˇd&‰&n¢]TÉàU»ÚPØ6Ä#"†Eq›²$½§Ö;ÉfCl2HøÙ[x@]‘dÂXN‰¢~2ègw §(sGίŠàùÁy_ÇËl,b@•&À6õ:Ê?%GV¼rè0n„ÆçBƒA ×”Õ+kAýT†&£äˆ.¡KPO«F|2U§ÜÈ·d®ç@-íeô5h§VZ‚­ìËc˜|µP:Y2j‹#Ýn„µ:±ºX’ý-c\¯TÒ­N}Ò$éLuPSÈ`GOe.F"¬­¥]Ú2qÁ zh‰á¬£­ƒ ‡å ¡O$B‡NB Ñ(nE¹7¹é¥\´~K=ݳǚ +-„_uÈ‹5kñ§ž~`[5&¯ÝÖŸ]™¬†)i’2ô æ%ã7³A›!2jò2©Zº°QW}mós Êš­Öê°èX­ÔWÑ%†ž–6“+/HC³À¢2‚˘µKؤ¡V“a¼Ê›XÏ-X}”ùÙ-”B2ŒãXÍáÍìQ/è#TIw&‰ŒÁÇ(9‚ÃxM˜a'ÕÆ(ÒC¤“êVê#¬¿\ts½cŒÜ0^Í–Eº(ù ³L†Å•twR`›âñî:4ì Fï+º¼Œ’ÕÎJ­{RB4½©¸¦6£ÿf›uãOíh“­¥º¥¬Š†…©[úŽÝWÉ6ñë7Úd{f:'ÛÐ/íÚo¢I£Ý±IÇs]Jä\{X.jQ•ùò1Ð@K;µÚÝKG\Ä€(²¨Q¸–vùÊ„BêL%D»¨*dPF«" ËSN¦Ú¶µRßÄÎaòeK¸†CV™›ŽÊILt!)§W:á”⦠衢‰Vàòib»t¯fÛ`‡µr告¨•zµŒõ´®â¨‹A­h²É&?‡Ñ.ª<Tl£lØ&EšdF@¯š ­ì2RÒ÷»©ÌåìíKfd* Wè³J 4¡tôœç¾F§ÄGÉQáßašÔÕ>1ó`)ýâUt"OÊ'MAÕ{9ˆïaóVvéÅÃx§IÕ4„_3R׊p?Ï}šãµÐ  Aeã,«¦Óň‡ƒâ:áE ˆÿ2Î2ÉÄ­+]’p•m_äHëäD-ƒºëOS­• ŸÝ/+èÑI¢± &«è%G.'X98Ò˜‹}#ßwÕ'1Ꭰµ‘Ÿ“ZÆt¦Ã‰¸:*ül± ¥PžË<ÍÃë霛ü ›ƒ°aÁ$•ȧ‰NšÎ•ÌFE»ÚOµþÈ%TÒŠæg·1ÚQÒ«Ú²fû(H)ØÆMTFv&›XÎuÊ`ÜOµ"hå:(Ò—q RF­8Ú5KÕ¤VLÌHMÌ´Q§¾GÕ¨™Fõ.éL…ñA½‚“X§ô+… *”DŸ¨Œ¾N­­úŒTKÎ\K{;µâ§éŸ†¢½¸8Ngöæª Q 7rÚ}lP[¶šÃgÉ5“±bŽ/á´Fs Õ=N±ñrÔ™×FA—ÃCdœeö´åeŒ·Ð ‰¨­&£YgUY×K¿cew:~#êŒd€C<˜Ëٗ٨[E à)¥¯Ì¬3·‡ñàW]OiîÅ0öQ&4KWAC`cir¢í Ñz5½…nKùi©[2M¿ läå! i¶›QiH#ª…R¬Û8ÔÄvÝçÓ²üo>>—ë2ˆ?«Çz­„þ5D†xx ÅC´ÄU‹Æqú¸gˆƒÇ ÉåL¨† ÑÏI•i>î¢ ž.Á»œ‰q‘¤éëq¾O‘¯§óq ‘o×iù¸çUâàAŽ– ë¹Öîâ[J_æ±9[®|‡è*!êgÉG¤-ç~^:Éý…¼¹’Ë¿‹Sùx—“3ƒN‘Þ@‹›ÓK9w‰y9Œþ‚{Ų[ʹïóŸ¯pË|ôc¾"ÎÇÌsræ'”M‘¾©|¼‹ú1þŸœI'y’û³“ l5}·ñÉ­|š`É.žx‰ÿ°…ïÞέ^Âò³ž¥œÓ²õK²'Țǥó•,ÞË㔓ØiÜgp.&žÃèýœ|‘Çó8ý§üãÇ|á.ý34Ez§þœ04ÎòKJyãY.Nf1‘ óK§H?ÇÒgØz÷4i ¸Iâ®ÜÍØ‰N’1Hῳ…¦â;‰ë?ÒñÊT’¿ÄÑíì<ÀºEL,åÜJN|‘è|4DAÓgX±Êý:÷Á(ûÆ7|™¾—·3øõ‰šWp§Œ|ôénáJÉaòÝD_¤æcæåqÊÍi7ÃIÒîä£EL¬àLNbL>΋?áTâ8Ü ÿßý+žù=Þsû eðÿþïzÁï󄗺ļs,ý1_ÑI«àG•ì»OªèÚÄþïñŸ2˜ü1_YÄÄ,ŒãXËÁQîÉ$±š¾¿à»ÈH~‹Žÿ@÷bâ^°p ÿå4÷ýìÓ)ÌãÔ£9ÀºÇyéküíZ^»‹s¢à?óý#<ªžæ^`ÁIîOg*‹‰™'9ÝN¶Åpžci çùÊ<.1ðçüHç-¯µQwçœé$l{ˆŸq·šÚ“gغ–×ñD§Î±t=ó¸b“YRn>>§C¥ð_ ·œý§m4·Éˆ¨”bK ¹jã4‚˰6 ÷Ý.’°JWš!Ĥ1¼íäg›63–ülš×œ²Ðîòn‘ǤÊÒVô_ÍДv¯)¿“Ôˆ©%ã†\ •8N±6ãºL¥øöw|û­ò5ð%ˆÏÚb%.Êy]ÛäzZƒlib§‡ƒBVÂxÕ kBeÒ›i†ßH³ØÒB•”&<@Qm}”i€)s&á4~j¤¦AŸŸÝúÔ²Hh¦±—òjrí£L.®W4ÄKgJ“%©”ò8eÜ€—p §‡£B€f¿ÿ6„!F&‰­ìZ<ûè=Gõ 5täqê݇"¥+h¡¡–öÍìYñ‡g œÏÅ Î.c|šTÅti<›IâÅYüì[wSÙLc¯DW𿹉®ç€èprwT{*g“™MìÔV8™þ:4À—tA©."V„ñúÙ2JÎ1J¥ä$'PÙP$¦bbdKØCE¯<ˆ¥Ê’_‰9íšï —Rè¦fÊ €ÚAÍ>6”ÓkÑ.öª9Î`RݹJ£,.½„%`p²Eá)@¯›!a ^šB 5Ôå›YY7>Že›4Åd¡J³ÕÅ0UÒì¼i¦z™B%ìê:m„ñ²ªW©Á«šØnù™àcáï·qܱyºÏÍ¢E-¶i DÍvôg,쪉‚— ÷W«†î6ê)ì£LKs‡xÒïÎ8ø—L¤p—˜iZĵ‰è¡ò#Cê"'ÍÁÄP”‘–T{eùéôwÅ+^£?½¸\qÀdo*°­“j•dyÌ‹õ §‰}”Iû,"ÉÙëét1"êü~։®s2LþqŠÅ3Ôä®Xø§üã)b ”7~‡__`A%ûNâJc:‹‰,&$¶»—·ÿ˜H“ߣú‰|ĺRéL¥3õ#¾êäÌ‹.Øo}{Ó6×FQPBÔl?ÅC“äV~H*´E°˜d]‚¸‹‘)Ò5Ì©§U%ñ#´³ž"]ÍŠ!¾ C’Ã… õ¦†|(ÅlÌ MZ%khÌ!Ö¬áÌ{²Ùc2CZÆx·a‹ùÙ-ËAëcöw€@ýÁ …2¢Õ‘+/Jì;)Éô‹½”7YÔ>9ûÅq(Dr{Þ±°"%&Ók—Ĺ2žè§´ñÍæC¬¹ýž€åN~³rá[—ßO¹ý‘™Å¿Š“ ÷ý³+‹ßb33¹Nb"+RÎ&gRÓR¦Ì¬ÒÙ‚ž:ÚÊé]Íá! Š9žÁd§6°Oâ0ñn*ÕôˆÕ­îРYšJßf>ˆwfö~”UúD?8ï85]Z}U>Ãê ×ÓYB´†KˆJ! ¯°Ò^ʧHW²°^YX£<Ô5ÌÔŒQ+#i×\±†3­.ªD‰ŒáT*Š2Ž…Q‰aè%¬S0´•]Bgu;鄘fˆGR™Vwî"8Bô£Ôe xn>nÀ© } gÌýôÛ,nÖ¥Ià¿Ý]É.¥R-¹..Ä ËÑCºàd6cË£ßtc‹¤Ÿ¥ß*½îÕæêµK³çi²¯“_O«b#4h¯i’”LB€i6eOêZ­Î‚ú(k£.›1¡÷âÇ(U^‘Ö zZ]ŒŒàÒLFk­,Â4Ql¤¹ˆ €Xµ†CZþT0°Büœœ]O§ø X±ªZ÷±¡ˆ™<¹‰ã•ƒl"¬52R™ù Ô‘~VsÑ*<”Ý¢;1³Û©-æ¸2%wUVlÆ”yˆå&ÕEÕ!Ö¤Oó1üpû#3—ßOù w2Ä+§Öñ1iK¦æÈ̪)gû(»›wÞqœ%÷Ù™í}”y of—p£Í4–Ñw–\åR¨lx±Zé«"ê#¤fKª,}-¿¥^ÊGÉYO§rË”á¢{@ÆÔˆÉ`›,uQ4QTfñEM쬧UŽ$:Œ*ºd>ÙE•‹¹,JÝ%©.ªšiÔð°–vmqVsXªj†E\f3&™[VµkÑ3¢ÖIum5t¨&ías]šõi¨"* ۜР[ †öÐ×Ü||~×ë±þþÉ"{¥R¤x@Óô”\í´ì| £¦Rœà²eIµÒôK lÔ~m¬ËÌ}mÕ.yÉÂ.až“Õëû|Õ íf.ýJ9½âM´R ÷~ªõ‰Ÿ´Õ•Y¯î!"í”Ú  «%r=¢W˜$ÆNª#xœÄTh‰×?Õ`é%ÐQê¤ZÊ!íúeL® e´eF¹eÿ¤j›ÊèSŒV]:~Á`Çpñˆ@}:6µq»Øº•]’:uS)Ù– ƒŽß|dR/áy\œ…gÙàmxn‡/ÀÛÉ7SÓÜÓ—£) 2SœÁd)ý·§Ì™Y¥E¹€¡;ùM?¥ÊotKgJÒ(É’z)—Ɉd"¿ÕÓ*ÀoŠt}LI£ Ôšî!2Mªè‚ò’7Íq}rŠ2'_Àü4©T¦[h¨¢Km¨Pµ°º”^ÂҜɕߴYù ?¶ðÀ7ßÚÓ°tÉÆÈV­2ï«;PZ±\Κ†I—U7j=­º"z5uiò4gK¨½‹ykÓ;biÝl ×ÍÇçòqë·z·c#D¸!ÍRw¦Y’áR=cE¯oئVI_¦ØØ;'•7$6?!Û1+«‹²íÒì¾sõv¼Úej„RN¯—°ðs âd©gÔ²òÖÓFA>Ò1a­ØzªUBw4”¡jÿ0ù¶)Ä]&âÍ+×£…ÅÛ\@m\-ª7r÷‘ñn9½NÎÊkµ–v5@&²œ^Ý:ÈÛü„öS]Ok€mFü`›jŒì¦Tne?/Û\¹EX›Ï°ŽME·Š®­ì¼¯Å1›±t¦”©*¥ê®E6ƒI5ˆ^Â+òβâ¿w½XNÚ‚ir¹ýK3a¼-<ÐGÙ;ÜýÊÌ:‘3]x4-eú7Ü d11@‘ÊgÉ-dp’ /añPò–ë|]jò:©¤°‹*Ñý}ì}œ Õ¢šÎ:ÚÚÁ£Ó""b#ÍÃä› /aýÝ‘­Ÿ®¼ç­ù\T%ÐÓt4Әè“X5!|ÃäkBXC‡ººaò¿ùþìÎRM‡:l½ Æƒ?êLVУp2]hÙHæ3¬lÏaò%èVo¤°Jµz™$Bl2Á7Rè½”¥"{—¤øCl (À6o2/nØkäÉùòJ·3ËÕ\_Ç&¿ÎðÚ5ÔÎñ+½¶-0Ølgf‚ý]®ËÙú_uZÒ½Ïá=”ÚÖMFÿo:*ƒHi‹­®ÈìUå; ìG½…ºœ™"NNÒŠ&°D8–vÐr¸PÓö¿™ÆN?!!Žr"ÐZð’1\ÐÝxUØ?ŒÙS28H¡Z4í£Uù°™b<ÃÀÚúèûÖRE£r²ÇG-¢ù s1¢ýþËlô³Ûà[ ías>âÏ"/†ó›KB|̉÷\ùä[l—áç° Þ…{á—pç,RG! >æÝ÷‹Sâ'f ã•ë‡©Š®GSŽþ`Æ'ŸŽSäM’!‹5L©LwS©ÞÔ nò¼P]Õ0„ÏKX>LÆ:D?Ía´€·"¬’q‰LŒd/)çu½^šji—5¾ ‰Îj!ƒ:{úE QÕuéBØ¿^O§i¦JóÍ9Õ꺼zJs*6Oß×'§±Ž¶C¬y™R† £Õ¢Û8Ÿá &="õe62‹ˆïÖDÇÿøo.÷7`e_ “­ïÁrDNã*ËœýT[ج6k?ÕvI„E0U¶Ã” ¸ê‡¤òGì‘"Fªd‹ùÚX2[n‡þ9Þò+@H© âµ·Q§åFüæFšsACŒáŠd–ѧ%~’ Á<L:‰EðøØ+HI>ëåôjÿ«wT0’\ÛiT4‰ª`„U"£+p²†Tè›2fÅb6«DUÒ]F_€’FÅq´S+tDût‰Éd,+'ÖþrzKˆêÔs›Ñ¶]ÞÒœšQg]²úU| ÊTä¿«î*†s›7³ÇMt”œ0^-µÏžßþìûÛó¾ü_RðA \ðü ÁÏ  î†>ˆA:| ™Ìç"_@ƒµq–©$d3¶Œñ3:‰Åp†ñ>zÏÑ &kißÈËã,«£mšTirµÊwQÕG™¬ ׿8ÅÒ2(±­ŸÝÆT)•éý¬SU_ jv5H”ºxjIu¹5Í$! x>Ã"ïè&‘vb—ºy,~|„µ½”2˜Ãh¯kÂ) –n<•·"$‰k¤¹—r‘;•+:Ô#N‘Æ[CG:ÓJïÌfL¦—u´I ¡“ÃÙÄöì–A³Ž*Ä&­*7q¬–ya`Æ´Â*³íÑgº¨~HÓí¨Ý´*Üz:m!i¶¡¢éÏ’V‚‰[ï"ÀÜd\N¯:*?»õâv'\=óÚä‘9×`é<(eQSSIsBøý„ äÓN­â|ìU;åg· ‰è¡¢‘æL¢fh5Ô  àWÅ&©Ùò³ÛAÜOhŒìc¸û(òïg·¢”%XNo-~v«‹:†[*]¡Jeôé>ÑCfzÛI‰¥~ËdWØ!5±Vp=A…œ|?¬Rq_ÕtöR. ³ÙÑ2éPàB5Àl¦Q¢WÍN5ÅÚÃæn*‹9.‹‡ˆ’ŽÛï™áv˜ÀI8 cðÜÿ,>˜Ç™÷sY¤-™)4eRZ¥ù\Tu,dðq^üæÛÁI2FÉÙÃæeŒ+NÓàäïî%l|cÕ^˜>Õ¸/Êb€"«÷P¡‰¨|ßë:ÊçBG%6ƒ¸¹+rm¥^sæbŽ÷RÞK¹“X#ÍÚ$5Ó(ë/eR«ª¡CÌOU/}@Eµ …*æ¸h¢ù ËîD”kÕ;‰É¸˜ã™:‰éÞÈ$QIw¼u ·ÒåkÜAË>öf’á—HQûâsóqCU,‰TiŒ Šb=!`›¥)N9Ð*HüÙ~Ñ69¼ú}+’ëªiél³cW¶¾Þ”½´9oÄ’4£Q‘ëd¤TBÿ~Ö©\i¸o°C}d‹¸!üÒZj™“øT,²*Ì9XUE—,3‚øLRÌ0ù4CZ=­‚Еk•I"ÆJõ>ö äÈfLÊS{Õoà ‰Žu×é u?1`ÉØ/1“DŸÍLõ´*Zp€¢c¸lhÔL£èŽÙŒ‰˜`[¯“˜¿FÉ© '‡ÑI2”Ï+Rœöò•tû]d¾šƒ(î¤ø?¿}á ÿ~fà¿Ã(ü.@:|úm†á×Ê|.^ަ\>žrù| ;ùfJ¨‚E“˜Õó¹˜ËYUÓy¼Z èÄhW–t=­ßL ©cè¥|ÂFš«èª¡ÃMTÑYcd{8XFß2ÆáVE7ô¼~ÃÉ,£ÏI¬A¡kÕ{A·iDt! x½žÖA h ák£®žÖÎrzå×ÞG™‡ƒš[f3ÖN­ÂSÜHó$2Ó'Rë£|Î^Êe8¢-Q6cåôÊ=Ù„ªšR™ HET•[péŠÙ({x±Fe³"2ˆÏOHù5cd[ÎÝÑ›+þV±¸>ê7ÙAX†7ÑK¹v÷–ÏúìtÎX](¹Jß×vLMÕ1JMŸdš9[µ3ÙÆ“ÉT£YßBH[³•4VsòvL³×ò;Ô¾ˆ× ÉbM÷ÜÄN­Z>iâ“™ˆ’ŒŸFC%ôg3ÖAöË“d4ÐRO«hzŽEÇJÊ´Bìs9´Ðϰº%!ÍŒ¹Fp “¯¡¡~hú§kºŸj?»Õ'™ÃÖb§ ˆ,ã§u;µ ´ôQ&ë#!ÍÓb¬4ÌŽaòWsXI`9ŒŠ×'ÔD8J ™ÁÓL£“˜›(—«xêU\ƒ8 Ãyø,‚_ÁÏáçÐÅ™S¹Šd¼}ÉÌíÌʼn™K90Eú·Sv´S«¢5A–Aò¤÷’ûŸƒøEæWÒ ™YUAB?»;©öpPîM+RΪý ²Eù&>öê\¿’ ¾.ª|„¨¦*ŒW§KU\ Ío5”¦XªfÏÙƒŠ…‘Ïð(9Lz Ëp€"/á\»Ø*v˜ù WÐsœb àtãÉv]“FµkŠ’‘€ÌKXWª‚žZÚÇY&Ä+Ÿá¼¬«ŸÁ¤R7Õbª·.£¯’î^Ê+é6m™6^!üBnR0nÈŠu•4¡nZE"ˆïZÅÕ’fÚ,3'Ô-RN¯~ª½›*ŠB­®#\(¿aýºÁò® IDAT\cóSý§žÀ¶X'¹ÊrLν¢5;°ÕF¡‹*-ý‚ ¤kѬÆEXQÀPaqÍd†ñØ¡4,QÂ0ļPJ©‰®ž¦+a­ßt¦¤i<¸žJ±jb'$µØÖL£4æÊ;gÖÍk›ÖYHŒ‚lѧ°mqBÔ´R¯®H6?2$ì FÛö$ÊáTv{!ƒŠŸ7-ÝYrE®“áì$4ïcC:S¶UÑÅí!2IF§²˜ ÖÅ7ÿäÝ×É7SϼžËYNœ·á˜oBü g.äN“šI"•éËçS’¯§¾ûgŽ)Òßq¤3udf•q9ŒFð¨„P·ŒñA »©Tb¯ôÔzæ>6tQdKÔ"•ä3üƒŸ¨Nbëé ¨–öZ”ˆ(÷)‘MBønÅp*ö³–vIUÄ@:SíÓ‹ïa³þådØAÍ(91œëéÌa4†SäýýŽ’ãbd+»D ”Ÿd‚LT–Ö^ûÔpëGz‹:Ú´w©£M(]ƒÆpª?K¹‡ÍÏš&´NbJòl¡¡œÞq–éŸâÆqøúØk­'7iîŸïÇõ.MË_;ý*«á¹q^Èåkóxj ‘!òòÕúÇqÊÃIA$MÜ¡žö±wˆ®qœðô8N ïY¯õqœEúO¾M6ÎwlÞN˜ŸêW”ibL–ó `§qr:†ÛŠ2ù†rI i²HæÞE|žËåk!6³è ^_Ñ< Ngj—¶²ë Î" úVŸäþRú_f €áWy¬‰Û~ÄWß ô‡¬O°Èâ½þE<‘Å{¯²zW\Œdñ^ïÝÉGXÐKù;äÜ•gØêç¥ ²rùÚm|2AÖÙÛÙYÊ/ñõåLfµÒjÖ±|˜ò›Ø©l‘·Xé埜Ģ|ñK°nŠß©¥ýW,#û,¹q ÓGxôN>j£®€¡ &Oârr&SêþW§ûnHy¥çÓŠGx½ˆ[¸ââäŸðêqJ–pþwhéü÷ ¬ä'Ë™˜Ï‡—¸cŒ %ȼ@j“ß"x‚•Ÿü·Ûþaèϰ.…O1ññ§óp!õÓ ï9R'.0çà4ï|zw*Ó÷òöÝ_úå«ïþÉnu¦œ™ù4eˆ/ý>?ŸÌ$鋸Õ?ó啜¸“~D:É—øú6[øî%æäþø™›(Ü2Îò¿æ/ÿžOòC”™ÿq†'qåqêV®ä0zž%'qyèOgj¿úÿé6>Ébâk½q™;rM¹”s°ð^Þ~ˆŸ†ñ–ñ“Lã,wûÿ5y™;ªèJ’ö îí¥<‹÷þ”¼Ó/ð,ÞSºˆÉ?ä_ŽS¢ò³‹ÿ«™ÆýlÐÆh=ÖP\E×|Ç!ƒ¨/óÏr×üLNNS¤/g|)ç rû;΢ýTßʧrçÚÄÞïò—¹ã¶>ÄÏ>"íÏùщ¾CÎ<| ÷3üõÖ‰D£o‚¬t¦ò~–€“3YL|¿-!úC/`í®÷ÈÒº1'—ˆÏñãßHÑÙ¬ÅMÖh(jï©­¶)ip& ¾2ŽMýfGc‹%ˆ #Ö7Í×vh”͘F‚ÆDCm™žiÒƒùØë»Æ‚eÎuý%DmRkâ8d†]C‡Œ”ý*H«Œ„·ÀqŠdvQ¥U[L:RwåbDÑõåô†ð7±=›1Ý'.Fªè*b@¢q14ù)!*5˜Œv²×J}‚L½T9½Í4–U¬ÜQ¹uP£˜Zmü5Ϭ¢Kp5dFò5@‘F|ŠE"A¦š¹Fš½„žéï¥<Œ7Š{Šô™šD–¸ÕCd+»‚li£NM'ÐJ}G£éL‰Ÿ SÙÍÅâ>Nñ)ò^™YÇqùí”wgÜÁ»3Ž•yo­¸çìâñ3oæ+¾udfÕ|.Ê*^ÄúeŒ{ O’1IF5 2•Õ¢¦Á g2Ë^Dî!"ý—Ñ×GY£‚|¤v’„Kw‚ÎñòW¸‰øœa¼ƒª·[ÍáB»¨š"]¾øƒ2(Ÿ$ã×UE×.'1?»•P,ج‘fE>Læ0ÚÄöZÚ»¨ h3{ŒøO±Â2ѹí¢ÊèÞ‚lÑ…6cû49W¾œ^Ãx+èi¦QS_ÓsKÆ(¥ZKV“–ÅW2„ßÅȵÒ›‡yá±ÉGP9#vèzë?C+·'†˜tã$ãdK5ÜÈtŒR+ðÞ b«aØQN¯}Vå³€®~;p5‚ëZFÆœ»#ÍÙAÆØ»ÙKšâ*èÑŸz/å‚1´âK‘*<à Išä˜ñËÙ2àWU(§W~?â8ôPa­\iX)!Zy]ŒÔѦUIßÔòª$ª:ô´FìK‚ËéK¢†EËÿBùZœÄ²SΖ¬»uÀr[7y%a¼*:Î>ÊœÄäó«A™P·28o!$FæO¼Æ«ÑÁÉi™²¯Lyëö%3‹óâœå"ó“§Rð¶ïò…”(îÕfÀ|.–Ñ'BüDTlT«$`òé¢*S jѸ(渹šy jÊå¬JZ]:žZäi¨+Ч’‚Mj6TÑÕJý>6ÈDéYC<b“ŸÝâÊ:ˆkE â“›«œÙòÞ|ÜË*?i6V^Ô.Ú•b×&nHšS ›ƒû,/£„¨¶f¦7×[ˆmwÒj+å­iK»ÎÃP•IT{[וfÜšK«EZ<#2ý“?¬|Kµ­§sŒl™bˆ\SC‡f/vh¯} · Á;¤ã1\dY.í§Z3^ k|4@‘‹GÕC‹0½ŸêúM0®<â„äk‘ÕðP³Á"d*_G›6ÔZ#¬UÃa1œjÅNô±·œÞZÚÅ«6s*9zL’ÑMeUªs":‰y8˜Ç)ñ(î=l oMÕ4“ÄÍ4¾2³N±–rq%G-Zy¹ŸÒ^ʳ˜à Äq¤-œÂxs9Ç¡7UC–œIm¡Aí”"u<Ç©¥îJ˜‰ ãÝÏ:Z‰Éz¨ˆãPk;L¾˜F.ÝJý$ÇpwS)û«.ªÚ©â½—‡HÏ㼨¢¢c0‚¬tÕ*èÑ(O eé¥4t­¥]ÜôýTËÈÊG°‘æ*dBh"@dRèä„>Q¯Dîû©V]”!½Œ¾€ÆÈ6ET»¢SäÉ yû´URzV¯é,•tSOk!ƒz/{ƒøÌ–÷æãsúHù­S&[t}ÐÊî?v /ja]Æi)íØU «´„þr¶÷=Fé18FÒ\KfýÿÝ%ôfsŠ]VjIZ‰õ|½KÛ{g_ÿjeÞΔÌcV•2cÃ9vSÚS1û•­ ¿ðzZ=|T©T¨sµËãÔix2À^%7ŠÜAMÛ×ϦƸ}ìÁ%œÉÅHùÐ+×ö|†eä AØ«eBw½‘ªšŒvTÉ̘K”EU S5õ„aò4éÕú(‹°v’u­–_”0Œ.ëÓÕÑ&‘²zÁýTà’Ð~ª{)áÜÅÖ‹ÌãHgj?Õ!|Ò¥©wÑìbë6WÒ=MªÌœ•UÑ%Þ¼,”ÏLÃÙFÝYrâS¤¿òþ:鎕l)Q¶—°¬ž$žÅJÊœ`Û%~·ŸÒÔÔÊ3I­‰º.v]E 8‰ÉJjŠôÛ†x¤Ú&§È3eL}s-í .Q2d%œÖÅ ã¢)`ÙO1 þòkä¾(oÀÕÎãT¯Ž¤Œ>]ÍI2TÂ…s| §‡xD}³Ò®åG,ë&Y@éÐ8Z-µ¾–s˜~WwŽüÇÈ%§œÞ;‚ø$1D§»Ky˜!|Ín¥¢G]]Ün>>ë}Ÿ|òIÛxmÖmÝ™"aʆ¹öÉÏÄØ§] ,]0™W0Fï¿u!¶•ŸY‡rëÉiÿ à*yíÌ) Ƭ ¤10@£<ßt)™Ý1Ìš  ÒFX¢™ëh §”t­ ò,ÐÖÛ싵Ü{8ª™¡‡H7•Æ30À¶ [ÌR«1‘q^7¯`žiÌu‚l ]®B%D²êyž2~íÚë]¼„…Ý.¶®áÖGµÆzNO–-žq¨Ó’ÇQG›¬e¦>JŽ2«%#DCSÑ š Köó:?Z4ÝD•†u'¿yž§ä¤®a-¦j>t¶±2¨T}íôfVf| õ=_îJú8&ô9†S†÷: cK(‹Hƒý¥TMó–W¡*«Ê›ñÑ‹ËóPú»U¼.Šüòeóh^Y5¦–vcíhöI1V* ˸°×Ó*.‰ö²4Tf\íUŒ Gã:ƒ¹Åër+îK;-ýHª˜¹·£ý|?þM_Ac`A˜lÃ7Qû®š\ˆª'.™EÇHÚ¸…×Ìñ®%ÎÂf’àX¶׬¿6ÎálëfYèšWû¬ùÊÜÝ:ÉS¿‰í¶é¬ºÑÈN¥6ÛÙ4í‘áî FNêɤ€ð®Ió¢>Ê”®Â_O«v¾ù [ù2Û5º©¦ÓnqÛÄN{¹Rñ“Ǽ$Vù Ë]"ÂÚBw±µ–ö&v2(´ßIl?ÕT×ÒnBåq.$_®z]T•ÑWÄÀVvícƒú€áIeô È‘o‚Ì™š4ÒœÊt€&¹X Q[ÆøéÅ?K®ú0¬tGÍ{)÷ñpp+»¦I•AÆ$š"æ0:βwg‡YÝO©¼¥úÊ$ ILÖÓ:I†€%U&õ—B°ÌeMgJâYyô õñÁA„Æ|†Ó™Ò–Âp^²˜P}ÒëÇp>ÅózM™bˆ„¢s¢ZRFßéeôùÙ-3uóÐð0‚§›J'1''ôšªúuÁ¥²þSV—ÓNmv P¤MI;[hÐX«´R_G›’æ ¨õpT·¥ÔWÆXí¯î.@¬’©\1+®÷_gÓsóq#àX–Î×o盂ÑÄv]âû » ±)À¶;l)$ÃÄg/'&˲,¼a¸×zÚ¦‰ÜaœäsaÈ z‚ ež;—ݯ¿|š¯ŠÎ§Q›„º¶)ÉBI.]Ti96D»aò;¨ñ³[N-F* €ˆòA‹&`‡æNÚ¹cQdÊ–þ/6¼±¾#;—³bº÷PÑK¹Ò1R™¢ Ž¶1²µÍw:Š[ãJ†dž"O=Z¤t„šÿhÒ%£ñM~vçqª†™ P4Ez-í!|5tDq+]°‚¡2ú;-á´†rÃäËH oá(<:u£äˆ ·šÃân¢ƒz8 i˜üI2´d{ »‰**Œ÷q^LgJ'<È¡G]Tmäe%qÈ?I„Ì!±ò_ªéT¯y · æÅ«°¤‹®ß*æ¸Nškîb-ª_n×A¢#û(ÓfEÄ<1ËèS‘ÉSçYdwYmi#’Á¤h#•t7ТL]¹‚*(’H@§®ˆ¹"g*Œ´‚îu#uPSB¿,•þ%¯:åžHb¬±d+õÆ_CàV¿ 6¸F½sóqƒT,û|Éòª˜uK*¡_ …lEm“@>Ó?¥ùÙmš3mm$Û² [Òr…w[¡$IãïnùÈÍj˜÷µk¹d®aµ€i×ÒçèHYY[ÒÅH€m"¾k §Ò®¹vòÞÆ–BTFŸ‹a•™c¸ÇÈ–R ‹Jª¯å´­ÿÔ~™ I-%i¨k`[-µ´ïa³*JˆM’^ láÔ3º`%=®§S^MS¤ïbk&‰t¦rÕÛ5Òd‹xöÙŒe’Ðâ¥Ù"£ µhôÈZBK° ³•>­ÅËWA’´Y¡Ì*ÉÊùU0‚ËMÔ°üì–GÆ%~·–v-ß/òx§æsqœe!6’SFŸåuÂuœš»N¥~(ŸaGERØC…¼nÕkj86IƈÔà žÇ)ñ…ˆÊ™+úØ{ŒR3ò4ãDͦl\«#Ç;¬â”¦î>Ä&º+ Êâü$mÄw®5!œk#A “Ô^Rý–þÚUcr¯‹(¦vj5Îí¡BAéڛ狼 ¸H1­;¢× ¨ƒšLûØPN¯EŒ’ã!ÒFlîŠÐ܈â)N’/{û(Û‹‹(°DB"™©ûØëco=ÊIÙNm;µ•t2¨å»Z¹ë®§Sîvf:š s3{dÃ*e®¬ënZÅ@¬î>ʺ©&ßKX(W5E ¨E«¡C9O 2Õl‰«=DA;dN“úJÎ$NbØ·†C“dœç¾aòÕMVÒ­›?Af:SM’aX…ÚhžYAÏ·ÇÏn1ÝCl’ ·•z­Ú*ùʧ%Gê`Í]WsXŽ\¢Þ‰XÁ#{bRªÊ1œÝTÖÓ:Mª\üki¼”͘‡ƒ¢EÈ ¾˜ãâëéË\%Mv‚²¦>Ÿá(n1 5ðLÙHs §X‹Âº2˜ âÓ|ÕÇ^ßdj§"Ý•X£’F½“+ü$mÔe•‡H€mÚr•ѧ Seê’á–Ûf®}óq#ôXi6ªÚ’¨Z\·8B²ˆK¾š´è‚îkmÚÕ†{)ob§Èñ’^i¨h?ªg²0°¤%ô?x#U¶5W)@Ÿem̱ǬY°,0Œ3ˆ® N•ø”¡Ÿ#“Ù!¤Z;_™þà’‰€¿Âib8iÎfÌ0¢m¸ÞNÔðaòœ-àuMÒ„çë ê!ôI¨ò•Ó+û ?»çsq€"7Q9‹of†]Š¥ÈgXšÙ›¦I­£ÍOÈðrUnE€ÆH·ƒš! ò÷A†êoÔÃõR®vS¯2éxž§Âx¥*dP³JlZŒyBmÿEÐ)-æ¸æi.F´”g’Pþo QÜ€šrxøýþ &Õ©8ˆÙ"× m#ôNbý”ªT'ÈÔž#AæYró0™Á¤Ò³4—H&"ÆEó¢?uQŠÖ²’nqpdZØJýöIê4Ez5 ´h´è ^À[ù ‡ñêN¢2Íou>Õ«I9×F"WLŒE¬—0f=úuµhÚÐè¥T¶)¼}ÓÌŠg#¬ÂÚG™öÓºtEZ©ÿ,Wöæãó^±’fÎfKI³µMW[)L­šÑo’/ì) ñB@—ýÙ]3ì}º-R+i"Œåñj·À0ý™Íì"°¹z5Ót¥Fp)ÈŽYÝÕÝF9½28fVW*Uœœ³uù(j¤YYæâw‰$­åL´1²ëhk"PC‡Ú5Ñ Hï%ì#a­Â)Ä5¶RYR*£lx)”HkŒl-¾>ön`_ˆMã,k¤9Ÿá! äÏ«]< 5kŠ¥íÔÖÐÄgêî … Åq ñ ‹‘Fƒli¦QSD'±ã÷QÖIµd[â9Œ«!!@ƒ %r—ðHÁ†^ÂíÔj­W›%k"¹­1 Šv`a¼Š‚TcZI÷*ަ2=Ä#»ØŠS)Ù2Æõ²wóNw7•z…WfÖIÉ«2©5:“„j€f§¦3B¬#"eÔіèÂ<ÅÚè¡â)~éºDÌÓÁ¿ÃÝ}”ÕÓê¶þ0GÉi %Ÿa‰º²srB/ÞF 5”*Åml“ö³NTޛ䥮ÈIL¦õú¤ÆK~”Ùìv«ƒø1ÜyÙÅHG-eôuP£ºÞBƒ‚(M\r!ƒ|æ1IF º¤¦÷³{?ë‚l±¶ÅÑ9¿JÜp8–(hy,õ«jb»É¶c'V”f6ò æi*Šæê¢,4 ŠÚÞ4jEpÍèmôú«Í“1‚²Vj· ›³YŽŒHŠÄTQÑuÑtÈL…E駦?–ŒWOSk%èK¥€×M³  ˆ±2ŽCßÜÀ¾†ÄY0„1aûê0Ò™’ÆS)¥Ciœ¥D(!ù>öÆpÖÓŠå ¸ŸubÏ‹ˆÑGÙVv™m»¦—ê”›>H¡JH!ƒ²òʒèø{ ‘ô¢Ï^Àë²ÉýOŸKZÁ±r.dØ1Ha ±ärTÄÀ2Æõâ=TÈý=‚§†Žj:S™>K®ÔBš¯f09Î2™‰ôSªa BÚkÕIL!)ê‹°6•i -w±5ŽÃ,åºLS¤;ˆŸç>YDVÑudf•B”z,ÚEÈ„âŠ.?β**é¾¥pg '}ìí¡"AæÙ­Ôç0ªk­mMG;ÝDK9 ºêS%ÝL–Ñ7@‘œ:T7Qm§”×d‹®£8–¢œ¨$k%U–È)+¾Åøx–H"Ø5ŸaÕ§Vê5N0¨ùµ´²›ÏùTÐjeÒ,bEÒ4[²™°º¨¤uù±çcckï7ÌuÍ óÂjé6Ù‰̦Nìð´U£R{I3†¼’sÙØÑëÖî¹W®Ò°\ŒUŸ|åKkNή >Å«,ùØ»Ÿjý—xV!6 Pam€š§Të9ZC›·Ð ñŠÍËll¥^ˆ²²´…ÇŠ»m¦Q™~‚Ó…Á´R iŒìÉ{[©7¯,EW5²ßÌž—Ù(oß&vz §2ÝBƒÞZaÄ 2% ±)ÂZ‰võ¡Œ2×àmú¤Z.5Ôd2‹‰³äª9›$£•z-” ´ˆã7‚«“jdHh<‚kÿñ#ÿu•1›—0KOm4°úàeôÉB'Gôô ²Zh0Bc#–ƒ†. –î[ð’A‰šF…Dï2Fvÿðºúæq–‡ j!^²ÑE÷–?¤ýÔvÓˆÖõ¡´ѯ Ã3=®N¾˜ëz¦D܃ö©fÎj²u)5$°ÃÛz¦^_¼É™õ}ó‡pÐ~³üÿüño*ˆ¯${*£Y m jʧɞø„–õ{Òf¤4{—ˆ¶nü, 5io¬ä4»rÙüÓ”RƒÍZöƒI›+îœHçF©Äö”eƒ=ŒXKƒí륎‚´ã U °C&â²H×UgZpÔF^–ë (m]Ts\!î5tìg¼Øå+A–É Ý5ÿÑ×=T9Ñ4ÝR{!ì$âj7Óh 8Êè릲†Ž"¼„×pHÑ'M쬤{Šôn*ÅyË$±Œñ &eçÓ@‹ÈŠ ´ˆ\'@Å”I¥D2˜IB÷ª ÂE·;K®&:{Í4Vѵ‹­-4(Òň¬õ5t,N‰ó¿->úí¢ð†7 IDAToí&?ƒIuWô8ˆ‹1o.g/åBÂt~4ÝÊ®q–éˆ$²žN/áj¤Ê%'Ä&yÎêu”,ÙÙqŠõ5º”¾òeŒË¾l•YO«ˆò+i¡Afö:Òk„(†žÜOŠ9®¦SçM]Q>ÃìºK”ˆÖD±ôZR{rŽß‹úc¶S7EVõò³[hA !üÂcDžöTf¹È ¾•Ñçä„öéZõb8{)™Ò3i‚È‚hŠ¥Ê³—ZHÓ6õQ&k•:Íʶe3æ$VO«&?ƾŒ>šµ1W–LâËé•wb&‰Lªg¢°Š20IF%Ýåôš xÓcuS© Š[¶Iåô #;ƒÉ*(%GJX©YUùô}5bÜ©<œ%·Š®óܧ‘ "åôŠwdfU=ÜÁ‰ï?è#TJ¿Fd€8ëñ¹‰Ž‘­è ‘îji×qªØÈµH>û©¤PF½z© [ÄM(dP¹YÃä;‰i‚ZÌñ &åÉ«Ú,ó‹zZ%´RrWM-£Oœ#»Øª™¡¶%D×Ó)’.ªÔ¯›;AµÖLVdúÙmæbh>,OBíiÔ4«u^¨[Â4ëÀšØnîÝE ÅßGÿõtZ}W`Û͸¬¡b©¨‰žaWÛÙ}6iw®6aׂU˜è,ëg3J¬·‹šÉ²@/  ÚÛy[+v5 ÄÜ…6ˆÝípÎ% y@ˆMR1`Pz‰«‚lŸÊOH‘W½”ËÖÏäŠ ¨ô&Y¹ë~ð³[‹H3‚R´Ê¨é¥<›±Ã¬&_’ÞjôjL*£D„J…q…öS­Þ.A¦‡ƒê9d%— yËšéVUzëúµ¶jh¦Ð¿rzUÞdŠz'‰aCÔÓj¼ÒsÕº)Z£ŽG9Uâý‘í&*_†*ä$” ÓCD‰S­ÔËl¾Út¦BøZ©™â)ž—¿ŸP¨Ù$Ã!ÄSµñ5{ˆ"ü„𨮮%GyC?‘­­“264¥Ú ;¢™L‘.ɳêœVsAG:cRC«ÿ0¨˜±%Çnž+ç',9¿y£^×É,dPSD1h ¦”þZÚ ˜§S§¯™Íœô˜÷Õ}h¼zUð´s²Ö–k±½šiÔ £NÝÜÏÕÕ×=£#Ôy»V!Ã͵âs‡cݶ$×ýû&/~|ùãá7¯½ö<]‚÷¥ð$á9ë;n{‡èÒ=´œ‰qœCt•]ÎÄ8/Ìã)SäÆyžö±÷UçžVu™Ç•5¿G–õäçæñÔ[¬|•Õã,‚´!º†ÈǹŽvQ_ÀÚ!†d-ߣz§9É«<¦ã,Á;Î Özm~>žÓÙðóR:Soððœ?d}€çÓ˜ž +‡Ñ™w’û³› +—_>ÃÖ5D yÓKøî,¥?†ó§<ü˜¯,&þ³†ˆ“X:ÉïóÄ<.iqy‚α4È·¾Gu.ã?â«oPz§‹“3/Béãtg3¶”sr$†s!ÄqÜÉG°p)ç.sÇ<œÍØ9–òæ£ÙÃæ'ùÎ;ä”Ò?ÈC_$ºˆ_5ÒìäÌ<.9‰Õó7óÒYÀ£9Àº›6òŠ Òül‡òž ë'”-g|5}[øî -àp×—xs”{.° —òÏ®à̇Üü)ÿx WœÄîàÒ;äŒrÏE_åþÿúþ Áï-& ©ŽïÝKõ­Ÿ~º“í¯±ÆE,Skyí^æ5"_$ú8méüæ .1ïV®äqúV®d1ÃYJÿ‡Üµ”s_ã¿gòþR|ù g0ù×üånõÒSÉ}K9§rå!RÏ߬àÌF^QˆNæ}œ¾Â­j_æs1Îâýlø‹긜qC–Ùφ\Ïþ¯ðÊ+ÎàÔ¤znã“ÿ½÷‹©óNó¼àôôåÄ‚£(²ñáœ÷¼ï{~Ïïû<ß?<ªåðþÏÿ?ù-¯½MåSþÛ_óoSùÿªÿðø“þ÷?åoF)îórÿ¶‰Åׯ¿-p£ûÇ?ob§–£ÿ…Þ«,ïòg¯òõ>/?áO€"ÿe…‡ÉZqþø>þò/ÿò×ÿÛÿñÿÕþ?G‡ÿ×ß<ï„û(aèzÔd¨clT"5]¬d¹À¹hI¹s)s=Ñ­?si5[Jz‰§|+Ž2á±Oüåç˜N!¹°ÜFA€u¤‘’Ý¿.V¤ôòÙ ]Ž.úYp`£=¨;S¥²Ž²ìøÙ+Ë®>ªˆb5´åë¯Ð5ȆñêR‹Ü–Z½N»Ó¦ &Ç™¸/žaD––}ÀžêœëKtâ½—ÏŒªÒ|ƒ6埖éÖ¸ÏÃ{¯4@RìµN{º4ÙÑzÂÅMZƯ~þ‹òmFœ8]ëa©Ÿ=y}É[yJml\à©~QBHãLÕqPË¡luYõì÷2/¤Ó‡°‰zö›Ù~Ê…šò”›Øù¿à.r5f~B2·LwŽª°©žýš6hËS¶MÑb¢UßÂ6é!µÊ¤41Q®ë…N œN€l®¸!f*3$™SÓ¯^æ5¶è`5ø/‡Ôzùl½Úlü„÷|q‡‹ó 8VÔ‰XÓ/ùO¸(9hŒiC>×i×vÄÓ.(lg½JNn‹]ÓÚÎsoŒiMú½?í+H*¼Sà†â¿°X¡+ëÙœ¬žyÓ £SÝÞM¹½Æ•!>!ÕN‰ë3eUjß^ ‹&2!KØ[xZÏt‹'#f.D÷NÒO©ëáWtVù5Ùv!f9ÇKqWèRXCF7·µ’ b¬ ’Öi_äê}®IFÐ:A–„Rþ’ lÄ…+àWü«Wv¹'\”¸lg–aMí¾àíMZg™b|Ü$æGÌ0⊼Lwž’ïÕÎzë´?æ'öµêØ¢EVˆfNºðYülImóZþ_Yk{ð/¾ãïicÃÜ^à/ÝZ¢Ç÷U(=Ä›¢–1IÖ¡66 éБOÅ®m7µ,ɪÐÞ¢‰ú/ñPgŠ×þè·¸b˜²òd/¤ /S•\Žj3ÛQüì/^þ¬™í2y‡Iìúu3Ú¦Ù~?щ ˜g@;DéûÞd|l‘™iEÉYd@jL‰Q‡‹ÊÅ6iu,'‡s—ÆVc7.ûËt7ó›I&z™aF÷[ß}—ÆZ¥ÿ¸x>©eØ)é sÞ–Ëtwò¹^‚N³ ÆÒ¾I«•x9£$ôk,¹@¿+ŒA—©–ÈGñœ.øbW¬Ä$é88Ñâ…LêQ1UJl™N QjR™ž÷‡Ëh *9ndȬ&؃þa….¨id7ð–ÿœ²€â‚*rf/jªç;ãÀ[®MO¹à7_‹&Ûý*@݃;GÑ*IûÑ2ùN>ogý ÞvTu ˆuú¸kPo‰Qܯ¸^[ÂS—EÝf¶“Ê Ÿò®t~ŠÜ> .\6ºYvXeb½ ÁqŽy²9tòƘf¬HAEð sVã”N0ù‹—niñË¿Îÿ»ÿé• Úö©/rû§/=øåwù66t‚wøïªgê£©ŽƒüPñ¥{¹Ôàüñ¢b¬D_…”³l‡X“ÖsiUV–RÝî18ka«Ä¨¤µ,ÈŠÔ Ðýl&D'r3¯[#DKaé褻 wÞÑÉút"Ýñlš4‡v;Û…\Ù¢Åͯ³z£ÇN§ " Y%Q¸ž}³½>àãh”-2 }{ž’†æ"œš:ä×Mì¸íѰÈÕš¦ ø\ñ7iµå¥'º 9‡T;WòÎ%@7²«1«îJrñÅd헚ؑ¨ýËïò#Ì|Í«TªäÚØ°Zÿ滟„}¢”ú2×Wèz¯äÔíÑ jêk^ÜøXQ—o´J‡ˆDœ´Ms™üuý,lóš85ÈúÀS.؆µÎ™úHFó2mÒú·_5üí ÿÀj\ÔÊæ%Ô¢éí=yÊõìWÉR»DÏ sKô(¥ú˜ì*:žfLæçžÊ5—'b‘k`O½ ÏaŽª^!’ ªru‰‡=,™òåÖG*à!µ]¬Ôqà鹪¶Á¥`ŒiqÚYWä) ît„Š®À=›´zW›ª#8kd·Ìõ °Jìäó`ŠÒ„‡|þxQ+Ö±ÿºÓ)/§ýb’d¬ì™WÂ0)éVóë·ÍkÑ‚ %¶5öóÜ;ÙSŽiYMjlq2Ž«F‡ÜxG ¬QüÔiMk4W»XQÓv@]…w”Ù)L3¶B—µÁF- K”Ë®Æz‘÷a³eŽA³øzùÌ à¶\³ôfuR"ßËge†êÙ7q~Gh‡ÔêÝGf°ÔÍò4cFŸ˜B¢µƒUqá ¦ÊúRñ1[Ù”ú,wÜ(Þ1¦í‚ªo•èÈÍÔ «µ%Y˜^¡sŸúf™ëaé—èÑ6ª©î5îK¸_¡«J®–CE¸:*\SÒ›’3ë8°³jµ^ €ùI&ôz_¦û=>!sÿS‹ÝIE0jiì¤ÒÇ]?àïù‘ZÝ/Ómrc`²V6 =± ô‹6ZÙœgÀŒæ¸ ìM2au±`7°§ñc+KôìÑ0ÅxxŠtŸrAú¸Ø3© â":Eù|aâ-u k\™aÄBµKcÄN3K„"‡-Z¼+Ü­v³2a_6\Þ]:Vèf¶=EŸ»x\JŒÚcð}c¦ËÝycðEŸcÕ@M:â ½”¥YÀ™“ú){¤÷ì¦ éIèë¤"o¸tèBfNQ–SŒãÝV>áW"y®II"g|Qæz [e† Ür»êÕɹ JߦöÞåÓuÚE~ÕmÚ¸ŽD"I4Ü\ñ/óÈ´ß-Zì)ùúÖ€=¬šÊr5\ðõ¨»L54Þã“MZǘ~ĉæ†h 2·Mó·ü¸À ó´lÊY¬©½Ìkî@æ”!EÛ§Ùtiîaiš1a¢¨¢½ &žcPå²\m^³rh¨qx-‡mô³ ûÃóeI‘Яø™m(AŒ›³¦ìyz´Û4ÿòå!±Ë'¼WÇA;‡ VfM1nha…Î66.ñØ€`s%Ñ1,T@w³<̬…ÍšÔÍò«|ÝIÅ›â0 è´}Í«‡Ôìkù´/êÉܤÕ}À2Ý—©®Ó®@ÊËÝ̶³4ñ÷wò”í¯8ìaÉ{f›fŸ)òЧMÎaf•ÓùsO…ïâ5òpÀ©@¢…-/Ç9?~7Ë—©ê ÒͲþ÷ ÝÅºŽ“/^ôŠu”„"f)Óÿ^ߥ1¡ðÝ‹Òu2óÞŽÜ#·Qu’–]MB²8"É!Ìn ##‚^ÎCAå-B ](íg&]ͳù¨ ¢¦®¸n•¹î–V*;kOÚ—¼Uæú%ªÒmd·DÞ=r“LnF˜)pËÂÐÎú<^V÷ãÁš3*£ –BýÓ̶«&vƘvJÑÈ®=FI¶wd4Ô³¯íÉLÆl¦íÒØÄÎ4cyà¯uÚç°gu—> ì¸!ñì+^OgKúwt±òÏø» <õÖ-Bä ªŸ…iÆ~þRy„™ú/ñx™îK<b.Ó}‰ßÖqP&?ŸçÙß ‘õ6Í;Ki'Ÿ;"3…ú-#>k·Önƒ"‰*Ͻ%z¾åÇ.¦![o<óaÖlà¤5I(&1œ±Ò®µTQÝ,Ã!s6µËò!µš†X¥bó­€ÝÛÞCMSÔÏ/pW0Hä’jR;A§V¦'ÄŠš´Bä)•ȯq%£QÔ¤C¬dB6” ]ÒNã±Û“‘áò”<°ÄQ—ÄiÞÖeMƳ¿’XIÅGŒ%O¹iÕqG¼E‹ß| ƒvݦÍ0ÒÊæwÞåS—õ³3ŒŒ1WYËö¶l"Ùà²H8*(R˜aĺXÇAŽªùêLljd·ÌŒ +Ü2Ý‹ DĆþ:r”ûYf¹ä•¹¾D•ÒÍJ7ËSŒ7°÷” q„Y`J±@q“ÖyÜÔ;téã®üû»ôée·F.H¶—é~ÌOܼÿˆß˳¸Äo­»2ìµcX ¿½_ñ³/xۥߖl-‡º¶Û›gÀ”È~Ì3´`8=²ŽjýÞÊæS.è^o¶ˆq\ºÎ #¶hñ¨Û¡é"Oέ‘“bÞͲ¦…"Ô<¥Ÿ¾ôàC>’§§óSKZ4ÉD×ݣĨ'^ABiÂ#[Ø: ®‘Ý£‚xCL–è±›çÒ+ë§.1*!ÂFŸ8IH¤ö@‹/K£Ûâdc@ö„N%î‡üCKL:mgݲ´Ik™ë‹ xØCÜ‘4ø}ÃïóÇúqÚóbëý¥­¶à;D2E:Uʘ÷’€’G6£2lt%8îË"S¸D^™HÒî{”𵓍Ü%ö„Ñ{lŽþõØÑsšö3§l›†Y&–+²ÆB3Œ„óº•à”‘¹ú¤€°.Faà ?¼±ÈQ­’s¿¬‚NºÂ]k ÿIÓñ9çxÂE›cZt‡³Ã<wé³<ˆKê8èäs™ Ú~û©Íµ²ˆ)‡™=¤6üj}¾¡·áéyR_ŒCj/òDðÑÇ]Í :©x$¶ˆ­Ÿ…N6¦õ»ó#̸Œú²áLaQ?`SKtY®F$VÖ*¹×ùÊÁ’çЃ.òä)%þ¤–à <ý¿/Pfv„™¨ º™´Š†m˜¸[·4¡Ó­Ot”÷Jy¢¢‡ÜÍr;>Çf£~é­¶$FþqKÄ™ô^õ¨–éÖ{¾“J…Î!îhÅü~vÓRœAÆæU\·8:¡xü+teɧœz®œƒæãŸðn„u—¼ŒÚ@[e†Tþ&Þê¹ËTuHÌmÓ<Ƭ¯˜N¡Ž†¸“ ´N˜ØFêZ2ܪ‰ÖbFø©&ù#ÿ)¨‘`²34Êò•¹î7|œQd^_ÙÀ#Ìxùܳ¹-åÝlr+ñBò†Õ¸Ì1è È'¯ÐUà–Œ>×w‹¢´ÃAæšØ‘¬,Uϰ§ŽÊP5ó³뢿b⻑‰ÑsÅÏs¯ iAÒWèZ ¿—ù°V*s}‡&KW¨²¤KŒ0ãËN2ÑÅÊ #Á“ôùyR¡Ó‰}5ƒ_þA*[ˆìP—§äâ{H­ ã• ‹"q‰‡65ºr¥[n-‡&[º·jÜ¥oš±¯yÕ5=–? ®Jnƒ¶wùÔ“f½¯Ð©\tØÇ]M+¼£Òvš±×ùÊÞì2ÝÚ6ºÄ税1=̬ÿog}‡&A¹ÝZÕ{¬Àë´YæôãÇ•ja«ƒUi/QV#@ X£ö÷LµI8̬gŠqeajºXQ^¡ÓlëY†½«çœcÐr•n³¶hQ58È\•^M’öÎ/&Æú«÷ÛÃýh9ý¾È¼ÅN¢«+1UrŸ¢RÊîÓ©=Ë©©RB—x””·c<¤Ê5¥~˜§õ}€éDªÖI¼ut2òŒú_¸-u?+'óÌR¡Yñ›b‚ˆ° œmÖCdA‘9_Äæz‚I+\øF8“}.mn”µ´„ ‰WžSà–ž{–ÕKü¶ÈÍ˜šˆ·¢«–…@uõì¿ÎW_ñºZ¢:|GÑÌ/þèÖ/ÿ>/n €Æƒ&$nqÂûηH#š¤k[ç,ê@ T¿J‚ QT$Z0³F®Â;ú൰5Ììmâ¹>îÆœ,j’NƒMEÀU 9 •‡ç+*&ªëgá?åÝSG–Œ>g›æ+aôgBÕók\)rÓ[ÈËím 0K ™àì¥yW€à;½›£-Z¹•¸yçxÕŠ ãîÒ…½D~ŽÁû\“d™jxTÚBtFà»K#L¿ b¯ózðâa,!Ttç¦+pKGÿ©Èmô$JU™~‰yå G‘›{á†g‚ß(`Ï´ ÜŠVa0 Óò(íT'Ú…#sÇHigvšUÕ›G¾ßeª:*¹˜Jgؤտq'¬z.(u*1:È\¬2~É%ìÐ¥aþTÖ­ïNv“\w2ᤤÂ;s Ú´\ùî^ÄN*níÒX"/ÓLŽëN+ª¯ÙÕ:h•±‹{ê^æ‹Mì\ã¾øìu¾rÅߦYFß/ÿ>_Ͼ#·1¦è_ ÿOͱy¨û=¼MZÇ™ò‹ Q—µºt±2Áäu3ŒhC%SÑ%{…®U!ËžšìlK³‹•ù@F~…NWü &åDL0©@¸Žs É<ÔCý-—Ïáß syc•Ž ÚšØqгM³÷°¯Ý¥1¨ÿ¡áup%:T½ë6¢Bç #±oP­}°† ÞZÞ' ›·ml„.˜adš±-Zô­¨g_uŠó¶V6M‹©Ö<Åáe [Þ±À"W=’2y¤-l9ÈÔÛe‘«®K»4²#p“GÎËÕ‹òxéùeàéÑ:[î¤V2>E9+!–Ë<÷Ü€;4Òg¡Àßó#×A9FGN`Œ¾~ñÒ­÷Ý+O¸ØÄ޹ïÍl‡Ñ¸oçPjŽÁ5rßòã¯xý)BôÓÂV•Ü0³R*&˜œaÄa•8/šx‚×M]áسê2ÚÊf+›ßðÊÏ‹eþ5û°aö»ôE#wŒéKü¶Bm-‡—x,/C^{§‘ö‘Pü_¾ÍÚ3ŠG‡¸ã×ÐZž£Ú˼8OP%Â>žwY¬¢ì¾I&.òdŸzÉ ž|7F´Txç€:±`‰Q{we†äsùW+œž[q®â¨¼‚á¬_ä¶ÍIw–É8ÏN˜<Ùò‰É=sP—ˆd.~Æ;1/Òã¿ø>ÎIà/!èÑ7b®Ê ©šŠ‚án%scº~²Ý÷ÌÁ6ÛòßR÷çð3 X#Sþæ²Ø£Ä8Šç‡^ ‘½&qÂ= ~GèÆÎàÕ_æ‘P5R %‘ëçVæú #2µŒ…È×Lô]f,š´–%ñ´Ú&ýܨs)tã_ÇÁ[|©«ìee@¿þë«À*º— Ñ\z.SuÍm`O._@.¹Èbš8¼½Ìø+ïÚEžpq•ñœ½J2cV1„jß_~——î¡ÜØ%¾‡%Ý$>ˆQf)1ú5¯nÒjÊ]ú<5±s§~vy†<ÈSŽ<Ã"…I&šÙÎQÕË£ú;©ˆh]pë8hbçµ—Ëÿülºµ§Žƒm^Y ÿ¾ù€{XRte%¶d:³4Þw…® Iûó=,W§"…*¹<÷äs:0Û¥±ÀiÆ,B$¹r ÂS IDATrü&˜|ÂEuZMìøa‡¸ãȳÄèýûÔWÉõò™ {àÛÌœBð“â¹ &EŠnØËuþ¤‰°Ko ÏD)RY¼GC•ÜÓ6 ½©äÚ®$3јg Â›+tÙé9ˤâ¾b9 ¥TZN¦ý’ -’„ûjâÂ^ãK%ÆÇÏLÍ2·õ£„ QîY¯@—÷+IDÖñ²•Nå†$â­G)+ä¬=²¾ÇçY eÀm~3ÛJµð¡N3ær£wC;ëcL·°åoic-tAO×Sw¯.‚Û4É[“LÔrX"oná&­ af%m“ˆšWégñxk6¬ÿõ}csIºD7Ëvµ­óìž¹¨õqWf¹F½Ì±è N0©ï¸±žýCþÔAÔMRBVèªÐiTŸ—ïn–¿åÇÖK;W: oeSÛßkÜofÛHÜ2yð:cŠÓÍòø}”ßÚÃÿ̯ÿ׫5/ݹU:îÒ×ϧ¼ÛÈnâ%k§ä3Õ$Ù…+s½‹• ;49—JíBŠtÆÊä=3J’í÷*Tha« ‡¸£¨N®‘Šï»DæXEn·³>ΔƒL»²~ÇV]ã¾°5è?ŽmP7³­yà>õòÃÃB®åGã«!î(ŒY”Nd¢@oÝ4ÛSߦ»ômÓËKjüvþxÁ˜[ïÿ(RQW2ø|”rÐÓÈÇ„”Q]Á”ωö]MÆ.­1õjˆ²¯qÖkN:\<:ùÃc"F°çƒé^äv2A=g^pJpª·&˜°dÿGLŒÇe=øÃè/¹´-2v}Ћܔ.ÃÂa~Ô³”¬,CZD{tr¯e¬Yê©•ïÈ ãL;ðod7%7Kzžbᢼ ’>üPòQaÈL‘Ý-©þdöq¦šùæ[L"N‡GçÊ?PÎó`¯2xçVAißLþ›—®üú»«æ.Co …JÑŒ•ìñ)rΫ¢ÀISO?kŒ\’¸1Ht±ƒ‰vhðœáM2a[XÉŠÅØ·ÐÅ´‡%ýòcŽh2¢#ƒîŸ(¡A¦÷Ñnm™¡ o†#~;t^^<æÅ-±Ìå)ePd-rUE¶HSê3¶èñH)3<†naN‘µûŽq˜å*kë=«LµuR¡U“ª†91©"› ¦aÇg\X“QiŽmø-3Íé‡ëVTpà~˜Y;3²bÅwíòªÜôÛÞÀÅH&b´\hæ”ô%DÐ'^úö¨âŽY¸uÚǘvæ¤ÿ‚¸ªƒUýwi´#d§¨=…|‹úŸpÑ%RÕª‡­›ø yÊyÊæWíÑ ;†3üvÖûYˆd&5Ž–¸O¸¸@ÿ,ÃÆ‹Øß»È“66"²¹—ù&v¤rXþþRy†eº›Ù®ã ™íN*Ý,0ÿ˜Ÿ(.ÓÝÇÝ‹<Ñð•Í~&˜ô¼•¹¾M³&îÍlKÏ+pÃrÕÏB/ó}Ü5Ä“ÜÅÊŸ÷Èó?ÂLŽªS¢iƪäB²m­ÓTÉ 2çP°™í £k•«6¼›e[‹rI–é¶žÅ@Tv»*Û•e®[c¢rxb‹Üc:Ï=¥žïØI¥L^®W9¤ZÖ¤MZ™ÓÍ}™î»ô5²ƘcLK˜t拈òFÂÑ“•­N[”ÙŒãüñBu½Ì6Ö¶hqß!³ë=>Éæ5'C=jNެˆ’£”l¥qVGQ“R݈gÌ á£¬à=J¥TûÞÕį$žî5Ïç@ž©‡¥E;„µL÷¼­·m“¼©1’‹‘|ë9%¶¹nºî(E’ëUäv3Û²ûbÒ §íÓ#ÌÈõrP¡–K[ÕiÆ„ký,ˆ\’^ç+­›Â%(„b6ˆ¢DÕ³ßÉçdÖvÿm-Ó 5Fˆ¢®qÿeö Úèãnžr'•E¶hé¤2Á¤…mŒé" ,Z Ž3¥Î):lª‚úYðl¹=ËpX6²ûëï®6°7ΔËmš-íj¤\©Äï+t:Z›fì"OfùšWwi¼Lµ“JTýeº™Ûæ5™œÔ•­’óÔâ± ÚÁê¹»ôuòyžò9ep‚ÓXl9.Óm»u“ÖZ½=ôZ kÁ&v&˜,sÝP’af9­‘sR¥kŽAÏOž{º#Z!rTõY~3'˜t/¢‰e/±gÕəΊn8‡ó¦j`¯»:CJE‘n Sá`ô·uFfÌZ¶îªÏK V±L› ãó<%#m:ùüm¾ˆAWâgQò9޾b®€§f*ÉÞ?w’È5/ô}€`Ƨ® ð ŠÁéýQ@Ã3‰Ê e ¹c™ó K×§¼ÛƆ…¡“Ê#®ôq7B(ZÙT][Ç:P Z‹:ipe\ ‘«rÄ%sßçš ÉèV µŸrÜ‹ô¼ha«“'Ê\ïãn™¼;ëAæ\IåÑɇvU $8kes‚I÷f1×£ÈM×)V­l¶°eì“®€Kô<á¢\GYyny¨eòŠ\ ²²Ø„9 ¤2&!È8Sò'ešKr—>«‘æL½ÌoÒúïù3¥¸_ójKª¦™³ ?6ÃÈ.Þn¹O¹PË¡AÞ 'y2ÝU=_¦ZË¡fHyî•É« ¶~lÒª½d8’ÙUàÆ!µæ˜¨oëa©—Ï€K<cºÂ;üä‘ïÐ$eË¥$À¾œ)-úGuëœZ%»×³o¢µài×d/w¹N*vÛØXd@ Fä`5óÍÓžÏÀ Íüf›æf~ãtÊ­÷.‡Ô*Trñ]¥£‰/ŸÊ›ö©w åØµØ—«ã ž}•Uv“Öi·!¦Hè1?1ñHš_x½»¬Ì2œ£ªÊ'($¢“põV²ºIë*#̈ÌÞã—cVÖÚºŒ:leSˆ$à vM]Ù¥i8Ìsí`U±QÀšºÄ@Ô™D¬Vœ¡ílxï®ÒQ¤°ÈÀ{|âf•Ž &Ï©Í%7ª¶‡F!k±±N»í´-ѳD§Âª¯ÅŸç_êRžž=دyÕúaïÑé‘ ¦“Ï%j¯;F«#̨q´ìFav_9F\’éŠ΄!`÷B7³mëoŒéCj×ȵ³®4Mš¥6É„,Óºf®gßµEË,Û´.2 FϬ,K^} Con!Ü£a˜Y»nMÖiʘœ™Så?ç%ác^üÕûí©™…̈pHæL5'LÍI²FMBÙHSKjžãh<3ªHLÉw’á ;ù„Á1”Y¥”„ÄqÖ1Vj â¹Lu’ É‹ ô2Ÿ²W¤W8Òp£+E"ü¤H1ðç>Í ø“Ò·&™£ÂØå¸4Ĩ<L|bšq¦ä‡O]újºW—xü%o5±cIÀŽ…§üúVèºÏµ`:ÑRE×z²Àû<åE?ÿ“ É RH´@”:a¢Üz2‹wLû>K¬ž#žç89žð!îø¥s†P¤ð2¿Óûq˜ÙWøæKÞ²b‰wƒq,ŽMîøFa·¨åã<:-ºÂްaü‹—>ûõwWO™R†±Ÿ'@µzµp±2À|’fþŒÞâ™ Õ]j“ÔŒÐÆ¹3^#§ã¢'<¨4¯òµLËô^ s“¸‚ãLy½µkRÓ ß1ééLJ{v$5p”¥pE§QˆŽcç‹S$ŽG'Wð³E¾°¢[®=›õ—àÚcC× R”«˜Z¸ÑÏ‚kß*ÒÀ^7Ë6sDcÆ*FT¹ÿT¤°EK‰|#»E õ췱іåj‚É ïD¸ÑóJS%¡Ùáq¥ÖÐÝ`ßOxoŸúK<\¡ËØ'wë1&$ÁïÒ8Æô×¼*@´2ÅV}†êj9t¡—>`FI{ŽÁt ™a$M pùkes•Žf¶Ÿr¡B§z¯8Ã`Ħ“LØ#mbÇ/‚ ñ0³ÓŒ½Ë§En‹Æl„:Z“\𯗵ýµCÓ|‘Tâ]ev^Ä·ÂÏP÷ þ®>{¶ëÙ·\íÑPfèWé¨ãà_~wÓ¹µ^Ú÷=ìçjfÛ E»sÓŒie™õO‡øæ™fÖ»Hù” s³ºXÑOÀ£fÖFM[úYð„Gä#Y.I ºú—èif[tk™—ÞBeª‹É(Wî§“1ùùãEÃX?zKd+~æ˜K8ašžKÐU.!òYˆ'$ÏêGÅNà¶{,¨51늗J͘ã•O*-ÎòîéøT„×¾@ÁÞ‹›ÜR~™6ùû®J©åv@‡°NðÉÓù :ÆAØ ŽrZ]ÓãÉ>3õ¬‹…,ÈÜïñÉ—¼euqùós9›fì Þþ”wm›ßM÷“Zz‹{R'ÀU:lꑱLwú¦I4ò08øÞ³w§4êdé!H$ñ÷°²Ý<Ã3Œ,Ñc±q-neSËözöxó†Žì)” G|_0®ˆX*(é©@3©m¿×Ðɰ“ÏM&óšjƒb'c†‡Xqí<ÿŠRwÊpv¿Äãmlhú—âT IPoï_DÕY>@ÜxÛ¼ÖÌ7Žf¦®]“L8¶Ô3U8Äà*ýøNyOªhÎÁÖ ‚±\™p¸¹;©ŸÅí©Ìªcs&w.1@r“¥^‘â*½R2÷ŠŽ“­s¡2i¥Y×isɱYB&Ä*˜<¹æ$À:s0Ë(XË•]»5rú Ùa+R˜cÐÿo^º"l’ÿÖÏÂÓ3×åHŽWk®Û–7ìnÌ#=–ÌŠwŒé2×—é¶É–MZåR»pKdPÍÚÎú+| §ø8Èî–Š<÷òÜ“*ÝÅʧ¼»GÃ9RÍ0ÒÄÎ:íËt_äÉ.Ö³¯l….{‰â ­ß}Ó>î2§Óy+›µüÍ'¼ç©°-6È\x–¸qÁõcJâŸeØl-—i'1“LìÐd-‰‰Ú&­KôüR 2§Ý‘Ëú".Ö»4N09ÄY—ý,rèÏðhÀ´ûAæ&™ê­Ý†åŠÌv¯JÎcç2Á¤”E'FcLëÒk­’7Ä%¯DC?KÂ>õ³ WxgöfŠÜd.\Õ-ˆž{ùlœœÓŸ[Ùl`oŠñ]{XŠƒ´x7ó› oN2¡³»Ç`Š£Gb+Õi\Ü*&:¶²éÝžEOܪ;É·,¶ëÓ$õÉtë£3‚UÄUo™î£^_—Â^æ}Ž|­4ö©7LÒºâëÊ»!%¶šZGg™`²HAdfað€uX¥#Ü5hX¢ÇB;À¼¨ÈPĶä8ìÒ˜¨cß©)Æ›Ù.s]HQbÔRT¤ -MZÁå:êó ìM3¦ð8S”vÖ;yà{©¸ja˲mΈ¯ç^à0™^a®ìð;¥ÇG8]íÐô1L2±I«ê«mšçÐé¼»ZJªÓRÄ&»Aû.ßzŒitÓŒÍ18À¼ôiÆú¸Û–6K²6œäy†ÛØ´ä«©ÙÊè$ãt³¼ÈÕ"·ÝkN36Á¤n•vh ¢Í:íòÔ ÄÜÑTIQ²óNÏa-‡²»Ync£‰'d±>©ò<¼ +YÍ#ä÷Yç­Ä¨=À4¶ñ9õc—÷“Î$OÏjL‘Û)žëb%#¶GdÀ*rÛ°®ÄH¤à[õð±gLô¼GÃ]úÊäwiœbÜB2Æ´O~Ì.ú‡ÔFÇµŽƒEVé˜g@E— ­…-'CBê$ ì±Ç ÚìXZKüPÜó”Ü,Ó=͘H(Où ÞV–ÐÀ^ˆ(䬇•”r‹eº“©ñJ-Z¤ád[Øí¬«DœeXI™þË%ò±ÿv.%~*) Ê&F%½eZ˜Ò’€:a†©]Šrìã“b—Æ´­Ð% F†”ýÄNfE’éO/_Ð0C<Ø"§úŠgj”UàV|ü5r.Ê¢÷žÎäM0¹GCKé> ®›å£+tI[w™s‰/rÛ IÏ‘éÓBA¥Ñí&­¯òµë¦täZ[Ù4ºwö—ù«ÿ ‹\Õ AŒâàÇ9î«wéŸÍ02Æt¨‰{X*1z‘'‚û`êrj9ÌQ-s½™m)ÔŸòn? V7ò&\(’õ¤u°êÑö.}³ K‘°Ìx¢„A ìÉ]´C%gÝJ&&³Då´¢®^æ%Î)ÙÖéÃyÛ s#Ì´²©ð3šÒjÕèAZ]œv°Öøs ú^Î熸 ^7yÊmlXÔ×i?¤vš1Û˜-l1}™ê*bÍ'\”h#ú´éê[»óìPËßlÒZä¦Þ»vJõM–â¯Ò ‘]ýGBÉ'ˆWý韵ò‚T¬Ì-âèTéŠáˆÿ𯉭;aë®KÏÕ¿Ÿ™ (2RõÍpË SÝ"·£!ÖPêšíödZ.’ÒX“éÆrÑ]ŒXô3Œ÷k²>êu2aãÃÈüµ%ÕÂÖe/ë=ǰL÷ë|µGÃ$/…ÁÁ0³¬F§KÔRæz? V5‡ÓŒ™Î·K£5/vÜKô„±…ÓˆðBmbGš™kqŽªT—!_¤‡¥q¦tHrÜ"©}ˆ;Úú©­í¬Rû” Guò¹Ûv×_uHó 8k‘õ0Çà-Æ1+©ö}Ýæ»|(ܧ¾–ÃN*mlhªTàF3¿ÑF¶Àeº{¸ÑÆÆ2ݲøÚY7óp†ñÊ,ÃÆ%×q`Ìæ¤£©0"rÖ%Ê)p˶ªZl5gŽm,BL¹šk‘ë×¼jö‡‚¹êÖÈÙËu†7ÉD“k9´ÅºEKKòDð¦ð®Žý&t°uÎçfWûokíaZtÞHÓŒÕq`Ù+kr›Hè€:õdî®”'[u´ÄÆ™rzJf<ïåpˆ¨K¯…Yc'9î3w÷ž†¦bI²ˆú*à´¤Y²ºî•Ö Èb“=Sí»Ì“PF͹¨%ª""þØõ%[.Ó¶Þ#=vƒž”¼ÑQf])ϘúÒ:»3U{ª"à7ºY¾Ì#±K0#¬4—yäÎt…® o\.“WåJòšY†;ù\(£}†iX)þ/ݲnmÑR¤rN Ø.C”{Xr•y•¯} ã †¸³A›öáÍüF±m´9MƪÐiê GµA[¸L0ͽ5®vhºÀÓV6¡¦õiƨëaI?ûô Ml1™xÒʦÜ9Ñ¡ó|s³ƒé—8ÇàMO¹°C“ØÂX–ËT·i¶7»I«>¼Kôô³à@%fTlìà 0/ ÄlŽ×ùÊ/‹ â]­ˆÞY¡kœ)óší4^¦z‰ßŠn•×q þÚ–cÓŒM3¦‰‘ÝWá2Õö.òDüêEoak›fÑù:í“L\âáýml¼ÉhŸyŒieVboæ;iÆRØÇ#3¸ÈƒÐýËïnÚ´ò-Ó-gOߊFv/óh–ayŠnhd·ÈÕËT¥w7³]ä¶»þ`W;ªŽ35̬A*›´–Õ–Iˆ6Ç`…7e1,Óý” ӌٶ2b‰YN†Æ˜ÎQ SAùåFpíÒhÀ•žñö©$LûR#Ìx†bS©.©~ ä‰xÞ6iµõZÇAK9ªÍl·°U&ßÃ’õ¦@±õ5r6âl|yò×ÈUÉùú¾ræF^âmšùS2M±y€wùÔ.®ÎL6è´ø“¶'ÝÜ+¨ Mýœé\–7"/£L¢ýèÖÎú‡|4Ä»ô-Óýçß=²ü¸a{Ж²=ëÖMæ¼83cZê¿:˹9Ôú†?oÄ<¦ßks™ë½™¢¹‹—/çjçtÁ¬b…öÅ&ÛIéUL§BÌûü¥­Y#ç*“I´¼gÍ(s= vyù(«LiÑ:òvlƘ%ÜÅã™Åb?Xd¥î(s5guˆuª7 Yxn.Æ*¶³^&ï¿›å§\(s][¶š6hf6(Ú_òÖ*æH‘%ìéhÞÈ®ÙzFGÊÚpÈ!ñÁ%u„™4MXy)Lj·u\­ã`†‘ÕE+ä2ípŒé] HldwŠñ <¾Bí¬oÐæHæU¾ng½‰쪙ú(ÂfÖyÞ&­îë·h¹È“y¶y­‡%Œì^ài;ë÷¹æ+ÄOž^Ì1Œ Lbd :©XÕì›y$›´^äÉm̯Òaya¦Ÿ…N>ïgaöǼ±M³=Àn–Å%F{ù, ƒÞÈu.èë´¿Í>¿ÈmX%|Ê»¢7Ë›}W¯”}¿n–û¸[àÆ&­"$µÁc$ã”îÐÔÉç~´Ç¼±GÃ< ìYW–èyÌ:¤hn+ 5ÙrŒi+“§qˆò>õÁŒ5Êe;ÞB%F]X”dôoeSç*g„îEÖi_d Ä¨Ö*»4.rŽz™Ï”<çëÅ©X6vH¹ú©'‘"F~"ÕØzêe>ڃъ™:e©ð{4ÔqP%÷˜7 ܨ’Û§þeºï‘J¾@¿¬B²EªäŒjô9&L õf)pÃ#QádT +°Þ}§˜U©K<ô¬Ú0D{›f!ïG|¸Lw' §®ðN-‡CÜñ×Öêüö©Ï\O9Ow|Á*–-¾p›-p+ã—_ n^RÃj²Îᑸ2CQc2Ç Ü½Ì>WbjYeØë”pêÙÿ׸’çÞåxýèL&œÃšlVãÀŒÓVîg±1"Rc‚S"ñ1øý—•çD$ î6hÛ¥QɪQÁ?®ã`Ÿúê\­ZÙœgÀZ¸Ù·àEÞUÌ?~8:²&¹ŒÚ+sÞ®E™ÏÂ*Ña[#'C$§Øø%]tÛØê³¼G9â¾õßH¶÷uyC“ßFæÁ¹mòˆšªÔžCµ¯t²äŽI&‚ðfi÷s0#Œhg]¿«mšg–Sð„‹ÂÜÈî’hÐÁªgc‚IR4ó”KŒPç…{Ìv,ZíÑ0Ëp˜Œt°ZfÈ¡xZxºGƒÁÊv ¸³ —µiü%oé ![nnzÙäŒüß &?æ+Ÿ'°™íuÚ7hSöK–æ¼Lwf¢xÛëµK£»˜€yo-Tú¸k{9ThîQ.óÈšmš7h»LÕ62¹t0vi QÍ9Ìza*–$%+’Ó‚Œ¶wLgx.§êˆgK5En«ð”'¡¯¿GCJPLHi$cM*Š™1°Œãn^¦êóÝLD´±çJç{UûX,¥±Î,2àëëP¶Šn}ŸIéùã?ÛãŸð ¢ ¡œ[´œjNÉÄ8Ê›>c™?›c5²›íYŽÆDMŠ·<³®š0€ÏÌTŽ™i¿k\‘›)¼3$ÞYBpñ£Ix†ïÅšÔÔJFœÿ-Я۩èJ:µöqËt¹m˜¬ ¿n`Bu±"´rþ” ³ »[×ÇbPæºà Äh…ÎÕ%zF˜±EæÁ}Ê»zß••ÓQàÆ>õó ºYF³úYpB㢿L·}“Ö2×å|¯Ð5ÂŒ†~„fêÙWYå’j¯L—< >L4Œª‹• HPŒ%/N ŽøÎodi;çaƸa]¢è–’hîva™n½£´ñçMì¸EPq¬P¡³ SâTª%z –¨OFÝkioÖâ7¼b/ñ.}%ò¾¯C²=.òÄ@–.Vœ)~ÈGƒÌ¹©L[ ôq·Èm‰:óú.Ö˜]Ø¥Ñ<- á0³Ò™ëaIk…½LêáYro1Çà"ºÜîÒ| ÛÅ=,Y®CÕ=Á$îl¹j&œw—7p‘Ûí¬¹mž¤ûé¤Ósþøac¬¿z¿=ÙŒœ»JpÏép,w.En¸•–"7Ý”ý#pŠç³Ž2v/”È)bû¾ÙLêÑ^sŠòœëü•Sxñ Â,ªá öánÒ#W©½!ÊEn~ÈG¸ÒÉçi†Vì¯EZa·K£›âØ;kû»“„¶ødÁyfQîãfÙ«öoÀÇa²@æ…:ĈG‘¿Gbï$ š¿e×3â??£žî¦§ó0ü\nò§oó…¸ÇcˆÏ5ÏÀ..Ð?ÎT•œxH )õƒÊFñ×#È*Ìüà‹ èŸÚ«÷³ R\EæwÞËg‹\ @–§¬ýRèÄ‘À/^ºõóïJÙ‰ºU"ï«Åå ùH ŽC=åñ/ݦYš†×”,6 —õ¿gªB§o”ÒÍý‰3ÔÀdA$YŠÈlsMPSá>ô‰vû©Q½Û¦˜wrœX`1çý<øLåyåܾýÂXüG .)eó¾:J®hº`“lR?ÀÌ($ÜšKEõJC¶Båš§$0£·‘@ž¹¹KML•€‰KÓ£ˆŠOÇ`g»\!»2m¬Ù=³O«3[Kïñ‰žo ì}ć«t¹~á­l^⡼‰ø¶Ë .ð4Þ¬“Ê2Ýkäœp<æ ;„ŽÜejuò@ÿÓAæf®Å<µ‹•ZþÆ¿ê,'ÝÀM·¸ÊÐ,õdEnËÏîå3y ½ÌÖåÆ|Ü,Ãâ o3«‚® 9mЬvEnÃ+ƒÌu³ÜËg¾¸¸j†‘»ô-ÐßͲô9§JKô¼Éƒafý€žd)yF5úë~5šØñ46±³Oýƒ:’(Ing]NÁ0³Á­Sê"_ÇߎI&z™ÿ íX¶°¥£¼ç\ã(KEn*rêf9O9(0õì¯Ò!RTä…uéÀÉWnÜÅÊw´×ò2‰Zj9´\µ³>ÅxX®ÓÞÆ†q˜Y§_i¿T¶…-Ybâà£Jö“‡©™LIæYÕÐÝi™½¯´D)pÃVPè̼¦1ßMŠóQÖ›y‘9Bæ"õ#½~Y,H5Å1þP_øžÊø ”0&ªá×nK0Z‹e†Tn Ï‹Üt* ÷= –¬Q†åÍ–¸a„ÑÅJOÞ‚5§ìtÏÔÖý9·¢þõÛÌŠm‚ÉKüöÞ+sÝÌøèbõòÙeªZ义ޣaœ)7§1“ŸbÜ­qSŒKAìaÉî\t{tÇhcc›WüW—Âaf‡¸ÓÆF…w,„En÷³ ›x=ûnÿƒ„fs„™q¦\zj9Ôdv–aûr¢™úÝV;Z _%ÓyÊšF]o`o‡&wßÞÔÝCNÝmzÉ4±œè§ÐÂÖmö ûY°y5ÌlƒÌõ³ÐÁêeªº)Z vhê¤bØ£øLû(e¼BO¶yxþ QÔ­£Â;oò BaÌɰÝ-¹-63-üžÕ}ê çìaIª7P¤ 3aø!ù˜cÐqØH[“E&˜ÔÆ·…­æš¨ º¹›k‰Ñö‚Ü’ßçZ ±*9_ÙÅÝ#¹Æ}ûŸ¶žó†­!­‰^ªºü}Åë½ÌKš°_:Ä^æMÆ: ®Äh'ŸÛ—³édd°¾y"WUbÞm‰ífùe±»ñת==s°mòµ<ÌbENƒÌéÁQäv…w¾àmí-ºYÛ#ݦYL|‰‡b £Î6hÛæµV+¼éeÒ7‹Œú?Çàã¯óU{¦´,rµ‘]‰ì:ˆnݯX'˜ôƺyÛíŒZ5È¸í¬¸•¶‚Î1Öyñþûÿ}ŠÒA} œ2’ÅŒ7q%:„±˜¨™Sóû}#Un‘ñ,žy;%ÌõSå­&£ô'åR<ç¬+eR„¨@Vá{|ò˜KµRÊ ïHÁ Sõy0¯óÕ5î§Š…ìÌ\_dÀ+2Á¤OðR†!(WØXÓ]µ]Žmˆ…6TEq:ao`ï]>µHôqWéÛ+|ó‡üÃ?ð‡ŸðžŸ%.:2NÖo­“JˆQ7&/ÑJF¢ó54±À{†ågšÿ¢Q½5ÒRá¯í+-·=,Y¨¬»)ùÓ)lpPý­ùÈ[ÎóÅý–OóZûW™«©æÌëk##-Ÿ—NÅúG3ˆcðÊ­b•Òöâêr´âXh•qù޾¯I¥´ëHGŒ2C'ËÕ3ÇhK¦?ÉîÔ£L¦^s’Çx¬7ä¤ÇsGr/d^¸€®Ð%ý×ä&™¨ðŽ¿°@ÿ$²Ú$qù°-Õe….÷àVŽ_ñ3¹aÚã†ã­3Û_-l¹ö2ÿ-?6RDÞœU;õì×q Ù¡Bg4'5qæ•éÑÑrÊ¥“l1ÝÙõÈðƒè/®o·¯)KbŠqËUW+™N² L¼´seIÛ¤õ+^ÌÔ›^¦ªÓ]‰ÑFŠ.ñ0Ž_SÇ]´ 27ÉÄ“.âTrT¥fhkÚ5SÊ<*C/­Öð—¼å’]¡SÏŽÿȿɃOyWg]ÏÍ‘¤`ÍósÙ{L}§l~Ê 72û [¯zˆ­Ýµ„z÷Ú‰mÑ"ùPd³EK[ÚÔj‰ëùì`u‰žmšØsÖØÀ^½|æ~År [¾Î.¿âgB7c·ÂÕWáYܶY9—©Î1¨ƒÉÓ._yè6b<Å)íéùã‡5ÇJFñ׃OSú¤ív,J}rOmF‚¼Ç3ÎaMÄ_Eò$­Ë#\RFF)†Y×QfHx¬/N)Az ¿ŒX¯“ØÑsƒ´³Ó<^Müλ`™dapÆ*µ†zf•‡\j›Ù®ãÀéTìÊ5’Π?a+ÁÑÐRÏ<þñ‹­lnóÚ5î÷2?Ç cŒ9SNÄ“¦~}QnÞw ô¥"É©õ—ùݹwùT7ØAæ|GÃŽ­ Î]t24Ï·Ž-k垕ʹ³.™Í¾ÖÓ³ ;®—w§›â&­1t‚â¬HëôY†—è©ðŽàÉ¥‰žÿ=tElÓUèÔ?é€:˘Ç6Ád3ÛR3ÖÈ3%²ôEšØñêìÑPËá.O¸¨ ¯AÀ³ [³-™23Í7¹ÀSýdm?jîn܉4ý<¥eºUìÒèŽa›f­ž š‰½‚·„çÍ3·}Ü 9Áeù„-Z´14XRÙ¸Ü!Ê „Kähg½D^f–Œî?¼ÖÈùÑäÝè–i[ä§· &¹L$ã^Ë>r8pž?~ —þÓÃùp^—³NÝe­Q³–)Ûú…g?¬áØýB¸[)gpg-Auk!¢‹ÛÁþˆƒpп¢ÇÚ驌odÃð¨œtÃ,ãäûžå±j·Ý@lé1͘ò[»^’î<áÃÌîФ-¬ž§"Ȫö©DN1oÐ ÇUÀT\·ÃÂÞèF1ÈÜwì†{…k¢™ ô»úD¹uŸîë¸5qÈá\ÄÛæSÞ•PLô Pº9±—Ei¿Zª/q³pL>"zÎíEŠÖ’õM2±B×0³xêX¥…­Y†E- ôKз׊é´ej¾Ô*N•\d‡9ÒÓÏ)Âüƒ®µ@´y±ÞåS`„©4Ñsëg¡–Ú,Qþ¢X¶›eQ¯˜8úu*çJ4›=ïm*šÖ_Êz0É„MÊúAb,ÕK >áiQ#v3Aññ3½Å3ÂÞ‘Qi¢«ð ‡¥à,R¬ÄOÒ‡N62ëŠ^A ´OèHÌ#ÑäJ’·NÇ+ŸÙ‡_Ë0qÛŒO›c°½yfÞ§¾™mÍÈ[®¤iEâŸNìÆº¶Kc¶‡­1Çd†N*®Å©äËk*W–8ëÖ8SÝ,»¡‘ð 3›çÞ$Fý # ×PR$kªÂ)ÛMÝ,+EÒ~×'øÃfú¸[á_g‹–66 Šôs™²O½Áöª¾Æ˜–µÿ5¯ÅklŠ„é9ªz¨«ˆ2bQúß=vÕºYþå õ2/1r‰«l/ó.ë|ns‰QÁST²iÆÚØø„÷¼LÞie³Ä¨„ºê.ñ0GU;ÚiÆôèJoÍ™"°¸“ÊeÕ³_ázöÛØhfÛüÌ(ió L2öíQÕö©·Û6Ÿ®WþS/óáp¡x‡¦afƒ[è‰õ~ðþtoäÉ? NјåŠÄg²Ìu_Y8å¬!îX‹wclúKId.Z>çD­tÅ’3–çÙ¢lš'ëM[Ia8æµ»›#ËIʼyòêÉ}²m=ÙÜ‘˜Æ|ËÊÃA¸ÔãT2¿îñgFy ¹i)ßW«ÎÜéi·\ 3ëI f°ÐGqYÅí¬›º«…y;%Fïsmˆ;Ú–Ça¦­Ûbf-Úc K-Ó"œÿû[â6ÉÖB1 `Ñ6i`rŠñ:ŠÜ´Ix—¾!îlÐV¤0Á¤ÝH¦ÕMZ i4!ňwAF,s1Ùje³Â›ë´÷°dæÅ sUrÒ=ë´»Ôº¯rLb˜\|õìÛŽÓB@¦rËvC”‡(ç¹w@݃ºè ÿçÿ(ªų.Sƒß M|pÄw¦“”íbE³¾Pz5±ó˜7*tšˆf™¡í»|j«³À çRs ÅœßöôÖZ§}‚Éf< ¶¼»örTË\w@¢ph§Øa’ìÍÝ ØYUóà‚c©“Æ©îMt«#†'G“@­pVéPº§eÒ.å·ü¸‡%û·aí›ÚÉä´rôüñƒx|?WP‡À ¦Tõ.V䵟lÇ¢ª=Çâ +÷cf¼› úœ*‰«á±Ñ¸E(1†vT’”40Löi):J9„‰¡ûß=ÚyS¹¥K†ý"»X2}½èöO Üú–YïvZ,rÁ0&³Û B¹M˜èÌÈ‚ «u2O÷tUJ™ënHÊ€ÌzNᄤ/™lÙ5ó›@lÁ Œ~Q§>îÍl;~—ÿÖÎz'• T¦×Ïç¸ð¹Ê’ðà Iýƒ€Lž™ yèÂÌ>ÐIèR·õ gÇç³êñK…ߣAf£|<%ÌÚ‡(§ô} ¨t’î‚ga«­–C_'È„áT¯SÇö󺆽}8ÒÊîóùÙS‹—ÀÖq,á:è}èd«Kü¶D>½ôš@žâʇzÁeá>×lÉz!¦ #A‡£^#ƒ^h™"7CºsrrþøÏðø'ÙíïgfûßË#'ÓB]O‹P³²H*ÂNðT°HT”Ltªf< (±pjXyê9§,ÞÓ·QWJpç4þæsj[gÉuG740"fNQ¥œ…eª J°®×È=æI Í“Ït*ЇduÇOÊt±ò!½Éƒ2ÉžˆM¡ ¹ûOJ»ô¶èg!hú±8Z \1}©p}õ0”6Æ`ìÖ•?²–8É~@kŽˆôX’‰g¸†YÃδRR¾v®¾{”7?K”ðŠUæì$2‡{‘wùT¶}P £Öú} ¡UìT2£ú;Ââ"·½:ž.Ï­s)'yVâ°÷Mý‘ýÈA‚jÔÃÒËü.}åÐáycÄñ[¢D…ýnübPó=~?»dúˆƒ‰Ý­''F"LÇ7J¯Z²;?ü *Ö÷§<·¨n(Eo0ëE˜VÖ ;î&‡í…ã1Zaž”Zcœ ¯ºLµÀ­.VRÀ$£ä˜’50­p7eú´ðLÜŸ'YÈçž]ûøò»”‹:/pÃ.;tÇføêÍ+­1qï/c¢‘ÝUQ!íڢŦS%»gÁ¡7ÐD ï#®ÈŠ–m’¡í .VfqúÕÌöwÄ7=,éÈ•Õ, W1ã—:Xg Ÿ)†þü¥²¥ÈÇc‡Ób¹DeIndZQФÚ7±SàF;ë+t Q–k@¬MZëÙߠ͘c‰ˆ€ìÊúßã“Fv£“)Ë1G5R†#™÷2Uƒ1¥Òýü¥²çù?òÇ«tDÖ‘«À ËR ¤»YÖÆ"¦˜%F¥34°gt:æ`ÞŽ¨žþоn™ëž4ù,£­”Ç\&/°Ž«c,§ÇZ7¹!dΨh}…®N>·É¼N»-Y_Jn¡å*×1 ïfy˜Yƒ¶U]<´Ü•#åü,{¾0]Á“`…Lu{27„“¾ÏtÁ¿B0˜ØR|O|ID<‡ŠNå1FŒä©¦b*O>Ñ™,‘Ïô^œùtÇÝÚ€Mi0n /¢““™>ÜÐ ÷y ªö½ÌoóZ°ÎÖÈmóšYˆ&•¨NõRény(é=õ², [@Íl_äÉ]úBaš¤Oßl®¿§°T8wÜ[´ÜçZbÀDŒPFG;?K[‹\ÜD6`NF·ÐÖS`»Uáæ@füe;b µ¯ ?µ¿â0O‹Ÿ"DG÷L\k§N„aÛ0í@ àüƒS¨à|¦NŒ@Ÿ!ªdÖÚ=¶‰Èʰ®ˆ&¤m[Írâ·8Ú‰i,H 1²È8<;Yj«ú߃¦a¤6½i#¨Å¾¢YÌ6‡g‡%i²Pœ#­(Æ:•²ø(›@ FƳûÌ:iÙŒ½dSØÖ“£þÄM¹ædy&ÎXÇ!™uÅ£LÎd¿µ‰&¬&µÁHyÉþçÂÝÏ‚+»Õ«MZP"fN‡Ôpßn›æ»ôíÒ¨}\´ãÚYwúåÁÊyðd6N>g91“½ÊvÖ{™w­ô`šùFƒùm^ÑE·‹•£Û¼ö/ Z…,¦–L3&u"¼6´„wu]–}[ u ;@êå3ÁÖ s ô»ô›Æâ;Ê€pêÖÊf™¡9½X©ŠHÑB+—xèéÕNBëwa‚I›áËÕʦÊå´\Idˆ8ÄN*bDqä6¯\¦ª&×¾Gƒ·`ì‹r7-êÿ0Å˧émL1è÷x­}›í¬K/4Ó飰LÂ…À7GÕ1•—»ÌõiÆö©ïäsIËt[®<Õ»4:RMNày­ú=þÑ®`L8Ì©JmÑ31o5z7/›»5re®ÃQšu$é9ß¿£DÕ¨î™ùzÚŽN¦ODRY3žq{NÜj%òÙEòQòß|ÔÄœRR¯nâŠv¶hQÆdáqýuÁmcÃÐÛ-Z¬Cs ºd¯‘Kç11^zÌ®Îù£~DÖ¢ÈÉ'[BÈB\@í ºæº}ŽÑ…o$>s­±rØ‹Û2ÚŒM앲K£:$AÆ>õ¾‹XÓå:í—y4ÂŒ|ŸkvJ)Æÿö»†q¦LÒÚ£a“ÖuÚ3oˆœà@L"nØÚŠì`ñ“‹¯šëö¶yEt8Ç`;ëL¸Çè:íUr9ªEnzðžÕ8½@;Úõ’åöRë«5²;ÄÛ­ž%OxL¼þöÞ/$ÒÎ9AcÚàìLk _1”û©ºu2®u=(k$õkÿþÈ—¯—M8H¤ |^`|Å“i†œËÚ·4nÆf^XÐ IDAT›.ébɬ|±|¥Ð#;uöLTÀ  ôûPyL»ñ.Kš:M¤â«^²7w'c5Ê kR0Ž2B¸ïQžîÀ{QW_.ø`5ä”Òpk3‘;â`©YG#ç˳4~b¼ct¶ÄTj°”rm_\ÒºöeT½vŒí¡üž©sESwôêDÝÖùFªGÒ Ý#@sf±^ìUí\=¢ö'‚ÞtôB÷\·igH;÷ôâçúC²ªJ‘Çßià„ ò@pa­˜ÆîDݧê"Rã ¯“9¨ý‘Nø¹~³¹](ŽkÅxóG*°_Eö^#µ,h–HWS~^eZLT*~¯o¾Öm$¬ JóuU5й I÷Rm,_[<q´ƒÔ9¿ž«£K_ÂøDuétZK¸F±N@Gr©¶1mìhhO»dD„) {r¸¾Ð=¼µºur¡öªF/ÕF×Â1päŒaäkÙ 2ú¡ò·ôfR«  CÚ†̈OØ‚f‰uét@{'êžÕÂßèÏŽTèÒ)ÞG*ôè%2ñ½b;bBkóšq‘Á —?,÷/0¬õæG´>¨Ý%M—´Ì^ÙN Vs½œ1”*W¶tf¿`jÞ2øH[=7w4cåLjHbH Ôðð" /õ[ÿþ‰ÖÍÆTõ=ªAí:Ó4Sø¼¸—¥·ë+ªbë²]Hf¢ùk¦~”ŒÚÚ8ü“®¹ŽGŒ>û€A–‚ª@øþDÁJ¿§d”ŠŠ^g9T-‹G[°#Õ®‹ÍVUb÷M—ßÒïrßýT"±x–“ÎX-rþ –³¸&¥Ê8çÔÅß©Ã0c©´Ù¸üÆ%ë]e^üO?)4¯=e¬ÓÇÙf3aý+$ÕÝ]%”öy_” J4ú¾ø:-ë\þÞ¢(Ÿ5oƒµò¶›Y$-¤Ák=Êr[ìM5Ä2 ÚŽÁs~¯³Ð͘ù‡ç‘ °®¬ùÿêÎ%ýÝo?dnb½á²hPBÑÍáEuëñh#£õ=}Èš‘EÐ-¾Nˆ¼£Wwõ¹ýq¼^VTõ ½oõôÈ䯸‡å»úü¥>˜Ò Üî«»GÄDtC ;(©áˆÇ•&xñ'š‘~+=×_ý¦ˆ÷ GRUéTßÙÓ€—·ÐŒ‡ÛíéYŠ\þÉô¾Ã6]è3ó"ß„£m9ôUÉâg’…W£|ϾÔ÷è½¼Å7p¡ö’ª6µaé3"ÃæGX‘=.(-0jŠ;p\c)¶4âLŒ*Tf-:–çã@aºvCmÿÿó"Ú-RŒ 4åO‚>SÃÕ7z<†LÅ:%ˆ¾gj¹0ØÜÀ5I¯HYDôˆÏ™Ì>#jÒ’o‚¤­8uÍAj”/¬Áo¡aÜf×4^@¿ý ôÝ:ÙÒxIË& 3RÆÙÒø˜6Œ ¢Û4¯™.Žiã÷úföÛo}ùÛï]ª™Ö™:®ðL/S8_¨}DëCÚ± †§,˜ù.hvMG0ÔOÕ忝¬¹=¿«ÏÉ| ]eÍ£„Dæ›Ò …ÿ‚fi‰ìé“%M#ïtO/né ÏÇÝñTïñ.{ºÿF·hS<6;Q÷c=-®uDw˜ƒÖökÝF»ˆVUTU?¨Óþö7ºtŠÏ/ýÇ–0¡YÒ4R÷ßÔï!Ž›ÜQTµCç/tÜy[¯­;Œ">ÌîAú³%MŸª« #w„G*liœ—¿«´.y[¯ÏÔÉSÖbY‹½:XÕäš&P.js^Oü H‡ACc. ` B¤O¶}Íí4¬çes‡Ê£ƒ ÿ&)¤+»ÎªªQað`Üž³ù€g HlK±.¦ß<ÞÁ9–œ¸8ÐÝòv0”°‡lU¬$KȯçÂT)WUéªCšS÷jTcŠsû”2ëh!ú‡nø’\áA˜xQt×û°Aí²WÑ’ÕH}MùAq?ëU­¬¹‚Žöô!Ro`ÃôÉ*k‘ –òÁ"QlDë°»u2 =+ôú˜^PÏja_ý5å?ÖOA™ÐÒÀã+ÞeA³Ì6XŒOc*VŽªx„K―¤MûíjpO÷°9}[OÔ.è(¯tF/ŒIztÌ|Žü'i[ÃØÞ“ÀFôé¸ÖašœªëRmôLp¦µ4­¥×ºM»¶§û$àcõìéþ™:ÍL¹¥7V»@øLUõ¿([øÖþ¡‚­s—NÕGž#úÃrDœðú>=‹JgêüBïÓÉ4¯u›·kÓ%‚°ö >Q7„ÆŸëJÔJ¦z|]=:F“ “‹î§–î#&‚to¼#­ùµSg½ª¹%õæõ‘ +šBÇϵ­³µ6àU*mk¥«“)Ç@Xž Õp½P.kåø08¯µIˆ¨ªäÊÕã¸Zq9ýæñΡ‚?ùÉOâÕdO-‹P©Ö‹Å¦e©fCÏŒNDá -/BÛµš"¦çFÞ®¬9©956ö±R –¿A››­V)° ÏlêjX –6À”%0¬¥ nFv¹£Wö¶”‘ÕÀ Œò]ª-¯Bv «K9x‡  Í?÷‚ȇö¿îrG¯¶5ÌÁ( 1÷E-pâ8ʶL|¨g–®ˆK¨`wâà-½¡ú^Zˆ™‘RËt4¬m„…¼ÆÄçBí¿‚Ý¥WnI#–ÖFbÐ’í.Þ£(ûÄÏýpB>È›qÑØÓÞ‰;²§ pJêþ¾„Ø7çÓqåx…Ë2%œ\Åþ¤ˆqpI2I†D›–Yâ«V³ÂœC®ófqµŒZfWâÉÍãÝ@›Á¬eðØ«š-ûôNWn˜)\€NäWŠÚLÝÛA$µÃ†˜^]·‚_L˜U¾9Çä`Ï'+“¬W ‰>ˆ]i«*e©Ë]Å ¯ù#¨zU£ÐF+#®gÉ:lØ0xgÂïJ™(³¤éUM>ÕcÀâøÒ÷õ Ìœ”ôkÊOhmDëø_”µxG¯è?ІÇ*‚ æ=;` @hdIËh¼z Hó2 ”#‚çaž¾^èž5 ÒGþ †§Ÿ=!>5fPãܽ:x£[®ÔꎆêYU£íº˜WyZKÐ( bö4€™HU%Æ„`§íºÓƘ6¬WB‰À´Ì€ç v£?a[ú v4[UqP»4v4²Àªt–ÀqèüB‘¨jÓ2ïc±Á6¬mÚ~^Ö\U£eÍÓ¤"ÀOÇE ëPjÓ3$Ÿ\iœ\®1ƒÙ„ªMûŒÍ˜`eý†&a9tÝ{uºPTÅ&EUÊZd£Æ{=rJ»¿xçPA 3»¤Ÿ4&IÔ_Pòš-‰óÑ¡Ñ;pð„Ö|¾™„‘·,òtEù"G“ºõ\ Ķ©1H‹}½°… ØŒ7fjõ&¾¾Ø é‚y$,.hYë1mtéK¢MÆưòC#`@ÏѼŠ‚'ç,B)I ÑWñ÷[ú÷Þ<Ch¼¬Ext:·ˆ_·NöÕoO?]„TöFaëõkŸp¼¥ñ=}H î×>9ÕÌÈÓøð’Æ:u¶¢)Žv@ÏTЉ§K§=:~©H“e-rµ#QÁç%…OhmBk¿Öw4 ȇíÖ DÄ[z#iU“CÚyªÇ¿ÑŸà¯á=hòè®aúaÞÈD¿®ˆÆŠ¦,e¯]cGùôÉC=Ã=’íÛCÜØÓý1m éçæ¯Cçð3½`î.ÇTÌ%M¿Ñ-·ª|QÿH`–´ç ²ñˆa@Ïw5Ȧ=ø0Ô®"ç‹ûúDÝ=¢h¦ZµFÁ¼žp_ǹ”&6RNÔbZ}»ÃYYs½ªÙý«(Ð7· þë–^Û4›Ð$UÒ:T“ü¹UnÝP‡'4zöi]Þ HÐ=¸õm¯×6xŽ’ZnÄ g" ¯Hl ‘j5±¼nȺÌ'óLYŠ”âšŸóCªTP¯’–´‡¼ù~J6ZÖRbÇ@3Àe| ,øn$J¡ œJ«„r’Œ%Nh zÛ¤VÉs‘‚È{YÙÈRñ˜ß×t$]:Ðó=Ý·8,ê«zþý B¾ˆÝ’xSK=)1îøE+-Y—½…cizTäAÏ"ÓÏØò­WÄ—pG¯@ÿ¢²3wO/8¹œPÎŽ= M­WšìRæoL g׺“ˆ». FíºŒâ߯d:‚4ñ Í Ú£ÖÕ…ÒÂ+k€kÒ ÍžîsAB8rég.ÆƻļHÍ{ }ÉÕ^/DJ¤ö†ó:üˆ L‘‹&Å ‰n¨ùYÏ¿]íS²‰C¬úbD³ÈµLÚÜ&zE J½Å/¸CR_•sœŠÝƵ,£r†õ=`- Ú•·ÎÔI8žÐÚ·ô;ôFKªò‹óš!º1dBu” aÃ!:ÞeKã¼Úކ°Ö-k1Øè‰1ôz~RÐOØÐX¢ng~kt:ð¹à­!ŒÐ‹À³çØ$ÝÕçKš¶‘‘îûúí Ýãµ ÙšàKºb©ë©Ÿª‹¡gÓ­ _ ÒA'ê†fBÿÿ~^3ýÚ¡{¬…¡ ˜È˜6ØåZÕ$ߘËAæO– \Ðl¿öêÙš&,ÕXÐѸÖÑgZÓÄ¥ÚëiQ•1mLk饾Ǟݹ¼Gǯu›y$YØÂ:}6.Ìì?*ïI… ƒ=6¨è´P>WÃyÍ ®Ô¡ó=Ý·ÜŸ‡ß‡Ê'¶K¶«Aߪ,_ÆË#V·ý8€ªFËšsy]Ö"ñ„qݹ:È[ðw~£?ÙйÉVjsäìŠ1¹¿IWïó"Hí5 ‚È–\Ý .kñŠ¢‰ ã¹UO¤Ò͘ Rfj¼‘µËšKé°FMù fáßÊ ?†Ñh½Ç Ú¬6i!†l×z^Ë⌈0¨]Ÿ¯Ãv#Lli|H;UÎkfLçꨅY4ô3vž¶4¥‚=­NU¥T©ª*õè˜U-8~,&ÇIÒ„Ö¶4~Ko4{¦Î6]j—Kèž^­2Bœ© £¢6óÉN^±íùm ï2XÖâ'úˆe#“Ô?ÖOI¬m¸¿PÔ¼#üRßÛÕ âëô;Ð’z=:®ªÈóW5YÖ܈Öw5x®Ži-•´¼¢)zÄaÕØjJ+ÄÖ ý7½KOPÕ(ZG éo"2¯Ý‹V´\3îh¨¢Gv»˜Ô*ïNo7©UæXü7¤v]`ñ…L0/ë•gøÜ%-#\Ñ£ !xýrM8}p‰–µ¸¥q§Rxçê yõ^ó¥Ú¶5LÐÞ…Úád°ÐóuhFzçŸë/‡´Ó¥S$6hn¯ÙS&Ok ±+pK¾Û6]"íñLYµÒäz¸¥7{ºÿRw_ëö véÉL"Ås„¥]:-n+A0(JƒðÍ n©i-•5çß»K¬®F€âƒóç´–(RùBؾP{’¨U5ʗ̅̈́ϲ„?rm£ßß«ª[[“ð†ãþ®Í±rQýtøÊÄHHZPÙB‚¦œEî_ü­hf¯¦Å½¯fûk5]yB\Un¼µÍå<‡ [ÃÿBóíÚ²âHRÍ«µ¦ù»Íjm:F2–ª#Ø1f~q[`t‹…V8u’–4M(l ‘27'µ:¥•³J–í`" Ç¿¸êkW{3!=«³Û=°Õš&V4enTÀ=O³<æ–1̹•´}历XQb¤ç hsö¢N iåJ«»¸;šyµ9_4®hñ=ßSë‡uÉ~½šw“+zÄÏ¿ñúý3Yцô¦ïzDDbà®ôh$cP»aå?ÞòM ‰à^nñSgúhÆøÿ远Ԫeâp‹5gÏä<ñR2ÀäÉR`¿ˆë§U¢à;6ÇÊ«ªDAÁmãÙRÌÐ\ñ?¡›žd•Ö~£c&aMN% lŒ‰I˜ÃÜ$h*wm6c#ñ¸QˆÜWažµæ.í ØE^ÛÆ?£¤µ½,5B$7öª&Áñ°XĺR¯?pØbíºè×¾íBGÔîžî³™{¡v2Üc=%‹ î‡~?éÔHÂzÌ¥ÌgëÑñˆ>-i‹H˜„,Z¡KK`b)õ¡žMjuIÓÈëa¢¸§ûçêUcÆÇûÐs¬¿¬K*¥‡›ÐïB¦á0ÊZDq¼¨Í6]–µ¸¥Zc3×kdôRj?Q÷¾ú·4Ž~U‡ÎåúµÏrä@ÔâKZ¶m#ߪÛAf~›ÖÒ™:ô·á¼f¨ùøŒ4eÍ¿j÷µnÓö¬Ç´Á2·Éš&¶ôÀ½ì€žOk žoNW|óq €Á] Zr7*ˆFòE”gãOKŸ›Yy.Nö œf—YÚ_ë‡:3l€Á vGôé™:ïè‡Äö1Þ+`¤ÌÌ(nP¾/kDÂoïÚ˧ºÞDÄèXðZ£ëâ–†¦Þ¹åïA¥©éQÖb8eU¢¯Á Oi/ïÑk³ Tu‚¡7%[\ªð<ÌðzRúè»ÆŒÁF"·l¶CÇê±/m§ÎîéG>HÒ]:­èaúBíPF´> Ïˆò`V%-SûU±üÛ­Ky@ET"Û±\\Òò´–ø'ÞzCcÇꩨèkrGChœCYæ0 èký®>·D=N€ÈÁŒ¨èÑ…Ú/Ô¾¡±I­ž¨4¯¢GJ¸:C{[Ô1`KC׆CÏD œ©‡z†Öߊ¦ …ó @xÈ_¸Òzò¼fƵ^ÐjLõÌ.‹€ZäHòÜHke-þF’P¹%ýÛk^3³Z¸«_"÷WÔæ¾úA}íóKUAÑ« .9iDë^®:RÁ;x`‡Îm?ÄÓ•·.;ð]'×E NÔpFÔé6%ÚMºÒ-=`…œâ‰†ØÆ³¤É] O¾£_“«¶4NÀ1 çkñþÞc)×–™õg,šÍ‚³fÿÆZ*É£hE“„DB?rØ’¦–Åå>Ó1\”ÍëIB·siý>§:W§¯¹Ìœ0 (sc«¤e³ó]¬¥ú®ÎÚ0ÔÜ{]ÏG.-¦ä(¨£}øc=Ñz¿ö§´RÔ&­ i©¬E‰˜ðˆà{úðPyŒÞ+zTÑ£=÷*+¥ªÔ ’ÖŽ†îè @œ­oh š’v]„èTMÇ] ™‰N‘xˆã;¼ª]Ñí}LÇ ÈšÛ^×8“- K¶ëé¼fØ»B\cZKàopR0{döFBb&Ô¥Óßé[KšÖö”Vˆ°4|´GÁÕi†Cb¸TÛžîj÷ž^ðI÷4`K*–|‰àwôêPy¾œ] "©Õ¯ýô‰Å øÓ/ž©³¢G š-ªb’ý¼fè>ÉRä!Ë^uÒ'‘™èÓgã‡Þ'ñæ¥ÇÞºs{ò+x\)iž©SÊQíjûr¶}yþ¤VÛuÁì 1eŽgXÛò¡*ÂeÑ쮹xë^Õ`ÿ.˜VTuiîÜyóxW2VîKk¹¹ÓuÕÎ#J%Ålh  \TþN¹ª”Šš塪QPlfªÎånŒ<µ ªfÌÅVÓüÈÚ€å"2R-p%¦u®ª„uÓ'´VT…nâß”V¸ØˆžryߎZÄSp[&1#VÏŠ¦ÚtyKoèZp‰,iÙíÅŽ†Ø¯‚è…("ItÄôÇzÊ‹(OÕEc±¥ñ#64¶¥ñ^ÕŽT€1ϱÁEd‘豞–TÝW?ÏgUkA³%U4ûXO_è‘ ªSg5å¿­¿V#'êþ…¾_Ô&áþGÿPqeÖµªÉ ­á‡²¯þý¶’WíŽ^Ñ¡pˆÜƒÙôj“Z¥ÑAÇ¥Úª%ªzû  m´”_ª­K§°7QLÇÈŠÿE¥•÷nôêÀ©ýP}G´Ì1RC1½„m^OОð5c…çpÜbøt8»øk´õ"}³¡?Þ‘6Žß‚2­¥y=A|rXÛäÖøNÔýT-ŸèŒÞˆÎÏ;˱rõÞØ‰º—4ÍÇéÖÉ´–Œ»Ð„±SÇU 1åÜ uð]a^¤óZ/ºi¤¸Ä˜„Q@Ý=Ske©1:㥦SèÉ2)gUÿøúÌzЃq&»!ÇUDî7“2Z!wfÊš‘}çX)~=¢vµ¥¤–´­adXÒ${14ÚW?›¤˜E½Ò}õÓ=Ào>VN²Œ…Ȉ'µë‚!f@Ÿ krü3=ħ£¬¹—ú‡Æ1m 8KsàÏЦËSuv锿<Õã²æØ…'ÄèÓKµUTÜWÿžèBåÅUl“Í"j/訬9žr5¦WºÃXèH…i-¡.QÐÑS=æ«Ðs†g8b0÷¢ÝE† ÕcFndðF,ç™c’r[fg8ºÉ›ë]ÉX‘AèK°.øÓg!%üSÆóÌEL4:ˆd–}^òMsÎÈ™mèˆ}TaÍy«±¹)޶(l±‚Œ²îWèì×Y·ÎUÁúÒvyöVÚ´Cð»¤åI­b‡ˆ(Eë±zv4D›Õ£c¢EºuÂÆk´ÌXÓD¿öé‡Hô_èÞ†ÆÕÇôžŸOi:49€;Ò*ƒ·õºK§e-UÅŠ |’7-kqDë·ô楾‡ü<0Ñv´Ç¶Ùm½f2D¿‚ú®ƒ yŽªüÉÏ™™U5Êì @v€üíUôèÛúûM-hMB´*ÎÕQÑ#ˆ$Œi;Ðÿd„f×Ê÷õ‰jO;"Oød¡IïîÖ–¾L—Ýä%"øA,ÝøW2GYs”ºu‚Τӌ_ Îz–iüíDÝ´¹ 1—jc†Ÿ“»x@Ÿì¤>°LÑ&;Vψֱð‡r'ÇàAKw¨¼wÂ"Á8%`«Â\‡.VØ( ™ãõ=–»y¼ýŒåkè–K¹™‘5¸,T¹–T®¡¾fžE$fAç)ó"½]3)#—8²O#—$-‡QsNF\±àíÌÇmîÀrÿDö½>Ø`>j w˜*I:Õ{Þûaúí{U“[çi$˜»úœ=!€)ŒwÝQ ig]ãõlEShÚvé´ £¼jä‰5Mté´SgH¸Ò<a‚è߯ô]01Xçêx¦‡·ôwÖ•,8RôVÑ£7ºErêUÍ4ýq­óšOõxDëˆû™ òN)l¡×0ƒ{!¯Ã7^èЖ”cÈtª÷ˆÔd#TQ®¢[eU &á ÝãSßÒì"•çÛ˜W™SæñžM§œ· Y²?Ûx8»0Ö5Ñœ¸ŸZŠZc«û€3…J·Ò(Súf¶q•ôH•äÇ´!å–4Mf…†®¤oK­LSËn„f^OÐ/ÝÑÙÈŽHœP¦q¦ |ÊZì×~ª’s Øé~¯±•ä‰ÞwMÇêawÂߘYû׌y—z,wÄfÚÄsÃùV4¹æUbY4,ì5ÛÞsKKÂqL{ EÝ8—²!–ÊôÖ}W3hHcåù@N•Ù^Q´ökÈv×úŠôªø„ÖIPO?S'c×;h’”d˜mD“^™_Äðð›ú}MyLá—´Ü¥/a~¯kü–ÞÐ~! Ä,ÉiLüÓm½f%ö¡žAA$Š1Zã€ÑNÔM|/iyV >¤}õÏëɈÖYO¦QãJ@u—Q À)­°ÆõI¯Ã—PÕhUÅyÍ XÕèºÆy‹?Óß«‡2ˆF¡¦üÝ*kî•îHÈO<XÛ1Û·~XÛ šå[:W‡”CÑâ}IAG¹0Þ{[ÉþÔ}³4¸fØsÛRrÌÆrä0kƒÂ·Nhçp´Œ÷¸ôœ²²SgU•ÐËpÊŒS¸‘q†¡Ó‡²æÈˆ‡ÊOi¥¬Eò< .ZÞ9vžlv;fIÓóšAE‹E«Ã¯ß¯}Z^>éžî»ø¾Q|Gz¬|‹>ºyáf´§­©Rj¤âÉ«‘’IqÌ!—®š9„¹æ¶L€‚.}‰1É\À®¦±ϧHwUèÞ?6dæeøã_[ñ KÚ£I…îàRÕ(žôè¦ßk×+SȧBŠCú0ŠÀ`U¥ô VñV¦@1–ά¦¼5ôˆ¤4^¤OPi£]µ´+úJw˜1êÐsBÇÏ1¯kܽc¿ö)ÉGôéˆÖiÔ¦µ4¬í7º…}%X¥ ãïèUEÅCÍ© :¢?@LklOè_|¬Ÿk{Kãè ’c@5Iáø :â«XÕ$zN|óz²­á }¤O€Ñgfƾ}'§>i€Ñδ–0ŽqÑi^ýô±z˜UTtÙÊ›|஋¯‚DÈVÚ@µkš(knWƒÐ[V5IŠ"=‡v5ÈsèA“FvŽåÄIÉ•5g ÛÙ Ã8q0§@ŒÏÔ¹§û°Ï–ª*uêŒzbOz.«†JNmM(aÂÔ•aßœ/áRm^»õM¬Å)âæñÖz¬ZH <sW_Í©g²âQ-9WÕ *¯D ¨AÇ8BöصØÝ%锃æ¢&òJœD²¸Ñl` Ü­á€>3d eÍÝ4û©ï¬WÐŽ>·ù®~Eál1!I;bÁ”‚XÌ–’…³¨d^#¤ÖmöAIÎgGC_è}˜rŒµü¯pêàC÷hÓ%‹_'ênÓ¥­ÕƒÊí¼fsºt¢îšò,$ç¹`ÊÁulÓå·õ÷—j+kžÅä j—µ§Wº¬„É Ý-ÙE—æ ‘CzP¤+Ð}—DFgeІ¯GÇd—.¦lñ‰È%-Cœã›¡]aÞ|¦NÄœŠÚÜÓ‡/õÁŸþѧ?úvuESž?qkÏëÉ™:ar+™FáüÄ:fê`ŠÚt£Ì²3|÷#Jªª/e\Å|·˜¼GQÜbª›7­·ßc‘¢LL»uA#({Ó_êöŒIg¥>Ùþn1ÊJš’ã_5Û<†ñ•'LYÊ-Êë™-EB’k1/ŽL÷ÌÜ¡{h8· Ñ(ÊÄíw¿†£,ÇVŠ„ì.Õ¶ªÉ3uh¯['«š„–Ý©³u33—2<ñPç£ÝJÇŠ.CD—»úüRm´Axd%oë5yeMwôjGCõö[8\«fOúCˆ€þ‰>ÂeR«( c Ìü¦['/tPeSIcÚ`›R¾‹,xÁõ°Ê¢’ôß™:ùà¼&ö€[z@ßÉ;Jbß‹,W¾ #œÀ0m=„Eák»¬9p¿4Ó-yãÁ33*‰ìßÒýmõÁ¿ù‡¹÷õ… |ãlxBkQšàÙg•P€Þ1ZÕ@‚Ç܉e͡ބ6Ù L•òbK"¿‰3qÌY;!o H»LŸfÐŒ/)J8S%U±„-kqP»¡á©ƒþý™:A¹Ëš¡{=:†z : Ý”Š!î$ð'©:øÝ ‚o5c9a˜dÑlÒq`yJ·GÓpW„¹ª;$Õ· ëùÉ>÷ŒX¹dÑys©˜.‘\Ú Ë»-K8d´9VóI®E¨ÉëÏ!ɹáËñóf­ú¦¤u-Áœ£'?bËŠ$ñT‡´Ó©³7úc"ãkÝF*‚aL ‹ªNhmA³‡ÊOjsÂY-°Ê ¹œ Y«§SJ×”¬§ ÜÕçcÚ¨)¦ÎSu!¶Ô¯}B'¢ï¶`ç‚D-3‘Ï«|¡ö#þëïRmÈ¿šÂÀÉcv„*è·¶4÷d_ýÄBÚÞÕ BºÈ%œª‹zM4—ýÚ§ÇÂßOÿdë# ¿)©B@¿NÖ@"dÉ•ƒâ/€ÁºÁüßèÏôB Ÿ“2b7ãɪJœŒá§µDCy¢îS½‡-}wzQR𵦠¤DŒ“‘5M˜vÏ Æ «NülÞË¡{B=Ê©¡+²ÿ§¬ ïÜ}4B2+¢þ­ª¾n•ƒ‚hûy͘¡”M2/Q>$Êá.Í…‘ü*û‚ÀÛÍã-3/zÖú‹SŸ˜œŠÚL5iS­ qµI{‹YmjqVCC½‘- 3‚X*i…›‚X†Š †wÏY-ÞÉï }ãšÒ‹ª$ÙÇÍ'BÂêë§ÐÁ z²r®ŽªŠÚC¾}U“DäMµ;L„@ëxâ]SgV!Q—jÛÐÃy¶—žïé>0Î+ÝAÐËDF_÷ôb^Oˆ³h2 U€‡ˆh pѦË1màþµ¤é^@©·„9ÆÊ;zE<]Õ$1s8÷zèÇ\ Yޱw°±•è¸Ì‡0LÏ›¦Ñ¦Ö\Â*²¤Ÿ™õê½Ç¿úmqV 4.ìI~i”Á-:~ð¿w4ÄHIž&´ÜtjP¾à–Iºò¢$’G"——tŸ!±á2ŸKÊ646¢O7Xž× °‰!Nð<‡ê¦Ç–º´º˜š„¶ùÚf—{3fØL7]à‚X&å_%2k \7·Å¼ˆ›ÂõdYîf¨Åš ÙrZkÙÃ5oPIo‰7ò£%6â[`æõÄ—;·S’áhðCžSÚˆ¬K÷‚é7wQú*t1kfjè«þ~-z,Ï)áóÅÒ%0-ç°6€f9&³Dó¼jѾÖmt•Ä,ÀOÕ5 =v9§µÄê’w†€•PÍXÐ, DHwæ=#;„¿É€žµÉ» ûàƒÕª&‹ª|¢¼ßJ8#‚c]8¯',ÛdGC¬ø jw@Ÿ6VUZÐ,×*zöÝ:Áéƒ%§%Mã°EÏELïºÂÁcxà7m5Z%~Ñ£J4à Ë:Ãb€­`Q%òž[%-›/Àë $å**²óÄP‘+ZvqÌì*Ík†´ÊËRX àdz‘€? ¶{ ’ ß£c>ftüqvA…ë°¨Mh÷EUÒÁ7=¬k?#`Cô¯o2 eÚZÖ\AGì3äXõsY†Å³Âf´š™“!ÂôÝ ‚o9c5K%åÂd(ƒ, Ï‚LVT…póõ`RúÉ…“ÝÚ¯Xÿ"áN¹Ç×¢{ˆ‹nEŽÁ&&û9ÝnéAâƒP =Ae§Å³‘’ʶo<Ôkv†Ì5/ _‹Ë¢!V³¦ š>R8¸¡1¶nw5ˆ;Üî§z\ÐÚ}L×áigH;„’q­Ãn8VÏS=fV7<ÂvNõÊ[dß„ô;¾yÍÐ2,\ÑM!l{ÆcéDäÌ2s³h¶½ïM ùšÿâÞûðÁ÷?ü¯ÿû›ÿ+»¼û_üŸ?ùÉ¿v[Í8<‘¢%wé9,ð²+DóËT7\ëÍœ½†DÀ}ÈdcàW‚¼al sa –5z/Eß›X>˜°vme8Ì+.ìB{G¯p­µ‘«•Å=1ZÈäBí÷ôâ®>?Õ{ÏôÐoÃÅP֙ɓ¤I­¾Ñ­=ïUmA³·ô†7Ôê Ý£ ðÉκé¨ð è³-=€Ô€ññ™:ëé3=äÀ0Áµ°Pù±~öRwô™×³`>ÖÓq­GT#«SuñœÍè9Hƒ?šiDi Ò¸Þ8f5üy3Sà¸ÈËš£MIwJ>Þ&ÿ0U·òáÔµÖöwôëèç-…#+k\ü<:tÎ Š/–w§ÁBß+>TnmŒ„u6…é;¹y‚ßôP}[zÀ/—T~Î ‡´®ññ”à‹ÚÒŒŽŠŽŸq#ß0WWàc=­)82™ÌŸ±GÇ#ZwݸÔí¥â#IŸ4‹ç"…µ›Ç?ËãÿñÇÿÇõÿ<×ö¼þõÙÉÑW::fÞÛå*´ºRBÛóW ¨ê Ÿà(djWQô™¦ îPY‹ÑªÑkË BA†øüʉ!–Eéåfì.Ký¢¢l¥¹Ž‘ûîç·&F^WæEãA°ƒ© &Œ< Šæ šeU…[š ÕÁë¬ xƒ/t¯¬Eô)ˆ, ´0¿8VO».Éf=y[ÃzNa¾¡1ÒUAGwõ9ØøR iÉZÌæKªnh¬¬9æmqÓy\ëà;¢1:RFa^3¿Ð÷Y8¥µ"Zya<9€PÁø`ÍšeD 2®CJ~ÓX˜â+!àyÉTn£jž¶úi XÌ’r|K[§?†ëˆÖŸý3 Ÿ'¨?ϯ©ê´‰ýÚçÈ¡ésä¾O i’Ìè2cUJ6rƒ‚á|ÌUòÉ+Hö+Fk¸r&qHãZ÷rEU£j§åe7 1F¦tÌYaýQ@ŒkýŽ^A=E÷öP}h/ÑòéèS‡ZƒÔcÛId;R|ð¢g_ó:éÍãm ‚itQI(mýîb}8ê¡ßxz\õõíd‹CåKªk¸ŒyÍ…Gš F†Ò^Hèäòvn¤ÙòB7‰ßÂnÙv@ðš°öNx|4úªy= R‡ºÞPu†¸\*0G鹆´å}@ÏèNÕE„‚§ A¬†Nu|KoÌ_tG¯žé! šIÌ•§cëÔY».¶4þcýŒñرz¦´2¢uÈÙÃWTdùHv˜à(",î7©UÚ/^¹[ð:¡fµ@§hyYŽ’ቺáöªVRµ¤e‹zðC2¨©¾½: K‘Ÿè‡¸ÎÓêa.¹Ð•2¹zS]b“Ž Úw‹¯÷žîohìªmé„;b@Ï12—‰t%Ûv]c˜P‚Œ¥Is] €Ä@4¨¨ˆ€XeY‹¨ÑW5úR$'Xx|>/c0JɲÙj [³î†= v¤Â-½a€³Is_Te@ÏAŒ}ws®_ëöOõ±ÙzÎa3ÂìÑ1“‹¢P‹Q‹VIë=°Ãn¦Yo ü‰q‰ÀeÈšÇR`±GHÖT ë¨-ˆ\Îx=pb(Urª‹¬‚-¾Û`]Ì#/>Vо¬˜.AûDhªÁ¹çŒ¸ Ž` ›IÿjÊd? ¤õ»\w$¡¦~2ÿ[Ðkê®êßÏ´–îèîÏŽ!€«85bì«®ªÒ–Œh;ÄÒµ¬OŸù#Qo7( ŽF¸›ßõŽ0òÊ)æä<¡¸µn_7*H™|ëûš÷vëbK¾Í’ qcŽE³XyY`ܶÈËÆB2Ž13èCjH:9]ñ´7•o»c´lhY¦,5U9þ7½Ò§óvÅÍõ§ïJP-kŽÎ‰‘50 àB혶°YŶX41…£”^Ь”Ã÷]RIÕ§zœ"NuBk«š¤¹aÒ¾­aº1ÆéEUÀñ;RîŽÈøÒalá¤VѤ¸£WZÒÎS=öPþ¼v¼NÎÕAèdF ÀH¿WfRDRT{¨çÖS’úMìûÃåZvzìNÀ׫a~ˆ¡¿ˆ—#Ä6´!Ø8˜–Ô+ŒÈðj´ƒUž@};©¤*7oä5ð©ÑÛÅ×”¨ŠŠ0°0̤øˆwPU£<Ÿ{¶¤ªÓ‡ú¾¾x£[œ2ÞKL`º‚Žhëí àyU¯¸ÒzuàUwxƒh;)™™Ác4´ÈÂS š]XŽ6õ¬I§qGºG@hn€Á· Fš©§PìÞ‡b-‹ådÄÖB¢ÊÙ–FIÅtö°æ•õš+aÄYt1´Îßuõš®ãVÓ“pTYØY¶’ÓA˜We.B-r2î5ÍaI˜ D ¿â–ÆYž×ÌvØÕ CþQs(éÉI#Z¯jt$µPè¯Ó¬ÀUÛÓ‡8Ãv뤪"B.œ÷¸…VÉc¼6RÈL!ô8‰f«G_«š\ÓÄ’¦¹hÙäeð¯tÈBD¬C¾©¥m½`Ã4ÀÎÔ­2=å k,5- ZAFdb@°´Tq3TÖü’¦ùbt‘Úy_4«HH܃•´ ™›U\4ì¹ÑX`j‰ÅDjRo2j";`‚\_Ò2°g¿öKZ¶+‚”Áî+j“ÖÍ¶ŠŠ{ºOj)èhZKÛÆBÓŠn®3h+™t¶ë‚OD‡Çõh|¨>TÁÒVߨ—gLgZiå'|¼–P². ~_*|ô¾sÔœË]{ŠÖÛœcåše1Åfð-#¹tÿ¸Ój’5Ц$‘[‘øè}>±tÒ¼íBòaLÕÜÕIîͽÂÕÂLYªN”oi½WÑòé¾êï×ëaÑ}ã0Y2%äÝÑ«3uîhñr¦Ù$ª3uŽh½¬ù>ôèøÂE» IDAT¥>à›ìÄÔÆmV5Н ¤MvoKª¨¦‰ï-ß!—:_T…ufÒí vÑä°™ù j—ÖŠ:#mdn’ÆÁH :ò,­_û&§ð é÷ÕÏŒ“vYuÝoJÐÛCiAD ý¤¢6/ÔN¤BŒÖœPÀJeˬúDÝ{ú¯á4 <`;Ð{ô¬3‘V¢k9…P×­/o€Á·’±2»b«É§*kÙÀµQ Ðv[Z“z¾‰fÛž[Z¾3¥´|°lÏR \ \Á¬ÅéÑ‚žì{¹8¹ä¼iOv´4µ«]?Í’kA-¾©á»–½}¢Î²Á’¦‹ªLkiJ+gÐÁ :O5õ©Þ«è:r)1ípF‘4¬m,µˆËȨ#˜¸pö1äe6 ÏÖ4±¡±=ݧ‰ù¾Õ£cÆcJ*—è -höH…_é»®¿|¦‡^¤…›ŽÞ‚ ÍBã…±¦ &óˆ%|,ç<º`D »ð9_áèïA?KË‹yXÚ:Ñ:C”cõ`1<¢u,Tìlv@Ž­‚HZ]ÓÄ¥Ú àNk «Ä¶—÷OfµPÒrQ‹Ê»P›ÖjÔ¨¤óÙÉ¥ípL§Õ€+XÑ#ïl!b‚ï3ø*n^|@;]Íë I%e¯úEBÇ ñ²4[|ÉÑÒšY&úñ¶?W}*]&±Â .fÎæU¡[«(H XˆË!ȃOo‘ÞÈ5}=¯Ü vÏšù0Þäí»"]œ53Êâ¬+g\"rö¾òõ#F¡ÆË2rÓ¤Ú„%îë7Q}ðIs~jÅ ½ š'-kË×ö‘EÚKðÖ+½Ô÷¦´²¢©WºƒÙhO÷Ñ¥mŠÔµŸêãŸéÇ lù9ëÀ]:Å0i^OØ*u°€Õ†2/§Éd?{¶A~óÂ/£):3ïÿZ›cV ñ ‰á©…Sê¡NEØZUƒøWjÞ[WvÌêF´NivN µ›„]Óã^`ÒÍk"%Ú8Êe™ “§úθÖãÂÆ•-øÆÈ9ê¢KH¼…ý©¹›¼8½ÚÓ‡|‡JK»Ü;laÓMâC-¢¤eø~#úÔ·§ßC5`½ô=—LÒ£bði2¬KC||ÃÝ:ÒB×[06áªX‰#9´¹óšá9œ{—Žjå>Â7,­ÖÇtƒ¸q×YÕÂ7°çɸffD”óIc§zv9Q7ˆ %R°L¬×¼¶/Ñ_G{{ÂlWIÒË’ˆÁÄÏ’ í–IUcNfÛ‚®²tAÇË1»†^Y ¶-Qê²6[Öܶ†›#‹Þ® 8W§êÂVjBkUâ¨Ë|ècýQQ¼ˆë)?¡{(¯Möô!¿EdÇzѧïX=ø\tè|A³°þ`suéô§ú¸Sg«j”þ ´ zⳎ˜I—2o ‹„Y DîËÙÄCÓ°2ÕP§$]9ÈÒ`Y¡ÉÕ‚ ðÙ`Í…Õi㱞¢‰çäJCÙ¥/ñ¿0iBaWÒ2N »Œjø\ç–äCE/c¾O¨ÓZ¢ƒ8«•SÌ—Ù£cUÈ)JBïÜþÀÅôè®9xGt¼ÈÁkš€9ÂE¢À°÷„kŠæ$ÉÆi¬ªÒ±z@\8=:Æ8ûO¿ñi§Î†µâ»õ‚É:»deäÀöÉAÂ4ïâ Ù â|;Ì‹E ŒHüKÂ}yÔtB}áÝï\\ŽÃ*nþx¾mÑÈ£™Áhrºþybd5=|aÁƒiƬ>míä"‹$´ö‚Et™ÐΘ››”°#çþ:ê6¥´žhF´ŽÔ,)„fw(¹^ÕÚt‰06á!^ÊBMíºx©^êjá -h–UPä ŽTø©>«ªD†9@ϱ¯þ_ë;Ì8›Háqà{IW¢ä9˜W;›®RÖœ”YÖ7E4âñXˆ^Š|ÀlƒÕ{®%VÇ´Ñ©³UMºÎ³l]jã2Ü)™ºõê`CcÏôÑwî®i¹€É$]€|W „ܼzrz˜ä¼¢)ÔÓéHW"0ÁX‹oìX=8­à|ˆ0X1$Füé9é¨ÒZ9¦3B(ˆFö¢ÄÖÕ·«ÁyÍØá3r©Xfð€AÚûúâoÿPwÝ´IÛ–Æ“à\]6“4 KYsÞÙbºÉµ{S‹b\s~ÖÛDO~òM³„ *¬|Æz0Ê÷]®2²+ÿ¤(hÛb4 v5v‡#o!ç µÿ™þ&÷G¿ûŸûßé[«šŒêmÍ<‹"~¢–î>öûÍuîZ2ݳ«§ •em=%I7À¢I­~K¿CÇu×I­² HEp1šÇ¹³K,ëÀCÚICoqÒ!wà¦Áóc¨>‚5<ÕŒdNc´Þ5È·æ¯\Ò­š–¾â¢n*ãêMX™·_Ùk†ª@æÏ,i™•[ã¥>B~2¤ôñ”œŽ­ûöy;^Þkö§3©ê+qõ=}¸¡±I­®jRiµÖp¤ Ë÷ñð²·’ýŽ>0þ•_´3ƒ’v>W»nÞ.wÅi?o²7¿H„÷d™Äæ¯r¹žê;ئüÅ¿zòwÿîô´ð$ñÅš´‘niÓå€>³þ€¿"ŒÍ×ÃhˆN7yëŸüÿ˜c5Í{Z›™YËä銻U¨ÕUü÷ªèm¼‘bz‹‰„[Yá2~Œ¡7 pèÊÎVÖ¼žspCoôJà¾^ýN3Qó‚üA½lQ€i-Y~Â"@D.23§”WžX¼ÀµQº‰Œ…à¬s›T1è3>Ib¬rÇJ¬žÅé—Ò~kˆ;YBóJ±j)kÑ“§æ«´žÅ÷ô!z»CÚ±|»d¯F^¾(‚Ü0T ’“¡ÙáMѹ.ÜðOl­q¥2Ë,¢ÁïZžƒAyË*´Ÿè£oëïßè¦ÇkÀIËó'¾gŸ…TI4þ•6××RLðWjÄœ#Éåßœ™žùE9J‹övéô¿ù£Ï$ý‡ß~ãC}¶ Y\²|møz‹2ß± cˈÔ2¼¼YÌz s,T5™E‰³X™z¡ŠEàoÖ®žÌzKž„)Y§R}.ÅŽ«Þ‰¹@çË%Žú5 D3« ŠÀ©Ðë3QX”Iïžk¡È{—9J:fyߢÙòøÚ=ˆ°˜Ð*ËゎPš8R¡K§½ªmé$rXBêfPD…XHt 6oÓe‡ÎÑ«-kqKðET"UCd‡Ä‘2¢Ðe•²2/Èð#²þ¨åc|D(/…¡Ñ5M€A¨»¢b”l HЖœ©³¤ª=“@±P±¸—ÓˆÖá¼QÑ'ä0G!Ïr´’xü¼f :‚ý‡›m_6…|RÆË¢I¦rpÊšƒ;ع(å@M$±¡˜SZÒΡò{´­á²oéwJ*À”,UrH™²pí½(>fIÕ¸X¢äœÂj¶™½Œ‹Ô´Ár`–y*kNWè ªneÒçÆž–½ƒoëµþSýo¿íø¿õŸMk ;Pns®äNY§¬Eo"ûúO_aQ[Ñ#^í†.øvæXvâ±V1+\úŒ£]ˤax¼Û3'É9y´@…I_²¥ A0<Ûl!õòúI™i‘×AD.Y7ef{[Ù·å@/Íý‚Éd.¾~à¾7-o]Ÿ7p²×ËÍjÁè5M[;u6«…AíâN;¤’–ö²H»°£!ذ*PÑå×YÝÑж†;tØ‹?ï^Ðu‰«ÇÄGm–™î@:ÀíÐ+>µ&öD£oÆâ=¬ºÕ®A¹†’`EWØ´ °;uiÛ¡­mTàÊ)èÈ‹YN·[G“‚xÀ ŒqØFôÜá?:]n' ² ßCšØ°";KñÏhgIËSZ±]$‹º°Û{u€®Ä®™)"Î㩤eú?Õ7Ï ´ÎDj²8ìŒuc¡ÅÞÒP<Ÿ4Õò´At9kšXÐlQ/o!>àíf35Pd¦ú¯ÿå¯ÿÃo¾±­á_èûjg¥Au=â%q^Î òc–]ö2bØõ¬¯x2¼‡Ù˜Š{Ýð/¾æŒU/—Ôp ©…}É Ýnÿd*%-ÇRÎ9ÆFsͧ3óô;f¦npã…ÕË×G3DK>â¶=Òv©"#±"t~dßÚTéBlä\Íë×|Qß‹£ Lu­õ‡0¶6]Â×"µtèjCMyˆ…ýÚgÓ%ófZ(æ¡¶N¿E4XcÄs'y»„˜eÑ/†‹ªEª?ð†êí¾7Ÿ Æ¹e,kqESŽøÈm(ù]qÒJöªf¹ 8ßbå ¾%2WÐöø8ÇêñGc{z@Ÿ±IKdSžŠy»+éè»̨}ë‘bý„Í"¥A°#0Ý6áh¥ìBíœPš]Ûïh_û“±œºŸM€àrpzI3pdªѧfù¦•±©­<"Šhÿ¬ø6Ð1)赬é`z6; ç÷nk¸K§ùFLëSZU6åI<*aaî8SXEÃûàãv0Gñ†‚ñV2VVÒrœß´0BkŽz/’˜=|#Iý Õ­-z¸Y‹TLì¾"Ó›%— µÀÍn¤;ü WWÖ¦Aµ9¢Où'â‘/¶pežoÑ0±tE¤cÜÒø†ÆÀ¾ÀŸËZtòvN‚ÅpG¯ :ò2W Éßô+Î%…àr¶Ë*©º¥èJíñ˜ç‘Þ¬×À‰Ê ­íé>¶ÔíÕu˜¢‡=:#»~ÞM “ü—úr¾é«|̬èNkÉ—´) %-S1µIÖ$ùyïž½lˆ!(š³|6¦ £CçlÂcì«?Hâ>bqÊ<¬Ôõf|{ÜËSZ1A†®: M9¬šT%MsûS"ÊšÃ%€ãgÔ„‘ ý®U²b¬ ;+íðñO nîIi Vý[iQ‹*\ÉÍrÔß0c°f—¥›Ç?Ëã-ÿ_UI µ(é—¼µg¬i$e Ó&ó)Z J§ U/U¬³ÃF l»ƒÃàD\Ôê]ךjENTî"5–o›·7$*£œ×Õg`|:þ¤œ Ïc­ëØf›ì&R ¦‹Àe^Æ:UW—NýÕC+fíÂÌo I´¬õ9›WNš±¾ ÑŸüÁ@è4¢O{UâÏ>OT÷ƒiÕ¡Tl0Âsk:8WGY‹ýÚÐg©Àà–Œ’Þ%7¨9H çêXÐ,›=kš(ª°”†©¦}—5ס# 0²ª*Ià‡eÍÍk´(U“¦3Ûi?ÊWõo5ø‡]gw¥½¥¤Æ»É:×…Ú™©°ã¡´AŒ#·sYs,ÿºàðL@Oé/Ž‚3È 2ÜÂ,9ÕMÿÀ0™åÑrf;Út3G*U`ùK™ô(õF¹Ce€«Þ¡&GŸ;!Lq›Erë®4ôâáŸêHfµ—,‚ªîú¾Ä“°³Õ$>w“Z¾>T0嬙Óèrì¬CUÈŒ "FÄôâ,`z9ªéïØÇÄ:Æ•˜]¼‘U£¸J¬Ùbz¾,ͨZ”9à$·c®GÃÅ/›zʬùõ¯ÝÃNc(™Ò !rM“Z4CWPÉŸ¿ :$‡ÎÔ û.ÙÕ™2Qö‹Êòä B%-Ó9Ùj-"Ês.?êb “¨’ªP ƒ¨4gÊÀÙíÕA2ÙZŒ4¢‚Ž˜À{µùT]¼û„ÖàõAgèйM=PýPÒ¸š× Ý@IË`Ôn¡P…ØÕ`IËúwúòßó>V\I¬j”f®WµI­©€rÒ¾úaÓÙ >qç2{¦@w´(¾×Hr[·^­Oú ¤ó4¶¬Ër*S^å´šÑàFr Çlô—|Ì-=°9'*øžVrå1ß|H—£ÏŸ´´cÊ¢'d ÞeH;Ö¹¦Ïc לɤ@CKŸ.o¾|È+ÀÏÍãkg^DtÎç¯Eî/®U¦‹¾à‚ÅÃС˶ñGÅY‡hÕL¶É𾆏Ÿa òeTÇhþÅú¨ ¡©ä·ÄÁälé²cŸØpyÀ+ZÄ™®óX5Ëó€æºuòB÷pDÄûŠî t‹…ú¦ #zâæQÇhM=ñ—A3®“„ÔE2H)ÊwD &‘K*k„вûc$_m—•fò3É÷o^3DíàÐ!4Ëùˬ ¼CÓçófk¤‡p”)€Äê$7~ ‰E»=q `5b0JÀ²©!̽Œh<é°Ý]_Ž·È™›ÅÖÙg0^K0•ŒÐ"Ú”™Å½ SÐ%l»Ìæ8ÅŠ™YiݳþXÐ,¶¢øHP×F¦±¯¢u§7G…Ôòlq7‹oÅ×Ýc5«Yç,ÿš¸¹à²IЧMañÅ"lº‰áDšÒFCê"dÇÖ>Æ‚¶ÁÎ87¡µh>·¸Ö4‘@ç ”¦WéÒ?ˆZP>Œ¨:x¥€Ê]Qœºv¨ Ñ|BkP®Ê34gÙbt²‡—«Q*ä|”\¦¢õ8Ä0hñfõ âœ]Í)M륛¨$#½ªÆ¦pÆñìhˆ¨d:>%¼‚!:F8µ§=›Ê–ÆiP‚¨Ï(«Çª£‹}¬IFm‡®üŒÑ/Ÿ 8ž#NÕõCýõžî/iûJ6—#}£]]:5ƒcKãÕ”‡)Ç—6¢u|:ø_JÉhú½‚ÍòÌœ¬ mŽß¡òCÚ1CÄnd¾GØÕå{ö]#™ƒˆdSTŰ׷-[ž”ózRÕ(’ǾÇ!µÇÌÊä’•PkØÁu%ï\¡Ç5ý¸eeX‰)Æyݸ¹²?Ho]JíZßu¼eT0ç ‚ .‰\ä#ëÀ™#ÔG äÍÂt`±jkQ`sþ0új™¬YǶU:­–TQŒR¹Í-Q½kdéÊ}•Ö[ÒÖí-ª’v;úš…0²+ÔüëÕcQ4©¸¤´êWÐØ‹§áìçHH‰hóF ™—áv5ÛÓŠ®¡kÏlÆÆ™bu!g™àˆ1TuZÊsRšŸc#ö­Raý¥1IVUiDŸ’§w5ˆóxíu•EÑÐ$ÆK9š$ã`gꤿDÅœx¤Â_ë‡ãçëmמ;ÚW¿×`w4TRõBííº˜Ö’ÁO߃ޮµZ@bûâ”Hià ©–šeê:~Xó ×…U•RG›QÑ—«‰·•Ç>Ô /ÈœIµ¤nqÇý>¯NM‚‹T@Ïø'úfó°ø\_XrÍ-W®…8z“·¾¶ŒÕ`Xpòš;žœ2KY0Û–,|Í`aºà+ƒ×q?XÔM¶&ñ,¹BXÅÅ”?B‹ÎzHQõéhЗª›IÂM"v’a¾ùÀ²È6¼†mV:ã9{sÄ)]J ø€N /’WX2%ù|Ù!΀aU`î4à_b(›³&&Åö¦£ѧ¶ $Ž¢œJÏÔ¹¤éˆàÄ4{¢nÆ?i’Iº§ÓZÐgðT`>Úì[+k.èfI=¶¾ëF“ï ÎÛŽ†l¹{¤Â˜6È :ŸÒ ¯fÿLÜ=Úua.X’X `‡u ·0f›tœ´ƒÆÐoeld+aãÈD™.²¾Û‘ ­Á%¾·8»–µÈõ@ªvùÂ=ËœLAJ4­ÇØŒSÃa˜¤G\JšUž~(•Jh´¢â–Æmªt hÙ,\£ fqØ É×'ûé® kY=d7c­¯{ŽåÜCûÂÙ 4˜,túÖA\ÜBiS8Cð)-ºg-¨cð~¬WÙ±`IP^Ö«Þú‚CHõ »_/©Š¢§æøIêѱ5A<`ã«KvbR»¿ir ™Àj–±ž@ʬ¾[' "*©ÊÔÊŸ×ì!ë›(ØÍÀªˆß’ÃôK.~‡ “ÅÁÁõ3Ò{{=Vs±MåFÅá#-‡×RãœYÁ/l+T ¹æq®!ZDäš§Õ1²8sBJˆDδ1˜{&5ùagÍy(sö¤óëÑ t˜Å麴2ܑ֥ ”5.·!Ø;×õZ5õëiXµi!¥æâ4ÌãEèâm'$-4KÄmŸšVjFiøJª²7†âC=“²'ø1o¼.Í5ë(w ”Ù•;QRIضˆGGpëíÎ~®Ž~íóùç ü=ÿãOàÄ¢6{tŒü)&yÖ¥“=‹½Çêé×>Ce¾„¤ÎPš×4/,Ñ«£ÒœCS˜¥âÕRI£Aä³Ïæ–A=_®ÌZl}yfy¨<£M{®ºc³»Šòùu¤ ”o&½©Jª‚¦zÝØÔ <3­6…Übòh@6J¸t½"w@£A'ë{¦Ð<‘²>jV»yü³Ï±,{q ”‘¥Ù¡ê E:ÖW YP`Ê¢|»'–æMÙÂÑ>nÔ¢¹íSºQç@ ¥–Ï’K£—Õë,vTÂbî FŽM^WVÓð9M*D(ËȦþ;ïµ’ªA׿†šqœà9B8l—£GÎ\  $æ”6R ‘å 9h58qHN°]4®uä?· b(žÐ¸îqûuÝU»uÄ*›oÀü ¤r¹!ß}‘ßE˜ÃÞÓ}ÄÓ¼!íUAd1F´ÒÁB;t¾¯~â,‘´¤¢ù IDAT4LV2sŽ˜¡jhz¡'siàT_k©jtESžû–qójÕ4ÚÊD*YäKn¡2ùÃxåÿmïëBë̲+W…~ê0ßÄ =MC0y=Eˆ¸8…_z¨£'Õ˜6ˆ¹Ü„ê—´A*0B ÂÊ"î§®‡ËžÖ“)Ò…Ä<™j#4MwàZÁ4d”&ˆ‰ˆ'ß¼M<ëÛë[ç|WÕõãJWµÎ¦($ùÞï÷œ³ÏÞ{íµ<‰çp˜L]iRºLÒy°¿ø Þ<Â<Å00ϲIWð¡…;㨮Aë óÏŠ,™/eQ@…í¦{l“¸P$RfhÕ¹DëSŠX_ž}£û§ôÅvû±€z„*° gT' "£6(`.mµ„Í#+Qª+y«ÁD¨–Æ+©P Ñ`´ˆÙ#ô–‚NÄÛ8ÝÂÝ# ôÖzÑëZKø1TézJwðvvqŒ]6¼Òàé©>†£¤T¨ætDÉs¥zƒ*4$Èw·Q>“{H Y“ ÀLt"ðcéÒYC’ÚqdÎbx»%ÉÉ+˜`  Uu oaÓ'ñ’¡b|Ch%1–÷pçßãŸþߢzïƒl²n$A„D!‰3®âçÊ_1+Kй;•˜¿‡¡Þç“á»8x)Té¸ÝaXe.”>F’‰¬™­cçSº)z‹X Èût€ÎWãõSúX8À,wztíÜp,âp ÷™Ï”ò¸ùiܱ59þ[Øècf„U`/vZÍ»ŠÍs¢³­f,€z«MP×Q"«š˜’+Õê¢uLbÁŒÓYN¢x¯/×cÕ# ¡Žš #i&c§ÛØ<ÅÌ}éü_ËbcëØy†9Å­V:} g°¹…Á ·1=³A(À1a(Í‹,=ÁÛO±™u/EÝk#<è #Äf¤<#ÊQ¾Àr…°õø‡[˜#{7Åÿ5<½ƒ{1oWL&]yŠ!úÌ3ö 5ÞÛômâðo^͇ÇòRÀ0îeHð:;íXã8j¯¹FôB÷é8·±I®=WXâxÐLỳÁž•²äTéô„ëgÎ`óK$¾A´?ËD3rK{¡Úê¶1qŒ tf«Ð¼†kЫӔC-ŸÇ]r·è[ìË­c! ‡j•‘^sk)n7K#ÀYÛ;Ì í:?Ì…g 4`û”“œ²*¦9]Y oíIp koÕRQ*’Bì> i%Zçï¨LgxéÇb­b W¨-Ü%FܺÂ3òâ*XæÆÌ­à¡;žml.cŸûq²ä±s‹®ˆë2QmûXf5žo‚ÞÅ,ö°ÎAžx‡¢Qßdgg·´âdÜ¡` ã3i—î¦"Cîv¯ããÀßKલ\zÓ®K•/Ò*®a—€Ie,I½HQRyRº'ÊΩƒÈ]‹©Kí…{ÿÀI5$U,à1ºb¬é²ÎGè=ÂM'¡FPðÑõÃK±VÇ vg+xÈŒ+‚œ+ñ&êœó¤ŸêšD¸èqIÆ(B@'Óµ¤YèJÆô²<2KMb¦ZXꯎdSЯp»¾0Ÿù¼m‹L¢LëI׌®øª/ËÞøÎ;wÿÛÇôçùÝ?ý‹üà‚ ¤à¿ûQ+;ÂE__éáC«u!4íÁR ÓŽ†ôàÿ”ÁÍÅ ßOíq¨:ôÍŽ£:ªÓû¦ò’†Y|bìZË^‡=j¯.âK?ó8B;Zãß ìâ ÞŒŸ¯ÞƦ¨üÖÀó¡îgÓÿ®«BÃ~èg÷Aâ_¢ßÇpˆþ}Z‹8äõsýícøoú~ˆ‡%jCÏáÛØÔ¯¢· Ó=hþ{ŒÛØÔ-ûuú+Ðgt×:Tvƒô>³GÄç©Ç®âw%‚•M=R}’ÿÊ»öq"F%›qµßuwÊ&»Uç€uwIÑ»ðÛñá­çï^:#¿Ø+³—/_~÷Oÿâþü/W¾ÿƒ7¾óÎdÎ n:²Cúeå®¶]&Ó4ëHÃÍ`u ÑÒѰÜËú¨x®ˆ½Ôã¥íÛ¡‚toâÉ$¾Œ|UѤ:6œÞÛú?¼v%7yI·QŠƒ½Û?MýA|€‘}Ý=Å T}T,cŸ˜ìiœ q›u¦eìS—„}9‹_ÇÇ,R mÈ4”vëÄMð[lQ`ÀÁ·IÖ¸¬ÿ•|vMKͨeûQ•Y•N<G2‰Ç i »CÜf@Fé,fÕØ—ö×p<Äm’3‰6iˆÛËØçÏg˜ë+[}…xtÕ{úØ»‡;D 1ûz¥#G‹ˆ‰PuvJ©ßõJHOEî|Æ—êòfˆ#Ñg„*Jíî3‚†Bâ.ïÚ(°U6nZq)ò¾ú’Ú#•}¨«d6fä-ˆuŒdcšã Ž1¸Üæ#%3öµyË»ŒÙ H“Aø§qP·´Ñ§Ñ·7,?!S^[hXB«sä…J>G)11Kú5XÞkó‡Þ;Ŭ4ëRQ¥”`qÔ{ÁF`1r#‹8öqdÀÑâ³€óöO0ÓB]eì·5PÍ`S)ÄŦJ‡4tÛS­µKÛq ñ©#‹OJ| C1Äí]¬Máü¼û¿ðȼNp„Il,ãD)&Št qû Ó³.c¸±BV ¨UиhZzëEÌÎà eóìé!÷®pkØ¥·ÐàáŸcJ÷r†iŽØàø NžâÚ)fHW(|6oG‘›xÄ Þž ÑßÅ,;·¢ÔÄæbðÒ‡«Ø#Ž`qk?` 38}„›Ëа¯µƒìcˆL²ÎDì%ÿ²†ÝFûñ+xH-–»x§z¤KÁ&Õ»ÓŠ¿ŽCôØèc89B½„ûlÅ;jeçÀ~¯ð7öÊó .2K P‹˜¡Gïx„ú¨Ay D«Aг|‚ùðY]<ÎÕtûmcó ]:jï&̯p¦j›ØŽr„E•Sû2êXµ§ïµô“ƒÙ¨Ð‘í€’ŽœÇÖ‹[•d¿S~&¸š¢g*( xHñ‘Á¯¬ÑXÞ¥R³H(TÒ玙sè΋X¦‹Z¡£àu)³œ·y€$8`Ä~جa÷ðW~„w(sÎ:„³ÔG2…ÌR¢ž¡À î`]!…ªG¬¬ø%…âX´î”Ì`7‰h™È5¥øŒ>l÷ÏäF·Ê·L/Åá3L0¢Ç&ª»l^æ-èªîàÞ¦IÌË6þºŠŽs ŒÄ–KfaÅ©¤ ÛÁº:šy.=µ«®&™+1Sð1²6…sFºriCÜ&ë s[Ø`˜ÎÂgÈhŒ0qæ0w°.Ü#BhÊ­EŠ£EŒY¶äÃanÑ•(QÈGå‰D9’ \êÈ^ü¸cA O¬r9’•'Æz¼H™ƒÛ ÖÔ%¦J$X®ïšr¹%ëF–d*öíµ7¾óÎïþñßýïú—úÅë¿óßÿþ÷õÜIUG€u×_†S§§ñ :Ø XÃV›W$Ì!úµŸjÐðQm®$Ëä_?¥¶{%M•”‚åP9 qmd×lé8 ŸWDPUÛ]â$@­LÎ(Ý-àX¤«ìºŽ'Opý Ósx¶åð@л€CQ×và›³í-célis-`›ë†?^e¬ÆñŸb›àºëêkËØ'.ßCF]$mÏ®à}R !hûœ†èðà Þþ]üòò¼jÒDp-c>:¥©?I~E7%Vx½¦L¨}=IŽRQ(Å,®3¬ÓcÜ`¤åŽaè¦ ( 9¨ÐM ׎¤Õ;Ò\ô?ü_]y\fhZîú"£ÀÝSÐ û|I—6ôñvšô‡öI {lå5J÷²5'\Ú0{¶ã/©Â/TǺõg¿Y]ù‡_þâôäx¢ÚÈa( œFV<#=j›é"xßã¦)ÚÂDZmij›-ÕŽãØêam;ºš•dŽ¯Ú¶u*ÃÖ§Ï%<4ýô«.ÞrÜ ;b‡~©¥X´„aβxi³‚ÊÏp©emŸmFK8¨ëÎÇA‚ńަ¹¾ƒ1aE@á>’{1_§αÓK ª„cŽ–³,IЈc¬½c,„XTÓõ)ù ‘\Dj±fNò&1È‘ûw–‚‚ìcùî=ÇUº+¶‘—’™½>†¢´¿ŠŸ«mË;Ü9œØ CN"q©íŒ}o¾nö1dé—LN«Œ¨ÐÂbÁÝ@CÔ.ãB*?Ñ,É1Üá"0ÄmvO󡉂õ9¹6’“ËÆ+ßáõ« ¹QÂSŒÅöðà„«µæÈ°ÛÒ;aÈÒ$/³‚®ê·˜t”ÖNÅ2D?eÜÙâ³ÈI‚/ʬ¾¡i$-ç­ º@Ûÿ²‚ Í>+™¾v0‹bûˆ„lPGžYFÛ–;vÞ?Ói¸ncÏ>ð ,4uª"z°RF(DНVáÍ?Ìa§ ¼²Ô³ÆCšD¾riqAµ$= 0¢Ô:kE[Øà“K\ ±@ÝÌòÿÞÇ{XZÆ>ÕÙ¹ #-!DÐP‘ð‚‹òs\åúHÅ V¹£˜B.ؘìDí°dkÑ5"`Ú…çðlcòP„°4„8Y¦Ø<#*IŒ4ŠÉCæµSŒ­@Íp8~ß?Ñ¿*¯ÈO!A;¯ »Çš%äÙÁœwtÃüÖ4ÎúØ`ÈuÖV¥Ãó«©´\·UŽv26­ò§pÊz#ìñ¹T4 ™Õ$ùaº¡¬£1Ö¬gþe0Ÿ¼Ç¬¸î¿rÌÒ“FÁ0yßRAu§¾UìUX†n÷¨Å0ßu–ÎÚ­ô•è_•çm ½Ž,ׯüT°]þ]´ë~µiû×!RXªW¿Ò›ªÓjÿ®û$ãzϲؗÑue¨nÇ”÷qí0î.0:èÛ[<4áÑÖç0aØvü7殟¤ÖUŒ®³?Á›qã Þ|ŽßòžÕ~€ðkþ¬ôÙ¼ZžZ€uݸáÝÁÝÆæÏðmÞÏ"P¾¾«çã÷.´½¹£Þã†îÑžam¤}ÂCôÿÓzAü.©³è+ž·÷[ÓÅè9Øê¨ûµ© =aú»í.Y D¶àL3þÄt|_R¼;²v‹”†-›þH¯Þ€ásÜß‹uŒaRSÍ%ßÚ¾‚¬ £Û'Ö±<»êy^œ,¿/$¢ªt¡Qj»…u»6¬â™aÀTW[M3àyåLÒÚÝdñÔ3s8ª¦¤yçÚÓ_“Òô]òªKg,-pgML ×EãÖ3ÌMãLmU(YI·…—&5µÔ:±éªuyYK_aY ¬*1—ÀצY#žPEµaj+”ÖsºØÓ¶~ˆÛŒ |Á(*-ÖŒ]LÐ|7¸ç…â#‹G ùbAmÂ|ÍÊ–ØâåA‡¸[yï-5ï/3+8)cV§‰ ÎÛMĽÉ<ë0ψ0Rn‹:Í/e‘;º]îžÉw–ÍËcp¿rgÖè$ëŒV# ð³ôHÇW]ZÇöÍúË%+„1S$i"=L¦Ît¤b@öH[G*¿<|?!€ânRbx„5G<ÂÍuìð¤ìL¢šûuü˜G ¼e ©ˆÈ$ Õõ|/Fè~pì›RcÅÓ Œ™B™°㎯J¡‘_üü"ÆÏ0'jsJ03?¡‰ö>Š<<•G†ÂRyJSýÂÌgð ˜üfÛ¦c¾a@d·c¢Õ"Š8NÚà/xL»’v¢±1Ë’"Í´MYa˜¯VxÈX“+ql—f+±|ž×Œ½YZD+ì m½ß4 ke•> ;vÁÖ¶Øç· ÄY‘I8=¹Ï*M§”t·†âP±bíè5Ãó´£"Ûie\¥ÔP4¶[ÚTd²îô÷‚aelʼnµVöFikc¬lj]Þxß±Âñ *“n’Nü‹€…M,6$ß½L”’†Â FL>Ö-lX0ݬï\Í… 'ý ÌÑ`ö ӄΓTwòó 8¦ÎW|Ïx,]ÅsºØ<¤2Ó–ÿ ÚdzP©Kµ(> uV±r&—;ô1ÏEDå.Ö¸m§d¥Šû¡šAº[&÷ÈÀ€~.Á5… CÞépãðÏÅÑN ߎš‚ðK|Dt„Lc†·Ø°æÏ“iÞÛÑ”üôÒNš9¯bk»¡È,4e2@ B÷µŽÁSEöµ–¯âú.êP;¤€/6Í*Û&EÄ“¦¹A[kÝ‚]F9CrSÝ÷…KÊÌjj1¡; ®LÑçH$Öiu¼Ø—“ìpÝÖ“hH³g¶Y€Ÿ¡k²¨?‹µ=`OIlóôB'#—3¸g´•ìåDHdž½€T·{¿—Ó<Ùåi½:(eÛeZ ¯ôÍf4£-¢ÏÜ[“Í˰mÊnþ§Í<›uú¢rY‚ò/ü¤g&3ˆ _¹ã~/: þóéãƒÜªÓãFch8À$kÇfF(¬”`–ËqÂ꿉éú,A—&ð'æÏÛ´­gíœ#x"Ÿu'‡Œ ¸n»1=Ò@ÝMûgÐb{#ÈŠžù̦¿?%Ç wøp³% Å]}©YÁ*ÅA¬fe ²ö ¡’&'¶_ˆ¼«KƒÄȥנѬ n¤xü{—ëöŒœÒƒÚX #¤6 ÃnhïSiǤâ-·QœÕe°3:ϪKO¦Ýô]m±‰‰ˆˆªµhdÌ* ÖÀÚæô®ù±;¸Ç…o9ÙíÄ?›„ÐÞxŠkd,|‚7ûØc^qË‹/c_°*.b¼…»38UzêSŒ0"zèi¯=…sæ2eÄa?D_:¼ž,qĪÉ!×Ä.ÚǸÅ6^ª­‹ñ™T¿Œ«Ç?ÜE•¢1 . ¨Â:?sªJIix3 ”Öcvî+æ© ·<¡G26±™Ø†¯IHx†ŸÑŸ§½q ð@ivÆ"1…Å$&嘳Më§ÑÐäÕq­9*l㾓Ý0¦d,§Âä ÿ’F?âþ¨\þ˜K¯„‰V>ÝÊ‚K^Õ66ÕÙ®,Æ*~ëËŠ±ÐeÝOA€È‚¤NËB&P’E'o¡»ÝCګщ󖯈„ë_t`#ÈZ=&é•ÔÙ¼[ïÂ=.w×E}ñÖdº+€XÁ?ò/Œ™ôŸÅð,?EÄ´¶@ 2 H‚÷þ 2 +ÉF¸.Fm[Þ•…˜Y|ÿ’©øåñçxh¾©¯í¤pHÿ’ɯtg¥"›Tj¤¦Æ’áÔ’C':J=õ$Ñ<¦ÌÂ:Ë…‡J¹rMÇœ h›ä&åfò¸?뾚nvïݻөÑYÇŠ½¢KYcO1‡ßa 7¨ÔB/J‹,~w†±¬Nu¯CÕ?µ)SžG¦i¿ák18FÏ™ob÷ÚK#¹y•¨‚Â3àÜ“.bL¤27ËÜ|EÝÜw+‚4ªø$ค1–µÚ4ûh± _ÇÇÂ6Ì=GèsRMŽ RõÎ@ö JL]áÚŽŸàMÖ~XÕaõî­ÀQ4ÄmòÌ+AÒ *1‘eƒàéœÒ[ƒ{=‡g¬ý°7ƒSE0;°HÃêc)áȱÀ؎É‘ÄHÒ:Àh€ 6ŒGâ*¿áŽŸâ!û*Ÿ°¸²…]¬±'R”ŒqH I>P´…€,\1†Ðë#ϯZHB¯RYFG˰) r•ŸÂVmOÇ¢Œa 'P¸T^#ÏÑ8†J„µ¤6<¯Ø­zö•p"]¶*FÃÂvª ¥®SÓxl±—´Oà¶âWCÃÕ­±Ž^ÉîF³Ð `Ü_=ò"Ô@æÓÝDåÀ›”I³öÑF<• ƆR‹/ÙëóÎ@È ÆÜ`äÝ î/  QÇ8>šÃÖÍy &ooâøzTÌD…"×üÜcþ0œqÝ7=o#ʼˆ×ã2V³Ô£œ‰xʹ‡ˆ'ÙÒ+3)§òµœ a©ø.*t®Î»X{Škâæá~YðBÂM©šÁ£)Õû·A\îù3`I$(zI6ü ¤C4cäÖz™<ñžqY×êIXc$?ëVÙ%2øh «ˆrÜÆ¦xÙFF „¸£Øž¼ˆ±(¬¨•uŠeÆ‚$¾"Ç« ékBlìÐÖ÷AlR›öJzúc­ì>‰¢Éº‰D™á´nÎJ˜eí2&Ù ˜ ^a.´3ÊÁ&-}µ\cºþ´šÂ‘“Éi¾‚ÉǘêEôĸ>‘±L(Øq x!lišað s“âÎRÓzÕ+¿ û—¢-eEñÞzaD´|y«|…CôÕ ‘ÐØÓèÎ /P&;"™ßã o»þÊ{«-ܵ«v >·QFœØöÏ»÷õfxFÓ誺ÄeT&•€^êm G”‡}ì‘Ê+ A€kؽ†§që ÓBÒ]­c§½ŸáÉØÇð Þf §=¾_JÔG4Öֹħ¾MvÎr(éÇÐêîÂþ0+°É)¤Ê_éÏ1åÕfHe‘øFâæ§p>…s‹Ñß”gN1C®¿7ñè³ÑäË2aàÁCÜb¬@¦MÞþ6î«ÕZ°xŸÈüú:vxû,¿ioç!²ÔM‚ÂØK×!ëS«µóFCS[Qg3`â•jHkØe TN$¨j–Vì@¥ÚU·:ˆb¿Mפwž½¶×BÔç}Ǫ‡9ä¬áÏðíôÆ‘ÕSu…ê#ΦOV'öêì$šM¤H¿‰EÊ Ó|bQÊ'‹w1{]9|Fàzbu<=H‚WìLööìÙa3ÂF'¥¼¨dÕ™œK¡KwЗë‹Ö±.B·ç1lƒÁ=‘­ïÙ$éPm&N%[Œ²Ñ<©ÊÚ'@¨HÏ›×WcÅÉ|dB‘éÔô8±l\ZäÅ„}€†ámІÃa¢pn -ë\Áㆼ:ñ®;”i¢}§r3¤«p7©ïŠ"¶Ë~Ëc4‘A<2VÇþd˜oÝ”a’qè3º¯'x3{>>¤}9ξ˜4¤®¨¾ˆKÂ]f6ñ»ëuÊõPw²|uƇۥØè¢Ÿüh„øw©jܵø½_Ôs’M[ßìv°Xz»};Yt;hLB‹”ÚÁ—é±|ã©'î¼,/X“áCÝíLfe‘ &$aÒP«;[¼zÒ˜Sñy3s«¶¹Æ$ôc~®ŒhgÌåuWzæ¾”(\ðpĆœÝ#i5Á0Ôð=„%©ÞÐ IDATÂ~ÆAƒ¾Éð>ªlk’ H}XÿyD¸͑¥ ž¼ «3È“Þ †}òµi+OÒX&g)׿eäUٸ͚:x¼¯Ûñ:µGœ©cä…]ÏÝm‘ìò¯g·Öõjæc’ýPFÿ‰Þ â#[j-™v¤! }㛽ètL`ŠéÂR|Õ+ðXyËÚ° œ/3ÔLú3Û;¬™’É&^ÇÈzÖ/¤^ô9µåH©ÑJÔWzñ±Ñ¶l«:·®ªZóQ”®ôuwŒ}¹A<d% WKO/g)k•HµþPÌé=öT±MG0Êj°æÀ~©œRÇU(JA»Á<38àA,G=ŵ!ú$Ñ`±$쥆>TïâVD‚“¥·„“XOâWˆ×XÃîÎ÷±L={IÎûIu öTÔ±"(P¦òžUˆÜ÷X7"«€;¸'þ>4qEKP‹æ•à²ÊÀç«ð¶'Ô_èÁWB¨GJ+lÈk ƒL½geÎ\ƒYœ¤Bca1¢\gÓœœd]SòÁ!g\{d&7•c1'å¨B`ˆöõôŠÕ‹Ôg˜vÜG´OÝÊFÝ¢,vrÌHÁ+îº2‹òÃB v8òEœÏÁ@›ÊtÏ‹ßz¥È £è›:bóÄEgÓì´½rAÝTu¶Zã…’ãÑcú54É\ÂÒËÓqÚë$<Ú€°{ÖX¥›£ª“í„ÉÀÙbÐr5­F•¡<.7À½}¤Ò†f“ÀΧqÄ?-¼%m?o^"WU¢Þ)¼»‹µ]¬ž®¢7 ïìáåéÈmÛÅš0o»Xí:=W½×ñ¡ úØ#c:ZÙâá–Øö»„Bøè`HˆÞ8uÆn6 J~wÕÛÂÆcÜzŽ«dcâgôcÃÒIÀz{Tb”6݆Ég·Mµ„Tª¶!8çѨBP"hy µÊÒòÉ+«ö|ÎÓޭô‰˜o5ãûÌí°ÃÔñÝ–Ts\ÊÔzIk¢8Bå,3âAX‹1W vˉҗpsk+38Ê1¤ cC…xà‚&Q…«qKí ¼ ¾>¿µ€ö{EÈ‹.Ò]uuÚÁ×&¦³üuZЮ»ð 8äIö. ‹²ØVК@3?±Ò†Fe¼ïÙê4䟩ŸX©¾ärŽ]»€ï?Éûé ŠøÜ8Úg€×ÀÓžÜæ“J0v3EH:“Óeíá:xF0¯ RÖãÜi­Uó –®M¨¬\çÏ!ý§¶›eG?¡š’±.yn¼KovQqÚq ^%JÛ«ën¬[#ô gOdµmãèó餞ТÛíÏM»°ën:ZCBSÕã´Ï:Y4À2ÖüI-ϵg†ývLuå¢G±/–ÜS3ߺ%:šRM­…DµÄob›L’ÓZÍ€LA¨yBû>ßžDÓIÏ3-j$t"Îì:µÛâ0òе'=tªÕ.£N©-Õ÷²#V•kšÔx€÷ð>‰øØ1ñr†i5º…ÚP˸CN&«cAÇ},a~kþÊ”í9Å é „°àAä·±ûìaº†§ ±@¹)ò?±ù-¡8(`ÏM[ìHè5”ê®38e88…ó÷ðþ·ç1æ©•‰R¸ïÄNJ‹õ1 ÂÜ&îtyûˆ`æÕ,aL|þŒ!"ßÐ"ªE.à»E-‚}7éÐèPì9BO†ºø-ÜõK„œfPR ³eš4ÁJNATÓmÂ%ˆtY:£( \¯Ki0Nr©FeöØ6 EÉâÂF+úˆIE¯#B/^ª¢|…qúû ¬?Â<Û N0K2eß.t8Š}Ѭ`3FùšI½ìzÊþ«iCWbÓF3ØöŠ+ÛÀùz«®IjK¥æeÒðJm³K#ºS‘68·;GÅ÷Œq#©˜.ê¼ñ"¶¹>‡L³aÝíÒú­y$„÷‡‹Oãì}¼€\ækØT̼|RJ§­ÂÌP±ñHœåêñ2æºy®t$‘ÛÆ&ýV®`*i¼ +^T¸ K<é38ZÔ‰ÅÜà4Îxý¢JáÅü 8DgüúÖÿ<ÀƒqCÀÑ,v"2·dr“ÁâÑ '2ïqXÒWq³ÅÁÌ~&.¸ô=Ÿ¢{ÈG XC¤Úº‡b‚7Þ¶6¬ü¤Ë®Ñ÷†büz2Ñ”ÝìV-…Û\› B¬k²A›IÈSÌ8J#¼ãâ3f7^gùj®ß“rÒ!RǺ&*o3Þ’ìˆí6êTô*ari"õ>__{Ü÷,áà:~]©¢T…Êý‹Øko|çßýã¿ûßÿô/õ‹×ç¿ÿýï+¹,=i$šô ”:U¬‡í +O+SUûhÿŠj­8½>Õ³¯`µ©ó¨µi5oïWO­"Š´è4ĉ* nûʼ¿K½oâ[¦çe£&–]ÇÎ r•YÆ>é­âjw•+r‘{ýjÒéÍÛŸÁ©¤Ö}dJ÷]×¶†]aøî›ëËîŠXv€Â5PÄD!ø=ÜyŽ«…â…ñ¤³8¹‰Gwp#WÕÇh„>¤~_º 1€ðÚ¨ßq>†M¨¶Ûk |ÚÙt0ÅúžÏ‘x2Pԥ閉ÇûVÏ6”œ#«*5ù½ðàCô¥ÍAòJœZ|"E|S *¿…>}31Yò«õ×´†]^ƒbS)âQËïeˆþ¦§qÆ÷®oéàñ LV3–0Š^7»¿ÅŸ­$Å~eVðÖŸ=üfuå~ù‹Ó“ãOÐ ®»Ü¯™z‚þ5ÓVè*}x–<+>¥Ä”èô4`"1¥oë: ^‰P²×Q²*]¦…šuYu䀼ǫ‹Ð½ìe-‡D; ½C+Ü-xÔ&Ú–d4ŠR!vd¢·^Z: ß¾êXªN8®î=ÔfWîR úV·wÕk«ìèRe%ÃÄ{‡r¦gá£WU^#üE†½î”—Э“]ÐÕ>1WWAJS;Ie‚Bw·‰Þ Lm Éi|3†CóöðîéV°¼¯@ ‹ûš“å'³‹,ué2Ó]a”¬¡°ÛÙæE¾LƽÈ<~‘:Ö…œi‘HRui›““5Ûw†xâÈÚ$}Õs¥¥t€f5ᤩùb&é¼®›5¢f^v’§tÏ”yÍKê·:M?uª–„ay‚Íñ7î³½|¨½$Þmã)»»±­kl;Ƴ†kP¹u/•ŒØæ,4GWmÝ ~mñÈ7‹ŸHé’{¦î«»EHçHâÌ=áýˆ™Ü”?OïzÅNxqQ¯ÕDNú.`Ä! +»Á¬C+õ¸è(`!cÖ÷§=±1<Ûa{o¸®Síç‹7v™b_y‘A"7X‹/Ëö‰®—£|‹à ‰p”ªP‚ÀÚÖiœFå •-Ahz_„ç*áÁ¸’ jÃÑ^óTܯ“µhKMî½”ÆQV#µê±Y)ëÒ% „ÛaÖ O Òb³8!˜¯lˆ>é\Uƒa‹ÿQþiÊ!¶‡`T•^÷},oá.qÉìµbþá' (HÓ~Ž)Uû£ÆÃ>‡šà{3<D{?! < NÑմǯ>hˆhP› =J}踫¼’!݃†\¥¬ž]ù xÒ(ß6\Ï}j³»üJ™zê|âéFR£¾‡;Á@_‹q4:áÒtÖ½²£Ž”¨p·ø,U¼x#l~Ú‚—Á¯¯a—³nΞJ\â°#» fFEXsâ«!‡q§<…v'Zˆ°`Ñô³ûXîco›„ÃûvSŽõñïæØg¶‰1V–Í@¢+Ónš2Ôrš@«'Š]eXÞ,j™ôë≠Y>‰B ÃÁN°XO<—,“òcvºñ‹!…>w\œ)£‹ô¼M£hï¯ÃFiÝÕö뙲7f&ÓfÉê®0U—¸ÏSRé~Æ,Òʤ§<˜ë¦ûüqM’ÿF§#¥N§'²ñì8òîf"@ü"¬Î온9žÐdìSÝÓM$Eó؉,V¢ƒ¬³“=D?tG]ö`v{ˆï¼\Ù@R<͑ӥŽ-K䥓ÍǤ¬L±Ïc¨(µÆ==CÚd=ð-§{È(ˆäXTcƒfH ´çóPÄÏÖ¨ØÐ*‡HR`-¨ZÍž½n62“{ãV¾ÉåqL} w±FÏ\]í¼t¦ýlà‰kI‹Ñ'6OBÏâe`‹®Pd&ÝcÓ¥Ðz¶®÷±¬¬¨N1³Œ}…ÎKP˜@ÁÛ´ÖÅð·¨í«ý¾@ˆóÔk¤3Òh|,âp DNGô_…^mM [—™- lÁšCjæ%x?†tjS¨L)clU[r™÷B1vÙÆ}ÏnùK4¨…²•:÷ùÌ5ðÝN!ú8¥NJÍ `âªá!öø³"o›z\ºY‘•0ò7ùùëøqà *D/ù·O0Ëž_…žl?_À1ó@Ô?£ÐÚv© vŠA:·qŸðœFW¯?usØ_ÁéàŒ¥•øsØDÕŠÍd`ŠxÖƒiV!5¯7¡(°»xP8ç Ÿ‰.&Z\6 9“Ç6ÉWEŸ¡¦.´MÞO`!§ð0½Jí[*¦ ׫õBpü ûz%½˜É‡öKiÅxÂwÍõˆ,M\g N=6Tw Ž'Öy÷Åä´„ƒÐ©•¢áfqB² „´•–K‰†(­D³… ¶pèÔg˜>ÇÔ1´“ !‚Ô¯â Jà-|Z{¶­iÒÔ<×V)R¦tcÁ¯C:N ½Ê=¢Ë¥jÖ®–~¼;¿4ü­ƒ¾ánôGJïJP=¢´5Œ¬æ<_w–÷p':ؚ݃uhp& •¬¯ÎY0”,ås#·Ö N%3Æ6Í>†j¿ãÈqmIß Ñ-Õ£Yœ¬àCŸä^|\<ˆ®¸æÎàô Ó|•ª5,à˜ÍK8m§38Æ·Yqk÷×°+'e3Í­bŸ;+ˆ®ˆF&aà˜,[8I¸“¯Z·ž„’¨'µî£Cüœd3:ü¹µkŸw‘]†ÐnªÊM6Å.ø"¯™_¾¬à„÷•ê\$]Oñe飯hAiq™¦»¾••î3X®Ç¹ä³4`7±œÕðÓfþÉ,‘(Ò^Âé}3pRÙõ³—dö<'ÙÉ(ÔÌãÚ[Èà=?és?KÊéáû«Énª›;½€§¸%qwü…ãn„ü4Þý.izÝš6ˆ ©Ò8ßn6̘Ós4s[ð¤JêÑ/8Öt¢ÊIq@Ÿ5+8¡Ë2Ò¾Ú±šcŒ~ðÐÚ˜ê´+ù•¡˜òÖQ[Ôå>Àûœ¼æÜÊéRµ´ºó]°ÂÁéŽO—Úã,²†ÿnНòí°} ê¬q—6̪;oP­šµw kS/¢¿!nS^ízq‹¡o{Õ¤ÆEù[ØØÆýiœcaûûXæV]íbêÙâ6#*ÅÙŠ<»Ŭ&{‡è0zŒ+øP=aüz4ýˆQb5œY#Ûr°=X[\Õ"æC݈h¤OLŸΪ§ó°)&h"#(¼—ÑÏ¥ ïÚÎË^:m›v(IÌýUËgTCôw±–.)Íw}v«CÎÖ ?4»v¡Ç_Õ™çÏ€ž’Ó¼Xש"HFr# žàÍ縊hgÌtŽ©3L3}Ž©«x~÷ø-ކ\g˜f ޶ªÛ¿ôKÄgðXÞÕõXÿ5^ð`R×!:£¼»H¹ÏÈ]šOƒI>/_îýÝ8ÝÛ–I®AÞÜ'/®•~ÙÞd¯¢%KŒ»g}Ÿ‹oÖ×™ŽÅËËe=—•5.àX­¦òËØòÙfA÷î]y¬ ÅGGÅebÇS8çay(oÎp¿q]‹ßÃV>¼SU»ÞŽ \½]î'u'ɶ†£ÑgYwOfᘾ“²êG6?QMô=t´éÈ„·ÞgÚ=‡Í/w`Ý6äÖÅò3roj›Õ Ndz€ãFjÑ•²"P«¾òl,ùc¤k¤c oæÆ4mFnÉ‹Õ~„ù!nïbm »ìf/~›=Á:v®àÅs\UbзPÞöη#ÒdV¼˜)Áéž±³Û»›‹Çú¬ë·&V Ô»nåÐʈÒ+#ÚÚêܺ+å»™û°C£0±êZõ†."‹„X¤õ ?Ù\BÞ¢G¤©ÒËØˆÄ]©ˆ¿ÙUE ·“x\i¥;'=‹ê©.vá—y,&j2תÏ…&«{‹}G.a²Rå @ªRˆ:][cþ°e2‹S‘dWðá>–ÓáÔS«YÞyö;¸·ˆñ2ö ýÐRÉÃû\O0»…»~G¼l†e,äoyò1iî&R½xLjž!ë£ò=,{$Ïá¸g2cÝ+¦-Â@l73`ÚàÂû7²9ÿ”P¦É»¥ÂGÄ«âe3zFC+ÕžãÉW¤.¤»bvq„Õ5ì®c'º£öX ZÄ¡:"T®æÀ ë?Ÿ ¹TSŒ2ÕHcfk¤%¼†§ÇX"Ÿ•0òucê÷ñ7ì… c€Å1@ ;qö7ñˆ4üÇX¸†§'˜ÆÙ2öùÃ>–ÃÞ½Ð5½ ä…µWšQŠ6Ô™Á1‘B›Z,,qY±¦ ¬Œ<öí+Ϥ"€°êª)Êkjâi*ºþˆÀBœ9+øPXg¹Þ´W¬Ëèn+GdxeÞåWÒ@ªò2u§±ú¦kåýü›ÅÉý%<Æ­5ì’|V O ”µŠ1«3DŸ‹)WÆSÌÜÃ)bॗYÆ>¿(E(Á‰ë“À’6Ur9)e;Vð!—$ž…êY}ì`ɹÁ”èCK¦W…Ö×á«ìDä¸UÜÀ °¾ÊrV¦Gz­ Pb»{“Vš–)açjãÁ«ølE$(À¤8ˆqRpæÉ17ø,BG`){ú|À¬äÛ½¤‘PÃk¼€c2ÒÇ Ä1…ó¬3éz‚Ù3L󤤚$†“Ñeì`IÂc|ûÂø‰‹š¹‡;×ð”0ˆ¶¼'x[í˜S8_ÂÁ[øh;ÄÎáý%sŒ¼’Uò~_à ƒ¹g˜cú‘¦Ç^°‚¯Æc… NO;2!ȳÑìnƒúlœØÑ€<ˆ¦yw`Ž›B Æ­ÍùÕ…)bÝUaŒKžyVX¯_EÖm80È4kÛÃÎŽÖã­*‹êö¦=f@¥›låÇ ¾l–öÖ„€ÌcáK+xÈì_doæéÏ´óµîÎURºMãŒì´'˜}„›Ê\‰wŽ9œg˜cý€5'¾;v›¦‘4¬ÎÔ¹ЯàC9 4,º›ô^¢…ÕŒø!¾g{šÊ©,òW¡%Ü#_ø@«•AÃ[l'…Ä0·°aà¦J!T¬¢ñ£–¦ekÛ7Ì¥mT‡•ЏN`µ±f00ÚÆ¦4W9‰8B†ñPdzæY+5Ø®a—û?¾)QìcAßåƒÝ† 8PKóóg˜^Ç ޵Yáís Qösköššì;ù–±‹œ>æ:>~†9…PËØ+¶KÆøé3ÌMãì{øá9¦è¥Î1Å8i Ó8»†§ 8f\ÅŽõ¬cˆÁ)œÏâ„YD–'½ ØòX[Øp¶=»öÍ]š¸¨¥—¦×!ÎfM`ãÅ€Òn±ÛºßYJÚ<©&¤5ÜfܨjFþª7åÈ™™œñ|œ´Ö„´Ö“,Ç•lrMM®f¶'V®ÞeUÂ(«oa§ÎÆíŽ|ª“+á¯g˜^À1!«;|Ý,<0ý+’u] ×8cõî  òž)þÁâ°&+.¹ƒh7cø¼›áw¤ÐÇžôÉ´ â¡D\eÍœAÇXPÎ@âf †k÷2öõ ¸Üë~½œÆÓ±åHa›ÊÄ*ô»c/Üžb†þ€ÃÝu]åu«pÞ’?Šàü üT $Ñ`ÀÍm oDApCF$Ü•rcº…¬kð7Ô®ÀÈì3ônj浌,c?$š‰L.‡£å&-á`Ëd¯ ;€ïᇋo]Åsz,`‰[®Ìqû Ówpï Ó/pE~‘uÙ9<;Ær-NíŽ+û\kcN³Î£¬¼R•ÒÆ´)õÓã‹2¸&OÇd rü^“sþ•ÕŒkY;”¨ˆô&ÀºÒÀõÄ€ÀU&òZ ^“ãdK‹Õ]aÉËé·æ-«<ªiœI]ÁTÄ÷Ë~[~‘s[ñô f¯á)üíPÒWùß±îb-Öbµ÷µ;¡(!Àå¤Õ2,}Þ€œ%#“בÉzÏñµ¼*îÜíiáŠj.|žAeºrˆÛüz ¢+ï¾PÛ×úg˜ã3‰LFÛ³M}M” rÜzR£ËÓ*ŠG•!{_åÏmOÔ)#<êÁ¨€úuü5›5ˆïÑgGÇÍ hÇRcå@-ü5$Áªe«@}??ÅŒâ!o) U¹^¶s~AÞšÕ/f®Â£¬j˜±zÄl˜zBx§\ʽLË1Þ˜Ýèl\Ï^*\™>a/-×5h=®ò†ú«3µh—ò\ýGx‹p¾-lp¡ç=Ò{ÅRPdÈš.‡¿ž`v§¼ æúnzÊ÷KOðfd «g˜cê˜5¶EÎáY€,ª¸’jÛ×¼¶#ôÖ±#NÈ߯?qû9®Îá€G¸É,7÷/påKpsÇ<ò9¦¶°ÁˆŸ˜â¢daRI[äbŸÚcÙÔæ´öjS¦5åßJïƓ‰Q4TìZm_y#çe·úVð!y¸žŠºŽ°ÈêF©“¨E© øÆÐJ_™ÀZí›Sn?íÈ´«Ê¨ˆüB`ËK¸‡bò*%¸jü?³+hÉ›mÄ>–ž:À æ–Vm4¾›jYM~¬LðPOð&iOð¶2ÆŽs1ìÜ<)zEгf—£Z,aQK8à'¹®E´Ý¨]ì¨2á¥:uWðíNP%ØÚY\yRU¨`i ¦,‡_3ù¦<¹éI6‰k¬¸ýÏÞ €!n³+6艇¢×bÁƵ}ùO»Xc¶–Îå+n2®á)ó„b†½ƒ{*)tLJ9DŸ4=®>ÏO ÑÇÈ;ƒwñ}‘é<¸Oz?º‰GeäYœ¬àá2öyLV¿žàí¬Kô1n Ñ_ÁCúrþŸvŽ)ÕGµó '˜• Ù¿R'óŸ‡XÊd3/yá3Ù7:©;ˆÁã,‰ûÓ$×çtÃø å št¼RmuZ—bw¦Ý.ŽR ¥>öF¨Ú`Q=Æ•ÖÕö* íù[—¼ãÊH¤êγÒz^eïÒ’4s5…_ÂÁ–AÏ•a0‹!áÈKØÜB5M6Àá:nq±„^Å Ç™ ’YœœX£žjZ×ñãEŒGÉë«¶ ÞÆé–fZeÅJk`¨G¨€ÁISkq[8Tä±Õøvû.¡wÔ ${™Bù&}mS *ô15®k¸…ÕŦ{½íR—¶ò–á #à›N"]M7^Î@Ö6>F±…£&JpŠr$³Òé@“ºì5󽕌¦ûû[6C¹îßÄ£G¸É0ˆ&-<=Ë÷K9Mnõf°É>¶( ÕÀlô*™j“Û˜Â95BE¿€ã«xν €'¸Î ¤ki*¼žÆñ1øáHêbëôRg˜žÃ³¬³ak çWð‚oÍu,ã¥H>Àv´Ç¸Åîõ£¢žÂ¹vÎÒ%W‹}†˦eáѹAÈx£m[WGÂ}œ–Ö“ˆ‡“6ââªä‰µ´çÑÛz*åaüÈÞÑÅS¬àa*7ÊÙ°=ã_iJ/ƒå}ä O‚à_„°¨g|‰‹XMHÍp¦.á•N† ÑÐßðc+øP»oC¨¯ðÀ˜…m‘yVÚÑòUŽ-&EPÅm8EÙ}G¢˜ÃôºÆöw¨°á#Çÿš¼Y.%ä!±ž€!Ì ýÏ*Qй®zÍ m_ZÍ2ŒH+Ô#¸ˆñ:v‚®“ªÎ•P0¢¨Ž®Í·“eCwJ8xPt6$²ÝÄ#aš¢vÈ'4]ÔæéEßáÍì^À1õY‘СŠ$B7³… ]ü>–¯ã‰ZôB#f“ ÆSÌÜÄ£3L?ÇÕiœ±rÆDh*›¢þ—繎0Š™kxJ©š3Ls€ˆ¡XÁÃëø8²ˆUDÞ‡A¼RŸÂ¯\Á‹x/Õ.ÖÞÀO÷±ì, ^R-öù‘R÷/!vWiç/b§Y;ãµçø’´0¹““Û“wh”¾[ïâøÃ€˜‹ºŠ–FAŠ+•‚ë5ou¸*«9qþøÌ7²ŒÊs8ÖNQ¥‰S¤m³—v8¶øšŒQ)Ô›N«ªÇÎzcAmŒ£B>ŒfáÙŽ æIDATŠDÛØ §jc¶Rάš0¢§@Ÿsqr¼é28„ŒV|Þm÷‘®áÞ*VÎõ¬¼q„‰ 6O VoÏp˜xx ¿â](¸‚‡Ö˜±gYîVÏPº\ n‚ñh(lº¸*è3˜Ç‹WÍ„“®âÃ[艰œgdú”¨¶Ö’c‚=Lôå|•»X›Ã3á Xo3$ΪÞõމÇy¼÷–±O³€ã3L¿…®ãÇ„˜Çë)*Xð Ò“Z:[S8_Æþv•c¤{{„›‹8äÍ.âŽ}ÄL-šr^ÃÁÏw » ¤ãÖ5<ÝÆý;¸Ç;eQíuüDÕÖÕuìiJ+ñ§¶néÀ:hÂEºR¿]u«IWÈ4i2FNWîÉhU3™¥T#8'úìü½Nƒª®žr{Á.Ak÷zjA¥b¯H#¿K=}ÌdRX™ˆ°­þ]­Xdzê.[Üa=®SÖToŠG‡ò¸{©uWûÊJ³ÃLªÊ4N‘Ѱz¶3Ar7Ê8]ð_ÆB›>–ª¸UäëšÔÈâÒ½±*W­,P,W{kð0_§ÂrJU³+ÀPAmÚ’{®fˆÛ.Ìcmѹ÷ŠªC/öh­âQ`v딜°ù °jSxë2šÃ"Èí¹JÂ|’W"ÆŒ(’›(³C /¢HÞæî˜ŽczÊ™BP|/)¹I5I,QÚ‚‰ÙY$– È<ÞÁúƒp·ªrì6ÂÓ7ïQ%prk  SK¹ƒ{îàÞûx/”_ X±OeÔF|ЛLQÏ„æ½; ¹VM›Ç“ò‚š][ZWœ“1·{žêâ-|å× =X;¤ : ÓñlRŠÂHt:8õLÁKŸY5u¥L7ëòæ'áwkìPKÂÁžÐë¨Zl(¥Àë\ã&3 __¦%8œ”“ä,C#£r±˜~âÛìŠuŒ‰®²!-Âßî…¹, Œ×YÂÁ4ÎÞÀO_Ç_ëóÄ©#…Hb$Ýœ¾ƒÝÂC]6)ÙiËUžn‰—D¥ëø˜°ÀeìÈ’ÓÚŽÉãdzPT~ˆŸ4q¢yI“øZeð”’n$Ø›çPá¹èƒâÖUü‚QRC=Æ­<|Œ[Wðâ®èé¹àÙå†hýê:Ö'écýÉŸüIyFÅŠ+Vì+bŸ¤U¬X±bÅŠ}5­x¬bÅŠ+VÍA>ó ¾wþ3æJV°X±bÅŠ} ­x¬bÅŠ+VBH¨ßTW³t^!Ç2ç»ÞxÿhÏÄäÊøè¡§¾½òÛ¯½>|‘-ûýWß}é¾NyùýÚ`DÙ$ÆGACžv^­§ë¨Ëã—•†öÐE³ Ë>Üñõ¢Y¥5þúƒã7­¨È3ê tÄê ˜EÝÁ¦“VûÊŠù«*ÿóCk¾ÝðΡkkËMí§Í­W¬MÍmÃöaÙ59áú”óÒyEOù¯ßì4zc~ ‘È ;`ÈŸ-QRpËí§Ìs*‚;lpX¯gkøØCëŸéª^6ouÕüÁÁÁßþå´Zà¾÷X]žAsðX«ÅjÛpÏ-ßÙüÕïüä7Ë có»ô”JQ²e+V­‰IñË>û‹}?Øö5BHD¸„o0¹ùÝp—5 Ä/È×ñ<Ïù§rØ„†å.ðw£N}µwäÅ_îï¾Ð¢Óé?j:ó?//,)È#nËÞC-_Y\d2h÷}|䋳Ý4Ë ýŽ×Þëí<±&JC51èÔ„·Çkw ”•S4ËÒ,¡ËrÃב$Éç÷]?®€?žïz»éä¹[n\±ãéMwÞ¸|çÛn½çö<ƒ¦³§¯a×[¼ZWVZ\]¹°ªÌØÔn£Yg?¤?`hBSS(EQ´|ÙX[ -]öÙ×ÞûÁS÷M—šÛdö+›/q^Àâ¸Òî³^Sx—×ëõx<Ä;è,ÕçÏIþÈIyüf¶Í1LÑÔ–ûo¬^ò V-„VáÊãe˜ñ X­7ñjÀó=°ºzÉ7£×TãÃ4‡ËCxÎdÐÓ Ë^‹†å)†™Ð˜4ݽºt¹Ï`.vxYBˆ^«ö:E½š2ováï^}>´z‘Ùäü¼Ý`.¢z1þËTî“Ó.±¶6ƉYöÅ­÷†ªþmçû²ûщln§ÍÙñ™ËÏ.¨^;ê°XO}H?!Ä~ö  ß hôI ѨøGëª !»ãÜ…ž¿¾þö• {û­¯¼ºgÄ5úßÛFÓ4EQ XQš¢!œ º£zq¬5)j<ÏuŒº½jÿäÃ÷½qà‹àÍ+Îëî³û¥ñûGZš2»À>C4·¤ cplvq>!Ä92êñz-v'!¤«·ïg»ÿZßjwú}c’ Üi¥ŽhùñQ¬­MÉ•}áɺPÏ%8eóâÖ{ÿý—û£÷›Äø(à¹p˜PTÉÊuœ áò5þòÛF/|"<Çqß Uk<þ¿pÝßúü¥…³x–ñùÿù«·%B±ÿĺXk>·ëƒ‰¥ä_Ã’@ÿE¦lh¿ÁaÑs»>.yáɺèýÆÊ™ö|aÖóý†¯ÌÅÁ%ysÊ\Ö2ýÇq’$u_:aœ¿*‘–*)œåóùmŽáÖóo¾ûQ{g¯©pÎ''.,-˯­\ð­úûþzÂíS ペ÷>=]hR/Y0§baÙç-ç6ŸYTl]3ØŸ þ~äLoçOöl¼«z颹KçémŽ?8ÜÕ~ªxá »ßÿ|KÝŠšªòæ¶ŽƒÇÚn¯YqàÿýÛ?mzàncþrääkoîSéL¯ï¥Æý®YRSµøv•Êæ9ÝÑÝÞÞNq†å(¼%Ò0 ¾ó¦õÈÇ•7ßÞí‰.ìwÄÜQܲ¡p îå¹_}øüãkå÷±áàç¿\ìéøƒ«¯}®jèD—³dùá;“_ÏÑêŠ2¿ß?äpœÒj æÅ?øKmM€<â–ÔZ“™T<¯óº-W:½nM3ƒ8b·HRÀ<{¡Ö0kÈÒë´öùÇ|„Hæ’ùœ ±\•_3|>Å붺GœcW@ 0 '¨u†YÅ*Þrå’kÈâ÷ûµ–ÊãrjM³Ä‚2Ž.¶!D2š‹‡‡>_ðöÇ«XŽ·÷÷ŒŽ8ÇÜ®@ À0,+¨ŒæµVñ¤ÛÐàÕÊÊ o-n9| ÖÊËWß3ž5­§æ¢t” ­&»0X6ôW[Ïõωˆ+¯Ó2W3r®ËZ¸ìNBOèóP È_îòÚ+Íw:ÒÅ® #C‚Χ™Œ³y•úZßI"„Ð ËójŠa–3™K E‚—«Jk`9>Ø)Ñ‹…,+0,È©Ô±Ö ¯<¯ÖNÐèEÑôøÑ±O(Êh.æUZ–å(š&D ø|ã·(ÊTXªÒ!¼ZK3,EÑ Ër¼šPĘ_Ê«‡$ŠÐCQ”D$†á(†Á[:!óó»U·¬òünÊËF,Œ;¿;ñÃ]g]6UY Ë ÑÛUi -WÏ`‹Ûíó:Ç\*}uœJ‹¥qH'šeÿÂ0 7«0|I¬5#p‚*üu1×£GPó‚Z¶H^ì—ó0,§3™q®ƒ’ÇGѱ”µ²1òeB'ż°&þ¦4y%^RB"R€ó 4zS[Û™ˆ¡Ê$1­§5zEÑÙ*›Pÿ².øq*­­§/¢Öƒ¥²UV>_0› ÄˆÑè.·ÊÆì¿¸6<¢0­aAŒê¿ârØvïØ‚Ö€éزcw(bð"TH™††™ñQ8»qIkllŒX‚þ ¤ ò/€|@¾ò/ÈÈ„¤?„MEÙå6›-ø'›-eobštƒ)ßcÆ6€|‰ W¤+_&}žïæL?ŒB»ßWh¢(F,‰X'T0¢>²[Cz¤JZæ_B×mô¥;ÍÍF¤†l”DïtÒ ¤©Âè¿L=A2üT?}…÷Y‚9Rè°((_¹ ³Ò Ý©bk €|ÉBw#}; ö\"FX±&b`:Òþú—ÐÅœÉnKfv YÈ—PG Ý/! í(|jvÒFϹ„—E/ kã£èë6â>N G‰l9þNcU#þš˜îÈñ _/€|ä ò/È@¾ò DæýÑ_R ‚þKCCRŸ/Hãø¨¾¾Sc2™¶ìØs|–ñò/€|Pb¾àÃú@Ö´¾ÿ±éê¿„¾ -ã#ä _ù€|ä |‰°ÓßnQú/€|ä ò²@~~_Q L¹õ Ù1ïmß¾=M»´Ûí8K¦Àd2åÖå“éñ¾`¦’êk466nß¾=Á5Ñâ3æwùÈä _ù€|ä _/9“¼? ñWôãµÿDÿ%ñ÷"â]‹\ÿ%}Ñ37_êëëñ)-Æñò/0“¤àûEQ$øÇ‘mL´pJZ5(¼ѰŠÎ—ð‡ Rx  …ÓÙ¢(Š¢h³Ùа9/¡Ç í8}²‰NUÃâÔÍ Ì¿ÀŒ{òá‚|@¸ò.€|€Æ¢ `æôb‚Зɥ|Á£•Bqn¦BÊÏO4,ÆG€|@¾ò/È@¾òùÈ@¾ _ùÈä _ù€|ä _/€|€/¿Èï'1™LhHK¾444 Q`òbæK}}=š¦Æd2mÙ±;ô_Ì¿@º _ùÈ€ 6z‘ÂoQÛíöœ¨çÌ<䜨j¨’¹Õ¤9Ôª¹Ú™·Ïsès¢ª¹u åJmcÕ“M*²«±±1'ê939'ª*[ÉÜjÒjU‚ùHä _ù€|€ôb§SXEÙå6›-©-$¾~ªê9Í=f¦Ú©=êPm•VyÙGG-Q¥©Õ0cÇ5Í¥ªžìôDá—™ì&Šâtª­üC޾¦yÈ~t”ܰ¹rÂç|ÿ%Îië—ð“)´$+Yâ5Œ~Ê _¿Tü5³ØYµyœú+¤‘øã¢ÌFŸ`Ù )Ù30­&±³9X{ÙóC g†l ©IKMmûÓì„ú¡ýF´yœZÉP;bJ¨LôóPR5Ìî /[Ït_˜l /QÙÚDLèH²ÞÕ–=-‚««’'ÉL¶@tÄ(y ÿÑI÷ã’¦ŠÙfò´LïüKô³eφ8ñ'{–+êjŸþóm®Ì¿ÄådǤ•T`öźё¾Ó’ÎÊ9¤Ø <[˜8~å·€ÒžŠ577§úOÿôOï½÷Þš5k.]ºtë­·nß¾Ý÷¦¯¿þú¿ýÛ¿­[·î‹_ü"U Ï|ðÁ'Ož¼å–[¢_òꫯ !Ö¬Y“ÕµþŠeY–þé}÷Ý÷÷ÿ÷µZ­¯¯ï™gž9xðà 7ÜàºòìÙ³/½ôRÿ}÷ÝçºòÆ©S§n½õÖŽ.¹õÖ[_}õÕááᬮ¤X+W®¼÷Þ{ÿõ_ÿõ#ùÈæÍ›÷ìÙóÀ¬\¹RýÀ¶íf³yîܹ_ÿõ_ß°aU çX–ÕEtai¤­¿bU*×7Þxã/þâ/¾øâ‹ëׯùÇüǯ|å+êú§žzjaa᪫®ºýöÛ©’_|qÿþý·ÜrËwÜAn@Þ¨T*](GÅ!“k#ÅX’_ûµ_{ë­·ÞxãJ¥2??ÿôÓOßsÏ=Bˆýû÷ö1•úùùùÇ\q÷Ýw¿üòË ùÈGÖ¯_ÿüóÏŸ;wnóæÍŸøÄ'ä«=ûì³GŸŸ¯T*7n¼óÎ;eú;öüóÏŸ={öºë®[¾|ù+¯¼rÛm·Ýu×]Bˆ³gÏþ÷ÿ÷»ï¾»¸¸¸qãÆ»îºËûÊGŽùá833#/׿zá…^ýõ¹¹¹þþþ‘‘‘OúÓGŽ™ŸŸX½zõ† ^~ùåóçÏÿèG?úßø¾¾>@0¨Wð¦›nòþøÀz§ïµ_ýêW¿ño!þæoþFý­n躶ƒ^AÉ5×\óùÏþ[ßúV___µZ=qâÄwÜqâÇòåË«Õê¥K—Ž=:66¶nݺµk×.,,ô÷÷[–µ´´ôæ›o !Ö­[wìØ±………C‡mÙ²åèÑ£—.]²,kÍš5›6mÚ´iÓÒÒÒ±cÇfgg>üþûï{ôãÿxݺuÇß·o_µZ™™™žž®T*ŸøÄ',Ëš™™Y³fÍâââììì»ï¾ûÄOÜÿýÏ<óÌÜÜÜÊ•+Oœ8qîÜ9!Äáǧ¦¦¶lÙòÄOÌÎή[·niiéÈ‘#ÿþïÿ~ß}÷­]»V=ôâÅ‹Ï>ûìÜÜÜÐк\)ÙþýûW®\¹~ýú‹/ž9sæ'?ùÉ5×\#„XXX¨T*£££—.]’ºxôèÑM›6ÑœÀ”^AÉŽ;\Ÿüõ_ÿµ]ûÇüÇò—.¹ÒoØÙÌ ƒZ–522réÒ¥eË–---E|íO~ò“?øÁΟ?ÿòË/ !V®\¹cÇŽ‘‘‘J¥òæ›oÎÏÏW«ÕåË—_}õÕ‡>uêÔÉ“'çççUª®¾úêÁÁÁeË–­ZµjvvvqqQŽl¹´aÆááá³gÏJýXµjÕÜÜÜÉ“'=úî»ï~èCºÿþûÿó?ÿshh¨¯¯oß¾}sss/½ôÒµ×^;77'nõêÕo½õÖ| ¥hzzzvvvpppÕªUrtíôéÓÏ?ÿüg>ó™e˖ɇ¾óÎ;òò7®^½úÍ7ß<{ö¬ê”ÿ;88xýõ× ÌÌ̬^½zxxøÌ™38pà€, Û¶Ïž=»¸¸ØßßO‹Sb¬P'<Æ’<øàƒ»wïÖåê3ŸùŒ÷¹ÇX/¼ðÂøÃŸÿùŸ?~üø… æççŸ{î¹›o¾ù¶Ûn‹ò¶7ÝtÓÅ‹:433óÁœ;wî»ßýî}÷Ý7444==-„X±bEÿµ×^{øðáÙÙÙcÇŽ©ù–eõõõ-[¶Ì²,¹Æ¹¯¯OŠ‹ÁÁÁo¼ñĉsssƒƒƒrÂýÉ“'mÛþàƒFGG÷íÛ÷úë¯Ë¾MÉììì©S§„ýýýƒƒƒ·ÝvÛ… ¤b gùùù·ß~[]277wèС­[·Êì’¿éïï¸í¶Ûæææ”bmڴ骫®:vìØ;ï¼óÎ;ï }üã_¾|ù=÷ܳwïÞÙÙÙjµzþüùÙÙÙJ¥²¸¸¸´´Äš6H:ÆŠw†z[Å ¹öë_ÿºÞ—ø'ò'QRÛF±Ž9òÿð###_þò—>üWõW2úÛ¿ýÛ?ÿó?×»È|Y\\zô¨´Ñ—.]zíµ×¤© /^\XX8{öì™3gn¿ýö_|ñÔ©SO=õÔêÕ«9"„XµjÕàà w´÷õ|3wqqQ¾©êTܸqcÿÂÂÂk¯½vâĉ÷Þ{Oýøúë¯_¶lÙÜÜÜìììÕW_=??âĉøÃ6lP¢7Üpƒ¼ü­·ÞZ\\|ë­·t¥ÿéO*{ådHÛ¶ß|óÍ·Þzkhh¨R©¼ýöÛ +W®\¶lÙðð°oü \¯àÄÄDÐ/ëõzr½‚ê¹²3°^¯ËO¾öµ¯yŸÛAŒµgÏžK—.}îsŸÛ¼y³üä£ýèÁƒßxãþþþ¥¥¥f³yß}÷…dPÿí·ßþ³ŸýLŠAÿÐÐÐðððêÕ«å¶Q«W¯–cHBˆ™™™©©©óçÏ9räWõWÏž={ðàÁÙÙY9ž444´fÍš 6¬\¹2J8¢ÿfË–-8~üø‘#G6oÞ,8!DµZýÔ§>õýïnnnfffÆ r¥”Œ®~ë·~ë¹çž;wîÜÔÔ”œàwúôéM›6É^J!IJeË>ùÉOîÝ»÷Ì™3¶m_uÕUJ󆆆æççå*´‘‘‘5kÖôõõ ½þúë‹‹‹Ë–-Û°aêU«Ö®];44$§¢Ð¢ ½‚ßþö·û·;¼gïÀAš¥WPÊ•|ÊŸýÙŸýå_þ¥ïs£ÆXÿõ_ÿõþûïoÞ¼ùSŸú”~Ùç>÷¹F£±jÕ*9 âÿþïÿ~é—~)DÒï¼óÎjµ:??áÂi¾×¯_Í5×lݺõ¥—^’ƒL×]wüýæÍ›§¦¦Î;wþüù~ô£×^{í©S§fgg…ƒƒƒ7nܸqã²e˾üå/ç;ß‘½p_ùÊWž}öYyùïþîï~ÿûß—{wÞyçêÕ«•RþæoþæäääÌÌŒeYwß}÷»ï¾»´´$„¸îºë>þñˉïR®ä"3ùÕ]wÝõþûïË™2<Ò¸›o¾yqqQ^¾zõêk®¹FöFŽŒŒÈ'^¸paii©¯¯odd䪫®Úºuëš5kΜ9séÒ%™úЇ–-[&»±tSÿÐCíÙ³'äÇ®8)ökçw~Çû¡ëÚH1Ö¡C‡öïß¿´´ô{¿÷{®kúûû?ûÙÏþà?¸îºëffföïßíµ×ún ùÕêØØ˜\2¬bÃ+V ÝxãÕjµZ­ ÉM W­ZU­VW­ZeÛöÚµkûûû×­[W©Tdßc¥RY¹r¥aÚºu«Ò­[·ªµ›nº©¿¿_Žu]wÝu£££rjߺuënºé¦¥¥%Ù¥¹nݺÁÁA˲~ô£]¼xQ.;{öl__Ÿì{”“>¶lÙ²fÍÛ¶•Œ ôõõ]YÎV­nÙ²exx¸¿¿¿¯¯Ï¶í………˲†‡‡·lÙ"'¿|ùò+VlÞ¼ùâÅ‹ò72Ó7lH-Æúìg?ñª®u}ØÁÌ‹ÉÉI!Äç?ÿyתXɺuë~á~aÿþýrþÞK/½$wo Jñèè¨ïWÞýàW®\©¯J[³fw·y=¢”è‹Ãn¼ñFõ·+ñ¾kžä4Â………jµ*;è×­['eipp°íJ©•+WIŽ÷…W_}5-òÜ+EuÒ¹Ö_±\T­V ¿×ØØØØØXŠðW~åW,Ë:vìØÅ‹ûúúV®\yýõ×Ëa3¦B@‘ššºù曣_òÚk¯ŽŽÊM2¹6RŒU*n¼ñÆõë×Ëî;!„ÜT‰m“ `È.+¹”("6lWeu-Šåãwõ[‰ááá B¹½6P±Ž?N‰@®‚ ·bI¹ :Õ ¦§§•h1¹rŠÚ-×c)ä~Òh4\Ÿc€ X€b X€b X( XÙSíô‚‘‘ßÏOŸ>-¿’‡ðÆ‚÷Y®›«'êî%Þkõ4Äøj½¿{¶%/Þ:à[Ù2ÏWª:MOìÍ$zEMèÑ1VÚ¤SèzDˆÝðÍÏ‹>®—íîÂ$òÖ7Ó­~Õî.KÓjDyVÒéÉÊJæJ¥B’722222rúôéxìë äA®¼/žŸTež¤^2''Þ7?ã-zU™S+¬œ“d«­r&šEBªVu]äÔµ!1\P`W´òÖÞ—ÕŸ¨îú;Í¢ñͺx]ã¶ï%7’ŽrÂs;–²påp׎½È"fNPmI9…mó3! ÑM–ïÛ…”cHˆÅL%ú‚Q’ÝE9V-roîÄnƒüˆ¤ks¯Ö©kæ›=Öqý~ú]ÚoON”÷ Ï^¬Œï;ÊítšI§N¢J„gŽïÃSØKŽ…X†p£Tô=Zóð·ë®’dXñ¢?¢»r¬ö˜ã)DšAZT×3éñvÄâúæs~¢û¶žZ,IMal£GÑJÙmÊy÷Q§þ{§ 9®J4\ÝKÑÇžùmE4¨ÓÒå¢å@Œ-4j–à8V\r’r³÷ímKèÕºx÷.šY E““áœLêIø‹·Íêœx]16· Ç9ooštÑÇÕ »È·pe]wƒf¦$QâÕÔ/q¥0úMÂz=¥wOK¿¶Óû„ˆ¨ë« wÁWääåm+DÁ²,2!C2ÊXíÑ(øšBä-\*B¢ðØE}bî}pý*߯ÔÝ’+»Žîž3¾ˆ2ÙïìÒQoÞvW¥å­\7¡EÄB<3/T³ 1—È•+Â3Í÷ÛtE÷Ù½ŠÅ…okÄ;ªNAyô” ß»>O¿Jw”·z©§ ØT;²2x‹ …á=E±äyPXæ[²ÉõÝusè±KtÍ‹%Ó"ŽlE|b\½^Ñ¢¡ABØö˜eM™¤X6Eè1sâµGQz#ŠS/aVGï’ÎSzÏß0.D–ÂoÕE=Q!;¢ ‘¹ñÎn§ÁD±¡™¤í‘o¯cV™Ð]uRa–h7 0®ªØKþ'šÃúk2Û‚§]0jŒåRš Ñ)‚3€ÌuË*óz¬¶g wQéGÈĦXAæFèúVW8ý‚­4!çJZž¨½‚^3çU£¶a¶2[Ñ€b£N)jÇ û ä-Zs¨ƒi[¶d_AHNŸœÖ-kJj•m×É wråüÝÔtk¶.I+3ô &N£Ñ  mt¥÷ZÖ„óç¤eMÙv]ûÅ‚ÄàÜBðӪDŽxRˆ¦.TòðßÖ#€›¶=æ^c¹=kÅ*»wï&B'ü¥€JˆeM ±Ý¶RŠ\a–’%-«Ù¶È³\¥£¦(V–œ9s†¢€Jfíj °êzÈeÛ{-k»)¢•NÂP,Ú|fñMNÔ‚Êy=ÒÒiŠ–©íº\5KÞˆbA¡P»®°\L”+5‚%DM\™yQs)YÉu‹ÙíP¹âè50Û³í1Û®KRR$E˲&¤\Ùv]ˆmBÜcYSŽŒ•=̪F±®OÔù#®“G|íoôìÕó*|À¶ç¿„g{HñÅò¬ 70Lç¡1æÛ«âª!¾ ™˜®P©?§T˜%Ç®ô¨Ëé ¬9ŸOêÑU§¹§9ƒ±Ú»!ðm94†è†Ïµ­pÛ!ä*ïÅá¶,‰geâÈT¥)W1æÈU1ÖÌË„¶y’6‹}Bxf)¹²¬ G”ÈMˆ\Ms×'ƒØB$¼;T5ÆÖ›­sŽOí/м6E=·£G{ H7ym»Ñ|Ÿî¾D1©)hI’ üïôEº+µ<çRù‚­1×,v-äÓþnØö Bl·m!ÄXëúâäå*yùI[±‚ª~ÁÆÀÕkæê½\‰‘ÉK(…A·ÍíÓO½‰=ØŠòš½äÊ¥™j•üÿ)×ÞêZ`Ͳ&l[þrÜù>‹]š,!líïðŸY))\5ÞÚïêyH­£&…N§”»žÚ:Î{¥\%Ò]â}ÅÀkÇóPÜYEx½äøU½ëᥩª€%e’‚LiS%¶-T Ã”ˆ|ü•%4¥‰1ÞrîîÓ!i¥U¢×~oS³ÌŠc´Sù”«$2MUïÎ.dþ@·º5å;ýϲ¦„³,oPU·,©vcòÿDŒÿéšä|âÓ!i·dyP¬¶~\,­R°¿zaÅ%WñÞ?W±µ~6i’S¼üÞhº4LßÞBˆ1!ŽtMh’v%JKÛOº²¦K«.R`ˆƒìýß”Ó :Ÿúá;_£íºxVG÷O´ŒòVsBò?|$¸Ó Lè¶§ ØÞOÆZc,ù‡œ¸KßrÏÑH>ìDØDJ}ƒñìy¡‹Vrãÿ:ÚÞÁ€¸FºÈ.ß«ÊùÛF_~”f%‘ogx\ùßöª„n ™à9xÊw’ºëbökïL±"ÎoÖ;OŠ—MúKÅû‚á3˜;JC×vú¬¶9PàµÃ±çw?ˆ±†@¦6åû¡+ðʵhY‡e=À.MÙãlÝtyà ¹†m×›3¡XùŒ·äùÎÎLœ;Ü{·äK´­P¬Ôá [ JK CP¥ššb%ÇâQ@@Ødô#P¬²°{÷n2!„ññq ˆ@±ðß óë) œPiaŠE›ÏF#'jAå¼€Ê rå ³Ûàr`‡b`Ö ìb }¯ wkÑXÎáíâ¹:?Pd´÷kø¡Ï¾…%"ìèûƒèæœ7¯( Ì:¤céçcŲ=vïg7”=ç}v9­áµ¡AÅçûƒèBPyóŠH6ÆêÔ£ôuÿƒœÍ3Ï®¢k7÷tüw×iá&)(I%ñòS@ùï0(`ŒÒDÛºrá~Ÿ¡®¢~$9¦B*?5 mÅÒO :XÄWr‚”)HÔiCùoái°Òщ\¾&Òun¬4#¨€|½.ßvÄùÝm©vÔþÓ´ùo½úñç‰ÄXB©ú3”«.¼D †«S³(‚ ŒÒ&£dy«Ôú-]v-‡õÈKŒ—q8âeDt¥÷ê$»t4K;z2¾’heoô™÷@²1–žŸÔ+èû­· §µ÷À7|aH„Ýe;Œ4žý¢Ý4ë:åv”±ñb>Ë¢‹Ú›Ú{ÌÕ2P ßâ– pÓŽ±†‚$ä*UÅ¢/"æ™h€¡ä¿O’ó±§Ñh @þéH®2‘7+q8(¹¼¡Xf°{÷n2!„ññq ˆ‚N)í”B ÿ=K2?±žÊyA~â‹6_^FNÔ‚Êy(*d X±Ñ¾WEÁQò$å\Š~jsÛ£œc¼Dc¿9n{jsÛ#Qb¼P@åĶÇÈ„ÅXzãÑ qýÝÖõs¿`´?è:^$eÿ=úƒJëhç¼€€Š;æ7Æ’&@YŽ\?ßSÃÍõóp¬C/ ñ IDATÄc&8{"«H‹lÈR±Úñ¶‡Ì‘ÏðÕ\Ö0Ä (gOQæ.…o¶»Ž*v%‰y=VG ÏôVª‘ž²AÄy¨yË(ïQ¥¾=ê¸b S2êr½lš¢…\@9Io®`†™Ø%âÒŒÜö¹å-ÝP™d;9'ÿócÇrÞ?¼¿$\èÅ,ºòÐõ϶ùý*Ь»†Ðc®R@&ùŸ÷XØü\m £¿}Ñ-*ȲdõôNó9¨ÈºøÐ¸’Êð¹Páfº'c‰÷ Ò¿(KŽ%®XtV@,¤qÚ*PlÒéå|¬Äi4dPlz‘«èj‡b%ÇâQ@‹Ú¡Xɲ{÷n2!„ññq ˆ@±ðß óë) œä‡ûÊÅ âÔN},‰\•íͶ/kJ†pü)@â1–EЇÁ£´:×/Ó_ãž’ “#Ñ_ÍÄ÷UiöÇÊóµM[± ΈªE&˜ªXá#XÞO¢¥ZÄ[uB†î;}ñüÌ@é´8:ú0WïÒKe3Â&š[pƒ#ÓŠcdC’lŒbĦÐ!ñ2>>Î^þ(@R¢E& Xô‰S@€b™}â Xy‡>q b„3ˆÀÌkxx˜Lk÷îÝd ä„;v*Öøø8y`xxxzz:P±Dvƒr <Ý’ùI‰‰É Jp&“È¥–ó¼2¢@ieHsÞ’äUø»¤i4*¼ËvúV~Rbbòœr?<<¬²(·yeDÒ(Êæ¼%IO‚¹‚`( X(”îwiò=ÉWä`;mý4d•ž4Ó–«s› :ŒÃ7ß8«ÕÒ¸’¥v—±ç[µÀå—Uò0 …ÌL(3ÔCƒc,å¶ŒŒ…Vz{aûÞÜ› W°¥œ„ÄvzRƒ"¿ØÕ%¨˜¼Ù¢§AÿÜõw %ëÍØ dÇûho‡Ax5ë4ÓR¨ùSVÍ3zz*î(­ m­K-µ!ÍÁ÷ïl›jøãÊ¢nƱÔžªÒäÍÍóH¿¹oý‹žà¤Cœ$ò¡»bÒeÌ7mÒþê¶Ø7Ÿ“{#åUøÞ<üÛ^òJ½T”jÖQ¦¥Só£S†Í³Óô$ÔdÂ[A¸1 Om&-½‹ç'ñÑ-†z‹ô£«(Eß{–VÍß$²Ì÷æz‰¶-ò$^Ö÷¶YæfcôH+…7ÊPÂGÚV³LR=Iá…›aóô}b†¹Ú…1Éa£ÎI]òÄÞ[wµ—Ĺþöý0µÀÓ› ߆‘Bz¢äC:yþ”î¾M!µé×®ðþašÕ]:ÃÓœU"3IaÄÅÕX2iË–( ë1UìÒоG òŠàòÙ™U²À+ZÃ,%Æ3@±À ü{F†iÊöéùL‰‰Éó2<éß¶Myš9µ”hçI§<¡™Yå¹¹¯r•‰-"¡‚(òÌ =ÚæWÈc¼ zVÄé­“—Ä8mÒ)OnæB:yã[¤™òx³=óznîë¬E$ÑLXA f€bŠ€bŠGüç 6ŸïÝ’¾mï Zr›¥¤œ”ó:e~…õÐC=òÈ#KKKÇúé§ÇÇÇ‘qÈI0===:::==½gÏžjaâ(6nÅÚ½{7™9aÇŽŠõàƒÆò ˲Èh€èØö˜eMâEìï6==­þ®¯ÈS» FŠ!W‰R¡ÈÕU芅ƒŌβ …²@\Å F«ðCF4Ì( X†ù2I¨ † $Á‡¹®Ixþ^8g8ñ(Ñzªµ0èVe6FkEQ]“èï…s†‰C±ð;R­…A·Šë¸á@ø(~Y @݆(àኀ‡ ø€b€á‚Ÿ(¦Á@±0%(Š(Vi``‰Ë ÌX*§åíý­J@±0ëh-o (ˆ/r7­8’.¯ •LqD(_"lÈÖÊâ¹yÒåU¡rå‹+¸DK†-‘Ùí€Éˆÿþ/ÇÇÂyBbQ,Àdd|ÿÂKÑ!íÅ, Š(V ‹ ÿfÅ¢Ã.ŽØË©´z‰£m“ÿšÙD±ŠSN¥`,$Û&ÿÁ8P, Pp¼Å¢á5 Ç ÊV-Q, øfTK‹JŒ‡AaA²mÿÅÂ[ ¨6(€ ±  XÄ.€bA@n‹ª @ÐF3+Û-ûÐx‹R ž+“bTQѨÕDf(AÀ¬Z'W^Å€<[L¬3žŠfXL¬3 X(º§(} Ì€î)JÅ ª@±0DØ@±ªg˜ 4)e›àJYFÅB{ðIŒ°®`»Ê¨X€¯(N=P|´A §¾|šâȶ%Ôé,‚?’t’^^ ï<%ˆbÁ|£(T0^ ÊP‚(!˜Š€KÀ(Š>ôƒdÛ(P,l"D-úÁ\¤Ü(P¬R?P4¸P`Z Ó€bѺpÍQ,_ €P, D ÷P,ÀmCrŒò pÛÁŒ³¬)D !/ˆbQlH&yf(Å€ßo†b@\~‘Ô Å(rPU¤^+  ì %SªŠE#‡RÔR†‡sk7¢ÿ>?…˜UJ*T)9 µÔô¡ÍS¬”£ª(PoÅBBp$¨·PhÅ‚LIüM"  Ìp$ñ7‰$B@± €æP,\9ØRdcDsO50L±ÊéÊáÀ’Tó Å(ÅèmF±Šcúƒ’ÒÛl˜¡XóÆ.’gÐÐ)ŠLN3²8(5(¡¹@±€ÉiF¥%4(Û€ X@l(¤Háû-P, !µ¥ ¾ß¢BµP[ ìŠEµÃoŠÀ ÅüV hP,@±rI:Ý&tÎ@±k8Š•ét›Ð9Å®á(N. X8¹8j(ਊ…× (Vòbƒ× xcä X‰ƒØÐ@È ˆ$P,$¤‘: (€D—›uzäÅ(T¼U³N,(¡/XÇP,tÅ‚3 ÎP,@±P,P0݈Ò@±À ˜nTf© ô©x( @ÅC±ràYघk P¬= œsÍcÚŠE”°y3e%1­i+Vš2žB"Àd”3È[DR’¤ õ»Cœ“Z’gU 'P, 1ª€Sˆb@ÖN!2‰b`>ŠœE*&úNP,ÌG‘³‚bB±ˆx_ ÀXßÜh£O,("„¡€bà‘ X@H‡bQ¨„t…´–•’*ˆb B| §P, jáŠR+µð‚FTã ÅF@¯ ÑŠE487€bàÜ X8È€bå^pP¬ìAP¬‚X@qŠE€ X€b€/ôjRd€bÑÀ èÕ¤ÈÅ¢1Š…N Kf@'ŠÅƒüë–(}ñÆK :u}Ÿ*O•ÂÃ-Ê‹ŠAuêý>)Tb,mÞ ÌÅÂÑæ½Å"è‹àň%ú¬˜ŠéHÎX/—XÖDз*0õ>1Ú XÐ1]txúJ‘Zøå½¡÷÷ò“’4à<¿f®ÒVøú W{Ô Å‚D,ˆ÷Õ·^)Rº¥¯\–{_’ÑÁ<¿f®ÒVªúÀÐ8н:¶^ARòãü]sI—Ò­ÖôOäµò¿ CüMÐaÏ hïØêBâõ-kʶ¯|¢ÿÀ¶Bì¢&Ä”M!„mOYÖ˜m×-k"Dð7 1V¸ãŒ[ÃËWÆl{LMTq’eMÙv]~eÛc–5.ÄN©UÎ=BÑ´í1!v ±Ó{[¡uR¥byçÖ9f¸ÕùÒ-o÷ &Tú,öÖν¦5Û®;1–þ¹üc§“ò[GŸêzg#™.rÑ+˜óTBâXÈ™ëÎd´T“Úö˜¦Iª/ñJ&ƒ0!„“Î%BˆšM!šåœ‚QNOˆÂ3b¬b˜ïò¼¸Þã'ÿ–’ãš[!?Ô$g¯ö³šúÖ¶–5!DS-Ør.©©¡¯ÖÙƒõÂô &ú"ñÞ<é Íƒßåt*Öm».Ä6g¼ÔÅ–ù¾+šsåQQEsëìR4ÄXj¦æ€šaáYºÛT ájá®êWé?öìŽQº•ZÅåÌ-”Þ%C=¡-ÿ B<* hP,ên)œMgeÕ”¦:µˆŠ²5{ë‡r –wÝqSMD”sßÕrcma]ÎH¤ÔP,(WX)çV¸–CéÛýéqLÝòF]Âo‡Ze쫚21BÛ*× ³¶ÉL¦°óÝ>@± J»•½sZd#œ µÖnº.#Q-V›Ò6Õ9ªVÓäMÍh—]‚ã2“Ÿ„ôIbR> [PœRdÛ{u“ª ;åÄ•…YS±ä°~zˆ¶[î˜Ò3Ù (× ±MÆaN|¶Ë‘±ÎývùZ¢b#L*@å:m[кÉú¾šä̘ïïôK}‚»Û¹tÔ™p!' nBÈÉŠrgB5qQ݇ Ðçjhó¡W°Œ5Õµ™…m9ò f"éÀ%hCB!„³1®¤©Åg-ÁŸ:ÖD´.ö‚Âô…P¦øîF*7¹šªf78bPOhOUßyré•5Ûnˆ+k“'„xLˆ]Bì’gh9G?¦E }>!t!k)eŠ95R±¨¸=VÇà‰ 5ç’®è* ëãÝ]I‹v9;áÊô< f9_5„h: eR'}wéÅÅŒ~Í)½‚¥ˆ÷µ.¸1u*£¶_mͲÆÕL÷¶ºëS¤õÎFm©²Ú«©¦M©¨9³0&Õ9Å2¢Ò' º–'‹äÖB Å‚ôC×>L¾;-…Ûåðæt¤ÓåX÷“¡fa4µÓŠ'´1ªq!„m«9{C'mJ0U(ŽpJŽ¡ nœáŸZ«f¸e¬ÇÌWÝ€N×tõ::Ú©Ïtw¶ß•Ç—LØvCˆ]–5æt>©´MŸ4O¡ XÄìÅ“ðš¶8w[«À4ºÈ=×–K­—7õ¥Êj_AÛn8 ‡÷Úö˜3ýòæñBL !„¸AˆR®´•Å“JóÔsÕd÷"­#€²(V>õ ©~T•³qß”<}±Ufvu‘lËš‹‘]r¥-½ªk›¬Kéw¦­?é÷ ÿ= Ĥ78úÚÔÂÁË£\®-q ³ˆP¬ŒÃµ ©mO9€jf]CFTúñ¾¾óî\S6ôh*¸]„í@Øt¾Ú«(ìlr¡dæ góÀÚµˆËcl5!s^¤)<Ó僎 ˤà,Ë%65!vÉKëd Rc`zÐæ=kX´9 äÉÖBת,µyà¤5G·v:«›¿$_DmÆ¡¦ËkgwµlãKÌŠe^pCs­3ËåÌ]~„Ö¥æê[s|å=Á ¡Ô4zMÃ&œ¹‚5G.O´í½BÜkÛcBüXˆ¦M!&…¸G®#¶í† ñ€K‡”øy7Æ¥‡0SÅ#û ´çUΓªGB®ñyÜp”ÕK® ‚ŽîyóuýHg¶…âGTDõ¸5ËÚîh᎞ÉÐê !öil;]ƒmú´ Ñr8$c%SdnRKj5MYwŠ–Þ¿†«¯/äYÞ3®ÔiÂÞ˜L¡Æ®¤ðØvݲÆI€BÎ_W«˜ä¿$Ä=rR»£vo ±Ï¹Jʘþw‹Ó@P€bS›-ÎøÐ”ŠiËþ˜â¸'\ì §\+ŽÕ"RQ´ÀN†DÛœ¨ë!vZÖ¸œï'DͶO:·¹Wˆ«@ê !&µÁ¶)!¶ ñ˜:ÔQx†ÍDk&ãX(V¾À$EÌg†B]\Ùû|»oðäkî]{½kÿ[o•ÆŽ\©+jŽþ]‰,k\îèœi"»åF‚÷ ±KˆI!b›³ K΃ŸÔæ /Š+{>Õõ0‹«ðµº ˵buZ<™›¤<×'mfDÙ¡ ¢¢ÇZ;åÜù©ïC(.O…óª—ë!„Ø¥`9AXSîÌäôò©Yé»Ô¶ëÎ/Sç kGŸl“ºåüf§“í {i‹½šLp§³¡0ï•ô™(V«cÎìˆÖ¤!Éa§íŽÞÔ‚özoÕ§q½çP?˜ÊQ‹Zë®MMù&j¶NÜëèMݶ÷ÊøIˆ'„¸Aˆ]BlbRˆ ±Kˆ{¤dʾDÕÓè̹¸2ÙÝÕW €6£X`X½wúè¤Ý«øëlšî ªkË~umhz·Q×þ©¯élÐ^âI¥mÚä#B¼-DMˆ„ø’÷ !œÍ/|ÂG×AJ!!/½+ J¥=.9ÑÈ·õ8¼c[@çÖ*—ì9Ÿ?&Ärn½oÕ„hÚö”ÛöN'Ò’_ÝëÌÑú\|ý¹Îú°¦ïÓñXP¬‚ØñRu,´ž|XwÂ£Ëæ>(7Z®É³©Ôl@MçjÎÝBµ^ÊÖÔdüÔ*W÷±MˆÇµír^bÓ²¦l{—¶û»œ"8¥^AÅm®u`ÚWÔ7«(v¼ð–EîØvݶ…\~+ÏïPç"ú¾²ÖsØ*åšdáL¯˜P={Ú| ÷Žži5ퟗã6¿ea çYã­Ý’A…åšH’óúbð8Vì#ų,žÓw9Ýh»t£¯|åB×.uD½¦IMýGž]sâÕ>¶rÂEÓQWiÊi“BLª3PœC“]QTM±Ó‚œØ%ªb‰b,\×èa–¸2¼Öºò·®m¬>¦aå^¢ëí`ôœ¹5åLçsŸyv¬;³*ôñ³+;3Ùö¤3Õb›»”Â9×6ƒŽNvÅaÔˆ«ù$d—¨Š%бJè‘u~óº¦Fu5Ñ\ETz°¢5ž¦'ÒšÒÖ ×\¿×v^wéÓcZ\%ÿg OXÖ˜s°äNí’¦Ü÷V{ƒ]žT5µ‘³ Ükâºn1І5 'Tªk±È¤’"§¯Þº²Ê-é«€õsî]gÞ«¨ÈÙ¾Öu(ðåñ'×Á’ZöÞbÛ '®jè»ZhS§zñéÐ'Ó[ ŠUø 7¡ÿ¡ÏDw~¨w¸©îA}'o'€úÐù|—;…ø’Š·”t9W4µkÚ®†r¯Ûqço}VCx&w@9A±ÊÚ»V\韸Vøz¶VrM‘×÷G¯yrܲƄ{žáXëïkÎ/åvì5§·PȵYÎoäI%»Ô%¾ªé}SŠ;E&ŠE3‹]¨ê®I€z¼ï=;ØuΈð[€åwºã”µW…¾ÊXßçB¢M‘×îUË-kBˆ{œÉô5õÄ ­.rÛ‰QÔúO>Š•8ekfj¨ÉÕ}°;{Í•Q¾û£·Š_Óï¡ãúaľ"§-ºštöyR·Ró2Þvæ1ªc´¦¢e…”å 7©ÿÐüg[yJérq)Uh]à&MêêÞC‡…{¾†kn¡Üfi›šû®N_Ô⤚vÕcB< ï®kYãr9—;[§ÎOE1ÄÑ·½0ÚŽÓ²•ÿl+O ]J* DÌ%µs’#EM—‰×B±ºë¬a×Ò]×,v¯¿)O_”ƒUN÷àå¡Ô FËšâ ¹†OjG ±Í¶ëÎZrãÁzÀÔy#½cš@°«Zå x6 ¬kóñ¦¼»óiñÙ•%×áŠrëBGä&ZRFK²?PMµ¸×Ù c¢UEv wçä„wJˆ¹Þ1”.ÆÊ¦¸ê“ׯ,Øòè“ §êžyn%k=¼q‹Ú+®ÌÅx̲&Ôð•s“¦YÖ¸»\O‘sÕäx׬‚ÅIB[‹+@«PqL¹~аÚúOÙrmåîjÞu}I–kF†ß»ë«?àüf—emwzÿDëœø')m ñ„–¥rËö¦>r¦«”ß°œyn¤ÖÖ|·G¡ž XÃv>¡m}4áেYúšßÖÓÝãaÞÖ® é2Úr«)×ÞêNwßN!ö ±Sîïî’@Ýָ¬ 9#”;¦»›¨ƱŠï–j½M×IWBëåSýywo б‚´Ä{ÞGÐ~€š|Nê³ m{¯em—wl÷•(WªUp9OæJBžŸmÚP¬òˆÖ„~`cÀ¶°S^¹Rq˜ïqõºl¨]n[£´Ë{àz§,zeOÑí·ã¢u‚>n2;x¢J‡@¯`‰âq]®‚o[óý6tkv}AqÍé']©­¡´ÈoLí«Ï³P³6òÓ($è|ùMozã×$r?Û늄Z{ ëÏ‘{Lîè¸(®¬úªk1–ÚNð1zÿ€^Ár)œ«£¯õ¼ËúáÝ¢ÉRjéÌËdGIDATÊÓÖ#«ðh¶Ý7ií÷ÛîLÙPeí´¬qÕ©)ÛvCˆIug9í0\›Ñ3b,ÈEgT,»w¦o4[çßQ7xM@± ƒH%ý–Ë.Zhå—Ôô»lt½¯÷œ-ý+u(‰ëÀûÖŸM¨©‰âÊç¦ðÛĶíYÃAjšór)@(³B—AÈóöŽ(V¹Z²ZÕ<"42廸É;eC;vKíäTkÝf©¦ETúʰ¦Öëx9…¾«»rÒ®Ë äœA ×?×Ü?ï²*áwGÈNê†ÞƒH,kJˆmÚÖ·SÚ™È28Û麳vhdSëbo‹P}ó@±Ê+Z!¥©å鬷®¬ªëC_®EWÂYP¥«NkØ4)|:-kŽàMˆ‹±"JS3P,0W´v¶†;WäJlܧV"k·r]‰€íþ\#^jÊFk§_Mˆmò¶cW¾RD €b•…’Ù»]úR*ס!A1YÈÀZHXæ%|åõIð®ÁÝwM}Ë oJDËá-DÌÞüah*Š•/0PeÕè‘OXã9žX¸´Ä{ü£~J–ïÞ†rÈʵw†nӃ減Þ1HÇ&@q 4“Ü–{ý¹ºé<zuáåÒ{ùôé…J®ÔI"Þ] õ1*}…–¥5\ñU ´äô´‘^¯ €b%¾É³®{‘‡€byæ œQ±y(`ðGÅcýü@±P,È+ô/8ó‹Q¸TQ à2ô/eh.“Îüb.UÅÌ%  XøÝH2ŠE#À¢8P,šîP(Ðü¤”™F–¢X˜ ŒðHÌÈ4²´Šåk,ŠdA¨Ç”@©<°"+–¯±À‚êÑ+E𾡠 XÉa çÞ7 X€ÂŠÈP,Ú€9ÍP¬²´1 ™Š…€bWlŒðÑU@±èàMP¬ÒC`€b™!FT0@±  ‚ΊØ&Cò¤Ì9STç ÅÀ63OÈ plÊ€bȱÅ$QŠ…I ” >±Áo €Ð!q@±°)€5§™ùb™iS¨²˜§R5*¼Yf*‡åE¯ U(k2Ì(/ À r¤XYœY ½-`†bÛÈÒ€öB¶@q‹†¹“„k(äN®•q-¨TMÅÂ~Ѻ ÖòØ–çFŠbÍÌh¤i(n5™ @S"ÍP,Üj2;4¥’´—D3^Aì€íÅÃb—CÄg(Vél1¾Xï7̤PˆÏP,âb PÅ€RR殑¼;Š4f çÝ}š?çca%iÌø¤¶¼v ϯémþm Bú¯Sɼü°’P£fVmO3µ%±{Íô_§Bù͈ÀÇLà.Š˜0 2eiÒE±+8@d©E±+f€b„A_ŠØG3H­/Á¶ëä6Š€}#Š~‚L@±ðÓ‰€}!¯u1+?]>Ý |G±ÀŒºH¿ X`pèoÄÅ*]s*XæQTæ¼EÛÄñ(VéHºÒmèõÌÁ:ä_«(#@±7¨f(€qŠÅ0 ä­žä¿NÒjÈO+rÒ­A•Í9)‰›óú`Vg`n3S%ŒÎU ƒÛÇêCyœ¤.2³÷̉rZ=Š€ó“Ô«öôž9¨ŠP̈ ’+”P, "E(ô£X@ã â òÞ8‘7ÀÙ ð=¨(Þ+ X€÷ ª>ŽYjÜ+£X%U} ²Ô¸WF±ç€a(˜ÚB¨Ÿ‘NM@± ›‚¥£5Åê7 Ä©ÅÅ‚œ¶ØØ›1Ѧï ÅH¤ÅÒŒ1(–yžlמoì.3>8 Xx²‰x¾±»ÌøàO¯P,3¼:@±ÚÅ h P,€òB×"ŠEUl˜]‹(VRU¡#‹€ù€œTxª"€Š•­â:^<Š@t @ëC±€ð  L­ÅÀ*˜á¡XÔ*3¼" ÌÅ€öÐKbŸP,€²÷Lă(ž à­gZ  X„ö3‘­†j(VéÛ]4È@  Yžihjq+WeKb¼í‡ú @™UW²8Š•«²L(1ÔWš A±P¬@è¦@±Ì€> âP,‚x w(z@±pW¢¼²®Š€—Sæ¬C±À P¬²Äæt’ŠfÄæt’€AN6ŠE`†“b‚ Š(€zàÅÊu»¢‰(èÇf¢X¹nW4Q0ݯõ¦Ðõ 3/p‘sšÂôÓŒb”.`2” E@ ‡²L(E)(„bAŠ@І¸ŠP q  ¼^ ŠPjãhPxA$( :G@± ÓÕ(U“G±ñš<Š(¶v Å"lÚù Ø1 h{@~BqA±ÅHº.Q,j!˜]—(µü< @±ŠfÙ‹êÆâI-P¬¢YvHߨé¿ÇPÒ" ŽŠ1vúï1”€Ò±@± ŒJŽ–à<¡XEó}èÂH_ ÐË$[T_ÓO3-²W,m1úX‰2*~P =M²P,ü 3r˜lÇÍ"çÅ¢ @IH9çi¹¹5e(Öºll^EË%CP,@Ìhl^ebYƒÑ X€Ç ”5ªŒbN{ðÀP,"B@±ÀXg–/FâéF pf 0ßF¿x\‰'” ˆ9]*”«,P,ÀyK¡,òŸÉ(®1¾˜‘É(&À P,(©ÏTW@±Ÿ€ê åP¬’;MøŒÆ(VÉ&|Fc‹0… ,ŠE˜BÙŠ€bt]ˆ(€BE"àÓ X@kÉ5PUP, µ Ø€b‚xP“Q,Ä„*FÜP H(uÅ0Ș X&À˜˜A5±À¦1 X(@׸DZ,Ë"S ¸¦Dͼ°„¨8ÿ«ÿ×Å'é\Òö&VÖ ˆýQKê?KØú?»û$«›¨”æh71­•´ýÄ2­•D¹IÇ0âÍ SçèA±Å@±Å@±P,@±P, P, Å Å@±Å@±ÅÈ'Õ€Ïm!Éœ³$Ĺ@!A¯Hs‡ÅËeÙØv˜b¹¾_,ËÊÖ`Æ•€îîñª¶?ëèéô € XÝyT\ èî>¯jû³ŽžŽb1Š(ŠÐ-U²  2\eY–ü£÷t}«( ­ôúþ8äéò«6+ˆ ¢•Ï\){TÍ®o1¢¯ö>Ý÷Zz:öí cÅøèîn•Dpñ†ÄX¦†zqíÒ$’Y¥Ë±£§£Xå•+¥qíè6]¥>x[zÊ+WÙ>·Ó»¡X%•«.¦Xm/Ob~ ½‚ÐqH”Bœç}Š`^˜å«"](PŒK»:½yOG±z 8Ì}n×w‹raGx¿e ÌÅ Å \™+8::ºcÇŽééi2rÂèè¨b¹¾ÈcŒEh9Dzmûá‡&# Ï<úè£ÿ6J ¬ó½IEND®B`‚saods9/ds9/doc/user/binning/defaults.png000644 000765 000000 00000213404 11332353404 020551 0ustar00joyewheel000000 000000 ‰PNG  IHDR;ðþ›#{bKGDÿÿÿ ½§“ pHYs  šœtIMEÚ7Š÷.Í IDATxÚì½{ÔžWu¸ßï®O·O²dY²ñlc°Á`Ën)©)ʤaeèdHc¢¤7¦]L#›qW/“6iZÏ’¥N×4MÒ´‚¶4Í ™‘D(P˜°±ƒF¾È²±u³.ŸnïüñHÎw.ûüö>ç½}Ú{yy½z¿ç}žóœË¾ïßît»]"ºë?EFFFFFFCIÿÑG‰h¢Wï¾çý6#FFFFFÃIw½ó§þ£v6ÞýÞwßóþƒ/µ12222Nzúûïô¡‰æó§NÚŒ 3™Ä2222º\èØ‘ç ô¿¾é·íþÌÃÏŸ¼4Ôîùóÿñ—¶Ñ®ÿþ…{Ûkf¦&ÿ³_ÿÞ3/ü¿ú¦+V.ýâ£Oü»ßÿ³óç»Dô÷òí7¾ìÊå³Ó§ÏžÛ÷Ôóÿé~ú¹ÃDtÓµWþ{ÓÚU˾þø3G_:ù#oþÔC}d÷‰èÊUËßûίº~ÝäÄøwž|þ?}ò¡§ž;ì½à+¯»òç~ìMkæ.üܵgêw½ùµ7,Ÿ99æéçÿëßùÌÍ×®[ºdêÉÏÿ_¿þ_–,[ùú[oºvÃÚW¬™Ù÷ÂÙYꊑ‘Q¯%VMÏÞ{þö? /þÝßøUrôõèoÿñ¯}âWþ·kUû¹½¡÷Û”ÄJ¾ÆìŠÕK¯¿k~ÿC'æÏuÇgfÇN??vÕ5ë®E^õ¥ó§NŸ™™šüåû~î;Ž|gÿs=ñìì̪ññq¢ÎäÄø]·^GD¿öÑOüÒÏÿ̺5«n¼úŠƒ'»·\wÕÔäD·ÛýÝ?üì²Uk—Í­ýö³'<xýÚ¹×¼bÃ'Þ²÷wÿðmß}ú¹;^uÃ{ï¾ó¥óßþþ³«–/yëí¯øÂ—ù‹ýG¨ÓY³jÙgþúó/~Ý-7ÜqëMxÏ[?¸óc+V,ßöÞY¶dúë}ïøÑco¿ë5DtüÈÿà™õW_÷~ö«WÌ~öK¾ðâ¡Ç›ï¿gÓýÿêcóç.={ÉôäÏÿ¯?²tÉô#ß~âÔñ—Þ~ç¥d˜×ܸá]o~õ÷ŸyþcŸüìÒÙé×½úÆã/˜_7GDWÌ-¿fú5nX¹|)Ýø²u<ñ¥ËW™Ì222ê½5¦úU'úÛ[îxkJÈñ¿ý'ÿö~ùý?JDž¸ro(˼péü‰Ïwi¾;õòµË¦¦¦&Ï¡¯}æ\÷ßþîç~ú]wÞõÚWÞõZ"¢ƒ/ÙùÛÿãÀŽR§óºW^³tfêðÑ—¾öÍ}_ùæ÷øÎ[þòݾë^>;CD§æO?1¿níõccã“㇟Z¿–V®XzêıðAþÖï~þ«ßúÿòƒ×\µæ“Ÿùâoþ×Ýü[?ùηÝñ²+W|á‘'–­\óÏ~ëžÜ÷ȲeËÿäáo}øŸ¿bÕ«éÔ ·ßy˲%Ó?8tä¾_ùµ‰©™eK—Þqë+Óíu7_³zÅìOÜù[¿3µdÙµW¯¿óÖW¼æÚ•?~hlb²yèí7]³tÉô ‡nûå3>9ý«üÙ׿êåÍŸ¦''‰èØKÇŸ~îчO|ô“ŸŸ?yâôØ÷¿³ÿÙ›®½êÃüDÔÄä–ÌLŸ™?AËW)v’‘‘‘‘DøŒÑXGñ«Ng,þÛÔÝÚïÓ¿ý'¿±û—ÿö–âjãÛ"ÏJ,¦ êèÇϾøÝ3K®\1uâôéÓóóótúÇ~põòµ/C^ö«øô/üúú•Ó·ÞtíÿüW~xú+Þu× ¿ñ‰‡&¦–¼ù57Ñç¿òÎØø—¿ýôßyË_zÃí¿ù±O;9OD3ÓSK—.éŒS§³jùR":rìøùsç¨ë?eßþgV®Yêl—ˆ¾óÄSK–Ï›$¢ÉɉÓó'Ç':?ó£o¸ã•?±tÉtû“©ñÎÒ™ "zêÀóÔ_½þºƒG.¹õV¯œ%¢ë¯Y÷{¿öKí—W­™;öåÇW¬¹ªqâ­\>KDO>ó]±áú/žxýÅ+¿¾ï©/ã{w¼êúÛn¾žˆž{ñè¿üðîgü•]ôê«f7\¹êÀs/¼ùÎ[ßrçm‡ëž?žºãVÓfddÔs«f+u7dz—üí?û[ïr}‰ÿço~2úÜ„••§Ž:¶ï 'ÎM¼üÎÍ'¾ðâ_ì£sDtø±ÏN/ÿñéÙåü«NNŒßöòõ_¡s‡Ž¿ô¹GŸ¹bí·~jË[–-9ôÜÓ×ÝôªÛoºšˆÞõö7¼ëíoh®_:;óú›¯þÖ÷ž9}æìÔäÄOl~Ëž?rlzìµ7n¸êŠåDô¥¯?6>ÉS8wîÜÄôt3)gÏ›œž»˜ÒížËkoxÛë^ñÌs/þê¯}ôø‰“ÛÿÑûÇÆÆ:΋G^"¢«¯Z;53C±k¯ZÓÞðÐÑ“D´ÿ™ƒÿú#ÿ­ýòÅÃÇÎ=Ó힟 ¢£ÇOÑÚÕs“Ó[wÅ¥º´3gÏ?øÛŸ>}äà†5+ÿ—-é-wÞú†W®ÿÄç¿;>>ý¥ï<ûè÷—ÍNýÝ{ÞMD_yôñÎø$u’K`ddd4`¯àXÜ+˜ºÛ¯`ì·ÿôo¾³µ®šÐ×?û[ïú…÷Gás^ÁógÏÿîç©ÓÙðº»'§g'×Ξ»ùm'¿û§ÓÓS“““/íûÂôk6óï?59ñ¿ÿµ·?õƧž;ÜíÒM׬!¢¯}s_÷ü¹»^ù²‰ñ±'Oýù7.d¨_õº«¯ZóŽ·ÜñàþÔï|êË?ý®7n}Ï;ßöƃçhìÆkÖÑîKßÜ·ÿŠ 7ÄC>1'apnyîܹ©É©·o¾kl옿úØþcÇO­]½rûý?wò,½ê†uíO¾òØ“/yéÚ ë~ôGÞôô /­Z±ôö›¯ýÍ}ú¥'R÷ ùÞ³ÇOÎ_}Õšüõ=Ý™~ýÍ×´?¿í~üm¯ýæwŸ:yêô5ë×Ñ‘£/=tðŸß»õð±ÇOÎo|ÕµK—Lîá¿øÖ¾ýWl¸aLµ“ŒŒŒŒ$²gAÄ/ý»SWþâoýñÂ_Åkª+òÛö¹3ðë›oþéß|gøÜ”ÄŠ<øäS_]³|깯_q±ºhõËn~þÄ‹×.?399ÙívŸüþ×VÞp3A§Ïœÿƒ?{ôÆõ+®]¿nzjò…ÃGÿäÏþü·?ñé™W¼ùµ7Ñ'þä ¿ù_?Ù€G½ææëþÅ·¾áö[&þã|êK?ùäS?öö;o¼nÃøøØþgžÛý™/þÞ~nɲ•“ÓK(•¥Ð‰~¤?ûÚw_yͪ»n}ùßßúî?øÜ×NÍŸ™™ž$¢“ó§w|tïÏþOw½âÚõ_zä;{þô«ï|ëëÏ?OD§NŸý•]ôo}åÆ×ÜôÃ33‡Žÿæ¾'üñÎäŠñ‰ÉfºNΟÝñ_öþÌ»îºû­w>ºïÉ?ýêco»ã–扇ëÐæºuvfêØ‰SŸüì—þÛÿSËV=wèè]·¼lé’™ûè'>ýáýáÌìŠÉé%cãó õXdˆz~ñÓ·þÐ_vM³ð·m”|ûÛV\5OùÅ¿ç—~nsü¹Þ›þXß{ê9ï'>~ÝÌ‘¯í?¶á¶¿ä>¬{þüÙ§ºó–kÏ;wäèÑÇŽ,]zåõÌ›Ÿ?îà÷;wæÌÙ³óÝóݱññ%Ëæ–­^;59spÿc§OXºòŠå«¯lZ!ÏŸ<~øà“ê¬{ù«;D/ùÁüñ£gæç»Ô˜˜Z²bÕÒ«Ç'¦¦¦g¾ÿ‡ÏŸ?7·vÃò+Ö?ù­/ÑڗݼtÅÜSßþÚÙ3ósW^³âŠ«^xú»Ç¾8»bõê«®=wöÌ ž8}êÄØØøìŠUÇ¿Ðíž_sÍ+®¸âÊgžúÞÉ£/ž={æÁüwo¿å†_ûÏŸØý§±úªk'&§?÷ÔÉãÇΜ:qþüùññ‰‰é™•k6,Yº¼ñ 6.Ç|ÿä±CgÏž™ž™ít:§N¼Ô<ñìéS?8ðĹ3§»çÏOÏ.[±fÃÔô’çŸÞ7ò¥î¹óãã3Kç–¯Z;>955½ÄN“‘‘QOéÈž½õÖ°æ|þS©‹o{Ó;.H¯G¿¹rÍU½øm{YôËæ·í_=÷Ô¥þXž<}ì…ëf{ÿ‹ë^ýv[`—uÆÇϯ½íÄé÷ÜxñcǺßÛÿÝãG¦Óe¼ccsW^sþüÙu:ñÆö™˜œž˜šY±fýØØøØøÄÄäôäô MMÏŽOÍÌugfWŒOLÎÏ®ètÆÆÆÇ«ijjf|jšˆV^yÍÔÌ’NgŒ:¹+¯™Yº¢y‹•W^=1>Ù'¢å«¯Z²bÕÄä4QgfvùÜš«©C°™YºbbrЍóÓïÚØ¡;ŸxòÙ¯»êö[®éÄÉ?ù³¯LLÎu:cã+×^=µäH·CcñN§Ó¥îxsóK6ïøÜÚ«§f—MŒOvÆÆºÝîòsgÇ'&‰hjɲUk¯›è\üøÄäÄÔÔÊ+ÖŸ?n||¢¹ÉäÔÔÄ”‰+##£>˜X¾Õòš7oF~Íž¨þ[ïK¾‚xÁ^úÁþÇNš¹vãÄätxß™¥+yáÄS?xäÔ©SgΜ>væÄÌò;ÓC¦Ùåqy¶bõ:ï›É陹µÚNÍÌNhó ­ºòêöóê«.‡­¼â’Lž˜œr²lÕšð>Ïüàè¼îú7¾úº“ó§~äñ_ÿÏ¿øØñ5׬ïŒu:ñ‰Éeskø%™œžY9=ýÓòà‰hi¬é‹‘‘‘ÑðxCA7°ßzß5^Áïxñ²]Äçö?vüèáóçÎŽML/Y±úÊÉé%3ËæÆ,°ddd´ˆèô©'_:â9èxzôÑo.Y¶rjfvP¿m¿yáÀ—¼‚—sØÅëg–®›˜hòRÆÆ'f–,³Ì=##£EEM»©Gý&þ“%ËV6¿Ôo=ÊW/zZ²|nÉò9ÛÍFFF‹_hÍ.›ž]6Z¿H¬ÆÆ:qô­¨‘‘‘‘ÑðÐìŠUEtâè¡|è}6;FFFFFÃCïûÐGZ¡eÑ####£!¥;wºÿœ¯8|ø°M“‘‘‘‘Ñ`i×®]Þ7fc™Ä222222‰eddddddËÈÈÈÈÈ$–‘‘‘‘‘‘I,######“XFFFFF&±ŒŒŒŒŒŒOÒ¬Zµ*úý¡C‡š?:T œ0|–wóö‰î£K†þÖCÅW+÷ÁRjxu÷@t³ |¼QIÇSý˜àµG®¸i{=Bï ߈ÎgáÒ×zYÝ{1·ÑIëéö›Ðý¬Ÿ\yV¯Ç3(.9TRŠÞªU«V­ZuèСºŽ*(à ®ÂžQ |H%“3$>:Ÿu—¾ÝÌ}[¬!g&½•XYÉÙSÓ$e µ»J½š;´¿el¸”aQËÚcÞ:|Y÷‰î÷Þç~.MtêêªÆÙ÷Bf£×V?ÛUÖ›aõ£«/89©ÝÒçfç³G"ÄeYÑ·cÖ‘1q6ÕÓD†­XDZž.y8;ÕybJèõnîÅ«IU³èH\[ÇûÜÿñ{²¿®'y/~6J¸Lô‰¢ÙîÏ1‘>º[‚Ÿœèù–ÌÃx¦‘ZúBnοn“ pãáЭãDáŒ÷ÁÒLÉêÔ^ˆ$tTQ£ó<<Ö}VS«2Ô>Ä6 …VŸÕ¦!wIõwéA®µ©Ráê’¥¯>ùY!šrZz*Zj*žÐþl³Ʊj‰“>û¨·­G¯¦xwÅ1ëÃÒ I8g û„ñìT‰ÖUñ¸¥ça{Ó^/}­c¨˜7^²V—»©Ì”^¬øÄ0oý!±†óÕR^éE¶4Ãf`¹ãÉÈ-V1:†ÊJކ«+.½hK·ÂC±…Úw‰J&F²Ö’»}æ3c}8á=Ò­z§½‚gÌ}5/R2l|¶ÏK³XÅUï&¶d-ÂÐÝ0/k8¼á´2Ge>ùIN¹ˆúy²R¨›Õ‰-yÈÍ«H¦Vxi`¼r7´¯Vk$Þ¨µ4ý±w£¯Ð·u §š¿Fǽsó>oc~r¢y° ÙcýrÌà äg¯s‹·±ŒŒŒŒŒŒFÆÆ2ªH–Ãbd4Ìd.%“XF èçþçmŒŒ†“¬{­I,#;FFÃN»ví2mrÉâXFFFFFfcšíe“0$2æ%VÓ•9¤C‡Y»ëê„Li»"í´ÿ —Œÿ2úDoÅÛîæáÝÜ?•Œ¡î¤!OAÞQ4ùÌ¡h¿‰^ÏÌ-sôøW°SYBæ-ŠÆSP¯à¡€lB{AÙ¹mÙ™Ë]n%ú2ÅÝçÕ—Â1ôNä3Oq¯Ñmf÷'Òû¤®Ê3÷2÷ŸÞ+€â֤ޖîí†s³Ÿzg^¤.¨Ëþëù¬ª¯¸Úæˆ ûêOQ̿ԫåp×ÈfL™ÖJ¹v”3FFx}c*µß{,Ëî¥"Mz}h`¹C­.,+H,ÄSo'§¢ÈZ~Tbf‰‰úÅ«ˆ+|þøTÊzK]_2·Ñ|£^˜SŒ[Ìãã¼q%9î2†‰»HIÇ–öЦ=´ ‘ ©› r+uMt6ÊmÁjK$ÕÌAQËTê??ꀔ ’”$àïS7nT2ÿ=U5Ü›Ûq‘æšb:ÏX Òþu3íÝL{£Æ\ÖÊñ†Ç ±BI e Ä2K«â¤á1§þ/J?Y¤häÌ•Òûο:âhâgHȳ1À|zÆA"òL*Œ§ö¯ŒS!kI¯:+ŒÛŽOÍOû™Ÿ4dJ£×à_VYJéã(ós÷þáõ®IT’溇-ŽåÏ]ï„–TäˆXs g|Œž¬EÞ.*³>LZ%o~Òx6²ú£|<;¥|ŒDúev ÈsÁljvHV¦JmšÔ€¥ï…¿>Ù5-¨Q?)LÚκÚÀ4q‘È‘ÊWoح݆ß$|ñÆE©3.ûmc-&95>@«ˆ¹¬ÏÕZ©!á®Ëm´½5žR‰$ý$“XFƒ¤U1‰aÛÀ1¥Ì &K°ŠX’–d)dFªð‹É ŒOÔ÷,Á† ×h4r®­!°¹ k™ÕuôEÿäF†ðÇ1®È=´i3íÁaÐ…hk”ÈРŒ.Ù&‚÷NªE‘}bÊ„*Ù^¼¾I¬ž“AA\µ-Æ%„k*õÈ.Á3A¢c¿ôÒߣ¹žWÅ3‰Õ[b@ˆŒŒKÑL!Sn®÷}´|ÊåÝ £M%^°н¨ø#sàeÍÛÙ3Ë ,###%E;0…üw3í y:bK!Œ>uŸ¬`SpÿP ¶øÝø„~&¾UŬ4‰5àSaddÔÚµk—H› )•0q¼°·5qB)˜2­˜õzÀÁ½éU@ IDAT¹OXÛëþ¿3Ýt‚,öšæ;è¾&(ÅÌ rˆ¿rFb…H£ ö¨Á’-é:W]ÎMIðø5Ò†#äÈåB.¬Ì½d^Ñ÷ÐjFëzí6ÓÞöV¡‘”­wöÝ›‡òž±8ñšb³±. qE•z6™ 1tPªI ¬¶HË•Û:Žhì\°kEµâÓõþµŽ;Wö´–ÿâQKÔgjàJzÞ¢ÊNTFb1­FµÝkwä}6MßÈÈh„(kðé<_Í ÏÖ‰ÊÅT5nÛÚ£½ ±¢¢‰|ŒÑÃ7² ML×HrïÙ½ž¼J¬(dF5¯`EµÝ4}##£E`ZÕ½>¼8Z½äɰTZÄfÚ۳7ôÄCô枌ÜFÛ»ÿêÒ稇ÓÒî=ï}b{8ìPôâBK)± ?ÐÈÈÈ¨Š­F9g`wú’°q &Ñ»âd=¤´ßÒuW¸·ÚA÷Ýû÷/%µGa¥²uÖ)“Ôû2Û íAþSçß3— ‘‘Ñâ9:sŠ÷¶æKg>b…æÎºïÁî}îŸÂ¨Ök%“ V•+HáTTpz×·Ò¨½ œOÞ)°±·x»Ù+R+?À …qDE‹T6€Âù2ûÜì¯x*µd8n؇8–è5ùÉ:ì€ ¥š˜Ü…VøÏTÿ_·úбít¨Ó¡{;Û] ÀTÎÂýô@#çìÞ-dnÄdÊŸÖÆÒZ¥kÌ¥œ{—ž`éz¶]hü-´Ø|H]‰>U“X©Ý¿ÈbàákÊõTWôŽÐ°‘‡0Žös©;ù&{zGmP'*œZX?¤’‰GÊ?·N¼n—®êl Ø;8òž‡©á…¾¼‰æ²&L&hxhDD¢î…ÿ\¹èË×ÎÓjG÷>êÈæÙÞ­™+6Ïù°h„VÛ9…1Gú &Nu„i—¦î œäÑ)O]vò³†Qju²ó=°&ä@ £/žyá¥Ï5ÖŒç‹ö?lüv/´·¥Zø×Иú¯ùa‡.IšK"§{_óasw¯÷}ó_ûyÁwß…?Å l·u¶S—µ¸¢Á 1=«¼Ü‡¶ÛS˜®íÙ@­W°q †ißÛh{{AèKtÿküŠîç{;Û/8;DÚÖÙN?gÿé~¹§³éÒ——Fpñ‚(Ämc]u¹© ½‹¡¥ØþX¡Ân'd8ù~ji4/“{P;$5€êç¢úö0U~¯50cñ„‰Ýt1LÕ„(V&Ü@4…¡¯$¹m̈¨ðˆb±»ò£ýì–”…ö\v¢¼9ñ®9[šOcöKD u¡Õ£ŒFuc`Ö…€È>$ä›®QÿŸ•=&º%ÃÏWöY&ºJƒÌ—!ºÛqÑ¥ÆÅçbæ¶N^›+7¶l7žò}ÞX +”7ÓÞmñ wÑŶ÷” ÜÖqêÀ: nvùj%¢ÛýRT¡e(MFFFFz vÇŠ&hd!6ÜìDÏzkÖ]kɨ))>(åÏ ›@Fïé¹CƒÌ•åLÕšI,#### …ž7/Ôôàt[/ô¶ÿôî}(ˆJ®Qåy]d WÎ…V` ¿Ã+R¦…¡¯ÊÝ»2,1ξo#¦Èºq–‡÷M Á×üµ3OÄÂãFÚ)VÞK‰;æÊÐBrÅÀýôÀŽ@rD–ªám”xæ×nÚ²¶ìHôÍŠB#F³ ·ÐîÖBˆ&±@ÖèÖÈh‘ 0¾äÈmrï|™lxŸêýè‚ØRˆ–ÙÍçè~ Zmy6 o˜’jî£Ùv/Óµ2j~BÑ¿x3í=dk°d]nmŒFŽ\>?™N›⣷ü=4e¢Ðæa¶°vT<6|(#£¸áÑöÊd÷yÃ3é™±eMbõ›vîÜi“ÀÐÖ­[ml†Ù–jPm[˜^ávJtóÎÃââ”=-)æÉ O€¥z£¸ßl¡Ý¤¶»‰ø»÷ÚB»7ÓÞ-´{ mÚM[vmsÚ"{wn'Ç»³Ûˆë­[O½±¹¦^0O´{3íýú9“X¦¿) ¼c½-Ð/ÐÀåV´»cËܱáùëx¿_ÎÊ›¦gU´V{óFºxR-H—ßÖH5ÿos7.~yI"º¢z íÞ±Àïwée£éòm¬ÎWÑ×Ü­ˆI,;óƒ¡]»v ‰´°òf#¬±~¹µ7Ä#ç­ŸTp4­<•æZ`ÑHR˜ÑŽö"¦Æ¥Ÿ»iøÑny†ÒÄÒ%Ën7222JR“ÉÊØv™xc©x8IáO¼Ï®Doн>…ÞÖï²Ðô>»r—.V‰MЉ.víâCPL.»‡/Å´06‰eddd„’ë÷ ­"¤?V´N+Ê£ùš$·…U(–(xèšGŒUÇtð sÍ·Ñöè~o`”+Ìò$_´¥2©íÄZÕ@JUÜaxàY£‡Òµ=úOt.‹àžºÿå°Qÿ¨p³³ºÈh$¨e»Qär"jî0’Ç@ñ2TnŽ_ÔgèeIDáþšË¼ÚdÏ…ˆ^2…+b]iÔ¾ËZçSo^i+²±ª÷i†&ë#GŒ¬ò–‰é«”úÞ[_üK£Â ÌΪ-ÐÀå#i<#L„’‡¸ÔR&Q´&÷bÒQ-74/ßÇÄõò­Tžd›7èÒt{+° ñXùYM5Ç ÿ”ºxäTŰ+õiÔŒçE~UýòQú¼@¸úeŠÚèz£%DQ31¤Bø¾ÐÙEÝMÉ Ïí&8xÆ_#xöЦGè¶´.;àm´½IùódOc$yK× åk4»$[š]Ab¹íE¤¨BNžh=Œ<%,»¼+m/ ¿™åózb,e1!¢” ÑõŒ¥ì¹¬ %«‹ ±‡6µvÒnÚ²™ö>@÷{×7פ7RmæÙ{ŽÄÔ+T³±\s'Õø *rR’‰×@GBígƒ‘…t™XƒR)<‹éi®¼Ñ]ŒƒŽIÉó,$÷‡!¶z0)—N‰ˆ‘{}wú’Ãð~z I líªv<hëQôrS‚ÙsëEÛE¶!1ÞŠE–@ÇRœ|÷(â§q$ÂûÞ‡aWÕ>êBk€V‹úÈ µ¾,#{ýùl7¹3fÓ°ÃË÷|‰M½ûÏ‹X½î°ž uÛhû#t[s7×M×Ê/Ÿ"[ØNÅËÈðFuN†öho½‚ŒbK鮀G ²aW}Ó‹Ã(`?ndt™‹+/[/ä¿7ϳ$Bó(Lþæ3RŽÁðéî]Á ‰èþ‡©ùáƒÓÓø]›/kn¶Å[u+º¢ÆÙÚÍ·ÅêyæÎ.IâßrŠzG{7òÐÀå\¤~n ÐÕw¸îËQ?‹žRê4\”²Â룵<÷â^n«*× ôʇÝ2áæÃ;6^Š–uæø¥ c»i¶°QVJRº"Ó ÅyÅÑaž}›¸®E}‰•êž’[Ñ¿º_šs¿?Þ3$Àrz1ÙYµ¹•5ƒ²ý CÓ*4Â(èݶ6¹V`÷g“5¼Íe÷~éÒxк6½Ð+v%«‹=˜M˜Lµ É‹–ei<Ì—Ù ˜CXòˆs¨ì,õáÑÒ‘¤fYÄá\ ÅîíÛƒ*~¹XhÔ]…«ê¥x?Ã{ CÏk®i! i!b¡‹ŒžÂ ìü‡H¯m´ýÁéû:ó ’ú}Ûh{©Þä¬Çʧözï6è ‘yÃÉñ®IɼÙXf ]&âÊ£°¼K ,ñI†}Ó ª6 >lgå~nGÒÚODôìü:ºÐæ‘è"¤z÷=k)½ã_îZ©|w¯ƒe“ñ‘£*µ±âÊ´<##£EIÉ’Ê/ß@’/@êviA[{Fáûþÿ/|¿9=°Î wípn¾ãÒ‡{Û+Ûë;ìÜo:D­Ëpu:;ùºÛ×_O)Ñ6,l_Ù'ËryŒŒ1µixmà‡ÒÉè Øw§þ·­ó`ûyOçÑk¢×è\ýS{Á¶Îƒ{:ïèÒÇ›Û6ÿßÖy°ù¾½¬ýÞý²ùÞû× ÿÅl,/ÝŸìAoö¢0ûgc…´k×.›[ £‘¦h‡F†½‚(y¨yØÑ8ÚSŠœ‰QÄ£&à´…6ÝÛy|Ç#ow{«¶×âÅ6Á{/&»_•u¯§Î{ÛJd/ E‰FÉÞ«m¦½Ûb¹þÞ?]O`Ó1Ò$Ö€ÉÚâÙ:µ@|<m˜…Á$„i n¶E´×pª!rK˜¹èŠÜÝþd9ˆ½NrÇrò,š¿~ê‰Mt±]VØ¥}Û, ›laN3Wnº‡I¬ÁÐÎ;mÚºu«--ÐHÐæ43m rC^ŠÏ`JepìH³~ÆþkÙ ©1¶к¦:8U±Û&RÂAšY›é¾mNòÖ²ŒeNúsVe™Ä2ý}4ðŽõ¶@C¾@#a~mYåZE^¸‹ž4¯27•ƒµW\+§ÉÙF[šdt·Ä*Ú¿ªÁýÛB»wÓ–Æ"eÛ¹¿ÚC›î§uëé Ÿ:‘–îÍÁ|w“XvæC»víia 4ä 4œõæ¹|¹±“˜ŽÃŒñš5^«ûð¶KÍK£÷® ŸåŠŸDÛhKSæÕÝH/¥A~éBýr2¯½¹sk}’ƒ·ÛHP]G±1ÛyFFFF Ó*üçB¿Ù^þâÐ[HcÍëtÚ"!Xm4DÔ¶ šP¶m£í¸ŠBu¤˜ÜËÚ·ÉýíngE±I,####™u²òöóÚäU S¢!Vh± ua§ÇlF¢‹šD^ű'ZÂÈSê³;¤lƒ®P‚ºòR'«P‰epœÈœôy–V-¤ðËè•Ù[)¾´ÒÍ*’»(hÔ­+ãÜÅ¢mdCØ *ZQʆ(`RÖÎóŠ“è7)óŽØ°SÔºJ™_áã˜Ð¹-»ÌÆZ„ä"²ëZ9㿲®ƒ"qÅÌU´i£OØ 'µèGnœ&Õ> A¥¬´(CÏÚ4Ñoš_u¯‡ì<·¥Vj`aBª€:û^Þ=ñßdpT“XíÁh•8‘êçi‘#­zL¡ÏØT…5ä E~aÆpÙ¶Ü9g`øO· 6‹¼ž2q¼¨UÈÐSå\CHò¬ŸÎäÙ‚îÝš/ÛÁ©‚å”èrÛK†¯Ï×®E%håþXÍÑjÙHõódبëƒoë`þŸá·´Â½a«¶hD——°ç¶ª¢ Åbªìwmre›%âí°VØPºÙGXðë]éâäFÅ_bµ;j±M1që¦)nÎ+%–BµôXüâSäûÿj^‡F—-7•"ê° µ43°F…<>š\mvC´ßU”6_„–H±r×ØÈ¶VÂy¹ˆaN„ûy7m¹Ÿh»·wsR“3õø…÷t䣿QôOQ”zÄy؉%U!G½[úh€Ä„Ö0kK&®FWz¹Ü6 »—2ÔZˆ±ä\‰Há)q5î§ByÐŒöªéƒn¼PÕ–·Ò«1t¡›òm†UÏžèþ¤Í§'â¶(·Æê?’À·‡ÝÜGN\ ıi†Ôˆê7|*àPi?F¼¸ŠâÏ6š.P.;¦†ki…n=¦‡ §ä•v=@÷»™{î:óô©/m"¢«6|Ç<±5×¼øSëÜ‹]5γwoå: yó”$ˆÇúyb ÿõMÃM£É¼!Y‹Pi3ï”-µžº¹ïQñ²ïÔ5žõ ÷›Toª¶Ø«‘ ŸúÒ&ú ¿jÇé`ÑFÞÑC˜»µ¢Ü<@~6 1³*DZÚÃæfg„Þdz˛=üËÝÊH1«ý\k£Šäú£|<•Jà…¢® I•ë†H­EåþÖ½ÉtÛФ3Ožå¢ü¹^GW¤yY!!´GTª¹Y¡ôrm¬:H¸Ñ`€èsôðŒô‰J±þ@ýeá­Fn¥†mDgjñ-ÐHÛX”Î;g:H¹xµ·%§ïF´ùˆÓéê> 0swÓ–m´%tWÒE$@„—6=q“£ÙóžL ÇéþvsØ /šî¹WÐüFFF—ƒÕzÃRQ+Äúk@›RÈ|.C8*W~xi~nù0S‰¦]D‘×S˜™ŒAÂÊû!±ÌYaddt™H)rBG·Ñ#©ð]ô¹VKè1  15ìÂ\÷Ê6oÐCDŒ‚9µâgó‘ޣÝ]˜s–´‘¶K,ñœ@###£¨¬Š2ë–A?B·Eù~+$¼¦S»iKT°…àOQÃ+jlµ¦žÕʆ¦B+]Qaã=Ú æ¹b8jAQ“EÉ´Ai%4CÖ«ç´k×.›[ £ÅD©þ¼ ÿº£I}Ñ&Šn©Išp½p®+Ïë[¿0µ7°.ÈªÝ ãj)Ç]´·r8Ò‡‡ùÔö oÞ4“$¥É$VÏÉÚâÙ]>,ü’ÉüN‰À(Ó  ¨0 ŸN *…/µÈÚAD á”ÙéýÕzJßè‹D§k3ím³ELb ’vîÜi“ÀÐÖ­[ml+…Ù}aâ_K®‘äbR„×·}Ýž÷ÛœRªTóâ&ÑÍñÛB»7/Ìîóäh r0Ú:™I ‰Ö;3ò>Ew¿÷Ý÷¼ÿÉ玜8z莹mƒÖu7™þÎÓ`;ÖÛ ù jKt:…Xò¾läJ›SÀiÂtpæÎ¢a„‚ð6zÄ “Ðè¶½wÙ¾ZT°ï’ð¡C‡šUhöÞÜÜÜû>ô‘Ù«žjßþG2ËÎüå.-lLœ—PÔ`jcE k^óF^ÓÊ \’EË¿èR1¯è}nû!µ%_aG>…Ýž® ±ut4222ÒP›,ç%…‡lšé;L DsZ˜D½À5¤¢O 1v[xÜZ·r§XëȨåDN<Å=ا茅з|·I“XFFFF¬«6Ï5/\DóŒ^ŠA3ý¨Ü^+EåÈÍ>ûTQ T—ö+‰bD!u`^rcTV5#o¡oS½õkU@ýÜuŸ¸*F£~lø·`ºB#_çKõmÃôú™ÑŽèÂ]†f–Ëj]Psr`/<{%ÌOÅ„BÛ¨åøŒCNíT4ÍÏ5’Â܊ݱ´½Ðœò„høÿ¨¤tƒj¡LÍjcõ¿ ¸'ðÐBZܲŠr]¡³_𽼋Œ²³=¢ wŠ+¦'-l¢ÁÀ·§À #Æ5×¢™)ÁϢ߸Æ\(¤³ï’‚“w'GÔ×q¬„QzÂ6?î—Rݰ×B%lÝ›òRý¤E #â½Z¸åøïÍø0êW0•hÇô‰÷d@ a6”[ÑXëÖsÛ{—!À}í¨¼7rû¤f ã¡= ù¬WSbEáT;p·ÛÈð膞¸ÂUWþ¥Œ*Xá?Ýæ5î¥:%šñaÔ7‹—g.Ee@X®Ä ·ñUëŠdq…ÞÅö‚îô‹'Õ8•Öá½f*{ÂEÝuE²×ͤ²W0ª«Ž¨‡Í0yG×ð}odÔ+*NRpDÑhPʵ ‰6-ÂEa§D¦#eÝaÜ;á·¦Fk{µy%®H ƒ…a³æƒrk³-¢É÷T1W0”L¡ÓF¡ÆšÇƨ§Ã6˜Q¯…VÖ¬qE…kR´²Ç…9gÌŽ«ÉKâhðˆmæë¥ZxòÆõU6×´¶WûÍæ‹x”M…àLÑwñŠÀÂAVXˆÉ¢Pu’ÐaZùð›¿î®(9Ö7À¨wÄcy D¼L9ºP‡Ëõ/ve!SÛܪ‘gŒõ’ ]Ñ‚6¶—7þ(<#fvÓ–°¯Š¢‰†¤«oŠðe"®.7Ã"û²£•òn’`„ ¬¨‰Ðþ¿ ¥ŒÏê¢tŠ`x[5å]Ó /‰#ÚzÑ‹lEû1º? Û—„‚ܽ›ç÷ãÛg©JSúvÃàÈ©ó®ì§ £qáH8¼Š„¿Ú(¾o;æhòÅ0¿Qvl‹{áFbkáÿýÁÆÜeþ5ueû}ûáPz‡œ/ÊÞ%ür#vOïOø•E+zœ˜oð¿"Û¢î …îë¾H?OWvlø—Cõ.%›m$xâè.Ü"#k™6´dH¸F£J’4ê°I,#£úfŠ9ÄŒêÒÖ­[ Ëß$–‘Q¯„–M‚‘‘I,£jd>q[ ###“X£Aæ·2222‰5ìd>q[ ##£ŠdŒŒŒŒFÓÆš››³I12222‰µsçN›####£¡¡ÕI‰µuëV›####£a ¹¹¹÷}è#I‰Eƒs 61ðapKÏHFqxC5à‘˜«äÐV4ªöh5†p݇mHabÔx]¯i×®]­y7Øô­áÉ(o¨<s5rƒB7ÌÜÜ\;u£’ü9„ë>lCrÇÓ’å ™Ä222222‰eddddddËÈÈÈÈèr#=JS´“/ œ¶Û ¹O?Ç6T}›F¨GtÞ¬ ֢ܖ#·²¶u³Q}Þ&ñú jxÆåd]Îdûp„m¬Vm_µjUÊ´r-°ê‹½y8 ÏØjÜ#yÀØvîPS–_ué’Z¦pZÜ1¸ß{Ÿû°²áĦ†]÷ѡÀßfÒIëÃÎ-Ó Ž'>ž-7r ²»®o£eŽCôó`*ÿÄZS¤‰cµK=µS8›çȽytÿáӋyÐ-“+Æ¢ckø¯Ë‹£óÜ»7jµŠèÍù¿–ÌUûRÈ6MZv>¾L<žÒñôèÈð§€g&ührÒsÞ‹£Š<±|Š[æE?eRtµD¿ˆûîC#·‚=óH8Q=¾®lê¯YÊòaôè]ÛJŸÛ£9@6 IDATq ^ñ8³-ÆD¯Ö(Þ|5jo-âÉfG͹Éš]£‘XĞʀŽŸE»e„ØÝĈþ!á,ë€ßÃÉSNðQgë‹^j½ULPY\K%¸¦Ù-£5™c}`½ãá͇Vµt‡ê}8G2ŠÃªÄ\Ä çæælý˜‡v;ï~ï»ïyÿ“Ï9qôÐs/nݺÕĸ‘‘‘‘ÑhHïûÐGfW¬zþ©}û}ȼ‚FFFFF£A#gõGéðáÃyóôAÙÑYœÚEàz…‰(Ÿ/¤±ê“]àö¼A{?—s€£5­ïÏÓ‡jHC²sÞ3 ™‡áœ:õ*G¿LuÔà_ƒ®£ØEöµ&êžêpèÌ+5×7s1F0¢Ž^?}‡4TÁ@œiÈã¢×4C¶YU¿ŽyÒz=`5Opùyï¼ýœ¦!ìEmí±G‚l™“0r½t'Q-><êS:1¨‰óÄ2 :mÉÎÆâз¸RìÕÖ1üILàÄŽ§q¼†ÆªOr™í¿!QyRŽì¡+Û9øjŽu¥[ån†Ëm+‚/ÛÊÂÆÝ‹íWAb¹£T8(xœÂ°Dÿwá bxÌÓ;$|ç\VÃ@öª·pÑ1§«0;ÔhÚ@B‰È|­?VÍñ­Õš¨8Òo†Áí3@Ù9À¬§ÔÓ‡dHÃ¦Ó |ø`¼ï‡<³&ûFö%ðù”2À¾ ˜™Fž [«ËT'»½Ä41?‘‘‘‘QŸ$V‰…8¢€+FFFFFý§^y{ýC###;GFfc™Ä222222ÒRÜ+¸k×®}ŸÁŽ|nnî²}wÒ¨ÏÌåö"£8òE³mÔÔÙx÷{ß}ÏûŸ|îȉ£‡î˜{qëÖ­&ÆŒŒŒŒ†æææÞ÷¡Ì®XõüSûö?úÐÄPY FFFFFF)ò%ÖÎ;mRŒŒŒŒŒ††V_ú¸ñî÷þòügûÇïùÅïØ±#¼vm¯òLð>µ—ºsÿöOî5hÝ6Ú¾‡6¥î½!ûÏìûò”üµÏ+ˆÌ|õÁ d#µän›>¿Kt3÷b áfw;¿ôÑ ð GF.º9Ñ© æp&£·:@ëø›è8 ?ÛøVç§nmb.HM`·Û½ç?üw¶ü'¶íØx÷{ókPAwZzļÙì3»”¯?¬¿o“°ø4pQªfè…G€áMRuP:€”àôDfJT€.ÔQtògtÌ[© Õ–Rr+üÒ“šÞÍ_Û5ʾ>/®ò«ÊüöTØèŽhÉ+dOHOE…â|Šæ¿sù6”a$²qû3Èìd-•ÔÈ‘·Îš€QÅŸ±Ô\-›1 ˜)JÝ0ü>ÊÁIàíBéb2ŸÖÇS¢.ðüß])éŽ<øÑÞ¡²U¢,”û‹ª0ä`H·ËV÷¯8ÔÞÐ"îØ‘*[jaÙg£Ó3jIìIAϲѽ/o„ñ 4|zöAÌ• MSÑ–u¯dTF‚z?a¼½VÊ ©¾W°â1«nÇ(DŽbœŠ;(îÖS>ÕO¡XËYxŸêê®õtM³ž·>XÞàÓ=.ŸŠèDy®(D$2+u|t„üÓ{gßóö1ï¬SlÎÖÍ!¸sô ÙÐŒ'´ü”ö'R5ŠÁŒEoÉ1®y©‹¯Ä–*T†Rû?êR6ªSûô0@’b¸MqöÂ5ÕSd!ÂåÃU~ a 3žpJ=whŸ•Hðô5ƒlìÂìÛiâXµ\|RÿŒBë)t7™qöZ`T”÷å¼µÄà®¶4<¢ƒÚòÌõ)Ȫ•H #ªµÃÕ9x$LëMy)]‚ØÀO­d¨\ &\î=´I'áÊIà)Èg^dµ›Åj‚l£íÝi:@ëº9Ñ•Ýôø²ñºêâ›çºL™óBªpse³“½i? ûãyYÈEOéu’*²d½æÔHÀ ÉÁñ¬[Ä•UèÀów+<*Mð¥‡rÕªz•À#x Jì9nj6S÷zêþu?0Ôþ·º•ñ˜)k]._=C²Vཊ)ŽQß_—þ ¸¨1d A×€Hý$”êX)ÿvîŠð^SF©U.ÝÚE¤"…ßrÑí§‘XýL€ˆThwFwšº×S÷P÷ú‘±rFbœ}6øù©n㊬=Ð|‰Úm"»ôë<<¼s,;!Hb–‹eŒuâºU²Æt–S3…YÙùqßÑ{ÙÔm­O€Dk™)!¸Üëd^à›¾bÝ_ßxåkúª#^Áª‹AIšZãT$k%н°GK"[= bG#C K"Il,ú[¼tW Ù ž¾ž¹›Çm½‚!Födå½Höî´–—–¦œu¯KmW>´£_ö£«d–«‡pSW©~ªè­%ˆön0¸2«V˜úc"#æç!`OÝ· ™K6W—FµæY¤‘à+xБ7˜öMùIAy¹2ÊLoéJ9|o½‚—¡¬nmÖо×Ådù —WŸ€EN f¡ˆl+Ø1_KË ÕZˆ4Ôæ¿EÓót›SÁ%A$&“BÄý¥Åy¼ZÅŒÁ$n0?°2AêÄoUAb P€)XaÝôb…³bøa^û,Þl·Gå·ˆ_·b‡ÑÙEÕ¾HÊYè¥ÉZr PÁðí‹Â˜\.‡•Švй§ôLNPv—â‚,,rñEQ$4ªíWÞöK‰„«†°\Üì~Ñ¿KIa/Î\ªÌªZ½P×HUŒäéàZ@ONØÐÔ-D ³ˆóªnß‚O"bbI ‰Û~™füK¹¿ÊúE¢ª 4 •K*«¹èxÓ@àPGXv úŠâ­K`7qõœñ‰•’©/³ØE Ò²’çË€è±Uœœ`?eý Ëf–gù¬n·x[‚I® ¥WO ƒ‘¹šIå/.õ öº4jØØhß¼ñH• ZQôn¢¯¤Ìˆˆº©. ’]b)º.^í÷(µú©ÓóPaø!Ò4u=²ESi5¡Æ£·±\‘F3üQ™þç€ô§Ÿz4¿ò•rgQb¡ÔJæ±_ —ÉS*A Õˆ^Yîd‹&:‡ÀqQל¨¸tT"ë‚wQHÙ¬Å#Ò RÊŽ/¥8¢ôé’îKUBH¥VrEÒ«0„>l¾µ!®Y›]Úf{ ¶xõªúÔEqÙ´‹Ð›¯h@œýg‰©ü¡uBЦlDê•KÒ.HÞÕ‰_©z„tÿ’Ôópìy°z¡Jc¶ðWP]7 –ÄH˜e½pTLg*¹LšÒR÷XÖ:-L³öÉuÞ[R¥ãIÔµnTDN0¨¯|Ÿ3…äˆúúpq.zë>$Ç㉩`WûÂç2³'êL]¢8–J¬>à-•wô¨õó*ñž ­’;÷ºIU¡€A|x{‹”XØxIa?eDêf¸¼#Kº3EÊP*jØÈ`]¿dÏ0·½ÀGàžÀÐY*•”¢Ñò.D¾n¿›.ª_­€yAXÍvOSŸÍØ»‰UÓý¯W«‹†¥K‰»ÍâÚ˜"ä)2&¥ŠmÓX†ýé:â!:ÞæCJÖìžäY jG+¢ã–÷é¬v·K6ù7<øª‰cõBؘ˜¸R aׇUœ:ÜÃÃÿ oµ 2ªøWøÏhŠ#˜ðÖŠD0yÙˆˆ"–™¬*ÀC†K]8U:®1ÅÈ¢°–ôHêŽmS¢ ƒ&;ÉKZ@K¦ªo(MRßHu×SîÙ«Q—ÉY-[”SÃ4ª«èà.¾¿(m]”ð&òk• É!#)/R®¸¬j+_j‚—o uf™4í¾ÊqV<:¼^gê…ËÊ×ö)³Û¥>„º Ž}öGŠ‘ÔA;T%e…gUškŠRÙºAò¨j¸+¥É]YHª’ƒ V¤…Ψÿáù` Œ£Ï1ˆ¨ù¨hÈ™H}HˆëN÷PG§Â â^0M(ý ­Áv°D\ wsu’ö<™D)­P¤ 8„<áà|½ª®êEç™Oá†H‹gy8ƒºF¶TuðÊ·KšÍó>^Ä D³'%«µà…`í©ªÓÀ~]{hS_ãXUØîð÷zxUœ„àa«îðÁ½)'¤UÀ©œ ]ÑÂ]8¨®È¦‘¾c*«¢–ÕÝ$)-!*¹³Àð¡Èt›BñžeRó‹83ÃÔ›°”LºÆ"÷®²o{Çê:ÀpÊ•á¼UßÄaÅW«Þk7³Þ9Q‡½’‘#xµØ„´|ŠrÉÙœˆZÇä_H¡Ó¼ yMdl ´¨aG³ið.Æ”;¢¯xÛ) ´Ñ뤪pW»ÓK¬ŠAûrµÊÝHˆÌ*x*ÇÛU=¨í˜T[9^AúšL#†¬/QôÖŠn¹ŒM‘D®å¥`ÔOXbsYüË)dÙ&–YEfËRˆ-:ù•WqŒï¢þXˆ¦.ah ŽÅíi¬âÙ 0ž'›.!Íz¶E¦Xúž"ðçQ”©4∢öÜLÇá’œÉìö5Ž ¿w—;”ßÍ_^[¯),O'‘\¥z~fóeÂsWÚ«„¯•+°C.*Ê_-íTtµˆÖô€ª%|.²“ðÖy8ë©ÕG  ˜»¡HÓJ%Ñ™¹bš=ŠŠ[ÁtiRþ6ÚîÉþêµ½¡‘‡Š@#E\(t U¼.7µña˲ÛûS.Š›ó}ë¯X]`—'¿ájºi“â&%xÌ5¸Èñp}x—£#ƒæ—(­1«×W faauésüÚyó êÙHª8“¨`¹Ä‚ÉŠüòU _Ì#,f†O/SqÝQ *­ëÁTE±Âï\] õ(®Øg_ªËxγB¨×ÕÇåºs9:ŸÔU˜µŸø†ÇED]\¥oÍ0z*FH‰ry¼w ÒðTÂðã€çÚe¡4/±YþÞ0 ¿ÞÙˆaQnÌ)þÒ/ùè}¶¹¸N`è*¢¾Ãðie¡®:UÄ#x1 ëéü„€²Júvê‚qµ|¶öÊT> _O‰ú*’ƒá[4 A=°”Ã9£Zý±FZ> ¡Œ)ÌéRë\8‹¬R’)uvá݉ð”ÂZîu³=ùy.äD”nPt1›‡¯×ŽÆ]ÔXþH˜òµÏY¶Ë«_äDzGWŠ©{K¥‰wI˜c• |*±Û 9Q ‹ÅA…ÏëÕñÊŠúi*+]ñšÙ -$˜”Q 2/}¥óŒ4hQb‘ [y†UñJ=yÅ“IžüÝŸx‡¨kvsA¶ÝuÆ2BHz< 3e¨6¾?Vaÿªºªëðg*Šl¦^w¢V€ÊZXu›ª»ÄcËêùä+N@~WE¬GVW‰ï4*3WmaÂ'¸ßt9Óå‡Kš’õé‰äÏ0zWÎU´ïÁÚ,<•¼‚#í¬"­««=ò•žúI­¬Q™*âžMù ðr¢p о´êV÷"¦6ˆg»èP ¥œ1…D'å§Q¾,Eêâe ¯‡eu¬h‹™ÔTì÷¡–÷Ù”%)cá/H¬žöŸaá˜qTˆ¾¹4 Óg¥èaŠ‘è”ƳÏ Ï*ÕøÔ( $LZÃÍPi©Ž×®³Ë«8!õBQ/¹Gì<Æv•3¾„ìägÁ2¢ù¢ÙÃX7Å1݈ÒfcU3JJÌõ`tÞd°J¿<}´º²'³¤3aVS®e KW¹°é{”"…kUÊ„^S+@ŠY‡Ÿõ1,ñ—3s›Š“eÁ¥Ù@j €òu_œ«ŠM ÿš½ÕÃË[­è ÚŒÅ èèOÁéòÙäà"éa). žäh PD•—“–à N?›*›¼ s"!Ò¯SaJ!ž¥ù„µŽ3~[ÑÙáÎe*¸æ²³±Ô&Há¦Ñœ¦ø…b„ŠÒH‘—@'¢VRæ J\À„Å^"[SªY«{De!|*Zóá«¥@‰ó]tt±CEl•°¼>ð´‚•‚Èöf´WHùöÕRPÑ4•ßee¸þ¤ìÕŸŽ´TÍZ'‡šÊÆKD …m¤p|áü4%¥IÌånUÄ©%‚€b,rܲ‰öå#L³Q£“¯;†¸EžX6QBd=(Zš!åÌ"E-ì-úmvHÝq©ôwÆÉ“UžÓ>êÃ/É3r7êeac!™3}n)©ˆè”ë R_µ]¤'fºYRÈôÙvPLÙ¿Bf»Z$ßeƒá©´‘Zý}ð&©ìD6mèQf9‡j8£+„`½k{Æ_ì•ú–è©‚ð€QÏž©-µÈBø•ÈŠ 'ÁÛ9¨ÄªÕذÿ®?†7èoQ¸›¡cÓRZö/j³} œ“^Î@ÓÕ´X!åéd䶨û1õŠŸx#F´Üjßû¤à}å YÖß}>Ã-”e&É€'I IõyI€£¼´fÙí嬤$ïHª—©agqÿ^¡·7­¤Æh ¬d›2:²õÂRZdg€y\#%@eÙ̺vu+áÀ j Žø©£„^0™«å+\gÍš>$OëÍê©)œb¿)V9oü)%Ö¢¡!ì³¥óá(6–BG–âpg3zE-_E ‡ÔË—*X;R¥€‰àTæèý™ 3 ƒ³Ý‹z]ÝßÞžwQÝ3Y2E?ß*éˆ;].rMsue˜” ¨µÿ¾J¬Zùx·uжÅ=$º`XÔ™[N÷e µ-&\„gp ùÍH5>ˆ§±Ã'|ÆA•N¸GTa”GY»"Ça[Ú¤J—Ó0,Ñ‹‡ÓÈ{Þ˜z#…s\aݪ»"VcÅmœTyC’N`ݦ38”Qyˆ4|¨4 ×)+Æ;²qÊÂQCÑJÕK §’X¢¬˜òÞµ%ÏI-lÀƒZö37 šW~g†›šÅŠl´è›ò‰”U„7âKÌžiJžmA±îÆuÇl.’ ™÷ÊJ¹¡Â{‘E~"ÚJ­Á3Î,_çINå gcœ:¿B¶Õ$3 ~Kä%V-ï|/ƒ%®„}¨} +%~²YìÙ£˜Àn²Æupõd*¦"Õ .A”¥†H¯Ö„ÜÔ‡˜¸þâYÕÉ=AD’”{óOE$…c?ºâê_–P±M„” ¹ÙƒTP/¡®­V44¨âsF¼ÞK‰m¬ŠâgàR­¢ÝÃûÍBý7ë"càétÖm¶vä#`ÒmˆÍ͈¼‘Ù% …9#Å:)9ùLæX6}Ÿ°…¼¬¢2Z/@ítª†´…Ò¡;Æq:¢Ü ¤*®$zD’|zDU4>ºÜ2¢\ÁŠ-Û{êú—Z R_ïXW§¦‚ÒúEèJYsÿ†Ê`¤ADùlâ¢NçÀ¨%å±Ù2a3­åà}³åRÂD›Âö»…'E×É4¾8 N`~ 3KR@N…Èqpî¤Ü£‹â –c(.È–ÈH7q4±²n» )w£2P‘†¢0yuߢ˜”¼57 ä¹k±º ÜW|%“ºóµZywëXEíµð¹¡èŠNo¸§X ‰I‘+…Vñ¢ÞÄ SPúJ©ŒÄ*ï ¯¢Ê|þþýGÉî<©º¤°öøM új²÷äS3Êå®Ô‡¨8Ѩ˜´ËI-·X¶1 tujuBBnÈt)WóÁùa¾¤#Ê8/ÉjÁ9¸´¨–ÇJöz`âE¾„%õ*òÏ1ÌSé,ì¬Sh´)ÊÈ˵rdºÁœQ¤'U2(६T½EmÂñUýžÝ1%ièxvFÊVÁÎDºg!Oñ¯ì0@GŸÂYn`ĆPÀ†Vz\âc—&ªàƒÄßo½–ª‚pŸžê]’uÿ€{˜Ïfñ»–êT# ˆ6µ¼v%ý’˜&Î~AN‰Ä¢ ¾ÚŒå¾Ä^d[1Ži£¤âB1\ 婱øóÐ.ÒÝXýèðÿ ‹Tï%0$®x„(b”:¢¦0xžÈöâ²€ù«j‹D$/Á}´!£y§ Ÿ¥FÒeÒm3ï·•3/j¹h«ä>H]U \áå–+MÄCwgkòu=u²­umw¤øŸT©`a¶KY :0nHU Ùf Yé +cÌÊ IDAT›ê6€­?ºáñ€:ÕËCÏ¢eVÄ ‰~_"¥R®ƒÝŽ·C.l`¡³HH…c[~ªu)"'gžÉÑ&º9[Szí‚ò [Œ\ÒÑ1åðÉòk^µdrpÖɼ» OJ®¶Ýy÷oIttÂq‡?^É+C¢¦0j3½VÃlþ’@Ší¢'‘ñ?ES±J%ø ‰*ŠUŠ ˜]¡Š V6D«)A>Q©Á)¼BiH}tRÄÌl0!r;#‘ ’N.¢‹Q‰UÅø2Ž)Ž«áˆ-FÎÖ=H!ÕIÛ¯åA‹%£L9T¤ÑT|Štmx§¨(¤§®ï.9«YÇZ3 BÊòð“ËÃEâþÒlÇ5’'ñ“Ìô¾{Xó{oM®0JðýÀò¸ìÌK;쀞öZÙmD P_®X©›9üÀ¨zÌÒ6Hj¹Å³u2E‰SŠ;Z‘$À^²[Ï äÑ£aÒVP„J˜ÇîñöÇ =ªè°Š·1ŒÚè@Öâï©%šr‰v³X½ÐÃ@ÙwIv/$®B°é܉àD9¬……î”ËW¼¾´Í³?²ŠÚô]v¢[µÍë²$¢b3Y!Qàs]ñY‰RÑ¢Þë{+b|:E[¶=BQžˆçD‘¬™ä ¯Èì& $hãfƒÈî-‡ËNo{Aµ8–t_–$dgýÈ"èCï>>Xq°q_®´ÍX¶K¢Œƒ {­"Þ~EÒŽ—µ¥p/(ÿG’¸\ò0ã³^ÖZÉ,jEt±¢E¨8o ÄegðpA 2´ÛBk»\ÒóûYÝü‡ì+;‘fßz‹ÑòÀЂԌ@’Ixw%3ÂÔ.g/Ò+Þ9–(bÊnܤ¾è}øîy=udë¥þF‚!óÁÙß º›—UkâÙS€K¾ZëÎh÷ âÈø{™;d{1ƒ®$–=ˆ’Ý‘Ÿg[¢ðá@0^ ÚŠ³–Zßl -ú}Q«D-RpÆg Æ–mT××#ÅARx”YƒFÔm¡½_º‚L¨ õjL2a’!IŒÒÒ(Œºt-·$(u<ר¢æ&U—Êã/_Jo½”™ZxŒ ÏôØGÓR¢¹ Q6¯ä–LÄgùò~…Ôg<\*k×%‘UWÄcÅ=Exïi¹F¸5A (²ÿ¬}Y )?ö—’F RÉý½†O­-–Eú8@ë>–ÈÒP®ìLêBr£N<²XRfÀœ2iJ‹.©áéH‹†‰ëò¿ ú¨]îê]'2³3S?»‘ Ùæ¶Òn•Ù[!F’7†§Úù„¸¢Dl«â¬T§-IÏ+ñz>ÄbËê¿ M¼V¤6„ÈË]ÐõªÐ'¢Ùê¢\V0 ZÑ™ÞM-á]Ô®FÆÊžGf½Àwgð±j5ôÂMEù8Œ¬OUÚ5B‰yÑSØ|ÒFÄÂDb Oæ9]¡…§ë %bÑ3χúÔ†T UˆLO{9ÍDÙçŒö—-“P'UÁ™”úp8sb±SRªX’ñ”ré—]ç‘G¹L¡ùÑÅ䦶—OÂ7[VÊ"ò¼Ö>"›‘T”+X ÃB¤ ˆúêíâÐ+-âãLµÂL¬å õ@Rh©|±TÉÇßÄ!Î*: qk^*³lÈ4ãk qßñù¸ØVL…ðËV|"òµŠçF”¦uçHå: Ó³³¦|QGÇÂêiL›‰÷ Jn)ü RKœ$ Îwà;0á*|•¶uü©kƒÀ ‰*¢²_JC ( è-ÚZ¢Ne!¥\Ê 3“»Dd¢Žò ÜZ*ð&íŒLX)·îà„©dœ?Ù˜Ò"âc@œŸu“Q£€pz«„÷)üNÒ.õRÍ·¢_«"€Èõ¢Š§kç¥Ø:P+ƒdµò®h© ·¤‹D8Ÿ"àŒì.Rüê‚f:MÝP÷I³F]ÀË÷e–ºîÕ&‚þ'Úäå Öyç^y£JÞñøTV‚-ráŠ4-$˜ªŒc‰˜ˆÇœ¬èz#EÒ¼ ¾il¶Ÿ[Ö핯|&B ø€éÊ*:¼V ŠœB_ ¢ô© b‘PÕÜBç•Êã¨éRÀ{¨Ûî~L€ÃÉ‹giÞ<¿²¢` ©ò²i±¸3‰Ñɰì¬/7\jR§Ÿ!V5Ò….´£éEˆ+›_ (»]áv,‰3!åY?lÜËÆA¥†Ñ"‘ƒÊ”bHMxÆ•-s&¬È{ÃxŸ¥Æ¥buJ`~@_´Âè³§âsÌžÉ&D4;¿»™ºÏP÷ÛWZ EmH-V¶ì)Ûy »vLèEmÏ¥2GpˆméCq€¥(+hxTÖÄä&òZ#"œ:¦öKÇ*ñA#CIIïl­èæÒ‰.W“Õ~ÈTŽÏ’'„µ$©Sí¿ìF£_:‰ŽA¤ÛÖ2§xåL ~Éû?MÝb@&Å›ö¢aÏmë&-ëV,âTË*± Ü5îypç3IgRÔvÞ2‘űx§"˜E£hiŠç á;¦ŠÊ†¸A¤ƒÇ‹3ÚoÚŃYHS‘Âjæí²E²"7r¡fM´CíöØ#u æ®˜<ìÁ˜AL}´¼MÔ]„@Q·WYÅó.Ì|6,ÊšòLÌ•¹ œ!­3Ñõ—ÙX%é¿êÀïUÀ]Xêb—Š[³?õ Eö»(û¿0ï °—ka¢šéƒæÅCì¨Ùk(’£ïº•A¨p„–lÅ)@œ…øÑH«•4›Î]YENr¶°,Œ•P‚mü•l¬#Kµ6M{¼Çn—øP“ÁD•ðê4-\aDÒððvv…£$å¯ÜÅ”Ð#8µnj–ñe½¾|#T”ñödH廂°÷xv¸º½œÈüe\mÙéÊ…ŠRý¦ÈwK /ÌÓ)ìÆÇ;i Ì i$,/Õey–p…ëŸñ!öˆ- ‚YÂx+kÜÌJ¥AãXŠ ššºè¬Fí<~+êàÞymJeBY Ó)ïBÊà+©WA¶Y–3‚v€Nƒ©î¢ 0‡š—"»4 ž-K/·qÁ~C ªÙXHr]º gmO©NW¥²8[öš2 Û¢$ÃPzÚ\á9,¾ï ,å‡6Z`žP ùéÊ˘«¿âÔ1‰Ùvw /åJ‹ð\h¤“aj»ÓTÞBºäšÇ‚5`¨2›c)zýÖ¤Ód·ëô)È4ãw÷1¢,«õ…ÂÄ *}QL”´Ë*ÕF„bìéÐ0JÅ&Á¬6uðFMáÅa =ˆ7ªD›G'þÕ×¨È ñ¯Õå €5€\¶[ÚïazÞOùŸtÎDQæ£Ìná¹¢ºG¨ë뻄~*ÄkW¥¶BFò:”"5?kSG+ù“†aãã šKE¼E–Ÿ¨‡©ÂWSØÈœbUz"×¢âÕ²•v)˜p„IÚ(–G¹ n©Q}™…`ò @÷Z ï*ëûÊ"‹Þ3™ìÉQª‹XUª Å[ $–ºŒ‘½©*“ì&+t[gwj4j-õd–¨Õà©qX:»àÓ:½¤$ØPbR„/ò©¨Õ¾2EèQQ6÷²‚^Ü(U5j†ˆÏº™Y«BêüO -©—[TÎUÒ<]}IBˆŽ3ŸÅëw"DV×R‹fꊺ¤„PI§[Š¡P祤³ Ò DkÐy„tr1ôâÎni§8Þ£Èpgü¹U DÑ’Hs0/Ámᯀ4¬RªzKñ˳ÓËà>à®`ÜñŽ¸Ëø(5¿[—2o‡QÚ[”TY胗·ƒîß,‚0H¸ &UâyW3êC~fÕð ½èØÍ{¥ùÐ=•ÌâÄ¡Šûy‹D‘9 [‚ÞŒlÿˆhj{aí` 0%€J¼®;kI+8^òéÀ$q[;¢Q‹ìx^ùeÀX`ª-µ4¾’ô8S•Õcá`h ÍÖçW äHÝDÒ`IEïß\¼ d¸Ô0y„ï|¢Ö kV*§@ hXõ±(æ_äZT¸ªÊ¶RÓ'+'²X6:c ye];]›ìlS(ª—2žJÄtñÀx3ß ¬÷Gm,…5Z+®#rK*8&©Òðp8T0wt¨2®ƒhƒG…ÿ —¼P Ö,"»Bî¦TBÒ& 3cÂä3š è0á÷-ÏÙݽq€ÖE]|H Ó/ÔED&T-n€$ÄB¾ñ(n:O•È?!J™F„–´¸"ûælf%·ó1T³M»q&…Hެh”Ú(xfŽ¢5»Ú‰¨f Ü嵕øUD1¹Tkƒ(“½ b©“)=Ãwø¥ âD€¾j0¨ ˜>бP£oÆD‘dTuA%ò!y¶SÒ'E‘n: ¤ ߣªv‰ *•â~_3ó"k2J®=LÑ‚,ï ÂJzQ’<—,¡UǪ¸#¤šWȘ²V&nmˆº}ªw‘Ô­—2a³èQK:<Ûa­.ÃR¥HL-¼hòÚ¡:G”‡…çê´¤qD6nŠ¿ ¨¶ÕƒF¼ÖGÕAlgÍ}1JÂ@£G'tù ê–½¾L½e3+^Ä5³ÔÏJ•¡Hï zäS:J ¶*)«(+ÉË¥,·WR¾—ÛQgŒ2sz²¡¢ý·RÉ*Ê‚Æ]È•.SÈþ DèI ¾ÅWŠ“èteJ“Âq”íwP±@¤P6 ‡J1¶TT©ä¶z>±®n¨ÈºÄ«wAÛìλYj5¹±l¦¯„HCœ¥8~ 2÷OÑŒG*‹ù•(‘àì!œ=õâ%¾°-­HAPHJrJA\ºl»,dGñ™ R@+È×m¨3 ].Ùå—bVŠØœWT‘ÅCBò0‘7r¼+†mDY‚x^µZq=`º2]Ÿ8j3 ÿ3~댸%ª0¶×} ²LáfÖùix‹ ©«ÕvÎ+ä’J&àˆ´¹ RÅÈØ0üüè%ÁyÒÙÒ0^¯”úßDaüÔORÓó™yY°\árÄ[(š'ñ½VqUN—,Õè ÄŠ¸Kvft‚@T´øÑù@{lÙÅý’º²EÁüHfû ‚û½)¶W‘÷7}œ(‘k1›ž2¤`Œ¸ ÕcðOAÙ« ¢£Ô#¨Q¼+W©EÐ8Ã,<‘JÇžm€¢ðjpœEzkJ³×"˜£n™QØ)ª\:JAÿt•ž•P nF£¼³I]‰epµ3*öH಺x&áVÊ:B $êRÈKwPr耤6+Žj!ZGÞ°çÙl ¾háÁ©&±(–ÞÚ#碕Hi¤vG”¸¯@ùÄuIÄÉŽÀìFcQÙ”N¾2A]¼¬ó§ë8£&ó¡²Ü§Vlkú?S-.ÿT!ªåÊ®¤Y$…îBBô¥Rï˜ÕH¬ÔM^ÍÂÅ*Œøp“‹$4X°¤8àÙï•ý±Ü¼£Z}¯)ÖØWtJBÃŽ™Rø>ð(ª5hFíöTK³Ë ™—¤ÿá÷ÁóëRa ѯÔޤ؋?qj{HÊ;jõ¾á½¾Èl(ôKƤ# þƒ0‡”Ó¸P¥ëÑÏE…h u<ë“lU+Ɖ] ìÍ,²mkAx1a ‘ ØuQŒ/ÁØÃÙ”\D6‹ ²üïð No nNdÅ*\ˆ¡Æ`Pé4k¼mU Æ›sWyD»pxx-—¨q¶mfa(šéûÌ´*–b8… eÝI.-¬ëp¿—I,dO ª³Àz R€0œÕò…rø/~7Tt³d¥®dMá.µ«§4FŸÈ›jM;~«×šµÂ¡¶{å"½­œ—!{•ïx‹sE2\ v]2~)¦Ø‹´µÕŒ§ä±5m,]ä¬_®ü0‹r1=…q ÒÂÎî¡®$’v¼¬U‹j~Ø)³Àý¯U¥ñ€_ \VÖâdkf‘TìT˜Ê[bÄ .åi’d !Æ´ú°‹ (—ó¢CWÑ9–ðWV‡6@…šñfµ1EÌ‚I„á'’Xy˜5«¥(Ðí Ûg…@2YzI[)&§V´×«Wdy4« ¿âü”âÐPz@šÑ‹t”VNZØÖ¤\g×µ$-Ì‘Ѫ—¨èù¤‚Š b†íd‹ÍEÛU£/wW„ÏåQ.y§z¡o,…÷¨Œc‘6Âé½M¹Æ?H6¼^× @œ*Eã5^…))ø~UðÁTn±èðx=MR ¬4ªÒàF¤K•Ë P‹–LÚoZ§’+U+ªb ®¡FÔSw×I»ñéöO6ä#j%“²ÑÕ?©û¶0:‡tïI]âìvÝÙ®˜´ZœwVDci:ó¢>zEzˆÂíÎd1HÙ3¤ÐБ–³H3Ô½3—Ï;H­dÐý‡La-ÛþLÑñ#Ýa9>ߨ¾|›Iñ«êi XAÖåÈkQ ª–T5‘‚z»„¢4)@öp6P_FÚ4‰²êgÖÐVˆm©£Œ·²u@ã ž¯dŒä4ÆüBòÚ£í~<Ò&¿ÈSÁÝñ.,æ-¹>ZÕNH­^¦¢‹‡¤KÁ#õ¢—4Ì1DÐ` ÏkÆ¿u™j€ð·r±6Ôm’xs<ÚF©ÒÉc·#nú¨žÝèºt#dµp¾¦¨­K|СDi•–"‘$ùq›àa˜Ëô¹ƒnêèÈ£€ÖÙGdÕþ`«ÃŸÒ,gÐÇl'°ØGAÝž Î7_cG‚ý’&±8Ïaºt–ç=F]Å]ä, q¡¢›¹=5"8ï>àíØ"KÇšÕ HØØ9-ŠÈ\öƒÜ ÔMDí©ÓË”MˆêŽE½h5Ê¢ÚiKL¾Á€{¢¶¸R%Ê»‘Âó”øKA,’lr xÔéx6‚²XèÖS´ïÉ*FàYÆ}•½";‘‹+“å F¿|M5ÅLT 5©ŠBžy…¿±d²¥µÙ×5²(G;3,ƒ—v”ÃÆM H«3&x„\ÊÆ‡ÔÀH!Ñe{ó± þ|láždúTyÛ˜/;­NIúkøW7¦€»CÕ^2”qŠ@ŠÁm\âVå1‘DDM¬TÛ!d¯ u¢Úi¤ôèlmÞ‹ &žáSq?!sg¦]“ŸFáÙƒŠºªÈϪPQ)­$Ó•ú)ÌJ)êGÊ쫈ð¦ØZ%ðŒÒ ”H(R® òjÒÖ?`²òc )fc "Äa„qñÇ0º¯ ìvü4"…oÙüœBÇnˆDp[[DWëÅYœÖZî`œéˆêED˜¡Œ‡ö‹”ÆË_÷ä+\pY”2~—÷a¨›!ÐYHR»S1åEªq ·¡Ô¢%yaÇâ€K³ºø*]ÿ‡¬E!º-.ÈSžye渴Ñ5+éW¸É(VqþI‡uËûšEÀ£‡M$áø¤^ÜTRó‚uÁ@§ƒˆˆ´(i— )HÝìvƯuaµÎæwè­åð uĄЄB:ï©"E'ÊÇÔ›9”‹ˆ†„?RÁ © ›âë¤hNmŽðU>"#@-Ûš¸¸¢´+O¸ŠY´*u›ó¬û"†Ì‚/0«›w„v8vQIW]4BçÑM;f¤VÄÉV;0ðr¨, syÍÞ•-»||‘5ÂúÀƒ™…=«X¡\Ö£‹ÚP.}‰ÒùëQ­ÇYÖ µ˜êdШˆÔÉÔò1Ù|¢³,)Ïv¥²u¡¢ØŠj¤¤)ëïMÕðŠª×þÑ$ãu ƒ´›ªJë ~#éÒµD6Þ܇w5§ršJ)}qÐpcoˆŸç]%¡=n¹„@<ÎÙ(TöÎ 0s|„(Jžè¨H¼²g 9”(Œ õ¥õ¡<§Ã¡Óq7)2j›>Ú%Ù´å6–®a<[*IÅõÅ(JlVH…Õ³3Æã’Mšå÷ŒÔ©Èg჌ˆéÏ’É%zÏñ4¹‚Òö*!¯T øñ®|©>«vÝj¯|¬ ©åL-*¸¿ñ²3¼ôMçàEÚÖñCÊAD«É—ã9T`÷/ue48Õà°AÝK$Ú‘V ¸-U‚  W°ÊÏ\ð<ùRÆíúÛ³9#¸_]—U!²\ùЬLUCB”˜,W NTQ±ßt î/¯¤§C¹ùåÎÞÌP}¥®b7unAoxvVäRP[?¢\Û’ ´ƒ-Á™ºýf”û¥Vo9áYB"ïh¹‘ŠO÷¸(€±(ø„§áQå@ÊK Íh<ÙõâOêÌŠ«4X«üƒ$û‚ Ñ)_É‹gÄIÚjwœ¨ëŠ:Wáæj€Jfuø¾ÆH„,eaDû FïÍŒéü.ÅùJ ÝðT7¼–(ë›Á³™x£$[š*Ú~êò¬è&Që"Ù¿–ó@H-©7^­“!w×c)Tc^êŠ|P©@‘hG2zQBs Ÿ41ŒÀÍÇ;p\¨í…Nšò=OqË)Ûï·ÉpÞ'ÍäÇB®–£vðRY’“™Uβðc¼4fèz\1šq < Á‘Iý¤œ¥ 2kaÐ(¼ñÄ&QGo(μHy‡<ÎÅÇñ²yx×ì®Íúëq- l鞽Ưǻ=¼Z†Óª+À¤uQÓ™oîNWJ†žy¡žq‚;‚xäºbû”˜Täæ !’C{)VWö¥ãWÄoJl,‘)& M«S›tü”€z³µÃ ‰Å»((צ‹¯W´ÃV»÷Áõ*±wy1/ò¸d !¤[°‡m4U2:*¦¥ ‹°Äº¾d6–®V@ôWQS;5á-'¦¶Q«“Ià ÖŒŽ=áu± .Ì¥½ñ>+¾P/«ûÐZ©ä4Š2Å£òx 2îÜ.’–vÕ¹Ü{FµoEÝK‰,Ìæ\¾d›][$'|S„¼Z@ºäèVD¤Š1šGi ÔËþòÂ@ÐI5rïÈ{ÃùúVd0ÑÔ#Ä *íúªîÒ‚w R[´!v¸7 Þö*O,Òíö¬)“~<³Èjý:쩨cÒ¸ø&#xáQj3#ç]*ÌDXPj¡ˆª#ñ$Ý¡f6³— ‰ë©{¦@½5¹‚xü€7¤º!Óç 盛@îÐå%ƒì8ÛB ì?„óþ¹Ll—„Š2!K,¼Ó<±u¤È IDATÿ¬ÔÌúLx;ô5I&C1ÀxŠx~Q‚#ÌX“©ÝêO ^pêʬë8:±Hé½Z=­bÂò%É:7;èXR[xa'ÒÄCã”ÖHgµ•è™O`{YJøFD"é—U„‡*ÀCuY¦Ô%–L(j†¤ ÌÏuX$)= ÀH eå,Y–'òRH;TÖ¼bn‰-RV`p€zIö>…œ!|œ,eªz5›Ú.…¡Ê:ó®DiŠj%j·žèzE—OuÛM…‹CÔ:ð"ˆÑ¸ŸVWßçíé”…­>o|Ò­ºüqK±ù³‰òá{IÁ¶A lbp­¿bÂ"ìEmn𓛺mØÊVíÌjTYcÏwHý×@=/[b[+ÀûoDq„=´IàÔaëb§Ù5ÁÁs\€‘*è¿T–ñ<ÝwÑuÝm&E€,—WøèSÍE"œG–+ÑÊ9ý)W³ºF‡&'õ4d;eƒ¾¬,U”]‹ÖÂë;,rnãz$?“:øâ¢j-£2ùPŒËy®.ÇÕ”è8&8§ºFgŒþ+Ý(宀Âè‹gŒ7Ž{¼>CײGý£bG–ßÛÙñYIÃtˆ&mm{¶ûβy˜ ßl3-0ßš´ùY{Häç½ÖHZ/}™… d6™2†Z¸8“O­»®õLMìv‚Ëèx¥ q†€uæ$)QJmú0~Vè¶Y?pÀ¿‚ȵB9À±è¹ã ë¥z@-ç°¢³†¢±!ËÍûjp' R¡¶óŠ©n'»æ‹¨|Es*/%&Ú ´ž³Ð—%@<…5 W“ñ:TÄäCp7¢_¢6‚¶ r(‘h‘FD¨^‘£¨&N”Z£h@ÚŠcv©˜|*KÀÃÅ|ºÈO‰ºh ™¢¡“mÁKÙ¬àÌFq¤)µª‹8<A«hû‹Œ\‘‡¥ËŸ*,~gj?DªR“”™TÄ#Rù>¢ðU8ø´.£U˜bE^A·4²5™b 8²·Ð†@ ÄAd¶¨) ù"=àq¬EÊ!+£Û‘72j!²3¯¦ËGB+ÉËçÎ<ˆI#Ìê¹üzIÛGéœÀ·£ŒüD!{ƒÑÛBlv#U¬µçSý)Úqm ù©bGg¸p•½‚¼v hÄkôˆê‡k©Ø@ê8¥âQ›()Ææû¸ŸGjŠà@Jñ^S¾J¤å¶h§á¥¥‡VýúÌ1*”[ÿ xï2E&‹ÈåËøk©Þ:fMšm3ž¤­Yñagu¬,À&j)€2xžü—®™ž}¥)벋[ÕÝî @Oékˆ™¥«nŽÚs¥¥àºxL*ý Ñ.CðͬÁ*Ú²Ù3"Öë+¯±f}ëº|BQ åxPW2ZE¹¢ j*xñ{¶Û!óRR^M”×aüölbl&‘ Wó¡Ù¬Ú¤Û9¢xÀÆRãÍ lH S"ÒEפ‰¢®'€â6YIL! pMMü­p³D§lI‘MXÓiJžÂ[²Ï=iäy‡/e¼ý$…s+tUn{¼Ï2i»jIÝ•jtvdMy9ÍȼºØü)£Hæ,Ï /Œ¸(xPÉnµ†cªкî{4õLêÃÆoÙè{ñµÀÑ r–<¶X-ˆæÅJ÷hòâUSˆCÆ´IÏ'¸.k”ðãGRã²â‡ü—(š"ïÄè[Q°cÜu¯ùƒ•ÈÒba^áÇGÍiÁØP*å§B,…§‚°<Ž7š®|JÇO ë˜xV¸†€¸¶ÎǺ³á¨ú™M#,Q$™j¡’¾:VXqÀü½rÔsi:u!ü&Á ÄuÞ<‚óâ²2 AÛÒm]‘0ËFF‡aQaNɤÑ5ú«ç|Êzh ‰•õŒyQßX'Qtf@§ÈÏvÿÔ}u§ÿÿöÞçu»-Ûîš.¼äÆt,;Âùäø vl‚ÕÓ(HZ[&ÍÛ°aÓ^bZbÃV¨†;*Ú((¤ƒDÄ´rÏ{Ÿ³ÏZsŽùsí7÷”ìMQœóžïû|÷³÷ZkÎ9æ˜c¬¯óp¢kŒ>EMµº«Îs[&î—µBˆl ϶Žk3Q qv´c=Õ‰Üú°èr¡ÕQ¿RI×Zx‰£5jüŠŒQŠÓ¿ŠXgÄ…úÌ€+¨»Èœ€îNU/‹ʶ›Ä“y¬“"Wÿ|ËCåÉ2y'§6Ô,ø]üüõËxý&^ß'N9‡u´Õü»ËBÂ¥ÒŒaµ²÷ã™ÿ4KÛ³u=;ú‹»E–øPàv¯&NØ Šð}]#MeµGV±k¸l#Q^NùGœÕr^ºâœHH‹B¨šæPæ_KièÛÖnw‡(­Óg–4êt×m¬ºO~ã@ᤑUÚøýXm¡4OŸÑÿHrjUEB|H +Hê^Ý©åèÿÜÀ§â?,ñ+–©x¹×Ÿ\Æ=oÁ¬Ä¢Nx’îëÓQ¹må1FJ`§»ŒëH+þC¬óeDbïÉG馴)CtГà‰ÞxÂ?¬ö0·U<‚!YKʧpõUDzËüd9g?¶Ü°ªžƒMëxåcª|%EA·ªvµÈŽ»Öˆ\á÷\Y*Áþëöúe¯;Û³ðT±Æ:5Ó*%š¶Œ\4emH"zKœÛñ ^¥OBðÕR[´j?¶V¿÷NÌŒë§ñ"†‰*êÜßdTAoÙXŸôù¯7?xÎ$ßÁ-j¬oÆBÚ]åŽÁ¡Ñ‚ÒižäúÖ©Ç"÷—õú£xýïñú'ÉÙ]Šzœ*·qÜeÿ@C»Ý%Fp¤0Ôc"7V~B"ýdíÞ¶ÃT Æq+—Ú뢈-UÝbèrr¹åîÑjrŸçü”v?ZÅ4wJGݺÐîÉ˲ïü"ôÝýN~?ýíxýÝx—Yc™WÌJ;t—Tð†t½qŽNÙí–kû+íQ¾Ú¥GOxB„—nIáEï:€Í‡È:…ù±(›A"Ö)§ÄÜ:#ŠÖÔ-6’ガr”>)2Ú›<±WžeN#öVßhÿ¦)ô2[¨­>œÕÝŸ‰\¼!Á×w9`“6&]ÊŸ>C–b ‘FõŸl¬ñ"¥FJ2©=ÝëøŠ’¡¿åàþawW„ŠEÅ<=,¯¬ 8Fz}â5U’í×äNðUfvŠniˆî@ß-½:7¨ï¢Û­Øt*sîÂ_–+ãÌÀ–gÉV'vßû-š×¾‹“i¢A_s^céé<ë‘¥A‹xò ‚,e«RÜ5CŠ«”ޥ߲†ïAÅLO:¾÷þ×V\R'/.IüX:]ï¶vÄaš–ÆâEÓØ"ŒZ–Tç2t·„0‡ãχŠ-0†AZ«âÿa• 2‚­ \L̽n%å"o‚÷?¨¼³g%£æJ´TVÓ]7hÏÏŠ¶l˜LE}]u¹ÍÉÀÅëù ýÝ-7³èØe¡rMË¢‚û8Í}ðÛ8JªC¯„1±sŒ7ž¨ijÀªÎòÇsǹſuÑÔvZ¨’ä'7$÷Ãí É&\mµÚ>”50ŠÛóû^¥ v>ɓ̗ÁÊGFt¸" îdH‹°?Ä3O«Rèïeá®'Å{ë$@Ñá¸J;jãê¸ÅÁ˜økAµ-Γ¾}R¬¸ñA¸«PB–éç|‹W¹;Ý}Pc°ZWQ<3kgdIBvWc;¤ ~ú‡þXE^X°·]ÙÁ!€ Ê Î©má¹\yñv ¬aí:Ýn­”¹õáÒÊŽÝòŸ¥âÄßRÈòÊÓÁËõñ¹£Ç¾´(0ùŽ 0ÐÒØ¶^¼u‹Ánš·è-G—M•¼¯u2ß{ ²íôšë žHbëÖ‹+FÀ]!WÕB¼JyBÚëlôõDêæ–µ¨Éo¼Î4?¥F›èì˜>´³eá æ÷jµ{[? þ­[¤*ÃsXÚ!w!Q¾¶<¬èˆ”3LoèRæzò´sñÖq Cy³íS5=Í .FüXEs(ðÄèLÀpÌω‚:a•wcï.Y0ê¥ú^Ëß=bo]"°I`«'÷âébVhêX'iWÜ9A;]{Ð…ú5û«6 íR<™Ð¯Æ¥oáÝåS:hêW&2i~#ð¡Ôc–'Ðwy‡îÙXVDz=¬ Çô6ˆÉØ @; 9Vÿ&õ©z®ÓÌÎg:F–Fלl±Më<:tÁ¼¯jØ«m´=?¾¶wuÈ™ÒWKy!n’–°¶³Ö¸·‘™Tom±t±–.~¼N 8ûªÓ×<©J˜v²›ÔåZtû†v»>‚Mì[åÅ 0À6 Ù–é†lýoàÞvÓ.K‰càËÖC]`8ä1˜4"¦ú±ŒS¸œ²yÏ|fSq"ó;´îÞ']†±æºûKÛ„øÐgÜ¥ÔŽ·Q/¹{44bµàÚ*°œ¤o,™É¯{ãäÌZ¶ „mY ï©%Oê5 z­h'B÷«4µ„,n"BØî½ö™Ä-¾Ý_M¾¾u"XdbòoL=þy¨Å׸¢¥C5‰[í$òø}YjX\Z©= >9 䬟 ©ìÞG¬vÁhmæõ+'â%ãÁÛq}`½$î+#$…ö¤Ø%[£ªÚºíóÄ^e|Ô!‡›—h©Ô²øgM àNóV¯Â2÷ãûN´ÐÎ}S—…¤ø™‰Äì$!¥Õaøò°Œ˜gP9é.Lj„9Ônçf<‡¤8NBs—‹æy  9zÒŠ3ý4í¦qW¸usAŸ(äž¼ñq‡ÜšJ†AZ/AE+@!ÂOè5ÉÿŠð"gkHêÇ’–U;t¶ì¡–±5UBŠuÑwº‘0¥°’WQH6¶4ºôSå¿´5ë'ˆSú„mgC¸P:ïF÷ÞjPŒòèÆƒ¹—ÏÔÞ]KžËÑÝ„€sÝw«Ó©A‡tbt­˜ÝAìpº¹.Š#–5û¹ÅǦéš;d Ãm#­íÃéšDz4‰lÀM‡KE0 ¬±‡6Íâ»ÎÝÌ‹ë7ù ‡[È@EçÝšŸsBK;7Wu§4f2 íᬱÍðEÄa¬Z‚‡` W&Uܵ„|2Éå­Êé^ÇÈñI±#Ïm'U7~f»¬Eh*¨_LP¤ty‹ I¹VÅïznmšŒã¹L.‘Ešd„’CÍ‹“ˆç#:ûàÚþ-sŒ¼ÚtZÅ:/¸<<„¶¬§Ê?P'Y'^„²N›â6)à`-`"D\Åh$¥îæ¿ë„…y’œ¶7¾`¶ÁÄGÑHH¯ß',}^²CwšXb»ƒ\¡”H®¤Ýk#b Ú­(m Ñ@=‹6鈑„8­Q^$€ƒŒ˜@Ïw!®müþ6’:!þÌΫ'qÂ’mÓ¬L—û3»1×ô”ƒÄÜnÆlª¾Ž•äkë/¬«F™¬¯ú;gØÊiN¬kot_¶ªçè8èC„£g5>Ô\ŒuæÔ~râœlZ(¯jÀlûc36Q0ƒ»Š+Oœ‡Åj‡ýN(Æê~²DÓ¬Iû>n·Ç(t¸Y¿{òšµÍåÛ呿â•å¡}6ÏYu›yŒjê£[o®t˜:}æ–*º'Ì ²hbdE1hx¸‘cæ&px¾hÓ?!ûë²­ÈáÂnU$R]¾[dÉÁÊÛcä=iu=Z?å¨ r‡é”(qøßù†Ü7I<«œZ¬Ðªàám ûDíÑl5HÆ%)GS[ÅH8¥n Ï_ƒÄÜe Ɖ}4kpX'íâs]ˆª5X‡¿À*>fÌWMuP ¤¶r³ÁÁCp‘™ r±$êõj† „bdÍÝiû1×òQIåQ :Ì€/±q«X1@}%16q Òm ²+Ó$‘8rѪêÚÞ>g ­êêy¦_œO£ëÏA(R3Ó„(à¸Ð·¡„ ½áÛ/ÆzλBòÞ¤;*ÛŠ"§ŠŽýcù¸í±+MîáBAÆÒ;.QXÃ;é{Wƪkã²ìë>ÿ’g3$Ä ŒËRœ#0”%n4[1å*¿Ÿ¡þšV»KLò~ŸmçH4¤EâbU«0kÙÿë°™Â5ÚˆûØn®˜±PÑh†öФ<ík†ó¹Â[– «‡m¶¶d$˜3ä!ÅB]nÂ9¶õœ>Õá š¦"ß퉘q:#ÖówúyÂÜ%@|5.2kY¥pk;‚ÖNX9GUN‰WO*û «p£¾>=ˆ¾D›†¨à9±d ŠÓF twíóü-V3SG†Ì¥ØÆ¿¹¡û¹´Òì8RàôÍ@oþ²„ö£› ýå²ø‚ʦ™=G2ฌH˜`ÿJ¶YJ•Ô„ÀA—¥m¾ºóÚ+÷ä8µÔ)ÅÛŸ T’Õ8Ë€Û•ã>Öàur¼ë$O!ÐüùZû`«…£«ŠC=$‚˜ `J¤iƒ³úݵbš2}zûÁjæªG^‡èíV¶ÔôÓîBÚÁÖZB'b0™G©Aß:}JDý6䨏ÆcÄ?Ò÷?y:ip2=ÞýœÒ﯆&ˆïJÿa&¢±¯Ù{=¶II}#¦r\÷à‰Ç÷*XX§±D0¥:tIH@ñ]J¸Ý‡ÀHp´•B¹v*éì\¥‡ç]úឦMdÜtA‡ÿ0±Oòï®p©ª]ªµ¶ÇÁ~Ÿ ¿RšÝÍåêÃÕÕ×Xœ4±n9&`¸j©e‡‚äì³ê-]økú_‹‹¶évÚràkÑZ!|)‹ôyŸ±ΞÏxÇúxj-…› /:ŸÒsÎô gd·"ihÜŦ#_í<Üüé3eÈy}ƒ´L(Gk¿±`œY ¯%C w0›…%öÍ §³·¯¤×Õxàͤ œ©óñn0Ü?¤!Á­Xøý“OkåvB2GÜìä\ „ÕówÑ>öj´Çˆ¾©Ö•P?H•Â*\­çÄ/-FÜmQϨVŒt@tÔX±•¸¸-ƒ±²´® Ãæ B(ìwçwàI… à]EòÇ i=õ —ÎàúÐ Á?Êù_±†3ÿ¢*¶xZ KŠsÌí¸fë<¹ž#:%ºwôø +¹ ¬ó½Ãû­÷æ9öc},Oà˵„'6G-YËåèx§Ã 2ÊxQ2†>]áT>u8Goë³ý¸!‘ì*âN„fÓÄ×ï¾ë&ðXxb¿ëîX‚_ñ²Éu×ûBøÒ¶GóìI Þ?\éþHÀ`Ô€^5S‡ÊáëÏ\[ežœfíiîª1 ßC„foôÌz“:Ò§J`†æÅ ¡Ö¸­°h ÔJ€ì ®/N„C]W¸…<[¾" @wÂ=ט9<8tÅÉ•f4THòVî0;“ˆÔ °ê]_«“ô?q¼ƒ¹Å¸yéb‰ [4?SJ ´["e¥° x«J>,]8º°wUý3ḉm8A|å’q¬‰±„dz™d8ÉZáZ?ܾË5þôö´{‹xk©ÞZE8LÅ»ÉÁU`çi¶fñof€9`³Æ5¬³SÜÕ*Ы…½7žäE|à>ýúNR+MŽå™Ðë‹§U7TQ–#ÕÈ™}_ÎÅKÇÕOÄ ìˆ%‡ÔèÄ­ØJ`I¿ÄòÊtÅÚ×öΘ®+i×e¨¬ÿ¬Þ`Dð`!H‘Iâý’ˆé–Ø Žµ Çhgu’B1-9qQ +á#‡YU‡Oˤ Y˜®°ƒà¡?V@#p œ×Ðí¢½E[ýdyK Õoo 1/\1ˆC-æÒ ¸°R%É‚€Û¢8€À¬9AN´*´@%òÄȲæaþ8ˆ7B‹í˜¶Õf‡GÆU‹ÝúRš­ŠnTH:ñ'6“¢ÖõYäZ~0#ÜMø„ç–¶^(ƒ ˆ{ÀÆ„ï·=ˆ*E:˜è“gõ»ø¹Á¼Ðâ’­Æè‰èí^/ Ùcú¥ K¨n»(üxþ r„ªÄ:‰óo•¤uºöEœµ²ÎÛm¹Ì»ÖÚ•#í*·ƒSƒ¾G8‹²Df¤Î3ó„+|\¹k· yÃz•ª™K^gÌéAÄqèäN\ƒá¹=¶9Ô`ï7Ô<ß ú_+$wŸ Ëê™^*Üç3{7}â[­¢óCõf«®†kÅÝž}ÚâVÿWKCÄÍT7K;ÖJvÍ6£è_º$:¢J¼ˆ|~è:— É5'%27O8쯻ÛÇMòÈxÀ –˜V ®ŒyZ©Ù®±NØ,O´Œz-š2ñ¿ éŒÅ ì¤'¶ÄÕ(y6K0f"¸r‡Iº™)}€à´–%‰²ƒß;ˆsz¾ØU2„øíŽŠ·_væ4È R6¨´Pa;:2S&#«…Vƒf'‡.luv ¸µ¥2Ìk,ÂEq r-UOk¾‘_§%´ Ò&ã| O5îyZH©N¨I(º‹ÝÎË}‚“ò¨z;PÎ*°9 âƒNmè=™)ŒÚÏEèDW |Ô·°7ÛçϽ¿ÝÖFÔä¯Ù¸BÔx¨Za²ó e=—ÐåÅß\¥‰ ·œe©1…MÉp˜†ºÝ¬!1Ðþ‚”9—ÞFDK_Žc}–za(à…ÔÊj`¯yýÞ. ˆ»èÝ1ŽËžžŒŒãÖ”«Ü‚‡fÄ–lü]–Ü(ãé«Í´fô®Ô±A¦âq¯§ÕxL¶(fÿ ÊÒ|nþê&.ªÉ}C.V.ÐäæCäA” ƒ<Ž.ê AWÞ~°¦ßΕ; ›‘°¿Æ³c(­ \ž7áúxí„õ7CÉÂçok>Øëª¦ÜÆ ÷aø™U®d¬M¯«j ÜÒ/h"qÓ lïbË7®Û"'“­—ó "qE[`6s#2)]ÃñîÅÐ8u…X‰Ø`9 ŒK½q A¼Ã'T¥—óæÕq7•(„´>m[<¦jË03ÛUÑBñP~Üò},x|Áëé¸6„ÀÇ’usT0Ž 0øWùÝ '‡ Ÿ“°€‹}óTŒ¦R:†w4‚“Œ.š.¤;H&Ê ãK¯Ö4¾ ÌR ±ì÷†‹†µé6|¯ç§ó¬;J>9 'Sùz¸’¶Ýƒr6ªA¨j1ø1ÜwãÄf? *ðÙÚvsg²=«‚u¦r*<@öüØ…FÇtDÒ˜ùEcpü5á¡ ÷Yob‡ÊÝ™Ï5ñÇr}f‘yœaµi©°ªXìo¢Âî4ŸtËÚ&ç¬ç+õÄ U”/„çÙ> A¹äf¾u§êÉ–¢ÅEnY‘Õí6†¼æ€ÒàD|àò]€‡U„ilàp¼ýF¡ÈAô1äƒG7g‘îcºQÄ:iåE1d£5=g`÷ ¡†d<˜t·õµåX}N[xµå0åK‚õ{­YQ8MgÑ ýdw ´Æ$ÚTÀâÙ õ£Nçþ,PògÀÔÕYóØsgÛXiå`ì‰øeìþ€±™ÒÿøÒâ>¯/¯iÙ²lZ•2Lnçk=b˶øÉPíþK"©«~»ŸVüŸg4b®ÍE0¥ôæ÷ÒÀc·dij¿«k¸TsÄ*ˆ­–äçÙ>œv„Sø U®KÖd%ÜþC)qñõ¯öÄ-ˆbuѪ²€˜nGiw+s•2à2^¶…±C bìÔ* Å n#)¨ ÐV¦c>©Ù£!$Æ»zÝ Ü@Æ©-:¹r±rˆ0J*ÞLj Ë?b¹è¦W{êö­5´U"¨»j}÷¶7ÃëoX”ß’Û‰?wybbÉO’ö¶¯Råp›Xë636Ó²xO]m#F˜{v;Ì×ZÇô½ìmawÆÈÍ[u»ÛQã‹’±ÁàÔ­¦ÔÁ4œaÔŠðZfÓ3 XÐg Þ E^Þ?ùšÚü‰°¢9öPÕ%ÁéFuñï±Wo«qÈ0¥·neµ–ÌÔ`h¹wÈi\OsåˆÀž ר [G–Ù'vˆr†æ R·ÓÀgénmaîU=4ˆÝñ>pd„£Í]û d4H‹w‚%öa¡B'ˆ­l—“­«‰¨YrÝ**‰†^|ƒ>ÁèÝ]§m‹­$Ô%0ch“ÖJ2€ðîf¥ð¹^m`Fû m™·”ªœ8Ááêc»‘¡î¥^H¢ýYUŸÂÊBºÂj:w¢!±äkè»ãz3_lˆ4¦ˆº»my,w±¶þ„¶xب*\2Œr²mfeG5ÈRº›KWŒ’¯®C8;%?Í›1îšž†B}_œZÄO”ÅBZ~Qm‡…~ûVæÛê¯ÕŠZdnT´Lø‰yã²äñf¶>!Â6Ë}Åݾ¾Äë;#<ÌæøæÛeo0/D^öʼnÜ~ÚÛvÅNT¹„û†“3ÁJp ¹«¤Òõ”JßZËÀtÛ$‡Í«¢½qˆµ-ø*Õ¥6ËYÎY^6-Ÿ«þTç/Ï,×ScÝ%ÆjWnT„xdíwû»øùë ‚[Ekló6KbŒË Âîo“Ö† ƒ‘.,’lº~íÄ]×µ„ÎÓãà†ÅòjÃØ”µÛŒ›õ¹Q¿új|I :²¨g´îù·Ùz,êžýh2«‹ìr¢Óà‡ ¤äðÙ2cP5MΑpN·Þ{++Ak,×;ñ®Œ›ÿR:G1ªd˜ kKº%¯!Ïb·§ir;HþìTš±.‡»ÎZ³×ö!»9Ðþ®«¼;=EDZÆZ›‡jâ"GíÚŸ¹~šeÝŠ>ïò+wI¥h~ÿI8«èîß]¬L(¢AÚ`–é êÕ‚ˆÁ¾Z \NbÁ~PxËuÆ«pm·ªªT‘D£TǨ*-ÞÏoA¶êÙŠæ0©Ü[ïµ»D¯]A—f]uƒÚ2‚ŸòV 5Ž']]#Â6§¥û0# ñ¬ûÂq'‹u(áÖf Éœ:³½ér*Æù ŒêæçšÌcñƒ›‹(/OÏ]¶ ¯µè»lðŒÒ¬\i`LR¹=µŸò'p¥»ØZ¸c7ê†ÑqÐM‰Œo)ø¹#ÞƒÂ3­¸¶ Ù?Y°·ÅðŒ53§ø~\ÄaõJØ…‘Ü#¢Ú\®ð¹[‹»ï0™ƒ#\×N“ûA{ö$— *Í µÖˆU+CRuãÚ Üœh LXª¾³ÒùÐ>$™bˆìbr(Òd2·§§Â 4öØÔb»H§GãÔf¼õ`h©e™"X^?wXåpŸ¾¾4ïT·ÉÅÙ"Ò h–Æ›,öñ·³¹r{P«‚ä\–*þ Æ÷öx¦XŸ­X©ÞDŠ¿¸’Õ]zYMm™g©3ï4±ó+™Tý‹fÍ÷ ºøá¡R 4À¸‡ë0?«zá´õìÛŒ¾—A‡XPWê¬Ûä Æê¹‚ÜA¹:ÓŬ®€\^_’dÓÂgH%G†cô &Ü‹F‹ËX«4(ù~Óz€'öÍPþØBMa)ÙÎùŠ OðéþŸþÖ9{åòp†$4„Ü“n¨úáB pñ@°ºJƒZC,U6˜ §Âž³\-$§&¤>Cйœj Ž¦Ì WH‘oÔL÷)ëºKù®|˜š¼- 2×´åÛM\™.ò6FUŠàÝVó'–oË^€Š!Vð¶Â'?”O‚¢«R¡×^º „pÑx’éœëO Då0x¡<0úXnmÄ­9—"wŸ °Ä¾Èä]ûÜaXu‹³BÕZüÍžö9T¨ìŽJÍpÚ(†¸Å±îÇ¿m [ˆÿ9«ÅªðÚÒGGPþ URØjˆ<Æå‹‡OüiG¿u²uâFk i‰üfÜøw±V}ó¤¡MÐ\WÐÚá1nÑ0«P ,¦¢;aNƒéßÂÁæ¦ê¨Õ™O ”ãÀ¿>‡Ö€‘VT޳±ž7ˆe¾èQE{ÏJ*{.=~h'oª[r-©YëØóš‹U¦ù܉8i÷•£u5Ço ¦Â9šF¬C·Ãʃ’lòYgŲ°#€†&½?ïeâx{Wh’å?Ž÷/OÇF|næ4ÛWäž[zΡ$ÇrùIݺlF²º\¥·p8–iÒ6ÐÅà:FÖ‡óÓÃͨڻMýÉø¨ŒŽ©DÒ=¯Úª4 ½d6îºÎäØràÄ\¥HzõpµqçÐs¡}†°¾>IWg"Xív35kÎIO­’m©Íë9é´é僭qœA˜t7ÖòWÀ3?>E«×M„g*J Û,¸í\éò(Èêå` ynSÎ\þYXÕªP+mƒJÛ&£Ä(`ýÚŠ¿Í4‚¤Wš„­ÈÐÞ²"ŠvrV<çAª4›œe‘¶ho0¸7OHbéÏ/üx7X’2K²]Ô.˜æ@;¶Uõ ®~3¡¯Ÿ 0ÞîvRÚU‘æ¸E¶ÒW0Ô¼¸ÑÐÁÍ’`9"REØEç*mVv)+·þ³,qhùF³qžüúI=TL‡ÿõ*+pâëzbûi[¤ÅjÛãF;ÇkÃUóNþkÔÑ$hAµÙ00ÎÃÏj¶öšžÓ"ß×ðØí‚etâÅ™Þ\kÛÈóÊjêm̶ƒËzZДS“‹ì[¢%2 ºG-EÛm2i^õ‡ä­/·Yâÿ)}žwI>º?ÜJ¿#9 QÌ>9M_ÒÎGE7(‘’ÝDh/'‘~ö nTur»³ma'¦'õó„ï£t£qQjQµJÂrgÎ'm¯½Q‘@Žœ•Öx⪭…ȸ¥ù&^_;Ò7Ö+ã—XdžÏ:,ë¯ý¡Ù1›¡&¦õÕ3'`5 Ãð©Z¢Aáè´‘z€?Y:„ÁºûJÓï¢-y¼Xâ™^ó6WP¼8ÙߟfîÍ"’bPÙù˜JfìØÎ~곩=§¢32Þ?°›°ÇŽÐUÇM‹1ðólßf«dH†ÒfCú|=úæ-!«`h^ÅžKp¸^;Uřή¸} wÍη½ƒØ¦#mÖ•ÕÍÛÄp“ ºSp¾ÄR=iw&QÑÈ>ÜꤋKÎëC40íBO'’š©Üܾâ­P×îñëH²iõ-ÆSe3!nŽ58[ušu2"Ú鄸¥:]­LHëo kK—L%[œšÁ0L&Ç7rDÌðÝ©+ý^sb˜k Ü¡éb¸÷"E Ôð½«á;0']œv¤<°‚»@ ÛÂHì™Åÿ÷°k Ü“Ó0nu=l¬ŒÇ'à¬krØ¡!Ÿ|^ЧÄX¿’d—tà,Ä‚çÁU¢våϰJÁ)Ó_a¦1Qir“GØ>щ¤û9Ä>ÐlÁPÓñ jæ h6Ò ñ´Ô“áCsÏ>Üqp»:Â,³J € ÿª™ÿСsÍ9Yƒ ýÍÒÿ—çdªÕ"ÆhÛø~¢v·3ˆì/a¬TÇÑu.÷³åH¥)¦J°[ÚqË3‚sÚk ðÔ‘ûtÜX@ŒõT,…ïkÿ`Àå·ú&þé;Ÿ…—8RÈ– 0aúBñ q8 $³ÒtšwIò§½®“‘äÃmEÊî´ñ\¥}\{×Ñp•p-iøw…:|‚2ü±Âoçº?F4ƒ‰~öLä†Ot~;+éoêÂ,û: 8«·Ñ¾¾¿ÿá2¨ÄMת< ÊsEº§÷)¿ôò«NsÒ%åz'ÿÀ'‰S™=ŽY* ²oñwÅ‚¡e›• 6ˆ4Î èCøgVš[¤ßÖcœ0×äÕà BúØF¾ÇZÚ³®õŽ«S(‚¶]W{\e‡ÎpBwÌð$›i)'¾S{Q2B\½·‹so^½+êÙó™‰ãœœž;<ÃKQzrjòÛêª%õ¸‚¥áÌÒ„3Ô¤ÿ–&0[¿Â`^¶˜¨NnÑ*%Èx`¡™ÒÜÃ"ÿ"èS€þjÞ±±Ï ‹«þ\¤·[¹‘7Ò¤Ös­à,_T'ÏD‹¼@¨s¯M‰ïQÅÇÓž¹äÅ ÅqòoÉÞ rsõ*K³^(Û¿À°ÄÕÖ•uÈχO3nñ3ë¥LTšNüñnÙÜá‰*vV‘À %÷ÓîÒC"€©ëÀ"ˆcÄAF ËÜk Óë H® âÀº°½¾Hs#³SìÆkpª’r‡ƒÉºà>¡ÃÌCâsZ‰ÈÙÙ¸ß^ßÇ‚¿¬"v·#÷B–©"Õºüœ†Ë±˜.#w\<&1Óæv507¹µÂf!a|þT_p8b•ŠÀÉoõÍ,\ƒQ–hW:lw®ïàTÕšœi)@p~ëæÝë^œùúwSµëô'õA]EnèSÁ¿Í´ð–±ìƒÓý0.#ÜhØz&—GŠ­––æÖj×ÐÖ´º8̲+P× ~‡Êb–“„d"œï¦ íx͸¿r’»1ïºg+ïS}jï*--ÌåÒªÙvèS #YJ`NÅr2쿨uãø¼æ%¥âs<ØÀVHû96*èÖ¤Z‹È-w„žgàœC|Äa&rϵ5¹ýn{FŸØˆsç.Àç\K©%r ™›bkY¿6h•·Ú æ0î’Ùs·Z}/­nÃcÏápä úƒµ‚KMäÆíÖæéT¢¥¶‡á±Í·(ë=Í‹{u%à|(µ¢k=ö²Šƒ™G½¾õ‰ö-Ôó`¤A®€¼‹¼PhñºÃ[žº# ¦¤Å ;·(yk1·{1ƒ–Üq2ÐÚv¸Aµ5® IŸÝ)^RácÖËÕv½c€šÈ5›s#pt\£ðGmáZ-[Í]Ã$?H©"Ðïñd\]MþŒ§yAÚÔº Û²˜–ë3’½,å0uÛEçÈÉ-¢ŸüèqGkO„Ïó\mÕ¸‡ÿe‘¤ nÒ:Î{NàܶŠú$s.Yiv¤B©'a Wä¦Br?ëÛÎ!ÜV«HØU[‡¸ûÖ& ã¡o pdòª X%ñŸÑヶäþ ívxøò¢8|ê³ÖPt>…¯±˜`óm§Ïš(mfàÞ¸sÕ•wDøÙüiYã‡Ì̪ö"éÑù#éq&^3YÒï㣺p5ŸÆÉ™¦Èß•Yv íÛ:L„àúö<$Ä4ÒS÷"V+g@ªfK…sPŸž—Mú¹úXPz“DE^)ÒÃ`ú@×4‡Ì ´Ã·?sHÀ‰Šk½Ï†šÇ ·‡ZŽñü'¢]°«,Óêh´°­íÈõI8 Öm‚E !:ݾïà’‹—Zå¾(Ê=GÇèÄÍ*Ø4¡Ð­Èj5ÀY}˜Úalë‰ ™8YîêEk#ö¨Mfá[˜? —Û˜ú&DF·%³Yºþ›éÍjýURRX87“˜AaʇRî‘T- "Åy)Ãh”j¨Š½œFbþtÇ‚²‹ïÊ)”yñ-Òm«ÙÀ1ëY—ÅÝ“ƒ®»ËBlןի6›Ü˃ÇûY¯NŸ€cƒŒ™É©öÆÙƒ…%¸ˆ?´-wAAà¾tzÇ¥º6i¨Ÿ.× ƒ[§º€HéÛÙb8ݤStdÚ•ä –¥çè˜60¤~7‰Ž;¾õ¯kákÖ!5Ï%Žˆ‚ïë ¶ßÌàœ8BµQMdÁ'¾*ÔGçÌ=Ëm]賌©Ú Ç=øöa3ÀåÆ,ÅB1¶e·å1.Ó¹aqë}1ó¦àñ;åVˆþ‚««2’ô—µÛ­$ÎuÖ‰ƒ©:«v£ÊÖ+?ñºtg¢->îÀá©’Lµ¨BºH>Ô| ö¬vï̆ü¡Öòç¯ÞÕîrí6®}; )Rlw‚Gǃê ^(·#çíÇjû¾6œ[‡øšiýš¯Ÿ_žÊø˜ä£•(ùx@±Û­÷¹Cq;×Ir‹pH`(žþ GÀ9ë» ‹˜ª¨éNæ»—Áûæë!·³ ùpPé0ÏÐ /\è$ÚµÇ%yeÂËjWŠx Ž6%ð~T@¾wô…pœ¹7=yùBêÁÚe”yAèR¢âÍC}´‰þ;¦:l|ÆMܘu²*ÇlQœ»! ŠÚD|KÂÔ •òÙAn³)¸!"Kh%Æ[KµtéPUc `Ò_£`lq^»¶Ï€ÊÅ-,ܶ™¢­C:( ÈÄ5ˆBg•< ~ðì¹  O}»•^ѹí)Ó:¡­ )¯V9W{ƒ¼û¤Èh¡jî‹Jn æ¡‹më ú?AïºÄäµnè›ÜŸ‰ˆŽX-ö—>=¡ÈŒØ2€.g­\‘Äœ¨^µ›…ËiÔºm,²Ú‰iù´;Ǫ'Ös?™vtË#îÈ#ë,+9iæY¨7IZ qQgR\ßb>ÍÒxƒµ‹H‰#rùvÿò¦mCÕsA}¶$ ÒU7#¿´üÞ¶Œ»ESJô/8“¦¼®rt%4ãjÔê<ÞÏ zʼHËR¿›´V,ÕörW$Ön·TâDpxºY73Cä¨SÉ»Y~3p‚Ã(B"¹’‰jgW£îS¦Cošpë͇•¢¥k—zjÑ#}¶ŠT` y˜ú¾0vQ_Õ@±pwÔ_Ž—‘VU÷ÃÔä–² &Ö©§%üm"–nÍéÜÿvµ½ªË©d²gypŸ¦+A-ÜþÜÆpÊóJâŽ!'îj!è@¹jŸž[МGÜó?žXÕ'i6 ,äOò’“2`RÄ ÖØ ÷¨ôo$.-ÇÄš8æÉJšo‰ ’žW•Ù%LL¾ u9_¯\ͬý“AßJD“ ê”¶ò3çaÑý‰²‡gîŒÁl .7ÌÍXEÕ! Q-†vâÄ=IC[ãV#–­©ûƒƒ­¾‹xJÖS…g´…Ÿš¦Š:UX‹ºíÆAL§Èõ™ÐV°Ý ÙF=W0åÈ‘Þß>çk¶!mFÕ ˆx¹¥@"ù‹ƒæÓ]!ä\ô…‡Õ ˆÓ½³¸\¶•\Lù–q7ƒ£Å¥[ׂX¶ô'>îÄhÿIhv<[ÿ'iœÞJ<üÃhÁ†i”½ÅÃsæE°¹.ý'Ä^I‡i»ÁŒÉ² MÿÐ2g‚LZ¼»Å‡õcV°_¼Ðnq8K!# Fºi£ø¬i”,bIEíñÒjÏ÷ªØj‹³æÙß­šR$ ´j5d¨–K(qü)= vxY£G–¾ínüD-1="¼÷öÆ$Xc6y+kñ¼B½V˜§~/þù' W©qñýŠPqvXVй´f¸·wSïZ7ûY¾…VY$òÁ'ÔŒö%h¹ÿ´8˜hŸ|5²°ÅJjÉ!.R(«ÇV-†ÁJ²#·¤›ÕùL’¤=ÂÙ*M¢Õaåû®©•5’f9À’Ææ,c j݉Â?¬ãlΗhgÌTïCRÆYéEk ÁaXÛi|&6^Fቚ¥}[ý®‚Qû<ÇR çÎ¥VµÅ«yŸÎW5 k5ò33EnÓ™×}YÛ•qÊ»û-Ü#ê%€)AòYX°Ë UE¸Qž—êD2¤½ó¼o¶ßÒƒýì@šˆì[dñÕw7ßjÖ {ëSl\„‘`°fÁ¼Jè-j¢›Y ½"Ž®‘½,Qà¶Ð …½íé?W‰H1—€M–ý{5?à*1~‚X_UP« añ ÒÁlxð&¡Èô²š·¯/ì¦Å×ùÜà) gqb.ìí o׬_ã*b®z²eh2P2L9™0²æÖáÆ‡3ƒìöÛ¥}U<Ój¼³påŽol™,˜~ËÅ©f° yñ–1³Îªö]xŠG7(³HbëJhÀ³˜Lû»P•”›ùID%à)#+æ›é|»W%ÒZØü®,Oç}¦âÜU|ÜŒœ½úñ÷IY™–ƒ‡jË<Õk[[e€€¦`ÍÄ#«ýüÏ@õܵ€JHnÿzÅ$á%ðli¦pP »v$'IVË3äi Ÿ¨·ÌèD1Zɘ¶(¬Œ§ÝrÄE© –•OJ›Öþ笤«˜Êé­ ¹Ï¢Ø‰6¿¨eùÁ¿¦Å¹Ûµ½%@’£_†/t²a¡ãù~!·‘èÓAûÆìéP¡V!ðøÐN‰càhFY¿å®q¢[<¨Â¤tó¯pbypRXR9´ÒŽ–²ëö\` f–<£…¯ƒ³…‰ÔPÊAÐ…£¥õ¾¿Êöþß„ðgz IDATá$' q ,N0굀ߩàÞ<¹ÅÁò09аr”Pd'Z‘ºX§<ÄPàas‹B¸,Q¨ö·Wb]ÕvâO±œÕúá¶5œ(Ä¡]!ÉQݹû² !NëŽ1@‰ÛM*JvBˆå¯¯%XÍ]B½Pô)`mw’AÎÆ4ïmúz}¬[Îeqpœæyš?®öÆsWnÆú9f>ÜÐ!÷ÄÚUýOxÒz¼1A±`¢V¥†›EU!æ·Cég1à5‹LºDæ³_cÜ%#=O¸¹º)¤ÅèuOV¸;„o÷N+µ:v0×ñ&ˆ]qŽ n¥Ò4:×2 A´:­ˆÒ—Þÿ–ÝÜf®O,UŠÑ€ð½5b`?ûö0²: $έÕ<6uN°Ak(']K'9bõ¥ˆ$Ä®_ MI¬#⮬—(/ϲ¡ïSÄ|Slð\ØœèoY­¯Yf¨4‰)³Ä êW]· yµ«ÌCCºARŒô°kGÖÏ ¸ÄÇÄ­qã_áó<«<š hŸ†ÕiÅåkǸ…ÐŽã%õ]ã;ðøNZMc™-ºà¸"Ú¥mí÷K-À½<È<>Æ×73ç.Td«=óÂmBÌœŸ¸ÎÂx¾¡•ºàoàæÆEøÉæSQÛIÀ ׇS¼w’—J]è¬ÐZGÓRmïåЬPDR Š& Q‡Ôåbî¸6©oƒ1™}tÉMdûC%—Úï<‰‡“æh|«: „°‹øXÊtA$^" ªÂ[µZë<ŸÕ˜õ]òçDþäüùkY´4„ËëÜ›ñD)ªþ­ìÁiÅ“9øÚ¥•êý3½br/?¼žã‡ƒöϹÄÊç§|švX7Oj…ñ@:AG t“8:ªçCÈä»oòòQCÍ‹´P…lc«Ñ×r±Ü€g9Ý#È_ÐüôXXkWs’÷üXÚάà¦YÍÄã}Ô†Lûz>SSÆ€m›ZͶ‰â¹edNT)³àDOy½ßo"9#.]˜åXI@«l0¨Þ–FïûŸ?­5Xr5yÛ"g¨„ëfñÕ‘ª4ž[–Š'±þÔâ³âRŠ\}‹—8cmˆ·}"ž6àÈé'Àç~ZÙ·ŠÏíy’D y;¤Éq}ødxsÖœC^7@$ŸàˆN{°húI;ÎÜ"«®üã¬0"…þxúh\c„;ÅU«Ó€O,Ý´ éIM0voãyº—Á$TŒˆŽÁ4ñQÚ!»’6dOcmV œW„0rTÇJ…OByÖÖçÂbís°J¯ª@±øÓ‘² !cLšÓdµ±-ìW#ð'äÃ{³Õ0U4ÂþJÜRú ób Ù‹ŸŸq–õwÒ‡¼rÉÚðpãù8^¬)9ØŠ mÕ8<½öL„:P¾ÏJ•Xà zu0Æï¨ËÉq3ŽÄîîKA¼Afæj}d:÷úûB¯ÎÑuF½ƒ­IítÝVŸp¢4Ñ–bð{Ëž*Píoíæ bý ´‹«XÅ•sÇÖ!øÝ\üjé+tŰ«„Ž …ÌŽ¡´1“S=PaÀqÁA¾8¯ŠöU÷ Z)éÔU1Þñ"KÖò®R-¡k©c¡«ž ¨|KðÕ6 p™ŒñL‚˜"­¬Š-†A÷¡ê\÷Τ£®€õ*ôo'ŠÌÚ‡ÞNm‹ÕZÐ#øºÕ¹‡©û¥Ú¤rÖ¨Ž;;Üú±éC¼’‡I,xJ®‘} »i–“¨Ε'Ç) Î¦ƒõÛÚ:Ɔç…4Gá±&@+zPf@Ɇ‰hÀ>-À Zc+ÁðVÁX-P›W]s+X&R‡7WlãËn{ÄYiõÕâ³Rž&´¥ë¹*ýÒ¶C0¥ƒcŽUcL¸ œ^ŒU?ÚÉ3W>4iBÇ•´\ O{ùØ…¯¯ßÆ/^_Åy»ImRn¦%ÿ˜u¯ùbÛżÆÚ{ïÒÿ®–Ñ2úI½­4Ž…ÑYÕÍ^gx±®hϳ-¾ ¼sȹIJ.—ð2Þ¤få˜;ÝeºÄz€#Þm\¬“»œkHÐtÓ6Ê’'·Õ$Pèåû“ã5U­=Ù:XÈÎø«Úd™Àhm/*]ŸKس¨¹õaëxÖX‡-.æYŽ:|òü‹3ÇHº={…®ÑÉ@†œo’Ÿtá¸ÃËàÇÑH`î-››rÁ—ÈáÖ±ÐÔìgf³eiÎQ!N»¦b»‰„?o Òh!W=2¥_eªIÐx’a|EäFc>ORuáÑD,8`ïŽR ò‘óЭïávR–añiÑáx­ÙÎö’n—i¨\Bæáž!0=oó ÎåYVäÆiÁ ÷²Hu¢Lwñª\¶µiÛ!³ê$%rusª?\z±»,²Îö?÷ŸR[´„ÄÁõ‘zxÿÏ«± ÕÉšO† Úvº5üÎK›`òÚk67{ÈÖ®>¿%r(ÀqC!GZ]ÁýYis£»jG2?GЂÖÀE}+!y’ïòhW2ÔðMq°¦•“8Ü£‰<ÛˆkÔ“i.Ãÿ MÐŽíVk˜úcaâ°ª–ïžY„/¥ãÂÊV:—›"•yŒ³™˜»N1ß:ø4ADæHzõ‡Ätl›£)cf8$XÉ“Ã5P„i±_·áѪ‡2-ÛüÆ–MÝÊTï;|vXÛ͵z×gÞR`B×kš¼}²‰P ÊѺv¥©Ú‰3%r·–:€j…ÃÀ¨,èd‡Îo‚häò3 ClPdWʇhåò`‡pŸÎ´ !@HVm*‹E ýošÁ̪ƻŒå`T¥78Èt?»˜¬ÏV]“eüˆNCËŽT«HLÂw!:åû±"Fž® —ßàpÐç%Gê½ÛUP­9v÷eóýFFÓÜí÷'†©”—ÀDŠp=8ª%§'ádhZ£µ: Û±mù@‰j,o—´¬± NR5Vx1ûüaªþÕBdÐ}Ñ…Š0Óº#«bà³Óæ4ЕðzÑ>–k¦"‚“V Ÿá6Û*ƒS¼.¨â&SüÃS‹Ât;‘RvMÏM„õÑ@N„YÎ~(CÐ6´gJ?º®â8UdN%'_ØÇ|º§ ÃÈOó4ã”þ¤îw!h"ð-":?ZÅ?Ûk ˜}/8 4Âů¨œÆÂI?Š[ùlU˜¿®îªÕÃN§š‚ ƒ½mî N¶GïÍŒ+{N¼QRrìû“C X•T«­Xú“‡ˆÐ4<-³äf'L?4n?V=dK…Ëê׈bµK- S ùÈÑ1µ{©î{ Øñí š`RÓ¹‹-ÔÍý\4né ewÁ¹ö(aê&œˆ@¦’–Î iÉÊ+*˜OX½·6ú$®Ú™PQ"'o{¢AÚ`îá3•¤üqßPù±_þ¢;Ýo‘_ôØÊ¤‚™n¥h°ÛÐ µÏ;.”ÍÜÓÓÍm­­%È‡Šæ'±Ÿ´…á/=T«kcû·¬taôÝXYdâ[@Í Ùï!AK÷¢&¸h_T§…A°—ŒäI’üõif²XâW,¯ìú[„—æ`1E,÷8è‹»#MB¬¡ý.Zég|<í øªðçlr4ëPM «ðj Á“*s¶*ÎûFã}u’ëT‚R$LψjqŒÚíeÂ\›@–¯´`î|„XN䚈 GÑaµ4“á¶~XµÍ ®?cøc ¡ÂdͼZ'Çý£ÐrÅç£<:18:Cþpâd`(`mlA¥%Ô|M-qq’öDàÃ::NC. ¨Ó¯v‹‘>Vʳ×xu%gg…«p'É™ã¢\Æ,€Ør:½L¼Ö1Ö¥Ëo¤"¶¼ÑÇ‚síÝÞSÓ‚„S '…c"3Ãy‡9ß*<7œÎƒžÊò*ù8*ÐÝ…@!'M&XÖ¸$se2ÚÜ®|ôÈ)ª´{@‹[{(„“d™'ãk°©6z%5Ó¬³ÃícZ¨s®„›þ2N£wÞÆCQ¤˜ò9Txí°úiQé¶,Ðü…“;o}ùç¯Å<ýÊ„&.’§#n™×‘Hƒd*ÖW†in:u+Ö†à"j9Í߯/Òéõ(¿Ð¸¤•] SÍ ýí' D'@$$“Ƈ«’ãq¯/ư89¿ô{"Mµ¶ @„Éoi¹ÁÚåMI½&Z“ë[»\£ÏÙ$ˆ º“´ÛÐ¥ñ%AUU—ÝdºBÄVPŸé,Œ‚±&@8­©Ê]Ô 3ñþj7µ~î¼)_Õ³>+QÐn£i›”ˆó–àÕË¿¨à #•†VO·;sLÄÒ’$ÖÁ½ßÑ "`PÔĹ´EÔÎ ŠsDë>´ÃëKÜEnA]î¿¥Gà Ðß3›´öeYÒÚäE·ß½}Î?åðû‹ƒÃ¤Í'Ü.²hJí@7zÜ V}£áúý;Î&cà6Ò>SM+¨~žHŒŸ° uÌ #ùù \¶*¾e«ó®ßHŠDK ÂÆVð Z‰®‰,¡ódáfv´ÂqøŽR‡Õó)×>€µà‰ZÿÉ·§3]ÅÁskâJ Šo·scu\A²òÒEÓŽ|¿ÿõ ÓŸ¨’TMÑ·Ê=¬ u2‡x¨F¯wE›»¹ÖòZØ‚Ü'L-g8^ÅǾ”Í;A2ùZ²æ¨`Ä‘ÌHXzê¤ ×ùb¬¨-(Ç3vAµö4 Øõ¹ØÿÉÙ>d^Dç:?š¡ê®*h‹lXo‚Ì…œ;î|yV5ÎlÏ  Ò»w#„\¢ý®_í ÐD%HHÛ•„ÀÔàLäû™¹ŒÛP¬~—>@uÂ*($ Óô¶Ys¡e' cRJŠ’ˆG­OÔq‰/°(±ˆã!hÆ2n<ú˜2 ¸óÅ-çH‹„œÇõ0y‰ƒ÷ëÒÉ,@˜ˆrBö¹Žè„ÔÀA3ñ5-N ×»º¥º£Iëå$g×(7„[Ûø`3 VÖ.A˜Lçø£Ó}¬TöIÈOŸÌ×ïfI–8§Wcñ ޲í“q×;NŸyÕM–!¤»ë1ÂS,Ýuš+1Ûäîñ7€´Pô½_úl—B ò\#XßÛÒ“«¢õØ 3€ˆy†»@ܾn9/ÙÂ-÷å¡[ƒf$7¨ gìÒÒ•LåàɜŶh™ú3ýèqæÄCÔ¾'*M)=¬MµN / Ä“>óÉôCtk°@™ñ28ƒœØuÖ vÝOÈh0:~kˆ ¿ûå¾›/·Љ±ÁŠ—50£ÈžTÒnd„:-Ú• e<[GÄp/‡ú9¾Úú]YlR¸$ô&Dñ6€}^Ö$bµ'uZ"ÓvpîÃ1uBÈž–êLðû£ÐÝ8Ôµ»ÖàÖšØizžÖY)‡rÝÏ\Xú–ÁT`@ÓÐalîÜ>‡ÙX½>›®Wx‡Ï^!c×rÜ*ó¶Æ­ …²  ß@In }Wr3¢f{1/„‰ç^Œ·Ú‚eƒ)WVXpŒæ–B˜¨ûÔ{ pW¡¥ŠÍiÐ0¾}|U¸XÍyãÄú^'µtÉ ©˜õI¶x•oÀª{ hÏW²nG ÒŽçB@‹ßF5ÈØ:—V ~ÆÒFÌâ3-WÞšMWþ5ÆÛ‹ˆém#¬:‘ RºsBð¨C3O zy\{~4&ȹçõ@èÝÕðÆÀtU±öZÁú:îÙ}=þÒÑ‘ëÛߕЄ¶ç`þwÿùßÅÏ[Ãkž¼ë‡ p*~Ãð˜ªThŽØƒ„¦ ¥3Tö¼gþ”.º~Óy5Ù!ÂsÉñ ðlôÊuŒŒš“ùÜmìÑÌ4½½êrBÏãéö%£[`ÏŸ4Ÿ­o÷úr”3 0°Ä3X’ª[C)‹ÜÌy‹¤ËpÚrF%ëg'ÈEݤw9>Á˜cÁCØt%¡y ¸þ š &ëËŸ»ª¦D-†„>8,į>„ì9˜ÞhSB"ýÂÃ!iÜ8Í~"BãèŒw“º`Ѝi:™R"y ©üdÙˆ,Z Bþ@ÜÔtÑlÛù‚êT'ì²¹H·5•¯móZ؆X¾‹+aŸm{Ä·­5H%'”Ò:‘ë#CsæÅ Ò"ºŒ-¥!VâZUYNÜÛ¶Df ¶;¸³-öc¨rE: 3îCŒ8èGU’.zs 8 .Þ a.Ûèdk0éÜnvw3¶(ÜžøÜiÆõ­tâÛ‚ fùÄ’¬ÿAã-¨Þ<½~Âd«-Øy3pÜñŠ+Ñ-ž°Ž…c†ŵñkŒævg ³ÌîÄΩw俭ܰ’_LŸÝeü„ª#8{µ'FúÒßµKªZŸ(¸ୠ»­J‘À}m ÁÏWÈØÊ2:}úm “¾wð™Ûµ-ÖŠX„€gå¤úÈÞ3»êС‘HÚ¸¹Û¬Â³:.ZÔ2¶iyÀÁÈx‡ó¼q ÏsX“q«{RÜC}êA—¯}lVtÛ3­q¯ôs»³Èïg߆¹X;÷„|kºfmˆHPt,ùë·°&Wµ¹ñˆUk…ãJ–´ç0UÂ…ƒc1%5œ‘ =ègVÒ—ª[ÖÖ<õ@/ÎE/­És5)ñÀg™Uõ ܈:·H‹ìô]òKz¼ž¨ƒó¨ ¿¸‹Îk®Hºyùø*_Æ¢ç$þnÛŽÝÙö ”m9¡2¼ƒi!^¶ EI3#~Ìo ?p© ¾üò²”&´ÊÈ9ÓtœÈĽäQè"`Ü•Ñhó¬’ÈØ·¡¢m´çã‡&78I¢[øÄZ©Âo«ÞK:Ç *;ƒ=Û™T–íúä:ŠÂ޲5OI—‹çë…DÔdªàcý ãº^?ÈÑ‘ßtHòÏ£Éîj!…Ã|m¼v«­—/Ìqª¯ß œWcXmÀ¹‹>ÖÏG»ÚÂ¥zÎb"jÜhRß¼¹±ã˜:iµúC\ìµMVNL¯ë™i­µ1˜¨;9RÜ6:‡ÆüÙ§S'’%ôG.H_´íÑ<ÖX.šU ¨ë-¤ß¥•½º5\êBóµÜŠA°®Ý)N‚<©­uµžï¨êˆá¥ý¾UÏæ "¨ÌLS…!œ¯ø?ö'¢±õ±Ú™}k -ÉÁ{´N\:¤mt‰bwOŤÇÀ-H—_P _ôàÓŒç¥÷L;D2Æ£¹Eo*ÙR&\ ‡”âåÌOÇO¬¬Ò(u‹4ÜìCxWÖ"ŒyÉšÆXoÅ‚àøi‹Bí*lm—ÀˆnxH`V×…'Èå³‘í±¬š^lD0>2] ‰· è ?ÖZ"Hë{¾þ× Ir ÌöŸä=]„ êA6ŽŠ{…Cšƒy¦ö(tÕƒÝ&ÙÃiQ»ö8ÛÛøÕèâx˜Á}Ε:Ì„z2Ülé$fŠÜò Ï’uoñs‚ƷÞ³A¥±K½5xT•/­S ?C*RŸ(dÓ?Ç!Ë×bÀVm«v^^ÿ@søb'²íèˆ{®./¡‚Vªhõî\2’Õ‹ä8ÄŠ‹ÜîµHŒÁ‚Ùv´õA*fXÊIÂ}•"kæ:‚Ö.Z-í/€šâß3ùv^U·¹iÔ#¥q@|‹Á©m9X%®”{úîÒ·LLªfàöLΔL ÁD|‘@rcû±WÐU6j9m²r*yWÿ¬ª`·ÍPMµ‘¸}D°©N´ÙÄõj‹¶ñB ¶.ª%$øŠ37òˆ\¯/’ä Fô®áTrÝš ìFѧ“jÒ-Ѕ݆%6–†s7‹´83—Ã>ù[º›¥)NúÃ?¿ž)LŠ–”pµ8?|35<¹\Ó^®@HúÆðWÆn±ÉX¬ò²¯t%©ŒKXq0G¥=ÜVâ@É JÒAC@¸p óx¬§«ê¤šW­^:Ü#¯/tJ7„f ÞLîO| 5ŽB\Öv ŒkH¸†–ôD ‰â¢`¡µt‚øüh7 ?yF•vYR×?ýxXѶYP!ƒ¥mÝ y•œïBÕ\N¥%GµvÕU힢FÄÏ:E™ÂìDÎ4oøâÑZ N–ÕavœÀSÐàmLÅ ÌW$»•ºqû‡Vßdl¡ PW}MwÖ'¨ µ˜Úû»V»Ä5s`d µA‘Á×;©èX••|°&vj)æsóÜR½ê À1{«ù׿7šiuUog™š¤ òù|¶pãt“}{X· ÞÔ†JËÆÃå§Ñ‘âÕûƇ:L®ï%ai êiŽr-O»µm‹Lgæ^uâì^µ”`“ü\ÔU·Âç&¹6(m™?gÀ7i파––x»[Zi–ö/B•#®ç4ˆ—ç®`:èZ»HŒ¸Œˆ«MlA¬•F|·a«OèÑ´rk'™Ä@Ù’gf¼ÛGÒ=C¦Ó ¡¤S·€Ãñ¬£%ÞE?üÄäP)®ö²2Øx°@•`†i{‚9žq9üa®lÂ?VÜ‹l“7Bls-ú’eŽ^)G[a«'ëªB—VÁd5foa?+Ú'Ó¢b_J«º=) xß:÷Ú– 4¬ðüö Úíä¬Ô‡ˆ°B ¨%>­IÃã*x —òòsÚA™V§«ÒÍâùotÚ²Ÿ7+p?r@T¸™Ž»é˜jÛ #Ý£E<{\ “²x™ómÁ½rRje«d’‘lAз(¼ˆã_JI€ÜçE\ÊÓÕØ¾%‘çÂÕ cÄsô6*Y–‚rƒ‡¬hëܱ^Y8såûpÂÎ@&Ï`×é¢MIb¢ pïµõ7>dÿ·FíÚ. Ùïz.­ê Xõ'Ì è+ IZ蜼$t´ù¯UQޠΛàwwáûV½—´|öEYu€n‘çÄ¿`C”aÎ0YÕRUTü¸·/|`¡IàõC*}–AÊ"ú'„éÔc#½M`ʵß@;¶8ð~kÿôeh3ôct‡úIµííˆÕöH!’û­‘œY;èߣR¨˜)BšKú¨ÐíßÅω³Àø•iô R ùT¿%}‰» 5`SeÅ0u¦!ŽWWSGIˆÔr‰¼îñtÚ®¬šV»PáBB› ¸=ð(¿ª¯A÷ð{3;J«­Péá ÞÙ‰ém¤"|×ß8GuŸ“ìØà99Oµ‚§^‘"f–­')’åäL+LOíðÐHÀÒħ‹§kR;‰uÝ0;GÙiœ§. Ú?5¥¿ûZÉ'sG:ŽÖré¶Ò3ÈUñjÉ\Uý‚]iÖqÉ_ Ȧæ½óc¬XÓD…Òf^h3KXšøë|Vª{’qYbÚVûêÄÅø0³ãäŽÔŠI 7î›…”îåÆ>wÅ”êù·B>ÖM8üàpSoá{DÚ?Ľý‚Üu^ÓÌø\j{þ¸r9ú¼®n•Oû:IƒsÃ*•, °g|×ÛŽŽäfÓ\ÅÀÅýøZ¼elÖ*éf^pB¥ž(žÝ"‰4°.›-²¬­!n+n[8¢ŸdqAEh|ª±Ñ³N°f¢ïÄâ½ú‘ôìwøú>R]1ÛÛÂEPÁÁz8–¸{›ÁÚÔRçáýÔp]Å?1G¼Ðg¨æEIi–Å—i£+·è®¼nD3ÒOÐ*æé'9šP½lù KI%j´¡ ±e©Âça“,ý(í#3C¡ê ã&Ö½?j|—§n£êP¤‚¿S"å‰ÊcCáàÊ%q?åõ«x}Ÿ(V3mÕÊ0MÈRË®ü8vë5þçV]£ŒöÜRmB¿îˆ Zï<#à6BšÀ Ofa©KÆh”u9O-õ[MYò¸ô‡Å¦…×u2Œ *nÔÔ\DØèÚw`5?炟®cˆ% rô°ÙD*nN jÅRo?Ú–T½B&**idvPÂìJ7\ u܇ȥ˜UëÑr×Ä׸¸Ü¾þ^¼^íõú+¯?RãðíѼ?™”^/jE*°U0¹×AØÒþ½ ËÓ‡ ÕåÍc¹¿ió`&u¡O·Jô%}©! çŒÂÙ·ªgcÍÓXÍ*+¾Zý­C,ñ)Ð?ÛŸãq½ý4y Aõn"5CðÉ8­•|´O¯ÍŽÝsSˆ¹bûmïRLŸþX¸ý6~ñú.^¿Ž×ë?x½þäõúŸ^ÿÕ×µw¥`´’íi"n!Äé¾B iYüxŸIv(»=U¢¼±W!~f×/%mUN ²Z^ßÀFÑÉo'h·Yá4º`çvP‘Íç‰æ¥¤ƒ“ÈxZï+h²éÕ›ÕieuÞ]ÿ¡Ú¹× Òšµ‡#ñ,P„ϯûmüâõ÷âõú÷_¯ÿçõúíëõ¯_¢ñ[´„+@"§Â“¤+]W°w3S¥ªþ\ Ý/ÐPÂývîéÖg«±VÇõsru»ÝxcÉyœÈ2µ ìà‰Y˜Îùy`<žDÐÁÔÚ’½µ©+çk´gNõA·f »&2X{PW-)w¿½·Ï‹{ý*^¯¿üzý»¯×¼¾×—Æj U0Ù“ý Ò Y [­Cw²¢­¢ÆŠ—ü½ßVcióò^t{56óG ðú¸dqMW÷k7Ã& ï,ë±°#þµ,Oà¹Ùjl·-¡³7[Eıâú¢að ÏAt¹v¤*ÕÂ×$ˆH:ž}È¢<Xk‹Åý6~ñú¯¿¯ïãõ].L2›ªJ>S'`€ÐÈp”eû1­Fà™ú Çö"–«pu0,+È_×C‘îÜu·Kù¤*jG(\îþàÞFÃ<ˆ,˜!\Þžc¸Ì‹•„kuÅv_Ä¥äR6x®¹'ËnÕ#.¯ïJ‚廕u•ì{ÿë>>Ì‹Mâ*‚ð@ƒ=b0€@|EqeÅE]l6/œ~…¹.ôt˜a³‚qÖÐæ=8/¬#Üž ZC¬!Çò!ܧAÎévñW$p @Ü=ÇqËŠÒF£±áŽØâÁ¦J’VòªS7bêhÕ ä&¯M>Ë© ü»" û #Á› ù©ãZ•yÇT'È@ý¦uÁH¿[Z‘Xï2̼µj[æ1Tj!‡Q+‹R%z'­…[šjçÜ3QÅjåV¯CÂ-†j|s|ž¶Á£â¤LÚÖ–—Miz'àÊêÑU±SD‹JL«­9ȼøá¥hØÕ·÷Ž”"ÔtÄjSˆ$¬Â‡ˆW@*‘Åy­ƒƒèH ·ÍÔäEÒX·›IºcLã¼ ErBPP¼Çºá–¡;Žy"­fÝèŠÎä×â ÞR¹ L†WÕÕq™*Ž_ÏDWÓMASfô›"ÖÌ{Økm±–ŸOµYÛ=HäL—c!}þúdà%6Û…P|àÉBž]ÁIóA¥«7ÑÄÑ‘OW\œwöôN³p0‹vx^»´²=ãèÂOUÝ“oMÄ«ýŸÙýU‰g9Á÷H¶.Ür-]Âô…yérÙ¶ƒ€H9……•—(ÎvÉ¢4 ªRMN;„Ó?Rñѹ1X¡Bö^ĤÔJ)œv !*ÅËÀä©Âå<̘ÍcEtøVI½ÚmIÊÛJõ«Í I‡Üúšƒá†+/±`çã¤ú;F¶pŠÙ³$nI†ngK¬Õª÷ÞÒ:xJO¥ô¿–BvË@…ÀâÒÆ‰5K+(‚TKCmûSÚÉ™0)©òÂV—¼j/¶½Õ"ô.‹ÇíÀMj¬ô=t—8̈Ì× Íƒh)²Ì´µ>— –q7†Õåd!MA«ŽtbÝ>!~Í-a§-2tÕ³Úf^eú®¸ïé¶uMÒ«t,oBYªÅÈf¶`§@k#í6’ÁŸUâU©Ë“DN ¶Òˆ\­T×b­îÂtå«=ÅO¡ê²AñÝšsÄ"OÔþ[H‹zWÂò9vÑ1é_Œ½vÉümBÊ2–ñu<êZª¶£ùÍX¿¨j.jYÎjЪŠ.Õ'ë·®na179‰KõõS°Éâ²×Õ1«ýº\ÑŸ”›³œ ËŸZb ìÀë;bÁ‚Ž0,Z˜H0µÊNÛ1š©›ë€M\t9ÈËëk’ @V[ûx[ð ¶v²Ö-´KÒöìæqa=wP7]ËPŽC@Ƚ*t’‘Šúì“R)Þ(¼Ep’zÝ‘4¨=O*4Eô®kÉ=pÚL´ÝJ–.Ú"¼f©+èãb™hCFï5nZŒóe×3bPÃQc@PBä˜{efY_°‰ÓQt —f‘ j—VÛüoÑsâ»úÑ>hû[ð¬ 6*œît2«gº«öÆá®i ¬E1­9DàOÑÂ>Õ:˜¨Q8ÝhS¡ô9|$6tÒ>Ì”Èc54B8ÃÌ]Öân96n™ÇrK1+S7°“P7›’ßô‚1P£s£ •øàPÓ]˜.ÀŒ’Ö]¹¬:ÑîÒô÷jô¬šë$½aØÏ&BÑnùën äêÄkuóÐâ­‚… |¥šÑ6x–÷BiõƯæˆxÓT'µ»I0¾OÈù-Ñ“ƒ.ƒÁ=ˆy Û–‡Ð•ªU‹š¥)Lãˆ5>ã4ý¡U×Ë«ЬØ$¨’y¬TÎ…ËD³ß¤6”ÑAѵ!Ý,RùÍêû¥Ò€ú‹·Š,6Xõ^÷rõ®òê©Û‹Þ„`­Á‰´äZTƒ÷L¥ ºÕq)Þ+‹DŒ[¸#¤n±Õ¢;ñJa†á<ÖøÀây„k€ø¬RÈ¥Љ üašpkЩõ—kcUË`üüÿôsõ¡¬{ÚQ ®b–¥xÉýÌt¨ã ëï¶´7¦jÈ}ŠnoD¥ZïUäŒm ‰Þkw>½PßwrÛÂ˱"Cî_*MC«³(u€œ!b°’!ÀIòøÑ‘æEt‹cK˜JÇþužžD!x U)¯'{5|78M\˜‘·"¬Ì‹¯HÙ·‘R+óžÈs¸Ñå.9ÇV Ûãû@¤¼_ÛxZÂÎòŸÛ‡%È-'cEè¨æß÷o´À_©C „úÛty‡"£–N¯¾&±yÒ”ñk¡²†Þ‰\!Es|f-Ôƒ¸µ«h>éR¸Ôdø"÷…{nrqrüž}n§öÈo·ZY0i{W‡Ý@ä°Õ}ÑrJUs®=ùI©´ßîˆ/k2GØ+ûQX oí9ª/Šì‹š¯‘XiTý-‘㿾$ßëý'pÀ6:‚»9µ7‘ ã&vK„EÏõ3ô˜)âlE~!‰D°¢j1ˆÛ''fÛT€³eV5KO®½õ³€“ÿ\FÌ*/¾El@ÊL œ¯y±\"ÏuZN‚i{àí_á~Õš¿$=ßñê§ÃUHÝäÔÚŠL)¥•bEþÜ7Âë‹7¹Ù³‹º.QCÝ•‘¯éä§hð-$[}-‰Jϯ«³ ²‡ÓíçÎà Uø“06ªÐ[b0጑ާ` µÅ+iMÝ¢ù;ÓnO„+–x"Ý4NÈöYbÆ!°ÙVfŸ£íõ%^¿Œ×÷žn–˜,&À~b¥ìô¨Z\iϵý:× ÉÍ–å·0ûÓÖòÀ÷K‹v¶Z¬Ã3rcP€£:^Èέ¾È \Á0íº—´.î£KÍŒ_ujÜf|îŒtó('6,?{ äçBHºšˆZ|3ð£%ð(u{!’vàj7TÏP R#•¼$UEÒ¿±5|ÚuŒ„•óÒlKOªÝ®ùÉ-–[‘r¯ÊÂE$ åÕ.ÙMMÀ•D…ÚbæQLÙ·cõm½Øî¤ÒdÙ§ÀE8ºúíñ-^øô˜˜XV’«ËtNžXyñ£¼¢0œàN¼o×:œÂÙ—NRŠ£Õ¦3a˜œYW!eà[q–1Àné'¥y@ 2 Ã¥T…+áºÅRâ‰(¾f*¯/?âFŠ©’ê¶"ëVSÛüƒ²‡mZüùÖ\¸î#.âf°†;o*´èÜ¡Y˜„±–pwähkma"=Ÿë îÁd°í=„Óÿs=aaÉbíù1ž--Wjoï0UÅG¥9¹ÿ¤PÕ»ŒT¿îý¯ ›CTxÕ‰ŸÎ0‘æ« æ_ïös‡päÀ’Ø'®ˆŽÑ@öú–Le¿Ukå·&À¶îl˜Qç€ZÈóVr´Z–>^Z ‰¥B¸˜ wºSÒIÁÛ²:>Í9ÁGH¡Ã®Œ(ž=º(l/²þ5?›+}@¬Œ¬˜~ím§´Mµ ¤ejìÌ !/²…ýqEí4\y]~pzL£å„ˆ‘Ö4Ât &¸ã4}'Ù9e÷¨ ±Eoç Îd5LuÉÍ †´7fuV¡RK³¶áÕ†{äÝN(:G¨Ú$Tï‚—êƒdÅAÞSˆÜÅf¥P·0-8v?ªÏ¡ý×7ÎVõ u øTfð®ŽÞËûý8E4Ò«T‹IrÎB»„o$\BESL³é/NªCCWž.6Zíî"qèvXoÿáG*€ª¬n×ÊB>ºF.ìj=¤¡ <Ï0«çº-©&FmOj"·§FåòLTÚìêŠãéîÅžt_€vPq¿¥åwzÅç/^ ‚É J}i#-Å£˜*ÓÂÊ{Èß;‹z+:£½ßõp˜è_w´k®[Iõ‹4ëÔƒ¸ÊPªï––íƒA]!§Ø¾Œð™o‡Í*Ëy+åÓRÖ#Ï=[NÑQ¢a]ïþW÷ÙBq³“|Bã½ûA,ò_M—hÞo¬ô¾°ús!¹ã¨5yê=½´ ©{Ü]¸:û©"”â…Èp5%FÄBrHÆ&T yyu{:©©‰n+h OÝôTšÚõÚ6{+Úf¦B™rbŽ~¬pÔÓ3‹P™Ûg%Ù]D îC¶z¾ü†¿i:9{Ú¥Œ$[-£r?ƒß­Ÿ,†aªÉåO=´k ]Ø)ÐtBÒÅq‚ô"*T-®ŠYͽ¥$mÞø ÍT÷ᇫy1Ø6í‰3SÖâ`ñ-RL–-z›¯ ä>>8ã,ß2áXêv¹Ú"íÛÃÕ¨­`²=b²zŸÁ¦Ç¬‚ ê'J+bljšÙ§d…‚˜6HÞðÃ`Ì@ž}òãå l~ºn•)¥(_ÜŽFš‹Z‡P öõŸ–Œœ¶Ÿ¹–ÜU)BÇŠêÈ@U£ˆ'–Ë['¢5â9Tn{ƒ»Õóm›d€îëÀ®/lá’ f›ŒÃ9‘W®ð™ê¬áÖA½È«Ã–»«ÙLK«Å$Ûª¢ÒA¿nÀw|ºê‰¢-pÑí4q¼R󨾋ôKqÐBàcºÕÒÎK¿’öë§ïÚRu ›$+=Õ¼¨†Ú*mPºé–"ƒÌ¨ß%0èŽGŒíª v7`·oä–þçõ ˆ¥iÖVâIäü¡ô¤Âp¿ì¿¥gÆ=¡Ü8ÁWÕ; ÙéÚ÷zÄkx*~,*ñi\ ÕPâÒû¹Ý>ãJ”×KB· îbšH-6Î$:Bn¸õ² aC*õ–}# h,fК±x…4†h`´ÓGa 1pÏMQùYç„­ua¡Ýʸߴ²D;@U’¤™8{ÎNÛ=|¥øçêoA_yýrge®(;Ä ZΣk”ºú†X²"Á~f{¯ñr·"$¬ã%´hð\¬´· É2aÆ[¡B«IÈiÆÆáÓv¬Žcº2ÛCx`÷QÒQAË‘T‚Í»e«“WB̤gº%M˦´Ù -ô ‹YÔJéñ5å-%’ ¹Z‚Þ$}£‹ ´tY±j%ÀÎ<2´bwj­»ÿõk–°Ï™^gª®Gÿ¢†›ÁÊëû~‹½Ý®<+øº$EH7ÑM£ òk[–ôç]‰ƒ´Þ{U»»LマËõ…'ˆ-§Œ*Ýk³ãÖUȪ ´®1RtkŒ¿-ÍoOä=ÿjÇò]*'Ò¤˜J {?§NœÀªç³ôlÄ×ÑÙåž›[±VxþVa)]ffän£žÇªò˜}„#ÕeOK̽c$”ÈÛ_)6¥GÍîY¬WVg~"{yJÖI K¶AELÊ‹\³Jy­RÁ`ˆ¯Ínww*\^÷*­sÓ¢ííZÂõ§ ´q*aß6ÄjÿeP9ñÏ‚° 2…‹9vµ­Ò$ä$ÃJÝcžÐ&hѽVôè4?[RT0]ïrJ´gö"loUô?-0xUǨÈÀ"SÜÙ1;DIl;N0'r:ÁéÌ¥‰Ç4#ÉêMÀ¶Å¤Æ"ó’öå_Àm¥Tiá¸?I¾Ž.äEÚnjWufL7·7€KØ]wט›‹âÞÚÃbù·Ød]$=ÕAÿ ׳{ùC`^cÒ‡*yý»WÀð ÁU­mº~x•µ#À à©—E•jùáŠÐØÊúT†È)Ä]¨°àn)—@Dn²XépÒ˜vrâû>î$·ŠÝV à–º"sÑ-¥ ¾›1Y ›ÿd”M<ëÃy…dYC ½ƒ—VJ+*L¢fB²Q(#’º4 *à;zƒÏâÊA¸òÚ—Pô¡ù½CÑä®5Öû©ÍG%úײ‘£c)/3û_OÙ×êp׃o›£©F%ÀØÖµç6)fŒfŸò…×D¬qߌë,¸…NŠ{T£$çÙ±¥2P kAMpøLZ •o­A »ð{xÕ̦ëÝÀåð™UÐJ >§òËìT¥À» &}bÌûĽ>B‚ËßJ•Ý­øÒ,‘W¤¸o› D¸5:eÛtÞn´5¸+]1~hTrûûŸÐ+…†Œ¿YŸ'ô’Á”±+íÁÏ;Øð³ÌÀRH¶úɨ[“™ö´“¿l¯Á½'Úxq0L÷ÒŠ¤\«¤i­PÖÖ¼óU©9jöâOG¦tm©Ÿö¾`\4‹äàÂ.YŽi‘ãVKtéx å°¶Ù£3ì–©´óY3Ë¥ZuP½V…ÌÕ OÏCok&mÇ]éZÞç ®Ü¥²jA=ƒ.k{œ‘¹4ýŸ„äsúW¸Œ[Wi ·ñX Ig¶8n ÄݹÒBKɤt¸ý`ÿ@@¿ðø(¬§,m²²Gš¥kµŒ/•\êLÿ‘nj±&]‘yÔ*6}ÑY¬ÀI[¤¸¦S[ égjÿɨ+yˆE¨à-ð…N(Z†:Á²Ò>äÞ>IÏû:ƒ:Ï 3¤¹ë+ðZÄ…ìB:²ž©é3{#:í(¡#PqÛ–2´ò«üØ –%¾òR‡-Òy)$¨Uò~D ø>~¿xÿüXÃé:›Åµ°µ@ƒ>gÓöÞ‹µ‡Þõ‹ìky}‹ãW«Dºæñ;74H“•” *T6*“Š[ÈJ(bµ–‡].îË¢¿Ò˜¯›±:a‡"§–x«.; ûó€&ÓâiD7’3ô”ž›!ê›tׯò¯W½5W7k–››&*‘yFÝç×ûtY~oñò4ºìB‚ ÛâýÁˆ½[¶ÏÏíPÛþ_÷ëÔFR¸‡´Ôíó\ˆ$üüIq?kà¡‚F¾ê|g,ÅÊg²ºk`4:W¿%X.wEµÛwV«%ß;Hð[M—Cèoá°B[7gÑyq{BUþ &6vÛE‹· ¿øâ鬫Ø'sf•AªhV= ÁílïíÚà!qš8¿T5b›Q¡Ýé;‹òúl?}¯ÝÂøóŸRbáW®õD«¨á–ThkÄ<> ZÕŽ¨æD¯á.!I§•¡]»Tøyhµ<æÕXßJ r¨Mí¿õ[jEJÚd_Hyr¡?ý”ˆÈB{VòǾ'ªPr,«LH¿µv´¨­¡K¨Ý«jÎíÇÃPLáˆ"8…÷ ÜT©(:oâå®Õµù”‚`×™ªëÞ|}‰×w?™Z°ö¯se½Wý¡vÜ5ä\mÕŽŠz ¥"€ÒeÕ¼3ÉHÎ;ʇ-®‡ ‘’jœ`ù[ž£#Ñô_kÄ$€äŽóm«vï¡ç–ÈúÛ&“FÌ]wJ+OwYø'í\—CTÕjß;„_,Ðfcoq¼×?×ýp· WÒŸÓ)v`S›j,}§-\iëׯðÑŠýÔa =»ÒoV|ñÔåäscüÀ%ÙOzŸ&.R*‡¨ÉR72=9Vm¿Kë`ŸK#ÏGX‹y+¤±}%×v2Ê£¥=%iG†­£Y¬žpfèÈ>9´¦]*ý{«ÛV/w ’»·mÏ3Ípå·{ï÷oã¯?Š×ëW¯×þzý[W«ø(¨_•¼7t&«jn–.¹O›¤R[Xƪv"I*ª»cYÐEúámåí¾M‹«Ü Ú¦Õ¹°3®>v!ý»=è6>;ÌÛ]¬sú‰±8¶ $"y‹î“Œ®w"T¸ÑPžþð4¿ž5“„ÝF<ÎJÏ\ “¸¿1üp=5A ôvtt—›kÙɯ¯×òzýã×ë¯}øricl/8¬ÎîR Xÿ½½$Âͤ(Ìá®,öå0½N_?0m›µ‹¶òü%$:¸I‰’‹pZVTüîoJ÷Y÷²’')bÐÏóï„ßÊþ±vK È<°"¤¥Ž¨â/V£ûЄiPî ‚nÕupŒÚS†€õÁ°“z:Ío,å_mÛ±l%G*ˆÏ’G‘ˆìÖ¿_¼þëx½þÆëõë×ë_zýRe Õ;­Z€ .Wà›¿We °£XW¨pqI7æ§I²uMÌ„ùŽžÛå)ÿI"•~£Åg96êc ¥TïEp®Pmz{n•2ûã`öÑCÏ cšÊAdž}[¶Šú´!yPcBÈ®DÑæ¯ :DZ¯Ç Òœ‘AöÇÅÍÕ `(j,¾bÛ5ù>µ_¿Ž×¯ãõ]¼¾oÔÉTîFÑ®Á–$ZY»–kz“×",ûð÷RÌÒÍ!O¯ÝPÚ+y„•]ןLÙöi±$ÇÒ®ÚJº™äN˜¸Ø Á ú bRúÁö¾;¼&²ª`2Vc»MØô5ˆ6R5Ñ¿zÈ‚@5k%Ö×jƒ@ùä3+ö?ló–kÚ³Šv&Ur[•Ô~Õ=Ò1žÏڔĽ+$íÝå]–bù±jÂôÊÎX8{Þ¶08ö/RAˆVwJ¸ÿ¤Ïí£¾‘öóÒ¢­‡wC¨[Ø–é-$^éBP¢”´ßã †ÔwÛH;áÊkÊѵœa”ÄãYv“Áì¼#ý9'ÊNk›:ú ˜kd‡r1IDATc’'ñÏøKû¦ÉþŽÏˆjJ[ß?Si»¶ÿ*¾ÂRýìÅÐBÑw_¹ì{ìù`ƒï³þº>…õ—•]µ“[Kýç–˜\FD°”I)ÖFx>À±3ØõH­ðZ‚ÛJp¸ %Ü`âÖn\áuQn­F;ÛuÏYàmz{Ë“°:ÖŽÁ® â°–HûÅ-Íx ?¿ˆüG•{îQ\‹-Í Íw%ñú§€¼÷9D»âªÝ×z¬IϽ–è)|Y'RÓA®…jÙ@ñÎŒçLºÔSŽƒµ¢ªLŸ4EÓ2.ËÄ´(°y½êÑBpË‚¯âÌ¡æ¹1ÜFZ·{ˆøY o+7‡/†”ÅU·I–pÛÆªJ¥ šXƒn\3RÀ¸諆ü¹}e;«Ä'‘ÏŠUòúe¼~¯ï›g«Œ6jJÇ0«Ê5ÅÒ—u˜ ¾ÿüõ«¯ãÀé˜ðžƒ8;!¥uë¨TÆSÚ”mhHQ›//‘ Šií_V¯¨E5£™-é稬d÷iQ˜ý<ÜïîAÜ>z!8´—»¶B ιã”ebHhéöõWýó oò¡¢ªïÍï¡íºÁÀiIë¶"ËZ¦²rƒ$$c±l>þŽX´›¥ø¨(Ž}W‡Û¶¹²<„×—xýq¼^ðúï~Ä4»*-½kÊkßë#]qEAßÿu fBÖòú™é2®¼»à-:â ¤¤Ï¦µVá6>„kÚR í+@+¬}ç¤/&%òZ‹ºShMÝ.%Nu@§Ë”ô{]æD,-€T‡Fmõ¤ µc¡ÕêT½Ê׊´ÇöÃ:=X÷øw] û„ÙëK¼^ÿÊëõo¼^ð&:^‹‰«ÞàõöÞÙ>§%\Töãøú+˜¹<¥EgvàÔª_GU Ud¹Ÿ¥÷¹•¢SØR™ÄÙ• ; ¹„î¡ÅûdivµÏ¥5VÇÞß›µ[lͽyö´¤žî¨ >ÄÛ!\ŒAþ¡Ç,\÷™ˆí`'œ—§z_·ÖâØ¤á8æ\Q¯eÞ6êñ¬ôˆYNºwe³ÇÂë|¾Ñõ?½~¯¯¯¿ŸL_Óµ%®\Zéhðž } u_â B^å ®›æÁ©š"™˜ G¤¦š!‰Nçbé;~ê×ým^¿I†ª†ÙÞ*O§ 6 2ŒX÷æšKUÇ"É.ILKIåIÙïâ篿¯×_~½¾ý­ ŠRq1ZÓêÌ¥yá¢Ô·05*­Õeà)€ëw•œ]ˬªMµ˜ §ñ¬RŒ$›ñ+ ø}¼~ùüãÖμ×~›QÈD…9·²´©nÕ.úS}¤„+}¿t&·mGAô’ô–NœGö< Bý§}¬6õ«~%”nlÏÄ`LB(ËŸ6 „¹§>}Hs^S-fQ)³Ë2á帨ØnIq4õdÒ’²/ñú_ãõú—_ÿó׫}³ƒÁA—¬B÷QªmµÂ8ƒ,Ÿôé]ÿÖ5¾ö>ºJQó’+åur¬¿ï×—¯HàûX¿þÒXÆ×Çõ],Î[Õ„uÔFÒðÅkˆê\ŠªkÜ}Ëö_ ™é?ì`¦Æ-ÓÃM€@ãóá&÷vûÌ•K Ãt•Lbæ†Tõ»{:»¦Pný!œ¨N™´½¢ÑÈꜭ´Š(}Þ2¯ßÄë×Q ãéx®ŒÞâ–»«H:\ñ>µ?¤ÒYHoIŒ%톊՗½ªç-rñc%°=æq{ µ¯¾û‘Bîû–ÛH3¶Ý"‹Ô"àÎ Âà-¥J žË•# {ÕlA_ªK\jÛ€ê:ŠÙ5V…#ëøf:BX²µDƒ‡Vë©nf9ß«gÕ¦XÍ?ødˆÈž´.è$­i7Ën?ô+¡ÀDKQ©z†×Cj™X"xÆ•ï°Gˆ(ü;*ŽFdt§khÿ<À¥]ôù[Ÿ:/¤ó,ìÕ-¥Ï ÜízÓÐþ6_ßÅë×QU~écO¹Kp»U€Ø'Ö¾³ë³½j\U ÐÞe0B°ÑRÀ±ì’÷"üé#b‘9$^NYç©û«EÔ©²x¨ˆ(Ò%‰õ9ȹˆ)ŠC‚àl6AV§ÅÁµˆäNH*Ú¶3µËWÛ [:óWà·Ò°¨H¡» °íŠÂ’1 MD°|ÔUÀi¹ÕôçÛ¹"ˆÛå£þ:^?^ÿcïÿ$ ‚¥Ÿm ;E6¨°¸µ½Á̪½v(ÚˆÕž$QHÖòO[ó€_£„rÐzhyL,]I¸²Õ0 !b@Á’ða’8‰TÍ€`,RØ=XôŠÓsÑÕÖÄHálâF&˜íÄÙ>áiÊÀ? &ª{TH·Ø®«1–jά²MÚÛNïÿ]ñ·Ý‰ñCøˆ0¥®–'ׇ+ºøþüÔƒãúu>Øëï¾7áõ«Ò¸`÷Ý7ÂþÕ¬ã~G}—}·ÈSí÷“v•axŒ´JÁ?ÊB~¯?¦jUî#­Á¸K¥ÉÝ·{3öä£Ü2W®XαõþˆÇ+E=2öƒÆ˜Ô4l‰4D»¶ŠÒgÆ!Ó ³Eã|9p£_¯ÜÈ¢àz ´ísjå×®ÒrFÁ5×¶¨Õ8êÕ:«ª±öxöú.^¿Š×ë/¼þn\AT÷¤.Ì¢Ú 8ü.&r¥Y.üÆÔ|rHm‚U½å*_‡˜Ê×<àoÇÇ2[—–m#)TŒˆÅ'ÈÚÃòµ gø³V0!šÑ+]l*Låj?'x?ƒZ-ð Y|û€ŸökÒsGx:'ÆÒ •ª©Ù>º+ùm—‡þÜêUpv!þÅfÊGàëÔÓ$)ßeý¾öc¾û¡á$’R© B¾Vr¿ü‘ÂÅ¢y˜–þïnßë7_ÃÕ§Ü™{)&yp§ìëüsÛïG·C»×õ¹—œÈ ñ|a‘Ž«¿¾×¯ÿ,!²"$dÄtÖâZ3%«6ã¶tSÆ¿½]Õçh¯AŸ¿êXXõJÛ¯x-`¨ #aµ§Éö¢:çäÊ€iÃ:]A¦¥Odƾi™¢S„ëO.òÊ•ÐNº>M 1-ÏpÑRÚ;pËÛoEw§+£=¶)”4™ÛgfÓY1K®¥:sôÙ“é…y-jS±J!¼DèêëT>pn¤ùê/ó«¯I@ë Á6ÇuËP®`°Ak~C0ÑR û&LÓ¸ICÁ%¹U±ªu°ª<î^šA%ºÚ­ùkXÞÞIÛœã­Pݧta ”ß#ý$ö¨Ë\“ÜÒM›ð×|þ[—}‘Í]ðÉ߯/^ß *W¡ªxMY©üàå[ ÷7_‡®Þ¿èÍ}ßuåCÊ.A«Rlº>I‘£T:aKµ}•XÜ —´§óîiquõ/Ž©×÷eu% *ŒtɆİŽO˜ê–~•€Cµ¡8Óyâ(âa)9˜T%ã„Ü]žGͶÒw®d]ý&¬Wç~8SDí«˜˜K —kr} $KWÿZ܈ê|Q º*.úî)¼ZÒg¥Ôù*‹p%#|Ìú>®Zvøõ—^1´«VHeš¢a-œPa ;J¼›‡íCÒ‹&•¥§kz»òE uDólæÅá¹Oˆ×©Fuº¤Üœ÷]…Šé$ŠðFÑ Fr¥öõi³ÍÙƒŽ\­øz…UmñЪΫKШ¡¾ÕýOÒZjÿËm_£Î§ÆZëW²\t¬#úà“×xð)k~¿xýq¼þi¼þv⦶‹éåçΗæÔû¡ù»?-à~o ŒwèŠÌ‡%¶‰±Ý„%E>RÅEèP½>qR-ÝÇJ„0 ³é °Õ£faò›¬³…à@­æ@›(#%Ü6DϤkxyÑþ.7 &7`Ùq¼;áåMÔˆ#~(§4›½…¤RiŸVýá­#åEøÜz…¦¦®T©|j­[E‹+Â& S ¥]½âZ`½¾ÄëŸÅëõ—^¯/Ÿ2+6BÈ9…ò«ÛÈo¾j½ÿ'huUU—þ¢4¿C¥º.‡OmHK—‡•ÿ¥æ5é¹–¿B7'%àXG·>©Ú'c«4Y"%ð¬LgH4†ý èá+ )òó•ï¹—`›Ì&¯«bQ¥,]Áî¾ô0@»»èƒ~õÐõ‘£TÌ‚t¥-3=ŸÚåjûË›£•@ÆÑzý*^¯/¯×¿ðú/"µÏ®¨"¤Ï´œû‹Ç[½âSu-ŒŒE´igB):H½„§/?Ȧz€;g÷€ÂùíÍì2Áq@ÖbгÒ-˜Víò-l,ò%¹í=Oä³MÑ9Ͱ±©øHpøJUº*ða¶^·:9‚«3eýk5˜+K¯·0µÀÜ­Îeºw%…+œª!@Î]Q©Rÿw»3ñ®¬ñ‰þQ¼þ8>Òé–é̘ß•‰Ýİ/?€ë[´Žª~¾–Ã)PÄ Ï•”ð’y/*½â¨Ù“†Ø #ãÄj$“¤’¼Püð27¢‡D+UÌÒ£„ë ’ŽÅ¬“ÄKÝôs]ù¹E´¸Pf`ò›Þ`g€v!:tµšÕY@¤êå‘lg·@Š^Qšø¤íµRã±ÔsV£—×Sl•‘Õ¾$´‚†p9¨ÒDýúÞ¨}U Ç•|¸s™|-Jyíx¥M,Xu-úº”\Œ‰Ó߸tÝD­Å«xC¤½Rú¢ †ê{§ºQc¥¥ÉF­äòÖ\ã%ØÃ0º¸U=XmQm0«’€M)Øn$eV([U2·k#o‡#)_¼"VÝé¡ùáATÇÓçÌ]h»Ž_dôË…@ŸÎÕ.~ÁË|U+q›¥ê½ðù×3p {­³T-oOš4Õ”q:^ÍaÏO­yeiÆ…î(æ#õ¢…~"Wƒi çX ¤Œ]Úº‚'²¾úùÎFŒ¡LQõž\ Ö¬ZÈ0rõŪKÏŸ°{µ°' Û¼qE*7©qKÿ–hÞ†:TD‰ªäMù]K_*6K0}o‹fRå ò¡äUó¶¨PùÑ,|îô°&YÈ~©TU,±¿Š IOç)IsŽ(”V¾ÒI¾$‡«6•˜¬O…ù¹$4ÉGÅá@”ÒÄ:±šÖó>–u>ZÅÐáø‹›PWÅ"|Íþ:¯á„ÇZ«å2àh3°YI7‹¬nótËut‰švAØ>ü¤ÅÑ—l}©½>ʳ}ŠO’N;Ul‹ªÒZ¬è—aÞ¨[ÓþëÒ\- TK¥ÒÁ5m\¥°p%±]a§5ÏHzôƒ;åw±;“Y¢Ä' };xR‘mœ,í"Vúò–ÜÇ:-#«tp5ušÑ Z=².–&ô”jÏÙIÌ ó?¾ÔJ\’ß4:›Z#¥ó²6¸E§>_¢öZ[ÖçÎëKÂ[⪦ú¶²]š BÀûJôXš|Õ`ï®±$5Z­‡•$ö%R¨“´úÚõ¿‡ùöì^ô [“­=DÅŸŠ~xç_ÇξûQñúùÖNuob< »B›˜—;·m ޏj#/ëgßÿ¥ûßüwþ½ÿåû'ÿïÿýþ«ÿâÿñ×ÿú_çz®çz®çz®ŸÆõWÿæßùóøÿñ?úÿðøoþÜó8žë¹žë¹žë÷âz"Ös=×s=×s=빞빞빞ë¾ë–ÿÙÏ~ö<”çz®çz®çú)\¯×KE¬OäŠøsúÿ×ÿ þäŸÏ_i?ägÖ7pû_‰?òùßÏâuý×ÙŸüY}Èç_î™}ÈïÛ.iÿäg¿o»„|ˆý ~/¾ùÿoÖ܃ >×s=×s=×ïáõD¬çz®çz®çz"Ös=×s=×s=×±žë¹žë¹žë‰XÏõ\Ïõ\Ïõ\OÄz®çz®çz®çz"Ös=×s=×s=빞빞빞ë‰XÏõ\Ïõ\Ïõ\OÄz®çz®çz®'b=×s=×s=×s=빞빞빞ë‰XÏõ\Ïõ\ÏõD¬çz®çz®çz®'b=×s=×s=×s=빞빞빞ˆõ\Ïõ\Ïõ\ÏõD¬çz®çz®çz"Ös=×s=×s=×OóúƒâÏ_ÿìy:?ñëO"þäy ÏKz®Óë}Ü='ÞOòݼ^*b-ÿù¹žë¹žë¹>×Ï~ö³?ÛCò®˜}ü[íéÿõAŸë¹žë¹žë÷ãz"Ös=×s=½þÌQ¨»n`ö9ðoµ?¦@ü×'b=×s=×s=×Sc=×s=×s=×s=빞빞빞ˆõ\Ïõ\Ïõ\ÏõD¬çz®çz®çz®éõÏ#x®çz®çú©]ûLÒÏ~ö³÷?\ÿ<ýÃó_ QûÛoü¨'b=×s=×sýc•`ŸNÿðÆH©QûÛoü¨Ïõ ‚Ïõ\Ïõ\?¡ëõzýN}Ýø«¿Å·xj¬çz®çz®çRÅÖyÉxWôzj¬çz®çz®çú&áêS2¦P籞빞빞맮n¿žˆõ\Ïõ\Ïõ\÷‡«»êª'b=×s=×s=×ïßõ0/žë¹žë¹~ê×µô©Ò?¼·6zìì·ó¿Å¿È±žë¹žë¹~Š!ªý“ø òêg¿ÿ-øETð¹žë¹žë¹~?®'b=×s=×s=×±žë¹žë¹žë¹žˆõ\Ïõ\Ïõ\OÄz®çz®çz®çú)^?pÿüþÅÿþÿŠ¿ú7ÿÎóPžë¹žë¹žë'rýù?ü‹IÄZþÃs=×s=×s=×O±ÆúÇÿè<Ï⹞빞ë¹~Ê×Ï^¯×¿ö¯ÿ•çA<×s=×s=×OùúoÿÞúÿyÓu¥œ¥«IEND®B`‚saods9/ds9/doc/user/binning/detimage.png000644 000765 000000 00000410274 11332353404 020525 0ustar00joyewheel000000 000000 ‰PNG  IHDR;ðþ›#{bKGDÿÿÿ ½§“ pHYs  šœtIMEÚ8="Õ IDATxÚì½y”dWy'ø½È5²¶ÌZ£JEII¤D¤¤ Ìj°)aÙAÃñ¸åÁmá²Ýrc÷q·QÓž »'’ /AÏC1žilhz°i[ÇxVцÃöR@ª!H¥’*T¥ª¬EU/k½óÇ»ï®ß½ïEdDdDÖ÷;uêDF¼åÞï.ßýö€1Óoú5 ¡'1ÿ…À`Ì®Þzï;ˆ"@èML¿é׿¿ðñàλÞöÖ{ßñìñÓD@ ô&ž~òñCÂÁøóËQ„@ ½ âXpµàÌ©çÏ6¡QY·qæͫ{/±.œ_V¿=òƒ¯½`S°iÓ¦K—.ýôôðæ=/Azn©1vú±'—.^ûòŸ£©@ ½ŒóËçΟ=}ËK_šý–?øŒŒŽ­Ö½8Ç‚ P¿Ývãôò‘ïì{ë[>õéÏø•Ëë6 ª×äŽÿèòú¡³c{6¯ßDS@ zAÍK‚îßëâX9ã‡u;žyâ¹0œß¶më×]ósÇ­oà÷Ÿ:ôý—6~ëñ»_z̓¿z×o~íËüÖ?RÿQƒ@ ôÇʵÄ9rÉ¿U¸7“ŒcÛõ·>öý¯œ>}0—Ëm8ìàw·ßp;œ9vè…ðŃ{îø…ÔvìÚºé×ñ7îÙ>48pòLôÔ³'þ˧¾¾tú\ò^xï;ÿùÖñõð¿üåÿû̱“âÆÛoÞóK¯¾uÏÎ͹\ãøé¯|ûÑ¿õCÆþÏwýêÄÆ±¿úÄC_ûÞÁš À¹Ó'NolÚº½æÚÂæ·ýBñÆl»ÂØ#?óÑÏ~S‚@ :ͲÀâ…ãÞÚ¿~‹ëòòÿýÉ,÷j—¡_zd,—!jç­¯y*üÔ(œ€+WN-m›Ø±éüá:¶kò® 7ÚÓwÝ{×¶‰õcK‡Ç&6­¿íÆÝ,:yùJn``^|페]Àm×n:täÙÁ¡Q¸ëg^rïݯ€ƒ‡ŽDËç_zÞ{ñgvmY?÷Ùy!ç-}::{*¿~¼wXV À°CÀú±‘òoÞ½.?üù¯~;ö¦×Þ¹}|ìÿúS´”BçV‹Ú9hF³÷Ø÷¾yÓË_™zoí_¿åþÓ§âÏþ{ÿÌu¯KÆÂïÀàÈŽÉ7[¨ @.?øíܶí/Gc×Nç×§6}˦uÛ&ÖŸ¿pñ7Þõä‡F6®9{öìØækGàÕ·Ý?ñô ×]óó¯šzàÁomزk}~äWßx|ô¿ø‘üâàðè+§^òîßÿ?ÿŠ[?û•ùc‘l*»råc³û`®þÍ7¿vrtxè“}ÿ§ÏÿíöÊ-›Ö}ëÀÿù“_¿r…À¿ýÕ×ßð‚íÆF.\º|ðð±¿ùüüÓGOÀ{¶ÿö›_¹mbý÷æôóÑî¼éKá£ýì·`ûĆ·½éΗ\·chpà±§ŽýÍçÂÃGO|ñµÛëͯÜ:ÎoWåÙ_{Óô«^vý†±Ñèüŧü˾rÓžëòÃO9öüõͯß4uË{vm{ÑÖуÇ/@®+¡Ó«š½_ù²}ñ?|°Êy½÷?ðé?ûÝ7ÇŒJ|4îuq,g7Æ6n^wÝôùCá¹ó—ÙÀèXî±\a÷Ž=Yºúü¹óË.Žýé¿û­ÇŽœzìÐÑGŸhŒN CƒÓ·\ øø§gÿà7vl¸áš-ÏFìæk ÃCƒŒ±øüCë'¶­ßöãFtäØÉÛÆ'_´ësóííý­¯»õ'O½ý%׿í®;ž?wþÇO6&6ä_sÛ‹¾ùíG‚ Ø:±þ¡ùï;qòå7_û-7þþ¯¼æ]û?±qã†w¾í ëó#ßô§gOŸyýô$œ=õÜÉçžÙy͵ô›oÚ¼q졇?±ô–7¾êïýù?|ÿ'Î_–ïÎ ýÁÿü†uù‘G~üÄòÙç_‡t†™¼a×ݯzé“ÏûÄçZ76òò—ÞpöÄ‘ó;Æ`Ëø†Ý»vlÝuý¦ ëà†ìx䉬Û0A<‹@ t^ÆÊµtW€Þ{óí¯q19ÿ½ÿá¯>ó§ïø%0Ø•úÀæ}ôij'Ï}üsß8»{ò±C÷>ò¿ÿ{ˆmrùÑ‘‹çÏÁ†‰f@ 4Ã|r Z¸+rø½®§‰ïÝ÷þ‡~öOç5vuçk‘÷¢ËPuúÈã—Nüäb~ûÆás.\8þ<\xîÌs×lØö‚,ýîãG¾\ùë›Fn¹qÏÿô ¯ÛµcËÝÓ×ðÓáàpþU“×À7¾óƒ 7ðí?ýº;nþÙâmúÄ—ÏDç`tdxݺ|0Ë @LlX§Îœ½rù20ó-=³iëÎåK {âp~Ãø¥Ü ^8 ¿ñKÅÛ_üËëò#â–á`Ýè >r ‚Í;¯}ö”TëmÞ4×íÞñ˜_¶ŽŸùöã·b%Þ¦ cðÔ3G!—Û²ëº#'ÎM%W~ÿàáoÿà§·¿äº[oºŽž8ý?òÙÆRôgs_xial×ö‰#G¿êŽ[^}Ç­'OŸaW®\6@1m¡ã2V;íX®§)š=ç½rßݪ.ñûÐçÐ÷:d,«\>³tæà7Ï]|á{£ÓÇO,>˜ƒËpòчF6¼edlƒ¿«Cƒ·¾pçwàòÒÙç¿zà™-Û~ôk¿øêõëF—Ž>}í/¹íÆkàî×ï~}1¾~ÝØèÔM×üè§Ï\¸xixhð—÷¾úÁ…§r#¹—ݰ«°e<üýG?…Ë—/ŽŒÄD¹tùòÐÈh.ñ aìÊ«_výk_þ¢gŽž¨}àãgÏEñGïÈårAœ8õ<\SØ6<: AnOa«xàÒé=óì_~ô¿‰/Oœóõ7ìܸg玑á¡ã'OÿÓ×þîÓ_ݸåU/»>ýOßüÐß.N5yÓµïy×¾âm7~ì3_zøñ§ž:üæ×ßqõ»r‡ž9úÙ¯|ë?ÿÕüúMC#ypy)èGøú÷~òâÝÓ·¼ðßî{ëg¾ú½åóGG† :á}ÿï¿Yš~Ñž?ò؃_ûî›^3uùÊX¾péÏæ¾ð˯yñ“7¾nttéÌÙ|êñdž6 ÅäŠÎ_zßýï¿q÷ô]¯¹ãÀÁ§¾öÝG_{ûÍñOž‰rìý™[ÆF‡Ïœ[þÜCÿ·/þÃë'Ž.ž¾ùëò£ÇOžùø§¿ü‘O|~tlãÐH>70V@ t˜eęwà[_¾åg~NÍì{cÙÈù"b]Åo™ù/ÎþÖ^ü½ÆƒãúX?=|Ôøáܳ_;zê{‡ÎìºõgÕ—±+W.ï¸yÏåË—O>ýè©uë¶_çéù•+—Ÿ}òÑË/^ºtž]a¹üúñõ›· >{èÑ ËçÖmÚ²aóö¸òùèìÉgŸ Øñ—ÏŸzîüÙÓÏŸgÀ‡ó'ÖmÜ<08<<2ú保\¹<¾m׆-;ŸúÑ·`Û nZ·qüð¿wéâùñí»7n)ú'gOŸÛ¸ysaÏåKyâÂò¹\n`lãÄÙ“Ç»²u÷‹¶lÙþÌáŸF§O\ºtñ½ü{·Ý|ýþöÓŸýÚâæÂžÁ¡á“GGgÏ\\>wåÊ•ÁÁ‘ÑM[wå×mˆµ‚±Êñø‘'£3K—.] ‚`ùÜóñ/]X~îÈ—/^`W®är#cë7nÝ5<’?öôÁóÑóìò•ÁÑuã&¶ äi5„ŽâÔs[nÑÒš?ò/¹.¾õ•oäÜëÀ7m-tâ^qúe|¯øuéèaYË`€Î¿vììØñÒ×CN“Ë‚+Ûn=wáäÍ7\æÌöÓC?9{jÄÆ›Ë Žoß}åÊ¥‚ ˆeŸÁ¡‘ÁáÑ[wær¹ÁÁ¡‘¡‘QËå†GÇØèØÆÁ¡ócƒ —ÈÅRÓððèÀðlÚ¾{x49‚ñí»G×mŒ{±iû5ƒCÁÀlØ\ÈoœFÇ6Œo½ˆ™Í躃CÃÁ¯ß}gw<ñTã†k ·Ý|Ýóç¢úúw‡Æ‚ 7°iÛ5ÃùS,€\06?\ʼãÛ®[?80ärŒ± —/ Àp~ýĶkr¹Á iüÀàÐàðð¦-;¯\¹<00?dhxxp˜Ø@肈eJ-“¯Ú›å.Ô{¢í÷_ú#ˆµžîУç–F÷Ü984b?wtÝÆGŽŸ;üÜ#ËËË/^8sñÜè†;ÜM†± 8?Û¸y‡ñÍÐÈèø¶]âÏáѱa+Û|Œ‰í׈ϛ 28lÓÉ“‡†Õ[ÖOlµŸóÌs§ßðòë^ñÒk£óæyü¯ÿö“'Ϝݺ{gËA008´~|«H†FF7Œ¢?m°:ë°¢/Ð;ZA›Ñ­Ú½Æw±VðÉ#'®ÚA4’]?ž#Ã@XC¸°|.zþ”¡ óãÀæ×o[­{Å7Ç6õ¸ú¨Ùó{³ ¹]“Êe®^Éзø©LÔ¥´4Žh. ´q…vgšuÐŽÕ.vÒåejÛ:ÔµúÞÂ2ëÂÐôˆ9gU承㩤î‘SW—›ëàÜk=íôзk¶@7?gm;ßuy¦tbÄ{yê÷ˆôЛ]si¥×ØÐôš€¥¶'U8È2Fk•ÍÛŠ‡ž’’Qsu‡¾©)-˜G SHôåLÎÚ.¾Ûå}&×…Þ¡³UçN¯טÚ5ÃRÒkûl—‡f­²«Îv%ca›îzyXíæõ¦”Ù/ôôÙ¥"êæÊr°5ªvhÈíݼ-œIðà ̸ëÙ®µ«%F«Vkhº#ï¢]èڸؤö4À?Fml3ú(Ïû<ýÄAòê.´,s¬;­Ê²Ìmú©×ÚfyEk'ûàλÞöÖ{ßñÔÑSçN/}ôÝoªAL H˜î7®IU\ƒø;'7mœ8vøà¡!ei"«³m­_Œ^`W ˆc„U@<ÅI<]{¤!'«È´W WÒf’±Ð ŽE âX@ Ç"q,@ ˆc@‹@ kH6E|Ϣߠ×{hëYzþ.Ъ\ H[Ø#@í)Ye,ZÝA*mV!>OLL;f–/›jI|£§=Ͷ¡£,ßõ–•Ÿ´Ô{›}އ‰?¡ç“ŽoOVBA@DXÅ=Ðce\ᦀZ‰½ùõiÀ/»ˆošÝîыѣzç俦žé§ *ˆˆ-;ã“ >jÓ¶µ)?Êx­¡-hç…X–è&H@éã'ú«ØøZÛã4£$'.¶·ã6ŠA+ŸN.š¸ÞâºÞø¾ûSº)ÚªB¤ÚNamc°©]†N‹/üš¢vÑ<‹FÎP=µ]wײ̡Ê.ÙyÞÊ[›JÿfE±vi#l¦E @«Å¥HX!qzv?Z‰˜ÕT_ºó–•ÓãÙÅ üÏioûWBÿŽàÔn’·áêA®k‰ÖÏʉÖ^骽ƒÒÍ£IS-÷\ÙìsVHÿ–-Žtì#:.c©‡_Zu~úöѲ½&û—mÊf_—ÅŠã¹=þÉE+U$jØn~Yè°*v,ƒD´èı|Êt+!jf$£çžJÒ,F‘ì_¦¶!Ë{3¾nåîøY^—¥›žÆ75¥ýd§@ê˜65 Âå$ÂZ‘±„ε-õ¾ôгŽydB&Ç":…¾SmõxƒIUH ŽEX(4@ ÇêP*h@ ŽÕØ¿?@èM ˜ıHÀ"=´8­ ÐCðT`"ô2(‹@ ı@hš®ÞbÞÐjòì5_ãÇUB¥0´ZâÙ_¸©/ÁªóÛ_'W©ŒÕlMXÚ8²0~…m"g¤ê--”B^3'Ö2X†o®Ë®×n—¦µOÇM”Å7WgU:[dqÑÒªg,0Ÿ©·ôrã „«v\Å2Vêž…žp³Š[.&Ôwè…â{Få'W±]»=ØxpU¡ Þí+©ñC€Š,ÍÒ§)ÙTeQ†Ê–ž{¼ñv™(áj³Ö®€]ˆÇ¢Ý¤)I¥{LçT©®ºõ=ÕxPH ˆc‘ ÕÓ’YßíÝ}Ýx¡Ŭµ‹t;–í^Ïf×®d_æúòj³²‹&6ýmWrÕO¼É›*HõHãI%H \UÈäyá2΋_]ßCf;¿øþê”ÉT²ØDðÓ?û55"WIã B!«VÝ RÏÅþ»2~¿†åªìd$ŽË˼Ù/›mLO5ž@¸z¬ñþQ–&@ \•‹”3@èŽE)šÂÚ«øþlîQaÊC2>œEÀ*æÓ+ØÏa•äWãâ °Pþ/¾‰¯d°+Èç„ÚsÄcÅOâ!òË(ùWAúe©¶9T«ã˜››#"}Ç®‚ªöMü§ý½ç.BPŠ)7¢?Å;¸ø‰Uj%€:° AX0ÓמSVâ `@_À A+0hȇד‹ÃF̃ uù+«$7Vx3øÿj÷‹Z³YLo•ÚÑf?qˆcuT8Ž@è;¸6P›oÅŸ î"¶oãFgò¿NCsþS Ì¹Qò8`3Tª ãÌkB oØLƒs 0y”f,XLÞXᯋ™%LrËLjïäÅÀŸóKA:›’Ú-ıVû÷ï'"x°oß>"¡ù™Áf„H!¸”Á½¤\Wz„MØR䧘]q¹gHd/!Õõ–Gœáqy töƦ`~·Pås³˜ç"”5öÃXæF¿$¯"ŒÊ%¤ž$ŽEVÏâäÉ“DBÿ aª &¨‚С!EƦ¹€³ H³ÈgíPžcÿÈX Þÿ?+ŸÆŸ9‹?Ÿß¨´PÞ5ÄxfêKù3Ö""‚*ÀlfïƒÙ)˜Y@…ÓPTÒžÆ5xeŠT!(Ì<(_[­JœQñëK\[ȱ˜pSÅl?“EeÎ m U°+Ñ0á—H‹@ ZäR@}(ø6]S\ÆÆ&¶fÃeÃËÔË䇒ޒ:g¬,Xnœø]MÍs(qñHø¸ó'Toõ –¸ª'7¹„ž&õ]Q6&þ3¨L*4©'œlQò6Û|¥é“®¥z ¦p,;Ó¨'÷(¥%íeÐèíe`Ú—u)ÍKðÁœ …¡mò1"@üg9ñn˜‡ 0ó@ü”¸20€`Z¸ªCPL<>ª ƒ)q¶T¥Ÿô9œ.H§öرpXø+Œ6‡š|É¢äá‰Ç‡ª½4X²Æþë’7{@v¬«‚W„Ö`ûPê,Cû‡J A•;8¸Ì`.'oóíyE. wAHØUÂTb“÷>MPeÍé\v¡”x æö³Üì–??vpŸ-4L¦k“{¥Â°dza€åi0-–a8Rd,O©‘ žã¼ý™û]%"!Ú‰’ÜjU–ƒ²+Äã²lÙ.ì¶T'qU.Õ‰¨^r{ÿ_4)T4{êóU£QÿÏ"þ̘ëÄ™fýšoM£íaÁ¹cœê‚TaÎðËPÅPµkY‚ˆ[´c Ö•½ìl ·BÏI]º!VÙš…Hõà°m<ªÙIefœ?U…žPô¹ÄSlT¥,Åù“È—‘°"ÉÆJ CªÉϦwÉdò´ºÞý?\“KÜëçѨâ°mZYÐ"Ç¢c;@¸àó ¬h‚‚-„¡ò“æ骎ïìñO‚3AN(K¶¡ ^‰Ÿš88óÓxO•33Ʀ¸‡špºÓÙòÏ‘¡&?TŸãò¿Èެ5ˆí?[Óï‘J@ ô“De…Iæ+ÄTSôyi»R] -ßÂrbÁÒýTY”¬µ±Ø¤úG$§ –´3–Ÿ±ð)áQ˜Yà-/)-ŸiÀ|#ö¹ƒ0[îòU„³ªò¥–Z·b²óÖe,ƒÓ*¾f…3ÑBï‹V(kñäÇ4ÒÈ¡ ³ÃüŒ¸¬S‘::Îj\6²õoÒKQõäŽÍVø IDATÞ™¡]„Ñ2¥ùE€rÂNêRŽä:Iជ AЈÝåUKúÍ+²)o¿IËH3ZáX©µ†=|Ž$-°6X*“´îÎŽ§É(:tb%éË`Ü(tt†6Ò(,¢Z³„Ñ+È”8Ï‹Ý1íâθÁ,2¥¬5€:06%ý>@+Y¢¡,yGò&#Dn¯u,‚Xu´=)Ä7vtÁ«HÆ"= ;XJ|iÈFögÁi\N.' ÕyÏ6zÉ÷–eð÷)¯&Œj¶`^ŸT'l†§\þ{A¢î[T^W—R”æëgÖ()AW …ñ-"üIcØ%…PuŸ«d‹ËÖã©Ê=[×güdÜBìªû ²+aZRÐ)âXh> [ï'Éø\‹/ÊoŠf厘µ@RC„ëë‘E8éq§ö²LZÁEŸ$å’h§ [.J!O$}W•²ƒuK¢ÒsÛ¶:“Eg¨VGd,@¸˜–±«lvåqv›µÊbÁja_ÄA˜Ždmª¼,/"ÌER•7[à*Á ŸÔµJ§Ï›dfŠóÂìTüU0b¬ Ù›Ð7N&)+í´«±(¾vaµö± ”ó‚@ šc`H¤0êRXÂ] ®&uz`—ÒS‰’¾,J˜Pů¬Ìêï­6â»`X˜äY£QYÆ ‹ƒJÝäY(¤œØÀ‚ y!.ÉefEµT˜ú Ð q!Ö<ån'„•ÁðÀv]ƒÈUuó–8%„ê‘á’ÆìbÇRJ—ÿàaÅ‘ƒ@O§Ë9Pž[§b;“ ´ õ8è:Ïœ+ªpᩦhÿŠ<a¬“äḚ́Æåm’ÊfO¦+IÆê8æææˆB?2*©° ¹p`dÇÇ«šL›ôâñRÁD7D')J×ÞPO2ò©™dÅg;y`Qñ,ébÞÌ¡.“Çדèà’RO+Î{»˜<<ç0”åµâ_ ‘TP2Õ©8V÷@u „~‡T¾9 Ž˜‰‘ì­ëey*G4±Éc3]`•ç=Q’môÄç ‘T c¥Ä#c2IËTGê:ÆH°7(L,&ªÅXœbZ¡,–p)ÎðJÓ6 _ “jÇUà$q¬UÄþýû‰ìÛ·Ä_ åRU.FØEžRŒ–‹½„¤S·ULJÌÔM%‚†”ÉòÀXª Êe/¡ÊµZV,–©Ž‹5­Ö"EIª ËqW¥ä]…‡ü )ªÄÍf0ÓpI®¡@IB¸ôNâX$`õ*NžJÚ~”ĸ<©’’66\I!¬${ÁÂ8Üø9€ €Ç```¦£…8‡¿>q9‘ÊÆXݧf¦¨C0´¦Ì&y˜êŠM«.ù–Ýk‘*ÞðBì”VÐ#l­1Ö"¶‰NK<²ŽQ¢ ½Æ–œZ¸ËsjGRÝ^8 ô Ëß$ÑÔ-zåì¤ã©×ã<¬ä»Å°i©¹þpÔe~tÎüF% |ˆLêñO<“…Èé7},ÀV€‡`~êÓS+ªD’uçîì†LSñ=‡çô™ÜGIÛý+È`^Ðj”pö0[ÐB€EÐñü0}À$ÀNþäåî+LßÓ(›‡‚Y¦µ²&ŒMÉ@«R¬Œ» \õ9³Ë  èR{áa³œš«Aœºn åášaZB¶È(ެð]( ÕsqvQ©µ»²Œ~ï°+{¤zjæ´Ð$ã®Ö¨Š.Cò¨lu¤Œ=€£ 28Š kl¯&Y‚Èén\¹Ç×|#v‹åB’è«`‚Y  ‚iˆÿf£LCðÞâïƒQ~}òS#¾L65¾kX0¿ 5)6Á,@ D×dfB“9Í"a©.-­p,Ô¦B ñÕ:n·ÀxÚ¢cݛ쪣:½ÕÚèÛKU²c5%f©ÌC¦”ÕÔÕ½Ôˆ~eå½U·rç+‚×֕¾%É·8“€Í›€Í[N¾™I>@Á{Ø2°eþƒ)¶ îgp?›6£6=¹]ÍìyºÌ[Vrl$ŠÄXoér&´KVt>n,v•ˆI Ñé wì/QŽÒì]½¬ ìŽÄ¶Š]£Õ | ôÜBö¶+¶c#[ êh\^Çwƒi™n’—ÂR Ž€È<Ëô©º¬eq^Áé½Ïü=À›aôaX^ˆkSE€éûaz*˜^ˆ™–™kª¬å ‚O0È”h⺼EÞ^Åò3U}i]ÆÊ¸ª×6‰wst£ïæyßUñÙþråwõãõ¬”Öµ»Hï·r š+­Eˆ®úµ^.§A޲¬ßó‘ÌIò Ð,[œQ…‰ÐS€ç¶ÂòÀ0¿5`,Nx1 0ÿ̼–ؼÎEÔôKJ{€ƒ«›‡`4Q –e3Œ:aš·} !è8ÇR·9{—\Km¿Ah%OVÉÕS4ô4fBÿË~† }xk£¶’am–ª½?¯úNÀ2T…¨ºš÷Á¹•â hñ*óúšV³X¦¾­j U›ÊÆd¥ã™… xjËÂtf§`¾T!”Ê5%Ý{œ§ ñ!vSœi¨ª¿8ÄX†—yN)Á–´Ó@I«ÎÕ†btf»äZ] sÌHÞ–¿\ù]ž±NýrµÆhUÞÕÚX´¼šüãÒ›cÔ§Ê@HK¤„Êê.ì‰8¶“z´ˆ2}ŸQv«¤_YTêŒÄ¡N³˜l°X¡7[`¥Ôc~ÓhH“²’!w1á^Â3°ž¨'¥à¥ª=¥é+Ñr½_¨E7«¢•OMy aE|Kt¤wV2ØøÞ£KT…0µ¼!€©+Ó˜YQ/™XIb‡ëJ}áÓ­Ì*IØï"@`¦“Ü÷=ÎÔ.3Öv˜˜. –¶|r™îôarè<ç["£ ÷ž¯ ’«ô›ïB1@ ¬UxB¬Òs,Ù"”LTá¾Å¥94¶x©å«c¢aЀX¡WÔ˜M˜‚E€åF\™»¡OÌN‰"q~&þ–Ù)UÍ(gHÁKÏ‹!{‘‡ AÐ@ WªG8&Û¡$„«YÆr}ƒz z‰ S—Xt²+»*‡Y†¸œ8+.P˜-À|C­EˆÂŒqNÛ:Àô 8¯å¥C$ËIÜù”ï'q¹á  dðrUa“ÓR?Éf q¥.Q K­?b  %<½E–¼‚ı:*tKDXc¬K<´/àtÝ)´¹ìa"Ëð§—XT¾™-p)ª¢Û™`ZÖóeî Ϲ”R‹D:뇉߹Hî7-ΙӤ)e :pwö™†ôV9gål©l¨¬š,<{ÙâX•Å£"ô¸èàð¼Pëh àSw^Ôó®˜erJáO±œ” ¶¯™U¾,+YKJvÚ¸°}9IÓ.«gÅ×$ì§, [¥€=gBµ„U,š¯ã1êIÄn=)A’øk6žù"hhL±,’&.3z:¯É[‚]‰°eé©›ìªâ4 vJ+H¡Žamõ/w©òøO%+Å‘¸3Ì"ÿÈÏÀuqÀâ*?M'·‹k’{‘Å¯â³æëŒȇ°äuA¨’\^Š_Òâ%<> ±O7n¥æ¾ê”ŒE¹—š‘®\ßh†’q\êÍBËß/âl>ŸÕlF~Ÿµ –å¯òâyþ?ƒ€AÀ–¶°™€rñ¼ü ½hY{¬|ì4¦Þο™ÐêÉ0[à6­$®ó×ô~éÞÃôA¡ÜíÇÜ܈Ð2VèL]ad=‹¹E¥1ÓþˆRìe.Z¨%‚ËdÂbª†˜Ç„w+'šºH)̸¨[¼BîOÈÿŒ”‚â¡‰Ž‘•%x}Ë ÁXU’Wµ ã8ý¼$”® lƒça… ²x4@„¾DÝÁÉ*xÉ 4Ñ­V ˜jÑ_ÛÑ•Õxy_ÁâÒÃ00 PUÜè{ˆxlçg‹œÓ¨Î몤( ‘HÖXÒ’êò"53  ‰ÇÊ+\z*(.ȇ»óÿÕ”œı:‹ýû÷<Ø·o  PAK!áHÐ(Å|] œ|¬+TR¡š7²hÊVk³²RpœEPóå™ÌÊš2S¦}ÒÓÚ2½Ù²…%0XQÜ­(óò‚&€V] ‹Îï=ŒU¯XOÔã´êœÉùkšW[jÍ_‘­"ò©ß«"¿²Ù¤n=ƒ 6«‡TsR5¶ª>MþšG:h:7ºZˆv'ŸB õ9$cÑšïEÌÍÍõ· êñ"rD@X;¢a`{ÑÇ"¡»H× RPpšt™JvæF°r z®t= ½Ëÿ% ÐJÈNs• ¡¢ú™d,B¯@Íî¯~âªm–½tïW…îÇJ-;GD 4'c©‹GÍËn|N=ú{ûú<¨V[^­ó{³o¯6VÑD#E tPÆR‹|ŸS~*‹ZçA£ªr÷÷šì5š{¿šóš‘@XM+ã&î?ö®½ƒ|÷Ù•ažG{D¯¼ÚĬîËñÍ’,a84_,¼ßѪèÙ#b cµ¡8–ËLÕšLÖìJÕ ’‹@d':Š\——1ú}ßÉÆ–Ô Ö¸¦ÈHö•go4@BÇ9–-pØì+é4º:‹?³Ù¡GZ j7Çš@X̸fŒ5ÐÔgtñôõŠrmý«Ø€–¿\á£ún¤h€’±|JÒo¡8)+Ðt£Úq)@ ôǺÊ177GD "ıúTˆ@ Çêìß¿ŸˆàÁ¾}ûh€h€âXt~ï¬zÅz  8­ùÕÇÜÜ\p   Õ«@PÅ¿DjêÉøXA±ÅçÇ÷:ÿt<ÓøÞ™‡&ÆgõƒÚÙ–IG á%1ÐÙ¯C~ÿ?DÅ*æ“çˆ_cƒ¾%ñ½òEu¤;ê7v Þ£5¬ ¬PN¡‰øÌ¯W:ÁÕ âXÐP"e.ò?ùÿE|w±(w´¹Qö.ļÁ`?ê¯1 ´Y©`è½A^þi°j£wædðÅŒÜ+]+hg¬èf|U{ãŽÑìý.æ'‘§*t–/{³S]›0î ‡Ú}:pkUØ2t\®‹³+Öl‰G}ÅÊõ‚}Ú¯Ó¸š. ‰ÿ Öh·sµ:@]cÕ®©²OõQMu6«Œµ¤ kKºíé–tôûrJ%‘¿*tê—«¾›¯Õü^©ÔîÓ[“ªìbGèÚ…]jF•o¡¢XvšÑf!HhŸëW‹Þò–äE]×:ù½«å-ðæ\këM¬õƒºßVDÜ¾Ëæ.Ý9Å£-i­SÝÄÚà»YºfO9ÿ÷Y&]ÀB ?._vÖ"ôfÆ-Æîïb\ÌÌl@]¹½nÊvâõ¥û,šïB^Zæ®"Èí–M û2­u;–±Û§+°\ú={ç5¶æ,ŒPe{RÏ?¶è»«YÇSä2øM)i@Qc6eDþœš|¸m» ªˆP% `M!—}±Ïª}ªa£œ¼ý+x5õ=°éÊ#cy„žŒŒwå(:Û#˜*“¹$C*]ÅÇù‡ñÒî%a~¥teð$ß2y|Ý©qmDz9“­´iáKBG'M0ÂJ¤+À‰\¢O.(¶{TÓè{Ì ´_ÃH~YÒ¤7ÁÃ4«Uȹ¦ê†Ž><¨*y\jXæl ‘öÚȱ²ˆ,-uWÅ¡ƒNå½/þª³b%,g-9ÚV…oùý)R%[3scËv¹-øŸo°°ŒLª—„!娱ýmsWÌùÓ ªmžŠ¡É_m'ÆŽ{^ôìšØÕÕ)X¤v¶_BaïÃ`-©òß$…§¢Éü"ˆ*¢©‚—ü\Òîµ­S¸æ^¡Êv*çS5£ u“¿\­Y1« YšbÓ·jϲêŒ+»ãåoÉ*6¯ÈÞµ~ì¯h3ê|ÑË=JmÛÚ¸¾˜Z®ŸN¨?žXzgÛÞ?M<Óø½ØßNãQ꯼§ïD~Š¿„´·‹'xš”Úx[áXèrò|“ý×,««½+°)Ó}{;ÒÍÕ•Ú¶ì_öT_V2ÙúbOìß[c ’i= Ê„KèWI’Ð!P `âXBûÅRˆÚ‹}ûöQ.âXB§˜@ ŽEhH'ND ˆcõH'ND ˆcõ:H'ND ÚªèH „þ”±ÆÇlj(@è޵ÿ~" @ z›kß¾}D@ ôÆÇÇßþî:9¬žb0¶÷‚Z²wZÒÍs5xUœÈãXÓª/”ÅÕÐæ^k’í5˜ñºNcnnNˆw«ë¾Õ;-éÇæùÜe ~||\¨giÕJ‹âjhs¯5Imù ¡?@‹@ ı@ ŽE „« ­giB+ùB¤ÓV«!‹öt³m=U·©Šq t£"XkrZöÝÈÒ75[úh»ìÓÅß#;K¬:ðωÞÜ]Jð~ßÖ×üHh«>Þ§-ï_šSË©;Ôìî¼ëmo½÷O=uîôÒíã'öíÛGlœ@ =rŒ~û»?:¶qâØáƒ‡„ƒkæ”M „µ “cíß¿ŸˆB „žÁfùñλÞö§ûÿê/>uïÌGÞ÷¾÷e|«´þ+z}–¢×Ø_ŠoXh~°ß(/v·ÁÓ¶ø.ãŸvAèý³âë”ñ?ÿê×D)ôlv,ŒFω_'ZÂB`ózþeE)$ •'$OCºl¾ùÆ 0V@)&?‡È÷¢ üí¡>¦âÏHïWˆÌ(Ù‹ŠsR1¶×žrÈf…ø¥¢§êÐÇA:Ôº‰´*Ô¨a’Ô WEPIC¥ƒŒä°†ÚX q­bÿo‘ÝdSbPìYªÎ.mŽ½Úºh‚é¸E^þºHi¼:ç+&yµ»*€vS¬AõQbÚ˜CÏGdÊœ¡õØŠ¤ÒM}S5æ²r#爋¥ªÍ¨H›ÆÚ¦Áؽ3ùWñ©_~çûî¼ëm¹ÔÍmwPõM;ûWµ)JÍqõiâ]bΉo‚br[Ý|¦¼¦Š7ÛÕYcúUÙø Êÿ©]ˆÛ nMâVqJÆ_Ê®)WŠ'ð?ó•PúgGP”< ¨Êž² yeVLÔJum®ENq/Ôj%GC€ï—è8Ͱ0ù³$·l¨[ih27X AQylYù©®MäÀQâDŽŸT!(LÌ.¨ñ§“Šï;ÁƒÆ‚ÍÐÙüN(ÔdO%% ¦ Jê©1È'‰)ÉžÆÑ&³¸q¶ {W—wÁ$ï «@4äÌ/rÂB`¾Ê’¶r …æVÀ›QAv>íƒ,*K²0³ÓAL ¹á–”R& 0Jfi|AÿÏø±bnˆ>^Ý|@˲I|É— ¨&ÄI¾á=-‹’iO~…˜|Ե݉Šä¾Q’s/^Æ”ˆ§ÊrƒS2älÅêXŒ!È'+·,‰&ÇW_V,Òv!I¨º¹G™üiQ?r%ýb€™FL1>mê|– ÒqbÖ!Èc3Ü–±Ðs®ÍºROñÈa*L—R„­0åEæ©eòŸ´äï‹q8õIøñ¹’•7§ £¶˜è¢O³ïB$Eût©ËIæéÌ8qW¹M;a…Ø©?tw³¢Õ—¢Ä‘r’Úæ v$ä©Ö| Û+¤ãH«I)˜Ü(ÒheÈÍÆ±‘-‘E} |W¤“Tï‘y}…‹,¸æ@o¤è²)"‡úP,ÞžÐT ¨K`õÈǪô`ö(DlÊs*æŒy¢m»–Â@Ð#lSJÄkãt>…BKÎcsÿ‰LQÌÕó²äQö‚Õæ[ˆˆ¤fûUiIŸ!ƜԺá ß–I  × 6»ÕâjŠæõQYƼ÷p,G46Ê.ej+×ÛSû›Ê¼Q™M ´…Mq,M'fÊÔ’ad4·ì?ú˜{Ó©8™%®ÀIvƒ“™»L¤¬F›“¡:ÞÑ! ÕG¨ëú"ÓDæz6ˆ/ÿ4öµÙ´†È§Šƒêe§Ñ›„œbCd¶ã;šA®HjÉì¥õ7>èJcƒåG¬ ªiCˆ¨þBsù¨³WãÊMAgö:Ä}F‡ ¢.CتÁ*Ô7²‚ ²éEÁUŽb]-NcœQPé%’#ídÔ"÷þšœRãš~Žåڳ졞5õûTQÀž²(Ä]l£ ©í]˜IÂ[9«vM\à¨41@™˜VE—$*ÈZ2¬Yæ:ÇN5Š˜GÚgІÍ\ò“!R²ó†Öš·Å5e›°êö!Q>*ÄÏžb²‰ãŒ,Ó”Ý ß<‰üÛ¡\Šl’bjRѶÝÈ9*æP9«ÓØúÎæ¦áÇRO¡ÖAdXC‡+¸#Ó^Ž6Ã%êiÇ…Ða«æ¯›’$Š0)<Ò,gª‰È\PÆÄNì‚æÙQ7©9}9L™ÚÌ ìZ¹¸éT%~³+ãö‡®ãàÙ,ï±åÖ¦D@T›äÚI¼Í«kr™ë\ÊI§ÌèT’z>ðЧ ¤}7'V¶NF#E¨Ÿ_#Ì £‚ˆ‰ˆ"">Ä%N øÞŠ ÁêjG„¤x_°…”)âyP ­0þ2Ääªñ¯Ñ«p\t®"‚JÒȹqÛzK̓ƒíµ÷q[ól’nš°"Þ%&²t˜¶Ï®ñ ­9ìõÁQy°)Z…‰ê8tðûЭ–¨`ÉðKBE®Ð<ioÁ<†4jDÃq´"ñLiÞºDnh8ͳKÅ<¢!ÓÃÖ+f× f9ȼ¤59Æó.—O†šñzœe†ˆäŽ.€^á3¼¹§rF½kSd÷û¶Ø»§¹õG™Nâˆ^Î:S£Â™_JF˜™zµyR„l¦†;–GI¢í‰ŠÏ8E™A@dVD>§$T5ŠJW6UÈé»™nŸššl‘¤¹oJãªB/ÄÅD‹*&Uçfû7¢Ç).xœBm³b¤ =Ëš1êjb!·¡mÚG¸‘ÒöAEgšêp0TƒÁTý„sšEÖp‡úy+tî<ˆÂãd:Îß©Ëc½OeYt€žÝÁ³Mà{V¥E_Ô*“uOSIš’DýôAͰvcRE·¦Ü.l³ÿ™.ÿ{Ã\€ëМ¦T±^ÑOvª„íe0vcS|E±½ŒÝ#\ä’Ž}(Ø}ÒáVkÛ¦måñFáNÿ¦F¥‚xÛ¢ªqòEiå´x…V3BËGßaM±]|ª-Œy¨„õÈ—ša²â+˜S=8Ô¦HY²l„‰§Ì*BvÛÁDUáú´µ‘3þÇæÇºÎ9•cUšÞ×RÕ C 8"o<[$n³ªÅüò߃ŵÁ¥hØ*­°ÕT V g‹¬‰†šBñB§²²UíuIá†ÏÅ}^O–q›±cdìcO1ö~Æ>ÏØŒÝÏØŒ½‡±÷3vcdìÆîg,dìýŒ}±ŒUTµ;*˜íŠ.iUp¯TŒö©‘CœM"œ#t‘1.Ŧ˜`¾:ôŠY!¾ëÙg|sGUvÉÖŒÛçB÷ö9üÍ"'¿téóq1ÝCB‡Ò5D"Û\çÛ-ÅSôÐ`œ?ù¾âÐI„XD—×Ów|­˜GI¿†@³Dˆ¾ÙØuŽ…dÂÅ£©*È÷q€…!ÚªºöåaõLÎrjˆŒ†b´GF&aí×"Z”iñ"IìTcdÖèá;X¼J1A(-¶©êdÆèõ(‘Ñ{›Ó$šxÇ•`—†JgA1ÙëEŠÊŸ”­*ÈÔÊÀ"‹6s”€|_Ó… h°Šò!‰ba0Ù€ÑGžØ ð]€sgŽœ8ñÆðf€'"€‡^ °`'@#¨+ó02€INÈùdÞN&¯.5 ²C `’ß«…L•8¹X`¶3 6© ¨XöàÆ4ae€º6Õ({ª‹u!ÆÂ;SW“zoL[%¾‰dSe°²¨Õ€$K$‚¢’’’Ü2»fOƒ™˜å­íulVnjÛjÀ*eþ 1‚<ÜGpQ¡gÙ¾Xü© Ìe+ú.w¿x½ÄlÐà/U.©]çC 'L™·9¨&¬›íÔƒE’¬Pæ_ÊW,*£S×—g)_5jVMÙ:Šú¼²"ÿxÇU ƒœZÎÝ5¡ÔÏŒÃ.µ½º„-Äó¯=KžRø~¿‰,Þ}©æ«tƒ¨ÚªY™Ì>veTй¢ü/riäPçïætƒ˜.Þ6™šA$¡Ï¥ÅÚ\I"ÇÁßÖÂkÞ´÷3v_"KU¸q%‚DXal*¹æ~Æîaì>ƈ¯+´ÈvCðëúísºsV`â ê†Øü•È6ĈhåtÀÍ0ºËœjñBý ÄD§…ˆ‚ž:LJzwT˜és!gDׇٺ|1p!*€g²¨XÖÇ(ÅvŽz·šI\ ªE4îµÝplK›™DØW椺õÀª%ÂÄÙ –Ô#Œ֑Ãè"ŠtD"Ìây‘¾36£Êb"J}`vèÒ `;l%=-#ãiÖ“uóõ[³Pzú•‡­ei½éB_tKö>42ÃÖ;Ùê8S9©¥¨‰5~÷3öÆîg!Äf*Ʀ»±÷pûVŒ½Ÿ±Jr}AýÐiµî]„òù¸WžìƒÓ¢cXzÔMÊs\“ ñp"C…J$Ä€á ´°ÃÄ>kÚ‡BÓ9 ÙvÑH»Ðá=¡²·ÈѻзÙ>åxâ%1›!ÛV2䘥º±°{ÔìSÚ¸DH°¹kí˜ñ^ÆObªD¿GfièHÓ:Ý^$ýmï WZ€Èa¸r»³¥diò[}<:C;à €.Õz·Q;ÛG&+ j0¨ky_´&Õ5H¬„‰[¨f 2Ô’¶ÎMx]Æ™™©ŠkVÏBg Ñ–ÖÑ–åsÒ’]e´P ²ˆŠôK‚\ªAÐÄdE%m«’]Ë'Ù_JšJ–÷«dŠ5ZZšé‚¦¤bSP‹›· àËS\8},à9€#OÀòÿ ¿ £÷| àÀn€õ¿eå]ŠEdÙ‘ãºT Û jò´7"C•‘àJî•uÇÈ+J¶ ¡¦ãâ“-˜iÄ*~}¢“·$'¿Ð2qÚÖÍå ÒíÈ5 0³ 4–ññ-)›‹š™,I^³…XµÅIkù@KG'²bžkJMrë¦T[o™™q.Ÿ hˆ…Ã5ÆA§žèÇJñÅpÄ” ™ž iÌ4´”N1Ŧ qÕ!·0 A>ÑtÍ<e€™Œ`vJMrÆóUùÅ`guY”ç9¢*R#ÊUñ{—¼G5SçiÌ@LO‰/Í„vEÅ:PRJUæ¹VF§øb‰•{5…Q’ª¢äc«óaEӢРŒoYY›RÜ‚¦Lis¯°ã»ÍD†£|„-gÌ:`O`$n½‚DZèî¦i2–™úÐåé ž­”…2skÕí¸QDä6;/§a6–“˜ªš“‚q„÷x€;‰¢Óƒ£¦›åUñK1Ú‹£±í÷᡹A@ÈJ,ω€ ‹ÍyaLʬüñÑÌl¼0«iØEÒU!*‰LšÆ@£&Ób~+Ó•ÎâèKü'¥– €<À>€I€ÝÉ“6ìxÀ×lxàa€7¸¦§¤Œ"Nô%9¸´rÛ5?†—ôý«¬ç´µ¼Ì¹ SMNÙ“ÒERNú‰œ!…w~q’YퟳÕß$~£f–+éÞ¢w‹\<Šÿñ£b·¡'›©–¾Y™Ø2k°q¼ªh"2窎ñ]A‘o\+*ò;ëŠV¦®ˆƒ}rNjr¹Hbäæb· (%ù‚Õ4/dÂÙdøT/ )e¥t»¢hY}AÑŽ”4Ýo[’½Wúw(jÌ8¿0ﵨ͟š¹9å|û`Õ\0©"Ž¡.3vsûÈ =¦2dq5·9‡&æ–ª´uâêÉÈx²ê¸‚:ã™n-º;Ÿq>µ3‚ûY‘-*×£‡L*¿4±¨yÙYê%­f4Lˆ½².ŠŒ4áÒ÷ÉH Š7]’景“Ø‘Oø ,ò]OîG°` `à€I€3°æß °à1€‡æ’¿àF€3KGäª(,*_YWì$Z‘X5'i>]à*©râeªª7^%×$+ùä8\—J#݃¶Yë´ä[%¹¹«iéå fvJ´A;¶×ù.#³³Çf’©\Š·T‘J_U_â¶¡ðÝ­ni†kÚaT°u[j® hp>TJö2Ánƒ†PjÉm7Q¢Æk®M±ØËR« %€ù†zŽŒws®§J4«ªvWõääÇ2EEÌDZ¤KŠ“ÊÙ®¤Ÿ-J²ƒöá^Õ¼ÉÓš’%Ô´­jœµ«|]có‘â2ê›dÙ:’Š©UO^Ò¶V_NáHžtô—ŽD{Q{Á>î ¥r~ÉC=¼» þ61RÅ™œJ±‘§H”9Ù‚ˆ]ãÖQÔñF[øs¶ÖSÜ«!”Ú©Ö;Û˜dßhˆ›Úíz´€<ë5%]é«×¤d(ëÀtAÝ7åVž|æ;#Êz•ƒ­æG+ôãÉšäÂÁrb·˜L–p_X¸`À€S¯˜¾à•GvÜ™P¯X˜øy€0[ £®ì>5}”cÏõ’Üwxƒ &ÞSÕ´J šo$Sn'c˜_C6[çî2çšjt8bB4sqDP¬îA° ·ÈºäÄrRÕ¹ Š×jµ$ŠJõ Y—Ê õ̧Wµ*<Ü@8:¥6€gj°|!—ð–O*¼¡"OÕPW fñ‹˜bòÌËÖŠj#*ËÇyÕ`©†ë¸ª@ÌC9ë#‘dWM€“œ¿çln“‹£f ±Â>©Ÿ`JÖzsx¦¡,TÌNÉò%YÓ„ËŽªYTôwRù\Ö9‚ FY âÖÓ¼¦®òq]Yàu%z¤hªîð|1©ÞíþU4 K;ìñ‚Kɉ×Lb$W¶,¶ì•*ý³,9AR<¡¾4ÐdÚ‘ÖÜ Ï(Õו5{@jžF;¡xÅ]Ä2ÒC)µ˜Óû/ö8óÅ}2áEœØ‚ÝÃ32HC×=ª¿–Ñ[ÕŽ+ñ]ÅA<Îc^QŸc˜š7-—‡ÛÜÈà€8š‡ŽÒ‹!â“ àL®Žò6ÑÜá^Euž´—â ]pùÚ9^C¼J'šúÝÎVnÛñÕŠ†4¸ ˜ùFÚåÈW Fn4ó¡] M•RAŠ A±ô͈ë¯ci¸ ¥¦1¯©œ©Žéȶ¶auæ²Ëœ–É_Í+Õ5#{h—§À14S‚ÄŸ!•w®Üµqj°³š†¾Th‰°êk˜»X¨Ùä5ë´•=ÝHž«ú0öÆ*I¸U!aZïIþ¼'‰Íº‡±÷0vÿPÑë2Ø¥‡#,vhÕ¶ˆœ-wº¿ëÆÕ…Ý5‘l›?žîªƒƒÍ5Co. {LѤ¶7sˆñ9#$+R‚{”Â+ø¶åÚøµšL—P£:ŸÑôzZ½„U ¡Kh¸‚ʜԟp‰¼õw<•wBG§ÔéaQ’Xr,;û:c]»"ž“Ó*÷cú÷‡>^eîüã±²lÙö‰Ã¿ŸfŠâò Ùsœ·"R8Òßea-ÙkŽxfC&™!¹åüLö!È—™Æ®xf¬œÜX4’‹Œv ²•„ÀX…±÷'ü)þ|’Z0ùW$Êø~~M¤G8±pfÅfÊÍ7ÂÎæ‘£³‘3UФD‘¹kƒ7Ó`9±@«T "GÄÈLH»·yrá+™‹= ÅA/x'ÿõÔ¬8ÈcC‡¸‰åAG˜w„9@:ê@"1yz¡,³/ú1ÂSnJ˺™¥5’.¸dár6ÂS17T×^jfµ£¿CgEÇœkCtUæ¶ýôbu¿:Zf®,2 õh¬r³ªéNµÇdq”w]¦ª§m/—MHF®8\aså^ê~Ú4Gjlk!?“m“žrº§ªtŽ– ÷!¡§VÃŒX`´ éâKHÔ‹|”Hþ*0ƒx‚"À| 8° ày€GÃôTb}zà:˜xàÀ€-OÂè^áT‘$…|ìŽQNúUWŒÞ5=¹×d’n'Lìùªu½¦c qVoÔ"~Jšƒ_ÅURÖlIÏ?´˜Šñ“øTì†À‡u’Û4׊f¼át¨ô‰Pg`M±‡éÈØULz£é¶.9™ç4×1Cj¦¼{ÄÅ[¶,i_TNúÓÕMF"™{0vÕ‘^$‰_‰º°»·H¬z² CÀ+BæUß7;vB]ûbFÅ©>c¥¤d”2©œ)gNÙë™9…JŠÓlUs‹3LS½×=á©ê«mÿ‹Z&V1l¾ÒRTœée "•ëàY‚æ/^4û €Èê-¨Pht*¨j©c³@ª[­ý^ßEíErÉex©p™³£ÄôŽgj>PfœEô̘ªWÿPÓݽÊrk–«¢jÆL~WIÿ>^“³S·¼àÃ7,\°àf€1€Û¾Ó÷\ ð%€›öl†Ñ{`z àAVž`·¤Lc6Ë šŸ^`¶Õ†ìu¨yu ?ò˜ <Ü$Þ¹–y¾]¾tu×;0Ïro-ñ¬Ájv`y¸‹0c¨6äQU¡Tú™†¹xKU§rBî€uKC€jìk¢ò¹TÓ%’ùFPlhkQ6ƒû¾ _¾ÅD°¨i _fôHÂ!‚ Á”%Ó… ÚPy†|B¤’´¹å„Ä×Ï7d›#€E™Yæm©hrc<Á±\Dµd€jЬ»×Î4´oê’ÈBi!G­¢xožÈ¢k¯…÷l¥íruåä]Kä*ÅïÜ q“\º…™F2ó¶—2ŸÉõ< 0ýÄ ·Äº{÷®L{}¡µ|©©•y›IÁÐlù¨Œv ¿eÎ_Õ×¶NÛ2YªõÈUÌoKu6A-=Ù­€OEŸ·X„§¶sÕïñ½ß¤‡ä¨ ­âÈì>ƾËXÈX…§äöªøs\ëýŒ=ÀØû;ÀØŒ}Œ±ñŸÐ,¢–{˜ßÍ­–¤UÛC£ú1“‰40D¸kêSj× Á¸ášV IDAT‹óV¼å¦"˳#ÄKy#£RO½`›sµ]0W@“GTÌLzRá ˆ¡Nª7’ ,§Ó+\ÁsLƒ«öMäNOŠeÑE½…MÃ[<9#»Ù %˜C«ði˜Þ ð÷ßX„™{*ï…å›þ=ÀÏ<GòÊ„ÈyMYÇUR%i^ÆdÍ$6_/7T>×þÕµîpS|³‚n/Q3ˆ ë(±Õ¤%\Ì-Á«nS䑼Eͧ: 2²4ݤi >2_FÅÌÐ#Mî"GQ]&Б«‹ÜÂ!@ÚoÌ,qE$·Žjn‘Q´ÂœòT)¦[áïSSF¬§)³WõøàjÆE-­‘iÜ­[Ékf¸V°¤¥Ãà 'hpW€¢é€nø+I/‰¢™Ð@ÍÆk¦M©˜©ïT%¿ÜaêŠ]0™á2®|¦¡µÇ2vH—%ÝÞ©9UAb?®[UÐjpjQO‘Œ)k!C¾×ÔÂóùϯ3t)¾À[Û~…’“§Î^‡x#3 sM…3§ªQÅ/Û¨—0é–j‚ ¸ µT´ì|¸Æ"Tt}¡“Nòºb„ÑHÊJZLº~9Ä¡¬2æ­a§‰y3ð„Iþͯó‹¹Ûew 4S#b¬BÍc»‰4ã¤àPX¹„6›vV'°²@á)*È£w•š²GjÃ?Pd‘‘9ƒ†)yפ@¦™åGûEÓuPë¾8â-*ÓÏÈ™J~?Cì®iÇI­`ʤҵтôªkz<ƒŒxö¦HJˆ]ƒ*ÀÌ‚(Ûû³É E€™÷6ªš}"ÔñI"&õò¾šOœxÉֺégQɼ·è<„©"¾Ìƒ\’ª`‘ÐHOª]ˆ½ðUk%Ï0[Ô’«&™´œ*AAHŸ<ílE÷±îgÂ!m¶`œ`dš·¼5¦e…J" W))–8©ïuÅ©ô(i®•žîè.ßî«”A±‰¯·&SWVÐ:;K¶ƒÌï¤Q‹8à~ƒæ×d§ Mw;tsGÿ÷ýäN]ˆ¼74=Ü >3þ·ÆG˜û“G¹!j.—)RØÊ¤*'ÑŠ±x²wñ*p©B“졜Æé…h«§"l †:7*x&¿£)ê>hËwÙE½*P_V¼j³+óV¨û †8Û+™™ÆkÕÌŽ‚sZ_Õ%žëÒή‰Í ñt‹à9ó¹¼X]kA·>¤å¼ÒqY«ÚbO¨ßîJo¡¥B¨buIBÄ_ ª¦‰uSKfܲu2h°3nºSâ(Ô¨ã†6Ÿê¦ÕÝ%zA¦¾Ñ’f„NÌ£˜NaWu™nÜî]\ò@«…j•(“QºmŸ·D¥Ëʤ*IŸTyéjT£1 |ýLZÇŽz¢N±÷¦š6“¹É·”('»1/§: )Qúª_R~41)/Z3jÒª&•èʤsÄLCUרúO¨LOÙ)Z¹:=k–Tu“²¿LiåTÊš.WªƒêºgâC¡Ue@t¬Ԧܢ^¸ž V¨-Õq{¹b(º«‡jY$€2”Ú6C8]A;ž±‹VÙHÓéÉÄ€éB\ÞET@æº çEã¹ÓPI¯ ]Ôj—ˆä)üiBÍžçaÔ`$1(a¦„¤DŽÐ‡‹ebfÜ/êúùº6|Znõ’âà)‰çQcDÙò¡›ÔÅØaâøhNåè“U+èO¦ŽÜ©­ˆPY.È’‘Ý%öyD7ªª5ç \éáÒ†i®¡SãÚD÷šš4¬ ›ˆ ;‰›¢U„«m¥žÖº¢iflW]—$mê ½Š"ÜZ¤5̲f4ÆTªX 4*8’Ÿ:ýþ]úLqø0]_ó^©8%Â¥dÃ_ìÜÿó0n3‰äÆ)töª^-–ÐŒ0 Èš¦.‹´<ñH™â¼`Ò¤‚Ǻy$‘¢ŠÈ|Ƹºø¹KJsy„«š("¢˜Çj¥9}„ºñtC% Ž*FÕGÛ9ÅH5"YWñ-õÈ#M›`Qj?)‘”•A¬ËìAª_µj×:[âbЧ@qaWO¬uÍö‹Èu0+ÅåÍü.¬’Ô3T6MYíS=Û¥fªg‡Hâ§*´¼D깾㨩Ž¢†¡a¬V«êÔ¤Vš#r¨$—«ð’#*'ÑrCÊ vXERLæ#(âûHìAÃýPêÊP–eÒ)és1ŸZÌ'+¥äÃrèŠ+7–`~©%+¼á•ŒõJʼ-'³¢˜¨CF ÚAª$ëŸiUÔkI %Ö)e0³ ž¬y”µÐHL]”’q]ºY®m¶Ö'°D&0!²kûjIsm—“Ví®šÖ*cPÔBëʪLoªóY•Å –‘QH¬R”­@Ò6Ëb’óX§Ô±5ÿ©{ahÔ •öÙ$¨âŽRC£<¸ªGþd°Ôàd'Þµ¨r5U|¶Å2Oý§`—¤¶hK««*{±NVíæ,ÐŒ†JæÐŠ,Ñ«Õge³öv6ö­Òêj.&Ÿ•”nê¶Îk[ÉUõ£Ì ‹e帰¼ ŸYÓÂAä[f šk¤èg 󲢸C&jQª’¸¥Q»]!ÔrAñaZÔGY/xÓ1¹N–H.iÕPerÂdé)µ°ú"e° …I]VUgH Õ#æ¬]Ýåãì|5¥ÍõDŸœOè9Éýõµ‚×E™õXžÄKºFφ,g²)ËpQ9º*[vÙF5õ°HÅËÙC]_}"©RYßÙf œDŠË\Qr‘¾2.Î+RMJ7ËÐ<…{t3r.òI¢¦©5œÝå$œ-˜ó¶d©=A›f†;¥ˆÔ6®É$.6)ô*¾Ò¬cyêÙZòHj„N­ êvባBÃø=j7gvS»¼_qçWÇyü÷²ç1jJÉÙTUö|þ$#.Êg³ÌG¤¥,•‘m­E&Р ÃÊðŲëS˜Ú•3ÎG¸Ç£á]âò5P Àá" XÙ!³væÌ­(ˆÀ#|ž©wþÚÞ]G–¥[ µ…1tŒÚÑF!ºß ±ÒÀú% ð¶„û¯œhºòÎC`n;½ås´ÑF N  bz…‘‘ãòÈÈêuZKSsõ¬K^"cܾ M(ÈIJ< k”ð2èQì:˜„EVÔYuþ[9dj›ÇUåØ_ÿX%$á®2!á Ît´9ü;)p G`B_’Ö{|óF£ž­¥ZÍ“XO™Q>Üñ0üŠ$gvŽ0±Í)ÀÑ ª4E‹²7¹ÉÁeâ1#`ÆHè—ã–Áã$Üe ŒâC ½Þ–:¡é*‚ac0ОXÂñu…²°ž·§ZÕ2&aD>‚&{GDŠ)Û&jª­<»iô–5ØK-ž¦8+¨Câ=–È(ì‰O¶vy-¹DRä`d8ÚÁè»0Îá¨Û”«3»õ¬sù® 7×`û¶á'+X`¤-`974ê…t‡"g+‘@ÌóN8*Ë9Ÿ™ŠÕ,A'4^)­ êÜk |D®ûAußSÂ&õé×ìTE#5Ç^ÙˆqPÃæçÃ=«“z<¶¿Àñv=”FÃÌÞGqLŸvŸÚÑÍÌíaù“+­“b“`¬mØÓîBɵ¹û‰¼p'YH°8ò/7fÄ’‚(ÔÐ# Âv¬yJdòPÏŸ;–rHhòßÉ‘¥õí*¦@Ž”a"OwÜž‘9rag‡ÔOÈZšCÒ9 \|'7'²>Ô²‰/ó¬,uÍs€eðÑWÜ"d?mÀ ÷¿ƒÕ3†¡Ëâ8©Ò*LVþ"Iˆ?;GÖ¨’‡=ˆ;{n¯„b34fÜ/­6à‹)|ºúµZö[¬ÏWÝíǹb(ïŒÄ1"?êãQ Ðn:¨Oš8C­qÕñË.Áä8eÉÀDTÜ·ëD(_àºÃÖÜgÕ}ôbPÚ.ÙÀmã Œæµï¾ro0U®þbâØ¹„Ý)Àî°X´R¼±Óö»åPŒßo~p%EO@û]‹•ññD5Öß<Üšóvíi /í$êQ"”"Þ±Jê'À#®ø", ÎVÀØ“O#€b¸ BJ¶S×4¹ž ˆfK6 g; ‰Øã7zA+Ú °4UÏùÔ´®Õ‡L9æ ØÕö­üœ ß¶ˆ ~´R4OŠz\àpWo<aéy5Ÿ­îï7{IÏÍŵ¼å"žœg ¦šÚq–£:7+U/g'Ñ›0-O­ÐEëá­@¸åìòÚPsË5o$ßI[¶;hg]ÍÔµIîápSŒÎ ~T厹H,Ö{­ðÙ³’'m†³/Gú8v«Ê½ßèåTàjWaV+}G_›s¼Ä¿UÒÅ‚­¯¬Õ&¦'ÖŸê©©V¢$ݯJ O1a–.ܹÁêŒòaùä'c~j†‚BüºÕš¦àT³`d¿Ù$Pˆ+ÿ½¸Ͻ4ºá÷rCäß¹ñO¤Ê¢O} ýy.Žáõ!*¸Ê÷æ‡yxÒ¾áËϯ£K2®ë›XÁm$[ì@÷½W¦ðöñã艷‘ó‡S¥4kð‚<0MômBºD ¥“±`6ÑП°R‡DK•;+?KþM±Ûd$½Ã]ö´ŸÛÃi‘[4ª?÷S¿øŽŒ£6}ÑpÁÄÁ\ª*òɯpxpÔ—‚9"£ÿMˆZÎA'™±,è\å%‘ñªö†döeB„ž¼Zy„Ôý´§¨ ÃRl´°E™¼-¸Ðìú1Œ)½av/6÷Kt2±¾p/ì‹1óž®à ïœ}dŒÔ…Õ¬Í9ˆJˆšWQ{pÅÞaão‚V`ÈìCïF¶ƒý@Üvc´•#õÏ~«=lFj˜l'´›“6£sê]ø`Ç`.„|CJäàp‚ãæ<NOê’8Œ7ÛqJmpe9PŸcü¼ã‰tàÆ1ƒ¹—ŸÏÃUZg¬^P©FH ²ÒmêÜdòÝ )‹1*ºfÎ=qDh ‹gK<È.[þ)c›fŒrмHØ1Gö.XÁ`)DàºP]c±ÌF°>Û¬#iK oGÂö&r$Úp v¨Wbv\Êø§FYpkëÙ´w]äýîÖðW¤ÀÀLÈ9ÞhR ýiÀlkéƒeC¥g®ø;Nü”"oâ@[¶c€} ¥›Ê ‚Ó|=A±Â²­üœy<‘Je-9­÷È Ø`8ܦ=Œ¢#ž yHXã˜ŪSaƒ šz¨‡N;o&K.âL¢„>bÔÁþÀïbF°½–‘ðÒ$ v!ʵíö±îÓc ‰M÷Ïñ{é_#}¶ÞFÇ«ÒA®Õh¯5?¨¢Þ©Üò:8òŒ1cÑ™D8ã]•’Ÿé“ȧ"êc$w!E  cÆõ‹Fcï»»å®*¹q53Éu:ò_ÏÀ©o|l[² ÀdW"'äjë’–Rv ~”µˆÙ"b2è0{ØQ§` Á r[ÆÅ"úöŒ¸ÞÁ£!?E xYžÂ…+»òer^‘ä Aí‘Ö(‚cüPüÔÅ ¬èš¼e08mBŠGF®Iýò=ü™J{4[kÎjÞ®0¯V3ÞoL^?Ê*Mt$cÿå¡ðvCÚó:"^%¨ï÷·U˜„9úú½à¼¾n-„õëë*¶ÄJ_Nš©·ŸÄT9«ÂEL.Mc~AÇѦŸ&wá¹!&Té°‚¯D/o–©³®©½Ý†Ï² ¼ø÷÷2”.@€ަÓRÜisnWµHhó*Šx±&$4 ì¨M¼¯D¿Žôþ]ìÏ«»£Þ(›Ùy]ö_ßRˆ«é6]`çãX€*UDjnV“êIyvÉDuø\5þal aç]iŠM⟠¨çi½žOîâUrm,‚v+?NmyØY¡ ¤º| Ï«áEc¦ÎA0ÒÌìYaÙÊkΫVçç*èþDD[Ð(³Å´×†]²:OB>¿ÜÊ*ýwÕ2’Ï ¥RtúÕûwXªn–U±)^ņùZ`5H%=$ÍŠXZпGÆ0)6(c@™fcÒdQ&øA%ÜhT=‹m¸šzà@_¡CÅ¿Š+Ÿß # Ûsû‰!`þÁà:8ÀöNZÊvðçÚâPùö‹‚f^épø£ž¹­3¯dh3ž‹!œVÉË©h£µˆRÒY/Èó*Úö$Vì˱n.Í\Cx…(æÄõ-–BN´ê¢¶#ÍeÞÿ(€¨ç&Ø\›g÷q»kõm7nnØH»´>…nçáFZȵ cVæj^Å‹—GR"ÔÒ/c9Ôò-¿odûd÷ý¶8/êLËî6‰-þs­ÈW—^UÝN-X–-øåTô§¶]J‘Òrا^]‘É“8้ Ö •ú–H©6‡±Sößg%ƒÙ~Þ¿ÛU½èt˜CÒÖÆ«¬¢Ä‘O5”Ÿë' h$…ÿ,ÏãE åi!ĆÁ3"ÈOn3\kµwMB`vuôn‰ ~qÃsNÅߤÉNBHúUäßÙŽ)7™Q¬`§©5Þúì1d ýÀÅx×Ìæ×@ŒŸËI`¡#Þ>¤(ÌG#´½È ?¹•¦ Dáp‚3&l‚!lØWÉ]nŠVoSÉlaQv®“ƒIxì³ç°ýL°.;ìá!Ì‹Íí“7¨ƒic¿H1/cP ß¾nÕþ‰ð&CnËØIgl#§Â'Lj±Œe Œ(u‘-^±½åŒG¼Êô„A«³vJíu`ÕJµ¸AHvLxÍS¤W™uÿ9a7fÖ'eä †pfoÜpttj>ïì¡ÆªODs btBv¶ø¨”¡‘žAóÆ]PÍ̽m³{YglP© 0#³¹àMTûs»vÜü©5J]sÕ†®Õì—&¸®ZUK[ìãh|"š&ºpÿ»ß¥5q½Ñ™©/ns?–dù¹í-ƒžÅÉvÐÇÑv~.­÷ØVQ•ý®<³§&^©?Í2©¾Mm6Ô'Ю–«®HDŸ§´€´{gcðL: Ÿ…ûâÚJmÌ•Kÿ±ÚÞ¢=® Ä_ÇfÙ÷ªJFåAsÕ}ˆIåìÆït­l¾ ƒ-¯Ep®Œ/ÇÚ ÒMKÙY-­µÐE«Ë_t=Áª9&éqvýn‹ô¸q–iV„ËŸï·¶Õ>kfÛ¼–Pûœ¶Žè¼Æ­ËÚ|U} Zz×GQQÝ”-ËY° H”æYÜÊ‹êÊú¦WžÙ±öÃÕ%]Ÿ÷[³h:ž(júòyx³âZ©Ãkw¿ÚttÜ‹;½ø?¥Öé }i¾CÇyDÓyGŠH:‡èÄoI{äêÎ*£XòN! ²KHWHN†îÍÀ" ¦Cü‹"¦…Wð´Ï»5ÇÐõ;Š[I—f„C㮦#(ZòPWË5§.EÞÐ8"ÜZÙXp¨¦ª·ŒD+²…'ÔŸÌ 2ƒØ?(O0–˜"Œ(Äjyúu5ê°2Åý¤ê¤…D‘€,,жðŸÖDÚ.áf ìbV&Ó4µšxÐÔµ2¢39äÁk‡®`„²‹A lt¶>Òc„{D‡GÍÉÇþ‡á3íƒóùg/œc¹­¿sS"ÿ‡3 í Jxlœcç³q]‹ÏªÍ+£]ŠºVÅÙ|`çÐW;ªðI¡­ú5¼nkÿÀØC>cj„‡†¾*1Ò$sVx•΋xÇö˜}ü†;òªP @nEâ°h3 v¡¹ùy›p/ßýO½_R"–Hqu‰2mÈð'gtul–!¯žë ’ö®1RgO8Âý-$ê)íÝnÄòÏù‹¡>нÆkš‡§cÛÑ£h1ópù’ö‹ã!s|”Ø©ÆÀ¦¸wƒ$€Q§ž‘’^Â:žLæŒQ 2Psì4¼€ç2žÇr‚)P€µ&"s'À„§¬°Ë>®ÛÑyP…„V#.g®ƒV#„»Þê˜;wÁ”ʃ‡uÛMYMqò†Ê0Ì€±ÅL0¸òQÁ8–I2»‚¶'5ń¤͵+53KZâ6"!YÏ:P·FÂâ3V'ª±ü2Âsþ˜äÞ¼¼ØdÏ ¶Â:Š£ã®`{г‡Õ›"lï>ê¢b|/r(¼ 1ÛÔoPóÉ'O€3ëÝ r,‹õ  šEAâ®]†\œì®­®ƒt™ ˜ªÎÊɧp—Y-;¹ŒZ‹ ¹f ÈnE†bet̳vå…-¯Vï´äH»àN½ú®Ùü#¡ÓAŠ®×$‹Öm’Œ¨§=mʯRuqØ“^Y„IeËA$$ÍE„ä6b¥½Ý›5VG (*åz˜½;G<ÒØeRÌlÓ›ó¡ŽA‚0É*>`7¼Ùá|Dµ=þ®!ðo ô<½px8q:uÆÿ›Â!Ÿ·6†Bªÿ“>ŠínN}¥F§É½[l ú:>b·™€¥ž¹¸ÁËa}cG5Þ܈ƒ"Jí]¿1ꑞG¥bäªT|O¨UÅí5I›6Êihg“0‘šÅ‚„&ö;àzŽo¯:ÕÆþK\¦€ ®+à5æpbÌ›öýg(œÑânîõœ JÓ?P‡”ø=¡qð<Ïa‚¢édø$pt;é¬+êÏ«‚f:Ô+x£W¡ŽþÉPd,Ø/Ötï§|,%4^a‹0ŒVÉ~Ï¡"þ8VX&º4F'=¯ @———F½\DÐ˧­Åûª]>á~<n™»’|éZ¾Ha´*2íSã©Á) {iùsÈOË_¾¯Ôé‚psá§J}Ë+_~>›˜ˆî+ÅøN A'ñ„³÷Ü>¯+©Ìýëxø¼-ÛÈæt#GÂmT'd sØ4à%úk9ë©ÂÚºÕJçæµßg!|NDgQ¬šRZ ³÷ûq9‰p+×6)æáõVÖ Ý …h]œËñß%¿{¾5Hž@ÐIÔœxq£ VŒb»›É±0_Ë¿.X¾ú-xΪµooý$’&U IDATóùÖîÑÔ0ÃôõG‘Kj+_@½J¾Øöä3Ñu}(>˳\СQÝÊ–ï=ßïGz¿v×e}6?Ž‹.;½¬Y–Ó§bÎ5Fð\ðõ‹ÚÞ2Ýh"ºªEnR–vâ¬`ß =*,vÉ„÷õ^;e Ôy|Ø?Íhº6Ò·ŒÆ‰[ GÏ[Òa•VåQ'½Y“9r´!Ä6 µ"éÒæpx†±^iC®ÞÓ•  ‰i €aSÓ3‰¤¼”Ò²¿«½8|ð`W–:úú^?uÏ­q-ß÷ëteñ|.mÏäñ*¨E©~^sÝ  j©á…ìè…ÛVH,S ö“¬›oÙΆ)šôÄA«@¿:(ð{ ŸÙÔÛ‚@€Ý\0… YÀà öwÛMGÄ~p;` ³t÷ppク9νJµ ‘[cޱ1öãnÈäGâ|#èßz<^¶ôŽš_ÄxÝà dL;ía|¢¸’â±JÄéhÓ…€uºŸóп§x!y¦ ;õYÚ:¥@€‘ÃSPá<Ûm×›P´)Qà¥ÙvÏ1÷ƒÐÉ™Ùcà"o4ö=M;òJѠp⨈0ï‡cT×rÄϹïuôÅ`yK„º½•yÃvèê 0$˜Õ¦ÏJ°ßd-#XÁˆA¨û†>ù©¿›SWC}ä7{-;ó¤q”c'yœ’Ç•õçOð‘Û,Iaå¢o"êo îÀCÎaÁ1ŒË΀ø4YÓXc¶ƒ®"Ûo%³`âØX 8Îøñ(ÎÀ|)ºÀŒ+Q m÷p\†fíðô(D@ˆ P¬àؔҽ ÖñJÐ+qVáì­)RUF²Ëí4=((G83ˆšf%Æ¥'M&;BÿSÀP8)á£îò8kP¨iô  )@8â.Ø:쌿~ÚÐ;MÞhœö;œ 5ú Á.ú3 ÉV¯]cœ@t‰µdú£x¢¡ÈŠ)€F‰Õü™ßcÌ™÷d\â„-²l‹9ƒØ!j¹6W4«·§ÌÁ‚dÀÙ"Â2Öà1jšÊ r‹‡bêk3 ×ÁÜ¥1¤^îÛãQ%ÄH¾oï);Ä[-8Í,j©û_T†œ­ŒbOˆÅç#D@>šC¶h›ç@†-Â…j\¾iâÜ|—ÛÈȾÙ þÜ1D‡ÙãømÄÇd~  hð–zº l˜µø®”lƒt=Æ`?Ç>Ÿ9Îj=ª-»}<£¨`øª¢eçûûñm(»à±ò ÌmU“Ç« z*)krLíòøO#a€Tý‡EAÑ„zé 3&ÑÊ(;¼æ„D¤dˆ-‚}F!ÄË@(€«î^ø ^(VšN‘C…·Ê¨ëRà¼Õ¹˜ðÚz:väZ—2з0Îþ±PZ]cª êá© \•.êT@´UUüòÊcuU0¬]LÖWr. êrFGi‘µø$õU{¿µW¾Úú@Ñä­÷= ?¡ÎÜ|UHø/h•[»…þ/½œ¤{BùØÕÊÄÜÓFZ8ܤÇÒrÊ"5Þ{&úX£ÕVãÜàÚJ×|’Ä*²nd+[@JT7£…‘òÔ°ÚŠÈQÕl7Ò^Vþ9ªß^|­¨ØkµÞïeÕ­Þ"sC~‹^1>N λ`Ü_õù.Hús‘l.vMb½•t»Dý„¼ÞY±½–+šË‰4Z“ö(åÖ<[7¥Åm®ª97w®åH>Nò*UÙeIn)püÔ\ÜÊu{^ïã™aÿñJôq,VÙܧ‚ƒ—vw€rsnŽqt]‰׿þSÌ}XÈÝV¹Þ¹m#²ì3Ì…ÍÒ¶ù3Rcm6£jtdÙñ£¨gß%ÿÊmô§q`Å‚#6 Þ”ëÝwŒ(† ÂC W@ÈAÓ#˜Ü„–çºNèy§Œ`Û8aÄVð%PÙ¶{}¿ôÉáUÅØÜ[ÀÐg–_!Ë|fÆŒoUå¤PÎâ8à´Ö( F€„´!z[uÖXj8ÿóÚ ƒ¿J»Uö¥3Jñ•lSã%ĉ–º±Ÿç 5e]TNàÜMm]›œìÔ&e#1Çk Çc׎(¥™ l|Ž5B3¢ÛéKäÝ}6€ð‰åY‰°º h ÈkÁh‚ ö4m· ãÍÉÇt {ú{΄HKH„ˆ dsÀy·{]»ŒÚ8Œµ £ŠJBúÁw#ísýŸŒj@RO–¢ú”w"!·8~”22¼ç3’nD¯ Çų®ìÂgÐ+& P‘ÎA*=àèéhRÐÝ\¸øaë5j•{™òBÉêgp¿pT@.à”–7ä ô9ƒ#m‘§ê@»gŽÕij…†c®ƒ5Dïë¤MtC¿S7"ß1BÆ+ÑÍ1Þà‹ÿÜ1[_áÍΓ"ḛ́äÊaqÓÑÜ,½ …Ï…CËÆt=…3{\F5ÓmŠ2ôÎZò›£&fwp9Ú>Âò:P¡µ¸ç¾Û@Fǃ"¢„œÙ­0áÓÛT2:vä$6qK€(pÔÁëÙäö?d%e _B¢£0¸ìA·§ž2üOTò¢òe³Å· µØ…¯ãѽ¾9¯ûa{» ƒ­È½pAh Üiay¥¸KƒßÐx¼ß"ö‰°ªÁAØ,:Õ€'Íc°óŽÆwøò¥“0™ïõC{ŸëO\Û Ë®_Ä)…tÎô!ú”cu¨ïg™§G…œ4‡äØRÄXßÙV@1’Û؎!òÑîü—Õñ·¶gtf\œE¾k}#¢ì›¾BvyFõŸc›€æ;܇oîõÇŠF,ý7’5Ü»“vä0:ݹΆùùî:¶H%óOêu¢æ®TàñKê„ÂjÀ9Áë¿4£î®o0¨"åj) „9±¤^-¹´¦õì·H'ˆHù”ãÙƒ ÑÀ,jëAÃÃŽ¤ —ÉaFÀðÕêÚʇ4‘2n˜{X,ÅdÁcGk™fÔo·dµ;¸~ƒŽ UÂ@YûRê"ÙüÌ7o¢"˜´ª,Hõ¤ês;d_ØÝ»û¶ J¸³¶¨jwzvÔX€rŒ6÷~û.Šƒa/Â&Àù ëî#„M«AæÀÞ Ô—Ãx¤+ȸé«›T怑œî;ª!(°* ú6EíÚ b¿‚±yŠwO=«3ŒcØÿ¤€ÑB±¦\Ȅ͸5݇]D³4‹Î`•Ã6,wO!Å[dÆ$¼c˨××÷¸•Ç¡Ð>!Å–Ðê%^*·"Û‘/K®V3ŒÏËf-&}L¹˜! <‚†¡ÅÚlÙû1žÝ4r<#ðmÅj™è›…`ü¸® hSd‚F$#€´Íí8Â/õË‹ž9Eú3·ï~'p¤9é%¢q`$[µÙlìŒwŸrv vvHŒ@z~sÜ)ˆ^³j@­Ç[ÖŒÙKÔõxS×\ñ+ßêsE4Ð]ÉxÞ!h 9ú†¡·AÙÖý d”¡3,è¹\t=¥ DL… º“ЕŒ¬Ù³v)CÀªEý&#ð+Àž½ø[3]„rÀê˘Ë,…§ñ‚I[¨4ƃ7Uúp›Á¸W–nÒM¡ˆA>„ðäfƒœG°‚<ºßuäŸ#èÄf×±^‹Ú}l!ö¦0iÝDß E(¹ þNH§'Š”›]Žãt `& U'FÆíŒ †2•®ãÜ71@ òÊ®%˜ñ˜gâ¶=C'IÙøâXî9áaø@Ïv(K‘¡»íçØ[99‰qè¥éÖLäèÀ pe ]£`¿§#Áú‘ìœðaä¤G‹ 3ãÁ©jvèðìC»€‚æA æx kÐ<‘r+&r-nogê³T”ß…¼ ꉗoìzÜ3ÈØDôx(PÄzl>6G}¼A”ÚH ‡úo#RR›@•ñ2+ê´ØÎ{¶ÛSTY†FLxÞ‚ä00Æ%g™¥ùˆb3o­Ñ°Tb=Ë{´OÒsB‹7G pHhpÈh(bPy¥=u¥LnƒŒr„v‹H× ¤²BßÕPʽÇ<5Yar¯ÁÛàa ÃÞ‰ã)Ê`OˆY•8Ô5Ì„œ>ŠÒb2°]©^*°žÈã»MŽPœÓœõÃÚíÑ·RC¼±¢‘àv´`pM{¾Aƒ#"Þãî1L¯x¢æÕÈ m“$°¯+è;9)Øô«ìªq<;d<Âíì¾¹O1g4=üØÛÏ Ä”¿óÙetÀ™×ˆ B…º *Å(Ó7R~Ñõ!Â0nß{ÄSLv­ª>ø<ÛÁÂT:*2ã8Ft4"¼§«¢„]{Cât–§½÷ ›fLAœ]ÁλÞx äpÚÂ9q ’¼û RG€u¾!°ƒê˜ä™Åa Û¤ Ù}LWpïÈf[½‚#÷Þî¥3µÚäo:âlNæÆÁ„ãðŠ],àÇTíGºl8«{ 1˜zʼ°'@]…ïA\Åš¼dÐÛH6ÔuºRÚȶ¾1ÙÚ?$Ô ì¬xžtúøÃGjDT9ùf,î¶3htZ Âç§ og ä$ êÙdõTۇРêŒNJŠŒk;x<Ms/Ç ¨’1¹•õ-ƒÌژɪQÍjëg`¥ d ’V¯‘°rÌØ,œñ°‹…9°“ï”Ñìb3,à$=Û šújv¼å•œÒ7Óˆ.L$&â;Äš6µ‰µú&ª·øŒ$;(M§IÆúc…8Æ ß~dê=êÚ vf 6$”TØÉpê‰â¤^ïçT0 ¼VÃJ4Æsž{÷a‘r±í©¯z£¼•ð¥|ßÀàšð Á°šœ Ån#vsçm$KÈõ@J™Æ “V«XÁ1*Эé•/ 5ÇÒèÔV% ÷“¡» â!²Ÿtd¤nœ±€†?°íWÛå„Úzv´cJ㥫lvшÈÃgz×e“=d<—Åå ÄÑÍI"gåí¡b‹œx‰îqdáÌqN wI¶Oä‚ñ .}ADøO:Q#’ð+°ï/5b/ùóIU42è2yÜf‰ÙAQþ‰?¸ JÖœ—bz©ºz®®´pˆW4-,µé#Ĺ¯³¡h èÚÉANÂgØñ‡x­¾¶‚â{É¿×ЛÉÔkCåS( ‰P^žØ¦ùh¶á!*_ÊÈ1…òù}Jƒ×€°ÍºUR¨µ©FÖ“J\åx„iÊÇ &p¡ˆšÜ “Qa‚Ô}¶V¢*)gÆìJR°vS~UŸ8jM12M…‰¬_™ãXÁ]âR€¶,ŸÍàdý1~l‘›É&"c3€= á{ F|XqÑ–M9\E>ô¼æƒíÏ!ßàx¦fjéM “4A÷’& `Ùæ† ·Q»/¨ˆre$x å`ÏGk¡¨+Aý‚Œ`DÁ+9°š xmÕBº ,[o%Ž b †²³QY M `L·Â FÊ4ˆÖž# ?cÀ§&²Y ¤ ŸØí°‰WgΚ¶ <îóg×>5Ñ4£ÈÍýŸ‡‘›}ß%ãASxq;Ã-hçá×+Œ`>þ@îİžè@ïÌöÓpèåc§€SƒÜ`W !‚Ù¢Ý|¶ØAÊõŠ!Ù©>Dwo<…Þ ¼Éæ}?4”r…K´ä0+«kðUr.ìåY`aÎ’°…½8=i‡Ê&% ùTöoš×Ù a=ƒ "Â: õ#'ÆîIÊÑHx¨2úù"o0^àr%kz;L €ö%Û9´5wûçYçmv äCøcm þöÏŠ:@ƒñØ:q{–6Äá0“~f8²vP‘›¿½àFøÐBBI©u4Z{$;]0U2ªC„˜Í“«„RL X¥ ka7Û×;¦ÝpõR½WuMäÅ=[5ﺂ-"«¨Ká 4‘‘RÂê-D]§¾öÀÃ|¨£yÑç™%tô¶„PL/|ÌûÝXrPe’ Á´0 Àggà Á þ[²êFôgÏ&$yÕ ¦ðB„¾"w˾Êísékø§½Ó=‰=â>l¹l{bgŸ Õ6üÉ~â4C¢RØÖ‹Ð•Àº°cQÆáƒL^2ŠÛ“éÇâI*‹N‘´Ø`|ë;†2pÉ.’èÊMX!ŸQIò(FÕf ÕÖÀÖ¯Ät<[hF¹ëèE:RœX02:É  Aˆ>ç9®%FæX›³þ|bq·¡”‘B¹¼pŽÚ6ÜAôu*›ÍéÑ8‚+º ýá_ÿ2îF z‰6Äæ’F001µNd¢À'êÊ6”0ÇäG‰Ï=¶)Ü77;·°!‰{,˜Ïb˜¢”š¶93× ByöÍJm¥Ø#!7ÎŒ‹›ƒ3˜vvrÀ~ · ØÁ, ±þ¦Óº':|Òás{%__ýïá³½þðéžöãá•è¢d^ÿõ™¯. Ì_±ƒ9sÌ{wüÃk(oνÞQyË7.÷Ø\vy#:"‡W:<µ­§0-iGr¸^׫:‡ú[Ë¢+ÑÔþi9zV· ¼8é³¾–?ïL4ZÌò ÷,îï…èJtn‹¡^ÏåPý¦+^épø£ɫΦ3žÖŸ×ïúý}x*GX¯?–ÒXOßÞå¹d¹JË/§òKh—eÒãUýÓ=MDï7µÂ'¢çõO½ÒŸDñOâ]3ÑD‡W:|Òáu½ÑúÁ¡³:‘åø—ËuODï7"¢—ãrT÷D‡'¢çõ•çò&«X.N]Ëõ§ózïßË麮¹Üúü.êF/·fùÆò½Óú®çõï_7š×XuYWÈýDçõNMârMâúÌå-ËÛ5–Ö„Å=ú8.O¢z×Tþ<nå0f¢¹,¶åKï©\±öÐÍ k·Ü#¿i,÷èÎå-2,/;«ÕrÏDïßNm_ú~+7ñu}¢Í Êæð½¡Üu˲<\粨Úzû8ÒûwùðOñÉS[Ì£<ÚMt;4eà=K¿„±…F˜ úê7»`uny˜#ìlKB àÈaÿ)ô,À;á`¾-•¨h¿¯KÈXË ‰¾¨T1ý¥N«'jaáª×tóö˜Ð#MÀ8:((áü™´f‡Gj ¶ÜáÁànðý ú³`þ³oW0ûɳe…jܨ÷6»6Û†ÊOPU*-åxª”R1vàu!3ðÏ‹GTÔCF{štyÎÎx{tMJÀ÷h\%Û„{Ïœwò±¡w‘R4úš eÜÆõ{(|ìÃVïkcvV¬rÌÎÛovm¯ÚÔK6ãÓOhÖ±‘tç¢gRî`$ÕÊN¼gmî)ÀaVn­@刑þ, ö%[Ýòn)©'~úõÆ 3£¾JRí5Š¿øR‚¦$9XoÜhR ϽØ@“æœzåº ô:©lF3åÆ9ðÉÍ|.[šQ/<÷åü‰p·°‡TýjÉO èŠ9AÁO9dÜlÔ¸†c811½PÔY챌(zŒx²ßÜÆ ö!m»Æ6{ý;:R-_MŒ›…mßÜ­yÉ-:r~Î6{¼ÌÊ6c @m]R'96 ˆŒÀeŽë9vzŒÙµ†ÌF}ÑR—Bv0Òw¦;Ô1oëT–†7ÍÁ¬‹·€y ¬[(¸N{hêÈnX’ccO¤kó†Œ9Ýønæ–ì8ä ¢"! •Ýa]b1G°èOðENÞײ¹3† bNn$ßÅøjaÆT²`i2Ÿ2~TöŒ§(·Nã9ÀÀ7±tÄ:ü³þ/ÿÅ¿ú7ÿé¿üÏÿý¿þÇ?ýÇÿý¯ýk{Hf×0Þ:á—ßËV¦Ùò½K{}éušUBfQ¹ôRq x äÈ€&ÿËÍ/Š.‘ù„ÎËú—qó+6ëÅÚ¯¯çý/Mm©”÷>«¡£º¬^¼Üe9ã:ÿúem”¦ü´Ÿ‰~é÷­iîYŒ+’š÷Ôa€Õ\×á‹ÔiJp:jž1ésY»Í–OÎj’Ô.¦^çíLõÀ©|Èýx8ÜÊANm„YŽä¬çg³˜uÍà^È+Ó.×Dôr<nê É^IuyÅP×áåH_7ùOõ‚›/Å,®¶8f¹Ú둫玉žéð¤F•fi•¯`5’Ǭ֛¾;í/Ë·ëaªúWqGäCQÎnνé÷­\‡å†.'þ±^.ywÎjS·rZæZn™9Ù¶öÜ¢²WÏŒäÍóx?ÒûÍ\.œ(—Áa{q›#_ïW»>no¿ßïÿúßþ»øþÉýÏÿá?þ{ÞðÇÂHkÆH¼>öi¤«ÿ·#î;^[lÔ[iÑ0>yÚUƒnÂÖaµTì[©î/BÓÅÈ”™ çÉë>@­å…uYLÈ'BÂÕt·­ƒ5˜.öïk[^÷=…¨<ܦÎjÀ•¼D=/L€ ¹Iyw‘ôWdðÀ;$é¼A¹fáÝGHðã(«’åié 4£Lå«¢Èh ¢ÀÛ!,ƒ*ŸÉxø1Z{)œUËûâ™Uörå › ëûJ‡O¢÷ïvÌ_·²,'}ý§ÒlÜd>-]µ‚ö&¯ŸðQò²¶ -ßþuk{ßûMÎBÔ8Úþ¾<’eÒØ*³Øô–afKËÃ\F¯klþ(l¤²Õò#Ÿ×ÉÁ¥õ÷Ë…z-PÇ2¸6–OZcžä¾LqA?‰äz<¡× ,±æ³W“ž.gT óºw°xÏe ´Uñ¼®§vmË?]ÔáyÄM{&=ê¸"’éEÕî6˜D*ð$VÂÇ[}½j^‘ ÖUoë÷·åQÚè =hçûëXÂÉ“êj¶!+‹°ÜµÏ"'~Éߤ¶ø²§6ï,Ÿ0µqWÍä–þ¤ *µ½®Ñ…Ö¤í¢wÔ©ÅøöøŸ×éãe]]O¶}8Ü–´¯¬çK ?-š\nt±­ùËöÓŸcõKHJí»†=ñÏOzwƒ#«q‘õŽØÚ^Ë«Î`l“×eÌh?¶{eÔô«cáÅ4Mj´ÌÁ+ShÙ±²´DÀθ}ªÉŽe·±  +³”Ñ0 ©£6!Ÿ®&$Ͼsx.Xw*­Ä,C òTÄEÂŒÀĦLª‡DÕIšüR ³ g; ¦8p|•…HJ¢Yp¼¤:lR…/j”!I' \ãÕÏ‹~yž†WgN@ÈQÂâ£ít_³]?pâ‹/ò.•¦ÍÿxúÓÃÙ¡*6ök$ýÀ‘÷Eþø,eö§Z;b&Yl¿#µM·×SdA”ƒ O­9À‘s(n:õDâœ=A?\î^¥€æÃTNä4–=•t©d» ømÝ>Ñ$”€”ðÔDÌÒOäåD]½GäˆwÀÌäã*äõ`/ly²¾r²ðtêa ù†XgÑ 49žÊvØlO²¼Xcùyø°%èŒÒq¨ÈŒÔŒ9¤ !A²‹öÈŠû©;QoÚ àQ]­pÞ! QÌ‹o [¯gQ Aœ‹‡ê«íKÕ!œE¬Ó‘b »êŸª2.†«ûã€Á¾%Ó˜æið¾Ä:zÁ>aÔsQX94íˆUô(i·/Š1XôDÇß·Jêtú„ù]çaÇ[,…À³çq±¶©L{•—ùfì3­4Còm+00_ÊØ‹ŸƒŠŠ±ÔèË­’HQ[„¿p´Â¢N¬ÇËA#fK‹ú¢D¡Lp¹#uÓϱ¢±Ó[¹‡ƒC,x×7º€j€pUƪó%k¡ ƒš‰ÈUcŒÂòø¶Õ’†‡ךÀ"5‚ËÙ}¬ÆÖ‡Mõ½ëÆàHûn½ýè¤j³Ìê|E%š˜pÏÓzp&7‚¶ï˜¹DV^?ìƒ(9 h¹Ñ0*h2V¼¦5›ER¼ŒAõ Üx Qvl¨8Þ¤²Ç%ìnIê ãÑK¸qàìì¼ZüËÌæ^ãªa¸ lpe-ãÍa+"’T™«SÍ÷*SÈz¹effºcH0`'çÄLãˆÀ¨ V™¦è½/•ºëÒJZ Âñ0BŠ&œë¨å!SOc'$ìaU«€Çº‚á,aÀ}Ò6wLÆḋUÔð“¹Z_Sj#kˆÓOxp³; Ó#‰EÏò*0‹‚ýŸ~i;fx6mð ÏT•3!vŽõp2Ü/r`‘¶ó Úèõ™¡«=7š-nÔ$T¼2’½aà^h.©oF0ƒÞ¾õjò=Ûĉ˜If[Ç`nlžÛ!¬§3Faõœìqë,SèçËö•°aÚïpð#Ó2í/ã{¦`²ú~Y$ Y{´šdD¨lâ ÞàŠ¹d1~‚ ëŽFtÉ­ƒm±¯ŸÂõ8áÿÿ:6½‹B}„M™`ÙÇÂNlëte÷bXz>Üf\„ìM£=px=µÀà´é‹¼‹@ï(K)ØSX>æ¸â¨}q4-‘è!ÇE$ÃDþÍt‡lo*¹˜ÄT{5jVõk¡øØ–à°íì Œ¸L6M‘qsŽk#ß¶ÊÒ숳CSW/&´Œò [_£g z ¤â³+¤2ÒŲ̂(÷³±ÀSh‰¼8²ÒTx€³Ïº¹ÇXá>তۼzT¼å5¢wgÔ‘òq»¢`¥.5^”öbÙŒ[‘¼üøQ¬¬ûuÊZz«²ÿ­AxY a&lD\5^_þÒ=Ð,o?»ë°H¢Mëìáý¶P…÷eeƒo€;«Ü°vYµÓzË&Eº<|½‰þ›º­ ?ñãØhÅ«QÓR£Æ“-$’*wø.$!=cSŽPÇê?TɪdÈ–/}/”çr•Ìb[Iµ•@*ia" 8Õ­öðJôõÈØîGu$¯å?LÑ;·—µu5­ÖVõv¬a¦1Æ*Ÿ7k#¨å¿níìfqÍ?‰ž iéðD4½%)µðйJRÁ*Gm!TU%CÕobt•ÙsùDô±r-ÞoÒòªm#Â爵]¡lÏj'„e G(eK¦}žŠ^ý®ÆI¿h¢ç¥Xyݹ¼¥òÆÚr}Ögqù,–Ù×­Ýq ê|ÒáðMçÂö+öË2ÿî¼’Ó?Þ*Z*¬ukÿôrôVa@°<Û¶¶.§vy_Küq/˜÷Oz+U1„s_-µO›B=Ùhæi³ Éݬ6`b¯>áþ]}fqu”$hyÑ$ñÞÜÅ]ó'Õ†N|%'–ë6‰?W>é„R˜†$»*—è¥Tn7›÷nmû»TI‹S *¹Ñi›œÁu%ÏëS½ü¼+?¿7g ÓVãòüO‚Ýù~£_'©ŽZé´•I*Õ1Š2¯¹û³ƒ2MMD@½rјˆ~ßjø—«Ë>"yÇ­¤[ìãX‚ÊBm¾ÒèëšÔËõql&~µ¶Ûv\©ÇÑË[as¿ª€]e[˲‘’»‡[‰”BÊ¡1‘QCU­óy=ìÔÄ”î*£PŽsq}ÿn⣊whÑhÙ|Vh~ÝÄ[€¯R/g¡x[ÃsÚ(—èŒ6R&º®ápZðYŶ’yT­‡c“öxœtÒëç~,¾£+±½Æ•vŸ]±ÁJ.Ù ‡Ï Ñû ºüœUüSËÕ{HÎÚ‘\„Íì¨ô„å§±JÓfEÒÔ­RL9 '÷ôÆJNF©Aúðz‘k%Ì8èÕ Üoa›™¯t1~r7ìs»àƒÁÃm2 Ù¤võƒÓ.÷¶¾®QyvOಾ´ Wy«T–lÉå'Q#ÖMç¼~Ȭ@9ñEŽú뛞…&÷á»ìMÇò §5§~¿µâæ÷M>Uö©”û³2‡-ËïY¸¦Îí>|}}›æY'ò¼Šnͤ»[ÚÖ¶Õ‘Ò¡øUíDÊ8øU¤É³*˜ªpTݾ‡[yï×M•>UB麞׵˜M‘ ­†P¢ÂÜj‚Ã+Ñû>9“"Im㛄¸Ãsð®—¨ÕX³Ën'·ä²NZÞ󬚊mï»”õÖ ÷¤Xªñ¢ê¾‹HDR›lùöZØå5¢$¥èÑJóy½“ˆÍÇjʵÖâ ’ðñ&ÒáiuÎkµª/W“e9ÜjNÓVݹEÙòÆ©}¸ÔZJùåÖH‘#©uø$zÿ£TáUËC ÿK!©üTo™ÊÑYøz³~ 75zÆİ“N±„„Ÿ[îªl"2ͦ-}4<ƒì×>h"•ÀQ*õŽ íú#´mxE=îòaPb¾SÐÿ¼5´f…| îŒ=sÕ °ñ4è ?¥£ÀsÙÿ=ZÝÂÐðÏW2 ¢l…#ÅuèMƒQăIF,œhdhH‹Fг°åžm7²ó°È3Ó£±h€:#ÚÜüD’ Éx2xü14†ÓÀNÑæŽà2Øl2²ß²[´µÑCÐÀ,Ü48sA¥Ï‘ èQäÅ8޺ߗDÚ¬6¡›Ò‹¼Ó±ËL$rŒ¦ª¾<ÙA¸<¬O½áUòðê “(/»²µª&-1àçÃÃðqãìÇ¡ãpvaFãèèçy˜´"]Dj¶°É„6AFìœÜ£Xa[ O÷Œ±(«“äcÑùžÆ+a–ÎÓƒA"#f`Ù‡ Kee#c˜W©;”Í8´Èˆü@ÂÚ€5vÃ)»q} Ò >qv2ÄÇרˆ<Œ6ämPܨaìº=ÿ:Q-Ã>‚WÜ]"NÑÆêÜ{`¡j_ K%ÿ ÁLvÞHÐÏ®ìWÖÓ‰aäÐü5`º ¸>Ù:iYMìä|² þÖãÐ’QÆà‰S‘ÞArÞWɳŒäŒ~Ó‡¼:.OPjkËÒЛ Mõ·½`Ð"$¾É*oËXÓÒ§ 'ß.Ô¶°–D $¯а Þ"}õl#YF ?OŽÔLÌßïo$lÉÉ`©Óc bˆoIE!j;v&ÓFpoŶÝl DÃÆö®xÜéL>VàîF°Îcí(лÓ$ž(Áµ2ÔÛíð‚Í/ õ„Áþ%½ûÌfJ„´æË³>3bþ ƒˆµÝˆ‚ì5#e&íƒN†Ö“±#«-Y¸+ËÛe“aô›rÖáŒN®¨2`©ã%‘QŸ¾Up²¶¾vôXE²ö‘btéX¯ºÀÍ«?«S`ÁŠËpz"¶Ï6û!Ít´Ù€q­Ìh1À&UyΡYëÐF¬~ᵿ~¾_o†˜GÛ÷Ý"oÔ(>Ò¾„&ŽTв ò¥¾þ`õä®—nŠ;œ¬vP$åXëH¤`jTÆn'bì7’Sùä»" wórÜþÊhÔ!b¸D3,\~PQTQŒ Ü@¿´†|+2>Æ©gØÔ\Rv!’ýV_$bi·kær¤c'CªfB„6ÐÃÌ!/ÓtÕ)|BÕÈ ±i¢xÔû±f¤¬ÿ¸¿Š[¦°Ñ#MQÛfðÓ\!Ýy1÷•pÿf°JO=+Nh˜ Å8èË€dfc13„¼ï¥iôåU7c™G‚•À‚µÁ‘cklzoIÖ*PŒæ>i,buìEB®=B´#Á&âßDpÒ‘ ÒGÀw„Ñ‘G±'ãfcCQ3ò^ú ˨Jsˆ)ˆ~‘ç/¬l™Nuî]Ôû¶›©Û)àlÉ>ùl܆ÕÓÉUªì[3ä PI'BŠyN‘Ùî’Q&ÀumÇlét!Ž®ô)€c¼?8ðÎȽ$ÃÞ ËNÛ¸ªh‚¥\ƒM."s³ú 1QŸuÛZ |ƒA98ú„Z¨)àf¥>ŠQ=öø#eòº½ %BÃQ†˜cÍNcÉÜÎÙÎršœ`—¼ªñ›ju”Rz¸lçI–S= ¾ªÒfµ£Œ©Èé*Áƒ—²02É+cĨäÿª 8k)Wû®]‚åçý¦æâÔÚ *n–å›Wòg«›¸CQ"X®Þ×­ÌÜFS$„yšÚÐïì³RªU‘hQ)r;×€í° ,_Ëå’Û~–Ÿ×û»üëá¦$:Ÿ× n'u‰¤2žOŇïr[Ÿƒ—qÓŸS 8W½nßoRö¢d°GUe–ªg¶Œý–¹ÑYètȽh¹PåayVãLôþ]O°Mòª×ï[•%l*‡}麪k¾‚þrmí8ÿ¬ç‹ëY·9úÜ™¦÷ñTn\U·Z‚(, lѬyám™jÏø¹s,°†ÚËm¶G8¿›}È‘·ŒãâFxƒÖx3û³«‚³²E-2NÃ{”Oîö9´À•b Øìœ¶5¾–¹<8»¹•MÎjbnø.äý“Zˆ»¬~™U‚L³ÂØ>rC¦ˆ©ÆÈ‚™ÕŒ³³ËPçÍß †“6朂ÑEÎRŒÊ<1ÎôÐr·™åò¦3fÆ~Ñ5†&ÉÁkû”2(H/­2`« Ñç£A ` &dO#k²ìºY£Ï½Ç¦³Á#Ò†ˆ¿¬\»d¹‰”‘÷IMnÿðÜ´_rùWFoQGçѶîƒIíM¥>6mX00ðÒ$®Âq±fk¬W] ~nÔjµâÃUÐ2)örjRîç¶Ôоâ Ò…æšíyU8Pˆ•ªrƒíQ _PyK¾\Žçi•ý–àÒgQdL­µÒPm©Mù”ˆ>Ž«ï7½ «–bÕ׎ êL*„VY2eRÜ3(Ý¿Ï&ÔM/' "-è¯Ëª–ûÙJÒòßš—x¶W¸öÚ‘¯x¶ei¯¤oKør$g>p8Üè½”•UïxAi¶<„cE½ uùIðÞojñ?}ÝÔÎ{UkÞê¯Uô‘“ÞCž„Ò †±y]Ó¢Â\ÛBOêh—ZAIJžÅ:œÅ‹«ü¼Dþ¾žJ™nÌs©¨ÌNÒä —%ýñf³ØË*y¼",n-Û#_—è¥õ –kی޿ÛCT+NY}žÅÓt%úº)„Yo’¿•™@ƒn`yhz$ m/ÿlBÇ‹†MœÞˆ "Ô†Ù<þqG±ŽSÇ^ëèÊæÀo³Ì STÞòbÎxœæsy9Q'(åë¸0ŘU[¥PêÂÎ!м‚,]Tze¹tðW¼›sƲOà8`³e=bÖæ)ð†ìæ¢=É« êp¾Ô½²b<œÃ™xéáˆìà§õÐM'(­¢ŠÇ6Ž÷æ‰ÃHÔ# IU§’5?R—î§bÏÈê'Ù¡ZUÖ%)‚_¡ÊlŒ%S#g®ÍnªÚxÂ*È@ŠJþV®\^>mŠ gy.&QêMÉŠÇŸ…9 8³ÎÈ>{åœ?E߲цeW5~îh-~ š Vȼù¸&UM'kêªzÇJÚ[B”•¾I;3©)Úd'”ªØšÄ9¾Š'|²ðÜ–Ø> Î + smÐUÞ(‡:—UD|nu ½œÊ}Ý Áë¹Ð›šÓ aoaÈÔ˜7çÂ+*¡HÆ—*ªèy×DõÒjÙæ×uY?5Åúò,urðÙs3Òý\q€ù›~ý…¾þ¾n ŃqÍ4Ëîül.Ô“u ÖçEì¶l«"é<©‚‰èý»nI¥ì;ÜÊ5?·£*M•f¸Š¯¨^Gúö•Kýq¼“À1^€Ê Ñg“̨1ø^oÙ§7YwdsqŸt?—³¸“ö½<‹©ØyÍîÏ"¸¬Ç|±^K‹Ÿ×aä×Í\„’=­÷}mNܧ›²FœÄ(kuž+ Òs9æö”-ór¼§›lOë³–×u»Ä¶¥äý}[ŠÑ¶®&¥”Q¶a¯´khžŽ¹íNm‘Ï-­È5)ÀíT–Dk¬ÞxwOëËéž¾Mé,-»âÖ^éþ±…¤¾…`àÊM7Å ÇWôD¤Š;RšôwƒŸ0b¹2‚!„C8.ù̾xöfÄê ú(P. ®x‘³´€úuiƒà%™L€µÔ²¢gFÓPÁ:mèp—§ÅÚŠ‘8:TÐð~+n¤&sú»—3ªêÆÂO­Ôzd/ujæ%øÓ‘U=ŽÏS'ŒÈR˜U7ž±Á•ã¶¥|Ô8çè}ËüìL£¥6qF®†¼"@]‚îÐÒÈ>ÈYó3àçYrXäåÆvÁc!üŽË [³T(Ðnÿ›~AQ‚¦;g$æZÃ$P 4“7Kö#«Zœv¦_Qc 6Ð|™µ ‹ð½Ê:3 (kõ†˜Ò¾‚Õ@Q•eLBþ"ðäöÏÔúcê>žÝÊëFJåCIÀ"c2+»=WqjuŽõq2ãúââú©Æ(U½ƒåcg¢_Ç:ï‘æëª)œ[Kÿ“ðà¤ÊZZ,)wYë†_GÛ9¨Çÿq”êmmôøäsBy7G<|®3B¹0®ª7U*óɉ÷)ZˆW±ÝÌë‡×Þ×Ó*çø~37bɾ«uoÙÏëˆkjG(w€JTj×6i”cmjårO[W–œŠàEÝ8é×Ü6¨imájw麤\s¾*ÂV[6S3¶·ÛÔ{yc›wN*´”ä .]J¨–4Lzꦛ÷û©>Œ5 Ôéo…–VçS«ò[ÃmÓ„ky}9¤º°?þ"'D¥¼›õ:¤ÕpñJ í™mÒ­­-©Öy+ø´ì'¿ì7ÿ$ÈûÇë<¢ÝúôÛŠZT•nž×¬P'ß{$w„MR ½fDcY)²ÏÎÇAjùd¼rl=ä5Ñ3ª; å~ò…ñÇ~ IDATÉ8Å o–L³êk’Œx3É•¹ÄúZ­/Œ ÍAJ"E.áP …dCBºþ)4;µt4Æ7Ø,Ð*´HÎf"U0 `Ȉè;°eQu˜÷†fô^®”&–Æ Ô75¼®ŠÒžxƒhÉö`Jû+_©"R¶{ÇÎuÛƒ­¿¾¡û& xÐŒª¯ÔªË´Ï:ftQ+¯SÄÀ¦YÔ| =ÿÍau݇³„^_Qò(¹'èûT›mFÐldÐúÂož×œAûKå sTí¼äŽ`PÅ"ÖšpÖ:„HŽ(†Ôç€pšB+K",a×öDág¯B]t%•ÈÉ8ûQǃXi2T#h)‚³}¢ÁuÄÛŒr¸>Ù¥AïÑ2нþgO'@P¶R^])ÙäÁúÙCwFþdËʺt—\ÝŠáåÂlYÜwDi'Çï¶Ù¡á„$g›É¡Núâ½ÅÐ ÕiWѶ9¸ú³ê¿ÁÊ£ß-üð%Æ«ïƒD”™¦Qíǰêæa0ή•¨'D¡!öP}ÎÈxK' Ÿßßd=)e$b׌Rìû¡å£/U9–¸MÖQ‰:J€„:áqNïå9j‰zc-ÞÒsvô© \¡+Íý53KŠÅˆõ¿ÀuZa†™szÿ ÔcÕea=ã®|Ÿ“ófT÷¿“0~¤çÙN€ˆMºK2²¾„ý’pº¬È—G?À¦@}{¨Æêã:EÕHÿªWRpo¿Ž‚åæç÷UÌØ@Ût8Nbd×ÇAøK´]_òƒ:*˜¬û_êysD}3˜c†æ{Œµ‚ì°šçòÀvÄ÷="hƒÝ€2hÐÉ ×žl¤`yÏ'ôíH³ Ÿ2À†`‹°àoí£æ hKÁÖ//WmeµsÁUDêéô]¬…1”ügWªN‹sp¿">,4>f 9sïE`3 ”Ú• 6*aŸ³CX&çQ¶IÚ6¦œl‘6,lÔU} b#÷FvÉŽ°7ÑŽ&Ø<Ï» †½]_´ûaxWõ)݃ò푱KFmnFI.o\%èõ@ZƒNõŒ¾µ"3åšlM (׆­j ‹®YÔI‚ÉPF}H€Ê mé1Ö"áÙ‰G$Ê è± „QKS;¸ã¢ÙÃÞŒ”œëB‡-cZ œ¢r`d‚ÚÞô㺵{f (~î˜ð5´Åk¢ç8Ëx9YŒ÷BBÇϨ¼Ž Ô¸INÐÄ·y R4o콑ñvWpoM0·úžô4`ïä+Ê •#Æ-ìºvýò±h7M27Pi÷u~|š%]DW½3Ý-/ƪHËÀ2›z OœNˆ ŒîÏHŒä’ª5sºÈ»E2£DÀ¥bô;ÞÖxÓñE#çÀ`Ž…K½ÉWÔ6ÜS<Þ÷bT¦Ð@vF½Êɤ”G¦hu`‚ò`0+(`é`< £¬"ƒˆB†™1&_´Ö!°þ“wZÛȯXÚãŒ:"­"I™Gª’Z³†ÿº-&^BÒð¦6©²˜›êcyÁý¸ÈäËKq¿Ÿè²ÒÅÂßËi‘ûª ¼;7ÍøF¨ª®]~ýW±«s[-Õ¬]íi• L@»®IHˆ…WϽʠ”óúÔöQF1粊4^4ñ1 B˜Ùo?N÷û‘~ߪJÑl\Nêå­:,¼7µ¯Ç¶jU^£äNÕ»_,èÎjÅÒ×ÍhhÝÑûßK5"kåñZ´©ÂŸ¨+Ø×*A t ðQ’Hæ¼pºEìAlÞ¶Å0Ò·êæàRìÁ©oz‰V®ƒeV,n•ÂÙá eýˆˆd‘ïW×6… ô" ÐbxˆQm—º:Üá–må¸}×eÿvüRuCŽEå}Â.¤²}›«3TÆ^ŠG,Á^p1¦ÁèJ:Õ¾«ó¤*T9Ï'>[öë¼i™ÇFÅ2ð‹PD¸§^ƒ v‰¤å¥ïɪ~#˜RbjÚ†Ø\ØŽKVõ1Àz@/:רÙYS»¶ùXAˆÚ”\Ú}õp†â‰º²)öáA ¢6°‡³«©¸y%û`÷?q‚ÕvŠ ³f`BfÚ ÂÉêwùR˜bõ/¸r0Ü@Ô2n)ãñCv5ÆÃd"¥¼õƒßÊýH/z(Œ‡!8~ ذ¸„‰ubGnhœIfÄ1`ÌÂÉG ˆJlÇŸ"+:ÁÖ™Ï ì¶ËèF°Û@A¿ëÔã -«¬§Yñár>3HV¯Àvô˜™º^ìö×jÇØŒG6ÖðÞŸEßÕ7±)`Kªƒ‰X‡öÏÿå¿øWÿæ?ý—ÿù¿ÿ×ÿø§ÿø¿ÿõ¯5iR…š³þ• äq±2:7ÏØ1+ÂPX6a¤ »Ù”ƒíÇAaÙ¦ÇzÁí‚λ:ŠSùŽÇ㎮àYI·> )™.)ÅÛ^3‹¦ÇËi`­ṡ5VÓškªçæþ^Z%sûS~QΫüëÕvÛ¼ÃzE€œ ÍDoôþ‡é—¯à&Ô+{­’²Ðl…RÅU$´½1 Ø}}ËÜïÂãc^™¥±s?.]¸vSS:®FïJ‹kZû<ÂÒXÑ s“úr‘˜æ¹”ëõ· }õºfª^­ú1¯7ø±^‡³h^ͺ{m-n¥è=©©tÑľQ¿Â¨—•>v&úu¤¯Ûrõ”¶u½2¢³W>YH·Ek¤Æ«‹<Ñý~ÿ×ÿößýÃôOþëþÿñß3@^lã›y8nÙå+ª–ØVqä3{ê—/#Ååt‚ÃÏìô!ø{ÓRrWð¼3”üè°•”)ä(e–´Ë E *!Omp4†Ø7FÆKtÅ¥a¶uØpxHÉbpˆÕá(íá À]Àè'Q¤¢fÚJfà@¼>‡!ÁNjwجpã+ÛAJ@:ÈljH¬ºBË*%…ù,ÙY‚§`DÓ®„-7O"ÂC+bfYkD±õXòecžnÕ(•±3€ÚÐh=;\%Á9Vî!!úô{6Ýî¥ÂI+å¡9+œž¨¾wV[Ë–0•¥Å­UEMµÅì° ~ žÓJæñ±:L4ƒÍÊ‘)ÑÅA”ÙmC!†Ñ {+­h4 r±™n—­ƒV, Â#ÉH¼’qÞ©ÞœžácvÖÉy¡µ€è5M¶S:`AÞÃwzö>®H}ŸÛŽcµ/—`v79£ò „ÁÈtM=NüuD@˜×4,I-` NhÊz‹ÏÖµ  $0ß#[ÿ9輯CÈ ƒ±Tõõà[.gòIì-A5HBDø»¥ïoQ™ˆÛ:«ØQcu6—N¯g™¢÷‹‰Ay±~×Î\ ‘€±+Òx³« FÁqy:#(¶"¨¤Ic£æÖJA™ÎHŠ"…’6×59&w/TtÔÀ© 38l”ÜŠ§yFŠÝ Р TçùR¬Nž™dSuŽå Û“§âbñˆÌ˨¬ va/ni;NÊ˶@]†AFé#nUª‡O\(.»h,›áAÓ5sMEédµnÓ' ä IIâBš?¨ä¼¶xv½÷ŒŠŠŒï©ï4¸Dp¸-¤¬±ëz„óJÁ¬kX’'Á¢›-B¤P£f›:/Œ¥oµÌê‘þÒa¹®á3Ñû­Û¿ªWÊo¹ž“HLgñÔ×Ãøu”þ×eÕ=µ·/ŒÉ†Àú¶yójÂGä©rD±?VT…알ª ÓkÚ¡ìÇa“mHQÂ10:qŽp6æL £FÚž}1žÁÊ,,bvéáf•¿û™\Ø[K±T£!“sÂ%Š™U)LHm)£A¤‹Iu¢d„pî)òkrè^_¤¹º*‘ñn°Ç ݃iÀ˜0nPGÍdYšø´åcŒWÞPs0”Ú—Ë6U''ŽÕjg„@í/dËw53ý#ªgv!B¾Sì•^RË5«É)õ4dá¾609 eÐ ÚÎà´Ù9#ö­Nóá›5–P¨Pëõ9ö£¸Ü5m|Úè¿E½G™/˜×X 1,WBµúðßìz¾¦ò3[¶¹\ ±ýd A_Ĩ\•¹ÒòXV~p>dªÉ¾pIó.«;êáV¿½–DʲyjåÔòuÕá·¤„kŠZK„åeåb.ðÙ‰èã(Wˆª'Q¦Ì«†Â+^*ÒšvùörÑæ’¡5£Ø–8¿ßÀq•¨Àîš«ÖÐ*U°ˆnÔÔ»–_íÖá%µ”Ùz©.T3úv &}CWsÁ ¯wÝÊ‘?·š[Uuû>¯Ù–C9Úß·–ì“ònIÌe½,BÝ $õ¯+®º.ïg{.ÒV»ü~µ0¦+-ú -˾¿±R…õòíʘ¸–'ûø_Ö9VðH¹à³°Ù•OÇs¹Du]©vά*Œj ÜÊ—¯[9Ú÷›* äÆ5 q¿hvOÁ³nm8UÑ™m[g“î'¹ïÕ`Y»Õ«ºás¹àŒN3ÑËQÖÊå:Lë‘_›ßñòFõPL¨euV5bÕéÐ~@µ ,0(ù:ˆVØ…£ëCxhUÝÑ #"½2q '‚qÒ3u“Ûœà)B6áuãt¥eç°'`Ø“¤ƒðÎ<–ƒŽCSã:áW‘Tqô‚nа›qM¬]zÊÃJò¿alEFØzƒýóê…Á|û tÅ—¡ÓШ„,‰%ÂHW[±e$D)„4í‚7ö¡³šÑäñc»ÔŠiÄ,’ô.‰lí’µ?6è»Él(áònY¦Í tÄ”Ä7Oö‚ûMÂqŸtìà1ô1ëñÀ:­Ññféæ©ûÁ¬7Í®ÿº1¾Õ #€çĈçšxê‰w`™P ¤m¹9àpÈ ÙYu^Qž ZUÆš¤KÁº1A ·1a%!¿±"¤¸ŠmÞûØ£œ“E”Àÿ|"…Q0Œã&B¨N5;=\H¢`m¼›œÿoyÁÚÀÖ: ØøóðDÓõÍ7J–AŽPà~Ž¡¡ææ:q)ÅâÊòøGë¾ô–v{DËõlˆy Z 4 7?ad“¸•†ÙG¾p#ßüôMŸ¯Á›Ù  Ñl}À3• E:寰5ã!í¾Î°' ×q¤5œ§„c°­)!ÁÙ[›#±;ÃNSŸY]¸Ç~…ÐðÈœ0“î§ûýdG€ |ÉI5bÕ» „» ø ±Ül±ŽÚ,<¹z% çhYI$d.•® ãm]ö–Pȸ|' q³=·{Vqd“ð ${ÁÉÙ1y}ÈóFgÌËyÊx´a2JqLˆÝ®±˜X£uC`2ŽžØkðØ!Gýp«ÚóÕ㢋’¨ßh)¿~èøegøï€u°ؘ8,Ò¶ÀŸŸ·ÃŒÖ&’z/ø‹:óä!ÐNɘ€ÕËšÍX>ã‡ËXy÷ ·ÂbN²­úŸm×$dD)„}9 ÚMÕíÅv­å®ŒP+™W?§äˆh+š¿ Ói§ÄââÈ;ØŠ zΡe¥í"†bXÙgÝåŸýÒìzª9‰Ñx}û¥òÊÔ+æ¬I@ Ô |Ç}ïW³’½˜G 1ˆwíãã=ÀÑfWÚç¼q<[§½vòŒ°_ÉíêBØàø±‡ƒ^=]evZ×¾¥n²§üQ*ãÍè¼Ï!‘s¹5ªR;¡x„i­Òóý“ÈWWE‹ öß¹£¬I®}«^ì­¡rੈê$ò„'vñ,»¶RFðKT\‚½6ˆ–®úüfa!h]Âm82À$ÇHe°ubšTDSc@²hÕÀÆ6¬eõŸï¨û̉Œ.°Vàõ"døÏhŽÈ@†<ŒœA­©xr9èîz<¤´Çëc#ÒÏò¹Ò §Ã8Á | ø™,¶­~|½×ÀõH?¥²Šp}£-2M0BéÏ$.Y×®­‡×þ{ÝQ!yd á®yŽÚ>,ÌË©ºRTÏûÍ`&‹êBºúº5ã´¬/¯(&ˆ“¬$¡÷[™M ]V˜C´"Ê^J&X0Çr¦—õõ/G9*‡Ï®¥«Æ>e¢g»¶ Žë¹œ{…2ÚÅ0 D ÖÓúû¯[yvª?ì$äP«qÚúƉ|¿‘ÔH]>ÿåØÜ¼ž‰Þo oV±¸gõdµ#÷ìŸ,¬Â>Þ–ï½sQ#-o¿6 YÛ ˜Ä ½ 4ã*[þé,ðxuQ½×›[þ¾|Ëû·Üh"z¿Ñ•èëV@kÏ+xïåH/Çzîô~+ˆ»yEýUë,ýäV™W¿3H¬fS^!mB¼ÄƒÃÓŠzÛÒ*W£Cî¼àe^p°FÍY.T9jä¶Å0¬ìQSak•ßÓÊS\A­åà_N•ò%5¯éZ0%²>;i㧸®Š¶ï½žYj"_Wêä¥\Ÿ‚'üT›g#Dѯթë2†Ü,GFJ–Më Љðé):ÞÄ~ÈL[`ðõã…¦ÅðÖ,ðš)ïžc "3ûVÅx¡õ:¢^ÓÎHÁÇ‘®ÍØ¥Òìê%*•å¤Ú0¥–Í-C?nÍœ÷©Ñn”›3•2¨ÐªÞ¿—£Uz2Zœ‰V±‰Ê"*»ü×­dè×r}ªü„¤<šÖK«!^›VË"Þ±¬½rú|1kÔÉZÔͺ>¡¥`š›Ê¢ì÷žt5v•zqìý®ÕT?(œªß·zšåª®[$9¸\Å«DÀk»•Mtæ©ñçRȸ¨"~©áªÉUío’Yp+³v{ÏâŽ,æ8“8Â~Õ÷€êºÂ¦»¶ËȉÀ ^ó‘ \à‹ú®d¼Tê ìÆ‹Â]ºJ£}üÅæ\ KÜv°O Nàeš (ÇCu8ŠÄõOƒ:¡Àé8šAÔPŸ³ ·Uäf¾ Ñ@¾có 45÷Ìn°õ°®í,òöð2ncx±`þf‡•¨ÚÇŒ¨¬È˜‡ öf;V mGÞ ]iõ¼–pDUekVi,l©”±|;ИкÀ°\à)oG)1“ÙÒÂäƒLäýìµzĵÛ!=Ð6‡ûÖlÎqèJ¶{3ÒÇ/ÐÍß=‘7öô½üxÛB¢Ò.¬`¨ ušÂ¬‡& ªMÎ@Á Æãg;BåÁ}nA†¯×õ2Ôô=ÅAÛ'ˆ|D(œ{sˆÓg³¬Xì`2óì†áÆ „]k‘íþH”㛥9dCþ.‘ƒ0dçòÅáߊsü24Ç(mt[-ª3]%ûzd:l ¢ô sYûDÖÚý:c>ßœQÍY{_î!­A¾•PG1ƒZÙv}s8 ]S Ä÷j Ð1¶ŽqrV1KV< y‹u«Ê•V2ØsÙdœ)6è"¸e‹ì·Ó#¨‘—Èò÷‹C¯_Ù”¬Mȼ$®ïŠgP[.¨KÌÔ 4c+ $í!ÌîMÿAà.èëD)ÐQÜÛý_½ÕÍÛýû½@AÆJH6}F´v\10ê;ÉTš­»ècÀNwFŠŒ· 0…Õ:m¿ËØ Ö¶D¾UL°}D€Rà0 1ŠtÞ¨«K‚5Î 8®p'-!ôftYõ!aNl‘%×Un”JKðG(ÄOÊæ˜èx5Œü«R(Ï%ó#-"ÌÃõã ”À°ÑuŒPÍ ?Z‘Y³—G£ž·Örôî©B²£äåó‰bÔë&ƒxhÐ W›ÕÃÞIÒàLˆöÈRÀƒVǼ+sØþ7Qô¨Ÿ E20Ûy€ôÜœs §`ÇÉŠ±vg;'è§Ê3Tn‹Ôñ-Œ5'­Dr ñ(EF,°UeÌ‚z1[•&,t›Ðü ãÑçKŒgþê3ÅìDµOs—B›µD…‚5µÃ_ÈØr²[HëÇ&IÙ4üE[ÓŸGàr<’„!P÷A$c`ë,‡…pH!ƒ‡/µA\ô²¶ ˜ª×]¨-q–ªê¢eL‰¶ÙvyÕ‡îš]è?QWÐ÷"ã6„!Ð_Ø%ܾƒ€ügİÁ2ñ±ˆ¾ Ù€srÛÙ`´"»¦JZBH?Þ¸¯ú3®9˜·ù~J‰°5˜qö›]šN„û¬±N.ÝoÖpÖ 8ìCiÄäKb/Æ“ÈlÁl ŸŸU)éU…rìÍo¾ò³¬ =Ü‚kÀ\®hž*jè7“]ù¼0Òƒ†úÑég“¹Çe €²£YÑ ðQ´© ަ²ÈËB©×ù·Æå&@@½lòbdˆB÷ÒÒƒZqñ° ùÞ»ŸôK›5ë&“¨'rÚ‰Ó]."l—nj[A1:òû°¬Þ@å"ì¸8‡–„¼%-e5`ÂZÒkÍ5l:éûŠÙ5ǤØRŒÆ i«Ù9YpèK€‘ÓθÒ¿z€‰egs,ýζ¥QííhÙ÷©Ü¸laJòu¡˜×д³Ã(ÂjGz?1çú IDAT›DZç7j2˜€D6Hz™Õ›ÏHAØÐ}—žtIgg`Ô;ñ)¬ì+hAüçfÄÚ x@¸ Ç‘`P‘Î éŸ|Ú`å×óËàÝñõq«Ä] Gå9ÀݲíÚG‰ˆé´Dv% ~á|¥='Âw8J´;Þ”CG €û‚_Í¡™ €?d 7Uºe¡\ˆÎÀ¸‹+δãµàrpvðÛ„E…šfe4âò’äí½'ì+HT‡öúG¿þî“7÷™ã¸©Xç[of€õp±*ÀßYXëEC”„= v¥ªT¬Ð`¢°7 òÈÇ™ñ®`o.•†‚V_ÃÉk“t>¡Iè#DFú{4,\Û¹,D½ÌwoËq$Æw.£7_„7YAP€M3@xýcO(pφQérw3ZÑ Ûcb™¢.Ž"ª/2]dnì™^«'‰¹¿°¦˜ÑÆÊçÙÑöÝè‹´ŒäD^88²RÍêüÈŠ]†žE]U“Œ%@ÊVi)†´1˜¹zèg2ÀF¶-ÛáÜÈ;XfU|ÀœÛªÎùv‡r2U£-Ų¢FE½[h6Åᬡmß² 3²zaÄ2L ÃiCZ Þ[*Mõd¼Îlý¥Tïˆ~šŒéú¿æ_ÛÏEýF¾¥ 㾆ROõ¨:úR‘Àü_¨`Û„”ÜïÍŽÖœÚ]€‡Ò½FwU^ç*%ƒáe\Ä~ÌðoôçÙƒú¥Í‹}ù™‹MÕûiÎî$>íá-š7íPëÛÍÏÜä|êzkÞê2HÏJx©ɵˆ¾,:FöÞMV¬y™“:r¹Œë£Û\ê'±OM+¶ òJå©Ñ\$‹Þo‡ÃMEˆ‹:G¢f¦^-ê›éûLtY÷¬÷›ZlOBS絘Ç× +•„è娓æ²ÈÏrQƒ­fE¶ê¼èœ~ßïÇE°ª\üå3/e›>¼ ½×û©(U%žß·¢5¼ÈònERvùùµþå÷­è }ÝèëFô·ôr¤_Gz¿ýmyÁy=þy½J/'z&zY‹RíDôr*©JÇ«pmÓWö,‰ ÑÇ‘>Š0U•&½6èåHõíw^…»d66­ι¨:-Ï ]ˆÞ¿¥rUSª‹äBíêÕ‡q¢{n²p娮ë~u]ÛW¥ÆT¥¿hn;˜ü uë®­®ImXUr­Óì‡4ó—ºY×gi¤æPñƒƒx×^‰ª}ªÈ12îªo‘RÜ&øE½­E±¿—Ïɱã¬Ó¹)=ÿ\•>^“XœõY¿êtmnQ?¤*’©+üŠK¢*Ù^6ŽY_¢¤Ï¯„ò-󺼊[\Ué^µvå\¹ªŽ)IlmÇ*”Wþµ ·?¯ÛÓkÑ\—û”L«Ÿt¿éåd²®å8Ë™¾ßŠþ·¸†íŽLZ÷šDðžEqs)Š…Ezn‚ï·òQç¦Jל.«ã•ècUr:«gQá£SË_4øÏtg%ŸxÏt8|—ï}&ú8VaøšŽÜïGš‰~ßèåxx"ú}£ß7šè𴆙g:¼}}—¸%dÂé×q Nôñ—¢ÇOÿÑ×7ÍD/oEDÿyýýŒ¶ƒq¸AËU¯ $¶d¥®ÃC;ßò‚¹Ù´zE§YªGR³ó¢I(Ô›ÞoMÄïªüÚFý~+"I¤©-ì¢ øòÖò§Wá°ÞßòDP[Jƒñs}L>Ž2’•³;»0Yo÷¢Šyû›2(€ÛþkDa¡ãÚ¾| ø%áÞ®fÚ^(Ħô. E¤‚ÑÓAØJìHvX’êf H@B ÊÏ?l㋱Uf#رiÍùfšRà0ifép¡ƒŒš-ŒƒwYC°ÛN,Q¯­J¨Tdð=@ïQ gûþ—­Ý);Y›.Öžž–N°x3V2}P—]¨½­ ÿ+€‹ …¯Äû_@ã Ê ÁÁd¶Š-^Ý#ô dÉh_a ¨,mÉ­Cózާ¬g{ÈßÀ-ÀÁh#hŒê|š'úþ½ŽêRyy±WÏo¯4n[œâpµ%ñ·1ûÙã[ÿ§@w ¥x]¹+îb¨Þϰ0ÒOOäœA"~QOCCá½bgKHœÐÃs<|JÈë69¨ÊB°0რhÊBÞ ôÅB«Ø~% ¬ã¢7;ÿÓÈN\’•Ç%/Ì£ö #92´°øå@¢žÿ»„Ÿ: «–ÄÒ›¸Æ3ù^VÁOaÙ¦_D˜A,#Â,Äåb.ˆ¨ÂÐ9Äè*sgwëO‹~œž-0?ªNt‹ÅÜŠª(Wàp Q “ndá >)L ³ÍjØØ¶¡Š&x¶Ý¶z¦åªÎÍR²^Éåðšq_µ4|²°bB/ðˇ´[iðцž¨¾õÏ+jqR zÿã~?žˆ~ʹœWõ ±à5ž‚qA-.¸Á†Ï»ÒÇñpø.p‰3]éýÜøu*`Â_oDÏôëèÿ¥_oôõM/'¢ç‚!¤‘ñûÿ¸˜?ÚÃ;­`ÂÔÀoË­§sq›¤÷ï†yÀŠº$ÊêZ 'T¬â¼eSR@ÙÁ˜´ëæv­¿ŸÔfR};›u½\W×Õhô¹À© ç³­Ïæ*~ÏÖ¿qqæ\å•åý_my¯K¨á `{`ëå}ÿ£â•ZèÛñüN+è÷Pù0[¸ù§¸“ö¨í@åFSo‰‰d5„ô…9–ÛÓG3BL'z‡_¶Û öµæ¬Õëg{"íÓÿ"(?þS»¬uW•–ÄËŽfàŽrã–ˆµå‰Uðh¿œV,V xWñ0³~°E¾¹¼]]®k»’m‡’èÇYùË,†³¿o†¿Qá‹yØ0ú+o³µìjñ;~^m—Êìå(óZAÕ埈>Þ²ÝDäö°Þ†QœíyÕà'a ²Æìvî³|VfB…}ßóŠØ^½n[ˆ™W0ØWÙèdóá‰èã¸üåp¸Ñ™èב®+‚ñ~¢ß·ò–_G¢ÿV°¿oô~Ó”µç¶cþþ.q¥˜?ÊVýr¤¯o¢+}}—Y^üëHÇr¡ÎD¢—·rÑ–:»çå¢vóûý¨öÀW•ÂÒÇ[¹ƒºê¢¹œ{‰Ü—vÇËþþ,Èkø\~ÙÂç¤ÖžÝî–ßœê#P^|%º®yɤíÅMeYçy×c€–ˆ~ßþmob[vf®[G !œT߇A ƒÛd˜‚aßÙÕ¬; nº QàIwÐP19A¼I<0˜ÊQC&4E'ü "ïÀð(!³#q ¢hI¹UXMÞîβµcvzpöÏ÷³ö>çÆ“I/Þý9?ûìïûÖ·¾µ¤úêuŽú{Í Ü©”±0~¥e¨Ý(îÕbîE™ â0ãpØÁ–XcÐDÛì /—rXr„}áŽOîQì…øä >yöâ R¥¾a-!ZªŸÖ†Ë&ý5^G ¥TÙ!òol6¥´(®šd×–)ô˜r6¼ôQׄ…ôÒ)-èQŠá4D†Û…0»²ÀllXpÁ§“+g-ß' /V@)}éÔ² ZŒQöWTßem`' ¢”— LØ"£‚Ä=2´- ‡.¿48í+¿{N`~ÇšÕÒCàþ¯¦}hZ†¡=n™4FTöò ,oøŠKý±B“Qݤ- óN¾GmÙ/îúô[MÀî$ýîQ+úvœJæM-»fM—>a‘½wà Îbsºì vìÎk®Å?$½.ݹ¥DÁôE3àäû2Q¯SàMŸÇè»î>BXù†ÈæõîòXŽ~“ß?¸mbh{š¦kš¦ˆ¿­rOP—Wƶ"à;8vFtÒ>µ÷ ]3X‰KÚ‚?õØ ³®¶µ.•¬øÄ!Œ6„Ôc×i‘èÐç:¯:CF¶*Guž-;fè©ðP'wEçkûˆ‘°Ú¬–.ÑÔNDÇ]ßU=¹ØÎä–ë ö‰m}¡ô÷´ô-ôþÖ̘.."0úÀ Â@? v8“ Åv;y@'6W¥ÅÇ”zÌ3šýLR%îIpo'KPŒ|k¦Ÿï? hnÖJV.2É;j|!à”¹Öì:vˆ¡m\@ÃO 6ʘ°w*: .Ë´õó:^}µnp±qƒ‚6”bÎɲ¢à¦I¬MµJä‹+¡<´V,q[ꔜþÉÏŠ1Ùbõ™ÑѤnSßR9Z]%UAÒXÎödK eΜF½ p³n&9òŒE— h{¬zK}ûZSÙs*®áñ«·‡†—`Y³Š…}oÐ%ø‚©²%¿³Lw:?ñ‚*Xú93rïAäRúyñµ&»ŸLò«Ó«·ÍaNŽ–^Ø¿G\åÖŸ`§ŽÚÀ>¶܇ÆyáÂj£±-ÌÈ Zž¡É[B[«7ÉeŠ®Ú#§ Ê&;E…ñz¯oc·o_ªF­Åô8í cË×·­t®Òוƒ‰bOQmkó’èÂØ\~Kú#´h,›<‡¨­4Ã$Ð.s&Ùvž¼G€ÄWî'AÔr­píÚÆ›H À6Ú“lÝòÓ/š ž@a86É~³½-×£zrÍ.B˜¯Þæk»Y³ã0wá÷võzÂÕô¯A%鯷Âî×^±Û;ÿ sw·íZ4¦%f´wÝ£Ò©sQj ƒÚü:0”’–z•°°µŠ$¦Úio¨|¸ßY"Ûþdä‡qüÝ8~<Žãõ8ãøñ8^ã0Ž—ãøñ8¾Éÿÿd<Žÿi2Ž—Äe1šA‚ ¨7bürT+G q|cÄÅ•/)zËVÐÜ×Ö.+ºØà \ï°e7 â99°§ÃMÚúizU3WÎ[We'q êˆf¦¬´®§Ö›OíÃ9%\Jc“ZŸþ_ ‰ÜKuÑüŽP¨ƒRv¶Ï¹ðmñÔ={^’‚*£·Aü“ ^!—PówM/"€|Žúù¢Oö8RäÌ‹9¦ÍbÚ…ÑÁK fu5!6X™Ü;î¾²õÆ„8 Ï«’kwB÷^\í½ÐåÜgÖÎ]œ½¡ôwIä+ÅòúÕkàáQÒ'ÆW½#盪4Xž½3%“h¨›õîv8›yuêR}&£ê™V1ºó5¤øíA 3œ õ¶}jKAqŸˆr•49ÆÄ6,Ç9Ãì[ñ.túè—~ôËüA(ôá¹!ë_Øñê—>³XÓûôÏ0'oȸ>ð{£‚D¿§ëØi¹(-Ù¿¦«Ôîˆ%ݲõÃ~7Lž¯ŒÚDÊÐÆè«\ÆŒ|Â:4ºñѪRõÛ±^hCÛG­[ÊXªÖ©…Ô„ø½‚~R¸ïr/Çñzߎãm¿':BÔú…ö" A RÛ ‡4¨J+ó,r+k;ŽWB¾O1° yg ¦ÒòâØÒyÐ$":™"îˆðÑpѾ‘вI0fÐÁJÌÀ»~=É;0XÛŒZS³ÖÀfÕµ.eKéê8•¦æ3fXàË©£´YÍÖÜý^ qI}èʼnξy¢Ñéß‚^¢0wµUSQ!šb--"¯ 8âj0CPÝ ×…ö|3BôÐâ¡-QZ þæ¹æÁÌoGí\14dmm+±Ñy2\2h7Øžä´Wz”?ŒŸŒã'9hM[ÿ¥p«ºÌ<ˆËqÜŒãg™Â·¶¶I*cBž£tbL`Ô¥vdÞ(ñ@ó²qÇ·±|“ºnãecÛqÆñ*ÿuÂ3¯UÏL†É{ 56ø'‚‹OJ±(:00ï«–kW[¯`ÌUÊ!,ÑÔOP ´ ¶ÛE¾þäÙ÷Ž\A£”wµO_˜Cåsef‡¡GY=V}%°ÖÚŽ¥D_­µ 1«×ª`4óÞT£6Z ÜÚ´q†ž÷X¢ûî” U¶WXÜìƒd. wb’qï|­ ý5P]B NXÇWwuü|YHŸ|®¦yêÈê¾"`iUìµD±Þ¹ÛLŸVÆä®²N”€´ž•îSEÑãÌæ¤Å¨…ÀàúZ½®IÅ0ÅôÛÍxºh·›IÜ­ât£¿ V¶S z§Øù}ú¢ôÔœÖ˘üAn|$ç>£:åzO“»5NÖÀDàÏx>ß¾…ókœ À+à§ÀŸ¾ügà»«Ó XM3¼Å`éá€ÛGÜ&X/›•<â«Õ!MOï|™&‘/T0Ü>&E’2Ÿûüçkà€oŸ‡“+àïÿðO€ß¯Äüó/€ßVÅŠb5á~õQÚ·^vDÁ­rµì ]ÃÓ¬S Î ›lÀv⻨œÔÖ©Ò^9ÒU“òçöîš÷Þ¡"ÉÓ½ÈK¥¸mM'Ó-Àíçë¢Ä¡›Lë"ÏQEî¶é[žóÃçë4„~ÑÜýÒ Ñþ€vJ–ÀJÖ«ðÂöÀê¾ì—‰ã¢è%ø”Ót}¼Ì„ÅFY\)vV)`Néƒû§ רÁvæZ},0+&ë#b/³ZA÷h †Öæ˜ÀôNg±´ ü²“è¶Z¯û¼+A»eyˆÓk yyóù~5)&øSN›ÝR‚f]¥sV?ü^ô™Ê…½©½±–ö6ý’=]%t¡t³º´Â ¬òñH/1ódUO¿ MwÂd¨ìOùHvÂîòd=…1ëu¹Ë^…ZÌ;K1ý)ðÿƒ‡ÿ'[<øø%ð+à+à+à‡À/€/€Ÿ¿þ øh²KG5mj7¨2»,]±Ç8n§Æ’l_­V8Y㨒¤—=js+I`üGàÀð ððçÀðo€WÀÏ?΀¦8‡ÏÓ8ÙJɆÒ$«h—ËŽéŠÝm”í…pÝÔ¾h©u·¯÷kr/“‰uC{~Ä>ų’|À™ŽÖ`Y¤RNÓµ­ª@¢NzJת¾±Ä³ÉÅêö€“õ8®eS¶b{݈½È}Ü=V«wéÈÏD¿Aw²©Ì-Ìz¡L’w³ u,Væ)ég{â%2ðžX9×^: Ž›E&`™‡ETø…ÀiËH˜qi9–ѲÌhõ <ÝêÃY“ŽöH\a,ޱû$&*œÄƒ–06¢|áå}™6„„ ,q 1" ¤æZ8åCÁbþ) Žé´ãh&@+]ðÇãx=ŽÛq¼ÇMþa[Eië€Ô›q|£hâùž’;­¼vÙJ Bø®°ä&ñÚ'¦x‚./-·>ýëv‚1!giÍÔ[ü„5ê…¨yg®À(ÒÒ¶e½JÁMßB õƒV-F"¼Ô‹œÚ6ÃÂF_?8Ó3#›Læßïê’Îh·Ï-µ}ö–t¹z(04vN9 m©’Ù¶Ðûüéð[Ä„%ßÞê‡ÑiÞ뼆#Î…@çs„—eÜH?4¡ù¡M¾ˆ. ?úê·iÿˆdÕéHyj¾íœ™MÐu쥦 x¹zïÇáÝö¼À<³¡®€2ÿÍüõB"¿¬Œ†j²Mm¤ñmµÞH¬‡m‰Fª½!C”iR¦ÎÖ¥âÇGÑÖ’®Í¹ÓWëªÕ¤L 7“/Ô\3aÇDbG-åÅ68Ù0ÒÒ²Š+ᨢ·•—˶‡KþÌ3R˜b~V¯?Ô\§-4–\eÐ,sYBCXb|Õ¿%&´NÇ<½,xÌzË(i¦-/ìZÕUŸùb%Fî)܃­}­ÐËÀÛû"÷ߨ‘=ö(è^k›ÐÑgU'¿d–60±£éG…׆sUÙÊr`Ö‘“ý8ý•ù£ÚÃ+NQƒ;ÁÀy•D ÀiD‰ª÷jßd*àD¯x“#Ê&—2Sùò&B†pňk¥œ2£–£]Ñ:xQmü¸–‚L9x\‰¸u™ð•àƒlŒ¹p“àÐðœõ2!98udCµÔ ‹3rBi3Sô.Y­bhºVÂÖÙ¬"B.˜Ø‡ÄäÔ§£ü±š¹èE¬YDŽNƒ.gëù‰Ñ¥¯½Œ×ûSx5sÏêeÜÅsÇ[7™™Î&λéPPÑ*5Dry-"Ø„¯QP•RÔ*t•Ê‚C´º…ÆŒÄW Xf?ôí*E{ј røõj§Ü:Y†FOˆª¦Ö¤d;Ž?ÉxàºÕ«êj“Xãã: 3o_¥áªÍ¦´]Vd´¢²ZW|ÅK¡y±VÔÄñ2Ó§ {)£m àq`°›I’¢p6ÀðX€Tr3ÛìÀMª¸Ø˜O Ø.EžZ½D†Ž´û¿ßXê v­­ÖK õ™ú³:~Ë/ú嬹 yÀ‹¡B#ôÙ|*ZV„C“±jÉÓAey¤—cäy'À:´¥©O9“>д—5UpLƒ€3ºZ[йPI°ŒyÊãwÒéDU¨5Ë5pñ òuAﶉ~™FÒèÕ:Øo+F—~Îô÷²Å5g£kIFÖ­ŒÎ¬Òh0¦>Ö¥¢—ªVéøñ}csè†ÆîÐmp"Á¹-oí½1%¾­=š!¤Dêlƒ6heÛì± /ÕØð(°>2Ì>¨n´}â¤øÐÈé_ ÒÔß =rTæ_4tмc;CX ò×Ä61`‰þá|5QT¼ýÁQ¥ØÑ±ÊõrÈ?E×íð3ÝÞ2#4Ôu¼©" ¼3Dš *»Ç¬fÄÙwƒv’þ¶ƒ×¼Ž çL•ŠB@$¹Žì¨¢aov Ÿ=ÐS¸OÛQKc¹›eT i_utlH¸IŸ/o‡å"ŸÚ‘Œê ™E€Ì ]u~7¢˜fq º†ïõøšl|ÞäÜdîu¬FÃ’®VäÓ žoV£ùÿxÂÉ%ð| |üø6NÖÀ€à 8ÙßþWàðüOÀí»:„´ËÏ'ëä,<-†“í|- ëU˪ T$ÈMúÀçÇÕétg¿‹'àù-žß“-äcðð˜•Þ_àa’úy !IyÝm’zÓù¶ºý¬VESªÌ¤?Ó%½['òº¹ÂW9±ÕÒYŸ¯Ó0ßM]œÓLRµÖÅtïÒ ™ÜoÒ3dôr7§{-g Ó MƒzpªÉç…z*ËìŠu²Á IDATAõ é9­æày#1~§1¯¼ºÉ ûûz<€¾ª}v;¨'ôróÈÉ„H­ã¡ðž\>cSÒaÏ7½BïºûáG‘ /¼ì ŽÎÍ,4:X¡QzÛ'[xÀ§Üž·’“ùä& ?8ºðÐëe¶TƒIÙðG†ùõIp’ØîTE&geL@Æ­Ýc£˜Ž¶a) £Ï2*ø‰ê%À° „›¬ç´5”èÚ|Üð#ŠñG¡BHN`iYóªU:mÛÒ }ÄL·IóBz|4êÛ îB1fÂz7*PR¶?0ôÐõ–´`ÚÆºç4\Ù”ÚEl”Y¾º’5kçAŽWÒ'Ó 5¶1WcAÿBÌú™G«ZÅ,­”9`ð¦.‘ÿ§EÉrRô¨©*°þ½´v¬™©†¿ÈXñÿ(_°–‰n¥Ã;Ø4|y¤ñÊË^šö¢6:ÓY¹,.ïSÒdqðà,«-\hFCcÿ¯E¢-а4ú”5a‡ähž#K”éZ¥ÄqQËb _J·txOµžH>è§äÒ¥LóL¥¢õÖܨªTj—b׎ߖÌ÷ö€»¤ˆJz7iÉUT=J)ë³´–.ªŸ½7>­ ûô¯“ƒù]Š4\f-Ó|ñ îÎM}þ%ð;àߦU‚?>þø%Àoq²>bzA‘C-åÅÃcÒ_Èñ)íp†“-N6x~—ægŸÀxxÄóÛdu¾ÁÉøøiÒnÈj³¸ðkàËiåàöœá|S‹¶éHž§êêŸ_?©õñT‡oÓ³p¾®»Ši#¦×L‡­Pñ›*O\q£}ŒBé.¯N³>Å™(¡žªèL*þ¦Ï¹}´Ïò™Ð}~^ƒ2[¬ê{*F㟰:EÑIbÇ÷UW¥Ì2§¡ø› ‡ŒV«G©0, ×=ö4/ï§<ã|Re2VñšIí}œ£j¬%¸g™x=6]ø=¹gŠÈ°¨NêŒIÍ*пÌêe)¿#¼ï¡¸´¤ö¤5€ÚF›ÄÚó-%%Ž7;÷ƒ Ñ4Jƒ+)<eè¢'²þ¼'Í‹LØ«'†œƒ±ÕÉS$$ï8L›”|~6‰É†qüYÒM|÷ëqüd·ãøñ8¾Íâ~Ÿãÿ5Ž¡öä%ºR ¯TCKëªú8º mK-¨€›R?%.»÷ 7“¨ "%AìR|ƒ°.t” rƒJïm°Â¸D“3WHk=š˜;Þ|ÎùH©ä¼Œ{eýÀ„À~_“õ<ó", T³3OÜ‹È~ïm¡mŒ;«ÎŽÅj³³ts•C³ÍÞÁN_L¦?&AœPŸ|D¸$ÁN>šn¢1SGËO2é(îëØð¢Dcº€8yÆ|™ï8±]5[CÓ"–—ãøŸÆñ“¬ÝþqÞô‡qü,‹\l²TîôÿW¢ù¢¼T+5Û•D85ù»&RQŒñMÐbȳY™”¡N<ôqH›˜Án÷‘¯pó¯Ð®W6Ÿ£zƒ±ÿyKªÀ&£åd u=H™hé¥H*,ó@ð(yÇ¥]²„¬@!ÍDJ@’€Q£yÉÁkÇA“ݯ4ób›_üï,ܹbœ"GZ9œñ´ˆÊ[å9â' *ØÑsºG ¼,‹½mÜR| […[o-*]áæ»%ÅI JÙüÐDÅ1/$A …5S@± vM·³ZEöו)e¤©°ß’$aAÇ©¬øJ¡?NyAÕõxuZÛàSó¼²x {^’, §c§ïÅ}äN)ÊEͺ^Šûê§“~s{(­uÉHJ?Ÿéë9µ¦ï«µnºA㦺Kœlê‡œÖÆuÉÞÕ5V,N&¦ÀĨTyîòÔžê­QÜúÉIäö1Ýâ• Yï Ò·eH>Ô{à|S;ùx•¾ôn3é”'Ó“ó p6ýëê¸}—ˆðyZUab¢ßLßõ*ýþùhåÅàá| |ø9ðsœ\ÀÉ%žßß«7æd"büøøßÒIÞd²øIm ½ùrGÒo&ó$;à4¡q·Æùºúhœ¬“–ùícå[ÙSæ)SEh>iŽb'ŠïÛGeä”Ý…EÝîÎ×vïZêÖ4m§ÙêyÒ£~ò}]ÖW‰|_içkÜ¥I€ÄÙg·š§*åž¾ñFp¦Î”s…aÍ3/~_œ…Yá‰%õAG©eŒ; ¸-×Ý0]™Š$ŒxySpž—–ÿË®ò®É©a‚^C¡¥¹à­glc u­ ì#÷V­F¦jèC45™¨Œ›U7:ÖR°54æäê½²©—“,svþ}´EÁeÌpðQ½Úà^ç^4¥ÔÍ*aIòߊXFùð"»$¸Q¢ÉÆÖ¤ÌlÉXnl>(Z˜ÊeàúÅpã.FèÝÜž©*GtZûVâhí;^­É' ¡_<8ɨèÀ¡M¬Võ }M8´ ™6#Y›èk™Œ´%úÖK˜4ÁŒMùí>5Vj¦0ãy^ŽêýôõÑ[‘µ_Ÿ©óÍ~éR6üâ@ÕÊH:´‚æfÊÚ-*éîvz4¤Š{rPbRuvç´(V>úxÖ²…3 ?šê¯'©ŠèØÝ…=Sc`ð®ÿ§NѦýa›œ ¦ð2ÏÊèÄP&WQ•—(‹­Ä¿¸Î$õËJÇòŒð ÔÜ£øÏL+GÇh•{´É9h¦Øe¬ “+))eŸ È̈́( ±Üý²«H2ã#W]ÀB, $È™H©jnÙQ‹®/åß+5«Êõ,g1¸Š0ºÕe:âj¸eYÕÒ„]2ü?K.?6ß_^¬ÁA_À¿ïïã­—u`ºY[?Äö0›.-á8÷Vjð¦½)§$ÙÝ«¸̆'@ìAkÉnPTc'µib•§†Ûf[gt–y]<‹íëL£…ÜbŒ4ƒL?Å–áa“Ç8!nˆÇ¶BAlð¦37ƒ‡2jEÁ/0׫ÄAX[j{€PΕ<Ã$ÜÅZ¨°¯UÔ”Š…[\:©WζD\€°-`´Ûåùz}ˉ7¤'êìM‘uL’¨œ Ï <*¤«é|‘ l{Û§‰7öJ¼Ð a|®¢9Ϥ*uÚîfÂÉb:8˜‘ýœþPËtñ(^_?a±ʬ½ÈòÙ¸%g½ÝÞœŽM&ß»cSÔÇ$è¶A´ÚíÄ'—‰¯M>éƒÎ£÷³¡ëÐÇ ŠpÚ/5®Ñ-l!IeÏóéÑDàe—Å÷H‚Ûé?¼»#í?E1T[ é}¥òñ"¯~™ãÍu•{WúL›†zÓºøƒÔ¹cZbêJB„ŠKÅ~ŒyH÷ÁÚ=[a¬uˆ©%ÎA­ ;:–AQÓc TUr$m-â3é{Õ±Q‹{âŸQ~’ó ÑŽs)¥ÙD*.ŽX³]œ#À¥÷?òáö«^Pu½XϘ›-¤T,‰^¿—xó_ŽæÞ¹¹¶ºj9OÊ͘ïQKoJ¯p`£éN3Ó¡‡—)€ï2­*ßZ{Ä¿cŸÒÒ¼Ò1ƒë&RÕÙ¡‚­.9M`hp= T+åõZöÐÁi–§P´QXŸì?©`#ª¥úË7y›¾¬ºR`°rÓ‡2\µÞëdØF K MÅ|‚Û‚Iªø!Œ`›ÀÔåæ\"é,êÞÞ¶úýìs°œ#èNŒíÍ»uB2曵²ð¦ÿGëÈ¡QezÑ÷¨aOcØ-¬*Í\…e&¶½vnšªe<ØÁ¸ZüCÍÅ™°Ô¯±Že@ÌwÈ0÷ŽRÓèÉò@¾¼Å_÷ó½õ[!NžMx-’>@¦C,¡ÁžÈä鞆fw–»%åÄ ?½–÷¦ª q\ƒ$´GÊ”H'©i–M³ÙŒQDÁKë/œô&D4*6%yˆê*Ťêx»UH ²g¨`ä.ñ7OŠ$’˜Ø0h)ï:æ`[’ÓD®ðÄ‹ŒR9Ejsj]L &Fq”£ê¶àŒŒCWŠÚúQb"Cdƒ¬ È> j¬%ËÜCp¼ÉáÂú©#Qñ‚éæ(Ç·$(r¸Äláµê@ ¿‡šÌyü(XlëúC’=¤¡œZ‚UAçl„™|²æ¢gã…·žŸØÈLY¤íŽÕ=0þH`-À¡Ñ¨ðÀNhŒ ö–ØÀB羨î;¦ÕW(yT,Êïe’Ë—ºPWŠG^~SƒÙe®“.Å'¶záºÖˆíƒæõe˜úÒ€.'Ϙuï€eªE¥Tà,E˜±[šɄ=1¨°!"mˆÂgœ–ò04µZL¯Zd6B,qk{TÒ—2êR•¡‚GÔXhi² GG—þ€Q‹žî€’˜gÛi˜“ÊíØQ¶–´Ê<Îjr8:®Ïs/oeµ”÷"Ò<`‡F;'4ïQv ÜQE¯ÈMu‰¯nhöº|ib… îSlr@1ƒiÕh¨ „¾Ä(ï÷[RËÄ=º«JUt½Û²4á là!â¯P$ ¯r^…}«é¡õ7IQ\WcFI”N„XŸ¶Š4(ƒ„K–#NoVT´N… NÐ6ê–¡iY ÊyRævVŒN¼±^Á±ƒŽ²‘°,Xç`gµÔ¿åÀÔÈÚ#J3LÆ6jkÙX PÁ~ÙdÒº~•°m›*êì’á¸8ÚD`‚ã ÇÅ’–0öl9¸œ?ò2æýì9¯µØŸ¥5·ðz3ÙáȈ5ôR&ƒn @¤|Õâ¦2›ð@†„À¼[䨕Ü:Ruñ‚¶vÌ%²kxým°;Ù™#5›¦‘Ì>­c˜qK $ºkfÚFIÊFXfv€ côKV[­]‡aSl#¦².+!pбèú(‘1\ŒrGô&^kUbM¶›•AŠzøL¥)É-!ÍGfŠÝRN‘:Xå!x¹BÈj-ee 5àUÖD/ÃúQÖM¤Ü(‹©Ësªá‡Žëc½ù§YüðÅ̺ØçËAO?ž¹÷>xÝ iôÃü´–åÎ/¤´Üâoh6£ªGû^¡É mÏSG;ãÕ%…:e£5í¥Ñ)`Âû Ž’×pfá9ilDßÈ×¼–-XSQÓB§¤|*ro‹K-«¯ôò£ÝÄÉ…´ÒDp­2II¯½úëZ“%&Å:°Kå?2hpIâ%¢‰€!™™\ZÅI¥™„ä=•@ïéJ‚]¾qpz’sËWžÓã(²4Åb€Ñ‰¶èl©õ\ %3š3$ªì‹ÊOÄž±©€eãîóXaQ$èP–©YK¿Æj2FBc“ bZ¨|ØÑ‰h!oKÅv‡yFâl…ºD€ªU³£ë§µ0QàžéÛæ™zjñÓ ôÏÜCì|khkÚÒ^N€‘|¥e%ߌkÃà2ÐÀ«;ÃZ}^{Ô‚'̰Øà‡vDDŽԂUhYGºœƒ ¬Œ¦^PN\©öU*•jhŸxƒU9p«Þõär%® Uìifirú*êæ–ß^"cÓEç_l&´—FQúLW °Š9*HrêÙSø˜¾%AA£kLJùÚBixÈ‘Óå–‘7œî¥mAŽa·ÏV0K´—¨…9æ†:›È[˜—+lzï-ÑØ~K~CƒöìŒÁÙòz>ÁxyÑ"ëwºYᔓáÐF—TŠmh•Îùe+ŒËäó{ãØÂòm9Oñ¢EÑÆH[ìF'¥(q­¤°Wd·"¼m+Í¡¤+79,jQ4ü;ïJvacÃUÐ<Ò‚ˆ†¦é»U…(!J!v%3¨ GçÖábÉ`êé{q­±6–|!;©5àF÷"Ó´ÕäÆOt~As8e0 ÔJuY̼è÷ÛÑU¤¥RÏÑ|Vao˜g*ö­FZÕrMô‹¹7«–ÄÝNúž-±œ4LK©Õûñ ˆïßj8Ñ1©èÌž®­K×d$6pg#0@t•‡`µ?ü8Q0tL2AEù,h G :Ldbö Í{€x´«ý޵¯ ñL%Ôƒ’nRòµ5ö\‹k£Ãr7¶=­m&ÁoAÍêJ{,ò Zž”/UI2TÏÇuÃ-¬ô#P”ãÊV zÙ ƒ^ÈÐå,fîÑHWGÇulgE¤2S¶®U¬YlÎê¥ Ô7tp–¡‚¡‡Dõ8ësÌøåퟅ ™‡›pŒGÂê“;_Ú±°š¯¨ p1±ÞÇm«#½ö+—ÂŒj‚‡4«"ih©zÎùšá êmØãÄ.]CÅ¢HÇx°CT­ìŠrü(›‘GÛ$ U†Õ†Ø WĶTK«É'+2ó•Êoƒ W % ·~жñRd¶ŠÛ®k#ªÖLo’†ª«ÖUÜ!Jå§+;=fxrû·Q(1à™/Ò Zu7’Õn@Ï?Ù "l'­žÈ@*{>¡SüfnÕR—µS£Á>Ýv@-²ãôñÕs+´j0ôôú{ÕX¿Ç?GðúâL—h!ý½£w,K«¼,fG‰hÌJ¸¶(OïÉÌlެȸ „ îe •¿Ñ7c 33s¢k‰à~x„/™ºD ž&Í!ëØ€Çã…=™yKh%¤”=šÆ›^,NTÛ–Ñ—7#±%ªE]~¥fÆ¥¥ŒWYåv+D/s*¤Á7é•jújk]Œ ò6h²ƒÜ¾K‡l°¨`er;2‹ù”*¹8å á¿íÍ™Äm°c‚¶F®‹õÀSl4•³‰ŒèdÈ>ÿëÈ‚yô)WÚêzã«p>w1ÓÇŠóÝþt_(ãnIKiÉ ¯éjÌwÂ4Æð¢9Ü…“Îý(¾$ð+¢xÔ‰pÌ*8Ó†D^/z d[Ä© GÕÀY J\ ávºÄ§LÊ4¢*ì¾µ„ø`ç´8K"pº®Ê-n1i4šOÍ ¨†‚7¾¿ã‰.zì„¡cf³’ ÚumðŒW©N*m­¤+XJ±­â1T…¨Y…©((^ W%òQç f–\’¨ç7¢Þˆƒjí¤T jm*£C!•pCÃĨ%;¯`C—O({¹Øx|‚cêbQÿ-ó8œ°Æ3ËÐmšÄcØí³ŒµÎÖ³dWíß_Îöᮼ°„zÞ->áŒYQ˜ù‹$íÿ ÔĽFËœu‹nùÇNÚÕ§„pB¾4iYW·HŒœÚ½„òg`4“6ɵØqgsZÐ#«„UHxà,ÊÀ£‘ `‘µú<9›Uo$Áʸ_-”½ý•šœ•ÊZµ )P$ºå53"‰ê®Ià…$"Ó¡Œú*‰¼µ2”Q9°´I’èÒÙ]jC©-I%e\ ãšJ72 b‰u¤„³Å1H)môoÌà&1ÌÅ ŒZBÕ¢}ãqº‚³°ž÷æùýn ³“O}H­åkI*¹Ðûö޶Zâ{ c9K<²NzYw[— ¤ë‹¶ %L[™Î¸bhì§”O84ED€|M3ÅbÐy?ª~ÕºpÓs½l)i~ÙO§¬iVtlìМc£|}uËt%ê}¿ˆKY`Î&Œï¾®¤ö)8U3‘ì:=^&!Á‚ã¥2k[›ªIñv?.–T¦ªh{šSà©ÿŠa¯õô)l9ÃB’Õ$Ö¥ªü ì)FÍ*ùB›}®ÝlÄôà,IVlž$‰!ÔfÅ´3%„04 †¢³S㥉¯­Iyü #Ö±[^K ·åL±$ê´ØºK}eº/ 0}p²#Z¿¤ÁÖ'•,‘ó˜OBÓ Þw2(·Ð£Øöc£_%wmÙrn6ˆU«–×`:#a«“AKƒƒÉdÙÌ„å^¿Ø¼PÞp’(?Ŷԓq^ŸSYT0 !ˆÜ? hÌxQË¥\?YXÉ”*r·i›^§VV’À¸T‚¶ ¼JBMEâhÈ’ÂêBÖµ•[–ê7àÔPºó¯qR~][a,²®œé-)‡´¢žêLtÕàñQ-6ØûÃI‰^ ¡ÑX~M…Áq¦(ç>özoÌ+v1Wı¡ôÌû@v8Þ·waØã€[œ!\4¹ÂÃѧI)à³ÕØ’«ýûªkmÉâòèß­óŠÍf!i€–OÁwOƒwiÇHϤÇrªäœMxÓ4éÆä¹ïé1>ÍÖ ¶ðU4;Ë=§v4ÇÏ„6Y#¸BJ&æz”ØêüÊÒ'Q-J º–f©›5!x '¼o¹Rê´FLapL¿Ø`WGK þ¹ ýVY½©‹YìQ¢àyG^­æ®ØVµâLwйGJ6<¹éfrÎ /‘ÇAˆ\PÙÜG²Š˜“q iJ¡\À¼ŽØî߇ø^ûBá¥Y´ÚÖ-g®¿8Bxÿ¡£‚qLj¹³‹½¬Æ¢Ë‹·ñ;"†ÞÊj P=ÙdÔ±k•iIòýÚÊîÁNõÓê‡ÒÄ=”jA6×N#'æ'óT£>¸…ä]íÍF)':Þ`ÞøÑ{ cÏ( Ú‚dÐ ­‰p±ìökÑâºÔk]·þj丱ÄMª´Êú¦ÕÔà³²ƒ¯6¬¾”&ÛÔ]})ÁΊÔï&sOÖÊš¤eIÇ×aç{_W"¨Æ.ÕšH œÐ-u-¬°k>®ÓtpÔˆY&ÈÕôOXP¶H4ÜÚF„°iÙ:G5nÇñ­9‡qjß.…äëü¯yÔL(’À+Ç£°·V¹Y™¦n ÆøX³#w†ôW†à{ZmIXõà;D^뱨÷å Ú‚z1L÷2|¯£x6[{5}˜ðÊù~¡Gÿë´©ú´þ‡pa¤YdVòb¬À®Ul$ø-Ø-8+Mõ††r³5­2ÍêXhr2 Lß4ûˆDQÔ÷A¹%­ mÅÏÖx»l•i!Wgù·¥ôµi`w‡ÅW«Jç}Ó¢à{Q÷¢„ /“z…¤³×!­M­± 1ÏܦZwnmà½LqKÇz˜É¡£X‘†™wÞfÚÈÁÌl5Y"qÊ›q|“i#Wz¾X–16[YÄ õž“Qq:|û_2{-‘ÏËßXG¡ )˜¨oœ¸_¼ü]è6²Ð´‚Oæ‰Gu¦C^ÖšêG¯¾ðyŸIÑîë‹kô/ëKÍj ½À œ‹Aw^8FoTA¶9çÞémö˃¸žf ùñ–]¤eNª#u¢1"mš…M·7f[t‘´»:ŠÀ–·9=Ú§¤„2YU…2 Äß‹X§ÚëZt­ hvu›t¨h8 EeU]²104‚SÒ·*y’Z²¡U¥¤¦ƒ“ÿ¿Ç!w榺jÈ/û8³·5׫qIƒmÁú‹Ï[ìA\[±áxi¼O½F{³„ˆN„Œ1/ú¶Z]©:\±úÂBž¶÷>Ùý’ïZ¹ÿÍK§€;% U—wË!œa¾<ö"4•™©€Å.B30Sµ@J{#—‘}¬G °9ˆÔ;°‡jàÅŠ+"; ¾gL*Úœã _dé3ÓÈ¡œ :›aëÈÈ:[Á¢*1ˆÁ ‡æ(exŒ&w©0ä%bˆˆµQÕ€œÓ*EIä‚ôªãÛRsA©0XÆãàÔÖ£”4rý4ä*êã¨.(­¿®òËÄŒZ§ÖJƒ¾,Ö*ryä-v}j¨¨w˃­…uGV£ûá°ÐÝjwÙõ}¬?ðŸ²z ì›ûõê5V¯óώʼKÿJæûûê¢)·z ìÒkf˲éeå•ÓïåÑ.¤”·LoŸ~#ßU®½hà¿ôÇàßE¹ò]õ¼‚ý}ú뎿±ô"˜Ï,gá1îôË}Z « à^\Ì'{ÝÒ‘Üȯ̯ÇÝZ.'Ÿ:”+°:U[Òju Xeú.±’qûnuìDÙ§“­K¨œæ>-æÕEþŠ¼ë©·ì±:ö)TL+v:ÔÕ)pì1†|wž¤ÓŸŽaúƒÛ¤Ër·^½N֦¸Ç8¤ÏY½žê»Z¦¯«Gx·Æ¸¿ÙåÿŸoV§õ¤+¶Ë§?-¶SŒx>L7nuŠÕ)p·€3à,¿å,ßÖóÍê5pûˆ]þ¨{¬^çS¾¼ÅÝøÏà œlp²Å=p²ÆððÏpœl€oàö8¹N‡øpÀÉx…'¾;]œl°+§,ÄoÓOõ‘‹*•é÷Àóc:ñt"ë1÷ù]µhïÖÀ+<¼>Çóøð9ð-à¿þø%ð[à§ÀŸ_>¾>~ üøð3us¹°.ƒb+®”€Tn’ü‰:&SAÂy;Nä§Ù²o7C™ÕÝP'rÁ¿ÑüF†d¿ž¦£Z"#Òú“Ž!çk{_vb7GÚú}tŸvtü7õ²×ë|ï¾ô¸=Ô¥"vù´5ïì0¼ºA7â¨`#AÉ¢Ò1ìÅÛoÈ‚¯OÝ^/%—älÚDò~q0¹×´Ý§3:ߪh´ ßMÞîu¢3ÅžÛCzñ©x¯ùÓÓ‡§GCÞBúd<J˜_½Æ룺Z=Ö»¯_îBÝõî1)zððˆ³tHé¦#¼žÓIMßêqºÈéDžßáá|ïO¸[g8ßà|“5ðNÖÀ÷ñüwkœ_?JG²ðUþá ·ï€/p&"Ó&Þ¥ûr£°yƧ«|µºnIJ¼îSš‚à|ó öÀÉwë”ÀW8_àÀ+àÀçx¸~ œ¿þø;àû€_ç°ù]à;À÷€/q²ÆYþœ)"ÞðpX·‡¦lLæv«CÚrp¦…ÁD¸*QG=ÈùáÅ.§POúñ”5ýx–å†¼Ï ò 8ߤë³ËËøØcõ¸};eKõ!ò¹»µyTËú¯ÙäŽ×m%ܰ´´¿PjoÖ•¸éÜÅ*±@wÉyQd´åw_< ÐáÜ7Õ’ºÖÆGù’p¼×ë²Ä%²)âtR<êhá9YìHÛäéãìNyk˜Ÿàì‘ S73zŒÆ˜ÁIÌï[2¤Y aÖ±âôL  +¼ölàW¿àB£Øh1À+a긩æÂ¬Ü÷’> ¾™¿&³PCÃ=`pò`Q‘ÄqÖHœÚT‰¯ÿ‰ V|,zZ-œ@ÂÏ* #æùhƒ²ZŸ‘ ´{‹º·ëY3rÔ=ºùñhe3 ÒØ_ƒís?ØÁ®Lƒç7»­a^üA»Ð˜ÌkRyø  ”Í@^–1xÔ¾&ø|ÿÝåßï ’Y¾±Tf­ÞL«ÚS¿<%‡*ϱ*Ù§5Ókh`«ŸtÕÀ$Í][XcyÖœ„ãdª•~³ß²«÷¢ Lõƒ¾Ý÷éQ‘/H™oÆîp·Æ¸=Ôœò»œ„*öQÉÄÔ=Ûúw®±|#òñª_+ò2˜à²‡Ã”§ß»5óœ0%CÓPÕö…ÈŽ¾=A7SB-Ÿçú$ž¥HýOêÑÐñÓMeY-&r:<Õ«×À™9*›._™´ûì€Ý„®q–ê*ì³Üz8àဧ騾¾¾Ÿj‹çÇ ]~Ïoqr™Žÿd*~ðº3àá€Û·8YOàju˜ÀäòHÖåö€§\&ždÀöÎõ#ÇuÂýÎ7©[y²Á8YãálŸJÞRâÀÃë ðþ Ïœßþøð ø#à¯?¾üÏŸ?qû6['< |‰{àäºØSEÞpàƒ1 ^s8GÚÖ÷"!»=¨~Á}] ¯:•Ó}.• +ª³ú]*$Ð×SX±TPnP« à|=¡ˆã˜ËJèòWÂø;b‚8Ãn_.Äpìkfv_Fõ^b‚ìYp}æE‹§¾„ŽHH}Ç)—Ø?ö J€2P¨´3½ÂDà²ÑJºš­Æ*pÍ!zÉYKÒî°0üWÏÜf½¨Úu»5œ$AÈc{8Ô&ìŠ- ~z×”Û¦©•õ:3 v¹wšüL[˜Úþ…V“Vo]FQL§ðTWf}Fö¢ öZ´µnDu¸kôÎ[Ì Âåc|9!’ÍqǨ& ð`Úø‚fFF¨ëèÌB—ôã€ä…Þv/f‚ålÈ÷ÐPå_=ßÏà´­ÖT!¼¢G<¦´2L¶`dL«MVô7ÜgöÇÝÆ¤‡ËÊ">³'«XC÷šµ±S¼&Üçc¸É7ën“ö ›ÊSÔÁŸ»/GÓ1TTmú¡ð¦SJ†U~hIò>?Ò™ aíra=uº×Ó-ó¸tºË; – Þî³¼üV‡Ò¨/Œ…^Ôݪ²:K2ºKo©€³ ãŒ8_OÀ`­WöérMèb ‡Õj‚õ^áùÏŸŸgÊÜŸãä ðAâà=ÿðàKÜ~ üç[<< àì ÏïRT¸}à|+‰š’õ—.þ=ÙþÒ%Jøó¥ºª÷)Hqññ|˜B߀óKœl€/€¯ðüø%ð€ß?þ%ð øÏï€ïÿžß?Çó§ÀY׉’óðÏ8Ù”P”Ù:› eÇJAJáCŽR7Š)¢ï3îsäØç‡z¯ix÷mr€¹ÈO„ õ&¾è½Û|drs¾N êóëÛ‹]ýFå)OÚUÖU‡yל žÅ ÞÇàñØmÕ^^QñeC?¡/ƒ{Ô‘/’¡ =KøÙÉ­Žûí þ4m2¢¦BœâªÔªh9Ûæns ñ³"fÔt'Z­ á¶åÍëB1&­ij_K,=A X°Iáaf.^rÛ®?AU|øüVtÈ¡Ttþ¹g³nÅË )#PÁÍê* î*Qª2¡Ð¿Pš~Ì´8gl\^ãkf´/ešŠE½w:’O´øÅUÆèÞˆQ­«jž%ëdmí?Ì$¾§BDr79i (£mh[pã¥`W‚3o´|ŸvWÅê×x¿Jîymß~¤JÓ˶þþ'Åa[ÈϦ̅…¶ÂËÕ~²M¡Öò4VÝgÕÜgm g?Ü ¨¶x€*,E7ºZ58vÏ MDd#𹙫'QĨFnåeÔhÉW÷àf ½äI¢ˆî‘k7+‚b &Ŧ'W®!÷ú*ßUÌ–d»Ë«iDnz9®›ý5ì¹G—p¤–Ï¥Vܪ)ã*ž»®°¨¤UÓo«–S$tM»lœB›™ØU†ËéaDyÏâz¯ÇñÍ8^å06ŧÏ2“ð㉇t¦‰ØHé‚ÓR`Û“2)ñ\>/P)– QÓj&€S¯Žn-Eí]¯ÏÉȨ¢[¼,bɧ¢³±.·YŽÝd;ËÃÏò ˆ¶ýpƒü}bÿò¦ã >Ç÷]áôôü¯L¢áŰ©-õNtõ%ç,„^UÑ”CÏ Í&°ít`âî’xíÅ#Wú°Uuà§lÕ:Boj‚4Ã#K®?¯W!œàé å*LNÐ7B4‡^xïÂx^Lü©e.õ•±4†a‘÷M¥è¶¸’/2EB²6%¦ßTþýÕ8¾É Cö¥,ÿ“ÿ+âLC5÷ Úy2h IpnÔ¡Q<ÑÐ]ø‘fN,Ƈ+€XÊIæQ«"'xXd:Òb-Äqžy!É¥f›Ò ÖƒÂ_/R—€Ó 1m3ª Ôi&Qª½ŸÆ54 ùC‡mXÚþìZ„ z䉷°Á%M2¯k'a‡£ …é¸÷–Kpç³üá¢SºZ=*ʬ¾¤+—“¿{Ý@ráJö5½b/ˆ°{{ÊwU Ž x·åÒÝ‹¹Ý‹:S)çÓKK¦ò×wBìcõˆ{à,?)šÝž†jw¢9$'ë/2KåBQrjSº\ÌI­c¯:OVÚj¯Ú„õ ÜäáßÌ Iã̇tT«CjzŸ‰¯>ÍèÓÚÐJýË}¦é‡Ü£:Oa¬tÑ~êÇLt€}éXþ´|û“-žiàôdƒçC"Ä?€W¸ž8¹Jý’©ï5Ñå“:F>»Ò­Ü;àù`æÖív1qǧÖÑíA±Z¦qæ“ žß_ã|||“m"rœ ™¤þ øKà¿~|øûÀ§À_| ¼¾~'Üç{Q:=gµƒµZ=Ö§àTô™J¤ß+Í‹ºŠ©uZÛ«•ô¿Ç8®SÇk§w›ûÖ( Ñ“ö‚µ‘{·¥1¬²–{Z{[WáöÑö×ÏjËMrz}, çŒÎýUA C{±ÿVŸ Þ‘RìÐÖ_ÜÉ["TØ:zÌKdà»\ÑûCÃE7ÔÄÙƒæ´ÿÔjÑy@²¾FÚMEÇ;wÂá`ndªPÚ(|è4’.”a )U* Øl 0—mr²þì˜í€bЙ -j³Œ—®¿ÚÔBãR ú¿è¤˜+Èñí8~–íÛÜšþû$ËœokOk|«¬²J=Mœ÷³q0€R<Úa«VWÅÓk¢°–…n§ã,r·…×~-üW¹ðºç¥á‚¿fÀõ)£õþ€°IS¥v˜q©¦¨‰íÛ±ËjiÒ!´•¯#Y–¾Æªï]Ân7\m9S,ÏYÎÉ.¬«<£Ï³æZÄÂVkjÑ¿oüŠH‹öõ»FéøÜ±Ü8šó¼;Nq4cÂä2îÕý"«pД¿Åáj"‚O_Qùl¾;å³Ïï¦O¦oU ðBŸÝέº½`'"²Ó¿ž¦Tºâ]÷bìW&Œe†q¯øŸEаT9幪_½sáaºÚçÛò™rËHDüÕ!‘¡Þ©ð|Séé©úÙqÂjLª÷'Ëh-r;e˜wúðòÌæq:—óõ8wëªZ4‰NIúÃ#© {>L©7«Õ»1Öðo*³VIRMÇv¾I㟥ò;ˣ߻LΞfßJ‰ñ¿>¾ ü àï€ü9ð+à{8y üÀ/ÿøN’kš¸Ý÷BKP2WñÎ×­ÑëÖ£½=Ta§çwSi•`†XÄ stªœ¾¾Àùø_2)À¿>>þˆÀÿ ü øCà;À üx•Oö{À‡xxÎðü6]R—O???VRëi¾ÝOZ“ì>#Ÿ·u|~¯he\D!;ø>au‘e3§[üð8Kq¿ºH©žœs(_W»H÷uËÍEöºVW»t.éž-²¯pÁ`æk¬£Z,ó å¡W™aN¾Ç‹ãQ*ËQzH/ktÅÔ˜vj©ñ3õès|a¥E|«ƒ¥Š’h#‰4"„‹Ðt+´Œ³-àf^S!¿-MbxcÁ× ÝR"|{Êö“Em“»¥ ཇ,±ÅM¸æÅË<ˆÑõÅè‹ ÌîûDzò ½}éXºõwt4p<¿9ary­¹ü²4‰—Â×À³·-¡©e¾ûH‰gi)sRÓÀ‰ÁnµœÍ¸Ö†f7l,©×S$ªù¦6í±Á¤‘†;]1OKRõBNÌ‚sƒ ¨Ó0ôvtãøRt‘ÏÜÜL,l4K1™nW·™yq5ú&Àðã&£)a&RÈ‘x{æBÑ×ûäf áÑ%öÇ›Ì],6"W¾ë:ÿþRø‰Äø:Ÿ×ÚÒs´Œ!ÄǦt&çYÑ%šÁ2x=°.Ž„Š9ü•mÛâ`¹¯„‚4±†—Ę%ÿzleÉçp·›Øã ’<·á€>K@75A+œôšd¡Y†vŠ×޽òû”ƒöÔŒÉzà^Y„æîž1Ncm{BþÛa}°iâHù"ÓL_>ª$ÔBj5Ooì›v´lêd~vì¬Q}ú‚ ;r؃ÚqÔ½ŽŒFO!´rÑ%ÝÁ­“ʼJý¡©”™öú*€»© ½q;ŽoÆñgµå&嚤Gâå—جR´ÎΪV{×Êë+ÅÔièêãqm}+Ü–×Õ˜Xºd…¦f±¤Î$3²%[ÕÄzŒóÈñ ïmoÍ®¼Jrlxº¶5ÃÔœƒ^™é™wtœ3E¤Au&´„#&œxÌèw‡&?û¨zeœœÅ ûf`3˜çœ¹eÿ»šŽ·áˆfËyQ»4ב' \+/°cŽ:¢t ˆ)'Þ2#uÛ³®ÕÓ•·lxgñ°H¨ ª;MaÜù ~H•¼3ŒÍj`‰Bû{éxœ*YåøLA]€ùIbýlÛÓVþqŽL×jÛfîx1óÝæ cƒlAKZ|Tnîêðdä.±YÝÓMöä Y†õ¤L4_çðRÚY/mQ®lˆ×~„ƒ¬ í"m³FYǸÊŽ „»A9Ó Žò>4‚Ó b’}c˽6Yc-ßñ[H_¶¨|6ݯ´f¸>oI¸šyAX[G1v_`ÁÜúó ƒ‰»w0.îOÁ’¡–·}+M]Nê˜>6À§)[½=õ®ÈªÀÐhùª±Ó¥s M“—h¥„}þk‚1ÇWÄGVUìy£°¾ g°ÊðµÖº-ò¸—±·èJ ΫwÔ}SU-¢Q³ÝHY –¶$7ƒƒ²7!JÀr!Q ¶!÷±.ó©]çB0^¥Jk[ã\Ô–(ƒ‹@N³bº¼…B·:”¤¨òP¼©Yc Óa/Ê(–m‚@Í%˜Ð1ÄaÑ^6‹øõ÷Ü£ôW Kìê;]„f­0¼œ=Ïwða&X>[Ã[³“Ý/Ô¼ð͛а‡7|k ªÇC&C3H ­CO^-#ƒ0Yº½FÎ5l8„3—Ϲi¤„Ul“úÐÉ B„Ã¶¹Ex¢ïDnwx”ålwØ´¿Ç7Žo…D™™½ÊTõA™‡Ü»Ê)z])ä­Ð'J¸ÇOR0»?à ®j¥åÜF‚ .«(¿®uÕ‚*sÜEó¢Vg¶ý'yRø:×…ŸãÛ«>®ÿ9 r¼:0ÆŠV©—Ìž Ø'ðŒq® £AÓë…”W‹çåÃÔ§E—Ò…fSF÷Œûcù?†­ãÞçð}sÏØÞnޏ¦_óÃ0=!#å)ÿÚú“¼‚^‡ÈÑc6G‹†ÉVá›vhñ0nÅzGN„ï=ùpõâÝq«^gª¤œ¦wiþ7]äqSÅËŸEV5Õ 7I!;ðMN›HqgŽÏjìµ4û½ÖPv$æv(úÌM‰NdnÉúÝÛº¹ŽßîYZ0ÍÆÞ’ƼÐz—Âÿ&3§4“»oÎ-¤ïÚ‰áè!Sœï³Ëó V‘z÷vB?)ÐïòÀ/ªŸ²ä.'ª‰É-ìè¤l¢Î‰Þ}å^¯Nüðÿÿð‡€¿~™¬å>þøKàsà/ò§ÿxÂù·àÀ·€ïãÀ÷pàÛ€oâüxü·Àv>€ÿøÎ’ =œ¯ÇÜ­A|Ÿ$z‹Ã/±_˜†”÷b‚øiºŸâùÔlo¸»Âó;ì|çk<¿ÃÉø.ðM`ºåøðÿ~|øøßÿ| üSீ¿þ øž€;‘âLŒðóõÄÔ¯ƒ¯ÅúM¶“~­”þ§Ç­Úƒ]è1ö}]ðÓ€¼r".—"³ç¥In«ÒîƒV¯K÷.³{žò.zšoš†>«D|鼕8îûEÝŒLIY, ù²Ê IEØ•R5¬Ý¬!˜ Û”˜çµ8—7Ù°øªRä£F&¢¨§½ •ªì·„µDÇ‚îªJV”ábx¥ZGb´+³õûmJ¬ìëuYæUš¨õ0EiŒº `½}å‡ôwÌ’6J%«ñÓ2Û½PõAǰC‘Å4ë¦YÜXO,fbRÒyûù§êÔ–hòšoœ^å¢U?¤¡­ ±?ÞœÒí½Z÷ÒfL­¹óuÊ¿v¢sŸ§n³V¿¶ÕçLœÈTœYìzÅvúúÜ×_V»“\¬V“î”bOf Õ,õIhní…ÕÈ>I•Ñlå¤k6Z¦’¹š$qTwlTߦâ¥ÒrÓ–'5M=§zqŸ~-¼'n„AÔùZÎ_+§º"bt¦aŒóµ…"µ¡W:æ‹|ü·ˆòúÊ3ünßa2ñ}~¾>€‡·ÀÏqòõS@ž IDAT1ððWÀ¿Çù6ÿsà[©ðº}Ï<€_ádRHú>ð5ž?~x¼J ûnçGV¤Ëk¦¤£½W~iƼ4ÉëÝ£:(=À] 9%d¦îõÅßC F†žy8|*þõöPQ é6$Wæ“þÀÛƒÚ¡Î*œ¶ž}»>_—·¬N'ŸûOÀ‡¸Û$áÉóp ?Éýýoòûÿð5Î×Àð×ÀÀ÷àn€“78Yãá-ð}à—ÀOàdü1àß'wÇ»Mµ´Ÿ¾î,ý?å7U¸ÏžE T_ã6©~¬N' Ã5΀“«”TlÓª;Ùàö]…¼n|ü ¸®€o' |üx~”-(‚“ßÿtBØrõ8-’t`wk éIŽ´D3ò&1 eæ)zuÉø*æ§oøùÝeŠ“ÉÙí¡f6%æI•ËØšî»uUZ‘rþILUç߆öÉ+Á²<ž*ûlE,i`êßßÕ_w=¼«…àÛ—]¨výR¥Žê^@-‰;Û½wYTŸ”P)ÿÃLAÃ| èõ«ŽB iä^¼¨¹’\ Oy{=SÈRÊ[Ïô»¨ÒDUho¯*1šÛëT`Ÿ‘úrAVÅ#ÑëÆ*Í­³º±VÅ—è¾ &íÓ)¤¶ÁtwkU µÖ´€ö lÜë~RéWYÕ¨´eÜ0ì û??zX}ŽF8ª^sîI¤˜7ãݦîGfæÛšúRYÈjO_TâÕ*ëÛ¦ÊõëÔšzþø ç“ÝðWÀ·p²ÆÉ'ÙÆ÷·ÀWÀ/sèz…‡wÀ7àù-ð]<¿>þ p†3ßž€€'¿>Jíá-ðopþ&ÉSM©É¸©Ï…PW–‰; &]ˆxƒl{=õ&oeݦß܈Ä"Ù4¿MÔ½¾7 !œbU¦/þÝ·ÕÐU¯K=OP]·)ÎÝÀ?–ux–_–R=®ÕGÙíýb¨3(ÓyãB½¢%äìÎP-Ž™ZHö›õÀb¶ýQt¾…¬zÚ?{ßñafÍ@¦k¦Šï¼5ú#ÛB…Lh ®ŒŽQÃfSó‹Ö–­ÚF>-©Ž`›jõòF˼"-RjÆÚNZº–‚sž$L°Á:~IAUBŒ8?VYA¿d¤Pu¦²[^µ”.×n]Å^ë d;êhÿ\fŠ]!Á¿¢EWâ“LûV^$Á¬I;˜Á Z¢p>£¦MÆ:h/’Êt¿ÎÝ»ËJͯC`C>ÇmUÅõN"Tj+¨~' ;OL×/@ùgÚ…dìµäŠMù%ÞšŠkd±¤A¯š±D —b}¦Øâ☾Ú5y†­ª¨dI¸²õ œ›W^v£xe¤Æºè ùyÝDí¨óHg†]ÏYbší^"¨Ææã<…€ÝÛï­øþ^“únôÏ×)¥ÚU¢]CÊË]HPõ3¬‡CJíŸÔÕN‰¼ˆ)qóêY%Í>ªæxí ù âÉnkjÝïs¯¶ O•{ý8®[«T.3%?ºWªú4Ý>\HE µ`Êøg:¶ÌÈJµ÷:^Þ(˘t„ûÚßÂÉZB…©Su!ªÒ É»?¥Õ)ƒ~~þø)ð%Îü&7¢>~*ž‡ðkàÛÀçÀ€ß‰›)!ÿðà{Ào€ßþçkœlqr ||“5p |ø{À7€W• x¾ÁÝUÆqƒómÌM¬‚VšŠÔI*÷d$}Wœl“ÓÇ$× _áágǵü8¿®ŸŸ_áù-ð/€o¥âø x~=•¶À·–d|Ïò¾|Ÿ¡¶AäÛ%mßôàœÕ*§<æ©Ò-mË©v¹ÛNxrBÞŠŠñÉ:Y{ìu§ê"·ÐÄj/«wuZÙ€éc_Ûì0yДúõ&£²¢Ý ün3½En³¦g4ŽÛmi¡‚´ïÒbúiߤExt®5/U# N†alØ|È):*'øþn°JÉݧŸ`Xþ­:ŒB—Vß}P”e›:\:»ãÍûûÕ9ª%},ÉÆNûã©è±Ÿåõ]Ö²Êk7?He .ŒêâÞ¤Z§Ë–½Ìí.Dpò±yOV£RX]uÖSx;½ë»5΀çÃê5p¾)Çãé?“ù8Ô°žæë ѧ€xŠ=lî‹lò B¹$8¬^Ϻ"IÌéKO+÷}õ¸[WB æ¦ÉtS¯ñáP`Lã7&dÙ&¬·u—Ô×à<øu²€Â—x~— µÊDøxüQò^ß6À~ |üsàïßþ°ËÂç?Ήï€Oðüˆó«Ôjðð)Î×ã¸ÅÝÀ×ùÀ’ô¸Ú&<Îp<ê¾|û.ûçð*Amû‰ñª4ùÒïñÍÕê¿Çó#ðœ\áá_ß>OIÀÉ'Sà|ÂÃ[<ü ð£šÝ YsM$õSe;€Ûw5Ÿ»×Hï}†Ý&RþNضݾKL÷ ˆ9È«ú¸Û¨‘ Éœ¥µ7lZ· ÎÔsšö¥ á0·n8ßÔôt/øÅ÷kRȼÏÈEm÷¦ìm`Í—–?–!ŽÏ"uÐXÍu¾« ¸E¶Ë7Èëô{;ÈÒ,Óý(šøK8ë/ô<¸÷â°’*ÌÀÛ¨À¡R•&)‰ç/Ð4¡7à!=B·,p‰ô»ÂåùW«+Ã,qát¬†¶ºç©–¬ì-‰¿†1Ró¿–~C¸„;ÕÅô¡hœOh[+*L÷ë4bœ¶OÆñ'ãøVøÍ_æqã^åßLV¿Ÿ(Æу—RƬ+:ÜIˆêÃÛÿ2gDc—4ÖZðŠÜšàíǵ'A-¼‹­—€þü²‘ƒ½™‚ ˆ¢|ºËgÆF;À€„OsÄë¦K–ÄxçuÛ<ìï¼}L¬ß¹Y"[¾DåË4´fÂ:¥@ÚK"å4ÒkÕìê…öùŽxõ™" !Óeš^$¤gffû[ZPƒShV¬ÈÖ¬…Šaf$œ;/ø1Ä¡íîÁ$«f µ×*4µÀ…B¬PoÔw'’{Ê… ¼ÖŽSä}ÁªÙºj{k%5T=æ×¹u-‹\ìu–é+­¬7ãx)´3.³:ÆåèXÚf*^®µ®Ò¶ôçLVmEKäª.œW¡È·.óé\Õ˜‘ÆÈ²LÆ4•eü3¢VWu°Û=éiy~8í£XOžÃ!Zk?¦· çë(Âç•eD€Í@ºÒ,SišÍý;zá­²”’ÀÔWûŸ9S“-¤ï“Mæ£ÑðÁ¬Ù‹<­û¢p/Í6¸íVPO‚}eÔévc2¬•¤£e <Ää¡áèCÅl†ÆŒm`"ƒÓ÷ì:QqÂV3RFkBÜðiJ ²³´@$K.¸¯3#Ɇ˜9V¡ÚþQ+º¦Ùb°»©¢‚QǤÅ'ÄÑe„KãÀ—ÂPj#ÔÐ×u|X 2§AÉìŠhº&›˜WتJð[›‚xMôâ’%Ee©WF›ÓŸÈ‘^ø£«Ý¯.ϸŽmK߯kdxÂØ°šã6²¢’‘ÚF\°ñ$Ž%Úí³þK6Á¾ý’éy̲þ^„k6¡È~@ 8{ðKÊ\À¢jAkèNáo÷ëH$kÁ¤©<Äð¿/¶Z•Ì^¡µÝ|!á@aÃLhzŒ±íÔѧwñÉÄQÀù'ùª¨!jµÃ‡fêa1Àż˜Õlkm±®ÐVö ÊQg›«¥µ*ø&l-ïÄ*ú'"ÖeJ£vS…Øk¸Ú*eôh~«6Ê´¢õHQÐKáÕàz-J¨µá•¡:hwíwêkq—U\Y9i­6b–ø¤Þô`¾*ï‚. ”•Æ0@K$¹i“ˤ«Åò~QuTª>koÑô1ê &õÚ Âò£âb‘{âÂ_Øá{q”}¯˜Kêû2¬E´«“rÇ#<;ŽÓaµ‚N«€šMZµfy ѽ&4€Ê¡í=JªI'}¼'¤|EDÞ’Î¥l ØN«bö½ŸŽ ¥.Iä š»JTui–Œ¶ìufo«S”ì—”7&°q[y –«zhå"oP ž:÷Ý>»›Åzq"0 Å笱êR™,ç~^eðS7d–E5ó¹A P Ö“šø–M§e¬ª%¡¦ÌR¯«OÀRòqð¢Ï ân°Ûg˜r§jµôÓŽ-°–MÔÓ} (÷2s^š†w:^¼v ¤X™”x¿A«åñÛ£^•jM/ ½¼eóh«&ýÞ-624Ǥ× c˜Äf’Ò!EÆ€*½å§ÙÊ1ò™3zÇ%€žG}Y:lòeß32†ù‚\¥É$ã´T›UÛâ?ŽCš©’›ìTÐ ÕM1oµWYÄýJ„.(FE°v'¡$1TpS ‘¨]ž¥.eÁÐôàWn° ³Qz£l2Vy•Y'—ÊsÒlè%rH_ÏB) I`¬œ@HöÖŠ8ìÌ®ˆ´¼—â4¨` eí“ixö˜«3¨‹öp"wgŽÎî_¶/©ðšÔŒ8ˆg²L÷ÌÀ.<;†/K¦ª›„͆à™) ¨p¢ã»Ñhç´òÿdÚ£ŠM–Š/ýelÍü’J%6)yhØP̰EµâLŸÀª«è”pÙ (¿ ,•ö µ,TãP9_\e^ßÉgv_‘‘½ŽÃ?I`—s¢Q.MÕÍd«¢‹¢c¬m‹Qù¯‹iÉ%é@x69)Jé3íûõ¦NR§qéAèü^ŽãgªÉY[:Xf«g¶p ŽtR#x°Þ­¦k ~f ÌtÍ;’ö •.²K=øEµÌƒxF`XDCXh68Ë?¶š -4!%­þÆi¾kb§×2Ò¸Ó|«ßÞ÷ðHÓž©¤ƒzÛw«LÒU,ÕÍ·Ä=VF~ö.AC/&ùÊÒ<áÜŸžrS&6«Ÿc‚®`ª­^œŠð×ξvè­jK.axÒà³I°ÇŸ$Òy Q…Ú7¥ó¢q9Ž?“ TØFTùenA{Þûê*³-"6Ô·ðŠÿ¤§Û寫YŠI×µ¢JèߦòGRÈü¤‹Ñ¹oŒécr…Ù"xp¥¹) ãúΕ¸`ª¡é‰ g€@?¬âzf¤ªSpå‹PA´=ãß³ÛØxÿb¡‡Â0•’ÑñÙ;R8ÊßÅ…ü‹&5üHiA^061hfzMhk`K°Ã†¡î[VÞîÄ rª±Üš^ ÌT~àx3 ¤?G®L Y-A]ä³è–qk÷ûpH«ŠUd“ •~ÌBÐIw•¼)&µPñÒ6Pò#¢&yš~•„UVXSð¸¢gW¯°áF:‚¸%õÞ£êGnÔ{%7rÁ¸†Û+ËâiyܰI¬Â~ôo1cÍ…˜[w`ÏEÔg§›^4û±9kÔЂ†UMKÛ? Çõ±:¦“8~¢–¢dŽgh–}Ì­U,$îcµ·ï…DÖXØQô–4g>YÒ¦ƒ³Iš¥^ë.ØØÓµLmñkü hÃÖV3¿r}xsvdA¶e‡n£®¤ö~DNГývI ÙèF²"»àCÛa94¡ZÒÀo3­íÅ¡µ‘M——Æç^¯•ðsº$ýšÄ<ܘRÌvdõË §kŒy•iÙU[¹¢Ð¯1Uíý4ééÑ 2€_;s¦bΧ¯ø)C,!S€AÛnµ¦ èð¢V —báñl³°ÅB[# ßµ¼Eöǹ÷r6A8‚bnI¿2["ž‹9ß,`‘ôû n}eä#>3ã_2uˆŒfkbŒÔšÜµ$?0Lß­ÆNÀxG—W΢Ù-²"íšôÓLlŒªTx3õÖä–-X'ß÷-ø3š#ÒvS‹ÍÎ A®ÆBDÙt“É ?ÉOSÂ!ëÃÚaå󂌹`–œ¢ÔVýÖïM´64›fVR K ~äÄ„Åcû[™ ¤aÌg #ÁÌ·n£MŒÔ/ž FWÁ}¦ÅuL3 ©Q(c9Iä(ÞÄìÛíFÌΗ”€G™ 5’õJd$¢ žb§G‡†xëÍx/»^evgÐ-Eæö¦×wcëÂFs‹ù!ùNu´Wà*M€jj/3tÇù­">•„\°ÊÝ'ëx ȉˆr%èúRÌfmdSʶ¬dÇ.ál—DdßŸŠ rœÆƒ8´EÊ)Ñ?2˜+ØÊFe‘‘8¨Bߦ€Nø†f'Þ6«ÜŒM }åÄ]¿¥Â®¥ ó'“_f~žåô#ÖBÑ>²Žà6?9, ³ áÿ4ÒØYîC¿o×S9Ê«>Ìg è*¿õzáˆÃðC-‚"±h™Ô'»a‹VË(”²éí dqêPJX$úéjÅQ.rèÔmêu87äˆ뛾£ vvºV`W~Ô03´ÿHwDtGLi. eTM`ÌãEöÂ>—4B9&!DÓ3yC`ó‚‘kIð7p’›!襯 ”Aê§ñÈÖ:¸úràMS AË(Bçó"ëM²rÓŠ¬F/QÇq‰yUç§±Œ+84Hg÷D[ .GêðÜÞŸ¦ÑÇúá~a†•·h¾=ª<Š yìÎÌÖì5‚8ZAAf8ÛPÀS”°4DZI!å¥Bƒ†äõ“üÄhh–›„ÍÕ‰èq1è vljr<(0œ3¸¡™–.Žkœøtž´sB½‰ðÚtN¹3ǹb¨Z'ZxJˆGl•”àG‹r|­&±‚¿¢eÊXuЧ]¶1°•™)$¶æ 5‘di­Fls$|psë2ØG ÷™;b/Žï®Q¶pt‡á„r(wQMD}< •pé“¿|ÇœUì„ÀåÎX6ÛtTÁÑë$9kÁ%q¥Õ:6uÚ?³ÔÇ£ê<µ[JT%Ì£O´Çcaq#Ê9h¸†2­ãL÷¥5¨GÚlÞMÎ åXÀ$ètÀ–i0l$sèÂŒ¡ÑÃÈx™§)šˆ¨‡.íÐÇ¡Vx6í“45=õßÀJŠpȾT¨`l¬îßô– ü+cM§=ÕImopneÈDèÂVMcl³+…åovv?bL9„d†—†aÇ—1ź§ÝÒÂôDQȃä~8–y±|ãXÿÐèÜ6äÏNÏ’wgIáÔ÷ýÉ„GDÓ0[¼ƒ£¾ýzžÆJKº“&¼@mFºŒéF ÁÔoµÐJÁá`ÅÔ –ô¨r^OÐc#­>“­‹j^6»Bj3€u¡lØŽ.…§=žÈ¸šZÈÔ¶T’­‹@È5˜’ZM¡þ@è3rvXp üEãM¨T9`¦‰)wT´[üËÌC/r/?*Úi^9^¢íAƺƒCY‡†¬Id{QlR}>§%=7½ð“aðjœCÙVKÊ9ºÄåNPgUsªÅ<°ÚÄ×» çÌ{QMáÒ¯­C±ýkýÆÐ°H¾¨?›eT­÷õÅõàC³Æò¾ŽrÛ•gáÿê¶zÕ¡r/lØ`š­¹ºèf£^ù Þú™þ)§™®ÉÃÁÞGaÂ;¹ñU¿Ý›täé„ÙîêÅhNÚ%OMŽp“Ñb6TMN²eQ݈ ¨ËMœþjãÇM²†KdÏîѾ:=JŸV Ü;D{ÓoÍmª7úöP¶¿äfYlgoõ²¼Î¦ÏùÔö|¦C=«öÁÕ:9ÛŸNFºÕg6¯Ûô°Œëäf{£¯öt«ƒf!Ý2‹#åí!a6ŸT^ÏÓÒ}ªn„«Õ!6² á °Î&Wåu2á÷'ŸIùᱚn‡êhºZ½-Ï™L¿[Ï䃚Ü&ó†v*–Šô>Ý KUY3<‰ê 8Ëûð.ûË¿æ}{ Ùwq\£ØÀîĦ´ËŽÆrQ=eãÇ}ÞðCÞ²M(öùe÷ʵ5ýñÌ‹…Ì‚%$‚Ö\X¿>;–¨íf–TÇ2 _Râ´É^)œ[ï,¶Ÿµµ|££‡§›€×«¥Ãù±)åçùN”5` mªU³Š d¦åxb #TàÜ$øѪsi¡eh‹ˆèiÐ@“ ®£îo™QÍüoÂ? (–fQÑ‚³„é4Û+Ælë¥ÛÒÂWšCÚ¦]Ìòu§:ζ— œ÷›¥™DGó“r¡¡™ä¸Àú@‘X™ôèÈ—ts–T„c–4’Ïð,y™t íVüQ^;¨ôB®à’¾Nç/èóÏ’ Š{Ks™º ›ÝÙû1r!K¢)>K<Â)Þ—q.(BšÅ* 1cËÆ•M rêTSN>6ÀÀHT´5kg9£ë(ʧÅгpli·~”fí™͹7áÆ5ö’zÁ#-c˜Ê.öº]+÷BŰØ@•¸zSÁà&‹LtVÝ….NöþObÐ0 Ìn$T‘VC‹j`’amc‰èŸ_WroØýHæÀù‡061¡—˶=f]qåÆH‡#4/ú¤ Oʸ!:eŒt&%ûM²£†š—Ëû Gñ÷f}gÏbÑA-°ÑÎó˜hQHxm=«+†  g]7+øÐd¢Ú`›ì >mšÓ Mš\›¼ç÷x«?ðkR‡FöZÄxspÛ±§¶}/5çb#4“.¿?xràVæû–[´3Y%l8IÒÌ™ l°²Lª¯Fýؼørl,ÅhE¥*‡j¨6±•A‰öe i ÄàæØnxDi·M¹²Øx‚¤ ›gަ´}E6F…¯yÑá\5­Z_:âºr|±of¾býë°Ðfá·¦€ùÙˆ»|v­—(øÙ‹†Å5o±üA%èÕ' \©Uó°mÍœm<Ú‰~Z ™'•0yS S9p )Ó0v“  œS” Ð4“žó©Œÿ -Š5”™aŠš ˜ ‚áÕß’mÝ%OU6MS@H¥Ýk—š™Ê N–…¯üà‰éiN𡈴M&ÚijlYŽ”DÆoŠ ]7ç³Õ–¢4Q h$Íÿ,Jh^´¢¿Žá%ÛbÓ_Xß,Ô@šaÇêù.±×Z®n5;|ÔtAK¶ê(Í Ÿš1ûï­Þ±Íïh¤I=î˜=#Ç%q 7&~„‹†™”“§š¡¤ŽDMc{¢%ø8p‹nêw"RÑQâЄsÉ÷­¬Á8kM?fÊœopŠÉ fâÇA›ÄĘ™ìÈ ù¿ØóTcÅD‚v Mšat¾~ æŠìüµ0h˜Sê 4q˜¡°P*¡ ægòˆ"†`_àµDÑ®ßèšiP-ëŠùŽÆxÓûˆEu”Η‹âøùª¾©Xß ev¦ûØ|‚Û3F÷ì5¬7(®+-3à((Æ$¸—/SÛ®áRÎþð4Imx^?4 ¾èØ„»|NP/š”am§ Ô•ØTÂE_ð:²Ô'ðmT‘õƒÚÔÈxlP…¯çƒ‰ŠRR”O)Ôm•jbÐcXÛZò¬.¸i¿Ÿ) áLŃ? ˆ–h[|G¾€ I•ÝÛó³´ŸdÕ±ÑZ6“žÅôÜ,ê`¦Ó^0µpzwVô¡_dôI€/æqÌþkï¨ÂÒ`ܤ¨µÕ_úÀ%/Ãq°ç±áÓjìÑÌh­ÏzˆèÀE\¬òÅÀ¹ž”¸lŒàNZÁNâ ü(q$¦$¾VC{\í;s³á¤M¸uE/ÙŠ|x«–,. ™GpN²§’Lxךþ·­ñ›)à)Þ„Wš˜fq€ ]C»˜fÒS€›Tk甕ÄHµK¢s;”ÞZÁ`?°EjTÍ9ÓR„Ì­D×í£Œ›ô®z€Û‡†{xhÚ­”Σ‚~kžy±<Ò4i»‹­¡È”_˜aa,ÔŠ¯ÛB´Y o†^•³´{4¼W¼yñ[l°Ôs©všaÛÀŸ-y[Öï-#y’÷ySŒB>n šnyl¸ Ç\0¬Ÿ/“lþÿY{wI–eKÌòà ]Ž–÷#YIÈ IDATJ(b:ÿ G Ò(ÚTïh©xM•’üj)‡vþÀ[(¡@‘ I€  A ô­åá{,³ðȾ…ƒƒÞõˆŒðpws[¶l-[ˆ‚´Rð‚v‹£`ù]S›E/fÔ$›‘µ<$ÁKgò´’#ß œáÁ‚“±IÝ tM÷<Øt*åäÆâ ¸ cLnüsù> ,Á†º—ä4Û©·}ÅjA„/.ok2Bjÿľîž"­wäw›pü} ŒÓH ˜q‹ ß—èhTØéˆ:^$›g‚L¦­O0Á±´ ^x•l0_PY…—2B„,±;»mä¸kj1;]f,+/·ºÊbõ22îµ²{' ÕÖ½xC°ÙˆKð9…wEì†`‘[÷Ê£n[ˆˆèñøÃK ÷å¸ÜFë°VŠ™ífW†_wŽzò} çÕ™ B÷5“gWUY¨;R(„dð-!on\ƒêCà';È”° $8v#Vä‹ú[ƒtï(„Xrt‹‚ó•°y…G¹öN¯QTËJ¶ `z±cžVÂô,ÖnÔoäAùŠÇµ_VñåjbtšW§=B„WÔ½2Ùq%MŽl  kŸZžC)Veôv–„¼Ž|‹mrJÝ ûé¶®.öhn\°¬‘hΤœéµ  A)µü JIõƒæ$ß@ •JT a¼ °] DS™f&‘Õ…˜08^$p掸» ‹Há9ƒ{õLḬ—›íß(âít‡gú±æ {AÚÇ3Hfä*"¹9'î]¢ÄQù¾?·¶z‚Î7Ëù³* Žˆ €)Z±„Z’Å=(Õp~èfGlX¬‚z°b¡ú™ÝÙÉêm‡1Ï£>{WÆbŒVgÝÓÌVªw†e F‰é†c¢ïJ‰—g½T6HE6Ør㨂Í]SJ0:Û° *Q”>ò¼ÄÐüpàÏ]„5׌°_KRv$Ù±Å)ÒmÙéÁé&=¾ö‡˜ÝZöoÁÍתG˜¬ 6Êñ 1³ò\?Ö ËÜå½Qs§Ø /¹lº'Ôž« ÍSN%.3ÄÈ#Á™lìyòÒ,BÆìÝd|Cˆ&”¿UχҊMw1kˆ`ÅÅu|×… dKÖÐ/£ž:§§ T€%‘r¯,Ú{qµ‘a‹‚à¸5FÁU7•(@6Í€é†Iã £˜Ø¬ -)cøŒ,qáY‰rDBö.\ÉéñŒ¹yžábEÕ–OlÎÚ0 ƒ^Àùœ2¨"Ûv8í!2©=†¬ð´Óyüb–r“\Á=Õ€ÝúLµ&n¼ué iŸ¾Lg*Û-Ž:ÁïCðçh¶g+±m†vËŸÛ:m*Ñ€†Äö,øÖ<ƒ]Xò…wÌ\ðvœì6zMcÀÓAí;Ž‘Îˆ°è˜-VÈ a¥ 2Zéä+B$S¥SDî\µ•A[ÈÈx¥Háöf4¬AYÛzÜ3I”?C›D+úø® ½wÈÐ53©°GJmÄ=v\xÓge#Ù§;…³–oç<ìÅѰ€Lò5X»÷Ù KÙCüL 3þ$.®Ãä¤?Ö!nÞ¤¡îUÆÛÅ÷fÊNO ŸqIÏ“¿;ÊlÄZ[Óª¾’Vªâ³‡[º>~Û£{ØGæŸÚ=!EÕSeä]áf’†b2zÀý^ (™ ^eñýŽ 1ÍâfŠÚàç±M¨y~¿ø<¬ìMŠT‹0}ÜV¥W¿,i tu³ëþ.²Ì¦ói/î“&ǰ#£×]Oϼ t‡aþ —…ÌX9W‡ÃÂê…§;ú0jXN ¨gÔº ñ|ʱ )НŸýBw¿i§¨,BòÝÐ÷Y~w”m2  )ŠÚ}ÌÎ’ÂM©Ð8…Æ^G“6¼Õ¦‘«DŽiVeí%Ӭ׌ë*™°)°'{*²bÀ•©Uq1Ø™D޹×åFäÃ’i IzèˆüqIöºåj)¥èæÐ>œP4 ݧl€Ña¦€¢¸íbÆA ~²1œLþÊŽ@¾-´fD@ÝC·ç+ˆ5 CO$å¼`;°™€›-\ylX Õf¡‡âd¶zÊžîˆæÅ sÌ£$Í—¸¼(›åýÄnž7¿«¦“e¾Ò[ebžôü§ãˆ["©ÙýcA›BR@5îdŠ0+e—Ñ É†U,ñ7¥õg©pžP¦J’°²vÎÔ*=V<8 3Múi½Ù!SŠ#O›ª°0MŠÂö)¾aq“Æá9òw02ªEucrtÁ‹SnÌ¡éOvJeUn²ÌÈyö“„~„.ui‚áMBr$ÀœÚîSsÆNž‘ké}éM¨¹žÈɆQ®&dº2aUmò=D)a8¦®r®{íAxÀ Ð,Ê·¶ó\‚srÏ †Oäèñ˜ª8ÖÆMÎkò˜žvƒq†´WÓOáõ†g§û§ Æ2ʲ-JÈ·Â-œpÍ æä$º”˜iYÀÌŒ™®âTÄ}G.¦Ã Y#ê4½0\±óMœ4 |5t­K­% ¹ä’E‹>Ò‰g˜€ „‹ gW4R„Þ2—cÅ)ȦŸwâ–N}ÒNig~[ª ÓH“wï#Oð,ÈcŒ `¸G2c‡ø'’TÀ¡°ˆ[lãLçiÚfW@ø÷ÅÝûãIÊìÆ“‹&>x ¯Ä.¾ÉÈû‘¬xá‡ê䈂‹äµ£û%`”ž^ÐÂÂÒbXÒO>Ì~Ò$ÏlÝL”¼¤…vJÙ·‡¶ÖY’^Zð ©(ï¹IéÀYB¥ñ©"ã\ƒIm}Ä ò¸’bíš–¢šÐ¦wjÉA>a,É3ãˆõO8¢¬DD§O1SOŸõ;§ÏúÍíýû´¶ÑmLˆñÍí:—ñWö§ü¥öêç}ñõkÂëó+o?å¿o¯V¿¢Oñk§ =2.à—ûm«ïÀëס¸D¡Žÿ~)uÍ7ù[8}Ö·Yÿñ¹±ÔÍ÷K= ^èôIÒ^îB§ ÑçˆN/ìŒò~ß>n{¨zÍv…1Á¢×ö4.ø ¢… Ñ:¦âöÓG{¢ÓeüŽÞ‡œfjê«üùëtúÇ#ÓãJôã|:Ý·»:]êSœ>éA÷í¥ÓRorû)øÐþŸmdê÷¿ÛwÖ:[èÆ{´úÓmÞïõ»gú}$:½´‰úx£÷¯ú˜…N§¯G"º}­ux·Ñ;½´QÚ~ú)ùtä:˜õ«ÝaN§ûãñö(_t#ZÄZ¦…èçù‘îõ?·'ú}ä:JvðûLض¡íGÔÞ/ß.^ÙÊz©C4j›Æ3ÑýôBÇ™~ß·¿Ú¦ßée|îéóþHD¯ão·ùF¿¿Ô^Ç—^ßÇè*&Òøú³ôt¡Çµ½»þ>,Ýëóæ6ñVz<ÞN§v¿ï<ö|<ÞËטù×:úwú¼¯õUŒ¹xM™èFt%úq¦ß÷ñšVqÙVÁX’…èÇ™Ö{ÿåzëW]‰z<Îô×nDk]òôZgc ï÷ñøßí ~¼Ñúµ½²ú£ÑÇù‘îv'™Ï.»ÝKŒ< ð ïÁî|ÈRÖ“f™Ê#eÎ3e†k@Ó½M3lŽ˜{²oE–¸¤Ó|sdÜÑP‡\Gœ¨a®ˆ¶ÙËqxÀ ÍléÅ:œz6»~L€jÁ˺âe‹@›;Tb‚xs¢ÆØ/Ø' ¸¦D>—¶Ý]“·Í³D]Ì3„)¯ ŸÊ–¬ uÖ9œ2ß2}Êî„/€@L‰L?²ÖÉýž=;ŽÞYó,”êÊU°Þò2$eTד¦ÈF@=c~’(¦Ÿ¬LÉ·ó¡Ìùc¹’ØyŠríM…"\ŒÔ­Ä¦µÇG˜¬ć/`÷=ׯG ,{$ãB±TwŽ ÙeÒ [12¬ v(ÑŒ' Œ”¢nÂ8"—•k+:ªÂ#3TÖ*+S¤,¶dCr1|#]JP’ ŠGV)ÈÙ b_ªâBÖå¶ .žYk˜ìZ³c§1×PªêpY ë ÏÆ4<Öó0 ™ø^r _ h…@Û‰%bá›ðõmw$›°š>aóé$i‡=–ëoÚ ^]¸—Hq`Ðî¶”ÛMJ,’62Ǭ£ˆüV;És¤Ï þJâ7ámTã#P>÷ã·Ýïê‘ÅgyÕ2qÍÜòt¹giøñ2ÒÿÓçlÄÚÐ?ZÆíÑÂÐ9ör‚¦Dó¥á‡l´r«&ÃéeÃêô=î§Ó½ÞÿR?} ò"Þi…8>+ÄTïg¨Î#Óétßî­ÞäÇ/õú¶§ÞÖçét×[g‹aoÌ™e [õš/ìMÝ$¤C ºé(Ûñ%~¯€dGÀ®ó£ôRgÈv«§Ó}{)ìýnÿó\?%݈¾Û4èˆe° }ú¯©>Ý:†w›`ôÚ†úfÑ‹,וqñÓ¥!‡ŸcFm·}z!Z*Œ6¦ý†¾60™CgK ö*·¹úó­æöÔ7xì…ý9ÿºÊ üû.6Ã¥î¢Ä«Í™]¢+ºâ–þþ‡Ø—1ÚÎ];@÷V§ßÃÚöó ÑBô~›^{ úë«Þd¨e€ät5ØÃ†(²m@²玫èõ÷}¼ˆßw^Ψ#\JšyqDUö9LŒþ˜&>Ïc üÄ‚ŸÎç[§=4`bÙåtà|1GtŒ'Ò8"i1n³„l€Ï5îÀnËa2ÇŽ4>Â#V•Xóʜɱ¶#¯ýÈ"Ze§gT9´¶+85l”\@*ïj}åÖêË{†2~YXc¥€¶nÅvSd}˜ÁGÎöOrÔÉÄ„²AÛÛ@軫+X¸X¼>ÎnPMKEÂÚE7,jSM$ž+ÈE¯\—žž¥€¥Æ$#` yI)¡dL¨éf6~u¾¬ó~Ž¥Îz¬7ɃˆÁƒæ½ÍÔ£Q@¾CLQÛG?úub…Mãøâ ¾ÉïD}4ϫĘçñ¡£4-ÿ\gf-u¨1v(ë§•€Õ½š÷; À<ÎÛ•kÚÄãã7_Û³³Lè†tO×'÷é“è¯;?çŽZ÷:ÎéõSÖñ°<­é/®¦}}éþ¾‹Œ°¿þ «½~È£±Œé#}7’B£]ÔbçwNDêt’Iôñ6¦î‹ ðlI8o’ÈÅõÑ~%ú®¹ˆ^¿mèùnýôgzÿŸˆˆÞ¿ú{Ùþ¼~ôÚH%m|ê°,5¡¬w~jSåã¼¥JãäÞ‰ï÷í†ë~¼qÆGÓ'ÑÏsOĶuÓnWôÈr¾G.rº}ÝZÂý×]­•eK瑾¿ÈLýÊVëïÁDè·Äâ÷Û–Âöúta‰éZù8c»x©¯žþºWÎÂÂP„ ±Ž)ÔßKå˜Xâí³––qö§»Ž%YGic—$ Æ,ò4¼ý¬ô–G&úùVé Ñû]€.=ñêžÆ¶Øø/ÖQÇüÖ°™µA8’ 2¸H&sø[ Ä©0+\Ìš1&lT@ÚUöƒ±Í®s@Ù„Qp@‹7@*øQ•ú,À.ú?ÅIÀÁ¦&*¸ê™Ç§+£© µM£Š }¼=òXíœ'V5$g1·‘t(â0i‡ÅèUˆÕep;9ã÷û>ë5?ÞÔFßñ“A>\Vsk[Ãe€ácxWF¿LrÑ^¢ò(#øÕ`ðÙö‹môN_„Ú•À;ZE°WdѺƒ¬•÷Èu‡}”º1.D?ÕðüÚ‚PCYEü6§ÝŽu i{F^«¯#yº÷™S—ÿ¢gr¿¿80.&íû½BÁ¹a‰™‘Š/ŒíÉ?+À°ÕTøVG~!ún[§Ú‹^‰þº î\¿7 °×ø´0ðö›èJtmìMÉKªáA¢¦J&ô olv´s»ì'‹[Ÿ Æøq®q®O¤+ûéïû˜~?ÞľôÝ( ‹sZZ¸ ËÇÛéBô×ט ë&ÉZ”x`Ÿö}0ë¯}œGìäk³2*σÞ9ÜWÀ›9ÂGP^à6’§® ?ùùC”2êüÍf$Ú·ª‚¼ò%}cÈ®¦ÆЫU’ z]=¶ðÌö™º55»Öº ¶\üOÌ€ú…KÇZçæŒEŽf„dZÃ'K¥ó,1í6vJ˜gÂR°Ì#žN ê!2H¯¬CÀ¶¹ˆÖB ý¶b EJ¯*%CCq· ŒÜmb‡ëâ°x¹¸%ÜãÑÉs)x>±%Èjºô,â%ZW”ÀÞOa·]äD X`Útñ Íz§"bÚE½}ÆÈçšscÓÙ8”f3cƒ 6­!êzõq* %H²ñø€NÖfßל âPR¤5£dÝ1´J†ÙœT“Œ(¾Ÿ?ÅÐj2J»‹<¨%iK¦$B 0Ï|+)^£ZÊà9&ZPLhg~iÓèÔ³®‹ GG¸Îwq?­ š¦ºVãêù$o^ý°YT:’ %<ï's¾IöcÜy÷?0þèŸÀ¬7€ö˜G¡1¶CE5»Ïñ ÒK…’ì`É}@*CVñ䘔’#Ë î°iqU¦@waiLEPPæ6eþOÆXÄ=æCwÄ Î|@@ËòE ¿€Ø+2F·´i”_{á¼^Fh3¯¤³ƒð^.è0YïêM¥ÚzLà„/’÷/ Ø]‹+æÄo’w¼‰kviA¡þwŽÌ KAŽlóøWðÐ º°‡åø‰èm :³Å-°¶§^Üæß„öÇØË†°AÊrŸY{·ŠC¡Ú¼Àè}J‚·¬ù&62A•)ÑG"¹‘1ªÓy§œ6C¼ìe^W¼¾ÓE<õÖËRÿ*W^C%G5Tm ùÅ[Ѹv´´^ƒ=]*©Œ“*‡êSÖ~[—Iç¼ÕêtiŒŒµñĶíUÈfÕC¡cÀÂ^ÐUsv*¹ãe°ï*Ëî{§dENÔ¥ÄTÇ|L‰o|”¡•N§¦ñó*zòô<ÔµñÎx<}õxiJIôÊX^7ñøœRQKè·vÿ‹ TúbÚh wbÝc£¹§¿Äe“úÇèD¼™7ò]߬¸óÎm{¿+É¥JÄøF ,.–=õ»Ê\q¦AsÎ¥1\nµ‡Œ_y´%½Ñ•‘QœG#ã_÷Jà¼T6cÝĶKýþª]\¾´©1ñ%?öóFœ©´Žeð€¶›¬ÌÛÒh¯õßÛÿDéëý‹‡†v3÷ª–X7صí YO×Aµøf¤\ÉÓývW°óÁÀ^É^FpHïþ*À‚oZõöª½[ÐÍ‘À mÎ…DÇñ+ú³ÌCšz‡ÿ©Â› ã^\f&Q衼Œ+@ÑeŒûäv°Ù~z;éutÔVÎÞKÝâ¬üF]²i,¤UÒ<{:"††çÜÿ½ŠÖÿ2¶ qva¤önñܶ›±b©-3£ŸÉ¬ä8rå¡Èwpó*õ+ÖA±µyŠOªûþ¸«‹üÏÏÁóíESÖÞÛ]oƒ Ç·õf·³ÈØ _ˆ·—ÎØMVÝßïã$ñ-f (B“ð“ms ›Wâ²x@Æ·™èãmì-·ß¶¿×Amu‰¾‹ •÷75øŸüLœÒqŸ×æÏ[€Ûàl$ÆÁZì#ÿÚšvàd T¯íxôY9¢ôqÞîA(U²6êÚ•q¼QQ»V¹ÂÞ Ò{êE~¼‰Vuª{ekm­A±ï<ãÕÿ|›ØÊ:…ûÉõ&N¢ûËVSøfÊŸÁ&Ô$Aû.#fÿ ’9¾êøz’b5A6p¼àKÍ«Bˆ¨=0Ók#³ÃK>u^ùEï)¼«Lþ•‰;ìæX\ 6±OS6fê7Šâ »ùÖèóizƒÚ!·žLןòè6ÛúiìáwÌø¿îâ§7‰•­ƒÎ“±WC´iÛ‡ör½j‘q&»6líÊ´Zä«*ºRy™®b˨7¹êÇ™çp#G„<þelX5ãùë«f“™”6qÿ«q´b}T¼E¤ÞyÑÒ-"}üÔº*UAã*ÕmVœå×=e-ŸGƒA?ÜXõ–1EyCÈû×Xï_|W£÷-åW1¤|Çìä½í5 !’»…¥JÔRª™bÏõ·9Ós¦.~ñH[ŸÜ½}@½´LëýÞ™÷=¤Õá¶V ÔóR£EE/”jy»Ú@PxäØ&gbÎD?Î|-שns’EWÁk_GßînòLÉQçžæE”¹BZµa¼‚¹‚‡Ê- A×!ò\5n¯ ò=KÚS;)¹y[Ú³Wža—Dk”Í@­Þñ:n³kž°O•ÜÊž»uÄŒhx ‘Ê”æ£]—X|ÊXG# ‚9–÷mHUqÚ–C&§%ÑÁ:%Aåef×âº<i˜RÜ¢8`©(®‡í1htJÁL˜G{I±¾3AG˜ä[»Ã^qrx M='cLŠmzÞJŠ äEå²c½M*4ÆöFÉß3ægÄò)♦?qï߬‰öýƒ<,þ £ º($ﵔф¢Ç€]"a+Bïq¥‚`¬ ¿d…Õ 6HŒ"DFœ*×+U?À°Ýó „qªu—çk¾ "/¬ÕC秬· ‚¾”kABÄeÔ$DP>#Öt”ÒA¢>_|ÎjÑ3¡ašœÛè^YîÎEÏ;¶Ç/ Ä´2d"ú¼Vݯ£„ J‘HL¤§5ã@~’Hª%—‚ ’s'i lÀ•+bòkê‡&ãœ{C7jÜÂ-]>hybËív_þn7‡8œæó˜IRß~Hš Çf/R>•ÿPøtOå ÷]>ñ¥ˆv`yä2!9ÝÖ0·°Gc"ä*RÄéôÚÎe*½: /Æú†j”P’ì£Rû^Ùuw$Ò`Žaæz›/øh¹9Zj«Ž%ÈÕ‚w¼lC¸E6œPA@û1öùãM°í‹/W›"2æ…Z³DÀnM¡FeBGÏìxdË>å1&¬¡¾ðì-¿¿˜TÒ\²¡_$¡˜µfÉ·Å0Ý¥£Šnfл+?ÓÊâfáIò÷7Yç=`óH†´›N…ɼÍyòاÃD^ªEhÇßzÜ…‘3"[hˆ÷j?ÜnJdOâ$ÉÍs(âDL¡S ö‹Éxç")$ =ÈiÏLÇS4Ì‚]Ãõäž½„÷|°Y·2h­Ëf,._‘ÑACz6¹TÑLhÂ12 Ÿ”7¢¥ÈÉšÈ7NË`òÃ$ÞîÅzÃÉø´¡ 1ÈRV˜ÈU ÐY2Ýp<Çó3vë0’ÐÂ3ÒAØÃŒæêüõÍ®&E+ôIP.ŠÐ j Æë IDAT7Œ‹»=9Æz°ãg2øÍ¿ìpvÐ"‹[´í4cbNŽùº<Þ‚ö/‚šOYŸ.=¬ÒV7ºRÂÙ!iÜT0£÷ø¥­ðüù”ò?*…âŽCwÑÓúE𤹺mû°Ê®»Wé¥2(…‹E7ªƒÑKnÏNKŒŒi PºË ~VzÛÐmÒÎ:qà&– ÿ´†÷ű Èa«b…:0™¡qWòÕ×Y¤ [BïÂ~sÅç&#Ö|ãfz’oU7™æwäÚµ£@8iB¢y Í×ca§C1ì0*‘"µ_À®Ã²ãx6¾ +€ åQá ÕêŸÜ“2Ì–<))³!" ¥:Èó3ô0Ì¢‹X°èñ†´öR’u‹Œ«bPy‹÷ºÚÅVaHP§í6›²îÆ…›¢a|QU¦ÉЦ8K)cèhÖŸ Sáb¾™±Y ^S¹ö$—œ¢³d댌tR”Et…TcÁ¸‚^l‡B®írƈ×ãqžc^Ä'÷<…•ý95c2¿™‰sÞ k—/çE‘€a±›}EK“q÷ºx„©J5àB"pÒÄ /ò\™ Q’j½¢ -狃Þd|Öuˆ‚¹ ›"°%¤ob*=új ì5Á²‚õc(a@V”ˆs@Lm#À”‚D|§³* ™E!Š~4:„tOˆ|t (€ÓIîa!td3 iܹ§uz#rg ¡DE6+7# Ušf)Øœ óaã‹ARãÆ%Ó&!³+v€Œ“‡}bÞ ¥·HÖ=g5ôæèwÛÙn_¢)% {õþŸö;8çËÆc%t$!cJ$*³NIt?ª•hÊxlRЉ·sMÆ­ñË+ûÿj­ò€xaÖ\Ö*Ÿ‰¾‡û—èÒë]ÀJ€ʬo—áæ îöÆ,¸L«d†1z¼¶¯×Öé¹ýûãÌí¸ª}ðw´­±æã<|Ë”}Cûóúͨ·@×¾WÓÈI}u±š]b%úYåç‚­ EŠÛù«·-«`µ[GÄ1t‚Z¢ƒösOñÏʪ„VpI’Èñš*¦æ8Ð' „Š‰Ç¹š•ÇÔÉ ;ÒòŠÕÒäÒü˜ å÷û@¿ä3Jœ¨2¶#ÊÂDN\,FyyöPA2¢|3•‹ãAX"á-“Å=q#.ãÆáʧ÷h€þ-`Ïåº\´wÓSð)DùXA]G|Ù z ÐÈÝÝc7ÇúM5‹Çß&ÙéĤE;<ÕÄâTˆÒØé¢ŸÈeRՌٰú›7v'M¡‡+iv•¹Õ¬F5xBÌbþÜšÔ^aÐ_+e•ífEoja(Pa¨Ñu¨‹v¼K ŽÌvCK†y–6MGŽãi›8SĺhÇt² UÓñ¢ŸçÓåNŸ>Èv#¢û&›IßôèO÷Ú¤äV¢óc¹-ïÚ*Xü¤¢´\¯ô¸²½»U¤ø*£OaO^k¹m—K —öʾE8\Y鑽…‡œZüT1–ÃÇ™~ßÇ”Hl¼Ñ•èç™W/·¡í½ÔùSßæ'ûGÇâñ£ «ëlJä ÑÏzMUM'Ýy᪞0>Îô×ýÁÑ«9­cJpÔ!¬—ëmœ.ôè3§°g"úù¦*¬ãßmdÆ ·x¼Iýž._c`W ò¨¢)‘L9ê"‹z,÷¾³ñ úC®ÍªkœšB.éw:}= =®M¨÷Ú´˜_šêô Óá½µÁ/l2/²€}õ¼¾ÿ+|¢w·ŽåQÚâ2Ïœø™*ÔŒKVÀG¢žÁâC1p7ƒˆ´øÊóžöã±1Q¨CÒ‰°g6.ÌdéV•1$ˆ­Þa“@Ø5’ÃFœŒ}剰Ë@c2Ò*˜ÇO¶u_8ûƒaÄ]±9ôWt˜ëb(rDGô<‹ZójÊsÎ勘oð?3hí"㵸#¤äIþ$¬¥ÜCþÅ|SðrÁ^ŽÞô{Ô%=†Ó!𚔑;¹²¬t'^vÝD‰L=LirŒ÷ñwhÝG²¿÷$dCÔœ÷ Þåì“ÔQSÂ~ù$ìFr yM2¾méT˃¿l¨·´iÚñ›3©  È-©ŠLöqøõmQÍã©q×O÷)Ë~;zXžˆö4’Ö¶êãôoúúÏ¥›Ãá‚„‰CçÑnØúéôUoò›YÝ öxEÊ^+´R§ø:ŒÝÆ$¾Éª›BÇ[î7ä𪵽Gù¤H6”|Œð¢A0UãÀæ"þ¿^ù›ù#¼ß·®¶¼“Á_Ù½ßà믩£ë€» ÖÃdTlnRŸe!ú}ç¤ùáry¥;77²­Ô=SÆÔZÛë>5_Áï1¶b^€ÿ]ko°6ʇ͌CT/8F÷*ÀvaîšúToìç¹ì: N{TYï:®?ìrÓ@Ã5J4'-î"­hX‡‹{ãÄ:ž½[{p·ÏѰqcØàmzõX_M‡Œ5<ز1¯Õ5¬»Í÷{/âr“T×ÁÊ̺ú=·)ôû«›u‰e£àwbý+‹~¿ª„¢‚ŽRg²èÐ!,Ξž&á¾LïÐCÑž¢kÌå‹ïgÿÎsDD Ì/v_Ó!<О!áåä ¡–ˆPdß‘m¨dè¬/.¾„¥†ø‰^çd²RááÙÜeTædO P ðÌè?í9ü@Lórh(|W&éà6¥ Ò"FH¿Î粨"‘«º»£væi.(6]ò!Ó, oi÷Á¼Í*M{ÒÒ0󿻏R/âÝe÷ø‹aX›ýÈî+‡®–ÁEøk%rÜLžC=ø+ÀÙfz¤fðÆ™ú'W†ˆ°`ð˜ç€ÄŒqƒ§u~½Ï ÄÚŸè÷‚d_ÏÿÆ“kƒ.2 éË06غ—Ö½.u—’º×€XŸµB‡'0Îm 7ZE]²/$–déÈbDˆ¯‹O(®Û>^»âåL}猥]²Ö ñªqdEU¸zPÆ.-–o «ÑÞQR¹®X·"-ˆÑ‚š(d_”“€RU –"Ö¤H4,Zä–±êÏ-Üž±W…”ÿN¾Ð †ñ;ÌèÈØ7Àä]]AYàá¶^1Æ*›íÒŽª=MÁÊpåÿ«Ð&a> xÙá°Í±Zž†¡(¸’Š»¼•æ˜wÆÄ¥àŒŽÿÒ¡ÎÊ‘cL Põ‚³7»¡Ø£®ÕXòR%UkÔ)WFS×5âÙo˜äRHí¡š2ôë/7£”¥€ô‘7¥‰­9K[¬p9Ø… ktŸ%Ø{2.£†\+±×*G¦{wäÛQß|äÚ"Ö¶,íönñŸ¬Ÿtë§©ŸûqÞ(Û-ž­Û ðÇés’tý”WÙÅ*ù¢»èZ»pÄüìí•5i.ãa]æÎÒß`$+„kú-¢ù‰Ï1Þ‚c%:-Ó­JSìÚƒßõYøÄ£GòÛ#ó=’}rã/âNz3–ÀÕÜÿІñ£HŸ®xÕ³Á1ýTm>œµ¡ß앵y½öF«z{[Ÿâãq¦÷;}ü:þ¡ß_eöûY÷oY¢–àãðííb}’«Ë.`]¹”Á[Pô ÞwšqÛõëÊê˳¿_¶Nû7‡.Á‹Ø‚èçã¿ýÿãöŸÿ›ÿëÿ_þ×ÿ9ïD¬C»Þs? b ÜßãûÁªµYÊ­Nc¸1ËUöðzÏåÝŒj¦Ÿ"{¢û->@€*r—[Œˆ"¤4:y?ÍFü:ZåuH&&ðÊž¢n«àƒqi]°5¿6²Ùµí¼Ué÷†–ú ëØ}F+‰µ="\ ]u'’û5Ÿlb÷ÜVc!úqî ×õ²…±§ZoæÖ½KÞé8’Ë8!®c¦„å—ÖA» †XX¾Ñ¬âàØ·˜)óø«±ñ3å«Ü¤LD‡ó¿O]tAL²óð:öÓ1ßd4SýÛ„X‡ ]¹yÝûœÑmé, ŒûYÐY¹=§Ž°ô8o ã:–ÃóÕ` „²ˆC6ÓP‹×2QõQÒžxŸKøÙY:Þàu_Nz ¿ÿ±uÕQm²x[{wëèˈÖÑ_5Æç÷—zû›[M×êØW Û¯¬{솚;SËÂ_µ•7OÙ’WÑ"YÆ„ä9V½á<ôúDBOlˆ¾ÍNÕïj'Ügk|ä ymM]”>½Ô:†zR–Ü^ýg#UiÁ/W»`¡ žßSoì{œû£××ûí¼y^Eõé¾å¦}q¶nyáògœâ!ÆÚ$YNqW¢covy;2ä2V§]gbF̨ô<'!Õ8`ªÃï¡Ü.z¢ìË0;}{Õ> `“«U!"¤*ÌÌ„L°‚¤}²fŠ"Agô‚‰*вÏóX!òs¬lü>B“_H¡„×aÀHEÀÛƒÊC°Jgvr‡#P0I$WȺƒÎ©Û¨Æ>ý‚LaW+‘c “Lní°NôDʮҹ¨ëA;‹Ýfl2Ùòã$tñ!¥HgðáµàŽÌTÃ8É ¢Ñd[ë.Sn–àò¹ŸsEqÓÂÁ˜Lò݉\M3™&›Þ\ Ÿçœˆv¦·S íˆ0죷­ì¨ éH—¤2Ø™T ·[íïÐä;ƒ(K¤ÉZðÅyz9V? 3»20e·Ô5"Ôt…‚} úêœS<Ù¡qà”Â,»p¬‚\àϤŒ9 ˜¶~ÁoÉc2«MÜÛÙ°¸cÆc}¯ì²˜€çÙㇲm"“Xo)¹û t5#îMƒŽ¤àÁ Ð6´2TËmƒ<ÝALsæO±-î6Ïn®p¨¨ûía˜™aÞ2¦q j<ÙÍÛ‚Hæ)ZR(™ÔüL¬òÂ'9Ý𧘛ÝIeAÍùÎÀÊJùEm.Ù0ÝùŹÌk6y@ Saµdt®,NA"#rzâL£³9n\Eäf"§ªTœ-/ë¿¢bÈfw..0 jŸÙ(+nyö0Õ]NMjÈ¢¦4‚ôëlÔLRtÓ›Fqݪˆ·Öe”¦ç½Ã®ˆèÄ#rDnRUpB¦Î…Þ±žT‘Ëå÷Û ÇúØ’®.“ ® ¿pÁ4£Ör1ý&ŒÝƒ*ZÊ^ÓSõ¼rfÙJÚvüˆp/~mJàʦN6nàJVy‡’‰–£¯ÆùP5‹7 ØÃ2©x}E ’¾õ"¯â‚J#n\ó[º õq^š‘ÏeÔu†ÁÄUT:+ÜßÕÿnÍœûu8VŒjÊJ§Ó½WÆ×÷(½Œ Ó'X½Ð5ì»nL2N5u¼ž7fŒx¿w¯)»¹÷)Ñ›avoX"]ÙC]ëývåRM§† ý<×·¹²"Í" 0¿ï*$÷GàŶñ"nmúšäìÚŒT^Z‰7B|Kí+Ñï»0“ûR/q’ ®µÐ²¸j2\PqhÜÝÚÝ.£®sº°þŠ+«Z]›SÉ–Í/Æ5æ»=#…öq®×¼ C¬±Ë-D?Aµ, QôñVÉmð« Ý"lçÿþ.3ß’c¼Šh:„4½£ù3/» ÿ æÅ5ð FAdæjQqœÀ¾;)Ð7{5܈žŸÁôvµñóan¯¨ìMzJêbù„j:›ÑÓu„‰òØ‹“‘«Ïj ÿ !1ݬŸä»x_"l!ÞfAþ#Y+ ¸ˆ+ò/&9̪­˜~U& ÃK­Ð¸ªjdcëŽ2"\èR9„·Öxg+ù‚XúK‰‰š#\¸Hç¯,m;yÈ‘ÕæBJ >ýåÕõ<Ï(Éãéf¶Ro~×ö¹þÿæYœ¤$ßÊ*ÆûËNë«Ò F»uÌ¢‚3å õ>,ô ÃÂIþ¨àå«A=F‚‚^=Ä*ÓÕe°0`ˆ4 qÔoÅQ(1˜ÏÙ×™LØ:‹ÈEnÉS•E\ †'¬ ¡ úV¤-‹²î˜-M7Ô>›ð˜Ëñ™©cMÖNb¿Áyr>§ïíõqZ°ùâxüô0þMFt÷¸È÷ýñÍIêdí*²dL®ä+«²þÚ!O&\õ!ØþeÞã ´P3®åM!â ^/ý(ÝϳˆÁ ¢ºtÄ¥E[ºC¡¢#P*¨ïų,?4cB Qè*é•ÄPº°8"[Èí¹:Å^-Ü+¨‹nªbS¶EIŸ¯(:—ès|qg‹>¢Ø£Žkø­&¯ò®ÌX¨·Nl«Ê• !Û¢G,àÃw„yqˆÑ犦é]>¹¶­3!jçR”$EZ×)²†NEF»GÓÚåΤk®üp%÷)½‹ãd¨t]‘¶l´¥¦ÙÀSwåiŒf±ã€]²ÔHéÑPUÁ>rB%÷ŒÄ‚ Æ„A½ n3°ûSä»[Aö#ä~¯Í #¢~?Ú-ÝKd°ÓŒŽö\Z¾ <Óó1ñ@uÆ"yç–‚Œ0Xr@„ÍŽuCwÆÍׂìÀf,ÄŸ­P¯÷k±¿6V›LB¶Øœ)Ïnâá9ó&ëâ Ãà Ñq%ܲÛuvŸÇëflcë,àtP¢"ø«]Ï/ûÙ5Á²`ÜPòç:»¯FmîD 8{>`q¨Ø’¤ñ¹!;&gÆVÊ"W°-ÀFHÌ®â;Ö[õ÷¢ ?j‡µY‚Ë0t,ÆÁ&‚v®@$8?eCƒF©Y• ÈÙu“-˜ÐÏûáDcPвHËÆ‰)ªyçEW»=cõÊpöÀÛŠO•Nç]g tK–'\öKæëÒQ¹$Â-eDò­¡š.9]YEïb%Öt@bv îzÃ]lP×>Å»W®Áó„4»òo* 'wÙ]r0^.ºeºCîŸ÷WBL¢‹Œ‘‘¢•×$«‰' “ý‚PÕT TbíñRF’÷¿6–Úéî²r—aPKP|dÑÅM£‹hôOáí÷• ø)XLƒÿ¶ÈH#ãÁ“~7^s>­ /íÿ©Ñ®šé¦b°QÔª]l* C†£‘;ý¯^ð÷]¼Ü×¶—F~[$‘r‘’¸å*ù™è÷]“*™Ž†PÌcÖÌu9.~e[Iw^¾‰õUÉŸÒ,øÇ¹2*/šZVå¿ño©L­¶!¸í ºÝ¦@Øw˜eÌÒG2¸ŠmÛ5 E Z´ÈöŽ8¡‘˜r×j©Z‚Ä”)–¶ï]Ú4x“ª¾Í[»øOiËÒ˜™\¸’[< ½•uL†®ëv3N™¶ÛÔÏ·ÁÑ-zç3‡Y~wÑË®R/Å\¹9{¶.Éu¬Ó:ºvöûWåmæÁñvØŠýÒ2?Î]û§Ý(E©J7†;£º¦•/â²4x'"¹~ЕÕeÕ÷yt±*´êâo/î5UÐê”kx3:(fM…÷" µLR¾¥M ¥D>/C,fçU,µ°rTXTò¿‰>Ç-uë÷®9KèR#X²­ðÁî¡FšÒÔw>ålKK*ß?ºÀO© £êØ’Q=çϾí_×r>Û¯FÖ¨³x¿ÛõÑÇÛéô¥gõj&yg÷ndè¥nõÝÉOãLƒw¾=‹’H¶ù=x?äå±€iÓs¬—-Ø,"võt’ÍÒîÄ‹h¯ò‹mmª¯Ÿ÷>ÄešúÑ£ý%áJDµË qq[=Û»âð_÷‡€ïƒóû.–ÏM,+¡wÞ†ºîU÷9 tËùµ=f6ê½]L¶6|’¹1ý|£Ï/~ö­²RÛ Ð—ºsžuœ.B—¸nø Û>-þu¨+ÕAxiÙuk ¹o¯ ÏáØÀõæ_Ç8õá>{oDt'"ú)ßDQÔv©t;TÚqÝöÀ™ Î i3¹vÌQœjrÿ³D2T1œè 2¦9µ!N¡õ\Æ=ó.³K‘ã3ú>cTkx]lDy);¬ª &˜¥ˆÂ¸'Óì´Ô4*áb¶[õÅëúMÆ7PT€§mñí‹2fmÛk…–â#¯Äj¥'!°kJû6rÃK™ ~¹W%ÂŒV"_Ĥh2½F²’ª2еŒ…q×$r׸5f#ãF{–u–õÊ+‘ ¶ç…ÒMYðŠõN²ßAL8õñŠ@ö© ÑF\Fªm³—!$&Q*˜¦.ov¨«ˆ ³©›r‚à¯SÁŒ 6®»Je"O8{…IAÞñhW¡?»¡7:Ÿ~ÕM|ø8 IDAT…õ§ë·~•¦P¹µs¾ßû9Tù}ŒSêkýÄŠ¥¼4EN©$Ëa€£ uÎu´0×µ]çªÕÿ†ßÛ*æÀè*mJ©Åbzµ}ZuGyǺ«\ìeàxÃieëb­—ªç膖JüŠêÈÑ…®3Ë{65°¿¶¸ÒñŸµ½fxVÉKíÌU‚°è–¨Z•ŽíKé÷W[P5U?5ÆÅß# [ÿé@GW‘ô©"ÌÌú>ÎïUó§ƒÕàøÏê#›š6ý8oPáø,–Ikìn©KþôB=Åï×?bmæ=ûx®¥6•óNÿšô_ôÙ–x„ôE&êH^*úÍçùýŒmóUð¶T›Û¸mýó<`Õg±ßڭúÀóõŸgT3¿'.;.ÆÓv™ –´f9µéc—ˆx”~2›b¦²eœŒî&XDÚÚCØFÀ^ÑìX„dÿøÉ¤BIuø§¯0»jL„,ºËCÆ®»ª©•ÐJDAÔÙ°|‚’jpVòtä5'•hîݬd«E_sÐOæØ‚€u½$2fßSZ÷ÿeD>t>…ËÙyÄ.Ü{WÀ¬†SäBŽ>§{Œ8 ŠGSäÓeÔº Ý£à*œùÁßTÄ×%j–¨Û¹`§„£K~˜+ø¯®™xÅ¥ZîÒó&Q2rd qèÊaêw>èO’¾V4˜%ÙW9®„kÕØà"tÅ¿‹ Iy½6²‚¨Pô¤E½æb¨mt` Ô8¢Ýäô*YØd'Âu쥈BßIë0q¢DSÅÝ “3Ú¾£•»m-Yëþ27j*;’v—÷€‹¤¹']+ÕX°Â´VßäTI{>@EÌœ6 VØ;VÚ÷® Þ¶±/‡=?IŸS=™˜ç¸‰„/“ÑÅy® uU,5ûûÀÿ7í\™W¬·:üiÃQ ܪ4CïÓEÕ8õ€«rnŨµ^Pù–ò7A9üÍ ºóOÌ…±¿Ì± Å ™a^œ.UÎÃ@¹3*›ár ¯­ªÐázá “¼T_4úyîeùÌÆç¯¯`2oâjx–Ç'a:Øåág,–æC-8¤Alá˜õŽ$¾® !¿>Wn¦\ë=¬ qã ÒÊmhQ ÆãûWí…‘;Vf?vmÝúúþs^§Í¼Áºuˆg™±|%Q¬å,Lõv”‡¦bð,[Wtmç¾Ï»ÄØT »Ú¹Wl(_¾ åÌLjÙxòÌ;÷8“c„:™º20d“Y`+)d|jGÔGŒéq“ìЫà‹èãÒ>C‹ø¬Íªc24nrtIóÅÕš‡†‡QnWÆ6¼¬’w sÂ!ßìFËs•Ç wWù?zkÚèünoá…–y¤¤þjíã7WA†iÒ ·í êøR‡È:©¯â«[·ø:&'à›¼ßwÅjjfiôB‰SòûݶWÖá=Ý9©˜—F»wÝúmë­å·1Ÿ/¨âpcMå4šßÇ|aÅ¥ÑðníÞ¿:F:pø<ÞÑØµº¿Éë˜êÒ^×{f³w›œ§¯ú¼+Ñï{%O¾ßyû¿Ê›‡)Lñ]ÃŒv{l:¼›p̨óí2yêrD:ò0Ì£I̼âû®@çFÌX?Æj#AºŠë<ðA|bÁ5s ˜íK`$K½NˆIrP‚†„Ž˜™LcPs."d[¸Šî!K”°z€ž$[A–†FDâ±.¢^rÈ’?²>ÂA¾Õò÷-AOBÅ ëšçôÅßJhrm…h¡¢•š`\º`÷m0†*‰Y3ÆGƦP H?CŒÐå29§†ÈW>4‰8Ñœ®àŽz^öëFigŽcD“=Êb KD¾Iˆl¦¹x2´w¸[…š©#îÞ =ÑŽ*7D¸ô‚ŸÔh΂œF uÅ:N.@’’ï³s¶(˜X ±MàîQg1Ol×ý‘ýwúHÕ9 ceE,öo‹N°Ëö½" ØkÔ´ÉñÅŽ_P”ÍZ3×Ýû ÿr‰(©àRÊV€ªÞX!ÅÜ»¥âG-aL>­ššŸk³—Q)ÑÔ“¹ÁaÃe¨?Ù¶ØÑAªÀö *ptH»}7%òËîÞZf#ÇŒ{ý!&Èd4ÚmÛmðr͹çr¦cööejXv0CñM}ª(¡ž·9o¹š§¸ •taNª‘R(Ár^Õ`Þ° ¨«Ê x¥ëï(o{ä* ŠÉÖìÃó;Ï‘ehôQu¾epkö êa4lÁj 29óøGÝoEÓ¥.¸"h™ãŠ‚šÌƒq™’}AÚøÖëÓXÑDöèjÁìbõ-1’¥¥ÏsÅ9Ùcž¯ƒÔã{ÜhOˆ%@Ÿa¤‰3ùÒªò§¦›´s9Ö®ê¹=¶ì‡ŸƃäÂz‡r £D™h±ËÐ{ŽšÐñf·G*ù“ÔÊ®lêI"9m§ú\‰rÁžð{_(aw€ënvMpt¦â$+q*ÒAᙡ¿|/$-* ˆû#ÎÚ+3Ÿ {ÄÆÑËð<±L»È,¦'ÅENVp VqN¿ìdÇäÏbNYÏ…ÍjŸ‚ŒJ¸:4ŵÒ{zí8ɈëËâ–&ÁJU~|BJØÔ¦È8¯Í¡kIžŽX»;oÍ$ßõu¦ ¶› Eúk?vÓ9R'ÙŒGqKx ?·ÆÄ•†C8DŽÙ•FX}ç ;ö.[j‰NK¶å¹Ç¢vÊ„É{ ùMÓ‚&HD•¤ì¢p[!k"ã8Ûb†âzÒs·¼'€æá’áÑiÎ[15’$\:AÌËÀ¥"fdµ mãDAGÕ"ÚÏuòWÜåà댰qŸÔN„Å?EÞ_ö8™Åd“Å©bú¥12¸ÂÎñàD‹†˜+¨¤ù@Gpß寧ËòÓ4»æEóa¬Dž¥#r–¹?%à¯d$P…>”jŒ…œà=fЗ=ˆ˜94á™ÒÄmÇ#%oä¥róõHº`ˆa_M®rÕVÉrü}'bzÏÄ(v$¦Ðx‰—T'Mš]Ǻ¶X¾°áº¬^í¦‹ùÄ”°+M+5fìÒ8T0<¼ßëŸü|q¢ßž"€5ÑîÍL¡~-æÿiôuÖ;ùaFX–ôOyaK ë"®B~³ò¾~ßk×'›¢AþÒzœiH¤oF$üöè»ÞUå~·úq«ûUÈ'vÁokˆsºT±DmòR»k+ý¯yšpÉóúßš„Ö bÆK¿’ÝëºÎäøóÇÛh7–Â.©%û^v#ãýdžÈ߆»Ê7˜…ÿ ßÇï¯ÀC¤ªüñæåǯî×3áí½ãûseëÝÚ`ö ùñÖ‡´Së®l ¾‡.h_#Ziaëß_åþ¹Ô7;öêEÊ6Æ\ÁÝÑ:n=û{™Ó}nºÇÖƒþÝáQe¿£d)NnD~9=9AÈ+›qãð„¢KrN B¬· ·€ }mE#еz±’Þþ¼b Ökð»Í­¸ˆÈŠùMz»™"hH\Ï ûf 9‡ê¶g…ÚÁÁœ …ÇgG®×œ$ ˜´!5¡‚]äè¢w~³’îA3O×±¼ªàÌ^éiHM‘°'3ž)[\Yr÷ö‹õ¨óDºÓ—€÷ñGY ¥ü©ª~àsÊeº'Ü䄜¬é|ä÷Ž€œÌ>ˆ–'x³°ˆÐØs,G™ ½yìÇçúlä Ðq[µø€‚äÚá4Â'‘Û‚$ˆ¥‰€ñ‘EÀ†ÕkH-Q„|ȈyáPσº»%%ªÓ­ø¦é@Ì2JlµÅ.ö=*¾+~}¢læ;cÙFoÃÑdýlh& 1)Jt5=[’IU½mvÒÖ£*M»÷ÌéÞýÛiÊûs±f3DÄݦã€!6~ž Rî¤þ‰é“ љT¿‘ÄÊ{5ÿqÔÍ;•["äÇ‘±ßŒS€Ö»Â^@`+&ªeÝaJ29®Ð\ÂÇØ‰ÎiºóB$Âþ^»u£ÀÒV¼± 7 x(áRRYÛÓˆdŽ5/ƒS‘9Ú‹àC6"ÙCš«¥2b(;‡}Áy'¬SˆwçøP˜÷àÊìœilïpIu[‹õžâ†zÑãûà6ð]¼þLCbBà.90àæ‘¯O?Nçøå‰xÍ,;M©°¼W\\Æ9ŒUf€ÆP؃Õq3×VØI:!9Lw-˜Þ· ‘o£º³Áet*/QϾ¢Ÿ@F~Ͳ ËñÆ/´Š+›‰ãqÖŒº°š±h½çÃi‹µú4fæ¹Ö?,.mÛšUª“‡fp$†òe—v—Y'”CÄ^*³kù1³{®0‡OœŸ—Ý%žzè¤òïsß?4AÀUMõžzõûä0’w¶ŒŒ4÷|3- 3 E:Š‹z/½UeßÕ;!,(ƒÃ¸¸jàUÏ6Êâ´÷–bÕå–ìÔɲ®c=*€D R§šHFJ_;ª2òàA†ÔªùÿºGøŒ±ò]÷x¡Þc9ÁX¬â0{¶ÀíÌž“àS¨Fo+l n,ù𥥼øTW¨80¸Tžf^€!KÏXOídù™,'>ÉNÆ$/2Ù³áLº3™VNÆb@ÒüÏuy^õ@éÀQt &col¯$&=÷ ®0yÇyMɱÛ+€–ìR€©ªR—¶ Œ7Ù­ˆÃ*µeß`eÈ2±&k<é ügJ\.W*O©Â?‘OÄ¢M38!"Ùˆx= $’ïsø(z„p„m‡&Þ‚CMh" ]êÊØ(EsT´H½ÇMP|\…éo<’ Þ¬êrº³ÕöPBÆÍðI­ ;f—8îq`¬ŠÛÉŽ ·=#)¾µ[î0Þ‹¶Ünd*ÆÈÍÕLK[>,áÂöíÇßqCHÁòùàH…·é4ɼˆ¨P{Û«eϲþRDUxn ~º¼4uî ÀÇ}]zñ@´ºìÄW(8û¯’rA§ ôe$Œ‹öÙfDØQÞ¥¤'òÄ ,÷š´Ùˆ…™{iÏàÃJÔ˜ò‰hr2Û0. +qé.kâ€R¼U¥lÍÍã‡nK, ÒæNBî)yQ‡Cð/|›Cd ;Eb¸iâI¶ á ëY‰èi@aËï{8AÆe ÏŽ¤2ÖÃeÆ (Be` ’à‚üÆå'c·‘¿ª©.³y©0KR×RH[¶XùZþ¨ÊÕžKg*%Ä®´IÃFuY¯NàíþÊ$»ñ{æ¿É!¡Ànw:‚¼/æ¯VñŒJ£Ö~©÷¸Ÿªv*ÄwýD¿Ÿç*$z­ÓætiÊ›7¦»ù‚ߘîm·ïröÞýù«W{?³n­¶ñÔ,Ã7“ïî×ÞÚ…n­4°5Óãj–ëM­Š¼YѯíÄnïµ."õéUhø•]m½ ÒúWë֭µ·ê˜Þ%JO§;?v€¾9²ÿþªAëã,†úÊFìFGýi·6ïwØ÷&-Ýïÿµ]þ¹¿ëG®7¬V‡ºËsC®…±HoDïÿomÒÅpõ¹ÅÕexÉ×o^‰~‰¥WØmw(x­Ç›—|Ýý^ê¶9ÙøÜ[Óf¢Þõ>—ê"/6R®Eûq®µ|sXư R‹}òÚdS±‹8ß飱ⴛ^é‘«t2W¯î/òë.qmoùe¬ÖmW©÷¶ñb"òÙí9,Må¨þAÇ{³ði+c&Eü·Gñ±}Ù§„€DÇrG:Ø>¼Ë^ñ vÑשB]hÊ…9ê×(bvÚS †Â”„Ôˆ²K‚”\yñùåŤ›ÙG8÷¬ µÒG8Œ Ñ„¦ Ù”òTû”¦mŠL¥]ùÄìØSe)FÅÛ¤2¸=€Hûj³:-.ÀÁ’&èû»¨Ù¨ñR›£Wìî$#‰âéA¤HÏŒ3=(ˆ¤²‘ôÁÜè<•« ^<¢l g WU=ªyCa3{hÀv›vŸhLŽäݲužmäÚiµ+þfý¬ã¢Gº9/3€äN¬õEÌ ŽG¤©\^)”¨Ý*vÀä4…R#_n¼´¾æŠÖÁ‰ÑQì¸PPŠÊ~„¤óì†^ìƒç1âP{)Öî+MÒG“8°]±L}¯.î³³ÑìIÀµYI¬Ï¡³în2 ½]>] Åc¢c–â&ˆ§Kî©(èüµ¶ŸÚºLíþüÎ uÅj&YJ$ÌCD£•çYúø;yðRÀEßCì¡cìööum%³ÿ'9ÊZ±*`CâdtqÏAs»|¼=Á’,îcËSY A&÷'u¾ÉÄÔuŠÓí[pù— L±:ZDØAÓƒy O÷˜aÑêp¬àü&ö¯‚óoïI‰\Q8-ƒ›Ly,IuÕ?[œ¾ ¡m`̺²Û7¡æ¤Þ!«x3x³´§^¨Ý[…uÃ8ÅÜc"91†Ûµ°ÞáÀLÇnñ0¡×‡"Ð츸æú4S0›ÃÖG¹—‚ê9c³ý Ið.Ç„ê…\4¯„oÚutäÑÖ§ÇQŒù4šOáHÌÍš¼Á¼A™1ê2ÇÍÍ>®>¥"­a’¦Š4ª!µÊħ4d7ÖazÔ¯î•IúUò‡êµïáý¢\òjG:;¤ªÒÖG —jî6jKõ‚y”ú{†o5tÓ– O/£"5Ž·Îþ³mßç}.L1oðbŠ”V‡ë…®­†qúêæ“§ÓW·àSµºZGy{šÆõColÑ1¿G~«§Ó½ FÝ÷tßk­k«¾²;¹UçÌíƒø•ù"⥵z'‹˜}묲6Âã½®SšMâû}TJÖñh|;æ~’ý u7(f“Yǯ?zmß|­s¬ Î?oŤín{Åt›Bzüó¨öX­2O÷G"úx£ß÷îsXoïñF¤ ÏôÝJmNvgÑ^ˬ֗×Væ\X ‡¯âoV¯ún¦› –¯¦/­ÐM;ÕžÙ—ööË¿ïuŠRÖ`œît­e9» × ëÒ¾¹Ê=ç÷l³/rѽj«ÛQ75×ßpà‘>ÂÏéþõº™bXØÏ"f>«6îXÒPYýz[¿ ÊEh­®ò­, ¨'×_Åûæw*«ä28x¬ÅÙ^¿`_ù¨ÕS5“=]e9>WGµ¥°2u±jÄï«Y97Ư¹Ô]¯.lV÷&"zÿ¢÷/1[^Æ"ÑÌ”m‹¼1wà~ÿÛm ‚næ[ËÚŸ¦þÝHÃK QÝç÷fܳ>±ñýôQÚöñ-Iw {#W1ÇxÀØvŸ:˜ß¬½¶…¹šiöbæ«9•/£¸ ²Ïs­{/2°õ+¿ßŘ7J˶kwé×¶í^EÌÞ*ó8ÓâL ¾u\†¡sß7ÇIH=òï/uD®Õ¯ÒÌ·(®-´³ŸÞîüãítú:]ÏèÚáôÅ8g¯m÷ïáh¸5p ¥·a(,.ò)O?Ïõ;ëXG§ Ñ7‹7i͉èç[÷&’îí×Aù©7ðñF+3ù»‰]½ï½Ûœç¶×[lëá}²Õ£ÌgnŒÜ‘ÚÞåðÈþfCH¿Í Ê8#q¨Ïo~)~…À-^°ì>]<‡G8•[¨{SЋOâ$²È®0¯q“ål‡>Úë‹D|±|îð#T‚%~tÙ‰jš÷=]]%‚´Ž½R,¾ëátÄ!¶«ŽCeja© ÃJ'¶}³í•½ênu‘ckUëwgô12WAÒÛ2³qý…Ùoã¹Æz^ªI|ÍK^‰^h¡`å±<£†—‘õ\£?ßúÒíyRÝÝújZE8ÄÒöãÜo£»Îó€øÚâÐwK‰qŸ“9G$àû#[Mc½µƒÿ•íJ½Rµ:hÝþäËN#•/ýµþÉ8,f€ô éϳZGNüù ËÉ~ñ ­Å~·ýæ7Ö¥h—|©8«‰×}æ;ÏXׯí7ßï#M_Lê¹öhõdùÒ&0?±±›§«ÔšZ'¸‚nEÔWœTš-SùÔ¸ùëlFšðÙ7èÛã=Æ·:#\³§ÝÞa˜%œyðn [ ŠÝogø„¶$Ų Ùy­]¶u”hó0‹º­]ŸS¯`÷]‹#sk¹XyÃñ7 dê™-b£Ü`U.²½ú—~i‰Ý…ma¯ìàlj*ö¨QÊ,fTýÇ«¢UWu ²cG$à©QQ ‡T°!V…b}i/¬ r••*-k='è™Ö¨n^­ÂÑAÔ^½HÄâª_ÛÆôÝ2ža4 IDAT+«<- :{¿×…D½dLÎJ«ë¥Ž9VBðLti9=ÃyºÀ·§YšZ[uê»M˜›)o 'äÀúŠ@žõÙ¢°Œßœá.º=ÝsŸ6¼&=Å÷xGbÃù¦Ó‹€”rxº ˆès äò©x2±Úáe@—¼È§—Æ‹î‚í‚ÓK³[PÿbÇW>Ù¢ÛàýÛ¨/V`óôeÕ¿ÐåXq–+¬ïʱL†Ý_óXËö6 Z~|œ×D ŒË<+åøÒP3JQ3,G»£­` « ¿rJØ®¦ 3-Æõ Gç¨Àd-ƒ5m·ˆŒ8{] õŸÌº‘Œ÷±5g(|HnœÐŸ_ÍC?Oå–È5¬"ÒÆðV²Ó—‰Õübßçça~§ ІŠï6S!ò…ʸCe×파±$בçŒUÌïH‡åè¶MçƒU/¹ ]¿Ùµþ¡]‹¤Û"èì†Óï!OæXÝçœl1)–Z°²xq"Â)–b qáO';¼`²Æ8¼°¹2Ü<Éãù:jWø(Í‹L »æâ'’ÌÓ÷¨Å°9¹Ã£î­Þ¶u½æ­3Gµc5‰qÌïEÇ…U.’œ²Fžë¥^[~v3Š'‹˜-ýxÎoUQ ëÌCÁý¹°’«R«›>ç3ÒOʵRxââ®^ØG¯²Æðóçʽ˜_å÷ V‹{¾Û™{5!¸°„Îê­øwSk˪]ÊÕʶ‹µ•‚XªöüÇå6á­c £2gjHC£d©´I­´‚‚tÿߣ°ZÚkÏÅÿ¹/½òkÒfh¨=S¯ ½A X)f›º|ýŽ·³Šò¼Ø²>GèR|Xȯƒ¹Ê4ú[Þ9ãâ- Ö±&;¥©ØÍŠÃÇó9aÀC:}{PL DüìÙv7¥PxÖólôŽe¹OàÕªÏ%Ç$‡6¸a¿¤—[¨~#qÿMdÚÓY€H Ja”­-îOž–y2ÇíÀ™>TÎÕs$S‹óãìË£(M‡bzf3R%(X…Y?²î:"«—Ê‹UÅP7z•}߳߅V°10ÊÉF¤éaâ‹ìMo¯ôK±~„£ëO»‚ÝjU”÷-%,þ¶¸ØÐ.÷#ön¶ Æ*÷‹‰ô„?V\H6Ü'œŒëPØšŽƒÝÐ#nìøNª§ý‚tëƒ÷9/λù2(;ƒöO_¿ÀeCW,H’÷­¹ã!Pœ»8<{Dý•^ÞïµÙZÚyR÷–vÒŒXƇá]bõ,Š+B{&ãP2@ ¾M†~7-õ+û‹’–°éšgi/öÜíÊÅU ™Ù+´&2ÔFÊÑ¢ƒ¡ãp”§=9íMC\ÈøSa”þ"”™}v¥~áÆÃ0V1ÎÈ·%ƒSŽëöP¦#TO9”xíxÜ9¿6y5š0`œ‰.V“-Þñ‡@¯R[L†CÌâK;ªTÏ}ûÚäóë ’:qÑ»OÑø° 6]ÓemaÕrÍ€mˆ…ø ø[½ðŒ¡5ƒàJñÏ(0ø2zðeY‹¼\¡!‡å‡JJb4²;÷€1cå°¨ŒwVÇ [¾ÒãS\óe¸œ£vòä8g:qE¼ÔA¨ËiX™#Ï4'K*µÄ´°àÒÿ`I%Ðàa³QGô’Q©çR«ìc'Ú.vt̳ÆNûŒ'²p™‹0Ìiâ=ás¨ÅŒÇèœiÏB%Îb°ññä ÃIøŽÿ­ÍŠ `åJ…=:ì–„<Ý-ýÁã)Øs±ëé—Á=gß笸É(œ`°¨ŒHÿÞÛg]Z9ÄWY´öW K9´» ­*]Bª¦…0Ó:÷êä‡=c$öz‡¨B„ç•·Žxx°éY;f©ä´#’™œ€—]G¯3»6[£"¹0,¢r'ÇPÍ‘K­,¬–µúWA( CAŤm)1óbjõª·—üŽ×.š` ⪳¦n\Ø t40ZqóK˜VÙ{ø5ÁÄ0;TÕ$­öOÀ(Á$ŽO µ‹Ó’O‹ßÿZ gòÖªÁ·QVå•í^g>î½+vL€^Ô½IÕ&šÅ)•FÑù«p¢.lù ™Mž€±½5GæÖja¬nÖª¡$‚ê}‹M÷³¿`™¾—JX¯ò•详ôóÞÿ]ÿ_«¿‰ú+Ý ¼~ ý¾~m õúËßCÇ’ ¬ì™W’©ôúÞ˜¼4á‰Ñ3ýüµÝ§aêæ&!þÇl íYôôçW9E¹²Ã:ÚN«¸Fß VñZ9¹|Ìó÷»èIXYOÈR§ÊènNÒ‡ÁW¼IV¢ÄÖz±° \ƒ£Î¥&0qnÝÃk†?å•uÙo øÎ…Išÿ2VëE‘Œ«­lÌW9ÔÝu¨®—•è÷}èruÂ˳©bJu[_D=ÍRfU˜yá10jמ`—ì0“ÖÄ9ptë@y*óp¤ÝÛóx+3¦ÈkõH–ùtC7Ð{5GKÏð0¨Šö:!³þžvu«…xo ×!·7J¼ü† ¯o”ÈiV•³Í¬žß3Fu¼îl¬HëÉÀ uí3F;E•Eê{yžõ§ˆ èú¨W ~kU¤³S½/.gÇZ `l<°%¬\\'Ž d“BÏšziª9£«‰¹çYÃJÜY4p®Ã!JÇ‘C5&“5ɨ¿ÉÝIâ]­kÈ;:ºŸÆÖï B3[3#H™l–úCñ‹£¨] 9Oä–+E,ÌM‚6ÞÅ!AHNÍ6kaiB +„ìzÕ®§§¾")©FU…¶ÛqvüÔ-F c˜òËH¿ŸäÆ3ìK” .mîœTŸâè‹›V0è࣠ˆñ‰0!ʃѳ€R ZL!! -Z„§RBbç¼.‹Y3ŽMv¼.ô¸l¾LÖ;\2BæýÖU+·¯ÊNýËëÄ_]úRñƒ}ÖÇ?â î—UL»˜¬ñÀ`÷¿”aÄŒŽaá-)MéÓ\Á @òœú€­ä“_)&Ŧ4_°q9Üô¸Pêed,—”n )º…nmªÑÒ"ìd€î¯Â?p*@ÑJÛºóÿïþ{•×gC—*ѦO¤;~8¸Süì¾5%ÜÄÅnEHȲáÍhØÉ*eLLÎ!7¹@DÌH&Ñ»â6;Þ Ÿ1EÖðúI³>רfê9oH ›¥<`ҙDZ4j‡ú^ÂÉç›ûPÑ8Ó> n3×Mîa³²?’æëÚÙá ¦>4¡ŸrYüBö¡òL`å.Þtž3rœ©W=Îû _ŽŠdq|ŠQu°LÆ-+) ±ØG™ÈEÌ=3\`—T^Aq´8>¿É?pà€L¦ã•Èi7ÙK Û˜È=#{ œN°®¦1[Ö¼éÁYâLP¤u³$îgq”±mª–š@­"r"•U·ì–gq0¯ ¢¶`•F»K#,Ô8ñø«ÇÂT[¼ 2E)/êÃ.ÆdIÍÚ:§gü#í}šü–¬Òz+ ¦¹»QðPk¿µ§z>Y€?*¸³ FžR)ºlàÀÒú’éšÚmb‹¿ÿ‡_¶$ak»¤‰ãVA ÿÛ.*¯rkÁL¼Ì¼­ªàÆ8ï”í=©pá³<çf£=á˜ÞâkGbïk’µŠFŒpxôµ" ?ŸÂŠŒÐÕAgxòƒ•3c–°à1 ËÛO­ò\j&Ù JÅÙÁÓPW8P2LŽj~Ö¾ÆßA4%&¡Q»ì§]ÅݬQ¶9³P½çA¬ µâ>¡Ø"+øŽ¶¿ÊÆÚjóS¹€¿å"ZBðû¢´«­§l´”‘qwioâêáD˜7l×’Ç8ŸÉ¢‚˜d}#Ÿ ë[¥Î[;ç‚ßýûão_¯ZéC“'æÔ·1‡RYælõÏ«Ã0—³É?€Èép–ƒÀ„Îä€s ðN¿¶¸Í˜»h[#¥L¯^ÖP™{Ç î«„(ë'¾¢2ÌæZDí§Ì©®ÿUKö‘QžìBšÃMøSÀ˜ãM1KÀú9%úµýt1ö+Zn‹XGúö®Dï÷­ídofáÖ¨—ùæƒõ=ÌÛþE§É,ýoVì$Ÿ³.¸òJ×êñæaƒ6æ)²™Eˆ€<Þö€´×¦‚‰y§ãÐÃZcQDý¹9:êþ¤Œ5Ò‚31@ .õB`ABÇRŒPã&–æJ¸–¦ÑÝIæÅ<»lÚ x3»'ù¼ù(ÊQ@:Jeœ”BŸÔ]œI='õ=’>G{™‘ó8ƼÈqAªV “€5êH ê«fp÷)³ü— Cæ‘8*ˆÌc€´Q‡"O(fGÂ*G’n€vQ¢s†­ÀëèÈÈX|¹™,Ê€%cv‚–©ó!‡ÌùA¢Gp– Ô|‚Át¤æx{’ßz%rܬ»?Áªt Y@Ž€ýˆÙil‚dºhê˜ŽŽºo½ü‡uÝC.jäžÂÙʾôøs©ÆdŠCtøv!Ê o›'hx2 ^U&†éHë[œfáSž'›öxÃz):GƒV\f@á3²*nýÒ£liXÏóE>{¨i<Ï,C/»:Ë-Ò¸O‘Ê^Íjð8Á¾–QÂ$Í‚¤³÷c (ŵÂ?–I!Ó8!ƒâ¹µÊÈÂì0(3ã^f˜1)0†µ4ã`´­áŠÞ¸ièRÍLÎ0²lþç8­0`9v […z+L§Ïƒ¾(¹Î«Þ~­9œ’?c#"–=kf fëžBšh×g4€÷JÁ;cï1Rãã]Šß‰uÝ!s!Yµdu÷‡c_ßí5õ–ˆí«IV¶nŒß_âqrkÔXðÁÂÝD¾‡ƒÉö¡£¥éÖüÔHöYñ]G¬»EÊ—Ç=jÖgK@O/Ðâ¸ß"›Ê€ LëÛ¢82TÙ­Ž¨R«&*U©ô)»8jxÒ¶8Æ3T¹Îsš'G CŽÙÝâ„ÖwÈ®ï6a)βå@¯€m1X‚­oèu xÀÊîÒÇŒƒåñi{êUŒ„Z òœ’ÓE;ÏSÚí!ÐsxÚ¡ºK`Wz&‚á.ìbnå€êà.ob&G¿_Žéi% íbä°8<õìn¬XÄîIktîЙ¢ ´=POXÄItþ—î:*sG+¹Šßéˆkvà£;@Žà ªþœ)Š)7Á§Wè"VqíE/„\ Œ1ãBˆëVt¤È£,i¼+Š:É)…‘Œ}q—¡iö(“ßÉ÷q²k@áãŒ$¯¼ê’h²S+˜]ì=F;'#ÖL gRtuLj$OíÝ“qh×Ök·gBù@þ\gþ ÿ`3g¹´’Þm•d­×Éø•ùôŒ‡:®<»‡¤¼—ý5ïü w57t5 µà(E Õ× ®<ÂapzóY\§ÌQB)bUÁÍŶŒáÂÙ¥‰zÇb›ËÛ—¤ŸÈMŒRäÌ)GÎæ/šÈ -T½Ð¶‚¹]ɸpeL@ÀÉk1þgEdi:â2ÿ0Ld•Pˆú„ u¦‹_·‹ùý ­ÏGÙí lg÷»½ç0-ï$5#¶?Ž[qƒ¶G"Ñš.ò©†3Ø#¦™…Q½eFÑuã‚@_ÜmÙ}äw"ÛÓ.ÌfvÔ`3J3F±f¨tø`×39]Dú"À¦òíõ´àÒ=‘išÙ­x''–(§ŒìJÚÑwap¨žÝú1Œ04ÈÝc7à ,»L„Œ%“HˆÅŒ’ ï*#J˜â;„X Deƒ`ûÊR€ó’¸­œÕ°*U1J(¬_Swµ ½çIô$*x¤‹–¦ !hæú»L¹yX2!‰"aü™[ŠÍcˆŽó¦ÑE:Âç ^:ÜÙEæžq›ymÿÅ»ç x8ÉáT@·c ”=>Àvƹ¹†Ã«AŠçˆ?ÁM“È)_1Цެý÷7ñ$EŠCŠˆ ÃYKÁ¶^ù`º{6ƒ( ÛÑÚð> RI÷ÌfaÛ5…Ã@=²8[GÁ@„³Dù=>ÙƒˆçL?€.[F0r­n³›ÓCù,Ûi¡‚;û—ïg§î^2÷VhþÐÈ#<áÚNû…«XçÀ9ª¢åýÌìÚEB2t¬ùÔ#¤@T“üN ÚeÙ¦;ŽŽVKR»$¡¦ [yÆÀl‚¶æ2Q ”ew„‰v°V¤Mv“Ç/hÿi,6ãĸbz¦ÚRH!»·1=Þ h샢yœç‚e'Ý– ®’•1K·Lt‘©ÐzµF‘㨩= &p*òtž9ãÞqº<ɬµ§•Èï:‘‹ x;©§ª¹O‘˜‹m»èüL&w”Ñ÷¾c’»Û·WÂñê4a‘õ„|;$2xH –€KÚç ¨«5ã%ˆZdÖˆÉzÌ @Ê(Ø`~§ï5»‡V@¾‚bn&ÒÇ57¹»ªDá¹RÄ1ËO h5eà LŽ}bBù_óòJ7 gÕë‹m‘fù4…ò²ªc%KÄ.»|ö¡ÍÁ9Û#ˆrïäïH|hñ=½¨ïBßjrÄò „zñž¸%ó½~¬úµŒ!è^ß¶[Âôî+¯¸ÊýrÄ¿™å’Ç‹­ÆEŸÒÈ uP©oö.™C1ŒÈØe9-_1¡6Téî®|z}Ì‹t³M3¶Ûlhûɼø:ú¨6˜?ÏÂÊHöE= kÎè¿ÉöqîsƇH½Ä­o¯·ññ©H´õšüsÿæx®ofØÓ’Va®3¦Í¥¶ËðI5þja=dkÿP"bmR¼A­5¸Ôæ˜Ëæ3t4¯µqt8-fÎ_Ø„ll}ðOŸD?ÏDD¿ï£iK|?ÞFoMëÙê1VÙ·ÆÓ…è[ؘÕ?ÉlV¯bÚÔçê·}Ó¶aà )·éº°Q¥a¾%Φ ë Z廦æM•‰nõÏOÑT?ý›Ý[s™RZõC—$µõEmF\s½«×Ö •FßRýÿ÷ûÖCvúlYB‘m—:½ £¬zàø6혧{u/ÛÎUlƒµ)0Ñãñ¶Ý^Hk»r›ç§Ó½7üѳèÀ»3çœZ-Äz»Ø6Õ¯â|vziæm¬¹Pl•Kíùsce³}[à§;ß«ûÍ×NJ¯ú¨•pó±¢ÈnUæ ŒÎ3²$_)îOŒwcV¬#½þ'ü¤®^4¥=EÔ?w”ßEêcîQÔ÷ó7d–¥’È^XÔ…¶]Ûœƒ+æˆ-…*Ì aÞ·‰Ü'KãWØL†|‹äò¡U/4=°ºäÐí”/|w±#e8o½jÈ/ _'ÂúרT°èÄ‚‚öá„öVÕDeÌ$#?h^UÍ®»Ï`Èô™‘o5ÞouArˆ9†šã«[îõ ·xK{qçŒ>õ¾{S…óÄÞãE¹´¿ûÏ$éô”îÑd œÏ(4LñF&qz;8H¬òtHÃ="Źç‚Ñ'”ðlú¼À`ä!pù,âÈÄ"zYÿ§ì|9IÀƒj³çÑEPo±0"H ¦®¡¡àm`J«W3q’ï°¾kš}dÉc*Žh9rtÄþ“§e˜á’®.{“{ç.ÔÔ‹dG“âJ8´ÛÓ X˲€º>Xõ9j±Ì‹‚[•Òvìt†¡I •døCøŸ£z層Úëô?LYüçå\û}ȧ𾠥b\ü«Ö _FÑ5^WÍJðÞ•’‚þÁÙ$3F@¯Š_+30>^Æào%Üú·¯CÖs<ûb˜8ë"´V\ceä×&¨zt›~?|Šn%ý1«oÿ©½oבdI²³¼áÖŽ–?‘B¬úƒ!•( @\™â¨©Dm¥Rÿ±…•S!øÞ[(P\…\!ÁøèWá$…ðp·Ç1ìÞ¹Ý 3 ÷ÖÍGd„»›û±cçȯøh?üp!º¬ÿó*ÈË^Ö”[ù¾†ÑG«0ÅdV™‚ÈYü§B˜ Ë@OÌ™1S®LÙv©`×'²Œ½*~ú®Mö ÍVbÏèe½¶s½ 7íúÃò IDATþÊ¥®~ÏDtx¡;âmÕŤ~TBWö½W aÝx÷ãBÄÐ:ÂÝIð•„N«ádµŸC«&ïÜV'®%}x!ºqä…ÎÀ?Ømàq!×k<÷u+xYÙ?ˆ.TE„+‘m¹†FFx;Ò/·åÔj¹Èß©‰×™ØF#»ìòl„ßëZ´èÿòþùÆg\}Fe6ý|$º ‰óku ©BÆ\6ºÝóIð_Š<ô“^1󂨯mjuRå 5Ju ÕÍêÚÈál¯FâàqóŸ;%±¡¯H½BÝÃ^\n16ùä`P–?íËŽ@q`IîYt½*‰ɶ œˆmÖÝû€é“·]-DéÈØ(C¢ykÄODnð™¥ýÓ1/†O™È—`˜%À‘M²Õx¬GgÿN›£&Ýä–/½†$KÀÐnB§ô]½>¥Å•¯òé&ÓÕ`›ø%ÂÂ}¸¥$¾ VKÙªPlÔ“èÇõ3‡î´¯ƒx°ÑïaÄ©ƒeï K S ›Âqý4<ˆ|B°~¤´¶K„v6cá[—zÁš‘õ¬ó ¸\Ä;Kæ.8™%’“6ðROóBe8wC釤›Ãz#6¡"J6_Ê«>á&brtÑ<Ù~Ü„›7ÆðÐJ«”ÆŒk6d]:W`ÝQ„Z¤­5—•PT [ÐOKЭ3Á6ê„Ø³‹XB{âNõÀé35ïUãþù½š¨R´Jò/¶™/»ä£VUíw=w¥)AÎÛ¥yGp§)ØÎvw‘Í;@ØÇÖY¢}V›GCϨîÎ6IDzôÍ‹»[½;Fxž žÝ‰W£Ž"Æf«#l¤õR‹ÝsýÅNnMN>².•{&–lJÿªõ¨rZ‡[eO¨P½ÔõD‡T±´4{ªÆ¾õic©M)-•ŸB`‘ÃrS¡ÚÊ¸ÞæR¬Ky‹:‘´Ï!PI ÃYu%{¦Uê)6Aîìh3…|•¢2>»“†×¥Ê¤;âu„’ie´ÙA¬n w;ä=˜| «¶P R{HàûŠwû¥,ÝI꯭õlmIµ‘z×SË^e¨–Xàkêm±_Ñù(2Í¿¼Y»N PÏ#LW¯wc+ø¯+5’Lt^{3‰èõÆÛEÅ„—ÍK;°(p>J^)Lz°ÚËæ-í¼—\=b:‹ÊÐrå­Þs.§¥±G7Üw*õ¡ò®¥e•;éqŸFšˆÞŽõVÜg¢·£ð´üü·ôvlõƒé`Ú¼På%›Ý«keíÀ-peU¨óZ•Ikõ‹Û3®¶{­Tpj]ÒÕ-pinìE®Ìñrí¿.C嬟µêý¯=¤ªSÇܾˆï'Ê•\ÍDþ|+î—X¾jÏx¿nÝê—ïºJZx×O+]ØÕÒ³<¾ËÂ/˜ÛÈl5ZË6ÌURäûS3½Ô%Ÿkéa§w¢³8*•9u2il)­½Šâ_é6ë¹²ÞmŸözkž¥¬×~Ñ4¨Ïm0¬_}Ñ‹­2‰qÅ;ìŸ:k–XŒ®l}™K|íx‡'ªMþ<Ô•¥/ʳÈ\3&-«j¡ÖL™dIVšázÜ K—ƬI”‹K§úEŒÔ6Û_°hÿùÖ!zAÍìw½‹®õªи0k‘|™Ãu}i—÷vT¦Ž|âµÂì þõpiª†Ä%9ä#æEoΆ¨I«\Ï´®/s¼}aÓ¦êeœËš¾2ªüDY­Nk[Åž‹5p•6(Šk½®ë2}–sõ—/ezO-ù‰mßjdÎb3«F`™¹œò•4ÌÑÛ±n;Ê”Ïl€ÕüÄ\žëR[’Öû:éžÁꬃb@NëÎý]L¢òdW7çÆ­`ûÑrsž‹üO b%™ðJÅõAÚV{b{åv½~ѽW‘•—ßx -•51ˆ|sjÛ÷¦!R­Õ\®Ò,­"Q1•ýSe6•±ýÑÄSªðŠjcâ,—F ¢·ce]•ýD÷\ödå>_Kžn)#µ‹Ô?'°ÈÔ Pˈ‰ † ,P¿ñØbÞAAÉ4 YßùšeÿÈ—$þuŠ«Æ—KÆSÿÊi`Š‘Â¯Ä^¿{yâ[&ºO…þÔ¶ðc™À~²¾’'y€ƒçBËZ¡knó$ßåZL…ÊÕþø¡SNÓãùåÆÝÖ/tŸnuz–ÚÕlÇ®bÛ^O÷™èõ Õ ¸°o?¯D¸…Y4Ñýþ‰^¿¨[W.faFÄ¥®¬O‡Ã1®Rs£i/56]™c'vñÏ+uma^)¾ÙrUoÇ;•”v¿‹´Ò•1Yâ¬C·16+SñÒquäÐÇz‚¬TÀ3[ —øÛ'zýÒÞ2­³K9w65‘ž¦ CeÕ+‰YQˆÏbäpž˜†‰ÞObØè$M‚jX÷ˆæ¡¶S¹Ï7°s=·S~[š Ý´Üë„"ùž×'µòëÊ翳¥ærk·}´êösNRQarÒyÝüÍí–ª%Hl¯pØ>üE×Y;¿ž ïÎöíš_oúÄ“Væg€Ä]jJ(­÷jfÀÃå¶Ü½ºÔmñáB÷t«¼Ö ® ÷„¤B$ý~5hA°i.¼I¨óúOGirÉ¡í¥ÑªÒ¦¯üã`ÃVðṌs]õîŽoýŒt¾“ïèãˆVôüN¦…(›‚V"H(°\,ûÏ‚pÿ#TC°ä10x²Ûx|¥ù,Pa—?PýN˜0¢xe€Ÿ…ê“Ë”ñ¯=Îð¨ÄHhÅD|¥}ógI¬˜»fÖŽô­­Á§éUµmÛ–V‡,Œ¼±86R´J>§iØI•P7¡rÏN—1’^ó„©Dµ2ûŽ\Á>#n9ÍrwQF^¼IÁÄ]÷3NÉÞ´¿ýß»¦ë:÷©›{uEÕz$£ÞäÐ]^urY*€Môj ½Ì­c/ú¶^xvô÷&,®Cäò/°y‡áz@ƒ+ØH„üY¤1èÍÇ òV^îDæpOŸpBÉ! ŠAîz-úžÂƒt*Ë­õ*ª'6IHÛ^ß7¨g/7ú™ImÚ2pÑT†sBLí~xþÎî#†î\€Ü”±G¶º$"옣k†Ê.{¸ƒØÂz#@S¯Mõ´M€ ŸwðÅêv¢êŒn ¾=Ï&!KÜ"áPxn©ƒ ™¶‚‚pÀŽ%dWÂGƒæ ÜüTþ¿b aпՒo/þÐ`íyäŘÆ;¨Ÿvi$…TdìùH§[CÞOëýQ×Ã{$ål Òè_ûoÇðiZÔËç?:¾”Ò#ÿÕÃF¦S%Þ.woÁ/¢ÉWÔí'­+ß:OËÓ¹-˜Õ=ߊæý ãFMt8|áOJ †óª‰Î»žÚCi8ð¿¼ñùH¯7>eʇ,e³ÃŽ`Ó™è—[cص~mÕÔžª&D¸·”ëºz<\@žÈ®'Uv„y’¿Iø zg¬Öéœýrš7UÕ+{zƒò⌕·ÕëÕaN­hê˜òw•$Ÿ¥ FWR·>|o¿üœÄì›féúP2ÊëÉ(•p–Íý¾øŒIòÖ±›¯þ+92ä‹ Ã=Áæn´d=¹ ŒNÀut9¾+õJÞr9¢‚1´©Oþҹ倅ÿ9mêÆ”p’N=̇|¹ÆE;‚Ü›Éf$Ø©f»be©+Fœ7b÷ÈK¡5PÈ¥ü´*¤K òeν]šçN„m ‡"³M«gÆ! ?áÝÉffâ—„¬ŒìAV㽟ƒÙY—÷‰„£€¥Š 8í!Q-ó‘ bœ]š8å(ɱä¾^1E-§ž¡=Æ#8ý/ ^ÕèBlxš¶gÙ¡,ή©¦ö v•^— æZ\žãÉŒ¨:Éá ž±zxàðv¾CûÁÛkvl!©‘ÃÜcXDÀ:ùµbëÍá¼QrÛÁNL(-ùIÚšøõFHêùJÃË€žÅp #ž¶á*;³SIx*^ÌÅoæžm  Ýs°ñþoõ>3¹T:ûPˆ¶lŽ=«ÙÊK½O®`¦Ídú)W»êûQ”m6]8À‘£l+’­•erxá3:¥%-ÖG„­„-ÞàŠ+ÎØ‘—Q‘³u|P3¨ãê#rÖCPŒJ:Ò -.¯&{Š ÛkÄ‹†»£ö)¶»1òÂרkuÞÞÿØ]ö•Ї~¼®¶ù[¼nבWùÖC$ªçú8cþö¯²M'°¼œ1m¡óFW%ÝG’^…›ª=Xn±§½i鿪Ԅœ÷ð–<÷–àαéÖ“ï™@ @U nŽ´i×èS×ý¹e÷m¾íÝvSÁ³ žÄâF;£a”ð²“;Gfw; ÄkXªî$ ÀzOè’„iƒ€%³©üÍ.á ¹íŒ•w”¦:'ƒ‘œÑcËx ¶y¥Ü͹d³öö£wŒKâë Ê~ÑT0£)$j¿)²AGÜ–|-ZòßûÛ%ûa!îÚ¹àRž{:ß¿š|äÍ ½•ήÌ.ÆiíAùbØ-¼~eÆô¯ß¶¿­ö¸ ƒÊ¨ä ý*“?ö2*¦¡"¢î¹¶èœ²ƒñ–£¬OÕPdÝ+ÊöN´¨e |iò›Þ$¥BOÏŒ´ê—ÍhÌÜàQtr¥“™ár_ ·êÓ°t¸¸¢·Íî¢ï§r«T…îjâ"$µIÊ[žð'.Àpnxƒì3ãçw›V/&<Ñ}Z/MÓ¯¾¾5»0ÍSbj„Ä¥-/_AÁx;ÖÞ©f.Ç++Ñ/ÿ‰jpiã !9H\fíªÿX—™Ð~ȪcÉ]éÊ7žÌ#{‘·è½HŽVå>Dë4¹&ÖóqŸ‰ž›¦—š­ZJeö¾Kmª ¯&­ÑgZÕÿêݘD‹›^ˆ¯L7¤Èdmêšäp½6òñ^½K“É©÷ªüñÔÔA›Ú»çOëÔ; :LÑÕ|‘bÓµlÑNœ¤Ê”|#¿É÷܉j/W ~Y•vO$4…I*±±%¢ôåU]‘?äµYÂíBQw½…‘æë­æò÷³ÜL§Uˆ¯þðUëR4‡qD6ÔÒ$”Ë%"RZɺì‰Ðñ«É2-›Å½R²Ž Y})Çyûï¨2ùÊé°2Æ·“Oˆ…ÃÃJmetRDk´‡è«¨íeÍF!§[Ñ> j+aãÌ‹A³¥Ç¼nGº~Åžö´" -¦6‰#­`»ŒÄ¼Z©è¦UÚÃÎ߆(³îò³¥l›`•Þ*òle,?ª•ñ Å ùþÉÂ8^‰B@Ég!9¯–'éRDÅ6êvè ¶-¡Ï=¢#tŸòöˆxšH&7¬â²GÂJzÔM]óXª5w›ÁñVe™&8x2}žm˜.ÔIj;Þ]I]%àR–zœ>š»¤Ú +6yÃ}Ñ>”¶;1êSp7i¼¯Žæq•éÓ6*¨p¶¯IEý9àå9<òÓåÕUH)æeÊ}êžÛŸ¬½K.øc•©˜P£Oýó’1”„¡Q{â*ãÜÉì±V±ïŒZD›Z\…ÍJ Ê_ÞÁýiR «9N©/Uæ# q,x½УƻH™ C>|)Ú0W¦ãžÙ5LÂÊa€ªpQ{ÍÇkÒ¨²€4/W7ümõºå_ývôÚ­€žÛÅc¢ú’TôæMÕ0Õ·#‹ìú™YŠ˜¯¨¿÷~?òAE«;Tuœj8•Kü¬Æ.%ÎÁ“‡’2Blö¤ñ±æCvmž; c¼6!¥ŸT_¯¨Ï_ŠÊ;Ÿqg†å.ãíHÊua*ž 4›VÈîõF\ºþD÷D‡ÃmWÕõFø†T—œë:‰¦ýÝç†éU/Á”;<³R‚ªö&¾Hö]£åÙe`ÚÎK0b¡›Vê¹àœ|ð”@®ÉmÍ<¯Ï÷Ú,³ €y2øº>qh–Ûg^ æÜÆ?ܾÚoCÞLž@§fÖ¡-lþv×e'ï8{m™ìt¤ìK{}¦Þ6žûùíb.|ç€]ú¤6ƒðÙÈéÕÕºŸ u&e´ ÌæÐz2ÇZQE` yeˆ†kÚùñH‰ötˆÙ_m·Œ>Êèyƒ§ŸL÷OF.’BÖ`T2gÔ3–ÔݬèÎ{MÁpTx"8œYê#<›*²‰>ë'$8»Ø¾+ÖLºÉŒËjPWNƒóöÀÄä17tTÙ(óÂvM¯w~k–ê3Ú_{«dÇîÝû;¯‡‹uÿªO?|_o)ÂS„Õͬ©b#ƒø#*! ÇK;.Ô¢n¿iŒü¶6~mïù2š±„ÒŽ€­ì¼tr¤uë”á,7ï÷£ú´Úå÷½m¿2jyÙk º„¬Z‹#Î$<¿yï­ [åÿëR[ùïòTD­e„OB~ˆ¯ÏvŠ’Ü„òùŒæðb@¶«?õ•÷û‘>—î:—½yy˹,Ú žz×|5Œp ôeö°f}«§@»:7Á;;ïV¥çcù‡i½Q?›=ØýõPRW¨6PßÙ™€Uû—ÃVs¨šä:Põïì•“n+T<ÛsÙ.ï6;·áÊi|é+§¢,ž&?¦ˆY¶.VÅžß«€ÊéŠã,Kœjïã#‰ûQ4`Q™2¥M°öÀ‘h™jž^êf²>¹BĸjϼÃáV($É=]Ô™²tzÁ}öO}˜?V mb9ŒÄΉoýy+´Xeުû™‹Jù~1•”Èè6Æ´ülv³îЯíäån\D )"!<{'c‡{•ôkÛåpâqÛ]ÇPÁˆp?DZD†¶mÖ—eOLv'WrÉsL·Ý”éAõ³ì3nàŸÙfÙÂ’{Ÿã -O­Ž`ë[¬òû¬Éh;’^$(ùcyŒJá©Æ OBòñFÎáMrsë‚Ü–^ÿ’SÝ©›5Ž^O[§q8™6²ÙpÞLçœî§öÇ!KgÌSÅŒ¤är"p+±ÇHL.BDËxUDÐínÉ×ñÇz€÷0÷ºƒnfšA†ýH"ìðñM#7çÆFA.mïÞê¯lèî°Ÿ<í_ó•øXsÙ}.ä¸ zkY—ÏÆpÆ%(è &^–ß²šäÚÝz[‘g—”ÙnDx1ò†lµLH˜ã½…b6[®Ýö/Ri’߇ŒåÁ(kî"ɦ½Ž=9ZìO+a¤^wƒ›{…sý•³ã¾M„©ƒä›@i±J§dè¨BNpf`-.GPöëû“ͽ ÔZÇÝ“±úKáˆSƦ³â×$¿ž÷˜@í®4Ð7M~à¨ôÀAv/ÿ±–…Nt¿ÿ{Ü!s#=6bé{¹f‡2Ü“œlÖèÁ’¿ñr€tÍFQ·…¤`9‘kæþ–-õ[è3"Ø(Èm>`kÇçE žBbWÜÈøþRë!rÖ1>2f ›\¿7Í0)4TX]±dˆØ‹m³k P—¼!8‚sXÇ}õJƒzòœt W@¬äu×&í Ëäôä"³»%'ÂgòússWFoÅ!Ë[± " ¯j™î^-Ê‚«bßàû¬Š´1ƒ½ Eä§oÓ@ɉÙy^ŽëÍfùŒeÞ—C¹¥Ø’ä„ÊØ¯NLHýw‹Ç°îEf%vt$dM4T½‡­FÞÒÉFI>žw!“ãµÜ‘ ×™~ÞÏÇÆtónz(ceß`ÍÃî‘ê êö"3§¾Z¿JHp¤,òZ_Z¯‘î¸ÍˆZdÈ9Š“Sr.Æ.’<œ8ƒ ­/ITfØ6¹9š‰IDATôë½âM3öK2¶Ž¸Êy|êÉù$Wy¨WZKne΂‡ê¬Ðñ}' ¿¬éЖ ølL Ê*ì¹ZrÚ(½z­bÁ°ºÌ P0Va•o–tcàwH¥iglç‰>–EF’„Úõ›‚áJ··ÄÕÏOp¶Œ†úçËq ª]u»¡„š±Þì°¹²Yv3úO}ïvˆìÍ®„À‚JÞnNÁƒ¨²wÐ ±„²ÎŒìR“sÓlî1=˜ ¶»x¯çÜØåmËþJY.kÌ;ë‹”14G$ªn ¯dçh•œŽãÚö¦Š¦Ý?©¤ë§(ÄŠíKö}&g—1AJ;Êß¾k׎Ûû'Hû`;ª;ÐÚ2{1ZAfâcŒ³CƉ@;õ†5 wjÉä•è{D‘y$„ñë?þ®-`­¯æÞ-GðO¼š§¡\ø@)K︳¯ä[ñú5ûû¾äb€Z©/J-Ñ|@ðá/Uóúäjö2%šAášœÈt€äìên“ñç7üÍÔýV}ý¯õd륷!ã wWjWÕì²!6޼Ygzˆœ³õñHä–úÈ’Å3ªz–Z©WÔ‡êÆÐlÌS³Å ¦KkY%LÓ€&® [ϸÚ×/l‹³Z§RQiâíÖKéU¦ Á:Ëe“<¨1 õ+¤D¤Eá¥j-†§ 8ÑcåqU_ý-Wàn}³  Ø…ÿI ò’£4ARÃÓÚPòNޓ˜Ò;“ a ÕMÖÖt®¥TDŒžŠ(ƒòƒÁúíkQmÔgê uä´Á=™±þ΄ H MÕ±]­Çù\®üð$Ü’Tž;nJá·J-,÷¡®M:¤>…U¨bQÁ©·W ïIèNµ´ý¡õG„òËÏÇò±«cÓ*œZ>ücU£8Ü–R.EÑõùS`JŒ£çd­”Ú†ÙTt¤Ú¤~¡ÃáË"NQܤ”¤K³›ßI.Æ!t^š$•Ðk6Ùå>ˆÎ«Å‹³»=±9þËM-Sj€U ˆòx©]F¸0ª?¯ÂQä"õ)7!ŒUå¹ ˜ ÕïÓ:ùIqj_ĭ˪äDŸVQ˜U–EÈénå^›`Û᲎çç£Ø|­ Èå:ÏͤmycH?ß„VˆÔ× m´ÞwåÌ‚H(Šˆ*šõcÁSü®¬0¨1®ÚNŽȸÑ׬雥¯^>a̧í[·ÉÛÜÅÑÇD†YW˜ е$ò°2‚²3š{›~äYD‘ðÈÁÄŠìX­KÚŽ2Î|ý²Š^â}$PAë4îT³öçÉûYl»Ã6š²Ñéõ,s·Ê’5Òá¼1³úÌ,×0~2جÀvÀÙaaÀßâ@©Ø!mì_ ºXNf®Nø •J™(¡›)udÜÝÒ8»}d¥a½wh›ª4š´M¸ØüR¯x©’žãâ 󰿤™«Çò1ä\x,.s`'•~}Ñ7úpX@ª-Ž'ɱQ0Mø æ?oØ»ð}tmîô yFÌD¥bw“”zg&BDÁþSæ¬ùÊáÅ’oCõÅ7êÜkëØK’ß9„ÿ‚Zw *^{’ à™â™ÈÙÉU®ÁgǬ5xð¬çâL¨ž¡ó«!dB]G’z¯í™ò‚Pê•0t ù~s¯Á«} ™të‹çHâJçÉÝjõü0 é.9f›+3ž‹3$ß*è%ú¾ñÞ´å@kaÕ®Yz¸ ÂÖ»WÏä6+l:ÿÒyßkÇUÞ=Ù‚Q!ö4z8Á<*. òÙ-vD¹ é†u!È¢ž1`â¡Ó–B}=7µ¦/Àfê½Ð”–/šDXÀ¶pš6#»·Q)Ùt%¤†º†h²È7ÂÐÛüËôÀ-mõ>'WÀ‰½(v„k{Ù¿æn?–µ¹±2ZIŸä°`¦D ð¹5æc±àì`w©G$±šfOÜ 7‘˜´’A’¶º_øœ3âAÜØº xtIû2”_ØÃÊž˜Ó¬9Å–×™zãH^´„ï­AæHŸÊ¯¬ÕÔÅ+wïRÍqV¼7é'ÅÿU\ü•Y©>t^¬½u pQåiÉ­“ÝJøÄÜùž€Ÿa!|'æ_wi&‡ËXÒ¼ƒû±ZÙ¶Áùü‰žå&ÌÚS´²·U;ÇáBôùKù×òù•Qݬ~?Ö_ú½¸îŠGö|¸Ð©ñ˜›µ®¯·z‹òFoåðq8Üê·,Wh»CýL÷Ô|£En»Ú\ûäð+?|YdÏrNÍÁOØ!®.Ž|Î.ëQõý+ÐY ÛrqÖ—´Zœ7‹Â©Ýùö²·£0¬llé+È»_Ê9µ»¤&QqždŸP~é»1¼R5Þ,mždÚâ(=3çhö¼ª×sMżq5‹Ïaûðõ)LëËÎmÖð.‹’eÏl\Õ¡»þ?Ï…õVóQÚ®<Úš .›}ŸÔõÖUgHaÍ_öPváúÉ[³ôÇ©Iu5>ô/z ­ëšv—'a:n3%‘ìh¡í·æEû#›7¶tW½J^׿ïÞÒ/¼egmÍÜy þ]g×äd¯$xâæ¤/T³Ôµ†ôÔ†°I½k/—¸° *KËöç'ñëÚªšÙjéÚYÖâ‰èçã2Áî‰èó—ÅG¼ÎX•èC¤Ì³óW¶ú¬ÖºôóQdÞ(özKí Ñë¨/],Õ«·¼ò]Œä2žW«Öz“—O«wöá)kóò¼¬uúTÖGÑ‚sAÎîk†ký7Wãm :¡Êg¾³¡{¦äâ±’Ìvl`´¯fke œX£ÛµµC)SÏ‘'Ö²¦6Ö©yòB÷Òx”ô,É£zìžõˆªïÒ[«t¦çð²fܳ{bM8‰%–ߥ!ï½$BÝô¶îªWrrWÝÔXFÔ»ì“>É,¿½|ûU.t¯7‘tÕúŸšñ7Æ–@?Võžà뱂LJ‚újr BãEµÁ”gGF]±êA¤ÑUDök~ƒhê.ÂgÿŒEP³<Ê–”TÑØ{jPæÙ-mÎcž~Ž>š3W‘NãŽ+ÓÝjV§Öe…Ô¼‡å‘µ´“^Ò•EßK.ŸEÜí*7—š±u»&\gj[àyq\G„H“Éá¬ã·äjz3K8t$·Û ÃŒÒäЃúqãÚòÆ…‚¨}Z/&õ<¼¥•+C’ßx£ 8Žôô"BL}hiäÙHJTðð/þå¿ù×ÿîßÿ·ÿþ¿ÿïÿùŸÿüŸý?ýéOñ}Ä_ýõßüöw¿ÿ‡¿ÿ»ÿú_ÒOq;"""""~ˆˆŒ+"""""âÛÅoÔ¿‡¸)ßCÜï÷^ƪ™‹è§õÿùÿøË_æ-›røµ/à›¿…~¢?×ÿèÎÿõ±¿üZRÿõºæ±ùÑfÉæ_?Ú,ùÝ_ðCüò2c.PÁˆˆˆˆˆ0"cEDDDDDÆŠˆˆˆˆˆˆŒ+""""""2VDDDDDDd¬ˆˆˆˆˆÈX‘±"""""""cEDDDDDÆŠˆˆˆˆˆˆŒ+"""""2VDDDDDDd¬ˆˆˆˆˆˆÈX‘±"""""""cEDDDDDÆŠˆˆˆˆˆø>ã7ÎßïDÿ/îÎw&úsÜ…xH_Ër+Þwùlî÷^ÆRÿ9""""b0‡Ã¯¸„~Ãoà£Æß²ùÊÎ Œˆˆˆˆø1"2VDDDÄ·‰_£ú†ßþÀG¿eó•DÆŠˆˆˆˆˆ3VDDDDDDd¬ˆˆˆˆˆÈX‘±""""""ßÄ-ˆˆˆˆøAö.‡åþ±‰‹ð‹øö]Ÿ+"""â‡ÌUýöÚÎ ¿èoßü FDDDüxq¿ßÅö¯oõÕ{?'ÎXßà°õ•çőω3VDDDDį–®êy✑±"""""¾—tµ+"cEDDDDü:éjä\+""""âÇ‹`^DDDDü ^ ú‹õcÕïzàÛá[:Ÿ+"""âNQ›ùË|ïÃßßýX?vDÆŠˆˆˆˆˆŒ+"""""2VDDDDDÄ÷+øÛßýþ?ÿ/ú«¿þ›¸)ßIüöw¿Ký‡ˆˆˆˆˆˆïñŒõÿwq/"""""¾ç8Üï÷çõoãFDDDDD|Ïñù?þ‡ÿÍÂUܽ ØIEND®B`‚saods9/ds9/doc/user/binning/filterimg.png000644 000765 000000 00000132270 11332353404 020725 0ustar00joyewheel000000 000000 ‰PNG  IHDRB" F;¹bKGDÿÿÿ ½§“ pHYs  šœtIMEÚ2úÚB IDATxÚì½y´]Wy'¸ï}£ž¦÷4<Ù²‘m°G d38%ØqÒ¬tªÒ¤b¢8I…N­t…^‰«+¤BBUõŠQwV*áá$T*+Ðp*PÐ`YÂàc lYž$KzšgþãÚGGgØçÛß´÷¹÷û–<Ý{Ï9ûì᛿ß×˲Ì9wÓí?匌ŒŒŒŒºC~ö£Î¹ñ {Çï¶12222êÝtûO=øÙön¼íï¸óÝ/ì9`3bddddÔ!zæ©'v<¼m|ðãÇŽÚŒuŽLŒ4Ü¿÷øá‡ÜÔÒËW®Š{m;qüXñÓçùò+VöV®\yêÔ©ï˜\µáÊÚ›Ù÷üÌÇŸÚwò¢×n²­`dddÔ9:~ìÈñî¾ê*ø%?òˆsnjz&ÖµõbÌõzÅO×^vӱ羾ùoûÄ'?µ}ÿî™ÙùÒ•'½hæð3ûܺËo*]nddddÔ 1väàÕW_tÉÕW_ýð#L-YëÚz1Ö;WMLM™½ìÏ?ú—o|ýÍW^qù÷ïûÂé¥+Ç'§‹¿éïùÎée‡g6¬Z¶Ò¶‚‘‘‘Q©×ëõÂí^ô¯mcýÒKçÖ=ûä‹Û¶=¸víšË.¾àëßݺ8÷Òõûw|ëªóV<ðÄÞ ¯ºÎöÁ€~ò¶ßvëkî{àÑüíý6FFFc}”8é¿ü_„kAÖØ€Ö^rÍãßúÂÛûýþʱ㻷cþÒëswïx圻ÿÛÛ7Üð#­ãX¿fåOÿèÍ—m˜Ÿ[1휻í–+ï¼ãfçÜöÏ=vüªK7Üù£·¬_½láÓæá¾]Ï=¼ɲÙt䨀2ç²:Í`ÙÌÔ¯ÿìK—LþÝ—¾ÖsÙí·Þ8?;s÷~¹1;JFFF‘¤Ò¹çBƒsëå¯}}ëµø—oÿÿø‰Áß¿ûKÿ¤éÚ&k¬^O­»ö‡wÿãßNŒ¹~¿·gû×úkçOž>:sÑM“K–µ}õÊ¥kç–?qògÞûï²^|bjÅҩÇϬº`||Ê9÷Æë.uÎ=ñä3—^|Á½áuußËW¯_¶dê'øçܽÿÜG>þ¹ñÉé׿îÊ÷ýò?ÿ¡›¯ùôÜ}ôìP³3gþì·6;çþvëÛn½vzrâo¾ø­ï?»ççþÉëW¯\úÀÃOþ§¿ùÊ™3™sî_ýä›/}Åüò™©§Noß¹ûÏÿîÁgv-:ç.Û0ÿso{ýÚ¹eßzâÙ‡Ž¾åÆËÿ~Ûc÷~úçÜüÜòwÞ~㕯›{üéÝþ™m;w-–^ðÕÍßõ¶×¯™}éò¢åûS·ßô†×\²|fúèñ“Ïì^üý¿úÂåÖ-]2ùôs»ÿÏ?üÏK–­|ÝÕ—mX¿öUk¦·ï9Õs–#cddEŒq:â_üzõÇýGp;öÚ»?ôÉßùŸß6^ùßù K×6‰±Æ×˜Y±jéÅ7ß±íÈñÓÙØôLÿÄîþy®ÛyÕCGŽ;qrzrâý¿z×ãÏí|ǮǞ|~fznll̹ÞÄøØMW_äœûÐG?ù[¿ò3ëÖÌ]zÁêŽfW\tÞäÄx–eýw_\6·vÙìÚï>ô¹Ý‹ç¯½öUë?óàö*ÏÇ\ó½gv]å%ï¼í†CGŽ÷©çç–/yÓu¯Úúµ‡¾½c¿ëõÖÌ-ûâƒßÚ½wñµW\rýÕ—ýòO¼é½[>¶bÅò÷¼ó-Ë–L}ë±ï>pðÍ7]ëœ;¼ÿÅÅŸ=ÿ‚‹~ãgo_µbæ‹_}xÏÞ}oÿá7üÚ?ôkÿ×ÇŽŸ>ûì%S¿ò?½eé’©‡¾ûä±Ã‡Þ|ÃÙ¬›k/]Ç®zêÙÝûÌ—ÎL½öªKï}îøºYçÜêÙå®_·fý%+—/uÎ]úŠu=ùÈÒås&ÈŒŒŒ"Yc}ÔU½Úk¯¸þMM’Ïí¿þƒO½ÿÝ?æœ+ɰâ ÃR<ŠtæÈÞ3™;žM¾rí²ÉÉɉÓÐ×>y:ûƒ¿þÒOßqÃM¯yõM¯qιöìßò—ÿý¹¸^ﵯ¾péôäâCß|tû×}ên¸bÓ-×-|êÁå3ÓιcÇO>r|ÝÚ‹ûýñ±‰±ÅÃÇÎ_ëV®XzìÈÁêƒîù“¿¾ÿßùð¿ï…ç­ùÌøãÿòé÷þÂOÞ~ëõ¯˜_±õ¡'—­\óÛòÙ§·?´lÙòxð;ùÝW­Ÿ_åŽí¹î†+–-™zqßþ_ýON/[ºôú«_50ò^{ù…«VÌ<¹ó…-òW“K–m¸àü®~ÕµV>øÄ¾þøÄà¡×]váÒ%S{¼çýÿqlbêïýÙ×]ùÊÁWS郇?³kï ‹G>ú™û=r¢ÿÔã;ž¿lÃyùÿ›snç[2=uòø·|±“ŒŒŒŒÈr¬ïú=ÄU½^¿þÚ¦»åŸ7_û¯ÿèÓïÿ?zŽ »ñÖšçÖŠ1Oá×çž8µ÷{'—̯˜·ÛõÆVÑ ûÏzW­œqÎ]|áºè·òÏ[3{ðkO¬XsÞÀ¸rùŒsîégw¹~õú‹ŸÛ{äu/ÿò[Ûw~í‘ï_åÅ×\~±sn×Þÿþ#Ÿ~~ßÑßYøìUçͬŸŸ{nמ7Üpõo¸fñÀÁìÌ™3.³Ú;##£8Ögl¬énÇ`㵿ý wäÿõ}àÿøãÏÔ>·ÁkŸÇî;¸}ë‘Ó㯼á­GìÙûíûúî´snñ±/N-ûÔÌrÿ«NŒ]óÊó¿îNï;|èK?»zíw~êG߸léô¾]Ï\tÙ•×]vsîŽ7o¼ãÍ¿_:3ýºË/øÎ÷Ÿ=qòÔäÄø¿õ÷ýãÓý©þk.]Þêåι¯~ë±±±š„ˆÓ§OOM &åÔéÓSÓý—ÓO²ìÌ_sÉ­¯}Õ³»ö~àC=|äèïýÆ»ûý~¯×Û»ÿsî‚óÖNNO»^Ãykòî;pÔ9·ãÙ~ÿÞÿš¸wñàéS'³ìLlÜ9wàð1çÜÚU³ãS=×_·úlýÜÉSgîùËÏŸØÿÂú5+ÿÙþào¸zã«Ïÿäýß›úêã/œzø©e3“¿tç;œs_ø‰ÞØ„ë5.‘‘‘‘°C9ûõNŦ»ãT¬»ößþüí¹6§ýö/ÜñoþÓg«Ïmcu>sêäáïÝïz½õ¯½mbjfbíÌéËo=ú½/OMMNLLÚ¾uêÚ·úßrbüù§·>vóÎ]‹Yæ.»psî›nÏΜ¾éÕ¯ë9zìy)iþâ Ö]pÞš~ãõ÷üÅßÿÕßí§ï¸yóOÜ~ëÍ/œvýK/\ãœûÜ—¾úèö«×_RFêõ ‰çHìÁ OŸ>=91ùæ·ÞÔï¿4æo<¶ãàáckW­ü½_»ëè)wå%ëòK¾þØÓ{÷Ú°~ݽåõÏì94·béu—oøã}þГ/¸ì¥>ôýç=~Áyk~ùŸÿ؉ÞÔë.¿0¿üšW­û­¯yô{;;qáùëœsû:°ï…ßý_7/j'‘ÅØ9©¿õs·5ýò7ÿäsç^U_û°Æj®ÍŸ;ð%þæŸ|nðÉ¿ýùÛ«Ïmc5>ºók–OîZñº/WA­zÅå»ìݰüäÄÄD–eO?õÍ•—\ï™ 'Ï|ê+_zþŠ ç¯›šœØ³xà¾òùÉÏO¯Xý†×\âœûä?lýãÿò™FÖµ—_ôïÞ»yãuWŒÿÙ§þþ«O<ýôη½ù†K/Z?6Ößñì®OáÿÝ—–,[91µÄ5¥Côjÿt_ùæ÷^}áÜMW¿ò_m~ǧ¾ôÍcÇONOM8çŽ?ñÁþ·ŸýnzÕ†ó¿úÐã÷}ù·¿éu§ÏœqÎ;qêw>ûãozõ×^öÓÓû~tûÓO<ñDobÅØøÄ`ºŽ?õÁÿüß~掛n{Ó oúËßxìÖë¯õ-›ŠF\õÚÕø ïµ¹ <å7ÿô¾ßºë­õÏ-ÝxÐoìû;w•¾8òÂMïÿ掃ë¯ùÁâò3gNíÜvÃNŸ>½ÿÀÇö/]:±çÍÏœ9ýÂS>yòÔ©ãÙ™¬?6¶dÙì²Uk''¦_Øñ؉cG–®\½|Õü  õñ£‡_xºçzë^yUϹCû_<~øÀÉãÇ3—O.Y1·tŪ±ñÉÉ©é§yð̙ӳk×/_}þÓßùšsní+._ºbvçw¿yêäñÙù W¬>oÏ3ß;|`ïÌŠU«ÎÛpúÔÉ=Ï=yâØ‘~lfÅÜáÅ=YvfÍ…¯Z½zþÙß?z`ï©S'ï¹û—®»â’ýÅ'?ýåo¯:oÃøÄäâ®GõÕ瀿?tÿß7ýøš×ÿðK"íáGW®9OâÚügµ®Í¿Ý·kçÙ~c%©xâàž‹fwÇÞuW½ÙõϱàzccgÖ^säÄâ—^rðàÁìû;¾wxÿTs r¿?>;á™3§z®×ë ¬¤ñ‰©ñÉékÎï÷ÇúcããSSÓιɩ™~lrzƹlzfÅØøÄñ™½^¿?ÖØW““Óc“Sι•óNN/éõú®×›¿pzéŠÁ[¬œ¿`|l¢76æœ[¾ê¼%+æÆ'¦œëMÏ,Ÿ]s빚^ºb|bÒ¹ÞOßqcÏÝðäÓÏ_zÑy×]qñ¡#Gÿá+_Ÿ˜q®×ë­\{Áä’ýYÏõ{c½^/sÙØàæg­ã±ÙµLÎ,›èõûY–-?}jl|Â97¹dÙÜÚ úýñÞ˃ŸŸœ\¹úü3gNn2199>i2ÌÈÈ(–1V¶o®}Ã[!WÕ¦i°_[úÐ_þ|·^ÜñØ‘}ÓnŸ˜ªÞwz銇öÙùâCÇŽ;yòÄÁ“G¦—ßÐ+¨Ç'&‹—,›[S½Ï³/xËk/¾ùª‹Ž?ñàCOüá_üÍâÁÃk.<¿×ï÷z½±ñ‰e³küK215½rjºö«å•tÎ-­ë—cdddKŽaZ”4;5®-}6p*>õÜÞ‘]Ä];;|`ñÌéSý~|jÉŠUóSK¦—Íö-Xedd4ìtâØ‘£‡ö—ü{~zøáG—,[99=ëÚü“=Ï=yÖ©8Êù+VŸ?½te||ÓŸ^²¬ß·¼A##£á§Aû®‡~~É’e+Wź¶DíåÏCOK–Ï.Y>k»ÙÈÈhD%Ù̲©™eݺ¶FŒ ¬±#öÙŠ%N3+æ*Ö˜sGì»÷}ï²Ù12222JœÞõ¾{sIf ####£.Ñ–-[Šÿ¯þbqqѦÉÈÈÈÈ(AZXX(}bÖ˜‘‘‘‘Q‡ÉĘ‘‘‘‘‘‰1######cFFFFFF&ÆŒŒŒŒŒLŒ™32222221fdddddTCã¡ÌÍÍÕ~¾oß¾ÁWûö±3VŸUºyþÄâ£)è^[ã«Ñß=.5 wÔn¶èóPUèxØ |£ =šqÓJ°ôߨOâÒs½,îB…¹­}ÿ¹,£Ç]¦ÉJ Ï’O,Ö™”èò onnnnnnß¾}¼®ÕZRaÕOgTчD™œD6|í|ò.}¾™Õ+qfAŒµŠSQ#¦ÉfÊ·zs î_ë±öšL.»ÐóÖÕ—->±øyéoÍ¥©:^%ºõ½ ³!mùg›e-J3Œ~4û’'§i·(°u>…äJ‘eÕ¾g=v„MÅu2A\k@ê‹îƒê”±3Ê&Cz‹K¼Z¨W;’¢UTú[ü%…€×y/ÿlPXOíƒf[瘄>ZbKø'§ö‰þRfÌÃüL£ié‰ÜÜÿv¸Mqã™'nqljˠæi­>®éDñ¢T= , cí<§ãhÕéX†ªæÓGK2e]*qïS¨¦z¹6USœ²ôì“ß*Y›|ž%½­i4¥r‹+ã’1ʼ ÖY'ôjˆwGœ=…¥I$DeŸø_¼uªQÅ[“6Ú›J/=×1DÌ›_Ü*cל#± ÆS>‰Øi¾Z“§{È–&5S¬8žV3²FÃ*û«.ФìéÚ8ãÒmé\¢ ¶Pþ.µâÊ#n¹„q r¡¯pì…´09=xðНVо¤Æ|•—fXe˜ÜÄRÖ¢LyY«ÃKÓíÊ|ú'¹É™ýd5Í*nªÇ…öA•ųˆ«\H”’Ðüj`²¯Æ5’Ò¨b-Že\û jëRjÏükÄ8æÚ[yn®¼ý“S{ã4ÈÓä˜W'Ð?{±æò\œ лñ¶w¾ãÎw?½kÿ‘ûî}ß»œu6222³»kØõÙƒïA÷ç¯/®šY1·{çöo30*##£8lkh’>R£L&ÆŒŒŒ"N¾œ²£@ã¶ŒŒŒ"J2#›C⋘5fddddÔa21fdddddbÌÈÈÈÈÈÈĘ‘‘‘‘‘‘‰1#####cFFFFFF&ÆŒŒŒŒŒŒä¨¦nlõadddddÔ=klË–-6)FFFFFc&ÃŒŒŒŒŒºEe§âæÍ›mRŒŒŒŒŒ’¥ÙÙÙw½ïÞzkÌÈÈÈÈȨÛÖ˜#Y²Œ‘QçÈ×ßÒAs[47‹ã42A‚Zcæs5DüŽ&®9‡8ôJž+v×Ú:)Z9pAHmëü‡m\~‹ª$³ƒfdbŒÄˆÍãœd™Å z§Ðç¿ÖàóÈ*ÿ­û$7îM’™·9F\†!ÜSúLJNj†Þ¹I<øïÃ;~Êü‹juÅ×´´£§¾Ä³CEŸ4^;ŒwQ4õ• ‘{~zâü££˜¦ űƊj²Eÿü”bŽ^!yä5=ƒÚÒþÀg uMƒÔÈhÔÈ0ŒŒŒŒ†Ú32’£ÚxUúvF²i–621fd¤JóŒ%>`ó4™3â'ƒÇ622221Öa2ll####c]¥-[¶Ø$uˆj;Z™3SÌÈȨTÛÑÊÈĘ ##£ÔÉÓÑÊ(e²º1#####cFFFFFF1(¸ß˜óöVwXˆñ¡ï™ÔÔ¼¸v†¶¹¶¿ytЇ®Òa¹[ƒ7222k¬†¿»ñ7hM3\dàü·^‚hB=4ƒ729ÊŸŒˆ5VR½K(àMztN2š­ÿªÆMÓܺ¶>Ñ­FèØZ/IyðFF#M=ç2çzÖak¬•‘ÕêÂpõÝœ©s”B‡ÃR'­¦6ÇÕq&8x####†„{JÏ$[€Zã&t~‚¬Ø¢Ü*Žªvv⃯¶Ý222ª1Ȇ×s ucÆb‚lDŒGÎ[Ûø*µÁ{ÌG###³ÆDX¡‘´®Ð-†ÞéÁuÆ ^jU³0œ7Ùº‰UUÖôá(dp#¦:ÿÕìöb– ófR§·ÕäJdðæQ42’£­nãˆ1לÛô¹'䟦õVœ–ê$øç¾dA+2"ƒ722j’a·¸m*Ô©XË Z5hÿUÀχ؃ÿ89M‰ï¡†&©ÁC(bWd˜30*###£a¥,sYvÎ?k­®Ò#f1f¾###£QnuÕš_mÌb̨ŒŒŒŒÒ¡^¯Þ ªN¸­ß˜8-,,Ø$•)S€8±\”ÕÈ´[$$§‰±!#kÄgdd‡ãgÎõz=ç²lð5O¬ÍHÌæ]oW²²ÙĘ.mÙ²Å&ÁC›7o¶I02b¤XzÙU¸Íó›—­±šß eX$21f¦XLZ\\´I02b§pÊ^¶ÉzçšI¹èò‡•¾J¹ŒÌĘqê8´°°`2ÞÈHH€-6Ï_å¿H¾XducFFFF]¥­n£'Õ°×;›ˆØ+ÄÅJ’‰]Lš3222iÉüv`å‘°Ò…Ù¼sÎÝ’mC<%e¡,ƪЫ0VÃiM–æ d³ad” DŽGräR§Õ ˜Ó»^T½—ÿ7«¿O“H*h`£®Ë0Wé¸mdd”•2së*÷z¤W5XuŽø)&Ø÷êïÓtó®À*¶ˆ1O—‚_ü°ú·ÙFFFFÊcWƒÿZ†BAFXÊ–ÒC(øfA.3jY5Î2€ ç—)[fH1f؉FFFF¢ÖX­ *ýÓSõ•ÿoõn¹ Ã^©YfÐîÏÕâ܃æQ4222‚Ȇڨ˜/ V±´^*‚ÎÊwóCx´^]­+‰Ÿ’‡0ÔŒ3cÎÈÈÈ$V­l€¤uø%Jí‡7g]íÃÂ#ÆZ»<{„ŸÙdFFFFM«öÛ Ö_Q„°«”|øØX.ª)ù'Õ¶ô¹3kLl挗g*VU….#±Š8‡M?K0׊©Xå}UÕjÀ+ÉŒŒŒR&®|+¢Gì :gæÿ[®fƒfó®·k[WæÍÊŸŒŒŒ"ÄS×䊬E¢*ʰ³b²Wó ›çkRHªµö)&ÆŒŒŒŒŒÎ[MR­IDÕ&ú%M5ùØZŒ‚&lbÌÈÈÈhøM±¢„(uù£bÙ|ÙN*YW£@ÖoLœlŒŒŒü¦XUVA  Þ.çν¼ ÏÌ ©­•É™N²æFFFU ì€$k¾¶& å‘…ÕkkoRë½L ØÄ˜,mÙ²Å&ÁC›7o6CÙh4-°’\i’7US)4ó~«Ûè °y—2øLŒ™)fÔH‹‹‹¶@¶@Fµ¥(É<"ªÕ’»ÅmËL·ô†&ÆŒ¤K ‰ˆ[ Ähˆ©Uü´þ²jÕÝ<¨Y²d™ŠFCBÖÊΨ‹&\Úy*·j„@áâ?=0"µ&RFfbÌhHd˜µ²3Js­< µrISÍà¨Þ XCæËþ‡0ˆÒ'ûöí+¡ó•ºB—~l{2ÃʼnªTz¥zaÓœû—¦éZø³Z‡­@:Ï%.Yíañ¯šçžžWn:˜v*WÀœ‹â/ý~¿lÞõvÕ—£ëÒjïVºóàVÀ1§ky¬Ôž%ëÆä†U-¡µMvíàþ´Ú¥ñô">+nwï\µJsÉj'²Ðž[µ¾¯§³’¬éP–¹,s7gÛ´ºþJb)ÿªèôÃsÓFŠw¨ <¿•VkÞ½üV Çc@µtX1Ô‹qÆL­¤oÿþç¶^åWꃖ,hØÑÕvy Mÿä·.™çY­KVí/a:e²Ôë½ôß½zû¦ Ì1yEyS”4AFRÊ~Þöì阵‹I[cAîŽ! ¶W_3–çŠW¹¶ lòE•‰ÎRíäk6бf=‰S­ 1wôö¿¶ IDATèmuÒk ÀŠ˜¿pjMÊx`×Ù¦5EÖ=ç²—ÿóIæ—9ן·qø€pðR´ TÍO–o1ð\Å’a¸çÖvÌ)5ŠƒW F@\.©æ]„ÌRëäû¯ZZðÀ×ÑH“Š-ÁŠÂé¥àÓ®üÛš®j7øÜKr¥Õ~ 0°²âÝ$YOcƒccµ§Â6búvŽ!¦9låµHÊ»€–aF ÒKA¬ÞÙÿj%Jí·Å«ªÿ=ÐÛxÎmÃÿÛÚÛ¸µ·qðÇ9_U¯YPe›,1ÖêN)y-ŒRMKSâÑèåVo•'¹‰>ùDÉÚ´d\kj$MÓ§è,ʳ¦|Ò!®Ú.0MUb¥ Æs™¹³‚-곜ó¡?*y >÷YEñ\! I )òèR˜§‹k”š%‡S,ÐKVûÓ/;g¢ùEÝ@˜Õæ V/o–TÆÊ50é›»{]ÈT,$DF@'ôñ’¯FÁoãñeá&YçªX.¸R {¬Ò4€Úh–¡<˜CCyâFÎñýà~TGÓo’j=<­ÖF³‡É³äŸ®›{îƒg]\HzâYÑ×]sþy†O#äCÏ{ÝßDWšTM8D·k©þ ·ë¬]•ÝåøÓ·¸m7Ïos»Ê‚×_çŸûÀ…{ §l¡ x*íJRª÷§/}ÒTË |n©\ÚW­E&ÆŒŒŒŒ"ð!k: ƒ ú6z´‰1###£$$ãݲywóü6Ê=sXý#5²~câd-†mŒŒàÂ#Hö4ýþ]õŸ—’é!·VD´ÉLŒ‰“õ´22BÛdþ6ÍULú*°}õ÷­­ŸƒÒ=\l¿¢‰1YÚ²e‹M‚‡6oÞl d dÔjÜÀM¢Öža¥f©™V&ÆLÓï-..ÚÙy¤PØ´þ¬UzoUì=–ˆÀ31fŒ -,,$"Bl_ Q#¿»/È>s~H”EØÛåJøÑ…™e*%a„•FM»¯ð[•>dá—Ð=ò¯ZÅdm—¼Z V*£‰1###£$Œ°’* ³&‹§Š8åIÐH Rü ^û\½óàé@w¥µ;k1ýèÈlˆ;¤W‰fkçm·]Z¯*psSÇaàU­·Jô¨:-0Ìꇭ#²2ª5tj…AQ˜ÕÃïòÝ­øÏZï_é«ÒŠßÖ^ÞšQ’5VÄÌfA}µ®êD^ ÄA/òÇÖåk½ ~«\—Ú©kÚ祩Τ-Ð(Xcµ&QQ˜A«²ÐŸ²ïϼ/^ž`tŸ~€›šU¿júq-,zjí =º°Ž)V‚Õ¯åµ#iÕ†õ\yü3\ê m d$ÒŠ–@k%JP)˜G6ÙvÒé.‰±bg–P]ÕÿmúJeÊ/jÅëP“U:d“…¶³¡/«ÑQµËeIlý‡uRmµÎ’£#aYÄ4×±{Õ4Ä3ÒÑ2j¢"/\ÂA ñ›* ýX >ÑßF™ø­13›ŒŒŒŒˆ”#ðzL¥ª]•§Yr­uÍÕ¢±À;¤Ä˜¹2ŒŒŒŒXÈ_ÈœÍ;xUUæyÄaéB ï18þLE“aFFFF æZ«tñ瀴P¹„;>Éú‰Ó‚M‚-‘š ‰µØ¾Ýjâlb,]²Þƒ¶@FFõ”e_ÝÂô#±gblØhË–-6 Ú¼y³--Ј™ãW­´ê'Ù¼{`WMӳƌLÓç¡ÅÅE[ [ £P‰/Øz`W9T6|žFcÆâÐÂÂB""Ä(ñ2r禉" þpPßö‡‘‘‘QúÖX“—RÚñabÌÈÈÈ(]é•K t?Ì¡ÏWlw*ZE3dNbÍRµ³ð€jû Ô~Uë­l<#©¢ÛxVmèȈ×~¾¬ ³ÆFKš–ØePmøUé÷ãN|j;öÙ©Š±ü´äøÙÕΖs*}èÎm”;×kñDº^ÖæŸ¢â+翘æK©méôÌvGÎÈ(]kl_ÔÎ9;ŠÕ¾s©ë‹×:Eþ~Ü­Fgñà cÖ:Û]8#£D­1Ï!¬íR„´Ï?/ý Ñ"¥eSw4Ïð /¥IC̹J¯VÝrþÏÍL122k,Xe®êƒ¦_éh‘µ]  Ã󿔣)Výg±ïkëµffŠ‘‘YcõÌ¥µ…D‡\:¶ü]4Ñj?7)eddb,˜ƒT›ØÒUo##ÞaÌÈÈÄX˜qÊ5ôM"3źe(3}l¡Œ†ž’¨Sk­9"2lÔZ•¶¾lW&ÄzÌűÆ‘‰b¼rK¿Ô¯Eó$âð þj]|ß|̵±±”ߨulýp%›Û‹1T¬ú ü[ȶàÝ:žÐO'Õ%t9‚>Lê](›­<±» 7 d}é†Ù32ŠBæ4Ò$J61fdÄoИ?ÍH6oÞlmLŒII2›##cF²d.u[ ###c&s©Û™ë$™KÝÈÈÈHš¬m¦‘‘‘‘ÑYc³³³6)FFFFF]c[¶l±I12222J›V5Š±Í›7Ûô%K³³³ïzß½bÌÅó+‚í)x5ÓI‡×4àXyíÍ,ýéêʲ¦?ÎΔ‡à¨ªiYãÀßIÓÂÂBnÆMKg$]žÀú¶þììl>K)OWW–5ýqv<ìGURN–©hddddÔa21fdddddbÌÈÈÈÈÈÈĘ‘‘‘‘‘QáÁ¨j{(»@Ç‹}¨óñhŽ-©>XêcR;oÖTlˆ7gG—Øö$eN$fo|ˆ2ÖðÒ™–!8oÆ,ŒlOñ‹±\ÁŸ››k2жûª×Þ¼:Œ’Y–XHHx¬ÀâP›lDv‘Ó´LÕi)Ž¡øyéo…•­NlÓ°E7•gùšÖ´uÞtöÐbI/%ËäÖr"Zw æ€=§£öoý“ÛÄkÊ8Q˜ØXþ¼¦çêÎ)ã4o^»á–^Q‰yÀ-SQ¶ÕŽmÀ‘‹Ü¹vžåÞ(W5joîÿ–8]ù{AvZм©íøbI/%ïäÎŽÿDø‹ÀQN=næ…/ä¡,5l)š‚ªvÁ‚®ŠâýÛW Î­ ô˜»â†-1ˆêú6}kMé#‘{ÈC-7óA ᙥÀ~YF2.}Òºxó!j­e6Ä“Ÿ¸&Dáb‰ÛºR]YJi©0ô{;hÛtŽŽw”¤£f¶îŒ4Ùb“'}ý(èF¹›Ëî…,±e+ŒÔ„@¶M§´¯ÀDýÚµÆu‚¬ª8ÔR¥£ù„B+q\G܉þ¡"ÖEô*Ü?ÆÅ´je ù‹D±Ã {€ebû¢³,1qµ7/®këÂK¼lím#òAÓ·ÉÞ(®\Ÿ{™ZwZ¬AÂGå_béAÌ^ܹE0–4x:ûòP–ó>N_éïÚÕ¬Ôê0j‰Âx ó 3Wþ§à¾Um”ÝåßTþ•ç 7Tÿ°#Ž3Ö Ïâ:8±Ž¶>O}`Fedddä³Îm'cFFFF>##͸€QNã6FFFF~If”òÄš5fddddÔa21fddddÔaªw*.,,DSܧ§9’.¯J³³³6]6Na‡òdön¼íï¸óÝOïÚäÀ¾ëg÷nÞ¼Ùd»‘‘‘‘QÊ ñ»ÞwïÌŠ¹Ý;·ïxx›9ŒŒŒŒ:L㵂Žëî‹‹‹NÀ•$tÛ!päu \]œöNï™®ÞÞ¨ÓoÔ"Æj‡ ………ÜEÉrCÑÛñÀ‚FÞ9¯òììl>ÛÝšöNï™®ÞÞhÞ('s*u˜LŒ™32222221fdddddDÃŒ©ˆ@ó,¡Y»4± €ÕÞ =ÎÖK::òj[¬nM;ïäÛÌS6|§ß¨vðÃ÷Fô#cÖXÍ$æÔéwéhƒ‰â*¸Äºî¢õ!›ù(¾ëoTüð½Ë‘Zk,ŸOë[Ïïó¯ÞGÔRDè_þFºj6.ïÈ• t®ÁW·PçßÑ™oÝðì/å Á騽„xdR±ÆØ­‡R×àV-¦µg4¯ óè#Aú—2?Ò9û«uwÚu/×[«Ó3÷š–ÃÖh$¬±” ½ÀÒ[9‘K¼šÎày­vÍÁ¿pO®‰»ás&˸.joT»Ý=µËAßiÁbL(À˜”ªe]Õíè6’aFtÍ+˜ítp-Ë¢ôƒàÍ€(ު뉱6Ä0<ýSêŸö¹—©ª¥ÙžåÁ³¼Q×O‡Ð‘‰LE®}ý>Õ¢òÁîîÈu_Uò¸8ŽÍ|R’Lᔓc­Ë‘IEŒIØaùlC‘u¦x®ù³­Šß¶Ž\ó`«|®@|Gg^.Å#ÖÌwú­—ÀïYË[¥ß"ÒâêCÄaDÜ£lÝù›ùÅßûÄ¿çƒ7ÞöN³ÆŒ†r…¢Y{Œ*„†^” Õ;iú@ÇÄK™›_ÀøYjõ&žß7=肊^œõÃâºD¬iÓ–³“‹#cF#m®µ²­²¤"kn’¥»ÕÞ$¿ƒÿч[é5=l´:'­?«C U¼ÎÜs©çƒËÿ.ݼÕpÌ7Úrª҈̩h¤,6y´HWX­ë²É&r •Œ?¢7Ua™ˆ³QzADToh6ö(“9"ú a"MF)7’j]—ÕÛz2)Т´Éà«R6`ƒK} /šŒÅ¼„ÞP4áfMq­–7Ñ”G2MRÈĘQº¦„ =ÝÏžòoE“âZóÑKü´é÷½]íb#— µ¿,:K›LϦ©¨¦kÖþ¯çe›4ˆÔÌ€^Ž §gcø_‘/jt–Ì©h”¬wí€j êømJ†41»º³¼Ht->—¡R-–ÆœU W6ô[åtÍ¡'s*‰ˆ®VÓ!èØ¸$ÄqLú*åéÕÞ®õWó>J¿¤À9ÔÀbBÙ·º¼¶º%Ë?Hø<%R¶n¿¦çÞ<¿­úÊMîYÏ8›îd>ZºLŒá‰+Ù¬úƒV.é—XÕ?BcµG¶éìC›ÜGEG"Mß…äB$V‘MW%kIQðJ—Ô‹ÖùošüÒo‚ò-k‡ 'ùîª}åPŠêfÄIæT4Ò±Øè~ k`Ii«•X –.ãäsy)‰É)ôͪ\Z©#™SÑH# l²jù£û}„®E…£è˜YP._ëMàÞTˆ/´Õj ]©w ˆ9‰ÞŸþ›ç[íè–åñ’‰1#¤Ü"†—r‚'’9œ8‘^ð(Žçn7ÏoŠÏ’+ Δýñ¢œ´â+pÕ~wDˆz–ÄAÂ]Ù~7&KZ¿‘‰1#~ÑE‰´Æ?€<½*ršäV•!B’æCÕðüZ¸0.I¸PK"t«¼UçÈg^@M)¼ó˜tp­¢U¯ªm>j× ûÖw¯nø €4#cFÁzýnrUyºßW*€-f†üÚ=üZ?›Ã¹"áfSÎ@›ŠÀ€b²–›‡:ôà9„ðßê,Äó¹ÇMY3U²ÉïÚ´rÅæ#AæTì®g }hÚZÖ„„vy5…þ±I¼¯†!¼ŠÞ_˜«Á[jg-ÏTÌîwÙÇ]W$.[Õ|‰åóeNÅèÄ¥X¡KYåÙ4†¢rêlj(éÈ­J=›£˜LXoƒ±ñöÌô˜°E” NÕ¼& ¬­ L]Q°š ËšzzæçìoÜz¾+=ÃȨJ&ƆÁ,óŸ}hÁaÐU%V1,GñúMœœ7!@q\&—pª7\Þ#DQ­ù´žéuuU‰ÚÔÍåî¾[–¸o€¡À@CŸ˜FkdNÅ¡lQ<ÌYp¨,mÁá_9Sö?7ô­á¯ÌÞ¶­»½µ“¸tÄÚO²y—mrÙÝRÚd¨"eC•œŠ&Æ:#Ò‚G+›æÕ[åÄsð€Ã>I¬p]Ø'ªh-IÇ~üÜ\âí âê"àØ`&¨LŒ @J¤d*ôh±ót9]^ˆ5ûgCî-”™c6¶X½îµÝs‚EPk4мË!J܉bbÌ(¾Í!wÏDÎWR‘;×&Ovn)[Y¿ç¡Õ:îìþÙ(ãê‡Êu^ ›~®ÒqèŘ¥x¤N¸*‡Šö‡†ý)ü…7æ4ŸUl=`Î'q<À~ñ)µ^b`p«”ºR]åštÊ·ûF‹ jÒ‘Ž#Ü`M“M(Y³5ÏcÂAõAЙ5Ö ;,Ô?WSŽ–¨Þ²{ ýRþè”UæÚ»q/AvŽZàVwÛ™ƒÑ¬±Ô¼pæ^L@oÒ¬ÿРK«µWßÄöÖjÇUÃ%èEª]:=“Yz5âBˆ²¼¦ž“æË@ÙìiË 4ì<7¯-‡ðFùµ«æÉ‚ÇÀj»WŸÅˆr`†—Yc&D1fD«„ˆúF‹Xÿ¢¼Ë$3&RÐÖò˜4S.áæ=UÒȬ1¥sÂh¬0nèVEØ£{:Q•¨D\róü6ä€wöt‘†¿u­í_ÁÚx[(«…4jqmHÇ¡.8œ‚R5ÁÑZN<!=¹¨[Í;×Üé͵ÀàZ—™ð3k,‚ÐÑÍÚuR¤äy.Q•ÖÑ£y«¼ÑcN!b*zÊôQÿ°›s–pŸþæRÍ ‚8JÇ2¢£‡öË›QÍbaCæ°) ¢i)‹Åa¼;“E‡KÈ&n‘¸‘‰1Îm”ø.„`"@Œ-8“Š›d¨³=ò×äÅ.вÏCaYpæ¯Ú®+ §ãrñF^­O´‰1)ëG‰^²ãGwŠF4Dü‰Bs…›LöÕfÄË:Ñ ¥ŽÏ±O©ˆ€ˆ%†‘åâ›ë¶'½ó(ùx\ï2Ä$* õÅ:;JHøéÇiØ]ˆ¼aBö„Ã9̨‰±¡ÍTêúÈ’ƒÌPÊ —¦ž³ˆ‘ùKmúVS­Rè,ù«…\ &Bq>óßgŒØ/gbz²ÓXm‘,ÔÕº¶t1{¡éµþKàÉŸžóØZjšÉÙ ËÒ:¥F-dÖX1)—&§Ù^VÃÛÃò<\B„w ‚ýWÙœª)A¿ô‚ìù\{8¨¹IP?ñXN3³ä¬±‘c¢…ºô\ê¸B2gye¹ÐHPô(]JBTzY›„bþ!$'³ISZ 9­¤¸œ£l5ñ JÔÄXW…V:-éXò¿g•XO y¢¿‘|óe‘¾ôK$zp­~j–±„6™>ì!3¢°71Ö [ª+C¼1YÃÃÔ€IS\îG¢èâjÚ$V³èÄ…n•©¡ Ÿa@I š 9ªàÆHÊ?3³Œ]Œu Å£5æ‰SµèéIð!‚Ò5M4À¬Ùyz»@az¨yp¼sÀ¿ÝÖô| ëR“,ð¤ã´¢@m‰Öo›Ò1š.lú¶ÚΣ*Ø‚P£€˜XÕoCãC ì¨]¸~[h ¤ÚߘTk¤Lñ訌œwÅïèÙðte œó°MD›Þ-ÈM­ Gt…†Ûˆ½6Šñdò‰ht¦"c_\ý¡Òl7È¡Çýæ óЃ‹ì;7G€n›r%Cu–¢.àå¼QLöÌ2“vñŘ&+ËÍ… ÿ™Á5=вj¡êìë[äÝP,A4E— Ó&>›Ý<B)!íi€ƒh`Q¤½Øß¤—Ycœª®Ú†n 'Ö—¦Ò˜ ÀFÃréÚÀ4ús~·Ë6!õÿ 2º¹¬¹üRF}¥ö,ózGY¼‰‹1}d^‡ƒNÈ*ô>A¦ï+觇©m!¸ŽÏ•²Èë¶ò'FékŠó4$«N±íèlŒQcü™ŠµMÇå¼ .¤_¸ÝDäÿ–²éý2©6aÏßD±énÕΙ~èO“ƒà÷„NBÓr0´ßнê*©}­Q­EM{‘xéátÅ»UæY8ÿš]®ŠÆ ³Ô¤RH˜tµYˆÄÖ~ŽÎL6rŽœ©ØÑ9•Ó°¢OÄwAÁàÐ7•(ZBr±h1ÂtŽX/LQ1Ù§QßÇ( ƒ¹Š‡ÓfkŒÇ©ÈÒÃ0Jà‡]žµ–-ežPRoþm-Va ÜgËIbº—µ*Kˆ³K¾÷뉫§‰`řե'Æ’­«w!m‡"&vŸ áà¡9xÒݘˆò©ªï+ký\ !ƒPƒ¶zD2}3#Œu\•¤Ú¬Šª–߆D•¢5–ŽzÅÒURÙA²©VÁe°\¹7.QîNIŠa_JÄ”ª¥Vò*øšþUœxhŹÆ$ËM¹î&Üs¨Ëm\ºÁ¸%<´•RÙš‚«Dy6ýŠJVÆ'Æ¥¼¥®&~äÄX¿+샒@ˆûeè˜[³¿JYd8˜>Oš™kηô§hE»…ÏÁÀýZ¡ü4ñïêŽßÔ 2 ‰ùlž Iÿk§}N œ· u°i{>lÍBªEt$r’Ò€w´” IDATÙÓ&ƒÎ»Ê>ê2’nIÏ úNèSï_mÓ1uÆ2=›âXIÃ’õ§¬e¬‰:»Øu…9‰k*)œÄ;&nÕˆ1¹ŸÚbPÒÛxù/z7!Bi&éI;p%zš-3([% n$»¶G_µd‰WßA!×"ƈÜ$–CÒËÃÎXš…Ž—‘Ìžf)¤E½#à“èñæ*BÀµûjŸbhNG±Ø¨VµÎƒrý… V^%>ô\›ÕÅfuHsño¹RYâAŠR;ܪó¢…Gô¢‹ÐugÔë[%$ £(ÌŽE¥@Ì|Q 6a\Ñý“R•ÌKEŒát@!‡µ4Xdɦm)z2KP3:_DýƒKWÍÎ t\èff1a-¹åd­‰1þåÄ©ÌIi4±bСÐÙöç’˜ßM¥r™Ñ¤nH ß/V,( E3˜=à °Ô_;ÅF©FbLèhóƒ5]ú*’¿,—Ëþ£Ÿ4¢é†¦S®ðÎ/¶¥Û7#¤ 䞈6r¼]a¹à‰æfeˆ¨˜Ycrµ‡Äx@:µà߯>Ò,º”³Í`rjÆ6Q6Ôøä™mÈÆ¨•ð‚0®L¨XÖ0eß2šMÅóÈh óŠd“sH1–mŠðg¼a‡ºIgè %tIƒ,ˆ‚ÌÒ'B&ukïcºj(j9IW€ 1ú ð!DÑq†R//ÆZP½uÕŒØ(4Å#Šq%¥[Âݧ0«@t¸tD£ö¹¥0aGa¿q6t“/±v~j“eX b`3ºÛCÓgGÄçðfœ¡­1¶Ø‹CŒ±ð ÞŸ1v†Ëî˜bé¹×½Ï[ÔIˆyPëÀ¤*R D;žÐ!¡ÃlrÀA1ÂV͉ë”ñŠL"7°º1ž„û(øoBÊý½€.ÈÿÆUÇMÛè#ÍØ KAsçJy…´àA+ˆôßjNÍvÈ[CtHZ;Þ£CÅÄXC '·‚ÆÀ’¦¥ß·‰ ¹Wæ•§é©î„ë’ݻފ…!±XqÑjDÇÓ¤eúuôÌ›¿Ñ/Æúhs¤ó,.:ª iÈÒäÚj ±¨·‹ÁüjJ7hÝsM¡òÖ3y¢@ÒÁ•€ü|Æ «IIñ—z”xz ´*éjíÓ‚&"˜‹›¿õ ø—žóÏÊAï® ÓÚi>˜ÚלÖ1øguæÓïT× ¢ÄÆ‹“ì<«ª¨+ég‚(ûX4͸X¶¸ˆÅb£èU¸jºÅ jÁŒ»‰ÄÆæ »rÑ£½åæKôXc §"—†·Ú_“Ň&£§³Ûà)Y^A ^] ŒG‡æqpŽÏël÷ÇA%ššªkµžJ©ÜÄX„¶™!á‰mÄDt%–¨hñ‹D×ãÐf=8”¦¤Rƒ:=‘‘ê)—›Ãóe”;IJØî”Lë7ÖØo ]˜Ú|!)Ãáüáz¡û_í›ÚŸáf^¢I›çþ¥’gÜŽ…;–ز&E1n õ$¼iAiBu3Z‡Œ¾"zµYl ÖÄ{3àDS ^ùÄÕüEb»p¡×¨©Š8€æ¤N’Žë4t†«zBú§\Ú3Z.Nº Ââ8‘ÆBKG«6"‰1Æ .‚a<ðAýjSPBs;£ÍÁÅ( º?|n<˃ÞË; :Žô ÌIÆñHH59S_ „¿‘õ|‰&Æ,zi+$…¦æ qlÈQñèŒKq`:T­iR³çQ)/š/×5Cû¤C´vðe´Y¯æÅIä, ­5&$Bè:,ÀŒk~¦i ewImq‰`²Nl9“óÔm¥>Ì>…I‰X9 iG&äÄÅMhʧ¼ºèH-ËŸØf‰ø"­A ¸V9x ÿÕhg×pNxZ] ›F‡iÕ’lGG扈1ÆrQ(ªèz³ #ãØzhÇ) ûX ›xÔ)n.N!}ac`õn—m™dHŒ9Jwït¬|£s…OlLÍÕ†Î/×d+A‰ÎÍš®ÍÕN#ÿ>èì¡Ï$K›‰êõX?Då¢Nê¦Ð²²k$ÅRé%’&œ­1®®ðA9šëš>l¨? mD*ÛžÄnœØƒ¿$’‚,®,~Z­U!/=Nã`·RàÑõ4„bL‚cF”Bž%öÂ) P‡Ì¤ÚäuϢ˰ü™„8AY• …ê rÉ*Ç]# ?è"Èô¹ £þÚÑl#1Ñ*Bl}ú‘J,` ,È’:ÑÓ´ÐmYŽ+\*Pœ–¢ ®A‚ŸMGyz^ˆ‚Ó,°^ÄEIGIíªÃ%JñöxDŸ z Ÿ†'¦M/æ¥O)£=œç êœb ‡ØX Ræå h ÁÚШT¥ß ¤~Ó´èÀ^CV–݌蘤ÜÁ7k ¤e$uá÷/)§®°'XãÉpÆ'úÅ‚=6‹Ñʽ½ Q­*à¥[fÀ¾š±b—9/üV”ößìcr1&šR…8~­½V‰ cWjÅDý·CŽ2çwAS ™±oŒ•*Y'%¡‰²WC×לŠü)”ueѤØÕÒtÎ3.2×] àT–V+9“’ª+ℎ•œÂñ$ò%éP·…Ç0±1.v̸o€®.s.Â[®æIŒ+(±B! o,°éÃ*’+çò¸þÐí­Ñžsv31œqâi‰T%g¥¿Þ96DsWÞ|ìm %à(qb5ºè’n1J\hQu¨–eÊ@ºª¢_qKÄ‚A ê-Ž®™!vϱØXÙS+—ACw:\`^dª¶Ï¸ÚY±˜¼zƒ§1¢Ã‚u†¢~ ²‡ˆ[çgtÔs ZÄ+S̿ŦëÚº¯€åüFlÖ¯õÊ•zª‰¹!ô*ÝN¸2(êB\O W!9•@¼yÕûà (Œ8ñüTêcî°_Ò•(~·Å—o¡5çÒωbW¡-GFä øªAR><Ætg„­ãçhQü´ìS„îÊ-Ä‚ã²KºñT¦#ü7œÑÙÇAÕßf±ù¾¸ôÞÅS`šþ¤ND­[Y°2$.—ÉNÜWžz¬®$#Ôª8:›ˆàîÒè3Õky=‡†pÿAÍ©á,mP¢Wf4G³Wº9º‘bM鱓j;qÃàš,#z-eÇ ?O ©K¢ÝRМQz4QAÉõZ–ÓÉ ƒ»½q—\¹üœCê1鎯Ҋsé¤8VÂî¹å³t J¡°w±xSG‘ëì&©%}ˆˆ1¹cÖšÀFá;pÿfBŸŸì.É gA•Cž™wà¦!M¿×GÕCDU%4qâ™ 2vJ†2$œnûJh–[1."ó¨‹1¢¦&ª"˜N«IÑšUA÷æ5 [¡ãs+æ=±A¦‹X®±RÌbð ^È„9r6„–Ê!zØò.ª‰1æòg§ZŠÙŠÛ@ŸÚ%åéÅ8¥ÊUº”™ŒBþZÑìö®`¼Þ`ˆ¨5Ü(1Kêcö<¦ `ä–fÀˆ14c¢$£³×5,\tWÁ¹A©€†?: …X!@„¥GË k¶I£§/21³ƒ…A³ôfSÎŒmÚùèrµÒ¬1fm3 Ù(8aL·‡¤S™«ÎRxBµáá ÍQY k®EÄu©¦¨GržL¡ÔD4ì8‹Ý¦LÁji1EÁaQŽ„V7ñ~zôZ% t×P‡Lhú¾rK9ºHã ûÙ”ŒSÄb u´×Œæ¹6¿b˜ãíOOw@±Ü$Vs@ªNËDüÎCÙÙÄ€Ö×d̳çUѸäAh#lQÇÝoI9Å)èâhf%×gøÅ˜Cõ¹¡L%® cPÙ,£tL3³Ž.„(•h?$8CD¤ft†-¢.ŠÑIb¢Àf/›AX™\9Ér%o½ãp˳v1FôG±Š TAÜ%ou‹±ø¾(RŸ.«¦O5&Zz¯¼ü@æ\0uâ\ÕPÓa£úUÒn*FØa¶ÆâšhBqf´4Ö?çÒ:¦ÂëPªèØÇF7MØã¾­ ='aO .ÉæÛŠB¬¥°Õ-Å£^Œi"{¸¿føJ´»˜Ü\±»Oõ•G5e¹‘Ùmâ¯ôÐWèø»à}ÎäÞ.¨ë…Úæ.6†ÞAŒÅʱUEƒÌmQ©LÌc–sp+œê ¾nŒbQ<@œð ®ÊƒÁâÝŠt͔݅}Õ!‚î^FÌ«¥BD, Mgó½ ‹½ÔæF$žÆ£ïO­±Ö‚·ØÅCOLN©ÁmJœ¢„N vbyBŪ:LÄ¥Ô½>â½uÃà*[-éå Œ–bRøÕY³üƬ±8`T ažMÉY*¡5:SA<$ @鉧341GZ#ÂO ,hÙƒ(¸·¦ˆ"´Í± eÏ3ˆŒz@§åc‰ê™‹Â6Å!Ér)eµþXÞ¼v?_DŸh|·£Ï7î1éþÎhYK/ÿbñú2>Ѥ›÷¼ˆþȇ‡ÏVƒ"ÜÓëpoW‡¥€÷P4@«·-™§A¡å¦ò\‚MbT¡bl ŸÐÝ’R™ýÌÑVa9¢ø]‡ו‰ŽSËT”:xDÄÚß°¢q“ŽúOy„°æù¡àdÓs [H-±ž7¿#º``4þàýÿ§ŽÞ É%†Ç¯,ÆúknqÛ¸vUoWû:•~ãù0t ·¸mðÜÜâ‡À§ûwR>Åù¬Æf(^ø[ܶÒbµú‹jGEd%ô[5ªÕ’«}t1* žß]ƒÈ2÷l¡êàƒîÜú:U“+¿¤:*GÌÕþ¾4`Ü[7mÏ/­Ú๥ß&¤ôaí ×þGM{£v„þmÐtÉ7’²ÆàІ޻ÏSÂIñI»D(÷ï”E©Ô„•“P{áÙ,µ¢¯×/Ûö¡¿ì§0y"åí'ô]LRrZcC0Sì,F£¾µ±‹ÿ“V`Yvǵ«Ó‹"Kh#¡Y›WÒšTÝ]Déègñt|gŠa$n—ëÍ-a$Œ‚lKºßX\Ù†ÐÔ臶»¯$¨Ø{‹H4ÅÆ n¾ØUgL‘GÑA{AÆ0Y1È ×šUèŸÆª×)·Ð€M­ÓoÇÄBo²B¹œŽI\dïäYõÃÈNX@óôMUº²ÜÝ“OÙK¼Ë$ê»F#Ý Þ:(½K@t&G³n ™â!´Ì\7Ia-ÙO…—½éIhZp”zhWb\[¢Î!.V…±ä§/†6ojÝr«HºX;èŒDÌ—é°cYæRWÊöme4ôeÒô…²yëc ·ÕQt’‰ 7ñót »ª«2˜(6+­¿v’Cõ-F”:–žmuczGT«›‹S³k¸À5—{«U Ë‘ókÄ:]~ˆi`þARÌøIó¦D';”sèVoMz"ª‰¹ÐälÚðˆYnx_q1Ü£ðžÜ©y–YÚzÁy}Â$㻣Ó7bÅÆÐñFì\ŸxbEÿ@ š{þ¦@öáĘZ[Q¸FKIqRVÖÑÚÒÈ!Ü^e…<'z]Ôät­P+Pq…¨Ê ÇžAãY_®W›bGlÊìá:¸*pL^‡[šé8YhÈÁb,Y9”ZÕj+wõÄDZùÜnösÌ ^0Ò³Ñå¢Ïk«æqÙt\%Q‰ÿ§rn²g&Æ”VíÇ CPÔaÿ€Æ=êPÓ®l:ç׋Rÿ‡æ‰ÄìGƒ‚ ì®\#Q‹áÀñ ÙÅ••‘ñ‹1\u‹¾òBD}¥´Ue‰TKÌ•õð/iËI:Ý·sèJX«öC1MˆJ#ܶœ¼O ­Q(‚;‚ÄŸ©Ë­T[Êã@ó°iFoº¿Ô£*Â,BJ°çùÔdR­¡¦-ð÷ ž(– %|þB53édFø{Ú¹.4ÈNTŒU>Êe©¦³Zv£Ö¹XHGÏ2§L4+®óUO#}éq Dùí¼^Gt#¦+®÷zð3ŠADcBaF$@ø©£Xú\ ./&ºÝ$bxޤР„(¨¯\÷ mˆ½+ÔÀh-ạ <%T–¸}™–5ÆÎÙC{E_!sD“3µ–huè/¥¢Û\KéîĺDÊI8…þÚ¸ø4o ¾fýñq­iÀ†,&Æp3NJˆ^¯Öš­Àž…·+}}x8*¨ëðÔ± Û2„!|Dô±×šÓ%…¥„s›C€ë¤“¡œJÜ«ÚëgT¬1øSp¤À}Ç¡&±ÞY¨>´6>J<)bꇜ% _µ Ë,Š+R¦–åøã\|:ñ?D¦(1# ée1³`1Æ{´šÊ/š2ë¸ðÔE½(š7EAfÑjZ‡:DлIëËrÒÝKçDhvÿ¢Ûý\Ú*®34:XòÁ·ØƒZcèF¨©Ëò3º2NtâÉ.ú©\jž^:Ê:®¢_ŠÀõ3ôµ±”­t q‰‹Ž˜yÏék*IŒ¥w@ŒÑ—œ×í‹C2e¼-W²¥~ñ/ú‰Mn9'Ëäx¼²¢pˆÀRE´¡Àrˆ¬°5kCG‡ë dqÆ ¢¿:]ºg±¨!¢¿ÍÜåz„gë”:'qIt…KšF®s¤)ÍÙ3xÁ8pû¡vS)ÈBöSämƒ84„M…†[Þ$já´9œâtDV¡NüƒÅ^aé©£L¤Ið<iÇkþ²ˆ Qðx'Ÿ†1íZhœHNP—ÄX¨¦Ø’ŽâBa/'ªý'.Ÿ¾z+ ó’Š‚¶Øï šÆu$"ÂBÑ'Ó£ˆPÒRà ?YΑ“ŒÎVWíZ«åµ¦ ÌtCZcVÅåFM?…'UC4ÜšÅPlxZAmij¬U &îJªK¨óYŽ—¡#ÖAŠ&ÅkMg¡ß¢µä”Eép£RþÌÛDzû«"!¨uºáˆ~GWézQÑw„°Jõ½( ù±AÞ{…%Ã"w¨ ”ZÿPæ5ëE“úR0×pH]£héì i&•`oY »”ׯ>áwö¥×é8La÷ìîöu¤ŸšPåËrEYÑoW§<ZsKŒTÌŒ3á^"oGMS¦»×éø Ò›©6n‡¡'þïã°yçµEôB¦XÓ~£«AM“ß$«Å\ÁK¢%ÇU9ІJ Ï›îÚZèû0v‡ŠÖýY?相’³6D÷|ƈ–:ý=¨S®C)]SaÉ0¢o’Xá…<%tsFbE`ÔáÂ7töÒéY»=BÑ»`àüB"6]d7šåzàRïظû TÖïI˨ѳ ÞcèÓe³´ZÂòEq !”Âac¢m·j77WJtWð4Ñý bi÷µž‚,AŸ:\{nÿDéç%²'[—«^3"Ê¥´Yë ñÎÄ[cN,}@…‚˜Å­ùÊ_ÐiR*çµ`éü”s—žö e?(KG0p%¾ÓUXcI¡§Wjn³­1àÉÑï&­©ñê8­rEYº8­6ê\j‡ÐVM5"2¾èR‡…ÐÅp¨K„þ‰e!ñ*…éÄnbŠ1t§W䘘B²éÅÉ®=Er·Ö²wåöÇ~€®¼ å)®KŠË(aœsú„­C× %0*… öJYvwNŸÅîÏÜ–"]LÿE³rvǯD ̯/=ØÀ’Þ„i.‘ ñÓÒM"ŽŒÆAbp{‹x^"–jtQÙMBŒu²û)În\!.¯ ›¢ƒC†`×V¨ùŽÞŒmVX¤—E‘(ˆ©–X°À¥2æ©…¬FD¡†âá.í¢„Ä:Ö €ÏoAÙ–Â3Dp§•ÜÕ‰Ìâm}A¹V«QʱníM É9Rˆ0¢œ®Ó‰uÑìX# ܺ¯ìÍ r×Pf× ƒWû°²Ô¨QËiVå‚Ò;Ý(_<•qONÏð¿‹Ü‰1+FíCLJï`ìA•8Et%1*­¥JÚÁ¤ iâÑ“Š…ž˜,®P¼*gŒ£YòÌlEŸ)Ñ»‚pS63c¢pô«x]¯‰D¶‰‚¢&s5²tÑêKz}ë+peu¥DÇØLî8á­øZ1ZS‰°”EÃVHåfZ.> x+ñ\Ѩ.Âx:¤Ñ*!@¹úEœ5„Z’ìçÒ‚ºs šœÃùÍZ=$,X·jfb‰Ý Ú±HGöW ú9qMYr÷u¼SÄeÓãBµáÄeŠè›'žpÕ¼3ú âÖ6È¡± ‰5Æ›õ‹k³ áË,ãDè•,6;=&”Ï ¤I<½pL)DazWø»e†r[^0QFÉúŠU}X]&ÄZ•︪v,Ìën‹1ø–ÓwBÇçj«=î/ÿ8)gIÿ¢zyPKYHÇ¥eÄÛ¥4e ôÇÍ¢•»8>#Ôw½Cm¸=0lÖe@tda.A+-è.Fµ+Ôùøƒ£Áy7Z¥hÚØh±ÑÄ+kË­$C ‰* ©UšJ𖎉1'™6#Ê÷%¢»,oš·†`²¬9J©¬\ª‹ŽÞ ‚Età Èæ/™~À{ÙÀ"z¹œ–Díq« +Ào— øŽª“xˆ=«Æ…”Vœê'w ¶Kþc.Mgµ›3‚.⢃¢Öƒ?)\ÙùÁ AXØèìÍ a–¸Â§'ÆD{p…‚ËÂÉ?ÎrrÎe›\h-=ÚG7n…_4! K§†!Et¢•®æÝÒe¯èa³Œ¶[@‹ÔòçVΘSÞ-–é°€²û·¬œ«¤¨0JC½yζšÒà—+î\…ùA ™D ¥Ì|mœ²·ýY6šj.û­‚{ç¿‘°ÆÒ©9¥ob8ÓŒbëÐE”Nµ´Ž‚6åK»‚7úûbcFÆW…ç²b3€Ð]D;8ç\CªªÕ”g÷-.Ýa1ÆÒŒ#ŠÚ¢ ÙµþXSäqÇ·† Oµjrè,YkôH"W…Þ‹¼Il´"% ¥\yꚣ€‡BoC 5S@gî!­±dS·…žÂ(³ý¡féH9 ¥JÌc—(]o} ¦eæ!Õr@[ q0Ùá"ª‰ÊN ¹™ÑÅ¥lKhˆ±¸Îe‡MUº¹ŽZpz‚aI1­S9£Ñò*Ô¸¬a‰frιìn—e²ì ÀÎ)ÒžŸ ˆ/ýâ‡è>¦=“Tú~j —„5Ö¤J³ˆˆS¬à)el/¤£#…ŽtÀ΃ڰEY†»+ª0‰ÙÇ]–ɲ•P7¹¸­SÍÑwœ°IQ†Ê¥"Dépb*¢] =f  IDAT±ì6®„`ÿƒö»-˜ˆ ×›V•} ëÖ…`: ¹|K7Ïæ]vWyS½äQ¼G6Ÿ(T§”ë×KøùÁ”%æ6¸RmfUäC%ÆÐàîi×8úˆ=ALÊc*hHª&Y¯Hå­Õ¥ÔÆú_¶©RÞcí±$tÔØܱF³èp´ˆ§ËÁÑ2¶#ò.^G Ý’dâm3ÓÁC’'\bQÜh@^ÌÅ)Æ ±¤”W·`é14-B‹ž„=\Þ‹ÌV˜PF¹¥#ÃxÙ E-fïÓ4¼[œÎ|yÙw‚½x¤¡Ä!x+ º-’îêlµ×=zL6ßž‹›^8°o¨m1ð±·òeÿñEcáò¸øQrx=.£’©ÈèK Í,gtÖ±;9á—&žR=ÀšÍ¢<”pÐÎCH#崷ИœSlé Í¡$z¸ %.\’ñ:ÜX„´P¡±­|R+ÎCŠ1zsq#Œ‚!ÓÊüDË!QtWvF\›åÕ ÒÊ‘¥£¼A€#,nzJ¡# Ã1:Íèf(4TÐÔ…}Ž íE²ÆZ\¼°ÔjHB‰(J[“CðØkà×µù@bL¹¡%n~ÕÐç(wÍödœyx£á ¸^܂ʅÓ]sš( ðqëM€Æ½Ìƒ’ *-уŒ^3Hù?çêT—B…²²f¯!Æì(¦ÙãŠØ²2”×rUi¨âRE’pïdûpTC!çW´«Èåž‘ä.²ˆP¹A[Ô?{%0¹ÎcëpáEáš²‡ƒ2Ë4åKÆÏŸŠ5–Î{jÉÃ¥fÓ§˜V¼ÉñQšÆñöÞ¬µœlQéŠkÝ)—Ðw5M/½";è}!Q8Jv3ˆÅ‰Åuy5"ˆs¨v»ûs—‡ÀrÙUÝ­Ÿà­uÂ"’+~†j h@6„ö;à šH¬\ûâ;E{wCSÛå&Ñ$’î"†«wD¸I@()µLcÀàf²ýæÄ’X¹¾0íÚÖ&L€P´èG”U!üTú5‚@ŽÃk¡²¿lkÐCh|,W„ò’ÓUˆuiÁbŒÑèÖ néþ¼n ã…ÌàêöÄ~ÎáIh¸xð,To†@ ¿v–‚ ˜(ý8b5¦‚+(Àá!ðõCÅv };qªÆ¨@#v€Ä ¶FG(fSÄœ.^ÕþÐЂ¿V½ÈõB{ɳà%UóЏÒÞ¸6ïÂ1âøðž!/…Žhhd’ªkÊÉn’(,¶*1¥¡*‘yÅ^”Þ÷BÅâS+m•¦«‚1g/ˆ§á­)*l“o“]-f v2êpìJÌðÉ3d¦"”‘9íP î¡VÑ»%-çàÑ]‰1h¶Öe(Jhµ¡6$„LÁ&W3ñNŒ$ôÑâ0bQ^Ñ+ô8DèâPkž´5¦&Þì Ywp­ ŽR=Š€~gHtFŸ>z³IØî¡ƒñ”³Wj…±´~-$–tÒs„.Ôoç+±X¼Œ¢«bŒeÊ_qUÄm‡b*½pJî$C–î¡…hßy¸k°Df7Ç)ð =÷RÔ‘Ó<‚T1®Ä?v(g‰›t" _)ÅR"®Y* «ÅÑúç}c¥Ð[ˆqÑC¥NvÒeÙ—³ûEö\¢§MYÀÒç…w®â6&MÏ3öÂæeÂé‚QµjÁþéàBÂÕß‹ à¶¡û ˜pªã ZxWAº$>_Ý™Ù&—Í»,û,{4»³yÐõÕ Z!NØ3×áiÃ\n¡Úæt³á›Æ´à­ü9².Ϙ`Ͳ“š%ý‘°¤Ÿx¼ ôÛö­—Ë>ŒwÖ¦-DŒ Ä‚=Äe¨Kè‚ðГÀn¯@ºUPÌ€Päb5­=Ek ±Qè¨ÒŒóÈÞ; ê®Q:¢á=Ùqë¹e/Ñ š(P‰·a¤ÈQÞóŽÈ3jÙak̲' ûÓ¥¹wã"²h…ì©.¼¥]­Â%øàþo[A¥ƒýØ‹å¼F¡`ÄDX ÜWÄ1,#\Р ¹ÞykŒËígÁÀ>,”8 Kªó6ÅYè³Y)“U³cØÛÓˆê=B¸ðîH¼8ašÖ*Z`û‘¶ž/J…«§ö‘Åcçr.“Έ1Í·î|C4­ö‡!ö7¯Õ%m­J×á"Ī&œ\zNÉeLB‘³ÉjÕŠ´ãj¤§†¨K)”“§ì¢L¸õÀ°HÖs¼çA}šŒ– šK Iâ:áðMÀ¸MQðÉXlnœ4‡"A¤ŠÆI¦‹‚ N¶“RI1ߣBv•[ë7¡VÓ‚PÂ:IÄJ.=· §"&y;¦‹¯‰“ìQãšâ1~åC¢ î«ÖÉdìr٪ܨùèBËüé°5š ´ñŘæK¢s¢ä yx›QžÂ¨Ht äšaÄN @•EãÌ2{\†E Ñé1¼0:æ~I=¢4Hâ²ÉÒµÆDù)ˉ¢»Ô)Ïýô^BZ^ð{väïP¿K…5§,õÝ¡Ú:¯å!QÄ ¬Öئ2=%‰©c*2vÐh ¿s™±ÁãÉÎ ½mmŠ#b˲ÛUAk‡Ë!Thg%͞⺿BÏT¶IЄU D¿j—àt\µB zN5ÑDPÓñ¦'Ætι&z)×råœPzÐMèçmÖŒkZé |$6‘šÀ±8[ȶ¼NemžÛ…°<šö'0gbs$â†!*åìkÕvTruc¡‰§±ÔHÏbQƒRG“@¼-—Þ\hÆpAM®×ñ+%ŒíΛÔ”¼ÀÛ+ÔI.É~”ò— ºÜh’ìƒÅX£g€ÂÓ‘Ðp,XèÔAø&ÅÈ`y\²OÕÝ„;Ï,…“a×ðà„b:ÐO×r9U îYàaÄ¥¸!+fä­­»D+.íR§NX:*Äg£´&¢xä egEÖOï8Å>9ÝVp,SøVaÔE›OùZ(öJ8”ÕÙN÷Üàc¼•öB[<–IGL¾JÒ‘õ+7êÞ‚ók÷3büB.h “~ÎÕw¦•«ðã²oȈ}´å†=bLG<Àu õ&—Åäçïô¥·5Ü8c‰ÐàT]ôB‹¶âu1°eÈ“r«ì½g[ Õ)ù½ˆv”É väPX%HóÅ{Ä•k%¸Ò´x æ¤ó܂ޑÒÛ¾õ¥½QøB”¾w¸Ë‰—¸ÍÉ[AÆDïh¡ããÁ9´)È,Ó6¾5ªßyÂéŒÝ{Žt¦\t¶$ò‰úG¦{kò$È<ô†À™J@(=· ]T_Ð͵…d†P8ÜÏyà3 Ó£JÚ¯ ¡‰jÄu*²ÃÛPQÊå~B»7ÛŒEQ¥øVr/#ìì¢ÜÊ69£d­Ž²4m»¸-%7 âqÑyî¼ÞvKuUŒñ²Kx÷ŠþEÑRYÊZƒ4ÍÐ(¤ SÐ0Z%:¿|0Kè,E«Uk¬CT‰‹ÂÕq”ï¯SüCQï‚$¥¦;±“b }†q¾—œYCš‘GY!–âb`²2΃Ôôc´gòv:Ù˜:éïŒ ‹ÈÇEˆ…ô‰ÖMˆ3kÅò'&—z†ê…&n9ö<{ÞßG{abL³óPË«—Z”ÓÉA”*ìÜ©àz `vI“ç’“›@F8iÆÐ,\¡æm°" .±†,®:Ë›@ßÚ§Fí/éLEvÆ!··’5ݸÚGEÑÍCaO£*bCm¹(#üMé§B ¤‘ Sý3›[fðM«f°{qSð¬òˆ1Mï Qµ”P :=Œ1v(}+–ÜwÞkÕr‚Îì²C.»ÿ¥ø‡~fâ¸tV!W~ /¤ˆ#§nCXLö¸Ë²5EI†ÓÄÏ©ëº;šRLÙoŒõøAž 4/bwJ›õ¦  p¨Ñq“Ss¹ˆ™ŠAQ¢-ÖÛä²»]¶‰ÓІKh–ÜÍ$1w P’||HÙ¼Ëvºì>*þ“D™´&ë3–»%‘dýÈNEʹ%puõ%FËCeäR¬Ã ÷éK·Ôl ƒ§?Þ#ú¦¸ìAHÒ<ÕE4+×Ï/!6t<=p¬ d“º5ÆbÌ! •¹6—c„±“ÄžÓ‡B$ µfLá\O­I¡f. gìw‘sI4U%„OEßBtk'eJ ×v^Œé¼¡ÚrÝ10š•7ˆÒÛŽÃIÈNÀ-G”"EâF£íÉ/†ò5J•!o®ru þ¶8qCjÆ\·p“cé  0¢þ„v+‡Z©õGÈõtº˜‰¾gÜÊmÅ]THäóX'rœkÀŠX´.¸ÎÄ9$ PŸcñc,93UN-TÞK¬ÌÒ&4”“² ¾5=D.÷=TKHAÏUØ3èD.«š.¡‰»¾íCc«E×|”ð±w÷•S­”Y„¶5–N“7„š@)MSÈâSNX¢ÏF¨˜ Âçf<¥gÛÝÝíüü®Ø•> –?I±ãU¢[z²(”Õɯ=xhÏðDšh6f«~Æ[Ê&½+(Æôó,‚À.…BÇjúWS \Ô^„$T$ª–f÷¼T ég»hœ3ƒ&Î^jž|¸ Ó¤Óψ‘tn!­1vñëo¤–?Í…æQ‚ÚñœË9µjYjÑû„v²{˜ÑWµµ¶7çbóªÛO:‰탥°Ü(Péɉ1Þ9tÑØÚ…HîüSÊ]#@¸Eõ°C–;´g©ÿ+&ºsYè¨(íIá½?( ³‰4‡„ÇÌ]dý=V€GC4› Wn(áþAïÒÔÛfò25¹r+Ä)•.ag%h[ÈO…D3:Tgo}¯³ˆÀóõxN%ˆ5˜¤6ZÓŠëÉPV2PÖ‘¨Y*âÚîIŸB"£‡,:äG*uc@Pæ…ü%»ˆRa$Ò)m¨­‚ô>œþ Éàxé—›8'–R<ç—â+ؾÎó¢Ï:Œ•Ñ,è-kþ /^BÔuFŒq5S€gs%DxDB#ÊÒ”èVÞ•b5W(-]â:šI¸ã«5‹›7–ÚÄî[‚”Í8uh4ÊCÙÛ‚§%Æü±q¨lðBªƒGù™><6ún¡˜AÏ ÊSm–¹w¢§Q™¨Ï\È'F‰ï-—6Ôœ8æÚN@ÆEó bžµ`(tk5Ŷ™Q `¹¸€¨¤ í%1½©›Ò èUhˆÅ‚ƒgwY¶¦VZ4ùZÍúª£RAãö,¸´ÀºÀP—¤Yš\¬QÆ9š:%YHÈ‹2É¢›Ç²rXÙÕ®“ØMñ³]‹à¥Ø’_¿ÎîvÙ‡ËÌÑñǨ]AšÎML¿ð —àÞˆ˜¨Â‚aÏ[À‹Óa”gEÓ èç’s Ei±±(¥-CÙ«›2rÞÁ7!&(Ù@¿wÿ/«/çƒÜöÖ¡i8¡Û¾1éñ®c ŽFgD/(¤”Åó:A^A®VP:(h]!-?r¦"Ð!® UxVÄ~ár9îhcH¿_mk3ßlÞe÷¸ÖöŒzCöqÎåƒ ŒÜW%Ë ét4)UÙOwÇÁƒúþRTú’…‚¦[6†*É*úlÔ¢ JP<*éȤÍ\''(+µQÂmrÙã.Ë>–}‹ôRð>5Ù]/YEÄÈjgŸVFœ;ŠáÕpûL¡Š( Þ—ÄþâèL"O.7<2ÓYh}‡DŒ ‰åx€’æ2ï4Ù{€Gan³»]–ýj–½'»‡ÃÚw³./•ZÏ3œ®vqÒåu!ÖýÑŒ›˜éÎÒ2†%õ,Ô6•:°Qbc,.5úŒ}¨æb†$Ë µ²t*øñ¼ ™¡Ápˆ¶‘Ý㲬?À³:–Œ]ëJ™5Bú,Ü›ê¿:Û`>lQt4IJvÈÓZâÍUÀJôdrMïp:y1œZau”;G§iŒYWðݤñ„†.€Ü“Ý󩬢Éaç+4¥h‡:¾E-K1‰húF¬Ä=1&×L9bóFчFiÉ«(QR ! …õsá‚Cj¢=r4›vHxBSUߣæ.R@EK;å&Ÿt©Æ‚‹3ÊÕtÜÎ$ÜKLtõέXP)§?° ØÐOÚ ªÊ¨­ q·òÖìnþ‚¶ò¸Ãj@A˜¡QƳT Ž«ëÇÍËç¢G¦cÖEuBÃì&^yÍ.K ÐŽ¿ðg¼ú©\tÝÿ H ‡ø"ƒLÈP¾ÆxH™:ÏØb•Á@ŒZeĈ'©5y'<ŠÙ1&ÇÊ)Ö1¯S¢Ó%ÒÀ†ÆÑ-?0´¸¬".Ersb¼ñ¼¨±…Ú‚*…žÑr™5M{¾6;TAŸSž4f4†Dî ¸«¦~Ô‰ý*·(”Âdzc Ò}àuTèrº $FÆd`ˆÖ‚¶bqµ}-$îÁhÀÕðîy¥÷ŵ$ÔfJb,}¥µ™!…åE×§ u­§"ÔéÏ XÅe=ÐËžBg†Òe˜ewA²×üüªó iØÄá wWh B’\¸:°¸—Ø@"Œ=­„ûPo‰ཎ¹™(€ãó‘›y8àP­­FLjÊw@4säø?ÎzSS­t\ÁnîqÙ»]ÓÍ'ŸÁϨvXl,Ìk$´´­}1xú¹©$}Q¤iRnÞµ¦7”’³“ä4w“eŠô oµjˆØ$¹#è‰8 £UbùQÊ’Š@`!^«áéþÌnc¢3ãÒԺ逻 bë˜xìo¼I‰Ò Œ¦6osç p¥êÆx}&r&-/,»”B…<1Éí‡&%€½7`h%/€Ý€8ƒÑtä9tÃú!¥R„ IDAT@ÁÚQt, “OÈ©¨Ð‰Nálȉ1‡Ê‚ƒg0£Ù7BÁænª4‚p1Ü‘“Ø\ݶÛ$ú/¡çø ³®Xjà¥,•‚“¥šS?> kŒÅ‡Ã¢•#.šy.¬&ªemPêC% jˆ8ˈE}AH›+'ãñ÷¤¨°k è¢+¿kK¡FÅ%ƒð6³œÙ ÄT – Gw%gQ 0Ù5/‰·Hg+Ôž(´—5ô0NýÑÉ$QíÏÅèü ÉR›ìHš1|-Bï¢aJI©6Šêv•%¨·™‰±äÔMÜaýmáoå¥ÔñË•8 Ð1èhÙq\|bØÇN Ÿ=EKHµH™WPö9Î'$AÑΘPã>îZ¤"ƪ—ÐÅ~uÒñopj±ú’W¢Ó…D++‡÷|)9WÙ³CÁ×uú†„J\\g² ÂÜ“®cjˆ`zrbrX£ ÝFQ‚‚8¯?²ÊèŒr¼Œ è¯ø Ò4ÙS B™8uWଶç;©¦Æ¤ôû0 %£s‘tôß7r¿±Ö|ª”箣‡m´Éðeåð‚÷H`SY­/ŽhûÙdÑJtãõ$Œpé‹ð¦¸äõÚ©V¨”À¥C¢‰¢A–&×{•K7¬1ô[IÔñ)ËW\Ìœ½ç=Ñ%^>6ÛÄà¢Çp;Þ¦YÔ»@?Âðˆ¯~õ ÿiM‰jÕ$¤ËÈÇ6ÚŠðâS°üØ"”Äðœ:.Ÿp™BÝ<¸8 †ýÌÒA¿(«åÏ:yƒAŒ28%–yèDg¼ Ô Üz± S Êé*¥‡Å¾d”šˆÚ¬¦¹O)Vån­¦›tT5Vd—Ëìk¯gˆ+ÆÒ©¯Šˆ²Ø•çêäâ3bÅÂs‘›þfwm í|zEF8Ë«IO¬­Ùb)—†´—UXåì §ŠŸ\¦b'€Øõ #¸u¢Ù•ݯ$ÊqÒ´£¨èTU®vV­¦b„µ—;FÕê1æÇ*,z‚PR¨›¼ª40â*Q°D¸v@i(®l5"|8jm⾬4¿`·Ìñ%À©J·NQ]×sÙáMÈš>äJ²` ÁfwÅYš˜ŠìJ4oÁ£ÉÈÅmy=ZÅ\¾ˆº$Ä’ Ê-ö„âÑ*ñT·Ž<µÅ](ª¤PŽ4 串7äʨý—dó.›oÌ–Ö‡ŒŠ×ëÂÒëÒðJ8C ! ©œès¡fJh>§“GDÅBy¼4y…»CA× íhˆ‚ªŠ°n[—V¼fÆš9ý¶ºŒ}¯Š{uج±Xò ÎP„r—+ʾ¥d{­ÎhjI%hÈv‡‚8’î@êòe4F£o0Æu¢€+(Ê!Æ 4¥åpІ ÅCôMk¨­7¶$QÂÒ9¦ƒ¶ Uqh|/^¾ï‡õ0tu¯S}µV¶‹n¨¤Ã—¸”ªVL€ $v•k«ÛXëQ¤„à‹ôÄX ázºñ!ç©=x+M ¬¢îy~Qã’§E»÷ò24K«T*¡f‡ç["X'0É‹÷A¿Uâ0{ƒä±±b±¿šc©ÛÖ]Ô§Ï€ØMÏB'OãNÐBR€ö¡,£ƒÕW`%,•æÕ%F#Z¡Ï1þªUÐíã¸fF:Œ±“±1¿RIw(øß ö>ïÓ[³þŸUË X¥Pë“$4u€¡-ÐsÈ•S*1¤Xü'"lªêAð ´[…Q¨‹‹1F$1"³Öñ  eaÐàµV¡Ó[¬¦¤Ü–ž"íd—µú}t`ÍG9_šˆš\«‰N® ù,tÑ5]r%n Ѳn;!®Qœrp+ž7„KQŽX6t,-˜ÉËÊë|n⌞8+pÚƒ0 (óÉÕ˜¨'ñ¦±ëѽ8š†#]¥èLùs·*u:1¤(Uq.°––¿+Á¤Ð‰0j«) mçGE¢Ì'±‹7×̧ÓeIbÇÒM7ç8óŒ†ÍãJÕ“VX@ö4g•¢„âµ uÆe%ÒѼïNÇdAßçºG«áø¤ªç–Dp$ H°ŒUÈÍãøZ ¥n)”¶ˆ:«É©M=x7qt$›zÞ‚ í…fžk‹zZ§Ã([‹·š<ÆBÚ¯y]UòuÙ)¤Ÿè'¯¦.ÆôêHp1MÛ_æÕêo^6Ô‹/6wá¹Eˆt¯ÐËJ!’¡¼ÅÄQ‘‚“‹æ¡c@ ˜ˆ‰aÒÍ>¸êIý=Ì£\188*HÑañ7ÐoÒŠÙM1Ùéù´€UL4ÅC瞸žCÕ4©™Õ.É,G%”ç¢!vèöA(û#*‰[ÝÆì>fÁ3 é³ éì…ð2yČӡsÿ8}ó z 0N™÷Ý݆kV•ûbwÃcoÂù.WB[Ò϶ýÁØÕÓ:Ãw±ñe °õç¨Ý½ÕÞ¾¼ûDâ˜pÙ© ¿QVúSkÎ7äbŒÒw’}QJ7¿ ©ú Ðb¡tÐ ñDãk‘Ÿ(/Îe´q5\nM>Âm6¤ÅV·1»K# ñxç.8 /Z¹Ì ô|Ñx¸&|&Æö®ZAi~¡c?‡ôü –6»è› s)f¨º &ЍíAŒ×ª5ß'z5„$–ØÏÏ—Ù=KLóܰ¨hòzƒRc¡1Fº]LÏ<–$¸ü:â>Ʊ4ßáÊ $†ñC›KÁë7Ì>™ðÔpô„Ô$¯nz X¿rÖo×ri8%‡€:EÏyçl):“I½n ÍU)ûÏß ’ESÛs:…br7—ëß¡03t@(y¬–Y‹Z;»U–%À¥5±ã"U(BVœQmEÜY³–4è¹Ã©˜8Œ&Qõ úˆ„Šg ÛLGöíÜ?Ÿ˜T¬iʶ¦³Hò‹¹–&ïÉ›ÉÃ!jXp%¿{fJd4”¤?•sDƒÎËìaÏg=d‘çõ®$uœÅÙÈ5Æ×ˆÆmî wò´CÜ:T5Œ‘ÄØ¥>”ÌøïŸ= …ëgàÓÕ‹€é¡h†ûÅáoY_u"”›+¦7;²š ë&é¬F œG<›Û)Ujç@D]¡æJ {sprl5?w9M„³{DÙ<ÑΩlW_$¶¨S¿¶º˜âfÌóæ$º<k@~¨ñvŒ¹S?NÛÿÒÖrྠß›æ 4…\+'ê*„üÄ Q‡äG%¿5eé•ÌX&ù œ2ß~¸éé$ú‹°ŽUËÏÃß*çBBξf}ê fãz!ꮀÅf×3c°a“&Ðécˆ¹ÿêôãWÜcW°’R…»Mí…àÄEÏ_–1ºk'’}èyÄcôšÃ¸¹€úŸî{ÅÚ˜Pª4,û¾F3ãs/ÚÞ´V:q•¶Š‡×PT›ÁŠ£"`× ²žÄ˜½Àš½™áÿ‚!îÊ!¸ÆPòÊ=ü †å£À+=3f¯] ©å¼ØI —ÌÑe8i0âvÊQ©¤ *û”!«0€Q'$]ìç‰ö«'Î&R,Jñ€®áàÍOº ùy±A- ൎƒ Ì¯a!’§ÞsºLgäà?áš½¹~ÛæžŠÂ O¹& ƒé½Ûð&ÏôðÀGoYËV;ábÑVh©ÁbÐïb§}<8æÕОÐÅš=dq †(úß®€Ã"ŠÅ&%zœK§¿EduÔaÐëš”%$£ŸLªîcQ3¦ ÕMê :~& À¬{¥"N("Š2-NÚl‰¹‹e¸ ð2·3H>’Lê°ÐÔRÐcÍtxºy»@4Æuä)Ÿ$¯vém­ô+m›„ù…²Ãx‚5ô(déŸÈÚì\pÊñ|hX0À?]O­ÇX•‚|w›Ç\Z&WE*Âm•v•ˆëìÔŒìËœmºvN‚w̨ÑÐ] ÂYü Þ€X¹c“ó‘‘Óš£Ì£Ž¯tnpt˧!ÞÓŒ´³PšHò>8vAé€+}0—¨mMEi¾1)rsD&ö? Ë6^•—ò犈ÍS¶œKü¨x_ÏP!cYNsQ—0c”*w46ªéÆðSoLW•¦ÑÈÀ„Œe”¬/zÓÌЙý(….ÎŒ©Ëz¿ Fõëƒw;Ä ß1_šhóðÆ²¬hÆ zWmm’¡œß+¾!Œ‰Q`Œ€R$m#b!çé*îÔ±Y¤'&ÊœNäálh#*qœÂ…€”Þ«ãŒiò6¯€ü!¤I®¸7Bû•…PØŽ¯¬ö£<4p =àIç±O%°‡WkŸ¼‚s2˜ˆÐ¶QÕ–Y Ýï¯dç®)Øâ3&A±òù¶½\†x°2lXÅÛ;Œn4oæ† Se"’èŸè¨ÂŒö‰ü¬Q–£ÐÔÜ®[µ½¡EQ@›†×Ô ‹P´‚…ö¼}…'@,ß„@Ùê7ÔÂíP™E/Í"Ôð÷ÿ;«™lòK…Ÿò^ŸYk?ò[G3æW$¢³÷ƒÛ!Žõ‡Õl!J[äÆfɲW“+j-q 3†MêÏK¬@ñÛƒP:šÌä=¶–åyDi‹k8ÝY‘«ŸôaÈâÆ S¸º;Yn G]€Ã$b~Á> ·Í»ÑÅ8‰ú=S°©Üгzõá(¤ØÜ†.KÕ @ØÀ9±E¦©øô•z°XTj 4Ë0לÐ:4?XÎÿW7¬I#?ØgÁŒ‘<ÐsòóÐ) IK¿ˆÂâÌÖÊ`Ãü?u=eâ3+^$º²CšIʿݔ-tÿh,ÿÙÔþBh»`Ü€º`hÍ‘Öê¼Å ¶5#ñt#ÊXœUpä=½eÍÿ‚³æ>G­c²Ö _VÈ;ú9c3§7ÀcãžévEMØ:eWü)W ˜`ÅCgM#ÓwZ÷dˆBëIYêY«õ²®KªoSÀ%ŒzÍ"ýˆQ ¬ÀPú§|¯EÈG'Lr*‹|cƒ:•G?:¯óövo=# Ø(;Ed6 V½‰Sô¡ö€{B<(.¿<üQH…‹¥è+¿—Ó``϶ :±,+~gVŠØÓ9™)ÞðæT[¬‚0ΙÀNÆ€k˜± Ý!bg‡×µÇaéÛÓ¤ )¦ž \iZ20ȼ¦Æš(*GÊ%ÝšYôöjÊì‚ãó¶æþÆ.HíÎј'üÛ÷‡¬¬¬2@´‹ù‡]6:ËnVµa„ðpaº©`u¿bq3‹Œ¥¾óÚp¨™µ'rË‹Á=¶ø¨°äí§vÙU1¥£ÿ’f,Äûgħy6ωGÎsö2c&¤3¢¡žHaA[’ï Œj„è÷„ÆÈå3+#É2ߪïÎ5'úLž—Ê{ù™fDÛ Ø{T„T¼D¹Ây†³‹@0·Cø/HÂÇ#a+r¨3#%ýÅÑLNø¦Ø]jØ °·3 ž‡_ ÞHSt]æ!¯gÆìЬb¾Ä‘c£ 2[GôÞ¾NL1+­„9zÂÊ&²–©¹›y–_¾*)&š Ö§­@¶¨#Vã+¿ìæK—N׫ø"4O2r¶V¡:ú$ã›Hzè•XVn3eÿÜQ•†mËÊ »&N*F‰kùxXC©9?À,ƒŠ¢]í‡<xÈWh+hØÙÄðf"\Ã%F×ë0è@UfñéeÒA-Ø¡<ɬӛׯ¦pI:Ô™ß£Ò XfZ}ÏEBú?ô›ùO’“)ÆmÐnÀƒÊ"¦ÿYæ!ÓJ1x°šQ<Ë ÍØR®ëi2÷[ø“‹žžóé?ó"2‚30 p¡ìSŒg] £½.ƒ}G#‰¤²o×)V\R36%çdÿÎm£±Ðñdc+™™K™jM׿Iû—×’«1Vl9Òá‰#t±·£Œ¶‚•ÀmbnR¸ UçšP.Uß¡ïÒîy‹@‹CÛ‰øÅ‰v+Ÿtñû—.ßÀŒ)|T懜Ááy¦ —÷ã‡÷ZÔàÓˆ©*‘L±Æ:I,%ÏQYL™Æ¤ °ÄÎi½Üû îÆàÈ&ëóOº½¡”]¾¾J¬ç½éôb¹‚”Î6"2§GE늫† mð7~MG²LW Ä‚åüúö xà᥇â&f,9§£€iW4¸xf•t€º(ÆJ_¨£)ž®'Ò“ðñÀ ó¯àŸçžyÍüvÚ×ÂY»Ë<ý-+7¿çN>©˜™i¸¨g£I2_W Ó(þ’­Í@Þ#éØ?ÌKFÏ;|Ê8£P5@î5Žÿþ¿g¥7õüþó§Ou—ºÑgqÌl7â~¨ƒ¿¨z+Й®ììý:o¿y¸Üü™<0ZÁL% ò)¡Ì\(ì0 àNOµý¶hy¶j¢ÃÂêdU¿NfìÎ!ûɵÇfr7ÇðØ‰”òñ“ê=}<‡.­áüÄÅ`zOF´ -åÖl*"¯ ¦ë²¾³\œe;\Ç_êŠfŒN¡–¡¶|oâ›ö¦À©Ît#±0Ù\MG,¡{®Sƒ¸ógŒ04JçÁ͹åÃîè8‚70jŒy<™(žŸwÖïÁÅÄo£š%ì œB¸/aƤ(ƒJ?ë0®È‚· äÝ©ª’´Uÿ£’šÏ©žl¬|ôÅ)@gbØTØÞM0W¯X¿RLJcqz$ªú]>el¦îú <Lÿšwü®_´½ìYZ+®'é³’ vÜ|7t[íäRúÏ’ñSÔÔ9›a3I ýáûåµCj㳑¤À·ž;œ3ãc¿ÿÑÔÀÑÅ2†y³&(ÔÄRÎu¦e§˜™PDæ½B¦XÕ(cS´_©1ì¶£k!"ôÍ'Ü= kFÞÊÐÌ9L>ÑŒÁã—ò à|ØQЋâ¹k IDAT&ìQúa£¯]gµ’8Ä™^ju- |¿·Ž ûaà{ON#ò7éç1îÀøº¹1üÊŸÑ+4hS”,`t¦ÃFjHk¸ñqsJ´q;‰MOnH 4I>öp ñÙ§ô$µqÒõ¡+Ï2`DˆÓ§´?'éC»˜*B1`‹$²òLá\gÓ(R:lûG—`zS±òùÐØÉÌ䥒ÞÞ8Ÿ¥Hž ¸ùa"™þkÅk™15x†H3î‘\«}ÛÀdgº¿3Eì³èA1Ö/Cš¬&·u¦¤Vë±…#fxoœ©È¯ËCS2w)2OØÉÊÈ%í}cxîêñáÀw}ã…bU_Œ36ì1Êëw5+JtÎ'Ì'Éš†³ Úq讳â~QjZƒÕ7‹£•¢š’“9é¹»™18ˆ•pD è²äÈùµ C”÷,ÃZ[¸x–üÐĺ&+D n¡ïôcl‰0%Ý‚äìŠÇY°~M׫~¨n26“˜²)K£cJðaäýBÃMÉœAIU%ë ôÌɬލ•Ç“F¿F”êÜäDG£æ©wga¤ œoϸqg#moÁ#$(Y‚ L?;rØØÌ²à Kzpd dM4¤ðñ`âA”5÷ÓO´ˆ®–wüšÓ§¤wÔ$ÇA$½^€•ñžocÆ NÚ"l[z:8%Dà’<ZøŒ(¹¤y§GŠVU@œãY‡ZÝ–GYv ¢~n‚Ÿ„S1?úþfl¢3˜Œ‘‰“´ˆç2¨Òê—Ñ=‰åèH¶E†(ªe¢ #¶Ò{ L(æˆÆ+þ·°áH¬,`<"w3õ‘6c®Õy‡U–|ûg&¦©A]r¯£sZϲ…N›”äÐK>§¡\(Äz¢iÔ™ ŠRgš>K¨ o³0&¡K}îØLúá¤xˆy¦œ } ³ L*fß1D@óž¶D΂yIêH±ì€„<ãÐ/Ó'ÛÍâ ¥µíÇh|ÇH1Š+[&ÿ.T$ñ2¦=sbán3hF± ¥ƒñó¦˜ÉÀÍ®³DÀXyÌEu¤d0™tEhåï9ýYZm à¤m½[Ø+°¶¤Ý|X˜@ÄÙò¤ãè}Üð‚gF,âc‰hw(çˆk8‰åéÄKxÏØýNoê·ùÝwŠÆ–nàÕï¹ ç| çsX@diäZ¦›üĬ,ílhcORÊþÀg]Ê,ù-=‘½)CL =RrŹÞÀôõYhN9<,ufn+ñV8„SG‡_Ñ6†Œ"ðÃs¤»‘x  tYh¸((Dï…-– Þ‚˜dl‡,õmÍ<.a;ªÃ{ˆ”èˆÕ¨²ð¤ÎBZU×Ô’Y½¤ŽŽfØ`M­nâêzŒëy i–&åÞщ^ý„’‹bqvo…ø—7c5ŒÎ‡aVoµmV±4&Ý°Ùæ‚–¬áM)¦žQNcç(ÅZ‰ŒßÐÇrîXƒŒ{$'Ž.ê-M×]ž° ûТ‘T$füf9w¬Ì•bÝlÂå þ«¿ž‰×7tðÇÐNG½õʤÀMxDú³:b”LZ$ËZÆŸc“¡†D¥sM«C›1ÕX¡6Nœ×·`à„ J礛¬`Ø”J!Ë·sJŽ’["%¥®ù³ ’Ι·8,Ð2×ÏfiÔ6c+z.QÏ›U«МßÓ¶ÇÍ…Ïlìæá5ó£j*[úBÊ]d«^¿T24ß é¸ˆÞ›b%¥N3aWL>SÜ:4–¸Ó(Ñ…VŸ2†-„‹® .lÆ’yáPõ…‹§—1¢š¨>š‡2ù«éë0üîÀEþ¬Yª2„1‡E1ßê¤7ºe¨rßöIˆ) ³š!Wì;SÀÉyÃhìÆbc´’¸€JŸ7jáìÖ¥YìŽg®5Q\®³tåþ•é\Ͻq1p&ca%̹yEñägà­9U`ˆø¨™äP9n £o¸ÏGë\Sý¯îØ™å^áX&]ÊhõC3¶8KÑÐ: =N´ê’ |m+¨ójˆêaØÑt7iõW "û«>ìÚ|’g¹KÒaKDóÈt´%µ²šÇ/ªUã‡ÎjîtÒT¿µ¦×Àœ™’<[QûŸ5BïãÚŸY9¢éM9@ G|6g£ôð,‰¼H:èñ,ÿsè/2CNúÑÁè«y'ÄóRÖÃ@ÇLÖ7êîõAјtÓÆËÔûûlB”NF¢e”Ìœùž¡o§ ‡£}Xã×JÏ¿&¥‡ë“ÄʪK°žJäDýK,»R0h\O¢Ò™ûб™”%†ëÞôªWIù} ›2c' ž!ì]ìviŠra¡W8©x‹Wû*Å[Õ|—hÛ¨(dzldö‰dTÑn¤;ÇÃf8¤3»™R`³Sjú½D‰³Q„g“ d(Pš°ví¢^‹L–2áéâPҪΑLËNÓ’ÈùDˆÖ±!ºµtkÍ7t]ï1*°3¨2~nͳ1hȺä›#)Á¨´½Áã…¨¿²ÇSŒöûat}Š4RQq¯Ó°ÏpL°NZ¦öÎ5Q0@4Ã$Üô,ypFâ\O´˜ß •ÏŒa|ð@9ÑBcÛ[¤?—áhdžE%žB´g &1GxÎ’^¨ýVÝÂAÁž°4ãk ô¶JÉ6G®éª¯i•yoÓTGc«x‚‡ 4£fnY¦.•165Êhº6›> •詌l¨èIBý0+’_WØž„s,kd%ñÄ]ÅþÝÍŒ-ÂHíw¢ÏÌdä¶Âþ¢±ó-\ù“yˆegYdz×ñë.s?±V„iFÎ%‰rò¬†ŽŒ?CÝ;Ýcn3v ³uزé^-üâ¶kYÐPjZ€#§ಟ×Êà~e5Ë.‚Eª§´'z6ùr N]ËP}®›2ÉBÌà€g7Dc¯!w~(×&θAärËòº®pŽ€¯_vN'’-aN›ŽiþfÉÆ{š±76R‘qRl¯×-n#àRÁaÚ*”`ñßR;™¥±zà¸Ü<5¬¾°*¤Ô,3ó$‡§rGÑIxY'býúz›1ð«„*eId®ãÆR@€ZI·ä´2ÝÐþ«qg®ÂVÿ fRRŽÖØD‡e…’1÷’Îð!øŽ­Y<†s˵",”þÒ¥,üÅí‹ôÐóH±[m¡ ™åê<Ì å®¹ËR3­¦ÍØ•ìÖ õŒ=÷ÚÄN'МÂ&É>j¤ Îy¢<›ŽˆËœréˆ(§Y'4•R2rSfJÜ&—øqÑÝ÷z÷å®(Õá¾æçl +F)gÔ32¾gf™(]üöOC¢dºE—6fyö¼š:º·÷¶SææOåý„mƊ̘s\=Eµmh† _§›ùé$s€¡xÙL/e}VF€} 8-ó·k‹ÕfL¾l%tï‹î›o¥Ÿ ëæN~î¡ù¬lVƒú[& †óÆüT2ÄCÚVg3öýßöçíW8l:üÛŸ·_ã?ÎègBäÔôB}ý9kõÜ©ß×ççí×çBe÷+ùú“èšü¼ýúõç¿ù+ãú‡¥Ï}÷×<»ÈÛožmË}sýs=_Ê4 ÑLëƒYåýöûþ‚Ʋ¼þÐXŒ5²/»­7+õ¶ÒHEÅ•‡ =؃̰¥€>þ¦yK³/.HcϽöí(ÖgVæy©þ÷J4ö¹HÅhÂ!s,)e¯ÐÏ&d!W}pá Î%*˜åÙžø~òÌ;†Š¦jÔøULE›´6cˆ}ºÊ}龯 )\“Pླ£[c°þ/Ø!*>9ÿ|ÊpóM‰jãÔfl¾[äÄ‚K]Hy¶hŸܼ͛€s;éñ A“*Æ¿y–†ãôœ+›ü–6cÓ €º™ÌÿËC ¿“3"4ç…nE’¹ÖYºì¾Xî×ÿ Æ×ö ;Gšåhг"ÞÒfli#g ¸{¶²VòÇûþÍ‘—0úÿcLê,@‡´9k›ê7ÕØ¿lðSL­DãûbÔl3Ö ÷Lc9£Ìª–3 Gÿ°¨f¨3ŠFÁð.× ”Òé<¢o+¸¸û¡W$H^•ãkÃÓwùÞjö¼ÔaÖŸ¶ŸþíÏc|ù°OeøkûóyÖžµQ“uû~»Ý”úÖH´ÿ§Ç·¿¶£}ÿ™­büyæÊþWc‡ïòý³z^ÙÙÂeßzß–o;×yh.þˆÿíƒñ"öe3Ëû®çcö&Þè±äÙYä^-—–Ü·´´´´´kiiiiii3ÖÒÒÒÒÒ’÷ÚØ××W/JKKKK˲ò†áøñä×¾¶í‡ÿÿÿÏÿÓýgͽ¾Êï(_·¯í/?lùÚ?lyþŸî?kîUö:…ëöè#u‘#ÕÚïÿÙIÅ–––––»H›±–––––6c------mÆZZZZZZÚŒµ´´´´´kiiiiii3ÖÒÒÒÒÒÒf¬¥¥¥¥¥¥ÍXKKKKK›±––––––6c------mÆZZZZZÚŒµ´´´´´´kiiiiii3ÖÒÒÒÒÒÒf¬¥¥¥¥¥ÍXKKKKKK›±––––––6c------¯òãÉÏÛö¿½:ëK§þT-ý©>î =–{ûç–––––ËÉ×××\eN|€á¥:©ØÒÒÒÒrai3ÖÒÒÒr7™žW#>ÀðRmÆZZZZZ:kiiiiii3ÖÒÒÒÒÒÒf¬¥¥¥¥¥ÍXKKKKKËòòc/AKKKË¥åëëëõ?ŸÐ¾çÏuÀÅ}S×áM=Oòv)ã¥íÏ-----—“½yxU÷Šnè73cÜtø$‡—¾ÔS:©ØÒÒÒÒ‚N–iL^ª£±––––ËKAþpÙ—j3ÖÒÒÒrùÀèUõßÃ’ù_ª“Š-----–6c----×–3ˆÄ‡¼T›±––––– KׯZZZZ®-Çc†8üᅞĸT÷µ´´´ÜÐ’9¨¾/ü$ð¥:©ØÒÒÒÒrai3ÖÒÒÒÒÒf¬¥¥¥¥¥¥ÍXKKKKKK›±–––––O‘ߊ¿ûýþã¶ü§îEiiiiiYY~÷û?˜±·hiiiii¹L4ößÿõŸ½-----—“¯Çãñwÿ½-----—“ÿ×ù?Ri*ég`/IEND®B`‚saods9/ds9/doc/user/binning/index.html000644 000765 000000 00000032363 11555611700 020237 0ustar00joyewheel000000 000000 Binning and Filtering FITS Event Files - DS9 saods9/ds9/doc/user/binning/jupiter.mpg000644 000765 000000 00000517744 11222161077 020442 0ustar00joyewheel000000 000000 ³àÿÿस@z¿óý)HоR”ˆ«ìî¦Øõ­›79]ÖÊRªéHоR”ˆ«å)HоVg7î¾ve:æÍãªéWÊR‘|¥)WÊR‘|¬|û>¿Øß³?aOœM6açþ¿ùýÍ'c¶V«”Uò•›3¯÷┬¬Ø=oßÕÎ*ùJR"¯”¥"*ùJR"¯”¬Ù‡Ÿúÿç÷4ŽÙZ®"¯³ý›³öÂû~Øz·â5])WÊR‘|¬ùÙ7µuwÁênú®‘|¬ß%{î¿”µîßuqutˆ«å)HоR”ˆ«å)HоR”ˆ«å)HоR”ˆ«å)HоÆ_ïÎÊScÖs¬Õ²•WY³ýû/ìÛñYûW(«å)IÅ_)JDUò³íÛý»w»|ør¿Â=]"*ù^IÊÿ,suuàœwfsw}Í“q»|ëν÷ݾ×W(«å)IÅ_)JDUò”¤E_)JDUò”¤E_)JDUò”¤E_)JDUò•›¸óþ^øîÆ“¹ß/UÄUò”¤E_+?fWïÅ)]}ørŸ¿«¤E_)JDU÷§'î3íÌéÝ8+%…êŠRQWÊ[ŠKãR^w)MÒxÎÍ™±é8jÞíp—‹B13|ž‡,¤%9 ÀpŸ’ìý™A~~ÖL,:¿ËÒ÷À;’‰n“±|–YHòrÂ8Ò¿÷Inÿ`-®±@–” ²Vt–Vņ”épÌ3¸`ÉIJNÙ{º3=Ì3°ç_òÿÙ•ûñJW_~§ïéó²þn)jêïƒÔÝõîˆ@ †C%òwîoù d!ß·~ZRügÛõ\ˆ{%‰JŸ±É)Õ¾I¨éd£¿Å#/fW´èWà3Š¿ÏÒ”ºé«å)HоR”ˆ«å)HоR³»vûvWùöâóçú®"¯³¹Ÿeãó©Ön0îgWJDUò”¤E_+3›÷_;2FóæñÕu‹~¼Í›2Ýn·Ù•(«ë¥)8«å)HоR•™Öÿ¥3fǯºÝjTE_>v=]ÏøÏ–ÇžwS®®”ˆ«å)HоR”ˆ«å)HоR”ˆ«åè@v¾BÔ—Ø­•¿|®–ù t­LŽºð¤ ’Hï°ßÕ·ÌÐé͹ÝbÙ,7d}5%\’ùx0±…rY ЀܞÊÉɓԄÿ‰e:6Bf¼´aç‚€k]_È(7p*MJIX bRRŒmòI©B] 7-nåâ@jyÊ>ÂBHÄ•ÐÿŠÌ€ÏÐQa˜nø°äaˆÈîžÈ‘®„\ÐËÿ!!›”³r¾b¹Å¶ÎZ@ÿ–XÂ×x$÷Ø,Þ`€9:¿ìø”4šBFãJÜ7dr÷J‹/’PI+nå ÛºèkW„’”#àÐÜ43±hßâaD¯º|5ÖVJ>OÞù ˆØ55ú~néNdþ„¿wÃîoíÑ“‹Ž”•ÆŒ|VFß û÷Ë~¬ô;üz˜áÂE¼êÿ³†”YDÎ’f(¬ZwÙcp Õ‹%ü ÔàÝ“ò~Œ‚ÏÖ€TÅüLGè/”3†Rðݹy%bÙl3§”^éKmxpÔ–‚`aeðÇ`†'’ݹ@U!£C2Æ~VQ};³ç×Ô¹4 ÎJäÁ€H7£“„삱|a- Y(Oû'ä§þϯç[þû° ‰A…ôîZ %`1Æ—ÑŠÙ%”É)‚ ¥£#¨¾¼PO]òd–M G+±1¿YIt§t¡(ý,JÆvè~¶V÷¾”3¹ø^ ÖU›¥)z´Uò”¤E_+?Ù·û?l/·í‡«~#UÒ"¯½»’Tï÷Æ36fe­û›„TR³»vûvWùöâóçúQW×X·ËÌÝó-ÔËq/™utœUölÆþ¾{ÎVÇcêéHоV2ÿ~vR›³f­”ªºDUò”¤E_+­{cû)Ì;¾4êºDUò•Ÿ³¾Ç~gëcŽ?©ÕMÆíó¯:÷Ü?vøG\¢¯®”¤â¯³ü…ÿ²öZ—ûlÕ…ÕÖ2÷~wR›œ³F-–º¹E_gí¿ÛöÇf~+?Ø/íWJN*ùJV2ÿ~vR›³f­”¨Š¾ºÍ²¶ËýJ_ïø_Ww@wÙ<¢Ó‘ƸbËÝ Û!—’´%¹Ýjÿê4êÿªì58¢€,O!boჴb’‚ûâ``b1oÒ“ÒPДe?Úæ€é+§€Ä%ÒRxo͹DÎ4´Æ & % FØf-;2-d4”!¤7 ÄÒþ !F#t n(ÈÒ„’>A[¹{n2ð [l_ |’Ò‚jx o†€§;ä·ü±¨ËÛü×ÏììÌÛ­ÌüyÖ¯ãbnÁˆH-’ò÷ft# ~î¤6ní?&”‡úzPKFéÉÙ+8Í×ò9ïBð(• 7'ôtr’bP”0o -®²2qÙyõ¬7†I(O ß²K) å¥(‚ÀÁY<±»NJø´þsûÑÛç îa£øu½øÖíŠìƤ´ô ±›žSä7ý)_C#?½44oÆ–1%'mƒ1n_&?ÁŽ„§„:_â™ùC~ãuéÊÅ€í$†#r^(¤†$´`Á˜ †ü_Ål43wý#™;ëÑ€fY5PXfJËù ºyi NCЄód÷ßç÷•‘²Å›ÎXqö•07É,°ÎXa-9Ée€ÀÎî€(W[ↂÙvÿßD%àΔpÌÃ{¡ 9QÈémöÜ’JÅt¯9Íy°ßɤ²‚ú0AC eäq™h ÈvW%á®VI]¾½îg[õs»wesºœüi×”9l£óá?¬ãë«þlVOÊ(­“ˆA¡ €/ÊI4¤pŸóƒ7- ößß(†é (Ÿb°%쌟™‹+% èÜ¢“ÐKÉFû2ïµ@(Á£JNéÝL²Rv/€å?òÐ3ät–œÍ¯‘”ZK ÈlM~7ý²S±mŠå†!*èKrÐÎÁ½ýßÎýùÜp fj*ÿÊùŠèb¸ÆC2>ÍŽaÆY-ÈÀc2y[o²6Ã6ݲ´ýùŠg3Xo«áö|¬ùÇŸº¿Çw0ŸŽù^®•Å_)JDUò”¤E_)JDUò”¤E_)JDUò”¤E_)JDUò”¬îfÝxþÊu™Ì;ÇDUõÒ”ˆ«å)HоV~Æ~¼sÏ_ÇÍcªéWÊR‘|» 1Èåa¸j¹Ç%Ηû²1A=?c¿¸WtiŠÉã]òÑÝJUÊ(´»o™‚sãZÅ«þ¢€Âj\´äöÈÅb î”Pk¥Å”Y'ºCxÝ‚ë’u‚Š Ù( t'øb¿ & ¢^î°,ƒTû{¨3 ¾M! &”‘¹,©,k”Ý?¤`FHoÈÎ3ýy„Þ‚¶& É/†ý±3§d>ÈÅâÛbZr¿·e_<ãMì;,ðáZÕýÒA|›É©q 6$²ÀH4–„ 32·ÈÅ~ù6´“ +9eÐLN¹!Ÿ±hBÔ¸ò8ÄdfBCì7^x1)áƒK|ûâÿ~L/,'dÃ1A¿%%†¥Q¸ï½¬²Eé@‘³þX ŠÉAI(7Ë)(Á#r;m.Œ²å»öØwØZÕ¢%'¤¢DÔ“RÐK)–Ø 8ÍòJB7-â¿B[¤·íu’‚`o± 0b@È`ia£Œÿ-¸j>Ì‚˜!)Á˜—óý:1/€ìšÃ@¨PÒ‹+î‚_èü3ä£å÷}·ßòê „ ¡¥£ŽXjMC¶ßfè-ÙB7epfç9Œ£ ¾iõÕþ¯€ë!òñY(È(3Ù½=€-åïÐËÉFÈý»6óLM/!$ÌRÆãxÝ‹/Ð’^ à =³Ž³“vÑaŸ¡ÉX˜–t —ÒSô”X`IJ:6GÃpÝÿKõÃô”‹%%%.XnOInž7+¤oãò _ääJîß·[Šý…ÂNTêÿžh’ù3 ß ä´îRSò9e OÉa‰fÛó†€pŸï3“Y\hßÀª6±iééN@oéï¿m“¶ß ÔW€h^A|¡¡[::wý•’R[[! YŒFÈ푞ñ._›!“›õCoûo˜Ôg7:ï¥,7|ı¯Ó‹bWXãrwTèÈNFû|… 18²YIÁ‰Ä®7„•É@]-™’§Uá£oÄóøxsñÆÚÕùKBI‰XnÏÆ6ÃRœ”õrÒZF·)*GèGÿÞœ¬þHa03“ù#J’òK I+ bPVl^-?¿û}®10™Š)bnü5!¡© @kà‘›$””—°Ñ¿ #¾G^ÖN€ ö-tô'!ùe†ò’å ÈãKãvÝûá¸f‡=øVÝ–v5°“â¯öèBI¤2Ê GäÒ±hùŠN ±et¤–W,`Ä)¶ɵ€Ä$³¤²fàX1±5)J7F(¤”Y5() $£ þÚæ‚ɉŠ%у> )¼½²6JHEÿ€±L„ᥧñý„°'Ê oÙ% A[º† 0¼à7JBrºS·ê}“pä›ÍYçœý{y„JªÿpM à7ü…±E†ŽJÄ®„`Ä’ËF+ô·ù;b¹y9Ïr¿±@Ž‚ÐMÁŠœœ‚÷%òÐÅŽû%_2F%v¾B,…‹,Iü§&9] K¶@Ýû§ÐÑöOHÐΪ¢øÎ‚òt„á©)ÏÉA0´|¥!(ù’”cû¡ZäéÆåó\Yø®ª¿åÀ&Àd¢Zî€Æ/žZPR[d~3åìMNî”~f¼€b:ßþß³ñ½Ÿ³ÿ·êcßüûq0`fA\aIÈB1X¾¶1†íûíÖ1ûsÚ£+òÒ“ñHìéÝŽf[nŸŸ¡ÿÕ}RzÅ/œÄ ¿ͶÿöÇö~/¶Ø+mWkbñ/¾K÷Fál3ý¿_ß»œåY.ºjùJR¨«å+­{cû)Ì;¾4긊¾R”ˆ«å)HоR”ˆ«å)HоR³a›lêÌ¿ÿýÿ×WWØ·ËÌÝó-ÔËq/™ut¤E_+>v=]ÏøÏ–ÇžwS®®‘|¬[õflÝÖëu0†îººDU÷ämÝfž”òO~¯Ø@ì¬ÚM›mÿíìü_m°VÚ®’Š¾Ìæí—Îî§Q˜Ãñœ}])8«å)XëÙ¹Ýjlru˜¦Râ*úéXùö|ÿ±¿f~Ÿ8š¸Š¾ô£™9òÔg}÷ßós»ëè ;Ý% ¤¤3pº7 Fè -hGäÒŠQÎó'öF÷ÌëÒŽœ¤ô¼0wÀ|£Äá×.æš@ª¯ú¿8Ï$´b÷È%–v€2ý¤—³±A)Ùûã•yŽRI¥%$¤ô§ïÓ¿&'6è n%£©òÈrøOßÝÂi $$þPo +•ÓÉ¥í¹nY]$Є–’”ÿ›wVºÉ ÅܲӉ…”Wá%ÿúP0 Jq]÷û –³2J$Þ&ÿ6WWÂ‰Æ ´«ø]8¦GÛ–œ€ÞŒ‚ö/äâДì†, ·ù“Æ8J‘­i&àÜ”dZ@uŠÈNZy ¥ô1‹IIè@O)ÿ~ûí^L!¤°ÞQD_=Œç«óÏÆ±õq|¥c/õ¯le9‡c×ÏæWWÊR‘|¥)WÙöJ¾Ý{­kÝ÷ëÂêéY»íþùñÝŸ íþ ÿJ*úéYœßºùÙ”ê7˜7Ž«œUò”¤E_)JDUò•ŸöÏöß›övÎ)û «ˆ«å)HоR”ˆ«åê ÅR @ÀmŸl ®Û׸ùW—¬ÎÙþý—ömø¬ý„?²yÕþ½ &GFÉFnVJ¶~RX'”V%¡¾Ã9Y`<~¹¨0f(grß#'§!=9ôá» gûöÝÝ×p·ÉÛï¾ù÷Ëßsw«²Ü,s«÷„'ºvÿ}ßf$ѺûŒwΡ¡;od|ÿ>}·øÝ»·amØE]z¬­¶Ùm³9ÍœQì¬ÖïM_E)J⯔¥"*û7;-MÏQî£TËU]yhÅ¡(N|÷Ã÷ÍÎ]D¢¯”¥'|¬ý˜õö;ó?[qýNª}»·nøWoŸWøGŽÛ©»Ìkå/™ÌË2˜«è¥+?Èßÿ¶ÙÿêÛcª*úéJDU÷¡¿ý}ÙÌÆ³­nÎÙMª+3­ö=KwÍVeº–ª‘¿ÿm³ÿÕ¶ÆÿLU÷ì—vËíÂ{da­öf~§8Omd¥'|¥)8«ågÎoËÇ1œåîyÜÖ:®‘|¥+6c_=ç+cŽÆ±ñ|ýŒýxæ7ž¿Ž?šÇUÖo’½÷_ÊZ÷oƒº¸º¹E_+{¿;©MÎYΣË]]'|¥)WÙ»¹êìwÆn§<óòUt¤E_)JDUò•ã;0Þ{¸C³»ÌÁ;먔Uò³»vÛöVý·âûvÞ®“оR”ˆ«å)HоR”ˆ«å)HоV~ÃÏÙ[óûOçl¿WHŠ¾Í²6Ûm¶m²¶ØÍªéHоR”ˆ«å)HоV-úó6lËuºÜCfU]"*ù_ÔéÛþÇn{:¶ÿ#~ç©ÔýUíÆ¹›6 æõºSfëëçLUôR”ª*ùJR"¯”¥gìgëÇ1¼õüqüÖ:"¯®”¤E_+{¿;©MÎYΣË]6ÈÛm¶Ù¶ÊÛc6§ìÊýø¥+¯¿S÷òоºR“Š¾Ï·oöíß íóáÊÿõt¬|ÿ>}·øÝ»·amØD¢¯®”¤â¯”¥"*ùJR"¯”¥"*ùJR"¯”¥"*ùJVwnßnÊÿ>Ü^|âDUõÖglÿ~Ëû6üV~ÂÕÒ"¯³ý›³öÂû~Øz·â5]fîgË籜õ~yøÖ>®QWÊÏÛ·íŽÌüV°_Ú®“оR”ˆ«å+3­ö=KwÍVeº–ª2ÿ~vR›³f­”©E_])IÅ_)Y³9ëîæl§8ã²tÝöÿ|øîÏ…vÿ¥}t¥'|¯݆vPHC-ÔØÃp¶¨¤¢¯”¥'}Ÿ8ó÷Wøîæñß+ÕÒ‘|¥)WÙû?eoÏìa?²ý])WٜߺùÙ”ê7˜7Ž«¥gìÊýø¥+¯¿S÷òоºR“оVw3n¼e:Ìæãªë6açþ¿ùýÍ'c¶V”UõÒ”œUò•êý÷~‡ßns·^vvoŸ>ÝGÉó›òñÌg9{žw5Ž”UõÒ”œUöo’½÷_ÊZ÷oƒº¸ººR"¯”¬ùØõw?ã>[yÝNº¸Š¾R±×òÕ·;²ÜÓ¹ËÇãO«ˆ«åcgݳíöæíÙó‹lâ*éWÙóï·ùñùŸ Ͼ ßUÒ‘|¬Ùý|ö7œ­Ž;ÇÕÖ~ÌzûùŸ­Ž8þ§T¢¯®”¤â¯”¥"*ùJÍÜyÿ/|wcIÜï—ªâ*ùY¶B¶Ù©KýÿëâêéWÊÏÆoû«:·ü;güF]ùY›¿uº™L%ûª®QWÊVnŠZ²ópå·}W8«å)HоR³ç~êÿÜÂ~;åz6Û?Û~oÙÛ8§ì&QW×JRqWÊÿ¿èûœûž½Å>Îû/îÙö>Ž•+Ý|å·Á ýO”Ï×ÙuÅ_)^3~5–¥å;;nÇìý·}¿sê'|¥)8«å)HоR”ˆ«å)HоR”ˆ«ågã7ýÕ[þ³þ#.®‘|¥+?mþß¶;3ñYþÁhоºVg7l¾wu:ŒÆŒãêâ*ùJR"¯³l…m²ÿR—ûþ×ÅÕÒ‘|¥b߯3fÌ·[­Ä6eUÄUölÆþ¾{ÎVÇcêéHоR³9¿uó³)Ôo0þoWWÊR‘|¥)WÊR‘|¥)WÊR‘|¬ÿ!ì½–¥þÛõauuŸ³¾Ç~gëcŽ?©Õ(«ë¥gÎËù¸¥««¾SwÔûvÿnÝð®ß>¯ðW×JÍòW¾ëùK^íðwWW8«ìÛgûlýø¾Û?­°Lë}RÝócÕ™n¥ªŸ¶ÿoÛ™ø¬ÿ`¿µ\¢¯³fÛûcû?Ûl¶«¥'}éF/t'>áÇ/}ò÷Ý{åî½QJJ*ùJRqWÊÍ›mÿíìü_m°VÚ®‘|¬lû¶}¾ÜÝ»>qmœE3›÷_;2FóæñÕrоR”œUò•™Öÿ¥3fǯºÝjU\E_+ýY›7uºÝL!»®®³wËߨÒw;åéE^éÝ,¶Ï¿=û/m÷̶w}óï—QJDUö|ûíþ|~gÂóï‚÷Õt¤â¯•Ÿ;/æâ–®®ø=MßUÒ"¯•ùwe­} ïöýû;(åaÒ}“¾û}ó}×¾æ}W(€Hz¿óýgìǯ±ß™úØãê2®‘|¥)WÊR‘|¥fû¾ßvíÅvݸå}Ãêâ*û;©¾=jwÍÎ^e²×WX·êÌÙ»­Öêa ÝurоÏÙ•ûñJW_~§ë«¥'}›¹Ÿ/žÆsÕùçãGÕÒ‘|¥)WÊÍ™×ûñJVVl·ë£¯fçu©±Ê=Öb™K«”Uò”¤â¯”¥"*ùJV2ÿZöÇöS˜v=|þiÑ|uìÜîµ69GºÌS)uu›¸óþ^øîÆ“¹ÜýOœß—Žc9ËÜó¹£¥}t¥'}›Ûç^uï¸~íðŽº~3ÝYÕ¿áÛ?â2éþÍ¿Ùûa}¿l=[ðê¹E_)JN*û;·m¿eoÛ~/·a-êéHоR”ˆ«å)HоR”ˆ«å)HоR”ˆ«åc/÷çe)±ë9ÖjÙJ«¤E_)Y³:ÿ~)JÊ̓Öýuq}ŸìÛýŸ¶ÛöÃÕ¿«¥"*ùJR"¯±—ºÕ¾?²ØÃ¹Êçã§ù ÿeìµ/öØ?«UÖlÎzûŸù›)Î8ì£e}t¥gìgëÇ1¼õüqüÑÓŠ¾2ÿ~vR›³f­”ªºR"¯”¥"*ùJR"¯”¥"*û7É^û¯å-{·ÁÝ^®”ˆ«åfîêù¸¥«/7[uUÖ³oö~Ø_oÛVü:QW×JÆÏ»gÛíÍÛ³çÙÄUÎ*ùJR"¯”¥"*ù^”ä3óþØßÿ²ÅñÛÕª)(«å)IÅ_)JDUò”¤E_)JDUò”¬îfÝxþÊu™Ì;*"¯®•Ÿ>ûŸ™ð¼ûà½õ\E_)Jüò>ï’wËÝNïŸ3Õ(«Óý›³öÂû~Øz·áÕvàÒj3¤í’žrŒý,ïöVVýþ· 7`Ô†‹Ëÿ|œRöOrÖÿéZ—¾ë>ÉŸ<êþ/H|Løj>BpÔ%ÐŒÛ8N/•Êî¼ÏѿߵÍÄÜ’ÆlžßïÙ[ã÷¾1”“º?Ð0\Uøvg_ïÅ)YY°zß®›dm¶ÛlÛem±›W 5»:¶ý÷Ìùöï³v_G^ß>]’ÒU|¥)TUò”¤E_)JDUò”¬îݶý•¿mø¾Ý„·ˆ«ë¥c/u«|e±‡s•ÏÆFÏ»gÛíÍÛ³çÙÄJ*úë7·Î¼ëßpýÛáutœUò½±{ @îÉnß/þ}Ç~³ª)(«å)XËÝùÝJnrÎu¶Zç}uŒ¿ß”¦Ç¬çY«e*®³üÿûmŸþ­¶7ùE_])IÅ_)kØ ÆÙ°ÞËëOÈ7õ§ŒÇ÷í¬’Š¾R”œUò”¬ÝÝ_7µeæáËn¨Š¾ºVlοߊR²³`õ¿]\E_+7s>_=Œç«óÏÆ«¤E_)KՀĆXÙ*nZ6Û'¥/»”Ù tör»£?Û«.Ëg_„4 †9§ñ›t£giV~Ù;–¾ÈnË]틤"J&nžü¤§ò²2#†ò¹e}ÑòÓöèn”æÖ‚È`P<²i|Rq5<¡¸ ÒSô !§+§f9YßÝPÒ44 SMIi)¬û²w-8–_J7ùOÉNdg¼_áN-Äavµ45 çO/òÃ0nÎ+$¤nC K ˜²’7ñ¡ ] j „01%Ü¢Ó¾/–YhÅ¡;†ï¹/¥ œKé lY+?}Úò᜚y(a(4²_΄âŠdá»nŽOÙ;ºsô¾|þÐKAx²Wü™ƒ²Y¥$%GB;!²Zz­Ù3Så,áa縀9*¿w&K (7†Ø á¼7'n~H)-)JF6ûõfÞ¼˜‡û“He†}Æ”4i\ b¿NÀe)J‹ý%䤽ñH|1¬™ÀÏø À£ ÈäÒah/ñ›¶B Éãy,”^_ýv°3Ë!§£•ÐÒtXZFàÆ«#–ÄœŒ4£Q»Ëü3fsÔsr*›iÕøY)(‡¸bq%!‰N!$–ÃtýÐÛ?ù¾JÜ'Þ$0¼”ÿ:Q’¦Z³ý²S™xïòòý…'¿Ô!4°ßÔž40¾Jn’‘ñ_ý²>NKÿ“k!Qi%¡a(ÉÉÁ¥§”’²~Ieð—HacPZFta™·ÚÝ"Œc0öfaæ*¿æ |¬ÍߺÝL¦ýÕOÙ•ûñJW_~§ëº%$´§î˜fïñ)Æøga©_ÛÈ׽ʽ…YÕò•™Öû¥»æÇ«2ÝK«´•_)JDUò•›lÿmŸ¿ÛgãÕ¶«ˆ«å)HоR”ˆ«ìý˜õö;ó?[qýFUÒ‘}Ÿ°óöVüþÆùØÿWJDUò³:ßcÔ·|Øõf[©utˆ«å+6c_=ç+cŽÆ«ˆ«å)HоR”ˆ«å+>ÉWÛ¯u­{¾áÝz®"¯”¥"*ùJÏŸ}¿ÏÌø^}ð^ú®"¯ÖËÅ~VÝ;>ܰwÌçnv=½önÁ¡¤ÞVÄÔ³ ´ š„þùÃ?Ì•>GbSq¿kç`!!¤˜L/”ý%#­’ØnRP7vNwøí¿w××€ a-?§%8¯€Â0ÌRQò‹Z é+îZ>Ù·NϯžC)ûa,¶=ZÖ¯òdÒ°J¤1X  ¤äŒ, Äò‰@Y å`’RPZrKÛ>¸Å”¸k”1(bYKÃ3äddº:8ÆFž´“îÊI©JKá¡i[‰¨@kåt’Ûº •òRZJuz´%(B3bˆa¨ßàѿäÂTR{ÿÈéÏ›²,²|·ÏŸ°ñäùÕèM,03“SðaŒá€6 ̲€Ãº¡¶ìÛ–‘µÖ(øšZlPÔâbq041Ò„ Bgßì²¶û|ÿBzôâbR…pþè+† ¢ÆäHÔ—Y@7OܤR9¸fJmÅ ¢Z Oã )þÉÅ &°j bfù!R’“Æ'£›®Eæùlµïñœå‹6ª¿/,4šJä¡…bú [õf/6à:JvÈ);”7¸Î4bZÖQEmƒ6O+úË dä–POåòjJß”éFÈýýÑ@ÂdÆÅð(WéNAi˜´ï–‚Zò^N):0[ÊJZQ·Å–”æÄÄòòJ&n“‹å¤ äìÉhZxÞI÷1ùÖ±x~=M˜×íŸo·7nÏœ[gWKÒ¢¯”¥"*ùY¶ÏöÙûñ}¶~=[`êºDUò”¤E_+ûÿ¶|hÜ0Ï•ÝøH¬s¯v¨¤¢¯³9»eó»©Ôf0ü`º~Ûý¿lvgâ³ý‚þÕtˆ«å)IÅ_)JDUò”¤E_)Jφﻯ2¿Ü;æøN\E_])HоR³l…m²ÿR—ûþ×êâ*ùJR"¯•›d+m—ú”¿ßðþ¿WHŠ¿×€„´r7'äbRvý=û”ŸÑÙл¨k¾¿g½ÑHÈ&“ (…¿JKÜ¢ùi`߯’ùa«+’‘‹~‹ûæÝÕx lWÀ_³üÒ„6å£ìXÔbß¾Vv÷¾ÑeàU!¥€Ô„ ±„?û§ÑÿZÔP×,fIl×Îâ3ÊÔ<ãĵµ_ˆ ‹A}= ¶OK% A[òWJ />á½@g³nýî‘447†T‡ FB9eÿÑÉ[â_/–™þ-®”$üþí „”p0±_C”–00a[¡%¡¹c: „¿ÖÎÛ=ƒöÀW$¬·BPJtòY\¤”¸aH(¦t''nPÅïûÜØü¾áKw}™úì©Õý`Ò`qÈHf£RC[óìKú¾È&gÛg}Ha4˜YElŒ1aŒ‚ÒYi û>(0¼QüŸºQŠJün‰xšgÄ$bZ ù?á»#}¸‰K 3l”°Ð1Â:RÛë³Ö^Hj ãÑÐJf&bWIHÜ'lV-±…vJ2q/××¾eÿÏâDúªü 0 å $Ì_O!âbIA¨Ç ·Èd7- Oÿ·tgº¿9+òÒQ\­Ò“™ YÐ7¡±h)#P”-)îë¶þ„pÒ`ÝÊ/$®¬Œ¢º²Jé/£žQ/Œ}÷N_пËåíƒ;àÂK A ¼ù7%ý’ûn—×#ÿ¹¼q£ßqMU_æ@nY 0­’Y4¿² 7•‹€rnJRSØ ~žœÛwÿ5ä÷!䆠´Ÿ’QC #ô!ÐZI 6bYx”Œÿ'§îòÜN’ŽR~ÙòY=‰\445ÊN’†GJS·>ù˜f,”^,k|K/:_m¿Ü™þ)ÑÓ²yy;;Ôûgù–[Û¬ê*øB&XÀÜÙ(ÃVW7âXi@gõôß?û%Ú⣥oðÍ’¿ò:×’”n[·ß¿ø#Œ_ô ÄÑœ¿·g ÌýþvGÉÛdu/%ñ®»Xn&¾ãP„ ÿ£¥Ÿ«“‘¾ÉëJ“Ü#>¾ƒü²pvcWðöm·ÿ¶?³ñ}¶Á[jº÷Û·KþÿnÊÙ·enÎ{ºøŠ‹ºš¾V|æü¼sÎ^çÍWIÅ_)JDUò”¤E_)JÏÙ_c¿3õ±ÇÔdE_])XëÙkßÙLiØõcù‡DUõÒ•›¹Ÿ/žÆsÕùçãGÄUõÒ•Ž¿›–¦ç¨÷Qªeª"¯®³ý›³öÂû~Øz·áÕtˆ«å)HоV}»·nøWoŸWø>®‘}Œ½Ö­ñý–ÆÎW?}])WÙ³?õÿÏîi;ŽÔû%_n½Öµîû‡uêºüº•–­³ûÿÔîîjß½/}Œ¿Ö½±ý”æ_?šu]*Š¿²7°Ü„a¹»ä¡ßŒ“‘Ï%}‘Æìv{ìÉ ÞOàP¢° K-)Ɇo‹éI5ЂQ}ó²?Áƒ?ì×Ë+—ÐÛ}þdwo¾?+ï²Ç9­õôÒh’ɹɨN“Šÿ„ ­úrKÜ'î•£íðÑ·…¾9}°±Â‡ µ«÷ñ šœÉ&ìŒ3'8gäÖ,1aEtoп O_èo6´“¡|˜ŽX´•’Vè!JBKN+£ŒF@iÙÙEb[iña¤Î€C á½%¥%†’Ê@n’”t±-?þ‡íÊNÏ™­ÀÉ4n,¬MbŠ@iÅY) ~†7ë&~„–ø!¯%™vXýð_?cØ~®¯bÉ›$ Œ!6&¤aHAE—_BØ´r² Ä¿† ükkÓp-ÒŽ”$ – Hj7N #Kt ¤ ¾ŒœR‚öA{¡ÈepφâÃI©ý/Ó¶(ÏÝ9ÌÅ¡Òå|Ý t>²†'†ÀB -ОèÈBq-%bÓ¶ÝhOÜ1éÇ£b®wÌc[£ùÜÚªþñNZHlPa+ò€ÇBR£>IIÉéJ2vø'¯öÊßëAD΂ƒC3^ÑÃQŠ%­} BQß~Ên×;K³ ˜XÒoB a‰(jS÷)˜ %¶A]ÙѾÙÞç‚hجÙxgÉåa»„9(37Gé FÁ˜ ÷sýÌaîr„…N¯ò€pÀ2YD¢Òœ¿å§îŸú{—º¸iJt'òBRV}Þù±XŒ‚oåôô¥òr¸k ¥t:~èeu=í‰E–€ÂaEŽVåpСƒ‚¿ŸrI%Ø´|—ùÑï˜!%'§¡9-ÆvKíÐc;nµšsßP•-G=ÇØÕ÷íŠNÌYÍ¿JSŽ5ÓÙ²2Ó¶~®ÿÙ»6ýu33¯»v|Ùßs—kB†Æ a›¾ÿ„n•Œ(ÿ¿ûfû;c´ü–”†$¥#¬±½;ŒÆlWÊã~ÿ„u7{Ô3€¾Î¯Âƒ²ÿe:sò¿fÙb³sòª)KyUò”¤â¯”¥"*ùJÏò7ÿí¶ú¶Øßêâ*ùJžVfïÝn¦S ~꫈«å)HоR”ˆ«å)Y¾Nß}÷Ͼ^û›¼E_])YoñêS6lzû­Ö¨Š¾-úó6lËuºÜCfU])WÊR‘|¥)WÊR‘|¬|ÿ>}·øÝ»·amØE]"*û?fWïÅ)]}ørŸ®è¤˜ééG72VZ×–Z6HÍöK Ê[f¹U›3ž¾çþfÊsŽ;(Û7_÷ò ¾À]$"pÔ%.—%†þß§§%!…£0Ôòþ^ù²­ÃC13$3–ú~ ýˆKålŸ¸ÂÂ7 È‹É ø´ãýñ’i1 B@°èúSËBF•·GG(¯Îÿ€£0×Û?÷¬I0¤PKG(´€Ç%ðÄà05 )NÛ¾G d%‘³ïö×Ëdñ*s>=Íeж«ý^& dÏð+ ˜KÐMÛüÊåô–ŒJJyy%öNÁoêpל5 ˆ’ÊùüÃK d–Ý$ÞY3•úYÆÿµæ€©0¼rbJ,¬SìÅ“ l‚¿J x¢Rdñãv¹£l‡A\45âihéýÔäwB9Iwåô© „t¶_Þ7ÙÂØÃ0…¼UþزgA7 š´†£;a‰Å%!©J:‰‰~‘©-‘‚R1(ã·¶% 0„´ß¢ÐXGÚJ“ÖãJ%þŠûô#žæ\°ÄÄ”ƒ%–_,–V|€þR#8Gå ®¶w¬&Ná›~åýþA1ß±_’ÒÒ¸k0Ä£âðÔî_¹—±ÌpîÊuPýU_ÆÈ†Mî„’‘ÒpiLå3’·GÉ”ôdF%ð„|×€† LéHݾHJÜ%i/~¼¯þ@¬…kºÅ ¤òº”£Ø »¡'tÉB!¨-ø`‡¼†+²V1%¯ŒÆq›+ôa¬ÊéÜ)W¼“ÄÕ˜{*¿­‰¥røå•ÓË%w%A`eÈ|­ó2½çþv=]ÏøÏ–ÇžwQ¶âÃÿOF-òß#¨'~¶ç'¾~§l¾÷6ô\:оR”·•_)JDUò±×òÕ·;²ÜÓ¹ËÇãO«¤E_+6ÈÛm¶Ù¶ÊÛc6«¤E_)XËÝjßÙlaÜåsñ‡ÕÄUò”¤E_)JDUöm‘¶Ûm³m•¶ÆmWJDUò”¤E_c/u«|e±‡s•ÏÆWYó?uŽîa?ÎõrоR”œUò”¤E_)JDUò”¤E_)Yû?eoÏìa?ôùÍùxæ3œ½Ï;š:QWÏWsþ3å±çÔlé)æJ2rÕöçï¹ã÷øG“»vÛöVý·âûvÞ™Öû¥»æÇ«2ÝK”Uþ¬šÔ£’ƒ{³ ,jC·ßdîž•äd'¿ßtñŽŸ_ÐXJ3d£Ɔ @@jBBPZ3§ZY¿È+?ç^Cõí¾ß­ºßo†¶}Íg3ý'ÎÇ«¹ÿòØóÎê6äß•U_ôÀ4GrWËOM%¡(ÏÑÑÒ”õ¥ÆüŽœì2æ¤%¬QAˆÉAc”ÅéãyIBÆ èÛüŽsí¯#°Í¶uf_ÿ‡þÿ‰ë(¾~hí÷ÇqÁÝ÷;ï©%ýÝÜ;ú*ýÄ"„ gÉFÌÕþ+ìÈnVnnÙß®ÃÝ=úÙ_¾ßΧÇ)Ùÿ¨¥×üªùJV~Æ~¼sÏ_ÇÍi*¾ºÏömþÏÛ íûaê߇UÖnæ|¾{ÏWçŸ(«ë¥)8«ìÙ¿¥efÁë~ººR"¯±³îÙöûsvìùŶqt¤E_)JDUö‘¿ÿm³ÿÕ¶ÆÿWJDUö-òó7|Ëu2ÜKæ]{-{ó»);¬0êºJ*ùJRqWÊV-ú³6nëuº˜Cw\ù-ߺÖíÛ)JnÊ=Í”UôR•ÌÛ¯ÙN³9‡cEN*úéJÍÜÏ—Ïc9êüóñ£â*úéYþÍ¿Ùûa}¿l=[ðê6Û?Û~oÙÛ8§ì&QW×JRqWÊV~̯ߊRºûðå?]7Ýöû·n+¶íÇ+î(«ë¥)8«å)HоV|ûíþ|~gÂóï‚÷Ôû'}öûæû¯}Ìú®QWØËÝjßÙlaÜåsñ‡ÕÖg[ìz–Ëu.›¾ßïŸÙð®ßà¯ôE_])IÅ_)JÏÙ_c¿3õ±ÇÔdE_])HоR”ˆ«å)HоR•›ä¯}×ò–½Ûàî¯W×JR"¯³;gÛv^Ýöâ»gÚ®”ˆ«å)HоR”ˆ«ìÿ#þÛgÿ«mþ®”ˆ«å)HоR³}ßo»vâ»nÜr¾áôý™_¿¥u÷áÊ~¹E_])IÅ_)JDUò”¤E_)JDUò”¤E_)JÇ_ÍÎËSsÔ{¨Õ2ÕW×Y³?õÿÏîi;ŽÕtˆ«åfÌ篹ÿ™²œãŽÊ6®‘}›3ž¾çþfÊsŽ;(ÚºR"¯”¥"*û{¿;©MÎYΣË]]gÙ*ûuwÜ;¯UÊ*û3›¶_;ºFcÆ £¯å«nwe¹§s—ÆŸWHоR”œUöwSlzÖÍ›œ®ëe*®”ˆ«å)HоVw3n¼e:ÌæWHоVm‘¶Ûm³m•¶ÆmWXùö|ÿ±¿f~Ÿ8™E_]+7s>_=Œç«óÏÆ«œUò”¤E_+;·m¿eoÛ~/·a-êéWÊR‘}ŸgÏ÷ûögì)󉫥"*ùJR"¯”¥"*û¿;)MYγVÊU])WÊÇ_ÍÎËSsÔ{¨Õ2ÕWY¶ÏöÙûñ}¶~=[`éE_]+6ÈVÛ/õ)¿áý~®qWÞ„d++m¶FÛ#0æÎ(öVi?íŸí¿7ìíœSöWIE_)JN*ùJR"¯”¥b߯3fÌ·[­Ä6eDUõÒ³á»îë̯÷ù¾—WWÊR‘|¬û%_n½Öµîû‡uêºDUò”¯ß©Ð¿Ÿ·}º”ý¿ØÅ´¢¯¢”¤â¯”¥"*û3¶¿eý›~+?aêë{­[ãû-Œ;œ®~0ú¹E_)JN*ùJVw3n¼e:ÌæW×JR"¯”¥cgý³ý·æý³Š~Âb*úéJDUò”¤E_+ùy›¾eº™n%ó.®‘}›¸óþ^øîÆ“¹ÜýWJDUò”¤E_)JDUò”¤E_)JDUò”¬[åænù–êe¸—Ì¸Š¾o“·ß}óï—¾æïOœß—Žc9ËÜ󹣪é(«ìÝÝ_7µeæáËnªºRqWÊR‘|¥)WÊVnŠZ²ópå·U;™·^?²fsÆŠ”UõÒ”œUö}»·nøWoŸWø>®±o×™³f[­Öâ2ªå|¬Ùœõ÷?ó6SœqÙFÓf7õóØÞr¶8ìhú¸Š¾Îæm×ì§YœÃ±¢©öíþÝ»á]¾|9_àúºDUò•Ÿ±Ÿ¯Æó×ñÇóGQ—»óº”Üåœê1lµÄUó»vÛöVý·âûvÞŒ¿Ö½±ý”æ_?šu]"*ùJV2÷Z·Çö[w9\üaóнנŸ²†ö~Æý›9­ƒª)IE_gÎÇ«¹ÿòØóÎê6®•‹|¼Íß2ÝL·ù—W×JRqWÊR‘|¬|ÿ>}·øÝ»·amØE7}¿ß>;³á]¿Á_ê¹E_)JN*û3›÷_;2Fó披¥"*ùJR"¯•™Û>Û²öï·Û8–Õtˆ«å)HоR³;gûö_Ù·â³öþ®"¯±o•™»÷[©”Â_ºªéY»¹êìwÆn§<óòŒ”UõÒ³ñ›þêέÿÙÿ—W8«åc¯fçu©±Ê=Öb™K«¬Û![l¿Ô¥þÿ‡õùE_])Y³9ëîæl§8㲜UómŸí³÷âûlüz¶ÁÕt¤E_)Y³?õÿÏîi;ŽÕqˆz¿óýc/wçu)¹Ë9ÔbÙk«¤E_)JDUò”¤E_)JDUö‘¿ÿm³ÿÕ¶ÆÿWXËýùÙJlzÎuš¶R¨ùö|ÿ±¿f~Ÿ8™E_])IÅ_)JDUò”¤E_)JDUò”¤E_+Æ;oŸ}˜æoÿ“Ÿu2‡TRQWÊR“оR”ˆ«åfvÏ÷쿳oÅgì!ý]"*ùJWà†Fßæ?÷9•ÿããÖw(«è¥)8«åfîêù¸¥«/7[wÕtˆ«å)HоÏWsþ3å±çÔë§û6ÿgí…öý°õoÄjºJ*ùJVlÛoÿlgâûm‚¶Óо2ÿ~vR›³f­”ªºR"¯³|¾ûïŸ|½÷7z:öZ÷çvSv=XþaÕu‹|¼Íß2ÝL·ù—(«ë¬ÿ#þÛgÿ«mþ®“оR”ˆ«å)HоR³»vÛöVý·âûvÞŸ±Ÿ¯Æó×ñÇóXéE_])IÅ_)X·êÌÙ»­Öêa ÝtuìµïÎì¦4ìz±üÃ¥}t¥'|¥+7É^û¯å-{·ÁÝ\\E_])HоVw3ì¼~u:ÍÆÌãéóï·ùñùŸ Ͼ ßUÊ*ùJÏÙ•ûñJW_~§ïêç|¥)WÊR‘|¥)WÊÆÏûgûoÍû;gý„ÕÒ"¯”¥"*ùJR"¯”¥"*ùJR"¯³»vûvWùöâóçúŸ;®çügËcÏ;©×WIE_cçÙóýþÆý™û |âiû1ëìwæ~¶8ãúUtˆ«åfͶÿöÇö~/¶Ø+mNêoZós—™lµª®"¯”¥'|¥+?Ù·û?l/·í‡«~#DUófuþüR••›e·ïêî–&­8bY¿ÃßÈOKô2vwƪ³“z8I]n)ô/þήÙ3üŸÔÎÏfÓ«ù5Ÿ³+÷â”®¾ü9OßÏ’ŽËZsíÕÙNÛ©ó¾S®¢¹Uò”¤â¯³}ßo»vâ»nÜr¾â=])WÊR‘|¥fu¾Ç©nù±êÌ·RÕWWØ·êÌÙ»­Öêa Ýut¤E_c/u«|e±‡s•ÏÆNíÛíÙ_çÛ‹ÏœCêºJ*ùJRqWÊR‘|¥)WÊR‘|¥)WÊÍÜyÿ/|wcIÜï—ªéWÊR±óüùößãvîÝ…·a}t¥gÎËù¸¥««¾SwÑ}t¥"*ùJV¿ö^ËRÿmƒú°¸Š¾»¤~3#ÿ¿éã]•ŠFG%þ;}Ç=Ý!’Ë(†” É@ax¡›¿à_6ü3%ÿÈHBzöe/ßI¥ò ±I/—°o)RR”'ôä•Ã>ÛðÒ‘‹q/ƽæ#0³ˆ•Õþ`1G w ÎŽ8iY0¢÷Àc–_J Å1¿rG·àÐ RrfB1iB |RS²rÉcJ@H`hÔ>ìÏò®‘,¤† 32ƒ°ã?cö&#¡ƒR”rÊý(O„ääúÂQ –KB/tàÞ„¾é哊ݦ-!¿Æ²Jý-»Ü;|®áÍÍY㙞ª¿ÀCÉœ¤y+¥¤¼¥ðÂöAç(±¬„ﲊ+>tª­;!†¹45¾ÉJ ßæ ~…ðÔ²3ää~R÷Cóg&†7’ÑLåþž‚oÈÉN£8Ä aClà]‚ ºe“ HjJ’è&d+§ •ŠdrÐÈÁ'ÿÓ€ó€ßZ s±áÄQú*þ* ))(1$-ºÇÃyH Ø¢ùHKl„䑊OGGç>G¼xae|¿YY;~7ôÿ'å?ÉçïúõõRÒ‚`( 5$Ä#†|Žž3}‹Å„%dö-%q‰ß§¥ŸU†ì†Q/ÊIIJ8a ¼Wø7ÐèI[6GI)¤cÕò¿n,([ùUÿ [õælÙ–ëu¸†ÌªlÎzûŸù›)Î8ì§]ï@¢z: ë@è `ߺ6JQ’VB> _úÅïÙ^ñ¡…òÑݲwù;Ûá}ëÍÎÏ»ç˽.J*ü‹|¬ÍߺÝL¦ýÕG^ÍÎëSc”{¬Å2—WtJ¯”¥fÙ Ûeþ¥/÷ü?¯‹œUõÒ”ˆ«å+>¾î¼Êÿpï›á9uq|¥)WÊÌëR™³c×Ýnµ*®³wÛýóã»>Ûüþ”UõÒ•ì7ì{±ù]Ñײո®wˆ«è¬îݾݕþ}¸¼ùÄ>«¤â¯”¥"*ùJV‘¿ÿm³ÿÕ¶ÆÿW×JVnû¾|wg»‚¿Ñ}t¬eþµíì§0ìzùüÓªâ*û;©¶=kfÍÎWu²”ªºR"¯½±Hd!HÊB•³ý°ì½ª)IE_fu¿Ç©LÙ±ëî·Z•>l”庿q¬µ+õ½„üº‹è@!N@fè+ì„àÄL)—·t'/`ñCO¡‡{ :¿¤MÅñxjÀapü‘›€Ý((—Ò’¸bPÜhÔ†!yžöÙ0¡%£ÿñ,”ÛbRPB,R2rFòhщKm¾ìõ}:Ü–Œ”à ä´·,j>`Ô ÙP„q‹/ý€bg&¥)(HÑ„ÒbPìÙI( ÄྠA)] 2ù¬7«·ÂE­—Àµ_ÆC€Ã÷ %l„ŸðÌìÒ¾ü!=8g%õ2:zKEë°hhHhéÈ+•ЂÉe P¾înÑWôÃHhå 7Y7|XÂPÂÑ‹r“›a„4€¾èGå•í—aJ@¡e†äËüg B,­Ò”%%¬bSÿF)çâŠù’¿uÉ¡©@j900­¾Ü0Á… &ô„öB1i+·åà27l3ŒÉÏtÃH{–Xg+t£¤iiHhBXjXßÜ®ÄκI¥#å=;6=Ôa¬ óâ¯Ä’”‚²’”`°¤²gr“ò>Éß%§B7GGlwˆ]=Èb¿Øae¥ üš59ã:~û7ó§Ýpt²wAÝŒéOrƒP0¶Å:6Ndô2μÁ1%J Å ¤î Á¬œVBqJäÒÆËÁ‰NÝÒ1»Ü_gZÉÀ,vU_çʽ W¤5Ã? /¤˜’Q0±ˆÈ~”æAa£Pz3«'_3¡¡¥!‹ /ÿÝ*/mŠÙ`cddòþü¡½_ŒOÇ_I+¹YÀÜ^(3dòDÄä ¢Ÿ š÷I!(a„„§„ì× Âg% ¡ŸÃPŒ’Xb~HÄÈn“—ÊÈn—½4«w9mœ_#¢¯ù;¯e¯~we1§cÕæWo@néèìùÎNæŽR_nŽ—Í†æþÁ}XÕö2÷~wR›œ³F-–ººR¨«ìû%_n½Öµîû‡uáut¤E_)JDUò”¤E_)JDUö|æü¼sÎ^çÍcªéYþBÿÙ{-Ký¶êÂå}u޽–½ùÝ”ÆV?˜u]'|¥)WÊR‘|¥)WÊR‘|¥)WٰͶuf_ÿ‡þÿ‰ë«¥gÙ*ûuwÜ;¯ ”Uño•™»÷[©”Â_º¯¨\€ÐÒДîW@nÙ)Èý;bXÄôt`²QÓÅ“Œÿw¾W}œºK HiX ÂjPŒá¸4–’Ý?¨'–R LÅíß^r9j ×Wï(šKbi|²¹eþQ3å¥ý‹%~ÿŒ&8foº;÷º¤Òi4®‚^ %lÛ’É¥d~—d࿃ g(1fÙ FúÈžX‰‰(¤ŒÈß$˜Ÿ¸nŽ’j3`0RQÒJ%„ôôö¶¤š+§†¥),0”^n43†t£‡Ã mù##à³ÿx;!Àˆ[ò>֯р©DÀÒ¸ae”’‘°ÂËã7Å 7rb8GFÝ?²VÊtŠ&“2Ä”LJ B9cPjJ²wí€oëß•’éù?f]Ê, (PidÄ! /ÑŠB_éÒ” ±‰ãP„ŒA}F†ŒÊ÷¡/¤ ”€-Ãxhi\¾^Føg”%°k§ä§£|¾íì›§9œÖ#xéÕ䆲o@@jz3ðÏÆ!$®ZÿÈé/—éBRzòì` &£õ†-à[ôbà /²ûuÙÊØ²Gm·½RIy éÅô§ýËÜ!.œÎ[¥ïÊ-›eçÙµäÉ¥·%¤´0i3–QX¡¨Ï™² ÿ²?:~Ù=‘%Y¸ ꊿx<±˜3’ƒ3–Œ5%nŒ”î„“R€„£§!? Ndã5ÆIE%;”Ya‰<5$°.PÂVÁ‰ 匀ބ÷ÈÌý¶UX Z0a/tƒ2pa7§ô() &á¿üJÊÅ¡ Gûµòd€Áщ³äÜXhÄô'¥²†ï†vÝ‹GßtçìývïðîùJÌ"š¿Ô€é™Æ`Ôo°ÒÒPÇ)ò ©-9ЮQ(­Ô‘¨Þàð$šJ ,7îÅÑË%–3!-ä£â_PÔ#€”$ µ@nI–€2±c>mËO&pŒ¢’ŽÄî”±+þΤêpÎ1Ê äÄäbœ0¤bòrIy7•ƒ:I,”î5“ðÏïAÄš Œ~¦¯Èd ÒÑ·/äIhI,°ÐYÌ9 •™‘xÍòvûï¾}ò÷ÜÝîè >ÁˆÅmÊ”1$½ŠGû~žžû²¶$>C)îî<ÿ—¾;±¤îwËרœn¢¯®”¥ÕM_)XËýùÙJlzÎuš¶Rªâ*ùJR"¯•‹~¬Í›ºÝn¦Ý×WHоR”ˆ«å)HоR±×²×¿;²˜Ó±êÇ󫈫å+?Ù·û?l/·í‡«~#O÷Ù= ýmÓÙÙ¶4fQ˜[<¢¯F^ëVøþËcç+ŸŒ>›dm¶ÛlÛem±›UÒ"¯”¥'}Ÿä/ý—²Ô¿Û`þ¬.®”ˆ«å)HоÆ_ïÎÊScÖs¬Õ²•WJDUòúH,JØš‚)d’’¶Î^F/©Ð1;²_ä—Ñ•|ëçeüÜRÕÕß©»ë²B0ߨ­¸ß G+oûî“™÷ºèwÛ둊ªÿ³—ÈH&ƒJ@ÎJá KoËBJ!®á‰+ ´vGå§ ’»Z@ a4¾Q0™°gIx¬’jPË+a¨)¤”ã3’Ž?çÛ^}–¬„tðÂÉ¡ d5ˆd4rðfÈB6%¥É] Q[vÛöÏr\†Ü´Ä5> ȱ= ñ)“·ýöNèÙkçÇœê1C–¡jkZ¿Ö£Z?,aDÌèÅ!Ù%iH䲘šÆ gC(ý“ªƒ ,š…%)&†•Ê)a©¥._ÅüVè(°,º]}9:pÒŠr ‰¨pÍðؾŒ°K€Ô¸hÙ†$“²É_Ýnà_†lVÅ’’o&—Ãÿ/†íºP”~ŒéGŽïgœw9Àâ‰ó«ý‰`(-$£Á ÜÅí“‹-€çá­Û²1ž=c†'² ù<˜XNN û%?»t¡?lPÝÑyPÔà+òVúCCS“‹èø5®Åâb8Æn§êí«MH‰Å—úPPj2„ Ae¥#rCCC(~3'¥-ðÝÛ\ÙLrǨ㕸ùÕþ0¤BÃJ HÒnI{Ê)1=¶(›‰E# φ›£bþ^¹¸5ƒC@--BQƤ±©èAx­ŠFIX ÌŽ”bÉ{¥*JQ·×°ÐÄÁ®ƒ2ÑúKC8ÌÙ ¸–…’ŠIH%d¥kËp & È,5)Á¹# `7ù߆4 rZ7PÜŒÉÍõê$ŒÂñôUüRHHÄ®‡(b: hFÈpÌŒvû²KÉNKýþAÖOƒFÿÓöÝÆ#ô¤¤`Þ—û'òñ7#í¶r°FGÏwY<š['n†ãJ%pžŸÒB傃F`1Ë))Éý)[kŒI„À×(´ôZ Fn”€åG|…¥™úÌÔ”°MÀÉù%þ_(3¤®©B@ª ¸°0ÈÈ(¿Â ènK%ìIZZ߈] PšLK%—ÒQLX@Ä#†1 éJ~ÿ£JN÷4›€QѶÜ͆m÷üjqD¤lS§düK@haûööîù¾_=Aç¹áMÌ•_€N[2IM÷JÉýB†ÒÑŸ#fCïøÔž›É£ nCmÃ3â¶Í²B¿Fn16ê–©ÃKIC?FüoÙ¾éîÛl3d¹NŸ’—Û ×5(Bz?ËG|+·AûÙæ‹?“ÖgWÄ„²²¶VvÊ3?lcÔR—e5|¬lÿ¶¶üß³¶qOØM]zvøg@Ü—ÜûõîrœñÑ}‰ÌRF vOÍ÷K÷ê%¨ó·Çd¥"*û>}öÿ>?3áy÷Á{êºRqWÊV-ò³7~ëu2˜K÷U>}öÿ>?3áy÷Á{éE_])XëùjÛÙniÜåãñ§Î*úéJDUò•›3ž¾çþfÊsŽ;)×OWsþ3å±çÔë”UõÒ”œUò”¤E_)_ÕßoÿlÛ˜ç·û)ß²þƪLíŸïÙfßŠÏØCùE_])Y³ýû/ìÛñYû8«ë¥)WÊR‘|¥+>ÏŸïö7ìÏØSçW×_ÐÝ–§ù_Œï·ù»;¨åñõ´Ëÿþé5,ÉKÓÎVÜÃ*—Š¿ÐÀ@PoR6OrÀ²¥÷Å»-8'2UÆÿß+Þ´ ŽLÜ3ÒÉ5oöBJ/•Ë}øÒПöØgV¾MK”i8êªÿ³”mŠùÆ€ã‚÷èÛpD@j ÿbÓ‘ßþÆû…€`YE@ÜÃI™†¡¥1oHj†$¡ ÛéÁ9¯JÈCl… æB³n¸ÌqÊßVJÜhÜ„ßpƒÐý‘ÝÝ·ÿêÏb4ñf­Dý:¿é 0œ¤¡|„€Ì’Jt—Æ ká‹ÿòcò€º6ûþß^\ FA+”ÑËìØ¤'·éVrÖZ[(™yvÏûgûoÍû;gý„Ñ×ós²ÔÜõê5LµZþø{‰•_6¶Î¬Ëÿðÿßñ=tÝöÿ|øîÏ…vÿªévSWÊR“оWü7·Ûå|ë^îs6fßwv=]ÏøÏ–ÇžwS®®•Ÿ>ûŸ™ð¼ûà½ô¢¯®”¤â¯”¥fÛ?ÛgïÅöÙøõm„hоºÌëR™³c×Ýnµ*®‘|¬Ýöÿ|øîÏ…vÿªë;·m¿eoÛ~/·a-å}t¥'|¥)WÊÆ_ë^ØþÊsǯŸÍ:®‘}™Û>Û²öï·Û8–Ô|ÿ>}·øÝ»·amØE]%|¥+7}¿ß>;³á]¿Á_éÅ_]gì<ý•¿?±„þvËõtˆ«å)HоR”ˆ«ìÜnß:ó¯}Ã÷o„uÕÚÃCM+”—èNo·ùðçßq#õ’“¢¯”¥*оVg[ìz–Ëu-Utˆ«ågví·ì­ûoÅöì%½]"*ùYœßºùÙ”ê7˜7Ž«¤E_+3¶}·eíßn+¶q-ªéWÊÍ›mÿíìü_m°VÚ®‘|¥)WÙ³úùìo9[v5«¥"*û3­þ=JfÍ_uºÔ©óöëB–Ž0þdz¯®ËçÔRQWÊR“оVnû¾|wg»‚¿Õtˆ«å)HоR”ˆ«å)HоR”ˆ«ìÜnß:ó¯}Ã÷o„uÕÒ‘}‹|¼Íß2ÝL·ù—WJDUò”¬û%_n½Öµîû‡uáq}t¬eþµíì§0ìzùüÓªâ*ùJR"¯”¬lÿ¶¶üß³¶qOØM7qçü½ñÝ's¾^”UõÒ”œUò½ ½_»?­_Ÿ–b±ÆI³9ëîæl§8ã²urоR”œUò”¤E_cçÙóýþÆý™û |âjéHоR•Œ½Ö­ñý–ÆÎW?|E_>ÉWÛ¯u­{¾áÝx]])WÊR³ü…ÿ²öZ—ûlÕ…ÄUõÒ”ˆ«åfsvËçwS¨ÌaøÎ>®‘|¥)WÊÏÙ_c¿3õ±ÇÔꫤE_)J͆m³«2ÿü?÷üO\E_]+ßônŒ{p—B¹êù÷ØÏ²ÕÚ¢QWÊR“оVglûnËÛ¾ÜWlâ[UÒ"¯”¬eîüî¥79g:Œ[-uq}™Öû¥»æÇ«2ÝKTéHÄ~¦Ëý=¶Æ÷nv~EÕ”Uò•޽›Ö¦Ç(÷YŠe.®qWÊR‘|¥+>¾î¼Êÿpï›á9q}t¥"*ùJR"¯”¥"*ùJR"¯³ö3õã˜Þzþ8þkNæm×ì§YœÃ±¼u]%|¥)8«å)HоR³}ßo»vâ»nÜr¾â=\E_)JDUò”¤E_+7;-MÏQî£TËU>}öÿ>?3áy÷Á{ê¹E_)JN*ùJR"¯³;gÛv^Ýöâ»gÚ®”ˆ«å)HоR•Œ½Ö­ñý–ÆÎW?|E_]+{-{ó»);¬0긊¾R”ˆ«ågví·ì­ûoÅöì%½]"*ùJR"¯•›»ž®Ç|fêsÏ?)ÕWHоR±³îÙöûsvìùŶqq|¬ùØõw?ã>[yÝNººDUò”¤E_z4ϳo¿Ì{©¸Nø×ØúŠRQWÙ³:ÿ~)JÊ̓Öýý]fîêù¸¥«/7[wÕq|¥)8«å)HоR”ˆ«å)HоR³íÛý»w»|ør¿Â=\E_)JDUò”¤E_+;©¾=jwÍÎ^e²ÖªºDUög7l¾wu:ŒÆŒãêë?açì­ùýŒ'ó¶_«”Uò”¤â¯”¬ýŒýxæ7ž¿Ž?šÇUÄUò•›ä¯}×ò–½Ûàî®.®"¯”¬ÝÌù|ö3ž¯Ï?ÇÕÄUò”¤E_gìǯ±ß™úØãêuUÒ‘|¬ýŒýxæ7ž¿Ž?šÇUÒ"¯”¥cgý³ý·æý³Š~Âb*úéJDUò”¤E_)JDUò”¤E_)JDUò”¤E_fÌëýø¥++6[÷õuŸ³¾Ç~gëcŽ?©ÕE¾VfïÝn¦S ~ê”UõÒ”œUò”¤DÈz¿óýcgݳíöæíÙó‹lâ*ë7Ýöû·n+¶íÇ+î#Ê*úéJN*ùYœßºùÙ”ê7˜7ަï·ûçÇv|+·ø+ýW(«å)IÅ_)JDUò³öcרïÌýlqÇõ:ªë>ÏŸïö7ìÏØSç(«ë¥)8«å)Y¾Nß}÷Ͼ^û›¼E_])Xùö|ÿ±¿f~Ÿ8˜Š¾ºV>}Ÿ?ßìoÙŸ°§Î&®"¯”¥"*ùJR"¯”¥"*ùJR"¯”¥"*ùJVw3ì¼~u:ÍÆÌãâ*÷J·ïó,#?l¿™¿îr³Ž]E)(«ågs6ëÇöS¬ÎaØÞ:®“оR”ˆ«åc¯fçu©±Ê=Öb™K«¤E_)JDUò”¤E_)JÏÆoû«:·ü;güF\E_]+?açì­ùýŒ'ó¶_«ˆ«å)HоR”ˆ«å)HоVlÛoÿlgâûm‚¶Õtˆ«å)HоR•ÌÛ¯ÙN³9‡cx芾6}Û>ßnnÝŸ8¶Î"®•™Û>Û²öï·Û8–ÒŠ¾ºÏ²wßo¾oº÷ÜϪé8«å)HоV:þnvZ›ž£ÝF©–ªºÇ^ÍÎëSc”{¬Å2—(«ë¬îfÝxþÊu™Ì;ÇUÒqWÙûúñÌo=5ަîgË籜õ~yøÖ>®’оR³w3åóØÎz¿<ükF^ëVøþËcç+ŸŒ>"¯®”¤â¯•™Û>Û²öï·Û8–Õtˆ«å+׸ýúß°ÌÆ6Zñ¼Þ³*%}ŸäoÿÛlÿõm±¿ÕÖwSlzÖÍ›œ®ëe)Uq|¥)8«å)HоR³fs×ÜÿÌÙNqÇe:êâ*ùJ͆m³«2ÿü?÷üO]\E_+>v_ÍÅ-]]ðz›¾«¤E_)kýˆý¶Û¿fÛ?t§¿ÙOÒžyæÝ¢h¤ (ž€ßÊm¾ý dÈìóçÙÙÅv²ÛùÕþj—[PÄtd§n”òÿü{7çpŽì£uÉ©¥WÊR³çßoóãó>Ÿ|¾®*úéJϲUöëÝk^ï¸w^W×JR"¯•Ÿ³+÷â”®¾ü9OßÕÒ"¯”¬Û![l¿Ô¥þÿ‡õñuq}ÌÛ¯ÙN³9‡cxêºR"¯³»vûvWùöâóçú®³öcרïÌýlqÇõ:ªå|¥+>¾î¼Êÿpï›á9sоºR‘|¥)WÊV-ò³7~ëu2˜K÷U\E_+>v=]ÏøÏ–ÇžwS®Ÿ³+÷â”®¾ü9OßÕÊ*ùJV>}Ÿ?ßìoÙŸ°§Î&qW×YÝMñëS¾nró-–µUÒ"¯”¥"*ùJR"¯”µþ–edÿòÓ±íÒà Ë^Î­î‘ jrrú Ùtq¼% %æøbŽéÍÔíg§WñŸ?ÏŸmþ7níØ[vwP’ã7ÿnå'ãää6Aß }ËÉ%ogúõ¼†ŽJ ,0éF-(J bWø”RFäänߣ!ó¾½Yn” G&ÁŸd£íɉÝÜ1Š%ò@c–7—ú8¼½›¯«£×WüøÔ$4¼Ÿò>ÉpÂÙ)ÝÊÛ}Ðøj`--öÈÙ웆U0i_²å¤18gÊBYñë}“}W§¤–3¡;üŒJ(4¾{ƒy43âÒR~& oÝúrûX å§lY@ðܲ_§ç Gd¡ %œŽ–Bz0bNè^¹›£FÛ¿ø\êÿX%£òYd´îذݲU€ña©+'t’ ¢Ý(íq€¡+!ƒ658b>`ÎéO}òß9@{¶ÙŸÞ£††“Hi(3Wì”ÈãI‰@ħ¤¢n/¿Û •·Ã7çTåɼ†„aœ3–²Vètô ½Ñò—òCxK”Ÿ’¶ÞÛ¶Ëhe$éUÿ:ÿçÿ+gSÿÏ|3gÌÿŽ“l¶Ûm›l­¶3kÙ’VèÉã\®4­Æ d![ô¶èÈFéìJ þ擪‚ÐQh(fû’7gdd ¤'}öý]Y»7»þî/€ÏÓWùö^ëVøþËcç+ŸŒ>®”»)«ìÜnß:ó¯}Ã÷o„uÕÒ±—ºÕ¾?²ØÃ¹Êçã”UõÒ•›îû}Û·Ûvã•÷ç}t¥gùÿöÛ?ý[loñ}t¥"*ùYþÍ¿Ùûa}¿l=[ñ®³¹›uãû)Ög0ìo(«ë¥)8«å)HоR”ˆ«å)Yo±ê[¾lz³-ÔµDUño•™»÷[©”Â_ºªéHоÍÜyÿ/|wcIÜï—ªéHоÌëR™³c×Ýnµ*®”ˆ«å)HоÍòW¾ëùK^íðwWWJDU÷òÑÓ°Ì7¿ÊË_•Ö+ßPHÐxo)<3% ¯º ø1#JöF%ô6Oã1&á'£}ɼ`j0Î^f/¥“à å|ûv Gd÷ÉÙ?=ép ÀÀbS±¸À2Mü¤q¨l^$¢‹Ù‘œ‚YÛþßÞ Î“™ge…‹sZÒ¯ÖXáˆÜšžÍºK/âЗ-¢†ìRœý=%dä&ñ®¿çI4H Ý4–’Q}%†“T¼IH K&!,JÏÐù¾{š@-)Ò1;â‹ù78Ð0Ã8gÜ– 1.‘wU),a[b‰e’ÊI\44½º@oД %‰Eq„µ¶|לÁ'¦V9cÎÃøêêþ ᄼM è)ðjP„ð‡AX¦ÛàÒWà9ÝÆ—þlŒÝ®ÉH<ÀoÑ‹ àe#Y(应—r‘ÒPFnÿ(†ñX˜LÙ®MºYäÌ”tr†™%'î®÷©Д–Mý<®Ž¼”·-•Æÿ?N%§Æ’wúãGug7ñÎpçZ½Uš-8 aJHgèAIéÜf))ÅÍ›ÆÿÓ¾%¥YýŒ„¾Y ÞZqe¡)ŒHfÏú ÿ¿à[b·Ý ‹K·÷©%¡( I,¤2 a]xbqy ã7 ,bqO&ëÎð€XPGÄÌý¤¤mÉ›—Ê%ñ©ý Y¾JBT†éŒsñû/­d‡ŽŠ¿”L( †P`K””•ÃS’ZººP0”ÅìVãÑ¿ÛÞ ÞQ| 3’JNÉß?ÿt~ŸÑ‘ÿ,àœœ€,Œ½}%; 7‚ÐKÄÒRCO@b1c!;”ÉK–ù(ôüŽ¿îenRK唀*œ’‘ð5,¹Y%¬…>l—Oß"ô¾ß;3ì°š*ÿ•¡#víÐ)9¾ù_ϹûýQz§†£:>ÐÒ1#F;⻄„g%6ÉýÙW fÛûcû?Ûl¶¾¬ªúéJZʯ•Ÿ°óöVüþÆùÛ/ÕÒ"¯”¥fÌ篹ÿ™²œãŽÊuÄUõÖ6Û?Û~oÙÛ8§ì&®‘|¥)WÊR‘|¥)WÊR‘|¥+;™ö^?:fãæqñ}t¥"*ùJR"¯”¥fu¿Ç©LÙ±ëî·Z•W×JR"¯³¹Ÿeãó©Ön0îgOÆoû«:·ü;güF]]¸›úèß÷B Ï—¾^ØzP~£E_ô’ahIdÒùLXÒ¸hÞ^èØ°-‰I bÓöÀ`aY-Ûü•û  ²`ÈÅðÀ0ÌKÜjzðÆ-((7 ÉB] öC7jòØ–…ÓѺwBrP—Áű,hÂPo+bòP‡è/÷õeBV†»¶pÄþ†àÔ‰ˆJ‘Ø þR:#ïõà~ Ÿž¢u­_Ý(g ÄΞ” ´“HE¡8jJéd§¤7fü!$´wÈBä !C%9 Y¢Y@Y1A¥2SÐXí›%÷è3½ƒƒD¢÷Ùb¸ A1#Žý$Ô­)Bv)$·ÌŸ»ÿ¤B|²’ƒ Š-())%ƒm¾ t2BrœìÛØ¿nk¾_YÜSÖª¿ÝðÒÀbŒZF±Ѐ0ŸÆôbÀHƒQ;äíŸo8ƒ7@b ÈR¤°Ô%§¡%·Ý&£ÿ ^¹8 †–Ëø4¢b6J~É I1 ³ô'nÅ ²öá»;':/RM&† JI™X`ÂR¾J8ÅÂk£žùIda¯ÓýçgØ<+‘*«üÐiHÈ(f A(Å%%äÀlÉéB>å0-Ðå–Zvï­äÒ pa,†©)†pÀÔ¬ á£FýöJRètŒÇ#ÔbieÐMåD ·Hn&d–ŒÅÁ¤Ô|ZwéNHN$:9×”˜®£ô£–),¾— #üPÎZÒñlÉéù­ÌlüîvÆ7À4•_éK,˜”LÛ9múŒÛ”WbRSº‹ùú6@Î[¼C IDÎL+ÒQ÷(¤dôñC3¤¶Å ¾’Ûç-‘¾ÙïžrùIN-¥%)JId²ñA‘É©@Ä”Ÿúvû¡#9WÒI¡œ?tto“ƒ3bRÓ²: ¿•~” ®œ4µ~©fîû³ î@¯žÈ¢Y|—Ë,'”’òK+#¥e2K)ûýÉY?ìÕõòððc††ü–žŸ™B;7ä Íº1''nî¥*ú10„ϰ-8o–J¢aH-†§ŒÝö,hbQöÙ‚o—¹HJ?B>Ä­„bVÿ¡°K Cnüã²=ëyÁÂM=ˆôj¿•³úùìo9[v5«¥/zʯ”¥zP5]º>û£çwalÌï›»Ê*ú)XÙÿlÿmù¿gl⟰š¹Å_)JDUò•ŸnßíÛ¾ÛçÕþêâ*ùJV2÷Z·Çö[w9\üañ}t¥"*ùJR"¯”¬Ù¶ßþØþÏÅöÛmªâ*ùJR"¯”¥"*ùYœÝ²ùÝÔê3~3«¤E_)JDUò”¤E_õ (€0„ÊèåtJéÈû’ùKø1 Þ’RÁ,'ÿþNW¸Å“RÈ &  Ô¸ìƒJGè(aN–IcP¹ùö¨F,04²jQÿÈøbÁ,†Ý)Èßv(Œ”¥#9œùËbRRMrÒY\# ¤ ¼ÃKJSúw+5“Ø k^ º³ž¿—‡™‡ü¡6µiÔ!$2aD´ô†–”QiNû—ñmÛì¡©B\`Í»Ô ¢b mÊ&„ 0¾”!<) ß$¿Ò[§—†¶Òù[¥¯¼`P3¹3ðÂZCwdòQOZƒÐØ#b‘ؤ$¯†çé½ @)BPL@c † (7Ò1; ¢Ð“˜¤;²VóçkËÝ™ûå‹ÂOø1ë«ò†äà×@Ä¡ ´€ì½ÊÝY(-Jyt“2K^AhÇ#m¯-ñD>‚ÐÀÄ ²Ž’gFéFؤ ìºII[wŸ_Y,3rþ ,¿ò”ðÒ“Ãz[íðnßù(j>Ücûæ$ÌP„ÀÄ“QÆ ¤•É©,i@`–žZ6å|Sg)?£ŒëêȺ²±üÂPõSWóQ5 M/í“‘ cd¥‹/ätdâŠb[ОÏû»Út¤šM) da ° CnK%’¹_%*ï¸ß†nó²*¹ErËO &¡(n,`ae’’„·(›€ÊPPÂ’ÊÉÿ¿OþÈIœü7w I_3£ Èÿ tô¤”V K£ºSÿ}vt¾mˆçlôªòeôî–Ø5º@ÂíÓÊè²~(›òYa˜¦Ø¾É{À¡](ÅtmÝÂ=+ÿ7sÏ}Ÿ½X&%d’þûô°am‘ò Fè rnÁ)d£;ÿþ]åɃFq¹¸ÒÍýD¾3¯óÐÝŒ;lué'âpð±G*Š¿ )Y»íþùñÝŸ íþ ÿ^…}t¥"*ùJÍòvûï¾}ò÷ÜÝêâ*ùYöNûí÷Í÷^û™õ]"*ùYÝMñëS¾nró-–µUÒ"¯”¥gvíöì¯óíÅçÎ!ôE_])HоÌíŸïÙfßŠÏØCúºR"¯”¥"*ùXËýùÙJlzÎuš¶RªëñhìÉÜn›åå/ËË¥z~3ÝYÕ¿áÛ?â2êéIÅ_)JDUò”¤E_)J͆m³«2ÿü?÷üO\E_Ý9@d0”éÃR„vÉûï×’3Ç­wNzñ¡¨!¤èG&mÒPj€·Û¾ù‚'öwXNF¼½ê©3¾-éoÓÜš†b’€Œ‚‹û²xwcî40ˆ¿UWú¤¢i  ßò¼œ€‚‘иÔ%’ý¡8¾·Ä®Éú¼3âhèådÿÒ”œnù-#J&‚ƒwOý(JCr:g Ð0Pj/Ɉé(˜‚øiCPØ !?'l”ô³£¶+~ö°ÂK/ B ¥²>ùú‰h%à†) &|„ íÿB5ä­yÛŸÇŽê#šm¥_‘1˜!Ê)¸´§¤––èåüσ¹NŸÊ,5,ÑËï{pÂbQÒQ_q©Ahã ANÒQdÂkâ²èû£€23ȼ@ R‚A¨É¤¡(F(¦ FF䲃rCxÇJ±}Ô1ïB@Èi01#CL/àÒR9Ed'nZ K ¾’ÿÈY{*çÛ:Ï^ç©S«í&²$4–€ÂYEòËHÔä‚Ie”äà3ŠPÝÊJpï¬0!PÐ2’± C~ééVü !( è%¹{¡/ÊK¾GOMìb‚òpnA4¿²IhH ÛÜiiû„t Fd#rRqÈ],Äßú7ÄÔ!%ðÞžLHÒfÓÉ}HJ[’þÅòЗ»ëò²ÌfØŒiÜ:¿Ê$´”’R¼CÉ,5 Ä¢ðb Ã’_BúPPÌŽXÄÿ¯ Òž0˜R C†öý› ,­Êt”á›¶JÍ÷ýzë Ä!Ã6Û’À±krÉBq(j?è%¡‘ÐV=yšñ9 Wß%ÓÂv-=º[q‰OGÛ†3c³Þ¡å凑WE_Z7ÉNR™éÿôõvnøöî5̰סÛ;¿[$cç[)G)Î?Ô^ϲ«å)J⯕Ÿdï¾ß|ßu﹟UÒ"¯³q»|ëν÷ݾ×WJDUò•ŸvÏ·Û›·gÎ-³ˆ«ˆ«å)Y»º¾n)jËÍÖÝôE_])HоV-ú³6nëuº˜Cw]]"*û>qçî¯ñÝÌ'ã¾W«¥"*ùJV2÷Z·Çö[w9\üañ}t¬uüÜìµ7=GºS-Uq|¥)WÊR‘|¥)WÊVnîz»ñ›©Ï<ü§U\E_)Y»?åïŽìi;òõ\E_Ú &pÒÊücòsá®—ÛfØ!8'~f}ïtY4H c’Š-£ AY»âÆ•ÐW@C!ÒZ¶Ý†ß+¯IHOGùú;á]º+ýqçc{æUU×É¥r’`)˜5¿ÉJP¿ 7 B WÈ,—†7t£¥ ÿZÃI…ðÂÊß'd'”Œ‚ÀÎBQ‘ÐPÜ„`ÒV+¬¬”|”ûã80¬¡ˆVFÊÇ#º0ºðã-ÀÁކB2‚Ð3o³Ï›|»/twíÕpä›ÿ<(áëU_ô Â¥#?&±Iù t≩B0iEŽB6ߣ•ÝLèÚñh1_nR:6~œ„„ñ¨C¥—÷CüÌÜ!wÄ B7JÔ„ü¯¾û¾ÙÝ|1³3XvÙþÛ?~/¶ÏÇ«l#]=?9¢Ï<|ªþ©jt’ R0ÂùiHGä¢þ~²þÏ·w¹]Ìû/N³q‡s8úºÍÜÏ—Ïc9êüóñ¬}ÛM_>íŸo·7nÏœ[gWJZJ¯•Ÿç϶ÿ·vì-»«¤E_)JDUö~Ûý¿lvgâ³ý‚þÕuŸ¶ÿoÛ™ø¬ÿ`¿µ\¢¯•Œ¿ß”¦Ç¬çY«e*®³öcרïÌýlqÇõ:¢*úë7É^û¯å-{·ÁÝ\]]fãvù×{î»|#®"¯®³|¾ûïŸ|½÷7zlÛoÿlgâûm‚¶Õq}Û¶ß²·í¿Û°–õt¤â¯³;gÛv^Ýöâ»gÚ®”ˆ«å)HоR”ˆ«ìùØõw?ã>[yÝNººÍÜÏ—Ïc9êüóñ¬}\¢¯³á»îë̯÷ù¾—WJN*ùJR"¯”¥"*ùJR"¯•Û·Û²¿Ï·Ÿ8‡Ôû'}öûæû¯}Ìú®QWÊÿ’êù”~üÐ?ÊúÖtÌû/N³q‡s8ú¸Š¾R³¹›uãû)Ög0ìoW8«å)HоR”ˆ«ìeþüì¥6=g:Í[)Ut¤E_)JDUö>}Ÿ?ßìoÙŸ°§Î&®•™Û>Û²öï·Û8–ÒŠ¾ºR“оR”ˆ«åc¯æçe©¹ê=Ôj™j¦ãvù×{î»|#®®QWÊR³fëÿŸÜÒv;eiÅ_])HоÆÏ»gÛíÍÛ³çÙÄQ³îÙöûsvìùŶqt”Uò”¬Ünß:ó¯}Ã÷o„uÎ*úéJ͘yÿ¯þsIØí•¢*úéJDUò”¤E_)JÍÝÏWc¾3u9矔ꈫã¯å«nwe¹§s—ÆŸWYÜϲñùÔë7w3«”Uò³ç7åã˜Îr÷<îkWY»º¾n)jËÍÖÝôE_]gví·ì­ûoÅöì%½]fÙm¶Û6Ù[lfÑ}t¥'|¥)WÊR‘|¥)WÊR‘|¥cgý³ý·æý³Š~ÂiöJ¾Ý{­kÝ÷ëÂå}t¥'}›0óÿ_üþ擱Û+UÒ‘|¥+{­[ãû-Œ;œ®~0øŠ¾w3n¼e:ÌæãªéHоR”ˆ«åfu¿Ç©LÙ±ëî·Z•WHоR±—ºÕ¾?²ØÃ¹Êç㫈«å)HоR”ˆ«å)XËÝùÝJnrÎu¶Zâ*ù¾ï·Ý»q]·n9_q®”ˆ«å+3­þ=JfÍ_uºÔªglÿ~Ëû6üV~ÂÊ*øëùjÛÙniÜåãñ§ÕÒ“Š¾V~ÌzûùŸ­Ž8þ§U]~Ct÷ýÙ_«lfÇÿŸÇ¶Òн>Éß}¾ù¾ëßs>«¥'|¥)WÊÌëR™³c×Ýnµ*›3ž¾çþfÊsŽ;)×W(«åcgݳíöæíÙó‹lâ*é8«ïBÎÿÿfs3¯¿ÈÛ9¬eE)(«ìîfÝxþÊu™Ì;ÇUס oý¶ÿóÙÖÙ‘¿u¶ÎQWÊR“оR”ˆ«å)XëÙkßÙLiØõcù‡DUõÒ”ˆ«ìÙœõ÷?ó6SœqÙNº|7}Ýy•þáß7Ârêé(«å+?ÏŸmþ7níØ[vW8«å+?íŸí¿7ìíœSöF_ë^ØþÊsǯŸÍ:QW×Y¶FÛm¶Í¶VÛµ]'|¥)WÊR³ç~êÿÜÂ~;åxоºR‘|¥)WÊR‘|¥fÌëýø¥++6[÷õq|¥+7wWÍÅ-Yy¸rÛ¾ˆ«ë¥)WÊÌëR™³c×Ýnµ*›îû}Û·Ûvã•÷êå}Ôßµ;æç/2ÙkU])8«å)YoñêS6lzû­Ö¥DUõÒ”ˆ«ågìÊýø¥+¯¿S÷õtˆ«å)HоR½,#¹Õ¸¼n=J~ÜÚ‰E_)JN*ùJR"¯”¥"*û7É^û¯å-{·ÁÝ\]])WÊR‘}Œ¿Ö½±ý”æ_?šu])WÊR‘|¥c¯fçu©±Ê=Öb™K«ˆ«å)HŠ¾ÍÆíó¯:÷Ü?vøG]])WÊR‘|¬îfÝxþÊu™Ì;ÇUÒ"¯”¥fsvËçwS¨ÌaøÎ>"¯®•ŸnßíÛ¾ÛçÕþêâ*ùJR"¯±—ºÕ¾?²ØÃ¹Êçã«¥gí¿ÛöÇf~+?Ø/í(«ë¥)8«å+>íŸo·7nÏœ[gWWÊR‘|¥)WÙó›òñÌg9{žw5Ž«¥gã7ýÕ[þ³þ#.QW×JRqWÊR‘|¥c¯fçu©±Ê=Öb™K«ˆ€z¿óý)HоV~ÃÏÙ[óûOçl¿WHоV:þnvZ›ž£ÝF©–ªºDUö:þZ¶çv[šw9xüiõt¤E_)JDUò±³þÙþÛó~ÎÙÅ?a5tˆ«åÿwç+m‘ÿÙû:—ŒÌßþÕ”Uò”¤â¯”¥gÃwÝ×™_îó|'."¯®”¤E_fÛ?ÛgïÅöÙøõm„jºR"¯”¥"*ùY¶FÛm¶Í¶VÛµ]"*ùJR"¯”¥bß«3fî·[©„7uÄUõÒ”ˆ«å)HоR”ˆ«å)HоR”ˆ«å)X·êÌÙ»­Öêa Ýq|eîµoì¶0îr¹øÃêéHоR•™Öû¥»æÇ«2ÝKTE_])Yû2¿~)JëïÔýüE_]+ÑùÝmÿÈûwsñ‡?ùOQ(«å+?íŸí¿7ìíœSöW8«å)HоÍÜÏ—Ïc9êüóñ¬}])WÊR³¹›uãû)Ög0ìoW×JR"¯³öe~üR•×߇)ûúºR"¯”¥"*û>}öÿ>?3áy÷Á{êºR"¯”¥fu¾Ç©nù±êÌ·RÕW×JÇÏóçÛÛ»vÝ„UÄUò”¤E_fï·ûçÇv|+·ø+ýWJDUò”¬Ù¶ßþØþÏÅöÛm¢*úéJDUò”¤E_)JDUò³fÛûcû?Ûl¶«¤E_)JDUò•›dm¶ÛlÛem±›UÄU÷ìßí¶Ç¨ßÿé|Ì-Ýù6ÈÛm¶Ù¶ÊÛc6«¤¢¯”¥'|¥+ÆíÆ:Ô¬¶woØíÛ·í¿Ì|¢¯¢”¤â¯”¥"*û{-{ó»);¬0êºWädó¬zSÍý[ÿ±æØí¥}›d+m—ú”¿ßðþ¾.›îû}Û·Ûvã•÷é³í»/nûq]³‰mW×JRqWÊR‘|¥gùÿöÛ?ý[loõq}Ôßµ;æç/2ÙkU]gÃwÝ×™_îó|'.®QWÊR“оR”ˆ«å)HоR”ˆ«å+>ÉWÛ¯u­{¾áÝx]\E_)JDUò”¬[õflÝÖëu0†î¸Š¾ºR‘|¥cgý³ý·æý³Š~Âjâ*ùY»¹êìwÆn§<óòUtˆ«ågí¿ÛöÇf~+?Ø/ízBhÄÁ­¹'ºÐ‹ûìž”9[³#·XÎë¬/âÉœ˜Jä,‘Œ›!*ã9]%n1ò7ä‘›åç¹¶YõUü Q¾éNÙ)Ý–^é|7–ÊÊû«¯µèpo!¹eô`(1›%ûG(7±Y!i$#}ÔÏt€,(@Çû% ý%%)B±{lѳ~ž‡/Œ%§m^P@b !!VK†þVHbŠûR‘’ߥ!(rSopwãÿ0À6mU~@ )( OBR”`À”'ñ dnÝ/ñ+¡/øÌVÛ\’° ¾ÈHjR_û”_/#ä$±ƒF¤g FQ/ôgn¿v‰„.Q0bqe!J1D´o‹HhÔr·ÝV‚R@n‘œ ÷ðüa›r¥-ò9Y Ùÿ GÉá™+/$$nÛfɳíÜã;Š9aâ'Wüøk0Ößÿ¶sÏùŸeŒÏñ‹>¢úD2i{`)ŸpÄ$¤ò°™¿+£ J9F%ºKNCá›æ¼ çùóí¿ÆíÝ» nÂ/Q‡Û:¾ºô;gwÊtŒ~Êp…,õ1çjŠ[ʯ³ý›³öÂû~Øz·â5])8«å+7w=]ŽøÍÔçž~Sª®"¯”¥"*ùJ͘yÿ¯þsIØí•©þÍ¿Ùûa}¿l=[ñQW×Jô a¿æÛoÜç[ðŸù¯ùÒ}’¯·^ëZ÷}ú𸊾ºV-ú³6nëuº˜Cw]3­ö=KwÍVeº–¨Š½÷û#%©ò;;?æŒÊ7Šw¨¥"*ùYÝM±ë[6nr»­”¥Qo•™»÷[©”Â_ºªâ*ùY¸Ý¾uç^û‡îß뫤⯔¥fù;}÷ß>ù{înñ}t¥"*û;©¶=kfÍÎWu²”ª2÷~wR›œ³F-–ººJ*ûÓ“ðGÛ¬ýùŽJ n!Bê)HоWïݾoß©þmÔý¶ßï”%ª)WËÔĆ„^ßô£gÈO}Ëd#tœ_éåeoñ% ÷4¾R3}¿ûa®3þgø4íù¿+õ^¬˜B nRFä `!ýö,¼XÒÒ”pÂÆ'¤nüj~9Gë“/¬ŒeUInMår“ËÒZPR@ÀnÛ†!-Æ—Æì_ß$·Äº²‹à;Fä2Y ;7èJ@(è)Ƭ®‚ºJ î5*ͰNU°šBJJ 冠¼‚¶ È/ºs% ‚úPß‘¿Ù?°BrRÓ“I˜05%¿ -âŠlÑòÆ¡Šé#0f%†à¹ÒZµäîÊÇ-Ìî9gZUü’’a4hj´±\½Ò”÷G(¢“É}#2 XjrM$Þm!„°.Ý#'–Û)º K¡£ìœå›³½ôTâÆ¤j@ÂSÃKJFôÙÊO(¢a@[÷ü¢jpÖdôð–¬Ý( @`ÐÇü¤Qaˆá…ºK ~W°iéùÐ’VÀ}uS‰ýdùUü\L@h†%ñ†t”S'rÃ#ŒCbº†!;¹0¤åý¯ô•ˆ[“C8ÐÔþ1(J6nM%§$fJÆZq(fl³Þ´˜òI€c•ŠÎVÁ-=?eþ†.VN὚¶Ftëqm±A˜”^N%$4±…!¸cXÑ£: nÍÛ%})Nׯÿ¸§qâDõUþ/ž^å`Òòô—Šèø¼WrÊ&%*J~& ‚¹i^O×Hhia‰ÙO`ÜrxbI\•ñx•Ó¿ÿüRñ“õôÒ+”Q+Tá|˜LA0´•ÕòCCrR”ugI%“Û=Å!8Ha ¤`0CAe†–Xai,1ú9oº_¸Ä§?Q%µÑÑ–üÜËZÄ+)¥Wü¼0²_ÿ% +ìJJÉÃq}Ûà$Ž]ͽÐh¹x—†²:R’Šåõ² ©Ã à Ÿ£â÷èÛ'|ùïÿ¡Ñ—óì—AŠÝóáj|:÷C€6u}¥.šjùJR"¯”¥"*ùJR"¯•›3¯÷┬¬Ø=oßÕÖn7oy×¾áû·Â:å}t¥'}Ÿ;/æâ–®®ø=MßUÒ‘}޽›Ö¦Ç(÷YŠe.Ÿ°óöVüþÆùÛ/ÕÖo»í÷nÜWmÛŽWÜG”UõÒ”œUò³ñ›þêέÿÙÿ—WHоR±×ós²ÔÜõê5LµUÄUò”¤E_+ùy›¾eº™n%ó.®‘|¥)Wô‰©NB~ÉGNm’7²B>Oû·mÐý¶çÞíM+ ”ŒKÿ`vIe)E„öÈëä²6ç}y0£ò¾t¤oÈ”‚^Xݺqýû'p…|»ßÃCJÃI|7qŸ!¤¥<¤w+¤nAå%¾@Í‹,fNÍy·"ódiWÔ¢Ë& 4—ñCÊe£nQ3$îé+|Œ—ä²5¸ÅÝBÀb¼K(0´ƒÀÈG Oì°Ä:PS (5=?·ï»{¤[”Žý á¨Ahè OI5)- Nøj9cqíÓÑ÷½Úphì5(H`Û”’ŠFB#„0ß² å¡*_Ïšðú70óÇ/‰"*Ò¯ðø²€Lù!1îVåä%Ë OpÄ¡$ÂöÅ!) vÝÛ']€ŸJI0¼Ä~JFÁ¸&>ßb†òWßïËa«J{¿àe;†’z\—ÐÝ”–7òWNá¹Iϱ½®*@b’hÔõ!Ã{£--ÑÆùcðÞ”K%²ö±Ù–ìì8ƒ–"u}›“@¢öAerÊÿ`3À·FÝ $NB)ù¡()Ûú¾ZƤ”^ã§'ò»òXnI|–’R±E$bpÜÁ9ýPa1$Ý‘ƒCOÁœ¤nØf n”—Ø7£0ÆAy/}Ù[ÜÌM@ NÛtþž0go1(ľ‚@j>-\¤:Wémù¬"?_‡Ð59‹Å§àÒY ¡?†”Ÿ‰yÑÆ¤´|['6NJ5Œ² „´104¢@tq›†ò’M Ûp—A- JOÈΟXB‡BC21 E|^FO).¯†äð.œ^,ôqòï.Pb €;Rw+$ '¤4$ –_/”Û§îJÿt³ Ì”ÿvô¾^~±cŒ¢¯á€²Z„·I3€ÇB2vå7FÀ$HÍѲ;$Uæƒ15ؾ‚þíÓ˜’1¾ÝÕó³-̽`c†lQ+튷(0´g/2\§ p”%)ÝÐ[oÒÿæ¼öN/ QifÁ¡¶çÿ’”ž†øæ×¸–×f…,‹gWñ»™ö^?:fãæqõu‹|¼Íß2ÝL·ù—Wz4Uò”¤â¯”¥"*ùJR"¯”¥"*ùJR"¯”¥gã7ýÕ[þ³þ#."¯®•›Ûç^uï¸~íðŽº¸Š¾R”ˆ«å)HоR”ˆ«åfî竱ߺœóÏÊuUÒ"¯”¥gví·ì­ûoÅöì%¼E_])HŠ¿¬CùŤ²ÊÁœoèÎù¾ù;!?¡oÔ¦wÍ}\ §ËNå§NƒI¥l‚óî’R8ÒËBË£rSbŸ mÿ¾-óï·ùñùŸ Ͼ ß_H¸ âRxo)»d¥)Àö C_éKŒÉ]ä 9lÛœxìh}¥_ô´RÀ¨ÐÒÊ t#‰¨A``%;îú2“öÍ÷ΓöÛ{Ö’Ÿ¡ gŤb6%”Œž”4¾´ï“•™)+² …÷éä¯öèÙ.‚ú8å ˜Ž”p3’5Y±XçÕ¥“R’€XÒM/ô6,7þž¾/%˜k`-·çïõóyÎw,mµ^ˆ%LùN´‡A1ÃSÓÐ[o÷Ådõ§#fFýsú ©& åâf,¤>éGÿ$jY)FGñ#6gtü»¡Ò€ÇäÂÓ›!-þ?îsŒ 3|Ô’÷F²bú0ÌŒÐ0œKß––ߣçÄÔ”3nÜb³6fLgëŽÑWùò‰Ÿ†6û—No²@¦NÃyhãS‰…ìŒK¢³òOÞ¬¤”‚nÚIHÈèt` /éd¡%„§dò’Mæ²;aº°šBÛàѼš”þ¹}ÿ(3—’V/âà NFÝ?á™°Á»ÕdZ2 (˜œW!òöéF+!<²’ëd߀rpJ6Ì7(vîrˆ‘WùBa ¥ ¢XhF @h ,¤ ®[ä 5 Ad¦’—ÒÞÌZ9+  1”Ò„þQî^lŸÊ /ñ»wØÂŠÿ—÷Ö_ú_ïúÊÄ´)$ 0K+§·,›ŠOB\jJlŸ†¿OÓ€œ˜Ð2R¥Ë+“@Rý²RWèéºï¿éÙ³^ŽS–ffqe8¢¯ÀB &€,ÉJC;ÀÇ ‡t#!×V㌔€§¶|÷¨-( BVV%Œ¶[œŒê+©ÊÅt''ªô$Ò` ˆytìŽ^(…² È))e °Ï·ÄÒцÿFë®*J,jP‚ÃP‘ˆår~BÿåîMÅô¿IO‹†•÷t>ºÿÍûaÎÆ… sôÕþóÐÙ·_^ë}ö|¥/~ë“ç7åã˜Îr÷<îk:2@ÿÝXíòÖýiêêl`ÿ&ù+ßuü¥¯vø;«‹½Ë*¾~Ûý¿lvgâ³ý‚þÕt¥qWÙûúñÌo=5Ž«¬ÿ#þÛgÿ«mþ®QWÊÍ™×ûñJVVl·ïêé8«ìÙ¿¥efÁë~þ®”ˆ«å+6m·ÿ¶?³ñ}¶Á[j¸Š¾R”ˆ«ågìÊýø¥+¯¿S÷õtˆ«ågùÿöÛ?ý[loõtˆ«å~ûÿò_Ù›t¹ÙÝÕß©ª+3­þ=JfÍ_uºÔ©E_]fîgË籜õ~yøÖ>™Öÿ¥3fǯºÝjU\E_)JN*ùJR"¯”¥"*ýiF ÉAhBQùÜ'|®½óbÎÞÜM&PhfNßþ0#¼¿›äwK%óþêUƯIH/t%;Ÿ“·Ü;ªË¾cçWþ˜ÙDÔrŠÈèÈ éÙ)&¡Ë% `ÔâÒVB Å%ý· רA1< 䆕¾ _´|’Q+äaƒF©²¬øð†¿>fL%“8JR[î„ôô ùéN/”#lÅ…mö½07Ñ)Š(›Ée§ Å%!½oñiR7J1(ãøÎ»äŠNüþvÝ_SoWý¤"±hå~Ù“‹ÉIdÔ`0Y1iá ïÒ3ï³vÖ°Å¡· G/n”!#JJ?ù(ÀnÃÌŽ“²Ðúò(È+ƒxo@j~·O!©ËGJ7JÓЀˆèNI]ª €M( %“r0iE#V)(GH@kᨠï²:qHCô+ë•"Ì;ŠÂHÕUú1CC0¥äÙ!“‰„¾Pz@l‚’7¡+d- ücûËŠ°j6YA¨)a7»#—Ó¿ûþËìV+‡Ã¾k–MHÿŒ„²zM@ ±cyh+”X rú6îŽR%m× 8¢gJ7ù8´òAxb%†„'l”$¡¼µ£ìHÚõùÀ­œKgWû<oÈA¨`ÂoÈ Ã†%ß•’Ÿ¿By@ ¸W³€À˜Ä’Ò0„ÐÐҜġ¿Éa›˜§÷éî1¯'ñe„§’J(–M¤¤éFGÛ}·Ä²À±%òmo B /td”C~Éÿ9]?c¶I ??ûð3ÊF­ã—ò„~Ê|UólPèè O)Ÿ„îR$‡ÃP•º ÉÝy’½¯&‡ÅúYr]£¥.ý mÕ›!Û¯^MÀøîÇFÈW(oØ$–RR_%òI_oÛ>Ù>ùÞãvù×{î»|#®ï$p7¸Œ`ê*úéYÝ»mû+~Ûñ}» oWztUò”¤E_)JDUò”¤E_)JDUò”¤E_)JÌíŸïÙfßŠÏØCøŠ¾ºR‘|¥fÃ6ÙÕ™þûþ'®®"¯”¥"*ûýy›6eºÝn!³*®”ˆ«ìùØõw?ã>[yÝNººV>}Ÿ?ßìoÙŸ°§Î&QW×JRqWÊR‘|¥)WÙûoöý±ÙŸŠÏöX¿µè …LÉd’ÓÒXkn„%)Û!/‘ÐWû«©vu®óë|¼Íß2ÝL·ù—:P5—ó}ÕÉÜϾRÄæíì\€ùÕÿMJ !‚VÐ ÒÊ#T™?¡¹M5)K·ÈA-ßê²Êá¥$²ˆîrÀ¾BIE%q<”3åàÂú0ÂòzÑyÐ(Ž†å¤­Óºº6qhût qª9Òá/ÚÔlÒr1Eï¾oÒPB: ü¥`÷Û7Üïyx¾ç;aóë«û@0,¤RLFééÉ?2¯JxÍ“þdòBsdû ʲaE‹/þJÁ›¥801#¶K’ÉHK¶ãJA,hÏŸÜЂ¶}ƒ@É_òƒR‘½<¤a®é=¶û£åp†>€‚Y-‹åï“ÀºðÁ™e–^ûtíМ¤³M%þØÃ˜qñWï@IE bä´`ÏñCJ)trßüÊïÒêÿ éjðñ3‹ŽÞœZTžå’öG(7¥ß ¶û§Œm—x‚`f& ­úr6Û¥±Çm•”u—fuþüR••›­ûû§¥ÿ8€¾U~àÀŠZÑú6oݶÿäöÓöÙ[++k›J]ÞŠ¾R”ª*ùJR"¯”¥"*ùJ͆m³«2ÿü?÷üO]\E_+?fWïÅ)]}ørŸ¿«¤E_)JDUò³»vûvWùöâóçú®‘|¥)WÊR‘|¥+ýY›7uºÝL!»®"¯®±óüùößãvîÝ…·atˆ«ìüfÿº³«öÄeÕÒ‘|¥)WÊV~̯ߊRºûðå?WWÊVnãÏù{ã»Nç|½F^ëVøþËcç+ŸŒ>QWÏØyû+~c üí—êë>Éß}¾ù¾ëßs>«ˆ«ìeþüì¥6=g:Í[)T[åænù–êe¸—̺ºDUò•ŸöÏöß›övÎ)û «œUò”¤E_)YûúñÌo=5Ž«ˆ«åfù+ßuü¥¯vø;«‹«¤E_+;·m¿eoÛ~/·a-êëýY›7uºÝL!»®QW×JÎêoZós—™lµª®qWÊÌæý×Î̧Q¼Ãù¼u]"*ùJR"¯³ý›³öÂû~Øz·â5])WÙ³9ëîæl§8ã²ut¤E_)JDUò”¬ÎÙþý—ömø¬ý„?ˆ«ë¥zQ“›¹§%(?|z>æ‡uŸª%|¯éÈùÕ¹¿íŸý¶_wÿ©µE"*ùJV~ÌzûùŸ­Ž8þ§T⯮”¤E_)JϜߗŽc9ËÜó¹¬tE_])HоR•Ÿ;/æâ–®®ø=MßDUõÒ”ˆ«ågìgëÇ1¼õüqüÖ:®‘|¥)WÊR‘|¥)WÙþÍ¿Ùûa}¿l=[ñ®”ˆ«ìî¦Øõ­›79]ÖÊRªéHоR”ˆ«å)HоVw3n¼e:ÌæãªéWÊR‘|¥)WÊR‘|¥)WÊR‘|¬Û![l¿Ô¥þÿ‡õñutˆ«å)HоR”ˆ«å)HоR”ˆ«å+7;-MÏQî£TËU\E_)JDUò³9»eó»©Ôf0ügWHоV}»·nøWoŸWøG«¤E_+-[s»-Í;œ¼~4úºDUò”¤E_)JDUò•Ž¿›–¦ç¨÷Qªeª®"¯”¥"*ùJR"¯³wsÕØïŒÝNyçå:ªéY³?õÿÏîi;²´¢¯®”¬Ù¿¥efÁë~þqW×YöíþÝ»á]¾|9_᮳ñ›þêέÿÙÿ—(«çví·ì­ûoÅöì%½6ÈVÛ/õ)¿áý|]]fï·ûçÇv|+·ø+ýW×JV~ÌzûùŸ­Ž8þ§Tâ¯Ìû/N³q‡s8úg[ìz–Ëu-Ut”Uò”¤â¯”¥"*ùY³m¿ý±ýŸ‹í¶ ÛUÒ"¯³}ßo»vâ»nÜr¾â=6¶Î¬Ëÿðÿßñ=ut”Uö6Û?Û~oÙÛ8§ì&®”œUö2ÿZöÇöS˜v=|þiÕt¤E_)JDUò”¤E_)JDUò”¤E_c¯å«nwe¹§s—ÆŸWJÆÏûgûoÍû;gý„Ê*úéJN*ùYþBÿÙ{-Ký¶êÂêë7qçü½ñÝ's¾^”UõÒ”œUò”¤E_)JDUò”¬ý·û~ØìÏÅgûý¢*úéJžVfïÝn¦S ~ꈫë¬ýŒýxæ7ž¿Ž?šÇUÒ"¯”¥"*û>¾î¼Êÿpï›á9ut¤E_)Yû?eoÏìa?²ý\E_)JDUò”¬|û>¿Øß³?aOœLE_]fù;}÷ß>ù{înõtˆ«å)HоR”ˆ«å)Hо[²S¸ÎJÿÍþä¬hÆëßäu±¯¬5ïݶû¾Ws»7ï—Ÿ6î9芾ŠR•Å_)JDUò•Ÿ9¿/Æs—¹çsX긊¾R”ˆ«å)Xùþ|ûoñ»wnÂÛ°ˆŠ¾|ìz»ŸñŸ-<î§]])WØÙ÷lû}¹»v|âÛ8ŠºR"¯”¥"*ùJR"Hz¿óý+6ÙþÛ?~/¶ÏÇ«l#UÄUò”¬Ùý|ö7œ­Ž;ÇÄUõÒ½ß>ÿ»nß?XÏ„žÚ¢QWÙøÍÿugVÿ‡lÿˆË«¥'|¥fvÏ÷쿳oÅgì!ý\E_)JDUöw3ì¼~u:ÍÆÌãé»?åïŽìi;òõ]gví·ì­ûoÅöì%¼¢¯®•›lÿmŸ¿ÛgãÕ¶ªç|¥)WÊR±×²×¿;²˜Ó±êÇóˆ«ë¥)WÊR‘|¥)WÊR³çßoóãó>Ÿ|¾ˆ«ævÏ÷쿳oÅgì!ý])WÊÆÏ»gÛíÍÛ³çÙÄUÖ~ÃÏÙ[óûOçl¿(«ë¥)8«å)HоR”ˆ«å)HоÇ^ÍÎëSc”{¬Å2—Lë}RÝócÕ™n¥ª®±o×™³f[­Öâ2¥}t¥'|¥c/wçu)¹Ë9ÔbÙk«ˆ«ìý˜õö;ó?[qýNªºVlÆþ¾{ÎVÇcå}t¥'}™Öÿ¥3fǯºÝjU7}¿ß>;³á]¿Á_êºÏ·oöíß íóáÊÿòоºVm­¶_êRÿÃúø¹ÿ|œŸ({v|û}ÍÝŸ*"¯¢”¤â¯•޽–½ùÝ”ÆV?˜u]"*ùYœÝ²ùÝÔê3~3§Î<ýÕþ;¹„üwÊõrоR•Ž¿›–¦ç¨÷QªeªqW×JR"¯”¥"*ùYóï·ùñùŸ Ͼ ßUÒ"¯”¥"*ùJR"¯±óüùößãvîÝ…·at¤E_)JDUò”¤E_+6m·ÿ¶?³ñ}¶Á[jºDUò•ŸäoÿÛlÿõm±¿ÕÄUò”¤E_xÍ™‚3ÿöÙ»»ºýÔÝê)IE_)JÍÜyÿ/|wcIÜï—§}t¥gÛ·ûvï…vùðå„xоºÏömþÏÛ íûaê߈Õtˆ«å)YûúñÌo=5Žˆ«ë¬uüÜìµ7=GºS-Utˆ«å+7É^û¯å-{·ÁÝ\]\E_c/÷çe)±ë9ÖjÙJ«¬ÿ!ì½–¥þÛõaurоR”œUò•Ÿ¶ÿoÛ™ø¬ÿ`¿µ\E_)JÌæý×Î̧Q¼Ãù¼tE_])HоR”ˆ«ìùÇŸº¿Çw0ŸŽù^®”ˆ«å+7É^û¯å-{·ÁÝ\]\E_)JDUò”¤E_)Y¾J÷Ý)kݾêâéöNûí÷Í÷^û™ô¢¯®•Ÿdï¾ß|ßu﹟SöcרïÌýlqÇõ:¢*úéJN*ùJR"¯³9»eó»©Ôf0ügWJDUò”¤E_)Yûoöý±ÙŸŠÏö û^€š’Ý–Q3º¿÷OK!ÉHHÔdC¾ÿ|g³Ó«üÝÖ?’ÝŠÅ|éý6_vNÆ/9Û£ÚìâÀÊû$®^䲺:BÛ•ÒèÉJ;7ß|ý“ŸTX4½‘·èý Hħ”ü1!%r¿$}ÓÙ 5{}s³YƒÏ Ó«ý! ° ¾PVFÜ¢ÈA¹£?OFŒ´¯ä»åÞ\²Èy %`ħ'!CRÃSØj3u#•ÓÝ[ô³m½­„‚þåôž’WßîJ^êü7¾ZKr·ö²b@vŒ57ô%*t|ý‹É,f-ŽF|ÿ£ FÿÜlŽ£…¾'oU_ÅØ4¼ŒMÛ¾ü˜MgWud3·_êV߸ÈN/oƒóîß+îßçÝ]¿^¾•€O^-$Ò†%?!;?RC2P€ÒùH%dð÷).5w’/¤jI‰+’щE¶ì[?P3åÝ)Su[¶Ên£9{J¯óuŸöÏöß›övÎ)û «¥èÑWÊ͆m³«2ÿü?÷üO]]gs>ËÇçS¬ÜaÜÎ>QW×YøÍÿugVÿ‡lÿˆË«¤â¯¿'vZÓŸn®ÊpŽÝOòu¬ÎoÝ|ìÊuÌ?›ÇJ*úéYöíþÝ»á]¾|9_á®qWÊR‘|¥)WÊR‘|¥)WÊR‘|¥~ßuu/ýß÷ýÕÿVËSfÚ¢QWÊR“оR•›¾ßïŸÙð®ßà¯ôE_]+7·Î¼ëßpýÛáuq}›»ž®Ç|fêsÏ?)ÕO²wßo¾oº÷ÜϪé(«ågû6ÿgí…öý°õoÄj»rK(–„t²OF†«îÇd¶_ËeŽ”UúÈd0 Œÿ7ü’¦øÿ‘Ð…?rÒŒøö®šRXk£$®\Á™?”®WGἬ—q‰/7ùòZ¹cRû%?%$ͺyIJCMìÅn„£fFOAËKÝî”#†‚“ÉC Àe¶ÝÓ÷&q…ï²ìû¡A7—‘±8Ї¶ö•˜‘¼´üP ‹å-Ée·-»âÒ†6O/!†d7ÌÖ¾„Éhá¡»¡%’ÿBJ/ ­¾l„ÿÊH!‚Œû’3puÈiJC (a7Ѷf)$Ä„|޶+•›îYiFÛª]éËÜ Ô¡%“>÷ßò’‡JKåòÓÿé%|58²YYÀl­®bó²³¼pšªÿ™’bKMÈGHjSô‹B³ò³#„0JéÉFtl÷¡Id²g@ÒÐ’ÒQX¾[–5wÁ‰É ãPÅ>+»ÑÚ€†“«“·JJ ž’‘²~d!ÒžYe·î7‘Ð×t°§’˜”„€ìb†:õœ@ÁxiE¸Ïºq)Íýc Û9œáß2U| Ž7È-8'0o Hhi}(ÿrM-!î3­§¾íýÍO, `Ü‚Ñùe¥;þPa/”žŽWû% %¡~ÏzÀ¡0²ae?Ût•W(1=•úqy#„í‹Oãr?ü±µÒ Ød"g B /$´¥‘Ë/ŒÝ7oɉû»¿éë[½Æ…õîaýYÄšª¿åÀP5¿Ð”–¢°kâZ_âñ#ýò†â†t ÈGkÆìÆþ¾{ÎVÇcïѲiH-”‚€ÉEbÉ¥ÉXÛñ Yèß'rú~íÑ|ÐÄ2’Cíƒ6wåþK/†þZFŒFBÿØ%?¿÷¦œ¬D˜}‚lû¶}¾ÜÝ»>qmœE6ÈVÛ/õ)¿áý|]yO‘·ß6Ø’5ÕŽO ëS§oþv²^dz«å)J¢¯”¥"*ùJR"¯¿#nû1êÊÁ=ÿû+ÿÖÿ:øúŠV>Ÿ>ÛünÝÛ°¶ì"QW×JRqWÊR³ñ›þêέÿÙÿ—W×JR"¯³fs×ÜÿÌÙNqÇe:é³ýû/ìÛñYûWIE_+?Èßÿ¶ÙÿêÛc«¤â¯”¬û'}öûæû¯}Ìú®"¯”¥"*ùJR"¯”¥"*ùu’ûÐWå¨#ŒéÛŒŒåäee²Yó®æí³ý¶~ü_mŸVØFºDÔféoßdt!ü¼êGº—òþÛ'þÇë,9çWý !¤Ä“q¹)IjB »’ºpÜKHbSò¿Ò„!|Jëºh¢Éœ¾5Ü3†£”Ž’™=-Ò”öÅ|Ì„ Ù;5A ¤#„’J Û%€ÂJà `W OË’ŠOÿnÛê¾ÒMû†rQ¸ J2S¿Ø7¥º A|²À¹Y™Ò[¾¾k!nqÙj'e»j¿¦œ‚`bC‚€é½âÆ%)ÅþŠèt)¬3–œŽÝíi/ò¹+áÃrI¨( ü’à /e~‘»$›’7}þJ½ˆEVFAE¤3€Ü–vìåo‘±A¨Ý¹,„çўƺ0@g”¬ŒZQØ´’òyd”gøn΄}Ææ×ýû?üÆý”Кªû²ÃŽ‚“ò EŽ5?àÏœ1 NÝ#Cž—d£òònroI7§Üš€ÔRw o‘òvN_Øbä Imy€ÂhìPn(0jR0™ÊÁÈý=‹)!…l”ºFrÒÝ 2à“CC§`2QhAEn‚jKJ>ÎPgÄÂÿ©%Š@Ü”~”÷†GãŘ%|è«þ„…¥Ò”$ 15$·ù( A0™Š,gìÛ)þ3mPB&† Ä"ÀÀg@oéÁ¨°Í¿K6Jsä0 îrWa‰I(å”P À¯F(n%nZJèFNá¥b[td!ا{Ñ`0¢%»Œ É÷ßRRŒÛrV/% ^KgʰËCŠë 8>u5Ê) ( )nPÞ¡¼ î†f&¥,’ú™Æ Úó‰àá¨/t#¡ÀÊw% j_FÅä¥%â÷K+ðÝ»§÷»aˆïLI1”ZJÝ%'ô§##á© O“úwß¡)ïµÅ&ôJ+r,†”äryüžR7‘Æn3 ‘Æ!()òõ®8Wó‘žUÇtŽB&3÷) †b¿Ù·I)öÛ;ö|Ç:®+bÐÉB“–„·?/vÿqÝ_H€i76ÊãwÁ™‰ä­ÂI1<¾J-@YCQ–›æÕ§/‘Öy¯¼omÆwìùÏu²oÎSÔR¿äº¾e¿4$ãò°îµuÓWÑJÆÏûgûoÍû;gý„ÕÕ|¥)WÊR³çßoóãó>Ÿ|¾ˆ«çϾßçÇæ|/>ø/}WJφﻯ2¿Ü;æøN\¢¯®”¤â¯³ì÷Ûï›î½÷3êºVw3n¼e:Ìæã¥}t¯~„:Wö~1m–ÈÃxŒ¿QWÙû2¿~)JëïÔýý]fÛ?ÛgïÅöÙøõm„j¸Š¾R”œUò”¤E_)JDUò³l…m²ÿR—ûþ×ÅÕÒ"¯—Hš¡Ÿ8Ü„ ÈÅþ™.~Ûôö~ûvk›k,¬Z»³rß|—$î•÷ÍÖ{Q§Wý@4š3’nÅ ”žå”œºRVFå}ÑÒ²Ù*÷¨Åß×· @åÕƒFÿÓ˜¿“ù{bY/lž„æ¼aaˆ 0¢÷ Å’M%”Ž®‚Ae€ hÐ?²ÿ$"ß±4_JQÊA+’Ãpa0¼VrY3’˜¤¥Ûlù²þ×Ì«¾Sçs—ŒYN<ûj¾†ì7å å'‹F-?%ÞŸÿ·)?$!9 ¹EcõíNÒa5< ` ²wG‹ Á¨ Å#ä|œß#ýÂF{ɉ¤ÌMNß'røi) ép3Ëá©(7“sö²r^”šbOèp*Á )ãR‚ñ(4=#vGà +tä¡xiÏcûfß)Å0çWPtêýê,¾Mß–•§p0ŒŽÉø•ÀÇÜ4 ¥()9!ˆ/ääöÊ÷0¢˜3¹E$•ÒĺPnQnZ>C\„:KÝ)ê%+'µ`Ü1Ѱa1ÒIJ>q»‡èø Ò€ÉIÈÃ2?}v²K, ÒH]$¤ä222HÅ¿bÛâ¾JSÒ77ü!w åöû>¥qÌ£§WùDB€`ž2P„ò¸bpaEñŸ jYwFNtïù,´«f½v/ÃwYAˆ pÂÉ»ôüRZRW á)Q/ ìŸ*lö(5„'Œü´á› –—t#$²€Ï åí‘Ñ‘ý¨˜Xa/YdÌŽŽ‚ÊÅt#ÿ†·Èd·à%FI(½™2%òq«ëwë_扥“CS¾/$¾ŸXbƒ::Ix­²RŒž‰Y€ÏѾjÃq4’¹]<˜ŠÙ+/6+>!á¨(bPÏ‹Ù#z¬%`‹ü´V O,404j{§ ›ö nÝÝ=#fèÞç– HFBI½<¢òw!æø²gÉÙ*HJ7 AjSÿ®†ûf[® R„‘©«ù &HnÄÂPf/oòCp@ÂòÆm‰L¤„¡9–]ò‹ÛBÿ-ÐRw,§/þÆ1,%‘Ƨr¶ÃP3l­x‹éi‚„ ±«ì[åfnýÖêe0—R羚”¬ØfÛ:³/ÿÃÿÄõÕÄUò³íÛý»w»|ør¿Â=]"*û7}¿ß>;³á]¿Á_êºÏÆoû«:·ü;güF]\¢¯”¥'}™Öÿ¥3fǯºÝjU])WÊR‘|¬eþüì¥6=g:Í[)Utˆ«åfÌoëç±¼ålqØÖ>®‘|¥)WÊÍ™×ûñJVVl·ïéÝ»mû+~Ûñ}» oW(«å)IÅ_)Y³9ëîæl§8ã²uq}޽–½ùÝ”ÆV?˜tä¤6@ÌÙ›6l0æÇfläîݾݕþ}¸¼ùÄ>«¦*ÿfJí€*R3dmØ®ÁŽQiI(–œùã û£,ÝzÀ€§òÊØ´a©È Ïÿ„‹ &âHJº ãR•¶¾dMC¡+ûý¶íËÈK„$”¼Ÿ»±‹í¯^MJ !£—ºIXi}‹`„/¡ tb¤üWá;?‘“y(9dñ+Çã-*ÿ|^äÒ“ˆ|š_ጀ΄d%Im‘Ò”ìÿ é)% gJ_[z93bË(1e$²W(ÐÐ :Ÿ';„§%?âЛþï;‹á£vJNG·-c„äLAl„†,”‚‰yºRœÛû/I#äýɃöÙ0Ô' ¢°OåfBR’Kä¬5µã°ÇPõ÷cñÿ“ÄZUþÀÁ„Î’f¶/#ðì90¡©Ø°·@Ü[”3þWBQ·×l0¾Xa})-‰£ ‡€Ü445 ÆŒJP7dq˜á%3§=äPL Åä”jpF $š[r_-º7ýÀ,Ù `ONßÞ§ Á¨%ôA¥ŒI{—‹J {$™Æ 0o+ ZW×—³\ÿõí¶ên%s«ð†bW@×!bèJ?èA+nœÿ¡%tòY-.ý>¬¤€²‹é+J+`Ҡģt”† +%; ß~ïþè÷£& šY+§ƒ2B“º’YYƒyICù_ôfù‘þ°—ÃP݃’ƒ›”WGrËÈNý?Ýü£w Ñæ»ç_u¯:¿Æ·B J J0h JRR~&”Pؤ¤oéÜ´£†%?†àŒÖ (Xi4H(3æJRÔþV/—€ðÒû¥%§”0¼ŒÓèdåmðÞ„!ƒz0hc¤a4‡Ì”7GIH%r¿>ñ 0!ì™úI…’q)†8FK jQÀ¸fù]tÝ¥öüQ‚ˆuÓWð@ gÄÐÔà“†2-?ï²xÍ‘Ÿ '—þï)Y¶B¶Ù©Kýÿëâêï©ýV}›¸óþ^øîÆ“¹ß/UÒ–²«å)HоR•Ž¿›–¦ç¨÷Qªeª"¯Ÿ;®çügËcÏ;©×WJÇ_ËVÜîËsNç/>QW×JÍÝÏWc¾3u9矔ꫜUò”¬[åfnýÖêe0—¾ºV³oö~Ø_oÛVüF«ˆ«å)HоR•ÔÛµ³fç+ºÙJTE_]gϾßçÇæ|/>ø/}WHоW¿Ýk~Ù‘Ô§_^3­Xì}E%}› ÛgVeÿøïøžººRqWÊVnæ|¾{ÏWçŸcêâ*ùJÍßo÷ÏŽìøWoðWú®"¯—H¼R8Ô§¡L²Ò„œ7 íÿìã7ÝW6”Å_ôĀ貰aH@o Û|»rYAŸâXj A(jYÆd –Œ—Ý7°I0–V(4²±i, Î’BÏþÈá…¡?’3ž{9_m|)(ÉÍÜÓ’”¾=sCºÏ×w€À®ÉE ÜgÅ>Kä%%~0%›îŽA—‹_áæœâí*ÿ­P˜˜Ñ„þMèNÿ%8IIÉáœkPIhg%^÷O†@ª&ò¹a;'˜h3|JÉK–¬ZÊI[$cûåÈ7 Bw-)b‹åŒMÅ ù)ä²ËÎ퓸Ô|‘¶kZ@¡E•² ˜„:I8¤ºQñ,±€7GÈB í—Ôž¥ÞhÕÿ¿ 3®¯÷:&”Y7—À-Ü45ÃK)t”XÐý<¤|VØgßr ׂ‹A <ÂW Oå”Rq]Ü(FA}áŸ'á»à³\$€Ô%?†çJw(¤þ‘»–èA}?#„¡¸À.¿y|drÒ’hÀ×ÈÙÑÕ³þ…¥.ŽŸÓ‘Îì{fº9m”ÙÀhr¿e¼ªþ „ÐÅ%÷f-*á%%ß~Œ5¨K«w~KÿÞ3##ÿ³9˜ãÿýŽÿÿ³óh13”Û»ü£Ý.üK¹µ»ûƒ •_)YoñêS6lzû­Ö¥UÛʯ±—ú×¶?²œÃ±ëçóN«¯Fû,zy'¤ÿùýaÇc²µD¢¯”¥'|¥)WÊR‘}Œ¿ß”¦Ç¬çY«e*ŸvÏ·Û›·gÎ-³ˆ«¬|û>¿Øß³?aOœL¢¯®”¤â¯³á»îë̯÷ù¾—OömþÏÛ íûaê߈Õt”Uò½úÙ}—Û|§ùŸ©jû?×QY¶FÛm¶Í¶VÛ´E_>v=]ÏøÏ–ÇžwS®›ä¯}×ò–½Ûàî®.®‘}Ÿ8ó÷Wøîæñß+ÕÒ“Š¾R”ˆ«ågÎÇ«¹ÿòØóÎêuÕÒ"¯”¥"*û{­[ãû-Œ;œ®~0úºV}’¯·^ëZ÷}úð¹E_?mþß¶;3ñYþÁjºVm‘¶Ûm³m•¶ÆmW×JRqWٸݾuç^û‡îßë§ÎËù¸¥««¾SwÕu™Íû¯™N£y‡óxéE_])IÅ_)JDUò”¤E_)JDUö|ûíþ|~gÂóï‚÷Õt¤E_)JDUò•Ÿ;/æâ–®®ø=MßSº›cÖ¶lÜåw[)J”UõÒ”œUò”¤E_fsvËçwS¨ÌaøÎ>®³fëÿŸÜÒv;ejo»í÷nÜWmÛŽWÜG”UõÖnŠZ²ópå·}WIÅ_)JDUö-ú³6nëuº˜Cw]])WÊϲUöëÝk^ï¸w^WHоR”ˆ«åc¯fçu©±Ê=Öb™K«¤E_)JDUò½(Ëù¾êäîgß)bsvò:öZ÷çvSv=XþaÕrоR”œUöo’½÷_ÊZ÷oƒº¸ººR"¯•›1¿¯žÆó•±ÇcXúºDUò”¤E_)JDUö2ÿZöÇöS˜v=|þiÕt¤E_)Yû1ëìwæ~¶8ãúUq|¥cgݳíöæíÙó‹lâ*â*ùJR"¯”¥"*ùJR"¯±óìùþÿc~Ìý…>q4Ù‡Ÿúÿç÷4ŽÙZ®’оR³fuþüR••›­ûú¹Å_)JDUò”¤E_)YþÍ¿Ùûa}¿l=[ñ®"¯±—ºÕ¾?²ØÃ¹Êçã«¥C÷ß›»7}œïöv5ZQW§víöì¯óíÅçÎ!õ])8«åfÌëýø¥++6[÷ôuìµïÎì¦4ìz±üêå|¥)8«å)HоR”ˆ«ìuìµïÎì¦4ìz±üé¶B¶Ù©Kýÿëâé»íþùñÝŸ íþ ÿUÊ*ùY¶ÏöÙûñ}¶~=[a®“оR”ˆ«å)HоR³f7õóØÞr¶8ìkWWÊVm‘¶Ûm³m•¶ÆmWWÊR‘|¥)WÊV|ûíþ|~gÂóï‚÷Õq|¬ÎoÝ|ìÊuÌ?›ÇSöcרïÌýlqÇõ:ªå|¥)8«å)HŠ¾Ìæý×Î̧Q¼Ãù¼u7qçü½ñÝ's¾^«¤¢¯³öe~üR•×߇)ûúºÏòþËÙj_í°VWWÊÎíÛíÙ_çÛ‹ÏœCêºN*ùYó›òñÌg9{žw5Ž«¤E_c/u«|e±‡s•ÏÆM²6Ûm¶m²¶ØÍªë7·Î¼ëßpýÛárоglûnËÛ¾ÜWlâ[UÒ³üÿûmŸþ­¶7øŠ¾ºR“оR”ˆ«ì|ÿ>}·øÝ»·amØE])WÊV}’¯·^ëZ÷}ú𺸊¾ÍÆíó¯:÷Ü?vøG]])WÊR±×òÕ·;²ÜÓ¹ËÇãOˆ«ë¥)WÊR‘}á¾R[çÊíó'8ï•ðw¨¥%|¬ÝÇŸò÷Çv4Îùz®“оR”ˆ«å)HоR•Ôßµ;æç/2ÙkTE_])HоR”ˆ«å)HоR”ˆ«å+Æå­ÛíÙ~Ìû?Çî³²úª%|¥)8«åc¯æçe©¹ê=Ôj™j«¤E_+?mþß¶;3ñYþÁjºDUò³wËߨÒw;åêºDUò”¬ÿ!ì½–¥þÛõaq|ÝÇŸò÷Çv4Îùz®±óìùþÿc~Ìý…>q5rоR”œUög7l¾wu:ŒÆŒãêëýy›6eºÝn!³*®QWÊR“оR”ˆ«å)HоÌíŸmÙ{wÛŠíœKjºV>}Ÿ?ßìoÙŸ°§Î&QW×JRqWÊR‘|¬uìµïÎì¦4ìz±üèÙ÷lû}¹»v|âÛ8йE_)JÏŸ}¿ÏÌø^}ð^úqˆz¿óý+3›¶_;ºFcÆqõq|¥fsvËçwS¨ÌaøÎ>®"¯”¥"*ùJR"¯³¹Ÿeãó©Ön0îgWJͶ¶Ïß‹í³ñêÛÒŠ¾ºÇ^ÍÎëSc”{¬Å2—WIÅ_)JDUò”¬ùÙ7µuwÁênú"¯®”¤E_)JÅ¿VfÍÝn·Sn눫ë¥)WØëÙ¹Ýjlru˜¦RêéHŠ¾Ìæí—Îî§Q˜Ãñœ}])WÊR³ñ›þêέÿÙÿ—W×Y³:ÿ~)JÊ̓Öýý]"*ùJž^fï™n¦[‰|˦Ìëýø¥++6[÷òоºR“оR”ˆ«å)HоR•ŸnßíÛ¾ÛçÕþâ*ùÝMñëS¾nró-–µUÒ‘}›3ž¾çþfÊsŽ;)×WJDUò•Ÿ ßw^e¸wÍðœº¸Š¾R”ˆ«å)HоR”ˆ«å)HоR”ˆ«ìønûºó+ýþo„åÕÒ‘|¥c¯e¯~we1§cÕæWWÊV}“¾û}ó}×¾æ}WWÊR‘|¥)WÊÍ÷}¾íÛŠí»qÊûˆôηØõ-ß6=Y–êZªå|¥)8«å)HоR”ˆ«ågÃwÝ×™_îó|'.®‘|¥)WÊR‘|¥)WÊV}’¯·^ëZ÷}ú𺸊¾R”ˆ«å)HоR”ˆ«å)HоV~Æ~¼sÏ_ÇÍc©û1ëìwæ~¶8ãúUrоR³wu|ÜRÕ—›‡-»êl3mY—ÿáÿ¿âzâ*øËýkÛÙNaØõóù§UÖm­¶_êRÿÃúøº¸Š¾ÎêmZÙ³s•Ýl¥*Ÿ8ó÷Wøîæñß+ÕÒ"¯”¥'|¥)WÙ»?åïŽìi;òõ])WÊR‘|¥+6g_ïÅ)YY°zß¿ˆ«ë¥)WÙÝM±ë[6nr»­”¥UÒ‘|¬eþüì¥6=g:Í[)Utˆ«å)HоR”ˆ«å)HŠ¾Í²6Ûm¶m²¶ØÍªéHоR”ˆ«å)HоR”ˆ«ìlÿ¶¶üß³¶qOØM]+7wWÍÅ-Yy¸rÛ¾”Uõ× ¤Œ„##c²6ÛeT[É¥ðÀÄ—7£~΄¥?m±ÿó´ñW×ËÈÿ|• jŸ˜WÛïÀy‚E^¤šÊèØ™÷J—÷-óð0øj28× JNnÇÙÀn‚ÓÑÒQ- Œ•!»çNNO åŒ+£rNèÿТb ˜´èù.ŽòÏÜfPÎSàœPͱíóÜLë0H¸šªù€3 J?ÅÿÙú0acw^óèN|èÝ•qHDÜC+'6톡ߔ–ß”‘ß÷ÛŠ½Ù ,K OÉÙ¡<±¨%Œåt„W,d¾- q©1®JbLèCî„þèéØ¿Ðà%éJ>‘ž„u˜û‘€Y7«üE-x½ûgùØn^|5ò™–íŸìïd½**ùJRqWÊR‘|¥+3­ö=KwÍVeº–¨Š¾ºR³mŸí³÷âûlüz¶Â4E_])HоR•Ÿ°óöVüþÆùÛ/ÄUóüÿûmŸþ­¶7úºR"¯”¥"*ùY¶ÏöÙûñ}¶~=[a®‘|¬ÝÌù|ö3ž¯Ï?ÇÕÒ"¯”¥cgݳíöæíÙó‹lâ"*úéJÇ^ÍÎëSc”{¬Å2—W×JÍÜÏ—Ïc9êüóñ¬}6¶Î¬Ëÿðÿßñ=rоºÍ˜ß×ÏcyÊØã±¬}]'|¥fù+ßuü¥¯vø;«‹§ã7ýÕ[þ³þ#.QW×_ÿß)GŸ÷ÿl­º—ß¾fDŒÍÒÊù¿e~™ÍîÂÝ®°Ð@á¬~Ü´~“‹G%£º{m“·n²Ž£)Õôóp.–å¶÷é[g@ÍŸb^nƺýÝØ›“öî‘©ü¢ËJ ¹,1,Yx¬w)hÝ=öÏB&•°(”„`Ü7R!t'r°ÔæßäŒ@ïûP²ö !#:úr0nJ_8Ä÷ÿýùIOBYËS¥•îÝÜQÂÇÕWûŽRĉ¥ÃSÀrÜ¢ú9e`Ð.†è%'ýöLJû{ZKü± d ônédnQ ú1i&ÈH|Róî’—Óú6öà† ±H Ø ¤®PnA[|[  B@fd£þœ­²’Õz.d7¶%þ’PBXc‘Ù)èÿ°Ü”†æÿoÙµàì¾;µ™øò%­_áùEC#>Å‹I{ƒy|¿’ÉB-éBzS¸×-==²jI¥rÃÊ@ÊwÙ%äþ„ O@a3RWåîØh߯^‰ `ÒÐ6HJ­‹(°ÆF ÝËÅb_ NÙ)éáŸÛÿï*‹@Ä€ÂÊáŸ% åd—º_”P3ô~_%‹B1µ¸žÌzœžµ W•^‰ ,˜BBK&¤5 ÏŠïÓƒ9IÝ%ŒFOøhgÈß#þð€P7Ððj:Á¬‚ú¾”#³u³íŸ>Ç_I¹yÊ, ô ˜’û,¢Cñ„Þ”ìWrRÑÜ®ÉïöÕ!¸´“Iœ7„~JRèÈ(a-9$Њü –ŽQH/œc¾×[e³b …,Êjÿ‘îæ|¾{ÏWçŸcêïQ€vL,71a‡ŒGûq£p ÉfJ[lÏùIÍÙW—½¦³«å)KIUö|ì¿›ŠZº»àõ7}WJDUönãÏù{ã»Nç|½WJDUö|7}Ýy•þáß7ÂrêéHоÇ_ËVÜîËsNç/>®”ˆ«å)YöNûí÷Í÷^û™ôE_])Y»íþùñÝŸ íþ ÿDUõÖ-ò³7~ëu2˜K÷U]fÙm¶Û6Ù[lfÒŠ¾ºR“оR±×³sºÔØåë1L¥ÕÄUò”¤E_fÌ<ÿ×ÿ?¹¤ìvÊÕt¤E_fÙm¶Û6Ù[lfÕuÔßµ;æç/2ÙkU\¢¯”¬Ùý|ö7œ­Ž;ÇÓ;gûö_Ù·â³öþ"¯×ß#цì¶~Û·NGÈÎVÛ ûtºKÿ¡H•’žŽ²”RVmß'§ä—ѳãóTRZJVÿ„§°Áˆvnø½Ù=++ä¼÷¨9X7•€, !“TVé˜%%ý÷pÄq‡'’zúî$ ìj«ÁH( “2>û££drÊà ¤Çt#•œ®ÈY) î¿÷4ÜQ,¬éØ1¸²±YñºK÷-ûo¹Ê½)E”Zv OÛ'¹ ÈE“C@l’¾FÈ,´ó’ýô'³fÞÐ*M(”LH Ñÿ ( ±y=(ÿŒØ½É‰I} ”ö BàfZRÙ»k'WWÖM@hÂÉ|²^AeºKC#·)®‚bqE–ä¬ÉIë{¼’bH&–Š!”’Q7nãzFþ”„£q¼7b[+ªæ'dx598¢b tؾR2rP„ `féÛ%9?ìŽÍÿòJ(\´C–”–Y1?;F@iI)…a™c@³£³äýa»·0rŽ5ß÷ç°ùÕþ‘!™$À”L`’RKB¶~ܬ„u¿KddCJû§£?Föòh À¡HRVLmÉhGHi7äœxjú i'à„ŸlB’ƒPÁ„Þ5),0˜Œ™=8 Œm¾|Lã>Ép†ÈMÖ¨Ie#1YüW!EòËN¾Ÿ²pNÙÊó{Ë5øsñ(Kºêÿ˜âø q7£’ÆbRB ½;d—· C'£à„²ÓÛ'íÆÞ….}ÃvÜ7b‘Æ  I-’”¥šò~J{#¤­ÔÉ}X„¿Ä  ƒJ^%¥ :Oéè%à„nŸ²¸Ìjò=æ¸ e‚Xn (”€1“ùI<ä!ÐQm¿Ü•øa,b7šíq†u­°àõ“é«ôQdÄä±iå2 HBC è G)(ÙbZqiOC£Óûï||0š‚nýÛ±œÍ÷ß¾èù;îwZï«€Ä £§ri[bÊä°ÞW&|å O( rÃ]%쎅çkÊçlV9!œ½ƒ / –Vû'ö/bú~åeüg½QãÈæ…E_á)J^Ý_)JDUönæ|¾{ÏWçŸcêéHоR”ˆ«å)HоR³ì•}º÷Z×»î×…ÕÄUò”¤E_)JDUò”¤E_)JDUò”¬ý™_¿¥u÷áÊ~þ"¯®³íÛý»w»|ør¿Â=]"*ùJR"¯”¥"*þ±î„£$¬œ3 k0Ñ Xnû©)Ì¥%Þ¼¾€t´TrŠû“yjI(aYɽ} ÝØjz[;{À§§`¿Yÿ ÎËÈI­„,Uö2Ê É€SŠå§~”dr¹iÁˆÝ‹GAvFJC¡kËÍÏuŽX‘ÆWWñ’WäÂÓÊ!%ƒC?rù4¤  _IcILLÿ’SüκD4WC§ B GÉE0bPi(3~…%JC13¡/›à›¶RI‰,”Žö 冩!œ¼Ëḿ†•ÐWHjr“‹%o·]Å,8%†pÀ1ÀÀné%ô…—tì3à/·%~èß¶Û^{0£Î<Ó‰ÊuWWôyXa¤À߈\´àÇ&t ä€R5Å$´oÀr5 ÿ—daµ¡¤Ô“Sܘ0ŽƒK%„á‰ACJA5±[ì0!ÊÇ{? %º~J€“ ¤2PÎZJAx¢‹,˜Rº|åq›0Á‹½à KA4 ÂV+-$Ì÷b‰nVI|7lÝËJÙšäFmòØVâ¬uU;ñ`Wpi7æBF¡)Üš1(ᘽŠFfØ ¤·ÿŒR5Ú å%84˜ZCS’Öé/p²zFwÙ?ç””_ø'˜6È0û–”£ü4·N dÈIPGaˆvÃJîÄÕÞâÀ _-ƒq0­’ÒËÄÌŧ f~ÄüPܤågò^Ã…f0QWò Ÿ(4b:J à6é)ÀÆÅr’Xj2“’“Æ¡(È-3?×n 0YiŽ’¾ПÊOtQ($hÞŸˆ¿ÿ¥ïK‹I@6&Q÷HΤ† ”‚ZV„† ߌ,¼Ý«½Â¸bq\40®ÿn_á¨ý5Ô `h8Þ”™²Ý¾º›÷adu©gŽU5 0²],XKpÏ€©H~°2‚øbR€’[3lW)ú>kšB Ìœ„`ΟðÌŸÿéF,›“Êù9ËÜ®0gFßýŸkÚ'‘ :t 0˜Z~,4˜Kå¿Ù Ò5† '6(1¿ëmyÐbj:ðÎŒŒÝ|Å>Ø´í³JI_†Ž÷{¡;x~<;áË*¿æÔ¯B-Ÿ·OÙŸ¶ÎÏù†þ¥=EîÙUò±—ºÕ¾?²ØÃ¹Êçã«¤â¯•Ž¿–­¹Ý–æÎ^?}]"*û3¶¿eý›~+?aêë3¶}·eíßn+¶q-§@Üîµöî¶ë[m³Vß÷¦*ú)JU|¥)WØëù¹Ùjnzu¦ZªéHоV-ò³7~ëu2˜K÷U?Ù·û?l/·í‡«~#UÊ*ùJRqWÙ¾ï·Ý»q]·n9_q®”ˆ«å)HŠ¾Îæm×ì§YœÃ±¼u]+­{cû)Ì;¾4éE_>v=]ÏøÏ–ÇžwS®®”œUög7î¾ve:æÍãªéHŠ¿)‰D¬R)hv)N„7@Çl?(ëÙ€‡r†lZJnè(®_p„`0Û ¡ˆwBv(½ú¿kç·¡á‰ä¤g+†9Em¸ÌÅ£'–3l4¦oÂG.äÜ÷#‘ÇÕWý'boA43@Ñœ®ìWù.‡Ü¤Ñ· JŠ Å’²Ê|úúA7â±H-¤’4`Õ0CÛ†£¾J’’ØjJÇ·é¾nB@a1ú8Ð(’þ (¤>èJFt HÌž7äô!fÁ(®Y0”„ÊNN9á´–È(¤8ÂÜ´ŒÅb¾t–÷ÍöOqd^Ú¯íÕ’0˜²ÆüJ årÐS Nü°ÎRyä™°B{ö©!ƒ140„”oˆim†oÊéF ü1=,Ý%†ì¿ùú½æz BSÒ’M)(BQ²1etbË/üJ’Ž„Hb1éFvô`Òå Ÿô$´¥%d|BACŒ JþBRvéJ21HÏhÿ­úÎ,R«ý¡H ,„”$¬ŽRII,²RPðJ‚–”œZ9î]Z@§H`Ô€¡Æ¡9†áˆ A)#[âVq¤ß›~Vu^i%2xiD²gII &–Æ£ýùA$¼C@ÎŽžœ€<Á5… û¤¬LéA}ùn–ÿ(˜MØ3tô~SíÊûì‹'[Nû`NØ\êþ„ÐÄÙ$¢i$0¤#aŸl3tvB”YeòÿpÝñˆÿÞl–Kû”CÒrP„nL%>O,™¸ :F @“ŠJ6Ý}Ól Ž (¢Èe$41$>’bŠÁ‰Û'!©éÝt²Ý§ÏýH¨Þ’±X3çOA†Á£P”‚FG,k³Œ7jÇ·µáäæ4ÙUü¢ ©á¯÷Ia»âÐLJ2€Äb¿ø–^nHJ€ž”òEäÀ`Y]Ò58oY\0¶ü Õ±Ûî”ÑùÎÝïa€t„÷(„B+dÀp‘Ÿ–Ê,š”þžÌ¹Y3Я|©¡Fm¶ý?þ{»¬rÿÿ­ïUð°`#E^›ä¯}×ò–½Ûàî®.®”½k:¾R”ˆ«å)HоW€á Ý-•ÿls§¯ñÿ‰õ”Uò”¤â¯•Ÿä/ý—²Ô¿Û`þ¬.Ÿ¶ÿoÛ™ø¬ÿ`¿µ\¢¯•ÔÛµ³fç+ºÙJU{¿;©MÎYΣË]\E_)JN*ùYó²þn)jêïƒÔÝõ]"*ùY³í»/nûq]³‰mWHоR”ˆ«å+?È_û/e©¶ÁýX]\E_)Y¾J÷Ý)kݾêâêâ*ùJÍòW¾ëùK^íðwWWWÙ³ýû/ìÛñYûWJDUþ `0àW|Kû»|ùJ›£í÷NOß'a­šõä4'„ãÀï’‚ÐKø$¾Y5,_ÅbZ xj¯|³ì•}º÷Z×»î×…ÞÌä!¼¦ éFÅäâ†äòYe:6A43¿Jz_fy…%œy]_ëIŒ‘È[‚XØ ¡0²»$ `Ò`è)'†«¥)A·!$.Y 4–„•‹B6@ÄŒ”‘ƒ>ÿpÔ–œ^FFOà]Mk«”PZzQ’òÉ-¼¾KÅùEä%‹+mÊêXÞß\"ŠäÅdºQÐXa0´Q/7ØbƒRWÿ/)~w¹:XÐþ9ƒ÷jªÿBya d¤ƒv HÆ% n OII BC9y(YE§%Øþná¼µ i4™¹1=A{n’Ë,é%“2·+XıÉßÞL²Y0šÄÿŸmö! ,7¥(-?dlŸ¿FÈJRPÃWN‚i\¬øahdà‘½ î²û)ݤ¯,¼©fS¶ýñ¹±Œ<×:*þ‘¢ JS‰Hœ !#ä%ܬŽ@ßÀ¾NJs>û=“v!‚ÈI/òÃpnADÎ^HP”£`'’†ÖÙ¿öaA¸›Ëèèý$„l„’ýËOIy= qC7¤$mçŠ!b’5Â{ ¶Gaªe¶éJK?¥úÓò®Ÿ÷eŽnýÇIUö` ´„#|’ÓûÜ4“÷uö_pŒ3*äí‘¶Ûm³m•¶ÆmWKÓ{:¾ÏÙ•ûñJW_~§ïêéJ⯔¬û'}öûæû¯}Ìú®"¯”¥gìgëÇ1¼õüqüÖ:"¯®”¤E_)JDUò”¤E_+?mþß¶;3ñYþÁjnãÏù{ã»Nç|½W(«å)IÅ_gÎÇ«¹ÿòØóÎêuѳþÙþÛó~ÎÙÅ?a4ÎoÝ|ìÊuÌ?›ÇUÊ*ùJRqWÊR‘|¥)WÙøÍÿugVÿ‡lÿˆË£gý³ý·æý³Š~Âjé(«å+7ÉÛï¾ù÷Ëßsw¦svËçwS¨ÌaøÎ>"¯~3|žÛ’7ìþVâû(ÞÕ¬ØfÛ:³/ÿÃÿÄõÄUõÒ”œUö}»·nøWoŸWøGµ¤˜[(¤¹îÜãß,€¬:ÁJ_Å_½›#¡,œ—†l…à–BÔžÿ¿ýÿ]œbÙ»¿e?a‹cÔ=Îê)}Ÿ±Ÿ¯Æó×ñÇóXêºVnŠZ²ópå·}8«ë¬[åænù–êe¸—̺ºN*ùJR"¯³ì•}º÷Z×»î×…Ów3åóØÎz¿<ükWIE_)JN*ùJV~Ûý¿lvgâ³ý‚þÑ}t¥fï·ûçÇv|+·ø+ýW×JR"¯•›ä¯}×ò–½Ûàî®.®‘|¥+?mþß¶;3ñYþÁhоºR‘}›Ûç^uï¸~íðŽººR"¯•Ÿ°óöVüþÆùÛ/ÕÒ"¯”¥"*ùJR"¯½?£>δcMû:·ê<æö]EfÙm¶Û6Ù[lfÕrоR³9»eó»©Ôf0ügW8«å)HоR³l…m²ÿR—ûþ×ÅÓ»vÛöVý·âûvÞQW×JRqWÊR‘|¥gÙ*ûuwÜ;¯ §ì<ý•¿?±„þvËòоºR×Àº>“¿òwÛçd«îêvS${wˆ«òR”œUò”¤E_+ІéïøÞíûì­›Êq?ÔRQWÊR“оR³l…m²ÿR—ûþ×ÅÕÄUò”¤E_)JÏØyû+~c üí—â*úë;·o·eŸn/>qªë7}¿ß>;³á]¿Á_éE_])IÅ_cçùóí¿ÆíÝ» nÂ*éHоR”ˆ«åcgݳíöæíÙó‹lâ*éWÙ³ýû/ìÛñYûWJDUò”¬Ùœõ÷?ó6SœqÙN¸Š¾ºR³mŸí³÷âûlüz¶Â4E_])HоV¿ö^ËRÿmƒú°ºm‘¶Ûm³m•¶ÆmW(«ìî¦Øõ­›79]ÖÊRªéYöNûí÷Í÷^û™ôE_])IÅ_)JDUò”¤E_)YðÝ÷uæWû‡|ß Ë«ˆ«åc¯e¯~we1§cÕæOWsþ3å±çÔë«”Uò½™/¶~Ù<îÙþ3»~wcÿ¨¤E_gs>ËÇçS¬ÜaÜÎ>®”œUò³fs×ÜÿÌÙNqÇe:êë;·o·eŸn/>q¥}t¥'}›Ûç^uï¸~íðŽººVlοߊR²³`õ¿(«ë¥)8«å)HоV-úó6lËuºÜCfU]gÎÇ«¹ÿòØóÎêuÊ*ù³?õÿÏîi;²µ])8«å+ÉHK†°Á­ÙÏg[TJ*ùJÏ·oöíß íóáÊÿõsоV6Û?Û~oÙÛ8§ì&®³»vûvWùöâóçúQW×JRqWÊR‘|¬Ù¶ßþØþÏÅöÛmªéWÊR‘|¥+òþÿþ?˜ÿí¶l§ggûgþQWÑ_†¿vc>|oWË;2Ý}Õ¤uìÜîµ69GºÌS)uq}Ÿ±Ÿ¯Æó×ñÇóXêºRqWÙû2¿~)JëïÔýý]gÎ<ýÕþ;¹„üwÊõrоR”œUö:öZ÷çvSv=XþaÕuŽ¿›–¦ç¨÷Qªeª®QWÊR“оR•›ä¯}×ò–½Ûàî®."¯®”¤E_)JDUò”¬eþµíì§0ìzùüÓ¢*úéJDUò•›3ž¾çþfÊsŽ;)×WWÊR‘|¥)WÊR‘|¥)WÊR‘|¥)WÙÝMñëS¾nró-–µUÒ‘|¥)WÊR³üÿûmŸþ­¶7øŠ¾ºR‘|¥)WÊV~ÌzûùŸ­Ž8þ§U\E_)JÏÙ_c¿3õ±ÇÔꈫë¥)WÊR¿!’ž¦íÕ›þwÿºÕ¶ÊS(«è¥gù ÿeìµ/öØ?« «œ@Èz¿óý)HоR”ˆ«ìÿfßìý°¾ß¶­øWJDUò”¤E_)XëÙkßÙLiØõcù‡UÄUò³l…m²ÿR—ûþ×ÅÕÒ"¯”¥"*ùJR"¯”¥"*û7;-MÏQî£TËUz‹Ý GÛœïßt'wew[}Õd¬eîµoì¶0îr¹øÃ銾ºR•E_)JDUö:öZ÷çvSv=XþaÕt¬Ùœõ÷?ó6SœqÙN¹E_]fͶÿöÇö~/¶Ø+mWIÅ_+7qçü½ñÝ's¾^§í¿ÛöÇf~+?Ø/íW(«å)IÅ_)Y»º¾n)jËÍÖÝõ\E_)JDUö:öZ÷çvSv=XþaÔÛgûlýø¾Û?­°OÙ•ûñJW_~§ïêå|¥)8«å)Y»íþùñÝŸ íþ ÿDUóüÿûmŸþ­¶7úºÏ—óqKWW|¦ïªå|¥)8«å)HоR”ˆ«å)YÝM±ë[6nr»­”¥DUõÒ”ˆ«ìûvÿnÝð®ß>¯ðWJÍ™Ï_sÿ3e9Ç”ë”UõÒ±o•™»÷[©”Â_ºªç}›1¿¯žÆó•±ÇcXúºR"¯•Ÿ>ûŸ™ð¼ûà½õ]"*ùJR"¯±×³sºÔØåë1L¥ÕÒ‘|¥-ÈIiûô ߼÷çJ>øwSê¦*ü4¥*оR”ˆ«å)XëùjÛÙniÜåãñ§ÄUõÒ”ˆ«å+6c_=ç+cŽÆ±ôû'}öûæû¯}ÌúQW×JRqWØëÙ¹Ýjlru˜¦RêéHоR”ˆ«ìeîüî¥79g:Œ[-ut¤E_)JDUò±o×™³f[­Öâ2ªë>íŸo·7nÏœ[g(«æÃ6ÙÕ™þûþ'®®”œUò•ÌÛ¯ÙN³9‡cx긊¾V~ÃÏÙ[óûOçl¿WHŠ¾ÏØÏ׎cyëøãù¬u])WÙÝ»}»+üûqyóˆ}WJDUò”¤E_)JDUö-ò³7~ëu2˜K÷U])WÊR³:ßcÔ·|Øõf[©jˆ«ë¥)WÙ¶B¶Ù©KýÿëâêéHоR”ˆ«å)HоV~3ÝYÕ¿áÛ?â2êéWÙû?eoÏìa?²ý]+3­þ=JfÍ_uºÔ©E_])IÅ_)JDUò”¤E_)JÎæm×ì§YœÃ±¼tE_;·m¿eoÛ~/·a-êë{­[ãû-Œ;œ®~0ú¹E_gu6Ç­lÙ¹Êî¶R•WJÇ^ÍÎëSc”{¬Å2—WÆÏûgûoÍû;gý„Ó9¿uó³)Ôo0þoWkå£%¿Çgï”ý‘¾w ï¦ÿ}(«òRî¤7âƒRžцô!¿œž‚w@Û©Ÿ{y4 †!(+oÀnÊO+/ü†ýòP…9h0gݽŽÄÕþkÛ'~µo€÷d…uqÞ™;²ÖœûuvS„vê|ï”뾓P?ÍÝ%%úwÎWÉÀ6èA]$Àž²N{Ïw%r¾Ak-I5ºC{¶%r–ŸI\c;lƒ¬ìp ÌyÕþB¼¦†vlÃF»1£B\{¬}`݆ºy'`œÛ¶Ù³¿ãøOų̀uüµmÎì·4îrñøÓîÊjúéJW|¥)WÊR‘|¥zݶÍÿw=OÿOù—ùî“ç~êÿÜÂ~;åyE^ãwfîÿå/>w•™¾Yª>¢”ˆ«å+>Éß}¾ù¾ëßs>«œUò”¤E_c¯fçu©±Ê=Öb™K«¥gÎËù¸¥««¾SwÒŠ¾ºVo’½÷_ÊZ÷oƒº¸º¹Å_)JDUò”¬ý·û~ØìÏÅgûý¢*úéJDUò”¤E_)k侌Ù?-ävç+t­”úÉ(«ìî¦øõ©ß79y–ËZªéIÅ_)Y¾ï·Ý»q]·n9_qŸìÛýŸ¶ÛöÃÕ¿¥~âÝd!%¹yÀ»6é~ŸÿvÀK;à†kÔ'rÀb’Æ ÁŒSÿ’€ËdÿÜ$gÃq[vdŸ½É&†ý¿Am÷ÁNrwrù-(IEr·qªGg¾…À¨Àd²ÐBNø¿¹| Û§£d)vìžÈO +¡{ŒÞòvͱÄJ¿˜Y4½Ã~鉽 +„nQlÿ +§ö)Ã8AyöÃ_ µäa©èÁœ”Y$´¥ %âˆI a£•ÊBМ²»õØE¤šM@j@ gO Aa…íÊOà`3$j{¹@)l{duµÛ¹5$ÒQ,¤§äpt÷ /¥r“’’WAA‰OmŠéÿ.óÛmÛ‡·Îk¨]U~É¡»ðÂÿ (¤ ¤Oῆ%e=yè~Lù#1¿þ¶n”’÷…âðie HÒÛ§î—J:ɘ”’„dåýwCRQa„ Ò‹JCS“É_%;“J/†?G%üYy*&/nÈËÞæ€Vу3rþ& O.Üÿ£phI-ÒŠFÃR5¨ÊëßìvlsÕù±II “SÃI¡¸›³– +  ™’ŒèÈßîÝuâH@†$¢·I,´£|˜4°„/”¬ÿ}œ`À—í}È Ã:yHA]ÒÁ¨É‹ðaY!©ü¢“ðÔô°ÒBpÍîºPXJ+d†(æ+ ½þÜo%—Ò5ò ^B>Nùö±ø(áçWþYÄ×IYE ~„%E§gvCï˜!&öÿtoro¼€˜ðÔ 0¬„–r1I)nPÄfŒŽ5›%?Œ2øŠÿå%¿™wÈøoî3î;ž§×ÐôÛ‰>ƯÉJR羚”¥"*ùJV>Ÿ>ÛünÝÛ°¶ì""¯®³ý›³öÂû~Øz·â5]"*û7s>_=Œç«óÏÆ±õu‹|¬ÍߺÝL¦ýÕW(«åfÌoëç±¼ålqØÖ>®“оR”ˆ«å+ýy›6eºÝn!³*®"¯”¥"*ùJR"¯”¬ß'o¾ûçß/}ÍÞ®"¯”¥"*ùJR"¯³fÛûcû?Ûl¶«¥"*û;©¶=kfÍÎWu²”«rF’ÔVìRY=¶ð@×éÇ?ßu-MdK+üíó)þü!óoñëæguWýƒ2S‘ûoÆ!nΞ1Ãü_çÙe›:¿Ôp(„9hÈB2zR7ò†’¶ù%¤cö @Ñ©ûÅ·èõ€U†ÿÑËvFÈ% %è-_%t Éø²É_ô3y VƤ“Ò´§¯æ7œ9×µÙ Jqa»—¾Á¸ g-(ÉÊ^HÝ¿ù!(Ã0Ý‚ÜNpƒÀ•Uþ…0IE–‚ƒP_)=²byeì5Ü´rÓݶ$nŒeëK+†rÐ^Ù/¡Y°ÜYE¡(@iIûäòˆ@cí™;£2¯•'âÒRVnÊ/oÂJ-о1öÍÆrû~ûeÞ̰Ü®J )9!¨OJ ,ay<”XÞQc:~Á<¬S¸ÌŸqdœ#šrñÆ…ÕWýš[†è BC>A[†b‰`íþ/tr·È%~œû~«½_-YÊ å†¡œ¿Ÿ~5ËãvK§“’”ò3d^($Ì„¡)JC2 |¬„r4¢’LðÝöCþœß~Ž”Þ¸l58¼’^AhB +ìR>a€d†á»—ðÁÏx¸Ì;­g¬ykJ¿Õ’’Yl„gJò÷ËÏ‘—ß²¶~—Q÷ŸãJ-!›röÁ‰ÈFéùXb:\¶ýgÁ»„ÿ¾ñ&Àt‹Ad¤t’€Îûý±kã /ä¶C¥(o‡ï`FC%$¢ßñY ,–WOÅb»£¯d)qmœE])WÊR‘|¥)WÙ³ýû/ìÛñYûWJDUò”¤E_gÎËù¸¥««¾SwÕt¤E_)JDUöw3n¼e:Ìæãªëÿû¿9[lûþÏÙÔ¼ffÿö¨”Uò”¤â¯”¥"*ùk _ÛŸ°Äý¶Ù=Ӿ߯/oÌÙK²ZÃyhC”ŒZ_6é—öÿöçeú¨TUFÑ÷ß2œð…æKíß/ìµv÷Ö©7á¨è)&%4!27(²Ë&¥ódp058$½Û {À€Ä0¾É)()·%—ÓÐÛn1*Á$¯ÿ”â¾}òß^ë10¼­“ѱA¹‰ÿ’Êb^IyÅñ¹;¤°Ž„vo‘xèZÖ,å.Ò¯ô\$?Ëá¥%$Ò€t’‚úyY83#'b÷Ý8¼ÉùæJ5ÙÄÄ“@t5) ß#!Oûbðgt#—“°Ò·ìÑ7ö¾\„‚1eä èoÐt¡—¾I_”dqˆ@fã o¸Ü«®¢\1Åÿùd¡¨éFB Méâ·ÄŒ„6÷šç²—ø 9ʼn®¯ôˆî€q¨ß”0±¨Yh-9$¢¹jÈ)†~„úRÑÈNOÉ+æN(ayLFéHae—ÐJ²W ãFí‘qI€…òYEî07ò’_ܼ3íÆà3ÃP„ÿ‚˜ ”ày9¬h%”K@ %¤­’JΜدËù{înôý‡Ÿ²·çö0ŸÎÙ~®¹Uò•Ÿ³+÷â”®¾ü9OßÓa›lêÌ¿ÿýÿ×W×JRqWÊôŸöý1ël­¾Û³ç9}ÞLë}RÝócÕ™n¥ª®QWÊR“оR³º›cÖ¶lÜåw[)J«ˆ«å)Yû1ëìwæ~¶8ãúQ}uÛ·Û²¿Ï·Ÿ8‡ÕuŸäoÿÛlÿõm±¿Ê*úéJN*ùJR"¯”¥"*ùJVlÃÏýóûšNÇl­W×JR"¯”¥"*þ±5%'rŠ&åüRTì‡Ùcwý8þÛn)w³&€Ã–ËÁ„¾^È bÒB%üå$kN)›¡);ÿ{æÖ²V ?òÙKfù’ìÙÝ[fk%™lÁõUþéc†þ”5!©(a]<´$¯™;†%‚ ø®Rv&ìíê6JRÔt —ÐY]K&îWFéß1%”z>Ý=ëÀb2RXFù‘‘ËÒžŸ‹)öø¾†+>Ü5)䟽¸™ÉI,²i](J ÈøidµW)(J;% c2 -Ý$¥¥Úó_¶ËQçî±Úº¾ÌZ +††ƒ£tbÑ’RKåïÝ‚Slœ‚ŸP¢n+KÜ¢jwÝ) éÎB\—É_éé-úBv«H¡„"ɘj{}¿(¯‹ÃF%#!©~‘¥þ÷Fmÿä¿XŠ!PßÓÐЀѨÝ%ÉX†­·%~ãF#î†B®†§~ø<ïóìp¢*§Wó@MɤџŒÄ”Ÿ²ºKHÑ£37tn’¿B]?ü…=A 0 Ñ¹3„¤'YI@hÐÍ· A/>ëÈN?².h úY%røÒ€n`…nPÌ’ÀÏFHщAa›''ýÖõ\7¡;rb0al¾F@jFaˆûp„%½ò–Å£¥Õt>A9jY‹Tªþ‘e”XjQ€v‘‰) Áˆû¸b:])¿£%=¡eï¿úùÑ0­ƒRö)‘–þ+¶ÿ²:Û~¦âõY0™‰ŽÎ¾=?ÙIJWÜ'å¥/ýͽÿ[‹â ÔUò”¥ÝM_)YoñêS6lzû­Ö¥UÄUò”¤E_)JDUò±—ú×¶?²œÃ±ëçóN«¤E_fÌoëç±¼ålqØÖ>®”ˆ«å)HоR”ˆ«å+7ÉÛï¾ù÷Ëßsw«ˆ«å)HоVm‘¶Ûm³m•¶ÆmWY³úùìo9[v5”UõÒ•›6ÛÿÛÙø¾Û`­´â¯®”¬lÿ¶¶üß³¶qOØLE_])HоR×Ê%£ ¶Ný{>ß;í×ÝJI‰Z›µFÃ6ÙÕ™þûþ'®˜«ë¯-†%Ý›¸Á®Ì`À—ËQYû?eoÏìa?²ü⯮éXPÄìø–Ÿþ5Û3ü‘»öWéßý¶î×6’x«û¼÷Á ºwNãF’þHwÿ ßïÿwõ€ˆÅ¤5 “ÿK÷K§£çK¥{o†d è^Ý“õç©d7€'Wôd  Á…!™¿77ïûÿû‰°í‘¶Ûm³m•¶ÆmWKGsåWÊR•Å_zTý¶ï¶w9m·Où•±îw“çßoóãó>Ÿ|¾§víöì¯óíÅçÎ!õ3¶}·eíßn+¶q-©Š¾ºR•E_)JDUò•Ÿ9¿/Æs—¹çsX긊¾R”ˆ«å)HоR•é@Ö_Í÷Wgc9¬ëS;7SéE^Ž¿›–¦ç¨÷Qªeª®³çßoóãó>Ÿ|¾«ˆ«å+6ÈÛm¶Ù¶ÊÛc6«œUöwS|zÔ¼Ëe­Ut¯Jz2‘Òz°Áßÿ²ÎÇJ*ú)JN*ùJR"¯”¥"*û6¶Î¬Ëÿðÿßñ=tý™_¿¥u÷áÊ~þ®’оÆÏ»gÛíÍÛ³çÙÄUÒ“Š¾R³wÛýóã»>Ûüþ«ˆ«å+3¶}·eíßn+¶q-¨ùþ|ûoñ»wnÂÛ°‰E_]+{-{ó»);¬0ê¹Å_)JÏWsþ3å±çÔ눫ë¬Ünß:ó¯}Ã÷o„uÕÒ"¯”¥gÛ·ûvï…vùðå„xоºÍ÷}¾íÛŠí»qÊûˆôÙý|ö7œ­Ž;ÇÕÊ*ùJRqWÊÏömþÏÛ íûaê߈Õtˆ«å)HоVwnÛ~Êß¶ü_nÂ[ÕÒ"¯”¥"*û6ÈVÛ/õ)¿áý|]>v=]ÏøÏ–ÇžwS®®’Š¾Ï²UöëÝk^ï¸w^WJÆÏ»gÛíÍÛ³çÙÄDUõÒ”œUò”¤E_)JDUò”¤E_)JDUò”¤E_fù;}÷ß>ù{înôîݾݕþ}¸¼ùÄ>«¬Ù¿¥efÁë~þQW×JVnîz»ñ›©Ï<ü§T⯮”¤E_)YÝ»mû+~Ûñ}» oWWÊR³ö3õã˜Þzþ8þkW×JR"¯”¥"*ùJV:þnvZ›ž£ÝF©–¨Š¾ºR‘|¥+?ÏŸmþ7níØ[vW×JR"¯½|¤ZV¡ýJÛ=K\™Öû¥»æÇ«2ÝKU]%|¥)8«å)HŠ¾Ïœyû«üws øï•êéHоV}’¯·^ëZ÷}úðººDUò³ç7åã˜Îr÷<îkWHоR”ˆ«å)HоR¿ŒOÛüÉnÝ–ØNWª%|¥+7}¿ß>;³á]¿Á_éÅ_ýy›6eºÝn!³*®”ˆ«ågí¿ÛöÇf~+?Ø/íWHоÏòþËÙj_í°VM²6Ûm¶m²¶ØÍªé(«å)IÅ_+ùY›¿uº™L%ûª®‘|¥)WØ·ËÌÝó-ÔËq/™ut¬ÿ!ì½–¥þÛõarоnû¾|wg»‚¿Õt¤â¯”¥gÎoËÇ1œåîyÜÖ:"¯®•Ÿ;®çügËcÏ;©×WWÊžVfïÝn¦S ~ꫤE_+ùy›¾eº™n%ó.®‘|¥)WÊR‘|¥)WÙÝMñëS¾nró-–µUÒ‘}›dm¶ÛlÛem±›UÒ‘|¥)WÊR‘|¥+Ò½ó~êíÛ«÷}ó®ã—(«è¬lû¶}¾ÜÝ»>qmœE3­þ=JfÍ_uºÔª¸Š¾R¼–†q¹œc¾gqŒ$j˜zª"*ùJRqWÊR‘|¥)WÊÍ÷}¾íÛŠí»qÊûˆõtˆ«ìuìÜîµ69GºÌS)ut¤E_gs6ëÇöS¬ÎaØÞ:®”ˆ«åfãvù×{î»|#®®±×³sºÔØåë1L¥Ê*ùöNûí÷Í÷^û™õ])8«å)HоR³;gûö_Ù·â³öþ®"¯”¥" z¿óýz1?ìj{ö39ýŽ~ÿ›ÿ¨¤¢¯•›¾ßïŸÙð®ßà¯õ]'|¥)WÊR‘|¥)WÊR¿oûõ|ùIÿ7êÿ+;lb—·”UôR”œUò”¤E_)X·ËÌÝó-ÔËq/™uq|¥)WÊR‘|¬Î·øõ)›6=}ÖëRªëÆ„Œns»+­yÌùG³º»J*ú+;©¶=kfÍÎWu²”ªºN*ùJR"¯”¥"*ùJR"¯”¥"*ùJR"¯”¥"*ùJÆ_ïÎÊScÖs¬Õ²•WWß’¶í¿¶îûvs·78ïÙê)IE_gÎoËÇ1œåîyÜÖ:®•™Öÿ¥3fǯºÝjTE_]c¯æçe©¹ê=Ôj™j«¤â¯³w3åóØÎz¿<ükWJDUò”¬ÿfßìý°¾ß¶­øW×JR"¯”¥c/u«|e±‡s•ÏÆWÍ™Ï_sÿ3e9Ç”뫬îfÝxþÊu™Ì;ÇUÊ*ûýY›7uºÝL!»®|ò:rMß|Ìûž½Å9ã¤ÎnÙ|îêuŒ?ÇÑ—ºÕ¾?²ØÃ¹Êçã”Uóö~ÊߟØÂ;eú|ì¿›ŠZº»àõ7}WY¸Ý¾uç^û‡îßëœUõÒ”œUò”¬ß%{î¿”µîßuqq}t¥"*û6g=}ÏüÍ”çvS®®•›6ÛÿÛÙø¾Û`­´¢¯®”¤â¯±³îÙöûsvìùŶqt¤E_)JDUög7î¾ve:æÍãªë>ݿ۷|+·Ï‡+ü#ÕÊ*û?c?^9ç¯ãæ±Õt¤â¯”¥cçÙóýþÆý™û |âb*úéJDUò”¤E_+7Ýöû·n+¶íÇ+î#ÕÒ"¯³w3åóØÎz¿<ükWY°Í¶uf_ÿ‡þÿ‰ë«”Uönæ|¾{ÏWçŸcêéIÅ_)JDUò”¤E_+7wWÍÅ-Yy¸rÛ¾«¤E_)JÍÜÏ—Ïc9êüóñ¬|E_]gÎÇ«¹ÿòØóÎêuÕÒ"¯”¬ØfÛ:³/ÿÃÿÄõÕÄUò”¤E_)JÏÆoû«:·ü;güF\E_]gùÿöÛ?ý[loõtˆ«å+;©¾=jwÍÎ^e²Öª¸Š¾R•Ÿ>ûŸ™ð¼ûà½ôE_])HŠ¾Í˜yÿ¯þsIØí•ªéHоR”ˆ«ågs6ëÇöS¬ÎaØÞ:®‘|¥gù ÿeìµ/öØ?« «ˆ«å)HоR”ˆ«ìÙ‡Ÿúÿç÷4ŽÙZ®”ˆ«å+3­ö=KwÍVeº–ª¸Š¾R”ˆ«å)HоV>Ÿ>ÛünÝÛ°¶ì"‹|¬ÍߺÝL¦ýÕ:XgýÛ, k©g!|ã±ç51WÑKºR@©0 ¼R_$ Ôvn¤ãœjÌoòõí105„Z– IHè%”ìQ(ic27FJúB3æÝ½ÎíÈáUUÿ2ý·û~ØìÏÅgûý©öNûí÷Í÷^û™õëÀ-Å˹!Ò”}¸Ü3¥8¤rñhî‚öÅþ3äï›f¸©¥dä>ëÛ÷}<­‚7Y-³$f=¿æÀØ*¿JW„°óÿææ|̦ë~ùZè•_E)IÅ_+ÆçežÄ„³³žÌÌiΧy3›÷_;2FóæñÕrоR³:ßãÔ¦lØõ÷[­J«œUò³mŸí³÷âûlüz¶Â5?açì­ùýŒ'ó¶_«”Uò”¤â¯³ößíûc³?Ÿìö«¥"*ùJVnãÏù{ã»Nç|½W×JR"¯•™Íû¯™N£y‡óxêºDUò³ç~êÿÜÂ~;åz}»·nøWoŸWøG«”Uò”¤â¯”¥"*ùJÍßo÷ÏŽìøWoðWú®"¯”¥"*ùJR"¯³çcÕÜÿŒùlyçu:êíe”5ŽWÇ¿Äɳ¨#žŽ½d¦*ûúvëVRÿÍú{m–îìbß5¿ôd#ä¶Ga¿¥; ß$—Æ™·Î_l–ýý³»î0b_î‘ "ÈÎs¯wÝšúhx4šVàP ñ‰ÉJ:CwOß—JÊ>$¯”®Œ‡ãäAëbpª¯¯€ì¼1yïú?%’ßœ»}Ê[wd# ½ùy­(š6AdÒi, Ô 7ÓÐR@ÎÈ~Žì‹$üù(B½ Ô†€ì™BFÁ¸¯’’ƒJéètôàÜ45ûî’ó·Ût¥ýË& ‡€LMB7+—ؽЄ É„§q‰îÛ’öû¾GÙï!ß²ŒÀËZ¿Ï–MÜšÄ>MÀdbvƒJå£o‘ÔK_C±] îÿf²€wŠ`Ĥ ‹ü´—XhÆ,è B–„ü–ù?%z_Úà DÐ|ñdİfH`h (´„~å+fN èù¾ÚäI…Ü0šL|Šß¶ ņfß·t—öèßä ¾„«§æº–i¦P¢ 5$0ð(ù{tdÏè+§ìĶ%|ý·Ý¾Y×¾ MA{b ›ÂÀ° ‹,–RzRPè(®½Óߥ)}œïy4'òn+'–` úR„wNtVØxÄ-ÂS•w±<àâ}5›¥fù+ßuü¥¯vø;«‹«½*ùJVglûnËÛ¾ÜWlâ[DUõÒ”ˆ«ìuüµmÎì·4îrñøÓêéY¾J÷Ý)kݾêâå}t¥-Ý; Ã{ý›-|vWX¯WÑJVwnÛ~Êß¶ü_nÂ[Î*úéJDUöm­¶_êRÿÃúøººÍßo÷ÏŽìøWoðWú®QWÊR±óìùþÿc~Ìý…>q3оºR‘|¥)WÊR‘|¯ø'vÊß 7?ÊÊ;²×ŽÊõ”Uò³fuþüR••›­ûùþèNÝ2Öîï¾ù™˜ÞïÕQWÊÍ™×ûñJVVl·ïéÝ»}»+üûqyóˆ}F_ïÎÊScÖs¬Õ²•W×Y¾Nß}÷Ͼ^û›¸ê|ìz»ŸñŸ-<î§]¬”œ·Èï¿èB¸K¥_ö³ÎçÊ*øÁ¥ üoo9÷ýt fNî´+½X C14²W(·I)‹+%ÑŠ/|3ñ(¤ hom¿Nûý¯öNûí÷Í÷^û™õé ÌVAErÑÑÒJù(émÓñe¥9‰ièß'Ý#wߵʎËvuUÙH`T•¹EF)yY '“1(4h`ÞŸŠÜ¼Ÿ×ÿnž€ Ê% ä>„”” ¢³üÒŠd,¢ÖÃpj{7¼(7²4®ïƒ7J3•Ÿ!¥))´>Ø„Z9[·ÉÛýzÇ,’è(²g(§pŒŸñEä—ò„üj\”‚Z:Ÿß>Û³ñ.5cÏokWù¢a C-½<ä´öN(`ntäd$`cô#üÉúÈPVÅLF B 冥yo³(½ò7é I# ßä=MÄ-»”‚VJ7FA0˜”äô”€¯äÜßò–WPÖ{^d”Z>@aI(19%†d“:JG, ¤by)ºß£tž—û[ô?sûœÛó„æ›*¾–0Q[—øjr3r–Pj>+²940È-#;”3#„tvºß¸n,hha @ ËK 1,¬„ û}úRS —ØoèÞóD ÂQ`'Á»†òËØ$aì„%(,°Â¶mØ!œ³?¹% (´ÿÑ¿é%§~Wî’÷,²gFlÙ•‹Ü#3h[c²”ÂÇs^*ÿ6B,nù¶äÖèGÈì_ߊïÛ»~œŸŸ.âßTÈe ´•öB ,`` C:0Šu#àÍÓÒìÿ¥?|§¾dRPZ”wÉÛî?|øõÞÒQÈ6u}›»«æâ–¬¼Ü9mßUÒ릯•éÉìÉfûõ>øÝÍ÷ÍØü©;©¶=kfÍÎWu²”ª¹E_+6g_ïÅ)YY°zß¿§ìǯ±ß™úØãêuUÄUò”¤â¯”¥"*û;™ö^?:fãæqõt¤E_)JDUò±×³sºÔØåë1L¥ÕÒ"¯”¥gÃwÝ×™_îó|'."¯Ž¿›–¦ç¨÷Qªeª®³ö~ÊߟØÂ;eú¹E_gÙ*ûuwÜ;¯ §ìgëÇ1¼õüqüÖ:®‘|¥)8«å)HоV:þZ¶çv[šw9xüiõu™Öû¥»æÇ«2ÝKT¢¯¼±¿2?ßòKo³,'Ÿvo²Ö¦?Vt”§æÅìJåìŽZlÿqû·Q­j åâQH/d¥)ïóñ›~­¶Í¸ÄØ#°Ñ¿{B$´–1.VAyJs!%ºx¿Ÿ£ìŒ—?/msâpTêü¥ôr™©~’@ÆR?Ù#~g3æÃ[žÐéå–ZF¥ ø¯!ô~3d}ߌ[:®ª@©\™Æ ådºCRÅŒn‘¼$!?¥ J í³ïrnCHbŸa¨ ßä'¥;ýønFèÿ(¬k·Ö['ùÕÿY&†”Ä“8fØg ä²Ò„%; ˜Q|0¾JÿIe憺9.”1D.RF#ß%¥9#r>èøÖÉ@dÿî9 šÄÔ¹|°ÒŠ- åô$1zQûŽŒ3Ÿ¡¹}§µèX7t šW ã>%ïÉ¡¼´ì„~ú3d;ŒèC IéÞù½¿[ñæf",p}µ_ó@(K&äbøgI#—› ¿Ó²PWìÁœ–_&ÿÃzF|ŸÑõ¼šC-8 Ä†nZþ唜L/ ý‹äÔâÑ€±m‹Á))¾×¡) \ âb† !»’’Ã7ÿþÆ^@Ätôd(¬»„L,0˜’À-Á¥$®‚S§ìŒWá0–ŸÉ…§›7BRÉïu¤WÙnÉWÛ¯u­{¾áÝx\¢¯®³wÛýóã»>Ûüþ«¤â¯³üÿûmŸþ­¶7úºR"¯³fëÿŸÜÒv;ekXj Nd$`ÿ™ÏËßä¡YÕÑÝKÖ Ï·oöíß íóáÊÿôÅ_ꑹ+-841/Ó”þ•£o‰[’Ñ’VÙ¯|Q $ÞK@’W&² J ¥a¿ìÜ4 ÔìÎä²ÀÈЖÙï—q…†|Ý ‘‘¹EîR‘·„¡¾$'e3Ÿ{@*ù ¤ †ät~XÅ6BB;§ðIJ]É.Ž”a¿ýy#XÀ8EË´«þ†_,†^à&ß–”7&£raièà]8””‘þßàÐ.åãöáœhoäºC\–PÏ‚8Ô' +©@NNÈËÙµò2ÈE†$–’:R„dP„Ï‹å¥$ÂÑ·ÉÉÃR‘¹ É·÷¿á‰))+{¡—ÃxÂ` îƒWɬÀXï¯|ÙÕ±‡þ¡aJU¥_a %¥(å§§)‰á€Qa8­Û¤¡87|û6É^Íy’aed¥¹GHn@ÔŽA(oÛ“„Éý'º OtmXB ,hi “ %%¤â±_bË-÷ébù(®„”Kü5%7;«\id0Äà+ð`a% Üa\§+ jxßÃq,¤¤1]·vi«ÿ4ô÷Çwf{E_ë13b²SÃxÂþå'Š|V (‘©åbXj6HÆæ®ò„ÀbnÁ¸ e”MéÙ<°ÒÿãP’^B¹(¾’¶Ã;)^â›'’Ñ‘Š&ì4®KJrS¾&âËÿ÷È·ù*S¤máFrVïÿÝä¦Á¥îŸÆ'á¨ËéÝÿÜgÏwô³ž§¹?SWó°—íömó1ëo²wî½ÎcµE+-[s»-Í;œ¼~4ûèljúéJÎíÛoÙ[öß‹íØKyÅ_])HоR³9»eó»©Ôf0ügWWÊR‘|¯Cm™ÿ;)û§þÙ³­|þ/ɜݲùÝÔê3~3«”Uò”¤â¯³íÛý»w»|ør¿Â=])WÊö‘³fÛ¶9M¹ØìªŠJ*û7·Î¼ëßpýÛáut¤â¯”¥"*ùJR"¯³wÛýóã»>Ûüþ«¥"*ùJÍÝÕóqKV^n¶ïªâ*ûùy›¾eº™n%ó.®³ì÷Ûï›î½÷3ê>Ÿ>ÛünÝÛ°¶ì"QW×Y¶FÛm¶Í¶VÛµ]z‚Ñ’ŽûÇ‹Ã÷3òò¢*ôønûºó+ýþo„å×ôl^HÏÿÃÉ|Þ§ûnÙÿgVU’’Š¿ÖÈE¹i&;$¤„:\¯ÐK—KÝ<Ãú« ¸„„bуyY]9óô!F¸ÌÃFŒ;6Úñô°Ç´êÿI€LŒ—é-;t¶JRœ0²²RFôGøksl%蘞”‘ÔqÙ†°Ìr )q›;÷>äÒ±¾*ûЄ™²”fm¶Û³c³jŠRÖU|¥)8«å)HоR”ˆ«ågϾßçÇæ|/>ø/}WHŠ¾Îæm×ì§YœÃ±¼u])WÊÇϳçûýû3öùÄÕÒ"¯•‹|¼Íß2ÝL·ù—WYó›òñÌg9{žw5Ž”UófëÿŸÜÒv;ejºý÷ÿä¾9³6èÿs³»«¿S ¨ˆ«å+6ÈVÛ/õ)¿áý|]7·Î¼ëßpýÛáq}uŸ±Ÿ¯Æó×ñÇóXê|ìz»ŸñŸ-<î§]\E_)JN*ùJV-ò³7~ëu2˜K÷TE_])HоV2÷Z·Çö[w9\üaôîݶý•¿mø¾Ý„·«”Uò”¤â¯³9¿uó³)Ôo0þoFÏ»gÛíÍÛ³çÙÄUÒQWÊR“оR”ˆ«ìÝÌù|ö3ž¯Ï?ÇÕÒ‘}Ÿ°óöVüþÆùÛ/Óq»|ëν÷ݾ×WIE_{¤kd)Oÿv_ÿ}Û7W2¢”ˆ«ìuìÜîµ69GºÌS)tûvÿnÝð®ß>¯ðWHоR”œUò”¤E_)JDUò”¬eîüî¥79g:Œ[-q|üfÿº³«öÄeÕÒ‘}›ä¯}×ò–½Ûàî®.®”ˆ«å)HоR”ˆ«å+>¾î¼Êÿpï›á9tß'o¾ûçß/}ÍÞQW×JWäîÛ„œgùÔÎwùO·oôE^‹~¼Í›2Ýn·Ù•WJN*ùJR"¯•ýiBºŸ¾íœæù÷îý•òœö¨¤¢¯³l¶Ûm›l­¶3jºRqWÊžVfïÝn¦S ~ꫤE_)JDUò”¤E_gvíöì¯óíÅçÎ!ôÿý“þV^gOù‡lîî¬îN¨¯éFìëS쿆ößìýÖr¸êb¯¢”¥QWÊV:önwZ›£Ýf)”º¸Š¾Vo’½÷_ÊZ÷oƒº¸ººDUò•Ž¿›–¦ç¨÷Qªeª®"¯³çeüÜRÕÕß©»ê~3ÝYÕ¿áÛ?â2êé(«å)IÅ_+;·m¿eoÛ~/·a-êéWÊÆÏ»gÛíÍÛ³çÙÄUÒ"¯”¥"*ùY¶B¶Ù©KýÿëâêéWÊR³çßoóãó>Ÿ|¾ˆ«ë¥)WÊR‘|¥)WÊVlοߊR²³`õ¿OŸ}¿ÏÌø^}ð^úQWÍòW¾ëùK^íðwWWJN*û6c_=ç+cŽÆ±õt¤E_)YoñêS6lzû­Ö¥UÄUò”¤E_+ýy›6eºÝn!³*™Û?ß²þÍ¿Ÿ°‡õrоR•‹|¬ÍߺÝL¦ýÕ8«ß:22ÒgH@ãùÙ`<Ç󚢔”Uò”¤â¯”¥"*ûöîÿ¿Ï”û7ê|ÿ¶ËÌíQJJ*ùJRqWÊR‘|¥)WÊR‘|¥)WÊR³ñ›þêέÿÙÿ—WÌë}RÝócÕ™n¥ª®”ˆ«å)HоR”ˆ«å)HоVm‘¶Ûm³m•¶ÆmWHоV}»·nøWoŸWøG«¤E_)JDUò±×²×¿;²˜Ó±êÇóÿKl¬ûþùjùŸ7Í×÷WÌ=ª%|¥)8«ìîgÙxüêu›Œ;™ÇÎŒÙþÛöée­¶=·ç3ý•ª)(«å)IÅ_)JDUò•ŸäoÿÛlÿõm±¿ÕÄUò•Ÿ¶ÿoÛ™ø¬ÿ`¿µ\E_)JDUò”¤E_)JDUö~ÃÏÙ[óûOçl¿WJD@Hz¿óýgÎËù¸¥««¾SwÕtˆ«å)HоR”ˆ«å)HоR”ˆ«å)Y³:ÿ~)JÊ̓ÖýüE_])HоR”ˆ«ìÙ¿¥efÁë~þ®”ˆ«å+?È_û/e©¶ÁýX]\E_gìǯ±ß™úØãêuUÖnŠZ²ópå·}W(«åc/u«|e±‡s•ÏÆWIÅ_+>v_ÍÅ-]]ðz›¾«¬ÝÝ_7µeæáËnúQW×JÎæ}—ΧY¸üw3­usоR”ˆ«å)HоR”ˆ«å+>ÏŸïö7ìÏØSçWWÊVnæ|¾{ÏWçŸcêâ*û>¾î¼Êÿpï›á9ut¬|ÿ>}·øÝ»·amØD¢¯®”¤â¯•øgJ~ËVý™Ùy/g1öÿšõ›»ž®Ç|fêsÏ?)Õ(«æîgË籜õ~yøÖ>®³fs×ÜÿÌÙNqÇe:èÙ÷lû}¹»v|âÛ8ˆŠ¾ºR“оR•Ÿä/ý—²Ô¿Û`þ¬."¯®”¬ÝÝ_7µeæáËnú"¯|œŸÙ{¾ù÷ûåwt|·ÄZŠRQWÊR“оR³|¾ûïŸ|½÷7z¸Š¾R”ˆ«å)HоR”ˆ«å)HоR”ˆ«å+?ÏŸmþ7níØ[vWWÊR‘|¥)WÊÏ—óqKWW|¦ïªéWÊR‘|¥)WÊWäl”¤ÿØÌ­ŽÏ¶ìïÖëþ#ý›gÿ#9ëêÙÿýjÏü¢¯¢”¤â¯”¥"*ùJR"¯±³þÙþÛó~ÎÙÅ?a5t¤E_)JÍ™×ûñJVVl·ïâ*úë6ÈVÛ/õ)¿áý|]]"*ùJV2÷Z·Çö[w9\üañ}u›dm¶ÛlÛem±›Swu|ÜRÕ—›‡-»ê¹E_)JN*û>ݿ۷|+·Ï‡+ü#ÕÒ³ñ›þêέÿÙÿ—(«ë¥cgý³ý·æý³Š~Âjç|¥+Ë1$¦Ü`×ì§e³žÒоŠÍÝÏWc¾3u9矔ꫤ⯳9»eó»©Ôf?Œê]]+7Ýöû·n+¶íÇ+î#Ê*úéJN*ùJVwS|zÔ¼Ëe­Jˆ«ë¬uüµmÎì·4îrñøÓêéWÊ͘ß×ÏcyÊØã±¬}]"*ùJR"¯”¥"*ùYoñêS6lzû­Ö¥*®‘|¥)WÊR³ç7åã˜Îr÷<îkW×JR"¯”¬ÎoÝ|ìÊuÎÇózÕ;t£ WWù ç峄œV|~”U𠬾ÙÍæ§œÿ›ûl#jŠVm‘¶Ûm³m•¶ÆmW×JÏÛ·íŽÌüV²Åý©þÍ¿Ùûa}¿l=[ñ"¯®³ì÷Ûï›î½÷3ê»Ô†¤1%’þŠÉAåa¨å¥¿ÎžèÙò©ômöôiÕþ^±×òÕ·;²ÜÓ¹ËÇãO»¼(ÉÈìRR‡)¿”5;ýÐã:bGOû¾ÌߨË#”rÜhß¿BöÎJ†gý#YóZL"*þm)KYUölÛoÿlgâûm–+mOÆoû«:·ü;güF]]%}ø`Þ¥¶~Çç톳vZN.¢•™Û>Û²öï·Û8–Ñ}uŸ9¿/Æs—¹çsXêºN*ùJVm‘¶Ûm³m•¶ÆmW×JR"¯”¥"*û?fWïÅ)]}ørŸ¿«¥"*ùJR"¯”¥"*ùYó?uŽîa?ò½]"*ùJV¿ö^ËRÿmƒú°¸Š¾ºV:öZ÷çvSv=XþaÓ£¿J÷nÍB·n¾µ¹ŠùRн-[s»-Í;œ¼~4úºRqWÊV>Ÿ>ÛünÝÛ°¶ì"Ÿ±Ÿ¯Æó×ñÇóXéE_])IÅ_)YøÍÿugVÿ‡lÿˆËŸÝÏÊÛl¼µÿÿÙ™»3«žt¢¯OÆoû«:·ü;güF\í÷}ÏïÝùŒÙlƒ9ÌzŸ¼Ÿ>ûŸ™ð¼ûå ßWôeü„t¸ÜêtŒÿ·ùJvý¥~°*JÅ%%ÿ¶ÆðÃrœj6ÿí·ÿÎßÞì0 BjR’Ûüÿ‰©ß'†¥%“ÿ–ÉOFåfËçÝàâÃÒžÉäÌ‚ÿè-(ù$Ä¥Ëù%tqƒ ?ì¿Ã]7\5"Ëä-ÑËB ÄÂ’V!d–•Ó€lŒK3bFt#îÚñ3™”àÚkWù ÒƒWÊp`¡œ7¯0´'bŠ-·Ù‹îº†F·“b— Ii/Ü47„Œ-!™(ä¢É„´!'##„çØ'ŒºÉN& QÃ-NJLÀT´'7?$ ÄþÃPWßþï÷õaœ˜P¾øòÃxÂax ž‚QLC û>û'vNBvêûØ0æVÂ;yÕÿ4ÀT ÂhÏÉå }‰\²ÓÉIÈGÈ^Fü´ —Îyâ` !íÐÆîŸ è݆¶ÿ³^;·UôôY4¦ÄÀÒ¶GFA12F:I¥d‹J¾ÅlÛì0hËÒ˜†M! À7 å#då$¬øÝ’ÜBü—¿èÙ!?gø§º¾æï¹M_ùÚ—X185%³÷íД9)8'^ÉÍÛ­Ûü¾}ɽ‹:¾Íßo÷ÏŽìøWoò…©¸Ý¾uç^û‡îßë£/õ¯le9‡c×ÏæW8«å+3¶}·eíßn+¶q-ªç|¬|ÿ>}·øÝ»·amØE]"*ùY°Í¶uf_ÿ‡þÿ‰ë«¤E_)JDUò³ñ›þêέÿÙÿ—WHŠ¾Ï·oöíß íóáÊÿõt¤E_)JDUò”¤E_)JDUölÆþ¾{ÎVÇcéðÝ÷uæWû‡|ß Ë«¤¢¯”¬ùÙ7µuwÁênú™Û>Û²öï·Û8–Ñ}t¬Ùœõ÷?ó6SœqÙNº¹Å_)JDUò³çßoóãó>Ÿ|¡{êºÆ_ïÎÊScÖs¬Õ²•(«ã/wçu)¹Ë9ÔbÙkµ¡v- uääþ7wùn€ŸÑ»£:µ“öe~üR•×߇)ûùÒ‡7îßo¹ÎËnèÿ2Ÿv¦*ÿª€b€Â“²P„†7à! ~0˜Ÿ“ÒVÏÑ‘•þB;|ºú£J 0\^ ICJÍË/dìR]<¢ùnW&‡o¶Í|He @/ÐV%âÊd|‘²zY¿åý …öþûÏ@Ï‹Få§%¨,¯¾ã É,°2^úF'Œ,¦Éß#©;ß>…œj–/€{mWñ I5 Ñ¡©Ø¢†áƒ 8¿ÃJ&£tá¹!¥¸ÒðÏÒ»©HJqDÐÒÓÿ&“†bŠ&§%)Èÿä¥Û†„âþ FADµ#|Û[¾Æ(KcÏ*¿ÑÀ*,™Ê†-JRMÀ6 ý»à$4–…t§”ä|ÙÚø!DÔ’×t%3)9;tuï·oòò¯¸R~ A@1ž•‡IE¥¼’^šҗ(¦ãP‘£v¼ÈÀ!á¨BCé/%Ût¡úR0¬K‚±HcþêCgº~QŒ ðó¥Wü«9¿uó³)Ôo;ÍëU]){–U}Ÿä/ý—²Ô¿Û`þ¬.®³:ßãÔ¦lØõ÷[­JU?È_û/e©¶ÁýX\¢¯ŸgÏ÷ûögì)󉫥'|¥+6¶Î¬Ëÿðÿßñ=q}t¥"*û?açì­ùýŒ'ó¶_«¬Ûgûlýø¾Û?­°W(«å)IÅ_)JDUò”¤E_)JDUö~ÌzûùŸ­Ž8þ§U]+?Èßÿ¶ÙÿêÛc”UõÒ”œUö:þZ¶çv[šw9xüiôÎÙöÝ—·}¸®ÙĶ«¤¢¯”¬|û>¿Øß³?aOœM\⯕Ÿ°óöVüþÆùÛ/Óöe~üR•×߇)ûù÷ß}ò÷e¯v=Û3}ó9¥znŠZ²ópå·}^ùIK¡}ûnéÛ+vïØc­l§ú¯ðŸ/~0öùyggZ¹ùzërAƒR”»oÿÏŠlŸ²¥ cüg ßóÛY´êþÑ °ÄQ‡,´ä¡‰a;'ôâ¿ï¾Éèßä¤q­}\d0)ùx¤–Ct'mÿ--Ã9y=)+§”Wû‰x•Ê%ýýåI T0 ÂÉ€0w*z€l4§ÛnPfèý)+£ %ÿ]õÂ‹å“ GN+?Jq/ò‹-*GröÎÃ@P„ý³íøÛÀÛþ²!qáokWùž‚hÓ‹K @bC_&“K+tg%7~”$îÃPë÷ ˜J! )% 059‰¸nFå͉¡¥”_ JQº@Â…oóv×¶/Ë+¡|˜VHI[Ÿ‰i(jÀgBKe-›œÛDÂЂÒXN É J Hfá=<3îžJÊBÒ–éÿæ°|îÒÉó«üS€Ç 4,0näÌѲ7-?A4¿ú]ºR¹kß&òÉBC~!€d§þ€6È ù(q…òËål3d$°žÉèÙï~BbˆiI[#±Iá¸g%2ËJ Ćt£m¿&xN{眈C6 Å£Yä,^ÜÜ‘¯úøÄ³doѽÔì¤ðáfE¦¯ô T°–‚ÑŠ¼„—JÑÀoñmÀÆÙ‰Å£ôº1\îó€dWÎQeîѰhfܬXb@±D·åbJP‰e§äÿß{Éò ñ ”„!$>ŸÒPÔü„VéÅ¡ÿd(´d‹fo} Bh¤1©N&>HjK,´’ö%ì”±0 +vFVN$¨NØ[as«ÿ;R³fs×ÜÿÌÙNqÇe:ê櫓«ìÜnß:ó¯}Ã÷o„uÕÒ‘|¥bß/3wÌ·S-ľeÕÄUò•Ÿ9¿/Æs—¹çsX긊¾Ç^ÍÎëSc”{¬Å2—Næm×ì§Yœìv7©Ut”Uò”¤â¯”¬eþµíì§0ìzùüÓªâ*ùJR"¯”¥"*ùY»™òùìg=_ž~5¦svËçwS¨Ì~?Ôº¹E_)JÌë}RÝócÕ™n¥©sоºR±o×™³f[­Öâ2¢*úéJÌë}RÝócÕ™n¥©q}t¥c/÷çe)±ë9ÖjÙJˆ«æÌëýø¥++6[÷÷d´bÑñ3Œÿ BQÓŠérZ‚ ÜîÙ7ì÷Ûï›î½÷3ëY7 Jºa-ºU¿B÷ÙÖêcÕe•çWûBn¡ˆè!Jt†íÿÛ¤js¶FB˜°ÞÝòK/lÛ{ºC&†àÍÒ‚€Û’  Tî[¡% ÝËJ HΖ?\P¤7•ÒÒäÂbR4´$®GÎS¾Ã~e "ú@ É…’j‚À+(cÆ$¤ûVéû}‹BÿØ35ã!Ÿr0•}…’ÃQÊ©„'åä(¯ƒ B0gOå£u±|jy,´3á®ßO !—ÊÀ1Gn”åÀ€7 –Ÿ’”ý†l71xËÈ“@2-ˆHg,™Ð¥–7|coœ¡¿oЂÊC—”å eÜ‚Šá©ä4r  Û~€ÔVOB~ù¾)¤§:6FHÔ¿ù+¹_cÂE‘™B‡N¯÷6 &ìJÅ„ 0bF”_™²:6A\orZ;oÂKHÜ6â@)ÐI˜4§,44¢òKÉ(7`Ì”Pg)Ò„´ËãI=ûëž‚a ˜ZÉ]|­ÒZºq,41%”‰II}!„£ô–ÝìÒD$pÒñx°ÔÉ Ü˜MÍ0®fG-ÒS»áˆû~¼ô¿aB›â(ŒN_é @ øß ù4crŠ&àÔn¢ cþžÒ’’Xk«¿¼ø²@®!âRJ! 7î‚’_ ObYIéÈO–ü²Æ%ô>ßµÉÄ-Ãwî1%„†§ºHhJÐÊG+”Ÿ±X3ô# ôt¥ dÙÔJðgÉÄÐÔ‚3'Œ/ä?á¹ Ye±{çìã=ÓšÊpªjý`;N&’úC ¥†”¹7–Èåî’4®QEä'÷á‹ß>Û]0‰ Û””ðÑŸ¶N%ü4¼‚òPŸºúFÿ÷ï³!\7“Qƒ „ÝË&dr¾ÝƒÉ›|ÉB΄òËéÈŸŠ×Íu±€ßòñ PWlã7O北û†+îßýûÚpæØ«üí¿ÛöÇf~+?ÙbþÕt¬ÎnÙ|îêuÇã:—{–U|îgÙxüêu›Çs:×WJN*ùJV~ÌzûùŸ­Ž8þ§TE_])_÷NNêÝY“÷o|ÝÜî-å}¥'|¥fÃ6ÙÕ™þûþ'®®"¯±×³sºÔØåë1L¥ÕÒ‘}›0óÿ_üþ擱Û+UÒ±—»óº”Üåœê1lµÊ*úë7}¿ß>;³á]¿Êþ«¤â¯”¥"*ùJR"¯”¥"*ù_ÆÃ›º|Ëwg¨¬ûvÿnÝð®ß>¯ð(«ë¬|ÿ>}·øÝ»·amØE]bß«3fî·[©„7uÄUó:ßãÔ¦lØõ÷[­JTä¤3lÙÝJ[1ç[ÔR"¯ö„ÒË&”§–1„a©ã?+w- ý`Öêæ}+X„Òû†bGNN& 4¯±E|Œ3p,žœúSK羜RY goòÙ9Mú>o›%Ÿ/=ö ¨rŠ Ý#†¤bK&¿Bz „ ÒÒœ„¶Ø¢úË-²¿×–a.Ò¯ói€` ‰‰b²2KÈŽZR„%(Ù%!=?’3sÑ’ßìŠÿñ7ÃZúz JJH`bF† Oû(”„Éý¿l÷H­Š&2 ¹e±i-)Á€îZ»Ô„¤f á)Gýÿy¢ˆhKn‚ƒ:7HfÿtLèù Y<¯‚Ü¡›Œuá°·X?åÅ_éxfÌ”ŒQ¢’Y†·I#dð0W& #dâÕÕ¶Ë{Š’`i0¼V !þ”†tFdü„1I -;'u~” )É_Oïu¾ÄÀ‰„ÒÒ‹,#¿&†¥$²%×%tç`ÍÆ§%›\àÂj‚ƒHa¨ J>-”WBRŽPoÝ(èÁ3¥;î~J6éË¡ÝÛaj _~7ü–K!$¤ºCs€á ù]!¹—¹‰, ”Å>mÆ^àäÒa]—H ùlzpg/ d%9%•Ðvíò8ãSõáð ú ĉEœ’JÙ;âÉ{¤¬Xg~7¯:3æNBýÖ!è5!¤ÂÀn°ÎYHéB Kwt†d•ñ_–LG%¡—ò2¬ÿÇøç p:ñWë0`I0a ¤ 3l0187~ZÃYHo+(´§ší|\1¤fB V|ƒŸm•Û>Ûm»em@Ä Clœß’SÓÏë~”þççîì—«úÇÑWÊR—]5|¥)WÊVw3n¼e:Ìçc±½J«ˆ«ågùÿöÛ?ý[loô[åænù–êe¸—̺¹E_gù ÿeìµ/öØ?« ¦Ìëýø¥++6[÷ôeîüî¥79g:Œ[-uq|¥c¯æçe©¹ê=Ôj™j«œUò”¤E_)X·êÌÙ»­Öêa Ýuq|¥)WÊR‘|¬Ù¿¥efÁë~þÛ¶ß²·í¿Û°–õrоÍòW¾ëùK^íðwWWJN*ùJR"¯”¥"*ùJR"¯³l¶Ûm›l­¶3kY4˜‚j$;©÷f|ûã¿ß}÷ßï¾öOòþËÙj_í°VWLUþà4½ÑÊC$¦I(„'•Ã:†¥‚>GÀ8CìµÞ‡™ @`!äw ,¶Åq{1)_&¤7~¼Ý·CgÞùVî竱ߺœóÏÊuUÜ®Æâ8ª¯÷‰2K&”QiÅ‘·ÅpÄvèÈC6+ÒïÎOÈFú­0Kd“KI/t1e~_ß’†ôbМS¤nø¬‚¹\')W‡¥£éUþ¤„`ÂE ”„²]öì†ýð,´æÿ³~ŸÛ?¼ÖsvËçwS¨Ì~?ÔººZ|¥)i*¾R”ˆ«å)HоÆ_ïÎÊScÖs¬Õ²•WJÏØÏ׎cyëøãù¬t¢¯®”¤â¯³wsÕØïŒÝNyçå:ªë;©¶=kfÍÎWu²”¥ÕÊ*ùJRqWÊR³a›lêÌ¿ÿýÿ×W×JR"¯”¬ÿfßìý°¾ß¶­øWWÊφﻯ2¿Ü;æøN]]"*ùJR"¯”¥Ù.އß-Û£»ï™ÜKæ\¢¯FÏûgûoÍû;gý„ÕÒ“Š¾R”ˆ«ìuüµmÎì·4îrñøÓêéY»?åïŽìi;òô¢¯®”¤â¯”¥"*ùJÇ^ÍÎëSc”{¬Å2—WWÊR‘|¥)WÊÏ·oöíß íóáÊÿõtˆ«ì[õflÝÖëu0†îººVlÆþ¾{ÎVÇcå|Ù‡Ÿúÿç÷4ŽÙZ®”œUò³9¿uó³)Ôo;ÍëU>¾î¼Êÿpï›á9urоR±o×™³f[­Öâ2ªç|¥)WÊÆÏûgûoÍû;gý„ÕÒ"¯•›3ž¾çþfÊsŽ;)×WHоR”ˆ«å)HоR”ˆ«å+3›¶_;ºFcñøÎ¥ÕÄUò¼®žÒœÜîÍÜü­Øýºª)(«å)IÅ_)JDUò”¤E_)JDUò³fuþüR••›­ûùÓ¿Ìg}Âz>Í×¾[»˜÷¨”Uöm‘¶Ûm³m•¶ÆmWJÎêmZÙ³s•Ýl¥)q|ønûºó+ýþo„åÕÖg[üz”Í›¾ëu©J«ˆ«ågs>ËÇçS¬Ü~;™Öºm­¶_êRÿÃúøºg7î¾ve:çcù½jˆ«ë¬Ýöÿ|øîÏ…vÿ(Wú›äí÷ß|ûåï¹»ÕÄUöw3ì¼~u:ÍÇã¹k«¥'|¥)WÊR‘|¥)WÊͲ¶ËýJ_ïø_WHоR”ˆ«ågìÊýø¥+¯¿S÷õtˆ«ìÎoÝ|ìÊuÎÇózÕWJDUò”¤E_)JDUò³a›lêÌ¿ÿýÿ×WHоÎêoZós—™lµ©Uu™ÍÛ/ÝN£1øügRêå}›0óÿ_üþ擱Û+UÒ“Š¾Ïœß—Žc9ËÜó¹¬u])WÊW„ Ä!VB6Á[mQ(«å)IÅ_)JDUò”¤E_gÎÇ«¹ÿòØóÎêuÕÒ‘|¯,‘×ó©ÑŸïÕ»7Ê›ÕQIE_)JÏŸ}¿ÏÌø^}ò…ï§}t¥"*ùJR"¯³çcÕÜÿŒùlyçu:êéXùþ|ûoñ»wnÂÛ°‰E_])IÅ_)_ÐCdüÃ~s¾ÿoúŸê%|¥+>v=]ÏøÏ–ÇžwS®qW×JVlÆþ¾{ÎVÇcâ*úéJÍÆíó¯:÷Ü?vøG\E_>íŸo·7nÏœ[gWJDUò”¤E_)JDUò”¤E_)JDUò•›1¿¯žÆó•±ÇcXùÐR Ì„de+mŽÛc‡m°(«çB’ßî“]Û³>É}„3:Ú¢”ˆ«ìû'}öûæû¯}Ìú®³º›cÖ¶lÜåw[)J]\E_)JN*ùJR"¯”¥"*ùJVn7oy×¾áû·Â:â*úéYœÝ²ùÝÔê3Æu.®"¯³çeüÜRÕÕß©»êºR"¯•èH×WÍþ^'ã>ùjÛ¾¨¤¢¯•Ÿ°óöVüþÆùÛ/ÕÖnŠZ²ópå·}WÍ™Ï_sÿ3e9ǔ뫥'ˆz¿óýgÛ·ûvï…vùðå„z-ú³6nëuº˜Cw]\¢¯”¬Ù¶ßþØþÏÅöÛmªç|¥)WÊR‘|¥)WÙû1ëìwæ~¶8ãúUt¬lû¶}¾ÜÝ»>qmœD¢¯®”¤â¯”¥"*ùYû?eoÏìa?²ý]"*ùJR"¯”¥gí¿ÛöÇf~+?Ø/íW×Y¶B¶Ù©Kýÿëâé»íþùñÝŸ íþ ÿUÊ*ùJRqWÊR‘|¬Ünß:ó¯}Ã÷o„uÕÒ"¯”¬uìÜîµ69GºÌS)uq|¥+7qçü½ñÝ's¾^ˆ«çÙ;ï·ß7Ý{îgÕt¤E_+3›÷_;2FóæñÔÎÙþý—ömø¬ý„?£¯æçe©¹ê=Ôj™j”Uóf7õóØÞr¶8ìkWJÇ^ÍÎëSc”{¬Å2—WÆÏ»gÛíÍÛ³çÙÄSwËߨÒw;åêºDUò•›¾ßïŸÙð®ßà¯õ\⯔¥"*û3›÷_;2FóæñÕt¤E_)JDUö-úó6lËuºÜCfU3­ö=KwÍVeº–ªºÌë}RÝócÕ™n¥ªQW×JRqWÊR‘}™ÍÛ/ÝN£1‡ã8úºVw3ì¼~u:ÍÆÌãå}u‹|¼Íß2ÝL·ù—WIÅ_)JDUò”¤E_)Yó?uŽîa?ò½\E_)JDUò”¯~5™Lÿ¬Þ­”Üîë|¥.QWÑJRqWÊÇÏóçÛÛ»vÝ„UÒ"¯”¥"*ùJR"¯•ý;dõ„‘άÎ:Ô}E%|¥)8«å)HоR•Ÿ°óöVüþÆùÛ/ÄUõÒ³9¿uó³)Ôo0þoWWÊÎêmZÙ³s•Ýl¥*®±o—™»æ[©–â_2å}t¥'|¬ÝÝ_7µeæáËnú›¾ßïŸÙð®ßà¯õ\¢¯”¥fu¾Ç©nù±êÌ·RÕ8«ë¥)WÊR‘|¥)WÊVg7l¾wu:ŒÆŒãèÙÿlÿmù¿gl⟰™E_]bß«3fî·[©„7uÕÒqWÙû1ëìwæ~¶8ãúUt¤E_)JDUò”¤E_fÌëýø¥++6[÷õt¤E_)JDUò”¤E_+{-{ó»);¬0êºÍ™×ûñJVVl·ïå}u›äí÷ß|ûåï¹»ÕÒqWÊR‘|¥)WÊR‘|¥)WÊÍßo÷ÏŽìøWoðWú®³öe~üR•×߇)ûùE_]{¤k S8×5Îøñ9®ÊzŠDUò”¤â¯”¥¬4hÀÿ|Û}xÿ÷lþß³²å~JW»¾GϾÜÖ;ýöù¿GPçݽÚ,$Å#¡Óöt}þ%à‚Ÿÿº2UÐé^Þ†:¿ÏR¿q¬”}Ñó©nìß}Ù™ÌîùrlÎzûŸù›)Î8ì§]r«ë¥)8«åyCF –Ã[ ã–ζsž¢’оR”œUò”¤E_)JDUò”¤E_+>¾î¼Êÿpï›á9utˆ«å)HоR”ˆ«ågÃwÝ×™_îó|'.®‘}Ÿ³+÷â”®¾ü9OßÕÒ‘|¥)WÊR‘|¥)WÊR‘}›1¿¯žÆó•±ÇcXúºW§üÜÇÛ„û«3¿¿ÿ}³¸ùE^›6ÛÿÛÙø¾Û`­µ]zwNmÙhæ™÷e}Öqì?|ªÎ–I­¶p„õ§¶o”¥ÍÛ7í¥}Œß÷VuoøvÏøŒ»ÐK¶dŒ7¤–eŒnžzvrR7ßü7]Í!† šPÄîœùJç©þHGãY;çÏ·í}šM+ô`ш&ôý²Kå`Ä£ðÂË,–3ää:ù`eßÜúêÿ4°Ð(ZP’hgKôb¾àg£“JËáÊùA¬Ñ;œŽ€pÄ“šJÅü€¿ì’‹& ¤¥%t#=[ ù?kŒB I\7† ™†ý‰c7- 0´$´ä†¤¤”'“úþ¹$´ðÀÌC!rÉ„­¿B:RKêw”’ihNÉÛ}‹Bq{¦ðÐhò„ñV•W90š^& É¿J2‘ñN†ÉA3Û 5 –36MàC ¹8­Üjv|JNÆdü[ ÅvùIHﮃÉ;M%¡B¤’†§ð21%rѲI•»î„¶Fʶ%$4Á I@c¡†lžé!eü” FFû 1öAiOG”÷wËì¼ HM_ð‚ZÆáŒ4kæfws™–õØt™H ÝŠBPZ:7ä-ÐÅâó”’ž^цÛî×ËŠJKn3£t#ìœß~ï¸Oï”ù³æ^§@[‡ÑWà¥)uÓWÊÌë}RÝócÕ™n¥ª®‘|¥)WÊR‘|¥)WÊR‘|¥)WÊR‘}ŸäoÿÛlÿõm±¿ÕÖ2ÿZöÇöS˜v=|þiÔønûºó+ýþo„åÊ*úéJN*ùXËÝjßÙlaÜåsñ‡Óq»|ëν÷ݾ×W(«å)IÅ_gs>ËÇçS¬ÜaÜÎ>®”ˆ«å)Hоô¥gçý±¿þ;e‹ã¶ÿ«P¡ƒ36lÙ†6eaŸo˜sf¨¬[åænù–êe¸—̺b¯Ž½–½ùÝ”ÆV?˜tøonHÌ´|½û2÷ùKvw3ÑY,·Kð?ò›v1Juö>¢"¯ì“I£fÈßwKÝ'mЯ™=äî»ô}ÌhÃ\aDÇøšMIeärÆô'†b¹/©°jC‚ú?lûá·ÁK è^ã?ÜgùÛý¶ßrûoÆ!m–ϯÐÀ')˜7“íˆA¡›-(Bò }±hø–¿ý‘¶Jú/ `*Ö¯Þt€ì´  “q5?ä &ï’Z é@ßÉAŒ¶(”œÉCä.Ìd9X´!‹ût$¯ñ4¿Š(¬hÏö éA/1[¡’‹¤B!trË-ˆÅ|’ÊJ pÆt ¦/|Ų‚BvKGJïMÄ¢nb`Å“3%¸ ãC~)9#•Òý·JJ¼Ÿö#¯oSðºêúÃR’úKé&¤1ÝÓ‹@ϲR‚i]¿-,íѲJg³€ì˜Xn)#(´äpÞQ4 ¥9°ÏÃ:rPŸ¸gÿä¾ýv€†a˜°*04¼È)%ù{t“I©Oßp”•÷B7e”1ÑyRbCM@o ›Ó¿A ²ÑðÝ`Ôp£Á/ŽûÝײÙB³,ì¾&š¿è¤2jr9 )ÈéÉÁ¹|¬RÙ t •ÿ%}‰h•·¾D§)ˆA/1Ê ðÜnGå–ë+¾ß)1½¼0˜Z!ˆ+ç+rPÕ† ¬²zCÉÈ) ONZWè×Ðɤ/ˆdÒÀn4¤îÅ£'ýÊ BC2S€¿Èݹ\±¤¡©ÊÿWþæ ʱv*ÿÏT»$Ä?”'wÝ,öfC%Ѳ;\kè}_)JÏÙ_c¿3õ±ÇÔê®*ø·ëÌÙ³-Öëq ™TÙ‡Ÿúÿç÷4ŽÙZ®’оR•Ÿ±Ÿ¯Æó×ñÇóXéÅ_])Y¶B¶Ù©Kýÿëââ*úéJDUò”¤E_)JDUò”¤E_)JDUò”¤E_)JDUò¼! ¶güì§îŸûfεóø¿QIE_)Y³í»/nûq]³‰mW8«å½ ÿûq½{üÛœ¤s»lÝö>ÁJb¯¿%Ù÷ßçoŽ9_çC¬zÖÏw€vM…ý‘òP¢Ðã:B”v(öå„í]îN,0¢‘Éxc)=.û!Üoëß»õgº©&ñ¥£~5¯ñY²1kSd䤣÷[ã'ïsìäñ@5ª¯é†€Ÿrƒ @jQe’ŸYiï¿@m‚Lû¡;%÷›ßt I3RP öÌü¯ñ|˜– /ô’ßòÓ˜%K¾hPM (7òJý)Y0±©ÌJ/ !ŽÃ0cü…ñ™WÑC@R„4¤”YhÈl7rƒz„}Ë(®‡OìWuûÁo¿ß0xQÿð÷µ«àŠ/†}3† ¶I[l^é<†Æ”Xcî„mº;q¿#y”T“ NAðg Hi+b‰›7¤”‡åí†mƒ‘’ŸÐ»žPae–ŽRKAiG%†bè(¤2@Ào)Ü3¤”VJ†tï‘õG ADÄ”’’ÆyNXfìÜi( –œž7?(¾ŒºÇå‰79ܬàS€ï•¸N&·O)?ò²q\–ƒF€”¼_d#£d”û{ãa™$ÎR:†¡ÊFd1â™Ã~Øhω#w+lÿ_U(”MÀWrÆn‰¨d 3p”ˆO‚rI¡f”É{•ƒ xoÜ´þJ½ÒŸÊ/Ie  |Å#H3íkûeqx:U@W) H ?ÅníŸd£~^/$”–èNGèm–Ýï`M |Xk?Ť†ŽPÔ€Û!9§Ò7)’^ß'ü37Í|ÙSÝÙ èWßï» ¼œùºß73å.õ€!+†ä“8i] A/ ¾Œ3#¥;¥º?„§?Ùÿúô·c8•)gŠ¢¯¼ñcIˆ%8aKÌ4jþÑøovq…ñÓÙC>×Ïo±€`’bQE§ýùa¿n¿@ÄüÒR $ C’‘ûëã–…è«å+;™·^?²fsÆñÕw¡E_fï·ûçÇv|+·ø+ýWXùö|ÿ±¿f~Ÿ8š¹E_)J÷t¶ùótãûwØÜÏñýÎú"¯¢¿%³­mº¿Ûý»vvYËÃê)WÊR“оÏWsþ3å±çÔë¦Ùm¶Û6Ù[lfÕt”Uö}’¯·^ëZ÷}úðººRqWÊR‘|¥)WÊR‘|¥)WØ·ÊÌÝû­ÔÊa/ÝUt¤E_cçÙóýþÆý™û |âjéHоV:þZ¶çv[šw9xüiõuéHÄ~Ý"‘ŸÿÕ°àþÛþÒŠ¿Ò“@®ø´6Ì‹@Ôä'¥ºPØ´tfû¥hèÿ¡—z€Â¾(0˜L@jI¥ŒZ@¿Gû£'³ èûlÆ7ï¿kûF# ”Ù ¼MÁ›ô¥Æ!(ûmÐÅâ‰M“õÁIL€ ‚k~.„ä}Ÿq¹;¿û¤„§!?çÞH¿Ö1Ò¯ö i ®z@Èah/àÂQaŽR cwFIxÇߣ†±Hù“®˜ J(„„tPj îC!n7¥9¡®Vø7b^)Ò–F_C\Á¡ :!rƒCCKNàYÊ %ò^FÈÉ@jZs–€Ôó“¸C[À¢8ᤱ„ÃÿÅ–Ûð9E!(äˆK–œZ¶ÚãëýBâ¿`ªªþ±0 , r‹á¨-9S|Q)JÈA•ÿÈühhÄ¥òw¹$0Þ„§òÃITnó–G(²·Ü”˜µ%eö4€0‚ÊØ±˜n ÉäÔòÃxFéKAh%¡=·ÉK'åP†MIhGÝ)ÄÔ%8„XfIi†äy1²7'ä¥öÜoÃ5–RLQ¹B–8€:uy$ÞS†$a5º”‹,¶Û|ŒQHB ÿôí“úvå!w2t’º –€/ËØ–Pç¹ImŽNt?@Í™îéy8·€`¤ŠÁ)rŸ†çá…àžPb”t3þáQ &“ pl[ò“ÊJ@SÓ’Ñú°Õbû·OiÔ¯ø±b=ÉÆÊ¯óÙ8„Á?#¥?ÿ‰OöÙ.7b–ú NÎ×{ð€–À`®—AIƒÒ[º1DÞVùÂKå¥.ÉCl6ùªRJ&%(å29iO@FÙ)ùH ~øajuÿ–«èÀT` I¤Ô£|Y0˜3—’Ê)8—ÕË’“‹CbÙÙû!òn¬8y†€³ÓWð€@LNÈ ÌãR5ô¶-=;¥;—ƒY ܤvΔ¥ßÞj Ýó>è |ΦÜÆw½ A„Ô2 ¸3ýÑ’VÙÊ%#d÷NJ~AIÎß9êÚð—jYÀ m5}ê)­³ð>ž?¶_â¶µE)vSWÊR“оR”ˆ«ìÿfßìý°¾ß¶­øNêmZÙ³s•Ýl¥*®’оR•›0óÿ_üþ擱Û+N*úéJDUò”¬ÎÙöÝ—·}¸®ÙĶˆ«ë¬Û#m¶ÛfÛ+mŒÚ®‘|¥)WÊÅ¿^fÍ™n·[ˆlÊ«¤E_+6ÙþÛ?~/¶ÏÇ«l#Q×ós²ÔÜõê5LµUÊ*ùJRqWÊϲwßo¾oº÷ÜϪéWÊÏ·oöíß íóáÊÿó¡°FulxÞ¥âO?©küyõŠ¿Ò'4Ô†”Ÿäd”Ò—JKÅ|r7ßäÖßµÞà!(“É`0žŒŒL(4¢·ûöß>ç#'©‡Uጜ;çnÛô¾|ûço̽€Á¥ -<„Z~,4j>Ý;äј33£þù,÷×άë0xq>º¿¤R Ø4féÄ ÝÀÂ,-?•¶Ý`,ü—þFA¯|uÓ (ÄÄ€ßô0„ñ¹±a¹(ü7é-¼ûü’ÓÖeƒ–Z@©hû¡ÊA]‹G, òÜ¥Qd¤#¥9E'•¿MB¨°4´¶å -(û“F d!%æÈ ߌ(oOìî× Ô/©ßfZª¿¦¿€bYA˜g,5‚òK(¶ü†Û”0¼è+”¶~¨’aA¡„1¥þÔ¯’÷Å«ÀÎRv$än‘… fëþÎÿ•˜ tþLJ1lÊ!~ S†d9+ºzÃ¥þfmhå e’ü˜€Ìé&†¤1ö, '¸fhÌ¿ŸfçÐ1±=Lx½â¯ÈZv-’Ê+t­#y@gź ’ÄÔ§ü3üRy#iÐQ5 Ie 5¤¤¼ðˆ|šZÆô?RÊ~èÌ‚ß"߀2Ýñ4¤§üYEòKáŽ_ò~/rËéœQ{¿H¶Ê!æ&nSb’3†rù3„òVIhßäC!Ƥfã|ÁcŽY‡ _攕ƒ›†–’SRKBx@Ü„tÿÀ²T_ܱ¨ý—zÀ`+Ãwù<²Z á©Ä×ÈFœåôü„¡¾BP‡,5ó ×A…“CÂK- 6JI˜ rŠb¿%î‚ÑÒœ’‘ |sgé¾kŠFFCnÝײÒî7í¶~—Û-wJXñN¡b€eM_ GC¸Ïÿßô cñ›?_s”µfÆTg7l¾wu:ŒÆŒãêézöu|¥)TUò³ö~ÊߟØÂ;eúºDUöo“·ß}óï—¾æïWJDUò”¤E_)JDUò³ý›³öÂû~Øz·â5]"*ûÂ{²›åüûå~ÍÜ~[7[}QJJ*ùY»™òùìg=_ž~5«¬ÎÙöÝ—·}¸®ÙĶˆ«ë¬ønûºó+ýþo„åÕÒqWÊR‘|¥)WØËÝùÝJnrÎu¶ZêéHоR”ˆ«ìîgÙxüêu›Œ;™ÇÕÒ‘|¯èÌ–é?íÙ{ïöØýΨ¤¢¯ô(јQy.”}¹|šž^ã1%$¿Ñ•³ý¶V{ Òa5%»d šœÊ(™˜``Â[!?b[£§PÞÃ7]òêÎæm×ì§YœÃ±¼uÊîÕUþì´äÑŽZ”`‚Qx`iE†# ±½Òá£wéùHäzòèf(‡ÐxnýXhn ÈlK (”KOßrQjHÅ|–¾8Öåæÿ»lÛo»æ[37ÿŸêùy›¾eº™n%ó.Éò°uØÀ 0ä²€-/’þd#$!(tòXº[•‚[£ü1þ×–8& BC6Ù%†tt%)FB? VÙ„¥ðÇ%œÚñˆ+#!Ht fù ¶Säe¶VS™¬’%ðbÿh«ìÛ![l¿Ô¥þÿ‡õñuu™Íû¯™N£y‡óxê»Ð¢¯”¥'|¥gvíöì¯óíÅçÎ!õ\E_gÎÇ«¹ÿòØóÎêuÓçcÕÜÿŒùlyçu:êë;©¾=jwÍÎ^e²Ö©E_{-{ó»);¬0êºRqWÊR‘|¥)WÊR‘|¥)WÊR‘}Ÿ8ó÷Wøîæñß+Ñ—»óº”Üåœê1lµÕÒQWÊR“оR×÷Od¡ùoß û·Cæ©·5VIE_+7É^û¯å-{·ÁÝ\]]'|¥)WÊR³:ßcÔ·|Øõf[©jˆ«ë¥+>ÉWÛ¯u­{¾áÝx\E_]gs6ëÇöS¬ÎaØÞ:®‘|¥gu7Ç­Nù¹Ë̶ZÕWWÊZÉo·FåîŽÑÐÜæÛôâK«œ?ë$¢¯”¥fÙm¶Û6Ù[lfÓŠ¾ºÎêoZós—™lµª®‘|¬eîµoì¶0îr¹øÃêéWÊR‘|¬eîüî¥79g:Œ[-tÛgûlýø¾Û?­°W(«å)IÅ_gÙ;ï·ß7Ý{îgÕt¤E_)YþFÿý¶ÏÿVÛý\E_)JDUò•›Ûç^uï¸~íðŽº¸Š¾V}“¾û}ó}×¾æ}WHоR”ˆ«ìÝÝ_7µeæáËnút;?|íÆq ÊQ?¬Ö¨¤¢¯”¥'}Ÿ³¾Ç~gëcŽ?©ÕOÛ·íŽÌüV°_Ú®³ö3õã˜Þzþ8þk(«ë¥)8«å)YÝM±ë[6nr»­”¥DUõÒ”ˆ«åc¯e¯~we1§cÕæWHоR”ˆ«å)HоV2ÿZöÇöS˜v=|þiÕuÔßµ;æç/2ÙkT¢¯®³ößíûc³?Ÿìö«¤â¯³wÛýóã»>Ûüþ«¬Û#m¶ÛfÛ+mŒÚŸdï¾ß|ßu﹟J*úë7w=]ŽøÍÔçž~Sª®“оVlÎzûŸù›)Î8ì§]]fù+ßuü¥¯vø;«‹”Uóì÷Ûï›î½÷3êºÍ¶¶Ïß‹í³ñêÛÕq|¥)8«å)HоR”ˆ«å)YÝMñëS¾nró-–µDUõÒ”ˆ«å)HоVwnÛ~Êß¶ü_nÂ[ÕÒ"¯³¹Ÿeãó©Ön0îg:SÃÿÛgÛñìÿ;gý–ÛµE%|¥)8«å)HоR¼fù’·^Ãß¶S¬lŸ;/æâ–®®ø=MßJ*úë6¶Î¬Ëÿðÿßñ=t[õælÙ–ëu¸†Ìª¸Š¾V-òó7|Ëu2ÜKæ]]'}›îû}Û·Ûvã•÷êë;™·^?²fsÆñÔηØõ-ß6=Y–êZ¥}u›¸óþ^øîÆ“¹ß/UÒqWÊR‘}ù'd¶OÎ3w9Ÿoöÿ-±ú¢•™Öû¥»æÇ«2ÝKT¢¯®”¬ÎÙöÝ—·}¸®ÙĶœUõÖ:þnvZ›ž£ÝF©–ªºDUò”¤E_)JDUò”¤E_gÃwÝ×™_îó|'.®”ˆ«å)HоR”ˆ«å)HоR”ˆ«å+>ÏŸïö7ìÏØSçWWÊVm‘¶Ûm³m•¶ÆmO—óqKWW|¦ï¥}t¥'|¥)WÊR‘|¥fî竱ߺœóÏÊuUÄUög[üz”Í›¾ëu©Sñˆãgl¾£Û6ýŸþÊ_VQIE_+?f=}ŽüÏÖÇSªŽ¿–­¹Ý–æÎ^?}\E_fv϶콻íÅvÎ%µ])8«å)^¢‘úÛ?éãûeþ+aJ*ú)JN*ùJR"¯”¥"*ùJR"¯”¥" Èz¿óý)HоR•޽›Ö¦Ç(÷YŠe."¯®•Ÿ³+÷â”®¾ü9OßÕÄUò”¤E_+ÐŽŒ´ôœ¾0vÀ{l³ÄñÒo»í÷nÜWmÛŽWÜG«”Uò•éÝ9·e£šgÝ•÷Yǰýòª"*ùJRqWÊÏÙ•ûñJW_~§ïêéWÊÇ^ÍÎëSc”{¬Å2—WHоR”ˆ«å)HоR”ˆ«å)HоR”ˆ«å)HоR±³þÙþÛó~ÎÙÅ?a5q|¥)WÊR‘|¥)WÊR‘|¥)WÊR‘|¥zP„³ã¾øÏ¾òÅqûýÕê%}›Ûç^uï¸~íðŽººRqWÊR‘|¥gù ÿeìµ/öØ?« «ˆ«å)HоR•ÔÛµ³fç+ºÙJTE_])HоR”ˆ«å)HоR”ˆ«å)Y³?õÿÏîi;²´E_]+{­[ãû-Œ;œ®~0ú¸Š¾Í›mÿíìü_m°VÚ®”ˆ«å)XËýkÛÙNaØõóù§DUõÒ”ˆ«å)HоR”ˆ«ìÜnß:ó¯}Ã÷o„uÕÒ‘|¥)WÊR³fÛûcû?Ûl¶ˆ«ë¥c¯æçe©¹ê=Ôj™j«ˆ«å)HоR”ˆ«ìuüµmÎì·4îrñøÓêéHоR”ˆ«å)HоR”ˆ«å+>ÉWÛ¯u­{¾áÝx]\E_+7}¿ß>;³á]¿Á_êºDUö|ì¿›ŠZº»àõ7}WJDUö}“¾û}ó}×¾æ}WY³úùìo9[v5«”Uö-òó7|Ëu2ÜKæ]]fù;}÷ß>ù{înõq|¥)8«åfãvù×{î»|#®›¹Ÿ/žÆsÕùçãXú¹E_)JN*ùJR"¯”¥"*ùYœÝ²ùÝÔê3~3«¤E_c¯e¯~we1§cÕæWJDUò•ŸgÏ÷ûögì)󉫈«å)HоR”ˆ«ìuìÜîµ69GºÌS)tÛ#m¶ÛfÛ+mŒÚ®’оV}“¾û}ó}×¾æ}WIÅ_gu6Ç­lÙ¹Êî¶R•WJDUönãÏù{ã»Nç|½MÜyÿ/|wcIÜï—ªé(«å)kÉï‘Ñ÷ÿå£qÙ?g4ìv[>ˆ«èÙ¶ßþØþÏÅöÛmªë>¾î¼Êÿpï›á9uè,où“—Ûô}¸ÆßŠÏÛ;~ßçË”Uù)JU|¥)WÊÍ÷}¾íÛŠí»qÊûˆõuå$–„%ºnÉÍóã¾3ãe}›¸óþ^øîÆ“¹ß/Sç7åã˜Îr÷<îkWWÊV~ÌzûùŸ­Ž8þ§U\⯔¥"*ùJR"¯”¥"*ùJR"¯”¥"*ùJV-úó6lËuºÜCfTE^è9Ûî–ÿ~íÛf?ì%:ê)IE_)YöNûí÷Í÷^û™õ\⯔¥"*ùJR"¯¼'¸^o»ÿ³~ï›:òKßzŠRQWÊÌæý×Î̧Q¼Ãù¼u]'|¬uüµmÎì·4îrñøÓêëÓŸ>Ûüý¥·Ç·øö}º¼¢¯‹íÖ†ýA ËË=\“›îs›­€XVå—¾Ü$°Þ„6îÇ# öÌ¥ °þÛý¿lvgâ³ý‚þ׺Ø Còa43ÉEôŒgOÃ>N-³gO݃vù;6þçØq➪¿Í”¯22QÐèýÆ¡K¾ÄµÆ'2;­Úô¤ P‘4¾_J g=ƒ:Ii)8–ŒŒŽ”2A!Zít†¡;¤¤î„ŽžRË%14¢hì„îYhÎŒÛd«"…d0c#ÈO!}€§ H`ÇHNB\´?èÅ)#P5Â~¼þ‡sÌsÉÀ?ª¯ 7,5)N,Ï‹Nûa¨å!A¼²øa/a¼ Ù%)FOt\@„ä­Û#díÒéÙòP1 ùe¬#^B²]Úõ(Р†7„¹lŒ„ìKÁˆJ0ÝV Û¡~œÏŸæ³“ BI¥ãŠå”Ýà +ò “‹HGÿr²6=‡S:€ˆiÕÿ'Éß#¬$à„Žuæt–£ê/µ‰¥1Yþؤ¤¢…#vÝ$ÎCIIuòùa¨J1Cví’÷ÈX×WÊß>N}ñ®ŒÝÝп³;=ê|6"QWä¥)vSWÊÎêmZÙ³s•Ýl¥*›0óÿ_üþ擱Û+UÊ*ùY¶ÏöÙûñ}¶~=[a®³ößíûc³?Ÿìöˆ«ë¥)8«å)_““û/cwß>ÿ|®ï¾[â,¢¯¢½].s©f6™nof“öcרïÌýlqÇõ:ªâ*ùJRqWÊÌíŸïÙfßŠÏØCú:þZ¶çv[šw9xüiõrоV|7}Ýy•þáß7Ârêë?íŸí¿7ìíœSöW×JRqWØËÝjßÙlaÜåsñ‡ÕÒ±o•™»÷[©”Â_º¥}t¬eîüî¥79g:Œ[-usоR”ˆ«å+Æ„ŒÌ¬ýkÏÔ¦;·[㨔Uò”¬[åfnýÖêe0—î©Å_]+?ÏŸmþ7níØ[v_–ÉC''eì1¿Ý{¿âŸ­LUý"hhì‚’ƒ‚ÒØ'¶ÜbI.†ß—ízPT”4„Ãz[ &ô ®PÌKûò›ý²R„•îÅ^!·ÿçGtoÙ¿Ø%Ÿååü£Ÿ·Þû 1“qDÑ™%ätâÓ“º² ]„ŒÅòV(á…öøeæã8çêuÕøPP‰…†ð2’MBƒ¥)B Å”oö~PÌŸóçW²dëÐV(›¶FHa1 J‘… •ÊÉ å'¶Z_$ïýô"a†!N ²y§~Ýt‚W,§ûd’I쑈û^xš€Â¿ÊGÅ•‘û‚÷ -Ë!}ºCxÂÒã>Ý>òÉ<æZ–,A:º¿‚Qd.Lq¡„Ì‘£F±E|åâR3öéãQƒJÙ.€"~R2@tW%'¤¼Œ€ÒÀ®Ø¤tþÁ¹Ó¸gÜjOÉÖÂRy1?ÂðO,!%îZP3ô’÷IaŒ‚Èã.ËûnÜiA©ÊîL+ߤ4jBPJ ûì”%#2­¾î{¾ߘÏÈò«ëÄÔqa¹h ) †!âËü””äîKNnÿ¥ìé{¤J!†’hhFNÃJ%•†¹/ Ha!\7ä¥)CcÕ` N&†7:J@/$4iE$›Ð’ÀÈÔ££ ´d#”Z~3>jÎŽþ_û BYx à/‹Í‰»rRy/¥ /dfIjþ1ìs“ò•–NV_ó$7§7Ã;u£¬r“þìÉ[):É}|âjMWJ@(èù%0ÞÛ#,¾°,1ÆmžJúù&ù;}÷ß>ù{în÷°œpþί®•û§ÿº^ïºûîÛ~¦ÎÛú‹¦š¾Æ_ïÎÊScÖs¬Õ²•Læý×Î̧Q¼Ãù¼u6ÈVÛ/õ)¿áý|]\E_gs6ëÇöS¬ÎaØÞ:›6ÛÿÛÙø¾Û`­µ]"*ùJÆ_ë^ØþÊsǯŸÍ:®qWÊR‘|¬[õælÙ–ëu¸†ÌªºDUò”¤E_)JÍ÷}¾íÛŠí»qÊûˆñ}t¥"*ùJR"¯”¬Î·øõ)›6=}ÖëRªâ*ùYó²þn)jêïƒÔÝõ{7;­MŽQî³Ê]\¢¯”¥'|¥+;™·^?²fsÆñÑ|ÝÇŸò÷Çv4Îùz®Ö0géFΞ‡_Û²œï…?m¿mY‹ã9eâVgù# ïÒœ”¡™¸£}§Wî €Rƒó£—“†#g߆âYY(+»ïÿÝÙ½õ¤ 2PÄ4¡.Èß0&13!ƒq-?ì‘¥n–Êèµò?Æt!{m›ûîo/¡=öG?¯ý’~÷Ûvƒ …rjYHß”’ƒ_£°JzF—’P$q‰ßëÈCšqâÈÊ#WWñy5 ­,CãK@Ü4¢ÐWíÒ_&§r²2~ã b†öût× Erƒ &ðÔ šQ0 „â’¤â‰(N^é+!$Þê$¯µí¾É%$¤nL/—÷J ؤä”ḗaHNÿÒK) ¾ª !¤ ÄñŽ’M bj2zŽØ5(Èݶ%t¯~²‘y‹sØå¡]_Á)Ô|t†:::I]JFÄÍ”å#òºKpϲÛkÍ šÜ4†Xj1þÁˆ-ßt HÂøgBKbÔ3 —ößÞˆ0†Z &'0&''ïÊã6/’ñD°ÔS ñX§)bÓÚ¼Q!¡¨èYHÝùLñ4”éG Ü•’–Ù o“º#Ô‘Œ¥“û?±ÑWðC ¡¤Ü¹h ៗ²2Rœ–N+¡8¢aEt%¾7rþ»ê€Òü†®ÀSp¹h,h!‚ä’ÑËb‰§ ÿ½á c#¡%wü¢Óú ›$¶ß§b¿^Nø;üÕWí²xg/ÉmŠ%÷ÊÙß%ûä·Ûnÿzg¥³÷Py¦ÑWý\0´•œ¿÷ÖAH,fJ ûŒÂPR:Qòp-eîèÅv¾f ÝЩ+%.å#da£KÿäËt²\opŽèÝõé GÛ“ åRÒ²xÒ`b¿è,¼_ÈèOåw))JrzÕyp‚‰ˆÍöê~‡Û #¤%(PGOá Ýš”žs`ñ 4Š¿ÏR•Ÿ ßw^e¸wÍðœ»Ú³«ë¥)WÊR‘|¥)WÊR³9»eó»©Ôf0ügW×Yo±ê[¾lz³-ÔµUÒ"¯”¥"*ùJR"¯”¥cçÙóýþÆý™û |âb*ù³úùìo9[v5«¬eîµoì¶0îr¹øÃêå|¬uüµmÎì·4îrñøÓèëÙ¹Ýjlru˜¦Rêâ*ùJRqWÊϲUöëÝk^ï¸w^WY³í»/nûq]³‰m(«ë¬ùÇŸº¿Çw0ŸŽù^®±óìùþÿc~Ìý…>q1{„ô,#ü±Û±Ÿæìcàëyð0­›pä% Ìý\´fùðJP³Õ`C¯wWíøÅîµ1™Æ/n£O½¸ÒJ%”Û ¿’Ù;䓹,7ô²?ÍÒ3bƒöXË›3êªø°Ô•ÍЄ”LØ·éÛ`ÎQetdtm™ Ü'/{êÀW•ËÝ))’YLŒ_!îÉÙ)A 7ò‰c6Q{J輫a,¢`7GG%þù¹}“„çNPÖß²>AI)!<ûÑBXhÄ%%â`oèRr2RQH`¾üÆt¤ÍÓ|æ_Qìïó0W0‰íjþG&$†Z !lJãX0 ô•Ï/d¥+âXÆØ¾pÌ7æÐ©¸š5ÿ•‚³á¨é,4¿º_’€'NJZ_ôYÀ œcÁ…§$gBzKèé+: ~”r°k|ù;÷lÞñ¨‚zJInYiGßC3§§# CRŽRrÒœ”bÂi±ÿaºƒÅžæf_È&bÃR_BCC2¥–1d0ý²F³ÿ¾OS5áÃ11[¯‰HGùáˆl³¥Ó¿ ì¯w@tWÅ”Yeq©&úF|œ–K ´°ß™¶Åô°Ì4'ïï„b‘‘ŽÇ+fÆm¶Ù¶V¯¢OýÈ.·öU}ŸnßíÛ¾ÛçÕþêëËHÄ%*Vü'ŒÊÆöí‡öízUþüeô¤1þÅl”§–’ÐŒ—ìRRŽLÃ>múF ¶ùþdÞhHZC9- XfB7FFÈ$m“ÉHöc2¶¾•òY/He0Ġ׾’4 Ð3ñ5%~Ÿ¯©)ßß*&0aD­†l”§dvg/§ed(‡2—¯/ˆYÆk«ù4¥gÎÇ«¹ÿòØóÎêuÞ­}t¬ù÷ÛüøüÏ…çßïªâ*ùJR"¯”¥"*ùJR"¯”¥"*ùJÏÙ_c¿3õ±ÇÔ꫈«åc/u«|e±‡s•ÏÆWXÙ÷lû}¹»v|âÛ8‰E_]gu6Ç­lÙ¹Êî¶R•WIÅ_+?f=}ŽüÏÖÇSª®‘|¥fï·ûçÇv|+·ø+ýWWÙû1ëìwæ~¶8ãúUt¤E_)JDUò±o×™³f[­Öâ2¨·ËÌÝó-ÔËq/™urŠ¿Y fÛñ©îý=ŸtŽæ«oöÙXÍ}(P?BMÛléA“KÛ–†J_Ó¶I_ôu2:ZùUÖ !dô¥”Ñ‘ƒvÉûoþÌ—ÌýxÑç\»ÄMU_ö¼1a¨àP¾M+É\ Þ” Ù³'•‰\™P CY(1jÜ0šBAdÁŸvAa¤Þţ؅ƒ0hk!þGn[e—¾ÿ\Òh&üBÈÈ+¥ 7@ÐÀ.’H+æGè) £7lݳ"Ô¬4¯É¤Òc§'Ž’_OOÅ'$¿ò]¤3 ¡¬Ÿö¼ªëP¡FþO}kWðJ?!¡ö,­ƒFîWÅrТøae—Ó‹ýbbM,uÌ(0¢¶Ý‚„ºJHGH`HféüjF¯’[ý¾]``nHgFå£ •²8Ö! %  #¥ÐÍð ’1˜”×5‹ ,¾„ran4®¤r²:yhr‹K·5(ø¤fß®ÎØX{ŸÇi»®š¿Ï …4jK ÉÛ|_ßêm‚_¹‡lÛms~v=]ÏøÏ–ÇžwS®ì”Cò‹ JwÉÏŠ—†•’QãÒùß5‡†£|¾ýÛ3ÿ²r!óî³·~ÍïX(Û:¿:R„Û7ÿó¶Ìæñã¯v䣉¥‹Ágòú~A)!™?oЖ䯿C/uP†‰ ' ù%£îŽ5BJÿú å ¤ãðÁ¼ ¡þSÞ°˜B!–„Œ&LNSþVHfÈ€À245 OÁ<¼Ì„ NÛ{ƒa$p¼:êþJu‰¥”K+“1Mƒ‘МY}й1%¤”4½Ý ÌÃß+ØfÛ:³/ÿÃÿÄõÛŠ&b‹--Ý?/–”¾Ïò’¤múYS\Û¯õ¦¯”¥.ºjùJV2ÿ~vR›³f­”¨Š¾ºR‘|¥)WÊR³;gûö_Ù·â³öþ"¯®±óüùößãvîÝ…·atˆ«åfsvËçwS¨ÌaøÎ>›dm¶ÛlÛem±›UÊ*ùJVo’½÷_ÊZ÷oƒº¸¹Å_])HоV-òó7|Ëu2ÜKæ]]"*ùJR"¯•Œ½Ö­ñý–ÆÎW?}]"*ùJV~̯ߊRºûðå?W×JR"¯”¥"*þiCJNãR¤« ~ûáØ®®Û¾;ñ÷ÒR Òhjvî5¹%‘wÈá¥w% ߣôt¸Ü‹åÌû/N³q‡s8ú»“vjªÿ»Ø‡ƒyh(a@: à`”bJ)Â8jKÅü—ä¾ÿ#»£÷ÚéË,0šü5%†—Æ!Ð’oèJ](ᡟ£d†lIgBo„ò>-¥( ß%?å»·ýóîÍ»fVÕ…ŒZlRT1_|Ë}ó€ðcôd#lÇ^xÓ¹ª ÕWý±ÐD†dä N@ÌÿKð̓Žœ‚Vd'úxb[¥W™@ii/† JS÷ù¤¯Û£§LJI=8¾ù R¬üg¾\€ÂŠî°B¥aˆvÛ™ùÕyÉJvn–ql§c”çý¶3[uáCåWý˜ù#RpÞ”~^ÅnÃQÛd—Єp3óâÓ–Ûö}ïž¡+6ߟûmŸþ¿ÛlÿþªŠ]½4Õöm­¶_êRÿÃúøººVlÛoÿlgâûm‚¶Öò«ë¥)8«ågu6Ç­lÙ¹Êî¶R•WHоR•޽–½ùÝ”ÆV?˜tE_?È_û/e©¶ÁýX]]bß/3wÌ·S-ľeÕÊ*ùJRqWÊÏŸ}¿ÏÌø^}ð^ú®‘|¥)WÊR‘|¥)WÊR‘|¥)WÊW÷fàIó8sÙ”{™Q(«å)IÅ_)JDUò”¤E_gìÊýø¥+¯¿S÷õt¤E_fãvù×{î»|#®®³wÛýóã»>Ûüþ«”Uò”¤â¯³ö~ÊߟØÂ;eúºR"¯”¥"*ùJV}»·nøWoŸWøGˆ«çϾßçÇæ|/>ø/}WJDUúЄç»ìí¹%›üéKn¦F;¿~öJRQW߯‘ÛòNÝ€÷ËØWe™Ú¢”ˆ«å)Y³í»/nûq]³‰m8«ë¥)WÊR‘|¥)WÊR‘|¥+6ÈÛm¶Ù¶ÊÛc6ˆ«ë¥)WÊÏÙ_c¿3õ±ÇÔꫤE_)JDUò”¤E_)JDUò±—û󲔨õœë5l¥UÒ"¯”¬Ù‡Ÿúÿç÷4ŽÙZ›Ûç^uï¸~íð޹E_7É^û¯å-{·ÁÝ\]])8«å)HŠ¾Í˜yÿ¯þsIØí•ªéHоR”ˆ«ìÙ¶ßþØþÏÅöÛmªéHоR”ˆ«åc¯e¯~we1§cÕæWHоR”ˆ«å+7ÉÛï¾ù÷Ëßsw«ˆ«å)HоÍÝÏWc¾3u9矔ꫥgví·ì­ûoÅöì%¼¢¯®”¤â¯”¬ÿfßìý°¾ß¶­øWWÊR‘}‹~¬Í›ºÝn¦Ý×WJDUò”¤E_+>¾î¼Êÿpï›á9utˆ«å)HоR³w3åóØÎz¿<ükWWÊR‘|¥)WÊR‘|¥)WÊR³çcÕÜÿŒùlyçu:â*úéJDUò³wu|ÜRÕ—›‡-»êºÍÆíó¯:÷Ü?vøG\¢¯®”¤â¯³ö3õã˜Þzþ8þkWJÌíŸmÙ{wÛŠíœKiE_6ÙþÛ?~/¶ÏÇ«l#S|¾ûïŸ|½÷7zºÏÙ_c¿3õ±ÇÔꈫë¥)8«å)HоR•™Û?ß²þÍ¿Ÿ°‡ñ}t¥"*ùJR"¯”¥"*ùYøÍÿugVÿ‡lÿˆË«¤E_gs6ëÇöS¬ÎaØÞ:®”ˆ«å)YÝM±ë[6nr»­”¥DUõÖo“·ß}óï—¾æïMÝÕóqKV^n¶ïªå|¥)8«ï†5›+)oÛ³­N¶V¨¥%|¥)8«å+>ݿ۷|+·Ï‡+ü#ÕÄUò”¤E_)JDUò”¤E_xÄ-Lÿ~Êÿægù¿;eŸ•ÕQJJ*ùJRqWÊR‘|¯ ùaÌî­ÅãqêSöæÔV|æü¼sÎ^çÍc¥z¿óý+?Èßÿ¶ÙÿêÛc«ˆ«ìÿ#þÛgÿ«mþ®”ˆ«å)HŠ¾Ìæý×Î̧Q¼ì7­Ut¬ùÙ7µuwÁênúQW×JRqWØËÝùÝJnrÎu¶Zêë¿;)MYγVÊU\¢¯•‹|¬ÍߺÝL¦ýÕWIÅ_)JDUò”¤E_)Yóï·ùñùŸ ϾP½õ\E_)Y¾J÷Ý)kݾêâêâ*ùJR"¯”¬û'}öûæû¯}Ìú®"¯”¬û%_n½Öµîû‡uáuq|¥)WÊR‘|¥)WÊR‘}޽–½ùÝ”ÆV?˜u]gã7ýÕ[þ³þ#.™Û>Û²öï·Û8–ÒŠ¾ºR“оW¡³˜zR“¶Ç§þ`YþOŸ}¿ÏÌø^}ò…ïªå}™ÍÛ/ÝN£1øügRêéIÅ_)Y»?åïŽìi;òôî‘™YÔùûaíÆ?e²³Š”UôR³wu|ÜRÕ—›‡-»ê¹Å_)JDUö³oö~Ø_oÛVüF«¥"*ùYû1ëìwæ~¶8ãúTüfÿº³«öÄe×ìwÛ otï³ð†oÑÙò³„æÍLUù)JU}Ÿd«í׺ֽßpî¼.›¹Ÿ/žÆsÕùçãXúºJ*ùJRqWÊR‘|¥)WÊR‘|¥c¯æçe©¹ê=Ôj™j«ˆ«å)HоR”ˆ«å)HоR¼¶—vnãf0`KŽeލ”Uö2÷Z·Çö[w9\üaõt¤â¯”¥"*ùJR"¯•Ž¿–­¹Ý–æÎ^?}]"*û6açþ¿ùýÍ'c¶V«¬ÎnÙ|îêuÇã:—NêmZÙ³s•Ýl¥)rо‘¿ÿm³ÿÕ¶ÆÿLíŸïÙfßŠÏØCúnŠZ²ópå·}WWÊR“оVg7l¾wu:ŒÇãñK¦Ìëýø¥++6[÷õrоR”œUò”¬û'}öûæû¯}Ìú"¯®¼c3—ÿ[»º»¿gï™™¶9Uã]†7Ï÷îs>ìÛ¿ÉÍò™c¥}¬îݾݕþ}¸¼ùÄ>§ÎËù¸¥««¾SwÑ}t¥'|¥)WÊV~̯ߊRºûðå?WWÊW£ôçfݾ?vû¾ÝÝ@j¢QWÊR“оVwnßnÊÿ>Ü^|âUÖ‘¿ÿm³ÿÕ¶Æÿ(«ë¥)8«å)HоR”ˆ«å)HоR”ˆ«ìßwÛîݸ®Û·¯¸WYöíþÝ»á]¾|9_á®QWÊV}“¾û}ó}×¾æ}OÙ_c¿3õ±ÇÔꈫçã7ýÕ[þ³þ#.®•Ÿ8ó÷Wøîæñß+ÄUõÒ•›3ž¾çþfÊsŽ;)×8«ë¥)WÊVg7î¾ve:çcù½j«ˆ«å)HоR”ˆ«å)HоR¼nÉn§fÿàž¾Ùnûgê8>¢QWÊR“оR”ˆ«ïÙ.ý#Õ³nýNïße+íßö9ª)IE_éd¶Î—Ö£Bµ)Ô±U›»ž®Ç|fêsÏ?)ÕWWÊR“оR”ˆ«å+ùy›¾eº™n%ó.®"¯”¥"*û?Èßÿ¶ÙÿêÛc«¥"*ùJR"¯³çßoóãó>Ÿ|¡{êwnÛ~Êß¶ü_nÂ[ÕÒQWÊV2ÿ~vR›³f­”©Ö”sÊëÎøÍñ' ΢*ú)Y³9ëîæl§8ã²usоR”ˆ«å+?fWïÅ)]}ørŸ¿«ˆ«ìý·û~ØìÏÅgû,_Ú®•›0óÿ_üþ擱Û+J*úéJN*ùkt7ý‘˜jSÛn¦ÿ÷umŸõ3.É^œî¼Ùy²úߟò³« ¦*û8Ô£·åwWûs¹¹×¸çݹž°¼Èãý? n3·dtÍÝXõ6·úCZPžéfAýYÒ7Ü ò·‚CçøûêÄÐ*L@/'ä•ÒJå$é/ô'íÓ²JÁ‰ÿroÜg ^íóû‹€ʪÿš€ 1»tâ†éÝÉ„½ÊKt†¿Üô¤]zC‰¡¤ ÌŸ·ZqD²˜nÙ9(-™!(Ìÿ}úvÈ÷ß:R” ¢ðfn^À\¤#¹Jøš„¤¯ÐŠÄ½O‰/r@,FÁ¥†“„Ò_Ý7éßrfOYHûd†d†dá»o¿ßÞ{ øv]_ùü “ ùJùÊùÍ}þÛå'o󷹿±Ÿ¯Æó×ñÇóXëôJ@våîBå¿!îã dö„rQÉiÛ ûüùZùhê @ wÀe·!$–¸ÌŒMù’ZÛvCÜnÞìØ8Â)«ü%+7É^û¯å-{·ÁÝ\]]éÑWÊV|æü¼sÎ^çÍcªâ*ùJR"¯”¥"*ùJR"¯•޽›Ö¦Ç(÷YŠe.®‘|¥)WÙÝ»}»+üûqyóˆ}WJDUò”¬ß'o¾ûçß/}ÍÞ"¯Ž¿›–¦ç¨÷Qªeª®•Œ½Ö­ñý–ÆÎW?|¢¯®³f7õóØÞr¶8ìkWIÅ_)JDUò”¤E_)JDUò”¤E_fvÏ÷쿳oÅgì!ý;™·^?²fs±ØÞ¥Sößíûc³?Ÿì±iÙ=ÂY{æËlÏ»¾îµí•ÔµÓz-úó6lËuºÜCfUye c•ñïñ'rCìê磯Q;§' BwB²z“û¾NÛµŸÕD þ†Élµgß#ñ‰WŽÿoÙrÞuÓ€5Ä2xͰթÌ’Ò²rR4¢Ñ°ÃJμ5.»ìÙa¤Ô¤¾RúBPárºn’ܾJÊOX͹}†'Éx„_Nønà$šŒ^è&ïÐZ8΄•·Oº³ûéÀ*Ltri59<â‹ÉKoù7á„>JûºP_Ü–ÏÙï|æo›±ù Ñ@: /ä: aƒ@² J6@ϼϒ´BR¶{!dŠ éÁ c`!( Ì”!: +¡S‚X#µÒÿ¶<õ.U\„ü²Ëá‰!ƒ[rVÙ‘’Ž”éfICX§Bû¯œn7oy×¾áû·Â:ﷀĢø ß¾ål¸b2 (…Ã3ºq+¤f„z6KëÅ€˜‡ÿ ZK)²JÁ¼¾„’Ò5 IfFF›#,û§£(žºjÿJVo“·ß}óï—¾æïz”UõÒ”ˆ«å)HоR•åm‘¶@Í•²•²³7ù˜áC¥}Û¶ß²·í¿Û°–õtœUò•›lÿmŸ¿ÛgãÕ¶ªâ*ùJR"¯•îÝöF;œìzú¿S(ÅIÜϲñùÔë7Žæu®®QWÊR“Š¾Ìæí—Îî§Q˜ü~3©ut¬uìµïÎì¦4ìz±üÃ¥}t¥'|¥)WÊR³ç~êÿÜÂ~;åxоnû¾|wg»”+ýWJDUö:öZ÷çvSv=XþaÓä¿ù¾ø~1þß|ùlìï·Ï´›îû}Û·Ûvã•÷çà ÈK Ï›çÌwÏ»Œëjb¯¢õ€U8•ÑPIC AIŸ¶um‰{÷ÊÉÁ ÷º`“8ÜYIäÂÝ'|å§üŒ’a_²0Ü^ãPÛzͲ9|•‹—œ# ¥† ½ƒP5¤¡9 ,®°B6¼íÉà+«ô`Òih&×þ-›äôbfáƒZ>&—ƒCR1(蟻»l×®äÂ`)$¢’„!+ ºC &§#aœ7~5)èA(b;,—Û^%%`*9HHRz …€Ùcñ„²^ OÃÐìß¡úQ¶½X ÐCA)(B -)%pÞ3teð*Ø3²Ò®—}ýå;>æÑÊö•,„X$Âð͉c>@ E³¤ 0jÓÒR6Ù,„$fBv׎„"° J/¾å‹ý‹ÅpÇHiINå’ÑËB)vS{ë.J& 4²Ò”#”ž”PXF GO-9Û–œ^G@×WÎé׉(ø €nŸ‹(¾†/Wåὑ‰aŒ%t!Ó»d'ùþû¨œ%Wü_!‹ýg4õöp‚Fm³|oç?zömþÏÛ íûaê߈Õᜤ•¸gGC27Ce6e(åTo“·ß}óï—¾æï}%_é@BLBJId¼LNGÈ-ò6OÝý?~¡©ØpßòÛÞÑ<å¹{z: ðIã_#–Èt'¸ÜWC–Žž»æ‰Á¿o¾B\1òº6Éܶãº?uöTM ÄÐÎ^,1<´–Œ^@Äm’ŽÂ“Æl1¬„qœ¦Ø'kËÌ9Çœ:Ò¯øE.a¬ÞÉ/|óþ—WJ7ù#î1‡ÜÛÕ³«ìî¦Øõ­›79]ÖÊR—WJU|¥+6açþ¿ùýÍ'c¶Vˆ«ë¥fîêù¸¥«/7[wÕq|¥)WÊR‘|¬[õælÙ–ëu¸†ÌªºDUò¿tþHl·~µvͳæùùûå(uE%|¬îgÙxüêu›Çs:×WIÅ_)JDUò”¬ý™_¿¥u÷áÊ~þ"¯®”¯ èì×°Üâ·m×¹ìû°ï(«è¬ÎÙöÝ—·}¸®ÙĶ«¤â¯”¥"*ýi B>Ýóý»:]°ÖeüÇŸö7U¿J8ÅuíÒŽ~S°GùÅçÇzúþÎËçœkm¿ýŽÛ/ªõ 'Ù¦)%·‚“ÐÃCÊ Ù#د³÷_ØÅØmçWï é¥ÈX¼pÏÛ¡·ü®Ù(I1%$hÌ„ô§6ÈÙ+½!03Á—BJ0nA4¬œVɺKÁŽžŒ°wî7"° À‹Û#ìJ!' 44´¿A05 åŒGGÈB‘ÊrþîS{“ÊbCp£ ™)%q¡‰éËJ9lŒ“É|²ÒJIhÛ{ÇsÖZU÷“I¬^ΜžK(—ÐW/¤®3I,f+ 3¾Á©-.5ÞÈšB,43}€Á3†þérÉX¬59’Mä$u†: NÇŒGÍxä±¢ËéäĆÁˆÅôäl1<¦@iHJ FÉä´%þÏo߀塜”ŽPÀX®ü #(•Ê!d#§ô0ü ù¨|ãù¤p·'E_× ¥ð3’€ÄÊ+%E ²RPW%#€lŒ”¶J_ä7OØeórJÈIeæÛ%%„q%%ùiÄ­‰hPN”÷Ü­ÐÚú–A0„Ù¬R-ý$0_/¡9ÅñŽŒý€±ß:s¤f¾Sn†?tºF²6%fK·ÏÄ·I%vÝúÇ •_ÍÎÙöÝ—·}¸®ÙĶ«¯BF¹ß?Ûîç+º•ò_2Ψ½»:¿¤COAOŠI}ódv^^»íþÛõæá!},of&oƒ ™!…îYIé%' ²k’Š%11€¾øg¾p•f/•Мœ—¶ÊÛïÒèp/|+ëèA©ßËIA»”ZI¨äÄ¥ÃzCzF§ mŽJ:sâOkÍÎk,ó‰ÁuÕÿ2%0Þ†Éû„÷I¿ç^ÿoûgÛef²Vn7oy×¾áû·Â:èùþ|ûoñ»wnÂÛ°‹Ñ¢¯®³ç~êÿÜÂ~;åzºU}›3¯÷┬¬Ø=oßÕÒ‘|¯)¤dgû4¥<-?þê)(«ìû'}öûæû¯}Ìú®”œUò•‹|¬ÍߺÝL¦ýÕWWÙþBÿÙ{-Ký¶êÂéœÝ²ùÝÔê3Æu.®’оR•›»«æâ–¬¼Ü9mßN*úéJÇ_ËVÜîËsNç/>"¯®³ö3õã˜Þzþ8þkWHоÍÜÏ—Ïc9êüóñ¬}]fÙ Ûeþ¥/÷ü?¯‹¢ß«3fî·[©„7uÊ*úéJN*û?ÏŸmþ7níØ[vWJDUò”¬ßwÛîݸ®Û·¯¸W×zâË!æà\¡˜¦ t« nýßa­ÐŽß^z½% ¶Œ‘Ÿ'>ݾ;ç;áôeN¯úÊ8A0¢‰»äþ1x„RJÅŒB +šWÝ99[2=ç€v4˜†t–7YÌYA»ÿËÉįò¸Â¿å—ý{x J!¤¼R @jKB7);%§òÒLüfFI+!Éß}¾ù¾ëßs>«ˆ«å)YöNûí÷Í÷^û™ôE_]fù+ßuü¥¯vø;«‹«¤E_¼°Ä’“ÿÜ®øggçù}·øïö{Ô†D”M)$̀̄da…o¾Ia(NÙÙÆ' c‹t¡Þðô±ÞuÙ &€Á€0tþœ”t¡Ø®^`Ä'¿mÆâ²R„þ‡éB+ „Ð †q¨I+£!<Ù‰Håa½( $1ü3'lŽí½òÜBÀ7.µål´6ý#RÛá»ÑŸ¯~»Ð Bb Ĥ}É›ät¡ C¥{möOÅ6û£¡ºzzo;ÿ÷Åñë]_êCx†!?¡¡¬Ä!·-‹ Û•ºKJ:3t÷Oíì¡ ò²x&$bž3’Ð5/ƒ2P“ßó‘ß²¼Î058· é(4oáˆFĽ‚rwåíÿ’º7² B JIEg}²‘†%t'!±{ýøNìêšøð²~Š¿êE“xo)“ †’ÓÒ0®S‰X˜œQiJwK‘¾Co¿¼èƒC&¥%¡?$„ Á®Pnßþž1M‹KŒÛ§m»†xB+¥Ò‚’—é)!-l¡˜gWÿlýW5³îÙöûsvìùŶqŸ¶W4Ã¥Wº B ÙY Û+;eŸ¶1ê+?açì­ùýŒ'ó¶_«½*ùJVn7oy×¾áû·Â:ç|ý˜õö;ó?[qýNªºR"¯•›îû}Û·Ûvã•÷êéWÊR‘|¥)WÊVg[üz”Í›¾ëu©J«ˆ«åx̳×÷$¤üÇ-YKÙ]o—ê)(«ìùÍùxæ3œ½Ï;šÇUÒ“Š¾R”ˆ«å)HоÍßo÷ÏŽìøWoò…ªéHоR”ˆ«å+{-{ó»);¬0긊¾Vm³ý¶~ü_mŸVØF¦Ì<ÿ×ÿ?¹¤ìvÊÕrоžVfïÝn¦S ~ê’§Ißõfß-·wêR÷ÏðåTR"¯”¥'|¥)WÊR‘|¥+3›¶_;ºFcñøÎ¥ÄUõÒ±—ºÕ¾?²ØÃ¹Êçã¦v϶콻íÅvÎ%´¢¯®³ö3õã˜Þzþ8þkLæý×Î̧Q¼ì7­Uq|¬Ù¶ßþØþÏÅöÛ,VÚ®“оR”ˆ«å)HŠ¾Ïœyû«üws øï•éöNûí÷Í÷^û™õ7w=]ŽøÍÔçž~Sª®QWÊVm³ý¶~ü_mŸVØF«œUò”¤E_)Y³í»/nûq]³‰mWWÊR‘|¬|û>¿Øß³?aOœM]"*û6g_ïÅ)YY°zß¿£¯e¯~we1§cÕæWIE_)JN*ùJVwnÛ~Êß¶ü_nÂ[ÄUõÒ³;gÛv^Ýöâ»gÚŸ9¿/Æs—¹çsXéE_>qçî¯ñÝÌ'ã¾W«¥'|¥)WÊͲ6Ûm¶m²¶ØÍªéWÊR‘}ŸäoÿÛlÿõm±¿ÕÒ±óüùößãvîÝ…·aоºR“оR”ˆ«å)HоR±óìùþÿc~Ìý…>q5q}îœá½³u·gýÛfZ·êÊZ¤Î·Øõ-ß6=Y–êZ—WIE_)XëÙ¹Ýjlru˜¦Rêç|¬eþüì¥6=g:Í[)Utˆ«å+¿;)MYγVÊU\E_)JDUò”¤E_)JDUò”¬ønûºó+ýþo„åÄUõÒ”ˆ«å)HоR”ˆ«å)YoñêS6lzû­Ö¥*"¯Ÿ°óöVüþÆùÛ/Ñ—»óº”Üåœê1lµÓwËߨÒw;åê¹E_)JN*ùJV2÷Z·Çö[w9\üañ}u޽›Ö¦Ç(÷YŠe.‹|¼Íß2ÝL·ù—W(«å)IÅ_)JDUò”¬Î·Øõ-ß6=Y–êZ—W×JR"¯”¥"*ùJVg7î¾ve:çcù½jˆ«ë¥fÌ篹ÿ™²œãŽÊuÕÄUò”¤E_+-[s»-Í;œ¼~4úºDUò”¤E_)JDUò”¤E_)JDUöl3mY—ÿáÿ¿âzéœßºùÙ”ê7æõª®±×²×¿;²˜Ó±êÇó”UõÒ³öcרïÌýlqÇõ:ªç|¥)WٜߺùÙ”ê7æõª®”ˆ«å)Y¶B¶Ù©Kýÿëââ*úé^žŸ iï¹ÜçWÿ¶_ÙnõоR”œUò”¤E_)Jôüè gêÊ WRó‹Su”UôVlοߊR²³`õ¿WIÅ_fu¾Ç©nù±êÌ·RÔººR"¯”¥"*ùJR"¯”¥"*ùJR"Hz¿óý)HоVwS|zÔ¼Ëe­J«¤E_fÌoëç±¼ålqØÖ>› ÛgVeÿøïøžº2ÿ~vR›³f­”ª¹E_)JÏ—óqKWW|¦ï§}t¥"*ùJVg[ìz–Ëu-Kˆ«çví·ì­ûoÅöì%½]gÎÇ«¹ÿòØóÎêuÕÊ*ùYœßºùÙ”ê7æõª®“оVnŠZ²ópå·}WHоR”ˆ«å)HоVg[ìz–Ëu-K«¤E_)JDUò”¤E_)JDUò”¤E_)JDUö‘¿ÿm³ÿÕ¶ÆÿWJDUò”¤E_gìÊýø¥+¯¿S÷ôîݶý•¿mø¾Ý„·«¤¢¯”¥'|¥+3­þ=JfÍ_uºÔ¥DUñ³þÙþÛó~ÎÙÅ?a5t¤E_)JDUò”¤E_)JDUò”¤E_+­{cû)Ì;¾4êºDUò•ÿ§}²_í²óîßü¦ìßê‰E_)JN*ùJϲUöëÝk^ï¸w^OömþÏÛ íûaê߈Ҋ¾ºR“оWíòR;·q¿¬ï›«fØî¿ú‡Éó?uŽîa?ò½\¢¯³ç~êÿÜÂ~;åzºRqWÊÏWsþ3å±çÔ뫤E_)JDUò”¤E_)JDUò•ŸìÛýŸ¶ÛöÃÕ¿ªâ*ùY¶FÛm¶Í¶VÛµ]"*ùJR"¯”¥"*ùJVnŠZ²ópå·}W×JR"¯”¥"*ùY»?åïŽìi;òôéHÌíúÑ›gëû8ŒïÇmäηØõ-ß6=Y–êZ—(«ë¥+¿;)MYγVÊT⯮”¬Ù‡Ÿúÿç÷4ŽÙZ"¯™Û>Û²öï·Û8–Õu™Öû¥»æÇ«2ÝKRêå|¥xÌ4iÝ›«-oŸ³©l¶_¨ˆ«åfsvËçwS¨Ì~?ÔººN*û{­[ãû-Œ;œ®~0ùöû¶9þŸûþíÔ¾nfÛf¨¯Êÿ?ü÷øÏûmöÛ±ÃÙœúb¯¢³wËߨÒw;åêºU|¥)WÙó²þn)jêïƒÔÝõ])WÙ³?õÿÏîi;²µ]+ËÃPœÙ/¾’GQÝ]\ÕqоŠR“оV2ÿZöÇöS˜v=|þiÕtˆ«ìîgÙxüêu›Çs:×WJDUò³q»|ëν÷ݾ×WHоÍÝÏWc¾3u9矔ꫬùÙ7µuwÁênú®QWÊR“Š¾Í²6Ûm¶m²¶ØÍªéHоVwS|zÔ¼Ëe­J«¬Î·Øõ-ß6=Y–êZ—(«ë¥gùÿöÛ?ý[loôýŒýxæ7ž¿Ž?šÇDUñ³þÙþÛó~ÎÙÅ?a4ÝÇŸò÷Çv4Îùz®¼±ƒ>K7ù,Üj™jîìÆÄUôV}“¾û}ó}×¾æ}MÝÏWc¾3u9矔꫈«å)IÅ_fͶÿöÇö~/¶Ùb¶Õt¤E_)JDUò³q»|ëν÷ݾ×F^ëVøþËcç+ŸŒ>®QWÙ¾Nß}÷Ͼ^û›½]{⑆¤vt¶ÕŽÛ?ã¶_UDE_gû6ÿgí…öý°õoÄjºRqWÙöJ¾Ý{­kÝ÷ëÂêéHоR”ˆ«å)Y»íþùñÝŸ íþP¯ôE_]+?¿î¬êßðíŸñuq}ŸnßíÛ¾ÛçÕþêéHоR³9»eó»©Ôf?Œê\ån„mû²±çÿÿÿcÿëë”UôR³öe~üR•×ßå§ïêç|¥fîêù¸¥«/7[wÕq|¥gÎ<ýÕþ;¹„üwÊõq|¥)WØÙÿlÿmù¿gl⟰šm‘¶Ûm³m•¶ÆmNíÛoÙ[öß‹íØKz¹E_)JN*ùJÆ_ë^ØþÊsǯŸÍ:®"¯½òô«üÎÛgm¶V?~þ¢””Uò”¤â¯•å§Žžÿ`$„§…#õ?ù(Ì®ùÖ®~;|Ìëÿ-²Þ°ko””¡ü†ßžvéSýÙû ¥¢¯É^Òδ7mØ÷ÙöëÝlê|?ZËØšRJÍòPZ?=’>윓Ý[ãº÷½Àå 3fJÒW&¡%»lXÞo>ïóÜaºÇfX_È&ÀRŒ‚Ä!.ž‚ºŒØ•Òž†ÉKíöOùðϬ) 8¹eñ¸ ïÊNA|jPŒ–ÏÑ’qºúQ3€‡”Fäbg,–”âÊŠ(”ŸÜo/¶ÉG,3ü^Ní¶Þrb‚,„40¾”' '§’Ê+¤1Ä1oœ–œ’³!b×y¾)`5®¯ùQ@1(š’Š_+üYêÙñû|ãs OGûtçÌ÷%|7$nK|wÌØï²÷=nxëêÎM1a½±c N)ðÞ„’ŠÛòº7+ÿðÂ^Cfºa€þ”! S–”: iI/`ѽ0„” JKÝ‚ iùwGB–§|ªÿ‡ÒÞQy;-|oÛ¡%%·bBBTû~iæØ/JоVo“·ß}óï—¾æïLíŸïÙfßŠÏØCú¸Š¾Vg7î¾ve:çcù½j«¤â¯”¥"*ùJR"¯³íÛý»w»|ør¿Â=ýy›6eºÝn!³*Ÿ³¾Ç~gëcŽ?©ÕW(«å)IÅ_fÌoëç±¼ålqØÖ>®”ˆ«å)HоR•›dm¶ÛlÛem±›DUõÖm³ý¶~ü_mŸVØF«¤E_+6ÈÛm¶Ù¶ÊÛc6«¤E_gs>ËÇçS¬Ü~;™ÖººR"¯”¯J[£('²ûs¿Veõ¥?2¢QWٸݾuç^û‡îßë¦ù+ßuü¥¯vø;«‹«¤E_+?mþß¶;3ñYþËö§ÎoËÇ1œåîyÜÖ:®"¯•™ÍÛ/ÝN£1øügRíd­ÃI/m·‘o†Çs_³à:pܾ”ñ›þ´möÙlŒÎzº°ÔÒ*uÓ€3,…Ã0fä¬05(IL’Є0Ò‰IZ2BQІd7doµé€¦ (šã A7ìRPAevG@bC á¼j%`,ãÛÞt!½ô¿Kd©-Æ`žÌQò%9IÉÝ<–7^Ç€Å!b`gAD´”MG’_Ç’ÓÒ‚WIh@LJ+æ%³ý|Ú7U1 &GûäíÈ_“€ÀÇIA††ò÷K'ô'3§£ŸvÀ¨É,߰߀Ïér’‘¸ahûQIXÔ££«fëd^¤„#'üJéC—ƒ7Δo“‹GÅ ò¸ÆHÔbVÛ\T€è *‚òSù/—¿ O+Jo‘Ù?d7%[«eT5¾â…®UÕÀ`X Ä.’hAO†òQ3£%%dò‹d#•²ÓûqˆÃ_ß3@Én„¡cJܤ¡Ã>Ã?î”wï·Ý{>Ô8,e$¯ó}†p0RvéOÝ,Z]ÐRŸ ?üý¶½I-KÄ¢‚]$¢Ñ·Né ’Ð[$·Cá…möéKúþP €qWüš•å'Œœûp&„£…'oƒõEëÙÕò³çßoóãó>Ÿ|¡{êºN*ùJR"¯”¬û%_n½Öµîû‡uáuq|¥)WÊR‘|¥+?ÏŸmþ7níØ[vW×JR"¯”¥"*ùJÏ·oöíß íóáÊÿõq|¥)WÊR‘|¥)WÊÇÏóçÛÛ»vÝ„UÖ6Û?Û~oÙÛ8§ì&QW×Jþ4j>9{ç'ÿûægÙ¿ã­rÿß·GÏ‚„å«}Üu»}ñËm(«ë@G‘„!>f7tdc†m…,U¬†_ÛŽÅ–ù³fÏ×ß;¤óF}½‘%ä}¾JþÊ)?-Ù{}Ž_êÊv}} %†ðÂÊ+'$7#”C ÄÒðÎZv唄§2Yó–­‘sloÊU_ꀪ Ý‹!¤i3§`Äd Hÿr€±lW H‰-{ë Jq¤ÝÓƒQ±\hicÿƒ:qEnJÝù]òþMÖ !Ri ¤®Já„Ò‰} -)&¥™ KÈ,3ôôm²òFëa¶rgI+ ¢ÊO!dù<¼RvVÛ8nèOrfGò5ärspÚUøÊPfI°Ô•Ê&7J (‘ˆI-)î7§ ”Lýò fö%†”žûŒC‰…’19(èåŒ&Ý ¬übÜÅ”‚a ¢G Å!,ZöB”‚fB[Œ%²r JRvE版ü1à ®KObn&àÞ4ä•‘»dwܬ5#ÓRMv?ˆ`åWø|ŽW)ÐÉ~”Ÿ¤iº¶}™Üí¬? ßw^e¸wÍðœºýŠVÙ(í¶`-ưá^É{¶U}Ÿ>ûŸ™ð¼ûå ß_B¿£éÿ i)=¸`ÒR’Jn:–Ý?£o•õó›¬CPR6NÜ—É[%†~öÜþß«¶K;üÛÙ ùÕþˆÝ¾íú4·ãSЀÄ$¢Ò‚¸Nß}Ñ“úT¯žð÷ÙB&’œ˜”ƒKå†gAmÊÙû!±_ó?3å_²JÈùÕöwnßnÊÿ>Ü^|âUÒ±o×™³f[­Öâ2®ÊjúéYû?eoÏìa?²ý\⯳ì•}º÷Z×»î×…ÕÒ‘|¬û'}öûæû¯}Ìú®‘|¥)WÊR‘}›lÿmŸ¿ÛgãÕ¶ªë7;-MÏQî£TËU\¢¯”¥'}Ÿ9¿/Æs—¹çsXêºÌæý×Î̧Q¼ì7­Tî¦Øõ­›79]ÖÊR—(«ë¥)8«å)HоVnæ|¾{ÏWçŸcêë6ÈÛm¶Ù¶ÊÛc6”UõÒ”œUò½8íºvû:e;·û:¹ÇTW£ ͶFÍ‘°í±¶c›:¥h°Ð:P“ú]ròBP´„rÓþßþÜ’æÞÓWA %ɈÅtÆþJùK~ZRŽÝ´Ûýþ½h/†÷Ie† & ÉÅ•ŠÛ¥=8´rb2…¸ãvÝ{^”°Àt’ÐRF!% ¤b“Ï);1Aˆù)/l‚ÃÐ_A{|÷–­¸#ŒkJ¿¼Y aðaE¤3¡$у0f ÉÌ‚óWF ÿ3§#çã7O÷))&òË!¥ ²Jù/øc$´§äÎPÒÊ+ôd|”½ !“lÉ…% É&¡;p rÉOé) Å 5)~…í‹èÿj²ƒ°iE¤5%%!½cbhk€ÆÅ å”ý †¶éß ÉïµÄ£±Â–G㪫ñ–MG/ˆElV( %®€Ô–‘ˆCrPÐ3·HÄ•Æ BwèUó€ÀÀÎ7£ ´Ã^ù)+žŽù‘ò7Ù°BôØ 7· 36,%Ÿlä>_FÀe(}¹|ñ¸o¾k³m¿ý±ýŸ‹í¶X­µé¹Ž… }t¥/RоZËÝ¿FA/!9'oÌÿ-¿ÙØu’õ€¥!†pÔþ” `Ü^䤤!%n^3#³+­VZu´!`Bh`ÄŸÓÐB@nù¼1x¾^Od•±{¯ïÚøýöP2@b¼ËI3 gInYhÜf J‡Ý8‘Û•|—!#6åÿ÷$í·ûss|¼¤ý±¿5ÇݺƒÅUWä¥+ùY›¿uº™L%ûªôh«ë¥+;·m¿eoÛ~/·a-â*úéXëÙ¹Ýjlru˜¦Rêâ*ùJÆ^ïÎêSs–s¨Å²×WWÊžVfïÝn¦S ~ꫤE_)JDUöglûnËÛ¾ÜWlâ[UÒ‘|¥fvÏ÷쿳oÅgì!ý\E_)JDUö:þnvZ›ž£ÝF©–ªºR"¯”¥cçùóí¿ÆíÝ» nÂ"*øëÙkßÙLiØõcù‡UÒ‘}Û·Û²¿Ï·Ÿ8‡ÕuŸ¶ÿoÛ™ø¬ÿe‹ûUÊ*ùkÈã>Æü´ã;lèÉéÛ)ö^sÞÉHŠ¿ë ;)¹3¸Ü²8À2XÜ_G B11 d i|¿ºSÉ6j¾Xa4 æAx¤(²·-©Éq¸aDÂÒ_Nè+?Ééo¿ÞðàT˜n3ðÔ ¤åÉvNB~ݲû5ô°*K+¤hgéÍÊ @` ú\¼[·åd¡!¤´“»æÞñ¡#ÌpÖ•}å|LÙ!¤ÐÝÓLKä•·Éiû¾ä¾5¿á¼3ô¤“ÚáÁËæá%$ Ñˆ==)Û•‰}KÜ´–Z]» kûÒ†“H{ðĤ¢f¨„žŒ‡ÜaIKò”YKGßã·¾ZLBQúIhN å}ò:r[,´ô6Ý%l…gFNÁ-/°áýÈ*ÿ=¶FÛm¶Í¶VÛµ]fî<ÿ—¾;±¤îwËÕwµgWÊR±óüùößãvîÝ…·aо»é@'&ü’j:v+'ôïݤgG(· %€Ý ‚Û¯k!4ä¢aiBrKÅ't위'!=Á‰å|yh?#~[mµÓ !Q7l5 ¥†äòakJ]2q4¤gCO( ì•ÞvÎÂ[O®¯ó :!#€ÖCbŠ%'2Ý ÿ,˜„¡•d}›mŒúñöðÌ™9»í²rFFqŸ§¯«ºÝ¯Ÿ`ºÿ0M_fÌëýø¥++6[÷ôÎnÙ|îêuÇã:—WKYUò”¤â¯±×²×¿;²˜Ó±êÇó«¥"*ùJR"¯”¥z“‡|ÏŸ~öíÛüíñ²Š¾ŠR“оR”ˆ«å)Y»¹êìwÆn§<óòQ}t¥bß+3wî·S)„¿uDUõÒ”ˆ«å)HоRÖ””Q{ NèWëGËs›Ÿ•ú–öIE_gùÿöÛ?ý[loõuŸd«í׺ֽßpî¼.®"¯³;gûö_Ù·â³öþ®•›dm¶ÛlÛem±›DUóá»îë̯÷ù¾—{€“Yhårót'ìŽ1)þû»'ô 7#¿Ì¤Þ–zuÚB ¤ÂPhgû£t  —‚öåo¾ _/6Of éʺäÀ*R”¥jzI©GåbúzôS‘… Ahßß–œÛ¦ø± 1!¨û|Êû7Üjî5{Œë)9]÷{ÔÀ§¥#ü—gGON-ܵý&o›7É͵å¡8î WWà(0ÀÒÓŠN FAL3q¼´¿Û¾^b@Ä’þkÏ 5¡8¼ÿ F㛿ݲ¿ÝŸs޾•€. åþ4¯ÐYIŧ~žœ^JÉhIc1LM`…÷ý¬ø ì¢bI¸4´§nÅ|ú0jS›„†Ĥ’Æ?BwßÛvVfúU4òaE ÏÒÁ¿ó%ƒ:wÿ·ùŽ}ŸüÛµÖI4Ü´òØ–… VOF- IWÈI{umž°° 8i¥ƒ p΄gØn-9<1²fÃ;+ý•ï4PˆÁ.ŸÃÂzöè䜸B9ˆÜböÏÞYAgŽŠ¿Ð€d‚úX–°Òºi,—þ OI[ð,žÆ÷Æoþ×€ (˜…#!ÿ¶;?ÿ°åóŽÖJ]¿¸šjùJV|ûíþ|~gÂóï”/}o*¾ºÍ™×ûñJVVl·ïêéWÊR‘|¥)WÙûúñÌo=5Ž«¥fÌëýø¥++6[÷òоºÅ¾^fï™n¦[‰|Ë«¤â¯”¥"*ùJR"¯”¥"*û?f=}ŽüÏÖÇSª®”ˆ«ìØfÛ:³/ÿÃÿÄõÕұ׳sºÔØåë1L¥Ê*ù³?õÿÏîi;²µ]fͶÿöÇö~/¶Ùb¶ÔÎÙöÝ—·}¸®ÙĶˆ«ë¥)8«å)HоÍÝÕóqKV^n¶ïªëýY›7uºÝL!»®®QWÊR³a›lêÌ¿ÿýÿ×8«çs>ËÇçS¬Ü~;™Öºo’½÷_ÊZ÷oƒº¸ººÍ²6Ûm¶m²¶ØÍ¥}t¥'}‹|¬ÍߺÝL¦ýÕWJDUò³º›ãÖ§|Üåæ[-jU]"*ùJR"¯”¥"*ùJR"¯”¥"*ùJR"¯”¥"*ùJR"¯”¥"*ùJÍÜÏ—Ïc9êüóñ¬}\E_b߯3fÌ·[­Ä6eUÒ‘}ŸnßíÛ¾ÛçÕþêéY¸Ý¾uç^û‡îßë”UõÒ”œUò”¤E_-ÖýþËK-‚3õ·fËeTV}’¯·^ëZ÷}úð¹ÒŒœÜz9Û’>æïŒŒoLUôR”ª*ùJR"¯”¬ý™_¿¥u÷áÊ~þ®"¯³ì•}º÷Z×»î×…ÕÒ‘|¥)WÊÇÏóçÛÛ»vÝ„UÒ"¯”¥"*û3¶}·eíßn+¶q-©Üͺñý”ë3ŽÆõ*®’оR³¹›uãû)Ög;êU\⯔¥fÌ<ÿ×ÿ?¹¤ìvÊÑ|eþµíì§0ìzùüÓªéHоR”ˆ«å)HоR”ˆ«å)HŠ¾Ìæí—Îî§Q˜ü~3©uuŽ¿–­¹Ý–æÎ^?}\¢¯³»vûvWùöâóçú®”œUò”¤E_)JDUöm­¶_êRÿÃúøººÏòþËÙj_í°VW(«ìîgÙxüêu›Çs:×WYoñêS6lzû­Ö¥*›¹Ÿ/žÆsÕùçãXøŠ¾ºÎêoZós—™lµ©Tû'}öûæû¯}Ìú®"¯”¥'|¥)WÊV>Ÿ>ÛünÝÛ°¶ì"®"¯”¥"*ùJR"¯”¥c¯e¯~we1§cÕæW×JR"¯”¬ÎoÝ|ìÊuÎÇózÕWWÊV-úó6lËuºÜCfU\E_)JDUò•Ÿ³¾Ç~gëcŽ?©ÕWWÊ͘yÿ¯þsIØí•ªéWÊR‘|¥)WÊVlÛoÿlgâûm–+mG^ÍÎëSc”{¬Å2—(«ë¯AhI!;«%_uwn£;væµE"*ùJVlÃÏýóûšNÇl­8«ë¥)WÊR‘}Ž¿›–¦ç¨÷Qªeª®”ˆ«å)Y³úùìo9[v5ˆ«ë¥)WÊͶ¶Ïß‹í³ñêÛÕtˆ«å)HоR”ˆ«å)HоR”ˆ«å)HоR”ˆ«ì[åænù–êe¸—̺6Û?Û~oÙÛ8§ì&®’оÍÜyÿ/|wcIÜï—ªéIĈz¿óýgu7Ç­Nù¹Ë̶ZÕW_“ºz Ûsñ¿ãÌ70ãe}¥'|¥)WÙoñêS6lzû­Ö¥UÖ|ì¿›ŠZº»àõ7}W(«ïnŒµºÓÍï×ß©mŽ;+IöNûí÷Í÷^û™õ]"*ùJRqWÊR‘|¥)WÊW¥,Ç?ûmû9½•ßäoØÖ2¢QWÊR“оR•Ÿ³+÷â”®¾ü9OßÄUõÖ|ãÏÝ_㻘OÇ|¯WY³?õÿÏîi;²´¢¯®•Ôßµ;æç/2ÙkU\⯳w3åóØÎz¿<ükWJDUò”¤E_)JDUò•›¸óþ^øîÆ“¹ß/UÄUò”¤E_+;™ö^?:fãæqõuýݽó“Îÿýó3ìßñÒŠ½6g=}ÏüÍ”çvS®®±o•™»÷[©”Â_ºªâ*ùJVm­¶_êRÿÃúø¹Å_;©¶=kfÍÎWu²”ªºR"¯”¥gìgëÇ1¼õüqüÖ:"¯Ÿ±Ÿ¯Æó×ñÇóXêlÆþ¾{ÎVÇcéÝ»}»+üûqyóˆ}W(«å)YðÝ÷uæWû‡|ß ËœUõÖ~3ÝYÕ¿áÛ?â2éøÍÿugVÿ‡lÿˆË«”Uò³l¶Ûm›l­¶3j|ûíþ|~gÂóï‚÷ÔÝÌù|ö3ž¯Ï?ÇÄUõÒ”œUölÃÏýóûšNÇl­WXëÙ¹Ýjlru˜¦Rêå|¯K«g_ÏðÅlµ¹†+~³¨¤E_fãvù×{î»|#®›6ÛÿÛÙø¾Û`­µ-[s»-Í;œ¼~4ú¸Š¾V~ÃÏÙ[óûOçl¿WIÅ_)Yóï·ùñùŸ Ͼ ßUÄUò”¤E_+>¾î¼Êÿpï›á9tÛgûlýø¾Û?­°W(«å)IÅ_)JDUò¿nïÒ=[6_S»÷ÙJûwý‡TVwnßnÊÿ>Ü^|âJ*úéJN*ùJR"¯•›d+m—ú”¿ßðþ¾.®³fs×ÜÿÌÙNqÇe:å}t¥'|¬Û#m¶ÛfÛ+mŒÚ®‘|¥)WÊR‘|¥+;©¶=kfÍÎWu²”¨Š¾ºR‘|¥NÝjV_Ã{oö~Îë9\uD¢¯³a›lêÌ¿ÿýÿ×WJN*ùJR"¯”¥"*ùJõ~δ7mǾϷ^ëgSáú¢QWØËÝjßÙlaÜåsñ‡Ó}ßo»vâ»nÜr¾â=]"*û?Ù·û?l/·í‡«~#Sl¶Ûm›l­¶3j-ò³7~ëu2˜K÷U{¿;©MÎYΣË\¢¯®•‹~¼Í›2Ýn·Ù•WTUò”¯¿óüÌëf|û»¿Ëù^QWÑYœÝ²ùÝÔê3~3«¤â¯”¥"*ùJR"¯”¥"*ùJVg7l¾wu:ŒÆŒãâ*úéJDUò•ÿ„ìù{ñ†öùyggZ¹ùzM÷}¾íÛŠí»qÊûˆòнöûÿÒâ¶m—Øvûu·gÛTR‘|¥)8«å)HоR•Ÿ;/æâ–®®ø=MßDUño•™»÷[©”Â_ºªëßîß+¶ß?Zÿu6Í•ÿ_ì9ê%|¬û'}öûæû¯}Ìú®“оR”ˆ«ì[õflÝÖëu0†îººR"¯”¥"*û6ÈVÛ/õ)¿áý|]>v_ÍÅ-]]ðz›¾«¤¢¯±³îÙöûsvìùŶqû'}öûæû¯}Ìú®³}ßo»vâ»nÜr¾âKwGgÍÞú‚CK&—Ë(†’Rr?Ø5%p€ß²”PÔ'ôð&”’6¬àT´Œ, q© CKFÁ©ËÉbþJ05#R‡)Å);ÞfFfû‘ÅâqÊ®¯ù>&•þÛåätq¨ 7æ[õ#ó›ã½—|¾ûïŸ|½÷7{ëa¡¡©&ndñ¬“²¼1·S„!Ý „7%ÚËv€ÐÜ[ GÀ6ê/|Sôäò¹\%†~–èÊ+ÿ«%38ñcÀr«þ+KÙ€è2€cÛ‘݆pÔþn—ÈÎêùÕÆîH]ä7·Î¼ëßpýÛáwCSW×YoñêS6lzû­Ö¥Sößíûc³?Ÿìö«µ•_)JN*ùJR"¯”¥"*ùJR"¯³q»|ëν÷ݾ×WJDUò”¤E_c/õ¯le9‡c×ÏæWJDUò¼¯Ò„›ý¿ËSã—‘Âöâ¤ùÇŸº¿Çw0ŸŽù^›0óÿ_üþ擱Û+S}t¥*оR•Ìû/N³q‡s8øŠ¾ºR‘|¥~Köûî³ñ›³¾}œý¿v1^¢QWÊV~̯ߊRºûðå?W8«ìeþµíì§0ìzùüÓªéYøÍÿugVÿ‡lÿˆË”Uó»vûvWùöâóçúŸä/ý—²Ô¿Û`þ¬.¿ü„ãܾ0õ+%'~%ÆoùªÊ¯!%~‡·ù¿Æ|b vßýº¿eQ§WúðÐ+‹-@T1 B’‘©é,3î’ù÷fQe$ôeÝb K»pÀßòSöÙ(JC’ƒ>Û—É5vcpÍï>‚ÿ &–”t$¤ Éé‚·ÈéÉÀX¬3 -!?ýþB{6½Ña€T1©PßRLA\´ñ€e%–ž–K¥ŠJ6²ïlØ×=ð‚¹–µ}` &–>À„~JÃF 7§ ü¤eºŠßät„üþò{d 7'( )ߎ÷Åü™ÓúqhJ’_3g¬ä¼”vè+2K㔂V-81)夒7ô|’¿뻤ÒC1+£#$šMá›bih)° ÿÐKN øgߟz{vûó·ç YæËÑWù°ÎL/ýË&$”œ\än¼ž€Î—F‹ÿ£¤²^{Ô–Â)eJ@¯Ÿì”vãv OByhOÉ Cžóóo+È\5rò[|7£† ´ 3'†9Cyx'þIIoùÿkŒ`b:23u6à ã o±lÌéÏÑÛ»÷ºFüNÁcŒM_õ\„•’ŒY0 Ñ‘‰¨îŽL%~’ønGÿ#†»oŠB72ñà0¤ Â%–ÃPMJ@ÏÈ/'`‘¸´ #%+å#œ¹¯=À¢@ÀnÉø´¡œ’öƒdóOu§–•n7¶kÝpb`c„ýöýRBPX º@ÊrP‰X®á‰q™/ߨ¿v4YÍ€UÇi{°ðÞŽ‚ÑÊÁ‘ÑÊ-D®‡(„¬²™ ”Û^÷=•_)J[J¯”¥"*ùJͲ6Ûm¶m²¶ØÍ©»º¾n)jËÍÖÝô¢¯®”¤â¯³ü…ÿ²öZ—ûlÕ…ÕÖo“·ß}óï—¾æïOÙ_c¿3õ±ÇÔê”UõÒ”œUò”¤E_)JDUò•›0óÿ_üþ擱Û+Q³îÙöûsvìùŶqнÐ1‚'3;ñ§5Ü[½E)WÊÏØÏ׎cyëøãù¬u]'|¬ù÷ÛüøüÏ…çßïªéWÊÅ¿^fÍ™n·[ˆlÊ«¤E_+ÉhÜ`Üý”ùÖì£Ìá\uEbß/3wÌ·S-ľeÊ*ø·êÌÙ»­Öêa Ýv¬„î–çýÝ?óVŒŒÛl²>ç¯ïϲìοߊR²³`õ¿zpÿÃ9]'ñ…ä!òƒF¡d—›þÛ$á¹þö9§WûrÃR€ÐÀ1a˜7$²i\3âZRÜ”Œ”¤3·Û;ò¶Y&éÌLI 0¼Z9{¤j / ra//£a¿í»ô ÈN>ôäÜ€–VHi,¼Ô$ß–Zœ¤öÛe¡axàõÄ!B‹(¿ÒX`jKÜ41(,5»~„r`ÜXoOü58½²>îÝï•qûÛ;l,Ý–.Þ¯rD0Ô!ÅS 5)ù%tàÔ«ýƒSÉA©ÎJ+dÀ8Ýžùñ1¥° Àl ý¿I,¼°B†ù+|„3+ÝÄÊ&è *€Ò±m¸ÂnC²01)‡ró'l—~…P„ ?éܧá¨éOB:IhŤ²Ÿ”`×åt’†fÜfÃ=ÐæwÆ(ìrÈçʯù¹3¥!)%£ì1%t# iãs ëZv;¯{“kAD¦Èlº—ÿÿ»üOîÿþïd¾—ØÕòÜMÙ!‰ÉûfýÒry*èøg[ï¾gßXiV•_öÜ€ ˆ}E á¨9 -!4nÈûää0fë÷È Á®3vǾÜwGdï³uìûïžô §10®kÜÙû KÃ’å|¼ý»[€$5$À”Èý Ê{%®Á„¯†#•¾u)µä|!X{€Ô×´«þ}JV|ãÏÝ_㻘OÇ|¯{6u}t¬îgÙxüêu›Œ;™ÇÕÄUò³a›lêÌ¿ÿýÿ×WYþÍ¿Ùûa}¿l=[ñQW×JRqWÊR‘|¥cçùóí¿ÆíÝ» nÂ*â*ùJφﻯ2¿Ü;æøN]\E_+6g=}ÏüÍ”çvS®®‘|¥)WÊR‘}ŸäoÿÛlÿõm±¿ÕÒ‘|¥gs>ËÇçS¬ÜaÜÎ>Œ½ßÔ¦ç,çQ‹e®QW×JRqWÊÏÙ_c¿3õ±ÇÔꫤE_/fŽQy Ø¿ÐLo°JSМ†ì7ä'²:I\o%©ï.³¥{¶~ŒéùÆ3Íͳ¯²ï¨j’Kù¢Ã_á£oƒ7@Ì„  þá»l1gëËdÜ|DZãƒÀYU_êPV ×)©<5%2I™;ð, @a4¡Ÿ»mÐÿÕ³XÐat:PRRLnVè(5 c$ A1ÖàX¤t§#öÃ_T–‚À,(N&2„¡Ø _pÄäíË A]ËéNGøoͼņ åŒ@nOIx²ÃSòRYE¡,LJyLЄñ¬ÅvߦùãWñƒ€:Ú¯D”ï¹_r™)ŧö ,i $´¥²y7d!8²³¥ïb &€øÄþ”n_ÊOßý·ONÎ3t£cvMÙã2 ,²gÉGÛd ) b?åâÆæmÉ ëa·Ë/U?9†à £‡YÕò”¥íÙÕò”¤E_ëBý•²K+îÍÒÛ¿Gø­Ãr hGÝú©þ¯…€Ü´¤˜Ã Ù;ô†§¹/îè-(%nÉÈÈGÊÕµ¬< €ßdpÒ€Â{|RJ%ðÓ†pÖÈO|Wü³¶>æè18Ð KOá©ÃF–0­¾m÷å0Çm†¾èUåfÛ:¸1×WùJR³|¾ûïŸ|½÷7{Õ¢¯™Íû¯™N£y‡óxêºR"¯”¥"*ùJR"¯”¥"*ùJVn7oy×¾áû·Â:â*úéJDUò”¤E_)JDUò•Ÿ9¿/Æs—¹çsX긊¾R”ˆ«å)HоR±³þÙþÛó~ÎÙÅ?a4ÿ!ì½–¥þÛõarоºR“Š¾Ïœß—Žc9ËÜó¹¬uõ²jN„ðÂHJRM& @A_t䤧OOoÙ+é/ïò¯’|ì¿›ŠZº»àõ7}} Q$ÒÒXÐÔ @F%ä?ÿäS£†nZrKéIhù ʼäq†9YæWWû¤—€§+€ÉEþÀÂC2ŽWœZ@nÿ³¸ÜߣwkƈH /¤1)+ºŒQ3$¤ô?ü­ÀÈbFnØk}ÿ?^ˆ„¯&P…“CzrFä'6Á…¾Fù‰Œž•ŒI+¦ùá1 Gã ÛýÊéêNéNt3–‡OpÜ—-=ÛyiÊnüåž'¢%u¢¾ãRÃ~d±Écºß¡³üÛtóúîm)}_)JU|¯Jr0ÿݳíÓöý³ý·6¢ú€ @B`i3ð3ö–Á/‚Ihø¯ƒ8 ¶nÿýþK«½Í³¸æª¾òi40 €Ü´g)”P^OëJ6I+|ƒ6Igcû2z~¼)…‰,ŽìÃR‘¥†³­"Ÿ·1¶ÚöÀ0…$0 ‚Ƥ5=‹Æró!9IIÉá„¢ú6@ÍòÛå—ýNÌÁs«å)KÕ¢¯³mŸí³÷âûlüz¶Â5])WÊR³üÿûmŸþ­¶7øŠ¾ºR‘}™Û?ß²þÍ¿Ÿ°‡õt¬û%_n½Öµîû‡uárоºR±×ós²ÔÜõê5LµN*úéYûoöý±ÙŸŠÏö ûUÄUò”¤E_fî<ÿ—¾;±¤îwËÕt¤E_)JÏÙ_c¿3õ±ÇÔꈫë¥)WÊV}“¾û}ó}×¾æ}WWÊR³:ßcÔ·|Øõf[©jˆ«ë¯ÝÿûïŽQŸ’ýØS2¾òg[üz”Í›¾ëu©Urо[Ó°iJdäŒ7t%ç?'}Ðæ,~>ÁIE_õ@ @`Y4²’’±d¿V,4—ú~ÿ¥ƒ HÇÃ2 ^w}޽(cƒ, N è騖1l—%£dô’Êòz—·ýï…|7}Ýy•þáß7ÂrïN@4A)<®òQÒ7'ô}Ünßa™_vÛ ù¯#%œ5¥_A@Uɤ®ûýÒJø%̇ý[lœœÛ—ûäî2ãpÒ³wÍÒ1ÏÃ_æÿ+/2Àú¾Æ°P’ƒP_ᥠÝ% —ÐXÅäŒ@J”ܾžJïþÞÖ‚ÐÐŽ‹Á™6Ĥ,aeɉÛÃB]jF%¥¿¡Lv`§œTêÿƒZË @ft¾ÎḘ̂߬Ï;ÿl¿¯­€X²‰…‚ËŠá¿þFÜ ¤¸À3Ð3“~ý ÉÁ¼ —é(šLF@ÎVÀQ)-(Cdü0°/’œãÊ*ÙÜrÄH’«üa 4¤ 0›ú@RV ID¿ùEò‹nWûḬî{/ëºBœ%pÒY1#zwB9c>K%Ÿ4®5%¯ºFýщ—(F,”K OI}Æ’ßëà]’3t¯“¸Ä²ï'ŠFÈÙH͂ʮÊ2­…Æ8¥‘¢¯ˆ)fB22•¶Çm±Ã¶ØF¨¬uìµïÎì¦4ìz±üêïVί³wsÕØïŒÝNyçå:©þBÿÙ{-Ký¶êÂêéWÊV|7}Ýy•þáß7Ârêç|¬îݶý•¿mø¾Ý„·«¬lÿ¶¶üß³¶qOØL¢¯®•Ÿç϶ÿ·vì-»«œUò”¤E_)k%9ý=IÇü¤ð1ÇnIØÓì’Š¾R”œUò”¤E_)JDUò”¬uìÜîµ69GºÌS)q}t¥c¯æçe©¹ê=Ôj™jˆ«ë¥)WÊR‘|¥+6ÈÛm¶Ù¶ÊÛc6ˆ«ë¥)WÊR‘}Ÿd«í׺ֽßpî¼.®”ˆ«ågu7Ç­Nù¹Ë̶ZÕWHоR³wu|ÜRÕ—›‡-»ê¸Š¾R”ˆ«å+6¶Î¬Ëÿðÿßñ=uq|¥)WÊR‘|¬ý™_¿¥u÷áÊ~þ®‘|¬û'}öûæû¯}Ìú®‘|¥)WÊR±³þÙþÛó~ÎÙÅ?a1}t¥"*ùJR"¯”¥c¯fçu©±Ê=Öb™Kˆ«ë¥)WÊÍ›mÿíìü_m°VÚ®‘|¬ÎoÝ|ìÊuÌ?›ÇUÒ"¯”¥"*ûÒŽöOGhø<œª)IE_)JN*ùJR"¯”¥"*ùJñ»vêvoþ ëí–ï¶~£ƒê%|¬eþüì¥6=g:Í[)UtœUò”¬uìµïÎì¦4ìz±üâ*øùö|ÿ±¿f~Ÿ8šg[üz”Í›¾ëu©TÛ![l¿Ô¥þÿ‡õñurоR³|¾ûïŸ|½÷7z|ûíþ|~gÂóï‚÷Ñ}t¥fv϶콻íÅvÎ%´â¯®”¤E_+6ÙþÛ?~/¶ÏÇ«l#UÒ"¯”¥"*ùY»íþùñÝŸ íþ ÿUÒ"¯”¥"*û7}¿ß>;³á]¿Á_êºÏÙ_c¿3õ±ÇÔê«”Uò”¤â¯”¯NéßnήyÆ·ß}Øïººê%|¥)8«ìý˜õö;ó?[qýNªºR"¯”¥"*ùJR"¯•‹~¬Í›ºÝn¦Ý×WHоR”ˆ«ìýŒýxæ7ž¿Ž?šÇUÒ‘|¥)WÊR‘}ÔÛµ³fç+ºÙJU])WÊR‘|¥fîgË籜õ~yøÖ>®"¯”¥"*ùJR"¯”¥fÌ篹ÿ™²œãŽÊuÄUõÖm³ý¶~ü_mŸVØF«¤E_)JDUò”¤E_)JDUönæ|¾{ÏWçŸcé¾J÷Ý)kݾêâéûoöý±ÙŸŠÏö ûUÊ*ùJRqWÊR‘}Ÿ°óöVüþÆùÛ/ÓfëÿŸÜÒv;ejºJ*ùJRqWÊR‘|¬îݶý•¿mø¾Ý„·§Ï¾ßçÇæ|/>ø/}W(«å)IÅ_)JDUò”¤E_)JDUò”¤E_)JÏØyû+~c üí—â*úéJDUò”¬ÎÙþý—ömø¬ý„?ˆ€Èz¿óý)XÙÿlÿmù¿gl⟰˜Š¾ºR³l¶Ûm›l­¶3hоºÍ†m³«2ÿü?÷üO]]"*ùXÙÿlÿmù¿gl⟰šºDUönãÏù{ã»Nç|½WJÇ_ËVÜîËsNç/>QW×JRqWÊR‘|¥+Ücôý³íŒ=¶ßþ¿ÒqÇìÒŠ¾ŠR“оR±—»óº”Üåœê1lµÓç~êÿÜÂ~;åyE_]fî<ÿ—¾;±¤îwËÕtœUò”¤E_)JDUò¼¡£¾ëÝÆ»­]ú–£69U”Uò”¤â¯•›lÿmŸ¿ÛgãÕ¶¨ËÝjßÙlaÜåsñ‡ÕÊ*ùJVm‘¶Ûm³m•¶Æm8«ë¥)WÊR‘|¥gs>ËÇçS¬Ü~;™Öº¸Š¾Í™Ï_sÿ3e9ǔ뫥cgݳíöæíÙó‹lâ%|Ýöÿ|øîÏ…vÿ(Wú®”œUö~3ÝYÕ¿áÛ?â2êë7;-MÏQî£TËU\¢¯•›¾ßïŸÙð®ßå ÿUÒqWÊR‘|¥)WÙ¾J÷Ý)kݾêâêéHоR”ˆ«å)HоR”ˆ«ìý·û~ØìÏÅgû,_Ú®³ì•}º÷Z×»î×…ÕÊ*ùJRqWÊR‘}ŸöÏöß›övÎ)û «¬ý˜õö;ó?[qýNª¹E_)JN*ùJR"¯”¥"*ùJR"¯”¥"*ùJR"¯½!„l¬…m•²ŒÏÛònŠZ²ópå·}WIE_gÙ;ï·ß7Ý{îgÕt¤â¯”¥"*ùJR"¯•™ÍÛ/ÝN£1øügRêéWٜݲùÝÔê3Æu.®”ˆ«å)HоR•Ÿ³+÷â”®¾ü9OßÄUõÒ±×òÕ·;²ÜÓ¹ËÇãO«ˆ«å)X·ëÌÙ³-Öëq ™Q}uŸŒß÷VuoøvÏøŒººDUöm³ý¶~ü_mŸVØF«¥"*ùYûúñÌo=5Ž£¯fçu©±Ê=Öb™K«”Uò³»vÛöVý·âûvÞ®“Š¾ÍÆíó¯:÷Ü?vøG]])WÊR‘|¥)WÊR³wËߨÒw;å芾ºR³º›ãÖ§|Üåæ[-jTE_])HŠ¾ÍÆíó¯:÷Ü?vøG]])WÊR‘|¥)WÊR‘|¥fÌëýø¥++6[÷õq}›¸óþ^øîÆ“¹ß/U×—þB~WÛüÒ`Ëâ2ü™ÍÛ/ÝN£1øügRå}t¥fͶÿöÇö~/¶Ùb¶Óо}“¾û}ó}×¾æ}WJÆ^ëVøþËcç+ŸŒ>QW×Y¶ÏöÙûñ}¶~=[a®³mŸí³÷âûlüz¶Â4E_])IÅ_gÃwÝ×™_îó|'.®”ˆ«å)HоR±³þÙþÛó~ÎÙÅ?a5q|¥fÌ篹ÿ™²œãŽÊuÓl¶Ûm›l­¶3iE_?f=}ŽüÏÖÇSª®”œUò³9¿uó³)Ôo;ÍëU]"*û>s~^9Œç/sÎæ±Õt¬ß'o¾ûçß/}ÍÞQW×JRqWÊR‘|¥)WÊR‘|¥gÙ*ûuwÜ;¯ «ˆ«å-}ÐÃ7K¥a+Ûþÿ =¿9ó ã¶²J*ùJRqWÊR‘|¥)WÊô XÖ?¶Î¬cþç™Ùlþ¢³á»îë̯÷ù¾—(«ë¯ìÛõýÔÌξíÙófw}Î]E"*ùJRqWÊR³ößíûc³?Ÿì±hоºü“²['络ÎÏ·û–Øýz"úP†–S¿G™ô6B¸?²_t°Oë½ Ø`gÃC¿&bW&—€Æè%$ ä¥ÙÉy?“¸Ü”©®F•‰õUÿ8¬¬’ÑÓ·)¿gã7Gî_fAÜþs-zæï’½÷_ÊZ÷oƒº¸»í©H ÈEü‚X¢-¤²Zö%?B:øÂZ˜÷lš9ÃS‰¡ a,Ø0¿^éÿ ýò3d˜—Ҟɷ×0Û:¿áô¾œNb±E£!8²h@Ôt¥ééO%ÿBÆÿÒ”  u¯_8(´„%òvûß>=wo˦¯¢•ã{°Î{8C3;žìá;˜Ë§) wÏ“›î´|°=Ô·Z–m´ªú)JN*û3›÷_;2Fó±üÞµUÒ‘|¥cçÙóýþÆý™û |âiœßºùÙ”ê7æõªQW×JRqWÊR‘|¥)WÊR³wÛýóã»>Ûü¡_芾ºVlÆþ¾{ÎVÇcêâ*ùJR"¯•›d+m—ú”¿ßðþ¾.®‘}ŸŒß÷VuoøvÏøŒººV-ò³7~ëu2˜K÷T¢¯®”¤â¯•›d+m—ú”¿ßðþ¾.޽–½ùÝ”ÆV?˜u\¢¯”¥c/u«|e±‡s•ÏÆ8«ë¥+ú(ïÔêÝ·ýOÍì¶Ç-Ùö”Uô^À%€Ûå“ ½Zpad… 04ngNC¾|îçkÉîæ|¾{ÏWçŸcï¹€Ä5$ÎB-²XÎŒPgGGù<0¢ú:ÓÜ3¤˜3ì3ý¶íî-ÀÙ:ª¿®B/£`1‰h,3þOä´¸FIEŒNJRL@Ô%¸Fõ`P¢’Xoù8°Òøb ¡¡›%ÞJé8›RwéIXfã“þk¦W@Ç/’‹&ÿGA]8ü01!½ƒ[¬3“:KOÈû³*ð\˜„”ÄÄ„£#pÀœXÐÏò¿JR3“pb”È@cÛ*ñ;‡8ríjþh+$°À*S|_) X¡¥ò†6  ßô†~Ž‚Ñ†£%º>˳ aŒŒŸºC†£†ñˆß>äÄ»¡]øÅäqyb²9HFä²’ܬ͊û£ä!¥åäåwCemp¯iþwP{lªÿ¸P ’‚‹A@©Ä¤gI5 d_RÃ~Fr‘û2yÉÍ@% &%ô–_B Û•Ö0 £†¡ÐžPÖÙÙÛ£§¢ø}é@¨€nPÆ)²zrºt|ÒQ{ºzRéo›­ÍÄ`çWà…¡(ûwᜠ$ДlëéOZºÓþvë{“~Š!âhä#VŸØ3ŒBFnHQa®•mÒ’º fK{ád ÜYEÖþ†§nÃU¶î¯ú0Å„›ÚüüéUüšR—u5|¬lû¶}¾ÜÝ»>qmœE]"*ùJR"¯”¬ÿ!ì½–¥þÛõauq|¥+3­þ=JfÍ_uºÔ¥DUõÒ”ˆ«ïCpœá;7)|‘ÎëZ·tŒ½ßÔ¦ç,çQ‹e®®³:ßcÔ·|Øõf[©j\¢¯®”¤â¯³ö~ÊߟØÂ;eúºR"¯±oÕ™³w[­ÔºêéHоV~3ÝYÕ¿áÛ?â2é»íþùñÝŸ íþP¯ôå È@Õöη[-{#p¬#J*ù†îÝg÷Ù¶Z·ßþíÏÊíÎV¨¥"*ùJRqWÊR‘|¬uìÜîµ69GºÌS)sä¶@Öß©ÖÏöÿoÎæegk_ ÈÉKäí“ó+lSdîŸÉN5Ïè'CE_a„t('rJ hퟠ•’„§ô;lç{í½!¥$˜Yî¹y?³îœŸÓƆQD=‘†Ÿo¶OýãËùÒá¥Ë/'’¾èå’‹AiJ‰j,`Ä2ÿzPÐÔr·87£ôòQ3üÅâ€Ï· ²ÉNWR‹ÆÂ±Ê 9˜Ö#ÚÕý2i1Š,·ä°ÎY\¿Ê&§¤1r•pÔRS‹VB2PÈï|àÉ/†’à[“( )9)˜ 'ôvû%xb3}‰^úPlŽ” GÖØj ¸²Y[ò‘ðCæfÉØc–²‰Eûæ & å!dü¿Àe$ÄŽJÈd¥nû7Kÿ‘ѾC5ŸgÌ;ƒüUþ—ºÕ¾?²ØÃ¹Êçã«¥/ ²«å)HŠ¿ÒÀu‹@(1òFŒÌÌŽ„3¡ºqêßæù?]` ‚Òt_B:Vm‘¶ß!}˜¬Ÿ–í¸FEâËÑòskº—›©k3cÕ}H4 “O‹B†–¶ùrö ÿ! Ð6ÃR”„gÉMÀù²ùäCê«þMKxgãù°ÄÓû²÷%£%JZBzßkÝM_c/÷çe)±ë9ÖjÙJ«¥cgݳíöæíÙó‹lâ"*úéJN*ùJR"¯”¥"*ùJR"¯±—»óº”Üåœê1lµÕÒ³çcÕÜÿŒùlyçu:å}u›äí÷ß|ûåï¹»ÓöcרïÌýlqÇõ:ªâ*ûË1$¦Ü`×ì§e³žÕŸ ßw^e¸wÍðœº¸Š¾R”œUò•ÿ„£>Ý}¹ÿev^;üýc¨”Uò½³ý·íÒË[l{oÎgû+I³:ÿ~)JÊ̓Öýý>v_ÍÅ-]]ðz›¾ˆ«ë¥)8«åfs~ëçfS¨Þv?›ÖªwnßnÊÿ>Ü^|âSmŸí³÷âûlüz¶Â4¢¯®îÆ¡(,¢€É{'3üèìû'±[ôâ¸JÆnÛÜm˜yÿ¯þsIØí•¯fCId$xbädäÓ†’Ò3 ¡¥„~JûÿËßXeƒ êû6(7íËC„þZBP[dñ4oÿ¤0Ù»ýúPÛëéIHÑ’OA\ Œ )?Z\  {òRRYHÅdl~ÞùÈK%%‚Ào’–Jy(7ñ™%nYa.‚’Jàc1™³½Ý¸8¤€ÌŽ^佃3tì”ñ¨M+âÐÈÝÒ•%9†^HA¦0qç´«ý H!¹A…ŒOÉd.œVV,„œŸþû„¸bwß'ÿßß- ,´ ¯ËèÛ²q|3ÆŒINÈÛ%¾+”Èá=¿mýô@òÉ©+ðÒ²z ICwFGý%–œ [ÉAIëHÂ^ì‡÷ÎÀM¹HAHF+e§15¶ø b¸jý›—À›º/«ê89\ÐùUþN”¥íÙÕò”¤E_/¨€ÄaÆ–B(¶éBFúùCQúƒ^+º m³=ó/Ù•ûñJW_~§ï切ï’Èa¸—‘ˆA P±©/lQ/ JƒQÃmº2þOÿ%øË‡c[‡…UWüô ”L)t|ŒèÿvæçÛfÝXfÈÙ[ms.èAh(3d#›bÝò>û ûí‚k¤ýóÜ“¿t¾1òòÿ?6fm”ê_÷Ogò«è¥)k*¾R•éFNn=íÉswÆ Æ7”UôR”œUò”¤E_)YÝ»mû+~Ûñ}» oWWÊR‘|¥)WÊR‘|¥)WÙû?eoÏìa?²ý]+{¿;©MÎYΣË\¢¯®”¤â¯”¥"*û?f=}ŽüÏÖÇSª®”ˆ«ìîݶý•¿mø¾Ý„·½`Årj øgÛ Ì–JR7lÜb0×/lŽw}½ãïJ²ƒhJ‹K1NWZ8kn­ÕкÀ8O?®|ø>uu Á¼ (Ä¡=О3|Ÿ€Á_$–HÝ 3æl”kÚ—ÔXie“Ò”ìPÅ`ÜR‰¼¢^/}‚V%â¾ùßë8hg&t†òÝ’’j8n(˜øÀÎKÉ |‡É+d~|ýµÂ,²e–0¢Ê&–‹%§ ''t#â_úùA¨Ý²Êý*¼ŒíŽêQ¨w´«ýye ™Æ'!(à6Ä¡ˆ,´ ¢’±+¿ %bÊãKBNNÛ½ñ²a ŸâS7éB÷+?NĤfÅ|ŽÈÎëéïï«¡1!€[r@ÇtºŽPj_Q÷+·ý(Ì7ð·ÅÃŒ–û§dýúUÛ+díð†B×óÛÿÜx ¥Wä¥){u|¥+?È_û/e©¶ÁýX\E_¬²ò7Ûíöû1Y»%;¥cæW"û럆¡.Ãq( *‘©BxH È/ô>èÁ»¸Ýö)?–ÿÔ€„äß¹EŤ5( +–ßñŸ#”Q[ñ™.ŸNB^Îp€Ðá©F塆¨5Åd ï²·XAn¦ÈW¼^sQ,*Ò¯ùVvÏ÷쿳oÅgí…?«¥/jί•Ÿ³+÷â”®¾ü9OßÕÒ"¯³ì÷Ûï›î½÷3êºR"¯”¬ÿ!ì½–¥þÛõatû%_n½Öµîû‡uárоºÍ™×ûñJVVl·ïêé8«å+>s~^9Œç/sÎæ±Õq|¥)WÊR‘|¥)WÊR‘|¥+{7;­MŽQî³Ê\E_]+>Éß}¾ù¾ëßs>WWÊR³¹Ÿeãó©Ön?Ìë\E_])HоR•Ÿ ßw^e¸wÍ𜸊¿º°)ˆcs’‡tí”/|€Ò¿ßä>[œØý}d%Bð ÉpÒÃCp` Mß0—ܯ¾ÍöÈn_Oþ×Â~¾î¼Êÿpï›á9w¥ P ÜèÁ%-8¡¡(ûîZ7K6[ç kÏG k×Wû´ðÒajÉ À;B9hö!†ñ®‚ƒyE•°ÒøB~ßçÃwׇ((/°g);†Œß–[÷”üå|ØbqL’Wo·Ì×§&Bi03î”Ù/JÍÒî„òJ2 (3O?¥÷kÕ°É/öB é·Æ£ä#p/²6O Á8”^ù ûÜjârÎ (MUÀi}ƒ“RW -Í÷üidÄôwèÉB%b¹Hû,7÷ÉؤíîÖÄ7 ¤†0 ŠÄÄbbv”þÛ#ñ¼4g+Œè‘­þíî¦é«þ.j2R„üWB:xÔ”Hßá­“þÊwûfø××Õ€bMJI¸ (CÙ”ü´ŒI[bɉè@Ø´§ð2ÿgégÚ@è´†ô’‰½!¿ž´¡õ ¢ÆtíÊ ÈømóÜ(ø Äb’ZCI_à”6ÃzñNøbv^ Ýþß/Xþ£ˆ¤ ÕûÈ@S“QÀ-Hoÿ ”Ø ¡(&~0²ñ7ýÿèHå%TÎ×Ë™¿;)MYγVÊU6ÈÛm¶Ù¶ÊÛc6«½è«å+>ÏŸïö7ìÏØSçWtJ¯”¥"*û{7;­MŽQî³Ê]6ÈVÛ/õ)¿áý|]]%|¥+úää²wS1Ÿ7ÝÿÝÖ9JhоŠVw3ì¼~u:ÍÇã¹k¢ß¯3fÌ·[­Ä6eDUõÒ”œUò•›3¯÷┬¬Ø=oßÕÄUò•›3ž¾çþfÊsŽ;)×Lë}RÝócÕ™n¥©rо|ìz»ŸñŸ-<î§]])8«åfî<ÿ—¾;±¤îwËÕtˆ«ågví·ì­ûoÅöì%½]"*ùJVo»í÷nÜWmÛŽWÜGˆ«Ü¢FWζO¿_Îÿ(WlvUEfu¾Ç©nù±êÌ·RÔº¹E_)JN*ûýY›7uºÝL!»®®•›ä¯}×ò–½Ûàî®.QW×JRqWËX)jÝþï×Ôžœ¾ü#÷F95’’Š¿ÒàܘP`gXN ܽÓ×ÑùÊéÛ}ö|¦Íî )‚2¿NVWîÿ ïßšþNíÛíÙ_çÛ‹ÏœCêº{ί•›îû}Û·Ûvã•÷êéi*¾R”ˆ«å)HŠ¾Ï²UöëÝk^ï¸w^WJDUò”¤E_)JÍòvûï¾}ò÷ÜÝâ*úéYó²þn)jêïƒÔÝõ\E_)JDUö2ÿ~vR›³f­”ªºÏò7ÿí¶ú¶Øßêå|¬eþµíì§0ìzùüÓªé8«å)HоR³wsÕØïŒÝNyçå:©ÝM±ë[6nr»­”¥.QW×JRqWÙþFÿý¶ÏÿVÛý]+;·m¿eoÛ~/·a-å}t¥'|¥+6açþ¿ùýÍ'c¶Vˆ«çìgëÇ1¼õüqüÖ:›äí÷ß|ûåï¹»ÕÒQWÊVwS|zÔ¼Ëe­J¦u¾Ç©nù±êÌ·RÔ¸Š¾wnßnÊÿ>Ü^|âUÒ±³þÙþÛó~ÎÙÅ?a1}t¬Ù¿¥efÁë~þ®qWØùþ|ûoñ»wnÂÛ°ŠlÎzûŸù›)Î8ì§]]%|¥)8«ìî¦øõ©ß79y–ËZ•WJDUò•›»ž®Ç|fêsÏ?)ÕWWÊR³ñ›þêέÿÙÿ—W͘ß×ÏcyÊØã±¬|éÛ¶èŸlËß¿3ìÌýÚ¢’оR”œUò³üÿûmŸþ­¶7úºDUò”¤E_)JDUò•Œ½ßÔ¦ç,çQ‹e®®"¯”¥gù ÿeìµ/öØ?« ˆ«ë¥)WÊR‘|¥)WÊR‘|¥)WÊR‘}Ôßµ;æç/2ÙkRªéHоR³l…m²ÿR—ûþ×ÅÕÄUò•‹~¬Í›ºÝn¦Ý×WWÊÌíŸïÙfßŠÏØCúºDUò•›»ž®Ç|fêsÏ?)ÕLëR™³c×Ýnµ)RоºR“оR”ˆ«å)HоR”ˆ«åfu¾Ç©nù±êÌ·RÔººÅ¾VfïÝn¦S ~ê”UõÒ•ŸnßíÛ¾ÛçÕþç}uéí›}¿|‡ZÛóŸ~s¶ùZ¢’оR”œUò”¤E_)JDUò”¤E_)JDUò”¬lÿ¶¶üß³¶qOØLE_])HоR•Ÿdï¾ß|ßu﹟DUõÖ}“¾û}ó}×¾æ}WHоR”ˆ«ågû6ÿgí…öý°õoÄjo’½÷_ÊZ÷oƒº¸º¹E_+>ÉWÛ¯u­{¾áÝx];™·^?²fs±ØÞ¥UÄUö-úó6lËuºÜCfTé9Ÿî—ÛìíÛ÷;ì5:ª)WÊV|ìz»ŸñŸ-<î§]\⯔¥"*û7·Î¼ëßpýÛátÝöÿ|øîÏ…vÿ(Wú®’оÍòW¾ëùK^íðwWWJN*û?Ù·û?l/·í‡«~#UÒ‘z¿óý+3›÷_;2Fó±üÞµUÄUöm­¶_êRÿÃúøººÍòW¾ëùK^íðwWW(«ågìǯ±ß™úØãêuUÖ:þZ¶çv[šw9xüiñ}t¥gì<ý•¿?±„þvË󊾺R‘|¬lÿ¶¶üß³¶qOØM]"*û3›¶_;ºFcñøÎ¥ÕÒ‘|¥)WÊR³öcרïÌýlqÇõ:¢*úéYóï·ùñùŸ ϾP½õ\E_)JDUò•™ÍÛ/ÝN£1øügRêâ*ýiéÝ Ýû3q.7>Í·?7íŸY)IE_)JN*ùJÎêoZós—™lµ©Uq|¥+?mþß¶;3ñYþËöˆ«ë¬uìÜîµ69GºÌS)utˆ«å)HоR•‹~¬Í›ºÝn¦Ý×W×JR"¯•ŸvÏ·Û›·gÎ-³ˆ«¤E_)JDUò”¬Ùœõ÷?ó6SœqÙN¸Š¾ºR‘|¥+ùy›¾eº™n%ó."¯®”¤E_+6g_ïÅ)YY°zß¿«¬ÎoÝ|ìÊuÎÇózÕ(«çí¿ÛöÇf~+?ÙbþÕt¬ÝÇŸò÷Çv4Îùz"¯®”¬îݾݕþ}¸¼ùÄ>œUõÒ”ˆ«å)HоR”ˆ«ìÙ¿¥efÁë~þ®±×òÕ·;²ÜÓ¹ËÇãO«”Uò”¤â¯”¥"*ùJVo’½÷_ÊZ÷oƒº¸¸Š¾ºÌëR™³c×Ýnµ)Tÿ#þÛgÿ«mþ®QWÊõ'šÀ{³°vNn/8½Q^WéB?Íþßå©ñËÈá{qQ}¥'}Ÿ±Ÿ¯Æó×ñÇóXêºR"¯”¥"*û>ÉWÛ¯u­{¾áÝx]]+6ÈVÛ/õ)¿áý|\¢¯®”¤â¯³a›lêÌ¿ÿýÿ×WY³?õÿÏîi;²µ\¢¯”¥'|¥)WÊR‘}Ÿ³+÷â”®¾ü9OßÓ»vûvWùöâóçú®’оR”œUò”¤E_fï·ûçÇv|+·ùB¿Õt¬ÎnÙ|îêuÇã:—(«æî<ÿ—¾;±¤îwËÕu›»ž®Ç|fêsÏ?)ÕWWÊVglÿ~Ëû6üV~ÂÕÎ*û?c?^9ç¯ãæ±ÕuŸ±Ÿ¯Æó×ñÇóXê¹E_)JN*ùJÍÝÏWc¾3u9矔꫈«å)HоR³ì÷Ûï›î½÷3긊¾Ïœyû«üws øï•é»íþùñÝŸ íþP¯õ]%|¥)8«ågì<ý•¿?±„þvËõtˆ«ìîݶý•¿mø¾Ý„·«¥cçÙóýþÆý™û |âe}t¥'|¥)WÞýt¯ìüb:Û-‘†ñ~¢””Uò”¤â¯”¥"*ùJR"¯”¥"*ùJR"¯”¥"*ùJR"¯•›1¿¯žÆó•±ÇcXú~Æ~¼sÏ_ÇÍcªå|¥c¯fçu©±Ê=Öb™K«œU÷–œR:{ý€’žÿÕŒ¿Ö½±ý”æ_?šu\¢¯”¥'|¬Ù¿¥efÁë~þ®‘}Ÿ±Ÿ¯Æó×ñÇóXêºV|æü¼sÎ^çÍc¥}t¥'}޽–½ùÝ”ÆV?˜u]+>¾î¼Êÿpï›á9rоºR“оR•™Íû¯™N£yØþoZ¢*úéXËýkÛÙNaØõóù§Q׳sºÔØåë1L¥Ê*úéJN*ùY°Í¶uf_ÿ‡þÿ‰ë«¬ÿfßìý°¾ß¶­ø(«ë¥)8«ìù÷ÛüøüÏ…çß(^ú®•™Öû¥»æÇ«2ÝKRå|î¦Øõ­›79]ÖÊR—FÏ»gÛíÍÛ³çÙÄUÖglûnËÛ¾ÜWlâ[DUõÖm³ý¶~ü_mŸVØF«¤â¯”¬ÎÙþý—ömø¬ý„?«ˆ«ågùÿöÛ?ý[lo÷w€œ0 Î[•²F|ž‡}×·ÉèKgÿ#þ¯˜nk¬M >FÙ8–¼íöXÒ¿¹@`½²{§¶–®lŽà©Õþ3ü…ÿ²öZ—ûlÕ…Ñ׳sºÔØåë1L¥ßN 1îQ)Ó€Ây@UiI`Ü•±Im‰}¤’ßeXqIIh%$ †ÎIý`‚gwÉ)Ÿ•çìò Üà#:¿ç”¾†¤šBŧôï÷ܯßt£ä€ 3ÿñIà jû2õâÊ&”ðÎ7|ù(ß•ó°vîc¸«o¥Wà¬ùÇŸº¿Çw0ŸŽù^®–ò«å)HоV|ìz»ŸñŸ-<î§]7qçü½ñÝ's¾^«”U÷’_oó|ý„vÏ›ï•þ½ê)HоR”œUò”¤E_)Y»º¾n)jËÍÖÝõ6ÈVÛ/õ)¿áý|\¢¯‹|¼Íß2ÝL·ù—WYó?uŽîa?ò½?ÏŸmþ7níØ[vW×Jž^fï™n¦[‰|Ë«œUò”¤E_)JͲ6Ûm¶m²¶ØÍ¢*úéJDUò•Ÿ;®çügËcÏ;©×WWÊR‘|¥gÃwÝ×™_îó|'.›äí÷ß|ûåï¹»Ê*úéJN*û?ÏŸmþ7níØ[vz*ÐŽ¬5?tt%%’€Ää$cô­nIã3ç÷ñ[#?ùä;¥9 jzúöÿóúýîÃ@v„g@ › ²øÅ±A©)‰Å¾ýäíðÇç5ɰ“ÖEÏU_ïÊÚ@©+baA½˜†)<0±»~¾É&#l”æÌ^nX@Å^<™’CAEg&rúK,¾ I5GèÊÝ–ÿ¡Òù­‹¶µ–Bø´ùhÙ;!zS’ä²nB0Ò„”0­¿o¶› Ho,šJ/bÒŽŒŽœû²Œ‘…6Xie­(AjlÉ÷ެAû0³Ý¥_ 0 30a0²ß°fØ ¤„ ‡“²Füåt/o’Ùõ× !$ ä”é±|1¢YX æ@Ì4ÎPÈK’ÕñB®! !‰AI)†#ñ(7~4¼ŒVC2F–Ž_ïÃSÐ19c=ãƒÒ„·ü5;þJÎѰ×Á›!<¬èXϾ·ý¹ pðSWý†0˜0…ønÃrºÿJy )(5D¤' ËCnŒý½êA è1…$4´$˜ü¤†#d³#bÒX ’Ž0´¯€¶2üêYX7 NBQøJ»ãS»wûXV Û|ù׆§)º¾ÊNçt$#ãí·[â}Ÿ?ßìoÙŸ°§Î&®“оVo’½÷_ÊZ÷oƒº¸ººDUò”¤E_ÒOé) (éÎJOC'ýÀ·_¿$-_ßCŽ|”8gå–Zpi`6A1 ËƒwèIx1òZY¿Û^,<¼„ Á9’ÿÏ“ò23‚ÛÿŽ ×¼€ad/‘˜!–RPJd“9iø3rQ459òÿØ5}ö{ËÌ?à·qçêêþ`a(„á¥èHNø¾^%’ñOËtô€ßtrRþå) MìɪÜ03†%†§öÉ…#~’c 3 Nè@`GÛü’ú.Po+“:J)¡…nK, üM@fA[Û~·J iÛÿ‘ýÞÐ5(/†£ºPZp˜(å¤kpÏÒ?C ã6Â.ýoÌ>º¿çè ø´ ¡ˆ,3[†}’°ÀÁ¿ 1;bÆô> ÌþñBr)|0•˜#3fûì ŽÆ/3¶¯ )(ÿþÙ/ÉC†Ý]­|–ý#R¼ÙW&ö¿"À_)J]4Õú )¨JŸ't|¼ûæç.û8JàP “0bwbP&lrØ´X(3ºS›edíÚø…é@v ¿·ügQhº7›e ¶uqŸ­ÚâGQª¾h’Y0—Ð3¥)ü ”ïÌ,¥}°Fuí˜ËÍ_wq0 “rC~/†–”äbZR0´££â²Ï|ÅnĿљ ×Ã?açì­ùýŒ'ó¶_ŸÀ2оºÇ_ÍÎËSsÔ{¨Õ2ÕWK²š¾R”ˆ«ågví·ì­ûoÅöì%½?c?^9ç¯ãæ±ÕrоR³öcרïÌýlqÇõ:ªç|¥)WÊV~ÃÏÙ[óûOçl¿WWÊR‘|¥)WÊR‘}›»ž®Ç|fêsÏ?)ÕWJÍßo÷ÏŽìøWoò…¥}t¬ùÇŸº¿Çw0ŸŽù^›dm¶ÛlÛem±›DUõÒ•™Öÿ¥3fǯºÝjR§}t¬ùÍùxæ3œ½Ï;šÇUÄUò¼ ¦Ê@ßÛ+?îžÃÿ_áþ¢Ö€–Oß}¾ùÒÎëWÈuå'㗕銿݀kùc>rö&älJpÍÆtt'âÑÒ7§¡Ü >Å%—4®Å%þ^nRKã;ÜXi5 ðiÝ\¡½ÑïJ!!ºJᨠüjCvïЂ‘øjR—Ãxa…t§#²„®î%)&'ZžRRÊHnÿ’· ÎΞœž7†ô”ÉOÑïX0¼KPÀÒÒLNèΞ”„ @Ã/’€\”ò;¤ËÁ'ÿÊè G/'|Œ¿¸ÔòßÞä˜B,4¢-% ¬ÒJéB2?Ì” 0¢Êì04'Z6ýõó@'Ïå|È/älß’ÃWöHiX' r’4n çi¥]G¿ o‹¥)}•_)JDUòÞM)¡‰BPKßwB–+?ÛqÝóslH†MÄ Ä—ÛŒB~ÎÃzÒØ[nF>*ÿ¢Q(?””¶& ²hGJ:2J%á£R’û3 Ãr;»ß0Û캲»ºÌ?÷we÷r}ïܼ”€ß ¦Øho%WJ:WOHÁ™f±]) é+f{À ÒÈÙÿî­±¿ý™Kã‡Ü‡â6 UW¦u¾Ç©nù±êÌ·RÔººÌíŸmÙ{wÛŠíœKj»¶š¾Å¿VfÍÝn·Snë«¥'|¬îݶý•¿mø¾Ý„·«¤E_cgݳíöæíÙó‹lâ)û?eoÏìa?²ý6ÈVÛ/õ)¿áý|]7É^û¯å-{·ÁÝ\\¢¯®”¤â¯³ì÷Ûï›î½÷3ê»Y#ôôeô#}¿ÿíŸ7ü~Ùo—d”Uò”¬û%_n½Öµîû‡uásоºR‘|¥fv϶콻íÅvÎ%µ\E_gϾßçÇæ|/>ùB÷Õt¬Û![l¿Ô¥þÿ‡õñrоºÌæí—Îî§Q˜ü~3©utœUò”¬î¦Øõ­›79]ÖÊR—WÏÛ·íŽÌüV²Åý©ó?uŽîa?ò½]fÙ Ûeþ¥/÷ü?¯‹”UõÒ”œUÿaĤ$šÜ—†ò±i(1%—ƒŒŽ5() ä¼–Ù)í‰IÏýÞÄ. t %`”bfÄ4¡?•Ø’Hax®ëȱ[÷ßß8Ž-Å”\gØ3—ÝÓ÷K! G,¼Q,fÁ¬˜f6õ  ˜LJ'âŠÄ¢ùðÒ²RKÈJ’0¦FÝÇ^în4õÚÕüL‚ºSƒCr>GØè¿€),¤“JFêß1X m†ô7kç»dm¶ÛlÛem±›^£!?'ð2~O€Ê1(4—ñHûÝú HÇdoŒ{Éވݨ«å)K®š¾R”ˆ«åì1å€TXÀÄ—Æ”3û«£ïÙ“™9yÙo×–/üñ‹á*Çí²ÿøæu™Î½ÂI©&òʧ%Ùˆ_o²†ç!ŒÊI{’Ñ·JWß·k—2ˆµUú`¤bÑÃI„‹ØnA(¡»þå1]99öÿKÈ×ÏÝ+V?2úòŸð…|¶ËvËΫX`g(òÒ[m7­†#q¬¤ÿ÷Hßk ß/3wÌ·S-ľeÕüªúéJ]«å)HоR”ˆ«ì[åfnýÖêe0—î©Æ¶t²Ç©}¿²ú”?¶y?Èßÿ¶ÙÿêÛc«”Uò³üÿûmŸþ­¶7ú~̯ߊRºûðå?WWÊR“оV‘¿ÿm³ÿÕ¶ÆÿW^Io¿ÍûæggÍß;:÷Ìí–ÒŠ½6ÈÛm¶Ù¶ÊÛc6«¥'|¥)WÊR‘|¥+6g=}ÏüÍ”çvS®"¯®³fuþüR••›­ûùÆçl¶íÛà…:Öã‡õã*%|¥fîêù¸¥«/7[wÕsŠ¾Í˜ß×ÏcyÊØã±¬}])WÞ” Çôu·Üï÷ÎËÝœäïm}h†’WÃ1dņ”î7Ù!?`ÀÀĺY+t¡.ËvÚøõy{¥nήyÆ·ß}Øïººî}ÃÎ_õÐy3¡úS‰»„(01¥ôd¤­Â8ÒÒäÄòZ¶lϯ•M $'sÍZ™l{/}Îûï•õív hiH%pÁ»† GÝÄ”ËèA+ ìéÏ¿nÆ_CB@vL!ôSùa¹úKGb’J,b’¿á?—‘‰Ÿs™n‹Îì9±<Âuç×ÏóçÛÛ»vÝ„UßY(Ït¡((hJP45 •ñI(%(FãrxÅdæÙ8ÿs@¨ÜBÄ´lYOŸ²PI É(­þoÒã9Íóü÷a*š¿çŸä/ý—²Ô¿Û`þ¬.Ÿ³+÷â”®¾ü9OßÞа¥€7Èã8a/`0ZFoß%)ß#„3†e¹éÈtÞÓK&òˆx5ÿC‰Ÿ¤43$°Ô’÷èºlÝ¿Ùü1†Å_ÄHoå °€ÔÝ%œ”rË%“{ŽZ>b¸Ï·mùNù]”  1i!¤´€oñ/>èã?û¡ ñœhnýÜ^|âJ*úéJÏömþÏÛ íûaê߈ӊ¾ºR½].s©F6Ýnfo”UôR”œUöglÿ~Ëû6üV~ÂÕÖ|ãÏÝ_㻘OÇ|¯W(«åÝ<(jS¿GK¯ ß?GWì7 è~„ô¤nïp©KÅ_êI 0 Fؘ€ÇO ÉBÇéG?møÇïò»ç°T„dvå–€²KOýÉC•°ÜIlζ{‹J\ž|êþ±„‚°FlÈÛ#}Ÿ ô²~Ý)ÿŸýÉ¥+yUò”¥QWٜݲùÝÔê3Æu.›¾ßïŸÙð®ßå ÿUÒQWÊR“оR•›¾ßïŸÙð®ßå ÿDUñ—ú×¶?²œÃ±ëçóN«¥gvíöì¯óíÅçÎ!ô¢¯®”¤â¯”¥cçÙóýþÆý™û |âb*úéJDUò”¤E_+3¶¿eý›~+?aêéWÊR‘|¬eîµoì¶0îr¹øÃêéWÊR³»vÛöVý·âûvÞ"¯®”¤E_+>v_ÍÅ-]]ðz›¾¦Ìoëç±¼ålqØÖ>®QWÊR“оR”ˆ«å+>v_ÍÅ-]]ðz›¾«ˆ«å)HоR”ˆ«å)HоR³»vÛöVý·âûvÞ®"¯¿£|œœ“>ß37Ç/qnxêŠRQWÊV2ÿ~vR›³f­”ª¹Å_)YÝ»mû+~Ûñ}» oWWÊÏ—óqKWW|¦ïªéWÊR‘|¥)WÊϜߗŽc9ËÜó¹¬u]"*û?Ù·û?l/·í‡«~#UÒ‘|¥)WÊR‘|¥gÎoËÇ1œåîyÜÖ:®"¯³wÛýóã»>Ûü¡_êºR"¯”¥"*ùJV|ìz»ŸñŸ-<î§\E_])Y°Í¶uf_ÿ‡þÿ‰ëˆ«ë¥+3›¶_;ºFcñøÎ¥ÄUõÒ”ˆ«å+ß÷lÿ}»¾Æ÷ní¹Šu>¨”Uò±—û󲔨õœë5l¥UÒqWÊR‘|¥fu¿Ç©LÙ±ëî·Z”ª¸Š¾R”ˆ«ågu6Ç­lÙ¹Êî¶R”ºw3ì¼~u:ÍÇã¹k«”Uög7l¾wu:ŒÇãñK«¥'|¥)WÊR‘|¥)WÙû?eoÏìa?²ý6m·ÿ¶?³ñ}¶Ë¶«¬ÎnÙ|îêuÇã:—(«ë¥)8«å)HоR³fuþüR••›­ûú¸Š¾R”ˆ«å)HоR”ˆ«å)HоR³l¶Ûm›l­¶3j}“¾û}ó}×¾æ}(«æÌëýø¥++6[÷õt¤â¯•‹~¼Í›2Ýn·Ù•WHоV|7}Ýy•þáß7ÂrêéWÊR‘|¥fî竱ߺœóÏÊuUÄUò”¤E_)Jž^fï™n¦[‰|ˈ«ë¬ØfÛ:³/ÿÃÿÄõÕÒ"¯”¥" Hz¿óý)Yó±êîÆ|¶<óºq}t¬ÎÙöÝ—·}¸®ÙĶ«ˆ«å)Yû?eoÏìa?²üE_]+ùY›¿uº™L%ûª®"¯”¥"*ùJR"¯”¥"*ù^”ŒGês°ÞÛþ­»?lwQIE_)JÎæ}—ΧY¸Ã¹œ|⯮³ý›³öÂû~Øz·â5]"*ùJÅ¿^fÍ™n·[ˆlÊ«ˆ«å)HоR”ˆ«å+;©¶=kfÍÎWu²”ª¸Š¾Vm³ý¶~ü_mŸVØF«¤E_+>s~^9Œç/sÎæ±Õtˆ«å)HоR”ˆ«ìÙý|ö7œ­Ž;ÇÕÒ‘|¥)WÊVnû¾|wg»‚¿Õq|¥)WÊV-úó6lËuºÜCfU\E_fû¾ßvíÅvݸå}Äz-úó6lËuºÜCfU]%|¥+?ÏŸmþ7níØ[v8«ë¥)WÙó?uŽîa?ò½]c¯å«nwe¹§s—ÆŸW(«å)IÅ_)JDUò”¤E_-i-løoÜbd¥³üþr66ÉYðÝ÷uæWû‡|ß Ë¦*úéJU|¬Ùœõ÷?ó6SœqÙNººDUò”¤E_)Yûoöý±ÙŸŠÏö ûUÄUò”¤E_b߯3fÌ·[­Ä6eUÒ‘|¥gÙ;ï·ß7Ý{îgÔîݶý•¿mø¾Ý„·”UõÒ•›¾ßïŸÙð®ßà¯ô⯮³¹›uãû)Ög0ìoWY¶FÛm¶Í¶VÛ´¢¯®”¬|û>¿Øß³?aOœL⯮”¤E_)JDUò³fs×ÜÿÌÙNqÇe:êë6m·ÿ¶?³ñ}¶Á[iE_])Y³ýû/ìÛñYû8«ë¥zÝûsÔ¯Ý[ãanª‰E_c¯fçu©±Ê=Öb™K«¥'|¬û%_n½Öµîû‡uáutˆ«å+?açì­ùýŒ'ó¶_¯ßöùþOpŽŒ0Ì1Ï?%yúÔÔÅ_’•‹|¼Íß2ÝL·ù—WTUò”¤E_)JDUö6}Û>ßnnÝŸ8¶Î"®”ˆ«å)HоR³9»eó»©Ôf0ügWWÊVlÆþ¾{ÎVÇcêâ*ùJR"¯”¥"*û>v_ÍÅ-]]ðz›¾§Ï¾ßçÇæ|/>ø/}WIE_)YÜͺñý”ë3˜v7Ž«œUò”¤E_)JDUò”¤E_+>v=]ÏøÏ–ÇžwS®®‘|¬î¦øõ©ß79y–ËZ¨·ËÌÝó-ÔËq/™urоR”œUò”¤E_)Xùö|ÿ±¿f~Ÿ8š>}Ÿ?ßìoÙŸ°§Î&QWÏØÏ׎cyëøãù¬u7·Î¼ëßpýÛáutˆ«ågs>ËÇçS¬ÜaÜÎ>®“Š¾Í˜yÿ¯þsIØí•¨ËýkÛÙNaØõóù§Qײ׿;²˜Ó±êÇó«”Uò”¤â¯³l…m²ÿR—ûþ×ÅÕÖ~Ûý¿lvgâ³ý‚þÕrоWÿòQ¶=ÿ=[ oþWùóüuE"*û6açþ¿ùýÍ'c¶V§s6ëÇöS¬ÎaØÞ:®‘|¥)8«å)HоR”ˆ«ågu6Ç­lÙ¹Êî¶R•W^ÿ¡Ñ—óì—AŠÝóáj|:QWÑJRqWÊR‘|¥)WÊÌíŸïÙfßŠÏØCúºDUò”¤E_zÒƒJÿñÑþá5¤¢¯”¥'|¥)WÊV~ÃÏÙ[óûOçl¿MÜyÿ/|wcIÜï—¥}t¬ÎoÝ|ìÊuÌ?›ÇUÎ*ùYoñêS6lzû­Ö¥UÒ"¯”¥¬²ÐÃ~Ûþ¿öÙ‘ÓÿŒÜçæœòоŽêoZós—™lµª®ô aŒî,Å£Pߨ¾€æÿ èK·{ЖxfÃw(–ÑÃXÀŸÊl¾ãÛðÅ/'”ß\Ã8±-U_óÚ^À  I… 07Ã’†ICQØ´á»% {ì„å³ñwž &†\”œ–eîùfîwÊùòŸ|~öñ’«ðR³|•ïºþR×»|ÕÅÕÛJ¯”¥"*ùJR"¯³q»|ëν÷ݾ×WJDUò”¤E_)YþFÿý¶ÏÿVÛý\E_)JDUò”¤E_)JDUò”¤E_+6m·ÿ¶?³ñ}¶Á[jºDUò”¬ÿ#þÛgÿ«mþ"¯› ÛgVeÿøïøžººR"¯”¥"*û3­þ=JfÍ_uºÔ©÷ãS¸¯‚>mÌs¿}Îfß>7ÔRQWÊͶ¶Ïß‹í³ñêÛÕtœUö:önwZ›£Ýf)”º¿ö^ËRÿmƒú°ºlÆþ¾{ÎVÇcî°iep3º1HéÉ|ÿd2RPÏËÃ7oÛuªÎu}e“qX¿þù êHB6GHß²B[Ù·ù³}«–”ÃH@a?d‘Ü¢¸×£$oGÄÞŒòJ+å Ö@€Ä°2cy-°f’ТÑà HÌ’ŠOÈÿoòÚÂQ7w䢒咑‰I IY#xBù4–S—‹~ù!¬žw¾!'ãÄ«b ­_Ý!†d/—ÀnQà ^+Æ$ 3Ò5(ä¤2JOO,%’çÔÙÜ”J Oû9›ö% rRKݧ—Ý%–ãxÝ/ïBA|‡¸Ix˜ŽŸ’‰H&· °b3m†?ÙNÿ²E³ffÝ ð÷w~}ÖK;p©«þªL8 ’MÉI}ú„í‹ÁŽ”ô’ƒ]*ýñA™øk½òì^éß%¿nnÝŸ3îg=öùö{ÝP‰¥ü€Ìœ7—ŠmÆ¡¨¤þØ7ä§oöÛ¦ö¼a€Q‰¥¡©J22qcKFå/º@mß²_b½ŠÓ±­€çWüDaÏÿoþ[êìÛí»gs·=uH„MA ¬Z>ûì¼ìí¿oòŽv=÷o¾¹·±ÕgWÊR•Å_+ùY›¿uº™L%ûª®‘|¥+7ÉÛï¾ù÷Ëßswˆ«ë¥)WٰͶuf_ÿ‡þÿ‰ë«¥"*ùYþÍ¿Ùûa}¿l=[ñ®‘|¬eîµoì¶0îr¹øÃêéWÊR‘|¥)WÊVnîz»ñ›©Ï<ü§U7;-MÏQî£TËT¢¯®”¤â¯”¥"*ùJÍÜÏ—Ïc9êüóñ¬}\E_+?f=}ŽüÏÖÇSª®‘}ÿý÷0ï²?ïþÛ¨í–êûkëUÐ r9l€ÒQ@e9$¾„ã€ÂR Aid§3%;¿¾N_Ù ý$¬ÝÒ …½ò^kêÀ;GA47¤ay)‹,`ÀÄ$˜Ê,¼„$3d¥’éBB?½æ¡¾"õÕý‚94¶ Ť4††“öùÊû,°Ç[¡8 ot|ÞâàÄà†ô>?þ‚ß%)G@a5”‰y’¾/§§¥÷¼¹4²¹x°•ò7,®‡)_:R3t# 4hÜ7eìÃ}ô´¤ âða| ×Ý ,…ÓÑ‹,¤dð0ž”ì’’¯Ñ“ù'¶¼Üß6øÅ]_ò roF%”÷H@Ô%ÓÜ$3£Œë é ¼õ¼˜ŽQHCm¶FÈÏÆl˜oZ[ºÛ(Ëïö²«å)KYUòô T˜K/'nù ol”>Gûb’Z?@ÜZ:Ýl«ÍRÏN¯û0 †€À°1Ê è ã ]? ß2W,~¢ö+tbÔ”¾í|>úHðÌœ‚ÒÜ rZ6FJxcSº r•™9=NÈmϼ€ K&#í†3׆••“ÑÊ(cŽÙ˜î× Žºªþ-+ò_«vZþfû³7n³>Íöw:LëR™³c×Ýnµ*ôh«ë¥)8«å)HоR”ˆ«åb߯3fÌ·[­Ä6eUÒ"¯”¥"*ùJR"¯”¥"*ùJR"¯³;gûö_Ù·â³öþŸ>ûŸ™ð¼ûà½õ]%|¥)8«å)HоR”ˆ«å)HŠ¿xjP„'¥ò ؾÇ?äŽ5L¼Í÷e®úß &’à œ0„Ž€ K , !ºSûl“†b‰yݳ_:A+dì^|”†·/#ål3ãzÛöíïB¢€3ƒFXÄp݉]!)$—ýú?&¥)û%(ûyYß2ÌÊXàêêýÄÀÀÒV§¹nÌZ: ã - ~—èì4¬Zø×䋚 -(ÈèáƒP’·+# ¤d'ý‹/$”†³’Æ+}gt†”0›ÃSþßòŠ-¤ô[£r·ã3dwO%ä:2d&Óñ`còRIY))%¥)/á%$ä O/%÷éw{$ý¸⇠ÕþL¢‰HÈ”¶ÙÒß«l¿¶wgÿ­ÿ²R—³gWÊR“оR”ˆ«ý`(å@Ô!eŒOFÙ OÇ$fÿäô—²TýW¥»–i4 –ÓƒF'?åvGÈÌvÿ'¶ÄŒIy  Y(¾¡‰ËVøylQû|5; Èëûoz ³å 03%%t'ºòú>&`‘ÈC„ï²Qïqì`å¬M¥_ó*V2ÿ~vR›³f­”ª»Ø³«å)HоR”ˆ«å+>v=]ÏøÏ–ÇžwS®Ž¿›–¦ç¨÷QªeªQW×Y¾ï·Ý»q]·n9_q®“оVg[ìz–Ëu-UuÌû/N³q‡s8ùE_])IÅ_)JÍ÷}¾íÛŠí»qÊûˆñ}t¥"*ùJR"¯•Ÿ°óöVüþÆùÛ/ÕÒ"¯•Û¶ß²·í¿Û°–õuŸ°óöVüþÆùÛ/Ê*úéJñŒÃgÿæ=ßöo›ô÷ýn±ñ}¥'Ñ@¥ºSò A» ‘…—Æ|„ŽŒßdà”ãݺí„Âú „ÂÒø  ­Š(´ä¤¡…#ô ³:K£!;dþ𥟆'£òvèùבÊNH×o“Û6û=ô§$ÔþK!,aA‘°Ý› ²PÄdâº?%FwtÞ*Û`þÄ~»J¿KÁ„ÒSøÀ1Ý)AY;>,´öGK`Á¼oéHÎ3ï4VBIh.^ÙƒzX”WÛ/äôvý9ä§§Y×¥¡¼²‚òJı¥%(䤥(Nû¿ANW @Äýû–¾{›¥=n­Ük)jÝF¯áªÝ”ÊiUôR”½:*ùJR"¯”¥Ò&Ê!0ß³ó~Ê}ºÿm³çÿŸöËûRϬ~@éÈ/!ÿBxFG߆§wûïú É-M¶w°€™Rz?&¥ÒXÖ BK%¯¥ Á¥=»+ômïnXxÔ“ ª,g ÉÅ ˜œYE Iy-ºMI+ágøËäᄉˆÈ+ Ûm¶ý¶Îc³÷ïÏæûËgäóxµ¥_‚•›Ûç^uï¸~íðŽº»Ö³«ìÛ![l¿Ô¥þÿ‡õñut¤E_+?Èßÿ¶ÙÿêÛc«¬î¦øõ©ß79y–ËZ¥}v¿ÑÊÿþ„t?ýÊû1ÿ«¡°¬•›îû}Û·Ûvã•÷å}t¥*оR”ˆ«å)HоR•™Û?ß²þÍ¿Ÿ°‡ñ{ô²Q›÷uì­±¿œ;lÛÔR’оR”œUò”¤E_c/õ¯le9‡c×ÏæWJDUò³l¶Ûm›l­¶3jºDUò”¬lÿ¶¶üß³¶qOØLE_]í¨H B1H IIG(´· È VÊK¥ÕÙ.Ï—y.‡ëý”­Ù¾îÝû}™¢pÜßdîù;Žû˜ßw9»*ÇyÕÿ¢@ ©Èü™ù ¡9¾(´ô'ôdp„ý¶A+!™##·¾.† é/d b@ÂrRÿéIJËu,jÆ«?ö€€˜0²’–HÝÉy(t–øòVý†üŽc!‰¯}ƒ &r‹¤ Àž[•ö/%)Ø¥<éÁ›ìòî[¥µãº·"18åÚUÿ¥õäÔâ·&dþÊÁ¬_Üg͹HBRJN-#‘²Ò1ZòÈ _§È ý Éý Cß nì7`äýþ]éôQWùz^ ü™†‚ºpÌ€2ŽS°ß÷Êï†}ÒgÊÝ-îñ èb^Gù;£ FéÅ ¿ö o·J6döÝ¥~ï1œqDUþ °Ô77OB9cŸ¶'?9üíØï}$`”Äbi) á¥|²j>ÌÅ«—~‚Ðß8cýߢéÜš‰i+ä€ßl’P@`À,žV¿-’Ð…wÝ9¶¼™„0„„”‚Pœ’Ïn’Æ•úRJFJwVß’Ÿm޼öZ»¨ð6êU^€0‡&Ù\1+I5³#ÉIûdòú~Ì”Ÿ x´!#!¶=ÿ×ÿëÿ¯õúÀ°aH+;ŒŒç¶ÌºŽêmZÙ³s•Ýl¥*ôú_þ@¢¯®”¬ÝÜõv;ã7SžyùN«¢U{äï‘Ð’nûægÜõî)Ï&Ìoëç±¼ålqØÖ>®’оR”œUò•Œ¿Ö½±ý”æ_?šu>ÉWÛ¯u­{¾áÝx\¢¯™Öÿ¥3fǯºÝjU])8«å)HоVo»í÷nÜWmÛŽWÜG«¤E_)JÍ›mÿíìü_m°VÚ"¯®”¤E_fîgË籜õ~yøÖ>®•Ÿ±Ÿ¯Æó×ñÇóXéE_])Y°Í¶uf_ÿ‡þÿ‰ëœUõװܱîÇåwG^ËVâ¹Þ¢’оR±³îÙöûsvìùŶqÜnß:ó¯}Ã÷o„uÄUówsÕØïŒÝNyçå:ªéIÅ_)JDUöwS|zÔ¼Ëe­Vä“2YÒ–ÉÉïŸ'§/ᤖìí†m”ûÜÚRñWú Š!¸ÖϲöÎãQût'rQYº:³îò@0(j fà ã>Åb†íÓÐJWOê æî‹Â}“¾û}ó}×¾æ}Wc“ðð¹ÕÿB6 FèÉĬÁHO 3¬aiľ’ú~ä¶Ût÷íd ¸¤7-<²Ûa­³mó`ÍÆðÌx>nžÌÈkÄR Âó«÷ ˜„`ÂNfã[súTߥ}#ÿö R馯•Ôßµ;æç/2ÙkU]*оVo“·ß}óï—¾æï:Y_º¾fRö?,Õc̨”Uò”¤â¯”¥c/wçu)¹Ë9ÔbÙkˆ«çÙ;ï·ß7Ý{îgÕu‹|¬ÍߺÝL¦ýÕW(«å)IÅ_)JDUò”¬ØfÛ:³/ÿÃÿÄõÄUõÒ”ˆ«ågÎ<ýÕþ;¹„üwÊõtˆ«å)HоVm³ý¶~ü_mŸVØF«¬îݶý•¿mø¾Ý„·”UõÒ•Ÿ ßw^e¸wÍðœ¹Å_])HоR•Ôßµ;æç/2ÙkTE_ùY›¿uº™L%ûª®”ˆ«å+?íŸí¿7ìíœSöWWÊÏ—óqKWW|¦ïªéWÊR‘|¥)WÊR‘}޽–½ùÝ”ÆV?˜u]c/wçu)¹Ë9ÔbÙk«”Uò•›îû}Û·Ûvã•÷êç|¥)WÙóï·ùñùŸ Ͼ ßNÿvøþÙŸ˜ïÔÈ7Ç-ûTRQWÊR“оR”ˆ«å)HоR•Û¶ß²·í¿Û°–ñ}t¥"*ùY³:ÿ~)JÊ̓Öýý;·o·eŸn/>qªå|¥)8«å)HоR•ÌÛ¯ÙN³9‡cx芾ºR‘|¥+3›¶_;ºFcÆqñ}t¥"*ùJV}“¾û}ó}×¾æ}W×^’Ðûîîß›ïß»Žù]ê)(«å+;™ö^?:fãæqõsоR”ˆ«å)HоR³:ßãÔ¦lØõ÷[­J«ˆ«å)HоR”ˆ«å)HоR•›d+m—ú”¿ßðþ¾."¯~5öÂ_çÙ¾|Ï»üí׳,w¨¥%|¥)8«ìeîüî¥79g:Œ[-tîݶý•¿mø¾Ý„·«¤¢¯•ŸŒß÷VuoøvÏøŒººÍ²¶ËýJ_ïø_W×JVglûnËÛ¾ÜWlâ[N*úéJDUò”¤E_)JDUöm³ý¶~ü_mŸVØF«¬ønûºó+ýþo„åÓq»|ëν÷ݾ×(«ë¥)8«å)HоV-úó6lËuºÜCfU]"*ùJR"¯¿§²B?c°@JKaA,±U¤¢¯”¥'}޽›Ö¦Ç(÷YŠe.®”ˆ«å+6ÈÛm¶Ù¶ÊÛc6«ˆ«å)HоR”ˆ€ˆz¿àŒß÷Vuoú‡lÿˆË«¥"*ùJÇ_ÍÎËSwuê5LµUÄUò³º›cÖ¶lÜåw[)J]]"*ùJV}“¾û}ó}×¾æ}W×JR"¯³fÛûcû?Ûl±[jºR"¯•Ÿ9¿/Æs—¹çsXê~ÃÏÙ[óûáüí—黹êìwÆn§<óòRоºVlÛoÿlgâûm–+mW8«å+Æm™ ul=ùûà•¹«æÔJ*ùJRqWØ·ÊÌÝû­ÔÊa/ÝUt¤E_)JDUò”¤E_)XÙ÷lû}¹»v|âÛ8ЏоR”ˆ«å)HоR³wu|ÜRÕ—›ñ nú®"¯•›¹Ÿ/žÆsÕùçãXúºDUò”¤E_)Jž^fï™n¦[‰|ˈ«ë¥+>ݿ۷|+·Ï‡+ü#ÄUõÒ•ãvFévR~WêÙ_ç~ÊýùÒŠ¾ŠR³º›ãÖ§|Üåæ[-jT⯮•éKteö_nwá—Ôr”üʉE_)JN*ùJR"¯•ŸvÏ·Û›·gÎ-³ˆ«¤E_+7wWÍÅ-Yy¿¶ïªéWÊR‘|¬eþüì¥6gYγVÊU]"*ùJR"¯”¬uüÜìµ7wQî£TËU\E_)JDUö:þnvZ›»¨÷Qªeª®”ˆ«ìî¦øõ©ß79y–ËZ•G_ËVÜîËsNç/>®’оR”œUò”¤E_)JDUò”¤E_)Y¶FÛm¶Í¶VÛµ\E_)Y³úùìo9[v5«ˆ«ågì<ý•¿?±ŽÎÙ~®‘|¥+7ÉÛï¾ù÷Ëßswˆ«ë¥)WÙ»º¾n)jËÍø…·}WJDUò³üÿûmŸþ­¶7úºDUò³wsÕØïŒÝNyçå:ªéWÊÍßo÷ÏŽìøWoò…ªë6ÈÛm¶Ù¶ÊÛc6”UõÒ”œUò”¤E_)JDUò•Œ½ßÔ¦îË9ÔbÙk«ˆ«å)HоR”ˆ«å)HоR”ˆ«å)Hоž^fï™n¦[‰|Ë«¥fù;}÷ß>ù{înòо|ì¿›ŠZº»î%MßS;gÛv^Ýöâ»gÚ®‘|¥+7Ýöû·n+¶íÇ+î#Î*úéJDUönŠZ²ó~!mßUÒ‘}™Öÿ¥3fǯºÝjRªéHоVo’½÷_ÊZ÷oƒº¸ººDUò³;gÛv^Ýöâ»gÚ®‘|¬ý·û~ØìÏÅgû,_Ú®³»vÛöVý·âûvÞQW×JVo“·ß}óï—¾æï8«ë¬ùÙ7µuwÜJ›¾«¤E_)Yó²þn)jê︕7}WWÊR‘|¥)WÊR‘|¬ý™_¿¥u÷øBŸ¿«¤E_fÙm¶Û6Ù[lfÕuŒ¿Ö½±ý”æ_?šu\¢¯”¥'}Ÿ¶ÿoÛ™ø¬ÿe‹ûUÒ‘|¬ý™_¿¥u÷øBŸ¿«¤E_fÌ篹ÿ™²œãŽÊuÕÖwnÛ~Êß¶ü_nÂ[ÕÊ*ùJRqWÊÇ_ËVÜîËsNç/>®‘|¥+;·m¿eoÛ~/·a-â*ùó›òñÌg9{žw5Ž«¥"*ùJR"¯³çßoóãó>Ÿ|¡{êºW”œZ7Áù÷o•÷oóî®ß¯J*ú)JN*ùJÎæ}—ΧY¸üw3­t[åænù–êe¸—̹E_])IÅ_)JDUò”¤E_c/u«|e±‡s•ÏÆWY³ýû/ìÛñYûW(«ïù?æKc[/¯sûægÝNµ|Õ¤E_)tÃKmÑ“ÊJs#Œé K·Ù™?7ÿ³öÕi FéFNBvG ÊĿЃsºs6ï銿/Rƒ1+AEô§ŠB– JI Û²vvcî)þß~ŽŒ—Ð4çÙþsß©–tšu~JR–’«å)HоV|ûíþ|~gÂóï”/}WHоR•ŸäoÿÛlÿõm±¿ÄUõÒ³fs×ÜÿÌÙNqÇe:éo±ê[¾lz³-Ôµ.QW×JÌæý×Î̧Q¼ì7­UsоVo“·ß}óï—¾æïWHоÍÝÏWc¾3u9矔ꫥ"*ùJÎæm×ì§Yœìv7©Uq|¥)WØ·êÌÙ»­Öêa Ýtÿ!ì½–¥þÛõaut”Uò”¤â¯³}ßo»vâ»nÜr¾â=]fî竱ߺœóÏÊuUÊ*û?È_û/e©¶ÁýX]])8«åz“‡|ÏŸ~öíÛüíñµ”Uò³fs×ÜÿÌÙNqÇe:êé8«å)Hо]`Ò>5›¤ˆý†õ6Û¯¿Á?8Ëx I£JàeŠÉO+4µ ^-?‚@"põ=örfÙä#b’Ô¹C9A…ã:z ,c–€Œ&²f úãËX *«üÊR©i-(ø0; ®–G )<–„•’’òt·RP§FºÅ€dCÿô†’ˆÉÝò•ÐŽ”Ò‘œ™¸Â¶/ŒÇëçà’ :R8èBR„üŒ[í² í¶JøOÿ·ûd=ãVÈ+|€-³2o³eŒWûgVíaþ1j_ö¤€dYa˜i7rb]ùY†qˆAYJ9a¥9HFbÜ5Ñö|þ°4¬‚Q@7éÜ1 B IøÐ/†!‘Ý( Hc|IùH×Á«6ÙþÛ?~/¶ÏÇ«l#Zï*¿ô `²ÈA™<3w+a¨ÉÛüRq[ä£#5C†IEü®×̉€ 4•÷r†q½,K|J0§GO%”ÈC¿OÊèopƒ@LL NJw|žZ“öé%œõ}¶ó}óî}íC@4!C‰…ò€PKÉåÙ%$ ,´fHoéø#;Ø·æuË)}ˆÄ4“9I/ö!•‹o¹47÷,½ƒ”âQM–‹á"ïüì¿›ŠZº»î%Mß]ÔÕõÒ”¶•_)JDUöm­¶_êRÿÃúøººR"¯¼¤ FÊsøÌÛþ¿Ùû?~QJJ*ùJRqWÊR‘|¯t¹Ùœ÷îÌ{ íŸo·7nÏœ[g8«ë¥)WÊVw3ì¼~u:ÍÇã¹k«ˆ«å)HоR”ˆ«å)HоWþ“É&í³sŽ~–ÿ÷Z²Ãê/JM!–RSZR3ì„!%•ƒre#ò]†’^‰Õþ˜‡ÿ/p†“QùDÜW@b{”®žIÅ'`ŽpÎ1INkÑbI`À3ÓÐQ4²Ð2Y0´¶&àÀÇéƒù#_¾j²EÄ ¤''‚H/% á)Î÷Ü0¶I}þš°N‚Æ“QË,´ä‚›ôô€ßrÒKA(¼Èå:‰h«Æý°ì¦s‚««þ`LBJÙº‘úvî·-,”ô»¸Ã÷Þä×£6¶ýºYkmmùÌÿej‹Úöu|¥)TUò”¤E_ö €aÈHàT˜P`ÄÑ¥}ÂJ,–ëG(„«m¾ÊÛ^D;!–’èß#%+JKù=ŠÉÁ=ÒÈOãvK½ãƒJ(è·ßu#¾ûæù(N5Î?-J¾ÄMH`¥$nÜ®‚`fÀd¢’»¸küá‰îM|Æ#+¾¼Ì쮯ø•c¯æçe©»ºu¦Z­x¾XϳnãI¾W)òTœ“Ønøu“f7õóØÞr¶8ìkz4UõÒ±³þÙþÛó~ÎÙÅ?a5uE_)Y³í»/nûq]³‰mWWÊR‘|¥bß+3wî·S)„¿uUÄUò”¤E_)JDUò•™Íû¯™N£yØþoZªâ*û>¾î¼ÊÿuŽù¾—WYó²þn)jê︕7}W(«åbß«3fî·[©„7uÕÒqWÊÏ·oöíß íóáÊÿõtˆ«åc/÷çe)³:Îuš¶RªéWÊR‘|¥)WÙû?eoÏìc‡ó¶_¾ª¨,3¡(,458¢’¼VG&Ëü –‚‘Ætó°Ô}ò6ï|µ=; oîkl¯óõöu+~³¯bXkâ·ø5(Ix¤£q˜ÝØcŒNRzC NN=‚ª«ýX˜°ÄâÊè% tðÄ1IÅfäÞRRq1Û#³oñelîg,3–rÛ`‚YDÒÑÃQŠHÔrøÒØ7¤”Œœwù®Ö‰I(`ü´$›ˆy.XД„wFÙúЂŠOC¡ýïÌLÊü›ÃRý?% Ž’û%£ô7á¨ÇÜ|8C€sU_ãöÈVÛ/õ)¿áý|]]){u|¥)WÊR‘|¾žY«tn”£â±IWÙÉxn‹|„†%8š•>NɾiþFÿý¶ÏÿVÛýïªM-%ô> ’ÈBKßd#¤b\1;ìMOGSa¿oµËŒª¯ädM(šLܯ‰Hã ÌÝÛ2ËìçìÍýå¯Jwü›Ã? AMþ ýáéÙíÔ—BÞóV‰•_)Y³?õÿÏîk‡c¶V«¶•_c/wçu)»²Îu¶ZêéYó›òñÌg9{žw5Ž”UõÒ”œUò³w3åóØÎz¿<ükMòW¾ëùK^íðwWW(«ìùÇŸº¿Çw1ƒñß+Ó¹›uãû)Ög;êU]"*û7·Î¼ëßuݾ×WJN*ùJV‘¿ÿm³ÿÕ¶ÆÿW×JR"¯”¬îfÝxþÊu™ÎÇcz•WWÊV-òó7|Ëu2ÜKæ]\E_)JDUò”¤E_+­{cû)Ì;¾4êºDU÷—¿GØÕpž…sþù{ì¼Ì³q÷± % š†Ýa¹[ñ¥“=,”€ 4·èA)ó5ä’¿‘ÊéÏ»„6ùþíû«ìaÿ1­{À*¸i Éß}¾ù¾ëßs>«ˆ«å)Hоô¥Œÿ·ûl{2Ÿ²7î­þpé3­ö=KwÍVeº–¥ÕÒQWÊR³»vÛöVý·âûvÞqW×o,˜‚þéýGmØgd£ýÐÉ“ñêWÍì”Uÿs‰0°% RRãrXfB ˜5(ÈÈ!b, fÝ#z9ÈÙw(@ä¹i,1à ù)d é |‚Ò“ؤ¤½ËéBZù€h`GÎßï—†£îÏ’Ž¤îÍÍoÛç¾Ä€ äÒЀ0K`ω‰AE|Ž05¯ö%”îë).ßîy.vb…›iWüUñù+N|r¿Ì^;‹ÝZ¢ûP 5&ÿ‰„4à2òQÒ4­Ævå¸BF ”0”„+ð.íï— a…¾ß€ãìßô•ò’„gOZ™†¹‹×wÔUüZZÒœPJSöcpBÓû)GôöVeÕäî‘‹u䲘Öcq£Ç{yUôZ HÄ~Ý"‘ŸÿÕ¶0?ý±ÿíwC@BÛüHONÅ}ÑÒ„òóä!-Ñ¿Ïþí¾×½à;àWàÂßäýÈdÄ”’Ë GÉã1H!Ä€ý còýÎÕUõ€Å ¤§·É,¤$¤|žŒ@ÉAD°ÞÁ¡!¹³7ÍÛ}y’žXϑҀΌÙý’€ÉlVûrFm¾$k®b|'·)? B{r‹ K Ãƒ2_`ÂÆr™xý|ý §Œ¿§¶Ùÿ?ö?ó}á`5 ^›dm¶ÛlÛem±›UÒ—¡E_)JDUölÆþ¾{ÎVÇcêéHоVnŠZ²ó~!mßUÖ~Æ~¼sÏ_ÇÍc¥||û>¿Øß³?aOœM])8«å+6c_=ç+cŽÆ±õq|¥)WÊͶ¶Ïß‹í³ñêÛÕtˆ«ìùÇŸº¿Çw1ƒñß+ÕÒ‘|¬ÿ#þÛgÿ«mþ®‘}á?»‹Ngú¸ö¨¥%}ã†6ÏÿÌ{¿ìß7éïúÝcê+ùY›¿uº™L%ûª®"¯”¬|û>¿Øß³?aOœM\⯕øbX¼ÝA ÍÕÛ«Ží¸¶Õ”Uò³ößíûc³?Ÿì±jºN*ùk,1ªKüÍóý¾}ÛíÛœiŽþÉIE_ôt€\QiŽM&pÄ(´œ¢ÿå ¤`,„2”É|¼Çݼûä Nà_­)?t£’Ëã1+Ë@f-·÷í|v³¹Ÿeãó©Ön?Ìë]Ê4}UÚP`¤±¼¬Å%%¥§§—ÒRƒ1|%,…žœÙ†qâLȇÒÀÒöä¼»¤°ÄíÆðÎQ|¢Ë@Ôäÿùhßüù?½ñRøÑø¤'' ¬4`$|”d,¬PÅ7-$nFýlʸ„ `Ìý±iGÅâºr3°þ’¶Ûl3£6ÊVkÍ:þZ¶çv[šw9xüiô|ÿ>}·øÝ»·amØE¨Ð9*½ÙŸ£gÿ~c¿ÿnÿ#({lú¢”·•_fÌoëç±¼ålqØÖ>wHÖl1~5ÜიѡÕühÓ>PýñïÍÝÕ™L¾üéE_E+>s~^9Œç/sÎæ±ÕuE_gù ÿeìµ/öØ?« «¥gÎ<ýÕþ;¹ŒŽù^QW×JRqWÙû2¿~)Jëïð…?WJDUö|ûíþ|~gÂóï”/}WYðÝ÷uæWû¬wÍ𜺹E_)JÍ™×ûñJVVm„­ûùÅ_?açì­ùýŒpþvËõt¤E_+öù)Û¸ßÖwÍÕ³lw_ýCê)(«å)IÅ_)^¬Î¥çZ³öç-ÔýFÓôçäœÊFÁ?çuôìµlìÆùE_E+;·o·eŸn/>qªç|¥)WÊV2ÿ~vR›3¬çY«e*®"¯”¥"*û>¾î¼ÊÿuŽù¾—WYoñêS6lzû­Ö¥*®QWÊR“оR”ˆ«å)Y°Í¶uf_ÿ¨ïøž¸Š¾ºR‘|¥)WÊVwSlzÖÍ›œ®ëe)K«ˆ«å)Yó?uŽîcã¾Wˆ«ë¬ÎnÙ|îêuÇã:—WHŠ¾Í›mÿíìü_m²ÅmªéHоR”ˆ«å)Yû1ëìwæ~¶8ãúQ{¡8¼ùÌ= Aûs“·4;¨ýQJJ*ùJRqWØ·ÊÌÝû­ÔÊa/ÝUt¤E_)Yû?eoÏìc‡ó¶_«ˆ«ìÙ¿¥efØJß¿«¥"*ùJR"¯³wsÕØïŒÝNyçå:ªéHоR”ˆ«å)HоVo’½÷_ÊZ÷oƒº¸ººDUöm³ý¶~ü_mŸVØF«¥fîêù¸¥«/7âÝô¢¯®³ñ›þêέÿPíŸñutœUò”¤E_+>s~^9Œç/sÎæ±Õtˆ«å)HоVl3mY—ÿêûþ'®®‘|¥Ì—Û?lžwlÿÝ¿;üõоR”œUò”¤E_)JDUò³q»|ëν÷XýÛáutˆ«å)HоR”ˆ«å)HоR±oÕ™³w[­Ôºêâ*ùJR"¯”¥"*ùX·êÌÙ»­Öêa Ýutˆ«å)Yó±êîÆ|¶<óºq|î¦øõ©ß79y–ËZ•WJñ›f@BÝ[~~ø%njù²Š¾ŠR“оR³wËߨÖç|½F_ë^ØþÊsǯŸÍ:QW×Yû2¿~)Jëïð…?G_ËVÜîËsNç/>®"¯”¬ß'o¾ûçß/}ÍÞ®qWÊR‘}ÌÛ¯ÙN³9ØìoRªë>}öÿ>?3áy÷Ï…ïªâ*ù^žœr·ùû!ó6ý8üŽw¨¤¢¯”¥'Èz¿óý)HоÇ^ÍÎëSc”{¬Å2—M™×ûñJVVl·ïêé(«å)IÅ_fÙ Ûeþ¥/÷ü?¯‹«¥"*ùJϲUöëÝk^ï¸w^E¾VfïÝn¦S ~ê”UõÒ”œUò”¤E_)JDUò”¬eîüî¥79g:Œ[-q}t¥"*ùJR"¯”¥"*ûÿߌÉo›ögg7}Ô–ø-—NÈÉJÇòJNÆeóF_1ýE%|¥)8«å)HоR”ˆ«å)HоR”ˆ«å+Ò¬¿›î®Næ}ò–'7oQ(«ï Èÿ„üÿdfqÙ}”ÿíúÕQJÌëR™³c×Ýnµ)Q|[åænù–êe¸—̺ºRqWÊR‘|¥fï·ûçÇv|+·ùB¿Õq|¬[õælÙ–ëu¸†ÌªºÏò7ÿí¶ú¶Øßå}t¬îݶý•¿mø¾Ý„·«œUò”¤E_)YûúñÌo=5Ž«ˆ«å)HоÌë}RÝócÕ™n¥©ut¤E_+7·Î¼ëßpýÛáuuŸd«í׺ֽßpî¼.QW×JRqWÊR‘|¥)WÊÆ_ë^ØþÊsǯŸÍ:®‘}޽–½ùÝ”ÆV?˜u])WÊR‘|¥)WÊR‘|¥)WÊR‘|¥)WÊR‘|¥)WÊR‘|¥)WÙ¾J÷Ý)kݾêâêéHоR”ˆ«ìÿfßìý°¾ß¶­øWJÏŸ}¿ÏÌø^}ò…ï¥}uÔÛµ³fç+ºÙJRêé8«åc/wçu)¹Ë9ÔbÙk«¤E_)^JC»?wζì1Nr‡1ü}D¢¯”¥'|¬ùÙ7µuwÁênú®‘|¥)WÊR‘}ŸäoÿÛlÿõm±¿Ñײ׿;²˜Ó±êÇó¢ß+3wî·S)„¿uUÊ*ùJRqWÊR‘|¥)WÊR‘|¥cgݳíöæíÙó‹lâ*â*ùJR"¯”¥gìgëÇ1¼õüqüÖ:"¯®”¤E_)JÎíÛoÙ[öß‹íØKxоºR‘|¥gùÿöÛ?ý[loõq|¬Û#m¶ÛfÛ+mŒÚ®‘}ŸvÏ·Û›·gÎ-³ˆ«¥cgý³ý·æý³Š~Âe}t¥fÃ6ÙÕ™þûþ'®qW×JR"¯³|¾ûïŸ|½÷7zºR"¯”¥"*ùJR"¯”¥gvíöì¯óíÅçÎ!ôE_])_Æ Ë[vÎ~|üc·e-”âåz}»·nøWoŸWøG¦îgË籜õ~yøÖ>®‘|¬ßwÛîݸ®Û·¯¸WIÅ_)Y³:ÿ~)JÊ̓Öýý\E_fÃ6ÙÕ™þûþ'®‹|¼Íß2ÝL·ù—WIE_bß«3fî·[©„7uÕÖ‘¿ÿm³ÿÕ¶ÆÿWWÙ»?åïŽìi;òõ]-nåŒ Ã6K¶—†?s™û79kˆ«òR³¹Ÿeãó©Ön?Ìë\ûìÈé~ưÞÍ¿m¶7;f\E_E)IÅ_)Xùö|ÿ±¿f~Ÿ8š¸Š¾V‘¿ÿm³ÿÕ¶ÆÿWXëùjÛÙniÜåãñ§Ê*úéJN*ù_¸Þûï—»-{±îÙ›ï˜ñÍQIE_)JN*ùJR"¯³ç7åã˜Îr÷<îkWJÇ_ËVÜîËsNç/>QW×JþIFêÊû)¿o±ûåïØsÔDUò•Ÿ³¾Ç~gëcŽ?©Õ?-w푟þ¤l°?Ô¦ZÔlE_E+{-{ó»);¬0ê¹Å_)JDUò•ŸvÏ·Û›·gÎ-³ˆ«ˆ«å)HоV:þnvZ›ž£ÝF©–ªºDUò”¤E_c¯æçe©¹ê=Ôj™j«¥"*ùJV2÷Z·Çö[w9\üañ}t¯Ã ÈNdâJ:¹øýÅî~3ÔJ*û>ÏŸïö7ìÏØSçOömþÏÛ íûaê߈Õtˆ«å+ÓÙ³íÿÛ9¦ý³åŒÜAíê"*û7w=]ŽøÍÔçž~Sª®•Œ½Ö­ñý–ÆÎW?|E_])IÅ_)JDUò”¤E_)JDUöo“·ß}óï—¾æïWJÌæí—Îî§Q˜ü~3©rоºÏò7ÿí¶ú¶ØßéþFÿý¶ÏÿVÛýëÀ-,´’Q/æÁ¼„œ19ÎÂ[§d>í¸ÜŸ†w²`9:¿Š Ù~_‚Ø4ÿºvNfFßä§»×x 1dàp’¿)ò ø°ßѱ–”á‹èI{gûvû£Þ šL É)!Ÿ2@oÊJSˆd½ðÂÒBØgHÄ}™’’øÌŸ›Öº©\5-7á¥é+£biD¿“º;2PKOJjy;|yÊøSÈ–•~€ÀÐâ ,¾ð‡ÈÃ6Øš\›°f%|–GÈ–„¶G×H¤T¤a5Ó’Y(þ~I/íˆD¾†rú7¾dþ÷È€ű01 /'òÐ.7²\—Ã1o÷XÁˆû® BwBv,®±‰ÃVÿ÷þøæÌ¦Pªß:Œø€v*¿éÉ 8ŠÂ‰…†¥,0ZJÁ#sòñhdá¿Oéf†Ø Ð(–m÷è(£_NÏÐü°2^ÏÛò—÷oÿÚðÍÂ?dq¤¾ûoótöuçJÝ›¬ëè`T rk–Pij@Ñ»üŽüfN %íÒ„g )ÿ=?Z00ʯùÂJ-ò>ÿmúJçÃQÖñŸoQÝ»mû+~Ûñ}» o}|°Ò/U“‹OéK'ç%öJ9A¥†£oЊۤo/£æ¼ v~BA£§¥(䬑›ïØõ¡Ñ· cðû³€ ¼ªÿ/JVg[üz”Í›¾ëu©J»©«ë¬[õælÙ–ëu¸†ÌªºDUò”¤E_)JDUò”¤E_)JDUò³º›ãÖ§|Üåæ[-jU]"*ùJR"¯”¥"*ùJVo»í÷nÜWmÛŽWÜGˆ«ë¬ù÷ÛüøüÏ…çß(^ú®‘|¬eîüî¥79g:Œ[-uuŸ>ûŸ™ð¼ûå ßJ*úéY»íþùñÝŸ íþP¯õ\⯔¥"*ùJR"¯ô TšRI‰ÿ$šŸ’ŒoúP+²1ý?3¯vC);¿ ¨À6Á e F)°Î„–yN7—¿JF§ä|¯ypä? JIX™·Å§9Hù(OÜ ŽXІû¥“”19wH5)è°˜Wù í²@¿Å–„’ù](ü'ïúS99w’…-J<àâyƒ­*ÿJ’-MF(5%bS¿J ˆéNF&ùE÷Û ®ŒJvõó(B¶8¤fÁa‹û é1 ÿìÜ”†ÊeßSÁœ%–’ˆiAY9=)Î_ACÉ]ÂÒ„„#мúM¾,ŒØì…§¶9÷;/ŸÅþ¿?ÃÀ?Y>U}¥/VоV|7}Ýy•þáß7ÂrêéWú†M!'V/>S–îϰ`ìçf|¯ö]ôð(n Ù%†úIa©äÌS%#1IÉHÂ`j>G“±M¾Î­ï‡Þà$ ÀÐÂù7r¶ãRYXhÔ±˜ol„'¾¾Gãr/?v8BÚº¿É!9.ÉéßdîÁ ò†'fç9ÿ¬sY/|¢I®ZI¼3¾+rÝ(I,‘Š%R:7Ìœ°J]5W…Ýöÿ|øîÏ…vÿ(Wúéúš¾ºVlÆþ¾{ÎVÇcêíåWÊR‘|¥)WÊR‘|¥)WÊR‘|¥)WÊR³wsÕØïŒÝNyçå:¢*úë>v=]ÏøÏ–ÇžwS®®‘|¯ Ìë׳m—ó¿qÙNým´ŸnßíÛ¾ÛçÕþêå|¥)8«ìÙ¿¥efÁë~þ›äí÷ß|ûåï¹»ÕÒQWÊR“о[ùiÈÊç!‘–XÞ¾Á”±¬ÿlö Xi@e?Jå¡=_v|¼ìÝ–ÔÅ_õRo %â` Ë-)ÄÍÈa¥ ¤á› cr˜–ŽŸ¡²3¡®š?-<°ÂJÉH‰Œ„“?CùN^ JIL”mʲUþúæ¤å—Ë, ¤¡Ÿ ¤a¹S“{¥%üåâÿ÷Ä„­­Á€—ÒQ(hÏÃ9½º6È/%(9þN ûù%dkçÛlÎÊ<-DZ¿É€`€Ô6 áŽPc ÈmË,±®0¤mÝ:ŸõµóˤL+”Œÿ», –—û9þÎÝ*ýŽÙ¶¹·¶›:¾R”·•_)JDUòÞMÉHbP÷NèÝ j†Ÿ‰纔»%ÝËI0Ð x C6IIJ[¥<§) %í·É&¥{3”7&øfù+ßuü¥¯vø;«‹¾ÈM ,˜ŽBÅôð#¤˜‚’žœÁ¬QhÀdĶGÉ9‰yÚùI0®Ve3`Œ¼Ž‘Õ†lÙ!?ï1ÜÃEË]_ͬÝÜõv;ã7SžyùNªº^¥|¬uìÜîµ69GºÌS)utˆ«å)HоR”ˆ«å)HоR”ˆ«å)HоR”ˆ«åcçÙóýþÆý™û |âi³í»/nûq]³‰mW(«ìùÇŸº¿Çw0ŸŽù^®”œUò”¤E_)Y»º¾n)jËÍÖÝõ>qçî¯ñÝÌ'ã¾W”UõÒ•‹|¬ÍߺÝL¦ýÕ8«ëºA¤Ä­íó¥;„'l×öÕ¾ëùÛû›ký))Êùí÷J?a(r¹Æ>ûÓÐÈ_ìƒKB1|504´d”„'ÿÛ¡(Oå$jzFmú~J®H@¥%(!€g†’ÓЄå–ŒÝ)À6ÊÊMöß_G,„œ’¹  7’Êvå€X3„”’Š)\¢Òÿî†ž‚‰ewJ Ø¿€ºQ²’œÿü´'üù5¹#ûÈI‡±ûJ¿Å”ŒRŒr6Ù[˜äm°vÚ¢”½‹:¾R”œUò”¤E_+?Èßÿ¶ÙÿêÛc«ºÀT¼øiA%,¿¶ønéÏÍèÝ©ÑWý²ƒCCKWÅ'0a47¥043rS †Žž4¿‘ú3}Íÿß2&# ­»¾}ßÿúÏ~’ûsöéÿf×Ñ€@_#Kå–M/r·%¡Ü0š„~P ¹mÙúvÃ~Pܯ|ųý·íÒË[l{oÎgû+\ˆ4à9]^Ÿ¶ÿoÛ™ø¬ÿe‹ûUÒ—£E_)JDUò±—ºÕ¾?²ØÃ¹Êçã«¬î¦øõ©ß79y–ËZ•(«çϾßçÇæ|/>ùB÷Õt¤â¯”¥"*ùJR"¯”¥bß«3fî·[©„7uÄUõÒ±—ºÕ¾?²ØÃ¹Êç㫈«å)HоV2÷~wR›œ³F-–ººDUò”¬Î·øõ)›6=}ÖëR•W×JR"¯±o—™»æ[©–â_2êë6açþ¿ùýÍ'c¶VŸä²[çÊêQ¡+ZÔÊP¹E_EzF$ %¸ÝÂ;wÊÝ\ü½¸™>s~^9Œç/sÎæ±Õq´?(›‰D¶RBvBY;ŒÌŽŽK[†$¤wã:U{²x®@gÝÉèùD°˜–Œ3/äb›†a“|];|´ Z¡ùkû=J]îÀb’Ã7( Þ”WGÌPÔ¥ éÛ¥Šÿbÿèü5o²[Þf5««üAE’ó·ËeôuãðBS•Ý^æY/´À44X4²ÐY_%<²†_èBÁ®Œ0jF'røÄÿOüc^ï·JwÛb’3$²øhÞRò ͆£íÆlžs2dªÿ-K^/0OFûì’û'³!ûùŸoß)uäí÷ß|ûåï¹»ÝtÕõÒ¿§gØ'ìã7ÃVìÙmöµ×, ¡ -#>Cç /ç}ŸubÖ”l„q®£ý-1!¥“Óö% jMù [e™Ø{_JJK & ²ÊîWÁ¸1? ¤ XÐ,‚ò~ÉÍËįѾ°` K -93b²%‚hg%»04nù„oÓû6}ì!€&AoÒÿ£¿@jzRRya¹ %•ºæÝº35ç°ãTq; ®¯âÁ Áƒ@ÏGù%²BS•ÿééÿån¿·Ì¦mp«7·Î¼ëßpýÛáuw¡è«å)J⯳l¶Ûm›l­¶3jºR"¯•Û¶ß²·í¿Û°–õtˆ«ìÝÜõv;ã7SžyùNªºVwnÛ~Êß¶ü_nÂ[Ê*ù»?åïŽìi;òõ])8«åfs~ëçfS¨Þv?›ÖªºDUöo»í÷nÜWmÛŽWÜG£/wçu)¹Ë9ÔbÙk«¤¢¯”¥'|¥gìgëÇ1¼õüqüÖ:®"¯”¬ùÍùxæ3œ½Ï;šÇO¿ÿï›å©þoû/í²ö8+Ê*ôÝÇŸò÷Çv4Îùz®”œUò”¤E_)JDUò”¤E_+>Éß}¾ù¾ëßs>«¬ùÇŸº¿Çw0ŸŽù^QWúÂÀ4&Z~FA/~”¡wïŸ'“¾OÈùŠWGî»èÄÒa5(!$#2 Á¥“Ò5“ŠmÐ7lZY’XOéo|>— Õj«þ­¸( Â`a ¼LýAY%'² Ø5#ž„–ƒÍwÙwY €ì0„ƒ¤¤¥%† ÈÄ®—é NNÈ»±hÛn1ïr‘Ò„üýÂNÇ;)ÏÛüo´Ø¯ßá­òpßÒß÷Ù?íóöù”Øí¬”± 2_ö‚‹¤Ôâƒ@©Iéã +§d ’€ÝðÇÓ†bPhÄÿr@tnM™ò=%†~€Àt B@ÀÄî1%§r¿‚_nH÷È›>íŸo·7nÏœ[gW±‚O#Å_êI€ Ay¸Ä}‚›þIج„oðBxÇûlùoyjRîzjùY³úùìo9[v5«¥r«å)HоR”ˆ«å)HŠ¾ÏØyû+~c üí—êéHоR”ˆ«ågí¿ÛöÇf~+?ÙbþÕtˆ«å+?È_û/e©¶ÁýX]\E_gã7ýÕ[þ³þ#.®”ˆ«å)HоR•Ÿ9¿/Æs—¹çsX芾ºVg7l¾wu:ŒÇãñK§Û·ûvï…vùðå„yE_6c_=ç+cŽÆ±õt¤â¯”¥"*ùJR"¯”¥"*ùJR"¯¿ü‡OKm–í‘™ÿîÎ%û*MÜyÿ/|wcIÜï—©¾ï·Ý»q]·n9_q®QWÊVnîz»ñ›©Ï<ü§U\⯕Ÿä/ý—²Ô¿Û`þ¬.®‘|¥fï·ûçÇv|+·ùB¿Õq|¥)WÊR‘|¥)WÊR‘|¥fãvù×{î»|#®®"¯”¥gs>ËÇçS¬Ü~;™Ö¸Š¾ºR‘|¥fsvËçwS¨Ì~?Ôº¸Š¾R”ˆ«å)HоÌë}RÝócÕ™n¥©ut¤E_)JDUò”¬Ù¶ßþØþÏÅöÛ,VÚ"¯›»«æâ–¬¼Ü9mßUÒ‘|¥)WÊR³»vÛöVý·âûvÞ"¯®”¤E_)JDUönû¾|wg»”+ýWJDUò”¤E_)JDUò³fÛûcû?Ûl±[jºDUò”¤E_)JDUò”¤E_c¯fçu©±Ê=Öb™K«¬û%_n½Öµîû‡uáurоV2ÿ~vR›³f­”ª2÷Z·Çö[w9\üaõq|¬Û#m¶ÛfÛ+mŒÚ®“оV³oö~Ø_oÛVüF«¤E_+;·o·eŸn/>q©oñêS6lzû­Ö¥*®QWÊR³wu|ÜRÕ—›‡-»éÅ_7s>_=Œç«óÏÆ±õt¤E_+;©¶=kfÍÎWu²”¥ÕÖnŠZ²ó~£Ýô¢¯®³ì÷Ûï›î½÷3êºN*ùJR"¯”¥"*ùJR"¯”¥"*ùJVg[üz”Í›¾ëu©Jˆ«çu7Ç­Nù¹Ë̶ZÔªºV}“¾û}ó}×¾æ}(«ë¥fù;}÷ß>ù{înõsоV>Ÿ>ÛünÝÛ°¶ì"Ÿç϶ÿ·vì-»«”Uò”¤â¯•Œ½ßÔ¦ç,çQ‹e®®‘z¿óý)HŠ¾Ï—óqKWW}Ä©»ê-úó6lËuºÜCfU]cçùóí¿ÆíÝ» nÂ%|Ùœõ÷?ó6SœqÙNººRqWÊR‘|¬ønûºó+ýÖ;æøN]{­[ãû-Œ;œ®~0ú¹E_)JN*ùJR"¯”¬ý˜õö;ó?[qýNª¸Š¾R”ˆ«ïAhIÝm’ÝIÛ»:;|íÏÆzŠÏömþÏÛ íûaê߈ÕrоVg7l¾wu:ŒÇãñK«¬Û#m¶ÛfÛ+mŒÚ"¯®•›d+m—ú”¿ßðþ¾.®qWÊR³9¿uó³)Ôo;ÍëTE_]c/u«|e±‡s•ÏÆWHоR”ˆ«å)HоV2ÿZöÇöS˜v=|þiÕu›¾ßïŸÙð®ßå ÿJ*úéYû2¿~)Jëïð…?W8«ìÙ‡Ÿúÿç÷5ñÛ+UÒ‘|¥)WÊR‘|¥c/õ¯le9‡c×ÏæWWÊÆ_ïÎÊSfuœë5l¥UÒ"¯”¥fù;}÷ß>ù{înñ}t¥"*ùJVo»í÷nÜWmÛŽWÜGˆ«ë¥)WÊV~Ûý¿lvgâ³ý–/íWWÊR‘|¥)WÙðÝ÷uæWû¬wÍ𜺺R"¯”¥"*ùJVg[ìz–Ëu-Kˆ«ë¥+3¶}·eíßn+¶q-¢*úéYþBÿÙ{-Ký¶êÂêâ*û?fWïÅ)]}þ§ïêéHоÏò7ÿí¶ú¶Øßêë7ÉÛï¾ù÷Ëßsw«”Uò”¯èßoÝ”ÍÛ›ò[æ?î±OWÑJRqWÊR‘|¥)WÊR‘|¯NéS«ï»>JÙ¾NûæYË9¾jŠJ*û7;-MÝÔ{¨Õ2ÕWJN*û7}¿ß>;³á]¿Êþ«¥"*ùY»™òùìg=_ž~5«¤E_gÃwÝ×™_î±ß7ÂrêéHоR•›1¿¯žÆó•±ÇcXøŠ¾|æü¼sÎ^çÍcªéHоR”ˆ«ìùÙ7µuwÜJ›¾«¥gÎÇ«¹ÿòØóÎêuÊ*úéJN*ùJV~Æ~¼sÏ_ÇÍc¢*úéJDUò•›¾ßïŸÙð®ßå ÿSmŸí³÷âûlüz¶Â4¢¯®•Û·Û²¿Ï·Ÿ8‡Ô[õflÝÖëu0†î¸Š¾-úó6lËuºÜCfU>¾î¼ÊÿuŽù¾—WHоR”œUö¿ö^ËRÿmƒú°ººV:þZ¶çv[šw9xüiòоºR“оÎíÛoÙ[öß‹íØKzºR"¯”¥"*ùJR"¯”¥"*ùk5ò>WÏÛü¤ýóﳫî·G?Y)(«ìý‡Ÿ²·çö1ÃùÛ/ÕÒ“Š¾R•Ÿ9¿/Æs—¹çsX芾ºR‘|¥)WØËÝjßÙlaÜåsñ‡ÕÖo’½÷_ÊZ÷oƒº¸ºlÎzûŸù›)Î8ì§\¢¯®”¤â¯”¥"*ùJR"¯³q»|ëν÷XýÛáut¤E_)JDUò”¤E_)JDUò³íÛý»w»|ør¿Â=]"*ùJR"¯•›6ÛÿÛÙø¾ÛeŠÛUÒ"¯”¬ýŒýxæ7ž¿Ž?šÇUÄUò”¤E_)JDUò”¤E_+?ÏŸmþ7níØ[vWHоR”ˆ«å)HоR•ùÑ‘–“:ByÙ`<ÇóšQW§víöì¯óíÅçÎ!õ])8«å)HоR”ˆ«å)HоR”ˆ«ìÎoÝ|ìÊuÎÇózÕW^É—OÛ·Økç[/°º‰E_)JN*ùJR"¯”¬ß'o¾ûçß/}ÍÞ®"¯•޽–½ùÝ”ÆV?˜u]"*ùY»íþùñÝŸ íþP¯õ]yE 5J;äìÇE_E+?f=}ŽüÏÖÇSª®qWÊR³;gÛv^Ýöâ»gÚ"¯Ž½›Ö¦ÌÊ=Öb™K«¥"*ùY³:ÿ~)JÊͰ•¿WHоR³çeüÜRÕÕßq*nú®"¯”¥"*ùXËýkÛÙNaØõóù§UÒ"¯”¥gu7Ç­Nù¹Ë̶ZÔ¨Š¾ºÍ†m³«2ÿýCÿÄõÕÒ"¯”¥"*ùX·ëÌÙ³-Öëq ™UuŸ9¿/Æs—¹çsXéE_])^ZqHÿ‡gÙÿVÙþÏú³ü¿W¦î<ÿ—¾;±¬Îùzô¼ùéÛöA]ÈX—ÓÿNìøÍ†ÒÇç}zÐ @ªY?t$¤d'¡ËÅtrˆt§#bÐXã§ soL€ ± „ÞR_¡ Gî„?Ù<1uç~RR[%ܵûÎÊòº¿`ÀvLHo@bs¡J N+—öH Cpk…îJÏøì»ÓKØ0^ŽZCHA¼¢YY%~R4¾òPŸ†þV}Лµð¢` ÄÅþ†dNÄ„#„ fã7eíÖ}€Èa™H5 èø`Á÷Ù ÊC/ ô±äh«þÜBz`ГzxÝúñ}.‚¿èà\3#}óböù)û#í¯ª28 !~1 IY Ñ»5)FC9MÔ7yœÌ[¡­²±L†ÿ'%™•þùÒ„äñ›+eÝ01[2Ѷ(±®”#t€£vÉÅgÅâþã:vÚ¯Þ*þh` Ê,3þù-Ê„§ü—d22\´7ÉB:Y†öݯ;¸Ý¾uç^û¬~íðŽ»î„Ðb_Á»ìž á‰FOíò0B¿Óº9IË B‚. ¾ pÀÜœL/¤®Ÿ’Èw3 ün³öÌ3Ìc¸«þKJÍÆíó¯:÷Ýc÷o¸®º»Ñ¢¯”¥"*ùY»º¾n)jËÍø…·}E¿^fÍ™n·[ˆlÊ«”Uò³¹›uãû)Ög;êU3­þ=JfÍ_uºÔ¥UÄUò”¤â¯”¥"*ùYÝ»mû+~Ûñ}» oWkHB ãvWưÅf~ýÏ\¢¯ÉJRqWÊR‘|¥)WÊR‘|¬ÝÝ_7µeæüBÛ¾«¤E_)JDUò”¤E_)Yóï·ùñùŸ ϾP½õ\E_zF+~Ïó-¿ø%³}ùÏñ¹ÝWµ‰a¹=8š ˆC'¤®Û¹{ðݰÎ5Ø#使I½™Ð_ÈÉ, ròC2 ’ïÂ•Žæ_D Êåò‰{ðai@Ͳqié/l„#~…§ ;†t:}ň/ª¯÷?rƒID"’KH` ÌåäbÀnRB3ŽRPé (j¶J;ß!bŸ¡²: ÈÝ ÉÈBoËOê32þëþú§ -=’c6Hná®^J ²0fF%¶Î„|ùË ÉÈÙ)ÍìÁXÍŽËýÿ®Å=Âù 5_E)KÓ¢¯”¥"*ûÒR ÌœùÐô|œpï·¾ÄÐZ¯!’oBK FNII|„pÍӋΆ/'äÆm|ZÖ’²V´wCô+ü„Èüqûáß¹·_ô€œ7^{$1Ð1)$¡ /~PÒËà¹[ ' ûå—Ù€vHX ònܳr %|_ÅËB å£á»Œ nÙH¾^L úè}Ò4®íÛ~1¾ÿï¾¶JŒÏeöiÕüšòZ ý³ ý! ™Ö5¾c]šLæý×Î̧Q¼ì7­T[åænù–êe¸—Ì»¶š¾ºR“оÏÙ•ûñJW_„)ûú>Ÿ>ÛünÝÛ°¶ì"®’оR”œUò³ì÷Ûï›î½÷3êºDUò•޽›Ö¦ÌÊ=Öb™K«ˆ«å)HоR”ˆ«å+6ÙþÛ?~/¶ÏÇ«l#Q׳sºÔÙ™GºÌS)rоºR±³îÙöûsvìùŶqо}’¯·^ëZ÷}úðººR"¯•‹|¬ÍߺÝL¦ýÕWHоR”ˆ«å)HŠ¿Þf0¶Bym°hB6é/ôd|Q_ /’‹K%b9%Ú÷€WP+ŠN!††å“ Á­„ä–A[±)Xa,µkÃð}„Ò¸AyÊü Ü”%ÆaªJŸ$®ZC7ßüµéŠ &† tÂKnã’„äò_ý?¥%—ŠÃ¾/î÷›8((™iWð@@¢’’ˆ}(JP‡)/2pφ¡‘ÐèHÄ!)§#{ç©‚ á…Ò÷ÀÉ}² ü¤lØíÙ;¯m‘ÆëË^‡üQWÊR—DªùJR"¯”¥"*ÿD°`*û±#’’à ÝòJm’2ýì@@MB - AD"ÐÃCøHt’ˆHÈï¾Ü–0¾œù ù¯–„—þíÊìéï¾}ц3çÝøæ]ö ‰¼7}Ê)‰¥ÿÊ&9_Ž36Jú OàY(Åu§^wâx ë«þJRôh«å)HоR”ˆ«ìuìµïÎì¦4ìz±üé³m¿ý±ýŸ‹í¶X­µ]fͶÿöÇö~/¶Ùb¶ÒоºR“оR³fëÿŸÜ×Çl­WWÊ͆m³«2ÿýCÿÄõÕÖ|ûíþ|~gÂóï”/}(«ë¥)8«å)HоVn7oy×¾ë»|#®ŸnßíÛ¾ÛçÕþé³m¿ý±ýŸ‹í¶X­´¢¯®±×³sºÔÙ™GºÌS)utœUò³»vÛöVý·âûvÞ®‘|¥+7É^û¯å-{·ÁÝ\\E_6g=}ÏüÍ”çvS®Û·Û²¿Ï·Ÿ8‡Õu›3ž¾çþfÊsŽ;)×(«þ–xé&†ðÝŠø7~‰A¹1 Ëû¡!¨ì??õˆA0 ≥îC Ù –´Ý=< Á£QønB¸Õ„ ]È8‰‰ B iØ4­¿ï“’žZlÌŸ’„ŒA)ÙW¥&XaC? ‘£~ð Æ$7—òzSËÈn’Wü3 È|yK8á•Í „À0Œ€%ÿß$¾7§:zFÿÖž•t¤ÎïrnÐ ?I1ÿÔ¯Ïøžw}¸ÒÝq½ÞâÞ—>оR”´•_)JDUò”¤E_­=ÂðÝÑþ|ã:D$ý¾ÊYÛãï§€XQ4*@Ð1¶û¹1 ÿlèI¡£€£”Vãïó^t6ûƒR‚ÿØ ½Ò0­¹},‡éOXÌœû>ô…rk¿Ü¯²Jä¤nYEþ7%ÊÁ­’¸ßûñ‘® ­U_âöm·ÿ¶?³ñ}¶Ë¶«¬ß'o¾ûçß/}Íޮ”¥'|¥{d·èo¿goñùó~ÏŽ5ºê%|¥+?c?^9ç¯ãæ±ÓоºÍÜyÿ/|wcX;òõ]"*ùJR"¯”¥c/õ¯le9‡c×ÏæW×JR"¯”¥"*ùKXi@d®‡J„ô' ß¡öIE_)JN*û6ÈVÛ/õ)¿áý|]])WÊR‘|¥)Wï Á¨ÙO¾ûôdŒø£udìíÖÜÎuöÒiH)¡Ÿ ›¿ÃX´œ°Ü 0 ÞY5% %#tïÆï|õ 1cŠÉHj¹k(•¾ÉÝ÷ý1‚økŸqn˪¯Öñ 3¤ž [–Ù=vìΔ¬fHJ{x½˜ß×ÏcyÊØã±¬}ö’ÊàZÓƒ ,„ŸÜnA\¿†­#QÉ@aƒF ®5÷²`ü4¼0šØ`ÒòVN-._(i[fF^)Ÿ¹#Ù%šuÇiY¾ï·Ý»q]·n9_q®ô¨«å)Hо]0ÒiHtÑ‹èý$§¶ëÅo’“º²ûYøiHÿ†ä –‘˜ÜŒéëR±ê¾”C! ¾Z7ïùII !…gÁ¥#l—(¿ÒWÙ.3¯ 1¿û\ÛsÌ:¿Ñ–L&“PZJ,˜[ŒJRB ~ZqX gO(š„nÄ1h^î÷ȈEVÛl„äoÊݲ³l”¡ôvgÎíûûÚdL ”£”RJÈNÁ©à)ÉI-¿JKRzW’¿ì4“|ÆçáuUò”¥èÑWÊR³l…m²ÿR—ûþ×ÅÄUõÒ”ˆ«å)HоR•›¸óþ^øîưw;å芾ºR‘|¥)WÙþFÿý¶ÏÿVÛý])WÊVg[ìz–Ëu-K«ˆ«å)HоR”ˆ«å)HоR”ˆ«å)YœÝ²ùÝÔê3Æu."¯®”¤E_Þ €a5e씬'””·vÁ%|ÈwÊ3;­ï @ nbÆôÐSËNRQÝ(ῤ3“\–ߤäb¶ÿß!¬ùÙ7µuwÜJ›¾¹÷_÷NM,@` 3ƒI} )èIiJR”†º ¹(&q¨HÞ7%‘þk&~M(·ø4²`Äu€Ù%±h%䥌ɂÍÛ!“óåßå#¤oÏó3­™óìvíþÿ/å{¶X …¤oÝx¼^P¾ ÿt„oò>û£²•råî _õUþÐ €?àSŠ(7–œQ)¹Ó†”û |ZwøgãSòF¹Ûz°Ð yE–‚·t FÜ`k–—I/ 7†ŒGø­Ê}“þnÛ^Ké¹iG’ðÎé,µmѾãPœ”ìW/î±›;®„ @P4°ÒÉKã6Èì‘¶cÙÇøgË E_ìv 8Ä„§ÐŸÆ‰¤´#°ÂºYT‡ß!Ðóv÷ž„Î^IJPo‘¨JF2Ic: ý#{rÎŒŸúµåJ AGls³#~1 Ø!ÈÃ…Ù.*¾R•Œ¿Ö½±ý”æ_?šuÕM_])Y»íþùñÝŸ íþP¯ôE_])Yó±êîÆ|¶<óºq|Ù¶ßþØþÏÅöÛ,VÚ®”ˆ«å)YÝ»mû+~Ûñ}» oW×X·ÊÌÝû­ÔÊa/ÝUtˆ«åfîêù¸¥«/7âÝõ]"*ùJR"¯•‹|¼Íß2ÝL·ù—W^”d³º¾ù’”/óáû¾ã¥}¥'|¥)WÊR‘|¥)WÊR‘|¥)WÊR‘|¥)WÊV:þnvZ›»¨÷Qªeª›d+m—ú”¿ßðþ¾.QW×JÇÏóçÛÛ»vÝ„UÎ*ùJR"¯³;gûö_Ù·â³öþ®”ˆ«ìeþµíì§0ìzùüÓªéXëù¹Ùjnî£ÝF©–©E_])XÙ÷lû}¹»v|âÛ8‰Å_])HŠ¾ÏŸ}¿ÏÌø^}ò…ï©ó±êîÆ|¶<óºuuÛ·Û²¿Ï·Ÿ8‡ÒоºR“оR”ˆ«åbß«3fî·[©„7uÓ:ßcÔ·|Øõf[©j]\¢¯•›3¯÷┬¬Û [÷õtœUò”¤E_+6ÈVÛ/õ)¿áý|]]"*ùJV2÷Z·Çö[w9\üañ}t¥é‡7uù–5Çî'(«è¥)8«åzÐŒy}Y™ÓÉ_`íQYöJ¾Ý{­kÝ÷ëÂå}t¬Û#m¶ÛfÛ+mŒÚ®qWÊR‘|¬Û#m¶ÛfÛ+mŒÚ®‘}›¹Ÿ/žÆsÕùçãXúºÏœyû«üws?ò½\¢¯”¥{?^ÁÑÏç3œ®¿”ê5q}¥'|¬Ù‡Ÿúÿç÷5ñÛ+Sì÷Ûï›î½÷3ê¹E_+>ݿ۷|+·Ï‡+ü#ÕÒqWÊR³¹Ÿeãó©Ön?Ìë\E_])Y»™òùìg=_ž~5ˆ«ë¥gìÊýø¥+¯¿Âýý\E_gìgëÇ1¼õüqüÖ:®³ößíûc³?Ÿì±j¹E_)Y¶FÛm¶Í¶VÛµ\⯔¥"*ùXËýùÙJlγf­”ªºDUò”¤E_yDŒ¿ÙNœßü¯Ù¶Xý›Ÿ•QJJ*û?íŸí¿7ìíœSöWJÏÙ_c¿3õ±ÇÔꈫë¥y-ß³|…«?foÛw}³£ê"*ûÆ„ŒÌ¬ýa9ú”ÇvJßmEc/÷çe)³:Îuš¶Rªâ*ùJRqWÊÍ™Ï_sÿ3e9Ç”ë†#ŒÙ×ö;Ö¿·gçöãê%|¬[õælÙ–ëu¸†ÌªºN*ùJR"¯±—ºÕ¾?²ØÃ¹Êçã£/õ¯le9‡c×ÏæWIE_gùÿöÛ?ý[loõuÔÛµ³fç+ºÙJRêâ*ùJôïú;³wç­_2¾Æº÷Âu|¬îݶý•¿mø¾Ý„·¦î竱ߺœóÏÊuUÄUò”¤â¯”¥" Hz¿óý)HоV¿ö^ËRÿmƒú°ººÌë}RÝócÕ™n¥©rоºR“оW„ÔÙ;«înøÁßzŠJ*ùJVglÿ~Ëû6üV~ÂÎ*ù»íþùñÝŸ íþP¯õ]gÎÇ«¹ÿòØóÎêuÕÊ*ùJRqWÊR³a›lêÌ¿ÿýÿ×W×XëÙ¹Ýjlru˜¦RêéWÊR‘|¥)WÊR‘}Ÿä/ý—²Ô¿Û`þ¬.›Ûç^uï¸~íðŽººJ*ùY»™òùìg=_ž~5«¤â¯”¥fï·ûçÇv|+·ùB¿Ñ}t¥"*û;·m¿eoÛ~/·a-êéHоR•ŸäoÿÛlÿõm±¿ÄUó»vÛöVý·âûvÞ®”ˆ«ï%£8NWÈëÊý›q}óc_Ióï·ùñùŸ ϾP½õ]%|¬üfÿº³«öÄeÕÒqWÊR‘|¥gÎoËÇ1œåîyÜÖ:®"¯”¥"*ùJR"¯³á»îë̯÷ù¾—WYÝ»}»+üûqyóˆ}W(«å)IÅ_)JDUò”¬uìµïÎì¦4ìz±üâ*úë>v_ÍÅ-]]ðz›¾¦vÏ÷쿳oÅgì!ý\¢¯”¬ß%{î¿”µîßuqusŠ¾ÏŸ}¿ÏÌø^}ò…ï©¶B¶Ù©Kýÿëâêë?açì­ùýŒ'ó¶_”Uó:ßcÔ·|Øõf[©j]]gÎoËÇ1œåîyÜÖ:®"¯”¬lÿ¶¶üß³¶qOØM\⯔¥"*ùYöíþÝ»á]¾|9_ᮑ|¥)WÊÆ_ïÎÊScÖs¬Õ²•WYoñêS6lzû­Ö¥*QW×JRqWÊR‘|¬ÎÙþý—ömø¬ý„?«¤E_+?È_û/e©¶ÁýX]]"*ùJV-ò³7~ëu2˜K÷TE_])YöJ¾Ý{­kÝ÷ëÂâ*úé^ß÷üîùŸÍÖÉ7œÇ)óÔJ*ùJRqWÊV2÷~wR›œ³F-–º¸Š¾R•Ÿ ßw^e¸wÍ𜸊¾ºR‘|¥)WÊR‘}ønÈvüõãØ$Ó?8Ù>ÉWÛ¯u­{¾áÝx]]%|¥)8«å)HŠ¾Í¶¶Ïß‹í³ñêÛÕt¤E_+{¿;©MÎYΣË]]"*ùJÇ_ËVÜîËsNç/>®"¯”¥"*ùJÍ›mÿíìü_m²Åmªâ*ùJR"¯”¥"*ùJV~̯ߊRºûðå?W×JR"¯”¬Ýöÿ|øîÏ…vÿ(Wú®"¯³íÛý»w»|ør¿Â=>Éß}¾ù¾ëßs>«¤¢¯”¥'|¥)WÊR‘|¥)WÊÏWsþ3å±çÔë§víöì¯óíÅçÎ!õ\¢¯¿o»c—ÿéÿ¿îÙÝKææm¶jl—~‘êÙ·~§wﲕöïûÕˆ«ì[õælÙ–ëu¸†ÌªºRqWØÙ÷lû}¹»v|âÛ8Šm‘¶Ûm³m•¶ÆmWXùö|ÿ±¿f~Ÿ8™E_])IÅ_+3¶¿eý›~+?aéó±êîÆ|¶<óºurоR”œUò±—û󲔨õœë5l¥UÒ"¯”¥"*ùY»íþùñÝŸ íþP¯õ?íŸí¿7ìíœSöW(«å+6açþ¿ùýÍ'c¶V«œUò”¤E_y\j7|׺û¯ÝL³O¨¯)ÆgwÊtŒ~Êp…,õ1çj‰E_+6c_=ç+cŽÆ±ôÛ#m¶ÛfÛ+mŒÚ®"¯”¥'|¯Û䧺»vZ¹Üÿó3+l·ëz¨ùN~Ÿo—»>víÏÂj%|¥)8«ì[åænù–êe¸—̺ºR"¯³:ßãÔ¦lØõ÷[­JU])WÊR½ÈÍœÃÒ”¶=?óúÏòоŠVl3mY—ÿáÿ¿âzêç}Ÿ¶ÿoÛ™ø¬ÿe‹ûQ—ºÕ¾?²ØÃ¹Êç㫤¢¯”¥'|¥)WÙóï·ùñùŸ ϾP½õ>}öÿ>?3áy÷ʾ«¤¢¯•‹~¼Í›2Ýn·Ù•WIÅ_fÌ篹ÿ™²œãŽÊuÕÒ‘|¥)WÙÜͺñý”ë3ŽÆõ*®”ˆ«å)HоR”ˆ«ìÛ![l¿Ô¥þÿ‡õñut¤E_fu¿Ç©LÙ±ëî·Z”ªºR"¯”¬Ùœõ÷?ó6SœqÙNº¸Š¾R”ˆ«ìeþüì¥6=g:Í[)Ut¤E_+7Ýöû·n+¶íÇ+î#ΟжVßö~•3l¿î³–snõŠ¾Ï²wßo¾oº÷ÜϪéIÅ_+ÆnîŸ}¾Í™™”gηïQIE_)JÆ^ëVøþËcç+ŸŒ>qW×JR"¯”¥"*û?f=}ŽüÏÖÇSªÛ·Û²¿Ï·Ÿ8‡ÖâyA(ßýómп§l‡-['«šÝKkè1 ¾ B +ïº8Ô” Á¡œbQÐP Æò¹/öådðÕ*çÚuš,2`gN/íóœ”7ãFda½Çö%#ïºUïnxÔá„ÜPG-±|„¬“¸… nǹa,…öÖÌp*ŒœL)Œíú:±IF(3!9É…¯q¿¡ƒB3:}À(älVeà$´á¿ìãJá¨l¶C‚7)—ydóÖAÆzêôàʆ:6Ä®Y(j~ÿîp¾åt3ÿ³$ ¶°3߀¥Ð’Q3$0gÉAiÙÕúQ÷AY<¿·uP €]ˆôŠü¾_KÒãÀo–W~…6VÙîj@4(´t§–ò~dÒI잊t Hݙƿÿ½Ñ”7•_€˜ÂnÜiYÎÃpÖq‹ÇåѺ:QÔß½Á¾ÂP6 á¤ÌCÜšR„ån´­%Œû•Û’IIÎÝzíRù€VQ3ä“ %nYa›gҸ‰(Gtt»l†Óábâ¯ø%gù ÿeìµ/öØ?« ºÄÂÐMwHbRR\fa¡¾–,°/—¿ßn¶×1(Ég;}Ù·ÝŽwÜîß3wÚô(«è¬ùÙ7µuwÁênú®³ñ›þêέÿÙÿ—TUõÒ”œUò³çßoóãó>Ÿ|¡{êºDUò•ãBY¿9û+në~ۜ͟çÏš¢QWÊV~̯ߊRºûðå?W8«å+6c_=ç+cŽÆ±õq|¥)WÊV:þZ¶çv[šw9xüiõq|¥)WÊϲUöëÝk^ï¸w^E¾^fï™n¦[‰|Ë«”UönŠZ²ópå·}WJN*ùJþœ…/~xJ¾;2ò×ÝJQ(«åfÌ<ÿ×ÿ?¹¤ìvÊÕuŸ¶ÿoÛ™ø¬ÿe‹ûDUõÖ:þnvZ›ž£ÝF©–ªºN*ùk åâ‹åmËÈã7;¥•ºòœ^«,´Ž”§#cú~Ûõ^´š’À¹X5ðÍ’^á™$ÇGåâXgÝþ,n}öû#ìv:u¸94šMH`Ä%(Éî[#€é(û#§¥±ˆÉBF£þ’RSºví`Ñ _°…Rxn䲟Ÿ‘Êè„Ëé+)/£²1(JC AE¨Á¬”rò Y´“QÀËPþ•k¼è O+þ_q„¬Á¼7ãI})ü¤ôï‹GùfkÊá¸ü@u¥){vu|¥)WÞYH- FNçäí÷ê½(ÀLZº6ý%àÀ‚^Kòz å¥öZ3 ìæ}y:Yoôêÿ»$²h ºðc#l“Ó‹Ý0hhÏ—“÷bДdädï|aä–œÿr•÷fãvù8Ö=«>N[] ƒ ! J?(®„ŒA) AŽ_ÙcþJ;+{èdÎ(œ1A¨ÉÅ8fGÉå§u¤†œŒ„`ÍúJÁ(éttïy¹k?„UÕÿ¥¼˜_-_,Ìá nŽíÿÉsÐŽùõ‚õ¬êùJRqWÊò÷J·o÷Û­OWG û‹¨¬ùÙ7µuwÁênúQW×JRqWÊR‘|¥)WØëÙkßÙLiØõcù‡UÒ‘|¥)WÊR‘|¥)WٜݲùÝÔê3Æu.®”ˆ«å)HоR”ˆ«ìîfÝxþÊu™ÎÇcz•WYó±êîÆ|¶<óºurоòËAHéOmã…ñÛÎÙ}WÓˆlCý#¤šœ‚hÌ€Ävlù{6By_„º Í’Þù©dwß|“ùߨ”¼¬¯–í²Úû@Ë &ô ¼W%t±e%²rÉI݈ É\3%ÊFÄ´çN÷œ‡$jêþ»•ÓƒCR’Ò4Á€Æ/a?!“ÐÉBS—Óò?${åÙÍû¯™N£yØþoZ¯`l€Ò‰¡œa[t ÿŒå )ù=ð-“›gt;5âí’{1>U|¥)vSWÊR‘|¥)WÙöNûí÷Í÷^û™õîÀbÀÂɈ +¤1Ù˜¤SaˆÉè;ä—¶Ù;6W~3Þõ€”“ƒ {í¿å8Öý‚ ~ΖÅîùï»\¨ª¯ …Ê&# ,²hÀÌ”)8fFÉÈAKe?~{µæ¯¡€À´_Ž€Â¹-(OBqh@bF+’‚å%«m÷¼î<ÿ—¾;±¤îwËÓãœ⯟³¾Ç~gëcŽ?©Õ9E ¤d!‘¶Ø;*¢—E5|¬Ù‡Ÿúÿç÷4ŽÙZ®“оÍÜÏ—Ïc9êüóñ¬}])WÊÏòþËÙj_í°VWHоR”ˆ«ìeîµoì¶0îr¹øÃêéYó?uŽîa?ò¼¢¯®³¹Ÿeãó©Ön?Ìë]]'|¥)WÊÍòvûï¾}ò÷ÜÝêéWÊR‘|¯å!.ùòs}Ö–º–ëRͨ¬î¦Øõ­›79]ÖÊR—(«ë¬Ùý|ö7œ­Ž;ÇÕÒqWÊÅ¿VfÍÝn·Snë§Î<ýÕþ;¹„üwÊõrŠ¿xo%#¤hÍ·?:7ìÉK7d½¶Çëì‰+@>à:FFå—€ÎÉGNJJ ,5ïþ߆ ÅæOÎíï‰ñ¯¶ÿ>Íóæ}ßçn½™c½öP†ýÝ@bC1|5$Òñ/„·-8¼ÈßdrÊå¥&ªó2ÅŽ8 WWø rÒŒŸ¸jzKJÒWA_íÐüi}Žƒ!·sýâ/§Ÿ|¡{ë-çWýt05 0J3† åä§`ÒÿJ‰¤¬‚‹í†Â:ø¾hIe/äô6OG¿èÉÜh·t}Ô–«è`;ÐhieI[Ù<„€t¥³trþ I)™¬¼Ã.íÀ † ´'“†† 1? èBŠ+#³`ÎÜ®ŽK(aÝ‘y]›çPõ‘Ÿ“ë«þJñ¹l÷ÛíóçcßæmÜ{Q{6u|¥)8«å)tƒHh&td¶ßÓÒVÈÙ³ñ©Ý¿û+uüíKE_Aeâ–—Ègé3/e›wfÛþ½ø¨¡£8g%âVNHbwB éì[bi_’¾Ì‘’–Nµ½;H%âÃ¥E£rJ9I/žZ KQEéØi+{Å ™ËK–œ‘™%%º> ßÿ±5£ò:¯–”¶Û®óØf#XêêüàS§ä'ìŒZâßþ3¶ß¤nßç_¸T¯ÉÝ=í¹øßñÎæ˜q·¦¯¢”¥r«å)HŠ¾Å¿VfÍÝn·Snë«¥"*û;©¶=kfÍÎWu²”¥Ño—™»æ[©–â_2êé(«å)IÅ_)Y¶FÛm¶Í¶VÛµ\E_+{7;­MŽQî³Ê]]"*ùJV~ÌzûùŸ­Ž8þ§TE_])HоR”ˆ«åfÙm¶Û6Ù[lfÕu› ÛgVeÿøïøž¹E_])IÅ_)JÏWsþ3å±çÔ눫ë¥)WËÞìâƒ~,1 4 J{·ÝEä£ç'+¡ÐïÖ¾÷ƒ¥›Î¯û¸adÐ'£ËAE£bö’²V°Ä éF(½²X–ë¸ ƒÙ†¥[Ü^|âUÖ}»·nøWoŸWøG§ùÿöÛ?ý[loòоºR½º_ugß2{ön¶fZ™þøóÚ"¯¢”¤â¯”¥"*ùJR"¯”¥"*ùJR"¯”¬î¦øõ©ß79y–ËZ•8ܧÿý·ùû9Íùû8ö>QWÑYó±êîÆ|¶<óºutœUö2÷~wR›œ³F-–ººWïÒßó·GÉ[1íó-÷Î!¥}¬ùÇŸº¿Çw0ŸŽù^®qWÊR‘}é-gOlµ™›ÿçlØþÚ¢””Uò”¤â¯”¥"*ùJÇ^ÍÎëSc”{¬Å2—WWÊR‘|¥zsã²VŽÜå}Üî¼~²õD¢¯”¬ù÷ÛüøüÏ…çß(^ú®qWÊòÑÒ²y\  càòp^“9»eó»©Ôf?Œê]\¢¯”¥c¯æçe©¹ê=Ôj™jœUóößíûc³?Ÿì±jo“·ß}óï—¾æïW^É×mÛ¶øköS¯8©E_E)IÅ_)^ÿ¡ÑŸüû%Ðb·|øZŸ¨”Uò³fs×ÜÿÌÙNqÇe:êé8«å)HоR•ý;>Á?g¾·cþËo³ý¥}Ÿ ßw^e¸wÍ𜺺N*ûÒ‡^l–û'çga{³ìùó´›äí÷ß|ûåï¹»Ñ׳sºÔØåë1L¥ÓüÿûmŸþ­¶7úb¯®”¥QWÊV>Ÿ>ÛünÝÛ°¶ì"®"¯³º›ãÖ§|Üåæ[-jU?c?^9ç¯ãæ±Õt”Uò”¤â¯”¬ÝÜõv;ã7SžyùNª¸Š¾R•™Öû¥»æÇ«2ÝKRâ*úéYÝ»}»+üûqyóˆ}OØyû+~c üí—å|ßwÛîݸ®Û·¯¸WJ͘yÿ¯þsIØí•¢*úë>}öÿ>?3áy÷ʾ«¤â¯³9¿uó³)Ôo;ÍëU])WÊÍ›mÿíìü_m²ÅmªéWÊV2ÿZöÇöS˜v=|þiÕq|¬ûvÿnÝð®ß>¯ðOòþËÙj_í°VW(«å)IÅ_)JDUò”¤E_~ß%#»wúÎùº¶mŽëÿ¨}Ebß«3fî·[©„7uÕÊ*ùJVlÎzûŸù›)Î8ì§\âˆz¿óý)HоV~̯ߊRºûðå?WHоR”ˆ«å)Hоñ›#ä;­+õþ½ó¿uîüúŠÌíŸïÙfßŠÏØCú¹E_)JÆ_ë^ØþÊsǯŸÍ:qW¿5¿ûßû»|ÛáÕ¤¢¯”¥'|¬uìÜîµ69GºÌS)utˆ«å+6ÈÛm¶Ù¶ÊÛc6«ˆ«å)HоR”ˆ«å)HоR±—û󲔨õœë5l¥UÄUò•™Û?ß²þÍ¿Ÿ°‡õq|¥)WÊR³ý›³öÂû~Øz·â4E_])HоR”ˆ«åfï·ûçÇv|+·ø+ýWHŠ¾ÍÆíó¯:÷Ü?vøG]])WÊR‘|¥)WٜߺùÙ”ê7˜7ަù+ßuü¥¯vø;«‹«¤¢¯”¥'|¥+?fWïÅ)]}ørŸ¿ˆ«ë¥)WÊÌíŸïÙfßŠÏØCúºDUò³ößíûc³?Ÿìö§víöì¯óíÅçÎ!õ\¢¯”¥'|¥)WÊR³wu|ÜRÕ—›‡-»èоºVg7l¾wu:ŒÆŒãéûúñÌo=5Ž”UõÒ±×ós²ÔÜõê5LµUÎ*ùJöd¾Ùûdó»gøÎíùÝþ¢QWÊR“оR”ˆ«å)XëÙkßÙLiØõcù‡DUõÒ”ˆ«å)HоR”ˆ«ïJP†~Ïößœüìçg?¶?Ñò0JM?¶$õemÛÔ¨¥'Å_)JÎêoZós—™lµª¨«ë¥)WÊR‘|¥)WÊR‘|¥~)¾FÝkÛþé ëãýD¢¯³9»eó»©Ôf0üg8ÝÑúYÔ—ò¾_Ùß2þn}E"*ùJRqWÊVlÆþ¾{ÎVÇc黺¾n)jËÍÖÝô¢¯®•™Íû¯™N£y‡óxê¹Å_gÎËù¸¥««¾SwÕt¤E_)JDUò”¤E_)JDUûÿB[6J5çÊèûo™IÝþo˜ÿ`¥)оR”ª*ùJR"¯³öcרïÌýlqÇõ:¨ëÙ¹Ýjlru˜¦Rêë3¶}·eíßn+¶q-¥}t¥c¯æçe©¹ê=Ôj™jœUõÖlÛoÿlgâûm‚¶Ôønûºó+ýþo„åÕÊ*ùJÏò7ÿí¶ú¶Øßêç}›6ÛÿÛÙø¾Û`­µ])WÊR‘|¥)WÊR‘}›d+m—ú”¿ßðþ¾.®³»vûvWùöâóçú޽›Ö¦Ç(÷YŠe.QW×JRqWÊÆÏûgûoÍû;gý„ÕÒ"¯”¥"*ùJVlοߊR²³`õ¿W×JVlÃÏýóûšNÇl­W×JR"¯”¥fv϶콻íÅvÎ%´E_])HоR”ˆ«ìÙ¶ßþØþÏÅöÛmªéHоÆ_ë^ØþÊsǯŸÍ:®”ˆ«ågu7Ç­Nù¹Ë̶ZÕWY¸Ý¾uç^û‡îßë”UõÒ”œUò³ö~ÊߟØÂ;eúºDUò”¯@ÆÍ&2ß¿o±ýûš|¢¯Læí—Îî§Q˜Ãñœ}])8«ågùÿöÛ?ý[loõtˆ«å)HоR³:ßãÔ¦lØõ÷[­J«ˆ«ågû6ÿgí…öý°õoÄj|ìz»ŸñŸ-<î§]\¢¯”¥'|¥+?È_û/e©¶ÁýX\E_>v=]ÏøÏ–ÇžwS®®”ˆ«å)HоR”ˆ«ìØfÛ:³/ÿÃÿÄõÕÒ‘|¥gû6ÿgí…öý°õoÄj¸Š¾R”ˆ«å)HоR”ˆ«å)HоR”ˆ«å)HоV|ì¿›ŠZº»àõ7}:zqÈ›õuÿ™¶Ý²Ö¿ó*¢QWÙóï·ùñùŸ Ͼ ßUÒ“Š¾V-úó6lËuºÜCfUùy›¾eº™n%ó.™Û?ß²þÍ¿Ÿ°‡òоºR³wÛýóã»>ÛüþœUõÒ”ˆ«å)HŠ¾Í™Ï_sÿ3e9ǔ뫥gÎoËÇ1œåîyÜÖ:QWͶ¶Ïß‹í³ñêÛÔýŒýxæ7ž¿Ž?šÇSl¶Ûm›l­¶3j¸Š¾R”œUò³çcÕÜÿŒùlyçu:êéWÊÇ_ËVÜîËsNç/>®Þ’j ,¢¿YcF¾Œÿ3¹Ëvaýþ¥¢¯Áu€+ tïþèèÝМ²Ò1 û>éVùð»ê¡ ä“yh„Ùø –è-<¤üŸÓ²Jü¬‹ÃöÛØ10d2ŠI4®CB? À²K/:‚Ê/#¶û²?@B7^s0çs]_Á,gBJéNé%bRPKOr»bb~äŽûÑ›½€° ÊAÅ–ÉI_#9cP–Û Ýò ã]±+ãÕzÐÐ ‹¡œ¼”ä 4´°ƒxj7@ÔcÙ(GÃRýÂxBä^H [ðÂ^ß‘±EÊNPÖ^Ù²3\øöê8ó„þÓ«þbQcF„%0%‚U¸Ô7ﻉwßV šRSÑ»¥ù»¡»-JsÐ䜼úûx°h` ˆhá;—˜§ü ÌKA-)%ú”‚Ü™­H&†“{S‹áˆ(´¡;tô£wNÈ`”!Ñ’žž–A`8Z'Ì,|Uÿé}$@”YKÀ…ò´pÆø¾3§ì–BÙôŒB»ì‡û_:ß'o¾ûçß/}ÍÞôº¨«â߯3fÌ·[­Ä6eS»vûvWùöâóçú®³ö~ÊߟØÂ;eûyUõÒ”œUò”¤E_)YøÍÿugVÿ‡lÿˆË«ˆ«å)HоR”ˆ«ìÎnÙ|îêuŒ?ÇÓfuþüR••›­ûúºÅ¿VfÍÝn·Snë”Uóa›lêÌ¿ÿýÿ×WJN*ùJR"¯”¬îݶý•¿mø¾Ý„·«ˆ«å)HоR”ˆ«åxÇ@ÂÙ/™*WRÕÿWÿ¨¤¢¯³ñ›þêέÿÙÿ—WJN*ùY³9ëîæl§8ã²s¥†ݲº–rÎ;sZKJž‚¹möÝoî§ýLÿÔýTh«÷–‚ahý4k§§l²º{elžŒÏ”¯åßN!€ji!7£!£!9hÞ0²Ü3–wGB:^Û!;ïy`û%!¸¤äò¹,´tlVK¥ŒÉröboBfNÝ®Ððby4˜_,ie)9ÐŒ.†&ñ¥¡cz@óïfË'°5í*þ „ÎMù%„Êtð.Sa¨,!;|Œò¾mÚð6´!|gÿtþŸ¿uOüïñç*Éz.<¢¯”¥-åWÙðÝ÷uæWû‡|ß Ë»¡  &³£m¶Ã6FGÙ!¾e€L„©Wž¥›ùÕÿX,I|’(„z_lYiBqLM ázPÄfNJ~«A0ãC@mÃ1I %dt¤šÒ”Œ-†ì²þßïú¯‘üûíþ|~gÂóï‚÷×Ö !pž¯‹é)!¤®žXÔÉx7}‹FI,à!þÍÆÞIç÷°ì"º¿åIéÌÈwûu¶ØßͶïØì¹7w=]ŽøÍÔçž~Sªõ` %a¯À¿-)Û­Ÿ¥ %äl„¾=§ >òŽ¿›–¦ç¨÷Qªeªõ81€ÑW×JRÚU|¥+ùY›¿uº™L%ûª"¯®•éÙ\`ß¾cŸ:¿ÏñÛ÷e³µD¢¯³ö~ÊߟØÂ;eúºRqWÊV6}Û>ßnnÝŸ8¶Î"®"¯³mŸí³÷âûlüz¶Â5]+-[s»-Í;œ¼~4ùE_])YÜͺñý”ë3˜v7ŽœUõÖ|ì¿›ŠZº»àõ7}WHŠ¾Ï†ï»¯2¿Ü;æøN]]gu6Ç­lÙ¹Êî¶R•W(«å)IÅ_)JDUò”¤E_~Nÿã¾?ŸíÕú’݈2m‘¶Ûm³m•¶Æm9- cpÆ5ó3;¹ÌËzŠb¯–òúr?n¯¾%§¡N¯„¾Ïþ$-V ¬CB Ã:û'älWJB:;b÷À|V^ß·ôéÕÿY&†£#üB}±x´9Y8±ˆ _ —ÑÐPj8ný%§'n­ï˜€À0°ÄŒÏ•²£?ã?ógFQY[¤ûë&!$‡ƒw @jF#d£”Ť¯ÒYE¡_ÆôþXG|ù|+q»|ëν÷ݾ×y_‰¯ðWIE_z7ÈÛ˜¬Ò¬wÿ¯ÿwY¼úŠR"¯”¬eþüì¥6=g:Í[)TÝÝ_7µeæáËnú"¯®³fuþüR••›­ûúnîz»ñ›©Ï<ü§U\E_+;·o·eŸn/>qªé8«åé@c‰½€ÆÝIùÜ´1e¶t}ÿJÕݯ=öíþÝ»á]¾|9_á95+tòú¾Ï»ûí÷?s¬xPTêÿ|acHa˜¬öJv,™ƒQ»ZWßwÉü•ÐŽH5õòM²6Ûm¶m²¶ØÍ¯³L9a©ü Âöý…`Äb€¹hIA¨I1)è+ HÄtŒíó|gwËߨÒw;åë…<ãD÷ç“ê«ë¥)z´Uò”¤E_)JDUò”¤E_ôP“ Ù5•úRÀºùhݹCR”#e—¾vHNûô6¹ +}‰ qœ¬R ùJÅm‹+ ÍÙ.4—¿» U)B9£“xfü!À,&†â²_~[a›ößíÐKN^{Í€À®€Ä!’ƒ>BQ¹KÃô ø²_täì¬o÷ŒæüÓÍXV•—Ýöÿ|øîÏ…vÿªéKÙ³«å)HоR³;gûö_Ù·â³öþ®"¯”¥fs~ëçfS¨ÞaüÞ:"¯®”¤E_gÎÇ«¹ÿòØóÎêuÕÒ‘|¥)WÊR‘}Ÿç϶ÿ·vì-»«¥"*ùJV~Æ~¼sÏ_ÇÍc¢*úéJDUò±oÕ™³w[­ÔºêéWÊW¥OGùhï…vè#Q(«ågÙ*ûuwÜ;¯ £çÙóýþÆý™û |âjâ*ÿ²p(_!¡„Á¨Ýa8߯“ ] %Òȃ7|†GÎ÷•Èš5Ë·Ý.3ô„l[—‹és°jFaˆ_ï>²aD2˜±£7ò7mÂ>oøüÁ/·ÝõôbÎ ûÿéJñi NèA0”„€Û”…~ŒÉÞñ¿æìæ A´«þ9KºB&¡%’Y,hĨ'oÍÅŒ–= ¾n{q¿Ù·û?l/·í‡«~#^¿ÔUõÒ”®U|¥)WˤCã—Û! é$åds’€”}¿c³Ôþ„>èÍ÷ý*Ùá½ÀTìcŸ{°ÃR΀Ää2Vå> ~R1- NBIcÑÐZrsosm§Wö@ ×Fã €eœ íú7Ûe`Òº>ä¦BÜ´#„_+FèÈÛ þ5‚3÷ÿì³Ògæþþô Q»  §$#%­;¶ÉèR FÃFr_-?|ÿw{ÉØ¥—:¾R”»é«å)HоV|ìz»ŸñŸ-<î§]]"*ùJV}“¾û}ó}×¾æ}W×JR"¯”¥"*ùJR"¯”¬ý·û~ØìÏÅgûý©³í»/nûq]³‰m(«ë¥)8«å)Yû2¿~)JëïÔýüE_]gu6Ç­lÙ¹Êî¶R•WHоR”ˆ«å)HоR³q»|ëν÷ݾ×WWˬHH¥’ŒßÙÐèøj Σ™ÞäÒ˜«ÿ@ˆE€«‰¸!% ²Rslúl„ìXÝ“œ¤öåýŸûÉ€BXg& 5­’ÄÔ¸ ·Aeº~GéùÙû¬îßtûÂ$EŒá»ÝÂv~Ÿl7²)ú9¯zЀd­„ 1+¥ƒPãP•¥(%öèèãwÝ sÿ׆ù”hXµ«ñàårùD¢Æ£„ïº: éû'díÿà[’¶ðÇù¯„âÑ“Žç/wÆ}÷ù¾^ï§@0/!Ô 3nWA[†† 0 #þÈNÛ~—á¿ã‘µÓ!€\Cø™ñ}!¨ÛpÔîZN/§—Ù]erпÌŽÖûžÈ ¥Wü§ÊùÆ•ÃPÈOýŸí³ü£ûzÒÀ/ Gèý8bSËù )ÒSçÉÉß¶ã ÕÛ^ØðšL,¤±i)ÿAEÊ|JÎ_I[$3:KàaŸ'ôŽ7ûË€0è¥zpnÈ<4 .ßô¡/ÓÒP‡è@B²õ™ûãŒ?8Å_Þ!?I Ô|¿ÃvJrCþü—Ò”?I,fA-·A[^<:CâË&`ÂöÜ”ŒÈ+»~ŽW%q£7ùiÛŒOèû^\1 R7—¿ééK'§%úºl¿™³ ͵AAˆ ̇ÙÝõ›×ùçñÿÿ×ýÐ9*¾ÌÈèO%£æãsÿûgÝÉmŽÊV°R—£E_+6g=}ÏüÍ”çvS®®•E_gs6ëÇöS¬ÎaØÞ:®”ˆ«åfù;}÷ß>ù{înõtˆ«å)HоVwnÛ~Êß¶ü_nÂ[ÕÒ"¯•‹~¼Í›2Ýn·Ù•WHоVnæ|¾{ÏWçŸcêéWÙöNûí÷Í÷^û™õ])WÊR‘|¥)WÊÏØyû+~c üí—êéWÊÏœyû«üws øï•êéWÊR‘}ŸnßíÛ¾ÛçÕþêéXëÙ¹Ýjlru˜¦Rå|lû¶}¾ÜÝ»>qmœE])8«ìÙ‡Ÿúÿç÷4ŽÙZ®”ˆ«å~FGì­ÌÛlÿÿú³º[ò-E%|¥)8«å)HоR”ˆ«å)HоV2÷Z·Çö[w9\üaõtˆ«å)HоR”ˆ«å+øÂ²RÂûgý³³þÛczš¢QWÊR“оR”ˆ«å)HоR”ˆ«ìÝöÿ|øîÏ…vÿªéHоÆÏ»gÛíÍÛ³çÙÄUÒ‘|¥)WÊVnîz»ñ›©Ï<ü§U\E_)JDUò”¤E_)Xùö|ÿ±¿f~Ÿ8š¸Š¾R”ˆ«å)HоR”ˆ«å)HоR”ˆ«å)HоR•›dm¶ÛlÛem±›DUõÒ”ˆ«å)HŠ¾Ï²UöëÝk^ï¸w^WY¾Nß}÷Ͼ^û›½\¢¯³ö~ÊߟØÂ;eúºÌæý×Î̧Q¼Ãù¼u\E_)Y»™òùìg=_ž~5«œUò”¤E_)JDUò”¤E_)XËÝjßÙlaÜåsñ‡ÕÄUò”¤E_)JDUò•Û¶ß²·í¿Û°–õq|¥)WÊR‘}›¾ßïŸÙð®ßà¯õ]gÛ·ûvï…vùðå„z}»·nøWoŸWøG”UõÒ”œU÷¿ï²¾ûwGc?cJ}þÜCTR’Š¾ÏØyû+~c üí—êéXëùjÛÙniÜåãñ§ÄUófs×ÜÿÌÙNqÇe:êë?c?^9ç¯ãæ±ÔîfÝxþÊu™Ì;ÇDUõÒ”œ@Èz¿óýc/wçu)¹Ë9ÔbÙk«¤E_c¯fçu©±Ê=Öb™K«¥"*û;·m¿eoÛ~/·a-êéHоV~3ÝYÕ¿áÛ?â2êéWÊR‘|¥)WÊͶ¶Ïß‹í³ñêÛÕtˆ«å)Y¶ÏöÙûñ}¶~=[a"¯®±³þÙþÛó~ÎÙÅ?a4û'}öûæû¯}Ìú®QWØëùjÛÙniÜåãñ§ÕÒ“Š¾Îæ}—ΧY¸üw3­tî¦øõ©ß79y–ËZ•WIE_fÙm¶Û6Ù[lfÕt¤â¯•Ÿ ßw^e¸wÍ𜺺DUò³çeüÜRÕÕß©»êºDUò”¤E_)JžVfïÝn¦S ~ꈫë¥)WÊR‘}ÌÛ¯ÙN³9ØìoRªéHоR×¹D¾vK1ÍþCu9'a§çÛö>É(«ìÙ¿¥efÁë~þ®³wÛýóã»>Ûü¡_긊¾R”œUò•Ôßµ;æç/2ÙkR©³ýû/ìÛñYû(«çvíöì¯óíÅçÎ!õ])8«å)HоÆ^ïÎêSs–s¨Å²×WJDUò”¤E_zvW7ï˜çίóüvýÙlí#/÷çe)±ë9ÖjÙJ«¯n5ÿ³>mØüíûåvÍ»zb¯¢¼'£îûíÑ݇uæv[}öê]E'|¥gìgëÇ1¼õüqüÖ:®qWÊR‘|¬[åænù–êe¸—̺ºÇ_ÍÎËSsÔ{¨Õ2Õ(«ë¥fÌëýø¥++6[÷ôý™_¿¥u÷áÊ~þ"¯›»ž®Ç|fêsÏ?)ÕWJN*ùYþÍ¿Ùûa}¿l=[ñ®‘|¥+3­ö=KwÍVeº–¥ÄUõÒ”ˆ«å)Hоñ¹Û©ûgø%N¥¸ñÝ\ÊŠRQWÊR“оÍÜÏ—Ïc9êüóñ¬}])WÊR¼‘•¿X÷ëëá<ìîÆlÛ(«è¥)8«åfï·ûçÇv|+·ùB¿Óÿûì®Ï¿Gè[°íÎ^ÝÄ=D¢¯”¥'|¬ÿ!ì½–¥þÛõautˆ«å)HоR”ˆ«ìÙ¿¥efÁë~þ®”ˆ«å)HоR”ˆ«ågìÊýø¥+¯¿S÷õtˆ«ì[õælÙ–ëu¸†ÌªºR"¯”¥"*ùJÍ™×ûñJVVl·ïé»íþùñÝŸ íþP¯ô¢¯®”¤â¯”¥"*ùJR"¯”¥"*ùJR"¯”¬ønûºó+ýþo„åÑ×ós²ÔÜõê5LµJ*úéJN*û3›÷_;2Fó±üÞµUÒ‘|¥gÎoËÇ1œåîyÜÖ:›Ûç^uï¸~íð޹E_]cçùóí¿ÆíÝ» nÂ*é8«å+6açþ¿ùýÍ'c¶V«ˆ«å)HоR”ˆ«å)HŠ¾Ï—óqKWW|¦ï©öNûí÷Í÷^û™õ]%|¥fîgË籜õ~yøÖ>®qWÊR‘|¥)WÞ^éBvíþûu©ñêèá_qr‘¿ÿm³ÿÕ¶ÆÿWIE_)JN*ûЖmº~Ã{;;mýY—Ú¢””Uò¼nÈ-™øß‚ýþÿ(Õ´ÔÛµ³fç+ºÙJRêâ*ùJRqWÊR‘|¥)WÊR‘|¥)WÙo±ê[¾lz³-Ôµ.®”ˆ«å+{­[ãû-Œ;œ®~0ú‘¿ÿm³ÿÕ¶Æÿ(«ãgý³ý·æý³Š~ÂjéYo±ê[¾lz³-Ôµ."¯®³;gÛv^Ýöâ»gÚ®“оR”ˆ«ìîݶý•¿mø¾Ý„·«¬ÎÙþý—ömø¬ý„?«”Uò•éHÆWïöVvsy¬êS³¿Sù6ÙþÛ?~/¶ÏÇ«l#DU÷âGNFÉN»gKlÉè;oó«)ì•ÔÛµ³fç+ºÙJRêâ*ùJÎêmZÙ³s•Ýl¥)tß%{î¿”µîßuqq}uŸç϶ÿ·vì-»«¤â¯³l…m²ÿR—ûþ×ÅÕÒ±³þÙþÛó~ÎÙÅ?a2оºR“оR”ˆ«ìîݶý•¿mø¾Ý„·«¥ïÿû¶m»³«:Ýn­³©rоŠR“оR•Ÿ9¿/Æs—¹çsX芾ºR‘|¥)WÊR³:ßcÔ·|Øõf[©j\E_])Y»íþùñÝŸ íþP¯ôE_])HоR•Ž¿–­¹Ý–æÎ^?|E_]+7}¿ß>;³á]¿Êþ«ˆ«å+;·o·eŸn/>qªâ*û?f=}ŽüÏÖÇSª®”ˆ«å)HоVnŠZ²ópå·}OÙ_c¿3õ±ÇÔê«”Uöm³ý¶~ü_mŸVØF«¥'|¥+?f=}ŽüÏÖÇSª"¯®•™Íû¯™N£yØþoZªâ*ùKÔ€œ%›a­ÿùA*woú–Ï_Ù??Í{rÀvVpŸ$7m‰eV%¿ý•ÑÐY7ìà`#öÿ+ÜyŽª¯øý½¸²Fÿ>ÃT3Ýh[>uоüVÙ4†Xn,5ÊŽœ’VHoå#¶,˜R™“ ÒØ'ÜΤ441)O(hÂ[“[ 7)×øj ÎÈÈJ]?¡îNÛeaúªÿˆ`Ôvgãvûíú>ûýÆì0ì;³á]¿Êþ£gݳíöæíÙó‹lâ%}t¥fÌoëç±¼ålqØÖ>qW×JÍ™Ï_sÿ3e9Ç”ë§ìǯ±ß™úØãêuJ*úé_™XìIIØÞ¾aéëæ¿¨ˆ«å)IÅ_)JDUò”¤E_fÙm¶Û6Ù[lfÔî¦Øõ­›79]ÖÊR—WIE_)XËýkÛÙNaØõóù§Sf7õóØÞr¶8ìkWÎæm×ì§Yœìv7©TÙ¿¥efÁë~þ®¿tºöÙgÍØü¾;©gÄUôR•ŸäoÿÛlÿõm±¿Î*úéJDUò³w3åóØÎz¿<ükWHоR±×²×¿;²˜Ó±êÇ󫈫åë5¸A‰NÀ]9°Á„¿ÿöO^Cõ²F8ÞžóE§Žžv={67ÿþͲø­}„ÿ@gå¤0È&•‘‹@ÒHÔÁ…£6è|Z3> BÞâFuUWõÀNM&Røb{d•ƒ?ß1lLø1”#§—·,¢ðÈég{çà&Ðf /t—ËèéÀToééÙùYçéûnÅÿ¿6¼‚PÐÀ˜™[2xjKü–‚ÓÏB‘Ù•ûd³ï|÷l¶Ûm›l­¶3kŸðèùÕïÊGïÑ¿RþÀ{ººðïQJ^¥}›3ž¾çþfÊsŽ;)×_ƒ B26Í»·ZÝßþÿ÷[õºÏ²R"¯÷iÀ¢Û$44hJF•¾Z5<¢¶å©g³ìùïRLà„¢NÈHhÍÒû–€ß˜´ñ™%‹OßJZøÝë@© “CwÀY;bQd¤£¤'ºQóîÎRÛt²ßïyÃLúêøC I5NÛ¥±„·dmöäÄù'äŒ$öý›^Jûxa •‹ ÉHfJà‡öKè)$Ô¥‹BBR¸ù¶Çß1&òPãP[î”l’†÷åüSn0# fù?~û5_a Š¿…¶FÛm¶Í¶VÛµ])zUò³º›cÖ¶lÜåw[)J]]"*ùJR"¯”¥gÎËù¸¥««¾SwÑ|ηØõ-ß6=Y–êZ—OÙ_c¿3õ±ÇÔꫬ|ÿ>}·øÝ»·amØD¢¯®”¬î¦øõ©ß79y–ËZ•8«ë¥)WÊV|ûíþ|~gÂóï”/}OÆoû«:·ü;güF\¢¯‹~¼Í›2Ýn·Ù•9%÷ß7ÍÝ›¾nìêû³·SHËýùÙJlzÎuš¶Rªâ*û;©¶=kfÍÎWu²”¥ÕÒ“Š¾R•Œ¿ß”¦Ç¬çY«e*"¯®³öe~üR•×߇)ûúm­¶_êRÿÃúøº¹E_)JÌíŸïÙfßŠÏØCùÅ_]gÎÇ«¹ÿòØóÎêuÕÖ~ÃÏÙ[óûOçl¿(«ý( SñX…ºydÔt!=èéÛ(·@Åçÿ Z2[;kè` ãRžMIE ™ƒ8¥†£¤’”¡ñ,†ã]BPŽ®»Î€fJ%”CïÐL_û!( Gù!¨AEî])ÛvíhЄŒü„ƒ Ÿà.„•º‰I(bxGãy}8ïß^9ÔS½¥_óB1)Ïã3oúÿgìýùüME){u|¥)8«å)HоR”ˆ«ý€CY`Sâ’Š,—öû7Ìß䆕¸¡ÝnϽî2$Œé%úPKÛ$–—G%¥©B9Hd}ñK/:7ùï¨ùMÕòsïÌøüø‰ï°–œ{ÐQ0IE! +¡€Û¶JJl±EæÈ@Çd©:ò]]k8>Ò¯øÞÌëýø¥++6[÷ô[åænù–êe¸—Ì»¬Q-†$i_¡³r[ PÒ_G_ýCÿmÛw×ôè«ìÎÙþý—ömø¬ý„?«¥+•_)Jò˜fùÛ¬$k­g%xó¹Ç4¢¯¢”¤â¯”¥"*ùJV|ûíþ|~gÂóï”/}W×JR"¯³ü…ÿ²öZ—ûlÕ…ÕÒ‘|¥)WÊR‘|¥)WÊR‘|¥)WÙûúñÌo=5Ž«¥"*ÿpªHdÀÄS+£“S‰jA\h@fIÉêHIÝ“Ùzî€`Lå`3‰™ 0¤¾Å¥ÆbÒÿ?”‡%oƾXÛJ!}•²zRJbŠA`6ãKÅòòÈßÿò–mýA0bO& °ß÷/'d—Ý(H`bq`gd|¿OëmÛkÉwð[9´«ü)KÖ³«å)HоR”ˆ«å)HŠ¿Xh:þlù²zòò‘òR³Ñ¸NU÷ *X!£–PÙ)&²ìÃtò‘ÝIIÛ£ñ®JèWý/ÓÿÊë^]ͺÀSƒÃvÁ¿n[2ÒÛ?ûlí±ÊÇoõɽ>}|¥+>¾î¼Êÿpï›á9v’«ë¥)WÊÌë}RÝócÕ™n¥©t[åfnýÖêe0—E_fîgË籜õ~yøÖ>®•Û¶ß²·í¿Û°–ñ}t¥'|¥gs>ËÇçS¬Ü~;™Öº¸Š¾R”ˆ«ìÿ#þÛgÿ«mþ®”ˆ«å)HоR•Ÿ>ûŸ™ð¼ûå ßDUóößíûc³?Ÿì±jºR"¯³}ßo»vâ»nÜr¾â=]+¿;)MYγVÊT¢¯®”¤â¯Þ†£/åì¢Y¡s¿YÈá&_MÐa™Ðåb^Èø²`n%–[ fÅ¥?}¾ßþZ>éØmò;èÀŽn+òòry`[±Hçþ­+GÿæwÈ×ÿ¨‹U_â8B÷NénKìíþtíòú·Û±Û5‚úp€v‚‹@gÈà_”WA1 É”ì„_WÈÉBqIFû—x0ÀÒ“ËB¿)?$''ïÖÿË}·ffÙ­¾•_Í¥)tʯ”¥"*ùJ] ÒÆ6`Ó÷ýt¶Û¥jîã:>ΗøçÔÅ_bP’oFw(n?lpbx@×䜶Róç]îM‹ Kä$˜R8f‚ÊíÊ û 7 Oÿ¸Ä¾A{ ¥×Hš`hj +ñ© &'%<Ô—¸b6ß%%/†²_#q ù¯¢&KJq4#|†þľ52úrVét÷J^ó9Á`WWøúR³;gûö_Ù·â³öþõh«ë¥)WÊR‘|¥)WÊR‘|¥gí¿ÛöÇf~+?ÙbþÔý˜õö;ó?[qýN©E_7·Î¼ëßpýÛáut¬|ÿ>}·øÝ»·amØDE_])IÅ_)JDUò”¬î¦øõ©ß79y–ËZ•W×JR"¯”¥"*ùJR"¯³ö~ÊߟØÂ;eúºR"¯•éßçËùþÃz7íóvu,ÝØö}QIE_ïÀb–Ý GFÈAiH ²I})ÿ£òÐXÇÈHÌ‚»^”„Ÿ(eðÐ1Ê HÄ$1%ô’JÉå9-’WKövw÷Çþ}öÿ>?3áy÷ʾ½)`0%“ å§’þßïŠý¶GC÷ü¾À_ÿ•›kÏÊn8åWWç&ìha,5™¶ßþZ9KêbÕ“¾nùKg}î(Ü4bÝœ‘ŒìIaŽ)ÜUôü ŠÝ$Ñ›LíɉFtd•ÒIä°Œò) ½Hˆd>4k”¿rŠèvèÿ  ÀÆGîÀº0ÜK Ô|Í QWüwu|ÜRÕ—›‡-»êþVíËFîÌùÜ!L4G‡ßY!¤ ¤ `ž5%ô ¤ ÁˆÁ»g+¨fù=+$?Í^Phix²407~€Î‚ÐÎCä§ûò’”¥²wÏß!ì¤é³æ,\Uÿ9,èGNܤýþÈÉOý²öÈ)?§%IFß¡ù{înõt»Þš¾Ç_ËVÜîËsNç/>®³íÛý»w»|ør¿Â=]¬ªùJRqWÊVlÛoÿlgâûm–+mWWÊR‘|¥)WÙ¾J÷Ý)kݾêâêéHоR”ˆ«å)Y»™òùìg=_ž~5ˆ«ë¥)WÊR‘|¬ÎnÙ|îêuÇã:—WHоV}“¾û}ó}×¾æ}WHŠ¾Îæ}—ΧY¸üw3­ut¤E_)JDUò”¬eþµíì§0ìzùüÓ¢*úëýy›6eºÝn!³*®‘|¬ÿfßìý°¾ß¶­øWXëÙ¹Ýjlru˜¦RåX°‰©Xb îîœ4Æeºs­w”“ø«ågÎÇ«¹ÿòØóÎêuÕÒ¨«å)Y³ýû/ìÛñYûW×JVg7î¾ve:çcù½jˆ«ë¥fîgË籜õ~yøÖ>®"¯±³îÙöûsvìùŶquÿ%’ß8WR ZÖ¦R…ÔJ*ùJRqWÊR‘}Ÿ9¿/Æs—¹çsXêºR"¯”¥"*ùJR"¯•ŸvÏ·Û›·gÎ-³ˆ£/u«|e±‡s•ÏÆW(«å)IÅ_)Xùö|ÿ±¿f~Ÿ8š¸Š¾R”ˆ«å)HоR”ˆ«å)X·êÌÙ»­Öêa Ýq}t¬[åfnýÖêe0—îªn7oy×¾áû·Â:å}t¥'}ÌÛ¯ÙN³9ØìoRªéHŠ¾Í™Ï_sÿ3e9Ç”뫬ßwÛîݸ®Û·¯¸W(«å)IÅ_)JDUò”¤E_)Yû2¿~)JëïÔýüÿdä¡(QËo“¾ZŸ©l¶8t¢¯G_ÍÎËSsÔ{¨Õ2ÕWJN*û6m·ÿ¶?³ñ}¶Ë¶«¥gí¿ÛöÇf~+?ÙbþÒŠ¾wnßnÊÿ>Ü^|âSfuþüR••›­ûúºDUò³mŸí³÷âûlüz¶Â5]zr@÷Ù\ýúÔÝIÊË|hýWÑYó²þn)jêïƒÔÝõ{-{ó»);¬0긊¾R”œUö-ú³6nëuº˜Cw]])WÊR‘|¬Ù¶ßþØþÏÅöÛ,VÚ®‘|¥)WÊR‘|¥)WÙ³úùìo9[v5«¬|ÿ>}·øÝ»·amØE\¢¯³9»eó»©Ôf?Œê]])8«å)HŠ¾Îæm×ì§Yœìv7©Ut¬eþüì¥6=g:Í[)RоºÎêoZós—™lµ©Tÿfßìý°¾ß¶­øWWÊÆ^ïÎêSs–s¨Å²×WYöJ¾Ý{­kÝ÷ëÂâ*úéJN*ùJR"z¿à{1¿¯žÆó•±ÇcXùБ®¯›ü¼OÆ}ò÷Â;}õEbß+3wî·S)„¿uJ*ùû1ëìwæ~¶8ãúUuÌÛ¯ÙN³9ØìoRªâ*ùJRqWÊÌæý×Î̧Q¼ì7­UuŒ½Ö­ñý–ÆÎW?|¢¯®”¬ÿ#þÛgÿ«mþqWÏØÏ׎cyëøãù¬u3›¶_;ºFcñøÎ¥ÕÒQWÊR“оR”ˆ«å)HоR”ˆ«ìûvÿnÝð®ß>¯ðWJDUò”¤E_)JDUò”¤E_)JDUò³¹›uãû)Ög;êU]"*ùYÝ»}»+üûqyóˆ}WYøÍÿugVÿ¨vÏøŒ¹E_]c¯fçu©³2u˜¦Rêé8«å)Hо÷ùœßgù“³gâ”üt›d+m—ú”¿ßðþ¾.®’оR”œUö>}Ÿ?ßìoÙŸ°§Î&®”ˆ«ìηøõ)›6=}ÖëR•WY»?åïŽìks¾^£çùóí¿ÆíÝ» nÂ%}t¥'|¥)WÙøÍÿugVÿ¨vÏøŒº2ÿ~vR›3¬çY«e*®³l…m²ÿR—ûþ×ÅÊ*úéYó±êîÆ|¶<óºusоR•ŸnßíÛ¾ÛçÕþâ*úéYóï·ùñùŸ ϾP½õ6g=}ÏüÍ”çvS®QW×Xëù¹Ùjnî£ÝF©–ªºN*ùJR"¯”¥"*ùJͲ6Ûm¶m²¶ØÍªâ*ùJR"¯”¬ønûºó+ýÖ;æøN]\E_)JDUö-òó7|Ëu2ÜKæ]])WÊϲUöëÝk^ï¸w^NíÛíÙ_çÛ‹ÏœCê¹E_)XËýùÙJlγf­”ª¹Å_fÃ6ÙÕ™þ¡ÿ¿âzêéHŠ¾ÏØÏ׎cyëøãù¬u7·Î¼ëßuݾ×WY»?åïŽìks¾^”UõÒ”œUölÆþ¾{ÎVÇcêéHоR”ˆ«åc¯å«nwe¹§s—ÆŸ>üoÆ6äŽoà|îqÙxÓõD¢¯”¥'|¥)WÊR‘|¬ý™_¿¥u÷øBŸ¿¦ï·ûçÇv|+·ùB¿ÕrоR”œUön7oy×¾ë»|#®®”ˆ«å)HŠ¾Ïœß—Žc9ËÜó¹¬u])WÊÍÆíó¯:÷Ýc÷o„uÕ×ÿþHÌÿ)»£~Ï–ÝK?nÂt¢¯¢”¬uìÜîµ6fQî³Ê\⯮”¤E_)JDUò”¤E_)_ºFñÍ™F¿uqÀ{ æTJ*ùJRqWÊR‘|¥+>ÏŸïö7ìÏØSçW×JR"¯”¥gu6Ç­lÙ¹Êî¶R”¸Š¾:þnvZ›»¨÷Qªeª®•ŸöÏöß›övÎ)û ”UõÒ”œUò³}ßo»vâ»nÜr¾â=]"*ùJÿ’5ò÷m÷ìÌëÁÿí¾ý™x]D¢¯”¥'|¥)WØËýkÛÙNaØõóù§Sw3åóØÎz¿<ükWYÜͺñý”ë3ŽÆõ*QW×JRqWÊR‘|¬ùØõw?ã>[yÝNººDUò”¬ÎoÝ|ìÊuÎÇózÕWÌæý×Î̧Q¼ì7­Ut¬eþµíì§0ìzùüÓ¥}u‹~¼Í›2Ýn·Ù•Mòvûï¾}ò÷ÜÝêâ*ùJRqWØ·êÌÙ»­Öêa Ýut¤E_)JDUò”¤E_+;·o·eŸn/>qªéWÊR‘|¥+6¶Î¬Ëÿõýÿ×WÆÏûgûoÍû;gý„ÕÒ‘|¯t°ãÿæq¯™–è[æêõ”Uò”¤â¯”¥fu¾Ç©nù±êÌ·RÔ¸Š¾ºô$köÿo»œ®êWÉ}òΨ¤¢¯³çcÕÜÿŒùlyçu:êë?Ù·û?l/·í‡«~#UÄUö~ÃÏÙ[óûáüí—é¸Ý¾uç^û¬~íðŽºwSlzÖÍ›œ®ëe)K«ˆ«ågìgëÇ1¼õüqüÖ:®“оR”ˆ«å)HоR”ˆ«å)HоR”ˆ«å+7}¿ß>;³á]¿Êþ¦û¾ßvíÅvݸå}ÄyE_>ÉWÛ¯u­{¾áÝx]])8«å)HоR”ˆ«å)YûúñÌo=5Žˆ«ë¥)WÊV³oö~Ø_oÛVüF«ˆ«å+ßô:3ÿŸdº VïŸ SáÕоR”œUö~Ûý¿lvgâ³ý–/íWJDUò”¬ùØõw?ã>[yÝN¸Š¾g7î¾ve:çcù½j«¥gϾßçÇæ|/>ùB÷ÒŠ¾ºR“оÇ^ÍÎëSfeë1L¥ÕÒ‘|¥)WÙÜͺñý”ë3ŽÆõ*®³:ßãÔ¦lØõ÷[­JUÚ&ÀÇým·Ì0¶éü¬ŒŸß¥z»v¢*þ ¬´”P-9f~–Bþ=þdz~±ÇÞð PÜIÉÅt²zñ3d'–5$Ä |ŽJèNÛî½Ô!€œ  š ÂZ’¹(oü '›|R]nÉNètîRµÏ¶ª¯ùYE 5(NNçt}÷Ê“f7õóØÞr¶8ìk}© ;90I8˜Wå à ä´wJwGı¿¤få'¤¤Œ}c&í($,LÄÄg %pÄŒ%Œ´²œ…Æt’¾åtöͨgø£b¯ùÛ?ÛgïÅöÙøõm„j»édÀ ÒX²’PÞ‘»§$gC•±_5%|‚‘ºRžžÛl÷ÀWï °.´>|‘‹á8nb¸Î‡Ø°×»Û}*¿ÉR³wÛýóã»>Ûü¡_껢U|¥fu¿Ç©LÙ±ëî·Z”ª¸Š¾R•›ä¯}×ò–½Ûàî®."¯®”¤E_)JDUò”¤E_+7qçü½ñÝ`îwËÕtˆ«å)HоR•›d+m—ú”¿ßðþ¾."¯®±o•™»÷[©”Â_ºªéWÙ»íþùñÝŸ íþP¯õ])WÊV³oö~Ø_oÛVüF«ˆ«å)HоR”ˆ«ìuüÜìµ7wQî£TËU])WÊÏòþËÙj_í°VWv€vX¸FNûÃe§wûoÊ3¥Šu'ç§E_ÞØ Ò‚‹AC &ì–ñ)%²z{“÷GÈÿýËCæ]ôD†††”LbɈ@ÒØ„^OKâÖBH`ÞQhC flܤ>k˜C Ü °Üœ–Ô¾ J ZCr6ÉJSƒF#’2ÙwÌ@¡ ŠB ÝoÉI_GìÛ}Æm³îÎ7¯ÿßûÌÂAº¿º(M(–Ô†€Ôâò0`Î7d0o݆–t¡”•ï¯$€ÄÓÐøoŸ³ÈvÏûöÙúýFÌoëç±¼ålqØÖ>®ô?¦¯ÐJ@ÂPÌ1† l1™™ŽfSWâfBŠ)‘Æ£ ÌŽ{ìͺÏÖ Vò«þ€pÒ¹H„'« ˜„°Â¾ÛnÛ”KéFFÈF=ïhi3/`09/0jF¡ö,½ñ( ý-“Š%¥#v¾k,¬›»:ñŸÐßt}þûáymîLšªÿr`*”àÎ’o-!¼½Šä¬ÈÝI@ ÿ’ºÜgå~œƒ/ ŒéÅý›§6t¡Ií•—»ã:¯¢PQ\0™ñ,´$­¿Ý-Ê èÛü;²Kê ß#ïûÎb,´MbÊí‰_#”âYcC2Ôß~’Ý=œ6Žj”üêÿ–Ò”½ *ùY»¹êìwÆn§<óòUtˆ«å)HоR•ÔÛµ³fç+ºÙJRâ*úéJDUò”¤E_fÃ6ÙÕ™þ¡ÿ¿âzêéHоÇ_ÍÎËSwuê5LµS9»eó»©Ôf?Œê]]%|¥+?mþß¶;3ñYþËöœUõÖ|ìz»ŸñŸ-<î§]]"*ùJR"¯”¥"*ùJR"¯”¥"*ù}Hᥤ5=¨Ãql€Í’RCP”|ÅâÑ›òЭ|á?’XÏþBÆgJräaçöÃý÷`+ú@cІä$ò†d%žÒ–Å!(OJdFÉ(þÚáÕUÿ:1D £–J Nl͒Ĥÿó -@Þå!쌎ÿ6׃½€’‚öBHH!%ô ¤ï›²JÈ9(ÀeòÐ4ö¼}·|o•_)J]«å)HоR”ˆ«ìûvÿnÝð®ß>¯ð},2€v€½{'äˆdô%$5±E3§Æõá»_0»ÀT¤ô~QIOÃ8×û”Ãbùù=?^ßÜù§WëBB6ã¾£zI‰û ¤tîJG-/öß ¥ü…}ykè„"ja©%~œÀa9Q[°Üÿ¹}ñ¨|‘…n”$ûçpÑWÙ³úùìo9[v5«¬ýŒýxæ7ž¿Ž?šÇUÛʯ”¥'}Û·Û²¿Ï·Ÿ8‡Õt¤E_)YöíþÝ»á]¾|9_á®"¯•™Öû¥»æÇ«2ÝKRêéWÙ³ýû/ìÛñYûW^ÛlÌÙæÛwÌö^j‰E_)JN*ùJR"¯”¬Û#m¶ÛfÛ+mŒÚ®"¯”¥"*ùJÆÏûgûoÍû;gý„ÕÄUò”¤E_)JDUúÃA_££%™T½HÝ–¾ÙK}”a4¤†X¬S¥%ô$4#t$ ålÉÜ5¼jþIiî›á÷ÖÈdÀ @béÅ ÷Ii`ÜVܲƒP0´l‹û:°†é_Úâ ª¯ùÐà Å7ج„a¤–Å öÙgÒ…eÉ»À0&”M)Ê4'âWCÿNÜü5»öë|“¾¸7O>U|¥)i*¾R”ˆ«å)Hо]bf&äŸÆ'ü²BpÄ„t¡º3·ýÖà ¹7\†‡B{d©Y(Œ¯“ò6éOèÿ Ü$ìÏý´êÿ¡Œ ;&'”ŒRpf á…biIBä vÈ;”žãF7×Î „½™==[îœVë=•ÛôsvÙ¾g_½À›wÝðÖàT–ŒKéIKG AHÅÉ,“Ý\n÷Î3¶¿eý›~+?l)ýËÀÒÕ:¾ºR—m5|¥)WÊR‘}Ž¿›–¦îê=Ôj™j«¥"*ùJR"¯”¥gÛ·ûvï…vùðå„xоºVnû¾|wg»”+ýMÜyÿ/|wcX;òô¢¯®”¤â¯”¥"*ûùY›¿uº™L%ûªŸdï¾ß|ßu﹟UÖglÿ~Ëû6üV~ÂÊ*úéJN*ùJÇϳçûýû3öùÄÕÄUò±o—™»æ[©–â_2êë?Ù·û?l/·í‡«~#J*úï«€„1;¡*% ²’4Î_ /9}ˆÄŒ¸NÙ ,#ß,ùØõw?ã>[yÝN¹ÒR Ì”då«íÏßsÇïðe§WûP ¯¤¿¶(c`Ò¾ù8›É?a¿ ®fgéúϼQIÅ¡ Ç'o—¹ùÏGû‡¯¼§P ©È(b , g,¢†ô†7%d†ï¿GÀ`®y]/¶kóý‡iÕò”¥ÛM_)JDUò”¤E_/J²ÃIÊG,–0¬1±ÿ~‚YH÷û¥ÐÝñÒR& ût¤¤oÐéÈÈOî”ü„åb“Ý¿Seõß@pÀ*Ê/†§` 2>eòN,i_Ÿ¶è% èAeüŒ›eÕWñ@:øðf|ŒÈá¿d¥,è A[М„ò:¿èN¾xÙÿlÿmù¿gl⟰›Ñ±IFä„·@Á˜3ô#ò¶Êùûïº_rO>ó6ŸÊ¯”¥gu7Ç­Nù¹Ë̶ZÔ«¢U}t¥"*ùJW§ÑÝ›¿=jù•ö5×¾ë”UôR”œUò”¤E_gÎËù¸¥««¾âTÝõ])WÊR‘|¥)WÊR‘|¥)WÙoñêS6lzû­Ö¥*®”ˆ«å)HŠ¾Í¶¶Ïß‹í³ñêÛÕt¤E_)JDUþ˜ 0A~·}›’ñC~GB~GZÃB°×Ù¯«ÐBH!”¡©®B/~ŸŸ¿Ihù1D´ä Á!>øÓ,¤¥™9±y?%;í‰ï–ÉÉòE*ãÞª¿¼P!‰Kqˆd9–†Cÿ·ÎÃJìù*ì’»ªò¨HÜê=9]ò¿Ç¶Z—Œï¯ ÀLž4´ M! 4˜œ7ätÝÆ:Kß q™Ðûœ÷´!@0JH]º /¹JÿâÞÄÏþOd픫>ÿ¦Ïçcøp_ð:^×€òÑÃP8g(-»§~0¼Z2@ˆ_³äë´p @,,1äŒü —žR8?ã w)?~ÏËݽ¾ÔÕÿ0ºa¤ÔËOÈ)ét6Ï•™ûöÛ»çUô„Ä4¾3p ¾G!Éeì–)6@gNKlÿ”‚^%íÑcH»“ˆÿ—ŠF(1r_-rjZJbœd`ù-þ -fίÎM,²j@Ài1,‚ÑœûöJrXpŒÉ£] B7{8 I×+¥hèÈOà÷á¼¢XfJ2ßtà…)®)0 #àÂÓ‹ýRKé%•ƒrЗOŽYÙ±ùîßý÷o”·ù¿Î­övÍ¿8/KóÎO}™C#}·ûnù›õmÌL¦fSY+>}öÿ>?3áy÷ʾ«»)«å)Xëù¹Ùjnî£ÝF©–©Å_])HоR”ˆ«å)HоR”ˆ«ìØfÛ:³/ÿÔ?÷üO]])WÊÍÆíó¯:÷Ýc÷o„uÕÒ"¯”¥"*ùJR"¯”¥"*ùJR"¯•›3¯÷┬¬Û [÷õu›¾ßïŸÙð®ßå ÿJ*úéJN*û6açþ¿ùýÍpìvÊÕt¤E_)Xùö|ÿ±¿f~Ÿ8š¸Š¾Ï²wßo¾oº÷ÜÏ­à 3~ÿ¿~¿ÑÝfî„0¶ms)KÅ_î0ÁŒßfGI[þŽœœ‘ÈG+÷tr†-Ñ‘ÝîaE ½Šå¾ }ÊA+^û¡¹Yþ)jòзg¼Õ,žu¡H -† 3¾Ã@¶û§'¥öONÏÒ[«§$ªää9C ø·ß%öÛ¹ù–£6ïØÿê>ÉWÛ¯u­{¾áÝx]]n:*ùJRÒU}›3¯÷┬¬Û [÷õt¤E_)JDUò±×òÕ·;²ÜÓ¹ËÇãO«¤E_)JDUò”¤E_)JDUò”¤E_+3¶¿eý›~+?aêéWÊV}“¾û}ó}×¾æ}WWÊR‘}Ÿ>ûŸ™ð¼ûå ßUÒ³9»eó»©Ôf?Œê\¢¯®”¤â¯”¥fÌ<ÿ×ÿ?¹®ŽÙZ"¯q»ç@JÙ_nØ!nj¹µÔÛµ³fç+ºÙJRêå|¥)8«å)HоÇϳçûýû3öùÄÑo—™»æ[©–â_2éöíþÝ»á]¾|9_á®QWÊÏWsþ3å±çÔ뫤⯳ý›³öÂû~Øz·â5]+;·o·eŸn/>q¥}t¥'|¥)WÊR‘|¥)WÊR‘|¥)WÊV:þZ¶çv[šw9xüiõq|¬ÝÇŸò÷Çv5ƒ¹ß/UÖl3mY—ÿêûþ'®QW¾ù¥ÿVý·OÙÌÛ;oÕª)^Ÿ÷Fg~Üõ+÷VøÆ_Ø[ª"¯¢”¤â¯•›3¯÷┬¬Û [÷õtˆ«å)HоV~3ÝYÕ¿ê³þ#.Û¶ß²·í¿Û°–õrоR”œUò”¤E_)oè/§„¶ù;3>ücuäïðOue·G>Á(«ìηØõ-ß6=Y–êZ—O—óqKWW}Ä©»êºDUò”¬ßwÛîݸ®Û·¯¸8«ë¥)WÊR‘|¥)WÊR³:ßcÔ·|Øõf[©j\E_])HоR³q»|ëν÷XýÛáuq·saods9/ds9/doc/user/binning/largebuffer.png000644 000765 000000 00000220163 11332353405 021227 0ustar00joyewheel000000 000000 ‰PNG  IHDR;ðþ›#{bKGDÿÿÿ ½§“ pHYs  šœtIMEÚAášq IDATxÚì½yÔ¥gqX÷~k½}_«uK´$„@-`6,$Yò82 7vìçxb!Æ9¶3bl'™#uÏøLðg>°Mã‰ÁCƒ!6 0` ¨Aj--©Õ»z_îüq¥Wo?KÕ¯êyïúU§u¿{ßåÙªêWU¿ju:"ºî¦Ÿ!—¡”{>ñ!"šìª«7ßú—á”ënú™{>ñ¡Öµ7¾õÍ·¾ã‰=}D\\\\\†S}è÷Ý=ÙýãÇŽúˆ¸¸¸¸¸ ³¸ÆrqqqY*rèÀÞ㇈ÚÌòU+W¯ìoëÄñcõOw}û Ï[ÝZ½zõ©S§~xpzÍæ%/zdßãs¿ÿо“¼ôÇ})¸¸¸¸ ³?väøáƒ—¿øÅøOîûö·‰hfvnP¿Mk,jµêŸ®»äºc»¾¾åÍoš˜˜øÈG?¶ãÀî¹ùõÁ/O?zÁÜáG÷цK¯ ~îââââ2tëÈ¡Ë/¿\õ“Ë/¿ü¾o{fÙòAý6­±Zg«œ©™Ù#ó—üé‡þüÕ¯|Å‹.»ô‡Û?{zùêÉéÙúwÚ{¾{zÅÔá¹ÍkV¬ö¥àâââ2äÒjµZzï¢U“þÿ6§±ÚÁ–/lxìÁ§î¾ûžuëÖ^ráy_ÿÞ—7\ñz¢g~`ç·^|<°÷ü_åë +?}ãµo|íK¶å;ø›/ùh¸¸¸ ŸÆj›4GûÙÿ à·Õ•u]ñýo}öàÁív{õÄñÝ;¾±þ⫉èÐîÏ_ /ýÃŽÍ×ü„ø›Ö®þÙ[^qÉæõS“û}ø‰½ÿù#_Üwðȳ÷¥;oûÇkçWÑ¿ú½ÿï±Ýû«^}ÙæŸ|õ›7®™h·ßsð³_»ûW¾Óéýßïúé…Us¿ÿáÏ}á›;†h5P‹ˆŽÜ{pÏã«×nL~ç‚s×¼õ'^~ÉóÖétî}à±Þõåj(\\\\z­²(Ò ³üöwÿÅ›r_ÿõÿ篑ߞõµä‡Œ• Dm¼â5ßý‘Y:NDgÎØ7·jnaÃêã|{çîMWÞØjOˆoú®[o\·°âñÝûy|÷ÂêW]r~çèþÓgÚSDô 6tÕ]uÁ껞˜œš%¢äE·Þü "Ú±s×ÑcÇ_|ñæ[où‘Mç¬X¼ëžÊÏÛ÷ä£GX¶b~xTVW:D”°bnæ×ß~óòeÓûù¯µ¨sÓk¯]??÷›ð¢ ßJ...½WXFtŽ4ÈÞ÷¿ùåK_úJñ·¿û/Þôÿñ#ÝÿÎ/ÿ£Üos>VZñNLÎl¸ò »ÿþo¦&¨ÝníÙñµöºõ'O»àºée+ÄG?gõòu +ŽŸ8ùsïúwV{rjfÕò™Ã‡Ï­9orr†ˆ^}ÕÅDôÀƒ^|áy׿êe±ý++ÏÙ´bÙÌO¿á"úà_}òõÉÉéÙW¾ìEïù•rý+®¸ë³÷ì>úÜ£vΜù“÷n!¢Å¿ùò_{åìôÔ_î[?|lÏ/ü£Wž³zùWî{ð?ýõÏœéÑ¿üé×]ü¼õ+çfNœ:½ã‘Ýú·÷<úä~"ºdóú_xã+×-¬øÖ|úè믽ôSwßÿÁ»¾BDëV¾õ¦k_tᆩɉï?¼ûO?~÷#Oî^ð…¬ÿù7¾ríü3?¯û³?sÓu¯zÉE+çf?ùèîý¿÷Ÿ½tó†å˦Þµûÿüƒÿ²lÅê—]~ÉæMë^°vvÇžS-òÔ—^k¬&‘½·üÒ¯Ç_þË?ü]ªÙëÉßþæû?úÛÿü]EUý»º`ðÛœÆÊ¾ÆÜª5Ë/¼îøÎ»?Ý™˜kŸØÝ>÷ü ›‘W}úÈñc'NÎNO½ïöŸÿþ®ßßùäý>>7»011AÔššœ¸îò ˆèýúè{õç6¬]¸ø¼sž8Ú¹ì‚s§§&;Î_þíçV,¬[1¿î{ݵ{ÿÆuóW¾`ÓÇïÙïoþÑ+~ðè“W¿è¢·ÞxÍÓGŽï¡ÇV.{ÍU/øò×îý‡¨ÕZ»°âs÷|k÷Þý/½ì¢«/¿äWÞòšwmûðªU+o{ëëW,›ùÖý?<|ðÐë®»’ˆxjÿSm<ï‚ßxûMkVÍ}î«÷íÙ»ïMoxÕ¯Ýzý¯ý_>~ú¹{/›™úÕÿõõË—ÍÜû½~úu×<— såÅ›n~Õ‹zl÷‡?þ¹ås3/}ñŇ÷î:¾ažˆÎ™_yþ¦ k7]´zår"ºøyî}ðÛËW.¸Îrqqé½Õ6ýª•üíeW¿&§äøßþëßÿØûÞñ“D¨«úu™u9sdï™ïL?ÝŠééé©ÓèkŸ<Ýùý¿üüÏÞ|Íu/yáu/!"zbÏmþßw=uZ­—¾ðüå³Óû>ýÍïìøúwúÑk.ûñ¹jñc÷¬œ›%¢cÇO>r|ú Ûíɉ©‰ý‡m\G«W-?väP|£;ÿø/¿ôïþ¿ÿþ]矻öãŸýÊý×»Þõ‹?}Ók¯~ÞúU_¾÷Á«×þÖâá÷®X±òïîùî~ç›Ö¯¡c{®ºæ²ËfžÚwàöß~ÿäôìŠå˯¾ü]×í¥—ž¿fÕ܃<±íÿbzÙŠÍçm¼æò\¹yõ=ìkONuozÕ%ç/_6³gÿÁÛÞ÷'¦f~÷]oÙ‹žßýÓÌÔzúð£Oî}bÿ‘}üKÇ9Ñ~èû;¿dó¹øÿ;ucrËfgN?B+ +ÉÅÅÅE£|ÚÔn~ÕjµÓ¿Í]­ú<ÿÛý‡w½ï—n9K]]ûÚÄ}“‹)¨:¸ëS{prÙúUÓGNœ8qüøq:ñÔ¡§Î[¹îyÈË~ã]Ÿù7°qõÌå—lþŸâG7m8çæë.úÃÞ=9½ìUW^DD_úú·[퉯}ïѽæ²{ùUôáÏ:zœˆfg¦—/_Öšh·'&¨ÕZX¹œˆ:|æôiê„wÙ±ó±Õk7;Õ!¢ï?øÈ²•ó§ÚSD455yâøÑ‰ÉÖÏýä˯~áO-_6Sýdz¢µ|v’ˆÙµ›Zk6^ðÄç`½5«çˆèÂó7üÕûß[}xîÚùC_{`ÕÚs» Þê•sDôðcOR»}Φ wí=ò²g¿ù­|íÛ?¼úE^qé…DôäÞƒÿþw=¾ïèo/~âÅçÎmZ¿°ëÉ=¯ºæòW_sÅþƒ‡:gΜ¡Î„×´¹¸¸ôÜÇj2Ž•»Z ÙËþö·~ñæ:–øüÑÇ“÷ÍøXUyìоC;¾|äôäó¯¹áèÁ={ÿa{›NÑþû?7³òM3s+ùWšœ¸âù¿N§÷~úó÷=vκïþÌ-¯^±|vß“^pÉ‹®ºä<"ºùu/¿ùu/ï~ùÜìË.=ï»?|ìÄÉSÓS“?uë·ÿýÃí™öK.Þtî9+‰è«ßºb"‘§púôéÉ™™î œ:}zjf¶ýlVH§sæÕ/¹èµ/}ÁcOîýÝ÷èð‘£wüÆ;Úív«ÕÚ{ài":ïÜuÓ³³Ôjo>wmuÁ}ÑÎÇžø½þ·êýû>u²Ó9Óž˜$¢ƒ‡Ѻ5ó“S3-jo8繺´“§ÎÜùçŸ9qà‰MkWÿ/·üØ«¯¹üå/ÜøÑ/ý`bbæ«ßâÔ}­˜›þå[ßLD_¿ïÖĵ²Sàâââ2`T°FsW; LýößþÓ›*ïªúú­_¼ùßü§OÄ÷U ‚gN<üƒ/Q«µé¥7NÍÌM­›;}ékþà 33ÓSSSOïøòÌ•7ðï?=5ù¿ýã×>öŠGžÜßéÐ%ç¯%¢o~gGçÌéë^ø¼É‰ö‘£ÇþþÛÏd¨_xÞ†óÎ]û†W_}çŸ}ê/>õµŸ½ù[ÞrÓk_ñÄij_|þZ"úäç¿ú;ÏÙtQ:äÓj×òÎRÎ݇<}úôôÔôën¸®Ý~晿qÿÎC‡­[³úŽ_ûù£§èEm¨~òõûÞ{àéÍ›6üäë_ùèž§V-¿êÒÍôáÏ<ýàÔyæ‚÷þðñÃGŸwîÚ_ù'?y¢5ó²Kϯ~~Å 6½éµ/ùÎ9zìÄù7уOÜ÷Äï¼sËþCG=~í‹6/_6óù{þá»;vž³é¢¶i%¹¸¸¸htÏYïý…sß|÷òì_¥kª+ñÛê¾]0ðÝüÉî'ÿöŸÞß7§±7>úÈ7Ö®œ~rÕËV=[]´æy—î>²wóÊ“SSSNçᇾ¹ú¢«™:qòÌǾxßÅWmÞ¸afzjÏþƒ÷Å¿ÿó~fvÕ9¯zÉEDôÑ¿ûòý×wÉ£®¼ô‚÷®-/¿ê²É?ùا¾úÀÃ?òÆ×]sñ›&&Ú;{ò®Ï~å¯þöóËV¬žšYF¹,…VòŸôÅoþà…ç/\wùóÿå–7ìóßýöÿéºlÞøÕ{¿¿ý ߸é5/;}æ ;qê·?ñS¯yáµW^ò£³³ûþÎŽ‡xàÖÔª‰É©îp=~jëùôÏÝ|ݯ¹æ¾á÷¿öê˺wÜèh»E7üÈås³Ó‡Žûøç¾úß>ù?¦W,<¹ïàu—=où²Ù=û}裟ùÀ‡ÿvvnÕÔ̲öÄdËQA—«,Qᆵ|æòùñºkÿ¶ëeoÄþ¶RWÝ»¼û?oïÏß¾opán¬>òdð‡#Opðàý–/_!óægΜ~â¡ûOŸ±óþÇŽ,_}ÎÊ5ë»­=¼ÿ‰‡[ÔÚðü·ˆž>ðÔñÃO?Þ¡Îääô²U ËW­™˜œžž™}èÛ÷œ9sz~ݦ•çl|ø»_#¢uÏ»tùªùG¾÷ÍS'ϯ?Õ9çîyô‡î[µf͹›OŸ:¹g׃'Ži·'æV-Þ¿§Ó9³öüœsÎúÇùáу{O:yçoþòU—]ôþ?ûè]_ø‡5çnžœšÞÿä#G:yìÈ™3g&&&'gfW¯Ý´lùÊ.*Ø…÷ìzèè¡}§Nœ™kµZÇŽ<ݽã©ÇžÚõàé“':gδÛ3s+V­Ý4=³l÷£;Ž}ºsúÌÄäÄìòù• ë&¦¦§g–ùnrqqé©xêñË/?‹ÖüÞ/}*÷å+^ù†g´×}ßY½öÜ^ü¶úZòÃîo«¿î{ò‘çúc ðÄ¡=ÌþÞν^ü:jŸå—µ&&ά»âȉý—]|Ñ¡C‡:?ÜùƒÃfòe¼íöäüúóÏœ9Õ¢V«5Ñõ}&§f&§gW­ÝØnO´'&'§f¦ff‰hzf®Ýž˜ž#êÌέš˜œ:>·ªÕj·'Ú]¯izzvbz†ˆV¯?zvY«Õ¦Vk~ýù³ËWußbõúó&'¦ZD´r͹ËV-LN͵fçVί=ZÔU6³ËWMNMµ~öæk[t̓?~ñç^uÙ…O9úw_üúäÔQ«ÕžX½î¼ée:-j·&Z­V‡:Ý‹?çóN̯;oznÅäÄT«Ýît:+OŸš˜œ"¢ée+Ö×nO¶ž}ø‰É©ÉééÕçlðö×û^{þÆV»Ýjµ&&§V̯å§djfvõÌlòO+£$¢å©¦/....à Ɗn`¿ >뢂íÚ»d'ñÉ÷>¸ÿÌéSív{rfÙª5ë§f–Í®˜o{`ÉÅÅeŒäı#GŸ>t¼Üwßw–­X==;7¨ßVŸìÙõàs¨àRû¯:gãìòÕíÉÉn^J{brvÙŠvÛ3÷\\\ÆJºí¦î»ï;øO–­XÝýÕ ~ˆ\A<ö²låü²•ó¾š]\\Æ_iÍ­˜™[1Z¿Mh¬®uäà>ŸQ—ᑹU ‘Etä྾çm>:.....Ã#o{Ï+¥åÑ—!•mÛ¶Õÿs2þÆþýû}˜\\\\\+‹‹‹Á'îc¹¸¸¸¸Œ†¸ÆrqqqqqåââââââËÅÅÅÅÅ5–‹‹‹‹‹‹k,×X.....®±\\\\\\/“Ú,,,$?ß·o_÷Oûö5FNß+¸xuÇú­K#þmý|µòw¬ä¯Ù5\l‡à©´ÏÓø6ÁjnÝà¢íõ·`ÎäxN}S/kûa/Æ69h=]~“¶ŸõóÔ@îÕëçÔ)9TZŠy¼………………}ûö5ûÀIeÔUüâÃóT¤’Á’ŸÏf§¾ZÌ}›¬!?Lz«±DÍÙS×$ç U«Ê¼ºW¨~Ëøp9Ç¢)oyëøeëw¬ü»ŸS“ºfMcñ½Ñèµ—Ãv#sŒ°ùÖO88¹ÕÒç'dzG*¤~d%ߎ™GÆÅAŽ©ž¾ ò؆yl÷tÊãÑiüLÌÙ½^ͽx5­i–|’º¯ü»ÿÏèþf‘ä½øÑ(9e’wTv¶‰öÖ½Xüà$ïÈ?aɈ1'h䦾ð4çßζH¸ðð[Øæq²pÄûàiætun­‰!‚FÌÀä8w/Zjø¢Í–‰–wh–YãXM©“>oû$ÚÖ£W3¼»a›õaj†$œ3u¿¸8ÔCbu5¸Ýr†ó°½i¯§¾©mh7^³6®ws™)½˜ñÉa^úCâ= ç«åPé1›šas°êÏ#:È«š‡¡ò’“áê§^µ¤+åaXBÕ»$5£Y›Ò»}>gÚ}Øá=²­zg½‚{¬þjA¤dØÎÙ>O͸ª«Þ lÉ\Ä¡»ažÖøñ†ÓË•ñä9õsgåÐ6ª“=šòø4oD3Uú H㻡}µ¦ž$xªAMMüÝä+ôm^â¡f€Ÿ£Ÿ9y)æâ}^Æüà$7ò`7²ÆúóTÈ6½>Œ-r ›eߺöÆ·¾ùÖw<üä#÷}ð=o#ïAìâââÎô¨ àXBýÝÄ_ß¿fnÕÂîGvì¼ïngirqq̱56¹à–ˆ¸Ærqq€ô!SÜÝÓñ“IŸr—*-—¥6†%Ïì>–‹‹‹‹Ëhˆk,×X......®±\\\\\\c¹¸¸¸¸¸¸Ærqqqqqqåââââ2Þ’¨Çêc¸¸¸¸¸¸ µµmÛ6—a×X®®\\\\\†VBTpË–->(.....à óóóo{ÏÓ>–‹‹‹‹‹ËÈøX. Šç°¸¸ ³8¤äËå,ùÕ_ýU—áï^ëËÅw…‹Ë°Ëââ¢[“£(ÇrqqqqqËÅÅÅeÔ|/„!‘d”QÖXݮ̱ìÛ·ÏÛ]7.ÈV3RMAõŸñ”ñ&ïÌxÕÝ<¾ZýO%ÏÐì !wAÞQ5øÌ¦¨>I~Ÿ[fëñ¯à»²D-IÆSPË7@DçXUTÿ^XXNLäCÕ“tÈ<özªòsw)·´ê¿Õ^‡Q¢ÁŸ’öANIw.N« "­VËa€g eœ,<’F««7Þ¨g¼Þw©>Ñ÷É/'MõÞùͪkò#“tDª#¼r Gã±µ-é‹øŽpqiDšÉ¼¨¶eòtIŽ?hÉ¿VŸí잤 'W}9>ŽtƒÊ—SnLrwÉ}?ø¼ÿKZ5¶u'²þœ..ã-“ªSƭŹ–‹Kï$[~ïahó<„ìâËÅ¥W2rÐÖ?°C….®±\ŠÄÙ ]\\\\c†8´‹‹‹‹k¬mÛ¶ù ¸¸ §$;0¹¸ÆrËÅÅeè$ÙÉÅ5–ï —!¦Ó(ÊmtÇVº})Lœ×c¹¸¸¸Œ¶,uåËÅÅÅÅedDÝ‹ØfÞd%Ïû?¹ºÉ&k‹g¾…±êCŠúüŽÖû¸Œ‡,į1KÛÖDñçF8dpüÅŸZ!Íû¸Œ¨Têê6º#û¥ðÉñ±â~íqkÚØ:VYÊÕ'K³+]ì²äÆ–¤nÅ`ƒy\ÄŸ óû¸Œ¥êJ¸_-¢Q«¦®ZKØÇϬ¤…‹ÅæfB#'ÃÐ|/èü”k¶?ç>¼‹Ë˜Évº^p§X6öÒ€Æ*éñãçNòDÖ6`Tù¦½Öúÿðq#+—‘–èÓŒ*â4YëY$p|,êC® Ÿ&*OÅ Å{¥æúÖÕÃ×ãg..£(u=zWÈ¥\c(~¦ôÁ3«þÓÞÅee+Ý^i@ýTQ«œZº­uÇÖÎícì`A+NŽ 6³÷´r.7‹aqüãTòÀ&`Àáå©áyx÷à]ÆCK%ÿ“ù<©´êßWg ò±rÁùê¯¹Ï ŽóWŸ/MW¬>,ñ ðãO™jF–Èû¸Œ’ ­ñÅÑ âäY ÚÅü¯ÀÏÇØ¯Â¿N.Ë\û¡öa†êá]\FN+nÉúlü},—¾ùL±“Ä»M·ÑujUÃ1­ nXc98ãâââÒ¬£%YzÕå9....ý‘Êñêê³Vkl]«J¼?VÏeqqÑÁÅÅE«D¿ª›4¸¤Ü/×X=oCìââúF+ÌÏë¾Öu³Zã[’å«·²mÛ6F¶lÙâƒà2~Ò¸ßÃh)z\ž–k,w°)û÷ï÷Apq±ylÕç[éö;»u¨EãÍrå‡ò`dqqÑչˈ*X…Ô?i<¶”»š*Ž5/×X....:åÁgŸ÷S1T÷ªÇ®Z” o ¯ vqqqá\“‘y˜ÎøO‡ ±b¦Q†{ÔiI‡D@ÒX[;+—%èT J{uïÔ]qÒzöÿ;C§nÝÇr1ê*j´‘£‹Ëq³ré½Ö—( × ÿ=~¥Z‚ÆbZ0zÐî(ø·õ½“$çþ¡‹‹ ïfiÿÚk/'pÂÆ^Œ>–ÁBw£~hÝ2r*HØÓªGаÎH½BŸ4–[è®®\\–š§7¬ßý´ßy•ëudÃ÷tuåâ2¢Õ-tW Ã=×Èc„õÇ«+³ v8¨ÁZB>V iˆO뜹‹æêÊÅeÈ=ªXyÜ@Ÿæ[ã*©Žÿ]ý£Ò[ÁÏ—„E@¯aþXtOËÅÅeÔ=­äq?(•$\€šr;]¿T|¬¤ë*ž8“¢ú$îƒ^é*·î‡ÄÓòìM­‹ÓUI=ÑSä- ï*I'ØýÉvºþ6ºã.ºeÔgeiJ¦G#å¿æÒ IŽs.éââÒ 2ë©›%^¼ê6Rõéþäú4Eæò±\\\\Æ^/*†ÚrnVãîWpÁ³¨[‰Û-Ýìv—±WWqb^ìèÄé»_9²º`Wk_ãéz]c¹¸¸¸Œ0ûì»l¥Û™$õ*‰1øZücyáÝFz.‹‹‹>..#ífº­© "·ÛE6Ò#XïÑu ÝU÷ÿ¶Òí[›~×Xc(Þ·ÐÅeÔݬr=ÔýŽYIl§ëï¢[*å´•nßHOŽ ¸ªÿP«e]c-!Ù¶m›#[¶lq÷×'hD=­€Ö×[6 Q]3Nöo·•h<ò]c¹ƒ5,²ÿ~Ÿ Ÿ QTW5­Gô–ÙÉë^tÔêÏAC>AƒÄ»2h»ÒÇèt¶½óìït?imí¼³úSýk·µîÔ5Ü>ñ\A—1'ïp鑪±øO+†³.Øj¥ÿWûÓm­;«ÿ§L¬Ë5–‹ËÔ•·^sé§•ürÒÇ­“,ë©í³L"gAðɾ}ûnÀ 7qðe_ôÈ×*&id&%þanÌ“S#Þ BäR½–þÜ·pÊr{œhÛò†Ù9ïJ[ |Co2‚'ÙJ·x`7Ó½û§;3ªôìÕÆÄÇbº„$·œ·¾Ø ›5'¿€bõ©Aî…? ®ÇteE ç”åŸfÛ8áì¸t¥Ó9ë¸;%j—®ºªÝh2à¿8p›TWÌ¿åc©ŒÍqåe¯vxì_–; WÊßW<¿r†EƒO8p¾ËOuâ#ƒ/ªœFÆÖmGƒô ©Sÿ!r ÝugGøaì0µZ§(Ñå ùœúi ÝuVf IDAT¤´{q@ŒY <~ÍAAOM¹Ì)9l’:`'¶Ý™»ÿ0Þë§qAr ù]?ì OÑ;[\ßÈz"{Ü7+øD¡[Dgÿ'~­_N׃XÜlx86J«û:]cyPêʆ²V¿b¦¦Au5pce gqsCŸ™²à?ƒ@” tuU¨•“;ú“¤´"*˜üëÛë?¼³s{‡ZÆØýüÎÎí-¢­Û»šfkçöî¿·vn'j=§ÀÿÕý-Fuµúç©ãXf„Äe8}—f½«ñ3VƦ饫+ƒ”'R¥ nSü…àÃw¶î¨~øÎÖ-êTŸÔÿ÷ÎÖԢ෵uQ§ûŸ»ZºÆß ÿW×I­¼NêÔ<­!ÑX"€.Ãv²Œ%ا­Kä¡§‰‚`Æ9ò ̼ˆÅ ¿û æ¨ÿ÷·ISSf»—ãøȮˆª‹]%0BVàv+…»©ê¹ßÞ@Ÿîþ©ëlÕ‹š{Òm¤¥wËîc¹¸¸¸,— tMꘛ!Ï0÷µn¥ð3>VçA²`õI÷7t>uCçSÕ_okÝ)êÔá×X....¨Ë…“É&QÁB}ùÜ–[à%ý$]c¹¸¸¸ŒªÞBT‹ŠB× ½–ÛztŠ/#iwïÕsñF·>A.®ÒÀfŒàeãB±ºc‚UÕcŒmæ…K¡x[<Ÿ F!ùÕw˜/w•Ð-tW7‹Ýæ ºÆZÒ²mÛ6F¶lÙâä4¢Â+dßú¤Ë…h‘ºÛ”CŸ½Ýv6S{ Òª›ŽbÏ×Xn¿RÞ±Þ'hÈ'h8e;]}š9ôŠ <˜LL¿…îÚšÒˆÝÿì¦ÂÇZ*©GGE{¹Æò=?Y\\má4ä4„R9%µQ¡–ó±ê…÷Ð]7Ч«Ò«ä5»ê*ÐRI=Šƒ“ÏtqqqiFp|ÏF­[ýê.º%À·ÓõuJ Þ9KjБa×X....IÒ¡aô3)É XuŽYD Ñ ‡È¨`’×®œÀÍp…¡êHc[ž- ñ«OJ<_øâ—Ê]¨¤ÿd@~*Çx‚–ˆ¿…ô¼7¸\1¸‹6lÌä»óš’Wo#ìc5Þ§±°}ÃÒ”dw¾ú¤ä>ä§Lu)Ç&XM)H|¬â ¥mÒè4l~U|諲Uº0øw—½‰¤êàÛèŽnÃ:cD~;b‹Ù«¹æXñŸr_NRJ3Ïtܬöl@ŸTùø‡ã-}ž |„Å'qKn$”“ÙOjV%$yëw ˆq“¿[Uo/¢µ@KìÓ¡:ŽUæšJ8(Ôÿ‰‡Ý[~Œ®ª¥daV嶺Ÿ†ÃŠÖ=ÖjムÆ(Ó„"P99ÍĘ#aiö³ÁJ®#WòˆtPh &EŒòÅÀCÐÑ8 *¸V—«Aˆÿ›v¬çVÄ×ì"~T8Bú)–Ip72Š_`6aÉ-~B‰£ÔÓ[çÄᜠÃêíÛüp\'h¤UÂΞüÂVº}+pY­ 4“ø„Ôè3Œªå΋‹ËØK=|• **çTÎY¹ªrÙ —æRâ†5–c...KMo!Š! Í•¨(!aîkq’ÈÓ55Ÿ+èêÊÅÅeiJƒyê ²Œý!1Å#þ~]o 9W“÷Çê¹,..ú ø¹Œ½¢²U5•øÖV¹~ÚÛN×ӳ߿¤ ×X=o‹çä2Þê*—àÀk£þ¨‡­§{Wºm”+wêºÎ¦N½å«·²mÛ6F¶lÙâä4ÒÂ$8ôçÐOv®RN/Vê*†tûÝ%-ïXï4ä4*Þòyî^ÿÿJ UÌÈCŽPÛ×X¾ç#‹‹‹C¢-|‚†|‚†VQåÔR\+„Dã6ºãºkë³ÿ཮z–àªÇrqqqcžÓ<Ç^X§¸½‹n©¼®êûUr`%8üDîc¹¸¸¸4ïõYwÖ)Ø“D·”ÊÂ9®&YcyQ02&½¥ ÇRîØp$þœi\"^¹”Ox߀ 2žµ1ž 1VN}ÓÝÜ í}q…:œé‚Ž Ž’‚Û4'Û˜‰Qðëo衚 f|’ÊõÓò Nì |”érÈ-tÁmM†0ÿ¢­Ý–u¦ð¸éb@%^ÿ0ØÃÉoŽŠÇA¯íw“È÷Œ‡a‚˜Y Zt:ŒáR¨2+PT¢õîÃbRûÈûXÝV*£/Ða£n ¤­ƒí^Þ¢ÿΖí·ÞË¥\pLj©[L¸¼+0~eŸ›²ã§aðÍ¥‰õ_OãmKã^¿..¢´û¼«“Ÿœ³œPCæ¨ÀC úïö ÌLù¹”‹J6ÙfšÁ†ãXÃÿ#þ¦[—¸*ªçñ1¿™üþ¡Kr‚lÇ'È¥)Éñ0UÿØN×׉“Í‹‡­*kÜNÁêWý;¹mFz/åΔ¾ÝN;°â‡…—¡™êó]À?-Ù ré…k³ ”¸Ýt3Ýo¡»¨Æ—!ª½ññ±Ùpqqq¸ºÚN×ÇZ'YƒUé­Q‘žk,‡)\\\\ú#uç‰ù w¬Aj,ÊP¹¸¸¸¸ôÂÍŠÿ“糡4wçnï¹,..ú ø¹¸ôZQ%[[ y¿+×XC'ÞÏ'ÈÅ¥ÏzKüÐ5–KB¶mÛæƒÀÈ–-[|‚|‚\Ê¥›pqøp[¸Ærû}eàë}‚†|‚\pïê†1ÒL®±|Ï—,..‰¶ð ò r}¬¥ðšÞÑÑÅÅÅÅÅ5–‹‹‹‹‹Ks"£‚1cE?˪š­;ε*é)䇨þÊAÇ,äÃá|©¾-˜^¿ 3Ú#:q..Cácõ¿ ¸ôNûΖQŸ£ª±øVü þWdY4»t˜Ð½öŇ'E;ª‡ê]JÛHœ‰£;qc&Þ2mœ},—ˆ‡$]z$NìËÅ¥y7Å1—feË–-ÎåïËÅ¥WJËÁÅÅ5–Kc☸O‹‹‹k¬ÑÇÄ}‚\\\\c »8&îäââÒ xGG—Ñô±æçç}P\\\\\F@cmÛ¶ÍÅÅÅÅÅehdMVcmٲŇÇÅÅÅÅed~~þmïù`VcÑà€Án |`Éáy’Q|¼Ü$‰¼k ùXÄ„ú¦X Ï>MÜžÚçéÑ–áw˜ðO;nó^lUäŽåC4n™ýÔIÉÙRýj ðݾšŒÜ öô™GD Î…xfsÈT–?FÞ¹¬ö¾=sÕ‰Á^?lËc²×[k/>Æšô·Æxð‡Ùâ1Ÿ\ˆfçh$&±§:`¼×³jµŒÐq79¢›HN–.tÀ¯‰á<s ø¨ëcoUh”E&×S –ÂP «e´³Ý‡ƒ wgA|ñ¡5-ë¤ížŽo/†,yñúŒŠSÞ‹—M^vP޹vqO«o4@¾ð¬ˆËl Oˆ??¹ÜžÉ;pT ‡Énê!Y«ÈËw÷dÉÃÿN~Ø7Ç3~ŒäÆèÃó ãП±âïbûkž¶ÿ«‹_Qü‡ý(ÛsòÏ<¨‡È‚7jj³ d/ð`A¬ð©œ¥ÉÅÅÅEF´\†A\c¹¸¸¸„NÀp‚ù.“>....±ÒrÂ!uËÅÅÅÅe4Ä5–‹‹‹‹ËhH\\\à3 öîÃù$£øx±ÌÏÏûXùCúÿ3í0¶®½ñ­o¾õ?yàÈÁ}WÏïݲe‹«q—!1sßöžέZØýÈŽ÷Ýí¨ ‹‹‹‹ËhÈdR§5réýû÷S€ ]¶©EP¢ëXáŽîbð'÷×ñ×iêu•üžV+€±üj½¾l³6ZÈêüü|5’C5¤£»üÉýuüuš}Jtqqqq qåâââââËÅÅÅÅÅÅ5–‹‹‹‹ËR“±å4°X„ÍõÆBb%/e~Nñ'#úäq'§óGÞÇܼÎG÷u’O>f¯S¸MÜÇ ‡¯’‘~—m—PŸNöŒÝãcÞçu>Ò¯?ù˜½Nù6O«¦+óýj¬ãëôÔÿ3XX|S×¾y®Í>y?}<^?£õä£8æâ:oöM²øG}G$R²M†ÂÇjÜ'׊vŠØ¶¸YuÅ* «ÿPßž¼ÙWó1gž¼Gí FwÌû:¹‰ðÙgk˜Å<µ=]ÁCõä¿Zž¼YG¼oO^ÿS÷¸lä-»Î«Sµ©éÛë$'bDwDr" ؤmP£!ýᱤ\†ÁáÅeÐ uåRx"7¨€}G42åÓÑÖÞ¾ÙÄ„ú¥F=ßaPKaœž|È7'?æ ÏJlùjY‚OÞÈëŒôŽèÅ6ÿ\Á¦ÖúÀ¯Gûú¼™ýÉ™'¹ÆAóQòS·m½öÆ·¦5VõíúbÎxÔ3KÜÛªqçBð¨åÏMÃçÉÿ¬¤ZŒþÀOUd_Õ¯¼;x¾óÊ.ÚP_èâX!G'¸ÄÅýƒëZ| ]"ÞФHvݹŸ7Y@ÃKe%Uˆ¸ÌÀ²zµ«ÁÚm#|êÅñ_!>ÊíÂä&å¢ú_eÅ«ëœfMxPÿ%w hAˆšxx@ë¼B¼÷bË<îsNoÑ‹ZÜöˆMP¿c Æ/ÎX¾à£>§ÂE%Q?ÚÛ1vOnî‚£ ðÐÉ­ŸÜ«ÛO¹ù \@3–,f…ŒdU$mƒƒ’³Ü…9Dó.ºÿè.×ø‘pÑàÈ3Geü!£5ªï@>Vü@Ìbeæ;ùˆÂ°¡ÈšãÝ›-#bnâ9¢5ês '¢ªã¿vfd|± µþ¨êPf)Æ µ–)3S±bflæ@´ùj¢¾ )ðpnxâà;>hÚ³7îÀs„‰‹F ä|þ·f£‡”¡éÂ)(Ù„ >!žs›¬IÈÅVmh›ùyrQe©11‚žs.™ÈELù]€Ú B:14h8ÇTË#E=VS4²’´7BŽòä¸rgñG­#Ô¹!YdFÖÊð䉃³Qà¦7?tH¦¯Íe ’ÜA-ð„%•‚¡|¬«¤$¹p[!nw2ðœ3ûĬ3‰Žv¨¦L5¼ñ­EÀ@@>Æ“ÄB=fÀAm1²XÁ{#8>'ž?êÌ $dÒá´Éu€¤À©bb¼á6º#(Tâ·.Ÿ…ˆ$çÖ ³—÷‹ØxnÍþ>¸ Kþ“YBÚ©Àd3¦c}3¿5ø^¸m‹ŸYHY(ˆ4ÚèèÌV±Gʤ_>žþ|zp£dE¹*Œg®Õ9PôÒJ|n…E@j;bèáÊà¢zÛdrDUÊë'3ù¨¤›2Ï ® oÊ«Ö~-™üÂ?*mê±q" Õ±›+Çá_™q=ÅìMÕþÅ¡$‚iÒ@[¯¥!,»¹ŸÀl®cËL^âGUµärẜá“.2ëÙP“ÔÙñOÅØ_úD@|•€¼£œb0TÉÅê ÕŠl¢A Ç ;IŸ/PMnÑêÈr•Æ,• {ñÔcßT´r–CI…O\®‚ ´l±ÞÀxxUÆN™Ä-$I˜j”¾ñ9Ëlj•FQaËø]„3—Š-à§µ™*à8’§5⯖;(ÄsÛ`#*PAq—Àh!Ðt3Á'؈·SÍ.CøÔ»(ˆd`@EÜß_$ÚUgËì§FÅpªÚ0™œIÊ;Ü%é0¶ACâ:x–"DŒEsœ×Ùª«â™³Q‡ðC‡êKL+ž%€Tœ|ˆ;çT‚›\µÂl*Á|©ô._uA02è{Ù lmàd/°>œ–ž±I„W™áÉb»r½س†S•çäLºHŒYõðZ«Yœ¹þÛ$Ûuò›ÉÝ'–‚Ù@0pñƒ´ÑZ4µpûk‹ˆ7?[Ó¤”ó¢~û˜€ 0ؼŸO0“q$º…Vv.¢ R~å–ØòJµ÷Ä8¿¡òLÏ)´Zš²£ãÞdi ˜ð³´ˆ0—6M WÛÎO„V“%A§ä-‚“!¾‘Ø Ççù¼¤z¢ÁÕC!pφ€´ö l*ˆwPÎŽ¬/”»]˲•s&r¿³žpê-Þ(ž;MMd9—’˜dˆ§iMlÑaçíÑ4-˜B½‹Ôžk½Õî{1Ùž¢Ï¡õ˜Uô¸ôú ÚÔDÐlE¶6^°‘¬JT1‡ÅjØæ‰ÚÜz²ò`[‘]¢ gŠKÈÆƒƒ jTÐìl&§™?ÑzÁžZ@|!ˆ¡+ E¼ '^ßábž:SFJ“ÞG§&ožÌ­Aô Iî()h‰}Åô}›1T_HüÙÄKrø˜jrùv½f€º¤ò©3p<b!3éÙ4´Å7Z戸—A² §ªg j)ãµëåvF| Üµh †‚æ$¤Õˆ!A9éÌ%6KÀãI rƒü³*/¬Ç/o9ˆ˜}9C[x†q KˆS›ù>Òý\•ƒ  Êx/I ­®¦fÂåÉâʵ´E1„µ[×ÀqPR-¨ÉÜ7ãOø {ÐêáyÖ+A¤Kâ™÷eT¦4E@â+ª¸…X;/žDŒ2ƒh!“…+¦åô1ÃDÅëÐGDòÔpÕFâ£*ùÏù:xr‡Á$C3†ÃXê58&DŽWƒÓ£Ey¼H[r‹?ƒˆ;ñ0½¶ñŽA‹Ä¬[ SyÍ ø‡ŒÇ„ÑŽ*°šAÿøÓlbKl1@…µVÚþ2 V©¸YÆr$Rgò‹Ä|Ti–x|;7ªj-¤Á£¸ÿA·†¹,^ÆG,©Š*¹êIƬ¼¤ 1¼ê«Ú¬UÉ;¢­iæ¨OóB}ßDoH;b¾\êyT³ñÌx«lP£¥êšjÛN6DµÈJy‡¯Eé6Ô?æ|‚\Ïž\ƒX»Jù8e²è- ã¨X' ø¸ ÀzïAžôˆ?[SÀÀy$ßó<ÖI›Š™liþeÁò2$¤:û@Ó¤· 4¬“=- „¿"˜š„`bqR–Lð=‘U°m2Í6êäû$Y¾œÝnËÔTA^APWéd*¥×3ÙÄ)Çt :—A,Ü*¶ Q`a–¨m^Z8^/Vœ¨Ló6¨Ôîm-­”è›2DŸÀƒRõÓ †—™¾8A{ò¸dNO‘|€é.KùÀ¤ØeT•ÿÜTBCl×~0IqÈT‚Éo¹_iŒÄñ4S-”ç çp°\ˆ‘™šîé\gÓ°aGxUC.'‚R„¥$¥ä´»¡ñŠ·À *Yæus2n­zw3$XØ©y·Tî7&Ƙ<éTŠÊ€&7nÅçÞ|x‘³®Ø›?ÅÌN¢ âÂ,gãè¡…ÖžS`¨UÄÍ*¥¥]Ò|z·¹ÿœÈò Z{ ÆàÓª]àS¦zÁÌ*/SüòR6‹®6™¥1r « ŸŸ.,Uð¶3£ƒÝp^}Òd~k‘ C pf`ÏðÖ6Ë×r-†Í}zpÆB•ÍÄÇÀâÖ£ˆ9ÜE¬¦`Œ?íem£]nöñnIg;€" ÝàÐ`|þئ&QÃÐFRXèOô¥rŸ¨{'ÏPðG-¹*èHâåA¸bV¹& ‡›aehò“ˤˆ-߇àõÍAUVn\SaË÷IîˆíPæ¯Uãï·2yBR9আ™Ûœ#&\¤ò§qÍʃŠÖg²Ô ·ÔyðF‹]©¶¹ÈŸW7FÅV,Ì7¨`SΣ˜gˆ›-xE½ª]’% ‘¡°=eqñ!]”rÊ’ êR><“bàxº%ëÀôN‘yNfU$¯ÃXÊ|ɪ¶¼W5 ßŒg•ã.f_Y*Oõj`Çó¦B ÚŸ˜ë[r+ŠïòƒZÁÂÒTîRØÌ(Õ]š*'j¤)SºñW(iyPâ¨:HÈ¡ÊìàM]Cž˜â'i"?8A-B5$àF^1)6Sç;É1 q@Zbi®LÞŒ•’²VG„æ¬.œŽY \isâã×4f^ˆÀnœ–†¨›ÛKš +Rš® /•[CÉ·àbì[i\šÇpS, =Jý; %Gîɵ“6Ä»cPb‘qŽqÙ‘„X|úÄÄz[ ‹Ç¯r„^ oWbAÚÊ4› ú–·óPqœƒ }fÝ&õ\²È]Uiän/œ§¤Adëà vÈ-qÏù¶2U`SýIñÛ‰GsŽ0Æp4$Ñ?R“ÆÌÜaUm-3h3ñÚZ‹ˆð&Îà!0΄§Å#Ðkl¬àÝ!xõ¦b'ÐmçvUañ Šï’´íÀsim É î:Í'˜“Œ˜ñ± ‚8ÁZÈ^pbw`Ќբ7 Hp?{ñ0REpÓƒçZ-É€G€MÞG°AUQNr-•€*¹—B(!bþ¾) x26Kg¬:ÂTV“–sˆU€•¶ ž6Gø·T¡¯ÂÎ|T#)-и бrü Œ¦1ôÖ1ÀáL@ÆŠ7!ï‡à‘‹\ %}¯scŠtËU)9«?oGãZå§aî´ÂékUa82t†mª|<¾“G-ŸÆbpúE‡£ŽLð-QxSì~Ép€½‡­D/W5,GŠ7 fM9äÕ Ô˜“tžˆ¥Ê=¶n”R)g¶+Ü1B}3q­­{½xpkÁ±îD ÕåI¾·\ë)0(ÅÀ9H!-€Ù¯ h„"I)Z0MÄU‘XÃCƒ7¶7CÆT»eóAÍ‘[ 9|¤gû\¨²öq°¤^5xÌâçÓŽI_(¦†ªºÀh9Ÿ2^ÒÊR¥®ÀߪX4mmÝhŽGÍ”ðÉ\ÙrÐO[­h›;þ' ÓiÔXÚ샜mèhÎ[I%”çL,D<Až¾àºÝ\ Sµ¦Á"©ãcÔ¥ä¸1kbínI‚xËLÛG I §Ï=ÿ¾`/óä¢EöV}Éu›»B Ó„x‚ï…´ìÉ)*~Öâ‰7ÒÆ¾Ì'͉äyO˜þœLÒ“‚ W•šœB-vΠCŠBlÇP20§|A šäÅq¯(·’pœÅ8Æ‹bEÒ€fØ´ÉÆB†À8Hæjó¡‘#L à4æ7T‚#á–ÜQhŽ ©¢¹(@nïh!V$û#“øÅ»diû‘â…nÉ ;?)ê bR¯ou¼‡©vAˆF¥Íd` mí0ÿŸL×WªÕîàw±P¿‹‰ˆ°[ÒñͥŃux%ÀØ^|_mìA´~Íenƒ¶‹Ì"$hKÄ eò°J—ˆ8®{´ 5'À{Ï%£‰ƒ`Æ´™ÕÄ&Äa(Z-Íp·ƒBÕˆÓVŒÆƒ„Ú¸š¼Àæê§ c11þ\’ðŸ$:HÑrB3¶u´ÅE̬bå™–,Ž€¤ 0¸×H%8WÖ#Úõ´9ºˆ+fÙ¢Ew3ù>_À–XPëŠV]yÍ;;kÍV[ (Æ`lxâ[7V29Š­1Ì(*X€à›¡wrn".—ЧªDy#>+Ž€ñðzLÓŬÜÅãI9ÿ×| ~ÅŸD¼Á›£Öf@’Œ†ñb„ŠÉEVBÚ,L‰,'çDj$a­Í0"2 Æö’âO''.X*ýJS'­ákéIü:²ÆÂÓ¸ñ~q½4Nã‘›9œµHeœ–w_åÓ%ª¡`LàdXÅð$æ6,J- Ñ”.álÕ•ƒª;$ Ã\aÛÛP¾æÚœâˆ¸ÌÓ¼$¯Å‘¡˜®š$esÉ,%ÏFDÙ—l¨’¥¥<ÉVÄì_‹…:€ˈåšT*˜U,O!‰(9²u^dñ‰ ÝRYj9M‰ÛhV\‡i ÂdI5bùò³l0öEO.÷²†;Æ©2X*æÑãù;ð {pOÅ´„®Q˜jÞÏY%l ¼QËd‘¾[cSɺIË,W­[²õrš+h.Æ4TѺŸ ²Ôr3ñÐg9ñ¯DúpFý4Rû¥µ “Y¹¢–5”kCM ]Â|_r¼&YkK¶†–Ue*©ÐªÜÙªjpÊó±ÅëiÑd8ßTÍ0KŒ°à}s !^ªÈ<-ÓKS B2؉6K<ù'”ó‚9ymS2‚h1:b®H™M$nmÆ35G(eÐF æ.¦bãM¹ÀIÄáV3Ñ”í;¶Ú²¤Í‘CœbNEqñgŠ¡("y ð ¹ª=G’7Aã ±WÛ¨‘ò#~÷Qa±o5¿ÀÇË1ØžB ØÃ9á¶—Ôv'b¾ð`òޮ؀\Œvàº]ìD¥Â0Ë÷ ÓãaùŒÇKJ€&k±¸ƒE—ª àh-2Dyb+qÓÚB%&ÎoÉ_bÒ˜4¨"|ñCð5qÞÂ\ô_9¦7Drxä &ŒmÅ`×ô‚téh`ðA&“UäŒÇŠonÔ”ïˆÔÏ!$c¼5cha#’çUr³±f%ƒ¾IÌ€éQ&OâÀO7|l+2=ÊWz$Ù"@õoäêFT:@¬ßBzý”l½œî{¨24†Ó;žµ¤ÓlaiÒf!‹ÞU!†n8˜úVÃÕ˜DdIÏ}ÈŒª¡8†9Ùñ*c\Íà`Žž\Q NÄ~µ‘=I¦ÅÕ6þ``ñfü$u(2¶i´Q7>v¨Äx‘ˆ)0Ä×ó(42ûZGÄiÀ~Œ*£YU^Í¿ˆF¤¾ü) &ÒXId?‡Ã€ÉÄL:Yaç7&ÑHUóÄO‰Èy Fh´‹Ñ|†í ' ^1uZ,„!¢§ŒÍkl<ó7«sU86ªì g ­14Õ$8¾ÅøÙÉB~1Õ„ÚXK<>ñ±À#F`ñ_u‡*{·æµzKË}Z]+gàÙYÚö²Ì¯ÚÞÉ㾤!Eýj`) î°Ö» äÔ€X±V†&}†­…T†3ès3Ìlª”TCø…¸E™Ööbf$ž¤\õa’ýK„ÈÀî‹ZÈ‘9£“Mµ*„ñÌÌöÞÉÚ@A  À#Tœ†¶Ë¢®ÂK ÄT¼Xr©‰Ê ü4áÙãè:¾‚]f†.pAPA>z! ж1ýð~ŽSQªS‰ª)­AQ!À¬¸½Å]mÓ̉`†s *ƒ¥8|Þvî˜a±d·ÛÔ€¶Q[áì‚1•`yá卸h¨ˆ¼pTÕ›o9# |Ý7˜ü3ë4²ÏA(ØÐg€/9@œ*¾{€ˆ["í@"4Ê$p"VfIùTÓ6•Kqmñ'¼}Œuª4˜”ת©±Üœ£†7FòˆV ‚Z½e[‚åÔé [Àç/”<¹Ø—ÏpþІ•¶²½²jùwgÈAlqAå8O©…V@KEõÊ Ëž¬ºeÖ“‹ÈÓin§ë“Õë ìƒ8¾"ÿ/iâ[ÈÝÍDõ†U‘;%@Ï,øÐ²äÄ8D—%6—Œ—Û)c—ŠÉ’ùñü™#Z† ‹…¥IeùjQ~Gæ½–Fsp Vg“ÈÀG’â6tH%s%>A¹à*o!Õ D¬Rê6ž3BžæxƱÁ×$dÇ)ìèänâÇ-YØkîÀbî2ÛzªD5ðèÌ ^m«ËÙO`ÿnþ²8ºˆT©«^Iɘ¥££á¬Ñ:+|â\2D$Ö 2ƒÎó>ˆCg¦±d!1;Ùй€1… ÉDlmÒÄÉRÕÃ#-¾»8Ά~ʤ/’’%±' ¤8$eáùÀÈèáà63\`)7˜}ÃÃõñ;Ú*Ͱ ‹‘«ô"¬ÈÌÇEõ;Í®±xƒ·Áލà`Ùªxªw+ÀM•NZž(L¦P¢¶‰è‚'E gkGË÷\ÆÛ(€(JlK•W¹ªhš aë/y •ŸR0à‹!9)ZT Ù‚8¨¨"âß DxNgñÄàë:À”òä-J}¬’:Ä’:SqWˆ¶›¶µP ß‚Ò\cg TO».'û7ÃH%±üXsðqAæìq)<Ù‚|¤ŸüÍn× `Rr!iE]À¦œÌs"I}ZÆô8ÁÓJæîˆ {ÌÕ’]ì Ñ‚DUUl0Å0e8™ä{[sm@1w/„Ò[,ÈU‰Š&ŸÞ†£FÈPçp6äD•YC‰Ù˜f÷Šl¯’µò ‡[MC(Á¢±@s¬¼Ï‚áeÊ™ ¯€Tó'úã©Z‘$=d¬DiðW¶ɵǟRàKášµø’c8j"sóÏÄärÚÚÜ “d c‚¸xÝâyÉ*Ü2^õãÌPêËtamÄ.QKðn6´*âyÄ›éPCmÕT ¨ÌMãAІš(CJŽCÌÌÝ<(´qÑ+O˜rÉFNÂûªÊßFöŽ*ÏPÇbèg‚ƒ¬‘— |ð\»m73¾žßYµ1‡ªºÂà2‚©oñb#Ð0¤ið‹ÛÜÜY‡¦ìÇ$ÞR?ðì!æ ‘²kVdæ·æÎ_( «à°!X}%šP`¦xS°ßÀà@ý$Éúw’n_³üÔÄn*q_(8/V\[‚pªX±ñø'Ø0^ Ü)Ñb5åÕ{•øx•;ØUa€¸—>€Êñ•̇£ fG®ÿzòhÈå ñ‘;mÅÎ¥¹oKLàK\™kªÐ0<4›ë_%R€‰y¶uKùæUȱÌÓ÷€x¬™"ÄâczÈÖÄ–£ŸÁ!Rž™ž×¢w-‡7a˜Z@•7b_Aõ:Ú³;6“©%ÝÿÅLELq¥¡þ7þþ.Ú 6¼Æw~œ `˱ÐÚ(·Í¨ ˜Îj :´m=mb[ÄÇnºiÑZ&ʹ=•´„xÆíHz„L¢ƒ®ÛH.' ÌçuŸ™Æoou)IÏÃÍí]F­O@@ö|IDTõv]†433ŠšØÖ1ÕU,DŒ¹ªMóÕZâxw‘уY?q‚\î|×Ò/1MÊfÞÐD"‚ZJh­æÄÕ˜ªÿª¶¬ˆà w!-Ÿª*Cícå²Q Õ¢I¨j)­ºHy—aüü*Éàä1L¾‘`ܤŽ0FÔ¤=•<¤xãQ VƒþbÒc0w$€Ì;^9Z³ºi•; ëO¥ê6’¤¯Ám0;q‹›iG)¦$—ÏçÊUëgž ô< IDATP¯«b¢É¦ÒZ«—q°Ì;A¶˜sR¥™@¢ãnÇ—/hãäŽf‘àžý Ö6j›:Ö×3’L«Z†Š:Ä„jÊ…CIðŸ±>2uʪˆþ  aûàeU&ˆê™sÊOk»ˆÍ²‘ó*÷â±û¨ð±pª >_Kë10Y×Ú*Ny`ÈBÌÛZnóŽÊdJxAVÀXŽ¶ë¡§±) ¤)ðRé~| õ§ÉÜw¤f_µ„‚C³[ZÇ;8uˆèbœÝØXd*= Ý‚_$dbðIk‘>;yÄMGbWüÑ«¦åÁ=móf׈äÝ2w;¦¶¶jkÅ€URK5B g»îùª ÌyÉ|7a)ÅZ?ÍA§Ñv¹MS`T<Ä`Võ…Ç$—ÛJ¶mÖ¸ØÂpp˜ HT™oÈÁhñuB¼^¬«@°˜·–’>"ÎE îCÊ«*MTÏ’ê0™Ù«%bU­4] OqÁsl]qãóK…Û2袖Žÿ+ßeQk äzjà›-Y‰™DnqH]EëΛà΋=mغ¹K½ªð(羈bp´Š‰ÒçÙäç]=„{¥¶;ž½-žìÏñų́ Y±tDky”t–Â:Ì“±yåg`a65ΈÓXÐ\Á{-Š[:çEüƒœª°M[I|Bë91V3¾ú™|0ñH;Nå”"Ó“Û–w$¶¡Ò2ªˆ ÙÁÓòù`I/®³™<…\1\{–'ÌŽkzø•cˆðkëÖc ©Tþ ÊQÕ–áç$ÏJ¶,i¤Ï‹ÿÈ­(¤EËä'£‚¹LU 7H-¡rà T‹ð‚f,hiòô‰±YÁ8CÈnQµ›'ÂSõ ŽkõÀ´@üûÄæñèS‰7©uЙv*²1ÑÊ6¤Â„7s)Œ3!¿â£Y|Šñ]´¡x&Ñ`ijÌ´ÄKá3ï;"o r#rY•'­4ÐmD|¤ºB¥ÿmÁmñðͺ"+@› Ž í-l·CÊJä`²Ù 8ÑXÔÅÌbE!]e‘éN&Å®§*u-ø¼3ƒÖBñ!ˆg£ûc.h¨7Yb½ÄÒ’W`ì`$e³-ȯõDÅ8Sò'ñ+T} øb2U“k1 {:^AžÒÔܸÙEL«i åó‚CÕ¢K$ÎSŽY—ÁPð}E·ÆüÖ|Ö>ûZ¬?9‰ #kƒkðu¢zƒ¯&¦T.)2é {ïOP¾¾‰Ø5H3ˆ#]Zö5>²b1lë¸Vjcà;6L´h€“áðä¡‚wRò.¡¡ ¤8|INØœ¯ç/!ǘ>ÄgQÛ\¥ØX+ÒÅaáÞ¶9šH¤º>’+¬Â“<ôH½xX‹4€É6T½"DÊŠä8é‰Ë   øFB;f£¸g(?ý"5‹øCåçs2èËò®`¼ÒÅãL¡(ihD@N,D)ò'ßàA~<‡éwÚ¿KÂÀl‰‹f¶=>qž’)08âgk§ŽØ—ÚYã<äÎ$ #JtmøÇb7m©“ŠÓWd—¡‚—Â/‹Ôg†Ë2<³j!msqm¡mŽž£«W©=œ=™÷*DL¡Õhê,GFDÿ˜„ô¥Ty·Z $ëÒºMˆ3E![ñ"SDh°5esˆ© žñ’¦¦õV0á2ü»|Â%š‹<]¹¦…*OY$<®“†‰dÍ´\™ª C¢G¹š²Æ‘NÁAZ¼Øñl¾,xÞ)-Ýà c‡1…”Ïb×zfß+×d5 F2X ÁPÄ%_8´ Ú¸ÚòPÍÓ-S\êÚRUö–-WÐ Tª@QAð¾"Ž¥2·µ™ªõ™–#¼¤ë¶tUÅÀï¤EzS©. ¢O«  "ÞÞx×Ý\=PÎÈë „~Ä Á2D\ ‘s| ãz&ˆœYøÏv¼ºØg÷Ø£‚T!cL§D°š ¬ñbj)_5n«à!æ‘ü Eùý¯òòp',AFªÁZƇÉTÛ#™< ”C~p®&ñOHÏ3ÝÍŒÚq³1YàMX@L’q=ñÐ7¿±Oš ž¦ApRÍ$ †?ÍÜÍ1ÅßS¯»âO<°ò¤¤Y0²žùM‡ ßÚ ŠÂø…¢ ™HI㱉—CÌÌÊI;¬XP¯mp•œ>>ä‰l¸º®Wp·ƒŒ™ŒJÓæàåÐín…¶¹Â@Äʱ’ˆzÌhâí©äqÏ—æ47oA04ÑýÅ! >š’€³g¸–KÈt›«ÓbfÕ¤×Ih¶þ2̦keø„¦ê!Áîáø^³‘½j!ÞÅÌñá2yOÈNL>F@h$2Òè’mŸ­ [U®˜¶ܪ …£Ò<Aú|t>{$>¦m,×MµŸÇò9SÉÝg†´:tr!âTÎSm´ üä‘(ÞçÐN+reÐ%R¡µ8uˆèi15È9çUEs•;}bn$[Ä‘1þDe€ljì<)ž39X`[ß ñ®v„œyÁŒ8I•¹Q¤`°”$E ßЄ_¹ßj3¡qóŠÑÐf¤§ÚÔÎ&Òº÷,#èBJžÑ¹Œ‡"Iø‹cJˆ{‡h媱!ÓÐÇý«aé¼…:×&˜s5m¹•cÈ4A– H,ì\?Ž\ ƒIôÐx©°2ÐÌg¨ ‘0¯˜™£ì! ¼M’uÐD>˜tp©ûc1(h¨h¤ÌÈfƒ'³àˆUåî…)òªØ¡x !è–Êû 4²ic*CŒ Ïk7ÔË«®½ÕyË3𬀩k»8}\4]Kjbߢî^T)Q ¡ væÄ×6åÉÀJh G‰±iD8QÄØ“³Ÿ»NÌ*‚oÊ”¯Ù‚ x߀`³èºàzKužªØoùÒÀŽcž¼]C48¢¢Õš|."èŠç>·°´®½¶\QE B,×CdcLdÜO ÉR?ÚS=‡L0¥9q;(¦ÙŸa\O¨C‚¾ªÖ¦¢Ñ¯ƒ‰YTÌ9®uC‘|%m$©wY—< ˆLMID™Q6&9ƒŠÌ ° ‚Êë$ef'’ZÒχì“k±>l½HrFOØjÛ ¹„¨äÐ0À N+.¾i!NÌ~<•âdbÉýîw•MŽè!htóòÅç{®ºÖ`#Û!FórYø>ÕÖ1¯FXÉc ðªÀ†ÂôíÎE€ß\sZ°³šèF«<ѦÜ÷œèz'‡Ã\tÍcM"(,V!z¶†ÓÖŠgz.Šƒh\±ˆãåxN0+äÜëüs¢ÀT2r´å’w)ÕFyÍ$8VyBqh0çã2]`D¬axL ÕŠ†˜"A–ˆ¶P@bCò:Ÿ#ÞBë9‰F®+! ’|xYcÙXUÃn*$´\ÛkrO Î"r"ÛœÆÏ³uSµ-â\5ŒîíU,¸ 5Åbå¬<ÀÊ=¹jêïÛUf»hCçíÔùJ’ åž'i’'aÉÜÞÏñ»'u$ØN‰àdt„@iæ€ç, ¢N"%s)ÂÊaN ñ@ð ×n‚côè|,›Wž¹¹–¦ˆ¦%ŽÍR†DŒ‹§žÊÎLI¼yeç–,îÐ$½%¼×sòv†žuñ‡]½R’ÊÐ'ò‘$hÍ%ÇÞFwt>AÎ?ït~¦ó¯¸rx°·^}SFª@1G¹ÙÂ*î&6¡êéƒ MŸ|Õ9âQŬ+¼]HY« ñà'ª±˜˜ªžFõ&*°Qß*ñ½ø &~Ûþ4˜¹Ó¤Kh²àuŽ6)§UâèiYÚÄÛ19¾Ú2Ìø±c*¦êßU ·ít}çBê¼:ww:g:û;ÿ㙵WOÁ)Û ÔDx !<ÝW…Ðâ)ã`J”¸<‚@Öô 3ͳê’9„âÙnîUMyš«gŠîm8DS)þÌ¡<Á)næ–{] Û£@ñÊ!CÓŠM<Ýìñ–#~ž’¾<^Û÷=·qÑtÅó5Ä3Nù:0ݲìHQ'²¢r¹|î¾ølÕÄuÞBÎÍÎ/u:“k©3#´Lbミ‚dˆí8έCs#(Äá/¥=IšÊ´ä…pœ–\”Õ‰ÓPá–C11'†]4øwl•׫nsv}Réæª&sè?CŒ‹øÁÚÛEêµVÉßÖ÷`•4X ]@¿KRŽ;ÂÌÅÅVѹ•Vÿ0~TJq13‡š94ºà!¬–Ò·„Ó€¤z^Õ¤¸yµ­_‘D*öäþXüЋE\Êg>©Í­šã“Q 9Š„ÙT•þ™¹—j-â”SÛ"iR&nu>jæMáÈIŽü-W‚#öP°ylev$OvU²S›ŸÌ cÎk0 é©yˆAS-Ï‹ªi2xvmº ¡QþT!=‹ˆ¶NO<¹<ò\ÂóÛ+:%ÞäÕ"E%ê†4V¦·¹ˆŠñC¤Ï´HÎjA0ó¯Ã‰\bˆ¨bÄïˆÍ l’IR[nIÂÁXÂßw?aòÖð:Bà"ŒXˆ4õã9£á“µq“';®å,oÕ]x—…ÁrÄ\…Üh£n [#` hä•V“Ä»Êàuøi®µ¤Ìñ[îƒ1òÌ­8¼†¬$·dëPa¶óTT¹<‚$ax @SIÆÍ^± Ñ92-Ñç@‘™/NC \“ŠOGÌm ÆK6¬!, Ïj³õ*ãà\î{ò‹•:Ÿ¤—ã}Põæ@R–rˆ"¥j¶@ˆ†Ï*ŽÛH‚bÎðʱ˫ªSöàBb€kf­Æ9„HÅvÂóþs·`² rýÏ N-3ª¾†¥¹‚Ä60ã½Z÷9YìÂÿ0îDQcoC»d!8ešµúÕ\ªm©Þ à»PQQ>¸˜<Ü“ÙÉâÇ ÁÈ’ñ%ZÁªg^? æJ²pÚëœÝÉ÷ëÒ¶7b:µäèb€*|wÁ +“×Qˆ¸K[\oü&Ú—âZj W0|ÞTI®Áƒ´xàaz•›_Bk-B[ K Â֌ƴ¦&R7Uê/ŸHÆ~@c–g ˆËä™J©$ÞÈÄÉÁî´¼«Ç3;ãµ¥1û-ƒ×! £3ˆØäLå‚Äb7êµ5È”¯ag¸¡ Ð:b}&)U¼P"”oÁ3^Ö÷ÊÝnkZȸ۪Ö×´‰ãµ ’| "уÿ"zŽTVÜ8´­»™”VuÓ¸™ N4˜½9+`GÌñ¤å-ŒáSžGƒ€LTÊtºa¶CÎѬ(6x/DÌd"*Ä#„6Ì\›µØ`·¿\r,a”Lª¥ÎMäy½ùy4÷~*B ÎÈT™™8Ë=n·|Rm‘2˜²ˆ#¶ª8¼¹×ØãŽGÏruHì„iØžMHж˜¿®õ´<ñ<»yÐfÈ[sehàs¬âYÌ RHËoü$4åÚ˜ˆ„°|bë·˜˜âWÛ–‡FIÚg˜zÀà‚ø´ø |¯\ÊM~¼‡lÎyäçO2”Óãë¬)yx•ÔQñ±bûõK?>°ÏÏT  žñÜ*âˈòe¼Ì,ÔéÕ“Ý^ø€$XóàDÒå XƒcK%§ts_éxëz¦ÜBÛ®Pël‰èxŒÄ¾lÎCŽ2†‘R;>…=žº2/‘ïd”óã„—à KÕ„›÷7Åþr⋌AŸMÎKpIDfÀ)≖Þ@KÕLÈPÉÄ0t”¨½Ø¥ÈyZ±FLêÈ ËxR€`m2½õè88üBí>Il—2½sÉñK%Íгp²¤ !` Å8 Xl7ÞŒ(,„WAv¼ÏÃz<ÂìA•‰\ßbÉôWFdÎ [4¯dÙ©B*Ë _‘d/jJÞ[/¡çÐj—¦è X³ƒÙ‰ ’À”÷ºéÇSØå6ØÚ1PrÁɘKèÈÕ¿ÇoÀ_É)¢GÅx¨Œ*Mf"qœŸ Š#ŸiÅ2éÈNÄRøsA‹*$2qˆh‘²RŠ4Õ¼·»;Œq,¼ÚޝÚCÆBÊýh1vUÙø²D”™§SÊç@ 36~mÀÁ?I9²$%’=Éy¶¯kERÇ“\ñV ˆAæD¨ºX!Ps]#"­4rñ-ÆNïÌ$Þ«û X`KR‚»˜mÎÝÏuÈd–_aªªÊ¬ÑFtp®#œ Ì+ ƒ’UU,ÏÅSq$ÊÝFDðÍl\ØÌ“úÏÅ~`å?N#¦r/z¡ÛøElàÇ_ /k‹¨êÕr¼#˜ tûÄçp?å9ó<Æs¡8^]Ë›œlm…T)%=ÅÜùo„ÎŒ®rÌž à ¤MmÌŒ\7/À\â$܈€ÉVH‡hõáës“¥ªÚMC>šjßÙÔ¼½1ØÞÛünÉ©e²†D‡ M5Âù« “¦ô=W¬†ìŸF¸;Ôli¤êhëÌPçê\«ÛfbÞˆOL¤áK|S&Ä•Œ¹Š¯S÷´C°ü‚ÌþdhÙÐ÷‹'í«b Ï 8rÇ‹ ŽË­¨\M~6ùñá=`Æ ÏÙ÷ª¾Ï¼ ’ù2‹AÖXÈÀ .SBpņРR…@âç±éjˆéÄ· 9*‚G&P»ŒñÁ§¿ÌÝCž‚°¤ah’K)—rÍoû˜ÇˆiåÛ’‹'ÉÝÎooËÍ%åÖ” 1(ëí’µ¦ àÌŒ‡*bæ”)¶ËêEQÜ ª²eðÄíx@gˆÒ©öŽ­ís±°‚´8âÕ *ž ʧ0!V‚;áq;±Ã)X»£ÍGç‡(—£%š6aÐàU\KÏ÷c#k‚®ƒ; y@0†« ®„úK&žðÅuK¥3sVn$SU’cÎM†ôÄ´[þðƒ mhWo Ý 1R·/©×R˜Q;³ÂËUË1ÎÀ3øŠ Wuèˆ~ƒ¶Y.„€ãÈÖi Yå8oÿÓö„]Õžcm89ÎÀ¶×H©âsÄæn˜µ2å›öv«—45Ö»Aîoýä4ŸªîRD†sEQL‰±¹NˆÅư"þhñF-cšðažÃÓLe8 ™Nñ˜V€Ô!ìÕxš"•5VÒÛ þEË…¡S#kmxzæÒ™rÇc“!UÞLSŠo'OR—²äygÖUª÷ÒfZ&X•1Ÿ¼ƒtõSP*÷0xaxe¦Iq®r¹ò‡bb„BWÄ]s^N.Š ÐI_3IHÏh…\ˆ+—™«{ 6¸ªr ¦j?§×ãnG %éTL÷]ƽáªn´p+ÄÒÑ)¹ÏY£æV8Û‚ÖØA?ü5sï®jîÇ#Z„Ñö r¢©œ'd*µE—%L+b%£–u?)ªÔA¯«à‡:ÀÈdâNÈ’EgS„TQ·\SJÆ}ÑvA F>Gçš<ÝÄ06ï2âiëà˜ó”»¼Wjhºˆó¹¦q³Ð’Æ­Hî>aMbñCõ±Ê=PÃIæwÄ»ˆa°Õ%¨ü¼S5›âH>â+3,vª]×”w2[óÍmŨ›?ˆ}¸«ouwõS÷ˆq Á¢ð\¦ åf=5ÿ¹CáBJ¾Z0øŸû'ÖK0ýJÄ×Oεª{Òc·Jµf1Î7¦å= *ÊÁŠØh´{M1A_å  >–¶<ÂÌh—«`WÍk®GÀ•çõñÝ U4Z? E0f8ÞHñU¸5G÷ÀdFió˜ã];RbeˆÞã<®:XWGüêZ°^çTGÌ’M2¡i‘“D³ùµLýÁŒà¹ÃW4&Ä(ˆ §J¶c&¸ $ãP!ö Ñv#a•“À,!1{"g àà3?q¼+œÄà –¦déΞBûÄ¥à IDATú,~$ñ$6Æ]%ÂqpUZâah_)ìo$f†÷TéÆñu_g½ã!;Þ÷­ñ<‘T憃)là[ðG0S—Œ-—ÛD`Hɶò7‘¸‘¡‹ ØÒ%Är+ŒLà¦eîÕbj¥\þEÐ25YU/Xßí:E V:×Ê[¬{»˜y–É×EL„ä& ´)eRùù¶,É‹ Îs^”œïŒñZÒ»G¬-I&X‚çªX ‚Ÿ`gyñEe¯W’bé6¢-ñYã≜äIäÏGmœM”+öŽ?œ¸kƒ à5V)%)c8¹ÊcÛ\¥k™ž¿¹‚°$< &"OKùz¬œ§N%yÙ“.f1b˜ÈÅŸclJ@1 ¿êxvf†#.vO‘u"Â’¢Ra*å[3gòâñ-ƒÔÕÚ˜mÁ¥¥m’i(I¿–tËÀ`AN½Åû¢îvÑ”Ë ‡Œ ª†OüSAX 3…à5·Ù¿¶¹&ÄV2˜¡ÔXç1Ü"ZûÊLztÒ5 L$7`r5vÝ)&<;aq¸(—þÇ ÖÙ1rälŒ¥gÇÄ%Ò¶Ã@ü¨*ò«3ƒ "X–Àg$©b`Ø‘&U”€HÄGƒÌè”*¬…ÖcáI ŒQ‰e¼¡*í€6¨Jú[‚ÑuÕÃhCKÎ ’úb¨²üEl¤1zr}¥ êgwð!`ÖuR™&®»ªZLå³iSýâ9“H,Ol X©‚/ç²ÑDŽ¥\Cädˆv¡‚·xLiˆ g R>‘üDÅ Z!ÉQ2Ÿ<sòLi:TªùRn|mu]bǹ’‚8 û,ã A’^(7Úª¬¿ ”"’Ê€{ a3A¬QF$Ù¥ÉàÇØQUG¤˜×Ç-HܯóávUQ¬äê>V÷É69Ò?¯æ±”ØuNNS2Û¢îÆ|ðbp4I„‘#`ýÚœ[  RØ0$´ƒ,<3=C RÏeg8Ñ´„jGå)N0Hc‰™‘¶šèaP¾xws°Õx°Þ¥à›‚88ÃËÕljwNÇ`UZ‘Á, £ÇÀfP;•cà “*ÓýGÐ1ö"ÁàWIfw•þ&¶Y¢ áAº~óÓ²øð̶Éz;pƒ$Cƒ1ÓÒc ?4&$*ÈfDB¶¢éfcÜ& ’ͼ³t“¸B½>”5¾OTÝ@“çDQ ¨6ë/çŽ_9Ø ¼î=¾ŽÏ\GlJB€Û¦åm!+½ñ‰†ö`¹3GÇÝ®"oåݤŒ\kðeqb§V§ŠxiXò‡Ô*Ôà?ë|kæî×Úumö?²â˜aäªÉ‚§.yyR»ÄD‚A¶E÷‡aD-K22yY±ŽÉéÔ¸‰‰*u;Æ<ƒDüôIâ~ª‚¾Þ¨s¡b)æúLòÁic~˜LŽÐ¾~_Q#â^ïŠç˜‚ó‚ïÉËœP w/n0[5èZ—ý™OÖº2»±¤Î,× •1‚r1 &·S|¶z€ÑÓHç—Üîi (¡Óÿâ,ÊúØVq¯¸…qõ§dba Wêþ„Ș{ÇúE’I€¸/Â$‚'•VnG$û"ÖñqDžؤÓ\C;q©àu–ªPB2M_ûGX¬•· â˜[EÚlÿB•sÙw;Ò 0J`QñØÂQ±¡ òoâew”ïKKRÖiÈuªäfi4ÅÌŸç<• 9ÆUž& 'ƸI¦"’zP÷¨êÁ§$V¯©ªŸÈê\xVÉTP€¿N=ë=Ë]‰MâÊ…£(_…’\HI\Ñn!Z$åå’‚V.¨irå6£9IF@Õ)Xøÿÿ¡‚mͽôþöÞT·tIï«.lÌŒo¢vb8‡ŽÌIŒš#0£à P AgvÐ0†›êâÀt0Á '„ÍDÂECJ&‘A Ø@ÆÂ üGÆX`˜Y¾Ýk¿û­ª§~Uë뙾f-šæô齿?k½ï[UO=õ<ˆÕj2iļœ»yz—…¥ÛåÐÃÛEê-‘ò´„g’ÁÛž<>Úñ¯íøÅÛqìÉ“­úX»]˜%K÷´…•¶¾~…S+ö¬Ã6:{8w¥Ÿ¬É³·çã.É~ÂÏiXsa£rˆš,t#ÓcÕögi%r¨àÜ­rôJ6f¹×˜mQøÄU7‰éõ±È>¹hMrðÿ®r@x ’ëÛ¶×3Ípæ·ûÜ9îïì«ãvŸã¿=Ž¿µZÅ[BýÊ佡3YPw½ý¦}´I2µ…m¬ÊIBQ]?ŒÕBÿÂ/+ïîÓ„ˆtyŸÅ€­]È^v#ýwåÿ¡ÛøL:®ÜÅeN/jqèÛºÕ!9l…–5.CN+ÛÛ ® I¶nç•RF—¥YK³e¿Ôm{–‹ \y³AwxŽè|'L„\´×µÌØÉÇŸÛqü×ÇñgÇñŸŸ|¹°1æ Ž–ÊV ´(þžC±%§f’ES›bÓv˜®ÓÄë †m³rÑfž¿„D7)QrNÛŠÊ€_ÿ¤tŸÕ—•<éÔç<ëNe´L.ÉÁ ãy«^ø£i4“ÃäwáÙU65ü/ö¸‚Ù*±¾‚Q«3I ,±d9ØØ•Æñ‡x­m;üËfrÔ¡‚ø,y‰ˆ·ÞøÎ¾:þ±ÇïÇ×Çñ׎O*ÍžiÖÜp9‹m¿•EhO…Èu››ð®la®‡ý¡Õ/\ÐÓ‰€™0ßÑs»<å¿’H…ßhóY6G}$:°ás/O—) òoÇý9Ù94È%*9ÐWˆÈ%8óñéÖèu°–£#ט²+–ô„ù~°Š3žµžAš32ˆ¿]Ðᛆ¢Æ£¦ÝAÅÇ©}|mÇ×v|°ãc¡¦¸I¦r7Šrµ¶$ÑÊòZ®á‡\‹°ptìä úR¬…ø“»Wn(í•ìaf—Ãõ'C¶}EZ’cBLOc Ð}´Õ,Kœ@è·²^öñb®ÕkMàu÷¬Óc·‹ü®<õ´yk–Ž%F®ä>årÙÚË­f¸¿2ö?ló–kòYE9 *¹m7a%µ¯ºG:ÆkÞÃÓû3è=—aSÚüöcÙ„éÊÎØ8þÚþ‹db«;%ÜÂûvªo„§RxC´õ°7dº…PA@â™aë`-QÊÚß=ÓH'ÛÝ ×ÁÝ^éì~²?aé̲¿Á2§ç² †wY@I­ZDw’Êü¿è¤ þ|Â_"Ÿ ó¬í .÷RH[÷ƒŸ¡´] ¯‹¯°U?¾zŠ>¼rÙ}ì9±ÁÇY¿®OaýÕÊ®ÊÉ­­þë–˜\FDØe‘R¬Œ4ð|€cgP$" ´Â4yŠ4h30ޤ‰‘Ð2‰ÜÒŽël8­ }Šˆµž>úk[%9Ñ*3ˆc­h:ï.ùõ‹Èd¹§âZliVh>*‰ã›ž²ïsˆvŪÝWz¬ˆ¡ Ïø'ïcHË Àù3Õ¢bÏŒ'Õ°èÕ‡‡ÖŠÊ^Ð?ñmðYµÛY¿ þ†– ¯g=ZÃ4ëq[–WÆ¡h*\\ø»á ñW:)WÜ{¨`ƒ‚ÚÉ™J4!¬P¨2Ëðñèƒ%¤8!;ÐFÒ*„ž4H!_îOv|cÇÇâÞ꣚Â1̬r 7ê¶CÃÇߟ_ÇÃ1aŸƒŸœ OH)§p2•ñP 6dЬ®üÐÜŠiù/«WÔ¦š‘Ì-éçLß²¥­pE™¬4ü+Ü:“©¥‚”¶C›•q¤I¡oŒjƒsÛÆ\Á­6$i›Òø½&ºs/Øuƒ³Uã 8ýjÞo)\Êe#:s­}­±>Ùñ µö ç,rg7ÉNÖ¦º½”Ý„ãÅŽoí8~vü“wL³UiéQS®}¯SºbEAÿw fBÖr}ÍpgÞ]ð€Ö­òÒ5«{¸¡T†hY}=ëÍ¿©H.3ˆ¸œV·=L›º£œùÁÒâK•WC K@u§¡¯ÖX~ç„&$ò¶,EWŒx¯‰4!; ÃeJú½P˜ªüÀä‘ ˜ÚêIjdóx8È*ª^ækEÚcþ°VÿÖ•à'ÌŽ;Žû8þ“ãøÙƒè¸«Þàúñ™ŸÓ.*þ8^ßB€™žWºÄ À™ðqdÅPH¶Ï³õ>} Â’Ê$ʬðñ€¤I‡‹+5ήˆþK+•Œ© tcU×H–À*¼,yÎ<–¦Ï@LŽ™äbð­+_¨Dšä3®Ü ×ËS l®[kslÒpsVÔk›·µ|<+dûWBføfjÜr«ÒæÝW¶ês±“+),LhÔõ ;ŽÙ©Èå¯ ã=­ÆºR'ª+ ŽLZˆ^Ñx*[ d!³5bò™8¾±ãkˆ9¤-óðI÷ãÔ>I¦³~$1–ä ³/»ªçmrö^ ÌÇ IEË1díòU6öÎü üf)Ô»ëÑ.K,-Ññ$‚í¥V§í£†?_Îe‡rüޝíø;þ§ÚÿI¤%ìdÑ ÂæÖö37¨vU¯/#VëÔƒŒ;Ë­~×~ïø%”ƒÖç1YŸ˜& ¨ m}}¯Ù­ «aâÝH©±ˆ` , ZÁ+ŸPÖ Î&ÝÈsU¢8[¼)=€•a¢ê£BØ®óê±cÉæÌ2Û$ßvzü³âoÞ‰ñ¤ œ"La«åÉu£hE¯zp¬_ç¬ÀŽ?|0n~ûøœl¡"Üþ«uSf/²î»MžÊ-^µFDAºÑ–ðÄÄë5\}cÇ·T­ª÷£Av_yæ½ÃOÖɰea·ÖJ¯áè…qíö®¯y« Î$ ˆ][Y9’ncLê V$‘OæB‚ƒhWVQú,Ð8d8a¶iœo®%âë™™%\/¶§öI(_»JÈi ×\ÌfY>ŽºZge5–gÇ;>Ûqüöñ‡¶‚¨úô ]˜EµApx/&²Ò,7~ch>éR™`eO9à ¦òšü–Ùú¬lÙ6$­<‚´› R‡Æòëtg{y¶$E}¬±r µŸw_8ÃA+²ü€H™HjfŽÏʲ4㉱pBÅkg”íñ×söÅ6…:ê­>[J¾é—kŒWˆAljèÞ¬rC¿³¯c°¾©~khôƳøôNábÓ< KÿG·ïøæ5\µ gî…L¼–I|sñ\'«~‡?æÂâ2«Z¶¢³›.íø•ÿ ²^D>HÈÔVv­ç°œù[.õ9þFÙß·¹‚ZÅk\œ Ú7ùªeoܰ‰g™Ý„•tzåëRýÃ9§®r¼6¬ÓdXúXdì–):EXr“W΄vÂÅp4!Ä´ÝÃMKÉwà¶§_Š.z§•Ѿõx²dÎÏ̆³b-¹–,«ÕOd{q¯á»µ¡X¥Þ"töu2¸n¤yõ—ùüšX„v¢„È-‘»³>7õJ¸ÊãÜ¢óÊÝÓˆ.õ cUé`+Tyº÷Nh"äêj—æC]Ãòò“'D†¬VÓUH C bZ!ÞF‹Xæšäþ§EMøõ¯ÿÐeßds7|ò;ûêøøTV¡¬x Y¡üàÛAùPÂýæuèêñFî»×•7)¸­L±i½“"GÉt¶j{•Xô…KØÓ‹Ù;@¶8¤©ãcZ] ‡ #½É.ž–qD–‘£cÐÞ³¾ZüâèØjVu,'ìÊ×·:Ìå K Ä0IÛ g!JTJÃs¿•©•RT`b>,,\Öäz $[W-nDu¾)­Ê›¾û)…wª%y8+¤Îg‘X€•Œð:˜õÑÖ ­“¾¾éŠ¡­Z!™Yhˆ†•pB†1x”Ø›‡ùÆ!éE “ÌÒ³kz»òЉXÙ]w$½ñ‰YiwyP$Û'”æ2ñ-ûUÐÄ|×R kÐsëÛ–t¦@¨ÍJtz×\)¾®Aßæ7-Óîì42Á+Bò˜OÒ3NùuÎk#¬¯d9«X!Ftâ“k<8Ëšïì«ã[;þµ¸©y1½xó¼§ÞúïG‡ì5h½Øññ5tYäÃbnbÌ›°„ÈG¨¸Øò[}Íéîë0‹¸¡tVØêQ3kò›Zg ÁJÍ’(·´ Ç­,þè5˜òŒZé7¤é¾ ˜üÁŒ}›Ê{WþýSQº=98„Oj#íÓª_¼t¤ôQDð …,t¥ 5àCkÝ,Z¬›0 %”¼zÅZ`/vü¹Çß8Ž—³Ì2'BH9§P¾º|óªiôøGÐ겪Np"Jù;X—s‰q«\'üòhå!€¹&=kù+tsBD†ÈIUÞ™.»„Ø‚@f\–(<$ër4ÊW{o8ÿôuÂ$}Œçú•§‰R-]Áîg}!èaÊA¬›X’¡ë#'#eÌ‚p[n3=gí²Úþòæh&±"ZÇg;Ž—ãø7Žh¡}vF!}¦íÜß<8êgÕµ126Ñ&Ï„’U:e“cûûSI+ÓôLï-„óËãe‚íIX‹AÏJ76ölj¸aoß«^ΖªÓL圼&ª± TeWåû¥×­NŽàê Y-5ǵ—5]´[ËŽ¨4ñdÊkólóª«Ô9½¢R¦þ'>­gâ­¬ñw"¿°ã[;¥Ó[¦3ï2¾in{~£3Ÿnjç„V£ 8:l ¢r¿”Þ ”P† ,\|Ò`NÐ"N¬F2yÓ…ä…⇷¹ ”eª˜Wü¬)ï4î¶@YÔ^eL;›ß„ž±H-!SÓ€³-!;”ÅðÊ”:³°Ñ-ÎZè(džA^)"¶Šø¤íµBã±ÐsV£—k‡ÉœðAfdå—„VÐ…ÀEžTîØG#ʯ¢,áXɇ›0‘ÉתkÇ+lbÁªkÓ§Ð¥¤—gõï¸uÝD­Å«HŽ/Vȳub)¾åS3,ü- Ôñœ2WÚËD^µx€‘ X£‚¡‘ZéÊkí.VkÉ“>¼Ýªe0×*!Sˆ|ø™H̆t‹¦k©ï°MçlÅ“`´ŸgîF»ð:~Ñ/7}8W»ùoóU¥Äíö7™$kløýb¥Ä߿וúe¾,rMÁ6 ¥KØó¬5W–¦-tG1©-Q] ¦…B©(»6ÒRTQO1 8iR˜Tœç-NLC½¾2£‡úÊS!ÍU’ktÑdñ»¤¬„á&q<Ôi„$#Jd%o˜Žm})sºdú³mšI™3ÈIÉËæm×ëÉ "½ÍäøJÅáÐÒ ˆm±?‹ IOç) sK”V^é$/ÇaÕ¦“õ¡0?—„&ù¨8ˆRšX'ƒ¦5,ªÆ’TÞÒ1‹M(ω>}‹–rÉ‹·—’$þ«–+–AÙã¬;NRº•FÛ `›ýn—º•>B}ËÖ·ÚëTž=õ)Î*$œvÊØY¥µYÑoü–;"ê¬6|»0W ÕVi‰ÉW!,Ε ìÔ°æIÞÜ)?˜w"iá_XÂ;{9OÝj9‡*œ>f}‰#ò“-cŠñÑ=k‰]¬FôçïE,2lt¥+KŸ®ðe–k…¬°V2BfZ°Îe,Ñ;hµ-÷QÌN|Ïë oÂCbUS}XÙnM!à½=¶&_6Øë5–Ä®kùúø_ÜŽ³µñeG9¨ ×¿óåÙ½é–&[>DÙâ‡'ïüuììûâõüÖ''ûlb< Œ^¡MÌK‰[Ž Ž¸Yð CˇMM*´r”ëˆbyZn…=•¦+iB+$è4Š öòóg‘Qr¯·¾²ù’rmð‘Æ=ZO ¯¬CEÄÞÓ¶¬à{ìý¥¿²ãÿ¶ãk;9uºÉ·¦ï2ý”G·4 îmòc‚˜)êÔ5‹1[ÆÀS½¬´ÕGÞÉà?ÅDÖ’:Œ"¡4"?XÃJˆS9®œ³áCìNvšt#Ò8ωyL²Ä$ªÈ·ÒŒsßó ~JuÉ_ŠÏi]/Ýt3é1±0܃­* æ!‰‰ÖXÙ”n™ ‰5^$¬‹V—/[Æ*‚\kå‹ü õÃÓžØ*H¨ã¢Û ü2·pxjßÛ—Ç·vë8þéq|wü*  Y¯&&[!¸™ƒdÒyÝÕ¥q-sîÆ:üdJµBpSæ“‹$&y¯a œö^_ IDAT¬Ÿd[¯²¿-Äi×”î l¸&“‹r<6ùÚ²¥ƒttwÅàÐD¼E«ª^•–Ü¡.­±J é20Gש"¯<Â6&ó ¢×¬F+¯„³®wÅ™*“z¯^Fvaþ‡Oí¥ãí8þ£ãøåqüüøƒ¸’Û´n-çÖûÒ7|n赚´´ïæn ú/k17ˆ-‡ua–A’¬’~U¦y7—-D­É8€<Ž%tÝëœònÏÆªùÔ1¥ùJk¶u[}²l§ø·hô±Ê[Ŭý)æÐ¤…^ †­KøØÊ¡]MA†Ã[ÚÚJÄïÐm¼Â"σ¢>¡;µà6ØíødÇ';þ‘_Û*¦^¶(ì½”xx~e“@aÑYæ%Øædç¶U+¯Rdè›A¢œºw¨k¯µ*òTxŸ1œóã nJóY’Aœ½ºæ#Û´²ø-¡?µç½1˜_’ݪÛZ͈òH/•Ä‘ÕRxò?Œ"Ö ¬öÞE¥¯«Hš`oS«h‹è š"tRøÄˆtéŒÀaîì^m‰ÌÝl!Á…YÛÏGÛÝXÚ©{€HÞ†-äÊü͉>|2Lè.:À¡–ü× åÏŸ]1}N…^Ï~(*t:~t!Ê}áWTöã» å1í,‚ªoza$vþÖD1g6,ÆÅ8Ñâ1+‰æŠ{‘néÐÞf·· T½ 8¸Ìª1XĈE‘u‰³Ñ|»ç éÂF tUÎâoõÐ'ÎnµŸßÊsŽŽ–[Ýg+–óžW½"¢¯g«dâ‘5´Ýèªâë¼L–ždÙbØËoUwÃ{^Ÿì,‹7‰ý°²“23 ŒRý”nÝÐ âùD'—¿KùÊ3è¯õ»DáÚê¶ŠK±fèg¶…J_™.ºú-€wy·]z!Ì×¼êAÙ[n5ØB‘ìí­CÎëvo†Š›:»—B8…Ì9Q·ÙÊŽ.,U»­¬–Çéö@E„.ÑËp+1¨ QØŽ¡í?‰²Æ#n½š>¿XhŒ)¦©ˆ=)O³'˜!ÐT½l®kin)>h”´D/†®±ð®¨ Ù¦AæEéÞÔÊèK°2„žž’ ]?ƒ Éf·«)ªž‡Ð¶Ôj I -ˆ9œí]µÉ·Òjõ__q†5dfÎåNFgz?âÏÂLLÔiÚ…ŸcXYøvÀÍnÄ-Ô=adMJNýÀ <Üšs¤8.ÝV$±œŸøððøyIÓ»¸\¥pºnLw, P'ú)…ÝözÌ‹ÁS«¶ `œï0ðÜ‚j§¤ +WvË Î¤t·áŽõ/}š»g°µ÷g:Û·[A¤mzÂÞß…“CÛ13:„Þr ØZŠx ®³ù”%R!›Q Þ•j–ß„¦Æ»v°2vÀà,‡õ•„`K»…Ü `è\ÕBõ33±¤ýTâ 6k%nÀ Ë/Ò¼2/`}­ .µ:Y¹,à’¨.•¬‚Εjª%È#¼J0`Ýæi‡[ˆòª<+kn] Û¨ïÊWhëi§í'ý±Å HæˆJóhÂfÛ‡Ö”bíykùí95®2 ʬ¿Mò§ÍÀlýOﺹ…Þ´œÜv92O4#ºä‚¬þÓ+$«õ/*»?±ùÄG¤9hDj8ÂoÛ¨Ù«ûX3¦yÌáNÖâf$Ð÷ôâPÅ ls­Ùäð@‡¾;e+Ø7Û·Ws›HÏÖª9ƒÖö.ô䌰óK¥e–êáØ2Ì»3¡©põnõÇœ°ám±OOd/ܧçÿõÀì;·åæç¦7^"QT(¢q§Aga[¥ÞÌ&ØLŠ_@ÊÕŒ[(Ѿj·ddX,9‚é>eøÃgNÓÖôl¢ëéÀ˜ª £q)û–uï[ÏŒ ó÷ì†t?Œ×ô#½ºL÷/k›oopg>¤iøv×éu*¸›c±Ÿ²u^Áhã#„ý9RIB$ëæ–ûíŒ@õnã gl@_¶†ÎÎ%íóbê¶w^ìø ¬Æc[Üõ·å¢Öxwg•=.­…ƒE(õ:Ñ„ê5À‡>‹î¢)Š{ý¾„™rU ²0,2Y'¯É·\)%Éë°ísðÇúÄÁðÇX…ݘéŸ_úëQëä­P8£H)W¦û†®#ÆW MuuÙ§me ÃF‘žQó·ÅÓÊÃ}~šwlŸö1µþÌ#"´.ŸÙ¼â~ìtŠY—ÇãÃdc!¬Â[Åb»µèW³4zÜ?;1¬hùó¸*-ØhʶDº*‚º š÷±·û:\ ù0¥sR¹’ô ì·ê*cÂWe'¼RÃÄÇòaUÄø·È|ƒ¶6ÌÚ¶ QÁ×Õ—€sï*k:¿=¬µ¡µ©Féµ$:Ìå´ã¶l¾æ9zS1ÁH ¼2‡|ͲöÌÖ0¹Å­µòÛ 9C–ãªM ÷W™2êI½E²_¶¬ºô+ ü@ÆÄЂ£îð‡ s÷ Q<ÃB¾³¯è<ˆg'»Ï…Iœ°D?BË£•’Ø–»²ÚhèO…]¨7„›àYú”—uj& ‘ …øÞO¦–´J'lʯg⧸0Z_0 ¿‚2 ®„–#b –«ˆú5¼ö×›VvAZò’Ù:ÐÖU÷N¯äƒ#gŠfù´]Ć.ÒåQG“õ%f3–i‡Êp„?jäChõWb­²œ&³Fmív~^gýÉñÃËtKy¥b•LYé‡0ŽÖßlIa^éY‡½:0ÒÌJ‡ŒáŽ=œWìÞÃíáf–¾âƆϽœR„íîLH~› ÞÆ®·/²zjưVâñ_MÏð•Ýû¬)uÎ]=¨€ë—=“•µXª3„®Íew¥G®.QÖЭ‚u îÝr.‹ÈÖIÛºWÂÎÔr7¾W—q»%vT—¯5ÉoDˆ­z{‹ÔÕéq~f±~Á²¥­ç´b˜÷© µØ}±æ.{›à9‘¥M8Ã"aY² K_…³kÚ‡L4±Ö>“~k/\Äa–ò ÄB|¶lr>èÍId}¬+ï6NøAq¿1Fp/ñáqmi èL7›©ï†ÃLª¿…ÁrU舫“›ùq+goAºpJGoX.´ºÐuÏøCåSĵ‹Ìpˆ?ó¥Õî¨þÃl'£÷ŽòÔg±çׯ‰7¶€M»LξH¨àuÞÖ†œöœÔg¯ì·#8‹LaWÒ«k±y·Xµª1YDÿËÎúm´«{Œ´ê®,ÚʰÍytT˰a€YC«LãÄFÐD¹tÇ]¶W#õñ[¢åm¥‘[Žvð{͘뺧JV W:g„ædaGj=}x„ /s¬9/ƒ²þÀÙ+dkQð6’îœûŽï¸ñY_®w@˜k”ÙhˆBCåº,œå‹à C|;¯$ md`fC÷³z"Ë äÕ¥@øW”\ÖiÌ—kOEPc(\K^EиxçášÖXzÔtP‡n¡?[ÅLøxÒy¦veM!†uz†z•÷Mp2Có ‹†F…¿F™í†Bï! ´Â-PéÉSâŽZnÈÍÓ+;K6W(›ÉêØÆ^ ×çö9Oµ¤,Aþ]û½ãì8~~iÇ×FìK¼,^æú¨æpVÔ]1@y\̧[ÃdI®×ÇgJÛzŒxPYåðºLeoçÇÑ×Òl÷nêÝ›…Õj‘åK@}0DAßêu@Zµl6_eѨMÙÀŸ5DKœ$< 6‡-ï­¯öÚÄú‡vüâÍZP«ßu¿_Þ9M‡ÙØV4C‡Ùëä+Üð¨EšF×±ýq³†;ÓÂÒ‚ßê‹_¼§+KøõÆ_cHRÍÝØã³HÑ=q7Î$;-bjm^Û›ÔÍVôlv~‚x%^¸:lÿò„½ìÀ ޳¬²ùB•؃ðKë&ï¢]ºù8?BWø¬×:òÉžŒsŸÏ’E˜a‰šô´òÝ¡4³ufü¡Æ[¹0¶Ç—yîŒÏh±ÈE𺳒ž2.5­"Ç :>V‰5"֕ܧƒŽ}_º-­Q0Ò+÷•®} Ÿ-’7…ßNO¿šd{fy¢·QnO^2÷y21­ô×¾‹Û€”]P«‚ÃyâÆn8§.sý¹/TÞßÔ’^Þ‰‰dR/þ‘éæq‰ A_‰°CP !Ûo#‚náf‚åÖ¾„‰£OÑ2Íûò“pcôrɉlÏg¥WÚ`Àßå’!»½Õ6ì–Dš6LuÖÐf*Ùƒ­”ǘκ1RF¸íÉΙ٘~ÄYó&lDŸ.ÛžÔå–+[è-íçR¡cÐѧ‰—¾,“ô8!úš¥Ž_3BôDcéYížÊZÎcFŽà‚äøÙg)áË ’…‰kxkÞÙW¢JËš%[Ð:É~¡`Äúá·îW&TV¨-K6=À[°%Ö­¿>&ûøäwÃrÃSFüÛ â‘¨ÍzëIg{Bch[Ñ->:'‘‹´»,ÜÇ“[" ’¹‘pû“”KàÃÜ8ðM²òŠJÓS„O®x–Ù3å’ü( š‰­[êÁ—Ü ­? ¡‰.Æ·ýì°`ºoÚ<¤Œã@>AZ РgfXh ´19 ¸ÛHïjFu¥)ë»tz%‹ßrcÌMû_Ã>ipBçÆröy=¿§,÷ñ!)ÏôýÑ-¡4ØJYH~NÄ*£N88©qvÈÙ#Bºþ€€“Rzʰ²VuØ=\Â/blAP«àß׿ˆUÙ™e¹¶ØÚäÈÄ/ ¯t9Ý*›„¸-©óÄÇËÞ«”6ÞŽ°u4{­º6“­PdK¤qâ f¢*%>Ù:¿H&Ñ-AJíð+})Þ,GßJêÐàKAc}0‹ÊD±)[Tí>V·¿wL‘©ÌjÁÖ‹cà2l`ôÇ€DM®ü+—ÂÛÜG`‘yk(qÌy¥¥2)ÉVèÍQªõtQ¸rBœ%zÄJ-[>×¥ÓAa‡¸y@g@±ÐÂÏR’‰Î ,¹Þ ;ÙsiÒëÉnÃVÞ(½V3^$È\N5æ9Þm;:ÎÊÁÃiñ³°‘Ú$Ó %Dí \Ãb¨ìœ‰ïYZÕ†—`EOp_ÁÕÍ¥"ÜQY 'üLr¨‘™ r{íý„¯Èa‰M6Ç2gç¬úÌœÆ|±ÁwïÀ?&íàÚÝÝ<äpKë]®¤ KØ" W©àãõ‘9âMT’5eŒ}š±ëk»ûÛœl•ÛxÖÇÒLq “§-hŽvüÂÂòŒ:Úˆñóöx9"Áõãh:ÏCNemâ–ßÛ—Ç×ñCÙ–ý*©¥]Øùî#ÇÜ`ƒfßZ`/7`mðm +OçåÑ %çufÏS±p¿%’ð·‘Ö5VyoqºöWYƒÄšÔ>“ z69ê26^ÍWŒnSYήÜ>üéиýúÖðô§‡`ëñÉŽ¯mud×ÐYW\«»ò}kRˆhºoÏ”§Õë[dÈü9H°ýç«„àÇÀõ*달•´Ÿ50ƒ¶ÏrD:j½Å:Sä¥ôš/ÔR'‘´IèB•€ç`=w;‹|$`fhY¾2­±BÝ m—0WŒ:}` u=a¹a•8o:ê—s¸¡&Óz,zúÍF}cŠC¿œY¡ÜŠñâÏ›¬¢0 OÉ̘T 0éY ¬µÈhBÚ,~hìKî„Ìt‰S·ƒï¥WQ+*C÷H¾»ý­ ÓMÞPçx›1>p¦$·~°y ÖR¥‹±€Î€aÙ“„V›µ#ƒœ- ¢°—„G³WpÉCí -ÂF(gnÉÄ••×\£°²)OÃ/-s òÛsfYÛâ´Ž¤câpèJç|¾\Θ‡Ù1 Û´ƒVn Å!¼>_-Ù” q%OíV۳̦„:ýZ¢ã%lá<Ä*@Îv«4JÉŒˆ!Ìk¸äD+©œYý†j„WZwÛlY;{8›84ð¯°væ·?l·dÔìY³ -pƒgÐÞ[/û(…çɔŠa“ ke•ÌBlÙ2kÊPŠpC«¾·/nźÒÕ“d%îAž›4‰o™Q´$q¡‰â˜ÂaŒüPžPM6èƒn25ž ê*`r.¸.ã²iÖ²,ÍBi9˜éq¦V²Ÿ…“V|Ð 1$“"Ýé"ËrljùãE€XØbJ̤:b˜ávC—POaOZJÎOs—B'aöy¼ØñÑNñø¬6¦eq]’+.B%F2KJ©ˆ:’¶È*[:ãQó£i–ej5Ÿ¬XDšá"&š½Œ¥O9úyÇ ¶ ³yçeri4Í”CCáÓéÖ\¼*4 öÉx—Lé¹5Ùzo½Ôº0u\¹‚YŠE³Bìn€}‰8šeo&í¸²´~å¯tznqMKKBŸ‰bŸÚäÕV Ê.°U3ŠV9Ú‚+6sÖ†ÙÑJrú´Ûæ ¶ŒËL¼ukZùHwÿgÁ¸|îvà ØÍñ¾7,|u2.úêm/˜µâ,(£{8ìü½}y|¶ã³êWRòŒ(u?CÜ bPÛtÎ6Ìw]drû0^F=«Šx·,ìÏexWÝ™⫤ýŽËÜTd]ÚªB+¥l# 9 RiUÃÖÜŸ ;&¼ªó#ë §º‚ÚE»6grãáNÇni'Ï5jùèOFN-S9g훓!?Xg¢{b>á,äúËS/Û!_:>ÚñÉŽ_¢'ß$]§=Š” ÄðÉŠŒE’y²¼¾ +•ÒJ^Àiýs(,°÷$á;ÞÌ tr:C‚Æ€´\nÜ 1L2Ê.àlÝ>¥å7ìP»][ŸÁ’¢«q†„©O€:5TФ[ëûöåã }¼BaŽ2~¬ŒçðØ]%ˆ–Ë ›UzÌ=ð%X˜ò&Eþr-<]ao† -Ð#K)„ÞM:Ë,Om=pR"K!>ll~£ ­Nj‰=3ªûÁ#c$¼•ÌmÚ1Â_‘l«ô~«×ØŽX™ú¿ee¨‡ç\:¥¸{6¯NrR ]¤çñ2s¶^I_ðeK„Ö{X@ Ùlö6³y¼øñ1VG$ÚWDå–$àá×7§õ×:Ézðfl¥„¨îÀ"+Ü봂 W½Ó2õ°ËÌ^=ËÑBh¹Ä”¦2ÁS…çÖ­z®•–AZ · +ïjo«ôF³÷œl(ÜÇ»÷­Úy€ð’š† ´˜+`¥Ö$Wà%í–U[½|F%e6Ôb!)U¦xÔÒqÙºSküž0øéž‘ 4ù0+\H Q¾²øœe›ö¬#³¯“M§‘ã)Å/y†ã)%ŽlØ$‹Bƒ[0þɾ»‚Âu«nR • Ê_¤Ä%lJ–àÀ=3ëÓd¯?xº]—+PRZé>Ç,ü·º™à DVˆ˜Iа{vX„:£·½òÑøVSØ:&G'ï‰ÂÙ‹„'f¨u¢ï$A 4˜ 0 Ä7KùI%ôØ8lî¿xˆm;ðÅå¨;!·ÆóIdip5¶™ùˆYH-…´–îÌS ´ôÞ´íE¥Ô:Ÿá­W΂®(‰ X¨»ÁÉÚ.½‹otsp’j”ÐD˧5K$C–¹~&/¸KJNÙo†X‹Îðfk½ü¿Ä¢5Ä‹¹n‚[ =u^ùÁB…ciYr,|ûzÄ<éh=0x^w‘@‘w—g:,Þuè%™H¦ì™Ý"¨Ã¦?öcAø‘C?LSΔÀVVø‚%Ù}%bð8XÞÁ†·ú´^E<ùç…a:Óô?V¢žéž¥™YÏ`yÈUuøÙ„ÆÒùc¯„èÚÌ¿Õe)—ÍX«Ôׇճ4™@"Ä÷đÐ<¦Ýc7s8Յ®ç?êÕíí‡ë¦û9µ(ËÀc&Èå ÉJ¶H—ÒÊKÖV7%UfÉGãV8m] $çóÜÎó¸=Lìž} #M)ñv¡H)¿BÒ‘õçCQàJVÊlzéîᬟD†t}=u@‚P˜Áõ9ìc=±»sÑþ’ã[}‘AWs‘µ ÄÛÃxéMðtÙYºöòÀ`i!ší4BgäÖÁÅ Œu¸ŽcËl¼•}£,_iEš5"žöòE”ã]ô IšP£Õ¥&0FI¹6,µ@ ò.³L×Ù]‚›öÒãkipæ™PR¿t‚ ŠS•‰Î€W‚øé5Gº½*t1ã×]tÈÝš¨!úW~;ϯ#znâ{iÇÂ3S+…3ÂÓ\h|´*'ÿ‡Y{@ùWjý2²ê5Ð]E­HÀï’XTüÏÎŒ»;ð`ÍÈnÜŠõ`#:IVÄ—ÔžU[ Òá)w]cÍúOÊ䣯åƒ÷4ˆø…A”¯ÙP¦`ËB.‚®Ä„Eñ0Ën¹e†“[OnËǺDºW'˜o­ØÓ•ío¥þÅÑEçxú^„ç–C’.,®8‰Ƚ¥Û©L9Z~YXNÁÁاt=´Þ.¡†•cv°m-˜’sîÿ¸s/:4V1k®4“xæ‘Y(é™ënm´q‹!ðØ,ˬàÄaÝE‚¥$‡—³Ñûx“AÖå±¾6§‰@ûņ_ˆŠ¯)õ7çÖvðËÞgIpa§'D¬ò /9ùëdÖÀ9T7ƒ‘åõ>‚ëDc ¦9!G ‚õ 4{,g-¶fºËìøÇ°%§akA IDATÃxç¿©Š3}}ý7kÑ$ßr«æ7Û¶°Ôó-RzòÇÝU ;fq%ëleyX¹­„ûÝEb$®èÓ‚üÒ>VyÊ@À¡ëjcý‘{ýâ]Aú–•í“Ì€>,@ч™_ü²ùÖš/B²–­*åv  áShe á¹!D²/›òÖgÁ9„ÀJ¨*28à4ëÕ°æ/ ŸžUÖ‚ CAHÙÚ,g{ z`ÿ„4om짇ì~fš>šdk Ç¼(OQõò]¿€œ-e°RŸ¢/¢ñz€C†Þ ‹‡µW#[òbÙAÌ™bÛ<Ù’o 3˜n«FÄ›Ð^{†én×°PL——‚µn¿"Þå)-ú0Y™‰Lв©••q¨«ÐØR-] ý\fSž@ImCóX¤á©“ý,® žz‰W”›¤UÀ¶Ä^¡vYDœÛ*¸"»éQ±ù2 ˼wM$º±-#ÐÁ·ñ&̳¾ôÌ W¶”ô»ö{D£D“Ü¢®3@7_ÌœBà ¾µ@A»¸á–X«t ÍqJˆ2#—Á 8³ú,ejyΧ‘›ÖÛ@CÈÅo€²¼•±"m´Ë²~Ùy6‰+yyºÍXãã‰HX«qO¬ð‡C‹-¶è[™ÏI£¡u븎œ%ÚWø>ÄþV Ö?ïk•U<:Ë­Õ²"Í$”AÆ©#»C;áÊe:ÌøAGö…3YÒøy†š3õšpEÎ^j %óÄ` Q¾ú »)Ù×_—Sd•_ÁNõëëò³ ‡c-³{3×Ò–›Ä[¥Õä÷jF^È`ÛPŠW× D°¸…¦zŽÏ˜"8Ãüõ  "kœ_—•ºžË¶˜Ï[µìÑ·2ã{^‹ oë‡zwqâ‘M鎉%åSô RÊýñ TX~‘rüÓÏðŠ5 ÉZ¤…“ý§7ŠÿÌœX 'íËÃ}{SÞ”òTÙÏ·‚ÌšÃq`CÊG •¥åÂwÖCjdPË9N2•5#¬[‡e ƒŠþ±Œ|н«åߟ¸Qc „*ô'híÃÍÿÖ¯TQóéÖB¥Ò1’gµä8ù¯‡¬Š1´rž\™ÄêZ@|g_Ì÷¬1ˆ¦0áÈ2wë¸#’íPêÊ“½!n"Â4>[³Ô$LeBÄ fÒ3¬lF%ÏO)¨¨Q=õÅ9döcìz(ð¸IýT²ÿjmæéÖ˜”*™°ÆçN}Âßèb»5ë™sœ‡8 ‡ ½\XºÏIj Þ="¸ÕœçuN‚Ãñ1r›õ«Âªu HH4~µ”fÈ…»Nï(Pim®=,~ ”/”læ³Ìü踢ßÍÙ™’K™ZÁ–V<ü—ìñIÎÉ<­ðIR|}“+±×N'° B)O´ù&:€~ABén)d¾JÖìr_?8`(‚ D©y¸î¨UwÛlYàãZ° ½T2hWCœ?’Ù<^W÷è>k1}EÖ'tšÙa²@Nˆj~éX‚1hÇúÙÓÎŽ./Œfc׃¯·Øó%p]DµE³‚ß…ü|¦+Fôþ­3bQJ¯g$Ê–${ÿMõLd«‘ÖÒñ%õDó"Üÿfý ÃùæòÙýå}~‰<$w ˜ž\ß~ãYla<ꡪ™€^xÞ©p%<CÓ„st‰Õ©Õ¸ðg}6Ò´‰ŸB’ŽO™C£ñeÍŒZàƒ OÖÄH¹üf¾¢3t¥ ¸èaÈ‘ ˆ¬ˆÒ¶K41¤Õ@âO¼$W“ùëò»“O‹j,ñfJS¬œu¹J,eLåä OW{2¦ü)ÜÊ ²ù§‰_‰ýδ$²´qc ’ª%‹£­bË¿iÖBã°ÒVýâ6U WpoŽ;¦ïðÇ]Þ¿L R\ùÏp¤ýJ3B8ìŒïŒ¶‘+Q“ëØ&ÿ^ð¨o×Xa£ÂןÄS"ÖÁë‚Wä[[N›ì"ûd‹rtNsÄ ½ÁŸéŽß…té¸óÿÙñí[¸Pä¶–òV´Q-âÙ­žXŸveßHb1Øb`+SÎÿœéì•¿«‰æM ‰¦àŲ’+ŠAL[$Or ³[2‚Æ;ŽÝªó€*8žêÎw³­î‡Ö¹Ñ¿[š¡‘ŸôÞ8@KûƒÄ3Ö‹‰WÚ†ØÂCÃéx±ã“­«m‰eM#¿6Îh5Û ‘á)j{Bz…žÇ ×í ó…xNùt´r<´ÌBáUµD]ËÒùJÇHïQ8ê®R9ØZ’ 5[}6¶lÌ0bB—æ±ÊöÌ€TÝ:¾}.ŽÖ€0±$~–»Ò•¬úGp fý"|:휂jÚí ùú¢*}]ÓÞ tvá‘<3˜AµB«L›¹h¹­-Y®R“O®gtZ%ÅZÊ”ÚãqCáÊÊf`ý3`+\™ÊRÂR™™¢eÞ‡üœ)¶ÛW˜h^dšÓdüÞ€FF—Ùúáq—˜8r¬ ¼óŸÐÉ…¬×2W“wZ®î_·á$BŹб‘|ˆQHv”­¼Óqû¬:Jð]í$ÔÇ€»€¹¬êj„zVŠ]©Ûf@“í~ŒÉÒM=<ß*;7PS¶„àÓ–¢vYçg8¸²º­4€Øº§ÛÜ9×/’M1‹>S‰+fge™*yÐ2ô0$&L-ÙWl·™â—PuÒ´xÙ6é–Ê”B½°kCÀ3¡ ]FDÞØ{‚ñ,rB¼îYŒÌ§d\8Š×…ÞÝXMÚj¡eb÷§ÀÁ¡2l]ø?dÄtñ.ä&d=׊ÄãuÂXˆx˶ò÷ðKmUÎj†ééïZ×UpRÊ=+ÂLö¬½\}Ë¢b fÜA8]@ÓÏÒð>|o_>¦Ë3Šdob«¶¤¡Ï¬2ó¨f·ó;N¸¶ã`þó-°ìZ!”ç–A­&™Ð—#R‹ëÂ×:£+ãáüœÒbÏàÚÔžÌ1æ3…‹Í”kû$ç"Ù2\íåS-t½‘AZ€•Ÿp Œó"#âÇęÐ<¬%ÊwЯ\¾-³•qöl@nq=¬ü“7tÁáë%¡§ÁàÞ¦O»j•Š4yVÁ6†aRù&4„Ù|bèYU§|Ý‹mÿc€åºç^A$¡žôV9dÚhšn—õÒ´qån§[94“ijÀÝ·†G1g¼ZåoV; U½øEǺ;Ehº] ÀòÊÝ Ãökwçy—ìéûløyÈòà“üÕ ó"{$Û¹aÙ‚Ñ(€r>·4fé¡t1‘™ëÐåõ<‘cPQâ„Ý Ö‡WI¶ôŒv‹t7à÷ù€ÎÌD|Õ²çgóù÷cË`:¡ä;€¯[êS—;þn‰;éá!¸\ïq|”Y‡•™¨= ÁAcÕ¸q¶\}<.'½ºWæ{‹4Ÿ.VÚDà %‰ •~>ª©uEy^ÃWvFZ»è“XÙwÆZë ÊÚ7ÛÉg.¿šgöò~®•Rf*kõ¹!a/pë?•}‹ÁËÜ´[;h`„¶ÞFÝÕ‰yKÓ7EiÕ2ànm|ñ‘’¿Õ©çÚ€ë0±Î(…aÅßõ<‚Ã9!h)Äú7l‘KÜÆšóh­XUcZß³ «ù Û*}1Lêp·Ò‹º=KN-"5ØhlΧ~›«½E3.žðr¼ì–ÐÄ€µÜÕ¥8½žeÅ yôd4°| .ST~ò¤‚zt¢Þ…A±ì‰f=BëH¨@؃#Yw­|‚³B³œ®³ŠÐTæÙ&Ö{ÄD3Æ.:ønç mÖ èžÈODyžò 3ÉÙœ î¡ ®èQ•ä]³3ʃ6z(n!Í7W¼Œúú.«¾ÆFd|¼GPôŠòþ[ø?‡ 9A÷ï‹ fä™Üú…ПÖiË´üIÎ; âañŒ6ó3ãû‹¨3[äßÖª„8ÀóHãÆ§7y a>ž'=,H²ÏG±ÚÊBëcáS’ë#Ò¾›iÃè,WNƒêm:“âˆÖ9Õ†)Ê[)^Òp«(g?ðµ²e³‘÷B~G™ŠŠ®ÕB¶òR„b+3›½ãû®ëXQ ¤Nºž˜j}2–pp¢-Ÿ¢¸å—j•q-„ÿü±Bß9^·ZsZ§Éð—mXX=t+‚f›|»V×”Üá²ÉëÁ‡x¥Z¼By2yºÐPx%¯‡e?¾WŒþU–÷ÅÖ´UráÂüòã¾—èùëÈvÑãîÔünÙ'f…õ §$*z¨f™p|Ž®kK¦®šùsqqø#bÂ|åS¾´—ù™+æª]µ¤+ª}ú,(Ùe¤¤ &XÝœh èú©ìhr^òC(1É^ö¶RƆfMÇP]^Èã® ¡ç”‡¦*$(e…•¨.[ËWðgrc˜I‘­üìˆVñ³É\8;¥Ao(oÖR7÷ŠO{ ÈÔYSD æ=šÌUÒGn#P upôÌâ9)Åfø›6Ô Çžf-âV§ BùWúaäÓr33ÿv+øFXž>Ãu6“¶3âŒ^¡îövžâ±}ÏlÉÄ”ßNßóÌÈØ€Vˆâ- øKc³Ø™)L™þ•6Øä0ú,ô"ã©•vÒ„ÞÒŠµ¥íœÁ â.jr¼ÿ"4\æ›ú$%N‹Tm®Aú\U&æÝ=£ ôÅÇúV©8ª{6:‹¿Âîñ骯¥<]b}—Nð~c!zfÄ9×úg âYqœ?–K4¤µ‚q ØÒƒ(ô™šs Â^F÷Ë&VËá‘Óh€—DǮƒ–@W÷5K‡2ÐëBmp»æè­ 'þ“Bz€Cσٗçzìv­áh»Îb¬£ÚÞ-×¶WUÃ}÷%œLÌvu6ã"æÜ±önÏÅ=ÐgN ¤¨ à›aÛðVèbÑH2÷ÜGs™[ï‘ÁÓ‹’¢Uxm?°é>ˆf›@õõMæƒç·Ì‘ŸÒ…E?'J¹Ò³(µJ¸3±óðgÈ8!ÉÖC^(úkmû,î;Q„´Å‹¿]hWñÄ×/w»a)ô1”j?ÌêZ¤5~v³¶Zäüϼ°÷„x‘/û"feZBôÏ⊠ˈ/ò‰õãeYÝ`h²TMìbq]»ÒhX«=i̦E'&2Zƒ”ýbšÛ²u69>+¦Á®|„©Û¤ÆÚл<=G:4åBA egÇÈ,šfïj[hÝ0%*Õìy­Ãú-µX{šO¯F…eK è¸6fûŠ ´DÄ–DVN$ϘT®z‚Ö@œUŽÏ®P‹X)kì9>ÚŸÖ£s壯‘é ðk;Ê÷®QÐî\‡W<5¡L+¡^ñdч)çC· ëÒ·Ú˜) SÒ@"-%è×Ϲ» ûh&£A!բѕác¢Ý~Åü¸ËX ‹Ä+¸]ª4?[ÒáKqP›xl’MØMú´ï#ò¨¼eè\ û5/{±ïíËãk;¾±³Øz¤G Ëp¡µäZm^×~ÉÌ<©aÃÉ(º¯¨2„D"íîí(•gG’þ.ÚÅ0ZˆEyzèºf~a¶ºQjÃoÍe¯ …´vú¬ïET ³¶â›Èç•Kÿ+™ÅEíz˜_tEÁ3˜¾•Ie¤²^ BÂý^^_§Ë•âšueàý«H8?Q»ã³ŸíøÖŽ_T‹GL:yí+Ê÷ˆ7'ó¢aÄðé¬Åzˆ¯úÞXˆ¢„ð"ñ¦Ic‘RªµÔ‹Ó²ëeËÃ_!–pc–:LÂo›C®ó|ݸën­vCØ@ !·p/{¨ vèÐg©Zf™ÑÌÝ•¡Öç'\Þ1mÁúS_­ð9ˆ|Ê?ÛZÙo óøí•O¥ 3;>¼ ÝŸÞ|ο\égd:Y0â¾˨êY•Ù"5èH“yC‹9 èˆÑ¢&f@_º¥üs)HöÞäﺮg™k-ÐYwàbË&üùMðHƒ%G›LD&ûj(b…mÒ+G<ÑZï€ÏöDQ]Xöú$T 1.s`Œ­kxAä pH“š´⦳~‚W'"wþûx±ãó®;µÖ[èµE õÇ^Éñ^›aÛχ÷ÿl’Ÿ$4¹(gnV6c¸BŸ'“‚å"¶ZvV8|a7hee^b¤]φ25·ˆìaØú]íRîF—p‘M|¨‰áFöšúõ‡ìöÁüG÷ë=%~­eÖYÌ@âJ—_ñ WgÄÒ¥dV”l³Õ¢Ùþ¯YðBÙ\J+C׫K·Ð2àÁ¯ö àÑá¶ô7'83<1ˆì\¸ñ3 È´gª€á#niI{"¾O ÃÙÍ’>Fì»xnÔX°{VfÊWÎÁVç©[o’ùü‹"ÝW°\è3û^úÖb ·´õÇ7nBé«­æ-ér{õ£L¢é•øÙŽ_½…½·0öá­ð:ÿóŠ/~|m+̸U`êí4ÜÚÞ4kz­_gKÒËš;£`i(Oœ)"!óúŠ­úÃ?ÿCGZ½›DÉHUa&— Æ‘êDèAÐr0÷BÎ4!!´ý0‘;/ ¨_å,MÄnçZ‚’Á”„9>5ý4ëdPEyS­7Ã+ü2†òC5&‚Ó ⡜M)¾+¤AèÁüðz[N`pÅÙןÃ_ìx±G5vUǧ·ùú3Ÿ^i[Åæý„ÉA'fçcX1„©€ç–¦%Xg$º¤n!]m@ˆhùIp~òfð5ÁiDd놴Ú 6l^”Á¸u ©èaÅùëZ‹Á¤Ng |·Ô4º_AXPà bÙ ­ÐJ†ÃÊJ>—~Ù2a:iaó¨¥^'ˆ¿¶ã³Ÿìm룭à:ªµÒ.Îéã“|±6«^ãÙÿ¬:„«‰?–Lëèw5ËBF{IÏ1̑پ¦×à(»_å»Õ(*q]ç³%E&¦ì² ð€×ÞB’.* 0±üÚÚíÝ"€JÎèé]]ç‹·õú‹—®NO1EµÎˆ É}e‘§/×±þ Ä(Íéí=[ïä\øÂe¥K¼þóÁÞñ _Þ” PÉk˜üø&0xÖ^ŸYãýŠ^f©å6zµIË[>/Õ¢ž—+¤LºIq  [ªä'ÒAúé,ijðiýVH†ˆŽ>C´/AÎDž]‚O¥Y %Ô3=A5/.:Ï–BÑ3ž‚èU–XW[³L÷¸ýÜð%vÇí†ÍÁp}ÌÌÀ°µ!WŽVh<Æ¿Q¹Î(²õŸÌY-¯ÃXе†íµy g<ÿó|Y¿6NÔqë`Y2V¥õ„“ÙžQ"œôòpbØÌ(ß»Š{³ZD„p>IFà hˆj€&SbŒVñM´yñEzoðûߥ\AcnO¬OÇVc¡[8µ^†(Cˆžu¿(®X"E­šuœF&.Æ[í²µôÎfÕ{±êQ6½‰ç.\ ÏZüξ:K·•—‘ÍEnbNÛ@Õ:^¶…ŠUÂxš†9xÙ2€º…Û.ÓK½dChwlÌ:V—~T0ù+ƒY÷×u!KZb%œhΉÝUÌüxÛç‰"–¨iZFÀOê~¢‚ô{îå×-׎ÓGÉÆãÒ%dôCXˇ RÂ, ·~’W<:ãÖ9¶õÆÑxù¡kõòv Ÿ”³ûÞ¾|(?¿´ã£ecÈa3/»Ûmô²‡iÐRd¥“^~Úe0Ó:¶Ê¾o+žÁÕ86ÕRëâvi8Aû*ÀD3ݸ¢ÜXBe°´Òt„^Ä$;OéH=åK ½ûÈÇìqºuŸþbÛˆ"b+²È­÷ÃKÞõgV¨ÍG…s—nlÀ3lõ·Ðõé­Ö9>¾û¾ßÛ—ÇïÛñ‡v|c¸u¾µ øû }ûœzÈ¡•g£m(_’q²§ãM;­r6Évx†ø´vÊËÐ’Ue¼,1•’a+dÉ øÁç|xIÜ h¤ñXÿ.=%Ün7ÓÞžµdIõ0KâÊ o6Q«ÕÙEK;¢ìt€nüŒÈš(ð Ÿôe$[Е‚±j n´ÃµüZ=GVA÷ã“ÿ¯Ç_?þÈNŒhl;kKdÍB¸#¶WËœ$ýðéöŸk·¯{Œ†kOpPáÔã˜>§7Èé6˜ºÝ°Êá·B…F¼  Ž.¸¯$Ó¤XÔY²fÍ4˜ÝJÆºÓæ¥Ën”"ÞQ(Ð7ÉÿõþËP§@؉úMÅíX¬¤ÊƼÄß„H³Àc˜Lѵ³)Ù–(Èpž| 䓀̺šämúÖ]9ÃáÉ K@ ÛXk‚˜×}Ï *¼‚^,ƒ¥CúRâÇê–<Ý󆧄Mv¬ßÛB½·ûZÊ5HoBþ3¯,†3$œ@ßë„ÖËÛ©zF©õg5fïevÏ*êøÖŽlÇñóãŸÙñ‡öÆ8ãÙf\¢»çÇxšÒ¹”šõ]4{Ï-ìªæˆÆÉ`l±Ûƒ9³ ½ñóÄá!ž¶Î$ž¡`M¨îÑ gðX5}„XÏ—UÍvu">Ÿþñù‡õÙŽö<>ý`yüiÏv·¸%ô™|öCÔ'lËeÛ¿of å˜`c‹æJ˜Ð¬žÎ³lÂ60Àt+§ å&…ZËB¨¼!hïÇ'ŒÍ~iÐV›°gÇX!§‹7uºeÖ B|J4"C¸­¯)æÿIû~â–Vn6’ e,R•ê=ÃáÜÇ[Ÿìøæµ´.÷³*ZcÆiäxž˜çK­}£\%'¶˜÷N!÷‡vþ˜U3’ºä:¿ÂñÙŽ¯U“ilûw~â¼Å¨9¨e®ÍÅø¯ðÓÈì*´æé¾©¨}­–ÔźfMâ.ø ýž¶DPÓJ_ÓP^c•ãxW -#Ñò‘À¹}k*Ku3&íµáÙ@Ïõ)lß=j öøÜ9Û zË…Âúžo„…ã—v_Çxüƒ·´ýœ^)‚>:‰…[pªßz]ó7/ÇS¸ýÓ=­¯íƒß’ÄR7+T?z}ý_ÚñÙ6œÐò‰]þ5 X`BëÝ{TjÞ© ×Ow²\Àa¤‡}ñ±s¼1â]Òº¤Oßš³lyáX¨ ˆn‰3ø¡¾úce ÈðöŸÊÞËžu[™} W{ú”â„æäK¥pÒá'‡5éØÏT¾,LÜÄŽ»Çß¡¥Â,éóYäó+ÈJå9Pâ=úaév©OVÊÆDvo¯ª4m—&n©‹¿îæ-<ózÅ)`„°R’Äš(%€Ã@E,݈ž:OhÂãòøü‡úŽã¿<ŽÿAï²®ºÐyd¥óy“‘³´zÓÉ}±ãï¬I|Ù ­ üÞ>¤ÀÛ­*ºí²ÀÚ1럭ÙFÙ3Ô.ºˆÑ‘¯Œ‚¥Û–&¸¶«’QLØÈÏÂÀÊÃ×÷ÚÍ»ò½>VwÑü¡…¼‰’a" 4ó»±á…ÌÄx%…T1™¯ëúäD÷ŽkFèz×àù};Ž¿v_Ç_?þø‘ ÿY5-ÒƒØ&|W-Œ³¨:ãÖiGòÖÁúl«{–È Â§ãK±sÀù,»µ™ÐjqÂÑ…,rpe 0Iïr丸—H¿t• Ò)‘´…ÕŒað™þYY¾t5ãgcþ¥!ÌÝáú±Šó£D,^s„Ü•ð»u…é,'ã¶r4¿jg.väÑ–:{|à¢çéˆ_|Ö| (ü¯Ñâ[;þ‰lÇ·o…ŽOB·ùž•2r…W·‘³™tÊal\Ä-p'ÔxH¹,K uÖéu›hSm€¤F™xw¤Ë>×Ë»ŒÁ%¤L¸¢‹HqvEVµ. ׿·ÓRO;”u|æ¹LÈô‹ÏÙí¼…3øû²áÏVad•yö™¡†Ø±ƒV \ðP»…'&õê¤÷ØÄ(ÉkÀ8 å? í†ç¦NÜÂÎâ›(ûË;öüf¹ŽI­¤Ä¬~i½Ÿ/eò7[HÝd]êùÐáúM L+ꢧ›ã—•]¾–ÐÁÌ Ñ¯cÚ.VWz3ëÐ#E˰K>,4:zÍ&V³£©×ÇúKÐa°él‘ Ã…ûøøÔàV¶•Uë —Üí>©,¸– xËÀ¢Äñ·aÒmOž²¶-ÿët*Ô½SizyÒÝPÙ¨—VV7q&qZ……,Ó9ÎKvÃ"g¹”ô„8Cj¦IQzˆ“ƒ8±»m”îyËŸˆ˜°$Ea·‡Ò:·KD­¡+xQžàÝGÒ È‹—v>°—¨»ßB/Nø[—cÚå‡,øðQfÌ:-/dLdZÀhâT¡ú*d{A]ØÙ2-»Zœ?vÒújýerý0¡ó‘ù§n[¢šJSrèor‚gmX–Vm¢¶Ãjœ P*”dñ°ÏëWËé²dKòd]Ÿu’$™äóHOècuCÈ•ú#UžØX‚RMX ýÃRn•³+³§ÌHéÝ“~‰=,”EµÙ¿(MÝÊKóž^îöœÓÊ‚â¦ÛdΨ0D•C¸ rd͇>Î\†W:  ¢ Ãâ­gZ‚“eZ36_†e \ÄH gà°n“—åf·àÓlFïÅ÷ü±®+n]oF²&ºQ} ªN’£òŠV&Ún@ÏóÚ2k×!“œ•Ùs„8­ª£ä¿X—Ý^Vµ-³µ˜í¦påÌ_&)Àk>ó3`ê¹½x¸e叿ÍleÈèax˜ôj¬Á<ùIn=¥;4a>(¶4-gˆˆC·Œk­9Hó+±én¶¡çZ¸ù¤†ºê\­´#ó®ÌúI¾ ó<· Ô ƒP¨rë#49Ç52ùDßpn5޳1©,Ãi¹€gxéSŠEÃlñÜCqH¢hhd³Ò¶Š 3ƒR²0d·wnhãf£…™×"!nÀaº± ¯ßÈJÕHœv‚椂ñ”µìpág˜2‡~ê3Ìøô¢³¸Ý“uY ’ê#RÔš"Y.›…3ø®"q`…¸kkeßš0ªxÚÔ:‹ZoÁ…çý“ í.¹yU9†Ø‚sfdz‚š†âsäí„ðŒd­à×zAî/\>?AxÕžÂÖdáÛ ö’àÇu} ·NÆLF»$[×F*ÙÄyF«í–E³–Û,7c˜ûhÜIëO†}Øm"ØQŒy$(IXoµ8D@î ãi€ðCšT•ha÷†ª’Ä^ÄoÛFÄÒ3t3™»lå ä‹ † ú™K²~lЬˆ˜sâ‰~Y—_1Øho—K?|ÓìL'£cÂåË—VÞƒø•hûAõ*tQ+D¬Uwꓚ¬(ÿ‘ü’!tÞ·(E.Ƈ8™ŒÌ€)2¨AÂïQ„Ã2rIk8lSLMÐh Séž‚¸µJSùrB«$ÿh§5qI$Íê,aß,Ø­OÚÑØ=ɚłƒ't<ÒµÕñ"µT(=¡Œ.ðXZ¨dE<÷u|Êÿ¡‹•‘ÊÉxv¢ØtáxF몷”ߨ¥ÝY²§Z@ á|y•áÌL@$ßþàê–ÎåYßmCøçµ¢Ð~ÂÚá=œÕËÁýÒÕ͉ÐI™4 Èr •ãµí= Ã.šÈÄËîò† YYtâõg¡) ?Ó»1²‘‚TF.¿Ùe¨¾õ'”‰ð7áK‹¿¤K‡hÿÍ9Q ó\䣷¯Èf~³]Ïb†V{„YðjN10t(+!q¤†½@"VD–AVJ–!×i^Ñ˺âáÅJ¨Š$¬Z½­†Žè%1(VZVD™3V+£×},¢r+‚âZha˜5–º×îÓîä­à1ÐâßÖâ¥Ï9~çn#$;[Àõ© ,KW­)fâ T2ÆzV¾ ¬œE–jýÖ1´º€ø*œnÑ;j@Öçf‹b¤¿Ä¢u¢æ'X³n[c™rÿƨÖ0­µÚ¥q“®É:<ßO•¬î®ŸläöÐ.9 J S³ y ×¶¥Æô3ËfäãiØ»Yÿ¦Ç”Ÿ³U›5ìväÇ4Õ‚Ôjå‘WNÕdÞêP­2«óʤ ªè_€hm>¡'/ÄT†-´rHÁ°H«É7®Ê_ÐR´ÏHæ.¡ÝÄ£ê·þÛñ#u6Å88­<«ÆÂ[t]žÄ2ª!BˆèÜg0¸H[éålwÿñ[»]c•ÎåNë+š€Gd‰¼›Sî°þü/ÇEõW«e‡ØÞZâ1lz[ăÐÁ=`x~Ž(%j3 ͉‚uëë{{-žâøŠ¹ti1g‰ÂŸ‚U*>Ð1»!¥W5ÇÏ!`íSXeÇZcb&P00Ž€lÞÐZvÿð!Tއ‹§¡yá_.SWë"6úk º9œ‡'²’åþX¬6‹÷¥øEnH ]‡UC×¢rîO4l[é®™W-_v,ø#^ ) ¡—ötú[}mØf•|e›”õ¢97ÀôÂ’® ¶ù¥A˜iÈÍNèÛÎíÐÈz÷ŒÄpnAË)œ^í jöŒÏÜõ#v9×Krµe×2.$ž•Y?iï ¨aÜK#zk$×ÞÎ÷°+QZî·PîAW smÏ+NùúL,9åP$WädúøHã‹ç{B¬- Dßgݧ)5ËåÝ=s„õRn£›ˆëÄÈUO8œ•:3†ðX6únô±àR+ÝzcÅÖçA¶ÊêØÑX ™[$_9k×—íýVšI Á0ö™×–4o…SÏ\®„¼Ä¿-R€ZÄÒn ìå^I­¢Y[vhtm §¦Æû®µH Ö::ËaAt7s`]ô&s†;ÖÜÈw¹É£|'æYê Z³#Ê«òr2`‡ͦ®ÆˆT)-9PØ&¬Wôü@(–G‹l\©l³uÓü,‹/ –<øéá»pà1ƒ&\®"ÝÒ[É2÷,—Lî¦Tl=íÿËRk*’ÖÖãû‘åÔ¬¥ÒâÇ’¾cÆèëäˆ_/[!ZlÝvrÊÁÄðWz¨ 9MÆZË­ØKgñ\<•YÔòÁë~T±Ï}HðÇ A¢ÂS»è4w}ANG¦¬ŸíLMZÙxÌ!§¹ì(hBÉQ2gÿÝýl5aÐ33ü)†Áo– ëB°d”´¨D@‹FÝÀWAü€ŸÜÏF-}5Þ:Áò÷øy¦áù Í‹ í$±Èé“!ãP 3Œ(;Ñœ‡+>õ-þÆ‹y‹´%“EéžSW”¡ Ô^YŠGœ‰S„§g«¶+= ºé9iŸlºÝ4\Sõ6¥(ÒŠ(‡au`Ö@ˆî~‘¿JwaúB0sýe’ÿ%À8hÕÍÈ1Ur±À*BsÙ»<€ùñ—Ô‰ ¬®ÆÆ—ÐÛMc²ù°–"@ÉT†å3E$£þþ+êT–„f­#" Äk©z–í¨,œϪòhƒÊ„¿ÚÍë[ E¹f®€+3:O+.éZ3‹ú,–s FÙõ»–ÃA#Ý"t¹ó ‡åÊ̾ˆXå§ä-ñ4²Bá®^íö¦â„Í ¿ „\Mí9'X¼B¨ÄJÐIûÍWœÅÉl¥ŠÒ6ð[2 Eõ&.ëßC6LzÎ×!ÆI­‹–ý<œ¬âùYÉÒÊÈÆºÿ—QduÚ‘U„°Ãç‹õ)¿bËA—V;“DyíAÊî–TºÈÉH!q©ÆÚ¬t»B“†y’2ð•'ŽM&…òèYÙ¢ìÎc᥀æ: ´:3¢õÔÐìxÚÉæ>Uš­”0„Iõ5ÙóÞF5¶ya1m®@uW è Èó”Ù%¯ ÇňxcwËdš#Æ,¾HZ©Ë¾s[•Žw]¦†±ÙÊpfš-ˆèKJ¤Ý^¶ÄŸrµmØËѰ^«¿õ],b×VЍjd_ôº ¸¶ë¨9S;µ‘Xרµ’cH´ûºŸ'Ð^#ÖãÏeÃF[•3›Èö‚¶9mñ›ˆŒg À/Q»ò­Ë¶{"¬‚C”pwspÃ佌Ê?Ë+·ó•ü)§¿ª„»¡Óû1­Ü­Œ Ö§ª §‰ðúœ.„†BdÀ$µT„“R!‚2é0›Ò+ôàuB-q…÷¶{dWñÉî¨1ön)iCØðë“‹I‘!½ŠÊqfT@†, p¬­3AH Zð†æq”–)ÝaÄnŸ»…Ó\I»^ â˜ÒJc5»$2b'åZhÛ æwïÔ,['oÝMØÉiEò5¨/•±Ñºµ¯'(‡yŸžÊ*Ê@lÍF@™•ŒÃŸ/Yˆ"5&ÂÄ\ê­ìŸÍÊÊL^–GÙMƒ2}ä\¾Âgæi¢bšm4q$jy@1é˜ÅÚ2“Ö£ýB–“Ï2·ü]¿¬±<òö$¸ï­H*ÃÑí© Ý.ÊV¶8D5²Fð|öº:)ÌœD²mÓ¡¿ˆÑe§L6JªRK¼€¯4xÖpÀK/Ze-Fò­òˆ|| ¶r%vÎì-ç‰~¡.>2?cÄÔÒÀ^c!ÄÚcð²YEKÊÓV)²m—å‘B *|ˆuKëg·ºð‡Å(8ì]•ˆó ºÊöF9~x±0‡V¤%Ì]â⩉|JH½ÍðkX$YsØev7ƒRh(èÞ!W3 #âiIOØß‚·+Ô1iäWÁx[Ø)ÁÙx»t°¾çhm6RF)aÃMÚ~\ábІyÌP»½4´0ë ß+-,a™)zÝa;êY÷½;ÙS¦í-ϰAN§3k!‘Õ=O[NÒƒÌÒLQÁhïWÑ iédê¾H–Ÿ>Jðì˜Ó–iÙ3ê‚ðd¬G¿'…o?ãå”63öêÚWß"’õ’˜ª³Tvwtƒ­ärC†!áCv{=Ýx?ŒX¥ô?ÓKxªDf6¦Ã̇#]qRˆ«À>?çg_éØ>P¨Öz±[f†s$êÌnQò€Ê£ð<@3…½ò¼ö^cX2|ñns.ÌBH ÒûBs§£D¶}2Öõ…ôz#Ü}è0`}Û¨o¢Í?Ir¬1ñ÷7W­±à§WkæE8×¢!fÀl‹kÔ“5ÄÊdŸ4N¹à#±[4@hžÙ.“aˆ—¬s«é£¥ær‹ØvñœÊ2îK'L3õÊÏÜàHúõàÂÀ«ÞÕºsÆÅÍŽ{x4—-¥–Z–Q…Éœ¸óD§Š ç®÷¶Õq€•\vç[X:A_¹Gh€6̆ìöõv” žb{ëü®…œÄ çKû€06ÎÉúÓ¶tº ·Ó3´!Ü!|º3|â›Ñl0Fʰf…3:eH ðØìhóR áoÁ™<(ú—-}Ã9nl o­eÓzî¡‚dD¦[Eêsvv øìÏ/,’”ð£Î)± éf{ž$ÎÖ ÕÍp±sÆôr»Ä¥î žÆ‘ÛLJ±5D˜ñ¢÷©Eñ}&Q¢„gô”^@wwwåõ‚×7PD2øìüƒãk¾ä¦‹§D,Éž-Ÿuøy„÷´Iµ”ƒü¤Æš=P ´µ„åO.h‰?ñ¤LÛ3Ԙ½F/K¶.)£‰÷Ofç±þåª1C6a—-¼VË zŠ—G†0;¿¸v$!›ûq‡@!«¹g­`'ˆ (ûÁÎ4\*¤8SJÙ.›‰'p:4ýáí¥2д¸ƒ<é¿ —¸‚-è†1Ôf¼äƒ‘W¾ØöV‹‚QÎu…©M™ß]‡¶ø§Æ ËC–ŒÝ”mÝ´€§‰UŠ_zú‡w¿ËÅ\Îߌ×ÊÇ­ üw)kÍ.õJ•©‰1ºTâ> ã¼| HÀ3D¡v«Þ2á.wÖÔ=¤ëúÿ–OùtGvDB¤©¢­ÙÌVê 8ï[ô2åÌä ôñ—&e6”Mnê#FÜO½Ü[M©2„Ÿ/îá^‚sNö\Â}‚5•G9œÞË1ß Íd a⸠#ƒ–Ý©¬@ߺÝoJ(\€¦U•ùnf¤y"ð¤ò's‹#F'ˆ†ßKjŸþZ®Ì1…N®ŠËsƒyÑ`²wš °x­»1 -„¬ƒ{èûˆ%#‹«£G¥lúBóøËûl˱²»ÃÍÔ K·ú,²C!D(:ÓÒ,…2¡2 À˜r£enå9v2æ-Þ*T®Wf‘›2/ZØ]¹æf³8¼;"ì”ëÄe²h8þõ²äÍ8r|—úL–ÛÖ@Í×™x&РCÝ9Ù¦]V3»&1Ž36ÑMuªIë,½¢øÎ*K.[è5-Ž©¡$¾–¸­¤‡üðöÒ Õ0Lå/ih]=OŠ DB¯„%=ê!* QÞñÌ=”#Ï!lÉ×ZÓjYC÷]eE‘w>«íTæ ò63 ošpk†«¡Äx9eágóE= çÛøl¹Ö]¹ûJã+.•ÒB¡uÉ>‰X³ ÙçdXz ÁÃ8”'(åMKÓqä&',éêkláúÈ…5)”Û¯„tÄ2KåÍí0«²¯TÕVIïCATt}Ze–‡?ÚLö³[Ùw9…Ée¥J¨„% ‚WF‘™$4¨ÊlLˆYðÄw½-ã½V¶ýœ«ì‹BHTÙ6%ò]Wf´Šý² y¢TKφ40àÑ<ÈÔº‚1ƒ6pü2à%,,‘³ZvÝÉ¡Åìµà;%¾{Oj>ssÇÏe-sU\xø’jQ.Àm(bª¯–V :ëDŠ™¿R¦®äÙk$v“>heŠW`-ˆ–‡‘¶›|>ÝB[¿)òÇÒ‰§Èâéž$\—üá]´ºÈÒnå­#ž+Ü9 Ù’òa»e‡#r ¢K& þôgcÈR#=†²n–ä×ÃBfE#ibû¹ûÌwClƬ19{ãLþ%LòÆc弚À'Kí6²Ñ½äNØË~ÕÍç±Ä2Õð”àÅ8Ìõéé}°Ï•ÁèCA6Õ&^^6™H¶‡ɱrEëĦÌ“6q³“ÅŸ-Ì^µÃ -lÑÒ›¢tǰ¨'DF,÷ò.çm[õ½ay’””™zwÀ+ƒÄy(ʺb¥˜rvp¥²‡GÚZݚ̺š%“v³¼S²p@/¹Ieg¯{…s©e•Åö ˜á¶™[Ê(¤9/ñQ3ñJNÈ’}2ÑNÛâZ»Ú€ÊC²â,dÁ”S«áQNë‡.«K‹R# fr(2bå H¡j¥ü&“¬Ú³aŸJ“‰NŽ´Íºha8DÄ›‚G€v!tÒ˜)gl»½¥ò>ÂÙ‘®•èZ ¤NÔµáÝ& xø 6`ZK±Û:m=r††™Q‰#{–PóË™p"sj1hÐ c5\Ã÷XYÁlwæÿvî è7ÈmÃs¶áZîÕ²=}H—ùyÖOÑêÔ –3³»³å*‚_×7"+¾ÃFYaƒÞ*}º` 8Àнž3Äk»óBú!Þß}Ð Ÿ·~6&9p"ÈbUÉ"Ûê¢b'°MqCŒ™ý@¿ó.:Ñb6¶ØÞúõÉ߇NÄ8î:J IDAT…çA3Ïh˜ii¼[‹h­RÞ·+“¼™ž·UzÇóœA|p,ìžEiPnÀívÃ帮qv8„F%±Žð¶k¬9¢ÛéáD;Â07+5ç)¡FNà*÷!­œïÓFéœ!­—‘?¾…Ö~GHœmý¢1¦¨Žúú¬›‰By¹AºZyZ9Ó?DÞÄ*GJpÒk‚žIjMúwMÙ7g8Q0=K9zÕ”¬–mA×údÁdEw>{4ß-# 6}çƒ7i Ìä0jF|˜ÁMÖw—!‰"‚tuŸòèjÒ§Fëá¶È÷O4ÊÒgDY¤Î¢o×2ª5eØ`W<²®6T×Ôg¢v%Ʊ(‹˜’é×jjðùáÙÖ:ý£äÍ­ˆ¨hÔ‘œ8üœ<«(³þ[K4NÆÞÖÑ–Ïj—Pd-¢Ë¸³Rž#¤“ÇIŒÝ0fl¢6tDlÉMéD• ¹’àDZ <³Éf† >“4p¨¨eIC*<.ê¡ûCãnЕŸ/Mª`®@Ôž6¥Jq»ÎrNû^çJ”Zw™|àÍzÜO—qlVïP˜‹g´~¡æE¨(Ú%L‡@“ÿs©g¬†™M_ê†Ê üd TˆI™!ÞŸ'Á l]”Mfˆ–ZW‚¦˜^©ƒõo•+¿ëä¢'3WL²&7eY÷^œò¡.—¹!½^íÕ bp¹¡›s&’ITY¯n@׿–­GF9Òþ}µ.¨„YžØâ uu†×[]¯„ò“@} ~‹³œçàpê°…xÝï” Îâåí‡n¥K3Èٚõѣ@h&¾zæ`cÖ¡,S©¥d"&ºÑ ‹ø²¼Xƒ¦×ÚHŽ¡œ0ã1©+WÝjé9|}}’/ž Ô‹,ü-O°ÛÉc ][d‘5Mž:± „ãå¬CæŠL“„á,g±Îȧÿ™í¡xkÁŒžyuÂÀÁUxXl™ÑÂ$Ô-2?ÕEƒÒk„¯T¹b.‡°BFO˺ëŒc#™²E°ˆ`o?N×e–&‡…àTV+oÝÉì)Cÿ©™à™½sv»(B½rë†jÎ:ÿþzÙÁLľÈ$]æ=›1FÏ=ê®Ö‘";|­'2•¶ßñ Îòår9¥+ÍɤoÙÙp»£RF²%!?aût V•„¬{-4À`¾Uv›º“ë²;é‘¥¡Z»¶ì8Œõغ¡ê |¯0A‘É1MtÃņ}Ùž=f ª’gu¾¡Á.ÜZÙ§ÕT±.'›ËO„ñìŸYoFLjÃƲ(áGçZxЇ±I¬ð°˜­4ëÐq/1ã”XÜÀtÆ7º+ÇÚ¶ß-Y*â™òªnsvõùå™|”} Ùbë„$ì ëó ÈtÚS¢`È©k,>x¥ÍÓ2MÐytÆñ¿RÞ•bÌY¡Ð]D—Aoþ㥧”<¶Ïà½qsº/˜ý/’Í=tZ·ý&äÉ[BÊõü¼‹ÆuaŽ; ;Ý„ïRùIÖì› e¢U¦Dá%bOy,K_ˆ¡•˜ºÒÛ‡‘·¤’´]œYQzAøù稠˜8€˜5ub„RÚB’G« µrxÈc8™«…žWð«A_ñÌ…8‰¿±:×S,䜭¤j}Fëj\£×õü±¨–qËôÌ]V(’7º Ò³ªLž‘|b}šúî?ñiÜk§‘lo“ siãy2¾È×ÕHj5ÿÊH»}l!:8³¶¯dÀšKÛR\éëB¦âŒ¤;ë—´ÎS­é~1ýÉ0%=[FÔERÂMZ€v‰t †4JC/h ´8^Þj,òMa-öf ™C«s™­®«§áÑ—L&-[·­xIvhù °IΓ+M“²'‰ž‹ˆEÄd?ëðú…~â˜ÍÒÿÖ–ëŸA®dº>üËu~þz†;8þfŒÞ+¾Ý¥S{)&§æÊ2âuU„öÞ†)(.Ó#†…4àz‘¶„7ºgZ‰—Í’f_ñwY`жÊ:\a² ËMƒ¡M¼Ï€\ÿYëÇã±¥QV£ÕÖàÕ;ˊ§…k‡g:Iº¡6 œá$&ÞÒß®ŒÖbϨ†¥ð¿>åø¸>}‡cp°j£¬.–ÒªôéöˆXÂ\QG¦Ònmû²0ËáõbùÈ86tÑØ­ÍkýñG²€³»Ï¨ :5PÙ`œÜ·Îêõo.i^p9K˜°{o ÈÜ][•0µ Åh–•ˆ$‹ÔÑ0 Ž“Mȸ5,ZSI]ªzö9ÇöÓ-ÑtëH”=y(~š½ÎªVîׯJÇ !,¤f5=ÁKJóÀêC>@é± vKi…œŸ¡B˜^“¥p …RíÀk—Ĺòs>ÇÑQ¯ ¨þ©1q“Éò2›ê&ŒÎÖ‰ìÍ ÏAŽN¸(yF)ö”¸9‰kM¾,¬ã9к~Ó#Ó’áfë“hœ´ìãƒmäìõ“w‹ÚòÈ’ål° FÓ±ì&–K±¤ØÁ"|zĪþ±xw}“ýðßÀÇŽD… оo=v;O¨[M}@èžÒj˜ÍrŽÐ[¯…þ•Ϩ䔓é|-Ã<„¬ngȰU&eg%ûüºIV#ÚœTɼsaÌhÖy*"Q —aT WDTN™ãEiGͪæA« KòБ´Ò³KuÉl!ð¥ÿ2œœƒn¼%£µÆÈ­°;)‡xž¸äf‡u¦Ç#2™7`™Ï ¯ÈÁ¥;ß™h ‡”™V«V†õb©x[êÎp⸦¢–ä‰²ïÕîcÁãúÔÁÑQ>qR*r^iYuW¡õ]!ÊÔ.é‰ä¸å¢Ï\ « Û¶z áëèBP„Š®n$ñ†Ûˆ¨'²½z½ÚèVlOñ)0,“‚áNÓÞ•Ã#<u–ª‘·ëÆt[Ûàø&5[+›1Û§ xØYá…ZkƒµþRAA½ÿIL6ŽžC0Læ$ÇôñÁ6iüÍk£»w¸=GXÍû`¦D-!·Ò²´m{ª›h^¤bé„Ï€ú ïp|jG¬ÖÒ@{V©¹V&8¸¡)Ë×›bwÁž20øGp2Ïv|x×#»ˆ2½Lñ"ÐK¯¨rˆ²4]}Š¢”½ÈpžÖ~X+x½ðZ"P¶6ôÿ÷‘gŸ!MSÆ.½¾báÓ±Žéböï5}JBßUÿágûDóBlþÒi"DWÂþ ÉಇWš™’ìilA€µ÷4i¥ÔüßÚ`-W·Ç±uþÖmÂDòܲ‡•õ–ºJ˜3 }LŒó¡Ö Z>³vQèýGDx·[ì LK¢¤?o-á’–® >»5˜QÙA¢ÃéûÃoia\5åþ2ȥݪ t¦~Á–§LŽ ’†Ô¬b ·zZô'”ÙlÅxuA¡6[¾¿k¿w|Øù $•öcUÐa 8VBÖ$ÔI•ž¯ÒdNçý?Æ&â eÕfÍ4/ZÈG™#j=Æò[\t3ÈšCÇ{,Zb ™«°øëÊ”v!Ú5jÛÝÇ(ô—ùhØŸ¾¨äâ@=%ܬ¡2öÖS:ÔuUŸÍÍKéþЕ;NðýA^*V¬Â<ºãÕÂK3W\ª×~UiÔ] åK‰ÖB ™®nz­Š—*Ý™[uOVIgUH– ,Å3ÙÏ6P!àÛm{µãƒ=@ìíFeDÊAS~A"a5»™DÛSoØ–ÊßmDZÑëßOÜFàS„Ó‘ex±§kü¬Šê-|Œ·vZY*?ܵÛ¦ `×5änŒÛTXÐ,³Ö+±ën!exzw Ïë?Òù¥Z2Ávy„ã9K“U~ŒžÛ¸Üáx¶2ZŽ”¢Hš©•§Cwî}pß÷ó¢ûß`úĤÃù [õ¦cùzc7"ùÌÝÈD‚ôz†)¯J ” Ï­¿Et%ˆ,^XU¬Š‹|ê ;²Æ“à+»½D"UoëÃÈb¨†Nt%²P5xldå®&4³­n% ‡†`<»¹—û‡¿²®QZùaŽéÕ‰²»w¢Xçÿz1¤•H=éíe^û‘_Ñ ‚­ ü=­Md- 9ƒ9²W–M!lëÅþ^ÙoÆÖ¢k""q– „‡R9d3<âÄÐãí­øQ’'f·ÐŸŒ?YQÝ"v» ãÑ›x€êmùtí]Ø µB›ÿ­¶?V·‰[#«ZçíÜpÕvÉÄGØ:Œ/"0è ÆÀ±&þF€O.Ö…‚Ÿ6Û~ÄÔVÜ×Þ^ËfÐ_i=Á‹IXf|ž”(™Ò|Ô²N.GÐD°1Éï ˾+µû¬#¨õtT-1C°·µ×N ¾ü`t‚XP`f:île„C~;ZÄøì!šìqÝ?víp&·ÓAÏql/¾Êƒ¥öô÷N&@ ó®„ö€).òeÞŸï-f<àºZÄËK'—ÉbF’*{ð$ôêZæXÝ®R©®R>ÙÖCÙ4Â2Ècû!b4†õ­{‚ñø*Ýž ¡r a°¼K˜6aFÿ˜x U†+@“ê¡»dKƒv8 †uʤµLVZ )” æ ·°öX)7õû–“|<[ÒÏ:›X…µÊèuÎ`IAöµöãP¶×¯j!âdÏJC‚Ø…y›Rb†€ðc ®lØ|óèâÛþgao¼ØFº²Idþ¼›Ç/(ÊÐã)?Iš´+$Ü›$klŸ*ÄIÆ#Òsjm]Øß‚ôeK¤k²™¹R§|V ·‚.7´4Ð ïF8ûÕÍɈÖXk¶¼[P˜öAÖ£èå$%ÃÐÒZ*¢”(plÿEBcR3U¼„*³á2:"T0,ƒº>ž°ë3va(÷*éBÏG Íq²ž#=$’ƒ_l9ðJôâ}ƒÇÍx²"œgt³{âÙðcK…7ÿMr—Z]½¡¶ÁµŒÖUvþ„Næùâðë·ÀyÃÜÝîH“Îõ~×[äТ—¦'Zvp‘´xU- §u‘÷¸‚vAœÃštÒë î'KÀÞËœÔ-w³Õh†? gX¢^šÙý¬1cÀ("fE\˜`KÛý) Å)üC)ƒUtY(Î6aúSXÌ_‹L‹¤ÛM‡C9êÞŠe#JÛKú-/P ž=ûìdcˆc§|èëðb)kæk ·Yƒj¬>üT ív=Âë­p)2‘-¥µg_Dƒ@Oq¿™.rÍu„[Ãz‡OõòÃå)UZø"6 ›óå LeÊz¢£-yï2ï¼ùRºÚÊt™4`až}Ù¢ÞÏj·ž]áÌêií%Ö]DëRà®™¾~Ù?ò?<ÑnçN‰0Ë"s³J„Ẋ’ÖÙqe"ï [¬«»‡–Y{Ég'Åö¾Ü:«”À)‘ýZ²d <Øá¹6(X5^=ùŸì—Çw ÈñÍ9½ ºýÞË[]+ÈÌZ´Pìo3Ä'Y[é`Ÿ® „!°)úX_|üûoþÿìù—ÿêÿù¿þïßüßçw~Çîë¾îë¾îë¾~×ßý{ÿ7ëçö/þùŸþÿýoÜ·ã¾îë¾îë¾~-®;bÝ×}Ý×}Ý×±îë¾îë¾î뾞wýlûï/¾øâ¾)÷u_÷u_÷õS¸ŽãPëŒ\f¿ñÿ×ó—ó+å‹|ñWýžþ+ööç?_رþçìoþª^äüÏ_£ÏÌ^ä×m—”óůÛ.!/Ò~ƒ_‹oþÿ›5w£‚÷u_÷u_÷õkxÝë¾îë¾îë¾îˆu_÷u_÷u_÷uG¬ûº¯ûº¯ûº#Ö}Ý×}Ý×}Ý×±îë¾îë¾îë¾îˆu_÷u_÷u_wĺ¯ûº¯ûº¯ûº#Ö}Ý×}Ý×}Ý×±îë¾îë¾îëŽX÷u_÷u_÷u_wĺ¯ûº¯ûº¯ûº#Ö}Ý×}Ý×}Ýë¾îë¾îë¾îëŽX÷u_÷u_÷u_wĺ¯ûº¯ûº¯;bÝ×}Ý×}Ý×}Ýë¾îë¾îë¾îˆu_÷u_÷u_÷õÓ¼~–üýaöç÷Ýù‰_aö÷]¸Ò}]½ÇÝ}âý$ŸÍq¨ˆµýïûº¯ûº¯û:¯/¾øâ¯ö|Ö˜½ü­òÇôˆÿ{£‚÷u_÷u_÷õëqÝë¾îë¾î‹^å(Ô³>Àìuào•?¦@üß;bÝ×}Ý×}Ý×]cÝ×}Ý×}Ý×}Ýë¾îë¾îë¾îˆu_÷u_÷u_÷uG¬ûº¯ûº¯ûº¯éõ³ûÜ×}Ý×}ýÔ.?“ôÅ_<þ°þ}ø—×ß¾QùîO|©;bÝ×}Ý×}ýc•`çŸÃ¿|b¤ÔoT¾û_ê¼nTð¾îë¾îë'tÇñW8õõÄ·þ1¾Å]cÝ×}Ý×}Ý—*¶®—ŒÏŠ^wu_÷u_÷u_?J¸:KÆê¼#Ö}Ý×}Ý×}ýTÂÕÓ¯;bÝ×}Ý×}Ý×óÃÕ³êª;bÝ×}Ý×}Ýׯßu3/îë¾îë¾~ê×Ú :k ð/Ÿ[=^vöîü·ø¹#Ö}Ý×}Ý×O1D•c?ƒ<{ÁÙ»óß‚_äFïë¾îë¾îë×ãº#Ö}Ý×}Ý×}Ýë¾îë¾îë¾îëŽX÷u_÷u_÷uG¬ûº¯ûº¯ûº¯ŸâõÆüÍßúùÿðÚßý{ÿ¾)÷u_÷u_÷õ¹~ó·~D¬íÜ×}Ý×}Ý×}ýk¬?ûÿü¾÷u_÷u_÷õS¾¾øÿöÿÿS÷¨Ñ€£`Œ‚Q0˜Áé˦ӯb•Ó†IEND®B`‚saods9/ds9/doc/user/binning/smallbuffer.png000644 000765 000000 00000106502 11332353405 021245 0ustar00joyewheel000000 000000 ‰PNG  IHDR;ðþ›#{bKGDÿÿÿ ½§“ pHYs  šœtIMEÚ. IDATxÚì½{œWuçû«~Tµ^ݲdY²‘l°Án ~@x…GräˆOnâ\2(Éx.“ù„&’ùL&$!aŸœQ“¹“Or;NÂdúÇó……§[×Eý|ëäÿæ÷þß'Ž“o¸f×¼öº];¶ŒŽŒ<õ܉Ï|õÆ—¾Çð‘÷ÿÄÔ¦‰?øøg?ÿƒôi€àô‰£'ž{jóÖ¹ûì¾dË;~è•W½`Ûù8¾ïÁ'îøÄ=Ò„ÒmÉ‚£m;Ö±þ×o+Úýÿ÷_·slf·Ü%6VÑDÔŽë^÷è—ÿ¦‚ÀùóÇ&6MLmß>ö­ÃGvNïñFF—¼Ó÷¿s϶© OYxì©#S›7\Õeñâ±sçGFGǼx÷v#W®ß½ùð“OWìù¾—¼ó-¯pðð“‹Íð¥Wîzçß΋6Ì}â^±óžy|ñÔñu&G² 1çýØ0|àgÞ²~ÿwŸûª‡ø–×ßtñäį~ôo€Q~•!ݬzç°ÏÞ÷¾qÏÕ/õ’Ç~ø_¿íWþëߘ׿óóÿ¬èØ"+_xGÇ‚íÓ?x䟌bdÄ{îàWG¶]|æÜâÄî›ýu–lúE›×o›ÚFg~úýÿ>öFÆÆƒMëƒS§NMl¹tl,ðÚë¯ðà#_yù¥?ðšWÜÙøÒÆ‹vnXüÄÞàŽ¿ºûOþêî1¿òêW¼äƒ¿ðÏàU×}â3÷YL›Ÿ?ÿ§¿±ÀÜ{ÞúúéŠ?þןýæÃO<÷sÿìÕm^ÿ¥ûùoý…óçc3?ñÆ+_pñƉ :{îàcGþìïî}ü™c®ÚuñϽõÕÛ¦6|óÁ'N<¿ø¦›®þ‡/?pÇ'¾àâ©ï¸å¦—\¾}|lô{ù³O~ù±gŽY7øâÝÿì[_½u29\Û³?yËͯyÙ'*‹á™Çû½;?sõ®íë×ù>yä?}ô¿¯Û°ù×^µkç¶m­|®Bº­XôìýØ¿ü€»ó_þᇡ~¯çû«¿×oÿ«·¡’×rBëØ"Å*¼‰M[Ö_~sxøË§Ãsñheb$:2rÉeÛwµs«ÏŸ›Ñ™Š?þ¡÷ýì÷ž<þ½ÃÏ<ðÈS•©ÑÑQÀ½ùÚÝ~ÿcwýÆ{zûÖ©+/½èéÅøšÝ—øãcqÿåß}vÃÔ¶ “Û¾ûÔâ“GŽíØ69ý¢Ÿ¼÷ ;¼¿ýû¯{èñgnxÉïØsãó§Ãïzjjãº×]ÿ¢{¾zßüáãð¼­S>{ï7=öòk®¸áÚ«~áÇ^÷þýß´iã/¾ãMÖß|àáS'N¾ñæi§Ž?{ìÙ'v\ºûW~æ–-›&>û•ûŸ;ºð¶|Í/¿ó~yöãá¹ôÚë‚ñ÷þŸoZ¿.¸ï»4O=ÿÆÓ`˜é+w¾å5/=ôÄ‘ò³ë'‚—¿ôÊSGŸ ·O¸hrãe;·oÝyÅæë\ù‚í÷=ò­õ§¨Y„îÛX#+:ÊË=öš^W$råÇþÛ?øÛ½ûGXr¥O¸¼È ÍùÓGÏÇcÿ…Û6ø¾?~®ÝÛ>s.þƒ¿üÜO½åÆ›_öâ›_O?w|ÿ_üã“Ïž€ç½üÅ—­¯øÇN<ÿoüÚ·}ÿ×¼ùû®ŸûÛ{7NT4ÃèÔépû¶ËGFÆFÇGjîØ†Í›Ö7OŸt/Tÿ£¿üâ׿óÿü‡÷_vÉÖO~æK·ÿO¼ÿ¶Ÿ¸åõ7¼àâM÷Ü÷ȆÍ[ëþþу÷mذñS÷~çO~çE;/Þ‚æs×ßx͆uÁ³ Çß÷Û¿?æW6¬_õ/2¦Û˯¾l˦‰G{zÿÝé¯Û°ëÒ7^û¢é]›ï}padlÜ\ôú«.[¿.xîØ‰_üÐ>üþŸyÅK^hÞ ÆÇœ|þÔãÏ}úØé}ò‹áâéhäÐ÷?uÕ®Kþä?þ3'·®œ OcãÔ >I„²ñÁˆ·‚£ùé÷Ñ›ƒk¯ÚõüÐ÷ïÜ~Ñ[n¾âïúò˜¿î5ÓWøâ×¾åŒ~õ»ÿ×¼á•×ßþñOŸ\ TýúuÞèÈÈè(ñ FF.Úyù“GO¿¢µç7>öÕo=|ÃK.¿îêËö£Õ×6þéÑ‘`äeWî¼ä¢¾òÍFGsâÎ;7¦SΞ;7TFZQ!q|þµ/»âõ/ÑÏýðïìÔéÅßý•wŒŒxžwôøó.½d›_©ÀÙuÉV9á‰E‡Ÿxú÷îø_²ñ豓çΞ‰ãó#£cNœjضerl<ð0²ý¢t]Ú™³çëñéèøÓ;·n¾õ‡ßðÚ¯}å‹wÜõŇFGƒ¯|ïé³÷Ú0áÿü;ßàk÷?èŽÃ+|„Òg¯àH¾W°èl¯`Þ±¿ù/nëÊL}ýÖmoùwÿíïÝë.Ã+xþì™S}ž·óå{ƃ‰ñmç®~ýâCŸ||üùƒ÷ÓÕòû÷ÇÇÞóã¯?Õ|ÕcÏ‹c\uÙVßøöÁøü¹›_ü‚±Ñ‘Ó‹ÍúV¡~ù¥Û/½dë¾ö†úŸÿÃÿðÕŸzË«öýØ-¯ÕÓç0råe[Üý¹¯|ûàá‹v^‘?åã¨ø…Œ8›Fž;wÎ÷ßX½yd$ió×8|òTsÛ–Í¿ûË?»x/¹b»òµ=züù];·ÿÈ›^ýøsÏOmZýÕ»nÿø§ŸäiÄÉ ï{ø©S‹á¥—lý…þ#‘¼âêËäðë^´óm¯Ù·zl±]¶c;€ã'ž?±ðôïÔö;yúÔbxÓKv­_|îÞùï<|ÑÎ+FVôI"„åhO&â7~nOÑž¿þGwgÊ_SÕ†•s¬\×8ýî6[~ó_Üâ^·H±r.¼øØ×·nôŸÙôŠM­ÕE[^põ‘ÓGwm<3>>Çñ£‡¾±ùŠJ:(:sþo¿pÿ•;6íÚ±=ðÇŸ;vâS_ø§¿¸ëÓ•M½æeW¸ëS÷Üþ?>i’GM_½ûß¿ß+¯¿fìOÿö¾òà£>öÖ7Þxå#‡ŸxæŸùÒ_ýÝçÖmØ<¬CQ”‚—û_øÆC/¾lêæk_8³ïíû¹o4Ã3•`ÀbýçýïŸÙ{ó‹víøÊ}ßk|þë·¼îçΟÐŒÎþöÜßÿèë^|ÓôUß_©,œ<õíƒ>øàƒÞø¦Ñ±qÓ]‹áÙÿüßÿ÷O¿åæ=¯»ñþƒ~þë¼þ†kÌ\ñPý¾k'*þÉÓÍO~ö+ÿëîÿÏß0õ̉›¯yÁúu•çŽüØ]Ÿþ“ÿ]ebÓx°ndtÌ£WÒeÉj3£Þý_úôµß÷fmš¹ÇÛ¨ðB¥ÇŠ\™«üú7~ãg«ù×µNlêc=üØ3Ö§Ÿ~pwåø7ŸÜyÝôÅâóçÏ>öå¯Ùuîܹã'Nü@Ô<½~óE·\lJ!‡‹§Ž=ý¨oû _êÏ6÷ä¡Å“ gÏž *žç5O?o®x6j>ûä#çÎDñùó##£ÁĆM[wúÁº# ŸÏ­¬ŸÜ8µmtÜ÷ƒuü6BºÊñgŸºöÚLZóû¾øE;_÷êLÔëþooÞzI7Ž•Ýr7šcåÝ…gKëcY|n÷Ä©ï>ºý¥oÄHÆ.óFGÏo»îttìš+¯8yòdüðá‡NŠ—ñŽŒŒM^|Ùùóg=xž7jlŸ±ñ`̯lÚºcddtdtll<*ü`bddÔ¯LqebÓèØx8±ÉóFFFGŒÕäû•Q?°ùâËüÊ:ÏçM^|Yeý&s›/¾tltܰqË%ë6M€W™Ø8¹õRx0bSY¿ilܼŸzËMn|äѧ®Ü}Éõ×\þüéÅO}ákcã€çŒnÞv©¿îxìaÄõåŠÒ˶Z¦_Smç¨Ü艎km,_Aœyãùg?pz¡²ë¦±ñÀ=oeý¦ûž;ýس÷5›Í3g¢“gNW6ÞXÜdLlÌ׳M[¶[[ƃÊä¶ò§_™ðl󆩋/•×[.I‡m¾(Õä±q_²aj«{ž'ž=ñ¦—_þª—î^ £{ï{ð£þ×ÇNžÚzÙodÄó¼Ñ±ñ “[ËÉxPÙTrßÚèÜ €õyE_!dp¼‚®ÐõíXk›ñ zòèûŸ9üÀ©ÇΟ;;222¬Û´åâñ`]eÃä'–!kˆ¨yzñùã–ƒ®œûïÿöº ›ýÊD¿Ž•-Ï=ùHê¼§ý7]´£²~óÈØ˜‰K«¬Û02ÂÈ=BȚ”›ºÿþo·Ⱥ ›ÍQý:ÖbéÄkžu'×mœä§™²öEkbC0±a¸ŽÍQ,cc>±À'J!dp˜Ø4åØXÀé w|ð]ìB!ƒÃ»>x‡ˆgk!„ (û÷ï×޹{;vŒÝD!¤¿ÌÍÍY[hcB¨X„B¨X„B‹B‹B¡bB!T,B!T,B!¤ÿŒ-÷€©©©Üí æ­……Ž%'t¯e\®¨/½šf¸Çê6tðÖVïý¥¨yý ä~ØúÞV«–ÛžŽMÚÿ véÒüÐv»…Ö%JÆÜþ\å£ïÔÍ®ìÀnômn§uõã7¶²Ãz9j´s­n·§_£ä@©TI󦦦¦¦¦:ÛàÜ(ƒ WîN«úÞ¤Õt΀|àsû³³^>Ì={X>˜tW±–Tήš&E–|ªVü90gcKl¸"âSÖ^É]»7«¯¨·[¯{ùhr»®³?—¼¯vz£ÛVNyowäYX=¼âKwü‘µÙ9EŸ–·pÉþì’„è!+÷îJžc‰‰ÓÎ0ÕÕl§Ù+xŽ#]}änït|L,úÑíOs7nm¹?Ír[¢mëuïÛoig=9íÜWyo¬f”ɽâ²z»7_“å^º‰òÎɽby WÓc%#Cù QôèW9š—ßÝÊ>$}ü൉•=DZUöx,Í"­.ú¬÷Å âº:ò30·ŸǺ_ò—ZGšÚƒ¹UŠV6 ¸ûh¹¿ß—ûEîÔ‡ªhºz5¾ã¿¤ˆ9-­ŸhE=ÐÁoho>f]œÇꔜôøkŸëmëÒ­­àÞWð5ëÁ£霾|NÊo|É®_]üºýp´;íö£ïÔ×pýV®¬×ݢȔn<ñ±Aþèˆõ0˜·Vä•^cfÐ ,Ýž%ƒvžÑZ•y×ñ0PVrîtuý²>Ò"+øɽä*S‰²vJw{<ÎŒôàÞ¥ßVÝûõÚæwLßš5S2hãlÍZ•«îuìjž…;u7ÈÕmÞ`Z™ÃÒŸå\ä"êå7«¨WÖ«c]zäîhÞe=°ÂÀÊÜ ì­uª%V«úõhzcïæÞBÏž‹ÛÕ% (Flsî©JNÞãqyçä~‘ûûEkç3Ö›Vµó5w;°¼÷zзí\be¿ì½›ö¼ãíï|÷£Ï?}bᎾ ¬AL¡1=l¸&]ý¦ñ׎m™Ø4u䱃‡ïÿ2³4Bú3l­™XŒA€ *!¤ô RœæéÚcŒœÒGÑ"Z®¦Í´±!„ T,B!T,B!„ŠE!„ŠE!„P±!„*!„µMÎz,“ƒBhkÿþýìB!ƒ®X”+B!‹íÜ·o;…BÈ 099ù®Þ‘ocB!Ccc‘ÂBº”¨X$Ã{ßû^v!ƒ «×R±¿„ :sssü59Œp‹Bm,B6Û‹0 äÎ2.­X¦*³ËÂÂË]wœvºTžˆ<ùÓ}dås¯h=q©nîžM¿µš6t¶ÓÚ¹J;÷¸¬Î/ùRÈ–ÜýKú¶ä«W~ üV®z „Üù”v½‚ ìÐn°dßÊp¦G=Z-kcј¨ŸxùÏ—U¶¡{’_r½ÏÊ>Ìúåž§hÿ\=Ó»é?­[hSnI›xžçyÞç%/öx¡„^àµ×æ…þ×Ý{ì­³™-òö$WÄG’=­ËéöH#s/­Á±ÛŒ=Þ—;¹Ís¯"ÿê}roP6ÊÎr#º¯Ž;V’Ëbl5ƒBÑ÷_›òõ%Ö@¹í"[¦¦¦–Õɹ;çŽéÝø–uÎòžÉ5DLŸ,ykÿ¢ó¬ø#mNe„߈ᢠ¿‚(¬û@ÀkÀ¼·*ˆä5óoPÐHOT£fï ~ðr*È!MøA5 ~Q³áQ0…3~²Ó!ÕÈ"×ÒíiÂëék9³Õ’xÞ ¼buƒA5ŠÍ©h¶¯ ’ É‹¸ ¯‘œPo"4 ­Òw'W‘;ÕgÌF8„°î›íA5ЧáÕ6üòG3ÒÁá¸Û?Ÿ×€¯¯}›#÷]ýs{eÍhsjQäõêªçsY§¢>)ºJÑþÖöÞ¤—Õ·Ò*«¤#hÊõnz¼Ž«hÂ7{z TÅUˆÂ™“˜-–\™³ÅU¹2ªÖý°áË Íæµœ'¨Eq-’ IK¹ª’Ƈ ?þTÒž°ákù ª‘––&ü`6²tH.Ý„ï5à5R™t;Pþ“}‚j*„Þ ¼z¢¦D^˜ÏéÒ•+VÑF:âë+Ú¡³ãQ;ã¯å³êø_±Í‘+ö¿Ê úJ±¬¯Ò*ûV?#~1;ncÉp/C¿|­Ýä…1ÌÐl¶›a]6|9gb]Á7ò”É6|s1àŒrÕÄX1× ë~XW'¯§z)z#§­ òÞœ´GTSHëbÊÔkÝ`PKuHöÔ/Ün4Ò—?`{3°ÜÅjÇSÏoN%`Ç£Õ˜YË’ßxGäªýþw祊¬·¢ýWÓ·¹fÒ)Ä’°Ä)Á«‰Øh‡¡9Ê5È´NÈèÔ"­^úl‰åÑÒ¯¸†¸–Ê¥gæ_˘-‘Ð 3í1G™×F5]Ë)¨EMøÆ 2g“»0R$mö‹¥eÙ^q-µê´LêŽíºWpɯ"åje¦RïÇ£î är…¤H ÊÏÓÙy£ÕôWjè“óëÖ%¯ ²“C2ƒ%ÍHm21cm”-Z-¼:0Óãè3£¿±¥šðúïÕSI)o¦ÓqßøÍቢԢ`62-Ѻ%¦O\Kì?Ë)WÖý –œÐrŠ(½¡EKö1mÂ÷ꉶ™ýÍUä;æ/êÚ¶Àr·td<êìCé幬–—ì¹Üó¬²ÿW<ãHù@é;Ʋœtä…° e̼+óUbOˆψAPKÌŽ ™9í`4Tz&)®&1 ìEP‹Âzª”^#5¼â*‚j„yàPb¥"§îÂxeæÌæºíñsÅÛ%Ñz.Íl}JL«Zz›®A–ËX§†0þèk³t,YI§µÓ¥¹û´¿±#r¹—k'¯äpóVQ_‰W­Sa~íôÃr¯Õ‘¨Z«‹ø¥ëÖO~¡—DI¨ð9+‚Nk›ì)6S%݇yT5[s&ü/¨E˜¦–Õ"fZÓZ͆o4RýSjafÂÄè ~вÃâjä5ì™9q Z:ËêÊÄfgør{Ìk ™gÂJ4fûŒµóÝhç÷#¿0íwcÉð%»´|Žd¹—lC;×mór«ÇoçríÜfIã—õ‘^2šfe`eO„tÉÀÒº%ÓWhä;²t$º Œ`Æô½ðf’±;‰;0û7|( #9ݪ‘WG\0 ¯žÎ5[η°¡L±é$X\ëbŒôuÓ}Ô"Ì‹¡“HT ô1mâÝuh{Æ¿']* ×Qø"¨Ú´²œ‡–¯êØÅ{ !d Xn( Ž›ÐQs²³ ëqWAÏ&c:¤^2ñZa{h^˜A?¬ûq A5™ Jü“Ó-Ë©y-…ÓsHP³Jæ_3sæ5€½Ð>:O™€–÷OGÀëØz‰×@+HD^ËŸVD†Üšt”Ž6D¡í`^AÒ_rç–ßzXî îþö'Yg –˜Pî>jKúV8ƒàÎ(¼ÕŒõ¨(·¡XT– .[j©—ø ƒZ„½a/‚ùȬ N•Ó‰«ÍXT¢-#&˜pÆ×.>cúäÚRî êÅ-ïh“¢=„q ^=ÙÓOÑ&)²îSÚXd@YÈc(Ìæ]fV:AUËl´ü~îQ:@xkf™p<‹ Éj_+âjÑ•Ùǘ ‰¡6¦¾Ù×Çšˆ>±´’ Œ¼¸Gwù”„Æ5X†£6§´))/¬I/}/z‚M{ÑÆ_²Fmzé‡B«ë04!CmfU™¥H(ˆApξuÞ ÆÄ‰§aR%…4xA&É‚j«y/váÕ“TÆäjMqEf#?©Ù¾¾\•5¡çîíKp¼¹i›¬•n6ìôNnÏd®Òš?Câ9L&ùL`HP‹©Xý…©  F+¨FØ o&³æW;¾r³ æDßÍ’Ȉä_#]ó0Aí•FzxÙ'Q‘F+¡™YÖ˜åÿÔq}˜ÄwTF&έÜ%VÖâ6Y¬6üJ#Zø5*Vÿ(IBLé/¹˜dÈne‰õ]5r—dYñNèàÍ ¥&äò®D%éòêÉh劘¿C†o”L‚WÍkDÉÔQËk5/²äVÂó¬8u-·q ˜O’ù–Ül"®ÙÈ.ÎäÀ­Fh ¨E¨§;i‹!$!·–¤B—n8>@;å¹3ëP‹ÄÏvgäÝšXThé¥â1“¸Ý’ƒÓ‰Ólˆ& “ÕNf-WSeNµ$Z0R­Ï$­×wgÝl®ÔíOµ|8•UaØNS©X}ûVBúÅÜÜÜ’¿&_K2P´&]2¶TÑ`­ÃÂFFºŒ…„iàÉÌyZ‡dâ/Œí…y`^YLÃÌ~ɵDÒ’¶üŠ±Ê ¯í'Ë(Ú¦ãµÁ”«@Éu—ŠîÓ«µÜ®³$?®¢|¸d¬ !„؃¬Dßš5ÜëÛ„Jœ Ä:ò;“ýÉ+3¥›ÔüªEZ®¼0 ‰4u¤2¹ ¦“lOzŽÍì q®ƒN‹¨%f: õ–Îí$žOköÎÊ\$W® zŒn'„e¡“ #»X­Pr´B´:R€ IDATª99P¿ºä‡H‹¶0¼Fš¾Ý¬ó f“¿É|X==§¤ÌFF®0Ÿ‘ wÖMî¢RP 2s Ópc1$2ÞJìkÅú›Þ^²ŒN8 ´eñ€µÚ¥]¯`I Ý6+éµsþ5¼Ž¤¨„nnc¥%žËK/k#œ:¿ÃÕxBVLI-]m[Há`m[„ {²'uŽÕ"ËàÕSO ¸›c“0¿*†ïͤ¡tª—±fö"žNJkS)/l/²’¾C¥±–4ÕZ`©n¬N—ÝÊí"]åËLƒÅUèð 1: uáLšƒª3+ˆ—[–G;Â_ÔÃn'·ÙÿK²‚RÈk¦ñ„¬À1(¥~µ·ÍM›;¡eY3RS­©ÔCØH“3%ÆÇmîŒÌz^­²î8¨FÁlÎøfÕ°w70Ÿ©˜åÝš,RD[XwdY%kÓ·fó}¤VÙ{q®Z~Åô¢3ùÓZ+W¬ÜzíE¥1r_[I¦Ýî‹ PƬ¬EMIµâv2·v¼øÅ 7ž•¡kD¹Émuö ktNÖÕÖ"×5'©Œ’qyoâ{´<ÉηúÞ­ÀîdÄkIÉ œñÍÔ€ø}ðîVIbÀK½s¹‰9¬|†¹NQ·òˆVš"aÖçÔ.ÄÜ…kºÊs;ŒtdÀ-’±6¯¸˜Ðбš¾HÝíVe’†ØxBºž”²²ê‰md鹤Va=Míš Ùµ´IðPÏ;=0K©ïßlfžÉh’™ãIëŒÔ"m–%ŒJÉáZE:۬ȃNP‹Vu`]Þ^ŸPkLy±`+Y»TÌ2²R‹å§'ú®X«©ñÃq'wD^nÆe%fížc­÷o³°=!ËÂ2§¬VgTÒ)kÍЬj‚¤Ö‰Ñ°x¸{®¨ã=ïÀí*¾cºuÎhÂf“«‹­†Ý©æ‰÷/®!¨)=óS\$<{î-žmÕQœNnÐüé©„¶Fö\ƒÏ ƒDq4¿e\ŠÚYJf© eÕnîŠbµù£˜´c©¬@Å»—G<·PÓ 5ž¹_IDZBãÜáX[ZÚ9–êJË7(‡·¦s~¸¸Hq)&’¬:”f’ >v;9Ñ~úïÕ“´E¢+&T8“Ô8ë¾UÚ# åŸNõIÜuGnæ_}9­g¹SeºŲ„J4ÜÿèöaÉɽ6,³"‡OȲl,+Ü:—y-2V‘̉eÖ“ èMøØ q»%cý[Ü|ø'HL´¤pT=)foR°KÆtSOBÏ%Y0”T$•±¼ÔÀ2¶ö"~Ál¤m—´Ù³©«Ó‚IQ®Yh—ÚÈL!Òh©ZnÖä¾TŒ†ÉµèN ®D±,gÑ’‘Íí[ZE/3«¤‡—ì7”ÜúMPôã }{·ÜœÆÓ‚'ÝCäÊXNòŸ±lÄD°_´*T…3©i•ŒõÿxøCøÈGð?õêÀtbWi×b²jÀt+óE-)i2'™å\:FP‹¼¬b‰‰D½¸b‡Z…½0*‹Û•*ìNCøLàŸY%ÑüÈ.DÓ¥³´½%Ù• × ¨…Ù²·rU°ˆ±eJE‹FŠò£Úܾ†íªöwh³s¬(ó?‘å6f OHG¬+7w­¬í56Ô²_¸“‚ñ­5Â&Mmšëo&²Ñ45¤†ˆLné|êZ9Zmƒ§rŸKáxBÉ¥´7ÂÀ€yijÀ¡(-t2áPº”XnJ¯‰ÖJlšÚT’쬀ά¤v×]•,´²’‰,®ÞÆ"„ ÐÆ’ì|P ‰r´f}t†Ž —4€º ”$§ji²AYö$É’eXUä.­µŠÓ'¶WŒ8NCƒ8Â!`/ð8pÞ 0`¶Uø¸ž žñ1êea–§NJGº±‚F˵‹R§·TJ–^YœµåÚëÈ :g!ÃŽ¸°tš¾4Ö¼e$é4¯: >¨Fñlš0YUCØð±A-’|ð^«ˆ T|»ì77цñ=Z{U0nF¯þظL'º…½*uÅ0sc²,ÌòÚ‰¢Ÿ¡DpèdÁ¢Lº»´¾¢5×e•´²ß¶ãì°b1&²6µ´‰Ñ0Ÿ U·†i=ýã5Ò”I=øÙ( ǘO7Ä7(¦Uº”¸³Iæu=;e èÚ1 ô|Ü x`RöÕ}´ Ïšt…-m«Á»5“*P,'ñø™æ¹@,J§ƒÒ!–Ê™ŒK •ÀúX]gnnŽ@ÈpÑ*HŸú¯ÂbU#Qªýš™*“KÉÈ’Ø"R^Ë”g4H^@›à=](²5A•DÕ§ãs3󊪙)¥@¥Ì0‹—+­BÆ’x×k ÙÈ™š€Û øI#¥Q®XZmÓóXéTŸ*P™«[®Õ`ŠÕ_X†˜á¢‚­êõq@dœ{^+òÂ(5òJ\ƒ×H’ ›º!nnt(úç“٣ح[Z˜8*Sõ;¼Fd¹Ý¼Fdò]xâ8ò<Ä1Ð ˆ0eú–¥Ìêf}Á‘[ß Œl 6ŠÏ’L-Hz,lØÅšvÓÝ6á/R±úÈþýûÙ %ìÛ·@ qÍ! ¦HÆ}¯‰©èˆ¬9’”d¬¥ÙŒ\%vïá]_žX~I c=]¬×)K¹HÜØñá.x·"ž…7Å54뉓SDIÖ(¯žL¹Y¾M´É ‹wƒòû€ë±!d…–çmåÇKêŒÔ"LÛiÎuED£ PñîaÃÇí0éÑÊèfÝ’xt¯]ÂÃÚÍóTã|¸#Ià$yuu.yi­HE¯܃pÞš¬w6I7 A-O©œÓ¶½²hÉ×¥F–U‹ŠE!…è:„Z®ôò)…µajc/†|*­/lj‚hÅœ'¨FÁ§"˜š÷³‘Ù"’`•×Ò±òélY’u7Y›¥í¬Àn`7âÅdÑUP‹LJÜøëi A¹_³XtQtס$¿f«‘k¡êÕ]¹’–ëÛ\m b7ÓhIîQ¦%døtiY+%ØÉýZú‘äM79–fü`6Âd™pš6·†°áwFØ›¦¸ ßܪy?“JTr•i{(×µ¸ÐŠ!4ç7 ‘˜;^bdyw‡€7w[ÿ|_Kr~)I*hÖ„%SkYЦìdë¾$ ®t¥I\›/©•ìÌ~‰inS×™\²,m,j!d Ýòf컺 ‰T–LƒA5JŒ›y`q ñ,‚j„yñfüøoâ=×é![jP™ó¤é!Zzé®Éd¡×óB-‡ª jzÊù?wWóÀÑDµÑ¦—Ÿ¡i³ÜQØðEÕ©eì*)‰¢sþºÝ(JïÖ2^2-Óò«¤ÔHIÁY«Ü‘õšha"B–…15‚Z¤³ê@>« a2"דr!&³­×€WG8ãcÚ”óxð6à6“3I…úf¡q®ë,cóÍdþ,¿ïV`7ð.àÅÀ!ÀÖÄ–Jrõ¶þÕ5½†=5%b#¦uÈäv’}DÀŠB0PÂnγ¤Kpå6Ö J­w°:;!„t‘ݰj½[C°Y!+c±Ñ«Ì•™d2ÕñVë€/…CÐ&TrÚùœT~:º]ç-t3_è”Qf2+ž…7üð<0ïÍÀ³Éä–™ZC6hÞ8Mƒ3v[Vft'KÌÜe^«R ²ž@©$ÙŠŽüÙN¹ g’rVºÔ¯â/ËŠ_€ÌUwŸ±H‚j„+F€á#ÿ ïûG#NVØ‚(Pù -QÜYâ¡/ åd g|“E0ÜÖÂ'y„3~R+ ©ÒëÊ$t·ÖŸY‰ ¡"PlSE·•¼ÒQ”:R1ÑÈI'áÒ뱤`£ü©m¦•g„2ТÕÈ ¦VÙx !˜¼z’÷È‘2+a3‰*¼óq툸Ô\¤5‚Ã5›ôŸñÖìŸÕ4 $IW¨Â½4[Ù¡âjZš+€$””5ñ° 8%Ÿ“Û"¨™\VºDVFÆôÒ4ëÆ½Öš³Ö½§s„Ç:bcY“O–‹o¹ÆM4BÈÀ¢VR *4NÊsȘ ž ƒ¿%]ÖcUųv@‡•I¿•©òaØe±ªi Dªqrˆ3:ªùLüž‰ÂG¶z¤å™”v¦¢^O»BV[kA5V”ž¢Ó}(¯Mµ0ɯÕ+Ö’µ†—kQ1ø‚2°¤+d¾Q&×3–ÈÀ©9%£mw§¥b>£a8“BB´³Ñ¶êvÙ]KO5á£J ¦ˆ0döiMÔ™¬ó»(oicK—at×N¹‹š“hŽz+_Tž}™”«ûz©Yl¬\ 3ÂãFRÈ·ºhm,BÈÀbªEGdoMÆYcLhIÈŒà{“-RÞÞ6žôz¯º½º6Íù¤bõµ»;GŒ¥e&É$âÃZÝ¥Hi†ØLÆF”CÜ£´¹¦§ÙDDõ´œêÆÈÖz.§Ý¼‚®À¸j´¤YF•ê#ì|BÚDOÀ¨h‹l=ªiÄóÀ4ã«ÛU¬’JQ{£p&)4eÒ æÆûåF„ÃÍ"Øœô†­ÖFØÜmjŽÀó¢x6±çš ?nåƒ7É5¬H¨\´^ë©f'R—QDI½h&¢<•Ò7ÛZ¸¡a#Í܈l°…nØX„²¶m,­úµjúŸ,ÈOL( œ-⦲"Tb+3¡Ì¹©Ù‹Òåùõ[1ñ–ue|›zý²pK®3£bBHãtêJ®<{BkÆ>Ðü™äM7Ñz³©3ÐMý€–³NÖ,ë‹ê ˆ¢u¸¹)tµ‹Oo¯ f#]LÌ k™”«âùªÃZ àÚŽz6Ëš …Q”T,BY¶É%}’7ñ€M'sEb@$U-ÂwÀ6¬à‹dQTÖ†Ö,¦øC^ZKÏγ,³ô¨©Êf*)7r*W‰%$’lŠnÞEËÝÒÙ4,‰Ò) Ëa}¬®377ÇN dèбf¢È ÇH–1eWnÉk¯5³“LÖ nê]¹9ÖÙä¢i«¬ÑcÙ4qKš­‚[Ùhµ¿é\Åòã© o’Y2 gñÒÈød+w™—žké€Èk°¢c¿aÝBB†Î¢ 0±HúdÂI–Íši*(Á0’†‘¨Œy¡ë4ŠPIEywÆ()áXÍ@n¬„.Ϩ×öZzÐÒª(¨©\ï ?P:ï¶®L,†‰4 u~^'®ÏÄSè2ÇÙóØ· ã;Lg£ý‹T¬>²ÿ~vB ûöí£ùË4ÈÒ•,QJ —¤\¯•=]—åÕƒ²ÑkUX‡¶cÌ,—…×HÿµÌ>Ë 3Æœ»³1¡´n! ù3zœæd2ÿÊÒökýnd’[ÂÏ&953«(Õ×wjz&µäêéÌ‹ÖàrìØ1> > AÊß‹¡ [~’EÁÓfüEP͸´Ï*WŸnlضHQaC+ð!·ü¼±¥Ä“‰–ë/»CN¨a2´ÞŒJ,'IÈd™PÂßM蘆ÍDØQPš ã2M4L |næx*¿óýgnnn@Ô‚hÀP¿D+£4ÊA'ƒ8ÒâR@š—ÈŽ­È˜>u[¬ ~åSY¹ïZÍŽ•½¥'–š ?+‘ʹnä-EÓh6ÒI¬äZªš¥ÕQîŸnŽA ³„+m³Y¸6q=¹P`é5ÒAšðM D J%xknÉß³"Ôs“—g4¦š I!ÞU>7“Ûli¼yI¹d JL:ZËŠí6ÏC/…–ˆAq~ÂÉ/eÝ—›Ù]™­fè?»Um„A“+–^#$¨Ef••19d¡r¹šFn9€ÜUÀ¹’±Þô*.ƒ ã—Óf"o–¶Yåe¦M¯3K²]¬3šÊ“:×­dxÊŽKeW²âà%¯•¾µ6ŸËX;cµEêX•GrÇ &j³‡uGå–w)z(îE}žûh:u­ÜÏIï;³7]å#[Mç·ÓÏ+;ŠhKÅ„3H·´.ZµE0Î]YÆGQ&§–G&R—C:”žDMÈávš 3[ג艤’V&|ÑÌÅ5`¡ÑN©å8ÉŸælÁlÎøA-2ª,ÝÕ×ÕqVX¼þÓ-žÒ™èö’Ïwî(ÉïCû_Iê\Ãå;´oX©Î*¯U4|÷L¨ÜÆÎ#ë`ç/ÙÏ+;ŠØÂxÀ £\É©À»gl‘í¥¸iñª(BÏ^ü¤gwlÉÉÎc¥N7óXÈÆš'–Phé²Ë¼LñÉ UQ¬Zbi¬  €IðHÔ„ðZ{Æ<À‰()R_#–¢mæ$‹]õ –[kLZdޤƒ“%¹uÂŠŠ‡•_wÉ£Š~X´ÿ°dçò£úøèÁ<Ö²zleßæ]õóÀ>!")%<‰ N¼[â(ƒ“gÏ­· 7¥žìç%yÿ$‹„žÝ±(ˆ£8ÎLé3ç&?4Í6¹þ€4ã»™™3îMIÈ$‰q­")•82ÞQmÏÅwfœÖÍ"/}”¥R×eVÊöîfi*úô¯±9p÷6ûåzê¬ôºCäðdýÇj³’NÑ÷¢KOqZ9óIÑ^«À )-liGm~¹Õ7\K(S±‘3Лƒ8Ñ*£sV|‡•¨Âzaâ,´ ˜©2‰A—,ò¯dé5Y}ã*šžÞï¦>䪑w+ijª^²ƒX¹^VwzÏû6ŸÌز>ýK~,çCo5=’zæzê Læ–}±Í’î¬6Ÿþ Œ’Ërvãaénl§óWö —ìçܨamÒ•$ÉE<ŸSý=ž…7“†‰›ÌxÍzžà5·ÊɧÖO‰kÐó2™Ÿ’Xó‚Bw¢Fùf^xâÖá¿«¢õZ;äÆõev{Oºs«ðü8à¡ ²þI/BŒ¦ç»ÙÝ}÷¢KÚU+±±rKÝ34kˆ¬«Ž¸Â.Àg=¥–Meê­UÀi´›ÔllÉDo$½…xºLÛÌd’—þ'Œ° ?ôüÐ󽬱ây0ÍfÙ¢ßò<ÀCÓóõ¿ÖðñžœÝâ=0ÿ™}Rái¥ÒSiEEÓó+qaIâ\»Ð2°¬e^]ñ º¢Å1ƒ<ŠñѬX­—5}ÕfçS®=Åɦ [^µÜaº|™­¬­]ò¯Ñ!al,· –µëY´$ùak‡Ô¼»32K²Ä9éf]ò0ì¢CF½¬ÂEeˆÝ 6kZÎMò¤ÃUŠ’}tR±.KKæÏÅéÔ×Ó .Z~TÑ»+¾VÇÊ~=—?²ß Ž"E^A™×Iò0e»k]eî*ëWDQ9+±‰gŸU~fÃo3ó«»ìß¿ŸP¾}ûø€ø€löV «V¦Ö˜nB Œ¤E¹©ó¬³å*_b¯´¢'¤¸‰>•§[²DÕéÈ”/AAlŠ+¡h['®FrBäÍ·… ?®FØ‹p&©Â¬ƒ;‚Z„zÆ? Døô}xÓŸŸÃÿ<Þª7üö ‹¿ßûIß+Öó øéj6ü&ŒÙÑÒ˜zš¯È*âš\%æ—Œ®i¢¯n²ʘn¿[…®Óa ,m¯èö…8Zr•¼h$:›º"§ià@Ë»¸7­! @Œ¼d•tk#æÿ‡’K…_tïT,~狹¹¹Q > @ýºέ/lÛ ?nÕïÅXEÃq¶$cN |88•M,µÓí´ÖZ%ºÒ°çÕ¬˜rý–Y‰dciR 4M>öF8¼k殼F²RMŒÈ¸ HlV®"³Vz†Ñ턲* Ùù$+¯«%c²I¯¶N¨c¸ÝKäšS(vîIh¢®Ýevª‘ä¶@vÅ•^)å”3N±* £•*M°.ËÖ}Ww“·”çÓT?Aq˜ ‹B–'W²pªÈ(ÑÛ­¤´a£¬(T‘:º)Ï]É,:\«…Å0ëNL܆yg(*jl]B'Z4—döºCÜ**ÒVê[´²F•„ej–ö æ¦;[}·•¥JÃ`$›ÉÍ×›¶-YôY?/k7kcÑS.?jÉS ½@«ìÀ í ÚÉ–›Û²ur½[Vp¹.EN07Á¹aX$ZÉ‚ÜZ&’¶Ã—»ÏDvH^% YL }ÕÒü‡Ù[H‚*+¥nè Z³tÆ>kǺZž¥ .t$·æ*Ë7\˜èž//`¡ŸTîÆ•µä©.äç²âä4ä·¿Nq¤sàZÁ~VÞ#}ËÔ(¹\îpŸZ{5»ÌG‘e†VvÝ´ÎH5“®Ð½´Ñ #N:q”ìoNhùñLr É´kºËô’Nã«isʸÛQâåÙXíÿ˜-ùùïþî+wÀ*+SçªïA#u­°œæ = þöZ“¢62ëj‘Wä¾’;ÐN[#*×±DÙ9'˰+’=kñ2òêÿšûm:®ÎŒ…×ÈLæ%“XÉÆÄ“ü¹Æž³›Ô€DdÄUÀ„NGaÝO¢"»š ×–õ t•fÁ Œ‰¼2++)B:õ“bÉnç t`…¶Ÿ¬Ä:ƒQ‘¸V”°|Œ¹K}s 9Ö›Qв·¬ (NÞ'¿”ëå“$„VÈ»º ³±½2¡ðÖ-T“Ò‘aÃ7ÁîF®ÜW¨XºÖNQ]ƒ\É)R¦rWáPø {Y`¥ÍŠ\ôõñ'E÷¼‚¤÷V\Mb tuÇrß]‰2•W~r-KHô>fŽJ¿e¥ÜÕy›`eÈ&ðµ¤×òpJVÀÄÈkøzúMiö—¹(I~(‹¯‡a-ã'4+²M˜»„Ñ»NË•+Öjj‡ë¯bû߯Á¯G'mëv#{P@r ‹­²\Ì0êÕ“ùO­gÒ`͸o2á"o2&7rÝU¯+ªšci©ä{e2‰¼ 8áòVšv¨Z!¢I®~È&Ç®hŒ±¨Ì*« 5៊‚#‰ † ß«gÂâãjr#‰/Q½èŒb-÷‡-Š ¶3¾·c ‚\õìw±¥ßüNH÷±UWÉ­!Rd”ÔÐrýu®ù%ÖŒkétì–'í17ÜÃÒ3±É¼†-™ºúºR… ÙŠ$ÆÒòêj­5Å{ó%3“qÌ¢Æ IDATÞ¾Vï«d´mç§î°ùÎõŽv¯å®Û!gIõއâ´dIÜ´~m12ìÊ,Î’ °ŠÖÛê·$JÐ’ Å 6|‰nùÑÿºÖž“;Je‚ŸÐ*bbén\ƒ˜˜FÕ’(Á½À^à'“ÔM:ÈP'Âr’ŽÍc­Àã^%¶WÉ\4û+°q—5±Ïžu;ÐP`M\éJ¹ñåRÿI×Û-¤¢uÁEE~ÅÎÓáãn"ykÐ×v¡›l©H€á»:PhD†u_ª8UóÀ4ðaà@Úl½97Òì`<‡åf¬ÍocÉÆ%w(ù®æ}¡–ì¥\ºÍ–tä!æ³XÁ§·gêàÆµú€3ÔÕHWo1³YázªÆ*2âNwe–L5–0ûZ'4áh¶kºR ÊÏÚLõµïê™[ ËRY×™<°á›@vwù°+{Ú;Ô¢.F·—xÌ!d¨ƒnvZkÄwÝwÈ á+)DUoÞÝÙ¨¦øñÌìšÉÿÖ3r•[Æ~É9!ˈ,¹)KcôDWbØ©i3ãQÔ¦§H"Hø†ˆŸWÒ]Å¢/‚2ìõzä-*“XrNw©Snx¡,c2þ4b§ÙžkĘÍtš¸ÜN0žFtCºDk–Ë\N‹™ñŽJSå̲~K‚Gܲa½P,æ^"„¬+wàv-¡viåÎܘ%JE"áF–KzY;'J>ר’éîÌ™•0Ém³5‘æ:9ݹ7#cÖ\T®Y¦³ÚËô›$Á*õ±ºÎÜÜ;ˆ¬õÊ5›Š¬%w7ô“P¤Dd‰ù%©iÍá&0·¾°ÖB‘ËÔ’ÔJ­™­¨»ÐRk¤I+ÒK˜y2kRjIýÎ-[ bõV¹å"Ã…•õ¼hipQ ×¼@6üÁ’KlôhnB-Ì»º8¤..lÅMX¯u~?)G¢4ÕB¨øë¾Ü~†Y—p«…Y Ó²›P‘6V?Ù¿?;¡„}ûöññ  ]¥e ýK2¾#¯º•6¶ÜbÈFå¹±yyš‘ª…)ª!©µÐŠ Ñº˜äž˜¬ÆXÖ˜Õ?nedó%êfç¦Ù•ý©Xüý>°ô½b=Ѐ? ~6ü8/ºÝB['(X_ìXÅ‹&ºZ³GQ\Ô’,{ȹ¯£éhm®áå6Ϩ]ªmõT-M“E52©ÙµäéÚ'¯²z&'JžŠÅïüà0777 jÁ4à¨÷$ƒlȫШ÷ÑÙ†$Æ/žN3D”{ºJÞ ~³5?ä8ý²E@².;£%’0×jpn†\¯5³´´ã1÷ö+År%:šÛB{}[¶øä’Œð›I!Eñ[®ÞÊæ‡¬ã.I¡[+[}'Ð<·ªHŽˆ¶Ì/}©?’1ªêö%hеltÂÝË|lGW*ÅQ!¹E¼D®ÚY@FÅ"„”˜ püuå…€õú$w.*>¢ËqåHTÍ ÇÈ,6Édõ©ÜE»ÆÇX"0îj3Wµ®¸ é­›2áûr”;eå Ø’Џ´W‹‚Û链÷’•j¤¤¸sÑQåÕŸ¹$ôÐ= ö{u­> a±±ŠÌc-ËÑ7ì%V¿†ýþã}p~R ;ÅH_œÜaW4Cê ç L®ueEÆë%bV®(P3CZDK$Ç2€,ë°dâM+IÆ“ðÑ3­ÖÖJ²"sª(è¿»Šeùú–k £\ Èd: é –?Í ÇŽá\hrGdÜ¡È#çžP˃5 Ë¿VÆÁ˵«rsêºV(È¥ïB:§¨lJîÕuçä–¸ì‘ÕŽE²,-K †Ë«3ì¦íšã¹?)rPß‘H?K·Ü)ýgQ%*w嬾Åb+Ivnþ"^^¹a}-í”Óç±v³ÚlÕ¹wm,ë-×3iÝ‘ëBA¼bû…»:<%ß7¡_¸{ÒèlÏÃY‡TäªÍ=ªýd•hÉ^åêq-1³r½U¹¯e‘¯k©äºUB÷²@Œ\‡žn•USÊÒN‰qÓO%BÔžŽltã>r}zn¸|ÑïiXû)šÐÎ âÜÉ€e½Îýþ õ—ªhpŠ&=¯lÆ'5P-Yrãš@ƒ‰I‚·r¹Êë9™­ì±îÂ^äŹN°Ü:¼®Xå²¼FÔløå-l6|ä©BQ"Ú •ÿ×\Kê`¹Í¶Ò´Ëkí5ÍMíØ™võ”Þb½‚tqB† ɨGÞÜX/i²¼[nJ¤v®[bl¹ ÚZÒu§ô²ª¢`Å\›IgÂ5ÆŸ®Q"V£›‡P.§#Jôî}É…älEÆYO‹þ BÈÐ!qê%2ÔæFºëàòÜÐ ËÜYRÀ,ûÆcižH)Jky¤ét³«†µüÈi̸ÕLrÛ,QïnêxK±KNÛ;ÅÂÇB.4Ä @½§åþj…`ÜÜŭ؄ܲX‚vëYº…ÒõIº¾‰ŽwЪÖ ‘y&™yu)ºÑ6¯‘o ZöŸÕ ×jÔ­Mo³äåø°ÔT›€®¬öy=!„ 23[V¨BQ™ ]Y±HäÏÜêõVå­ÜIké•ûV®=' ÓëEÂéŠ b ‹Š§¸XÆŸ­£@û–‹B2µ4à;løøpZ/Ê òÎM£‡¼´¶î^”É•ɨ¦µLJ×ùµj| ¿ž›3× ùÓ§CJbßÛ‰A/ýnÑ/€"–ö å£ë ]wœ›}cØW‰•w‘¾eÙ§ýƒyS=ûÀtûKz{HÜÚ ‰¹¨Eñnà€‰>(O‹bÖµ Q;úôŒŽ8ÍŒVŽ¥VÚ$4WÓœL–:†­xqíÓ»™KX ¡P°²¸¨FeØð­ÌUÈ îw½‹Öí ‘QÙI«÷«€»‘Þi!˰¯–ì¢òªÐKnìûh¾Vó{-ÙÛCúàÖ É ¾8XW¶VµKñêòÁlº×õži…eUZ$ôœ–^•[XÄ5r³"™cÃF~ G*l5Û¨ÿ•˜u½ÀÙHtçírªÜÒ'°±J¾oÖ ý+Ï$k—íÖëv~vû¨Œ·ùÓµ›ê%kx²nÍýÈ•o§ñAVƒIÿÎäWÖУR°«„™Â!ØšgÒqnÉ=mfù$-%ȵo¬Æ:šUSÉ]Ô#X‚Úȭɽ[ ‘1Ô"c³¢`rνØXKþvå™ñ]õƒóÛЕ«6›W~S¤³î2ëO]¼Æ•«åÚ1„”#uƒj$)ûr#³ÍEË›r3A)™\ÔýÝ˹5·r(´q#¶‘¾—°ž&$´nMª5ºþC+¡9¢eL/"v ¯%›½BÅÊ­±4¤6æäjëý턬F®Â†/!ÆŸ–» ØL‰óP‡}[öYQj¾ò(ALaô,×=h9Œ>ÉÉ?S ‹ ›P‡lˆ锾îuÅ ´ÂI\)Šk@i½•vžË²ç±r‡‰¢šm !¿¤K ~ÀÈ ‰;θˬ5LVR ó®$¥uU'wšÇôÅÊy0ÙÍu¨žD Z¥OŠŒ6'Ó¶àÎ(¨EZY͵´J¹ÕL,M-/o¯}žnØ¡éLÙÓÊóÛu¯`‘ûe¹¿š{ÐÁ_åƒoþêOÅj$‡uÈ Ð†”®õž»Žª ?¸3Âm‰$j… o-{µ¥àÔ¡G¶ä•¸ ád=·JAJ£áïIÒõub‰"±ÌA¢¯bå˜wÕ(×´LO+Í|×kˆ~_ ru¡KÞì°t-ÂA—ä£Dg˜Õ#rP‹p5ðãÛpºÔ’™k“¥ÚËULË j0F’œ!7ÖNúòZŸ*¨F^˜‡U&Øu-&ºX³gìĈ,ZA¬(,mÎ-iét›t K“™úÖÓàí|ë¬={¿Æ«¼%}l^iÿÖ†ñ~¥Í¹Áƒ|GK¶mm?¸Ágqáéä…<`XP¥£Éÿ~ ø5, ¿–³Û¢:ÉbëÅ1uÎ…¼åÜÖ8Þ‹ÚùXÞS%wôké½»m(y¼K,¹OÇ«(î¼hKûï¶óíêì7pYS÷½‘®ËzËÚ8P÷²šÛÊmùÆázpk –LX˜ — +œ’$]‚ý©X„tÞL¡CŒt–}ûö1—?‹n‰;*éô‰óB¨XÃ}â|@„*Ö CŸ8!¤ƒ°¢#!„á´±&''Ù)„B†@±öïßÏN!„20l)T¬}ûö±{!„ “““ïúà…Š…þ9Íø ¸%§%ÃØ¼¢÷%ˆÜüð¾ŠÊ/Å…ÐæAk’5Öæ~ÝfnnNÌ»þ†o NK†±yå î±?99)]4°}5”_Š ¡ÍƒÖ$ݱ‚„B†*!„*!„BÅ"„r¡±ò,M¹•|1é´u5diO/Û6Pu›†¨Gn¿±ÖšüXÝ“åçpe½Ññ~[Ãϯ_Íã °&;“\Èðs8Ä6–ülŸšš*2­´Öñ‡{r·–±% î’”Øvº©E–_ÇÕ¥è1¹Ý¢Û ·[¯{ðdÝŽ-jvg/í: Ê?fËí´|ò—õ˜úõõl¿=]zÜí| –üÔõ¬µ%_‡Ü×ýýª–_±S]´’y,¹XÑU¥Mnov°ôÉs?í7¸Û&N7úaeIËXnÛÌø«ÇâÜ~îÞɯŠÜ“—¿»š¾’›jçc¶¬NëÍ'¿ýÇÔǯçrÛÓ¥¯Lù· |0)om_¾é+èón|UÛ¹âê»h­E^ôR“rŸÖ²Žê‹ûnA1tO°«m 'ª5.¸O¶èݾ<ÊÕ7£K÷ÒÎi—{Ý.õù²FŒò^}lWߌ±nµ†ñäk¸©¹öÖîüAþų⑫e]ò ÅC쪬íÏó²>-C4Ü é—@Fã:(ÿL æ Xäöa}ÍÿoUɤl;—¡BW´ói®ÎéÁ@н±À=ùÀþ´ÔMµ&<†4¢¯KO¶/hXüåí\Áéñ×s¸>ÏƒÓøöG ¹‹Þ[Wí<úÕwéHWû·]–{rýD—|äݸÙÜÓöË0_n7¶oiõàŽú(áS-–ü˜õ¥…í7©üáöñë™{Å>öê “üRÈgµ+®þÛ=¶šÆY¯s7öÌðt›‘ûÅèA{Úé‡ÞôUùUVönZÛûOWù'ª|c/;jeí,os¿Ù—¶y¡N}Yúò]îãÀÒNÃVÙ*fi"„¥=Zd bBˆm ¦3ŸŒ± !Ä-2€]J‹BÈp@Å"„2ä{çææúئþ^}0[2ŒÍs™œœd_±‘ìÃÁoóÀv£wÓžw¼ýï~ô™ã§O,Ü0ytß¾}”qB!ò3÷]¼cbÓԑǾÿËô BÆr5­#§>vìºàêÒi;Õ°atJÃz»tx? l9o‡·Ó©ÛYB±r÷[.sssâ`\ýÙº}ÚÎ6l¸<«“““Ò“Õ¥Ãûa`Ëy;¼ÎÞŽ@¯ !„ညE!„ŠE!„P±!„\h¬Ù¼‚+Èbi%lÖ……:’+÷T+nç’‡ iËÝJNCÔçìyöùŠ?çÃ{;¹-_c·³Ê¯ m,»û„¡¾—!-— Ÿ†§’}Éïöy?çC};nËרí¬þk²6m,鎒¬%ûK_»çéªý·‚_XåE]{f¹v¶å½´¹;Õr÷ó3\-Æ>_òsÞÙ;íˇØ¿¹‡¬æk26VÇm«pí’¿S–,[ÜY¹*ùѱ¬_X½€zÖòÎÞû¼¤å]*5¼}ÞßÛ)z|:kÙÆdVüh»ú ¨–wüÖzÓòÎâ=k¹~Ë —¹‹þ~ÎeTíÔéÙíä>ˆ!ýFä>ˆU~ÀÆVö9@G§ôç—ƒ{?Ý+²Ê¹ƒÌoDGÄêÇÈr/ßÙÀ}ªawè×Ga-µ|À¿œå}>ÕÂý5ÆOËØòŽÜÎP#ºñ5Yû±‚ú¬÷ý<îl_¿ÌlyIËÝswB°Ï‡qiÿvzâÛ¯§³ú¯É@(V7¬+éG=a¸‚,úZ²¿JvîøämÑµÚ om³yݘ§ívË»¹Ð›>ïà]ô²åíö¾·÷vÖØ7¢_® &„2P±!„P±!„*!„*!„2ˆäÇ ÎÍÍuð=[·O»z&''‡ôÓ0°]Ê–³å¼ ùvï¦=ïxû;ßýè3ÇOŸX¸aòè¾}û(ã„BÄx×ï˜Ø4u䱃‡ïÿòØš±!„¬mlÅÚ¿?;…BÈÀ°¥P±ÞûÞ÷²{!„ ïúàò𱂄B†*!„*!„BÅ"„BÅ"„B¨X„B‹B‹B¡bB!T,B!T,B!„ŠE!„P±!„P±!„*!„BÅ"„BÅ"„B¨X„B¨X„B‹B¡bB¡bB!T,B!„ŠE!„ŠE!„P±!„*!„*!„BÅ"„B¨X„B¨X„B‹B‹B¡bB!T,B!T,B!„ŠE!„P±!„P±!„*!„BÅ"„BÅ"„B¨X„B‹B‹B¡bB¡bB!T,B!„ŠE!„ŠE!„P±!„*!„*!„BÅ"„B¨X„B¨X„B‹B¡bB¡bB!T,B!T,B!„ŠE!„P±!„P±!„*!„BÅ"„BÅ"„B¨X„B‹B‹B¡bB!T,B!T,B!„ŠE!„ŠE!„P±!„*!„*!„BÅ"„B¨X„B¨X„B‹B¡bB¡bB!T,B!„ŠE!„ŠE!„P±!„P±!„*!„BÅ"„BÅ"„B¨X„B‹B‹B¡bB!T,B!T,B!„ŠE!„P±!„P±!„*!„*!„BÅ"„B¨X„B¨X„B‹B¡bB¡bB!T,B!„ŠE!„ŠE!„P±!„*!„*!„BÅ"„BÅ"„B¨X„B‹B‹B¡bB!T,B!T,B!„ŠE!„P±!„P±!„*!„BÅ"„BÅ"„B¨X„B‹B‹B¡bB¡bB!T,B!„ŠE!„ŠE!„P±!„*!„*!„BÅ"„B¨X„B¨X„B‹B¡bB¡bB!T,B!T,B!„ŠE!„P±!„P±!„*!„BÅ"„BÅ"„B¨X„B‹B‹B¡b‘ ‘Ð <Ïó<ïó’{¼Ð d»çyòÚ¼Ðÿºû`ý¯u6³EÞÂžäŠøH²§u9Ýidî¥5Øãá#v›±ÇÃûòo'·yîUä_½Oî ÊFÙYnD÷?„ŠEH»T5áë¾Ùâ5PATAÀ¼%¯Í óoPôy‚jë< ¿ ßk$§’«˜3ÄÕäÙ9¨Fq^^==ÜœSß)€¸Š "Ór½Ñ\Åì, ÓH{d7Ù9˜0°áK×Å5˜¾â'P±iK‡ôvk£µƒ×€‘³§Ñ3ÜËžF¢D‚j$£¶Ù9œI®T£°îµ3'4š×rž ŵ´ÍA-’–ˆ´àD;ãO%í ¾–O#"ØMøÁldé\Ú°×€ÖQKõå?ÙÇ(œiª7“(e<Û’Ãùœ.%„ŠEH[6–îeè· mpÈ‹ÄNª¦úd†u}`ØðåœF®Œü‹G†ì°ák#&¨&VŽ1ÝÄ& ë©™eþ½½‘ÓVyoNÍ)m™‰üˆÄíÔ7ÔR’=õ WûÅn“KÈŸF°½X &„ŠEÈJKÂ'q¾±±Œ3ýõ8®uBFç iõÒgGœ8åââZ*?–ž™-cN´PDÂõjš£Ìk£š®åÔ¢&|c™³É]ˆÃÓ´AÚ/––õkÀxÿÌuµLêŽ%„ŠEH[ˆ®èTÆtmiYSSzOk&É ÐòZ®âÕéœ6GŸý-e¦¬¼z* "¥âmÃt:î£9æ¢Mø^=Ñ6³¿¹ŠÜ#½‚„ŠEÈ2pgªÄޱ,'=ã¥ýlbi “ù*±'Óª%A-1;‚Zdæx Œf‚JÏ$ÅÕd#¦½jQXO•Òk¤†W%1JL¢TäÔ]ï¢ÌœÙÂ\ÏÑuks”DOè¹4³Qô)1­jémº!T,B–¶±¬2(kMÒÎ@‹%‚Nøzà6c·ØjÉ>ó¨ ëÉLQŽTZgÐv›Ñ6#QaÝg|Ñ-2û•¼5ŸÊ§Žã°lÁ\ož–j³ƒ¶Æ´¿Qv“sÍP­‘„P±錱¥Çtí…Ëudɼ—ŽkHã)öf\j¢ Úþe2£yâC›†W‡vÊYη …3’£C¡ƒaÃkdËœ*Ù:c>ja¶ºBÔQß‹ØbMZŠnõ°6I­KBÅ"¤]KË5¶´Å £ædg%⮂(žMÆtYe­pÒ'Ñf,¡°á‡õTi̩̬RÆÞ²$A„M4É«Ãk{ÓÛ=3ûXÞ?¯cë%^­ mc™?­ˆ ¹5é(m†¶*!+3­ômÍlYQmzË,KæufüàÎd]°˜:Â۲䴳.U¯ºï5`¦»ðÕ{ÓàÀDö¦a–åêÕ¾ÆØ2vž(k8ãk_¢UÊÐq£õÎ"·æO‚¡÷kéž®cP_Q„œ*!˳®äEºö¨½Q¯+r×z"<·f– dz©Ï …×qóf° 剼Í€i„oöõ±&¢O,­d,'¢-<ËJ¼y5X†£6§´))/,ÕÑ÷’;M%÷¢¿dÚ4?}„ŠEÈ*Œ- ް,0ù37“;|‹̘8â1‡˜N°d|}ñ,Ü AÇÝîV}-õÈIÔ¸ ²H/Z[Z¤£§ž¹}m ™åÃPK›‘Ÿ×Fª{ËДI>ÓfZB¨X„,ÃÒ2Æí¦ Ëh™&©õ£,*ãµK¤kaÃÇtÆ)kªÂ†Îø©¿n/‚;“\|q&U„‰h—õ¼’AÃèY€×ÒDz’Ild£ó-ÊͲh®(k™µ[OŸßý)`9%ÄšE#dpcÁ4­Òœy.;ä-ɲ× ¼æTðêh¶bÓe+‰D¯E^=Ù&Wì!Å@ ~\ÂÂzgŸÈX#Škðꑘb­æeZ€¢sJ IDAT›lT~Ks¬%0q ˜š ¿üfó(ûÙÂúÀ ¡ ¡žî , ¡EÈ2¬+Ë£¥`Ö´;K¤]^®‡:CàIŒ_¶^OLIëÖýÄC2Çc¼j:Ç eÿsJò3µ©:3Szó™<‡V¬`n']N»R“LöuXöåŠP±Y‰•fÝn-²èY¦Xî`­Ã,Ϙ±‡âðdf4wãé9•¸ç•+rÚ΄dÖlIK$?“¾ºµšJ¿ÖkE½J èÜóíüÈ]†¥…Ùy>B¨X„,ÃÌJ+ZÕsÏêÛÄ5È´ž”’ V»Ybeæ¢ÒB!Õ(5žjQ*WóðÀ4$nЬ&Î䂚N²=é)"+¨ÝuÐiuMLÉh½¥§¸DÞ,U¶²»Jï¶!7;!T,B–@{ÿ „ 1H2ÀÖÓAß-½¨_‹˜‰´h§¢ sz ³É‚ßd>¬žžSòϬ'Ú–›¢ÂòìÁ™‡³b“§áº@ųûZ6b][Òd£6þ$š‘6¡b²<«¤–®eèü–m‘kv˜qÙ.!µ€¡ÓR´*CJí(“—uW Ò„½ÀÀF`ñldhvj¥Ù4DVÝÂöéöºouDË#j”rI/Ï“ åŸ$„ŠEH[h[J„ *BAŠJ&uI˜&A¯¥áãIðzkù”qýɘ,{Òž=QG76Oç÷³$VB&a/ð8pÞ 0`¶Uø¸ž žQ²’´ôrB7VÐ$BÔ.J´Þ’(qCûµåJ¯ ¡b² t\¦O—Ç•,±¢g: ^—c\CØð±A-2¥°d€–\zVÌ2PÜpã{DÖÃfTÁÄ\xuàðÀnÄ5`:Ñ-ìU©+î„™+IôžpõLŒ‰Nle»G^žx³³èÙÿßÞÙ„Ê–fezE‘D\ )²ÆIMì‰ÅFÔ‘Xtà$¥G•ƒ ZHÄIˆBœŠ5 8δèI ®àÄ;рꮒ 6Êq$¨$5È¢±Aèæv°¾XûÝk}{Ÿˆ“çêó$çgÇŽ½#oî÷®ï{×»Ôà~‰Åx¤ØŠ¶ªvò'{¬õ¥Ç´.â­c$„WNVÛì÷͸+xQZ­ÄÛÓæ®%¯ëÂcz ë ©âçÍ~`Ã÷k{ßìU3ãyW–_›O$jÜqMžŸ¤‡ùËÇi[÷-!Ðõirªw'yºUæBXó&â MDr2¥åqìÛ@MERÁhòùÁɾòËö毘äÎ‰Š†Öîlm?Øp6b¤ŒÝ:⤺Ó‚asÃÝixßÌÌ«]ðƒ­W‡Qº†ó^f¿€á¥Ù?ýµ}éÏÍ~ßþj\fLºøÂN¶7 cýM NT#Æñ°¶Ãø¦u‚euú… üj,€Kk¬ýX¦¤ÂBMnaôö¡1ºj{E­Hºãˆ|Ipóò´Ùµ¬?è˜c[0ü.wïZ™<ÊØûf_³˜ÊèE“v`½Ùqxã{feöð«öG½zdž»ö¾Ú¶Ï£ò¥N›úÚ­´ÛÔ_KÃ:*ÅxíüMF1åQNnrÌùD½öã£Ù;ÖömóøA›îW¥‹q?ºw€-Ø,¶‘v'{Ëì;bô°Ñgag«z$ÍÛy‡lµ7{ÏŽ?´>¾ÓúcqlP™¸ uNqW‡TMuC‹ü@@±>t¡Ê•¶O©Bø³û¸_ÛÛv<¬7ßç û>VD(…Õb³=m¾{²³÷­mkmO! i¼–zåãÝ[ų;ç$í¤JóN¬·ÌÞ²áÿ·¦+ß?ÛlOÃߌ‚q¿¾]ºh’¬B3âï²%¢ë~°Ie­·¶ ðÜ` ž#›mÛˆZNÃÝ)Ô"…ûù"X³£KÎízsw²WÑæa}»Óq¿Þ¼<Ù÷ÍÞ·‡ÃÚìtüò¤ó·=Ðý]n̦³ýª^Øi8¿Ä¿µ½=˜yhá ;™n½oö5³?1{ÓìwÌþÞ<~óëmò`fçwv¶ÚŸ†YGyÞRº±Õ¾(ô¡Ði÷­²*?q çÛ<Åß6ÛóPc\ŽF0¬nóà]B.ö¶Muc›í©7÷f÷6ìl¸³Íöd÷¶~ľò[öõ·éfUäò…G1Âmuhuh¹ÚÏÇÄÊñ6Þ53³ï˜ý˜Ù½ÙÿmB¨E›nùš¡_³Ú#cW¯©ÎnRWEâ¢fþ¦Ï3 ôiê ±L€b|´2k×L€š ¨F¾4°=‘Âñª= W{;Þ®íÆÇy|Ãì¿›½ë™Ib;\N÷i±¢ýHX·ËB"Veö5³ÿbæ¦Á7ϵÔaláÒÞ¬¶6¸_wU<„MuÈ»ªã˜°dÁ°^W–’º³P,€‹ðaŒiÖ{z»ƒ<žÅ) ÃuË7™Z@û/™Ù™ý…ÙÛû¦%T;í}'ÊOÝíš[XÝ52ª%ðÞÙêÖì×ÍþÕìÞV_6ûAÛÜŠ15Í{û”_p­ÛRó¯6k|jdV’¿Ñ¦Û1IG XWà¡J¾3¤ã?ô¿:ïý¤§sk×=gdxE²ÙžìKŸ3ûmûÝ_³o|ÏÅ)Ù¢@±’a¡š±yyšKŽð‹Yšùðx»öÁãÏBø}³{;Þ®Û¬,IxjQûæ!Ô›MÁ†&”\b&9RÝrP]”êTly»f‘ž-8/à¹ÖX3¡K‚ZßxdßÙ,~jN„ýúÁZ'¬UØêÃa÷A,©Õäü·Z6é·Ã›Óo·£W~uné=Þ®í¼Yõ Å[ÿùh¸x8—Pj$©MTçŽã,Wæk§ç@÷á|¿*cÞÜug¬Î΋ó½—ÉÔX—  V1 Ä$ 6ÆsÄ3×Äž æïð G?Ö ; wÙСáO*œ9ôö›–Æb¹„híXÝYªá\Gu¢•w€¹ _ßNK+½­Ü¬áÅñ°Ö^æXMSZô3Œ¯½lã €b\$WÚu{h‘íue¬ÉÀ˱œŠ§móÝ©TÜO4Ì^u Âz ‹¹ª;ät>Î¥n½[{QSBTb4W:^«( £òœÜºý–æë%…ˆ¦ÔÊtc›Îz@±.®±¶“lÀ1?Pì›íɽïfç6,³ã~Î…(›lmo·=¤˜nlÅþg½n\5jcVšáN0}ÄÁÞά#†]®Â¨ wo1VrûNf|¤ZŒç.ë™fã†>Å"jºw2/Ÿ²Æ*‚äÌv—Äq¿n ¹÷­„²éÐ0ˆûdE“9Å)™Pg*¦Fà¹X£¹!¿yÔÖ«IT‡MçkJaÄ êVÖ\I”ª1×*m|NžøT]¹"jÿrp$áŠp]åk€µQ·º·òB’œ4ÍÖ…ê<þc\ ¬Ñv^¬‹že}S5AÌõá&UH+i­Ò˯(Ë´ JmRé-ª¨D´nê°i*‡Ùd7+í Æz&5 XW×XUÂÑy¸ÍþwÓöŠ¢€ˆ¹Ž“S½ÊåQ2_´¦¨é2šÉGoöš0zæ²U]ªÌÆW½UVOU§aÅIBÛºcuÙ0Õ‘þjšF’¨˜¥‚»P,€§{Q±Á3ÙÚ gù¾¹ò’]"–È40præ]^7«qæú¦5?©.ß…ÿ—ø\~¢JK×o6{ZÌ©sRß½ãUÃv,¹Ò¾]\ªªièæ @±®CmßÑí4Nžv‡3"|áÉnçËb}Bs=R“w¼ÒÌ‘¹½+_m‹ê$.F«4¿ÔpF´:lwJÑS©t ÷ÛqM/n'¡K—Qê¯Ò-¨¿c³;u—aP,€+¤ËÎîA5j§ôtÿm4Ò¦›Ô}¬a²s³ ýq_U¡n€E1—n ‰ÓUÁ(û\ÀÂFŸ6½’‡Ð÷†­îV–w+×½¨¨®Â—?jØnrÀqß.‰–,@±®@óý´bЦ쩻ÉÃë:^+}v§ä<¬µÈ\Ñ]Zì¶ñÆJfE?—Të/Ñ 9€Ò.ænÈúñvÖý’¶År¥×R«s¼“šì7»™€b\A(S ¤¨_Ç¢V(“ïU_¸V9 ï5LÖÊþPmêŸÌ£3pÛé8Ö$\/ÃôhfvÓG¢—ôè”áÚì[k“ÍkÁ{¼‚€b\σ­½à—`L‚Ws]jïÕ¼¥Úd½&Ùx^w·²ª·bn!1 ‰GÆ%ëÍvÜ©Òlø(}ò5ßçeÏ´{g%_*ÝWMvײ5.C¿Å+(ÀÕlv'/8b‘Ð3d'ªp¶‹Tñl¶'÷ ›¤­›tnµÓ¾Ý¾õåP¿ßv^Úf{Z½cf6ÜM.#]U¥›O_KL à)¢åŽïÙh̹“d}õ,*­TÓ¸H¨/#µå¦‘"*cãá­%ÁSR ó+‰¢-Ä5%b2¤†šxùܲ¡ƒ"›Â}[ó¯:ñNÝN¯jЯåÔ‚Ô XK$Uð^«ØŠd£Õí¸¾×Öô$u)Ê—È"Jï’ÖÇêÆ4E>ubÍ „Ô· ›ŸIÎEéÚ–”IÓ=4•J}’it¤Ít%WqK¬×=<Š-@±® *]dÓÁ6]Uë>¦Óó·ÛóÛØheHÇÜÓ\ÃdUÃ<¦/=å/OÞ’e’o« ›v¶ZLÖ*ï-©Q꾊@¤FU’U˜k“uj¾@±.ª±¼•Uì©)¸öºÆÞ•Ö1݇xªñuˆÉ×ñWíë·Æ Q\½3ÉšŠÌCuɧDÁZNÅOÒ§1'ùµ¦ô=°9m£Æ àjôIíMWÞªÓâk/­ÚµkÔS ±µ2C$òcuΦSçkgqU{¶d¥ëoa©°™ý$ pÒ:/)w·”¬uädvÉ­üî”Ê/j,@±® :×_ØÉîmµoÓ:¼¤x]¬‹­£¤jšÑ§éôÜ})?O’®´@yñí°³ÕÞŽ‡µöT©hI47ËXw¹â™ak>7²Ma~5Þ²¯FÆúdÛ0û_göfÿÍþèwŽ_Ì©(ÀÇ ]š Û4f?qëéê\-¹jù¥ßFfR Õ5I/Ôñ%zmuNGMÔU»®Ž¦Ò­M9L²šR„|Ëθ1{ÕV7wÓ-¨û^Òà½Ùï~Ͼñ¡}»©ZtŒuç§ XÐͯþ@­™RHDm1ž[õÒ‘ŒVŒò¶>Þ.5çêLäÙ^«›,W “A´‰J›±Òmuá=ØÚÞ¶(°bwª³(úÊŽ·ëXn²2ÙÜP,€+êªn!¢‰šèR¼Pô!ùÀŽšÌ”d »òÖ½Œî©tcLgwÙÙ[¡¥¡j›.j™•ÜzUu(³«ŽŽeñÝ©*ÿfFÌßJ눠XO©±´qª»ÿ”~ž\y:½·ûï*ewžˆ-î“åÝ>‡ç¦åD×°î–íŽz=±sÛ{u£N—uùÔJômT¢ É(ÀãÌÇ­ †©É7mG¥“tl“T$«î]Ñj°›ôr-‹®ÙXîèzfdòÚy­Oï:Bu½ÌJ÷˜Œõñó.Í÷º X n8ÒzÍ÷«+Z)ž|¡ºªN¼zIÃ.ù˜«ÌªŠÄõ×E?-€|ƒJƒ£ÆEñú'Ãd$íúÇ埒æ†èè/-§Ì,f"c»€çÏ|ð ‘Hí«ÍîVúR>ì%η:#ª[ˆ$²éž“¾dAöªµ¡Ö~¿SÍÎ{uÓñ’m«ýðä-ÃvÐ ²ìÚ-X[·< fvs:î×ínIÂj,€+k,5VhýT;™¬·Bh‹yëüø…:¬:ú¼Þê& ¦z«N6éŠh7_ª®dFaútJLa6ñÙk²Æx Û6:òxhC#]®êÁ(À#eÖ°g‹¤vZ›7Ì)Óòä§Zl%!Ñc|˜ˆþ*m¶¥p©T„uU¶»Â©ý^&q‹i¤}iÞ¡Í×ê¡ë„«ƒmvm&rØèë¢%а„Êçû1š}§ °ÑN;·3—±ìÊKR‘į†ïuG™ÔßVsD²xè¬:%½ÐS-Bc¼¢ò.+Ù|÷´ù  êñ°ö‘]qyöÝH[K”/P,€K‰p[“ÙT©ÕWßݲ`a†–•õºZ~ikp*Œ4Ž=•qqQ v·…’žEM7’†L¶Å½Ýäv¢ÍK_ë•–¾l=Åo÷%óxXGuSÇŒ‰Ž€b\KÚÒÍ•å"&»±‹óhÖÂ^m®ŠƒU*lÎ+xXÇxßýw­öjvÔ˜;u7†&Ýv¦©T›Ý¹Oëm³·Í¾j«ÛñLHT®ÞM‰Müñ àRbo&Ä¡Ôõ—Gß’ÎÛ]¤¹¾à¹!¿Qç©}<éM¨ZÍ›÷­¸¹ZÐKÓЈÛTœ÷“øÕÞV³³oš½/[™»~H?ÀWù(À–?j»]Vu‡IUÍd¥Nœ«‡RËÔòU¹ê´—ÜŒ)·iþomÈÕ¿”ºTS£jµ§Ûx6³9yñ½ëè K®ýú.sk(Àºe3½Mõ`ý:Yøjö`}jwöÕÅß]sM:îÛ>Pš€ÕõÜ/Üã…7•DN7ºZa'Ûf1ëdŒÌØö/ ì¡m u à:æžõµlºäUú¬¯XsA…¾µãK]§{ü¼[ÄøÁ¾Vm×~^jèFšVì»\þv*f^ðéÐ/“ôßlÓO†ä @±®.°ºîZ ]Ò¤Õݹñ¥9‘¨Îòˆõ‹Á’éùÞ-ª""½îœ¥À¤zÍi#MwÂTµ|tK{QݲL—.cû-B°P,€§XËã/)°j8…¯ì%×_7#ô&â =W¢FohüD·(4Ù%ª#¬½Ádë3‡ ÄÊ”ÈGõ;ŸH\@±®.°ºAGÝÇîòvQªB´ái®ðJõêJäJØt¸p’%•—ø6Æ‘„¶iÆ’Äýå(©ú9Ä…¥·¨á i·,%ävÓP,€+D«;t±{d×Åž\ã5]¢«sêÊKƒê­óÒÈ’ÒW5ßWcx%ìœ=“쫊W™¬ŸÜÕyØŸr‰[ÅÈ}w{"íų8i•†ÆšL„êª$¤q'Ñ’¥«‚.<6Ø5æ- ú µ‹÷Õ¾¨äB…f}6íiëºKê°.ŽŠðt”Ôœh…×@sÍ»‹ê3[LÈu]S£éBß\F»ÌF™µu¤ÁŒ-?p? w*­Zºuåʤ§­–˜¹VÛ!W€b|4¹êÖ ©²’RáOêÕ~RµÌU!éçËŽ½*Ý 2™?2)ªöùÕÄ‘*]3Ô  »õ†¤ÌipýzaˆW¤I±$(ÀE«>…çf_YoJˆV-ÝSÍ#%cB"úQ?¼Ï§ªkƒîP_˜åŽ:ǤÒ§›òú)^µlå˜ËÅ@±–ª„º¹’ž°ª ê´© oáù«Kz¼žMóúª4껥qVU]Òõç)„¾–Js3!ªF»ï¼ªÛÇva€bäGpxùÔ PÖ’[Oܱ‹3·ÒåÎ-€âås³õïú¤þ@’bÓ5À®é©òã­7"YuHKϚήNê Y([P,€‹j,Ô¦¿ø§¦î+á¶Z*éñ.õÝmºS¥ÿ¨Âù¼yö1¾|wQz¤êéÔbnaØŠMgtYYÃTaî®@²•(ÀÕ5Ö\‰ãÏ÷¹øönfnÒ¼5(Á ŸIDATînMw™®+¥©ÊqÝŠõÀRÏÉÕ<ø1®p—ó24ÓOý÷Ý$*M¼ÕTŽZx-,Ц ªK’®P,€~5÷œUûxwKIc#l?8g¬ÓŠkSWêBitE1^âºUð"|v¹šéêMøà}}¯¥FÆ ¦d©W#‰IïÚ\9…\ŠpuUƒÆµzˆùÂ]éVWÉo%Éb¡Ô[ÕØR]œT¥êpaãM•&Š$¯Ãú»uUݳéHe+Ööz:ý²–tsïž’™°`Šð¢bHÏ_-ºy¯s“¨jç¬>¾£b[;OOÿêÝHÂÒÿº*h=ï¾Î¹¯5VúU]™Lw¤ÙóÝÊÒ P,€§ð`k‚µ™Õªî×Ñä[+•îò º/1’ąŦT÷JjÅ£aƒM/o›`§fµn+XÄÚŒ‘¤†wÍX€b<¡ÆòÀ¡´•ÕÝ šË•¨’Ö]U«/¯íɾë£Ö†Zšø5wÃÔç´v.×#c±ê¨šÓˆ“|/û~ûóBÏ¢(À55–‡ãݹyöX§QeÎùÝ=,¾žK)—Ñn²³<*žå|^]0¬ËwuΤŠSR)-1u§* ñ6“œµ*ògP,€+k¬ý.ÞÆP½´ÍöäÊ‘â‹:‚7Q·Å©ós£#Õï »>ÇýZ«“'µvßH¸[ v+˜²éÆ••6²Úf½±XZveŸˆ¨EF{ú›fg«Âܘ ¬8'Hñmwz}š¼Õ5£§Ö«ú«ôFzG.·6öV¹­Þ¹NçÎ_ý²raÆ#Šð8/ì´Ù†ïãamßçE¥r¤£g½XÛúŸKcª’ iLêW }Jis2Ð!9ç÷‹m°H «á£•вðèoçþ€b\Tc÷ëÕÁ6»Ópg›m±kNfT¢Òb œU3º‹bUD× 7éu÷‡Ü1¨ÂS—þ"«"Ég·yyn–J$W- YÈØ½®®„%A@±®# rö–Ù«q£¨LoŠ£·.iGm ÉóØ´5Jw°üùòÓ,RË£®ƒÃ_«.öd—o¶›õ7ªg=î\þuÙ0¥¼S`Šð‘hEÏíºݨ­ÁáKœÛNáUuÂz>ˆTEéó½{LwI× 8gtŒÁÁ>’QÑù q›Çý:½ïÜb©ƒð“ϵ`#Z€b\É»“çµëi©àÐæÚ›º“ «’é)ë¹ÓÛÕ™[]…7Qé½÷“Hx=OLk´ÒŽ–Ò“sDãTkáõèe X³ßi1EÇÃ:,¾žOí”÷z<¬cñ0ʈºJ6Í·ìT3…ëYwy0-<šMô)Nîë™:OD Õ²R¤‘¾õ}£ Lv’*EaóóVP,€+p­j!åûÉC¹*á¿ CAUî6OzèG•òà> µêÅÚc}2W´…8ùµm^ž6»“*k$ŒV6è·OûÉgu’øö5ºæËNòºý_òèOV¯Ûÿ%—œäê7x-îü?ÌŸ9Và5Å Å Å@±Å@±P,@±P, P, Å Å àyòÆÌϳãÓyæ|hö!Ÿÿ‘à£â;žxÏò¿Í0,)Vú5|\¬V«Ïðû1¾ûNuùKŽdU^P,€O‰Ïvëc|÷'œêò—,‰b5Š(ŠðTÞà#ø$X­Vþ…šßº?üÏy#µïêÑs¢XŸÈS>»ñu÷‡ÿ o$”éÑ7J°*ðñó2?è㺩ažv* àSªQ^ë»èFŸ2(rõø] Ã𙋊€\-ñ|îÅ@®^P,x=ÀÝðI•Yñµ×[ºôºT`Ýkþ$nä’s¢XŸÈƒþªŸ¿v÷òÑo¤žáÑs²*¯( X( XÏ‘Ñ+øù/üèÿùûÚo~‡ž ŸÿÂv+ýà9ÖXüó?ðYÀsf5 ÃOÿâWù à9ó—ú‡ÿê¸ïñвIEND®B`‚saods9/ds9/doc/user/binning/thread.xml000644 000765 000000 00000025306 11222161077 020230 0ustar00joyewheel000000 000000 binning June 2009 <long>Binning and Filtering FITS Event Files</long> Original version

      When an x-ray event file is loaded, ds9 makes a virtual image for display by binning on one or more axes. This threads describes how to adjust the binning and buffer sizes. Interactive data filtering is described, as well as binning in three dimensions.

      Note that the terms "binning" and "blocking" are used interchangeably in this thread. They both refer to combining pixels in an image.

      Getting Started

      This thread begins with Chandra data from an observation of the Antennae Galaxies (NGC 4038/NGC 4039, ObsID 315). Open the file in ds9:

      unix% ds9 acisf00315N002_evt2.fits &

      A small section of the data is visible when the file is loaded, as shown in . The target of the observation is partially visible in the display frame.

      Data loaded with default buffer and bin size The target sources of the observation are partially visible at the bottom of the frame. defaults.png

      By default, the buffer size is set to 1024x1024 and the binning factor is set to 1. These values will be adjusted in the following sections to illustrate how to make more of the data visible.

      The "Bin" menu, shown in , will be used to change the setting in the following examples. From top to bottom, this menu contains the bin function setting, blocking factor, buffer size options, and access to the binning parameters dialog box.

      The Bin menu The blocking factor is set to 1, the buffer size is 1024x1024, and the function is sum. binmenu.png
      Buffer Size

      The buffer size determines the size of the image generated by ds9. By default, a full-resolution 1024x1024 image of the data is created. If your input data file has larger dimensions, it is clipped to 1024x1024 in ds9. The buffer settings range from 128x128 to 8192x1892.

      Setting the buffer to the smallest size, 128x128, illustrates how it works. The data was centered on the sources in ds9 before the buffer size was changed, creating .

      Buffer size set to 128x128 A small central portion of the data is visible. smallbuffer.png

      Setting the buffer to a large size, e.g. 4096x4096, produces . The display frame is filled by the data, and the panner in the upper right indicates that more of the image is available. Clicking and dragging the viewing bounding box in the panner will display a different portion of the image.

      Buffer size set to 4096x4096 The frame is filled by the data, and the panner indicates more of the image is outside the field of view. largebuffer.png
      Binning Basics Changing the binning factor

      While increasing the buffer size loads more of the file into ds9, binning the data makes more of it visible in the frame. Binning combines the specified number of pixels into one new pixel; the new pixel has a value equal to the sum of the original pixels. (Note that if the bin method is changed to "average", the pixel values are averaged instead of summed.)

      The binning can changed from the "Bin" menu or from the "Bin" item in the button bar. It's also possible to step through different binning values with the -/+ buttons or the "Block In"/"Block Out" menu items.

      In , the buffer size is set to 1024x1024, but the block factor has been set to 4. A larger section of the data is visible in the frame.

      Data binned by a factor of 4 Five of the CCDs are visible in the binned data. block4.png
      Binning different columns

      ds9 has the ability to display any of the other columns stored in the event file, although it is generally only meaningful to use the spatial vector columns. Begin by opening the "Bin → Binning Parameters" dialog box, shown in .

      The "Bin Columns" menus are used to select the columns to be binned. To create an image in detector coordinates, set the first to "detx" and the second to "dety"; the block is set to "2" for both. The "or center of data" box is checked so that the center of the data is recalculated for the new columns.

      The Binning Parameter dialog The parameters are set to bin in detector coordinates about the center of the data. binpar.png

      Click "Apply" and the ds9 frame is updated, as shown in .

      Image binned in detector coordinates Some bad columns are visible in black in the detector image. detimage.png

      Alternatively, one can display an event file in specific coordinates when starting ds9 from the command line:

      unix% ds9 "acisf00315N002_evt2.fits[bin=detx,dety]" &
      Data Cubes: Binning in three dimensions

      It is possible to add a third column to the binning, creating a 3-dimensional image also known as a "data cube". In this example, an (x,y,time) data cube is created of a Chandra observation of Jupiter (ObsID 1463). A cube may be created from any three columns that make sense in the analysis. For instance, you may want to create a PHA or energy axis to see how the spectral characteristics of a source change over time.

      The data file is loaded into a new frame in ds9 and the "Bin → Binning Parameters" dialog box is opened again. The "time" column of the file is selected from the "Bin 3rd Column" menu. The limits of the data in that column are filled in automatically. The "depth" field determines how many intervals the column is divided into; a depth of 25 is used. The completed parameter box is shown in .

      Binning Parameter dialog for a data cube The third binning column is set to "time" with a depth of "25". binpar2.png

      After clicking "Apply", two things happen: the "Data Cube" dialog box is launched and the frame is updated to show only the (x,y) image of the first time slice. (If the data cube dialog box doesn't launch, open it from the "Frame" menu.)

      Data Cube dialog box The dialog box has controls to step through each slice of the data cube. cubebox.png

      When "Play" is chosen, ds9 cycles through the bins of the time axis, essentially creating a movie of the (x,y) position of the object over time. The speed of the frame changes is controlled from the "Interval" menu of the dialog box. Any of the 25 intervals may be selected with the slider bar.

      Viewing a data cube One interval of the data cube is visible at a time when displayed in ds9. cubeimg.png

      The data cube can be saved as an MPEG movie from the "File → Save Image..." menu. Select "MPEG-1 (Movie)" and click "OK"; after setting the filename, choose an MPEG Quality Factor. The Jupiter data was saved at a quality factor of 15: jupiter.mpg.

      Filtering Data

      The "Bin Filter" field in the "Binning Parameters" dialog box is used to apply filters to the data. A filter can be applied to any of the columns present in the input file. A colon is used to indicate a range of values. Filters can also use < (less than) or > (greater than).

      For instance, to include only the hard-band photons (2500-8000 eV):

      energy=2500:8000

      Clicking "Apply" updates the ds9 display and keeps the dialog open for adjusting the filters.

      Multiple filters may be specified, separated by commas:

      energy=2500:8000, ccd_id=7

      The resulting image is shown in .

      Filtering data Only the hard-band photos on CCD 7 are displayed. filterimg.png

      The filtered dataset can be saved as a FITS file for use in data analysis from the "File → Save Frame as Fits..." menu.

      saods9/ds9/doc/release/r1.5.html000644 000765 000000 00000005560 10415010755 016627 0ustar00joyewheel000000 000000 DS9 Version 1.5 Release Notes

      Version 1.5 Release Notes

        Version 1.5

        1. Fixed problem with Windows style Open file dialog box
        2. Now supports following coords systems:
          • Image (was Logical)
          • CCD (was Physical)
          • Detector (was Mosaic Physical)
          • Amplifier
          • WCS
        3. New version of Doug Mink's WCS libs
        4. Fixed minor problems with interactive Pan Mode
        5. Added "Source TCL" file support
        6. Open Mosaic Image command

        7. Will open multiple fits files as a mosaic.
          Supports following patterns:
          *#.fits
          *_#.fits
          *.IM*.fits
        8. Open Mosaic Segment command
        9. Fixed minor problem with zscale and high energy data
        10. The Magnifier now Works!

        11. There are two algorithms available (under Preferences)
          Magnification can be selected via preferences
          1. Fast (and less Accurate)
          2. More Accurate (and slower)
        12. Improvements to Dialogs
        13. Now supports (unoffical)FITS data size -16 (unsigned short)
        14. Support for byte swapped processors
        15. Support large images > 8k x 8k
        16. Loading images are now 10x faster
        17. Supports BLANK Fits keyword
        18.  Menu Short Cuts have been added (use Alt key, such as Alt-f for Frame menu)
        19. Horizontal and Verticle Graphs now work in all modes (not just Crosshair)
        20. ds9 will accept fits files via STDIN (ie. $ cat foo.fits | ds9 -file -  )
        21. command line argument support (ie. $ds9 -? for list)
        22. crosshair position is more accurate
        23. added new scales: 'ln' and 'log'.
          1. ln --  SAOimage natural log based algorithm
          2. log--  IRAF log base 10 algorithm
        24. Support for Postscript printing (Level 1 and Level 2)
        25. Blinking is now supported
      saods9/ds9/doc/release/r1.6.html000644 000765 000000 00000001472 10415010755 016626 0ustar00joyewheel000000 000000 DS9 Version 1.6 Release Notes

      Version 1.6 Release Notes

        Version 1.6.1

        1. fix some minor problems with odd chars in filenames
        2. fix problems with fits image extensions
        3. removed minimal geometry restrictions
        4. fits file support is more robust
      saods9/ds9/doc/release/r1.7.html000644 000765 000000 00000007610 10415010755 016627 0ustar00joyewheel000000 000000 DS9 Version 1.7 Release Notes

      Version 1.7 Release Notes

        Version 1.7.2

        1. Fixes a rather nasty bug with coordinates.
        2. XPA version 2.b32

        3. example:
          $ ds9&
          $ xpaget DS9 # will list all public access points
          $ xpaset -p DS9 colormap BB # change colormap
          $ xpaset -p DS9 file snr.fits # load a fits file
          $ cat snr.fits | xpaset DS9 fits # load via XPA
          $ cat snr.fits | xpaset DS9 fits foo[key=RAWX,RAWY] # load via XPA
          Note: xpa class and name for ds9
          -- xpa class : 'DS9'
          -- xpa name  : 'DS9'
          both class and name are case sensitive
          To specify a different xpa name for this application use the
          -title command line option:
          $ ds9&            # default name of 'DS9'
          $ ds9 -title foo& # name of 'foo'
          $ xpaset -p foo colormap BB # change colormap for 'foo'
          $ xpaset -p :foo colormap A # change colormap for 'foo'
          $ xpaset -p DS9:foo colormap BB # change colormap for 'foo'
          $ xpaset -p DS9: colormap I8 # change colormap for 'DS9 & foo'
        4. fixed bug with zscale and minmax preferences
        5. geometry command line option: $ ds9 -geometry 600x500

        6. Note: this does not include space needed for menus.
        7. default wcs is 'fk5'

        Version 1.7

        1. new version of Fits I/O library
        2. .Z, .z, and .gz files are supported

        3. example:
          $ ds9 snr.fits.Z
          $ ds9 snr.fits.z
        4. url's are now supported

        5. example:
          $ ds9 ftp://legacy.gsfc.nasa.gov/rosat/data/hri/images/fits/rh100193_img.fits
          $ ds9 http://legacy.gsfc.nasa.gov/FTP/rosat/data/cdrom/vol1/IMAGES/00h/p000s26b.img.Z
        6. fixed some minor problems with Mosaic Images
        7. Support for FITS bin tables

        8. example:
          $ ds9 snr.fits[2] # assume 'X' or 'x' and 'Y' or 'y' column
          $ ds9 snr.fits[EVENTS]
          $ ds9 snr.fits # assumes EVENTS or STDEVT extension
          $ ds9 snr.fits[key=RAWX,RAWY] # bin on RAWX/RAWY column
        9. Backward compatible with Einstein .xpa data for bining
        10. Contours are now supported

        11. You can generate contours for each frame and cut/paste them into other frames. When you paste a contour, you choose which coordinate system to translate the contour into. Obvisously, to paste via WCS, each image must have a valid WCS. Printing of image/contours also is supported.
          The contour algorithm currently implemented is a general purpose algorithm, good for most images. However, there are some issues that make it less than optimal for sparse high energy data. Therefor, next on the list is implemention of the 'Pros Imcontour' algorithm.
        12. Now supports ICRS WCS
        13. Now Uses Tcl/Tk 8.0.4 and BLT 2.4g
        14. Now uses Doug Minks's wcssubs 2.6.
      saods9/ds9/doc/release/r1.8.html000644 000765 000000 00000037634 10415010755 016641 0ustar00joyewheel000000 000000 DS9 Version 1.8 Release Notes

      Version 1.8 Release Notes

        Version 1.8.7.8

        1. Dialog windows now use the same colormap as the parent window.
        2. Fixed a problem with the tile xpa point.

        Version 1.8.7.7

        1. Fixed a problem with updating the Contour dialog box.
        2. Fixed another problem with .gz, .Z, and .z
        3. Coordinate Grids now support WCS of projection TNX.
        4. Improved the appearance of Grids while in Internal Mode.

        Version 1.8.7.6

        1. Fixed a problem with running under linux and displaying on Solaris.
        2. Fixed a problem with Truecolor 8 support.
        3. Added Coordinate Grids!
        4. Mouse coordinates may be printed by pressing the 'C' key. Which coordinates are printed may be specified via the 'Edit:Preferences:Print Coordinates' menu.
        5. Default Region Parameters now can be specified via the Preferences menu.
        6. Contour Dialog has been redesigned and Contour scales and limits added.
        7. Fixed a problem with Contour scales log, squared, and sqrt.
        8. The user can save and load contours via the Contour Parameter Dialog Box. The contours may be any supported coordinate system.
        9. The user can save and load contour levels via the Contour Parameter Dialog Box.
        10. Fixed a problem with file names that contain .z, .Z, .gz

        Version 1.8.7.5

        1. Fixed a problem with Truecolor 24 bit visuals under Solaris 7
        2. Fixed a problem with selecting Ruler Regions that are horizontal or vertical.

        Version 1.8.7.4

        1. Fixed a major bug with mosaics with an amplifier that reads out in reverse and the data has been flipped before writing.

        Version 1.8.7.3

        1. New wcssubs: Fixed a problem with wcs of RA--NCP and DEC--NCP
        2. Fixed a problem with 'Scale:User Limits'
        3. Removed a warning message if xpa is not available
        4. The coordinate info box is updated while editing regions
        5. Fixed a problem with the window manager closing region dialog boxes, regions list dialog box, and analysis result dialog box
        6. List Regions, Display Header, and the Analysis Dialog box now have options for printing, saving, and searching the contents.
        7. Display Header now supports multiple dialogs, one for each frame.
        8. Fixed a problem with parsing region files and the LINE region.
        9. Fixed a problem with polygon regions and PROS region file formats.
        10. All regions are deleted when 'Clear Frame' or 'Open' action taken.
        11. When creating Text regions, the 'Cancel' button now works.
        12. 'Clear Frame' has been moved from 'File menu to 'Frame' menu.
        13. shell variable DS9_ARRAY may be used to define default array parameters. Example: $export DS9_ARRAY='[dim=512,bitpix=-32]'
        14. shell variable DS9_BINKEY may be used to define default FITS bin table cols. Example: $export DS9_BINKEY='[bin=rawx,rawy]'
        15. new 'Open Array...' menu item has been added to the 'File' menu.
        16. Changes to following ommand line options:

        17. -array, -mosaicimage, -mosaicimages, -mosaicsegment, -shared

        Version 1.8.7.2

        1. Add the -iconify command line option.
        2. FITS Region Binary Table Region file format is supported for input.

        Version 1.8.7.1

        1. Now using BLT 2.4l
        2. Now using X11R6
        3. Fixed a problem with selecting blink frames multiple times.
        4. Fixed a problem with Line Regions always printing with arrows.
        5. Fixed a problem when a printing error occurs.
        6. External File support is now available.
        7. External Analysis support is now available.
        8. Added Frame refresh menu item.
        9. Fixed a problem with shared memory size.
        10. XPA frame has changed. The argument is now only a number, not a name. This clears up some problems with syntax. If the frame does not exists, the frame is created. The option 'frameno' is provided for backward compatiblity.

        11. Example: xpaset -p ds9 frame 2 # goto frame name 'frame2'
                   xpaset -p ds9 frame frameno 4 # goto frame name 'frame4'

        Version 1.8.7

        1. Scale type 'Ln' has been removed.
        2. Contour scales Log, Sqrt, and Squared have been fixed.
        3. Contour Dialog box is now non-modal.
        4. Fixed a problem with the FITS Header Dialog box.
        5. Support for > 256 colors in truecolor mode.
        6. New PS level 2 drivers that support more than 256 colors.
        7. Crosshairs will now appear in the magnifier if graphics enabled.
        8. Improved on the gui in terms of tile and blink. Now ds9 is in one of 3 display modes: single frame, tile frames, and blink frames.
        9. You can now Show or Hide frames, via the Frame:Show/Hide menu. When a frame is 'Hidden', it does not appear in Single, Tile, or Blink mode, and can not be selected via the Frames menu.
        10. Added a new mode: Examine. While in examine mode, if you click, a new frame is created, loaded with the same data, and scaled about the point you clicked. If the base frame is a FITS image, it is zoomed, if the base frame is a FITS binary table, it is blocked. The file is not loaded again, but shared between frames, requiring little additional memory. When you clear or delete a base frame, all examine frames are deleted. Options as to how many frames are created and the scale factor may be specified via the preferences menu.

        Version 1.8.6.9

        1. Support for FITS Bin Table Type 'U' (unsigned short) and Type 'V' (unsigned long). Note these are not supported by the FITS standard.
        2. Added new default colormap 'Cool'
        3. SAOtng and PROS Regions file support: if wcs coords are used, yet no wcs system has been specified, the native wcs of the file is used.
        4. Regions now are available in the magnifier (user prerference)
        5. Fixed a problem with working with line regions at high zoom factors
        6. Fixed a problem with working with polygon regions at high zoom factors

        Version 1.8.6.8

        1. Fixed again problems with FITS Tables, Binning, Physical Coords, and WCS

        Version 1.8.6.7

        1. Binning on a third column is now supported
        2. Fixed a problem with FITS Tables and bit fields

        Version 1.8.6.6

        1. Added new 'Zoom to Fit Window' function
        2. Added new 'Block to Fit Window' function
        3. Added 'Block to...' function
        4. 'Mode' menu has been moved to under 'Edit' menu.
        5. Show/Hide Panner and Magnifier via the prefs, command line, and xpa
        6. Tear-Off menus now have window titles
        7. minor changes to xpa options syntax (no more -options), see XPA for more info.
        8. xpa colormap is no longer case sensitive
        9. fixed a problem with tables and physical coordinates
        10. fixed a problem with interactive pan/zoom/rotate and coordinates

        Version 1.8.6.5

        1. Fixed a problem with reading IRAF Pros regions files

        Version 1.8.6.4

        1. Fixed a problem with Little Endian Machines and doubles in FITS bin tables

        Version 1.8.6.3

        1. Now supports SAOtng regions files in physical coordinates.

        Version 1.8.6.2

        1. Improved Region clipping
        2. Fixed a problem with finding the Preferences File

        Version 1.8.6.1

        1. Fixed a rather nasty bug with rendering Circle Regions. This bug would sometimes cause the X Server to hang.
        2. Now does a better job of creating the default size regions.
        3. Frame buttons Prev and Next now will cycle thru all frames.

        Version 1.8.6

        1. Automatic Tile Mode with multiple files on command line
        2. Fixed problems with HTTP and FTP access
        3. Fixed another problem with FITS Bin tables and regions
        4. There are now 2 modes for interactive panning-- default click to center
          • Click to Center (SAOimage method)
          • Drag to Center (Native DS9 method)
        5. New frames use the current user scale limits and colorscale.
        6. Added frameno option to FRAME xpa point
        7. REGION SAVE FORMAT menu now reflects coords available

        Version 1.8.5

        1. New GUI Buttons Bar
        2. Rearranged Menus, smaller desktop footprint
        3. New Tiling algorithms
        4. Truecolor 8bit support

        5. $ds9 -visual truecolor8
        6. Truecolor 16bit support

        7. $ds9 -visual truecolor16
        8. Truecolor 24bit enhancements

        9. $ds9 -visual truecolor24
        10. Pseudocolor 8bit enhancements

        11. $ds9 -visual pseudocolor8
        12. Regions Modes now intergrated into Pointer Mode
        13. New colormaps have been added
        14. Fixed a problem with FITS ext names
        15. Editing RECTANGLE regions resizes about the opposite node, not the center
        16. Polished the GUI for creating regions
        17. list/save regions in saoimage format now outputs points
        18. Fixed a problem with existing regions and blocking

        Version 1.8.4.1

        1. Fixed problem with rotate mode and updating menus

        Version 1.8.4

        1. 24 bit color support
        2. New Postscript drivers
          • CMYK support
          • Variable resolution
        3. Online Documentation!
        4. Fixed a problem with Physical Coordinates and FITS Bin Tables
        5. Sticky file names have been implemented
        6. Fixed a problem with standard dialogs and double/triple clicks
        7. If Header window is open, load will display the new header
        8. Delete Frame now asks for confirmation
        9. Fixed a problem with arrays and xpa
        10. Fixed a problem with FITS keyword inheritance
        11. for FITS bin tables, the keywords BIN, BINKEY, and KEY are equivalent
        12. Fixed a problem with regions and tiled frames
        13. Keystroke shortcuts have been added to the GUI
        14. Added WCS menu items to preferences saved
        15. Added 'Clear Preferences' to preferences menu
        16. Mouse button 2 is now bound to 'Pan' function
        17. Minor changes to layout of Small and Large Infomation Panel
        18. Fixed problem with pseudocolor 8 and private colormaps

        Version 1.8.3

        1. Fixed a problem with arrays and xpa
        2. xpaget regions: you now can specify coord/coordformat/format
        3. $ xpaget ds9 regions -format pros -coord fk4 -coordformat hms
        4. Interactive rotation is now works!
        5. PanZoom Dialog and Rotate Dialog now have 'Apply' buttons
        6. Preferences have been implemented. 'Save Preferences' will save the current values of the 'Preferences' and 'View' menus in $HOME/.ds9.prefs. On startup, this values will be used.
        7. Source user tcl file has been implemented. If $HOME/.ds9 exists, it will be sourced on start up.
        8. New Standard Dialog box has been implemented. User now has a choice of motif, windows, or 'blue plate special' dialog boxes.
        9. '$ xpaget ds9 file' now returns full file name
        10. More tolerant of non-existent or bad files.
        11. More robust checking of mosaic files
        12. FITS keyword inheritance is now supported.
        13. Mosaic Multiple Extension Fits files are now supported.
        14. Coordinate name 'CCD' has been changed to 'Physical'

        Version 1.8.2

        1. Support for raw data arrays

        2. $ ds9 "foo.arr[xdim=512,ydim=512,bitpix=-32]"
          $ ds9 "foo.arr[xdim=512,ydim=512,bitpix=16,skip=100]"
          $ ds9 "foo.arr[dim=1024,bitpix=8,bigendian]"
          $ ds9 "foo.arr[dim=1024,bitpix=8,arch=littleendian]"
        3. xpa support for raw data arrays

        4. $ cat foo.arr | xpaset ds9 array "[dim=512,bitpix=16]"

        Version 1.8.1.2

        1. fixed problem with printing

        Version 1.8.1.1

        1. fix problem with change of xpa api

        Version 1.8.1

        1. fix blockfactor,blockbuffersize, and blockfunction command line options.
        2. fixed problem with Marker type Line Dialog box.
        3. Added new marker type: Ruler.
        4. fixed major problem with regions files and loading via xpa.
        5. Added arrows to line marker.
        6. more robust error handling.
        7. bin table extension names and column names are no longer case sensitive.
        8. fixed problem with printing to different page sizes

        Version 1.8

        1. Fixed a major memory leak
        2. Fixed a XPA printing problem
        3. Fixed problem with LOG scale
        4. the xpa application name is now "ds9".
        5. the xpa class name is now "DS9"

        6. example:
          $ xpaget ds9 version # get version number from just ds9
          $ xpaget DS9:ds9 version # get version number from just ds9
        7. $ xpaget DS9: version # get version number for all DS9 apps
        8. Markers!
      saods9/ds9/doc/release/r1.9.html000644 000765 000000 00000030127 10415010755 016630 0ustar00joyewheel000000 000000 DS9 Version 1.9 Release Notes

      Version 1.9 Release Notes

        Version 1.9.8

        1. fixed a problem with listing regions that are very long. the size limit has been increased from 1024 to 8192
        2. completed MS Windows port
        3. fixed a problem with large polygons in FITS Regions bin table format
        4. ds9 will now correctly load a FITS Extension image without a primary header
        5. xpa wcs [reset|replace|append] function added
        6. the default nameserver is now 'simbad-sao'

        Version 1.9.7.2

        1. fixed a problem with reading arrays via xpa and extra data an the end of the image
        2. fixed a problem with region callbacks and actions on regions within the callback
        3. fixed a memory leak with deleteing polygon vertices
        4. double click on region with select=0 no longers opens a dialog
        5. added select property to ds9 region properties list
        6. for default annulus, ellipse annulus, box annulus, the number of annuli is now used when the user click and drags
        7. fixed a problem with ellipse annulus and box annulus and zero inner radius
        8. fixed a problem with box and boxannuls and updating the region dialog coords
        9. fixed a problem with turning off/on active frames
        10. fixed a problem with saving fits images created from a fits image extension
        11. added new 'new' option to xpa points 'FITS' and 'ARRAY' to create a new frame before loading the new image
        12. completed port HP-UX

        Version 1.9.7.1

        1. fixed a problem with prefs and sourcing external tcl files

        Version 1.9.7

        1. mktclapp is now used to build the application from tcl
        2. fixed a problem with HMS and hour=0
        3. fixed a problem with parseing old ds9 region files and 'global'
        4. support for SAOtng Regions file format has been restored
        5. upgraded to tcl/tk 8.3.2
        6. upgraded to blt2.4u
        7. minor changes made to ciao regions file format
        8. fixed a problem with Ciao FITS regions files

        Version 1.9.6

        1. Added Truecolor Colorbar preference
        2. Fitsy++ now supports fixed and free format keyword strings correctly
        3. While in 'Pan' mode, the arrow keys may be used to pan the image
        4. Custom Page Setup in mm is now supported
        5. Region Text string can now contain both a ' and "
        6. Region File format for text now supports the following text strings:
          1. text="This is a test"
            text="This is a test of '"
            text='This is a test of "'
            text={This is a test of ' and "}
        7. DS9 will now correctly parse a regions spec with a delim of ';'
        8. XPA tcl command now runs in the same context frame as source and ds9
        9. Fixed a problem with the Colorbar contrat/bias dialog and truecolor
        10. Fixed a problem with BOX list/save format
        11. Fixed a problem with contours in that one extra level was generated when using the low/high and number of contours controls
        12. Updated to Doug Mink's wcssub version 2.8.1, which fixes a problem with keywords without an '='
        13. Fixed a problem with printing Region Text with '(', ')', or '\' in it.
        14. Region file format is now valid for both reading and writing Region files
        15. Implemented new Regions file format, version 3
        16. Fixed a problem with IRAF and the 'f' and 'c' keys
        17. Images with odd length will center on pixel boundaries
        18. The number of bins if determined from TLMIN/TLMAX will now vary, based on column type (integer or real). The bin space for integer is TLMIN-.5 to TLMAX +.5 and for real TLMIN to TLMAX.
        19. Binning Dialog box is now non-modal
        20. Made improvements in the resolution of coordinates
        21. Added the -version command line option
        22. Fixed a problem with bad name resolution and NED-SAO
        23. Fixed a problem with -grid and -contour command line options
        24. Add -format, -coord, -coordformat, and -delim to xpaget regions
        25. Added FITS bin table filtering
        26. Changed XPA BLOCK to BIN
        27. bin factors of less than 1 but greater that 0 are now allowed
        28. fixed a problem with ecliptic coords and FITS BIN TABLES with wcs
        29. Fixed a problem with contours and high resolution values
        30. Added algorithm method to contours
        31. Fixed a problem with contours and re-binning a FITS bin table
        32. Changes to BIN commandline options to mirror BIN xpa options
        33. Added raise/lower command line options
        34. Added raise/lower xpa options
        35. Cut/Paste to/from the primary selection is now provided
        36. Added new type of grid, Exterior Axis with interior numerics
        37. Fixed problems with grid numerics and rotation of non-zero
        38. Fixed a problem with graphs and no FITS loaded
        39. Added Regions Delimiter menu
        40. Added ANNULUS, ELLIPSE ANNULUS, and BOX ANNULUS regions

        Version 1.9.5

        1. Fixed a problem with Saving FITS images on byte swaped platforms
        2. FITS Bin table support now uses TLMIN/TLMAX to determine binning buffersize up to the user specified limit
        3. Fixed the XPA Regions format,coord, and coordformat calls
        4. Changed the behavior of $xpaget ds9 regions [format|coord|coordformat]

        Version 1.9.4

        1. Added ability to save a FITS bin table as a FITS image
        2. Added xpa point to support the above
        3. Fixed a problem with loading arrays
        4. Added support for the Rosat All Sky Survey
        5. Added command line support for DSS and RASS
        6. Fixed a problem with displaying LINEAR WCS
        7. DS9 is now much more tolarent of FITS files in which the data segment is short in size, ie, is not a multiple of FITBLOCK (2880 bytes)
        8. Fixed a problem with FITS files with headers with 100's or 1000's of comments or history keywords
        9. Enhanced Preferences support
        10. The information panel is now updated during blinking
        11. Fixed a problem with long frame names
        12. Added new fuctionality to the 'Frame' xpa point
        13. Fixed a memory problem that caused problems with the Alpha port
        14. Fixed a problem with regions in sexagesimal format and NATIVE WCS
        15. DS9 is now much mor tolerant of sexagesimal format regions that do not map directly on top of a image
        16. Implemented the new default region format
        17. Fixed a problem with Polygon regions and creating/moving vertices
        18. Added Colormap Contrast and Bias Dialog
        19. Fixed a problem with Box regions and negative width and height
        20. Angle has been added to the Ruler Region dialog box
        21. Length has been added to the Line Region dialog box
        22. Fixed a problem with Region Text and the '"' character
        23. Added XPA point for DSS
        24. Added XPA point for RASS
        25. Added XPA point for Name Servers
        26. Fixed a problem with rotated Regions and IRAF images
        27. Added XPA point xpaget fits
        28. Added XPA point xpaset file save <filename>
        29. xpa regions may now be delimited by nl or semicolon

        Version 1.9.3

        1. Fixed a problem with preferences. The prefs file was not parsed.
        2. Fixed a problem with xpaset ds9 fits and multiple ext fits files
        3. Fixed some minor problems with xpa and blink,frame
        4. Added xpaset ds9 frame [first|next|prev|last]
        5. Added printing of pixel tables
        6. Added Copy/Paste support for pixel tables
        7. Fixed a problem with changing the size of pixel tables
        8. 'F' toggles Info Pannel 'freeze' mode.
        9. Full shared memory support has been added

        10. $xpaget ds9 shm
          $xpaset -p ds9 shm 102 8640
          $xpaset -p ds9 shm shmid 102 8640 foo[2]
          $xpaset -p ds9 shm mosaicimage key 100 10240 foo
          $xpaset -p ds9 shm mosaic key 100 10240 foo[3]
          $xpaset -p ds9 shm array shmid 102 8640 [dim=32,bitpix=16]

          $xpaset -p ds9 update 1 100 100 200 200 # update HDU1 in image coords
          $xpaset -p ds9 update 3 400 400 500 500 # update HDU3 in image coords

        Version 1.9.2

        1. Fixed yet another problem with contours
        2. Fixed a problem with loading arrays with bitpix of -64

        Version 1.9.1

        1. Fixed the 'Analysis' menu item 'DSS'
        2. provided for more backward compatibility with old preference files
        3. Fixed a problem with IRAF support and changing buffer sizes
        4. Fixed a problem with contours and reading incorrectly levels
        5. Fixed a problem with printing and pan/rotation/zoom
        6. Fixed a problem with Grid Rotated numbers and MSB/LSB cross-platform

        Version 1.9

        1. DS9 now supports IRAF!
        1. point regions now have the include/exclude property
        2. crosshairs will now print
        3. fixed a problem with contours and the contour dialog is visible
        4. fixed a problem with the wcs of FITS files with very long headers
        5. added Pixel Table feature
        6. contours now appear in the magnifier with graphics enabled
        7. John Roll's Tcl Ast package has been added
        8. DS9 is now more tolerant of 'SIMPLE = F' type FITS files
        9. fixed a problem with render speed in single frame mode and multiple frames loaded
        10. The Pan Zoom Rotate Dialog Box is now Non-Modal
        11. Name Resolution support has been added
        12. DSS support has been added
        13. A problem with contours has been corrected. if contours levels = n, then n+1 contours are actually rendered
        14. DEC Alphas are now supported
        15. SGI is now supported
        16. LINEAR WCS is now fully supported
      saods9/ds9/doc/release/r2.0.html000644 000765 000000 00000001766 10415010756 016630 0ustar00joyewheel000000 000000 DS9 Version 2.0 Release Notes

      Version 2.0 Release Notes

        Version 2.0

        1. changed xpa tcl received to remove eval statement
        1. fixed a problem clearing the magnifier in the windows version
        2. implemented a work around for a bug in dvips version 5.55 and level 2 postscript driver
        3. filename with a space in them will now load correctly
        4. fixed a problem with FITS Regions Files and optional columns
      saods9/ds9/doc/release/r2.1.html000644 000765 000000 00000053351 10415010756 016626 0ustar00joyewheel000000 000000 DS9 Version 2.1 Release Notes

      Version 2.1 Release Notes

        Version 2.1

        1. 04.05.2002 fixed a problem with xpa contour load.
        2. 04.22.2002 ds9 version 2.1 released to the public.

        Version 2.1b7

        1. 04.02.2002 upgrade to XPA 2.1.0e2. This fixes a problem with xpa and linux/linuxppc.
        2. 04.03.2002 fixed a problem with AST. plot.c, line 19463, change parameter 'force' from 1 to 0 in call to 'CheckLabels'. Sometimes we were seeing adj labels that where the same. This change makes sure that the labels are 'reduced' if we have this condition.
        3. 04.03.2002 ds9 will now automatically open as a bin table fits extension named EVENTS, STDEVT, and RAYEVENT.
        4. 04.03.2002 when trying to find an image to open in relax mode (ie the use did not specify an extension), ds9 will not find a valid image if the length of either axis is 0.
        5. 04.03.2002 now check for Ghostscript version 6.50 or higher when invoking Save As.
        6. 04.03.2002 add help application preference. Users can now choose between Netscape and Mozilla as the prefered help application.
        7. 04.04.2002 ds9 version 2.1b7 released to the public.

        Version 2.1b6

        1. 02.04.2002 upgraded to ast version 1.8.6. Modified ast to use sscanf() for all platforms except Darwin. Darwin uses astSscanf(), which works around a problem with sscanf() on MacOSX, with format strings of the following format: sscanf(str, " %s %n", foo, &nc).
        2. 02.04.2002 changed fity++ primary_/head_ header relationship. primary_ is only set if there is a primary header is available and different from head_.
        3. 02.04.2002 wsc's are init'd with both the head_ and the primary_ (if available) to handle the case where wcs keywords are spread between hdu nd primary headers in mulitiple extension files.
        4. 02.06.2002 all xpa commands are now 'catch{}' to invoke a procedure that will unwind the watch cursor stack. Hopefully, no more stuck watch cursors.
        5. 02.07.2002 add color and width parameters to contours paste command. defaults are green and 1
        6. 02.08.2002 fixed a problem with the FRAME menu. It was cutting off the last separator.
        7. 02.12.2002 AST grid still does not support ICRS properly. When a user sets the coordinate system to ICRS, the actually parameters sent to the AST grid code is FK5
        8. 02.13.2002 for XPA points array, fits, regions, and wcs (fillbuf=false), manually flush the buffer at the end to make sure no data is left
        9. 02.13.2002 ecliptic coords from wcssubs corrected by new version of wcs/wcscon.c
        10. 02.13.2002 AST grids, corrected the MDJ-OBS keyword generated to generate the correct EPOCH.
        11. 02.13.2002 adjusted the EQUINOX value for ECLIPTIC coords for ast grids to agree with wcssubs. Seems for ecliptic coords, wcssubs and ast use two slightly different interpretations of the EQUINOX value.
        12. 02.13.2002 fixed a problem with histogram equalization introduced in version 2.1b5.
        13. 02.14.2002 fixed a problem with titles in plot(stdin). We now take the first line, and starting from the end, pick off the dimension, x and y axis titles, and the remainder is taken as the plot title. It can contain spaces and special characters such as '[]'
        14. 02.14.2002 add 'Always create new plot' option to prefs
        15. 02.14.2002 add multiple analysis plots, unless prefs are unset
        16. 02.14.2002 change default annulus and panda to 1 annuli
        17. 02.14.2002 enable multiple array loads via blueplate dialog
        18. 02.14.2002 reset,append, and replace wcs now processes OBJECT keyword
        19. 02.15.2002 fixed a problem with grid format of degrees. Sometimes, the incorrect format would be used. This was corrected by up'ng the number of digits displayed to d.3
        20. 02.21.2002 upgraded to AST 1.8.7
        21. 02.21.2002 upgraded to WCS 3.0.7
        22. 02.22.2002 fixed a problem with Ascii Tables in fitsy++. The column offset is now calculated from TBCOLn if present.
        23. 02.22.2002 simplied columns in fitsy++. Now all columns have a value(char* ptr, int i) and str(char* ptr, int i) procedure.
        24. 02.22.2002 add support for HST WFPC2 mosaics
        25. 02.25.2002 fixed a problem with 'marker command'. The command STRING must be quoted by '\{' '\}' before being pasted to the Frame parser.
        26. 02.26.2002 add $ERROR/ERROR: support for analysis $plot(stdin) macro.
        27. 02.26.2002 analysis menus now support multiple levels of hierarchical menus
        28. 02.26.2002 multiple hierarchical menus may have the same label
        29. 02.26.2002 hierarchical menu label may have an imbedded spaces
        30. 02.26.2002 add endhmenu endparam to analysis file parser
        31. 02.26.2002 analysis file text maybe indented
        32. 02.26.2002 add help support to analysis file
        33. 02.27.2002 add $BEGINTEXT/$ENDTEXT to $plot(stdin) macro
        34. 02.27.2002 add xpa get fits [type|image|table] command
        35. 02.27.2002 minor tweak with the File:Save as menu
        36. 02.27.2002 clean up some minor memory leaks with FitsImage::initwcs()
        37. 02.27.2002 fixed a problem in dialog.tcl DialogWait and reseting errorInfo
        38. 03.01.2002 dss non-save file now uses internal gz
        39. 03.04.2002 plot windows can now support a second set of y and error values.
        40. 03.05.2002 add debug iis option
        41. 03.05.2002 filenames now always reflect fits extension name/number and filter.
        42. 03.05.2002 the last step in analysis commands now replaces all '][' with ',', building up readable filters.
        43. 03.06.2002 updated nan.C and nan.h to reflect erics new treatment of alpha
        44. 03.08.2002 add support for save fits gz
        45. 03.12.2002 keywords BSCALE/BZERO/BLANK are now ignored for FITS IEEE floating point data
        46. 03.12.2002 IEEE nan and inf are supported as valid FITS IEEE floating point data
        47. 03.13.2002 add fits.sh test suite which tests for bitpix = 8,16,32,-32,-64 and BLANK,BSCALE,BZERO keywords, and IEEE floating point data NaN and INF.
        48. 03.15.2002 add save resample support
        49. 03.18.2002 add support for Mosaic Fast Render. Only valid for IRAF mosaics. Basically, you track the current fitsimage til you have miss.
        50. 03.19.2002 upgrade XPA 2.1.0e
        51. 03.19.2002 upgrade FILTER 1.1.0e
        52. 03.19.2002 upgrade FITSY 1.1.0e
        53. 03.19.2002 fixed a problem when a user CUT a region that had a dialog box open. A CUT operation now calls the delete callback to remove any pending dialog boxes.
        54. 03.19.2002 fixed a problem with -print command line option for truecolor visuals. We need to make sure that the window is realized so that the colormap has been created.
        55. 03.20.2002 ds9 version 2.1b6 released to the public

        Version 2.1b5

        1. fixed a problem with bogus wcs data and replace wcs xpa command
        2. add view tickmarks to grid dialog box
        3. fixed a problem with loading a custom colormap and then printing
        4. add command line/xpa option load colormap file
        5. fixed problems with grid dialog box and switching between frames
        6. add command line option pan
        7. add command line option about
        8. add command line option view
        9. gzip compression is now built-in
        10. add xpa fits [mosaic|mosaicimage]
        11. fixed a problem with loading arrays via stdin
        12. fixed a problem with the panda region and rotation
        13. improved performance in plotting of large data sets
        14. fixed a problem with xpa analysis plot stdin and ';' in the title
        15. increased the histequ internal buffer size to 16k
        16. enhance xpa analysis load command
        17. add multiple preload analysis files
        18. add hiearch analysis menus
        19. fixed cancel support for Namesvr
        20. fixed cancel support for DSS
        21. add virtual observatory support
        22. add jpeg,tiff,pgn,ppm support, via ghostscript
        23. fix a problem with min/max and DATASEC
        24. added 'load incr' commands
        25. added 'load xxxxx incr' command
        26. fixed minor memory leaks
        27. added analysis command log
        28. add xpa grid load/save
        29. add command line option grid
        30. fixed a problem with loading fits from a stream where the primary hdu contains an image
        31. enhance xpa/command support for dss
        32. add nameserver command line option
        33. fix a problem with panner and magnifer preferences
        34. fixed a issue when gz files are a few bytes short
        35. add support for wcs mosaics
        36. added support for wcs grids for all types of mosaics
        37. speed up printing by factor of 5
        38. add new grid type
        39. updated to wcssubs 3.0.5
        40. updated to ast 1.8.3
        41. updated to filter 1.0b9
        42. updated to fitsy 1.0b9
        43. command line options -file, -mosaic, -mosaicimage, -array, -url are now modal
        44. add -debug [options] support
        45. fixed a problem with contours and NAN data
        46. fixed a problem with contours and DATASEC
        47. split the pros, saoimage, and saotng parsers
        48. fixed a problem with text with the saotng parser
        49. fixed a problem with saotng,saoimage, and pros regions parsers and \n terminators
        50. add thin width contours
        51. add thin width grids
        52. fixed a problem with iraf mosaics
        53. 10.31.2001 Physical, Amplifier, and Detector coordinates are only displayed if keywords are present
        54. 11.1.2001 Diplay header will display primary header if requested
        55. 11.1.2001 add xpa cmap value command
        56. 11.2.2001 removed support for analysis with files with spaces cause it created a problem with filename with extensions
        57. 11.2.2001 fixed a problem with analysis regions files and special characters that was causing a problem with ellipse annlus
        58. 11.2.2001 add analysis $file[$region] macro
        59. 11.8.2001 fixed a problem with saving pixel table data
        60. 11.8.2001 add John Rolls new blueplate special stand dialog box
        61. 11.8.2001 removed 'Open Mosaic Images', since you can now do the same from the dialog box
        62. 11.8.2001 fixed a problem with printing/saving text from SimpleTextDialog
        63. 11.9.2001 load muliple files is now much faster
        64. 11.13.2001 fixed a problem with Simple List Box and windows
        65. 11.13.2001 default standard dialog box for windows is now the windows default
        66. 12.3.2001 expand update to update [now]
        67. 12.4.2001 fitsy++ now promotes all keyword finds to uppercase
        68. 12.4.2001 add 'get fits header # keyword <str>' command
        69. 12.4.2001 fix a problem with selecting projection region at high zoom factors
        70. 12.5.2001 fixed problems with length and orientation of projection region
        71. 12.6.2001 change 'get data values' syntax to include fits #
        72. 12.14.2001 fixed a problem with mosaics with linear wcs that caused a core
        73. 12.31.2001 supported added for regions and mosaics
        74. 1.2.2002 projection regions now support mosaics
        75. 1.3.2002 updated xparemote with proxy support
        76. 1.3.2002 add vo prefs
        77. 1.4.2002 add ciao pie region support
        78. 1.7.2002 fixed panda and wcs with rotation problem
        79. 1.9.2002 uprade ast to version 1.8.4
        80. 1.15.2002 enable Blt_ZoomStack for data plots
        81. 1.17.2002 fixed a problem with iraf mosaics with flipped segments and a round off problem
        82. 1.18.2002 add support for multiple aux contours
        83. 1.23.2002 fixed a problem with fits headers and the END keyword is not 8 chars
        84. 1.23.2002 fixed many problems with no fits loaded and user gui actions
        85. 1.24.2002 fixed a problem with looking for fits region extensions and a filter specified
        86. 1.24.2002 add regions file format and coord system to prefs menu
        87. 1.25.2002 get data values now spans mosaics and is in native coords
        88. 1.31.2002 ds9 version 2.1b5 released to the public

        Version 2.1b4

        1. fixed a problem very, very large images and int overflow
        2. add Page Setup preferences
        3. plot data is filtered to remove all non numeric data
        4. fixed a problem with plotting x,y data on alpha
        5. add manual grid layout
        6. text regions can now be rotated
        7. regions text now appears in the magnifier
        8. added the PANDA region
        9. added analysis file macro $entry
        10. fixed a problem with multiple menu entries for analysis files with multiple file templates
        11. default values of Analysis file parameters are now updated
        12. fixed a problem with clear analysis commands
        13. analysis tasks are now non-blocking
        14. add xy regions file format
        15. fixed problem with ps level 2 psuedocolor8 printing and inverse colormaps
        16. in regions files, the comment char '#' comments out til a new-line char
        17. extended $regions macro to include multiple properties and regions format
        18. fixed a problem with loading array data on a little endian machine and the arch is not specified
        19. fixed a problem with histogram equalization
        20. fixed a major problem with all negative float or double data and min/max issues
        21. fixed a problem with $regions and no wcs
        22. fixed a problem with printing ps level 2 and fits with NAN
        23. fixed a problem with running on a msb machine, and displaying on a lsb 24bit machine
        24. unrolled all mosaic algorithms to cycle thru all segments for each pixel
        25. add DATASEC for rendering and printing
        26. upgraded to tcl/tk 8.3.3
        27. add http and ftp macro expand to analysis
        28. fixed a problem with contour log scale
        29. add button 2 bindinds for panner
        30. iraf -fifo default is now /dev/imt1
        31. commented out error messages for bad iraf -fifo, -port, -unix
        32. add default imtoolrc values to fb_config if no imtoolrc file is found at startup
        33. add iis support for windows port
        34. add command: get data coordsys x y dx dy var
        35. add plot limits to plot tool
        36. add PROJECTION region
        37. add GETURL analysis macro
        38. Fits bin table keywords TUNITx are now process if available
        39. add $filename(root) macro
        40. update filename on load
        41. fixed a problem with Colormaps with a name with a single character
        42. added iraf 'non-display' imexamine support

        Version 2.1b3

        1. fixed a problem with angles of regions specified in WCS
        2. add xpa point 'regions save'
        3. add xpa point 'regions load'
        4. regions file format SAOIMAGE now supports annulus, ellipse annulus, and box annulus
        5. the obsolete Ftools regions file format support has been removed
        6. fixed many problems with IRAF regions file format
        7. fixed many problems with CIAO regions file format
        8. removed all support for Rosat All Sky Survey
        9. all comments and global settings have been removed from regions output if delimiter is set to semicolon
        10. fixed a problem with regions defined in WCS degrees and do not lie on an image
        11. fixed a problem with ellipse annulus and box annulus regions in regions files that contain only one region
        12. check for radius of length 0 for circle, annulus, ellipse, and ellipse annulus
        13. Added Histogram Equalization colormap scale distribution
        14. removed default as font option
        15. default font is now helvetica
        16. changed command line option -regionfile to -region
        17. fixed a problem with command line option -region and incorrect coordinates
        18. Change the 'Scale:User Limits...' dialog into non-modal 'Scale Parameters...'
        19. Added 'ZMax' Scale Limits algorithm
        20. fixed a problem with loading regions files with full pathnames with 'fits' in them
        21. Updated Prefs, command line options, and xpa points to reflect the new way minmax and scale options are handled
        22. Removed 'Scan On Load' prefs
        23. Added 'Source/Background' region property
        24. Add support for 'Source/Background' region property to SAOtng region parser
        25. Fixed a color problem with pseudocolor 8 frames and black/white. This showed up in new Sun hardware and Solaris 8 sofware
        26. Fixed a problem with Postscript printing in pseudocolor 8 colormode
        27. The magnifier now updates during blinking
        28. Added pixel table commands to command line options and xpa
        29. Add -single command line option
        30. Add default region shape to preferences
        31. New Analysis File format supported, with new macros $message, $text, $plot
        32. Add -analysis command line option
        33. Add subcommands to xpa analysis: load,clear,message,text,plot
        34. Add Analysis File macros $data and $image
        35. Add autoload FITS regions option
        36. Add load FITS Region file to command line options and xpa regions
        37. DSS servers now have limits as to size of image downloaded
        38. Open Array now presents a dialog box if no specs are given
        39. Now supports compression with .ftz extension
        40. All non-modal windows raise to top when re-invoked
        41. Added Line Width to all regions
        42. Comments are now retained for regions files
        43. Add Line Width to contours
        44. Changed xpa delim to strip yes/no
        45. Contour methods are 'Faster' and 'Better'
        46. Add Convert Contours to polygons
        47. Add $xpa analysis macro
        48. Add $param analysis macros
        49. Fixed a problem with crosshair and rebinning
        50. Fixed a problem with pan click and drag and fits binary tables
        51. Add undo regions
        52. Add cut/copy/paste regions
        53. Changed the preferences file and startup file to be consistent across platforms
        54. Add 'Pan then Zoom' to button 2 options
        55. Add support for FITS 3D data cubes
        56. Add Edit button row
        57. Add default mode to prefs
        58. Fixed a problem with file names starting with 'file'
        59. Add xpa regions shape/color/width
      saods9/ds9/doc/release/r2.2.html000644 000765 000000 00000044006 10415010756 016624 0ustar00joyewheel000000 000000 DS9 Version 2.2 Release Notes

      Version 2.2 Release Notes

        Version 2.2.1

        1. 11.04.2002 fixed bin smooth buttons.
        2. 11.07.2002 remove debug statements in dss.tcl
        3. 11.07.2002 fixed a problem with pure virtual method called when frame was deleted and histequ was the active scale.
        4. 11.07.2002 fixed a problem with pasting filters that contains '\n' on the end of the string.
        5. 11.14.2002 add W3Browse to archive menu
        6. 11.14.2002 Web Display: for redirection, first use 'location' meta data parameter, then look for first 'href' in html to find the redirection url.
        7. 11.14.2002 move 'IISInit' after 'ProcessCommandLine' so that iis command line options take affect.
        8. 11.14.2002 remove menu short cut options. Too many conflicts and unable to support multiple languages.
        9. 11.18.2002 change prefs(scalemode) to prefs(scale,mode), prefs(scalescope) to prefs(scale,scope) and added prefs(scale,scope) to prefs written.
        10. 11.18.2002 change prefs(minmaxmode) to prefs(minmax,mode), prefs(minmaxsample) to prefs(minmax,sample)
        11. 11.18.2002 changes to Archive Servers preferences take effect immediately.
        12. 11.19.2002 Web Display: improved support for fits mime-types.
        13. 11.20.2002 Web Display: improved HVVerifyURL repairing urls.
        14. 11.20.2002 Archive: add IRAS MSX support.
        15. 11.22.2002 add 'update now' when a new display is received. This will allow 'movies' from iraf to display properly.
        16. 11.22.2002 ds9 version 2.2.1 released to the public.

        Version 2.2

        1. 09.03.2002 add Archive Server user prefs.
        2. 09.03.2002 when HV window is unable to parse input, place a html header around it and display it as text.
        3. 09.04.2002 update FITS Bin Table WCS keywords to conform to 25 June 2002 WCS FITS Documentation.
        4. 09.04.2002 add support for FITS Bin Table Alt WCS keywords.
        5. 09.04.2002 corrected minor errors in xpa documentation.
        6. 09.04.2002 fixed a minor memory leak when frame is deleted and an image is still loaded.
        7. 09.05.2002 added IPAC NED to archive menu.
        8. 09.05.2002 add 'marker # move to canvas x y' command for CXC.
        9. 09.05.2002 add 'marker # angle' command for CXC.
        10. 09.09.2002 change ds9 regions syntax for ellipse annulus and box annulus from old saoimage to funtools syntax.
        11. 09.10.2002 undid grid WIDGETBB fix. The results where not acceptable.
        12. 09.12.2002 fixed a nasty bug with binning FITS bin tables and high bin factor values.
        13. 09.13.2002 add Match Scales to Frame menu. This matches all scale parameters across all frames.
        14. 09.16.2002 add Grid debug option.
        15. 09.17.2002 upgrade to ast 1.8.9. This corrected two problems. First, incorrect grids were generated for dss images in the southern hemisphere. Second, a problem with galactic grids that crossed 0 degrees.
        16. 09.17.2002 modify grid code to not to set attributes unless really needed. ast 1.8.9 tends to set attributes much more often than previous versions.
        17. 09.17.2002 fixed a problem with reconizing non-standard wcs in the header.
        18. 09.17.2002 add more xpa grid support for coordinate systems, grid type, and view options.
        19. 09.18.2002 fixed grid axes label and title spacing problems in publication mode.
        20. 09.18.2002 add optional grid axes label and title spacing parameters that override internal calculated values.
        21. 09.18.2002 the grid x-axis is now plotted on the bottom of publication grid.
        22. 09.18.2002 zoom to fit now makes room for labels for publication grid.
        23. 09.19.2002 fixed a problem with Clear Analysis File that deleted too much of the Analysis Menu.
        24. 09.19.2002 support new vo list syntax of a tab delimited newline terminated list of three parameters, xpa, title, and url.
        25. 09.20.2002 PHYSICAL Coordinate System: first look for WCSNAMEx='PHYSICAL', then look for LTM/LTV keywords.
        26. 09.24.2002 fixed yet another bug with binning, and TLMIN/TLMAX keywords whose values were not powers of 2.
        27. 09.24.2002 fixed a problem with cores and bad wcs grids. ds9 now checks to make sure ast generated a vaild grid.
        28. 09.24.2002 WebDisplay: plain text is now displayed using <pre>.
        29. 09.24.2002 WebDisplay: default method for forms is now GET.
        30. 09.24.2002 WebDisplay: default width for TEXT form elements is 20
        31. 09.24.2002 XPA nameserver: http has a error, so just clear errorInfo.
        32. 09.25.2002 fixed a bug in wcsinit.c, line 328 and line 409.
        33. 09.25.2002 add Debug Bin option.
        34. 09.26.2002 upgrade to xpa 2.1.3
        35. 09.26.2002 upgrade to wcssubs 3.1.3
        36. 09.26.2002 upgrade to filter 1.2b1
        37. 09.26.2002 upgrade to fitsy 1.2b1
        38. 10.01.2002 Web Display: more robust URL parseing
        39. 10.01.2002 Web Display: add 'Save to Fits File' option
        40. 10.01.2002 fixed 'xpaget ds9 bin cols' to return only 2 cols if bin depth is 1.
        41. 10.07.2002 Web Display: add support for new window with button click.
        42. 10.08.2002 Change in saotk Makefiles to correct a problem with Bison and Flex.
        43. 10.08.2002 Analysis Text now updates as text arrives.
        44. 10.08.2002 add xpa/command line support for MatchFrames.
        45. 10.08.2002 don't write WCS for Save Fits Resample and DSS fits.
        46. 10.10.2002 Web Display: hidden fields are not totally encoded if url is present.
        47. 10.17.2002 Fixed a problem with default fonts. Add the option of 'Default', which will not set any font options, if selected. This allows the native system to choose the best font/size combo.
        48. 10.18.2002 Add ProcessFrameCmd.
        49. 10.18.2002 Add system wide preference file support.
        50. 10.18.2002 Add Default mode. It just updates the infobox and graphs, with no regions.
        51. 10.21.2002 Fixed a problem with old prefs files and marker(system).
        52. 10.22.2002 Fixed a problem with MINMAX Sample. Sample intervals are now equal in row and columns.
        53. 10.25.2002 Fixed a problem with vo and errors that occur when connecting to the vo server.
        54. 10.25.2002 Add Match Colorbars and Match Scales xpa/command line options.
        55. 10.25.2002 Changed Analysis plot error reporting to include first line of received data.
        56. 10.25.2002 Fixed a problem with DSS and editing the dialog with another image loaded.
        57. 10.27.2002 Add filename to ds9/funtools regions file header.
        58. 10.29.2002 Add Lock Crosshairs xpa/command line options.
        59. 10.31.2002 ds9 version 2.2 released to public.
        60. Version 2.2b2

        1. 07.31.2002 fixed a problem with hv and urls of the form foo.com/foo/bar.html#foo. Now, the html is not reloaded before the goto is executed.
        2. 08.01.2002 add adjust text size support to web browser
        3. 08.01.2002 add boxcar and tophat smooth support for binning.
        4. 08.05.2002 add -vo commandline and xpa support
        5. 08.05.2002 fixed a problem for the windows port where windows has been configured to open a fits file with ds9. In this case, the file path name passed to ds9 is actually in 'dos' format. So we used a cygwin function to convert to a posix format. This only occurs in a command line file name option.
        6. 08.06.2002 fixed a problem with smooth and depth>1.
        7. 08.06.2002 fixed a problem with save fits resample.
        8. 08.07.2002 the user can now display the horz and vert graphs, even in tile or blink mode
        9. 08.07.2002 ds9 will operate in single mode, even if in tile or blink mode, if there is just one frame.
        10. 08.08.2002 add Gaussian smooth support for binning.
        11. 08.08.2002 fixed a problem with the plot tool and displaying discrete x y e1 y2 data. The correct colors are now used.
        12. 08.08.2002 the plot tool will now always update the plot title, x axis label, and y axis label when receiving new data.
        13. 08.08.2002 add xpaset -p ds9 analysis plot close support.
        14. 08.08.2002 add Know Issues Documentation
        15. 08.12.2002 add http proxy support.
        16. 08.12.2002 fixed a problem with the close box for the bin dialog box.
        17. 08.20.2002 add support for default fonts to preferences.
        18. 08.23.2002 remove timeouts for all http requests with optional cancel support.
        19. 08.23.2002 fixed a number of items with web display.
        20. 08.26.2002 reformat all documentation to remove references to Helvetica
        21. 08.26.2002 bring grid WIDGETBB in by one so that the border can be seen and printed.
        22. 08.26.2002 fixed a problem with web gifs under windows. The output channel needed an -translation binary flag.
        23. 08.26.2002 adjust font sizes for web display to more closely follow those of Netscape and IE.
        24. 08.27.2002 add 'Save as Fits', 'Save as Image', and 'Page Setup' buttons.
        25. 08.27.2002 add 'First' and 'NVSS' archive server menu items.
        26. 08.28.2002 add auto coordinate feed to HV for archive servers.
        27. 08.30.2002 ds9 version 2.2b2 released to public.

        Version 2.2b1

        1. 04.05.2002 fixed a problem with xpa contour load.
        2. 04.05.2002 improved parsing of analysis menu file. In particular, keywords like 'help', 'param', and 'end' can be used more freely.
        3. 04.10.2002 add tag suppport for regions.
        4. 04.11.2002 add background marker stack. The default stack is in the foreground.
        5. 04.11.2002 fixed checks for can Edit, can Move, can Rotate, and can Delete properties thru out marker code.
        6. 04.11.2002 add HIGHLITE marker property.
        7. 04.12.2002 add $null macro to analysis support.
        8. 04.17.2002 fitsy++ now builds an keyword index to search for keywords. Previously, it would search sequentially.
        9. 04.18.2002 add a fix to ps level 2 driver to prevent a '\n%' in the image data. Seems the perl script 'assemble' does a global search/replace that results in corrupted image data. This fix includes a redesign of a previous fix that worked around an issue with old versions of dvips that will incorrectly process'\n%%'.
        10. 04.18.2002 upgrade to WCS 3.1.0
        11. 04.24.2002 start to add support for multiple wcs's.
        12. 04.25.2002 add support for multiple wcs's in infobox.
        13. 04.26.2002 improve tag support for regions. All functionality of selected regions are now available for tagged regions.
        14. 04.30.2002 add marker command var command to support regions files in tcl vars.
        15. 05.08.2002 recalc polygon center when adding or deleteing vertex.
        16. 05.13.2002 complete implementation of multiple wcs support. ds9 now supports a total of 31 coordinate systems. Furthermore, of the 27 WCS coordinate systems, both sky coordinates and linear coordinates are fully supported.
        17. 05.13.2002 complete re-implemenation of map() functions. Now all map functions are in the fits case, and only map between REF and IMAGE/PHYSICAL/AMPLIFIER/DETECTOR/WCS/WCSA... coordinate systems. This cleans up alot of code and confusion.
        18. 05.14.2002 add support for TCROT and CDn_1 WCS keywords in FITS bin tables.
        19. 05.16.2002 dramatically speed up parsing wcs keywords by substituting the fitsy++ index based keyword search routine for Doug Mink's 'ksearch' routine. With multiple wcs's in a large mosaic this can save up to a minute at load time.
        20. 05.16.2002 fixed a minor problem with xpa dss. http has a error, that carries over and is caught by xpa.
        21. 05.16.2002 analysis $text windows will not appear if there is no output, or just an <cr>.
        22. 05.16.2002 fixed display header to correctly display 80 chars, not 79.
        23. 05.16.2002 fixed a problem with iis and very long file names. names up to 256 chars are now allowed.
        24. 005.20.2002 AMPLIFER and DETECTOR coordinate menu entries are now an option, to be enabled via the Preferences:Misc menu option. Changes will take affect at startup.
        25. 05.23.2002 add support for 3D binning of fits bin tables.
        26. 05.24.2002 made changes to grid.C to handle the special LONG/NPOL skyframe coordinate system used by Chandra.
        27. 05.24.2002 add -xpa and xpa prefs to allow a user to enable or disable initialization of XPA at startup
        28. 05.28.2002 add -xpa [inet|local|unix|localhost] xpa point.
        29. 05.29.2002 correct 3D binning to properly reflect filter params in the filename.
        30. 06.03.2002 fixed a problem with Fits Bin Tables, odd length rows and referencing shorts.
        31. 06.04.2002 add support for multiple wcs with skyframe panner compass, along with prefs.
        32. 06.04.2002 add -xpa noxpans support.
        33. 06.04.2002 match frames wcs now uses the wcs system and wcs skyframe specified in align to wcs.
        34. 06.05.2002 upgrade to xpa 2.1.1
        35. 06.06.2002 add wcs master menu and buttons
        36. 06.06.2002 sync xpa wcs and command line wcs command.
        37. 06.10.2002 xpa wcs and commanline -wcs now uses same code to process
        38. 06.10.2002 xpa nameserver format now skyformat
        39. 06.10.2002 added support for variable args for xpa contour and -contour.
        40. 06.11.2002 add match frames physical, amplifier, detector. this does not handle rotation, nor orientation.
        41. 06.11.2002 the master wcs menu now modifies the Region:File Coordinate System menu also
        42. 06.11.2002 fixed a problem with list projection and linear wcs. the thickness parameter was not written correctly.
        43. 06.12.2002 fixed a problem with -tile and -region commandline options. The ds9 window must be realized before processing region files.
        44. 06.13.2002 fixed a problem with -pagesetup commandline option.
        45. 06.13.2002 fixed a problem with ds9parser.Y, prosparser.Y, and tngparser.Y when processing coordinates when no coordinate system has been specified.
        46. 06.13.2002 fixed a problem with -pan to command line option. The ds9 window needs to be realized (and the matrices defined) before processing.
        47. 06.13.2002 binning on a third column now invokes the data cube dialog box.
        48. 06.14.2002 add smaller buffer sizes to binning menus. We want to do this for those building large 3D binning movies.
        49. 06.19.2002 implemented new grid support. Grids now handle rotated images much better. Numerics are better positioned.
        50. 06.27.2002 updated to WCSSUBS 3.1.1. This corrects a number of TNX problems.
        51. 06.27.2002 add File:XPA info menu item.
        52. 06.27.2002 add XPA regions selected feature.
        53. 06.28.2002 Analysis $geturl macro calls are now logged.
        54. 07.01.2002 add support for limited web browser
        55. 07.01.2002 help reference manual now uses built-in brower, and is static.
        56. 07.02.2002 fixed a problem with cross-platform displays and 16 bit truecolor.
        57. 07.08.2002 fixed a problem with regions and changes in the bin factor of fits bin tables.
        58. 07.08.2002 add $xpa_method analysis macro.
        59. 07.08.2002 add @@xpa_method@@ support in hv.html
        60. 07.22.2002 fix numerous problems with internal web browser.
        61. 07.23.2002 add async support for internal web browser.
        62. 07.24.2002 changed Makefiles so that parser.C, parser.C.h, and lex.C are now archived. Therefor, builds no longer need bison and flex, unless changes have been made to the parser.Y. This gets around problems with different versions of bison.
        63. 07.25.2002 add support for the Compass region.
        64. 07.25.2002 add vo proxy and internal hv support.
      saods9/ds9/doc/release/r2.3.html000644 000765 000000 00000005727 10415010756 016634 0ustar00joyewheel000000 000000 DS9 Version 2.3 Release Notes

      Version 2.3 Release Notes

        Version 2.3b1

        1. 11.04.2002 add multi-language support structure.
        2. 12.02.2002 configure http user agent to 'ds9'. This fixes a problem with www.google.com
        3. 12.02.2002 add Help DS9 Home Page menu Item.
        4. 12.03.2002 Web Display: implemented 'Content-Encoding' and modified 'Mime-Type' to use new proposed FITS Mime-Type RFC.
        5. 12.03.2002 Web Display: when the mime-type is set to 'application/octet-stream', try to parse the url, looking for a valid fits or fits.gz image. If so, load as a fits. If not, save to disk.
        6. 12.03.2002 Web Display: reduced the size of fonts by -2 to more closely match netscape and internet explorer.
        7. 12.03.2002 Web Display: updated Archive menus to use new IRAS web interface.
        8. 12.03.2002 Web Display: add font size argument to HV. Now, web sites can have different default font sizes, based on what looks the best.
        9. 12.10.2002 Fixed a problem with calculating LTMV keywords from alt WCS keywords in the case of WCSNAME='PHYSICAL'
        10. 12.10.2002 Add support for TDMIN and TDMAX FITS bin table keywords.
        11. 12.10.2002 Add 'Delete All Frames' support.
        12. 12.10.2002 only use fits keyword inheritence if INHERIT keyword is present in the header.
        13. 12.11.2002 Fixed a problem with WCS headers and INHERIT, which resulted in duplicate keywords. This made wcssubs very confused.
        14. 12.11.2002 Add 'Delete Selected Regions' to Regions menu.
        15. 12.11.2002 Add confirmation dialog to 'Delete All Regions'.
        16. 12.12.2002 Display Header List dialog is now 40 chars wide.
        17. 12.12.2002 Web Display: add initial coordinates to ADS archive sites
        18. 12.16.2002 Add *.fit and *.fts to fits dialog box templates.
        19. 12.16.2002 Add support for GUI Groups, based on region tags.
        20. 12.17.2002 Add HSV colormap.
        21. 12.18.2002 Fixed a problem with the PANDA Region at zooms other than 1.
        22. 12.19.2002 DS9 version 2.3b1 released to the public.












      saods9/ds9/doc/release/r3.0.html000644 000765 000000 00000103440 10415010756 016621 0ustar00joyewheel000000 000000 DS9 Version 3.0 Release Notes

      SAOImage DS9 Version 3.0 Release Notes

        Version 3.0

        1. 12.24.2002 TCL/TK: update to 8.4.1
        2. 12.24.2002 BLT: update to 2.4z
        3. 12.24.2002 TKIMG: update to 1.3rc
        4. 01.03.2003 XPA: fixed a problem with 'xpaget ds9 regions selected'
        5. 01.28.2003 SAVEAS: now saves all slices of a data cube, if the display mode is single.
        6. 01.28.2003 GUI: Add 'wm protocol . WM_DELETE_WINDOW QuitDS9' for main window so that tcl/tk 8.4 does not segv when a user double clicks on a close window icon.
        7. 01.29.2003 GCC: add support for gcc 3.0/3.2
        8. 01.29.2002 GCC: updated saotk/FlexLexer.h from flex 2.5.27, available at http://lex.sourceforge.net/
        9. 02.04.2003 WINDOWS: modify configuration files for tkimg1.3 and tkhtml to support windows.
        10. 02.05.2003 WCS: upgrade to 3.3.0
        11. 02.06.2003 ARCHIVE: the default ADS max search size is now a radius of .1 arcmin.
        12. 02.06.2003 XPA: add '-xpa tcl' command line option. By default, disable xpa tcl access since it is a major security risk.
        13. 02.07.03 FITS: fixed a problem with loading fits files via the url menu or command line.
        14. 02.07.03 HTTP: loading images via url http processes the image based on the http header mime type and encoding, not the file name. images loaded via url ftp are still processed based on file name.
        15. 02.07.03 PLOT: fixed a problem with global vars and the plot widget.
        16. 02.11.03 BINNING: fixed a bug with the bin table smoothing support. If the bin factor is large enough to bin the entire image in the bin buffer, ds9 would segv by trying to read out of bounds.
        17. 02.25.03 XPA: fixed a bug with loading an image from xpa stdin without a filename.
        18. 02.25.03 XPA: add 'fillbuf=false' to all xpa receive commands that do not use $buf. This will speed up processing because the data socket is not opened.
        19. 02.25.03 XPA: fixed a problem with appending an wcs via xpa. The appended wcs is now positioned at the end, not the beginning. also, a problem occurred when the 'END' card was not the last card of the header. This has been fixed.
        20. 02.25.03 XPA: changes to xpa regions syntax. 'moveback'/'movefront' are now 'move back'/'move front', 'selectall'/'selectnone' are now 'select all'/'select none', and 'deleteall' is 'delete all'. Backward compatibility has bee maintained
        21. 02.25.03 XPA: add 'select group <groupname>' and 'delete select' to xpa regions access point.
        22. 02.26.03 HV: add support for gif,png,ppm,xbm,xpm file formats
        23. 02.27.03 HV: fixed some problems with tkhtml uri resolver. This cleans up a lot of tcl code.
        24. 03.04.03 HV: images are now scaled if the width/height args are provided in the html src.
        25. 03.04.03 ARCHIVE: add chandra archive web chaser.
        26. 03.12.03 COLORMAP: Fixed a problem with InitColorbar and a colormap of A or B.
        27. 03.12.03 ANALYSIS: all comments after # are ignored.
        28. 03.12.03 ANALYSIS: non macros can be escaped by using $$.
        29. 03.31.03 COMMAND: Add -frame command line option.
        30. 04.08.03 GUI: Remove Magnifier Mode option, along with Magnifier Replicate code.
        31. 04.23.03 HST WFPC: Mosaic images must be loaded directly. this fixes a problem in that it was not possible to autodect a WFPC2 image in an incoming data stream, such as stdin.
        32. 05.12.03 API: *** CHANGE *** Frame load syntax has changed to make it consistent across all modes and file formats. In particular, the general syntax is: <frame> load fits|array <filename> mmap|alloc|alloc gz|channel|shared|socket|var <options>
        33. 05.12.03 API: *** CHANGE *** shared memory loads no longer require the size of the memory segment.
        34. 05.20.03 WCS: update to 3.3.4
        35. 05.20.03 AST: update to 2.0
        36. 05.22.03 GRID: fix a problem with grid.C interface to AST. The text bounding box code was returning the coordinates in a clockwise manner. It needs to be returned in an anti-clockwise manner.
        37. 05.22.03 GRID: Add support for user specified Grid Axes Numerics gap.
        38. 05.27.03 GRID: Fixed a problem with the bounding box of a publication grid. it was .5 pixels off.
        39. 05.28.03 GUI: Fixed a problem with 'get cursor'. Sometimes, as with loading dss images, the matrices were not updated in time, and 'get cursor' returned bogus values. Now all calls to 'get cursor' force an update.
        40. 06.02.03 GUI: fixed several problems with examine mode
        41. 06.02.03 ARCHIVE: add NOAO 4MASS and SIRTF and NOAO NSA to archive menu
        42. 06.09.03 RGB: support is FINISHED! now, lets see how its works!
        43. 06.11.03 RGB: Add Lock Channels to lock most Scale and Bin parameters between channels.
        44. 06.16.03 GRID: Add numerics spacing to save/load grid configuration
        45. 06.16.03 FITS: Add 3D array data cube
        46. 06.17.03 FITS: Fixed a problem with an incorrect data cube dialog and wfpc2 mosaics and rgb data cubes. Basically, these two cases are not really data cubes.
        47. 06.17.03 RGB: Replace RGB menu with RGB dialog.
        48. 06.17.03 XPA: Fixed a problem with xpaget ds9 regions [include|exclude|source|background].
        49. 06.18.03 REGION: fix a problem with non-linear physical coordinates and save/load regions.
        50. 06.18.03 WCS: fix a problem with determining the rotation of a wcs coordinate system. previously, CRPIX was used as the start point. This does not work in cases where the tangent point is very far off the image. Instead, (1,1) is used.
        51. 06.18.03 WCS: Remove preference Panner WCS origin. This is stupid and breaks with the previous change. Just remove it instead of trying to fix it.
        52. 06.26.03 FITS: Add support 3D array data cubes.
        53. 06.30.03 RGB: Add support for RGB array data cube.
        54. 07.01.03 DSS: Fixed namesrv.tcl and dss.tcl to promote more robust error handling. In particular, http error codes are now checked, and the results are verified before proceeding
        55. 07.01.03 XPA: fixed a problem with $ds9 -xpa tcl. The next argument was being ignored.
        56. 07.02.03 DSS: fixed another problem with namesrv.tcl. SAONED and SAOSIMBAD were returning incorrect values for southern hemisphere.
        57. 07.02.03 HTTP: remove http log from preferences and added http log and ftp log to debug menu
        58. 07.03.03 GUI: fixed a problem with open file dialog box. if the user clicked 'cancel', an error message would result. this has been corrected.
        59. 07.09.03 FITS: add Large File Support for Linux. Linux is still restricted to ~2.5Gb.
        60. 07.10.03 FITS: add FLUSH parameter for fitsy++ array.
        61. 07.10.03 FITS: Major change in behavior of fitsy++ streams and FLUSH. Only socket and socketgz will flush, all others will not flush the buffer after an error, or after successfull loading a fits image.
        62. 07.11.03 XPA: add DATACUBE support.
        63. 07.14.03 WCS: Fixed a problem with WCS XLON-TAN (NPOLE) and AST. NPOLE is a special wcs equ coord system, and has to be handed by wcs2ast().
        64. 07.15.03 XPA: add xpa iis access port for control of some iis functionality.
        65. 07.17.03 RELEASE version 3.0b4

        66. 07.25.03 FITS: add MMAPINCR memory access mode. This only mmaps the data needed, not the entire file. This allows a user to view many small segements of a very large file.
        67. 07.28.03 TCL/TK: upgrade to 8.4.4
        68. 07.30.03 XPA: add regions fg/bg support.
        69. 08.05.03 PLOT: reimplement analaysis plot widget to support unlimited number of data sets.
        70. 08.07.03 ARCHIVE: add Rosat All-Sky survey
        71. 08.08.03 XPA: add PLOT, which allows full control over all plot widgets via xpa.
        72. 08.13.03 COLORMAP: fixed a problem with loading lut colormaps under linux. ifstream behaves differently between solaris and linux.
        73. 08.14.03 XPA: changed xpaget array. Now returns the array data in the current frame.
        74. 08.15.03 RELEASE version 3.0b5

        75. 08.18.03 FITS: add Large file support for darwin and linuxppc
        76. 08.18.03 LINUXPPC: fixed a problem with linking linuxppc. The copy of libX11.a that comes with Yellow Dog 3.0 is bad. So we can't links static.
        77. 08.19.03 XPA: add options to xpa update so that 'update idletasks' is not run at the end of file loads. This allows the user to do several incremental loads without updating the screen.
        78. 08.19.03 API: only update idletasks for horz/vert graph if graphs are on
        79. 08.19.03 API: add debug idletasks support.
        80. 08.29.03 GCC: gcc 3.3 is now supported. For all code, if GNUC >=3, new <sstream> are used. For all code, GNUC <3, <strstream> is used.
        81. 08.29.03 PLOT: fixed a problem with saving plot data in x,y,ye format
        82. 08.29.03 FITS: add LFS for solaris.
        83. 08.29.03 COMMAND: add -analysismenu command line option at the request of CXC.
        84. 08.29.03 COMMAND: fixed a problem with -pan and -pan to and other comman line options that follow.
        85. 09.02.03 FITS: add LFS for alpha.
        86. 09.04.03 SOLARIS: add new solaris64 port. Requires gcc 3.3 or greater.
        87. 09.04.03 XPA: upgrade to 2.1.4
        88. 09.04.03 FILTER: upgrade to 1.2.3b1
        89. 09.04.03 FITSY: upgrade to 1.2.3b1
        90. 09.06.03 SOLARIS: fixed a problem with 64bit machines and truecolor displays.
        91. 09.06.03 FITS: add support for multiple extension fits data cubes.
        92. 09.08.03 REGION: fixed a problem with projection regions and an undefined variable.
        93. 09.08.03 BINNING: fixed a problem with fits bin tables without TLMIN/TLMAX or TDMIN/TDMAX. the center was incorrectly being calculated.
        94. 09.08.03 ARCHIVE: fixed a problem with the NOAO archive web display with no images loaded. The variables 'ra' and 'dec' were not defined.
        95. 09.08.03 PLOT: ixed a problem with the plot widget and the preferences unique plot parameter.
        96. 09.09.03 PLOT: project plot xaxis are now in coordinate system specified via the marker dialog box.
        97. 09.11.03 PLOT: fixed a problem with the line, ruler, and projection regions and properly displaying wcs linear coordinates
        98. 09.11.03 WCS: cleaned up a lot of code for setting/adjusting coordinate menus
        99. 09.11.03 RGB: loading a new channel in a rgb image will no longer delete regions, grids, or aux contours.
        100. 09.15.03 FITS: removed BITPIX32 define. using <int> instead since it is defined as a consistent 4 bytes across all platforms.
        101. 09.18.03 RGB: split lock rgb into lock scale and lock bin.
        102. 09.21.03 BINNING: frames now have 'memory' of certain bin paramenters. It is now possiable to set bin parameters before loading a bin table.
        103. 09.22.03 RGB: InfoBox now displays all values for RGB images, not just the current channel value.
        104. 09.22.03 API: change names of various tcl marker variables
        105. 09.22.03 REGION: add prefs for regions color, width, properties, font
        106. 09.22.03 GUI: add HJKL key bindings as substitute for arrow keys
        107. 09.24.03 RELEASE version 3.0b6

        108. 09.29.03 WCS: changes to getWCSRotation, getWCSOrientation to better reflect the actual rotation
        109. 09.30.03 XPA: add xpa/command line options for configuration of info panel
        110. 09.30.03 API: change variable 'mosaic(fast)' to 'ds9(mosaic,fast)'
        111. 09.30.03 FITS: add new support for blank/Inf/NaN background color
        112. 10.01.03 FITS: add support for image background color.
        113. 10.01.03 RGB: add support for RGB lock colorbar
        114. 10.23.03 HV: add support for VO DIS
        115. 10.23.03 HV: fixed a problem with forms and encrypting field names, allow with the returned value
        116. 10.23.03 GUI: Change mode 'Default' to 'None'. We can't use the term 'default' because with problems with tcl switchs and the default keyword
        117. 10.24.03 WCS: add support for WCS AIPS projections via the preferences menu.
        118. 10.24.03 API: add acknowledgment
        119. 11.03.03 COMMAND: fixed a problem with command line options -mosaicimage, -mosaicimagewfpc2, -medatacube
        120. 11.03.03 FITS: fixed a problem with multiple extension data cube with all memory models except MMAPINCR.
        121. 11.03.03 COMMAND: fixed a problem with command line options -mosaicimagewcs, -mosaicimageiraf, -mosaicimagewfpc2, -medatacube and RGB frames
        122. 11.05.03 WCS: remove internal wcsZoom matrix. All wcsZoom actions are now applied to the current  zoom matrix. This fixes a number of problems with 'Match Frames to WCS'
        123. 11.05.03 WCS: fixed a problem with rotated images and examine mode.
        124. 11.07.03 REGION: ffixed a problem with regular panda regions. The code incorrectly determined a regulier panda was irregulier and output it as such.
        125. 11.07.03 REGION: fixed a problem with region angles in general, where there there was a rotation in the wcs.
        126. 11.07.03 HV: add Server Apache Refresh support.
        127. 11.07.03 XPA: add xpaget ds9 fits size <coordsys> <skyformat>
        128. 11.11.03 XPA: add regions group support.
        129. 12.01.03 WCS: update to 3.5.0
        130. 12.01.03 XPA: add get contour <coordinate system> <skyframe> support.
        131. 12.05.03 WCS: update to 3.5.1
        132. 12.05.03 XPA: upgrade to 2.1.5
        133. 12.05.03 FILTER: upgrade to 1.2.3
        134. 12.05.03 FITSY: upgrade to 1.2.3
        135. 12.05.03 AST: upgrade to 3.0
        136. 12.05.03 IIS: upgrade to 1.0
        137. 12.10.03 REGION: casted all XPoint to short. There is a problem with rendering line segments at very high zoom. X11 overflows and the lines become random. We should check that screen coordinates never exceed SHRT_MAX
        138. 12.10.03 ANALYSIS: geturl() macro is formated before execution.
        139. 12.11.03 FITs: add mosaic image next wcs support.
        140. 12.15.03 RGB: fixed a problem with wcs matching when one of the wcs is flipped in XX
        141. 12.15.03 WCS: fixed a problem with wcs matching when one of the wcs is flipped in XX
        142. 12.15.03 REGION: load fits regions now utilitize the current region color, width, and font
        143. 12.24.03 WCS: back out change #50. We have to use the projection tan point to correctly build mosaics and RGB images.
        144. 01.09.04 AST: upgrade to 3.1.1
        145. 01.09.04 GRID: pass PV,PROJP,PS keywords to AST
        146. 01.12.04 TCLLIB: add tcllib 1.4. This package contains a number of useful tcl packages
        147. 01.12.04 FTP: upgrade to 2.4
        148. 01.13.04 TCL: upgrade to 8.4.5
        149. 01.13.04 TK: upgrade to 8.4.5
        150. 01.13.04 HTTP: add support for proxy authentication.
        151. 01.14.04 COMMAND: fixed a problem with printing from the command line. The canvas widget was not fully realized before printing, resulting in no image.
        152. 01.15.04 MKTCLAPP: made two changes to the default init script of mktclapp. The first sees that the the virtual file system is init'd before the first call to Tcl. This allows Tcl to 'see' encoding files. The second, for windows only, makes sure that the Tcl windows file system is init'd before the first call to Tcl.
        153. 01.15.04 MKTCLAPP: add default encoding files to ds9.mta, now that we can use them.
        154. 01.22.04 GUI: Add preference for default temporary file directory.
        155. 01.23.04 XPA: add xpa imexam.
        156. 01.25.04 XPA: add xpa fits header.
        157. 01.25.04 XPA: add xpa fits depth.
        158. 01.25.04 XPA: modified xpa fits size.
        159. 01.25.04 GUI: add language support for info and error messages.
        160. 02.01.04 WCS: more on #50 and #141. If wcs projection is Zenithal, use CRPIX as reference point to determine wcs rotation and oriention. Otherwise, use image center point.
        161. 02.04.04 CONTOUR: modified smooth algorithm. We now SMOOTH the entire image with a gaussian kernal. Previously, we would block by 2 before smoothing with a boxcar kernal. Finally, the default method is BLOCK.
        162. 02.04.04 CONTOUR: A .5 error has been removed from the BLOCK algorithm.
        163. 02.04.04 CONTOUR: the number of contour levels has been inconsistant in the pass. this has been fixed. If the number of levels is 1, the high cut value is used.
        164. 02.04.04 CONTOUR: fixed log scale bug. it was incorrectly calculating the levels.
        165. 02.05.04 SAVEAS: jpeg,tiff,png,ppm support is now internal and available to all ports. gs is no longer needed.
        166. 02.10.04 REGION: add show/hide support for fg and bg regions.
        167. 02.10.04 COLORMAP: fixed a problem with the -cmap value x y command. On truecolor visuals, we need to be realized before we start to manipulate the colormap.
        168. 02.10.04 FITS: cleaned up smooth convolve code. same speed, easier to understand.
        169. 02.11.04 GUI: Add Colorbar Parameter dialog.
        170. 02.11.04 COLORBAR: add support for load/save contrast/bias.
        171. 02.12.04 EXPORT: split EXPORT from SAVEAS. Currently only FITS is supported.
        172. 02.17.04 CONTOUR: when update data cube slice, automatically regenerate contours.
        173. 02.18.04 REGION: the marker menu is now enabled if no frame or an empty frame is available.
        174. 02.20.04 SCALE: add Auto MinMax. by default, use SCAN for single and SAMPLE for Mosaic and DataCube files
        175. 02.20.04 SCALE: fixed a problem with scobe being reset to LOCAL.
        176. 02.23.04 CONTOUR: fixed a problem with incorrect contours for mosaics and rgb images at startup.
        177. 02.23.04 XPA: add cd (current directory) command
        178. 02.24.04 AST: upgrade 3.2.4
        179. 02.24.04 DOC: added support for generating postscript and pdf versions of the reference manual.
        180. 02.25.04 CONTOUR: convert contours to polygons will now also convert any aux contours.
        181. 02.27.04 PANDA: fixed probems with GUI add angle.
        182. 02.27.04 CIRCLE: new GUI edit algorithm.
        183. 02.27.04 ANNULUS: new GUI edit and add annulus algorithms.
        184. 02.27.04 ELLIPSE: new GU edit algorithm.
        185. 02.27.04 ELLIPSE ANNULUS: new GUI edit and add annulus algorithm. This fixed a problem with 0 radius annuli. Also fixed a problem with GUI rotate after close dialog box.
        186. 3.1.04 BOXANNULUS: new GUI edit and add size algorithms. This fixed a problem with 0 size annuli.
        187. 03.01.04 PANDA: new GUI edit and add annulus algorithms.
        188. 03.01.04 PANDA: fixed a problem with a full PANDA from 0 to 360 degrees. Previously, it was displayed as 0 to 0 degrees.
        189. 03.02.04 PANDA: fixed a problem with postscript and radial lines. The zoom was incorrectly being calculated..
        190. 03.02.04 PANDA: fixed a problem with render in magnifier. The wrong zoom factor was being used.
        191. 03.09.04 GUI: add Tab/Shift-Tab bindings to panner.
        192. 03.10.04 GRID: fixed a problem with single publication bounding box. It now takes into account DATASEC.
        193. 03.10.04 AST: upgrade to 3.2.6
        194. 03.12.04 GRAPH: graphs are now active for single,tile,and blink modes.
        195. 03.16.04 WCS LINEAR: fixed many problems with alignment of WCS LINEAR MOSAICS
        196. 03.16.04 RGB: fixed many problems with alignment of RGB WCS images
        197. 03.18.04 FITS: fixed a problem with random numbers beening displayed for BLANK/NaN
        198. 03.18.04 RELEASE version 3.0b7

        199. 03.22.04 PIXELTABLE: fixed a problem with 'unset pixelValues'.
        200. 03.22.04 SAVEAS: fixed a problem with 'processSaveAs'.
        201. 03.22.04 RGB: fixed a problem with turning off all loaded channels within a frame.
        202. 03.31.04 IIS: fixed a problem with a old variable in DisplayCoordDialog.
        203. 03.31.04 BINNING: fixed a problem with dimensions of DBL_MIN,DBL_MAX.
        204. 03.31.04 IIS: turn off blinking cursor while changing colormap so we do not see a color flash due to the updating of the frame when the cursor form is changed.
        205. 04.01.04 WEB DISPLAY: add options on how to load downloaded fits.
        206. 04.01.04 WEB DISPLAY: fixed a problem when the image width/height contains garbage.
        207. 04.02.04 TCL/TK: update to 8.4.6
        208. 04.05.04 PAN: fixed yet another problem with -pan. Hopefully this time, I've got it right.
        209. 04.06.04 GRID: fixed a problem with psLine and gcc 2.96.
        210. 04.06.04 MAKEFILE: fixed a typo with ./configure.
        211. 04.06.04 RELEASE version 3.0b8

        212. 04.12.04 SAVEAS: add SaveAs MPEG-1 support using tkmpeg and exmpeg.
        213. 04.14.04 BINNING: 60% improvement in speed for little endian arch.
        214. 04.23.04 ZLIB: upgrade to version 1.2.1
        215. 04.26.04 ALPHA: minor changes to make.alpha and ds9/Makefile for alpha support.
        216. 04.26.04 FITS: fixed problems with trying to open regions extensions in cases where the mode was not mmap.
        217. 04.27.04 EXTERNAL FITS: fixed major problems with pattern matching.
        218. 04.27.04 FITSY++: skip over unknow binary column types. We used to force an exit.
        219. 04.28.04 FITSY++: fixed a problem with SocketGZ where if too little data had arrived, ds9 would incorrectly see this as an error.
        220. 04.29.04 GUI: fixed a race condition in which ds9 'thinks' the windows have been realized, and XPA has been init'd and the user starts to delete windows that don't exists. Now XPA is not realized until the canvas window has been realized.
        221. 04.29.04 LINUX: return to a full static link. Seems like the best option to support current and future versions of linux.
        222. 04.29.04 PRINT: add print prefs.
        223. 05.03.04 RELEASE version 3.0b9

        224. 05.04.04 BINNING: fixed a problem with column size double and buffer overflow on little endian machines.
        225. 05.04.04 PANDA: fixed a problem with postscript and gcc 2.95 compilers. This problem had already been fixed for gcc 3.x compilers.
        226. 05.06.04 BINNING: add support for variable binning in x and y.
        227. 05.07.04 IIS: fixed a problem with buffer overflow and determining imtool.rc file location.
        228. 05.07.04 FRAMEBASE: fixed some minor memory leaks.
        229. 05.10.04 BINNING: for FITS REGIONS files, when loading against a binned image, compare X and Y bin columns to regions X and Y bin columns for a match. Do not load unless they match.
        230. 05.10.04 GUI: add 'option' command to control GUI appearance. Removed many -bd 2 options to clean up the interface.
        231. 05.12.04 BINNING: fixed a major problem with 3D binning. Once it was turned on and then turned off, important internal parameters where not being update, resulting in segvs.
        232. 05.15.04 RGB: fixed memory leak in loading RGB images.
        233. 05.17.04 LINUX: ok, back to two versions: one dynamic, one static. The static version is buggy under Fedora, but is required for old versions of RH. So the default version will be dynamic linked, with an static version available for older machines.
        234. 05.21.04 XPA: fixed a problem with WCS REPLACE FILE and WCS APPEND FILE.
        235. 05.25.04 PANDA: fixed CIAO output so that the start angle is always less than the end angle.
        236. 05.26.04 FITSY++: clean up code for strm.C, map.C, mapincr.C
        237. 05.31.04 FITSY++: introduce new 'internal paging' mapince.C for binning files larger than 1Gb. Only 1Gb segments are mmap at one time, to allow binning >2Gb/>4Gb bin tables under a 32bit OS.
        238. 05.31.04 FITSDATA: optimized swap(), getValueFloat(), getValueDouble(), and scan() in hopes of speeding up display times, especially for linux.
        239. 06.13.04 WCS: upgrade to version 3.5.3
        240. 06.16.04 WEB DISPLAY: increased default font by one size.
        241. 06.16.04 GUI: fixed a problem with display header. Under Fedora Core 2, the default font size was too small.
        242. 06.17.04 XPA: add fits header keyword support.
        243. 06.17.04 PLOT: add option plot names to xpa, plot name in window title, plot data command
        244. 06.17.04 PLOT: fixed a problem with closing xpa plots via xpa.
        245. 06.18.04 PLOT: remove prefs 'Unique Plot'. This never worked correctly and is now obsolete.
        246. 06.21.04 PANDA: radii now extend from inner annuli to outer annuli and not from the center.
        247. 06.21.04 RGB: fixed a problem with 'fit to zoom' for rgb frames.
        248. 06.22.04 AST: update to version 3.3-1.
        249. 06.23.04 GRIDS: fixed justification (yet again!)
        250. 06.24.04 REGIONS: the default GUI size is now constant, reguardless of current zoom.
        251. 06.24.04 REGIONS: add support for cut/copy/paste regions across frames.
        252. 06.25.04 REGIONS: add unselect, begin rotate, end rotate, begin move, end move, begin edit, end edit callback support.
        253. 06.25.04 GUI: add support for multiple FITS headers for multiple extension FITS files.
        254. 06.28.04 REGIONS: add support for listing WCS keywords and values as comments in region files.
        255. 06.28.04 REGIONS: fixed a problem with the TEXT region handles with zooms not equal to 1.
        256. 06.28.04 XPA: fixed a problem with xpaset regions color and xpaset regions width.
        257. 06.29.04 FITS: add support for reload option. if reload option is set, markers and aux contours are preserved across loads.
        258. 07.01.04 FITSY++: fixed a problem with binning if the image header contained more than 36 cards.
        259. 07.01.04 FITSY++: added TV and TS keyword support for FITS bin tables.
        260. 07.01.04 FITSY++: add TP keyword support for FITS bin tables.
        261. 07.02.04 GRID: fixed a problem with a wcs with PC keywords.
        262. 07.05.04 WCS: removed WCS projection option. Its no longer needed.
        263. 07.05.04 GRID: fixed several problems with converting from wcs to AST. AST is very very picky as to which keywords to use and in what order. These include CDELT's, CD's, PC's, CROTA's.
        264. 07.08.04 SAVEAS: reorganize save as menus.
        265. 07.08.04 SAVEAS: add support for saving multiple frames as MPEG movie.
        266. 07.13.04 MOSAIC: fixed a problem with mosaic image wcs with orientations of xx.
        267. 07.14.04 WCS: upgrade to version 3.5.5.
        268. 07.14.04 FITSY++: add support for real number format 'D'.
        269. 07.14.04 FITSY: add changes to support real number format 'D'.
        270. 07.15.04 ANALYSIS: stderr can now be redirected to stdout for $text with the |& macro.
        271. 07.15.04 ANALYSIS: shell environment vars will be expanded within the command with the env() macro.
        272. 07.15.04 ANALYSIS: add support for the WEB menu item.
        273. 07.26.04 RELEASE version 3.0

        274. 07.28.04 IIS: fixed a problem with iraf iis support that would sometimes result in a blank screen.
        275. 07.28.04 RELEASE version 3.0.1

        276. 08.02.2004 VECTOR: fixed a problem with matrix inversion with numbers smaller than DBL_EPSILON.
        277. 08.02.2004 FRAME: check for negative zoom.
        278. 08.06.2004 FITSIMAGE: fixed a problem with determining the length of a vector in the case of a non-wcs rotated coordinate system.
        279. 08.09.2004 GRID: fixed a problem with a rotation in physical and wcs linear grids.
        280. 08.10.2004 MAKEFILE: add support for emacs tags in saods9/saotk
        281. 08.12.2004 PROJECTION: fixed a problem with paste projection and setup callback procs.
        282. 08.12.2004 REGIONS: fixed a problem where regions properties where lost if cut/paste across frames.
        283. 08.13.2004 DIALOGS: fixed an issues with some windows managers who needed a hint to bring all dialogs to the front.
        284. 08.13.2004 POLYGON: change default create method to be simular to box.
        285. 08.13.2004 POLYGON: add prefs default polygon size.
        286. 08.13.2004 POLYGON: fixed a problem with the control handles at high zoom.
        287. 08.16.2004 REGIONS: fixed a problem with updating coordinates/angles/distances when rebinning a FITS bin table.
        288. 08.16.2004 REGIONS: add default system, sky, skyformat, dist system, and dist format for regions dialog to preferences.
        289. 08.16.2004 FITSY++: fixed a problem with <unsigned char> columns. They where incorrectly cased as a <char>.
        290. 08.18.2004 SCALE: nolonger reset scale mode from USERCLIP on load FITS.
        291. 08.18.2004 AST: upgrade to version 3.4
        292. 08.18.2004 GRID: minor tweaks with the default axes numerics gaps.
        293. 08.18.2004 REGIONS: for RGB frames, always use the keyFits channel in mapping regions to/from reference coordinate system.
        294. 08.19.2004 LINUX64: add support for Linux 64.
        295. 08.24.2004 XPA: add get data support.
        296. 08.25.2004 AST: fixed a bug with using free'd memory in plot.c
        297. 08.25.2004 GUI: fixed two problems with the getDataValues routine. With non-symetric binning or equatorial sky coordinates, an incorrect number of values where returned.
        298. 08.27.2004 RELEASE version 3.0.2

        299. 09.01.2004 FTTYS++: add a check for mmapincr and mmap to ensure that there is at least 2880 bytes before trying to parse a header.
        300. 09.02.2004 FITSY++: add new memory mode, SMMAP which allows for split fits mmap files.
        301. 09.02.2004 XPA: add new support for split mmap and shared FITS files.
        302. 09.03.2004 FITSY++: add new memory mode, SSHARE which allows for split fits shared memory files.
        303. 09.06.2004 COMMAND: add support for split mmap and shared FITS files.
        304. 09.07.2004 XPA: update to 2.1.6
        305. 09.10.2004 RELEASE version 3.0.3















































































      saods9/ds9/doc/release/r4.0.html000644 000765 000000 00000063507 10643265705 016644 0ustar00joyewheel000000 000000 DS9 Version 4 Release Notes

      SAOImage DS9 Version 4.0 Release Notes

        Version 4

        1. 09.13.2004 AST: update to version 3.4-4
        2. 09.13.2004 TCL/TK: update to version 8.4.7
        3. 09.14.2004 WCSSUBS: update to version 3.5.6
        4. 09.14.2004 TCLLIB: update to version 1.6.1
        5. 09.15.2004 TKTABLE: installed 2.9
        6. 09.20.2004 SAOTK: fixed a problem with calculating a regions rotational angle with a galactic or ecliptic wcs.
        7. 09.21.2004 SAVEFITS: fixed a problem with the savefits xpa and command line options.
        8. 09.21.2004 REGIONS: fixed a problem with updating region dialog boxes after a change in event file bin factor.
        9. 09.23.2004 DSS: if user selects dss2red or dss2blue survey, force server to eso.
        10. 09.23.2004 2MASS: add image server.
        11. 10.01.2004 DSS: fixed a problem with 'Update from current Frame'.
        12. 10.12.2004 MAKEFILE: add export-dynamic for linux so that external shared libs can be loaded.
        13. 10.21.2004 GUI: fixed a problem if while blinking the user changes the colorbar via mouse.
        14. 11.17.2004 IMAGESERVER: fixed incompatibilities between DSS and 2MASS.
        15. 11.19.2004 AST: update to version 3.5
        16. 11.29.2004 FUNTOOLS: update to version 1.2.4
        17. 11.30.2004 SAOTK: use NaN.h from Funtools. This corrects problems with new architectures.
        18. 12.03.2004 MAKEFILE: now support gcc 3.4.x
        19. 12.15.2004 XPA: fixed a problem with preserve regions command.
        20. 12.15.2004 HTML: fixed several problems with color matching within htmlwidget.
        21. 12.16.2004 GUI: fixed a problem with saving text from SimpleTextDialog.
        22. 12.16.2004 WCS: main wcs menu item now sets default marker coordinate system and skyframe.
        23. 12.16.2004 COMPASS: create compass now uses current marker dialog system and skyframe.
        24. 12.20.2004 POLYGON: fixed a problem with the exclude strip and rotation.
        25. 12.20.2004 COMPOSITE: add support for composite region.
        26. 12.22.2004 TEXT REGION: fixed a problem in which the text angle did not reflect the native coordinate system.
        27. 12.29.2004 IMAGESERVER: xpa and command line options are now synchronous. The GUI is still asynchronous.
        28. 12.30.2004 NAMESERVER: fixed a problem with sexigesmal from SIMBAD near the equator.
        29. 12.30.2004 NAMESERVER: xpa and command line options are now synchronous. The GUI is still asynchronous.
        30. 01.31.2005 VECTOR: add support for new VECTOR region.
        31. 02.08.2005 REGIONS: fix varies errors with definition of angles. Position angles are now defined as from first positive coordinate axis to second positive coordinate axis except in the case of equatorial wcs, in this case it is defined as from second positive coordinate axis to first positive coordinate axis.
        32. 02.16.2005 SCALE: added User menu options to clarify current scaling mode.
        33. 02.17.2005 LINUX64: fixed a problem with generating postscript.
        34. 02.28.2005 MOSAIC: add support for mosaic data cubes.
        35. 03.01.2005 STD Dialog: fixed several problems with ds9 not remembering the current working directory.
        36. 03.02.2005 WINDOWS: fixed a problem with a memory leak when rendering regions on the windows platform. We no longer try to clip against a clip region.
        37. 03.02.2005 WINDOWS: fixed a problem with command line options that require the ds9 window to be visible. We have to process all events with 'update' before the windows version of ds9 is visible.
        38. 03.03.2005 REGIONS: add support to all regions parsers for ms windows line terminators
        39. 03.03.2005 ANALYSIS: removed extra ';' at the end of all regions substitutions.
        40. 03.16.2005 FITS: increased fits file name size to 1024 chars.
        41. 03.17.2005 CATALOGS: are finally implemented!
        42. 03.24.2005 WINDOWS: implemented non-windows native standard dialogs. This allows uses to specify a file extension.
        43. 03.29.2005 FITY++: fixed a problem with filtering large bin tables while in mmapincr mode. We now insure that enough data is mmap'd for filter to build its good array.
        44. 03.29.2005 PRESERVE: fixed syntax errors with preserve regions and pan.
        45. 03.30.2005 REGIONS: fixed regions parsers to accept a regions file without terminator as the last character.
        46. 03.30.2005 ZOOM: all zooms are now specified in terms of x and y internally
        47. 04.01.2005 GRID: fixed a problem with grid options
        48. 04.28.2005 REGIONS: reimplemented basemarker,baseellipse,basebox classes.
        49. 04.28.2005 ZOOM: implemented support for different x and y zoom.
        50. 04.29.2005 XPA: update to version 2.1.6
        51. 04.29.2005 FUNTOOLS: update to version 1.3.0b3
        52. 04.29.2005 TCL/TK: update to version 8.4.9
        53. 05.25.2005 REGIONS: update all regions code
        54. 05.25.2005 REGIONS: add EPANDA
        55. 06.07.2005 FUNTOOLS: update to version 1.3.0b6
        56. 06.13.2005 SCALE: new LOG algorithm log10(i/s*1000+1)/log10(1001) where 0<i<s
        57. 06.13.2005 MAKEFILE: add support for FreeBSD
        58. 06.19.2005 FTP: all ftp opens now are in passive mode
        59. 06.28.2005 BIN: fixed a problem with -bin factor
        60. 06.28.2005 PAGESETUP: pagesetup command line options are no longer case sensitive
        61. 07.12.2005 FUNTOOLS: update to version 1.3.0.b7
        62. 07.13.2005 REGIONS: new DS9 regions 4.0 format
        63. 07.13.2005 REGIONS: add copy,cut,paste,undo xpa and command line options.
        64. 08.01.2005 GCC: add support for gcc 4.0. Remove backward support for gcc 2.96 or earlier.
        65. 08.03.2005 REGIONS: panda,epanda,bpanda, only render start/stop angles in red/blue when selected.
        66. 08.04.2005 SMOOTH: add smoothing algorithms boxcar,tophat,gaussian
        67. 08.15.2005 COLORBAR: add support for printing the colorbar
        68. 08.15.2005 FUNTOOLS: update to version 1.3.0b9
        69. 08.15.2005 ZLIB: update to version 1.2.3
        70. 08.17.2005 GUI: add View menu and prefs.
        71. 08.24.2005 REGIONS: fixed a problem with ciao pie regions.
        72. 08.24.2005 REGIONS: add invert selection.
        73. 08.25.2005 GUI: add display image window size.
        74. 08.30.2005 RELEASE version 4.0b6
        75. 09.12.2005 IIS: fixed a problem with iis and cursors.
        76. 09.12.2005 RELEASE version 4.0b7
        77. 09.15.2005 ARRAY: fixed a problem with loading array cubes from a file and determining the correct endian.
        78. 10.24.2005 BIN: if unable to find suitable cols to bin, chose the first and second column. This way, if you have table, it will always load, even if you don't know the column names.
        79. 10.25.2005 BIN: binning dialog box. if number of columns is too large to display, wrap the menu.
        80. 10.27.2005 CONTOUR: complete support for command line/xpa control of contour features.
        81. 10.27.2005 CONTOUR: fixed a problem with convert and contours of zero length.
        82. 11.01.2005 FITS: fixed a problem loading very small arrays mmapincr
        83. 11.01.2005 VECTOR: small change to correct issue with gcc 4.0.1
        84. 11.01.2005 WCS: fixed a problem with wcs append/replace.
        85. 11.02.2005 GRID: fixed a problem with alternative linear wcs.
        86. 11.02.2005 WCS: fixed a problem with alternative wcs names. All wcs names are now lower case.
        87. 11.03.2005 CONTOUR: fixed a problem with contour convert after a catalog command.
        88. 11.03.2005 HELP: altered tk to pass -help to us. For -help, we now display a brief message and exit and for --help, we display the reference manual command line options.
        89. 11.09.2005 CATALOG: fixed a problem with starbase to trim column names of white spaces.
        90. 11.09.2005 CATALOG: add user specified RA/DEC column option.
        91. 11.10.2005 CATALOG: speed up catreg for large dbs
        92. 11.14.2005 GUI: the meus Cut,Copy,Paste,Clear now works for all dialog boxes on all platforms.
        93. 11.16.2005 REGIONS: fixed a problem with rendering arrows for line,vector,ruler, and compass with width>1.
        94. 11.16.2005 GUI: Modified standard dialog boxes to remember file types.
        95. 11.17.2005 GUI: remove 'Use Cursors' Misc Option.
        96. 11.17.2005 GUI: Modified standard dialog boxes to remember filters.
        97. 11.18.2005 COMPOSITE: fixed a problem with loading composite regions with properties.
        98. 12.05.2005 RGB: Fixed a problem with wcs matching rgb frames .
        99. 12.08.2005 REGIONS: Fixed a problem general comment such as ## and #.
        100. 12.08.2005 HELP: reset previous behavior for -help. fv uses ds9 -help to probe for ds9. Until fv is changed, we need to support the prior behavior.
        101. 12.15.2005 X11: Insure that all X11 rendering is calculated in double precision until the very last, at which, the results are rounded to the nearest integer. This includes markers, contours, grids.
        102. 12.17.2005 PS: set default resolution to 150, from 72.
        103. 12.19.2005 GUI: add .ftz and .FTZ to default fits name filter.
        104. 12.19.2005 FREEBSD: added support for freebsd.
        105. 01.03.2006 FITSY++: fixed an overflow problem with mmap very large array files.
        106. 01.04.2006 GUI: reinstated DETECTOR and AMPLIFIER coordinate system menu items in menus and removed the preferences.
        107. 01.04.2006 GUI: reinstated ZMAX menu items in menus.
        108. 01.05.2006 CATALOGS: fixed a problem with rotated or flipped images and determining image size in ra and dec
        109. 01.05.2006 PROJECTION: fixed a problem move and moveto.
        110. 01.12.2006 COLORBAR: added numerics to colorbar.
        111. 01.18.2006 GUI: separte controls for min/max and low/high.
        112. 01.24.2006 HISTOGRAM EQU: is now based on low/high, not min/max.
        113. 01.27.2006 GUI: fixed a problem with updating the current colormap.
        114. 01.30.2006 PANNER: under truecolor visuals, the panner is now updated with the colorbar.
        115. 02.01.2006 TEMPLATE: tweak xmm templates for correct boresite.
        116. 02.03.2006 GUI: fixed Shift-Tab under linux.
        117. 02.03.2006 GUI: fixed a problem with loading multiple files, with -single command line option, followed by Match Frame. The frames where not realized so the coordinate systems where not valid.
        118. 02.03.2006 MARKERS: added the ability to toggle marker text.
        119. 02.08.2006 RELEASE version 4.0b8
        120. 02.07.2006 TCL/TK: update to version 8.4.12
        121. 02.08.2006 CROSSHAIR: fix a typo that caused the crosshair command-line option to fail.
        122. 02.27.2006 CATALOG: fixed a problem with finding which columns contain RA and DEC.
        123. 02.27.2006 XPA: fixed a problem with xpaget ds9 width.
        124. 03.20.2006 DSS: add new survey options for STSCI.
        125. 03.24.2006 i18n: finished implemenation of internationalization and localization code.
        126. 03.29.2006 SCALE: fixed a problem with RGB frames and log/pow scales. Incorrect low/high values were being used to calculate the scale.
        127. 03.29.2006 PREFS: the default prefs file is now ds9.prf. The following directories are now searched in order: ./ ~ /usr/local/lib /opt/local/lib
        128. 03.29.2006 INITALIZATION: the default initalization file is now ds9.ini. The following directories are now searched in order: ./ ~ /usr/local/lib /opt/local/lib
        129. 03.31.2006 GUI: fixed a problem with several dialog boxes with the Paste menu option. If the clipboard was empty, an error was generated.
        130. 04.3.2006 FITS HEADER: fixed a problem displaying datacube headers.
        131. 04.3.2006 PROJECTION REGION: Projection region plots can now be accessed via XPA PLOT
        132. 04.5.2006 MACOSX: fix a problem with the macosx startup scripts to allow path names with a space.
        133. 04.7.2006 WCS: fix a problem WCS menu and images without a wcs.
        134. 04.10.2006 GRID: fixed a problem with GLACTIC wcs, AST, WCSSUBS, and defined LATPOLE/LONPOLE keywords.
        135. 04.15.2006 RELEASE version 4.0b9
        136. 04.18.2006 CATALOGS: fixed a problem with filter editor menu.
        137. 04.18.2006 CATALOGS: fixed a problem with searching for other catalogs
        138. 04.24.2006 TEMP: DS9 will now look for environment vars TEMP and TMP first for location of temp directory.
        139. 04.28.2006 PREFS: Fixed a problem with writing invalid preferences.
        140. 04.28.2006 PS: Fixed a problem with printing Grayscale and pure white values. They were being rounded off to 254, not 255.
        141. 04.28.2006 PREFS: prefs are now written to a users home directory if available (including windows) and hidden.
        142. 05.02.2006 GCC: now compiles properly under gcc 4.1
        143. 05.08.2006 SCALE: more checks for illegal low/high values for log/pow scales
        144. 05.10.2006 BIN: fix an issue with calculated width/height. No matter the bin factor, or the dimensions of the data, always have at least an 1x1 image.
        145. 05.11.2006 DARWIN: compile under 10.4.x with no OSSPINLOCKLOCK, which is not available under 10.3.x
        146. 05.16.2006 CROSSHAIR: fixed a problem with xpa/cmd option crosshair.
        147. 05.16.2006 ANALYSIS: fixed a problem with loading analysis files with bindings at startup with one frame.
        148. 05.22.2006 WCSSUBS: Update to version 3.6.4
        149. 05.25.2006 ANALYSIS: add $xcen and $ycen macros.
        150. 05.25.2006 ANALYSIS: add $vo_method macro.
        151. 06.05.2006 FITSY++: fixed a problem with incorrectly detecting the beginning sequence of gz stream.
        152. 06.12.2006 HV/XPA: Implemented 'xpaset' mime support.
        153. 06.14.2006 FITS: Fixed a problem with displaying the header of a file in which there was an extention name in the primary header.
        154. 06.21.2006 GUI: Fixed a problem -single and -blink command line optons.
        155. 06.21.2006 REGIONS: Check for valid image loaded before processing load regions commands.
        156. 06.21.2006 MOSAIC: fixed a problem with mosaicimage wfpc2 and display header.
        157. 06.23.2006 HV: Implemented file caching.
        158. 06.23.2006 HV: Implemented image caching.
        159. 06.26.2006 HV: Implemented multiple mime processing.
        160. 06.29.2006 TCLLIB: update to version 1.8
        161. 07.11.2006 WCSSUBS: update to version 3.6.5
        162. 07.11.2006 WCSSUBS: fix a problem with naxis>2
        163. 07.12.2006 NAME SERVER: support for HTTP redirection
        164. 07.12.2006 IMAGE SERVER: support for HTTP redirection
        165. 07.13.2006 CATALOGS: support for HTTP redirection
        166. 07.13.2006 REGIONS: fixed a problem with cut/copy/paste regions dialog.
        167. 07.25.2006 PREFS: preferences are automatically saved.
        168. 07.25.2006 FITSY++: fixed a problem with large RGB arrays and streams.
        169. 07.31.2006 RGB: add support for invert RGB colormap.
        170. 07.31.2006 FIRST: add support for VLA FIRST image server.
        171. 08.01.2006 HTTP: add timeout options to all geturl calls.
        172. 08.02.2006 CATALOGS: add suppport for SDSS.
        173. 08.07.2006 ANALYSIS: fixed a problem with cancel geturl tasks.
        174. 08.14.2006 TKTABLE: fixed configure files for darwin intel.
        175. 08.14.2006 TKIMG: fixed configure files for darwin intel.
        176. 08.14.2006 AST: apply patch to plot.c at line 23207
        177. 08.17.2006 BIN: fixed a problem with binning 3D and integer cols.
        178. 08.17.2006 BIN: fixed a problem with binning 3D and updating the bin dialog box.
        179. 08.17.2006 SCALE: changed AUTO to sample only for mosaics.
        180. 08.30.2006 CATALOG: fixed a problem with filtering and column names to leading or trailing spaces.
        181. 08.31.2006 CATALOG: add support for CSV catalog files with/wo header.
        182. 09.06.2006 EPANDA: Fixed problems with rendering start and stop angles.
        183. 09.08.2006 BPANDA: Fixed problems with rendering start and stop angles.
        184. 09.11.2006 TEMPLATES: When creating templates, they were placed in the upper right corner of the frame. This has been changed to the center of the frame.
        185. 09.11.2006 TEMPLATES: When templates where created via the gui, the screen was not refreshed properly. This has been corrected.
        186. 09.12.2006 FITSY++: Fixed a problem with hist() and column values of 0, which was used as the default value.
        187. 09.13.2006 COMPOSITE: Add complement angle.
        188. 09.15.2006 CPANDA,EPANDA,BPANDA: fixed a conflict with funtools. Stop/start angles will alway increase in value.
        189. 09.18.2006 MOSAIC IMAGE NEXT: removed support.
        190. 10.01.2006 RELEASE version 4.0b10
        191. 10.01.2006 I18N: Add Portuguese support.
        192. 10.01.2006 RELEASE version 4.0b10.1
        193. 10.01.2006 FITS: external support for bzip2.
        194. 10.01.2006 REGIONS: fixed a problem with clipping regions in tile mode.
        195. 10.03.2006 HV: add support for HTTP-EQUIV HTML Meta keyword.
        196. 10.03.2006 PANDA: fixed a problem with zero length radius and printing.
        197. 10.10.2006 WCSSUBS: update to version 3.6.6
        198. 10.13.2006 TCL/TK: update to version 8.4.13
        199. 10.13.2006 FUNTOOLS: update to version 1.3.0b22
        200. 10.13.2006 TCLLIB: update to version 1.9
        201. 10.23.2006 LANGUAGE: add support for following languages fr,es,de,it,pt,ru,da.
        202. 10.23.2006 HTTP: increase timeout to 3 minutes.
        203. 10.24.2006 GUI: add view colorbar numerics support.
        204. 10.31.2006 CATALOGS: add full symbol support via xpa/command line.
        205. 10.31.2006 CATALOGS: fixed a problem with the optional catalog name as a parameter.
        206. 10.31.2006 GUI: multi column frame and active frame menu.
        207. 10.31.2006 GUI: multi column catalog col name menus.
        208. 11.02.2006 XPA: add xpaget ds9 fits bitpix.
        209. 11.06.2006 GUI: add confirmation option preference.
        210. 11.28.2006 REGIONS: add xpa/command line option get info.
        211. 11.28.2006 REGIONS: fits regions file: first look for extension [REGIONS], then attempt to load the first extension.
        212. 11.29.2006 FITS: fixed a overflow problem with very very large fits images > 8Gb in size.
        213. 12.06.2006 RGB: fixed a problem with aligning very large images.
        214. 12.07.2006 MOSAIC: fixed a problem with wcs mosaicsa and very large images.
        215. 12.09.2006 FITS: removed a kludge for defining the wcs tangent point that only affected AIR and AZP projections.
        216. 12.12.2006 GUI: fixed a problem with default vertical layout. The default size is now consistent with other options.
        217. 12.13.2006 SAVEAS: fixed a problem with PHYSICAL and WCS coordinates. They were 1 pixel off.
        218. 12.13.2006 CPANDA/EPANDA: fixed a problem with render and printing with an image flipped.
        219. 12.20.2006 RGB: NaN are now ignored when building an RGB image.
        220. 12.22.2006 GUI: Increased default X size so that buttons do not cause automatic resizing.
        221. 01.08.2007 PREFS: fixed a problem with frame parser and LoadPrefs so that a preferences file from version b9 will correctly parse.
        222. 01.23.2007 FITS: Added additional checks for valid format and values for DATASEC, DETSEC, and DETSIZE keywords.
        223. 01.24.2007 CATALOGS: fixed a problem with redirect.
        224. 01.24.2007 REGIONS: fixed a problem measuring WCS lengths across wcs mosacis and RGB images.
        225. 01.25.2007 REGIONS: fixed a problem with rotated text regions.
        226. 01.30.2007 DSS: Split DSS server into three servers.
        227. 01.31.2007 GUI: add binning buffersize 8192 and binfactor 256.
        228. 02.01.2007 RELEASE version 4.0b11
        229. 02.02.2007 CATALOGS: add cols.
        230. 02.02.2007 VO: default url is now http://cxc.harvard.edu/chandraed/list.txt.
        231. 02.07.2007 PREFERENCES: if ds9 detects a newer prefs file, it will not be processed.
        232. 02.09.2007 SKYVIEW: added support for HEASARC's skyview image cutout service.
        233. 02.09.2007 GUI: dropped the 'b' for beta, afterall, ds9 is always beta!
        234. 02.13.2007 CATALOGS: new non-modal search catalogs support.
        235. 02.13.2007 CATALOGS: add show/hide support.
        236. 02.15.2007 FIRST: fixed a problem with xpa first.
        237. 02.15.2007 2MASS: fixed a problem with xpa 2mass.
        238. 03.06.2007 MASK: add support for fits masks.
        239. 03.06.2007 MOSAIC: remove support for 'fast mosaic' mode.
        240. 03.06.2007 SCALE: added support for zscale parameter prefs.
        241. 03.20.2007 FITSY++: add support for compressed FITS.
        242. 03.27.2007 WCS: fixed support for alt wcs for bin tables.
        243. 03.29.2007 REGIONS: add support for user specified point sizes
        244. 04.02.2007 GRID: fixed a problem with TNX projection.
        245. 04.03.2007 FITSY++: split code supporting FITS ASCII tables and FITS Binary Tables.
        246. 04.03.2007 FITSY++: removed code supporting FITS Binary Tables substring arrays.
        247. 04.03.2007 WCSSUBS: update to version 3.6.8
        248. 04.03.2007 FUNTOOLS: update to version 1.3.0b30
        249. 04.03.2007 XPA: update to version 2.1.7b2
        250. 04.06.2007 FITSY++: add support for RICE compressed FITS.
        251. 04.06.2007 SMOOTH: now implemented on a per channel basis for RGB.
        252. 04.10.2007 WCSSUBS: backed out of wcscon.c to version 3.6.6 due to a bug in prec.
        253. 04.12.2007 WINDOWS: fixed a problem with iis and iraf.
        254. 04.15.2007 RELEASE version 4.12
        255. 04.16.2007 FITSIMAGE: fixed an bug with setting file names after a reset.
        256. 04.26.2007 ESO-DSS: support new survey names.
        257. 05.10.2007 NSVR: fixed a problem with xpa/command line name lookup.
        258. 05.10.2007 NSVR: fixed a problem redirection.
        259. 05.11.2007 TCL: realize ds9 before executing any external tcl source.
        260. 05.11.2007 CATALOGS: for csv files, ignore any comment lines.
        261. 05.21.2007 MOSAICS: fixed several problems with constructing mosaics from both IRAF and WCS keywords.
        262. 05.21.2007 IRAF MOSAICS: the image size is now defined by the actual data (just as with WCS) and not the DETSIZE keyword.
        263. 05.30.2007 GRID: fixed a problem with plain font style that resulted in always using system and not the selected font.
        264. 05.31.2007 ELLIPSE PANDA: fixed a problem incorrect postscript code.
        265. 06.08.2007 GUI: fixed a problem with the Display Fits Header button.
        266. 06.13.2007 FITS: add fits header command and xpa point.
        267. 06.30.2007 RULER: fixed a problem with displaying the length text.
        268. 07.15.2007 RELEASE version 4.13
      saods9/ds9/doc/release/r5.0.html000644 000765 000000 00000073646 11300355440 016635 0ustar00joyewheel000000 000000 DS9 Version 5 Release Notes

      SAOImage DS9 Version 5 Release Notes

        1. 07.16.2007 FITSY++: fix a problem with rice compressed images and multiple tiles.
        2. 07.17.2007 MOSAIC: fix a problem with bin table extensions at the end of a mosaic image wcs.
        3. 07.20.2007 COLORMAP: fixed a problem with loading external colormaps.
        4. 07.20.2007 COLORMAP: fixed a problem colormap menus.
        5. 07.23.2007 ARCHIVES: new url for skyview.
        6. 07.23.2007 I18N: add language support for Japanese. (many thanks to Masahiro Tsujimoto!).
        7. 07.23.2007 PIXEL TABLE: xpaget will now return the pixel table values.
        8. 07.31.2007 SOLARISx86: now supporting solarisx86.
        9. 08.15.2007 PIXELTABLE: fixed a minor problem with xpaget pixeltable.
        10. 08.15.2007 FUNTOOLS: update to version 1.4.0
        11. 08.15.2007 IIS: fixed a problem with frame number greater than 10.
        12. 08.15.2007 EXAMINE: changed frame name to 'Frame'.
        13. 09.02.2007 CATALOGS: updated urls and menu titles.
        14. 09.20.2007 PREFS: new prefs dialog box.
        15. 09.24.2007 CATALOGS: fixed a problem with the CDS query.
        16. 09.24.2007 CATALOGS: add SDSS DR6.
        17. 09.24.2007 SKYVIEW: fixed default image size and updated url.
        18. 09.24.2007 PROJECTION: install callbacks only after Button Release.
        19. 09.25.2007 REGIONS: add xpa/command SHOW and SHOWTEXT support.
        20. 09.25.2007 CONTOURS: fixed a problem with load contours from the command line.
        21. 10.03.2007 MACOSX: MacOSX Aqua support is now fully implemented!
        22. 10.03.2007 COLORMAP: pass colormap names thru translation tables
        23. 10.03.2007 XPA: update to version 2.1.8
        24. 10.05.2007 COMPOSITE: add global properties switch.
        25. 10.05.2007 LINE: fixed a problem with initial displayed arrow checkboxes in dialog.
        26. 10.05.2007 FOV: moved FOV menu to more visible level
        27. 10.10.2007 I18N: add language support for French.
        28. 10.11.2007 CATALOGS: fixed a problem with the symbol editor dialog.
        29. 10.15.2007 RELEASE version 5.0
        30. 10.16.2007 PROJECTION: fixed a problem with the coordinates of the projection plot.
        31. 10.17.2007 RICE: fixed a problem with float and double RICE compression.
        32. 10.24.2007 RICE: fixed several problems with mosaics, cubes and RICE compression.
        33. 10.24.2007 GUI: added support for ds9 beta versions.
        34. 10.24.2007 PREFS: added OK and Cancel buttons to all tabs.
        35. 10.29.2007 CATALOGS: implemented support for new CDS catalogs search format.
        36. 10.30.2007 SAOTK: implemented reentrant parsers.
        37. 11.01.2007 SAOTK: now support any color for markers, contours, etc.
        38. 11.02.2007 MACOSX/WINDOWS: fixed a problem with native open file dialog. If bad file name had been used, (or an extention), an error would occur.
        39. 11.07.2007 TCL/TK: update to version 8.4.16.
        40. 11.08.2007 PLOT: fixed a problem with xpa/command line linear/line tokens to match documentation.
        41. 11.09.2007 PREFERENCES: fixed a problem with slower ppcs. use 'update idletasks' instead of 'update' to avoid possible race condition.
        42. 11.21.2007 XPA: update to version 2.1.9
        43. 11.21.2007 FUNTOOLS: update to version 1.4.1
        44. 11.21.2007 WCSSUBS: update to version 3.7.0
        45. 11.21.2007 TCLLIBS: update to version 1.10
        46. 11.28.2007 TCL/TK: update to version 8.4.17 beta.
        47. 11.28.2007 ANALYSIS: fix a problem with spaces in tmp file names.
        48. 12.05.2007 FLEXLEXER.Y: updated version.
        49. 12.06.2007 GUI: change key binding 'c' to 'r'. It conflicts with 'copy' on MacOSX and Windows platforms.
        50. 12.06.2007 REGIONS: fixed a problem with pasteing regions into an empty frame.
        51. 12.18.2007 ZIP: fixed a problem with the unix Makefile.
        52. 12.18.2007 FUNTOOLS: update to version 1.4.2.
        53. 12.18.2007 2MASS: limit size to 1024 arcsec.
        54. 12.21.2007 FITSY++: add support for HCOMPRESS compressed FITS.
        55. 12.28.2007 FITSY++: add support for GZIP compressed FITS.
        56. 01.03.2008 FITSY++: add support for PLIO compressed FITS.
        57. 01.04.2008 GUI: fixed a problem with X11 servers that return truecolor 32 bit when in fact the visual is truecolor 24bit.
        58. 01.15.2008 RELEASE version 5.1
        59. 01.17.2008 ANALYSIS: add the directory of any loaded analysis file to the PATH.
        60. 01.22.2008 REGIONS: fixed a problem introduced with reentrant parsers. Sexagesimal values between -00 and +00 were incorrectly parsed as +00.
        61. 01.23.2008 REGIONS: fixed a problem with parsing HMS/DMS coordinates.
        62. 01.24.2008 GUI: fixed a problem shift rotate mode.
        63. 01.24.2008 GUI: info panel 'Frame' width set to +4.
        64. 01.24.2008 GUI: add new goto frame menu.
        65. 01.24.2008 GUI: add support for move frames.
        66. 01.24.2008 ANALYSIS: for MacOSX tiger, wrap cmds with shell and PATH.
        67. 01.25.2008 CATALOGS: make sure xpa and command line retrieves are syncronous.
        68. 01.28.2008 CONTOUR: fixed a problem with loading contour levels into multiple frames.
        69. 01.31.2008 WINDOWS: changed how windows come into focus.
        70. 01.31.2008 TCL/TK: update to version 8.4.17.
        71. 02.07.2008 GUI: change default directory for standard dialog to $HOME.
        72. 02.07.2008 ANALYSIS: add /sw/bin to default path for MacOSX.
        73. 02.20.2008 CATALOGS: add support for editing a catalog table and regions.
        74. 02.20.2008 TEXT: add enable rotation switch for text regions.
        75. 02.20.2008 GUI: ds9 will now start in the users home directory for MacOSX Aqua users when invoked from a double click and the default dialog box is Motif or Windows.
        76. 02.20.2008 TCL/TK: update to version 8.4.18.
        77. 02.26.2008 IIS: disable most keystroke and mouse events for iis frames.
        78. 02.28.2008 FITSY++: fixed a problem with save fits and smoothed images.
        79. 02.29.2008 WCS: fixed a problem with calculating the size and center of complex fits images in WCS.
        80. 03.05.2008 GUI: backed out change key binding 'c' to 'r'. It causes untold grief with IRAF.
        81. 03.10.2008 MACOSX: fixed a problem with printing non standard colors.
        82. 03.10.2008 CATALOGS: catalog dialogs are now tied to the frame. This allows multiple copies of the same catalog, one per frame.
        83. 03.12.2008 GRID: added support for PC001001 formated WCS keywords.
        84. 03.13.2008 IIS: make sure socket is closed on exec.
        85. 03.13.2008 WINDOWS: add support for native printing.
        86. 03.18.2008 CROSSHAIR: fix a problem with the line width for postscript.
        87. 03.18.2008 MACOSX: restore postscript printing.
        88. 03.18.2008 WINDOWS: restore postscript printing.
        89. 03.19.2008 GUI: enhancements with Find/FindNext in text dialog windows.
        90. 03.19.2008 GUI: add console support.
        91. 03.24.2008 REGIONS: apply WCS to fits regions if present.
        92. 03.25.2008 PREFS: fixed a problem with Zoom menu preferences.
        93. 03.31.2008 GUI: add support for user configured button bar.
        94. 04.03.2008 CATALOGS: add support for simbad.
        95. 04.04.2008 MASKS: fixed a problem with mask color preference.
        96. 04.07.2008 IMEXAMINE: added support for key stroke events.
        97. 04.15.2008 RELEASE version 5.2
        98. 04.18.2008 REGIONS: added support for centroid.
        99. 04.21.2008 GUI: fixed a problem with 'c' and control-c.
        100. 04.21.2008 IIS: fixed a problem key events. Now all key events are active until IIS is in cursor mode. At this point all key events are passed to IRAF except for 'TAB'.
        101. 04.23.2008 MACOSX: split the binary and archive into two files, and codesign the binary, so that it will play well with leopard's new firewall.
        102. 04.25.2008 FITSY++: fixed a proble with mapincr. If seek_ is at end of file, mmap will not return an error.
        103. 04.28.2008 GUI: delete all frames resets the frame counter (broken in 5.2).
        104. 06.02.2008 GCC: remove all references to and use instead.
        105. 06.02.2008 GCC: support for gcc 4.2.
        106. 06.02.2008 GUI: fix typo in bin.tcl menus.
        107. 06.03.2008 FITSY++: changes to processing the header where ds9 will now work with illegal fits files that contains NULLs instead of SPACEs.
        108. 06.03.2008 RICE: implemented compatibility with cfitsio 3.08.
        109. 06.04.2008 GZIP: implemented compatibility with cfitsio 3.08.
        110. 06.04.2008 HCOMPRESS: implemented compatibility with cfitsio 3.08.
        111. 06.05.2008 IIS: disable scale menu with iis frame (fixed from version 5.2).
        112. 06.05.2008 REGIONS: fixed FITS regions polygon support. Now determine how many points based on the repeat value of the column, but check for .
        113. 06.06.2008 FITS: for saveimage fits, if non-linear WCS, don't attempt to save WCS.
        114. 06.06.2008 BLINK: add xpa/command line option -blink interval.
        115. 06.06.2008 REGIONS: add for DASH property.
        116. 07.11.2008 REGIONS: fixed a problem with the 'delete all' button.
        117. 07.16.2008 XPA: if CHECKDNS fails, set XPA_METHOD to local and initialize.
        118. 07.21.2008 PROJECTION: minor change to ensure that we step over the grid in 1 pixel values.
        119. 07.24.2008 IIS: add support for all 16 IIS colors.
        120. 07.25.2008 BINNING: fixed a problem with smooth and 3d binning.
        121. 08.04.2008 FITSY++: fixed a problem with BSCALE/BZERO and float/double data types.
        122. 08.11.2008 CATALOGS: fixed a problem with catalogs retrieved via a cds search. The id returned would fail during evaluation in creating a valid header.
        123. 08.11.2008 CATALOGS: add CMC to catalog menu.
        124. 08.11.2008 GUI: fixed a problem with the initial directory for the standard dialog when loading from the command line.
        125. 08.14.2008 VECTOR: vast improvements in optimization.
        126. 08.19.2008 GUI: catch a failure to initialize window system (a problem with X11) and exit nice.
        127. 08.19.2008 MACOSX: fixed the window tab problem for Aqua port.
        128. 08.19.2008 MACOSX: fixed canvas background issues.
        129. 08.20.2008 GUI: Add buttons to vertical layout.
        130. 09.10.2008 XPA: fixed a problem with blink interval < 1.
        131. 09.12.2008 PREFS: add 'Preserve During Load' for scale, pan, and regions.
        132. 09.12.2008 CONTOUR: add dash line option.
        133. 09.17.2008 PANNER: check to see if we are at pole.
        134. 09.17.2008 CATALOGS: add copy from row(s).
        135. 09.17.2008 REGIONS: look for new FITS POLYGON termination conditions
        136. 09.22.2008 COLORBAR: removed truecolor colorbar options. Always paint the entire image.
        137. 09.25.2008 BINNING: automatically look for x,y then ra,dec, before settling for columns 1 and 2.
        138. 09.25.2008 IMEXAM: added 'any' event (returns with a mouse event or key event).
        139. 10.02.2008 CATALOGS: fixed a problem with size format for SIMBAD and NED. Degrees and ArcSecs were incorrectly calculated.
        140. 10.03.2008 CATALOGS: Add support for CXC catalog.
        141. 10.08.2008 MACOSX: add MacOSX X11 10.5 firewall port.
        142. 10.10.2008 FOV: add sao/binospec.
        143. 10.15.2008 RELEASE version 5.3
        144. 10.17.2008 CATALOGS: removed support for Chandra Source Catalog at request of Ian Evans of CXC.
        145. 10.22.2008 MASKS: add support for mask transparency.
        146. 10.24.2008 MASKS: add new mask properties.
        147. 10.28.2008 GRID: add grid title support.
        148. 10.31.2008 RELEASE version 5.4
        149. 10.31.2008 GRID: full grid support for command line and xpa.
        150. 11.04.2008 FITSY: fixed a problem with header keywords that start with 'END'.
        151. 11.13.2008 FITSY: fixed a problem when there was a failure to correctly parse iraf or wcs keywords.
        152. 12.02.2008 FITS: for saveimage fits, fixed a problem with LTMV,DTMV, and WCS coordinates. They were off by 1 pixel in x.
        153. 12.02.2008 GUI: fixed a problem with panning via click and drag.
        154. 12.04.2008 MPEG: changed makefiles to compile tkmpeg code without optiminzation. -O created invalid code for MacOSX (and possible others)
        155. 12.04.2008 REGIONS: fixed a problem when creating a default panda region via a mouse click.
        156. 12.05.2008 POSTSCRIPT: fixed a problem with printing frames that have no image loaded.
        157. 12.05.2008 CATALOGS: fixed a problem with using the arrow keys in catalog dialogs.
        158. 12.10.2008 REGIONS: fixed a problem elongated rotated ellipses.
        159. 12.10.2008 MACOSX: fixed several problems with processing AppleEvents OpenDocument and PrintDocument. DS9 now supports opendoc and printdoc while currently running.
        160. 12.12.2008 IIS: re-enabled mouse events while in cursor mode.
        161. 12.12.2008 IIS: trap arrow keys while in cursor mode, do not pass to IRAF, instead warp cursor.
        162. 12.15.2008 SMOOTH: ignore NAN in smoothing convolution.
        163. 12.16.2008 GUI: fixed a problem with 'get fits size' to make it behave in the regions of poles.
        164. 12.29.2008 IIS: try to decode OBJECT from iisMessageCmd.
        165. 12.29.2008 IIS: if frame is in cursor mode (via the imexam task), RESET FRAME, will attempt to clean up.
        166. 01.05.2009 FUNTOOLS: update to version 1.4.2.2
        167. 01.05.2009 WCSSUBS: update to version 3.7.6
        168. 01.05.2009 GUI: add support for loading FITS multiple extension as multiple frames.
        169. 01.05.2009 EXAMINE: fixed many problems. Will work not work with data loaded via stdin or xpa fits.
        170. 01.15.2009 SMOOOTH: fixed a problem with BZERO and BSCALE. These keywords are reset to default values if present in the smoothed image, since the scaling has already been applied.
        171. 01.15.2009 FILTER: fixed an issue when unable to build a valid filter. Previously, it would exit() the program. Now, it will issue an error message and continue.
        172. 01.16.2009 MACOSX: if using the X11 port of MacOSX, increase the size of the window to make room for the size tab, similar for Aqua.
        173. 01.16.2009 SAVEAS: PNG now saves without GAMMA.
        174. 01.20.2009 GUI: Rearrange Frame menu and Region menu. They had grown too long and some window managers were having difficulties.
        175. 01.21.2009 REGIONS: fixed a problem rendering Bezier curves.
        176. 01.23.2009 RELEASE version 5.5
        177. 01.28.2009 RELEASE version 5.5.1
        178. 01.28.2009 GUI: fixed a problem in that the last file name loaded is incorrectly set if there are command line options that follow the file name.
        179. 02.02.2009 CATALOGS: updated urls for cds mirrors.
        180. 02.03.2009 CATALOGS: cleaned up tsv code. Will read comma and tab separted values, and will write tab separated values. Assumes first row is cols header unless first and second cols are numbers, then assumes ra, dec, in fk5 degrees.
        181. 02.04.2009 PSEUDOCOLOR: fixed a problem with the frame not remembering its current colormap bias and contrast setting when toggling between frames.
        182. 02.10.2009 BLT: fixed a problem zoombox under Aqua. XOR draws are now disabled.
        183. 02.11.2009 CIAO: The ciao regions parser will now accept compound region descriptions.
        184. 02.12.2009 CONTOURS: fixed a problem with command line/xpa dashed line parameter. Processing the -contour command is now a lot more robust in determining missing parameters.
        185. 02.16.2009 HISTOGRAM EQU: fixed a problem with clipping low = clipping high (usually as a result of ZSCALE).
        186. 02.19.2009 FITSY++: fixed a problem specifying an extension number of 0 with a multiple extension file with no primary image. It now properly fails to load.
        187. 02.19.2009 GUI: FITS multiple extension multiple frame will now load a primary image if present.
        188. 02.19.2009 GUI: compressed FITS multiple extension multiple frame will now load properly.
        189. 02.19.2009 GUI: FITS multiple extension multiple frame will ignore any bin table extensions.
        190. 02.19.2009 BLT: add support for MacOSX native printing.
        191. 02.19.2009 PLOT: native printing now fully supported for MacOSX and Windows.
        192. 02.24.2009 SAMP: add support for VO Simple Application Messaging Protocol (SAMP). Will process image.load.fits and table.load.votable events.
        193. 02.25.2009 FITSY++: fixed a problem with saving a slice of a cube. The header had invalid keywords.
        194. 02.27.2009 CATALOGS: support VOTable format.
        195. 03.02.2009 MacOSX: support for the MacOSX X11 Leopard 10.5 non-firewall version has been discontinued.
        196. 03.02.2009 MacOSX: fixed a problem with plot y axis titles offset.
        197. 03.02.2009 MacOSX: fixed a problem fork/exec and version 10.5 New version of tclMacNotify.c now used.
        198. 03.09.2009 FUNTOOLS: updated to version 1.4.3.
        199. 03.10.2009 REGIONS: fixed a problem with listing irregular panda, ellipse panda, and box panda in ds9/funtools format. The conjunction has been removed.
        200. 03.12.2009 GUI: If in tile mode, with only one frame, and tile mode is set to manual, tile anyway (don't drop into single mode).
        201. 03.12.2009 CATALOGS: speed up rendering of catalogs for simple symbol filters.
        202. 03.12.2009 REGIONS: support wildcards in filename.
        203. 03.12.2009 REGIONS: add support for load into all frames.
        204. 03.17.2009 GUI: Name server support now utilizies CDS Sesame.
        205. 03.17.2009 SKYVIEW: fixed a problem processing the survey query.
        206. 03.18.2009 HV: add support for cookies.
        207. 03.18.2009 ARCHIVES: add support for NVO Montage.
        208. 03.18.2009 REGIONS: fixed a problem calculating the WCS angle of a flipped WCS.
        209. 03.18.2009 HV: add support for mime-type text/xml for votable.
        210. 03.19.2009 CATALOGS: CDS now uses VOTABLE.
        211. 03.24.2009 CATALOGS: SIMBAD now uses VOTABLE.
        212. 03.24.2009 CATALOGS: NED now uses VOTABLE.
        213. 03.24.2009 CATALOGS: add preferences to download in VOTABLE if available.
        214. 04.01.2009 GUI: when you delete a frame, the current frame is reset to the previous frame, not the first frame.
        215. 04.06.2009 RULER: use preferences default distance system.
        216. 04.06.2009 GUI: fixed a problem with open other url.
        217. 04.09.2009 PROJECTION: properly calculate width when rebinning.
        218. 04.15.2009 RELEASE version 5.6
        219. 04.16.2009 REGIONS: fixed a rather nasty bug which caused a segv when switching between modes after copy a region from a frame.
        220. 04.16.2009 RELEASE version 5.6.1
        221. 04.17.2009 SAMP: use xmlrpc url method in POST header.
        222. 04.17.2009 CATALOGS: fixed a typo in the default SDSSR5 query.
        223. 04.20.2009 HV: fixed a problem with parsing query linked to a button.
        224. 04.20.2009 RELEASE version 5.6.2
        225. 04.22.2009 PREFS: updated the default name server menu.
        226. 04.24.2009 FIRST: removed a debug statement which was left in.
        227. 04.27.2009 REGIONS: fixed a problem loading a fits file with specified extension.
        228. 04.28.2009 HV: fixed again a problem with parsing url within a link with a query which contains a '?'.
        229. 04.30.2009 RELEASE version 5.6.3
        230. 05.01.2009 REGIONS: fixed a problem creating a text region with arcsec or arcmin char.
        231. 05.01.2009 NAMESRVR: fixed a problem with simbad cfa sexagesimal.
        232. 05.01.2009 CATALOGS: fixed a problem with quoting a VOTABLE FIELD DESCRIPTION string.
        233. 05.01.2009 CATALOGS: add column parameters in header output.
        234. 05.04.2009 SAMP: fixed a problem with select row list.
        235. 05.04.2009 REGIONS: add list to xpa and command line regions option.
        236. 05.21.2009 NVSS: add NVSS Image server back.
        237. 05.26.2009 NAMESRVR: set default name server to cds.
        238. 05.26.2009 CATALOGS: set default catalog erver to cds.
        239. 05.26.2009 SAMP: fixed a proble with quoting filenames and urls for xml.
        240. 05.26.2009 CATALOGS: will now try to determine the RA and DEC cols via the UCD if available.
        241. 05.26.2009 GUI: fixed a problem with standard dialog boxes and MacOSX Aqua and Windows. The dialogbox would sometimes fail to rise to top.
        242. 05.27.2009 GUI: WCS menu correctly updates print coordinate parameters.
        243. 05.27.2009 REGIONS: autocentroid now works for move, edit, and rotate.
        244. 05.27.2009 CATALOGS: CDS Search now retrieves search options from cds.
        245. 05.27.2009 CATALOGS: fixed a problem with FILTER and VOTable. The votable cols params were not being properly transfered to the new filtered table.
        246. 06.10.2009 REGIONS: DS9 regions syntax now supported in VOTable format.
        247. 06.11.2009 CATALOGS: "No Items Found" is now displayed on status line and not as a model dialog.
        248. 06.11.2009 REGIONS: fixed problem with dashed lines with rotated ellipses.
        249. 06.11.2009 GUI: fixed problem with standard file dialog boxes. Now, command line options and xpa command DOES NOT CHANGE the current directory. Only the use of the dialog box will reset the current directory.
        250. 06.11.2009 SAMP: don't send empty catalogs.
        251. 06.11.2009 CATALOGS: don't write empty catalogs.
        252. 06.11.2009 FILTER: fixed a problem with parsing filters on the command line that contain quotes.
        253. 06.16.2009 SAMP: the samp port number is now automatically determined at connection time.
        254. 06.17.2009 CATALOGS: for VOTables, change id to ID.
        255. 06.17.2009 CATALOGS: Add ID param to CXC catalog.
        256. 06.17.2009 SAMP: send unique catalog table-id for each catalog so tha multiple copies of ds9 with the same catalog loaded don't walk all over each other when connected to a hub.
        257. 06.18.2009 REGIONS: Update info box, graphs, and pixel table when draging in pointer and catalog mode.
        258. 06.18.2009 GUI: clean up code which enables/disables WCS menus based on current frame.
        259. 06.19.2009 HV: add support for arrow keys and mouse wheel.
        260. 06.19.2009 HV: add support for copy key shortcut.
        261. 06.19.2009 HV: add support for Return key shortcut for Submit.
        262. 06.25.2009 GUI: update crosshair, infobox, pixeltable when changing current slice in crosshair mode.
        263. 06.25.2009 REGIONS: fixed a problem with create/load/save regions with mosaic. The WCS of the first mosaic segment loaded is used for all regions.
        264. 06.30.2009 REGIONS: removed listwcs option for ds9 format.
        265. 06.30.2009 IIS: disabled annoying 'port/addr already in use' error message.
        266. 07.06.2009 BINNING: add update button to bin dialog.
        267. 07.06.2009 HV: add enhancements to allow complete control over a web browser window.
        268. 07.06.2009 VO: add enhancements to allow complete control over the vo dialog.
        269. 07.09.2009 XPA: 'page setup' has been renamed pagesetup.
        270. 07.15.2009 HV: support for sync http added.
        271. 07.15.2009 VO: support for sync http added.
        272. 07.15.2009 ANALYSIS: support for sync http added.
        273. 07.15.2009 ANALYSIS: analysis tasks invoked via xpa or command line are now run in blocking (sync) mode.
        274. 07.16.2009 XPA: added optional param to xpaget array to specify the endianness.
        275. 08.05.2009 XPA: add sleep command.
        276. 08.05.2009 GUI: add sleep command line option.
        277. 08.10.2009 GUI: fixed command line option commands.
        278. 08.10.2009 CATALOGS: for CDS catalogs, ignore the UCD at first and look for _RAJ2000 and _DEJ2000, then the UCD, then a list of common names.
        279. 08.11.2009 GUI: update Magnifier in Pan mode and key arrows.
        280. 08.12.2009 WINDOWS: Add support for wildcard filename expansion if invoked from DOS shell.
        281. 08.12.2009 REGIONS: Add support for load template at ra dec skyframe.
        282. 08.20.2009 MOSAIC: default for loading mosaics is now WCS not IRAF.
        283. 08.25.2009 SAMP: implemented full XPA capabilities via SAMP.
        284. 08.25.2009 I18N: make changes to fitsy++ lexer to allow non-single byte chars in filenames and paths.
        285. 08.26.2009 SAMP: fixed a problem with parsing the hub.xmlrup.url.
        286. 08.26.2009 XPA: update to version 2.1.10.
        287. 08.27.2009 FUNTOOLS: update to version 1.4.4.
        288. 09.01.2009 SAMP: fixed a problem with extra key value pairs in message.
        289. 09.01.2009 CATALOGS: add default samp command.
        290. 09.01.2009 CATALOGS: removed modal dialog info box calls. Messages are now updated in the status windows.
        291. 09.01.2009 GUI: added new level of menu updates that are only executed when a frame is create or deleted and not everytime there is a change of state.
        292. 09.03.2009 WINDOWS: disable menu updates during blinking because windows redraws the menu window each time the configuration is changed.
        293. 09.03.2009 SOLARIS: removed support for Solaris<9.0. DS9 now requires libxml2 be supported by the OS.
        294. 09.03.2009 GUI: added signal handling for non-windows. We now trap SIGINT and clean up before exiting.
        295. 09.08.2009 I18N: fixed a problem with spaces in filename.
        296. 09.08.2009 SAMP: fixed a problem using a hub that uses the Apache xmlrpc library.
        297. 09.10.2009 SAMP: fixed a problem with invalid ds9.get commands.
        298. 09.10.2009 GUI: cmap xpa, samp, and command line option is now much more tolerant to capitalization and spellings.
        299. 09.10.2009 WINDOWS: tcc is now used for the bin filter compiler. cygwin is no longer required.
        300. 09.21.2009 MACOSX: ports to Tiger (10.4), Leopard (10.5), and Snow Leopard (10.6) are now built under 10.6
        301. 09.22.2009 MACOSX: fixed a problem with snowleopard. For 32bit visuals, the alpha channel is set to 0xff, not 0.
        302. 09.28.2009 XPA: add XPA connect/disconnect menu options.
        303. 09.29.2009 RGB: fixed a problem with displaying images with NAN.
        304. 10.02.2009 MACOSX: pcc is now used for the bin filter compiler of i386 platforms if XCode is not installed./tt>
        305. 10.09.2009 ANALYSIS: fixed a problem with analysis plot command to maintain backward compatibility./tt>
        306. 10.12.2009 SMOOTH: fixed a problem that smooth is reset when no image is loaded. /tt>
        307. 10.15.2009 RELEASE version 5.7
      saods9/ds9/doc/release/r6.0.html000644 000765 000000 00000042540 11556610245 016635 0ustar00joyewheel000000 000000 DS9 Version 6 Release Notes

      SAOImage DS9 Version 6 Release Notes

        1. 10.20.2009 XPA: moved processing xpa command line options to first pass, and init xpa earlier in startup, so that vo and web click can be processed along with regular command line options.
        2. 10.24.2009 UPDATE: fixed a problem with trying to provide support for backward compatibility.
        3. 10.24.2009 IMGSVR: fixed a problem with trying to provide support for backward compatibility
        4. 10.24.2009 GUI: sleep command arg is now optional
        5. 10.24.2009 MOSAIC: IRAF mosaics are now layed out based on the first segment load, like WCS mosaics
        6. 10.27.2009 GUI: fixed a problem if you delete all frames, some of the load commands (such as -rgbcube) are not executed until there is a new frame. Now, if there are no frames, the load command will create a new frame if needed
        7. 10.28.2009 REGION: Corrected a problem with creating templates from a VAR. Uncommented old syntax which has been superceeded
        8. 11.02.2009 GRID: fixed a problem with 'grid numlab gap2'
        9. 11.02.2009 AST: updated to version 5.3-1
        10. 11.05.2009 TILE: corrected documentation for '-tile grid layout', should be column #, row #
        11. 11.05.2009 DATACUBE: fixed a problem with '-wcs replace|reset|append'. The result WCS is now applied to all slices
        12. 11.05.2009 XPA: fixed a problem with 'xpaset wcs replace foo.wcs'
        13. 11.13.2009 RICE: updated to cfitsio 3210/tt>
        14. 11.16.2009 COMPRESS: fixed a problem with compression that extends over a page boundry of 1Gb
        15. 11.30.2009 GRID: fixed a problem with exterior numerics and zoomed images
        16. 11.30.2009 HELP: combine FAQ and ISSUES pages
        17. 12.04.2009 RGB: aux contour overlays are now displayed on a per channel basis
        18. 12.07.2009 RGB: rgb images with data cubes can now set the current slice on a per channel basis
        19. 12.07.2009 VO: fixed a problem with xpa keep-alive
        20. 12.10.2009 TK: fixed a problem MacOSX X11 standard file dialog boxes. Borrowed code from tk8.5 to correct the problem when events are added to X11
        21. 12.10.2009 GUI: fixed a problem with modal dialogs when the user closed the window via the window manager and not the OK/CANCEL button
        22. 12.10.2009 XPA: update to version 2.1.11
        23. 12.14.2009 RGB: fixed a problem with a incorrect WCS compass in the panner image
        24. 12.15.2009 WCS: Documented the old ALIGN command and updated for XPA and SAMP
        25. 12.15.2009 GUI: Values accepted for SKYFORMAT expanded to 'deg', 'degree', and 'degrees' for command line options, XPA, and SAMP
        26. 12.17.2009 WCS: added code to test for bad WCS alignment issues (mainly from CAR projection, or pole problems)
        27. 12.17.2009 WCS: added code for WCS alignment for CAR. If CAR, getWCScrpix() is taken from center of image, and not from CRPIX keywords
        28. 12.18.2009 CATALOG: added USNO UCAC3 to the Optical list
        29. 12.24.2009 DATACUBE: DS9 now supports FITS images up to 10 dimensions. Happy Holidays!
        30. 12.28.2009 ANALYSIS: fixed problems with $data and $url and spaces in the tmp directory path name
        31. 12.28.2009 COMM: fixed problems with spaces in file names received as argumetns via SAMP and http
        32. 12.29.2009 REGION: fixed problems with XPA/SAMP and -format/-system/-sky options
        33. 12.29.2009 GUI: fixed a problem with hiding the current frame
        34. 12.30.2009 HV: at EXIT, close all opened HV windows so that tmp files may be deleted
        35. 12.30.2009 HV: fixed a problem for MIME type 'multipart/mixed', a tmp file was not deleted
        36. 12.30.2009 HV: fixed a problem for MIME type 'text/plain', a tmp file was not deleted
        37. 12.30.2009 ANALYSIS: add $filedialog(open) and $filedialog(save) macros
        38. 12.30.2009 GUI: allow filenames starting with a '-'
        39. 01.07.2009 I18N: for X11 port, look for LC_MESSAGES, LC_ALL, LANG env vars to set langage in that order
        40. 01.07.2009 I18N: update Japanese language translation
        41. 01.07.2009 CONTOUR: fix muliple problems with command line contour options. Each frame will now remember contour params between frames
        42. 01.08.2009 ANALYSIS: minor changes in output of get analysis commands. Now include parameters for web and bind commands
        43. 01.11.2009 COLORBAR: fixed a problem with the orientation of the numerics for vertical colorbar. This problem was introduced with AST-5.3
        44. 01.11.2009 RGB: fixed a memory leak for RGB frames
        45. 01.11.2009 I18N: update Japanese language translation
        46. 01.11.2009 MACOSX: fixed a problem with non-native standard file dialog boxes and error messages
        47. 01.12.2009 AST: fixed a memory leak with colorbar grid.
        48. 01.13.2009 PLOT: fixed a rare problem when the user closes a plot while in the middle of a zoom.
        49. 01.13.2009 IRAF: fixed a problem for mosaic iraf images are loaded and the bounding box is incorrectly calculated.
        50. 01.15.2010 RELEASE version 6.0
        51. 01.27.2010 XPA: fixed a problem with reporting errors during an XPA operation. The correct error message is now passed to XPA.
        52. 01.27.2010 SAMP: fixed a problem with reporting errors during an SAMP operation. The correct error message is now passed to SAMP.
        53. 01.27.2010 REGION: fixed a problem with catch and XPA/SAMP. Errors are now reset when needed so as not to invoke an XPA/SAMP ERROR message.
        54. 01.27.2010 XPA: update to version 2.1.12
        55. 02.02.2010 CONTOURS: fixed a problem with manually entered contours values.
        56. 02.12.2010 COLORBAR: add numerics equal distance option.
        57. 02.12.2010 COLORBAR: add colorbar size option.
        58. 02.12.2010 COLORBAR: move colorbar parameters from view menu to colorbar menu.
        59. 02.18.2010 MACOSX: fixed a problem where pcc was always being installed. Now, first look for FILTER_CC (valid for X11 users only). Next, see if /usr/bin/gcc exists. Finally, install pcc if needed, and set to use it.
        60. 02.25.2010 SCALE: fixed numerous problems with LOG and POW scales. Previously, the exp value of the log ratio was based on the dynamic range of the data. It is now specified by the user. This solves a number of issues with data which contains negative values. (see new documenation on scale equations).
        61. 02.25.2010 CATALOG: CSC is now loaded as a VOTABLE by default.
        62. 03.02.2010 CATALOG: add support for SkyBot catalog server.
        63. 03.03.2010 MACOSX: printing, reduce image by 5% so colorbar end tick numerics are not cutoff.
        64. 03.03.2010 WINDOWS: printing, reduce image by 5% so colorbar end tick numerics are not cutoff.
        65. 03.03.2010 HV: fixed a problem with MouseWheel scrolling under X11.
        66. 03.04.2010 ZOOM: added support for mouse wheel zoom.
        67. 03.04.2010 HV: added support for Find and FindNext.
        68. 03.10.2010 POSTSCRIPT: if colorbar and colorbar numerics are visible, reduce image by 5% so colorbar end tick numerics are not cutoff.
        69. 03.10.2010 PRINT: add psprint xpa/command/samp command for postscript printing on MacOSX and Windows.
        70. 03.10.2010 GRID: add support for custom numeric formats.
        71. 03.17.2010 BIN: add support for Match Bin.
        72. 03.23.2010 FITS: add a check tor binary tables with no rows or cols.
        73. 03.24.2010 WINDOWS: fixed a problem with native printing and bitmaps that were not aligned upon a word boundary.
        74. 03.24.2010 WINDOWS: fixed a problem with rendering circle point and box circle point.
        75. 03.26.2010 HV: fixed a rather nasty bug. If a HV window is open when prefs are saved, the next time ds9 is started, upon exist it tried to close an non-existent window, and went into a loop.
        76. 03.29.2010 SAMP: add support for table.load.fits events.
        77. 04.13.2010 BACKUP: add support for backup and restore.
        78. 04.14.2010 GUI: ensure all temp files in /tmp have unique names which will not conflict with other programs.
        79. 04.14.2010 RGB: corrected inconsistant behavior. The creation of a RGB frame will not alter the single/tile setting.
        80. 04.16.2010 TK: fixed a problem with some tk lib scripts not sourced at startup and if -cd is executed, ds9 is unable to locate the scripts.
        81. 04.16.2010 CIAO: removed any conjuction operators (which are not supported).
        82. 04.16.2010 COLORBAR: fixed a rather nasty memory bug which was invoked when the colorbar was re-configured.
        83. 04.23.2010 BACKUP: backup save sets can be saved into on a repeat basis.
        84. 04.26.2010 SCALE: fixed a problem with segv and Scale Dialog box.
        85. 04.26.2010 GUI: fixed a problem matching frames while in single mode.
        86. 04.29.2010 GUI: add cycle windows key shortcut.
        87. 05.04.2010 WINDOWS: new windows installation procedure.
        88. 05.06.2010 CATALOG: add IAU location code in preferences (for Skybot).
        89. 05.10.2010 REGION: fixed a problem with projection region when one or both end points are off the image. All gaps (mosaic) or off image (non-mosaic) have a value of 0 and NaNs are ignored.
        90. 05.12.2010 VOTable: add support for FIEDref and PARAMref elements.
        91. 05.15.2010 RELEASE version 6.1
        92. 05.18.2010 WINDOWS: change windows installation procedure back to allow user to specify destination directory.
        93. 05.18.2010 SAMP: fixed an issue with DS9 being confused as to if it is currently connected and the need to shutdown SAMP at exit.
        94. 05.18.2010 RELEASE version 6.1.1
        95. 05.19.2010 BACKUP: fixed several major problems.
        96. 05.19.2010 PSEUDOCOLOR: fixed a typo.
        97. 05.19.2010 RELEASE version 6.1.2
        98. 05.20.2010 MACOSX: always install pcc if gcc not available. We don't want old versions of pcc around after upgrades of the OS.
        99. 05.28.2010 PLOT: added statistics window for plots.
        100. 05.28.2010 PLOT: fixed some problems with menus and clear data.
        101. 05.28.2010 NAMESERVER: add get option to return coords directly to calling proc.
        102. 06.17.2010 CHECKDNS: update chechdns to add support for actually connect.
        103. 06.17.2010 VO: use checkdns to look for active server. If none found, used hard coded list.
        104. 06.21.2010 ZOOM TO FIT: center image exactly, do not round to nearest whole pixel.
        105. 06.21.2010 BACKUP: don't save prefs(version) var. We want the current preference file version, not the save set version.
        106. 06.21.2010 GUI: ds9 will now look for its auxiliary file using the current name of the executable.
        107. 06.30.2010 WCS: add WCS Edit dialog.
        108. 07.01.2010 XPA: add frame has command.
        109. 07.01.2010 SAMP: add frame has command.
        110. 07.09.2010 SAMP: fixed a problem with updating the connect meun item after a manual disconnect.
        111. 07.09.2010 SAMP: added support for SAMP_HUB env var.
        112. 07.13.2010 COLORBAR: fixed a problem with a bad default -size param. This problem only showed up with a pseudocolor8 visual.
        113. 07.15.2010 GUI: implemented support for internal error message facility. Any fatal internal error event will trigger an GUI error message, hopefully leaving the user the option to save data and to exit gracefully.
        114. 07.15.2010 GUI: implemented support for trapping the SIGBUS signal and routing it to the internal error message facilty. This usually occurs when a data file has been overwritten or a shared memory segment is no longer available.
        115. 07.27.2010 PLOT: save font info when save configuration.
        116. 08.04.2010 REGION: fixed a problem with the close button on EPANDA and BPANDA dialog boxes.
        117. 08.05.2010 COLORBAR: fixed a problem when the image is all one value.
        118. 08.10.2010 GUI: add Frame Match Image, Physical, Detector, Amplifier buttons.
        119. 08.12.2010 MAGNIFIER: add magnifier prefs for XPA, SAMP, and the command line.
        120. 08.12.2010 MAGNIFIER: add magnifier color option.
        121. 08.17.2010 GRID: fixed a problem with init colors.
        122. 08.17.2010 GRID: now supports colors in form #ffffff.
        123. 08.18.2010 CONTOURS: fixed an issue when loading aux contours which do not end with a linefeed.
        124. 08.23.2010 COLORBAR: fixed an issue when printing colorbar from the command line. The numerics are now updated before printing.
        125. 08.23.2010 COLORBAR: fixed an issue when rendering numerics. Numerics are now properly positioned, regardless of colorbar orientation or font.
        126. 08.25.2010 GRID: fixed a number of issues when rendering grid numerics. Numerics are now properly positioned, regardless of orientation or font.
        127. 08.27.2010 POSTSCRIPT: fixed a rather nastsy prolblem with the level 2 postscript driver (Ascii85 filter) in which, sometimes, the last line of the image would not be written.
        128. 08.30.2010 POSTSCRIPT: add new postscript level 3 driver, which uses Flate and Ascii85 filters.
        129. 08.31.2010 COLORBAR: add support for user specified number of tickmarks to be displayed.
        130. 08.31.2010 CATALOG: The user can now invoke a blank catalog tool via the command line, xpa, or samp.
        131. 09.01.2010 TCL/TK: upate to version 8.5.8.
        132. 09.01.2010 CATALOG: add font properties to display symbol database.
        133. 09.07.2010 CATALOG: now supports image/physical coordinate systems.
        134. 09.21.2010 CONTOUR: copy/paste contours no longer requires equatorial sky param.
        135. 09.21.2010 REGION: copy/paste contours no longer requires equatorial sky param.
        136. 09.21.2010 SAVEAS: add optional params for jpeg, mpeg and tiff command line options.
        137. 09.22.2010 FOV: update Chandra Templates.
        138. 09.22.2010 GUI: add open and close support for XPA, SAMP, and command line, for all dialogs.
        139. 09.28.2010 COLORBAR: fixed a problem with generating colorbar values when no frame is available.
        140. 09.30.2010 HV: fixed a problem with multiple cookies, which created a bad header.
        141. 09.30.2010 VO: fixed a problem with 'xpaget ds9 vo connect'. Now returns only the current connections, not all possible connections.
        142. 09.30.2010 REGION: added check for no frame and no image loaded for xpaset regions via stdin.
        143. 09.30.2010 ANALYSIS: add 'task #|name' command.
        144. 10.01.2010 ANALYSIS: fixed a problem when an analysis file was loaded after an image had been loaded. Them menu was not properly updated to reflect the template for each menu item.
        145. 10.05.2010 CUBE: fixed a problem in which sometimes changing the current slice whould hang.
        146. 10.05.2010 CUBE: add support for WCS in cube dialog.
        147. 10.07.2010 CENTROID: add support centroid params xpa/command line.
        148. 10.07.2010 CENTROID: fix some problems with an offset of .5 pixels.
        149. 10.07.2010 SMOOTH: new frames inherit current smooth params.
        150. 10.07.2010 RGB: fixed a problem when the first image load has a flipped wcs.
        151. 10.08.2010 REGION: add CIRCLE3D region.
        152. 10.11.2010 BACKUP: fixed a problem with smoothed images and contours.
        153. 10.14.2010 HELP: fixed a problem with finding the help files if the CD command has changed the default directory.
        154. 10.14.2010 XPA: update to version 2.1.13
        155. 10.15.2010 RELEASE version 6.2
      saods9/ds9/doc/release/r7.0.html000644 000765 000000 00000151171 13012655351 016633 0ustar00joyewheel000000 000000 DS9 Version 7 Release Notes

      SAOImage DS9 Version 7 Release Notes

        1. 10.18.2010 SCALE: fixed a problem preserve Scale at load.
        2. 10.18.2010 REGION: add group new, group update, and select invert commands.
        3. 10.20.2010 TCL/TK: update to version 8.5.9.
        4. 12.01.2010 FOV: Add HEASARC/Suzaku templates for HXD, XIS, and XRS
        5. 12.03.2010 CATALOG: fixed a problem when dec is specified as -00:xx:xx for CXC, SIMBAD, SKYBOT, and SKYVIEW
        6. 12.07.2010 BINNING: update WCS keywords for FITS bintables
        7. 12.10.2010 GUI: fixed a problem with displaying greek letters under linux.
        8. 12.24.2010 MOSAIC: fixed a problem introduced with verison 6.1 with wcs mosaics when first segment is flipped.
        9. 12.24.2010 MOSAIC: removed the FLT_EPSILON fudge factors in calculating mosaic segment matrices.
        10. 01.04.2011 SOLARIS: fixed a major bug with color allocation.
        11. 02.03.2011 POSTSCRIPT: all ports now generate identical postscript output (with a minor exception with ast grid numerics).
        12. 02.03.2011 TEXT: selecting a TEXT region now handles rotated text correctly.
        13. 02.18.2011 GROUPS: fixed a problem with selecting multiple regions.
        14. 02.21.2011 PIXELTABLE: fixed two problems with xpa and copy commands.
        15. 02.28.2011 GUI: add theme options.
        16. 03.01.2011 TKTABLE: updated to version 2.10.
        17. 03.03.2011 POSTSCRIPT: add new scale factor.
        18. 03.02.2011 GUI: all dialogs now use the new ttk widgets (with a few exceptions).
        19. 03.04.2011 PREFS: add -bg and -nan xpa/command line options.
        20. 03.14.2011 MOSAIC: added patch from Frank Valdes for default DETSIZE values.
        21. 03.14.2011 CMAP: add load/save xpa/command line options.
        22. 03.14.2011 BACKUP: fixed a problem with saved cmaps. Pathname is now relative.
        23. 03.17.2011 TKIMG: updated to version 1.4.
        24. 03.17.2011 ZLIB: updated to version 1.2.5
        25. 03.18.2011 WCSSUBS: updated to version 3.8.2
        26. 04.05.2011 AST: updated to version 5.6-0
        27. 04.05.2011 WCS: fixed/improved support for TNX, ZPN, ZPX, CAR.
        28. 04.25.2011 WCS: use AST for most WCS functions.
        29. 04.25.2011 SCALE: fix Scale Dialog formating issues.
        30. 04.26.2011 HELP: All user manual images are now local.
        31. 04.26.2011 CONTOUR: fixed problem with generating contours with BITPIX=-64.
        32. 04.26.2011 SMOOTH: now generates BITPIX=-64 image.
        33. 04.27.2011 SCALE: fixed a problem with setting scale user limits and then loading an image.
        34. 04.28.2011 EXTERNAL FILE: fixed a problem with macro substitution $filename.
        35. 04.28.2011 FUNTOOLS: updated to version 1.4.5.
        36. 04.28.2011 XPA: reinstalled version 2.1.13.
        37. 05.02.2011 WCS: use AST for all FITS WCS projections and DSS. Use WCSSUBS for TNX, ZPX, SIP, SCAMP, WCSDEP.
        38. 05.06.2011 WCS: Added additional reverse transformation (thanks Ed Los) for calculation of Panner WCS compass.
        39. 05.09.2011 GRID: add support for non-standard WCSDEP keyword.
        40. 05.12.2011 IMGSVR: for all image servers (2mass,dss,first,nvss,skyview) if invoked with no argument, yet dialog has a name or coords, automatically retreive the image.
        41. 05.12.2011 FITS: External File support- fixed a problem where the channel was not closed after the open pipe cmd was invoked and ds9 would run out of resources.
        42. 05.13.2011 GUI: enhanced/implemented Match/Lock Crosshairs.
        43. 05.13.2011 GUI: enhanced/implemented Match/Lock Frames.
        44. 05.13.2011 GUI: Moved Match Scale/Bin/Colorbar to respective menus.
        45. 05.16.2011 CONTOUR: fixed a problem with NAN in data.
        46. 05.17.2011 CATALOG: NED fixed a problem with getURL and added support for in/out sys/sky formats.
        47. 05.19.2011 CATALOG: SIMBAD added support for in/out sys/sky formats.
        48. 05.19.2011 CATALOG: CDS added support for in/out sys/sky formats.
        49. 05.20.2011 COMPOSITE: speed up create/delete composite region with +1000 regions.
        50. 05.20.2011 WCS: implemented preferred WCS for each frame. All WCS functions use the preferred WCS (i.e. copy/paste/load/save regions, contours, align, match, lock, rgb, cube).
        51. 05.25.2011 WCSSUBS: updated to version 3.8.3.
        52. 05.25.2011 AST: updated to version 5.7-0.
        53. 05.26.2011 WCS: use AST for TNX,ZPX,SCAMP.
        54. 05.27.2011 REGIONS: if unable to copy/cut/paste in WCS, fall back upon PHYSICAL.
        55. 05.27.2011 REGIONS: if unable to map coordinates correctly, do not a region.
        56. 06.03.2011 WCS: added support for xLON/xLAT and xyLN xyLT WCS.
        57. 06.03.2011 REGIONS: added regions properites commands to xpa,samp, and command line.
        58. 06.10.2011 HEALPIX: added support for generating an image from a healpix table (both binary and ascii).
        59. 06.13.2011 WCS: use AST for all WCS including TAN-SIP and WCSDEP.
        60. 06.16.2011 SAMP: added code to clean up better when DS9 is unable to parse a SAMP hub file.
        61. 06.16.2011 REGIONS: be sure to return template id when created.
        62. 06.16.2011 ANALYSIS: added autoload support for analysis files. DS9 will search a list of known dirs for *.ds9, at which DS9 will load the analysis file, and add the path to env(PATH).
        63. 06.20.2011 RGB: fixed a problem where the calculated wcs rotation between two frames was reset.
        64. 06.27.2011 REGIONS: fixed a problem the ds9, ciao, and pros regions parser. The parsers will now accept arcmin and arcsec syntax which includes sciencetific notation.
        65. 07.07.2011 POSTSCRIPT: generate postscipt now uses generic font names reguardless of platform and window manager.
        66. 07.08.2011 BIN: split mousewheel preferences between zoom and binning. By default, a bin file is zoom'd in/out with the mouse wheel, unless the binning mouse wheel is enabled via the preferences.
        67. 07.08.2011 GUI: add preference for standard dialog box for order of file types.
        68. 07.21.2011 GUI: all non-modal dialogs have Edit menu.
        69. 07.21.2011 CUBE: add match/lock slice commands.
        70. 07.22.2011 AST: updated to version 5.7-2
        71. 07.22.2011 WCS: speedup generating sexagesimal output
        72. 07.25.2011 BIN: fixed a problem with the update filter function.
        73. 07.29.2011 DIALOGS: fixed a problem with the motif dialogbox and selection of the initial directory. Set the code to the same as tkfmbox.tcl.
        74. 08.22.2011 WCS: if CTYPE is not of known type, assume LINEAR.
        75. 08.26.2011 PANNER: simplified compass prefs.
        76. 09.19.2011 WCS: only use A_ and B_ keywords if CTYPE is TAN-SIP. Ignore otherwise.
        77. 09.26.2011 REGIONS: use ::math::fuzzy for comparisons in basepanda, composite, and convert.
        78. 09.27.2011 WCSSUBS: updated to version 3.8.4.
        79. 09.30.2011 REGIONS: implemented M_PI_2, M_TWOMPI constants.
        80. 09.30.2011 REGIONS: use fuzzy math for degToRad() and radToDeg()
        81. 10.04.2011 WCS: pass any PV and QV keywords if present, regardless of projection.
        82. 10.05.2011 AST: updated to version 5.7-3
        83. 10.24.2011 REGIONS: fixed a problem with angs and PANDA, EPANDA, and BPANDA and copy/paste in FK5. This is related to the fuzzy math changes made earlier.
        84. 10.25.2011 FITSY++: fixed a problem finding cols by name in bin tables. Previous 'R' would be matched by 'RA'.
        85. 10.28.2011 HV: remove NED,SIMBAD,ADS,TDC,SKYVIEW,W3BROWSE from ANALYSIS:ARCHIVES menu due to lack of support from sites.
        86. 10.28.2011 COLORMAP: add colormap server to colormap dialog
        87. 11.01.2011 PRINT COORDINATES: now uses default skyframe and skyformat (as defined by WCS menu).
        88. 11.04.2011 SCALE: add asinh() and sinh() scales.
        89. 11.10.2011 CROP: add new crop commands.
        90. 12.09.2011 AST: updated to version 6.0-1
        91. 12.09.2011 CROSSHAIR: fixed an issue with coordinates of crosshair were .5 pixel off in Y.
        92. 12.09.2011 GUI: fixed an issue with centerimage() was .5 pixel off in Y.
        93. 12.15.2011 GRID: fixed an issue with text upside down.
        94. 01.03.2012 BIN: fixed a problem with depth of a 3d bin'd table.
        95. 01.03.2012 GRID: DSS and Linear projections use AST.
        96. 01.17.2012 3D: 3D Frame is now available.
        97. 01.19.2012 ANALYSIS: added $z macro.
        98. 01.19.2012 CROP: add [xmin:xmax,ymin:ymax,zmin:zmax] syntax
        99. 01.19.2012 CROP: check for valid crop with [] syntax.
        100. 01.23.2012 3D: add current slice highlite.
        101. 01.23.2012 SAVEIMAGE: fixed a problem with frame highlite during saveimage process.
        102. 01.23.2012 ANALYSIS: expand $image macro to accept new params: rgb and 3d.
        103. 01.27.2012 ANALYSIS: expand $filename(full) to return full filename (without cropping or filters parameters).
        104. 01.27.2012 ANALYSIS: add macro $value.
        105. 01.27.2012 CROP: fixed a problem when using an image subsection spec for a datacube.
        106. 01.28.2012 REGIONS: clean up rendering code for X,ps,win32,macosx to reduce un-needed calls to set the graphics context.
        107. 01.28.2012 CROP: all data cubes can be cropped in 3D.
        108. 01.28.2012 CROP: cropping in 3D will reset currentSlice if needed.
        109. 01.28.2012 REGIONS: fixed a problem if the region color was an X11 valid color, some names would get mapped to the incorrect color when printing.
        110. 02.02.2012 COLORMAP: fixed a problem with SAO format colormaps that have very long lines.
        111. 02.03.2012 PRINT COORDINATES: added filename to options.
        112. 02.03.2012 WCS: if wcs parameters are changed or reset, all open catalogs regions are updated. Normal regions are not changed.
        113. 02.07.2012 COLORMAP: remove support for old RTD and ITT colormaps
        114. 02.08.2012 GUI: consolidate MATCH and LOCK items into submenus.
        115. 02.08.2012 GUI: move match bin, match scale, and match colorbar to frame match menu.
        116. 02.16.2012 CUBE: fixed a proble with calculating the wcs to image for axis 3.
        117. 02.16.2012 FITSY++: changes required for gcc 4.7.
        118. 02.16.2012 BLT: patched graph.tcl to use legendRelief instead of labelRelief.
        119. 02.16.2012 RGB: added lock wcs.
        120. 02.16.2012 FUNTOOLS: updated to version 1.4.5-2.
        121. 02.21.2012 3D: fixed a problem with scale clip scope. Should alway be in GLOBAL.
        122. 02.29.2012 HEADER: add save header command.
        123. 03.01.2012 XPA: updated to version 2.1.14.
        124. 03.01.2012 SCALE: MinMax mode AUTOSCAN set to SAMPLE if width*height*depth > 1e8.
        125. 03.12.2012 IMGSVR: fixed a problem with clearing params if no image was loaded previously.
        126. 03.22.2012 REGION: add ellipse3d, box3d, polygon3d, point3d regions.
        127. 03.23.2012 IMGSVR: fixed a problem new frame option and rgb.
        128. 03.23.2012 BIN: check for valid col names for -bin col command.
        129. 03.28.2012 REGIONS: add Analysis support per region.
        130. 03.28.2012 REGIONS: add Analysis Plot3d support for Circle,Ellipse,Box,Polygon,Point.
        131. 03.28.2012 REGIONS: add Analysis Plot2d support for Projection,Line,Vector.
        132. 03.28.2012 REGIONS: Circle3d now converted to Circle.
        133. 03.28.2012 REGIONS: Plot3d saves native coordinate values.
        134. 03.28.2012 SCALE: simplified scale dialog controls to allow user values.
        135. 03.29.2012 WCS: fixed a problem with numaxes > 3 images and editing WCS params.
        136. 04.09.2012 WCS: second attempt to handle non-equatorial wcs. try to build a legal header from the wcssubs struct to feed to ast.
        137. 04.10.2012 SCALE: fixed an issue with autocut, ll != hh.
        138. 04.10.2012 SKYVIEW: add WISE/COBE/WMAP to skyview survey menu.
        139. 04.10.2012 WCS: if CD matrix is all zero, use cdelt/pc matrix.
        140. 04.11.2012 SMOOTH: fixed a problem with images with BSCALE/BZERO.
        141. 04.11.2012 CATALOG: fixed a problem with d:m:s formated DEC which started with a '+'
        142. 04.12.2012 CATALOG: fixed a problem with d:m:s to degree conversion. Try to maintain higher precision.
        143. 04.12.2012 CATALOG: add IAU location code to dialog.
        144. 04.13.2012 COLORMAP: add user contributed cmaps.
        145. 04.18.2012 GUI: fixed a problem with long WCSNAME values.
        146. 04.20.2012 FITSY++: added support for GZIP compresss parameter ZQUANTIZ.
        147. 04.23.2012 PS: fixed a bug with definiton of 32 bit integers on 64 bit OS.
        148. 04.23.2012 PREFS: add Text Dialog Font preferences menu.
        149. 04.23.2012 LOCK: fixed a problem with lock frame and mouse wheel events.
        150. 04.24.2012 SKYBOT: Look for EXPTIME and add 1/2 to DATE-OBS to get middle of observation.
        151. 04.24.2012 LINUX64: add --hash-style=both to support old and new GNU API for hash libs.
        152. 04.26.2012 PHOTO: add support for other image formats.
        153. 04.26.2012 EXPORT: add support for exporting to other image formats.
        154. 04.30.2012 WCS: fixed a problem with TAN-SIP and wcs append/replace.
        155. 05.01.2012 TCL: check to see if packages msgcat and http have already been found before sourcing during startup.
        156. 05.03.2012 MPEG: fixed a problem with the bottom of an image cut off.
        157. 05.07.2012 COLORTAG: add color tags.
        158. 05.10.2012 CROP: fixed a problem with backup and lock crop.
        159. 05.10.2012 SCALE: fixed a problem lock scale and crop.
        160. 05.10.2012 BACKUP: fixed a problem with back and -slice, -mosaic load options.
        161. 05.11.2012 REGIONS: add auto plot2d and plot3d prefs.
        162. 05.14.2012 GUI: add fits save.
        163. 05.17.2012 MPEG: updated to ezMPEG v0.1
        164. 05.17.2012 AST: updated to 7.0.3
        165. 05.23.2012 WCS: is always displayed
        166. 05.23.2012 CATALOG: fixed a problem with the sign of d:m:s conversion introduced on 04.12.2012.
        167. 05.28.2012 MOVIE: minor tweaks on incr slice during movie.
        168. 05.28.2012 WIN32: fixed a problem with 3d fillImageJoin. Statck overflow.
        169. 05.29.2012 BACKUP: fixed active frames issue.
        170. 05.30.2012 GUI: add threads command.
        171. 05.30.2012 GUI: fixed a problem with PASTE for entries. Will now process unicode.
        172. 05.31.2012 GRID: fixed a problem with parsing 6.1 and 6.2 backup save sets. New grid options parser implemented.
        173. 05.31.2012 PLOT: fixed a problem in generating postscript. Now just set plot size.
        174. 05.31.2012 PLOT: fixed a postscript font issue with helvetica.
        175. 05.31.2012 PLOT: add axes format.
        176. 06.06.2012 RELEASE version 7.0
        177. 06.12.2012 BACKUP: fixed a problem with processing version 6.1 and 6.2 backup save sets.
        178. 06.15.2012 RELEASE version 7.0.1
        179. 06.13.2012 3D: add border graphics.
        180. 06.15.2012 TCLLIB: updated to version 1.14. This fixes a problem with math::fuzzy::tlt.
        181. 06.21.2012 REGION: fixed a problem with rotated images and postscript printing of circle region.
        182. 06.21.2012 IMGSRV: fixed a problem loading images from dss/2mass/etc from the command line. Use the first frame if not already loaded.
        183. 06.21.2012 SLA: removed from build tree. not needed since AST now has own version.
        184. 06.21.2012 HELP: rm link to home page. hv can't handle the new web site.
        185. 06.22.2012 SKYBOT: added -filter=0.
        186. 06.22.2012 POSTSCRIPT: fixed a problem with rotated text regions affecting other regions.
        187. 06.22.2012 REGIONS: fixed a problem selecting text regions at high zoom.
        188. 06.22.2012 WCS: add support for SAO Polynomial Plate.
        189. 06.25.2012 GUI: improved error handling. Will now properly handle a FATAL error msg from internal widgets.
        190. 06.25.2012 GUI: non FATAL msgs can be supressed via preferences.
        191. 06.25.2012 FRAME: trap SIGBUS while scanning for min/max.
        192. 06.25.2012 WCS: use new version of AST:fitschan.c which supports SAO polynomial plate solution and checks for the case of all PV keywords=0.
        193. 06.25.2012 GUI: enable hidden directory button for linux standard dialog box (windows only).
        194. 06.25.2012 GUI: move About menu item to Help menu.
        195. 06.27.2012 LOCK: fixed a problem with LOCK FRAME and the current skyframe.
        196. 06.27.2012 PANNER: fixed a problem where the wcs compass was incorrectly set.
        197. 06.29.2012 AST: updated to 7.0.5
        198. 07.02.2012 HTTP: set default timeout to 1 minute.
        199. 07.03.2012 RELEASE version 7.0.2
        200. 07.05.2012 RGB: fixed a problem with -rgbimage and extnames.
        201. 07.05.2012 GCC: fixed a problem gcc 4.5 and Pixmap typedef.
        202. 07.06.2012 SCALE: fixed a problem with scale dialog and very small numbers.
        203. 07.10.2012 BIN: fixed a problem with very large FITS Bin Tables.
        204. 07.11.2012 FITSY++: fixed a number of problems with very large (2Gb>) FITS Image and Bin Tables.
        205. 07.13.2012 WINDOWS: fixed a problem with dashs on the display. Tk does not give us much flexibilty, so pick something closer to the desired length.
        206. 07.17.2012 CATALOG: add sdss r7 and sdss r8 to default menu.
        207. 07.17.2012 GRIDS: fixed a problem where each frame grid remembers its own configuration.
        208. 07.17.2012 FITSY++: fixed a number of problems with save very large (2Gb>) FITS Image and Bin Tables.
        209. 07.23.2012 REGIONS: fixed a problem with PLOT3D and BOX, ELLIPSE, POLYGON. At certain angles, incorrect counts were calculated.
        210. 07.27.2012 REGIONS: fixed a problem with rendering ELLIPSE PANDA X11 at angle=0.
        211. 07.30.2012 PRINT: fixed a problem with printing simple text and catalog dialogs.
        212. 07.30.2012 REGIONS: add default length format to preferences.
        213. 07.30.2012 GUI: update infobox when moving between frames.
        214. 07.30.2012 BACKUP: don't save compressed image files if not requested.
        215. 08.02.2012 WCS: fixed a number of issues with the WCS parameters dialog.
        216. 08.02.2012 WCS: added support for SIP and SCAMP keywords to WCS parameters dialog.
        217. 08.06.2012 MAGNIFIER: be sure to update magnifier when changing slice.
        218. 08.09.2012 PLOT: fixed a problem reading muliple datasets from one source.
        219. 08.10.2012 AST: updated to version 7.0.6
        220. 08.13.2012 3D: add z axis scaling.
        221. 08.13.2012 FITSY++: accept double quoted (invalid) strings.
        222. 08.21.2012 REGIONS: fixed a problem with -regions centroid command.
        223. 09.05.2012 SMOOTH: add lock/match smooth.
        224. 09.14.2012 PLOT: enhanced gui.
        225. 09.14.2012 PLOT: add bar chart option.
        226. 09.14.2012 PLOT: add scatter chart option.
        227. 09.14.2012 REGIONS: add Analysis Statistics.
        228. 09.14.2012 REGIONS: add Analysis Radial Profile.
        229. 10.3.2012 CATALOG: add match option.
        230. 10.15.2012 RELEASE version 7.1
        231. 10.18.2012 GUI: update File menu.
        232. 11.02.2012 GUI: add support for NRRD file format. Includes encodings: raw and gzip.
        233. 11.05.2012 GUI: fixed a problem with cut/paste for contours and catalogs.
        234. 11.27.2012 PLOT: fixed typo in range dialog.
        235. 11.27.2012 GUI: fixed a problem with clear analysis menu item and the analysis menu.
        236. 12.06.2012 SAMP: fixed a typo which disabled SAMP_HUB functionality.
        237. 12.06.2012 DS9: fixed a problem on how to align an image with an odd size frame. In versions <7.0, the floating point number was rounded down. This has been re-implemented.
        238. 12.11.2012 GPL: upgrade license to GPL v3.
        239. 12.18.2012 COLORBAR: add support for SAO format GAMMA param.
        240. 12.18.2012 SAVEIMAGE: add support for EPS.
        241. 12.20.2012 REGIONS: fixed a problem with updating analysis plot x/y axis titles.
        242. 12.21.2012 REGIONS: fixed a problem with analysis radial profile and negative xaxis values.
        243. 12.21.2012 REGIONS: fixed a problem with writing composited regions.
        244. 12.21.2012 REGIONS: fixed a problem with list/save data radial annulus.
        245. 12.28.2012 RGB: add photo export.
        246. 01.19.2013 FITSY++: fixed a problem parsing filters
        247. 01.19.2013 FITSY++: fixed a problem with incomplete variable array TFORM descriptions, used in fits compression. If no length is specified, set default to 8.
        248. 01.29.2013 SAVE: save fits will now save an entire cube if loaded.
        249. 01.30.2013 SAVE: add support for save mecube.
        250. 01.31.2013 CONTOUR: fixed a problem with loading a set of contours with a specified color.
        251. 02.13.2013 FITSY++: support new fits compression float/double gzip method.
        252. 02.13.2013 FITSY++: ds9 now distinguishes between BLANK/NAN/INF values.
        253. 02.15.2013 REGIONS: no longer output filename in header.
        254. 02.26.2013 FITSY++: use magic bytes to check for gz compressed files before load.
        255. 02.28.2013 RGB: loading rgbimage, rgbcube, rgbarray into non-rgb frame will create new rgb frame for all command line, xpa, and samp commands.
        256. 03.01.2013 FRAME: trap SIGBUS and SIGSEGV while scanning data.
        257. 03.01.2013 FRAME: will only return error messages at levels info, warning, and error.
        258. 03.10.2013 PREFS: fixed a problem with prefs zoom align.
        259. 03.12.2013 BACKUP: check for sym links.
        260. 03.14.2013 GUI: non-modal dialogs are now created at the center of the main ds9 window.
        261. 03.25.2013 VO: default vo method is mime.
        262. 03.25.2013 VO: if xpa method fails, default to mime.
        263. 03.26.2013 XPA: add samp cmd to xpa.
        264. 03.26.2013 SAMP: add xpa cmd to samp.
        265. 04.01.2013 AST: updated to version 7.1.1
        266. 04.11.2013 CATALOG: fixed cut and paste.
        267. 04.11.2013 WCS: SAO_PLT is now handled directly by AST.
        268. 04.12.2013 PREFS: add dialog center option.
        269. 04.12.2013 PLOT: all plots (user, analysis and catalogs) are now available to the plot command.
        270. 04.15.2013 RELEASE version 7.2
        271. 04.16.2013 AST: updated to version 7.2
        272. 04.16.2013 TCLLIB: updated to version 1.15
        273. 04.26.2013 TCL: updated to version 8.6.0
        274. 04.26.2013 TK: updated to version 8.6.0
        275. 04.26.2013 ZVFS: updated to version 2
        276. 05.15.2013 CATALOGS: add AAVSO to cat list.
        277. 05.17.2013 HV: add DASCHE to Archives list.
        278. 06.03.2013 IRAF: fixed a problem with imexamine coords.
        279. 06.04.2013 IRAF: save/export will save wcs values, not just the color number.
        280. 06.05.2013 IRAF: colorbar displays wcs values.
        281. 06.05.2013 IRAF: fixed a number of issues with tvmark colors.
        282. 06.11.2013 FITSY++: implemented compressed FITS SUBTRACTIVE_DITHER_1 method.
        283. 06.14.2013 ENVI: add support for import/export envi format.
        284. 06.14.2013 AST: updated to version 7.3.1
        285. 06.18.2013 GUI: fixed a problem with blank headers being displayed.
        286. 06.18.2013 ARRAY: now accepts cropping info in filename.
        287. 06.18.2013 NRRD: now accepts cropping info in filename.
        288. 06.18.2013 ENVI: now accepts cropping info in filename.
        289. 06.21.2013 PHOTO: fixed a problem with rounding average.
        290. 06.24.2013 ZVFS: zvfs.c updated from freewrap 6.6
        291. 06.26.2013 SEGMENT: add new segment region.
        292. 07.02.2013 ENVI: fixed a problem with calculating wcs.
        293. 07.02.2013 FITSY++: changes to allow 1D image.
        294. 07.03.2013 GROUPS: fixed a problem allowing multiple selection of region groups.
        295. 08.14.2013 WCS: Linear WCS now goes straight to AST.
        296. 09.10.2013 PSEUDOCOLOR: rm support for pseudocolor visuals.
        297. 09.17.2013 REGIONS: PLOT3D dramatic improvements in speed of deep images and large regions.
        298. 09.17.2013 GUI: set last file directory based on file type last loaded.
        299. 09.18.2013 ENVI: minor change to hdr parser.
        300. 09.18.2013 ENVI: fixed a major problem with swapbytes.
        301. 09.18.2013 CATALOG: fixed a problem with selecting the correct region when arrow keys are used.
        302. 09.19.2013 FITSY++: cleaned up code for dumping array,nrrd,envi in native endian.
        303. 09.25.2013 AST: updated to version 7.3.2 to fix problem with SCAMP.
        304. 09.25.2013 FITSY++: fixed a problem parsing filters in the command line.
        305. 10.05.2013 3D: implement image cache.
        306. 10.08.2013 3D: implement az and el background render.
        307. 10.10.2013 COLORBAR: fixed a minor problem with specifing 'other color'.
        308. 10.11.2013 REGIONS: add mouse click epsilon parameter.
        309. 10.16.2013 CUBE: add lock slice wcs.
        310. 10.17.2013 REGIONS: fixed a problem with ds9 regions parser and parsing hex color specification.
        311. 10.18.2013 XPA: fixed a problem with "file" and backward compatability.
        312. 10.18.2013 ANALYSIS: add several checks to verify analysis file before try to parse.
        313. 10.22.2013 GUI: fixed a problem with preserve PAN while loading.
        314. 10.22.2013 SCALE: removed PRESERVE SCALE. This has been redundant since 7.0. Setting the scale limits does the same thing.
        315. 10.22.2013 CONTOUR: fixed a problem if no system is specified and, the default is normally WCS, unless no WCS is defined, then default to PHYSICAL.
        316. 10.28.2013 TCL/TK: update to version 8.6.1.
        317. 10.31.2013 HTML: fixed issue causeing corrupt stack with new CLANG compilers.
        318. 11.10.2013 FITS: improved error handling for malformed FITS tables.
        319. 11.15.2013 CUBE: fixed a problem with lock slice wcs.
        320. 11.18.2013 CATALOG: add SDSS9 to optical menu.
        321. 12.12.2013 WCS: add support for AST WCS def.
        322. 01.28.2014 REGIONS: add auto statistics option.
        323. 03.06.2014 AST: updated to version 7.3.4.
        324. 03.21.2014 CATALOG: add 'Copy to Regions' from XPA/SAMP/commandline.
        325. 03.26.2014 WCS: fixed a problem with wcs append/replace where the line length was 81 with newline.
        326. 04.07.2014 FITSY++: expanded valid EXTNAME keywords to include '.', '-', and '_' chars.
        327. 04.07.2014 FITSY++: save fits will convert BITPIX=-16 to BITPIX=32
        328. 06.09.2014 CATALOG: if sort col is of type real, but contains blank values, substitue a value of 0.
        329. 07.01.2014 BLT: completed upgrade to TkBLT 3.0.
        330. 07.28.2014 CATALOG: add UCAC4 to optical menu.
        331. 08.01.2014 MACOSX: completed new 64bit Aqua port.
        332. 08.06.2014 3D: don't wipeout the cache when generating a movie.
        333. 09.15.2014 ENVI: try to determine data file name from header file name.
        334. 09.30.2014 GUI: default mouse mode is NONE (not POINTER).
        335. 09.30.2014 GUI: change mode POINTER to REGION.
        336. 10.01.2014 RELEASE version 7.3
        337. 10.03.2014 GUI: Fixed problems with Control-S and Control-Z accelerators.
        338. 10.03.2014 MACOSX: Removed accelerators for Print, PageSetup, and Find, as then invoke a known bug with Tk and dialogs.
        339. 10.03.2014 MACOSX: Fixed a problem with coordinate display dialog.
        340. 10.03.2014 MACOSX: Fixed a problem with deleting colorbar tags.
        341. 10.03.2014 PREFS: Beta versions are now deemed to be of the same verison as the final release.
        342. 10.03.2014 PREFS: Fixed a problem processing a newer prefs file. Now wait to notify the user after the init phase has been completed.
        343. 10.03.2014 PREFS: some combinations of old prefs files were not being updated correctly.
        344. 10.06.2014 FIRST: rename FIRST to VLA
        345. 10.06.2014 VLA: add STRIPE82 survey.
        346. 10.06.2014 HV: fixed a problem with scrolling.
        347. 10.07.2014 RELEASE version 7.3.1
        348. 10.08.2014 REGIONS: fixed a problem with parsing old regions file fonts.
        349. 10.08.2014 RELEASE version 7.3.2
        350. 10.10.2014 IEXAM: imexam has been renamed iexam.
        351. 10.15.2014 WCS: fixed a problem with imflip=1.
        352. 10.15.2014 AST: updated to version 8.0.0.
        353. 10.20.2014 AST: updated to version 8.0.2.
        354. 10.20.2014 HPX: updated compatiable wcslib-4.24.
        355. 10.21.2014 CATALOG: add width property for symbols.
        356. 10.22.2014 MACOSX: fixed a problem with mouse wheel zoom.
        357. 10.22.2014 FITSY++: add support for SUBTRACTIVE_DITHER_2 keyword.
        358. 10.22.2014 FITSY++: fixed a problem with native endian arrays. Unless specified, the array is assumed to be of the same endian-ness as the processor.
        359. 11.14.2014 CUBE: fixed a problem with lock slice with no fits loaded.
        360. 11.17.2014 TCL/TK: update to version 8.6.3.
        361. 11.18.2014 MACOSX: preferences, fixed jumpy window size problem.
        362. 11.19.2014 GUI: view horizontal/vertical now sets display size to default settings.
        363. 12.03.2014 IIS: fixed a problem with open_unix().
        364. 12.29.2014 BLOCK: add support for blocking.
        365. 02.04.2015 HPX: fixed a problem with cropping HPX images.
        366. 02.05.2015 FITS++: Fits Compression- fixed a problem with uncompressed blocks.
        367. 02.05.2015 FITS++: added support for 'Q' column arrays.
        368. 02.17.2015 HV: Fixed a problem when url scheme is FTP and authority included username and passwd.
        369. 02.18.2015 WCS: Fixed a problem when CDELTs and PCs keywords are used, but not in the orthodox way.
        370. 03.11.2015 NRRD: Fixed a problem exporting built data cube.
        371. 03.11.2015 ENVI: Fixed a problem exporting built data cube.
        372. 03.24.2015 MOSAIC: mecube will now skip over tables and find all images.
        373. 04.08.2015 FITS++: fixed a problem with compressed fits files and static memory size. now using alloc.
        374. 04.13.2015 CATALOGS: fixed a problem with deleting the frame first, before closing a catalog dialog.
        375. 04.15.2015 CUBE: added support for reorder data cube axes.
        376. 04.16.2015 SMOOTH: blank/NaN values are no longer replaced by 0, instead, NaN is used.
        377. 04.17.2015 SMOOTH: is now threaded.
        378. 04.21.2015 GUI: add UNITS keyword to infobox.
        379. 04.23.2015 CUBE: reorder is now threaded.
        380. 04.24.2015 IEXAM: add macro expansion string.
        381. 04.27.2015 CHECKDNS: fixed a problem so that delay will activate on time (and will return promptly).
        382. 04.29.2015 TCL/TK: update to version 8.6.4.
        383. 04.30.2015 LAYOUT: add tile grid direction.
        384. 04.30.2015 GUI: add user selected keyword to infobox.
        385. 05.21.2015 SCALE: add lock/match scalelimits.
        386. 05.29.2015 RELEASE version 7.4b1
        387. 06.09.2015 CATALOG: fixed a problem finding correct cols to parse. Original bug introduced after 7.3.2.
        388. 06.09.2015 RELEASE version 7.4b2
        389. 06.15.2015 SCALE: scaling for data cubes now use clip scope (LOCAL/GLOBAL).
        390. 06.18.2015 SCALE: Default scope is now GLOBAL.
        391. 06.18.2015 SCALE: MinMax mode AUTOSCAN has been deprecated.
        392. 06.22.2015 GUI: fixed a font problem displaying greek symbols.
        393. 06.22.2015 RELEASE version 7.4b3
        394. 06.29.2015 SKYVIEW: add survey and size options.
        395. 07.04.2015 RELEASE version 7.4b4
        396. 07.07.2015 VO: add additional code to use default url list if unable to download list.txt for any reason.
        397. 07.14.2015 FITSY++: fixed a problem with RICE compression and 4 byte INT to FLOAT conversions.
        398. 07.15.2015 FITSY++: fixed a problem with GZIP lossless compression.
        399. 07.15.2015 FITSY++: Add support for GZIP_2 FITS compression.
        400. 07.20.2015 RELEASE version 7.4b5
        401. 07.23.2015 FITSY++: fixed a problem with SAVE FITS and writing NAXIS3=1 into the header.
        402. 07.23.2015 FITSY++: added check for fits table in SAVE FITS TABLE.
        403. 07.24.2015 RELEASE version 7.4b6
        404. 08.13.2015 REGIONS: fixed a problem with FITS CIAO PIE region.
        405. 08.13.2015 REGIONS: fixed a problem with FITS CIAO ANNULUS region.
        406. 08.13.2015 REGIONS: added support for FITS CIAO SECTOR and ELLIPTANNULS regions.
        407. 08.16.2015 WCS: fixed a problem with reorder 3D cubes.
        408. 08.25.2015 COLORBAR: added MathLab colormaps.
        409. 08.25.2015 COLORBAR: added MatPlotLib colormaps.
        410. 08.26.2015 COLORBAR: added H5utils colormaps.
        411. 08.26.2015 COLORBAR: added GIST colormaps.
        412. 08.26.2015 COLORBAR: added Topographic colormaps.
        413. 08.28.2015 MOSAIC: fixed a problem introduced in 7.4b1 which failed to ignore generic tables in extensions when loading multiple extension fits.
        414. 09.03.2015 PAN: fixed a problem with pan then zoom mode.
        415. 09.17.2015 IIS: fixed a problem with imexam introduced in an earlier beta version.
        416. 09.17.2015 IIS: fixed a problem with imexam when a former imexam frame has been delete.
        417. 09.17.2015 MOSAIC: add IRAF DETSEC Align option.
        418. 09.18.2015 RELEASE version 7.4b7
        419. 09.21.2015 WCS: Look for old RADECSYS keyword if present.
        420. 09.22.2015 CROSSHAIR: add crosshair parameters dialog.
        421. 09.30.2015 TEMPLATES: fixed a problem with WCS introduced in an earlier beta version.
        422. 10.02.2015 SMOOTH: smooth on load now threaded.
        423. 10.02.2015 REGIONS: PLOT3D is disabled by default.
        424. 10.13.2015 SAMP: fixed a issue with case of meta-data in xmlrpc.
        425. 10.14.2015 GUI : fixed an issue where not all header options were offered in the case of compressed fits images.
        426. 10.14.2015 BACKUP : fixed a problem when creating a backup with a file that has been compressed.
        427. 10.15.2015 SAMP: fixed a issue with results with empty elements.
        428. 10.16.2015 LINUX: For all key press events, calculate the current cursor position, as Ubuntu and MacOSX Aqua returns bad x,y values.
        429. 10.21.2015 CATALOG: fixed a problem where a catalog had a column of the same name as a variable.
        430. 10.26.2015 GUI: fixed a problem remembering the previous filename loaded for standard dialogs.
        431. 10.30.2015 SAMP: fixed a issue with incorrect body length in xmlrpc messages.
        432. 11.03.2015 3D: fixed a major issue introduced in the beta 7.4 series which caused a redraw everytime the current slice was changed.
        433. 11.03.2015 SCALE: Default scope is back to LOCAL.
        434. 11.04.2015 CONTOUR: Fixed lots of issues with interaction with contours and bin/block/smooth.
        435. 11.04.2015 SCALE: remove old AUTOSCAN and SAMPLE code.
        436. 11.09.2015 FITS: fixed issues with data all NAN or INF.
        437. 11.09.2015 CUBE: fixed issues with selecting current slice and updating other dialog boxes while in local mode.
        438. 11.11.2015 RELEASE version 7.4b8
        439. 11.11.2015 FITS: fixed another issue when calculating MIN and MAX and one pixel images.
        440. 11.17.2015 WCS: fixed problem with infobox/grid with xLN/xLT WCS.
        441. 11.18.2015 RELEASE version 7.4b9
        442. 11.30.2015 CATALOG: update CDS catalog search parameters.
        443. 12.02.2015 BACKUP: fixed a problem with backup save sets generated with beta versions.
        444. 12.03.2015 PREFS: fixed a problem with prefs generated with beta versions.
        445. 12.07.2015 WCS: fixed a problem with replacement WCS.
        446. 12.08.2015 WCS: cubes now share WCS structures (very fast).
        447. 12.08.2015 ANALYSIS: fixed a problem with $z macro.
        448. 12.10.2015 RELEASE version 7.4b10
        449. 12.11.2015 SAVEIMAGE: fixed a problem with the colorbar not updating when used with -exit.
        450. 12.17.2015 FITS: 3D displayed z coord off by .5.
        451. 12.21.2015 RELEASE version 7.4
        452. 01.05.2016 XPA: update to version 2.1.17.
        453. 01.05.2016 FUNTOOLS: update to version 2.1.6.
        454. 01.21.2016 WCS: fixed a problem with PC3_3 being ignored.
        455. 01.21.2016 WCS: add 3d axis params to WCS dialog.
        456. 01.25.2016 MACOSX: fixed a problem init Tkblt.
        457. 02.10.2016 MACOSX: fixed again the problem with font sizes and screen dpi.
        458. 02.11.2016 WCS: fixed a problem with WCS replace and files without linefeed termination.
        459. 03.07.2016 XPA: "tcl","source","print" commands only enabled for local.
        460. 03.07.2016 XPA: new xpa command.
        461. 03.07.2016 GUI: "tcl" command enabled from commandline.
        462. 03.07.2016 PREFS: for security reasons, will only look for the prefs file in the $HOME directory, and must be group/world readonly.
        463. 03.07.2016 INIT FILE: will only look for any init file(s) in the $HOME, /usr/local/lib, /opt/local/lib directories.
        464. 03.07.2016 INIT FILE: only read-only files will be sourced.
        465. 03.08.2016 SAMP: new samp command.
        466. 03.08.2016 SAMP: new ds9.restricted-get command.
        467. 03.08.2016 SAMP: new ds9.restricted-set command.
        468. 03.08.2016 HV: xpa-set is now in safe mode.
        469. 03.18.2016 GUI: Hard code font size. Give up on trying to correct for screen resolution.
        470. 03.18.2016 REGION: fixed title issue with radial plot.
        471. 03.18.2016 REGION: fixed title issue with 2d plot.
        472. 03.28.2016 FITSY++: cube update clip is now threaded.
        473. 03.30.2016 GUI: cleaned up initialization and event loop code.
        474. 03.30.2016 WCSSUBS: updated to version 3.9.0.
        475. 04.01.2016 GUI: default number of threads is now detected based on OS.
        476. 04.01.2016 WCS: fixed a problem with region templates, lengths were incorrect.
        477. 04.05.2016 GUI: added coordinates of min/max to infobox.
        478. 04.05.2016 GUI: limit dialog status lines to 80 chars, so the window will not expand off the screen.
        479. 04.06.2016 WCS: use getWCSOrientation() instead of wcs->imflip for calcAlign and mapAngleTo/FromRef.
        480. 04.14.2016 SCALE: fixed minmax mode SAMPLE.
        481. 04.14.2016 CUBE: update histogram and histequ when changing current slice.
        482. 04.20.2016 MINMAX: reimplemented "-minmax sample" commandline option for loading very large images..
        483. 04.21.2016 3D: fixed a problem with rendering the bbox when endpoints are way off screen. Now clip against frame.
        484. 04.22.2016 3D: rendering speed improvements.
        485. 04.26.2016 3D: panner images are now cached.
        486. 04.27.2016 GUI: fixed a minor problem with header choice box and no filename given for xpaset stdin commands.
        487. 04.27.2016 3D: dramatic improvements in render speed for certain data sets.
        488. 04.27.2016 3D: fixed a problem with backup and 3D pan.
        489. 05.04.2016 BIN: added keywords EQUINOX, MJD-OBS, and RADESYS if present.
        490. 05.06.2016 RELEASE version 7.5b1
        491. 05.11.2016 SCALE: fixed a problem where histequ colorbar numerics displayed were incorrect.
        492. 05.18.2016 GUI: fixed a very minor problem where catalog tools is invoked back to back via command line.
        493. 05.19.2016 REGIONS: many important changes to Ciao Region parser to support current syntax. In particular, changes to BOX, ROTBOX, RECTANGLE. SECTOR, FIELD, and REGION are now no-ops.
        494. 05.23.2016 TKCON: updated to version 2.7 proper.
        495. 05.24.2016 PREFS: check file permissions and set accordingly.
        496. 05.24.2016 PREFS: new prefs file directory implemented.
        497. 05.07.2016 STARTUP: for security reasons, will only look for the startup file in the $HOME directory, and must be group/world readonly.
        498. 05.31.2016 TKBLT: updated to version 3.1.
        499. 06.01.2016 TKBLT: updated to version 3.1.1.
        500. 06.20.2016 TKBLT: updated to version 3.1.2.
        501. 06.20.2016 FITSY++: fixed a problem where BZERO/BSCALE was not applied to MIN/MAX for BITPIX=-32,-64.
        502. 06.27.2016 REGIONS: default regions coordinate system is set to PHYSICAL if no WCS present.
        503. 06.28.2016 3D: fixed yet another problem with rendering speed.
        504. 07.01.2016 FITSY++: look for MJD_OBS if MJD-OBS is not present.
        505. 07.05.2016 IMGSRV: simplify code.
        506. 07.11.2016 IMGSRV: add support for VLSS.
        507. 07.12.2016 SIA: simple image access protocal implemented.
        508. 07.13.2016 RELEASE version 7.5b2
        509. 07.13.2016 SKYVIEW: updated survey options.
        510. 07.14.2016 IIS: fixed segv issue.
        511. 07.15.2016 RELEASE version 7.5b3
        512. 07.15.2016 TKBLT: upgrade to version 3.2.2.
        513. 07.15.2016 GUI: fixed an issue with sourcing init files and 'global ds9'.
        514. 07.15.2016 RELEASE version 7.5b4
        515. 07.21.2016 PRINT: scaling now implement without mods to Tk source code.
        516. 07.21.2016 PRINT: give up on postscript scaling to screen resolution. Print resolution of 72 equals screen resolution.
        517. 07.25.2016 TKHTML: updated to version 1.0.3, fixed an issues with corrupted screens under MacOSX.
        518. 07.26.2016 TCL/TK: update to version 8.6.5.
        519. 07.26.2016 BACKUP: fixed an issue with missing RGB channels.
        520. 07.27.2016 TCLLIB: update to version 1.15.
        521. 07.29.2016 PREFS: fixed a problem with name server.
        522. 08.12.2016 REGIONS: Sky Coordinates are now formated for precision of 1/1000 of arcsec.
        523. 08.16.2016 PLOT: fixed an issue with incorrect color for bar chart.
        524. 08.18.2016 BIN: pass all keywords except manitory and reserved.
        525. 09.02.2016 CONTOUR: new contour file format. DS9 can read/write the new contour file format while continue support for read the old contour file format.
        526. 09.06.2016 CONTOUR: can read contour levels from new format while continue support for read and write old contour levels format.
        527. 09.09.2016 REGION: fixed a problem where RULER was not using the default length format.
        528. 09.14.2016 POSTSCRIPT: fixed a problem with PS level 3 images.
        529. 09.16.2016 RELEASE version 7.5rc
        530. 09.16.2016 MACOSX: add NSHighResolutionCapable attribute to info.plist to support Retina displays.
        531. 10.05.2016 REGION: fixed a problem when contour "Convert to Polygons" created polygon regions. Saving or listing the regions caused a Segv.
        532. 10.05.2016 REGION: fixed a problem saving or listing regions in WCS when no WCS is defined for the FITS image. The regions file was corrupted.
        533. 10.05.2016 REGION: fixed a problem with Composite Regions not properly updating when created. The region was not displayed properly.
        534. 11.10.2016 MAGNIFIER: added check to prevent a SEGV in rare cases.
        535. 11.15.2016 GUI: added check for bad "tk scaling" command results, which can occur with high resolution monitors.
        536. 12.15.2016 RELEASE version 7.5
      saods9/ds9/doc/ref/3d.html000644 000765 000000 00000010243 11763203427 015605 0ustar00joyewheel000000 000000 3D

      3-D Frames

      Previous versions of SAOImage DS9 would allow users to load 3-D data into the traditional 2-D frames, and would allow users to step through successive z-dimension pixel slices of the data cube. To visualize the 3-D data in DS9 v. 7.0, a new module, encompassed by the new Frame 3D option, allows users to load and view data cubes in multiple dimensions.

      The new module implements a simple ray-trace algorithm. For each pixel on the screen, a ray is projected back into the view volume, based on the current viewing parameters, returning a data value if the ray intersects the FITS data cube. To determine the value returned, there are 2 methods available, Maximum Intensity Projection (MIP) and Average Intensity Projection (AIP). MIP returns the maximum value encountered, AIP returns an average of all values encountered. At this point, normal DS9 operations are applied, such as scaling, clipping and applying a color map.

      Rendering time is independent upon the actual data cube size. Instead, the time it takes to render is based on how many rays are needed to project the data cube upon the screen in the view volume and the current zoom factor. The new module requires no special hardware or graphical processor unit (GPU) and the rendering time is adequate for interactive GUI manipulation on most computers. The rendering engine is developed using the POSIX thread library, allowing multiple light weight processes to be spawned to complete an image in parallel. The number of threads actually generated is a user specified parameter. Since all modern hardware contain multiple CPU cores, the default value is 8 threads. For larger work stations, this number can be increase. For every doubling in the number of CPU cores available, rendering times decrease approximately 75%.

      Example:
      # create 3d frame, load fits file
      # set view angle to az 45 el 30 deg
      # set rendering method to Average Intensity Projection

      % ds9 -3d mycube.fits -3d vp 45 30 -3d method aip

      % xpaset -p ds9 3d
      % xpaset -p ds9 file mycube.fits
      % xpaset -p ds9 3d vp 45 30
      % xpaset -p ds9 3d method aip
      All 2-D graphics, regions, cross hairs, contours, and coordinate grids, are applied to the current slice, which is selected by the user. When the user wishes to match or lock a 2-D image and to a 3-D data cube, the current slice is used to determine the rendering solution. The user can crop the data cube for all 3 axes via the command line or the GUI. The new module also supports FITS event files binned into a data cube.

      All printing support has been extended to the new 3-D module. The user may generate 3-D images in Postscript, JPEG, TIFF, and other formats, just as in the 2-D case. Furthermore, native printing is supported for the Windows version.

      DS9 analysis macros have been enhanced to fully support the new 3-D module, allowing the user to invoke external analysis tasks based on the current view parameters and to return results back into DS9 in the form of text, plot, 2-D image, or 3-D image.
      saods9/ds9/doc/ref/analysis.html000644 000765 000000 00000111466 12614503526 017132 0ustar00joyewheel000000 000000 Analysis

      Analysis

      Each file type known to DS9 can have user-defined analysis commands associated with it. These analysis commands are defined at start-up time , or loaded by the user, by means of an ASCII analysis description file. The analysis commands are available for execution, either via the Analysis Menu or the XPA point Analysis. In addition, commands may be bound to events, such as keystrokes or mouse clicks. This type of command is called a bind command.

      DS9 searches for an analysis file named ds9.ans or ds9.analysis in the current directory and $HOME to be loaded at startup. In addition, DS9 will search the following directories for any analysis files to be loaded at startup in the form of *.ds9: the current directory, $HOME/bin, /usr/local/bin, /opt/local/bin, and /soft/saord/bin. Finally, the user may specify analysis files to be loaded at startup in the preferences analysis panel. The user may also load or clear current analysis commands via command line options or the Analysis menu.

      When activated, either from the menu, XPA, or bound event, an analysis command first is macro-expanded to fill in user-defined arguments and then is executed externally. Results may be displayed in a separate text window, plot window, or in a image frame.

      Syntax
      Command Type
      Macros
      Help
      Parameters
      Hierarchical Menus
      Sample

      Syntax

      The analysis file that defines the known analysis commands consists of one or more file descriptors, each of which has the following format:
      Menu label to be used
      A space separated list of file templates
      Command type [menu | bind <event>]
      The command line for the analysis program

      Task names may contain space characters. All lines may be indented. Also, the '#' character is a comment character. A separator can be inserted in the menu by specifying the following sequence '---'.

      Example:
      # this will insert a menu separator
      ---

      Command Type

      The third line indicates the type of command.

      menu

      A menu command creates an menu option under the Analysis menu option, and can be invoked by the user via the GUI or XPA.

      Example:
      # Menu command example
      My Analysis Task
      *.fits
      menu
      $data | doit | $text

      bind

      A bind command is a command that is bound to an event. When the event occurs, the command is executed. Types of events available include all TK events, including all keystrokes and mouse clicks. If a command is bound to an event other that a keystroke, care must be taken to not to interfere with other internal DS9 events.

      To bind to a key stroke, use the following command type:

      bind <keystroke>
      Example:
      # Bind command example
      Print coordinates
      *.fits
      bind x
      echo "$x $y" | $text

      web

      A web command allows the user to invoke the internal web browser from the analysis menu.

      Example:
      # web command example
      HTTP based
      *
      web
      http://hea-www.harvard.edu/RD/ds9/ref/index.html

      File based
      *
      web
      file:/home/joye/index.html

      Macros

      The following macros are macro-expanded to fill in user-defined arguments before the command is executed. Strings that contain $<macroname> that user does not want to be expanded may be escaped by using $$<macroname>. All strings that contain $<string>  that are not a macro name will not be affected.

      For example:

      echo "$$data $foo" | $text

      will display a text dialog that contains "$data $foo"

      $width
      $height
      $depth

      Substitute the width, height, or depth of the data file in the command line.

      Syntax:
          $width
          $height

      Example:
          echo "$width $height $depth" | $text

      $bitpix

      Substitute the bitpix of the data file in the command line.

      Syntax:
          $bitpix

      Example:
          echo "$bitpix" | $text

      $data

      Data from the current frame becomes the input data to the command string. This data is in the form of a FITS image. This macro can only used at the beginning of the command string.

      Syntax:
          $data

      Example:
          $data | dosomething | $text

      $entry

      Display an entry modal dialog. The returned string is substituted. If cancel is selected, the command line is not executed.

      Syntax:
          $entry(<message>)

      Example:
          echo "$entry(Enter something here)" | $text

      $env

      Substitute the value of a shell environment variable.

      Syntax:
          $env(<shell variable>)

      Example:
          echo "$env(PATH)" | $text

      $filedialog

      Display the standard file dialog. Substitutes the returned pathname. Argument specifies if an open file or save file dialog is invoked.

      Syntax:
          $filedialog([open|save])

      Example:
          echo "$filedialog(open)" | $text

      $filename

      Substitute the filename of the data file in the command line. A full filename includes any absolute or relative path. A root filename contains no path. A (2D) subsection defines a subimage from xmin,ymin to xmax,ymax. For Frame3D, a 2D subsection will also include the current slice (PLANE=) parameter if not 1. A 3D subsection defines a subimage from xmin,ymin,zmin to xmax,ymax,zmax and no PLANE parameter.

      Syntax:
          $filename # filename with extname, (2d) subsections, filters
          $filename(root|root,base) # root filename with with extname, no subsections, no filters)
          $filename(full|full,base) # full filename with extname, no subsections, no filters)

      Example:
          dosomething $filename | $text
          dosomething $filename(root) | $text

      $filename[$regions]

      Combination of $filename and $regions macros. Generates a series of filenames, each with a region.

      Syntax:
          $filename[$regions]
          $filename[$regions(<options>)]

      Example:
          dosomething $filename[$regions] | $text

      $geturl

      This macro differs from all other macros, including $url, in that no subprocess pipe is created. Only HTTP is supported. The contents of the url are retrieved and sent to $text, $plot, or $image. No other processing is allowed. The primary purpose of this macro is to support external analysis for the Windows platform, which has no subprocess support.

      Syntax:
          $geturl(http://<hostname>:<port>/<query>)

      Example:
          $geturl(http://foo.bar.edu/foo.html) | $text

      $image

      The resulting image data is display in a DS9 frame. This macro should be the last macro of a command line. Optional parameter indicates if a new frame and what type of frame is created for the new data. The macro is removed from the command line before execution.

      Syntax:
          $image
          $image([new|rgb|3d|current])

      Example:
          doit | $image(new)

      $message

      Display a message dialog box, with option buttons.  After displaying the message, the macro is removed from the command line before execution. If cancel or no is selected, the command line is not executed.

      Syntax:
          $message(<message>)
          $message([ok|okcancel|yesno],<message>)

      Example:
          $message(okcancel,This is a Message)| doit | $text

      $null

      Expect no output or results from analysis task. Note: no error message will be returned if the analysis task fails to execute correctly.

      Syntax:
          $null

      Example:
          echo "Hello, world" > foo | $null

      $pan

      Substitute current pan location of the particular data file are returned. The default coordinate system is physical.

      Syntax:
          $pan
          $pan(<coordinate system>,<format>)

      where:

          coordinate system = [image|physical|detector|amplifier|wcs|wcsa...wcsz]
          sky frame         = [fk4|fk5|icrs|galactic|ecliptic]
          sky format        = [hms|sexagesimal|degrees]

      Example:
          echo $pan(fk5,sexagesimal) | $text

      $plot

      Display data in plot window. This macro should be the last macro of a command line. The data is read via STDIN and consist of a pair of coordinates, with option error values. (xy, xyex, xyey, xyexey) Default dimension is xy. The macro is removed from the command line before execution.

      For $plot(stdin) only:

      The title, x axis label, and y axis label are assumed to be on the first line of input, delimited with a new-line. However, if the data starts with $BEGINTEXT, all text between $BEGINTEXT and $ENDTEXT will be removed from the data and displayed in a separate text dialog window, with the remaining data, including the title, x axis label, and y axis label, will be displayed in a plot window. Furthermore, if the data contains the string $ERROR, an error is assumed to have occurred and a text dialog window is displayed only.

      Syntax:
          $plot
          $plot(,,,)
          $plot(<title>,<x axis label>,<y axis label>,[xy|xyex|xyey|xyexey])
          $plot(stdin)

      Example:
          doit | $plot(This is aTitle,X Axis,Y Axis)
          doit | $plot(stdin)

      $regions

      Substitute region definition in specified region format, coordinate system, and coordinate format. The default coordinate system is physical, default coordinate format degrees, and default region format DS9. Arguments may appear in any order, as long as they are separated by ',' and no spaces. If one or  more properties are specified, only regions with all of the specified properties will be substituted.

      Syntax:
          $regions
          $regions(<options>)

      where options are one of the following:

          regions format    = [ds9|ciao|saotng|saoimage|pros|xy]
          property          = [include|exclude|source|background]
          coordinate system = [image|physical|detector|amplifier|wcs]
          sky frame         = [fk4|fk5|icrs|galactic|ecliptic]
          sky format        = [sexagesimal|degrees]

      also, the old SAOTNG formats are also supported:

          $regions_pixels
          $regions_degrees
          $regions_hms
          $include_regions
          $include_regions_pixels
          $include_regions_degrees
          $include_regions_hms
          $exclude_regions
          $exclude_regions_pixels
          $exclude_regions_degrees
          $exclude_regions_hms

      Example:
          dosomething $regions | $text
          dosomething $regions(pros) | $text
          dosomething $regions(source,wcs,fk5) | $text
          dosomething $regions(saotng,background,exclude,ecliptic,sexagesimal) | $text

      $text

      Display text in a text dialog window. This macro should be the last macro of a command line. To display text from only STDOUT use '|' as the pipe command. To display text from both STDOUT and STDERR, use '|&' as the pipe command. No parameters are required. The macro is removed from the command line before execution.

      Syntax:
          $text

      Example:
          doit | $text # stdout
          doit |& $text # stdout and stderr

      $url

      URLs are processed and stored in a temporary file. Only HTTP and anonymous FTP are supported.

      Syntax:
          $url(http://<hostname>:<port>/<query>)
          $url(ftp://<hostname>/<filename>)

      Example:
          $url(http://legacy.gsfc.nasa.gov/rosat/data/p000s26b.img.Z) | uncompress | $image
          $url(ftp://legacy.gsfc.nasa.gov/rosat/data/hri/images/rh100193_img.fits) | $image

      $vo_method

      Returns the vo method.

      Syntax:
          $vo_method

      Example:
          echo '$vo_method' | $text

      $value

      Substitute the value at the location of the cursor of an bind event.

      Syntax:
          $value

      Example:
          echo "$value" | $text

      $x
      $y
      $z

      Substitute coordinates of an bind event. When a bind event is triggered, the x,y coordinates of the mouse of the particular data file are returned. The default coordinate system is physical. This macro is only available for bind commands. For datacubes, the z coordinate is returned based on the current slice selected.

      Syntax:
          $x
          $x(<coordinate system>,<format>)
          $y
          $y(<coordinate system>,<format>)
          $z
          $z(<coordinate system>)

      where:

          coordinate system = [image|physical|detector|amplifier|wcs|wcsa...wcsz]
          sky frame         = [fk4|fk5|icrs|galactic|ecliptic]
          sky format        = [hms|sexagesimal|degrees]

      Example:
          echo "$x $y" | $text
          echo "$x $y $z" | $text
          echo "$x(fk5,sexagesimal) $y(fk5,sexagesimal)" | $text
          echo "$x(wcs) $y(wcs) $z(wcs)" | $text

      $xpa

      Returns the xpa access point name.

      Syntax:
          $xpa

      Example:
          echo '$xpa' | $text

      $xpa_method

      Returns the xpa method.

      Syntax:
          $xpa_method

      Example:
          echo '$xpa_method' | $text

      Help

      The user may define his own HELP message. This message will be available to the user as a menu item. An optional label maybe specified. The default label is Help. When invoked, an text dialog window will appear, containing the message. Multiple HELP items maybe defined within a menu or across hierarchical menus.

      Example:
      help Main Help
      A help message may contain
      multiple lines of description of the tasks
      in the menu or menus
      endhelp

      Parameters

      The user may define his own macros or parameters to be evaluated before the command line is executed. To do this, the user defines a param segment that is referenced in the command line. The param definition has the follow format:

      param <name>
      <variable> <entry | checkbox | menu> <title> <default> <{comment}>
      ...
      endparam

      or

      param <name>
      @<iraf param filename>
      end

      The definition either consisted of a number of variables, one per row, or the name of a IRAF style parameter file. DS9 will look for the IRAF parameter file in:

      ./<filename>
      $UPARM/<filename>
      $HOME/iraf/<filename>
      Example:
      param foobar
      var1 entry {Variable 1} default {this is a entry}
      var2 checkbox {Variable 2} 1 {this is a checkbox}
      var3 menu {Variable 3} AAA|BBB|CCC {this is a menu}
      endparam

      To use parameters, specify the param name at the beginning of your command line:

      Parameter Test
      *
      menu
      $param(foobar); echo "$var1 $var2 $var3" | $text

      When the menu item is selected, the user will be presented with a dialog box that contains entry, checkbox, or menu choices for each variable specified. If the user clicks ok, the values are substituted in the command line before execution.

      Hierarchical Menus

      The user may define hierarchical menus. Use this to organized crowded menus. To do this, frame menu entries with hmenu <label> and endhmenu. Hierarchical menu labels may contain spaces. Multiple levels maybe implemented.

      Example:
      hmenu Stuff
          hello
          *
          menu
          echo "Hello" | $text

          world
          *
          menu
          echo "World" | $text

          hmenu More Stuff
              hello world
              *
              menu
              echo "Hello World" | $text
          endhmenu
      endhmenu

      Will create an hierarchical menu with two members, hello and world.

      Sample

      #
      # Analysis command descriptions:
      #       menu label
      #       file templates
      #    menu/bind
      #       analysis command line

      param foo
          var1 entry entry 40 {this is a entry}
          var2 checkbox checkbox 1 {this is a checkbox}
          var3 menu menu AAA|BBB|CCC {this is a menu}
      endparam

      param bar
          @analysis.par
      endparam

      param foobar
          @tvdisply.par
      endparam

      param ltc
          bins entry "Enter number of [t1:t2:]bins" 0 "('0' for default number of bins)"
      endparam

      # Help Main Help

      help Main Help
      These menus contain a test for each possible feature

      supported by the ds9 (blank line above)
      endhelp
      ---

      hmenu Test Web
          help Web Help
          Help for web features
          endhelp

          Web Test url
          *
          web
          http://hea-www.harvard.edu/RD/ds9/

          Web Test file
          *
          web
          file:/home/joye/saods9/ds9/tests/hv.html
      endhmenu

      hmenu Test Basics
          help Basic Help
          Help for basic features
          endhelp
          ---
          Test escape char # this is a comment
          *
          menu
          echo "this is not a macro $$xpa" | $text

          Test pass thru # this is a comment
          *
          menu
          echo "this is not a macro $foo" | $text

          Test $xpa # this is a comment
          *
          menu
          echo $xpa | $text

          Test $xpa_method
          *
          menu
          echo $xpa_method | $text

          Test $vo_method
          *
          menu
          echo $vo_method | $text

          Test $filename
          *.fits
          menu
          echo $filename | $text

          Test $filename(root)
          *.fits
          menu
          echo $filename(root) | $text

          Test $xdim $ydim $bitpix
          *.fits
          menu
          echo "$xdim $ydim $bitpix" | $text

          Test $xcen $ycen
          *.fits
          menu
          echo "$xcen $ycen" | $text

          Test $env
          *
          menu
          echo $env(PATH) | $text
      endhmenu

      hmenu Test Regions
          help Regions Help
          Help for regions features
          endhelp
          ---
          Test $regions
          *.fits
          menu
          echo "$regions ds9_s:$regions(ds9,source,image) ciao_b:$regions(ciao,background) saotng_i:$regions(saotng,include,wcs,fk5) pros_e:$regions(pros,exclude,wcs,fk5,sexagesimal) xy_be:$regions(xy,background,exclude,wcs,fk4,hms)" | $text

          Test $regions wcs
          *.fits
          menu
          echo "$regions(ds9,wcs) $regions(ds9,wcs,fk5,sexagesimal) $regions(ds9,wcsa) " | $text

          Test $include_regions_pixels
          *.fits
          menu
          echo "ds9_s: $source_regions ds9_b: $background_regions_pixels ds9_i: $include_regions_degrees ds9_e: $exclude_regions_hms" | $text

          Test $filename $regions
          *.fits
          menu
          echo "$filename[$regions]" | $text

          Test $filename $regions()
          *.fits
          menu
          echo "$filename[$regions()]" | $text
      endhmenu

      hmenu Test Output
          help Output Help
          Help for output features
          endhelp
          ---
          Test $null
          *
          menu
          echo "This is Text" > /dev/null | $null

          Test $text
          *
          menu
          echo "This is Text" | $text

          Test $text stderr
          *
          menu
          ls foofoofoo | $text

          Test $plot
          *
          menu
          cat xy.dat | $plot

          Test $plot(title,x,y,xyey)
          *
          menu
          cat xye.dat | $plot(Title,X Axis,Y Axis,xyey)

          Test $plot(title,x,y,xyexey)
          *
          menu
          cat xyee.dat | $plot(Title,X Axis,Y Axis,xyexey)

          Test $plot(title,x,y,4)
          *
          menu
          cat xyey.dat | $plot(Title,X Axis,Y Axis,4)

          Test $plot(title,x,y,5)
          *
          menu
          cat xyeye.dat | $plot(Title,X Axis,Y Axis,5)

          Test $plot(stdin)
          *
          menu
          cat xye.stdin.dat | $plot(stdin)

          Test $plot(stdin) text
          *
          menu
          cat xye.stdin.text.dat | $plot(stdin)

          Test $plot(stdin) error
          *
          menu
          cat xy.stdin.error.dat | $plot(stdin)

          Test $data
          *.fits
          menu
          $data | $image(new)

          Test $image
          *
          menu
          cat img16.fits | $image
      endhmenu

      hmenu Test Dialogs
          help Dialogs Help
          Help for dialog features
          endhelp
          ---
          Test $message(message)
          *
          menu
          $message(ok,This is a Message) | echo "hello" | $text

          Test $message(ok,message)
          *
          menu
          $message(ok,This is a Message) | echo "World" | $text

          Test $entry(message)
          *
          menu
          echo "$entry(Enter Something)" | $text
      endhmenu

      hmenu Test Params
          help Param Help
          Help for param features
          endhelp
          ---
          Test $param
          *
          menu
          $param(foo); echo "$var1 $var2 $var3" | $text

          Test $param @file
          *
          menu
          $param(bar); echo "$var1 $var2 $var3" | $text
      endhmenu

      hmenu Test Network
          help Network Help
          Help for network features
          endhelp
          ---
          Test $url(http://)
          *
          menu
          $url(http://legacy.gsfc.nasa.gov/FTP/rosat/data/cdrom/vol1/IMAGES/00h/p000s26b.img.Z) | gunzip | $image

          Test $url(ftp://)
          *
          menu
          $url(ftp://legacy.gsfc.nasa.gov/rosat/data/hri/images/fits/rh100193_img.fits) | $image

          Test $geturl $text
          *
          menu
          $geturl(http://hea-www.harvard.edu/RD/saord-cgi/funtools?funcnts+$filename+$regions(source,,)+$regions(background,,))|$text

          Test $geturl $plotstd
          *
          menu
          $param(ltc); $geturl(http://hea-www.harvard.edu/RD/saord-cgi/funtools?funhist_plot+$filename[$regions]+time+$bins)|$plot(stdin)
      endhmenu

      hmenu Test Other
          help Other Help
          Help for other features
          endhelp
          ---
          Test $param @tvdisply
          *
          menu
          $param(foobar); echo "$frame $erase" | $text

          hmenu Test MultiLevel
              test
              *
              menu
              echo "Hello World" | $text
          endhmenu
      endhmenu

      $x $y
      *.fits
      bind x
      echo "$x $y" | $text

      $x(fk5,hms) $y(fk5,hms)
      *.fits
      bind y
      echo "$x(fk5,hms) $y(fk5,hms)" | $text

      $x(wcs,fk5,hms) $y(wcs,fk5,hms)
      *.fits
      bind z
      echo "$x(wcs,fk5,hms) $y(wcs,fk5,hms)" | $text
      saods9/ds9/doc/ref/backup.html000644 000765 000000 00000005350 11763212355 016547 0ustar00joyewheel000000 000000 Backup

      Backup and Restore

      DS9 now supports Backup and Restore. When a backup is invoked, DS9 will save in a backup save set all files needed to restore DS9 to that state, including geometry, data files, colormaps, catalogs, contours, and regions.

      Backup Save Set

      A backup save set consists of a text file, called a backup script, and an optional directory, which will contain auxiliary data files needed to restore DS9 to a previous state. The backup file and the auxiliary directory maybe moved across file systems, or even platforms, but must remain together in the same directory.

      Image data files

      By default, all data image files are save within the backup save set. However, the user has the option, via the Preferences, to only save only an absolute pathname to the data file, and not the data file itself. This option will dramatically reduce the size of a backup save set, but will restrict the usage to a particular file system and platform.

      Image files that have been loaded into DS9 via XPA, SAMP, or from URL will always be saved into the save set.

      Caveats

      There are several caveats in the usage of Backup and Restore. In particular:

      Currently, there is no support for masks.
      External Analysis menus will not be saved.
      Plot Tool windows will not be saved.
      IIS frames (IRAF) will not be saved.
      SAMP and XPA sessions will not be saved.

      And finally, if the image data had been loaded into DS9 via XPA, SAMP, or from a URL, the following complex load operations are not supported:

      Open Mosaic IRAF Image
      Open Mosaic IRAF Segment Open Mosaic WCS Image
      Open Mosaic WCS Segment Open Mosaic WFPC2 Open RGB Fits Image Open RGB Fits Cube Open RGB Array Open Multi Ext Data Cube Open Multi Ext Multiple Frames
      saods9/ds9/doc/ref/bin.html000644 000765 000000 00000004036 12071072130 016036 0ustar00joyewheel000000 000000 Bin

      Binning

      To create an image from a FITS Bin Table, the user needs to specify a binning factor, binning buffer size, and the binning function.

      The Binning (or Block) Factor is defined as the following: A value greater or equal to zero. This value indicates the number of pixel values that will fall into a particular bin.

      The Bin Buffer Size is overall size of the image generated. This has no relation to min and max values of the columns used to create the image.

      The Bin Function is defined as the following: Average - all pixel values that fall into one pixel bin are averaged. Sum - all pixel values that fall into one pixel bin are summed.

      Bin to Fit Frame will calculate a bin block factor as a power of 2 that will allow the entire data space to be displayed in the current frame.

      By default, DS9 will bin about the center of the image. To determine the center of the image, DS9 will look for the following keywords in order:

      TDMIN/TDMAX
      TLMIN/TLMAX
      TALEN
      AXLEN

      If no valid keywords are found, DS9 will define the center as the middle of the possible data space based on the coordinate data type.





      saods9/ds9/doc/ref/catalog.html000644 000765 000000 00000016616 12513552450 016720 0ustar00joyewheel000000 000000 Catalogs

      Catalogs

      DS9 provides full support for loading, displaying, filtering, and saving catalogs. DS9 allows you to overlay symbols from multiple catalogs on the current image.

      Local and on-line catalog access is supported. Most major catalogs can be retrieved from online servers. Both the CDS and SDSS catalog servers are now supported. Local catalog files in starbase (rdb) or CSV (with or without header) are supported.

      On-line catalogs are available via services provided by the VizieR catalog access tool, CDS, Strasbourg, France (VizieR is a joint effort of the Centre de Donnees Astronomiques de Strasbourg and ESA-ESRIN Information Systems Division) and by the Sloan Digital Sky Survey.

      A selection of popular catalogs is provided in the Analysis menu. In addition, you can search for other catalogs based on title, keywords, mission, wavelength, and object type.

      When a catalog is overlayed on an image, each displayed catalog symbol consists of a shape, color, and text. An advanced symbol editor is available that allows you to specify the shape, size, color, and text of each symbol, based on catalog column values. These symbol expressions can be saved for future use.

      Along with the overlay display, a catalog list is provided in a separate window. It displays the column values for each catalog object. The catalog list can be sorted and filtered, and the catalog display will be automatically updated. Advanced filtering options are available. Catalogs can be loaded and saved as local files in ASCII Starbase format. Each catalog contains header information which can be displayed. The list can be printed separately from the image.

      An interactive connection between the displayed catalog symbols and the catalog list is provided. When you select one or more rows within the catalog list, the corresponding symbols are highlighted on the image display. Conversely, selecting multiple symbols on the image display will highlight the corresponding rows within the catalog list. Catalog symbols can be converted to regions for use with analysis tasks.

      Filter Option

      The catalog list can be sorted and filtered, and the catalog display will be automatically updated. A filter is conditional expression, when evaluated for each row of the catalog, if true, the row is displayed, and if false, the row is not displayed. The conditional expression can be any valid TCL expression. The value of a column may be indicated with $<column name>.

      $_RAJ2000>180. && $_RAJ2000<270.
      $Jmag>11
      log($Kmag*10)<.3
      [string equal $OTYPE_S SNR]

      Advanced Symbol Editor

      An advanced symbol editor is available that allows you to specify the shape, size, color, and text of each symbol, based on catalog column values. For each row of the catalog, one or more conditional expressions are evaluated. For the first expression to evaluate true, a given symbol is displayed, with the specified shape, color, size and text properties. As with the filter, the value of a particular column can be indicated as $<column name>.

      For the condition entry, the expression you type in is automatically evaluated via TCL expr after macro expansion.

      1                               # always
      0                               # never
      true                            # always
      false                           # never
      $Jmag>2                         # conditional
      sin($Jmag)>.5                   # conditional
      [string equal $Class SNR]       # conditional
      [regexp {*SNR*} $Class]         # conditional

      For the size, size2, and angle entries, the expression you type in is also automatically evaluated via TCL expr after macro expansion.

      2               # value of '2' is used
      $Jmag           # value of column Jmag is used
      $Jmag/2.        # value of column Jmag div 2 is used
      (4+2)/3         # value of '2' is used

      For the text portion, this is not true. It is assumed to be text, unless you explicitly use an expr operator.

      foo             # will put 'foo' above the symbol
      $Jmag           # will put the value of column Jmag above the symbol
      (4+2)/3         # will put the text '(4+2)/3' above the symbol
      [expr (4+2)/3]  # will put the text '2' above the symbol
      [expr $Jmag/2.] # will take the value of Jmag and div by 2

      And finally, one special case for shape = text and text = empty. In this case, the row number is displayed.

       
      saods9/ds9/doc/ref/colorbar.html000644 000765 000000 00000007110 11763212355 017101 0ustar00joyewheel000000 000000 Color

      Colorbar

      Color Tags

      The purpose of color tags are to highlight (or hide) certain values of data, regardless of the color map selected. The user creates, edits, and deletes color tags via the GUI. To create a color tag, enter the Colorbar Mode, and click once on the colorbar. This creates a default color tag. Click and drag to change the values. Click and drag on one side to increase or decrease the value. Double click to manually edit the values and color. Place the cursor over the color tag and press the delete key to delete it. From the color parameters dialog, the user can load, save, and delete all color tags for that frame.

      Visuals

      DS9 supports a number of color environments. Not all color environments, or visuals, are available on most machines. In fact, you may be restricted to one or two, base on the color graphics hardware your computer has. A color visual is composed of two parts, the color model and the bit depth. Pseudo color uses a color lookup table to derive the correct color, True color uses the value directly as a RGB triplet, to derive the correct color. The follow is a list of the color visuals DS9 currently supports:

      pseudo color, 8 bit
      true color, 8 bit
      true color, 15 bit
      true color, 16 bit
      true color, 24 bit

      You can use the xdpyinfo command to see if one of these visual are available. NOTE: Linux Users-- if your desired visual is not available, use the Xconfigarator command (Red Hat) or similar command under other versions of linux, to configure your X window visuals.

      When DS9 is invoked, by default, it will use the default visual. You can find out what the default visual is by using the xdpyinfo command. You can also force DS9 to use another visual by command line option. If you specify a visual, and it is not available, DS9 will exit with an error message.

      $ds9                      # default visual, default depth
      $ds9 -visual pseudo       # pseudo color, default depth
      $ds9 -visual pseudocolor  # pseudo color, default depth
      $ds9 -visual pseudocolor8 # pseudo color 8
      $ds9 -visual true         # true color, default depth
      $ds9 -visual truecolor    # true color, default depth
      $ds9 -visual truecolor8   # true color 8
      $ds9 -visual truecolor16  # true color 16
      $ds9 -visual truecolor24  # true color 24
      saods9/ds9/doc/ref/command.html000644 000765 000000 00000403560 13000234177 016715 0ustar00joyewheel000000 000000 Command Line Options

      Command Line Options

      DS9 will process each command line option, one at a time, as the last step in the initialization process. Therefore, it is possible to use command line options as a little script. For example, the following command line option is used:

      $ds9 -tile foo.fits -cmap Heat -zscale bar.fits -cmap I8

      First DS9 is put in tile mode, then foo.fits is loaded. Then the colormap for foo.fits is changed to Heat and the scale changed to zscale. Next, bar.fits is loaded and the colormap for bar.fits is changed to I8.

      2mass
      3d
      about
      align
      analysis
      array
      asinh
      background
      backup
      bin
      blink
      block
      blue
      catalog
      cd
      cmap
      colorbar
      console
      contour
      crop
      crosshair
      cube
      cursor
      dsssao
      dsseso
      dssstsci
      envi
      exit
      export
      fifo
      fifo_only
      fits
      frame
      geometry
      gif
      green
      grid
      header
      height
      help
      histequ
      iconify
      import
      inet_only
      invert
      iis
      jpeg
      language
      linear
      lock
      log
      lower
      magnifier
      mask
      match
      mecube
      minmax
      mode
      mosaic
      mosaicimage
      movie
      msg
      multiframe
      nameserver
      nan
      nrrd
      nvss
      orient
      pagesetup
      pan
      pixeltable
      plot
      png
      prefs
      preserve
      psprint
      print
      private
      port
      port_only
      pow
      quit
      raise
      regions
      red
      restore
      rgb
      rgbarray
      rgbcube
      rgbimage
      rotate
      samp
      save
      saveimage
      scale
      shm
      sia
      single
      sinh
      skyview
      sleep
      slice
      smooth
      squared
      sqrt
      source
      tcl
      threads
      tiff
      tile
      title
      unix
      unix_only
      update
      url
      version
      view
      visual
      vla
      vlss
      vo
      wcs
      web
      width
      xpa
      zmax
      zoom
      zscale

      2mass

      Support for 2MASS Digital Sky Survey.

      Syntax:
      -2mass []
             [<object>]
             [name <object>]
             [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
             [size <width> <height> degrees|arcmin|arcsec]
             [save yes|no]
             [frame new|current]
             [update frame|crosshair]
             [survey j|h|k]
             [open|close]
       
      Example:
      $ds9 -2mass
      $ds9 -2mass m31
      $ds9 -2mass name m31
      $ds9 -2mass coord 00:42:44.404 +41:16:08.78 sexagesimal
      $ds9 -2mass size 60 60 arcmin
      $ds9 -2mass save yes
      $ds9 -2mass frame current
      $ds9 -2mass update frame
      $ds9 -2mass survey j
      $ds9 -2mass open
      $ds9 -2mass close

      3d

      Support for 3D frame.

      Syntax:
      -3d []
          [view <az> <el>]
          [az <az>]
          [el <el>]
          [scale <scale>]
          [method mip|aip]

          [background none|azimuth|elevation]
       
         [border yes|no]
          [border color]
          [highlite yes|no]
          [highlite color]
          [open|close]
       
      Example:
      $ds9 -3d # create new 3D frame
      $ds9 -3d view 45 30
      $ds9 -3d az 45
      $ds9 -3d el 30
      $ds9 -3d scale 10
      $ds9 -3d method mip

      $ds9 -3d background azimuth
      $ds9 -3d border yes
      $ds9 -3d border color red
      $ds9 -3d highlite yes
      $ds9 -3d highlite color red
      $ds9 -3d open
      $ds9 -3d close

      about

      Get DS9 credits.

      Syntax:
      -about
       
      Example:
      $ds9 -about

      align

      Controls the World Coordinate System alignment for the current frame.

      Syntax:
      -align [yes|no]
       
      Example:
      $ds9 -align yes

      analysis

      Control external analysis tasks. Tasks are numbered as they are loaded, starting with 0. Can also be used to display a message and display text in the text dialog window.

      Syntax:
      -analysis [<task number>]
                [<filename>]
                [task <task number>|<task name>]
                [load <filename>]
                [clear]
                [clear][load <filename>]
                [message ok|okcancel|yesno <message>]
                [entry <message>]
                [text]

       

      Example:
      $ds9 -analysis 0 # invoke first analysis task
      $ds9 -analysis task 0
      $ds9 -analysis task foobar
      $ds9 -analysis task "{foo bar}"
      $ds9 -analysis my.ans
      $ds9 -analysis load my.ans
      $ds9 -analysis clear
      $ds9 -analysis clear load my.ans
      $ds9 -analysis message '{This is a message}'
      $ds9 -analysis message okcancel '{This is a message}'
      $ds9 -analysis text '{This is text}'

      array

      Load raw data array into current frame.

      Syntax:
      -array <filename>[[xdim=<x>,ydim=<y>|dim=<dim>],zdim=<z>,bitpix=<b>,skip=<s>,endian=[little|big]]
       
      Example:
      $ds9 -array foo.arr[dim=512,bitpix=-32,endian=little]

      $cat foo.arr | ds9 -array -[dim=512,bitpix=-32,endian=little]

      asinh

      Select ASINH scale function for the current frame.

      Syntax:
      -asinh
       
      Example:
      $ds9 -asinh

      bg
      background

      Set image background color.

      Syntax:
      -bg <color>
       
      Example:
      $ds9 -background red
      $ds9 -bg red

      backup

      Create a backup save set.

      Syntax:
      -backup <filename>
       
      Example:
      $ds9 -backup ds9.bck

      bin

      Controls binning factor, binning buffer size, and  binning function for binning FITS bin tables.

      Syntax:
      -bin [about <x> <y>]
           [about center]
           [buffersize <value>]
           [cols <x> <y>]
           [colsz <x> <y> <z>]
           [factor <value> [<value>]]
           [depth <value>]
           [filter <string>]
           [function average|sum]
           [in]
           [out]
           [to fit]
           [match]
           [lock [yes|no]]
           [open|close]
       
      Example:
      $ds9 -bin about 4096 4096
      $ds9 -bin about center
      $ds9 -bin buffersize 512
      $ds9 -bin cols detx dety
      $ds9 -bin colsz detx dety time
      $ds9 -bin factor 4
      $ds9 -bin factor 4 2
      $ds9 -bin depth 10
      $ds9 -bin filter 'pha > 5'
      $ds9 -bin filter ''
      $ds9 -bin function sum
      $ds9 -bin in
      $ds9 -bin out
      $ds9 -bin to fit
      $ds9 -bin match
      $ds9 -bin lock yes
      $ds9 -bin open
      $ds9 -bin close

      blink

      Blink mode parameters. Interval is in seconds.

      Syntax:
      -blink []
             [yes|no]
             [interval <value>]
       
      Example:
      $ds9 -blink
      $ds9 -blink yes
      $ds9 -blink interval 1

      block

      Controls blocking parameters.

      Syntax:
      -block
      [<value>]
             [<value> <value>]
             [to <value>]
             [to <value> <value>]
             [in]
             [out]
             [to fit]
             [match]
             [lock [yes|no]]
             [open|close]
       
      Example:
      $ds9 -block 4
      $ds9
      -block 4 2
      $ds9 -block to 4
      $ds9
      -block to 4 2
      $ds9
      -block in
      $ds9 -block out
      $ds9
      -block to fit
      $ds9
      -block match
      $ds9
      -block lock yes
      $ds9
      -block open
      $ds9
      -block close

      blue

      For RGB frames, sets the current color channel to blue.

      Syntax:
      -blue
       
      Example:
      $ds9 -blue foo.fits

      catalog
      cat

      Support for catalogs. The first three commands will create a new catalog search. All other commands operated on the last search created, unless indicated otherwise.

      Syntax:
      -catalog []
              [ned|simbad|denis|skybot]
              [ascss|cmc|gsc1|gsc2|gsc3|ac|nomad|ppmx|sao|sdss5|sdss6|
      sdss7|sdss8|tycho|ua2|ub1|ucac2]
              [2mass|iras]
              [csc|xmm|rosat]
              [first|nvss]
              [chandralog|cfhtlog|esolog|stlog|xmmlog]
              [cds <catalogname>]
              [cds <catalogid>]

              [load <filename>]
              [import sb|tsv <filename>]

              [<ref>] [allcols]
              [<ref>] [allrows]
       
             [<ref>] [cancel]
              [<ref>] [clear]
              [<ref>] [close]
              [<ref>] [coordinate <ra> <dec> <coordsys>]
              [<ref>] [crosshair]
              [<ref>] [dec <col>]
              [<ref>] [edit yes|no]
              [<ref>] [export sb|tsv <filename>]
              [<ref>] [filter <string>]
              [<ref>] [filter load <filename>]

              [<ref>] [header]
              [<ref>] [hide]
              [<ref>] [location <code>]
              [<ref>] [match <ref> <ref>]
             
      [<ref>] [match error <value> degrees|arcmin|arcsec]
              [<ref>] [match function 1and2|1not2|2not1]
              [<ref>] [match return 1and2|1only|2only]
              [<ref>] [match unique yes|no]
              [<ref>] [maxrows <number>]
              [<ref>] [name <object>]
              [<ref>] [panto yes|no]
              [<ref>] [plot <xcol> <ycol> <xerrcol> <yerrcol>]
              [<ref>] [print]
              [<ref>] [psky <skyframe>]
              [<ref>] [psystem <coordsys>]
              [<ref>] [ra <col>]
              [<ref>] [regions]
              [<ref>] [retrieve]
              [<ref>] [samp]
              [<ref>] [samp broadcast]
              [<ref>] [samp send <application>]

              [<ref>] [save <filename>]
              [<ref>] [server cds|sao|cadc|adac|iucaa|bejing|cambridge|ukirt]
              [<ref>] [show]
              [<ref>] [size <width> <height> degrees|arcmin|arcsec]
              [<ref>] [sky <skyframe>]
              [<ref>] [skyformat <skyformat>]
              [<ref>] [sort <col> incr|decr]
              [<ref>] [symbol [#] condition|shape|color|text|font|fontsize|fontweight|fontslant <value>]
              [<ref>] [symbol [#] text|size|size2|units|angle <value>]
              [<ref>] [symbol shape {circle point}|{box point}|{diamond point}|
                          {cross point}|{x point}|{arrow point}|{boxcircle point}|
                          circle|ellipse|box|text]
              [<ref>] [symbol add| [#] remove]
              [<ref>] [symbol save|load <filename>]

              [<ref>] [system <coordsys>]
              [<ref>] [update]
              [<ref>] [x <col>]
              [<ref>] [y <col>]

      Example:
      $ds9 -catalog
      $ds9 -catalog 2mass
      $ds9 -catalog cds 2mass
      $ds9 -catalog cds "I/252"

      $ds9 -catalog load foo.xml
      $ds9 -catalog import tsv foo.tsv

      $ds9 -catalog allrows
      $ds9 -catalog allcols
      $ds9 -catalog cancel
      $ds9 -catalog clear
      $ds9 -catalog close
      $ds9 -catalog coordinate 202.48 47.21 fk5
      $ds9 -catalog crosshair
      $ds9 -catalog dec DEC
      $ds9 -catalog edit yes
      $ds9 -catalog export tsv bar.tsv
      $ds9 -catalog filter '\$Jmag>15'
      $ds9 -catalog filter load foo.flt
      $ds9 -catalog header
      $ds9 -catalog hide
      $ds9 -catalog location 500
      $ds9 -catalog match error 2 arcsec
      $ds9 -catalog match function 1and2
      $ds9 -catalog match unique no
      $ds9 -catalog match return 1only
      $ds9 -catalog match 2mass csc
      $ds9 -catalog maxrows 2000
      $ds9 -catalog name m51
      $ds9 -catalog panto no
      $ds9 -catalog plot '\$Jmag' '\$Hmag' '\$e_Jmag' '\$e_Hmag'
      $ds9 -catalog print
      $ds9 -catalog psky fk5
      $ds9 -catalog psystem wcs
      $ds9 -catalog ra RA
      $ds9 -catalog regions
      $ds9 -catalog retrieve
      $ds9 -catalog samp broadcast
      $ds9 -catalog samp send aladin
      $ds9 -catalog save foo.xml
      $ds9 -catalog server sao
      $ds9 -catalog show
      $ds9 -catalog size 1 1 degrees
      $ds9 -catalog symbol condition '\$Jmag>15'
      $ds9 -catalog symbol 2 shape "boxcircle point"
      $ds9 -catalog symbol color red
      $ds9 -catalog symbol font times
      $ds9 -catalog symbol fontsize 14
      $ds9 -catalog symbol fontweight bold
      $ds9 -catalog symbol fontslant italic
      $ds9 -catalog symbol add
      $ds9 -catalog symbol 2 remove
      $ds9 -catalog symbol load foo.sym
      $ds9 -catalog symbol save bar.sym

      $ds9 -catalog sky fk5
      $ds9 -catalog skyformat degrees
      $ds9 -catalog sort "Jmag" incr
      $ds9 -catalog system wcs
      $ds9 -catalog update
      $ds9 -catalog x RA
      $ds9 -catalog y DEC

      cd

      Sets the current working directory.

      Syntax:
      cd [<directory>]
       
      Example:
      $ds9 -cd /home/mrbill

      cmap

      Controls the colormap for the current frame. The colormap name is not case sensitive. A valid contrast value is  from 0 to 10 and bias value from 0 to 1.

      Syntax:
      -cmap [<colormap>]
            [file]
            [load <filename>]
            [save <filename>]
            [invert yes|no]
            [value <contrast> <bias>]
            [tag [load|save] <filename>]
            [tag delete]

            [match]
            [lock [yes|no]]

            [open|close]
       
      Example:
      $ds9 -cmap Heat
      $ds9 -cmap load foo.sao
      $ds9 -cmap save bar.sao
      $ds9 -cmap invert yes
      $ds9 -cmap value 5 .5
      $ds9 -cmap tag load foo.tag
      $ds9 -cmap tag save foo.tag
      $ds9 -cmap tag delete
      $ds9 -cmap match
      $ds9 -cmap lock yes

      $ds9 -cmap open
      $ds9 -cmap close

      colorbar

      Controls colorbar parameters.

      Syntax:
      -colorbar []
                [yes|no]
                [horizontal|vertical]
                [orientation horizontal|vertical]
                [numerics yes|no]
                [space value|distance]
                [font times|helvetica|courier]
                [fontsize <value>]
                [fontweight normal|bold]
                [fontslant roman|italic]
                [size]
                [ticks]
       
      Example:
      $ds9 -colorbar yes
      $ds9 -colorbar vertical
      $ds9 -colorbar orientation vertical
      $ds9 -colorbar numerics yes
      $ds9 -colorbar space value
      $ds9 -colorbar font times
      $ds9 -colorbar fontsize 14
      $ds9 -colorbar fontweight bold
      $ds9 -colorbar fontslant italic
      $ds9 -colorbar size 20
      $ds9 -colorbar ticks 11

      console

      Display tcl console window.

      Syntax:
      -console
       
      Example:
      $ds9 -console

      contour

      Controls contours in the current frame.

      Syntax:
      -contour []
               [yes|no]
               [clear]
               [generate]
               [load <filename> [<color> <width> yes|no]]
               [save <filename> <coordsys> <skyframe>]
               [convert]
               [loadlevels <filename>]

               [savelevels <filename>]
               [copy]
               [paste <coordsys> [<color> <width> yes|no]]
               [color <color>]
               [width <width>]
               [dash yes|no]
               [smooth <smooth>]
               [method block|smooth]
               [nlevels <number of levels>]
               [scale linear|log|pow|squared|sqrt|asinh|sinh|histequ]
               [log exp <value>]
               [mode minmax|<value>|zscale|zmax]
               [limits <min> <max>]
               [levels <value value value...>]
               [open|close]
       
      Example:
      $ds9 -contour
      $ds9 -contour yes
      $ds9 -contour generate
      $ds9 -contour clear
      $ds9 -contour load ds9.ctr
      $ds9 -contour load ds9.ctr red 2 yes
      $ds9 -contour save ds9.ctr wcs fk5
      $ds9 -contour convert
      $ds9 -contour loadlevels ds9.ctr
      $ds9 -contour savelevels ds9.lev
      $ds9 -contour copy
      $ds9 -contour paste wcs red 2 no
      $ds9 -contour color yellow
      $ds9 -contour width 2
      $ds9 -contour dash yes
      $ds9 -contour smooth 5
      $ds9 -contour method smooth
      $ds9 -contour nlevels 10
      $ds9 -contour scale sqrt
      $ds9 -contour log exp 1000
      $ds9 -contour mode zscale
      $ds9 -contour limits 1 100
      $ds9 -contour levels "1 10 100 1000"
      $ds9 -contour open
      $ds9 -contour close

      crop

      Set current image display area.

      Syntax:
      -crop [<x> <y> <width> <height> [<coordsys>][<skyframe>][<skyformat>][degrees|arcmin|arcsec]
            [match <coordsys>]
            [lock <coordsys>|none]

       
      Example:
      $ds9 foo.fits -crop 40 30 10 20 # set crop in physical coords
      $ds9 foo.fits -crop +104:51:06.915 +68:33:40.761  28.144405 22.000204 wcs galactic arcsec
      $ds9 foo.fits -crop match wcs
      $ds9 foo.fits -crop lock wcs

      crosshair

      Controls the current position of the crosshair in the current frame. DS9 is placed in crosshair mode when the crosshair is set.

      Syntax:
      -crosshair [<x> <h> <coordsys> [<skyframe>][<skyformat>]]
       
                [match <coordsys>]
                 [lock <coordsys>|none]

       
      Example:
      $ds9 -crosshair 100 100 physical # set crosshair in physical
      $ds9 -crosshair 345 58.8 wcs fk5 # set crosshair in wcs coords
      $ds9 -crosshair 23:01:00 +58:52:51 wcs fk5
      $ds9 -crosshair match
      $ds9 -crosshair lock wcs

      cube

      Controls FITS cube.

      Syntax:
      -cube [play|stop|next|prev|first|last]
            [<slice> [<coordsys>][<axis>]]
            [interval <numeric>]
            [axis <axis>]
            [match <coordsys>]
            [lock <coordsys>|none]
            [order 123|132|213|231|312|321]
            [axes lock [yes|no]]
            [open|close]
       
      Example:
      $ds9 -cube play
      $ds9 -cube last
      $ds9 -cube 3
      $ds9 -cube 4.5 wcs 3
      $ds9 -cube interval 2
      $ds9 -cube axis 3
      $ds9 -cube match wcs
      $ds9 -cube lock wcs
      $ds9 -cube order 123
      $ds9 -cube axes lock yes
      $ds9 -cube open
      $ds9 -cube close

      cursor

      Move mouse pointer or crosshair in image pixels in the current frame. Note, this will move selected Regions also.

      Syntax:
      -cursor [<x> <h>]
       
      Example:
      $ds9 -cursor 10 10

      dsssao
      dss

      Support for Digital Sky Survey at SAO.

      Syntax:
      -dsssao []
              [<object>]
              [name <object>]
              [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
              [size <width> <height> degrees|arcmin|arcsec]
              [save yes|no]
              [frame new|current]
              [update frame|crosshair]
              [open|close]
       
      Example:
      $ds9 -dsssao
      $ds9 -dsssao m31
      $ds9 -dsssao name m31
      $ds9 -dsssao coord 00:42:44.404 +41:16:08.78 sexagesimal
      $ds9 -dsssao size 60 60 arcmin
      $ds9 -dsssao save yes
      $ds9 -dsssao frame current
      $ds9 -dsssao update frame
      $ds9 -dsssao open
      $ds9 -dsssao close

      dsseso

      Support for Digital Sky Survey at ESO.

      Syntax:
      -dsseso []
              [<object>]
              [name <object>]
              [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
              [size <width> <height> degrees|arcmin|arcsec]
              [save yes|no]
              [frame new|current]
              [update frame|crosshair]
              [survey DSS1|DSS2-red|DSS2-blue|DSS2-infrared]
              [open|close]
       
      Example:
      $ds9 -dsseso
      $ds9 -dsseso m31
      $ds9 -dsseso name m31
      $ds9 -dsseso coord 00:42:44.404 +41:16:08.78 sexagesimal
      $ds9 -dsseso size 60 60 arcmin
      $ds9 -dsseso save yes
      $ds9 -dsseso frame current
      $ds9 -dsseso update frame
      $ds9 -dsseso survey DSS2-red
      $ds9 -dsseso open
      $ds9 -dsseso close

      dssstsci

      Support for Digital Sky Survey at STSCI.

      Syntax:
      -dssstsci []
                [<object>]
                [name <object>]
                [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
                [size <width> <height> degrees|arcmin|arcsec]
                [save yes|no]
                [frame new|current]
                [update frame|crosshair]
                [survey poss2ukstu_red|poss2ukstu_ir|poss2ukstu_blue]
                [survey poss1_blue|poss1_red]
                [survey all|quickv|phase2_gsc2|phase2_gsc1]
                [open|close]
       
      Example:
      $ds9 -dssstsci
      $ds9 -dssstsci m31
      $ds9 -dssstsci name m31
      $ds9 -dssstsci coord 00:42:44.404 +41:16:08.78 sexagesimal
      $ds9 -dssstsci size 60 60 arcmin
      $ds9 -dssstsci save yes
      $ds9 -dssstsci frame current
      $ds9 -dssstsci update frame
      $ds9 -dssstsci survey all
      $ds9 -dssstsci open
      $ds9 -dssstsci close

      envi

      Load an ENVI header and file. Optional parameter: array endian.

      Syntax:
      -envi <header> [<filename>]
       
      Example:
      $ds9 -envi foo.hdr
      $ds9 -envi foo.hdr foo.bsq

      exit
      quit

      Quits DS9.

      Syntax:
      -exit
      -quit
       
      Example:
      $ds9 -exit

      export

      Export loaded image data of current frame in specified image format, at native resolution, using current colormap and contrast/bias settings. NOTE: not scaling, rotation, or translation is applied. If no format specified, the file name extension is used to determine the output format. Optional parameters: jpeg quality (1-100) and tiff compression method.

      Syntax:
      -export [array|nrrd|envi|gif|tiff|jpeg|png] <filename>

      -export array <filename> [big|little|native]
      -export nrrd <filename>
      [big|little|native]
      -export envi <header> [<filename>] [big|little|native]
      -export <filename>.jpeg [1-100]
      -export <filename>.tiff [none|jpeg|packbits|deflate]
       
      Example:
      $ds9 -export array foo.arr little
      $ds9 -export nrrd foo.nrrd little
      $ds9 -export envi foo.hdr little
      $ds9 -export envi foo.hdr foo.bsq little
      $ds9 -export tiff foo.tiff jpeg
      $ds9 -export jpeg foo.jpeg 75
      $ds9 -export png foo.png

      fifo

      Set the name of the IRAF input and output fifos. The default is /dev/imt1. These fifos are used by IRAF to communicate with DS9.

      Syntax:
      -fifo name
       
      Example:
      $ds9 -fifo /dev/imt1

      fifo_only

      Only use IRAF input and output fifos. Same as -port 0 -unix none.

      Syntax:
      -fifo_only
       
      Example:
      $ds9 -fifo_only

      fits

      Load a FITS image into the current frame.

      Syntax:
      -fits
      <filename>
       
      Example:
      $ds9 -fits foo.fits
      $ds9 -fits bar.fits[bin=detx,dety]
      $cat foo.fits | ds9 -fits -
      $cat bar.fits | ds9 -fits -[bin=detx,dety]

      frame

      Controls frame functions. Frames may be created, deleted, reset, and centered. While return the current frame number. If you goto a frame that does not exists, it will be created. If the frame is hidden, it will be shown. The 'frameno' option is available for backward compatibility.

      Syntax:
      -frame [center [#|all]]
             [clear [#|all]]
             [new [rgb]]
             [delete [#|all]]
             [reset [#|all]]
             [refresh [#|all]]
             [hide [#|all]]
             [show [#|all]]
             [move first]
             [move back]
             [move forward]
             [move last]
             [first]
             [prev]
             [next]
             [last]
             [frameno #]
             [#]
             [match <coordsys>]
             [lock <coordsys>|none]
       
      Example:
      $ds9 -frame center # center current frame
      $ds9 -frame center 1 # center 'Frame1'
      $ds9 -frame center all # center all frames
      $ds9 -frame clear # clear current frame
      $ds9 -frame new # create new frame
      $ds9 -frame new rgb # create new rgb frame
      $ds9 -frame delete # delete current frame
      $ds9 -frame reset # reset current frame
      $ds9 -frame refresh # refresh current frame
      $ds9 -frame hide # hide current frame
      $ds9 -frame show 1 # show frame 'Frame1'
      $ds9 -frame move first # move frame to first in order
      $ds9 -frame move back # move frame back in order
      $ds9 -frame move forward # move frame forward in order
      $ds9 -frame move last # move frame to last in order
      $ds9 -frame first # goto first frame
      $ds9 -frame prev # goto prev frame
      $ds9 -frame next # goto next frame
      $ds9 -frame last # goto last frame
      $ds9 -frame frameno 4 # goto frame 'Frame4', create if needed
      $ds9 -frame 3 # goto frame 'Frame3', create if needed
      $ds9 -frame lock wcs

      gif

      Import gif file.

      Syntax:
      -gif <filename>
       
      Example:
      $ds9 -gif foo.gif
      $cat foo.gif | ds9 -gif -

      geometry

      Define the initial window geometry. This includes all of the ds9 window, not just the image space. see X(1).

      Syntax:
      -geometry value
       
      Example:
      $ds9 -geometry 640x480

      green

      For RGB frames, sets the current color channel to green.

      Syntax:
      -green
       
      Example:
      $ds9 -green foo.fits

      grid

      Controls coordinate grid. For grid numeric format syntax,  click here.

      Syntax:
      -grid []
            [yes|no]
            [type analysis|publication]
            [system <coordsys>]
            [sky <skyframe>]
            [skyformat <skyformat>]
            [grid yes|no]
            [grid color <color>]
            [grid width <value>]
            [grid style 0|1]
            [grid gap1 <value>]
            [grid gap2 <value>]
            [axes yes|no]
            [axes color <color>]
            [axes width <value>]
            [axes style 0|1]
            [axes type interior|exterior]
            [axes origin lll|llu|lul|luu|ull|ulu|uul|uuu]
            [format1 <format>]
            [format2 <format>]
            [tickmarks yes|no]
            [tickmarks color <color>]
            [tickmarks width <value>]
            [tickmarks style 0|1]
            [border yes|no]
            [border color <color>]
            [border width <value>]
            [border style 0|1]
            [numerics yes|no]
            [numerics font times|helvetica|courier]
            [numerics fontsize <value>]
            [numerics fontweight normal|bold]
            [numerics fontslant roman|italic]
            [numerics color <color>]
            [numerics gap1 <value>]
            [numerics gap2 <value>]
            [numerics type interior|exterior]
            [numerics vertical yes|no]
            [title yes|no]
            [title text <text>]
            [title def yes|no]
            [title gap <value>]
            [title font times|helvetica|courier]
            [title fontsize <value>]
            [title fontweight normal|bold]
            [title fontslant roman|italic]
            [title color <color>]
            [labels yes|no]
            [labels text1 <text>]
            [labels def1 yes|no]
            [labels gap1 <value>]
            [labels text2 <text>]
            [labels def2 yes|no]
            [labels gap2 <value>]
            [labels font times|helvetica|courier]
            [labels fontsize <value>]
            [labels fontweight normal|bold]
            [labels fontslant roman|italic]
            [labels color <color>]
            [reset]
            [load <filename>]
            [save <filename>]
            [open|close]
       
      Example:
      $ds9 -grid
      $ds9 -grid yes
      $ds9 -grid type analysis
      $ds9 -grid system wcs
      $ds9 -grid sky fk5
      $ds9 -grid skyformat degrees
      $ds9 -grid grid yes
      $ds9 -grid grid color red
      $ds9 -grid grid width 2
      $ds9 -grid grid style 1
      $ds9 -grid grid gap1 10
      $ds9 -grid grid gap2 10
      $ds9 -grid axes yes
      $ds9 -grid axes color red
      $ds9 -grid axes width 2
      $ds9 -grid axes style 1
      $ds9 -grid axes type exterior
      $ds9 -grid axes origin lll
      $ds9 -grid format1 d.2
      $ds9 -grid format2 d.2
      $ds9 -grid tickmarks yes
      $ds9 -grid tickmarks color red
      $ds9 -grid tickmarks width 2
      $ds9 -grid tickmarks style 1
      $ds9 -grid border yes
      $ds9 -grid border color red
      $ds9 -grid border width 2
      $ds9 -grid border style 1
      $ds9 -grid numerics yes
      $ds9 -grid numerics font courier
      $ds9 -grid numerics fontsize 12
      $ds9 -grid numerics fontweight bold
      $ds9 -grid numerics fontslant italic
      $ds9 -grid numerics color red
      $ds9 -grid numerics gap1 10
      $ds9 -grid numerics gap2 10
      $ds9 -grid numerics type exterior
      $ds9 -grid numerics vertical yes
      $ds9 -grid title yes
      $ds9 -grid title text {Hello World}
      $ds9 -grid title def yes
      $ds9 -grid title gap 10
      $ds9 -grid title font courier
      $ds9 -grid title fontsize 12
      $ds9 -grid title fontweight bold
      $ds9 -grid title fontslant italic
      $ds9 -grid title color red
      $ds9 -grid labels yes
      $ds9 -grid labels text1 {Hello World}
      $ds9 -grid labels def1 yes
      $ds9 -grid labels gap1 10
      $ds9 -grid labels text2 {Hello World}
      $ds9 -grid labels def2 yes
      $ds9 -grid labels gap2 10
      $ds9 -grid labels font courier
      $ds9 -grid labels fontsize 12
      $ds9 -grid labels fontweight bold
      $ds9 -grid labels fontslant italic
      $ds9 -grid labels color red
      $ds9 -grid reset
      $ds9 -grid load foo.grd
      $ds9 -grid save foo.grd
      $ds9 -grid open
      $ds9 -grid close

      header

      Display current fits header dialog. Optional extension number maybe specified.

      Syntax:
      -header [<ext>]
              [close [<ext>]]
              [save [<ext>] <filename>]
       
      Example:
      $ds9 -header
      $ds9 -header 2
      $ds9 -header close
      $ds9 -header save 1 foo.txt

      height

      Set the height of the image display window. Use the geometry command to set the overall width and height of the ds9 window.

      Syntax:
      -height [<value>]
       
      Example:
      $ds9 -height 512

      help

      Display help information. To maintain backward compatibility, -help will display a brief help message and exit. --help will display all command line options within the built-in help facility.

      Syntax:
      -help # Display brief help message and exit.
      --help # Display command line options within help facility.
      -? # Display command line options within help facility.
       
      Example:
      $ds9 -help # Display brief help message and exit.
      $ds9 --help # Display command line options within help facility
      $ds9 -? # Display command line options within help facility.

      histequ

      Select histogram equalization scale function for the current frame.

      Syntax:
      -histequ
       
      Example:
      $ds9 -histequ

      iconify

      Toggles iconification.

      Syntax:
      -iconify []
               [yes|no]
       
      Example:
      $ds9 -iconify
      $ds9 -iconify yes

      invert

      Invert Colormap.

      Syntax:
      -invert
       
      Example:
      $ds9 -invert

      iis

      Set IIS Filename. Optional mosaic number maybe supplied.

      Syntax:
      -iis [filename <filename> [#]]
       
      Example:
      $ds9 -iis filename foo.fits
      $ds9 -iis filename bar.fits 4

      jpeg

      Load JPEG image into current frame.

      Syntax:
      -jpeg <filename>
       
      Example:
      $ds9 -jpeg foo.jpeg
      $cat foo.jpeg | ds9 -jpeg -

      language

      Select current language.

      Syntax:
      -language [locale|da|de|es|en|fr|ja|pt]
       
      Example:
      $ds9 -language fr

      linear

      Select linear scale function for the current frame.

      Syntax:
      -linear
       
      Example:
      $ds9 -linear

      lock

      Lock all other frames to the current frame.

      Syntax:
      -lock [frame <coordsys>|none]
           
      [crosshair <coordsys>|none]
            [crop <coordsys>|none]
            [slice <coordsys>|none]
            [bin [yes|no]]
            [axes [yes|no]]
            [scale [yes|no]]
            [scalelimits [yes|no]]
            [colorbar [yes|no]]
            [block [yes|no]]
            [smooth [yes|no]]


      Example:
      $ds9 -lock frame wcs

      $ds9 -lock crosshair wcs
      $ds9 -lock crop wcs
      $ds9 -lock slice wcs
      $ds9 -lock bin yes
      $ds9 -lock axes yes
      $ds9 -lock scale yes
      $ds9 -lock scalelimits yes
      $ds9 -lock colorbar yes
      $ds9 -lock block yes
      $ds9 -lock smooth yes

      log

      Select log scale function for the current frame.

      Syntax:
      -log
       
      Example:
      $ds9 -log

      lower

      Lower in the window stacking order.

      Syntax:
      -lower
       
      Example:
      $ds9 -lower

      magnifier

      Controls the magnifier settings.

      Syntax:
      magnifier [color <color>]
                [zoom <value>]
                [cursor yes|no]
                [region yes|no]
       
      Example:
      $ds9 -magnifier color yellow
      $ds9 -magnifier zoom 2
      $ds9 -magnifier cursor no
      $ds9 -magnifier region no

      mask
      nomask

      Controls mask parameters.

      Syntax:
      -mask [color <color>]
            [mark 1|0]
            [transparency <value>]
            [clear]
            [open|close]
      -nomask
       
      Example:
      $ds9 -mask color red
      $ds9 -mask mark 0
      $ds9 -mask transparency 50
      $ds9 -mask clear
      $ds9 -mask open
      $ds9 -mask close
      $ds9 -nomask

      match

      Match all other frames to the current frame.

      Syntax:
      -match [frame <coordsys>]
            
      [crosshair <coordsys>]
             [crop <coordsys>]
             [slice <coordsys>]
             [bin]
             [axes]
             [scale]
             [scalelimits]
             [colorbar]
             [block]
             [smooth]
       
      Example:
      $ds9 -match frame wcs
      $ds9 -match crosshair wcs
      $ds9 -match crop wcs
      $ds9 -match slice wcs
      $ds9 -match bin
      $ds9 -match axes
      $ds9 -match scale
      $ds9 -match scalelimits
      $ds9 -match colorbar
      $ds9 -match block
      $ds9 -match smooth

      mecube

      Load FITS multiple extension file as data cube.

      Syntax:
      mecube <filename>
       
      Example:
      $ds9 -mecube foo.fits

      $cat foo.fits | ds9 -mecube -

      minmax

      This is how DS9 determines  the min and max data values from the data. SCAN will scan all data.

      Syntax:
      -minmax [scan|sample|datamin|irafmin]
              [mode scan|sample|datamin|irafmin]
              [interval #]
       
      Example:
      $ds9 -minmax scan
      $ds9 -minmax mode scan
      $ds9 -minmax interval 100

      mode

      Select the current mode.

      Syntax:
      -mode [none|region|crosshair|colorbar|pan|zoom|rotate|catalog|examine]
       
      Example:
      $ds9 -mode crosshair

      mosaic

      Load FITS mosaic segment into current frame.

      Syntax:
      -mosaic [wcs|wcsa...wcsz|iraf] <filename>
       
      Example:

      $ds9 -mosaic foo.fits

      $ds9 -mosaic wcs foo.fits
      $cat foo.fits | ds9 -mosaic -

      $cat foo.fits | ds9 -mosaic wcs -

      mosaicimage

      Load FITS mosaic image into current frame.

      Syntax:
      -mosaicimage [wcs|wcsa...wcsz|iraf|wfpc2] <filename>
       
      Example:

      $ds9 -mosaicimage foo.fits

      $ds9 -mosaicimage wcs foo.fits
      $cat foo.fits | ds9 -mosaicimage

      $cat foo.fits | ds9 -mosaiimage wcs

      movie
      savempeg

      Create mpeg1 movie from snap shots of the DS9 window. A slice movie cycles though all slices of a cube. A frame movie cycles through all active frames. A 3d movie cycles through specified viewing angles. The default is frame. Optional parameters for 3d: number of frames, azimuth from/to, elevation from/to, slice from/to, oscillate/repeat times.

      Syntax:
      -movie [slice|frame|3d] <filename>
      -movie 3d <filename> [number|azfrom|azto|elfrom|elto|slfrom|slto|oscillate|repeat <#>]
       
      Example:
      $ds9 -movie slice ds9.mpg
      $ds9 -movie 3d ds9.mpg number 10 azfrom -60 azto 60 oscillate 1

      msg

      Specify a directory of translation tables to be loaded.

      Syntax:
      -msg <directory>
       
      Example:
      $ds9 -msg $HOME/msgs

      multiframe

      Load FITS multiple extension file as multiple images.

      Syntax:
      multiframe <filename>
       
      Example:
      $ds9 -multiframe foo.fits

      $cat foo.fits | ds9 -multiframe -

      nameserver

      Support Name Server functions. Coordinates are in fk5.

      Syntax:
      -nameserver [<object>]
                  [name <object>]
                  [server ned-sao|ned-eso|simbad-sao|simbad-eso]
                  [skyformat degrees|sexagesimal]
                  [pan]
                  [crosshair]
                  [open|close]
       
      Example:
      $ds9 -nameserver m31
      $ds9 -nameserver name m31
      $ds9 -nameserver server ned-sao
      $ds9 -nameserver skyformat sexagesimal
      $ds9 -nameserver pan
      $ds9 -nameserver crosshair
      $ds9 -nameserver open
      $ds9 -nameserver close

      nan

      Set image not-a-number color.

      Syntax:
      -nan <color>
       
      Example:
      $ds9 -nan red

      nrrd

      Load an NRRD (Nearly Raw Raster Data) file.

      Syntax:
      -nrrd <filename>
       
      Example:
      $ds9 -nrrd foo.nrrd
      $cat foo.nrrd | xpaset ds9 -nrrd -

      nvss

      Support for NRAO VLA Sky Survey.

      Syntax:
      -nvss []
            [<object>]
            [name <object>]
            [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
            [size <width> <height> degrees|arcmin|arcsec]
            [save yes|no]
            [frame new|current]
            [update frame|crosshair]
            [open|close]
       
      Example:
      $ds9 -nvss
      $ds9 -nvss m31
      $ds9 -nvss name m31
      $ds9 -nvss coord 00:42:44.404 +41:16:08.78 sexagesimal
      $ds9 -nvss size 60 60 arcmin
      $ds9 -nvss save yes
      $ds9 -nvss frame current
      $ds9 -nvss update frame
      $ds9 -nvss open
      $ds9 -nvess close

      orient

      Controls the orientation of the current frame.

      Syntax:
      -orient [none|x|y|xy]
              [open|close]
       
      Example:
      $ds9 -orient xy
      $ds9 -orient open
      $ds9 -orient close

      pagesetup

      Controls Page Setup options.

      Syntax:
      -pagesetup [orient portrait|landscape]
                 [scale <numberic>]

                 [size letter|legal|tabloid|poster|a4]
       
      Example:
      $ds9 -pagesetup orient portrait
      $ds9 -pagesetup scale 50
      $ds9 -pagesetup size poster

      pan

      Controls the current image cursor location for the current frame.

      Syntax:
      -pan [<x> <h> <coordsys> [<skyframe>][<skyformat>] # relative
           [to <x> <h> <coordsys> [<skyframe>][<skyformat>] # absolute
           [open|close]
       
      Example:
      $ds9 -pan 200 200 image
      # pan relative
      $ds9 -pan to 400 400 physical
      # pan to physical coords
      $ds9 -pan to 13:29:55 47:11:50 wcs fk
      # pan to wcs coords
      $ds9 -pan open
      $ds9 -pan close

      pixeltable

      Display/Hide the pixel table.

      Syntax:
      -pixeltable []
                  [yes|open]
                  [no|close]
       
      Example:
      $ds9 -pixeltable
      $ds9 -pixeltable yes
      $ds9 -pixeltable open
      $ds9 -pixeltable close

      plot


      Display and configure data plots. All plot commands take an optional second command, the plot name. If no plot name is specified, the last plot created is assumed. Plot data is assumed to be a pair of coordinates, with optional error values. The follow are valid data descriptions:

      xy        x and y coordinates
      xyex      x,y coordinates with x errors
      xyey      x,y coordinates with y errors
      xyexey    x,y coordinates with  x and y errors

      To create a new plot, use the plot new command.

      Syntax:
      # create new empty plot window
      -plot
      -plot [bar|scatter]
            [new [name <plotname>] [line|bar|scatter]]
            [new [name <plotname>] [line|bar|scatter] <title> <xaxis label> <yaxis label>
      xy|xyex|xyey|xyexey]

      -plot [<plotname>] load <filename> [xy|xyex|xyey|xyexey]
            [<plotname>] save <filename>
            [<plotname>] clear
            [<plotname>] duplicate
            [<plotname>] stats
           
      [<plotname>] list
           
      [<plotname>] loadconfig <filename>
            [<plotname>] saveconfig <filename>
            [<plotname>] pagesetup orient [portrait|landscape]
            [<plotname>] pagesetup size [letter|legal|tabloid|poster|a4]

            [<plotname>] print
            [<plotname>] print destination [printer|file]
            [<plotname>] print command <command>
            [<plotname>] print filename <filename>
            [<plotname>] print color [rgb|gray]
           
      [<plotname>] close

      -plot [<plotname>] mode [pointer|zoom]

      # configure graph
      -plot [<plotname>] axis [x|y] grid [yes|no]
            [<plotname>] axis [x|y] log [yes|no]
            [<plotname>] axis [x|y] flip [yes|no]
            [<plotname>] axis [x|y] auto [yes|no]
            [<plotname>] axis [x|y] min <value>
            [<plotname>] axis [x|y] max <value>
            [<plotname>] axis [x|y] format <string>

           
      [<plotname>] legend [yes|no]
            [<plotname>] legend position [right|left|top|bottom]

            [<plotname>] font [title|labels|numbers] font [times|helvetica|courier]
            [<plotname>] font
      [title|labels|numbers] size <value>
            [<plotname>] font
      [title|labels|numbers] weight [normal|bold]
            [<plotname>] font
      [title|labels|numbers] slant [roman|italic]
            [<plotname>] title <string>
            [<plotname>] title [x|y] <string>
            [<plotname>] barmode [normal|stacked|aligned|overlap]

      # configure current dataset
      -plot [<plotname>] show [yes|no]
           
      [<plotname>] shape [circle|square|diamond|plus|splus|scross|triangle|arrow]
            [<plotname>] shape fill [yes|no]
            [<plotname>] shape color <value>
            [<plotname>] smooth [step|linear|cubic|quadratic|catrom]
            [<plotname>] color <value>
            [<plotname>] width <value>
            [<plotname>] dash [yes|no]
            [<plotname>] error [yes|no]
            [<plotname>] error color <value>
            [<plotname>] error width <value>
            [<plotname>] name <string>
      # select current dataset
      -plot [<plotname>] select <value>
       
      Example:
      # create new empty plot window
      $ds9 -plot
      $ds9 -plot scatter
      $ds9 -plot new
      $ds9 -plot new bar
      $ds9 -plot new name foo
      $ds9 -plot new name foo scatter

      $ds9 -plot load foo.dat xy # load new dataset with dimension xy
      $ds9 -plot save bar.dat # save current dataset
      $ds9 -plot clear # clear all datasets
      $ds9 -plot duplicate # duplicate current dataset
      $ds9 -plot stats # display current dataset statistics
      $ds9 -plot list # list current dataset
      $ds9 -plot loadconfig foo.plt # load plot configuration
      $ds9 -plot saveconfig bar.plt # save current plot configuration
      $ds9 -plot pagesetup orient portrait
      $ds9 -plot pagesetup size letter
      $ds9 -plot print
      $ds9 -plot print destination file
      $ds9 -plot print command "lp"
      $ds9 -plot print filename "foo.ps"
      $ds9 -plot print color rgb
      $ds9 -plot close # close current plot

      $ds9 -plot mode pointer


      # configure plot
      $ds9 -plot axis x grid yes
      $ds9 -plot axis x log yes

      $ds9 -plot axis x flip yes
      $ds9 -plot axis x auto no
      $ds9 -plot axis x min 0
      $ds9 -plot axis x max 100
      $ds9 -plot axis x format {%f}
      $ds9 -plot legend yes # show legend
      $ds9 -plot legend position left
      $ds9 -plot font numbers font times
      $ds9 -plot font numbers size 12
      $ds9 -plot font numbers weight bold
      $ds9 -plot font numbers slant italic
      $ds9 -plot title {The Title}
      $ds9 -plot title x {X Axis}
      $ds9 -plot barmode aligned

      # configure current dataset
      $ds9 -plot show yes
      $ds9 -plot shape circle
      $ds9 -plot shape fill no
      $ds9 -plot shape color cyan
      $ds9 -plot smooth step
      $ds9 -plot color red
      $ds9 -plot width 2
      $ds9 -plot dash yes
      $ds9 -plot error yes
      $ds9 -plot error color red

      $ds9 -plot error width 2
      $ds9 -plot name {My Data}

      # select current dataset
      $ds9 -plot select 2

      png

      Load PNG image into current frame.

      Syntax:
      -png <filename>
       
      Example:

      $ds9 png foo.png
      $cat foo.png | ds9 -png -

      port

      Set the IRAF port number, used by IRAF to communicate with DS9. The default is 5137, the standard IRAF port used by ximtool.

      Syntax:
      -port number
       
      Example:
      $ds9 -port 5137

      port_only
      inet_only

      Only use the IRAF port number. This is the same as -fifo none -unix none.

      Syntax:
      -port_only
       
      Example:
      $ds9 -port_only

      pow

      Select power scale function for the current frame.

      Syntax:
      -pow
       
      Example:
      $ds9 -pow

      prefs

      Controls various preference settings.

      Syntax:
      -prefs [clear]
             [irafalign yes|no]
       
      Example:
      $ds9 -prefs clear
      $ds9 -prefs irafalign yes

      preserve

      Preserve the follow attributes while loading a new image.

      Syntax:
      preserve [pan yes|no]
               [regions yes|no]
       
      Example:
      $ds9 -preserve pan yes
      $ds9 -preserve regions yes

      psprint

      Invokes postscript printing. Please see print for further details.

      print

      Controls printing. Use print option to set printing options.

      Syntax:
      -print [destination printer|file]
             [command <command>]
             [filename <filename>]
             [color rgb|cmyk|gray]
             [level 1|2]
             [resolution 53|72|75|150|300|600]
       
      Example:
      $ds9 -print
      $ds9 -print destination file
      $ds9 -print command 'gv -'
      $ds9 -print filename foo.ps
      $ds9 -print color cmyk
      $ds9 -print level 2
      $ds9 -print resolution 75

      private

      use private colormap, valid for pseudocolor 8 mode.

      Syntax:
      -private
       
      Example:
      $ds9 -private

      raise

      Raise in the window stacking order.

      Syntax:
      -raise
       
      Example:
      $ds9 -raise

      regions

      Controls regions in the current frame.

      Syntax:
      -regions [<filename>]
               [load [all] <filename>]
               [save <filename>]
               [list [close]]
               [epsilon <integer>]
               [show yes|no]
               [showtext yes|no]
               [centroid]
               [centroid auto yes|no]
               [centroid radius <value>|iteration <value>]
               [getinfo]
               [move front]
               [move back]
               [select all]
               [select none]
               [select invert]
               [delete all]
               [delete select]
               [format ds9|xml|ciao|saotng|saoimage|pros|xy]
               [system image|physical|wcs|wcsa...wcsz]
               [sky fk4|fk5|icrs|galactic|ecliptic]
               [skyformat degrees|sexagesimal]
               [strip yes|no]
               [shape <shape>]
               [color <color>
               [width <width>]
               [fixed|edit|rotate|delete yes|no]
               [include|exclude|source|background]

               [delim [nl|<char>]]
               [command <marker command>]
               [composite]
               [dissolve]
               [template <filename>]
               [template <filename> at <ra> <dec> <coordsys> <skyframe>]
               [savetemplate <filename>]
               [group new]
               [group <tag> new]
               [group <tag> update]
               [group <tag> select]
               [group <tag> color <color>]
               [group <tag> copy]
               [group <tag> delete]
               [group <tag> cut]
               [group <tag> font <font>]
               [group <tag> move <int> <int>]
               [group <tag> movefront]
               [group <tag> moveback]
               [group <tag> property <property> yes|no]
               [copy]
               [cut]
               [paste image|physical|wcs|wcsa...wcsz]
               [undo]
       
      Example:
      $ds9 -regions foo.reg
      $ds9 -regions -format ciao bar.reg # load as ciao format
      $ds9 -regions foo.fits # FITS regions files do not need a format specification
      $ds9 -regions load foo.reg # load foo.reg into current frame
      $ds9 -regions load all foo.reg # load foo.reg into all frames
      $ds9 -regions load '*.reg'# expand *.reg and load into current frame
      $ds9 -regions load all '*.reg' # expand *.reg and load into all frames
      $ds9 -regions save foo.reg
      $ds9 -regions list
      $ds9 -regions list close
      $ds9 -regions epsilon 5
      $ds9 -regions show yes
      $ds9 -regions showtext no
      $ds9 -regions centroid
      $ds9 -regions centroid auto yes
      $ds9 -regions centroid radius 10
      $ds9 -regions centroid iteration 20
      $ds9 -regions getinfo
      $ds9 -regions move back
      $ds9 -regions move front
      $ds9 -regions select all
      $ds9 -regions select none
      $ds9 -regions select invert
      $ds9 -regions delete all
      $ds9 -regions delete select
      $ds9 -regions format ds9
      $ds9 -regions system wcs
      $ds9 -regions sky fk5
      $ds9 -regions skyformat degrees
      $ds9 -regions delim nl
      $ds9 -regions strip yes
      $ds9 -regions shape ellipse
      $ds9 -regions color red
      $ds9 -regions width 3
      $ds9 -regions edit yes
      $ds9 -regions include
      $ds9 -regions command "circle 100 100 20 # color=red"
      $ds9 -regions composite
      $ds9 -regions dissolve
      $ds9 -regions template foo.tpl
      $ds9 -regions template foo.tpl at 13:29:55.92 +47:12:48.02 fk5
      $ds9 -regions savetemplate foo.tpl
      $ds9 -regions group new
      $ds9 -regions group foo new
      $ds9 -regions group foo update
      $ds9 -regions group foo select
      $ds9 -regions group foo color red
      $ds9 -regions group foo copy
      $ds9 -regions group foo delete
      $ds9 -regions group foo cut
      $ds9 -regions group foo font {times 14 bold}
      $ds9 -regions group foo move 100 100
      $ds9 -regions group foo movefront
      $ds9 -regions group foo moveback
      $ds9 -regions group foo property delete no
      $ds9 -regions copy
      $ds9 -regions cut
      $ds9 -regions paste wcs
      $ds9 -regions undo

      red

      For RGB frames, sets the current color channel to red.

      Syntax:
      -red
       
      Example:
      $ds9 -red foo.fits

      restore

      Restore DS9 to a previous state from a backup save set.

      Syntax:
      -restore <filename>
       
      Example:
      $ds9 -restore ds9.bck

      rgb

      Create RGB frame and control RGB frame parameters.

      Syntax:
      -rgb []
           [red|green|blue]
           [channel [red|green|blue]]
           [view [red|green|blue] [yes|no]]
           [system <coordsys>]
           [lock wcs|crop|slice|bin|scale|scalelimits|colorbar|block|smooth [yes|no]]
           [open|close]
       
      Example:
      $ds9 -rgb # create new rgb frame
      $ds9 -rgb red # set current channel to red
      $ds9 -rgb channel red # set current channel to red
      $ds9 -rgb view blue no # turn off blue channel
      $ds9 -rgb system wcs # set rgb coordinate system
      $ds9 -rgb lock wcs yes
      $ds9 -rgb lock crop yes
      $ds9 -rgb lock slice yes
      $ds9 -rgb lock bin yes
      $ds9 -rgb lock scale yes
      $ds9 -rgb lock scalelimits yes
      $ds9 -rgb lock colorbar yes
      $ds9 -rgb lock block yes
      $ds9 -rgb lock smooth yes
      $ds9 -rgb open
      $ds9 -rgb close

      rgbarray

      Load raw data array cube into rgb frame.

      Syntax:
      -rgbarray <filename>[[xdim=<x>,ydim=<y>|dim=<dim>],[zdim=3],bitpix=<b>,skip=<s>,endian=[little|big]]
       
      Example:
      $ds9 -rgbarray foo.arr[dim=512,zdim=3,bitpix=-32,endian=little]

      $cat foo.arr | ds9 -rgbarray -[dim=512,zdim=3,bitpix=-32,endian=little]

      rgbcube

      Load FITS rgbcube into rgb frame.

      Syntax:
      -rgbcube <filename>
       
      Example:
      $ds9 -rgbcube foo.fits

      $cat foo.fits | ds9 -rgbcube -

      rgbimage

      Load FITS rgbimage into rgb frame.

      Syntax:
      -rgbimage <filename>
       
      Example:
      $ds9 -rgbimage foo.fits

      $cat foo.fits | ds9 -rgbimage -

      rotate

      Controls the rotation angle (in degrees) of the current frame.

      Syntax:
      -rotate [<value>]
              [to <value>]
              [open|close]
       
      Example:
      $ds9 -rotate 45
      $ds9 -rotate to 30
      $ds9 -rotate open
      $ds9 -rotate close

      samp

      Configure SAMP protocol.

      Syntax:
      -samp [yes|no|connect|disconnect]
            [broadcast [image|table]]
            [send [image|table] <application>]
       
      Example:
      $ds9 -samp yes
      $ds9 -samp connect
      $ds9 -samp broadcast image
      $ds9 -samp send image aladin

      save

      Save loaded image data of current frame as FITS.

      Syntax:
      -save
      [fits|rgbimage|rgbcube|mecube|mosaic|mosaicimage] <filename> [image|table|slice]
       
      Example:
      $ds9 -save foo.fits

      $ds9 -save fits foo.fits image
      $ds9 -save fits foo.fits table
      $ds9 -save fits foo.fits slice

      $ds9 -save rgbimage foo.fits
      $ds9 -save rgbcube foo.fits
      $ds9 -save mecube foo.fits
      $ds9 -save mosaic foo.fits
      $ds9 -save mosaicimage foo.fits

      saveimage

      Create a snap shot of the current DS9 window and save in specified image format. If no format specified, the file name extension is used to determine the output format. Optional parameters: jpeg quality (1-100) and tiff compression method.

      Syntax:
      -saveimage
      [fits|eps|gif|tiff|jpeg|png] <filename>
      -saveimage <filename>.jpeg [1-100]
      -saveimage <filename>.tiff [none|jpeg|packbits|deflate]
       
      Example:
      $ds9 -saveimage ds9.tiff
      $ds9 -saveimage jpeg ds9.jpeg 75

      scale

      Controls the limits and color scale distribution.

      Syntax:
      -scale [linear|log|pow|sqrt|squared|asinh|sinh|histequ]
             [log exp <value>]
             [datasec yes|no]
             [limits <minvalue> <maxvalue>]
             [mode minmax|<value>|zscale|zmax]
             [scope local|global]
             [match]
             [match limits]
             [lock [yes|no]]
             [lock limits [yes|no]]
             [open|close]
       
      Example:
      $ds9 -scale linear
      $ds9 -scale log exp 100
      $ds9 -scale datasec yes
      $ds9 -scale histequ
      $ds9 -scale limits 1 100
      $ds9 -scale mode zscale
      $ds9 -scale mode 99.5
      $ds9 -scale scope local
      $ds9 -scale match
      $ds9 -scale match limits
      $ds9 -scale lock yes
      $ds9 -scale lock limits yes
      $ds9 -scale open
      $ds9 -scale close

      shm

      Load a shared memory segment into the current frame.

      Syntax:
      -shm [<key> [<filename>]]
           [key <id> [<filename>]]
           [shmid <id> [<filename>]]
           [fits [key|shmid] <id> [<filename>]]
           [mosaicimage [iraf|wcs|wcsa...wcsz|wfpc2] [key|shmid] <id> [<filename>]]
           [mosaicimagenext [wcs|wcsa...wcsz] [key|shmid] <id> [<filename>]]
           [mosaic [iraf|wcs|wcsa...wcsz] [key|shmid] <id> [<filename>]]
           [rgbcube [key|shmid] <id> [<filename>]]
           [rgbimage [key|shmid] <id> [<filename>]]
           [rgbarray [key|shmid] <id> [xdim=<x>,ydim=<y>|dim=<dim>,zdim=3],bitpix=<b>,[skip=<s>]]
           [array [key|shmid] <id> [xdim=<x>,ydim=<y>|dim=<dim>],bitpix=<b>,[skip=<s>]]
       
      Example:
      $ds9 -shm 102
      $ds9 -shm key 102
      $ds9 -shm shmid 102 foo
      $ds9 -shm fits 100 foo
      $ds9 -shm mosaicimage iraf key 100 foo
      $ds9 -shm mosaicimage wcs key 100 foo
      $ds9 -shm mosaicimage wcsa key 100 foo
      $ds9 -shm mosaicimage wfpc2 key 100 foo
      $ds9 -shm mosaicimagenext wcs key 100 foo
      $ds9 -shm mosaic iraf key 100 foo
      $ds9 -shm mosaic wcs key 100 foo
      $ds9 -shm rgbcube key 100 foo
      $ds9 -shm rgbimage key 100 foo
      $ds9 -shm rgbarray shmid 102 [dim=32,zdim=3,bitpix=-32]
      $ds9 -shm array shmid 102 [dim=32,bitpix=-32]

      sia

      Support for VO Simple Image Access protocol. The first command will create a new search. All other commands operated on the last search created, unless indicated otherwise.

      Syntax:
      -sia [2mass|akari|astrowise|cadc|cxc|mast|sdss|skyview|tgssadr]

           [<ref>] [cancel]
           [<ref>] [clear]
           [<ref>] [close]
           [<ref>] [coordinate <ra> <dec> <coordsys>]
           [<ref>] [crosshair]
           [<ref>] [export sb|tsv <filename>]
           [<ref>] [name <object>]
           [<ref>] [print]
           [<ref>] [retrieve]
           [<ref>] [save <filename>]
           [<ref>] [size <width> <height> degrees|arcmin|arcsec]
           [<ref>] [sky <skyframe>]
           [<ref>] [skyformat <skyformat>]
           [<ref>] [system <coordsys>]
           [<ref>] [update]

      Example:
      $ds9 -sia 2mass
      $ds9 -sia cancel
      $ds9 -sia clear
      $ds9 -sia close
      $ds9 -sia coordinate 202.48 47.21 fk5
      $ds9 -sia crosshair
      $ds9 -sia export tsv bar.tsv
      $ds9 -sia name m51
      $ds9 -sia print
      $ds9 -sia retrieve
      $ds9 -sia save foo.xml
      $ds9 -sia size 1 1 degrees
      $ds9 -sia sky fk5
      $ds9 -sia skyformat degrees
      $ds9 -sia system wcs
      $ds9 -sia update

      single

      Set display mode to single.

      Syntax:
      -single
       
      Example:
      $ds9 -single

      skyview

      Support for SkyView image server at HEASARC.

      Syntax:
      -skyview []
               [<object>]
               [name <object>]
               [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
               [size <width> <height> degrees|arcmin|arcsec]
               [pixels <width> <height>]
               [save yes|no]
               [frame new|current]
               [update frame|crosshair]
               [survey <survey>]
               [open|close]
       
      Example:
      $ds9 -skyview
      $ds9 -skyview m31
      $ds9 -skyview name m31
      $ds9 -skyview coord 00:42:44.404 +41:16:08.78 sexagesimal
      $ds9 -skyview size 60 60 arcmin
      $ds9 -skyview pixels 600 600
      $ds9 -skyview save yes
      $ds9 -skyview frame current
      $ds9 -skyview update frame
      $ds9 -skyview survey sdssi
      $ds9 -skyview open
      $ds9 -skyview close

      sleep

      Delays execution for specified number of seconds. Default is 1 second.

      Syntax:
      -sleep [#]
       
      Example:
      $ds9 -sleep
      $ds9 -sleep 2

      slice
      noslice

      Indicates next files loaded are to treated as slices of a cube. Can be disabled with noslice command.

      Syntax:
      -slice <filename>
      -noslice
       
      Example:
      $ds9 -slice *.fits
      $ds9 -noslice

      smooth

      Smooth current image or set smooth parameters.

      Syntax:
      -smooth []
              [yes|no]
              [function boxcar|tophat|gaussian]
              [radius <int>]
              [open|close]
              [match]
              [lock [yes|no]]
       
      Example:
      $ds9 -smooth
      $ds9 -smooth yes
      $ds9 -smooth function tophat
      $ds9 -smooth radius 4
      $ds9 -smooth open
      $ds9 -smooth close
      $ds9 -smooth match
      $ds9 -smooth lock yes

      squared

      Select squared scale function for the current frame.

      Syntax:
      -squared
       
      Example:
      $ds9 -squared

      sqrt

      Select square soot scale function for the current frame.

      Syntax:
      -sqrt
       
      Example:
      $ds9 -sqrt

      source

      Source TCL code from a file.

      Syntax:
      -source <filename>
       
      Example:
      $ds9 -source extensions.tcl

      tcl

      Execute one TCL command. Note: this a different behavior from previous versions of DS9.

      Syntax:
      -tcl <tcl command>
       
      Example:
      $ds9 -tcl 'puts "Hello, World"'

      threads

      Set number of process threads for functions which are multi-threaded.

      Syntax:
      -threads #
       
      Example:
      $ds9 -threads 8


      tiff

      Load TIFF image into current frame.

      Syntax:
      -tiff <filename>
       
      Example:
      $ds9 -tiff foo.tiff
      $cat foo.fits | ds9 -tiff -

      tile

      Controls the tile display mode.

      Syntax:
      -tile []
            [yes|no]
            [mode grid|column|row]
            [grid]
            [grid mode automatic|manual]
            [grid direction x|y]
            [grid layout <col> <row>]
            [grid gap <pixels>]
            [row]
            [column]
       
      Example:
      $ds9 -tile
      $ds9 -tile yes
      $ds9 -tile mode row
      $ds9 -tile grid
      $ds9 -tile grid mode manual
      $ds9 -tile grid direction x
      $ds9 -tile grid layout 5 5
      $ds9 -tile grid gap 10
      $ds9 -tile row
      $ds9 -tile column

      title

      Changes the display window title to the specified name.

      Syntax:
      -title name
       
      Example:
      $ds9 -title Voyager

      unix

      Set the IRAF unix socket name, used by IRAF to communicate with DS9. The default is /tmp/.IMT%d, so that the standard IRAF unix socket is defined.

      Syntax:
      -unix name
       
      Example:
      $ds9 -unix "/tmp/.IMT%d"

      unix_only

      Only use the IRAF unix socket name. This is the same as -fifo none -port 0.

      Syntax:
      -unix_only
       
      Example:
      $ds9 -unix_only

      update

      Updates the current frame or region of frame. In the second form, the first argument is the number of the fits HDU (starting with 1) and the remaining args are a bounding box in IMAGE coordinates. By default, the screen is updated the next available idle cycle. However, you may force an immediate update by specifying the NOW option.

      Syntax:
      -update []
              [# x1 y1 x2 y2]
              [now]
              [now # x1 y1 x2 y2]
       
      Example:
      $ds9 -update
      $ds9 -update 1 100 100 300 400
      $ds9 -update now
      $ds9 -update now 1 100 100 300 400

      url

      Load FITS from URL into the current frame

      Syntax:
      -url <url>
       
      Example:
      $ds9 -url http://foo.bar.edu/foo.fits

      version

      Returns the current version of DS9 and exits.

      Syntax:
      -version
       
      Example:
      $ds9 -version

      view

      Controls the GUI and visible RGB frame color channels.

      Syntax:
      -view [layout horizontal|vertical]
            [keyvalue <string>]
            [info yes|no]
            [panner yes|no]
            [magnifier yes|no]
            [buttons yes|no]
            [colorbar yes|no]
            [graph horizontal|vertical yes|no]
            [filename yes|no]
            [object yes|no]
            [keyword yes|no]
            [minmax yes|no]
            [lowhigh yes|no]
            [units yes|no]
            [image|physical|wcs|wcsa...wcsz yes|no]
            [frame yes|no]
            [red yes|no]
            [green yes|no]
            [blue yes|no]

       

      Example:
      $ds9 -view layout vertical
      $ds9 -view keyvalue BITPIX
      $ds9 -view info yes
      $ds9 -view panner yes
      $ds9 -view magnifier yes
      $ds9 -view buttons yes
      $ds9 -view colorbar yes
      $ds9 -view graph horizontal yes
      $ds9 -view filename yes
      $ds9 -view object yes
      $ds9 -view keyword yes
      $ds9 -view minmax yes
      $ds9 -view lowhigh yes
      $ds9 -view wcsa yes
      $ds9 -view frame yes
      $ds9 -view red yes
      $ds9 -view green yes
      $ds9 -view blue yes

      visual

      Force DS9 to use the specified color visual. This argument MUST be the first argument listed. Requires the visual be available.

      Syntax:
      -visual [pseudocolor|pseudocolor8|truecolor|truecolor8|truecolor16|truecolor24]  
      Example:
      $ds9 -visual truecolor24

      vla

      Support for VLA Sky Survey.

      Syntax:
      -vla []
             [<object>]
             [name <object>]
             [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
             [size <width> <height> degrees|arcmin|arcsec]
             [save yes|no]
             [frame new|current]
             [update frame|crosshair]
             [survey first|stripe82]
             [open|close]
       
      Example:
      $ds9 -vla
      $ds9 -vla m31
      $ds9 -vla name m31
      $ds9 -vla coord 00:42:44.404 +41:16:08.78 sexagesimal
      $ds9 -vla size 60 60 arcmin
      $ds9 -vla save yes
      $ds9 -vla frame current
      $ds9 -vla update frame
      $ds9 -vla survey stripe82
      $ds9 -vla open
      $ds9 -vla close

      vlss

      Support for NRAO VLSS Sky Survey.

      Syntax:
      -vlss []
            [<object>]
            [name <object>]
            [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
            [size <width> <height> degrees|arcmin|arcsec]
            [save yes|no]
            [frame new|current]
            [update frame|crosshair]
            [open|close]
       
      Example:
      $ds9 -vlss
      $ds9 -vlss m31
      $ds9 -vlss name m31
      $ds9 -vlss coord 00:42:44.404 +41:16:08.78 sexagesimal
      $ds9 -vlss size 60 60 arcmin
      $ds9 -vlss save yes
      $ds9 -vlss frame current
      $ds9 -vlss update frame
      $ds9 -vlss open
      $ds9 -nvess close

      vo

      Invoke an connection to a Virtual Observatory site.

      Syntax:
      -vo [method xpa|mime]
          [server <url>]
          [internal yes|no]
          [delay #]
          [<url>]
          [connect <url>]
          [disconnect <url>]
          [open|close]
       
      Example:
      $ds9 -vo method xpa
      $ds9 -vo server "http://foo.bar.edu/list.txt"
      $ds9 -vo internal yes
      $ds9 -vo delay 15 # keep-alive delay
      $ds9 -vo chandra-ed
      $ds9 -vo connect chandra-ed
      $ds9 -vo disconnect chandra-ed
      $ds9 -vo open
      $ds9 -vo close

      wcs

      Controls the World Coordinate System for the current frame. If the wcs system, skyframe, or skyformat is modified, the info panel, compass, grid, and alignment will be modified accordingly. Also, a new WCS specification can be loaded and used by the current image regardless of the WCS that was contained in the image file. Please see WCS for more information.

      Syntax:
      -wcs [[system] wcs|wcsa...wcsz]
           [[sky] fk4|fk5|icrs|galactic|ecliptic]
           [[skyformat] degrees|sexagesimal]
           [align yes|no]
           [reset [#]]
           [replace [#] <filename>]
           [append [#] <filename>]
           [open|close]
       
      Example:
      $ds9 -wcs wcs
      $ds9 -wcs system wcs
      $ds9 -wcs fk5
      $ds9 -wcs sky fk5
      $ds9 -wcs sexagesimal
      $ds9 -wcs skyformat sexagesimal
      $ds9 -wcs align yes
      $ds9 -wcs reset
      $ds9 -wcs reset 3
      $ds9 -wcs replace foo.wcs
      $ds9 -wcs replace 3 foo.wcs
      $ds9 -wcs append foo.wcs
      $ds9 -wcs append 3 foo.wcs
      $ds9 -wcs open
      $ds9 -wcs close

      web

      Display specified URL in the web display.

      Syntax:
      -web [new|<webname>] [<url>]
           [<webname>] [click back|forward|stop|reload|#]
           [<webname>] [clear]
           [<webname>] [close]
       
      Example:
      $ds9 -web www.cnn.com
      $ds9 -web new www.cnn.com
      $ds9 -web hvweb www.apple.com
      $ds9 -web click back
      $ds9 -web click 2
      $ds9 -web clear
      $ds9 -web close

      width

      Set the width of the image display window. Use the geometry command to set the overall width and height of the ds9 window.

      Syntax:
      -width [<value>]
       
      Example:
      $ds9 -width 512

      xpa

      Configure XPA.

      Syntax:
      -xpa [yes|no]
           [inet|local|unix|localhost]
           [noxpans]
           [connect]
           [disconnect]
           [info]
       
      Example:
      $ds9 -xpa no
      $ds9 -xpa local
      $ds9 -xpa noxpans
      $ds9 -xpa connect
      $ds9 -xpa disconnect
      $ds9 -xpa info

      zmax

      Set Scale Limits based  on the IRAF algorithm and maximum data value.

      Syntax:
      -zmax
       
      Example:
      $ds9 -zmax

      zscale

      Set Scale Limits based  on the IRAF algorithm.

      Syntax:
      -zscale []
              [contrast]
              [sample]
              [line]
       
      Example:
      $ds9 -zscale
      $ds9 -zscale contrast .25
      $ds9 -zscale sample 600
      $ds9 -zscale line 120

      zoom

      Controls the current zoom value for the current frame.

      Syntax:
      -zoom [<value>]
            [<value> <value>]
            [to <value>]
            [to <value> <value>]
            [in]
            [out]
            [to fit]
            [open|close]
       
      Example:
      $ds9 -zoom 2
      $ds9 -zoom 2 4
      $ds9 -zoom to 4
      $ds9 -zoom to 2 4
      $ds9 -zoom in
      $ds9 -zoom out
      $ds9 -zoom to fit
      $ds9 -zoom open
      $ds9 -zoom close

      saods9/ds9/doc/ref/contour.html000644 000765 000000 00000014570 12764066270 017004 0ustar00joyewheel000000 000000 Contours

      Contours

      DS9 can create and display contours as an overlay on an image. The Analysis Contours menu is used to display contours. To create, copy, paste,  and configure contours, use the Analysis Contour Parameters menu.

      Contour Parameters

      When creating a new contour, a dialog box appears, in which the user selects the number of contour levels, smoothness, and the distribution of the contours.

      Contour Levels

      Specifies the number of contour levels to be generated. A typical number is between 1 and 10. Note: large numbers of contours can take a long time to generate.

      Contour Smoothness

      Specifies how smooth the contours are. A smoothness level of 1 will evaluate the contour at each image pixel. A level of 2 will evaluate the contour at every other pixel. The larger the number, the quicker the contour will be generated, and the less detail will be available.

      Contour Scale

      Specifies the distribution of the contour levels.

      Contour Method

      There are two methods that are available to calculate the contour lines. The first, BLOCK, blocks down the image, by the smoothness factor, before contours are calculated. As a result, the larger the smoothness, the faster the result. The second method, SMOOTH, smooths the image before calculating contours. As a result, the larger the smoothness, the slower the result.

      Contour Files

      A contour file is an ASCII file containing a header, global properties, coordinate system, contour levels, and contour points.

      Header

      A DS9 contour file may start with the following optional header:

      # Contour file format: DS9 version 7.5

      Global Properties

      Global properties affect all contour levels unless a line level attribute is specified. The global keyword is first, followed by a list of keyword = value pairs. Multiple global property lines may be used within a region file.

      global color=green width=1 dash=1 dashlist=8 3

      Coordinate Systems

      For each contour file, it is important to specify the coordinate system used to interpret the contour points, i.e., to set the context in which the positions are interpreted. For this purpose, the following keywords are recognized:

      PHYSICAL                # pixel coords of original file using LTM/LTV
      IMAGE                   # pixel coords of current file
      FK4,B1950               # sky coordinate systems
      FK5,J2000               # sky coordinate systems

      ICRS                    # sky coordinate systems
      GALACTIC                # sky coordinate systems

      ECLIPTIC                # sky coordinate systems
      WCS                     # primary WCS
      WCSA                    # secondary WCS
      LINEAR                  # linear primary WCS

      Contour Level

      Each contour level is composed of a line value, line attributes and one or more contours. Line attributes are specified at the start of a new level and only affect contours within that level .

      level=15.78775 color=pink width=2 dash=yes dashlist=2 2

      Contour

      Each contour is composed of one or more X,Y coordinates, with a deliminator of space or comma,  starting with "(" and ending with ")". Contours are not closed.

      (202.4836468 47.22380226
       202.4833538 47.2239185
       202.4831634 47.22409874
       202.4829883 47.22428858)



      saods9/ds9/doc/ref/file.html000644 000765 000000 00000110766 12764066270 016236 0ustar00joyewheel000000 000000 File Formats

      File Formats

      FITS
      FITS Image
      FITS Binary Events Table
      FITS HEALPIX Table
      FITS Data Cube
      FITS Multiple Extension Data Cube
      FITS Multiple Extension Multiple Frames
      FITS Mosaic
      FITS Mosaic Data Cube
      FITS RGB
      Split FITS
      Array
      NRRD
      ENVI
      GIF
      TIFF
      JPEG
      PNG
      External Format Support
      External Analysis Support
      Region Files
      Contour Files
      Color Lookup Table
      WCS
      Preference File
      Startup File
      TCL

      FITS

      DS9 supports FITS images and FITS binary tables. The following algorithm is used to locate and to load the FITS image or table if no additional information is provide:
      • Examine primary HDU, if IMAGE, load.
      • Examine each extension HDU
        • If IMAGE, load.
        • If BINARY TABLE, create IMAGE if the following is true:
          • FITS COMPRESSED: keyword ZIMAGE is T.
          • FITS EVENTS: keyword EXTNAME is EVENTS,STDEVT, or RAYEVENT, column names X and Y are present.
          • FITS HEALPIX: keyword PIXTYPE is HEALPIX.
      • If DS9 traverses the entire FITS file without satisfying one of the above, an error is generated.
      FITS keyword inheritance is supported. All valid FITS BITPIX values are supported, along with -16, for UNSIGNED SHORT. The following FITS keywords are supported:
      OBJECT
      UNITS
      BSCALE / BZERO
      BLANK
      DATASEC
      LTV / LTM  for physical coords
      DTV / DTM  for detector coords
      ATV / ATM  for amplifier coords
      WCS keywords
      WCS# keywords

      FITS Image

      At load time, the user may provide just a file name or a file name along with FITS extension name/number and image section specification. FITS extension names are case insensitive. When specifying an extension, be sure to quote strings correctly to pass both the shell and DS9 parser. A image section specification is used to specify the x,y limits of an image subsection. By default, x and y coordinates are in IMAGE, use a 'p' as the last character to indicate PHYSICAL coordinates. A '*' indicates use the default for that axis only. Block is optional and defaults to 1.
      Syntax:
      filename
      filename[ext]
      filename[ext][sect]
      filename[sect]
      filename[ext,sect]

      where


      ext:
      [extension name | extension #]

      sect:
      [x0:x1
      ,y0:y1[p]]
      [x0:x1,y0:y1,block[p]]
      [x0:x1
      ,y0:y1,z0:z1[p]]
      [x0:x1,y0:y1,block,z0:z1[p]]
      [*,y0:y1[p]]
      [*,y0:y1
      ,block[p]]
      [*,y0:y1
      ,z0:z1[p]]
      [*,y0:y1
      ,block,z0:z1[p]]
      [x0:x1,*[p]]
      [x0:x1
      ,*,block[p]]
      [x0:x1
      ,*,z0:z1[p]]
      [x0:x1
      ,*,block,z0:z1[p]]
      [*,*,block]
      [*,*,z0:z1
      ]
      [*,*,block,z0:z1
      ]

      [dim1@xcen,dim2@ycen
      [p]]
      [dim1@xcen,dim2@ycen,block[p]]
      [dim1@xcen,dim2@ycen,dim3@zcen
      [p]]
      [dim1@xcen,dim2@ycen,block,dim3@zcen[p]]
      [*,dim2@ycen[p]]
      [*,dim2@ycen,block
      [p]]
      [*,dim2@ycen,dim3@zcen
      [p]]
      [*,dim2@ycen,block,dim3@zcen
      [p]]
      [dim1@xcen,*[p]]
      [dim1@xcen,*,block
      [p]]
      [dim1@xcen,*,dim3@zcen
      [p]]
      [dim1@xcen,*,block,dim3@zcen
      [p]]
      [*,*,block]
      [*,*,dim3@zcen]
      [*,*,block,dim3@zcen]

      [dim@xcen@ycen]
      [dim@xcen@ycen,block]

      [dim@xcen@ycen,zdim@zcen]
      [dim@xcen@ycen,block,zdim@zcen]

      Example:
      $ds9 foo.fits # default load
      $ds9 foo.fits[1] # load first extension
      $ds9 foo.fits[BCKGRD] # load extension named 'BCKGRD'
      $ds9 foo.fits[10:200,40:100] # image section
      $ds9 foo.fits[10:200,40:100,2] # image section, blocked by 2
      $ds9 foo.fits[*,40:100] # only section y axis
      $ds9 foo.fits[256@512@512] # section box at 512,512
      $ds9 foo.fits[2][100:200,100:200] # second extension, image section
      $ds9 foo.fits[2][100:200,100:200,2] # second extension, image section, blocked by 2
      $ds9 foo.fits[10:200,40:100,5:20] # cube section
      $ds9 foo.fits[*,40:100,5:20] # only section y and z axes
      $ds9 foo.fits[256@512@512] # section cube at 512,512
      $ds9 foo.fits[2][100:200,100:200,5:20] # second extension, cube section

      $ds9 foo.fits[2][100:200,100:200,2,5:20] # second extension, cube section, blocked by 2
      FITS Binary Events Table

      At load time, the user may provide just a file name or a file name along with FITS extension name/number, image section specification, and binnng parameters. DS9 will automatically convert an FITS binary events table into a 2D image for display. FITS extension names and parameters are case insensitive. The users may specify a number of parameters on how to construct the image and how to filter data. When specifying a filter, be sure to quote strings correctly to pass both the shell and DS9 parser.
      Syntax:
      filename
      filename[ext]
      filename[ext][sect]
      filename[sect]
      filename[ext,sect]

      filename[ext][bin]
      filename[ext][bin][sect]
      filename[ext][sect][bin]
      filename[bin]
      filename[bin][sect]
      filename[sect][bin]
      filename[ext,bin]

      where:
      ext: see FITS Image
      sect: see FITS Image

      bin:
      [bin=colx,coly] # bin counts
      [bin=colx,coly,filter] # bin counts with filter
      [bin=colx,coly,colz] # bin on colz
      [bin=colx,coly,colz,filter] # bin on colz with filter
      [bin=colz] # bin cols 'x', 'y', and colz
      [bin=colz,filter] # bin cols 'x', 'y', and colz with filter
      [key=colx,coly]
      [binkey=colx,coly]

      (see Introduction to Filtering)

      Example:
      $ds9 foo.fits # default load
      $ds9 foo.fits[1] # load first extension
      $ds9 foo.fits[BCKGRD] # load extension named 'BCKGRD'
      $ds9 foo.fits[bin=detx,dety] # bin on detx,dety
      $ds9 foo.fits[2][bin=rawx,rawy] # load ext 2, cols rawx,rawy
      $ds9 foo.fits[bg_events,bin=rawx,rawy] # load ext bg_events, cols rawx,rawy
      $ds9 foo.fits[bin=x,y,pha] # bin on x,y,pi
      $ds9 foo.fits[bin=pi] # bin on x,y,pi
      $ds9 'foo.fits[ccd_id==3&&energy>4000]' # quoted filter
      $ds9 '"foo.fits[ccd_id==3 && energy>4000]"' # double quoted filter
      $ds9 'foo.fits[events][pha>5,pi<2]' # load extension 'events' and filter

      The shell environment variable DS9_BINKEY may be used to specify default bin cols for FITS bin tables. Example:

      $ export DS9_BINKEY='[bin=rawx,rawy]'
      $ ds9 foo.fits # load FITS bin table, bin on rawx, rawy

      FITS HEALPIX Table

      At load time, the user may provide just a file name or a file name along with FITS extension name/number, image section specification, and Healpix parameters. DS9 will automatically convert a FITS HEALPIX binary or ascii table into a 2D image for display. FITS extension names and parameters are case insensitive. The users may specify a number of parameters on how to construct the image. Any table with keyword PIXTYPE=HEALPIX or NSIDE=x will be processed as an HEALPIX image. The following FITS keywords will be used if present and not overwritten by a command line option: NSIDE, COORDSYS, ORDER.
      Syntax:
      filename
      filename[ext]
      filename[ext][sect]
      filename[sect]
      filename[ext,sect]

      filename[ext][hpx]
      filename[ext][hpx][sect]
      filename[ext][sect][hpx]
      filename[hpx]
      filename[hpx][sect]
      filename[sect][hpx]
      filename[ext,hpx]

      where:
      ext: see FITS Image
      sect: see FITS Image

      hpx:
      [order=ring|nested] # default ring
      [layout=equatorial|north|south] # default equatorial
      [col=<column number>] # defaut 1
      [quad=<quadurant number>] # (1-4) default 1
      [system=equatorial|galactic|ecliptic|unknown] # default unknown


      Example:
      $ds9 foo.fits # default load

      $ds9 foo.fits[1] # load first extension

      $ds9 foo.fits[order=ring,layout=equatorial,col=1,quad=1,system=unknown]
      $ds9 foo.fits[1,order=nested] # first extension, nested order

      FITS Cube

      A FITS Cube is a FITS image which contains more than 2 axes (NAXES>2). DS9 will automatically detect if a cube is present and will load all additional images. In addition, individual images can be loaded one at a time into a cube. DS9 will display the Cube dialog box which allows the user to select which 2 image to be displayed.

      FITS Multiple Extension Cube

      A FITS Multiple Extension Data Cube file is a FITS file with one or more extensions, that is to be displayed as a data cube. Each image does not have to be the same size, however, only the coordinate systems from the first extension will be used for contours and grids.
      Example:
      $ds9 -mecube foo.fits # load multiple extension fits file as data cube

      FITS Multiple Extension Multiple Frames

      Load a multiple extension FITS file into multiple frames. Please note that files loaded via standard-in or the xpa fits command can not be displayed using this method.
      Example:
      $ds9 -multiframe foo.fits # load multiple extension fits file as multiple frames

      FITS Mosaic

      A FITS mosaic image may exist as a series of FITS files, or as one FITS file with many extensions. A FITS mosaic may be loaded all a one time, or by the segment. Once loaded, the multiple FITS images are treated as one FITS image.

      DS9 supports three forms of mosaics: 
      IRAF
      contains the DETSEC and DETSIZE keywords.
      See NOAO IRAF Mosaic Data Structures

      WCS
      each FITS image contains a valid WCS.
      HST WFPC2
      valid HST WFPC2 data cube, consisting of 4 planes, along with a fits ascii table containing wcs information.
      Example:
      $ds9 -mosaicimage iraf foo.fits # load mosaic iraf from one fits file with multiple exts
      $ds9 -mosaic iraf foo.fits bar.fits wow.fits # load mosaic iraf from 3 files
      $ds9 -mosaicimage wcs foo.fits # load mosaic wcs from one fits file with multiple exts
      $ds9 -mosaic wcs foo.fits bar.fits wow.fits # load mosaic wcs from 3 files
      $ds9 -mosaicimage wfpc2 bar.fits # load wfpc2 mosaic
      $ds9 -mosaic foo.fits bar.fits wow.fits # load mosaic (wcs) from 3 files

      FITS Mosaic Data Cube

      A FITS Mosaic Data Cube is a FITS mosaic image which contains more than 2 axes (NAXES>2). DS9 will automatically detect if a mosaic data cube is present and will load all additional images. At the same time, DS9 will display the data cube dialog box which allows the user to select which 2 image to be displayed.

      FITS RGB

      A FITS RGB image may exist as three of FITS images, one FITS file with three extensions, or as a FITS 3D Data cube, with three slices, each representing the red, green, and blue channel. A FITS RGB image may be loaded all a one time, or by the channel. Once loaded, the multiple FITS images are treated as one FITS image.
      Example:
      $ds9 -rgbimage rgb.fits # load rgb image consisting of one fits file with 3 image exts
      $ds9 -rgbcube cube.fits # load rgb image consisting of one fits data cube
      $ds9 -rgb -red foo.fits -green bar.fits -blue wow.fits # rgb image from 3 fits images

      Split FITS

      A split fits is a valid fits file in which two files contain the header and data segments.

      Array

      Raw data arrays are supported. To load an array, the user must provide the dimensions, pixel depth, and optional header size and architecture type.
      Syntax:
      filename[arr]
      filename[arr][sect]
      filename[sect][arr]
       

      where

      sect: see FITS Image
      arr:
      xdim=value
      ydim=value
      zdim=value # default is a depth of 1
      dim=value
      dims=value
      bitpix=[8|16|-16|32|64|-32|-64]
      skip=value # must be even, most must be factor of 4
      arch|endian=[big|bigendian|little|littleendian]
      Example:
      $ds9 -array bar.arr[xdim=512,ydim=512,zdim=1,bitpix=16] # load 512x512 short
      $ds9 -array bar.arr[dim=256,bitpix=-32,skip=4] # load 256x256 float with 4 byte head
      $ds9 -array bar.arr[dim=512,bitpix=32,arch=little] # load 512x512 long, intel

      or alternate format:

      filename[array(<type><dim><:skip><endian>)]

      where:
      type:
      'b' 8 -bit unsigned char
      's' 16-bit short int
      'u' 16-bit unsigned short int
      'i' 32-bit int
      'l' 64-bit int
      'r' 32-bit float
      'f' 32-bit float
      'd' 64-bit float
      dim:
      int     # x,y dim
      int.int # x,y dim
      int.int.int # x,y,z dim
      skip:
      int     # number of bytes to skip
      endian:
      'l' little endian
      'b' big endian
      Example:
      $ds9 -array bar.arr[array(s512)]   # load 512x512 short
      $ds9 -array bar.arr[array(r256:4)] # load 256x256 float with 4 byte head
      $ds9 -array bar.arr[array(i512l)]  # load 512x512 long, intel

      The shell environment variable DS9_ARRAY may be used to specify default array parameters.

      Example:
      $export DS9_ARRAY='[dim=256,bitpix=-32]'
      $ds9 -array foo.arr # load 256x256 float

      NRRD (Nearly Raw Raster Data)

      Images in NRRD are supported directly. Encodings supported: raw, gzip

      Syntax:
      filename
      filename[sect]

      where:
      sect: see FITS Image

      Example:
      $ds9 -nrrd foo.nrrd
      $ds9 -nrrd foo.nrrd[100:200,100:200] # cropped

      ENVI

      Images in ENVI are supported directly. Encodings supported: BIL, BIP, BSQ.

      Syntax:
      filename
      filename[sect]

      where:

      sect: see FITS Image

      Example:
      $ds9 -envi foo.hdr foo.bsq
      $ds9 -envi foo.hdr foo.bsq[100:200,100:200] # cropped

      GIF

      Images in GIF are supported directly. For a Frame, the average of the luminosity is used. For Frame RGB, each channel is loaded directly.

      Syntax:
      filename

      Example:
      $ ds9 -gif foo.gif

      TIFF

      Images in TIFF are supported directly. For a Frame, the average of the luminosity is used. For Frame RGB, each channel is loaded directly.

      Syntax:
      filename

      Example:
      $ ds9 -tiff foo.tiff

      JPEG

      Images in JPEG are supported directly. For a Frame, the average of the luminosity is used. For Frame RGB, each channel is loaded directly.

      Syntax:
      filename

      Example:
      $ ds9 -jpeg foo.jpeg

      PNG

      Images in PNG are supported directly. For a Frame, the average of the luminosity is used. For Frame RGB, each channel is loaded directly.

      Syntax:
      filename

      Example:
      $ ds9 -png foo.png

      External File Support

      DS9 supports external file formats via an ASCII description file. When loading a file into DS9, these descriptions are referenced for instructions for loading the file, based on the file extension. If found, the command is executed and the result, a FITS image or FITS Binary Table, is read into DS9 via stdin.
      At start-up, DS9 first searches for the ASCII file, named .ds9.filin the local directory, then in the users home directory.
      The file command first is macro-expanded to fill in user-defined arguments and then is executed externally.
      The ASCII file that defines the known image files consists of one or more file descriptors, each of which has the following format:
      Help description
      A space-separated list of templates
      A space-separated list of file types (not currently used)
      The command line for the loading this file type
      Note that blank lines separate the file descriptions and should not be used as part of a description. Also, the '#' character is a comment character.

      The following macros are supported: $filename
      For Example:
      # File access descriptions:
      #       help explanation
      #       file template
      #       file type
      #       access command
      IRAF IMH files
      *.imh
      IMH
      i2f -s $filename

      External Analysis Support

      For more information about external analysis support files, see Analysis.

      Region Files

      DS9 can read and write a number of region file formats. See Regions documentation for more information.
      DS9
      FUNTools
      Ciao
      SAOimage
      IRAF PROS
      FITS REGION Binary Table
      X Y

      Contour Files

      See Contours documentation for more information.

      Color Lookup Table

      DS9 has a number of default colormaps available to the user. DS9 also supports reading and writing color lookup table formats from the following programs:
      SAOimage
      SAOtng
      XImtool
      DS9 uses the file extension to determine the color table format:
      Ext
      Format
      .lut XImtool, SAOtng
      .sao DS9, SAOimage
      any other DS9

      WCS

      A new WCS specification can be loaded and used by the current image regardless of the WCS that was contained in the image file. WCS specification can be sent to DS9 as an ASCII file via XPA. The format of the specification is a set of valid FITS keywords that describe a WCS.
      Example:
          CRPIX1  =               257.75
          CRPIX2  =               258.93
          CRVAL1  =      -201.94541667302
          CRVAL2  =             -47.45444
          CDELT1  =        -2.1277777E-4
          CDELT2  =         2.1277777E-4
          CTYPE1  = 'RA---TAN'
          CTYPE2  = 'DEC--TAN'
      Note that the WCS definitions can contain standard FITS 80 character WCS card images, as shown above, or free-form name/value pairs without the intervening "=" sign:
          CRPIX1    257.75
          CRPIX2    258.93
          CRVAL1    -201.94541667302
          CRVAL2    -47.45444
          CDELT1    -2.1277777E-4
          CDELT2    2.1277777E-4
          CTYPE1   'RA---TAN'
          CTYPE2   'DEC--TAN'

      Preference File

      A preference file is a valid tcl script generated by DS9 to save the current preference items. See Preferences for more information.

      Startup File

      If a startup file $HOME/ds9.ini is available, it is sourced as the last step in initialization. The file permissions must be group/world readonly.
      Users may have several different startup files. DS9 looks for a startup file with its own name. By default, if the application is named ds9, it will look for .ds9.ini. However, if the DS9 application is named foo, then DS9 will look for .foo.ini. In this manner, the user can have several predefined startup files that are activated by invoking DS9 with a different application names.

      TCL

      TCL/TK script file. Users may customize the appearance and enhance the capabilities of DS9 by sourcing their own TCL scripts.
      saods9/ds9/doc/ref/grid.html000644 000765 000000 00000011340 12071072130 016207 0ustar00joyewheel000000 000000 Coordinate Grids

      Coordinate Grids

      DS9 can create and display coordinate grids as an overlay on an image. The Display Coordinate Grid Menu is used to display grids. A coordinate grid is composed of Grid Lines, Axes, Border, and Title. Axes include tick marks, title, and numbers. The appearance of the coordinate grid is specified by parameters. These parameters may be configured via the Coordinate Grid Parameters dialog box. In addition to the axes titles and the grid title, the following menus are available.

      Numeric Formats

      The user may specify custom numeric formats for either axes. The format specification can be empty (default) or a print function, based on the selected coordinate system:

      image
      physical
      detector
      amplifier
      wcs linear
      wcs equatorial

      The format specification string to be passed to the C "printf" function (e.g. "%%1.7G") in order to format a single coordinate value.

      The Format string supplied should contain one or more of the following characters. These may occur in any order, but the following is recommended for clarity:

      "": Indicates that a plus sign should be prefixed to positive values. By default, no plus sign is used.
      "z": Indicates that leading zeros should be prefixed to the value so that the first field is of constant width, as would be required in a fixed-width table (leading zeros are always prefixed to any fields that follow). By default, no leading zeros are added.
      "i": Use the standard ISO field separator (a colon) between fields. This is the default behaviour.
      "b": Use a blank to separate fields.
      "l": Use a letter ("h"/"d", "m" or "s" as appropriate) to separate fields.
      "g": Use a letter and symbols to separate fields ("h"/"d", "m" or "s", etc, as appropriate), but include escape sequences in the formatted value so that the Plot class will draw the separators as small super-scripts.
      "d": Include a degrees field. Expressing the angle purely in degrees is also the default if none of "h", "m", "s" or "t" are given.
      "h": Express the angle as a time and include an hours field (where 24 hours correspond to 360 degrees). Expressing the angle purely in hours is also the default if "t" is given without either "m" or "s".
      "m": Include a minutes field. By default this is not included.
      "s": Include a seconds field. By default this is not included. This request is ignored if "d" or "h" is given, unless a minutes field is also included.
      "t": Express the angle as a time (where 24 hours correspond to 360 degrees). This option is ignored if either "d" or "h" is given and is intended for use where the value is to be expressed purely in minutes and/or seconds of time (with no hours field). If "t" is given without "d", "h", "m" or "s" being present, then it is equivalent to "h".
      ".": Indicates that decimal places are to be given for the final field in the formatted string (whichever field this is). The "." should be followed immediately by an unsigned integer which gives the number of decimal places required, or by an asterisk. If an asterisk is supplied, a default number of decimal places is used which is based on the value of the Digits attribute.

      All of the above format specifiers are case-insensitive. If several characters make conflicting requests (e.g. if both "i" and "b" appear), then the character occurring last takes precedence, except that "d" and "h" always override "t".

      The default formats are d.3 for degrees and hms.1 / dms.1 / ldms.1 for sexagesimal.

      saods9/ds9/doc/ref/how.html000644 000765 000000 00000020242 12662677756 016117 0ustar00joyewheel000000 000000 How

      How it Works

      Table of Contents

      How DS9 Renders an Image
      Scales
      Smoothing
      Contours
      Large Files

      How DS9 renders an image

      Here is a short description on how DS9 decides to paint a pixel a color on the the screen, give an data value... you need a color scale, a contrast/bias pair for the colorscale, clip values for the data, a scale distribution, and finally, the value of the pixel in question.

      Step 1. Select a color scale. A color scale is defined as a number of colors (RGB triplets). The number of RGB triplets can vary from just a few to over 200. DS9 contains a number of predefined color scales (Gray, A, B, I8, ...) or the user may load his own color scale.

      Step 2. Apply a contrast/bias pair. This step takes the result of step 1 and creates a new array with the contrast/bias applied. The length of the new array will between 200 (for pseudocolor) and 4096 (for truecolor).

      Step 3. Calculate the data clip values (low/high data values). The min/max data values may be used or an algorithm may be used to determine the clip data values.

      Step 4. Apply the scale distribution. This involves taking the result of step 2, and creating yet another array, this time of size 16384, redistributing the colors, based on the scale algorithm selected (see Scales).

      Step 5. Based on your data clip values, and the value of the pixel you have, index into the result of step 4, and you have an index into lookup table (for pseudocolor) and an RGB pair (for truecolor and postscript).

      Scales

      The log function is defined as the following:

      log equation

      as x goes from 0 to 1. The user may specify an exponent a to change the distribution of colors within the colorbar. The default value of a is 1000. Typically, optical images respond well at 1000, IR images as low as 100, and high energy bin tables up to 10000. A value of 10000 closely matches the log function of SAOImage as defined as the following:

      SAOImage log equation

      The pow function is defined as the following:

      pow equation

      as x goes from 0 to 1. The user may specify an exponent a to change the distribution of colors within the colorbar. The default value of a is 1000.

      The sqrt scale function is defined as the following:

      sqrt equation

      as x goes from 0 to 1.

      The square scale function is defined as the following:

      square equation

      as x goes from 0 to 1.

      The asinh scale function is defined as the following:

      asinh

      as x goes from 0 to 1.

      The sinh scale function is defined as the following:

      sinh

      as x goes from 0 to 1.

      The histogram equalization scale function distributes colors based on the frequency of each data value.

      Smoothing

      The user may select one of three types of smoothing kernels. The parameter, r or kernel radius, is defined as the following:

      Boxcar function, where the width = 2r+1
      Tophat function, where the radius = r and the diameter of kernel is 2r+1
      Gaussian function, defined as:
      Gaussian Equation
      where the mean = 0 and sigma = r/2, and the diameter of kernel is 2r+1

      Contours

      The contour algorithm is from an unknown author and originally came from FV. The difference between the two modes are:

      block : the image is blocked down before the contour is generated
      smooth : the image is smoothed via a Gaussian kernel before the contour is generated.

      block mode is faster as the smoothing parameter increases. Inversely, smooth mode is much slower as the smoothing parameter increases.

      Large Files

      There are several factors that determine if DS9 will be able to load a large file.

      32 bit OS vs 64 bit OS : to address very large files, you may need to use an 64 bit OS with a 64bit version of DS9. 32bit apps can address up to 4Gb of address space. However, depending on the OS, this limit may be less. Linux for example, the limit appears to be ~3GB (the OS and shared libs eat up a lot of address space). Under 64bit Solaris, 32bit ds9 has a full 4Gb of space. MacOSX appears to have a limit ~3Gb. Under windows, ~2Gb.

      Large File Support: is the ability to sequence thru files larger than 4Gb. DS9 is compiled with LFS.

      File system: the OS file system must be able to support files larger than 4Gb. Most recent file systems fully support 4GB>.

      Memory Management: There are a number of memory management techniques supported in DS9 that will greatly affect the ability and speed of loading large files:

      $ ds9 foo.fits # uses mmap
      $ cat foo.fits | ds9 - # allocates memory
      $ xpaset -p ds9 file foo.fits # uses mmap
      $ xpaset -p ds9 fits foo.fits # allocates memory

      Memory Map (mmap) is very fast, limit is memory address space (see above). Allocate is very slow, limit is amount of physical memory + swap partition.

      Scanning Data: DS9 needs to determine the min and max data values to correctly display your image. For large files, such as Mosaics and Data Cubes,  this can take time. You have the option of using using the FITS keywords DATAMIN/MAX or IRAFMIN/MAX - great if present, bad because they are always wrong. Another option is to specify the low and high clip values via the command line or Scale dialogbox.


      saods9/ds9/doc/ref/img/000755 000765 000000 00000000000 13012655540 015161 5ustar00joyewheel000000 000000 saods9/ds9/doc/ref/index.html000644 000765 000000 00000007560 12071072130 016402 0ustar00joyewheel000000 000000 Reference Manual

      SAOImage DS9 Reference Manual

      DS9 is  the next version of the popular SAOtng display program. It is a Tk/Tcl application which utilizes the SAOtk widget set. It also incorporates the new X Public Access (XPA) mechanism to allow external processes to access and control its data, GUI functions, and algorithms. DS9  supports the direct display of FITS images and binary tables, multiple frame buffers, region cursor manipulation, many scale algorithms and colormaps, and easy communication with external analysis tasks. It is highly configurable and extensible to meet the evolving needs of the astronomical community.

      DS9 supports advanced features such as multiple frame buffers, mosaic images, tiling, blinking, geometric markers, colormap manipulation, scaling, arbitrary zoom, rotation, pan, and a variety of coordinate systems (including Image, Physical, Detector, and WCS). DS9 also supports FTP and HTTP access. The GUI for DS9 is user configurable.

      How It Works Backup and Restore File Formats
      Mouse and Keyboard Coordinate Grids Preferences
      Command Line Options Catalogs 3-D Frames
      XPA Access Points Colorbar
      Contours
      SAMP
      Printing IRAF Support
      Regions Analysis Binning
      saods9/ds9/doc/ref/iraf.html000644 000765 000000 00000016213 11426312317 016216 0ustar00joyewheel000000 000000 IRAF Support

      IRAF Support

      DS9 is a fully functional IRAF image display server. IRAF uses the IIS protocol to communicate with a valid image display server, such as DS9, ximtool, saoimage, and saotng. With DS9, no special scripts are needed. If you have one of the above currently working, DS9 works right out of the box. And DS9 now supports IRAF's new IIS image display protocol that supports up to 16 display frames.

      All native DS9 functions may be used with images load with IRAF display except for the Scale menu items. Values displayed may the the true values, if a linear scale is specified with the display command. Otherwise, the value is a scaled value. DS9 supports IRAF in all display visuals including Truecolor. Support full postscript printing of images loaded from IRAF is provided.

      Command Line Arguments

      As with ximtool, the follow command line arguments may be used to specify the communication parameters:

      fifo
      fifo_only
      inet_only
      port
      port_only
      unix
      unix_only

      The default parameters are:

      fifo /dev/imt1
      port 5137
      unix /tmp/.IMT%d

      Configuration

      An IRAF image server uses a configuration file to specify the number of available buffers and their sizes. What actually passes from IRAF is not the buffer size, but an index number into this file.

      So when an image server starts (DS9), it will attempt to locate this file as $HOME/.imtoolrc and /usr/local/lib/imtoolrc. If not found, it will look for shell environment variables IMTOOLRC and imtoolrc, that contains the name of the configuration file.

      If no configuration file is found, DS9 will assume the following default configuration:

      1 2 512 512 # imt1|imt512
      2 2 800 800 # imt2|imt800
      3 2 1024 1024 # imt3|imt1024
      4 1 1600 1600 # imt4|imt1600
      5 1 2048 2048 # imt5|imt2048
      6 1 4096 4096 # imt6|imt4096
      7 1 8192 8192 # imt7|imt8192
      8 1 1024 4096 # imt8|imt1x4
      9 2 1144 880 # imt9|imtfs full screen (1152x900 minus frame)
      10 2 1144 764 # imt10|imtfs35 full screen at 35mm film aspect ratio
      11 2 128 128 # imt11|imt128
      12 2 256 256 # imt12|imt256
      13 2 128 1056 # imt13|imttall128 tall & narrow for spectro.
      14 2 256 1056 # imt14|imttall256 tall & wider for spectro.
      15 2 1056 128 # imt15|imtwide128 wide & thin for spectro.
      16 2 1056 256 # imt16|imtwide256 wide & fatter for spectro.
      17 2 1008 648 # imt17|imtssy Solitaire fmt w/ imtool border
      18 2 1024 680 # imt18|imtssn Solitaire fmt w/out imtool border
      19 1 4096 1024 # imt19|imt4x1

      If on the other hand, IRAF assumes a different buffer size, the image will appear corrupted and DS9 may issue a number of error messages.

      Another problem is that this file must be in sync with dev$graphcap. If your system administrator has made changes to graphcap, they must also be implemented in imtoolrc.

      Here is a note from NOAO:

      The messages means that there is no /usr/local/lib/imtoolrc file on the machine. This is created as a symlink to dev$imtoolrc by the iraf install script but only if the /usr/local/lib dir already exists on the machine. The fix is the create the dir and rerun the install script or else make the link by hand. Users can also just copy dev$imtoolrc to $HOME/.imtoolrc and restart the server to also workaround it. Note that an existing .imtoolrc might define old frame buffer configs which might confuse things, so if the system file exists check for a private copy screwing things up.

      Windows DS9 and IRAF

      To direct image output from IRAF to DS9 running under windows, use the IMTDEV environment variable. For example, if the windows machine is named 'foo.bar.edu', define IMTDEV to the follow value before entering IRAF.

      $ setenv IMTDEV inet:5137:foo.bar.edu
      $ cl
      cl> display dev$pix

      Scale Menu Disabled

      When you display an image from IRAF into DS9, IRAF actually does the color scale distribution. In Display, use the ztrans and z1,z2zscale parameter to auto determine z1,z2. Here are the DISPLAY parameters in question: parameters to set the upper/lower bounds and distribution. You can also use the

      ztrans=[linear|log|none|user]
      z1=min
      z2=max
      zscale=[yes|no]

      What actually is sent from IRAF to DS9 is one byte per pixel, values 0-200, which already has applied both the upper and lower clipping bounds and the distribution. So this is why, the SCALE menu is disabled in DS9 when it receives a image from IRAF.

      MSCRED/MSCZERO

      DS9 now supports IRAF's new IIS image display protocol. However, there is one minor problem with the mscred task msczero. Before using msczero, issue the following command in the cl:

      cl> set disable_wcs_maps=""
      cl> flpr

      IMEXAMINE

      Due to the unique relationship between DS9 and IRAF, if you use the imexamine task, you can take advantage of a special feature of DS9. Instead of loading the image from IRAF with the display task, load the image directly into DS9. Then, from the cl prompt, invoke imexamine without a filename. IRAF will ask DS9 for the current filename and use it for analysis. This approach provides several advantages over previous methods. First, it will work with compound fits images such as mosaics, data cubes, and rgb images. Second, the image displays includes true image data and WCS information, not the approximated data from IRAF.

      saods9/ds9/doc/ref/keyboard.html000644 000765 000000 00000021645 12412610202 017070 0ustar00joyewheel000000 000000 Mouse and Keyboard

      Mouse and Keyboard

      Mouse Buttons

      The following table contains the event bindings for the mouse buttons.

      Mouse Button
      Description
      Button 1 Depends on current MODE, which may be selected by the EDIT menu option.
      In Region mode, create/edit/delete regions.
      In Crosshair mode, will move current crosshair.
      In Colorbar mode, will change contrast and bias of colormap.
      In Pan mode, will move or pan to clicked location.
      In Zoom mode, will zoom about clicked location.
      In Rotate mode, will rotate image about center.
      In Crop mode, will select 2-D crop region. For 3-D Shift-click will edit front clip plane, Control-click will edit back clip plane.
      In Catalog mode, will select catalog regions.
      In examine mode, will follow IRAF examine protocol.
      Button 2 Pan mode: will move or pan to clicked location. Behavior depends on the PAN preference settings.
      Button 3 Colorbar mode: will change the contrast and bias of the colormap.

      Greek and other special characters.

      The concept of a separate SYMBOL font is no longer implemented with the latest OS font and scripting support, especially with scalable anti-alias fonts such as Xft for Linux. Most newer fonts (if not all) now have greek characters as part of the font. The greek characters start at unicode \u0391 for 'A' and \u03b1 for 'a'. Each OS has a tool used to build and copy a string of characters. Then use the Edit:Paste menu of DS9 to insert the character string.

      Linux- Gnome: gucharmap
      Linux- KDE: kcharselect
      MacOSX: Character Viewer (Select Edit:Special Characters) Now click and drag the characters to a terminal window. Then select the string and select Edit:Copy.
      Windows: Character Map (from Start button, select All Programs, Accessories, System Tools and then Character Map)

      Keyboard Shortcuts

      The following table contains the list of keyboard shortcuts and the resulting action taken. 

      Key Stroke
      Description
      TAB Goto next frame
      Shift-TAB
      Goto previous frame
      DELETE Deletes selected regions
      c
      Print Mouse Coordinates and Pixel value.
      f
      Toggles Infobox freeze
      i
      Set include property for region
      e
      Set exclude property for region
      s
      Set source property for region
      b
      Set background property for region
      g
      Create a new group
      Shift-g Create a new group with default name
      + Goto next 3D Fits Slice
      - Goto previous 3D Fits Slice
      Up Arrow
      k
      Will move selected regions up one pixel.
      In Pointer mode, will move the cursor up one pixel.
      In Crosshair mode, will move the crosshair up one pixel.
      In Pan mode, will pan the image up one pixel.
      Right Arrow
      l
      Will move selected regions to the right one pixel.
      In Pointer mode, will move the cursor to the right one pixel.
      In Crosshair mode, will move the crosshair to the right one pixel.
      In Pan mode, will pan the image to the right one pixel.
      Left Arrow
      h
      Will move selected regions to the left one pixel.
      In Pointer mode, will move the cursor to the left one pixel.
      In Crosshair mode, will move the crosshair to the left one pixel.
      In Pan mode, will pan the image to the left one pixel.
      Down Arrow
      j
      Will move selected regions down one pixel.
      In Pointer mode, will move the cursor up down one pixel.
      In Crosshair mode, will also move the crosshair down one pixel.
      In Pan mode, will pan the image down one pixel.
      Shift-Drag In Pointer mode, will select all regions within the indicated region.
      In Crop mode, for 3D frame, will move front crop plane forward.
      Control-Drag In Poiner mode, on selected ANNULUS Regions, will create new radii.
      In Crop mode, for 3D frame, will move back crop plane backward.
      Command-`
      Rotate thur all open windows
      saods9/ds9/doc/ref/prefs.html000644 000765 000000 00000003160 12721346472 016421 0ustar00joyewheel000000 000000 Preferences

      Preferences

      Allows the user to customize the appearance and behavior of the GUI . Please note: some preferences take effect immediately, while others require DS9 to be restarted. Changes to the preferences can be saved by selecting the Save button. Use the Clear Preferences button to restore default settings.

      User preferences are stored in $HOME/.ds9.prf. DO NOT EDIT this file, since it will be deleted or overwritten by DS9. The file permissions must be group/world readonly.

      Users may have several different preference files. DS9 looks for a preference file with its own name. By default, if the application is named ds9, it will look for .ds9.prf. However, if the DS9 application is named foo, then DS9 will look for .foo.prf. In this manner, the user can have several predefined preference files that are activated by invoking DS9 with a different application names.

      saods9/ds9/doc/ref/print.html000644 000765 000000 00000004756 12744440116 016445 0ustar00joyewheel000000 000000 Printing

      Printing

      DS9 provides strong Postscript printing support. This is not a screen capture method, but a full level 1/2/3 postscript driver. The postscript images generated are detailed and accurate as possible, given the resolution of the data, and the printing resolution.

      Postscript Level

      Level 1-- The postscript generated consist of a color lookup table and image data, encoded in ASCIIHEX. All line graphics and text are postscript elements.

      Level 2-- The postscript generated consist of a color lookup table and image data, compressed with RLE, and encoded in ASCIIHEX85. All line graphics and text are postscript elements.

      Level 3-- The postscript generated consist of a color lookup table and image data, compressed with GZIP. All line graphics and text are postscript elements.

      Postscript Color Model

      DS9 supports three color models for level 2/3 postscript. All three color models generate approximately the same size files.

      RGB
      CMYK
      Grayscale

      Resolution

      Unlike graphic elements, image data must be sampled when encoded into postscript. The specified resolution parameter is in "pixels per inch" and is independent of the current screen resolution. A value of 96 maps to the current screen resolution. Any value over 96 will over sample the image, while any value under 96 will under sample. For high resolution printers and posters, the higher resolution sampling, the better. However, keep in mind the size of the postscript file grows with the square of the increase in resolution.

      saods9/ds9/doc/ref/region.html000644 000765 000000 00000074370 12764066270 016602 0ustar00joyewheel000000 000000 Regions

      Regions

      Regions provide a means for marking particular areas of an image for further analysis. Regions may also be used for presentation purposes. DS9 supports a number of region descriptions, each of which may be edited, moved, rotated, displayed, saved and loaded, via the GUI and XPA.

      Region Descriptions
      Region Properties
      Region File Format
      Composite Region
      Template Region
      External Region Files

      Region Descriptions

      Circle
      Usage: circle x y radius

      Ellipse
      Usage: ellipse x y radius radius angle

      Box
      Usage: box x y width height angle

      Polygon
      Usage: polygon x1 y1 x2 y2 x3 y3 ...

      Point
      Usage: point x y # point=[circle|box|diamond|cross|x|arrow|boxcircle] [size]
             circle point x y 

      Line
      Usage: line x1 y1 x2 y2 # line=[0|1] [0|1]

      Vector
      Usage: vector x1 y1 length angle # vector=[0|1]

      Text
      Usage: text x y # text={Your Text Here}
             text x y {Your Text Here}

      Ruler
      Usage: ruler x1 y1 x2 y2 # ruler=[pixels|degrees|arcmin|arcsec]

      Compass
      Usage: compass x1 y1 length # compass=<coordinate system> <north label> <east label> [0|1] [0|1]

      Projection
      Usage: projection x1 y1 x2 y2 width

      Annulus
      Usage: annulus x y inner outer n=#
             annulus x y r1 r2 r3...

      Ellipse Annulus
      Usage: ellipse x y r11 r12 r21 r22 n=# [angle]
             ellipse x y r11 r12 r21 r22 r31 r32 ... [angle]

      Box Annulus
      Usage: box x y w1 h1 w2 h2 [angle]
             box x y w1 h1 w2 h2 w3 h3 ... [angle]

      Panda
      Usage: panda x y startangle stopangle nangle inner outer nradius

      Epanda
      Usage: epanda x y startangle stopangle nangle inner outer nradius [angle]

      Bpanda
      Usage: bpanda x y startangle stopangle nangle inner outer nradius [angle]

      Composite
      Usage: # composite x y angle

      Region Properties

      Each region has a number of properties associated with the region, which indicates how the region is to be rendered or manipulated. Properties are defined for a region in the comment section of the region description. The exception is the Include/Exclude property. It is set via '+' or '-' preceding the region. In addition, the Line, Point, and Ruler regions have unique properties, not shared by others. Not all properties are available via the GUI or are applicable for all regions.

      Text

      All regions may have text associated with them. Use the text property to set the text. Strings may be quoted with " or ' or {}. For best results, use {}. Use textangle to specify angle in degress based on current coordinate system axes.

      Example: circle(100,100,20) # text={This message has both a " and ' in it} textangle=30

      Color

      The color property specifies the color of the region when rendered. DS9 recognizes many symbolic color names (i.e. "red", "green", "blue", "pink", etc) along with 3, 6, and 9 digit RGB hex values (#fff, #ffffff, #fffffffff)

      Example:
      circle(100,100,20) # color=green
      circle(100,100,20) # color=#48f

      Dash List

      Sets dashed line parameters. This does not render the region in dashed lines.

      Example: circle(100,100,20) # dashlist=8 3

      Width

      Sets the line width used to render the region.

      Example: circle(100,100,20) # width=2

      Font

      The font property specifies the font family, size, weight, and slant of any text to be displayed along with the region.

      Example: circle(100,100,20) # font="times 12 bold italic"

      Can Select

      The Select property specifies if the user is allowed to select (hence, edit) the region via the GUI. For Regions used for catalogs and such, it is desirable that the user is unable to edit, move, or delete the region.

      Example: circle(100,100,20) # select=1

      Can Highlite

      The Highlite property specifies if the edit handles become visible when the region is selected.
      Example: circle(100,100,20) # hightlite=1

      Dash

      Render region using dashed lines using current dashlist value.

      Example: circle(100,100,20) # dash=1

      Fixed in Size

      The Fixed in Size property specifies that the region does not change in size as the image magnification factor changes. This allows the user to build complex pointer type regions.

      Example: circle(100,100,20) # fixed=1

      Can Edit

      The Edit property specifies if the user is allowed to edit the region via the GUI.

      Example: circle(100,100,20) # edit=1

      Can Move

      The Move property specifies if the user is allowed to move the region via the GUI.

      Example: circle(100,100,20) # move=1

      Can Rotate

      The Rotate property specifies if the user is allowed to rotate the region via the GUI.

      Example: circle(100,100,20) # rotate=1

      Can Delete

      The Delete property specifies if the user is allowed to delete the region via the GUI.

      Example: circle(100,100,20) # delete=1

      Include/Exclude

      The Include/Exclude properties flags the region with a boolean NOT for later analysis. Use '+' for include (default), '-' for exclude.

      Example: -circle(100,100,20)

      Source/Background

      The Source/Background properties flag the region for use with other analysis applications. The default is source

      Example: circle(100,100,20) # source
               circle(200,200,10) # background

      Tag

      All regions may have zero or more tags associated with it, which may be used for grouping and searching.

      Example:  circle(100,100,20) # tag={Group 1} tag={Group 2}

      Line

      The line region may be rendered with arrows, one at each end. To indicate arrows, use the line property. A '1' indicates an arrow, '0' indicates no arrow.

      Example: line(100,100,200,200) # line=1 1

      Ruler

      The ruler region may display information in 'pixels', 'degrees', 'arcmin', or 'arcsec'. Use the ruler property to indicate which format to display distances in.

      Example: ruler(100,100,200,200) # ruler=arcmin

      Point

      Point regions have an associated type and size. Use the point property to set the point type.

      Example: point(100,100) # point=diamond 31

      Default Properties

      The default properties are:

      text={}
      color=green
      font="helvetica 10 normal roman"
      select=1
      edit=1
      move=1
      delete=1
      highlite=1
      include=1
      fixed=0

      Region File Format

      Syntax

      Region arguments may be separated with either a comma or space. Optional parentheses may be used a the beginning and end of a description.

      circle 100 100 10
      circle(100 100 10)
      circle(100,100,10)

      Comments

      All lines that begin with # are comments and will be ignored.

      # This is a comment

      Delimiter

      All lines may be delimited with either a new-line or semi-colon.

      circle 100 100 10
      ellipse 200 200 20 40 ; box 300 300 20 40

      Header

      A DS9 region file may start with the following optional header:

      # Region file format: DS9 version 4.0

      Global Properties

      Global properties affect all regions unless a local property is specified. The global keyword is first, followed by a list of keyword = value pairs. Multiple global property lines may be used within a region file.

      global color=green font="helvetica 10 normal roman" edit=1 move=1 delete=1 highlite=1 include=1 wcs=wcs

      Local Properties

      Local properties start with a # after a region description and only affect the region it is specified with.

      physical;circle(504,513,20) # color=red text={This is a Circle}

      Coordinate Systems

      For each region, it is important to specify the coordinate system used to interpret the region, i.e., to set the context in which the position and size values are interpreted. For this purpose, the following keywords are recognized:

      PHYSICAL                # pixel coords of original file using LTM/LTV
      IMAGE                   # pixel coords of current file
      FK4,B1950               # sky coordinate systems
      FK5,J2000               # sky coordinate systems

      ICRS                    # sky coordinate systems
      GALACTIC                # sky coordinate systems

      ECLIPTIC                # sky coordinate systems
      WCS                     # primary WCS
      WCSA                    # secondary WCS
      LINEAR                  # linear primary WCS

      Mosaic Images

      While some coordinate systems are unique across mosaic images, others coordinate systems, such as image, or physical , are valid on a per segment basis. In this case, use tile to specify which header to use in all coordinate conversions. The default is the first header, or tile 1.

      Example: tile 2;fk5;point(100,100)

      Multiple WCS

      If an image has multiple wcs's defined, use wcs# to specify which wcs to use for all wcs references. Valid values are wcs, wcsa, wcsb, wcsc... wcsz.
      Example: wcsa;linear;point(100,100) # point=diamond

      Specifying Positions and Sizes

      The arguments to region shapes can be floats or integers describing positions and sizes. They can be specified as pure numbers or using explicit formatting directives:

      position arguments

      [num]                   # context-dependent (see below)
      [num]d                  # degrees
      [num]r                  # radians
      [num]p                  # physical pixels
      [num]i                  # image pixels
      [num]:[num]:[num]       # hms for 'odd' position arguments
      [num]:[num]:[num]       # dms for 'even' position arguments
      [num]h[num]m[num]s      # explicit hms
      [num]d[num]m[num]s      # explicit dms

      size arguments

      [num]                   # context-dependent (see below)
      [num]"                  # arc sec
      [num]'                  # arc min
      [num]d                  # degrees
      [num]r                  # radians
      [num]p                  # physical pixels
      [num]i                  # image pixels

      When a "pure number" (i.e. one without a format directive such as 'd' for 'degrees') is specified, its interpretation depends on the context defined by the 'coordsys' keyword. In general, the rule is:

      All pure numbers have implied units corresponding to the current coordinate system.

      If no such system is explicitly specified, the default system is implicitly assumed to be PHYSICAL. In practice this means that for IMAGE and PHYSICAL systems, pure numbers are pixels. Otherwise, for all systems other than linear, pure numbers are degrees. For LINEAR systems, pure numbers are in the units of the linear system. This rule covers both positions and sizes. The input values to each shape can be specified in several coordinate systems including:

      IMAGE                   # pixel coords of current file

      LINEAR                  # linear wcs as defined in file

      FK4, B1950              # sky coordinate systems
      FK5, J2000
      GALACTIC
      ECLIPTIC
      ICRS
      PHYSICAL                # pixel coords of original file using LTM/LTV
      AMPLIFIER               # mosaic coords of original file using ATM/ATV
      DETECTOR                # mosaic coords of original file using DTM/DTV

      WCS,WCSA-WCSZ           # specify which WCS system to be used for
                              # linear and sky coordinate systems

      If no coordinate system is specified, PHYSICAL is assumed. PHYSICAL or a World Coordinate System such as J2000 is preferred and most general. The coordinate system specifier should appear at the beginning of the region description, on a separate line (in a file), or followed by a new-line or semicolon; e.g.,

      image; circle 100 100 10
      physical; ellipse 200 200 10 20
      fk5; point 30 50
      wcsa; fk4; point 202 47
      wcsp; linear; point 100 100

      The use of celestial input units automatically implies WORLD coordinates of the reference image. Thus, if the world coordinate system of the reference image is J2000, then

      circle 10:10:0 20:22:0 3'

      is equivalent to:

      j2000; circle 10:10:0 20:22:0 3'

      Note that by using units as described above, you may mix coordinate systems within a region specifier; e.g.,

      physical; circle 6500 9320 3'

      Note that, for regions which accept a rotation angle such as:

      ellipse (x, y, r1, r2, angle)
      box(x, y, w, h, angle)

      the angle is relative to the specified coordinate system. In particular, if the region is specified in WCS coordinates, the angle is related to the WCS system, not x/y image coordinate axis. For WCS systems with no rotation, this obviously is not an issue. However, some images do define an implicit rotation (e.g., by using a non-zero CROTA value in the WCS parameters) and for these images, the angle will be relative to the WCS axes. In such case, a region specification such as:

      fk4;ellipse(22:59:43.985, +58:45:26.92,320", 160", 30)

      will not, in general, be the same region specified as:

      physical;ellipse(465, 578, 40, 20, 30)

      even when positions and sizes match. The angle is relative to WCS axes in the first case, and relative to physical x,y axes in the second.

      Composite Region

      A Composite Region is a region which is a collection of other regions, which share common properties. A composite region is composed of a center point and a rotation angle, of which all its members are rendered in reference to. A composite region is defined by the # composite x y angle declaration followed by a number of regions who are or'd together. A composite region is manipulated as a single region within ds9. A composite region maybe created from the current selection of regions by selecting the Create Composite Region menu option. Likewise, a composite region can be dissolved by selecting the Dissolve Composite Region menu option.

      Template Region

      A Template Region is a special form of a region which is saved in a special wcs coordinate system WCS0. WCS0 indicates that the ra and dec values are relative to the current WCS location, not absolute. A template region can be loaded at any location into any fits image which contains a valid wcs. For example, a user may create a series of regions, which represent an instrument template. Then, by selecting the Save As Template menu option, a template region saved. The user may now load this templated into any other fits image which contains a valid WCS.

      External Region Files

      DS9 can read and write a number of region file formats. Not all formats support all the functionality of DS9 regions. Therefore, the user may loose some information when writing and then reading back from a region file in a format other that DS9. On output, the regions File Format menu or the XPA regions point is used specify the output coordinate system and format. On input, the menu or xpa point is used only for the X Y format. For all other formats, the input coordinate system is specified in the regions file itself.

      Funtools

      When using DS9 regions file in FUNTOOLS:
      LINE is ignored
      VECTOR is ignored
      PROJECTION is ignored
      SEGMENT is ignored
      TEXT is ignored
      RULER is ignored
      COMPASS is ignored
      CIAO
      When importing from CIAO into DS9:
      POINT is translated into BOX CIRCLE POINT

      ROTBOX is translated into BOX
      RECTANGLE is translated into BOX
      PANDA is translated as PIE
      SECTOR is ignored
      FIELD is ignored

      REGION is ignored

      When exporting from DS9 into CIAO:
      PANDA is translated into PIE
      LINE is ignored

      VECTOR is ignored
      PROJECTION is ignored
      SEGMENT is ignored
      TEXT is ignored
      RULER is ignored

      COMPASS is ignored
      ELLIPSE ANNULUS is ignored
      BOX ANNULUS is ignored
      EPANDA is ignored
      BPANDA is ignored
      SAOimage
      When importing from SAOIMAGE into DS9:
      POINT is translated into BOX CIRCLE POINT

      ROTBOX is translated into BOX

      When exporting from DS9 into SAOIMAGE:
      LINE is ignored
      VECTOR is ignored
      PROJECTION is ignored
      SEGMENT is ignored
      TEXT is ignored
      RULER is ignored

      COMPASS is ignored
      ELLIPSE ANNULUS is ignored
      BOX ANNULUS is ignored
      PANDA is ignored

      EPANDA is ignored
      BPANDA is ignored
      IRAF PROS
      When importing from PROS into DS9:
      POINT is translated into BOX CIRCLE POINT

      ROTBOX is translated into BOX

      When exporting from DS9 into SAOIMAGE:
      LINE is ignored
      VECTOR is ignored
      PROJECTION is ignored
      SEGMENT is ignored
      TEXT is ignored
      RULER is ignored

      COMPASS is ignored
      ELLIPSE ANNULUS is ignored
      BOX ANNULUS is ignored
      PANDA is ignored

      EPANDA is ignored
      BPANDA is ignored

      FITS REGION Binary Table
      When importing from FITS REGION into DS9:
      POINT is translated into BOX CIRCLE POINT

      ROTBOX is translated into BOX

      RECTANGLE is translated into BOX
      ROTRECTANGLE is translated into a BOX
      PIE is translated into PANDA
      ELLIPTANNULUS is translated into EPANDA
      SECTOR is ignored
      FIELD is ignored
      DIAMOND is ignored
      RHOMBUS
      is ignored
      ROTDIAMOND
      is ignored
      ROTRHOMBUS
      is ignored
       

      DS9 currently can not export into this format.

      X Y

      This format consists of a number of coordinate pairs, one per line. The coordinate format for both input and output is specified via the Save Regions Parameters menu or XPA regions point. The first two coordinates are read, the rest of the line is ignored. The comment character '#' may be used at the beginning of line and the line is ignored. This format is very useful for reading in coordinates from other external analysis programs, such as IRAF.

      Example: # this is a comment
      physical # this overrides the specified coordinate system
      300 300
      400 400 # this is a comment
      saods9/ds9/doc/ref/samp.html000644 000765 000000 00000455757 13000234177 016256 0ustar00joyewheel000000 000000 SAMP

      SAMP

      SAMP is a messaging protocol that enables astronomy software tools to interoperate and communicate. Broadly speaking, SAMP is an abstract framework for loosely-coupled, asynchronous, RPC-like and/or event-based communication, based on a central service providing multi-directional publish/subscribe message brokering. The message semantics are extensible and use structured but weakly-typed data. For more information on SAMP, please click here.

      The samp implementation for DS9 is based on the XPA model with 2 private calls:

      ds9.get
          Arguments
              cmd (string) required
              url (string) optional
          Returned value
              OK (samp.result map)
                  value (string) optional
                      url (string) optional
              ERROR (samp.error map)
                  samp.errortxt (string)
       
      ds9.set
          Arguments
              cmd (string) required
              url (string) optional
          Returned value
              OK
              ERROR (samp.error map)
                  samp.errortxt (string)

      ds9.set maybe called via notification, call and call/wait. ds9.get can only be called via call and call/wait. Most of the ds9.get calls return a value string, but a few will return a url instead.

      2mass
      3d
      about
      analysis
      array
      background
      backup
      bin
      blink
      block
      catalog
      cd
      cmap
      colorbar
      console
      contour
      crop
      crosshair
      cube
      cursor
      data
      dsssao
      dsseso
      dssstsci
      envi
      exit
      export
      file
      fits
      frame
      gif
      grid
      header
      height
      iconify
      iexam
      iis
      jpeg
      lock
      lower
      magnifier
      mask
      match
      mecube
      minmax
      mode
      mosaic
      mosaicimage
      movie
      multiframe
      nameserver
      nan
      nrrd
      nvss
      orient
      pagesetup
      pan
      pixeltable
      plot
      png
      prefs
      preserve
      psprint
      print
      quit
      raise
      regions
      restore
      rgb
      rgbarray
      rgbcube
      rgbimage
      rotate
      samp
      save
      saveimage
      scale
      shm
      sia
      single
      skyview
      sleep
      smooth
      source
      tcl
      threads
      tiff
      tile
      update
      url
      version
      view
      vla

      vlss
      vo
      wcs
      web
      width
      zscale
      zoom

      2mass

      Support for 2MASS Digital Sky Survey.

      Syntax:
      2mass []
            [<object>]
            [name <object>]
            [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
            [size <width> <height> degrees|arcmin|arcsec]
            [save yes|no]
            [frame new|current]
            [update frame|crosshair]
            [survey j|h|k]
            [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      2mass name
      2mass coord
      2mass size
      2mass save
      2mass frame
      2mass survey
      ds9.set(string cmd)
      2mass
      2mass m31
      2mass name m31
      2mass coord 00:42:44.404 +41:16:08.78 sexagesimal
      2mass size 60 60 arcmin
      2mass save yes
      2mass frame current
      2mass update frame
      2mass survey j
      2mass open
      2mass close

      3d

      Support for 3D frame.

      Syntax:
      3d []
         [view <az> <el>]
         [az <az>]
         [el <el>]
         [scale <scale>]
         [method mip|aip]

         [background none|azimuth|elevation]
       
        [border yes|no]
         [border color <color>]
         [highlite yes|no]
         [hightlite color <color>]
         [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      3d view
      3d az
      3d el
      3d scale
      3d method

      3d background
      3d border
      3d border color
      3d highlite
      3d highlite color
      ds9.set(string cmd)
      3d # create new 3D frame
      3d view 45 30
      3d az 45
      3d el 30
      3d scale 10
      3d method mip

      3d background azimuth
      3d border yes
      3d border color red
      3d highlite yes
      3d highlite color red
      3d open
      3d close

      about

      Get DS9 credits.

      Syntax:
      about
       
      Example:
      string value = ds9.get(string cmd)
      about

      align

      Controls the World Coordinate System alignment for the current frame.

      Syntax:
      align []
            [yes|no]
       
      Example:
      string value = ds9.get(string cmd)
      align
      ds9.set(string cmd)
      align yes

      analysis

      Control external analysis tasks. Tasks are numbered as they are loaded, starting with 0. Can also be used to display a message and display text in the text dialog window.

      Syntax:
      analysis [<task number>]
               [<filename>]
               [task <task number>|<task name>]
               [load <filename>]
               [clear]
               [clear][load <filename>]
               [message ok|okcancel|yesno <message>]
               [entry <message>]
               [text]

       

      Example:
      string value = ds9.get(string cmd)
      analysis
      analysis task
      analysis entry Please enter something
      analysis entry okcancel Please enter something
      ds9.set(string cmd)
      analysis 0 # invoke first analysis task
      analysis task 0
      analysis task foobar
      analysis task {foo bar}
      analysis my.ans
      analysis load my.ans
      analysis clear
      analysis clear load my.ans
      analysis message ok {This is a message}
      analysis text {this is text}

      ds9.set(string cmd, string url)
      analysis load
      analysis text

      array

      Load raw data array into current frame.

      Syntax:
      array [native|big|little]
      array [new|mask] [[xdim=<x>,ydim=<y>|dim=<dim>],zdim=<z>,bitpix=<b>,skip=<s>,endian=[little|big]]
       
      Example:
      string url = ds9.get(string cmd)
      array
      array little
      ds9.set(string command, string url)
      array foo.arr[dim=512,bitpix=-32,endian=little]
      array new foo.arr[dim=512,bitpix=
      -32,endian=little]
      array mask foo.arr[dim=512,bitpix=-32,endian=little]

      bg
      background

      Set image background color.

      Syntax:
      bg <color>
       
      Example:
      string url = ds9.get(string cmd)
      bg
      ds9.set(string cmd)
      bg red
      bg red

      backup

      Create a backup save set.

      Syntax:
      backup <filename>
       
      Example:
      ds9.set(string cmd)
      backup ds9.bck

      bin

      Controls binning factor, binning buffer size, and  binning function for binning FITS bin tables. The access point blocking is provided for backward compatibility.

      Syntax:
      bin [about <x> <y>]
          [about center]
          [buffersize <value>]
          [cols <x> <y>]
          [colsz <x> <y> <z>]
          [factor <value> [<vector>]]
          [depth <value>]
          [filter <string>]
          [function average|sum]
          [in]
          [out]
          [to fit]
          [match]
          [lock [yes|no]]
          [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      bin about
      bin buffersize
      bin cols
      bin factor
      bin depth
      bin filter
      bin function
      bin smooth
      bin smooth function
      bin smooth radius
      bin lock
      ds9.set(string cmd)
      bin about 4096 4096
      bin about center
      bin buffersize 512
      bin cols detx dety
      bin colsz detx dety time
      bin factor 4
      bin factor 4 2
      bin depth 10
      bin filter 'pha > 5'
      bin filter ''
      bin function sum
      bin in
      bin out
      bin to fit
      bin match
      bin lock yes
      bin open
      bin close

      blink

      Blink mode parameters. Interval is in seconds.

      Syntax:
      blink []
            [yes|no]
            [interval <value>]
       
      Example:
      string value = ds9.get(string cmd)
      blink
      blink interval
      ds9.set(string cmd)
      blink
      blink yes
      blink interval 1

      block

      Controls blocking parameters.

      Syntax:
      block
      [<value>]
            [<value> <value>]
            [to <value>]
            [to <value> <value>]
            [in]
            [out]
            [to fit]
            [match]
            [lock [yes|no]]
            [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      block
      block lock
      ds9.set(string cmd)
      block 4
      block 4 2
      block to 4
      block to 4 2
      block in
      block out
      block to fit
      block match
      block lock yes
      block open
      block close

      catalog
      cat

      Support for catalogs. The first three commands will create a new catalog search. All other commands operated on the last search created, unless indicated otherwise.

      Syntax:
      catalog []
              [ned|simbad|denis|skybot]
              [ascss|cmc|gsc1|gsc2|gsc3|ac|nomad|ppmx|sao|sdss5|sdss6|
      sdss7|sdss8|tycho|ua2|ub1|ucac2]
              [2mass|iras]
              [csc|xmm|rosat]
              [first|nvss]
              [chandralog|cfhtlog|esolog|stlog|xmmlog]
              [cds <catalogname>]
              [cds <catalogid>]

              [load <filename>]
              [import sb|tsv <filename>]

              [<ref>] [allcols]
              [<ref>] [allrows]
       
             [<ref>] [cancel]
              [<ref>] [clear]
              [<ref>] [close]
              [<ref>] [coordinate <ra> <dec> <coordsys>]
              [<ref>] [crosshair]
              [<ref>] [dec <col>]
              [<ref>] [edit yes|no]
              [<ref>] [export sb|tsv <filename>]
              [<ref>] [filter <string>]
              [<ref>] [filter load <filename>]

              [<ref>] [header]
              [<ref>] [hide]
              [<ref>] [location <code>]
              [<ref>] [match <ref> <ref>]
             
      [<ref>] [match error <value> degrees|arcmin|arcsec]
              [<ref>] [match function 1and2|1not2|2not1]
              [<ref>] [match return 1and2|1only|2only]
              [<ref>] [match unique yes|no]
              [<ref>] [maxrows <number>]
              [<ref>] [name <object>]
              [<ref>] [panto yes|no]
              [<ref>] [plot <xcol> <ycol> <xerrcol> <yerrcol>]
              [<ref>] [print]
              [<ref>] [psky <skyframe>]
              [<ref>] [psystem <coordsys>]
              [<ref>] [ra <col>]
              [<ref>] [regions]
              [<ref>] [retrieve]
              [<ref>] [samp]
              [<ref>] [samp broadcast]
              [<ref>] [samp send <application>]

              [<ref>] [save <filename>]
              [<ref>] [server cds|sao|cadc|adac|iucaa|bejing|cambridge|ukirt]
              [<ref>] [show]
              [<ref>] [size <width> <height> degrees|arcmin|arcsec]
              [<ref>] [sky <skyframe>]
              [<ref>] [skyformat <skyformat>]
              [<ref>] [sort <col> incr|decr]
              [<ref>] [symbol [#] condition|shape|color|text|font|fontsize|fontweight|fontslant <value>]
              [<ref>] [symbol [#] text|size|size2|units|angle <value>]
              [<ref>] [symbol shape {circle point}|{box point}|{diamond point}|
                      {cross point}|{x point}|{arrow point}|{boxcircle point}|
                      circle|ellipse|box|text]
              [<ref>] [symbol add| [#] remove]
              [<ref>] [symbol save|load <filename>]

              [<ref>] [system <coordsys>]
              [<ref>] [update]
              [<ref>] [x <col>]
              [<ref>] [y <col>]
       
      Example:
      string value = ds9.get(string cmd)
      catalog
      catalog header

      ds9.set(string cmd)
      catalog
      catalog 2mass
      catalog cds 2mass
      catalog cds
      {I/252}

      catalog load foo.xml
      catalog import tsv foo.tsv

      catalog allrows
      catalog allcols
      catalog cancel
      catalog clear
      catalog close
      catalog coordinate 202.48 47.21 fk5
      catalog crosshair
      catalog dec DEC
      catalog edit yes
      catalog export tsv bar.tsv
      catalog filter {$Jmag>10}
      catalog filter load foo.flt
      catalog header
      catalog hide
      catalog location 500
      catalog match error 2 arcsec
      catalog match function 1and2
      catalog match unique no
      catalog match return 1only
      catalog match 2mass csc
      catalog maxrows 2000
      catalog name m51
      catalog panto no
      catalog plot {$Jmag} {$Hmag} {$e_Jmag} {$e_Hmag}
      catalog print
      catalog psky fk5
      catalog psystem wcs
      catalog ra RA
      catalog regions
      catalog retrieve
      catalog samp broadcast
      catalog samp send aladin
      catalog save foo.xml
      catalog server sao
      catalog show
      catalog size 1 1 degrees
      catalog symbol condition {$Jmag>15}
      catalog symbol 2 shape {boxcircle point}
      catalog symbol color red
      catalog symbol font times
      catalog symbol fontsize 14
      catalog symbol fontweight bold
      catalog symbol fontslant italic
      catalog symbol add
      catalog symbol 2 remove
      catalog symbol load foo.sym
      catalog symbol save bar.sym

      catalog sky fk5
      catalog skyformat degrees
      catalog sort {Jmag} incr
      catalog system wcs
      catalog update
      catalog x RA
      catalog y DEC

      cd

      Sets/Returns the current working directory.

      Syntax:
      cd [<directory>]
       
      Example:
      string value = ds9.get(string cmd)
      cd
      ds9.set(string cmd)
      cd /home/mrbill

      cmap

      Controls the colormap for the current frame. The colormap name is not case sensitive. A valid contrast value is  from 0 to 10 and bias value from 0 to 1.

      Syntax:
      cmap [<colormap>]
           [file]
           [load <filename>]
           [save <filename>]
           [invert yes|no]
           [value <constrast> <bias>]
           [tag [load|save] <filename>]
           [tag delete]

           [match]
           [lock [yes|no]]

           [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      cmap
      cmap file
      cmap invert
      cmap value
      cmap lock
      ds9.set(string cmd)
      cmap Heat
      cmap load foo.sao
      cmap save bar.sao
      cmap invert yes
      cmap value 5 .5
      cmap tag load foo.tag
      cmap tag save foo.tag
      cmap tag delete

      cmap match
      cmap lock yes

      cmap open
      cmap close

      colorbar

      Controls colorbar parameters.

      Syntax:
      colorbar []
               [yes|no]
               [horizontal|vertical]
               [orientation horizontal|vertical]
               [numerics yes|no]
               [space value|distance]
               [font times|helvetica|courier]
               [fontsize <value>]
               [fontweight normal|bold]
               [fontslant roman|italic]
               [size]
               [ticks]
       
      Example:
      string value = ds9.get(string cmd)
      colorbar
      colorbar orientation
      colorbar numerics
      colorbar space
      colorbar font
      colorbar fontsize
      colorbar fontweight
      colorbar fontslant
      colorbar size
      colorbar ticks
      ds9.set(string cmd)
      colorbar yes
      colorbar vertical
      colorbar orientation vertical
      colorbar numerics yes
      colorbar space value
      colorbar font times
      colorbar fontsize 14
      colorbar fontwieght bold
      colorbar fontslant italic
      colorbar size 20
      colorbar ticks 11

      console

      Display tcl console window.

      Syntax:
      -console
       
      Example:
      ds9.set(string cmd)
      console

      contour

      Controls contours in the current frame.

      Syntax:
      contour []
              [yes|no]
              [<coordsys> [<skyframe>]]
              [clear]
              [generate]
              [load <filename> [<color> <width> yes|no]]
              [save <filename> <coordsys> <skyframe>]
              [convert]
              [loadlevels <filename>]
              [savelevels <filename>]
              [copy]
              [paste <coordsys> [<color> <width> yes|no]]
              [color <color>]
              [width <width>]
              [dash yes|no]
              [smooth <smooth>]
              [method block|smooth]
              [nlevels <number of levels>]
              [scale linear|log|pow|squared|sqrt|asinh|sinh|histequ]
              ]scale log exp <value>]
              [mode minmax|<value>|zscale|zmax]
              [limits <min> <max>]
              [levels <value value value...>]
              [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      contour
      contour color
      contour width
      contour dash
      contour smooth
      contour method
      contour nlevels
      contour scale
      contour log exp
      contour mode
      contour limits
      contour levels
      string url = ds9.get(string cmd)
      contour wcs fk5
      ds9.set(string cmd)
      contour
      contour yes
      contour clear
      contour generate
      contour load ds9.ctr
      contour load ds9.ctr red 2 yes
      contour save ds9.con wcs fk5
      contour convert
      contour loadlevels ds9.ctr
      contour savelevels ds9.lev
      contour copy
      contour paste wcs red 2 no
      contour color yellow
      contour width 2
      contour dash yes
      contour smooth 5
      contour method smooth
      contour nlevels 10
      contour scale sqrt
      contour log exp 1000
      contour mode zscale
      contour limits 1 100
      contour levels "{1 10 100 1000}"
      contour open
      contour close

      crop

      Set current image display area.

      Syntax:
      crop [<x> <y> <width> <height> [<coordsys>][<skyframe>][<skyformat>][degrees|arcmin|arcsec]
            [match <coordsys>]
            [lock <coordsys>|none]

       
      Example:
      string value = ds9.get(string cmd)
      crop # get crop in physical coords
      crop wcs galactic sexagesimal arcsec
      crop lock
      ds9.set(string cmd)
      crop 40 30 10 20 # set crop in physical coords
      crop +104:51:06.915 +68:33:40.761  28.144405 22.000204 wcs galactic arcsec
      crop match wcs
      crop lock wcs

      crosshair

      Controls the current position of the crosshair in the current frame. DS9 is placed in crosshair mode when the crosshair is set.

      Syntax:
      crosshair [<x> <y> <coordsys> [<skyframe>][<skyformat>]]
                [match <coordsys>]
                [lock <coordsys>|none]

       
      Example:
      string value = ds9.get(string cmd)
      crosshair # get crosshair in physical coords
      crosshair wcs fk4 sexagesimal # get crosshair in wcs coords
      crosshair lock
      ds9.set(string cmd)
      crosshair 100 100 physical # set crosshair in physical
      crosshair 345 58.8 wcs fk5 # set crosshair in wcs coords
      crosshair 23:01:00 +58:52:51 wcs fk5
      crosshair match wcs
      crosshair lock wcs

      cube

      Controls FITS cube.

      Syntax:
      cube [play|stop|next|prev|first|last]
           [<slice> [<coordsys>][<axis>]]
           [interval <numeric>]
           [axis <axis>]
           [match <coordsys>]
           [lock <coordsys>|none]

           [order 123|132|213|231|312|321]
           [axes lock [yes|no]]

           [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      cube
      cube interval
      cube lock
      cube order
      cube axes lock
      ds9.set(string cmd)
      cube play
      cube last
      cube 3
      cube 4.5 wcs 3
      cube interval 2
      cube axis 3
      cube match wcs
      cube lock wcs
      cube order 123
      cube axes lock yes
      cube open
      cube close

      cursor

      Move mouse pointer or crosshair in image pixels in the current frame. Note, this will move selected Regions also.

      Syntax:
      cursor [<x> <y>]
       
      Example:
      ds9.set(string cmd)
      cursor 10 10

      data

      Return an array of data values given a lower left corner and a width and height in specified coordinate system. The last argument of yes indicates to strip the coordinates from the output and just list the data values. The default is yes.

      Syntax:
      data [<coordsys> [<skyframe>] <x> <y> <width> <height> [yes|no]]
       
      Example:
      string url = ds9.get(string cmd)
      data image 450 520 3 3 yes
      data physical 899 1039 6 6 no
      data fk5 202.47091 47.196811 0.00016516669 0.00016516669 no
      data wcs fk5 13:29:53.018 +47:11:48.52 0.00016516669 0.00016516669 no

      dsssao
      dss

      Support for Digital Sky Survey at SAO.

      Syntax:
      dsssao []
             [<object>]
             [name <object>]
             [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
             [size <width> <height> degrees|arcmin|arcsec]
             [save yes|no]
             [frame new|current]
             [update frame|crosshair]
             [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      dsssao name
      dsssao coord
      dsssao size
      dsssao save
      dsssao frame
      ds9.set(string cmd)
      dsssao
      dsssao m31
      dsssao name m31
      dsssao coord 00:42:44.404 +41:16:08.78 sexagesimal
      dsssao size 60 60 arcmin
      dsssao save yes
      dsssao frame current
      dsssao update frame
      dsssao open
      dsssao close

      dsseso

      Support for Digital Sky Survey at ESO.

      Syntax:
      dsseso []
             [<object>]
             [name <object>]
             [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
             [size <width> <height> degrees|arcmin|arcsec]
             [save yes|no]
             [frame new|current]
             [update frame|crosshair]
             [survey DSS1|DSS2-red|DSS2-blue|DSS2-infrared]
             [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      dsseso name
      dsseso coord
      dsseso size
      dsseso save
      dsseso frame
      dsseso survey
      ds9.set(string cmd)
      dsseso
      dsseso m31
      dsseso name m31
      dsseso coord 00:42:44.404 +41:16:08.78 sexagesimal
      dsseso size 60 60 arcmin
      dsseso save yes
      dsseso frame current
      dsseso update frame
      dsseso survey DSS2-red
      dsseso open
      dsseso close

      dssstsci

      Support for Digital Sky Survey at STSCI.

      Syntax:
      dssstsci []
               [<object>]
               [name <object>]
               [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
               [size <width> <height> degrees|arcmin|arcsec]
               [save yes|no]
               [frame new|current]
               [update frame|crosshair]
               [survey poss2ukstu_red|poss2ukstu_ir|poss2ukstu_blue]
               [survey poss1_blue|poss1_red]
               [survey all|quickv|phase2_gsc2|phase2_gsc1]
               [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      dssstsci name
      dssstsci coord
      dssstsci size
      dssstsci save
      dssstsci frame
      dssstsci survey
      ds9.set(string cmd)
      dssstsci
      dssstsci m31
      dssstsci name m31
      dssstsci coord 00:42:44.404 +41:16:08.78 sexagesimal
      dssstsci size 60 60 arcmin
      dssstsci save yes
      dssstsci frame current
      dssstsci update frame
      dssstsci survey all
      dssstsci open
      dssstsci close

      envi

      Load an ENVI header and file. Optional parameter: array endian.

      Syntax:
      envi <header> [<filename>]
       
      Example:
      envi foo.hdr
      envi foo.hdr foo.bsq
      envi new foo.hdr foo.bsq

      exit
      quit

      Quits DS9.

      Syntax:
      exit
      quit
       
      Example:
      ds9.set(string cmd)
      exit

      export

      Export loaded image data of current frame in specified image format. Optional parameters: array endian, nrrd endian, jpeg quality (1-100) and tiff compression method.

      Syntax:
      export [array|nrrd|envi|gif|tiff|jpeg|png] <filename>
      export array <filename> [big|little|native]
      export nrrd <filename> [big|little|native]
      export envi <header> [<filename>] [big|little|native]
      export jpeg <filename> [1-100]
      export tiff <filename> [none|jpeg|packbits|deflate]
       
      Example:
      ds9.set (string cmd)
      export array foo.arr little

      export nrrd foo.nrrd little
      export envi foo.hdr little
      export envi foo.hdr foo.bsq little
      export tiff foo.tiff jpeg
      export jpeg foo.jpeg 75
      export png foo.png

      file

      Query currently loaded file information.

      Syntax:
      file
       
      Example:
      string value = ds9.get(string cmd)
      file

      fits

      Load a FITS image into the current frame or query the currently loaded image.

      Syntax:
      fits
      [new|mask|slice] [<filename>]
           [width|height|depth|bitpix|type]
           [size [wcs|wcsa...wcsz] [fk4|fk5|icrs|galactic|ecliptic] [degrees|arcmin|arcsecs]]
           [header [<ext>] [keyword <string>]]
           [image|table|slice]

       
      Example:

      string value = ds9.get(string cmd)
      fits
      fits width
      fits height
      fits depth
      fits bitpix

      fits type
      fits size
      fits size wcs fk5 arcmin
      fits header # primary
      fits header 2 # hdu 2
      fits header -2 # hdu 2 with inherit
      fits header keyword "'BITPIX'"
      fits header 1 keyword "'BITPIX'"

      fits image
      fits table

      fits slice
      ds9.set(string cmd, string url)

      fits foo.fits
      fits new foo.fits
      fits bar.fits[bin=detx,dety]
      fits slice foo.fits
      fits mask foo.fits
      fits
      fits new
      fits -[bin=detx,dety]
      fits slice
      fits mask

      Syntax:

      fits [size|width|height|depth|bitpix]
           [size [wcs|wcsa...wcsz] [fk4|fk5|icrs|galactic|ecliptic] [degrees|arcmin|arcsecs]]
           [type]
           [header [<ext>] [keyword <string>]]
           [image|table|resample] [gz]
           [new|mask][<options>]
           [new][slice <options>]
           [new][mecube <options>]
           [new|mask][mosaicimage [iraf|wcs|wcsa...wcsz|wfpc2] <options>]
           [new|mask][mosaic [iraf|wcs|wcsa...wcsz] <options>]
           [new][rgbcube <options>]
           [new][rgbimage <options>]
       
      Example:
      string value = ds9.get(string cmd)
      fits size
      fits width
      fits height
      fits depth
      fits bitpix
      fits size wcs fk5 arcmin
      fits type
      fits header keyword BITPIX
      fits header 1 keyword BITPIX
      string url = ds9.get(string cmd)
      fits
      fits image
      fits image gz
      fits table
      fits table gz
      fits resample
      fits resample gz
      fits header # primary
      fits header 2 # hdu 2
      fits header -2 # hdu 2 with inherit
      ds9.set(string cmd, string url)
      fits
      fits [2]
      fits new [bin=detx,dety]
      fits slice
      fits mecube
      fits mosaicimage iraf
      fits mosaicimage wcs
      fits mosaicimage wcsa
      fits mosaicimage wfpc2
      fits mosaic iraf
      fits mosaic wcs
      fits rgbcube
      fits rgbimage

      frame

      Controls frame functions. Frames may be created, deleted, reset, and centered. While return the current frame number. If you goto a frame that does not exists, it will be created. If the frame is hidden, it will be shown. The 'frameno' option is available for backward compatibility.

      Syntax:
      frame [center [#|all]]
            [clear [#|all]]
            [new [rgb|3d]]
            [delete [#|all]]
            [reset [#|all]]
            [refresh [#|all]]
            [hide [#|all]]
            [show [#|all]]
            [move first]
            [move back]
            [move forward]
            [move last]
            [first]
            [prev]
            [next]
            [last]
            [frameno #]
            [#]
            [match <coordsys>]
            [lock <coordsys>|none]
            [has [amplifier|datamin|datasec|detector|grid|iis|irafmin|physical|smooth]]
            [has contour [aux]]]
            [has fits [ |bin|cube|mosaic]]
            [has marker [highlite|paste|select|undo]]
            [has system <coordsys>]
            [has wcs [<wcssys>|equatorial <wcssys>|linear <wcssys>]]
       
      Example:
      string value = ds9.get(string cmd)
      frame # returns the id of the current frame
      frame frameno # returns the id of the current frame
      frame all # returns the id of all frames
      frame active # returns the id of all active frames
      frame lock
      frame has amplifier
      frame has datamin
      frame has datasec
      frame has detector
      frame has grid
      frame has iis
      frame has irafmin
      frame has physical
      frame has smooth
      frame has contour
      frame has contour aux
      frame has fits
      frame has fits bin
      frame has fits cube
      frame has fits mosaic
      frame has marker highlite
      frame has marker paste
      frame has marker select
      frame has marker undo
      frame has system physical
      frame has wcs wcsa
      frame has wcs equatorial wcsa
      frame has wcs linear wcsa
      ds9.set(string cmd)
      frame center # center current frame
      frame center 1 # center 'Frame1'
      frame center all # center all frames
      frame clear # clear current frame
      frame new # create new frame
      frame new rgb # create new rgb frame
      frame delete # delete current frame
      frame reset # reset current frame
      frame refresh # refresh current frame
      frame hide # hide current frame
      frame show 1 # show frame 'Frame1'
      frame move first # move frame to first in order
      frame move back # move frame back in order
      frame move forward # move frame forward in order
      frame move last # move frame to last in order
      frame first # goto first frame
      frame prev # goto prev frame
      frame next # goto next frame
      frame last # goto last frame
      frame frameno 4 # goto frame 'Frame4', create if needed
      frame 3 # goto frame 'Frame3', create if needed
      frame match wcs
      frame lock wcs

      gif

      Load GIF image into current frame.

      Syntax:
      gif [new|slice] [<filename>]
       
      Example:
      string value = ds9.get(string cmd)
      gif

      ds9.set(string cmd)
      gif foo.gif

      gif new foo.gif
      gif slice foo.gif
      gif

      gif new
      gif
      slice

      grid

      Controls coordinate grid. For grid numeric format syntax,  click here.

      Syntax:
      grid  []
            [yes|no]
            [type analysis|publication]
            [system <coordsys>]
            [sky <skyframe>]
            [skyformat <skyformat>]
            [grid yes|no]
            [grid color <color>]
            [grid width <value>]
            [grid style 0|1]
            [grid gap1 <value>]
            [grid gap2 <value>]
            [axes yes|no]
            [axes color <color>]
            [axes width <value>]
            [axes style 0|1]
            [axes type interior|exterior]
            [axes origin lll|llu|lul|luu|ull|ulu|uul|uuu]
            [format1 <format>]
            [format2 <format>]
            [tickmarks yes|no]
            [tickmarks color <color>]
            [tickmarks width <value>]
            [tickmarks style 0|1]
            [border yes|no]
            [border color <color>]
            [border width <value>]
            [border style 0|1]
            [numerics yes|no]
            [numerics font times|helvetica|courier]
            [numerics fontsize <value>]
            [numerics fontweight normal|bold]
            [numerics fontslant roman|italic]
            [numerics color <color>]
            [numerics gap1 <value>]
            [numerics gap2 <value>]
            [numerics type interior|exterior]
            [numerics vertical yes|no]
            [title yes|no]
            [title text <text>]
            [title def yes|no]
            [title gap <value>]
            [title font times|helvetica|courier]
            [title fontsize <value>]
            [title fontweight normal|bold]
            [title fontslant roman|italic]
            [title color <color>]
            [labels yes|no]
            [labels text1 <text>]
            [labels def1 yes|no]
            [labels gap1 <value>]
            [labels text2 <text>]
            [labels def2 yes|no]
            [labels gap2 <value>]
            [labels font times|helvetica|courier]
            [labels fontsize <value>]
            [labels fontweight normal|bold]
            [labels fontslant roman|italic]
            [labels color <color>]
            [reset]
            [load <filename>]
            [save <filename>]
            [open|close]

      Example:
      string value = ds9.get(string cmd)
      grid
      grid type
      grid system
      grid sky
      grid skyformat
      grid grid
      grid grid color
      grid grid width
      grid grid style
      grid grid gap1
      grid grid gap2
      grid axes
      grid axes color
      grid axes width
      grid axes style
      grid axes type
      grid axes origin
      grid format1
      grid format2
      grid tickmarks
      grid tickmarks color
      grid tickmarks width
      grid tickmarks style
      grid border
      grid border color
      grid border width
      grid border style
      grid numerics
      grid numerics font
      grid numerics fontsize
      grid numerics fontweight
      grid numerics fontslant
      grid numerics color
      grid numerics gap1
      grid numerics gap2
      grid numerics type
      grid numerics vertical
      grid title
      grid title text
      grid title def
      grid title gap
      grid title font
      grid title fontsize
      grid title fontweight
      grid title fontslant
      grid title color
      grid labels
      grid labels text1
      grid labels def1
      grid labels gap1
      grid labels text2
      grid labels def2
      grid labels gap2
      grid labels font
      grid labels fontsize
      grid labels fontweight
      grid labels fontslant
      grid labels color
      ds9.set(string cmd)
      grid
      grid yes
      grid type analysis
      grid system wcs
      grid sky fk5
      grid skyformat degrees
      grid grid yes
      grid grid color red
      grid grid width 2
      grid grid style 1
      grid grid gap1 10
      grid grid gap2 10
      grid axes yes
      grid axes color red
      grid axes width 2
      grid axes style 1
      grid axes type exterior
      grid axes origin lll
      grid format1 d.2
      grid format2 d.2
      grid tickmarks yes
      grid tickmarks color red
      grid tickmarks width 2
      grid tickmarks style 1
      grid border yes
      grid border color red
      grid border width 2
      grid border style 1
      grid numerics yes
      grid numerics font courier
      grid numerics fontsize 12
      grid numerics fontweight bold
      grid numerics fontslant italic
      grid numerics color red
      grid numerics gap1 10
      grid numerics gap2 10
      grid numerics type exterior
      grid numerics vertical yes
      grid title yes
      grid title text {Hello World}
      grid title def yes
      grid title gap 10
      grid title fontsize 12
      grid title font courier
      grid title fontweight bold
      grid title fontslant italic
      grid title color red
      grid labels yes
      grid labels text1 {Hello World}
      grid labels def1 yes
      grid labels gap1 10
      grid labels text2 {Hello World}
      grid labels def2 yes
      grid labels gap2 10
      grid labels font courier
      grid labels fontsize 12
      grid labels fontweight bold
      grid labels fontslant italic
      grid labels color red
      grid reset
      grid load foo.grd
      grid save foo.grd
      grid open
      grid close

      header

      Display current fits header dialog. Optional extension number maybe specified. Please note, this differs from samp fits header.

      Syntax:
      header [<ext>]
             [close [<ext>]]
             [save [<ext>] <filename>]
       
      Example:
      string value = ds9.get(string cmd)
      header
      header 2
      header close

      height

      Set the height of the image display window.

      Syntax:
      height [<value>]
       
      Example:
      string value = ds9.get(string cmd)
      height
      ds9.set(string cmd)
      height 512

      iconify

      Toggles iconification.

      Syntax:
      iconify []
              [yes|no]
       
      Example:
      string value = ds9.get(string cmd)
      iconify
      ds9.set(string cmd)
      iconify
      iconify yes

      iexam

      Interactive examine function. A blinking cursor will indicate to the user to click on a point on an image. The specified information will be returned at that time. The default event is button. In the last form, the following macros will be expanded if present: $width, $height, $depth, $bitpix, $filename, $regions, $filename[$regions], $env, $pan, $value, $x, $y, $z. See Analysis Macros for more information.

      Syntax:
      iexam []
            [[]|button|key|any] coordinate <coordsys> [<skyframe>] [<skyformat>]
            [[]|button|key|any] data [width][height]
            [[]|button|key|any] <macro string>]
       

      Example:
      string value = ds9.get(string cmd)
      iexam
      iexam coordinate image
      iexam key coordinate image # return coordinate and key event
      iexam coordinate wcs fk5 degrees
      iexam coordinate wcs galactic sexagesimal
      iexam coordinate fk5
      iexam data # return data value
      iexam key data # return data value and key event
      iexam data 3 3 # return all data in 3x3 box about selected point
      iexam {Click at $x,$y in file $filename}

      iis

      Set/Get IIS Filename. Optional mosaic number maybe supplied.

      Syntax:
      iis [filename <filename> [#]]
       
      Example:
      string value = ds9.get(string cmd)
      iis filename
      iis filename 4
      ds9.set(string cmd)
      iis filename foo.fits
      iis filename bar.fits 4

      jpeg

      Load JPEG image into current frame. Optional parameters: jpeg quality (1-100)

      Syntax:
      jpeg [new|slice] [<filename>] [1-100]
       
      Example:
      string value = ds9.get(string cmd)
      jpeg

      jpeg 100
      ds9.set(string cmd)
      jpeg foo.jpeg

      jpeg new foo.jpeg
      jpeg slice foo.jpeg
      jpeg

      jpeg new
      jpeg
      slice

      lock

      Lock all other frames to the current frame.

      Syntax:
      lock [frame <coordsys>|none]
          
      [crosshair <coordsys>|none]
           [crop <coordsys>|none]
           [slice <coordsys>|none]
           [bin [yes|no]]
           [axes [yes|no]]
           [scale [yes|no]]
           [scalelimits [yes|no]]
           [colorbar [yes|no]]
           [block [yes|no]]
           [smooth [yes|no]]

       
      Example:
      string value = ds9.get(string cmd)
      lock frame
      lock crosshair
      lock crop
      lock slice
      lock bin
      lock axes
      lock scale
      lock scalelimits
      lock color
      bar
      lock block
      lock smooth
      ds9.set(string cmd)
      lock frame wcs
      lock crosshair wcs
      lock crop wcs
      lock slice wcs
      lock bin yes
      lock axes yes
      lock scale yes
      lock scalelimits yes
      lock colorbar yes
      lock block yes
      lock smooth yes

      lower

      Lower in the window stacking order.

      Syntax:
      lower
       
      Example:
      ds9.set(string cmd)
      lower

      magnifier

      Controls the magnifier settings.

      Syntax:
      magnifier [color <color>]
                [zoom <value>]
                [cursor yes|no]
                [region yes|no]
       
      Example:
      string value = ds9.get(string cmd)
      magnifier color
      magnifier zoom
      magnifier cursor
      magnifier region
      ds9.set(string cmd)
      magnifier color yellow
      magnifier zoom 2
      magnifier cursor no
      magnifier region no

      mask

      Controls mask parameters.

      Syntax:
      mask [color <color>]
           [mark 1|0]
           [transparency <value>]
           [clear]
           [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      mask color
      mask mark
      mask transparency
      ds9.set(string cmd)
      mask color red
      mask mark 0
      mask transparency 50
      mask clear
      mask open
      mask close

      match

      Match all other frames to the current frame.

      Syntax:
      match [frame <coordsys>]
           
      [crosshair <coordsys>]
            [crop <coordsys>]
            [slice <coordsys>]
            [bin]
            [axes]
            [scale]
            [scalelimits]
            [colorbar]
            [block]
            [smooth]

       
      Example:
      ds9.set(string cmd)
      match frame wcs
      match crosshair wcs
      match crop wcs
      match slice wcs
      match bin
      match axes
      match scale
      match scalelimits
      match color
      bar
      match block
      match smooth

      mecube

      Load FITS multiple extension file as data cube.

      Syntax:
      mecube [new] [<filename>]
       
      Example:

      string value = ds9.get(string cmd)
      mecube
      ds9.set(string cmd)
      mecube foo.fits

      mecube new foo.fits
      mecube

      mecube new

      minmax

      This is how DS9 determines  the min and max data values from the data. SCAN will scan all data.

      Syntax:
      minmax [scan|sample|datamin|irafmin]
             [mode scan|sample|datamin|irafmin]
             [interval #]
       
      Example:
      string value = ds9.get(string cmd)
      minmax mode
      minmax sample
      ds9.set(string cmd)
      minmax scan
      minmax mode scan
      minmax interval 100

      mode

      Controls the first mouse button mode.

      Syntax:
      mode [none|region|crosshair|colorbar|pan|zoom|rotate|catalog|examine]
       
      Example:
      string value = ds9.get(string cmd)
      mode
      ds9.set(string cmd)
      mode crosshair

      mosaic

      Load FITS mosaic segment into current frame.

      Syntax:
      mosaic [wcs|wcsa...wcsz|iraf] [new|mask] [<filename>]
       
      Example:
      string value = ds9.get(string cmd)
      mosaic

      ds9.set(string cmd)
      mosaic foo.fits

      mosaic wcs foo.fits
      mosaic wcs new foo.fits
      mosaic wcs mask foo.fits
      mosaic

      mosaic wcs
      mosaic wcs
      new
      mosaic wcs
      mask

      mosaicimage

      Load FITS mosaic image into current frame.

      Syntax:
      mosaicimage [wcs|wcsa...wcsz|iraf|wfpc2] [new|mask] [<filename>]
       
      Example:
      string value = ds9.get(string cmd)
      mosaicimage

      ds9.set(string cmd)
      mosaicimage foo.fits

      mosaicimage wcs foo.fits
      mosaicimage wcs new foo.fits
      mosaicimage wcs mask foo.fits
      mosaicimage

      mosaicimage wcs
      mosaicimage wcs new

      mosaicimage wcs mask

      movie

      Create mpeg1 movie from snap shots of the DS9 window. A slice movie cycles though all slices of a cube. A frame movie cycles through all active frames. A 3d movie cycles through specified viewing angles. The default is frame. Optional parameters for 3d: number of frames, azimuth from/to, elevation from/to, slice from/to, oscillate/repeat times.

      Syntax:
      movie
      [slice|frame|3d] <filename>
      movie 3d <filename> [number|azfrom|azto|elfrom|elto|slfrom|slto|oscillate|repeat <#>]
       
      Example:
      ds9.set(string cmd)
      movie slice ds9.mpg
      movie 3d ds9.mpg number 10 azfrom -60 azto 60 oscillate 1

      multiframe

      Load FITS multiple extension file as multiple images.

      Syntax:
      multiframe [<filename>]
       
      Example:
      ds9.set(string cmd)
      multiframe foo.fits

      multiframe

      nameserver

      Support Name Server functions. Coordinates are in fk5.

      Syntax:
      nameserver [<object>]
                 [name <object>]
                 [server ned-sao|ned-eso|simbad-sao|simbad-eso]
                 [skyformat degrees|sexagesimal]
                 [pan]
                 [crosshair]
                 [close]
       
      Example:
      string value = ds9.get(string cmd)
      nameserver
      nameserver server
      nameserver skyformat
      nameserver m31
      ds9.set(string cmd)
      nameserver m31
      nameserver name m31
      nameserver server ned-sao
      nameserver skyformat sexagesimal
      nameserver pan
      nameserver crosshair
      nameserver open
      nameserver close

      nan

      Set image not-a-number color.

      Syntax:
      nan <color>
       
      Example:
      string value = ds9.get(string cmd)
      nan

      ds9.set(string cmd)
      nan red

      nrrd

      Load an NRRD (Nearly Raw Raster Data) file. Optional parameter: array endian.

      Syntax:
      nrrd [<filename>] [little|big]
       
      Example:
      string value = ds9.get(string cmd)
      nrrd

      nrrd big
      ds9.set(string cmd, string url)
      nrrd foo.nrrd

      nrrd new foo.nrrd
      nrrd mask foo.nrrd
      nrrd

      nrrd new
      nrrd mask

      nvss

      Support for NRAO VLA Sky Survey.

      Syntax:
      nvss []
           [<object>]
           [name <object>]
           [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
           [size <width> <height> degrees|arcmin|arcsec]
           [save yes|no]
           [frame new|current]
           [update frame|crosshair]
           [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      nvss name
      nvss coord
      nvss size
      nvss save
      nvss frame
      ds9.set(string cmd)
      nvss
      nvss m31
      nvss name m31
      nvss coord 00:42:44.404 +41:16:08.78 sexagesimal
      nvss size 60 60 arcmin
      nvss save yes
      nvss frame current
      nvss update frame
      nvss open
      nvss close

      orient

      Controls the orientation of the current frame.

      Syntax:
      orient [none|x|y|xy]
             [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      orient
      ds9.set(string cmd)
      orient xy
      orient open
      orient close

      pagesetup

      Controls Page Setup options.

      Syntax:
      pagesetup [orient portrait|landscape]

                [scale <numeric>]
                [size letter|legal|tabloid|poster|a4]
       
      Example:
      string value = ds9.get(string cmd)
      pagesetup orient
      pagesetup scale
      pagesetup size
      ds9.set(string cmd)
      pagesetup orient portrait
      pagesetup scale 50
      pagesetup size poster

      pan

      Controls the current image cursor location for the current frame.

      Syntax:
      pan [<x> <y> <coordsys> [<skyframe>][<skyformat>]] # relative
          [to <x> <y> <coordsys> [<skyframe>][<skyformat>] # absolute
          [open|close]
          [close]
       
      Example:
      string value = ds9.get(string cmd)
      pan # get current image coords
      pan wcs fk4 sexagesimal # get current wcs coords
      ds9.set(string cmd)
      pan 200 200 image # pan relative
      pan to 400 400 physical # pan to physical coords
      pan to 13:29:55 47:11:50 wcs fk5 # pan to wcs coords
      pan open
      pan close

      pixeltable

      Display/Hide the pixel table.

      Syntax:
      pixeltable []
                 [yes|open]
                 [no|close]
       
      Example:
      string url = ds9.get(string cmd)
      pixeltable
      ds9.set(string cmd)
      pixeltable
      pixeltable yes
      pixeltable open
      pixeltable close

      plot

      Display and configure data plots. All plot commands take an optional second command, the plot name. If no plot name is specified, the last plot created is assumed. Plot data is assumed to be a pair of coordinates, with optional error values. The follow are valid data descriptions:

      xy        x and y coordinates
      xyex      x,y coordinates with x errors
      xyey      x,y coordinates with y errors
      xyexey    x,y coordinates with  x and y errors

      To create a new plot, use the plot new command.

      Syntax:
      # create new empty plot window
      plot
      plot [bar|scatter]
           [new [name <plotname>] [line|bar|scatter]]
           [new [name <plotname>] [line|bar|scatter] <title> <xaxis label> <yaxis label>
      xy|xyex|xyey|xyexey]

      # create new plot with data
      plot [new [name <plotname>]
      [line|bar|scatter] stdin] # title, title xaxis, title yaxis, dimension on line 1
           [new [name <plotname>] [line|bar|scatter] <title> <xaxis label> <yaxis label> xy|xyex|xyey|xyexey]

      # load dataset into an existing plot
      plot [<plotname>] [data xy|xyex|xyey|xyexey]

      plot [<plotname>] load <filename> [xy|xyex|xyey|xyexey]
           [<plotname>] save <filename>
           [<plotname>] clear
           [<plotname>] duplicate
           [<plotname>] stats
          
      [<plotname>] list
          
      [<plotname>] loadconfig <filename>
           [<plotname>] saveconfig <filename>
           [<plotname>] pagesetup orient [portrait|landscape]
           [<plotname>] pagesetup size [letter|legal|tabloid|poster|a4]

           [<plotname>] print
           [<plotname>] print destination [printer|file]
           [<plotname>] print command <command>
           [<plotname>] print filename <filename>
           [<plotname>] print color [rgb|gray]
          
      [<plotname>] close

      plot
      [<plotname>] mode [pointer|zoom]

      # configure graph
      plot [<plotname>] axis [x|y] grid [yes|no]
           [<plotname>] axis [x|y] log [yes|no]
           [<plotname>] axis [x|y] flip [yes|no]
           [<plotname>] axis [x|y] auto [yes|no]
           [<plotname>] axis [x|y] min <value>
           [<plotname>] axis [x|y] max <value>

           [<plotname>] axis [x|y] format <string>
          
      [<plotname>] legend [yes|no]
           [<plotname>] legend position [right|left|top|bottom]

           [<plotname>] font [title|labels|numbers] font [times|helvetica|courier]
           [<plotname>] font
      [title|labels|numbers] size <value>
           [<plotname>] font
      [title|labels|numbers] weight [normal|bold]
           [<plotname>] font
      [title|labels|numbers] slant [roman|italic]
           [<plotname>] title <string>
           [<plotname>] title [x|y] <string>
           [<plotname>] barmode [normal|stacked|aligned|overlap]

      # configure current dataset
      plot [<plotname>] show [yes|no]
          
      [<plotname>] shape [circle|square|diamond|plus|splus|scross|triangle|arrow]
           [<plotname>] shape fill [yes|no]
           [<plotname>] shape color <value>
           [<plotname>] smooth [step|linear|cubic|quadratic|catrom]
           [<plotname>] color <value>
           [<plotname>] width <value>
           [<plotname>] dash [yes|no]
           [<plotname>] error [yes|no]
           [<plotname>] error color <value>
           [<plotname>] color <value>
           [<plotname>] error width <value>
           [<plotname>] name <string>

      # select current dataset
      plot [<plotname>] select <value>
       

      Example:
      # return all plotnames
      string value = ds9.get(string cmd)
      plot

      # create new empty plot window
      ds9.set(string cmd)
      plot
      plot scatter
      plot new
      plot new bar
      plot new name foo
      plot new name foo scatter

      # create new plot with data
      ds9.set(string cmd, string url)
      plot new stdin
      plot new name foo stdin
      plot new "{The Title}" "{X}" "{Y}" xy
      plot new name foo "{The Title}" "{X}" "{Y}" xy

      # load additional dataset into an existing plot
      ds9.set(string cmd, string url)
      plot data xy # plot additional data
      plot foo data xy # plot additional data

      string value = ds9.get(string cmd)
      plot stats
      plot list
      ds9.set(string cmd)
      plot load foo.dat xy # load new dataset with dimension xy
      plot save bar.dat # save current dataset
      plot clear # clear all datasets
      plot duplicate # duplicate current dataset
      plot stats
      plot list
      plot loadconfig foo.plt # load plot configuration
      plot saveconfig bar.plt # save current plot configuration
      plot pagesetup orient portrait
      plot pagesetup size letter
      plot print
      plot print destination file
      plot print command "lp"
      plot print filename "foo.ps"
      plot print color rgb
      plot close # close current plot

      string value = ds9.get(string cmd)
      plot mode
      ds9.set(string cmd)
      plot mode pointer


      # configure plot
      string value = ds9.get(string cmd)
      plot axis x grid
      plot axis x log
      plot axis x flip
      plot axis x auto
      plot axis x min
      plot axis x max
      plot axis x format
      plot legend
      plot legend position
      plot font numbers font
      plot font numbers size
      plot font numbers weight
      plot font numbers slant
      plot title
      plot title x
      plot barmode
      ds9.set(string cmd)
      plot axis x grid yes
      plot axis x log yes

      plot axis x flip yes
      plot axis x auto no
      plot axis x min 0
      plot axis x max 100
      plot axis x format {%f}
      plot legend yes # show legend
      plot legend position left
      plot font numbers font times
      plot font numbers size 12
      plot font numbers weight bold
      plot font numbers slant italic
      plot title {The Title}
      plot title x {X Axis}
      plot barmode aligned

      # configure current dataset
      string value = ds9.get(string cmd)
      plot show
      plot shape

      plot shape fill
      plot shape color
      plot smooth
      plot color
      plot width
      plot dash
      plot error
      plot error color
      plot error width
      plot name
      ds9.set(string cmd)
      plot show yes
      plot shape circle
      plot shape fill no
      plot shape color cyan
      plot smooth step
      plot color red
      plot width 2
      plot dash yes
      plot error yes
      plot error color red

      plot error width 2
      plot name {My Data}

      # select current dataset
      string value = ds9.get(string cmd)
      plot select
      ds9.set(string cmd)
      plot select 2


      png

      Load PNG image into current frame.

      Syntax:
      png [new|slice] [<filename>]
       
      Example:
      string value = ds9.get(string cmd)
      png

      ds9.set(string cmd)
      png foo.png

      png new foo.png
      png slice foo.png
      png

      png new
      png
      slice

      prefs

      Controls various preference settings.

      Syntax:
      prefs [clear]
            [irafalign yes|no]
       
      Example:
      string value = ds9.get(string cmd)
      prefs irafalign
      ds9.set(string cmd)
      prefs clear
      prefs irafalign

      preserve

      Preserve the follow attributes while loading a new image.

      Syntax:
      preserve [pan yes|no]
               [regions yes|no]
       
      Example:
      string value = ds9.get(string cmd)
      preserve pan
      preserve regions
      ds9.set(string cmd)
      preserve pan yes
      preserve regions yes

      psprint

      Invokes postscript printing. Please see print for further details.

      print

      Controls printing. Use print option to set printing options.

      Syntax:
      print [destination printer|file]
            [command <command>]
            [filename <filename>]
            [color rgb|cmyk|gray]
            [level 1|2]
            [resolution 53|72|75|150|300|600]
       
      Example:
      string value = ds9.get(string cmd)
      print destination
      print command
      print filename
      print color
      print level
      print resolution
      ds9.set(string cmd)
      print
      print destination file
      print command '{gv -}'
      print filename foo.ps
      print color cmyk
      print level 2
      print resolution 75

      raise

      Raise in the window stacking order.

      Syntax:
      raise
       
      Example:
      ds9.set(string cmd)
      raise

      regions

      Controls regions in the current frame.

      Syntax:
      regions [<filename>]
              [load [all] <filename>]
              [save <filename>]
              [list [close]]
              [epsilon <integer>]
              [show yes|no]
              [showtext yes|no]
              [centroid]
              [centroid auto yes|no]
              [centroid radius <value>|iteration <value>]
              [getinfo]
              [move front]
              [move back]
              [select all]
              [select none]
              [select invert]
              [delete all]
              [delete select]
              [format ds9|xml|ciao|saotng|saoimage|pros|xy]
              [system image|physical|wcs|wcsa...wcsz]
              [sky fk4|fk5|icrs|galactic|ecliptic]
              [skyformat degrees|sexagesimal]
              [strip yes|no]
              [shape <shape>]
              [color &ltcolor>]
              [width <width>]
              [fixed|edit|rotate|delete yes|no]
              [include|exclude|source|background]

              [delim [nl|<char>]]
              [command <marker command>]
              [composite]
              [dissolve]
              [template <filename>]
              [template <filename> at <ra> <dec> <coordsys> <skyframe>]
              [savetemplate <filename>]
              [groups]
              [group new]
              [group <tag> new]
              [group <tag> update]
              [group <tag> select]
              [group <tag> color <color>]
              [group <tag> copy]
              [group <tag> delete]
              [group <tag> cut]
              [group <tag> font <font>]
              [group <tag> move <int> <int>]
              [group <tag> movefront]
              [group <tag> moveback]
              [group <tag> property <property> yes|no]
              [copy]
              [cut]
              [paste image|physical|wcs|wcsa...wcsz]
              [undo]
              [include|exclude|source|background|selected]
              [-format ds9|ciao|saotng|saoimage|pros|xy]
              [-system image|physical|wcs|wcsa...wcsz]
              [-sky fk4|fk5|icrs|galactic|ecliptic]
              [-skyformat degrees|sexagesimal]
              [-delim [nl|<char>]]
              [-prop select|edit|move|rotate|delete|fixed|include|source 1|0]
              [-group <tag>]
              [-strip yes|no]
              [-wcs yes|no]
       
      Example:
      string url = ds9.get(string cmd)
      regions
      regions -format ds9 -system wcs -sky fk5 -skyformat sexagesimal -prop edit 1 -group foo
      string value = ds9.get(string cmd)
      regions epsilon
      regions show
      regions showtext
      regions centroid
      regions centroid auto
      regions centroid radius
      regions centroid iteration
      regions selected
      regions format
      regions system
      regions sky
      regions skyformat
      regions strip
      regions shape
      regions color
      regions width
      regions delim
      regions source
      regions background
      regions include
      regions exclude
      regions selected
      regions groups
      ds9.set(string cmd, string url)
      regions -format xy -system wcs -sky fk5
      regions -format ds9
      ds9.set(string cmd)
      regions foo.reg
      regions -format ciao bar.reg # load as ciao format
      regions foo.fits # FITS regions files do not need a format specification
      regions load foo.reg # load foo.reg into current frame
      regions load all foo.reg # load foo.reg into all frames
      regions load *.reg# expand *.reg and load into current frame
      regions load all *.reg # expand *.reg and load into all frames
      regions save foo.reg
      regions list
      regions list close
      regions epsilon 5
      regions show yes
      regions showtext no
      regions centroid
      regions centroid auto yes
      regions centroid radius 10
      regions centroid iteration 20
      regions getinfo
      regions move back
      regions move front
      regions select all
      regions select none
      regions select invert
      regions delete all
      regions delete select
      regions format ds9
      regions system wcs
      regions sky fk5
      regions skyformat degrees
      regions delim nl
      regions strip yes
      regions shape ellipse
      regions color red
      regions width 3
      regions edit yes
      regions include
      regions command "circle 100 100 20 # color=red"
      regions composite
      regions dissolve
      regions template foo.tpl
      regions template foo.tpl at 13:29:55.92 +47:12:48.02 fk5
      regions savetemplate foo.tpl
      regions group new
      regions group foo new
      regions group foo update
      regions group foo select
      regions group foo color red
      regions group foo copy
      regions group foo delete
      regions group foo cut
      regions group foo font 'times 14 bold'
      regions group foo move 100 100
      regions group foo movefront
      regions group foo moveback
      regions group foo property delete no
      regions copy
      regions cut
      regions paste wcs
      regions undo

      restore

      Restore DS9 to a previous state from a backup save set.

      Syntax:
      restore <filename>
       
      Example:
      restore ds9.bck

      rgb

      Create RGB frame and control RGB frame parameters.

      Syntax:
      rgb  []
           [red|green|blue]
           [channel [red|green|blue]]
           [view [red|green|blue] [yes|no]]
           [system <coordsys>]
           [lock wcs|crop|slice|bin|scale|scalelimits|colorbar|block|smooth [yes|no]]
           [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      rgb channel
      rgb lock wcs
      rgb lock crop
      rgb lock slice
      rgb lock bin
      rgb lock scale
      rgb lock scalelimits
      rgb lock colorbar
      rgb lock block
      rgb lock smooth
      rgb system
      rgb view red
      rgb view green
      rgb view blue
      ds9.set(string cmd)
      rgb # create new rgb frame
      rgb red # set current channel to red
      rgb channel red # set current channel to red
      rgb view blue no # turn off blue channel
      rgb system wcs # set rgb coordinate system
      rgb lock wcs yes
      rgb lock crop yes
      rgb lock slice yes
      rgb lock bin yes
      rgb lock scale yes
      rgb lock scalelimits yes
      rgb lock colorbar yes
      rgb lock block yes
      rgb lock smooth yes
      rgb open
      rgb close

      rgbarray

      Load raw data array cube into rgb frame.

      Syntax:
      rgbarray [native|big|little]
      rgbarray [new|mask] [[xdim=<x>,ydim=<y>|dim=<dim>],[zdim=3],bitpix=<b>,skip=<s>,endian=[little|big]]
       
      Example:
      string value = ds9.get(string cmd)
      rgbarray
      rgbarray little
      ds9.set(string cmd)
      rgbarray foo.arr[dim=512,zdim=3,bitpix=-32,endian=little]
      rgbarray new foo.arr[dim=512,zdim=3,bitpix=
      -32,endian=little]

      rgbcube

      Load FITS rgbcube into rgb frame.

      Syntax:
      rgbcube [new] [<filename>]
       
      Example:
      string value = ds9.get(string cmd)
      rgbcube
      ds9.set(string cmd)
      rgbcube foo.fits

      rgbcube new foo.fits
      rgbcube

      rgbcube new

      rgbimage

      Load FITS rgbimage into rgb frame.

      Syntax:
      rgbimage [new] [<filename>]
       
      Example:
      string value = ds9.get(string cmd)
      rgbimage
      ds9.set(string cmd)
      rgbimage foo.fits

      rgbimage new foo.fits
      rgbimage

      rgbimage new

      rotate

      Controls the rotation angle (in degrees) of the current frame.

      Syntax:
      rotate [<value>]
             [to <value>]
             [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      rotate
      ds9.set(string cmd)
      rotate 45
      rotate to 30
      rotate open
      rotate close

      samp

      Configure SAMP protocol.

      Syntax:
      samp [no|disconnect]
           [broadcast [image|table]]
           [send [image|table] <application>]
       
      Example:
      ds9.set(string cmd)
      samp no
      samp disconnect
      samp broadcast image
      samp send image aladin

      save

      Save loaded image data of current frame as FITS.

      Syntax:
      save
      [fits|rgbimage|rgbcube|mecube|mosaic|mosaicimage] <filename> [image|table|slice]
       
      Example:
      ds9.set(string cmd)
      save foo.fits

      save fits foo.fits image
      save fits foo.fits table
      save fits foo.fits slice

      save rgbimage foo.fits
      save rgbcube foo.fits
      save mecube foo.fits
      save mosaic foo.fits
      save mosaicimage foo.fits

      saveimage

      Create a snap shot of the current DS9 window and save in specified image format. If no format specified, the file name extension is used to determine the output format. Optional parameters: jpeg quality (1-100) and tiff compression method.

      Syntax:
      saveimage
      [fits|eps|gif|tiff|jpeg|png] <filename>
      saveimage <filename>.jpeg [1-100]
      saveimage <filename>.tiff [none|jpeg|packbits|deflate]
       
      Example:
      ds9.set(string cmd)
      saveimage ds9.tiff
      saveimage jpeg ds9.jpeg 75

      scale

      Controls the limits and color scale distribution.

      Syntax:
      scale [linear|log|pow|sqrt|squared|asinh|sinh|histequ]
            [log exp <value>]
            [datasec yes|no]
            [limits <minvalue> <maxvalue>]
            [mode minmax|<value>|zscale|zmax]
            [scope local|global]
            [match]
            [match limits]
            [lock [yes|no]]
            [lock limits [yes|no]]
            [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      scale
      scale log exp
      scale datasec
      scale limits
      scale mode
      scale scope
      scale lock
      scale lock limits
      ds9.set(string cmd)
      scale linear
      scale log exp 100
      scale datasec yes
      scale histequ
      scale limits 1 100
      scale mode zscale
      scale mode 99.5
      scale scope local
      scale match
      scale match limits
      scale lock yes
      scale lock limits yes
      scale open
      scale close

      shm

      Load a shared memory segment into the current frame.

      Syntax:
      shm [<key> [<filename>]]
          [key <key> [<filename>]]
          [shmid <id> [<filename>]]
          [fits [key|shmid] <id> [<filename>]]
          [mosaicimage [iraf|wcs|wcsa...wcsz|wfpc2] [key|shmid] <id> [<filename>]]
          [mosaicimagenext [wcs|wcsa...wcsz] [key|shmid] <id> [<filename>]]
          [mosaic [iraf|wcs|wcsa...wcsz] [key|shmid] <id> [<filename>]]
          [rgbcube [key|shmid] <id> [<filename>]
          [rgbimage [key|shmid] <id> [<filename>]]
          [rgbarray [key|shmid] <id> [xdim=<x>,ydim=<y>|dim=<dim>,zdim=3],bitpix=<b>,[skip=<s>]]
          [array [key|shmid] <id> [xdim=<x>,ydim=<y>|dim=<dim>],bitpix=<b>,[skip=<s>]]
          [startload|finishload]
       
      Example:
      string value = ds9.get(string cmd)
      shm
      ds9.set(string cmd)
      shm 102
      shm key 102
      shm shmid 102 foo
      shm fits key 100 foo
      shm mosaicimage iraf key 100 foo
      shm mosaicimage wcs key 100 foo
      shm mosaicimage wcsa key 100 foo
      shm mosaicimage wfpc2 key 100 foo
      shm mosaicimagenext wcs key 100 foo
      shm mosaic iraf key 100 foo
      shm mosaic wcs key 100 foo
      shm rgbcube key 100 foo
      shm rgbimage key 100 foo
      shm rgbarray key 100 [dim=200,zdim=3,bitpix=-32]
      shm array shmid 102 [dim=32,bitpix=-32]
      shm startload # start a multiple load sequence without updating the display
      shm finishload # finish multiple load sequence

      sia

      Support for VO Simple Image Access protocol. The first command will create a new search. All other commands operated on the last search created, unless indicated otherwise.

      Syntax:
      sia
      [2mass|akari|astrowise|cadc|cxc|mast|sdss|skyview|tgssadr]

              [<ref>] [cancel]
              [<ref>] [clear]
              [<ref>] [close]
              [<ref>] [coordinate <ra> <dec> <coordsys>]
              [<ref>] [crosshair]
              [<ref>] [export sb|tsv <filename>]
              [<ref>] [name <object>]
              [<ref>] [print]
              [<ref>] [retrieve]
              [<ref>] [save <filename>]
              [<ref>] [size <width> <height> degrees|arcmin|arcsec]
              [<ref>] [sky <skyframe>]
              [<ref>] [skyformat <skyformat>]
              [<ref>] [system <coordsys>]
              [<ref>] [update]
       
      Example:
      string value = ds9.get(string cmd)
      sia

      ds9.set(string cmd)
      sia
      2mass
      sia
      cancel
      sia
      clear
      sia
      close
      sia
      coordinate 202.48 47.21 fk5
      sia
      crosshair
      sia
      export tsv bar.tsv
      sia
      name m51
      sia
      print
      sia retrieve
      sia
      save foo.xml
      sia
      size 1 1 degrees
      sia sky fk5
      sia skyformat degrees
      sia
      system wcs
      sia
      update

      single

      Select Single Display mode

      Syntax:
      single
       
      Example:
      string value = ds9.get(string cmd)
      single
      ds9.set(string cmd)
      single

      skyview

      Support for SkyView image server at HEASARC.

      Syntax:
      skyview []
              [<object>]
              [name <object>]
              [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
              [size <width> <height> degrees|arcmin|arcsec]
              [pixels <width> <height>]
              [save yes|no]
              [frame new|current]
              [update frame|crosshair]
              [survey <survey>]
              [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      skyview name
      skyview coord
      skyview size
      skyview pixels
      skyview save
      skyview frame
      skyview survey
      ds9.set(string cmd)
      skyview
      skyview m31
      skyview name m31
      skyview coord 00:42:44.404 +41:16:08.78 sexagesimal
      skyview size 60 60 arcmin
      skyview pixels 600 600
      skyview save yes
      skyview frame current
      skyview update frame
      skyview survey sdssi
      skyview open
      skyview close

      sleep

      Delays execution for specified number of seconds. Default is 1 second.

      Syntax:
      sleep [#]
       
      Example:
      ds9.set(string cmd)
      sleep
      sleep 2

      smooth

      Smooth current image or set smooth parameters.

      Syntax:
      smooth []
             [yes|no]
             [function boxcar|tophat|gaussian]
             [radius <int>]
             [open|close]
             [match]
             [lock [yes|no]]
       
      Example:
      string value = ds9.get(string cmd)
      smooth
      smooth function
      smooth radius
      smooth lock
      ds9.set(string cmd)
      smooth
      smooth yes
      smooth function tophat
      smooth radius 4
      smooth open
      smooth close
      smooth match
      smooth lock yes

      source

      Source TCL code from a file.

      Syntax:
      source [filename]
       
      Example:
      ds9.set(string cmd)
      source foo.tcl

      tcl

      Execute one TCL command.

      Syntax:
      tcl <tcl command>
       
      Example:
      ds9.set(string cmd)
      tcl puts "Hello, World"

      threads

      Set number of process threads for functions which are multi-threaded.

      Syntax:
      threads #
       
      Example:
      string value = ds9.get(string cmd)
      threads
      ds9.set(string cmd)
      threads 8

      tiff

      Load TIFF image into current frame. Optional parameters: tiff compression method.

      Syntax:
      tiff [new|slice] [<filename>] [none|jpeg|packbits|deflate]
       
      Example:
      string value = ds9.get(string cmd)
      tiff

      tiff jpeg
      ds9.set(string cmd)
      tiff foo.tiff
      tiff new foo.tiff
      tiff slice foo.tiff

      tiff
      tiff new
      tiff slice

      tile

      Controls the tile display mode.

      Syntax:
      tile []
           [yes|no]
           [mode grid|column|row]
           [grid]
           [grid mode automatic|manual]
           [grid direction x|y]
           [grid layout <col> <row>]
           [grid gap <pixels>]
           [row]
           [column]
       
      Example:
      string value = ds9.get(string cmd)
      tile
      tile mode
      tile grid mode
      tile grid direction
      tile grid layout
      tile grid gap
      ds9.set(string cmd)
      tile
      tile yes
      tile mode row
      tile grid
      tile grid mode manual
      tile grid direction x
      tile grid layout 5 5
      tile grid gap 10
      tile row
      tile column

      update

      Updates the current frame or region of frame. In the second form, the first argument is the number of the fits HDU (starting with 1) and the remaining args are a bounding box in IMAGE coordinates. By default, the screen is updated the next available idle cycle. However, you may force an immediate update by specifying the NOW option.

      Syntax:
      update []
             [# x1 y1 x2 y2]
             [now]
             [now # x1 y1 x2 y2]
       
      Example:
      ds9.set(string cmd)
      update
      update 1 100 100 300 400
      update now
      update now 1 100 100 300 400

      url

      Load FITS from URL into the current frame

      Syntax:
      url <url>
       
      Example:
      ds9.set(string cmd)
      url http://foo.bar.edu/foo.fits

      version

      Returns the current version of DS9.

      Syntax:
      version
       
      Example:
      string value = ds9.get(string cmd)
      version

      view

      Controls the GUI.

      Syntax:
      view  [layout horizontal|vertical]
            [keyvalue <string>]
            [info yes|no]
            [panner yes|no]
            [magnifier yes|no]
            [buttons yes|no]
            [colorbar yes|no]
            [colorbar horizontal|vertical]
            [colorbar numerics yes|no]
            [graph horizontal|vertical yes|no]
            [filename yes|no[
            [object yes|no]
            [keyword yes|no]
            [minmax yes|no]
            [lowhigh yes|no]
            [units yes|no]
            [image|physical|wcs|wcsa...wcsz yes|no]
            [frame yes|no]
            [red yes|no]
            [green yes|no]
            [blue yes|no]
       
      Example:
      string value = ds9.get(string cmd)
      view layout
      view keyvalue
      view info
      view panner
      view magnifier
      view buttons
      view colorbar
      view graph horizontal
      view filename
      view object
      view keyword
      view minmax
      view lowhigh
      view units
      view image
      view wcsa
      view frame
      view red
      ds9.set(string cmd)
      view layout vertical
      view keyvalue BITPIX
      view info yes
      view panner yes
      view magnifier yes
      view buttons yes
      view colorbar yes
      view graph horizontal yes
      view filename yes
      view object yes
      view keyword yes
      view minmax yes
      view lowhigh yes
      view units yes
      view wcsa yes
      view frame yes
      view red yes
      view green yes
      view blue yes

      vla

      Support for VLA Sky Survey.

      Syntax:
      vla []
            [<object>]
            [name <object>]
            [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
            [size <width> <height> degrees|arcmin|arcsec]
            [save yes|no]
            [frame new|current]
            [update frame|crosshair]
            [survey first|stripe82]
            [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      vla name
      vla coord
      vla size
      vla save
      vla frame
      vla survey
      ds9.set(string cmd)
      vla
      vla m31
      vla name m31
      vla coord 00:42:44.404 +41:16:08.78 sexagesimal
      vla size 60 60 arcmin
      vla save yes
      vla frame current
      vla update frame
      vla survey stripe82
      vla open
      vla close

      vlss

      Support for NRAO VLSS Sky Survey.

      Syntax:
      vlss []
           [<object>]
           [name <object>]
           [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
           [size <width> <height> degrees|arcmin|arcsec]
           [save yes|no]
           [frame new|current]
           [update frame|crosshair]
           [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      vlss name
      vlss coord
      vlss size
      vlss save
      vlss frame
      ds9.set(string cmd)
      vlss
      vlss m31
      vlss name m31
      vlss coord 00:42:44.404 +41:16:08.78 sexagesimal
      vlss size 60 60 arcmin
      vlss save yes
      vlss frame current
      vlss update frame
      vlss open
      vlss close

      vo

      Invoke an connection to a Virtual Observatory site.

      Syntax:
      vo [method xpa|mime]
         [server <url>]
         [internal yes|no]
         [delay #]
         [<url>]
         [connect <url>]
         [disconnect <url>]
         [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      vo
      vo method
      vo server
      vo internal
      vo delay
      vo connect
      ds9.set(string cmd)
      vo method xpa
      vo server "http://foo.bar.edu/list.txt"
      vo internal yes
      vo delay 15
      vo chandra-ed
      vo connect chandra-ed
      vo disconnect chandra-ed
      vo open
      vo close

      wcs

      Controls the World Coordinate System for the current frame. If the wcs system, skyframe, or skyformat is modified, the info panel, compass, grid, and alignment will be modified accordingly. Also, using this access point, a new WCS specification can be loaded and used by the current image regardless of the WCS that was contained in the image file. WCS specification can be sent to DS9 as an ASCII file . Please see WCS for more information.

      Syntax:
      wcs [[system] wcs|wcsa...wcsz]
          [[sky] fk4|fk5|icrs|galactic|ecliptic]
          [[skyformat] degrees|sexagesimal]
          [align yes|no]
          [reset [#]]
          [replace [#] <filename>]
          [append [#] <filename>]
          [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      wcs
      wcs system
      wcs sky
      wcs skyformat
      wcs align
      ds9.set(string cmd)
      wcs wcs
      wcs system wcs
      wcs fk5
      wcs sky fk5
      wcs sexagesimal
      wcs skyformat sexagesimal
      wcs align yes
      wcs reset
      wcs reset 3
      wcs replace foo.wcs
      wcs replace 3 foo.wcs
      wcs append foo.wcs
      wcs append 3 foo.wcs
      ds9.set(string cmd, string url)
      wcs replace
      wcs append
      wcs open
      wcs close

      web

      Display specified URL in the web display.

      Syntax:
      web [new|<webname>] [<url>]
          [<webname>] [click back|forward|stop|reload|#]
          [<webname>] [clear]
          [<webname>] [close]
       
      Example:
      string value = ds9.get(string cmd)
      web
      ds9.set(string cmd)
      web www.cnn.com
      web new www.cnn.com
      web hvweb www.apple.com
      web click back
      web click 2
      web clear
      web close

      width

      Set the width of the image display window.

      Syntax:
      width [<value>]
       
      Example:
      string value = ds9.get(string cmd)
      width
      ds9.set(string cmd)
      width 512

      zscale

      Set Scale Limits based  on the IRAF algorithm.

      Syntax:
      zscale []
             [contrast]
             [sample]
             [line]
       
      Example:
      string value = ds9.get(string cmd)
      zscale contrast
      zscale sample
      zscale line
      ds9.set(string cmd)
      zscale
      zscale contrast .25
      zscale sample 600
      zscale line 120

      zoom

      Controls the current zoom value for the current frame.

      Syntax:
      zoom [<value>]
           [<value> <value>]
           [to <value>]
           [to <value> <value>]
           [in]
           [out]
           [to fit]
           [open|close]
       
      Example:
      string value = ds9.get(string cmd)
      zoom
      ds9.set(string cmd)
      zoom 2
      zoom 2 4
      zoom to 4
      zoom to 2 4
      zoom in
      zoom out
      zoom to fit
      zoom open
      zoom close
      saods9/ds9/doc/ref/vo.html000644 000765 000000 00000006320 11426327731 015725 0ustar00joyewheel000000 000000 Virtual Observatory

      Virtual Observatory Reference

      Summary

      Use the Web proxy connection if your firewall does not allow your computer to connect directly to external computers. In this case, you also must use DS9's internal browser.

      Details

      When you click on one of the Virtual Observatory servers in the VO list, DS9 will attempt to connect to that server and (if the internal Web display is enabled) display its Web page. The square box to the left of the server name turns yellow while the connection is being established and then green to signal success.

      A direct connection is fast and flexible. Among other things, it allows you to perform analysis on your own local data (the VO server will retrieve the image from DS9) and also allows you to use an external browser to load images.

      Some system managers configure their firewall explicitly to prevent computers in their care from making a direct connection to an external host. Instead, they only allow external access through a Web proxy
      server (such as SOCKS). If you are using a computer behind a restricted firewall of this sort, then DS9 will not be able to connect directly to a VO server. The yellow box will not turn green and eventually DS9 will display an error message.

      In this case, you can choose to have DS9 communicate with the VO servers through your Web proxy server. DS9 will use your proxy to send its commands and retrieve its data and analysis results, rather than doing this directly. Note that the following restrictions apply:

      The transfer of data is slower.
      You must use the internal Web browser for loading images, etc.
      You cannot perform analysis on local data.
      There is a (large but finite) restriction on the number of annuli, and number of polygon points you can specify in a region, as well as the total number of regions allowed.

      If your computer and firewall have been configured to require use of a Web proxy server, you will have to tell DS9 about this server. Click the Configure Web Proxy button and type the relevant information into the boxes. (Your systems administrator will be able to tell you the details.) At this point, you should be able to connect to a VO server successfully. Please let us know if you have problems!

      A final note: you may, of course, choose to use the Web proxy even if your computer and firewall are configured to allow direct connections. In this case, there is no need to configure the proxy server.

      saods9/ds9/doc/ref/xpa.html000644 000765 000000 00000475014 13000234177 016072 0ustar00joyewheel000000 000000 XPA Access Points

      XPA Access Points

      The XPA messaging system provides seamless communication between DS9 and other Unix programs, including X programs, Perl, S-Lang, and Tcl/Tk. It also provides an easy way for users to communicate with DS9 by executing XPA client commands in the shell or by utilizing such commands in scripts. Because XPA works both at the programming level and the shell level, it is a powerful tool for unifying any analysis environment.

      2mass
      3d
      about
      align
      analysis
      array
      background
      backup
      bin
      blink
      block
      catalog
      cd
      cmap
      colorbar
      console
      contour
      crop
      crosshair
      cube
      cursor
      data
      dsssao
      dsseso
      dssstsci
      envi
      exit
      export
      file
      fits
      frame
      gif
      grid
      header
      height
      iconify
      iexam
      iis
      jpeg
      lock
      lower
      magnifier
      mask
      match
      mecube
      minmax
      mode
      mosaic
      mosaicimage
      movie
      multiframe
      nameserver
      nrrd
      nvss
      orient
      pagesetup
      pan
      pixeltable
      plot
      png
      prefs
      preserve
      psprint
      print
      quit
      raise
      regions
      restore
      rgb
      rgbarray
      rgbcube
      rgbimage
      rotate
      save
      saveimage
      scale
      shm

      sia
      single
      skyview
      sleep
      smooth
      source
      tcl
      threads
      tile
      update
      url
      version
      view
      vla

      vlss
      vo
      wcs
      web
      width
      xpa
      zscale
      zoom

      2mass

      Support for 2MASS Digital Sky Survey.

      Syntax:
      2mass []
            [<object>]
            [name <object>]
            [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
            [size <width> <height> degrees|arcmin|arcsec]
            [save yes|no]
            [frame new|current]
            [update frame|crosshair]
            [survey j|h|k]
            [open|close]
       
      Example:
      $xpaget ds9 2mass name
      $xpaget ds9 2mass coord
      $xpaget ds9 2mass size
      $xpaget ds9 2mass save
      $xpaget ds9 2mass frame
      $xpaget ds9 2mass survey
      $xpaset -p ds9 2mass
      $xpaset -p ds9 2mass m31
      $xpaset -p ds9 2mass name m31
      $xpaset -p ds9 2mass coord 00:42:44.404 +41:16:08.78 sexagesimal
      $xpaset -p ds9 2mass size 60 60 arcmin
      $xpaset -p ds9 2mass save yes
      $xpaset -p ds9 2mass frame current
      $xpaset -p ds9 2mass update frame
      $xpaset -p ds9 2mass survey j
      $xpaset -p ds9 2mass open
      $xpaset -p ds9 2mass close

      3d

      Support for 3D frame.

      Syntax:
      3d []
         [view <az> <el>]
         [az <az>]
         [el <el>]
         [scale <scale>]
         [method mip|aip]

         [background none|azimuth|elevation]
       
        [border yes|no]
         [border color <color>]

         [highlite yes|no]
         [highlite color <color>]
         [open|close]
       
      Example:
      $xpaget ds9 3d view
      $xpaget ds9 3d az
      $xpaget ds9 3d el
      $xpaget ds9 3d scale
      $xpaget ds9 3d method
      $xpaget ds9 3d background
      $xpaget ds9 3d border
      $xpaget ds9 3d border color

      $xpaget ds9 3d highlite
      $xpaget ds9 3d highlite color
      $xpaset -p ds9 3d # create new 3D frame
      $xpaset -p ds9 3d view 45 30
      $xpaset -p ds9 3d az 45
      $xpaset -p ds9 3d el 30
      $xpaset -p ds9 3d scale 10
      $xpaset -p ds9 3d method mip

      $xpaset -p ds9 3d background azimuth
      $xpaset -p ds9 3d border yes
      $xpaset -p ds9 3d border color red

      $xpaset -p ds9 3d highlite yes
      $xpaset -p ds9 3d highlite color red
      $xpaset -p ds9 3d open
      $xpaset -p ds9 3d close

      about

      Get DS9 credits.

      Syntax:
      about
       
      Example:
      $xpaget ds9 about

      align

      Controls the World Coordinate System alignment for the current frame.

      Syntax:
      align []
            [yes|no]
       
      Example:
      $xpaget ds9 align
      $xpaset -p ds9 align yes

      analysis

      Control external analysis tasks. Tasks are numbered as they are loaded, starting with 0. Can also be used to display a message and display text in the text dialog window.

      Syntax:
      analysis [<task number>]
               [<filename>]
               [task <task number>|<task name>]
               [load <filename>]
               [clear]
               [clear][load <filename>]
               [message ok|okcancel|yesno <message>]
               [entry <message>]
               [text]


      Example:
      $xpaget ds9 analysis
      $xpaget ds9 analysis task
      $xpaget ds9 analysis entry 'Please enter something'
      $xpaget ds9 analysis entry okcancel 'Please enter something'
      $xpaset -p ds9 analysis 0 # invoke first analysis task
      $xpaset -p ds9 analysis task 0
      $xpaset -p ds9 analysis task foobar
      $xpaset -p ds9 analysis "{foo bar}"
      $xpaset -p ds9 analysis my.ans
      $xpaset -p ds9 analysis load my.ans
      $xpaset -p ds9 analysis clear
      $xpaset -p ds9 analysis clear load my.ans
      $xpaset -p ds9 analysis message ok {This is a message}
      $xpaset -p ds9 analysis text {this is text}
      $cat my.ans | xpaset ds9 analysis load
      $cat foo.txt | xpaset ds9 analysis text

      array

      Load raw data array into current frame.

      Syntax:
      array [native|big|little]
      array [new|mask] [[xdim=<x>,ydim=<y>|dim=<dim>],zdim=<z>,bitpix=<b>,skip=<s>,endian=[little|big]]
       
      Example:
      $xpaget ds9 array > foo.arr
      $xpaget ds9 array little > foo.arr
      $xpaset -p ds9 array foo.arr[dim=512,bitpix=-32,endian=little]
      $xpaset -p ds9 array new foo.arr[dim=512,bitpix=
      -32,endian=little]
      $xpaset -p ds9 array mask foo.arr[dim=512,bitpix=-32,endian=little]
      $cat foo.arr | xpaset ds9 array [dim=512,bitpix=-32,endian=little]
      $cat foo.arr | xpaset ds9 array new [dim=512,bitpix=-32,endian=little]
      $cat foo.arr | xpaset ds9 array mask [dim=512,bitpix=-32,endian=little]

      bg
      background

      Set image background color.

      Syntax:
      bg <color>
       
      Example:
      $xpaget ds9 bg

      $xpaset -p ds9 bg red

      backup

      Create a backup save set.

      Syntax:
      backup <filename>
       
      Example:
      $xpaset -p ds9 backup ds9.bck

      bin

      Controls binning factor, binning buffer size, and  binning function for binning FITS bin tables. The access point blocking is provided for backward compatibility.

      Syntax:
      bin [about <x> <y>]
          [about center]
          [buffersize <value>]
          [cols <x> <y>]
          [colsz <x> <y> <z>]
          [factor <value> [<vector>]]
          [depth <value>]
          [filter <string>]
          [function average|sum]
          [in]
          [out]
          [to fit]
          [match]
          [lock [yes|no]]
          [open|close]
       
      Example:
      $xpaget ds9 bin about
      $xpaget ds9 bin buffersize
      $xpaget ds9 bin cols
      $xpaget ds9 bin factor
      $xpaget ds9 bin depth
      $xpaget ds9 bin filter
      $xpaget ds9 bin function
      $xpaget ds9 bin smooth
      $xpaget ds9 bin smooth function
      $xpaget ds9 bin smooth radius
      $xpaget ds9 bin lock
      $xpaset -p ds9 bin about 4096 4096
      $xpaset -p ds9 bin about center
      $xpaset -p ds9 bin buffersize 512
      $xpaset -p ds9 bin cols detx dety
      $xpaset -p ds9 bin colsz detx dety time
      $xpaset -p ds9 bin factor 4
      $xpaset -p ds9 bin factor 4 2
      $xpaset -p ds9 bin depth 10
      $xpaset -p ds9 bin filter 'pha > 5'
      $xpaset -p ds9 bin filter ''
      $xpaset -p ds9 bin function sum
      $xpaset -p ds9 bin in
      $xpaset -p ds9 bin out
      $xpaset -p ds9 bin to fit
      $xpaset -p ds9 bin match
      $xpaset -p ds9 bin lock yes
      $xpaset -p ds9 bin open
      $xpaset -p ds9 bin close

      blink

      Blink mode parameters. Interval is in seconds.

      Syntax:
      blink []
            [yes|no]
            [interval <value>]
       
      Example:
      $xpaget ds9 blink
      $xpaget ds9 blink interval
      $xpaset -p ds9 blink
      $xpaset -p ds9 blink yes
      $xpaset -p ds9 blink interval 1

      block

      Controls blocking parameters.

      Syntax:
      block
      [<value>]
            [<value> <value>]
            [to <value>]
            [to <value> <value>]
            [in]
            [out]
            [to fit]
            [match]
            [lock [yes|no]]
            [open|close]
       
      Example:
      $xpaget ds9 block
      $xpaget ds9 block lock
      $xpaset -p ds9 block 4
      $xpaset -p ds9
      block 4 2
      $xpaset -p ds9 block to 4
      $xpaset -p ds9
      block to 4 2
      $xpaset -p ds9
      block in
      $xpaset -p ds9 block out
      $xpaset -p ds9
      block to fit
      $xpaset -p ds9
      block match
      $xpaset -p ds9
      block lock yes
      $xpaset -p ds9
      block open
      $xpaset -p ds9
      block close

      catalog
      cat

      Support for catalogs. The first three commands will create a new catalog search. All other commands operated on the last search created, unless indicated otherwise.

      Syntax:
      catalog []
              [ned|simbad|denis|skybot]
              [ascss|cmc|gsc1|gsc2|gsc3|ac|nomad|ppmx|sao|sdss5|sdss6|
      sdss7|sdss8|tycho|ua2|ub1|ucac2]
              [2mass|iras]
              [csc|xmm|rosat]
              [first|nvss]
              [chandralog|cfhtlog|esolog|stlog|xmmlog]
              [cds <catalogname>]
              [cds <catalogid>]

              [load <filename>]
              [import sb|tsv <filename>]

              [<ref>] [allcols]
              [<ref>] [allrows]
       
             [<ref>] [cancel]
              [<ref>] [clear]
              [<ref>] [close]
              [<ref>] [coordinate <ra> <dec> <coordsys>]
              [<ref>] [crosshair]
              [<ref>] [dec <col>]
              [<ref>] [edit yes|no]
              [<ref>] [export sb|tsv <filename>]
              [<ref>] [filter <string>]
              [<ref>] [filter load <filename>]

              [<ref>] [header]
              [<ref>] [hide]
              [<ref>] [location <code>]
              [<ref>] [match <ref> <ref>]
             
      [<ref>] [match error <value> degrees|arcmin|arcsec]
              [<ref>] [match function 1and2|1not2|2not1]
              [<ref>] [match return 1and2|1only|2only]
              [<ref>] [match unique yes|no]
              [<ref>] [maxrows <number>]
              [<ref>] [name <object>]
              [<ref>] [panto yes|no]
              [<ref>] [plot <xcol> <ycol> <xerrcol> <yerrcol>]
              [<ref>] [print]
              [<ref>] [psky <skyframe>]
              [<ref>] [psystem <coordsys>]
              [<ref>] [ra <col>]
              [<ref>] [regions]

              [<ref>] [retrieve]
              [<ref>] [samp]
              [<ref>] [samp broadcast]
              [<ref>] [samp send <application>]

              [<ref>] [save <filename>]
              [<ref>] [server cds|sao|cadc|adac|iucaa|bejing|cambridge|ukirt]
              [<ref>] [show]
              [<ref>] [size <width> <height> degrees|arcmin|arcsec]
              [<ref>] [sky <skyframe>]
              [<ref>] [skyformat <skyformat>]
              [<ref>] [sort <col> incr|decr]
              [<ref>] [symbol [#] condition|shape|color|text|font|fontsize|fontweight|fontslant <value>]
              [<ref>] [symbol [#] text|size|size2|units|angle <value>]
              [<ref>] [symbol shape {circle point}|{box point}|{diamond point}|
                      {cross point}|{x point}|{arrow point}|{boxcircle point}|
                      circle|ellipse|box|text]
              [<ref>] [symbol add| [#] remove]
              [<ref>] [symbol save|load <filename>]

              [<ref>] [system <coordsys>]
              [<ref>] [update]
              [<ref>] [x <col>]
              [<ref>] [y <col>]
       
      Example:
      $xpaget ds9 catalog
      $xpaget ds9 catalog header

      $xpaset -p ds9 catalog
      $xpaset -p ds9 catalog 2mass
      $xpaset -p ds9 catalog cds 2mass
      $xpaset -p ds9 catalog cds "I/252"

      $xpaset -p ds9 catalog load foo.xml
      $xpaset -p ds9 catalog import tsv foo.tsv

      $xpaset -p ds9 catalog allrows
      $xpaset -p ds9 catalog allcols
      $xpaset -p ds9 catalog cancel
      $xpaset -p ds9 catalog clear
      $xpaset -p ds9 catalog close
      $xpaset -p ds9 catalog coordinate 202.48 47.21 fk5
      $xpaset -p ds9 catalog crosshair
      $xpaset -p ds9 catalog dec DEC
      $xpaset -p ds9 catalog edit yes
      $xpaset -p ds9 catalog export tsv bar.tsv
      $xpaset -p ds9 catalog filter '$Jmag>10'
      $xpaset -p ds9 catalog filter load foo.flt
      $xpaset -p ds9 catalog header
      $xpaset -p ds9 catalog hide
      $xpaset -p ds9 catalog location 500
      $xpaset -p ds9 catalog match error 2 arcsec
      $xpaset -p ds9 catalog match function 1and2
      $xpaset -p ds9 catalog match unique no
      $xpaset -p ds9 catalog match return 1only
      $xpaset -p ds9 catalog match 2mass csc
      $xpaset -p ds9 catalog maxrows 2000
      $xpaset -p ds9 catalog name m51
      $xpaset -p ds9 catalog panto no
      $xpaset -p ds9 catalog plot '$Jmag' '$Hmag' '$e_Jmag' '$e_Hmag'
      $xpaset -p ds9 catalog print
      $xpaset -p ds9 catalog psky fk5
      $xpaset -p ds9 catalog psystem wcs
      $xpaset -p ds9 catalog ra RA
      $xpaset -p ds9 catalog regions

      $xpaset -p ds9 catalog retrieve
      $xpaset -p ds9 catalog samp broadcast
      $xpaset -p ds9 catalog samp send aladin
      $xpaset -p ds9 catalog save foo.xml
      $xpaset -p ds9 catalog server sao
      $xpaset -p ds9 catalog show
      $xpaset -p ds9 catalog size 1 1 degrees
      $xpaset -p ds9 catalog symbol condition '$Jmag>15'
      $xpaset -p ds9 catalog symbol 2 shape "boxcircle point"
      $xpaset -p ds9 catalog symbol color red
      $xpaset -p ds9 catalog symbol font times
      $xpaset -p ds9 catalog symbol fontsize 14
      $xpaset -p ds9 catalog symbol fontweight bold
      $xpaset -p ds9 catalog symbol fontslant italic
      $xpaset -p ds9 catalog symbol add
      $xpaset -p ds9 catalog symbol 2 remove
      $xpaset -p ds9 catalog symbol load foo.sym
      $xpaset -p ds9 catalog symbol save bar.sym

      $xpaset -p ds9 catalog sky fk5
      $xpaset -p ds9 catalog skyformat degrees
      $xpaset -p ds9 catalog sort "Jmag" incr
      $xpaset -p ds9 catalog system wcs
      $xpaset -p ds9 catalog update
      $xpaset -p ds9 catalog x RA
      $xpaset -p ds9 catalog y DEC

      cd

      Sets/Returns the current working directory.

      Syntax:
      cd [<directory>]
       
      Example:
      $xpaget ds9 cd
      $xpaset -p ds9 cd /home/mrbill

      cmap

      Controls the colormap for the current frame. The colormap name is not case sensitive. A valid contrast value is  from 0 to 10 and bias value from 0 to 1.

      Syntax:
      cmap [<colormap>]
           [file]
           [load <filename>]
           [save <filename>]
           [invert yes|no]
           [value <constrast> <bias>]
           [tag [load|save] <filename>]
           [tag delete]
           [match]
           [lock [yes|no]]

           [open|close]
       
      Example:
      $xpaget ds9 cmap
      $xpaget ds9 cmap file
      $xpaget ds9 cmap invert
      $xpaget ds9 cmap value
      $xpaget ds9 cmap lock
      $xpaset -p ds9 cmap Heat
      $xpaset -p ds9 cmap load foo.sao
      $xpaset -p ds9 cmap save bar.sao
      $xpaset -p ds9 cmap invert yes
      $xpaset -p ds9 cmap value 5 .5
      $xpaset -p ds9 cmap tag load foo.tag
      $xpaset -p ds9 cmap tag save foo.tag
      $xpaset -p ds9 cmap tag delete
      $xpaset -p ds9 cmap match
      $xpaset -p ds9 cmap lock yes

      $xpaset -p ds9 cmap open
      $xpaset -p ds9 cmap close

      colorbar

      Controls colorbar parameters.

      Syntax:
      colorbar []
               [yes|no]
               [horizontal|vertical]
               [orientation horizontal|vertical]
               [numerics yes|no]
               [space value|distance]
               [font times|helvetica|courier]
               [fontsize <value>]
               [fontweight normal|bold]
               [fontslant roman|italic]
               [size]
               [ticks]
       
      Example:
      $xpaget ds9 colorbar
      $xpaget ds9 colorbar orientation
      $xpaget ds9 colorbar numerics
      $xpaget ds9 colorbar space
      $xpaget ds9 colorbar font
      $xpaget ds9 colorbar fontsize
      $xpaget ds9 colorbar fontweight
      $xpaget ds9 colorbar fontslant
      $xpaget ds9 colorbar size
      $xpaget ds9 colorbar ticks
      $xpaset -p ds9 colorbar yes
      $xpaset -p ds9 colorbar vertical
      $xpaset -p ds9 colorbar orientation vertical
      $xpaset -p ds9 colorbar numerics yes
      $xpaset -p ds9 colorbar space value
      $xpaset -p ds9 colorbar font times
      $xpaset -p ds9 colorbar fontsize 14
      $xpaset -p ds9 colorbar fontweight bold
      $xpaset -p ds9 colorbar fontslant italic
      $xpaset -p ds9 colorbar size 20
      $xpaset -p ds9 colorbar ticks 11

      console

      Display tcl console window.

      Syntax:
      -console
       
      Example:
      $xpaset -p ds9 console

      contour

      Controls contours in the current frame.

      Syntax:
      contour []
              [yes|no]
              [<coordsys> [<skyframe>]]
              [clear]
              [generate]
              [load <filename> [<color> <width> yes|no]]
              [save <filename> <coordsys> <skyframe>]
              [convert]
              [loadlevels <filename>]
              [savelevels <filename>]
              [copy]
              [paste <coordsys> [<color> <width> yes|no]]
              [color <color>]
              [width <width>]
              [dash yes|no]
              [smooth <smooth>]
              [method block|smooth]
              [nlevels <number of levels>]
              [scale linear|log|pow|squared|sqrt|asinh|sinh|histequ]
              [log exp <value>]
              [mode minmax|<value>|zscale|zmax]
              [limits <min> <max>]
              [levels <value value value...>]
              [open|close]
       
      Example:
      $xpaget ds9 contour
      $xpaget ds9 contour wcs fk5
      $xpaget ds9 contour color
      $xpaget ds9 contour width
      $xpaget ds9 contour dash
      $xpaget ds9 contour smooth
      $xpaget ds9 contour method
      $xpaget ds9 contour nlevels
      $xpaget ds9 contour scale
      $xpaget ds9 contour log exp
      $xpaget ds9 contour mode
      $xpaget ds9 contour limits
      $xpaget ds9 contour levels
      $xpaset -p ds9 contour
      $xpaset -p ds9 contour yes
      $xpaset -p ds9 contour clear
      $xpaset -p ds9 contour generate
      $xpaset -p ds9 contour load ds9.ctr
      $xpaset -p ds9 contour load ds9.ctr red 2 yes
      $xpaset -p ds9 contour save ds9.ctr wcs fk5
      $xpaset -p ds9 contour convert
      $xpaset -p ds9 contour loadlevels ds9.ctr

      $xpaset -p ds9 contour savelevels ds9.lev
      $xpaset -p ds9 contour copy
      $xpaset -p ds9 contour paste wcs red 2 no
      $xpaset -p ds9 contour color yellow
      $xpaset -p ds9 contour width 2
      $xpaset -p ds9 contour dash yes
      $xpaset -p ds9 contour smooth 5
      $xpaset -p ds9 contour method smooth
      $xpaset -p ds9 contour nlevels 10
      $xpaset -p ds9 contour scale sqrt
      $xpaset -p ds9 contour log exp 1000
      $xpaset -p ds9 contour mode zscale
      $xpaset -p ds9 contour limits 1 100
      $xpaset -p ds9 contour levels "{1 10 100 1000}"
      $xpaset -p ds9 contour open
      $xpaset -p ds9 contour close

      crop

      Set current image display area.

      Syntax:
      crop [<x> <y> <width> <height> [<coordsys>][<skyframe>][<skyformat>][degrees|arcmin|arcsec]
           [match <coordsys>]
           [lock <coordsys>|none]
       
      Example:
      $xpaget ds9 crop # get crop in physical coords
      $xpaget ds9 crop wcs galactic sexagesimal arcsec
      $xpaget ds9 crop lock
      $xpaset -p ds9 crop 40 30 10 20 # set crop in physical coords
      $xpaset -p ds9 crop +104:51:06.915 +68:33:40.761  28.144405 22.000204 wcs galactic arcsec
      $xpaset -p ds9 crop match wcs
      $xpaset -p ds9 crop lock wcs

      crosshair

      Controls the current position of the crosshair in the current frame. DS9 is placed in crosshair mode when the crosshair is set.

      Syntax:
      crosshair [<x> <y> <coordsys> [<skyframe>][<skyformat>]]
                [match <coordsys>]
                [lock <coordsys>|none]
       
      Example:
      $xpaget ds9 crosshair # get crosshair in physical coords
      $xpaget ds9 crosshair wcs fk4 sexagesimal # get crosshair in wcs coords
      $xpaget ds9 crosshair lock
      $xpaset -p ds9 crosshair 100 100 physical # set crosshair in physical
      $xpaset -p ds9 crosshair 345 58.8 wcs fk5 # set crosshair in wcs coords
      $xpaset -p ds9 crosshair 23:01:00 +58:52:51 wcs fk5
      $xpaset -p ds9 crosshair match wcs
      $xpaset -p ds9 crosshair lock wcs

      cube

      Controls FITS cube dialog.

      Syntax:
      cube [play|stop|next|prev|first|last]
           [<slice> [<coordsys>][<axis>]]
           [interval <numeric>]
           [axis <axis>]
           [match <coordsys>]
           [lock <coordsys>|none]
           [order 123|132|213|231|312|321]
           [axes lock [yes|no]]
           [open|close]
       
      Example:
      $xpaget ds9 cube
      $xpaget ds9 cube interval
      $xpaget ds9 cube axis
      $xpaget ds9 cube lock
      $xpaget ds9 cube order
      $xpaget ds9 cube axes lock
      $xpaset -p ds9 cube play
      $xpaset -p ds9 cube last
      $xpaset -p ds9 cube 3
      $xpaset -p ds9 cube 4.4 wcs 3
      $xpaset -p ds9 cube interval 2
      $xpaset -p ds9 cube axis 3
      $xpaset -p ds9 cube match wcs
      $xpaset -p ds9 cube lock wcs
      $xpaset -p ds9 cube order 123
      $xpaset -p ds9 cube axes lock yes
      $xpaset -p ds9 cube open
      $xpaset -p ds9 cube close

      cursor

      Move mouse pointer or crosshair in image pixels in the current frame. Note, this will move selected Regions also.

      Syntax:
      cursor [<x> <y>]
       
      Example:
      $xpaset -p ds9 cursor 10 10

      data

      Return an array of data values given a lower left corner and a width and height in specified coordinate system. The last argument of yes indicates to strip the coordinates from the output and just list the data values. The default is yes.

      Syntax:
      data [<coordsys> [<skyframe>] <x> <y> <width> <height> [yes|no]]
       
      Example:
      $xpaget ds9 data image 450 520 3 3 yes
      $xpaget ds9 data physical 899 1039 6 6 no
      $xpaget ds9 data fk5 202.47091 47.196811 0.00016516669 0.00016516669 no
      $xpaget ds9 data wcs fk5 13:29:53.018 +47:11:48.52 0.00016516669 0.00016516669 no

      dsssao
      dss

      Support for Digital Sky Survey at SAO.

      Syntax:
      dsssao []
             [<object>]
             [name <object>]
             [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
             [size <width> <height> degrees|arcmin|arcsec]
             [save yes|no]
             [frame new|current]
             [update frame|crosshair]
             [open|close]
       
      Example:
      $xpaget ds9 dsssao name
      $xpaget ds9 dsssao coord
      $xpaget ds9 dsssao size
      $xpaget ds9 dsssao save
      $xpaget ds9 dsssao frame
      $xpaset -p ds9 dsssao
      $xpaset -p ds9 dsssao m31
      $xpaset -p ds9 dsssao name m31
      $xpaset -p ds9 dsssao coord 00:42:44.404 +41:16:08.78 sexagesimal
      $xpaset -p ds9 dsssao size 60 60 arcmin
      $xpaset -p ds9 dsssao save yes
      $xpaset -p ds9 dsssao frame current
      $xpaset -p ds9 dsssao update frame
      $xpaset -p ds9 dsssao open
      $xpaset -p ds9 dsssao close

      dsseso

      Support for Digital Sky Survey at ESO.

      Syntax:
      dsseso []
             [<object>]
             [name <object>]
             [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
             [size <width> <height> degrees|arcmin|arcsec]
             [save yes|no]
             [frame new|current]
             [update frame|crosshair]
             [survey DSS1|DSS2-red|DSS2-blue|DSS2-infrared]
             [open|close]
       
      Example:
      $xpaget ds9 dsseso name
      $xpaget ds9 dsseso coord
      $xpaget ds9 dsseso size
      $xpaget ds9 dsseso save
      $xpaget ds9 dsseso frame
      $xpaget ds9 dsseso survey
      $xpaset -p ds9 dsseso
      $xpaset -p ds9 dsseso m31
      $xpaset -p ds9 dsseso name m31
      $xpaset -p ds9 dsseso coord 00:42:44.404 +41:16:08.78 sexagesimal
      $xpaset -p ds9 dsseso size 60 60 arcmin
      $xpaset -p ds9 dsseso save yes
      $xpaset -p ds9 dsseso frame current
      $xpaset -p ds9 dsseso update frame
      $xpaset -p ds9 dsseso survey DSS2-red
      $xpaset -p ds9 dsseso open
      $xpaset -p ds9 dsseso close

      dssstsci

      Support for Digital Sky Survey at STSCI.

      Syntax:
      dssstsci []
               [<object>]
               [name <object>]
               [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
               [size <width> <height> degrees|arcmin|arcsec]
               [save yes|no]
               [frame new|current]
               [update frame|crosshair]
               [survey poss2ukstu_red|poss2ukstu_ir|poss2ukstu_blue]
               [survey poss1_blue|poss1_red]
               [survey all|quickv|phase2_gsc2|phase2_gsc1]
               [open|close]
       
      Example:
      $xpaget ds9 dssstsci name
      $xpaget ds9 dssstsci coord
      $xpaget ds9 dssstsci size
      $xpaget ds9 dssstsci save
      $xpaget ds9 dssstsci frame
      $xpaget ds9 dssstsci survey
      $xpaset -p ds9 dssstsci
      $xpaset -p ds9 dssstsci m31
      $xpaset -p ds9 dssstsci name m31
      $xpaset -p ds9 dssstsci coord 00:42:44.404 +41:16:08.78 sexagesimal
      $xpaset -p ds9 dssstsci size 60 60 arcmin
      $xpaset -p ds9 dssstsci save yes
      $xpaset -p ds9 dssstsci frame current
      $xpaset -p ds9 dssstsci update frame
      $xpaset -p ds9 dssstsci survey all
      $xpaset -p ds9 dssstsci open
      $xpaset -p ds9 dssstsci close

      envi

      Load an ENVI header and file. Optional parameter: array endian.

      Syntax:
      envi <header> [<filename>]
       
      Example:
      $xpaset -p ds9 envi foo.hdr
      $xpaset -p ds9 envi foo.hdr foo.bsq
      $xpaset -p ds9 envi new foo.hdr foo.bsq

      exit
      quit

      Quits DS9.

      Syntax:
      exit
      quit
       
      Example:
      $xpaset -p ds9 exit

      export

      Export loaded image data of current frame in specified image format. Optional parameters: array endian, nrrd endian, jpeg quality (1-100) and tiff compression method.

      Syntax:
      export [array|nrrd|envi|gif|tiff|jpeg|png] <filename>
      export array <filename> [big|little|native]
      export nrrd <filename> [big|little|native]
      export envi <header> [<filename>]
      [big|little|native]
      export jpeg <filename>
      [1-100]
      export tiff <filename> [none|jpeg|packbits|deflate]
       
      Example:
      $xpaset -p ds9 export array foo.arr little
      $xpaset -p ds9 export nrrd foo.nrrd little
      $xpaset -p ds9 export envi foo.hdr little
      $xpaset -p ds9 export envi foo.hdr foo.bsq little
      $xpaset -p ds9 export tiff foo.tiff jpeg

      $xpaset -p ds9 export jpeg foo.jpeg 75
      $xpaset -p ds9 export png foo.png

      file

      Query currently loaded file information.

      Syntax:
      file
       
      Example:
      $xpaget ds9 file

      fits

      Load a FITS image into the current frame or query the currently loaded image.

      Syntax:
      fits
      [new|mask|slice] [<filename>]
           [width|height|depth|bitpix|type]
           [size [wcs|wcsa...wcsz] [fk4|fk5|icrs|galactic|ecliptic] [degrees|arcmin|arcsecs]]
           [header [<ext>] [keyword <string>]]
           [image|table|slice]

       
      Example:
      $xpaget ds9 fits > foo.fits
      $xpaget ds9 fits width
      $xpaget ds9 fits height
      $xpaget ds9 fits depth
      $xpaget ds9 fits bitpix

      $xpaget ds9 fits type
      $xpaget ds9 fits size
      $xpaget ds9 fits size wcs fk5 arcmin
      $xpaget ds9 fits header # primary
      $xpaget ds9 fits header 2 # hdu 2
      $xpaget ds9 fits header -2 # hdu 2 with inherit
      $xpaget ds9 fits header keyword BITPIX
      $xpaget ds9 fits header 1 keyword BITPIX

      $xpaget ds9 fits image > foo.fits
      $xpaget ds9 fits table > bar.fits
      $xpaget ds9 fits slice > foo.fits
      $xpaset -p ds9 fits foo.fits
      $xpaset -p ds9 fits new foo.fits
      $xpaset -p ds9 fits bar.fits[bin=detx,dety]
      $xpaset -p ds9 fits slice foo.fits
      $xpaset -p ds9 fits mask foo.fits
      $cat foo.fits | xpaset ds9 fits
      $cat foo.fits | xpaset ds9 fits new
      $cat bar.fits | xpaset ds9 fits -[bin=detx,dety]
      $cat foo.fits | xpaset ds9 fits slice
      $cat foo.fits | xpaset ds9 fits mask

      frame

      Controls frame functions. Frames may be created, deleted, reset, and centered. While return the current frame number. If you goto a frame that does not exists, it will be created. If the frame is hidden, it will be shown. The 'frameno' option is available for backward compatibility.

      Syntax:
      frame [center [#|all]]
            [clear [#|all]]
            [new [rgb|3d]]
            [delete [#|all]]
            [reset [#|all]]
            [refresh [#|all]]
            [hide [#|all]]
            [show [#|all]]
            [move first]
            [move back]
            [move forward]
            [move last]
            [first]
            [prev]
            [next]
            [last]
            [frameno #]
            [#]
            [match <coordsys>]
            [lock <coordsys>|none]

            [has [amplifier|datamin|datasec|detector|grid|iis|irafmin|physical|smooth]]
            [has contour [aux]]]
            [has fits [bin|cube|mosaic]]
            [has marker [highlite|paste|select|undo]]
            [has system <coordsys>]
            [has wcs [<wcssys>|equatorial <wcssys>|linear <wcssys>]]
       
      Example:
      $xpaget ds9 frame # returns the id of the current frame
      $xpaget ds9 frame frameno # returns the id of the current frame
      $xpaget ds9 frame all # returns the id of all frames
      $xpaget ds9 frame active # returns the id of all active frames
      $xpaget ds9 frame lock
      $xpaget ds9 frame has amplifier
      $xpaget ds9 frame has datamin
      $xpaget ds9 frame has datasec
      $xpaget ds9 frame has detector
      $xpaget ds9 frame has grid
      $xpaget ds9 frame has iis
      $xpaget ds9 frame has irafmin
      $xpaget ds9 frame has physical
      $xpaget ds9 frame has smooth
      $xpaget ds9 frame has contour
      $xpaget ds9 frame has contour aux
      $xpaget ds9 frame has fits
      $xpaget ds9 frame has fits bin
      $xpaget ds9 frame has fits cube
      $xpaget ds9 frame has fits mosaic
      $xpaget ds9 frame has marker highlite
      $xpaget ds9 frame has marker paste
      $xpaget ds9 frame has marker select
      $xpaget ds9 frame has marker undo
      $xpaget ds9 frame has system physical
      $xpaget ds9 frame has wcs wcsa
      $xpaget ds9 frame has wcs equatorial wcsa
      $xpaget ds9 frame has wcs linear wcsa
      $xpaset -p ds9 frame center # center current frame
      $xpaset -p ds9 frame center 1 # center 'Frame1'
      $xpaset -p ds9 frame center all # center all frames
      $xpaset -p ds9 frame clear # clear current frame
      $xpaset -p ds9 frame new # create new frame
      $xpaset -p ds9 frame new rgb # create new rgb frame
      $xpaset -p ds9 frame delete # delete current frame
      $xpaset -p ds9 frame reset # reset current frame
      $xpaset -p ds9 frame refresh # refresh current frame
      $xpaset -p ds9 frame hide # hide current frame
      $xpaset -p ds9 frame show 1 # show frame 'Frame1'
      $xpaset -p ds9 frame move first # move frame to first in order
      $xpaset -p ds9 frame move back # move frame back in order
      $xpaset -p ds9 frame move forward # move frame forward in order
      $xpaset -p ds9 frame move last # move frame to last in order
      $xpaset -p ds9 frame first # goto first frame
      $xpaset -p ds9 frame prev # goto prev frame
      $xpaset -p ds9 frame next # goto next frame
      $xpaset -p ds9 frame last # goto last frame
      $xpaset -p ds9 frame frameno 4 # goto frame 'Frame4', create if needed
      $xpaset -p ds9 frame 3 # goto frame 'Frame3', create if needed
      $xpaset -p ds9 frame match wcs
      $xpaset -p ds9 frame lock wcs

      gif

      Load GIF image into current frame.

      Syntax:
      gif [new|slice] [<filename>]
       
      Example:
      $xpaget ds9 gif > foo.gif

      $xpaset -p ds9 gif foo.gif
      $xpaset -p ds9 gif new foo.gif
      $xpaset -p ds9 gif slice foo.gif
      $cat foo.gif | xpaset ds9 gif # not available windows

      $cat foo.gif | xpaset ds9 gif new # not available windows
      $cat foo.gif | xpaset ds9 gif
      slice # not available windows

      grid

      Controls coordinate grid. For grid numeric format syntax,  click here.

      Syntax:
      grid  []
            [yes|no]
            [type analysis|publication]
            [system <coordsys>]
            [sky <skyframe>]
            [skyformat <skyformat>]
            [grid yes|no]
            [grid color <color>]
            [grid width <value>]
            [grid style 0|1]
            [grid gap1 <value>]
            [grid gap2 <value>]
            [axes yes|no]
            [axes color <color>]
            [axes width <value>]
            [axes style 0|1]
            [axes type interior|exterior]
            [axes origin lll|llu|lul|luu|ull|ulu|uul|uuu]
            [format1 <format>]
            [format2 <format>]
            [tickmarks yes|no]
            [tickmarks color <color>]
            [tickmarks width <value>]
            [tickmarks style 0|1]
            [border yes|no]
            [border color <color>]
            [border width <value>]
            [border style 0|1]
            [numerics yes|no]
            [numerics font times|helvetica|courier]
            [numerics fontsize <value>]
            [numerics fontweight normal|bold]
            [numerics fontslant roman|italic]
            [numerics color <color>]
            [numerics gap1 <value>]
            [numerics gap2 <value>]
            [numerics type interior|exterior]
            [numerics vertical yes|no]
            [title yes|no]
            [title text <text>]
            [title def yes|no]
            [title gap <value>]
            [title font times|helvetica|courier]
            [title fontsize <value>]
            [title fontweight normal|bold]
            [title fontslant roman|italic]
            [title color <color>]
            [labels yes|no]
            [labels text1 <text>]
            [labels def1 yes|no]
            [labels gap1 <value>]
            [labels text2 <text>]
            [labels def2 yes|no]
            [labels gap2 <value>]
            [labels font times|helvetica|courier]
            [labels fontsize <value>]
            [labels fontweight normal|bold]
            [labels fontslant roman|italic]
            [labels color <color>]
            [reset]
            [load <filename>]
            [save <filename>]
            [open|close]
       
      Example:
      $xpaget ds9 grid
      $xpaget ds9 grid type
      $xpaget ds9 grid system
      $xpaget ds9 grid sky
      $xpaget ds9 grid skyformat
      $xpaget ds9 grid grid
      $xpaget ds9 grid grid color
      $xpaget ds9 grid grid width
      $xpaget ds9 grid grid style
      $xpaget ds9 grid grid gap1
      $xpaget ds9 grid grid gap2
      $xpaget ds9 grid axes
      $xpaget ds9 grid axes color
      $xpaget ds9 grid axes width
      $xpaget ds9 grid axes style
      $xpaget ds9 grid axes type
      $xpaget ds9 grid axes origin
      $xpaget ds9 grid format1
      $xpaget ds9 grid format2
      $xpaget ds9 grid tickmarks
      $xpaget ds9 grid tickmarks color
      $xpaget ds9 grid tickmarks width
      $xpaget ds9 grid tickmarks style
      $xpaget ds9 grid border
      $xpaget ds9 grid border color
      $xpaget ds9 grid border width
      $xpaget ds9 grid border style
      $xpaget ds9 grid numerics
      $xpaget ds9 grid numerics font
      $xpaget ds9 grid numerics fontsize
      $xpaget ds9 grid numerics fontweight
      $xpaget ds9 grid numerics fontslant
      $xpaget ds9 grid numerics color
      $xpaget ds9 grid numerics gap1
      $xpaget ds9 grid numerics gap2
      $xpaget ds9 grid numerics type
      $xpaget ds9 grid numerics vertical
      $xpaget ds9 grid title
      $xpaget ds9 grid title text
      $xpaget ds9 grid title def
      $xpaget ds9 grid title gap
      $xpaget ds9 grid title font
      $xpaget ds9 grid title fontsize
      $xpaget ds9 grid title fontweight
      $xpaget ds9 grid title fontslant
      $xpaget ds9 grid title color
      $xpaget ds9 grid labels
      $xpaget ds9 grid labels text1
      $xpaget ds9 grid labels def1
      $xpaget ds9 grid labels gap1
      $xpaget ds9 grid labels text2
      $xpaget ds9 grid labels def2
      $xpaget ds9 grid labels gap2
      $xpaget ds9 grid labels font
      $xpaget ds9 grid labels fontsize
      $xpaget ds9 grid labels fontweight
      $xpaget ds9 grid labels fontslant
      $xpaget ds9 grid labels color
      $xpaset -p ds9 grid
      $xpaset -p ds9 grid yes
      $xpaset -p ds9 grid type analysis
      $xpaset -p ds9 grid system wcs
      $xpaset -p ds9 grid sky fk5
      $xpaset -p ds9 grid skyformat degrees
      $xpaset -p ds9 grid grid yes
      $xpaset -p ds9 grid grid color red
      $xpaset -p ds9 grid grid width 2
      $xpaset -p ds9 grid grid style 1
      $xpaset -p ds9 grid grid gap1 10
      $xpaset -p ds9 grid grid gap2 10
      $xpaset -p ds9 grid axes yes
      $xpaset -p ds9 grid axes color red
      $xpaset -p ds9 grid axes width 2
      $xpaset -p ds9 grid axes style 1
      $xpaset -p ds9 grid axes type exterior
      $xpaset -p ds9 grid axes origin lll
      $xpaset -p ds9 grid format1 d.2
      $xpaset -p ds9 grid format2 d.2
      $xpaset -p ds9 grid tickmarks yes
      $xpaset -p ds9 grid tickmarks color red
      $xpaset -p ds9 grid tickmarks width 2
      $xpaset -p ds9 grid tickmarks style 1
      $xpaset -p ds9 grid border yes
      $xpaset -p ds9 grid border color red
      $xpaset -p ds9 grid border width 2
      $xpaset -p ds9 grid border style 1
      $xpaset -p ds9 grid numerics yes
      $xpaset -p ds9 grid numerics font courier
      $xpaset -p ds9 grid numerics fontsize 12
      $xpaset -p ds9 grid numerics fontweight bold
      $xpaset -p ds9 grid numerics fontslant italic
      $xpaset -p ds9 grid numerics color red
      $xpaset -p ds9 grid numerics gap1 10
      $xpaset -p ds9 grid numerics gap2 10
      $xpaset -p ds9 grid numerics type exterior
      $xpaset -p ds9 grid numerics vertical yes
      $xpaset -p ds9 grid title yes
      $xpaset -p ds9 grid title text {Hello World}
      $xpaset -p ds9 grid title def yes
      $xpaset -p ds9 grid title gap 10
      $xpaset -p ds9 grid title font courier
      $xpaset -p ds9 grid title fontsize 12
      $xpaset -p ds9 grid title fontweight bold
      $xpaset -p ds9 grid title fontslant italic
      $xpaset -p ds9 grid title color red
      $xpaset -p ds9 grid labels yes
      $xpaset -p ds9 grid labels text1 {Hello World}
      $xpaset -p ds9 grid labels def1 yes
      $xpaset -p ds9 grid labels gap1 10
      $xpaset -p ds9 grid labels text2 {Hello World}
      $xpaset -p ds9 grid labels def2 yes
      $xpaset -p ds9 grid labels gap2 10
      $xpaset -p ds9 grid labels font courier
      $xpaset -p ds9 grid labels fontsize 12
      $xpaset -p ds9 grid labels fontweight boldj
      $xpaset -p ds9 grid labels fontslant italic
      $xpaset -p ds9 grid labels color red
      $xpaset -p ds9 grid reset
      $xpaset -p ds9 grid load foo.grd
      $xpaset -p ds9 grid save foo.grd
      $xpaset -p ds9 grid open
      $xpaset -p ds9 grid close

      header

      Display current fits header dialog. Optional extension number maybe specified. Please note, this differs from xpa fits header.

      Syntax:
      header [<ext>]
             [close [<ext>]]
             [save [<ext>] <filename>]
       
      Example:
      $xpaset -p ds9 header
      $xpaset -p ds9 header 2
      $xpaset -p ds9 header close
      $xpaset -p ds9 header save 1 foo.txt

      height

      Set the height of the image display window.

      Syntax:
      height [<value>]
       
      Example:
      $xpaget ds9 height
      $xpaset -p ds9 height 512

      iconify

      Toggles iconification.

      Syntax:
      iconify []
              [yes|no]
       
      Example:
      $xpaget ds9 iconify
      $xpaset -p ds9 iconify

      $xpaset -p ds9 iconify yes

      iexam

      Interactive examine function. A blinking cursor will indicate to the user to click on a point on an image. The specified information will be returned at that time. The default event is button. In the last form, the following macros will be expanded if present: $width, $height, $depth, $bitpix, $filename, $regions, $filename[$regions], $env, $pan, $value, $x, $y, $z. See Analysis Macros for more information.

      Syntax:
      iexam []
            [[]|button|key|any] coordinate <coordsys> [<skyframe>] [<skyformat>]
            [[]|button|key|any] data [width][height]
            [[]|button|key|any] <macro string>]
       

      Example:
      $xpaget ds9 iexam # image coordinates
      $xpaget ds9 iexam coordinate image
      $xpaget ds9 iexam key coordinate image # return coordinate and key event
      $xpaget ds9 iexam coordinate wcs fk5 degrees
      $xpaget ds9 iexam coordinate wcs galactic sexagesimal
      $xpaget ds9 iexam coordinate fk5
      $xpaget ds9 iexam data # return data value
      $xpaget ds9 iexam key data # return data value and key event
      $xpaget ds9 iexam data 3 3 # return all data in 3x3 box about selected point
      $xpaget ds9 iexam 'Click at $x,$y in file $filename'

      iis

      Set/Get IIS Filename. Optional mosaic number maybe supplied.

      Syntax:
      iis [filename <filename> [#]]
       
      Example:
      $xpaget ds9 iis filename
      $xpaget ds9 iis filename 4
      $xpaset -p ds9 iis filename foo.fits
      $xpaset -p ds9 iis filename bar.fits 4

      jpeg

      Load JPEG image into current frame. Optional parameters: jpeg quality (1-100)

      Syntax:
      jpeg [new|slice] [<filename>] [1-100]
       
      Example:
      $xpaget ds9 jpeg > foo.jpeg

      $xpaget ds9 jpeg 100 > foo.jpeg
      $xpaset -p ds9 jpeg foo.jpeg

      $xpaset -p ds9 jpeg new foo.jpeg
      $xpaset -p ds9 jpeg slice foo.jpeg
      $cat foo.jpeg | xpaset ds9 jpeg
      # not available windows
      $cat foo.jpeg | xpaset ds9 jpeg new # not available windows
      $cat foo.jpeg | xpaset ds9 jpeg
      slice # not available windows

      lock

      Lock all other frames to the current frame.

      Syntax:
      lock
      [frame <coordsys>|none]
          
      [crosshair <coordsys>|none]
           [crop <coordsys>|none]
           [slice <coordsys>|none]]
           [bin [yes|no]]
           [axes [yes|no]]
           [scale [yes|no]]
           [scalelimites [yes|no]]
           [colorbar [yes|no]]
           [block [yes|no]]
           [smooth [yes|no]]

       
      Example:
      $xpaget -p ds9 lock frame
      $xpaget -p ds9 lock crosshair
      $xpaget -p ds9 lock crop
      $xpaget -p ds9 lock slice
      $xpaget -p ds9 lock bin
      $xpaget -p ds9 lock axes
      $xpaget -p ds9 lock scale
      $xpaget -p ds9 lock scalelimits
      $xpaget -p ds9 lock colorbar
      $xpaget -p ds9 lock block
      $xpaget -p ds9 lock smooth
      $xpaset -p ds9 lock frame wcs

      $xpaset -p ds9 lock crosshair wcs
      $xpaset -p ds9 lock crop wcs
      $xpaset -p ds9 lock slice wcs
      $xpaset -p ds9 lock bin yes
      $xpaset -p ds9 lock axes yes
      $xpaset -p ds9 lock scale yes
      $xpaset -p ds9 lock scalelimits yes
      $xpaset -p ds9 lock colorbar yes
      $xpaset -p ds9 lock block yes
      $xpaset -p ds9 lock smooth yes

      lower

      Lower in the window stacking order.

      Syntax:
      lower
       
      Example:
      $xpaset -p ds9 lower

      magnifier

      Controls the magnifier settings.

      Syntax:
      magnifier [color <color>]
                [zoom <value>]
                [cursor yes|no]
                [region yes|no]
       
      Example:
      $xpaget ds9 magnifier color
      $xpaget ds9 magnifier zoom
      $xpaget ds9 magnifier cursor
      $xpaget ds9 magnifier region
      $xpaset -p ds9 magnifier color yellow
      $xpaset -p ds9 magnifier zoom 2
      $xpaset -p ds9 magnifier cursor no
      $xpaset -p ds9 magnifier region no

      mask

      Controls mask parameters.

      Syntax:
      mask [color <color>]
           [mark 1|0]
           [transparency <value>]
           [clear]
           [open|close]
       
      Example:
      $xpaget ds9 mask color
      $xpaget ds9 mask mark
      $xpaget ds9 mask transparency
      $xpaset -p ds9 mask color red
      $xpaset -p ds9 mask mark 0
      $xpaset -p ds9 mask transparency 50
      $xpaset -p ds9 mask clear
      $xpaset -p ds9 mask open
      $xpaset -p ds9 mask close

      match

      Match all other frames to the current frame.

      Syntax:
      match [frame <coordsys>]
           
      [crosshair <coordsys>]
            [crop <coordsys>]
            [slice <coordsys>]
            [bin]
            [axes]
            [scale]
            [scalelimits]
            [colorbar]
            [block]
            [smooth]


      Example:
      $xpaset -p ds9 match frame wcs
      $xpaset -p ds9 match crosshair wcs
      $xpaset -p ds9 match crop wcs
      $xpaset -p ds9 match slice wcs
      $xpaset -p ds9 match bin
      $xpaset -p ds9 match axes
      $xpaset -p ds9 match scale
      $xpaset -p ds9 match scalelimits
      $xpaset -p ds9 match colorbar
      $xpaset -p ds9 match block
      $xpaset -p ds9 match smooth

      mecube

      Load FITS multiple extension file as data cube.

      Syntax:
      mecube [new] [<filename>]
       
      Example:
      $xpaget ds9 mecube > foo.fits
      $xpaset -p ds9 mecube foo.fits

      $xpaset -p ds9 mecube new foo.fits
      $cat foo.fits | xpaset ds9 mecube

      $cat foo.fits | xpaset ds9 mecube new

      minmax

      This is how DS9 determines  the min and max data values from the data. SCAN will scan all data. DATAMIN and IRAFMIN will use the values of the keywords if present.

      Syntax:
      minmax [scan|sample|datamin|irafmin]
             [mode scan|sample|datamin|irafmin]
             [interval #]
       
      Example:
      $xpaget ds9 minmax mode
      $xpaget ds9 minmax interval
      $xpaset -p ds9 minmax scan
      $xpaset -p ds9 minmax mode scan
      $xpaset -p ds9 minmax interval 100

      mode

      Controls the first mouse button mode.

      Syntax:
      mode [none|region|crosshair|colorbar|pan|zoom|rotate|catalog|examine]
       
      Example:
      $xpaget ds9 mode
      $xpaset -p ds9 mode crosshair

      mosaic

      Load FITS mosaic segment into current frame.

      Syntax:
      mosaic [wcs|wcsa...wcsz|iraf] [new|mask] [<filename>]
       
      Example:
      $xpaget ds9 mosaic > foo.fits

      $xpaset -p ds9 mosaic foo.fits

      $xpaset -p ds9 mosaic wcs foo.fits
      $xpaset -p ds9 mosaic wcs new foo.fits
      $xpaset -p ds9 mosaic wcs mask foo.fits
      $cat foo.fits | xpaset ds9 mosaic

      $cat foo.fits | xpaset ds9 mosaic wcs
      $cat foo.fits | xpaset ds9 mosaic wcs
      new
      $cat foo.fits | xpaset ds9 mosaic wcs
      mask

      mosaicimage

      Load FITS mosaic image into current frame.

      Syntax:
      mosaicimage [wcs|wcsa...wcsz|iraf|wfpc2] [new|mask] [<filename>]
       
      Example:
      $xpaget ds9 mosaicimage > foo.fits

      $xpaset -p ds9 mosaicimage foo.fits

      $xpaset -p ds9 mosaicimage wcs foo.fits
      $xpaset -p ds9 mosaicimage wcs new foo.fits
      $xpaset -p ds9 mosaicimage wcs mask foo.fits
      $cat foo.fits | xpaset ds9 mosaicimage

      $cat foo.fits | xpaset ds9 mosaicimage wcs
      $cat foo.fits | xpaset ds9 mosaicimage wcs new

      $cat foo.fits | xpaset ds9 mosaicimage wcs mask

      movie
      savempeg

      Create mpeg1 movie from snap shots of the DS9 window. A slice movie cycles though all slices of a cube. A frame movie cycles through all active frames. A 3d movie cycles through specified viewing angles. The default is frame. Optional parameters for 3d: number of frames, azimuth from/to, elevation from/to, slice from/to, oscillate/repeat times.

      Syntax:
      movie
      [slice|frame|3d] <filename>
      movie 3d <filename> [number|azfrom|azto|elfrom|elto|slfrom|slto|oscillate|repeat <#>]
       
      Example:
      $xpaset -p ds9 movie slice ds9.mpg
      $xpaset -p ds9 movie 3d ds9.mpg number 10 azfrom -60 azto 60 oscillate 1

      multiframe

      Load FITS multiple extension file as multiple images.

      Syntax:
      multiframe [<filename>]
       
      Example:
      $xpaset -p ds9 multiframe foo.fits

      $cat foo.fits | xpaset ds9 multiframe
      # not available windows

      nameserver

      Support Name Server functions. Coordinates are in fk5.

      Syntax:
      nameserver [<object>]
                 [name <object>]
                 [server ned-sao|ned-eso|simbad-sao|simbad-eso]
                 [skyformat degrees|sexagesimal]
                 [pan]
                 [crosshair]
                 [open|close]

      Example:
      $xpaget ds9 nameserver
      $xpaget ds9 nameserver server
      $xpaget ds9 nameserver skyformat
      $xpaget ds9 nameserver m31
      $xpaset -p ds9 nameserver m31
      $xpaset -p ds9 nameserver name m31
      $xpaset -p ds9 nameserver server ned-sao
      $xpaset -p ds9 nameserver skyformat sexagesimal
      $xpaset -p ds9 nameserver pan
      $xpaset -p ds9 nameserver crosshair
      $xpaset -p ds9 nameserver open
      $xpaset -p ds9 nameserver close

      nan

      Set image not-a-number color.

      Syntax:
      nan <color>
       
      Example:
      $xpaget ds9 nan
      $xpaset -p ds9 nan red

      nrrd

      Load an NRRD (Nearly Raw Raster Data) file. Optional parameter: array endian.

      Syntax:
      nrrd [<filename>] [little|big]
       
      Example:
      $xpaget ds9 nrrd

      $xpaget ds9 nrrd big
      $xpaset -p ds9 nrrd foo.nrrd

      $xpaset -p ds9 nrrd new foo.nrrd
      $xpaset -p ds9 nrrd mask foo.nrrd
      $cat foo.nrrd | xpaset ds9 nrrd

      $cat foo.nrrd | xpaset ds9 nrrd new
      $cat foo.nrrd | xpaset ds9 nrrd mask

      nvss

      Support for NRAO VLA Sky Survey.

      Syntax:
      nvss []
           [<object>]
           [name <object>]
           [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
           [size <width> <height> degrees|arcmin|arcsec]
           [save yes|no]
           [frame new|current]
           [update frame|crosshair]
           [open|close]
       
      Example:
      $xpaget ds9 nvss name
      $xpaget ds9 nvss coord
      $xpaget ds9 nvss size
      $xpaget ds9 nvss save
      $xpaget ds9 nvss frame
      $xpaset -p ds9 nvss
      $xpaset -p ds9 nvss m31
      $xpaset -p ds9 nvss name m31
      $xpaset -p ds9 nvss coord 00:42:44.404 +41:16:08.78 sexagesimal
      $xpaset -p ds9 nvss size 60 60 arcmin
      $xpaset -p ds9 nvss save yes
      $xpaset -p ds9 nvss frame current
      $xpaset -p ds9 nvss update frame
      $xpaset -p ds9 nvss open
      $xpaset -p ds9 nvss close

      orient

      Controls the orientation of the current frame.

      Syntax:
      orient [none|x|y|xy]
             [open|close]
       
      Example:
      $xpaget ds9 orient
      $xpaset -p ds9 orient xy
      $xpaset -p ds9 orient open
      $xpaset -p ds9 orient close

      pagesetup

      Controls Page Setup options.

      Syntax:
      pagesetup [orient portrait|landscape]
                [scale <numberic>]

                [size letter|legal|tabloid|poster|a4]
       
      Example:
      $xpaget ds9 pagesetup orient
      $xpaget ds9 pagesetup scale
      $xpaget ds9 pagesetup size
      $xpaset -p ds9 pagesetup orient portrait
      $xpaset -p ds9 pagesetup scale 50
      $xpaset -p ds9 pagesetup size poster

      pan

      Controls the current image cursor location for the current frame.

      Syntax:
      pan [<x> <y> <coordsys> [<skyframe>][<skyformat>]] # relative
          [to <x> <y> <coordsys> [<skyframe>][<skyformat>] # absolute
          [open|close]
       
      Example:
      $xpaget ds9 pan # get current image coords
      $xpaget ds9 pan wcs fk4 sexagesimal # get current wcs coords
      $xpaset -p ds9 pan 200 200 image # pan relative
      $xpaset -p ds9 pan to 400 400 physical # pan to physical coords
      $xpaset -p ds9 pan to 13:29:55 47:11:50 wcs fk5 # pan to wcs coords
      $xpaset -p ds9 pan open
      $xpaset -p ds9 pan close

      pixeltable

      Display/Hide the pixel table.

      Syntax:
      pixeltable []
                 [yes|open]
                 [no|close]
       
      Example:
      $xpaget ds9 pixeltable
      $xpaset -p ds9 pixeltable
      $xpaset -p ds9 pixeltable yes
      $xpaset -p ds9 pixeltable open
      $xpaset -p ds9 pixeltable close

      plot

      Display and configure data plots. All plot commands take an optional second command, the plot name. If no plot name is specified, the last plot created is assumed. Plot data is assumed to be a pair of coordinates, with optional error values. The follow are valid data descriptions:

      xy        x and y coordinates
      xyex      x,y coordinates with x errors
      xyey      x,y coordinates with y errors
      xyexey    x,y coordinates with  x and y errors

      To create a new plot, use the plot new command.

      Syntax:
      # create new empty plot window
      plot
      plot [bar|scatter]
           [new [name <plotname>] [line|bar|scatter]]
           [new [name <plotname>] [line|bar|scatter] <title> <xaxis label> <yaxis label>
      xy|xyex|xyey|xyexey]

      # create new plot with data
      plot [new [name <plotname>]
      [line|bar|scatter] stdin] # title, title xaxis, title yaxis, dimension on line 1
           [new [name <plotname>] [line|bar|scatter] <title> <xaxis label> <yaxis label> xy|xyex|xyey|xyexey]

      # load dataset into an existing plot
      plot [<plotname>] [data xy|xyex|xyey|xyexey]

      plot [<plotname>] load <filename> [xy|xyex|xyey|xyexey]
           [<plotname>] save <filename>
           [<plotname>] clear
           [<plotname>] duplicate
           [<plotname>] stats
          
      [<plotname>] list
          
      [<plotname>] loadconfig <filename>
           [<plotname>] saveconfig <filename>
           [<plotname>] pagesetup orient [portrait|landscape]
           [<plotname>] pagesetup size [letter|legal|tabloid|poster|a4]

           [<plotname>] print
           [<plotname>] print destination [printer|file]
           [<plotname>] print command <command>
           [<plotname>] print filename <filename>
           [<plotname>] print color [rgb|gray]
          
      [<plotname>] close

      plot
      [<plotname>] mode [pointer|zoom]

      # configure graph
      plot [<plotname>] axis [x|y] grid [yes|no]
           [<plotname>] axis [x|y] log [yes|no]
           [<plotname>] axis [x|y] flip [yes|no]
           [<plotname>] axis [x|y] auto [yes|no]
           [<plotname>] axis [x|y] min <value>
           [<plotname>] axis [x|y] max <value>

           [<plotname>] axis [x|y] format <string>
          
      [<plotname>] legend [yes|no]
           [<plotname>] legend position [right|left|top|bottom]

           [<plotname>] font [title|labels|numbers] font [times|helvetica|courier]
           [<plotname>] font
      [title|labels|numbers] size <value>
           [<plotname>] font
      [title|labels|numbers] weight [normal|bold]
           [<plotname>] font
      [title|labels|numbers] slant [roman|italic]
           [<plotname>] title <string>
           [<plotname>] title [x|y] <string>
          
      [<plotname>] barmode [normal|stacked|aligned|overlap]

      # configure current dataset
      plot [<plotname>] show [yes|no]
          
      [<plotname>] shape [circle|square|diamond|plus|splus|scross|triangle|arrow]
           [<plotname>] shape fill [yes|no]
           [<plotname>] shape color <value>
           [<plotname>] smooth [step|linear|cubic|quadratic|catrom]
           [<plotname>] color <value>
           [<plotname>] width <value>
           [<plotname>] dash [yes|no]
           [<plotname>] error [yes|no]
           [<plotname>] error color <value>
           [<plotname>] color <value>
           [<plotname>] error width <value>
           [<plotname>] name <string>

      # select current dataset
      plot [<plotname>] select <value>
       
      Example:
      # return all plotnames
      $xpaget ds9 plot


      # create new empty plot window
      $xpaset -p ds9 plot
      $xpaset -p ds9 plot scatter
      $xpaset -p ds9 plot new
      $xpaset -p ds9 plot new bar
      $xpaset -p ds9 plot new name foo
      $xpaset -p ds9 plot new name foo scatter

      # create new plot with data
      $cat foo.dat | xpaset ds9 plot new stdin
      $cat foo.dat | xpaset ds9 plot new name foo stdin
      $cat bar.dat | xpaset ds9 plot new "{The Title}" "{X}" "{Y}" xy
      $cat bar.dat | xpaset ds9 plot new name foo "{The Title}" "{X}" "{Y}" xy

      # load additional dataset into an existing plot
      $cat bar.dat | xpaset ds9 plot data xy # plot additional data
      $cat bar.dat | xpaset ds9 plot foo data xy # plot additional data

      $xpaget ds9 plot stats
      $xpaget ds9 plot list
      $xpaset -p ds9 plot load foo.dat xy # load new dataset with dimension xy
      $xpaset -p ds9 plot save bar.dat # save current dataset
      $xpaset -p ds9 plot clear # clear all datasets
      $xpaset -p ds9 plot duplicate # duplicate current dataset
      $xpaset -p ds9 plot stats
      $xpaset -p ds9 plot list
      $xpaset -p ds9 plot loadconfig foo.plt # load plot configuration
      $xpaset -p ds9 plot saveconfig bar.plt # save current plot configuration
      $xpaset -p ds9 plot pagesetup orient portrait
      $xpaset -p ds9 plot pagesetup size letter
      $xpaset -p ds9 plot print
      $xpaset -p ds9 plot print destination file
      $xpaset -p ds9 plot print command "lp"
      $xpaset -p ds9 plot print filename "foo.ps"
      $xpaset -p ds9 plot print color rgb
      $xpaset -p ds9 plot close # close current plot

      $xpaget ds9 plot mode
      $xpaset -p ds9 plot mode pointer


      # configure plot
      $xpaget ds9 plot axis x grid
      $xpaget ds9 plot axis x log
      $xpaget ds9 plot axis x flip
      $xpaget ds9 plot axis x auto
      $xpaget ds9 plot axis x min
      $xpaget ds9 plot axis x max
      $xpaget ds9 plot axis x format
      $xpaget ds9 plot legend
      $xpaget ds9 plot legend position
      $xpaget ds9 plot font numbers font
      $xpaget ds9 plot font numbers size
      $xpaget ds9 plot font numbers weight
      $xpaget ds9 plot font numbers slant
      $xpaget ds9 plot title
      $xpaget ds9 plot title x
      $xpaget ds9 plot barmode
      $xpaset -p ds9 plot axis x grid yes
      $xpaset -p ds9 plot axis x log yes

      $xpaset -p ds9 plot axis x flip yes
      $xpaset -p ds9 plot axis x auto no
      $xpaset -p ds9 plot axis x min 0
      $xpaset -p ds9 plot axis x max 100
      $xpaset -p ds9 plot axis x format {%f}
      $xpaset -p ds9 plot legend yes # show legend
      $xpaset -p ds9 plot legend position left
      $xpaset -p ds9 plot font numbers font times
      $xpaset -p ds9 plot font numbers size 12
      $xpaset -p ds9 plot font numbers weight bold
      $xpaset -p ds9 plot font numbers slant italic
      $xpaset -p ds9 plot title {The Title}
      $xpaset -p ds9 plot title x {X Axis}
      $xpaset -p ds9 plot barmode aligned

      # configure current dataset
      $xpaget ds9 plot show
      $xpaget ds9 plot shape

      $xpaget ds9 plot shape fill
      $xpaget ds9 plot shape color
      $xpaget ds9 plot smooth
      $xpaget ds9 plot color
      $xpaget ds9 plot width
      $xpaget ds9 plot dash
      $xpaget ds9 plot error
      $xpaget ds9 plot error color
      $xpaget ds9 plot error width
      $xpaget ds9 plot name
      $xpaset -p ds9 plot show yes
      $xpaset -p ds9 plot shape circle
      $xpaset -p ds9 plot shape fill no
      $xpaset -p ds9 plot shape color cyan
      $xpaset -p ds9 plot smooth step
      $xpaset -p ds9 plot color red
      $xpaset -p ds9 plot width 2
      $xpaset -p ds9 plot dash yes
      $xpaset -p ds9 plot error yes
      $xpaset -p ds9 plot error color red

      $xpaset -p ds9 plot error width 2
      $xpaset -p ds9 plot name {My Data}

      # select current dataset
      $xpaget ds9 plot select
      $xpaset -p ds9 plot select 2

      png

      Load PNG image into current frame.

      Syntax:
      png [new|slice] [<filename>]
       
      Example:
      $xpaget ds9 png > foo.png

      $xpaset -p ds9 png foo.png
      $xpaset -p ds9 png new foo.png
      $xpaset -p ds9 png slice foo.png
      $cat foo.png | xpaset ds9 png
      # not available windows
      $cat foo.png | xpaset ds9 png new # not available windows
      $cat foo.png | xpaset ds9 png
      slice # not available windows

      prefs

      Controls various preference settings.

      Syntax:
      prefs [clear]
            [irafalign yes|no]
       
      Example:
      $xpaget ds9 prefs irafalign
      $xpaset -p ds9 prefs clear
      $xpaset -p ds9 prefs iraf yes

      preserve

      Preserve the follow attributes while loading a new image.

      Syntax:
      preserve [pan yes|no]
               [regions yes|no]
       
      Example:
      $xpaget ds9 preserve pan
      $xpaget ds9 preserve regions
      $xpaset -p ds9 preserve pan yes
      $xpaset -p ds9 preserve regions yes

      psprint

      Invokes postscript printing. Please see print for further details.

      print

      Controls printing. Use print option to set printing options. Only available for XPA_METHOD local.

      Syntax:
      print [destination printer|file]
            [command <command>]
            [filename <filename>]
            [color rgb|cmyk|gray]
            [level 1|2]
            [resolution 53|72|75|150|300|600]
       
      Example:
      $xpaget ds9 print destination
      $xpaget ds9 print command
      $xpaget ds9 print filename
      $xpaget ds9 print color
      $xpaget ds9 print level
      $xpaget ds9 print resolution
      $xpaset -p ds9 print
      $xpaset -p ds9 print destination file
      $xpaset -p ds9 print command '{gv -}'
      $xpaset -p ds9 print filename foo.ps
      $xpaset -p ds9 print color cmyk
      $xpaset -p ds9 print level 2
      $xpaset -p ds9 print resolution 75

      raise

      Raise in the window stacking order.

      Syntax:
      raise
       
      Example:
      $xpaset -p ds9 raise

      regions

      Controls regions in the current frame.

      Syntax:
      regions [<filename>]
              [load [all] <filename>]
              [save <filename>]
              [list [close]]
              [epsilon <integer>]
              [show yes|no]
              [showtext yes|no]
              [centroid]
              [centroid auto yes|no]
              [centroid radius <value>|iteration <value>]
              [getinfo]
              [move front]
              [move back]
              [select all]
              [select none]
              [select invert]
              [delete all]
              [delete select]
              [format ds9|xml|ciao|saotng|saoimage|pros|xy]
              [system image|physical|wcs|wcsa...wcsz]
              [sky fk4|fk5|icrs|galactic|ecliptic]
              [skyformat degrees|sexagesimal]
              [strip yes|no]
              [shape <shape>]
              [color &ltcolor>]
              [width <width>]
              [fixed|edit|rotate|delete yes|no]
              [include|exclude|source|background]

              [delim [nl|<char>]]
              [command <marker command>]
              [composite]
              [dissolve]
              [template <filename>]
              [template <filename> at <ra> <dec> <coordsys> <skyframe>]
              [savetemplate <filename>]
              [groups]
              [group new]
              [group <tag> new]
              [group <tag> update]
              [group <tag> select]
              [group <tag> color &ltcolor>]
              [group <tag> copy]
              [group <tag> delete]
              [group <tag> cut]
              [group <tag> font <font>]
              [group <tag> move <int> <int>]
              [group <tag> movefront]
              [group <tag> moveback]
              [group <tag> property <property> yes|no]
              [copy]
              [cut]
              [paste image|physical|wcs|wcsa...wcsz]
              [undo]
              [-format ds9|ciao|saotng|saoimage|pros|xy]
              [-system image|physical|wcs|wcsa...wcsz]
              [-sky fk4|fk5|icrs|galactic|ecliptic]
              [-skyformat degrees|sexagesimal]
              [-delim [nl|<char>]]
              [-prop select|edit|move|rotate|delete|fixed|include|source 1|0]
              [-group <tag>]
              [-strip yes|no]
              [-wcs yes|no]
       
      Example:
      $xpaget ds9 regions
      $xpaget ds9 regions -format ds9 -system wcs -sky fk5 -skyformat sexagesimal -prop edit 1 -group foo
      $xpaget ds9 regions epsilon
      $xpaget ds9 regions show
      $xpaget ds9 regions showtext
      $xpaget ds9 regions centroid auto
      $xpaget ds9 regions centroid radius
      $xpaget ds9 regions centroid iteration
      $xpaget ds9 regions selected
      $xpaget ds9 regions format
      $xpaget ds9 regions system
      $xpaget ds9 regions sky
      $xpaget ds9 regions skyformat
      $xpaget ds9 regions strip
      $xpaget ds9 regions shape
      $xpaget ds9 regions color
      $xpaget ds9 regions width
      $xpaget ds9 regions delim
      $xpaget ds9 regions source
      $xpaget ds9 regions background
      $xpaget ds9 regions include
      $xpaget ds9 regions exclude
      $xpaget ds9 regions selected
      $xpaget ds9 regions groups
      $cat foo.reg | xpaset ds9 regions -format xy -system wcs -sky fk5
      $cat bar.reg | xpaset ds9 regions -format ds9
      $echo "image; circle 100 100 20" | xpaset ds9 regions
      $echo "image; circle 100 100 20" | xpaset ds9 regions
      $echo "fk5; circle 13:29:55 47:11:50 .5'" | xpaset ds9 regions
      $echo "physical; ellipse 100 100 20 40" | xpaset ds9 regions
      $echo "box 100 100 20 40 25" | xpaset ds9 regions
      $echo "image; line 100 100 200 400" | xpaset ds9 regions
      $echo "physical; ruler 200 300 200 400" | xpaset ds9 regions
      $echo "image; text 100 100 # text={Hello, World}" | xpaset ds9 regions
      $echo "fk4; boxcircle point 13:29:55 47:11:50" | xpaset ds9 regions
      $xpaset -p ds9 regions foo.reg
      $xpaset -p ds9 regions -format ciao bar.reg # load as ciao format
      $xpaset -p ds9 regions foo.fits # FITS regions files do not need a format specification
      $xpaset -p ds9 regions load foo.reg # load foo.reg into current frame
      $xpaset -p ds9 regions load all foo.reg # load foo.reg into all frames
      $xpaset -p ds9 regions load '*.reg'# expand *.reg and load into current frame
      $xpaset -p ds9 regions load all '*.reg' # expand *.reg and load into all frames
      $xpaset -p ds9 regions save foo.reg
      $xpaset -p ds9 regions list
      $xpaset -p ds9 regions list close
      $xpaset -p ds9 regions epsilon 5
      $xpaset -p ds9 regions show yes
      $xpaset -p ds9 regions showtext no
      $xpaset -p ds9 regions centroid
      $xpaset -p ds9 regions centroid auto yes
      $xpaset -p ds9 regions centroid radius 10
      $xpaset -p ds9 regions centroid iteration 20
      $xpaset -p ds9 regions getinfo
      $xpaset -p ds9 regions move back
      $xpaset -p ds9 regions move front
      $xpaset -p ds9 regions select all
      $xpaset -p ds9 regions select none
      $xpaset -p ds9 regions select invert
      $xpaset -p ds9 regions delete all
      $xpaset -p ds9 regions delete select
      $xpaset -p ds9 regions format ds9
      $xpaset -p ds9 regions system wcs
      $xpaset -p ds9 regions sky fk5
      $xpaset -p ds9 regions skyformat degrees
      $xpaset -p ds9 regions delim nl
      $xpaset -p ds9 regions strip yes
      $xpaset -p ds9 regions shape ellipse
      $xpaset -p ds9 regions color red
      $xpaset -p ds9 regions width 3
      $xpaset -p ds9 regions edit yes
      $xpaset -p ds9 regions include
      $xpaset -p ds9 regions command '{circle 100 100 20 # color=red}'
      $xpaset -p ds9 regions composite
      $xpaset -p ds9 regions dissolve
      $xpaset -p ds9 regions template foo.tpl
      $xpaset -p ds9 regions template foo.tpl at 13:29:55.92 +47:12:48.02 fk5
      $xpaset -p ds9 regions savetemplate foo.tpl
      $xpaset -p ds9 regions group new
      $xpaset -p ds9 regions group foo new
      $xpaset -p ds9 regions group foo update
      $xpaset -p ds9 regions group foo select
      $xpaset -p ds9 regions group foo color red
      $xpaset -p ds9 regions group foo copy
      $xpaset -p ds9 regions group foo delete
      $xpaset -p ds9 regions group foo cut
      $xpaset -p ds9 regions group foo font {times 14 bold}
      $xpaset -p ds9 regions group foo move 100 100
      $xpaset -p ds9 regions group foo movefront
      $xpaset -p ds9 regions group foo moveback
      $xpaset -p ds9 regions group foo property delete no

      $xpaset -p ds9 regions copy
      $xpaset -p ds9 regions cut
      $xpaset -p ds9 regions paste wcs
      $xpaset -p ds9 regions undo

      restore

      Restore DS9 to a previous state from a backup save set.

      Syntax:
      restore <filename>
       
      Example:
      $xpaset -p ds9 restore ds9.bck

      rgb

      Create RGB frame and control RGB frame parameters.

      Syntax:
      rgb  []
           [red|green|blue]
           [channel [red|green|blue]]
           [view [red|green|blue] [yes|no]]
           [system <coordsys>]
           [lock wcs|crop|slice|bin|scale|scalelimits|colorbar|block|smooth [yes|no]]
           [open|close]
       
      Example:
      $xpaget ds9 rgb channel
      $xpaget ds9 rgb lock wcs
      $xpaget ds9 rgb lock crop
      $xpaget ds9 rgb lock slice
      $xpaget ds9 rgb lock bin
      $xpaget ds9 rgb lock scale
      $xpaset ds9 rgb lock scalelimits
      $xpaget ds9 rgb lock colorbar
      $xpaget ds9 rgb lock block
      $xpaget ds9 rgb lock smooth
      $xpaget ds9 rgb system
      $xpaget ds9 rgb view red
      $xpaget ds9 rgb view green
      $xpaget ds9 rgb view blue
      $xpaset -p ds9 rgb # create new rgb frame
      $xpaset -p ds9 rgb red # set current channel to red
      $xpaset -p ds9 rgb channel red # set current channel to red
      $xpaset -p ds9 rgb view blue no # turn off blue channel
      $xpaset -p ds9 rgb system wcs # set rgb coordinate system
      $xpaset -p ds9 rgb lock wcs yes
      $xpaset -p ds9 rgb lock crop yes
      $xpaset -p ds9 rgb lock slice yes
      $xpaset -p ds9 rgb lock bin yes
      $xpaset -p ds9 rgb lock scale yes
      $xpaset -p ds9 rgb lock scalelimits yes
      $xpaset -p ds9 rgb lock colorbar yes
      $xpaset -p ds9 rgb lock block yes
      $xpaset -p ds9 rgb lock smooth yes
      $xpaset -p ds9 rgb open
      $xpaset -p ds9 rgb close

      rgbarray

      Load raw data array cube into rgb frame.

      Syntax:
      rgbarray [native|big|little]
      rgbarray [new|mask] [[xdim=<x>,ydim=<y>|dim=<dim>],[zdim=3],bitpix=<b>,skip=<s>,endian=[little|big]]
       
      Example:
      $xpaget ds9 rgbarray > foo.arr
      $xpaget ds9 rgbarray little > foo.arr
      $xpaset -p ds9 rgbarray foo.arr[dim=512,zdim=3,bitpix=-32,endian=little]
      $xpaset -p ds9 rgbarray new foo.arr[dim=512,zdim=3,bitpix=
      -32,endian=little]
      $cat foo.arr | xpaset ds9 rgbarray [dim=512,zdim=3,bitpix=-32,endian=little]
      $cat foo.arr | xpaset ds9 rgbarray new [dim=512,zdim=3,bitpix=-32,endian=little]

      rgbcube

      Load FITS rgbcube into rgb frame.

      Syntax:
      rgbcube [new] [<filename>]

      Example:
      $xpaget ds9 rgbcube > foo.fits
      $xpaset -p ds9 rgbcube foo.fits

      $xpaset -p ds9 rgbcube new foo.fits
      $cat foo.fits | xpaset ds9 rgbcube

      $cat foo.fits | xpaset ds9 rgbcube new

      rgbimage

      Load FITS rgbimage into rgb frame.

      Syntax:
      rgbimage [new] [<filename>]
       
      Example:
      $xpaget ds9 rgbimage > foo.fits
      $xpaset -p ds9 rgbimage foo.fits

      $xpaset -p ds9 rgbimage new foo.fits
      $cat foo.fits | xpaset ds9 rgbimage

      $cat foo.fits | xpaset ds9 rgbimage new

      rotate

      Controls the rotation angle (in degrees) of the current frame.

      Syntax:
      rotate [<value>]
             [to <value>]
             [open|close]

      Example:
      $xpaget ds9 rotate
      $xpaset -p ds9 rotate 45
      $xpaset -p ds9 rotate to 30
      $xpaset -p ds9 rotate open
      $xpaset -p ds9 rotate close

      save

      Save loaded image data of current frame as FITS.

      Syntax:
      save
      [fits|rgbimage|rgbcube|mecube|mosaic|mosaicimage] <filename> [image|table|slice]
       
      Example:
      $xpaset -p ds9 save foo.fits

      $xpaset -p ds9 save fits foo.fits image
      $xpaset -p ds9 save fits foo.fits table
      $xpaset -p ds9 save fits foo.fits slice

      $xpaset -p ds9 save rgbimage foo.fits
      $xpaset -p ds9 save rgbcube foo.fits
      $xpaset -p ds9 save mecube foo.fits
      $xpaset -p ds9 save mosaic foo.fits
      $xpaset -p ds9 save mosaicimage foo.fits

      saveimage

      Create a snap shot of the current DS9 window and save in specified image format. If no format specified, the file name extension is used to determine the output format. Optional parameters: jpeg quality (1-100) and tiff compression method.

      Syntax:
      saveimage
      [fits|eps|gif|tiff|jpeg|png] <filename>
      saveimage <filename>.jpeg [1-100]
      saveimage <filename>.tiff [none|jpeg|packbits|deflate]
       
      Example:
      $xpaset -p ds9 saveimage ds9.tiff
      $xpaset -p ds9 saveimage jpeg ds9.jpeg 75

      scale

      Controls the limits and color scale distribution.

      Syntax:
      scale [linear|log|pow|sqrt|squared|asinh|sinh|histequ]
            [log exp <value>]
            [datasec yes|no]
            [limits <minvalue> <maxvalue>]
            [mode minmax|<value>|zscale|zmax]
            [scope local|global]
            [match]
            [match limits]
            [lock [yes|no]]
            [lock limits [yes|no]]
            [open|close]

      Example:
      $xpaget ds9 scale
      $xpaget ds9 scale log exp
      $xpaget ds9 scale datasec
      $xpaget ds9 scale limits
      $xpaget ds9 scale mode
      $xpaget ds9 scale scope
      $xpaget ds9 scale lock
      $xpaget ds9 scale lock limits
      $xpaset -p ds9 scale linear
      $xpaset -p ds9 scale log 100
      $xpaset -p ds9 scale datasec yes
      $xpaset -p ds9 scale histequ
      $xpaset -p ds9 scale limits 1 100
      $xpaset -p ds9 scale mode zscale
      $xpaset -p ds9 scale mode 99.5
      $xpaset -p ds9 scale scope local
      $xpaset -p ds9 scale match
      $xpaset -p ds9 scale match limits
      $xpaset -p ds9 scale lock yes
      $xpaset -p ds9 scale lock limits yes
      $xpaset -p ds9 scale open
      $xpaset -p ds9 scale close

      shm

      Load a shared memory segment into the current frame.

      Syntax:
      shm [<key> [<filename>]]
          [key <key> [<filename>]]
          [shmid <id> [<filename>]]
          [fits [key|shmid] <id> [<filename>]]
          [mosaicimage [iraf|wcs|wcsa...wcsz|wfpc2] [key|shmid] <id> [<filename>]]
          [mosaicimagenext [wcs|wcsa...wcsz] [key|shmid] <id> [<filename>]]
          [mosaic [iraf|wcs|wcsa...wcsz] [key|shmid] <id> [<filename>]]
          [rgbcube [key|shmid] <id> [<filename>]
          [rgbimage [key|shmid] <id> [<filename>]]
          [rgbarray [key|shmid] <id> [xdim=<x>,ydim=<y>|dim=<dim>,zdim=3],bitpix=<b>,[skip=<s>]]
          [array [key|shmid] <id> [xdim=<x>,ydim=<y>|dim=<dim>],bitpix=<b>,[skip=<s>]]
          [startload|finishload]
       
      Example:
      $xpaget ds9 shm
      $xpaset -p ds9 shm 102
      $xpaset -p ds9 shm key 102
      $xpaset -p ds9 shm shmid 102 foo
      $xpaset -p ds9 shm fits key 100 foo
      $xpaset -p ds9 shm mosaicimage iraf key 100 foo
      $xpaset -p ds9 shm mosaicimage wcs key 100 foo
      $xpaset -p ds9 shm mosaicimage wcsa key 100 foo
      $xpaset -p ds9 shm mosaicimage wfpc2 key 100 foo
      $xpaset -p ds9 shm mosaicimagenext wcs key 100 foo
      $xpaset -p ds9 shm mosaic iraf key 100 foo
      $xpaset -p ds9 shm mosaic wcs key 100 foo
      $xpaset -p ds9 shm rgbcube key 100 foo
      $xpaset -p ds9 shm rgbimage key 100 foo
      $xpaset -p ds9 shm rgbarray key 100 [dim=200,zdim=3,bitpix=-32]
      $xpaset -p ds9 shm array shmid 102 [dim=32,bitpix=-32]
      $xpaset -p ds9 shm startload # start a multiple load sequence without updating the display
      $xpaset -p ds9 shm finishload # finish multiple load sequence

      sia

      Support for VO Simple Image Access protocol. The first command will create a new search. All other commands operated on the last search created, unless indicated otherwise.

      Syntax:
      sia [2mass|akari|astrowise|cadc|cxc|mast|sdss|skyview|tgssadr
      ]

          [<ref>] [cancel]
          [<ref>] [clear]
          [<ref>] [close]
          [<ref>] [coordinate <ra> <dec> <coordsys>]
          [<ref>] [crosshair]
          [<ref>] [export sb|tsv <filename>]
          [<ref>] [name <object>]
          [<ref>] [print]
          [<ref>] [retrieve]
          [<ref>] [save <filename>]
          [<ref>] [size <width> <height> degrees|arcmin|arcsec]
          [<ref>] [sky <skyframe>]
          [<ref>] [skyformat <skyformat>]
          [<ref>] [system <coordsys>]
          [<ref>] [update]
       
      Example:
      $xpaget ds9 sia

      $xpaset -p ds9 sia 2mass
      $xpaset -p ds9 sia cancel
      $xpaset -p ds9 sia clear
      $xpaset -p ds9 sia close
      $xpaset -p ds9 sia coordinate 202.48 47.21 fk5
      $xpaset -p ds9 sia crosshair
      $xpaset -p ds9 sia export tsv bar.tsv
      $xpaset -p ds9 sia name m51
      $xpaset -p ds9 sia print
      $xpaset -p ds9 sia retrieve
      $xpaset -p ds9 sia save foo.xml
      $xpaset -p ds9 sia size 1 1 degrees
      $xpaset -p ds9 sia sky fk5
      $xpaset -p ds9 sia skyformat degrees
      $xpaset -p ds9 sia system wcs
      $xpaset -p ds9 sia update

      single

      Select Single Display mode

      Syntax:
      single
       
      Example:
      $xpaget ds9 single
      $xpaset -p ds9 single

      skyview

      Support for SkyView image server at HEASARC.

      Syntax:
      skyview []
              [<object>]
              [name <object>]
              [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
              [size <width> <height> degrees|arcmin|arcsec]
              [pixels <width> <height>]
              [save yes|no]
              [frame new|current]
              [update frame|crosshair]
              [survey <survey>]
              [open|close]

      Example:
      $xpaget ds9 skyview name
      $xpaget ds9 skyview coord
      $xpaget ds9 skyview size
      $xpaget ds9 skyview pixels
      $xpaget ds9 skyview save
      $xpaget ds9 skyview frame
      $xpaget ds9 skyview survey
      $xpaset -p ds9 skyview
      $xpaset -p ds9 skyview m31
      $xpaset -p ds9 skyview name m31
      $xpaset -p ds9 skyview coord 00:42:44.404 +41:16:08.78 sexagesimal
      $xpaset -p ds9 skyview size 60 60 arcmin
      $xpaset -p ds9 skyview pixels 600 600
      $xpaset -p ds9 skyview save yes
      $xpaset -p ds9 skyview frame current
      $xpaset -p ds9 skyview update frame
      $xpaset -p ds9 skyview survey sdssi
      $xpaset -p ds9 skyview open
      $xpaset -p ds9 skyview close

      sleep

      Delays execution for specified number of seconds. Default is 1 second.

      Syntax:
      sleep [#]
       
      Example:
      $xpaset -p ds9 sleep
      $xpaset -p ds9 sleep 2

      smooth

      Smooth current image or set smooth parameters.

      Syntax:
      smooth []
             [yes|no]
             [function boxcar|tophat|gaussian]
             [radius <int>]
             [open|close]
             [match]
             [lock [yes|no]]

      Example:
      $xpaget ds9 smooth
      $xpaget ds9 smooth function
      $xpaget ds9 smooth radius
      $xpaget ds9 smooth lock
      $xpaset -p ds9 smooth
      $xpaset -p ds9 smooth yes
      $xpaset -p ds9 smooth function tophat
      $xpaset -p ds9 smooth radius 4
      $xpaset -p ds9 smooth open
      $xpaset -p ds9 smooth close
      $xpaset -p ds9 smooth match
      $xpaset -p ds9 smooth lock yes

      source

      Source TCL code from a file. Only available for XPA_METHOD local.

      Syntax:
      source [<filename>]
       
      Example:
      $xpaset -p ds9 source foo.tcl

      tcl

      Execute one tcl command. Only available for XPA_METHOD local.

      Syntax:
      tcl [<tcl command>]
       
      Example:
      $echo 'puts "Hello, World"' | xpaset ds9 tcl
      $xpaset -p ds9 tcl 'puts "Hello, World"'

      threads

      Set number of process threads for functions which are multi-threaded.

      Syntax:
      threads #
       
      Example:
      $xpaget ds9 threads
      $xpaset -p ds9 threads 8

      tiff

      Load TIFF image into current frame. Optional parameters: tiff compression method.

      Syntax:
      tiff [new|slice] [<filename>] [none|jpeg|packbits|deflate]
       
      Example:
      $xpaget ds9 tiff > foo.tiff

      $xpaget ds9 tiff jpeg > foo.tiff
      $xpaset -p ds9 tiff foo.tiff

      $xpaset -p ds9 tiff new foo.tiff
      $xpaset -p ds9 tiff slice foo.tiff
      $cat foo.tiff | xpaset ds9 tiff
      # not available windows
      $cat foo.tiff | xpaset ds9 tiff new # not available windows
      $cat foo.tiff | xpaset ds9 tiff
      slice # not available windows

      tile

      Controls the tile display mode.

      Syntax:
      tile []
           [yes|no]
           [mode grid|column|row]
           [grid]
           [grid mode automatic|manual]
           [grid direction x|y]
           [grid layout <col> <row>]
           [grid gap <pixels>]
           [row]
           [column]
       
      Example:
      $xpaget ds9 tile
      $xpaget ds9 tile mode
      $xpaget ds9 tile grid mode
      $xpaget ds9 tile grid direction
      $xpaget ds9 tile grid layout
      $xpaget ds9 tile grid gap
      $xpaset -p ds9 tile
      $xpaset -p ds9 tile yes
      $xpaset -p ds9 tile mode row
      $xpaset -p ds9 tile grid
      $xpaset -p ds9 tile grid mode manual
      $xpaset -p ds9 tile grid direction x
      $xpaset -p ds9 tile grid layout 5 5
      $xpaset -p ds9 tile grid gap 10
      $xpaset -p ds9 tile row
      $xpaset -p ds9 tile column

      update

      Updates the current frame or region of frame. In the second form, the first argument is the number of the fits HDU (starting with 1) and the remaining args are a bounding box in IMAGE coordinates. By default, the screen is updated the next available idle cycle. However, you may force an immediate update by specifying the NOW option.

      Syntax:
      update []
             [# x1 y1 x2 y2]
             [now]
             [now # x1 y1 x2 y2]
       
      Example:
      $xpaset -p ds9 update
      $xpaset -p ds9 update 1 100 100 300 400
      $xpaset -p ds9 update now
      $xpaset -p ds9 update now 1 100 100 300 400

      url

      Load FITS from URL into the current frame

      Syntax:
      url <url>
       
      Example:
      $xpaset -p ds9 url http://foo.bar.edu/foo.fits

      version

      Returns the current version of DS9.

      Syntax:
      version
       
      Example:
      $xpaget ds9 version

      view

      Controls the GUI.

      Syntax:
      view  [layout horizontal|vertical]
            [keyvalue <string>]
            [info yes|no]
            [panner yes|no]
            [magnifier yes|no]
            [buttons yes|no]
            [colorbar yes|no]
            [colorbar horizontal|vertical]
            [colorbar numerics yes|no]
            [graph horizontal|vertical yes|no]
            [filename yes|no[
            [object yes|no]
            [keyword yes|no]
            [minmax yes|no]
            [lowhigh yes|no]
            [units yes|no]
            [image|physical|wcs|wcsa...wcsz yes|no]
            [frame yes|no]
            [red yes|no]
            [green yes|no]
            [blue yes|no]

       
      Example:
      $xpaget ds9 view layout
      $xpaget ds9 view keyvalue
      $xpaget ds9 view info
      $xpaget ds9 view panner
      $xpaget ds9 view magnifier
      $xpaget ds9 view buttons
      $xpaget ds9 view colorbar
      $xpaget ds9 view graph horizontal
      $xpaget ds9 view filename
      $xpaget ds9 view object
      $xpaget ds9 view keyword
      $xpaget ds9 view minmax
      $xpaget ds9 view lowhigh
      $xpaget ds9 view units
      $xpaget ds9 view image
      $xpaget ds9 view wcsa

      $xpaget ds9 view red
      $xpaget ds9 view frame
      $xpaset -p ds9 view layout vertical
      $xpaset -p ds9 view keyvalue BITPIX
      $xpaset -p ds9 view info yes
      $xpaset -p ds9 view panner yes
      $xpaset -p ds9 view magnifier yes
      $xpaset -p ds9 view buttons yes
      $xpaset -p ds9 view colorbar yes
      $xpaset -p ds9 view graph horizontal yes
      $xpaset -p ds9 view filename yes
      $xpaset -p ds9 view object yes
      $xpaset -p ds9 view keyword yes
      $xpaset -p ds9 view minmax yes
      $xpaset -p ds9 view lowhigh yes
      $xpaset -p ds9 view units yes
      $xpaset -p ds9 view wcsa yes
      $xpaset -p ds9 view frame yes
      $xpaset -p ds9 view red yes
      $xpaset -p ds9 view green yes
      $xpaset -p ds9 view blue yes


      vla

      Support for VLA Sky Survey.

      Syntax:
      vla []
            [<object>]
            [name <object>]
            [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
            [size <width> <height> degrees|arcmin|arcsec]
            [save yes|no]
            [frame new|current]
            [update frame|crosshair]
            [survey first|stripe82]
            [open|close]
       
      Example:
      $xpaget ds9 vla name
      $xpaget ds9 vla coord
      $xpaget ds9 vla size
      $xpaget ds9 vla save
      $xpaget ds9 vla frame
      $xpaget ds9 vla survey
      $xpaset -p ds9 vla
      $xpaset -p ds9 vla m31
      $xpaset -p ds9 vla name m31
      $xpaset -p ds9 vla coord 00:42:44.404 +41:16:08.78 sexagesimal
      $xpaset -p ds9 vla size 60 60 arcmin
      $xpaset -p ds9 vla save yes
      $xpaset -p ds9 vla frame current
      $xpaset -p ds9 vla update frame
      $xpaset -p ds9 vla survey stripe82
      $xpaset -p ds9 vla open
      $xpaset -p ds9 vla close

      vlss

      Support for NRAO VLSS Sky Survey.

      Syntax:
      vlss []
           [<object>]
           [name <object>]
           [coord <ra> <dec> degrees|sexagesimal] # in wcs fk5
           [size <width> <height> degrees|arcmin|arcsec]
           [save yes|no]
           [frame new|current]
           [update frame|crosshair]
           [open|close]
       
      Example:
      $xpaget ds9 vlss name
      $xpaget ds9 vlss coord
      $xpaget ds9 vlss size
      $xpaget ds9 vlss save
      $xpaget ds9 vlss frame
      $xpaset -p ds9 vlss
      $xpaset -p ds9 vlss m31
      $xpaset -p ds9 vlss name m31
      $xpaset -p ds9 vlss coord 00:42:44.404 +41:16:08.78 sexagesimal
      $xpaset -p ds9 vlss size 60 60 arcmin
      $xpaset -p ds9 vlss save yes
      $xpaset -p ds9 vlss frame current
      $xpaset -p ds9 vlss update frame
      $xpaset -p ds9 vlss open
      $xpaset -p ds9 vlss close

      vo

      Invoke an connection to a Virtual Observatory site.

      Syntax:
      vo [method xpa|mime]
         [server <url>]
         [internal yes|no]
         [delay #]
         [<url>]
         [connect <url>]
         [disconnect <url>]
         [open|close]

      Example:
      $xpaget ds9 vo
      $xpaget ds9 vo method
      $xpaget ds9 vo server
      $xpaget ds9 vo internal
      $xpaget ds9 vo delay
      $xpaget ds9 vo connect
      $xpaset -p ds9 vo method xpa
      $xpaset -p ds9 vo server "http://foo.bar.edu/list.txt"
      $xpaset -p ds9 vo internal yes
      $xpaset -p ds9 vo delay 15 # keep-alive delay
      $xpaset -p ds9 vo chandra-ed
      $xpaset -p ds9 vo connect chandra-ed
      $xpaset -p ds9 vo disconnect chandra-ed
      $xpaset -p ds9 vo open
      $xpaset -p ds9 vo close

      wcs

      Controls the World Coordinate System for the current frame. If the wcs system, skyframe, or skyformat is modified, the info panel, compass, grid, and alignment will be modified accordingly. Also, using this access point, a new WCS specification can be loaded and used by the current image regardless of the WCS that was contained in the image file. WCS specification can be sent to DS9 as an ASCII file . Please see WCS for more information.

      Syntax:
      wcs [[system] wcs|wcsa...wcsz]
          [[sky] fk4|fk5|icrs|galactic|ecliptic]
          [[skyformat] degrees|sexagesimal]
          [align yes|no]
          [reset [#]]
          [replace [#] <filename>]
          [append [#] <filename>]
          [open|close]

      Example:
      $xpaget ds9 wcs
      $xpaget ds9 wcs system
      $xpaget ds9 wcs sky
      $xpaget ds9 wcs skyformat
      $xpaget ds9 wcs align
      $xpaset -p ds9 wcs wcs
      $xpaset -p ds9 wcs system wcs
      $xpaset -p ds9 wcs fk5
      $xpaset -p ds9 wcs sky fk5
      $xpaset -p ds9 wcs sexagesimal
      $xpaset -p ds9 wcs skyformat sexagesimal
      $xpaset -p ds9 wcs align yes
      $xpaset -p ds9 wcs reset
      $xpaset -p ds9 wcs reset 3
      $xpaset -p ds9 wcs replace foo.wcs
      $xpaset -p ds9 wcs replace 3 foo.wcs
      $xpaset -p ds9 wcs append foo.wcs
      $xpaset -p ds9 wcs append 3 foo.wcs
      $cat foo.wcs | xpaset ds9 wcs replace
      $cat foo.wcs | xpaset ds9 wcs append
      $echo "OBJECT = 'foobar'" | xpaset ds9 wcs append
      $xpaset -p ds9 open
      $xpaset -p ds9 close

      web

      Display specified URL in the web display.

      Syntax:
      web [new|<webname>] [<url>]
          [<webname>] [click back|forward|stop|reload|#]
          [<webname>] [clear]
          [<webname>] [close]
       
      Example:
      $xpaget ds9 web
      $xpaset -p ds9 web www.cnn.com
      $xpaset -p ds9 web new www.cnn.com
      $xpaset -p ds9 web hvweb www.apple.com
      $xpaset -p ds9 web click back
      $xpaset -p ds9 web click 2
      $xpaset -p ds9 web clear
      $xpaset -p ds9 web close

      width

      Set the width of the image display window.

      Syntax:
      width [<value>]
       
      Example:
      $xpaget ds9 width
      $xpaset -p ds9 width 512

      xpa

      Configure XPA.

      Syntax:
      -xpa [disconnect]
           [info]
       
      Example:
      $xpaget ds9 info
      $xpaset -p ds9 disconnect
      $xpaset -p ds9 info

      zscale

      Set Scale Limits based  on the IRAF algorithm.

      Syntax:
      zscale []
             [contrast]
             [sample]
             [line]
       
      Example:
      $xpaget ds9 zscale contrast
      $xpaget ds9 zscale sample
      $xpaget ds9 zscale line
      $xpaset -p ds9 zscale
      $xpaset -p ds9 zscale contrast .25
      $xpaset -p ds9 zscale sample 600
      $xpaset -p ds9 zscale line 120

      zoom

      Controls the current zoom value for the current frame.

      Syntax:
      zoom [<value>]
           [<value> <value>]
           [to <value>]
           [to <value> <value>]
           [in]
           [out]
           [to fit]
           [open|close]
       
      Example:
      $xpaget ds9 zoom
      $xpaset -p ds9 zoom 2
      $xpaset -p ds9 zoom 2 4
      $xpaset -p ds9 zoom to 4
      $xpaset -p ds9 zoom to 2 4
      $xpaset -p ds9 zoom in
      $xpaset -p ds9 zoom out
      <$xpaset -p ds9 zoom to fit
      $xpaset -p ds9 zoom open
      $xpaset -p ds9 zoom close
      saods9/ds9/doc/ref/img/asinh.png000644 000765 000000 00000017336 11763207066 017012 0ustar00joyewheel000000 000000 ‰PNG  IHDRP=×ëþiCCPICC ProfileX…•Y8•áÛÞ3{ï½÷Þ›ì=[ÇÇ(£”Š¢$ddB( #$¡’•$”"*…dÄ÷’úÿ¿ÿ¸¾ë{®ëyßß¹ßû¹Ÿû¹Ÿç½Çyà¨%„†!è&Eí÷ð¹ºíåÃŽ4 Ô€Èˆá¡ú¶¶–à¿¶CÚ¾¿Þ–õßùþc£÷ò'ÙÂØÓ+œ ãZ ÄPrèmyB‡"B·qŒ™È°‚0¾º}ã†mìùwïð8ÚÂx jì ~¦óE}a94Ô`H^þ$˜•Æ:D?‚0TppÈ6> c1Ï’ãû¿dzþ•I øþſײÓ(ŒüÃCƒÑÿOsüß-8(òÏþ&f¿u@Êù‘MÿÐõBƒvÎ4<éHŽ´ß¶ƒŒ}¼IN»2‘É^#‹ß6Aæ@dà < ü|À£Ý+L'ÁW"Ap'óÑþy‚þ€îGO¡_¢'ЯþrþáþÀ ¾ÿ¡ÿ‰îbÀgXª7ÿ3Š¥ƒÒDYÂW=¸+ ÔPêžõÌßÿ«Õo]}á±Ò»ƒ]í£þY{wÿò¿Œñü;âßu2ïw¤îrÈUÉÍÊmüÿcŒ1FSŒ FyYƒì@¶!»ÍÈ»€ùÙ€ìFÞ߯ÿ2 a×*äõZÀ3zƒÈ_¤ÿ¨Qä_Ž]*2°ßᄟùÿÁyGkÿ“ wOXRüÌâïÿXZ¶®2Ê¥ Û¶1ŠÅ¤QJ°ÅõQºð(ÃTõ{•>;¶ŒÚYK øãàïÃÛÝ0$4šìïëÁ§{Ko)>3QFŠOAN^lûÞ߯ö¢ýŽO…XzÿA ¹€ìÖÿ ±Ô ÂnÔâ4!Ø/Љð “IŽúMCm_ЀЧŸö‚@ ÖS¨M Œ9°ŽÀ „­ë‚a8p$‚.‚Kà2(×À pÜÍ  <Ï@x ^ƒ 0 æÀøÖ!ÂBxˆb‡x!aHR€Ô Ȳ„ì!7Èò…HP$€R tèTU@·¡F¨ ê‚ú¡WÐ$4 }‡ÖH5‚ ÁAÈ"Ôú „#ↈAœD¤"rňëˆzDââ%b1‡XF$’É”Fª! ‘6ȽH$y™ŒÌB#«‘MðY|œ@Î#WQ#Š% ï¤)Ê ED…¡Ž¢Î¢.¡®¡êQP/P“¨Ô&æBK¢5ÐfhW´/ú:….CסÃïó4úƒaÁˆbTáÓî† ÀÄbÎb 071­˜~Ì;Ì2‹eÇJbµ±6X6›ˆÍÅ^Ç>À`§±?)¨(x)(L(öR((²(*)Z((>R¬ãèpÂ8 œ Î ;»ŠkÂõâ¦që”ô”¢”Ú”Ž””Ç)s(«)SŽQ.RQQ P©SÙQùS£Ê¡ºEÕI5IµJÍ@-AmH½Ÿ:’:•ºœº•úõ"Áëá÷â#ð©ø üCü8þ' # MíAÚÚ,ÚÚ^Úy:!î(]]#Ý0Ý2=#½<½ }0ýYúJú.ú,ƒƒ1ƒÃI††‡ ‚Œ†ŒDÆŒW3N3a˜D™Ì˜˜R˜n0õ0-030+1;3fÎc¾Ï<Á‚da1c b9Ïr‡eˆe•›UŸÕ›õ k5ëë '››7[2ÛM¶—lkì|ìÆììØï²¿á@qHpØqâ(äxÌ1ÏÉÄ©ÉIäLæ¼Ã9Ê…à’à²çŠå*áêæZææáÞÃÊËý{ž‡…G'€'“§…g–—‘W‡×Ÿ7“÷ï'>f>}¾ ¾¾G| ü\ü¦ü‘üEü=üë¢N 7ÞR ª úf ¶ .ñ Y Å U ã„Õ„ý„³…;„WDDE\D’DîŠÌˆ²‰š‰ÆˆV‰Ž‰áÅtÅÂÄŠÅÅ1âjâââ} e ?‰<‰^I„¤Š¤¿dd¿ZJ]Š$U,5,M-­/%]%=)Ã"c)“ sW括ì^Ù ²²›rÊrArWå^Ë3È›Ë'È7ÉWP *ä) *âMã¿)I*y+*(3*[)')·+ÿRQU!«T«Ìª ©z¨æ««1©ÙªUëTG«¨Ç«7«¯j¨hDhÜÑøª)­¨Y©9£%ªå­uUë¶€6A»H{B‡OÇCçŠÎ„.¿.A·XwJOPÏK¯L¸~€þuý/rdƒ:ƒC Ã#†­FH£=FÉF=Æ ÆNÆ—ŒÇML|MªLö(ï‰ÝÓjŠ6µ0½`:lÆmF4«0[0W5?bþÈ‚ÚÂÁâ’Å”¥„%Ù²É aen•a5f-lM²¾klÌl2lÞØŠÚ†ÙÞ³ÃØÙÚåÙ}°—·³ïp`tpw¨tøáhàxÞñµ“˜S¤S»3­ó~ç ç#—t— WY×#®ÏÜ8ÜüÝöb÷:ï-Û»¼ÏxßÅ}Óû•÷'î: zà𮃃Þw§u'¸×x =\<*=66„b²§™g¾çјMœóÒóÊôšõÖöN÷þè£í“î3ã«í›á;ë§ë—å7ïoèÉÿ[€iÀ倕@›ÀòÀ­ — ›ÁÁÁ$R éQOÈáþPÉÐÄЉ0°‹a d rY8~ ¼!‚ Nr»#Å"OENFéDåEý<ä|¨æ0ýaÒáîh‰è3ÑcLbJcQ±ÄØö8þ¸ãq“Gô…ŽzmŒ??}lϱkÇ)ž —ž°tÂåDÓIî“ÇN¾;µçTU"M"9q8I3éòiÔiÿÓ=gÏäžÙLöJ~š"—’•²q–xöé9ùs9ç¶R}R{Ϋœ/Lä‘Ò†.è^¸–NŸ“þ.Ã*£>“/39sé¢ûÅ®,¥¬ËÙ”Ù‘Ù9–9 ¹B¹i¹—ü.½Ì3È»™Ï•&¥À«` P¯°ú2÷å”ËkWü¯Œí)ª/)Î*Á”D•|¸ê|µ£T­´¢Œ£,¥ìW9©|âšýµGª•\•ç«U‘U³×÷_ï»at£¡Zººè&ËÍ”[àVä­O·=nݱ¸Ó^£VS]+\›_ÇX—\ÕG×/Üõ»;ÑàÖÐßhÞØÞ¤ÙTwOæ^y3sÞ}æûç[([N¶l=ˆy°ÜÚ:ßæÛö®Ý½ýõCׇƒìõ<¶xÜùÄäÉÃýŽÚÍ]]OÕžÞ}¦ò¬¾[¹»î¹ò󺕞ú^ÕÞ†>õ¾¦~­þ–ݶF/ž š >{iý²ÈihdxÿðĈ×ÈÌ« WßF£F×_C%¿¡{“5Î5^üVüíÍ •‰û“F“ÝSS¯ßßͽ¿1}òþCÖGÞ3 3ͳ&³}Ÿö}šž [ŸOüLÿ9ÿ‹Ø—Ú¯z_»\¦¿‘¿m}?»È¾X¾¤´Ô¾l»<þ#øÇúJòOöŸ×VÕV;Ö\Ö>®ÚÀnäüÿÕ´i±9¶¼µJ vR$Ü>>|/‡ë7û ¤ù]í6$œ| v²i5pŽéÖÐMâÌ@‰¢:Ñ)Ìl+E .òÕ)êL|9Í0;½7C ÄìÆr›’ÝãçnQÞ¾(þhxÁ3BÂy"Å¢eb¥â¥W$s¥Ò¤“dâe£å¢ä£â+íU–UA«¼Q­SKU÷×0ÑÒBhMi·ë”èžÒ Ðw4Ð1”4b7Æo˜|ÝóÑô­Ùkó‹!Ë!«ëa›AÛvöƒŽ#Noœß»Ì¹.ºmîÃí§?@Î΃ŽÀàÉDdóâòðó•óÓð· ˆ,zü)„6T)̉žq3²+jêÐz4SŒT¬Iœû‘è£ñ7Ž=9þ6áçIúS‰In§ÉgÎ%W¥tŸýžÊuÞ2íè…ÚôùLÑ‹îYÙsV.‰ç¹åŸ.¸[8}…¡H·8°äÜÕÒÒ–²áòïøJ‰*Óë¾7’ª+n>»õõkn­O]J}õÝž†ù&Š{üÍj÷­[œØ·Zµ™µ=Ô{¤õXí‰b‡l§dwׯӡg7»Ÿïë‘éÙêíé»Ôï3 ð¼¬™1:l3"÷ŠþÕâèÐ릱+oǃß:NhNòOa§æßõ½¯Îù÷ñÀŒÖ,çìê§¡¹šù󟿘|åÿºµ°ù]tÑméâòØŠÂόխõÈÅÍC[[;#3œ#ºƒ<0)Cg y„+byΟ ÑvFÌ{ì}ŠR\eU>õCü­]<ý#F$“.s,K5ë[v&8*s%q—ótðNñ}áÿ 0(x_¨Tø¬H¨¨µ˜¨Ø†xD¾¤¯”‚Ôªt«L¢¬•¯ÜŠ|¯B™b¬’¥2‡ò{•*ÕP5µïê·4Â5uµ˜µ¾kê4èæëÅë4P3¤4ì7J5Ö7^0y°çºiYºy²E’e’U²ušMŽíe»rûj‡«Ž±NÖÎÎ?]^¸Öºåï=·ïÌþsrÞpoô¸M¸æYDÌõJ÷>ë“è{Ü/ÎÿP@x`h)8ˆâêæOŠéÈCчD'Ä$Åž‹Ëè`°:‰‰ô5¤;´2,™n!ɹ5z¨ùpAt\ÌÞX•8ú¸¯GF¾Œï?öüø³„Î';Nu$v$=9ýðL{òÃ”Ž³ÏÏ ¥NœŸK[¾°–¾ž± G×¹¬ñìÞœ–ܺK}ys˜BÁ˺WöEÃq³öjwéTÙÚ5æ ÅJǪÃ× o<©ž»Åp[íŽ{MbmuÝPýfƒh£}ÓÑ{•ÍÃ-¨Š­„¶´öև󙞨wè<Ú•G´þîï=æ½¥ý˜ ¯^Ú uؾz3Æ;^;ùpš<ÛÿåÙ’Öêæöþÿþl»aT(éÀE[ á:sÚø7Gu€ÐSmÙÍýXÀÄ\Y‚°©Ýà H²üá*°j‚†¡%Ba‡G\D4!&8¤2Ò ™ìEQÀ5øTj ­‰>†îÀÐa`®c6±vØ2ì…E% ÀQÚR>¡Ò¥j¤V¦®Á+âëh4hZiMi{é\é¦èIôk §Y˘T™:™÷1e9ÉÊÁz—Í‘m‘=“C…ãç.®.î0NžÇ¼a|‚|oø³àˆå,Â!òŽY$qUñU‰Û’RÂRï¤¯ÊøÈJÊ.É=OUpWTR¢Vú Ü®rEõ˜AÝHC\“Vó'œ?÷é<н¥wU?×à‚áY£$ã“#{™†šùšï·°µ4²Rµ–°á¶¥·£´Ç:`qNÔÎ .œ®"nŠ{ ÷9í÷?0Û½Åã«'?ÑÑë´w‹Ï’Ÿ„¿gÀ¥ÀÁ`’YHb胰ÕpÕˆC‘÷!ÛFŬÄÙ¹Ït,&y"ó”XbËiç3 )çÎɤö¥E¦se¬^ü”=‘;ž÷±`õ [±ÞÕ²âkµ•®¿¬þxëg e÷]¹F£{®÷ƒœh+|xÿñd'åSµîÀž¢¾Ñü/C†ÛG9Æ¢ÆG&uß]ÿÀ5£ù ?7ü9ë«ùÂâ÷´%áåÛ+*?ë×ä×Ëqm¦îøF Làø 2À Ð ÞMˆR…ì  ( *Z¡qhÁ ×÷ÞˆÄÄ(”Gº#Ï#ÛK( ”7ªõ­Š>Àˆ`â1cXl=ÅqŠe\0n®†ŸRQ=¢6£Ä{ãÑ\¢Õ¢¦ ¦ô b ­Œ˜L·˜I,¬¼¬OØHìLì÷8œXÎ\\kÜ%<Ö<ë¼U|'ø½L%…¨„¦…›DN‹Ú‰±ˆˆçH%m¥d¥é¥—eFeÛä*å/*œP$+•TÌTõÔÔÔå5¤5%´ÄµÅu$ueõ”õµ L í™ÄîI1Í3«2o¶xn9nõÍeËn'e¯çàìì”è\ärßõµÛú>®ýº¼&»7y,xŠ=½ò½G}Yý\ü³Fƒx‚=I!ßÂɇÃ["1Q¶‡òÏĨƞŽ{}T6þÔ±7 *'2N~OtHj8ל’²v.8u*mß…¡Œ}™3Y‡s(s¯äiæ¹"\4Pr¼T¹lîZ{eÞõˆjë[¢w š×uuwÓƒîéÝGµ—åRq¾LAãeƒ+]Å6%ƒ¥®e¯¯yU|©Š¹©Îº%r»¡Æ¢v¢>ªßXrO³y°…ÔŠk+}høhêIB§P׳g±Ïe{fúÊ•‡0Ãc¯î¼Vk×xÛ8©T‘"aF¡hdhÊôÒŒB6™¯e:Ìx™QGçæìï!:_~ŽZ™“|ôƒÙkï³öÿ¬³÷:kŸeBÁ_~·?-àwSSSÃçÏŸìgbb‚²²2ìvûœãþW¼téAAA-Ø—§§'©©©äåå1×&]R™S,€ÃáÀd2Ͱ×ÖÖ266Fll¬d›Í—Åbù!=k×®eÓ¦M\½zuöAb ‘œœ,fí;vì•••ÓìSSS"$$DtuuI¶G‰ÈÈH1::*ÙEnn®¨©©§N‹e^MÂÏÏOF§ýK*€‡cÞ1ÇŽ›ÀçÏŸ ©=99)L&“ðððø-ÈCCCB! Eaaá銎ŽåååNû\²…[ZZ¨­­¥²²’©©)4 r¹œû÷ï£Õjxýú5!P©T¼y󆺺:®\¹‚Íf“üÙívîܹCII 6›ææfÖ­['õ¯\¹OOOÜÝÝ%Û‹/ðððÀ××€mÛ¶QYY €Éd¢¾¾«ÕÊøø8MMMÓôoذW¯^9½·Eààà GŽaß¾}hµZ®_¿@NNééé„……ÑÝÝF£!77—–– —/_æâÅ‹ÒÐÐÀÍ›7%ŸõõõlÞ¼™§OŸríÚ5ŒF#2™lNïß¿' @jûùùÑÓÓ€N§ãÆTWWS^^Nkkë´k½½½vê×ã—¢òøúúr÷î]4 ½½½’Ý`0““C~~>2™ ///‚ƒƒX½z5áááxyyGJJ Òµ‰‰‰ÄÄİgÏš››Ù²e ãããsê°Z­¸¹ý»^ÜÝÝq8³ÿ~ÊËËQ*•ÓV.€ÍfÃÇÇÇ©ßE_Bªªªx÷î’說*´Z-ááátuuÍéãû›ý777±±±ô÷÷;ó ƒÔ6„……Ií5kÖ`·Ûg ¯¯˜˜§~=€r¹œööv§•mmmTWW“ŸŸOqq1ð5ØâFQQQ„††¢V«g“ÀØØ˜´RÛÛÛ9xð ð5šÍf4 V«•¡¡!é:‹ÅBOOpêwÑJcc#YYY˜L&”J%oß¾¥¨¨ˆ'Ož`µZ9tè?~¤³³•JÅÀÀmmm¨Õjôz=*•ŠŽŽ>|ø€Z­F¥R1<<ŒJ¥B­Vc0(**¢¢¢øºåär9‹…BÙlF&“QZZÊ… P*•´··söìYŽ?Nii)éééìÞ½›ÜÜ\–/_.éøð!§OŸÆßßßù þÐ{|LNN »Ý.„Âl6 !¾–ƒAX­Öß6OAAhnnžsŒÕj###Rûûúnrrršžþþ~‘••%iwÆ’ªâË—/ ö366&JJJ„Íf›sÜ2!¦'½^‚ÀÀ@àk~ÐétÒò/ӑʘÁÁAîÝ»ÇùóçÙ¹s'? ¸¸˜sçΡÓéèèè˜×áöíÛñðð ¥¥¹\¾xÊÿ ÑÑѤ¥¥ßÐßߟììl¼¼¼ÈÌÌD¯×@vv6 …777âããçu®×ëgO¸ÿGþ»§GGGÅŠ+DYY™d+((XpNY,‡Ðëõ?tŽ^ f”1ÞÞÞÄÇÇ£P(èîî&""ÂåöGèéé!33“ljÑht¹§G¹¤¤$nß¾ €B¡ ;;!'Nœ˜×aQQ«V­ú½*gáÓ§Oܺu €´´4ž={ÆÞ½{]2÷7œÒ»ví¢··¥RI\\œd7›Íóþ\IJJŠôßßߟ„„—Î8/¤'&&„»»»8s挋3ÊÏÓÑÑ!222DRR’ô­Ï•ÌZHGEE ­VëJ-¿L__ŸHMM'OžtùÜNØÔÔ$êêê\­eA´¶¶Š¤¤$—Ï;#êt:^¾|IFF†ëóÉ!==ÝåóJG¹7ÃÖ­[ÉËË›öñq©’’’ÂúõëINNÆf³qôèQ–-[æR RCt|}£}Â¦Ö ‹@úEwOd2V9€ÀνC®Hó¹€r¸cÿ’…PßoοdBˆŽ"DÎü/ÙëÝû 1?Šö—“Ý5uÀ¼ÛÞþ!„ØDô7 ··×ÏnooÖ€z @w¨OlTÜ®.@ï\0h#âAnÀD€$Š@h}`,-pîÀ‚0âA2H‡@>(ÇA¨çÀEÐ ÚÀpô€»`<ÏÁk0¦Á°~‚u‚p¢‡X!nH‡d %HÒ‡L!kÈ ò„ü¡0(J†2 <¨:UCuP tê†îA¡—Ð4-Bk0 `F˜„¥`EX 6m`WØŽ„á ø|®†àø6<?ƒÇá/ð¼Â£˜P$”8J¥ƒ2G9¡üP‘¨dTªU…jDu¡î ž¢Þ¡fQ«h4šÍ–@+£ жh/t:‡.EŸG_F÷¢Ÿ ÇÑóè ÃŽÁ(b 1ö?L &SŒ©Á´cú0#˜˜X–+€ÝƒÕÇÚc° Ø\l¶{;ŒÀ~Ç¡pL8aœ2Π王ÄeàNàêp×qø÷¸%  i  {Š`ŠŠ"Šó×(†)>P¬P)y)(M)=)c)ó(«(;(‡('(—ñD<^o‰÷Ã'ã‹ðñÝøøy†ÀE'˜|û Å„Bá á‘H ªí‰áÄlb5ñq„ø• KE¢R¡²¥ §Ê¡:KuƒêÕ"5‘Z˜Z‡Ú:º˜úõ õG˜†›F…Æž&Šæ(MÍ=š)Zˆ–›V•Ö‘6޶˜¶•v˜vŽO'Bg@çK—AWM×M7N·EÏE¯FïBŸD_FßEÿŠþƒ2ƒCCÃu†7 Œ\ŒŒŒiŒgû§™pL¢L¦LaLLmLÏ™V˜Ù™Õ™=™3˜/02ϳгìaqb9Àr–å.ËVVyV'Ö¬5¬÷X¿²1°)±¹³e²Õ³=f[fçb×ef/`¿ÂþŽË!ÉaË‘ÌQÃ1Äñƒ“ƒS—3”³„ó&çG.j.E.O®<®v®1n,7™Û™;“»™û%ŠG’Ç‘'ƒ§™ç M"“\HÙ¤vÒ;^<¯"¯ï1Þ¼3|L|:|‘||ƒ|«ü‚ü6üiü—øÇˆ*A'î ü´Ìlœ¢ÒŠªF Ë û Ÿ^q9"rKdA”OÔN4[´KtNŒGÌZ,KìªØ¬8·¸µø!ñkâó|öy·%–$E%Ý%‹%ïInJÉII‘z&MÖ–Ž—n–ž"s­É¹äòª Y&@¦Ræ…,¬‘ìAÙ«²‹rbr>r§åžËÓÈɧËß_ÞCÞ¼§vϸ»‚BÂ"VQG1E±Kñ§’ŒR˜R½ÒGe~eOå å×*,*¶*E*T©TMUsUÔ°jzjj½êº–zªúmõ- [[ššš©šÝZ@K[+]«_£m¨£=¨CÔ±Ð)ÔÑeÖuÔ-×}§Ç«ç§W§7§OÖÑ¿ª¿a ee0hHmhcxÊð¿QÑ%£ŸÆªÆiÆ&Ô&v&å&“¦b¦ûL¯š3#³³—æ$ó@óVó5 ‹ÃÏ-¹-,[-×­ô­ŽY½Ú+°7|o—5ÚÚÒºÌzÚFÆ&Ùæž-£­§m“í/;»"»q{ û$ûFo‡‡-G3Ç2Ç'%§CNÏœcœû\\|\Ú\Q®6®5®KnznÇÝ>º+ºçº¿öðHñxìÉçã9àÅæêuÛ›ÞÛϻˇèãésÙ—Â×Õ·ÕãçìwÉíïä)àЈ t l ¢ òê ¦ ö ¾ÂÒÊ:Æ–ö<\*<;|"B%¢8âk¤aduäú>û}-Q„(ÿ¨žhÎè„è‘é˜ü˜O±º±U±qNqñ ñ‘ñà ⠹ Ÿõk’à$ϤÛû¹÷Øÿ6Y-¹qÂäDÇIÒÉü“+¥Þ¥Ã§TN/£/K)›-w(ï?-sº²‚X‘XñéŒÝ™¾J™Êª*šªUsÕ.ÕCgUÎÖ×°×äÕ¬ >÷¦Ö¬öÆy©ó•h/¤_Xªó«{yÑäâzéú³ L 9 ëšì›†š5›Û/‰\ªh¡kÉnÙhÝ×ú©Í­m¤Ý¸ýöe…ËMåô¹W +‰W¯]}ßåÜõôšéµþë×¯Ü ß¨¿)póÌ-¶[Å·©oçv£»S»×zâz{Ãzgúüû&û=úßÞqº3z׿î“‹÷LîÝ¿oxÿî þ`ÿîPï=µö ë ÷>Ò}Ô÷XïñÝ'†Oî=5yú`Äbäñ3›g£ÏŸ¿u|á÷bæeØËÅW±¯Ö^§¾A½ÉyKý¶xŒmìÌ;wõã2ãW&4&î¼7{?2é<9ù!øÃ÷©¤ix:ÿ#ÃÇÓŸ?]ú¬ô¹wÆlfô‹ç—/³±³Ûsy_™¿VÏKÌ_ý¦÷íñ‚ëÂÌbìwøû±œ?ê——îü´ùù~9bykåð*Çjý/å_÷לÖ>¯'lPlœÚݼ¶eºõv;üo,ð7ø üþÆc¿±ÀßXào^ào^ào^ào^ào^ào^ào^àÿo^ Ò+Êk7@!gØáf¾#<•   þ·ý¿y”ßÑ@!¤Ð±„Bx ‹ð 5`Ò:a¸EFõ ý1$Ìl?®‰âe+~ˆ°L%MíOÓB‡¢·d8ǸÆlÁr†õ »4Ç>ήq’¯'_…@§à#¡Âë¢Ôbâ{$ %¥ü¥cÈereÉÉï)R8¬˜®” ¤â¨j FVg×€5f4iujŸÖÉÐ Ò³ÔW4à1Ä.½1¾cÒbZa–ožddébe¾WÛZÑFÚVØŽdÏéÀâÈäÄèÌèÂäÊêÆéÎë!ì)å¥è­ícîëäàp(ðdP]𵇡ïÖ#‘¤} QfÑ>1I±…quñ·ž%Î™ˆ§h¦ÚôOKHÏË(Ïl̺yèaöÛœ¹Üõ|ÂaŽ#âGÕŽYxFeW”´<ñáäæ)Ö2¹r«Óa‡ÏÔWÞ¯ú|–¢Føœamàùœ ë/Î6%šÌ›Ã.min}Ø6wß!Ò©Åëê®Òk­×oLÜ\¾ïæì‘èUéÓï7¿cs×~ÀîžÍ}óAý!ÕÒIÃ4Û>?yrýiõHÖ³Àç&£¢/(^L¿ìyuúuÜ«·bc¨±±wWÆ 'BßLòNn|x9Õ>}ôcÐ'ƒÏ3˜™Ï_žÌvÏu~혿ýmdáÇwÞ.KU?VÌV[Ö8Ös7ÁVÊöö®ÿ©Â; 0†pDå0œ¯¢rЂè!LÖG¦à¡dÂs”‰ÎTÔ4‹tdú`†&ÆYfaWÖ¶[ìŸ8±\BÜJyóôÃÈ—g‹ÏWF7_¢_^3¾áy+9¦ñÎfÜÒÜk<ý¤£¼Ž|||3üÍÑ‚Š‚+BÂûD$DÞ‹–ˆˆý¯”0–X,‘R–z-½ŸÌN¾"c'³ {XND®WÞM~uO±‚”Â}E?%H©BYUù…J¬*ƒj«š•Ú¼úa !Í-¢V“¶…ö¢N‰®²î¸Þ!}iýW™†²†ï uš\4u7c2{`ži¡n±bÙf¾W|ïŒõ›[Û»ûp²Ã’c—Sгž ¥Ë#×nîîBîóW<ӽ̼Y½§|Ú|Óü¬ýùýWÖ%;„È…Ò†.„= o8™´Ï3Ê Z2†)f;v&îY|wBSbyRÞþÄäà®)©ÚåÓDÓ¹33 YpÖú¡¥ìùœ™Üi$Ó?qxüÈøÑ‰c >~-úY¼yœâÓIþR¹SúeNåá§UT¹Yù®>+Vãp.§öÖùÕ:Å‹Iõ=Ä&çæ†K[­¶mM—):|;û¯ uå][¼á|óîmÅîæ^‰¾ËwÌî.ß»6Xþ vxì‰éÈÂèÈ«•1ß÷Ä©…Ú¯n‹m˺ëÔ;þÿͧïì XN,àøVòÜ>ý ÂÍŸÀŠ [e„Z? ……dý÷þÁÈcí‡<='A ¸&æ™’„ /h?tj…†¡Y˜à ø0Ü›(!Ô^T ¡iÑúßÛ‰^ÄHaÂ0͘E„ÃMFvjœ î"nœ¢†bƒÒ‘²ÏŠOÁ$Øúˆ Ä&*aªsÔ‚Ôu4R4´Ú´èÜéè3¶³•Ñ”ñS&3?s?‹?+žõ›Û{-‡Ç:çE.n÷Už7éoÂ(®ów씜ªFžËo¢—Œĵ%ðÏ$«¤Â¥ÕÉÔä÷2²ùr>òê{Øö¬*¼T¼¦T©œ­©êªfª®¦AÖÒâÑf×aÕeÕãÐ'’TLLÌÌó-ª,;¬†ö~°^·e´“²7qðwÌt:‹ð^Sn8w kÏ$¯ïG>~bþ.G{‚VB¤CƒÂjÃ?Dòïó‹ª^ŒUËŽMNJÞ?r@2%/uy/]ÉäË*ÊÆæ¤ænæ<‚?ZV Sø¨8æ8éÄHéÑ2ËÓ¬Ÿ+oWWÔ¤Õ†]ðºèÒàÖx)±µ°½¥ãùUpMú†÷­Òî§}ÔwÌŽÝö€s8ðñ•ŠçŽ/j_ͽ}ç4‘4™;uècÔg‹/³¯¾æ“[xú=èǯŸ™+øÕâ5æõ’Mš­C»ïN ¬@ÈÕH-Â(XDj„ mÈ JD¼ß=‘E¶Cª*á»ð7;ʪC|Ï€6Cg£û1hŒ&óˆõŶàn/®·ðñ플” ”ïñæø[9B#QŒØH%Gu“Ú”zŒ&ŠO[K§K÷>›A‚á9c*“8Ó+æ\–¯¬UlvìöŽDNYÎ9®:n?žiRoŸ<ßÿ @©` ª0ðG‘nÑr±q EI6Éu©qé~r½Ll¼œ‡¼ÑYNEJÅe¥iåQ•{ª7Õ.«7iÔiÖj×®ÓiÒíл¥?dðÚpÖhË„ÁTÜLÏÜÝ"ɲԪsï¨õŠ-›ª½‡C¦c½Óç_®ünîû=.z¾òÆûhøFû5øO’‚܃+BÆÃøÃƒ"Z#×¢ô£ bÆâÄâãî$Ñï÷Hn<°šªw°0m,C,3!k ›%'8÷V>Óáð#CÇÄ Ž®û”Œœ0<Ù}J½ìÖi½ŠáJתù³YçHµÝ|/RÕ_k mæ»4ÖZÑîÕ!Ú¹tµïZÉ€[ªÝ´=ú:îdXÝg|ó lØö1áÉ­‘ðç£w_F¾f}Ó34N7Ñ5é=Eœîøä1Cñ¥uÎyúV·hù}i©tYueüWÆºÐÆÀ–ÿ®ÿù¹ <ß :H²‡’ Jè43ÃÚp8|~ŒÂ¢4PûQ×QÛHGú=Fñ÷V[ÃàBq/( )®SÊS¶ã•ðýÂwb •&ÕwêFšZe:âã^†óŒL©ÌÑ,¡¬Ál¡ìÑ9 ¹.p÷ðLðB|‚ü¦Q‚åBýÂó¢ìbFâñu’o¥éÈÆ2²·å6÷h ‘Æe¢ŠƒjÚ }Ír­:ºúDƒpÃce“j3¼y´Å˜•áÞVÛL»yGÇ^gI—SnX÷)/;ï_¿K‚ÁL!ÇÂðá‡"Ñû2£Ñ1Ùq„ø‚D–¤ÊdÑ—Sµ>Lw͘ÍÚŸM•S™'›çˆãѹ‚Ô"†âóÇ•O<(õ8õ½<³‚ùL]•rõ½ûs“çC/ü¸_¿Ú×´x)¨å]›u{o‡LgåUBWܵ‰&7Ûnstgô|é³îïºË3pèÞÜàޡ·é&Ÿè>=;²õÜa´áÅÚ+í×ioºÞμ#Ž O¨¼×˜Ôø =Å9µ9ýêcç¤Ï3ðL×—ÈYÒìÐ\üWÖ¯]óŽó‹ßòH ­‹º‹#ßݾþýcuéÀOègæ2z9k³’³Š_=ò‹êWîv-cmc=výë†ÿÆëM‹ÍÞ-…­ºmöí#;þÿ]ƒµ³¼nDhDÉLWo÷çÿÝ),4©óÚmôÈ™j±SÛÅŒŸ}½ôL‘+'rlE†îÖÁ!:»_¸ "ÛÁáÞ–ÿ` ÿ(k#c!«ÈŒìudŒ•í?ò”¤@] y‰_´þ;UÁ^&H  FämQ±Öv@pwtœ>‚i<•hëðÎ’¯ŸÞ?rö20þ­ÓÅïÌň|€ñ…D˜î¬™ V¦ ÙIc‘Š/?ŽÔ„™!ßezÿœ%?ðBzâ¾hä}ûÁaȈdL‚Iÿèéþ›Ä`w\2îZ$!õeÈlæü= ™óÍ à‹à?r/d޾ÕE{¥ÿkÎ?;övWCn Ï7þ¬ -„–EïAë ÕÑhe@B3£Ù$Z­„ÖFk¢U‘>e`¦ËÖ¸c?¬Í?®4"QÅ>éÝùïÞzý®vÐÿþ·€ á¹+sV€ÔOîÖ"w`?öÚAÝn;@ÿ³Åø%ìÔ ݈ÈĨ €À’6R5é'A2÷‘’ É’eÈà¿‹hþv|Èœi ‰IDATxíœÌE€¤¨H¬X¡Q#MP”"½†ºŠÔ"UŠ)"U:J€¡ƒR JGA©*¢H±*m|ßÈ.·ûßÞ­ÿÿ½—ÜíÎÌ›²³oÞ¼6›A ¨$$g f c59Ôä ˜Hm”áÔ©SjìØ±*VÛž={Ô¢E‹¢ô´éÛM’hÓw~Më§OŸV/¾ø¢jß¾½Ê!CÐ/_¾¬† ¦|ðAÕ¼ysõÃ?Å —yòäIÕ¹sgõÀ˜>/\¸`ª/^\åÈ‘CMž<9\ñ_ŽL›ÿ3pþüyÿÈW06l¨wîܲÞôéÓõÊ•+µ«nܸ±®]»vH|¯Â~ýúé/¿üR gÕ… Ö#GŽt 6kÖLöÙg޼DK°]%ÁÇ üñÇZ¸”.Z´¨ì«([¶lÑ%K–¼šáqHÔŸ~ú©.T¨¦wö¥K—ô®]»l„×_]?õÔSvš› è5j8ò-‘|n†3fTÕ«WW?þø£Ïÿ ½ÿþûª\¹raë”)SÆÆùùçŸUÕªUí47ÂáÕ‰'yîc”bg?~\U«VÍNsƒØ =l[ŽJq–H­Ï’%K•9sfŸØWÑd+V·ÜrËÕ ¹CÎ\½zµúúë¯Mþ²eËÔŸþiã7Tƒ ²ÓÜ HõêÕËλxñ¢Ú±c‡Ú¼y³Éûþûï Ž…ð믿*ä[M¬,sµÆBÝD…$Ѧó›ûý÷ßU¦L™½œ={VýòË/êùçŸWóçÏWß}÷!dfΜ©ºvíªnºé&GwBDE;M›6U(q({o¿ý¶A#¥bôèÑ)?¸q¶lÙLÿî6%íœÍ8µÈY)&<ކç{(yóæ5ÄXáÆoTuëÖUÏ<óŒEI,XÐøá‡Jdf…¦;v̘©~úé's×îß¿¿)k×®ªT©’Áß¶m›ºÿþûUÍš5MÙ»ï¾k,X þúë/ÓîܹMˆŒ!Q!îˆ.÷ƒ>cÆ -N-Ï´S¶lY‡™Ê«ÍÏ?ÿ\?ýôÓ)б?üðþÇÓ¨Q#½{÷îíÄC†(ú£>Ò¢djL…\ƒA\Úiã‘hƒMžß<‘+u—.]4/b|÷~Û ÄÛ¾}»–])0Ëó~öìÙzîܹžå±.Kˆ¾ãŽ;´¸›õ#<¢9tHq'$ì–bàlõbèWÂe‚ˆ¸u懻Ÿ3gŽ‘Mïºë.#÷†ÃG?¸í¶Û¢C¸:Ñ.ÇÅü^¬X1#§{õŸ$Z¯™‰p>f&b"÷Üs1¥‰xá«ÉR¥Jù‹%Ê#ã´”Q¯±d€ÿzÆ*_äG…‰ÓL¬é'xå…^p8üÖ‹õóÑ¿{ì± øo¼a¼v¡ÆwœÍÂ… •ÈzÆl#²M ã|¨Št[*Û{8pãø­®Ýh”»Ç>Ý}à„9zôhX‚¥^\rZ÷E#;Ôò(á÷Çx 0øçÉ“Ç!«ŸÌKû $‰öÊb&PÀpŸ3gÎ+%ÿ\béСƒ ˜ÁÈ/Z¸zì±Ç8ÑHÐwŸ>}±-Z´PÏ>ûl4º«>þ×D‹ ¿ÿwÞ©²fÍòňÖ8ðLáz%F ÚA'xÑ&ïÞ½»:xð zòÉ'ÕâÅ‹£nøí·ßÔ¼yóÌ"gþˆ­¸îºëŒ§…˜÷BÎeZ DKtQ«V­mJ@²zíµ×ÔþýûùîŠS‘"ELö”)S 1¸qb•æÄÀí·ßnw±öíÛ×¥¹Ep ÏG0‰hy‘ÄЯðt M@æÃëe£eË–Æ#I«D¸çÁe wç—/_^}ûí·fÑ´mÛÖ¸¤áþì¡·¬¿­‡B7eMš4±½ƒElïÞ½Æ>–/_>9ôæ›oû"6A¶ÆP ‘öjÉ’%¡P⢌½Ç\±{öì©p£¾üòË .Šh-Bá!p©zɼéù(w€8è² ,K{)ïYœ†`é£@ªB… &Ê 7ôŠ+ìÀ¯1`¦KË.åà´hplÁâò3i¯Î#•OT+6ÒÀB‹£ÙZµj)äÓ­[·š‰&HîûÌqùˆ#B¹Ÿ¶Bá`EaçClY¿~½Ù‚K”(aΙQ8‹‰×€" s 8=1Áá8l`¯{t ¬¡ˆc?´–Íêq¯l¯ŽÒ’ÿꫯšøQéŸû!;ÁòåË —œ0a‚’£(f'ñK°D 7N 2$䤦e>¨ ó Ì ‚¸ ÜÆ¢ÑºukÓ42%Db…)¦µ??õ9!q&¤Ò§Õ¦Ž‰“÷Á)v5]/pˆ mܸѬîÀеO>ùĸ ½!%5ø¬Y³ŒH‚|”Þ€˜C)âñoeAv„N:©ìÙ³+8î7ß|£î½÷Þˆ®Š× ¸á†LTŠÄ!‡ Í)%Ljär/ÐHJâL“–,jµˆÍ H0Ž3fŒUôŠâÛ»woG» ÌcüøñFÉãÝ Â{.Ñ>|ØÄ~vìØÑÑ ò^àqGá•DjVšà3/!`iŽëŽöÖç¿Í#–ôî»ïV 4°«Â= ”ÆÍ $~˜›ÆøÕW_…ª’ê2‚Á_zé%»>òŠ$ïQ†9BÇ™É ‡wÞyÇÆMë ï9˜%Å:IÁ‚ úf2Ÿáh…ùv!–ÖQ äfÚ Ý`DKÙr´TÔ²íXYé~}î¹çô+¯¼b÷#îD-+Y gÑ2v~¤n”¢…L“b6ÒrËD_EªH´#U Qš¦Äb åeja(ZÃM8ã: ´~¢ D¢KÓóBH(t,úLô-–»?Ñ ´ˆ”zÒ¤Iv^$nä$†E׳)›he¥h9©I‚æì< ¦ slÚ$"ü'\CKDyÈ´¼jÕ*Í$¼0&…I 4PÎT™˜X± h9C¥åa$»ˆH[¢dé=zh‘ÁµìzZ¶ßˆ´®Þ…ˆ%ZÒ5 Ú „ŒbÉâ—“%ZÌ~ö;sã¦6-œZwëÖMË™7Ï&ÖX6‘íP`98t豺OtºY{jÒÖÈù&­ÔÚHÉàÀ8ƒ‹S @(¢ÛÇ®QP8@SÞ,òëÔ©cðùS»Ø‘£ ¬Ä:‹¾Ñ8ÉÜë™$ä%Œí@ !y5’š|0Œãöƒé„qà°àÄ)md*“‰äüZ´†©Æ ؈9Ëï¶£q¢±ÃM«ˆ‘àK)œFµ;ÐÅ*K^ýÍÀ­·Þê1ÂXˆ£Ø§±óÃíùe7§WZì¾Z¶yÓ<Ú1üÜ@9š£h³tã J ßÐ"뚨I¬ƒÍ‘ÁA±“¯ªXÕ“×ÿè ¤PÄ"¼€ìædÛ6—Ïýðq äV',€ƒÖ«WÏŽSE Áˆ>uêT³ùŒœ£;~8,Š"îX8¯˜]ÌwÒÃØo1yˆÑB`ˆ¸?þøc%²©¯ " c7 `tFä Ú ÀýG ÙIøÌ@Ôˆ–éÄ5 Ñq~Êú„Ïÿcš“OÉHwE,p°˜¨ˆÄ,•„ä ¤vþœ—ªàe§¿IEND®B`‚saods9/ds9/doc/ref/img/log.png000644 000765 000000 00000017234 11343041232 016447 0ustar00joyewheel000000 000000 ‰PNG  IHDRN ¼TN7­iCCPICC ProfilexíZgTM³î™M°»äœ—œa ’sÎ 9çœ%ƒ’$H*‚ˆ(’$Š‘¤((#‚*‚Š€Ä;àëýÎ=ßù~ÝûïÚçÌ̳ÕÕÕ½Ss¦kê)DK½"#Ca@XxL”µ¡ÉÑÉ™„{ €ô€  ¼|¢#µ­¬Ì•ÿЖGm¤HîØr®x™.÷0Ôõrm¶¨—ÿôGL…Ld…~cßìý'ìàø˜ÈDçðö ôBú¡*KDÙZë"øÄ€]Lùr{ïbº©ìåÛ¢Oòò @0;ío콃É;8Î'±ÏެK9°¾~Ñ>Ct|}£}Â¦Ö ‹@úEwOd2V9€ÀνC®Hó¹€r¸cÿ’…PßoοdBˆŽ"DÎü/ÙëÝû 1?Šö—“Ý5uÀ¼ÛÞþ!„ØDô7 ··×ÏnooÖ€z @w¨OlTÜ®.@ï\0h#âAnÀD€$Š@h}`,-pîÀ‚0âA2H‡@>(ÇA¨çÀEÐ ÚÀpô€»`<ÏÁk0¦Á°~‚u‚p¢‡X!nH‡d %HÒ‡L!kÈ ò„ü¡0(J†2 <¨:UCuP tê†îA¡—Ð4-Bk0 `F˜„¥`EX 6m`WØŽ„á ø|®†àø6<?ƒÇá/ð¼Â£˜P$”8J¥ƒ2G9¡üP‘¨dTªU…jDu¡î ž¢Þ¡fQ«h4šÍ–@+£ жh/t:‡.EŸG_F÷¢Ÿ ÇÑóè ÃŽÁ(b 1ö?L &SŒ©Á´cú0#˜˜X–+€ÝƒÕÇÚc° Ø\l¶{;ŒÀ~Ç¡pL8aœ2Π王ÄeàNàêp×qø÷¸%  i  {Š`ŠŠ"Šó×(†)>P¬P)y)(M)=)c)ó(«(;(‡('(—ñD<^o‰÷Ã'ã‹ðñÝøøy†ÀE'˜|û Å„Bá á‘H ªí‰áÄlb5ñq„ø• KE¢R¡²¥ §Ê¡:KuƒêÕ"5‘Z˜Z‡Ú:º˜úõ õG˜†›F…Æž&Šæ(MÍ=š)Zˆ–›V•Ö‘6޶˜¶•v˜vŽO'Bg@çK—AWM×M7N·EÏE¯FïBŸD_FßEÿŠþƒ2ƒCCÃu†7 Œ\ŒŒŒiŒgû§™pL¢L¦LaLLmLÏ™V˜Ù™Õ™=™3˜/02ϳгìaqb9Àr–å.ËVVyV'Ö¬5¬÷X¿²1°)±¹³e²Õ³=f[fçb×ef/`¿ÂþŽË!ÉaË‘ÌQÃ1Äñƒ“ƒS—3”³„ó&çG.j.E.O®<®v®1n,7™Û™;“»™û%ŠG’Ç‘'ƒ§™ç M"“\HÙ¤vÒ;^<¯"¯ï1Þ¼3|L|:|‘||ƒ|«ü‚ü6üiü—øÇˆ*A'î ü´Ìlœ¢ÒŠªF Ë û Ÿ^q9"rKdA”OÔN4[´KtNŒGÌZ,KìªØ¬8·¸µø!ñkâó|öy·%–$E%Ý%‹%ïInJÉII‘z&MÖ–Ž—n–ž"s­É¹äòª Y&@¦Ræ…,¬‘ìAÙ«²‹rbr>r§åžËÓÈɧËß_ÞCÞ¼§vϸ»‚BÂ"VQG1E±Kñ§’ŒR˜R½ÒGe~eOå å×*,*¶*E*T©TMUsUÔ°jzjj½êº–zªúmõ- [[ššš©šÝZ@K[+]«_£m¨£=¨CÔ±Ð)ÔÑeÖuÔ-×}§Ç«ç§W§7§OÖÑ¿ª¿a ee0hHmhcxÊð¿QÑ%£ŸÆªÆiÆ&Ô&v&å&“¦b¦ûL¯š3#³³—æ$ó@óVó5 ‹ÃÏ-¹-,[-×­ô­ŽY½Ú+°7|o—5ÚÚÒºÌzÚFÆ&Ùæž-£­§m“í/;»"»q{ û$ûFo‡‡-G3Ç2Ç'%§CNÏœcœû\\|\Ú\Q®6®5®KnznÇÝ>º+ºçº¿öðHñxìÉçã9àÅæêuÛ›ÞÛϻˇèãésÙ—Â×Õ·ÕãçìwÉíïä)àЈ t l ¢ òê ¦ ö ¾ÂÒÊ:Æ–ö<\*<;|"B%¢8âk¤aduäú>û}-Q„(ÿ¨žhÎè„è‘é˜ü˜O±º±U±qNqñ ñ‘ñà ⠹ Ÿõk’à$ϤÛû¹÷Øÿ6Y-¹qÂäDÇIÒÉü“+¥Þ¥Ã§TN/£/K)›-w(ï?-sº²‚X‘XñéŒÝ™¾J™Êª*šªUsÕ.ÕCgUÎÖ×°×äÕ¬ >÷¦Ö¬öÆy©ó•h/¤_Xªó«{yÑäâzéú³ L 9 ëšì›†š5›Û/‰\ªh¡kÉnÙhÝ×ú©Í­m¤Ý¸ýöe…ËMåô¹W +‰W¯]}ßåÜõôšéµþë×¯Ü ß¨¿)póÌ-¶[Å·©oçv£»S»×zâz{Ãzgúüû&û=úßÞqº3z׿î“‹÷LîÝ¿oxÿî þ`ÿîPï=µö ë ÷>Ò}Ô÷XïñÝ'†Oî=5yú`Äbäñ3›g£ÏŸ¿u|á÷bæeØËÅW±¯Ö^§¾A½ÉyKý¶xŒmìÌ;wõã2ãW&4&î¼7{?2é<9ù!øÃ÷©¤ix:ÿ#ÃÇÓŸ?]ú¬ô¹wÆlfô‹ç—/³±³Ûsy_™¿VÏKÌ_ý¦÷íñ‚ëÂÌbìwøû±œ?ê——îü´ùù~9bykåð*Çjý/å_÷לÖ>¯'lPlœÚݼ¶eºõv;üo,ð7ø üþÆc¿±ÀßXào^ào^ào^ào^ào^ào^ào^àÿo^ Ò+Êk7@!gØáf¾#<•   þ·ý¿y”ßÑ@!¤Ð±„Bx ‹ð 5`Ò:a¸EFõ ý1$Ìl?®‰âe+~ˆ°L%MíOÓB‡¢·d8ǸÆlÁr†õ »4Ç>ήq’¯'_…@§à#¡Âë¢Ôbâ{$ %¥ü¥cÈereÉÉï)R8¬˜®” ¤â¨j FVg×€5f4iujŸÖÉÐ Ò³ÔW4à1Ä.½1¾cÒbZa–ožddébe¾WÛZÑFÚVØŽdÏéÀâÈäÄèÌèÂäÊêÆéÎë!ì)å¥è­ícîëäàp(ðdP]𵇡ïÖ#‘¤} QfÑ>1I±…quñ·ž%Î™ˆ§h¦ÚôOKHÏË(Ïl̺yèaöÛœ¹Üõ|ÂaŽ#âGÕŽYxFeW”´<ñáäæ)Ö2¹r«Óa‡ÏÔWÞ¯ú|–¢Føœamàùœ ë/Î6%šÌ›Ã.min}Ø6wß!Ò©Åëê®Òk­×oLÜ\¾ïæì‘èUéÓï7¿cs×~ÀîžÍ}óAý!ÕÒIÃ4Û>?yrýiõHÖ³Àç&£¢/(^L¿ìyuúuÜ«·bc¨±±wWÆ 'BßLòNn|x9Õ>}ôcÐ'ƒÏ3˜™Ï_žÌvÏu~혿ýmdáÇwÞ.KU?VÌV[Ö8Ös7ÁVÊöö®ÿ©Â; 0†pDå0œ¯¢rЂè!LÖG¦à¡dÂs”‰ÎTÔ4‹tdú`†&ÆYfaWÖ¶[ìŸ8±\BÜJyóôÃÈ—g‹ÏWF7_¢_^3¾áy+9¦ñÎfÜÒÜk<ý¤£¼Ž|||3üÍÑ‚Š‚+BÂûD$DÞ‹–ˆˆý¯”0–X,‘R–z-½ŸÌN¾"c'³ {XND®WÞM~uO±‚”Â}E?%H©BYUù…J¬*ƒj«š•Ú¼úa !Í-¢V“¶…ö¢N‰®²î¸Þ!}iýW™†²†ï uš\4u7c2{`ži¡n±bÙf¾W|ïŒõ›[Û»ûp²Ã’c—Sгž ¥Ë#×nîîBîóW<ӽ̼Y½§|Ú|Óü¬ýùýWÖ%;„È…Ò†.„= o8™´Ï3Ê Z2†)f;v&îY|wBSbyRÞþÄäà®)©ÚåÓDÓ¹33 YpÖú¡¥ìùœ™Üi$Ó?qxüÈøÑ‰c >~-úY¼yœâÓIþR¹SúeNåá§UT¹Yù®>+Vãp.§öÖùÕ:Å‹Iõ=Ä&çæ†K[­¶mM—):|;û¯ uå][¼á|óîmÅîæ^‰¾ËwÌî.ß»6Xþ vxì‰éÈÂèÈ«•1ß÷Ä©…Ú¯n‹m˺ëÔ;þÿͧïì XN,àøVòÜ>ý ÂÍŸÀŠ [e„Z? ……dý÷þÁÈcí‡<='A ¸&æ™’„ /h?tj…†¡Y˜à ø0Ü›(!Ô^T ¡iÑúßÛ‰^ÄHaÂ0͘E„ÃMFvjœ î"nœ¢†bƒÒ‘²ÏŠOÁ$Øúˆ Ä&*aªsÔ‚Ôu4R4´Ú´èÜéè3¶³•Ñ”ñS&3?s?‹?+žõ›Û{-‡Ç:çE.n÷Už7éoÂ(®ów씜ªFžËo¢—Œĵ%ðÏ$«¤Â¥ÕÉÔä÷2²ùr>òê{Øö¬*¼T¼¦T©œ­©êªfª®¦AÖÒâÑf×aÕeÕãÐ'’TLLÌÌó-ª,;¬†ö~°^·e´“²7qðwÌt:‹ð^Sn8w kÏ$¯ïG>~bþ.G{‚VB¤CƒÂjÃ?Dòïó‹ª^ŒUËŽMNJÞ?r@2%/uy/]ÉäË*ÊÆæ¤ænæ<‚?ZV Sø¨8æ8éÄHéÑ2ËÓ¬Ÿ+oWWÔ¤Õ†]ðºèÒàÖx)±µ°½¥ãùUpMú†÷­Òî§}ÔwÌŽÝö€s8ðñ•ŠçŽ/j_ͽ}ç4‘4™;uècÔg‹/³¯¾æ“[xú=èǯŸ™+øÕâ5æõ’Mš­C»ïN ¬@ÈÕH-Â(XDj„ mÈ JD¼ß=‘E¶Cª*á»ð7;ʪC|Ï€6Cg£û1hŒ&óˆõŶàn/®·ðñ플” ”ïñæø[9B#QŒØH%Gu“Ú”zŒ&ŠO[K§K÷>›A‚á9c*“8Ó+æ\–¯¬UlvìöŽDNYÎ9®:n?žiRoŸ<ßÿ @©` ª0ðG‘nÑr±q EI6Éu©qé~r½Ll¼œ‡¼ÑYNEJÅe¥iåQ•{ª7Õ.«7iÔiÖj×®ÓiÒíл¥?dðÚpÖhË„ÁTÜLÏÜÝ"ɲԪsï¨õŠ-›ª½‡C¦c½Óç_®ünîû=.z¾òÆûhøFû5øO’‚܃+BÆÃøÃƒ"Z#×¢ô£ bÆâÄâãî$Ñï÷Hn<°šªw°0m,C,3!k ›%'8÷V>Óáð#CÇÄ Ž®û”Œœ0<Ù}J½ìÖi½ŠáJתù³YçHµÝ|/RÕ_k mæ»4ÖZÑîÕ!Ú¹tµïZÉ€[ªÝ´=ú:îdXÝg|ó lØö1áÉ­‘ðç£w_F¾f}Ó34N7Ñ5é=Eœîøä1Cñ¥uÎyúV·hù}i©tYueüWÆºÐÆÀ–ÿ®ÿù¹ <ß :H²‡’ Jè43ÃÚp8|~ŒÂ¢4PûQ×QÛHGú=Fñ÷V[ÃàBq/( )®SÊS¶ã•ðýÂwb •&ÕwêFšZe:âã^†óŒL©ÌÑ,¡¬Ál¡ìÑ9 ¹.p÷ðLðB|‚ü¦Q‚åBýÂó¢ìbFâñu’o¥éÈÆ2²·å6÷h ‘Æe¢ŠƒjÚ }Ír­:ºúDƒpÃce“j3¼y´Å˜•áÞVÛL»yGÇ^gI—SnX÷)/;ï_¿K‚ÁL!ÇÂðá‡"Ñû2£Ñ1Ùq„ø‚D–¤ÊdÑ—Sµ>Lw͘ÍÚŸM•S™'›çˆãѹ‚Ô"†âóÇ•O<(õ8õ½<³‚ùL]•rõ½ûs“çC/ü¸_¿Ú×´x)¨å]›u{o‡LgåUBWܵ‰&7Ûnstgô|é³îïºË3pèÞÜàޡ·é&Ÿè>=;²õÜa´áÅÚ+í×ioºÞμ#Ž O¨¼×˜Ôø =Å9µ9ýêcç¤Ï3ðL×—ÈYÒìÐ\üWÖ¯]óŽó‹ßòH ­‹º‹#ßݾþýcuéÀOègæ2z9k³’³Š_=ò‹êWîv-cmc=výë†ÿÆëM‹ÍÞ-…­ºmöí#;þÿ]ƒµ³¼nDhDÉLWo÷çÿÝ),4©óÚmôÈ™j±SÛÅŒŸ}½ôL‘+'rlE†îÖÁ!:»_¸ "ÛÁáÞ–ÿ` ÿ(k#c!«ÈŒìudŒ•í?ò”¤@] y‰_´þ;UÁ^&H  FämQ±Öv@pwtœ>‚i<•hëðÎ’¯ŸÞ?rö20þ­ÓÅïÌň|€ñ…D˜î¬™ V¦ ÙIc‘Š/?ŽÔ„™!ßezÿœ%?ðBzâ¾hä}ûÁaȈdL‚Iÿèéþ›Ä`w\2îZ$!õeÈlæü= ™óÍ à‹à?r/d޾ÕE{¥ÿkÎ?;övWCn Ï7þ¬ -„–EïAë ÕÑhe@B3£Ù$Z­„ÖFk¢U‘>e`¦ËÖ¸c?¬Í?®4"QÅ>éÝùïÞzý®vÐÿþ·€ á¹+sV€ÔOîÖ"w`?öÚAÝn;@ÿ³Åø%ìÔ ݈ÈĨ €À’6R5é'A2÷‘’ É’eÈà¿‹hþv|ÈœiªIDAThíYiHT_?.•-f XQJ&õ¡=+¢ °l!Û´B30 "¢"JÛDêCF–¡´H}È 2H­ @MͲ2‚V ÚWÊl%o÷wâ]fÆ™÷Þ8¾ùÛŸÌ̹÷ž»{ιçþÆGH¢ä¶|Ýîñu(//§êêjËg?zô(½{÷Îpž¿BqÅÅÅtçÎ=z´á†<HHH ŒŒ úøñ£þPpU«éׯ_âÕ«W-šæáÇ"&&¦E}Ívjjj²•‡$æÏŸoWçX°ÜâÞ¼yCñññ´cÇýtѺuëVZ°`‹VϪŸ?N«W¯¦ÌÌL»"##éñãÇTYYiWo[°\q={ö¤qãÆÙÎišÿþý;µŠ‹6444›700:uêD˜Ç‘Ž9âX­Êþгñññ±½¦¦†îÝ»G4gÎòóóãöëׯÓíÛ·©}ûö4räHzñâo*$$Ä®? ¯_¿¦[·nÑÀÉßߟúõëGµµµÔ½{w £+W®Ð°aèC‡Ü‡y[‚â°†Ÿ?ÚV3ß·o_:qâD³z­Âr‹Ó&Ò~aAöK–,!XÁŒ3HÆÞTVV%&&Ò©S§hÛ¶môôéSîEÚÚqû?žâââX7!.U«VÑÙ³géòåËôùógÛnnñPêû÷ï]öñŠÅÙξ}ûv*,,䪤¤$Ú´i§×®]£Î;s}ll,ݼy“k@P\ «ÌÍÍ¥ .pm°NXbéúõëiÀ€| °ÀcÇŽ±ÜÛ·o);;›ù¡C‡ÒäÉ“™wõ+ìÚµ««fòºÅÉÛ•|}ÿL‹ßˆˆBÝÌ™3Ù½®^½Jò&¥eË–ÑàÁƒ©K—.Êò°‹ôôt¶*ð—.]¢ððpVÊ P°vpÓnݺñá@ã;vìq]zöì >Ü¥Œ×-±n„S}úô‰FŒÁ§»nÝ:ÞtZZi›[´h!&"^»òóó9.åääÐĉÙ¥ÛæÎKH–a-C† áúíÙ³‡’““Áš"$Û›7ov)k¹â'p­#˜¿|ù’öîÝKpѨ¨(zôè­\¹’úôéîk‚›ÁbÆŒÃqéHJJ ­X±‚7EAnÒ¤IJOž<¡Ó§O³ráöÁÁÁ´fÍvsðzˆ‚`H?07õ°ô)S¦pÙé—cbç2â»wïŠ>¨éNž<)êëëÅýû÷Å7Ä„´4n—Á^>|˜yô•ñŠù¯_¿Š?~ð§±±Q%­Xñî2O¦­Û7Z› yˆsçÎ i•¬¼ýû÷ [eœ?^TUUY¾Ö¼¼~ü8mÙ²…ÆŽK%%%<Ö®]»8H"F!O2¢Q£Fñ-WWWGgΜ1ÿ«ÚqË"ï©Ë¡GünC`NMM%XžKxË•––r aæé„~ëOŽ~ŒÀ*ó!ÝF5íܹSñÿ˜?h–ã©Ë‚•äí§r®¶nEF`§YÒÌ>•«Ú ã9rèÐ!®‚á®RÏ*—²•uäwïÞÍ9c½Õe$¿–/_îr*€”H²#áá 5³8 6aÂN,ËÊÊ(::ZÿíÛ72ú(a7 &òííf7G"-Ó]¥A°]»vœp#¡ö˜œÅ¬/_¾™M‹µk×:knõ:$›@\¥e·hìÅ‹ÛÅd£A$( ***ŒÄtÛZÞ‰xKnذÁãƒ13€·ÁN#ÒÌšÆ8@<ÀÃz÷îmfŒV‘ñ؉Å”f6ÔÌâèʧ Íž=ÛLKd¬;µÅ”šœÞ¯²¸þýû3þˆgãÆz},o³ ìÔnRjrz¿JqH#ð6œ5k–ž¼WÚôÀ΃’-Ø9hÐ vjïk=°0)ÍlR¹ê¼yóÚ„Ò°h ìÔ6 AAAœ‡áY°@%R ìÔävâÍ ËÚ·oŸ;µv`pøÏÃ#Ò½s½Ô(ÿh .œ2‰T°/^2glK´$AO!+¦N*$È)€ÏÉ?uÄ´iÓÔj¥×ˆ¥K— ù÷ž ¯¾öàÁ1}út%ÛR¦ÍàqŽhm°ã›)×â¬Üfçl±ž‚fAJgs;Ö)<Î#÷Rç¶vþ‚tใ"—üIEND®B`‚saods9/ds9/doc/ref/img/pow.png000644 000765 000000 00000015471 11343041232 016474 0ustar00joyewheel000000 000000 ‰PNG  IHDR3“&­iCCPICC ProfilexíZgTM³î™M°»äœ—œa ’sÎ 9çœ%ƒ’$H*‚ˆ(’$Š‘¤((#‚*‚Š€Ä;àëýÎ=ßù~ÝûïÚçÌ̳ÕÕÕ½Ss¦kê)DK½"#Ca@XxL”µ¡ÉÑÉ™„{ €ô€  ¼|¢#µ­¬Ì•ÿЖGm¤HîØr®x™.÷0Ôõrm¶¨—ÿôGL…Ld…~cßìý'ìàø˜ÈDçðö ôBú¡*KDÙZë"øÄ€]Lùr{ïbº©ìåÛ¢Oòò @0;ío콃É;8Î'±ÏެK9°¾~Ñ>Ct|}£}Â¦Ö ‹@úEwOd2V9€ÀνC®Hó¹€r¸cÿ’…PßoοdBˆŽ"DÎü/ÙëÝû 1?Šö—“Ý5uÀ¼ÛÞþ!„ØDô7 ··×ÏnooÖ€z @w¨OlTÜ®.@ï\0h#âAnÀD€$Š@h}`,-pîÀ‚0âA2H‡@>(ÇA¨çÀEÐ ÚÀpô€»`<ÏÁk0¦Á°~‚u‚p¢‡X!nH‡d %HÒ‡L!kÈ ò„ü¡0(J†2 <¨:UCuP tê†îA¡—Ð4-Bk0 `F˜„¥`EX 6m`WØŽ„á ø|®†àø6<?ƒÇá/ð¼Â£˜P$”8J¥ƒ2G9¡üP‘¨dTªU…jDu¡î ž¢Þ¡fQ«h4šÍ–@+£ жh/t:‡.EŸG_F÷¢Ÿ ÇÑóè ÃŽÁ(b 1ö?L &SŒ©Á´cú0#˜˜X–+€ÝƒÕÇÚc° Ø\l¶{;ŒÀ~Ç¡pL8aœ2Π王ÄeàNàêp×qø÷¸%  i  {Š`ŠŠ"Šó×(†)>P¬P)y)(M)=)c)ó(«(;(‡('(—ñD<^o‰÷Ã'ã‹ðñÝøøy†ÀE'˜|û Å„Bá á‘H ªí‰áÄlb5ñq„ø• KE¢R¡²¥ §Ê¡:KuƒêÕ"5‘Z˜Z‡Ú:º˜úõ õG˜†›F…Æž&Šæ(MÍ=š)Zˆ–›V•Ö‘6޶˜¶•v˜vŽO'Bg@çK—AWM×M7N·EÏE¯FïBŸD_FßEÿŠþƒ2ƒCCÃu†7 Œ\ŒŒŒiŒgû§™pL¢L¦LaLLmLÏ™V˜Ù™Õ™=™3˜/02ϳгìaqb9Àr–å.ËVVyV'Ö¬5¬÷X¿²1°)±¹³e²Õ³=f[fçb×ef/`¿ÂþŽË!ÉaË‘ÌQÃ1Äñƒ“ƒS—3”³„ó&çG.j.E.O®<®v®1n,7™Û™;“»™û%ŠG’Ç‘'ƒ§™ç M"“\HÙ¤vÒ;^<¯"¯ï1Þ¼3|L|:|‘||ƒ|«ü‚ü6üiü—øÇˆ*A'î ü´Ìlœ¢ÒŠªF Ë û Ÿ^q9"rKdA”OÔN4[´KtNŒGÌZ,KìªØ¬8·¸µø!ñkâó|öy·%–$E%Ý%‹%ïInJÉII‘z&MÖ–Ž—n–ž"s­É¹äòª Y&@¦Ræ…,¬‘ìAÙ«²‹rbr>r§åžËÓÈɧËß_ÞCÞ¼§vϸ»‚BÂ"VQG1E±Kñ§’ŒR˜R½ÒGe~eOå å×*,*¶*E*T©TMUsUÔ°jzjj½êº–zªúmõ- [[ššš©šÝZ@K[+]«_£m¨£=¨CÔ±Ð)ÔÑeÖuÔ-×}§Ç«ç§W§7§OÖÑ¿ª¿a ee0hHmhcxÊð¿QÑ%£ŸÆªÆiÆ&Ô&v&å&“¦b¦ûL¯š3#³³—æ$ó@óVó5 ‹ÃÏ-¹-,[-×­ô­ŽY½Ú+°7|o—5ÚÚÒºÌzÚFÆ&Ùæž-£­§m“í/;»"»q{ û$ûFo‡‡-G3Ç2Ç'%§CNÏœcœû\\|\Ú\Q®6®5®KnznÇÝ>º+ºçº¿öðHñxìÉçã9àÅæêuÛ›ÞÛϻˇèãésÙ—Â×Õ·ÕãçìwÉíïä)àЈ t l ¢ òê ¦ ö ¾ÂÒÊ:Æ–ö<\*<;|"B%¢8âk¤aduäú>û}-Q„(ÿ¨žhÎè„è‘é˜ü˜O±º±U±qNqñ ñ‘ñà ⠹ Ÿõk’à$ϤÛû¹÷Øÿ6Y-¹qÂäDÇIÒÉü“+¥Þ¥Ã§TN/£/K)›-w(ï?-sº²‚X‘XñéŒÝ™¾J™Êª*šªUsÕ.ÕCgUÎÖ×°×äÕ¬ >÷¦Ö¬öÆy©ó•h/¤_Xªó«{yÑäâzéú³ L 9 ëšì›†š5›Û/‰\ªh¡kÉnÙhÝ×ú©Í­m¤Ý¸ýöe…ËMåô¹W +‰W¯]}ßåÜõôšéµþë×¯Ü ß¨¿)póÌ-¶[Å·©oçv£»S»×zâz{Ãzgúüû&û=úßÞqº3z׿î“‹÷LîÝ¿oxÿî þ`ÿîPï=µö ë ÷>Ò}Ô÷XïñÝ'†Oî=5yú`Äbäñ3›g£ÏŸ¿u|á÷bæeØËÅW±¯Ö^§¾A½ÉyKý¶xŒmìÌ;wõã2ãW&4&î¼7{?2é<9ù!øÃ÷©¤ix:ÿ#ÃÇÓŸ?]ú¬ô¹wÆlfô‹ç—/³±³Ûsy_™¿VÏKÌ_ý¦÷íñ‚ëÂÌbìwøû±œ?ê——îü´ùù~9bykåð*Çjý/å_÷לÖ>¯'lPlœÚݼ¶eºõv;üo,ð7ø üþÆc¿±ÀßXào^ào^ào^ào^ào^ào^ào^àÿo^ Ò+Êk7@!gØáf¾#<•   þ·ý¿y”ßÑ@!¤Ð±„Bx ‹ð 5`Ò:a¸EFõ ý1$Ìl?®‰âe+~ˆ°L%MíOÓB‡¢·d8ǸÆlÁr†õ »4Ç>ήq’¯'_…@§à#¡Âë¢Ôbâ{$ %¥ü¥cÈereÉÉï)R8¬˜®” ¤â¨j FVg×€5f4iujŸÖÉÐ Ò³ÔW4à1Ä.½1¾cÒbZa–ožddébe¾WÛZÑFÚVØŽdÏéÀâÈäÄèÌèÂäÊêÆéÎë!ì)å¥è­ícîëäàp(ðdP]𵇡ïÖ#‘¤} QfÑ>1I±…quñ·ž%Î™ˆ§h¦ÚôOKHÏË(Ïl̺yèaöÛœ¹Üõ|ÂaŽ#âGÕŽYxFeW”´<ñáäæ)Ö2¹r«Óa‡ÏÔWÞ¯ú|–¢Føœamàùœ ë/Î6%šÌ›Ã.min}Ø6wß!Ò©Åëê®Òk­×oLÜ\¾ïæì‘èUéÓï7¿cs×~ÀîžÍ}óAý!ÕÒIÃ4Û>?yrýiõHÖ³Àç&£¢/(^L¿ìyuúuÜ«·bc¨±±wWÆ 'BßLòNn|x9Õ>}ôcÐ'ƒÏ3˜™Ï_žÌvÏu~혿ýmdáÇwÞ.KU?VÌV[Ö8Ös7ÁVÊöö®ÿ©Â; 0†pDå0œ¯¢rЂè!LÖG¦à¡dÂs”‰ÎTÔ4‹tdú`†&ÆYfaWÖ¶[ìŸ8±\BÜJyóôÃÈ—g‹ÏWF7_¢_^3¾áy+9¦ñÎfÜÒÜk<ý¤£¼Ž|||3üÍÑ‚Š‚+BÂûD$DÞ‹–ˆˆý¯”0–X,‘R–z-½ŸÌN¾"c'³ {XND®WÞM~uO±‚”Â}E?%H©BYUù…J¬*ƒj«š•Ú¼úa !Í-¢V“¶…ö¢N‰®²î¸Þ!}iýW™†²†ï uš\4u7c2{`ži¡n±bÙf¾W|ïŒõ›[Û»ûp²Ã’c—Sгž ¥Ë#×nîîBîóW<ӽ̼Y½§|Ú|Óü¬ýùýWÖ%;„È…Ò†.„= o8™´Ï3Ê Z2†)f;v&îY|wBSbyRÞþÄäà®)©ÚåÓDÓ¹33 YpÖú¡¥ìùœ™Üi$Ó?qxüÈøÑ‰c >~-úY¼yœâÓIþR¹SúeNåá§UT¹Yù®>+Vãp.§öÖùÕ:Å‹Iõ=Ä&çæ†K[­¶mM—):|;û¯ uå][¼á|óîmÅîæ^‰¾ËwÌî.ß»6Xþ vxì‰éÈÂèÈ«•1ß÷Ä©…Ú¯n‹m˺ëÔ;þÿͧïì XN,àøVòÜ>ý ÂÍŸÀŠ [e„Z? ……dý÷þÁÈcí‡<='A ¸&æ™’„ /h?tj…†¡Y˜à ø0Ü›(!Ô^T ¡iÑúßÛ‰^ÄHaÂ0͘E„ÃMFvjœ î"nœ¢†bƒÒ‘²ÏŠOÁ$Øúˆ Ä&*aªsÔ‚Ôu4R4´Ú´èÜéè3¶³•Ñ”ñS&3?s?‹?+žõ›Û{-‡Ç:çE.n÷Už7éoÂ(®ów씜ªFžËo¢—Œĵ%ðÏ$«¤Â¥ÕÉÔä÷2²ùr>òê{Øö¬*¼T¼¦T©œ­©êªfª®¦AÖÒâÑf×aÕeÕãÐ'’TLLÌÌó-ª,;¬†ö~°^·e´“²7qðwÌt:‹ð^Sn8w kÏ$¯ïG>~bþ.G{‚VB¤CƒÂjÃ?Dòïó‹ª^ŒUËŽMNJÞ?r@2%/uy/]ÉäË*ÊÆæ¤ænæ<‚?ZV Sø¨8æ8éÄHéÑ2ËÓ¬Ÿ+oWWÔ¤Õ†]ðºèÒàÖx)±µ°½¥ãùUpMú†÷­Òî§}ÔwÌŽÝö€s8ðñ•ŠçŽ/j_ͽ}ç4‘4™;uècÔg‹/³¯¾æ“[xú=èǯŸ™+øÕâ5æõ’Mš­C»ïN ¬@ÈÕH-Â(XDj„ mÈ JD¼ß=‘E¶Cª*á»ð7;ʪC|Ï€6Cg£û1hŒ&óˆõŶàn/®·ðñ플” ”ïñæø[9B#QŒØH%Gu“Ú”zŒ&ŠO[K§K÷>›A‚á9c*“8Ó+æ\–¯¬UlvìöŽDNYÎ9®:n?žiRoŸ<ßÿ @©` ª0ðG‘nÑr±q EI6Éu©qé~r½Ll¼œ‡¼ÑYNEJÅe¥iåQ•{ª7Õ.«7iÔiÖj×®ÓiÒíл¥?dðÚpÖhË„ÁTÜLÏÜÝ"ɲԪsï¨õŠ-›ª½‡C¦c½Óç_®ünîû=.z¾òÆûhøFû5øO’‚܃+BÆÃøÃƒ"Z#×¢ô£ bÆâÄâãî$Ñï÷Hn<°šªw°0m,C,3!k ›%'8÷V>Óáð#CÇÄ Ž®û”Œœ0<Ù}J½ìÖi½ŠáJתù³YçHµÝ|/RÕ_k mæ»4ÖZÑîÕ!Ú¹tµïZÉ€[ªÝ´=ú:îdXÝg|ó lØö1áÉ­‘ðç£w_F¾f}Ó34N7Ñ5é=Eœîøä1Cñ¥uÎyúV·hù}i©tYueüWÆºÐÆÀ–ÿ®ÿù¹ <ß :H²‡’ Jè43ÃÚp8|~ŒÂ¢4PûQ×QÛHGú=Fñ÷V[ÃàBq/( )®SÊS¶ã•ðýÂwb •&ÕwêFšZe:âã^†óŒL©ÌÑ,¡¬Ál¡ìÑ9 ¹.p÷ðLðB|‚ü¦Q‚åBýÂó¢ìbFâñu’o¥éÈÆ2²·å6÷h ‘Æe¢ŠƒjÚ }Ír­:ºúDƒpÃce“j3¼y´Å˜•áÞVÛL»yGÇ^gI—SnX÷)/;ï_¿K‚ÁL!ÇÂðá‡"Ñû2£Ñ1Ùq„ø‚D–¤ÊdÑ—Sµ>Lw͘ÍÚŸM•S™'›çˆãѹ‚Ô"†âóÇ•O<(õ8õ½<³‚ùL]•rõ½ûs“çC/ü¸_¿Ú×´x)¨å]›u{o‡LgåUBWܵ‰&7Ûnstgô|é³îïºË3pèÞÜàޡ·é&Ÿè>=;²õÜa´áÅÚ+í×ioºÞμ#Ž O¨¼×˜Ôø =Å9µ9ýêcç¤Ï3ðL×—ÈYÒìÐ\üWÖ¯]óŽó‹ßòH ­‹º‹#ßݾþýcuéÀOègæ2z9k³’³Š_=ò‹êWîv-cmc=výë†ÿÆëM‹ÍÞ-…­ºmöí#;þÿ]ƒµ³¼nDhDÉLWo÷çÿÝ),4©óÚmôÈ™j±SÛÅŒŸ}½ôL‘+'rlE†îÖÁ!:»_¸ "ÛÁáÞ–ÿ` ÿ(k#c!«ÈŒìudŒ•í?ò”¤@] y‰_´þ;UÁ^&H  FämQ±Öv@pwtœ>‚i<•hëðÎ’¯ŸÞ?rö20þ­ÓÅïÌň|€ñ…D˜î¬™ V¦ ÙIc‘Š/?ŽÔ„™!ßezÿœ%?ðBzâ¾hä}ûÁaȈdL‚Iÿèéþ›Ä`w\2îZ$!õeÈlæü= ™óÍ à‹à?r/d޾ÕE{¥ÿkÎ?;övWCn Ï7þ¬ -„–EïAë ÕÑhe@B3£Ù$Z­„ÖFk¢U‘>e`¦ËÖ¸c?¬Í?®4"QÅ>éÝùïÞzý®vÐÿþ·€ á¹+sV€ÔOîÖ"w`?öÚAÝn;@ÿ³Åø%ìÔ ݈ÈĨ €À’6R5é'A2÷‘’ É’eÈà¿‹hþv|ÈœiGIDATX íW»K;AþŒ¯ˆ±´Ö? "(Q¬AÐ2Xø(-b“ "6‚•b)"øÄFI â „¤H@PÁˆ…’ø@ÝßÎÂ-âm wä."¿ãöf³ßÎ|³syŒ þˆ8þã?˜ßêÍœzæööSSSX__ÇÍÍ úûû‘L&ÓžUFzSÈ¥°¶¶6¶²²Â8 åVH?22Â&&&”ýš² í1ØÔÑÐЀp8Œ *­º\.”––âååEÙ¯)m ³ããcœŸŸ# iö‰DP^^Žëëk©ûÞ(++ƒÓéü®Ö}Ûæíí ÃÃÃ(..ñdtt¸¿¿ÇÕÕz{{±··‡³³3Ý(lÃã---p»ÝxzzBSS¶¶¶077‡öövôõõáèèÕÕÕ"Hz^__`4òXõŽF£Œo’}||ÝÝÝlss3­¹¥¥%ÖÓÓ#žýý}9nrr’ËoUÃò@ü¨­­…ÃáÀÉÉ …GÞßßQP 7ïõzA±<ÌêêêpzzŠ™™|~~"??_€RI ‹‰¤AÉ#§†> òS ÎPv²BlcÅÆUkêÂ,‘HàîîNŽ¥òâ'×Ê¿ !H©pyy@ÛÛÛb{óóóðûýàååeÆ-××× bÙ©æ²Zˆ“ÂŒSQQº¨ly¨²²RèvvvD6¢û!“ПÏðᘙ ªªÍ¬£¬šùŸ[[[3u:F'­ªZ_çºýƒÁ ºººLŽÑIªªš²'UÕFE‚©ªªÿ×Àââ"xü]ÇôølTÕšqYh®®®¢¨¨ZŸmïlUÕŒm;·Ð 3 mضô?ֺݻŒ0ùÌIEND®B`‚saods9/ds9/doc/ref/img/saolog.png000644 000765 000000 00000016633 11343045612 017162 0ustar00joyewheel000000 000000 ‰PNG  IHDRA"—´±­iCCPICC ProfilexíZgTM³î™M°»äœ—œa ’sÎ 9çœ%ƒ’$H*‚ˆ(’$Š‘¤((#‚*‚Š€Ä;àëýÎ=ßù~ÝûïÚçÌ̳ÕÕÕ½Ss¦kê)DK½"#Ca@XxL”µ¡ÉÑÉ™„{ €ô€  ¼|¢#µ­¬Ì•ÿЖGm¤HîØr®x™.÷0Ôõrm¶¨—ÿôGL…Ld…~cßìý'ìàø˜ÈDçðö ôBú¡*KDÙZë"øÄ€]Lùr{ïbº©ìåÛ¢Oòò @0;ío콃É;8Î'±ÏެK9°¾~Ñ>Ct|}£}Â¦Ö ‹@úEwOd2V9€ÀνC®Hó¹€r¸cÿ’…PßoοdBˆŽ"DÎü/ÙëÝû 1?Šö—“Ý5uÀ¼ÛÞþ!„ØDô7 ··×ÏnooÖ€z @w¨OlTÜ®.@ï\0h#âAnÀD€$Š@h}`,-pîÀ‚0âA2H‡@>(ÇA¨çÀEÐ ÚÀpô€»`<ÏÁk0¦Á°~‚u‚p¢‡X!nH‡d %HÒ‡L!kÈ ò„ü¡0(J†2 <¨:UCuP tê†îA¡—Ð4-Bk0 `F˜„¥`EX 6m`WØŽ„á ø|®†àø6<?ƒÇá/ð¼Â£˜P$”8J¥ƒ2G9¡üP‘¨dTªU…jDu¡î ž¢Þ¡fQ«h4šÍ–@+£ жh/t:‡.EŸG_F÷¢Ÿ ÇÑóè ÃŽÁ(b 1ö?L &SŒ©Á´cú0#˜˜X–+€ÝƒÕÇÚc° Ø\l¶{;ŒÀ~Ç¡pL8aœ2Π王ÄeàNàêp×qø÷¸%  i  {Š`ŠŠ"Šó×(†)>P¬P)y)(M)=)c)ó(«(;(‡('(—ñD<^o‰÷Ã'ã‹ðñÝøøy†ÀE'˜|û Å„Bá á‘H ªí‰áÄlb5ñq„ø• KE¢R¡²¥ §Ê¡:KuƒêÕ"5‘Z˜Z‡Ú:º˜úõ õG˜†›F…Æž&Šæ(MÍ=š)Zˆ–›V•Ö‘6޶˜¶•v˜vŽO'Bg@çK—AWM×M7N·EÏE¯FïBŸD_FßEÿŠþƒ2ƒCCÃu†7 Œ\ŒŒŒiŒgû§™pL¢L¦LaLLmLÏ™V˜Ù™Õ™=™3˜/02ϳгìaqb9Àr–å.ËVVyV'Ö¬5¬÷X¿²1°)±¹³e²Õ³=f[fçb×ef/`¿ÂþŽË!ÉaË‘ÌQÃ1Äñƒ“ƒS—3”³„ó&çG.j.E.O®<®v®1n,7™Û™;“»™û%ŠG’Ç‘'ƒ§™ç M"“\HÙ¤vÒ;^<¯"¯ï1Þ¼3|L|:|‘||ƒ|«ü‚ü6üiü—øÇˆ*A'î ü´Ìlœ¢ÒŠªF Ë û Ÿ^q9"rKdA”OÔN4[´KtNŒGÌZ,KìªØ¬8·¸µø!ñkâó|öy·%–$E%Ý%‹%ïInJÉII‘z&MÖ–Ž—n–ž"s­É¹äòª Y&@¦Ræ…,¬‘ìAÙ«²‹rbr>r§åžËÓÈɧËß_ÞCÞ¼§vϸ»‚BÂ"VQG1E±Kñ§’ŒR˜R½ÒGe~eOå å×*,*¶*E*T©TMUsUÔ°jzjj½êº–zªúmõ- [[ššš©šÝZ@K[+]«_£m¨£=¨CÔ±Ð)ÔÑeÖuÔ-×}§Ç«ç§W§7§OÖÑ¿ª¿a ee0hHmhcxÊð¿QÑ%£ŸÆªÆiÆ&Ô&v&å&“¦b¦ûL¯š3#³³—æ$ó@óVó5 ‹ÃÏ-¹-,[-×­ô­ŽY½Ú+°7|o—5ÚÚÒºÌzÚFÆ&Ùæž-£­§m“í/;»"»q{ û$ûFo‡‡-G3Ç2Ç'%§CNÏœcœû\\|\Ú\Q®6®5®KnznÇÝ>º+ºçº¿öðHñxìÉçã9àÅæêuÛ›ÞÛϻˇèãésÙ—Â×Õ·ÕãçìwÉíïä)àЈ t l ¢ òê ¦ ö ¾ÂÒÊ:Æ–ö<\*<;|"B%¢8âk¤aduäú>û}-Q„(ÿ¨žhÎè„è‘é˜ü˜O±º±U±qNqñ ñ‘ñà ⠹ Ÿõk’à$ϤÛû¹÷Øÿ6Y-¹qÂäDÇIÒÉü“+¥Þ¥Ã§TN/£/K)›-w(ï?-sº²‚X‘XñéŒÝ™¾J™Êª*šªUsÕ.ÕCgUÎÖ×°×äÕ¬ >÷¦Ö¬öÆy©ó•h/¤_Xªó«{yÑäâzéú³ L 9 ëšì›†š5›Û/‰\ªh¡kÉnÙhÝ×ú©Í­m¤Ý¸ýöe…ËMåô¹W +‰W¯]}ßåÜõôšéµþë×¯Ü ß¨¿)póÌ-¶[Å·©oçv£»S»×zâz{Ãzgúüû&û=úßÞqº3z׿î“‹÷LîÝ¿oxÿî þ`ÿîPï=µö ë ÷>Ò}Ô÷XïñÝ'†Oî=5yú`Äbäñ3›g£ÏŸ¿u|á÷bæeØËÅW±¯Ö^§¾A½ÉyKý¶xŒmìÌ;wõã2ãW&4&î¼7{?2é<9ù!øÃ÷©¤ix:ÿ#ÃÇÓŸ?]ú¬ô¹wÆlfô‹ç—/³±³Ûsy_™¿VÏKÌ_ý¦÷íñ‚ëÂÌbìwøû±œ?ê——îü´ùù~9bykåð*Çjý/å_÷לÖ>¯'lPlœÚݼ¶eºõv;üo,ð7ø üþÆc¿±ÀßXào^ào^ào^ào^ào^ào^ào^àÿo^ Ò+Êk7@!gØáf¾#<•   þ·ý¿y”ßÑ@!¤Ð±„Bx ‹ð 5`Ò:a¸EFõ ý1$Ìl?®‰âe+~ˆ°L%MíOÓB‡¢·d8ǸÆlÁr†õ »4Ç>ήq’¯'_…@§à#¡Âë¢Ôbâ{$ %¥ü¥cÈereÉÉï)R8¬˜®” ¤â¨j FVg×€5f4iujŸÖÉÐ Ò³ÔW4à1Ä.½1¾cÒbZa–ožddébe¾WÛZÑFÚVØŽdÏéÀâÈäÄèÌèÂäÊêÆéÎë!ì)å¥è­ícîëäàp(ðdP]𵇡ïÖ#‘¤} QfÑ>1I±…quñ·ž%Î™ˆ§h¦ÚôOKHÏË(Ïl̺yèaöÛœ¹Üõ|ÂaŽ#âGÕŽYxFeW”´<ñáäæ)Ö2¹r«Óa‡ÏÔWÞ¯ú|–¢Føœamàùœ ë/Î6%šÌ›Ã.min}Ø6wß!Ò©Åëê®Òk­×oLÜ\¾ïæì‘èUéÓï7¿cs×~ÀîžÍ}óAý!ÕÒIÃ4Û>?yrýiõHÖ³Àç&£¢/(^L¿ìyuúuÜ«·bc¨±±wWÆ 'BßLòNn|x9Õ>}ôcÐ'ƒÏ3˜™Ï_žÌvÏu~혿ýmdáÇwÞ.KU?VÌV[Ö8Ös7ÁVÊöö®ÿ©Â; 0†pDå0œ¯¢rЂè!LÖG¦à¡dÂs”‰ÎTÔ4‹tdú`†&ÆYfaWÖ¶[ìŸ8±\BÜJyóôÃÈ—g‹ÏWF7_¢_^3¾áy+9¦ñÎfÜÒÜk<ý¤£¼Ž|||3üÍÑ‚Š‚+BÂûD$DÞ‹–ˆˆý¯”0–X,‘R–z-½ŸÌN¾"c'³ {XND®WÞM~uO±‚”Â}E?%H©BYUù…J¬*ƒj«š•Ú¼úa !Í-¢V“¶…ö¢N‰®²î¸Þ!}iýW™†²†ï uš\4u7c2{`ži¡n±bÙf¾W|ïŒõ›[Û»ûp²Ã’c—Sгž ¥Ë#×nîîBîóW<ӽ̼Y½§|Ú|Óü¬ýùýWÖ%;„È…Ò†.„= o8™´Ï3Ê Z2†)f;v&îY|wBSbyRÞþÄäà®)©ÚåÓDÓ¹33 YpÖú¡¥ìùœ™Üi$Ó?qxüÈøÑ‰c >~-úY¼yœâÓIþR¹SúeNåá§UT¹Yù®>+Vãp.§öÖùÕ:Å‹Iõ=Ä&çæ†K[­¶mM—):|;û¯ uå][¼á|óîmÅîæ^‰¾ËwÌî.ß»6Xþ vxì‰éÈÂèÈ«•1ß÷Ä©…Ú¯n‹m˺ëÔ;þÿͧïì XN,àøVòÜ>ý ÂÍŸÀŠ [e„Z? ……dý÷þÁÈcí‡<='A ¸&æ™’„ /h?tj…†¡Y˜à ø0Ü›(!Ô^T ¡iÑúßÛ‰^ÄHaÂ0͘E„ÃMFvjœ î"nœ¢†bƒÒ‘²ÏŠOÁ$Øúˆ Ä&*aªsÔ‚Ôu4R4´Ú´èÜéè3¶³•Ñ”ñS&3?s?‹?+žõ›Û{-‡Ç:çE.n÷Už7éoÂ(®ów씜ªFžËo¢—Œĵ%ðÏ$«¤Â¥ÕÉÔä÷2²ùr>òê{Øö¬*¼T¼¦T©œ­©êªfª®¦AÖÒâÑf×aÕeÕãÐ'’TLLÌÌó-ª,;¬†ö~°^·e´“²7qðwÌt:‹ð^Sn8w kÏ$¯ïG>~bþ.G{‚VB¤CƒÂjÃ?Dòïó‹ª^ŒUËŽMNJÞ?r@2%/uy/]ÉäË*ÊÆæ¤ænæ<‚?ZV Sø¨8æ8éÄHéÑ2ËÓ¬Ÿ+oWWÔ¤Õ†]ðºèÒàÖx)±µ°½¥ãùUpMú†÷­Òî§}ÔwÌŽÝö€s8ðñ•ŠçŽ/j_ͽ}ç4‘4™;uècÔg‹/³¯¾æ“[xú=èǯŸ™+øÕâ5æõ’Mš­C»ïN ¬@ÈÕH-Â(XDj„ mÈ JD¼ß=‘E¶Cª*á»ð7;ʪC|Ï€6Cg£û1hŒ&óˆõŶàn/®·ðñ플” ”ïñæø[9B#QŒØH%Gu“Ú”zŒ&ŠO[K§K÷>›A‚á9c*“8Ó+æ\–¯¬UlvìöŽDNYÎ9®:n?žiRoŸ<ßÿ @©` ª0ðG‘nÑr±q EI6Éu©qé~r½Ll¼œ‡¼ÑYNEJÅe¥iåQ•{ª7Õ.«7iÔiÖj×®ÓiÒíл¥?dðÚpÖhË„ÁTÜLÏÜÝ"ɲԪsï¨õŠ-›ª½‡C¦c½Óç_®ünîû=.z¾òÆûhøFû5øO’‚܃+BÆÃøÃƒ"Z#×¢ô£ bÆâÄâãî$Ñï÷Hn<°šªw°0m,C,3!k ›%'8÷V>Óáð#CÇÄ Ž®û”Œœ0<Ù}J½ìÖi½ŠáJתù³YçHµÝ|/RÕ_k mæ»4ÖZÑîÕ!Ú¹tµïZÉ€[ªÝ´=ú:îdXÝg|ó lØö1áÉ­‘ðç£w_F¾f}Ó34N7Ñ5é=Eœîøä1Cñ¥uÎyúV·hù}i©tYueüWÆºÐÆÀ–ÿ®ÿù¹ <ß :H²‡’ Jè43ÃÚp8|~ŒÂ¢4PûQ×QÛHGú=Fñ÷V[ÃàBq/( )®SÊS¶ã•ðýÂwb •&ÕwêFšZe:âã^†óŒL©ÌÑ,¡¬Ál¡ìÑ9 ¹.p÷ðLðB|‚ü¦Q‚åBýÂó¢ìbFâñu’o¥éÈÆ2²·å6÷h ‘Æe¢ŠƒjÚ }Ír­:ºúDƒpÃce“j3¼y´Å˜•áÞVÛL»yGÇ^gI—SnX÷)/;ï_¿K‚ÁL!ÇÂðá‡"Ñû2£Ñ1Ùq„ø‚D–¤ÊdÑ—Sµ>Lw͘ÍÚŸM•S™'›çˆãѹ‚Ô"†âóÇ•O<(õ8õ½<³‚ùL]•rõ½ûs“çC/ü¸_¿Ú×´x)¨å]›u{o‡LgåUBWܵ‰&7Ûnstgô|é³îïºË3pèÞÜàޡ·é&Ÿè>=;²õÜa´áÅÚ+í×ioºÞμ#Ž O¨¼×˜Ôø =Å9µ9ýêcç¤Ï3ðL×—ÈYÒìÐ\üWÖ¯]óŽó‹ßòH ­‹º‹#ßݾþýcuéÀOègæ2z9k³’³Š_=ò‹êWîv-cmc=výë†ÿÆëM‹ÍÞ-…­ºmöí#;þÿ]ƒµ³¼nDhDÉLWo÷çÿÝ),4©óÚmôÈ™j±SÛÅŒŸ}½ôL‘+'rlE†îÖÁ!:»_¸ "ÛÁáÞ–ÿ` ÿ(k#c!«ÈŒìudŒ•í?ò”¤@] y‰_´þ;UÁ^&H  FämQ±Öv@pwtœ>‚i<•hëðÎ’¯ŸÞ?rö20þ­ÓÅïÌň|€ñ…D˜î¬™ V¦ ÙIc‘Š/?ŽÔ„™!ßezÿœ%?ðBzâ¾hä}ûÁaȈdL‚Iÿèéþ›Ä`w\2îZ$!õeÈlæü= ™óÍ à‹à?r/d޾ÕE{¥ÿkÎ?;övWCn Ï7þ¬ -„–EïAë ÕÑhe@B3£Ù$Z­„ÖFk¢U‘>e`¦ËÖ¸c?¬Í?®4"QÅ>éÝùïÞzý®vÐÿþ·€ á¹+sV€ÔOîÖ"w`?öÚAÝn;@ÿ³Åø%ìÔ ݈ÈĨ €À’6R5é'A2÷‘’ É’eÈà¿‹hþv|Èœi©IDAThåY[HU]/yI3QQ*‰}(Ê A ‚·Á$!#í¢ tAMÅß$ôÁDBA%Â+š%"=„¦jâTÓÌï–ºþõ-þ½ÿs<ÛŽžŸóú6k­™µÖž=kfÖÌl Æþç`iNß¿»»KZ,­®®Ò«W¯¨¹¹™~ýú¥ESmM0˜™™a·oßf 2;kkkìÆìû÷ïlxxX‹&OR¡c6šàããC‘‘‘Z‡[SSCäêêJ—.]". úðáƒÖ5f#¥yûö-]¸pA&ùùùQGGýüù“èÙ³g´¿¿O………ÔÓÓ#Ï;ØáÊr¥5¶Ö™Ù`~~žNž<)såääDÀÙØØ7zôèùûûÓ½{÷ÈÙÙYž'uVVV¨¬¬Œfgg©ªªJBë´ÿ‰©»»[0Bx”ÀÞÞ^ËîííÉB±°° ÐÐPrtt$OOO¥ådeeE^^^422¢H—&—/_hccƒÜÜÜèâÅ‹‚ôƒË—/ÓÜÜœL†ÄÇÇ‹ñÎÎŽ0‹ÉÉI™~°-²³³;ˆÖ›Ä'lnnRZZá$a¿–––-žóçÏËL®i¿>”5×'‚uß¾}£ÖÖVÊÍÍôÏŸ?k­“7paaAР1ДsçÎQQQUTT­­-UWWÓââ"egg [‡>}š xÖ×מ„çÈ Â5ûÛ-úúúØ™3gØëׯYKK ãÞü·ó %¶µµ‰8q¿9äm^¾|©7¾0º&ŒÓõë×)..N îzœžÚ ™—!ûÝ'ðˆ>}úDÅÅÅT[[K[[[†ðiИ⇉‰ ‚‰ЛÈjá···…½CÔàÑ$BPƒQcî¡c𾸂$À½>55% ÿÈVvŒpXuuu”ŸŸOÁÁÁ"FÇ———S^^žÌïìJ’ÎÕ«WÉÚÚZø¤¿æ Äbcc{²`¯" ½ÿ¾¸q×ÙÙ)„©úšd®¶(ïò…úw‡1LLd÷ìrÿOìèøÄÛ8qœ>`llLäô‡JÑHÄËËËZ»£–€45A6ÍMÃÃÃéÅ‹aÀ$¸Ѓ4§)öKJJ)¯¡€üáÍ›7tóæMêïï§S§N‰­*++iii‰rrr(55•RRR(((ÈÐ×h­ÓÑPáñr—`F3ÍÅ}¯ïÑÚÝ€Òߨ¨(òððWC0pØ8¤ÐÈEˆ©J6ÎÆ™a?V"›wöìYÆëâ]¼þ òéÅ_¿~eüb¼ð*¡Û£æ)Šš€Lµ½¬¬,Õ„ýo6Rª0!µÆµ®½½½B›GGG•È:8EŸ€²wAA¹»»ë,Pñüùs‘cß§OŸ*n¯TaÂDÍÒ›´¦ƒ`zzZBému„€h^8==]ïbC' ï‡Ó …T}ÿ •?~üEø hªÏ(­ÐGýᨠÁ××WHðÊ•+ÂuƒãÎkooˆˆˆ'B‰hV™\\\(11‘ºººDY™aff¦Ò2Ãp’GilldMMMÒÐ(íÇÙµk׿aØÝ»w/©+¾çÝ»wìÎ;Œ§Þ Á€§à¬´´”Õ××3J$à×&ãQªx$ZMǪ‰Wê›4‹Œ‰‰!Ô¡maaa¢lØÑý³*99Y”í€A %JsÈ]¤‚®„Wl•$c,gŒ ‰íqÂÐcÁq4AñŠT”– È[·nÑ“'OD4úþýûc9¯ã¼ÿ4à<Ñòÿ™z—šÔÀ ˜Ã¿Å'NèeÎTL.S}ØqÞcRs8c¦œûi­¾¹âóÁIEND®B`‚saods9/ds9/doc/ref/img/sinh.png000644 000765 000000 00000017130 11763207066 016641 0ustar00joyewheel000000 000000 ‰PNG  IHDREüP¡³þiCCPICC ProfileX…•Y8•áÛÞ3{ï½÷Þ›ì=[ÇÇ(£”Š¢$ddB( #$¡’•$”"*…dÄ÷’úÿ¿ÿ¸¾ë{®ëyßß¹ßû¹Ÿû¹Ÿç½Çyà¨%„†!è&Eí÷ð¹ºíåÃŽ4 Ô€Èˆá¡ú¶¶–à¿¶CÚ¾¿Þ–õßùþc£÷ò'ÙÂØÓ+œ ãZ ÄPrèmyB‡"B·qŒ™È°‚0¾º}ã†mìùwïð8ÚÂx jì ~¦óE}a94Ô`H^þ$˜•Æ:D?‚0TppÈ6> c1Ï’ãû¿dzþ•I øþſײÓ(ŒüÃCƒÑÿOsüß-8(òÏþ&f¿u@Êù‘MÿÐõBƒvÎ4<éHŽ´ß¶ƒŒ}¼IN»2‘É^#‹ß6Aæ@dà < ü|À£Ý+L'ÁW"Ap'óÑþy‚þ€îGO¡_¢'ЯþrþáþÀ ¾ÿ¡ÿ‰îbÀgXª7ÿ3Š¥ƒÒDYÂW=¸+ ÔPêžõÌßÿ«Õo]}á±Ò»ƒ]í£þY{wÿò¿Œñü;âßu2ïw¤îrÈUÉÍÊmüÿcŒ1FSŒ FyYƒì@¶!»ÍÈ»€ùÙ€ìFÞ߯ÿ2 a×*äõZÀ3zƒÈ_¤ÿ¨Qä_Ž]*2°ßᄟùÿÁyGkÿ“ wOXRüÌâïÿXZ¶®2Ê¥ Û¶1ŠÅ¤QJ°ÅõQºð(ÃTõ{•>;¶ŒÚYK øãàïÃÛÝ0$4šìïëÁ§{Ko)>3QFŠOAN^lûÞ߯ö¢ýŽO…XzÿA ¹€ìÖÿ ±Ô ÂnÔâ4!Ø/Љð “IŽúMCm_ЀЧŸö‚@ ÖS¨M Œ9°ŽÀ „­ë‚a8p$‚.‚Kà2(×À pÜÍ  <Ï@x ^ƒ 0 æÀøÖ!ÂBxˆb‡x!aHR€Ô Ȳ„ì!7Èò…HP$€R tèTU@·¡F¨ ê‚ú¡WÐ$4 }‡ÖH5‚ ÁAÈ"Ôú „#ↈAœD¤"rňëˆzDââ%b1‡XF$’É”Fª! ‘6ȽH$y™ŒÌB#«‘MðY|œ@Î#WQ#Š% ï¤)Ê ED…¡Ž¢Î¢.¡®¡êQP/P“¨Ô&æBK¢5ÐfhW´/ú:….CסÃïó4úƒaÁˆbTáÓî† ÀÄbÎb 071­˜~Ì;Ì2‹eÇJbµ±6X6›ˆÍÅ^Ç>À`§±?)¨(x)(L(öR((²(*)Z((>R¬ãèpÂ8 œ Î ;»ŠkÂõâ¦që”ô”¢”Ú”Ž””Ç)s(«)SŽQ.RQQ P©SÙQùS£Ê¡ºEÕI5IµJÍ@-AmH½Ÿ:’:•ºœº•úõ"Áëá÷â#ð©ø üCü8þ' # MíAÚÚ,ÚÚ^Úy:!î(]]#Ý0Ý2=#½<½ }0ýYúJú.ú,ƒƒ1ƒÃI††‡ ‚Œ†ŒDÆŒW3N3a˜D™Ì˜˜R˜n0õ0-030+1;3fÎc¾Ï<Á‚da1c b9Ïr‡eˆe•›UŸÕ›õ k5ëë '››7[2ÛM¶—lkì|ìÆììØï²¿á@qHpØqâ(äxÌ1ÏÉÄ©ÉIäLæ¼Ã9Ê…à’à²çŠå*áêæZææáÞÃÊËý{ž‡…G'€'“§…g–—‘W‡×Ÿ7“÷ï'>f>}¾ ¾¾G| ü\ü¦ü‘üEü=üë¢N 7ÞR ª úf ¶ .ñ Y Å U ã„Õ„ý„³…;„WDDE\D’DîŠÌˆ²‰š‰ÆˆV‰Ž‰áÅtÅÂÄŠÅÅ1âjâââ} e ?‰<‰^I„¤Š¤¿dd¿ZJ]Š$U,5,M-­/%]%=)Ã"c)“ sW括ì^Ù ²²›rÊrArWå^Ë3È›Ë'È7ÉWP *ä) *âMã¿)I*y+*(3*[)')·+ÿRQU!«T«Ìª ©z¨æ««1©ÙªUëTG«¨Ç«7«¯j¨hDhÜÑøª)­¨Y©9£%ªå­uUë¶€6A»H{B‡OÇCçŠÎ„.¿.A·XwJOPÏK¯L¸~€þuý/rdƒ:ƒC Ã#†­FH£=FÉF=Æ ÆNÆ—ŒÇML|MªLö(ï‰ÝÓjŠ6µ0½`:lÆmF4«0[0W5?bþÈ‚ÚÂÁâ’Å”¥„%Ù²É aen•a5f-lM²¾klÌl2lÞØŠÚ†ÙÞ³ÃØÙÚåÙ}°—·³ïp`tpw¨tøáhàxÞñµ“˜S¤S»3­ó~ç ç#—t— WY×#®ÏÜ8ÜüÝöb÷:ï-Û»¼ÏxßÅ}Óû•÷'î: zà𮃃Þw§u'¸×x =\<*=66„b²§™g¾çјMœóÒóÊôšõÖöN÷þè£í“î3ã«í›á;ë§ë—å7ïoèÉÿ[€iÀ倕@›ÀòÀ­ — ›ÁÁÁ$R éQOÈáþPÉÐÄЉ0°‹a d rY8~ ¼!‚ Nr»#Å"OENFéDåEý<ä|¨æ0ýaÒáîh‰è3ÑcLbJcQ±ÄØö8þ¸ãq“Gô…ŽzmŒ??}lϱkÇ)ž —ž°tÂåDÓIî“ÇN¾;µçTU"M"9q8I3éòiÔiÿÓ=gÏäžÙLöJ~š"—’•²q–xöé9ùs9ç¶R}R{Ϋœ/Lä‘Ò†.è^¸–NŸ“þ.Ã*£>“/39sé¢ûÅ®,¥¬ËÙ”Ù‘Ù9–9 ¹B¹i¹—ü.½Ì3È»™Ï•&¥À«` P¯°ú2÷å”ËkWü¯Œí)ª/)Î*Á”D•|¸ê|µ£T­´¢Œ£,¥ìW9©|âšýµGª•\•ç«U‘U³×÷_ï»at£¡Zººè&ËÍ”[àVä­O·=nݱ¸Ó^£VS]+\›_ÇX—\ÕG×/Üõ»;ÑàÖÐßhÞØÞ¤ÙTwOæ^y3sÞ}æûç[([N¶l=ˆy°ÜÚ:ßæÛö®Ý½ýõCׇƒìõ<¶xÜùÄäÉÃýŽÚÍ]]OÕžÞ}¦ò¬¾[¹»î¹ò󺕞ú^ÕÞ†>õ¾¦~­þ–ݶF/ž š >{iý²ÈihdxÿðĈ×ÈÌ« WßF£F×_C%¿¡{“5Î5^üVüíÍ •‰û“F“ÝSS¯ßßͽ¿1}òþCÖGÞ3 3ͳ&³}Ÿö}šž [ŸOüLÿ9ÿ‹Ø—Ú¯z_»\¦¿‘¿m}?»È¾X¾¤´Ô¾l»<þ#øÇúJòOöŸ×VÕV;Ö\Ö>®ÚÀnäüÿÕ´i±9¶¼µJ vR$Ü>>|/‡ë7û ¤ù]í6$œ| v²i5pŽéÖÐMâÌ@‰¢:Ñ)Ìl+E .òÕ)êL|9Í0;½7C ÄìÆr›’ÝãçnQÞ¾(þhxÁ3BÂy"Å¢eb¥â¥W$s¥Ò¤“dâe£å¢ä£â+íU–UA«¼Q­SKU÷×0ÑÒBhMi·ë”èžÒ Ðw4Ð1”4b7Æo˜|ÝóÑô­Ùkó‹!Ë!«ëa›AÛvöƒŽ#Noœß»Ì¹.ºmîÃí§?@Î΃ŽÀàÉDdóâòðó•óÓð· ˆ,zü)„6T)̉žq3²+jêÐz4SŒT¬Iœû‘è£ñ7Ž=9þ6áçIúS‰In§ÉgÎ%W¥tŸýžÊuÞ2íè…ÚôùLÑ‹îYÙsV.‰ç¹åŸ.¸[8}…¡H·8°äÜÕÒÒ–²áòïøJ‰*Óë¾7’ª+n>»õõkn­O]J}õÝž†ù&Š{üÍj÷­[œØ·Zµ™µ=Ô{¤õXí‰b‡l§dwׯӡg7»Ÿïë‘éÙêíé»Ôï3 ð¼¬™1:l3"÷ŠþÕâèÐ릱+oǃß:NhNòOa§æßõ½¯Îù÷ñÀŒÖ,çìê§¡¹šù󟿘|åÿºµ°ù]tÑméâòØŠÂόխõÈÅÍC[[;#3œ#ºƒ<0)Cg y„+byΟ ÑvFÌ{ì}ŠR\eU>õCü­]<ý#F$“.s,K5ë[v&8*s%q—ótðNñ}áÿ 0(x_¨Tø¬H¨¨µ˜¨Ø†xD¾¤¯”‚Ôªt«L¢¬•¯ÜŠ|¯B™b¬’¥2‡ò{•*ÕP5µïê·4Â5uµ˜µ¾kê4èæëÅë4P3¤4ì7J5Ö7^0y°çºiYºy²E’e’U²ušMŽíe»rûj‡«Ž±NÖÎÎ?]^¸Öºåï=·ïÌþsrÞpoô¸M¸æYDÌõJ÷>ë“è{Ü/ÎÿP@x`h)8ˆâêæOŠéÈCчD'Ä$Åž‹Ëè`°:‰‰ô5¤;´2,™n!ɹ5z¨ùpAt\ÌÞX•8ú¸¯GF¾Œï?öüø³„Î';Nu$v$=9ýðL{òÃ”Ž³ÏÏ ¥NœŸK[¾°–¾ž± G×¹¬ñìÞœ–ܺK}ys˜BÁ˺WöEÃq³öjwéTÙÚ5æ ÅJǪÃ× o<©ž»Åp[íŽ{MbmuÝPýfƒh£}ÓÑ{•ÍÃ-¨Š­„¶´öև󙞨wè<Ú•G´þîï=æ½¥ý˜ ¯^Ú uؾz3Æ;^;ùpš<ÛÿåÙ’Öêæöþÿþl»aT(éÀE[ á:sÚø7Gu€ÐSmÙÍýXÀÄ\Y‚°©Ýà H²üá*°j‚†¡%Ba‡G\D4!&8¤2Ò ™ìEQÀ5øTj ­‰>†îÀÐa`®c6±vØ2ì…E% ÀQÚR>¡Ò¥j¤V¦®Á+âëh4hZiMi{é\é¦èIôk §Y˘T™:™÷1e9ÉÊÁz—Í‘m‘=“C…ãç.®.î0NžÇ¼a|‚|oø³àˆå,Â!òŽY$qUñU‰Û’RÂRï¤¯ÊøÈJÊ.É=OUpWTR¢Vú Ü®rEõ˜AÝHC\“Vó'œ?÷é<н¥wU?×à‚áY£$ã“#{™†šùšï·°µ4²Rµ–°á¶¥·£´Ç:`qNÔÎ .œ®"nŠ{ ÷9í÷?0Û½Åã«'?ÑÑë´w‹Ï’Ÿ„¿gÀ¥ÀÁ`’YHb胰ÕpÕˆC‘÷!ÛFŬÄÙ¹Ït,&y"ó”XbËiç3 )çÎɤö¥E¦se¬^ü”=‘;ž÷±`õ [±ÞÕ²âkµ•®¿¬þxëg e÷]¹F£{®÷ƒœh+|xÿñd'åSµîÀž¢¾Ñü/C†ÛG9Æ¢ÆG&uß]ÿÀ5£ù ?7ü9ë«ùÂâ÷´%áåÛ+*?ë×ä×Ëqm¦îøF Làø 2À Ð ÞMˆR…ì  ( *Z¡qhÁ ×÷ÞˆÄÄ(”Gº#Ï#ÛK( ”7ªõ­Š>Àˆ`â1cXl=ÅqŠe\0n®†ŸRQ=¢6£Ä{ãÑ\¢Õ¢¦ ¦ô b ­Œ˜L·˜I,¬¼¬OØHìLì÷8œXÎ\\kÜ%<Ö<ë¼U|'ø½L%…¨„¦…›DN‹Ú‰±ˆˆçH%m¥d¥é¥—eFeÛä*å/*œP$+•TÌTõÔÔÔå5¤5%´ÄµÅu$ueõ”õµ L í™ÄîI1Í3«2o¶xn9nõÍeËn'e¯çàìì”è\ärßõµÛú>®ýº¼&»7y,xŠ=½ò½G}Yý\ü³Fƒx‚=I!ßÂɇÃ["1Q¶‡òÏĨƞŽ{}T6þÔ±7 *'2N~OtHj8ל’²v.8u*mß…¡Œ}™3Y‡s(s¯äiæ¹"\4Pr¼T¹lîZ{eÞõˆjë[¢w š×uuwÓƒîéÝGµ—åRq¾LAãeƒ+]Å6%ƒ¥®e¯¯yU|©Š¹©Îº%r»¡Æ¢v¢>ªßXrO³y°…ÔŠk+}høhêIB§P׳g±Ïe{fúÊ•‡0Ãc¯î¼Vk×xÛ8©çsÞ‡óœÏÙ9Ïâ„‚ÿ#ª¿íÀL188È­[·¦uæÉ“'tttÄVs_¾|’$‰P(4í³µµµâÅ‹Sêü• „Ãa1<<SÏçóMƒA±~ýzár¹"än·[ƒÁ˜6ƒÁ (,,£££“êü•ëÓÖÖFYYÙ”:×®]Ã`0Lß¼y“ôôtÒÒÒðù|H’Dee%ÙÙÙ¼yófJ»jµ£ÑH]]ÝäJ1C;K‡ÃSî;±|ùò òââbqîÜ9yÝÜÜ,gÈÉ“'EMMMLî{÷¬¬I÷ÿ•Lijj¢±±‘ææfFFF¸{÷.n·›7nðõëWL&ííígß¿Éd’ dGGK–,‘÷‹ŠŠP«Õ„B!¶mÛ€›ÍF?V«•P(@ff&}}} EõwÖƒòøñc>}úDii)oß¾%ÓØØHUU]]]ìÝ»—––V®\III â¿]‚×륳³ƒÁ@qq1@€ÑÑQ"8œN'’$ÑÐÐ Èåra·Û9räwîÜÁjµâ÷ûHNNÀãñDw:f®ý!,‹X¶l™hjjcccB!z{{å«1>>.~wC«Õ §Ó)‡ÈÌÌ”åééébppPèt:qýúõ <###âÀÂ`0DÈ´Z­øøñc„î»wï ¢ú<ë™b49sæ åååH’S?>>žp8Ct|}£}Â¦Ö ‹@úEwOd2V9€ÀνC®Hó¹€r¸cÿ’…PßoοdBˆŽ"DÎü/ÙëÝû 1?Šö—“Ý5uÀ¼ÛÞþ!„ØDô7 ··×ÏnooÖ€z @w¨OlTÜ®.@ï\0h#âAnÀD€$Š@h}`,-pîÀ‚0âA2H‡@>(ÇA¨çÀEÐ ÚÀpô€»`<ÏÁk0¦Á°~‚u‚p¢‡X!nH‡d %HÒ‡L!kÈ ò„ü¡0(J†2 <¨:UCuP tê†îA¡—Ð4-Bk0 `F˜„¥`EX 6m`WØŽ„á ø|®†àø6<?ƒÇá/ð¼Â£˜P$”8J¥ƒ2G9¡üP‘¨dTªU…jDu¡î ž¢Þ¡fQ«h4šÍ–@+£ жh/t:‡.EŸG_F÷¢Ÿ ÇÑóè ÃŽÁ(b 1ö?L &SŒ©Á´cú0#˜˜X–+€ÝƒÕÇÚc° Ø\l¶{;ŒÀ~Ç¡pL8aœ2Π王ÄeàNàêp×qø÷¸%  i  {Š`ŠŠ"Šó×(†)>P¬P)y)(M)=)c)ó(«(;(‡('(—ñD<^o‰÷Ã'ã‹ðñÝøøy†ÀE'˜|û Å„Bá á‘H ªí‰áÄlb5ñq„ø• KE¢R¡²¥ §Ê¡:KuƒêÕ"5‘Z˜Z‡Ú:º˜úõ õG˜†›F…Æž&Šæ(MÍ=š)Zˆ–›V•Ö‘6޶˜¶•v˜vŽO'Bg@çK—AWM×M7N·EÏE¯FïBŸD_FßEÿŠþƒ2ƒCCÃu†7 Œ\ŒŒŒiŒgû§™pL¢L¦LaLLmLÏ™V˜Ù™Õ™=™3˜/02ϳгìaqb9Àr–å.ËVVyV'Ö¬5¬÷X¿²1°)±¹³e²Õ³=f[fçb×ef/`¿ÂþŽË!ÉaË‘ÌQÃ1Äñƒ“ƒS—3”³„ó&çG.j.E.O®<®v®1n,7™Û™;“»™û%ŠG’Ç‘'ƒ§™ç M"“\HÙ¤vÒ;^<¯"¯ï1Þ¼3|L|:|‘||ƒ|«ü‚ü6üiü—øÇˆ*A'î ü´Ìlœ¢ÒŠªF Ë û Ÿ^q9"rKdA”OÔN4[´KtNŒGÌZ,KìªØ¬8·¸µø!ñkâó|öy·%–$E%Ý%‹%ïInJÉII‘z&MÖ–Ž—n–ž"s­É¹äòª Y&@¦Ræ…,¬‘ìAÙ«²‹rbr>r§åžËÓÈɧËß_ÞCÞ¼§vϸ»‚BÂ"VQG1E±Kñ§’ŒR˜R½ÒGe~eOå å×*,*¶*E*T©TMUsUÔ°jzjj½êº–zªúmõ- [[ššš©šÝZ@K[+]«_£m¨£=¨CÔ±Ð)ÔÑeÖuÔ-×}§Ç«ç§W§7§OÖÑ¿ª¿a ee0hHmhcxÊð¿QÑ%£ŸÆªÆiÆ&Ô&v&å&“¦b¦ûL¯š3#³³—æ$ó@óVó5 ‹ÃÏ-¹-,[-×­ô­ŽY½Ú+°7|o—5ÚÚÒºÌzÚFÆ&Ùæž-£­§m“í/;»"»q{ û$ûFo‡‡-G3Ç2Ç'%§CNÏœcœû\\|\Ú\Q®6®5®KnznÇÝ>º+ºçº¿öðHñxìÉçã9àÅæêuÛ›ÞÛϻˇèãésÙ—Â×Õ·ÕãçìwÉíïä)àЈ t l ¢ òê ¦ ö ¾ÂÒÊ:Æ–ö<\*<;|"B%¢8âk¤aduäú>û}-Q„(ÿ¨žhÎè„è‘é˜ü˜O±º±U±qNqñ ñ‘ñà ⠹ Ÿõk’à$ϤÛû¹÷Øÿ6Y-¹qÂäDÇIÒÉü“+¥Þ¥Ã§TN/£/K)›-w(ï?-sº²‚X‘XñéŒÝ™¾J™Êª*šªUsÕ.ÕCgUÎÖ×°×äÕ¬ >÷¦Ö¬öÆy©ó•h/¤_Xªó«{yÑäâzéú³ L 9 ëšì›†š5›Û/‰\ªh¡kÉnÙhÝ×ú©Í­m¤Ý¸ýöe…ËMåô¹W +‰W¯]}ßåÜõôšéµþë×¯Ü ß¨¿)póÌ-¶[Å·©oçv£»S»×zâz{Ãzgúüû&û=úßÞqº3z׿î“‹÷LîÝ¿oxÿî þ`ÿîPï=µö ë ÷>Ò}Ô÷XïñÝ'†Oî=5yú`Äbäñ3›g£ÏŸ¿u|á÷bæeØËÅW±¯Ö^§¾A½ÉyKý¶xŒmìÌ;wõã2ãW&4&î¼7{?2é<9ù!øÃ÷©¤ix:ÿ#ÃÇÓŸ?]ú¬ô¹wÆlfô‹ç—/³±³Ûsy_™¿VÏKÌ_ý¦÷íñ‚ëÂÌbìwøû±œ?ê——îü´ùù~9bykåð*Çjý/å_÷לÖ>¯'lPlœÚݼ¶eºõv;üo,ð7ø üþÆc¿±ÀßXào^ào^ào^ào^ào^ào^ào^àÿo^ Ò+Êk7@!gØáf¾#<•   þ·ý¿y”ßÑ@!¤Ð±„Bx ‹ð 5`Ò:a¸EFõ ý1$Ìl?®‰âe+~ˆ°L%MíOÓB‡¢·d8ǸÆlÁr†õ »4Ç>ήq’¯'_…@§à#¡Âë¢Ôbâ{$ %¥ü¥cÈereÉÉï)R8¬˜®” ¤â¨j FVg×€5f4iujŸÖÉÐ Ò³ÔW4à1Ä.½1¾cÒbZa–ožddébe¾WÛZÑFÚVØŽdÏéÀâÈäÄèÌèÂäÊêÆéÎë!ì)å¥è­ícîëäàp(ðdP]𵇡ïÖ#‘¤} QfÑ>1I±…quñ·ž%Î™ˆ§h¦ÚôOKHÏË(Ïl̺yèaöÛœ¹Üõ|ÂaŽ#âGÕŽYxFeW”´<ñáäæ)Ö2¹r«Óa‡ÏÔWÞ¯ú|–¢Føœamàùœ ë/Î6%šÌ›Ã.min}Ø6wß!Ò©Åëê®Òk­×oLÜ\¾ïæì‘èUéÓï7¿cs×~ÀîžÍ}óAý!ÕÒIÃ4Û>?yrýiõHÖ³Àç&£¢/(^L¿ìyuúuÜ«·bc¨±±wWÆ 'BßLòNn|x9Õ>}ôcÐ'ƒÏ3˜™Ï_žÌvÏu~혿ýmdáÇwÞ.KU?VÌV[Ö8Ös7ÁVÊöö®ÿ©Â; 0†pDå0œ¯¢rЂè!LÖG¦à¡dÂs”‰ÎTÔ4‹tdú`†&ÆYfaWÖ¶[ìŸ8±\BÜJyóôÃÈ—g‹ÏWF7_¢_^3¾áy+9¦ñÎfÜÒÜk<ý¤£¼Ž|||3üÍÑ‚Š‚+BÂûD$DÞ‹–ˆˆý¯”0–X,‘R–z-½ŸÌN¾"c'³ {XND®WÞM~uO±‚”Â}E?%H©BYUù…J¬*ƒj«š•Ú¼úa !Í-¢V“¶…ö¢N‰®²î¸Þ!}iýW™†²†ï uš\4u7c2{`ži¡n±bÙf¾W|ïŒõ›[Û»ûp²Ã’c—Sгž ¥Ë#×nîîBîóW<ӽ̼Y½§|Ú|Óü¬ýùýWÖ%;„È…Ò†.„= o8™´Ï3Ê Z2†)f;v&îY|wBSbyRÞþÄäà®)©ÚåÓDÓ¹33 YpÖú¡¥ìùœ™Üi$Ó?qxüÈøÑ‰c >~-úY¼yœâÓIþR¹SúeNåá§UT¹Yù®>+Vãp.§öÖùÕ:Å‹Iõ=Ä&çæ†K[­¶mM—):|;û¯ uå][¼á|óîmÅîæ^‰¾ËwÌî.ß»6Xþ vxì‰éÈÂèÈ«•1ß÷Ä©…Ú¯n‹m˺ëÔ;þÿͧïì XN,àøVòÜ>ý ÂÍŸÀŠ [e„Z? ……dý÷þÁÈcí‡<='A ¸&æ™’„ /h?tj…†¡Y˜à ø0Ü›(!Ô^T ¡iÑúßÛ‰^ÄHaÂ0͘E„ÃMFvjœ î"nœ¢†bƒÒ‘²ÏŠOÁ$Øúˆ Ä&*aªsÔ‚Ôu4R4´Ú´èÜéè3¶³•Ñ”ñS&3?s?‹?+žõ›Û{-‡Ç:çE.n÷Už7éoÂ(®ów씜ªFžËo¢—Œĵ%ðÏ$«¤Â¥ÕÉÔä÷2²ùr>òê{Øö¬*¼T¼¦T©œ­©êªfª®¦AÖÒâÑf×aÕeÕãÐ'’TLLÌÌó-ª,;¬†ö~°^·e´“²7qðwÌt:‹ð^Sn8w kÏ$¯ïG>~bþ.G{‚VB¤CƒÂjÃ?Dòïó‹ª^ŒUËŽMNJÞ?r@2%/uy/]ÉäË*ÊÆæ¤ænæ<‚?ZV Sø¨8æ8éÄHéÑ2ËÓ¬Ÿ+oWWÔ¤Õ†]ðºèÒàÖx)±µ°½¥ãùUpMú†÷­Òî§}ÔwÌŽÝö€s8ðñ•ŠçŽ/j_ͽ}ç4‘4™;uècÔg‹/³¯¾æ“[xú=èǯŸ™+øÕâ5æõ’Mš­C»ïN ¬@ÈÕH-Â(XDj„ mÈ JD¼ß=‘E¶Cª*á»ð7;ʪC|Ï€6Cg£û1hŒ&óˆõŶàn/®·ðñ플” ”ïñæø[9B#QŒØH%Gu“Ú”zŒ&ŠO[K§K÷>›A‚á9c*“8Ó+æ\–¯¬UlvìöŽDNYÎ9®:n?žiRoŸ<ßÿ @©` ª0ðG‘nÑr±q EI6Éu©qé~r½Ll¼œ‡¼ÑYNEJÅe¥iåQ•{ª7Õ.«7iÔiÖj×®ÓiÒíл¥?dðÚpÖhË„ÁTÜLÏÜÝ"ɲԪsï¨õŠ-›ª½‡C¦c½Óç_®ünîû=.z¾òÆûhøFû5øO’‚܃+BÆÃøÃƒ"Z#×¢ô£ bÆâÄâãî$Ñï÷Hn<°šªw°0m,C,3!k ›%'8÷V>Óáð#CÇÄ Ž®û”Œœ0<Ù}J½ìÖi½ŠáJתù³YçHµÝ|/RÕ_k mæ»4ÖZÑîÕ!Ú¹tµïZÉ€[ªÝ´=ú:îdXÝg|ó lØö1áÉ­‘ðç£w_F¾f}Ó34N7Ñ5é=Eœîøä1Cñ¥uÎyúV·hù}i©tYueüWÆºÐÆÀ–ÿ®ÿù¹ <ß :H²‡’ Jè43ÃÚp8|~ŒÂ¢4PûQ×QÛHGú=Fñ÷V[ÃàBq/( )®SÊS¶ã•ðýÂwb •&ÕwêFšZe:âã^†óŒL©ÌÑ,¡¬Ál¡ìÑ9 ¹.p÷ðLðB|‚ü¦Q‚åBýÂó¢ìbFâñu’o¥éÈÆ2²·å6÷h ‘Æe¢ŠƒjÚ }Ír­:ºúDƒpÃce“j3¼y´Å˜•áÞVÛL»yGÇ^gI—SnX÷)/;ï_¿K‚ÁL!ÇÂðá‡"Ñû2£Ñ1Ùq„ø‚D–¤ÊdÑ—Sµ>Lw͘ÍÚŸM•S™'›çˆãѹ‚Ô"†âóÇ•O<(õ8õ½<³‚ùL]•rõ½ûs“çC/ü¸_¿Ú×´x)¨å]›u{o‡LgåUBWܵ‰&7Ûnstgô|é³îïºË3pèÞÜàޡ·é&Ÿè>=;²õÜa´áÅÚ+í×ioºÞμ#Ž O¨¼×˜Ôø =Å9µ9ýêcç¤Ï3ðL×—ÈYÒìÐ\üWÖ¯]óŽó‹ßòH ­‹º‹#ßݾþýcuéÀOègæ2z9k³’³Š_=ò‹êWîv-cmc=výë†ÿÆëM‹ÍÞ-…­ºmöí#;þÿ]ƒµ³¼nDhDÉLWo÷çÿÝ),4©óÚmôÈ™j±SÛÅŒŸ}½ôL‘+'rlE†îÖÁ!:»_¸ "ÛÁáÞ–ÿ` ÿ(k#c!«ÈŒìudŒ•í?ò”¤@] y‰_´þ;UÁ^&H  FämQ±Öv@pwtœ>‚i<•hëðÎ’¯ŸÞ?rö20þ­ÓÅïÌň|€ñ…D˜î¬™ V¦ ÙIc‘Š/?ŽÔ„™!ßezÿœ%?ðBzâ¾hä}ûÁaȈdL‚Iÿèéþ›Ä`w\2îZ$!õeÈlæü= ™óÍ à‹à?r/d޾ÕE{¥ÿkÎ?;övWCn Ï7þ¬ -„–EïAë ÕÑhe@B3£Ù$Z­„ÖFk¢U‘>e`¦ËÖ¸c?¬Í?®4"QÅ>éÝùïÞzý®vÐÿþ·€ á¹+sV€ÔOîÖ"w`?öÚAÝn;@ÿ³Åø%ìÔ ݈ÈĨ €À’6R5é'A2÷‘’ É’eÈà¿‹hþv|Èœi!IDATH ÕVÍ+´Qÿ͘òµ"c§,䫱ÀB& ²UvjÊÇÙÀØ`E„b…‰|D¤(LÓL¦°’¢4Ì Î{Ï}›k>ßyƈÞ[Ïóœ{îïž{î9¿{î£#Ñð íüüëëëšV®¬¬„^ò›A^¯¼87½^¯éGô§ÛÆÆ544$´ì¯DtooÂQQ­¯ÿÆQÇ_뮾Çü4xzzBjjªf“?ÑÃÃCTUU%ä$ïæÇý ?Ce¸Ýn,//ãèèH¥Äåra~~^õ“b9êñx°¸¸ˆÙÙYµÄþþ¾Ô±Bq”9szz ‹ÅƒÁ€‹‹ 9annÝÝݸ¿¿1¢¬… }}}HOOÓþíþ‹Ÿ¼““ âúú———X[[ÃËË VWW? XÞÜÜ„Ùl†ÓéDQQ‘T³£ÓÓÓhnnÀb~ù¶ÉÊÊŠ:ζ'&&°»»uœ7’£³³ó^u?>>H€ijjJ MNN*Y‹pvvFÃÃÃ$œ÷÷÷Óèèhˆ.¼S]]MuuuájŠ8L)))hjjÂöö¶ÜÍÎÎŽ¦H~n]ðI§“×b[[[ßcñ3xniiipWÉ% á뇽½½RætÄk̳òòrù0ïa2™ÀiµÛí¨­­i‚éöðð‘ø|>¤¥¥)lTGëëëeA¶Z­èèè`Žs'^ËÈÈP‘B¬¬¬È~¼úùöö&±333ÈÏÏ—»¢¢(((G*¢1OÅÉ¥ñññˆ±D777$•Sbñsii‰DÆhhhˆžŸŸ%¶¤¤„Z[[illŒÞßߥ.ª£<ÒÒÒB~¿_‚’yåååÑÝÝÕÔÔàh„)›ÍF]]]t{{«Æøöôô ŽÒEuTÔ-ºººR d„ööveff’àÝ—M©S/Ãëë«,º\ðËÊÊ×’˜§\?¿r¿‡¬Øbnn.ÒÂÂB@õ-߃ƒÊÉɉ[?ã-¦RÏ<¥!>áq‘%þ¤­­­„çOød«(PF”¢IEND®B`‚saods9/ds9/doc/ref/img/square.png000644 000765 000000 00000015313 11343045612 017170 0ustar00joyewheel000000 000000 ‰PNG  IHDR#ÌúWé­iCCPICC ProfilexíZgTM³î™M°»äœ—œa ’sÎ 9çœ%ƒ’$H*‚ˆ(’$Š‘¤((#‚*‚Š€Ä;àëýÎ=ßù~ÝûïÚçÌ̳ÕÕÕ½Ss¦kê)DK½"#Ca@XxL”µ¡ÉÑÉ™„{ €ô€  ¼|¢#µ­¬Ì•ÿЖGm¤HîØr®x™.÷0Ôõrm¶¨—ÿôGL…Ld…~cßìý'ìàø˜ÈDçðö ôBú¡*KDÙZë"øÄ€]Lùr{ïbº©ìåÛ¢Oòò @0;ío콃É;8Î'±ÏެK9°¾~Ñ>Ct|}£}Â¦Ö ‹@úEwOd2V9€ÀνC®Hó¹€r¸cÿ’…PßoοdBˆŽ"DÎü/ÙëÝû 1?Šö—“Ý5uÀ¼ÛÞþ!„ØDô7 ··×ÏnooÖ€z @w¨OlTÜ®.@ï\0h#âAnÀD€$Š@h}`,-pîÀ‚0âA2H‡@>(ÇA¨çÀEÐ ÚÀpô€»`<ÏÁk0¦Á°~‚u‚p¢‡X!nH‡d %HÒ‡L!kÈ ò„ü¡0(J†2 <¨:UCuP tê†îA¡—Ð4-Bk0 `F˜„¥`EX 6m`WØŽ„á ø|®†àø6<?ƒÇá/ð¼Â£˜P$”8J¥ƒ2G9¡üP‘¨dTªU…jDu¡î ž¢Þ¡fQ«h4šÍ–@+£ жh/t:‡.EŸG_F÷¢Ÿ ÇÑóè ÃŽÁ(b 1ö?L &SŒ©Á´cú0#˜˜X–+€ÝƒÕÇÚc° Ø\l¶{;ŒÀ~Ç¡pL8aœ2Π王ÄeàNàêp×qø÷¸%  i  {Š`ŠŠ"Šó×(†)>P¬P)y)(M)=)c)ó(«(;(‡('(—ñD<^o‰÷Ã'ã‹ðñÝøøy†ÀE'˜|û Å„Bá á‘H ªí‰áÄlb5ñq„ø• KE¢R¡²¥ §Ê¡:KuƒêÕ"5‘Z˜Z‡Ú:º˜úõ õG˜†›F…Æž&Šæ(MÍ=š)Zˆ–›V•Ö‘6޶˜¶•v˜vŽO'Bg@çK—AWM×M7N·EÏE¯FïBŸD_FßEÿŠþƒ2ƒCCÃu†7 Œ\ŒŒŒiŒgû§™pL¢L¦LaLLmLÏ™V˜Ù™Õ™=™3˜/02ϳгìaqb9Àr–å.ËVVyV'Ö¬5¬÷X¿²1°)±¹³e²Õ³=f[fçb×ef/`¿ÂþŽË!ÉaË‘ÌQÃ1Äñƒ“ƒS—3”³„ó&çG.j.E.O®<®v®1n,7™Û™;“»™û%ŠG’Ç‘'ƒ§™ç M"“\HÙ¤vÒ;^<¯"¯ï1Þ¼3|L|:|‘||ƒ|«ü‚ü6üiü—øÇˆ*A'î ü´Ìlœ¢ÒŠªF Ë û Ÿ^q9"rKdA”OÔN4[´KtNŒGÌZ,KìªØ¬8·¸µø!ñkâó|öy·%–$E%Ý%‹%ïInJÉII‘z&MÖ–Ž—n–ž"s­É¹äòª Y&@¦Ræ…,¬‘ìAÙ«²‹rbr>r§åžËÓÈɧËß_ÞCÞ¼§vϸ»‚BÂ"VQG1E±Kñ§’ŒR˜R½ÒGe~eOå å×*,*¶*E*T©TMUsUÔ°jzjj½êº–zªúmõ- [[ššš©šÝZ@K[+]«_£m¨£=¨CÔ±Ð)ÔÑeÖuÔ-×}§Ç«ç§W§7§OÖÑ¿ª¿a ee0hHmhcxÊð¿QÑ%£ŸÆªÆiÆ&Ô&v&å&“¦b¦ûL¯š3#³³—æ$ó@óVó5 ‹ÃÏ-¹-,[-×­ô­ŽY½Ú+°7|o—5ÚÚÒºÌzÚFÆ&Ùæž-£­§m“í/;»"»q{ û$ûFo‡‡-G3Ç2Ç'%§CNÏœcœû\\|\Ú\Q®6®5®KnznÇÝ>º+ºçº¿öðHñxìÉçã9àÅæêuÛ›ÞÛϻˇèãésÙ—Â×Õ·ÕãçìwÉíïä)àЈ t l ¢ òê ¦ ö ¾ÂÒÊ:Æ–ö<\*<;|"B%¢8âk¤aduäú>û}-Q„(ÿ¨žhÎè„è‘é˜ü˜O±º±U±qNqñ ñ‘ñà ⠹ Ÿõk’à$ϤÛû¹÷Øÿ6Y-¹qÂäDÇIÒÉü“+¥Þ¥Ã§TN/£/K)›-w(ï?-sº²‚X‘XñéŒÝ™¾J™Êª*šªUsÕ.ÕCgUÎÖ×°×äÕ¬ >÷¦Ö¬öÆy©ó•h/¤_Xªó«{yÑäâzéú³ L 9 ëšì›†š5›Û/‰\ªh¡kÉnÙhÝ×ú©Í­m¤Ý¸ýöe…ËMåô¹W +‰W¯]}ßåÜõôšéµþë×¯Ü ß¨¿)póÌ-¶[Å·©oçv£»S»×zâz{Ãzgúüû&û=úßÞqº3z׿î“‹÷LîÝ¿oxÿî þ`ÿîPï=µö ë ÷>Ò}Ô÷XïñÝ'†Oî=5yú`Äbäñ3›g£ÏŸ¿u|á÷bæeØËÅW±¯Ö^§¾A½ÉyKý¶xŒmìÌ;wõã2ãW&4&î¼7{?2é<9ù!øÃ÷©¤ix:ÿ#ÃÇÓŸ?]ú¬ô¹wÆlfô‹ç—/³±³Ûsy_™¿VÏKÌ_ý¦÷íñ‚ëÂÌbìwøû±œ?ê——îü´ùù~9bykåð*Çjý/å_÷לÖ>¯'lPlœÚݼ¶eºõv;üo,ð7ø üþÆc¿±ÀßXào^ào^ào^ào^ào^ào^ào^àÿo^ Ò+Êk7@!gØáf¾#<•   þ·ý¿y”ßÑ@!¤Ð±„Bx ‹ð 5`Ò:a¸EFõ ý1$Ìl?®‰âe+~ˆ°L%MíOÓB‡¢·d8ǸÆlÁr†õ »4Ç>ήq’¯'_…@§à#¡Âë¢Ôbâ{$ %¥ü¥cÈereÉÉï)R8¬˜®” ¤â¨j FVg×€5f4iujŸÖÉÐ Ò³ÔW4à1Ä.½1¾cÒbZa–ožddébe¾WÛZÑFÚVØŽdÏéÀâÈäÄèÌèÂäÊêÆéÎë!ì)å¥è­ícîëäàp(ðdP]𵇡ïÖ#‘¤} QfÑ>1I±…quñ·ž%Î™ˆ§h¦ÚôOKHÏË(Ïl̺yèaöÛœ¹Üõ|ÂaŽ#âGÕŽYxFeW”´<ñáäæ)Ö2¹r«Óa‡ÏÔWÞ¯ú|–¢Føœamàùœ ë/Î6%šÌ›Ã.min}Ø6wß!Ò©Åëê®Òk­×oLÜ\¾ïæì‘èUéÓï7¿cs×~ÀîžÍ}óAý!ÕÒIÃ4Û>?yrýiõHÖ³Àç&£¢/(^L¿ìyuúuÜ«·bc¨±±wWÆ 'BßLòNn|x9Õ>}ôcÐ'ƒÏ3˜™Ï_žÌvÏu~혿ýmdáÇwÞ.KU?VÌV[Ö8Ös7ÁVÊöö®ÿ©Â; 0†pDå0œ¯¢rЂè!LÖG¦à¡dÂs”‰ÎTÔ4‹tdú`†&ÆYfaWÖ¶[ìŸ8±\BÜJyóôÃÈ—g‹ÏWF7_¢_^3¾áy+9¦ñÎfÜÒÜk<ý¤£¼Ž|||3üÍÑ‚Š‚+BÂûD$DÞ‹–ˆˆý¯”0–X,‘R–z-½ŸÌN¾"c'³ {XND®WÞM~uO±‚”Â}E?%H©BYUù…J¬*ƒj«š•Ú¼úa !Í-¢V“¶…ö¢N‰®²î¸Þ!}iýW™†²†ï uš\4u7c2{`ži¡n±bÙf¾W|ïŒõ›[Û»ûp²Ã’c—Sгž ¥Ë#×nîîBîóW<ӽ̼Y½§|Ú|Óü¬ýùýWÖ%;„È…Ò†.„= o8™´Ï3Ê Z2†)f;v&îY|wBSbyRÞþÄäà®)©ÚåÓDÓ¹33 YpÖú¡¥ìùœ™Üi$Ó?qxüÈøÑ‰c >~-úY¼yœâÓIþR¹SúeNåá§UT¹Yù®>+Vãp.§öÖùÕ:Å‹Iõ=Ä&çæ†K[­¶mM—):|;û¯ uå][¼á|óîmÅîæ^‰¾ËwÌî.ß»6Xþ vxì‰éÈÂèÈ«•1ß÷Ä©…Ú¯n‹m˺ëÔ;þÿͧïì XN,àøVòÜ>ý ÂÍŸÀŠ [e„Z? ……dý÷þÁÈcí‡<='A ¸&æ™’„ /h?tj…†¡Y˜à ø0Ü›(!Ô^T ¡iÑúßÛ‰^ÄHaÂ0͘E„ÃMFvjœ î"nœ¢†bƒÒ‘²ÏŠOÁ$Øúˆ Ä&*aªsÔ‚Ôu4R4´Ú´èÜéè3¶³•Ñ”ñS&3?s?‹?+žõ›Û{-‡Ç:çE.n÷Už7éoÂ(®ów씜ªFžËo¢—Œĵ%ðÏ$«¤Â¥ÕÉÔä÷2²ùr>òê{Øö¬*¼T¼¦T©œ­©êªfª®¦AÖÒâÑf×aÕeÕãÐ'’TLLÌÌó-ª,;¬†ö~°^·e´“²7qðwÌt:‹ð^Sn8w kÏ$¯ïG>~bþ.G{‚VB¤CƒÂjÃ?Dòïó‹ª^ŒUËŽMNJÞ?r@2%/uy/]ÉäË*ÊÆæ¤ænæ<‚?ZV Sø¨8æ8éÄHéÑ2ËÓ¬Ÿ+oWWÔ¤Õ†]ðºèÒàÖx)±µ°½¥ãùUpMú†÷­Òî§}ÔwÌŽÝö€s8ðñ•ŠçŽ/j_ͽ}ç4‘4™;uècÔg‹/³¯¾æ“[xú=èǯŸ™+øÕâ5æõ’Mš­C»ïN ¬@ÈÕH-Â(XDj„ mÈ JD¼ß=‘E¶Cª*á»ð7;ʪC|Ï€6Cg£û1hŒ&óˆõŶàn/®·ðñ플” ”ïñæø[9B#QŒØH%Gu“Ú”zŒ&ŠO[K§K÷>›A‚á9c*“8Ó+æ\–¯¬UlvìöŽDNYÎ9®:n?žiRoŸ<ßÿ @©` ª0ðG‘nÑr±q EI6Éu©qé~r½Ll¼œ‡¼ÑYNEJÅe¥iåQ•{ª7Õ.«7iÔiÖj×®ÓiÒíл¥?dðÚpÖhË„ÁTÜLÏÜÝ"ɲԪsï¨õŠ-›ª½‡C¦c½Óç_®ünîû=.z¾òÆûhøFû5øO’‚܃+BÆÃøÃƒ"Z#×¢ô£ bÆâÄâãî$Ñï÷Hn<°šªw°0m,C,3!k ›%'8÷V>Óáð#CÇÄ Ž®û”Œœ0<Ù}J½ìÖi½ŠáJתù³YçHµÝ|/RÕ_k mæ»4ÖZÑîÕ!Ú¹tµïZÉ€[ªÝ´=ú:îdXÝg|ó lØö1áÉ­‘ðç£w_F¾f}Ó34N7Ñ5é=Eœîøä1Cñ¥uÎyúV·hù}i©tYueüWÆºÐÆÀ–ÿ®ÿù¹ <ß :H²‡’ Jè43ÃÚp8|~ŒÂ¢4PûQ×QÛHGú=Fñ÷V[ÃàBq/( )®SÊS¶ã•ðýÂwb •&ÕwêFšZe:âã^†óŒL©ÌÑ,¡¬Ál¡ìÑ9 ¹.p÷ðLðB|‚ü¦Q‚åBýÂó¢ìbFâñu’o¥éÈÆ2²·å6÷h ‘Æe¢ŠƒjÚ }Ír­:ºúDƒpÃce“j3¼y´Å˜•áÞVÛL»yGÇ^gI—SnX÷)/;ï_¿K‚ÁL!ÇÂðá‡"Ñû2£Ñ1Ùq„ø‚D–¤ÊdÑ—Sµ>Lw͘ÍÚŸM•S™'›çˆãѹ‚Ô"†âóÇ•O<(õ8õ½<³‚ùL]•rõ½ûs“çC/ü¸_¿Ú×´x)¨å]›u{o‡LgåUBWܵ‰&7Ûnstgô|é³îïºË3pèÞÜàޡ·é&Ÿè>=;²õÜa´áÅÚ+í×ioºÞμ#Ž O¨¼×˜Ôø =Å9µ9ýêcç¤Ï3ðL×—ÈYÒìÐ\üWÖ¯]óŽó‹ßòH ­‹º‹#ßݾþýcuéÀOègæ2z9k³’³Š_=ò‹êWîv-cmc=výë†ÿÆëM‹ÍÞ-…­ºmöí#;þÿ]ƒµ³¼nDhDÉLWo÷çÿÝ),4©óÚmôÈ™j±SÛÅŒŸ}½ôL‘+'rlE†îÖÁ!:»_¸ "ÛÁáÞ–ÿ` ÿ(k#c!«ÈŒìudŒ•í?ò”¤@] y‰_´þ;UÁ^&H  FämQ±Öv@pwtœ>‚i<•hëðÎ’¯ŸÞ?rö20þ­ÓÅïÌň|€ñ…D˜î¬™ V¦ ÙIc‘Š/?ŽÔ„™!ßezÿœ%?ðBzâ¾hä}ûÁaȈdL‚Iÿèéþ›Ä`w\2îZ$!õeÈlæü= ™óÍ à‹à?r/d޾ÕE{¥ÿkÎ?;övWCn Ï7þ¬ -„–EïAë ÕÑhe@B3£Ù$Z­„ÖFk¢U‘>e`¦ËÖ¸c?¬Í?®4"QÅ>éÝùïÞzý®vÐÿþ·€ á¹+sV€ÔOîÖ"w`?öÚAÝn;@ÿ³Åø%ìÔ ݈ÈĨ €À’6R5é'A2÷‘’ É’eÈà¿‹hþv|ÈœiÙIDATH ÍU=H²Q~ü²¨–(²¡† Ð²l«©2 *\'‹Öµ"°Ÿ5Z ÊņÀ)Šh¨AÁÁ@Dú¢†&E‹¨†z¿÷x_-}¿šÞ¾;Ü{î9çÞûÜsžs¯Fþ“öç7p„Ãa˜Ífô÷÷c{{»"£f+‹Âúúºðüü,œŸŸ ÂÅÅC€š@è¬T*%¼¾¾ÊÇNOO GGG<×–b¤ŽÔÝÝýé ÇÇG ³îW8#¡9==Åüü/x½^™7"(–5Ô4Òé4âñ8ÚÛÛå<ÞÜÜ ‹Áf³•nð)›Í‚Ò000€ÑÑQ¼¿¿c]]]p»Ý¨¯¯‡F£ÁÇDZ¹¹ L.—C4Åââ"´Z-‰¹··Ç¡|xx€Ïçû†ÃáÀÛÛ¯ßÚÚB&“ÁÕÕVWWqyy‰¡¡!X,–Oûtvv¢¹¹¹F²ž±óõõ5zzzXMyÝÝÝÅÔÔ”ä¦8£©©‰í°Z­ðx<Kz½^q*J{rr’QžœœÈ`ŒF#êêê …þ¹ÙW#½²Ôžžž¾B~¥]SSƒ‰‰ ²# þ("ìü¥£’•Êö‹©ê´"2ä5>>Ž &5åyaaåÞÞÞª›”+#‘G–tÄ1"¬øì—»(ÊUÁŒŒŒ€½³³ƒ™™^LÌ_YYQÜH2ˆ ‹t ’éQ[ZZâª!"÷õõqIþåcU0&“  §º££CöŸ•e%Áår¡¥¥µµµX^^æj* \΃j¥µœ!GâÍØØœN§Ò:E=q„K%NÒ´¶¶†ÖÖVØívÖ)uò;SîpxxºEHÍ&G&™LâååD@zôÔ—æOAìÄð â÷.øý~I¥ú(§éîîŽÿ‹¶¶653ó鬿0`ý´#Ø~nIEND®B`‚saods9/ds9/cmaps/ch05m151008.sao000644 000765 000000 00000027632 12567376460 016317 0ustar00joyewheel000000 000000 # SAOimage color table # ch05m151008 # created by cptutils 1.46 # Wed Aug 15 23:30:54 2012 PSEUDOCOLOR RED: (0,0)(0.0039,0.011765)(0.0078,0.023529)(0.0118,0.035294)(0.0157,0.043137)(0.0196,0.054902)(0.0235,0.062745)(0.0275,0.070588)(0.0314,0.078431)(0.0353,0.086275)(0.0392,0.090196)(0.0431,0.098039)(0.0471,0.10588)(0.051,0.1098)(0.0549,0.11765)(0.0588,0.12157)(0.0627,0.12549)(0.0667,0.12941)(0.0706,0.13333)(0.0745,0.14118)(0.0784,0.14118)(0.0824,0.1451)(0.0863,0.14902)(0.0902,0.15294)(0.0941,0.15294)(0.098,0.15686)(0.102,0.16078)(0.1059,0.16078)(0.1098,0.16078)(0.1137,0.16471)(0.1176,0.16471)(0.1216,0.16471)(0.1255,0.16863)(0.1294,0.16863)(0.1333,0.16863)(0.1373,0.16863)(0.1412,0.16863)(0.1451,0.16863)(0.149,0.16863)(0.1529,0.16863)(0.1569,0.16863)(0.1608,0.16471)(0.1647,0.16471)(0.1686,0.16471)(0.1725,0.16471)(0.1765,0.16471)(0.1804,0.16471)(0.1843,0.16078)(0.1882,0.16078)(0.1922,0.16078)(0.1961,0.16078)(0.2,0.16078)(0.2039,0.16078)(0.2078,0.16078)(0.2118,0.15686)(0.2157,0.15686)(0.2196,0.15686)(0.2235,0.15686)(0.2275,0.15686)(0.2314,0.16078)(0.2353,0.16078)(0.2392,0.16078)(0.2431,0.16078)(0.2471,0.16078)(0.251,0.16471)(0.2549,0.16471)(0.2588,0.16471)(0.2627,0.16863)(0.2667,0.16863)(0.2706,0.17255)(0.2745,0.17647)(0.2784,0.18039)(0.2824,0.18039)(0.2863,0.18431)(0.2902,0.18824)(0.2941,0.19216)(0.298,0.19608)(0.302,0.20392)(0.3059,0.20784)(0.3098,0.21176)(0.3137,0.21961)(0.3176,0.22353)(0.3216,0.23137)(0.3255,0.23529)(0.3294,0.24314)(0.3333,0.25098)(0.3373,0.25882)(0.3412,0.26667)(0.3451,0.27451)(0.349,0.28235)(0.3529,0.2902)(0.3569,0.29804)(0.3608,0.30588)(0.3647,0.31765)(0.3686,0.32549)(0.3725,0.33333)(0.3765,0.3451)(0.3804,0.35294)(0.3843,0.36471)(0.3882,0.37647)(0.3922,0.38431)(0.3961,0.39608)(0.4,0.40784)(0.4039,0.41961)(0.4078,0.43137)(0.4118,0.44314)(0.4157,0.45098)(0.4196,0.46275)(0.4235,0.47451)(0.4275,0.48627)(0.4314,0.49804)(0.4353,0.5098)(0.4392,0.52157)(0.4431,0.53333)(0.4471,0.5451)(0.451,0.56078)(0.4549,0.57255)(0.4588,0.58431)(0.4627,0.59608)(0.4667,0.60392)(0.4706,0.61569)(0.4745,0.62745)(0.4784,0.63922)(0.4824,0.65098)(0.4863,0.66275)(0.4902,0.67451)(0.4941,0.68235)(0.498,0.69412)(0.502,0.70588)(0.5059,0.71373)(0.5098,0.72549)(0.5137,0.73333)(0.5176,0.7451)(0.5216,0.75294)(0.5255,0.76471)(0.5294,0.77255)(0.5333,0.78039)(0.5373,0.78824)(0.5412,0.79608)(0.5451,0.80392)(0.549,0.81176)(0.5529,0.81961)(0.5569,0.82353)(0.5608,0.83137)(0.5647,0.83922)(0.5686,0.84314)(0.5725,0.84706)(0.5765,0.8549)(0.5804,0.85882)(0.5843,0.86275)(0.5882,0.86667)(0.5922,0.87059)(0.5961,0.87451)(0.6,0.87843)(0.6039,0.87843)(0.6078,0.88235)(0.6118,0.88627)(0.6157,0.88627)(0.6196,0.88627)(0.6235,0.8902)(0.6275,0.8902)(0.6314,0.8902)(0.6353,0.8902)(0.6392,0.8902)(0.6431,0.8902)(0.6471,0.8902)(0.651,0.8902)(0.6549,0.8902)(0.6588,0.88627)(0.6627,0.88627)(0.6667,0.88235)(0.6706,0.88235)(0.6745,0.88235)(0.6784,0.87843)(0.6824,0.87451)(0.6863,0.87451)(0.6902,0.87059)(0.6941,0.86667)(0.698,0.86667)(0.702,0.86275)(0.7059,0.85882)(0.7098,0.8549)(0.7137,0.85098)(0.7176,0.85098)(0.7216,0.84706)(0.7255,0.84314)(0.7294,0.83922)(0.7333,0.83529)(0.7373,0.83137)(0.7412,0.82745)(0.7451,0.82745)(0.749,0.82353)(0.7529,0.81961)(0.7569,0.81569)(0.7608,0.81569)(0.7647,0.81176)(0.7686,0.80784)(0.7725,0.80784)(0.7765,0.80392)(0.7804,0.8)(0.7843,0.8)(0.7882,0.79608)(0.7922,0.79608)(0.7961,0.79608)(0.8,0.79216)(0.8039,0.79216)(0.8078,0.79216)(0.8118,0.79216)(0.8157,0.79216)(0.8196,0.78824)(0.8235,0.79216)(0.8275,0.79216)(0.8314,0.79216)(0.8353,0.79216)(0.8392,0.79216)(0.8431,0.79608)(0.8471,0.79608)(0.851,0.79608)(0.8549,0.8)(0.8588,0.80392)(0.8627,0.80392)(0.8667,0.80784)(0.8706,0.81176)(0.8745,0.81569)(0.8784,0.81569)(0.8824,0.81961)(0.8863,0.82353)(0.8902,0.83137)(0.8941,0.83529)(0.898,0.83922)(0.902,0.84314)(0.9059,0.84706)(0.9098,0.8549)(0.9137,0.85882)(0.9176,0.86667)(0.9216,0.87059)(0.9255,0.87843)(0.9294,0.88235)(0.9333,0.8902)(0.9373,0.89412)(0.9412,0.90196)(0.9451,0.90588)(0.949,0.91373)(0.9529,0.92157)(0.9569,0.92549)(0.9608,0.93333)(0.9647,0.94118)(0.9686,0.9451)(0.9725,0.95294)(0.9765,0.96078)(0.9804,0.96471)(0.9843,0.97255)(0.9882,0.98039)(0.9922,0.98431)(0.9961,0.99216)(1,1) GREEN: (0,0)(0.0039,0.0078431)(0.0078,0.015686)(0.0118,0.019608)(0.0157,0.027451)(0.0196,0.031373)(0.0235,0.039216)(0.0275,0.043137)(0.0314,0.047059)(0.0353,0.054902)(0.0392,0.058824)(0.0431,0.062745)(0.0471,0.066667)(0.051,0.07451)(0.0549,0.078431)(0.0588,0.082353)(0.0627,0.086275)(0.0667,0.094118)(0.0706,0.098039)(0.0745,0.10196)(0.0784,0.1098)(0.0824,0.11373)(0.0863,0.11765)(0.0902,0.12549)(0.0941,0.12941)(0.098,0.13725)(0.102,0.14118)(0.1059,0.14902)(0.1098,0.15294)(0.1137,0.16078)(0.1176,0.16471)(0.1216,0.17255)(0.1255,0.18039)(0.1294,0.18431)(0.1333,0.19216)(0.1373,0.2)(0.1412,0.20392)(0.1451,0.21176)(0.149,0.21961)(0.1529,0.22745)(0.1569,0.23137)(0.1608,0.23922)(0.1647,0.24706)(0.1686,0.2549)(0.1725,0.26275)(0.1765,0.26667)(0.1804,0.27451)(0.1843,0.28235)(0.1882,0.2902)(0.1922,0.29804)(0.1961,0.30588)(0.2,0.31373)(0.2039,0.31765)(0.2078,0.32549)(0.2118,0.33333)(0.2157,0.34118)(0.2196,0.34902)(0.2235,0.35686)(0.2275,0.36471)(0.2314,0.36863)(0.2353,0.37647)(0.2392,0.38431)(0.2431,0.39216)(0.2471,0.39608)(0.251,0.40392)(0.2549,0.41176)(0.2588,0.41961)(0.2627,0.42353)(0.2667,0.43137)(0.2706,0.43529)(0.2745,0.44314)(0.2784,0.44706)(0.2824,0.4549)(0.2863,0.45882)(0.2902,0.46667)(0.2941,0.47059)(0.298,0.47843)(0.302,0.48235)(0.3059,0.48627)(0.3098,0.4902)(0.3137,0.49804)(0.3176,0.50196)(0.3216,0.50588)(0.3255,0.5098)(0.3294,0.51373)(0.3333,0.51765)(0.3373,0.52157)(0.3412,0.52549)(0.3451,0.52549)(0.349,0.52941)(0.3529,0.53333)(0.3569,0.53725)(0.3608,0.53725)(0.3647,0.54118)(0.3686,0.54118)(0.3725,0.5451)(0.3765,0.5451)(0.3804,0.54902)(0.3843,0.54902)(0.3882,0.55294)(0.3922,0.55294)(0.3961,0.55294)(0.4,0.55294)(0.4039,0.55686)(0.4078,0.55686)(0.4118,0.55686)(0.4157,0.55686)(0.4196,0.55686)(0.4235,0.55686)(0.4275,0.55686)(0.4314,0.55686)(0.4353,0.55686)(0.4392,0.55686)(0.4431,0.55686)(0.4471,0.55686)(0.451,0.55686)(0.4549,0.55686)(0.4588,0.55686)(0.4627,0.55294)(0.4667,0.55294)(0.4706,0.55294)(0.4745,0.55294)(0.4784,0.55294)(0.4824,0.54902)(0.4863,0.54902)(0.4902,0.54902)(0.4941,0.54902)(0.498,0.54902)(0.502,0.5451)(0.5059,0.5451)(0.5098,0.5451)(0.5137,0.5451)(0.5176,0.5451)(0.5216,0.5451)(0.5255,0.5451)(0.5294,0.5451)(0.5333,0.5451)(0.5373,0.5451)(0.5412,0.5451)(0.5451,0.5451)(0.549,0.5451)(0.5529,0.5451)(0.5569,0.5451)(0.5608,0.5451)(0.5647,0.5451)(0.5686,0.5451)(0.5725,0.54902)(0.5765,0.54902)(0.5804,0.54902)(0.5843,0.54902)(0.5882,0.55294)(0.5922,0.55294)(0.5961,0.55686)(0.6,0.55686)(0.6039,0.56078)(0.6078,0.56078)(0.6118,0.56471)(0.6157,0.56863)(0.6196,0.57255)(0.6235,0.57255)(0.6275,0.57647)(0.6314,0.58039)(0.6353,0.58431)(0.6392,0.58824)(0.6431,0.59216)(0.6471,0.59608)(0.651,0.6)(0.6549,0.60392)(0.6588,0.60784)(0.6627,0.61176)(0.6667,0.61569)(0.6706,0.62353)(0.6745,0.62745)(0.6784,0.63137)(0.6824,0.63922)(0.6863,0.64314)(0.6902,0.64706)(0.6941,0.6549)(0.698,0.65882)(0.702,0.66667)(0.7059,0.67059)(0.7098,0.67843)(0.7137,0.68627)(0.7176,0.6902)(0.7216,0.69804)(0.7255,0.70196)(0.7294,0.7098)(0.7333,0.71765)(0.7373,0.72157)(0.7412,0.72941)(0.7451,0.73725)(0.749,0.74118)(0.7529,0.74902)(0.7569,0.75686)(0.7608,0.76078)(0.7647,0.76863)(0.7686,0.77647)(0.7725,0.78039)(0.7765,0.78824)(0.7804,0.79608)(0.7843,0.8)(0.7882,0.80784)(0.7922,0.81569)(0.7961,0.81961)(0.8,0.82745)(0.8039,0.83137)(0.8078,0.83922)(0.8118,0.84314)(0.8157,0.85098)(0.8196,0.8549)(0.8235,0.86275)(0.8275,0.86667)(0.8314,0.87451)(0.8353,0.87843)(0.8392,0.88235)(0.8431,0.8902)(0.8471,0.89412)(0.851,0.89804)(0.8549,0.90588)(0.8588,0.9098)(0.8627,0.91373)(0.8667,0.91765)(0.8706,0.92157)(0.8745,0.92549)(0.8784,0.92941)(0.8824,0.93333)(0.8863,0.93725)(0.8902,0.94118)(0.8941,0.9451)(0.898,0.94902)(0.902,0.94902)(0.9059,0.95294)(0.9098,0.95686)(0.9137,0.96078)(0.9176,0.96078)(0.9216,0.96471)(0.9255,0.96863)(0.9294,0.96863)(0.9333,0.97255)(0.9373,0.97255)(0.9412,0.97647)(0.9451,0.97647)(0.949,0.98039)(0.9529,0.98039)(0.9569,0.98431)(0.9608,0.98431)(0.9647,0.98431)(0.9686,0.98824)(0.9725,0.98824)(0.9765,0.98824)(0.9804,0.99216)(0.9843,0.99216)(0.9882,0.99608)(0.9922,0.99608)(0.9961,0.99608)(1,1) BLUE: (0,0)(0.0039,0.011765)(0.0078,0.023529)(0.0118,0.035294)(0.0157,0.043137)(0.0196,0.054902)(0.0235,0.062745)(0.0275,0.07451)(0.0314,0.082353)(0.0353,0.094118)(0.0392,0.10196)(0.0431,0.1098)(0.0471,0.12157)(0.051,0.12941)(0.0549,0.14118)(0.0588,0.14902)(0.0627,0.16078)(0.0667,0.16863)(0.0706,0.17647)(0.0745,0.18824)(0.0784,0.19608)(0.0824,0.20392)(0.0863,0.21569)(0.0902,0.22353)(0.0941,0.23137)(0.098,0.23922)(0.102,0.24706)(0.1059,0.25882)(0.1098,0.26667)(0.1137,0.27451)(0.1176,0.28235)(0.1216,0.28627)(0.1255,0.29412)(0.1294,0.30196)(0.1333,0.3098)(0.1373,0.31373)(0.1412,0.32157)(0.1451,0.32941)(0.149,0.33333)(0.1529,0.33725)(0.1569,0.3451)(0.1608,0.34902)(0.1647,0.35294)(0.1686,0.35686)(0.1725,0.36078)(0.1765,0.36471)(0.1804,0.36863)(0.1843,0.37255)(0.1882,0.37255)(0.1922,0.37647)(0.1961,0.37647)(0.2,0.38039)(0.2039,0.38039)(0.2078,0.38039)(0.2118,0.38431)(0.2157,0.38431)(0.2196,0.38431)(0.2235,0.38431)(0.2275,0.38431)(0.2314,0.38431)(0.2353,0.38039)(0.2392,0.38039)(0.2431,0.38039)(0.2471,0.37647)(0.251,0.37647)(0.2549,0.37255)(0.2588,0.37255)(0.2627,0.36863)(0.2667,0.36471)(0.2706,0.36078)(0.2745,0.36078)(0.2784,0.35686)(0.2824,0.35294)(0.2863,0.34902)(0.2902,0.3451)(0.2941,0.34118)(0.298,0.33725)(0.302,0.33333)(0.3059,0.32941)(0.3098,0.32549)(0.3137,0.32157)(0.3176,0.31765)(0.3216,0.31373)(0.3255,0.3098)(0.3294,0.30588)(0.3333,0.30196)(0.3373,0.29804)(0.3412,0.29804)(0.3451,0.29412)(0.349,0.2902)(0.3529,0.28627)(0.3569,0.28235)(0.3608,0.27843)(0.3647,0.27843)(0.3686,0.27451)(0.3725,0.27059)(0.3765,0.27059)(0.3804,0.26667)(0.3843,0.26667)(0.3882,0.26667)(0.3922,0.26275)(0.3961,0.26275)(0.4,0.26275)(0.4039,0.26275)(0.4078,0.26275)(0.4118,0.26275)(0.4157,0.26275)(0.4196,0.26275)(0.4235,0.26667)(0.4275,0.26667)(0.4314,0.26667)(0.4353,0.27059)(0.4392,0.27451)(0.4431,0.27451)(0.4471,0.27843)(0.451,0.28235)(0.4549,0.28627)(0.4588,0.2902)(0.4627,0.29804)(0.4667,0.30196)(0.4706,0.30588)(0.4745,0.31373)(0.4784,0.31765)(0.4824,0.32549)(0.4863,0.33333)(0.4902,0.34118)(0.4941,0.3451)(0.498,0.35294)(0.502,0.36471)(0.5059,0.37255)(0.5098,0.38039)(0.5137,0.38824)(0.5176,0.4)(0.5216,0.40784)(0.5255,0.41961)(0.5294,0.42745)(0.5333,0.43922)(0.5373,0.45098)(0.5412,0.45882)(0.5451,0.47059)(0.549,0.48235)(0.5529,0.49412)(0.5569,0.50588)(0.5608,0.51765)(0.5647,0.52941)(0.5686,0.54118)(0.5725,0.55294)(0.5765,0.56471)(0.5804,0.57647)(0.5843,0.58824)(0.5882,0.6)(0.5922,0.61176)(0.5961,0.62745)(0.6,0.63922)(0.6039,0.65098)(0.6078,0.66275)(0.6118,0.67451)(0.6157,0.68627)(0.6196,0.69804)(0.6235,0.7098)(0.6275,0.72157)(0.6314,0.73333)(0.6353,0.7451)(0.6392,0.75686)(0.6431,0.76863)(0.6471,0.78039)(0.651,0.78824)(0.6549,0.8)(0.6588,0.81176)(0.6627,0.81961)(0.6667,0.83137)(0.6706,0.83922)(0.6745,0.85098)(0.6784,0.85882)(0.6824,0.86667)(0.6863,0.87451)(0.6902,0.88627)(0.6941,0.89412)(0.698,0.90196)(0.702,0.90588)(0.7059,0.91373)(0.7098,0.92157)(0.7137,0.92941)(0.7176,0.93333)(0.7216,0.94118)(0.7255,0.9451)(0.7294,0.94902)(0.7333,0.95294)(0.7373,0.96078)(0.7412,0.96471)(0.7451,0.96863)(0.749,0.96863)(0.7529,0.97255)(0.7569,0.97647)(0.7608,0.98039)(0.7647,0.98039)(0.7686,0.98431)(0.7725,0.98431)(0.7765,0.98431)(0.7804,0.98824)(0.7843,0.98824)(0.7882,0.98824)(0.7922,0.98824)(0.7961,0.98824)(0.8,0.98824)(0.8039,0.98824)(0.8078,0.98824)(0.8118,0.98824)(0.8157,0.98824)(0.8196,0.98431)(0.8235,0.98431)(0.8275,0.98431)(0.8314,0.98039)(0.8353,0.98039)(0.8392,0.98039)(0.8431,0.97647)(0.8471,0.97647)(0.851,0.97255)(0.8549,0.97255)(0.8588,0.96863)(0.8627,0.96863)(0.8667,0.96471)(0.8706,0.96471)(0.8745,0.96078)(0.8784,0.96078)(0.8824,0.96078)(0.8863,0.95686)(0.8902,0.95686)(0.8941,0.95686)(0.898,0.95294)(0.902,0.95294)(0.9059,0.95294)(0.9098,0.95294)(0.9137,0.94902)(0.9176,0.94902)(0.9216,0.94902)(0.9255,0.94902)(0.9294,0.94902)(0.9333,0.94902)(0.9373,0.95294)(0.9412,0.95294)(0.9451,0.95294)(0.949,0.95686)(0.9529,0.95686)(0.9569,0.95686)(0.9608,0.96078)(0.9647,0.96471)(0.9686,0.96471)(0.9725,0.96863)(0.9765,0.97255)(0.9804,0.97647)(0.9843,0.98039)(0.9882,0.98431)(0.9922,0.98824)(0.9961,0.99216)(1,1) saods9/ds9/cmaps/ch05m151010.sao000644 000765 000000 00000027742 12567376460 016312 0ustar00joyewheel000000 000000 # SAOimage color table # ch05m151010 # created by cptutils 1.46 # Wed Aug 15 23:30:54 2012 PSEUDOCOLOR RED: (0,0)(0.0039,0.0039216)(0.0078,0.011765)(0.0118,0.015686)(0.0157,0.023529)(0.0196,0.031373)(0.0235,0.035294)(0.0275,0.039216)(0.0314,0.047059)(0.0353,0.05098)(0.0392,0.054902)(0.0431,0.058824)(0.0471,0.066667)(0.051,0.070588)(0.0549,0.07451)(0.0588,0.078431)(0.0627,0.078431)(0.0667,0.082353)(0.0706,0.086275)(0.0745,0.090196)(0.0784,0.090196)(0.0824,0.094118)(0.0863,0.094118)(0.0902,0.098039)(0.0941,0.098039)(0.098,0.098039)(0.102,0.10196)(0.1059,0.10196)(0.1098,0.10196)(0.1137,0.10196)(0.1176,0.10196)(0.1216,0.10196)(0.1255,0.10196)(0.1294,0.10196)(0.1333,0.10196)(0.1373,0.10196)(0.1412,0.10196)(0.1451,0.098039)(0.149,0.098039)(0.1529,0.098039)(0.1569,0.098039)(0.1608,0.094118)(0.1647,0.094118)(0.1686,0.094118)(0.1725,0.090196)(0.1765,0.090196)(0.1804,0.090196)(0.1843,0.090196)(0.1882,0.086275)(0.1922,0.086275)(0.1961,0.086275)(0.2,0.082353)(0.2039,0.082353)(0.2078,0.082353)(0.2118,0.082353)(0.2157,0.082353)(0.2196,0.082353)(0.2235,0.078431)(0.2275,0.078431)(0.2314,0.078431)(0.2353,0.082353)(0.2392,0.082353)(0.2431,0.082353)(0.2471,0.082353)(0.251,0.082353)(0.2549,0.086275)(0.2588,0.086275)(0.2627,0.086275)(0.2667,0.090196)(0.2706,0.090196)(0.2745,0.094118)(0.2784,0.098039)(0.2824,0.10196)(0.2863,0.10588)(0.2902,0.10588)(0.2941,0.1098)(0.298,0.11765)(0.302,0.12157)(0.3059,0.12549)(0.3098,0.12941)(0.3137,0.13725)(0.3176,0.14118)(0.3216,0.14902)(0.3255,0.15294)(0.3294,0.16078)(0.3333,0.16863)(0.3373,0.17647)(0.3412,0.18431)(0.3451,0.19216)(0.349,0.2)(0.3529,0.20784)(0.3569,0.21569)(0.3608,0.22353)(0.3647,0.23529)(0.3686,0.24314)(0.3725,0.2549)(0.3765,0.26275)(0.3804,0.27451)(0.3843,0.28235)(0.3882,0.29412)(0.3922,0.30588)(0.3961,0.31765)(0.4,0.32549)(0.4039,0.33725)(0.4078,0.34902)(0.4118,0.36078)(0.4157,0.37255)(0.4196,0.38431)(0.4235,0.39608)(0.4275,0.40784)(0.4314,0.41961)(0.4353,0.43137)(0.4392,0.44314)(0.4431,0.4549)(0.4471,0.47059)(0.451,0.48235)(0.4549,0.49412)(0.4588,0.50588)(0.4627,0.51765)(0.4667,0.52941)(0.4706,0.54118)(0.4745,0.55294)(0.4784,0.56471)(0.4824,0.57647)(0.4863,0.58824)(0.4902,0.6)(0.4941,0.60784)(0.498,0.61961)(0.502,0.63137)(0.5059,0.64314)(0.5098,0.65098)(0.5137,0.66275)(0.5176,0.67059)(0.5216,0.68235)(0.5255,0.6902)(0.5294,0.69804)(0.5333,0.7098)(0.5373,0.71765)(0.5412,0.72549)(0.5451,0.73333)(0.549,0.74118)(0.5529,0.74902)(0.5569,0.75686)(0.5608,0.76078)(0.5647,0.76863)(0.5686,0.77647)(0.5725,0.78039)(0.5765,0.78824)(0.5804,0.79216)(0.5843,0.79608)(0.5882,0.8)(0.5922,0.80392)(0.5961,0.80784)(0.6,0.81176)(0.6039,0.81569)(0.6078,0.81961)(0.6118,0.81961)(0.6157,0.82353)(0.6196,0.82745)(0.6235,0.82745)(0.6275,0.82745)(0.6314,0.83137)(0.6353,0.83137)(0.6392,0.83137)(0.6431,0.83137)(0.6471,0.83137)(0.651,0.83137)(0.6549,0.83137)(0.6588,0.83137)(0.6627,0.82745)(0.6667,0.82745)(0.6706,0.82745)(0.6745,0.82353)(0.6784,0.82353)(0.6824,0.82353)(0.6863,0.81961)(0.6902,0.81569)(0.6941,0.81569)(0.698,0.81176)(0.702,0.81176)(0.7059,0.80784)(0.7098,0.80392)(0.7137,0.80392)(0.7176,0.8)(0.7216,0.79608)(0.7255,0.79608)(0.7294,0.79216)(0.7333,0.78824)(0.7373,0.78824)(0.7412,0.78431)(0.7451,0.78039)(0.749,0.78039)(0.7529,0.77647)(0.7569,0.77255)(0.7608,0.77255)(0.7647,0.76863)(0.7686,0.76863)(0.7725,0.76471)(0.7765,0.76471)(0.7804,0.76078)(0.7843,0.76078)(0.7882,0.76078)(0.7922,0.75686)(0.7961,0.75686)(0.8,0.75686)(0.8039,0.75686)(0.8078,0.75686)(0.8118,0.75686)(0.8157,0.75686)(0.8196,0.75686)(0.8235,0.75686)(0.8275,0.75686)(0.8314,0.76078)(0.8353,0.76078)(0.8392,0.76471)(0.8431,0.76471)(0.8471,0.76863)(0.851,0.76863)(0.8549,0.77255)(0.8588,0.77647)(0.8627,0.78039)(0.8667,0.78431)(0.8706,0.78431)(0.8745,0.79216)(0.8784,0.79608)(0.8824,0.8)(0.8863,0.80392)(0.8902,0.80784)(0.8941,0.81569)(0.898,0.81961)(0.902,0.82353)(0.9059,0.83137)(0.9098,0.83529)(0.9137,0.84314)(0.9176,0.85098)(0.9216,0.8549)(0.9255,0.86275)(0.9294,0.87059)(0.9333,0.87451)(0.9373,0.88235)(0.9412,0.8902)(0.9451,0.89804)(0.949,0.90588)(0.9529,0.9098)(0.9569,0.91765)(0.9608,0.92549)(0.9647,0.93333)(0.9686,0.94118)(0.9725,0.94902)(0.9765,0.95686)(0.9804,0.96078)(0.9843,0.96863)(0.9882,0.97647)(0.9922,0.98431)(0.9961,0.99216)(1,1) GREEN: (0,0)(0.0039,0)(0.0078,0.0039216)(0.0118,0.0039216)(0.0157,0.0078431)(0.0196,0.0078431)(0.0235,0.011765)(0.0275,0.015686)(0.0314,0.015686)(0.0353,0.019608)(0.0392,0.023529)(0.0431,0.023529)(0.0471,0.027451)(0.051,0.031373)(0.0549,0.035294)(0.0588,0.039216)(0.0627,0.043137)(0.0667,0.043137)(0.0706,0.047059)(0.0745,0.05098)(0.0784,0.054902)(0.0824,0.058824)(0.0863,0.066667)(0.0902,0.070588)(0.0941,0.07451)(0.098,0.078431)(0.102,0.082353)(0.1059,0.086275)(0.1098,0.094118)(0.1137,0.098039)(0.1176,0.10196)(0.1216,0.1098)(0.1255,0.11373)(0.1294,0.12157)(0.1333,0.12549)(0.1373,0.13333)(0.1412,0.13725)(0.1451,0.1451)(0.149,0.14902)(0.1529,0.15686)(0.1569,0.16078)(0.1608,0.16863)(0.1647,0.17647)(0.1686,0.18039)(0.1725,0.18824)(0.1765,0.19608)(0.1804,0.20392)(0.1843,0.20784)(0.1882,0.21569)(0.1922,0.22353)(0.1961,0.22745)(0.2,0.23529)(0.2039,0.24314)(0.2078,0.25098)(0.2118,0.25882)(0.2157,0.26275)(0.2196,0.27059)(0.2235,0.27843)(0.2275,0.28627)(0.2314,0.2902)(0.2353,0.29804)(0.2392,0.30588)(0.2431,0.3098)(0.2471,0.31765)(0.251,0.32549)(0.2549,0.32941)(0.2588,0.33725)(0.2627,0.3451)(0.2667,0.34902)(0.2706,0.35686)(0.2745,0.36078)(0.2784,0.36863)(0.2824,0.37255)(0.2863,0.38039)(0.2902,0.38431)(0.2941,0.38824)(0.298,0.39608)(0.302,0.4)(0.3059,0.40392)(0.3098,0.40784)(0.3137,0.41569)(0.3176,0.41961)(0.3216,0.42353)(0.3255,0.42745)(0.3294,0.43137)(0.3333,0.43529)(0.3373,0.43922)(0.3412,0.44314)(0.3451,0.44706)(0.349,0.44706)(0.3529,0.45098)(0.3569,0.4549)(0.3608,0.4549)(0.3647,0.45882)(0.3686,0.46275)(0.3725,0.46275)(0.3765,0.46667)(0.3804,0.46667)(0.3843,0.47059)(0.3882,0.47059)(0.3922,0.47059)(0.3961,0.47451)(0.4,0.47451)(0.4039,0.47451)(0.4078,0.47451)(0.4118,0.47843)(0.4157,0.47843)(0.4196,0.47843)(0.4235,0.47843)(0.4275,0.47843)(0.4314,0.47843)(0.4353,0.47843)(0.4392,0.47843)(0.4431,0.47843)(0.4471,0.47843)(0.451,0.47843)(0.4549,0.47843)(0.4588,0.47843)(0.4627,0.47843)(0.4667,0.47843)(0.4706,0.47451)(0.4745,0.47451)(0.4784,0.47451)(0.4824,0.47451)(0.4863,0.47451)(0.4902,0.47451)(0.4941,0.47451)(0.498,0.47451)(0.502,0.47451)(0.5059,0.47059)(0.5098,0.47059)(0.5137,0.47059)(0.5176,0.47059)(0.5216,0.47059)(0.5255,0.47059)(0.5294,0.47059)(0.5333,0.47059)(0.5373,0.47059)(0.5412,0.47059)(0.5451,0.47451)(0.549,0.47451)(0.5529,0.47451)(0.5569,0.47451)(0.5608,0.47451)(0.5647,0.47843)(0.5686,0.47843)(0.5725,0.47843)(0.5765,0.48235)(0.5804,0.48235)(0.5843,0.48627)(0.5882,0.48627)(0.5922,0.4902)(0.5961,0.4902)(0.6,0.49412)(0.6039,0.49804)(0.6078,0.49804)(0.6118,0.50196)(0.6157,0.50588)(0.6196,0.5098)(0.6235,0.51373)(0.6275,0.51373)(0.6314,0.51765)(0.6353,0.52157)(0.6392,0.52941)(0.6431,0.53333)(0.6471,0.53725)(0.651,0.54118)(0.6549,0.5451)(0.6588,0.54902)(0.6627,0.55686)(0.6667,0.56078)(0.6706,0.56471)(0.6745,0.57255)(0.6784,0.57647)(0.6824,0.58431)(0.6863,0.58824)(0.6902,0.59608)(0.6941,0.60392)(0.698,0.60784)(0.702,0.61569)(0.7059,0.61961)(0.7098,0.62745)(0.7137,0.63529)(0.7176,0.64314)(0.7216,0.64706)(0.7255,0.6549)(0.7294,0.66275)(0.7333,0.67059)(0.7373,0.67451)(0.7412,0.68235)(0.7451,0.6902)(0.749,0.69804)(0.7529,0.70588)(0.7569,0.71373)(0.7608,0.71765)(0.7647,0.72549)(0.7686,0.73333)(0.7725,0.74118)(0.7765,0.74902)(0.7804,0.75686)(0.7843,0.76078)(0.7882,0.76863)(0.7922,0.77647)(0.7961,0.78431)(0.8,0.79216)(0.8039,0.79608)(0.8078,0.80392)(0.8118,0.81176)(0.8157,0.81569)(0.8196,0.82353)(0.8235,0.83137)(0.8275,0.83529)(0.8314,0.84314)(0.8353,0.84706)(0.8392,0.8549)(0.8431,0.85882)(0.8471,0.86667)(0.851,0.87059)(0.8549,0.87843)(0.8588,0.88235)(0.8627,0.88627)(0.8667,0.89412)(0.8706,0.89804)(0.8745,0.90196)(0.8784,0.90588)(0.8824,0.9098)(0.8863,0.91373)(0.8902,0.92157)(0.8941,0.92549)(0.898,0.92941)(0.902,0.93333)(0.9059,0.93725)(0.9098,0.94118)(0.9137,0.94118)(0.9176,0.9451)(0.9216,0.94902)(0.9255,0.95294)(0.9294,0.95686)(0.9333,0.95686)(0.9373,0.96078)(0.9412,0.96471)(0.9451,0.96863)(0.949,0.96863)(0.9529,0.97255)(0.9569,0.97255)(0.9608,0.97647)(0.9647,0.98039)(0.9686,0.98039)(0.9725,0.98431)(0.9765,0.98431)(0.9804,0.98824)(0.9843,0.98824)(0.9882,0.99216)(0.9922,0.99216)(0.9961,0.99608)(1,1) BLUE: (0,0)(0.0039,0.0039216)(0.0078,0.011765)(0.0118,0.015686)(0.0157,0.023529)(0.0196,0.031373)(0.0235,0.035294)(0.0275,0.043137)(0.0314,0.05098)(0.0353,0.058824)(0.0392,0.066667)(0.0431,0.07451)(0.0471,0.082353)(0.051,0.090196)(0.0549,0.098039)(0.0588,0.10588)(0.0627,0.11373)(0.0667,0.12157)(0.0706,0.12941)(0.0745,0.13725)(0.0784,0.1451)(0.0824,0.15294)(0.0863,0.16078)(0.0902,0.16863)(0.0941,0.17647)(0.098,0.18431)(0.102,0.18824)(0.1059,0.19608)(0.1098,0.20392)(0.1137,0.21176)(0.1176,0.21961)(0.1216,0.22353)(0.1255,0.23137)(0.1294,0.23529)(0.1333,0.24314)(0.1373,0.24706)(0.1412,0.2549)(0.1451,0.25882)(0.149,0.26275)(0.1529,0.27059)(0.1569,0.27451)(0.1608,0.27843)(0.1647,0.28235)(0.1686,0.28627)(0.1725,0.2902)(0.1765,0.2902)(0.1804,0.29412)(0.1843,0.29804)(0.1882,0.29804)(0.1922,0.30196)(0.1961,0.30196)(0.2,0.30196)(0.2039,0.30588)(0.2078,0.30588)(0.2118,0.30588)(0.2157,0.30588)(0.2196,0.30588)(0.2235,0.30588)(0.2275,0.30588)(0.2314,0.30196)(0.2353,0.30196)(0.2392,0.30196)(0.2431,0.29804)(0.2471,0.29804)(0.251,0.29412)(0.2549,0.29412)(0.2588,0.2902)(0.2627,0.28627)(0.2667,0.28627)(0.2706,0.28235)(0.2745,0.27843)(0.2784,0.27451)(0.2824,0.27059)(0.2863,0.26667)(0.2902,0.26275)(0.2941,0.25882)(0.298,0.25882)(0.302,0.2549)(0.3059,0.25098)(0.3098,0.24706)(0.3137,0.23922)(0.3176,0.23529)(0.3216,0.23137)(0.3255,0.22745)(0.3294,0.22745)(0.3333,0.22353)(0.3373,0.21961)(0.3412,0.21569)(0.3451,0.21176)(0.349,0.20784)(0.3529,0.20392)(0.3569,0.2)(0.3608,0.2)(0.3647,0.19608)(0.3686,0.19216)(0.3725,0.19216)(0.3765,0.18824)(0.3804,0.18824)(0.3843,0.18431)(0.3882,0.18431)(0.3922,0.18431)(0.3961,0.18039)(0.4,0.18039)(0.4039,0.18039)(0.4078,0.18039)(0.4118,0.18039)(0.4157,0.18431)(0.4196,0.18431)(0.4235,0.18431)(0.4275,0.18824)(0.4314,0.18824)(0.4353,0.19216)(0.4392,0.19608)(0.4431,0.19608)(0.4471,0.2)(0.451,0.20392)(0.4549,0.20784)(0.4588,0.21569)(0.4627,0.21961)(0.4667,0.22353)(0.4706,0.23137)(0.4745,0.23529)(0.4784,0.24314)(0.4824,0.25098)(0.4863,0.2549)(0.4902,0.26275)(0.4941,0.27059)(0.498,0.27843)(0.502,0.2902)(0.5059,0.29804)(0.5098,0.30588)(0.5137,0.31765)(0.5176,0.32549)(0.5216,0.33725)(0.5255,0.3451)(0.5294,0.35686)(0.5333,0.36863)(0.5373,0.37647)(0.5412,0.38824)(0.5451,0.4)(0.549,0.41176)(0.5529,0.42353)(0.5569,0.43529)(0.5608,0.44706)(0.5647,0.45882)(0.5686,0.47059)(0.5725,0.48627)(0.5765,0.49804)(0.5804,0.5098)(0.5843,0.52157)(0.5882,0.53333)(0.5922,0.54902)(0.5961,0.56078)(0.6,0.57255)(0.6039,0.58431)(0.6078,0.6)(0.6118,0.61176)(0.6157,0.62353)(0.6196,0.63529)(0.6235,0.64706)(0.6275,0.66275)(0.6314,0.67451)(0.6353,0.68627)(0.6392,0.69804)(0.6431,0.7098)(0.6471,0.72157)(0.651,0.72941)(0.6549,0.74118)(0.6588,0.75294)(0.6627,0.76471)(0.6667,0.77255)(0.6706,0.78431)(0.6745,0.79608)(0.6784,0.80392)(0.6824,0.81176)(0.6863,0.82353)(0.6902,0.83137)(0.6941,0.83922)(0.698,0.84706)(0.702,0.8549)(0.7059,0.86275)(0.7098,0.87059)(0.7137,0.87843)(0.7176,0.88627)(0.7216,0.8902)(0.7255,0.89804)(0.7294,0.90196)(0.7333,0.90588)(0.7373,0.91373)(0.7412,0.91765)(0.7451,0.92157)(0.749,0.92549)(0.7529,0.92941)(0.7569,0.93333)(0.7608,0.93725)(0.7647,0.93725)(0.7686,0.94118)(0.7725,0.9451)(0.7765,0.9451)(0.7804,0.94902)(0.7843,0.94902)(0.7882,0.94902)(0.7922,0.95294)(0.7961,0.95294)(0.8,0.95294)(0.8039,0.95294)(0.8078,0.95294)(0.8118,0.95294)(0.8157,0.95294)(0.8196,0.95294)(0.8235,0.95294)(0.8275,0.95294)(0.8314,0.94902)(0.8353,0.94902)(0.8392,0.94902)(0.8431,0.94902)(0.8471,0.9451)(0.851,0.9451)(0.8549,0.9451)(0.8588,0.9451)(0.8627,0.94118)(0.8667,0.94118)(0.8706,0.94118)(0.8745,0.93725)(0.8784,0.93725)(0.8824,0.93725)(0.8863,0.93725)(0.8902,0.93725)(0.8941,0.93333)(0.898,0.93333)(0.902,0.93333)(0.9059,0.93333)(0.9098,0.93333)(0.9137,0.93333)(0.9176,0.93333)(0.9216,0.93333)(0.9255,0.93725)(0.9294,0.93725)(0.9333,0.93725)(0.9373,0.94118)(0.9412,0.94118)(0.9451,0.94118)(0.949,0.9451)(0.9529,0.94902)(0.9569,0.94902)(0.9608,0.95294)(0.9647,0.95686)(0.9686,0.96078)(0.9725,0.96471)(0.9765,0.96863)(0.9804,0.97255)(0.9843,0.97647)(0.9882,0.98039)(0.9922,0.98824)(0.9961,0.99216)(1,1) saods9/ds9/cmaps/ch05m151012.sao000644 000765 000000 00000027736 12567376460 016317 0ustar00joyewheel000000 000000 # SAOimage color table # ch05m151012 # created by cptutils 1.46 # Wed Aug 15 23:30:53 2012 PSEUDOCOLOR RED: (0,0)(0.0039,0.0039216)(0.0078,0.0078431)(0.0118,0.011765)(0.0157,0.015686)(0.0196,0.019608)(0.0235,0.023529)(0.0275,0.027451)(0.0314,0.031373)(0.0353,0.035294)(0.0392,0.039216)(0.0431,0.039216)(0.0471,0.043137)(0.051,0.047059)(0.0549,0.047059)(0.0588,0.05098)(0.0627,0.054902)(0.0667,0.054902)(0.0706,0.054902)(0.0745,0.058824)(0.0784,0.058824)(0.0824,0.058824)(0.0863,0.062745)(0.0902,0.062745)(0.0941,0.062745)(0.098,0.062745)(0.102,0.062745)(0.1059,0.062745)(0.1098,0.062745)(0.1137,0.062745)(0.1176,0.062745)(0.1216,0.058824)(0.1255,0.058824)(0.1294,0.058824)(0.1333,0.058824)(0.1373,0.054902)(0.1412,0.054902)(0.1451,0.054902)(0.149,0.05098)(0.1529,0.05098)(0.1569,0.047059)(0.1608,0.047059)(0.1647,0.043137)(0.1686,0.043137)(0.1725,0.039216)(0.1765,0.039216)(0.1804,0.039216)(0.1843,0.035294)(0.1882,0.035294)(0.1922,0.031373)(0.1961,0.031373)(0.2,0.027451)(0.2039,0.027451)(0.2078,0.027451)(0.2118,0.023529)(0.2157,0.023529)(0.2196,0.023529)(0.2235,0.023529)(0.2275,0.023529)(0.2314,0.019608)(0.2353,0.019608)(0.2392,0.019608)(0.2431,0.019608)(0.2471,0.023529)(0.251,0.023529)(0.2549,0.023529)(0.2588,0.023529)(0.2627,0.027451)(0.2667,0.027451)(0.2706,0.031373)(0.2745,0.031373)(0.2784,0.035294)(0.2824,0.039216)(0.2863,0.039216)(0.2902,0.043137)(0.2941,0.047059)(0.298,0.05098)(0.302,0.054902)(0.3059,0.062745)(0.3098,0.066667)(0.3137,0.070588)(0.3176,0.078431)(0.3216,0.082353)(0.3255,0.090196)(0.3294,0.094118)(0.3333,0.10196)(0.3373,0.1098)(0.3412,0.11765)(0.3451,0.12549)(0.349,0.13333)(0.3529,0.14118)(0.3569,0.14902)(0.3608,0.15686)(0.3647,0.16863)(0.3686,0.17647)(0.3725,0.18824)(0.3765,0.19608)(0.3804,0.20784)(0.3843,0.21569)(0.3882,0.22745)(0.3922,0.23922)(0.3961,0.25098)(0.4,0.25882)(0.4039,0.27059)(0.4078,0.28235)(0.4118,0.29412)(0.4157,0.30588)(0.4196,0.31765)(0.4235,0.32941)(0.4275,0.34118)(0.4314,0.35294)(0.4353,0.36471)(0.4392,0.37647)(0.4431,0.39216)(0.4471,0.40392)(0.451,0.41569)(0.4549,0.42745)(0.4588,0.43922)(0.4627,0.45098)(0.4667,0.46275)(0.4706,0.47451)(0.4745,0.48627)(0.4784,0.49804)(0.4824,0.5098)(0.4863,0.52157)(0.4902,0.53333)(0.4941,0.5451)(0.498,0.55686)(0.502,0.56471)(0.5059,0.57647)(0.5098,0.58824)(0.5137,0.59608)(0.5176,0.60784)(0.5216,0.61569)(0.5255,0.62745)(0.5294,0.63529)(0.5333,0.64706)(0.5373,0.6549)(0.5412,0.66275)(0.5451,0.67059)(0.549,0.67843)(0.5529,0.68627)(0.5569,0.69412)(0.5608,0.70196)(0.5647,0.7098)(0.5686,0.71373)(0.5725,0.72157)(0.5765,0.72549)(0.5804,0.73333)(0.5843,0.73725)(0.5882,0.74118)(0.5922,0.7451)(0.5961,0.74902)(0.6,0.75294)(0.6039,0.75686)(0.6078,0.76078)(0.6118,0.76471)(0.6157,0.76863)(0.6196,0.76863)(0.6235,0.77255)(0.6275,0.77255)(0.6314,0.77255)(0.6353,0.77647)(0.6392,0.77647)(0.6431,0.77647)(0.6471,0.77647)(0.651,0.77647)(0.6549,0.77647)(0.6588,0.77647)(0.6627,0.77647)(0.6667,0.77647)(0.6706,0.77647)(0.6745,0.77255)(0.6784,0.77255)(0.6824,0.77255)(0.6863,0.76863)(0.6902,0.76863)(0.6941,0.76471)(0.698,0.76471)(0.702,0.76078)(0.7059,0.76078)(0.7098,0.75686)(0.7137,0.75686)(0.7176,0.75294)(0.7216,0.75294)(0.7255,0.74902)(0.7294,0.74902)(0.7333,0.7451)(0.7373,0.74118)(0.7412,0.74118)(0.7451,0.73725)(0.749,0.73725)(0.7529,0.73333)(0.7569,0.73333)(0.7608,0.72941)(0.7647,0.72941)(0.7686,0.72941)(0.7725,0.72549)(0.7765,0.72549)(0.7804,0.72549)(0.7843,0.72157)(0.7882,0.72157)(0.7922,0.72157)(0.7961,0.72157)(0.8,0.72157)(0.8039,0.72157)(0.8078,0.72157)(0.8118,0.72157)(0.8157,0.72549)(0.8196,0.72549)(0.8235,0.72549)(0.8275,0.72941)(0.8314,0.72941)(0.8353,0.73333)(0.8392,0.73333)(0.8431,0.73725)(0.8471,0.74118)(0.851,0.74118)(0.8549,0.7451)(0.8588,0.74902)(0.8627,0.75294)(0.8667,0.75686)(0.8706,0.76078)(0.8745,0.76863)(0.8784,0.77255)(0.8824,0.77647)(0.8863,0.78431)(0.8902,0.78824)(0.8941,0.79216)(0.898,0.8)(0.902,0.80784)(0.9059,0.81176)(0.9098,0.81961)(0.9137,0.82745)(0.9176,0.83529)(0.9216,0.83922)(0.9255,0.84706)(0.9294,0.8549)(0.9333,0.86275)(0.9373,0.87059)(0.9412,0.87843)(0.9451,0.88627)(0.949,0.89412)(0.9529,0.90196)(0.9569,0.9098)(0.9608,0.91765)(0.9647,0.92549)(0.9686,0.93333)(0.9725,0.94118)(0.9765,0.94902)(0.9804,0.96078)(0.9843,0.96863)(0.9882,0.97647)(0.9922,0.98431)(0.9961,0.99216)(1,1) GREEN: (0,0)(0.0039,0)(0.0078,0)(0.0118,0)(0.0157,0)(0.0196,0)(0.0235,0)(0.0275,0)(0.0314,0)(0.0353,0.0039216)(0.0392,0.0039216)(0.0431,0.0039216)(0.0471,0.0078431)(0.051,0.0078431)(0.0549,0.011765)(0.0588,0.011765)(0.0627,0.015686)(0.0667,0.015686)(0.0706,0.019608)(0.0745,0.023529)(0.0784,0.023529)(0.0824,0.027451)(0.0863,0.031373)(0.0902,0.035294)(0.0941,0.039216)(0.098,0.043137)(0.102,0.047059)(0.1059,0.05098)(0.1098,0.054902)(0.1137,0.058824)(0.1176,0.062745)(0.1216,0.066667)(0.1255,0.070588)(0.1294,0.078431)(0.1333,0.082353)(0.1373,0.086275)(0.1412,0.090196)(0.1451,0.098039)(0.149,0.10196)(0.1529,0.1098)(0.1569,0.11373)(0.1608,0.11765)(0.1647,0.12549)(0.1686,0.13333)(0.1725,0.13725)(0.1765,0.1451)(0.1804,0.14902)(0.1843,0.15686)(0.1882,0.16078)(0.1922,0.16863)(0.1961,0.17647)(0.2,0.18039)(0.2039,0.18824)(0.2078,0.19216)(0.2118,0.2)(0.2157,0.20784)(0.2196,0.21176)(0.2235,0.21961)(0.2275,0.22745)(0.2314,0.23137)(0.2353,0.23922)(0.2392,0.24706)(0.2431,0.25098)(0.2471,0.25882)(0.251,0.26275)(0.2549,0.27059)(0.2588,0.27451)(0.2627,0.28235)(0.2667,0.28627)(0.2706,0.29412)(0.2745,0.29804)(0.2784,0.30588)(0.2824,0.3098)(0.2863,0.31373)(0.2902,0.32157)(0.2941,0.32549)(0.298,0.32941)(0.302,0.33725)(0.3059,0.34118)(0.3098,0.3451)(0.3137,0.34902)(0.3176,0.35294)(0.3216,0.35686)(0.3255,0.36078)(0.3294,0.36471)(0.3333,0.36863)(0.3373,0.37255)(0.3412,0.37647)(0.3451,0.38039)(0.349,0.38039)(0.3529,0.38431)(0.3569,0.38824)(0.3608,0.38824)(0.3647,0.39216)(0.3686,0.39608)(0.3725,0.39608)(0.3765,0.4)(0.3804,0.4)(0.3843,0.40392)(0.3882,0.40392)(0.3922,0.40392)(0.3961,0.40784)(0.4,0.40784)(0.4039,0.40784)(0.4078,0.40784)(0.4118,0.41176)(0.4157,0.41176)(0.4196,0.41176)(0.4235,0.41176)(0.4275,0.41176)(0.4314,0.41176)(0.4353,0.41176)(0.4392,0.41176)(0.4431,0.41176)(0.4471,0.41176)(0.451,0.41176)(0.4549,0.41176)(0.4588,0.41176)(0.4627,0.41176)(0.4667,0.41176)(0.4706,0.41176)(0.4745,0.41176)(0.4784,0.41176)(0.4824,0.40784)(0.4863,0.40784)(0.4902,0.40784)(0.4941,0.40784)(0.498,0.40784)(0.502,0.40784)(0.5059,0.40784)(0.5098,0.40784)(0.5137,0.40784)(0.5176,0.40784)(0.5216,0.40784)(0.5255,0.40784)(0.5294,0.40784)(0.5333,0.40784)(0.5373,0.40784)(0.5412,0.41176)(0.5451,0.41176)(0.549,0.41176)(0.5529,0.41176)(0.5569,0.41176)(0.5608,0.41569)(0.5647,0.41569)(0.5686,0.41569)(0.5725,0.41961)(0.5765,0.41961)(0.5804,0.42353)(0.5843,0.42353)(0.5882,0.42745)(0.5922,0.43137)(0.5961,0.43137)(0.6,0.43529)(0.6039,0.43922)(0.6078,0.44314)(0.6118,0.44314)(0.6157,0.44706)(0.6196,0.45098)(0.6235,0.4549)(0.6275,0.45882)(0.6314,0.46275)(0.6353,0.46667)(0.6392,0.47451)(0.6431,0.47843)(0.6471,0.48235)(0.651,0.48627)(0.6549,0.49412)(0.6588,0.49804)(0.6627,0.50196)(0.6667,0.5098)(0.6706,0.51373)(0.6745,0.52157)(0.6784,0.52549)(0.6824,0.53333)(0.6863,0.54118)(0.6902,0.5451)(0.6941,0.55294)(0.698,0.56078)(0.702,0.56863)(0.7059,0.57255)(0.7098,0.58039)(0.7137,0.58824)(0.7176,0.59608)(0.7216,0.60392)(0.7255,0.61176)(0.7294,0.61569)(0.7333,0.62353)(0.7373,0.63137)(0.7412,0.63922)(0.7451,0.64706)(0.749,0.6549)(0.7529,0.66275)(0.7569,0.67059)(0.7608,0.67843)(0.7647,0.68627)(0.7686,0.69412)(0.7725,0.70196)(0.7765,0.7098)(0.7804,0.71765)(0.7843,0.72549)(0.7882,0.73333)(0.7922,0.74118)(0.7961,0.74902)(0.8,0.75686)(0.8039,0.76078)(0.8078,0.76863)(0.8118,0.77647)(0.8157,0.78431)(0.8196,0.79216)(0.8235,0.8)(0.8275,0.80392)(0.8314,0.81176)(0.8353,0.81961)(0.8392,0.82353)(0.8431,0.83137)(0.8471,0.83922)(0.851,0.84314)(0.8549,0.85098)(0.8588,0.8549)(0.8627,0.86275)(0.8667,0.86667)(0.8706,0.87451)(0.8745,0.87843)(0.8784,0.88235)(0.8824,0.8902)(0.8863,0.89412)(0.8902,0.89804)(0.8941,0.90588)(0.898,0.9098)(0.902,0.91373)(0.9059,0.91765)(0.9098,0.92157)(0.9137,0.92549)(0.9176,0.92941)(0.9216,0.93333)(0.9255,0.93725)(0.9294,0.94118)(0.9333,0.9451)(0.9373,0.94902)(0.9412,0.95294)(0.9451,0.95686)(0.949,0.96078)(0.9529,0.96078)(0.9569,0.96471)(0.9608,0.96863)(0.9647,0.97255)(0.9686,0.97647)(0.9725,0.97647)(0.9765,0.98039)(0.9804,0.98431)(0.9843,0.98824)(0.9882,0.98824)(0.9922,0.99216)(0.9961,0.99608)(1,1) BLUE: (0,0)(0.0039,0)(0.0078,0.0039216)(0.0118,0.0078431)(0.0157,0.015686)(0.0196,0.019608)(0.0235,0.023529)(0.0275,0.031373)(0.0314,0.035294)(0.0353,0.043137)(0.0392,0.047059)(0.0431,0.054902)(0.0471,0.058824)(0.051,0.066667)(0.0549,0.07451)(0.0588,0.078431)(0.0627,0.086275)(0.0667,0.094118)(0.0706,0.098039)(0.0745,0.10588)(0.0784,0.11373)(0.0824,0.12157)(0.0863,0.12549)(0.0902,0.13333)(0.0941,0.14118)(0.098,0.1451)(0.102,0.15294)(0.1059,0.16078)(0.1098,0.16471)(0.1137,0.17255)(0.1176,0.17647)(0.1216,0.18431)(0.1255,0.18824)(0.1294,0.19216)(0.1333,0.2)(0.1373,0.20392)(0.1412,0.20784)(0.1451,0.21176)(0.149,0.21569)(0.1529,0.21961)(0.1569,0.22353)(0.1608,0.22745)(0.1647,0.23137)(0.1686,0.23529)(0.1725,0.23922)(0.1765,0.23922)(0.1804,0.24314)(0.1843,0.24314)(0.1882,0.24706)(0.1922,0.24706)(0.1961,0.24706)(0.2,0.24706)(0.2039,0.25098)(0.2078,0.25098)(0.2118,0.25098)(0.2157,0.24706)(0.2196,0.24706)(0.2235,0.24706)(0.2275,0.24706)(0.2314,0.24314)(0.2353,0.24314)(0.2392,0.24314)(0.2431,0.23922)(0.2471,0.23529)(0.251,0.23529)(0.2549,0.23137)(0.2588,0.22745)(0.2627,0.22745)(0.2667,0.22353)(0.2706,0.21961)(0.2745,0.21569)(0.2784,0.21176)(0.2824,0.20784)(0.2863,0.20392)(0.2902,0.2)(0.2941,0.19608)(0.298,0.19216)(0.302,0.18824)(0.3059,0.18431)(0.3098,0.18039)(0.3137,0.17647)(0.3176,0.17255)(0.3216,0.16863)(0.3255,0.16471)(0.3294,0.16078)(0.3333,0.15686)(0.3373,0.15294)(0.3412,0.14902)(0.3451,0.1451)(0.349,0.14118)(0.3529,0.13725)(0.3569,0.13333)(0.3608,0.13333)(0.3647,0.12941)(0.3686,0.12549)(0.3725,0.12549)(0.3765,0.12157)(0.3804,0.12157)(0.3843,0.11765)(0.3882,0.11765)(0.3922,0.11765)(0.3961,0.11373)(0.4,0.11373)(0.4039,0.11373)(0.4078,0.11373)(0.4118,0.11373)(0.4157,0.11765)(0.4196,0.11765)(0.4235,0.11765)(0.4275,0.12157)(0.4314,0.12157)(0.4353,0.12549)(0.4392,0.12941)(0.4431,0.12941)(0.4471,0.13333)(0.451,0.13725)(0.4549,0.1451)(0.4588,0.14902)(0.4627,0.15294)(0.4667,0.15686)(0.4706,0.16471)(0.4745,0.17255)(0.4784,0.17647)(0.4824,0.18431)(0.4863,0.19216)(0.4902,0.2)(0.4941,0.20784)(0.498,0.21569)(0.502,0.22353)(0.5059,0.23137)(0.5098,0.24314)(0.5137,0.25098)(0.5176,0.26275)(0.5216,0.27059)(0.5255,0.28235)(0.5294,0.29412)(0.5333,0.30588)(0.5373,0.31373)(0.5412,0.32549)(0.5451,0.33725)(0.549,0.34902)(0.5529,0.36078)(0.5569,0.37255)(0.5608,0.38824)(0.5647,0.4)(0.5686,0.41176)(0.5725,0.42353)(0.5765,0.43529)(0.5804,0.45098)(0.5843,0.46275)(0.5882,0.47451)(0.5922,0.4902)(0.5961,0.50196)(0.6,0.51373)(0.6039,0.52941)(0.6078,0.54118)(0.6118,0.55294)(0.6157,0.56863)(0.6196,0.58039)(0.6235,0.59216)(0.6275,0.60392)(0.6314,0.61569)(0.6353,0.63137)(0.6392,0.64314)(0.6431,0.6549)(0.6471,0.66667)(0.651,0.67843)(0.6549,0.6902)(0.6588,0.70196)(0.6627,0.7098)(0.6667,0.72157)(0.6706,0.73333)(0.6745,0.7451)(0.6784,0.75294)(0.6824,0.76471)(0.6863,0.77255)(0.6902,0.78039)(0.6941,0.79216)(0.698,0.8)(0.702,0.80784)(0.7059,0.81569)(0.7098,0.82353)(0.7137,0.83137)(0.7176,0.83922)(0.7216,0.84314)(0.7255,0.85098)(0.7294,0.85882)(0.7333,0.86275)(0.7373,0.87059)(0.7412,0.87451)(0.7451,0.87843)(0.749,0.88235)(0.7529,0.88627)(0.7569,0.8902)(0.7608,0.89412)(0.7647,0.89804)(0.7686,0.90196)(0.7725,0.90588)(0.7765,0.90588)(0.7804,0.9098)(0.7843,0.9098)(0.7882,0.91373)(0.7922,0.91373)(0.7961,0.91765)(0.8,0.91765)(0.8039,0.91765)(0.8078,0.91765)(0.8118,0.92157)(0.8157,0.92157)(0.8196,0.92157)(0.8235,0.92157)(0.8275,0.92157)(0.8314,0.92157)(0.8353,0.92157)(0.8392,0.92157)(0.8431,0.91765)(0.8471,0.91765)(0.851,0.91765)(0.8549,0.91765)(0.8588,0.91765)(0.8627,0.91765)(0.8667,0.91765)(0.8706,0.91765)(0.8745,0.91765)(0.8784,0.91373)(0.8824,0.91373)(0.8863,0.91373)(0.8902,0.91373)(0.8941,0.91373)(0.898,0.91373)(0.902,0.91373)(0.9059,0.91765)(0.9098,0.91765)(0.9137,0.91765)(0.9176,0.91765)(0.9216,0.92157)(0.9255,0.92157)(0.9294,0.92157)(0.9333,0.92549)(0.9373,0.92549)(0.9412,0.92941)(0.9451,0.93333)(0.949,0.93333)(0.9529,0.93725)(0.9569,0.94118)(0.9608,0.9451)(0.9647,0.94902)(0.9686,0.95294)(0.9725,0.95686)(0.9765,0.96471)(0.9804,0.96863)(0.9843,0.97255)(0.9882,0.98039)(0.9922,0.98431)(0.9961,0.99216)(1,1) saods9/ds9/cmaps/ch05m151410.sao000644 000765 000000 00000027577 12567376460 016324 0ustar00joyewheel000000 000000 # SAOimage color table # ch05m151410 # created by cptutils 1.46 # Wed Aug 15 23:30:53 2012 PSEUDOCOLOR RED: (0,0)(0.0039,0.0039216)(0.0078,0.011765)(0.0118,0.019608)(0.0157,0.027451)(0.0196,0.035294)(0.0235,0.039216)(0.0275,0.047059)(0.0314,0.054902)(0.0353,0.058824)(0.0392,0.062745)(0.0431,0.066667)(0.0471,0.07451)(0.051,0.078431)(0.0549,0.082353)(0.0588,0.086275)(0.0627,0.086275)(0.0667,0.090196)(0.0706,0.094118)(0.0745,0.094118)(0.0784,0.098039)(0.0824,0.098039)(0.0863,0.098039)(0.0902,0.098039)(0.0941,0.10196)(0.098,0.10196)(0.102,0.10196)(0.1059,0.098039)(0.1098,0.098039)(0.1137,0.098039)(0.1176,0.098039)(0.1216,0.094118)(0.1255,0.094118)(0.1294,0.090196)(0.1333,0.090196)(0.1373,0.086275)(0.1412,0.086275)(0.1451,0.082353)(0.149,0.078431)(0.1529,0.07451)(0.1569,0.07451)(0.1608,0.070588)(0.1647,0.066667)(0.1686,0.062745)(0.1725,0.058824)(0.1765,0.058824)(0.1804,0.054902)(0.1843,0.05098)(0.1882,0.047059)(0.1922,0.043137)(0.1961,0.043137)(0.2,0.039216)(0.2039,0.035294)(0.2078,0.031373)(0.2118,0.031373)(0.2157,0.027451)(0.2196,0.027451)(0.2235,0.023529)(0.2275,0.023529)(0.2314,0.019608)(0.2353,0.019608)(0.2392,0.019608)(0.2431,0.015686)(0.2471,0.015686)(0.251,0.015686)(0.2549,0.015686)(0.2588,0.019608)(0.2627,0.019608)(0.2667,0.019608)(0.2706,0.019608)(0.2745,0.023529)(0.2784,0.027451)(0.2824,0.027451)(0.2863,0.031373)(0.2902,0.035294)(0.2941,0.039216)(0.298,0.043137)(0.302,0.047059)(0.3059,0.054902)(0.3098,0.058824)(0.3137,0.066667)(0.3176,0.070588)(0.3216,0.078431)(0.3255,0.086275)(0.3294,0.094118)(0.3333,0.10196)(0.3373,0.1098)(0.3412,0.12157)(0.3451,0.12941)(0.349,0.14118)(0.3529,0.14902)(0.3569,0.16078)(0.3608,0.17255)(0.3647,0.18431)(0.3686,0.19608)(0.3725,0.20784)(0.3765,0.21961)(0.3804,0.23137)(0.3843,0.24314)(0.3882,0.25882)(0.3922,0.27059)(0.3961,0.28627)(0.4,0.29804)(0.4039,0.31373)(0.4078,0.32941)(0.4118,0.34118)(0.4157,0.35686)(0.4196,0.37255)(0.4235,0.38824)(0.4275,0.4)(0.4314,0.41569)(0.4353,0.43137)(0.4392,0.44706)(0.4431,0.46275)(0.4471,0.47843)(0.451,0.49412)(0.4549,0.5098)(0.4588,0.52549)(0.4627,0.54118)(0.4667,0.55294)(0.4706,0.56863)(0.4745,0.58431)(0.4784,0.6)(0.4824,0.61176)(0.4863,0.62745)(0.4902,0.64314)(0.4941,0.6549)(0.498,0.67059)(0.502,0.68235)(0.5059,0.69804)(0.5098,0.7098)(0.5137,0.72157)(0.5176,0.73333)(0.5216,0.7451)(0.5255,0.75686)(0.5294,0.76863)(0.5333,0.78039)(0.5373,0.78824)(0.5412,0.8)(0.5451,0.80784)(0.549,0.81961)(0.5529,0.82745)(0.5569,0.83529)(0.5608,0.84314)(0.5647,0.85098)(0.5686,0.85882)(0.5725,0.86667)(0.5765,0.87059)(0.5804,0.87843)(0.5843,0.88235)(0.5882,0.88627)(0.5922,0.8902)(0.5961,0.89412)(0.6,0.89804)(0.6039,0.90196)(0.6078,0.90588)(0.6118,0.90588)(0.6157,0.90588)(0.6196,0.9098)(0.6235,0.9098)(0.6275,0.9098)(0.6314,0.9098)(0.6353,0.9098)(0.6392,0.9098)(0.6431,0.90588)(0.6471,0.90588)(0.651,0.90588)(0.6549,0.90196)(0.6588,0.89804)(0.6627,0.89804)(0.6667,0.89412)(0.6706,0.8902)(0.6745,0.88627)(0.6784,0.88235)(0.6824,0.87843)(0.6863,0.87451)(0.6902,0.87059)(0.6941,0.86275)(0.698,0.85882)(0.702,0.8549)(0.7059,0.85098)(0.7098,0.84314)(0.7137,0.83922)(0.7176,0.83529)(0.7216,0.82745)(0.7255,0.82353)(0.7294,0.81569)(0.7333,0.81176)(0.7373,0.80784)(0.7412,0.8)(0.7451,0.79608)(0.749,0.79216)(0.7529,0.78431)(0.7569,0.78039)(0.7608,0.77647)(0.7647,0.77255)(0.7686,0.76863)(0.7725,0.76471)(0.7765,0.76078)(0.7804,0.75686)(0.7843,0.75294)(0.7882,0.74902)(0.7922,0.7451)(0.7961,0.74118)(0.8,0.74118)(0.8039,0.73725)(0.8078,0.73725)(0.8118,0.73333)(0.8157,0.73333)(0.8196,0.73333)(0.8235,0.73333)(0.8275,0.73333)(0.8314,0.73333)(0.8353,0.73333)(0.8392,0.73333)(0.8431,0.73333)(0.8471,0.73725)(0.851,0.73725)(0.8549,0.74118)(0.8588,0.74118)(0.8627,0.7451)(0.8667,0.74902)(0.8706,0.75294)(0.8745,0.75686)(0.8784,0.76078)(0.8824,0.76471)(0.8863,0.77255)(0.8902,0.77647)(0.8941,0.78431)(0.898,0.78824)(0.902,0.79608)(0.9059,0.8)(0.9098,0.80784)(0.9137,0.81569)(0.9176,0.82353)(0.9216,0.83137)(0.9255,0.83922)(0.9294,0.84706)(0.9333,0.8549)(0.9373,0.86275)(0.9412,0.87059)(0.9451,0.87843)(0.949,0.88627)(0.9529,0.89412)(0.9569,0.90588)(0.9608,0.91373)(0.9647,0.92157)(0.9686,0.92941)(0.9725,0.93725)(0.9765,0.94902)(0.9804,0.95686)(0.9843,0.96471)(0.9882,0.97255)(0.9922,0.98039)(0.9961,0.98824)(1,1) GREEN: (0,0)(0.0039,0)(0.0078,0)(0.0118,0.0039216)(0.0157,0.0039216)(0.0196,0.0039216)(0.0235,0.0078431)(0.0275,0.0078431)(0.0314,0.011765)(0.0353,0.015686)(0.0392,0.015686)(0.0431,0.019608)(0.0471,0.019608)(0.051,0.023529)(0.0549,0.027451)(0.0588,0.031373)(0.0627,0.035294)(0.0667,0.035294)(0.0706,0.039216)(0.0745,0.043137)(0.0784,0.047059)(0.0824,0.05098)(0.0863,0.058824)(0.0902,0.062745)(0.0941,0.066667)(0.098,0.070588)(0.102,0.07451)(0.1059,0.082353)(0.1098,0.086275)(0.1137,0.094118)(0.1176,0.098039)(0.1216,0.10588)(0.1255,0.1098)(0.1294,0.11765)(0.1333,0.12157)(0.1373,0.12941)(0.1412,0.13725)(0.1451,0.1451)(0.149,0.14902)(0.1529,0.15686)(0.1569,0.16471)(0.1608,0.17255)(0.1647,0.18039)(0.1686,0.18824)(0.1725,0.19608)(0.1765,0.20392)(0.1804,0.21176)(0.1843,0.21961)(0.1882,0.22745)(0.1922,0.23529)(0.1961,0.24314)(0.2,0.25098)(0.2039,0.25882)(0.2078,0.26667)(0.2118,0.27451)(0.2157,0.28235)(0.2196,0.29412)(0.2235,0.30196)(0.2275,0.3098)(0.2314,0.31765)(0.2353,0.32549)(0.2392,0.33333)(0.2431,0.34118)(0.2471,0.34902)(0.251,0.35686)(0.2549,0.36078)(0.2588,0.36863)(0.2627,0.37647)(0.2667,0.38431)(0.2706,0.39216)(0.2745,0.39608)(0.2784,0.40392)(0.2824,0.41176)(0.2863,0.41569)(0.2902,0.42353)(0.2941,0.42745)(0.298,0.43529)(0.302,0.43922)(0.3059,0.44706)(0.3098,0.45098)(0.3137,0.4549)(0.3176,0.45882)(0.3216,0.46275)(0.3255,0.46667)(0.3294,0.47059)(0.3333,0.47451)(0.3373,0.47843)(0.3412,0.48235)(0.3451,0.48627)(0.349,0.4902)(0.3529,0.4902)(0.3569,0.49412)(0.3608,0.49412)(0.3647,0.49804)(0.3686,0.49804)(0.3725,0.50196)(0.3765,0.50196)(0.3804,0.50196)(0.3843,0.50196)(0.3882,0.50588)(0.3922,0.50588)(0.3961,0.50588)(0.4,0.50588)(0.4039,0.50588)(0.4078,0.50588)(0.4118,0.50196)(0.4157,0.50196)(0.4196,0.50196)(0.4235,0.50196)(0.4275,0.49804)(0.4314,0.49804)(0.4353,0.49804)(0.4392,0.49412)(0.4431,0.49412)(0.4471,0.4902)(0.451,0.4902)(0.4549,0.48627)(0.4588,0.48627)(0.4627,0.48235)(0.4667,0.48235)(0.4706,0.47843)(0.4745,0.47843)(0.4784,0.47451)(0.4824,0.47451)(0.4863,0.47059)(0.4902,0.46667)(0.4941,0.46667)(0.498,0.46275)(0.502,0.46275)(0.5059,0.45882)(0.5098,0.45882)(0.5137,0.4549)(0.5176,0.4549)(0.5216,0.45098)(0.5255,0.45098)(0.5294,0.45098)(0.5333,0.44706)(0.5373,0.44706)(0.5412,0.44706)(0.5451,0.44314)(0.549,0.44314)(0.5529,0.44314)(0.5569,0.44314)(0.5608,0.44314)(0.5647,0.44314)(0.5686,0.44314)(0.5725,0.44314)(0.5765,0.44314)(0.5804,0.44314)(0.5843,0.44706)(0.5882,0.44706)(0.5922,0.44706)(0.5961,0.45098)(0.6,0.45098)(0.6039,0.4549)(0.6078,0.4549)(0.6118,0.45882)(0.6157,0.46275)(0.6196,0.46667)(0.6235,0.46667)(0.6275,0.47059)(0.6314,0.47451)(0.6353,0.47843)(0.6392,0.48235)(0.6431,0.48627)(0.6471,0.49412)(0.651,0.49804)(0.6549,0.50196)(0.6588,0.5098)(0.6627,0.51373)(0.6667,0.52157)(0.6706,0.52549)(0.6745,0.53333)(0.6784,0.53725)(0.6824,0.5451)(0.6863,0.55294)(0.6902,0.56078)(0.6941,0.56471)(0.698,0.57255)(0.702,0.58039)(0.7059,0.58824)(0.7098,0.59608)(0.7137,0.60392)(0.7176,0.61176)(0.7216,0.61961)(0.7255,0.62745)(0.7294,0.63529)(0.7333,0.64314)(0.7373,0.65098)(0.7412,0.66275)(0.7451,0.67059)(0.749,0.67843)(0.7529,0.68627)(0.7569,0.69412)(0.7608,0.70196)(0.7647,0.71373)(0.7686,0.72157)(0.7725,0.72941)(0.7765,0.73725)(0.7804,0.7451)(0.7843,0.75294)(0.7882,0.76078)(0.7922,0.77255)(0.7961,0.78039)(0.8,0.78824)(0.8039,0.79608)(0.8078,0.80392)(0.8118,0.81176)(0.8157,0.81961)(0.8196,0.82745)(0.8235,0.83137)(0.8275,0.83922)(0.8314,0.84706)(0.8353,0.8549)(0.8392,0.86275)(0.8431,0.86667)(0.8471,0.87451)(0.851,0.87843)(0.8549,0.88627)(0.8588,0.89412)(0.8627,0.89804)(0.8667,0.90196)(0.8706,0.9098)(0.8745,0.91373)(0.8784,0.91765)(0.8824,0.92549)(0.8863,0.92941)(0.8902,0.93333)(0.8941,0.93725)(0.898,0.94118)(0.902,0.9451)(0.9059,0.94902)(0.9098,0.95294)(0.9137,0.95686)(0.9176,0.95686)(0.9216,0.96078)(0.9255,0.96471)(0.9294,0.96863)(0.9333,0.96863)(0.9373,0.97255)(0.9412,0.97255)(0.9451,0.97647)(0.949,0.97647)(0.9529,0.98039)(0.9569,0.98039)(0.9608,0.98431)(0.9647,0.98431)(0.9686,0.98824)(0.9725,0.98824)(0.9765,0.98824)(0.9804,0.99216)(0.9843,0.99216)(0.9882,0.99216)(0.9922,0.99608)(0.9961,0.99608)(1,1) BLUE: (0,0)(0.0039,0.0039216)(0.0078,0.011765)(0.0118,0.019608)(0.0157,0.027451)(0.0196,0.035294)(0.0235,0.043137)(0.0275,0.05098)(0.0314,0.058824)(0.0353,0.070588)(0.0392,0.078431)(0.0431,0.086275)(0.0471,0.098039)(0.051,0.10588)(0.0549,0.11373)(0.0588,0.12549)(0.0627,0.13333)(0.0667,0.1451)(0.0706,0.15294)(0.0745,0.16078)(0.0784,0.17255)(0.0824,0.18039)(0.0863,0.19216)(0.0902,0.2)(0.0941,0.20784)(0.098,0.21569)(0.102,0.22745)(0.1059,0.23529)(0.1098,0.24314)(0.1137,0.25098)(0.1176,0.25882)(0.1216,0.26667)(0.1255,0.27451)(0.1294,0.28235)(0.1333,0.28627)(0.1373,0.29412)(0.1412,0.29804)(0.1451,0.30588)(0.149,0.3098)(0.1529,0.31765)(0.1569,0.32157)(0.1608,0.32549)(0.1647,0.32941)(0.1686,0.33333)(0.1725,0.33725)(0.1765,0.33725)(0.1804,0.34118)(0.1843,0.34118)(0.1882,0.3451)(0.1922,0.3451)(0.1961,0.3451)(0.2,0.3451)(0.2039,0.3451)(0.2078,0.3451)(0.2118,0.3451)(0.2157,0.34118)(0.2196,0.34118)(0.2235,0.33725)(0.2275,0.33725)(0.2314,0.33333)(0.2353,0.32941)(0.2392,0.32549)(0.2431,0.32157)(0.2471,0.31765)(0.251,0.31373)(0.2549,0.3098)(0.2588,0.30588)(0.2627,0.29804)(0.2667,0.29412)(0.2706,0.28627)(0.2745,0.28235)(0.2784,0.27451)(0.2824,0.26667)(0.2863,0.26275)(0.2902,0.2549)(0.2941,0.24706)(0.298,0.24314)(0.302,0.23529)(0.3059,0.22745)(0.3098,0.21961)(0.3137,0.21176)(0.3176,0.20392)(0.3216,0.2)(0.3255,0.19216)(0.3294,0.18431)(0.3333,0.17647)(0.3373,0.17255)(0.3412,0.16471)(0.3451,0.15686)(0.349,0.15294)(0.3529,0.1451)(0.3569,0.14118)(0.3608,0.13333)(0.3647,0.12941)(0.3686,0.12549)(0.3725,0.11765)(0.3765,0.11373)(0.3804,0.1098)(0.3843,0.10588)(0.3882,0.10196)(0.3922,0.10196)(0.3961,0.098039)(0.4,0.094118)(0.4039,0.094118)(0.4078,0.090196)(0.4118,0.090196)(0.4157,0.090196)(0.4196,0.090196)(0.4235,0.090196)(0.4275,0.090196)(0.4314,0.094118)(0.4353,0.094118)(0.4392,0.098039)(0.4431,0.10196)(0.4471,0.10196)(0.451,0.10588)(0.4549,0.11373)(0.4588,0.11765)(0.4627,0.12157)(0.4667,0.12941)(0.4706,0.13333)(0.4745,0.14118)(0.4784,0.14902)(0.4824,0.15686)(0.4863,0.16471)(0.4902,0.17647)(0.4941,0.18431)(0.498,0.19216)(0.502,0.20392)(0.5059,0.21569)(0.5098,0.22745)(0.5137,0.23922)(0.5176,0.25098)(0.5216,0.26275)(0.5255,0.27451)(0.5294,0.28627)(0.5333,0.30196)(0.5373,0.31373)(0.5412,0.32941)(0.5451,0.3451)(0.549,0.35686)(0.5529,0.37255)(0.5569,0.38824)(0.5608,0.40392)(0.5647,0.41961)(0.5686,0.43529)(0.5725,0.45098)(0.5765,0.46667)(0.5804,0.48235)(0.5843,0.49804)(0.5882,0.51373)(0.5922,0.52941)(0.5961,0.54902)(0.6,0.56471)(0.6039,0.58039)(0.6078,0.59608)(0.6118,0.61176)(0.6157,0.62745)(0.6196,0.64314)(0.6235,0.65882)(0.6275,0.67451)(0.6314,0.6902)(0.6353,0.70588)(0.6392,0.72157)(0.6431,0.73725)(0.6471,0.74902)(0.651,0.76471)(0.6549,0.77647)(0.6588,0.79216)(0.6627,0.80392)(0.6667,0.81961)(0.6706,0.83137)(0.6745,0.84314)(0.6784,0.8549)(0.6824,0.86667)(0.6863,0.87843)(0.6902,0.8902)(0.6941,0.89804)(0.698,0.9098)(0.702,0.91765)(0.7059,0.92549)(0.7098,0.93725)(0.7137,0.9451)(0.7176,0.95294)(0.7216,0.96078)(0.7255,0.96471)(0.7294,0.97255)(0.7333,0.97647)(0.7373,0.98431)(0.7412,0.98824)(0.7451,0.99216)(0.749,0.99608)(0.7529,1)(0.7569,1)(0.7608,1)(0.7647,1)(0.7686,1)(0.7725,1)(0.7765,1)(0.7804,1)(0.7843,1)(0.7882,1)(0.7922,1)(0.7961,1)(0.8,1)(0.8039,1)(0.8078,1)(0.8118,1)(0.8157,1)(0.8196,1)(0.8235,1)(0.8275,1)(0.8314,1)(0.8353,0.99608)(0.8392,0.99216)(0.8431,0.99216)(0.8471,0.98824)(0.851,0.98431)(0.8549,0.98039)(0.8588,0.97647)(0.8627,0.97647)(0.8667,0.97255)(0.8706,0.96863)(0.8745,0.96471)(0.8784,0.96078)(0.8824,0.96078)(0.8863,0.95686)(0.8902,0.95294)(0.8941,0.95294)(0.898,0.94902)(0.902,0.94902)(0.9059,0.9451)(0.9098,0.9451)(0.9137,0.94118)(0.9176,0.94118)(0.9216,0.94118)(0.9255,0.94118)(0.9294,0.94118)(0.9333,0.94118)(0.9373,0.94118)(0.9412,0.94118)(0.9451,0.94118)(0.949,0.9451)(0.9529,0.9451)(0.9569,0.94902)(0.9608,0.94902)(0.9647,0.95294)(0.9686,0.95686)(0.9725,0.96078)(0.9765,0.96471)(0.9804,0.96863)(0.9843,0.97647)(0.9882,0.98039)(0.9922,0.98431)(0.9961,0.99216)(1,1) saods9/ds9/cmaps/ch05p151010.sao000644 000765 000000 00000027734 12567376460 016316 0ustar00joyewheel000000 000000 # SAOimage color table # ch05p151010 # created by cptutils 1.46 # Wed Aug 15 23:30:54 2012 PSEUDOCOLOR RED: (0,0)(0.0039,0.0039216)(0.0078,0.011765)(0.0118,0.019608)(0.0157,0.027451)(0.0196,0.035294)(0.0235,0.039216)(0.0275,0.047059)(0.0314,0.054902)(0.0353,0.062745)(0.0392,0.070588)(0.0431,0.078431)(0.0471,0.086275)(0.051,0.090196)(0.0549,0.098039)(0.0588,0.10588)(0.0627,0.11373)(0.0667,0.12157)(0.0706,0.12549)(0.0745,0.13333)(0.0784,0.14118)(0.0824,0.1451)(0.0863,0.15294)(0.0902,0.16078)(0.0941,0.16471)(0.098,0.17255)(0.102,0.17647)(0.1059,0.18039)(0.1098,0.18824)(0.1137,0.19216)(0.1176,0.19608)(0.1216,0.2)(0.1255,0.20392)(0.1294,0.21176)(0.1333,0.21176)(0.1373,0.21569)(0.1412,0.21961)(0.1451,0.22353)(0.149,0.22745)(0.1529,0.22745)(0.1569,0.23137)(0.1608,0.23137)(0.1647,0.23529)(0.1686,0.23529)(0.1725,0.23922)(0.1765,0.23922)(0.1804,0.23922)(0.1843,0.23922)(0.1882,0.23922)(0.1922,0.23922)(0.1961,0.23922)(0.2,0.23922)(0.2039,0.23922)(0.2078,0.23922)(0.2118,0.23529)(0.2157,0.23529)(0.2196,0.23529)(0.2235,0.23137)(0.2275,0.23137)(0.2314,0.22745)(0.2353,0.22745)(0.2392,0.22353)(0.2431,0.22353)(0.2471,0.21961)(0.251,0.21569)(0.2549,0.21569)(0.2588,0.21176)(0.2627,0.20784)(0.2667,0.20784)(0.2706,0.20392)(0.2745,0.2)(0.2784,0.2)(0.2824,0.19608)(0.2863,0.19216)(0.2902,0.19216)(0.2941,0.18824)(0.298,0.18431)(0.302,0.18431)(0.3059,0.18039)(0.3098,0.18039)(0.3137,0.17647)(0.3176,0.17255)(0.3216,0.17255)(0.3255,0.17255)(0.3294,0.16863)(0.3333,0.16863)(0.3373,0.16863)(0.3412,0.16471)(0.3451,0.16471)(0.349,0.16471)(0.3529,0.16471)(0.3569,0.16471)(0.3608,0.16471)(0.3647,0.16471)(0.3686,0.16471)(0.3725,0.16863)(0.3765,0.16863)(0.3804,0.16863)(0.3843,0.17255)(0.3882,0.17647)(0.3922,0.17647)(0.3961,0.18039)(0.4,0.18431)(0.4039,0.18824)(0.4078,0.19216)(0.4118,0.19608)(0.4157,0.2)(0.4196,0.20392)(0.4235,0.20784)(0.4275,0.21569)(0.4314,0.21961)(0.4353,0.22745)(0.4392,0.23529)(0.4431,0.23922)(0.4471,0.24706)(0.451,0.2549)(0.4549,0.26275)(0.4588,0.27059)(0.4627,0.27843)(0.4667,0.28627)(0.4706,0.29804)(0.4745,0.30588)(0.4784,0.31373)(0.4824,0.32549)(0.4863,0.33333)(0.4902,0.3451)(0.4941,0.35294)(0.498,0.36471)(0.502,0.37647)(0.5059,0.38824)(0.5098,0.39608)(0.5137,0.40784)(0.5176,0.41961)(0.5216,0.43137)(0.5255,0.44314)(0.5294,0.4549)(0.5333,0.46667)(0.5373,0.47843)(0.5412,0.4902)(0.5451,0.50196)(0.549,0.51373)(0.5529,0.52549)(0.5569,0.54118)(0.5608,0.55294)(0.5647,0.56471)(0.5686,0.57647)(0.5725,0.58824)(0.5765,0.6)(0.5804,0.61176)(0.5843,0.62353)(0.5882,0.63529)(0.5922,0.64706)(0.5961,0.65882)(0.6,0.67059)(0.6039,0.67843)(0.6078,0.6902)(0.6118,0.70196)(0.6157,0.71373)(0.6196,0.72157)(0.6235,0.73333)(0.6275,0.74118)(0.6314,0.75294)(0.6353,0.76078)(0.6392,0.77255)(0.6431,0.78039)(0.6471,0.78824)(0.651,0.79608)(0.6549,0.80392)(0.6588,0.81176)(0.6627,0.81961)(0.6667,0.82745)(0.6706,0.83529)(0.6745,0.84314)(0.6784,0.84706)(0.6824,0.8549)(0.6863,0.85882)(0.6902,0.86667)(0.6941,0.87059)(0.698,0.87451)(0.702,0.87843)(0.7059,0.88627)(0.7098,0.8902)(0.7137,0.8902)(0.7176,0.89412)(0.7216,0.89804)(0.7255,0.90196)(0.7294,0.90588)(0.7333,0.90588)(0.7373,0.9098)(0.7412,0.9098)(0.7451,0.9098)(0.749,0.91373)(0.7529,0.91373)(0.7569,0.91373)(0.7608,0.91373)(0.7647,0.91373)(0.7686,0.91765)(0.7725,0.91765)(0.7765,0.91765)(0.7804,0.91373)(0.7843,0.91373)(0.7882,0.91373)(0.7922,0.91373)(0.7961,0.91373)(0.8,0.91373)(0.8039,0.9098)(0.8078,0.9098)(0.8118,0.9098)(0.8157,0.90588)(0.8196,0.90588)(0.8235,0.90588)(0.8275,0.90588)(0.8314,0.90196)(0.8353,0.90196)(0.8392,0.90196)(0.8431,0.89804)(0.8471,0.89804)(0.851,0.89804)(0.8549,0.89804)(0.8588,0.89412)(0.8627,0.89412)(0.8667,0.89412)(0.8706,0.89412)(0.8745,0.89412)(0.8784,0.89412)(0.8824,0.89412)(0.8863,0.89412)(0.8902,0.89412)(0.8941,0.89412)(0.898,0.89412)(0.902,0.89804)(0.9059,0.89804)(0.9098,0.89804)(0.9137,0.90196)(0.9176,0.90196)(0.9216,0.90588)(0.9255,0.90588)(0.9294,0.9098)(0.9333,0.91373)(0.9373,0.91765)(0.9412,0.91765)(0.9451,0.92157)(0.949,0.92549)(0.9529,0.92941)(0.9569,0.93725)(0.9608,0.94118)(0.9647,0.9451)(0.9686,0.94902)(0.9725,0.95686)(0.9765,0.96078)(0.9804,0.96471)(0.9843,0.97255)(0.9882,0.98039)(0.9922,0.98431)(0.9961,0.99216)(1,1) GREEN: (0,0)(0.0039,0)(0.0078,0.0039216)(0.0118,0.0039216)(0.0157,0.0078431)(0.0196,0.0078431)(0.0235,0.011765)(0.0275,0.011765)(0.0314,0.015686)(0.0353,0.015686)(0.0392,0.019608)(0.0431,0.023529)(0.0471,0.023529)(0.051,0.027451)(0.0549,0.027451)(0.0588,0.031373)(0.0627,0.035294)(0.0667,0.039216)(0.0706,0.039216)(0.0745,0.043137)(0.0784,0.047059)(0.0824,0.05098)(0.0863,0.054902)(0.0902,0.054902)(0.0941,0.058824)(0.098,0.062745)(0.102,0.066667)(0.1059,0.070588)(0.1098,0.07451)(0.1137,0.082353)(0.1176,0.086275)(0.1216,0.090196)(0.1255,0.094118)(0.1294,0.098039)(0.1333,0.10196)(0.1373,0.1098)(0.1412,0.11373)(0.1451,0.11765)(0.149,0.12549)(0.1529,0.12941)(0.1569,0.13725)(0.1608,0.14118)(0.1647,0.14902)(0.1686,0.15294)(0.1725,0.16078)(0.1765,0.16471)(0.1804,0.17255)(0.1843,0.18039)(0.1882,0.18431)(0.1922,0.19216)(0.1961,0.2)(0.2,0.20392)(0.2039,0.21176)(0.2078,0.21961)(0.2118,0.22745)(0.2157,0.23529)(0.2196,0.23922)(0.2235,0.24706)(0.2275,0.2549)(0.2314,0.26275)(0.2353,0.27059)(0.2392,0.27843)(0.2431,0.28235)(0.2471,0.2902)(0.251,0.29804)(0.2549,0.30588)(0.2588,0.31373)(0.2627,0.32157)(0.2667,0.32549)(0.2706,0.33333)(0.2745,0.34118)(0.2784,0.34902)(0.2824,0.35294)(0.2863,0.36078)(0.2902,0.36863)(0.2941,0.37647)(0.298,0.38039)(0.302,0.38824)(0.3059,0.39216)(0.3098,0.4)(0.3137,0.40784)(0.3176,0.41176)(0.3216,0.41961)(0.3255,0.42353)(0.3294,0.43137)(0.3333,0.43529)(0.3373,0.43922)(0.3412,0.44706)(0.3451,0.45098)(0.349,0.4549)(0.3529,0.45882)(0.3569,0.46275)(0.3608,0.46667)(0.3647,0.47451)(0.3686,0.47843)(0.3725,0.48235)(0.3765,0.48235)(0.3804,0.48627)(0.3843,0.4902)(0.3882,0.49412)(0.3922,0.49804)(0.3961,0.49804)(0.4,0.50196)(0.4039,0.50588)(0.4078,0.50588)(0.4118,0.5098)(0.4157,0.5098)(0.4196,0.51373)(0.4235,0.51373)(0.4275,0.51765)(0.4314,0.51765)(0.4353,0.51765)(0.4392,0.52157)(0.4431,0.52157)(0.4471,0.52157)(0.451,0.52157)(0.4549,0.52157)(0.4588,0.52549)(0.4627,0.52549)(0.4667,0.52549)(0.4706,0.52549)(0.4745,0.52549)(0.4784,0.52549)(0.4824,0.52549)(0.4863,0.52549)(0.4902,0.52549)(0.4941,0.52549)(0.498,0.52157)(0.502,0.52157)(0.5059,0.52157)(0.5098,0.52157)(0.5137,0.52157)(0.5176,0.52157)(0.5216,0.52157)(0.5255,0.52157)(0.5294,0.52157)(0.5333,0.51765)(0.5373,0.51765)(0.5412,0.51765)(0.5451,0.51765)(0.549,0.51765)(0.5529,0.51765)(0.5569,0.51765)(0.5608,0.51765)(0.5647,0.51765)(0.5686,0.51765)(0.5725,0.51765)(0.5765,0.51765)(0.5804,0.51765)(0.5843,0.51765)(0.5882,0.51765)(0.5922,0.52157)(0.5961,0.52157)(0.6,0.52157)(0.6039,0.52157)(0.6078,0.52549)(0.6118,0.52549)(0.6157,0.52549)(0.6196,0.52941)(0.6235,0.52941)(0.6275,0.53333)(0.6314,0.53333)(0.6353,0.53725)(0.6392,0.54118)(0.6431,0.54118)(0.6471,0.5451)(0.651,0.54902)(0.6549,0.54902)(0.6588,0.55294)(0.6627,0.55686)(0.6667,0.56078)(0.6706,0.56471)(0.6745,0.56863)(0.6784,0.57255)(0.6824,0.57647)(0.6863,0.58039)(0.6902,0.58824)(0.6941,0.59216)(0.698,0.59608)(0.702,0.6)(0.7059,0.60784)(0.7098,0.61176)(0.7137,0.61569)(0.7176,0.62353)(0.7216,0.62745)(0.7255,0.63529)(0.7294,0.63922)(0.7333,0.64706)(0.7373,0.65098)(0.7412,0.65882)(0.7451,0.66667)(0.749,0.67059)(0.7529,0.67843)(0.7569,0.68627)(0.7608,0.6902)(0.7647,0.69804)(0.7686,0.70588)(0.7725,0.7098)(0.7765,0.71765)(0.7804,0.72549)(0.7843,0.73333)(0.7882,0.73725)(0.7922,0.7451)(0.7961,0.75294)(0.8,0.76078)(0.8039,0.76863)(0.8078,0.77255)(0.8118,0.78039)(0.8157,0.78824)(0.8196,0.79216)(0.8235,0.8)(0.8275,0.80784)(0.8314,0.81569)(0.8353,0.81961)(0.8392,0.82745)(0.8431,0.83529)(0.8471,0.83922)(0.851,0.84706)(0.8549,0.85098)(0.8588,0.85882)(0.8627,0.86275)(0.8667,0.87059)(0.8706,0.87451)(0.8745,0.88235)(0.8784,0.88627)(0.8824,0.89412)(0.8863,0.89804)(0.8902,0.90196)(0.8941,0.9098)(0.898,0.91373)(0.902,0.91765)(0.9059,0.92157)(0.9098,0.92549)(0.9137,0.92941)(0.9176,0.93725)(0.9216,0.94118)(0.9255,0.9451)(0.9294,0.94902)(0.9333,0.95294)(0.9373,0.95294)(0.9412,0.95686)(0.9451,0.96078)(0.949,0.96471)(0.9529,0.96863)(0.9569,0.97255)(0.9608,0.97255)(0.9647,0.97647)(0.9686,0.98039)(0.9725,0.98039)(0.9765,0.98431)(0.9804,0.98824)(0.9843,0.98824)(0.9882,0.99216)(0.9922,0.99216)(0.9961,0.99608)(1,1) BLUE: (0,0)(0.0039,0.0039216)(0.0078,0.0078431)(0.0118,0.015686)(0.0157,0.019608)(0.0196,0.023529)(0.0235,0.027451)(0.0275,0.031373)(0.0314,0.035294)(0.0353,0.039216)(0.0392,0.043137)(0.0431,0.047059)(0.0471,0.047059)(0.051,0.05098)(0.0549,0.054902)(0.0588,0.054902)(0.0627,0.054902)(0.0667,0.058824)(0.0706,0.058824)(0.0745,0.058824)(0.0784,0.062745)(0.0824,0.062745)(0.0863,0.062745)(0.0902,0.062745)(0.0941,0.062745)(0.098,0.062745)(0.102,0.062745)(0.1059,0.062745)(0.1098,0.058824)(0.1137,0.058824)(0.1176,0.058824)(0.1216,0.058824)(0.1255,0.058824)(0.1294,0.054902)(0.1333,0.054902)(0.1373,0.054902)(0.1412,0.05098)(0.1451,0.05098)(0.149,0.05098)(0.1529,0.05098)(0.1569,0.047059)(0.1608,0.047059)(0.1647,0.047059)(0.1686,0.047059)(0.1725,0.043137)(0.1765,0.043137)(0.1804,0.043137)(0.1843,0.043137)(0.1882,0.043137)(0.1922,0.043137)(0.1961,0.043137)(0.2,0.043137)(0.2039,0.043137)(0.2078,0.043137)(0.2118,0.047059)(0.2157,0.047059)(0.2196,0.047059)(0.2235,0.05098)(0.2275,0.05098)(0.2314,0.054902)(0.2353,0.058824)(0.2392,0.058824)(0.2431,0.062745)(0.2471,0.066667)(0.251,0.070588)(0.2549,0.07451)(0.2588,0.078431)(0.2627,0.082353)(0.2667,0.090196)(0.2706,0.094118)(0.2745,0.098039)(0.2784,0.10588)(0.2824,0.1098)(0.2863,0.11765)(0.2902,0.12549)(0.2941,0.13333)(0.298,0.14118)(0.302,0.14902)(0.3059,0.15686)(0.3098,0.16471)(0.3137,0.17255)(0.3176,0.18431)(0.3216,0.19216)(0.3255,0.2)(0.3294,0.21176)(0.3333,0.22353)(0.3373,0.23137)(0.3412,0.24314)(0.3451,0.2549)(0.349,0.26667)(0.3529,0.27451)(0.3569,0.28627)(0.3608,0.29804)(0.3647,0.3098)(0.3686,0.32157)(0.3725,0.33333)(0.3765,0.34902)(0.3804,0.36078)(0.3843,0.37255)(0.3882,0.38431)(0.3922,0.39608)(0.3961,0.41176)(0.4,0.42353)(0.4039,0.43529)(0.4078,0.44706)(0.4118,0.46275)(0.4157,0.47451)(0.4196,0.48627)(0.4235,0.49804)(0.4275,0.5098)(0.4314,0.52549)(0.4353,0.53725)(0.4392,0.54902)(0.4431,0.56078)(0.4471,0.57255)(0.451,0.58431)(0.4549,0.59608)(0.4588,0.60784)(0.4627,0.61961)(0.4667,0.62745)(0.4706,0.63922)(0.4745,0.65098)(0.4784,0.65882)(0.4824,0.67059)(0.4863,0.67843)(0.4902,0.6902)(0.4941,0.69804)(0.498,0.70588)(0.502,0.71765)(0.5059,0.72549)(0.5098,0.73333)(0.5137,0.74118)(0.5176,0.7451)(0.5216,0.75294)(0.5255,0.76078)(0.5294,0.76471)(0.5333,0.77255)(0.5373,0.77647)(0.5412,0.78039)(0.5451,0.78824)(0.549,0.79216)(0.5529,0.79608)(0.5569,0.8)(0.5608,0.8)(0.5647,0.80392)(0.5686,0.80784)(0.5725,0.80784)(0.5765,0.81176)(0.5804,0.81176)(0.5843,0.81176)(0.5882,0.81569)(0.5922,0.81569)(0.5961,0.81569)(0.6,0.81569)(0.6039,0.81569)(0.6078,0.81176)(0.6118,0.81176)(0.6157,0.81176)(0.6196,0.80784)(0.6235,0.80784)(0.6275,0.80392)(0.6314,0.80392)(0.6353,0.8)(0.6392,0.79608)(0.6431,0.79608)(0.6471,0.79216)(0.651,0.78824)(0.6549,0.78431)(0.6588,0.78039)(0.6627,0.77647)(0.6667,0.77255)(0.6706,0.76863)(0.6745,0.76863)(0.6784,0.76471)(0.6824,0.76078)(0.6863,0.75686)(0.6902,0.74902)(0.6941,0.7451)(0.698,0.74118)(0.702,0.73725)(0.7059,0.73725)(0.7098,0.73333)(0.7137,0.72941)(0.7176,0.72549)(0.7216,0.72157)(0.7255,0.71765)(0.7294,0.71373)(0.7333,0.7098)(0.7373,0.7098)(0.7412,0.70588)(0.7451,0.70196)(0.749,0.70196)(0.7529,0.69804)(0.7569,0.69804)(0.7608,0.69412)(0.7647,0.69412)(0.7686,0.69412)(0.7725,0.6902)(0.7765,0.6902)(0.7804,0.6902)(0.7843,0.6902)(0.7882,0.6902)(0.7922,0.6902)(0.7961,0.6902)(0.8,0.69412)(0.8039,0.69412)(0.8078,0.69412)(0.8118,0.69804)(0.8157,0.69804)(0.8196,0.70196)(0.8235,0.70588)(0.8275,0.70588)(0.8314,0.7098)(0.8353,0.71373)(0.8392,0.71765)(0.8431,0.72157)(0.8471,0.72549)(0.851,0.73333)(0.8549,0.73725)(0.8588,0.74118)(0.8627,0.74902)(0.8667,0.75294)(0.8706,0.76078)(0.8745,0.76471)(0.8784,0.77255)(0.8824,0.77647)(0.8863,0.78431)(0.8902,0.79216)(0.8941,0.8)(0.898,0.80784)(0.902,0.81176)(0.9059,0.81961)(0.9098,0.82745)(0.9137,0.83529)(0.9176,0.84314)(0.9216,0.85098)(0.9255,0.85882)(0.9294,0.86667)(0.9333,0.87451)(0.9373,0.88235)(0.9412,0.8902)(0.9451,0.89804)(0.949,0.90588)(0.9529,0.91373)(0.9569,0.92157)(0.9608,0.92941)(0.9647,0.93725)(0.9686,0.9451)(0.9725,0.95294)(0.9765,0.96078)(0.9804,0.96471)(0.9843,0.97255)(0.9882,0.98039)(0.9922,0.98431)(0.9961,0.99216)(1,1) saods9/ds9/cmaps/ch20m151010.sao000644 000765 000000 00000027710 12567376460 016302 0ustar00joyewheel000000 000000 # SAOimage color table # ch20m151010 # created by cptutils 1.46 # Wed Aug 15 23:30:53 2012 PSEUDOCOLOR RED: (0,0)(0.0039,0)(0.0078,0)(0.0118,0.0039216)(0.0157,0.0039216)(0.0196,0.0039216)(0.0235,0.0078431)(0.0275,0.011765)(0.0314,0.011765)(0.0353,0.015686)(0.0392,0.019608)(0.0431,0.023529)(0.0471,0.023529)(0.051,0.027451)(0.0549,0.031373)(0.0588,0.035294)(0.0627,0.043137)(0.0667,0.047059)(0.0706,0.05098)(0.0745,0.054902)(0.0784,0.062745)(0.0824,0.066667)(0.0863,0.07451)(0.0902,0.078431)(0.0941,0.086275)(0.098,0.094118)(0.102,0.098039)(0.1059,0.10588)(0.1098,0.11373)(0.1137,0.12157)(0.1176,0.12941)(0.1216,0.13725)(0.1255,0.1451)(0.1294,0.15294)(0.1333,0.16078)(0.1373,0.16863)(0.1412,0.17647)(0.1451,0.18824)(0.149,0.19608)(0.1529,0.20392)(0.1569,0.21176)(0.1608,0.22353)(0.1647,0.23137)(0.1686,0.23922)(0.1725,0.25098)(0.1765,0.25882)(0.1804,0.26667)(0.1843,0.27451)(0.1882,0.28627)(0.1922,0.29412)(0.1961,0.30196)(0.2,0.31373)(0.2039,0.32157)(0.2078,0.32941)(0.2118,0.33725)(0.2157,0.3451)(0.2196,0.35294)(0.2235,0.36471)(0.2275,0.37255)(0.2314,0.38039)(0.2353,0.38431)(0.2392,0.39216)(0.2431,0.4)(0.2471,0.40784)(0.251,0.41569)(0.2549,0.41961)(0.2588,0.42745)(0.2627,0.43529)(0.2667,0.43922)(0.2706,0.44706)(0.2745,0.45098)(0.2784,0.4549)(0.2824,0.45882)(0.2863,0.46275)(0.2902,0.47059)(0.2941,0.47451)(0.298,0.47451)(0.302,0.47843)(0.3059,0.48235)(0.3098,0.48627)(0.3137,0.48627)(0.3176,0.4902)(0.3216,0.4902)(0.3255,0.49412)(0.3294,0.49412)(0.3333,0.49412)(0.3373,0.49412)(0.3412,0.49412)(0.3451,0.49412)(0.349,0.49412)(0.3529,0.49412)(0.3569,0.49412)(0.3608,0.49412)(0.3647,0.4902)(0.3686,0.4902)(0.3725,0.48627)(0.3765,0.48627)(0.3804,0.48235)(0.3843,0.48235)(0.3882,0.47843)(0.3922,0.47451)(0.3961,0.47059)(0.4,0.47059)(0.4039,0.46667)(0.4078,0.46275)(0.4118,0.45882)(0.4157,0.4549)(0.4196,0.45098)(0.4235,0.44706)(0.4275,0.44314)(0.4314,0.43922)(0.4353,0.43529)(0.4392,0.43137)(0.4431,0.42745)(0.4471,0.41961)(0.451,0.41569)(0.4549,0.41176)(0.4588,0.40784)(0.4627,0.40392)(0.4667,0.4)(0.4706,0.39608)(0.4745,0.39216)(0.4784,0.38824)(0.4824,0.38431)(0.4863,0.38039)(0.4902,0.37647)(0.4941,0.37647)(0.498,0.37255)(0.502,0.36863)(0.5059,0.36471)(0.5098,0.36471)(0.5137,0.36078)(0.5176,0.36078)(0.5216,0.35686)(0.5255,0.35686)(0.5294,0.35686)(0.5333,0.35294)(0.5373,0.35294)(0.5412,0.35294)(0.5451,0.35294)(0.549,0.35294)(0.5529,0.35294)(0.5569,0.35294)(0.5608,0.35686)(0.5647,0.35686)(0.5686,0.35686)(0.5725,0.36078)(0.5765,0.36078)(0.5804,0.36471)(0.5843,0.36863)(0.5882,0.37255)(0.5922,0.37647)(0.5961,0.38039)(0.6,0.38431)(0.6039,0.38824)(0.6078,0.39216)(0.6118,0.4)(0.6157,0.40392)(0.6196,0.40784)(0.6235,0.41569)(0.6275,0.42353)(0.6314,0.42745)(0.6353,0.43529)(0.6392,0.44314)(0.6431,0.45098)(0.6471,0.45882)(0.651,0.46667)(0.6549,0.47451)(0.6588,0.48235)(0.6627,0.49412)(0.6667,0.50196)(0.6706,0.5098)(0.6745,0.52157)(0.6784,0.52941)(0.6824,0.53725)(0.6863,0.54902)(0.6902,0.56078)(0.6941,0.56863)(0.698,0.58039)(0.702,0.58824)(0.7059,0.6)(0.7098,0.61176)(0.7137,0.61961)(0.7176,0.63137)(0.7216,0.64314)(0.7255,0.65098)(0.7294,0.66275)(0.7333,0.67451)(0.7373,0.68235)(0.7412,0.69412)(0.7451,0.70588)(0.749,0.71373)(0.7529,0.72549)(0.7569,0.73725)(0.7608,0.7451)(0.7647,0.75686)(0.7686,0.76471)(0.7725,0.77647)(0.7765,0.78431)(0.7804,0.79608)(0.7843,0.80392)(0.7882,0.81176)(0.7922,0.82353)(0.7961,0.83137)(0.8,0.83922)(0.8039,0.84706)(0.8078,0.8549)(0.8118,0.86275)(0.8157,0.87059)(0.8196,0.87843)(0.8235,0.88627)(0.8275,0.89412)(0.8314,0.89804)(0.8353,0.90588)(0.8392,0.9098)(0.8431,0.91765)(0.8471,0.92157)(0.851,0.92941)(0.8549,0.93333)(0.8588,0.93725)(0.8627,0.94118)(0.8667,0.9451)(0.8706,0.95294)(0.8745,0.95294)(0.8784,0.95686)(0.8824,0.96078)(0.8863,0.96471)(0.8902,0.96863)(0.8941,0.96863)(0.898,0.97255)(0.902,0.97647)(0.9059,0.97647)(0.9098,0.98039)(0.9137,0.98039)(0.9176,0.98039)(0.9216,0.98431)(0.9255,0.98431)(0.9294,0.98431)(0.9333,0.98824)(0.9373,0.98824)(0.9412,0.98824)(0.9451,0.98824)(0.949,0.98824)(0.9529,0.99216)(0.9569,0.99216)(0.9608,0.99216)(0.9647,0.99216)(0.9686,0.99216)(0.9725,0.99216)(0.9765,0.99216)(0.9804,0.99608)(0.9843,0.99608)(0.9882,0.99608)(0.9922,0.99608)(0.9961,0.99608)(1,1) GREEN: (0,0)(0.0039,0.0039216)(0.0078,0.0078431)(0.0118,0.015686)(0.0157,0.019608)(0.0196,0.027451)(0.0235,0.031373)(0.0275,0.035294)(0.0314,0.043137)(0.0353,0.047059)(0.0392,0.05098)(0.0431,0.058824)(0.0471,0.062745)(0.051,0.066667)(0.0549,0.070588)(0.0588,0.07451)(0.0627,0.078431)(0.0667,0.086275)(0.0706,0.090196)(0.0745,0.094118)(0.0784,0.098039)(0.0824,0.10196)(0.0863,0.10196)(0.0902,0.10588)(0.0941,0.1098)(0.098,0.11373)(0.102,0.11765)(0.1059,0.12157)(0.1098,0.12157)(0.1137,0.12549)(0.1176,0.12941)(0.1216,0.12941)(0.1255,0.13333)(0.1294,0.13333)(0.1333,0.13725)(0.1373,0.13725)(0.1412,0.14118)(0.1451,0.14118)(0.149,0.1451)(0.1529,0.1451)(0.1569,0.14902)(0.1608,0.14902)(0.1647,0.14902)(0.1686,0.15294)(0.1725,0.15294)(0.1765,0.15294)(0.1804,0.15294)(0.1843,0.15686)(0.1882,0.15686)(0.1922,0.15686)(0.1961,0.16078)(0.2,0.16078)(0.2039,0.16078)(0.2078,0.16078)(0.2118,0.16078)(0.2157,0.16471)(0.2196,0.16471)(0.2235,0.16471)(0.2275,0.16471)(0.2314,0.16863)(0.2353,0.16863)(0.2392,0.16863)(0.2431,0.17255)(0.2471,0.17255)(0.251,0.17255)(0.2549,0.17647)(0.2588,0.17647)(0.2627,0.17647)(0.2667,0.18039)(0.2706,0.18039)(0.2745,0.18431)(0.2784,0.18431)(0.2824,0.18824)(0.2863,0.18824)(0.2902,0.19216)(0.2941,0.19608)(0.298,0.19608)(0.302,0.2)(0.3059,0.20392)(0.3098,0.20784)(0.3137,0.20784)(0.3176,0.21176)(0.3216,0.21569)(0.3255,0.21961)(0.3294,0.22353)(0.3333,0.22745)(0.3373,0.23137)(0.3412,0.23529)(0.3451,0.23922)(0.349,0.24706)(0.3529,0.25098)(0.3569,0.2549)(0.3608,0.26275)(0.3647,0.26667)(0.3686,0.27059)(0.3725,0.27843)(0.3765,0.28235)(0.3804,0.2902)(0.3843,0.29412)(0.3882,0.30196)(0.3922,0.3098)(0.3961,0.31373)(0.4,0.32157)(0.4039,0.32941)(0.4078,0.33725)(0.4118,0.34118)(0.4157,0.34902)(0.4196,0.35686)(0.4235,0.36471)(0.4275,0.37255)(0.4314,0.38039)(0.4353,0.38824)(0.4392,0.39608)(0.4431,0.40392)(0.4471,0.41176)(0.451,0.41961)(0.4549,0.42745)(0.4588,0.43529)(0.4627,0.44314)(0.4667,0.45098)(0.4706,0.46275)(0.4745,0.47059)(0.4784,0.47843)(0.4824,0.48627)(0.4863,0.49412)(0.4902,0.50196)(0.4941,0.5098)(0.498,0.51765)(0.502,0.52549)(0.5059,0.53725)(0.5098,0.5451)(0.5137,0.55294)(0.5176,0.56078)(0.5216,0.56863)(0.5255,0.57647)(0.5294,0.58431)(0.5333,0.59216)(0.5373,0.6)(0.5412,0.60784)(0.5451,0.61176)(0.549,0.61961)(0.5529,0.62745)(0.5569,0.63529)(0.5608,0.64314)(0.5647,0.64706)(0.5686,0.6549)(0.5725,0.66275)(0.5765,0.66667)(0.5804,0.67451)(0.5843,0.67843)(0.5882,0.68627)(0.5922,0.6902)(0.5961,0.69804)(0.6,0.70196)(0.6039,0.70588)(0.6078,0.71373)(0.6118,0.71765)(0.6157,0.72157)(0.6196,0.72549)(0.6235,0.72941)(0.6275,0.73725)(0.6314,0.74118)(0.6353,0.7451)(0.6392,0.7451)(0.6431,0.74902)(0.6471,0.75294)(0.651,0.75686)(0.6549,0.76078)(0.6588,0.76471)(0.6627,0.76471)(0.6667,0.76863)(0.6706,0.77255)(0.6745,0.77255)(0.6784,0.77647)(0.6824,0.77647)(0.6863,0.78039)(0.6902,0.78039)(0.6941,0.78039)(0.698,0.78431)(0.702,0.78431)(0.7059,0.78824)(0.7098,0.78824)(0.7137,0.78824)(0.7176,0.78824)(0.7216,0.79216)(0.7255,0.79216)(0.7294,0.79216)(0.7333,0.79216)(0.7373,0.79608)(0.7412,0.79608)(0.7451,0.79608)(0.749,0.79608)(0.7529,0.79608)(0.7569,0.79608)(0.7608,0.8)(0.7647,0.8)(0.7686,0.8)(0.7725,0.8)(0.7765,0.8)(0.7804,0.8)(0.7843,0.80392)(0.7882,0.80392)(0.7922,0.80392)(0.7961,0.80392)(0.8,0.80392)(0.8039,0.80784)(0.8078,0.80784)(0.8118,0.80784)(0.8157,0.81176)(0.8196,0.81176)(0.8235,0.81176)(0.8275,0.81569)(0.8314,0.81569)(0.8353,0.81961)(0.8392,0.81961)(0.8431,0.82353)(0.8471,0.82353)(0.851,0.82745)(0.8549,0.82745)(0.8588,0.83137)(0.8627,0.83529)(0.8667,0.83529)(0.8706,0.83922)(0.8745,0.84314)(0.8784,0.84706)(0.8824,0.85098)(0.8863,0.8549)(0.8902,0.8549)(0.8941,0.85882)(0.898,0.86275)(0.902,0.86667)(0.9059,0.87059)(0.9098,0.87451)(0.9137,0.88235)(0.9176,0.88627)(0.9216,0.8902)(0.9255,0.89412)(0.9294,0.89804)(0.9333,0.90588)(0.9373,0.9098)(0.9412,0.91373)(0.9451,0.91765)(0.949,0.92549)(0.9529,0.92941)(0.9569,0.93725)(0.9608,0.94118)(0.9647,0.9451)(0.9686,0.95294)(0.9725,0.95686)(0.9765,0.96471)(0.9804,0.96863)(0.9843,0.97647)(0.9882,0.98039)(0.9922,0.98824)(0.9961,0.99216)(1,1) BLUE: (0,0)(0.0039,0)(0.0078,0)(0.0118,0.0039216)(0.0157,0.0039216)(0.0196,0.0039216)(0.0235,0.0078431)(0.0275,0.0078431)(0.0314,0.0078431)(0.0353,0.0078431)(0.0392,0.0078431)(0.0431,0.0078431)(0.0471,0.0078431)(0.051,0.0078431)(0.0549,0.0078431)(0.0588,0.0078431)(0.0627,0.0078431)(0.0667,0.0078431)(0.0706,0.0078431)(0.0745,0.0078431)(0.0784,0.0078431)(0.0824,0.0078431)(0.0863,0.0078431)(0.0902,0.0078431)(0.0941,0.0078431)(0.098,0.0078431)(0.102,0.011765)(0.1059,0.011765)(0.1098,0.011765)(0.1137,0.011765)(0.1176,0.011765)(0.1216,0.015686)(0.1255,0.015686)(0.1294,0.019608)(0.1333,0.019608)(0.1373,0.023529)(0.1412,0.023529)(0.1451,0.027451)(0.149,0.031373)(0.1529,0.031373)(0.1569,0.035294)(0.1608,0.039216)(0.1647,0.043137)(0.1686,0.047059)(0.1725,0.05098)(0.1765,0.058824)(0.1804,0.062745)(0.1843,0.066667)(0.1882,0.07451)(0.1922,0.078431)(0.1961,0.086275)(0.2,0.094118)(0.2039,0.098039)(0.2078,0.10588)(0.2118,0.11373)(0.2157,0.12157)(0.2196,0.12941)(0.2235,0.13725)(0.2275,0.1451)(0.2314,0.15686)(0.2353,0.16471)(0.2392,0.17255)(0.2431,0.18431)(0.2471,0.19216)(0.251,0.20392)(0.2549,0.21176)(0.2588,0.22353)(0.2627,0.23529)(0.2667,0.24314)(0.2706,0.2549)(0.2745,0.26667)(0.2784,0.27843)(0.2824,0.2902)(0.2863,0.30196)(0.2902,0.31373)(0.2941,0.32549)(0.298,0.33333)(0.302,0.3451)(0.3059,0.35686)(0.3098,0.36863)(0.3137,0.38431)(0.3176,0.39608)(0.3216,0.40784)(0.3255,0.41961)(0.3294,0.42745)(0.3333,0.43922)(0.3373,0.45098)(0.3412,0.46275)(0.3451,0.47451)(0.349,0.48627)(0.3529,0.49804)(0.3569,0.5098)(0.3608,0.51765)(0.3647,0.52941)(0.3686,0.54118)(0.3725,0.54902)(0.3765,0.56078)(0.3804,0.56863)(0.3843,0.58039)(0.3882,0.58824)(0.3922,0.59608)(0.3961,0.60784)(0.4,0.61569)(0.4039,0.62353)(0.4078,0.63137)(0.4118,0.63922)(0.4157,0.64314)(0.4196,0.65098)(0.4235,0.65882)(0.4275,0.66275)(0.4314,0.67059)(0.4353,0.67451)(0.4392,0.67843)(0.4431,0.68627)(0.4471,0.6902)(0.451,0.69412)(0.4549,0.69804)(0.4588,0.69804)(0.4627,0.70196)(0.4667,0.70588)(0.4706,0.70588)(0.4745,0.7098)(0.4784,0.7098)(0.4824,0.7098)(0.4863,0.71373)(0.4902,0.71373)(0.4941,0.71373)(0.498,0.71373)(0.502,0.7098)(0.5059,0.7098)(0.5098,0.7098)(0.5137,0.70588)(0.5176,0.70588)(0.5216,0.70196)(0.5255,0.70196)(0.5294,0.69804)(0.5333,0.69412)(0.5373,0.69412)(0.5412,0.6902)(0.5451,0.68627)(0.549,0.68235)(0.5529,0.67843)(0.5569,0.67451)(0.5608,0.67059)(0.5647,0.66667)(0.5686,0.66275)(0.5725,0.6549)(0.5765,0.65098)(0.5804,0.64706)(0.5843,0.64314)(0.5882,0.63922)(0.5922,0.63137)(0.5961,0.62745)(0.6,0.62353)(0.6039,0.61961)(0.6078,0.61176)(0.6118,0.60784)(0.6157,0.60392)(0.6196,0.6)(0.6235,0.59608)(0.6275,0.58824)(0.6314,0.58431)(0.6353,0.58039)(0.6392,0.57647)(0.6431,0.57255)(0.6471,0.56863)(0.651,0.56863)(0.6549,0.56471)(0.6588,0.56078)(0.6627,0.55686)(0.6667,0.55686)(0.6706,0.55294)(0.6745,0.54902)(0.6784,0.54902)(0.6824,0.54902)(0.6863,0.5451)(0.6902,0.5451)(0.6941,0.5451)(0.698,0.5451)(0.702,0.5451)(0.7059,0.5451)(0.7098,0.5451)(0.7137,0.5451)(0.7176,0.5451)(0.7216,0.54902)(0.7255,0.54902)(0.7294,0.55294)(0.7333,0.55686)(0.7373,0.55686)(0.7412,0.56078)(0.7451,0.56471)(0.749,0.56863)(0.7529,0.57255)(0.7569,0.57647)(0.7608,0.58039)(0.7647,0.58824)(0.7686,0.59216)(0.7725,0.59608)(0.7765,0.60392)(0.7804,0.60784)(0.7843,0.61569)(0.7882,0.62353)(0.7922,0.62745)(0.7961,0.63529)(0.8,0.64314)(0.8039,0.65098)(0.8078,0.65882)(0.8118,0.66667)(0.8157,0.67451)(0.8196,0.68235)(0.8235,0.6902)(0.8275,0.69804)(0.8314,0.7098)(0.8353,0.71765)(0.8392,0.72549)(0.8431,0.73333)(0.8471,0.7451)(0.851,0.75294)(0.8549,0.76078)(0.8588,0.76863)(0.8627,0.78039)(0.8667,0.78824)(0.8706,0.79608)(0.8745,0.80784)(0.8784,0.81569)(0.8824,0.82353)(0.8863,0.83137)(0.8902,0.83922)(0.8941,0.85098)(0.898,0.85882)(0.902,0.86667)(0.9059,0.87451)(0.9098,0.88235)(0.9137,0.8902)(0.9176,0.89804)(0.9216,0.90588)(0.9255,0.9098)(0.9294,0.91765)(0.9333,0.92549)(0.9373,0.92941)(0.9412,0.93725)(0.9451,0.9451)(0.949,0.94902)(0.9529,0.95294)(0.9569,0.96078)(0.9608,0.96471)(0.9647,0.96863)(0.9686,0.97255)(0.9725,0.97647)(0.9765,0.98039)(0.9804,0.98431)(0.9843,0.98824)(0.9882,0.99216)(0.9922,0.99216)(0.9961,0.99608)(1,1) saods9/ds9/cmaps/cubehelix0.sao000644 000765 000000 00000010265 11742074507 016735 0ustar00joyewheel000000 000000 #----------------------------------------- #cubehelixcolourschemeforsaoimage/DS9 # #start....:0.5 #rotations:-1.5 #hue......:1.0 #gamma....:1.0 # #see:Green(2011),BASI,39,289. #----------------------------------------- #DaveGreen:dag@mrao.cam.ac.uk #----------------------------------------- PSEUDOCOLOR RED: (0.00,0.00) (0.01,0.02) (0.02,0.03) (0.03,0.05) (0.04,0.06) (0.05,0.07) (0.06,0.08) (0.07,0.09) (0.08,0.09) (0.09,0.10) (0.10,0.10) (0.11,0.10) (0.12,0.10) (0.13,0.10) (0.14,0.10) (0.15,0.10) (0.16,0.10) (0.17,0.09) (0.18,0.09) (0.19,0.09) (0.20,0.09) (0.21,0.08) (0.22,0.08) (0.23,0.08) (0.24,0.08) (0.25,0.08) (0.26,0.09) (0.27,0.09) (0.28,0.10) (0.29,0.11) (0.30,0.12) (0.31,0.13) (0.32,0.15) (0.33,0.16) (0.34,0.18) (0.35,0.20) (0.36,0.23) (0.37,0.25) (0.38,0.27) (0.39,0.30) (0.40,0.33) (0.41,0.36) (0.42,0.39) (0.43,0.42) (0.44,0.45) (0.45,0.48) (0.46,0.51) (0.47,0.54) (0.48,0.57) (0.49,0.60) (0.50,0.63) (0.51,0.65) (0.52,0.68) (0.53,0.70) (0.54,0.72) (0.55,0.75) (0.56,0.76) (0.57,0.78) (0.58,0.79) (0.59,0.80) (0.60,0.81) (0.61,0.82) (0.62,0.83) (0.63,0.83) (0.64,0.83) (0.65,0.83) (0.66,0.83) (0.67,0.83) (0.68,0.82) (0.69,0.82) (0.70,0.81) (0.71,0.81) (0.72,0.80) (0.73,0.79) (0.74,0.79) (0.75,0.78) (0.76,0.77) (0.77,0.77) (0.78,0.76) (0.79,0.76) (0.80,0.76) (0.81,0.76) (0.82,0.76) (0.83,0.76) (0.84,0.77) (0.85,0.77) (0.86,0.78) (0.87,0.79) (0.88,0.80) (0.89,0.81) (0.90,0.82) (0.91,0.84) (0.92,0.85) (0.93,0.87) (0.94,0.89) (0.95,0.91) (0.96,0.93) (0.97,0.95) (0.98,0.96) (0.99,0.98) (1.00,1.00) GREEN: (0.00,0.00) (0.01,0.01) (0.02,0.01) (0.03,0.02) (0.04,0.02) (0.05,0.03) (0.06,0.04) (0.07,0.05) (0.08,0.06) (0.09,0.07) (0.10,0.08) (0.11,0.10) (0.12,0.11) (0.13,0.12) (0.14,0.14) (0.15,0.15) (0.16,0.17) (0.17,0.19) (0.18,0.20) (0.19,0.22) (0.20,0.24) (0.21,0.26) (0.22,0.27) (0.23,0.29) (0.24,0.31) (0.25,0.32) (0.26,0.34) (0.27,0.36) (0.28,0.37) (0.29,0.39) (0.30,0.40) (0.31,0.41) (0.32,0.42) (0.33,0.43) (0.34,0.44) (0.35,0.45) (0.36,0.46) (0.37,0.46) (0.38,0.47) (0.39,0.47) (0.40,0.48) (0.41,0.48) (0.42,0.48) (0.43,0.48) (0.44,0.48) (0.45,0.48) (0.46,0.48) (0.47,0.48) (0.48,0.48) (0.49,0.48) (0.50,0.47) (0.51,0.47) (0.52,0.47) (0.53,0.47) (0.54,0.47) (0.55,0.48) (0.56,0.48) (0.57,0.48) (0.58,0.48) (0.59,0.49) (0.60,0.50) (0.61,0.50) (0.62,0.51) (0.63,0.52) (0.64,0.53) (0.65,0.54) (0.66,0.55) (0.67,0.57) (0.68,0.58) (0.69,0.60) (0.70,0.61) (0.71,0.63) (0.72,0.65) (0.73,0.67) (0.74,0.68) (0.75,0.70) (0.76,0.72) (0.77,0.74) (0.78,0.76) (0.79,0.77) (0.80,0.79) (0.81,0.81) (0.82,0.83) (0.83,0.84) (0.84,0.86) (0.85,0.87) (0.86,0.89) (0.87,0.90) (0.88,0.91) (0.89,0.92) (0.90,0.93) (0.91,0.94) (0.92,0.95) (0.93,0.96) (0.94,0.97) (0.95,0.97) (0.96,0.98) (0.97,0.98) (0.98,0.99) (0.99,0.99) (1.00,1.00) BLUE: (0.00,0.00) (0.01,0.02) (0.02,0.03) (0.03,0.05) (0.04,0.07) (0.05,0.09) (0.06,0.11) (0.07,0.13) (0.08,0.15) (0.09,0.17) (0.10,0.19) (0.11,0.21) (0.12,0.22) (0.13,0.24) (0.14,0.25) (0.15,0.27) (0.16,0.28) (0.17,0.29) (0.18,0.30) (0.19,0.30) (0.20,0.31) (0.21,0.31) (0.22,0.31) (0.23,0.31) (0.24,0.30) (0.25,0.30) (0.26,0.29) (0.27,0.28) (0.28,0.28) (0.29,0.27) (0.30,0.26) (0.31,0.25) (0.32,0.24) (0.33,0.23) (0.34,0.22) (0.35,0.21) (0.36,0.20) (0.37,0.19) (0.38,0.19) (0.39,0.19) (0.40,0.18) (0.41,0.18) (0.42,0.19) (0.43,0.19) (0.44,0.20) (0.45,0.21) (0.46,0.22) (0.47,0.23) (0.48,0.25) (0.49,0.27) (0.50,0.29) (0.51,0.31) (0.52,0.33) (0.53,0.36) (0.54,0.39) (0.55,0.42) (0.56,0.45) (0.57,0.48) (0.58,0.51) (0.59,0.54) (0.60,0.58) (0.61,0.61) (0.62,0.64) (0.63,0.67) (0.64,0.70) (0.65,0.73) (0.66,0.76) (0.67,0.78) (0.68,0.81) (0.69,0.83) (0.70,0.85) (0.71,0.87) (0.72,0.89) (0.73,0.91) (0.74,0.92) (0.75,0.93) (0.76,0.94) (0.77,0.94) (0.78,0.95) (0.79,0.95) (0.80,0.95) (0.81,0.95) (0.82,0.95) (0.83,0.95) (0.84,0.95) (0.85,0.95) (0.86,0.94) (0.87,0.94) (0.88,0.94) (0.89,0.94) (0.90,0.94) (0.91,0.94) (0.92,0.94) (0.93,0.94) (0.94,0.94) (0.95,0.95) (0.96,0.95) (0.97,0.96) (0.98,0.97) (0.99,0.99) (1.00,1.00) saods9/ds9/cmaps/cubehelix1.sao000644 000765 000000 00000010316 11742074507 016733 0ustar00joyewheel000000 000000 #----------------------------------------- # cubehelix colour scheme for saoimage/DS9 # # start....: 0.5 # rotations: -1.5 # hue......: 2.0 # gamma....: 1.0 # # see: Green (2011), BASI, 39, 289. #----------------------------------------- # Dave Green: dag@mrao.cam.ac.uk #----------------------------------------- PSEUDOCOLOR RED: (0.00,0.00) (0.01,0.02) (0.02,0.04) (0.03,0.06) (0.04,0.08) (0.05,0.09) (0.06,0.10) (0.07,0.10) (0.08,0.11) (0.09,0.11) (0.10,0.10) (0.11,0.10) (0.12,0.09) (0.13,0.08) (0.14,0.07) (0.15,0.05) (0.16,0.04) (0.17,0.02) (0.18,0.00) (0.19,0.00) (0.20,0.00) (0.21,0.00) (0.22,0.00) (0.23,0.00) (0.24,0.00) (0.25,0.00) (0.26,0.00) (0.27,0.00) (0.28,0.00) (0.29,0.00) (0.30,0.00) (0.31,0.00) (0.32,0.00) (0.33,0.00) (0.34,0.03) (0.35,0.06) (0.36,0.09) (0.37,0.13) (0.38,0.17) (0.39,0.21) (0.40,0.26) (0.41,0.31) (0.42,0.36) (0.43,0.41) (0.44,0.46) (0.45,0.51) (0.46,0.56) (0.47,0.61) (0.48,0.66) (0.49,0.71) (0.50,0.76) (0.51,0.80) (0.52,0.84) (0.53,0.88) (0.54,0.91) (0.55,0.94) (0.56,0.97) (0.57,0.99) (0.58,1.00) (0.59,1.00) (0.60,1.00) (0.61,1.00) (0.62,1.00) (0.63,1.00) (0.64,1.00) (0.65,1.00) (0.66,1.00) (0.67,0.99) (0.68,0.97) (0.69,0.95) (0.70,0.93) (0.71,0.90) (0.72,0.88) (0.73,0.86) (0.74,0.83) (0.75,0.81) (0.76,0.79) (0.77,0.77) (0.78,0.75) (0.79,0.73) (0.80,0.72) (0.81,0.71) (0.82,0.70) (0.83,0.69) (0.84,0.69) (0.85,0.69) (0.86,0.70) (0.87,0.71) (0.88,0.72) (0.89,0.73) (0.90,0.75) (0.91,0.77) (0.92,0.79) (0.93,0.81) (0.94,0.84) (0.95,0.87) (0.96,0.89) (0.97,0.92) (0.98,0.95) (0.99,0.97) (1.00,1.00) GREEN: (0.00,0.00) (0.01,0.00) (0.02,0.00) (0.03,0.01) (0.04,0.01) (0.05,0.01) (0.06,0.02) (0.07,0.03) (0.08,0.04) (0.09,0.05) (0.10,0.07) (0.11,0.08) (0.12,0.10) (0.13,0.12) (0.14,0.14) (0.15,0.16) (0.16,0.18) (0.17,0.20) (0.18,0.23) (0.19,0.25) (0.20,0.28) (0.21,0.30) (0.22,0.33) (0.23,0.35) (0.24,0.38) (0.25,0.40) (0.26,0.42) (0.27,0.44) (0.28,0.46) (0.29,0.48) (0.30,0.50) (0.31,0.51) (0.32,0.53) (0.33,0.54) (0.34,0.55) (0.35,0.55) (0.36,0.56) (0.37,0.56) (0.38,0.56) (0.39,0.56) (0.40,0.55) (0.41,0.55) (0.42,0.54) (0.43,0.53) (0.44,0.52) (0.45,0.51) (0.46,0.50) (0.47,0.49) (0.48,0.47) (0.49,0.46) (0.50,0.45) (0.51,0.44) (0.52,0.43) (0.53,0.42) (0.54,0.41) (0.55,0.40) (0.56,0.40) (0.57,0.39) (0.58,0.39) (0.59,0.39) (0.60,0.39) (0.61,0.40) (0.62,0.40) (0.63,0.41) (0.64,0.42) (0.65,0.43) (0.66,0.45) (0.67,0.47) (0.68,0.48) (0.69,0.50) (0.70,0.53) (0.71,0.55) (0.72,0.57) (0.73,0.60) (0.74,0.63) (0.75,0.65) (0.76,0.68) (0.77,0.71) (0.78,0.73) (0.79,0.76) (0.80,0.78) (0.81,0.81) (0.82,0.83) (0.83,0.85) (0.84,0.87) (0.85,0.89) (0.86,0.91) (0.87,0.93) (0.88,0.94) (0.89,0.95) (0.90,0.96) (0.91,0.97) (0.92,0.98) (0.93,0.99) (0.94,0.99) (0.95,0.99) (0.96,1.00) (0.97,1.00) (0.98,1.00) (0.99,1.00) (1.00,1.00) BLUE: (0.00,0.00) (0.01,0.02) (0.02,0.05) (0.03,0.07) (0.04,0.10) (0.05,0.13) (0.06,0.16) (0.07,0.19) (0.08,0.22) (0.09,0.25) (0.10,0.28) (0.11,0.30) (0.12,0.33) (0.13,0.35) (0.14,0.37) (0.15,0.38) (0.16,0.40) (0.17,0.41) (0.18,0.41) (0.19,0.41) (0.20,0.41) (0.21,0.41) (0.22,0.40) (0.23,0.38) (0.24,0.37) (0.25,0.35) (0.26,0.32) (0.27,0.30) (0.28,0.27) (0.29,0.24) (0.30,0.21) (0.31,0.18) (0.32,0.15) (0.33,0.12) (0.34,0.09) (0.35,0.07) (0.36,0.04) (0.37,0.02) (0.38,0.00) (0.39,0.00) (0.40,0.00) (0.41,0.00) (0.42,0.00) (0.43,0.00) (0.44,0.00) (0.45,0.00) (0.46,0.00) (0.47,0.00) (0.48,0.01) (0.49,0.04) (0.50,0.07) (0.51,0.11) (0.52,0.15) (0.53,0.19) (0.54,0.24) (0.55,0.28) (0.56,0.33) (0.57,0.39) (0.58,0.44) (0.59,0.50) (0.60,0.55) (0.61,0.61) (0.62,0.66) (0.63,0.71) (0.64,0.76) (0.65,0.81) (0.66,0.86) (0.67,0.90) (0.68,0.94) (0.69,0.98) (0.70,1.00) (0.71,1.00) (0.72,1.00) (0.73,1.00) (0.74,1.00) (0.75,1.00) (0.76,1.00) (0.77,1.00) (0.78,1.00) (0.79,1.00) (0.80,1.00) (0.81,1.00) (0.82,1.00) (0.83,1.00) (0.84,1.00) (0.85,1.00) (0.86,1.00) (0.87,1.00) (0.88,1.00) (0.89,0.98) (0.90,0.97) (0.91,0.96) (0.92,0.95) (0.93,0.95) (0.94,0.94) (0.95,0.95) (0.96,0.95) (0.97,0.96) (0.98,0.97) (0.99,0.98) (1.00,1.00) saods9/ds9/cmaps/gist_earth.sao000644 000765 000000 00000026127 12567377777 017067 0ustar00joyewheel000000 000000 # SAOimage color table # earth # created by cptutils 1.46 # Wed Aug 15 23:30:59 2012 PSEUDOCOLOR RED: (0,0)(0.0042,0)(0.0084,0)(0.0126,0)(0.0167,0)(0.0209,0)(0.0251,0)(0.0293,0)(0.0335,0)(0.0377,0.0039216)(0.0418,0.0078431)(0.046,0.0078431)(0.0502,0.011765)(0.0544,0.015686)(0.0586,0.019608)(0.0628,0.019608)(0.0669,0.023529)(0.0711,0.027451)(0.0753,0.031373)(0.0795,0.031373)(0.0837,0.035294)(0.0879,0.039216)(0.0921,0.043137)(0.0962,0.043137)(0.1004,0.047059)(0.1046,0.05098)(0.1088,0.054902)(0.113,0.058824)(0.1172,0.058824)(0.1213,0.062745)(0.1255,0.066667)(0.1297,0.070588)(0.1339,0.070588)(0.1381,0.07451)(0.1423,0.078431)(0.1464,0.082353)(0.1506,0.086275)(0.1548,0.086275)(0.159,0.090196)(0.1632,0.094118)(0.1674,0.098039)(0.1715,0.10196)(0.1757,0.10196)(0.1799,0.10588)(0.1841,0.1098)(0.1883,0.11373)(0.1925,0.11765)(0.1967,0.12157)(0.2008,0.12157)(0.205,0.12549)(0.2092,0.12941)(0.2134,0.13333)(0.2176,0.13725)(0.2218,0.14118)(0.2259,0.14118)(0.2301,0.1451)(0.2343,0.14902)(0.2385,0.15294)(0.2427,0.15686)(0.2469,0.16078)(0.251,0.16078)(0.2552,0.16471)(0.2594,0.16863)(0.2636,0.17255)(0.2678,0.17647)(0.272,0.18039)(0.2762,0.18431)(0.2803,0.18824)(0.2845,0.18824)(0.2887,0.18824)(0.2929,0.19216)(0.2971,0.19216)(0.3013,0.19608)(0.3054,0.19608)(0.3096,0.2)(0.3138,0.2)(0.318,0.20392)(0.3222,0.20392)(0.3264,0.20784)(0.3305,0.20784)(0.3347,0.21176)(0.3389,0.21176)(0.3431,0.21569)(0.3473,0.21569)(0.3515,0.21961)(0.3556,0.21961)(0.3598,0.22353)(0.364,0.22353)(0.3682,0.22745)(0.3724,0.22745)(0.3766,0.23137)(0.3808,0.23137)(0.3849,0.23529)(0.3891,0.23922)(0.3933,0.23922)(0.3975,0.24314)(0.4017,0.24314)(0.4059,0.24706)(0.41,0.24706)(0.4142,0.25098)(0.4184,0.25098)(0.4226,0.2549)(0.4268,0.2549)(0.431,0.25882)(0.4351,0.26275)(0.4393,0.26275)(0.4435,0.26667)(0.4477,0.26667)(0.4519,0.27059)(0.4561,0.27059)(0.4603,0.27451)(0.4644,0.27843)(0.4686,0.28627)(0.4728,0.29804)(0.477,0.30588)(0.4812,0.31765)(0.4854,0.32549)(0.4895,0.33725)(0.4937,0.3451)(0.4979,0.35686)(0.5021,0.36863)(0.5063,0.37647)(0.5105,0.38824)(0.5146,0.39608)(0.5188,0.40784)(0.523,0.41569)(0.5272,0.42745)(0.5314,0.43529)(0.5356,0.44706)(0.5397,0.45882)(0.5439,0.46667)(0.5481,0.47451)(0.5523,0.47843)(0.5565,0.48627)(0.5607,0.49412)(0.5649,0.50196)(0.569,0.50588)(0.5732,0.51373)(0.5774,0.52157)(0.5816,0.52941)(0.5858,0.53333)(0.59,0.54118)(0.5941,0.54902)(0.5983,0.55294)(0.6025,0.56078)(0.6067,0.56863)(0.6109,0.57647)(0.6151,0.58431)(0.6192,0.58824)(0.6234,0.59608)(0.6276,0.60392)(0.6318,0.61176)(0.636,0.61569)(0.6402,0.62353)(0.6444,0.63137)(0.6485,0.63922)(0.6527,0.64706)(0.6569,0.65098)(0.6611,0.65882)(0.6653,0.66667)(0.6695,0.67451)(0.6736,0.68235)(0.6778,0.68627)(0.682,0.69412)(0.6862,0.70196)(0.6904,0.7098)(0.6946,0.71765)(0.6987,0.71765)(0.7029,0.72157)(0.7071,0.72157)(0.7113,0.72549)(0.7155,0.72549)(0.7197,0.72941)(0.7238,0.72941)(0.728,0.73333)(0.7322,0.73333)(0.7364,0.73333)(0.7406,0.73725)(0.7448,0.73725)(0.749,0.74118)(0.7531,0.74118)(0.7573,0.7451)(0.7615,0.7451)(0.7657,0.7451)(0.7699,0.74902)(0.7741,0.74902)(0.7782,0.75294)(0.7824,0.75294)(0.7866,0.75686)(0.7908,0.76471)(0.795,0.76863)(0.7992,0.77255)(0.8033,0.77647)(0.8075,0.78039)(0.8117,0.78824)(0.8159,0.79216)(0.8201,0.79608)(0.8243,0.8)(0.8285,0.80392)(0.8326,0.81176)(0.8368,0.81569)(0.841,0.81961)(0.8452,0.82353)(0.8494,0.82745)(0.8536,0.83529)(0.8577,0.83922)(0.8619,0.84314)(0.8661,0.84706)(0.8703,0.85098)(0.8745,0.85882)(0.8787,0.86275)(0.8828,0.86667)(0.887,0.87059)(0.8912,0.87451)(0.8954,0.88235)(0.8996,0.88627)(0.9038,0.8902)(0.9079,0.89412)(0.9121,0.89804)(0.9163,0.90588)(0.9205,0.9098)(0.9247,0.91373)(0.9289,0.91765)(0.9331,0.92157)(0.9372,0.92941)(0.9414,0.93333)(0.9456,0.93725)(0.9498,0.94118)(0.954,0.9451)(0.9582,0.95294)(0.9623,0.95686)(0.9665,0.96078)(0.9707,0.96471)(0.9749,0.96863)(0.9791,0.97647)(0.9833,0.98039)(0.9874,0.98431)(0.9916,0.98824)(0.9958,0.99216)(1,1) GREEN: (0,0)(0.0042,0)(0.0084,0)(0.0126,0)(0.0167,0)(0.0209,0)(0.0251,0)(0.0293,0)(0.0335,0.011765)(0.0377,0.023529)(0.0418,0.031373)(0.046,0.043137)(0.0502,0.05098)(0.0544,0.062745)(0.0586,0.070588)(0.0628,0.082353)(0.0669,0.090196)(0.0711,0.10196)(0.0753,0.1098)(0.0795,0.12157)(0.0837,0.12941)(0.0879,0.14118)(0.0921,0.14902)(0.0962,0.16078)(0.1004,0.16863)(0.1046,0.17647)(0.1088,0.18824)(0.113,0.19608)(0.1172,0.20392)(0.1213,0.21569)(0.1255,0.22353)(0.1297,0.23137)(0.1339,0.23922)(0.1381,0.25098)(0.1423,0.25882)(0.1464,0.26667)(0.1506,0.27451)(0.1548,0.28235)(0.159,0.2902)(0.1632,0.30196)(0.1674,0.3098)(0.1715,0.31765)(0.1757,0.32549)(0.1799,0.33333)(0.1841,0.34118)(0.1883,0.34902)(0.1925,0.35686)(0.1967,0.36471)(0.2008,0.37255)(0.205,0.38039)(0.2092,0.38824)(0.2134,0.39216)(0.2176,0.4)(0.2218,0.40784)(0.2259,0.41569)(0.2301,0.42353)(0.2343,0.42745)(0.2385,0.43529)(0.2427,0.44314)(0.2469,0.45098)(0.251,0.4549)(0.2552,0.46275)(0.2594,0.47059)(0.2636,0.47451)(0.2678,0.48235)(0.272,0.4902)(0.2762,0.49412)(0.2803,0.50196)(0.2845,0.50196)(0.2887,0.50588)(0.2929,0.50588)(0.2971,0.5098)(0.3013,0.51373)(0.3054,0.51373)(0.3096,0.51765)(0.3138,0.52157)(0.318,0.52157)(0.3222,0.52549)(0.3264,0.52549)(0.3305,0.52941)(0.3347,0.53333)(0.3389,0.53333)(0.3431,0.53725)(0.3473,0.54118)(0.3515,0.54118)(0.3556,0.5451)(0.3598,0.54902)(0.364,0.54902)(0.3682,0.55294)(0.3724,0.55294)(0.3766,0.55686)(0.3808,0.56078)(0.3849,0.56078)(0.3891,0.56471)(0.3933,0.56863)(0.3975,0.56863)(0.4017,0.57255)(0.4059,0.57255)(0.41,0.57647)(0.4142,0.58039)(0.4184,0.58039)(0.4226,0.58431)(0.4268,0.58824)(0.431,0.58824)(0.4351,0.59216)(0.4393,0.59216)(0.4435,0.59608)(0.4477,0.6)(0.4519,0.6)(0.4561,0.60392)(0.4603,0.60784)(0.4644,0.60784)(0.4686,0.61176)(0.4728,0.61176)(0.477,0.61569)(0.4812,0.61961)(0.4854,0.61961)(0.4895,0.62353)(0.4937,0.62745)(0.4979,0.62745)(0.5021,0.63137)(0.5063,0.63137)(0.5105,0.63529)(0.5146,0.63922)(0.5188,0.63922)(0.523,0.64314)(0.5272,0.64706)(0.5314,0.64706)(0.5356,0.65098)(0.5397,0.65098)(0.5439,0.6549)(0.5481,0.65882)(0.5523,0.65882)(0.5565,0.65882)(0.5607,0.66275)(0.5649,0.66275)(0.569,0.66667)(0.5732,0.66667)(0.5774,0.67059)(0.5816,0.67059)(0.5858,0.67451)(0.59,0.67451)(0.5941,0.67451)(0.5983,0.67843)(0.6025,0.67843)(0.6067,0.68235)(0.6109,0.68235)(0.6151,0.68627)(0.6192,0.68627)(0.6234,0.68627)(0.6276,0.6902)(0.6318,0.6902)(0.636,0.69412)(0.6402,0.69412)(0.6444,0.69804)(0.6485,0.69804)(0.6527,0.70196)(0.6569,0.70196)(0.6611,0.70196)(0.6653,0.70588)(0.6695,0.70588)(0.6736,0.7098)(0.6778,0.7098)(0.682,0.71373)(0.6862,0.71373)(0.6904,0.71765)(0.6946,0.71765)(0.6987,0.71373)(0.7029,0.7098)(0.7071,0.7098)(0.7113,0.70588)(0.7155,0.70196)(0.7197,0.69804)(0.7238,0.69412)(0.728,0.6902)(0.7322,0.68627)(0.7364,0.68235)(0.7406,0.67843)(0.7448,0.67451)(0.749,0.67059)(0.7531,0.66667)(0.7573,0.66275)(0.7615,0.65882)(0.7657,0.6549)(0.7699,0.65098)(0.7741,0.64706)(0.7782,0.64314)(0.7824,0.63922)(0.7866,0.63922)(0.7908,0.64314)(0.795,0.64314)(0.7992,0.64706)(0.8033,0.64706)(0.8075,0.65098)(0.8117,0.6549)(0.8159,0.6549)(0.8201,0.65882)(0.8243,0.66275)(0.8285,0.66667)(0.8326,0.67059)(0.8368,0.67451)(0.841,0.67843)(0.8452,0.68235)(0.8494,0.68627)(0.8536,0.6902)(0.8577,0.69412)(0.8619,0.69804)(0.8661,0.70196)(0.8703,0.7098)(0.8745,0.71373)(0.8787,0.72157)(0.8828,0.72549)(0.887,0.73333)(0.8912,0.73725)(0.8954,0.7451)(0.8996,0.75294)(0.9038,0.76078)(0.9079,0.76863)(0.9121,0.77647)(0.9163,0.78431)(0.9205,0.79216)(0.9247,0.8)(0.9289,0.80784)(0.9331,0.81569)(0.9372,0.82745)(0.9414,0.83529)(0.9456,0.84314)(0.9498,0.8549)(0.954,0.86667)(0.9582,0.87451)(0.9623,0.88627)(0.9665,0.89804)(0.9707,0.9098)(0.9749,0.92157)(0.9791,0.93333)(0.9833,0.9451)(0.9874,0.95686)(0.9916,0.97255)(0.9958,0.98431)(1,1) BLUE: (0,0)(0.0042,0.18039)(0.0084,0.22745)(0.0126,0.27059)(0.0167,0.31765)(0.0209,0.36078)(0.0251,0.40784)(0.0293,0.4549)(0.0335,0.4549)(0.0377,0.4549)(0.0418,0.4549)(0.046,0.4549)(0.0502,0.45882)(0.0544,0.45882)(0.0586,0.45882)(0.0628,0.45882)(0.0669,0.45882)(0.0711,0.46275)(0.0753,0.46275)(0.0795,0.46275)(0.0837,0.46275)(0.0879,0.46275)(0.0921,0.46667)(0.0962,0.46667)(0.1004,0.46667)(0.1046,0.46667)(0.1088,0.46667)(0.113,0.47059)(0.1172,0.47059)(0.1213,0.47059)(0.1255,0.47059)(0.1297,0.47059)(0.1339,0.47451)(0.1381,0.47451)(0.1423,0.47451)(0.1464,0.47451)(0.1506,0.47451)(0.1548,0.47843)(0.159,0.47843)(0.1632,0.47843)(0.1674,0.47843)(0.1715,0.47843)(0.1757,0.48235)(0.1799,0.48235)(0.1841,0.48235)(0.1883,0.48235)(0.1925,0.48235)(0.1967,0.48627)(0.2008,0.48627)(0.205,0.48627)(0.2092,0.48627)(0.2134,0.48627)(0.2176,0.4902)(0.2218,0.4902)(0.2259,0.4902)(0.2301,0.4902)(0.2343,0.4902)(0.2385,0.49412)(0.2427,0.49412)(0.2469,0.49412)(0.251,0.49412)(0.2552,0.49412)(0.2594,0.49804)(0.2636,0.49804)(0.2678,0.49804)(0.272,0.49804)(0.2762,0.49804)(0.2803,0.50196)(0.2845,0.49412)(0.2887,0.4902)(0.2929,0.48627)(0.2971,0.48235)(0.3013,0.47843)(0.3054,0.47059)(0.3096,0.46667)(0.3138,0.46275)(0.318,0.45882)(0.3222,0.45098)(0.3264,0.44706)(0.3305,0.44314)(0.3347,0.43529)(0.3389,0.43137)(0.3431,0.42745)(0.3473,0.42353)(0.3515,0.41569)(0.3556,0.41176)(0.3598,0.40784)(0.364,0.4)(0.3682,0.39608)(0.3724,0.39216)(0.3766,0.38431)(0.3808,0.38039)(0.3849,0.37647)(0.3891,0.36863)(0.3933,0.36471)(0.3975,0.36078)(0.4017,0.35294)(0.4059,0.34902)(0.41,0.3451)(0.4142,0.33725)(0.4184,0.33333)(0.4226,0.32941)(0.4268,0.32157)(0.431,0.31765)(0.4351,0.31373)(0.4393,0.30588)(0.4435,0.30196)(0.4477,0.29804)(0.4519,0.2902)(0.4561,0.28627)(0.4603,0.27843)(0.4644,0.27451)(0.4686,0.27843)(0.4728,0.28235)(0.477,0.28235)(0.4812,0.28627)(0.4854,0.28627)(0.4895,0.2902)(0.4937,0.29412)(0.4979,0.29412)(0.5021,0.29804)(0.5063,0.29804)(0.5105,0.30196)(0.5146,0.30196)(0.5188,0.30588)(0.523,0.3098)(0.5272,0.3098)(0.5314,0.31373)(0.5356,0.31373)(0.5397,0.31765)(0.5439,0.32157)(0.5481,0.32157)(0.5523,0.32157)(0.5565,0.32549)(0.5607,0.32549)(0.5649,0.32549)(0.569,0.32941)(0.5732,0.32941)(0.5774,0.32941)(0.5816,0.33333)(0.5858,0.33333)(0.59,0.33333)(0.5941,0.33725)(0.5983,0.33725)(0.6025,0.33725)(0.6067,0.34118)(0.6109,0.34118)(0.6151,0.34118)(0.6192,0.3451)(0.6234,0.3451)(0.6276,0.3451)(0.6318,0.34902)(0.636,0.34902)(0.6402,0.34902)(0.6444,0.35294)(0.6485,0.35294)(0.6527,0.35294)(0.6569,0.35686)(0.6611,0.35686)(0.6653,0.35686)(0.6695,0.36078)(0.6736,0.36078)(0.6778,0.36078)(0.682,0.36471)(0.6862,0.36471)(0.6904,0.36471)(0.6946,0.36863)(0.6987,0.36863)(0.7029,0.36863)(0.7071,0.37255)(0.7113,0.37255)(0.7155,0.37255)(0.7197,0.37647)(0.7238,0.37647)(0.728,0.38039)(0.7322,0.38039)(0.7364,0.38039)(0.7406,0.38431)(0.7448,0.38431)(0.749,0.38431)(0.7531,0.38824)(0.7573,0.38824)(0.7615,0.38824)(0.7657,0.39216)(0.7699,0.39216)(0.7741,0.39216)(0.7782,0.39608)(0.7824,0.39608)(0.7866,0.40784)(0.7908,0.41569)(0.795,0.42353)(0.7992,0.43529)(0.8033,0.44314)(0.8075,0.4549)(0.8117,0.46275)(0.8159,0.47451)(0.8201,0.48235)(0.8243,0.49412)(0.8285,0.50588)(0.8326,0.51373)(0.8368,0.52549)(0.841,0.53725)(0.8452,0.5451)(0.8494,0.55686)(0.8536,0.56863)(0.8577,0.58039)(0.8619,0.58824)(0.8661,0.6)(0.8703,0.61176)(0.8745,0.62353)(0.8787,0.63529)(0.8828,0.64706)(0.887,0.65882)(0.8912,0.66667)(0.8954,0.67843)(0.8996,0.6902)(0.9038,0.70196)(0.9079,0.71373)(0.9121,0.72549)(0.9163,0.74118)(0.9205,0.75294)(0.9247,0.76471)(0.9289,0.77647)(0.9331,0.78824)(0.9372,0.8)(0.9414,0.81176)(0.9456,0.82745)(0.9498,0.83922)(0.954,0.85098)(0.9582,0.86275)(0.9623,0.87843)(0.9665,0.8902)(0.9707,0.90196)(0.9749,0.91765)(0.9791,0.92941)(0.9833,0.9451)(0.9874,0.95686)(0.9916,0.97255)(0.9958,0.98431)(1,1) saods9/ds9/cmaps/gist_gray.sao000644 000765 000000 00000026320 12567377777 016721 0ustar00joyewheel000000 000000 # SAOimage color table # gray # created by cptutils 1.46 # Wed Aug 15 23:30:59 2012 PSEUDOCOLOR RED: (0,0)(0.0042,0.0039216)(0.0084,0.0078431)(0.0126,0.011765)(0.0167,0.015686)(0.0209,0.019608)(0.0251,0.023529)(0.0293,0.027451)(0.0335,0.035294)(0.0377,0.039216)(0.0418,0.043137)(0.046,0.047059)(0.0502,0.05098)(0.0544,0.054902)(0.0586,0.058824)(0.0628,0.062745)(0.0669,0.066667)(0.0711,0.070588)(0.0753,0.07451)(0.0795,0.078431)(0.0837,0.082353)(0.0879,0.086275)(0.0921,0.090196)(0.0962,0.098039)(0.1004,0.10196)(0.1046,0.10588)(0.1088,0.1098)(0.113,0.11373)(0.1172,0.11765)(0.1213,0.12157)(0.1255,0.12549)(0.1297,0.12941)(0.1339,0.13333)(0.1381,0.13725)(0.1423,0.14118)(0.1464,0.1451)(0.1506,0.14902)(0.1548,0.15294)(0.159,0.16078)(0.1632,0.16471)(0.1674,0.16863)(0.1715,0.17255)(0.1757,0.17647)(0.1799,0.18039)(0.1841,0.18431)(0.1883,0.18824)(0.1925,0.19216)(0.1967,0.19608)(0.2008,0.2)(0.205,0.20392)(0.2092,0.20784)(0.2134,0.21176)(0.2176,0.21569)(0.2218,0.22353)(0.2259,0.22745)(0.2301,0.23137)(0.2343,0.23529)(0.2385,0.23922)(0.2427,0.24314)(0.2469,0.24706)(0.251,0.25098)(0.2552,0.2549)(0.2594,0.25882)(0.2636,0.26275)(0.2678,0.26667)(0.272,0.27059)(0.2762,0.27451)(0.2803,0.27843)(0.2845,0.28627)(0.2887,0.2902)(0.2929,0.29412)(0.2971,0.29804)(0.3013,0.30196)(0.3054,0.30588)(0.3096,0.3098)(0.3138,0.31373)(0.318,0.31765)(0.3222,0.32157)(0.3264,0.32549)(0.3305,0.32941)(0.3347,0.33333)(0.3389,0.33725)(0.3431,0.34118)(0.3473,0.34902)(0.3515,0.35294)(0.3556,0.35686)(0.3598,0.36078)(0.364,0.36471)(0.3682,0.36863)(0.3724,0.37255)(0.3766,0.37647)(0.3808,0.38039)(0.3849,0.38431)(0.3891,0.38824)(0.3933,0.39216)(0.3975,0.39608)(0.4017,0.4)(0.4059,0.40392)(0.41,0.41176)(0.4142,0.41569)(0.4184,0.41961)(0.4226,0.42353)(0.4268,0.42745)(0.431,0.43137)(0.4351,0.43529)(0.4393,0.43922)(0.4435,0.44314)(0.4477,0.44706)(0.4519,0.45098)(0.4561,0.4549)(0.4603,0.45882)(0.4644,0.46275)(0.4686,0.46667)(0.4728,0.47451)(0.477,0.47843)(0.4812,0.48235)(0.4854,0.48627)(0.4895,0.4902)(0.4937,0.49412)(0.4979,0.49804)(0.5021,0.50196)(0.5063,0.50588)(0.5105,0.5098)(0.5146,0.51373)(0.5188,0.51765)(0.523,0.52157)(0.5272,0.52549)(0.5314,0.52941)(0.5356,0.53725)(0.5397,0.54118)(0.5439,0.5451)(0.5481,0.54902)(0.5523,0.55294)(0.5565,0.55686)(0.5607,0.56078)(0.5649,0.56471)(0.569,0.56863)(0.5732,0.57255)(0.5774,0.57647)(0.5816,0.58039)(0.5858,0.58431)(0.59,0.58824)(0.5941,0.59216)(0.5983,0.6)(0.6025,0.60392)(0.6067,0.60784)(0.6109,0.61176)(0.6151,0.61569)(0.6192,0.61961)(0.6234,0.62353)(0.6276,0.62745)(0.6318,0.63137)(0.636,0.63529)(0.6402,0.63922)(0.6444,0.64314)(0.6485,0.64706)(0.6527,0.65098)(0.6569,0.6549)(0.6611,0.66275)(0.6653,0.66667)(0.6695,0.67059)(0.6736,0.67451)(0.6778,0.67843)(0.682,0.68235)(0.6862,0.68627)(0.6904,0.6902)(0.6946,0.69412)(0.6987,0.69804)(0.7029,0.70196)(0.7071,0.70588)(0.7113,0.7098)(0.7155,0.71373)(0.7197,0.71765)(0.7238,0.72549)(0.728,0.72941)(0.7322,0.73333)(0.7364,0.73725)(0.7406,0.74118)(0.7448,0.7451)(0.749,0.74902)(0.7531,0.75294)(0.7573,0.75686)(0.7615,0.76078)(0.7657,0.76471)(0.7699,0.76863)(0.7741,0.77255)(0.7782,0.77647)(0.7824,0.78039)(0.7866,0.78824)(0.7908,0.79216)(0.795,0.79608)(0.7992,0.8)(0.8033,0.80392)(0.8075,0.80784)(0.8117,0.81176)(0.8159,0.81569)(0.8201,0.81961)(0.8243,0.82353)(0.8285,0.82745)(0.8326,0.83137)(0.8368,0.83529)(0.841,0.83922)(0.8452,0.84314)(0.8494,0.85098)(0.8536,0.8549)(0.8577,0.85882)(0.8619,0.86275)(0.8661,0.86667)(0.8703,0.87059)(0.8745,0.87451)(0.8787,0.87843)(0.8828,0.88235)(0.887,0.88627)(0.8912,0.8902)(0.8954,0.89412)(0.8996,0.89804)(0.9038,0.90196)(0.9079,0.90588)(0.9121,0.91373)(0.9163,0.91765)(0.9205,0.92157)(0.9247,0.92549)(0.9289,0.92941)(0.9331,0.93333)(0.9372,0.93725)(0.9414,0.94118)(0.9456,0.9451)(0.9498,0.94902)(0.954,0.95294)(0.9582,0.95686)(0.9623,0.96078)(0.9665,0.96471)(0.9707,0.96863)(0.9749,0.97647)(0.9791,0.98039)(0.9833,0.98431)(0.9874,0.98824)(0.9916,0.99216)(0.9958,0.99608)(1,1) GREEN: (0,0)(0.0042,0.0039216)(0.0084,0.0078431)(0.0126,0.011765)(0.0167,0.015686)(0.0209,0.019608)(0.0251,0.023529)(0.0293,0.027451)(0.0335,0.035294)(0.0377,0.039216)(0.0418,0.043137)(0.046,0.047059)(0.0502,0.05098)(0.0544,0.054902)(0.0586,0.058824)(0.0628,0.062745)(0.0669,0.066667)(0.0711,0.070588)(0.0753,0.07451)(0.0795,0.078431)(0.0837,0.082353)(0.0879,0.086275)(0.0921,0.090196)(0.0962,0.098039)(0.1004,0.10196)(0.1046,0.10588)(0.1088,0.1098)(0.113,0.11373)(0.1172,0.11765)(0.1213,0.12157)(0.1255,0.12549)(0.1297,0.12941)(0.1339,0.13333)(0.1381,0.13725)(0.1423,0.14118)(0.1464,0.1451)(0.1506,0.14902)(0.1548,0.15294)(0.159,0.16078)(0.1632,0.16471)(0.1674,0.16863)(0.1715,0.17255)(0.1757,0.17647)(0.1799,0.18039)(0.1841,0.18431)(0.1883,0.18824)(0.1925,0.19216)(0.1967,0.19608)(0.2008,0.2)(0.205,0.20392)(0.2092,0.20784)(0.2134,0.21176)(0.2176,0.21569)(0.2218,0.22353)(0.2259,0.22745)(0.2301,0.23137)(0.2343,0.23529)(0.2385,0.23922)(0.2427,0.24314)(0.2469,0.24706)(0.251,0.25098)(0.2552,0.2549)(0.2594,0.25882)(0.2636,0.26275)(0.2678,0.26667)(0.272,0.27059)(0.2762,0.27451)(0.2803,0.27843)(0.2845,0.28627)(0.2887,0.2902)(0.2929,0.29412)(0.2971,0.29804)(0.3013,0.30196)(0.3054,0.30588)(0.3096,0.3098)(0.3138,0.31373)(0.318,0.31765)(0.3222,0.32157)(0.3264,0.32549)(0.3305,0.32941)(0.3347,0.33333)(0.3389,0.33725)(0.3431,0.34118)(0.3473,0.34902)(0.3515,0.35294)(0.3556,0.35686)(0.3598,0.36078)(0.364,0.36471)(0.3682,0.36863)(0.3724,0.37255)(0.3766,0.37647)(0.3808,0.38039)(0.3849,0.38431)(0.3891,0.38824)(0.3933,0.39216)(0.3975,0.39608)(0.4017,0.4)(0.4059,0.40392)(0.41,0.41176)(0.4142,0.41569)(0.4184,0.41961)(0.4226,0.42353)(0.4268,0.42745)(0.431,0.43137)(0.4351,0.43529)(0.4393,0.43922)(0.4435,0.44314)(0.4477,0.44706)(0.4519,0.45098)(0.4561,0.4549)(0.4603,0.45882)(0.4644,0.46275)(0.4686,0.46667)(0.4728,0.47451)(0.477,0.47843)(0.4812,0.48235)(0.4854,0.48627)(0.4895,0.4902)(0.4937,0.49412)(0.4979,0.49804)(0.5021,0.50196)(0.5063,0.50588)(0.5105,0.5098)(0.5146,0.51373)(0.5188,0.51765)(0.523,0.52157)(0.5272,0.52549)(0.5314,0.52941)(0.5356,0.53725)(0.5397,0.54118)(0.5439,0.5451)(0.5481,0.54902)(0.5523,0.55294)(0.5565,0.55686)(0.5607,0.56078)(0.5649,0.56471)(0.569,0.56863)(0.5732,0.57255)(0.5774,0.57647)(0.5816,0.58039)(0.5858,0.58431)(0.59,0.58824)(0.5941,0.59216)(0.5983,0.6)(0.6025,0.60392)(0.6067,0.60784)(0.6109,0.61176)(0.6151,0.61569)(0.6192,0.61961)(0.6234,0.62353)(0.6276,0.62745)(0.6318,0.63137)(0.636,0.63529)(0.6402,0.63922)(0.6444,0.64314)(0.6485,0.64706)(0.6527,0.65098)(0.6569,0.6549)(0.6611,0.66275)(0.6653,0.66667)(0.6695,0.67059)(0.6736,0.67451)(0.6778,0.67843)(0.682,0.68235)(0.6862,0.68627)(0.6904,0.6902)(0.6946,0.69412)(0.6987,0.69804)(0.7029,0.70196)(0.7071,0.70588)(0.7113,0.7098)(0.7155,0.71373)(0.7197,0.71765)(0.7238,0.72549)(0.728,0.72941)(0.7322,0.73333)(0.7364,0.73725)(0.7406,0.74118)(0.7448,0.7451)(0.749,0.74902)(0.7531,0.75294)(0.7573,0.75686)(0.7615,0.76078)(0.7657,0.76471)(0.7699,0.76863)(0.7741,0.77255)(0.7782,0.77647)(0.7824,0.78039)(0.7866,0.78824)(0.7908,0.79216)(0.795,0.79608)(0.7992,0.8)(0.8033,0.80392)(0.8075,0.80784)(0.8117,0.81176)(0.8159,0.81569)(0.8201,0.81961)(0.8243,0.82353)(0.8285,0.82745)(0.8326,0.83137)(0.8368,0.83529)(0.841,0.83922)(0.8452,0.84314)(0.8494,0.85098)(0.8536,0.8549)(0.8577,0.85882)(0.8619,0.86275)(0.8661,0.86667)(0.8703,0.87059)(0.8745,0.87451)(0.8787,0.87843)(0.8828,0.88235)(0.887,0.88627)(0.8912,0.8902)(0.8954,0.89412)(0.8996,0.89804)(0.9038,0.90196)(0.9079,0.90588)(0.9121,0.91373)(0.9163,0.91765)(0.9205,0.92157)(0.9247,0.92549)(0.9289,0.92941)(0.9331,0.93333)(0.9372,0.93725)(0.9414,0.94118)(0.9456,0.9451)(0.9498,0.94902)(0.954,0.95294)(0.9582,0.95686)(0.9623,0.96078)(0.9665,0.96471)(0.9707,0.96863)(0.9749,0.97647)(0.9791,0.98039)(0.9833,0.98431)(0.9874,0.98824)(0.9916,0.99216)(0.9958,0.99608)(1,1) BLUE: (0,0)(0.0042,0.0039216)(0.0084,0.0078431)(0.0126,0.011765)(0.0167,0.015686)(0.0209,0.019608)(0.0251,0.023529)(0.0293,0.027451)(0.0335,0.035294)(0.0377,0.039216)(0.0418,0.043137)(0.046,0.047059)(0.0502,0.05098)(0.0544,0.054902)(0.0586,0.058824)(0.0628,0.062745)(0.0669,0.066667)(0.0711,0.070588)(0.0753,0.07451)(0.0795,0.078431)(0.0837,0.082353)(0.0879,0.086275)(0.0921,0.090196)(0.0962,0.098039)(0.1004,0.10196)(0.1046,0.10588)(0.1088,0.1098)(0.113,0.11373)(0.1172,0.11765)(0.1213,0.12157)(0.1255,0.12549)(0.1297,0.12941)(0.1339,0.13333)(0.1381,0.13725)(0.1423,0.14118)(0.1464,0.1451)(0.1506,0.14902)(0.1548,0.15294)(0.159,0.16078)(0.1632,0.16471)(0.1674,0.16863)(0.1715,0.17255)(0.1757,0.17647)(0.1799,0.18039)(0.1841,0.18431)(0.1883,0.18824)(0.1925,0.19216)(0.1967,0.19608)(0.2008,0.2)(0.205,0.20392)(0.2092,0.20784)(0.2134,0.21176)(0.2176,0.21569)(0.2218,0.22353)(0.2259,0.22745)(0.2301,0.23137)(0.2343,0.23529)(0.2385,0.23922)(0.2427,0.24314)(0.2469,0.24706)(0.251,0.25098)(0.2552,0.2549)(0.2594,0.25882)(0.2636,0.26275)(0.2678,0.26667)(0.272,0.27059)(0.2762,0.27451)(0.2803,0.27843)(0.2845,0.28627)(0.2887,0.2902)(0.2929,0.29412)(0.2971,0.29804)(0.3013,0.30196)(0.3054,0.30588)(0.3096,0.3098)(0.3138,0.31373)(0.318,0.31765)(0.3222,0.32157)(0.3264,0.32549)(0.3305,0.32941)(0.3347,0.33333)(0.3389,0.33725)(0.3431,0.34118)(0.3473,0.34902)(0.3515,0.35294)(0.3556,0.35686)(0.3598,0.36078)(0.364,0.36471)(0.3682,0.36863)(0.3724,0.37255)(0.3766,0.37647)(0.3808,0.38039)(0.3849,0.38431)(0.3891,0.38824)(0.3933,0.39216)(0.3975,0.39608)(0.4017,0.4)(0.4059,0.40392)(0.41,0.41176)(0.4142,0.41569)(0.4184,0.41961)(0.4226,0.42353)(0.4268,0.42745)(0.431,0.43137)(0.4351,0.43529)(0.4393,0.43922)(0.4435,0.44314)(0.4477,0.44706)(0.4519,0.45098)(0.4561,0.4549)(0.4603,0.45882)(0.4644,0.46275)(0.4686,0.46667)(0.4728,0.47451)(0.477,0.47843)(0.4812,0.48235)(0.4854,0.48627)(0.4895,0.4902)(0.4937,0.49412)(0.4979,0.49804)(0.5021,0.50196)(0.5063,0.50588)(0.5105,0.5098)(0.5146,0.51373)(0.5188,0.51765)(0.523,0.52157)(0.5272,0.52549)(0.5314,0.52941)(0.5356,0.53725)(0.5397,0.54118)(0.5439,0.5451)(0.5481,0.54902)(0.5523,0.55294)(0.5565,0.55686)(0.5607,0.56078)(0.5649,0.56471)(0.569,0.56863)(0.5732,0.57255)(0.5774,0.57647)(0.5816,0.58039)(0.5858,0.58431)(0.59,0.58824)(0.5941,0.59216)(0.5983,0.6)(0.6025,0.60392)(0.6067,0.60784)(0.6109,0.61176)(0.6151,0.61569)(0.6192,0.61961)(0.6234,0.62353)(0.6276,0.62745)(0.6318,0.63137)(0.636,0.63529)(0.6402,0.63922)(0.6444,0.64314)(0.6485,0.64706)(0.6527,0.65098)(0.6569,0.6549)(0.6611,0.66275)(0.6653,0.66667)(0.6695,0.67059)(0.6736,0.67451)(0.6778,0.67843)(0.682,0.68235)(0.6862,0.68627)(0.6904,0.6902)(0.6946,0.69412)(0.6987,0.69804)(0.7029,0.70196)(0.7071,0.70588)(0.7113,0.7098)(0.7155,0.71373)(0.7197,0.71765)(0.7238,0.72549)(0.728,0.72941)(0.7322,0.73333)(0.7364,0.73725)(0.7406,0.74118)(0.7448,0.7451)(0.749,0.74902)(0.7531,0.75294)(0.7573,0.75686)(0.7615,0.76078)(0.7657,0.76471)(0.7699,0.76863)(0.7741,0.77255)(0.7782,0.77647)(0.7824,0.78039)(0.7866,0.78824)(0.7908,0.79216)(0.795,0.79608)(0.7992,0.8)(0.8033,0.80392)(0.8075,0.80784)(0.8117,0.81176)(0.8159,0.81569)(0.8201,0.81961)(0.8243,0.82353)(0.8285,0.82745)(0.8326,0.83137)(0.8368,0.83529)(0.841,0.83922)(0.8452,0.84314)(0.8494,0.85098)(0.8536,0.8549)(0.8577,0.85882)(0.8619,0.86275)(0.8661,0.86667)(0.8703,0.87059)(0.8745,0.87451)(0.8787,0.87843)(0.8828,0.88235)(0.887,0.88627)(0.8912,0.8902)(0.8954,0.89412)(0.8996,0.89804)(0.9038,0.90196)(0.9079,0.90588)(0.9121,0.91373)(0.9163,0.91765)(0.9205,0.92157)(0.9247,0.92549)(0.9289,0.92941)(0.9331,0.93333)(0.9372,0.93725)(0.9414,0.94118)(0.9456,0.9451)(0.9498,0.94902)(0.954,0.95294)(0.9582,0.95686)(0.9623,0.96078)(0.9665,0.96471)(0.9707,0.96863)(0.9749,0.97647)(0.9791,0.98039)(0.9833,0.98431)(0.9874,0.98824)(0.9916,0.99216)(0.9958,0.99608)(1,1) saods9/ds9/cmaps/gist_heat.sao000644 000765 000000 00000022105 12567377777 016675 0ustar00joyewheel000000 000000 # SAOimage color table # heat # created by cptutils 1.46 # Wed Aug 15 23:30:59 2012 PSEUDOCOLOR RED: (0,0)(0.0042,0.0039216)(0.0084,0.0078431)(0.0126,0.015686)(0.0167,0.019608)(0.0209,0.027451)(0.0251,0.031373)(0.0293,0.039216)(0.0335,0.043137)(0.0377,0.05098)(0.0418,0.058824)(0.046,0.066667)(0.0502,0.070588)(0.0544,0.078431)(0.0586,0.082353)(0.0628,0.090196)(0.0669,0.094118)(0.0711,0.10196)(0.0753,0.10588)(0.0795,0.1098)(0.0837,0.11765)(0.0879,0.12157)(0.0921,0.12941)(0.0962,0.13333)(0.1004,0.14118)(0.1046,0.1451)(0.1088,0.15294)(0.113,0.15686)(0.1172,0.16471)(0.1213,0.16863)(0.1255,0.18039)(0.1297,0.18431)(0.1339,0.19216)(0.1381,0.19608)(0.1423,0.20392)(0.1464,0.20784)(0.1506,0.21569)(0.1548,0.21961)(0.159,0.22353)(0.1632,0.23137)(0.1674,0.23529)(0.1715,0.24314)(0.1757,0.24706)(0.1799,0.2549)(0.1841,0.25882)(0.1883,0.26667)(0.1925,0.27059)(0.1967,0.27451)(0.2008,0.28235)(0.205,0.28627)(0.2092,0.29804)(0.2134,0.30588)(0.2176,0.3098)(0.2218,0.31765)(0.2259,0.32157)(0.2301,0.32941)(0.2343,0.33333)(0.2385,0.33725)(0.2427,0.3451)(0.2469,0.34902)(0.251,0.36078)(0.2552,0.36863)(0.2594,0.37255)(0.2636,0.38039)(0.2678,0.38431)(0.272,0.38824)(0.2762,0.39608)(0.2803,0.4)(0.2845,0.40784)(0.2887,0.41176)(0.2929,0.42353)(0.2971,0.43137)(0.3013,0.43529)(0.3054,0.44314)(0.3096,0.44706)(0.3138,0.45098)(0.318,0.45882)(0.3222,0.46275)(0.3264,0.47059)(0.3305,0.47451)(0.3347,0.48235)(0.3389,0.48627)(0.3431,0.49412)(0.3473,0.49804)(0.3515,0.50196)(0.3556,0.5098)(0.3598,0.51373)(0.364,0.52157)(0.3682,0.52549)(0.3724,0.53333)(0.3766,0.5451)(0.3808,0.54902)(0.3849,0.55294)(0.3891,0.56078)(0.3933,0.56471)(0.3975,0.57255)(0.4017,0.57647)(0.4059,0.58431)(0.41,0.58824)(0.4142,0.59608)(0.4184,0.6)(0.4226,0.60784)(0.4268,0.61176)(0.431,0.61569)(0.4351,0.62353)(0.4393,0.62745)(0.4435,0.63529)(0.4477,0.63922)(0.4519,0.64706)(0.4561,0.65098)(0.4603,0.66275)(0.4644,0.66667)(0.4686,0.67451)(0.4728,0.67843)(0.477,0.68627)(0.4812,0.6902)(0.4854,0.69804)(0.4895,0.70196)(0.4937,0.7098)(0.4979,0.71373)(0.5021,0.72549)(0.5063,0.72941)(0.5105,0.73725)(0.5146,0.74118)(0.5188,0.74902)(0.523,0.75294)(0.5272,0.76078)(0.5314,0.76471)(0.5356,0.77255)(0.5397,0.77647)(0.5439,0.78824)(0.5481,0.79216)(0.5523,0.8)(0.5565,0.80392)(0.5607,0.81176)(0.5649,0.81569)(0.569,0.82353)(0.5732,0.82745)(0.5774,0.83137)(0.5816,0.83922)(0.5858,0.84314)(0.59,0.85098)(0.5941,0.8549)(0.5983,0.86275)(0.6025,0.86667)(0.6067,0.87451)(0.6109,0.87843)(0.6151,0.88627)(0.6192,0.8902)(0.6234,0.89412)(0.6276,0.90588)(0.6318,0.91373)(0.636,0.91765)(0.6402,0.92549)(0.6444,0.92941)(0.6485,0.93725)(0.6527,0.94118)(0.6569,0.9451)(0.6611,0.95294)(0.6653,0.95686)(0.6695,0.96471)(0.6736,0.96863)(0.6778,0.97647)(0.682,0.98039)(0.6862,0.98824)(0.6904,0.99216)(0.6946,1)(0.6987,1)(0.7029,1)(0.7071,1)(0.7113,1)(0.7155,1)(0.7197,1)(0.7238,1)(0.728,1)(0.7322,1)(0.7364,1)(0.7406,1)(0.7448,1)(0.749,1)(0.7531,1)(0.7573,1)(0.7615,1)(0.7657,1)(0.7699,1)(0.7741,1)(0.7782,1)(0.7824,1)(0.7866,1)(0.7908,1)(0.795,1)(0.7992,1)(0.8033,1)(0.8075,1)(0.8117,1)(0.8159,1)(0.8201,1)(0.8243,1)(0.8285,1)(0.8326,1)(0.8368,1)(0.841,1)(0.8452,1)(0.8494,1)(0.8536,1)(0.8577,1)(0.8619,1)(0.8661,1)(0.8703,1)(0.8745,1)(0.8787,1)(0.8828,1)(0.887,1)(0.8912,1)(0.8954,1)(0.8996,1)(0.9038,1)(0.9079,1)(0.9121,1)(0.9163,1)(0.9205,1)(0.9247,1)(0.9289,1)(0.9331,1)(0.9372,1)(0.9414,1)(0.9456,1)(0.9498,1)(0.954,1)(0.9582,1)(0.9623,1)(0.9665,1)(0.9707,1)(0.9749,1)(0.9791,1)(0.9833,1)(0.9874,1)(0.9916,1)(0.9958,1)(1,1) GREEN: (0,0)(0.0042,0)(0.0084,0)(0.0126,0)(0.0167,0)(0.0209,0)(0.0251,0)(0.0293,0)(0.0335,0)(0.0377,0)(0.0418,0)(0.046,0)(0.0502,0)(0.0544,0)(0.0586,0)(0.0628,0)(0.0669,0)(0.0711,0)(0.0753,0)(0.0795,0)(0.0837,0)(0.0879,0)(0.0921,0)(0.0962,0)(0.1004,0)(0.1046,0)(0.1088,0)(0.113,0)(0.1172,0)(0.1213,0)(0.1255,0)(0.1297,0)(0.1339,0)(0.1381,0)(0.1423,0)(0.1464,0)(0.1506,0)(0.1548,0)(0.159,0)(0.1632,0)(0.1674,0)(0.1715,0)(0.1757,0)(0.1799,0)(0.1841,0)(0.1883,0)(0.1925,0)(0.1967,0)(0.2008,0)(0.205,0)(0.2092,0)(0.2134,0)(0.2176,0)(0.2218,0)(0.2259,0)(0.2301,0)(0.2343,0)(0.2385,0)(0.2427,0)(0.2469,0)(0.251,0)(0.2552,0)(0.2594,0)(0.2636,0)(0.2678,0)(0.272,0)(0.2762,0)(0.2803,0)(0.2845,0)(0.2887,0)(0.2929,0)(0.2971,0)(0.3013,0)(0.3054,0)(0.3096,0)(0.3138,0)(0.318,0)(0.3222,0)(0.3264,0)(0.3305,0)(0.3347,0)(0.3389,0)(0.3431,0)(0.3473,0)(0.3515,0)(0.3556,0)(0.3598,0)(0.364,0)(0.3682,0)(0.3724,0)(0.3766,0)(0.3808,0)(0.3849,0)(0.3891,0)(0.3933,0)(0.3975,0)(0.4017,0)(0.4059,0)(0.41,0)(0.4142,0)(0.4184,0)(0.4226,0)(0.4268,0)(0.431,0)(0.4351,0)(0.4393,0)(0.4435,0)(0.4477,0)(0.4519,0)(0.4561,0)(0.4603,0)(0.4644,0)(0.4686,0)(0.4728,0)(0.477,0.0039216)(0.4812,0.011765)(0.4854,0.019608)(0.4895,0.027451)(0.4937,0.035294)(0.4979,0.043137)(0.5021,0.058824)(0.5063,0.066667)(0.5105,0.070588)(0.5146,0.078431)(0.5188,0.086275)(0.523,0.094118)(0.5272,0.10196)(0.5314,0.1098)(0.5356,0.11765)(0.5397,0.12549)(0.5439,0.13725)(0.5481,0.1451)(0.5523,0.15294)(0.5565,0.16078)(0.5607,0.16863)(0.5649,0.17647)(0.569,0.18431)(0.5732,0.19216)(0.5774,0.2)(0.5816,0.20392)(0.5858,0.21176)(0.59,0.21961)(0.5941,0.22745)(0.5983,0.23529)(0.6025,0.24314)(0.6067,0.25098)(0.6109,0.25882)(0.6151,0.26667)(0.6192,0.27059)(0.6234,0.27843)(0.6276,0.29412)(0.6318,0.30196)(0.636,0.3098)(0.6402,0.31765)(0.6444,0.32549)(0.6485,0.33333)(0.6527,0.33725)(0.6569,0.3451)(0.6611,0.35294)(0.6653,0.36078)(0.6695,0.36863)(0.6736,0.37647)(0.6778,0.38431)(0.682,0.39216)(0.6862,0.4)(0.6904,0.40392)(0.6946,0.41176)(0.6987,0.41961)(0.7029,0.42745)(0.7071,0.43529)(0.7113,0.45098)(0.7155,0.45882)(0.7197,0.46667)(0.7238,0.47059)(0.728,0.47843)(0.7322,0.48627)(0.7364,0.49412)(0.7406,0.50196)(0.7448,0.5098)(0.749,0.51765)(0.7531,0.53333)(0.7573,0.53725)(0.7615,0.5451)(0.7657,0.55294)(0.7699,0.56078)(0.7741,0.56863)(0.7782,0.57647)(0.7824,0.58431)(0.7866,0.59216)(0.7908,0.6)(0.795,0.61176)(0.7992,0.61961)(0.8033,0.62745)(0.8075,0.63529)(0.8117,0.64314)(0.8159,0.65098)(0.8201,0.65882)(0.8243,0.66667)(0.8285,0.67059)(0.8326,0.67843)(0.8368,0.68627)(0.841,0.69412)(0.8452,0.70196)(0.8494,0.7098)(0.8536,0.71765)(0.8577,0.72549)(0.8619,0.73333)(0.8661,0.73725)(0.8703,0.7451)(0.8745,0.75294)(0.8787,0.76863)(0.8828,0.77647)(0.887,0.78431)(0.8912,0.79216)(0.8954,0.8)(0.8996,0.80392)(0.9038,0.81176)(0.9079,0.81961)(0.9121,0.82745)(0.9163,0.83529)(0.9205,0.84314)(0.9247,0.85098)(0.9289,0.85882)(0.9331,0.86667)(0.9372,0.87059)(0.9414,0.87843)(0.9456,0.88627)(0.9498,0.89412)(0.954,0.90196)(0.9582,0.9098)(0.9623,0.92549)(0.9665,0.93333)(0.9707,0.93725)(0.9749,0.9451)(0.9791,0.95294)(0.9833,0.96078)(0.9874,0.96863)(0.9916,0.97647)(0.9958,0.98431)(1,0.99216) BLUE: (0,0)(0.0042,0)(0.0084,0)(0.0126,0)(0.0167,0)(0.0209,0)(0.0251,0)(0.0293,0)(0.0335,0)(0.0377,0)(0.0418,0)(0.046,0)(0.0502,0)(0.0544,0)(0.0586,0)(0.0628,0)(0.0669,0)(0.0711,0)(0.0753,0)(0.0795,0)(0.0837,0)(0.0879,0)(0.0921,0)(0.0962,0)(0.1004,0)(0.1046,0)(0.1088,0)(0.113,0)(0.1172,0)(0.1213,0)(0.1255,0)(0.1297,0)(0.1339,0)(0.1381,0)(0.1423,0)(0.1464,0)(0.1506,0)(0.1548,0)(0.159,0)(0.1632,0)(0.1674,0)(0.1715,0)(0.1757,0)(0.1799,0)(0.1841,0)(0.1883,0)(0.1925,0)(0.1967,0)(0.2008,0)(0.205,0)(0.2092,0)(0.2134,0)(0.2176,0)(0.2218,0)(0.2259,0)(0.2301,0)(0.2343,0)(0.2385,0)(0.2427,0)(0.2469,0)(0.251,0)(0.2552,0)(0.2594,0)(0.2636,0)(0.2678,0)(0.272,0)(0.2762,0)(0.2803,0)(0.2845,0)(0.2887,0)(0.2929,0)(0.2971,0)(0.3013,0)(0.3054,0)(0.3096,0)(0.3138,0)(0.318,0)(0.3222,0)(0.3264,0)(0.3305,0)(0.3347,0)(0.3389,0)(0.3431,0)(0.3473,0)(0.3515,0)(0.3556,0)(0.3598,0)(0.364,0)(0.3682,0)(0.3724,0)(0.3766,0)(0.3808,0)(0.3849,0)(0.3891,0)(0.3933,0)(0.3975,0)(0.4017,0)(0.4059,0)(0.41,0)(0.4142,0)(0.4184,0)(0.4226,0)(0.4268,0)(0.431,0)(0.4351,0)(0.4393,0)(0.4435,0)(0.4477,0)(0.4519,0)(0.4561,0)(0.4603,0)(0.4644,0)(0.4686,0)(0.4728,0)(0.477,0)(0.4812,0)(0.4854,0)(0.4895,0)(0.4937,0)(0.4979,0)(0.5021,0)(0.5063,0)(0.5105,0)(0.5146,0)(0.5188,0)(0.523,0)(0.5272,0)(0.5314,0)(0.5356,0)(0.5397,0)(0.5439,0)(0.5481,0)(0.5523,0)(0.5565,0)(0.5607,0)(0.5649,0)(0.569,0)(0.5732,0)(0.5774,0)(0.5816,0)(0.5858,0)(0.59,0)(0.5941,0)(0.5983,0)(0.6025,0)(0.6067,0)(0.6109,0)(0.6151,0)(0.6192,0)(0.6234,0)(0.6276,0)(0.6318,0)(0.636,0)(0.6402,0)(0.6444,0)(0.6485,0)(0.6527,0)(0.6569,0)(0.6611,0)(0.6653,0)(0.6695,0)(0.6736,0)(0.6778,0)(0.682,0)(0.6862,0)(0.6904,0)(0.6946,0)(0.6987,0)(0.7029,0)(0.7071,0)(0.7113,0)(0.7155,0)(0.7197,0)(0.7238,0)(0.728,0)(0.7322,0)(0.7364,0)(0.7406,0)(0.7448,0)(0.749,0)(0.7531,0.027451)(0.7573,0.043137)(0.7615,0.058824)(0.7657,0.07451)(0.7699,0.090196)(0.7741,0.10588)(0.7782,0.12157)(0.7824,0.13725)(0.7866,0.15294)(0.7908,0.16863)(0.795,0.2)(0.7992,0.21176)(0.8033,0.22745)(0.8075,0.24314)(0.8117,0.25882)(0.8159,0.27451)(0.8201,0.2902)(0.8243,0.30588)(0.8285,0.32157)(0.8326,0.33725)(0.8368,0.35294)(0.841,0.36863)(0.8452,0.38431)(0.8494,0.4)(0.8536,0.41176)(0.8577,0.42745)(0.8619,0.44314)(0.8661,0.45882)(0.8703,0.47451)(0.8745,0.4902)(0.8787,0.52157)(0.8828,0.53725)(0.887,0.55294)(0.8912,0.56863)(0.8954,0.58431)(0.8996,0.6)(0.9038,0.61176)(0.9079,0.62745)(0.9121,0.64314)(0.9163,0.65882)(0.9205,0.67451)(0.9247,0.6902)(0.9289,0.70588)(0.9331,0.72157)(0.9372,0.73725)(0.9414,0.75294)(0.9456,0.76863)(0.9498,0.78431)(0.954,0.8)(0.9582,0.81176)(0.9623,0.84314)(0.9665,0.85882)(0.9707,0.87451)(0.9749,0.8902)(0.9791,0.90588)(0.9833,0.92157)(0.9874,0.93725)(0.9916,0.95294)(0.9958,0.96863)(1,0.98431) saods9/ds9/cmaps/gist_ncar.sao000644 000765 000000 00000020122 12567377777 016674 0ustar00joyewheel000000 000000 # SAOimage color table # ncar # created by cptutils 1.46 # Wed Aug 15 23:30:59 2012 PSEUDOCOLOR RED: (0,0)(0.005,0)(0.0101,0)(0.0151,0)(0.0201,0)(0.0251,0)(0.0302,0)(0.0352,0)(0.0402,0)(0.0452,0)(0.0503,0)(0.0553,0)(0.0603,0)(0.0653,0)(0.0704,0)(0.0754,0)(0.0804,0)(0.0854,0)(0.0905,0)(0.0955,0)(0.1005,0)(0.1055,0)(0.1106,0)(0.1156,0)(0.1206,0)(0.1256,0)(0.1307,0)(0.1357,0)(0.1407,0)(0.1457,0)(0.1508,0)(0.1558,0)(0.1608,0)(0.1658,0)(0.1709,0)(0.1759,0)(0.1809,0)(0.1859,0)(0.191,0)(0.196,0)(0.201,0)(0.206,0)(0.2111,0)(0.2161,0)(0.2211,0)(0.2261,0)(0.2312,0)(0.2362,0)(0.2412,0)(0.2462,0)(0.2513,0)(0.2563,0)(0.2613,0)(0.2663,0)(0.2714,0)(0.2764,0)(0.2814,0)(0.2864,0)(0.2915,0)(0.2965,0)(0.3015,0)(0.3065,0)(0.3116,0)(0.3166,0.0039216)(0.3216,0.043137)(0.3266,0.082353)(0.3317,0.11765)(0.3367,0.15686)(0.3417,0.19608)(0.3467,0.23137)(0.3518,0.27059)(0.3568,0.3098)(0.3618,0.34902)(0.3668,0.38431)(0.3719,0.40392)(0.3769,0.41569)(0.3819,0.42353)(0.3869,0.43137)(0.392,0.44314)(0.397,0.45098)(0.402,0.45882)(0.407,0.47059)(0.4121,0.47843)(0.4171,0.4902)(0.4221,0.50196)(0.4271,0.52549)(0.4322,0.54902)(0.4372,0.57255)(0.4422,0.6)(0.4472,0.62353)(0.4523,0.64706)(0.4573,0.67059)(0.4623,0.69412)(0.4673,0.72157)(0.4724,0.7451)(0.4774,0.76863)(0.4824,0.79216)(0.4874,0.81569)(0.4925,0.83922)(0.4975,0.86275)(0.5025,0.88627)(0.5075,0.9098)(0.5126,0.93333)(0.5176,0.95686)(0.5226,0.98039)(0.5276,1)(0.5327,1)(0.5377,1)(0.5427,1)(0.5477,1)(0.5528,1)(0.5578,1)(0.5628,1)(0.5678,1)(0.5729,1)(0.5779,1)(0.5829,1)(0.5879,1)(0.593,1)(0.598,1)(0.603,1)(0.608,1)(0.6131,1)(0.6181,1)(0.6231,1)(0.6281,1)(0.6332,1)(0.6382,1)(0.6432,1)(0.6482,1)(0.6533,1)(0.6583,1)(0.6633,1)(0.6683,1)(0.6734,1)(0.6784,1)(0.6834,1)(0.6884,1)(0.6935,1)(0.6985,1)(0.7035,1)(0.7085,1)(0.7136,1)(0.7186,1)(0.7236,1)(0.7286,1)(0.7337,1)(0.7387,1)(0.7437,1)(0.7487,1)(0.7538,1)(0.7588,1)(0.7638,1)(0.7688,1)(0.7739,1)(0.7789,1)(0.7839,1)(0.7889,1)(0.794,0.96471)(0.799,0.92549)(0.804,0.8902)(0.809,0.85098)(0.8141,0.81569)(0.8191,0.77647)(0.8241,0.74118)(0.8291,0.70196)(0.8342,0.66667)(0.8392,0.62745)(0.8442,0.61961)(0.8492,0.65098)(0.8543,0.68235)(0.8593,0.71373)(0.8643,0.7451)(0.8693,0.77255)(0.8744,0.80392)(0.8794,0.83529)(0.8844,0.86667)(0.8894,0.89804)(0.8945,0.92941)(0.8995,0.93333)(0.9045,0.93725)(0.9095,0.93725)(0.9146,0.94118)(0.9196,0.9451)(0.9246,0.9451)(0.9296,0.94902)(0.9347,0.95294)(0.9397,0.95294)(0.9447,0.95686)(0.9497,0.96078)(0.9548,0.96471)(0.9598,0.96863)(0.9648,0.97255)(0.9698,0.97647)(0.9749,0.98039)(0.9799,0.98431)(0.9849,0.98824)(0.9899,0.99216)(0.995,0.99608)(1,1) GREEN: (0,0)(0.005,0.035294)(0.0101,0.07451)(0.0151,0.1098)(0.0201,0.14902)(0.0251,0.18431)(0.0302,0.22353)(0.0352,0.25882)(0.0402,0.29804)(0.0452,0.33333)(0.0503,0.37255)(0.0553,0.36863)(0.0603,0.33333)(0.0653,0.29412)(0.0704,0.25882)(0.0754,0.21961)(0.0804,0.18431)(0.0854,0.1451)(0.0905,0.1098)(0.0955,0.070588)(0.1005,0.035294)(0.1055,0)(0.1106,0.07451)(0.1156,0.1451)(0.1206,0.21569)(0.1256,0.28627)(0.1307,0.36078)(0.1357,0.43137)(0.1407,0.50196)(0.1457,0.57255)(0.1508,0.64706)(0.1558,0.71765)(0.1608,0.76078)(0.1658,0.78431)(0.1709,0.80784)(0.1759,0.83137)(0.1809,0.8549)(0.1859,0.88235)(0.191,0.90588)(0.196,0.92941)(0.201,0.95294)(0.206,0.97647)(0.2111,0.99608)(0.2161,0.99608)(0.2211,0.99216)(0.2261,0.99216)(0.2312,0.99216)(0.2362,0.98824)(0.2412,0.98824)(0.2462,0.98431)(0.2513,0.98431)(0.2563,0.98039)(0.2613,0.98039)(0.2663,0.98039)(0.2714,0.98039)(0.2764,0.98431)(0.2814,0.98431)(0.2864,0.98824)(0.2915,0.98824)(0.2965,0.99216)(0.3015,0.99216)(0.3065,0.99608)(0.3116,0.99608)(0.3166,0.99608)(0.3216,0.97647)(0.3266,0.95686)(0.3317,0.93725)(0.3367,0.92157)(0.3417,0.90196)(0.3467,0.88235)(0.3518,0.86275)(0.3568,0.84706)(0.3618,0.82745)(0.3668,0.80784)(0.3719,0.81569)(0.3769,0.83529)(0.3819,0.85098)(0.3869,0.87059)(0.392,0.8902)(0.397,0.9098)(0.402,0.92549)(0.407,0.9451)(0.4121,0.96471)(0.4171,0.98431)(0.4221,1)(0.4271,1)(0.4322,1)(0.4372,1)(0.4422,1)(0.4472,1)(0.4523,1)(0.4573,1)(0.4623,1)(0.4673,1)(0.4724,1)(0.4774,1)(0.4824,1)(0.4874,1)(0.4925,1)(0.4975,1)(0.5025,1)(0.5075,1)(0.5126,1)(0.5176,1)(0.5226,1)(0.5276,0.99216)(0.5327,0.98039)(0.5377,0.96471)(0.5427,0.94902)(0.5477,0.93333)(0.5528,0.91765)(0.5578,0.90588)(0.5628,0.8902)(0.5678,0.87451)(0.5729,0.85882)(0.5779,0.84314)(0.5829,0.83137)(0.5879,0.81961)(0.593,0.81176)(0.598,0.8)(0.603,0.78824)(0.608,0.77647)(0.6131,0.76471)(0.6181,0.75294)(0.6231,0.74118)(0.6281,0.72941)(0.6332,0.7098)(0.6382,0.66667)(0.6432,0.62353)(0.6482,0.58039)(0.6533,0.53725)(0.6583,0.49412)(0.6633,0.45098)(0.6683,0.40392)(0.6734,0.36078)(0.6784,0.31765)(0.6834,0.27451)(0.6884,0.24706)(0.6935,0.21961)(0.6985,0.19608)(0.7035,0.16863)(0.7085,0.1451)(0.7136,0.11765)(0.7186,0.090196)(0.7236,0.066667)(0.7286,0.039216)(0.7337,0.015686)(0.7387,0)(0.7437,0)(0.7487,0)(0.7538,0)(0.7588,0)(0.7638,0)(0.7688,0)(0.7739,0)(0.7789,0)(0.7839,0)(0.7889,0)(0.794,0.015686)(0.799,0.031373)(0.804,0.05098)(0.809,0.066667)(0.8141,0.086275)(0.8191,0.10588)(0.8241,0.12157)(0.8291,0.14118)(0.8342,0.15686)(0.8392,0.17647)(0.8442,0.2)(0.8492,0.23137)(0.8543,0.25882)(0.8593,0.2902)(0.8643,0.32157)(0.8693,0.35294)(0.8744,0.38431)(0.8794,0.41569)(0.8844,0.44314)(0.8894,0.47451)(0.8945,0.50588)(0.8995,0.52941)(0.9045,0.55294)(0.9095,0.57255)(0.9146,0.59608)(0.9196,0.61961)(0.9246,0.64314)(0.9296,0.66275)(0.9347,0.68627)(0.9397,0.7098)(0.9447,0.72941)(0.9497,0.75294)(0.9548,0.78039)(0.9598,0.80392)(0.9648,0.82745)(0.9698,0.85098)(0.9749,0.87451)(0.9799,0.90196)(0.9849,0.92549)(0.9899,0.94902)(0.995,0.97255)(1,1) BLUE: (0,0.50196)(0.005,0.45098)(0.0101,0.40392)(0.0151,0.35686)(0.0201,0.3098)(0.0251,0.25882)(0.0302,0.21176)(0.0352,0.16471)(0.0402,0.11765)(0.0452,0.070588)(0.0503,0.019608)(0.0553,0.047059)(0.0603,0.1451)(0.0653,0.23922)(0.0704,0.33333)(0.0754,0.43137)(0.0804,0.52549)(0.0854,0.61961)(0.0905,0.71765)(0.0955,0.81176)(0.1005,0.90588)(0.1055,1)(0.1106,1)(0.1156,1)(0.1206,1)(0.1256,1)(0.1307,1)(0.1357,1)(0.1407,1)(0.1457,1)(0.1508,1)(0.1558,1)(0.1608,1)(0.1658,1)(0.1709,1)(0.1759,1)(0.1809,1)(0.1859,1)(0.191,1)(0.196,1)(0.201,1)(0.206,1)(0.2111,0.99216)(0.2161,0.95686)(0.2211,0.91765)(0.2261,0.88235)(0.2312,0.84314)(0.2362,0.80392)(0.2412,0.76863)(0.2462,0.72941)(0.2513,0.6902)(0.2563,0.6549)(0.2613,0.61569)(0.2663,0.56471)(0.2714,0.5098)(0.2764,0.45098)(0.2814,0.39216)(0.2864,0.33333)(0.2915,0.27843)(0.2965,0.21961)(0.3015,0.16078)(0.3065,0.10588)(0.3116,0.047059)(0.3166,0)(0.3216,0)(0.3266,0)(0.3317,0)(0.3367,0)(0.3417,0)(0.3467,0)(0.3518,0)(0.3568,0)(0.3618,0)(0.3668,0)(0.3719,0)(0.3769,0)(0.3819,0)(0.3869,0)(0.392,0)(0.397,0)(0.402,0)(0.407,0)(0.4121,0)(0.4171,0)(0.4221,0.0039216)(0.4271,0.027451)(0.4322,0.05098)(0.4372,0.07451)(0.4422,0.094118)(0.4472,0.11765)(0.4523,0.14118)(0.4573,0.16471)(0.4623,0.18824)(0.4673,0.21176)(0.4724,0.23529)(0.4774,0.22353)(0.4824,0.2)(0.4874,0.17647)(0.4925,0.15294)(0.4975,0.12941)(0.5025,0.1098)(0.5075,0.086275)(0.5126,0.062745)(0.5176,0.039216)(0.5226,0.015686)(0.5276,0)(0.5327,0)(0.5377,0)(0.5427,0)(0.5477,0)(0.5528,0)(0.5578,0)(0.5628,0)(0.5678,0)(0.5729,0)(0.5779,0)(0.5829,0.0039216)(0.5879,0.0078431)(0.593,0.011765)(0.598,0.019608)(0.603,0.023529)(0.608,0.031373)(0.6131,0.035294)(0.6181,0.043137)(0.6231,0.047059)(0.6281,0.054902)(0.6332,0.054902)(0.6382,0.05098)(0.6432,0.043137)(0.6482,0.039216)(0.6533,0.031373)(0.6583,0.027451)(0.6633,0.019608)(0.6683,0.015686)(0.6734,0.011765)(0.6784,0.0039216)(0.6834,0)(0.6884,0)(0.6935,0)(0.6985,0)(0.7035,0)(0.7085,0)(0.7136,0)(0.7186,0)(0.7236,0)(0.7286,0)(0.7337,0)(0.7387,0.031373)(0.7437,0.12941)(0.7487,0.22353)(0.7538,0.32157)(0.7588,0.41569)(0.7638,0.5098)(0.7688,0.60784)(0.7739,0.70196)(0.7789,0.79608)(0.7839,0.89412)(0.7889,0.98824)(0.794,1)(0.799,1)(0.804,1)(0.809,1)(0.8141,1)(0.8191,1)(0.8241,1)(0.8291,1)(0.8342,1)(0.8392,1)(0.8442,0.99608)(0.8492,0.98824)(0.8543,0.98431)(0.8593,0.97647)(0.8643,0.96863)(0.8693,0.96471)(0.8744,0.95686)(0.8794,0.94902)(0.8844,0.9451)(0.8894,0.93725)(0.8945,0.93333)(0.8995,0.93333)(0.9045,0.93725)(0.9095,0.93725)(0.9146,0.94118)(0.9196,0.9451)(0.9246,0.9451)(0.9296,0.94902)(0.9347,0.95294)(0.9397,0.95294)(0.9447,0.95686)(0.9497,0.96078)(0.9548,0.96471)(0.9598,0.96863)(0.9648,0.97255)(0.9698,0.97647)(0.9749,0.98039)(0.9799,0.98431)(0.9849,0.98824)(0.9899,0.99216)(0.995,0.99608)(1,1) saods9/ds9/cmaps/gist_rainbow.sao000644 000765 000000 00000020713 12567377777 017420 0ustar00joyewheel000000 000000 # SAOimage color table # rainbow # created by cptutils 1.46 # Wed Aug 15 23:30:59 2012 PSEUDOCOLOR RED: (0,1)(0.0042,1)(0.0084,1)(0.0126,1)(0.0167,1)(0.0209,1)(0.0251,1)(0.0293,1)(0.0335,1)(0.0377,1)(0.0418,1)(0.046,1)(0.0502,1)(0.0544,1)(0.0586,1)(0.0628,1)(0.0669,1)(0.0711,1)(0.0753,1)(0.0795,1)(0.0837,1)(0.0879,1)(0.0921,1)(0.0962,1)(0.1004,1)(0.1046,1)(0.1088,1)(0.113,1)(0.1172,1)(0.1213,1)(0.1255,1)(0.1297,1)(0.1339,1)(0.1381,1)(0.1423,1)(0.1464,1)(0.1506,1)(0.1548,1)(0.159,1)(0.1632,1)(0.1674,1)(0.1715,1)(0.1757,1)(0.1799,1)(0.1841,1)(0.1883,1)(0.1925,1)(0.1967,1)(0.2008,1)(0.205,1)(0.2092,1)(0.2134,1)(0.2176,1)(0.2218,0.96078)(0.2259,0.94118)(0.2301,0.92157)(0.2343,0.89804)(0.2385,0.87843)(0.2427,0.85882)(0.2469,0.83529)(0.251,0.81569)(0.2552,0.79216)(0.2594,0.77255)(0.2636,0.75294)(0.2678,0.72941)(0.272,0.7098)(0.2762,0.68627)(0.2803,0.66667)(0.2845,0.62353)(0.2887,0.60392)(0.2929,0.58431)(0.2971,0.56078)(0.3013,0.54118)(0.3054,0.51765)(0.3096,0.49804)(0.3138,0.47843)(0.318,0.4549)(0.3222,0.43529)(0.3264,0.41569)(0.3305,0.39216)(0.3347,0.37255)(0.3389,0.34902)(0.3431,0.32941)(0.3473,0.28627)(0.3515,0.26667)(0.3556,0.24706)(0.3598,0.22353)(0.364,0.20392)(0.3682,0.18039)(0.3724,0.16078)(0.3766,0.14118)(0.3808,0.11765)(0.3849,0.098039)(0.3891,0.07451)(0.3933,0.054902)(0.3975,0.035294)(0.4017,0.011765)(0.4059,0)(0.41,0)(0.4142,0)(0.4184,0)(0.4226,0)(0.4268,0)(0.431,0)(0.4351,0)(0.4393,0)(0.4435,0)(0.4477,0)(0.4519,0)(0.4561,0)(0.4603,0)(0.4644,0)(0.4686,0)(0.4728,0)(0.477,0)(0.4812,0)(0.4854,0)(0.4895,0)(0.4937,0)(0.4979,0)(0.5021,0)(0.5063,0)(0.5105,0)(0.5146,0)(0.5188,0)(0.523,0)(0.5272,0)(0.5314,0)(0.5356,0)(0.5397,0)(0.5439,0)(0.5481,0)(0.5523,0)(0.5565,0)(0.5607,0)(0.5649,0)(0.569,0)(0.5732,0)(0.5774,0)(0.5816,0)(0.5858,0)(0.59,0)(0.5941,0)(0.5983,0)(0.6025,0)(0.6067,0)(0.6109,0)(0.6151,0)(0.6192,0)(0.6234,0)(0.6276,0)(0.6318,0)(0.636,0)(0.6402,0)(0.6444,0)(0.6485,0)(0.6527,0)(0.6569,0)(0.6611,0)(0.6653,0)(0.6695,0)(0.6736,0)(0.6778,0)(0.682,0)(0.6862,0)(0.6904,0)(0.6946,0)(0.6987,0)(0.7029,0)(0.7071,0)(0.7113,0)(0.7155,0)(0.7197,0)(0.7238,0)(0.728,0)(0.7322,0)(0.7364,0)(0.7406,0)(0.7448,0)(0.749,0)(0.7531,0)(0.7573,0)(0.7615,0)(0.7657,0)(0.7699,0)(0.7741,0)(0.7782,0.0078431)(0.7824,0.027451)(0.7866,0.070588)(0.7908,0.094118)(0.795,0.11373)(0.7992,0.13333)(0.8033,0.15686)(0.8075,0.17647)(0.8117,0.19608)(0.8159,0.21961)(0.8201,0.23922)(0.8243,0.26275)(0.8285,0.28235)(0.8326,0.30196)(0.8368,0.32549)(0.841,0.3451)(0.8452,0.36471)(0.8494,0.40784)(0.8536,0.43137)(0.8577,0.45098)(0.8619,0.47059)(0.8661,0.49412)(0.8703,0.51373)(0.8745,0.53333)(0.8787,0.55686)(0.8828,0.57647)(0.887,0.6)(0.8912,0.61961)(0.8954,0.63922)(0.8996,0.66275)(0.9038,0.68235)(0.9079,0.70588)(0.9121,0.7451)(0.9163,0.76863)(0.9205,0.78824)(0.9247,0.80784)(0.9289,0.83137)(0.9331,0.85098)(0.9372,0.87451)(0.9414,0.89412)(0.9456,0.91373)(0.9498,0.93725)(0.954,0.95686)(0.9582,0.97647)(0.9623,1)(0.9665,1)(0.9707,1)(0.9749,1)(0.9791,1)(0.9833,1)(0.9874,1)(0.9916,1)(0.9958,1)(1,1) GREEN: (0,0)(0.0042,0)(0.0084,0)(0.0126,0)(0.0167,0)(0.0209,0)(0.0251,0)(0.0293,0)(0.0335,0.019608)(0.0377,0.043137)(0.0418,0.062745)(0.046,0.086275)(0.0502,0.10588)(0.0544,0.12549)(0.0586,0.14902)(0.0628,0.16863)(0.0669,0.18824)(0.0711,0.21176)(0.0753,0.23137)(0.0795,0.2549)(0.0837,0.27451)(0.0879,0.29412)(0.0921,0.31765)(0.0962,0.35686)(0.1004,0.38039)(0.1046,0.4)(0.1088,0.42353)(0.113,0.44314)(0.1172,0.46275)(0.1213,0.48627)(0.1255,0.50588)(0.1297,0.52941)(0.1339,0.54902)(0.1381,0.56863)(0.1423,0.59216)(0.1464,0.61176)(0.1506,0.63137)(0.1548,0.6549)(0.159,0.69804)(0.1632,0.71765)(0.1674,0.73725)(0.1715,0.76078)(0.1757,0.78039)(0.1799,0.8)(0.1841,0.82353)(0.1883,0.84314)(0.1925,0.86667)(0.1967,0.88627)(0.2008,0.90588)(0.205,0.92941)(0.2092,0.94902)(0.2134,0.96863)(0.2176,0.99216)(0.2218,1)(0.2259,1)(0.2301,1)(0.2343,1)(0.2385,1)(0.2427,1)(0.2469,1)(0.251,1)(0.2552,1)(0.2594,1)(0.2636,1)(0.2678,1)(0.272,1)(0.2762,1)(0.2803,1)(0.2845,1)(0.2887,1)(0.2929,1)(0.2971,1)(0.3013,1)(0.3054,1)(0.3096,1)(0.3138,1)(0.318,1)(0.3222,1)(0.3264,1)(0.3305,1)(0.3347,1)(0.3389,1)(0.3431,1)(0.3473,1)(0.3515,1)(0.3556,1)(0.3598,1)(0.364,1)(0.3682,1)(0.3724,1)(0.3766,1)(0.3808,1)(0.3849,1)(0.3891,1)(0.3933,1)(0.3975,1)(0.4017,1)(0.4059,1)(0.41,1)(0.4142,1)(0.4184,1)(0.4226,1)(0.4268,1)(0.431,1)(0.4351,1)(0.4393,1)(0.4435,1)(0.4477,1)(0.4519,1)(0.4561,1)(0.4603,1)(0.4644,1)(0.4686,1)(0.4728,1)(0.477,1)(0.4812,1)(0.4854,1)(0.4895,1)(0.4937,1)(0.4979,1)(0.5021,1)(0.5063,1)(0.5105,1)(0.5146,1)(0.5188,1)(0.523,1)(0.5272,1)(0.5314,1)(0.5356,1)(0.5397,1)(0.5439,1)(0.5481,1)(0.5523,1)(0.5565,1)(0.5607,1)(0.5649,1)(0.569,1)(0.5732,1)(0.5774,1)(0.5816,1)(0.5858,1)(0.59,1)(0.5941,0.98039)(0.5983,0.93725)(0.6025,0.91765)(0.6067,0.89412)(0.6109,0.87451)(0.6151,0.8549)(0.6192,0.83137)(0.6234,0.81176)(0.6276,0.78824)(0.6318,0.76863)(0.636,0.74902)(0.6402,0.72549)(0.6444,0.70588)(0.6485,0.68235)(0.6527,0.66275)(0.6569,0.64314)(0.6611,0.6)(0.6653,0.58039)(0.6695,0.55686)(0.6736,0.53725)(0.6778,0.51373)(0.682,0.49412)(0.6862,0.47451)(0.6904,0.45098)(0.6946,0.43137)(0.6987,0.41176)(0.7029,0.38824)(0.7071,0.36863)(0.7113,0.3451)(0.7155,0.32549)(0.7197,0.30588)(0.7238,0.26275)(0.728,0.24314)(0.7322,0.21961)(0.7364,0.2)(0.7406,0.17647)(0.7448,0.15686)(0.749,0.13725)(0.7531,0.11373)(0.7573,0.094118)(0.7615,0.070588)(0.7657,0.05098)(0.7699,0.031373)(0.7741,0.0078431)(0.7782,0)(0.7824,0)(0.7866,0)(0.7908,0)(0.795,0)(0.7992,0)(0.8033,0)(0.8075,0)(0.8117,0)(0.8159,0)(0.8201,0)(0.8243,0)(0.8285,0)(0.8326,0)(0.8368,0)(0.841,0)(0.8452,0)(0.8494,0)(0.8536,0)(0.8577,0)(0.8619,0)(0.8661,0)(0.8703,0)(0.8745,0)(0.8787,0)(0.8828,0)(0.887,0)(0.8912,0)(0.8954,0)(0.8996,0)(0.9038,0)(0.9079,0)(0.9121,0)(0.9163,0)(0.9205,0)(0.9247,0)(0.9289,0)(0.9331,0)(0.9372,0)(0.9414,0)(0.9456,0)(0.9498,0)(0.954,0)(0.9582,0)(0.9623,0)(0.9665,0)(0.9707,0)(0.9749,0)(0.9791,0)(0.9833,0)(0.9874,0)(0.9916,0)(0.9958,0)(1,0) BLUE: (0,0.16471)(0.0042,0.14118)(0.0084,0.12157)(0.0126,0.10196)(0.0167,0.078431)(0.0209,0.058824)(0.0251,0.039216)(0.0293,0.015686)(0.0335,0)(0.0377,0)(0.0418,0)(0.046,0)(0.0502,0)(0.0544,0)(0.0586,0)(0.0628,0)(0.0669,0)(0.0711,0)(0.0753,0)(0.0795,0)(0.0837,0)(0.0879,0)(0.0921,0)(0.0962,0)(0.1004,0)(0.1046,0)(0.1088,0)(0.113,0)(0.1172,0)(0.1213,0)(0.1255,0)(0.1297,0)(0.1339,0)(0.1381,0)(0.1423,0)(0.1464,0)(0.1506,0)(0.1548,0)(0.159,0)(0.1632,0)(0.1674,0)(0.1715,0)(0.1757,0)(0.1799,0)(0.1841,0)(0.1883,0)(0.1925,0)(0.1967,0)(0.2008,0)(0.205,0)(0.2092,0)(0.2134,0)(0.2176,0)(0.2218,0)(0.2259,0)(0.2301,0)(0.2343,0)(0.2385,0)(0.2427,0)(0.2469,0)(0.251,0)(0.2552,0)(0.2594,0)(0.2636,0)(0.2678,0)(0.272,0)(0.2762,0)(0.2803,0)(0.2845,0)(0.2887,0)(0.2929,0)(0.2971,0)(0.3013,0)(0.3054,0)(0.3096,0)(0.3138,0)(0.318,0)(0.3222,0)(0.3264,0)(0.3305,0)(0.3347,0)(0.3389,0)(0.3431,0)(0.3473,0)(0.3515,0)(0.3556,0)(0.3598,0)(0.364,0)(0.3682,0)(0.3724,0)(0.3766,0)(0.3808,0)(0.3849,0)(0.3891,0)(0.3933,0)(0.3975,0)(0.4017,0)(0.4059,0.0039216)(0.41,0.047059)(0.4142,0.066667)(0.4184,0.090196)(0.4226,0.1098)(0.4268,0.12941)(0.431,0.15294)(0.4351,0.17255)(0.4393,0.19216)(0.4435,0.21569)(0.4477,0.23529)(0.4519,0.25882)(0.4561,0.27843)(0.4603,0.29804)(0.4644,0.32157)(0.4686,0.34118)(0.4728,0.38431)(0.477,0.40392)(0.4812,0.42745)(0.4854,0.44706)(0.4895,0.46667)(0.4937,0.4902)(0.4979,0.5098)(0.5021,0.52941)(0.5063,0.55294)(0.5105,0.57255)(0.5146,0.59608)(0.5188,0.61569)(0.523,0.63529)(0.5272,0.65882)(0.5314,0.67843)(0.5356,0.72157)(0.5397,0.74118)(0.5439,0.76471)(0.5481,0.78431)(0.5523,0.80392)(0.5565,0.82745)(0.5607,0.84706)(0.5649,0.87059)(0.569,0.8902)(0.5732,0.9098)(0.5774,0.93333)(0.5816,0.95294)(0.5858,0.97255)(0.59,0.99608)(0.5941,1)(0.5983,1)(0.6025,1)(0.6067,1)(0.6109,1)(0.6151,1)(0.6192,1)(0.6234,1)(0.6276,1)(0.6318,1)(0.636,1)(0.6402,1)(0.6444,1)(0.6485,1)(0.6527,1)(0.6569,1)(0.6611,1)(0.6653,1)(0.6695,1)(0.6736,1)(0.6778,1)(0.682,1)(0.6862,1)(0.6904,1)(0.6946,1)(0.6987,1)(0.7029,1)(0.7071,1)(0.7113,1)(0.7155,1)(0.7197,1)(0.7238,1)(0.728,1)(0.7322,1)(0.7364,1)(0.7406,1)(0.7448,1)(0.749,1)(0.7531,1)(0.7573,1)(0.7615,1)(0.7657,1)(0.7699,1)(0.7741,1)(0.7782,1)(0.7824,1)(0.7866,1)(0.7908,1)(0.795,1)(0.7992,1)(0.8033,1)(0.8075,1)(0.8117,1)(0.8159,1)(0.8201,1)(0.8243,1)(0.8285,1)(0.8326,1)(0.8368,1)(0.841,1)(0.8452,1)(0.8494,1)(0.8536,1)(0.8577,1)(0.8619,1)(0.8661,1)(0.8703,1)(0.8745,1)(0.8787,1)(0.8828,1)(0.887,1)(0.8912,1)(0.8954,1)(0.8996,1)(0.9038,1)(0.9079,1)(0.9121,1)(0.9163,1)(0.9205,1)(0.9247,1)(0.9289,1)(0.9331,1)(0.9372,1)(0.9414,1)(0.9456,1)(0.9498,1)(0.954,1)(0.9582,1)(0.9623,0.99608)(0.9665,0.97647)(0.9707,0.95294)(0.9749,0.91373)(0.9791,0.8902)(0.9833,0.87059)(0.9874,0.85098)(0.9916,0.82745)(0.9958,0.80784)(1,0.78824) saods9/ds9/cmaps/gist_stern.sao000644 000765 000000 00000026274 12567377777 017122 0ustar00joyewheel000000 000000 # SAOimage color table # stern # created by cptutils 1.46 # Wed Aug 15 23:30:59 2012 PSEUDOCOLOR RED: (0,0)(0.0042,0.070588)(0.0084,0.14118)(0.0126,0.21176)(0.0167,0.28235)(0.0209,0.35294)(0.0251,0.42353)(0.0293,0.49804)(0.0335,0.56863)(0.0377,0.63922)(0.0418,0.78039)(0.046,0.85098)(0.0502,0.92157)(0.0544,0.99608)(0.0586,0.97647)(0.0628,0.95686)(0.0669,0.93725)(0.0711,0.91765)(0.0753,0.89804)(0.0795,0.87451)(0.0837,0.8549)(0.0879,0.83529)(0.0921,0.81569)(0.0962,0.79608)(0.1004,0.77255)(0.1046,0.75294)(0.1088,0.73333)(0.113,0.71373)(0.1172,0.69412)(0.1213,0.67451)(0.1255,0.63137)(0.1297,0.61176)(0.1339,0.59216)(0.1381,0.57255)(0.1423,0.54902)(0.1464,0.52941)(0.1506,0.5098)(0.1548,0.4902)(0.159,0.47059)(0.1632,0.45098)(0.1674,0.42745)(0.1715,0.40784)(0.1757,0.38824)(0.1799,0.36863)(0.1841,0.34902)(0.1883,0.32549)(0.1925,0.30588)(0.1967,0.28627)(0.2008,0.26667)(0.205,0.24706)(0.2092,0.20392)(0.2134,0.18431)(0.2176,0.16471)(0.2218,0.1451)(0.2259,0.12549)(0.2301,0.10196)(0.2343,0.082353)(0.2385,0.062745)(0.2427,0.043137)(0.2469,0.023529)(0.251,0.25098)(0.2552,0.2549)(0.2594,0.25882)(0.2636,0.26275)(0.2678,0.26667)(0.272,0.27059)(0.2762,0.27451)(0.2803,0.27843)(0.2845,0.28235)(0.2887,0.28627)(0.2929,0.29412)(0.2971,0.29804)(0.3013,0.30196)(0.3054,0.30588)(0.3096,0.3098)(0.3138,0.31373)(0.318,0.31765)(0.3222,0.32157)(0.3264,0.32549)(0.3305,0.32941)(0.3347,0.33333)(0.3389,0.33725)(0.3431,0.34118)(0.3473,0.3451)(0.3515,0.34902)(0.3556,0.35294)(0.3598,0.35686)(0.364,0.36078)(0.3682,0.36471)(0.3724,0.36863)(0.3766,0.37647)(0.3808,0.38039)(0.3849,0.38431)(0.3891,0.38824)(0.3933,0.39216)(0.3975,0.39608)(0.4017,0.4)(0.4059,0.40392)(0.41,0.40784)(0.4142,0.41176)(0.4184,0.41569)(0.4226,0.41961)(0.4268,0.42353)(0.431,0.42745)(0.4351,0.43137)(0.4393,0.43529)(0.4435,0.43922)(0.4477,0.44314)(0.4519,0.44706)(0.4561,0.45098)(0.4603,0.45882)(0.4644,0.46275)(0.4686,0.46667)(0.4728,0.47059)(0.477,0.47451)(0.4812,0.47843)(0.4854,0.48235)(0.4895,0.48627)(0.4937,0.4902)(0.4979,0.49412)(0.5021,0.50196)(0.5063,0.50588)(0.5105,0.5098)(0.5146,0.51373)(0.5188,0.51765)(0.523,0.52157)(0.5272,0.52549)(0.5314,0.52941)(0.5356,0.53333)(0.5397,0.53725)(0.5439,0.5451)(0.5481,0.54902)(0.5523,0.55294)(0.5565,0.55686)(0.5607,0.56078)(0.5649,0.56471)(0.569,0.56863)(0.5732,0.57255)(0.5774,0.57647)(0.5816,0.58039)(0.5858,0.58431)(0.59,0.58824)(0.5941,0.59216)(0.5983,0.59608)(0.6025,0.6)(0.6067,0.60392)(0.6109,0.60784)(0.6151,0.61176)(0.6192,0.61569)(0.6234,0.61961)(0.6276,0.62745)(0.6318,0.63137)(0.636,0.63529)(0.6402,0.63922)(0.6444,0.64314)(0.6485,0.64706)(0.6527,0.65098)(0.6569,0.6549)(0.6611,0.65882)(0.6653,0.66275)(0.6695,0.66667)(0.6736,0.67059)(0.6778,0.67451)(0.682,0.67843)(0.6862,0.68235)(0.6904,0.68627)(0.6946,0.6902)(0.6987,0.69412)(0.7029,0.69804)(0.7071,0.70196)(0.7113,0.7098)(0.7155,0.71373)(0.7197,0.71765)(0.7238,0.72157)(0.728,0.72549)(0.7322,0.72941)(0.7364,0.73333)(0.7406,0.73725)(0.7448,0.74118)(0.749,0.7451)(0.7531,0.75294)(0.7573,0.75686)(0.7615,0.76078)(0.7657,0.76471)(0.7699,0.76863)(0.7741,0.77255)(0.7782,0.77647)(0.7824,0.78039)(0.7866,0.78431)(0.7908,0.78824)(0.795,0.79608)(0.7992,0.8)(0.8033,0.80392)(0.8075,0.80784)(0.8117,0.81176)(0.8159,0.81569)(0.8201,0.81961)(0.8243,0.82353)(0.8285,0.82745)(0.8326,0.83137)(0.8368,0.83529)(0.841,0.83922)(0.8452,0.84314)(0.8494,0.84706)(0.8536,0.85098)(0.8577,0.8549)(0.8619,0.85882)(0.8661,0.86275)(0.8703,0.86667)(0.8745,0.87059)(0.8787,0.87843)(0.8828,0.88235)(0.887,0.88627)(0.8912,0.8902)(0.8954,0.89412)(0.8996,0.89804)(0.9038,0.90196)(0.9079,0.90588)(0.9121,0.9098)(0.9163,0.91373)(0.9205,0.91765)(0.9247,0.92157)(0.9289,0.92549)(0.9331,0.92941)(0.9372,0.93333)(0.9414,0.93725)(0.9456,0.94118)(0.9498,0.9451)(0.954,0.94902)(0.9582,0.95294)(0.9623,0.96078)(0.9665,0.96471)(0.9707,0.96863)(0.9749,0.97255)(0.9791,0.97647)(0.9833,0.98039)(0.9874,0.98431)(0.9916,0.98824)(0.9958,0.99216)(1,0.99608) GREEN: (0,0)(0.0042,0.0039216)(0.0084,0.0078431)(0.0126,0.011765)(0.0167,0.015686)(0.0209,0.019608)(0.0251,0.023529)(0.0293,0.027451)(0.0335,0.031373)(0.0377,0.035294)(0.0418,0.043137)(0.046,0.047059)(0.0502,0.05098)(0.0544,0.054902)(0.0586,0.058824)(0.0628,0.062745)(0.0669,0.066667)(0.0711,0.070588)(0.0753,0.07451)(0.0795,0.078431)(0.0837,0.082353)(0.0879,0.086275)(0.0921,0.090196)(0.0962,0.094118)(0.1004,0.098039)(0.1046,0.10196)(0.1088,0.10588)(0.113,0.1098)(0.1172,0.11373)(0.1213,0.11765)(0.1255,0.12549)(0.1297,0.12941)(0.1339,0.13333)(0.1381,0.13725)(0.1423,0.14118)(0.1464,0.1451)(0.1506,0.14902)(0.1548,0.15294)(0.159,0.15686)(0.1632,0.16078)(0.1674,0.16471)(0.1715,0.16863)(0.1757,0.17255)(0.1799,0.17647)(0.1841,0.18039)(0.1883,0.18431)(0.1925,0.18824)(0.1967,0.19216)(0.2008,0.19608)(0.205,0.2)(0.2092,0.20784)(0.2134,0.21176)(0.2176,0.21569)(0.2218,0.21961)(0.2259,0.22353)(0.2301,0.22745)(0.2343,0.23137)(0.2385,0.23529)(0.2427,0.23922)(0.2469,0.24314)(0.251,0.25098)(0.2552,0.2549)(0.2594,0.25882)(0.2636,0.26275)(0.2678,0.26667)(0.272,0.27059)(0.2762,0.27451)(0.2803,0.27843)(0.2845,0.28235)(0.2887,0.28627)(0.2929,0.29412)(0.2971,0.29804)(0.3013,0.30196)(0.3054,0.30588)(0.3096,0.3098)(0.3138,0.31373)(0.318,0.31765)(0.3222,0.32157)(0.3264,0.32549)(0.3305,0.32941)(0.3347,0.33333)(0.3389,0.33725)(0.3431,0.34118)(0.3473,0.3451)(0.3515,0.34902)(0.3556,0.35294)(0.3598,0.35686)(0.364,0.36078)(0.3682,0.36471)(0.3724,0.36863)(0.3766,0.37647)(0.3808,0.38039)(0.3849,0.38431)(0.3891,0.38824)(0.3933,0.39216)(0.3975,0.39608)(0.4017,0.4)(0.4059,0.40392)(0.41,0.40784)(0.4142,0.41176)(0.4184,0.41569)(0.4226,0.41961)(0.4268,0.42353)(0.431,0.42745)(0.4351,0.43137)(0.4393,0.43529)(0.4435,0.43922)(0.4477,0.44314)(0.4519,0.44706)(0.4561,0.45098)(0.4603,0.45882)(0.4644,0.46275)(0.4686,0.46667)(0.4728,0.47059)(0.477,0.47451)(0.4812,0.47843)(0.4854,0.48235)(0.4895,0.48627)(0.4937,0.4902)(0.4979,0.49412)(0.5021,0.50196)(0.5063,0.50588)(0.5105,0.5098)(0.5146,0.51373)(0.5188,0.51765)(0.523,0.52157)(0.5272,0.52549)(0.5314,0.52941)(0.5356,0.53333)(0.5397,0.53725)(0.5439,0.5451)(0.5481,0.54902)(0.5523,0.55294)(0.5565,0.55686)(0.5607,0.56078)(0.5649,0.56471)(0.569,0.56863)(0.5732,0.57255)(0.5774,0.57647)(0.5816,0.58039)(0.5858,0.58431)(0.59,0.58824)(0.5941,0.59216)(0.5983,0.59608)(0.6025,0.6)(0.6067,0.60392)(0.6109,0.60784)(0.6151,0.61176)(0.6192,0.61569)(0.6234,0.61961)(0.6276,0.62745)(0.6318,0.63137)(0.636,0.63529)(0.6402,0.63922)(0.6444,0.64314)(0.6485,0.64706)(0.6527,0.65098)(0.6569,0.6549)(0.6611,0.65882)(0.6653,0.66275)(0.6695,0.66667)(0.6736,0.67059)(0.6778,0.67451)(0.682,0.67843)(0.6862,0.68235)(0.6904,0.68627)(0.6946,0.6902)(0.6987,0.69412)(0.7029,0.69804)(0.7071,0.70196)(0.7113,0.7098)(0.7155,0.71373)(0.7197,0.71765)(0.7238,0.72157)(0.728,0.72549)(0.7322,0.72941)(0.7364,0.73333)(0.7406,0.73725)(0.7448,0.74118)(0.749,0.7451)(0.7531,0.75294)(0.7573,0.75686)(0.7615,0.76078)(0.7657,0.76471)(0.7699,0.76863)(0.7741,0.77255)(0.7782,0.77647)(0.7824,0.78039)(0.7866,0.78431)(0.7908,0.78824)(0.795,0.79608)(0.7992,0.8)(0.8033,0.80392)(0.8075,0.80784)(0.8117,0.81176)(0.8159,0.81569)(0.8201,0.81961)(0.8243,0.82353)(0.8285,0.82745)(0.8326,0.83137)(0.8368,0.83529)(0.841,0.83922)(0.8452,0.84314)(0.8494,0.84706)(0.8536,0.85098)(0.8577,0.8549)(0.8619,0.85882)(0.8661,0.86275)(0.8703,0.86667)(0.8745,0.87059)(0.8787,0.87843)(0.8828,0.88235)(0.887,0.88627)(0.8912,0.8902)(0.8954,0.89412)(0.8996,0.89804)(0.9038,0.90196)(0.9079,0.90588)(0.9121,0.9098)(0.9163,0.91373)(0.9205,0.91765)(0.9247,0.92157)(0.9289,0.92549)(0.9331,0.92941)(0.9372,0.93333)(0.9414,0.93725)(0.9456,0.94118)(0.9498,0.9451)(0.954,0.94902)(0.9582,0.95294)(0.9623,0.96078)(0.9665,0.96471)(0.9707,0.96863)(0.9749,0.97255)(0.9791,0.97647)(0.9833,0.98039)(0.9874,0.98431)(0.9916,0.98824)(0.9958,0.99216)(1,0.99608) BLUE: (0,0)(0.0042,0.0039216)(0.0084,0.011765)(0.0126,0.019608)(0.0167,0.027451)(0.0209,0.035294)(0.0251,0.043137)(0.0293,0.05098)(0.0335,0.058824)(0.0377,0.066667)(0.0418,0.082353)(0.046,0.090196)(0.0502,0.098039)(0.0544,0.10588)(0.0586,0.11373)(0.0628,0.12157)(0.0669,0.12941)(0.0711,0.13725)(0.0753,0.1451)(0.0795,0.15294)(0.0837,0.16078)(0.0879,0.16863)(0.0921,0.17647)(0.0962,0.18431)(0.1004,0.19216)(0.1046,0.2)(0.1088,0.20784)(0.113,0.21569)(0.1172,0.22353)(0.1213,0.23137)(0.1255,0.24706)(0.1297,0.2549)(0.1339,0.26275)(0.1381,0.27059)(0.1423,0.27843)(0.1464,0.28627)(0.1506,0.29412)(0.1548,0.30196)(0.159,0.3098)(0.1632,0.31765)(0.1674,0.32549)(0.1715,0.33333)(0.1757,0.34118)(0.1799,0.34902)(0.1841,0.35686)(0.1883,0.36471)(0.1925,0.37255)(0.1967,0.38039)(0.2008,0.38824)(0.205,0.39608)(0.2092,0.41176)(0.2134,0.41961)(0.2176,0.42745)(0.2218,0.43529)(0.2259,0.44314)(0.2301,0.45098)(0.2343,0.45882)(0.2385,0.46667)(0.2427,0.47451)(0.2469,0.48235)(0.251,0.49804)(0.2552,0.50588)(0.2594,0.51373)(0.2636,0.52157)(0.2678,0.52941)(0.272,0.53725)(0.2762,0.5451)(0.2803,0.55294)(0.2845,0.56078)(0.2887,0.56863)(0.2929,0.58431)(0.2971,0.59216)(0.3013,0.6)(0.3054,0.60784)(0.3096,0.61569)(0.3138,0.62353)(0.318,0.63137)(0.3222,0.63922)(0.3264,0.64706)(0.3305,0.6549)(0.3347,0.66275)(0.3389,0.67059)(0.3431,0.67843)(0.3473,0.68627)(0.3515,0.69412)(0.3556,0.70196)(0.3598,0.7098)(0.364,0.71765)(0.3682,0.72549)(0.3724,0.73333)(0.3766,0.74902)(0.3808,0.75686)(0.3849,0.76471)(0.3891,0.77255)(0.3933,0.78039)(0.3975,0.78824)(0.4017,0.79608)(0.4059,0.80392)(0.41,0.81176)(0.4142,0.81961)(0.4184,0.82745)(0.4226,0.83529)(0.4268,0.84314)(0.431,0.85098)(0.4351,0.85882)(0.4393,0.86667)(0.4435,0.87451)(0.4477,0.88235)(0.4519,0.8902)(0.4561,0.89804)(0.4603,0.91373)(0.4644,0.92157)(0.4686,0.92941)(0.4728,0.93725)(0.477,0.9451)(0.4812,0.95294)(0.4854,0.96078)(0.4895,0.96863)(0.4937,0.97647)(0.4979,0.98431)(0.5021,1)(0.5063,0.98431)(0.5105,0.96863)(0.5146,0.95294)(0.5188,0.93333)(0.523,0.91765)(0.5272,0.90196)(0.5314,0.88627)(0.5356,0.86667)(0.5397,0.85098)(0.5439,0.81961)(0.5481,0.8)(0.5523,0.78431)(0.5565,0.76863)(0.5607,0.75294)(0.5649,0.73333)(0.569,0.71765)(0.5732,0.70196)(0.5774,0.68627)(0.5816,0.66667)(0.5858,0.65098)(0.59,0.63529)(0.5941,0.61961)(0.5983,0.6)(0.6025,0.58431)(0.6067,0.56863)(0.6109,0.55294)(0.6151,0.53333)(0.6192,0.51765)(0.6234,0.50196)(0.6276,0.46667)(0.6318,0.45098)(0.636,0.43529)(0.6402,0.41961)(0.6444,0.4)(0.6485,0.38431)(0.6527,0.36863)(0.6569,0.35294)(0.6611,0.33333)(0.6653,0.31765)(0.6695,0.30196)(0.6736,0.28627)(0.6778,0.26667)(0.682,0.25098)(0.6862,0.23529)(0.6904,0.21961)(0.6946,0.2)(0.6987,0.18431)(0.7029,0.16863)(0.7071,0.15294)(0.7113,0.11765)(0.7155,0.10196)(0.7197,0.086275)(0.7238,0.066667)(0.728,0.05098)(0.7322,0.035294)(0.7364,0.019608)(0.7406,0)(0.7448,0.011765)(0.749,0.027451)(0.7531,0.058824)(0.7573,0.07451)(0.7615,0.086275)(0.7657,0.10196)(0.7699,0.11765)(0.7741,0.13333)(0.7782,0.14902)(0.7824,0.16078)(0.7866,0.17647)(0.7908,0.19216)(0.795,0.22353)(0.7992,0.23529)(0.8033,0.25098)(0.8075,0.26667)(0.8117,0.28235)(0.8159,0.29804)(0.8201,0.3098)(0.8243,0.32549)(0.8285,0.34118)(0.8326,0.35686)(0.8368,0.37255)(0.841,0.38431)(0.8452,0.4)(0.8494,0.41569)(0.8536,0.43137)(0.8577,0.44706)(0.8619,0.45882)(0.8661,0.47451)(0.8703,0.4902)(0.8745,0.50588)(0.8787,0.53725)(0.8828,0.54902)(0.887,0.56471)(0.8912,0.58039)(0.8954,0.59608)(0.8996,0.61176)(0.9038,0.62353)(0.9079,0.63922)(0.9121,0.6549)(0.9163,0.67059)(0.9205,0.68627)(0.9247,0.69804)(0.9289,0.71373)(0.9331,0.72941)(0.9372,0.7451)(0.9414,0.76078)(0.9456,0.77255)(0.9498,0.78824)(0.954,0.80392)(0.9582,0.81961)(0.9623,0.84706)(0.9665,0.86275)(0.9707,0.87843)(0.9749,0.89412)(0.9791,0.9098)(0.9833,0.92157)(0.9874,0.93725)(0.9916,0.95294)(0.9958,0.96863)(1,0.98431) saods9/ds9/cmaps/gist_yarg.sao000644 000765 000000 00000026315 12567377777 016725 0ustar00joyewheel000000 000000 # SAOimage color table # yarg # created by cptutils 1.46 # Wed Aug 15 23:30:58 2012 PSEUDOCOLOR RED: (0,1)(0.0042,0.99608)(0.0084,0.99216)(0.0126,0.98824)(0.0167,0.98431)(0.0209,0.98039)(0.0251,0.97647)(0.0293,0.97255)(0.0335,0.96471)(0.0377,0.96078)(0.0418,0.95686)(0.046,0.95294)(0.0502,0.94902)(0.0544,0.9451)(0.0586,0.94118)(0.0628,0.93725)(0.0669,0.93333)(0.0711,0.92941)(0.0753,0.92549)(0.0795,0.92157)(0.0837,0.91765)(0.0879,0.91373)(0.0921,0.9098)(0.0962,0.90196)(0.1004,0.89804)(0.1046,0.89412)(0.1088,0.8902)(0.113,0.88627)(0.1172,0.88235)(0.1213,0.87843)(0.1255,0.87451)(0.1297,0.87059)(0.1339,0.86667)(0.1381,0.86275)(0.1423,0.85882)(0.1464,0.8549)(0.1506,0.85098)(0.1548,0.84706)(0.159,0.83922)(0.1632,0.83529)(0.1674,0.83137)(0.1715,0.82745)(0.1757,0.82353)(0.1799,0.81961)(0.1841,0.81569)(0.1883,0.81176)(0.1925,0.80784)(0.1967,0.80392)(0.2008,0.8)(0.205,0.79608)(0.2092,0.79216)(0.2134,0.78824)(0.2176,0.78431)(0.2218,0.77647)(0.2259,0.77255)(0.2301,0.76863)(0.2343,0.76471)(0.2385,0.76078)(0.2427,0.75686)(0.2469,0.75294)(0.251,0.74902)(0.2552,0.7451)(0.2594,0.74118)(0.2636,0.73725)(0.2678,0.73333)(0.272,0.72941)(0.2762,0.72549)(0.2803,0.72157)(0.2845,0.71373)(0.2887,0.7098)(0.2929,0.70588)(0.2971,0.70196)(0.3013,0.69804)(0.3054,0.69412)(0.3096,0.6902)(0.3138,0.68627)(0.318,0.68235)(0.3222,0.67843)(0.3264,0.67451)(0.3305,0.67059)(0.3347,0.66667)(0.3389,0.66275)(0.3431,0.65882)(0.3473,0.65098)(0.3515,0.64706)(0.3556,0.64314)(0.3598,0.63922)(0.364,0.63529)(0.3682,0.63137)(0.3724,0.62745)(0.3766,0.62353)(0.3808,0.61961)(0.3849,0.61569)(0.3891,0.61176)(0.3933,0.60784)(0.3975,0.60392)(0.4017,0.6)(0.4059,0.59608)(0.41,0.58824)(0.4142,0.58431)(0.4184,0.58039)(0.4226,0.57647)(0.4268,0.57255)(0.431,0.56863)(0.4351,0.56471)(0.4393,0.56078)(0.4435,0.55686)(0.4477,0.55294)(0.4519,0.54902)(0.4561,0.5451)(0.4603,0.54118)(0.4644,0.53725)(0.4686,0.53333)(0.4728,0.52549)(0.477,0.52157)(0.4812,0.51765)(0.4854,0.51373)(0.4895,0.5098)(0.4937,0.50588)(0.4979,0.50196)(0.5021,0.49804)(0.5063,0.49412)(0.5105,0.4902)(0.5146,0.48627)(0.5188,0.48235)(0.523,0.47843)(0.5272,0.47451)(0.5314,0.47059)(0.5356,0.46275)(0.5397,0.45882)(0.5439,0.4549)(0.5481,0.45098)(0.5523,0.44706)(0.5565,0.44314)(0.5607,0.43922)(0.5649,0.43529)(0.569,0.43137)(0.5732,0.42745)(0.5774,0.42353)(0.5816,0.41961)(0.5858,0.41569)(0.59,0.41176)(0.5941,0.40784)(0.5983,0.4)(0.6025,0.39608)(0.6067,0.39216)(0.6109,0.38824)(0.6151,0.38431)(0.6192,0.38039)(0.6234,0.37647)(0.6276,0.37255)(0.6318,0.36863)(0.636,0.36471)(0.6402,0.36078)(0.6444,0.35686)(0.6485,0.35294)(0.6527,0.34902)(0.6569,0.3451)(0.6611,0.33725)(0.6653,0.33333)(0.6695,0.32941)(0.6736,0.32549)(0.6778,0.32157)(0.682,0.31765)(0.6862,0.31373)(0.6904,0.3098)(0.6946,0.30588)(0.6987,0.30196)(0.7029,0.29804)(0.7071,0.29412)(0.7113,0.2902)(0.7155,0.28627)(0.7197,0.28235)(0.7238,0.27451)(0.728,0.27059)(0.7322,0.26667)(0.7364,0.26275)(0.7406,0.25882)(0.7448,0.2549)(0.749,0.25098)(0.7531,0.24706)(0.7573,0.24314)(0.7615,0.23922)(0.7657,0.23529)(0.7699,0.23137)(0.7741,0.22745)(0.7782,0.22353)(0.7824,0.21961)(0.7866,0.21176)(0.7908,0.20784)(0.795,0.20392)(0.7992,0.2)(0.8033,0.19608)(0.8075,0.19216)(0.8117,0.18824)(0.8159,0.18431)(0.8201,0.18039)(0.8243,0.17647)(0.8285,0.17255)(0.8326,0.16863)(0.8368,0.16471)(0.841,0.16078)(0.8452,0.15686)(0.8494,0.14902)(0.8536,0.1451)(0.8577,0.14118)(0.8619,0.13725)(0.8661,0.13333)(0.8703,0.12941)(0.8745,0.12549)(0.8787,0.12157)(0.8828,0.11765)(0.887,0.11373)(0.8912,0.1098)(0.8954,0.10588)(0.8996,0.10196)(0.9038,0.098039)(0.9079,0.094118)(0.9121,0.086275)(0.9163,0.082353)(0.9205,0.078431)(0.9247,0.07451)(0.9289,0.070588)(0.9331,0.066667)(0.9372,0.062745)(0.9414,0.058824)(0.9456,0.054902)(0.9498,0.05098)(0.954,0.047059)(0.9582,0.043137)(0.9623,0.039216)(0.9665,0.035294)(0.9707,0.031373)(0.9749,0.023529)(0.9791,0.019608)(0.9833,0.015686)(0.9874,0.011765)(0.9916,0.0078431)(0.9958,0.0039216)(1,0) GREEN: (0,1)(0.0042,0.99608)(0.0084,0.99216)(0.0126,0.98824)(0.0167,0.98431)(0.0209,0.98039)(0.0251,0.97647)(0.0293,0.97255)(0.0335,0.96471)(0.0377,0.96078)(0.0418,0.95686)(0.046,0.95294)(0.0502,0.94902)(0.0544,0.9451)(0.0586,0.94118)(0.0628,0.93725)(0.0669,0.93333)(0.0711,0.92941)(0.0753,0.92549)(0.0795,0.92157)(0.0837,0.91765)(0.0879,0.91373)(0.0921,0.9098)(0.0962,0.90196)(0.1004,0.89804)(0.1046,0.89412)(0.1088,0.8902)(0.113,0.88627)(0.1172,0.88235)(0.1213,0.87843)(0.1255,0.87451)(0.1297,0.87059)(0.1339,0.86667)(0.1381,0.86275)(0.1423,0.85882)(0.1464,0.8549)(0.1506,0.85098)(0.1548,0.84706)(0.159,0.83922)(0.1632,0.83529)(0.1674,0.83137)(0.1715,0.82745)(0.1757,0.82353)(0.1799,0.81961)(0.1841,0.81569)(0.1883,0.81176)(0.1925,0.80784)(0.1967,0.80392)(0.2008,0.8)(0.205,0.79608)(0.2092,0.79216)(0.2134,0.78824)(0.2176,0.78431)(0.2218,0.77647)(0.2259,0.77255)(0.2301,0.76863)(0.2343,0.76471)(0.2385,0.76078)(0.2427,0.75686)(0.2469,0.75294)(0.251,0.74902)(0.2552,0.7451)(0.2594,0.74118)(0.2636,0.73725)(0.2678,0.73333)(0.272,0.72941)(0.2762,0.72549)(0.2803,0.72157)(0.2845,0.71373)(0.2887,0.7098)(0.2929,0.70588)(0.2971,0.70196)(0.3013,0.69804)(0.3054,0.69412)(0.3096,0.6902)(0.3138,0.68627)(0.318,0.68235)(0.3222,0.67843)(0.3264,0.67451)(0.3305,0.67059)(0.3347,0.66667)(0.3389,0.66275)(0.3431,0.65882)(0.3473,0.65098)(0.3515,0.64706)(0.3556,0.64314)(0.3598,0.63922)(0.364,0.63529)(0.3682,0.63137)(0.3724,0.62745)(0.3766,0.62353)(0.3808,0.61961)(0.3849,0.61569)(0.3891,0.61176)(0.3933,0.60784)(0.3975,0.60392)(0.4017,0.6)(0.4059,0.59608)(0.41,0.58824)(0.4142,0.58431)(0.4184,0.58039)(0.4226,0.57647)(0.4268,0.57255)(0.431,0.56863)(0.4351,0.56471)(0.4393,0.56078)(0.4435,0.55686)(0.4477,0.55294)(0.4519,0.54902)(0.4561,0.5451)(0.4603,0.54118)(0.4644,0.53725)(0.4686,0.53333)(0.4728,0.52549)(0.477,0.52157)(0.4812,0.51765)(0.4854,0.51373)(0.4895,0.5098)(0.4937,0.50588)(0.4979,0.50196)(0.5021,0.49804)(0.5063,0.49412)(0.5105,0.4902)(0.5146,0.48627)(0.5188,0.48235)(0.523,0.47843)(0.5272,0.47451)(0.5314,0.47059)(0.5356,0.46275)(0.5397,0.45882)(0.5439,0.4549)(0.5481,0.45098)(0.5523,0.44706)(0.5565,0.44314)(0.5607,0.43922)(0.5649,0.43529)(0.569,0.43137)(0.5732,0.42745)(0.5774,0.42353)(0.5816,0.41961)(0.5858,0.41569)(0.59,0.41176)(0.5941,0.40784)(0.5983,0.4)(0.6025,0.39608)(0.6067,0.39216)(0.6109,0.38824)(0.6151,0.38431)(0.6192,0.38039)(0.6234,0.37647)(0.6276,0.37255)(0.6318,0.36863)(0.636,0.36471)(0.6402,0.36078)(0.6444,0.35686)(0.6485,0.35294)(0.6527,0.34902)(0.6569,0.3451)(0.6611,0.33725)(0.6653,0.33333)(0.6695,0.32941)(0.6736,0.32549)(0.6778,0.32157)(0.682,0.31765)(0.6862,0.31373)(0.6904,0.3098)(0.6946,0.30588)(0.6987,0.30196)(0.7029,0.29804)(0.7071,0.29412)(0.7113,0.2902)(0.7155,0.28627)(0.7197,0.28235)(0.7238,0.27451)(0.728,0.27059)(0.7322,0.26667)(0.7364,0.26275)(0.7406,0.25882)(0.7448,0.2549)(0.749,0.25098)(0.7531,0.24706)(0.7573,0.24314)(0.7615,0.23922)(0.7657,0.23529)(0.7699,0.23137)(0.7741,0.22745)(0.7782,0.22353)(0.7824,0.21961)(0.7866,0.21176)(0.7908,0.20784)(0.795,0.20392)(0.7992,0.2)(0.8033,0.19608)(0.8075,0.19216)(0.8117,0.18824)(0.8159,0.18431)(0.8201,0.18039)(0.8243,0.17647)(0.8285,0.17255)(0.8326,0.16863)(0.8368,0.16471)(0.841,0.16078)(0.8452,0.15686)(0.8494,0.14902)(0.8536,0.1451)(0.8577,0.14118)(0.8619,0.13725)(0.8661,0.13333)(0.8703,0.12941)(0.8745,0.12549)(0.8787,0.12157)(0.8828,0.11765)(0.887,0.11373)(0.8912,0.1098)(0.8954,0.10588)(0.8996,0.10196)(0.9038,0.098039)(0.9079,0.094118)(0.9121,0.086275)(0.9163,0.082353)(0.9205,0.078431)(0.9247,0.07451)(0.9289,0.070588)(0.9331,0.066667)(0.9372,0.062745)(0.9414,0.058824)(0.9456,0.054902)(0.9498,0.05098)(0.954,0.047059)(0.9582,0.043137)(0.9623,0.039216)(0.9665,0.035294)(0.9707,0.031373)(0.9749,0.023529)(0.9791,0.019608)(0.9833,0.015686)(0.9874,0.011765)(0.9916,0.0078431)(0.9958,0.0039216)(1,0) BLUE: (0,1)(0.0042,0.99608)(0.0084,0.99216)(0.0126,0.98824)(0.0167,0.98431)(0.0209,0.98039)(0.0251,0.97647)(0.0293,0.97255)(0.0335,0.96471)(0.0377,0.96078)(0.0418,0.95686)(0.046,0.95294)(0.0502,0.94902)(0.0544,0.9451)(0.0586,0.94118)(0.0628,0.93725)(0.0669,0.93333)(0.0711,0.92941)(0.0753,0.92549)(0.0795,0.92157)(0.0837,0.91765)(0.0879,0.91373)(0.0921,0.9098)(0.0962,0.90196)(0.1004,0.89804)(0.1046,0.89412)(0.1088,0.8902)(0.113,0.88627)(0.1172,0.88235)(0.1213,0.87843)(0.1255,0.87451)(0.1297,0.87059)(0.1339,0.86667)(0.1381,0.86275)(0.1423,0.85882)(0.1464,0.8549)(0.1506,0.85098)(0.1548,0.84706)(0.159,0.83922)(0.1632,0.83529)(0.1674,0.83137)(0.1715,0.82745)(0.1757,0.82353)(0.1799,0.81961)(0.1841,0.81569)(0.1883,0.81176)(0.1925,0.80784)(0.1967,0.80392)(0.2008,0.8)(0.205,0.79608)(0.2092,0.79216)(0.2134,0.78824)(0.2176,0.78431)(0.2218,0.77647)(0.2259,0.77255)(0.2301,0.76863)(0.2343,0.76471)(0.2385,0.76078)(0.2427,0.75686)(0.2469,0.75294)(0.251,0.74902)(0.2552,0.7451)(0.2594,0.74118)(0.2636,0.73725)(0.2678,0.73333)(0.272,0.72941)(0.2762,0.72549)(0.2803,0.72157)(0.2845,0.71373)(0.2887,0.7098)(0.2929,0.70588)(0.2971,0.70196)(0.3013,0.69804)(0.3054,0.69412)(0.3096,0.6902)(0.3138,0.68627)(0.318,0.68235)(0.3222,0.67843)(0.3264,0.67451)(0.3305,0.67059)(0.3347,0.66667)(0.3389,0.66275)(0.3431,0.65882)(0.3473,0.65098)(0.3515,0.64706)(0.3556,0.64314)(0.3598,0.63922)(0.364,0.63529)(0.3682,0.63137)(0.3724,0.62745)(0.3766,0.62353)(0.3808,0.61961)(0.3849,0.61569)(0.3891,0.61176)(0.3933,0.60784)(0.3975,0.60392)(0.4017,0.6)(0.4059,0.59608)(0.41,0.58824)(0.4142,0.58431)(0.4184,0.58039)(0.4226,0.57647)(0.4268,0.57255)(0.431,0.56863)(0.4351,0.56471)(0.4393,0.56078)(0.4435,0.55686)(0.4477,0.55294)(0.4519,0.54902)(0.4561,0.5451)(0.4603,0.54118)(0.4644,0.53725)(0.4686,0.53333)(0.4728,0.52549)(0.477,0.52157)(0.4812,0.51765)(0.4854,0.51373)(0.4895,0.5098)(0.4937,0.50588)(0.4979,0.50196)(0.5021,0.49804)(0.5063,0.49412)(0.5105,0.4902)(0.5146,0.48627)(0.5188,0.48235)(0.523,0.47843)(0.5272,0.47451)(0.5314,0.47059)(0.5356,0.46275)(0.5397,0.45882)(0.5439,0.4549)(0.5481,0.45098)(0.5523,0.44706)(0.5565,0.44314)(0.5607,0.43922)(0.5649,0.43529)(0.569,0.43137)(0.5732,0.42745)(0.5774,0.42353)(0.5816,0.41961)(0.5858,0.41569)(0.59,0.41176)(0.5941,0.40784)(0.5983,0.4)(0.6025,0.39608)(0.6067,0.39216)(0.6109,0.38824)(0.6151,0.38431)(0.6192,0.38039)(0.6234,0.37647)(0.6276,0.37255)(0.6318,0.36863)(0.636,0.36471)(0.6402,0.36078)(0.6444,0.35686)(0.6485,0.35294)(0.6527,0.34902)(0.6569,0.3451)(0.6611,0.33725)(0.6653,0.33333)(0.6695,0.32941)(0.6736,0.32549)(0.6778,0.32157)(0.682,0.31765)(0.6862,0.31373)(0.6904,0.3098)(0.6946,0.30588)(0.6987,0.30196)(0.7029,0.29804)(0.7071,0.29412)(0.7113,0.2902)(0.7155,0.28627)(0.7197,0.28235)(0.7238,0.27451)(0.728,0.27059)(0.7322,0.26667)(0.7364,0.26275)(0.7406,0.25882)(0.7448,0.2549)(0.749,0.25098)(0.7531,0.24706)(0.7573,0.24314)(0.7615,0.23922)(0.7657,0.23529)(0.7699,0.23137)(0.7741,0.22745)(0.7782,0.22353)(0.7824,0.21961)(0.7866,0.21176)(0.7908,0.20784)(0.795,0.20392)(0.7992,0.2)(0.8033,0.19608)(0.8075,0.19216)(0.8117,0.18824)(0.8159,0.18431)(0.8201,0.18039)(0.8243,0.17647)(0.8285,0.17255)(0.8326,0.16863)(0.8368,0.16471)(0.841,0.16078)(0.8452,0.15686)(0.8494,0.14902)(0.8536,0.1451)(0.8577,0.14118)(0.8619,0.13725)(0.8661,0.13333)(0.8703,0.12941)(0.8745,0.12549)(0.8787,0.12157)(0.8828,0.11765)(0.887,0.11373)(0.8912,0.1098)(0.8954,0.10588)(0.8996,0.10196)(0.9038,0.098039)(0.9079,0.094118)(0.9121,0.086275)(0.9163,0.082353)(0.9205,0.078431)(0.9247,0.07451)(0.9289,0.070588)(0.9331,0.066667)(0.9372,0.062745)(0.9414,0.058824)(0.9456,0.054902)(0.9498,0.05098)(0.954,0.047059)(0.9582,0.043137)(0.9623,0.039216)(0.9665,0.035294)(0.9707,0.031373)(0.9749,0.023529)(0.9791,0.019608)(0.9833,0.015686)(0.9874,0.011765)(0.9916,0.0078431)(0.9958,0.0039216)(1,0) saods9/ds9/cmaps/h5_autumn.sao000644 000765 000000 00000000225 12567413147 016610 0ustar00joyewheel000000 000000 # SAOimage color table # autumn # created by cptutils 1.46 # Wed Aug 15 23:29:40 2012 PSEUDOCOLOR RED: (0,1)(1,1) GREEN: (0,0)(1,1) BLUE: (0,0)(1,0) saods9/ds9/cmaps/h5_bluered.sao000644 000765 000000 00000000253 12567413147 016722 0ustar00joyewheel000000 000000 # SAOimage color table # bluered # created by cptutils 1.46 # Wed Aug 15 23:29:40 2012 PSEUDOCOLOR RED: (0,0)(0.5,1)(1,1) GREEN: (0,0)(0.5,1)(1,0) BLUE: (0,1)(0.5,1)(1,0) saods9/ds9/cmaps/h5_bone.sao000644 000765 000000 00000006051 12567413147 016225 0ustar00joyewheel000000 000000 # SAOimage color table # bone # created by cptutils 1.46 # Wed Aug 15 23:29:39 2012 PSEUDOCOLOR RED: (0,0)(0.0159,0.011765)(0.0317,0.027451)(0.0476,0.039216)(0.0635,0.054902)(0.0794,0.066667)(0.0952,0.082353)(0.1111,0.094118)(0.127,0.1098)(0.1429,0.12157)(0.1587,0.13725)(0.1746,0.14902)(0.1905,0.16471)(0.2063,0.18039)(0.2222,0.19216)(0.2381,0.20784)(0.254,0.21961)(0.2698,0.23529)(0.2857,0.24706)(0.3016,0.26275)(0.3175,0.27451)(0.3333,0.2902)(0.3492,0.30196)(0.3651,0.31765)(0.381,0.32941)(0.3968,0.3451)(0.4127,0.36078)(0.4286,0.37255)(0.4444,0.38824)(0.4603,0.4)(0.4762,0.41569)(0.4921,0.42745)(0.5079,0.44314)(0.5238,0.4549)(0.5397,0.47059)(0.5556,0.48235)(0.5714,0.49804)(0.5873,0.51373)(0.6032,0.52549)(0.619,0.54118)(0.6349,0.55294)(0.6508,0.56863)(0.6667,0.58039)(0.6825,0.59608)(0.6984,0.60784)(0.7143,0.62353)(0.7302,0.63529)(0.746,0.65098)(0.7619,0.67059)(0.7778,0.69412)(0.7937,0.71765)(0.8095,0.73725)(0.8254,0.76078)(0.8413,0.78039)(0.8571,0.80392)(0.873,0.82353)(0.8889,0.84706)(0.9048,0.86667)(0.9206,0.8902)(0.9365,0.9098)(0.9524,0.93333)(0.9683,0.95294)(0.9841,0.97647)(1,1) GREEN: (0,0)(0.0159,0.011765)(0.0317,0.027451)(0.0476,0.039216)(0.0635,0.054902)(0.0794,0.066667)(0.0952,0.082353)(0.1111,0.094118)(0.127,0.1098)(0.1429,0.12157)(0.1587,0.13725)(0.1746,0.14902)(0.1905,0.16471)(0.2063,0.18039)(0.2222,0.19216)(0.2381,0.20784)(0.254,0.21961)(0.2698,0.23529)(0.2857,0.24706)(0.3016,0.26275)(0.3175,0.27451)(0.3333,0.2902)(0.3492,0.30196)(0.3651,0.31765)(0.381,0.33725)(0.3968,0.35686)(0.4127,0.37647)(0.4286,0.39216)(0.4444,0.41176)(0.4603,0.43137)(0.4762,0.45098)(0.4921,0.47059)(0.5079,0.4902)(0.5238,0.5098)(0.5397,0.52941)(0.5556,0.5451)(0.5714,0.56471)(0.5873,0.58431)(0.6032,0.60392)(0.619,0.62353)(0.6349,0.64314)(0.6508,0.66275)(0.6667,0.67843)(0.6825,0.69804)(0.6984,0.71765)(0.7143,0.73725)(0.7302,0.75686)(0.746,0.77647)(0.7619,0.78824)(0.7778,0.80392)(0.7937,0.81569)(0.8095,0.83137)(0.8254,0.84706)(0.8413,0.85882)(0.8571,0.87451)(0.873,0.88627)(0.8889,0.90196)(0.9048,0.91373)(0.9206,0.92941)(0.9365,0.94118)(0.9524,0.95686)(0.9683,0.96863)(0.9841,0.98431)(1,1) BLUE: (0,0.0039216)(0.0159,0.023529)(0.0317,0.043137)(0.0476,0.058824)(0.0635,0.078431)(0.0794,0.098039)(0.0952,0.11765)(0.1111,0.13725)(0.127,0.15686)(0.1429,0.17647)(0.1587,0.19608)(0.1746,0.21176)(0.1905,0.23137)(0.2063,0.25098)(0.2222,0.27059)(0.2381,0.2902)(0.254,0.3098)(0.2698,0.32941)(0.2857,0.3451)(0.3016,0.36471)(0.3175,0.38431)(0.3333,0.40392)(0.3492,0.42353)(0.3651,0.44314)(0.381,0.4549)(0.3968,0.47059)(0.4127,0.48235)(0.4286,0.49804)(0.4444,0.51373)(0.4603,0.52549)(0.4762,0.54118)(0.4921,0.55294)(0.5079,0.56863)(0.5238,0.58039)(0.5397,0.59608)(0.5556,0.60784)(0.5714,0.62353)(0.5873,0.63529)(0.6032,0.65098)(0.619,0.66667)(0.6349,0.67843)(0.6508,0.69412)(0.6667,0.70588)(0.6825,0.72157)(0.6984,0.73333)(0.7143,0.74902)(0.7302,0.76078)(0.746,0.77647)(0.7619,0.78824)(0.7778,0.80392)(0.7937,0.81569)(0.8095,0.83137)(0.8254,0.84706)(0.8413,0.85882)(0.8571,0.87451)(0.873,0.88627)(0.8889,0.90196)(0.9048,0.91373)(0.9206,0.92941)(0.9365,0.94118)(0.9524,0.95686)(0.9683,0.96863)(0.9841,0.98431)(1,1) saods9/ds9/cmaps/h5_cool.sao000644 000765 000000 00000000223 12567413147 016231 0ustar00joyewheel000000 000000 # SAOimage color table # cool # created by cptutils 1.46 # Wed Aug 15 23:29:39 2012 PSEUDOCOLOR RED: (0,0)(1,1) GREEN: (0,1)(1,0) BLUE: (0,1)(1,1) saods9/ds9/cmaps/h5_copper.sao000644 000765 000000 00000005756 12567413147 016605 0ustar00joyewheel000000 000000 # SAOimage color table # copper # created by cptutils 1.46 # Wed Aug 15 23:29:39 2012 PSEUDOCOLOR RED: (0,0)(0.0159,0.019608)(0.0317,0.039216)(0.0476,0.058824)(0.0635,0.078431)(0.0794,0.098039)(0.0952,0.11765)(0.1111,0.13725)(0.127,0.15686)(0.1429,0.17647)(0.1587,0.19608)(0.1746,0.21569)(0.1905,0.23529)(0.2063,0.2549)(0.2222,0.27451)(0.2381,0.29412)(0.254,0.31373)(0.2698,0.33725)(0.2857,0.35686)(0.3016,0.37647)(0.3175,0.39608)(0.3333,0.41569)(0.3492,0.43529)(0.3651,0.4549)(0.381,0.47451)(0.3968,0.49412)(0.4127,0.51373)(0.4286,0.53333)(0.4444,0.55294)(0.4603,0.57255)(0.4762,0.59216)(0.4921,0.61176)(0.5079,0.63137)(0.5238,0.65098)(0.5397,0.67451)(0.5556,0.69412)(0.5714,0.71373)(0.5873,0.73333)(0.6032,0.75294)(0.619,0.77255)(0.6349,0.79216)(0.6508,0.81176)(0.6667,0.83137)(0.6825,0.85098)(0.6984,0.87059)(0.7143,0.8902)(0.7302,0.9098)(0.746,0.92941)(0.7619,0.94902)(0.7778,0.96863)(0.7937,0.98824)(0.8095,1)(0.8254,1)(0.8413,1)(0.8571,1)(0.873,1)(0.8889,1)(0.9048,1)(0.9206,1)(0.9365,1)(0.9524,1)(0.9683,1)(0.9841,1)(1,1) GREEN: (0,0)(0.0159,0.011765)(0.0317,0.023529)(0.0476,0.035294)(0.0635,0.047059)(0.0794,0.058824)(0.0952,0.070588)(0.1111,0.086275)(0.127,0.098039)(0.1429,0.1098)(0.1587,0.12157)(0.1746,0.13333)(0.1905,0.1451)(0.2063,0.16078)(0.2222,0.17255)(0.2381,0.18431)(0.254,0.19608)(0.2698,0.20784)(0.2857,0.21961)(0.3016,0.23529)(0.3175,0.24706)(0.3333,0.25882)(0.3492,0.27059)(0.3651,0.28235)(0.381,0.29412)(0.3968,0.3098)(0.4127,0.32157)(0.4286,0.33333)(0.4444,0.3451)(0.4603,0.35686)(0.4762,0.36863)(0.4921,0.38431)(0.5079,0.39608)(0.5238,0.40784)(0.5397,0.41961)(0.5556,0.43137)(0.5714,0.44314)(0.5873,0.4549)(0.6032,0.47059)(0.619,0.48235)(0.6349,0.49412)(0.6508,0.50588)(0.6667,0.51765)(0.6825,0.52941)(0.6984,0.5451)(0.7143,0.55686)(0.7302,0.56863)(0.746,0.58039)(0.7619,0.59216)(0.7778,0.60392)(0.7937,0.61961)(0.8095,0.63137)(0.8254,0.64314)(0.8413,0.6549)(0.8571,0.66667)(0.873,0.67843)(0.8889,0.69412)(0.9048,0.70588)(0.9206,0.71765)(0.9365,0.72941)(0.9524,0.74118)(0.9683,0.75294)(0.9841,0.76863)(1,0.78039) BLUE: (0,0)(0.0159,0.0078431)(0.0317,0.015686)(0.0476,0.023529)(0.0635,0.031373)(0.0794,0.039216)(0.0952,0.047059)(0.1111,0.054902)(0.127,0.062745)(0.1429,0.070588)(0.1587,0.078431)(0.1746,0.086275)(0.1905,0.094118)(0.2063,0.10196)(0.2222,0.1098)(0.2381,0.11765)(0.254,0.12549)(0.2698,0.13333)(0.2857,0.14118)(0.3016,0.14902)(0.3175,0.15686)(0.3333,0.16471)(0.3492,0.17255)(0.3651,0.18039)(0.381,0.18824)(0.3968,0.19608)(0.4127,0.20392)(0.4286,0.21176)(0.4444,0.21961)(0.4603,0.22745)(0.4762,0.23529)(0.4921,0.24314)(0.5079,0.25098)(0.5238,0.25882)(0.5397,0.26667)(0.5556,0.27451)(0.5714,0.28235)(0.5873,0.2902)(0.6032,0.29804)(0.619,0.30588)(0.6349,0.31373)(0.6508,0.32157)(0.6667,0.32941)(0.6825,0.33725)(0.6984,0.3451)(0.7143,0.35294)(0.7302,0.36078)(0.746,0.36863)(0.7619,0.37647)(0.7778,0.38431)(0.7937,0.39216)(0.8095,0.4)(0.8254,0.40784)(0.8413,0.41569)(0.8571,0.42353)(0.873,0.43137)(0.8889,0.43922)(0.9048,0.44706)(0.9206,0.4549)(0.9365,0.46275)(0.9524,0.47059)(0.9683,0.47843)(0.9841,0.48627)(1,0.49412) saods9/ds9/cmaps/h5_dkbluered.sao000644 000765 000000 00000002427 12567413147 017246 0ustar00joyewheel000000 000000 # SAOimage color table # dkbluered # created by cptutils 1.46 # Wed Aug 15 23:29:40 2012 PSEUDOCOLOR RED: (0,0.027451)(0.0333,0.066667)(0.0667,0.098039)(0.1,0.1098)(0.1333,0.098039)(0.1667,0.086275)(0.2,0.058824)(0.2333,0.0078431)(0.2667,0.078431)(0.3,0.21961)(0.3333,0.34902)(0.3667,0.47843)(0.4,0.60784)(0.4333,0.74902)(0.4667,0.87843)(0.5,1)(0.5333,1)(0.5667,1)(0.6,1)(0.6333,1)(0.6667,1)(0.7,1)(0.7333,1)(0.7667,0.96863)(0.8,0.85882)(0.8333,0.74902)(0.8667,0.63922)(0.9,0.52941)(0.9333,0.41961)(0.9667,0.3098)(1,0.20784) GREEN: (0,0)(0.0333,0)(0.0667,0)(0.1,0)(0.1333,0)(0.1667,0)(0.2,0)(0.2333,0)(0.2667,0.12941)(0.3,0.29804)(0.3333,0.45882)(0.3667,0.6)(0.4,0.72941)(0.4333,0.82745)(0.4667,0.92941)(0.5,1)(0.5333,0.92941)(0.5667,0.82745)(0.6,0.72941)(0.6333,0.6)(0.6667,0.45882)(0.7,0.29804)(0.7333,0.12941)(0.7667,0)(0.8,0)(0.8333,0)(0.8667,0)(0.9,0)(0.9333,0)(0.9667,0)(1,0) BLUE: (0,0.2)(0.0333,0.3098)(0.0667,0.41961)(0.1,0.52941)(0.1333,0.63922)(0.1667,0.74902)(0.2,0.85882)(0.2333,0.96863)(0.2667,1)(0.3,1)(0.3333,1)(0.3667,1)(0.4,1)(0.4333,1)(0.4667,1)(0.5,1)(0.5333,0.87843)(0.5667,0.74902)(0.6,0.60784)(0.6333,0.47843)(0.6667,0.34902)(0.7,0.21961)(0.7333,0.078431)(0.7667,0.0078431)(0.8,0.058824)(0.8333,0.086275)(0.8667,0.098039)(0.9,0.1098)(0.9333,0.098039)(0.9667,0.066667)(1,0.027451) saods9/ds9/cmaps/h5_gray.sao000644 000765 000000 00000000223 12567413147 016237 0ustar00joyewheel000000 000000 # SAOimage color table # gray # created by cptutils 1.46 # Wed Aug 15 23:29:39 2012 PSEUDOCOLOR RED: (0,1)(1,0) GREEN: (0,1)(1,0) BLUE: (0,1)(1,0) saods9/ds9/cmaps/h5_green.sao000644 000765 000000 00000000224 12567413147 016376 0ustar00joyewheel000000 000000 # SAOimage color table # green # created by cptutils 1.46 # Wed Aug 15 23:29:39 2012 PSEUDOCOLOR RED: (0,1)(1,0) GREEN: (0,1)(1,1) BLUE: (0,1)(1,0) saods9/ds9/cmaps/h5_hot.sao000644 000765 000000 00000004462 12567413147 016100 0ustar00joyewheel000000 000000 # SAOimage color table # hot # created by cptutils 1.46 # Wed Aug 15 23:29:39 2012 PSEUDOCOLOR RED: (0,0.039216)(0.0159,0.082353)(0.0317,0.12157)(0.0476,0.16471)(0.0635,0.20784)(0.0794,0.24706)(0.0952,0.2902)(0.1111,0.32941)(0.127,0.37255)(0.1429,0.41569)(0.1587,0.4549)(0.1746,0.49804)(0.1905,0.54118)(0.2063,0.58039)(0.2222,0.62353)(0.2381,0.66667)(0.254,0.70588)(0.2698,0.74902)(0.2857,0.78824)(0.3016,0.83137)(0.3175,0.87451)(0.3333,0.91373)(0.3492,0.95686)(0.3651,1)(0.381,1)(0.3968,1)(0.4127,1)(0.4286,1)(0.4444,1)(0.4603,1)(0.4762,1)(0.4921,1)(0.5079,1)(0.5238,1)(0.5397,1)(0.5556,1)(0.5714,1)(0.5873,1)(0.6032,1)(0.619,1)(0.6349,1)(0.6508,1)(0.6667,1)(0.6825,1)(0.6984,1)(0.7143,1)(0.7302,1)(0.746,1)(0.7619,1)(0.7778,1)(0.7937,1)(0.8095,1)(0.8254,1)(0.8413,1)(0.8571,1)(0.873,1)(0.8889,1)(0.9048,1)(0.9206,1)(0.9365,1)(0.9524,1)(0.9683,1)(0.9841,1)(1,1) GREEN: (0,0)(0.0159,0)(0.0317,0)(0.0476,0)(0.0635,0)(0.0794,0)(0.0952,0)(0.1111,0)(0.127,0)(0.1429,0)(0.1587,0)(0.1746,0)(0.1905,0)(0.2063,0)(0.2222,0)(0.2381,0)(0.254,0)(0.2698,0)(0.2857,0)(0.3016,0)(0.3175,0)(0.3333,0)(0.3492,0)(0.3651,0)(0.381,0.039216)(0.3968,0.082353)(0.4127,0.12157)(0.4286,0.16471)(0.4444,0.20784)(0.4603,0.24706)(0.4762,0.2902)(0.4921,0.32941)(0.5079,0.37255)(0.5238,0.41569)(0.5397,0.4549)(0.5556,0.49804)(0.5714,0.54118)(0.5873,0.58039)(0.6032,0.62353)(0.619,0.66667)(0.6349,0.70588)(0.6508,0.74902)(0.6667,0.78824)(0.6825,0.83137)(0.6984,0.87451)(0.7143,0.91373)(0.7302,0.95686)(0.746,1)(0.7619,1)(0.7778,1)(0.7937,1)(0.8095,1)(0.8254,1)(0.8413,1)(0.8571,1)(0.873,1)(0.8889,1)(0.9048,1)(0.9206,1)(0.9365,1)(0.9524,1)(0.9683,1)(0.9841,1)(1,1) BLUE: (0,0)(0.0159,0)(0.0317,0)(0.0476,0)(0.0635,0)(0.0794,0)(0.0952,0)(0.1111,0)(0.127,0)(0.1429,0)(0.1587,0)(0.1746,0)(0.1905,0)(0.2063,0)(0.2222,0)(0.2381,0)(0.254,0)(0.2698,0)(0.2857,0)(0.3016,0)(0.3175,0)(0.3333,0)(0.3492,0)(0.3651,0)(0.381,0)(0.3968,0)(0.4127,0)(0.4286,0)(0.4444,0)(0.4603,0)(0.4762,0)(0.4921,0)(0.5079,0)(0.5238,0)(0.5397,0)(0.5556,0)(0.5714,0)(0.5873,0)(0.6032,0)(0.619,0)(0.6349,0)(0.6508,0)(0.6667,0)(0.6825,0)(0.6984,0)(0.7143,0)(0.7302,0)(0.746,0)(0.7619,0.058824)(0.7778,0.12157)(0.7937,0.18431)(0.8095,0.24706)(0.8254,0.3098)(0.8413,0.37255)(0.8571,0.43529)(0.873,0.49804)(0.8889,0.56078)(0.9048,0.62353)(0.9206,0.68627)(0.9365,0.74902)(0.9524,0.81176)(0.9683,0.87451)(0.9841,0.93725)(1,1) saods9/ds9/cmaps/h5_hsv.sao000644 000765 000000 00000004472 12567413147 016107 0ustar00joyewheel000000 000000 # SAOimage color table # hsv # created by cptutils 1.46 # Wed Aug 15 23:29:38 2012 PSEUDOCOLOR RED: (0,1)(0.0159,1)(0.0317,1)(0.0476,1)(0.0635,1)(0.0794,1)(0.0952,1)(0.1111,1)(0.127,1)(0.1429,1)(0.1587,1)(0.1746,0.96863)(0.1905,0.87451)(0.2063,0.78039)(0.2222,0.68627)(0.2381,0.59216)(0.254,0.49804)(0.2698,0.40392)(0.2857,0.3098)(0.3016,0.21569)(0.3175,0.12157)(0.3333,0.027451)(0.3492,0)(0.3651,0)(0.381,0)(0.3968,0)(0.4127,0)(0.4286,0)(0.4444,0)(0.4603,0)(0.4762,0)(0.4921,0)(0.5079,0)(0.5238,0)(0.5397,0)(0.5556,0)(0.5714,0)(0.5873,0)(0.6032,0)(0.619,0)(0.6349,0)(0.6508,0)(0.6667,0)(0.6825,0.027451)(0.6984,0.12157)(0.7143,0.21569)(0.7302,0.3098)(0.746,0.40392)(0.7619,0.49804)(0.7778,0.59216)(0.7937,0.68627)(0.8095,0.78039)(0.8254,0.87451)(0.8413,0.96863)(0.8571,1)(0.873,1)(0.8889,1)(0.9048,1)(0.9206,1)(0.9365,1)(0.9524,1)(0.9683,1)(0.9841,1)(1,1) GREEN: (0,0)(0.0159,0.090196)(0.0317,0.18431)(0.0476,0.27843)(0.0635,0.37255)(0.0794,0.46667)(0.0952,0.56078)(0.1111,0.6549)(0.127,0.74902)(0.1429,0.84314)(0.1587,0.93725)(0.1746,1)(0.1905,1)(0.2063,1)(0.2222,1)(0.2381,1)(0.254,1)(0.2698,1)(0.2857,1)(0.3016,1)(0.3175,1)(0.3333,1)(0.3492,1)(0.3651,1)(0.381,1)(0.3968,1)(0.4127,1)(0.4286,1)(0.4444,1)(0.4603,1)(0.4762,1)(0.4921,1)(0.5079,1)(0.5238,0.90588)(0.5397,0.81176)(0.5556,0.71765)(0.5714,0.62353)(0.5873,0.52941)(0.6032,0.43529)(0.619,0.34118)(0.6349,0.24706)(0.6508,0.15294)(0.6667,0.058824)(0.6825,0)(0.6984,0)(0.7143,0)(0.7302,0)(0.746,0)(0.7619,0)(0.7778,0)(0.7937,0)(0.8095,0)(0.8254,0)(0.8413,0)(0.8571,0)(0.873,0)(0.8889,0)(0.9048,0)(0.9206,0)(0.9365,0)(0.9524,0)(0.9683,0)(0.9841,0)(1,0) BLUE: (0,0)(0.0159,0)(0.0317,0)(0.0476,0)(0.0635,0)(0.0794,0)(0.0952,0)(0.1111,0)(0.127,0)(0.1429,0)(0.1587,0)(0.1746,0)(0.1905,0)(0.2063,0)(0.2222,0)(0.2381,0)(0.254,0)(0.2698,0)(0.2857,0)(0.3016,0)(0.3175,0)(0.3333,0)(0.3492,0.058824)(0.3651,0.15294)(0.381,0.24706)(0.3968,0.34118)(0.4127,0.43529)(0.4286,0.52941)(0.4444,0.62353)(0.4603,0.71765)(0.4762,0.81176)(0.4921,0.90588)(0.5079,1)(0.5238,1)(0.5397,1)(0.5556,1)(0.5714,1)(0.5873,1)(0.6032,1)(0.619,1)(0.6349,1)(0.6508,1)(0.6667,1)(0.6825,1)(0.6984,1)(0.7143,1)(0.7302,1)(0.746,1)(0.7619,1)(0.7778,1)(0.7937,1)(0.8095,1)(0.8254,1)(0.8413,1)(0.8571,0.93725)(0.873,0.84314)(0.8889,0.74902)(0.9048,0.6549)(0.9206,0.56078)(0.9365,0.46667)(0.9524,0.37255)(0.9683,0.27843)(0.9841,0.18431)(1,0.090196) saods9/ds9/cmaps/h5_jet.sao000644 000765 000000 00000001146 12567413147 016064 0ustar00joyewheel000000 000000 # SAOimage color table # jet # created by cptutils 1.46 # Wed Aug 15 23:29:38 2012 PSEUDOCOLOR RED: (0,0)(0.0667,0)(0.1333,0)(0.2,0)(0.2667,0)(0.3333,0)(0.4,0.24706)(0.4667,0.49804)(0.5333,0.74902)(0.6,1)(0.6667,1)(0.7333,1)(0.8,1)(0.8667,1)(0.9333,1)(1,0.74902) GREEN: (0,0)(0.0667,0)(0.1333,0.24706)(0.2,0.49804)(0.2667,0.74902)(0.3333,1)(0.4,1)(0.4667,1)(0.5333,1)(0.6,1)(0.6667,1)(0.7333,0.74902)(0.8,0.49804)(0.8667,0.24706)(0.9333,0)(1,0) BLUE: (0,0.74902)(0.0667,1)(0.1333,1)(0.2,1)(0.2667,1)(0.3333,1)(0.4,1)(0.4667,0.74902)(0.5333,0.49804)(0.6,0.24706)(0.6667,0)(0.7333,0)(0.8,0)(0.8667,0)(0.9333,0)(1,0) saods9/ds9/cmaps/h5_pink.sao000644 000765 000000 00000006015 12567413147 016243 0ustar00joyewheel000000 000000 # SAOimage color table # pink # created by cptutils 1.46 # Wed Aug 15 23:29:39 2012 PSEUDOCOLOR RED: (0,0.11765)(0.0159,0.19216)(0.0317,0.24706)(0.0476,0.29412)(0.0635,0.33333)(0.0794,0.36863)(0.0952,0.4)(0.1111,0.42745)(0.127,0.4549)(0.1429,0.48235)(0.1587,0.50588)(0.1746,0.52941)(0.1905,0.55294)(0.2063,0.57255)(0.2222,0.59608)(0.2381,0.61569)(0.254,0.63529)(0.2698,0.6549)(0.2857,0.67059)(0.3016,0.6902)(0.3175,0.70588)(0.3333,0.72549)(0.3492,0.74118)(0.3651,0.75686)(0.381,0.76471)(0.3968,0.77255)(0.4127,0.77647)(0.4286,0.78431)(0.4444,0.79216)(0.4603,0.8)(0.4762,0.80392)(0.4921,0.81176)(0.5079,0.81961)(0.5238,0.82353)(0.5397,0.83137)(0.5556,0.83529)(0.5714,0.84314)(0.5873,0.85098)(0.6032,0.8549)(0.619,0.86275)(0.6349,0.86667)(0.6508,0.87451)(0.6667,0.87843)(0.6825,0.88627)(0.6984,0.8902)(0.7143,0.89804)(0.7302,0.90196)(0.746,0.9098)(0.7619,0.91373)(0.7778,0.92157)(0.7937,0.92549)(0.8095,0.93333)(0.8254,0.93725)(0.8413,0.9451)(0.8571,0.94902)(0.873,0.95294)(0.8889,0.96078)(0.9048,0.96471)(0.9206,0.97255)(0.9365,0.97647)(0.9524,0.98039)(0.9683,0.98824)(0.9841,0.99216)(1,1) GREEN: (0,0)(0.0159,0.10196)(0.0317,0.1451)(0.0476,0.17647)(0.0635,0.20392)(0.0794,0.22745)(0.0952,0.25098)(0.1111,0.27059)(0.127,0.2902)(0.1429,0.30588)(0.1587,0.32157)(0.1746,0.34118)(0.1905,0.35294)(0.2063,0.36863)(0.2222,0.38431)(0.2381,0.39608)(0.254,0.40784)(0.2698,0.42353)(0.2857,0.43529)(0.3016,0.44706)(0.3175,0.45882)(0.3333,0.47059)(0.3492,0.48235)(0.3651,0.4902)(0.381,0.51373)(0.3968,0.53725)(0.4127,0.56078)(0.4286,0.58039)(0.4444,0.60392)(0.4603,0.62353)(0.4762,0.64314)(0.4921,0.65882)(0.5079,0.67843)(0.5238,0.69804)(0.5397,0.71373)(0.5556,0.72941)(0.5714,0.74902)(0.5873,0.76471)(0.6032,0.78039)(0.619,0.79608)(0.6349,0.81176)(0.6508,0.82353)(0.6667,0.83922)(0.6825,0.8549)(0.6984,0.86667)(0.7143,0.88235)(0.7302,0.89412)(0.746,0.9098)(0.7619,0.91373)(0.7778,0.92157)(0.7937,0.92549)(0.8095,0.93333)(0.8254,0.93725)(0.8413,0.9451)(0.8571,0.94902)(0.873,0.95294)(0.8889,0.96078)(0.9048,0.96471)(0.9206,0.97255)(0.9365,0.97647)(0.9524,0.98039)(0.9683,0.98824)(0.9841,0.99216)(1,1) BLUE: (0,0)(0.0159,0.10196)(0.0317,0.1451)(0.0476,0.17647)(0.0635,0.20392)(0.0794,0.22745)(0.0952,0.25098)(0.1111,0.27059)(0.127,0.2902)(0.1429,0.30588)(0.1587,0.32157)(0.1746,0.34118)(0.1905,0.35294)(0.2063,0.36863)(0.2222,0.38431)(0.2381,0.39608)(0.254,0.40784)(0.2698,0.42353)(0.2857,0.43529)(0.3016,0.44706)(0.3175,0.45882)(0.3333,0.47059)(0.3492,0.48235)(0.3651,0.4902)(0.381,0.50196)(0.3968,0.51373)(0.4127,0.52157)(0.4286,0.53333)(0.4444,0.54118)(0.4603,0.55294)(0.4762,0.56078)(0.4921,0.57255)(0.5079,0.58039)(0.5238,0.58824)(0.5397,0.59608)(0.5556,0.60784)(0.5714,0.61569)(0.5873,0.62353)(0.6032,0.63137)(0.619,0.63922)(0.6349,0.64706)(0.6508,0.6549)(0.6667,0.66667)(0.6825,0.67451)(0.6984,0.68235)(0.7143,0.68627)(0.7302,0.69412)(0.746,0.70196)(0.7619,0.72549)(0.7778,0.7451)(0.7937,0.76863)(0.8095,0.78824)(0.8254,0.80784)(0.8413,0.82745)(0.8571,0.84314)(0.873,0.86275)(0.8889,0.88235)(0.9048,0.89804)(0.9206,0.91765)(0.9365,0.93333)(0.9524,0.94902)(0.9683,0.96471)(0.9841,0.98039)(1,1) saods9/ds9/cmaps/h5_spring.sao000644 000765 000000 00000001237 12567413147 016605 0ustar00joyewheel000000 000000 # SAOimage color table # spring # created by cptutils 1.46 # Wed Aug 15 23:29:39 2012 PSEUDOCOLOR RED: (0,1)(0.0667,1)(0.1333,1)(0.2,1)(0.2667,1)(0.3333,1)(0.4,1)(0.4667,1)(0.5333,1)(0.6,1)(0.6667,1)(0.7333,1)(0.8,1)(0.8667,1)(0.9333,1)(1,1) GREEN: (0,0)(0.0667,0.066667)(0.1333,0.12941)(0.2,0.2)(0.2667,0.26667)(0.3333,0.32941)(0.4,0.4)(0.4667,0.46667)(0.5333,0.52941)(0.6,0.6)(0.6667,0.66667)(0.7333,0.72941)(0.8,0.8)(0.8667,0.86667)(0.9333,0.92941)(1,1) BLUE: (0,1)(0.0667,0.92941)(0.1333,0.86667)(0.2,0.8)(0.2667,0.72941)(0.3333,0.66667)(0.4,0.6)(0.4667,0.52941)(0.5333,0.46667)(0.6,0.4)(0.6667,0.32941)(0.7333,0.26667)(0.8,0.2)(0.8667,0.12941)(0.9333,0.066667)(1,0) saods9/ds9/cmaps/h5_summer.sao000644 000765 000000 00000001314 12567413147 016607 0ustar00joyewheel000000 000000 # SAOimage color table # summer # created by cptutils 1.46 # Wed Aug 15 23:29:38 2012 PSEUDOCOLOR RED: (0,0)(0.0667,0.066667)(0.1333,0.12941)(0.2,0.2)(0.2667,0.26667)(0.3333,0.32941)(0.4,0.4)(0.4667,0.46667)(0.5333,0.52941)(0.6,0.6)(0.6667,0.66667)(0.7333,0.72941)(0.8,0.8)(0.8667,0.86667)(0.9333,0.92941)(1,1) GREEN: (0,0.49804)(0.0667,0.52941)(0.1333,0.56471)(0.2,0.6)(0.2667,0.63137)(0.3333,0.66667)(0.4,0.69804)(0.4667,0.72941)(0.5333,0.76471)(0.6,0.8)(0.6667,0.83137)(0.7333,0.86667)(0.8,0.89804)(0.8667,0.92941)(0.9333,0.96471)(1,1) BLUE: (0,0.4)(0.0667,0.4)(0.1333,0.4)(0.2,0.4)(0.2667,0.4)(0.3333,0.4)(0.4,0.4)(0.4667,0.4)(0.5333,0.4)(0.6,0.4)(0.6667,0.4)(0.7333,0.4)(0.8,0.4)(0.8667,0.4)(0.9333,0.4)(1,0.4) saods9/ds9/cmaps/h5_winter.sao000644 000765 000000 00000000233 12567413147 016606 0ustar00joyewheel000000 000000 # SAOimage color table # winter # created by cptutils 1.46 # Wed Aug 15 23:29:39 2012 PSEUDOCOLOR RED: (0,0)(1,0) GREEN: (0,0)(1,1) BLUE: (0,1)(1,0.49804) saods9/ds9/cmaps/h5_yarg.sao000644 000765 000000 00000000223 12567413147 016237 0ustar00joyewheel000000 000000 # SAOimage color table # yarg # created by cptutils 1.46 # Wed Aug 15 23:29:38 2012 PSEUDOCOLOR RED: (0,0)(1,1) GREEN: (0,0)(1,1) BLUE: (0,0)(1,1) saods9/ds9/cmaps/h5_yellow.sao000644 000765 000000 00000000225 12567413147 016612 0ustar00joyewheel000000 000000 # SAOimage color table # yellow # created by cptutils 1.46 # Wed Aug 15 23:29:39 2012 PSEUDOCOLOR RED: (0,1)(1,1) GREEN: (0,1)(1,1) BLUE: (0,1)(1,0) saods9/ds9/cmaps/tpglarf.sao000644 000765 000000 00000001152 12567403474 016344 0ustar00joyewheel000000 000000 # SAOimage color table # tpglarf # created by cptutils 1.46 # Wed Aug 15 23:31:06 2012 PSEUDOCOLOR RED: (0,0.56863)(0.0071,0.64706)(0.0286,0.69804)(0.0857,0.78824)(0.1429,0.83529)(0.2857,0.83137)(0.4286,0.83137)(0.5714,0.83529)(0.7143,0.87059)(0.8571,0.93333)(1,0.96078) GREEN: (0,0.53725)(0.0071,0.61569)(0.0286,0.65882)(0.0857,0.74118)(0.1429,0.78824)(0.2857,0.72157)(0.4286,0.75686)(0.5714,0.81961)(0.7143,0.87059)(0.8571,0.93333)(1,0.96078) BLUE: (0,0.50588)(0.0071,0.57255)(0.0286,0.61176)(0.0857,0.67451)(0.1429,0.70196)(0.2857,0.64314)(0.4286,0.71373)(0.5714,0.81176)(0.7143,0.87059)(0.8571,0.93333)(1,0.96078) saods9/ds9/cmaps/tpglarm.sao000644 000765 000000 00000001152 12567403474 016353 0ustar00joyewheel000000 000000 # SAOimage color table # tpglarm # created by cptutils 1.46 # Wed Aug 15 23:31:06 2012 PSEUDOCOLOR RED: (0,0.56863)(0.0071,0.64706)(0.0286,0.69804)(0.0857,0.78824)(0.1429,0.83529)(0.2857,0.83137)(0.4286,0.83137)(0.5714,0.83529)(0.7143,0.87059)(0.8571,0.93333)(1,0.96078) GREEN: (0,0.53725)(0.0071,0.61569)(0.0286,0.65882)(0.0857,0.74118)(0.1429,0.78824)(0.2857,0.72157)(0.4286,0.75686)(0.5714,0.81961)(0.7143,0.87059)(0.8571,0.93333)(1,0.96078) BLUE: (0,0.50588)(0.0071,0.57255)(0.0286,0.61176)(0.0857,0.67451)(0.1429,0.70196)(0.2857,0.64314)(0.4286,0.71373)(0.5714,0.81176)(0.7143,0.87059)(0.8571,0.93333)(1,0.96078) saods9/ds9/cmaps/tpglhcf.sao000644 000765 000000 00000001150 12567403474 016332 0ustar00joyewheel000000 000000 # SAOimage color table # tpglhcf # created by cptutils 1.46 # Wed Aug 15 23:31:07 2012 PSEUDOCOLOR RED: (0,0.43137)(0.0071,0.49804)(0.0286,0.56471)(0.0857,0.69804)(0.1429,0.82745)(0.2857,0.83137)(0.4282,0.83529)(0.5714,0.83922)(0.7143,0.87059)(0.8571,0.93333)(1,0.96078) GREEN: (0,0.56863)(0.0071,0.63529)(0.0286,0.68235)(0.0857,0.7451)(0.1429,0.78824)(0.2857,0.72157)(0.4282,0.75294)(0.5714,0.81961)(0.7143,0.87059)(0.8571,0.93333)(1,0.96471) BLUE: (0,0.54118)(0.0071,0.61569)(0.0286,0.65882)(0.0857,0.69804)(0.1429,0.70196)(0.2857,0.64314)(0.4282,0.7098)(0.5714,0.80784)(0.7143,0.87059)(0.8571,0.93333)(1,0.96078) saods9/ds9/cmaps/tpglhcm.sao000644 000765 000000 00000001150 12567403474 016341 0ustar00joyewheel000000 000000 # SAOimage color table # tpglhcm # created by cptutils 1.46 # Wed Aug 15 23:31:07 2012 PSEUDOCOLOR RED: (0,0.43137)(0.0071,0.49804)(0.0286,0.56471)(0.0857,0.69804)(0.1429,0.82745)(0.2857,0.83137)(0.4286,0.83529)(0.5714,0.83922)(0.7143,0.87059)(0.8571,0.93333)(1,0.96078) GREEN: (0,0.56863)(0.0071,0.63529)(0.0286,0.68235)(0.0857,0.7451)(0.1429,0.78824)(0.2857,0.72157)(0.4286,0.75294)(0.5714,0.81961)(0.7143,0.87059)(0.8571,0.93333)(1,0.96471) BLUE: (0,0.54118)(0.0071,0.61569)(0.0286,0.65882)(0.0857,0.69804)(0.1429,0.70196)(0.2857,0.64314)(0.4286,0.7098)(0.5714,0.80784)(0.7143,0.87059)(0.8571,0.93333)(1,0.96078) saods9/ds9/cmaps/tpglhwf.sao000644 000765 000000 00000001147 12567403474 016364 0ustar00joyewheel000000 000000 # SAOimage color table # tpglhwf # created by cptutils 1.46 # Wed Aug 15 23:31:06 2012 PSEUDOCOLOR RED: (0,0.41176)(0.0071,0.46275)(0.0286,0.51373)(0.0857,0.64706)(0.1429,0.82745)(0.2857,0.83137)(0.4282,0.83137)(0.5714,0.83922)(0.7143,0.87059)(0.8571,0.93333)(1,0.96471) GREEN: (0,0.59608)(0.0071,0.66275)(0.0286,0.7098)(0.0857,0.75294)(0.1429,0.78824)(0.2857,0.72157)(0.4282,0.75294)(0.5714,0.81961)(0.7143,0.86667)(0.8571,0.93333)(1,0.96863) BLUE: (0,0.52157)(0.0071,0.57255)(0.0286,0.60784)(0.0857,0.6549)(0.1429,0.70196)(0.2857,0.64314)(0.4282,0.7098)(0.5714,0.80784)(0.7143,0.87059)(0.8571,0.93333)(1,0.96471) saods9/ds9/cmaps/tpglhwm.sao000644 000765 000000 00000001147 12567403474 016373 0ustar00joyewheel000000 000000 # SAOimage color table # tpglhwm # created by cptutils 1.46 # Wed Aug 15 23:31:06 2012 PSEUDOCOLOR RED: (0,0.41176)(0.0071,0.46275)(0.0286,0.51373)(0.0857,0.64706)(0.1429,0.82745)(0.2857,0.83137)(0.4286,0.83137)(0.5714,0.83922)(0.7143,0.87059)(0.8571,0.93333)(1,0.96471) GREEN: (0,0.59608)(0.0071,0.66275)(0.0286,0.7098)(0.0857,0.75294)(0.1429,0.78824)(0.2857,0.72157)(0.4286,0.75294)(0.5714,0.81961)(0.7143,0.86667)(0.8571,0.93333)(1,0.96863) BLUE: (0,0.52157)(0.0071,0.57255)(0.0286,0.60784)(0.0857,0.6549)(0.1429,0.70196)(0.2857,0.64314)(0.4286,0.7098)(0.5714,0.80784)(0.7143,0.87059)(0.8571,0.93333)(1,0.96471) saods9/ds9/cmaps/tpglpof.sao000644 000765 000000 00000000675 12567403474 016371 0ustar00joyewheel000000 000000 # SAOimage color table # tpglpof # created by cptutils 1.46 # Wed Aug 15 23:31:07 2012 PSEUDOCOLOR RED: (0,0.54118)(0.0125,0.63529)(0.05,0.67843)(0.15,0.72157)(0.25,0.79216)(0.5,0.85882)(0.7494,0.93725)(1,0.95686) GREEN: (0,0.61176)(0.0125,0.69412)(0.05,0.7451)(0.15,0.78431)(0.25,0.84314)(0.5,0.89804)(0.7494,0.94902)(1,0.97255) BLUE: (0,0.70196)(0.0125,0.79216)(0.05,0.83529)(0.15,0.87451)(0.25,0.9098)(0.5,0.94118)(0.7494,0.98824)(1,0.99608) saods9/ds9/cmaps/tpglpom.sao000644 000765 000000 00000000667 12567403474 016401 0ustar00joyewheel000000 000000 # SAOimage color table # tpglpom # created by cptutils 1.46 # Wed Aug 15 23:31:07 2012 PSEUDOCOLOR RED: (0,0.54118)(0.0125,0.63529)(0.05,0.67843)(0.15,0.72157)(0.25,0.79216)(0.5,0.85882)(0.75,0.93725)(1,0.95686) GREEN: (0,0.61176)(0.0125,0.69412)(0.05,0.7451)(0.15,0.78431)(0.25,0.84314)(0.5,0.89804)(0.75,0.94902)(1,0.97255) BLUE: (0,0.70196)(0.0125,0.79216)(0.05,0.83529)(0.15,0.87451)(0.25,0.9098)(0.5,0.94118)(0.75,0.98824)(1,0.99608) saods9/ds9/cmaps/tpsfhf.sao000644 000765 000000 00000002015 12567403474 016176 0ustar00joyewheel000000 000000 # SAOimage color table # tpsfhf # created by cptutils 1.46 # Wed Aug 15 23:31:06 2012 PSEUDOCOLOR RED: (0,0.17647)(0.0833,0.17647)(0.0833,0.16078)(0.1667,0.16078)(0.1667,0.21569)(0.3334,0.21569)(0.3334,0.27451)(0.5004,0.27451)(0.5004,0.37255)(0.6666,0.37255)(0.6666,0.45098)(0.8333,0.45098)(0.8333,0.56078)(0.9167,0.56078)(0.9167,0.66667)(0.9667,0.66667)(0.9667,0.77647)(0.9833,0.77647)(0.9833,0.88627)(1,0.88627) GREEN: (0,0.49804)(0.0833,0.49804)(0.0833,0.52941)(0.1667,0.52941)(0.1667,0.57255)(0.3334,0.57255)(0.3334,0.60392)(0.5004,0.60392)(0.5004,0.66275)(0.6666,0.66275)(0.6666,0.70196)(0.8333,0.70196)(0.8333,0.76471)(0.9167,0.76471)(0.9167,0.81569)(0.9667,0.81569)(0.9667,0.89804)(0.9833,0.89804)(0.9833,0.94118)(1,0.94118) BLUE: (0,0.58039)(0.0833,0.58039)(0.0833,0.63137)(0.1667,0.63137)(0.1667,0.68627)(0.3334,0.68627)(0.3334,0.7451)(0.5004,0.7451)(0.5004,0.8)(0.6666,0.8)(0.6666,0.81176)(0.8333,0.81176)(0.8333,0.85098)(0.9167,0.85098)(0.9167,0.85882)(0.9667,0.85882)(0.9667,0.90588)(0.9833,0.90588)(0.9833,0.9451)(1,0.9451) saods9/ds9/cmaps/tpsfhm.sao000644 000765 000000 00000001773 12567403474 016217 0ustar00joyewheel000000 000000 # SAOimage color table # tpsfhm # created by cptutils 1.46 # Wed Aug 15 23:31:06 2012 PSEUDOCOLOR RED: (0,0.17647)(0.0833,0.17647)(0.0833,0.16078)(0.1667,0.16078)(0.1667,0.21569)(0.3333,0.21569)(0.3333,0.27451)(0.5,0.27451)(0.5,0.37255)(0.6667,0.37255)(0.6667,0.45098)(0.8333,0.45098)(0.8333,0.56078)(0.9167,0.56078)(0.9167,0.66667)(0.9667,0.66667)(0.9667,0.77647)(0.9833,0.77647)(0.9833,0.88627)(1,0.88627) GREEN: (0,0.49804)(0.0833,0.49804)(0.0833,0.52941)(0.1667,0.52941)(0.1667,0.57255)(0.3333,0.57255)(0.3333,0.60392)(0.5,0.60392)(0.5,0.66275)(0.6667,0.66275)(0.6667,0.70196)(0.8333,0.70196)(0.8333,0.76471)(0.9167,0.76471)(0.9167,0.81569)(0.9667,0.81569)(0.9667,0.89804)(0.9833,0.89804)(0.9833,0.94118)(1,0.94118) BLUE: (0,0.58039)(0.0833,0.58039)(0.0833,0.63137)(0.1667,0.63137)(0.1667,0.68627)(0.3333,0.68627)(0.3333,0.7451)(0.5,0.7451)(0.5,0.8)(0.6667,0.8)(0.6667,0.81176)(0.8333,0.81176)(0.8333,0.85098)(0.9167,0.85098)(0.9167,0.85882)(0.9667,0.85882)(0.9667,0.90588)(0.9833,0.90588)(0.9833,0.9451)(1,0.9451) saods9/ds9/cmaps/tpusarf.sao000644 000765 000000 00000006713 12567403474 016401 0ustar00joyewheel000000 000000 # SAOimage color table # tpusarf # created by cptutils 1.46 # Wed Aug 15 23:31:07 2012 PSEUDOCOLOR RED: (0,0.61176)(0.0139,0.63922)(0.0278,0.67451)(0.0417,0.70196)(0.0556,0.71765)(0.0694,0.73333)(0.0833,0.75686)(0.0972,0.76863)(0.1111,0.78431)(0.125,0.79216)(0.1389,0.79608)(0.1528,0.80392)(0.1667,0.80784)(0.1806,0.81569)(0.1944,0.82353)(0.2083,0.82745)(0.2222,0.83529)(0.2361,0.84706)(0.25,0.85882)(0.2639,0.87059)(0.2778,0.87451)(0.2917,0.87451)(0.3056,0.87451)(0.3194,0.87059)(0.3333,0.87843)(0.3472,0.87451)(0.3611,0.87451)(0.375,0.87059)(0.3889,0.87059)(0.4028,0.87059)(0.4167,0.86667)(0.4306,0.86275)(0.4444,0.86275)(0.4583,0.8549)(0.4722,0.85882)(0.4861,0.86275)(0.5,0.85882)(0.5139,0.85882)(0.5278,0.8549)(0.5417,0.8549)(0.5556,0.8549)(0.5694,0.8549)(0.5833,0.85882)(0.5972,0.85882)(0.6111,0.85882)(0.625,0.85882)(0.6389,0.8549)(0.6528,0.8549)(0.6667,0.8549)(0.6806,0.8549)(0.6944,0.8549)(0.7083,0.8549)(0.7222,0.85098)(0.7361,0.85098)(0.75,0.84706)(0.7639,0.84314)(0.7778,0.84314)(0.7917,0.84314)(0.8056,0.84706)(0.8194,0.85098)(0.8333,0.8549)(0.8472,0.85098)(0.8611,0.8549)(0.875,0.85882)(0.8889,0.85882)(0.9028,0.86667)(0.9167,0.87451)(0.9306,0.88235)(0.9444,0.88627)(0.9583,0.8902)(0.9722,0.89412)(0.9861,0.89804)(1,0.90196) GREEN: (0,0.59608)(0.0139,0.61961)(0.0278,0.66275)(0.0417,0.69412)(0.0556,0.7098)(0.0694,0.72941)(0.0833,0.7451)(0.0972,0.76863)(0.1111,0.77647)(0.125,0.78039)(0.1389,0.78431)(0.1528,0.79216)(0.1667,0.79608)(0.1806,0.80392)(0.1944,0.80784)(0.2083,0.81569)(0.2222,0.81961)(0.2361,0.83137)(0.25,0.83529)(0.2639,0.84314)(0.2778,0.83529)(0.2917,0.83137)(0.3056,0.82745)(0.3194,0.82353)(0.3333,0.81176)(0.3472,0.8)(0.3611,0.79216)(0.375,0.78431)(0.3889,0.77255)(0.4028,0.76863)(0.4167,0.76471)(0.4306,0.76078)(0.4444,0.76078)(0.4583,0.76863)(0.4722,0.77255)(0.4861,0.77647)(0.5,0.77647)(0.5139,0.78431)(0.5278,0.79216)(0.5417,0.79608)(0.5556,0.80392)(0.5694,0.80784)(0.5833,0.81176)(0.5972,0.81176)(0.6111,0.81176)(0.625,0.81176)(0.6389,0.81569)(0.6528,0.81569)(0.6667,0.81569)(0.6806,0.81569)(0.6944,0.81569)(0.7083,0.81569)(0.7222,0.81176)(0.7361,0.80784)(0.75,0.80784)(0.7639,0.81569)(0.7778,0.81569)(0.7917,0.81961)(0.8056,0.82353)(0.8194,0.82745)(0.8333,0.83529)(0.8472,0.83922)(0.8611,0.84706)(0.875,0.8549)(0.8889,0.85882)(0.9028,0.86275)(0.9167,0.87059)(0.9306,0.87451)(0.9444,0.87843)(0.9583,0.88627)(0.9722,0.8902)(0.9861,0.89804)(1,0.90196) BLUE: (0,0.56471)(0.0139,0.59216)(0.0278,0.62353)(0.0417,0.64706)(0.0556,0.66275)(0.0694,0.68235)(0.0833,0.69804)(0.0972,0.71373)(0.1111,0.72549)(0.125,0.72941)(0.1389,0.73333)(0.1528,0.74118)(0.1667,0.7451)(0.1806,0.74902)(0.1944,0.74902)(0.2083,0.75686)(0.2222,0.76078)(0.2361,0.76471)(0.25,0.76471)(0.2639,0.76078)(0.2778,0.76471)(0.2917,0.76078)(0.3056,0.76078)(0.3194,0.75294)(0.3333,0.74118)(0.3472,0.73725)(0.3611,0.72941)(0.375,0.72157)(0.3889,0.71765)(0.4028,0.71373)(0.4167,0.7098)(0.4306,0.70588)(0.4444,0.70588)(0.4583,0.7098)(0.4722,0.71765)(0.4861,0.72941)(0.5,0.73333)(0.5139,0.74118)(0.5278,0.75686)(0.5417,0.76078)(0.5556,0.76863)(0.5694,0.77255)(0.5833,0.77647)(0.5972,0.77647)(0.6111,0.78039)(0.625,0.78431)(0.6389,0.78824)(0.6528,0.79216)(0.6667,0.79216)(0.6806,0.79216)(0.6944,0.79216)(0.7083,0.79216)(0.7222,0.79216)(0.7361,0.79608)(0.75,0.79608)(0.7639,0.8)(0.7778,0.80392)(0.7917,0.80784)(0.8056,0.81176)(0.8194,0.82353)(0.8333,0.82745)(0.8472,0.83137)(0.8611,0.83922)(0.875,0.84706)(0.8889,0.85882)(0.9028,0.8549)(0.9167,0.86275)(0.9306,0.87451)(0.9444,0.87843)(0.9583,0.88627)(0.9722,0.89412)(0.9861,0.89804)(1,0.90196) saods9/ds9/cmaps/tpusarm.sao000644 000765 000000 00000004522 12567403475 016405 0ustar00joyewheel000000 000000 # SAOimage color table # tpusarm # created by cptutils 1.46 # Wed Aug 15 23:31:06 2012 PSEUDOCOLOR RED: (0,0.61176)(0.0208,0.65882)(0.0417,0.70196)(0.0625,0.72549)(0.0833,0.75686)(0.1042,0.77647)(0.125,0.79216)(0.1458,0.8)(0.1667,0.80784)(0.1875,0.81961)(0.2083,0.82745)(0.2292,0.84314)(0.25,0.85882)(0.2708,0.87059)(0.2917,0.87451)(0.3125,0.87059)(0.3333,0.87843)(0.3542,0.87843)(0.375,0.87059)(0.3958,0.87059)(0.4167,0.86667)(0.4375,0.86275)(0.4583,0.8549)(0.4792,0.85882)(0.5,0.85882)(0.5208,0.8549)(0.5417,0.8549)(0.5625,0.8549)(0.5833,0.85882)(0.6042,0.85882)(0.625,0.85882)(0.6458,0.8549)(0.6667,0.8549)(0.6875,0.8549)(0.7083,0.8549)(0.7292,0.85098)(0.75,0.84706)(0.7708,0.84314)(0.7917,0.84314)(0.8125,0.85098)(0.8333,0.8549)(0.8542,0.85098)(0.875,0.85882)(0.8958,0.86275)(0.9167,0.87451)(0.9375,0.88627)(0.9583,0.8902)(0.9792,0.89412)(1,0.90196) GREEN: (0,0.59608)(0.0208,0.64314)(0.0417,0.69412)(0.0625,0.72157)(0.0833,0.7451)(0.1042,0.77255)(0.125,0.78039)(0.1458,0.78824)(0.1667,0.79608)(0.1875,0.80392)(0.2083,0.81569)(0.2292,0.82745)(0.25,0.83529)(0.2708,0.84314)(0.2917,0.83137)(0.3125,0.82353)(0.3333,0.81176)(0.3542,0.79608)(0.375,0.78431)(0.3958,0.77255)(0.4167,0.76471)(0.4375,0.76078)(0.4583,0.76863)(0.4792,0.77255)(0.5,0.77647)(0.5208,0.78824)(0.5417,0.79608)(0.5625,0.80392)(0.5833,0.81176)(0.6042,0.81176)(0.625,0.81176)(0.6458,0.81569)(0.6667,0.81569)(0.6875,0.81569)(0.7083,0.81569)(0.7292,0.80784)(0.75,0.80784)(0.7708,0.81569)(0.7917,0.81961)(0.8125,0.82745)(0.8333,0.83529)(0.8542,0.84314)(0.875,0.8549)(0.8958,0.85882)(0.9167,0.87059)(0.9375,0.87843)(0.9583,0.88627)(0.9792,0.89412)(1,0.90196) BLUE: (0,0.56471)(0.0208,0.60784)(0.0417,0.64706)(0.0625,0.67451)(0.0833,0.69804)(0.1042,0.72157)(0.125,0.72941)(0.1458,0.73725)(0.1667,0.7451)(0.1875,0.74902)(0.2083,0.75686)(0.2292,0.76471)(0.25,0.76471)(0.2708,0.76078)(0.2917,0.76078)(0.3125,0.75686)(0.3333,0.74118)(0.3542,0.73333)(0.375,0.72157)(0.3958,0.71765)(0.4167,0.7098)(0.4375,0.70588)(0.4583,0.7098)(0.4792,0.72549)(0.5,0.73333)(0.5208,0.74902)(0.5417,0.76078)(0.5625,0.76863)(0.5833,0.77647)(0.6042,0.78039)(0.625,0.78431)(0.6458,0.79216)(0.6667,0.79216)(0.6875,0.79216)(0.7083,0.79216)(0.7292,0.79608)(0.75,0.79608)(0.7708,0.8)(0.7917,0.80784)(0.8125,0.81961)(0.8333,0.82745)(0.8542,0.83529)(0.875,0.84706)(0.8958,0.85882)(0.9167,0.86275)(0.9375,0.87843)(0.9583,0.88627)(0.9792,0.89412)(1,0.90196) saods9/ds9/cmaps/tpushuf.sao000644 000765 000000 00000006710 12567403475 016411 0ustar00joyewheel000000 000000 # SAOimage color table # tpushuf # created by cptutils 1.46 # Wed Aug 15 23:31:06 2012 PSEUDOCOLOR RED: (0,0.55686)(0.0139,0.58824)(0.0278,0.61569)(0.0417,0.64314)(0.0556,0.66275)(0.0694,0.68235)(0.0833,0.70196)(0.0972,0.72157)(0.1111,0.73725)(0.125,0.7451)(0.1389,0.75686)(0.1528,0.76863)(0.1667,0.77647)(0.1806,0.78431)(0.1944,0.8)(0.2083,0.81569)(0.2222,0.82745)(0.2361,0.84314)(0.25,0.8549)(0.2639,0.86667)(0.2778,0.87451)(0.2917,0.87843)(0.3056,0.87451)(0.3194,0.87059)(0.3333,0.87843)(0.3472,0.87451)(0.3611,0.87451)(0.375,0.87059)(0.3889,0.87059)(0.4028,0.87059)(0.4167,0.86667)(0.4306,0.86275)(0.4444,0.86275)(0.4583,0.8549)(0.4722,0.85882)(0.4861,0.86275)(0.5,0.85882)(0.5139,0.85882)(0.5278,0.85882)(0.5417,0.8549)(0.5556,0.85098)(0.5694,0.8549)(0.5833,0.85882)(0.5972,0.85882)(0.6111,0.85882)(0.625,0.85882)(0.6389,0.8549)(0.6528,0.8549)(0.6667,0.8549)(0.6806,0.8549)(0.6944,0.8549)(0.7083,0.8549)(0.7222,0.85098)(0.7361,0.85098)(0.75,0.84706)(0.7639,0.84314)(0.7778,0.84706)(0.7917,0.84314)(0.8056,0.84706)(0.8194,0.85098)(0.8333,0.85098)(0.8472,0.84706)(0.8611,0.8549)(0.875,0.85882)(0.8889,0.85882)(0.9028,0.86667)(0.9167,0.87451)(0.9306,0.88235)(0.9444,0.88627)(0.9583,0.8902)(0.9722,0.89412)(0.9861,0.89804)(1,0.90196) GREEN: (0,0.59608)(0.0139,0.63137)(0.0278,0.67843)(0.0417,0.7098)(0.0556,0.73333)(0.0694,0.75294)(0.0833,0.77255)(0.0972,0.79608)(0.1111,0.81176)(0.125,0.81961)(0.1389,0.81961)(0.1528,0.82353)(0.1667,0.82353)(0.1806,0.83137)(0.1944,0.83529)(0.2083,0.83529)(0.2222,0.84314)(0.2361,0.84314)(0.25,0.84314)(0.2639,0.84314)(0.2778,0.83529)(0.2917,0.83137)(0.3056,0.82745)(0.3194,0.82353)(0.3333,0.81176)(0.3472,0.8)(0.3611,0.79216)(0.375,0.78431)(0.3889,0.77255)(0.4028,0.76863)(0.4167,0.76471)(0.4306,0.76078)(0.4444,0.76078)(0.4583,0.76863)(0.4722,0.77255)(0.4861,0.77647)(0.5,0.77647)(0.5139,0.78431)(0.5278,0.79216)(0.5417,0.79608)(0.5556,0.80392)(0.5694,0.80784)(0.5833,0.81176)(0.5972,0.81176)(0.6111,0.81176)(0.625,0.81176)(0.6389,0.81569)(0.6528,0.81569)(0.6667,0.81569)(0.6806,0.81569)(0.6944,0.81569)(0.7083,0.81569)(0.7222,0.81176)(0.7361,0.80784)(0.75,0.80784)(0.7639,0.81569)(0.7778,0.81961)(0.7917,0.82353)(0.8056,0.82353)(0.8194,0.82745)(0.8333,0.83529)(0.8472,0.84314)(0.8611,0.85098)(0.875,0.8549)(0.8889,0.85882)(0.9028,0.86275)(0.9167,0.87059)(0.9306,0.87451)(0.9444,0.87843)(0.9583,0.88627)(0.9722,0.8902)(0.9861,0.89804)(1,0.90196) BLUE: (0,0.56863)(0.0139,0.59608)(0.0278,0.63922)(0.0417,0.66667)(0.0556,0.68235)(0.0694,0.70196)(0.0833,0.72157)(0.0972,0.7451)(0.1111,0.76078)(0.125,0.76078)(0.1389,0.76471)(0.1528,0.76863)(0.1667,0.76471)(0.1806,0.76863)(0.1944,0.77255)(0.2083,0.77255)(0.2222,0.77255)(0.2361,0.77255)(0.25,0.76863)(0.2639,0.76471)(0.2778,0.76471)(0.2917,0.76078)(0.3056,0.76078)(0.3194,0.75294)(0.3333,0.74118)(0.3472,0.73725)(0.3611,0.72941)(0.375,0.72157)(0.3889,0.71765)(0.4028,0.71373)(0.4167,0.7098)(0.4306,0.70588)(0.4444,0.70588)(0.4583,0.7098)(0.4722,0.71765)(0.4861,0.72941)(0.5,0.73333)(0.5139,0.74118)(0.5278,0.75686)(0.5417,0.76078)(0.5556,0.76863)(0.5694,0.77255)(0.5833,0.77647)(0.5972,0.77647)(0.6111,0.78039)(0.625,0.78431)(0.6389,0.78824)(0.6528,0.79216)(0.6667,0.79216)(0.6806,0.79216)(0.6944,0.79216)(0.7083,0.79216)(0.7222,0.79216)(0.7361,0.79608)(0.75,0.79608)(0.7639,0.8)(0.7778,0.80392)(0.7917,0.80784)(0.8056,0.81176)(0.8194,0.82353)(0.8333,0.82745)(0.8472,0.83529)(0.8611,0.84314)(0.875,0.84706)(0.8889,0.85882)(0.9028,0.8549)(0.9167,0.86275)(0.9306,0.87451)(0.9444,0.87843)(0.9583,0.88627)(0.9722,0.8902)(0.9861,0.89804)(1,0.90196) saods9/ds9/cmaps/tpushum.sao000644 000765 000000 00000004522 12567403475 016417 0ustar00joyewheel000000 000000 # SAOimage color table # tpushum # created by cptutils 1.46 # Wed Aug 15 23:31:07 2012 PSEUDOCOLOR RED: (0,0.55686)(0.0208,0.6)(0.0417,0.64314)(0.0625,0.67451)(0.0833,0.70196)(0.1042,0.72941)(0.125,0.7451)(0.1458,0.76078)(0.1667,0.77647)(0.1875,0.79216)(0.2083,0.81569)(0.2292,0.83529)(0.25,0.8549)(0.2708,0.87059)(0.2917,0.87843)(0.3125,0.87059)(0.3333,0.87843)(0.3542,0.87843)(0.375,0.87059)(0.3958,0.87059)(0.4167,0.86667)(0.4375,0.86275)(0.4583,0.8549)(0.4792,0.85882)(0.5,0.85882)(0.5208,0.85882)(0.5417,0.8549)(0.5625,0.85098)(0.5833,0.85882)(0.6042,0.85882)(0.625,0.85882)(0.6458,0.8549)(0.6667,0.8549)(0.6875,0.8549)(0.7083,0.8549)(0.7292,0.85098)(0.75,0.84706)(0.7708,0.84314)(0.7917,0.84314)(0.8125,0.85098)(0.8333,0.85098)(0.8542,0.85098)(0.875,0.85882)(0.8958,0.86275)(0.9167,0.87451)(0.9375,0.88627)(0.9583,0.8902)(0.9792,0.89804)(1,0.90196) GREEN: (0,0.59608)(0.0208,0.6549)(0.0417,0.7098)(0.0625,0.7451)(0.0833,0.77255)(0.1042,0.80392)(0.125,0.81961)(0.1458,0.81961)(0.1667,0.82353)(0.1875,0.83137)(0.2083,0.83529)(0.2292,0.84314)(0.25,0.84314)(0.2708,0.84314)(0.2917,0.83137)(0.3125,0.82353)(0.3333,0.81176)(0.3542,0.79608)(0.375,0.78431)(0.3958,0.77255)(0.4167,0.76471)(0.4375,0.76078)(0.4583,0.76863)(0.4792,0.77255)(0.5,0.77647)(0.5208,0.78824)(0.5417,0.79608)(0.5625,0.80784)(0.5833,0.81176)(0.6042,0.81176)(0.625,0.81176)(0.6458,0.81569)(0.6667,0.81569)(0.6875,0.81569)(0.7083,0.81569)(0.7292,0.80784)(0.75,0.80784)(0.7708,0.81569)(0.7917,0.82353)(0.8125,0.82745)(0.8333,0.83529)(0.8542,0.84706)(0.875,0.8549)(0.8958,0.85882)(0.9167,0.87059)(0.9375,0.87843)(0.9583,0.88627)(0.9792,0.89412)(1,0.90196) BLUE: (0,0.56863)(0.0208,0.61961)(0.0417,0.66667)(0.0625,0.69412)(0.0833,0.72157)(0.1042,0.75294)(0.125,0.76078)(0.1458,0.76471)(0.1667,0.76471)(0.1875,0.76863)(0.2083,0.77255)(0.2292,0.77255)(0.25,0.76863)(0.2708,0.76078)(0.2917,0.76078)(0.3125,0.75686)(0.3333,0.74118)(0.3542,0.73333)(0.375,0.72157)(0.3958,0.71765)(0.4167,0.7098)(0.4375,0.70588)(0.4583,0.7098)(0.4792,0.72549)(0.5,0.73333)(0.5208,0.74902)(0.5417,0.76078)(0.5625,0.76863)(0.5833,0.77647)(0.6042,0.78039)(0.625,0.78431)(0.6458,0.79216)(0.6667,0.79216)(0.6875,0.79216)(0.7083,0.79216)(0.7292,0.79608)(0.75,0.79608)(0.7708,0.8)(0.7917,0.80784)(0.8125,0.81961)(0.8333,0.82745)(0.8542,0.83922)(0.875,0.84706)(0.8958,0.85882)(0.9167,0.86275)(0.9375,0.87843)(0.9583,0.88627)(0.9792,0.89412)(1,0.90196) saods9/ds9/cmaps/viridis.lut000644 000765 000000 00000020422 12567376460 016405 0ustar00joyewheel000000 000000 # matplotlib _cm.py 0.26700401 0.00487433 0.32941519 0.26851048 0.00960483 0.33542652 0.26994384 0.01462494 0.34137895 0.27130489 0.01994186 0.34726862 0.27259384 0.02556309 0.35309303 0.27380934 0.03149748 0.35885256 0.27495242 0.03775181 0.36454323 0.27602238 0.04416723 0.37016418 0.2770184 0.05034437 0.37571452 0.27794143 0.05632444 0.38119074 0.27879067 0.06214536 0.38659204 0.2795655 0.06783587 0.39191723 0.28026658 0.07341724 0.39716349 0.28089358 0.07890703 0.40232944 0.28144581 0.0843197 0.40741404 0.28192358 0.08966622 0.41241521 0.28232739 0.09495545 0.41733086 0.28265633 0.10019576 0.42216032 0.28291049 0.10539345 0.42690202 0.28309095 0.11055307 0.43155375 0.28319704 0.11567966 0.43611482 0.28322882 0.12077701 0.44058404 0.28318684 0.12584799 0.44496 0.283072 0.13089477 0.44924127 0.28288389 0.13592005 0.45342734 0.28262297 0.14092556 0.45751726 0.28229037 0.14591233 0.46150995 0.28188676 0.15088147 0.46540474 0.28141228 0.15583425 0.46920128 0.28086773 0.16077132 0.47289909 0.28025468 0.16569272 0.47649762 0.27957399 0.17059884 0.47999675 0.27882618 0.1754902 0.48339654 0.27801236 0.18036684 0.48669702 0.27713437 0.18522836 0.48989831 0.27619376 0.19007447 0.49300074 0.27519116 0.1949054 0.49600488 0.27412802 0.19972086 0.49891131 0.27300596 0.20452049 0.50172076 0.27182812 0.20930306 0.50443413 0.27059473 0.21406899 0.50705243 0.26930756 0.21881782 0.50957678 0.26796846 0.22354911 0.5120084 0.26657984 0.2282621 0.5143487 0.2651445 0.23295593 0.5165993 0.2636632 0.23763078 0.51876163 0.26213801 0.24228619 0.52083736 0.26057103 0.2469217 0.52282822 0.25896451 0.25153685 0.52473609 0.25732244 0.2561304 0.52656332 0.25564519 0.26070284 0.52831152 0.25393498 0.26525384 0.52998273 0.25219404 0.26978306 0.53157905 0.25042462 0.27429024 0.53310261 0.24862899 0.27877509 0.53455561 0.2468114 0.28323662 0.53594093 0.24497208 0.28767547 0.53726018 0.24311324 0.29209154 0.53851561 0.24123708 0.29648471 0.53970946 0.23934575 0.30085494 0.54084398 0.23744138 0.30520222 0.5419214 0.23552606 0.30952657 0.54294396 0.23360277 0.31382773 0.54391424 0.2316735 0.3181058 0.54483444 0.22973926 0.32236127 0.54570633 0.22780192 0.32659432 0.546532 0.2258633 0.33080515 0.54731353 0.22392515 0.334994 0.54805291 0.22198915 0.33916114 0.54875211 0.22005691 0.34330688 0.54941304 0.21812995 0.34743154 0.55003755 0.21620971 0.35153548 0.55062743 0.21429757 0.35561907 0.5511844 0.21239477 0.35968273 0.55171011 0.2105031 0.36372671 0.55220646 0.20862342 0.36775151 0.55267486 0.20675628 0.37175775 0.55311653 0.20490257 0.37574589 0.55353282 0.20306309 0.37971644 0.55392505 0.20123854 0.38366989 0.55429441 0.1994295 0.38760678 0.55464205 0.1976365 0.39152762 0.55496905 0.19585993 0.39543297 0.55527637 0.19410009 0.39932336 0.55556494 0.19235719 0.40319934 0.55583559 0.19063135 0.40706148 0.55608907 0.18892259 0.41091033 0.55632606 0.18723083 0.41474645 0.55654717 0.18555593 0.4185704 0.55675292 0.18389763 0.42238275 0.55694377 0.18225561 0.42618405 0.5571201 0.18062949 0.42997486 0.55728221 0.17901879 0.43375572 0.55743035 0.17742298 0.4375272 0.55756466 0.17584148 0.44128981 0.55768526 0.17427363 0.4450441 0.55779216 0.17271876 0.4487906 0.55788532 0.17117615 0.4525298 0.55796464 0.16964573 0.45626209 0.55803034 0.16812641 0.45998802 0.55808199 0.1666171 0.46370813 0.55811913 0.16511703 0.4674229 0.55814141 0.16362543 0.47113278 0.55814842 0.16214155 0.47483821 0.55813967 0.16066467 0.47853961 0.55811466 0.15919413 0.4822374 0.5580728 0.15772933 0.48593197 0.55801347 0.15626973 0.4896237 0.557936 0.15481488 0.49331293 0.55783967 0.15336445 0.49700003 0.55772371 0.1519182 0.50068529 0.55758733 0.15047605 0.50436904 0.55742968 0.14903918 0.50805136 0.5572505 0.14760731 0.51173263 0.55704861 0.14618026 0.51541316 0.55682271 0.14475863 0.51909319 0.55657181 0.14334327 0.52277292 0.55629491 0.14193527 0.52645254 0.55599097 0.14053599 0.53013219 0.55565893 0.13914708 0.53381201 0.55529773 0.13777048 0.53749213 0.55490625 0.1364085 0.54117264 0.55448339 0.13506561 0.54485335 0.55402906 0.13374299 0.54853458 0.55354108 0.13244401 0.55221637 0.55301828 0.13117249 0.55589872 0.55245948 0.1299327 0.55958162 0.55186354 0.12872938 0.56326503 0.55122927 0.12756771 0.56694891 0.55055551 0.12645338 0.57063316 0.5498411 0.12539383 0.57431754 0.54908564 0.12439474 0.57800205 0.5482874 0.12346281 0.58168661 0.54744498 0.12260562 0.58537105 0.54655722 0.12183122 0.58905521 0.54562298 0.12114807 0.59273889 0.54464114 0.12056501 0.59642187 0.54361058 0.12009154 0.60010387 0.54253043 0.11973756 0.60378459 0.54139999 0.11951163 0.60746388 0.54021751 0.11942341 0.61114146 0.53898192 0.11948255 0.61481702 0.53769219 0.11969858 0.61849025 0.53634733 0.12008079 0.62216081 0.53494633 0.12063824 0.62582833 0.53348834 0.12137972 0.62949242 0.53197275 0.12231244 0.63315277 0.53039808 0.12344358 0.63680899 0.52876343 0.12477953 0.64046069 0.52706792 0.12632581 0.64410744 0.52531069 0.12808703 0.64774881 0.52349092 0.13006688 0.65138436 0.52160791 0.13226797 0.65501363 0.51966086 0.13469183 0.65863619 0.5176488 0.13733921 0.66225157 0.51557101 0.14020991 0.66585927 0.5134268 0.14330291 0.66945881 0.51121549 0.1466164 0.67304968 0.50893644 0.15014782 0.67663139 0.5065889 0.15389405 0.68020343 0.50417217 0.15785146 0.68376525 0.50168574 0.16201598 0.68731632 0.49912906 0.1663832 0.69085611 0.49650163 0.1709484 0.69438405 0.49380294 0.17570671 0.6978996 0.49103252 0.18065314 0.70140222 0.48818938 0.18578266 0.70489133 0.48527326 0.19109018 0.70836635 0.48228395 0.19657063 0.71182668 0.47922108 0.20221902 0.71527175 0.47608431 0.20803045 0.71870095 0.4728733 0.21400015 0.72211371 0.46958774 0.22012381 0.72550945 0.46622638 0.2263969 0.72888753 0.46278934 0.23281498 0.73224735 0.45927675 0.2393739 0.73558828 0.45568838 0.24606968 0.73890972 0.45202405 0.25289851 0.74221104 0.44828355 0.25985676 0.74549162 0.44446673 0.26694127 0.74875084 0.44057284 0.27414922 0.75198807 0.4366009 0.28147681 0.75520266 0.43255207 0.28892102 0.75839399 0.42842626 0.29647899 0.76156142 0.42422341 0.30414796 0.76470433 0.41994346 0.31192534 0.76782207 0.41558638 0.3198086 0.77091403 0.41115215 0.3277958 0.77397953 0.40664011 0.33588539 0.7770179 0.40204917 0.34407411 0.78002855 0.39738103 0.35235985 0.78301086 0.39263579 0.36074053 0.78596419 0.38781353 0.3692142 0.78888793 0.38291438 0.37777892 0.79178146 0.3779385 0.38643282 0.79464415 0.37288606 0.39517408 0.79747541 0.36775726 0.40400101 0.80027461 0.36255223 0.4129135 0.80304099 0.35726893 0.42190813 0.80577412 0.35191009 0.43098317 0.80847343 0.34647607 0.44013691 0.81113836 0.3409673 0.44936763 0.81376835 0.33538426 0.45867362 0.81636288 0.32972749 0.46805314 0.81892143 0.32399761 0.47750446 0.82144351 0.31819529 0.4870258 0.82392862 0.31232133 0.49661536 0.82637633 0.30637661 0.5062713 0.82878621 0.30036211 0.51599182 0.83115784 0.29427888 0.52577622 0.83349064 0.2881265 0.5356211 0.83578452 0.28190832 0.5455244 0.83803918 0.27562602 0.55548397 0.84025437 0.26928147 0.5654976 0.8424299 0.26287683 0.57556297 0.84456561 0.25641457 0.58567772 0.84666139 0.24989748 0.59583934 0.84871722 0.24332878 0.60604528 0.8507331 0.23671214 0.61629283 0.85270912 0.23005179 0.62657923 0.85464543 0.22335258 0.63690157 0.85654226 0.21662012 0.64725685 0.85839991 0.20986086 0.65764197 0.86021878 0.20308229 0.66805369 0.86199932 0.19629307 0.67848868 0.86374211 0.18950326 0.68894351 0.86544779 0.18272455 0.69941463 0.86711711 0.17597055 0.70989842 0.86875092 0.16925712 0.72039115 0.87035015 0.16260273 0.73088902 0.87191584 0.15602894 0.74138803 0.87344918 0.14956101 0.75188414 0.87495143 0.14322828 0.76237342 0.87642392 0.13706449 0.77285183 0.87786808 0.13110864 0.78331535 0.87928545 0.12540538 0.79375994 0.88067763 0.12000532 0.80418159 0.88204632 0.11496505 0.81457634 0.88339329 0.11034678 0.82494028 0.88472036 0.10621724 0.83526959 0.88602943 0.1026459 0.84556056 0.88732243 0.09970219 0.8558096 0.88860134 0.09745186 0.86601325 0.88986815 0.09595277 0.87616824 0.89112487 0.09525046 0.88627146 0.89237353 0.09537439 0.89632002 0.89361614 0.09633538 0.90631121 0.89485467 0.09812496 0.91624212 0.89609127 0.1007168 0.92610579 0.89732977 0.10407067 0.93590444 0.8985704 0.10813094 0.94563626 0.899815 0.11283773 0.95529972 0.90106534 0.11812832 0.96489353 0.90232311 0.12394051 0.97441665 0.90358991 0.13021494 0.98386829 0.90486726 0.13689671 0.99324789 0.90615657 0.1439362

      Binning and Filtering FITS Event Files

      Return to the DS9 Users Manual


      Synopsis

      When an x-ray event file is loaded, ds9 makes a virtual image for display by binning on one or more axes. This threads describes how to adjust the binning and buffer sizes. Interactive data filtering is described, as well as binning in three dimensions.

      Note that the terms "binning" and "blocking" are used interchangeably in this thread. They both refer to combining pixels in an image.

      If you encounter any problems, please email saord @ cfa.harvard.edu.


      Contents


      Getting Started

      This thread begins with Chandra data from an observation of the Antennae Galaxies (NGC 4038/NGC 4039, ObsID 315). Open the file in ds9:

      unix% ds9 acisf00315N002_evt2.fits &
      

      A small section of the data is visible when the file is loaded, as shown in Figure 1. The target of the observation is partially visible in the display frame.

      By default, the buffer size is set to 1024x1024 and the binning factor is set to 1. These values will be adjusted in the following sections to illustrate how to make more of the data visible.

      The "Bin" menu, shown in Figure 2, will be used to change the setting in the following examples. From top to bottom, this menu contains the bin function setting, blocking factor, buffer size options, and access to the binning parameters dialog box.


      Buffer Size

      The buffer size determines the size of the image generated by ds9. By default, a full-resolution 1024x1024 image of the data is created. If your input data file has larger dimensions, it is clipped to 1024x1024 in ds9. The buffer settings range from 128x128 to 8192x1892.

      Setting the buffer to the smallest size, 128x128, illustrates how it works. The data was centered on the sources in ds9 before the buffer size was changed, creating Figure 3.

      Setting the buffer to a large size, e.g. 4096x4096, produces Figure 4. The display frame is filled by the data, and the panner in the upper right indicates that more of the image is available. Clicking and dragging the viewing bounding box in the panner will display a different portion of the image.


      Binning Basics

      Changing the binning factor

      While increasing the buffer size loads more of the file into ds9, binning the data makes more of it visible in the frame. Binning combines the specified number of pixels into one new pixel; the new pixel has a value equal to the sum of the original pixels. (Note that if the bin method is changed to "average", the pixel values are averaged instead of summed.)

      The binning can changed from the "Bin" menu or from the "Bin" item in the button bar. It's also possible to step through different binning values with the -/+ buttons or the "Block In"/"Block Out" menu items.

      In Figure 5, the buffer size is set to 1024x1024, but the block factor has been set to 4. A larger section of the data is visible in the frame.


      Binning different columns

      ds9 has the ability to display any of the other columns stored in the event file, although it is generally only meaningful to use the spatial vector columns. Begin by opening the "Bin → Binning Parameters" dialog box, shown in Figure 6.

      The "Bin Columns" menus are used to select the columns to be binned. To create an image in detector coordinates, set the first to "detx" and the second to "dety"; the block is set to "2" for both. The "or center of data" box is checked so that the center of the data is recalculated for the new columns.

      Click "Apply" and the ds9 frame is updated, as shown in Figure 7.

      Alternatively, one can display an event file in specific coordinates when starting ds9 from the command line:

      unix% ds9 "acisf00315N002_evt2.fits[bin=detx,dety]" &
      

      Data Cubes: Binning in three dimensions

      It is possible to add a third column to the binning, creating a 3-dimensional image also known as a "data cube". In this example, an (x,y,time) data cube is created of a Chandra observation of Jupiter (ObsID 1463). A cube may be created from any three columns that make sense in the analysis. For instance, you may want to create a PHA or energy axis to see how the spectral characteristics of a source change over time.

      The data file is loaded into a new frame in ds9 and the "Bin → Binning Parameters" dialog box is opened again. The "time" column of the file is selected from the "Bin 3rd Column" menu. The limits of the data in that column are filled in automatically. The "depth" field determines how many intervals the column is divided into; a depth of 25 is used. The completed parameter box is shown in Figure 8.

      After clicking "Apply", two things happen: the "Data Cube" dialog box (Figure 9) is launched and the frame is updated to show only the (x,y) image of the first time slice (Figure 10). (If the data cube dialog box doesn't launch, open it from the "Frame" menu.)

      When "Play" is chosen, ds9 cycles through the bins of the time axis, essentially creating a movie of the (x,y) position of the object over time. The speed of the frame changes is controlled from the "Interval" menu of the dialog box. Any of the 25 intervals may be selected with the slider bar.

      The data cube can be saved as an MPEG movie from the "File → Save Image..." menu. Select "MPEG-1 (Movie)" and click "OK"; after setting the filename, choose an MPEG Quality Factor. The Jupiter data was saved at a quality factor of 15: jupiter.mpg.


      Filtering Data

      The "Bin Filter" field in the "Binning Parameters" dialog box is used to apply filters to the data. A filter can be applied to any of the columns present in the input file. A colon is used to indicate a range of values. Filters can also use < (less than) or > (greater than).

      For instance, to include only the hard-band photons (2500-8000 eV):

      energy=2500:8000

      Clicking "Apply" updates the ds9 display and keeps the dialog open for adjusting the filters.

      Multiple filters may be specified, separated by commas:

      energy=2500:8000, ccd_id=7

      The resulting image is shown in Figure 11.

      The filtered dataset can be saved as a FITS file for use in data analysis from the "File → Save Frame as Fits..." menu.


      History

      26 Jun 2009 Original version

      Return to the DS9 Users Manual

      Catalogs

      Return to the DS9 Users Manual


      Synopsis

      DS9 provides full support for loading, displaying, filtering, and saving catalogs. DS9 allows you to overlay symbols from multiple catalogs on the current image and to create expressions to style the source symbols based on catalog properties.

      If you encounter any problems, please email saord @ cfa.harvard.edu.


      Contents


      Displaying a Catalog

      This thread uses an optical image of the Antennae Galaxies (NGC 4038/NGC 4039) from the Digital Sky Survey (DSS). It was retrieved via the "Analysis → Image Servers" menu in ds9.

      A number of the most popular catalogs are listed by wavelength in the "Analysis → Catalogs" menu. More options can be accessed via the "Search for Catalogs" option in that menu.

      First we overlay sources from 2MASS by choosing "Analysis → Catalogs → Infrared → 2MASS point sources". The source matches are displayed on the ds9 display (Figure 1) and listed in a "Catalog Tool" window (Figure 2).

      A set area centered on the field of view is used for the first catalog search. The center and size of the search area may be adjusted in the Catalog Tool by setting the RA, Dec, height, and width fields. The "Coordinate" and "Size" menus may be used to set the units for those values (degrees/sexagesimal and degrees/arcmin/arcsec, respectively). After changing the values, click the "Retrieve" button to update the Catalog Tool.

      Note that ds9 attempts to select the correct (RA,Dec) columns from the catalog data file in order to display the sources. In some cases, the user will have to explicitly set the column names by using the drop-down menus in the Catalog Tool. In this example, ds9 correctly chose "_RAJ2000" and "_DEJ2000".


      Selecting Sources with the Cursor

      From the "Edit" menu in ds9, choose the "Catalog" cursor type. Clicking on a source in the ds9 display highlights the corresponding row in the Catalog Tool. Multiple sources may be selected by holding down the SHIFT key while clicking them.

      Similarly, highlighting a row in the Catalog Tool will blink the source region in ds9. If the "Pan to" option in the Catalog Tool "Preferences" menu is checked, the ds9 display also centers on the chosen source. Mutiple rows may be selected by holding down the SHIFT or CTRL key while selecting them.


      Displaying Multiple Catalogs

      More than one catalog can be displayed in the same frame. By default, the sources are displayed as green circle points. The color and shape can be changed in the "Symbol" menu of the Catalog Tool to distinguish between the different catalogs.

      In Figure 3, the Chandra Source Catalog has been added to the display (Analysis → Catalogs → High Energy → Chandra Source). The symbols for the CSC sources are set to red diamonds.

      To toggle the display of each catalog, use the "Show Regions" option in the Catalog Tool "Preferences" menu.


      Clearing Catalog Sources

      Simply closing the Catalog Tool will not remove the sources from the display. It is necessary to choose "Clear" from the corresponding Catalog Tool.

      To remove all the sources from the display, use "Analysis → Catalogs → Clear All".

      For the rest of this thread, only the 2MASS sources will be used.


      Sorting and Filtering

      The source listing is sorted on position by default. A different column for sorting may be selected from the "Sort" menu in the Catalog Tool. Related checkboxes determine whether the results are listed in increasing or decreasing order. The Catalog Tool in Figure 4 is sorted on the "Jmag" column in decreasing order.

      The "Filter" field in the Catalog Tool is used to filter out specific rows from the source matches. A filter is conditional expression that is evaluated for each row of the catalog. The column name must be referenced with a dollar sign in the expression, e.g. "$_RAJ2000".

      To select the sources with low Jmag values, the filter "$Jmag<14" is used. Click the "Filter" button to update the Catalog Tool and the ds9 display. The results are shown in Figure 5.

      TCL expression syntax can be used to construct more complex filters. The filter "$Jmag<14 || $Jmag>16.5" uses the logical "OR" syntax ("||") to select any source with Jmag less than 14 or greater than 16.5, as shown in Figure 6.

      The uniformity of the symbols doesn't distinguish between the low-Jmag sources and the high-Jmag sources. The advanced symbol editing in the next section improves on this display.

      Before continuing the thread, clear the filter in the Catalog Tool so that all the sources are displayed.


      Specifying Symbols with Conditional Expressions

      The advanced symbol editing in the Catalog Tool allows you to specify the shape, size, color, and text of each symbol based on catalog column values.

      Open the "Symbol Editor" from the "Symbol → Advanced..." menu in the Catalog Tool. A conditional statement, written in the TCL expression syntax, is entered in the "If" field. The styles that should be applied are set by the other fields (shape, color, text, etc.).

      First, define a rule that sets the sources with Jmag<14 to be red boxcircle points. The completed form is shown in Figure 7. After clicking the "Apply" button, the ds9 display is updated (Figure 8).

      The "Add" button in the Symbol Editor is used to create a new, empty form. The second rule is defined such that sources with Jmag>16.5 will be cyan diamonds. After clicking the "Apply" button again, the ds9 display is as shown in Figure 9.

      To edit an existing rule, highlight the rule in the Symbol Editor and adjust the parameters. In Figure 10, both rules have been updated so that the Text field is set to "$Jmag". This displays the Jmag column value next to the symbol (Figure 11).

      The ds9 Reference Manual has further examples of symbol expressions.

      The set of rules may be saved from the "File" menu in the Symbol Editor. The output for these rules looks like:

      condition       shape   color   text    size    size2   units   angle
      ---------       -----   -----   ----    ----    -----   -----   -----
      $Jmag<14        boxcircle point red     $Jmag                   physical
      $Jmag>16.5      diamond point   cyan    $Jmag                   physical
      

      The file can be loaded into a later ds9 session by opening the Symbol Editor and using the "File → Load" menu item. Note that the column names in the symbol rules may have to be updated in order to use them with a different catalog.


      Saving the Sources: Catalog Files and Region Files

      Saving a Catalog File

      The contents of the Catalog Tool may be saved from the "File → Save" menu. If any filters are applied, the filtered output is saved in the catalog file.

      ds9 supports three catalog formats: VOTable, Starbase, and tab-separated file. If the catalog file will be loaded back into ds9 in the future, any of the three formats may be chosen.

      Saving the Sources in a Region File

      The sources may also be converted to a ds9 region file for use in data analysis, e.g. spectra extraction or calculating sources counts.

      Select "Copy to Regions" from the Catalog Tool "File" menu. Once the sources are converted to regions, individual ones may be selected and edited or deleted, if desired. Save the regions from the "Region → Save Regions..." menu.


      Citing a Catalog in Publication

      If you wish to use the source information in a publication, refer to the "Acknowledgment" item under the "File" menu in the Catalog Tool. For instance, the 2MASS acknowledgment reads:

      Acknowledgments for CDS
      
      This research has made use of the VizieR catalogue access tool, CDS,
      Strasbourg, France. VizieR is a joint effort of CDS (Centre de Données 
      astronomiques de Strasbourg) and ESA-ESRIN (Information Systems Division).
      

      History

      08 Jan 2010 Original version

      Return to the DS9 Users Manual

    Create a True Color Image in an RGB frame

    Return to the DS9 Users Manual


    Synopsis

    Most astronomical images map color to intensity level, e.g. lighter tones may correspond to a brighter intensity level in a greyscale image. An alternative way of presenting data is via an image that correllates color and energy.

    ds9 has the capability to create an RGB image and interactively adjust many of its parameters to achieve optimal display results.

    If you encounter any problems, please email saord @ cfa.harvard.edu.


    Contents


    Creating an RGB Frame

    To use the three-color capabilities of ds9, the data must be loaded into a special RGB frame. This frame will contain all three files, stacked together in separate layers.

    This thread uses Chandra data from an observation of Cas A (ObsID 198); the level=2 event file is named "casa.fits". The same file is loaded into each layer of the RGB frame; different energy filters will be applied to the layers in a later step.

    There are two options for creating the RGB frame:

    A. From the command line

    The command-line syntax can be used to create the RGB frame and load the three files into the red, green, and blue layers:

    unix% ds9 -rgb -red casa.fits \
                   -green casa.fits \
    	       -blue casa.fits &
    

    ds9 will open with the three files in one frame. The RGB window (Figure 1) should open as well. If it doesn't, open it from the "Frame → RGB..." menu.


    B. From the ds9 GUI

    To load the files from the ds9 GUI:

    1. Launch ds9

    2. Choose "New Frame RGB" from the "Frame" menu.

      When the new frame is created, the RGB window (Figure 1) should open as well. If it doesn't, open it from the "Frame → RGB..." menu.

    3. Make sure the "Red" band is selected in the "Current" column of the RGB window, then choose "File → Open..." in the main ds9 window and select the red file.

    4. Change the current band to "Green" in the RGB window and open the green file.

    5. Change the current band to "Blue" in the RGB window and open the blue file.

    Each frame of the RGB image may have different binning, scaling, smoothing, and colorbars applied to it. You can "lock" the frames together, so that the setting is applied to all three frames at once. This is done with the Lock menu in the RGB window (Figure 2); all four options are checked in this thread.

    Use the binning and zoom options in ds9 to adjust the image so that the full region of interest is visible. Figure 3 uses binning=2 and zoom=1. The "Scale" is set to "log: minmax"


    Apply Energy Filters

    The following energy bands are used for the RGB layers:

    • red (soft band): 200-1500 eV
    • green (medium band): 1500-2500 eV
    • blue (hard band): 2500-8000 eV

    The values are just guidelines and may need to be adjusted for your analysis.

    To filter the data, first select the Red frame from the RGB window. Open the Bin → Binning Parameters dialog box and type "energy=200:1500" in the Bin Filter field. Choose "Apply" and the ds9 display will be updated to reflect the energy filter.

    Without closing the Binning Parameters box, select the Green frame. Type "energy=1500:2500" in the Bin Filter field and choose "Apply" again. Repeat these two steps for the Blue layer, using the filter "energy=2500:8000".

    The colors in the image, as seen in Figure 4, are correlated to the energy of the data.


    Smoothing the Data (optional)

    Smoothing can help bring out finer features in the data by removing statistical noise. It is an optional step; experiment with smoothing to see if it improves the appearance of your data.

    The smoothing capability in ds9 lets you interactively smooth the data. Note that for quantitative data analysis, smoothing should be done with the appropriate data analysis software; ds9 does a nice job for publication purposes.

    Choose "Smooth" from the "Analysis" menu and the ds9 display is updated with the results of smoothing. The "Smooth" option can be toggled on and off during your ds9 session.

    Open the "Smoothing Parameters..." dialog box from the same menu to adjust the function and kernel radius of the smoothing. This data were smoothed with a Gaussian function with radius of two. The results are shown in Figure 5.


    Adjusting the Scale Parameters

    This data is being displayed with a "log: minmax" scale. That means that ds9 stretches the scale to encompass the range of pixel values in the file. Adjusting the minimum and maximum scale values sets a threshold for the background data and brings out features.

    To change the minimum and maximum values, open the "Scale → Scale Parameters" dialog box. The pixel distribution shown is for the band selected as "Current" in the RGB window; when the a different band is selected, the histogram of pixel values is updated to match.

    To adjust the values, use the cursor to grab the red (minimum) or green (maximum) vertical lines on the plot and drag them to the desired location. You can type a value in to the "Low" or "High" field and hit "Apply" to set the limits.

    A basic guideline for setting the low value is to minimize the contribution of the background. That is, adjust the minimum of each band until the background of the image is flat (i.e. solid black). For the maximum value, bringing it in to the last data point in the pixel distribution is usually sufficient.

    For ObsID 198 with the smoothing applied, the following limits were chosen (listed as "low:high" pairs):

    • Red - 0.4 : 20
    • Green - 0.3 : 35
    • Blue - 0.1 : 10

    Figure 6 shows the image with the new pixel value limits set.


    Adding a Coordinate Grid

    To add a coordinate grid to the image, choose the "Coordinate Grid" option from the "Analysis" menu. Then choose "Coordinate Grid Parameters" from the same menu to open the preferences dialog (Figure 7).

    From the preferences box, you can change the color, font, line style (solid or dash), and line thickness for all elements of the grid. The font style, size, and color can be edited, and you can add titles. It is also possible to turn off the display of individual items via the "View" menu.

    In Figure 8, we have turned off the grid lines and border. The axes have been changed to "Exterior Axes" (from the "Type" menu).


    Saving the Output

    Once you are happy with your true color image, there are a number of output options in ds9.

    • Image formats: from the "File → Save Image As..." menu, you can choose JPG, PNG, or TIFF file formats.

    • Postscript: to create a postscript file, go to "File → Print..." and select "Print To: File".

    Currently it is not possible to save the state of the ds9 imager, meaning that you cannot save the composite RGB frame and reopen later for further analysis.


    History

    04 Jun 2009 Original version

    Return to the DS9 Users Manual